diff --git a/Multiplayer Core/common_mp/character/c_mp_german_shepherd_vest.gsc b/MP/Core/character/c_mp_german_shepherd_vest.gsc similarity index 100% rename from Multiplayer Core/common_mp/character/c_mp_german_shepherd_vest.gsc rename to MP/Core/character/c_mp_german_shepherd_vest.gsc diff --git a/Multiplayer Core/common_mp/character/c_mp_german_shepherd_vest_black.gsc b/MP/Core/character/c_mp_german_shepherd_vest_black.gsc similarity index 100% rename from Multiplayer Core/common_mp/character/c_mp_german_shepherd_vest_black.gsc rename to MP/Core/character/c_mp_german_shepherd_vest_black.gsc diff --git a/Multiplayer Core/patch_mp/codescripts/character_mp.gsc b/MP/Core/codescripts/character_mp.gsc similarity index 100% rename from Multiplayer Core/patch_mp/codescripts/character_mp.gsc rename to MP/Core/codescripts/character_mp.gsc diff --git a/MP/Core/codescripts/delete.gsc b/MP/Core/codescripts/delete.gsc new file mode 100644 index 0000000..087c3e5 --- /dev/null +++ b/MP/Core/codescripts/delete.gsc @@ -0,0 +1,24 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + assert( isdefined( self ) ); + wait 0; + + if ( isdefined( self ) ) + { +/# + if ( isdefined( self.classname ) ) + { + if ( self.classname == "trigger_once" || self.classname == "trigger_radius" || self.classname == "trigger_multiple" ) + { + println( "" ); + println( "*** trigger debug: delete.gsc is deleting trigger with ent#: " + self getentitynumber() + " at origin: " + self.origin ); + println( "" ); + } + } +#/ + self delete(); + } +} diff --git a/Multiplayer Core/patch_mp/codescripts/struct.gsc b/MP/Core/codescripts/struct.gsc similarity index 100% rename from Multiplayer Core/patch_mp/codescripts/struct.gsc rename to MP/Core/codescripts/struct.gsc diff --git a/MP/Core/common_scripts/utility.gsc b/MP/Core/common_scripts/utility.gsc new file mode 100644 index 0000000..c1f3762 --- /dev/null +++ b/MP/Core/common_scripts/utility.gsc @@ -0,0 +1,1640 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +init_session_mode_flags() +{ + level.gamemode_public_match = 0; + level.gamemode_private_match = 1; + level.gamemode_local_splitscreen = 2; + level.gamemode_wager_match = 3; + level.gamemode_theater = 5; + level.gamemode_league_match = 6; + level.gamemode_rts = 7; + level.language = getdvar( "language" ); +} + +empty( a, b, c, d, e ) +{ + +} + +add_to_array( array, item, allow_dupes ) +{ + if ( !isdefined( item ) ) + return array; + + if ( !isdefined( allow_dupes ) ) + allow_dupes = 1; + + if ( !isdefined( array ) ) + array[0] = item; + else if ( allow_dupes || !isinarray( array, item ) ) + array[array.size] = item; + + return array; +} + +array_copy( array ) +{ + a_copy = []; + + foreach ( elem in array ) + a_copy[a_copy.size] = elem; + + return a_copy; +} + +array_delete( array, is_struct ) +{ + foreach ( ent in array ) + { + if ( isdefined( is_struct ) && is_struct ) + { + ent structdelete(); + ent = undefined; + continue; + } + + if ( isdefined( ent ) ) + ent delete(); + } +} + +array_randomize( array ) +{ + for ( i = 0; i < array.size; i++ ) + { + j = randomint( array.size ); + temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + + return array; +} + +array_reverse( array ) +{ + array2 = []; + + for ( i = array.size - 1; i >= 0; i-- ) + array2[array2.size] = array[i]; + + return array2; +} + +array_exclude( array, arrayexclude ) +{ + newarray = array; + + if ( isarray( arrayexclude ) ) + { + for ( i = 0; i < arrayexclude.size; i++ ) + arrayremovevalue( newarray, arrayexclude[i] ); + } + else + arrayremovevalue( newarray, arrayexclude ); + + return newarray; +} + +array_notify( ents, notifier ) +{ + for ( i = 0; i < ents.size; i++ ) + ents[i] notify( notifier ); +} + +array_wait( array, msg, timeout ) +{ + keys = getarraykeys( array ); + structs = []; + + for ( i = 0; i < keys.size; i++ ) + { + key = keys[i]; + structs[key] = spawnstruct(); + structs[key]._array_wait = 1; + structs[key] thread array_waitlogic1( array[key], msg, timeout ); + } + + for ( i = 0; i < keys.size; i++ ) + { + key = keys[i]; + + if ( isdefined( array[key] ) && structs[key]._array_wait ) + structs[key] waittill( "_array_wait" ); + } +} + +array_wait_any( array, msg, timeout ) +{ + if ( array.size == 0 ) + return undefined; + + keys = getarraykeys( array ); + structs = []; + internal_msg = msg + "array_wait"; + + for ( i = 0; i < keys.size; i++ ) + { + key = keys[i]; + structs[key] = spawnstruct(); + structs[key]._array_wait = 1; + structs[key] thread array_waitlogic3( array[key], msg, internal_msg, timeout ); + } + + level waittill( internal_msg, ent ); + + return ent; +} + +array_waitlogic1( ent, msg, timeout ) +{ + self array_waitlogic2( ent, msg, timeout ); + self._array_wait = 0; + self notify( "_array_wait" ); +} + +array_waitlogic2( ent, msg, timeout ) +{ + ent endon( msg ); + ent endon( "death" ); + + if ( isdefined( timeout ) ) + wait( timeout ); + else + ent waittill( msg ); +} + +array_waitlogic3( ent, msg, internal_msg, timeout ) +{ + if ( msg != "death" ) + ent endon( "death" ); + + level endon( internal_msg ); + self array_waitlogic2( ent, msg, timeout ); + level notify( internal_msg, ent ); +} + +array_check_for_dupes( array, single ) +{ + for ( i = 0; i < array.size; i++ ) + { + if ( array[i] == single ) + return false; + } + + return true; +} + +array_swap( array, index1, index2 ) +{ + assert( index1 < array.size, "index1 to swap out of range" ); + assert( index2 < array.size, "index2 to swap out of range" ); + temp = array[index1]; + array[index1] = array[index2]; + array[index2] = temp; + return array; +} + +array_average( array ) +{ + assert( isarray( array ) ); + assert( array.size > 0 ); + total = 0; + + for ( i = 0; i < array.size; i++ ) + total += array[i]; + + return total / array.size; +} + +array_std_deviation( array, mean ) +{ + assert( isarray( array ) ); + assert( array.size > 0 ); + tmp = []; + + for ( i = 0; i < array.size; i++ ) + tmp[i] = ( array[i] - mean ) * ( array[i] - mean ); + + total = 0; + + for ( i = 0; i < tmp.size; i++ ) + total += tmp[i]; + + return sqrt( total / array.size ); +} + +random_normal_distribution( mean, std_deviation, lower_bound, upper_bound ) +{ + x1 = 0; + x2 = 0; + w = 1; + y1 = 0; + + while ( w >= 1 ) + { + x1 = 2 * randomfloatrange( 0, 1 ) - 1; + x2 = 2 * randomfloatrange( 0, 1 ) - 1; + w = x1 * x1 + x2 * x2; + } + + w = sqrt( -2.0 * log( w ) / w ); + y1 = x1 * w; + number = mean + y1 * std_deviation; + + if ( isdefined( lower_bound ) && number < lower_bound ) + number = lower_bound; + + if ( isdefined( upper_bound ) && number > upper_bound ) + number = upper_bound; + + return number; +} + +random( array ) +{ + keys = getarraykeys( array ); + return array[keys[randomint( keys.size )]]; +} + +get_players( str_team ) +{ + if ( isdefined( str_team ) ) + return getplayers( str_team ); + else + return getplayers(); +} + +is_prefix( msg, prefix ) +{ + if ( prefix.size > msg.size ) + return false; + + for ( i = 0; i < prefix.size; i++ ) + { + if ( msg[i] != prefix[i] ) + return false; + } + + return true; +} + +is_suffix( msg, suffix ) +{ + if ( suffix.size > msg.size ) + return false; + + for ( i = 0; i < suffix.size; i++ ) + { + if ( msg[msg.size - 1 - i] != suffix[suffix.size - 1 - i] ) + return false; + } + + return true; +} + +vector_compare( vec1, vec2 ) +{ + return abs( vec1[0] - vec2[0] ) < 0.001 && abs( vec1[1] - vec2[1] ) < 0.001 && abs( vec1[2] - vec2[2] ) < 0.001; +} + +draw_debug_line( start, end, timer ) +{ +/# + for ( i = 0; i < timer * 20; i++ ) + { + line( start, end, ( 1, 1, 0.5 ) ); + wait 0.05; + } +#/ +} + +waittillend( msg ) +{ + self waittillmatch( msg, "end" ); +} + +random_vector( max_length ) +{ + return ( randomfloatrange( -1 * max_length, max_length ), randomfloatrange( -1 * max_length, max_length ), randomfloatrange( -1 * max_length, max_length ) ); +} + +angle_dif( oldangle, newangle ) +{ + outvalue = ( oldangle - newangle ) % 360; + + if ( outvalue < 0 ) + outvalue += 360; + + if ( outvalue > 180 ) + outvalue = ( outvalue - 360 ) * -1; + + return outvalue; +} + +sign( x ) +{ + if ( x >= 0 ) + return 1; + + return -1; +} + +track( spot_to_track ) +{ + if ( isdefined( self.current_target ) ) + { + if ( spot_to_track == self.current_target ) + return; + } + + self.current_target = spot_to_track; +} + +clear_exception( type ) +{ + assert( isdefined( self.exception[type] ) ); + self.exception[type] = anim.defaultexception; +} + +set_exception( type, func ) +{ + assert( isdefined( self.exception[type] ) ); + self.exception[type] = func; +} + +set_all_exceptions( exceptionfunc ) +{ + keys = getarraykeys( self.exception ); + + for ( i = 0; i < keys.size; i++ ) + self.exception[keys[i]] = exceptionfunc; +} + +cointoss() +{ + return randomint( 100 ) >= 50; +} + +waittill_string( msg, ent ) +{ + if ( msg != "death" ) + self endon( "death" ); + + ent endon( "die" ); + + self waittill( msg ); + + ent notify( "returned", msg ); +} + +waittill_multiple( string1, string2, string3, string4, string5 ) +{ + self endon( "death" ); + ent = spawnstruct(); + ent.threads = 0; + + if ( isdefined( string1 ) ) + { + self thread waittill_string( string1, ent ); + ent.threads++; + } + + if ( isdefined( string2 ) ) + { + self thread waittill_string( string2, ent ); + ent.threads++; + } + + if ( isdefined( string3 ) ) + { + self thread waittill_string( string3, ent ); + ent.threads++; + } + + if ( isdefined( string4 ) ) + { + self thread waittill_string( string4, ent ); + ent.threads++; + } + + if ( isdefined( string5 ) ) + { + self thread waittill_string( string5, ent ); + ent.threads++; + } + + while ( ent.threads ) + { + ent waittill( "returned" ); + + ent.threads--; + } + + ent notify( "die" ); +} + +waittill_multiple_ents( ent1, string1, ent2, string2, ent3, string3, ent4, string4 ) +{ + self endon( "death" ); + ent = spawnstruct(); + ent.threads = 0; + + if ( isdefined( ent1 ) ) + { + assert( isdefined( string1 ) ); + ent1 thread waittill_string( string1, ent ); + ent.threads++; + } + + if ( isdefined( ent2 ) ) + { + assert( isdefined( string2 ) ); + ent2 thread waittill_string( string2, ent ); + ent.threads++; + } + + if ( isdefined( ent3 ) ) + { + assert( isdefined( string3 ) ); + ent3 thread waittill_string( string3, ent ); + ent.threads++; + } + + if ( isdefined( ent4 ) ) + { + assert( isdefined( string4 ) ); + ent4 thread waittill_string( string4, ent ); + ent.threads++; + } + + while ( ent.threads ) + { + ent waittill( "returned" ); + + ent.threads--; + } + + ent notify( "die" ); +} + +waittill_any_return( string1, string2, string3, string4, string5, string6, string7 ) +{ + if ( ( !isdefined( string1 ) || string1 != "death" ) && ( !isdefined( string2 ) || string2 != "death" ) && ( !isdefined( string3 ) || string3 != "death" ) && ( !isdefined( string4 ) || string4 != "death" ) && ( !isdefined( string5 ) || string5 != "death" ) && ( !isdefined( string6 ) || string6 != "death" ) && ( !isdefined( string7 ) || string7 != "death" ) ) + self endon( "death" ); + + ent = spawnstruct(); + + if ( isdefined( string1 ) ) + self thread waittill_string( string1, ent ); + + if ( isdefined( string2 ) ) + self thread waittill_string( string2, ent ); + + if ( isdefined( string3 ) ) + self thread waittill_string( string3, ent ); + + if ( isdefined( string4 ) ) + self thread waittill_string( string4, ent ); + + if ( isdefined( string5 ) ) + self thread waittill_string( string5, ent ); + + if ( isdefined( string6 ) ) + self thread waittill_string( string6, ent ); + + if ( isdefined( string7 ) ) + self thread waittill_string( string7, ent ); + + ent waittill( "returned", msg ); + + ent notify( "die" ); + return msg; +} + +waittill_any_array_return( a_notifies ) +{ + if ( isinarray( a_notifies, "death" ) ) + self endon( "death" ); + + s_tracker = spawnstruct(); + + foreach ( str_notify in a_notifies ) + { + if ( isdefined( str_notify ) ) + self thread waittill_string( str_notify, s_tracker ); + } + + s_tracker waittill( "returned", msg ); + + s_tracker notify( "die" ); + return msg; +} + +waittill_any( str_notify1, str_notify2, str_notify3, str_notify4, str_notify5 ) +{ + assert( isdefined( str_notify1 ) ); + waittill_any_array( array( str_notify1, str_notify2, str_notify3, str_notify4, str_notify5 ) ); +} + +waittill_any_array( a_notifies ) +{ + assert( isdefined( a_notifies[0] ), "At least the first element has to be defined for waittill_any_array." ); + + for ( i = 1; i < a_notifies.size; i++ ) + { + if ( isdefined( a_notifies[i] ) ) + self endon( a_notifies[i] ); + } + + self waittill( a_notifies[0] ); +} + +waittill_any_timeout( n_timeout, string1, string2, string3, string4, string5 ) +{ + if ( ( !isdefined( string1 ) || string1 != "death" ) && ( !isdefined( string2 ) || string2 != "death" ) && ( !isdefined( string3 ) || string3 != "death" ) && ( !isdefined( string4 ) || string4 != "death" ) && ( !isdefined( string5 ) || string5 != "death" ) ) + self endon( "death" ); + + ent = spawnstruct(); + + if ( isdefined( string1 ) ) + self thread waittill_string( string1, ent ); + + if ( isdefined( string2 ) ) + self thread waittill_string( string2, ent ); + + if ( isdefined( string3 ) ) + self thread waittill_string( string3, ent ); + + if ( isdefined( string4 ) ) + self thread waittill_string( string4, ent ); + + if ( isdefined( string5 ) ) + self thread waittill_string( string5, ent ); + + ent thread _timeout( n_timeout ); + + ent waittill( "returned", msg ); + + ent notify( "die" ); + return msg; +} + +_timeout( delay ) +{ + self endon( "die" ); + wait( delay ); + self notify( "returned", "timeout" ); +} + +waittill_any_ents( ent1, string1, ent2, string2, ent3, string3, ent4, string4, ent5, string5, ent6, string6, ent7, string7 ) +{ + assert( isdefined( ent1 ) ); + assert( isdefined( string1 ) ); + + if ( isdefined( ent2 ) && isdefined( string2 ) ) + ent2 endon( string2 ); + + if ( isdefined( ent3 ) && isdefined( string3 ) ) + ent3 endon( string3 ); + + if ( isdefined( ent4 ) && isdefined( string4 ) ) + ent4 endon( string4 ); + + if ( isdefined( ent5 ) && isdefined( string5 ) ) + ent5 endon( string5 ); + + if ( isdefined( ent6 ) && isdefined( string6 ) ) + ent6 endon( string6 ); + + if ( isdefined( ent7 ) && isdefined( string7 ) ) + ent7 endon( string7 ); + + ent1 waittill( string1 ); +} + +waittill_any_ents_two( ent1, string1, ent2, string2 ) +{ + assert( isdefined( ent1 ) ); + assert( isdefined( string1 ) ); + + if ( isdefined( ent2 ) && isdefined( string2 ) ) + ent2 endon( string2 ); + + ent1 waittill( string1 ); +} + +waittill_flag_exists( msg ) +{ + while ( !flag_exists( msg ) ) + { + waittillframeend; + + if ( flag_exists( msg ) ) + break; + + wait 0.05; + } +} + +isflashed() +{ + if ( !isdefined( self.flashendtime ) ) + return 0; + + return gettime() < self.flashendtime; +} + +isstunned() +{ + if ( !isdefined( self.flashendtime ) ) + return 0; + + return gettime() < self.flashendtime; +} + +flag( flagname ) +{ + assert( isdefined( flagname ), "Tried to check flag but the flag was not defined." ); + assert( isdefined( level.flag[flagname] ), "Tried to check flag " + flagname + " but the flag was not initialized." ); + + if ( !level.flag[flagname] ) + return false; + + return true; +} + +flag_delete( flagname ) +{ + if ( isdefined( level.flag[flagname] ) ) + level.flag[flagname] = undefined; + else + { +/# + println( "flag_delete() called on flag that does not exist: " + flagname ); +#/ + } +} + +flag_init( flagname, val, b_is_trigger = 0 ) +{ + if ( !isdefined( level.flag ) ) + level.flag = []; + + if ( !isdefined( level.sp_stat_tracking_func ) ) + level.sp_stat_tracking_func = ::empty; + + if ( !isdefined( level.first_frame ) ) + assert( !isdefined( level.flag[flagname] ), "Attempt to reinitialize existing flag: " + flagname ); + + if ( isdefined( val ) && val ) + level.flag[flagname] = 1; + else + level.flag[flagname] = 0; + + if ( b_is_trigger ) + { + if ( !isdefined( level.trigger_flags ) ) + { + init_trigger_flags(); + level.trigger_flags[flagname] = []; + } + else if ( !isdefined( level.trigger_flags[flagname] ) ) + level.trigger_flags[flagname] = []; + } + + if ( is_suffix( flagname, "aa_" ) ) + thread [[ level.sp_stat_tracking_func ]]( flagname ); +} + +flag_set( flagname ) +{ + assert( isdefined( level.flag[flagname] ), "Attempt to set a flag before calling flag_init: " + flagname ); + level.flag[flagname] = 1; + level notify( flagname ); + set_trigger_flag_permissions( flagname ); +} + +flag_set_for_time( n_time, str_flag ) +{ + level notify( "set_flag_for_time:" + str_flag ); + flag_set( str_flag ); + level endon( "set_flag_for_time:" + str_flag ); + wait( n_time ); + flag_clear( str_flag ); +} + +flag_toggle( flagname ) +{ + if ( flag( flagname ) ) + flag_clear( flagname ); + else + flag_set( flagname ); +} + +flag_wait( flagname ) +{ + level waittill_flag_exists( flagname ); + + while ( !level.flag[flagname] ) + level waittill( flagname ); +} + +flag_wait_any( str_flag1, str_flag2, str_flag3, str_flag4, str_flag5 ) +{ + level flag_wait_any_array( array( str_flag1, str_flag2, str_flag3, str_flag4, str_flag5 ) ); +} + +flag_wait_any_array( a_flags ) +{ + while ( true ) + { + for ( i = 0; i < a_flags.size; i++ ) + { + if ( flag( a_flags[i] ) ) + return a_flags[i]; + } + + level waittill_any_array( a_flags ); + } +} + +flag_clear( flagname ) +{ + assert( isdefined( level.flag[flagname] ), "Attempt to set a flag before calling flag_init: " + flagname ); + + if ( level.flag[flagname] ) + { + level.flag[flagname] = 0; + level notify( flagname ); + set_trigger_flag_permissions( flagname ); + } +} + +flag_waitopen( flagname ) +{ + while ( level.flag[flagname] ) + level waittill( flagname ); +} + +flag_waitopen_array( a_flags ) +{ + foreach ( str_flag in a_flags ) + { + if ( flag( str_flag ) ) + { + flag_waitopen( str_flag ); + continue; + } + } +} + +flag_exists( flagname ) +{ + if ( self == level ) + { + if ( !isdefined( level.flag ) ) + return false; + + if ( isdefined( level.flag[flagname] ) ) + return true; + } + else + { + if ( !isdefined( self.ent_flag ) ) + return false; + + if ( isdefined( self.ent_flag[flagname] ) ) + return true; + } + + return false; +} + +script_gen_dump_addline( string = "nowrite", signature ) +{ + if ( !isdefined( level._loadstarted ) ) + { + if ( !isdefined( level.script_gen_dump_preload ) ) + level.script_gen_dump_preload = []; + + struct = spawnstruct(); + struct.string = string; + struct.signature = signature; + level.script_gen_dump_preload[level.script_gen_dump_preload.size] = struct; + return; + } + + if ( !isdefined( level.script_gen_dump[signature] ) ) + level.script_gen_dump_reasons[level.script_gen_dump_reasons.size] = "Added: " + string; + + level.script_gen_dump[signature] = string; + level.script_gen_dump2[signature] = string; +} + +array_func( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ) +{ + if ( !isdefined( entities ) ) + return; + + if ( isarray( entities ) ) + { + if ( entities.size ) + { + keys = getarraykeys( entities ); + + for ( i = 0; i < keys.size; i++ ) + single_func( entities[keys[i]], func, arg1, arg2, arg3, arg4, arg5, arg6 ); + } + } + else + single_func( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ); +} + +single_func( entity = level, func, arg1, arg2, arg3, arg4, arg5, arg6 ) +{ + if ( isdefined( arg6 ) ) + return entity [[ func ]]( arg1, arg2, arg3, arg4, arg5, arg6 ); + else if ( isdefined( arg5 ) ) + return entity [[ func ]]( arg1, arg2, arg3, arg4, arg5 ); + else if ( isdefined( arg4 ) ) + return entity [[ func ]]( arg1, arg2, arg3, arg4 ); + else if ( isdefined( arg3 ) ) + return entity [[ func ]]( arg1, arg2, arg3 ); + else if ( isdefined( arg2 ) ) + return entity [[ func ]]( arg1, arg2 ); + else if ( isdefined( arg1 ) ) + return entity [[ func ]]( arg1 ); + else + return entity [[ func ]](); +} + +new_func( func, arg1, arg2, arg3, arg4, arg5, arg6 ) +{ + s_func = spawnstruct(); + s_func.func = func; + s_func.arg1 = arg1; + s_func.arg2 = arg2; + s_func.arg3 = arg3; + s_func.arg4 = arg4; + s_func.arg5 = arg5; + s_func.arg6 = arg6; + return s_func; +} + +call_func( s_func ) +{ + return single_func( self, s_func.func, s_func.arg1, s_func.arg2, s_func.arg3, s_func.arg4, s_func.arg5, s_func.arg6 ); +} + +array_thread( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ) +{ + assert( isdefined( entities ), "Undefined entity array passed to common_scriptsutility::array_thread" ); + assert( isdefined( func ), "Undefined function passed to common_scriptsutility::array_thread" ); + + if ( isarray( entities ) ) + { + if ( isdefined( arg6 ) ) + { + foreach ( ent in entities ) + ent thread [[ func ]]( arg1, arg2, arg3, arg4, arg5, arg6 ); + } + else if ( isdefined( arg5 ) ) + { + foreach ( ent in entities ) + ent thread [[ func ]]( arg1, arg2, arg3, arg4, arg5 ); + } + else if ( isdefined( arg4 ) ) + { + foreach ( ent in entities ) + ent thread [[ func ]]( arg1, arg2, arg3, arg4 ); + } + else if ( isdefined( arg3 ) ) + { + foreach ( ent in entities ) + ent thread [[ func ]]( arg1, arg2, arg3 ); + } + else if ( isdefined( arg2 ) ) + { + foreach ( ent in entities ) + ent thread [[ func ]]( arg1, arg2 ); + } + else if ( isdefined( arg1 ) ) + { + foreach ( ent in entities ) + ent thread [[ func ]]( arg1 ); + } + else + { + foreach ( ent in entities ) + ent thread [[ func ]](); + } + } + else + single_thread( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ); +} + +array_ent_thread( entities, func, arg1, arg2, arg3, arg4, arg5 ) +{ + assert( isdefined( entities ), "Undefined entity array passed to common_scriptsutility::array_ent_thread" ); + assert( isdefined( func ), "Undefined function passed to common_scriptsutility::array_ent_thread" ); + + if ( isarray( entities ) ) + { + if ( entities.size ) + { + keys = getarraykeys( entities ); + + for ( i = 0; i < keys.size; i++ ) + single_thread( self, func, entities[keys[i]], arg1, arg2, arg3, arg4, arg5 ); + } + } + else + single_thread( self, func, entities, arg1, arg2, arg3, arg4, arg5 ); +} + +single_thread( entity, func, arg1, arg2, arg3, arg4, arg5, arg6 ) +{ + assert( isdefined( entity ), "Undefined entity passed to common_scriptsutility::single_thread()" ); + + if ( isdefined( arg6 ) ) + entity thread [[ func ]]( arg1, arg2, arg3, arg4, arg5, arg6 ); + else if ( isdefined( arg5 ) ) + entity thread [[ func ]]( arg1, arg2, arg3, arg4, arg5 ); + else if ( isdefined( arg4 ) ) + entity thread [[ func ]]( arg1, arg2, arg3, arg4 ); + else if ( isdefined( arg3 ) ) + entity thread [[ func ]]( arg1, arg2, arg3 ); + else if ( isdefined( arg2 ) ) + entity thread [[ func ]]( arg1, arg2 ); + else if ( isdefined( arg1 ) ) + entity thread [[ func ]]( arg1 ); + else + entity thread [[ func ]](); +} + +remove_undefined_from_array( array ) +{ + newarray = []; + + for ( i = 0; i < array.size; i++ ) + { + if ( !isdefined( array[i] ) ) + continue; + + newarray[newarray.size] = array[i]; + } + + return newarray; +} + +trigger_on( name, type ) +{ + if ( isdefined( name ) ) + { + if ( !isdefined( type ) ) + type = "targetname"; + + ents = getentarray( name, type ); + array_thread( ents, ::trigger_on_proc ); + } + else + self trigger_on_proc(); +} + +trigger_on_proc() +{ + if ( isdefined( self.realorigin ) ) + self.origin = self.realorigin; + + self.trigger_off = undefined; +} + +trigger_off( name, type ) +{ + if ( isdefined( name ) ) + { + if ( !isdefined( type ) ) + type = "targetname"; + + ents = getentarray( name, type ); + array_thread( ents, ::trigger_off_proc ); + } + else + self trigger_off_proc(); +} + +trigger_off_proc() +{ + if ( !isdefined( self.trigger_off ) || !self.trigger_off ) + { + self.realorigin = self.origin; + self.origin += vectorscale( ( 0, 0, -1 ), 10000.0 ); + self.trigger_off = 1; + } +} + +trigger_wait( str_name, str_key = "targetname", e_entity ) +{ + if ( isdefined( str_name ) ) + { + triggers = getentarray( str_name, str_key ); + assert( triggers.size > 0, "trigger not found: " + str_name + " key: " + str_key ); + + if ( triggers.size == 1 ) + { + trigger_hit = triggers[0]; + trigger_hit _trigger_wait( e_entity ); + } + else + { + s_tracker = spawnstruct(); + array_thread( triggers, ::_trigger_wait_think, s_tracker, e_entity ); + + s_tracker waittill( "trigger", e_other, trigger_hit ); + + trigger_hit.who = e_other; + } + + level notify( str_name, trigger_hit.who ); + return trigger_hit; + } + else + return _trigger_wait( e_entity ); +} + +_trigger_wait( e_entity ) +{ + do + { + if ( is_look_trigger( self ) ) + { + self waittill( "trigger_look", e_other ); + + continue; + } + + self waittill( "trigger", e_other ); + } + while ( isdefined( e_entity ) && e_other != e_entity ); + + self.who = e_other; + return self; +} + +_trigger_wait_think( s_tracker, e_entity ) +{ + self endon( "death" ); + s_tracker endon( "trigger" ); + e_other = _trigger_wait( e_entity ); + s_tracker notify( "trigger", e_other, self ); +} + +trigger_use( str_name, str_key = "targetname", ent = get_players()[0], b_assert = 1 ) +{ + if ( isdefined( str_name ) ) + { + e_trig = getent( str_name, str_key ); + + if ( !isdefined( e_trig ) ) + { + if ( b_assert ) + { +/# + assertmsg( "trigger not found: " + str_name + " key: " + str_key ); +#/ + } + + return; + } + } + else + { + e_trig = self; + str_name = self.targetname; + } + + e_trig useby( ent ); + level notify( str_name, ent ); + + if ( is_look_trigger( e_trig ) ) + e_trig notify( "trigger_look" ); + + return e_trig; +} + +set_trigger_flag_permissions( msg ) +{ + if ( !isdefined( level.trigger_flags ) || !isdefined( level.trigger_flags[msg] ) ) + return; + + level.trigger_flags[msg] = remove_undefined_from_array( level.trigger_flags[msg] ); + array_thread( level.trigger_flags[msg], ::update_trigger_based_on_flags ); +} + +update_trigger_based_on_flags() +{ + true_on = 1; + + if ( isdefined( self.script_flag_true ) ) + { + true_on = 0; + tokens = create_flags_and_return_tokens( self.script_flag_true ); + + for ( i = 0; i < tokens.size; i++ ) + { + if ( flag( tokens[i] ) ) + { + true_on = 1; + break; + } + } + } + + false_on = 1; + + if ( isdefined( self.script_flag_false ) ) + { + tokens = create_flags_and_return_tokens( self.script_flag_false ); + + for ( i = 0; i < tokens.size; i++ ) + { + if ( flag( tokens[i] ) ) + { + false_on = 0; + break; + } + } + } + + [[ level.trigger_func[true_on && false_on] ]](); +} + +create_flags_and_return_tokens( flags ) +{ + tokens = strtok( flags, " " ); + + for ( i = 0; i < tokens.size; i++ ) + { + if ( !isdefined( level.flag[tokens[i]] ) ) + flag_init( tokens[i], undefined, 1 ); + } + + return tokens; +} + +init_trigger_flags() +{ + level.trigger_flags = []; + level.trigger_func[1] = ::trigger_on; + level.trigger_func[0] = ::trigger_off; +} + +is_look_trigger( trig ) +{ + return isdefined( trig ) ? trig has_spawnflag( 256 ) && !( !isdefined( trig.classname ) && !isdefined( "trigger_damage" ) || isdefined( trig.classname ) && isdefined( "trigger_damage" ) && trig.classname == "trigger_damage" ) : 0; +} + +is_trigger_once( trig ) +{ + return isdefined( trig ) ? trig has_spawnflag( 1024 ) || !isdefined( self.classname ) && !isdefined( "trigger_once" ) || isdefined( self.classname ) && isdefined( "trigger_once" ) && self.classname == "trigger_once" : 0; +} + +getstruct( name, type = "targetname" ) +{ + assert( isdefined( level.struct_class_names ), "Tried to getstruct before the structs were init" ); + array = level.struct_class_names[type][name]; + + if ( !isdefined( array ) ) + return undefined; + + if ( array.size > 1 ) + { +/# + assertmsg( "getstruct used for more than one struct of type " + type + " called " + name + "." ); +#/ + return undefined; + } + + return array[0]; +} + +getstructarray( name, type = "targetname" ) +{ + assert( isdefined( level.struct_class_names ), "Tried to getstruct before the structs were init" ); + array = level.struct_class_names[type][name]; + + if ( !isdefined( array ) ) + return []; + + return array; +} + +structdelete() +{ + if ( isdefined( self.target ) && isdefined( level.struct_class_names["target"][self.target] ) ) + level.struct_class_names["target"][self.target] = undefined; + + if ( isdefined( self.targetname ) && isdefined( level.struct_class_names["targetname"][self.targetname] ) ) + level.struct_class_names["targetname"][self.targetname] = undefined; + + if ( isdefined( self.script_noteworthy ) && isdefined( level.struct_class_names["script_noteworthy"][self.script_noteworthy] ) ) + level.struct_class_names["script_noteworthy"][self.script_noteworthy] = undefined; + + if ( isdefined( self.script_linkname ) && isdefined( level.struct_class_names["script_linkname"][self.script_linkname] ) ) + level.struct_class_names["script_linkname"][self.script_linkname] = undefined; +} + +struct_class_init() +{ + assert( !isdefined( level.struct_class_names ), "level.struct_class_names is being initialized in the wrong place! It shouldn't be initialized yet." ); + level.struct_class_names = []; + level.struct_class_names["target"] = []; + level.struct_class_names["targetname"] = []; + level.struct_class_names["script_noteworthy"] = []; + level.struct_class_names["script_linkname"] = []; + level.struct_class_names["script_unitrigger_type"] = []; + + foreach ( s_struct in level.struct ) + { + if ( isdefined( s_struct.targetname ) ) + { + if ( !isdefined( level.struct_class_names["targetname"][s_struct.targetname] ) ) + level.struct_class_names["targetname"][s_struct.targetname] = []; + + size = level.struct_class_names["targetname"][s_struct.targetname].size; + level.struct_class_names["targetname"][s_struct.targetname][size] = s_struct; + } + + if ( isdefined( s_struct.target ) ) + { + if ( !isdefined( level.struct_class_names["target"][s_struct.target] ) ) + level.struct_class_names["target"][s_struct.target] = []; + + size = level.struct_class_names["target"][s_struct.target].size; + level.struct_class_names["target"][s_struct.target][size] = s_struct; + } + + if ( isdefined( s_struct.script_noteworthy ) ) + { + if ( !isdefined( level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy] ) ) + level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy] = []; + + size = level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy].size; + level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy][size] = s_struct; + } + + if ( isdefined( s_struct.script_linkname ) ) + { + assert( !isdefined( level.struct_class_names["script_linkname"][s_struct.script_linkname] ), "Two structs have the same linkname" ); + level.struct_class_names["script_linkname"][s_struct.script_linkname][0] = s_struct; + } + + if ( isdefined( s_struct.script_unitrigger_type ) ) + { + if ( !isdefined( level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type] ) ) + level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type] = []; + + size = level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type].size; + level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type][size] = s_struct; + } + } +} + +fileprint_start( file ) +{ +/# + filename = file; + file = openfile( filename, "write" ); + level.fileprint = file; + level.fileprintlinecount = 0; + level.fileprint_filename = filename; +#/ +} + +fileprint_map_start( file ) +{ +/# + file = "map_source/" + file + ".map"; + fileprint_start( file ); + level.fileprint_mapentcount = 0; + fileprint_map_header( 1 ); +#/ +} + +fileprint_chk( file, str ) +{ +/# + level.fileprintlinecount++; + + if ( level.fileprintlinecount > 400 ) + { + wait 0.05; + level.fileprintlinecount++; + level.fileprintlinecount = 0; + } + + fprintln( file, str ); +#/ +} + +fileprint_map_header( binclude_blank_worldspawn = 0 ) +{ + assert( isdefined( level.fileprint ) ); +/# + fileprint_chk( level.fileprint, "iwmap 4" ); + fileprint_chk( level.fileprint, "\"000_Global\" flags active" ); + fileprint_chk( level.fileprint, "\"The Map\" flags" ); + + if ( !binclude_blank_worldspawn ) + return; + + fileprint_map_entity_start(); + fileprint_map_keypairprint( "classname", "worldspawn" ); + fileprint_map_entity_end(); +#/ +} + +fileprint_map_keypairprint( key1, key2 ) +{ +/# + assert( isdefined( level.fileprint ) ); + fileprint_chk( level.fileprint, "\"" + key1 + "\" \"" + key2 + "\"" ); +#/ +} + +fileprint_map_entity_start() +{ +/# + assert( !isdefined( level.fileprint_entitystart ) ); + level.fileprint_entitystart = 1; + assert( isdefined( level.fileprint ) ); + fileprint_chk( level.fileprint, "// entity " + level.fileprint_mapentcount ); + fileprint_chk( level.fileprint, "{" ); + level.fileprint_mapentcount++; +#/ +} + +fileprint_map_entity_end() +{ +/# + assert( isdefined( level.fileprint_entitystart ) ); + assert( isdefined( level.fileprint ) ); + level.fileprint_entitystart = undefined; + fileprint_chk( level.fileprint, "}" ); +#/ +} + +fileprint_end() +{ +/# + assert( !isdefined( level.fileprint_entitystart ) ); + saved = closefile( level.fileprint ); + + if ( saved != 1 ) + { + println( "-----------------------------------" ); + println( " " ); + println( "file write failure" ); + println( "file with name: " + level.fileprint_filename ); + println( "make sure you checkout the file you are trying to save" ); + println( "note: USE P4 Search to find the file and check that one out" ); + println( " Do not checkin files in from the xenonoutput folder, " ); + println( " this is junctioned to the proper directory where you need to go" ); + println( "junctions looks like this" ); + println( " " ); + println( "..\\xenonOutput\\scriptdata\\createfx ..\\share\\raw\\maps\\createfx" ); + println( "..\\xenonOutput\\scriptdata\\createart ..\\share\\raw\\maps\\createart" ); + println( "..\\xenonOutput\\scriptdata\\vision ..\\share\\raw\\vision" ); + println( "..\\xenonOutput\\scriptdata\\scriptgen ..\\share\\raw\\maps\\scriptgen" ); + println( "..\\xenonOutput\\scriptdata\\zone_source ..\\xenon\\zone_source" ); + println( "..\\xenonOutput\\accuracy ..\\share\\raw\\accuracy" ); + println( "..\\xenonOutput\\scriptdata\\map_source ..\\map_source\\xenon_export" ); + println( " " ); + println( "-----------------------------------" ); + println( "File not saved( see console.log for info ) " ); + } + + level.fileprint = undefined; + level.fileprint_filename = undefined; +#/ +} + +fileprint_radiant_vec( vector ) +{ +/# + string = "" + vector[0] + " " + vector[1] + " " + vector[2] + ""; + return string; +#/ +} + +is_mature() +{ + if ( level.onlinegame ) + return 1; + + return getlocalprofileint( "cg_mature" ); +} + +is_german_build() +{ + if ( level.language == "german" ) + return true; + + return false; +} + +is_gib_restricted_build() +{ + if ( getdvar( "language" ) == "japanese" ) + return true; + + return false; +} + +is_true( check ) +{ + return isdefined( check ) && check; +} + +is_false( check ) +{ + return isdefined( check ) && !check; +} + +has_spawnflag( spawnflags ) +{ + if ( isdefined( self.spawnflags ) ) + return ( self.spawnflags & spawnflags ) == spawnflags; + + return 0; +} + +clamp( val, val_min, val_max ) +{ + if ( val < val_min ) + val = val_min; + else if ( val > val_max ) + val = val_max; + + return val; +} + +linear_map( num, min_a, max_a, min_b, max_b ) +{ + return clamp( ( num - min_a ) / ( max_a - min_a ) * ( max_b - min_b ) + min_b, min_b, max_b ); +} + +lag( desired, curr, k, dt ) +{ + r = 0.0; + + if ( k * dt >= 1.0 || k <= 0.0 ) + r = desired; + else + { + err = desired - curr; + r = curr + k * err * dt; + } + + return r; +} + +death_notify_wrapper( attacker, damagetype ) +{ + level notify( "face", "death", self ); + self notify( "death", attacker, damagetype ); +} + +damage_notify_wrapper( damage, attacker, direction_vec, point, type, modelname, tagname, partname, idflags ) +{ + level notify( "face", "damage", self ); + self notify( "damage", damage, attacker, direction_vec, point, type, modelname, tagname, partname, idflags ); +} + +explode_notify_wrapper() +{ + level notify( "face", "explode", self ); + self notify( "explode" ); +} + +alert_notify_wrapper() +{ + level notify( "face", "alert", self ); + self notify( "alert" ); +} + +shoot_notify_wrapper() +{ + level notify( "face", "shoot", self ); + self notify( "shoot" ); +} + +melee_notify_wrapper() +{ + level notify( "face", "melee", self ); + self notify( "melee" ); +} + +isusabilityenabled() +{ + return !self.disabledusability; +} + +_disableusability() +{ + self.disabledusability++; + self disableusability(); +} + +_enableusability() +{ + self.disabledusability--; + assert( self.disabledusability >= 0 ); + + if ( !self.disabledusability ) + self enableusability(); +} + +resetusability() +{ + self.disabledusability = 0; + self enableusability(); +} + +_disableweapon() +{ + if ( !isdefined( self.disabledweapon ) ) + self.disabledweapon = 0; + + self.disabledweapon++; + self disableweapons(); +} + +_enableweapon() +{ + self.disabledweapon--; + assert( self.disabledweapon >= 0 ); + + if ( !self.disabledweapon ) + self enableweapons(); +} + +isweaponenabled() +{ + return !self.disabledweapon; +} + +delay_thread( timer, func, param1, param2, param3, param4, param5, param6 ) +{ + self thread _delay_thread_proc( func, timer, param1, param2, param3, param4, param5, param6 ); +} + +_delay_thread_proc( func, timer, param1, param2, param3, param4, param5, param6 ) +{ + self endon( "death" ); + self endon( "disconnect" ); + wait( timer ); + single_thread( self, func, param1, param2, param3, param4, param5, param6 ); +} + +delay_notify( str_notify, n_delay, str_endon ) +{ + assert( isdefined( str_notify ) ); + assert( isdefined( n_delay ) ); + self thread _delay_notify_proc( str_notify, n_delay, str_endon ); +} + +_delay_notify_proc( str_notify, n_delay, str_endon ) +{ + self endon( "death" ); + + if ( isdefined( str_endon ) ) + self endon( str_endon ); + + if ( n_delay > 0 ) + wait( n_delay ); + + self notify( str_notify ); +} + +notify_delay_with_ender( snotifystring, fdelay, ender ) +{ + if ( isdefined( ender ) ) + level endon( ender ); + + assert( isdefined( self ) ); + assert( isdefined( snotifystring ) ); + assert( isdefined( fdelay ) ); + self endon( "death" ); + + if ( fdelay > 0 ) + wait( fdelay ); + + if ( !isdefined( self ) ) + return; + + self notify( snotifystring ); +} diff --git a/Multiplayer Core/patch_mp/maps/mp/_acousticsensor.gsc b/MP/Core/maps/mp/_acousticsensor.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_acousticsensor.gsc rename to MP/Core/maps/mp/_acousticsensor.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_ambientpackage.gsc b/MP/Core/maps/mp/_ambientpackage.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_ambientpackage.gsc rename to MP/Core/maps/mp/_ambientpackage.gsc diff --git a/MP/Core/maps/mp/_art.gsc b/MP/Core/maps/mp/_art.gsc new file mode 100644 index 0000000..41f00e2 --- /dev/null +++ b/MP/Core/maps/mp/_art.gsc @@ -0,0 +1,473 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; + +main() +{ +/# + if ( getdvar( "scr_art_tweak" ) == "" || getdvar( "scr_art_tweak" ) == "0" ) + setdvar( "scr_art_tweak", 0 ); + + if ( getdvar( "scr_dof_enable" ) == "" ) + setdvar( "scr_dof_enable", "1" ); + + if ( getdvar( "scr_cinematic_autofocus" ) == "" ) + setdvar( "scr_cinematic_autofocus", "1" ); + + if ( getdvar( "scr_art_visionfile" ) == "" && isdefined( level.script ) ) + setdvar( "scr_art_visionfile", level.script ); + + if ( getdvar( "debug_reflection" ) == "" ) + setdvar( "debug_reflection", "0" ); + + if ( getdvar( "debug_reflection_matte" ) == "" ) + setdvar( "debug_reflection_matte", "0" ); + + if ( getdvar( "debug_color_pallete" ) == "" ) + setdvar( "debug_color_pallete", "0" ); + + precachemodel( "test_sphere_lambert" ); + precachemodel( "test_macbeth_chart" ); + precachemodel( "test_macbeth_chart_unlit" ); + precachemodel( "test_sphere_silver" ); + level thread debug_reflection(); + level thread debug_reflection_matte(); + level thread debug_color_pallete(); +#/ + if ( !isdefined( level.dofdefault ) ) + { + level.dofdefault["nearStart"] = 0; + level.dofdefault["nearEnd"] = 1; + level.dofdefault["farStart"] = 8000; + level.dofdefault["farEnd"] = 10000; + level.dofdefault["nearBlur"] = 6; + level.dofdefault["farBlur"] = 0; + } + + level.curdof = ( level.dofdefault["farStart"] - level.dofdefault["nearEnd"] ) / 2; +/# + thread tweakart(); +#/ + if ( !isdefined( level.script ) ) + level.script = tolower( getdvar( "mapname" ) ); +} + +artfxprintln( file, string ) +{ +/# + if ( file == -1 ) + return; + + fprintln( file, string ); +#/ +} + +strtok_loc( string, par1 ) +{ + stringlist = []; + indexstring = ""; + + for ( i = 0; i < string.size; i++ ) + { + if ( string[i] == " " ) + { + stringlist[stringlist.size] = indexstring; + indexstring = ""; + continue; + } + + indexstring += string[i]; + } + + if ( indexstring.size ) + stringlist[stringlist.size] = indexstring; + + return stringlist; +} + +setfogsliders() +{ + fogall = strtok_loc( getdvar( "g_fogColorReadOnly" ), " " ); + red = fogall[0]; + green = fogall[1]; + blue = fogall[2]; + halfplane = getdvar( "g_fogHalfDistReadOnly" ); + nearplane = getdvar( "g_fogStartDistReadOnly" ); + + if ( !isdefined( red ) || !isdefined( green ) || !isdefined( blue ) || !isdefined( halfplane ) ) + { + red = 1; + green = 1; + blue = 1; + halfplane = 10000001; + nearplane = 10000000; + } + + setdvar( "scr_fog_exp_halfplane", halfplane ); + setdvar( "scr_fog_nearplane", nearplane ); + setdvar( "scr_fog_color", red + " " + green + " " + blue ); +} + +tweakart() +{ +/# + if ( !isdefined( level.tweakfile ) ) + level.tweakfile = 0; + + if ( getdvar( "scr_fog_baseheight" ) == "" ) + { + setdvar( "scr_fog_exp_halfplane", "500" ); + setdvar( "scr_fog_exp_halfheight", "500" ); + setdvar( "scr_fog_nearplane", "0" ); + setdvar( "scr_fog_baseheight", "0" ); + } + + setdvar( "scr_fog_fraction", "1.0" ); + setdvar( "scr_art_dump", "0" ); + setdvar( "scr_art_sun_fog_dir_set", "0" ); + setdvar( "scr_dof_nearStart", level.dofdefault["nearStart"] ); + setdvar( "scr_dof_nearEnd", level.dofdefault["nearEnd"] ); + setdvar( "scr_dof_farStart", level.dofdefault["farStart"] ); + setdvar( "scr_dof_farEnd", level.dofdefault["farEnd"] ); + setdvar( "scr_dof_nearBlur", level.dofdefault["nearBlur"] ); + setdvar( "scr_dof_farBlur", level.dofdefault["farBlur"] ); + file = undefined; + filename = undefined; + tweak_toggle = 1; + + for (;;) + { + while ( getdvarint( "scr_art_tweak" ) == 0 ) + { + tweak_toggle = 1; + wait 0.05; + } + + if ( tweak_toggle ) + { + tweak_toggle = 0; + fogsettings = getfogsettings(); + setdvar( "scr_fog_nearplane", fogsettings[0] ); + setdvar( "scr_fog_exp_halfplane", fogsettings[1] ); + setdvar( "scr_fog_exp_halfheight", fogsettings[3] ); + setdvar( "scr_fog_baseheight", fogsettings[2] ); + setdvar( "scr_fog_color", fogsettings[4] + " " + fogsettings[5] + " " + fogsettings[6] ); + setdvar( "scr_fog_color_scale", fogsettings[7] ); + setdvar( "scr_sun_fog_color", fogsettings[8] + " " + fogsettings[9] + " " + fogsettings[10] ); + level.fogsundir = []; + level.fogsundir[0] = fogsettings[11]; + level.fogsundir[1] = fogsettings[12]; + level.fogsundir[2] = fogsettings[13]; + setdvar( "scr_sun_fog_start_angle", fogsettings[14] ); + setdvar( "scr_sun_fog_end_angle", fogsettings[15] ); + setdvar( "scr_fog_max_opacity", fogsettings[16] ); + } + + level.fogexphalfplane = getdvarfloat( "scr_fog_exp_halfplane" ); + level.fogexphalfheight = getdvarfloat( "scr_fog_exp_halfheight" ); + level.fognearplane = getdvarfloat( "scr_fog_nearplane" ); + level.fogbaseheight = getdvarfloat( "scr_fog_baseheight" ); + level.fogcolorred = getdvarcolorred( "scr_fog_color" ); + level.fogcolorgreen = getdvarcolorgreen( "scr_fog_color" ); + level.fogcolorblue = getdvarcolorblue( "scr_fog_color" ); + level.fogcolorscale = getdvarfloat( "scr_fog_color_scale" ); + level.sunfogcolorred = getdvarcolorred( "scr_sun_fog_color" ); + level.sunfogcolorgreen = getdvarcolorgreen( "scr_sun_fog_color" ); + level.sunfogcolorblue = getdvarcolorblue( "scr_sun_fog_color" ); + level.sunstartangle = getdvarfloat( "scr_sun_fog_start_angle" ); + level.sunendangle = getdvarfloat( "scr_sun_fog_end_angle" ); + level.fogmaxopacity = getdvarfloat( "scr_fog_max_opacity" ); + + if ( getdvarint( "scr_art_sun_fog_dir_set" ) ) + { + setdvar( "scr_art_sun_fog_dir_set", "0" ); + println( "Setting sun fog direction to facing of player" ); + players = get_players(); + dir = vectornormalize( anglestoforward( players[0] getplayerangles() ) ); + level.fogsundir = []; + level.fogsundir[0] = dir[0]; + level.fogsundir[1] = dir[1]; + level.fogsundir[2] = dir[2]; + } + + fovslidercheck(); + dumpsettings(); + + if ( !getdvarint( _hash_DBBD8F3B ) ) + { + if ( !isdefined( level.fogsundir ) ) + { + level.fogsundir = []; + level.fogsundir[0] = 1; + level.fogsundir[1] = 0; + level.fogsundir[2] = 0; + } + + setvolfog( level.fognearplane, level.fogexphalfplane, level.fogexphalfheight, level.fogbaseheight, level.fogcolorred, level.fogcolorgreen, level.fogcolorblue, level.fogcolorscale, level.sunfogcolorred, level.sunfogcolorgreen, level.sunfogcolorblue, level.fogsundir[0], level.fogsundir[1], level.fogsundir[2], level.sunstartangle, level.sunendangle, 0, level.fogmaxopacity ); + } + else + setexpfog( 100000000, 100000001, 0, 0, 0, 0 ); + + wait 0.1; + } +#/ +} + +fovslidercheck() +{ + if ( level.dofdefault["nearStart"] >= level.dofdefault["nearEnd"] ) + { + level.dofdefault["nearStart"] = level.dofdefault["nearEnd"] - 1; + setdvar( "scr_dof_nearStart", level.dofdefault["nearStart"] ); + } + + if ( level.dofdefault["nearEnd"] <= level.dofdefault["nearStart"] ) + { + level.dofdefault["nearEnd"] = level.dofdefault["nearStart"] + 1; + setdvar( "scr_dof_nearEnd", level.dofdefault["nearEnd"] ); + } + + if ( level.dofdefault["farStart"] >= level.dofdefault["farEnd"] ) + { + level.dofdefault["farStart"] = level.dofdefault["farEnd"] - 1; + setdvar( "scr_dof_farStart", level.dofdefault["farStart"] ); + } + + if ( level.dofdefault["farEnd"] <= level.dofdefault["farStart"] ) + { + level.dofdefault["farEnd"] = level.dofdefault["farStart"] + 1; + setdvar( "scr_dof_farEnd", level.dofdefault["farEnd"] ); + } + + if ( level.dofdefault["farBlur"] >= level.dofdefault["nearBlur"] ) + { + level.dofdefault["farBlur"] = level.dofdefault["nearBlur"] - 0.1; + setdvar( "scr_dof_farBlur", level.dofdefault["farBlur"] ); + } + + if ( level.dofdefault["farStart"] <= level.dofdefault["nearEnd"] ) + { + level.dofdefault["farStart"] = level.dofdefault["nearEnd"] + 1; + setdvar( "scr_dof_farStart", level.dofdefault["farStart"] ); + } +} + +dumpsettings() +{ +/# + if ( getdvar( "scr_art_dump" ) != "0" ) + { + println( "\\tstart_dist = " + level.fognearplane + ";" ); + println( "\\thalf_dist = " + level.fogexphalfplane + ";" ); + println( "\\thalf_height = " + level.fogexphalfheight + ";" ); + println( "\\tbase_height = " + level.fogbaseheight + ";" ); + println( "\\tfog_r = " + level.fogcolorred + ";" ); + println( "\\tfog_g = " + level.fogcolorgreen + ";" ); + println( "\\tfog_b = " + level.fogcolorblue + ";" ); + println( "\\tfog_scale = " + level.fogcolorscale + ";" ); + println( "\\tsun_col_r = " + level.sunfogcolorred + ";" ); + println( "\\tsun_col_g = " + level.sunfogcolorgreen + ";" ); + println( "\\tsun_col_b = " + level.sunfogcolorblue + ";" ); + println( "\\tsun_dir_x = " + level.fogsundir[0] + ";" ); + println( "\\tsun_dir_y = " + level.fogsundir[1] + ";" ); + println( "\\tsun_dir_z = " + level.fogsundir[2] + ";" ); + println( "\\tsun_start_ang = " + level.sunstartangle + ";" ); + println( "\\tsun_stop_ang = " + level.sunendangle + ";" ); + println( "\\ttime = 0;" ); + println( "\\tmax_fog_opacity = " + level.fogmaxopacity + ";" ); + println( "" ); + println( "\\tsetVolFog(start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale," ); + println( "\\t\\tsun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, " ); + println( "\\t\\tsun_stop_ang, time, max_fog_opacity);" ); + setdvar( "scr_art_dump", "0" ); + } +#/ +} + +debug_reflection() +{ +/# + level.debug_reflection = 0; + + while ( true ) + { + wait 0.1; + + if ( getdvar( "debug_reflection" ) == "2" && level.debug_reflection != 2 || getdvar( "debug_reflection" ) == "3" && level.debug_reflection != 3 ) + { + remove_reflection_objects(); + + if ( getdvar( "debug_reflection" ) == "2" ) + { + create_reflection_objects(); + level.debug_reflection = 2; + } + else + { + create_reflection_objects(); + create_reflection_object(); + level.debug_reflection = 3; + } + } + else if ( getdvar( "debug_reflection" ) == "1" && level.debug_reflection != 1 ) + { + setdvar( "debug_reflection_matte", "0" ); + setdvar( "debug_color_pallete", "0" ); + remove_reflection_objects(); + create_reflection_object(); + level.debug_reflection = 1; + } + else if ( getdvar( "debug_reflection" ) == "0" && level.debug_reflection != 0 ) + { + remove_reflection_objects(); + level.debug_reflection = 0; + } + } +#/ +} + +remove_reflection_objects() +{ +/# + if ( ( level.debug_reflection == 2 || level.debug_reflection == 3 ) && isdefined( level.debug_reflection_objects ) ) + { + for ( i = 0; i < level.debug_reflection_objects.size; i++ ) + level.debug_reflection_objects[i] delete(); + + level.debug_reflection_objects = undefined; + } + + if ( level.debug_reflection == 1 || level.debug_reflection == 3 || level.debug_reflection_matte == 1 || level.debug_color_pallete == 1 || level.debug_color_pallete == 2 ) + { + if ( isdefined( level.debug_reflectionobject ) ) + level.debug_reflectionobject delete(); + } +#/ +} + +create_reflection_objects() +{ +/# + reflection_locs = getreflectionlocs(); + + for ( i = 0; i < reflection_locs.size; i++ ) + { + level.debug_reflection_objects[i] = spawn( "script_model", reflection_locs[i] ); + level.debug_reflection_objects[i] setmodel( "test_sphere_silver" ); + } +#/ +} + +create_reflection_object( model = "test_sphere_silver" ) +{ +/# + if ( isdefined( level.debug_reflectionobject ) ) + level.debug_reflectionobject delete(); + + players = get_players(); + player = players[0]; + level.debug_reflectionobject = spawn( "script_model", player geteye() + vectorscale( anglestoforward( player.angles ), 100 ) ); + level.debug_reflectionobject setmodel( model ); + level.debug_reflectionobject.origin = player geteye() + vectorscale( anglestoforward( player getplayerangles() ), 100 ); + level.debug_reflectionobject linkto( player ); + thread debug_reflection_buttons(); +#/ +} + +debug_reflection_buttons() +{ +/# + level notify( "new_reflection_button_running" ); + level endon( "new_reflection_button_running" ); + level.debug_reflectionobject endon( "death" ); + offset = 100; + lastoffset = offset; + + while ( getdvar( "debug_reflection" ) == "1" || getdvar( "debug_reflection" ) == "3" || getdvar( "debug_reflection_matte" ) == "1" || getdvar( "debug_color_pallete" ) == "1" || getdvar( "debug_color_pallete" ) == "2" ) + { + players = get_players(); + + if ( players[0] buttonpressed( "BUTTON_X" ) ) + offset += 50; + + if ( players[0] buttonpressed( "BUTTON_Y" ) ) + offset -= 50; + + if ( offset > 1000 ) + offset = 1000; + + if ( offset < 64 ) + offset = 64; + + level.debug_reflectionobject unlink(); + level.debug_reflectionobject.origin = players[0] geteye() + vectorscale( anglestoforward( players[0] getplayerangles() ), offset ); + temp_angles = vectortoangles( players[0].origin - level.debug_reflectionobject.origin ); + level.debug_reflectionobject.angles = ( 0, temp_angles[1], 0 ); + lastoffset = offset; + line( level.debug_reflectionobject.origin, getreflectionorigin( level.debug_reflectionobject.origin ), ( 1, 0, 0 ), 1, 1 ); + wait 0.05; + + if ( isdefined( level.debug_reflectionobject ) ) + level.debug_reflectionobject linkto( players[0] ); + } +#/ +} + +debug_reflection_matte() +{ +/# + level.debug_reflection_matte = 0; + + while ( true ) + { + wait 0.1; + + if ( getdvar( "debug_reflection_matte" ) == "1" && level.debug_reflection_matte != 1 ) + { + setdvar( "debug_reflection", "0" ); + setdvar( "debug_color_pallete", "0" ); + remove_reflection_objects(); + create_reflection_object( "test_sphere_lambert" ); + level.debug_reflection_matte = 1; + } + else if ( getdvar( "debug_reflection_matte" ) == "0" && level.debug_reflection_matte != 0 ) + { + remove_reflection_objects(); + level.debug_reflection_matte = 0; + } + } +#/ +} + +debug_color_pallete() +{ +/# + level.debug_color_pallete = 0; + + while ( true ) + { + wait 0.1; + + if ( getdvar( "debug_color_pallete" ) == "1" && level.debug_color_pallete != 1 ) + { + setdvar( "debug_reflection", "0" ); + setdvar( "debug_reflection_matte", "0" ); + remove_reflection_objects(); + create_reflection_object( "test_macbeth_chart" ); + level.debug_color_pallete = 1; + } + else if ( getdvar( "debug_color_pallete" ) == "2" && level.debug_color_pallete != 2 ) + { + remove_reflection_objects(); + create_reflection_object( "test_macbeth_chart_unlit" ); + level.debug_color_pallete = 2; + } + else if ( getdvar( "debug_color_pallete" ) == "0" && level.debug_color_pallete != 0 ) + { + remove_reflection_objects(); + level.debug_color_pallete = 0; + } + } +#/ +} diff --git a/Multiplayer Core/patch_mp/maps/mp/_audio.gsc b/MP/Core/maps/mp/_audio.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_audio.gsc rename to MP/Core/maps/mp/_audio.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_ballistic_knife.gsc b/MP/Core/maps/mp/_ballistic_knife.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_ballistic_knife.gsc rename to MP/Core/maps/mp/_ballistic_knife.gsc diff --git a/MP/Core/maps/mp/_bb.gsc b/MP/Core/maps/mp/_bb.gsc new file mode 100644 index 0000000..7e6832f --- /dev/null +++ b/MP/Core/maps/mp/_bb.gsc @@ -0,0 +1,89 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; + +init() +{ + level thread onplayerconnect(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connected", player ); + + player thread onplayerspawned(); + player thread onplayerdeath(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + self._bbdata = []; + + for (;;) + { + self waittill( "spawned_player" ); + + self._bbdata["score"] = 0; + self._bbdata["momentum"] = 0; + self._bbdata["spawntime"] = gettime(); + self._bbdata["shots"] = 0; + self._bbdata["hits"] = 0; + } +} + +onplayerdisconnect() +{ + for (;;) + { + self waittill( "disconnect" ); + + self commitspawndata(); + break; + } +} + +onplayerdeath() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "death" ); + + self commitspawndata(); + } +} + +commitspawndata() +{ + assert( isdefined( self._bbdata ) ); + + if ( !isdefined( self._bbdata ) ) + return; + + bbprint( "mpplayerlives", "gametime %d spawnid %d lifescore %d lifemomentum %d lifetime %d name %s", gettime(), getplayerspawnid( self ), self._bbdata["score"], self._bbdata["momentum"], gettime() - self._bbdata["spawntime"], self.name ); +} + +commitweapondata( spawnid, currentweapon, time0 ) +{ + assert( isdefined( self._bbdata ) ); + + if ( !isdefined( self._bbdata ) ) + return; + + time1 = gettime(); + bbprint( "mpweapons", "spawnid %d name %s duration %d shots %d hits %d", spawnid, currentweapon, time1 - time0, self._bbdata["shots"], self._bbdata["hits"] ); + self._bbdata["shots"] = 0; + self._bbdata["hits"] = 0; +} + +bbaddtostat( statname, delta ) +{ + if ( isdefined( self._bbdata ) && isdefined( self._bbdata[statname] ) ) + self._bbdata[statname] += delta; +} diff --git a/Multiplayer Core/patch_mp/maps/mp/_bouncingbetty.gsc b/MP/Core/maps/mp/_bouncingbetty.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_bouncingbetty.gsc rename to MP/Core/maps/mp/_bouncingbetty.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_burnplayer.gsc b/MP/Core/maps/mp/_burnplayer.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_burnplayer.gsc rename to MP/Core/maps/mp/_burnplayer.gsc diff --git a/MP/Core/maps/mp/_busing.gsc b/MP/Core/maps/mp/_busing.gsc new file mode 100644 index 0000000..6928e30 --- /dev/null +++ b/MP/Core/maps/mp/_busing.gsc @@ -0,0 +1,18 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +businit() +{ + assert( level.clientscripts ); + level.busstate = ""; + registerclientsys( "busCmd" ); +} + +setbusstate( state ) +{ + if ( level.busstate != state ) + setclientsysstate( "busCmd", state ); + + level.busstate = state; +} diff --git a/MP/Core/maps/mp/_challenges.gsc b/MP/Core/maps/mp/_challenges.gsc new file mode 100644 index 0000000..e5ca8f3 --- /dev/null +++ b/MP/Core/maps/mp/_challenges.gsc @@ -0,0 +1,1876 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; + +init() +{ + if ( !isdefined( level.challengescallbacks ) ) + level.challengescallbacks = []; + + waittillframeend; + + if ( canprocesschallenges() ) + { + registerchallengescallback( "playerKilled", ::challengekills ); + registerchallengescallback( "gameEnd", ::challengegameend ); + registerchallengescallback( "roundEnd", ::challengeroundend ); + } + + level thread onplayerconnect(); + + foreach ( team in level.teams ) + initteamchallenges( team ); +} + +addflyswatterstat( weapon, aircraft ) +{ + if ( !isdefined( self.pers["flyswattercount"] ) ) + self.pers["flyswattercount"] = 0; + + self addweaponstat( weapon, "destroyed_aircraft", 1 ); + self.pers["flyswattercount"]++; + + if ( self.pers["flyswattercount"] == 5 ) + self addweaponstat( weapon, "destroyed_5_aircraft", 1 ); + + if ( isdefined( aircraft ) && isdefined( aircraft.birthtime ) ) + { + if ( gettime() - aircraft.birthtime < 20000 ) + self addweaponstat( weapon, "destroyed_aircraft_under20s", 1 ); + } + + if ( !isdefined( self.destroyedaircrafttime ) ) + self.destroyedaircrafttime = []; + + if ( isdefined( self.destroyedaircrafttime[weapon] ) && gettime() - self.destroyedaircrafttime[weapon] < 10000 ) + { + self addweaponstat( weapon, "destroyed_2aircraft_quickly", 1 ); + self.destroyedaircrafttime[weapon] = undefined; + } + else + self.destroyedaircrafttime[weapon] = gettime(); +} + +canprocesschallenges() +{ +/# + if ( getdvarintdefault( "scr_debug_challenges", 0 ) ) + return true; +#/ + if ( level.rankedmatch || level.wagermatch ) + return true; + + return false; +} + +initteamchallenges( team ) +{ + if ( !isdefined( game["challenge"] ) ) + game["challenge"] = []; + + if ( !isdefined( game["challenge"][team] ) ) + { + game["challenge"][team] = []; + game["challenge"][team]["plantedBomb"] = 0; + game["challenge"][team]["destroyedBombSite"] = 0; + game["challenge"][team]["capturedFlag"] = 0; + } + + game["challenge"][team]["allAlive"] = 1; +} + +registerchallengescallback( callback, func ) +{ + if ( !isdefined( level.challengescallbacks[callback] ) ) + level.challengescallbacks[callback] = []; + + level.challengescallbacks[callback][level.challengescallbacks[callback].size] = func; +} + +dochallengecallback( callback, data ) +{ + if ( !isdefined( level.challengescallbacks ) ) + return; + + if ( !isdefined( level.challengescallbacks[callback] ) ) + return; + + if ( isdefined( data ) ) + { + for ( i = 0; i < level.challengescallbacks[callback].size; i++ ) + thread [[ level.challengescallbacks[callback][i] ]]( data ); + } + else + { + for ( i = 0; i < level.challengescallbacks[callback].size; i++ ) + thread [[ level.challengescallbacks[callback][i] ]](); + } +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connected", player ); + + player thread initchallengedata(); + player thread spawnwatcher(); + player thread monitorreloads(); + } +} + +monitorreloads() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "reload" ); + + currentweapon = self getcurrentweapon(); + + if ( currentweapon == "none" ) + continue; + + time = gettime(); + self.lastreloadtime = time; + + if ( currentweapon == "crossbow_mp" ) + self.crossbowclipkillcount = 0; + + if ( weaponhasattachment( currentweapon, "dualclip" ) ) + self thread reloadthenkill( currentweapon ); + } +} + +reloadthenkill( reloadweapon ) +{ + self endon( "disconnect" ); + self endon( "death" ); + self endon( "reloadThenKillTimedOut" ); + self notify( "reloadThenKillStart" ); + self endon( "reloadThenKillStart" ); + self thread reloadthenkilltimeout( 5 ); + + for (;;) + { + self waittill( "killed_enemy_player", time, weapon ); + + if ( reloadweapon == weapon ) + self addplayerstat( "reload_then_kill_dualclip", 1 ); + } +} + +reloadthenkilltimeout( time ) +{ + self endon( "disconnect" ); + self endon( "death" ); + self endon( "reloadThenKillStart" ); + wait( time ); + self notify( "reloadThenKillTimedOut" ); +} + +initchallengedata() +{ + self.pers["bulletStreak"] = 0; + self.pers["lastBulletKillTime"] = 0; + self.pers["stickExplosiveKill"] = 0; + self.pers["carepackagesCalled"] = 0; + self.explosiveinfo = []; +} + +isdamagefromplayercontrolledaitank( eattacker, einflictor, sweapon ) +{ + if ( sweapon == "ai_tank_drone_gun_mp" ) + { + if ( isdefined( eattacker ) && isdefined( eattacker.remoteweapon ) && isdefined( einflictor ) ) + { + if ( isdefined( einflictor.controlled ) && einflictor.controlled == 1 ) + { + if ( eattacker.remoteweapon == einflictor ) + return true; + } + } + } + else if ( sweapon == "ai_tank_drone_rocket_mp" ) + { + if ( isdefined( einflictor ) && !isdefined( einflictor.from_ai ) ) + return true; + } + + return false; +} + +isdamagefromplayercontrolledsentry( eattacker, einflictor, sweapon ) +{ + if ( sweapon == "auto_gun_turret_mp" ) + { + if ( isdefined( eattacker ) && isdefined( eattacker.remoteweapon ) && isdefined( einflictor ) ) + { + if ( eattacker.remoteweapon == einflictor ) + { + if ( isdefined( einflictor.controlled ) && einflictor.controlled == 1 ) + return true; + } + } + } + + return false; +} + +challengekills( data, time ) +{ + victim = data.victim; + player = data.attacker; + attacker = data.attacker; + time = data.time; + victim = data.victim; + weapon = data.sweapon; + time = data.time; + inflictor = data.einflictor; + meansofdeath = data.smeansofdeath; + wasplanting = data.wasplanting; + wasdefusing = data.wasdefusing; + lastweaponbeforetoss = data.lastweaponbeforetoss; + ownerweaponatlaunch = data.ownerweaponatlaunch; + + if ( !isdefined( data.sweapon ) ) + return; + + if ( !isdefined( player ) || !isplayer( player ) ) + return; + + weaponclass = getweaponclass( weapon ); + game["challenge"][victim.team]["allAlive"] = 0; + + if ( level.teambased ) + { + if ( player.team == victim.team ) + return; + } + else if ( player == victim ) + return; + + if ( isdamagefromplayercontrolledaitank( player, inflictor, weapon ) == 1 ) + player addplayerstat( "kill_with_remote_control_ai_tank", 1 ); + + if ( weapon == "auto_gun_turret_mp" ) + { + if ( isdefined( inflictor ) ) + { + if ( !isdefined( inflictor.killcount ) ) + inflictor.killcount = 0; + + inflictor.killcount++; + + if ( inflictor.killcount >= 5 ) + { + inflictor.killcount = 0; + player addplayerstat( "killstreak_5_with_sentry_gun", 1 ); + } + } + + if ( isdamagefromplayercontrolledsentry( player, inflictor, weapon ) == 1 ) + player addplayerstat( "kill_with_remote_control_sentry_gun", 1 ); + } + + if ( weapon == "minigun_mp" || weapon == "inventory_minigun_mp" ) + { + player.deathmachinekills++; + + if ( player.deathmachinekills >= 5 ) + { + player.deathmachinekills = 0; + player addplayerstat( "killstreak_5_with_death_machine", 1 ); + } + } + + if ( data.waslockingon == 1 && weapon == "chopper_minigun_mp" ) + player addplayerstat( "kill_enemy_locking_on_with_chopper_gunner", 1 ); + + if ( isdefined( level.iskillstreakweapon ) ) + { + if ( [[ level.iskillstreakweapon ]]( data.sweapon ) ) + return; + } + + attacker notify( "killed_enemy_player", time, weapon ); + + if ( isdefined( player.primaryloadoutweapon ) && weapon == player.primaryloadoutweapon || isdefined( player.primaryloadoutaltweapon ) && weapon == player.primaryloadoutaltweapon ) + { + if ( player isbonuscardactive( 0, player.class_num ) ) + { + player addbonuscardstat( 0, "kills", 1, player.class_num ); + player addplayerstat( "kill_with_loadout_weapon_with_3_attachments", 1 ); + } + + if ( isdefined( player.secondaryweaponkill ) && player.secondaryweaponkill == 1 ) + { + player.primaryweaponkill = 0; + player.secondaryweaponkill = 0; + + if ( player isbonuscardactive( 2, player.class_num ) ) + { + player addbonuscardstat( 2, "kills", 1, player.class_num ); + player addplayerstat( "kill_with_both_primary_weapons", 1 ); + } + } + else + player.primaryweaponkill = 1; + } + else if ( isdefined( player.secondaryloadoutweapon ) && weapon == player.secondaryloadoutweapon || isdefined( player.secondaryloadoutaltweapon ) && weapon == player.secondaryloadoutaltweapon ) + { + if ( player isbonuscardactive( 1, player.class_num ) ) + player addbonuscardstat( 1, "kills", 1, player.class_num ); + + if ( isdefined( player.primaryweaponkill ) && player.primaryweaponkill == 1 ) + { + player.primaryweaponkill = 0; + player.secondaryweaponkill = 0; + + if ( player isbonuscardactive( 2, player.class_num ) ) + { + player addbonuscardstat( 2, "kills", 1, player.class_num ); + player addplayerstat( "kill_with_both_primary_weapons", 1 ); + } + } + else + player.secondaryweaponkill = 1; + } + + if ( player isbonuscardactive( 5, player.class_num ) || player isbonuscardactive( 4, player.class_num ) || player isbonuscardactive( 3, player.class_num ) ) + player addplayerstat( "kill_with_2_perks_same_category", 1 ); + + baseweaponname = getreffromitemindex( getbaseweaponitemindex( weapon ) ) + "_mp"; + + if ( isdefined( player.weaponkills[baseweaponname] ) ) + { + player.weaponkills[baseweaponname]++; + + if ( player.weaponkills[baseweaponname] == 5 ) + player addweaponstat( baseweaponname, "killstreak_5", 1 ); + + if ( player.weaponkills[baseweaponname] == 10 ) + player addweaponstat( baseweaponname, "killstreak_10", 1 ); + } + else + player.weaponkills[baseweaponname] = 1; + + attachmentname = player getweaponoptic( weapon ); + + if ( isdefined( attachmentname ) && attachmentname != "" ) + { + if ( isdefined( player.attachmentkills[attachmentname] ) ) + { + player.attachmentkills[attachmentname]++; + + if ( player.attachmentkills[attachmentname] == 5 ) + player addweaponstat( weapon, "killstreak_5_attachment", 1 ); + } + else + player.attachmentkills[attachmentname] = 1; + } + + assert( isdefined( player.activecounteruavs ) ); + assert( isdefined( player.activeuavs ) ); + assert( isdefined( player.activesatellites ) ); + + if ( player.activeuavs > 0 ) + player addplayerstat( "kill_while_uav_active", 1 ); + + if ( player.activecounteruavs > 0 ) + player addplayerstat( "kill_while_cuav_active", 1 ); + + if ( player.activesatellites > 0 ) + player addplayerstat( "kill_while_satellite_active", 1 ); + + if ( isdefined( attacker.tacticalinsertiontime ) && attacker.tacticalinsertiontime + 5000 > time ) + { + player addplayerstat( "kill_after_tac_insert", 1 ); + player addweaponstat( "tactical_insertion_mp", "CombatRecordStat", 1 ); + } + + if ( isdefined( victim.tacticalinsertiontime ) && victim.tacticalinsertiontime + 5000 > time ) + player addweaponstat( "tactical_insertion_mp", "headshots", 1 ); + + if ( isdefined( level.isplayertrackedfunc ) ) + { + if ( attacker [[ level.isplayertrackedfunc ]]( victim, time ) ) + { + attacker addplayerstat( "kill_enemy_revealed_by_sensor", 1 ); + attacker addweaponstat( "sensor_grenade_mp", "CombatRecordStat", 1 ); + } + } + + if ( level.teambased ) + { + activeempowner = level.empowners[player.team]; + + if ( isdefined( activeempowner ) ) + { + if ( activeempowner == player ) + player addplayerstat( "kill_while_emp_active", 1 ); + } + } + else if ( isdefined( level.empplayer ) ) + { + if ( level.empplayer == player ) + player addplayerstat( "kill_while_emp_active", 1 ); + } + + if ( isdefined( player.flakjacketclaymore[victim.clientid] ) && player.flakjacketclaymore[victim.clientid] == 1 ) + player addplayerstat( "survive_claymore_kill_planter_flak_jacket_equipped", 1 ); + + if ( isdefined( player.dogsactive ) ) + { + if ( weapon != "dog_bite_mp" ) + { + player.dogsactivekillstreak++; + + if ( player.dogsactivekillstreak > 5 ) + player addplayerstat( "killstreak_5_dogs", 1 ); + } + } + + isstunned = 0; + + if ( victim maps\mp\_utility::isflashbanged() ) + { + if ( isdefined( victim.lastflashedby ) && victim.lastflashedby == player ) + { + player addplayerstat( "kill_flashed_enemy", 1 ); + player addweaponstat( "flash_grenade_mp", "CombatRecordStat", 1 ); + } + + isstunned = 1; + } + + if ( isdefined( victim.concussionendtime ) && victim.concussionendtime > gettime() ) + { + if ( isdefined( victim.lastconcussedby ) && victim.lastconcussedby == player ) + { + player addplayerstat( "kill_concussed_enemy", 1 ); + player addweaponstat( "concussion_grenade_mp", "CombatRecordStat", 1 ); + } + + isstunned = 1; + } + + if ( isdefined( player.laststunnedby ) ) + { + if ( player.laststunnedby == victim && player.laststunnedtime + 5000 > time ) + player addplayerstat( "kill_enemy_who_shocked_you", 1 ); + } + + if ( isdefined( victim.laststunnedby ) && victim.laststunnedtime + 5000 > time ) + { + isstunned = 1; + + if ( victim.laststunnedby == player ) + { + player addplayerstat( "kill_shocked_enemy", 1 ); + player addweaponstat( "proximity_grenade_mp", "CombatRecordStat", 1 ); + + if ( data.smeansofdeath == "MOD_MELEE" ) + player addplayerstat( "shock_enemy_then_stab_them", 1 ); + } + } + + if ( player.mantletime + 5000 > time ) + player addplayerstat( "mantle_then_kill", 1 ); + + if ( isdefined( player.tookweaponfrom ) && isdefined( player.tookweaponfrom[weapon] ) && isdefined( player.tookweaponfrom[weapon].previousowner ) ) + { + if ( level.teambased ) + { + if ( player.tookweaponfrom[weapon].previousowner.team != player.team ) + { + player.pickedupweaponkills[weapon]++; + player addplayerstat( "kill_enemy_with_picked_up_weapon", 1 ); + } + } + else + { + player.pickedupweaponkills[weapon]++; + player addplayerstat( "kill_enemy_with_picked_up_weapon", 1 ); + } + + if ( player.pickedupweaponkills[weapon] >= 5 ) + { + player.pickedupweaponkills[weapon] = 0; + player addplayerstat( "killstreak_5_picked_up_weapon", 1 ); + } + } + + if ( isdefined( victim.explosiveinfo["originalOwnerKill"] ) && victim.explosiveinfo["originalOwnerKill"] == 1 ) + { + if ( victim.explosiveinfo["damageExplosiveKill"] == 1 ) + player addplayerstat( "kill_enemy_shoot_their_explosive", 1 ); + } + + if ( data.attackerstance == "crouch" ) + player addplayerstat( "kill_enemy_while_crouched", 1 ); + else if ( data.attackerstance == "prone" ) + player addplayerstat( "kill_enemy_while_prone", 1 ); + + if ( data.victimstance == "prone" ) + player addplayerstat( "kill_prone_enemy", 1 ); + + if ( data.smeansofdeath == "MOD_HEAD_SHOT" || data.smeansofdeath == "MOD_PISTOL_BULLET" || data.smeansofdeath == "MOD_RIFLE_BULLET" ) + player genericbulletkill( data, victim, weapon ); + + if ( level.teambased ) + { + if ( !isdefined( player.pers["kill_every_enemy"] ) && ( level.playercount[victim.pers["team"]] > 3 && player.pers["killed_players"].size >= level.playercount[victim.pers["team"]] ) ) + { + player addplayerstat( "kill_every_enemy", 1 ); + player.pers["kill_every_enemy"] = 1; + } + } + + switch ( weaponclass ) + { + case "weapon_pistol": + if ( data.smeansofdeath == "MOD_HEAD_SHOT" ) + { + player.pers["pistolHeadshot"]++; + + if ( player.pers["pistolHeadshot"] >= 10 ) + { + player.pers["pistolHeadshot"] = 0; + player addplayerstat( "pistolHeadshot_10_onegame", 1 ); + } + } + + break; + case "weapon_assault": + if ( data.smeansofdeath == "MOD_HEAD_SHOT" ) + { + player.pers["assaultRifleHeadshot"]++; + + if ( player.pers["assaultRifleHeadshot"] >= 5 ) + { + player.pers["assaultRifleHeadshot"] = 0; + player addplayerstat( "headshot_assault_5_onegame", 1 ); + } + } + + break; + case "weapon_smg": + case "weapon_lmg": + break; + case "weapon_sniper": + if ( isdefined( victim.firsttimedamaged ) && victim.firsttimedamaged == time ) + { + player addplayerstat( "kill_enemy_one_bullet_sniper", 1 ); + player addweaponstat( weapon, "kill_enemy_one_bullet_sniper", 1 ); + + if ( !isdefined( player.pers["one_shot_sniper_kills"] ) ) + player.pers["one_shot_sniper_kills"] = 0; + + player.pers["one_shot_sniper_kills"]++; + + if ( player.pers["one_shot_sniper_kills"] == 10 ) + player addplayerstat( "kill_10_enemy_one_bullet_sniper_onegame", 1 ); + } + + break; + case "weapon_cqb": + if ( isdefined( victim.firsttimedamaged ) && victim.firsttimedamaged == time ) + { + player addplayerstat( "kill_enemy_one_bullet_shotgun", 1 ); + player addweaponstat( weapon, "kill_enemy_one_bullet_shotgun", 1 ); + + if ( !isdefined( player.pers["one_shot_shotgun_kills"] ) ) + player.pers["one_shot_shotgun_kills"] = 0; + + player.pers["one_shot_shotgun_kills"]++; + + if ( player.pers["one_shot_shotgun_kills"] == 10 ) + player addplayerstat( "kill_10_enemy_one_bullet_shotgun_onegame", 1 ); + } + + break; + } + + if ( data.smeansofdeath == "MOD_MELEE" ) + { + if ( weaponhasattachment( weapon, "tacknife" ) ) + { + player addplayerstat( "kill_enemy_with_tacknife", 1 ); + player bladekill(); + } + else if ( weapon == "knife_ballistic_mp" ) + { + player bladekill(); + player addweaponstat( weapon, "ballistic_knife_melee", 1 ); + } + else if ( weapon == "knife_held_mp" || weapon == "knife_mp" ) + player bladekill(); + else if ( weapon == "riotshield_mp" ) + { + if ( victim.lastfiretime + 3000 > time ) + player addweaponstat( weapon, "shield_melee_while_enemy_shooting", 1 ); + } + } + else + { + if ( data.smeansofdeath == "MOD_IMPACT" && baseweaponname == "crossbow_mp" ) + { + if ( weaponhasattachment( weapon, "stackfire" ) ) + player addplayerstat( "KILL_CROSSBOW_STACKFIRE", 1 ); + } + else if ( isdefined( ownerweaponatlaunch ) ) + { + if ( weaponhasattachment( ownerweaponatlaunch, "stackfire" ) ) + player addplayerstat( "KILL_CROSSBOW_STACKFIRE", 1 ); + } + + if ( weapon == "knife_ballistic_mp" ) + { + player bladekill(); + + if ( isdefined( player.retreivedblades ) && player.retreivedblades > 0 ) + { + player.retreivedblades--; + player addweaponstat( weapon, "kill_retrieved_blade", 1 ); + } + } + } + + lethalgrenadekill = 0; + + switch ( weapon ) + { + case "bouncingbetty_mp": + lethalgrenadekill = 1; + player notify( "lethalGrenadeKill" ); + break; + case "hatchet_mp": + player bladekill(); + lethalgrenadekill = 1; + player notify( "lethalGrenadeKill" ); + + if ( isdefined( lastweaponbeforetoss ) ) + { + if ( lastweaponbeforetoss == level.riotshield_name ) + { + player addweaponstat( level.riotshield_name, "hatchet_kill_with_shield_equiped", 1 ); + player addplayerstat( "hatchet_kill_with_shield_equiped", 1 ); + } + } + + break; + case "claymore_mp": + lethalgrenadekill = 1; + player notify( "lethalGrenadeKill" ); + player addplayerstat( "kill_with_claymore", 1 ); + + if ( data.washacked ) + player addplayerstat( "kill_with_hacked_claymore", 1 ); + + break; + case "satchel_charge_mp": + lethalgrenadekill = 1; + player notify( "lethalGrenadeKill" ); + player addplayerstat( "kill_with_c4", 1 ); + break; + case "destructible_car_mp": + player addplayerstat( "kill_enemy_withcar", 1 ); + + if ( isdefined( inflictor.destroyingweapon ) ) + player addweaponstat( inflictor.destroyingweapon, "kills_from_cars", 1 ); + + break; + case "sticky_grenade_mp": + lethalgrenadekill = 1; + player notify( "lethalGrenadeKill" ); + + if ( isdefined( victim.explosiveinfo["stuckToPlayer"] ) && victim.explosiveinfo["stuckToPlayer"] == victim ) + { + attacker.pers["stickExplosiveKill"]++; + + if ( attacker.pers["stickExplosiveKill"] >= 5 ) + { + attacker.pers["stickExplosiveKill"] = 0; + player addplayerstat( "stick_explosive_kill_5_onegame", 1 ); + } + } + + break; + case "frag_grenade_mp": + lethalgrenadekill = 1; + player notify( "lethalGrenadeKill" ); + + if ( isdefined( data.victim.explosiveinfo["cookedKill"] ) && data.victim.explosiveinfo["cookedKill"] == 1 ) + player addplayerstat( "kill_with_cooked_grenade", 1 ); + + if ( isdefined( data.victim.explosiveinfo["throwbackKill"] ) && data.victim.explosiveinfo["throwbackKill"] == 1 ) + player addplayerstat( "kill_with_tossed_back_lethal", 1 ); + + break; + case "explosive_bolt_mp": + case "crossbow_mp": + if ( !isdefined( player.crossbowclipkillcount ) ) + player.crossbowclipkillcount = 0; + + player.crossbowclipkillcount++; + + if ( player.crossbowclipkillcount >= weaponclipsize( "crossbow_mp" ) ) + { + player.crossbowclipkillcount = 0; + player addweaponstat( "crossbow_mp", "crossbow_kill_clip", 1 ); + } + + break; + } + + if ( lethalgrenadekill ) + { + if ( player isbonuscardactive( 6, player.class_num ) ) + { + player addbonuscardstat( 6, "kills", 1, player.class_num ); + + if ( !isdefined( player.pers["dangerCloseKills"] ) ) + player.pers["dangerCloseKills"] = 0; + + player.pers["dangerCloseKills"]++; + + if ( player.pers["dangerCloseKills"] == 5 ) + player addplayerstat( "kill_with_dual_lethal_grenades", 1 ); + } + } + + player perkkills( victim, isstunned, time ); +} + +perkkills( victim, isstunned, time ) +{ + player = self; + + if ( player hasperk( "specialty_movefaster" ) ) + player addplayerstat( "perk_movefaster_kills", 1 ); + + if ( player hasperk( "specialty_noname" ) ) + player addplayerstat( "perk_noname_kills", 1 ); + + if ( player hasperk( "specialty_quieter" ) ) + player addplayerstat( "perk_quieter_kills", 1 ); + + if ( player hasperk( "specialty_longersprint" ) ) + { + if ( isdefined( player.lastsprinttime ) && gettime() - player.lastsprinttime < 2500 ) + player addplayerstat( "perk_longersprint", 1 ); + } + + if ( player hasperk( "specialty_fastmantle" ) ) + { + if ( isdefined( player.lastsprinttime ) && gettime() - player.lastsprinttime < 2500 && player playerads() >= 1 ) + player addplayerstat( "perk_fastmantle_kills", 1 ); + } + + if ( player hasperk( "specialty_loudenemies" ) ) + player addplayerstat( "perk_loudenemies_kills", 1 ); + + if ( isstunned == 1 && player hasperk( "specialty_stunprotection" ) ) + player addplayerstat( "perk_protection_stun_kills", 1 ); + + assert( isdefined( victim.activecounteruavs ) ); + activeemp = 0; + + if ( level.teambased ) + { + foreach ( team in level.teams ) + { + if ( team == player.team ) + continue; + + if ( isdefined( level.empowners[team] ) ) + { + activeemp = 1; + break; + } + } + } + else if ( isdefined( level.empplayer ) ) + { + if ( level.empplayer != player ) + activeemp = 1; + } + + activecuav = 0; + + if ( level.teambased ) + { + foreach ( team in level.teams ) + { + if ( team == player.team ) + continue; + + if ( level.activecounteruavs[team] > 0 ) + { + activecuav = 1; + break; + } + } + } + else + { + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] != player ) + { + if ( isdefined( level.activecounteruavs[players[i].entnum] ) && level.activecounteruavs[players[i].entnum] > 0 ) + { + activecuav = 1; + break; + } + } + } + } + + if ( activecuav == 1 || activeemp == 1 ) + { + if ( player hasperk( "specialty_immunecounteruav" ) ) + player addplayerstat( "perk_immune_cuav_kills", 1 ); + } + + activeuavvictim = 0; + + if ( level.teambased ) + { + if ( level.activeuavs[victim.team] > 0 ) + activeuavvictim = 1; + } + else + activeuavvictim = isdefined( level.activeuavs[victim.entnum] ) && level.activeuavs[victim.entnum] > 0; + + if ( activeuavvictim == 1 ) + { + if ( player hasperk( "specialty_gpsjammer" ) ) + player addplayerstat( "perk_gpsjammer_immune_kills", 1 ); + } + + if ( player.lastweaponchange + 5000 > time ) + { + if ( player hasperk( "specialty_fastweaponswitch" ) ) + player addplayerstat( "perk_fastweaponswitch_kill_after_swap", 1 ); + } + + if ( player.scavenged == 1 ) + { + if ( player hasperk( "specialty_scavenger" ) ) + player addplayerstat( "perk_scavenger_kills_after_resupply", 1 ); + } +} + +flakjacketprotected( weapon, attacker ) +{ + if ( weapon == "claymore_mp" ) + self.flakjacketclaymore[attacker.clientid] = 1; + + self addplayerstat( "perk_flak_survive", 1 ); +} + +earnedkillstreak() +{ + if ( self hasperk( "specialty_earnmoremomentum" ) ) + self addplayerstat( "perk_earnmoremomentum_earn_streak", 1 ); +} + +genericbulletkill( data, victim, weapon ) +{ + player = self; + time = data.time; + + if ( player.pers["lastBulletKillTime"] == time ) + player.pers["bulletStreak"]++; + else + player.pers["bulletStreak"] = 1; + + player.pers["lastBulletKillTime"] = time; + + if ( data.victim.idflagstime == time ) + { + if ( data.victim.idflags & level.idflags_penetration ) + { + player addplayerstat( "kill_enemy_through_wall", 1 ); + + if ( isdefined( weapon ) && weaponhasattachment( weapon, "fmj" ) ) + player addplayerstat( "kill_enemy_through_wall_with_fmj", 1 ); + } + } +} + +ishighestscoringplayer( player ) +{ + if ( !isdefined( player.score ) || player.score < 1 ) + return false; + + players = level.players; + + if ( level.teambased ) + team = player.pers["team"]; + else + team = "all"; + + highscore = player.score; + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i].score ) ) + continue; + + if ( players[i] == player ) + continue; + + if ( players[i].score < 1 ) + continue; + + if ( team != "all" && players[i].pers["team"] != team ) + continue; + + if ( players[i].score >= highscore ) + return false; + } + + return true; +} + +spawnwatcher() +{ + self endon( "disconnect" ); + self.pers["stickExplosiveKill"] = 0; + self.pers["pistolHeadshot"] = 0; + self.pers["assaultRifleHeadshot"] = 0; + self.pers["killNemesis"] = 0; + + while ( true ) + { + self waittill( "spawned_player" ); + + self.pers["longshotsPerLife"] = 0; + self.flakjacketclaymore = []; + self.weaponkills = []; + self.attachmentkills = []; + self.retreivedblades = 0; + self.lastreloadtime = 0; + self.crossbowclipkillcount = 0; + self thread watchfordtp(); + self thread watchformantle(); + self thread monitor_player_sprint(); + } +} + +pickedupballisticknife() +{ + self.retreivedblades++; +} + +watchfordtp() +{ + self endon( "disconnect" ); + self endon( "death" ); + + for ( self.dtptime = 0; 1; self.dtptime = gettime() + 4000 ) + self waittill( "dtp_end" ); +} + +watchformantle() +{ + self endon( "disconnect" ); + self endon( "death" ); + + for ( self.mantletime = 0; 1; self.mantletime = mantleendtime ) + self waittill( "mantle_start", mantleendtime ); +} + +disarmedhackedcarepackage() +{ + self addplayerstat( "disarm_hacked_carepackage", 1 ); +} + +destroyed_car() +{ + if ( !isdefined( self ) || !isplayer( self ) ) + return; + + self addplayerstat( "destroy_car", 1 ); +} + +killednemesis() +{ + self.pers["killNemesis"]++; + + if ( self.pers["killNemesis"] >= 5 ) + { + self.pers["killNemesis"] = 0; + self addplayerstat( "kill_nemesis", 1 ); + } +} + +killwhiledamagingwithhpm() +{ + self addplayerstat( "kill_while_damaging_with_microwave_turret", 1 ); +} + +longdistancehatchetkill() +{ + self addplayerstat( "long_distance_hatchet_kill", 1 ); +} + +blockedsatellite() +{ + self addplayerstat( "activate_cuav_while_enemy_satelite_active", 1 ); +} + +longdistancekill() +{ + self.pers["longshotsPerLife"]++; + + if ( self.pers["longshotsPerLife"] >= 3 ) + { + self.pers["longshotsPerLife"] = 0; + self addplayerstat( "longshot_3_onelife", 1 ); + } +} + +challengeroundend( data ) +{ + player = data.player; + winner = data.winner; + + if ( endedearly( winner ) ) + return; + + if ( level.teambased ) + { + winnerscore = game["teamScores"][winner]; + loserscore = getlosersteamscores( winner ); + } + + switch ( level.gametype ) + { + case "sd": + if ( player.team == winner ) + { + if ( game["challenge"][winner]["allAlive"] ) + player addgametypestat( "round_win_no_deaths", 1 ); + + if ( isdefined( player.lastmansddefeat3enemies ) ) + player addgametypestat( "last_man_defeat_3_enemies", 1 ); + } + + break; + default: + break; + } +} + +roundend( winner ) +{ + wait 0.05; + data = spawnstruct(); + data.time = gettime(); + + if ( level.teambased ) + { + if ( isdefined( winner ) && isdefined( level.teams[winner] ) ) + data.winner = winner; + } + else if ( isdefined( winner ) ) + data.winner = winner; + + for ( index = 0; index < level.placement["all"].size; index++ ) + { + data.player = level.placement["all"][index]; + data.place = index; + dochallengecallback( "roundEnd", data ); + } +} + +gameend( winner ) +{ + wait 0.05; + data = spawnstruct(); + data.time = gettime(); + + if ( level.teambased ) + { + if ( isdefined( winner ) && isdefined( level.teams[winner] ) ) + data.winner = winner; + } + else if ( isdefined( winner ) && isplayer( winner ) ) + data.winner = winner; + + for ( index = 0; index < level.placement["all"].size; index++ ) + { + data.player = level.placement["all"][index]; + data.place = index; + dochallengecallback( "gameEnd", data ); + } +} + +getfinalkill( player ) +{ + if ( isplayer( player ) ) + player addplayerstat( "get_final_kill", 1 ); +} + +destroyrcbomb( weaponname ) +{ + self destroyscorestreak( weaponname ); + + if ( weaponname == "hatchet_mp" ) + self addplayerstat( "destroy_rcbomb_with_hatchet", 1 ); +} + +capturedcrate() +{ + if ( isdefined( self.lastrescuedby ) && isdefined( self.lastrescuedtime ) ) + { + if ( self.lastrescuedtime + 5000 > gettime() ) + self.lastrescuedby addplayerstat( "defend_teammate_who_captured_package", 1 ); + } +} + +destroyscorestreak( weaponname ) +{ + if ( isdefined( weaponname ) && weaponname == "qrdrone_turret_mp" ) + self addplayerstat( "destroy_score_streak_with_qrdrone", 1 ); +} + +capturedobjective( capturetime ) +{ + if ( isdefined( self.smokegrenadetime ) && isdefined( self.smokegrenadeposition ) ) + { + if ( self.smokegrenadetime + 14000 > capturetime ) + { + distsq = distancesquared( self.smokegrenadeposition, self.origin ); + + if ( distsq < 57600 ) + { + self addplayerstat( "capture_objective_in_smoke", 1 ); + self addweaponstat( "willy_pete_mp", "CombatRecordStat", 1 ); + } + else + { + + } + } + } +} + +hackedordestroyedequipment() +{ + if ( self hasperk( "specialty_showenemyequipment" ) ) + self addplayerstat( "perk_hacker_destroy", 1 ); +} + +destroyedequipment( weaponname ) +{ + if ( isdefined( weaponname ) && weaponname == "emp_grenade_mp" ) + { + self addplayerstat( "destroy_equipment_with_emp_grenade", 1 ); + self addweaponstat( "emp_grenade_mp", "combatRecordStat", 1 ); + } + + self addplayerstat( "destroy_equipment", 1 ); + self hackedordestroyedequipment(); +} + +destroyedtacticalinsert() +{ + if ( !isdefined( self.pers["tacticalInsertsDestroyed"] ) ) + self.pers["tacticalInsertsDestroyed"] = 0; + + self.pers["tacticalInsertsDestroyed"]++; + + if ( self.pers["tacticalInsertsDestroyed"] >= 5 ) + { + self.pers["tacticalInsertsDestroyed"] = 0; + self addplayerstat( "destroy_5_tactical_inserts", 1 ); + } +} + +bladekill() +{ + if ( !isdefined( self.pers["bladeKills"] ) ) + self.pers["bladeKills"] = 0; + + self.pers["bladeKills"]++; + + if ( self.pers["bladeKills"] >= 15 ) + { + self.pers["bladeKills"] = 0; + self addplayerstat( "kill_15_with_blade", 1 ); + } +} + +destroyedexplosive( weaponname ) +{ + self destroyedequipment( weaponname ); + self addplayerstat( "destroy_explosive", 1 ); +} + +assisted() +{ + self addplayerstat( "assist", 1 ); +} + +earnedmicrowaveassistscore( score ) +{ + self addplayerstat( "assist_score_microwave_turret", score ); + self addplayerstat( "assist_score_killstreak", score ); +} + +earnedcuavassistscore( score ) +{ + self addplayerstat( "assist_score_cuav", score ); + self addplayerstat( "assist_score_killstreak", score ); + self addweaponstat( "counteruav_mp", "assists", 1 ); +} + +earneduavassistscore( score ) +{ + self addplayerstat( "assist_score_uav", score ); + self addplayerstat( "assist_score_killstreak", score ); + self addweaponstat( "radar_mp", "assists", 1 ); +} + +earnedsatelliteassistscore( score ) +{ + self addplayerstat( "assist_score_satellite", score ); + self addplayerstat( "assist_score_killstreak", score ); + self addweaponstat( "radardirection_mp", "assists", 1 ); +} + +earnedempassistscore( score ) +{ + self addplayerstat( "assist_score_emp", score ); + self addplayerstat( "assist_score_killstreak", score ); + self addweaponstat( "emp_mp", "assists", 1 ); +} + +teamcompletedchallenge( team, challenge ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].team ) && players[i].team == team ) + players[i] addgametypestat( challenge, 1 ); + } +} + +endedearly( winner ) +{ + if ( level.hostforcedend ) + return true; + + if ( !isdefined( winner ) ) + return true; + + if ( level.teambased ) + { + if ( winner == "tie" ) + return true; + } + + return false; +} + +getlosersteamscores( winner ) +{ + teamscores = 0; + + foreach ( team in level.teams ) + { + if ( team == winner ) + continue; + + teamscores += game["teamScores"][team]; + } + + return teamscores; +} + +didloserfailchallenge( winner, challenge ) +{ + foreach ( team in level.teams ) + { + if ( team == winner ) + continue; + + if ( game["challenge"][team][challenge] ) + return false; + } + + return true; +} + +challengegameend( data ) +{ + player = data.player; + winner = data.winner; + + if ( isdefined( level.scoreeventgameendcallback ) ) + [[ level.scoreeventgameendcallback ]]( data ); + + if ( endedearly( winner ) ) + return; + + if ( level.teambased ) + { + winnerscore = game["teamScores"][winner]; + loserscore = getlosersteamscores( winner ); + } + + switch ( level.gametype ) + { + case "tdm": + if ( player.team == winner ) + { + if ( winnerscore >= loserscore + 20 ) + player addgametypestat( "CRUSH", 1 ); + } + + mostkillsleastdeaths = 1; + + for ( index = 0; index < level.placement["all"].size; index++ ) + { + if ( level.placement["all"][index].deaths < player.deaths ) + mostkillsleastdeaths = 0; + + if ( level.placement["all"][index].kills > player.kills ) + mostkillsleastdeaths = 0; + } + + if ( mostkillsleastdeaths && player.kills > 0 && level.placement["all"].size > 3 ) + player addgametypestat( "most_kills_least_deaths", 1 ); + + break; + case "dm": + if ( player == winner ) + { + if ( level.placement["all"].size >= 2 ) + { + secondplace = level.placement["all"][1]; + + if ( player.kills >= secondplace.kills + 7 ) + player addgametypestat( "CRUSH", 1 ); + } + } + + break; + case "ctf": + if ( player.team == winner ) + { + if ( loserscore == 0 ) + player addgametypestat( "SHUT_OUT", 1 ); + } + + break; + case "dom": + if ( player.team == winner ) + { + if ( winnerscore >= loserscore + 70 ) + player addgametypestat( "CRUSH", 1 ); + } + + break; + case "hq": + if ( player.team == winner && winnerscore > 0 ) + { + if ( winnerscore >= loserscore + 70 ) + player addgametypestat( "CRUSH", 1 ); + } + + break; + case "koth": + if ( player.team == winner && winnerscore > 0 ) + { + if ( winnerscore >= loserscore + 70 ) + player addgametypestat( "CRUSH", 1 ); + } + + if ( player.team == winner && winnerscore > 0 ) + { + if ( winnerscore >= loserscore + 110 ) + player addgametypestat( "ANNIHILATION", 1 ); + } + + break; + case "dem": + if ( player.team == game["defenders"] && player.team == winner ) + { + if ( loserscore == 0 ) + player addgametypestat( "SHUT_OUT", 1 ); + } + + break; + case "sd": + if ( player.team == winner ) + { + if ( loserscore <= 1 ) + player addgametypestat( "CRUSH", 1 ); + } + default: + break; + } +} + +multikill( killcount, weapon ) +{ + if ( killcount >= 3 && isdefined( self.lastkillwheninjured ) ) + { + if ( self.lastkillwheninjured + 5000 > gettime() ) + self addplayerstat( "multikill_3_near_death", 1 ); + } +} + +domattackermultikill( killcount ) +{ + self addgametypestat( "kill_2_enemies_capturing_your_objective", 1 ); +} + +totaldomination( team ) +{ + teamcompletedchallenge( team, "control_3_points_3_minutes" ); +} + +holdflagentirematch( team, label ) +{ + switch ( label ) + { + case "_a": + event = "hold_a_entire_match"; + break; + case "_b": + event = "hold_b_entire_match"; + break; + case "_c": + event = "hold_c_entire_match"; + break; + default: + return; + } + + teamcompletedchallenge( team, event ); +} + +capturedbfirstminute() +{ + self addgametypestat( "capture_b_first_minute", 1 ); +} + +controlzoneentirely( team ) +{ + teamcompletedchallenge( team, "control_zone_entirely" ); +} + +multi_lmg_smg_kill() +{ + self addplayerstat( "multikill_3_lmg_or_smg_hip_fire", 1 ); +} + +killedzoneattacker( weapon ) +{ + if ( weapon == "planemortar_mp" || weapon == "remote_missile_missile_mp" || weapon == "remote_missile_bomblet_mp" ) + self thread updatezonemultikills(); +} + +killeddog() +{ + origin = self.origin; + + if ( level.teambased ) + { + teammates = get_team_alive_players_s( self.team ); + + foreach ( player in teammates.a ) + { + if ( player == self ) + continue; + + distsq = distancesquared( origin, player.origin ); + + if ( distsq < 57600 ) + { + self addplayerstat( "killed_dog_close_to_teammate", 1 ); + break; + } + } + } +} + +updatezonemultikills() +{ + self endon( "disconnect" ); + level endon( "game_ended" ); + self notify( "updateRecentZoneKills" ); + self endon( "updateRecentZoneKills" ); + + if ( !isdefined( self.recentzonekillcount ) ) + self.recentzonekillcount = 0; + + self.recentzonekillcount++; + wait 4.0; + + if ( self.recentzonekillcount > 1 ) + self addplayerstat( "multikill_2_zone_attackers", 1 ); + + self.recentzonekillcount = 0; +} + +multi_rcbomb_kill() +{ + self addplayerstat( "muiltikill_2_with_rcbomb", 1 ); +} + +multi_remotemissile_kill() +{ + self addplayerstat( "multikill_3_remote_missile", 1 ); +} + +multi_mgl_kill() +{ + self addplayerstat( "multikill_3_with_mgl", 1 ); +} + +immediatecapture() +{ + self addgametypestat( "immediate_capture", 1 ); +} + +killedlastcontester() +{ + self addgametypestat( "contest_then_capture", 1 ); +} + +bothbombsdetonatewithintime() +{ + self addgametypestat( "both_bombs_detonate_10_seconds", 1 ); +} + +fullclipnomisses( weaponclass, weapon ) +{ + +} + +destroyedturret( weaponname ) +{ + self destroyscorestreak( weaponname ); + self addplayerstat( "destroy_turret", 1 ); +} + +calledincarepackage() +{ + self.pers["carepackagesCalled"]++; + + if ( self.pers["carepackagesCalled"] >= 3 ) + { + self addplayerstat( "call_in_3_care_packages", 1 ); + self.pers["carepackagesCalled"] = 0; + } +} + +destroyedhelicopter( attacker, weapon, damagetype, playercontrolled ) +{ + attacker destroyscorestreak( weapon ); + + if ( damagetype == "MOD_RIFLE_BULLET" || damagetype == "MOD_PISTOL_BULLET" ) + attacker addplayerstat( "destroyed_helicopter_with_bullet", 1 ); +} + +destroyedqrdrone( damagetype, weapon ) +{ + self destroyscorestreak( weapon ); + self addplayerstat( "destroy_qrdrone", 1 ); + + if ( damagetype == "MOD_RIFLE_BULLET" || damagetype == "MOD_PISTOL_BULLET" ) + self addplayerstat( "destroyed_qrdrone_with_bullet", 1 ); + + self destroyedplayercontrolledaircraft(); +} + +destroyedplayercontrolledaircraft() +{ + if ( self hasperk( "specialty_noname" ) ) + self addplayerstat( "destroy_helicopter", 1 ); +} + +destroyedaircraft( attacker, weapon ) +{ + attacker destroyscorestreak( weapon ); + + if ( isdefined( weapon ) ) + { + if ( weapon == "emp_mp" || weapon == "killstreak_emp_mp" ) + attacker addplayerstat( "destroy_aircraft_with_emp", 1 ); + else if ( weapon == "missile_drone_projectile_mp" || weapon == "missile_drone_mp" ) + attacker addplayerstat( "destroy_aircraft_with_missile_drone", 1 ); + } + + if ( attacker hasperk( "specialty_nottargetedbyairsupport" ) ) + attacker addplayerstat( "perk_nottargetedbyairsupport_destroy_aircraft", 1 ); + + attacker addplayerstat( "destroy_aircraft", 1 ); +} + +killstreakten() +{ + primary = self getloadoutitem( self.class_num, "primary" ); + + if ( primary != 0 ) + return; + + secondary = self getloadoutitem( self.class_num, "secondary" ); + + if ( secondary != 0 ) + return; + + primarygrenade = self getloadoutitem( self.class_num, "primarygrenade" ); + + if ( primarygrenade != 0 ) + return; + + specialgrenade = self getloadoutitem( self.class_num, "specialgrenade" ); + + if ( specialgrenade != 0 ) + return; + + for ( numspecialties = 0; numspecialties < level.maxspecialties; numspecialties++ ) + { + perk = self getloadoutitem( self.class_num, "specialty" + ( numspecialties + 1 ) ); + + if ( perk != 0 ) + return; + } + + self addplayerstat( "killstreak_10_no_weapons_perks", 1 ); +} + +scavengedgrenade() +{ + self endon( "disconnect" ); + self endon( "death" ); + self notify( "scavengedGrenade" ); + self endon( "scavengedGrenade" ); + + for (;;) + { + self waittill( "lethalGrenadeKill" ); + + self addplayerstat( "kill_with_resupplied_lethal_grenade", 1 ); + } +} + +stunnedtankwithempgrenade( attacker ) +{ + attacker addplayerstat( "stun_aitank_wIth_emp_grenade", 1 ); +} + +playerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, shitloc, attackerstance ) +{ +/# + print( level.gametype ); +#/ + self.anglesondeath = self getplayerangles(); + + if ( isdefined( attacker ) ) + attacker.anglesonkill = attacker getplayerangles(); + + if ( !isdefined( sweapon ) ) + sweapon = "none"; + + self endon( "disconnect" ); + data = spawnstruct(); + data.victim = self; + data.victimstance = self getstance(); + data.einflictor = einflictor; + data.attacker = attacker; + data.attackerstance = attackerstance; + data.idamage = idamage; + data.smeansofdeath = smeansofdeath; + data.sweapon = sweapon; + data.shitloc = shitloc; + data.time = gettime(); + + if ( isdefined( einflictor ) && isdefined( einflictor.lastweaponbeforetoss ) ) + data.lastweaponbeforetoss = einflictor.lastweaponbeforetoss; + + if ( isdefined( einflictor ) && isdefined( einflictor.ownerweaponatlaunch ) ) + data.ownerweaponatlaunch = einflictor.ownerweaponatlaunch; + + waslockingon = 0; + + if ( isdefined( einflictor.locking_on ) ) + waslockingon |= einflictor.locking_on; + + if ( isdefined( einflictor.locked_on ) ) + waslockingon |= einflictor.locked_on; + + waslockingon &= 1 << data.victim.entnum; + + if ( waslockingon != 0 ) + data.waslockingon = 1; + else + data.waslockingon = 0; + + data.washacked = einflictor maps\mp\_utility::ishacked(); + data.wasplanting = data.victim.isplanting; + + if ( !isdefined( data.wasplanting ) ) + data.wasplanting = 0; + + data.wasdefusing = data.victim.isdefusing; + + if ( !isdefined( data.wasdefusing ) ) + data.wasdefusing = 0; + + data.victimweapon = data.victim.currentweapon; + data.victimonground = data.victim isonground(); + + if ( isplayer( attacker ) ) + { + data.attackeronground = data.attacker isonground(); + + if ( !isdefined( data.attackerstance ) ) + data.attackerstance = data.attacker getstance(); + } + else + { + data.attackeronground = 0; + data.attackerstance = "stand"; + } + + waitandprocessplayerkilledcallback( data ); + data.attacker notify( "playerKilledChallengesProcessed" ); +} + +waittillslowprocessallowed() +{ + while ( level.lastslowprocessframe == gettime() ) + wait 0.05; + + level.lastslowprocessframe = gettime(); +} + +doscoreeventcallback( callback, data ) +{ + if ( !isdefined( level.scoreeventcallbacks ) ) + return; + + if ( !isdefined( level.scoreeventcallbacks[callback] ) ) + return; + + if ( isdefined( data ) ) + { + for ( i = 0; i < level.scoreeventcallbacks[callback].size; i++ ) + thread [[ level.scoreeventcallbacks[callback][i] ]]( data ); + } + else + { + for ( i = 0; i < level.scoreeventcallbacks[callback].size; i++ ) + thread [[ level.scoreeventcallbacks[callback][i] ]](); + } +} + +waitandprocessplayerkilledcallback( data ) +{ + if ( isdefined( data.attacker ) ) + data.attacker endon( "disconnect" ); + + wait 0.05; + waittillslowprocessallowed(); + level thread dochallengecallback( "playerKilled", data ); + level thread doscoreeventcallback( "playerKilled", data ); +} + +weaponisknife( weapon ) +{ + if ( weapon == "knife_held_mp" || weapon == "knife_mp" || weapon == "knife_ballistic_mp" ) + return true; + + return false; +} + +eventreceived( eventname ) +{ + self endon( "disconnect" ); + waittillslowprocessallowed(); + + switch ( level.gametype ) + { + case "tdm": + if ( eventname == "killstreak_10" ) + self addgametypestat( "killstreak_10", 1 ); + else if ( eventname == "killstreak_15" ) + self addgametypestat( "killstreak_15", 1 ); + else if ( eventname == "killstreak_20" ) + self addgametypestat( "killstreak_20", 1 ); + else if ( eventname == "multikill_3" ) + self addgametypestat( "multikill_3", 1 ); + else if ( eventname == "kill_enemy_who_killed_teammate" ) + self addgametypestat( "kill_enemy_who_killed_teammate", 1 ); + else if ( eventname == "kill_enemy_injuring_teammate" ) + self addgametypestat( "kill_enemy_injuring_teammate", 1 ); + + break; + case "dm": + if ( eventname == "killstreak_10" ) + self addgametypestat( "killstreak_10", 1 ); + else if ( eventname == "killstreak_15" ) + self addgametypestat( "killstreak_15", 1 ); + else if ( eventname == "killstreak_20" ) + self addgametypestat( "killstreak_20", 1 ); + else if ( eventname == "killstreak_30" ) + self addgametypestat( "killstreak_30", 1 ); + + break; + case "sd": + if ( eventname == "defused_bomb_last_man_alive" ) + self addgametypestat( "defused_bomb_last_man_alive", 1 ); + else if ( eventname == "elimination_and_last_player_alive" ) + self addgametypestat( "elimination_and_last_player_alive", 1 ); + else if ( eventname == "killed_bomb_planter" ) + self addgametypestat( "killed_bomb_planter", 1 ); + else if ( eventname == "killed_bomb_defuser" ) + self addgametypestat( "killed_bomb_defuser", 1 ); + + break; + case "ctf": + if ( eventname == "kill_flag_carrier" ) + self addgametypestat( "kill_flag_carrier", 1 ); + else if ( eventname == "defend_flag_carrier" ) + self addgametypestat( "defend_flag_carrier", 1 ); + + break; + case "dem": + if ( eventname == "killed_bomb_planter" ) + self addgametypestat( "killed_bomb_planter", 1 ); + else if ( eventname == "killed_bomb_defuser" ) + self addgametypestat( "killed_bomb_defuser", 1 ); + + break; + default: + break; + } +} + +monitor_player_sprint() +{ + self endon( "disconnect" ); + self endon( "death" ); + + for ( self.lastsprinttime = undefined; 1; self.lastsprinttime = gettime() ) + { + self waittill( "sprint_begin" ); + + self waittill( "sprint_end" ); + } +} diff --git a/Multiplayer Core/patch_mp/maps/mp/_compass.gsc b/MP/Core/maps/mp/_compass.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_compass.gsc rename to MP/Core/maps/mp/_compass.gsc diff --git a/MP/Core/maps/mp/_createfx.gsc b/MP/Core/maps/mp/_createfx.gsc new file mode 100644 index 0000000..4353be1 --- /dev/null +++ b/MP/Core/maps/mp/_createfx.gsc @@ -0,0 +1,2944 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\_createfxmenu; +#include maps\mp\_createfxundo; +#include maps\mp\_fx; +#include maps\mp\_script_gen; + +createfx() +{ +/# + println( "^2Running CreateFX 2.0" ); +#/ + if ( ismp() ) + { + init_mp_paths(); + level.timelimitoverride = 1; + } + else + init_sp_paths(); + + precachemodel( "fx_axis_createfx" ); + precacheshader( "black" ); + + if ( getdvar( "createfx_scaleid" ) == "" ) + setdvar( "createfx_scaleid", "0.5" ); + + if ( getdvar( "createfx_print_frames" ) == "" ) + setdvar( "createfx_print_frames", "3" ); + + if ( getdvar( "createfx_drawaxis" ) == "" ) + setdvar( "createfx_drawaxis", "1" ); + + if ( getdvar( "createfx_drawaxis_range" ) == "" ) + setdvar( "createfx_drawaxis_range", "2000" ); + + if ( getdvar( "createfx_autosave_time" ) == "" ) + setdvar( "createfx_autosave_time", "300" ); + + if ( getdvar( "createfx_oneshot_min_delay" ) == "" ) + setdvar( "createfx_oneshot_min_delay", "-100" ); + + if ( getdvar( "createfx_oneshot_max_delay" ) == "" ) + setdvar( "createfx_oneshot_max_delay", "-15" ); + + flag_init( "createfx_saving" ); + + if ( !isdefined( level.createfx ) ) + level.createfx = []; + + if ( !isdefined( level.cfx_uniqueid ) ) + level.cfx_uniqueid = 0; + + level.cfx_last_action = "none"; + + if ( !ismp() ) + level thread [[ level.cfx_func_run_gump_func ]](); + + if ( isdefined( level.createfx_callback_thread ) ) + level thread [[ level.createfx_callback_thread ]](); + + if ( ismp() ) + { + level.callbackplayerdisconnect = ::empty; + level.callbackplayerdamage = ::damage_void; + level.callbackplayerkilled = ::empty; + level.callbackplayerconnect = ::callback_playerconnect; + + while ( !isdefined( level.player ) ) + wait 0.05; + + thread createfxdelay(); + } + + level.is_camera_on = 0; + thread createfxlogic(); + + level waittill( "eternity" ); +} + +fx_init() +{ + if ( ismp() ) + init_client_mp_variables(); + else + init_client_sp_variables(); + + level.exploderfunction = level.cfx_exploder_before; + waittillframeend; + waittillframeend; + level.exploderfunction = level.cfx_exploder_after; + level.non_fx_ents = 0; + + if ( level.createfx_enabled ) + { + triggers = getentarray( "trigger_multiple", "classname" ); + + for ( i = 0; i < triggers.size; i++ ) + triggers[i] delete(); + + triggers = getentarray( "trigger_once", "classname" ); + + for ( i = 0; i < triggers.size; i++ ) + triggers[i] delete(); + + triggers = getentarray( "trigger_box", "classname" ); + + for ( i = 0; i < triggers.size; i++ ) + triggers[i] delete(); + + triggers = getentarray( "trigger_radius", "classname" ); + + for ( i = 0; i < triggers.size; i++ ) + triggers[i] delete(); + + triggers = getentarray( "trigger_lookat", "classname" ); + + for ( i = 0; i < triggers.size; i++ ) + triggers[i] delete(); + + triggers = getentarray( "trigger_damage", "classname" ); + + for ( i = 0; i < triggers.size; i++ ) + triggers[i] delete(); + + sm = getentarray( "spawn_manager", "classname" ); + + for ( i = 0; i < sm.size; i++ ) + sm[i] delete(); + + delete_spawns(); + + if ( !ismp() ) + { + delete_arrays_in_sp(); +/# + println( "We're not in MP!" ); +#/ + } + } + + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + ent set_forward_and_up_vectors(); + + if ( level.clientscripts ) + { + if ( !level.createfx_enabled ) + continue; + } + + if ( isdefined( ent.model ) ) + level.non_fx_ents++; + + if ( ent.v["type"] == "loopfx" ) + ent thread [[ level.cfx_func_loopfx ]](); + + if ( ent.v["type"] == "oneshotfx" ) + ent thread [[ level.cfx_func_oneshotfx ]](); + + if ( ent.v["type"] == "soundfx" ) + ent thread [[ level.cfx_func_soundfx ]](); + } +} + +add_effect( name, effect ) +{ + if ( !isdefined( level._effect ) ) + level._effect = []; + + level._effect[name] = loadfx( effect ); +} + +createeffect( type, fxid ) +{ + ent = undefined; + + if ( !isdefined( level.createfx_enabled ) ) + level.createfx_enabled = getdvar( "createfx" ) != ""; + + if ( !isdefined( level.createfxent ) ) + level.createfxent = []; + + if ( level.createfx_enabled ) + { + if ( !isdefined( level.cfx_uniqueid ) ) + level.cfx_uniqueid = 0; + + ent = spawnstruct(); + ent.uniqueid = level.cfx_uniqueid; + level.cfx_uniqueid++; + } + else if ( type == "exploder" ) + ent = spawnstruct(); + else + { + if ( !isdefined( level._fake_createfx_struct ) ) + level._fake_createfx_struct = spawnstruct(); + + ent = level._fake_createfx_struct; + } + + level.createfxent[level.createfxent.size] = ent; + ent.v = []; + ent.v["type"] = type; + ent.v["fxid"] = fxid; + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["origin"] = ( 0, 0, 0 ); + ent.drawn = 1; + return ent; +} + +createloopsound() +{ + ent = spawnstruct(); + + if ( !isdefined( level.createfxent ) ) + level.createfxent = []; + + level.createfxent[level.createfxent.size] = ent; + ent.v = []; + ent.v["type"] = "soundfx"; + ent.v["fxid"] = "No FX"; + ent.v["soundalias"] = "nil"; + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["origin"] = ( 0, 0, 0 ); + ent.drawn = 1; + return ent; +} + +set_forward_and_up_vectors() +{ + self.v["up"] = anglestoup( self.v["angles"] ); + self.v["forward"] = anglestoforward( self.v["angles"] ); +} + +createfxlogic() +{ + waittillframeend; + menu_init(); + + if ( !ismp() ) + { + players = get_players(); + + if ( !isdefined( players ) || players.size == 0 ) + level waittill( "first_player_ready" ); + } +/# + adddebugcommand( "noclip" ); +#/ + if ( !isdefined( level._effect ) ) + level._effect = []; + + if ( getdvar( "createfx_map" ) == "" ) + setdvar( "createfx_map", level.script ); + else if ( getdvar( "createfx_map" ) == level.script ) + { + if ( !ismp() ) + { + playerpos = []; + playerpos[0] = getdvarint( _hash_274F266C ); + playerpos[1] = getdvarint( _hash_274F266D ); + playerpos[2] = getdvarint( _hash_274F266E ); + player = get_players()[0]; + player setorigin( ( playerpos[0], playerpos[1], playerpos[2] ) ); + } + } +/# + filename = level.cfx_server_scriptdata + level.script + "_fx.gsc"; + file = openfile( filename, "append" ); + level.write_error = ""; + + if ( file == -1 ) + level.write_error = filename; + else + closefile( file ); +#/ + level.createfxhudelements = []; + level.createfx_hudelements = 100; + stroffsetx = []; + stroffsety = []; + stroffsetx[0] = 0; + stroffsety[0] = 0; + stroffsetx[1] = 1; + stroffsety[1] = 1; + stroffsetx[2] = -2; + stroffsety[2] = 1; + setdvar( "fx", "nil" ); + crosshair = newdebughudelem(); + crosshair.location = 0; + crosshair.alignx = "center"; + crosshair.aligny = "middle"; + crosshair.foreground = 1; + crosshair.fontscale = 2; + crosshair.sort = 20; + crosshair.alpha = 1; + crosshair.x = 320; + crosshair.y = 233; + crosshair settext( "." ); + center_text_init(); + level.cleartextmarker = newdebughudelem(); + level.cleartextmarker.alpha = 0; + level.cleartextmarker settext( "marker" ); + + for ( i = 0; i < level.createfx_hudelements; i++ ) + { + newstrarray = []; + + for ( p = 0; p < 2; p++ ) + { + newstr = newhudelem(); + newstr.alignx = "left"; + newstr.location = 0; + newstr.foreground = 1; + newstr.fontscale = 1.1; + newstr.sort = 20 - p; + newstr.alpha = 1; + newstr.x = 0 + stroffsetx[p]; + newstr.y = 60 + stroffsety[p] + i * 15; + + if ( p > 0 ) + newstr.color = ( 0, 0, 0 ); + + newstrarray[newstrarray.size] = newstr; + } + + level.createfxhudelements[i] = newstrarray; + } + + level.selectedmove_up = 0; + level.selectedmove_forward = 0; + level.selectedmove_right = 0; + level.selectedrotate_pitch = 0; + level.selectedrotate_roll = 0; + level.selectedrotate_yaw = 0; + level.selected_fx = []; + level.selected_fx_ents = []; + level.createfx_lockedlist = []; + level.createfx_lockedlist["escape"] = 1; + level.createfx_lockedlist["BUTTON_LSHLDR"] = 1; + level.createfx_lockedlist["BUTTON_RSHLDR"] = 1; + level.createfx_lockedlist["mouse1"] = 1; + level.createfx_lockedlist["ctrl"] = 1; + level.createfx_draw_enabled = 1; + level.buttonisheld = []; + axismode = 0; + colors = []; + colors["loopfx"]["selected"] = ( 1.0, 1.0, 0.2 ); + colors["loopfx"]["highlighted"] = ( 0.4, 0.95, 1.0 ); + colors["loopfx"]["default"] = ( 0.3, 0.5, 1.0 ); + colors["oneshotfx"]["selected"] = ( 1.0, 1.0, 0.2 ); + colors["oneshotfx"]["highlighted"] = ( 0.33, 0.97, 1.0 ); + colors["oneshotfx"]["default"] = ( 0.1, 0.73, 0.73 ); + colors["exploder"]["selected"] = ( 1.0, 1.0, 0.2 ); + colors["exploder"]["highlighted"] = ( 1.0, 0.1, 0.1 ); + colors["exploder"]["default"] = ( 1.0, 0.1, 0.1 ); + colors["rainfx"]["selected"] = ( 1.0, 1.0, 0.2 ); + colors["rainfx"]["highlighted"] = ( 0.95, 0.4, 0.95 ); + colors["rainfx"]["default"] = ( 0.78, 0.0, 0.73 ); + colors["soundfx"]["selected"] = ( 1.0, 1.0, 0.2 ); + colors["soundfx"]["highlighted"] = ( 0.5, 1.0, 0.75 ); + colors["soundfx"]["default"] = ( 0.2, 0.9, 0.2 ); + lasthighlightedent = undefined; + level.fx_rotating = 0; + setmenu( "none" ); + level.createfx_selecting = 0; + level.createfx_last_player_origin = ( 0, 0, 0 ); + level.createfx_last_player_forward = ( 0, 0, 0 ); + level.createfx_last_view_change_test = 0; + player = get_players()[0]; + black = newdebughudelem(); + black.x = -120; + black.y = 200; + black.foreground = 0; + black setshader( "black", 250, 160 ); + black.alpha = 0; + level.createfx_inputlocked = 0; + help_on_last_frame = 0; + + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + ent post_entity_creation_function(); + } + + thread draw_distance(); + lastselectentity = undefined; + thread createfx_autosave(); + + if ( !ismp() ) + make_sp_player_invulnerable( player ); + + for (;;) + { + player = get_players()[0]; + changedselectedents = 0; + right = anglestoright( player getplayerangles() ); + forward = anglestoforward( player getplayerangles() ); + up = anglestoup( player getplayerangles() ); + dot = 0.85; + placeent_vector = vectorscale( forward, 750 ); + level.createfxcursor = bullettrace( player geteye(), player geteye() + placeent_vector, 0, undefined ); + highlightedent = undefined; + level.buttonclick = []; + level.button_is_kb = []; + process_button_held_and_clicked(); + ctrlheld = button_is_held( "ctrl", "BUTTON_LSHLDR" ); + shiftheld = button_is_held( "shift" ); + functionheld = button_is_held( "f" ); + leftclick = button_is_clicked( "mouse1", "BUTTON_A" ); + leftheld = button_is_held( "mouse1", "BUTTON_A" ); + create_fx_menu(); + + if ( button_is_clicked( "BUTTON_X" ) || shiftheld && button_is_clicked( "x" ) ) + axismode = !axismode; + + if ( button_is_clicked( "F2" ) || functionheld && button_is_clicked( "2" ) ) + toggle_createfx_drawing(); + + if ( button_is_clicked( "F3" ) || functionheld && button_is_clicked( "3" ) ) + print_ambient_fx_inventory(); + + if ( button_is_clicked( "F5" ) || functionheld && button_is_clicked( "5" ) ) + createfx_save(); + + if ( button_is_clicked( "ins", "i" ) ) + insert_effect(); + + if ( button_is_clicked( "c" ) ) + { + if ( level.is_camera_on == 0 ) + { +/# + adddebugcommand( "noclip" ); +#/ + level thread handle_camera(); + level.is_camera_on = 1; + } + else if ( level.is_camera_on == 1 ) + { +/# + adddebugcommand( "noclip" ); +#/ + level notify( "new_camera" ); + level.is_camera_on = 0; + axismode = 0; + } + } + + if ( button_is_held( "BUTTON_RTRIG" ) && level.is_camera_on ) + axismode = 1; + else if ( !button_is_held( "BUTTON_RTRIG" ) && level.is_camera_on ) + axismode = 0; + + if ( button_is_clicked( "del" ) || !shiftheld && button_is_clicked( "d" ) ) + delete_pressed(); + + if ( button_is_clicked( "end" ) || shiftheld && button_is_clicked( "d" ) ) + { + drop_selection_to_ground(); + changedselectedents = 1; + } + + if ( button_is_clicked( "s" ) ) + { + setmenu( "select_by_property" ); + wait 0.05; + } + + if ( isdefined( level.cfx_selected_prop ) ) + { + if ( ctrlheld ) + select_ents_by_property( level.cfx_selected_prop, 1 ); + else + select_ents_by_property( level.cfx_selected_prop ); + + level.cfx_selected_prop = undefined; + } + + if ( button_is_clicked( "j" ) ) + { + setmenu( "jump_to_effect" ); + draw_effects_list( "Select effect to jump to:" ); + } + + if ( button_is_clicked( "escape" ) ) + clear_settable_fx(); + + if ( button_is_clicked( "space" ) && !shiftheld ) + set_off_exploders(); + + if ( button_is_clicked( "space" ) && shiftheld ) + turn_off_exploders(); + + if ( button_is_clicked( "tab", "BUTTON_RSHLDR" ) ) + { + move_selection_to_cursor(); + changedselectedents = 1; + } + + if ( button_is_clicked( "z" ) ) + { + if ( shiftheld ) + { + + } + else + undo(); + } + + if ( button_is_held( "q", "F1" ) ) + { + help_on_last_frame = 1; + show_help(); + wait 0.05; + continue; + } + else if ( help_on_last_frame == 1 ) + { + clear_fx_hudelements(); + help_on_last_frame = 0; + } + + if ( button_is_clicked( "BUTTON_LSTICK" ) && !ctrlheld ) + copy_ents(); + + if ( button_is_clicked( "BUTTON_RSTICK" ) ) + { + if ( ctrlheld ) + paste_ents_onto_ents(); + else + paste_ents(); + } + + if ( isdefined( level.selected_fx_option_index ) ) + menu_fx_option_set(); + + if ( button_is_held( "BUTTON_RTRIG" ) && button_is_held( "BUTTON_LTRIG" ) ) + { + move_player_around_map_fast(); + wait 0.25; + continue; + } + + if ( menu( "none" ) ) + { + if ( button_is_clicked( "rightarrow" ) ) + move_player_to_next_same_effect( 1, lastselectentity ); + else if ( button_is_clicked( "leftarrow" ) ) + move_player_to_next_same_effect( 0, lastselectentity ); + } + + if ( level.write_error != "" ) + { + level notify( "write_error" ); + thread write_error_msg( level.write_error ); + level.write_error = ""; + } + + highlightedent = level.fx_highlightedent; + + if ( leftclick || gettime() - level.createfx_last_view_change_test > 250 ) + { + if ( leftclick || vector_changed( level.createfx_last_player_origin, player.origin ) || dot_changed( level.createfx_last_player_forward, forward ) ) + { + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + + if ( !ent.drawn ) + continue; + + difference = vectornormalize( ent.v["origin"] - player.origin + vectorscale( ( 0, 0, 1 ), 55.0 ) ); + newdot = vectordot( forward, difference ); + + if ( newdot < dot ) + continue; + + if ( newdot == dot ) + { + if ( ent_is_selected( ent ) ) + continue; + } + + dot = newdot; + highlightedent = ent; + highlightedent.last_fx_index = i; + } + + level.fx_highlightedent = highlightedent; + level.createfx_last_player_origin = player.origin; + level.createfx_last_player_forward = forward; + } + + level.createfx_last_view_change_test = gettime(); + } + + if ( isdefined( highlightedent ) ) + { + if ( isdefined( lasthighlightedent ) ) + { + if ( lasthighlightedent != highlightedent ) + { + if ( !ent_is_selected( lasthighlightedent ) ) + lasthighlightedent thread entity_highlight_disable(); + + if ( !ent_is_selected( highlightedent ) ) + highlightedent thread entity_highlight_enable(); + } + } + else if ( !ent_is_selected( highlightedent ) ) + highlightedent thread entity_highlight_enable(); + } + + manipulate_createfx_ents( highlightedent, leftclick, leftheld, ctrlheld, colors, right ); + + if ( axismode && level.selected_fx_ents.size > 0 ) + { + thread process_fx_rotater(); + + if ( button_is_clicked( "enter", "r" ) ) + reset_axis_of_selected_ents(); + + if ( button_is_clicked( "v" ) ) + copy_angles_of_selected_ents(); + + if ( getdvarint( "createfx_drawaxis" ) == 1 ) + { + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + level.selected_fx_ents[i] draw_axis(); + } + + if ( level.selectedrotate_pitch != 0 || level.selectedrotate_yaw != 0 || level.selectedrotate_roll != 0 ) + changedselectedents = 1; + + wait 0.05; + } + else + { + stop_drawing_axis_models(); + selectedmove_vector = get_selected_move_vector(); + + if ( distancesquared( ( 0, 0, 0 ), selectedmove_vector ) > 0 ) + { + changedselectedents = 1; + + if ( level.cfx_last_action != "translate" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "translate"; + } + } + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + + if ( isdefined( ent.model ) ) + continue; + + ent.v["origin"] += selectedmove_vector; + } + + wait 0.05; + } + + if ( changedselectedents ) + update_selected_entities(); + + lasthighlightedent = highlightedent; + + if ( last_selected_entity_has_changed( lastselectentity ) ) + { + level.effect_list_offset = 0; + clear_settable_fx(); + setmenu( "none" ); + } + + if ( level.selected_fx_ents.size ) + { + lastselectentity = level.selected_fx_ents[level.selected_fx_ents.size - 1]; + continue; + } + + lastselectentity = undefined; + } +} + +toggle_createfx_drawing() +{ + level.createfx_draw_enabled = !level.createfx_draw_enabled; +} + +manipulate_createfx_ents( highlightedent, leftclick, leftheld, ctrlheld, colors, right ) +{ + if ( !level.createfx_draw_enabled ) + { + clear_fx_hudelements(); + return; + } + + scale = getdvarfloat( "createfx_scaleid" ); + print_frames = getdvarint( "createfx_print_frames" ); + + if ( !isdefined( level.createfx_manipulate_offset ) ) + level.createfx_manipulate_offset = 0; + + offset = level.createfx_manipulate_offset; + level.createfx_manipulate_offset = ( level.createfx_manipulate_offset + 1 ) % print_frames; + + for ( i = offset; i < level.createfxent.size; i += print_frames ) + { + ent = level.createfxent[i]; + + if ( !ent.drawn ) + continue; + + if ( isdefined( highlightedent ) && ent == highlightedent ) + continue; + else + { + colorindex = "default"; + + if ( index_is_selected( i ) ) + colorindex = "selected"; +/# + print3d( ent.v["origin"], ".", colors[ent.v["type"]][colorindex], 1, scale, print_frames ); +#/ + if ( ent.textalpha > 0 ) + { + printright = vectorscale( right, ent.v["fxid"].size * -2.93 * scale ); + printup = ( 0, 0, 15 * scale ); +/# + print3d( ent.v["origin"] + printright + printup, ent.v["fxid"], colors[ent.v["type"]][colorindex], ent.textalpha, scale, print_frames ); +#/ + } + } + } + + if ( isdefined( highlightedent ) ) + { + if ( !entities_are_selected() ) + display_fx_info( highlightedent ); + + if ( leftclick ) + { + entwasselected = index_is_selected( highlightedent.last_fx_index ); + level.createfx_selecting = !entwasselected; + + if ( !ctrlheld ) + { + selectedsize = level.selected_fx_ents.size; + clear_entity_selection(); + + if ( entwasselected && selectedsize == 1 ) + select_entity( highlightedent.last_fx_index, highlightedent ); + } + + toggle_entity_selection( highlightedent.last_fx_index, highlightedent ); + } + else if ( leftheld ) + { + if ( ctrlheld ) + { + if ( level.createfx_selecting ) + select_entity( highlightedent.last_fx_index, highlightedent ); + + if ( !level.createfx_selecting ) + deselect_entity( highlightedent.last_fx_index, highlightedent ); + } + } + + colorindex = "highlighted"; + + if ( index_is_selected( highlightedent.last_fx_index ) ) + colorindex = "selected"; +/# + print3d( highlightedent.v["origin"], ".", colors[highlightedent.v["type"]][colorindex], 1, scale, 1 ); +#/ + if ( highlightedent.textalpha > 0 ) + { + printright = vectorscale( right, highlightedent.v["fxid"].size * -2.93 * scale ); + printup = ( 0, 0, 15 * scale ); +/# + print3d( highlightedent.v["origin"] + printright + printup, highlightedent.v["fxid"], colors[highlightedent.v["type"]][colorindex], highlightedent.textalpha, scale, 1 ); +#/ + } + } +} + +clear_settable_fx() +{ + level.createfx_inputlocked = 0; + setdvar( "fx", "nil" ); + level.selected_fx_option_index = undefined; + reset_fx_hud_colors(); +} + +reset_fx_hud_colors() +{ + for ( i = 0; i < level.createfx_hudelements; i++ ) + level.createfxhudelements[i][0].color = ( 1, 1, 1 ); +} + +button_is_held( name, name2 ) +{ + if ( isdefined( name2 ) ) + { + if ( isdefined( level.buttonisheld[name2] ) ) + return 1; + } + + return isdefined( level.buttonisheld[name] ); +} + +button_is_clicked( name, name2 ) +{ + if ( isdefined( name2 ) ) + { + if ( isdefined( level.buttonclick[name2] ) ) + return 1; + } + + return isdefined( level.buttonclick[name] ); +} + +toggle_entity_selection( index, ent ) +{ + if ( isdefined( level.selected_fx[index] ) ) + deselect_entity( index, ent ); + else + select_entity( index, ent ); +} + +select_entity( index, ent, skip_undo ) +{ + if ( isdefined( level.selected_fx[index] ) ) + return; + + ent.last_fx_index = index; + + if ( !isdefined( skip_undo ) && level.cfx_last_action != "none" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "none"; + } + + clear_settable_fx(); + level notify( "new_ent_selection" ); + ent thread entity_highlight_enable(); + level.selected_fx[index] = 1; + level.selected_fx_ents[level.selected_fx_ents.size] = ent; +} + +ent_is_highlighted( ent ) +{ + if ( !isdefined( level.fx_highlightedent ) ) + return 0; + + return ent == level.fx_highlightedent; +} + +deselect_entity( index, ent ) +{ + if ( !isdefined( level.selected_fx[index] ) ) + return; + + if ( level.cfx_last_action != "none" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "none"; + } + + clear_settable_fx(); + level notify( "new_ent_selection" ); + level.selected_fx[index] = undefined; + + if ( !ent_is_highlighted( ent ) ) + ent thread entity_highlight_disable(); + + newarray = []; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + if ( level.selected_fx_ents[i] != ent ) + newarray[newarray.size] = level.selected_fx_ents[i]; + } + + level.selected_fx_ents = newarray; +} + +index_is_selected( index ) +{ + return isdefined( level.selected_fx[index] ); +} + +ent_is_selected( ent ) +{ + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + if ( level.selected_fx_ents[i] == ent ) + return true; + } + + return false; +} + +clear_entity_selection( skip_undo ) +{ + if ( !isdefined( skip_undo ) && level.cfx_last_action != "none" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "none"; + } + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + if ( !ent_is_highlighted( level.selected_fx_ents[i] ) ) + level.selected_fx_ents[i] thread entity_highlight_disable(); + } + + level.selected_fx = []; + level.selected_fx_ents = []; +} + +draw_axis() +{ + if ( isdefined( self.draw_axis_model ) ) + return; + + self.draw_axis_model = spawn_axis_model( self.v["origin"], self.v["angles"] ); + level thread draw_axis_think( self ); + + if ( !isdefined( level.draw_axis_models ) ) + level.draw_axis_models = []; + + level.draw_axis_models[level.draw_axis_models.size] = self.draw_axis_model; +} + +spawn_axis_model( origin, angles ) +{ + model = spawn( "script_model", origin ); + model setmodel( "fx_axis_createfx" ); + model.angles = angles; + return model; +} + +draw_axis_think( axis_parent ) +{ + axis_model = axis_parent.draw_axis_model; + axis_model endon( "death" ); + player = get_players()[0]; + range = getdvarint( "createfx_drawaxis_range" ); + i = 0; + + while ( true ) + { + if ( !isdefined( axis_parent ) ) + break; + + if ( distancesquared( axis_model.origin, player.origin ) > range * range ) + { + if ( isdefined( axis_model ) ) + { + axis_model delete(); + arrayremovevalue( level.draw_axis_models, undefined ); + } + } + else if ( !isdefined( axis_model ) ) + { + axis_model = spawn_axis_model( axis_parent.v["origin"], axis_parent.v["angles"] ); + axis_parent.draw_axis_model = axis_model; + level.draw_axis_models[level.draw_axis_models.size] = axis_model; + } + + axis_model.origin = axis_parent.v["origin"]; + axis_model.angles = axis_parent.v["angles"]; + wait 0.1; + i++; + + if ( i >= 10 ) + { + range = getdvarint( "createfx_drawaxis_range" ); + i = 0; + } + } + + if ( isdefined( axis_model ) ) + axis_model delete(); +} + +stop_drawing_axis_models() +{ + if ( isdefined( level.draw_axis_models ) ) + { + for ( i = 0; i < level.draw_axis_models.size; i++ ) + { + if ( isdefined( level.draw_axis_models[i] ) ) + level.draw_axis_models[i] delete(); + } + + arrayremovevalue( level.draw_axis_models, undefined ); + } +} + +clear_fx_hudelements() +{ + level.cfx_center_text[level.cfx_center_text_max - 1] clearalltextafterhudelem(); + + for ( i = 0; i < level.createfx_hudelements; i++ ) + { + for ( p = 0; p < 2; p++ ) + level.createfxhudelements[i][p] settext( "" ); + } + + level.fxhudelements = 0; +} + +set_fx_hudelement( text ) +{ + if ( ismp() && !isdefined( level.createfx_delay_done ) ) + return; + + if ( level.fxhudelements < level.createfx_hudelements ) + { + for ( p = 0; p < 2; p++ ) + level.createfxhudelements[level.fxhudelements][p] settext( text ); + + level.fxhudelements++; + } +} + +buttondown( button, button2 ) +{ + return buttonpressed_internal( button ) || buttonpressed_internal( button2 ); +} + +buttonpressed_internal( button ) +{ + if ( !isdefined( button ) ) + return 0; + + if ( kb_locked( button ) ) + return 0; + + player = get_players()[0]; + return player buttonpressed( button ); +} + +get_selected_move_vector() +{ + player = get_players()[0]; + yaw = player getplayerangles()[1]; + angles = ( 0, yaw, 0 ); + right = anglestoright( angles ); + forward = anglestoforward( angles ); + up = anglestoup( angles ); + ctrlheld = button_is_held( "ctrl", "BUTTON_LSHLDR" ); + + if ( buttondown( "kp_uparrow", "DPAD_UP" ) ) + { + if ( level.selectedmove_forward < 0 ) + level.selectedmove_forward = 0; + + if ( ctrlheld ) + { + level.selectedmove_forward = 0.1; + wait 0.05; + } + else + level.selectedmove_forward += 1; + } + else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) ) + { + if ( level.selectedmove_forward > 0 ) + level.selectedmove_forward = 0; + + if ( ctrlheld ) + { + level.selectedmove_forward = -1 * 0.1; + wait 0.05; + } + else + level.selectedmove_forward -= 1; + } + else + level.selectedmove_forward = 0; + + if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) ) + { + if ( level.selectedmove_right < 0 ) + level.selectedmove_right = 0; + + if ( ctrlheld ) + { + level.selectedmove_right = 0.1; + wait 0.05; + } + else + level.selectedmove_right += 1; + } + else if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) ) + { + if ( level.selectedmove_right > 0 ) + level.selectedmove_right = 0; + + if ( ctrlheld ) + { + level.selectedmove_right = -1 * 0.1; + wait 0.05; + } + else + level.selectedmove_right -= 1; + } + else + level.selectedmove_right = 0; + + if ( buttondown( "BUTTON_Y" ) ) + { + if ( level.selectedmove_up < 0 ) + level.selectedmove_up = 0; + + if ( ctrlheld ) + { + level.selectedmove_up = 0.1; + wait 0.05; + } + else + level.selectedmove_up += 1; + } + else if ( buttondown( "BUTTON_B" ) ) + { + if ( level.selectedmove_up > 0 ) + level.selectedmove_up = 0; + + if ( ctrlheld ) + { + level.selectedmove_up = -1 * 0.1; + wait 0.05; + } + else + level.selectedmove_up -= 1; + } + else + level.selectedmove_up = 0; + + vector = ( 0, 0, 0 ); + vector += vectorscale( forward, level.selectedmove_forward ); + vector += vectorscale( right, level.selectedmove_right ); + vector += vectorscale( up, level.selectedmove_up ); + return vector; +} + +process_button_held_and_clicked() +{ + add_button( "mouse1" ); + add_kb_button( "shift" ); + add_kb_button( "ctrl" ); + add_button( "BUTTON_RSHLDR" ); + add_button( "BUTTON_LSHLDR" ); + add_button( "BUTTON_RSTICK" ); + add_button( "BUTTON_LSTICK" ); + add_button( "BUTTON_A" ); + add_button( "BUTTON_B" ); + add_button( "BUTTON_X" ); + add_button( "BUTTON_Y" ); + add_button( "DPAD_UP" ); + add_button( "DPAD_LEFT" ); + add_button( "DPAD_RIGHT" ); + add_button( "DPAD_DOWN" ); + add_kb_button( "escape" ); + add_button( "BUTTON_RTRIG" ); + add_button( "BUTTON_LTRIG" ); + add_kb_button( "a" ); + add_button( "F1" ); + add_button( "F5" ); + add_button( "F2" ); + add_kb_button( "c" ); + add_kb_button( "d" ); + add_kb_button( "f" ); + add_kb_button( "h" ); + add_kb_button( "i" ); + add_kb_button( "j" ); + add_kb_button( "k" ); + add_kb_button( "l" ); + add_kb_button( "m" ); + add_kb_button( "p" ); + add_kb_button( "q" ); + add_kb_button( "r" ); + add_kb_button( "s" ); + add_kb_button( "v" ); + add_kb_button( "x" ); + add_kb_button( "z" ); + add_button( "del" ); + add_kb_button( "end" ); + add_kb_button( "tab" ); + add_kb_button( "ins" ); + add_kb_button( "add" ); + add_kb_button( "space" ); + add_kb_button( "enter" ); + add_kb_button( "leftarrow" ); + add_kb_button( "rightarrow" ); + add_kb_button( "1" ); + add_kb_button( "2" ); + add_kb_button( "3" ); + add_kb_button( "4" ); + add_kb_button( "5" ); + add_kb_button( "6" ); + add_kb_button( "7" ); + add_kb_button( "8" ); + add_kb_button( "9" ); + add_kb_button( "0" ); + add_kb_button( "~" ); +} + +locked( name ) +{ + if ( isdefined( level.createfx_lockedlist[name] ) ) + return 0; + + return kb_locked( name ); +} + +kb_locked( name ) +{ + return level.createfx_inputlocked && isdefined( level.button_is_kb[name] ); +} + +add_button( name ) +{ + player = get_players()[0]; + + if ( locked( name ) ) + return; + + if ( !isdefined( level.buttonisheld[name] ) ) + { + if ( player buttonpressed( name ) ) + { + level.buttonisheld[name] = 1; + level.buttonclick[name] = 1; + } + } + else if ( !player buttonpressed( name ) ) + level.buttonisheld[name] = undefined; +} + +add_kb_button( name ) +{ + level.button_is_kb[name] = 1; + add_button( name ); +} + +set_anglemod_move_vector() +{ +/# + ctrlheld = button_is_held( "ctrl", "BUTTON_LSHLDR" ); + players = get_players(); + + if ( level.is_camera_on == 1 ) + { + newmovement = players[0] getnormalizedmovement(); + dolly_movement = players[0] getnormalizedcameramovement(); + + if ( newmovement[1] <= -0.3 ) + level.selectedrotate_yaw -= 1; + else if ( newmovement[1] >= 0.3 ) + level.selectedrotate_yaw += 1; + else if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) ) + { + if ( level.selectedrotate_yaw < 0 ) + level.selectedrotate_yaw = 0; + + level.selectedrotate_yaw += 0.1; + } + else if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) ) + { + if ( level.selectedrotate_yaw > 0 ) + level.selectedrotate_yaw = 0; + + level.selectedrotate_yaw -= 0.1; + } + else + level.selectedrotate_yaw = 0; + + if ( dolly_movement[0] <= -0.2 ) + level.selectedrotate_pitch += 1; + else if ( dolly_movement[0] >= 0.2 ) + level.selectedrotate_pitch -= 1; + else if ( buttondown( "kp_uparrow", "DPAD_UP" ) ) + { + if ( level.selectedrotate_pitch < 0 ) + level.selectedrotate_pitch = 0; + + level.selectedrotate_pitch += 0.1; + } + else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) ) + { + if ( level.selectedrotate_pitch > 0 ) + level.selectedrotate_pitch = 0; + + level.selectedrotate_pitch -= 0.1; + } + else + level.selectedrotate_pitch = 0; + + if ( buttondown( "BUTTON_Y" ) ) + { + if ( level.selectedrotate_roll < 0 ) + level.selectedrotate_roll = 0; + + level.selectedrotate_roll += 0.1; + } + else if ( buttondown( "BUTTON_B" ) ) + { + if ( level.selectedrotate_roll > 0 ) + level.selectedrotate_roll = 0; + + level.selectedrotate_roll -= 0.1; + } + else + level.selectedrotate_roll = 0; + } + else + { + if ( buttondown( "kp_uparrow", "DPAD_UP" ) ) + { + if ( level.selectedrotate_pitch < 0 ) + level.selectedrotate_pitch = 0; + + if ( ctrlheld ) + { + level.selectedrotate_pitch = 0.1; + wait 0.05; + } + else + level.selectedrotate_pitch += 1; + } + else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) ) + { + if ( level.selectedrotate_pitch > 0 ) + level.selectedrotate_pitch = 0; + + if ( ctrlheld ) + { + level.selectedrotate_pitch = -1 * 0.1; + wait 0.05; + } + else + level.selectedrotate_pitch -= 1; + } + else + level.selectedrotate_pitch = 0; + + if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) ) + { + if ( level.selectedrotate_yaw < 0 ) + level.selectedrotate_yaw = 0; + + if ( ctrlheld ) + { + level.selectedrotate_yaw = 0.1; + wait 0.05; + } + else + level.selectedrotate_yaw += 1; + } + else if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) ) + { + if ( level.selectedrotate_yaw > 0 ) + level.selectedrotate_yaw = 0; + + if ( ctrlheld ) + { + level.selectedrotate_yaw = -1 * 0.1; + wait 0.05; + } + else + level.selectedrotate_yaw -= 1; + } + else + level.selectedrotate_yaw = 0; + + if ( buttondown( "BUTTON_Y" ) ) + { + if ( level.selectedrotate_roll < 0 ) + level.selectedrotate_roll = 0; + + if ( ctrlheld ) + { + level.selectedrotate_roll = 0.1; + wait 0.05; + } + else + level.selectedrotate_roll += 1; + } + else if ( buttondown( "BUTTON_B" ) ) + { + if ( level.selectedrotate_roll > 0 ) + level.selectedrotate_roll = 0; + + if ( ctrlheld ) + { + level.selectedrotate_roll = -1 * 0.1; + wait 0.05; + } + else + level.selectedrotate_roll -= 1; + } + else + level.selectedrotate_roll = 0; + } +#/ +} + +cfxprintln( file, string ) +{ +/# + if ( file == -1 ) + return; + + fprintln( file, string ); +#/ +} + +update_save_bar( number ) +{ + level notify( "saving_start" ); + level endon( "saving_start" ); + level.current_saving_number = 0; + + while ( level.current_saving_number < level.createfxent.size ) + { + center_text_clear(); + center_text_add( "Saving Createfx to File" ); + center_text_add( "Saving effect " + level.current_saving_number + "/" + level.createfxent.size ); + center_text_add( "Do not reset Xenon until saving is complete." ); + wait 0.05; + center_text_clear(); + } + + center_text_add( "Saving Complete." ); + center_text_add( level.createfxent.size + " effects saved to files." ); +} + +generate_fx_log( type, autosave ) +{ +/# + autosave = isdefined( autosave ); + + if ( type == "server" ) + { + if ( !autosave ) + filename = level.cfx_server_scriptdata + level.script + "_fx.gsc"; + else + filename = level.cfx_server_scriptdata + "backup.gsc"; + + call_loop = level.cfx_server_loop; + call_oneshot = level.cfx_server_oneshot; + call_exploder = level.cfx_server_exploder; + call_loopsound = level.cfx_server_loopsound; + } + else if ( type == "client" ) + { + if ( !autosave ) + filename = level.cfx_client_scriptdata + level.script + "_fx.csc"; + else + filename = level.cfx_client_scriptdata + "backup.csc"; + + call_loop = level.cfx_client_loop; + call_oneshot = level.cfx_client_oneshot; + call_exploder = level.cfx_client_exploder; + call_loopsound = level.cfx_client_loopsound; + } + else + { + println( "^1Error: Improper type in generate_fx_log()" ); + return; + } + + file = openfile( filename, "write" ); + + if ( file == -1 ) + { + level.write_error = filename; + + if ( type == "server" ) + return 1; + else if ( type == "client" ) + return 2; + else + return 3; + } + else + { + cfxprintln( file, "//_createfx generated. Do not touch!!" ); + cfxprintln( file, "main()" ); + cfxprintln( file, "{" ); + + for ( p = 0; p < level.createfxent.size; p++ ) + { + ent = level.createfxent[p]; + origin = []; + angles = []; + + for ( i = 0; i < 3; i++ ) + { + origin[i] = ent.v["origin"][i]; + angles[i] = ent.v["angles"][i]; + + if ( origin[i] < 0.1 && origin[i] > 0.1 * -1 ) + origin[i] = 0; + + if ( angles[i] < 0.1 && angles[i] > 0.1 * -1 ) + angles[i] = 0; + } + + ent.v["origin"] = ( origin[0], origin[1], origin[2] ); + ent.v["angles"] = ( angles[0], angles[1], angles[2] ); + } + + if ( !autosave ) + println( " *** CREATING EFFECT, COPY THESE LINES TO ", level.script, "_fx.gsc *** " ); + + cfxprintln( file, "// CreateFX entities placed: " + level.createfxent.size - level.non_fx_ents ); + breather = 0; + + if ( autosave ) + breather_pause = 1; + else + breather_pause = 5; + + for ( i = 0; i < level.createfxent.size; i++ ) + { + e = level.createfxent[i]; + assert( isdefined( e.v["type"] ), "effect at origin " + e.v["origin"] + " has no type" ); + + if ( isdefined( e.model ) ) + continue; + + if ( e.v["fxid"] == "No FX" ) + continue; + + output_name = "\\t"; + output_props = "\\t"; + ent_type = e.v["type"]; + + if ( ent_type == "loopfx" ) + output_name += ( "ent = " + call_loop + "( \"" + e.v["fxid"] + "\" );" ); + + if ( ent_type == "oneshotfx" ) + output_name += ( "ent = " + call_oneshot + "( \"" + e.v["fxid"] + "\" );" ); + + if ( ent_type == "exploder" ) + output_name += ( "ent = " + call_exploder + "( \"" + e.v["fxid"] + "\" );" ); + + if ( ent_type == "soundfx" ) + output_name += ( "ent = " + call_loopsound + "();" ); + + output_props += get_fx_options( e ); + cfxprintln( file, output_name ); + cfxprintln( file, output_props ); + cfxprintln( file, "\\t" ); + breather++; + + if ( breather >= breather_pause ) + { + wait 0.05; + breather = 0; + } + } + + if ( level.bscriptgened ) + { + script_gen_dump_addline( level.cfx_server_scriptgendump, level.script + "_fx" ); + [[ level.cfx_func_script_gen_dump ]](); + } + + cfxprintln( file, "}" ); + saved = closefile( file ); + assert( saved == 1, "File not saved (see above message?): " + filename ); + println( "CreateFX entities placed: " + level.createfxent.size - level.non_fx_ents ); + return 0; + } +#/ +} + +get_fx_options( ent ) +{ + output_props = ""; + + for ( i = 0; i < level.createfx_options.size; i++ ) + { + option = level.createfx_options[i]; + + if ( !isdefined( ent.v[option["name"]] ) ) + continue; + + if ( !mask( option["mask"], ent.v["type"] ) ) + continue; + + if ( option["type"] == "string" ) + { + if ( option["name"] == "fxid" ) + continue; + + output_props += ( "ent.v[ \"" + option["name"] + "\" ] = \"" + ent.v[option["name"]] + "\"; " ); + continue; + } + + output_props += ( "ent.v[ \"" + option["name"] + "\" ] = " + ent.v[option["name"]] + "; " ); + } + + return output_props; +} + +entity_highlight_disable() +{ + self notify( "highlight change" ); + self endon( "highlight change" ); + + for (;;) + { + self.textalpha -= 0.05; + + if ( self.textalpha < 0.4 ) + break; + + wait 0.05; + } + + self.textalpha = 0.4; +} + +entity_highlight_enable() +{ + self notify( "highlight change" ); + self endon( "highlight change" ); + + for (;;) + { + self.textalpha += 0.05; + + if ( self.textalpha > 1 ) + break; + + wait 0.05; + } + + self.textalpha = 1; +} + +get_center_of_array( array ) +{ + center = ( 0, 0, 0 ); + + for ( i = 0; i < array.size; i++ ) + center = ( center[0] + array[i].v["origin"][0], center[1] + array[i].v["origin"][1], center[2] + array[i].v["origin"][2] ); + + return ( center[0] / array.size, center[1] / array.size, center[2] / array.size ); +} + +rotation_is_occuring() +{ + if ( level.selectedrotate_roll != 0 ) + return 1; + + if ( level.selectedrotate_pitch != 0 ) + return 1; + + return level.selectedrotate_yaw != 0; +} + +process_fx_rotater() +{ + if ( level.fx_rotating ) + return; + + set_anglemod_move_vector(); + + if ( !rotation_is_occuring() ) + return; + + level.fx_rotating = 1; + + if ( level.cfx_last_action != "rotate" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "rotate"; + } + + if ( level.selected_fx_ents.size > 1 ) + { + center = get_center_of_array( level.selected_fx_ents ); + org = spawn( "script_origin", center ); + org.v["angles"] = level.selected_fx_ents[0].v["angles"]; + org.v["origin"] = center; + rotater = []; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + rotater[i] = spawn( "script_origin", level.selected_fx_ents[i].v["origin"] ); + rotater[i].angles = level.selected_fx_ents[i].v["angles"]; + rotater[i] linkto( org ); + } + + rotate_over_time( org, rotater ); + org delete(); + + for ( i = 0; i < rotater.size; i++ ) + rotater[i] delete(); + } + else if ( level.selected_fx_ents.size == 1 ) + { + ent = level.selected_fx_ents[0]; + rotater = spawn( "script_origin", ( 0, 0, 0 ) ); + rotater.angles = ent.v["angles"]; + + if ( level.selectedrotate_pitch != 0 ) + rotater devaddpitch( level.selectedrotate_pitch ); + else if ( level.selectedrotate_yaw != 0 ) + rotater devaddyaw( level.selectedrotate_yaw ); + else + rotater devaddroll( level.selectedrotate_roll ); + + ent.v["angles"] = rotater.angles; + rotater delete(); + wait 0.05; + } + + level.fx_rotating = 0; +} + +rotate_over_time( org, rotater ) +{ + level endon( "new_ent_selection" ); + + for ( p = 0; p < 2; p++ ) + { + if ( level.selectedrotate_pitch != 0 ) + org devaddpitch( level.selectedrotate_pitch ); + else if ( level.selectedrotate_yaw != 0 ) + org devaddyaw( level.selectedrotate_yaw ); + else + org devaddroll( level.selectedrotate_roll ); + + wait 0.05; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + + if ( isdefined( ent.model ) ) + continue; + + ent.v["origin"] = rotater[i].origin; + ent.v["angles"] = rotater[i].angles; + } + } +} + +delete_pressed() +{ + if ( level.createfx_inputlocked ) + { + remove_selected_option(); + return; + } + + delete_selection(); +} + +remove_selected_option() +{ + if ( !isdefined( level.selected_fx_option_index ) ) + return; + + name = level.createfx_options[level.selected_fx_option_index]["name"]; + + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + + if ( !ent_is_selected( ent ) ) + continue; + + ent remove_option( name ); + } + + update_selected_entities(); + clear_settable_fx(); +} + +remove_option( name ) +{ + self.v[name] = undefined; +} + +delete_selection() +{ + newarray = []; + + if ( level.selected_fx_ents.size < 1 ) + return; + + store_undo_state( "delete", level.selected_fx_ents ); + level.cfx_last_action = "none"; + + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + + if ( ent_is_selected( ent ) ) + { + if ( isdefined( ent.looper ) ) + ent.looper delete(); + + level.fx_highlightedent = undefined; + ent notify( "stop_loop" ); + continue; + } + + newarray[newarray.size] = ent; + } + + level.createfxent = newarray; + level.selected_fx = []; + level.selected_fx_ents = []; + clear_fx_hudelements(); +} + +move_selection_to_cursor( skip_undo ) +{ + origin = level.createfxcursor["position"]; + + if ( level.selected_fx_ents.size <= 0 ) + return; + + if ( !isdefined( skip_undo ) && level.cfx_last_action != "move_to_cursor" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "move_to_cursor"; + } + + center = get_center_of_array( level.selected_fx_ents ); + difference = center - origin; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + + if ( isdefined( ent.model ) ) + continue; + + ent.v["origin"] -= difference; + } +} + +insert_effect() +{ + setmenu( "creation" ); + level.effect_list_offset = 0; + clear_fx_hudelements(); + set_fx_hudelement( "Pick effect type to create:" ); + set_fx_hudelement( "1. One Shot fx" ); + set_fx_hudelement( "2. Looping fx" ); + set_fx_hudelement( "3. Exploder" ); + set_fx_hudelement( "4. Looping sound" ); + set_fx_hudelement( "(c) Cancel" ); + set_fx_hudelement( "(x) Exit" ); +} + +show_help() +{ + clear_fx_hudelements(); + set_fx_hudelement( "Help:" ); + set_fx_hudelement( "I Insert effect" ); + set_fx_hudelement( "Shift + D Delete selected effects" ); + set_fx_hudelement( "F + 5 Save" ); + set_fx_hudelement( "A button Toggle the selection of the current effect" ); + set_fx_hudelement( "X button Toggle effect rotation mode" ); + set_fx_hudelement( "Y button Move selected effects up or rotate X axis" ); + set_fx_hudelement( "B button Move selected effects down or rotate X axis" ); + set_fx_hudelement( "D-pad Up/Down Move selected effects Forward/Backward or rotate Y axis" ); + set_fx_hudelement( "D-pad Left/Right Move selected effects Left/Right or rotate Z axis" ); + set_fx_hudelement( "R Shoulder Move selected effects to the cursor" ); + set_fx_hudelement( "L Shoulder Hold to select multiple effects" ); + set_fx_hudelement( "Right Arrow Next page in options menu" ); + set_fx_hudelement( "Left Arrow Previous page in options menu" ); + set_fx_hudelement( "A Add option to the selected effects" ); + set_fx_hudelement( "X Exit effect options menu" ); + set_fx_hudelement( "Shift + D Drop selected effects to the ground" ); + set_fx_hudelement( "R Reset the rotation of the selected effects" ); + set_fx_hudelement( "L Stick Copy effects" ); + set_fx_hudelement( "R Stick Paste effects" ); + set_fx_hudelement( "V Copy the angles from the most recently selected fx onto all selected fx." ); + set_fx_hudelement( "F + 2 Toggle CreateFX dot and menu drawing" ); + set_fx_hudelement( "U UFO" ); + set_fx_hudelement( "N Noclip" ); + set_fx_hudelement( "R Trig + L Trig Jump forward 8000 units" ); + set_fx_hudelement( "T Toggle Timescale FAST" ); + set_fx_hudelement( "Y Toggle Timescale SLOW" ); + set_fx_hudelement( "H Toggle FX Visibility" ); + set_fx_hudelement( "W Toggle effect wireframe" ); + set_fx_hudelement( "P Toggle FX Profile" ); +} + +center_text_init() +{ + level.cfx_center_text = []; + level.cfx_center_text_index = 0; + level.cfx_center_text_max = 3; + new_array = []; + + for ( p = 0; p < level.cfx_center_text_max; p++ ) + { + center_hud = newdebughudelem(); + center_hud settext( " " ); + center_hud.horzalign = "center"; + center_hud.vertalign = "middle"; + center_hud.alignx = "center"; + center_hud.aligny = "middle"; + center_hud.foreground = 1; + center_hud.fontscale = 1.1; + center_hud.sort = 21; + center_hud.alpha = 1; + center_hud.color = ( 1, 0, 0 ); + center_hud.y = p * 25; + new_array[p] = center_hud; + } + + level.cfx_center_text = new_array; +} + +center_text_add( text ) +{ + if ( isdefined( text ) && isdefined( level.cfx_center_text ) ) + { + level.cfx_center_text[level.cfx_center_text_index] settext( text ); + level.cfx_center_text_index++; + + if ( level.cfx_center_text_index >= level.cfx_center_text_max ) + level.cfx_center_text_index = level.cfx_center_text_max - 1; + } +} + +center_text_clear() +{ + for ( p = 0; p < level.cfx_center_text_max; p++ ) + level.cfx_center_text[p] settext( " " ); + + level.cfx_center_text_index = 0; +} + +write_error_msg( filename ) +{ + level notify( "write_error" ); + level endon( "write_error" ); + + if ( isdefined( filename ) ) + { + center_text_clear(); + center_text_add( "File " + filename + " is not writeable." ); + center_text_add( "If it's checked out, restart your computer!" ); + center_text_add( "Hold the A Button to dismiss." ); + + for (;;) + { + player = get_players()[0]; + + if ( player buttonpressed( "BUTTON_A" ) ) + { + center_text_clear(); + level.write_error = ""; + break; + } + + wait 0.25; + } + } +} + +select_last_entity( skip_undo ) +{ + select_entity( level.createfxent.size - 1, level.createfxent[level.createfxent.size - 1], skip_undo ); +} + +post_entity_creation_function() +{ + self.textalpha = 0; + self.drawn = 1; +} + +copy_ents() +{ + if ( level.selected_fx_ents.size <= 0 ) + return; + + array = []; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + newent = spawnstruct(); + newent.v = ent.v; + newent post_entity_creation_function(); + array[array.size] = newent; + } + + level.stored_ents = array; +} + +paste_ents() +{ + delay_min = getdvarint( "createfx_oneshot_min_delay" ); + delay_max = getdvarint( "createfx_oneshot_max_delay" ); + + if ( delay_min > delay_max ) + { + temp = delay_min; + delay_min = delay_max; + delay_max = temp; + } + + if ( !isdefined( level.stored_ents ) ) + return; + + clear_entity_selection(); + + if ( level.cfx_last_action != "none" ) + store_undo_state( "edit", level.selected_fx_ents ); + + level.cfx_last_action = "none"; + + for ( i = 0; i < level.stored_ents.size; i++ ) + { + level.stored_ents[i].uniqueid = level.cfx_uniqueid; + level.cfx_uniqueid++; + + if ( level.stored_ents[i].v["type"] == "oneshotfx" ) + level.stored_ents[i].v["delay"] = randomintrange( delay_min, delay_max ); + + add_and_select_entity( level.stored_ents[i], "skip_undo" ); + } + + move_selection_to_cursor( "skip_undo" ); + update_selected_entities(); + store_undo_state( "add", level.stored_ents ); + level.stored_ents = []; + copy_ents(); +} + +paste_ents_onto_ents() +{ + if ( !isdefined( level.stored_ents ) || !isdefined( level.selected_fx_ents ) ) + return; + + if ( level.stored_ents.size < 1 || level.selected_fx_ents.size < 1 ) + return; + + if ( level.stored_ents.size != level.selected_fx_ents.size ) + { +/# + println( "^2CreateFX: Number of source ents must match the number of destination ents for Paste Into to work." ); +#/ + return; + } + + if ( level.cfx_last_action != "none" ) + store_undo_state( "edit", level.selected_fx_ents ); + + level.cfx_last_action = "none"; + selected_ents_temp = level.selected_fx_ents; + + for ( i = 0; i < level.stored_ents.size; i++ ) + { + source_ent = level.stored_ents[i]; + target_ent = level.selected_fx_ents[i]; + source_ent.uniqueid = level.cfx_uniqueid; + level.cfx_uniqueid++; + source_ent.v["angles"] = target_ent.v["angles"]; + source_ent.v["origin"] = target_ent.v["origin"]; + add_and_select_entity( source_ent, "skip_undo" ); + } + + for ( i = 0; i < selected_ents_temp.size; i++ ) + deselect_entity( selected_ents_temp[i].last_fx_index, selected_ents_temp[i] ); + + update_selected_entities(); + store_undo_state( "add", level.stored_ents ); + level.stored_ents = []; + copy_ents(); +} + +add_and_select_entity( ent, skip_undo ) +{ + level.createfxent[level.createfxent.size] = ent; + select_last_entity( skip_undo ); +} + +stop_fx_looper() +{ + if ( isdefined( self.looper ) ) + self.looper delete(); + + self [[ level.cfx_func_stop_loopsound ]](); +} + +restart_fx_looper() +{ + stop_fx_looper(); + self set_forward_and_up_vectors(); + + if ( self.v["type"] == "loopfx" ) + self [[ level.cfx_func_create_looper ]](); + + if ( self.v["type"] == "oneshotfx" ) + self [[ level.cfx_func_create_triggerfx ]](); + + if ( self.v["type"] == "soundfx" ) + self [[ level.cfx_func_create_loopsound ]](); +} + +update_selected_entities() +{ + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + ent restart_fx_looper(); + } +} + +copy_angles_of_selected_ents() +{ + level notify( "new_ent_selection" ); + + if ( level.cfx_last_action != "copy_angles" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "copy_angles"; + } + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + ent.v["angles"] = level.selected_fx_ents[level.selected_fx_ents.size - 1].v["angles"]; + ent set_forward_and_up_vectors(); + } + + update_selected_entities(); +} + +reset_axis_of_selected_ents() +{ + level notify( "new_ent_selection" ); + + if ( level.cfx_last_action != "reset_axis" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "reset_axis"; + } + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + ent.v["angles"] = ( 0, 0, 0 ); + ent set_forward_and_up_vectors(); + } + + update_selected_entities(); +} + +last_selected_entity_has_changed( lastselectentity ) +{ + if ( isdefined( lastselectentity ) ) + { + if ( !entities_are_selected() ) + return 1; + } + else + return entities_are_selected(); + + return lastselectentity != level.selected_fx_ents[level.selected_fx_ents.size - 1]; +} + +createfx_showorigin( id, org, delay, org2, type, exploder, id2, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout ) +{ + +} + +drop_selection_to_ground() +{ + if ( level.cfx_last_action != "drop_to_ground" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "drop_to_ground"; + } + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + trace = bullettrace( ent.v["origin"], ent.v["origin"] + vectorscale( ( 0, 0, -1 ), 2048.0 ), 0, undefined ); + ent.v["origin"] = trace["position"]; + } +} + +set_off_exploders() +{ + level notify( "createfx_exploder_reset" ); + exploders = []; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + + if ( isdefined( ent.v["exploder"] ) ) + exploders[ent.v["exploder"]] = 1; + } + + keys = getarraykeys( exploders ); + + for ( i = 0; i < keys.size; i++ ) + exploder( keys[i] ); +} + +turn_off_exploders() +{ + level notify( "createfx_exploder_reset" ); + exploders = []; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + + if ( isdefined( ent.v["exploder"] ) ) + exploders[ent.v["exploder"]] = 1; + } + + keys = getarraykeys( exploders ); + + for ( i = 0; i < keys.size; i++ ) + stop_exploder( keys[i] ); +} + +draw_distance() +{ + count = 0; + last_pos = ( 0, 0, 0 ); + + if ( getdvarint( "createfx_drawdist" ) == 0 ) + setdvar( "createfx_drawdist", "1500" ); + + player = get_players()[0]; + + for (;;) + { + maxdist = getdvarint( "createfx_drawdist" ); + maxdistsqr = maxdist * maxdist; +/# + if ( flag( "createfx_saving" ) ) + println( "Waiting for createfx to save..." ); +#/ + flag_waitopen( "createfx_saving" ); + + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + + if ( ent_is_selected( ent ) ) + ent.drawn = 1; + else + ent.drawn = distancesquared( player.origin, ent.v["origin"] ) <= maxdistsqr; + + count++; + + if ( count > 50 ) + { + count = 0; + wait 0.05; + } + } + + wait 0.1; + + while ( distancesquared( player.origin, last_pos ) < 2500 ) + wait 0.1; + + last_pos = player.origin; + } +} + +createfx_save( autosave ) +{ + flag_waitopen( "createfx_saving" ); + flag_set( "createfx_saving" ); + resettimeout(); + + if ( isdefined( autosave ) ) + savemode = "AUTOSAVE"; + else + savemode = "USER SAVE"; + + type = "server"; + old_time = gettime(); +/# + println( "\\n^3#### CREATEFX SERVER " + savemode + " BEGIN ####" ); +#/ + file_error = generate_fx_log( type, autosave ); +/# + println( "^3#### CREATEFX SERVER " + savemode + " END (Time: " + ( gettime() - old_time ) * 0.001 + " seconds)####" ); +#/ + if ( file_error ) + { +/# + println( "^3#### CREATEFX " + savemode + " CANCELLED ####" ); +#/ + createfx_emergency_backup(); + } + else + { + if ( level.clientscripts && !isdefined( autosave ) ) + { + old_time = gettime(); +/# + println( "\\n^3#### CREATEFX CLIENT " + savemode + " BEGIN ####" ); +#/ + file_error = generate_fx_log( "client" ); +/# + println( "^3#### CREATEFX CLIENT " + savemode + " END (Time: " + ( gettime() - old_time ) * 0.001 + " seconds)####" ); +#/ + if ( file_error ) + { +/# + iprintln( "CreateFX clientscript file is not writeable! Aborting save." ); +#/ +/# + println( "^3#### CREATEFX " + savemode + " CANCELLED ####" ); +#/ + return; + } + } + + flag_clear( "createfx_saving" ); + } +} + +createfx_autosave() +{ + for (;;) + { + wait_time = getdvarint( "createfx_autosave_time" ); + + if ( wait_time < 120 || isstring( wait_time ) ) + wait_time = 120; + + wait( wait_time ); + + if ( !flag( "createfx_saving" ) ) + createfx_save( 1 ); + } +} + +createfx_emergency_backup() +{ +/# + println( "^5#### CREATEFX EMERGENCY BACKUP BEGIN ####" ); +#/ + file_error = generate_fx_log( "server", 1 ); + + if ( file_error ) + { +/# + iprintln( "Error saving to backup.gsc. All is lost!" ); +#/ + } + else + { +/# + println( "^5#### CREATEFX EMERGENCY BACKUP END ####" ); +#/ + } + + flag_clear( "createfx_saving" ); +} + +move_player_around_map_fast() +{ + player = get_players()[0]; + direction = player getplayerangles(); + direction_vec = anglestoforward( direction ); + eye = player geteye(); + trace = bullettrace( eye, eye + vectorscale( direction_vec, 20000 ), 0, undefined ); + dist = distance( eye, trace["position"] ); + position = eye + vectorscale( direction_vec, dist - 64 ); + player setorigin( position ); +} + +move_player_to_next_same_effect( forward_search, lastselectentity ) +{ + player = get_players()[0]; + direction = player getplayerangles(); + direction_vec = anglestoforward( direction ); + + if ( !isdefined( forward_search ) ) + forward_search = 1; + + ent = level.selected_fx_ents[level.selected_fx_ents.size - 1]; + start_index = 0; + + if ( level.selected_fx_ents.size <= 0 ) + { + if ( forward_search ) + ent = level.cfx_next_ent; + else + ent = level.cfx_previous_ent; + + if ( isdefined( ent ) ) + { + index = get_ent_index( ent ); + + if ( index >= 0 ) + { + select_entity( index, ent ); + position = ent.v["origin"] - vectorscale( direction_vec, 175 ); + player setorigin( position ); + level.cfx_previous_ent = ent; + level.cfx_next_ent = get_next_ent_with_same_id( index, ent.v["fxid"] ); + } + else if ( forward_search ) + level.cfx_next_ent = undefined; + else + level.cfx_previous_ent = undefined; + } + + return; + } + + if ( level.selected_fx_ents.size == 1 ) + { + for ( i = 0; i < level.createfxent.size; i++ ) + { + if ( isdefined( level.selected_fx[i] ) ) + { + start_index = i; + deselect_entity( i, ent ); + break; + } + } + + if ( forward_search ) + { + level.cfx_previous_ent = ent; + ent = get_next_ent_with_same_id( i, ent.v["fxid"] ); + select_entity( level.ent_found_index, ent ); + position = ent.v["origin"] - vectorscale( direction_vec, 175 ); + player setorigin( position ); + level.cfx_next_ent = get_next_ent_with_same_id( level.ent_found_index, ent.v["fxid"] ); + return; + } + else + { + level.cfx_next_ent = ent; + ent = get_previous_ent_with_same_id( i, ent.v["fxid"] ); + select_entity( level.ent_found_index, ent ); + position = ent.v["origin"] - vectorscale( direction_vec, 175 ); + player setorigin( position ); + level.cfx_previous_ent = get_previous_ent_with_same_id( level.ent_found_index, ent.v["fxid"] ); + return; + } + } + else + { + if ( isdefined( level.last_ent_moved_to ) && !last_selected_entity_has_changed( lastselectentity ) ) + ent = level.last_ent_moved_to; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + if ( ent == level.selected_fx_ents[i] ) + break; + } + + if ( forward_search ) + { + if ( i < level.selected_fx_ents.size - 1 ) + { + i++; + ent = level.selected_fx_ents[i]; + } + else + ent = level.selected_fx_ents[0]; + } + else if ( i > 0 ) + ent = level.selected_fx_ents[i - 1]; + else + ent = level.selected_fx_ents[level.selected_fx_ents.size - 1]; + + level.last_ent_moved_to = ent; + position = ent.v["origin"] - vectorscale( direction_vec, 175 ); + player setorigin( position ); + } +} + +get_next_ent_with_same_id( index, ent_id ) +{ + for ( i = index + 1; i < level.createfxent.size; i++ ) + { + if ( ent_id == level.createfxent[i].v["fxid"] ) + { + level.ent_found_index = i; + return level.createfxent[i]; + } + } + + for ( i = 0; i < index; i++ ) + { + if ( ent_id == level.createfxent[i].v["fxid"] ) + { + level.ent_found_index = i; + return level.createfxent[i]; + } + } + + level.ent_found_index = index; + return level.createfxent[index]; +} + +get_previous_ent_with_same_id( index, ent_id ) +{ + for ( i = index - 1; i > 0; i-- ) + { + if ( ent_id == level.createfxent[i].v["fxid"] ) + { + level.ent_found_index = i; + return level.createfxent[i]; + } + } + + for ( i = level.createfxent.size - 1; i > index; i-- ) + { + if ( ent_id == level.createfxent[i].v["fxid"] ) + { + level.ent_found_index = i; + return level.createfxent[i]; + } + } + + level.ent_found_index = index; + return level.createfxent[index]; +} + +get_ent_index( ent ) +{ + for ( i = 0; i < level.createfxent.size; i++ ) + { + if ( ent == level.createfxent[i] ) + return i; + } + + return -1; +} + +select_ents_by_property( property, add_to_selection ) +{ + ent = level.selected_fx_ents[level.selected_fx_ents.size - 1]; + prop_to_match = ent.v[property]; + + if ( !isdefined( add_to_selection ) ) + clear_entity_selection(); + + for ( i = 0; i < level.createfxent.size; i++ ) + { + if ( isdefined( level.createfxent[i].v[property] ) ) + { + if ( level.createfxent[i].v[property] == prop_to_match ) + select_entity( i, level.createfxent[i] ); + } + } +} + +print_ambient_fx_inventory() +{ +/# + fx_list = get_level_ambient_fx(); + ent_list = []; + fx_list_count = []; + println( "\\n\\n^2INVENTORY OF AMBIENT EFFECTS: " ); + + for ( i = 0; i < level.createfxent.size; i++ ) + ent_list[i] = level.createfxent[i].v["fxid"]; + + for ( i = 0; i < fx_list.size; i++ ) + { + count = 0; + + for ( j = 0; j < ent_list.size; j++ ) + { + if ( fx_list[i] == ent_list[j] ) + { + count++; + ent_list[j] = ""; + } + } + + fx_list_count[i] = count; + } + + for ( i = 0; i < fx_list_count.size - 1; i++ ) + { + for ( j = i + 1; j < fx_list_count.size; j++ ) + { + if ( fx_list_count[j] < fx_list_count[i] ) + { + temp_count = fx_list_count[i]; + temp_id = fx_list[i]; + fx_list_count[i] = fx_list_count[j]; + fx_list[i] = fx_list[j]; + fx_list_count[j] = temp_count; + fx_list[j] = temp_id; + } + } + } + + for ( i = 0; i < fx_list_count.size; i++ ) + { + switch ( fx_list_count[i] ) + { + case 0: + print( "^1" ); + break; + case 1: + print( "^3" ); + break; + default: + break; + } + + print( fx_list_count[i] + "\\t" + fx_list[i] + "\\n" ); + } + + print( "\\n" ); +#/ +} + +vector_changed( old, new ) +{ + if ( distancesquared( old, new ) >= 1 ) + return true; + + return false; +} + +dot_changed( old, new ) +{ + dot = vectordot( old, new ); + + if ( dot < 1 ) + return true; + + return false; +} + +damage_void( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) +{ + +} + +handle_camera() +{ +/# + level notify( "new_camera" ); + level endon( "new_camera" ); + movement = ( 0, 0, 0 ); + + if ( !isdefined( level.camera ) ) + { + level.camera = spawn( "script_origin", ( 0, 0, 0 ) ); + level.camera setmodel( "tag_origin" ); + } + + players = get_players(); + players[0] playerlinktodelta( level.camera, "tag_origin", 1, 0, 0, 0, 0, 1 ); + players[0] disableweapons(); + level.camera_snapto = 1; + level.stick_camera = 1; + level.camera_prev_snapto = 0; + level.cameravec = ( 90, 150, 20 ); + model = undefined; + n_y_vector = 0; + n_x_vector = 0; + zoom_level = 300; + b_changes_x = 0; + b_changes_z = 0; + b_changes_y = 0; + test_string = ""; + + while ( true ) + { + if ( level.camera_snapto > 0 ) + { + if ( level.stick_camera ) + { + originoffset = vectorscale( level.cameravec, -1 ); + temp_offset = originoffset + vectorscale( ( 0, 0, -1 ), 60.0 ); + anglesoffset = vectortoangles( temp_offset ); + + if ( level.camera_prev_snapto == level.camera_snapto ) + { + players = get_players(); + newmovement = players[0] getnormalizedmovement(); + dolly_movement = players[0] getnormalizedcameramovement(); + + if ( button_is_held( "BUTTON_LTRIG" ) || button_is_held( "BUTTON_RTRIG" ) ) + { + + } + else + { + if ( newmovement[1] <= -0.4 ) + { + n_y_vector += -0.2; + b_changes_y = 1; + } + else if ( newmovement[1] >= 0.4 ) + { + n_y_vector += 0.2; + b_changes_y = 1; + } + else + b_changes_y = 0; + + if ( newmovement[0] <= -0.4 ) + { + n_x_vector += -0.4; + b_changes_x = 1; + } + else if ( newmovement[0] >= 0.4 ) + { + n_x_vector += 0.4; + b_changes_x = 1; + } + else + b_changes_x = 0; + + if ( dolly_movement[0] <= -0.4 ) + { + zoom_level += 30; + b_changes_z = 1; + } + else if ( dolly_movement[0] >= 0.4 ) + { + zoom_level += -30; + b_changes_z = 1; + } + else + b_changes_z = 0; + + if ( b_changes_z || b_changes_x || b_changes_y ) + { + newmovement = ( n_x_vector, n_y_vector, newmovement[2] ); + movement = ( 0, 0, 0 ); + movement = vectorscale( movement, 0.8 ) + vectorscale( newmovement, 1 - 0.8 ); + tilt = max( 0, 10 + movement[0] * 160 ); + level.cameravec = ( cos( movement[1] * 180 ) * zoom_level, sin( movement[1] * 180 ) * zoom_level, tilt ); + iprintln( level.cameravec[0] + " " + level.cameravec[1] + " " + level.cameravec[2] ); + } + } + } + else + level.camera_prev_snapto = level.camera_snapto; + + if ( isdefined( level.current_select_ent ) ) + { + originoffset = vectorscale( level.cameravec, -1 ); + temp_offset = originoffset + vectorscale( ( 0, 0, -1 ), 60.0 ); + anglesoffset = vectortoangles( temp_offset ); + + if ( !isdefined( model ) ) + { + model = spawn( "script_origin", level.current_select_ent.v["origin"] ); + model setmodel( "tag_origin" ); + } + + if ( model.origin != level.current_select_ent.v["origin"] ) + model.origin = level.current_select_ent.v["origin"]; + + level.camera linkto( model, "tag_origin", level.cameravec, anglesoffset ); + } + else + { + wait 0.05; + continue; + } + } + else + level.camera unlink(); + } + + wait 0.05; + } +#/ +} + +camera_hud_toggle( text ) +{ + if ( isdefined( level.camera_hud ) ) + level.camera_hud destroy(); + + level.camera_hud = newdebughudelem(); + level.camera_hud settext( text ); + level.camera_hud.horzalign = "left"; + level.camera_hud.vertalign = "bottom"; + level.camera_hud.alignx = "left"; + level.camera_hud.aligny = "bottom"; + level.camera_hud.foreground = 1; + level.camera_hud.fontscale = 1.1; + level.camera_hud.sort = 21; + level.camera_hud.alpha = 1; + level.camera_hud.color = ( 1, 1, 1 ); +} + +init_sp_paths() +{ + +} + +make_sp_player_invulnerable( player ) +{ + +} + +delete_arrays_in_sp() +{ + +} + +used_in_animation( sp ) +{ + +} + +init_client_sp_variables() +{ + +} + +init_mp_paths() +{ + level.cfx_server_scriptdata = "mpcreatefx/"; + level.cfx_client_scriptdata = "mpclientcreatefx/"; + level.cfx_server_loop = "maps\\mp\\_utility::createLoopEffect"; + level.cfx_server_oneshot = "maps\\mp\\_utility::createOneshotEffect"; + level.cfx_server_exploder = "maps\\mp\\_utility::createExploder"; + level.cfx_server_loopsound = "maps\\mp\\_createfx::createLoopSound"; + level.cfx_server_scriptgendump = "maps\\mp\\createfx\\" + level.script + "_fx::main();"; + level.cfx_client_loop = "clientscripts\\mp\\_fx::createLoopEffect"; + level.cfx_client_oneshot = "clientscripts\\mp\\_fx::createOneshotEffect"; + level.cfx_client_exploder = "clientscripts\\mp\\_fx::createExploder"; + level.cfx_client_loopsound = "clientscripts\\mp\\_fx::createLoopSound"; + level.cfx_client_scriptgendump = "clientscripts\\mp\\_createfx\\" + level.script + "_fx::main();"; + level.cfx_func_run_gump_func = ::empty; + level.cfx_func_loopfx = maps\mp\_fx::loopfxthread; + level.cfx_func_oneshotfx = maps\mp\_fx::oneshotfxthread; + level.cfx_func_soundfx = maps\mp\_fx::create_loopsound; + level.cfx_func_script_gen_dump = maps\mp\_script_gen::script_gen_dump; + level.cfx_func_stop_loopsound = maps\mp\_fx::stop_loopsound; + level.cfx_func_create_looper = maps\mp\_fx::create_looper; + level.cfx_func_create_triggerfx = maps\mp\_fx::create_triggerfx; + level.cfx_func_create_loopsound = maps\mp\_fx::create_loopsound; +} + +callback_playerconnect() +{ + self waittill( "begin" ); + + if ( !isdefined( level.hasspawned ) ) + { + spawnpoints = getentarray( "mp_global_intermission", "classname" ); + + if ( !spawnpoints.size ) + spawnpoints = getentarray( "info_player_start", "classname" ); + + assert( spawnpoints.size ); + spawnpoint = spawnpoints[0]; + self.sessionteam = "none"; + self.sessionstate = "playing"; + + if ( !level.teambased ) + self.ffateam = "none"; + + self spawn( spawnpoint.origin, spawnpoint.angles ); + level.player = self; + level.hasspawned = 1; + } + else + kick( self.name ); +} + +delete_spawns() +{ + spawn_classes = []; + spawn_classes[spawn_classes.size] = "mp_dm_spawn"; + spawn_classes[spawn_classes.size] = "mp_tdm_spawn"; + spawn_classes[spawn_classes.size] = "mp_dom_spawn"; + spawn_classes[spawn_classes.size] = "mp_dom_spawn_axis_start"; + spawn_classes[spawn_classes.size] = "mp_dom_spawn_allies_start"; + spawn_classes[spawn_classes.size] = "mp_res_spawn_allies"; + spawn_classes[spawn_classes.size] = "mp_res_spawn_axis"; + spawn_classes[spawn_classes.size] = "mp_res_spawn_axis_start"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_attacker"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_attacker_a"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_attacker_b"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_attacker_c"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_attacker_start"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_attackerOT_start"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_defender"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_defender_a"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_defender_b"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_defender_c"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_defender_start"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_defenderOT_start"; + + foreach ( class in spawn_classes ) + { + spawns = getentarray( class, "classname" ); + + foreach ( spawn in spawns ) + spawn delete(); + } +} + +createfxdelay() +{ + wait 10; + level.createfx_delay_done = 1; +} + +init_client_mp_variables() +{ + level.cfx_exploder_before = maps\mp\_utility::exploder_before_load; + level.cfx_exploder_after = maps\mp\_utility::exploder_after_load; +} diff --git a/Multiplayer Core/patch_mp/maps/mp/_createfxmenu.gsc b/MP/Core/maps/mp/_createfxmenu.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_createfxmenu.gsc rename to MP/Core/maps/mp/_createfxmenu.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_createfxundo.gsc b/MP/Core/maps/mp/_createfxundo.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_createfxundo.gsc rename to MP/Core/maps/mp/_createfxundo.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_decoy.gsc b/MP/Core/maps/mp/_decoy.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_decoy.gsc rename to MP/Core/maps/mp/_decoy.gsc diff --git a/MP/Core/maps/mp/_demo.gsc b/MP/Core/maps/mp/_demo.gsc new file mode 100644 index 0000000..554e430 --- /dev/null +++ b/MP/Core/maps/mp/_demo.gsc @@ -0,0 +1,90 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +init() +{ + level.bookmark["kill"] = 0; + level.bookmark["event"] = 1; + level.bookmark["zm_round_end"] = 2; + level.bookmark["zm_player_downed"] = 3; + level.bookmark["zm_player_revived"] = 4; + level.bookmark["zm_player_bledout"] = 5; + level.bookmark["zm_player_use_magicbox"] = 6; + level.bookmark["score_event"] = 7; + level.bookmark["medal"] = 8; + level.bookmark["round_result"] = 9; + level.bookmark["game_result"] = 10; + level.bookmark["zm_powerup_dropped"] = 11; + level.bookmark["zm_player_powerup_grabbed"] = 12; + level.bookmark["zm_player_perk"] = 13; + level.bookmark["zm_power"] = 14; + level.bookmark["zm_player_door"] = 15; + level.bookmark["zm_player_buildable_placed"] = 16; + level.bookmark["zm_player_use_packapunch"] = 17; + level.bookmark["zm_player_rampage"] = 18; + level.bookmark["zm_player_grenade_special"] = 19; + level.bookmark["zm_player_grenade_multiattack"] = 20; + level.bookmark["zm_player_meat_stink"] = 21; + level.bookmark["zm_player_grabbed_magicbox"] = 22; + level.bookmark["zm_player_grabbed_packapunch"] = 23; + level.bookmark["zm_player_grenade_special_long"] = 24; +} + +bookmark( type, time, clientent1, clientent2, eventpriority, inflictorent, overrideentitycamera, actorent ) +{ + assert( isdefined( level.bookmark[type] ), "Unable to find a bookmark type for type - " + type ); + client1 = 255; + client2 = 255; + inflictorentnum = -1; + inflictorenttype = 0; + inflictorbirthtime = 0; + actorentnum = undefined; + scoreeventpriority = 0; + + if ( isdefined( clientent1 ) ) + client1 = clientent1 getentitynumber(); + + if ( isdefined( clientent2 ) ) + client2 = clientent2 getentitynumber(); + + if ( isdefined( eventpriority ) ) + scoreeventpriority = eventpriority; + + if ( isdefined( inflictorent ) ) + { + inflictorentnum = inflictorent getentitynumber(); + inflictorenttype = inflictorent getentitytype(); + + if ( isdefined( inflictorent.birthtime ) ) + inflictorbirthtime = inflictorent.birthtime; + } + + if ( !isdefined( overrideentitycamera ) ) + overrideentitycamera = 0; + + if ( isdefined( actorent ) ) + actorentnum = actorent getentitynumber(); + + adddemobookmark( level.bookmark[type], time, client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum ); +} + +gameresultbookmark( type, winningteamindex, losingteamindex ) +{ + assert( isdefined( level.bookmark[type] ), "Unable to find a bookmark type for type - " + type ); + client1 = 255; + client2 = 255; + scoreeventpriority = 0; + inflictorentnum = -1; + inflictorenttype = 0; + inflictorbirthtime = 0; + overrideentitycamera = 0; + actorentnum = undefined; + + if ( isdefined( winningteamindex ) ) + client1 = winningteamindex; + + if ( isdefined( losingteamindex ) ) + client2 = losingteamindex; + + adddemobookmark( level.bookmark[type], gettime(), client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum ); +} diff --git a/Multiplayer Core/patch_mp/maps/mp/_destructible.gsc b/MP/Core/maps/mp/_destructible.gsc similarity index 98% rename from Multiplayer Core/patch_mp/maps/mp/_destructible.gsc rename to MP/Core/maps/mp/_destructible.gsc index 0611cc3..1bb03ba 100644 --- a/Multiplayer Core/patch_mp/maps/mp/_destructible.gsc +++ b/MP/Core/maps/mp/_destructible.gsc @@ -417,11 +417,8 @@ destructible_barrel_fire_think( attacker ) self thread destructible_barrel_explosion( attacker ); } -destructible_barrel_explosion( attacker, physics_explosion ) +destructible_barrel_explosion( attacker, physics_explosion = 1 ) { - if ( !isdefined( physics_explosion ) ) - physics_explosion = 1; - self notify( "barrel_dead" ); if ( isdefined( self.target ) ) diff --git a/Multiplayer Core/patch_mp/maps/mp/_development_dvars.gsc b/MP/Core/maps/mp/_development_dvars.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_development_dvars.gsc rename to MP/Core/maps/mp/_development_dvars.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_empgrenade.gsc b/MP/Core/maps/mp/_empgrenade.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/_empgrenade.gsc rename to MP/Core/maps/mp/_empgrenade.gsc index efc3cc9..70dd9d9 100644 --- a/Multiplayer Core/patch_mp/maps/mp/_empgrenade.gsc +++ b/MP/Core/maps/mp/_empgrenade.gsc @@ -47,9 +47,8 @@ monitorempgrenade() hurtvictim = 1; hurtattacker = 0; -/# assert( isdefined( self.team ) ); -#/ + if ( level.teambased && isdefined( attacker ) && isdefined( attacker.team ) && attacker.team == self.team && attacker != self ) { if ( level.friendlyfire == 0 ) diff --git a/Multiplayer Core/patch_mp/maps/mp/_entityheadicons.gsc b/MP/Core/maps/mp/_entityheadicons.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/_entityheadicons.gsc rename to MP/Core/maps/mp/_entityheadicons.gsc index 6687737..0fafaa3 100644 --- a/Multiplayer Core/patch_mp/maps/mp/_entityheadicons.gsc +++ b/MP/Core/maps/mp/_entityheadicons.gsc @@ -11,12 +11,8 @@ init() return; level.initedentityheadicons = 1; -/# assert( isdefined( game["entity_headicon_allies"] ), "Allied head icons are not defined. Check the team set for the level." ); -#/ -/# assert( isdefined( game["entity_headicon_axis"] ), "Axis head icons are not defined. Check the team set for the level." ); -#/ precacheshader( game["entity_headicon_allies"] ); precacheshader( game["entity_headicon_axis"] ); @@ -72,9 +68,7 @@ setentityheadicon( team, owner, offset, icon, constant_size ) { if ( !isplayer( owner ) ) { -/# assert( isdefined( owner.owner ), "entity has to have an owner if it's not a player" ); -#/ owner = owner.owner; } diff --git a/Multiplayer Core/patch_mp/maps/mp/_explosive_bolt.gsc b/MP/Core/maps/mp/_explosive_bolt.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_explosive_bolt.gsc rename to MP/Core/maps/mp/_explosive_bolt.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_flashgrenades.gsc b/MP/Core/maps/mp/_flashgrenades.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/_flashgrenades.gsc rename to MP/Core/maps/mp/_flashgrenades.gsc index 14a7300..4987284 100644 --- a/Multiplayer Core/patch_mp/maps/mp/_flashgrenades.gsc +++ b/MP/Core/maps/mp/_flashgrenades.gsc @@ -58,9 +58,9 @@ monitorflash_internal( amount_distance, amount_angle, attacker, direct_on_player rumbleduration = 0.75; else rumbleduration = 0.25; -/# + assert( isdefined( self.team ) ); -#/ + if ( level.teambased && isdefined( attacker ) && isdefined( attacker.team ) && attacker.team == self.team && attacker != self ) { if ( level.friendlyfire == 0 ) diff --git a/MP/Core/maps/mp/_fx.gsc b/MP/Core/maps/mp/_fx.gsc new file mode 100644 index 0000000..127dc2e --- /dev/null +++ b/MP/Core/maps/mp/_fx.gsc @@ -0,0 +1,453 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\_createfx; + +print_org( fxcommand, fxid, fxpos, waittime ) +{ +/# + if ( getdvar( _hash_F49A52C ) == "1" ) + { + println( "{" ); + println( "\"origin\" \"" + fxpos[0] + " " + fxpos[1] + " " + fxpos[2] + "\"" ); + println( "\"classname\" \"script_model\"" ); + println( "\"model\" \"fx\"" ); + println( "\"script_fxcommand\" \"" + fxcommand + "\"" ); + println( "\"script_fxid\" \"" + fxid + "\"" ); + println( "\"script_delay\" \"" + waittime + "\"" ); + println( "}" ); + } +#/ +} + +oneshotfx( fxid, fxpos, waittime, fxpos2 ) +{ + +} + +oneshotfxthread() +{ + wait 0.05; + + if ( self.v["delay"] > 0 ) + wait( self.v["delay"] ); + + create_triggerfx(); +} + +create_triggerfx() +{ + self.looper = spawnfx_wrapper( self.v["fxid"], self.v["origin"], self.v["forward"], self.v["up"] ); + triggerfx( self.looper, self.v["delay"] ); + create_loopsound(); +} + +exploderfx( num, fxid, fxpos, waittime, fxpos2, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout, exploder_group ) +{ + if ( 1 ) + { + ent = createexploder( fxid ); + ent.v["origin"] = fxpos; + ent.v["angles"] = ( 0, 0, 0 ); + + if ( isdefined( fxpos2 ) ) + ent.v["angles"] = vectortoangles( fxpos2 - fxpos ); + + ent.v["delay"] = waittime; + ent.v["exploder"] = num; + return; + } + + fx = spawn( "script_origin", ( 0, 0, 0 ) ); + fx.origin = fxpos; + fx.angles = vectortoangles( fxpos2 - fxpos ); + fx.script_exploder = num; + fx.script_fxid = fxid; + fx.script_delay = waittime; + fx.script_firefx = firefx; + fx.script_firefxdelay = firefxdelay; + fx.script_firefxsound = firefxsound; + fx.script_sound = fxsound; + fx.script_earthquake = fxquake; + fx.script_damage = fxdamage; + fx.script_radius = damage_radius; + fx.script_soundalias = soundalias; + fx.script_firefxtimeout = firefxtimeout; + fx.script_repeat = repeat; + fx.script_delay_min = delay_min; + fx.script_delay_max = delay_max; + fx.script_exploder_group = exploder_group; + forward = anglestoforward( fx.angles ); + forward = vectorscale( forward, 150 ); + fx.targetpos = fxpos + forward; + + if ( !isdefined( level._script_exploders ) ) + level._script_exploders = []; + + level._script_exploders[level._script_exploders.size] = fx; + maps\mp\_createfx::createfx_showorigin( fxid, fxpos, waittime, fxpos2, "exploderfx", fx, undefined, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout ); +} + +loopfx( fxid, fxpos, waittime, fxpos2, fxstart, fxstop, timeout ) +{ +/# + println( "Loopfx is deprecated!" ); +#/ + ent = createloopeffect( fxid ); + ent.v["origin"] = fxpos; + ent.v["angles"] = ( 0, 0, 0 ); + + if ( isdefined( fxpos2 ) ) + ent.v["angles"] = vectortoangles( fxpos2 - fxpos ); + + ent.v["delay"] = waittime; +} + +create_looper() +{ + self.looper = playloopedfx( level._effect[self.v["fxid"]], self.v["delay"], self.v["origin"], 0, self.v["forward"], self.v["up"] ); + create_loopsound(); +} + +create_loopsound() +{ + self notify( "stop_loop" ); + + if ( isdefined( self.v["soundalias"] ) && self.v["soundalias"] != "nil" ) + { + if ( isdefined( self.looper ) ) + self.looper thread maps\mp\_utility::loop_fx_sound( self.v["soundalias"], self.v["origin"], "death" ); + else + thread maps\mp\_utility::loop_fx_sound( self.v["soundalias"], self.v["origin"], "stop_loop" ); + } +} + +stop_loopsound() +{ + self notify( "stop_loop" ); +} + +loopfxthread() +{ + wait 0.05; + + if ( isdefined( self.fxstart ) ) + level waittill( "start fx" + self.fxstart ); + + while ( true ) + { + create_looper(); + + if ( isdefined( self.timeout ) ) + thread loopfxstop( self.timeout ); + + if ( isdefined( self.fxstop ) ) + level waittill( "stop fx" + self.fxstop ); + else + return; + + if ( isdefined( self.looper ) ) + self.looper delete(); + + if ( isdefined( self.fxstart ) ) + level waittill( "start fx" + self.fxstart ); + else + return; + } +} + +loopfxchangeid( ent ) +{ + self endon( "death" ); + + ent waittill( "effect id changed", change ); +} + +loopfxchangeorg( ent ) +{ + self endon( "death" ); + + for (;;) + { + ent waittill( "effect org changed", change ); + + self.origin = change; + } +} + +loopfxchangedelay( ent ) +{ + self endon( "death" ); + + ent waittill( "effect delay changed", change ); +} + +loopfxdeletion( ent ) +{ + self endon( "death" ); + + ent waittill( "effect deleted" ); + + self delete(); +} + +loopfxstop( timeout ) +{ + self endon( "death" ); + wait( timeout ); + self.looper delete(); +} + +loopsound( sound, pos, waittime ) +{ + level thread loopsoundthread( sound, pos, waittime ); +} + +loopsoundthread( sound, pos, waittime ) +{ + org = spawn( "script_origin", pos ); + org.origin = pos; + org playloopsound( sound ); +} + +gunfireloopfx( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) +{ + thread gunfireloopfxthread( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ); +} + +gunfireloopfxthread( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) +{ + level endon( "stop all gunfireloopfx" ); + wait 0.05; + + if ( betweensetsmax < betweensetsmin ) + { + temp = betweensetsmax; + betweensetsmax = betweensetsmin; + betweensetsmin = temp; + } + + betweensetsbase = betweensetsmin; + betweensetsrange = betweensetsmax - betweensetsmin; + + if ( shotdelaymax < shotdelaymin ) + { + temp = shotdelaymax; + shotdelaymax = shotdelaymin; + shotdelaymin = temp; + } + + shotdelaybase = shotdelaymin; + shotdelayrange = shotdelaymax - shotdelaymin; + + if ( shotsmax < shotsmin ) + { + temp = shotsmax; + shotsmax = shotsmin; + shotsmin = temp; + } + + shotsbase = shotsmin; + shotsrange = shotsmax - shotsmin; + fxent = spawnfx( level._effect[fxid], fxpos ); + + for (;;) + { + shotnum = shotsbase + randomint( shotsrange ); + + for ( i = 0; i < shotnum; i++ ) + { + triggerfx( fxent ); + wait( shotdelaybase + randomfloat( shotdelayrange ) ); + } + + wait( betweensetsbase + randomfloat( betweensetsrange ) ); + } +} + +gunfireloopfxvec( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) +{ + thread gunfireloopfxvecthread( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ); +} + +gunfireloopfxvecthread( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) +{ + level endon( "stop all gunfireloopfx" ); + wait 0.05; + + if ( betweensetsmax < betweensetsmin ) + { + temp = betweensetsmax; + betweensetsmax = betweensetsmin; + betweensetsmin = temp; + } + + betweensetsbase = betweensetsmin; + betweensetsrange = betweensetsmax - betweensetsmin; + + if ( shotdelaymax < shotdelaymin ) + { + temp = shotdelaymax; + shotdelaymax = shotdelaymin; + shotdelaymin = temp; + } + + shotdelaybase = shotdelaymin; + shotdelayrange = shotdelaymax - shotdelaymin; + + if ( shotsmax < shotsmin ) + { + temp = shotsmax; + shotsmax = shotsmin; + shotsmin = temp; + } + + shotsbase = shotsmin; + shotsrange = shotsmax - shotsmin; + fxpos2 = vectornormalize( fxpos2 - fxpos ); + fxent = spawnfx( level._effect[fxid], fxpos, fxpos2 ); + + for (;;) + { + shotnum = shotsbase + randomint( shotsrange ); + + for ( i = 0; i < int( shotnum / level.fxfireloopmod ); i++ ) + { + triggerfx( fxent ); + delay = ( shotdelaybase + randomfloat( shotdelayrange ) ) * level.fxfireloopmod; + + if ( delay < 0.05 ) + delay = 0.05; + + wait( delay ); + } + + wait( shotdelaybase + randomfloat( shotdelayrange ) ); + wait( betweensetsbase + randomfloat( betweensetsrange ) ); + } +} + +setfireloopmod( value ) +{ + level.fxfireloopmod = 1 / value; +} + +setup_fx() +{ + if ( !isdefined( self.script_fxid ) || !isdefined( self.script_fxcommand ) || !isdefined( self.script_delay ) ) + return; + + org = undefined; + + if ( isdefined( self.target ) ) + { + ent = getent( self.target, "targetname" ); + + if ( isdefined( ent ) ) + org = ent.origin; + } + + fxstart = undefined; + + if ( isdefined( self.script_fxstart ) ) + fxstart = self.script_fxstart; + + fxstop = undefined; + + if ( isdefined( self.script_fxstop ) ) + fxstop = self.script_fxstop; + + if ( self.script_fxcommand == "OneShotfx" ) + oneshotfx( self.script_fxid, self.origin, self.script_delay, org ); + + if ( self.script_fxcommand == "loopfx" ) + loopfx( self.script_fxid, self.origin, self.script_delay, org, fxstart, fxstop ); + + if ( self.script_fxcommand == "loopsound" ) + loopsound( self.script_fxid, self.origin, self.script_delay ); + + self delete(); +} + +script_print_fx() +{ +/# + if ( !isdefined( self.script_fxid ) || !isdefined( self.script_fxcommand ) || !isdefined( self.script_delay ) ) + { + println( "Effect at origin ", self.origin, " doesn't have script_fxid/script_fxcommand/script_delay" ); + self delete(); + return; + } + + if ( isdefined( self.target ) ) + org = getent( self.target, "targetname" ).origin; + else + org = "undefined"; + + if ( self.script_fxcommand == "OneShotfx" ) + println( "mapsmp_fx::OneShotfx(\"" + self.script_fxid + "\", " + self.origin + ", " + self.script_delay + ", " + org + ");" ); + + if ( self.script_fxcommand == "loopfx" ) + println( "mapsmp_fx::LoopFx(\"" + self.script_fxid + "\", " + self.origin + ", " + self.script_delay + ", " + org + ");" ); + + if ( self.script_fxcommand == "loopsound" ) + println( "mapsmp_fx::LoopSound(\"" + self.script_fxid + "\", " + self.origin + ", " + self.script_delay + ", " + org + ");" ); +#/ +} + +script_playfx( id, pos, pos2 ) +{ + if ( !id ) + return; + + if ( isdefined( pos2 ) ) + playfx( id, pos, pos2 ); + else + playfx( id, pos ); +} + +script_playfxontag( id, ent, tag ) +{ + if ( !id ) + return; + + playfxontag( id, ent, tag ); +} + +grenadeexplosionfx( pos ) +{ + playfx( level._effect["mechanical explosion"], pos ); + earthquake( 0.15, 0.5, pos, 250 ); +} + +soundfx( fxid, fxpos, endonnotify ) +{ + org = spawn( "script_origin", ( 0, 0, 0 ) ); + org.origin = fxpos; + org playloopsound( fxid ); + + if ( isdefined( endonnotify ) ) + org thread soundfxdelete( endonnotify ); +} + +soundfxdelete( endonnotify ) +{ + level waittill( endonnotify ); + + self delete(); +} + +blenddelete( blend ) +{ + self waittill( "death" ); + + blend delete(); +} + +spawnfx_wrapper( fx_id, origin, forward, up ) +{ + assert( isdefined( level._effect[fx_id] ), "Missing level._effect[\"" + fx_id + "\"]. You did not setup the fx before calling it in createFx." ); + fx_object = spawnfx( level._effect[fx_id], origin, forward, up ); + return fx_object; +} diff --git a/Multiplayer Core/patch_mp/maps/mp/_fxanim.gsc b/MP/Core/maps/mp/_fxanim.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_fxanim.gsc rename to MP/Core/maps/mp/_fxanim.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_gameadvertisement.gsc b/MP/Core/maps/mp/_gameadvertisement.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/_gameadvertisement.gsc rename to MP/Core/maps/mp/_gameadvertisement.gsc index 475b542..18c34b9 100644 --- a/Multiplayer Core/patch_mp/maps/mp/_gameadvertisement.gsc +++ b/MP/Core/maps/mp/_gameadvertisement.gsc @@ -377,19 +377,19 @@ updatedebughud( hudindex, text, value ) /# switch ( hudindex ) { - case "1": + case 1: level.sessionadverthud_1a_text = text; level.sessionadverthud_1b_text = value; break; - case "2": + case 2: level.sessionadverthud_2a_text = text; level.sessionadverthud_2b_text = value; break; - case "3": + case 3: level.sessionadverthud_3a_text = text; level.sessionadverthud_3b_text = value; break; - case "4": + case 4: level.sessionadverthud_4a_text = text; level.sessionadverthud_4b_text = value; break; diff --git a/Multiplayer Core/patch_mp/maps/mp/_gamerep.gsc b/MP/Core/maps/mp/_gamerep.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_gamerep.gsc rename to MP/Core/maps/mp/_gamerep.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_global_fx.gsc b/MP/Core/maps/mp/_global_fx.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_global_fx.gsc rename to MP/Core/maps/mp/_global_fx.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_hacker_tool.gsc b/MP/Core/maps/mp/_hacker_tool.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/_hacker_tool.gsc rename to MP/Core/maps/mp/_hacker_tool.gsc index cb0dc1b..f9ddfa6 100644 --- a/Multiplayer Core/patch_mp/maps/mp/_hacker_tool.gsc +++ b/MP/Core/maps/mp/_hacker_tool.gsc @@ -150,9 +150,7 @@ watchhackertoolfired() self forceoffhandend(); clip_ammo = self getweaponammoclip( "pda_hack_mp" ); clip_ammo--; -/# assert( clip_ammo >= 0 ); -#/ self setweaponammoclip( "pda_hack_mp", clip_ammo ); self switchtoweapon( self getlastweapon() ); } @@ -301,9 +299,8 @@ hackertooltargetloop() if ( self.hackertoollocktimeelapsed < locklengthms / 1000 ) continue; -/# + assert( isdefined( self.hackertooltarget ) ); -#/ self notify( "stop_lockon_sound" ); self.hackertoollockfinalized = 1; self weaponlockfinalize( self.hackertooltarget ); @@ -564,9 +561,7 @@ gethackertoolradius( target ) if ( isentityhackablecarepackage( target ) ) { -/# assert( isdefined( target.hackertoolradius ) ); -#/ radius = target.hackertoolradius; } else if ( isentityhackableweaponobject( target ) ) @@ -629,9 +624,8 @@ gethacktime( target ) if ( isentityhackablecarepackage( target ) ) { -/# assert( isdefined( target.hackertooltimems ) ); -#/ + if ( isdefined( target.owner ) && target.owner == self ) time = level.carepackageownerhackertooltimems; else if ( isdefined( target.owner ) && target.owner.team == self.team ) diff --git a/Multiplayer Core/patch_mp/maps/mp/_heatseekingmissile.gsc b/MP/Core/maps/mp/_heatseekingmissile.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/_heatseekingmissile.gsc rename to MP/Core/maps/mp/_heatseekingmissile.gsc index 2292601..6c4922f 100644 --- a/Multiplayer Core/patch_mp/maps/mp/_heatseekingmissile.gsc +++ b/MP/Core/maps/mp/_heatseekingmissile.gsc @@ -180,9 +180,8 @@ stingerirtloop() if ( timepassed < locklength ) continue; -/# + assert( isdefined( self.stingertarget ) ); -#/ self notify( "stop_lockon_sound" ); self.stingerlockfinalized = 1; self weaponlockfinalize( self.stingertarget ); @@ -428,9 +427,7 @@ initlockfield( target ) lockingon( target, lock ) { -/# assert( isdefined( target.locking_on ) ); -#/ clientnum = self getentitynumber(); if ( lock ) @@ -456,9 +453,7 @@ watchclearlockingon( target, clientnum ) lockedon( target, lock ) { -/# assert( isdefined( target.locked_on ) ); -#/ clientnum = self getentitynumber(); if ( lock ) @@ -519,9 +514,7 @@ _incomingmissiletracker( missile ) missile waittill( "death" ); self.incoming_missile--; -/# assert( self.incoming_missile >= 0 ); -#/ } missiletarget_ismissileincoming() diff --git a/Multiplayer Core/patch_mp/maps/mp/_interactive_objects.gsc b/MP/Core/maps/mp/_interactive_objects.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_interactive_objects.gsc rename to MP/Core/maps/mp/_interactive_objects.gsc diff --git a/MP/Core/maps/mp/_load.gsc b/MP/Core/maps/mp/_load.gsc new file mode 100644 index 0000000..2288b35 --- /dev/null +++ b/MP/Core/maps/mp/_load.gsc @@ -0,0 +1,513 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\_script_gen; +#include maps\mp\gametypes\_spawning; +#include maps\mp\gametypes\_tweakables; +#include maps\mp\_destructible; +#include maps\mp\_riotshield; +#include maps\mp\_vehicles; +#include maps\mp\killstreaks\_dogs; +#include maps\mp\killstreaks\_ai_tank; +#include maps\mp\killstreaks\_rcbomb; +#include maps\mp\killstreaks\_helicopter_guard; +#include maps\mp\_trophy_system; +#include maps\mp\_proximity_grenade; +#include maps\mp\_audio; +#include maps\mp\_busing; +#include maps\mp\_music; +#include maps\mp\_fxanim; +#include maps\mp\_interactive_objects; +#include maps\mp\_serverfaceanim_mp; +#include maps\mp\_art; +#include maps\mp\_createfx; +#include maps\mp\_global_fx; +#include maps\mp\_demo; +#include maps\mp\_development_dvars; +#include maps\mp\_load; +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\gametypes\_spawnlogic; + +main( bscriptgened, bcsvgened, bsgenabled ) +{ + if ( !isdefined( level.script_gen_dump_reasons ) ) + level.script_gen_dump_reasons = []; + + if ( !isdefined( bsgenabled ) ) + level.script_gen_dump_reasons[level.script_gen_dump_reasons.size] = "First run"; + + if ( !isdefined( bcsvgened ) ) + bcsvgened = 0; + + level.bcsvgened = bcsvgened; + + if ( !isdefined( bscriptgened ) ) + bscriptgened = 0; + else + bscriptgened = 1; + + level.bscriptgened = bscriptgened; + level._loadstarted = 1; + struct_class_init(); + level.clientscripts = getdvar( "cg_usingClientScripts" ) != ""; + level._client_exploders = []; + level._client_exploder_ids = []; + + if ( !isdefined( level.flag ) ) + { + level.flag = []; + level.flags_lock = []; + } + + if ( !isdefined( level.timeofday ) ) + level.timeofday = "day"; + + flag_init( "scriptgen_done" ); + level.script_gen_dump_reasons = []; + + if ( !isdefined( level.script_gen_dump ) ) + { + level.script_gen_dump = []; + level.script_gen_dump_reasons[0] = "First run"; + } + + if ( !isdefined( level.script_gen_dump2 ) ) + level.script_gen_dump2 = []; + + if ( isdefined( level.createfxent ) ) + script_gen_dump_addline( "maps\\mp\\createfx\\" + level.script + "_fx::main();", level.script + "_fx" ); + + if ( isdefined( level.script_gen_dump_preload ) ) + { + for ( i = 0; i < level.script_gen_dump_preload.size; i++ ) + script_gen_dump_addline( level.script_gen_dump_preload[i].string, level.script_gen_dump_preload[i].signature ); + } + + if ( getdvar( "scr_RequiredMapAspectratio" ) == "" ) + setdvar( "scr_RequiredMapAspectratio", "1" ); + + setdvar( "r_waterFogTest", 0 ); + setdvar( "tu6_player_shallowWaterHeight", "0.0" ); + precacherumble( "reload_small" ); + precacherumble( "reload_medium" ); + precacherumble( "reload_large" ); + precacherumble( "reload_clipin" ); + precacherumble( "reload_clipout" ); + precacherumble( "reload_rechamber" ); + precacherumble( "pullout_small" ); + precacherumble( "buzz_high" ); + precacherumble( "riotshield_impact" ); + registerclientsys( "levelNotify" ); + level.aitriggerspawnflags = getaitriggerflags(); + level.vehicletriggerspawnflags = getvehicletriggerflags(); + level.physicstracemaskphysics = 1; + level.physicstracemaskvehicle = 2; + level.physicstracemaskwater = 4; + level.physicstracemaskclip = 8; + level.physicstracecontentsvehicleclip = 16; + level.createfx_enabled = getdvar( "createfx" ) != ""; + + if ( !sessionmodeiszombiesgame() ) + { + thread maps\mp\gametypes\_spawning::init(); + thread maps\mp\gametypes\_tweakables::init(); + thread maps\mp\_destructible::init(); + thread maps\mp\_riotshield::register(); + thread maps\mp\_vehicles::init(); + thread maps\mp\killstreaks\_dogs::init(); + thread maps\mp\killstreaks\_ai_tank::register(); + thread maps\mp\killstreaks\_rcbomb::register(); + thread maps\mp\killstreaks\_helicopter_guard::register(); + thread maps\mp\_trophy_system::register(); + thread maps\mp\_proximity_grenade::register(); + maps\mp\_audio::init(); + thread maps\mp\_busing::businit(); + thread maps\mp\_music::music_init(); + thread maps\mp\_fxanim::init(); + } + else + { + level thread start_intro_screen_zm(); + thread maps\mp\_interactive_objects::init(); + maps\mp\_audio::init(); + thread maps\mp\_busing::businit(); + thread maps\mp\_music::music_init(); + thread maps\mp\_fxanim::init(); + thread maps\mp\_serverfaceanim_mp::init(); + + if ( level.createfx_enabled ) + setinitialplayersconnected(); + } + + visionsetnight( "default_night" ); + setup_traversals(); + maps\mp\_art::main(); + setupexploders(); + parse_structs(); + + if ( sessionmodeiszombiesgame() ) + thread footsteps(); +/# + level thread level_notify_listener(); + level thread client_notify_listener(); +#/ + thread maps\mp\_createfx::fx_init(); + + if ( level.createfx_enabled ) + { + calculate_map_center(); + maps\mp\_createfx::createfx(); + } + + if ( getdvar( "r_reflectionProbeGenerate" ) == "1" ) + { + maps\mp\_global_fx::main(); + + level waittill( "eternity" ); + } + + thread maps\mp\_global_fx::main(); + maps\mp\_demo::init(); + + if ( !sessionmodeiszombiesgame() ) + thread maps\mp\_development_dvars::init(); + + for ( p = 0; p < 6; p++ ) + { + switch ( p ) + { + case 0: + triggertype = "trigger_multiple"; + break; + case 1: + triggertype = "trigger_once"; + break; + case 2: + triggertype = "trigger_use"; + break; + case 3: + triggertype = "trigger_radius"; + break; + case 4: + triggertype = "trigger_lookat"; + break; + default: + assert( p == 5 ); + triggertype = "trigger_damage"; + break; + } + + triggers = getentarray( triggertype, "classname" ); + + for ( i = 0; i < triggers.size; i++ ) + { + if ( isdefined( triggers[i].script_prefab_exploder ) ) + triggers[i].script_exploder = triggers[i].script_prefab_exploder; + + if ( isdefined( triggers[i].script_exploder ) ) + level thread maps\mp\_load::exploder_load( triggers[i] ); + } + } +} + +level_notify_listener() +{ + while ( true ) + { + val = getdvar( "level_notify" ); + + if ( val != "" ) + { + level notify( val ); + setdvar( "level_notify", "" ); + } + + wait 0.2; + } +} + +client_notify_listener() +{ + while ( true ) + { + val = getdvar( "client_notify" ); + + if ( val != "" ) + { + clientnotify( val ); + setdvar( "client_notify", "" ); + } + + wait 0.2; + } +} + +footsteps() +{ + maps\mp\animscripts\utility::setfootstepeffect( "asphalt", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "brick", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "carpet", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "cloth", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "concrete", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "dirt", loadfx( "bio/player/fx_footstep_sand" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "foliage", loadfx( "bio/player/fx_footstep_sand" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "gravel", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "grass", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "metal", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "mud", loadfx( "bio/player/fx_footstep_mud" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "paper", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "plaster", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "rock", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "sand", loadfx( "bio/player/fx_footstep_sand" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "water", loadfx( "bio/player/fx_footstep_water" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "wood", loadfx( "bio/player/fx_footstep_dust" ) ); +} + +parse_structs() +{ + for ( i = 0; i < level.struct.size; i++ ) + { + if ( isdefined( level.struct[i].targetname ) ) + { + if ( level.struct[i].targetname == "flak_fire_fx" ) + { + level._effect["flak20_fire_fx"] = loadfx( "weapon/tracer/fx_tracer_flak_single_noExp" ); + level._effect["flak38_fire_fx"] = loadfx( "weapon/tracer/fx_tracer_quad_20mm_Flak38_noExp" ); + level._effect["flak_cloudflash_night"] = loadfx( "weapon/flak/fx_flak_cloudflash_night" ); + level._effect["flak_burst_single"] = loadfx( "weapon/flak/fx_flak_single_day_dist" ); + } + + if ( level.struct[i].targetname == "fake_fire_fx" ) + level._effect["distant_muzzleflash"] = loadfx( "weapon/muzzleflashes/heavy" ); + + if ( level.struct[i].targetname == "spotlight_fx" ) + level._effect["spotlight_beam"] = loadfx( "env/light/fx_ray_spotlight_md" ); + } + } +} + +exploder_load( trigger ) +{ + level endon( "killexplodertridgers" + trigger.script_exploder ); + + trigger waittill( "trigger" ); + + if ( isdefined( trigger.script_chance ) && randomfloat( 1 ) > trigger.script_chance ) + { + if ( isdefined( trigger.script_delay ) ) + wait( trigger.script_delay ); + else + wait 4; + + level thread exploder_load( trigger ); + return; + } + + maps\mp\_utility::exploder( trigger.script_exploder ); + level notify( "killexplodertridgers" + trigger.script_exploder ); +} + +setupexploders() +{ + ents = getentarray( "script_brushmodel", "classname" ); + smodels = getentarray( "script_model", "classname" ); + + for ( i = 0; i < smodels.size; i++ ) + ents[ents.size] = smodels[i]; + + for ( i = 0; i < ents.size; i++ ) + { + if ( isdefined( ents[i].script_prefab_exploder ) ) + ents[i].script_exploder = ents[i].script_prefab_exploder; + + if ( isdefined( ents[i].script_exploder ) ) + { + if ( ents[i].model == "fx" && ( !isdefined( ents[i].targetname ) || ents[i].targetname != "exploderchunk" ) ) + { + ents[i] hide(); + continue; + } + + if ( isdefined( ents[i].targetname ) && ents[i].targetname == "exploder" ) + { + ents[i] hide(); + ents[i] notsolid(); + continue; + } + + if ( isdefined( ents[i].targetname ) && ents[i].targetname == "exploderchunk" ) + { + ents[i] hide(); + ents[i] notsolid(); + } + } + } + + script_exploders = []; + potentialexploders = getentarray( "script_brushmodel", "classname" ); + + for ( i = 0; i < potentialexploders.size; i++ ) + { + if ( isdefined( potentialexploders[i].script_prefab_exploder ) ) + potentialexploders[i].script_exploder = potentialexploders[i].script_prefab_exploder; + + if ( isdefined( potentialexploders[i].script_exploder ) ) + script_exploders[script_exploders.size] = potentialexploders[i]; + } + + potentialexploders = getentarray( "script_model", "classname" ); + + for ( i = 0; i < potentialexploders.size; i++ ) + { + if ( isdefined( potentialexploders[i].script_prefab_exploder ) ) + potentialexploders[i].script_exploder = potentialexploders[i].script_prefab_exploder; + + if ( isdefined( potentialexploders[i].script_exploder ) ) + script_exploders[script_exploders.size] = potentialexploders[i]; + } + + potentialexploders = getentarray( "item_health", "classname" ); + + for ( i = 0; i < potentialexploders.size; i++ ) + { + if ( isdefined( potentialexploders[i].script_prefab_exploder ) ) + potentialexploders[i].script_exploder = potentialexploders[i].script_prefab_exploder; + + if ( isdefined( potentialexploders[i].script_exploder ) ) + script_exploders[script_exploders.size] = potentialexploders[i]; + } + + if ( !isdefined( level.createfxent ) ) + level.createfxent = []; + + acceptabletargetnames = []; + acceptabletargetnames["exploderchunk visible"] = 1; + acceptabletargetnames["exploderchunk"] = 1; + acceptabletargetnames["exploder"] = 1; + + for ( i = 0; i < script_exploders.size; i++ ) + { + exploder = script_exploders[i]; + ent = createexploder( exploder.script_fxid ); + ent.v = []; + ent.v["origin"] = exploder.origin; + ent.v["angles"] = exploder.angles; + ent.v["delay"] = exploder.script_delay; + ent.v["firefx"] = exploder.script_firefx; + ent.v["firefxdelay"] = exploder.script_firefxdelay; + ent.v["firefxsound"] = exploder.script_firefxsound; + ent.v["firefxtimeout"] = exploder.script_firefxtimeout; + ent.v["earthquake"] = exploder.script_earthquake; + ent.v["damage"] = exploder.script_damage; + ent.v["damage_radius"] = exploder.script_radius; + ent.v["soundalias"] = exploder.script_soundalias; + ent.v["repeat"] = exploder.script_repeat; + ent.v["delay_min"] = exploder.script_delay_min; + ent.v["delay_max"] = exploder.script_delay_max; + ent.v["target"] = exploder.target; + ent.v["ender"] = exploder.script_ender; + ent.v["type"] = "exploder"; + + if ( !isdefined( exploder.script_fxid ) ) + ent.v["fxid"] = "No FX"; + else + ent.v["fxid"] = exploder.script_fxid; + + ent.v["exploder"] = exploder.script_exploder; + assert( isdefined( exploder.script_exploder ), "Exploder at origin " + exploder.origin + " has no script_exploder" ); + + if ( !isdefined( ent.v["delay"] ) ) + ent.v["delay"] = 0; + + if ( isdefined( exploder.target ) ) + { + org = getent( ent.v["target"], "targetname" ).origin; + ent.v["angles"] = vectortoangles( org - ent.v["origin"] ); + } + + if ( exploder.classname == "script_brushmodel" || isdefined( exploder.model ) ) + { + ent.model = exploder; + ent.model.disconnect_paths = exploder.script_disconnectpaths; + } + + if ( isdefined( exploder.targetname ) && isdefined( acceptabletargetnames[exploder.targetname] ) ) + ent.v["exploder_type"] = exploder.targetname; + else + ent.v["exploder_type"] = "normal"; + + ent maps\mp\_createfx::post_entity_creation_function(); + } + + level.createfxexploders = []; + + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + + if ( ent.v["type"] != "exploder" ) + continue; + + ent.v["exploder_id"] = getexploderid( ent ); + + if ( !isdefined( level.createfxexploders[ent.v["exploder"]] ) ) + level.createfxexploders[ent.v["exploder"]] = []; + + level.createfxexploders[ent.v["exploder"]][level.createfxexploders[ent.v["exploder"]].size] = ent; + } +} + +setup_traversals() +{ + potential_traverse_nodes = getallnodes(); + + for ( i = 0; i < potential_traverse_nodes.size; i++ ) + { + node = potential_traverse_nodes[i]; + + if ( node.type == "Begin" ) + node maps\mp\animscripts\traverse\shared::init_traverse(); + } +} + +calculate_map_center() +{ + if ( !isdefined( level.mapcenter ) ) + { + level.nodesmins = ( 0, 0, 0 ); + level.nodesmaxs = ( 0, 0, 0 ); + level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter( level.nodesmins, level.nodesmaxs ); +/# + println( "map center: ", level.mapcenter ); +#/ + setmapcenter( level.mapcenter ); + } +} + +start_intro_screen_zm() +{ + if ( level.createfx_enabled ) + return; + + if ( !isdefined( level.introscreen ) ) + { + level.introscreen = newhudelem(); + level.introscreen.x = 0; + level.introscreen.y = 0; + level.introscreen.horzalign = "fullscreen"; + level.introscreen.vertalign = "fullscreen"; + level.introscreen.foreground = 0; + level.introscreen setshader( "black", 640, 480 ); + wait 0.05; + } + + level.introscreen.alpha = 1; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] freezecontrols( 1 ); + + wait 1; +} diff --git a/Multiplayer Core/patch_mp/maps/mp/_medals.gsc b/MP/Core/maps/mp/_medals.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_medals.gsc rename to MP/Core/maps/mp/_medals.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_menus.gsc b/MP/Core/maps/mp/_menus.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_menus.gsc rename to MP/Core/maps/mp/_menus.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_mgturret.gsc b/MP/Core/maps/mp/_mgturret.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_mgturret.gsc rename to MP/Core/maps/mp/_mgturret.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_multi_extracam.gsc b/MP/Core/maps/mp/_multi_extracam.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_multi_extracam.gsc rename to MP/Core/maps/mp/_multi_extracam.gsc diff --git a/MP/Core/maps/mp/_music.gsc b/MP/Core/maps/mp/_music.gsc new file mode 100644 index 0000000..74125f2 --- /dev/null +++ b/MP/Core/maps/mp/_music.gsc @@ -0,0 +1,26 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +music_init() +{ + assert( level.clientscripts ); + level.musicstate = ""; + registerclientsys( "musicCmd" ); +} + +setmusicstate( state, player ) +{ + if ( isdefined( level.musicstate ) ) + { + if ( isdefined( player ) ) + { + setclientsysstate( "musicCmd", state, player ); + return; + } + else if ( level.musicstate != state ) + setclientsysstate( "musicCmd", state ); + } + + level.musicstate = state; +} diff --git a/Multiplayer Core/patch_mp/maps/mp/_pc.gsc b/MP/Core/maps/mp/_pc.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_pc.gsc rename to MP/Core/maps/mp/_pc.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_popups.gsc b/MP/Core/maps/mp/_popups.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_popups.gsc rename to MP/Core/maps/mp/_popups.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_proximity_grenade.gsc b/MP/Core/maps/mp/_proximity_grenade.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/_proximity_grenade.gsc rename to MP/Core/maps/mp/_proximity_grenade.gsc index 4c64866..4b5ec74 100644 --- a/Multiplayer Core/patch_mp/maps/mp/_proximity_grenade.gsc +++ b/MP/Core/maps/mp/_proximity_grenade.gsc @@ -198,12 +198,8 @@ damageplayerinradius( position, owner, einflictor ) for ( i = 0; i < level.proximitygrenadedotdamageinstances; i++ ) { wait( level.proximitygrenadedotdamagetime ); -/# assert( isdefined( owner ) ); -#/ -/# assert( isdefined( killcament ) ); -#/ self dodamage( damage, position, owner, killcament, "none", "MOD_GAS", 0, "proximity_grenade_aoe_mp" ); } diff --git a/Multiplayer Core/patch_mp/maps/mp/_riotshield.gsc b/MP/Core/maps/mp/_riotshield.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/_riotshield.gsc rename to MP/Core/maps/mp/_riotshield.gsc index c9a26b8..ceb2bde 100644 --- a/Multiplayer Core/patch_mp/maps/mp/_riotshield.gsc +++ b/MP/Core/maps/mp/_riotshield.gsc @@ -241,7 +241,7 @@ spawnriotshieldcover( origin, angles ) shield_ent.team = self.team; shield_ent setteam( self.team ); shield_ent attachreconmodel( level.detectshieldmodel, self ); - shield_ent useanimtree( -1 ); + shield_ent useanimtree( #animtree ); shield_ent setscriptmoverflag( 0 ); shield_ent disconnectpaths(); return shield_ent; @@ -276,11 +276,7 @@ watchriotshielddeploy() assert( !isdefined( self.riotshieldentity ) ); if ( level.gametype != "shrp" ) - { -/# assert( primaries.size > 0 ); -#/ - } #/ shield_ent setclientfield( "riotshield_state", 1 ); shield_ent.reconmodel setclientfield( "riotshield_state", 1 ); @@ -323,9 +319,7 @@ watchriotshielddeploy() riotshielddistancetest( origin ) { -/# assert( isdefined( origin ) ); -#/ min_dist_squared = getdvarfloat( "riotshield_deploy_limit_radius" ); min_dist_squared *= min_dist_squared; @@ -384,9 +378,9 @@ watchdeployedriotshielddamage() if ( !isdefined( attacker ) ) continue; -/# + assert( isdefined( self.owner ) && isdefined( self.owner.team ) ); -#/ + if ( isplayer( attacker ) ) { if ( level.teambased && attacker.team == self.owner.team && attacker != self.owner ) diff --git a/Multiplayer Core/patch_mp/maps/mp/_satchel_charge.gsc b/MP/Core/maps/mp/_satchel_charge.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_satchel_charge.gsc rename to MP/Core/maps/mp/_satchel_charge.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_scoreevents.gsc b/MP/Core/maps/mp/_scoreevents.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/_scoreevents.gsc rename to MP/Core/maps/mp/_scoreevents.gsc index 0de92c6..3e1f2d9 100644 --- a/Multiplayer Core/patch_mp/maps/mp/_scoreevents.gsc +++ b/MP/Core/maps/mp/_scoreevents.gsc @@ -28,9 +28,8 @@ scoreeventtablelookup( index, scoreeventcolumn ) getscoreeventcolumn( gametype ) { columnoffset = getcolumnoffsetforgametype( gametype ); -/# assert( columnoffset >= 0 ); -#/ + if ( columnoffset >= 0 ) columnoffset += 0; @@ -40,9 +39,8 @@ getscoreeventcolumn( gametype ) getxpeventcolumn( gametype ) { columnoffset = getcolumnoffsetforgametype( gametype ); -/# assert( columnoffset >= 0 ); -#/ + if ( columnoffset >= 0 ) columnoffset += 1; @@ -55,9 +53,9 @@ getcolumnoffsetforgametype( gametype ) if ( !isdefined( level.scoreeventtableid ) ) level.scoreeventtableid = getscoreeventtableid(); -/# + assert( isdefined( level.scoreeventtableid ) ); -#/ + if ( !isdefined( level.scoreeventtableid ) ) return -1; @@ -81,9 +79,8 @@ getcolumnoffsetforgametype( gametype ) gamemodecolumn += 2; } -/# + assert( foundgamemode, "Could not find gamemode in scoreInfo.csv:" + gametype ); -#/ return gamemodecolumn; } @@ -94,9 +91,8 @@ getscoreeventtableid() if ( isdefined( scoreinfotableid ) ) scoreinfotableloaded = 1; -/# + assert( scoreinfotableloaded, "Score Event Table is not loaded: " + "mp/scoreInfo.csv" ); -#/ return scoreinfotableid; } @@ -525,9 +521,7 @@ specificweaponkill( attacker, victim, weapon, killstreak ) multikill( killcount, weapon ) { -/# assert( killcount > 1 ); -#/ self maps\mp\_challenges::multikill( killcount, weapon ); if ( killcount > 8 ) @@ -740,9 +734,7 @@ decrementlastobituaryplayercountafterfade() level endon( "reset_obituary_count" ); wait 5; level.lastobituaryplayercount--; -/# assert( level.lastobituaryplayercount >= 0 ); -#/ } ongameend( data ) diff --git a/Multiplayer Core/patch_mp/maps/mp/_scrambler.gsc b/MP/Core/maps/mp/_scrambler.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_scrambler.gsc rename to MP/Core/maps/mp/_scrambler.gsc diff --git a/MP/Core/maps/mp/_script_gen.gsc b/MP/Core/maps/mp/_script_gen.gsc new file mode 100644 index 0000000..ea90c13 --- /dev/null +++ b/MP/Core/maps/mp/_script_gen.gsc @@ -0,0 +1,290 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\_script_gen; + +script_gen_dump_checksaved() +{ + signatures = getarraykeys( level.script_gen_dump ); + + for ( i = 0; i < signatures.size; i++ ) + { + if ( !isdefined( level.script_gen_dump2[signatures[i]] ) ) + { + level.script_gen_dump[signatures[i]] = undefined; + level.script_gen_dump_reasons[level.script_gen_dump_reasons.size] = "Signature unmatched( removed feature ): " + signatures[i]; + } + } +} + +script_gen_dump() +{ +/# + script_gen_dump_checksaved(); + + if ( !level.script_gen_dump_reasons.size ) + { + flag_set( "scriptgen_done" ); + return; + } + + firstrun = 0; + + if ( level.bscriptgened ) + { + println( " " ); + println( " " ); + println( " " ); + println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); + println( "^3Dumping scriptgen dump for these reasons" ); + println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); + + for ( i = 0; i < level.script_gen_dump_reasons.size; i++ ) + { + if ( issubstr( level.script_gen_dump_reasons[i], "nowrite" ) ) + { + substr = getsubstr( level.script_gen_dump_reasons[i], 15 ); + println( i + ". ) " + substr ); + } + else + println( i + ". ) " + level.script_gen_dump_reasons[i] ); + + if ( level.script_gen_dump_reasons[i] == "First run" ) + firstrun = 1; + } + + println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); + println( " " ); + + if ( firstrun ) + { + println( "for First Run make sure you delete all of the vehicle precache script calls, createart calls, createfx calls( most commonly placed in maps\\" + level.script + "_fx.gsc ) " ); + println( " " ); + println( "replace:" ); + println( "maps\\_load::main( 1 );" ); + println( " " ); + println( "with( don't forget to add this file to P4 ):" ); + println( "maps\\scriptgen\\" + level.script + "_scriptgen::main();" ); + println( " " ); + } + + println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); + println( " " ); + println( "^2 / \\ / \\ / \\" ); + println( "^2scroll up" ); + println( "^2 / \\ / \\ / \\" ); + println( " " ); + } + else + return; + + filename = "scriptgen/" + level.script + "_scriptgen.gsc"; + csvfilename = "zone_source/" + level.script + ".csv"; + + if ( level.bscriptgened ) + file = openfile( filename, "write" ); + else + file = 0; + + assert( file != -1, "File not writeable( check it and and restart the map ): " + filename ); + script_gen_dumpprintln( file, "// script generated script do not write your own script here it will go away if you do." ); + script_gen_dumpprintln( file, "main()" ); + script_gen_dumpprintln( file, "{" ); + script_gen_dumpprintln( file, "" ); + script_gen_dumpprintln( file, "\\tlevel.script_gen_dump = [];" ); + script_gen_dumpprintln( file, "" ); + signatures = getarraykeys( level.script_gen_dump ); + + for ( i = 0; i < signatures.size; i++ ) + { + if ( !issubstr( level.script_gen_dump[signatures[i]], "nowrite" ) ) + script_gen_dumpprintln( file, "\\t" + level.script_gen_dump[signatures[i]] ); + } + + for ( i = 0; i < signatures.size; i++ ) + { + if ( !issubstr( level.script_gen_dump[signatures[i]], "nowrite" ) ) + { + script_gen_dumpprintln( file, "\\tlevel.script_gen_dump[ " + "\"" + signatures[i] + "\"" + " ] = " + "\"" + signatures[i] + "\"" + ";" ); + continue; + } + + script_gen_dumpprintln( file, "\\tlevel.script_gen_dump[ " + "\"" + signatures[i] + "\"" + " ] = " + "\"nowrite\"" + ";" ); + } + + script_gen_dumpprintln( file, "" ); + keys1 = undefined; + keys2 = undefined; + + if ( isdefined( level.sg_precacheanims ) ) + keys1 = getarraykeys( level.sg_precacheanims ); + + if ( isdefined( keys1 ) ) + { + for ( i = 0; i < keys1.size; i++ ) + script_gen_dumpprintln( file, "\\tanim_precach_" + keys1[i] + "();" ); + } + + script_gen_dumpprintln( file, "\\tmaps\\_load::main( 1, " + level.bcsvgened + ", 1 );" ); + script_gen_dumpprintln( file, "}" ); + script_gen_dumpprintln( file, "" ); + + if ( isdefined( level.sg_precacheanims ) ) + keys1 = getarraykeys( level.sg_precacheanims ); + + if ( isdefined( keys1 ) ) + { + for ( i = 0; i < keys1.size; i++ ) + { + script_gen_dumpprintln( file, "#using_animtree( \"" + keys1[i] + "\" );" ); + script_gen_dumpprintln( file, "anim_precach_" + keys1[i] + "()" ); + script_gen_dumpprintln( file, "{" ); + script_gen_dumpprintln( file, "\\tlevel.sg_animtree[ \"" + keys1[i] + "\" ] = #animtree;" ); + keys2 = getarraykeys( level.sg_precacheanims[keys1[i]] ); + + if ( isdefined( keys2 ) ) + { + for ( j = 0; j < keys2.size; j++ ) + script_gen_dumpprintln( file, "\\tlevel.sg_anim[ \"" + keys2[j] + "\" ] = %" + keys2[j] + ";" ); + } + + script_gen_dumpprintln( file, "}" ); + script_gen_dumpprintln( file, "" ); + } + } + + if ( level.bscriptgened ) + saved = closefile( file ); + else + saved = 1; + + if ( level.bcsvgened ) + csvfile = openfile( csvfilename, "write" ); + else + csvfile = 0; + + assert( csvfile != -1, "File not writeable( check it and and restart the map ): " + csvfilename ); + signatures = getarraykeys( level.script_gen_dump ); + + for ( i = 0; i < signatures.size; i++ ) + script_gen_csvdumpprintln( csvfile, signatures[i] ); + + if ( level.bcsvgened ) + csvfilesaved = closefile( csvfile ); + else + csvfilesaved = 1; + + assert( csvfilesaved == 1, "csv not saved( see above message? ): " + csvfilename ); + assert( saved == 1, "map not saved( see above message? ): " + filename ); +#/ + assert( !level.bscriptgened, "SCRIPTGEN generated: follow instructions listed above this error in the console" ); + + if ( level.bscriptgened ) + { +/# + assertmsg( "SCRIPTGEN updated: Rebuild fast file and run map again" ); +#/ + } + + flag_set( "scriptgen_done" ); +} + +script_gen_csvdumpprintln( file, signature ) +{ + prefix = undefined; + writtenprefix = undefined; + path = ""; + extension = ""; + + if ( issubstr( signature, "ignore" ) ) + prefix = "ignore"; + else if ( issubstr( signature, "col_map_sp" ) ) + prefix = "col_map_sp"; + else if ( issubstr( signature, "gfx_map" ) ) + prefix = "gfx_map"; + else if ( issubstr( signature, "rawfile" ) ) + prefix = "rawfile"; + else if ( issubstr( signature, "sound" ) ) + prefix = "sound"; + else if ( issubstr( signature, "xmodel" ) ) + prefix = "xmodel"; + else if ( issubstr( signature, "xanim" ) ) + prefix = "xanim"; + else if ( issubstr( signature, "item" ) ) + { + prefix = "item"; + writtenprefix = "weapon"; + path = "sp/"; + } + else if ( issubstr( signature, "fx" ) ) + prefix = "fx"; + else if ( issubstr( signature, "menu" ) ) + { + prefix = "menu"; + writtenprefix = "menufile"; + path = "ui / scriptmenus/"; + extension = ".menu"; + } + else if ( issubstr( signature, "rumble" ) ) + { + prefix = "rumble"; + writtenprefix = "rawfile"; + path = "rumble/"; + } + else if ( issubstr( signature, "shader" ) ) + { + prefix = "shader"; + writtenprefix = "material"; + } + else if ( issubstr( signature, "shock" ) ) + { + prefix = "shock"; + writtenprefix = "rawfile"; + extension = ".shock"; + path = "shock/"; + } + else if ( issubstr( signature, "string" ) ) + { + prefix = "string"; +/# + assertmsg( "string not yet supported by scriptgen" ); +#/ + } + else if ( issubstr( signature, "turret" ) ) + { + prefix = "turret"; + writtenprefix = "weapon"; + path = "sp/"; + } + else if ( issubstr( signature, "vehicle" ) ) + { + prefix = "vehicle"; + writtenprefix = "rawfile"; + path = "vehicles/"; + } + + if ( !isdefined( prefix ) ) + return; + + if ( !isdefined( writtenprefix ) ) + string = prefix + ", " + getsubstr( signature, prefix.size + 1, signature.size ); + else + string = writtenprefix + ", " + path + getsubstr( signature, prefix.size + 1, signature.size ) + extension; +/# + if ( file == -1 || !level.bcsvgened ) + println( string ); + else + fprintln( file, string ); +#/ +} + +script_gen_dumpprintln( file, string ) +{ +/# + if ( file == -1 || !level.bscriptgened ) + println( string ); + else + fprintln( file, string ); +#/ +} diff --git a/Multiplayer Core/patch_mp/maps/mp/_sensor_grenade.gsc b/MP/Core/maps/mp/_sensor_grenade.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_sensor_grenade.gsc rename to MP/Core/maps/mp/_sensor_grenade.gsc diff --git a/Multiplayer Core/common_mp/maps/mp/_serverfaceanim_mp.gsc b/MP/Core/maps/mp/_serverfaceanim_mp.gsc similarity index 100% rename from Multiplayer Core/common_mp/maps/mp/_serverfaceanim_mp.gsc rename to MP/Core/maps/mp/_serverfaceanim_mp.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_smokegrenade.gsc b/MP/Core/maps/mp/_smokegrenade.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_smokegrenade.gsc rename to MP/Core/maps/mp/_smokegrenade.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_sticky_grenade.gsc b/MP/Core/maps/mp/_sticky_grenade.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_sticky_grenade.gsc rename to MP/Core/maps/mp/_sticky_grenade.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_tabun.gsc b/MP/Core/maps/mp/_tabun.gsc similarity index 98% rename from Multiplayer Core/patch_mp/maps/mp/_tabun.gsc rename to MP/Core/maps/mp/_tabun.gsc index 64d9126..9353324 100644 --- a/Multiplayer Core/patch_mp/maps/mp/_tabun.gsc +++ b/MP/Core/maps/mp/_tabun.gsc @@ -172,10 +172,10 @@ damageinpoisonarea( gaseffectarea, killcament, trace, position ) { switch ( timer ) { - case "0": + case 0: self shellshock( "tabun_gas_mp", 1.0 ); break; - case "1": + case 1: self shellshock( "tabun_gas_nokick_mp", 1.0 ); break; default: @@ -348,22 +348,22 @@ spawnalllocs( owner, startpos ) switch ( fxtoplay ) { - case "0": + case 0: locations["fxtoplay"][i] = level.fx_tabun_0; locations["radius"][i] = level.fx_tabun_radius0; - continue; - case "1": + break; + case 1: locations["fxtoplay"][i] = level.fx_tabun_1; locations["radius"][i] = level.fx_tabun_radius1; - continue; - case "2": + break; + case 2: locations["fxtoplay"][i] = level.fx_tabun_2; locations["radius"][i] = level.fx_tabun_radius2; - continue; - case "3": + break; + case 3: locations["fxtoplay"][i] = level.fx_tabun_3; locations["radius"][i] = level.fx_tabun_radius3; - continue; + break; default: locations["fxtoplay"][i] = undefined; locations["radius"][i] = 0; diff --git a/Multiplayer Core/patch_mp/maps/mp/_tacticalinsertion.gsc b/MP/Core/maps/mp/_tacticalinsertion.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_tacticalinsertion.gsc rename to MP/Core/maps/mp/_tacticalinsertion.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_teargrenades.gsc b/MP/Core/maps/mp/_teargrenades.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_teargrenades.gsc rename to MP/Core/maps/mp/_teargrenades.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_treadfx.gsc b/MP/Core/maps/mp/_treadfx.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_treadfx.gsc rename to MP/Core/maps/mp/_treadfx.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/_trophy_system.gsc b/MP/Core/maps/mp/_trophy_system.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/_trophy_system.gsc rename to MP/Core/maps/mp/_trophy_system.gsc diff --git a/MP/Core/maps/mp/_utility.gsc b/MP/Core/maps/mp/_utility.gsc new file mode 100644 index 0000000..2068656 --- /dev/null +++ b/MP/Core/maps/mp/_utility.gsc @@ -0,0 +1,2671 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\_createfx; +#include maps\mp\_utility; + +addcallback( event, func ) +{ + assert( isdefined( event ), "Trying to set a callback on an undefined event." ); + + if ( !isdefined( level._callbacks ) || !isdefined( level._callbacks[event] ) ) + level._callbacks[event] = []; + + level._callbacks[event] = add_to_array( level._callbacks[event], func, 0 ); +} + +callback( event ) +{ + if ( isdefined( level._callbacks ) && isdefined( level._callbacks[event] ) ) + { + for ( i = 0; i < level._callbacks[event].size; i++ ) + { + callback = level._callbacks[event][i]; + + if ( isdefined( callback ) ) + self thread [[ callback ]](); + } + } +} + +onfinalizeinitialization_callback( func ) +{ + addcallback( "on_finalize_initialization", func ); +} + +triggeroff() +{ + if ( !isdefined( self.realorigin ) ) + self.realorigin = self.origin; + + if ( self.origin == self.realorigin ) + self.origin += vectorscale( ( 0, 0, -1 ), 10000.0 ); +} + +triggeron() +{ + if ( isdefined( self.realorigin ) ) + self.origin = self.realorigin; +} + +error( msg ) +{ +/# + println( "^c*ERROR* ", msg ); + wait 0.05; + + if ( getdvar( _hash_F49A52C ) != "1" ) + { +/# + assertmsg( "This is a forced error - attach the log file" ); +#/ + } +#/ +} + +warning( msg ) +{ +/# + println( "^1WARNING: " + msg ); +#/ +} + +spawn_array_struct() +{ + s = spawnstruct(); + s.a = []; + return s; +} + +within_fov( start_origin, start_angles, end_origin, fov ) +{ + normal = vectornormalize( end_origin - start_origin ); + forward = anglestoforward( start_angles ); + dot = vectordot( forward, normal ); + return dot >= fov; +} + +append_array_struct( dst_s, src_s ) +{ + for ( i = 0; i < src_s.a.size; i++ ) + dst_s.a[dst_s.a.size] = src_s.a[i]; +} + +exploder( num ) +{ + [[ level.exploderfunction ]]( num ); +} + +exploder_stop( num ) +{ + stop_exploder( num ); +} + +exploder_sound() +{ + if ( isdefined( self.script_delay ) ) + wait( self.script_delay ); + + self playsound( level.scr_sound[self.script_sound] ); +} + +cannon_effect() +{ + if ( isdefined( self.v["repeat"] ) ) + { + for ( i = 0; i < self.v["repeat"]; i++ ) + { + playfx( level._effect[self.v["fxid"]], self.v["origin"], self.v["forward"], self.v["up"] ); + self exploder_delay(); + } + + return; + } + + self exploder_delay(); + + if ( isdefined( self.looper ) ) + self.looper delete(); + + self.looper = spawnfx( getfx( self.v["fxid"] ), self.v["origin"], self.v["forward"], self.v["up"] ); + triggerfx( self.looper ); + exploder_playsound(); +} + +exploder_delay() +{ + if ( !isdefined( self.v["delay"] ) ) + self.v["delay"] = 0; + + min_delay = self.v["delay"]; + max_delay = self.v["delay"] + 0.001; + + if ( isdefined( self.v["delay_min"] ) ) + min_delay = self.v["delay_min"]; + + if ( isdefined( self.v["delay_max"] ) ) + max_delay = self.v["delay_max"]; + + if ( min_delay > 0 ) + wait( randomfloatrange( min_delay, max_delay ) ); +} + +exploder_playsound() +{ + if ( !isdefined( self.v["soundalias"] ) || self.v["soundalias"] == "nil" ) + return; + + play_sound_in_space( self.v["soundalias"], self.v["origin"] ); +} + +brush_delete() +{ + num = self.v["exploder"]; + + if ( isdefined( self.v["delay"] ) ) + wait( self.v["delay"] ); + else + wait 0.05; + + if ( !isdefined( self.model ) ) + return; + + assert( isdefined( self.model ) ); + + if ( level.createfx_enabled ) + { + if ( isdefined( self.exploded ) ) + return; + + self.exploded = 1; + self.model hide(); + self.model notsolid(); + wait 3; + self.exploded = undefined; + self.model show(); + self.model solid(); + return; + } + + if ( !isdefined( self.v["fxid"] ) || self.v["fxid"] == "No FX" ) + self.v["exploder"] = undefined; + + waittillframeend; + self.model delete(); +} + +brush_show() +{ + if ( isdefined( self.v["delay"] ) ) + wait( self.v["delay"] ); + + assert( isdefined( self.model ) ); + self.model show(); + self.model solid(); + + if ( level.createfx_enabled ) + { + if ( isdefined( self.exploded ) ) + return; + + self.exploded = 1; + wait 3; + self.exploded = undefined; + self.model hide(); + self.model notsolid(); + } +} + +brush_throw() +{ + if ( isdefined( self.v["delay"] ) ) + wait( self.v["delay"] ); + + ent = undefined; + + if ( isdefined( self.v["target"] ) ) + ent = getent( self.v["target"], "targetname" ); + + if ( !isdefined( ent ) ) + { + self.model delete(); + return; + } + + self.model show(); + startorg = self.v["origin"]; + startang = self.v["angles"]; + org = ent.origin; + temp_vec = org - self.v["origin"]; + x = temp_vec[0]; + y = temp_vec[1]; + z = temp_vec[2]; + self.model rotatevelocity( ( x, y, z ), 12 ); + self.model movegravity( ( x, y, z ), 12 ); + + if ( level.createfx_enabled ) + { + if ( isdefined( self.exploded ) ) + return; + + self.exploded = 1; + wait 3; + self.exploded = undefined; + self.v["origin"] = startorg; + self.v["angles"] = startang; + self.model hide(); + return; + } + + self.v["exploder"] = undefined; + wait 6; + self.model delete(); +} + +getplant() +{ + start = self.origin + vectorscale( ( 0, 0, 1 ), 10.0 ); + range = 11; + forward = anglestoforward( self.angles ); + forward = vectorscale( forward, range ); + traceorigins[0] = start + forward; + traceorigins[1] = start; + trace = bullettrace( traceorigins[0], traceorigins[0] + vectorscale( ( 0, 0, -1 ), 18.0 ), 0, undefined ); + + if ( trace["fraction"] < 1 ) + { + temp = spawnstruct(); + temp.origin = trace["position"]; + temp.angles = orienttonormal( trace["normal"] ); + return temp; + } + + trace = bullettrace( traceorigins[1], traceorigins[1] + vectorscale( ( 0, 0, -1 ), 18.0 ), 0, undefined ); + + if ( trace["fraction"] < 1 ) + { + temp = spawnstruct(); + temp.origin = trace["position"]; + temp.angles = orienttonormal( trace["normal"] ); + return temp; + } + + traceorigins[2] = start + vectorscale( ( 1, 1, 0 ), 16.0 ); + traceorigins[3] = start + vectorscale( ( 1, -1, 0 ), 16.0 ); + traceorigins[4] = start + vectorscale( ( -1, -1, 0 ), 16.0 ); + traceorigins[5] = start + vectorscale( ( -1, 1, 0 ), 16.0 ); + besttracefraction = undefined; + besttraceposition = undefined; + + for ( i = 0; i < traceorigins.size; i++ ) + { + trace = bullettrace( traceorigins[i], traceorigins[i] + vectorscale( ( 0, 0, -1 ), 1000.0 ), 0, undefined ); + + if ( !isdefined( besttracefraction ) || trace["fraction"] < besttracefraction ) + { + besttracefraction = trace["fraction"]; + besttraceposition = trace["position"]; + } + } + + if ( besttracefraction == 1 ) + besttraceposition = self.origin; + + temp = spawnstruct(); + temp.origin = besttraceposition; + temp.angles = orienttonormal( trace["normal"] ); + return temp; +} + +orienttonormal( normal ) +{ + hor_normal = ( normal[0], normal[1], 0 ); + hor_length = length( hor_normal ); + + if ( !hor_length ) + return ( 0, 0, 0 ); + + hor_dir = vectornormalize( hor_normal ); + neg_height = normal[2] * -1; + tangent = ( hor_dir[0] * neg_height, hor_dir[1] * neg_height, hor_length ); + plant_angle = vectortoangles( tangent ); + return plant_angle; +} + +array_levelthread( ents, process, var, excluders ) +{ + exclude = []; + + for ( i = 0; i < ents.size; i++ ) + exclude[i] = 0; + + if ( isdefined( excluders ) ) + { + for ( i = 0; i < ents.size; i++ ) + { + for ( p = 0; p < excluders.size; p++ ) + { + if ( ents[i] == excluders[p] ) + exclude[i] = 1; + } + } + } + + for ( i = 0; i < ents.size; i++ ) + { + if ( !exclude[i] ) + { + if ( isdefined( var ) ) + { + level thread [[ process ]]( ents[i], var ); + continue; + } + + level thread [[ process ]]( ents[i] ); + } + } +} + +deleteplacedentity( entity ) +{ + entities = getentarray( entity, "classname" ); + + for ( i = 0; i < entities.size; i++ ) + entities[i] delete(); +} + +playsoundonplayers( sound, team ) +{ + assert( isdefined( level.players ) ); + + if ( level.splitscreen ) + { + if ( isdefined( level.players[0] ) ) + level.players[0] playlocalsound( sound ); + } + else if ( isdefined( team ) ) + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + player playlocalsound( sound ); + } + } + else + { + for ( i = 0; i < level.players.size; i++ ) + level.players[i] playlocalsound( sound ); + } +} + +get_player_height() +{ + return 70.0; +} + +isbulletimpactmod( smeansofdeath ) +{ + return issubstr( smeansofdeath, "BULLET" ) || smeansofdeath == "MOD_HEAD_SHOT"; +} + +get_team_alive_players_s( teamname ) +{ + teamplayers_s = spawn_array_struct(); + + if ( isdefined( teamname ) && isdefined( level.aliveplayers ) && isdefined( level.aliveplayers[teamname] ) ) + { + for ( i = 0; i < level.aliveplayers[teamname].size; i++ ) + teamplayers_s.a[teamplayers_s.a.size] = level.aliveplayers[teamname][i]; + } + + return teamplayers_s; +} + +get_all_alive_players_s() +{ + allplayers_s = spawn_array_struct(); + + if ( isdefined( level.aliveplayers ) ) + { + keys = getarraykeys( level.aliveplayers ); + + for ( i = 0; i < keys.size; i++ ) + { + team = keys[i]; + + for ( j = 0; j < level.aliveplayers[team].size; j++ ) + allplayers_s.a[allplayers_s.a.size] = level.aliveplayers[team][j]; + } + } + + return allplayers_s; +} + +waitrespawnbutton() +{ + self endon( "disconnect" ); + self endon( "end_respawn" ); + + while ( self usebuttonpressed() != 1 ) + wait 0.05; +} + +setlowermessage( text, time, combinemessageandtimer ) +{ + if ( !isdefined( self.lowermessage ) ) + return; + + if ( isdefined( self.lowermessageoverride ) && text != &"" ) + { + text = self.lowermessageoverride; + time = undefined; + } + + self notify( "lower_message_set" ); + self.lowermessage settext( text ); + + if ( isdefined( time ) && time > 0 ) + { + if ( !isdefined( combinemessageandtimer ) || !combinemessageandtimer ) + self.lowertimer.label = &""; + else + { + self.lowermessage settext( "" ); + self.lowertimer.label = text; + } + + self.lowertimer settimer( time ); + } + else + { + self.lowertimer settext( "" ); + self.lowertimer.label = &""; + } + + if ( self issplitscreen() ) + self.lowermessage.fontscale = 1.4; + + self.lowermessage fadeovertime( 0.05 ); + self.lowermessage.alpha = 1; + self.lowertimer fadeovertime( 0.05 ); + self.lowertimer.alpha = 1; +} + +setlowermessagevalue( text, value, combinemessage ) +{ + if ( !isdefined( self.lowermessage ) ) + return; + + if ( isdefined( self.lowermessageoverride ) && text != &"" ) + { + text = self.lowermessageoverride; + time = undefined; + } + + self notify( "lower_message_set" ); + + if ( !isdefined( combinemessage ) || !combinemessage ) + self.lowermessage settext( text ); + else + self.lowermessage settext( "" ); + + if ( isdefined( value ) && value > 0 ) + { + if ( !isdefined( combinemessage ) || !combinemessage ) + self.lowertimer.label = &""; + else + self.lowertimer.label = text; + + self.lowertimer setvalue( value ); + } + else + { + self.lowertimer settext( "" ); + self.lowertimer.label = &""; + } + + if ( self issplitscreen() ) + self.lowermessage.fontscale = 1.4; + + self.lowermessage fadeovertime( 0.05 ); + self.lowermessage.alpha = 1; + self.lowertimer fadeovertime( 0.05 ); + self.lowertimer.alpha = 1; +} + +clearlowermessage( fadetime ) +{ + if ( !isdefined( self.lowermessage ) ) + return; + + self notify( "lower_message_set" ); + + if ( !isdefined( fadetime ) || fadetime == 0 ) + setlowermessage( &"" ); + else + { + self endon( "disconnect" ); + self endon( "lower_message_set" ); + self.lowermessage fadeovertime( fadetime ); + self.lowermessage.alpha = 0; + self.lowertimer fadeovertime( fadetime ); + self.lowertimer.alpha = 0; + wait( fadetime ); + self setlowermessage( "" ); + } +} + +printonteam( text, team ) +{ + assert( isdefined( level.players ) ); + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + player iprintln( text ); + } +} + +printboldonteam( text, team ) +{ + assert( isdefined( level.players ) ); + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + player iprintlnbold( text ); + } +} + +printboldonteamarg( text, team, arg ) +{ + assert( isdefined( level.players ) ); + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + player iprintlnbold( text, arg ); + } +} + +printonteamarg( text, team, arg ) +{ + +} + +printonplayers( text, team ) +{ + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( team ) ) + { + if ( isdefined( players[i].pers["team"] ) && players[i].pers["team"] == team ) + players[i] iprintln( text ); + + continue; + } + + players[i] iprintln( text ); + } +} + +printandsoundoneveryone( team, enemyteam, printfriendly, printenemy, soundfriendly, soundenemy, printarg ) +{ + shoulddosounds = isdefined( soundfriendly ); + shoulddoenemysounds = 0; + + if ( isdefined( soundenemy ) ) + { + assert( shoulddosounds ); + shoulddoenemysounds = 1; + } + + if ( !isdefined( printarg ) ) + printarg = ""; + + if ( level.splitscreen || !shoulddosounds ) + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + + if ( isdefined( playerteam ) ) + { + if ( playerteam == team && isdefined( printfriendly ) && printfriendly != &"" ) + { + player iprintln( printfriendly, printarg ); + continue; + } + + if ( isdefined( printenemy ) && printenemy != &"" ) + { + if ( isdefined( enemyteam ) && playerteam == enemyteam ) + { + player iprintln( printenemy, printarg ); + continue; + } + + if ( !isdefined( enemyteam ) && playerteam != team ) + player iprintln( printenemy, printarg ); + } + } + } + + if ( shoulddosounds ) + { + assert( level.splitscreen ); + level.players[0] playlocalsound( soundfriendly ); + } + } + else + { + assert( shoulddosounds ); + + if ( shoulddoenemysounds ) + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + + if ( isdefined( playerteam ) ) + { + if ( playerteam == team ) + { + if ( isdefined( printfriendly ) && printfriendly != &"" ) + player iprintln( printfriendly, printarg ); + + player playlocalsound( soundfriendly ); + continue; + } + + if ( isdefined( enemyteam ) && playerteam == enemyteam || !isdefined( enemyteam ) && playerteam != team ) + { + if ( isdefined( printenemy ) && printenemy != &"" ) + player iprintln( printenemy, printarg ); + + player playlocalsound( soundenemy ); + } + } + } + } + else + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + + if ( isdefined( playerteam ) ) + { + if ( playerteam == team ) + { + if ( isdefined( printfriendly ) && printfriendly != &"" ) + player iprintln( printfriendly, printarg ); + + player playlocalsound( soundfriendly ); + continue; + } + + if ( isdefined( printenemy ) && printenemy != &"" ) + { + if ( isdefined( enemyteam ) && playerteam == enemyteam ) + { + player iprintln( printenemy, printarg ); + continue; + } + + if ( !isdefined( enemyteam ) && playerteam != team ) + player iprintln( printenemy, printarg ); + } + } + } + } + } +} + +_playlocalsound( soundalias ) +{ + if ( level.splitscreen && !self ishost() ) + return; + + self playlocalsound( soundalias ); +} + +dvarintvalue( dvar, defval, minval, maxval ) +{ + dvar = "scr_" + level.gametype + "_" + dvar; + + if ( getdvar( dvar ) == "" ) + { + setdvar( dvar, defval ); + return defval; + } + + value = getdvarint( dvar ); + + if ( value > maxval ) + value = maxval; + else if ( value < minval ) + value = minval; + else + return value; + + setdvar( dvar, value ); + return value; +} + +dvarfloatvalue( dvar, defval, minval, maxval ) +{ + dvar = "scr_" + level.gametype + "_" + dvar; + + if ( getdvar( dvar ) == "" ) + { + setdvar( dvar, defval ); + return defval; + } + + value = getdvarfloat( dvar ); + + if ( value > maxval ) + value = maxval; + else if ( value < minval ) + value = minval; + else + return value; + + setdvar( dvar, value ); + return value; +} + +play_sound_on_tag( alias, tag ) +{ + if ( isdefined( tag ) ) + { + org = spawn( "script_origin", self gettagorigin( tag ) ); + org linkto( self, tag, ( 0, 0, 0 ), ( 0, 0, 0 ) ); + } + else + { + org = spawn( "script_origin", ( 0, 0, 0 ) ); + org.origin = self.origin; + org.angles = self.angles; + org linkto( self ); + } + + org playsound( alias ); + wait 5.0; + org delete(); +} + +createloopeffect( fxid ) +{ + ent = maps\mp\_createfx::createeffect( "loopfx", fxid ); + ent.v["delay"] = 0.5; + return ent; +} + +createoneshoteffect( fxid ) +{ + ent = maps\mp\_createfx::createeffect( "oneshotfx", fxid ); + ent.v["delay"] = -15; + return ent; +} + +loop_fx_sound( alias, origin, ender, timeout ) +{ + org = spawn( "script_origin", ( 0, 0, 0 ) ); + + if ( isdefined( ender ) ) + { + thread loop_sound_delete( ender, org ); + self endon( ender ); + } + + org.origin = origin; + org playloopsound( alias ); + + if ( !isdefined( timeout ) ) + return; + + wait( timeout ); +} + +exploder_damage() +{ + if ( isdefined( self.v["delay"] ) ) + delay = self.v["delay"]; + else + delay = 0; + + if ( isdefined( self.v["damage_radius"] ) ) + radius = self.v["damage_radius"]; + else + radius = 128; + + damage = self.v["damage"]; + origin = self.v["origin"]; + wait( delay ); + radiusdamage( origin, radius, damage, damage ); +} + +exploder_before_load( num ) +{ + waittillframeend; + waittillframeend; + activate_exploder( num ); +} + +exploder_after_load( num ) +{ + activate_exploder( num ); +} + +getexploderid( ent ) +{ + if ( !isdefined( level._exploder_ids ) ) + { + level._exploder_ids = []; + level._exploder_id = 1; + } + + if ( !isdefined( level._exploder_ids[ent.v["exploder"]] ) ) + { + level._exploder_ids[ent.v["exploder"]] = level._exploder_id; + level._exploder_id++; + } + + return level._exploder_ids[ent.v["exploder"]]; +} + +activate_exploder_on_clients( num ) +{ + if ( !isdefined( level._exploder_ids[num] ) ) + return; + + if ( !isdefined( level._client_exploders[num] ) ) + level._client_exploders[num] = 1; + + if ( !isdefined( level._client_exploder_ids[num] ) ) + level._client_exploder_ids[num] = 1; + + activateclientexploder( level._exploder_ids[num] ); +} + +delete_exploder_on_clients( num ) +{ + if ( !isdefined( level._exploder_ids[num] ) ) + return; + + if ( !isdefined( level._client_exploders[num] ) ) + return; + + level._client_exploders[num] = undefined; + level._client_exploder_ids[num] = undefined; + deactivateclientexploder( level._exploder_ids[num] ); +} + +activate_individual_exploder() +{ + level notify( "exploder" + self.v["exploder"] ); + + if ( level.createfx_enabled || !level.clientscripts || !isdefined( level._exploder_ids[int( self.v["exploder"] )] ) || isdefined( self.v["exploder_server"] ) ) + { +/# + println( "Exploder " + self.v["exploder"] + " created on server." ); +#/ + if ( isdefined( self.v["firefx"] ) ) + self thread fire_effect(); + + if ( isdefined( self.v["fxid"] ) && self.v["fxid"] != "No FX" ) + self thread cannon_effect(); + else if ( isdefined( self.v["soundalias"] ) ) + self thread sound_effect(); + } + + if ( isdefined( self.v["trailfx"] ) ) + self thread trail_effect(); + + if ( isdefined( self.v["damage"] ) ) + self thread exploder_damage(); + + if ( self.v["exploder_type"] == "exploder" ) + self thread brush_show(); + else if ( self.v["exploder_type"] == "exploderchunk" || self.v["exploder_type"] == "exploderchunk visible" ) + self thread brush_throw(); + else + self thread brush_delete(); +} + +trail_effect() +{ + self exploder_delay(); + + if ( !isdefined( self.v["trailfxtag"] ) ) + self.v["trailfxtag"] = "tag_origin"; + + temp_ent = undefined; + + if ( self.v["trailfxtag"] == "tag_origin" ) + playfxontag( level._effect[self.v["trailfx"]], self.model, self.v["trailfxtag"] ); + else + { + temp_ent = spawn( "script_model", self.model.origin ); + temp_ent setmodel( "tag_origin" ); + temp_ent linkto( self.model, self.v["trailfxtag"] ); + playfxontag( level._effect[self.v["trailfx"]], temp_ent, "tag_origin" ); + } + + if ( isdefined( self.v["trailfxsound"] ) ) + { + if ( !isdefined( temp_ent ) ) + self.model playloopsound( self.v["trailfxsound"] ); + else + temp_ent playloopsound( self.v["trailfxsound"] ); + } + + if ( isdefined( self.v["ender"] ) && isdefined( temp_ent ) ) + level thread trail_effect_ender( temp_ent, self.v["ender"] ); + + if ( !isdefined( self.v["trailfxtimeout"] ) ) + return; + + wait( self.v["trailfxtimeout"] ); + + if ( isdefined( temp_ent ) ) + temp_ent delete(); +} + +trail_effect_ender( ent, ender ) +{ + ent endon( "death" ); + + self waittill( ender ); + + ent delete(); +} + +activate_exploder( num ) +{ + num = int( num ); +/# + if ( level.createfx_enabled ) + { + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + + if ( !isdefined( ent ) ) + continue; + + if ( ent.v["type"] != "exploder" ) + continue; + + if ( !isdefined( ent.v["exploder"] ) ) + continue; + + if ( ent.v["exploder"] != num ) + continue; + + if ( isdefined( ent.v["exploder_server"] ) ) + client_send = 0; + + ent activate_individual_exploder(); + } + + return; + } +#/ + client_send = 1; + + if ( isdefined( level.createfxexploders[num] ) ) + { + for ( i = 0; i < level.createfxexploders[num].size; i++ ) + { + if ( client_send && isdefined( level.createfxexploders[num][i].v["exploder_server"] ) ) + client_send = 0; + + level.createfxexploders[num][i] activate_individual_exploder(); + } + } + + if ( level.clientscripts ) + { + if ( !level.createfx_enabled && client_send == 1 ) + activate_exploder_on_clients( num ); + } +} + +stop_exploder( num ) +{ + num = int( num ); + + if ( level.clientscripts ) + { + if ( !level.createfx_enabled ) + delete_exploder_on_clients( num ); + } + + if ( isdefined( level.createfxexploders[num] ) ) + { + for ( i = 0; i < level.createfxexploders[num].size; i++ ) + { + if ( !isdefined( level.createfxexploders[num][i].looper ) ) + continue; + + level.createfxexploders[num][i].looper delete(); + } + } +} + +sound_effect() +{ + self effect_soundalias(); +} + +effect_soundalias() +{ + if ( !isdefined( self.v["delay"] ) ) + self.v["delay"] = 0; + + origin = self.v["origin"]; + alias = self.v["soundalias"]; + wait( self.v["delay"] ); + play_sound_in_space( alias, origin ); +} + +play_sound_in_space( alias, origin, master ) +{ + org = spawn( "script_origin", ( 0, 0, 1 ) ); + + if ( !isdefined( origin ) ) + origin = self.origin; + + org.origin = origin; + + if ( isdefined( master ) && master ) + org playsoundasmaster( alias ); + else + org playsound( alias ); + + wait 10.0; + org delete(); +} + +loop_sound_in_space( alias, origin, ender ) +{ + org = spawn( "script_origin", ( 0, 0, 1 ) ); + + if ( !isdefined( origin ) ) + origin = self.origin; + + org.origin = origin; + org playloopsound( alias ); + + level waittill( ender ); + + org stoploopsound(); + wait 0.1; + org delete(); +} + +fire_effect() +{ + if ( !isdefined( self.v["delay"] ) ) + self.v["delay"] = 0; + + delay = self.v["delay"]; + + if ( isdefined( self.v["delay_min"] ) && isdefined( self.v["delay_max"] ) ) + delay = self.v["delay_min"] + randomfloat( self.v["delay_max"] - self.v["delay_min"] ); + + forward = self.v["forward"]; + up = self.v["up"]; + org = undefined; + firefxsound = self.v["firefxsound"]; + origin = self.v["origin"]; + firefx = self.v["firefx"]; + ender = self.v["ender"]; + + if ( !isdefined( ender ) ) + ender = "createfx_effectStopper"; + + timeout = self.v["firefxtimeout"]; + firefxdelay = 0.5; + + if ( isdefined( self.v["firefxdelay"] ) ) + firefxdelay = self.v["firefxdelay"]; + + wait( delay ); + + if ( isdefined( firefxsound ) ) + level thread loop_fx_sound( firefxsound, origin, ender, timeout ); + + playfx( level._effect[firefx], self.v["origin"], forward, up ); +} + +loop_sound_delete( ender, ent ) +{ + ent endon( "death" ); + + self waittill( ender ); + + ent delete(); +} + +createexploder( fxid ) +{ + ent = maps\mp\_createfx::createeffect( "exploder", fxid ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1; + ent.v["exploder_type"] = "normal"; + return ent; +} + +getotherteam( team ) +{ + if ( team == "allies" ) + return "axis"; + else if ( team == "axis" ) + return "allies"; + else + return "allies"; +/# + assertmsg( "getOtherTeam: invalid team " + team ); +#/ +} + +getteammask( team ) +{ + if ( !level.teambased || !isdefined( team ) || !isdefined( level.spawnsystem.ispawn_teammask[team] ) ) + return level.spawnsystem.ispawn_teammask_free; + + return level.spawnsystem.ispawn_teammask[team]; +} + +getotherteamsmask( skip_team ) +{ + mask = 0; + + foreach ( team in level.teams ) + { + if ( team == skip_team ) + continue; + + mask |= getteammask( team ); + } + + return mask; +} + +wait_endon( waittime, endonstring, endonstring2, endonstring3, endonstring4 ) +{ + self endon( endonstring ); + + if ( isdefined( endonstring2 ) ) + self endon( endonstring2 ); + + if ( isdefined( endonstring3 ) ) + self endon( endonstring3 ); + + if ( isdefined( endonstring4 ) ) + self endon( endonstring4 ); + + wait( waittime ); + return 1; +} + +ismg( weapon ) +{ + return issubstr( weapon, "_bipod_" ); +} + +plot_points( plotpoints, r, g, b, timer ) +{ +/# + lastpoint = plotpoints[0]; + + if ( !isdefined( r ) ) + r = 1; + + if ( !isdefined( g ) ) + g = 1; + + if ( !isdefined( b ) ) + b = 1; + + if ( !isdefined( timer ) ) + timer = 0.05; + + for ( i = 1; i < plotpoints.size; i++ ) + { + line( lastpoint, plotpoints[i], ( r, g, b ), 1, timer ); + lastpoint = plotpoints[i]; + } +#/ +} + +player_flag_wait( msg ) +{ + while ( !self.flag[msg] ) + self waittill( msg ); +} + +player_flag_wait_either( flag1, flag2 ) +{ + for (;;) + { + if ( flag( flag1 ) ) + return; + + if ( flag( flag2 ) ) + return; + + self waittill_either( flag1, flag2 ); + } +} + +player_flag_waitopen( msg ) +{ + while ( self.flag[msg] ) + self waittill( msg ); +} + +player_flag_init( message, trigger ) +{ + if ( !isdefined( self.flag ) ) + { + self.flag = []; + self.flags_lock = []; + } + + assert( !isdefined( self.flag[message] ), "Attempt to reinitialize existing message: " + message ); + self.flag[message] = 0; +/# + self.flags_lock[message] = 0; +#/ +} + +player_flag_set_delayed( message, delay ) +{ + wait( delay ); + player_flag_set( message ); +} + +player_flag_set( message ) +{ +/# + assert( isdefined( self.flag[message] ), "Attempt to set a flag before calling flag_init: " + message ); + assert( self.flag[message] == self.flags_lock[message] ); + self.flags_lock[message] = 1; +#/ + self.flag[message] = 1; + self notify( message ); +} + +player_flag_clear( message ) +{ +/# + assert( isdefined( self.flag[message] ), "Attempt to set a flag before calling flag_init: " + message ); + assert( self.flag[message] == self.flags_lock[message] ); + self.flags_lock[message] = 0; +#/ + self.flag[message] = 0; + self notify( message ); +} + +player_flag( message ) +{ + assert( isdefined( message ), "Tried to check flag but the flag was not defined." ); + + if ( !self.flag[message] ) + return false; + + return true; +} + +registerclientsys( ssysname ) +{ + if ( !isdefined( level._clientsys ) ) + level._clientsys = []; + + if ( level._clientsys.size >= 32 ) + { +/# + error( "Max num client systems exceeded." ); +#/ + return; + } + + if ( isdefined( level._clientsys[ssysname] ) ) + { +/# + error( "Attempt to re-register client system : " + ssysname ); +#/ + return; + } + else + { + level._clientsys[ssysname] = spawnstruct(); + level._clientsys[ssysname].sysid = clientsysregister( ssysname ); + } +} + +setclientsysstate( ssysname, ssysstate, player ) +{ + if ( !isdefined( level._clientsys ) ) + { +/# + error( "setClientSysState called before registration of any systems." ); +#/ + return; + } + + if ( !isdefined( level._clientsys[ssysname] ) ) + { +/# + error( "setClientSysState called on unregistered system " + ssysname ); +#/ + return; + } + + if ( isdefined( player ) ) + player clientsyssetstate( level._clientsys[ssysname].sysid, ssysstate ); + else + { + clientsyssetstate( level._clientsys[ssysname].sysid, ssysstate ); + level._clientsys[ssysname].sysstate = ssysstate; + } +} + +getclientsysstate( ssysname ) +{ + if ( !isdefined( level._clientsys ) ) + { +/# + error( "Cannot getClientSysState before registering any client systems." ); +#/ + return ""; + } + + if ( !isdefined( level._clientsys[ssysname] ) ) + { +/# + error( "Client system " + ssysname + " cannot return state, as it is unregistered." ); +#/ + return ""; + } + + if ( isdefined( level._clientsys[ssysname].sysstate ) ) + return level._clientsys[ssysname].sysstate; + + return ""; +} + +clientnotify( event ) +{ + if ( level.clientscripts ) + { + if ( isplayer( self ) ) + maps\mp\_utility::setclientsysstate( "levelNotify", event, self ); + else + maps\mp\_utility::setclientsysstate( "levelNotify", event ); + } +} + +alphabet_compare( a, b ) +{ + list = []; + val = 1; + list["0"] = val; + val++; + list["1"] = val; + val++; + list["2"] = val; + val++; + list["3"] = val; + val++; + list["4"] = val; + val++; + list["5"] = val; + val++; + list["6"] = val; + val++; + list["7"] = val; + val++; + list["8"] = val; + val++; + list["9"] = val; + val++; + list["_"] = val; + val++; + list["a"] = val; + val++; + list["b"] = val; + val++; + list["c"] = val; + val++; + list["d"] = val; + val++; + list["e"] = val; + val++; + list["f"] = val; + val++; + list["g"] = val; + val++; + list["h"] = val; + val++; + list["i"] = val; + val++; + list["j"] = val; + val++; + list["k"] = val; + val++; + list["l"] = val; + val++; + list["m"] = val; + val++; + list["n"] = val; + val++; + list["o"] = val; + val++; + list["p"] = val; + val++; + list["q"] = val; + val++; + list["r"] = val; + val++; + list["s"] = val; + val++; + list["t"] = val; + val++; + list["u"] = val; + val++; + list["v"] = val; + val++; + list["w"] = val; + val++; + list["x"] = val; + val++; + list["y"] = val; + val++; + list["z"] = val; + val++; + a = tolower( a ); + b = tolower( b ); + val1 = 0; + + if ( isdefined( list[a] ) ) + val1 = list[a]; + + val2 = 0; + + if ( isdefined( list[b] ) ) + val2 = list[b]; + + if ( val1 > val2 ) + return "1st"; + + if ( val1 < val2 ) + return "2nd"; + + return "same"; +} + +is_later_in_alphabet( string1, string2 ) +{ + count = string1.size; + + if ( count >= string2.size ) + count = string2.size; + + for ( i = 0; i < count; i++ ) + { + val = alphabet_compare( string1[i], string2[i] ); + + if ( val == "1st" ) + return 1; + + if ( val == "2nd" ) + return 0; + } + + return string1.size > string2.size; +} + +alphabetize( array ) +{ + if ( array.size <= 1 ) + return array; + + count = 0; + + for (;;) + { + changed = 0; + + for ( i = 0; i < array.size - 1; i++ ) + { + if ( is_later_in_alphabet( array[i], array[i + 1] ) ) + { + val = array[i]; + array[i] = array[i + 1]; + array[i + 1] = val; + changed = 1; + count++; + + if ( count >= 9 ) + { + count = 0; + wait 0.05; + } + } + } + + if ( !changed ) + return array; + } + + return array; +} + +get_players() +{ + players = getplayers(); + return players; +} + +getfx( fx ) +{ + assert( isdefined( level._effect[fx] ), "Fx " + fx + " is not defined in level._effect." ); + return level._effect[fx]; +} + +struct_arrayspawn() +{ + struct = spawnstruct(); + struct.array = []; + struct.lastindex = 0; + return struct; +} + +structarray_add( struct, object ) +{ + assert( !isdefined( object.struct_array_index ) ); + struct.array[struct.lastindex] = object; + object.struct_array_index = struct.lastindex; + struct.lastindex++; +} + +structarray_remove( struct, object ) +{ + structarray_swaptolast( struct, object ); + struct.array[struct.lastindex - 1] = undefined; + struct.lastindex--; +} + +structarray_swaptolast( struct, object ) +{ + struct structarray_swap( struct.array[struct.lastindex - 1], object ); +} + +structarray_shuffle( struct, shuffle ) +{ + for ( i = 0; i < shuffle; i++ ) + struct structarray_swap( struct.array[i], struct.array[randomint( struct.lastindex )] ); +} + +structarray_swap( object1, object2 ) +{ + index1 = object1.struct_array_index; + index2 = object2.struct_array_index; + self.array[index2] = object1; + self.array[index1] = object2; + self.array[index1].struct_array_index = index1; + self.array[index2].struct_array_index = index2; +} + +waittill_either( msg1, msg2 ) +{ + self endon( msg1 ); + + self waittill( msg2 ); +} + +combinearrays( array1, array2 ) +{ + assert( isdefined( array1 ) || isdefined( array2 ) ); + + if ( !isdefined( array1 ) && isdefined( array2 ) ) + return array2; + + if ( !isdefined( array2 ) && isdefined( array1 ) ) + return array1; + + foreach ( elem in array2 ) + array1[array1.size] = elem; + + return array1; +} + +getclosest( org, array, dist ) +{ + return comparesizes( org, array, dist, ::closerfunc ); +} + +getclosestfx( org, fxarray, dist ) +{ + return comparesizesfx( org, fxarray, dist, ::closerfunc ); +} + +getfarthest( org, array, dist ) +{ + return comparesizes( org, array, dist, ::fartherfunc ); +} + +comparesizesfx( org, array, dist, comparefunc ) +{ + if ( !array.size ) + return undefined; + + if ( isdefined( dist ) ) + { + distsqr = dist * dist; + struct = undefined; + keys = getarraykeys( array ); + + for ( i = 0; i < keys.size; i++ ) + { + newdistsqr = distancesquared( array[keys[i]].v["origin"], org ); + + if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) + continue; + + distsqr = newdistsqr; + struct = array[keys[i]]; + } + + return struct; + } + + keys = getarraykeys( array ); + struct = array[keys[0]]; + distsqr = distancesquared( struct.v["origin"], org ); + + for ( i = 1; i < keys.size; i++ ) + { + newdistsqr = distancesquared( array[keys[i]].v["origin"], org ); + + if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) + continue; + + distsqr = newdistsqr; + struct = array[keys[i]]; + } + + return struct; +} + +comparesizes( org, array, dist, comparefunc ) +{ + if ( !array.size ) + return undefined; + + if ( isdefined( dist ) ) + { + distsqr = dist * dist; + ent = undefined; + keys = getarraykeys( array ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( !isdefined( array[keys[i]] ) ) + continue; + + newdistsqr = distancesquared( array[keys[i]].origin, org ); + + if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) + continue; + + distsqr = newdistsqr; + ent = array[keys[i]]; + } + + return ent; + } + + keys = getarraykeys( array ); + ent = array[keys[0]]; + distsqr = distancesquared( ent.origin, org ); + + for ( i = 1; i < keys.size; i++ ) + { + if ( !isdefined( array[keys[i]] ) ) + continue; + + newdistsqr = distancesquared( array[keys[i]].origin, org ); + + if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) + continue; + + distsqr = newdistsqr; + ent = array[keys[i]]; + } + + return ent; +} + +closerfunc( dist1, dist2 ) +{ + return dist1 >= dist2; +} + +fartherfunc( dist1, dist2 ) +{ + return dist1 <= dist2; +} + +get_array_of_closest( org, array, excluders = [], max = array.size, maxdist ) +{ + maxdists2rd = undefined; + + if ( isdefined( maxdist ) ) + maxdists2rd = maxdist * maxdist; + + dist = []; + index = []; + + for ( i = 0; i < array.size; i++ ) + { + if ( !isdefined( array[i] ) ) + continue; + + excluded = 0; + + for ( p = 0; p < excluders.size; p++ ) + { + if ( array[i] != excluders[p] ) + continue; + + excluded = 1; + break; + } + + if ( excluded ) + continue; + + length = distancesquared( org, array[i].origin ); + + if ( isdefined( maxdists2rd ) && maxdists2rd < length ) + continue; + + dist[dist.size] = length; + index[index.size] = i; + } + + for (;;) + { + change = 0; + + for ( i = 0; i < dist.size - 1; i++ ) + { + if ( dist[i] <= dist[i + 1] ) + continue; + + change = 1; + temp = dist[i]; + dist[i] = dist[i + 1]; + dist[i + 1] = temp; + temp = index[i]; + index[i] = index[i + 1]; + index[i + 1] = temp; + } + + if ( !change ) + break; + } + + newarray = []; + + if ( max > dist.size ) + max = dist.size; + + for ( i = 0; i < max; i++ ) + newarray[i] = array[index[i]]; + + return newarray; +} + +set_dvar_if_unset( dvar, value, reset = 0 ) +{ + if ( reset || getdvar( dvar ) == "" ) + { + setdvar( dvar, value ); + return value; + } + + return getdvar( dvar ); +} + +set_dvar_float_if_unset( dvar, value, reset = 0 ) +{ + if ( reset || getdvar( dvar ) == "" ) + setdvar( dvar, value ); + + return getdvarfloat( dvar ); +} + +set_dvar_int_if_unset( dvar, value, reset = 0 ) +{ + if ( reset || getdvar( dvar ) == "" ) + { + setdvar( dvar, value ); + return int( value ); + } + + return getdvarint( dvar ); +} + +drawcylinder( pos, rad, height, duration, stop_notify ) +{ +/# + if ( !isdefined( duration ) ) + duration = 0; + + level thread drawcylinder_think( pos, rad, height, duration, stop_notify ); +#/ +} + +drawcylinder_think( pos, rad, height, seconds, stop_notify ) +{ +/# + if ( isdefined( stop_notify ) ) + level endon( stop_notify ); + + stop_time = gettime() + seconds * 1000; + currad = rad; + curheight = height; + + for (;;) + { + if ( seconds > 0 && stop_time <= gettime() ) + return; + + for ( r = 0; r < 20; r++ ) + { + theta = r / 20 * 360; + theta2 = ( r + 1 ) / 20 * 360; + line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, 0 ) ); + line( pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, curheight ) ); + line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ) ); + } + + wait 0.05; + } +#/ +} + +is_bot() +{ + return isplayer( self ) && isdefined( self.pers["isBot"] ) && self.pers["isBot"] != 0; +} + +add_trigger_to_ent( ent ) +{ + if ( !isdefined( ent._triggers ) ) + ent._triggers = []; + + ent._triggers[self getentitynumber()] = 1; +} + +remove_trigger_from_ent( ent ) +{ + if ( !isdefined( ent ) ) + return; + + if ( !isdefined( ent._triggers ) ) + return; + + if ( !isdefined( ent._triggers[self getentitynumber()] ) ) + return; + + ent._triggers[self getentitynumber()] = 0; +} + +ent_already_in_trigger( trig ) +{ + if ( !isdefined( self._triggers ) ) + return false; + + if ( !isdefined( self._triggers[trig getentitynumber()] ) ) + return false; + + if ( !self._triggers[trig getentitynumber()] ) + return false; + + return true; +} + +trigger_thread_death_monitor( ent, ender ) +{ + ent waittill( "death" ); + + self endon( ender ); + self remove_trigger_from_ent( ent ); +} + +trigger_thread( ent, on_enter_payload, on_exit_payload ) +{ + ent endon( "entityshutdown" ); + ent endon( "death" ); + + if ( ent ent_already_in_trigger( self ) ) + return; + + self add_trigger_to_ent( ent ); + ender = "end_trig_death_monitor" + self getentitynumber() + " " + ent getentitynumber(); + self thread trigger_thread_death_monitor( ent, ender ); + endon_condition = "leave_trigger_" + self getentitynumber(); + + if ( isdefined( on_enter_payload ) ) + self thread [[ on_enter_payload ]]( ent, endon_condition ); + + while ( isdefined( ent ) && ent istouching( self ) ) + wait 0.01; + + ent notify( endon_condition ); + + if ( isdefined( ent ) && isdefined( on_exit_payload ) ) + self thread [[ on_exit_payload ]]( ent ); + + if ( isdefined( ent ) ) + self remove_trigger_from_ent( ent ); + + self notify( ender ); +} + +isoneround() +{ + if ( level.roundlimit == 1 ) + return true; + + return false; +} + +isfirstround() +{ + if ( level.roundlimit > 1 && game["roundsplayed"] == 0 ) + return true; + + return false; +} + +islastround() +{ + if ( level.roundlimit > 1 && game["roundsplayed"] >= level.roundlimit - 1 ) + return true; + + return false; +} + +waslastround() +{ + if ( level.forcedend ) + return true; + + if ( isdefined( level.shouldplayovertimeround ) ) + { + if ( [[ level.shouldplayovertimeround ]]() ) + { + level.nextroundisovertime = 1; + return false; + } + else if ( isdefined( game["overtime_round"] ) ) + return true; + } + + if ( hitroundlimit() || hitscorelimit() || hitroundwinlimit() ) + return true; + + return false; +} + +hitroundlimit() +{ + if ( level.roundlimit <= 0 ) + return 0; + + return getroundsplayed() >= level.roundlimit; +} + +anyteamhitroundwinlimit() +{ + foreach ( team in level.teams ) + { + if ( getroundswon( team ) >= level.roundwinlimit ) + return true; + } + + return false; +} + +anyteamhitroundlimitwithdraws() +{ + tie_wins = game["roundswon"]["tie"]; + + foreach ( team in level.teams ) + { + if ( getroundswon( team ) + tie_wins >= level.roundwinlimit ) + return true; + } + + return false; +} + +getroundwinlimitwinningteam() +{ + max_wins = 0; + winning_team = undefined; + + foreach ( team in level.teams ) + { + wins = getroundswon( team ); + + if ( !isdefined( winning_team ) ) + { + max_wins = wins; + winning_team = team; + continue; + } + + if ( wins == max_wins ) + { + winning_team = "tie"; + continue; + } + + if ( wins > max_wins ) + { + max_wins = wins; + winning_team = team; + } + } + + return winning_team; +} + +hitroundwinlimit() +{ + if ( !isdefined( level.roundwinlimit ) || level.roundwinlimit <= 0 ) + return false; + + if ( anyteamhitroundwinlimit() ) + return true; + + if ( anyteamhitroundlimitwithdraws() ) + { + if ( getroundwinlimitwinningteam() != "tie" ) + return true; + } + + return false; +} + +anyteamhitscorelimit() +{ + foreach ( team in level.teams ) + { + if ( game["teamScores"][team] >= level.scorelimit ) + return true; + } + + return false; +} + +hitscorelimit() +{ + if ( isscoreroundbased() ) + return false; + + if ( level.scorelimit <= 0 ) + return false; + + if ( level.teambased ) + { + if ( anyteamhitscorelimit() ) + return true; + } + else + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pointstowin ) && player.pointstowin >= level.scorelimit ) + return true; + } + } + + return false; +} + +getroundswon( team ) +{ + return game["roundswon"][team]; +} + +getotherteamsroundswon( skip_team ) +{ + roundswon = 0; + + foreach ( team in level.teams ) + { + if ( team == skip_team ) + continue; + + roundswon += game["roundswon"][team]; + } + + return roundswon; +} + +getroundsplayed() +{ + return game["roundsplayed"]; +} + +isscoreroundbased() +{ + return level.scoreroundbased; +} + +isroundbased() +{ + if ( level.roundlimit != 1 && level.roundwinlimit != 1 ) + return true; + + return false; +} + +waittillnotmoving() +{ + if ( self ishacked() ) + { + wait 0.05; + return; + } + + if ( self.classname == "grenade" ) + self waittill( "stationary" ); + else + { + for ( prevorigin = self.origin; 1; prevorigin = self.origin ) + { + wait 0.15; + + if ( self.origin == prevorigin ) + break; + } + } +} + +mayapplyscreeneffect() +{ + assert( isdefined( self ) ); + assert( isplayer( self ) ); + return !isdefined( self.viewlockedentity ); +} + +getdvarfloatdefault( dvarname, defaultvalue ) +{ + value = getdvar( dvarname ); + + if ( value != "" ) + return float( value ); + + return defaultvalue; +} + +getdvarintdefault( dvarname, defaultvalue ) +{ + value = getdvar( dvarname ); + + if ( value != "" ) + return int( value ); + + return defaultvalue; +} + +closestpointonline( point, linestart, lineend ) +{ + linemagsqrd = lengthsquared( lineend - linestart ); + t = ( ( point[0] - linestart[0] ) * ( lineend[0] - linestart[0] ) + ( point[1] - linestart[1] ) * ( lineend[1] - linestart[1] ) + ( point[2] - linestart[2] ) * ( lineend[2] - linestart[2] ) ) / linemagsqrd; + + if ( t < 0.0 ) + return linestart; + else if ( t > 1.0 ) + return lineend; + + start_x = linestart[0] + t * ( lineend[0] - linestart[0] ); + start_y = linestart[1] + t * ( lineend[1] - linestart[1] ); + start_z = linestart[2] + t * ( lineend[2] - linestart[2] ); + return ( start_x, start_y, start_z ); +} + +isstrstart( string1, substr ) +{ + return getsubstr( string1, 0, substr.size ) == substr; +} + +spread_array_thread( entities, process, var1, var2, var3 ) +{ + keys = getarraykeys( entities ); + + if ( isdefined( var3 ) ) + { + for ( i = 0; i < keys.size; i++ ) + { + entities[keys[i]] thread [[ process ]]( var1, var2, var3 ); + wait 0.1; + } + + return; + } + + if ( isdefined( var2 ) ) + { + for ( i = 0; i < keys.size; i++ ) + { + entities[keys[i]] thread [[ process ]]( var1, var2 ); + wait 0.1; + } + + return; + } + + if ( isdefined( var1 ) ) + { + for ( i = 0; i < keys.size; i++ ) + { + entities[keys[i]] thread [[ process ]]( var1 ); + wait 0.1; + } + + return; + } + + for ( i = 0; i < keys.size; i++ ) + { + entities[keys[i]] thread [[ process ]](); + wait 0.1; + } +} + +freeze_player_controls( boolean ) +{ + assert( isdefined( boolean ), "'freeze_player_controls()' has not been passed an argument properly." ); + + if ( boolean && isdefined( self ) ) + self freezecontrols( boolean ); + else if ( !boolean && isdefined( self ) && !level.gameended ) + self freezecontrols( boolean ); +} + +gethostplayer() +{ + players = get_players(); + + for ( index = 0; index < players.size; index++ ) + { + if ( players[index] ishost() ) + return players[index]; + } +} + +gethostplayerforbots() +{ + players = get_players(); + + for ( index = 0; index < players.size; index++ ) + { + if ( players[index] ishostforbots() ) + return players[index]; + } +} + +ispregame() +{ + return isdefined( level.pregame ) && level.pregame; +} + +iskillstreaksenabled() +{ + return isdefined( level.killstreaksenabled ) && level.killstreaksenabled; +} + +isrankenabled() +{ + return isdefined( level.rankenabled ) && level.rankenabled; +} + +playsmokesound( position, duration, startsound, stopsound, loopsound ) +{ + smokesound = spawn( "script_origin", ( 0, 0, 1 ) ); + smokesound.origin = position; + smokesound playsound( startsound ); + smokesound playloopsound( loopsound ); + + if ( duration > 0.5 ) + wait( duration - 0.5 ); + + thread playsoundinspace( stopsound, position ); + smokesound stoploopsound( 0.5 ); + wait 0.5; + smokesound delete(); +} + +playsoundinspace( alias, origin, master ) +{ + org = spawn( "script_origin", ( 0, 0, 1 ) ); + + if ( !isdefined( origin ) ) + origin = self.origin; + + org.origin = origin; + + if ( isdefined( master ) && master ) + org playsoundasmaster( alias ); + else + org playsound( alias ); + + wait 10.0; + org delete(); +} + +get2dyaw( start, end ) +{ + yaw = 0; + vector = ( end[0] - start[0], end[1] - start[1], 0 ); + return vectoangles( vector ); +} + +vectoangles( vector ) +{ + yaw = 0; + vecx = vector[0]; + vecy = vector[1]; + + if ( vecx == 0 && vecy == 0 ) + return 0; + + if ( vecy < 0.001 && vecy > -0.001 ) + vecy = 0.001; + + yaw = atan( vecx / vecy ); + + if ( vecy < 0 ) + yaw += 180; + + return 90 - yaw; +} + +deleteaftertime( time ) +{ + assert( isdefined( self ) ); + assert( isdefined( time ) ); + assert( time >= 0.05 ); + self thread deleteaftertimethread( time ); +} + +deleteaftertimethread( time ) +{ + self endon( "death" ); + wait( time ); + self delete(); +} + +setusingremote( remotename ) +{ + if ( isdefined( self.carryicon ) ) + self.carryicon.alpha = 0; + + assert( !self isusingremote() ); + self.usingremote = remotename; + self disableoffhandweapons(); + self notify( "using_remote" ); +} + +getremotename() +{ + assert( self isusingremote() ); + return self.usingremote; +} + +isusingremote() +{ + return isdefined( self.usingremote ); +} + +getlastweapon() +{ + last_weapon = undefined; + + if ( self hasweapon( self.lastnonkillstreakweapon ) ) + last_weapon = self.lastnonkillstreakweapon; + else if ( self hasweapon( self.lastdroppableweapon ) ) + last_weapon = self.lastdroppableweapon; + + assert( isdefined( last_weapon ) ); + return last_weapon; +} + +freezecontrolswrapper( frozen ) +{ + if ( isdefined( level.hostmigrationtimer ) ) + { + self freeze_player_controls( 1 ); + return; + } + + self freeze_player_controls( frozen ); +} + +setobjectivetext( team, text ) +{ + game["strings"]["objective_" + team] = text; + precachestring( text ); +} + +setobjectivescoretext( team, text ) +{ + game["strings"]["objective_score_" + team] = text; + precachestring( text ); +} + +setobjectivehinttext( team, text ) +{ + game["strings"]["objective_hint_" + team] = text; + precachestring( text ); +} + +getobjectivetext( team ) +{ + return game["strings"]["objective_" + team]; +} + +getobjectivescoretext( team ) +{ + return game["strings"]["objective_score_" + team]; +} + +getobjectivehinttext( team ) +{ + return game["strings"]["objective_hint_" + team]; +} + +registerroundswitch( minvalue, maxvalue ) +{ + level.roundswitch = clamp( getgametypesetting( "roundSwitch" ), minvalue, maxvalue ); + level.roundswitchmin = minvalue; + level.roundswitchmax = maxvalue; +} + +registerroundlimit( minvalue, maxvalue ) +{ + level.roundlimit = clamp( getgametypesetting( "roundLimit" ), minvalue, maxvalue ); + level.roundlimitmin = minvalue; + level.roundlimitmax = maxvalue; +} + +registerroundwinlimit( minvalue, maxvalue ) +{ + level.roundwinlimit = clamp( getgametypesetting( "roundWinLimit" ), minvalue, maxvalue ); + level.roundwinlimitmin = minvalue; + level.roundwinlimitmax = maxvalue; +} + +registerscorelimit( minvalue, maxvalue ) +{ + level.scorelimit = clamp( getgametypesetting( "scoreLimit" ), minvalue, maxvalue ); + level.scorelimitmin = minvalue; + level.scorelimitmax = maxvalue; + setdvar( "ui_scorelimit", level.scorelimit ); +} + +registertimelimit( minvalue, maxvalue ) +{ + level.timelimit = clamp( getgametypesetting( "timeLimit" ), minvalue, maxvalue ); + level.timelimitmin = minvalue; + level.timelimitmax = maxvalue; + setdvar( "ui_timelimit", level.timelimit ); +} + +registernumlives( minvalue, maxvalue ) +{ + level.numlives = clamp( getgametypesetting( "playerNumLives" ), minvalue, maxvalue ); + level.numlivesmin = minvalue; + level.numlivesmax = maxvalue; +} + +getplayerfromclientnum( clientnum ) +{ + if ( clientnum < 0 ) + return undefined; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( level.players[i] getentitynumber() == clientnum ) + return level.players[i]; + } + + return undefined; +} + +setclientfield( field_name, value ) +{ + if ( self == level ) + codesetworldclientfield( field_name, value ); + else + codesetclientfield( self, field_name, value ); +} + +setclientfieldtoplayer( field_name, value ) +{ + codesetplayerstateclientfield( self, field_name, value ); +} + +getclientfield( field_name ) +{ + if ( self == level ) + return codegetworldclientfield( field_name ); + else + return codegetclientfield( self, field_name ); +} + +getclientfieldtoplayer( field_name ) +{ + return codegetplayerstateclientfield( self, field_name ); +} + +isenemyplayer( player ) +{ + assert( isdefined( player ) ); + + if ( !isplayer( player ) ) + return false; + + if ( level.teambased ) + { + if ( player.team == self.team ) + return false; + } + else if ( player == self ) + return false; + + return true; +} + +getweaponclass( weapon ) +{ + assert( isdefined( weapon ) ); + + if ( !isdefined( weapon ) ) + return undefined; + + if ( !isdefined( level.weaponclassarray ) ) + level.weaponclassarray = []; + + if ( isdefined( level.weaponclassarray[weapon] ) ) + return level.weaponclassarray[weapon]; + + baseweaponindex = getbaseweaponitemindex( weapon ) + 1; + weaponclass = tablelookupcolumnforrow( "mp/statstable.csv", baseweaponindex, 2 ); + level.weaponclassarray[weapon] = weaponclass; + return weaponclass; +} + +ispressbuild() +{ + buildtype = getdvar( _hash_19B966D7 ); + + if ( isdefined( buildtype ) && buildtype == "press" ) + return true; + + return false; +} + +isflashbanged() +{ + return isdefined( self.flashendtime ) && gettime() < self.flashendtime; +} + +ishacked() +{ + return isdefined( self.hacked ) && self.hacked; +} + +domaxdamage( origin, attacker, inflictor, headshot, mod ) +{ + if ( isdefined( self.damagedtodeath ) && self.damagedtodeath ) + return; + + if ( isdefined( self.maxhealth ) ) + damage = self.maxhealth + 1; + else + damage = self.health + 1; + + self.damagedtodeath = 1; + self dodamage( damage, origin, attacker, inflictor, headshot, mod ); +} diff --git a/Multiplayer Core/patch_mp/maps/mp/_vehicles.gsc b/MP/Core/maps/mp/_vehicles.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/_vehicles.gsc rename to MP/Core/maps/mp/_vehicles.gsc index 93e26bd..0f195db 100644 --- a/Multiplayer Core/patch_mp/maps/mp/_vehicles.gsc +++ b/MP/Core/maps/mp/_vehicles.gsc @@ -529,9 +529,7 @@ build_rumble( rumble, scale, duration, radius, basetime, randomaditionaltime ) level.vehicle_rumble = []; struct = build_quake( scale, duration, radius, basetime, randomaditionaltime ); -/# assert( isdefined( rumble ) ); -#/ precacherumble( rumble ); struct.rumble = rumble; level.vehicle_rumble[level.vttype] = struct; @@ -713,7 +711,9 @@ do_dead_cleanup_wait( test_name ) cleanup( test_name, cleanup_dvar_name, cleanup_func ) { - for ( keep_waiting = 1; keep_waiting; keep_waiting = 1 ) + keep_waiting = 1; + + while ( keep_waiting ) { cleanupenabled = !isdefined( cleanup_dvar_name ) || getdvarint( cleanup_dvar_name ) != 0; @@ -724,9 +724,11 @@ cleanup( test_name, cleanup_dvar_name, cleanup_func ) } keep_waiting = 0; - devblock( loc_395E ); +/# self cleanup_debug_print( "Cleanup disabled for " + test_name + " ( dvar = " + cleanup_dvar_name + " )" ); wait 5.0; + keep_waiting = 1; +#/ } } @@ -1506,9 +1508,7 @@ vehicle_disconnect_paths() follow_path( node ) { self endon( "death" ); -/# assert( isdefined( node ), "vehicle_path() called without a path" ); -#/ self notify( "newpath" ); if ( isdefined( node ) ) diff --git a/MP/Core/maps/mp/animscripts/dog_combat.gsc b/MP/Core/maps/mp/animscripts/dog_combat.gsc new file mode 100644 index 0000000..4c21caa --- /dev/null +++ b/MP/Core/maps/mp/animscripts/dog_combat.gsc @@ -0,0 +1,105 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\utility; + +main() +{ + debug_anim_print( "dog_combat::main() " ); + self endon( "killanimscript" ); + self setaimanimweights( 0, 0 ); +/# + if ( !debug_allow_combat() ) + { + combatidle(); + return; + } +#/ + if ( isdefined( level.hostmigrationtimer ) ) + { + combatidle(); + return; + } + + assert( isdefined( self.enemy ) ); + + if ( !isalive( self.enemy ) ) + { + combatidle(); + return; + } + + if ( isplayer( self.enemy ) ) + self meleebiteattackplayer( self.enemy ); +} + +combatidle() +{ + self set_orient_mode( "face enemy" ); + self animmode( "zonly_physics", 0 ); + idleanims = []; + idleanims[0] = "combat_attackidle"; + idleanims[1] = "combat_attackidle_bark"; + idleanims[2] = "combat_attackidle_growl"; + idleanim = random( idleanims ); + debug_anim_print( "dog_combat::combatIdle() - Setting " + idleanim ); + self setanimstate( idleanim ); + self maps\mp\animscripts\shared::donotetracks( "done" ); + debug_anim_print( "dog_combat::combatIdle() - " + idleanim + " notify done." ); +} + +meleebiteattackplayer( player ) +{ + self set_orient_mode( "face enemy" ); + self animmode( "gravity", 0 ); + self.safetochangescript = 0; + + if ( use_low_attack() ) + { + self animmode( "angle deltas", 0 ); + self setanimstate( "combat_attack_player_close_range" ); + wait 0.35; + + if ( isplayer( self.enemy ) && self.enemy getstance() == "prone" ) + self meleewithoffset( vectorscale( ( 0, 0, -1 ), 9.0 ) ); + else + self melee(); + + self maps\mp\animscripts\shared::donotetracksfortime( 1.2, "done" ); + self animmode( "gravity", 0 ); + } + else + { + attack_time = 1.2 + randomfloat( 0.4 ); + debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_run_attack" ); + self setanimstate( "combat_attack_run" ); + self maps\mp\animscripts\shared::donotetracksfortime( attack_time, "done", ::handlemeleebiteattacknotetracks, player ); + debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - combat_attack_run notify done." ); + } + + self.safetochangescript = 1; + self animmode( "none", 0 ); +} + +handlemeleebiteattacknotetracks( note, player ) +{ + if ( note == "dog_melee" ) + self melee( anglestoforward( self.angles ) ); +} + +use_low_attack() +{ + if ( isplayer( self.enemy ) ) + { + if ( self.enemy getstance() == "prone" ) + { + attack_height = self.origin[2] + 16; + + if ( self.enemy.origin[2] < attack_height ) + return true; + } + } + + return false; +} diff --git a/MP/Core/maps/mp/animscripts/dog_death.gsc b/MP/Core/maps/mp/animscripts/dog_death.gsc new file mode 100644 index 0000000..72c998c --- /dev/null +++ b/MP/Core/maps/mp/animscripts/dog_death.gsc @@ -0,0 +1,32 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\shared; + +main() +{ + debug_anim_print( "dog_death::main()" ); + self setaimanimweights( 0, 0 ); + self endon( "killanimscript" ); + + if ( isdefined( self.a.nodeath ) ) + { + assert( self.a.nodeath, "Nodeath needs to be set to true or undefined." ); + wait 3; + return; + } + + self unlink(); + + if ( isdefined( self.enemy ) && isdefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self ) + self.enemy.syncedmeleetarget = undefined; + + death_anim = "death_" + getanimdirection( self.damageyaw ); +/# + println( death_anim ); +#/ + self animmode( "gravity", 0 ); + debug_anim_print( "dog_death::main() - Setting " + death_anim ); + self setanimstate( death_anim ); + self maps\mp\animscripts\shared::donotetracks( "done" ); +} diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/dog_flashed.gsc b/MP/Core/maps/mp/animscripts/dog_flashed.gsc similarity index 100% rename from Multiplayer Core/common_mp/maps/mp/animscripts/dog_flashed.gsc rename to MP/Core/maps/mp/animscripts/dog_flashed.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/animscripts/dog_init.gsc b/MP/Core/maps/mp/animscripts/dog_init.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/animscripts/dog_init.gsc rename to MP/Core/maps/mp/animscripts/dog_init.gsc diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/dog_jump.gsc b/MP/Core/maps/mp/animscripts/dog_jump.gsc similarity index 100% rename from Multiplayer Core/common_mp/maps/mp/animscripts/dog_jump.gsc rename to MP/Core/maps/mp/animscripts/dog_jump.gsc diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/dog_move.gsc b/MP/Core/maps/mp/animscripts/dog_move.gsc similarity index 100% rename from Multiplayer Core/common_mp/maps/mp/animscripts/dog_move.gsc rename to MP/Core/maps/mp/animscripts/dog_move.gsc diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/dog_pain.gsc b/MP/Core/maps/mp/animscripts/dog_pain.gsc similarity index 100% rename from Multiplayer Core/common_mp/maps/mp/animscripts/dog_pain.gsc rename to MP/Core/maps/mp/animscripts/dog_pain.gsc diff --git a/MP/Core/maps/mp/animscripts/dog_stop.gsc b/MP/Core/maps/mp/animscripts/dog_stop.gsc new file mode 100644 index 0000000..389cfed --- /dev/null +++ b/MP/Core/maps/mp/animscripts/dog_stop.gsc @@ -0,0 +1,127 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\utility; + +main() +{ + debug_anim_print( "dog_stop::main()" ); + self endon( "killanimscript" ); + self setaimanimweights( 0, 0 ); + self thread lookattarget( "attackIdle" ); + + while ( true ) + { + if ( shouldattackidle() ) + { + self randomattackidle(); + maps\mp\animscripts\shared::donotetracks( "done" ); + } + else + { + self set_orient_mode( "face current" ); + debug_anim_print( "dog_stop::main() - Setting stop_idle" ); + self notify( "stop tracking" ); + self setaimanimweights( 0, 0 ); + self setanimstate( "stop_idle" ); + maps\mp\animscripts\shared::donotetracks( "done" ); + self thread lookattarget( "attackIdle" ); + } + + debug_anim_print( "dog_stop::main() - stop idle loop notify done." ); + } +} + +isfacingenemy( tolerancecosangle ) +{ + assert( isdefined( self.enemy ) ); + vectoenemy = self.enemy.origin - self.origin; + disttoenemy = length( vectoenemy ); + + if ( disttoenemy < 1 ) + return 1; + + forward = anglestoforward( self.angles ); + val1 = forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1]; + val2 = ( forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1] ) / disttoenemy; + return ( forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1] ) / disttoenemy > tolerancecosangle; +} + +randomattackidle() +{ + if ( isfacingenemy( -0.5 ) ) + self set_orient_mode( "face current" ); + else + self set_orient_mode( "face enemy" ); + + if ( should_growl() ) + { + debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl" ); + self setanimstate( "stop_attackidle_growl" ); + return; + } + + idlechance = 33; + barkchance = 66; + + if ( isdefined( self.mode ) ) + { + if ( self.mode == "growl" ) + { + idlechance = 15; + barkchance = 30; + } + else if ( self.mode == "bark" ) + { + idlechance = 15; + barkchance = 85; + } + } + + rand = randomint( 100 ); + + if ( rand < idlechance ) + { + debug_anim_print( "dog_stop::main() - Setting stop_attackidle" ); + self setanimstate( "stop_attackidle" ); + } + else if ( rand < barkchance ) + { + debug_anim_print( "dog_stop::main() - Setting stop_attackidle_bark " ); + self setanimstate( "stop_attackidle_bark" ); + } + else + { + debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl " ); + self setanimstate( "stop_attackidle_growl" ); + } +} + +shouldattackidle() +{ + return isdefined( self.enemy ) && isalive( self.enemy ) && distancesquared( self.origin, self.enemy.origin ) < 1000000; +} + +should_growl() +{ + if ( isdefined( self.script_growl ) ) + return 1; + + if ( !isalive( self.enemy ) ) + return 1; + + return !self cansee( self.enemy ); +} + +lookattarget( lookposeset ) +{ + self endon( "killanimscript" ); + self endon( "stop tracking" ); + debug_anim_print( "dog_stop::lookAtTarget() - Starting look at " + lookposeset ); + self.rightaimlimit = 90; + self.leftaimlimit = -90; + self.upaimlimit = 45; + self.downaimlimit = -45; + self maps\mp\animscripts\shared::setanimaimweight( 1, 0.2 ); + self maps\mp\animscripts\shared::trackloop(); +} diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/dog_turn.gsc b/MP/Core/maps/mp/animscripts/dog_turn.gsc similarity index 100% rename from Multiplayer Core/common_mp/maps/mp/animscripts/dog_turn.gsc rename to MP/Core/maps/mp/animscripts/dog_turn.gsc diff --git a/MP/Core/maps/mp/animscripts/shared.gsc b/MP/Core/maps/mp/animscripts/shared.gsc new file mode 100644 index 0000000..a625d05 --- /dev/null +++ b/MP/Core/maps/mp/animscripts/shared.gsc @@ -0,0 +1,279 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\animscripts\utility; +#include maps\mp\_utility; + +handledogsoundnotetracks( note ) +{ + if ( note == "sound_dogstep_run_default" ) + return true; + + prefix = getsubstr( note, 0, 5 ); + + if ( prefix != "sound" ) + return false; + + return true; +} + +growling() +{ + return isdefined( self.script_growl ); +} + +handlenotetrack( note, flagname, customfunction, var1 ) +{ +/# + if ( getdvarint( _hash_6EBEB982 ) ) + println( "dog notetrack: " + flagname + " " + note + " " + gettime() ); +#/ + if ( isai( self ) && self.type == "dog" ) + { + if ( handledogsoundnotetracks( note ) ) + return; + } + + switch ( note ) + { + case "undefined": + case "finish": + case "end": + return note; + default: + if ( isdefined( customfunction ) ) + { + if ( !isdefined( var1 ) ) + return [[ customfunction ]]( note ); + else + return [[ customfunction ]]( note, var1 ); + } + + break; + } +} + +donotetracks( flagname, customfunction, var1 ) +{ + for (;;) + { + self waittill( flagname, note ); + + if ( !isdefined( note ) ) + note = "undefined"; + + val = self handlenotetrack( note, flagname, customfunction, var1 ); + + if ( isdefined( val ) ) + return val; + } +} + +donotetracksforeverproc( notetracksfunc, flagname, killstring, customfunction, var1 ) +{ + if ( isdefined( killstring ) ) + self endon( killstring ); + + self endon( "killanimscript" ); + + for (;;) + { + time = gettime(); + returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 ); + timetaken = gettime() - time; + + if ( timetaken < 0.05 ) + { + time = gettime(); + returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 ); + timetaken = gettime() - time; + + if ( timetaken < 0.05 ) + { +/# + println( gettime() + " mapsmpanimscriptsshared::DoNoteTracksForever is trying to cause an infinite loop on anim " + flagname + ", returned " + returnednote + "." ); +#/ + wait( 0.05 - timetaken ); + } + } + } +} + +donotetracksforever( flagname, killstring, customfunction, var1 ) +{ + donotetracksforeverproc( ::donotetracks, flagname, killstring, customfunction, var1 ); +} + +donotetracksfortimeproc( donotetracksforeverfunc, time, flagname, customfunction, ent, var1 ) +{ + ent endon( "stop_notetracks" ); + [[ donotetracksforeverfunc ]]( flagname, undefined, customfunction, var1 ); +} + +donotetracksfortime( time, flagname, customfunction, var1 ) +{ + ent = spawnstruct(); + ent thread donotetracksfortimeendnotify( time ); + donotetracksfortimeproc( ::donotetracksforever, time, flagname, customfunction, ent, var1 ); +} + +donotetracksfortimeendnotify( time ) +{ + wait( time ); + self notify( "stop_notetracks" ); +} + +trackloop() +{ + players = get_players(); + deltachangeperframe = 5; + aimblendtime = 0.05; + prevyawdelta = 0; + prevpitchdelta = 0; + maxyawdeltachange = 5; + maxpitchdeltachange = 5; + pitchadd = 0; + yawadd = 0; + + if ( self.type == "dog" || self.type == "zombie" || self.type == "zombie_dog" ) + { + domaxanglecheck = 0; + self.shootent = self.enemy; + } + else + { + domaxanglecheck = 1; + + if ( self.a.script == "cover_crouch" && isdefined( self.a.covermode ) && self.a.covermode == "lean" ) + pitchadd = -1 * anim.covercrouchleanpitch; + + if ( ( self.a.script == "cover_left" || self.a.script == "cover_right" ) && isdefined( self.a.cornermode ) && self.a.cornermode == "lean" ) + yawadd = self.covernode.angles[1] - self.angles[1]; + } + + yawdelta = 0; + pitchdelta = 0; + firstframe = 1; + + for (;;) + { + incranimaimweight(); + selfshootatpos = ( self.origin[0], self.origin[1], self geteye()[2] ); + shootpos = undefined; + + if ( isdefined( self.enemy ) ) + shootpos = self.enemy getshootatpos(); + + if ( !isdefined( shootpos ) ) + { + yawdelta = 0; + pitchdelta = 0; + } + else + { + vectortoshootpos = shootpos - selfshootatpos; + anglestoshootpos = vectortoangles( vectortoshootpos ); + pitchdelta = 360 - anglestoshootpos[0]; + pitchdelta = angleclamp180( pitchdelta + pitchadd ); + yawdelta = self.angles[1] - anglestoshootpos[1]; + yawdelta = angleclamp180( yawdelta + yawadd ); + } + + if ( domaxanglecheck && ( abs( yawdelta ) > 60 || abs( pitchdelta ) > 60 ) ) + { + yawdelta = 0; + pitchdelta = 0; + } + else + { + if ( yawdelta > self.rightaimlimit ) + yawdelta = self.rightaimlimit; + else if ( yawdelta < self.leftaimlimit ) + yawdelta = self.leftaimlimit; + + if ( pitchdelta > self.upaimlimit ) + pitchdelta = self.upaimlimit; + else if ( pitchdelta < self.downaimlimit ) + pitchdelta = self.downaimlimit; + } + + if ( firstframe ) + firstframe = 0; + else + { + yawdeltachange = yawdelta - prevyawdelta; + + if ( abs( yawdeltachange ) > maxyawdeltachange ) + yawdelta = prevyawdelta + maxyawdeltachange * sign( yawdeltachange ); + + pitchdeltachange = pitchdelta - prevpitchdelta; + + if ( abs( pitchdeltachange ) > maxpitchdeltachange ) + pitchdelta = prevpitchdelta + maxpitchdeltachange * sign( pitchdeltachange ); + } + + prevyawdelta = yawdelta; + prevpitchdelta = pitchdelta; + updown = 0; + leftright = 0; + + if ( yawdelta > 0 ) + { + assert( yawdelta <= self.rightaimlimit ); + weight = yawdelta / self.rightaimlimit * self.a.aimweight; + leftright = weight; + } + else if ( yawdelta < 0 ) + { + assert( yawdelta >= self.leftaimlimit ); + weight = yawdelta / self.leftaimlimit * self.a.aimweight; + leftright = -1 * weight; + } + + if ( pitchdelta > 0 ) + { + assert( pitchdelta <= self.upaimlimit ); + weight = pitchdelta / self.upaimlimit * self.a.aimweight; + updown = weight; + } + else if ( pitchdelta < 0 ) + { + assert( pitchdelta >= self.downaimlimit ); + weight = pitchdelta / self.downaimlimit * self.a.aimweight; + updown = -1 * weight; + } + + self setaimanimweights( updown, leftright ); + wait 0.05; + } +} + +setanimaimweight( goalweight, goaltime ) +{ + if ( !isdefined( goaltime ) || goaltime <= 0 ) + { + self.a.aimweight = goalweight; + self.a.aimweight_start = goalweight; + self.a.aimweight_end = goalweight; + self.a.aimweight_transframes = 0; + } + else + { + self.a.aimweight = goalweight; + self.a.aimweight_start = self.a.aimweight; + self.a.aimweight_end = goalweight; + self.a.aimweight_transframes = int( goaltime * 20 ); + } + + self.a.aimweight_t = 0; +} + +incranimaimweight() +{ + if ( self.a.aimweight_t < self.a.aimweight_transframes ) + { + self.a.aimweight_t++; + t = 1.0 * self.a.aimweight_t / self.a.aimweight_transframes; + self.a.aimweight = self.a.aimweight_start * ( 1 - t ) + self.a.aimweight_end * t; + } +} diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/traverse/jump_down_40.gsc b/MP/Core/maps/mp/animscripts/traverse/jump_down_40.gsc similarity index 100% rename from Multiplayer Core/common_mp/maps/mp/animscripts/traverse/jump_down_40.gsc rename to MP/Core/maps/mp/animscripts/traverse/jump_down_40.gsc diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/traverse/jump_down_56.gsc b/MP/Core/maps/mp/animscripts/traverse/jump_down_56.gsc similarity index 100% rename from Multiplayer Core/common_mp/maps/mp/animscripts/traverse/jump_down_56.gsc rename to MP/Core/maps/mp/animscripts/traverse/jump_down_56.gsc diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/traverse/jump_down_96.gsc b/MP/Core/maps/mp/animscripts/traverse/jump_down_96.gsc similarity index 100% rename from Multiplayer Core/common_mp/maps/mp/animscripts/traverse/jump_down_96.gsc rename to MP/Core/maps/mp/animscripts/traverse/jump_down_96.gsc diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/traverse/mantle_on_40.gsc b/MP/Core/maps/mp/animscripts/traverse/mantle_on_40.gsc similarity index 100% rename from Multiplayer Core/common_mp/maps/mp/animscripts/traverse/mantle_on_40.gsc rename to MP/Core/maps/mp/animscripts/traverse/mantle_on_40.gsc diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/traverse/mantle_on_56.gsc b/MP/Core/maps/mp/animscripts/traverse/mantle_on_56.gsc similarity index 100% rename from Multiplayer Core/common_mp/maps/mp/animscripts/traverse/mantle_on_56.gsc rename to MP/Core/maps/mp/animscripts/traverse/mantle_on_56.gsc diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/traverse/mantle_on_80.gsc b/MP/Core/maps/mp/animscripts/traverse/mantle_on_80.gsc similarity index 100% rename from Multiplayer Core/common_mp/maps/mp/animscripts/traverse/mantle_on_80.gsc rename to MP/Core/maps/mp/animscripts/traverse/mantle_on_80.gsc diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/traverse/mantle_on_96.gsc b/MP/Core/maps/mp/animscripts/traverse/mantle_on_96.gsc similarity index 100% rename from Multiplayer Core/common_mp/maps/mp/animscripts/traverse/mantle_on_96.gsc rename to MP/Core/maps/mp/animscripts/traverse/mantle_on_96.gsc diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/traverse/mantle_over_40.gsc b/MP/Core/maps/mp/animscripts/traverse/mantle_over_40.gsc similarity index 100% rename from Multiplayer Core/common_mp/maps/mp/animscripts/traverse/mantle_over_40.gsc rename to MP/Core/maps/mp/animscripts/traverse/mantle_over_40.gsc diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/traverse/mantle_window_36.gsc b/MP/Core/maps/mp/animscripts/traverse/mantle_window_36.gsc similarity index 100% rename from Multiplayer Core/common_mp/maps/mp/animscripts/traverse/mantle_window_36.gsc rename to MP/Core/maps/mp/animscripts/traverse/mantle_window_36.gsc diff --git a/MP/Core/maps/mp/animscripts/traverse/shared.gsc b/MP/Core/maps/mp/animscripts/traverse/shared.gsc new file mode 100644 index 0000000..aab758b --- /dev/null +++ b/MP/Core/maps/mp/animscripts/traverse/shared.gsc @@ -0,0 +1,195 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\utility; +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\animscripts\shared; + +init_traverse() +{ + point = getent( self.target, "targetname" ); + + if ( isdefined( point ) ) + { + self.traverse_height = point.origin[2]; + point delete(); + } + else + { + point = getstruct( self.target, "targetname" ); + + if ( isdefined( point ) ) + self.traverse_height = point.origin[2]; + } +} + +teleportthread( verticaloffset ) +{ + self endon( "killanimscript" ); + self notify( "endTeleportThread" ); + self endon( "endTeleportThread" ); + reps = 5; + offset = ( 0, 0, verticaloffset / reps ); + + for ( i = 0; i < reps; i++ ) + { + self teleport( self.origin + offset ); + wait 0.05; + } +} + +teleportthreadex( verticaloffset, delay, frames ) +{ + self endon( "killanimscript" ); + self notify( "endTeleportThread" ); + self endon( "endTeleportThread" ); + + if ( verticaloffset == 0 ) + return; + + wait( delay ); + amount = verticaloffset / frames; + + if ( amount > 10.0 ) + amount = 10.0; + else if ( amount < -10.0 ) + amount = -10.0; + + offset = ( 0, 0, amount ); + + for ( i = 0; i < frames; i++ ) + { + self teleport( self.origin + offset ); + wait 0.05; + } +} + +dog_wall_and_window_hop( traversename, height ) +{ + self endon( "killanimscript" ); + self traversemode( "nogravity" ); + self traversemode( "noclip" ); + startnode = self getnegotiationstartnode(); + assert( isdefined( startnode ) ); + self orientmode( "face angle", startnode.angles[1] ); + + if ( isdefined( startnode.traverse_height ) ) + { + realheight = startnode.traverse_height - startnode.origin[2]; + self thread teleportthread( realheight - height ); + } + else if ( height != 36.0 ) + self thread teleportthreadex( height - 36.0, 0.2, 7 ); + + debug_anim_print( "traverse::dog_wall_and_window_hop() - Setting " + traversename ); + self setanimstate( traversename ); + maps\mp\animscripts\shared::donotetracksfortime( 1.0, "done" ); + debug_anim_print( "traverse::dog_wall_and_window_hop() - " + traversename ); + self.traversecomplete = 1; +} + +dog_jump_down( height, frames, time ) +{ + self endon( "killanimscript" ); + self traversemode( "noclip" ); + + if ( !isdefined( time ) ) + time = 0.3; + + startnode = self getnegotiationstartnode(); + assert( isdefined( startnode ) ); + self orientmode( "face angle", startnode.angles[1] ); + + if ( isdefined( startnode.traverse_height ) ) + { + realheight = startnode.traverse_height - startnode.origin[2]; + self thread teleportthread( realheight - height ); + } + else if ( height != 40.0 ) + self thread teleportthreadex( height - 40.0, 0.1, frames ); + + debug_anim_print( "traverse::dog_jump_down() - Setting traverse_jump_down_40" ); + self setanimstate( "traverse_jump_down_40" ); + maps\mp\animscripts\shared::donotetracksfortime( time, "done" ); + debug_anim_print( "traverse::dog_jump_down() - traverse_jump_down_40 " ); + self traversemode( "gravity" ); + self.traversecomplete = 1; +} + +dog_jump_down_far( height, frames, time ) +{ + self endon( "killanimscript" ); + self traversemode( "noclip" ); + + if ( !isdefined( time ) ) + time = 0.3; + + startnode = self getnegotiationstartnode(); + assert( isdefined( startnode ) ); + self orientmode( "face angle", startnode.angles[1] ); + + if ( isdefined( startnode.traverse_height ) ) + { + realheight = startnode.traverse_height - startnode.origin[2]; + self thread teleportthread( realheight - height ); + } + else if ( height != 80.0 ) + self thread teleportthreadex( 80.0 - height, 0.1, frames ); + + debug_anim_print( "traverse::dog_jump_down() - Setting traverse_jump_down_80" ); + self setanimstate( "traverse_jump_down_80" ); + maps\mp\animscripts\shared::donotetracksfortime( time, "done" ); + debug_anim_print( "traverse::dog_jump_down() - traverse_jump_down_80 " ); + self traversemode( "gravity" ); + self.traversecomplete = 1; +} + +dog_jump_up( height, frames ) +{ + self endon( "killanimscript" ); + self traversemode( "noclip" ); + startnode = self getnegotiationstartnode(); + assert( isdefined( startnode ) ); + self orientmode( "face angle", startnode.angles[1] ); + + if ( isdefined( startnode.traverse_height ) ) + { + realheight = startnode.traverse_height - startnode.origin[2]; + self thread teleportthread( realheight - height ); + } + else if ( height != 40.0 ) + self thread teleportthreadex( height - 40.0, 0.2, frames ); + + debug_anim_print( "traverse::dog_jump_up() - Setting traverse_jump_up_40" ); + self setanimstate( "traverse_jump_up_40" ); + maps\mp\animscripts\shared::donotetracksfortime( 0.5, "done" ); + debug_anim_print( "traverse::dog_jump_up() - traverse_jump_up_40 " ); + self traversemode( "gravity" ); + self.traversecomplete = 1; +} + +dog_jump_up_high( height, frames ) +{ + assert( self.type == "dog", "Only dogs can do this traverse currently." ); + self endon( "killanimscript" ); + self traversemode( "nogravity" ); + self traversemode( "noclip" ); + startnode = self getnegotiationstartnode(); + assert( isdefined( startnode ) ); + self orientmode( "face angle", startnode.angles[1] ); + + if ( isdefined( startnode.traverse_height ) ) + { + realheight = startnode.traverse_height - startnode.origin[2]; + self thread teleportthreadex( height - 80, 0.2, frames ); + } + else if ( height != 80.0 ) + self thread teleportthreadex( height - 80.0, 0.2, frames ); + + debug_anim_print( "traverse::dog_jump_up_80() - Setting traverse_jump_up_80" ); + self setanimstate( "traverse_jump_up_80" ); + maps\mp\animscripts\shared::donotetracksfortime( 0.6, "done" ); + debug_anim_print( "traverse::dog_jump_up_80() - traverse_jump_up_80 " ); + self traversemode( "gravity" ); + self.traversecomplete = 1; +} diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/traverse/through_hole_42.gsc b/MP/Core/maps/mp/animscripts/traverse/through_hole_42.gsc similarity index 99% rename from Multiplayer Core/common_mp/maps/mp/animscripts/traverse/through_hole_42.gsc rename to MP/Core/maps/mp/animscripts/traverse/through_hole_42.gsc index 3877e6f..670d23d 100644 --- a/Multiplayer Core/common_mp/maps/mp/animscripts/traverse/through_hole_42.gsc +++ b/MP/Core/maps/mp/animscripts/traverse/through_hole_42.gsc @@ -10,9 +10,7 @@ main() self traversemode( "nogravity" ); self traversemode( "noclip" ); startnode = self getnegotiationstartnode(); -/# assert( isdefined( startnode ) ); -#/ self orientmode( "face angle", startnode.angles[1] ); if ( isdefined( startnode.traverse_height ) ) diff --git a/MP/Core/maps/mp/animscripts/utility.gsc b/MP/Core/maps/mp/animscripts/utility.gsc new file mode 100644 index 0000000..2ad6122 --- /dev/null +++ b/MP/Core/maps/mp/animscripts/utility.gsc @@ -0,0 +1,135 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +anim_get_dvar_int( dvar, def ) +{ + return int( anim_get_dvar( dvar, def ) ); +} + +anim_get_dvar( dvar, def ) +{ + if ( getdvar( dvar ) != "" ) + return getdvarfloat( dvar ); + else + { + setdvar( dvar, def ); + return def; + } +} + +set_orient_mode( mode, val1 ) +{ +/# + if ( level.dog_debug_orient == self getentnum() ) + { + if ( isdefined( val1 ) ) + println( "DOG: Setting orient mode: " + mode + " " + val1 + " " + gettime() ); + else + println( "DOG: Setting orient mode: " + mode + " " + gettime() ); + } +#/ + if ( isdefined( val1 ) ) + self orientmode( mode, val1 ); + else + self orientmode( mode ); +} + +debug_anim_print( text ) +{ +/# + if ( level.dog_debug_anims ) + println( text + " " + gettime() ); + + if ( level.dog_debug_anims_ent == self getentnum() ) + println( text + " " + gettime() ); +#/ +} + +debug_turn_print( text, line ) +{ +/# + if ( level.dog_debug_turns == self getentnum() ) + { + duration = 200; + currentyawcolor = ( 1, 1, 1 ); + lookaheadyawcolor = ( 1, 0, 0 ); + desiredyawcolor = ( 1, 1, 0 ); + currentyaw = angleclamp180( self.angles[1] ); + desiredyaw = angleclamp180( self.desiredangle ); + lookaheaddir = self.lookaheaddir; + lookaheadangles = vectortoangles( lookaheaddir ); + lookaheadyaw = angleclamp180( lookaheadangles[1] ); + println( text + " " + gettime() + " cur: " + currentyaw + " look: " + lookaheadyaw + " desired: " + desiredyaw ); + } +#/ +} + +debug_allow_movement() +{ +/# + return anim_get_dvar_int( "debug_dog_allow_movement", "1" ); +#/ + return 1; +} + +debug_allow_combat() +{ +/# + return anim_get_dvar_int( "debug_dog_allow_combat", "1" ); +#/ + return 1; +} + +current_yaw_line_debug( duration ) +{ +/# + currentyawcolor = []; + currentyawcolor[0] = ( 0, 0, 1 ); + currentyawcolor[1] = ( 1, 0, 1 ); + current_color_index = 0; + start_time = gettime(); + + if ( !isdefined( level.lastdebugheight ) ) + level.lastdebugheight = 15; + + while ( gettime() - start_time < 1000 ) + { + pos1 = ( self.origin[0], self.origin[1], self.origin[2] + level.lastdebugheight ); + pos2 = pos1 + vectorscale( anglestoforward( self.angles ), ( current_color_index + 1 ) * 10 ); + line( pos1, pos2, currentyawcolor[current_color_index], 0.3, 1, duration ); + current_color_index = ( current_color_index + 1 ) % currentyawcolor.size; + wait 0.05; + } + + if ( level.lastdebugheight == 15 ) + level.lastdebugheight = 30; + else + level.lastdebugheight = 15; +#/ +} + +getanimdirection( damageyaw ) +{ + if ( damageyaw > 135 || damageyaw <= -135 ) + return "front"; + else if ( damageyaw > 45 && damageyaw <= 135 ) + return "right"; + else if ( damageyaw > -45 && damageyaw <= 45 ) + return "back"; + else + return "left"; + + return "front"; +} + +setfootstepeffect( name, fx ) +{ + assert( isdefined( name ), "Need to define the footstep surface type." ); + assert( isdefined( fx ), "Need to define the mud footstep effect." ); + + if ( !isdefined( anim.optionalstepeffects ) ) + anim.optionalstepeffects = []; + + anim.optionalstepeffects[anim.optionalstepeffects.size] = name; + level._effect["step_" + name] = fx; +} diff --git a/Multiplayer Core/patch_mp/maps/mp/bots/_bot.gsc b/MP/Core/maps/mp/bots/_bot.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/bots/_bot.gsc rename to MP/Core/maps/mp/bots/_bot.gsc index 2b08813..c721dd1 100644 --- a/Multiplayer Core/patch_mp/maps/mp/bots/_bot.gsc +++ b/MP/Core/maps/mp/bots/_bot.gsc @@ -229,17 +229,11 @@ bot_count_enemy_bots( friend_team ) bot_choose_comp_stomp_team() { host = gethostplayerforbots(); -/# assert( isdefined( host ) ); -#/ teamkeys = getarraykeys( level.teams ); -/# assert( teamkeys.size == 2 ); -#/ enemy_team = host.pers["team"]; -/# assert( isdefined( enemy_team ) && enemy_team != "spectator" ); -#/ return getotherteam( enemy_team ); } @@ -438,9 +432,7 @@ bot_local_think() { wait 5; host = gethostplayerforbots(); -/# assert( isdefined( host ) ); -#/ host_team = host.team; if ( !isdefined( host_team ) || host_team == "spectator" ) @@ -562,10 +554,8 @@ bot_choose_class() { self notify( "menuresponse", "changeclass", bot_classes[i] ); return; - continue; } - - if ( sidearm == "smaw_mp" ) + else if ( sidearm == "smaw_mp" ) { bot_classes[bot_classes.size] = bot_classes[i]; bot_classes[bot_classes.size] = bot_classes[i]; @@ -1008,9 +998,7 @@ bot_update_crouch() if ( dist > 0 ) { dir = self getlookaheaddir(); -/# assert( isdefined( dir ) ); -#/ dir = vectorscale( dir, dist ); start = self.origin + vectorscale( ( 0, 0, 1 ), 70.0 ); end = start + dir; @@ -1068,11 +1056,8 @@ bot_has_radar() return isdefined( self.hasspyplane ) && self.hasspyplane || isdefined( self.hassatellite ) && self.hassatellite; } -bot_get_enemies( on_radar ) +bot_get_enemies( on_radar = 0 ) { - if ( !isdefined( on_radar ) ) - on_radar = 0; - enemies = self getenemies( 1 ); /# for ( i = 0; i < enemies.size; i++ ) diff --git a/Multiplayer Core/patch_mp/maps/mp/bots/_bot_combat.gsc b/MP/Core/maps/mp/bots/_bot_combat.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/bots/_bot_combat.gsc rename to MP/Core/maps/mp/bots/_bot_combat.gsc index b21c171..a51ed19 100644 --- a/Multiplayer Core/patch_mp/maps/mp/bots/_bot_combat.gsc +++ b/MP/Core/maps/mp/bots/_bot_combat.gsc @@ -608,11 +608,8 @@ threat_is_ai_tank() return isdefined( ent ) && isdefined( ent.targetname ) && ent.targetname == "talon"; } -threat_is_qrdrone( ent ) +threat_is_qrdrone( ent = self.bot.threat.entity ) { - if ( !isdefined( ent ) ) - ent = self.bot.threat.entity; - return isdefined( ent ) && isdefined( ent.helitype ) && ent.helitype == "qrdrone"; } diff --git a/Multiplayer Core/patch_mp/maps/mp/bots/_bot_conf.gsc b/MP/Core/maps/mp/bots/_bot_conf.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/bots/_bot_conf.gsc rename to MP/Core/maps/mp/bots/_bot_conf.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/bots/_bot_ctf.gsc b/MP/Core/maps/mp/bots/_bot_ctf.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/bots/_bot_ctf.gsc rename to MP/Core/maps/mp/bots/_bot_ctf.gsc index 19c1443..81c78f7 100644 --- a/Multiplayer Core/patch_mp/maps/mp/bots/_bot_ctf.gsc +++ b/MP/Core/maps/mp/bots/_bot_ctf.gsc @@ -316,9 +316,8 @@ bot_patrol_flag() return; nodes = getvisiblenodes( nearest ); -/# assert( nodes.size ); -#/ + for ( i = randomint( nodes.size ); i < nodes.size; i++ ) { if ( self maps\mp\bots\_bot::bot_friend_goal_in_radius( "ctf_flag_patrol", nodes[i].origin, 256 ) == 0 ) @@ -334,9 +333,7 @@ base_nearest_node( flag ) { home = flag ctf_flag_get_home(); nodes = getnodesinradiussorted( home, 256, 0 ); -/# assert( nodes.size ); -#/ return nodes[0]; } diff --git a/Multiplayer Core/patch_mp/maps/mp/bots/_bot_dem.gsc b/MP/Core/maps/mp/bots/_bot_dem.gsc similarity index 98% rename from Multiplayer Core/patch_mp/maps/mp/bots/_bot_dem.gsc rename to MP/Core/maps/mp/bots/_bot_dem.gsc index 7f425b0..21c281e 100644 --- a/Multiplayer Core/patch_mp/maps/mp/bots/_bot_dem.gsc +++ b/MP/Core/maps/mp/bots/_bot_dem.gsc @@ -40,10 +40,8 @@ bot_dem_attack_think() { self.goal_flag = zone; break; - continue; } - - if ( randomint( 100 ) < 50 ) + else if ( randomint( 100 ) < 50 ) { self.goal_flag = zone; break; @@ -85,10 +83,8 @@ bot_dem_defend_think() { self.goal_flag = zone; break; - continue; } - - if ( randomint( 100 ) < 50 ) + else if ( randomint( 100 ) < 50 ) { self.goal_flag = zone; break; diff --git a/Multiplayer Core/patch_mp/maps/mp/bots/_bot_dom.gsc b/MP/Core/maps/mp/bots/_bot_dom.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/bots/_bot_dom.gsc rename to MP/Core/maps/mp/bots/_bot_dom.gsc index ef182c5..ff4d230 100644 --- a/Multiplayer Core/patch_mp/maps/mp/bots/_bot_dom.gsc +++ b/MP/Core/maps/mp/bots/_bot_dom.gsc @@ -59,9 +59,8 @@ bot_move_to_flag( flag ) nodes = getnodesinradius( flag.origin, flag.radius, 0, 32 ); else nodes = getnodesinradius( flag.origin, flag.radius, 0 ); -/# + assert( nodes.size ); -#/ node = random( nodes ); self addgoal( node, 24, 3, "dom_flag" ); } @@ -239,9 +238,8 @@ bot_capture_flag( flag ) dom_is_game_start() { -/# assert( isdefined( level.flags ) ); -#/ + foreach ( flag in level.flags ) { if ( flag getflagteam() != "neutral" ) @@ -259,9 +257,7 @@ dom_get_closest_flag() dom_get_weighted_flag( owner ) { -/# assert( isdefined( level.flags ) ); -#/ best = undefined; distsq = 9999999; @@ -284,9 +280,7 @@ dom_get_weighted_flag( owner ) dom_get_weighted_enemy_flag( team ) { -/# assert( isdefined( level.flags ) ); -#/ best = undefined; distsq = 9999999; @@ -331,9 +325,7 @@ dom_has_two_flags( team ) dom_get_weighted_contested_flag( team ) { -/# assert( isdefined( level.flags ) ); -#/ best = undefined; distsq = 9999999; @@ -356,9 +348,7 @@ dom_get_weighted_contested_flag( team ) dom_get_random_flag( owner ) { -/# assert( isdefined( level.flags ) ); -#/ flagindex = randomintrange( 0, level.flags.size ); if ( !isdefined( owner ) ) diff --git a/Multiplayer Core/patch_mp/maps/mp/bots/_bot_hack.gsc b/MP/Core/maps/mp/bots/_bot_hack.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/bots/_bot_hack.gsc rename to MP/Core/maps/mp/bots/_bot_hack.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/bots/_bot_hq.gsc b/MP/Core/maps/mp/bots/_bot_hq.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/bots/_bot_hq.gsc rename to MP/Core/maps/mp/bots/_bot_hq.gsc index 7409292..610638f 100644 --- a/Multiplayer Core/patch_mp/maps/mp/bots/_bot_hq.gsc +++ b/MP/Core/maps/mp/bots/_bot_hq.gsc @@ -151,9 +151,8 @@ bot_patrol_hq() } nodes = getvisiblenodes( nearest ); -/# assert( nodes.size ); -#/ + for ( i = randomint( nodes.size ); i < nodes.size; i++ ) { if ( self maps\mp\bots\_bot::bot_friend_goal_in_radius( "hq_radio", nodes[i].origin, 128 ) == 0 ) diff --git a/Multiplayer Core/patch_mp/maps/mp/bots/_bot_koth.gsc b/MP/Core/maps/mp/bots/_bot_koth.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/bots/_bot_koth.gsc rename to MP/Core/maps/mp/bots/_bot_koth.gsc index d97c1b5..8ea27b0 100644 --- a/Multiplayer Core/patch_mp/maps/mp/bots/_bot_koth.gsc +++ b/MP/Core/maps/mp/bots/_bot_koth.gsc @@ -283,8 +283,6 @@ bot_hill_tactical_insertion() hill_nearest_node() { nodes = getnodesinradiussorted( level.zone.gameobject.curorigin, 256, 0 ); -/# assert( nodes.size ); -#/ return nodes[0]; } diff --git a/Multiplayer Core/patch_mp/maps/mp/bots/_bot_loadout.gsc b/MP/Core/maps/mp/bots/_bot_loadout.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/bots/_bot_loadout.gsc rename to MP/Core/maps/mp/bots/_bot_loadout.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/bots/_bot_sd.gsc b/MP/Core/maps/mp/bots/_bot_sd.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/bots/_bot_sd.gsc rename to MP/Core/maps/mp/bots/_bot_sd.gsc index c07e50a..68559c7 100644 --- a/Multiplayer Core/patch_mp/maps/mp/bots/_bot_sd.gsc +++ b/MP/Core/maps/mp/bots/_bot_sd.gsc @@ -14,9 +14,7 @@ bot_sd_think() if ( !isdefined( zone.nearest_node ) ) { nodes = getnodesinradiussorted( zone.trigger.origin, 256, 0 ); -/# assert( nodes.size ); -#/ zone.nearest_node = nodes[0]; } } diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_battlechatter_mp.gsc b/MP/Core/maps/mp/gametypes/_battlechatter_mp.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/_battlechatter_mp.gsc rename to MP/Core/maps/mp/gametypes/_battlechatter_mp.gsc index 40b4831..0d142ec 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_battlechatter_mp.gsc +++ b/MP/Core/maps/mp/gametypes/_battlechatter_mp.gsc @@ -1,5 +1,10 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\killstreaks\_killstreaks; init() { @@ -8,12 +13,8 @@ init() foreach ( team in level.teams ) { -/# assert( isdefined( level.teamprefix[team] ) ); -#/ -/# assert( isdefined( level.teamprefix[team] ) ); -#/ level.isteamspeaking[team] = 0; level.speakers[team] = []; } diff --git a/MP/Core/maps/mp/gametypes/_callbacksetup.gsc b/MP/Core/maps/mp/gametypes/_callbacksetup.gsc new file mode 100644 index 0000000..e517f08 --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_callbacksetup.gsc @@ -0,0 +1,210 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_audio; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_globallogic_player; +#include maps\mp\gametypes\_globallogic_actor; +#include maps\mp\gametypes\_globallogic_vehicle; +#include maps\mp\gametypes\_hostmigration; + +codecallback_startgametype() +{ + if ( !isdefined( level.gametypestarted ) || !level.gametypestarted ) + { + [[ level.callbackstartgametype ]](); + level.gametypestarted = 1; + } +} + +codecallback_finalizeinitialization() +{ + maps\mp\_utility::callback( "on_finalize_initialization" ); +} + +codecallback_playerconnect() +{ + self endon( "disconnect" ); + self thread maps\mp\_audio::monitor_player_sprint(); + [[ level.callbackplayerconnect ]](); +} + +codecallback_playerdisconnect() +{ + self notify( "disconnect" ); + level notify( "disconnect", self ); + client_num = self getentitynumber(); + [[ level.callbackplayerdisconnect ]](); +} + +codecallback_hostmigration() +{ +/# + println( "****CodeCallback_HostMigration****" ); +#/ + [[ level.callbackhostmigration ]](); +} + +codecallback_hostmigrationsave() +{ +/# + println( "****CodeCallback_HostMigrationSave****" ); +#/ + [[ level.callbackhostmigrationsave ]](); +} + +codecallback_playermigrated() +{ +/# + println( "****CodeCallback_PlayerMigrated****" ); +#/ + [[ level.callbackplayermigrated ]](); +} + +codecallback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) +{ + self endon( "disconnect" ); + [[ level.callbackplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ); +} + +codecallback_playerkilled( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ) +{ + self endon( "disconnect" ); + [[ level.callbackplayerkilled ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ); +} + +codecallback_playerlaststand( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ) +{ + self endon( "disconnect" ); + [[ level.callbackplayerlaststand ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ); +} + +codecallback_playermelee( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit ) +{ + self endon( "disconnect" ); + [[ level.callbackplayermelee ]]( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit ); +} + +codecallback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) +{ + [[ level.callbackactordamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ); +} + +codecallback_actorkilled( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset ) +{ + [[ level.callbackactorkilled ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset ); +} + +codecallback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, damagefromunderneath, modelindex, partname ) +{ + [[ level.callbackvehicledamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, damagefromunderneath, modelindex, partname ); +} + +codecallback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, timeoffset ) +{ + [[ level.callbackvehicleradiusdamage ]]( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, timeoffset ); +} + +codecallback_faceeventnotify( notify_msg, ent ) +{ + if ( isdefined( ent ) && isdefined( ent.do_face_anims ) && ent.do_face_anims ) + { + if ( isdefined( level.face_event_handler ) && isdefined( level.face_event_handler.events[notify_msg] ) ) + ent sendfaceevent( level.face_event_handler.events[notify_msg] ); + } +} + +codecallback_menuresponse( action, arg ) +{ + if ( !isdefined( level.menuresponsequeue ) ) + { + level.menuresponsequeue = []; + level thread menuresponsequeuepump(); + } + + index = level.menuresponsequeue.size; + level.menuresponsequeue[index] = spawnstruct(); + level.menuresponsequeue[index].action = action; + level.menuresponsequeue[index].arg = arg; + level.menuresponsequeue[index].ent = self; + level notify( "menuresponse_queue" ); +} + +menuresponsequeuepump() +{ + while ( true ) + { + level waittill( "menuresponse_queue" ); + + do + { + level.menuresponsequeue[0].ent notify( "menuresponse", level.menuresponsequeue[0].action, level.menuresponsequeue[0].arg ); + arrayremoveindex( level.menuresponsequeue, 0, 0 ); + wait 0.05; + } + while ( level.menuresponsequeue.size > 0 ); + } +} + +setupcallbacks() +{ + setdefaultcallbacks(); + level.idflags_radius = 1; + level.idflags_no_armor = 2; + level.idflags_no_knockback = 4; + level.idflags_penetration = 8; + level.idflags_destructible_entity = 16; + level.idflags_shield_explosive_impact = 32; + level.idflags_shield_explosive_impact_huge = 64; + level.idflags_shield_explosive_splash = 128; + level.idflags_no_team_protection = 256; + level.idflags_no_protection = 512; + level.idflags_passthru = 1024; +} + +setdefaultcallbacks() +{ + level.callbackstartgametype = maps\mp\gametypes\_globallogic::callback_startgametype; + level.callbackplayerconnect = maps\mp\gametypes\_globallogic_player::callback_playerconnect; + level.callbackplayerdisconnect = maps\mp\gametypes\_globallogic_player::callback_playerdisconnect; + level.callbackplayerdamage = maps\mp\gametypes\_globallogic_player::callback_playerdamage; + level.callbackplayerkilled = maps\mp\gametypes\_globallogic_player::callback_playerkilled; + level.callbackplayermelee = maps\mp\gametypes\_globallogic_player::callback_playermelee; + level.callbackplayerlaststand = maps\mp\gametypes\_globallogic_player::callback_playerlaststand; + level.callbackactordamage = maps\mp\gametypes\_globallogic_actor::callback_actordamage; + level.callbackactorkilled = maps\mp\gametypes\_globallogic_actor::callback_actorkilled; + level.callbackvehicledamage = maps\mp\gametypes\_globallogic_vehicle::callback_vehicledamage; + level.callbackvehicleradiusdamage = maps\mp\gametypes\_globallogic_vehicle::callback_vehicleradiusdamage; + level.callbackplayermigrated = maps\mp\gametypes\_globallogic_player::callback_playermigrated; + level.callbackhostmigration = maps\mp\gametypes\_hostmigration::callback_hostmigration; + level.callbackhostmigrationsave = maps\mp\gametypes\_hostmigration::callback_hostmigrationsave; +} + +abortlevel() +{ +/# + println( "ERROR: Aborting level - gametype is not supported" ); +#/ + level.callbackstartgametype = ::callbackvoid; + level.callbackplayerconnect = ::callbackvoid; + level.callbackplayerdisconnect = ::callbackvoid; + level.callbackplayerdamage = ::callbackvoid; + level.callbackplayerkilled = ::callbackvoid; + level.callbackplayerlaststand = ::callbackvoid; + level.callbackplayermelee = ::callbackvoid; + level.callbackactordamage = ::callbackvoid; + level.callbackactorkilled = ::callbackvoid; + level.callbackvehicledamage = ::callbackvoid; + setdvar( "g_gametype", "dm" ); + exitlevel( 0 ); +} + +codecallback_glasssmash( pos, dir ) +{ + level notify( "glass_smash", pos, dir ); +} + +callbackvoid() +{ + +} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_class.gsc b/MP/Core/maps/mp/gametypes/_class.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/_class.gsc rename to MP/Core/maps/mp/gametypes/_class.gsc index 66252a7..57754d3 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_class.gsc +++ b/MP/Core/maps/mp/gametypes/_class.gsc @@ -1,5 +1,14 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_tweakables; +#include maps\mp\killstreaks\_killstreaks; +#include maps\mp\killstreaks\_killstreak_weapons; +#include maps\mp\gametypes\_class; +#include maps\mp\teams\_teams; +#include maps\mp\gametypes\_dev; +#include maps\mp\_challenges; init() { @@ -199,11 +208,7 @@ weapon_class_register( weapon, weapon_type ) else if ( weapon_type == "weapon_rifle" ) level.inventory_array[weapon] = 1; else - { -/# assert( 0, "Weapon group info is missing from statsTable for: " + weapon_type ); -#/ - } } cac_init() @@ -296,9 +301,7 @@ cac_init() getclasschoice( response ) { -/# assert( isdefined( level.classmap[response] ) ); -#/ return level.classmap[response]; } @@ -359,9 +362,7 @@ givekillstreaks( classnum ) if ( isdefined( killstreakindex ) && killstreakindex > 0 ) { -/# assert( isdefined( level.tbl_killstreakdata[killstreakindex] ), "KillStreak #:" + killstreakindex + "'s data is undefined" ); -#/ if ( isdefined( level.tbl_killstreakdata[killstreakindex] ) ) { @@ -575,9 +576,7 @@ giveloadout( team, class ) else { pixbeginevent( "default class" ); -/# assert( isdefined( self.pers["class"] ), "Player during spawn and loadout got no class!" ); -#/ class_num = level.classtoclassnum[class]; self.class_num = class_num; pixendevent(); @@ -667,7 +666,6 @@ giveloadout( team, class ) /# println( "^5GiveWeapon( " + weapon + " ) -- weapon" ); #/ - if ( primaryweapon != "" && primaryweapon != "weapon_null_mp" && primaryweapon != "weapon_null" ) { if ( self hasperk( "specialty_extraammo" ) ) @@ -693,9 +691,7 @@ giveloadout( team, class ) spawnweapon = self.spawnweapon; self.pers["changed_class"] = 0; -/# assert( spawnweapon != "" ); -#/ self.spawnweapon = spawnweapon; self.pers["spawnWeapon"] = self.spawnweapon; self setspawnweapon( spawnweapon ); @@ -734,7 +730,6 @@ giveloadout( team, class ) else grenadetypeprimary = level.weapons["flash"]; } - /# println( "^5GiveWeapon( " + grenadetypeprimary + " ) -- grenadeTypePrimary" ); #/ @@ -817,9 +812,7 @@ setweaponammooverall( weaponname, amount ) { self setweaponammoclip( weaponname, amount ); diff = amount - self getweaponammoclip( weaponname ); -/# assert( diff >= 0 ); -#/ self setweaponammostock( weaponname, diff ); } } @@ -901,7 +894,6 @@ register_perks() self setperk( perk ); } - /# maps\mp\gametypes\_dev::giveextraperks(); #/ @@ -952,7 +944,6 @@ cac_modified_vehicle_damage( victim, attacker, damage, meansofdeath, weapon, inf } else final_damage = old_damage; - /# if ( getdvarint( _hash_5ABA6445 ) ) println( "Perk/> Damage Factor: " + final_damage / old_damage + " - Pre Damage: " + old_damage + " - Post Damage: " + final_damage ); @@ -962,15 +953,9 @@ cac_modified_vehicle_damage( victim, attacker, damage, meansofdeath, weapon, inf cac_modified_damage( victim, attacker, damage, mod, weapon, inflictor, hitloc ) { -/# assert( isdefined( victim ) ); -#/ -/# assert( isdefined( attacker ) ); -#/ -/# assert( isplayer( victim ) ); -#/ if ( victim == attacker ) return damage; @@ -980,7 +965,6 @@ cac_modified_damage( victim, attacker, damage, mod, weapon, inflictor, hitloc ) if ( damage <= 0 ) return damage; - /# debug = 0; @@ -1046,7 +1030,6 @@ cac_modified_damage( victim, attacker, damage, mod, weapon, inflictor, hitloc ) println( "Perk/> " + victim.name + "'s flak jacket decreased " + attacker.name + "'s grenade damage" ); #/ } - /# victim.cac_debug_damage_type = tolower( mod ); victim.cac_debug_original_damage = damage; diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_clientids.gsc b/MP/Core/maps/mp/gametypes/_clientids.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/_clientids.gsc rename to MP/Core/maps/mp/gametypes/_clientids.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_copter.gsc b/MP/Core/maps/mp/gametypes/_copter.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/_copter.gsc rename to MP/Core/maps/mp/gametypes/_copter.gsc index 1fe1984..c26e64d 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_copter.gsc +++ b/MP/Core/maps/mp/gametypes/_copter.gsc @@ -603,9 +603,7 @@ coptermove() } else { -/# assert( movingvertically ); -#/ thisdest = ( self.origin[0], self.origin[1], desiredz ); } diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_damagefeedback.gsc b/MP/Core/maps/mp/gametypes/_damagefeedback.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/_damagefeedback.gsc rename to MP/Core/maps/mp/gametypes/_damagefeedback.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_deathicons.gsc b/MP/Core/maps/mp/gametypes/_deathicons.gsc similarity index 96% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/_deathicons.gsc rename to MP/Core/maps/mp/gametypes/_deathicons.gsc index f7013a5..cdb971d 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_deathicons.gsc +++ b/MP/Core/maps/mp/gametypes/_deathicons.gsc @@ -1,5 +1,7 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\gametypes\_globallogic_utils; +#include maps\mp\gametypes\_deathicons; init() { @@ -38,9 +40,7 @@ adddeathicon( entity, dyingplayer, team, timeout ) dyingplayer endon( "disconnect" ); wait 0.05; maps\mp\gametypes\_globallogic_utils::waittillslowprocessallowed(); -/# assert( isdefined( level.teams[team] ) ); -#/ if ( getdvar( _hash_F83E8105 ) == "0" ) return; diff --git a/MP/Core/maps/mp/gametypes/_dev.gsc b/MP/Core/maps/mp/gametypes/_dev.gsc new file mode 100644 index 0000000..03eacda --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_dev.gsc @@ -0,0 +1,3317 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_dev_class; +#include maps\mp\gametypes\_globallogic_score; +#include maps\mp\killstreaks\_killstreaks; +#include maps\mp\gametypes\_globallogic_utils; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_rank; +#include maps\mp\gametypes\_hud_message; +#include maps\mp\gametypes\_killcam; +#include maps\mp\killstreaks\_helicopter; +#include maps\mp\killstreaks\_helicopter_gunner; +#include maps\mp\killstreaks\_radar; +#include maps\mp\killstreaks\_killstreakrules; +#include maps\mp\killstreaks\_supplydrop; +#include maps\mp\bots\_bot; + +init() +{ +/# + if ( sessionmodeiszombiesgame() ) + { + for (;;) + { + updatedevsettingszm(); + wait 0.5; + } + + return; + } + + if ( getdvar( "scr_showspawns" ) == "" ) + setdvar( "scr_showspawns", "0" ); + + if ( getdvar( "scr_showstartspawns" ) == "" ) + setdvar( "scr_showstartspawns", "0" ); + + if ( getdvar( "scr_botsHasPlayerWeapon" ) == "" ) + setdvar( "scr_botsHasPlayerWeapon", "0" ); + + if ( getdvar( "scr_botsGrenadesOnly" ) == "" ) + setdvar( "scr_botsGrenadesOnly", "0" ); + + if ( getdvar( "scr_botsSpecialGrenadesOnly" ) == "" ) + setdvar( "scr_botsSpecialGrenadesOnly", "0" ); + + if ( getdvar( "scr_devHeliPathsDebugDraw" ) == "" ) + setdvar( "scr_devHeliPathsDebugDraw", "0" ); + + if ( getdvar( "scr_devStrafeRunPathDebugDraw" ) == "" ) + setdvar( "scr_devStrafeRunPathDebugDraw", "0" ); + + if ( getdvar( "scr_show_hq_spawns" ) == "" ) + setdvar( "scr_show_hq_spawns", "" ); + + if ( getdvar( "scr_testScriptRuntimeError" ) == "" ) + setdvar( "scr_testScriptRuntimeError", "0" ); + + precachemodel( "defaultactor" ); + precachestring( &"testPlayerScoreForTan" ); + thread testscriptruntimeerror(); + thread testdvars(); + thread addtestclients(); + thread addenemyheli(); + thread addenemyu2(); + thread addtestcarepackage(); + thread removetestclients(); + thread watch_botsdvars(); + thread devhelipathdebugdraw(); + thread devstraferunpathdebugdraw(); + thread maps\mp\gametypes\_dev_class::dev_cac_init(); + thread maps\mp\gametypes\_globallogic_score::setplayermomentumdebug(); + setdvar( "scr_giveperk", "" ); + setdvar( "scr_forceevent", "" ); + setdvar( "scr_draw_triggers", "0" ); + thread engagement_distance_debug_toggle(); + thread equipment_dev_gui(); + thread grenade_dev_gui(); + setdvar( "debug_dynamic_ai_spawning", "0" ); + level.bot_overlay = 0; + level.bot_threat = 0; + level.bot_path = 0; + level.dem_spawns = []; + + if ( level.gametype == "dem" ) + { + extra_spawns = []; + extra_spawns[0] = "mp_dem_spawn_attacker_a"; + extra_spawns[1] = "mp_dem_spawn_attacker_b"; + extra_spawns[2] = "mp_dem_spawn_defender_a"; + extra_spawns[3] = "mp_dem_spawn_defender_b"; + + for ( i = 0; i < extra_spawns.size; i++ ) + { + points = getentarray( extra_spawns[i], "classname" ); + + if ( isdefined( points ) && points.size > 0 ) + level.dem_spawns = arraycombine( level.dem_spawns, points, 1, 0 ); + } + } + + thread onplayerconnect(); + + for (;;) + { + updatedevsettings(); + wait 0.5; + } +#/ +} + +onplayerconnect() +{ +/# + for (;;) + level waittill( "connecting", player ); +#/ +} + +updatehardpoints() +{ +/# + keys = getarraykeys( level.killstreaks ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( !isdefined( level.killstreaks[keys[i]].devdvar ) ) + continue; + + dvar = level.killstreaks[keys[i]].devdvar; + + if ( getdvarint( dvar ) == 1 ) + { + foreach ( player in level.players ) + { + if ( isdefined( level.usingmomentum ) && level.usingmomentum && isdefined( level.usingscorestreaks ) && level.usingscorestreaks ) + { + player maps\mp\killstreaks\_killstreaks::givekillstreak( keys[i] ); + continue; + } + + if ( player is_bot() ) + { + player.bot["killstreaks"] = []; + player.bot["killstreaks"][0] = maps\mp\killstreaks\_killstreaks::getkillstreakmenuname( keys[i] ); + killstreakweapon = maps\mp\killstreaks\_killstreaks::getkillstreakweapon( keys[i] ); + player maps\mp\killstreaks\_killstreaks::givekillstreakweapon( killstreakweapon, 1 ); + maps\mp\gametypes\_globallogic_score::_setplayermomentum( player, 2000 ); + continue; + } + + player maps\mp\killstreaks\_killstreaks::givekillstreak( keys[i] ); + } + + setdvar( dvar, "0" ); + } + } +#/ +} + +warpalltohost( team ) +{ +/# + host = gethostplayer(); + players = get_players(); + origin = host.origin; + nodes = getnodesinradius( origin, 128, 32, 128, "Path" ); + angles = host getplayerangles(); + yaw = ( 0.0, angles[1], 0.0 ); + forward = anglestoforward( yaw ); + spawn_origin = origin + forward * 128 + vectorscale( ( 0, 0, 1 ), 16.0 ); + + if ( !bullettracepassed( host geteye(), spawn_origin, 0, host ) ) + spawn_origin = undefined; + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] == host ) + continue; + + if ( isdefined( team ) ) + { + if ( team == "enemies_host" && host.team == players[i].team ) + continue; + + if ( team == "friendlies_host" && host.team != players[i].team ) + continue; + } + + if ( isdefined( spawn_origin ) ) + { + players[i] setorigin( spawn_origin ); + continue; + } + + if ( nodes.size > 0 ) + { + node = random( nodes ); + players[i] setorigin( node.origin ); + continue; + } + + players[i] setorigin( origin ); + } + + setdvar( "scr_playerwarp", "" ); +#/ +} + +updatedevsettingszm() +{ +/# + if ( level.players.size > 0 ) + { + if ( getdvar( "r_streamDumpDistance" ) == "3" ) + { + if ( !isdefined( level.streamdumpteamindex ) ) + level.streamdumpteamindex = 0; + else + level.streamdumpteamindex++; + + numpoints = 0; + spawnpoints = []; + location = level.scr_zm_map_start_location; + + if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) ) + location = level.default_start_location; + + match_string = level.scr_zm_ui_gametype + "_" + location; + + if ( level.streamdumpteamindex < level.teams.size ) + { + structs = getstructarray( "initial_spawn", "script_noteworthy" ); + + if ( isdefined( structs ) ) + { + foreach ( struct in structs ) + { + if ( isdefined( struct.script_string ) ) + { + tokens = strtok( struct.script_string, " " ); + + foreach ( token in tokens ) + { + if ( token == match_string ) + spawnpoints[spawnpoints.size] = struct; + } + } + } + } + + if ( !isdefined( spawnpoints ) || spawnpoints.size == 0 ) + spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); + + if ( isdefined( spawnpoints ) ) + numpoints = spawnpoints.size; + } + + if ( numpoints == 0 ) + { + setdvar( "r_streamDumpDistance", "0" ); + level.streamdumpteamindex = -1; + } + else + { + averageorigin = ( 0, 0, 0 ); + averageangles = ( 0, 0, 0 ); + + foreach ( spawnpoint in spawnpoints ) + { + averageorigin += spawnpoint.origin / numpoints; + averageangles += spawnpoint.angles / numpoints; + } + + level.players[0] setplayerangles( averageangles ); + level.players[0] setorigin( averageorigin ); + wait 0.05; + setdvar( "r_streamDumpDistance", "2" ); + } + } + } +#/ +} + +updatedevsettings() +{ +/# + show_spawns = getdvarint( "scr_showspawns" ); + show_start_spawns = getdvarint( "scr_showstartspawns" ); + player = gethostplayer(); + + if ( show_spawns >= 1 ) + show_spawns = 1; + else + show_spawns = 0; + + if ( show_start_spawns >= 1 ) + show_start_spawns = 1; + else + show_start_spawns = 0; + + if ( !isdefined( level.show_spawns ) || level.show_spawns != show_spawns ) + { + level.show_spawns = show_spawns; + setdvar( "scr_showspawns", level.show_spawns ); + + if ( level.show_spawns ) + showspawnpoints(); + else + hidespawnpoints(); + } + + if ( !isdefined( level.show_start_spawns ) || level.show_start_spawns != show_start_spawns ) + { + level.show_start_spawns = show_start_spawns; + setdvar( "scr_showstartspawns", level.show_start_spawns ); + + if ( level.show_start_spawns ) + showstartspawnpoints(); + else + hidestartspawnpoints(); + } + + updateminimapsetting(); + + if ( level.players.size > 0 ) + { + updatehardpoints(); + + if ( getdvar( "scr_playerwarp" ) == "host" ) + warpalltohost(); + else if ( getdvar( "scr_playerwarp" ) == "enemies_host" ) + warpalltohost( getdvar( "scr_playerwarp" ) ); + else if ( getdvar( "scr_playerwarp" ) == "friendlies_host" ) + warpalltohost( getdvar( "scr_playerwarp" ) ); + else if ( getdvar( "scr_playerwarp" ) == "next_start_spawn" ) + { + players = get_players(); + setdvar( "scr_playerwarp", "" ); + + if ( !isdefined( level.devgui_start_spawn_index ) ) + level.devgui_start_spawn_index = 0; + + player = gethostplayer(); + spawns = level.spawn_start[player.pers["team"]]; + + if ( !isdefined( spawns ) || spawns.size <= 0 ) + return; + + for ( i = 0; i < players.size; i++ ) + { + players[i] setorigin( spawns[level.devgui_start_spawn_index].origin ); + players[i] setplayerangles( spawns[level.devgui_start_spawn_index].angles ); + } + + level.devgui_start_spawn_index++; + + if ( level.devgui_start_spawn_index >= spawns.size ) + level.devgui_start_spawn_index = 0; + } + else if ( getdvar( "scr_playerwarp" ) == "prev_start_spawn" ) + { + players = get_players(); + setdvar( "scr_playerwarp", "" ); + + if ( !isdefined( level.devgui_start_spawn_index ) ) + level.devgui_start_spawn_index = 0; + + player = gethostplayer(); + spawns = level.spawn_start[player.pers["team"]]; + + if ( !isdefined( spawns ) || spawns.size <= 0 ) + return; + + for ( i = 0; i < players.size; i++ ) + { + players[i] setorigin( spawns[level.devgui_start_spawn_index].origin ); + players[i] setplayerangles( spawns[level.devgui_start_spawn_index].angles ); + } + + level.devgui_start_spawn_index--; + + if ( level.devgui_start_spawn_index < 0 ) + level.devgui_start_spawn_index = spawns.size - 1; + } + else if ( getdvar( "scr_playerwarp" ) == "next_spawn" ) + { + players = get_players(); + setdvar( "scr_playerwarp", "" ); + + if ( !isdefined( level.devgui_spawn_index ) ) + level.devgui_spawn_index = 0; + + spawns = level.spawnpoints; + spawns = arraycombine( spawns, level.dem_spawns, 1, 0 ); + + if ( !isdefined( spawns ) || spawns.size <= 0 ) + return; + + for ( i = 0; i < players.size; i++ ) + { + players[i] setorigin( spawns[level.devgui_spawn_index].origin ); + players[i] setplayerangles( spawns[level.devgui_spawn_index].angles ); + } + + level.devgui_spawn_index++; + + if ( level.devgui_spawn_index >= spawns.size ) + level.devgui_spawn_index = 0; + } + else if ( getdvar( "scr_playerwarp" ) == "prev_spawn" ) + { + players = get_players(); + setdvar( "scr_playerwarp", "" ); + + if ( !isdefined( level.devgui_spawn_index ) ) + level.devgui_spawn_index = 0; + + spawns = level.spawnpoints; + spawns = arraycombine( spawns, level.dem_spawns, 1, 0 ); + + if ( !isdefined( spawns ) || spawns.size <= 0 ) + return; + + for ( i = 0; i < players.size; i++ ) + { + players[i] setorigin( spawns[level.devgui_spawn_index].origin ); + players[i] setplayerangles( spawns[level.devgui_spawn_index].angles ); + } + + level.devgui_spawn_index--; + + if ( level.devgui_spawn_index < 0 ) + level.devgui_spawn_index = spawns.size - 1; + } + else if ( getdvar( "scr_devgui_spawn" ) != "" ) + { + player = gethostplayer(); + + if ( !isdefined( player.devgui_spawn_active ) ) + player.devgui_spawn_active = 0; + + if ( !player.devgui_spawn_active ) + { + iprintln( "Previous spawn bound to D-Pad Left" ); + iprintln( "Next spawn bound to D-Pad Right" ); + player.devgui_spawn_active = 1; + player thread devgui_spawn_think(); + } + else + { + player notify( "devgui_spawn_think" ); + player.devgui_spawn_active = 0; + player setactionslot( 3, "altMode" ); + player setactionslot( 4, "nightvision" ); + } + + setdvar( "scr_devgui_spawn", "" ); + } + else if ( getdvar( "scr_player_ammo" ) != "" ) + { + players = get_players(); + + if ( !isdefined( level.devgui_unlimited_ammo ) ) + level.devgui_unlimited_ammo = 1; + else + level.devgui_unlimited_ammo = !level.devgui_unlimited_ammo; + + if ( level.devgui_unlimited_ammo ) + iprintln( "Giving unlimited ammo to all players" ); + else + iprintln( "Stopping unlimited ammo for all players" ); + + for ( i = 0; i < players.size; i++ ) + { + if ( level.devgui_unlimited_ammo ) + { + players[i] thread devgui_unlimited_ammo(); + continue; + } + + players[i] notify( "devgui_unlimited_ammo" ); + } + + setdvar( "scr_player_ammo", "" ); + } + else if ( getdvar( "scr_player_momentum" ) != "" ) + { + if ( !isdefined( level.devgui_unlimited_momentum ) ) + level.devgui_unlimited_momentum = 1; + else + level.devgui_unlimited_momentum = !level.devgui_unlimited_momentum; + + if ( level.devgui_unlimited_momentum ) + { + iprintln( "Giving unlimited momentum to all players" ); + level thread devgui_unlimited_momentum(); + } + else + { + iprintln( "Stopping unlimited momentum for all players" ); + level notify( "devgui_unlimited_momentum" ); + } + + setdvar( "scr_player_momentum", "" ); + } + else if ( getdvar( "scr_give_player_score" ) != "" ) + { + level thread devgui_increase_momentum( getdvarint( "scr_give_player_score" ) ); + setdvar( "scr_give_player_score", "" ); + } + else if ( getdvar( "scr_player_zero_ammo" ) != "" ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + weapons = player getweaponslist(); + arrayremovevalue( weapons, "knife_mp" ); + + for ( j = 0; j < weapons.size; j++ ) + { + if ( weapons[j] == "none" ) + continue; + + player setweaponammostock( weapons[j], 0 ); + player setweaponammoclip( weapons[j], 0 ); + } + } + + setdvar( "scr_player_zero_ammo", "" ); + } + else if ( getdvar( "scr_emp_jammed" ) != "" ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( getdvar( "scr_emp_jammed" ) == "0" ) + { + player setempjammed( 0 ); + continue; + } + + player setempjammed( 1 ); + } + + setdvar( "scr_emp_jammed", "" ); + } + else if ( getdvar( "scr_round_pause" ) != "" ) + { + if ( !level.timerstopped ) + { + iprintln( "Pausing Round Timer" ); + maps\mp\gametypes\_globallogic_utils::pausetimer(); + } + else + { + iprintln( "Resuming Round Timer" ); + maps\mp\gametypes\_globallogic_utils::resumetimer(); + } + + setdvar( "scr_round_pause", "" ); + } + else if ( getdvar( "scr_round_end" ) != "" ) + { + level maps\mp\gametypes\_globallogic::forceend(); + setdvar( "scr_round_end", "" ); + } + else if ( getdvar( "scr_health_debug" ) != "" ) + { + players = get_players(); + host = gethostplayer(); + + if ( !isdefined( host.devgui_health_debug ) ) + host.devgui_health_debug = 0; + + if ( host.devgui_health_debug ) + { + host.devgui_health_debug = 0; + + for ( i = 0; i < players.size; i++ ) + { + players[i] notify( "devgui_health_debug" ); + + if ( isdefined( players[i].debug_health_bar ) ) + { + players[i].debug_health_bar destroy(); + players[i].debug_health_text destroy(); + players[i].debug_health_bar = undefined; + players[i].debug_health_text = undefined; + } + } + } + else + { + host.devgui_health_debug = 1; + + for ( i = 0; i < players.size; i++ ) + players[i] thread devgui_health_debug(); + } + + setdvar( "scr_health_debug", "" ); + } + else if ( getdvar( "scr_show_hq_spawns" ) != "" ) + { + if ( !isdefined( level.devgui_show_hq ) ) + level.devgui_show_hq = 0; + + if ( level.gametype == "koth" && isdefined( level.radios ) ) + { + if ( !level.devgui_show_hq ) + { + for ( i = 0; i < level.radios.size; i++ ) + { + color = ( 1, 0, 0 ); + level showonespawnpoint( level.radios[i], color, "hide_hq_points", 32, "hq_spawn" ); + } + } + else + level notify( "hide_hq_points" ); + + level.devgui_show_hq = !level.devgui_show_hq; + } + + setdvar( "scr_show_hq_spawns", "" ); + } + + if ( getdvar( "r_streamDumpDistance" ) == "3" ) + { + if ( !isdefined( level.streamdumpteamindex ) ) + level.streamdumpteamindex = 0; + else + level.streamdumpteamindex++; + + numpoints = 0; + + if ( level.streamdumpteamindex < level.teams.size ) + { + teamname = getarraykeys( level.teams )[level.streamdumpteamindex]; + + if ( isdefined( level.spawn_start[teamname] ) ) + numpoints = level.spawn_start[teamname].size; + } + + if ( numpoints == 0 ) + { + setdvar( "r_streamDumpDistance", "0" ); + level.streamdumpteamindex = -1; + } + else + { + averageorigin = ( 0, 0, 0 ); + averageangles = ( 0, 0, 0 ); + + foreach ( spawnpoint in level.spawn_start[teamname] ) + { + averageorigin += spawnpoint.origin / numpoints; + averageangles += spawnpoint.angles / numpoints; + } + + level.players[0] setplayerangles( averageangles ); + level.players[0] setorigin( averageorigin ); + wait 0.05; + setdvar( "r_streamDumpDistance", "2" ); + } + } + } + + if ( getdvar( "scr_giveperk" ) == "0" ) + { + players = get_players(); + iprintln( "Taking all perks from all players" ); + + for ( i = 0; i < players.size; i++ ) + players[i] clearperks(); + + setdvar( "scr_giveperk", "" ); + } + + if ( getdvar( "scr_giveperk" ) != "" ) + { + perk = getdvar( "scr_giveperk" ); + specialties = strtok( perk, "|" ); + players = get_players(); + iprintln( "Giving all players perk: '" + perk + "'" ); + + for ( i = 0; i < players.size; i++ ) + { + for ( j = 0; j < specialties.size; j++ ) + { + players[i] setperk( specialties[j] ); + players[i].extraperks[specialties[j]] = 1; + } + } + + setdvar( "scr_giveperk", "" ); + } + + if ( getdvar( "scr_forcegrenade" ) != "" ) + { + force_grenade_throw( getdvar( "scr_forcegrenade" ) ); + setdvar( "scr_forcegrenade", "" ); + } + + if ( getdvar( "scr_forceevent" ) != "" ) + { + event = getdvar( "scr_forceevent" ); + player = gethostplayer(); + forward = anglestoforward( player.angles ); + right = anglestoright( player.angles ); + + if ( event == "painfront" ) + player dodamage( 1, player.origin + forward ); + else if ( event == "painback" ) + player dodamage( 1, player.origin - forward ); + else if ( event == "painleft" ) + player dodamage( 1, player.origin - right ); + else if ( event == "painright" ) + player dodamage( 1, player.origin + right ); + + setdvar( "scr_forceevent", "" ); + } + + if ( getdvar( "scr_takeperk" ) != "" ) + { + perk = getdvar( "scr_takeperk" ); + + for ( i = 0; i < level.players.size; i++ ) + { + level.players[i] unsetperk( perk ); + level.players[i].extraperks[perk] = undefined; + } + + setdvar( "scr_takeperk", "" ); + } + + if ( getdvar( "scr_x_kills_y" ) != "" ) + { + nametokens = strtok( getdvar( "scr_x_kills_y" ), " " ); + + if ( nametokens.size > 1 ) + thread xkillsy( nametokens[0], nametokens[1] ); + + setdvar( "scr_x_kills_y", "" ); + } + + if ( getdvar( "scr_usedogs" ) != "" ) + { + ownername = getdvar( "scr_usedogs" ); + setdvar( "scr_usedogs", "" ); + owner = undefined; + + for ( index = 0; index < level.players.size; index++ ) + { + if ( level.players[index].name == ownername ) + owner = level.players[index]; + } + + if ( isdefined( owner ) ) + owner maps\mp\killstreaks\_killstreaks::triggerkillstreak( "dogs_mp" ); + } + + if ( getdvar( "scr_set_level" ) != "" ) + { + player.pers["rank"] = 0; + player.pers["rankxp"] = 0; + newrank = min( getdvarint( "scr_set_level" ), 54 ); + newrank = max( newrank, 1 ); + setdvar( "scr_set_level", "" ); + lastxp = 0; + + for ( index = 0; index <= newrank; index++ ) + { + newxp = maps\mp\gametypes\_rank::getrankinfominxp( index ); + player thread maps\mp\gametypes\_rank::giverankxp( "kill", newxp - lastxp ); + lastxp = newxp; + wait 0.25; + self notify( "cancel_notify" ); + } + } + + if ( getdvar( "scr_givexp" ) != "" ) + { + player thread maps\mp\gametypes\_rank::giverankxp( "challenge", getdvarint( "scr_givexp" ), 1 ); + setdvar( "scr_givexp", "" ); + } + + if ( getdvar( "scr_do_notify" ) != "" ) + { + for ( i = 0; i < level.players.size; i++ ) + level.players[i] maps\mp\gametypes\_hud_message::oldnotifymessage( getdvar( "scr_do_notify" ), getdvar( "scr_do_notify" ), game["icons"]["allies"] ); + + announcement( getdvar( "scr_do_notify" ), 0 ); + setdvar( "scr_do_notify", "" ); + } + + if ( getdvar( _hash_4F1284FA ) != "" ) + { + ents = getentarray(); + level.entarray = []; + level.entcounts = []; + level.entgroups = []; + + for ( index = 0; index < ents.size; index++ ) + { + classname = ents[index].classname; + + if ( !issubstr( classname, "_spawn" ) ) + { + curent = ents[index]; + level.entarray[level.entarray.size] = curent; + + if ( !isdefined( level.entcounts[classname] ) ) + level.entcounts[classname] = 0; + + level.entcounts[classname]++; + + if ( !isdefined( level.entgroups[classname] ) ) + level.entgroups[classname] = []; + + level.entgroups[classname][level.entgroups[classname].size] = curent; + } + } + } + + if ( getdvar( "debug_dynamic_ai_spawning" ) == "1" && !isdefined( level.larry ) ) + thread larry_thread(); + else if ( getdvar( "debug_dynamic_ai_spawning" ) == "0" ) + level notify( "kill_larry" ); + + if ( level.bot_overlay == 0 && getdvarint( _hash_1CBC4852 ) == 1 ) + { + level thread bot_overlay_think(); + level.bot_overlay = 1; + } + else if ( level.bot_overlay == 1 && getdvarint( _hash_1CBC4852 ) == 0 ) + { + level bot_overlay_stop(); + level.bot_overlay = 0; + } + + if ( level.bot_threat == 0 && getdvarint( _hash_68A98D18 ) == 1 ) + { + level thread bot_threat_think(); + level.bot_threat = 1; + } + else if ( level.bot_threat == 1 && getdvarint( _hash_68A98D18 ) == 0 ) + { + level bot_threat_stop(); + level.bot_threat = 0; + } + + if ( level.bot_path == 0 && getdvarint( _hash_D6F2CC5D ) == 1 ) + { + level thread bot_path_think(); + level.bot_path = 1; + } + else if ( level.bot_path == 1 && getdvarint( _hash_D6F2CC5D ) == 0 ) + { + level bot_path_stop(); + level.bot_path = 0; + } + + if ( getdvarint( "scr_force_finalkillcam" ) == 1 ) + { + level thread maps\mp\gametypes\_killcam::dofinalkillcam(); + level thread waitthennotifyfinalkillcam(); + } + + if ( getdvarint( "scr_force_roundkillcam" ) == 1 ) + { + level thread maps\mp\gametypes\_killcam::dofinalkillcam(); + level thread waitthennotifyroundkillcam(); + } + + if ( !level.bot_overlay && !level.bot_threat && !level.bot_path ) + level notify( "bot_dpad_terminate" ); +#/ +} + +waitthennotifyroundkillcam() +{ +/# + wait 0.05; + level notify( "play_final_killcam" ); + setdvar( "scr_force_roundkillcam", 0 ); +#/ +} + +waitthennotifyfinalkillcam() +{ +/# + wait 0.05; + level notify( "play_final_killcam" ); + wait 0.05; + setdvar( "scr_force_finalkillcam", 0 ); +#/ +} + +devgui_spawn_think() +{ +/# + self notify( "devgui_spawn_think" ); + self endon( "devgui_spawn_think" ); + self endon( "disconnect" ); + dpad_left = 0; + dpad_right = 0; + + for (;;) + { + self setactionslot( 3, "" ); + self setactionslot( 4, "" ); + + if ( !dpad_left && self buttonpressed( "DPAD_LEFT" ) ) + { + setdvar( "scr_playerwarp", "prev_spawn" ); + dpad_left = 1; + } + else if ( !self buttonpressed( "DPAD_LEFT" ) ) + dpad_left = 0; + + if ( !dpad_right && self buttonpressed( "DPAD_RIGHT" ) ) + { + setdvar( "scr_playerwarp", "next_spawn" ); + dpad_right = 1; + } + else if ( !self buttonpressed( "DPAD_RIGHT" ) ) + dpad_right = 0; + + wait 0.05; + } +#/ +} + +devgui_unlimited_ammo() +{ +/# + self notify( "devgui_unlimited_ammo" ); + self endon( "devgui_unlimited_ammo" ); + self endon( "disconnect" ); + + for (;;) + { + wait 0.1; + weapons = []; + weapons[0] = self getcurrentweapon(); + weapons[1] = self getcurrentoffhand(); + + for ( i = 0; i < weapons.size; i++ ) + { + if ( weapons[i] == "none" ) + continue; + + if ( maps\mp\killstreaks\_killstreaks::iskillstreakweapon( weapons[i] ) ) + continue; + + self givemaxammo( weapons[i] ); + } + } +#/ +} + +devgui_unlimited_momentum() +{ +/# + level notify( "devgui_unlimited_momentum" ); + level endon( "devgui_unlimited_momentum" ); + + for (;;) + { + wait 1; + players = get_players(); + + foreach ( player in players ) + { + if ( !isdefined( player ) ) + continue; + + if ( !isalive( player ) ) + continue; + + if ( player.sessionstate != "playing" ) + continue; + + maps\mp\gametypes\_globallogic_score::_setplayermomentum( player, 5000 ); + } + } +#/ +} + +devgui_increase_momentum( score ) +{ +/# + players = get_players(); + + foreach ( player in players ) + { + if ( !isdefined( player ) ) + continue; + + if ( !isalive( player ) ) + continue; + + if ( player.sessionstate != "playing" ) + continue; + + player maps\mp\gametypes\_globallogic_score::giveplayermomentumnotification( score, &"testPlayerScoreForTan", "PLAYER_SCORE", 0 ); + } +#/ +} + +devgui_health_debug() +{ +/# + self notify( "devgui_health_debug" ); + self endon( "devgui_health_debug" ); + self endon( "disconnect" ); + x = 80; + y = 40; + self.debug_health_bar = newclienthudelem( self ); + self.debug_health_bar.x = x + 80; + self.debug_health_bar.y = y + 2; + self.debug_health_bar.alignx = "left"; + self.debug_health_bar.aligny = "top"; + self.debug_health_bar.horzalign = "fullscreen"; + self.debug_health_bar.vertalign = "fullscreen"; + self.debug_health_bar.alpha = 1; + self.debug_health_bar.foreground = 1; + self.debug_health_bar setshader( "black", 1, 8 ); + self.debug_health_text = newclienthudelem( self ); + self.debug_health_text.x = x + 80; + self.debug_health_text.y = y; + self.debug_health_text.alignx = "left"; + self.debug_health_text.aligny = "top"; + self.debug_health_text.horzalign = "fullscreen"; + self.debug_health_text.vertalign = "fullscreen"; + self.debug_health_text.alpha = 1; + self.debug_health_text.fontscale = 1; + self.debug_health_text.foreground = 1; + + if ( !isdefined( self.maxhealth ) || self.maxhealth <= 0 ) + self.maxhealth = 100; + + for (;;) + { + wait 0.05; + width = self.health / self.maxhealth * 300; + width = int( max( width, 1 ) ); + self.debug_health_bar setshader( "black", width, 8 ); + self.debug_health_text setvalue( self.health ); + } +#/ +} + +giveextraperks() +{ +/# + if ( !isdefined( self.extraperks ) ) + return; + + perks = getarraykeys( self.extraperks ); + + for ( i = 0; i < perks.size; i++ ) + self setperk( perks[i] ); +#/ +} + +xkillsy( attackername, victimname ) +{ +/# + attacker = undefined; + victim = undefined; + + for ( index = 0; index < level.players.size; index++ ) + { + if ( level.players[index].name == attackername ) + { + attacker = level.players[index]; + continue; + } + + if ( level.players[index].name == victimname ) + victim = level.players[index]; + } + + if ( !isalive( attacker ) || !isalive( victim ) ) + return; + + victim thread [[ level.callbackplayerdamage ]]( attacker, attacker, 1000, 0, "MOD_RIFLE_BULLET", "none", ( 0, 0, 0 ), ( 0, 0, 0 ), "none", 0, 0 ); +#/ +} + +updateminimapsetting() +{ +/# + requiredmapaspectratio = getdvarfloat( "scr_RequiredMapAspectratio" ); + + if ( !isdefined( level.minimapheight ) ) + { + setdvar( "scr_minimap_height", "0" ); + level.minimapheight = 0; + } + + minimapheight = getdvarfloat( "scr_minimap_height" ); + + if ( minimapheight != level.minimapheight ) + { + if ( minimapheight <= 0 ) + { + gethostplayer() cameraactivate( 0 ); + level.minimapheight = minimapheight; + level notify( "end_draw_map_bounds" ); + } + + if ( minimapheight > 0 ) + { + level.minimapheight = minimapheight; + players = get_players(); + + if ( players.size > 0 ) + { + player = gethostplayer(); + corners = getentarray( "minimap_corner", "targetname" ); + + if ( corners.size == 2 ) + { + viewpos = corners[0].origin + corners[1].origin; + viewpos = ( viewpos[0] * 0.5, viewpos[1] * 0.5, viewpos[2] * 0.5 ); + level thread minimapwarn( corners ); + maxcorner = ( corners[0].origin[0], corners[0].origin[1], viewpos[2] ); + mincorner = ( corners[0].origin[0], corners[0].origin[1], viewpos[2] ); + + if ( corners[1].origin[0] > corners[0].origin[0] ) + maxcorner = ( corners[1].origin[0], maxcorner[1], maxcorner[2] ); + else + mincorner = ( corners[1].origin[0], mincorner[1], mincorner[2] ); + + if ( corners[1].origin[1] > corners[0].origin[1] ) + maxcorner = ( maxcorner[0], corners[1].origin[1], maxcorner[2] ); + else + mincorner = ( mincorner[0], corners[1].origin[1], mincorner[2] ); + + viewpostocorner = maxcorner - viewpos; + viewpos = ( viewpos[0], viewpos[1], viewpos[2] + minimapheight ); + northvector = ( cos( getnorthyaw() ), sin( getnorthyaw() ), 0 ); + eastvector = ( northvector[1], 0 - northvector[0], 0 ); + disttotop = vectordot( northvector, viewpostocorner ); + + if ( disttotop < 0 ) + disttotop = 0 - disttotop; + + disttoside = vectordot( eastvector, viewpostocorner ); + + if ( disttoside < 0 ) + disttoside = 0 - disttoside; + + if ( requiredmapaspectratio > 0 ) + { + mapaspectratio = disttoside / disttotop; + + if ( mapaspectratio < requiredmapaspectratio ) + { + incr = requiredmapaspectratio / mapaspectratio; + disttoside *= incr; + addvec = vecscale( eastvector, vectordot( eastvector, maxcorner - viewpos ) * ( incr - 1 ) ); + mincorner -= addvec; + maxcorner += addvec; + } + else + { + incr = mapaspectratio / requiredmapaspectratio; + disttotop *= incr; + addvec = vecscale( northvector, vectordot( northvector, maxcorner - viewpos ) * ( incr - 1 ) ); + mincorner -= addvec; + maxcorner += addvec; + } + } + + if ( level.console ) + { + aspectratioguess = 1.77778; + angleside = 2 * atan( disttoside * 0.8 / minimapheight ); + angletop = 2 * atan( disttotop * aspectratioguess * 0.8 / minimapheight ); + } + else + { + aspectratioguess = 1.33333; + angleside = 2 * atan( disttoside / minimapheight ); + angletop = 2 * atan( disttotop * aspectratioguess / minimapheight ); + } + + if ( angleside > angletop ) + angle = angleside; + else + angle = angletop; + + znear = minimapheight - 1000; + + if ( znear < 16 ) + znear = 16; + + if ( znear > 10000 ) + znear = 10000; + + player camerasetposition( viewpos, ( 90, getnorthyaw(), 0 ) ); + player cameraactivate( 1 ); + player takeallweapons(); + setdvar( "cg_drawGun", 0 ); + setdvar( "cg_draw2D", 0 ); + setdvar( "cg_drawFPS", 0 ); + setdvar( "fx_enable", 0 ); + setdvar( "r_fog", 0 ); + setdvar( "r_highLodDist", 0 ); + setdvar( "r_znear", znear ); + setdvar( "r_lodscale", 0 ); + setdvar( "r_lodScaleRigid", 0 ); + setdvar( "cg_drawVersion", 0 ); + setdvar( "sm_enable", 1 ); + setdvar( "player_view_pitch_down", 90 ); + setdvar( "player_view_pitch_up", 0 ); + setdvar( "cg_fov", angle ); + setdvar( "cg_fovMin", 1 ); + setdvar( "debug_show_viewpos", "0" ); + + if ( isdefined( level.objpoints ) ) + { + for ( i = 0; i < level.objpointnames.size; i++ ) + { + if ( isdefined( level.objpoints[level.objpointnames[i]] ) ) + level.objpoints[level.objpointnames[i]] destroy(); + } + + level.objpoints = []; + level.objpointnames = []; + } + + thread drawminimapbounds( viewpos, mincorner, maxcorner ); + } + else + println( "^1Error: There are not exactly 2 \"minimap_corner\" entities in the level." ); + } + else + setdvar( "scr_minimap_height", "0" ); + } + } +#/ +} + +vecscale( vec, scalar ) +{ +/# + return ( vec[0] * scalar, vec[1] * scalar, vec[2] * scalar ); +#/ +} + +drawminimapbounds( viewpos, mincorner, maxcorner ) +{ +/# + level notify( "end_draw_map_bounds" ); + level endon( "end_draw_map_bounds" ); + viewheight = viewpos[2] - maxcorner[2]; + north = ( cos( getnorthyaw() ), sin( getnorthyaw() ), 0 ); + diaglen = length( mincorner - maxcorner ); + mincorneroffset = mincorner - viewpos; + mincorneroffset = vectornormalize( ( mincorneroffset[0], mincorneroffset[1], 0 ) ); + mincorner += vecscale( mincorneroffset, diaglen * 1 / 800 ); + maxcorneroffset = maxcorner - viewpos; + maxcorneroffset = vectornormalize( ( maxcorneroffset[0], maxcorneroffset[1], 0 ) ); + maxcorner += vecscale( maxcorneroffset, diaglen * 1 / 800 ); + diagonal = maxcorner - mincorner; + side = vecscale( north, vectordot( diagonal, north ) ); + sidenorth = vecscale( north, abs( vectordot( diagonal, north ) ) ); + corner0 = mincorner; + corner1 = mincorner + side; + corner2 = maxcorner; + corner3 = maxcorner - side; + toppos = vecscale( mincorner + maxcorner, 0.5 ) + vecscale( sidenorth, 0.51 ); + textscale = diaglen * 0.003; + + while ( true ) + { + line( corner0, corner1 ); + line( corner1, corner2 ); + line( corner2, corner3 ); + line( corner3, corner0 ); + print3d( toppos, "This Side Up", ( 1, 1, 1 ), 1, textscale ); + wait 0.05; + } +#/ +} + +minimapwarn( corners ) +{ +/# + threshold = 10; + width = abs( corners[0].origin[0] - corners[1].origin[0] ); + width = int( width ); + height = abs( corners[0].origin[1] - corners[1].origin[1] ); + height = int( height ); + + if ( abs( width - height ) > threshold ) + { + for (;;) + { + iprintln( "^1Warning: Minimap corners do not form a square (width: " + width + " height: " + height + ")\\n" ); + + if ( height > width ) + { + scale = height / width; + iprintln( "^1Warning: The compass minimap might be scaled: " + scale + " units in height more than width\\n" ); + } + else + { + scale = width / height; + iprintln( "^1Warning: The compass minimap might be scaled: " + scale + " units in width more than height\\n" ); + } + + wait 10; + } + } +#/ +} + +testscriptruntimeerrorassert() +{ +/# + wait 1; + assert( 0 ); +#/ +} + +testscriptruntimeerror2() +{ +/# + myundefined = "test"; + + if ( myundefined == 1 ) + println( "undefined in testScriptRuntimeError2\\n" ); +#/ +} + +testscriptruntimeerror1() +{ +/# + testscriptruntimeerror2(); +#/ +} + +testscriptruntimeerror() +{ +/# + wait 5; + + for (;;) + { + if ( getdvar( "scr_testScriptRuntimeError" ) != "0" ) + break; + + wait 1; + } + + myerror = getdvar( "scr_testScriptRuntimeError" ); + setdvar( "scr_testScriptRuntimeError", "0" ); + + if ( myerror == "assert" ) + testscriptruntimeerrorassert(); + else + testscriptruntimeerror1(); + + thread testscriptruntimeerror(); +#/ +} + +testdvars() +{ +/# + wait 5; + + for (;;) + { + if ( getdvar( "scr_testdvar" ) != "" ) + break; + + wait 1; + } + + tokens = strtok( getdvar( "scr_testdvar" ), " " ); + dvarname = tokens[0]; + dvarvalue = tokens[1]; + setdvar( dvarname, dvarvalue ); + setdvar( "scr_testdvar", "" ); + thread testdvars(); +#/ +} + +addtestclients() +{ +/# + wait 5; + + for (;;) + { + if ( getdvarint( "scr_testclients" ) > 0 ) + break; + + wait 1; + } + + playsoundonplayers( "vox_kls_dav_spawn" ); + testclients = getdvarint( "scr_testclients" ); + setdvar( "scr_testclients", 0 ); + + for ( i = 0; i < testclients; i++ ) + { + ent[i] = addtestclient(); + + if ( !isdefined( ent[i] ) ) + { + println( "Could not add test client" ); + wait 1; + continue; + } + + ent[i].pers["isBot"] = 1; + ent[i] thread testclient( "autoassign" ); + } + + thread addtestclients(); +#/ +} + +addenemyheli() +{ +/# + wait 5; + + for (;;) + { + if ( getdvarint( "scr_spawnenemyheli" ) > 0 ) + break; + + wait 1; + } + + enemyheli = getdvarint( "scr_spawnenemyheli" ); + setdvar( "scr_spawnenemyheli", 0 ); + team = "autoassign"; + player = gethostplayer(); + + if ( isdefined( player.pers["team"] ) ) + team = getotherteam( player.pers["team"] ); + + ent = getormakebot( team ); + + if ( !isdefined( ent ) ) + { + println( "Could not add test client" ); + wait 1; + thread addenemyheli(); + return; + } + + switch ( enemyheli ) + { + case 1: + level.helilocation = ent.origin; + ent thread maps\mp\killstreaks\_helicopter::usekillstreakhelicopter( "helicopter_comlink_mp" ); + wait 0.5; + ent notify( "confirm_location", level.helilocation ); + break; + case 2: + ent thread maps\mp\killstreaks\_helicopter_gunner::heli_gunner_killstreak( "helicopter_player_gunner_mp" ); + break; + } + + thread addenemyheli(); +#/ +} + +getormakebot( team ) +{ +/# + for ( i = 0; i < level.players.size; i++ ) + { + if ( level.players[i].team == team ) + { + if ( isdefined( level.players[i].pers["isBot"] ) && level.players[i].pers["isBot"] ) + return level.players[i]; + } + } + + ent = addtestclient(); + + if ( isdefined( ent ) ) + { + playsoundonplayers( "vox_kls_dav_spawn" ); + ent.pers["isBot"] = 1; + ent thread testclient( team ); + wait 1; + } + + return ent; +#/ +} + +addenemyu2() +{ +/# + wait 5; + + for (;;) + { + if ( getdvarint( "scr_spawnenemyu2" ) > 0 ) + break; + + wait 1; + } + + type = getdvarint( "scr_spawnenemyu2" ); + setdvar( "scr_spawnenemyu2", 0 ); + team = "autoassign"; + player = gethostplayer(); + + if ( isdefined( player.team ) ) + team = getotherteam( player.team ); + + ent = getormakebot( team ); + + if ( !isdefined( ent ) ) + { + println( "Could not add test client" ); + wait 1; + thread addenemyu2(); + return; + } + + if ( type == 3 ) + ent thread maps\mp\killstreaks\_radar::usekillstreaksatellite( "radardirection_mp" ); + else if ( type == 2 ) + ent thread maps\mp\killstreaks\_radar::usekillstreakcounteruav( "counteruav_mp" ); + else + ent thread maps\mp\killstreaks\_radar::usekillstreakradar( "radar_mp" ); + + thread addenemyu2(); +#/ +} + +addtestcarepackage() +{ +/# + wait 5; + + for (;;) + { + if ( getdvarint( "scr_givetestsupplydrop" ) > 0 ) + break; + + wait 1; + } + + supplydrop = getdvarint( "scr_givetestsupplydrop" ); + team = "autoassign"; + player = gethostplayer(); + + if ( isdefined( player.pers["team"] ) ) + { + switch ( supplydrop ) + { + case 2: + team = getotherteam( player.pers["team"] ); + break; + case 1: + default: + team = player.pers["team"]; + break; + } + } + + setdvar( "scr_givetestsupplydrop", 0 ); + ent = getormakebot( team ); + + if ( !isdefined( ent ) ) + { + println( "Could not add test client" ); + wait 1; + thread addtestcarepackage(); + return; + } + + ent maps\mp\killstreaks\_killstreakrules::killstreakstart( "supply_drop_mp", team ); + ent thread maps\mp\killstreaks\_supplydrop::helidelivercrate( ent.origin, "supplydrop_mp", ent, team ); + thread addtestcarepackage(); +#/ +} + +removetestclients() +{ +/# + wait 5; + + for (;;) + { + if ( getdvarint( "scr_testclientsremove" ) > 0 ) + break; + + wait 1; + } + + playsoundonplayers( "vox_kls_dav_kill" ); + removetype = getdvarint( "scr_testclientsremove" ); + setdvar( "scr_testclientsremove", 0 ); + host = gethostplayer(); + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].pers["isBot"] ) && players[i].pers["isBot"] == 1 ) + { + if ( removetype == 2 && host.team != players[i].team ) + continue; + + if ( removetype == 3 && host.team == players[i].team ) + continue; + + kick( players[i] getentitynumber() ); + } + } + + thread removetestclients(); +#/ +} + +testclient( team ) +{ +/# + self endon( "disconnect" ); + + while ( !isdefined( self.pers["team"] ) ) + wait 0.05; + + if ( level.teambased ) + { + self notify( "menuresponse", game["menu_team"], team ); + wait 0.5; + } + + while ( true ) + { + classes = maps\mp\bots\_bot::bot_build_classes(); + self notify( "menuresponse", "changeclass", random( classes ) ); + + self waittill( "spawned_player" ); + + wait 0.1; + } +#/ +} + +showonespawnpoint( spawn_point, color, notification, height, print ) +{ +/# + if ( !isdefined( height ) || height <= 0 ) + height = get_player_height(); + + if ( !isdefined( print ) ) + print = spawn_point.classname; + + center = spawn_point.origin; + forward = anglestoforward( spawn_point.angles ); + right = anglestoright( spawn_point.angles ); + forward = vectorscale( forward, 16 ); + right = vectorscale( right, 16 ); + a = center + forward - right; + b = center + forward + right; + c = center - forward + right; + d = center - forward - right; + thread lineuntilnotified( a, b, color, 0, notification ); + thread lineuntilnotified( b, c, color, 0, notification ); + thread lineuntilnotified( c, d, color, 0, notification ); + thread lineuntilnotified( d, a, color, 0, notification ); + thread lineuntilnotified( a, a + ( 0, 0, height ), color, 0, notification ); + thread lineuntilnotified( b, b + ( 0, 0, height ), color, 0, notification ); + thread lineuntilnotified( c, c + ( 0, 0, height ), color, 0, notification ); + thread lineuntilnotified( d, d + ( 0, 0, height ), color, 0, notification ); + a += ( 0, 0, height ); + b += ( 0, 0, height ); + c += ( 0, 0, height ); + d += ( 0, 0, height ); + thread lineuntilnotified( a, b, color, 0, notification ); + thread lineuntilnotified( b, c, color, 0, notification ); + thread lineuntilnotified( c, d, color, 0, notification ); + thread lineuntilnotified( d, a, color, 0, notification ); + center += ( 0, 0, height / 2 ); + arrow_forward = anglestoforward( spawn_point.angles ); + arrowhead_forward = anglestoforward( spawn_point.angles ); + arrowhead_right = anglestoright( spawn_point.angles ); + arrow_forward = vectorscale( arrow_forward, 32 ); + arrowhead_forward = vectorscale( arrowhead_forward, 24 ); + arrowhead_right = vectorscale( arrowhead_right, 8 ); + a = center + arrow_forward; + b = center + arrowhead_forward - arrowhead_right; + c = center + arrowhead_forward + arrowhead_right; + thread lineuntilnotified( center, a, color, 0, notification ); + thread lineuntilnotified( a, b, color, 0, notification ); + thread lineuntilnotified( a, c, color, 0, notification ); + thread print3duntilnotified( spawn_point.origin + ( 0, 0, height ), print, color, 1, 1, notification ); + return; +#/ +} + +showspawnpoints() +{ +/# + if ( isdefined( level.spawnpoints ) ) + { + color = ( 1, 1, 1 ); + + for ( spawn_point_index = 0; spawn_point_index < level.spawnpoints.size; spawn_point_index++ ) + showonespawnpoint( level.spawnpoints[spawn_point_index], color, "hide_spawnpoints" ); + } + + for ( i = 0; i < level.dem_spawns.size; i++ ) + { + color = ( 0, 1, 0 ); + showonespawnpoint( level.dem_spawns[i], color, "hide_spawnpoints" ); + } + + return; +#/ +} + +hidespawnpoints() +{ +/# + level notify( "hide_spawnpoints" ); + return; +#/ +} + +showstartspawnpoints() +{ +/# + if ( !level.teambased ) + return; + + if ( !isdefined( level.spawn_start ) ) + return; + + team_colors = []; + team_colors["axis"] = ( 1, 0, 1 ); + team_colors["allies"] = ( 0, 1, 1 ); + team_colors["team3"] = ( 1, 1, 0 ); + team_colors["team4"] = ( 0, 1, 0 ); + team_colors["team5"] = ( 0, 0, 1 ); + team_colors["team6"] = ( 1, 0.7, 0 ); + team_colors["team7"] = ( 0.25, 0.25, 1.0 ); + team_colors["team8"] = ( 0.88, 0, 1 ); + + foreach ( team in level.teams ) + { + color = team_colors[team]; + + foreach ( spawnpoint in level.spawn_start[team] ) + showonespawnpoint( spawnpoint, color, "hide_startspawnpoints" ); + } + + return; +#/ +} + +hidestartspawnpoints() +{ +/# + level notify( "hide_startspawnpoints" ); + return; +#/ +} + +print3duntilnotified( origin, text, color, alpha, scale, notification ) +{ +/# + level endon( notification ); + + for (;;) + { + print3d( origin, text, color, alpha, scale ); + wait 0.05; + } +#/ +} + +lineuntilnotified( start, end, color, depthtest, notification ) +{ +/# + level endon( notification ); + + for (;;) + { + line( start, end, color, depthtest ); + wait 0.05; + } +#/ +} + +engagement_distance_debug_toggle() +{ +/# + level endon( "kill_engage_dist_debug_toggle_watcher" ); + + if ( !isdefined( getdvarint( "debug_engage_dists" ) ) ) + setdvar( "debug_engage_dists", "0" ); + + laststate = getdvarint( "debug_engage_dists" ); + + while ( true ) + { + currentstate = getdvarint( "debug_engage_dists" ); + + if ( dvar_turned_on( currentstate ) && !dvar_turned_on( laststate ) ) + { + weapon_engage_dists_init(); + thread debug_realtime_engage_dist(); + laststate = currentstate; + } + else if ( !dvar_turned_on( currentstate ) && dvar_turned_on( laststate ) ) + { + level notify( "kill_all_engage_dist_debug" ); + laststate = currentstate; + } + + wait 0.3; + } +#/ +} + +dvar_turned_on( val ) +{ +/# + if ( val <= 0 ) + return false; + else + return true; +#/ +} + +engagement_distance_debug_init() +{ +/# + level.debug_xpos = -50; + level.debug_ypos = 250; + level.debug_yinc = 18; + level.debug_fontscale = 1.5; + level.white = ( 1, 1, 1 ); + level.green = ( 0, 1, 0 ); + level.yellow = ( 1, 1, 0 ); + level.red = ( 1, 0, 0 ); + level.realtimeengagedist = newhudelem(); + level.realtimeengagedist.alignx = "left"; + level.realtimeengagedist.fontscale = level.debug_fontscale; + level.realtimeengagedist.x = level.debug_xpos; + level.realtimeengagedist.y = level.debug_ypos; + level.realtimeengagedist.color = level.white; + level.realtimeengagedist settext( "Current Engagement Distance: " ); + xpos = level.debug_xpos + 207; + level.realtimeengagedist_value = newhudelem(); + level.realtimeengagedist_value.alignx = "left"; + level.realtimeengagedist_value.fontscale = level.debug_fontscale; + level.realtimeengagedist_value.x = xpos; + level.realtimeengagedist_value.y = level.debug_ypos; + level.realtimeengagedist_value.color = level.white; + level.realtimeengagedist_value setvalue( 0 ); + xpos += 37; + level.realtimeengagedist_middle = newhudelem(); + level.realtimeengagedist_middle.alignx = "left"; + level.realtimeengagedist_middle.fontscale = level.debug_fontscale; + level.realtimeengagedist_middle.x = xpos; + level.realtimeengagedist_middle.y = level.debug_ypos; + level.realtimeengagedist_middle.color = level.white; + level.realtimeengagedist_middle settext( " units, SHORT/LONG by " ); + xpos += 105; + level.realtimeengagedist_offvalue = newhudelem(); + level.realtimeengagedist_offvalue.alignx = "left"; + level.realtimeengagedist_offvalue.fontscale = level.debug_fontscale; + level.realtimeengagedist_offvalue.x = xpos; + level.realtimeengagedist_offvalue.y = level.debug_ypos; + level.realtimeengagedist_offvalue.color = level.white; + level.realtimeengagedist_offvalue setvalue( 0 ); + hudobjarray = []; + hudobjarray[0] = level.realtimeengagedist; + hudobjarray[1] = level.realtimeengagedist_value; + hudobjarray[2] = level.realtimeengagedist_middle; + hudobjarray[3] = level.realtimeengagedist_offvalue; + return hudobjarray; +#/ +} + +engage_dist_debug_hud_destroy( hudarray, killnotify ) +{ +/# + level waittill( killnotify ); + + for ( i = 0; i < hudarray.size; i++ ) + hudarray[i] destroy(); +#/ +} + +weapon_engage_dists_init() +{ +/# + level.engagedists = []; + genericpistol = spawnstruct(); + genericpistol.engagedistmin = 125; + genericpistol.engagedistoptimal = 225; + genericpistol.engagedistmulligan = 50; + genericpistol.engagedistmax = 400; + shotty = spawnstruct(); + shotty.engagedistmin = 50; + shotty.engagedistoptimal = 200; + shotty.engagedistmulligan = 75; + shotty.engagedistmax = 350; + genericsmg = spawnstruct(); + genericsmg.engagedistmin = 100; + genericsmg.engagedistoptimal = 275; + genericsmg.engagedistmulligan = 100; + genericsmg.engagedistmax = 500; + genericlmg = spawnstruct(); + genericlmg.engagedistmin = 325; + genericlmg.engagedistoptimal = 550; + genericlmg.engagedistmulligan = 150; + genericlmg.engagedistmax = 850; + genericriflesa = spawnstruct(); + genericriflesa.engagedistmin = 325; + genericriflesa.engagedistoptimal = 550; + genericriflesa.engagedistmulligan = 150; + genericriflesa.engagedistmax = 850; + genericriflebolt = spawnstruct(); + genericriflebolt.engagedistmin = 350; + genericriflebolt.engagedistoptimal = 600; + genericriflebolt.engagedistmulligan = 150; + genericriflebolt.engagedistmax = 900; + generichmg = spawnstruct(); + generichmg.engagedistmin = 390; + generichmg.engagedistoptimal = 600; + generichmg.engagedistmulligan = 100; + generichmg.engagedistmax = 900; + genericsniper = spawnstruct(); + genericsniper.engagedistmin = 950; + genericsniper.engagedistoptimal = 1700; + genericsniper.engagedistmulligan = 300; + genericsniper.engagedistmax = 3000; + engage_dists_add( "colt_mp", genericpistol ); + engage_dists_add( "nambu_mp", genericpistol ); + engage_dists_add( "tokarev_mp", genericpistol ); + engage_dists_add( "walther_mp", genericpistol ); + engage_dists_add( "thompson_mp", genericsmg ); + engage_dists_add( "type100_smg_mp", genericsmg ); + engage_dists_add( "ppsh_mp", genericsmg ); + engage_dists_add( "mp40_mp", genericsmg ); + engage_dists_add( "stg44_mp", genericsmg ); + engage_dists_add( "sten_mp", genericsmg ); + engage_dists_add( "sten_silenced_mp", genericsmg ); + engage_dists_add( "shotgun_mp", shotty ); + engage_dists_add( "bar_mp", genericlmg ); + engage_dists_add( "bar_bipod_mp", genericlmg ); + engage_dists_add( "type99_lmg_mp", genericlmg ); + engage_dists_add( "type99_lmg_bipod_mp", genericlmg ); + engage_dists_add( "dp28_mp", genericlmg ); + engage_dists_add( "dp28_bipod_mp", genericlmg ); + engage_dists_add( "fg42_mp", genericlmg ); + engage_dists_add( "fg42_bipod_mp", genericlmg ); + engage_dists_add( "bren_mp", genericlmg ); + engage_dists_add( "bren_bipod_mp", genericlmg ); + engage_dists_add( "m1garand_mp", genericriflesa ); + engage_dists_add( "m1garand_bayonet_mp", genericriflesa ); + engage_dists_add( "m1carbine_mp", genericriflesa ); + engage_dists_add( "m1carbine_bayonet_mp", genericriflesa ); + engage_dists_add( "svt40_mp", genericriflesa ); + engage_dists_add( "gewehr43_mp", genericriflesa ); + engage_dists_add( "springfield_mp", genericriflebolt ); + engage_dists_add( "springfield_bayonet_mp", genericriflebolt ); + engage_dists_add( "type99_rifle_mp", genericriflebolt ); + engage_dists_add( "type99_rifle_bayonet_mp", genericriflebolt ); + engage_dists_add( "mosin_rifle_mp", genericriflebolt ); + engage_dists_add( "mosin_rifle_bayonet_mp", genericriflebolt ); + engage_dists_add( "kar98k_mp", genericriflebolt ); + engage_dists_add( "kar98k_bayonet_mp", genericriflebolt ); + engage_dists_add( "lee_enfield_mp", genericriflebolt ); + engage_dists_add( "lee_enfield_bayonet_mp", genericriflebolt ); + engage_dists_add( "30cal_mp", generichmg ); + engage_dists_add( "30cal_bipod_mp", generichmg ); + engage_dists_add( "mg42_mp", generichmg ); + engage_dists_add( "mg42_bipod_mp", generichmg ); + engage_dists_add( "springfield_scoped_mp", genericsniper ); + engage_dists_add( "type99_rifle_scoped_mp", genericsniper ); + engage_dists_add( "mosin_rifle_scoped_mp", genericsniper ); + engage_dists_add( "kar98k_scoped_mp", genericsniper ); + engage_dists_add( "fg42_scoped_mp", genericsniper ); + engage_dists_add( "lee_enfield_scoped_mp", genericsniper ); + level thread engage_dists_watcher(); +#/ +} + +engage_dists_add( weapontypestr, values ) +{ +/# + level.engagedists[weapontypestr] = values; +#/ +} + +get_engage_dists( weapontypestr ) +{ +/# + if ( isdefined( level.engagedists[weapontypestr] ) ) + return level.engagedists[weapontypestr]; + else + return undefined; +#/ +} + +engage_dists_watcher() +{ +/# + level endon( "kill_all_engage_dist_debug" ); + level endon( "kill_engage_dists_watcher" ); + + while ( true ) + { + player = gethostplayer(); + playerweapon = player getcurrentweapon(); + + if ( !isdefined( player.lastweapon ) ) + player.lastweapon = playerweapon; + else if ( player.lastweapon == playerweapon ) + { + wait 0.05; + continue; + } + + values = get_engage_dists( playerweapon ); + + if ( isdefined( values ) ) + level.weaponengagedistvalues = values; + else + level.weaponengagedistvalues = undefined; + + player.lastweapon = playerweapon; + wait 0.05; + } +#/ +} + +debug_realtime_engage_dist() +{ +/# + level endon( "kill_all_engage_dist_debug" ); + level endon( "kill_realtime_engagement_distance_debug" ); + hudobjarray = engagement_distance_debug_init(); + level thread engage_dist_debug_hud_destroy( hudobjarray, "kill_all_engage_dist_debug" ); + level.debugrtengagedistcolor = level.green; + player = gethostplayer(); + + while ( true ) + { + lasttracepos = ( 0, 0, 0 ); + direction = player getplayerangles(); + direction_vec = anglestoforward( direction ); + eye = player geteye(); + eye = ( eye[0], eye[1], eye[2] + 20 ); + trace = bullettrace( eye, eye + vectorscale( direction_vec, 10000 ), 1, player ); + tracepoint = trace["position"]; + tracenormal = trace["normal"]; + tracedist = int( distance( eye, tracepoint ) ); + + if ( tracepoint != lasttracepos ) + { + lasttracepos = tracepoint; + + if ( !isdefined( level.weaponengagedistvalues ) ) + { + hudobj_changecolor( hudobjarray, level.white ); + hudobjarray engagedist_hud_changetext( "nodata", tracedist ); + } + else + { + engagedistmin = level.weaponengagedistvalues.engagedistmin; + engagedistoptimal = level.weaponengagedistvalues.engagedistoptimal; + engagedistmulligan = level.weaponengagedistvalues.engagedistmulligan; + engagedistmax = level.weaponengagedistvalues.engagedistmax; + + if ( tracedist >= engagedistmin && tracedist <= engagedistmax ) + { + if ( tracedist >= engagedistoptimal - engagedistmulligan && tracedist <= engagedistoptimal + engagedistmulligan ) + { + hudobjarray engagedist_hud_changetext( "optimal", tracedist ); + hudobj_changecolor( hudobjarray, level.green ); + } + else + { + hudobjarray engagedist_hud_changetext( "ok", tracedist ); + hudobj_changecolor( hudobjarray, level.yellow ); + } + } + else if ( tracedist < engagedistmin ) + { + hudobj_changecolor( hudobjarray, level.red ); + hudobjarray engagedist_hud_changetext( "short", tracedist ); + } + else if ( tracedist > engagedistmax ) + { + hudobj_changecolor( hudobjarray, level.red ); + hudobjarray engagedist_hud_changetext( "long", tracedist ); + } + } + } + + thread plot_circle_fortime( 1, 5, 0.05, level.debugrtengagedistcolor, tracepoint, tracenormal ); + thread plot_circle_fortime( 1, 1, 0.05, level.debugrtengagedistcolor, tracepoint, tracenormal ); + wait 0.05; + } +#/ +} + +hudobj_changecolor( hudobjarray, newcolor ) +{ +/# + for ( i = 0; i < hudobjarray.size; i++ ) + { + hudobj = hudobjarray[i]; + + if ( hudobj.color != newcolor ) + { + hudobj.color = newcolor; + level.debugrtengagedistcolor = newcolor; + } + } +#/ +} + +engagedist_hud_changetext( engagedisttype, units ) +{ +/# + if ( !isdefined( level.lastdisttype ) ) + level.lastdisttype = "none"; + + if ( engagedisttype == "optimal" ) + { + self[1] setvalue( units ); + self[2] settext( "units: OPTIMAL!" ); + self[3].alpha = 0; + } + else if ( engagedisttype == "ok" ) + { + self[1] setvalue( units ); + self[2] settext( "units: OK!" ); + self[3].alpha = 0; + } + else if ( engagedisttype == "short" ) + { + amountunder = level.weaponengagedistvalues.engagedistmin - units; + self[1] setvalue( units ); + self[3] setvalue( amountunder ); + self[3].alpha = 1; + + if ( level.lastdisttype != engagedisttype ) + self[2] settext( "units: SHORT by " ); + } + else if ( engagedisttype == "long" ) + { + amountover = units - level.weaponengagedistvalues.engagedistmax; + self[1] setvalue( units ); + self[3] setvalue( amountover ); + self[3].alpha = 1; + + if ( level.lastdisttype != engagedisttype ) + self[2] settext( "units: LONG by " ); + } + else if ( engagedisttype == "nodata" ) + { + self[1] setvalue( units ); + self[2] settext( " units: (NO CURRENT WEAPON VALUES)" ); + self[3].alpha = 0; + } + + level.lastdisttype = engagedisttype; +#/ +} + +plot_circle_fortime( radius1, radius2, time, color, origin, normal ) +{ +/# + if ( !isdefined( color ) ) + color = ( 0, 1, 0 ); + + hangtime = 0.05; + circleres = 6; + hemires = circleres / 2; + circleinc = 360 / circleres; + circleres++; + plotpoints = []; + rad = 0.0; + timer = gettime() + time * 1000; + radius = radius1; + + while ( gettime() < timer ) + { + radius = radius2; + angletoplayer = vectortoangles( normal ); + + for ( i = 0; i < circleres; i++ ) + { + plotpoints[plotpoints.size] = origin + vectorscale( anglestoforward( angletoplayer + ( rad, 90, 0 ) ), radius ); + rad += circleinc; + } + + maps\mp\_utility::plot_points( plotpoints, color[0], color[1], color[2], hangtime ); + plotpoints = []; + wait( hangtime ); + } +#/ +} + +larry_thread() +{ +/# + setdvar( "bot_AllowMovement", "0" ); + setdvar( "bot_PressAttackBtn", "0" ); + setdvar( "bot_PressMeleeBtn", "0" ); + level.larry = spawnstruct(); + player = gethostplayer(); + player thread larry_init( level.larry ); + + level waittill( "kill_larry" ); + + larry_hud_destroy( level.larry ); + + if ( isdefined( level.larry.model ) ) + level.larry.model delete(); + + if ( isdefined( level.larry.ai ) ) + { + for ( i = 0; i < level.larry.ai.size; i++ ) + kick( level.larry.ai[i] getentitynumber() ); + } + + level.larry = undefined; +#/ +} + +larry_init( larry ) +{ +/# + level endon( "kill_larry" ); + larry_hud_init( larry ); + larry.model = spawn( "script_model", ( 0, 0, 0 ) ); + larry.model setmodel( "defaultactor" ); + larry.ai = []; + wait 0.1; + + for (;;) + { + wait 0.05; + + if ( larry.ai.size > 0 ) + { + larry.model hide(); + continue; + } + + direction = self getplayerangles(); + direction_vec = anglestoforward( direction ); + eye = self geteye(); + trace = bullettrace( eye, eye + vectorscale( direction_vec, 8000 ), 0, undefined ); + dist = distance( eye, trace["position"] ); + position = eye + vectorscale( direction_vec, dist - 64 ); + larry.model.origin = position; + larry.model.angles = self.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); + + if ( self usebuttonpressed() ) + { + self larry_ai( larry ); + + while ( self usebuttonpressed() ) + wait 0.05; + } + } +#/ +} + +larry_ai( larry ) +{ +/# + larry.ai[larry.ai.size] = addtestclient(); + i = larry.ai.size - 1; + larry.ai[i].pers["isBot"] = 1; + larry.ai[i] thread testclient( "autoassign" ); + larry.ai[i] thread larry_ai_thread( larry, larry.model.origin, larry.model.angles ); + larry.ai[i] thread larry_ai_damage( larry ); + larry.ai[i] thread larry_ai_health( larry ); +#/ +} + +larry_ai_thread( larry, origin, angles ) +{ +/# + level endon( "kill_larry" ); + + for (;;) + { + self waittill( "spawned_player" ); + + larry.menu[larry.menu_health] setvalue( self.health ); + larry.menu[larry.menu_damage] settext( "" ); + larry.menu[larry.menu_range] settext( "" ); + larry.menu[larry.menu_hitloc] settext( "" ); + larry.menu[larry.menu_weapon] settext( "" ); + larry.menu[larry.menu_perks] settext( "" ); + self setorigin( origin ); + self setplayerangles( angles ); + self clearperks(); + } +#/ +} + +larry_ai_damage( larry ) +{ +/# + level endon( "kill_larry" ); + + for (;;) + { + self waittill( "damage", damage, attacker, dir, point ); + + if ( !isdefined( attacker ) ) + continue; + + player = gethostplayer(); + + if ( !isdefined( player ) ) + continue; + + if ( attacker != player ) + continue; + + eye = player geteye(); + range = int( distance( eye, point ) ); + larry.menu[larry.menu_health] setvalue( self.health ); + larry.menu[larry.menu_damage] setvalue( damage ); + larry.menu[larry.menu_range] setvalue( range ); + + if ( isdefined( self.cac_debug_location ) ) + larry.menu[larry.menu_hitloc] settext( self.cac_debug_location ); + else + larry.menu[larry.menu_hitloc] settext( "" ); + + if ( isdefined( self.cac_debug_weapon ) ) + { + larry.menu[larry.menu_weapon] settext( self.cac_debug_weapon ); + continue; + } + + larry.menu[larry.menu_weapon] settext( "" ); + } +#/ +} + +larry_ai_health( larry ) +{ +/# + level endon( "kill_larry" ); + + for (;;) + { + wait 0.05; + larry.menu[larry.menu_health] setvalue( self.health ); + } +#/ +} + +larry_hud_init( larry ) +{ +/# + x = -45; + y = 275; + menu_name = "larry_menu"; + larry.hud = new_hud( menu_name, undefined, x, y, 1 ); + larry.hud setshader( "white", 135, 65 ); + larry.hud.alignx = "left"; + larry.hud.aligny = "top"; + larry.hud.sort = 10; + larry.hud.alpha = 0.6; + larry.hud.color = vectorscale( ( 0, 0, 1 ), 0.5 ); + larry.menu[0] = new_hud( menu_name, "Larry Health:", x + 5, y + 10, 1 ); + larry.menu[1] = new_hud( menu_name, "Damage:", x + 5, y + 20, 1 ); + larry.menu[2] = new_hud( menu_name, "Range:", x + 5, y + 30, 1 ); + larry.menu[3] = new_hud( menu_name, "Hit Location:", x + 5, y + 40, 1 ); + larry.menu[4] = new_hud( menu_name, "Weapon:", x + 5, y + 50, 1 ); + larry.cleartextmarker = newdebughudelem(); + larry.cleartextmarker.alpha = 0; + larry.cleartextmarker settext( "marker" ); + larry.menu_health = larry.menu.size; + larry.menu_damage = larry.menu.size + 1; + larry.menu_range = larry.menu.size + 2; + larry.menu_hitloc = larry.menu.size + 3; + larry.menu_weapon = larry.menu.size + 4; + larry.menu_perks = larry.menu.size + 5; + x_offset = 70; + larry.menu[larry.menu_health] = new_hud( menu_name, "", x + x_offset, y + 10, 1 ); + larry.menu[larry.menu_damage] = new_hud( menu_name, "", x + x_offset, y + 20, 1 ); + larry.menu[larry.menu_range] = new_hud( menu_name, "", x + x_offset, y + 30, 1 ); + larry.menu[larry.menu_hitloc] = new_hud( menu_name, "", x + x_offset, y + 40, 1 ); + larry.menu[larry.menu_weapon] = new_hud( menu_name, "", x + x_offset, y + 50, 1 ); + larry.menu[larry.menu_perks] = new_hud( menu_name, "", x + x_offset, y + 60, 1 ); +#/ +} + +larry_hud_destroy( larry ) +{ +/# + if ( isdefined( larry.hud ) ) + { + larry.hud destroy(); + + for ( i = 0; i < larry.menu.size; i++ ) + larry.menu[i] destroy(); + + larry.cleartextmarker destroy(); + } +#/ +} + +new_hud( hud_name, msg, x, y, scale ) +{ +/# + if ( !isdefined( level.hud_array ) ) + level.hud_array = []; + + if ( !isdefined( level.hud_array[hud_name] ) ) + level.hud_array[hud_name] = []; + + hud = set_hudelem( msg, x, y, scale ); + level.hud_array[hud_name][level.hud_array[hud_name].size] = hud; + return hud; +#/ +} + +set_hudelem( text, x, y, scale, alpha, sort, debug_hudelem ) +{ +/# + if ( !isdefined( alpha ) ) + alpha = 1; + + if ( !isdefined( scale ) ) + scale = 1; + + if ( !isdefined( sort ) ) + sort = 20; + + hud = newdebughudelem(); + hud.debug_hudelem = 1; + hud.location = 0; + hud.alignx = "left"; + hud.aligny = "middle"; + hud.foreground = 1; + hud.fontscale = scale; + hud.sort = sort; + hud.alpha = alpha; + hud.x = x; + hud.y = y; + hud.og_scale = scale; + + if ( isdefined( text ) ) + hud settext( text ); + + return hud; +#/ +} + +watch_botsdvars() +{ +/# + hasplayerweaponprev = getdvarint( "scr_botsHasPlayerWeapon" ); + grenadesonlyprev = getdvarint( "scr_botsGrenadesOnly" ); + secondarygrenadesonlyprev = getdvarint( "scr_botsSpecialGrenadesOnly" ); + + while ( true ) + { + if ( hasplayerweaponprev != getdvarint( "scr_botsHasPlayerWeapon" ) ) + { + hasplayerweaponprev = getdvarint( "scr_botsHasPlayerWeapon" ); + + if ( hasplayerweaponprev ) + iprintlnbold( "LARRY has player weapon: ON" ); + else + iprintlnbold( "LARRY has player weapon: OFF" ); + } + + if ( grenadesonlyprev != getdvarint( "scr_botsGrenadesOnly" ) ) + { + grenadesonlyprev = getdvarint( "scr_botsGrenadesOnly" ); + + if ( grenadesonlyprev ) + iprintlnbold( "LARRY using grenades only: ON" ); + else + iprintlnbold( "LARRY using grenades only: OFF" ); + } + + if ( secondarygrenadesonlyprev != getdvarint( "scr_botsSpecialGrenadesOnly" ) ) + { + secondarygrenadesonlyprev = getdvarint( "scr_botsSpecialGrenadesOnly" ); + + if ( secondarygrenadesonlyprev ) + iprintlnbold( "LARRY using secondary grenades only: ON" ); + else + iprintlnbold( "LARRY using secondary grenades only: OFF" ); + } + + wait 1.0; + } +#/ +} + +getattachmentchangemodifierbutton() +{ +/# + return "BUTTON_X"; +#/ +} + +watchattachmentchange() +{ +/# + self endon( "disconnect" ); + clientnum = self getentitynumber(); + + if ( clientnum != 0 ) + return; + + dpad_left = 0; + dpad_right = 0; + dpad_up = 0; + dpad_down = 0; + lstick_down = 0; + dpad_modifier_button = getattachmentchangemodifierbutton(); + + for (;;) + { + if ( self buttonpressed( dpad_modifier_button ) ) + { + if ( !dpad_left && self buttonpressed( "DPAD_LEFT" ) ) + { + self giveweaponnextattachment( "muzzle" ); + dpad_left = 1; + self thread print_weapon_name(); + } + + if ( !dpad_right && self buttonpressed( "DPAD_RIGHT" ) ) + { + self giveweaponnextattachment( "trigger" ); + dpad_right = 1; + self thread print_weapon_name(); + } + + if ( !dpad_up && self buttonpressed( "DPAD_UP" ) ) + { + self giveweaponnextattachment( "top" ); + dpad_up = 1; + self thread print_weapon_name(); + } + + if ( !dpad_down && self buttonpressed( "DPAD_DOWN" ) ) + { + self giveweaponnextattachment( "bottom" ); + dpad_down = 1; + self thread print_weapon_name(); + } + + if ( !lstick_down && self buttonpressed( "BUTTON_LSTICK" ) ) + { + self giveweaponnextattachment( "gunperk" ); + lstick_down = 1; + self thread print_weapon_name(); + } + } + + if ( !self buttonpressed( "DPAD_LEFT" ) ) + dpad_left = 0; + + if ( !self buttonpressed( "DPAD_RIGHT" ) ) + dpad_right = 0; + + if ( !self buttonpressed( "DPAD_UP" ) ) + dpad_up = 0; + + if ( !self buttonpressed( "DPAD_DOWN" ) ) + dpad_down = 0; + + if ( !self buttonpressed( "BUTTON_LSTICK" ) ) + lstick_down = 0; + + wait 0.05; + } +#/ +} + +print_weapon_name() +{ +/# + self notify( "print_weapon_name" ); + self endon( "print_weapon_name" ); + wait 0.2; + + if ( self isswitchingweapons() ) + { + self waittill( "weapon_change_complete", weapon_name ); + + fail_safe = 0; + + while ( weapon_name == "none" ) + { + self waittill( "weapon_change_complete", weapon_name ); + + wait 0.05; + fail_safe++; + + if ( fail_safe > 120 ) + break; + } + } + else + weapon_name = self getcurrentweapon(); + + printweaponname = getdvarintdefault( "scr_print_weapon_name", 1 ); + + if ( printweaponname ) + iprintlnbold( weapon_name ); +#/ +} + +set_equipment_list() +{ +/# + if ( isdefined( level.dev_equipment ) ) + return; + + level.dev_equipment = []; + level.dev_equipment[1] = "acoustic_sensor_mp"; + level.dev_equipment[2] = "camera_spike_mp"; + level.dev_equipment[3] = "claymore_mp"; + level.dev_equipment[4] = "satchel_charge_mp"; + level.dev_equipment[5] = "scrambler_mp"; + level.dev_equipment[6] = "tactical_insertion_mp"; + level.dev_equipment[7] = "bouncingbetty_mp"; + level.dev_equipment[8] = "trophy_system_mp"; + level.dev_equipment[9] = "pda_hack_mp"; +#/ +} + +set_grenade_list() +{ +/# + if ( isdefined( level.dev_grenade ) ) + return; + + level.dev_grenade = []; + level.dev_grenade[1] = "frag_grenade_mp"; + level.dev_grenade[2] = "sticky_grenade_mp"; + level.dev_grenade[3] = "hatchet_mp"; + level.dev_grenade[4] = "willy_pete_mp"; + level.dev_grenade[5] = "proximity_grenade_mp"; + level.dev_grenade[6] = "flash_grenade_mp"; + level.dev_grenade[7] = "concussion_grenade_mp"; + level.dev_grenade[8] = "nightingale_mp"; + level.dev_grenade[9] = "emp_grenade_mp"; + level.dev_grenade[10] = "sensor_grenade_mp"; +#/ +} + +take_all_grenades_and_equipment( player ) +{ +/# + for ( i = 0; i < level.dev_equipment.size; i++ ) + player takeweapon( level.dev_equipment[i + 1] ); + + for ( i = 0; i < level.dev_grenade.size; i++ ) + player takeweapon( level.dev_grenade[i + 1] ); +#/ +} + +equipment_dev_gui() +{ +/# + set_equipment_list(); + set_grenade_list(); + setdvar( "scr_give_equipment", "" ); + + while ( true ) + { + wait 0.5; + devgui_int = getdvarint( "scr_give_equipment" ); + + if ( devgui_int != 0 ) + { + for ( i = 0; i < level.players.size; i++ ) + { + take_all_grenades_and_equipment( level.players[i] ); + level.players[i] giveweapon( level.dev_equipment[devgui_int] ); + } + + setdvar( "scr_give_equipment", "0" ); + } + } +#/ +} + +grenade_dev_gui() +{ +/# + set_equipment_list(); + set_grenade_list(); + setdvar( "scr_give_grenade", "" ); + + while ( true ) + { + wait 0.5; + devgui_int = getdvarint( "scr_give_grenade" ); + + if ( devgui_int != 0 ) + { + for ( i = 0; i < level.players.size; i++ ) + { + take_all_grenades_and_equipment( level.players[i] ); + level.players[i] giveweapon( level.dev_grenade[devgui_int] ); + } + + setdvar( "scr_give_grenade", "0" ); + } + } +#/ +} + +force_grenade_throw( weapon ) +{ +/# + setdvar( "bot_AllowMovement", "0" ); + setdvar( "bot_PressAttackBtn", "0" ); + setdvar( "bot_PressMeleeBtn", "0" ); + setdvar( "scr_botsAllowKillstreaks", "0" ); + host = gethostplayer(); + + if ( !isdefined( host.team ) ) + { + iprintln( "Unable to determine host player team" ); + return; + } + + bot = getormakebot( getotherteam( host.team ) ); + + if ( !isdefined( bot ) ) + { + iprintln( "Could not add test client" ); + return; + } + + angles = host getplayerangles(); + angles = ( 0, angles[1], 0 ); + dir = anglestoforward( angles ); + dir = vectornormalize( dir ); + origin = host geteye() + vectorscale( dir, 256 ); + velocity = vectorscale( dir, -1024 ); + grenade = bot magicgrenade( weapon, origin, velocity ); + grenade setteam( bot.team ); + grenade setowner( bot ); +#/ +} + +bot_dpad_think() +{ +/# + level notify( "bot_dpad_stop" ); + level endon( "bot_dpad_stop" ); + level endon( "bot_dpad_terminate" ); + + if ( !isdefined( level.bot_index ) ) + level.bot_index = 0; + + host = gethostplayer(); + + while ( !isdefined( host ) ) + { + wait 0.5; + host = gethostplayer(); + level.bot_index = 0; + } + + dpad_left = 0; + dpad_right = 0; + + for (;;) + { + wait 0.05; + host setactionslot( 3, "" ); + host setactionslot( 4, "" ); + players = get_players(); + max = players.size; + + if ( !dpad_left && host buttonpressed( "DPAD_LEFT" ) ) + { + level.bot_index--; + + if ( level.bot_index < 0 ) + level.bot_index = max - 1; + + if ( !players[level.bot_index] is_bot() ) + continue; + + dpad_left = 1; + } + else if ( !host buttonpressed( "DPAD_LEFT" ) ) + dpad_left = 0; + + if ( !dpad_right && host buttonpressed( "DPAD_RIGHT" ) ) + { + level.bot_index++; + + if ( level.bot_index >= max ) + level.bot_index = 0; + + if ( !players[level.bot_index] is_bot() ) + continue; + + dpad_right = 1; + } + else if ( !host buttonpressed( "DPAD_RIGHT" ) ) + dpad_right = 0; + + level notify( "bot_index_changed" ); + } +#/ +} + +bot_overlay_think() +{ +/# + level endon( "bot_overlay_stop" ); + level thread bot_dpad_think(); + iprintln( "Previous Bot bound to D-Pad Left" ); + iprintln( "Next Bot bound to D-Pad Right" ); + + for (;;) + { + if ( getdvarint( "bot_Debug" ) != level.bot_index ) + setdvar( "bot_Debug", level.bot_index ); + + level waittill( "bot_index_changed" ); + } +#/ +} + +bot_threat_think() +{ +/# + level endon( "bot_threat_stop" ); + level thread bot_dpad_think(); + iprintln( "Previous Bot bound to D-Pad Left" ); + iprintln( "Next Bot bound to D-Pad Right" ); + + for (;;) + { + if ( getdvarint( "bot_DebugThreat" ) != level.bot_index ) + setdvar( "bot_DebugThreat", level.bot_index ); + + level waittill( "bot_index_changed" ); + } +#/ +} + +bot_path_think() +{ +/# + level endon( "bot_path_stop" ); + level thread bot_dpad_think(); + iprintln( "Previous Bot bound to D-Pad Left" ); + iprintln( "Next Bot bound to D-Pad Right" ); + + for (;;) + { + if ( getdvarint( "bot_DebugPaths" ) != level.bot_index ) + setdvar( "bot_DebugPaths", level.bot_index ); + + level waittill( "bot_index_changed" ); + } +#/ +} + +bot_overlay_stop() +{ +/# + level notify( "bot_overlay_stop" ); + setdvar( "bot_Debug", "-1" ); +#/ +} + +bot_path_stop() +{ +/# + level notify( "bot_path_stop" ); + setdvar( "bot_DebugPaths", "-1" ); +#/ +} + +bot_threat_stop() +{ +/# + level notify( "bot_threat_stop" ); + setdvar( "bot_DebugThreat", "-1" ); +#/ +} + +devstraferunpathdebugdraw() +{ +/# + white = ( 1, 1, 1 ); + red = ( 1, 0, 0 ); + green = ( 0, 1, 0 ); + blue = ( 0, 0, 1 ); + violet = ( 0.4, 0, 0.6 ); + maxdrawtime = 10; + drawtime = maxdrawtime; + origintextoffset = vectorscale( ( 0, 0, -1 ), 50.0 ); + endonmsg = "devStopStrafeRunPathDebugDraw"; + + while ( true ) + { + if ( getdvarint( "scr_devStrafeRunPathDebugDraw" ) > 0 ) + { + nodes = []; + end = 0; + node = getvehiclenode( "warthog_start", "targetname" ); + + if ( !isdefined( node ) ) + { + println( "No strafe run path found" ); + setdvar( "scr_devStrafeRunPathDebugDraw", "0" ); + continue; + } + + while ( isdefined( node.target ) ) + { + new_node = getvehiclenode( node.target, "targetname" ); + + foreach ( n in nodes ) + { + if ( n == new_node ) + end = 1; + } + + textscale = 30; + + if ( drawtime == maxdrawtime ) + node thread drawpathsegment( new_node, violet, violet, 1, textscale, origintextoffset, drawtime, endonmsg ); + + if ( isdefined( node.script_noteworthy ) ) + { + textscale = 10; + + switch ( node.script_noteworthy ) + { + case "strafe_start": + textcolor = green; + textalpha = 1; + break; + case "strafe_stop": + textcolor = red; + textalpha = 1; + break; + case "strafe_leave": + textcolor = white; + textalpha = 1; + break; + } + + switch ( node.script_noteworthy ) + { + case "strafe_stop": + case "strafe_start": + case "strafe_leave": + sides = 10; + radius = 100; + + if ( drawtime == maxdrawtime ) + sphere( node.origin, radius, textcolor, textalpha, 1, sides, drawtime * 1000 ); + + node draworiginlines(); + node drawnoteworthytext( textcolor, textalpha, textscale ); + break; + } + } + + if ( end ) + break; + + nodes[nodes.size] = new_node; + node = new_node; + } + + drawtime -= 0.05; + + if ( drawtime < 0 ) + drawtime = maxdrawtime; + + wait 0.05; + } + else + wait 1; + } +#/ +} + +devhelipathdebugdraw() +{ +/# + white = ( 1, 1, 1 ); + red = ( 1, 0, 0 ); + green = ( 0, 1, 0 ); + blue = ( 0, 0, 1 ); + textcolor = white; + textalpha = 1; + textscale = 1; + maxdrawtime = 10; + drawtime = maxdrawtime; + origintextoffset = vectorscale( ( 0, 0, -1 ), 50.0 ); + endonmsg = "devStopHeliPathsDebugDraw"; + + while ( true ) + { + if ( getdvarint( "scr_devHeliPathsDebugDraw" ) > 0 ) + { + script_origins = getentarray( "script_origin", "classname" ); + + foreach ( ent in script_origins ) + { + if ( isdefined( ent.targetname ) ) + { + switch ( ent.targetname ) + { + case "heli_start": + textcolor = blue; + textalpha = 1; + textscale = 3; + break; + case "heli_loop_start": + textcolor = green; + textalpha = 1; + textscale = 3; + break; + case "heli_attack_area": + textcolor = red; + textalpha = 1; + textscale = 3; + break; + case "heli_leave": + textcolor = white; + textalpha = 1; + textscale = 3; + break; + } + + switch ( ent.targetname ) + { + case "heli_start": + case "heli_loop_start": + case "heli_leave": + case "heli_attack_area": + if ( drawtime == maxdrawtime ) + ent thread drawpath( textcolor, white, textalpha, textscale, origintextoffset, drawtime, endonmsg ); + + ent draworiginlines(); + ent drawtargetnametext( textcolor, textalpha, textscale ); + ent draworigintext( textcolor, textalpha, textscale, origintextoffset ); + break; + } + } + } + + drawtime -= 0.05; + + if ( drawtime < 0 ) + drawtime = maxdrawtime; + } + + if ( getdvarint( "scr_devHeliPathsDebugDraw" ) == 0 ) + { + level notify( endonmsg ); + drawtime = maxdrawtime; + wait 1; + } + + wait 0.05; + } +#/ +} + +draworiginlines() +{ +/# + red = ( 1, 0, 0 ); + green = ( 0, 1, 0 ); + blue = ( 0, 0, 1 ); + line( self.origin, self.origin + anglestoforward( self.angles ) * 10, red ); + line( self.origin, self.origin + anglestoright( self.angles ) * 10, green ); + line( self.origin, self.origin + anglestoup( self.angles ) * 10, blue ); +#/ +} + +drawtargetnametext( textcolor, textalpha, textscale, textoffset ) +{ +/# + if ( !isdefined( textoffset ) ) + textoffset = ( 0, 0, 0 ); + + print3d( self.origin + textoffset, self.targetname, textcolor, textalpha, textscale ); +#/ +} + +drawnoteworthytext( textcolor, textalpha, textscale, textoffset ) +{ +/# + if ( !isdefined( textoffset ) ) + textoffset = ( 0, 0, 0 ); + + print3d( self.origin + textoffset, self.script_noteworthy, textcolor, textalpha, textscale ); +#/ +} + +draworigintext( textcolor, textalpha, textscale, textoffset ) +{ +/# + if ( !isdefined( textoffset ) ) + textoffset = ( 0, 0, 0 ); + + originstring = "(" + self.origin[0] + ", " + self.origin[1] + ", " + self.origin[2] + ")"; + print3d( self.origin + textoffset, originstring, textcolor, textalpha, textscale ); +#/ +} + +drawspeedacceltext( textcolor, textalpha, textscale, textoffset ) +{ +/# + if ( isdefined( self.script_airspeed ) ) + print3d( self.origin + ( 0, 0, textoffset[2] * 2 ), "script_airspeed:" + self.script_airspeed, textcolor, textalpha, textscale ); + + if ( isdefined( self.script_accel ) ) + print3d( self.origin + ( 0, 0, textoffset[2] * 3 ), "script_accel:" + self.script_accel, textcolor, textalpha, textscale ); +#/ +} + +drawpath( linecolor, textcolor, textalpha, textscale, textoffset, drawtime, endonmsg ) +{ +/# + level endon( endonmsg ); + ent = self; + entfirsttarget = ent.targetname; + + while ( isdefined( ent.target ) ) + { + enttarget = getent( ent.target, "targetname" ); + ent thread drawpathsegment( enttarget, linecolor, textcolor, textalpha, textscale, textoffset, drawtime, endonmsg ); + + if ( ent.targetname == "heli_loop_start" ) + entfirsttarget = ent.target; + else if ( ent.target == entfirsttarget ) + break; + + ent = enttarget; + wait 0.05; + } +#/ +} + +drawpathsegment( enttarget, linecolor, textcolor, textalpha, textscale, textoffset, drawtime, endonmsg ) +{ +/# + level endon( endonmsg ); + + while ( drawtime > 0 ) + { + if ( isdefined( self.targetname ) && self.targetname == "warthog_start" ) + print3d( self.origin + textoffset, self.targetname, textcolor, textalpha, textscale ); + + line( self.origin, enttarget.origin, linecolor ); + self drawspeedacceltext( textcolor, textalpha, textscale, textoffset ); + drawtime -= 0.05; + wait 0.05; + } +#/ +} + +get_lookat_origin( player ) +{ +/# + angles = player getplayerangles(); + forward = anglestoforward( angles ); + dir = vectorscale( forward, 8000 ); + eye = player geteye(); + trace = bullettrace( eye, eye + dir, 0, undefined ); + return trace["position"]; +#/ +} + +draw_pathnode( node, color ) +{ +/# + if ( !isdefined( color ) ) + color = ( 1, 0, 1 ); + + box( node.origin, vectorscale( ( -1, -1, 0 ), 16.0 ), vectorscale( ( 1, 1, 1 ), 16.0 ), 0, color, 1, 0, 1 ); +#/ +} + +draw_pathnode_think( node, color ) +{ +/# + level endon( "draw_pathnode_stop" ); + + for (;;) + { + draw_pathnode( node, color ); + wait 0.05; + } +#/ +} + +draw_pathnodes_stop() +{ +/# + wait 5; + level notify( "draw_pathnode_stop" ); +#/ +} + +node_get( player ) +{ +/# + for (;;) + { + wait 0.05; + origin = get_lookat_origin( player ); + node = getnearestnode( origin ); + + if ( !isdefined( node ) ) + continue; + + if ( player buttonpressed( "BUTTON_A" ) ) + return node; + else if ( player buttonpressed( "BUTTON_B" ) ) + return undefined; + + if ( node.type == "Path" ) + { + draw_pathnode( node, ( 1, 0, 1 ) ); + continue; + } + + draw_pathnode( node, ( 0.85, 0.85, 0.1 ) ); + } +#/ +} + +dev_get_node_pair() +{ +/# + player = gethostplayer(); + start = undefined; + + while ( !isdefined( start ) ) + { + start = node_get( player ); + + if ( player buttonpressed( "BUTTON_B" ) ) + { + level notify( "draw_pathnode_stop" ); + return undefined; + } + } + + level thread draw_pathnode_think( start, ( 0, 1, 0 ) ); + + while ( player buttonpressed( "BUTTON_A" ) ) + wait 0.05; + + end = undefined; + + while ( !isdefined( end ) ) + { + end = node_get( player ); + + if ( player buttonpressed( "BUTTON_B" ) ) + { + level notify( "draw_pathnode_stop" ); + return undefined; + } + } + + level thread draw_pathnode_think( end, ( 0, 1, 0 ) ); + level thread draw_pathnodes_stop(); + array = []; + array[0] = start; + array[1] = end; + return array; +#/ +} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_dev_class.gsc b/MP/Core/maps/mp/gametypes/_dev_class.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/_dev_class.gsc rename to MP/Core/maps/mp/gametypes/_dev_class.gsc index d538569..3c0794f 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_dev_class.gsc +++ b/MP/Core/maps/mp/gametypes/_dev_class.gsc @@ -1,5 +1,7 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_dev; dev_cac_init() { @@ -444,7 +446,7 @@ dev_cac_gdt_update_think() { level waittill( "gdt_update", asset, keyvalue ); - keyvalue = strtok( keyvalue, "\" ); + keyvalue = strtok( keyvalue, "\\" ); key = keyvalue[0]; switch ( key ) diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_friendicons.gsc b/MP/Core/maps/mp/gametypes/_friendicons.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/_friendicons.gsc rename to MP/Core/maps/mp/gametypes/_friendicons.gsc index b9ff4ce..154df57 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_friendicons.gsc +++ b/MP/Core/maps/mp/gametypes/_friendicons.gsc @@ -10,12 +10,8 @@ init() setdvar( "scr_drawfriend", "0" ); level.drawfriend = getdvarint( "scr_drawfriend" ); -/# assert( isdefined( game["headicon_allies"] ), "Allied head icons are not defined. Check the team set for the level." ); -#/ -/# assert( isdefined( game["headicon_axis"] ), "Axis head icons are not defined. Check the team set for the level." ); -#/ precacheheadicon( game["headicon_allies"] ); precacheheadicon( game["headicon_axis"] ); level thread onplayerconnect(); diff --git a/MP/Core/maps/mp/gametypes/_gameobjects.gsc b/MP/Core/maps/mp/gametypes/_gameobjects.gsc new file mode 100644 index 0000000..9a2738e --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_gameobjects.gsc @@ -0,0 +1,2556 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_objpoints; +#include maps\mp\gametypes\_weapons; +#include maps\mp\gametypes\_hostmigration; +#include maps\mp\killstreaks\_killstreaks; +#include maps\mp\killstreaks\_radar; +#include maps\mp\gametypes\_tweakables; + +main( allowed ) +{ + level.vehiclesenabled = getgametypesetting( "vehiclesEnabled" ); + level.vehiclestimed = getgametypesetting( "vehiclesTimed" ); + level.objectivepingdelay = getgametypesetting( "objectivePingTime" ); + level.nonteambasedteam = "allies"; +/# + if ( level.script == "mp_vehicle_test" ) + level.vehiclesenabled = 1; +#/ + if ( level.vehiclesenabled ) + { + allowed[allowed.size] = "vehicle"; + filter_script_vehicles_from_vehicle_descriptors( allowed ); + } + + entities = getentarray(); + + for ( entity_index = entities.size - 1; entity_index >= 0; entity_index-- ) + { + entity = entities[entity_index]; + + if ( !entity_is_allowed( entity, allowed ) ) + entity delete(); + } +} + +entity_is_allowed( entity, allowed_game_modes ) +{ + if ( isdefined( level.createfx_enabled ) && level.createfx_enabled ) + return 1; + + allowed = 1; + + if ( isdefined( entity.script_gameobjectname ) && entity.script_gameobjectname != "[all_modes]" ) + { + allowed = 0; + gameobjectnames = strtok( entity.script_gameobjectname, " " ); + + for ( i = 0; i < allowed_game_modes.size && !allowed; i++ ) + { + for ( j = 0; j < gameobjectnames.size && !allowed; j++ ) + allowed = gameobjectnames[j] == allowed_game_modes[i]; + } + } + + return allowed; +} + +filter_script_vehicles_from_vehicle_descriptors( allowed_game_modes ) +{ + vehicle_descriptors = getentarray( "vehicle_descriptor", "targetname" ); + script_vehicles = getentarray( "script_vehicle", "classname" ); + vehicles_to_remove = []; + + for ( descriptor_index = 0; descriptor_index < vehicle_descriptors.size; descriptor_index++ ) + { + descriptor = vehicle_descriptors[descriptor_index]; + closest_distance_sq = 1000000000000.0; + closest_vehicle = undefined; + + for ( vehicle_index = 0; vehicle_index < script_vehicles.size; vehicle_index++ ) + { + vehicle = script_vehicles[vehicle_index]; + dsquared = distancesquared( vehicle getorigin(), descriptor getorigin() ); + + if ( dsquared < closest_distance_sq ) + { + closest_distance_sq = dsquared; + closest_vehicle = vehicle; + } + } + + if ( isdefined( closest_vehicle ) ) + { + if ( !entity_is_allowed( descriptor, allowed_game_modes ) ) + vehicles_to_remove[vehicles_to_remove.size] = closest_vehicle; + } + } + + for ( vehicle_index = 0; vehicle_index < vehicles_to_remove.size; vehicle_index++ ) + vehicles_to_remove[vehicle_index] delete(); +} + +init() +{ + level.numgametypereservedobjectives = 0; + level.releasedobjectives = []; + + if ( !sessionmodeiszombiesgame() ) + { + precacheitem( "briefcase_bomb_mp" ); + precacheitem( "briefcase_bomb_defuse_mp" ); + } + + level thread onplayerconnect(); +} + +onplayerconnect() +{ + level endon( "game_ended" ); + + for (;;) + { + level waittill( "connecting", player ); + + player thread onplayerspawned(); + player thread ondisconnect(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + level endon( "game_ended" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread ondeath(); + self.touchtriggers = []; + self.carryobject = undefined; + self.claimtrigger = undefined; + self.canpickupobject = 1; + self.disabledweapon = 0; + self.killedinuse = undefined; + } +} + +ondeath() +{ + level endon( "game_ended" ); + + self waittill( "death" ); + + if ( isdefined( self.carryobject ) ) + self.carryobject thread setdropped(); +} + +ondisconnect() +{ + level endon( "game_ended" ); + + self waittill( "disconnect" ); + + if ( isdefined( self.carryobject ) ) + self.carryobject thread setdropped(); +} + +createcarryobject( ownerteam, trigger, visuals, offset, objectivename ) +{ + carryobject = spawnstruct(); + carryobject.type = "carryObject"; + carryobject.curorigin = trigger.origin; + carryobject.ownerteam = ownerteam; + carryobject.entnum = trigger getentitynumber(); + + if ( issubstr( trigger.classname, "use" ) ) + carryobject.triggertype = "use"; + else + carryobject.triggertype = "proximity"; + + trigger.baseorigin = trigger.origin; + carryobject.trigger = trigger; + carryobject.useweapon = undefined; + + if ( !isdefined( offset ) ) + offset = ( 0, 0, 0 ); + + carryobject.offset3d = offset; + carryobject.newstyle = 0; + + if ( isdefined( objectivename ) ) + carryobject.newstyle = 1; + else + objectivename = &""; + + for ( index = 0; index < visuals.size; index++ ) + { + visuals[index].baseorigin = visuals[index].origin; + visuals[index].baseangles = visuals[index].angles; + } + + carryobject.visuals = visuals; + carryobject.compassicons = []; + carryobject.objid = []; + + if ( !carryobject.newstyle ) + { + foreach ( team in level.teams ) + carryobject.objid[team] = getnextobjid(); + } + + carryobject.objidpingfriendly = 0; + carryobject.objidpingenemy = 0; + level.objidstart += 2; + + if ( !carryobject.newstyle ) + { + if ( level.teambased ) + { + foreach ( team in level.teams ) + { + objective_add( carryobject.objid[team], "invisible", carryobject.curorigin ); + objective_team( carryobject.objid[team], team ); + carryobject.objpoints[team] = maps\mp\gametypes\_objpoints::createteamobjpoint( "objpoint_" + team + "_" + carryobject.entnum, carryobject.curorigin + offset, team, undefined ); + carryobject.objpoints[team].alpha = 0; + } + } + else + { + objective_add( carryobject.objid[level.nonteambasedteam], "invisible", carryobject.curorigin ); + carryobject.objpoints[level.nonteambasedteam] = maps\mp\gametypes\_objpoints::createteamobjpoint( "objpoint_" + level.nonteambasedteam + "_" + carryobject.entnum, carryobject.curorigin + offset, "all", undefined ); + carryobject.objpoints[level.nonteambasedteam].alpha = 0; + } + } + + carryobject.objectiveid = getnextobjid(); + objective_add( carryobject.objectiveid, "invisible", carryobject.curorigin, objectivename ); + carryobject.carrier = undefined; + carryobject.isresetting = 0; + carryobject.interactteam = "none"; + carryobject.allowweapons = 0; + carryobject.visiblecarriermodel = undefined; + carryobject.worldicons = []; + carryobject.carriervisible = 0; + carryobject.visibleteam = "none"; + carryobject.worldiswaypoint = []; + carryobject.carryicon = undefined; + carryobject.ondrop = undefined; + carryobject.onpickup = undefined; + carryobject.onreset = undefined; + + if ( carryobject.triggertype == "use" ) + carryobject thread carryobjectusethink(); + else + { + carryobject.numtouching["neutral"] = 0; + carryobject.numtouching["none"] = 0; + carryobject.touchlist["neutral"] = []; + carryobject.touchlist["none"] = []; + + foreach ( team in level.teams ) + { + carryobject.numtouching[team] = 0; + carryobject.touchlist[team] = []; + } + + carryobject.curprogress = 0; + carryobject.usetime = 0; + carryobject.userate = 0; + carryobject.claimteam = "none"; + carryobject.claimplayer = undefined; + carryobject.lastclaimteam = "none"; + carryobject.lastclaimtime = 0; + carryobject.claimgraceperiod = 0; + carryobject.mustmaintainclaim = 0; + carryobject.cancontestclaim = 0; + carryobject.decayprogress = 0; + carryobject.teamusetimes = []; + carryobject.teamusetexts = []; + carryobject.onuse = ::setpickedup; + carryobject thread useobjectproxthink(); + } + + carryobject thread updatecarryobjectorigin(); + carryobject thread updatecarryobjectobjectiveorigin(); + return carryobject; +} + +carryobjectusethink() +{ + level endon( "game_ended" ); + self.trigger endon( "destroyed" ); + + while ( true ) + { + self.trigger waittill( "trigger", player ); + + if ( self.isresetting ) + continue; + + if ( !isalive( player ) ) + continue; + + if ( isdefined( player.laststand ) && player.laststand ) + continue; + + if ( !self caninteractwith( player ) ) + continue; + + if ( !player.canpickupobject ) + continue; + + if ( player.throwinggrenade ) + continue; + + if ( isdefined( self.carrier ) ) + continue; + + if ( player isinvehicle() ) + continue; + + if ( player isweaponviewonlylinked() ) + continue; + + if ( !player istouching( self.trigger ) ) + continue; + + self setpickedup( player ); + } +} + +carryobjectproxthink() +{ + level endon( "game_ended" ); + self.trigger endon( "destroyed" ); + + while ( true ) + { + self.trigger waittill( "trigger", player ); + + if ( self.isresetting ) + continue; + + if ( !isalive( player ) ) + continue; + + if ( isdefined( player.laststand ) && player.laststand ) + continue; + + if ( !self caninteractwith( player ) ) + continue; + + if ( !player.canpickupobject ) + continue; + + if ( player.throwinggrenade ) + continue; + + if ( isdefined( self.carrier ) ) + continue; + + if ( player isinvehicle() ) + continue; + + if ( player isweaponviewonlylinked() ) + continue; + + if ( !player istouching( self.trigger ) ) + continue; + + self setpickedup( player ); + } +} + +pickupobjectdelay( origin ) +{ + level endon( "game_ended" ); + self endon( "death" ); + self endon( "disconnect" ); + self.canpickupobject = 0; + + for (;;) + { + if ( distancesquared( self.origin, origin ) > 4096 ) + break; + + wait 0.2; + } + + self.canpickupobject = 1; +} + +setpickedup( player ) +{ + if ( !isalive( player ) ) + return; + + if ( isdefined( player.carryobject ) ) + { + if ( is_true( player.carryobject.swappable ) ) + player.carryobject thread setdropped(); + else + { + if ( isdefined( self.onpickupfailed ) ) + self [[ self.onpickupfailed ]]( player ); + + return; + } + } + + player giveobject( self ); + self setcarrier( player ); + + for ( index = 0; index < self.visuals.size; index++ ) + self.visuals[index] thread hideobject(); + + self.trigger.origin += vectorscale( ( 0, 0, 1 ), 10000.0 ); + self notify( "pickup_object" ); + + if ( isdefined( self.onpickup ) ) + self [[ self.onpickup ]]( player ); + + self updatecompassicons(); + self updateworldicons(); + self updateobjective(); +} + +hideobject() +{ + radius = 32; + origin = self.origin; + grenades = getentarray( "grenade", "classname" ); + radiussq = radius * radius; + linkedgrenades = []; + linkedgrenadesindex = 0; + self hide(); + + for ( i = 0; i < grenades.size; i++ ) + { + if ( distancesquared( origin, grenades[i].origin ) < radiussq ) + { + if ( grenades[i] islinkedto( self ) ) + { + linkedgrenades[linkedgrenadesindex] = grenades[i]; + linkedgrenades[linkedgrenadesindex] unlink(); + linkedgrenadesindex++; + } + } + } + + self.origin += vectorscale( ( 0, 0, 1 ), 10000.0 ); + waittillframeend; + + for ( i = 0; i < linkedgrenadesindex; i++ ) + linkedgrenades[i] launch( vectorscale( ( 1, 1, 1 ), 5.0 ) ); +} + +updatecarryobjectorigin() +{ + level endon( "game_ended" ); + self.trigger endon( "destroyed" ); + + if ( self.newstyle ) + return; + + objpingdelay = level.objectivepingdelay; + + for (;;) + { + if ( isdefined( self.carrier ) && level.teambased ) + { + self.curorigin = self.carrier.origin + vectorscale( ( 0, 0, 1 ), 75.0 ); + + foreach ( team in level.teams ) + self.objpoints[team] maps\mp\gametypes\_objpoints::updateorigin( self.curorigin ); + + if ( ( self.visibleteam == "friendly" || self.visibleteam == "any" ) && self.objidpingfriendly ) + { + foreach ( team in level.teams ) + { + if ( self isfriendlyteam( team ) ) + { + if ( self.objpoints[team].isshown ) + { + self.objpoints[team].alpha = self.objpoints[team].basealpha; + self.objpoints[team] fadeovertime( objpingdelay + 1.0 ); + self.objpoints[team].alpha = 0; + } + + objective_position( self.objid[team], self.curorigin ); + } + } + } + + if ( ( self.visibleteam == "enemy" || self.visibleteam == "any" ) && self.objidpingenemy ) + { + if ( !self isfriendlyteam( team ) ) + { + if ( self.objpoints[team].isshown ) + { + self.objpoints[team].alpha = self.objpoints[team].basealpha; + self.objpoints[team] fadeovertime( objpingdelay + 1.0 ); + self.objpoints[team].alpha = 0; + } + + objective_position( self.objid[team], self.curorigin ); + } + } + + self wait_endon( objpingdelay, "dropped", "reset" ); + continue; + } + + if ( isdefined( self.carrier ) ) + { + self.curorigin = self.carrier.origin + vectorscale( ( 0, 0, 1 ), 75.0 ); + self.objpoints[level.nonteambasedteam] maps\mp\gametypes\_objpoints::updateorigin( self.curorigin ); + objective_position( self.objid[level.nonteambasedteam], self.curorigin ); + wait 0.05; + continue; + } + + if ( level.teambased ) + { + foreach ( team in level.teams ) + self.objpoints[team] maps\mp\gametypes\_objpoints::updateorigin( self.curorigin + self.offset3d ); + } + else + self.objpoints[level.nonteambasedteam] maps\mp\gametypes\_objpoints::updateorigin( self.curorigin + self.offset3d ); + + wait 0.05; + } +} + +updatecarryobjectobjectiveorigin() +{ + level endon( "game_ended" ); + self.trigger endon( "destroyed" ); + + if ( !self.newstyle ) + return; + + objpingdelay = level.objectivepingdelay; + + for (;;) + { + if ( isdefined( self.carrier ) ) + { + self.curorigin = self.carrier.origin; + objective_position( self.objectiveid, self.curorigin ); + self wait_endon( objpingdelay, "dropped", "reset" ); + continue; + } + + objective_position( self.objectiveid, self.curorigin ); + wait 0.05; + } +} + +giveobject( object ) +{ + assert( !isdefined( self.carryobject ) ); + self.carryobject = object; + self thread trackcarrier(); + + if ( !object.allowweapons ) + { + self _disableweapon(); + self thread manualdropthink(); + } + + self.disallowvehicleusage = 1; + + if ( isdefined( object.visiblecarriermodel ) ) + self maps\mp\gametypes\_weapons::forcestowedweaponupdate(); + + if ( !object.newstyle ) + { + if ( isdefined( object.carryicon ) ) + { + if ( self issplitscreen() ) + { + self.carryicon = createicon( object.carryicon, 35, 35 ); + self.carryicon.x = -130; + self.carryicon.y = -90; + self.carryicon.horzalign = "right"; + self.carryicon.vertalign = "bottom"; + } + else + { + self.carryicon = createicon( object.carryicon, 50, 50 ); + + if ( !object.allowweapons ) + self.carryicon setpoint( "CENTER", "CENTER", 0, 60 ); + else + { + self.carryicon.x = 130; + self.carryicon.y = -60; + self.carryicon.horzalign = "user_left"; + self.carryicon.vertalign = "user_bottom"; + } + } + + self.carryicon.alpha = 0.75; + self.carryicon.hidewhileremotecontrolling = 1; + self.carryicon.hidewheninkillcam = 1; + } + } +} + +returnhome() +{ + self.isresetting = 1; + self notify( "reset" ); + + for ( index = 0; index < self.visuals.size; index++ ) + { + self.visuals[index].origin = self.visuals[index].baseorigin; + self.visuals[index].angles = self.visuals[index].baseangles; + self.visuals[index] show(); + } + + self.trigger.origin = self.trigger.baseorigin; + self.curorigin = self.trigger.origin; + + if ( isdefined( self.onreset ) ) + self [[ self.onreset ]](); + + self clearcarrier(); + updateworldicons(); + updatecompassicons(); + updateobjective(); + self.isresetting = 0; +} + +isobjectawayfromhome() +{ + if ( isdefined( self.carrier ) ) + return true; + + if ( distancesquared( self.trigger.origin, self.trigger.baseorigin ) > 4 ) + return true; + + return false; +} + +setposition( origin, angles ) +{ + self.isresetting = 1; + + for ( index = 0; index < self.visuals.size; index++ ) + { + visual = self.visuals[index]; + visual.origin = origin; + visual.angles = angles; + visual show(); + } + + self.trigger.origin = origin; + self.curorigin = self.trigger.origin; + self clearcarrier(); + updateworldicons(); + updatecompassicons(); + updateobjective(); + self.isresetting = 0; +} + +onplayerlaststand() +{ + if ( isdefined( self.carryobject ) ) + self.carryobject thread setdropped(); +} + +setdropped() +{ + self.isresetting = 1; + self notify( "dropped" ); + startorigin = ( 0, 0, 0 ); + endorigin = ( 0, 0, 0 ); + body = undefined; + + if ( isdefined( self.carrier ) && self.carrier.team != "spectator" ) + { + startorigin = self.carrier.origin + vectorscale( ( 0, 0, 1 ), 20.0 ); + endorigin = self.carrier.origin - vectorscale( ( 0, 0, 1 ), 2000.0 ); + body = self.carrier.body; + self.visuals[0].origin = self.carrier.origin; + } + else + { + startorigin = self.safeorigin + vectorscale( ( 0, 0, 1 ), 20.0 ); + endorigin = self.safeorigin - vectorscale( ( 0, 0, 1 ), 20.0 ); + } + + trace = playerphysicstrace( startorigin, endorigin ); + angletrace = bullettrace( startorigin, endorigin, 0, body ); + droppingplayer = self.carrier; + + if ( isdefined( trace ) ) + { + tempangle = randomfloat( 360 ); + droporigin = trace; + + if ( angletrace["fraction"] < 1 && distance( angletrace["position"], trace ) < 10.0 ) + { + forward = ( cos( tempangle ), sin( tempangle ), 0 ); + forward = vectornormalize( forward - vectorscale( angletrace["normal"], vectordot( forward, angletrace["normal"] ) ) ); + dropangles = vectortoangles( forward ); + } + else + dropangles = ( 0, tempangle, 0 ); + + for ( index = 0; index < self.visuals.size; index++ ) + { + self.visuals[index].origin = droporigin; + self.visuals[index].angles = dropangles; + self.visuals[index] show(); + } + + self.trigger.origin = droporigin; + self.curorigin = self.trigger.origin; + self thread pickuptimeout( trace[2], startorigin[2] ); + } + else + { + for ( index = 0; index < self.visuals.size; index++ ) + { + self.visuals[index].origin = self.visuals[index].baseorigin; + self.visuals[index].angles = self.visuals[index].baseangles; + self.visuals[index] show(); + } + + self.trigger.origin = self.trigger.baseorigin; + self.curorigin = self.trigger.baseorigin; + } + + if ( isdefined( self.ondrop ) ) + self [[ self.ondrop ]]( droppingplayer ); + + self clearcarrier(); + self updatecompassicons(); + self updateworldicons(); + self updateobjective(); + self.isresetting = 0; +} + +setcarrier( carrier ) +{ + self.carrier = carrier; + objective_setplayerusing( self.objectiveid, carrier ); + self thread updatevisibilityaccordingtoradar(); +} + +clearcarrier() +{ + if ( !isdefined( self.carrier ) ) + return; + + self.carrier takeobject( self ); + objective_clearplayerusing( self.objectiveid, self.carrier ); + self.carrier = undefined; + self notify( "carrier_cleared" ); +} + +shouldbereset( minz, maxz ) +{ + minetriggers = getentarray( "minefield", "targetname" ); + hurttriggers = getentarray( "trigger_hurt", "classname" ); + elevators = getentarray( "script_elevator", "targetname" ); + + for ( index = 0; index < minetriggers.size; index++ ) + { + if ( self.visuals[0] istouchingswept( minetriggers[index], minz, maxz ) ) + return true; + } + + for ( index = 0; index < hurttriggers.size; index++ ) + { + if ( self.visuals[0] istouchingswept( hurttriggers[index], minz, maxz ) ) + return true; + } + + for ( index = 0; index < elevators.size; index++ ) + { + assert( isdefined( elevators[index].occupy_volume ) ); + + if ( self.visuals[0] istouchingswept( elevators[index].occupy_volume, minz, maxz ) ) + return true; + } + + return false; +} + +pickuptimeout( minz, maxz ) +{ + self endon( "pickup_object" ); + self endon( "stop_pickup_timeout" ); + wait 0.05; + + if ( self shouldbereset( minz, maxz ) ) + { + self returnhome(); + return; + } + + if ( isdefined( self.autoresettime ) ) + { + wait( self.autoresettime ); + + if ( !isdefined( self.carrier ) ) + self returnhome(); + } +} + +takeobject( object ) +{ + if ( isdefined( self.carryicon ) ) + self.carryicon destroyelem(); + + if ( isdefined( object.visiblecarriermodel ) ) + self maps\mp\gametypes\_weapons::detach_all_weapons(); + + self.carryobject = undefined; + + if ( !isalive( self ) ) + return; + + self notify( "drop_object" ); + self.disallowvehicleusage = 0; + + if ( object.triggertype == "proximity" ) + self thread pickupobjectdelay( object.trigger.origin ); + + if ( isdefined( object.visiblecarriermodel ) ) + self maps\mp\gametypes\_weapons::forcestowedweaponupdate(); + + if ( !object.allowweapons ) + self _enableweapon(); +} + +trackcarrier() +{ + level endon( "game_ended" ); + self endon( "disconnect" ); + self endon( "death" ); + self endon( "drop_object" ); + + while ( isdefined( self.carryobject ) && isalive( self ) ) + { + if ( self isonground() ) + { + trace = bullettrace( self.origin + vectorscale( ( 0, 0, 1 ), 20.0 ), self.origin - vectorscale( ( 0, 0, 1 ), 20.0 ), 0, undefined ); + + if ( trace["fraction"] < 1 ) + self.carryobject.safeorigin = trace["position"]; + } + + wait 0.05; + } +} + +manualdropthink() +{ + level endon( "game_ended" ); + self endon( "disconnect" ); + self endon( "death" ); + self endon( "drop_object" ); + + for (;;) + { + while ( self attackbuttonpressed() || self fragbuttonpressed() || self secondaryoffhandbuttonpressed() || self meleebuttonpressed() ) + wait 0.05; + + while ( !self attackbuttonpressed() && !self fragbuttonpressed() && !self secondaryoffhandbuttonpressed() && !self meleebuttonpressed() ) + wait 0.05; + + if ( isdefined( self.carryobject ) && !self usebuttonpressed() ) + self.carryobject thread setdropped(); + } +} + +createuseobject( ownerteam, trigger, visuals, offset, objectivename ) +{ + useobject = spawnstruct(); + useobject.type = "useObject"; + useobject.curorigin = trigger.origin; + useobject.ownerteam = ownerteam; + useobject.entnum = trigger getentitynumber(); + useobject.keyobject = undefined; + + if ( issubstr( trigger.classname, "use" ) ) + useobject.triggertype = "use"; + else + useobject.triggertype = "proximity"; + + useobject.trigger = trigger; + + for ( index = 0; index < visuals.size; index++ ) + { + visuals[index].baseorigin = visuals[index].origin; + visuals[index].baseangles = visuals[index].angles; + } + + useobject.visuals = visuals; + + if ( !isdefined( offset ) ) + offset = ( 0, 0, 0 ); + + useobject.offset3d = offset; + useobject.newstyle = 0; + + if ( isdefined( objectivename ) ) + useobject.newstyle = 1; + else + objectivename = &""; + + useobject.compassicons = []; + useobject.objid = []; + + if ( !useobject.newstyle ) + { + foreach ( team in level.teams ) + useobject.objid[team] = getnextobjid(); + + if ( level.teambased ) + { + foreach ( team in level.teams ) + { + objective_add( useobject.objid[team], "invisible", useobject.curorigin ); + objective_team( useobject.objid[team], team ); + } + } + else + objective_add( useobject.objid[level.nonteambasedteam], "invisible", useobject.curorigin ); + } + + useobject.objectiveid = getnextobjid(); + objective_add( useobject.objectiveid, "invisible", useobject.curorigin + offset, objectivename ); + + if ( !useobject.newstyle ) + { + if ( level.teambased ) + { + foreach ( team in level.teams ) + { + useobject.objpoints[team] = maps\mp\gametypes\_objpoints::createteamobjpoint( "objpoint_" + team + "_" + useobject.entnum, useobject.curorigin + offset, team, undefined ); + useobject.objpoints[team].alpha = 0; + } + } + else + { + useobject.objpoints[level.nonteambasedteam] = maps\mp\gametypes\_objpoints::createteamobjpoint( "objpoint_allies_" + useobject.entnum, useobject.curorigin + offset, "all", undefined ); + useobject.objpoints[level.nonteambasedteam].alpha = 0; + } + } + + useobject.interactteam = "none"; + useobject.worldicons = []; + useobject.visibleteam = "none"; + useobject.worldiswaypoint = []; + useobject.onuse = undefined; + useobject.oncantuse = undefined; + useobject.usetext = "default"; + useobject.usetime = 10000; + useobject clearprogress(); + useobject.decayprogress = 0; + + if ( useobject.triggertype == "proximity" ) + { + useobject.numtouching["neutral"] = 0; + useobject.numtouching["none"] = 0; + useobject.touchlist["neutral"] = []; + useobject.touchlist["none"] = []; + + foreach ( team in level.teams ) + { + useobject.numtouching[team] = 0; + useobject.touchlist[team] = []; + } + + useobject.teamusetimes = []; + useobject.teamusetexts = []; + useobject.userate = 0; + useobject.claimteam = "none"; + useobject.claimplayer = undefined; + useobject.lastclaimteam = "none"; + useobject.lastclaimtime = 0; + useobject.claimgraceperiod = 1.0; + useobject.mustmaintainclaim = 0; + useobject.cancontestclaim = 0; + useobject thread useobjectproxthink(); + } + else + { + useobject.userate = 1; + useobject thread useobjectusethink(); + } + + return useobject; +} + +setkeyobject( object ) +{ + if ( !isdefined( object ) ) + { + self.keyobject = undefined; + return; + } + + if ( !isdefined( self.keyobject ) ) + self.keyobject = []; + + self.keyobject[self.keyobject.size] = object; +} + +haskeyobject( use ) +{ + for ( x = 0; x < use.keyobject.size; x++ ) + { + if ( isdefined( self.carryobject ) && isdefined( use.keyobject[x] ) && self.carryobject == use.keyobject[x] ) + return true; + } + + return false; +} + +useobjectusethink() +{ + level endon( "game_ended" ); + self.trigger endon( "destroyed" ); + + while ( true ) + { + self.trigger waittill( "trigger", player ); + + if ( !isalive( player ) ) + continue; + + if ( !self caninteractwith( player ) ) + continue; + + if ( !player isonground() ) + continue; + + if ( player isinvehicle() ) + continue; + + if ( isdefined( self.keyobject ) && ( !isdefined( player.carryobject ) || !player haskeyobject( self ) ) ) + { + if ( isdefined( self.oncantuse ) ) + self [[ self.oncantuse ]]( player ); + + continue; + } + + result = 1; + + if ( self.usetime > 0 ) + { + if ( isdefined( self.onbeginuse ) ) + self [[ self.onbeginuse ]]( player ); + + team = player.pers["team"]; + result = self useholdthink( player ); + + if ( isdefined( self.onenduse ) ) + self [[ self.onenduse ]]( team, player, result ); + } + + if ( !result ) + continue; + + if ( isdefined( self.onuse ) ) + self [[ self.onuse ]]( player ); + } +} + +getearliestclaimplayer() +{ + assert( self.claimteam != "none" ); + team = self.claimteam; + earliestplayer = self.claimplayer; + + if ( self.touchlist[team].size > 0 ) + { + earliesttime = undefined; + players = getarraykeys( self.touchlist[team] ); + + for ( index = 0; index < players.size; index++ ) + { + touchdata = self.touchlist[team][players[index]]; + + if ( !isdefined( earliesttime ) || touchdata.starttime < earliesttime ) + { + earliestplayer = touchdata.player; + earliesttime = touchdata.starttime; + } + } + } + + return earliestplayer; +} + +useobjectproxthink() +{ + level endon( "game_ended" ); + self.trigger endon( "destroyed" ); + self thread proxtriggerthink(); + + while ( true ) + { + if ( self.usetime && self.curprogress >= self.usetime ) + { + self clearprogress(); + creditplayer = getearliestclaimplayer(); + + if ( isdefined( self.onenduse ) ) + self [[ self.onenduse ]]( self getclaimteam(), creditplayer, isdefined( creditplayer ) ); + + if ( isdefined( creditplayer ) && isdefined( self.onuse ) ) + self [[ self.onuse ]]( creditplayer ); + + if ( !self.mustmaintainclaim ) + { + self setclaimteam( "none" ); + self.claimplayer = undefined; + } + } + + if ( self.claimteam != "none" ) + { + if ( self useobjectlockedforteam( self.claimteam ) ) + { + if ( isdefined( self.onenduse ) ) + self [[ self.onenduse ]]( self getclaimteam(), self.claimplayer, 0 ); + + self setclaimteam( "none" ); + self.claimplayer = undefined; + self clearprogress(); + } + else if ( self.usetime && ( !self.mustmaintainclaim || self getownerteam() != self getclaimteam() ) ) + { + if ( self.decayprogress && !self.numtouching[self.claimteam] ) + { + if ( isdefined( self.claimplayer ) ) + { + if ( isdefined( self.onenduse ) ) + self [[ self.onenduse ]]( self getclaimteam(), self.claimplayer, 0 ); + + self.claimplayer = undefined; + } + + decayscale = 0; + + if ( self.decaytime ) + decayscale = self.usetime / self.decaytime; + + self.curprogress -= 50 * self.userate * decayscale; + + if ( self.curprogress <= 0 ) + self clearprogress(); + + self updatecurrentprogress(); + + if ( isdefined( self.onuseupdate ) ) + self [[ self.onuseupdate ]]( self getclaimteam(), self.curprogress / self.usetime, 50 * self.userate * decayscale / self.usetime ); + + if ( self.curprogress == 0 ) + self setclaimteam( "none" ); + } + else if ( !self.numtouching[self.claimteam] ) + { + if ( isdefined( self.onenduse ) ) + self [[ self.onenduse ]]( self getclaimteam(), self.claimplayer, 0 ); + + self setclaimteam( "none" ); + self.claimplayer = undefined; + } + else + { + self.curprogress += 50 * self.userate; + self updatecurrentprogress(); + + if ( isdefined( self.onuseupdate ) ) + self [[ self.onuseupdate ]]( self getclaimteam(), self.curprogress / self.usetime, 50 * self.userate / self.usetime ); + } + } + else if ( !self.mustmaintainclaim ) + { + if ( isdefined( self.onuse ) ) + self [[ self.onuse ]]( self.claimplayer ); + + if ( !self.mustmaintainclaim ) + { + self setclaimteam( "none" ); + self.claimplayer = undefined; + } + } + else if ( !self.numtouching[self.claimteam] ) + { + if ( isdefined( self.onunoccupied ) ) + self [[ self.onunoccupied ]](); + + self setclaimteam( "none" ); + self.claimplayer = undefined; + } + else if ( self.cancontestclaim ) + { + numother = getnumtouchingexceptteam( self.claimteam ); + + if ( numother > 0 ) + { + if ( isdefined( self.oncontested ) ) + self [[ self.oncontested ]](); + + self setclaimteam( "none" ); + self.claimplayer = undefined; + } + } + } + else + { + if ( self.curprogress > 0 && gettime() - self.lastclaimtime > self.claimgraceperiod * 1000 ) + self clearprogress(); + + if ( self.mustmaintainclaim && self getownerteam() != "none" ) + { + if ( !self.numtouching[self getownerteam()] ) + { + if ( isdefined( self.onunoccupied ) ) + self [[ self.onunoccupied ]](); + } + else if ( self.cancontestclaim && self.lastclaimteam != "none" && self.numtouching[self.lastclaimteam] ) + { + numother = getnumtouchingexceptteam( self.lastclaimteam ); + + if ( numother == 0 ) + { + if ( isdefined( self.onuncontested ) ) + self [[ self.onuncontested ]]( self.lastclaimteam ); + } + } + } + } + + wait 0.05; + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + } +} + +useobjectlockedforteam( team ) +{ + if ( isdefined( self.teamlock ) && isdefined( level.teams[team] ) ) + return self.teamlock[team]; + + return 0; +} + +canclaim( player ) +{ + if ( isdefined( self.carrier ) ) + return false; + + if ( self.cancontestclaim ) + { + numother = getnumtouchingexceptteam( player.pers["team"] ); + + if ( numother != 0 ) + return false; + } + + if ( !isdefined( self.keyobject ) || isdefined( player.carryobject ) && player haskeyobject( self ) ) + return true; + + return false; +} + +proxtriggerthink() +{ + level endon( "game_ended" ); + self.trigger endon( "destroyed" ); + entitynumber = self.entnum; + + while ( true ) + { + self.trigger waittill( "trigger", player ); + + if ( !isalive( player ) || self useobjectlockedforteam( player.pers["team"] ) ) + continue; + + if ( player.spawntime == gettime() ) + continue; + + if ( player isweaponviewonlylinked() ) + continue; + + if ( self isexcluded( player ) ) + continue; + + if ( self caninteractwith( player ) && self.claimteam == "none" ) + { + if ( self canclaim( player ) ) + { + setclaimteam( player.pers["team"] ); + self.claimplayer = player; + relativeteam = self getrelativeteam( player.pers["team"] ); + + if ( isdefined( self.teamusetimes[relativeteam] ) ) + self.usetime = self.teamusetimes[relativeteam]; + + if ( self.usetime && isdefined( self.onbeginuse ) ) + self [[ self.onbeginuse ]]( self.claimplayer ); + } + else if ( isdefined( self.oncantuse ) ) + self [[ self.oncantuse ]]( player ); + } + + if ( isalive( player ) && !isdefined( player.touchtriggers[entitynumber] ) ) + player thread triggertouchthink( self ); + } +} + +isexcluded( player ) +{ + if ( !isdefined( self.exclusions ) ) + return false; + + foreach ( exclusion in self.exclusions ) + { + if ( exclusion istouching( player ) ) + return true; + } + + return false; +} + +clearprogress() +{ + self.curprogress = 0; + self updatecurrentprogress(); + + if ( isdefined( self.onuseclear ) ) + self [[ self.onuseclear ]](); +} + +setclaimteam( newteam ) +{ + assert( newteam != self.claimteam ); + + if ( self.claimteam == "none" && gettime() - self.lastclaimtime > self.claimgraceperiod * 1000 ) + self clearprogress(); + else if ( newteam != "none" && newteam != self.lastclaimteam ) + self clearprogress(); + + self.lastclaimteam = self.claimteam; + self.lastclaimtime = gettime(); + self.claimteam = newteam; + self updateuserate(); +} + +getclaimteam() +{ + return self.claimteam; +} + +continuetriggertouchthink( team, object ) +{ + if ( !isalive( self ) ) + return false; + + if ( self useobjectlockedforteam( team ) ) + return false; + + if ( !self istouching( object.trigger ) ) + return false; + + return true; +} + +triggertouchthink( object ) +{ + team = self.pers["team"]; + score = 1; + object.numtouching[team] += score; + + if ( object.usetime ) + object updateuserate(); + + touchname = "player" + self.clientid; + struct = spawnstruct(); + struct.player = self; + struct.starttime = gettime(); + object.touchlist[team][touchname] = struct; + objective_setplayerusing( object.objectiveid, self ); + self.touchtriggers[object.entnum] = object.trigger; + + if ( isdefined( object.ontouchuse ) ) + object [[ object.ontouchuse ]]( self ); + + while ( self continuetriggertouchthink( team, object ) ) + { + if ( object.usetime ) + self updateproxbar( object, 0 ); + + wait 0.05; + } + + if ( isdefined( self ) ) + { + if ( object.usetime ) + self updateproxbar( object, 1 ); + + self.touchtriggers[object.entnum] = undefined; + objective_clearplayerusing( object.objectiveid, self ); + } + + if ( level.gameended ) + return; + + object.touchlist[team][touchname] = undefined; + object.numtouching[team] -= score; + + if ( object.numtouching[team] < 1 ) + object.numtouching[team] = 0; + + if ( object.usetime ) + { + if ( object.numtouching[team] <= 0 && object.curprogress >= object.usetime ) + { + object.curprogress = object.usetime - 1; + object updatecurrentprogress(); + } + } + + if ( isdefined( self ) && isdefined( object.onendtouchuse ) ) + object [[ object.onendtouchuse ]]( self ); + + object updateuserate(); +} + +updateproxbar( object, forceremove ) +{ + if ( object.newstyle ) + return; + + if ( !forceremove && object.decayprogress ) + { + if ( !object caninteractwith( self ) ) + { + if ( isdefined( self.proxbar ) ) + self.proxbar hideelem(); + + if ( isdefined( self.proxbartext ) ) + self.proxbartext hideelem(); + + return; + } + else + { + if ( !isdefined( self.proxbar ) ) + { + self.proxbar = createprimaryprogressbar(); + self.proxbar.lastuserate = -1; + } + + if ( self.pers["team"] == object.claimteam ) + { + if ( self.proxbar.bar.color != ( 1, 1, 1 ) ) + { + self.proxbar.bar.color = ( 1, 1, 1 ); + self.proxbar.lastuserate = -1; + } + } + else if ( self.proxbar.bar.color != ( 1, 0, 0 ) ) + { + self.proxbar.bar.color = ( 1, 0, 0 ); + self.proxbar.lastuserate = -1; + } + } + } + else if ( forceremove || !object caninteractwith( self ) || self.pers["team"] != object.claimteam ) + { + if ( isdefined( self.proxbar ) ) + self.proxbar hideelem(); + + if ( isdefined( self.proxbartext ) ) + self.proxbartext hideelem(); + + return; + } + + if ( !isdefined( self.proxbar ) ) + { + self.proxbar = createprimaryprogressbar(); + self.proxbar.lastuserate = -1; + self.proxbar.lasthostmigrationstate = 0; + } + + if ( self.proxbar.hidden ) + { + self.proxbar showelem(); + self.proxbar.lastuserate = -1; + self.proxbar.lasthostmigrationstate = 0; + } + + if ( !isdefined( self.proxbartext ) ) + { + self.proxbartext = createprimaryprogressbartext(); + self.proxbartext settext( object.usetext ); + } + + if ( self.proxbartext.hidden ) + { + self.proxbartext showelem(); + self.proxbartext settext( object.usetext ); + } + + if ( self.proxbar.lastuserate != object.userate || self.proxbar.lasthostmigrationstate != isdefined( level.hostmigrationtimer ) ) + { + if ( object.curprogress > object.usetime ) + object.curprogress = object.usetime; + + if ( object.decayprogress && self.pers["team"] != object.claimteam ) + { + if ( object.curprogress > 0 ) + { + progress = object.curprogress / object.usetime; + rate = 1000 / object.usetime * ( object.userate * -1 ); + + if ( isdefined( level.hostmigrationtimer ) ) + rate = 0; + + self.proxbar updatebar( progress, rate ); + } + } + else + { + progress = object.curprogress / object.usetime; + rate = 1000 / object.usetime * object.userate; + + if ( isdefined( level.hostmigrationtimer ) ) + rate = 0; + + self.proxbar updatebar( progress, rate ); + } + + self.proxbar.lasthostmigrationstate = isdefined( level.hostmigrationtimer ); + self.proxbar.lastuserate = object.userate; + } +} + +getnumtouchingexceptteam( ignoreteam ) +{ + numtouching = 0; + + foreach ( team in level.teams ) + { + if ( ignoreteam == team ) + continue; + + numtouching += self.numtouching[team]; + } + + return numtouching; +} + +updateuserate() +{ + numclaimants = self.numtouching[self.claimteam]; + numother = 0; + numother = getnumtouchingexceptteam( self.claimteam ); + self.userate = 0; + + if ( self.decayprogress ) + { + if ( numclaimants && !numother ) + self.userate = numclaimants; + else if ( !numclaimants && numother ) + self.userate = numother; + else if ( !numclaimants && !numother ) + self.userate = 0; + } + else if ( numclaimants && !numother ) + self.userate = numclaimants; + + if ( isdefined( self.onupdateuserate ) ) + self [[ self.onupdateuserate ]](); +} + +useholdthink( player ) +{ + player notify( "use_hold" ); + + if ( !is_true( self.dontlinkplayertotrigger ) ) + { + player playerlinkto( self.trigger ); + player playerlinkedoffsetenable(); + } + + player clientclaimtrigger( self.trigger ); + player.claimtrigger = self.trigger; + useweapon = self.useweapon; + lastweapon = player getcurrentweapon(); + + if ( isdefined( useweapon ) ) + { + assert( isdefined( lastweapon ) ); + + if ( lastweapon == useweapon ) + { + assert( isdefined( player.lastnonuseweapon ) ); + lastweapon = player.lastnonuseweapon; + } + + assert( lastweapon != useweapon ); + player.lastnonuseweapon = lastweapon; + player giveweapon( useweapon ); + player setweaponammostock( useweapon, 0 ); + player setweaponammoclip( useweapon, 0 ); + player switchtoweapon( useweapon ); + } + else + player _disableweapon(); + + self clearprogress(); + self.inuse = 1; + self.userate = 0; + objective_setplayerusing( self.objectiveid, player ); + player thread personalusebar( self ); + result = useholdthinkloop( player, lastweapon ); + + if ( isdefined( player ) ) + { + objective_clearplayerusing( self.objectiveid, player ); + self clearprogress(); + + if ( isdefined( player.attachedusemodel ) ) + { + player detach( player.attachedusemodel, "tag_inhand" ); + player.attachedusemodel = undefined; + } + + player notify( "done_using" ); + } + + if ( isdefined( useweapon ) && isdefined( player ) ) + player thread takeuseweapon( useweapon ); + + if ( isdefined( result ) && result ) + return true; + + if ( isdefined( player ) ) + { + player.claimtrigger = undefined; + + if ( isdefined( useweapon ) ) + { + ammo = player getweaponammoclip( lastweapon ); + + if ( lastweapon != "none" && !maps\mp\killstreaks\_killstreaks::iskillstreakweapon( lastweapon ) && !( isweaponequipment( lastweapon ) && player getweaponammoclip( lastweapon ) == 0 ) ) + player switchtoweapon( lastweapon ); + else + { + player takeweapon( useweapon ); + player switchtolastnonkillstreakweapon(); + } + } + else if ( isalive( player ) ) + player _enableweapon(); + + if ( !is_true( self.dontlinkplayertotrigger ) ) + player unlink(); + + if ( !isalive( player ) ) + player.killedinuse = 1; + } + + self.inuse = 0; + + if ( self.trigger.classname == "trigger_radius_use" ) + player clientreleasetrigger( self.trigger ); + else + self.trigger releaseclaimedtrigger(); + + return false; +} + +takeuseweapon( useweapon ) +{ + self endon( "use_hold" ); + self endon( "death" ); + self endon( "disconnect" ); + level endon( "game_ended" ); + + while ( self getcurrentweapon() == useweapon && !self.throwinggrenade ) + wait 0.05; + + self takeweapon( useweapon ); +} + +continueholdthinkloop( player, waitforweapon, timedout, usetime ) +{ + maxwaittime = 1.5; + + if ( !isalive( player ) ) + return false; + + if ( isdefined( player.laststand ) && player.laststand ) + return false; + + if ( self.curprogress >= usetime ) + return false; + + if ( !player usebuttonpressed() ) + return false; + + if ( player.throwinggrenade ) + return false; + + if ( player meleebuttonpressed() ) + return false; + + if ( player isinvehicle() ) + return false; + + if ( player isremotecontrolling() ) + return false; + + if ( player isweaponviewonlylinked() ) + return false; + + if ( !player istouching( self.trigger ) ) + return false; + + if ( !self.userate && !waitforweapon ) + return false; + + if ( waitforweapon && timedout > maxwaittime ) + return false; + + return true; +} + +updatecurrentprogress() +{ + if ( self.usetime ) + { + if ( isdefined( self.curprogress ) ) + progress = float( self.curprogress ) / self.usetime; + else + progress = 0; + + objective_setprogress( self.objectiveid, clamp( progress, 0, 1 ) ); + } +} + +useholdthinkloop( player, lastweapon ) +{ + level endon( "game_ended" ); + self endon( "disabled" ); + useweapon = self.useweapon; + waitforweapon = 1; + timedout = 0; + usetime = self.usetime; + + while ( self continueholdthinkloop( player, waitforweapon, timedout, usetime ) ) + { + timedout += 0.05; + + if ( !isdefined( useweapon ) || player getcurrentweapon() == useweapon ) + { + self.curprogress += 50 * self.userate; + self updatecurrentprogress(); + self.userate = 1; + waitforweapon = 0; + } + else + self.userate = 0; + + if ( self.curprogress >= usetime ) + { + self.inuse = 0; + player clientreleasetrigger( self.trigger ); + player.claimtrigger = undefined; + + if ( isdefined( useweapon ) ) + { + if ( lastweapon != "none" && !maps\mp\killstreaks\_killstreaks::iskillstreakweapon( lastweapon ) && !( isweaponequipment( lastweapon ) && player getweaponammoclip( lastweapon ) == 0 ) ) + player switchtoweapon( lastweapon ); + else + { + player takeweapon( useweapon ); + player switchtolastnonkillstreakweapon(); + } + } + else + player _enableweapon(); + + if ( !is_true( self.dontlinkplayertotrigger ) ) + player unlink(); + + wait 0.05; + return isalive( player ); + } + + wait 0.05; + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + } + + return 0; +} + +personalusebar( object ) +{ + self endon( "disconnect" ); + + if ( object.newstyle ) + return; + + if ( isdefined( self.usebar ) ) + return; + + self.usebar = createprimaryprogressbar(); + self.usebartext = createprimaryprogressbartext(); + self.usebartext settext( object.usetext ); + usetime = object.usetime; + lastrate = -1; + lasthostmigrationstate = isdefined( level.hostmigrationtimer ); + + while ( isalive( self ) && object.inuse && !level.gameended ) + { + if ( lastrate != object.userate || lasthostmigrationstate != isdefined( level.hostmigrationtimer ) ) + { + if ( object.curprogress > usetime ) + object.curprogress = usetime; + + if ( object.decayprogress && self.pers["team"] != object.claimteam ) + { + if ( object.curprogress > 0 ) + { + progress = object.curprogress / usetime; + rate = 1000 / usetime * ( object.userate * -1 ); + + if ( isdefined( level.hostmigrationtimer ) ) + rate = 0; + + self.proxbar updatebar( progress, rate ); + } + } + else + { + progress = object.curprogress / usetime; + rate = 1000 / usetime * object.userate; + + if ( isdefined( level.hostmigrationtimer ) ) + rate = 0; + + self.usebar updatebar( progress, rate ); + } + + if ( !object.userate ) + { + self.usebar hideelem(); + self.usebartext hideelem(); + } + else + { + self.usebar showelem(); + self.usebartext showelem(); + } + } + + lastrate = object.userate; + lasthostmigrationstate = isdefined( level.hostmigrationtimer ); + wait 0.05; + } + + self.usebar destroyelem(); + self.usebartext destroyelem(); +} + +updatetrigger() +{ + if ( self.triggertype != "use" ) + return; + + if ( self.interactteam == "none" ) + self.trigger.origin -= vectorscale( ( 0, 0, 1 ), 50000.0 ); + else if ( self.interactteam == "any" || !level.teambased ) + { + self.trigger.origin = self.curorigin; + self.trigger setteamfortrigger( "none" ); + } + else if ( self.interactteam == "friendly" ) + { + self.trigger.origin = self.curorigin; + + if ( isdefined( level.teams[self.ownerteam] ) ) + self.trigger setteamfortrigger( self.ownerteam ); + else + self.trigger.origin -= vectorscale( ( 0, 0, 1 ), 50000.0 ); + } + else if ( self.interactteam == "enemy" ) + { + self.trigger.origin = self.curorigin; + self.trigger setexcludeteamfortrigger( self.ownerteam ); + } +} + +updateobjective() +{ + if ( !self.newstyle ) + return; + + objective_team( self.objectiveid, self.ownerteam ); + + if ( self.visibleteam == "any" ) + { + objective_state( self.objectiveid, "active" ); + objective_visibleteams( self.objectiveid, level.spawnsystem.ispawn_teammask["all"] ); + } + else if ( self.visibleteam == "friendly" ) + { + objective_state( self.objectiveid, "active" ); + objective_visibleteams( self.objectiveid, level.spawnsystem.ispawn_teammask[self.ownerteam] ); + } + else if ( self.visibleteam == "enemy" ) + { + objective_state( self.objectiveid, "active" ); + objective_visibleteams( self.objectiveid, level.spawnsystem.ispawn_teammask["all"] & ~level.spawnsystem.ispawn_teammask[self.ownerteam] ); + } + else + { + objective_state( self.objectiveid, "invisible" ); + objective_visibleteams( self.objectiveid, 0 ); + } + + if ( self.type == "carryObject" ) + { + if ( isalive( self.carrier ) ) + objective_onentity( self.objectiveid, self.carrier ); + else + objective_clearentity( self.objectiveid ); + } +} + +updateworldicons() +{ + if ( self.visibleteam == "any" ) + { + updateworldicon( "friendly", 1 ); + updateworldicon( "enemy", 1 ); + } + else if ( self.visibleteam == "friendly" ) + { + updateworldicon( "friendly", 1 ); + updateworldicon( "enemy", 0 ); + } + else if ( self.visibleteam == "enemy" ) + { + updateworldicon( "friendly", 0 ); + updateworldicon( "enemy", 1 ); + } + else + { + updateworldicon( "friendly", 0 ); + updateworldicon( "enemy", 0 ); + } +} + +updateworldicon( relativeteam, showicon ) +{ + if ( self.newstyle ) + return; + + if ( !isdefined( self.worldicons[relativeteam] ) ) + showicon = 0; + + updateteams = getupdateteams( relativeteam ); + + for ( index = 0; index < updateteams.size; index++ ) + { + if ( !level.teambased && updateteams[index] != level.nonteambasedteam ) + continue; + + opname = "objpoint_" + updateteams[index] + "_" + self.entnum; + objpoint = maps\mp\gametypes\_objpoints::getobjpointbyname( opname ); + objpoint notify( "stop_flashing_thread" ); + objpoint thread maps\mp\gametypes\_objpoints::stopflashing(); + + if ( showicon ) + { + objpoint setshader( self.worldicons[relativeteam], level.objpointsize, level.objpointsize ); + objpoint fadeovertime( 0.05 ); + objpoint.alpha = objpoint.basealpha; + objpoint.isshown = 1; + iswaypoint = 1; + + if ( isdefined( self.worldiswaypoint[relativeteam] ) ) + iswaypoint = self.worldiswaypoint[relativeteam]; + + if ( isdefined( self.compassicons[relativeteam] ) ) + objpoint setwaypoint( iswaypoint, self.worldicons[relativeteam] ); + else + objpoint setwaypoint( iswaypoint ); + + if ( self.type == "carryObject" ) + { + if ( isdefined( self.carrier ) && !shouldpingobject( relativeteam ) ) + objpoint settargetent( self.carrier ); + else + objpoint cleartargetent(); + } + + continue; + } + + objpoint fadeovertime( 0.05 ); + objpoint.alpha = 0; + objpoint.isshown = 0; + objpoint cleartargetent(); + } +} + +updatecompassicons() +{ + if ( self.visibleteam == "any" ) + { + updatecompassicon( "friendly", 1 ); + updatecompassicon( "enemy", 1 ); + } + else if ( self.visibleteam == "friendly" ) + { + updatecompassicon( "friendly", 1 ); + updatecompassicon( "enemy", 0 ); + } + else if ( self.visibleteam == "enemy" ) + { + updatecompassicon( "friendly", 0 ); + updatecompassicon( "enemy", 1 ); + } + else + { + updatecompassicon( "friendly", 0 ); + updatecompassicon( "enemy", 0 ); + } +} + +updatecompassicon( relativeteam, showicon ) +{ + if ( self.newstyle ) + return; + + updateteams = getupdateteams( relativeteam ); + + for ( index = 0; index < updateteams.size; index++ ) + { + showiconthisteam = showicon; + + if ( !showiconthisteam && shouldshowcompassduetoradar( updateteams[index] ) ) + showiconthisteam = 1; + + if ( level.teambased ) + objid = self.objid[updateteams[index]]; + else + objid = self.objid[level.nonteambasedteam]; + + if ( !isdefined( self.compassicons[relativeteam] ) || !showiconthisteam ) + { + objective_state( objid, "invisible" ); + continue; + } + + objective_icon( objid, self.compassicons[relativeteam] ); + objective_state( objid, "active" ); + + if ( self.type == "carryObject" ) + { + if ( isalive( self.carrier ) && !shouldpingobject( relativeteam ) ) + { + objective_onentity( objid, self.carrier ); + continue; + } + + objective_position( objid, self.curorigin ); + } + } +} + +shouldpingobject( relativeteam ) +{ + if ( relativeteam == "friendly" && self.objidpingfriendly ) + return true; + else if ( relativeteam == "enemy" && self.objidpingenemy ) + return true; + + return false; +} + +getupdateteams( relativeteam ) +{ + updateteams = []; + + if ( level.teambased ) + { + if ( relativeteam == "friendly" ) + { + foreach ( team in level.teams ) + { + if ( self isfriendlyteam( team ) ) + updateteams[updateteams.size] = team; + } + } + else if ( relativeteam == "enemy" ) + { + foreach ( team in level.teams ) + { + if ( !self isfriendlyteam( team ) ) + updateteams[updateteams.size] = team; + } + } + } + else if ( relativeteam == "friendly" ) + updateteams[updateteams.size] = level.nonteambasedteam; + else + updateteams[updateteams.size] = "axis"; + + return updateteams; +} + +shouldshowcompassduetoradar( team ) +{ + showcompass = 0; + + if ( !isdefined( self.carrier ) ) + return 0; + + if ( self.carrier hasperk( "specialty_gpsjammer" ) == 0 ) + { + if ( maps\mp\killstreaks\_radar::teamhasspyplane( team ) ) + showcompass = 1; + } + + if ( maps\mp\killstreaks\_radar::teamhassatellite( team ) ) + showcompass = 1; + + return showcompass; +} + +updatevisibilityaccordingtoradar() +{ + self endon( "death" ); + self endon( "carrier_cleared" ); + + while ( true ) + { + level waittill( "radar_status_change" ); + + self updatecompassicons(); + } +} + +setownerteam( team ) +{ + self.ownerteam = team; + self updatetrigger(); + self updatecompassicons(); + self updateworldicons(); + self updateobjective(); +} + +getownerteam() +{ + return self.ownerteam; +} + +setdecaytime( time ) +{ + self.decaytime = int( time * 1000 ); +} + +setusetime( time ) +{ + self.usetime = int( time * 1000 ); +} + +setusetext( text ) +{ + self.usetext = text; +} + +setteamusetime( relativeteam, time ) +{ + self.teamusetimes[relativeteam] = int( time * 1000 ); +} + +setteamusetext( relativeteam, text ) +{ + self.teamusetexts[relativeteam] = text; +} + +setusehinttext( text ) +{ + self.trigger sethintstring( text ); +} + +allowcarry( relativeteam ) +{ + allowuse( relativeteam ); +} + +allowuse( relativeteam ) +{ + self.interactteam = relativeteam; + updatetrigger(); +} + +setvisibleteam( relativeteam ) +{ + self.visibleteam = relativeteam; + + if ( !maps\mp\gametypes\_tweakables::gettweakablevalue( "hud", "showobjicons" ) ) + self.visibleteam = "none"; + + updatecompassicons(); + updateworldicons(); + updateobjective(); +} + +setmodelvisibility( visibility ) +{ + if ( visibility ) + { + for ( index = 0; index < self.visuals.size; index++ ) + { + self.visuals[index] show(); + + if ( self.visuals[index].classname == "script_brushmodel" || self.visuals[index].classname == "script_model" ) + self.visuals[index] thread makesolid(); + } + } + else + { + for ( index = 0; index < self.visuals.size; index++ ) + { + self.visuals[index] hide(); + + if ( self.visuals[index].classname == "script_brushmodel" || self.visuals[index].classname == "script_model" ) + { + self.visuals[index] notify( "changing_solidness" ); + self.visuals[index] notsolid(); + } + } + } +} + +makesolid() +{ + self endon( "death" ); + self notify( "changing_solidness" ); + self endon( "changing_solidness" ); + + while ( true ) + { + for ( i = 0; i < level.players.size; i++ ) + { + if ( level.players[i] istouching( self ) ) + break; + } + + if ( i == level.players.size ) + { + self solid(); + break; + } + + wait 0.05; + } +} + +setcarriervisible( relativeteam ) +{ + self.carriervisible = relativeteam; +} + +setcanuse( relativeteam ) +{ + self.useteam = relativeteam; +} + +set2dicon( relativeteam, shader ) +{ + self.compassicons[relativeteam] = shader; + updatecompassicons(); +} + +set3dicon( relativeteam, shader ) +{ + self.worldicons[relativeteam] = shader; + updateworldicons(); +} + +set3duseicon( relativeteam, shader ) +{ + self.worlduseicons[relativeteam] = shader; +} + +set3diswaypoint( relativeteam, waypoint ) +{ + self.worldiswaypoint[relativeteam] = waypoint; +} + +setcarryicon( shader ) +{ + self.carryicon = shader; +} + +setvisiblecarriermodel( visiblemodel ) +{ + self.visiblecarriermodel = visiblemodel; +} + +getvisiblecarriermodel() +{ + return self.visiblecarriermodel; +} + +destroyobject( deletetrigger, forcehide = 1 ) +{ + self disableobject( forcehide ); + + foreach ( visual in self.visuals ) + { + visual hide(); + visual delete(); + } + + self.trigger notify( "destroyed" ); + + if ( is_true( deletetrigger ) ) + self.trigger delete(); + else + self.trigger triggeron(); +} + +disableobject( forcehide ) +{ + self notify( "disabled" ); + + if ( self.type == "carryObject" || isdefined( forcehide ) && forcehide ) + { + if ( isdefined( self.carrier ) ) + self.carrier takeobject( self ); + + for ( index = 0; index < self.visuals.size; index++ ) + self.visuals[index] hide(); + } + + self.trigger triggeroff(); + self setvisibleteam( "none" ); +} + +enableobject( forceshow ) +{ + if ( self.type == "carryObject" || isdefined( forceshow ) && forceshow ) + { + for ( index = 0; index < self.visuals.size; index++ ) + self.visuals[index] show(); + } + + self.trigger triggeron(); + self setvisibleteam( "any" ); +} + +getrelativeteam( team ) +{ + if ( self.ownerteam == "any" ) + return "friendly"; + + if ( team == self.ownerteam ) + return "friendly"; + else if ( team == getenemyteam( self.ownerteam ) ) + return "enemy"; + else + return "neutral"; +} + +isfriendlyteam( team ) +{ + if ( !level.teambased ) + return true; + + if ( self.ownerteam == "any" ) + return true; + + if ( self.ownerteam == team ) + return true; + + return false; +} + +caninteractwith( player ) +{ + team = player.pers["team"]; + + switch ( self.interactteam ) + { + case "none": + return false; + case "any": + return true; + case "friendly": + if ( level.teambased ) + { + if ( team == self.ownerteam ) + return true; + else + return false; + } + else if ( player == self.ownerteam ) + return true; + else + return false; + case "enemy": + if ( level.teambased ) + { + if ( team != self.ownerteam ) + return true; + else if ( isdefined( self.decayprogress ) && self.decayprogress && self.curprogress > 0 ) + return true; + else + return false; + } + else if ( player != self.ownerteam ) + return true; + else + return false; + default: + assert( 0, "invalid interactTeam" ); + return false; + } +} + +isteam( team ) +{ + if ( team == "neutral" ) + return true; + + if ( isdefined( level.teams[team] ) ) + return true; + + if ( team == "any" ) + return true; + + if ( team == "none" ) + return true; + + return false; +} + +isrelativeteam( relativeteam ) +{ + if ( relativeteam == "friendly" ) + return true; + + if ( relativeteam == "enemy" ) + return true; + + if ( relativeteam == "any" ) + return true; + + if ( relativeteam == "none" ) + return true; + + return false; +} + +getenemyteam( team ) +{ + if ( team == "neutral" ) + return "none"; + else if ( team == "allies" ) + return "axis"; + else + return "allies"; +} + +getnextobjid() +{ + nextid = 0; + + if ( level.releasedobjectives.size > 0 ) + { + nextid = level.releasedobjectives[level.releasedobjectives.size - 1]; + level.releasedobjectives[level.releasedobjectives.size - 1] = undefined; + } + else + { + nextid = level.numgametypereservedobjectives; + level.numgametypereservedobjectives++; + } +/# + if ( nextid >= 32 ) + println( "^3SCRIPT WARNING: Ran out of objective IDs" ); +#/ + if ( nextid > 31 ) + nextid = 31; + + return nextid; +} + +releaseobjid( objid ) +{ + assert( objid < level.numgametypereservedobjectives ); + + for ( i = 0; i < level.releasedobjectives.size; i++ ) + { + if ( objid == level.releasedobjectives[i] && objid == 31 ) + return; + + assert( objid != level.releasedobjectives[i] ); + } + + level.releasedobjectives[level.releasedobjectives.size] = objid; +} + +getlabel() +{ + label = self.trigger.script_label; + + if ( !isdefined( label ) ) + { + label = ""; + return label; + } + + if ( label[0] != "_" ) + return "_" + label; + + return label; +} + +mustmaintainclaim( enabled ) +{ + self.mustmaintainclaim = enabled; +} + +cancontestclaim( enabled ) +{ + self.cancontestclaim = enabled; +} + +setflags( flags ) +{ + objective_setgamemodeflags( self.objectiveid, flags ); +} + +getflags( flags ) +{ + return objective_getgamemodeflags( self.objectiveid ); +} diff --git a/MP/Core/maps/mp/gametypes/_globalentities.gsc b/MP/Core/maps/mp/gametypes/_globalentities.gsc new file mode 100644 index 0000000..df94d58 --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_globalentities.gsc @@ -0,0 +1,3 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + diff --git a/MP/Core/maps/mp/gametypes/_globallogic.gsc b/MP/Core/maps/mp/gametypes/_globallogic.gsc new file mode 100644 index 0000000..2e005b6 --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_globallogic.gsc @@ -0,0 +1,2806 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\_burnplayer; +#include maps\mp\_busing; +#include common_scripts\utility; +#include maps\mp\gametypes\_tweakables; +#include maps\mp\gametypes\_globallogic_ui; +#include maps\mp\gametypes\_class; +#include maps\mp\gametypes\_globallogic_audio; +#include maps\mp\_gameadvertisement; +#include maps\mp\_gamerep; +#include maps\mp\gametypes\_globallogic_spawn; +#include maps\mp\gametypes\_globallogic_score; +#include maps\mp\gametypes\_globallogic_defaults; +#include maps\mp\gametypes\_hud_message; +#include maps\mp\bots\_bot; +#include maps\mp\gametypes\_globallogic_utils; +#include maps\mp\gametypes\_hud; +#include maps\mp\gametypes\_persistence; +#include maps\mp\gametypes\_wager; +#include maps\mp\killstreaks\_killstreaks; +#include maps\mp\_demo; +#include maps\mp\gametypes\_globallogic_player; +#include maps\mp\gametypes\_weapons; +#include maps\mp\_music; +#include maps\mp\_challenges; +#include maps\mp\gametypes\_serversettings; +#include maps\mp\gametypes\_clientids; +#include maps\mp\gametypes\_weaponobjects; +#include maps\mp\gametypes\_scoreboard; +#include maps\mp\gametypes\_killcam; +#include maps\mp\gametypes\_shellshock; +#include maps\mp\gametypes\_deathicons; +#include maps\mp\gametypes\_spectating; +#include maps\mp\gametypes\_objpoints; +#include maps\mp\gametypes\_gameobjects; +#include maps\mp\gametypes\_spawnlogic; +#include maps\mp\_decoy; +#include maps\mp\gametypes\_menus; +#include maps\mp\teams\_teams; +#include maps\mp\gametypes\_damagefeedback; +#include maps\mp\gametypes\_healthoverlay; +#include maps\mp\gametypes\_battlechatter_mp; +#include maps\mp\_bb; +#include maps\mp\gametypes\_friendicons; +#include maps\mp\_multi_extracam; +#include maps\mp\gametypes\_dev; +#include maps\mp\gametypes\_hostmigration; +#include maps\mp\gametypes\_globallogic; + +init() +{ + if ( !isdefined( level.tweakablesinitialized ) ) + maps\mp\gametypes\_tweakables::init(); + + init_session_mode_flags(); + level.splitscreen = issplitscreen(); + level.xenon = getdvar( "xenonGame" ) == "true"; + level.ps3 = getdvar( "ps3Game" ) == "true"; + level.wiiu = getdvar( "wiiuGame" ) == "true"; + level.onlinegame = sessionmodeisonlinegame(); + level.systemlink = sessionmodeissystemlink(); + level.console = level.xenon || level.ps3 || level.wiiu; + level.rankedmatch = gamemodeisusingxp() && !ispregame(); + level.leaguematch = gamemodeismode( level.gamemode_league_match ); + level.contractsenabled = !getgametypesetting( "disableContracts" ); + level.contractsenabled = 0; +/# + if ( getdvarint( "scr_forcerankedmatch" ) == 1 ) + level.rankedmatch = 1; +#/ + level.script = tolower( getdvar( "mapname" ) ); + level.gametype = tolower( getdvar( "g_gametype" ) ); + level.teambased = 0; + level.teamcount = getgametypesetting( "teamCount" ); + level.multiteam = level.teamcount > 2; + + if ( sessionmodeiszombiesgame() ) + { + level.zombie_team_index = level.teamcount + 1; + + if ( 2 == level.zombie_team_index ) + level.zombie_team = "axis"; + else + level.zombie_team = "team" + level.zombie_team_index; + } + + level.teams = []; + level.teamindex = []; + teamcount = level.teamcount; + level.teams["allies"] = "allies"; + level.teams["axis"] = "axis"; + level.teamindex["neutral"] = 0; + level.teamindex["allies"] = 1; + level.teamindex["axis"] = 2; + + for ( teamindex = 3; teamindex <= teamcount; teamindex++ ) + { + level.teams["team" + teamindex] = "team" + teamindex; + level.teamindex["team" + teamindex] = teamindex; + } + + level.overrideteamscore = 0; + level.overrideplayerscore = 0; + level.displayhalftimetext = 0; + level.displayroundendtext = 1; + level.endgameonscorelimit = 1; + level.endgameontimelimit = 1; + level.scoreroundbased = 0; + level.resetplayerscoreeveryround = 0; + level.gameforfeited = 0; + level.forceautoassign = 0; + level.halftimetype = "halftime"; + level.halftimesubcaption = &"MP_SWITCHING_SIDES_CAPS"; + level.laststatustime = 0; + level.waswinning = []; + level.lastslowprocessframe = 0; + level.placement = []; + + foreach ( team in level.teams ) + level.placement[team] = []; + + level.placement["all"] = []; + level.postroundtime = 7.0; + level.inovertime = 0; + level.defaultoffenseradius = 560; + level.dropteam = getdvarint( "sv_maxclients" ); + level.infinalkillcam = 0; + maps\mp\gametypes\_globallogic_ui::init(); + registerdvars(); + maps\mp\gametypes\_class::initperkdvars(); + level.oldschool = getdvarint( "scr_oldschool" ) == 1; + + if ( level.oldschool ) + { + logstring( "game mode: oldschool" ); + setdvar( "jump_height", 64 ); + setdvar( "jump_slowdownEnable", 0 ); + setdvar( "bg_fallDamageMinHeight", 256 ); + setdvar( "bg_fallDamageMaxHeight", 512 ); + setdvar( "player_clipSizeMultiplier", 2.0 ); + } + + precachemodel( "tag_origin" ); + precacherumble( "dtp_rumble" ); + precacherumble( "slide_rumble" ); + precachestatusicon( "hud_status_dead" ); + precachestatusicon( "hud_status_connecting" ); + precache_mp_leaderboards(); + maps\mp\_burnplayer::initburnplayer(); + + if ( !isdefined( game["tiebreaker"] ) ) + game["tiebreaker"] = 0; + + maps\mp\gametypes\_globallogic_audio::registerdialoggroup( "introboost", 1 ); + maps\mp\gametypes\_globallogic_audio::registerdialoggroup( "status", 1 ); + thread maps\mp\_gameadvertisement::init(); + thread maps\mp\_gamerep::init(); + level.disablechallenges = 0; + + if ( level.leaguematch || getdvarint( "scr_disableChallenges" ) > 0 ) + level.disablechallenges = 1; + + level.disablestattracking = getdvarint( "scr_disableStatTracking" ) > 0; +} + +registerdvars() +{ + if ( getdvar( "scr_oldschool" ) == "" ) + setdvar( "scr_oldschool", "0" ); + + makedvarserverinfo( "scr_oldschool" ); + + if ( getdvar( "ui_guncycle" ) == "" ) + setdvar( "ui_guncycle", 0 ); + + makedvarserverinfo( "ui_guncycle" ); + + if ( getdvar( "ui_weapon_tiers" ) == "" ) + setdvar( "ui_weapon_tiers", 0 ); + + makedvarserverinfo( "ui_weapon_tiers" ); + setdvar( "ui_text_endreason", "" ); + makedvarserverinfo( "ui_text_endreason", "" ); + setmatchflag( "bomb_timer", 0 ); + setmatchflag( "enable_popups", 1 ); + setmatchflag( "pregame", ispregame() ); + + if ( getdvar( "scr_vehicle_damage_scalar" ) == "" ) + setdvar( "scr_vehicle_damage_scalar", "1" ); + + level.vehicledamagescalar = getdvarfloat( "scr_vehicle_damage_scalar" ); + level.fire_audio_repeat_duration = getdvarint( _hash_917E4521 ); + level.fire_audio_random_max_duration = getdvarint( _hash_C2DCBC26 ); + teamname = getcustomteamname( level.teamindex["allies"] ); + + if ( isdefined( teamname ) ) + setdvar( "g_customTeamName_Allies", teamname ); + else + setdvar( "g_customTeamName_Allies", "" ); + + teamname = getcustomteamname( level.teamindex["axis"] ); + + if ( isdefined( teamname ) ) + setdvar( "g_customTeamName_Axis", teamname ); + else + setdvar( "g_customTeamName_Axis", "" ); +} + +blank( arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10 ) +{ + +} + +setupcallbacks() +{ + level.spawnplayer = maps\mp\gametypes\_globallogic_spawn::spawnplayer; + level.spawnplayerprediction = maps\mp\gametypes\_globallogic_spawn::spawnplayerprediction; + level.spawnclient = maps\mp\gametypes\_globallogic_spawn::spawnclient; + level.spawnspectator = maps\mp\gametypes\_globallogic_spawn::spawnspectator; + level.spawnintermission = maps\mp\gametypes\_globallogic_spawn::spawnintermission; + level.onplayerscore = maps\mp\gametypes\_globallogic_score::default_onplayerscore; + level.onteamscore = maps\mp\gametypes\_globallogic_score::default_onteamscore; + level.wavespawntimer = ::wavespawntimer; + level.spawnmessage = maps\mp\gametypes\_globallogic_spawn::default_spawnmessage; + level.onspawnplayer = ::blank; + level.onspawnplayerunified = ::blank; + level.onspawnspectator = maps\mp\gametypes\_globallogic_defaults::default_onspawnspectator; + level.onspawnintermission = maps\mp\gametypes\_globallogic_defaults::default_onspawnintermission; + level.onrespawndelay = ::blank; + level.onforfeit = maps\mp\gametypes\_globallogic_defaults::default_onforfeit; + level.ontimelimit = maps\mp\gametypes\_globallogic_defaults::default_ontimelimit; + level.onscorelimit = maps\mp\gametypes\_globallogic_defaults::default_onscorelimit; + level.onalivecountchange = maps\mp\gametypes\_globallogic_defaults::default_onalivecountchange; + level.ondeadevent = undefined; + level.ononeleftevent = maps\mp\gametypes\_globallogic_defaults::default_ononeleftevent; + level.giveteamscore = maps\mp\gametypes\_globallogic_score::giveteamscore; + level.onlastteamaliveevent = maps\mp\gametypes\_globallogic_defaults::default_onlastteamaliveevent; + level.gettimelimit = maps\mp\gametypes\_globallogic_defaults::default_gettimelimit; + level.getteamkillpenalty = maps\mp\gametypes\_globallogic_defaults::default_getteamkillpenalty; + level.getteamkillscore = maps\mp\gametypes\_globallogic_defaults::default_getteamkillscore; + level.iskillboosting = maps\mp\gametypes\_globallogic_score::default_iskillboosting; + level._setteamscore = maps\mp\gametypes\_globallogic_score::_setteamscore; + level._setplayerscore = maps\mp\gametypes\_globallogic_score::_setplayerscore; + level._getteamscore = maps\mp\gametypes\_globallogic_score::_getteamscore; + level._getplayerscore = maps\mp\gametypes\_globallogic_score::_getplayerscore; + level.onprecachegametype = ::blank; + level.onstartgametype = ::blank; + level.onplayerconnect = ::blank; + level.onplayerdisconnect = ::blank; + level.onplayerdamage = ::blank; + level.onplayerkilled = ::blank; + level.onplayerkilledextraunthreadedcbs = []; + level.onteamoutcomenotify = maps\mp\gametypes\_hud_message::teamoutcomenotify; + level.onoutcomenotify = maps\mp\gametypes\_hud_message::outcomenotify; + level.onteamwageroutcomenotify = maps\mp\gametypes\_hud_message::teamwageroutcomenotify; + level.onwageroutcomenotify = maps\mp\gametypes\_hud_message::wageroutcomenotify; + level.setmatchscorehudelemforteam = maps\mp\gametypes\_hud_message::setmatchscorehudelemforteam; + level.onendgame = ::blank; + level.onroundendgame = maps\mp\gametypes\_globallogic_defaults::default_onroundendgame; + level.onmedalawarded = ::blank; + maps\mp\gametypes\_globallogic_ui::setupcallbacks(); +} + +precache_mp_leaderboards() +{ + if ( maps\mp\bots\_bot::is_bot_ranked_match() ) + return; + + if ( sessionmodeiszombiesgame() ) + return; + + if ( !level.rankedmatch ) + return; + + mapname = getdvar( "mapname" ); + globalleaderboards = "LB_MP_GB_XPPRESTIGE LB_MP_GB_SCORE LB_MP_GB_KDRATIO LB_MP_GB_KILLS LB_MP_GB_WINS LB_MP_GB_DEATHS LB_MP_GB_XPMAXPERGAME LB_MP_GB_TACTICALINSERTS LB_MP_GB_TACTICALINSERTSKILLS LB_MP_GB_PRESTIGEXP LB_MP_GB_HEADSHOTS LB_MP_GB_WEAPONS_PRIMARY LB_MP_GB_WEAPONS_SECONDARY"; + careerleaderboard = ""; + + switch ( level.gametype ) + { + case "shrp": + case "sas": + case "oic": + case "gun": + break; + default: + careerleaderboard = " LB_MP_GB_SCOREPERMINUTE"; + break; + } + + gamemodeleaderboard = " LB_MP_GM_" + level.gametype; + gamemodeleaderboardext = " LB_MP_GM_" + level.gametype + "_EXT"; + gamemodehcleaderboard = ""; + gamemodehcleaderboardext = ""; + hardcoremode = getgametypesetting( "hardcoreMode" ); + + if ( isdefined( hardcoremode ) && hardcoremode ) + { + gamemodehcleaderboard = gamemodeleaderboard + "_HC"; + gamemodehcleaderboardext = gamemodeleaderboardext + "_HC"; + } + + mapleaderboard = " LB_MP_MAP_" + getsubstr( mapname, 3, mapname.size ); + precacheleaderboards( globalleaderboards + careerleaderboard + gamemodeleaderboard + gamemodeleaderboardext + gamemodehcleaderboard + gamemodehcleaderboardext + mapleaderboard ); +} + +compareteambygamestat( gamestat, teama, teamb, previous_winner_score ) +{ + winner = undefined; + + if ( teama == "tie" ) + { + winner = "tie"; + + if ( previous_winner_score < game[gamestat][teamb] ) + winner = teamb; + } + else if ( game[gamestat][teama] == game[gamestat][teamb] ) + winner = "tie"; + else if ( game[gamestat][teamb] > game[gamestat][teama] ) + winner = teamb; + else + winner = teama; + + return winner; +} + +determineteamwinnerbygamestat( gamestat ) +{ + teamkeys = getarraykeys( level.teams ); + winner = teamkeys[0]; + previous_winner_score = game[gamestat][winner]; + + for ( teamindex = 1; teamindex < teamkeys.size; teamindex++ ) + { + winner = compareteambygamestat( gamestat, winner, teamkeys[teamindex], previous_winner_score ); + + if ( winner != "tie" ) + previous_winner_score = game[gamestat][winner]; + } + + return winner; +} + +compareteambyteamscore( teama, teamb, previous_winner_score ) +{ + winner = undefined; + teambscore = [[ level._getteamscore ]]( teamb ); + + if ( teama == "tie" ) + { + winner = "tie"; + + if ( previous_winner_score < teambscore ) + winner = teamb; + + return winner; + } + + teamascore = [[ level._getteamscore ]]( teama ); + + if ( teambscore == teamascore ) + winner = "tie"; + else if ( teambscore > teamascore ) + winner = teamb; + else + winner = teama; + + return winner; +} + +determineteamwinnerbyteamscore() +{ + teamkeys = getarraykeys( level.teams ); + winner = teamkeys[0]; + previous_winner_score = [[ level._getteamscore ]]( winner ); + + for ( teamindex = 1; teamindex < teamkeys.size; teamindex++ ) + { + winner = compareteambyteamscore( winner, teamkeys[teamindex], previous_winner_score ); + + if ( winner != "tie" ) + previous_winner_score = [[ level._getteamscore ]]( winner ); + } + + return winner; +} + +forceend( hostsucks ) +{ + if ( !isdefined( hostsucks ) ) + hostsucks = 0; + + if ( level.hostforcedend || level.forcedend ) + return; + + winner = undefined; + + if ( level.teambased ) + { + winner = determineteamwinnerbygamestat( "teamScores" ); + maps\mp\gametypes\_globallogic_utils::logteamwinstring( "host ended game", winner ); + } + else + { + winner = maps\mp\gametypes\_globallogic_score::gethighestscoringplayer(); + + if ( isdefined( winner ) ) + logstring( "host ended game, win: " + winner.name ); + else + logstring( "host ended game, tie" ); + } + + level.forcedend = 1; + level.hostforcedend = 1; + + if ( hostsucks ) + endstring = &"MP_HOST_SUCKS"; + else if ( level.splitscreen ) + endstring = &"MP_ENDED_GAME"; + else + endstring = &"MP_HOST_ENDED_GAME"; + + setmatchflag( "disableIngameMenu", 1 ); + makedvarserverinfo( "ui_text_endreason", endstring ); + setdvar( "ui_text_endreason", endstring ); + thread endgame( winner, endstring ); +} + +killserverpc() +{ + if ( level.hostforcedend || level.forcedend ) + return; + + winner = undefined; + + if ( level.teambased ) + { + winner = determineteamwinnerbygamestat( "teamScores" ); + maps\mp\gametypes\_globallogic_utils::logteamwinstring( "host ended game", winner ); + } + else + { + winner = maps\mp\gametypes\_globallogic_score::gethighestscoringplayer(); + + if ( isdefined( winner ) ) + logstring( "host ended game, win: " + winner.name ); + else + logstring( "host ended game, tie" ); + } + + level.forcedend = 1; + level.hostforcedend = 1; + level.killserver = 1; + endstring = &"MP_HOST_ENDED_GAME"; +/# + println( "kill server; ending game\\n" ); +#/ + thread endgame( winner, endstring ); +} + +atleasttwoteams() +{ + valid_count = 0; + + foreach ( team in level.teams ) + { + if ( level.playercount[team] != 0 ) + valid_count++; + } + + if ( valid_count < 2 ) + return false; + + return true; +} + +checkifteamforfeits( team ) +{ + if ( !game["everExisted"][team] ) + return false; + + if ( level.playercount[team] < 1 && totalplayercount() > 0 ) + return true; + + return false; +} + +checkforforfeit() +{ + forfeit_count = 0; + valid_team = undefined; + + foreach ( team in level.teams ) + { + if ( checkifteamforfeits( team ) ) + { + forfeit_count++; + + if ( !level.multiteam ) + { + thread [[ level.onforfeit ]]( team ); + return true; + } + } + else + valid_team = team; + } + + if ( level.multiteam && forfeit_count == level.teams.size - 1 ) + { + thread [[ level.onforfeit ]]( valid_team ); + return true; + } + + return false; +} + +dospawnqueueupdates() +{ + foreach ( team in level.teams ) + { + if ( level.spawnqueuemodified[team] ) + [[ level.onalivecountchange ]]( team ); + } +} + +isteamalldead( team ) +{ + return level.everexisted[team] && !level.alivecount[team] && !level.playerlives[team]; +} + +areallteamsdead() +{ + foreach ( team in level.teams ) + { + if ( !isteamalldead( team ) ) + return false; + } + + return true; +} + +getlastteamalive() +{ + count = 0; + everexistedcount = 0; + aliveteam = undefined; + + foreach ( team in level.teams ) + { + if ( level.everexisted[team] ) + { + if ( !isteamalldead( team ) ) + { + aliveteam = team; + count++; + } + + everexistedcount++; + } + } + + if ( everexistedcount > 1 && count == 1 ) + return aliveteam; + + return undefined; +} + +dodeadeventupdates() +{ + if ( level.teambased ) + { + if ( areallteamsdead() ) + { + [[ level.ondeadevent ]]( "all" ); + return true; + } + + if ( !isdefined( level.ondeadevent ) ) + { + lastteamalive = getlastteamalive(); + + if ( isdefined( lastteamalive ) ) + { + [[ level.onlastteamaliveevent ]]( lastteamalive ); + return true; + } + } + else + { + foreach ( team in level.teams ) + { + if ( isteamalldead( team ) ) + { + [[ level.ondeadevent ]]( team ); + return true; + } + } + } + } + else if ( totalalivecount() == 0 && totalplayerlives() == 0 && level.maxplayercount > 1 ) + { + [[ level.ondeadevent ]]( "all" ); + return true; + } + + return false; +} + +isonlyoneleftaliveonteam( team ) +{ + return level.lastalivecount[team] > 1 && level.alivecount[team] == 1 && level.playerlives[team] == 1; +} + +doonelefteventupdates() +{ + if ( level.teambased ) + { + foreach ( team in level.teams ) + { + if ( isonlyoneleftaliveonteam( team ) ) + { + [[ level.ononeleftevent ]]( team ); + return true; + } + } + } + else if ( totalalivecount() == 1 && totalplayerlives() == 1 && level.maxplayercount > 1 ) + { + [[ level.ononeleftevent ]]( "all" ); + return true; + } + + return false; +} + +updategameevents() +{ +/# + if ( getdvarint( "scr_hostmigrationtest" ) == 1 ) + return; +#/ + if ( ( level.rankedmatch || level.wagermatch || level.leaguematch ) && !level.ingraceperiod ) + { + if ( level.teambased ) + { + if ( !level.gameforfeited ) + { + if ( game["state"] == "playing" && checkforforfeit() ) + return; + } + else if ( atleasttwoteams() ) + { + level.gameforfeited = 0; + level notify( "abort forfeit" ); + } + } + else if ( !level.gameforfeited ) + { + if ( totalplayercount() == 1 && level.maxplayercount > 1 ) + { + thread [[ level.onforfeit ]](); + return; + } + } + else if ( totalplayercount() > 1 ) + { + level.gameforfeited = 0; + level notify( "abort forfeit" ); + } + } + + if ( !level.playerqueuedrespawn && !level.numlives && !level.inovertime ) + return; + + if ( level.ingraceperiod ) + return; + + if ( level.playerqueuedrespawn ) + dospawnqueueupdates(); + + if ( dodeadeventupdates() ) + return; + + if ( doonelefteventupdates() ) + return; +} + +matchstarttimer() +{ + visionsetnaked( "mpIntro", 0 ); + matchstarttext = createserverfontstring( "objective", 1.5 ); + matchstarttext setpoint( "CENTER", "CENTER", 0, -40 ); + matchstarttext.sort = 1001; + matchstarttext settext( game["strings"]["waiting_for_teams"] ); + matchstarttext.foreground = 0; + matchstarttext.hidewheninmenu = 1; + waitforplayers(); + matchstarttext settext( game["strings"]["match_starting_in"] ); + matchstarttimer = createserverfontstring( "big", 2.2 ); + matchstarttimer setpoint( "CENTER", "CENTER", 0, 0 ); + matchstarttimer.sort = 1001; + matchstarttimer.color = ( 1, 1, 0 ); + matchstarttimer.foreground = 0; + matchstarttimer.hidewheninmenu = 1; + matchstarttimer maps\mp\gametypes\_hud::fontpulseinit(); + counttime = int( level.prematchperiod ); + + if ( counttime >= 2 ) + { + while ( counttime > 0 && !level.gameended ) + { + matchstarttimer setvalue( counttime ); + matchstarttimer thread maps\mp\gametypes\_hud::fontpulse( level ); + + if ( counttime == 2 ) + visionsetnaked( getdvar( "mapname" ), 3.0 ); + + counttime--; + + foreach ( player in level.players ) + player playlocalsound( "uin_start_count_down" ); + + wait 1.0; + } + } + else + visionsetnaked( getdvar( "mapname" ), 1.0 ); + + matchstarttimer destroyelem(); + matchstarttext destroyelem(); +} + +matchstarttimerskip() +{ + if ( !ispregame() ) + visionsetnaked( getdvar( "mapname" ), 0 ); + else + visionsetnaked( "mpIntro", 0 ); +} + +notifyteamwavespawn( team, time ) +{ + if ( time - level.lastwave[team] > level.wavedelay[team] * 1000 ) + { + level notify( "wave_respawn_" + team ); + level.lastwave[team] = time; + level.waveplayerspawnindex[team] = 0; + } +} + +wavespawntimer() +{ + level endon( "game_ended" ); + + while ( game["state"] == "playing" ) + { + time = gettime(); + + foreach ( team in level.teams ) + notifyteamwavespawn( team, time ); + + wait 0.05; + } +} + +hostidledout() +{ + hostplayer = gethostplayer(); +/# + if ( getdvarint( "scr_writeConfigStrings" ) == 1 || getdvarint( "scr_hostmigrationtest" ) == 1 ) + return false; +#/ + if ( isdefined( hostplayer ) && !hostplayer.hasspawned && !isdefined( hostplayer.selectedclass ) ) + return true; + + return false; +} + +incrementmatchcompletionstat( gamemode, playedorhosted, stat ) +{ + self adddstat( "gameHistory", gamemode, "modeHistory", playedorhosted, stat, 1 ); +} + +setmatchcompletionstat( gamemode, playedorhosted, stat ) +{ + self setdstat( "gameHistory", gamemode, "modeHistory", playedorhosted, stat, 1 ); +} + +getcurrentgamemode() +{ + if ( gamemodeismode( level.gamemode_league_match ) ) + return "leaguematch"; + + return "publicmatch"; +} + +getteamscoreratio() +{ + playerteam = self.pers["team"]; + score = getteamscore( playerteam ); + otherteamscore = 0; + + foreach ( team in level.teams ) + { + if ( team == playerteam ) + continue; + + otherteamscore += getteamscore( team ); + } + + if ( level.teams.size > 1 ) + otherteamscore /= ( level.teams.size - 1 ); + + if ( otherteamscore != 0 ) + return float( score ) / float( otherteamscore ); + + return score; +} + +gethighestscore() +{ + highestscore = -999999999; + + for ( index = 0; index < level.players.size; index++ ) + { + player = level.players[index]; + + if ( player.score > highestscore ) + highestscore = player.score; + } + + return highestscore; +} + +getnexthighestscore( score ) +{ + highestscore = -999999999; + + for ( index = 0; index < level.players.size; index++ ) + { + player = level.players[index]; + + if ( player.score >= score ) + continue; + + if ( player.score > highestscore ) + highestscore = player.score; + } + + return highestscore; +} + +sendafteractionreport() +{ +/# + if ( getdvarint( "scr_writeConfigStrings" ) == 1 ) + return; +#/ + if ( !level.onlinegame ) + return; + + if ( ispregame() ) + return; + + if ( sessionmodeiszombiesgame() ) + return; + + for ( index = 0; index < level.players.size; index++ ) + { + player = level.players[index]; + + if ( player is_bot() ) + continue; + + nemesis = player.pers["nemesis_name"]; + + if ( !isdefined( player.pers["killed_players"][nemesis] ) ) + player.pers["killed_players"][nemesis] = 0; + + if ( !isdefined( player.pers["killed_by"][nemesis] ) ) + player.pers["killed_by"][nemesis] = 0; + + spread = player.kills - player.deaths; + + if ( player.pers["cur_kill_streak"] > player.pers["best_kill_streak"] ) + player.pers["best_kill_streak"] = player.pers["cur_kill_streak"]; + + if ( level.rankedmatch || level.wagermatch || level.leaguematch ) + player maps\mp\gametypes\_persistence::setafteractionreportstat( "privateMatch", 0 ); + else + player maps\mp\gametypes\_persistence::setafteractionreportstat( "privateMatch", 1 ); + + player setnemesisxuid( player.pers["nemesis_xuid"] ); + player maps\mp\gametypes\_persistence::setafteractionreportstat( "nemesisName", nemesis ); + player maps\mp\gametypes\_persistence::setafteractionreportstat( "nemesisRank", player.pers["nemesis_rank"] ); + player maps\mp\gametypes\_persistence::setafteractionreportstat( "nemesisRankIcon", player.pers["nemesis_rankIcon"] ); + player maps\mp\gametypes\_persistence::setafteractionreportstat( "nemesisKills", player.pers["killed_players"][nemesis] ); + player maps\mp\gametypes\_persistence::setafteractionreportstat( "nemesisKilledBy", player.pers["killed_by"][nemesis] ); + player maps\mp\gametypes\_persistence::setafteractionreportstat( "bestKillstreak", player.pers["best_kill_streak"] ); + player maps\mp\gametypes\_persistence::setafteractionreportstat( "kills", player.kills ); + player maps\mp\gametypes\_persistence::setafteractionreportstat( "deaths", player.deaths ); + player maps\mp\gametypes\_persistence::setafteractionreportstat( "headshots", player.headshots ); + player maps\mp\gametypes\_persistence::setafteractionreportstat( "score", player.score ); + player maps\mp\gametypes\_persistence::setafteractionreportstat( "xpEarned", int( player.pers["summary"]["xp"] ) ); + player maps\mp\gametypes\_persistence::setafteractionreportstat( "cpEarned", int( player.pers["summary"]["codpoints"] ) ); + player maps\mp\gametypes\_persistence::setafteractionreportstat( "miscBonus", int( player.pers["summary"]["challenge"] + player.pers["summary"]["misc"] ) ); + player maps\mp\gametypes\_persistence::setafteractionreportstat( "matchBonus", int( player.pers["summary"]["match"] ) ); + player maps\mp\gametypes\_persistence::setafteractionreportstat( "demoFileID", getdemofileid() ); + player maps\mp\gametypes\_persistence::setafteractionreportstat( "leagueTeamID", player getleagueteamid() ); + teamscoreratio = player getteamscoreratio(); + scoreboardposition = getplacementforplayer( player ); + + if ( scoreboardposition < 0 ) + scoreboardposition = level.players.size; + + player gamehistoryfinishmatch( 4, player.kills, player.deaths, player.score, scoreboardposition, teamscoreratio ); + placement = level.placement["all"]; + + for ( otherplayerindex = 0; otherplayerindex < placement.size; otherplayerindex++ ) + { + if ( level.placement["all"][otherplayerindex] == player ) + recordplayerstats( player, "position", otherplayerindex ); + } + + if ( level.wagermatch ) + { + recordplayerstats( player, "wagerPayout", player.wagerwinnings ); + player maps\mp\gametypes\_wager::setwagerafteractionreportstats(); + player maps\mp\gametypes\_persistence::setafteractionreportstat( "wagerMatch", 1 ); + } + else + player maps\mp\gametypes\_persistence::setafteractionreportstat( "wagerMatch", 0 ); + + player maps\mp\gametypes\_persistence::setafteractionreportstat( "wagerMatchFailed", 0 ); + + if ( level.rankedmatch || level.wagermatch || level.leaguematch ) + player maps\mp\gametypes\_persistence::setafteractionreportstat( "valid", 1 ); + + if ( isdefined( player.pers["matchesPlayedStatsTracked"] ) ) + { + gamemode = getcurrentgamemode(); + player incrementmatchcompletionstat( gamemode, "played", "completed" ); + + if ( isdefined( player.pers["matchesHostedStatsTracked"] ) ) + { + player incrementmatchcompletionstat( gamemode, "hosted", "completed" ); + player.pers["matchesHostedStatsTracked"] = undefined; + } + + player.pers["matchesPlayedStatsTracked"] = undefined; + } + + recordplayerstats( player, "highestKillStreak", player.pers["best_kill_streak"] ); + recordplayerstats( player, "numUavCalled", player maps\mp\killstreaks\_killstreaks::getkillstreakusage( "uav_used" ) ); + recordplayerstats( player, "numDogsCalleD", player maps\mp\killstreaks\_killstreaks::getkillstreakusage( "dogs_used" ) ); + recordplayerstats( player, "numDogsKills", player.pers["dog_kills"] ); + recordplayermatchend( player ); + recordplayerstats( player, "presentAtEnd", 1 ); + } +} + +gamehistoryplayerkicked() +{ + teamscoreratio = self getteamscoreratio(); + scoreboardposition = getplacementforplayer( self ); + + if ( scoreboardposition < 0 ) + scoreboardposition = level.players.size; +/# + assert( isdefined( self.kills ) ); + assert( isdefined( self.deaths ) ); + assert( isdefined( self.score ) ); + assert( isdefined( scoreboardposition ) ); + assert( isdefined( teamscoreratio ) ); +#/ + self gamehistoryfinishmatch( 2, self.kills, self.deaths, self.score, scoreboardposition, teamscoreratio ); + + if ( isdefined( self.pers["matchesPlayedStatsTracked"] ) ) + { + gamemode = getcurrentgamemode(); + self incrementmatchcompletionstat( gamemode, "played", "kicked" ); + self.pers["matchesPlayedStatsTracked"] = undefined; + } + + uploadstats( self ); + wait 1; +} + +gamehistoryplayerquit() +{ + teamscoreratio = self getteamscoreratio(); + scoreboardposition = getplacementforplayer( self ); + + if ( scoreboardposition < 0 ) + scoreboardposition = level.players.size; + + self gamehistoryfinishmatch( 3, self.kills, self.deaths, self.score, scoreboardposition, teamscoreratio ); + + if ( isdefined( self.pers["matchesPlayedStatsTracked"] ) ) + { + gamemode = getcurrentgamemode(); + self incrementmatchcompletionstat( gamemode, "played", "quit" ); + + if ( isdefined( self.pers["matchesHostedStatsTracked"] ) ) + { + self incrementmatchcompletionstat( gamemode, "hosted", "quit" ); + self.pers["matchesHostedStatsTracked"] = undefined; + } + + self.pers["matchesPlayedStatsTracked"] = undefined; + } + + uploadstats( self ); + + if ( !self ishost() ) + wait 1; +} + +displayroundend( winner, endreasontext ) +{ + if ( level.displayroundendtext ) + { + if ( level.teambased ) + { + if ( winner == "tie" ) + maps\mp\_demo::gameresultbookmark( "round_result", level.teamindex["neutral"], level.teamindex["neutral"] ); + else + maps\mp\_demo::gameresultbookmark( "round_result", level.teamindex[winner], level.teamindex["neutral"] ); + } + + setmatchflag( "cg_drawSpectatorMessages", 0 ); + players = level.players; + + for ( index = 0; index < players.size; index++ ) + { + player = players[index]; + + if ( !waslastround() ) + player notify( "round_ended" ); + + if ( !isdefined( player.pers["team"] ) ) + { + player [[ level.spawnintermission ]]( 1 ); + player closemenu(); + player closeingamemenu(); + continue; + } + + if ( level.wagermatch ) + { + if ( level.teambased ) + player thread [[ level.onteamwageroutcomenotify ]]( winner, 1, endreasontext ); + else + player thread [[ level.onwageroutcomenotify ]]( winner, endreasontext ); + } + else if ( level.teambased ) + { + player thread [[ level.onteamoutcomenotify ]]( winner, 1, endreasontext ); + player maps\mp\gametypes\_globallogic_audio::set_music_on_player( "ROUND_END" ); + } + else + { + player thread [[ level.onoutcomenotify ]]( winner, 1, endreasontext ); + player maps\mp\gametypes\_globallogic_audio::set_music_on_player( "ROUND_END" ); + } + + player setclientuivisibilityflag( "hud_visible", 0 ); + player setclientuivisibilityflag( "g_compassShowEnemies", 0 ); + } + } + + if ( waslastround() ) + roundendwait( level.roundenddelay, 0 ); + else + { + thread maps\mp\gametypes\_globallogic_audio::announceroundwinner( winner, level.roundenddelay / 4 ); + roundendwait( level.roundenddelay, 1 ); + } +} + +displayroundswitch( winner, endreasontext ) +{ + switchtype = level.halftimetype; + + if ( switchtype == "halftime" ) + { + if ( isdefined( level.nextroundisovertime ) && level.nextroundisovertime ) + switchtype = "overtime"; + else if ( level.roundlimit ) + { + if ( game["roundsplayed"] * 2 == level.roundlimit ) + switchtype = "halftime"; + else + switchtype = "intermission"; + } + else if ( level.scorelimit ) + { + if ( game["roundsplayed"] == level.scorelimit - 1 ) + switchtype = "halftime"; + else + switchtype = "intermission"; + } + else + switchtype = "intermission"; + } + + leaderdialog = maps\mp\gametypes\_globallogic_audio::getroundswitchdialog( switchtype ); + setmatchtalkflag( "EveryoneHearsEveryone", 1 ); + players = level.players; + + for ( index = 0; index < players.size; index++ ) + { + player = players[index]; + + if ( !isdefined( player.pers["team"] ) ) + { + player [[ level.spawnintermission ]]( 1 ); + player closemenu(); + player closeingamemenu(); + continue; + } + + player maps\mp\gametypes\_globallogic_audio::leaderdialogonplayer( leaderdialog ); + player maps\mp\gametypes\_globallogic_audio::set_music_on_player( "ROUND_SWITCH" ); + + if ( level.wagermatch ) + player thread [[ level.onteamwageroutcomenotify ]]( switchtype, 1, level.halftimesubcaption ); + else + player thread [[ level.onteamoutcomenotify ]]( switchtype, 0, level.halftimesubcaption ); + + player setclientuivisibilityflag( "hud_visible", 0 ); + } + + roundendwait( level.halftimeroundenddelay, 0 ); +} + +displaygameend( winner, endreasontext ) +{ + setmatchtalkflag( "EveryoneHearsEveryone", 1 ); + setmatchflag( "cg_drawSpectatorMessages", 0 ); + + if ( level.teambased ) + { + if ( winner == "tie" ) + maps\mp\_demo::gameresultbookmark( "game_result", level.teamindex["neutral"], level.teamindex["neutral"] ); + else + maps\mp\_demo::gameresultbookmark( "game_result", level.teamindex[winner], level.teamindex["neutral"] ); + } + + players = level.players; + + for ( index = 0; index < players.size; index++ ) + { + player = players[index]; + + if ( !isdefined( player.pers["team"] ) ) + { + player [[ level.spawnintermission ]]( 1 ); + player closemenu(); + player closeingamemenu(); + continue; + } + + if ( level.wagermatch ) + { + if ( level.teambased ) + player thread [[ level.onteamwageroutcomenotify ]]( winner, 0, endreasontext ); + else + player thread [[ level.onwageroutcomenotify ]]( winner, endreasontext ); + } + else if ( level.teambased ) + player thread [[ level.onteamoutcomenotify ]]( winner, 0, endreasontext ); + else + { + player thread [[ level.onoutcomenotify ]]( winner, 0, endreasontext ); + + if ( isdefined( winner ) && player == winner ) + { + music = game["music"]["victory_" + player.team]; + player maps\mp\gametypes\_globallogic_audio::set_music_on_player( music ); + } + else if ( !level.splitscreen ) + player maps\mp\gametypes\_globallogic_audio::set_music_on_player( "LOSE" ); + } + + player setclientuivisibilityflag( "hud_visible", 0 ); + player setclientuivisibilityflag( "g_compassShowEnemies", 0 ); + } + + if ( level.teambased ) + { + thread maps\mp\gametypes\_globallogic_audio::announcegamewinner( winner, level.postroundtime / 2 ); + players = level.players; + + for ( index = 0; index < players.size; index++ ) + { + player = players[index]; + team = player.pers["team"]; + + if ( level.splitscreen ) + { + if ( winner == "tie" ) + player maps\mp\gametypes\_globallogic_audio::set_music_on_player( "DRAW" ); + else if ( winner == team ) + { + music = game["music"]["victory_" + player.team]; + player maps\mp\gametypes\_globallogic_audio::set_music_on_player( music ); + } + else + player maps\mp\gametypes\_globallogic_audio::set_music_on_player( "LOSE" ); + + continue; + } + + if ( winner == "tie" ) + { + player maps\mp\gametypes\_globallogic_audio::set_music_on_player( "DRAW" ); + continue; + } + + if ( winner == team ) + { + music = game["music"]["victory_" + player.team]; + player maps\mp\gametypes\_globallogic_audio::set_music_on_player( music ); + continue; + } + + player maps\mp\gametypes\_globallogic_audio::set_music_on_player( "LOSE" ); + } + } + + bbprint( "session_epilogs", "reason %s", endreasontext ); + bbprint( "mpmatchfacts", "gametime %d winner %s killstreakcount %d", gettime(), winner, level.killstreak_counter ); + roundendwait( level.postroundtime, 1 ); +} + +getendreasontext() +{ + if ( isdefined( level.endreasontext ) ) + return level.endreasontext; + + if ( hitroundlimit() || hitroundwinlimit() ) + return game["strings"]["round_limit_reached"]; + else if ( hitscorelimit() ) + return game["strings"]["score_limit_reached"]; + + if ( level.forcedend ) + { + if ( level.hostforcedend ) + return &"MP_HOST_ENDED_GAME"; + else + return &"MP_ENDED_GAME"; + } + + return game["strings"]["time_limit_reached"]; +} + +resetoutcomeforallplayers() +{ + players = level.players; + + for ( index = 0; index < players.size; index++ ) + { + player = players[index]; + player notify( "reset_outcome" ); + } +} + +startnextround( winner, endreasontext ) +{ + if ( !isoneround() ) + { + displayroundend( winner, endreasontext ); + maps\mp\gametypes\_globallogic_utils::executepostroundevents(); + + if ( !waslastround() ) + { + if ( checkroundswitch() ) + displayroundswitch( winner, endreasontext ); + + if ( isdefined( level.nextroundisovertime ) && level.nextroundisovertime ) + { + if ( !isdefined( game["overtime_round"] ) ) + game["overtime_round"] = 1; + else + game["overtime_round"]++; + } + + setmatchtalkflag( "DeadChatWithDead", level.voip.deadchatwithdead ); + setmatchtalkflag( "DeadChatWithTeam", level.voip.deadchatwithteam ); + setmatchtalkflag( "DeadHearTeamLiving", level.voip.deadhearteamliving ); + setmatchtalkflag( "DeadHearAllLiving", level.voip.deadhearallliving ); + setmatchtalkflag( "EveryoneHearsEveryone", level.voip.everyonehearseveryone ); + setmatchtalkflag( "DeadHearKiller", level.voip.deadhearkiller ); + setmatchtalkflag( "KillersHearVictim", level.voip.killershearvictim ); + game["state"] = "playing"; + level.allowbattlechatter = getgametypesetting( "allowBattleChatter" ); + map_restart( 1 ); + return true; + } + } + + return false; +} + +settopplayerstats() +{ + if ( level.rankedmatch || level.wagermatch ) + { + placement = level.placement["all"]; + topthreeplayers = min( 3, placement.size ); + + for ( index = 0; index < topthreeplayers; index++ ) + { + if ( level.placement["all"][index].score ) + { + if ( !index ) + { + level.placement["all"][index] addplayerstatwithgametype( "TOPPLAYER", 1 ); + level.placement["all"][index] notify( "topplayer" ); + } + else + level.placement["all"][index] notify( "nottopplayer" ); + + level.placement["all"][index] addplayerstatwithgametype( "TOP3", 1 ); + level.placement["all"][index] addplayerstat( "TOP3ANY", 1 ); + + if ( level.hardcoremode ) + level.placement["all"][index] addplayerstat( "TOP3ANY_HC", 1 ); + + if ( level.multiteam ) + level.placement["all"][index] addplayerstat( "TOP3ANY_MULTITEAM", 1 ); + + level.placement["all"][index] notify( "top3" ); + } + } + + for ( index = 3; index < placement.size; index++ ) + { + level.placement["all"][index] notify( "nottop3" ); + level.placement["all"][index] notify( "nottopplayer" ); + } + + if ( level.teambased ) + { + foreach ( team in level.teams ) + settopteamstats( team ); + } + } +} + +settopteamstats( team ) +{ + placementteam = level.placement[team]; + topthreeteamplayers = min( 3, placementteam.size ); + + if ( placementteam.size < 5 ) + return; + + for ( index = 0; index < topthreeteamplayers; index++ ) + { + if ( placementteam[index].score ) + { + placementteam[index] addplayerstat( "TOP3TEAM", 1 ); + placementteam[index] addplayerstat( "TOP3ANY", 1 ); + + if ( level.hardcoremode ) + placementteam[index] addplayerstat( "TOP3ANY_HC", 1 ); + + if ( level.multiteam ) + placementteam[index] addplayerstat( "TOP3ANY_MULTITEAM", 1 ); + + placementteam[index] addplayerstatwithgametype( "TOP3TEAM", 1 ); + } + } +} + +getgamelength() +{ + if ( !level.timelimit || level.forcedend ) + { + gamelength = maps\mp\gametypes\_globallogic_utils::gettimepassed() / 1000; + gamelength = min( gamelength, 1200 ); + } + else + gamelength = level.timelimit * 60; + + return gamelength; +} + +endgame( winner, endreasontext ) +{ + if ( game["state"] == "postgame" || level.gameended ) + return; + + if ( isdefined( level.onendgame ) ) + [[ level.onendgame ]]( winner ); + + if ( !level.wagermatch ) + setmatchflag( "enable_popups", 0 ); + + if ( !isdefined( level.disableoutrovisionset ) || level.disableoutrovisionset == 0 ) + { + if ( sessionmodeiszombiesgame() && level.forcedend ) + visionsetnaked( "zombie_last_stand", 2.0 ); + else + visionsetnaked( "mpOutro", 2.0 ); + } + + setmatchflag( "cg_drawSpectatorMessages", 0 ); + setmatchflag( "game_ended", 1 ); + game["state"] = "postgame"; + level.gameendtime = gettime(); + level.gameended = 1; + setdvar( "g_gameEnded", 1 ); + level.ingraceperiod = 0; + level notify( "game_ended" ); + level.allowbattlechatter = 0; + maps\mp\gametypes\_globallogic_audio::flushdialog(); + + foreach ( team in level.teams ) + game["lastroundscore"][team] = getteamscore( team ); + + if ( !isdefined( game["overtime_round"] ) || waslastround() ) + { + game["roundsplayed"]++; + game["roundwinner"][game["roundsplayed"]] = winner; + + if ( level.teambased ) + game["roundswon"][winner]++; + } + + if ( isdefined( winner ) && ( level.teambased && isdefined( level.teams[winner] ) ) ) + level.finalkillcam_winner = winner; + else + level.finalkillcam_winner = "none"; + + setgameendtime( 0 ); + updateplacement(); + updaterankedmatch( winner ); + players = level.players; + newtime = gettime(); + gamelength = getgamelength(); + setmatchtalkflag( "EveryoneHearsEveryone", 1 ); + bbgameover = 0; + + if ( isoneround() || waslastround() ) + bbgameover = 1; + + for ( index = 0; index < players.size; index++ ) + { + player = players[index]; + player maps\mp\gametypes\_globallogic_player::freezeplayerforroundend(); + player thread roundenddof( 4.0 ); + player maps\mp\gametypes\_globallogic_ui::freegameplayhudelems(); + player maps\mp\gametypes\_weapons::updateweapontimings( newtime ); + player bbplayermatchend( gamelength, endreasontext, bbgameover ); + + if ( ispregame() ) + continue; + + if ( ( level.rankedmatch || level.wagermatch || level.leaguematch ) && !player issplitscreen() ) + { + if ( level.leaguematch ) + { + player setdstat( "AfterActionReportStats", "lobbyPopup", "leaguesummary" ); + continue; + } + + if ( isdefined( player.setpromotion ) ) + { + player setdstat( "AfterActionReportStats", "lobbyPopup", "promotion" ); + continue; + } + + player setdstat( "AfterActionReportStats", "lobbyPopup", "summary" ); + } + } + + maps\mp\_music::setmusicstate( "SILENT" ); + + if ( !level.infinalkillcam ) + { + + } + + maps\mp\_gamerep::gamerepupdateinformationforround(); + maps\mp\gametypes\_wager::finalizewagerround(); + thread maps\mp\_challenges::roundend( winner ); + + if ( startnextround( winner, endreasontext ) ) + return; + + if ( !isoneround() && !level.gameforfeited ) + { + if ( isdefined( level.onroundendgame ) ) + winner = [[ level.onroundendgame ]]( winner ); + + endreasontext = getendreasontext(); + } + + if ( !level.wagermatch && !sessionmodeiszombiesgame() ) + maps\mp\gametypes\_globallogic_score::updatewinlossstats( winner ); + + if ( level.teambased ) + { + if ( winner == "tie" ) + recordgameresult( "draw" ); + else + recordgameresult( winner ); + } + else if ( !isdefined( winner ) ) + recordgameresult( "draw" ); + else + recordgameresult( winner.team ); + + skillupdate( winner, level.teambased ); + recordleaguewinner( winner ); + settopplayerstats(); + thread maps\mp\_challenges::gameend( winner ); + + if ( !isdefined( level.skipgameend ) || !level.skipgameend ) + { + if ( isdefined( level.preendgamefunction ) ) + thread [[ level.preendgamefunction ]]( level.postroundtime ); + + displaygameend( winner, endreasontext ); + } + + if ( isoneround() ) + maps\mp\gametypes\_globallogic_utils::executepostroundevents(); + + level.intermission = 1; + maps\mp\_gamerep::gamerepanalyzeandreport(); + + if ( !ispregame() ) + thread sendafteractionreport(); + + maps\mp\gametypes\_wager::finalizewagergame(); + setmatchtalkflag( "EveryoneHearsEveryone", 1 ); + players = level.players; + + for ( index = 0; index < players.size; index++ ) + { + player = players[index]; + recordplayerstats( player, "presentAtEnd", 1 ); + player closemenu(); + player closeingamemenu(); + player notify( "reset_outcome" ); + player thread [[ level.spawnintermission ]](); + player setclientuivisibilityflag( "hud_visible", 1 ); + } + + if ( isdefined( level.endgamefunction ) ) + level thread [[ level.endgamefunction ]](); + + level notify( "sfade" ); + logstring( "game ended" ); + + if ( !isdefined( level.skipgameend ) || !level.skipgameend ) + wait 5.0; + + exitlevel( 0 ); +} + +bbplayermatchend( gamelength, endreasonstring, gameover ) +{ + playerrank = getplacementforplayer( self ); + totaltimeplayed = 0; + + if ( isdefined( self.timeplayed ) && isdefined( self.timeplayed["total"] ) ) + { + totaltimeplayed = self.timeplayed["total"]; + + if ( totaltimeplayed > gamelength ) + totaltimeplayed = gamelength; + } + + xuid = self getxuid(); + bbprint( "mpplayermatchfacts", "score %d momentum %d endreason %s sessionrank %d playtime %d xuid %s gameover %d team %s", self.pers["score"], self.pers["momentum"], endreasonstring, playerrank, totaltimeplayed, xuid, gameover, self.pers["team"] ); +} + +roundendwait( defaultdelay, matchbonus ) +{ + notifiesdone = 0; + + while ( !notifiesdone ) + { + players = level.players; + notifiesdone = 1; + + for ( index = 0; index < players.size; index++ ) + { + if ( !isdefined( players[index].doingnotify ) || !players[index].doingnotify ) + continue; + + notifiesdone = 0; + } + + wait 0.5; + } + + if ( !matchbonus ) + { + wait( defaultdelay ); + level notify( "round_end_done" ); + return; + } + + wait( defaultdelay / 2 ); + level notify( "give_match_bonus" ); + wait( defaultdelay / 2 ); + notifiesdone = 0; + + while ( !notifiesdone ) + { + players = level.players; + notifiesdone = 1; + + for ( index = 0; index < players.size; index++ ) + { + if ( !isdefined( players[index].doingnotify ) || !players[index].doingnotify ) + continue; + + notifiesdone = 0; + } + + wait 0.5; + } + + level notify( "round_end_done" ); +} + +roundenddof( time ) +{ + self setdepthoffield( 0, 128, 512, 4000, 6, 1.8 ); +} + +checktimelimit() +{ + if ( isdefined( level.timelimitoverride ) && level.timelimitoverride ) + return; + + if ( game["state"] != "playing" ) + { + setgameendtime( 0 ); + return; + } + + if ( level.timelimit <= 0 ) + { + setgameendtime( 0 ); + return; + } + + if ( level.inprematchperiod ) + { + setgameendtime( 0 ); + return; + } + + if ( level.timerstopped ) + { + setgameendtime( 0 ); + return; + } + + if ( !isdefined( level.starttime ) ) + return; + + timeleft = maps\mp\gametypes\_globallogic_utils::gettimeremaining(); + setgameendtime( gettime() + int( timeleft ) ); + + if ( timeleft > 0 ) + return; + + [[ level.ontimelimit ]](); +} + +allteamsunderscorelimit() +{ + foreach ( team in level.teams ) + { + if ( game["teamScores"][team] >= level.scorelimit ) + return false; + } + + return true; +} + +checkscorelimit() +{ + if ( game["state"] != "playing" ) + return false; + + if ( level.scorelimit <= 0 ) + return false; + + if ( level.teambased ) + { + if ( allteamsunderscorelimit() ) + return false; + } + else + { + if ( !isplayer( self ) ) + return false; + + if ( self.pointstowin < level.scorelimit ) + return false; + } + + [[ level.onscorelimit ]](); +} + +updategametypedvars() +{ + level endon( "game_ended" ); + + while ( game["state"] == "playing" ) + { + roundlimit = clamp( getgametypesetting( "roundLimit" ), level.roundlimitmin, level.roundlimitmax ); + + if ( roundlimit != level.roundlimit ) + { + level.roundlimit = roundlimit; + level notify( "update_roundlimit" ); + } + + timelimit = [[ level.gettimelimit ]](); + + if ( timelimit != level.timelimit ) + { + level.timelimit = timelimit; + setdvar( "ui_timelimit", level.timelimit ); + level notify( "update_timelimit" ); + } + + thread checktimelimit(); + scorelimit = clamp( getgametypesetting( "scoreLimit" ), level.scorelimitmin, level.scorelimitmax ); + + if ( scorelimit != level.scorelimit ) + { + level.scorelimit = scorelimit; + setdvar( "ui_scorelimit", level.scorelimit ); + level notify( "update_scorelimit" ); + } + + thread checkscorelimit(); + + if ( isdefined( level.starttime ) ) + { + if ( maps\mp\gametypes\_globallogic_utils::gettimeremaining() < 3000 ) + { + wait 0.1; + continue; + } + } + + wait 1; + } +} + +removedisconnectedplayerfromplacement() +{ + offset = 0; + numplayers = level.placement["all"].size; + found = 0; + + for ( i = 0; i < numplayers; i++ ) + { + if ( level.placement["all"][i] == self ) + found = 1; + + if ( found ) + level.placement["all"][i] = level.placement["all"][i + 1]; + } + + if ( !found ) + return; + + level.placement["all"][numplayers - 1] = undefined; + assert( level.placement["all"].size == numplayers - 1 ); +/# + maps\mp\gametypes\_globallogic_utils::assertproperplacement(); +#/ + updateteamplacement(); + + if ( level.teambased ) + return; + + numplayers = level.placement["all"].size; + + for ( i = 0; i < numplayers; i++ ) + { + player = level.placement["all"][i]; + player notify( "update_outcome" ); + } +} + +updateplacement() +{ + if ( !level.players.size ) + return; + + level.placement["all"] = []; + + for ( index = 0; index < level.players.size; index++ ) + { + if ( isdefined( level.teams[level.players[index].team] ) ) + level.placement["all"][level.placement["all"].size] = level.players[index]; + } + + placementall = level.placement["all"]; + + if ( level.teambased ) + { + for ( i = 1; i < placementall.size; i++ ) + { + player = placementall[i]; + playerscore = player.score; + + for ( j = i - 1; j >= 0 && ( playerscore > placementall[j].score || playerscore == placementall[j].score && player.deaths < placementall[j].deaths ); j-- ) + placementall[j + 1] = placementall[j]; + + placementall[j + 1] = player; + } + } + else + { + for ( i = 1; i < placementall.size; i++ ) + { + player = placementall[i]; + playerscore = player.pointstowin; + + for ( j = i - 1; j >= 0 && ( playerscore > placementall[j].pointstowin || playerscore == placementall[j].pointstowin && player.deaths < placementall[j].deaths ); j-- ) + placementall[j + 1] = placementall[j]; + + placementall[j + 1] = player; + } + } + + level.placement["all"] = placementall; +/# + maps\mp\gametypes\_globallogic_utils::assertproperplacement(); +#/ + updateteamplacement(); +} + +updateteamplacement() +{ + foreach ( team in level.teams ) + placement[team] = []; + + placement["spectator"] = []; + + if ( !level.teambased ) + return; + + placementall = level.placement["all"]; + placementallsize = placementall.size; + + for ( i = 0; i < placementallsize; i++ ) + { + player = placementall[i]; + team = player.pers["team"]; + placement[team][placement[team].size] = player; + } + + foreach ( team in level.teams ) + level.placement[team] = placement[team]; +} + +getplacementforplayer( player ) +{ + updateplacement(); + playerrank = -1; + placement = level.placement["all"]; + + for ( placementindex = 0; placementindex < placement.size; placementindex++ ) + { + if ( level.placement["all"][placementindex] == player ) + { + playerrank = placementindex + 1; + break; + } + } + + return playerrank; +} + +istopscoringplayer( player ) +{ + topplayer = 0; + updateplacement(); + assert( level.placement["all"].size > 0 ); + + if ( level.placement["all"].size == 0 ) + return 0; + + if ( level.teambased ) + { + topscore = level.placement["all"][0].score; + + for ( index = 0; index < level.placement["all"].size; index++ ) + { + if ( level.placement["all"][index].score == 0 ) + break; + + if ( topscore > level.placement["all"][index].score ) + break; + + if ( self == level.placement["all"][index] ) + { + topscoringplayer = 1; + break; + } + } + } + else + { + topscore = level.placement["all"][0].pointstowin; + + for ( index = 0; index < level.placement["all"].size; index++ ) + { + if ( level.placement["all"][index].pointstowin == 0 ) + break; + + if ( topscore > level.placement["all"][index].pointstowin ) + break; + + if ( self == level.placement["all"][index] ) + { + topplayer = 1; + break; + } + } + } + + return topplayer; +} + +sortdeadplayers( team ) +{ + if ( !level.playerqueuedrespawn ) + return; + + for ( i = 1; i < level.deadplayers[team].size; i++ ) + { + player = level.deadplayers[team][i]; + + for ( j = i - 1; j >= 0 && player.deathtime < level.deadplayers[team][j].deathtime; j-- ) + level.deadplayers[team][j + 1] = level.deadplayers[team][j]; + + level.deadplayers[team][j + 1] = player; + } + + for ( i = 0; i < level.deadplayers[team].size; i++ ) + { + if ( level.deadplayers[team][i].spawnqueueindex != i ) + level.spawnqueuemodified[team] = 1; + + level.deadplayers[team][i].spawnqueueindex = i; + } +} + +totalalivecount() +{ + count = 0; + + foreach ( team in level.teams ) + count += level.alivecount[team]; + + return count; +} + +totalplayerlives() +{ + count = 0; + + foreach ( team in level.teams ) + count += level.playerlives[team]; + + return count; +} + +totalplayercount() +{ + count = 0; + + foreach ( team in level.teams ) + count += level.playercount[team]; + + return count; +} + +initteamvariables( team ) +{ + if ( !isdefined( level.alivecount ) ) + level.alivecount = []; + + level.alivecount[team] = 0; + level.lastalivecount[team] = 0; + + if ( !isdefined( game["everExisted"] ) ) + game["everExisted"] = []; + + if ( !isdefined( game["everExisted"][team] ) ) + game["everExisted"][team] = 0; + + level.everexisted[team] = 0; + level.wavedelay[team] = 0; + level.lastwave[team] = 0; + level.waveplayerspawnindex[team] = 0; + resetteamvariables( team ); +} + +resetteamvariables( team ) +{ + level.playercount[team] = 0; + level.botscount[team] = 0; + level.lastalivecount[team] = level.alivecount[team]; + level.alivecount[team] = 0; + level.playerlives[team] = 0; + level.aliveplayers[team] = []; + level.deadplayers[team] = []; + level.squads[team] = []; + level.spawnqueuemodified[team] = 0; +} + +updateteamstatus() +{ + level notify( "updating_team_status" ); + level endon( "updating_team_status" ); + level endon( "game_ended" ); + waittillframeend; + wait 0; + + if ( game["state"] == "postgame" ) + return; + + resettimeout(); + + foreach ( team in level.teams ) + resetteamvariables( team ); + + level.activeplayers = []; + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( !isdefined( player ) && level.splitscreen ) + continue; + + team = player.team; + class = player.class; + + if ( team != "spectator" && ( isdefined( class ) && class != "" ) ) + { + level.playercount[team]++; + + if ( isdefined( player.pers["isBot"] ) ) + level.botscount[team]++; + + if ( player.sessionstate == "playing" ) + { + level.alivecount[team]++; + level.playerlives[team]++; + player.spawnqueueindex = -1; + + if ( isalive( player ) ) + { + level.aliveplayers[team][level.aliveplayers[team].size] = player; + level.activeplayers[level.activeplayers.size] = player; + } + else + level.deadplayers[team][level.deadplayers[team].size] = player; + + continue; + } + + level.deadplayers[team][level.deadplayers[team].size] = player; + + if ( player maps\mp\gametypes\_globallogic_spawn::mayspawn() ) + level.playerlives[team]++; + } + } + + totalalive = totalalivecount(); + + if ( totalalive > level.maxplayercount ) + level.maxplayercount = totalalive; + + foreach ( team in level.teams ) + { + if ( level.alivecount[team] ) + { + game["everExisted"][team] = 1; + level.everexisted[team] = 1; + } + + sortdeadplayers( team ); + } + + level updategameevents(); +} + +checkteamscorelimitsoon( team ) +{ + assert( isdefined( team ) ); + + if ( level.scorelimit <= 0 ) + return; + + if ( !level.teambased ) + return; + + if ( maps\mp\gametypes\_globallogic_utils::gettimepassed() < 60000 ) + return; + + timeleft = maps\mp\gametypes\_globallogic_utils::getestimatedtimeuntilscorelimit( team ); + + if ( timeleft < 1 ) + level notify( "match_ending_soon", "score" ); +} + +checkplayerscorelimitsoon() +{ + assert( isplayer( self ) ); + + if ( level.scorelimit <= 0 ) + return; + + if ( level.teambased ) + return; + + if ( maps\mp\gametypes\_globallogic_utils::gettimepassed() < 60000 ) + return; + + timeleft = maps\mp\gametypes\_globallogic_utils::getestimatedtimeuntilscorelimit( undefined ); + + if ( timeleft < 1 ) + level notify( "match_ending_soon", "score" ); +} + +timelimitclock() +{ + level endon( "game_ended" ); + wait 0.05; + clockobject = spawn( "script_origin", ( 0, 0, 0 ) ); + + while ( game["state"] == "playing" ) + { + if ( !level.timerstopped && level.timelimit ) + { + timeleft = maps\mp\gametypes\_globallogic_utils::gettimeremaining() / 1000; + timeleftint = int( timeleft + 0.5 ); + + if ( timeleftint == 601 ) + clientnotify( "notify_10" ); + + if ( timeleftint == 301 ) + clientnotify( "notify_5" ); + + if ( timeleftint == 60 ) + clientnotify( "notify_1" ); + + if ( timeleftint == 12 ) + clientnotify( "notify_count" ); + + if ( timeleftint >= 40 && timeleftint <= 60 ) + level notify( "match_ending_soon", "time" ); + + if ( timeleftint >= 30 && timeleftint <= 40 ) + level notify( "match_ending_pretty_soon", "time" ); + + if ( timeleftint <= 32 ) + level notify( "match_ending_vox" ); + + if ( timeleftint <= 10 || timeleftint <= 30 && timeleftint % 2 == 0 ) + { + level notify( "match_ending_very_soon", "time" ); + + if ( timeleftint == 0 ) + break; + + clockobject playsound( "mpl_ui_timer_countdown" ); + } + + if ( timeleft - floor( timeleft ) >= 0.05 ) + wait( timeleft - floor( timeleft ) ); + } + + wait 1.0; + } +} + +timelimitclock_intermission( waittime ) +{ + setgameendtime( gettime() + int( waittime * 1000 ) ); + clockobject = spawn( "script_origin", ( 0, 0, 0 ) ); + + if ( waittime >= 10.0 ) + wait( waittime - 10.0 ); + + for (;;) + { + clockobject playsound( "mpl_ui_timer_countdown" ); + wait 1.0; + } +} + +startgame() +{ + thread maps\mp\gametypes\_globallogic_utils::gametimer(); + level.timerstopped = 0; + setmatchtalkflag( "DeadChatWithDead", level.voip.deadchatwithdead ); + setmatchtalkflag( "DeadChatWithTeam", level.voip.deadchatwithteam ); + setmatchtalkflag( "DeadHearTeamLiving", level.voip.deadhearteamliving ); + setmatchtalkflag( "DeadHearAllLiving", level.voip.deadhearallliving ); + setmatchtalkflag( "EveryoneHearsEveryone", level.voip.everyonehearseveryone ); + setmatchtalkflag( "DeadHearKiller", level.voip.deadhearkiller ); + setmatchtalkflag( "KillersHearVictim", level.voip.killershearvictim ); + prematchperiod(); + level notify( "prematch_over" ); + thread timelimitclock(); + thread graceperiod(); + thread watchmatchendingsoon(); + thread maps\mp\gametypes\_globallogic_audio::musiccontroller(); + recordmatchbegin(); +} + +waitforplayers() +{ + starttime = gettime(); + + while ( getnumconnectedplayers() < 1 ) + { + wait 0.05; + + if ( gettime() - starttime > 120000 ) + exitlevel( 0 ); + } +} + +prematchperiod() +{ + setmatchflag( "hud_hardcore", level.hardcoremode ); + level endon( "game_ended" ); + + if ( level.prematchperiod > 0 ) + { + thread matchstarttimer(); + waitforplayers(); + wait( level.prematchperiod ); + } + else + { + matchstarttimerskip(); + wait 0.05; + } + + level.inprematchperiod = 0; + + for ( index = 0; index < level.players.size; index++ ) + { + level.players[index] freeze_player_controls( 0 ); + level.players[index] enableweapons(); + } + + maps\mp\gametypes\_wager::prematchperiod(); + + if ( game["state"] != "playing" ) + return; +} + +graceperiod() +{ + level endon( "game_ended" ); + + if ( isdefined( level.graceperiodfunc ) ) + [[ level.graceperiodfunc ]](); + else + wait( level.graceperiod ); + + level notify( "grace_period_ending" ); + wait 0.05; + level.ingraceperiod = 0; + + if ( game["state"] != "playing" ) + return; + + if ( level.numlives ) + { + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( !player.hasspawned && player.sessionteam != "spectator" && !isalive( player ) ) + player.statusicon = "hud_status_dead"; + } + } + + level thread updateteamstatus(); +} + +watchmatchendingsoon() +{ + setdvar( "xblive_matchEndingSoon", 0 ); + + level waittill( "match_ending_soon", reason ); + + setdvar( "xblive_matchEndingSoon", 1 ); +} + +assertteamvariables() +{ + if ( !level.createfx_enabled && !sessionmodeiszombiesgame() ) + { + foreach ( team in level.teams ) + { + assert( isdefined( game["strings"][team + "_win"] ) ); + assert( isdefined( game["strings"][team + "_win_round"] ) ); + assert( isdefined( game["strings"][team + "_mission_accomplished"] ) ); + assert( isdefined( game["strings"][team + "_eliminated"] ) ); + assert( isdefined( game["strings"][team + "_forfeited"] ) ); + assert( isdefined( game["strings"][team + "_name"] ) ); + assert( isdefined( game["music"]["spawn_" + team] ) ); + assert( isdefined( game["music"]["victory_" + team] ) ); + assert( isdefined( game["icons"][team] ) ); + assert( isdefined( game["voice"][team] ) ); + } + } +} + +anyteamhaswavedelay() +{ + foreach ( team in level.teams ) + { + if ( level.wavedelay[team] ) + return true; + } + + return false; +} + +callback_startgametype() +{ + level.prematchperiod = 0; + level.intermission = 0; + setmatchflag( "cg_drawSpectatorMessages", 1 ); + setmatchflag( "game_ended", 0 ); + + if ( !isdefined( game["gamestarted"] ) ) + { + if ( !isdefined( game["allies"] ) ) + game["allies"] = "seals"; + + if ( !isdefined( game["axis"] ) ) + game["axis"] = "pmc"; + + if ( !isdefined( game["attackers"] ) ) + game["attackers"] = "allies"; + + if ( !isdefined( game["defenders"] ) ) + game["defenders"] = "axis"; + + assert( game["attackers"] != game["defenders"] ); + + foreach ( team in level.teams ) + { + if ( !isdefined( game[team] ) ) + game[team] = "pmc"; + } + + if ( !isdefined( game["state"] ) ) + game["state"] = "playing"; + + precacherumble( "damage_heavy" ); + precacherumble( "damage_light" ); + precacheshader( "white" ); + precacheshader( "black" ); + makedvarserverinfo( "scr_allies", "marines" ); + makedvarserverinfo( "scr_axis", "nva" ); + makedvarserverinfo( "cg_thirdPersonAngle", 354 ); + setdvar( "cg_thirdPersonAngle", 354 ); + game["strings"]["press_to_spawn"] = &"PLATFORM_PRESS_TO_SPAWN"; + + if ( level.teambased ) + { + game["strings"]["waiting_for_teams"] = &"MP_WAITING_FOR_TEAMS"; + game["strings"]["opponent_forfeiting_in"] = &"MP_OPPONENT_FORFEITING_IN"; + } + else + { + game["strings"]["waiting_for_teams"] = &"MP_WAITING_FOR_PLAYERS"; + game["strings"]["opponent_forfeiting_in"] = &"MP_OPPONENT_FORFEITING_IN"; + } + + game["strings"]["match_starting_in"] = &"MP_MATCH_STARTING_IN"; + game["strings"]["spawn_next_round"] = &"MP_SPAWN_NEXT_ROUND"; + game["strings"]["waiting_to_spawn"] = &"MP_WAITING_TO_SPAWN"; + game["strings"]["waiting_to_spawn_ss"] = &"MP_WAITING_TO_SPAWN_SS"; + game["strings"]["you_will_spawn"] = &"MP_YOU_WILL_RESPAWN"; + game["strings"]["match_starting"] = &"MP_MATCH_STARTING"; + game["strings"]["change_class"] = &"MP_CHANGE_CLASS_NEXT_SPAWN"; + game["strings"]["last_stand"] = &"MPUI_LAST_STAND"; + game["strings"]["cowards_way"] = &"PLATFORM_COWARDS_WAY_OUT"; + game["strings"]["tie"] = &"MP_MATCH_TIE"; + game["strings"]["round_draw"] = &"MP_ROUND_DRAW"; + game["strings"]["enemies_eliminated"] = &"MP_ENEMIES_ELIMINATED"; + game["strings"]["score_limit_reached"] = &"MP_SCORE_LIMIT_REACHED"; + game["strings"]["round_limit_reached"] = &"MP_ROUND_LIMIT_REACHED"; + game["strings"]["time_limit_reached"] = &"MP_TIME_LIMIT_REACHED"; + game["strings"]["players_forfeited"] = &"MP_PLAYERS_FORFEITED"; + game["strings"]["other_teams_forfeited"] = &"MP_OTHER_TEAMS_FORFEITED"; + assertteamvariables(); + [[ level.onprecachegametype ]](); + game["gamestarted"] = 1; + game["totalKills"] = 0; + + foreach ( team in level.teams ) + { + game["teamScores"][team] = 0; + game["totalKillsTeam"][team] = 0; + } + + if ( !ispregame() ) + level.prematchperiod = getgametypesetting( "prematchperiod" ); + + if ( getdvarint( "xblive_clanmatch" ) != 0 ) + { + foreach ( team in level.teams ) + game["icons"][team] = "composite_emblem_team_axis"; + + game["icons"]["allies"] = "composite_emblem_team_allies"; + game["icons"]["axis"] = "composite_emblem_team_axis"; + } + } + else if ( !level.splitscreen ) + level.prematchperiod = getgametypesetting( "preroundperiod" ); + + if ( !isdefined( game["timepassed"] ) ) + game["timepassed"] = 0; + + if ( !isdefined( game["roundsplayed"] ) ) + game["roundsplayed"] = 0; + + setroundsplayed( game["roundsplayed"] ); + + if ( isdefined( game["overtime_round"] ) ) + setmatchflag( "overtime", 1 ); + else + setmatchflag( "overtime", 0 ); + + if ( !isdefined( game["roundwinner"] ) ) + game["roundwinner"] = []; + + if ( !isdefined( game["lastroundscore"] ) ) + game["lastroundscore"] = []; + + if ( !isdefined( game["roundswon"] ) ) + game["roundswon"] = []; + + if ( !isdefined( game["roundswon"]["tie"] ) ) + game["roundswon"]["tie"] = 0; + + foreach ( team in level.teams ) + { + if ( !isdefined( game["roundswon"][team] ) ) + game["roundswon"][team] = 0; + + level.teamspawnpoints[team] = []; + level.spawn_point_team_class_names[team] = []; + } + + level.skipvote = 0; + level.gameended = 0; + setdvar( "g_gameEnded", 0 ); + level.objidstart = 0; + level.forcedend = 0; + level.hostforcedend = 0; + level.hardcoremode = getgametypesetting( "hardcoreMode" ); + + if ( level.hardcoremode ) + { + logstring( "game mode: hardcore" ); + + if ( !isdefined( level.friendlyfiredelaytime ) ) + level.friendlyfiredelaytime = 0; + } + + if ( getdvar( "scr_max_rank" ) == "" ) + setdvar( "scr_max_rank", "0" ); + + level.rankcap = getdvarint( "scr_max_rank" ); + + if ( getdvar( "scr_min_prestige" ) == "" ) + setdvar( "scr_min_prestige", "0" ); + + level.minprestige = getdvarint( "scr_min_prestige" ); + level.usestartspawns = 1; + level.roundscorecarry = getgametypesetting( "roundscorecarry" ); + level.allowhitmarkers = getgametypesetting( "allowhitmarkers" ); + level.playerqueuedrespawn = getgametypesetting( "playerQueuedRespawn" ); + level.playerforcerespawn = getgametypesetting( "playerForceRespawn" ); + level.roundstartexplosivedelay = getgametypesetting( "roundStartExplosiveDelay" ); + level.roundstartkillstreakdelay = getgametypesetting( "roundStartKillstreakDelay" ); + level.perksenabled = getgametypesetting( "perksEnabled" ); + level.disableattachments = getgametypesetting( "disableAttachments" ); + level.disabletacinsert = getgametypesetting( "disableTacInsert" ); + level.disablecac = getgametypesetting( "disableCAC" ); + level.disableclassselection = getgametypesetting( "disableClassSelection" ); + level.disableweapondrop = getgametypesetting( "disableweapondrop" ); + level.onlyheadshots = getgametypesetting( "onlyHeadshots" ); + level.minimumallowedteamkills = getgametypesetting( "teamKillPunishCount" ) - 1; + level.teamkillreducedpenalty = getgametypesetting( "teamKillReducedPenalty" ); + level.teamkillpointloss = getgametypesetting( "teamKillPointLoss" ); + level.teamkillspawndelay = getgametypesetting( "teamKillSpawnDelay" ); + level.deathpointloss = getgametypesetting( "deathPointLoss" ); + level.leaderbonus = getgametypesetting( "leaderBonus" ); + level.forceradar = getgametypesetting( "forceRadar" ); + level.playersprinttime = getgametypesetting( "playerSprintTime" ); + level.bulletdamagescalar = getgametypesetting( "bulletDamageScalar" ); + level.playermaxhealth = getgametypesetting( "playerMaxHealth" ); + level.playerhealthregentime = getgametypesetting( "playerHealthRegenTime" ); + level.playerrespawndelay = getgametypesetting( "playerRespawnDelay" ); + level.playerobjectiveheldrespawndelay = getgametypesetting( "playerObjectiveHeldRespawnDelay" ); + level.waverespawndelay = getgametypesetting( "waveRespawnDelay" ); + level.suicidespawndelay = getgametypesetting( "spawnsuicidepenalty" ); + level.teamkilledspawndelay = getgametypesetting( "spawnteamkilledpenalty" ); + level.maxsuicidesbeforekick = getgametypesetting( "maxsuicidesbeforekick" ); + level.spectatetype = getgametypesetting( "spectateType" ); + level.voip = spawnstruct(); + level.voip.deadchatwithdead = getgametypesetting( "voipDeadChatWithDead" ); + level.voip.deadchatwithteam = getgametypesetting( "voipDeadChatWithTeam" ); + level.voip.deadhearallliving = getgametypesetting( "voipDeadHearAllLiving" ); + level.voip.deadhearteamliving = getgametypesetting( "voipDeadHearTeamLiving" ); + level.voip.everyonehearseveryone = getgametypesetting( "voipEveryoneHearsEveryone" ); + level.voip.deadhearkiller = getgametypesetting( "voipDeadHearKiller" ); + level.voip.killershearvictim = getgametypesetting( "voipKillersHearVictim" ); + + if ( getdvar( "r_reflectionProbeGenerate" ) == "1" ) + level waittill( "eternity" ); + + if ( sessionmodeiszombiesgame() ) + { + level.prematchperiod = 0; + level.persistentdatainfo = []; + level.maxrecentstats = 10; + level.maxhitlocations = 19; + level.globalshotsfired = 0; + thread maps\mp\gametypes\_hud::init(); + thread maps\mp\gametypes\_serversettings::init(); + thread maps\mp\gametypes\_clientids::init(); + thread maps\mp\gametypes\_weaponobjects::init(); + thread maps\mp\gametypes\_scoreboard::init(); + thread maps\mp\gametypes\_killcam::init(); + thread maps\mp\gametypes\_shellshock::init(); + thread maps\mp\gametypes\_deathicons::init(); + thread maps\mp\gametypes\_spectating::init(); + thread maps\mp\gametypes\_objpoints::init(); + thread maps\mp\gametypes\_gameobjects::init(); + thread maps\mp\gametypes\_spawnlogic::init(); + thread maps\mp\gametypes\_globallogic_audio::init(); + thread maps\mp\gametypes\_wager::init(); + thread maps\mp\bots\_bot::init(); + thread maps\mp\_decoy::init(); + } + else + { + thread maps\mp\gametypes\_persistence::init(); + thread maps\mp\gametypes\_menus::init(); + thread maps\mp\gametypes\_hud::init(); + thread maps\mp\gametypes\_serversettings::init(); + thread maps\mp\gametypes\_clientids::init(); + thread maps\mp\teams\_teams::init(); + thread maps\mp\gametypes\_weapons::init(); + thread maps\mp\gametypes\_scoreboard::init(); + thread maps\mp\gametypes\_killcam::init(); + thread maps\mp\gametypes\_shellshock::init(); + thread maps\mp\gametypes\_deathicons::init(); + thread maps\mp\gametypes\_damagefeedback::init(); + thread maps\mp\gametypes\_healthoverlay::init(); + thread maps\mp\gametypes\_spectating::init(); + thread maps\mp\gametypes\_objpoints::init(); + thread maps\mp\gametypes\_gameobjects::init(); + thread maps\mp\gametypes\_spawnlogic::init(); + thread maps\mp\gametypes\_battlechatter_mp::init(); + thread maps\mp\killstreaks\_killstreaks::init(); + thread maps\mp\gametypes\_globallogic_audio::init(); + thread maps\mp\gametypes\_wager::init(); + thread maps\mp\bots\_bot::init(); + thread maps\mp\_decoy::init(); + thread maps\mp\_bb::init(); + } + + if ( level.teambased ) + thread maps\mp\gametypes\_friendicons::init(); + + thread maps\mp\gametypes\_hud_message::init(); + thread maps\mp\_multi_extracam::init(); + stringnames = getarraykeys( game["strings"] ); + + for ( index = 0; index < stringnames.size; index++ ) + precachestring( game["strings"][stringnames[index]] ); + + foreach ( team in level.teams ) + initteamvariables( team ); + + level.maxplayercount = 0; + level.activeplayers = []; + level.allowannouncer = getgametypesetting( "allowAnnouncer" ); + + if ( !isdefined( level.timelimit ) ) + registertimelimit( 1, 1440 ); + + if ( !isdefined( level.scorelimit ) ) + registerscorelimit( 1, 500 ); + + if ( !isdefined( level.roundlimit ) ) + registerroundlimit( 0, 10 ); + + if ( !isdefined( level.roundwinlimit ) ) + registerroundwinlimit( 0, 10 ); + + maps\mp\gametypes\_globallogic_utils::registerpostroundevent( maps\mp\gametypes\_killcam::postroundfinalkillcam ); + maps\mp\gametypes\_globallogic_utils::registerpostroundevent( maps\mp\gametypes\_wager::postroundsidebet ); + makedvarserverinfo( "ui_scorelimit" ); + makedvarserverinfo( "ui_timelimit" ); + makedvarserverinfo( "ui_allow_classchange", getdvar( "ui_allow_classchange" ) ); + wavedelay = level.waverespawndelay; + + if ( wavedelay && !ispregame() ) + { + foreach ( team in level.teams ) + { + level.wavedelay[team] = wavedelay; + level.lastwave[team] = 0; + } + + level thread [[ level.wavespawntimer ]](); + } + + level.inprematchperiod = 1; + + if ( level.prematchperiod > 2.0 ) + level.prematchperiod += randomfloat( 4 ) - 2; + + if ( level.numlives || anyteamhaswavedelay() || level.playerqueuedrespawn ) + level.graceperiod = 15; + else + level.graceperiod = 5; + + level.ingraceperiod = 1; + level.roundenddelay = 5; + level.halftimeroundenddelay = 3; + maps\mp\gametypes\_globallogic_score::updateallteamscores(); + level.killstreaksenabled = 1; + + if ( getdvar( "scr_game_rankenabled" ) == "" ) + setdvar( "scr_game_rankenabled", 1 ); + + level.rankenabled = getdvarint( "scr_game_rankenabled" ); + + if ( getdvar( "scr_game_medalsenabled" ) == "" ) + setdvar( "scr_game_medalsenabled", 1 ); + + level.medalsenabled = getdvarint( "scr_game_medalsenabled" ); + + if ( level.hardcoremode && level.rankedmatch && getdvar( "scr_game_friendlyFireDelay" ) == "" ) + setdvar( "scr_game_friendlyFireDelay", 1 ); + + level.friendlyfiredelay = getdvarint( "scr_game_friendlyFireDelay" ); + + if ( getdvar( "createfx" ) == "" ) + [[ level.onstartgametype ]](); + + if ( getdvarint( _hash_826EB3B9 ) == 1 ) + level.killstreaksenabled = 0; +/# + thread maps\mp\gametypes\_dev::init(); +#/ +/# + println( "Globallogic Callback_StartGametype() isPregame() = " + ispregame() + "\\n" ); +#/ + level thread maps\mp\gametypes\_killcam::dofinalkillcam(); + thread startgame(); + level thread updategametypedvars(); +/# + if ( getdvarint( "scr_writeConfigStrings" ) == 1 ) + { + level.skipgameend = 1; + level.roundlimit = 1; + wait 1; + thread forceend( 0 ); + } + + if ( getdvarint( "scr_hostmigrationtest" ) == 1 ) + thread forcedebughostmigration(); +#/ +} + +forcedebughostmigration() +{ +/# + while ( true ) + { + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + wait 60; + starthostmigration(); + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + } +#/ +} + +registerfriendlyfiredelay( dvarstring, defaultvalue, minvalue, maxvalue ) +{ + dvarstring = "scr_" + dvarstring + "_friendlyFireDelayTime"; + + if ( getdvar( dvarstring ) == "" ) + setdvar( dvarstring, defaultvalue ); + + if ( getdvarint( dvarstring ) > maxvalue ) + setdvar( dvarstring, maxvalue ); + else if ( getdvarint( dvarstring ) < minvalue ) + setdvar( dvarstring, minvalue ); + + level.friendlyfiredelaytime = getdvarint( dvarstring ); +} + +checkroundswitch() +{ + if ( !isdefined( level.roundswitch ) || !level.roundswitch ) + return false; + + if ( !isdefined( level.onroundswitch ) ) + return false; + + assert( game["roundsplayed"] > 0 ); + + if ( game["roundsplayed"] % level.roundswitch == 0 ) + { + [[ level.onroundswitch ]](); + return true; + } + + return false; +} + +listenforgameend() +{ + self waittill( "host_sucks_end_game" ); + + level.skipvote = 1; + + if ( !level.gameended ) + level thread maps\mp\gametypes\_globallogic::forceend( 1 ); +} + +getkillstreaks( player ) +{ + for ( killstreaknum = 0; killstreaknum < level.maxkillstreaks; killstreaknum++ ) + killstreak[killstreaknum] = "killstreak_null"; + + if ( isplayer( player ) && !level.oldschool && level.disableclassselection != 1 && ( !isdefined( player.pers["isBot"] ) && isdefined( player.killstreak ) ) ) + { + currentkillstreak = 0; + + for ( killstreaknum = 0; killstreaknum < level.maxkillstreaks; killstreaknum++ ) + { + if ( isdefined( player.killstreak[killstreaknum] ) ) + { + killstreak[currentkillstreak] = player.killstreak[killstreaknum]; + currentkillstreak++; + } + } + } + + return killstreak; +} + +updaterankedmatch( winner ) +{ + if ( level.rankedmatch ) + { + if ( hostidledout() ) + { + level.hostforcedend = 1; + logstring( "host idled out" ); + endlobby(); + } + } + + if ( !level.wagermatch && !sessionmodeiszombiesgame() ) + maps\mp\gametypes\_globallogic_score::updatematchbonusscores( winner ); +} diff --git a/MP/Core/maps/mp/gametypes/_globallogic_actor.gsc b/MP/Core/maps/mp/gametypes/_globallogic_actor.gsc new file mode 100644 index 0000000..0721cbb --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_globallogic_actor.gsc @@ -0,0 +1,186 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_globallogic_player; +#include maps\mp\gametypes\_globallogic_utils; +#include maps\mp\_burnplayer; +#include maps\mp\gametypes\_weapons; +#include maps\mp\gametypes\_damagefeedback; +#include maps\mp\_scoreevents; +#include maps\mp\_challenges; + +callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + if ( game["state"] == "postgame" ) + return; + + if ( self.aiteam == "spectator" ) + return; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat ) + return; + + self.idflags = idflags; + self.idflagstime = gettime(); + eattacker = maps\mp\gametypes\_globallogic_player::figureoutattacker( eattacker ); + + if ( !isdefined( vdir ) ) + idflags |= level.idflags_no_knockback; + + friendly = 0; + + if ( self.health == self.maxhealth || !isdefined( self.attackers ) ) + { + self.attackers = []; + self.attackerdata = []; + self.attackerdamage = []; + } + + if ( maps\mp\gametypes\_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) ) + smeansofdeath = "MOD_HEAD_SHOT"; + + if ( level.onlyheadshots ) + { + if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) + return; + else if ( smeansofdeath == "MOD_HEAD_SHOT" ) + idamage = 150; + } + + if ( smeansofdeath == "MOD_BURNED" ) + { + if ( sweapon == "none" ) + self maps\mp\_burnplayer::walkedthroughflames(); + + if ( sweapon == "m2_flamethrower_mp" ) + self maps\mp\_burnplayer::burnedwithflamethrower(); + } + + if ( sweapon == "none" && isdefined( einflictor ) ) + { + if ( isdefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) + sweapon = "explodable_barrel_mp"; + else if ( isdefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) + sweapon = "destructible_car_mp"; + } + + if ( !( idflags & level.idflags_no_protection ) ) + { + if ( isplayer( eattacker ) ) + eattacker.pers["participation"]++; + + prevhealthratio = self.health / self.maxhealth; + + if ( level.teambased && isplayer( eattacker ) && self != eattacker && self.aiteam == eattacker.pers["team"] ) + { + if ( level.friendlyfire == 0 ) + return; + else if ( level.friendlyfire == 1 ) + { + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + } + else if ( level.friendlyfire == 2 ) + return; + else if ( level.friendlyfire == 3 ) + { + idamage = int( idamage * 0.5 ); + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + } + + friendly = 1; + } + else + { + if ( isdefined( eattacker ) && isdefined( self.script_owner ) && eattacker == self.script_owner && !level.hardcoremode ) + return; + + if ( isdefined( eattacker ) && isdefined( self.script_owner ) && isdefined( eattacker.script_owner ) && eattacker.script_owner == self.script_owner ) + return; + + if ( idamage < 1 ) + idamage = 1; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( sweapon ) && !issubstr( smeansofdeath, "MOD_MELEE" ) ) + eattacker thread maps\mp\gametypes\_weapons::checkhit( sweapon ); + + if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isdefined( einflictor ) && isdefined( einflictor.iscooked ) ) + self.wascooked = gettime(); + else + self.wascooked = undefined; + + self.lastdamagewasfromenemy = isdefined( eattacker ) && eattacker != self; + self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + } + + if ( isdefined( eattacker ) && eattacker != self ) + { + if ( sweapon != "artillery_mp" && ( !isdefined( einflictor ) || !isai( einflictor ) ) ) + { + if ( idamage > 0 ) + eattacker thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor ); + } + } + } +/# + if ( getdvarint( "g_debugDamage" ) ) + println( "actor:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); +#/ + if ( 1 ) + { + lpselfnum = self getentitynumber(); + lpselfteam = self.aiteam; + lpattackerteam = ""; + + if ( isplayer( eattacker ) ) + { + lpattacknum = eattacker getentitynumber(); + lpattackguid = eattacker getguid(); + lpattackname = eattacker.name; + lpattackerteam = eattacker.pers["team"]; + } + else + { + lpattacknum = -1; + lpattackguid = ""; + lpattackname = ""; + lpattackerteam = "world"; + } + + logprint( "AD;" + lpselfnum + ";" + lpselfteam + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + ";" + boneindex + "\\n" ); + } +} + +callback_actorkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) +{ + if ( game["state"] == "postgame" ) + return; + + if ( isai( attacker ) && isdefined( attacker.script_owner ) ) + { + if ( attacker.script_owner.team != self.aiteam ) + attacker = attacker.script_owner; + } + + if ( attacker.classname == "script_vehicle" && isdefined( attacker.owner ) ) + attacker = attacker.owner; + + if ( isdefined( attacker ) && isplayer( attacker ) ) + { + if ( !level.teambased || self.aiteam != attacker.pers["team"] ) + { + level.globalkillstreaksdestroyed++; + attacker addweaponstat( "dogs_mp", "destroyed", 1 ); + maps\mp\_scoreevents::processscoreevent( "killed_dog", attacker, self, sweapon ); + attacker maps\mp\_challenges::killeddog(); + } + } +} diff --git a/MP/Core/maps/mp/gametypes/_globallogic_audio.gsc b/MP/Core/maps/mp/gametypes/_globallogic_audio.gsc new file mode 100644 index 0000000..3c478ee --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_globallogic_audio.gsc @@ -0,0 +1,859 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_globallogic_utils; +#include maps\mp\gametypes\_globallogic_audio; +#include maps\mp\_music; + +init() +{ + game["music"]["defeat"] = "mus_defeat"; + game["music"]["victory_spectator"] = "mus_defeat"; + game["music"]["winning"] = "mus_time_running_out_winning"; + game["music"]["losing"] = "mus_time_running_out_losing"; + game["music"]["match_end"] = "mus_match_end"; + game["music"]["victory_tie"] = "mus_defeat"; + game["music"]["suspense"] = []; + game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_01"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_02"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_03"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_04"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_05"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_06"; + game["dialog"]["mission_success"] = "mission_success"; + game["dialog"]["mission_failure"] = "mission_fail"; + game["dialog"]["mission_draw"] = "draw"; + game["dialog"]["round_success"] = "encourage_win"; + game["dialog"]["round_failure"] = "encourage_lost"; + game["dialog"]["round_draw"] = "draw"; + game["dialog"]["timesup"] = "timesup"; + game["dialog"]["winning"] = "winning"; + game["dialog"]["losing"] = "losing"; + game["dialog"]["min_draw"] = "min_draw"; + game["dialog"]["lead_lost"] = "lead_lost"; + game["dialog"]["lead_tied"] = "tied"; + game["dialog"]["lead_taken"] = "lead_taken"; + game["dialog"]["last_alive"] = "lastalive"; + game["dialog"]["boost"] = "generic_boost"; + + if ( !isdefined( game["dialog"]["offense_obj"] ) ) + game["dialog"]["offense_obj"] = "generic_boost"; + + if ( !isdefined( game["dialog"]["defense_obj"] ) ) + game["dialog"]["defense_obj"] = "generic_boost"; + + game["dialog"]["hardcore"] = "hardcore"; + game["dialog"]["oldschool"] = "oldschool"; + game["dialog"]["highspeed"] = "highspeed"; + game["dialog"]["tactical"] = "tactical"; + game["dialog"]["challenge"] = "challengecomplete"; + game["dialog"]["promotion"] = "promotion"; + game["dialog"]["bomb_acquired"] = "sd_bomb_taken"; + game["dialog"]["bomb_taken"] = "sd_bomb_taken_taken"; + game["dialog"]["bomb_lost"] = "sd_bomb_drop"; + game["dialog"]["bomb_defused"] = "sd_bomb_defused"; + game["dialog"]["bomb_planted"] = "sd_bomb_planted"; + game["dialog"]["obj_taken"] = "securedobj"; + game["dialog"]["obj_lost"] = "lostobj"; + game["dialog"]["obj_defend"] = "defend_start"; + game["dialog"]["obj_destroy"] = "destroy_start"; + game["dialog"]["obj_capture"] = "capture_obj"; + game["dialog"]["objs_capture"] = "capture_objs"; + game["dialog"]["hq_located"] = "hq_located"; + game["dialog"]["hq_enemy_captured"] = "hq_capture"; + game["dialog"]["hq_enemy_destroyed"] = "hq_defend"; + game["dialog"]["hq_secured"] = "hq_secured"; + game["dialog"]["hq_offline"] = "hq_offline"; + game["dialog"]["hq_online"] = "hq_online"; + game["dialog"]["koth_located"] = "koth_located"; + game["dialog"]["koth_captured"] = "koth_captured"; + game["dialog"]["koth_lost"] = "koth_lost"; + game["dialog"]["koth_secured"] = "koth_secured"; + game["dialog"]["koth_contested"] = "koth_contest"; + game["dialog"]["koth_offline"] = "koth_offline"; + game["dialog"]["koth_online"] = "koth_online"; + game["dialog"]["move_to_new"] = "new_positions"; + game["dialog"]["attack"] = "attack"; + game["dialog"]["defend"] = "defend"; + game["dialog"]["offense"] = "offense"; + game["dialog"]["defense"] = "defense"; + game["dialog"]["halftime"] = "sd_halftime"; + game["dialog"]["overtime"] = "overtime"; + game["dialog"]["side_switch"] = "switchingsides"; + game["dialog"]["flag_taken"] = "ourflag"; + game["dialog"]["flag_dropped"] = "ourflag_drop"; + game["dialog"]["flag_returned"] = "ourflag_return"; + game["dialog"]["flag_captured"] = "ourflag_capt"; + game["dialog"]["enemy_flag_taken"] = "enemyflag"; + game["dialog"]["enemy_flag_dropped"] = "enemyflag_drop"; + game["dialog"]["enemy_flag_returned"] = "enemyflag_return"; + game["dialog"]["enemy_flag_captured"] = "enemyflag_capt"; + game["dialog"]["securing_a"] = "dom_securing_a"; + game["dialog"]["securing_b"] = "dom_securing_b"; + game["dialog"]["securing_c"] = "dom_securing_c"; + game["dialog"]["securing_d"] = "dom_securing_d"; + game["dialog"]["securing_e"] = "dom_securing_e"; + game["dialog"]["securing_f"] = "dom_securing_f"; + game["dialog"]["secured_a"] = "dom_secured_a"; + game["dialog"]["secured_b"] = "dom_secured_b"; + game["dialog"]["secured_c"] = "dom_secured_c"; + game["dialog"]["secured_d"] = "dom_secured_d"; + game["dialog"]["secured_e"] = "dom_secured_e"; + game["dialog"]["secured_f"] = "dom_secured_f"; + game["dialog"]["losing_a"] = "dom_losing_a"; + game["dialog"]["losing_b"] = "dom_losing_b"; + game["dialog"]["losing_c"] = "dom_losing_c"; + game["dialog"]["losing_d"] = "dom_losing_d"; + game["dialog"]["losing_e"] = "dom_losing_e"; + game["dialog"]["losing_f"] = "dom_losing_f"; + game["dialog"]["lost_a"] = "dom_lost_a"; + game["dialog"]["lost_b"] = "dom_lost_b"; + game["dialog"]["lost_c"] = "dom_lost_c"; + game["dialog"]["lost_d"] = "dom_lost_d"; + game["dialog"]["lost_e"] = "dom_lost_e"; + game["dialog"]["lost_f"] = "dom_lost_f"; + game["dialog"]["enemy_a"] = "dom_enemy_a"; + game["dialog"]["enemy_b"] = "dom_enemy_b"; + game["dialog"]["enemy_c"] = "dom_enemy_c"; + game["dialog"]["enemy_d"] = "dom_enemy_d"; + game["dialog"]["enemy_e"] = "dom_enemy_e"; + game["dialog"]["enemy_f"] = "dom_enemy_f"; + game["dialog"]["secure_flag"] = "secure_flag"; + game["dialog"]["securing_flag"] = "securing_flag"; + game["dialog"]["losing_flag"] = "losing_flag"; + game["dialog"]["lost_flag"] = "lost_flag"; + game["dialog"]["oneflag_enemy"] = "oneflag_enemy"; + game["dialog"]["oneflag_friendly"] = "oneflag_friendly"; + game["dialog"]["lost_all"] = "dom_lock_theytake"; + game["dialog"]["secure_all"] = "dom_lock_wetake"; + game["dialog"]["squad_move"] = "squad_move"; + game["dialog"]["squad_30sec"] = "squad_30sec"; + game["dialog"]["squad_winning"] = "squad_onemin_vic"; + game["dialog"]["squad_losing"] = "squad_onemin_loss"; + game["dialog"]["squad_down"] = "squad_down"; + game["dialog"]["squad_bomb"] = "squad_bomb"; + game["dialog"]["squad_plant"] = "squad_plant"; + game["dialog"]["squad_take"] = "squad_takeobj"; + game["dialog"]["kicked"] = "player_kicked"; + game["dialog"]["sentry_destroyed"] = "dest_sentry"; + game["dialog"]["sentry_hacked"] = "kls_turret_hacked"; + game["dialog"]["microwave_destroyed"] = "dest_microwave"; + game["dialog"]["microwave_hacked"] = "kls_microwave_hacked"; + game["dialog"]["sam_destroyed"] = "dest_sam"; + game["dialog"]["tact_destroyed"] = "dest_tact"; + game["dialog"]["equipment_destroyed"] = "dest_equip"; + game["dialog"]["hacked_equip"] = "hacked_equip"; + game["dialog"]["uav_destroyed"] = "kls_u2_destroyed"; + game["dialog"]["cuav_destroyed"] = "kls_cu2_destroyed"; + game["dialog"]["wm_in_the_money"] = "mpl_wager_top3_gain"; + game["dialog"]["wm_oot_money"] = "mpl_wager_top3_loss"; + level.dialoggroups = []; + level thread post_match_snapshot_watcher(); +} + +registerdialoggroup( group, skipifcurrentlyplayinggroup ) +{ + if ( !isdefined( level.dialoggroups ) ) + level.dialoggroups = []; + else if ( isdefined( level.dialoggroup[group] ) ) + { +/# + error( "registerDialogGroup: Dialog group " + group + " already registered." ); +#/ + return; + } + + level.dialoggroup[group] = spawnstruct(); + level.dialoggroup[group].group = group; + level.dialoggroup[group].skipifcurrentlyplayinggroup = skipifcurrentlyplayinggroup; + level.dialoggroup[group].currentcount = 0; +} + +sndstartmusicsystem() +{ + self endon( "disconnect" ); + + if ( game["state"] == "postgame" ) + return; + + if ( game["state"] == "pregame" ) + { +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - music state is undefined Waiting 15 seconds to set music state" ); +#/ + wait 45; + + if ( !isdefined( level.nextmusicstate ) ) + { + self.pers["music"].currentstate = "UNDERSCORE"; + self thread suspensemusic(); + } + } + + if ( !isdefined( level.nextmusicstate ) ) + { +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - music state is undefined Waiting 15 seconds to set music state" ); +#/ + self.pers["music"].currentstate = "UNDERSCORE"; + self thread suspensemusic(); + } +} + +suspensemusicforplayer() +{ + self endon( "disconnect" ); + self thread set_music_on_player( "UNDERSCORE", 0 ); +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Setting Music State Random Underscore " + self.pers["music"].returnstate + " On player " + self getentitynumber() ); +#/ +} + +suspensemusic( random ) +{ + level endon( "game_ended" ); + level endon( "match_ending_soon" ); + self endon( "disconnect" ); +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Starting random underscore" ); +#/ + while ( true ) + { + wait( randomintrange( 25, 60 ) ); +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Checking for random underscore" ); +#/ + if ( !isdefined( self.pers["music"].inque ) ) + self.pers["music"].inque = 0; + + if ( self.pers["music"].inque ) + { +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Inque no random underscore" ); +#/ + continue; + } + + if ( !isdefined( self.pers["music"].currentstate ) ) + self.pers["music"].currentstate = "SILENT"; + + if ( randomint( 100 ) < self.underscorechance && self.pers["music"].currentstate != "ACTION" && self.pers["music"].currentstate != "TIME_OUT" ) + { + self thread suspensemusicforplayer(); + self.underscorechance -= 20; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Starting random underscore" ); +#/ + } + } +} + +leaderdialogforotherteams( dialog, skip_team, squad_dialog ) +{ + foreach ( team in level.teams ) + { + if ( team != skip_team ) + leaderdialog( dialog, team, undefined, undefined, squad_dialog ); + } +} + +announceroundwinner( winner, delay ) +{ + if ( delay > 0 ) + wait( delay ); + + if ( !isdefined( winner ) || isplayer( winner ) ) + return; + + if ( isdefined( level.teams[winner] ) ) + { + leaderdialog( "round_success", winner ); + leaderdialogforotherteams( "round_failure", winner ); + } + else + { + foreach ( team in level.teams ) + thread playsoundonplayers( "mus_round_draw" + "_" + level.teampostfix[team] ); + + leaderdialog( "round_draw" ); + } +} + +announcegamewinner( winner, delay ) +{ + if ( delay > 0 ) + wait( delay ); + + if ( !isdefined( winner ) || isplayer( winner ) ) + return; + + if ( isdefined( level.teams[winner] ) ) + { + leaderdialog( "mission_success", winner ); + leaderdialogforotherteams( "mission_failure", winner ); + } + else + leaderdialog( "mission_draw" ); +} + +doflameaudio() +{ + self endon( "disconnect" ); + waittillframeend; + + if ( !isdefined( self.lastflamehurtaudio ) ) + self.lastflamehurtaudio = 0; + + currenttime = gettime(); + + if ( self.lastflamehurtaudio + level.fire_audio_repeat_duration + randomint( level.fire_audio_random_max_duration ) < currenttime ) + { + self playlocalsound( "vox_pain_small" ); + self.lastflamehurtaudio = currenttime; + } +} + +leaderdialog( dialog, team, group, excludelist, squaddialog ) +{ + assert( isdefined( level.players ) ); + + if ( level.wagermatch ) + return; + + if ( !isdefined( team ) ) + { + dialogs = []; + + foreach ( team in level.teams ) + dialogs[team] = dialog; + + leaderdialogallteams( dialogs, group, excludelist ); + return; + } + + if ( isdefined( excludelist ) ) + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team && !maps\mp\gametypes\_globallogic_utils::isexcluded( player, excludelist ) ) + player leaderdialogonplayer( dialog, group ); + } + } + else + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + player leaderdialogonplayer( dialog, group ); + } + } +} + +leaderdialogallteams( dialogs, group, excludelist ) +{ + assert( isdefined( level.players ) ); + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + team = player.pers["team"]; + + if ( !isdefined( team ) ) + continue; + + if ( !isdefined( dialogs[team] ) ) + continue; + + if ( isdefined( excludelist ) && maps\mp\gametypes\_globallogic_utils::isexcluded( player, excludelist ) ) + continue; + + player leaderdialogonplayer( dialogs[team], group ); + } +} + +flushdialog() +{ + foreach ( player in level.players ) + player flushdialogonplayer(); +} + +flushdialogonplayer() +{ + self.leaderdialoggroups = []; + self.leaderdialogqueue = []; + self.leaderdialogactive = 0; + self.currentleaderdialoggroup = ""; + self notify( "flush_dialog" ); +} + +flushgroupdialog( group ) +{ + foreach ( player in level.players ) + player flushgroupdialogonplayer( group ); +} + +flushgroupdialogonplayer( group ) +{ + self.leaderdialoggroups[group] = undefined; + arrayremovevalue( self.leaderdialogqueue, group ); + + if ( self.leaderdialogqueue.size == 0 ) + self flushdialogonplayer(); +} + +addgroupdialogtoplayer( dialog, group ) +{ + if ( !isdefined( level.dialoggroup[group] ) ) + { +/# + error( "leaderDialogOnPlayer: Dialog group " + group + " is not registered" ); +#/ + return 0; + } + + addtoqueue = 0; + + if ( !isdefined( self.leaderdialoggroups[group] ) ) + addtoqueue = 1; + + if ( !level.dialoggroup[group].skipifcurrentlyplayinggroup ) + { + if ( self.currentleaderdialog == dialog && self.currentleaderdialogtime + 2000 > gettime() ) + { + self.leaderdialoggroups[group] = undefined; + arrayremovevalue( self.leaderdialogqueue, group ); + + if ( self.leaderdialogqueue.size == 0 ) + self flushdialogonplayer(); + + return 0; + } + } + else if ( self.currentleaderdialoggroup == group ) + return 0; + + self.leaderdialoggroups[group] = dialog; + return addtoqueue; +} + +leaderdialogonplayer( dialog, group ) +{ + assert( isdefined( dialog ) ); + team = self.pers["team"]; + + if ( !isdefined( team ) ) + return; + + if ( !isdefined( level.teams[team] ) ) + return; + + if ( isdefined( group ) ) + { + if ( !addgroupdialogtoplayer( dialog, group ) ) + return; + + dialog = group; + } + + if ( self.leaderdialogqueue.size < 10 ) + self.leaderdialogqueue[self.leaderdialogqueue.size] = dialog; + + if ( !self.leaderdialogactive ) + self thread playnextleaderdialog(); +} + +waitforsound( sound, extratime = 0.1 ) +{ + time = soundgetplaybacktime( sound ); + + if ( time < 0 ) + wait( 3.0 + extratime ); + else + wait( time * 0.001 + extratime ); +} + +playnextleaderdialog() +{ + self endon( "disconnect" ); + self endon( "flush_dialog" ); + + if ( isdefined( level.allowannouncer ) && !level.allowannouncer ) + return; + + self.leaderdialogactive = 1; + waittillframeend; + assert( self.leaderdialogqueue.size > 0 ); + dialog = self.leaderdialogqueue[0]; + assert( isdefined( dialog ) ); + arrayremoveindex( self.leaderdialogqueue, 0 ); + team = self.pers["team"]; + + if ( isdefined( self.leaderdialoggroups[dialog] ) ) + { + group = dialog; + dialog = self.leaderdialoggroups[group]; + self.leaderdialoggroups[group] = undefined; + self.currentleaderdialoggroup = group; + } + + if ( level.wagermatch ) + faction = "vox_wm_"; + else + faction = game["voice"][team]; + + if ( !isdefined( faction ) ) + return; + + sound_name = faction + game["dialog"][dialog]; + + if ( level.allowannouncer ) + { + self playlocalsound( sound_name ); + self.currentleaderdialog = dialog; + self.currentleaderdialogtime = gettime(); + } + + waitforsound( sound_name ); + self.leaderdialogactive = 0; + self.currentleaderdialoggroup = ""; + self.currentleaderdialog = ""; + + if ( self.leaderdialogqueue.size > 0 ) + self thread playnextleaderdialog(); +} + +isteamwinning( checkteam ) +{ + score = game["teamScores"][checkteam]; + + foreach ( team in level.teams ) + { + if ( team != checkteam ) + { + if ( game["teamScores"][team] >= score ) + return false; + } + } + + return true; +} + +announceteamiswinning() +{ + foreach ( team in level.teams ) + { + if ( isteamwinning( team ) ) + { + leaderdialog( "winning", team, undefined, undefined, "squad_winning" ); + leaderdialogforotherteams( "losing", team, "squad_losing" ); + return true; + } + } + + return false; +} + +musiccontroller() +{ + level endon( "game_ended" ); + level thread musictimesout(); + + level waittill( "match_ending_soon" ); + + if ( islastround() || isoneround() ) + { + if ( level.teambased ) + { + if ( !announceteamiswinning() ) + leaderdialog( "min_draw" ); + } + + level waittill( "match_ending_very_soon" ); + + foreach ( team in level.teams ) + leaderdialog( "timesup", team, undefined, undefined, "squad_30sec" ); + } + else + { + level waittill( "match_ending_vox" ); + + leaderdialog( "timesup" ); + } +} + +musictimesout() +{ + level endon( "game_ended" ); + + level waittill( "match_ending_very_soon" ); + + thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "TIME_OUT", "both", 1, 0 ); +} + +actionmusicset() +{ + level endon( "game_ended" ); + level.playingactionmusic = 1; + wait 45; + level.playingactionmusic = 0; +} + +play_2d_on_team( alias, team ) +{ + assert( isdefined( level.players ) ); + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + player playlocalsound( alias ); + } +} + +set_music_on_team( state, team, save_state, return_state, wait_time ) +{ + if ( sessionmodeiszombiesgame() ) + return; + + assert( isdefined( level.players ) ); + + if ( !isdefined( team ) ) + { + team = "both"; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - team undefined: Setting to both" ); +#/ + } + + if ( !isdefined( save_state ) ) + { + save_sate = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - save_sate undefined: Setting to false" ); +#/ + } + + if ( !isdefined( return_state ) ) + { + return_state = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Music System - return_state undefined: Setting to false" ); +#/ + } + + if ( !isdefined( wait_time ) ) + { + wait_time = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - wait_time undefined: Setting to 0" ); +#/ + } + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( team == "both" ) + { + player thread set_music_on_player( state, save_state, return_state, wait_time ); + continue; + } + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + { + player thread set_music_on_player( state, save_state, return_state, wait_time ); +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Setting Music State " + state + " On player " + player getentitynumber() ); +#/ + } + } +} + +set_music_on_player( state, save_state, return_state, wait_time ) +{ + self endon( "disconnect" ); + + if ( sessionmodeiszombiesgame() ) + return; + + assert( isplayer( self ) ); + + if ( !isdefined( save_state ) ) + { + save_state = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Music System - save_sate undefined: Setting to false" ); +#/ + } + + if ( !isdefined( return_state ) ) + { + return_state = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Music System - return_state undefined: Setting to false" ); +#/ + } + + if ( !isdefined( wait_time ) ) + { + wait_time = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - wait_time undefined: Setting to 0" ); +#/ + } + + if ( !isdefined( state ) ) + { + state = "UNDERSCORE"; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - state undefined: Setting to UNDERSCORE" ); +#/ + } + + maps\mp\_music::setmusicstate( state, self ); + + if ( isdefined( self.pers["music"].currentstate ) && save_state ) + { + self.pers["music"].returnstate = state; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Saving Music State " + self.pers["music"].returnstate + " On " + self getentitynumber() ); +#/ + } + + self.pers["music"].previousstate = self.pers["music"].currentstate; + self.pers["music"].currentstate = state; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Setting Music State " + state + " On player " + self getentitynumber() ); +#/ + if ( isdefined( self.pers["music"].returnstate ) && return_state ) + { +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Starting Return State " + self.pers["music"].returnstate + " On " + self getentitynumber() ); +#/ + self set_next_music_state( self.pers["music"].returnstate, wait_time ); + } +} + +return_music_state_player( wait_time ) +{ + if ( !isdefined( wait_time ) ) + { + wait_time = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - wait_time undefined: Setting to 0" ); +#/ + } + + self set_next_music_state( self.pers["music"].returnstate, wait_time ); +} + +return_music_state_team( team, wait_time ) +{ + if ( !isdefined( wait_time ) ) + { + wait_time = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - wait_time undefined: Setting to 0" ); +#/ + } + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( team == "both" ) + { + player thread set_next_music_state( self.pers["music"].returnstate, wait_time ); + continue; + } + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + { + player thread set_next_music_state( self.pers["music"].returnstate, wait_time ); +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Setting Music State " + self.pers["music"].returnstate + " On player " + player getentitynumber() ); +#/ + } + } +} + +set_next_music_state( nextstate, wait_time ) +{ + self endon( "disconnect" ); + self.pers["music"].nextstate = nextstate; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Setting next Music State " + self.pers["music"].nextstate + " On " + self getentitynumber() ); +#/ + if ( !isdefined( self.pers["music"].inque ) ) + self.pers["music"].inque = 0; + + if ( self.pers["music"].inque ) + { + return; +/# + println( "Music System - Music state in que" ); +#/ + } + else + { + self.pers["music"].inque = 1; + + if ( wait_time ) + wait( wait_time ); + + self set_music_on_player( self.pers["music"].nextstate, 0 ); + self.pers["music"].inque = 0; + } +} + +getroundswitchdialog( switchtype ) +{ + switch ( switchtype ) + { + case "halftime": + return "halftime"; + case "overtime": + return "overtime"; + default: + return "side_switch"; + } +} + +post_match_snapshot_watcher() +{ + level waittill( "game_ended" ); + + level clientnotify( "pm" ); + + level waittill( "sfade" ); + + level clientnotify( "pmf" ); +} diff --git a/MP/Core/maps/mp/gametypes/_globallogic_defaults.gsc b/MP/Core/maps/mp/gametypes/_globallogic_defaults.gsc new file mode 100644 index 0000000..96fd6f8 --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_globallogic_defaults.gsc @@ -0,0 +1,266 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_globallogic_utils; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_globallogic_score; +#include maps\mp\gametypes\_globallogic_audio; +#include maps\mp\gametypes\_spawnlogic; +#include maps\mp\killstreaks\_killstreaks; +#include maps\mp\gametypes\_rank; + +getwinningteamfromloser( losing_team ) +{ + if ( level.multiteam ) + return "tie"; + else if ( losing_team == "axis" ) + return "allies"; + + return "axis"; +} + +default_onforfeit( team ) +{ + level.gameforfeited = 1; + level notify( "forfeit in progress" ); + level endon( "forfeit in progress" ); + level endon( "abort forfeit" ); + forfeit_delay = 20.0; + announcement( game["strings"]["opponent_forfeiting_in"], forfeit_delay, 0 ); + wait 10.0; + announcement( game["strings"]["opponent_forfeiting_in"], 10.0, 0 ); + wait 10.0; + endreason = &""; + + if ( level.multiteam ) + { + setdvar( "ui_text_endreason", game["strings"]["other_teams_forfeited"] ); + endreason = game["strings"]["other_teams_forfeited"]; + winner = team; + } + else if ( !isdefined( team ) ) + { + setdvar( "ui_text_endreason", game["strings"]["players_forfeited"] ); + endreason = game["strings"]["players_forfeited"]; + winner = level.players[0]; + } + else if ( isdefined( level.teams[team] ) ) + { + endreason = game["strings"][team + "_forfeited"]; + setdvar( "ui_text_endreason", endreason ); + winner = getwinningteamfromloser( team ); + } + else + { + assert( isdefined( team ), "Forfeited team is not defined" ); + assert( 0, "Forfeited team " + team + " is not allies or axis" ); + winner = "tie"; + } + + level.forcedend = 1; + + if ( isplayer( winner ) ) + logstring( "forfeit, win: " + winner getxuid() + "(" + winner.name + ")" ); + else + maps\mp\gametypes\_globallogic_utils::logteamwinstring( "forfeit", winner ); + + thread maps\mp\gametypes\_globallogic::endgame( winner, endreason ); +} + +default_ondeadevent( team ) +{ + if ( isdefined( level.teams[team] ) ) + { + eliminatedstring = game["strings"][team + "_eliminated"]; + iprintln( eliminatedstring ); + makedvarserverinfo( "ui_text_endreason", eliminatedstring ); + setdvar( "ui_text_endreason", eliminatedstring ); + winner = getwinningteamfromloser( team ); + maps\mp\gametypes\_globallogic_utils::logteamwinstring( "team eliminated", winner ); + thread maps\mp\gametypes\_globallogic::endgame( winner, eliminatedstring ); + } + else + { + makedvarserverinfo( "ui_text_endreason", game["strings"]["tie"] ); + setdvar( "ui_text_endreason", game["strings"]["tie"] ); + maps\mp\gametypes\_globallogic_utils::logteamwinstring( "tie" ); + + if ( level.teambased ) + thread maps\mp\gametypes\_globallogic::endgame( "tie", game["strings"]["tie"] ); + else + thread maps\mp\gametypes\_globallogic::endgame( undefined, game["strings"]["tie"] ); + } +} + +default_onlastteamaliveevent( team ) +{ + if ( isdefined( level.teams[team] ) ) + { + eliminatedstring = game["strings"]["enemies_eliminated"]; + iprintln( eliminatedstring ); + makedvarserverinfo( "ui_text_endreason", eliminatedstring ); + setdvar( "ui_text_endreason", eliminatedstring ); + winner = maps\mp\gametypes\_globallogic::determineteamwinnerbygamestat( "teamScores" ); + maps\mp\gametypes\_globallogic_utils::logteamwinstring( "team eliminated", winner ); + thread maps\mp\gametypes\_globallogic::endgame( winner, eliminatedstring ); + } + else + { + makedvarserverinfo( "ui_text_endreason", game["strings"]["tie"] ); + setdvar( "ui_text_endreason", game["strings"]["tie"] ); + maps\mp\gametypes\_globallogic_utils::logteamwinstring( "tie" ); + + if ( level.teambased ) + thread maps\mp\gametypes\_globallogic::endgame( "tie", game["strings"]["tie"] ); + else + thread maps\mp\gametypes\_globallogic::endgame( undefined, game["strings"]["tie"] ); + } +} + +default_onalivecountchange( team ) +{ + +} + +default_onroundendgame( winner ) +{ + return winner; +} + +default_ononeleftevent( team ) +{ + if ( !level.teambased ) + { + winner = maps\mp\gametypes\_globallogic_score::gethighestscoringplayer(); + + if ( isdefined( winner ) ) + logstring( "last one alive, win: " + winner.name ); + else + logstring( "last one alive, win: unknown" ); + + thread maps\mp\gametypes\_globallogic::endgame( winner, &"MP_ENEMIES_ELIMINATED" ); + } + else + { + for ( index = 0; index < level.players.size; index++ ) + { + player = level.players[index]; + + if ( !isalive( player ) ) + continue; + + if ( !isdefined( player.pers["team"] ) || player.pers["team"] != team ) + continue; + + player maps\mp\gametypes\_globallogic_audio::leaderdialogonplayer( "sudden_death" ); + } + } +} + +default_ontimelimit() +{ + winner = undefined; + + if ( level.teambased ) + { + winner = maps\mp\gametypes\_globallogic::determineteamwinnerbygamestat( "teamScores" ); + maps\mp\gametypes\_globallogic_utils::logteamwinstring( "time limit", winner ); + } + else + { + winner = maps\mp\gametypes\_globallogic_score::gethighestscoringplayer(); + + if ( isdefined( winner ) ) + logstring( "time limit, win: " + winner.name ); + else + logstring( "time limit, tie" ); + } + + makedvarserverinfo( "ui_text_endreason", game["strings"]["time_limit_reached"] ); + setdvar( "ui_text_endreason", game["strings"]["time_limit_reached"] ); + thread maps\mp\gametypes\_globallogic::endgame( winner, game["strings"]["time_limit_reached"] ); +} + +default_onscorelimit() +{ + if ( !level.endgameonscorelimit ) + return false; + + winner = undefined; + + if ( level.teambased ) + { + winner = maps\mp\gametypes\_globallogic::determineteamwinnerbygamestat( "teamScores" ); + maps\mp\gametypes\_globallogic_utils::logteamwinstring( "scorelimit", winner ); + } + else + { + winner = maps\mp\gametypes\_globallogic_score::gethighestscoringplayer(); + + if ( isdefined( winner ) ) + logstring( "scorelimit, win: " + winner.name ); + else + logstring( "scorelimit, tie" ); + } + + makedvarserverinfo( "ui_text_endreason", game["strings"]["score_limit_reached"] ); + setdvar( "ui_text_endreason", game["strings"]["score_limit_reached"] ); + thread maps\mp\gametypes\_globallogic::endgame( winner, game["strings"]["score_limit_reached"] ); + return true; +} + +default_onspawnspectator( origin, angles ) +{ + if ( isdefined( origin ) && isdefined( angles ) ) + { + self spawn( origin, angles ); + return; + } + + spawnpointname = "mp_global_intermission"; + spawnpoints = getentarray( spawnpointname, "classname" ); + assert( spawnpoints.size, "There are no mp_global_intermission spawn points in the map. There must be at least one." ); + spawnpoint = maps\mp\gametypes\_spawnlogic::getspawnpoint_random( spawnpoints ); + self spawn( spawnpoint.origin, spawnpoint.angles ); +} + +default_onspawnintermission() +{ + spawnpointname = "mp_global_intermission"; + spawnpoints = getentarray( spawnpointname, "classname" ); + spawnpoint = spawnpoints[0]; + + if ( isdefined( spawnpoint ) ) + self spawn( spawnpoint.origin, spawnpoint.angles ); + else + { +/# + maps\mp\_utility::error( "NO " + spawnpointname + " SPAWNPOINTS IN MAP" ); +#/ + } +} + +default_gettimelimit() +{ + return clamp( getgametypesetting( "timeLimit" ), level.timelimitmin, level.timelimitmax ); +} + +default_getteamkillpenalty( einflictor, attacker, smeansofdeath, sweapon ) +{ + teamkill_penalty = 1; + score = maps\mp\gametypes\_globallogic_score::_getplayerscore( attacker ); + + if ( score == 0 ) + teamkill_penalty = 2; + + if ( maps\mp\killstreaks\_killstreaks::iskillstreakweapon( sweapon ) ) + teamkill_penalty *= maps\mp\killstreaks\_killstreaks::getkillstreakteamkillpenaltyscale( sweapon ); + + return teamkill_penalty; +} + +default_getteamkillscore( einflictor, attacker, smeansofdeath, sweapon ) +{ + return maps\mp\gametypes\_rank::getscoreinfovalue( "team_kill" ); +} diff --git a/MP/Core/maps/mp/gametypes/_globallogic_player.gsc b/MP/Core/maps/mp/gametypes/_globallogic_player.gsc new file mode 100644 index 0000000..485138c --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_globallogic_player.gsc @@ -0,0 +1,2629 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\killstreaks\_killstreaks; +#include maps\mp\killstreaks\_killstreak_weapons; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_persistence; +#include maps\mp\_gamerep; +#include maps\mp\gametypes\_globallogic_score; +#include maps\mp\_flashgrenades; +#include maps\mp\gametypes\_hostmigration; +#include maps\mp\gametypes\_globallogic_ui; +#include maps\mp\gametypes\_globallogic_spawn; +#include maps\mp\gametypes\_spectating; +#include maps\mp\gametypes\_globallogic_utils; +#include maps\mp\gametypes\_spawning; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_hud_message; +#include maps\mp\gametypes\_class; +#include maps\mp\_vehicles; +#include maps\mp\gametypes\_battlechatter_mp; +#include maps\mp\_scoreevents; +#include maps\mp\gametypes\_weapons; +#include maps\mp\gametypes\_damagefeedback; +#include maps\mp\gametypes\_weapon_utils; +#include maps\mp\_demo; +#include maps\mp\teams\_teams; +#include maps\mp\gametypes\_rank; +#include maps\mp\_challenges; +#include maps\mp\killstreaks\_straferun; +#include maps\mp\_medals; +#include maps\mp\gametypes\_spawnlogic; +#include maps\mp\gametypes\_killcam; +#include maps\mp\gametypes\_globallogic_audio; +#include maps\mp\gametypes\_tweakables; +#include maps\mp\gametypes\_deathicons; +#include maps\mp\_burnplayer; +#include maps\mp\gametypes\_globallogic_vehicle; + +freezeplayerforroundend() +{ + self clearlowermessage(); + self closemenu(); + self closeingamemenu(); + self freeze_player_controls( 1 ); + + if ( !sessionmodeiszombiesgame() ) + { + currentweapon = self getcurrentweapon(); + + if ( maps\mp\killstreaks\_killstreaks::iskillstreakweapon( currentweapon ) && !maps\mp\killstreaks\_killstreak_weapons::isheldkillstreakweapon( currentweapon ) ) + self takeweapon( currentweapon ); + } +} + +callback_playerconnect() +{ + thread notifyconnecting(); + self.statusicon = "hud_status_connecting"; + + self waittill( "begin" ); + + if ( isdefined( level.reset_clientdvars ) ) + self [[ level.reset_clientdvars ]](); + + waittillframeend; + self.statusicon = ""; + self.guid = self getguid(); + matchrecorderincrementheaderstat( "playerCountJoined", 1 ); + profilelog_begintiming( 4, "ship" ); + level notify( "connected", self ); + + if ( self ishost() ) + self thread maps\mp\gametypes\_globallogic::listenforgameend(); + + if ( !level.splitscreen && !isdefined( self.pers["score"] ) ) + iprintln( &"MP_CONNECTED", self ); + + if ( !isdefined( self.pers["score"] ) ) + { + self thread maps\mp\gametypes\_persistence::adjustrecentstats(); + self maps\mp\gametypes\_persistence::setafteractionreportstat( "valid", 0 ); + + if ( gamemodeismode( level.gamemode_wager_match ) && !self ishost() ) + self maps\mp\gametypes\_persistence::setafteractionreportstat( "wagerMatchFailed", 1 ); + else + self maps\mp\gametypes\_persistence::setafteractionreportstat( "wagerMatchFailed", 0 ); + } + + if ( ( level.rankedmatch || level.wagermatch || level.leaguematch ) && !isdefined( self.pers["matchesPlayedStatsTracked"] ) ) + { + gamemode = maps\mp\gametypes\_globallogic::getcurrentgamemode(); + self maps\mp\gametypes\_globallogic::incrementmatchcompletionstat( gamemode, "played", "started" ); + + if ( !isdefined( self.pers["matchesHostedStatsTracked"] ) && self islocaltohost() ) + { + self maps\mp\gametypes\_globallogic::incrementmatchcompletionstat( gamemode, "hosted", "started" ); + self.pers["matchesHostedStatsTracked"] = 1; + } + + self.pers["matchesPlayedStatsTracked"] = 1; + self thread maps\mp\gametypes\_persistence::uploadstatssoon(); + } + + self maps\mp\_gamerep::gamerepplayerconnected(); + lpselfnum = self getentitynumber(); + lpguid = self getguid(); + logprint( "J;" + lpguid + ";" + lpselfnum + ";" + self.name + "\\n" ); + bbprint( "mpjoins", "name %s client %s", self.name, lpselfnum ); + + if ( !sessionmodeiszombiesgame() ) + self setclientuivisibilityflag( "hud_visible", 1 ); + + if ( level.forceradar == 1 ) + { + self.pers["hasRadar"] = 1; + self.hasspyplane = 1; + level.activeuavs[self getentitynumber()] = 1; + } + + if ( level.forceradar == 2 ) + self setclientuivisibilityflag( "g_compassShowEnemies", level.forceradar ); + else + self setclientuivisibilityflag( "g_compassShowEnemies", 0 ); + + self setclientplayersprinttime( level.playersprinttime ); + self setclientnumlives( level.numlives ); + makedvarserverinfo( "cg_drawTalk", 1 ); + + if ( level.hardcoremode ) + self setclientdrawtalk( 3 ); + + if ( sessionmodeiszombiesgame() ) + self [[ level.player_stats_init ]](); + else + { + self maps\mp\gametypes\_globallogic_score::initpersstat( "score" ); + + if ( level.resetplayerscoreeveryround ) + self.pers["score"] = 0; + + self.score = self.pers["score"]; + self maps\mp\gametypes\_globallogic_score::initpersstat( "pointstowin" ); + + if ( level.scoreroundbased ) + self.pers["pointstowin"] = 0; + + self.pointstowin = self.pers["pointstowin"]; + self maps\mp\gametypes\_globallogic_score::initpersstat( "momentum", 0 ); + self.momentum = self maps\mp\gametypes\_globallogic_score::getpersstat( "momentum" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "suicides" ); + self.suicides = self maps\mp\gametypes\_globallogic_score::getpersstat( "suicides" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "headshots" ); + self.headshots = self maps\mp\gametypes\_globallogic_score::getpersstat( "headshots" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "challenges" ); + self.challenges = self maps\mp\gametypes\_globallogic_score::getpersstat( "challenges" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "kills" ); + self.kills = self maps\mp\gametypes\_globallogic_score::getpersstat( "kills" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "deaths" ); + self.deaths = self maps\mp\gametypes\_globallogic_score::getpersstat( "deaths" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "assists" ); + self.assists = self maps\mp\gametypes\_globallogic_score::getpersstat( "assists" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "defends", 0 ); + self.defends = self maps\mp\gametypes\_globallogic_score::getpersstat( "defends" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "offends", 0 ); + self.offends = self maps\mp\gametypes\_globallogic_score::getpersstat( "offends" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "plants", 0 ); + self.plants = self maps\mp\gametypes\_globallogic_score::getpersstat( "plants" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "defuses", 0 ); + self.defuses = self maps\mp\gametypes\_globallogic_score::getpersstat( "defuses" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "returns", 0 ); + self.returns = self maps\mp\gametypes\_globallogic_score::getpersstat( "returns" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "captures", 0 ); + self.captures = self maps\mp\gametypes\_globallogic_score::getpersstat( "captures" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "destructions", 0 ); + self.destructions = self maps\mp\gametypes\_globallogic_score::getpersstat( "destructions" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "backstabs", 0 ); + self.backstabs = self maps\mp\gametypes\_globallogic_score::getpersstat( "backstabs" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "longshots", 0 ); + self.longshots = self maps\mp\gametypes\_globallogic_score::getpersstat( "longshots" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "survived", 0 ); + self.survived = self maps\mp\gametypes\_globallogic_score::getpersstat( "survived" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "stabs", 0 ); + self.stabs = self maps\mp\gametypes\_globallogic_score::getpersstat( "stabs" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "tomahawks", 0 ); + self.tomahawks = self maps\mp\gametypes\_globallogic_score::getpersstat( "tomahawks" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "humiliated", 0 ); + self.humiliated = self maps\mp\gametypes\_globallogic_score::getpersstat( "humiliated" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "x2score", 0 ); + self.x2score = self maps\mp\gametypes\_globallogic_score::getpersstat( "x2score" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "agrkills", 0 ); + self.x2score = self maps\mp\gametypes\_globallogic_score::getpersstat( "agrkills" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "hacks", 0 ); + self.x2score = self maps\mp\gametypes\_globallogic_score::getpersstat( "hacks" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "killsconfirmed", 0 ); + self.killsconfirmed = self maps\mp\gametypes\_globallogic_score::getpersstat( "killsconfirmed" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "killsdenied", 0 ); + self.killsdenied = self maps\mp\gametypes\_globallogic_score::getpersstat( "killsdenied" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "sessionbans", 0 ); + self.sessionbans = self maps\mp\gametypes\_globallogic_score::getpersstat( "sessionbans" ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "gametypeban", 0 ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "time_played_total", 0 ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "time_played_alive", 0 ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "teamkills", 0 ); + self maps\mp\gametypes\_globallogic_score::initpersstat( "teamkills_nostats", 0 ); + self.teamkillpunish = 0; + + if ( level.minimumallowedteamkills >= 0 && self.pers["teamkills_nostats"] > level.minimumallowedteamkills ) + self thread reduceteamkillsovertime(); + } + + if ( getdvar( "r_reflectionProbeGenerate" ) == "1" ) + level waittill( "eternity" ); + + self.killedplayerscurrent = []; + + if ( !isdefined( self.pers["best_kill_streak"] ) ) + { + self.pers["killed_players"] = []; + self.pers["killed_by"] = []; + self.pers["nemesis_tracking"] = []; + self.pers["artillery_kills"] = 0; + self.pers["dog_kills"] = 0; + self.pers["nemesis_name"] = ""; + self.pers["nemesis_rank"] = 0; + self.pers["nemesis_rankIcon"] = 0; + self.pers["nemesis_xp"] = 0; + self.pers["nemesis_xuid"] = ""; + self.pers["best_kill_streak"] = 0; + } + + if ( !isdefined( self.pers["music"] ) ) + { + self.pers["music"] = spawnstruct(); + self.pers["music"].spawn = 0; + self.pers["music"].inque = 0; + self.pers["music"].currentstate = "SILENT"; + self.pers["music"].previousstate = "SILENT"; + self.pers["music"].nextstate = "UNDERSCORE"; + self.pers["music"].returnstate = "UNDERSCORE"; + } + + self.leaderdialogqueue = []; + self.leaderdialogactive = 0; + self.leaderdialoggroups = []; + self.currentleaderdialoggroup = ""; + self.currentleaderdialog = ""; + self.currentleaderdialogtime = 0; + + if ( !isdefined( self.pers["cur_kill_streak"] ) ) + self.pers["cur_kill_streak"] = 0; + + if ( !isdefined( self.pers["cur_total_kill_streak"] ) ) + { + self.pers["cur_total_kill_streak"] = 0; + self setplayercurrentstreak( 0 ); + } + + if ( !isdefined( self.pers["totalKillstreakCount"] ) ) + self.pers["totalKillstreakCount"] = 0; + + if ( !isdefined( self.pers["killstreaksEarnedThisKillstreak"] ) ) + self.pers["killstreaksEarnedThisKillstreak"] = 0; + + if ( isdefined( level.usingscorestreaks ) && level.usingscorestreaks && !isdefined( self.pers["killstreak_quantity"] ) ) + self.pers["killstreak_quantity"] = []; + + if ( isdefined( level.usingscorestreaks ) && level.usingscorestreaks && !isdefined( self.pers["held_killstreak_ammo_count"] ) ) + self.pers["held_killstreak_ammo_count"] = []; + + if ( isdefined( level.usingscorestreaks ) && level.usingscorestreaks && !isdefined( self.pers["held_killstreak_clip_count"] ) ) + self.pers["held_killstreak_clip_count"] = []; + + if ( !isdefined( self.pers["changed_class"] ) ) + self.pers["changed_class"] = 0; + + self.lastkilltime = 0; + self.cur_death_streak = 0; + self disabledeathstreak(); + self.death_streak = 0; + self.kill_streak = 0; + self.gametype_kill_streak = 0; + self.spawnqueueindex = -1; + self.deathtime = 0; + + if ( level.onlinegame ) + { + self.death_streak = self getdstat( "HighestStats", "death_streak" ); + self.kill_streak = self getdstat( "HighestStats", "kill_streak" ); + self.gametype_kill_streak = self maps\mp\gametypes\_persistence::statgetwithgametype( "kill_streak" ); + } + + self.lastgrenadesuicidetime = -1; + self.teamkillsthisround = 0; + + if ( !isdefined( level.livesdonotreset ) || !level.livesdonotreset || !isdefined( self.pers["lives"] ) ) + self.pers["lives"] = level.numlives; + + if ( !level.teambased ) + self.pers["team"] = undefined; + + self.hasspawned = 0; + self.waitingtospawn = 0; + self.wantsafespawn = 0; + self.deathcount = 0; + self.wasaliveatmatchstart = 0; + self thread maps\mp\_flashgrenades::monitorflash(); + level.players[level.players.size] = self; + + if ( level.splitscreen ) + setdvar( "splitscreen_playerNum", level.players.size ); + + if ( game["state"] == "postgame" ) + { + self.pers["needteam"] = 1; + self.pers["team"] = "spectator"; + self.team = "spectator"; + self setclientuivisibilityflag( "hud_visible", 0 ); + self [[ level.spawnintermission ]](); + self closemenu(); + self closeingamemenu(); + profilelog_endtiming( 4, "gs=" + game["state"] + " zom=" + sessionmodeiszombiesgame() ); + return; + } + + if ( ( level.rankedmatch || level.wagermatch || level.leaguematch ) && !isdefined( self.pers["lossAlreadyReported"] ) ) + { + if ( level.leaguematch ) + self recordleaguepreloser(); + + maps\mp\gametypes\_globallogic_score::updatelossstats( self ); + self.pers["lossAlreadyReported"] = 1; + } + + if ( !isdefined( self.pers["winstreakAlreadyCleared"] ) ) + { + self maps\mp\gametypes\_globallogic_score::backupandclearwinstreaks(); + self.pers["winstreakAlreadyCleared"] = 1; + } + + if ( self istestclient() ) + self.pers["isBot"] = 1; + + if ( level.rankedmatch || level.leaguematch ) + self maps\mp\gametypes\_persistence::setafteractionreportstat( "demoFileID", "0" ); + + level endon( "game_ended" ); + + if ( isdefined( level.hostmigrationtimer ) ) + self thread maps\mp\gametypes\_hostmigration::hostmigrationtimerthink(); + + if ( level.oldschool ) + { + self.pers["class"] = undefined; + self.class = self.pers["class"]; + } + + if ( isdefined( self.pers["team"] ) ) + self.team = self.pers["team"]; + + if ( isdefined( self.pers["class"] ) ) + self.class = self.pers["class"]; + + if ( !isdefined( self.pers["team"] ) || isdefined( self.pers["needteam"] ) ) + { + self.pers["needteam"] = undefined; + self.pers["team"] = "spectator"; + self.team = "spectator"; + self.sessionstate = "dead"; + self maps\mp\gametypes\_globallogic_ui::updateobjectivetext(); + [[ level.spawnspectator ]](); + [[ level.autoassign ]]( 0 ); + + if ( level.rankedmatch || level.leaguematch ) + self thread maps\mp\gametypes\_globallogic_spawn::kickifdontspawn(); + + if ( self.pers["team"] == "spectator" ) + { + self.sessionteam = "spectator"; + + if ( !level.teambased ) + self.ffateam = "spectator"; + + self thread spectate_player_watcher(); + } + + if ( level.teambased ) + { + self.sessionteam = self.pers["team"]; + + if ( !isalive( self ) ) + self.statusicon = "hud_status_dead"; + + self thread maps\mp\gametypes\_spectating::setspectatepermissions(); + } + } + else if ( self.pers["team"] == "spectator" ) + { + self setclientscriptmainmenu( game["menu_class"] ); + [[ level.spawnspectator ]](); + self.sessionteam = "spectator"; + self.sessionstate = "spectator"; + + if ( !level.teambased ) + self.ffateam = "spectator"; + + self thread spectate_player_watcher(); + } + else + { + self.sessionteam = self.pers["team"]; + self.sessionstate = "dead"; + + if ( !level.teambased ) + self.ffateam = self.pers["team"]; + + self maps\mp\gametypes\_globallogic_ui::updateobjectivetext(); + [[ level.spawnspectator ]](); + + if ( maps\mp\gametypes\_globallogic_utils::isvalidclass( self.pers["class"] ) ) + self thread [[ level.spawnclient ]](); + else + self maps\mp\gametypes\_globallogic_ui::showmainmenuforteam(); + + self thread maps\mp\gametypes\_spectating::setspectatepermissions(); + } + + if ( self.sessionteam != "spectator" ) + self thread maps\mp\gametypes\_spawning::onspawnplayer_unified( 1 ); + + profilelog_endtiming( 4, "gs=" + game["state"] + " zom=" + sessionmodeiszombiesgame() ); + + if ( isdefined( self.pers["isBot"] ) ) + return; +} + +spectate_player_watcher() +{ + self endon( "disconnect" ); + + if ( !level.splitscreen && !level.hardcoremode && getdvarint( "scr_showperksonspawn" ) == 1 && game["state"] != "postgame" && !isdefined( self.perkhudelem ) ) + { + if ( level.perksenabled == 1 ) + self maps\mp\gametypes\_hud_util::showperks(); + + self thread maps\mp\gametypes\_globallogic_ui::hideloadoutaftertime( 0 ); + } + + self.watchingactiveclient = 1; + self.waitingforplayerstext = undefined; + + while ( true ) + { + if ( self.pers["team"] != "spectator" || level.gameended ) + { + self maps\mp\gametypes\_hud_message::clearshoutcasterwaitingmessage(); + self freezecontrols( 0 ); + self.watchingactiveclient = 0; + break; + } + else + { + count = 0; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( level.players[i].team != "spectator" ) + { + count++; + break; + } + } + + if ( count > 0 ) + { + if ( !self.watchingactiveclient ) + { + self maps\mp\gametypes\_hud_message::clearshoutcasterwaitingmessage(); + self freezecontrols( 0 ); + } + + self.watchingactiveclient = 1; + } + else + { + if ( self.watchingactiveclient ) + { + [[ level.onspawnspectator ]](); + self freezecontrols( 1 ); + self maps\mp\gametypes\_hud_message::setshoutcasterwaitingmessage(); + } + + self.watchingactiveclient = 0; + } + + wait 0.5; + } + } +} + +callback_playermigrated() +{ +/# + println( "Player " + self.name + " finished migrating at time " + gettime() ); +#/ + if ( isdefined( self.connected ) && self.connected ) + self maps\mp\gametypes\_globallogic_ui::updateobjectivetext(); + + level.hostmigrationreturnedplayercount++; + + if ( level.hostmigrationreturnedplayercount >= level.players.size * 2 / 3 ) + { +/# + println( "2/3 of players have finished migrating" ); +#/ + level notify( "hostmigration_enoughplayers" ); + } +} + +callback_playerdisconnect() +{ + profilelog_begintiming( 5, "ship" ); + + if ( game["state"] != "postgame" && !level.gameended ) + { + gamelength = maps\mp\gametypes\_globallogic::getgamelength(); + self maps\mp\gametypes\_globallogic::bbplayermatchend( gamelength, "MP_PLAYER_DISCONNECT", 0 ); + } + + self removeplayerondisconnect(); + + if ( level.splitscreen ) + { + players = level.players; + + if ( players.size <= 1 ) + level thread maps\mp\gametypes\_globallogic::forceend(); + + setdvar( "splitscreen_playerNum", players.size ); + } + + if ( isdefined( self.score ) && isdefined( self.pers["team"] ) ) + { + self logstring( "team: score " + self.pers["team"] + ":" + self.score ); + level.dropteam += 1; + } + + [[ level.onplayerdisconnect ]](); + lpselfnum = self getentitynumber(); + lpguid = self getguid(); + logprint( "Q;" + lpguid + ";" + lpselfnum + ";" + self.name + "\\n" ); + self maps\mp\_gamerep::gamerepplayerdisconnected(); + + for ( entry = 0; entry < level.players.size; entry++ ) + { + if ( level.players[entry] == self ) + { + while ( entry < level.players.size - 1 ) + { + level.players[entry] = level.players[entry + 1]; + entry++; + } + + level.players[entry] = undefined; + break; + } + } + + for ( entry = 0; entry < level.players.size; entry++ ) + { + if ( isdefined( level.players[entry].pers["killed_players"][self.name] ) ) + level.players[entry].pers["killed_players"][self.name] = undefined; + + if ( isdefined( level.players[entry].killedplayerscurrent[self.name] ) ) + level.players[entry].killedplayerscurrent[self.name] = undefined; + + if ( isdefined( level.players[entry].pers["killed_by"][self.name] ) ) + level.players[entry].pers["killed_by"][self.name] = undefined; + + if ( isdefined( level.players[entry].pers["nemesis_tracking"][self.name] ) ) + level.players[entry].pers["nemesis_tracking"][self.name] = undefined; + + if ( level.players[entry].pers["nemesis_name"] == self.name ) + level.players[entry] choosenextbestnemesis(); + } + + if ( level.gameended ) + self maps\mp\gametypes\_globallogic::removedisconnectedplayerfromplacement(); + + level thread maps\mp\gametypes\_globallogic::updateteamstatus(); + profilelog_endtiming( 5, "gs=" + game["state"] + " zom=" + sessionmodeiszombiesgame() ); +} + +callback_playermelee( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit ) +{ + hit = 1; + + if ( level.teambased && self.team == eattacker.team ) + { + if ( level.friendlyfire == 0 ) + hit = 0; + } + + self finishmeleehit( eattacker, sweapon, vorigin, vdir, boneindex, shieldhit, hit ); +} + +choosenextbestnemesis() +{ + nemesisarray = self.pers["nemesis_tracking"]; + nemesisarraykeys = getarraykeys( nemesisarray ); + nemesisamount = 0; + nemesisname = ""; + + if ( nemesisarraykeys.size > 0 ) + { + for ( i = 0; i < nemesisarraykeys.size; i++ ) + { + nemesisarraykey = nemesisarraykeys[i]; + + if ( nemesisarray[nemesisarraykey] > nemesisamount ) + { + nemesisname = nemesisarraykey; + nemesisamount = nemesisarray[nemesisarraykey]; + } + } + } + + self.pers["nemesis_name"] = nemesisname; + + if ( nemesisname != "" ) + { + for ( playerindex = 0; playerindex < level.players.size; playerindex++ ) + { + if ( level.players[playerindex].name == nemesisname ) + { + nemesisplayer = level.players[playerindex]; + self.pers["nemesis_rank"] = nemesisplayer.pers["rank"]; + self.pers["nemesis_rankIcon"] = nemesisplayer.pers["rankxp"]; + self.pers["nemesis_xp"] = nemesisplayer.pers["prestige"]; + self.pers["nemesis_xuid"] = nemesisplayer getxuid( 1 ); + break; + } + } + } + else + self.pers["nemesis_xuid"] = ""; +} + +removeplayerondisconnect() +{ + for ( entry = 0; entry < level.players.size; entry++ ) + { + if ( level.players[entry] == self ) + { + while ( entry < level.players.size - 1 ) + { + level.players[entry] = level.players[entry + 1]; + entry++; + } + + level.players[entry] = undefined; + break; + } + } +} + +custom_gamemodes_modified_damage( victim, eattacker, idamage, smeansofdeath, sweapon, einflictor, shitloc ) +{ + if ( level.onlinegame && !sessionmodeisprivate() ) + return idamage; + + if ( isdefined( eattacker ) && isdefined( eattacker.damagemodifier ) ) + idamage *= eattacker.damagemodifier; + + if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) + idamage = int( idamage * level.bulletdamagescalar ); + + return idamage; +} + +figureoutattacker( eattacker ) +{ + if ( isdefined( eattacker ) ) + { + if ( isai( eattacker ) && isdefined( eattacker.script_owner ) ) + { + team = self.team; + + if ( isai( self ) && isdefined( self.aiteam ) ) + team = self.aiteam; + + if ( eattacker.script_owner.team != team ) + eattacker = eattacker.script_owner; + } + + if ( eattacker.classname == "script_vehicle" && isdefined( eattacker.owner ) ) + eattacker = eattacker.owner; + else if ( eattacker.classname == "auto_turret" && isdefined( eattacker.owner ) ) + eattacker = eattacker.owner; + } + + return eattacker; +} + +figureoutweapon( sweapon, einflictor ) +{ + if ( sweapon == "none" && isdefined( einflictor ) ) + { + if ( isdefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) + sweapon = "explodable_barrel_mp"; + else if ( isdefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) + sweapon = "destructible_car_mp"; + } + + return sweapon; +} + +isplayerimmunetokillstreak( eattacker, sweapon ) +{ + if ( level.hardcoremode ) + return false; + + if ( !isdefined( eattacker ) ) + return false; + + if ( self != eattacker ) + return false; + + if ( sweapon != "straferun_gun_mp" && sweapon != "straferun_rockets_mp" ) + return false; + + return true; +} + +callback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + profilelog_begintiming( 6, "ship" ); + + if ( game["state"] == "postgame" ) + return; + + if ( self.sessionteam == "spectator" ) + return; + + if ( isdefined( self.candocombat ) && !self.candocombat ) + return; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat ) + return; + + if ( isdefined( level.hostmigrationtimer ) ) + return; + + if ( ( sweapon == "ai_tank_drone_gun_mp" || sweapon == "ai_tank_drone_rocket_mp" ) && !level.hardcoremode ) + { + if ( isdefined( eattacker ) && eattacker == self ) + { + if ( isdefined( einflictor ) && isdefined( einflictor.from_ai ) ) + return; + } + + if ( isdefined( eattacker ) && isdefined( eattacker.owner ) && eattacker.owner == self ) + return; + } + + if ( sweapon == "emp_grenade_mp" ) + { + if ( self hasperk( "specialty_immuneemp" ) ) + return; + + self notify( "emp_grenaded", eattacker ); + } + + if ( isdefined( eattacker ) ) + idamage = maps\mp\gametypes\_class::cac_modified_damage( self, eattacker, idamage, smeansofdeath, sweapon, einflictor, shitloc ); + + idamage = custom_gamemodes_modified_damage( self, eattacker, idamage, smeansofdeath, sweapon, einflictor, shitloc ); + idamage = int( idamage ); + self.idflags = idflags; + self.idflagstime = gettime(); + eattacker = figureoutattacker( eattacker ); + pixbeginevent( "PlayerDamage flags/tweaks" ); + + if ( !isdefined( vdir ) ) + idflags |= level.idflags_no_knockback; + + friendly = 0; + + if ( self.health != self.maxhealth ) + self notify( "snd_pain_player" ); + + if ( isdefined( einflictor ) && isdefined( einflictor.script_noteworthy ) ) + { + if ( einflictor.script_noteworthy == "ragdoll_now" ) + smeansofdeath = "MOD_FALLING"; + + if ( isdefined( level.overrideweaponfunc ) ) + sweapon = [[ level.overrideweaponfunc ]]( sweapon, einflictor.script_noteworthy ); + } + + if ( maps\mp\gametypes\_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) && isplayer( eattacker ) ) + smeansofdeath = "MOD_HEAD_SHOT"; + + if ( level.onplayerdamage != maps\mp\gametypes\_globallogic::blank ) + { + modifieddamage = [[ level.onplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); + + if ( isdefined( modifieddamage ) ) + { + if ( modifieddamage <= 0 ) + return; + + idamage = modifieddamage; + } + } + + if ( level.onlyheadshots ) + { + if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) + return; + else if ( smeansofdeath == "MOD_HEAD_SHOT" ) + idamage = 150; + } + + if ( self maps\mp\_vehicles::player_is_occupant_invulnerable( smeansofdeath ) ) + return; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && self.team != eattacker.team ) + self.lastattackweapon = sweapon; + + sweapon = figureoutweapon( sweapon, einflictor ); + pixendevent(); + + if ( idflags & level.idflags_penetration && isplayer( eattacker ) && eattacker hasperk( "specialty_bulletpenetration" ) ) + self thread maps\mp\gametypes\_battlechatter_mp::perkspecificbattlechatter( "deepimpact", 1 ); + + attackerishittingteammate = isplayer( eattacker ) && self isenemyplayer( eattacker ) == 0; + + if ( shitloc == "riotshield" ) + { + if ( attackerishittingteammate && level.friendlyfire == 0 ) + return; + + if ( ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) && !maps\mp\killstreaks\_killstreaks::iskillstreakweapon( sweapon ) && !attackerishittingteammate ) + { + if ( self.hasriotshieldequipped ) + { + if ( isplayer( eattacker ) ) + { + eattacker.lastattackedshieldplayer = self; + eattacker.lastattackedshieldtime = gettime(); + } + + previous_shield_damage = self.shielddamageblocked; + self.shielddamageblocked += idamage; + + if ( self.shielddamageblocked % 400 < previous_shield_damage % 400 ) + { + score_event = "shield_blocked_damage"; + + if ( self.shielddamageblocked > 2000 ) + score_event = "shield_blocked_damage_reduced"; + + if ( isdefined( level.scoreinfo[score_event]["value"] ) ) + self addweaponstat( "riotshield_mp", "score_from_blocked_damage", level.scoreinfo[score_event]["value"] ); + + thread maps\mp\_scoreevents::processscoreevent( score_event, self ); + } + } + } + + if ( idflags & level.idflags_shield_explosive_impact ) + { + shitloc = "none"; + + if ( !( idflags & level.idflags_shield_explosive_impact_huge ) ) + idamage *= 0.0; + } + else if ( idflags & level.idflags_shield_explosive_splash ) + { + if ( isdefined( einflictor ) && isdefined( einflictor.stucktoplayer ) && einflictor.stucktoplayer == self ) + idamage = 101; + + shitloc = "none"; + } + else + return; + } + + if ( !( idflags & level.idflags_no_protection ) ) + { + if ( isdefined( einflictor ) && ( smeansofdeath == "MOD_GAS" || maps\mp\gametypes\_class::isexplosivedamage( undefined, smeansofdeath ) ) ) + { + if ( ( einflictor.classname == "grenade" || sweapon == "tabun_gas_mp" ) && self.lastspawntime + 3500 > gettime() && distancesquared( einflictor.origin, self.lastspawnpoint.origin ) < 62500 ) + return; + + if ( self isplayerimmunetokillstreak( eattacker, sweapon ) ) + return; + + self.explosiveinfo = []; + self.explosiveinfo["damageTime"] = gettime(); + self.explosiveinfo["damageId"] = einflictor getentitynumber(); + self.explosiveinfo["originalOwnerKill"] = 0; + self.explosiveinfo["bulletPenetrationKill"] = 0; + self.explosiveinfo["chainKill"] = 0; + self.explosiveinfo["damageExplosiveKill"] = 0; + self.explosiveinfo["chainKill"] = 0; + self.explosiveinfo["cookedKill"] = 0; + self.explosiveinfo["weapon"] = sweapon; + self.explosiveinfo["originalowner"] = einflictor.originalowner; + isfrag = sweapon == "frag_grenade_mp"; + + if ( isdefined( eattacker ) && eattacker != self ) + { + if ( isdefined( eattacker ) && isdefined( einflictor.owner ) && ( sweapon == "satchel_charge_mp" || sweapon == "claymore_mp" || sweapon == "bouncingbetty_mp" ) ) + { + self.explosiveinfo["originalOwnerKill"] = einflictor.owner == self; + self.explosiveinfo["damageExplosiveKill"] = isdefined( einflictor.wasdamaged ); + self.explosiveinfo["chainKill"] = isdefined( einflictor.waschained ); + self.explosiveinfo["wasJustPlanted"] = isdefined( einflictor.wasjustplanted ); + self.explosiveinfo["bulletPenetrationKill"] = isdefined( einflictor.wasdamagedfrombulletpenetration ); + self.explosiveinfo["cookedKill"] = 0; + } + + if ( ( sweapon == "sticky_grenade_mp" || sweapon == "explosive_bolt_mp" ) && isdefined( einflictor ) && isdefined( einflictor.stucktoplayer ) ) + self.explosiveinfo["stuckToPlayer"] = einflictor.stucktoplayer; + + if ( sweapon == "proximity_grenade_mp" || sweapon == "proximity_grenade_aoe_mp" ) + { + self.laststunnedby = eattacker; + self.laststunnedtime = self.idflagstime; + } + + if ( isdefined( eattacker.lastgrenadesuicidetime ) && eattacker.lastgrenadesuicidetime >= gettime() - 50 && isfrag ) + self.explosiveinfo["suicideGrenadeKill"] = 1; + else + self.explosiveinfo["suicideGrenadeKill"] = 0; + } + + if ( isfrag ) + { + self.explosiveinfo["cookedKill"] = isdefined( einflictor.iscooked ); + self.explosiveinfo["throwbackKill"] = isdefined( einflictor.threwback ); + } + + if ( isdefined( eattacker ) && isplayer( eattacker ) && eattacker != self ) + self maps\mp\gametypes\_globallogic_score::setinflictorstat( einflictor, eattacker, sweapon ); + } + + if ( smeansofdeath == "MOD_IMPACT" && isdefined( eattacker ) && isplayer( eattacker ) && eattacker != self ) + { + if ( sweapon != "knife_ballistic_mp" ) + self maps\mp\gametypes\_globallogic_score::setinflictorstat( einflictor, eattacker, sweapon ); + + if ( sweapon == "hatchet_mp" && isdefined( einflictor ) ) + self.explosiveinfo["projectile_bounced"] = isdefined( einflictor.bounced ); + } + + if ( isplayer( eattacker ) ) + eattacker.pers["participation"]++; + + prevhealthratio = self.health / self.maxhealth; + + if ( level.teambased && isplayer( eattacker ) && self != eattacker && self.team == eattacker.team ) + { + pixmarker( "BEGIN: PlayerDamage player" ); + + if ( level.friendlyfire == 0 ) + { + if ( sweapon == "artillery_mp" || sweapon == "airstrike_mp" || sweapon == "napalm_mp" || sweapon == "mortar_mp" ) + self damageshellshockandrumble( eattacker, einflictor, sweapon, smeansofdeath, idamage ); + + return; + } + else if ( level.friendlyfire == 1 ) + { + if ( idamage < 1 ) + idamage = 1; + + if ( level.friendlyfiredelay && level.friendlyfiredelaytime >= ( gettime() - level.starttime - level.discardtime ) / 1000 ) + { + eattacker.lastdamagewasfromenemy = 0; + eattacker.friendlydamage = 1; + eattacker finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + eattacker.friendlydamage = undefined; + } + else + { + self.lastdamagewasfromenemy = 0; + self finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + } + } + else if ( level.friendlyfire == 2 && isalive( eattacker ) ) + { + idamage = int( idamage * 0.5 ); + + if ( idamage < 1 ) + idamage = 1; + + eattacker.lastdamagewasfromenemy = 0; + eattacker.friendlydamage = 1; + eattacker finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + eattacker.friendlydamage = undefined; + } + else if ( level.friendlyfire == 3 && isalive( eattacker ) ) + { + idamage = int( idamage * 0.5 ); + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + eattacker.lastdamagewasfromenemy = 0; + self finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + eattacker.friendlydamage = 1; + eattacker finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + eattacker.friendlydamage = undefined; + } + + friendly = 1; + pixmarker( "END: PlayerDamage player" ); + } + else + { + if ( idamage < 1 ) + idamage = 1; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && allowedassistweapon( sweapon ) ) + self trackattackerdamage( eattacker, idamage, smeansofdeath, sweapon ); + + giveinflictorownerassist( eattacker, einflictor, idamage, smeansofdeath, sweapon ); + + if ( isdefined( eattacker ) ) + level.lastlegitimateattacker = eattacker; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( sweapon ) && !issubstr( smeansofdeath, "MOD_MELEE" ) ) + eattacker thread maps\mp\gametypes\_weapons::checkhit( sweapon ); + + if ( ( smeansofdeath == "MOD_GRENADE" || smeansofdeath == "MOD_GRENADE_SPLASH" ) && isdefined( einflictor.iscooked ) ) + self.wascooked = gettime(); + else + self.wascooked = undefined; + + self.lastdamagewasfromenemy = isdefined( eattacker ) && eattacker != self; + + if ( self.lastdamagewasfromenemy ) + { + if ( isplayer( eattacker ) ) + { + if ( isdefined( eattacker.damagedplayers[self.clientid] ) == 0 ) + eattacker.damagedplayers[self.clientid] = spawnstruct(); + + eattacker.damagedplayers[self.clientid].time = gettime(); + eattacker.damagedplayers[self.clientid].entity = self; + } + } + + self finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + } + + if ( isdefined( eattacker ) && isplayer( eattacker ) && eattacker != self ) + { + if ( dodamagefeedback( sweapon, einflictor, idamage, smeansofdeath ) ) + { + if ( idamage > 0 ) + { + if ( self.health > 0 ) + perkfeedback = doperkfeedback( self, sweapon, smeansofdeath, einflictor ); + + eattacker thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor, perkfeedback ); + } + } + } + + self.hasdonecombat = 1; + } + + if ( isdefined( eattacker ) && eattacker != self && !friendly ) + level.usestartspawns = 0; + + pixbeginevent( "PlayerDamage log" ); +/# + if ( getdvarint( "g_debugDamage" ) ) + println( "client:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); +#/ + if ( self.sessionstate != "dead" ) + { + lpselfnum = self getentitynumber(); + lpselfname = self.name; + lpselfteam = self.team; + lpselfguid = self getguid(); + lpattackerteam = ""; + lpattackerorigin = ( 0, 0, 0 ); + + if ( isplayer( eattacker ) ) + { + lpattacknum = eattacker getentitynumber(); + lpattackguid = eattacker getguid(); + lpattackname = eattacker.name; + lpattackerteam = eattacker.team; + lpattackerorigin = eattacker.origin; + bbprint( "mpattacks", "gametime %d attackerspawnid %d attackerweapon %s attackerx %d attackery %d attackerz %d victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", gettime(), getplayerspawnid( eattacker ), sweapon, lpattackerorigin, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 0 ); + } + else + { + lpattacknum = -1; + lpattackguid = ""; + lpattackname = ""; + lpattackerteam = "world"; + bbprint( "mpattacks", "gametime %d attackerweapon %s victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", gettime(), sweapon, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 0 ); + } + + logprint( "D;" + lpselfguid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\\n" ); + } + + pixendevent(); + profilelog_endtiming( 6, "gs=" + game["state"] + " zom=" + sessionmodeiszombiesgame() ); +} + +resetattackerlist() +{ + self.attackers = []; + self.attackerdata = []; + self.attackerdamage = []; + self.firsttimedamaged = 0; +} + +dodamagefeedback( sweapon, einflictor, idamage, smeansofdeath ) +{ + if ( !isdefined( sweapon ) ) + return false; + + if ( level.allowhitmarkers == 0 ) + return false; + + if ( level.allowhitmarkers == 1 ) + { + if ( isdefined( smeansofdeath ) && isdefined( idamage ) ) + { + if ( istacticalhitmarker( sweapon, smeansofdeath, idamage ) ) + return false; + } + } + + return true; +} + +istacticalhitmarker( sweapon, smeansofdeath, idamage ) +{ + if ( isgrenade( sweapon ) ) + { + if ( sweapon == "willy_pete_mp" ) + { + if ( smeansofdeath == "MOD_GRENADE_SPLASH" ) + return true; + } + else if ( idamage == 1 ) + return true; + } + + return false; +} + +doperkfeedback( player, sweapon, smeansofdeath, einflictor ) +{ + perkfeedback = undefined; + hastacticalmask = maps\mp\gametypes\_class::hastacticalmask( player ); + hasflakjacket = player hasperk( "specialty_flakjacket" ); + isexplosivedamage = maps\mp\gametypes\_class::isexplosivedamage( sweapon, smeansofdeath ); + isflashorstundamage = maps\mp\gametypes\_weapon_utils::isflashorstundamage( sweapon, smeansofdeath ); + + if ( isflashorstundamage && hastacticalmask ) + perkfeedback = "tacticalMask"; + else if ( isexplosivedamage && hasflakjacket && !isaikillstreakdamage( sweapon, einflictor ) ) + perkfeedback = "flakjacket"; + + return perkfeedback; +} + +isaikillstreakdamage( sweapon, einflictor ) +{ + switch ( sweapon ) + { + case "ai_tank_drone_rocket_mp": + return isdefined( einflictor.firedbyai ); + case "missile_swarm_projectile_mp": + return 1; + case "planemortar_mp": + return 1; + case "chopper_minigun_mp": + return 1; + case "straferun_rockets_mp": + return 1; + case "littlebird_guard_minigun_mp": + return 1; + case "cobra_20mm_comlink_mp": + return 1; + } + + return 0; +} + +finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + pixbeginevent( "finishPlayerDamageWrapper" ); + + if ( !level.console && idflags & level.idflags_penetration && isplayer( eattacker ) ) + { +/# + println( "penetrated:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); +#/ + eattacker addplayerstat( "penetration_shots", 1 ); + } + + self finishplayerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + + if ( getdvar( "scr_csmode" ) != "" ) + self shellshock( "damage_mp", 0.2 ); + + self damageshellshockandrumble( eattacker, einflictor, sweapon, smeansofdeath, idamage ); + pixendevent(); +} + +allowedassistweapon( weapon ) +{ + if ( !maps\mp\killstreaks\_killstreaks::iskillstreakweapon( weapon ) ) + return true; + + if ( maps\mp\killstreaks\_killstreaks::iskillstreakweaponassistallowed( weapon ) ) + return true; + + return false; +} + +playerkilled_killstreaks( attacker, sweapon ) +{ + if ( !isdefined( self.switching_teams ) ) + { + if ( isplayer( attacker ) && level.teambased && attacker != self && self.team == attacker.team ) + { + self.pers["cur_kill_streak"] = 0; + self.pers["cur_total_kill_streak"] = 0; + self.pers["totalKillstreakCount"] = 0; + self.pers["killstreaksEarnedThisKillstreak"] = 0; + self setplayercurrentstreak( 0 ); + } + else + { + self maps\mp\gametypes\_globallogic_score::incpersstat( "deaths", 1, 1, 1 ); + self.deaths = self maps\mp\gametypes\_globallogic_score::getpersstat( "deaths" ); + self updatestatratio( "kdratio", "kills", "deaths" ); + + if ( self.pers["cur_kill_streak"] > self.pers["best_kill_streak"] ) + self.pers["best_kill_streak"] = self.pers["cur_kill_streak"]; + + self.pers["kill_streak_before_death"] = self.pers["cur_kill_streak"]; + self.pers["cur_kill_streak"] = 0; + self.pers["cur_total_kill_streak"] = 0; + self.pers["totalKillstreakCount"] = 0; + self.pers["killstreaksEarnedThisKillstreak"] = 0; + self setplayercurrentstreak( 0 ); + self.cur_death_streak++; + + if ( self.cur_death_streak > self.death_streak ) + { + if ( level.rankedmatch && !level.disablestattracking ) + self setdstat( "HighestStats", "death_streak", self.cur_death_streak ); + + self.death_streak = self.cur_death_streak; + } + + if ( self.cur_death_streak >= getdvarint( "perk_deathStreakCountRequired" ) ) + self enabledeathstreak(); + } + } + else + { + self.pers["totalKillstreakCount"] = 0; + self.pers["killstreaksEarnedThisKillstreak"] = 0; + } + + if ( !sessionmodeiszombiesgame() && maps\mp\killstreaks\_killstreaks::iskillstreakweapon( sweapon ) ) + level.globalkillstreaksdeathsfrom++; +} + +playerkilled_weaponstats( attacker, sweapon, smeansofdeath, wasinlaststand, lastweaponbeforedroppingintolaststand, inflictor ) +{ + if ( isplayer( attacker ) && attacker != self && ( !level.teambased || level.teambased && self.team != attacker.team ) ) + { + self addweaponstat( sweapon, "deaths", 1 ); + + if ( wasinlaststand && isdefined( lastweaponbeforedroppingintolaststand ) ) + weaponname = lastweaponbeforedroppingintolaststand; + else + weaponname = self.lastdroppableweapon; + + if ( isdefined( weaponname ) ) + self addweaponstat( weaponname, "deathsDuringUse", 1 ); + + if ( smeansofdeath != "MOD_FALLING" ) + { + if ( sweapon == "explosive_bolt_mp" && isdefined( inflictor ) && isdefined( inflictor.ownerweaponatlaunch ) && inflictor.owneradsatlaunch ) + attacker addweaponstat( inflictor.ownerweaponatlaunch, "kills", 1, attacker.class_num, 1 ); + else + attacker addweaponstat( sweapon, "kills", 1, attacker.class_num ); + } + + if ( smeansofdeath == "MOD_HEAD_SHOT" ) + attacker addweaponstat( sweapon, "headshots", 1 ); + + if ( smeansofdeath == "MOD_PROJECTILE" ) + attacker addweaponstat( sweapon, "direct_hit_kills", 1 ); + } +} + +playerkilled_obituary( attacker, einflictor, sweapon, smeansofdeath ) +{ + if ( !isplayer( attacker ) || self isenemyplayer( attacker ) == 0 || isdefined( sweapon ) && maps\mp\killstreaks\_killstreaks::iskillstreakweapon( sweapon ) ) + { + level notify( "reset_obituary_count" ); + level.lastobituaryplayercount = 0; + level.lastobituaryplayer = undefined; + } + else + { + if ( isdefined( level.lastobituaryplayer ) && level.lastobituaryplayer == attacker ) + level.lastobituaryplayercount++; + else + { + level notify( "reset_obituary_count" ); + level.lastobituaryplayer = attacker; + level.lastobituaryplayercount = 1; + } + + level thread maps\mp\_scoreevents::decrementlastobituaryplayercountafterfade(); + + if ( level.lastobituaryplayercount >= 4 ) + { + level notify( "reset_obituary_count" ); + level.lastobituaryplayercount = 0; + level.lastobituaryplayer = undefined; + self thread uninterruptedobitfeedkills( attacker, sweapon ); + } + } + + overrideentitycamera = maps\mp\killstreaks\_killstreaks::shouldoverrideentitycameraindemo( attacker, sweapon ); + + if ( level.teambased && isdefined( attacker.pers ) && self.team == attacker.team && smeansofdeath == "MOD_GRENADE" && level.friendlyfire == 0 ) + { + obituary( self, self, sweapon, smeansofdeath ); + maps\mp\_demo::bookmark( "kill", gettime(), self, self, 0, einflictor, overrideentitycamera ); + } + else + { + obituary( self, attacker, sweapon, smeansofdeath ); + maps\mp\_demo::bookmark( "kill", gettime(), self, attacker, 0, einflictor, overrideentitycamera ); + } +} + +playerkilled_suicide( einflictor, attacker, smeansofdeath, sweapon, shitloc ) +{ + awardassists = 0; + + if ( isdefined( self.switching_teams ) ) + { + if ( !level.teambased && ( isdefined( level.teams[self.leaving_team] ) && isdefined( level.teams[self.joining_team] ) && level.teams[self.leaving_team] != level.teams[self.joining_team] ) ) + { + playercounts = self maps\mp\teams\_teams::countplayers(); + playercounts[self.leaving_team]--; + playercounts[self.joining_team]++; + + if ( playercounts[self.joining_team] - playercounts[self.leaving_team] > 1 ) + { + thread maps\mp\_scoreevents::processscoreevent( "suicide", self ); + self thread maps\mp\gametypes\_rank::giverankxp( "suicide" ); + self maps\mp\gametypes\_globallogic_score::incpersstat( "suicides", 1 ); + self.suicides = self maps\mp\gametypes\_globallogic_score::getpersstat( "suicides" ); + } + } + } + else + { + thread maps\mp\_scoreevents::processscoreevent( "suicide", self ); + self maps\mp\gametypes\_globallogic_score::incpersstat( "suicides", 1 ); + self.suicides = self maps\mp\gametypes\_globallogic_score::getpersstat( "suicides" ); + + if ( smeansofdeath == "MOD_SUICIDE" && shitloc == "none" && self.throwinggrenade ) + self.lastgrenadesuicidetime = gettime(); + + if ( level.maxsuicidesbeforekick > 0 && level.maxsuicidesbeforekick <= self.suicides ) + { + self notify( "teamKillKicked" ); + self suicidekick(); + } + + thread maps\mp\gametypes\_battlechatter_mp::onplayersuicideorteamkill( self, "suicide" ); + awardassists = 1; + self.suicide = 1; + } + + if ( isdefined( self.friendlydamage ) ) + { + self iprintln( &"MP_FRIENDLY_FIRE_WILL_NOT" ); + + if ( level.teamkillpointloss ) + { + scoresub = self [[ level.getteamkillscore ]]( einflictor, attacker, smeansofdeath, sweapon ); + score = maps\mp\gametypes\_globallogic_score::_getplayerscore( attacker ) - scoresub; + + if ( score < 0 ) + score = 0; + + maps\mp\gametypes\_globallogic_score::_setplayerscore( attacker, score ); + } + } + + return awardassists; +} + +playerkilled_teamkill( einflictor, attacker, smeansofdeath, sweapon, shitloc ) +{ + thread maps\mp\_scoreevents::processscoreevent( "team_kill", attacker ); + self.teamkilled = 1; + + if ( !ignoreteamkills( sweapon, smeansofdeath ) ) + { + teamkill_penalty = self [[ level.getteamkillpenalty ]]( einflictor, attacker, smeansofdeath, sweapon ); + attacker maps\mp\gametypes\_globallogic_score::incpersstat( "teamkills_nostats", teamkill_penalty, 0 ); + attacker maps\mp\gametypes\_globallogic_score::incpersstat( "teamkills", 1 ); + attacker.teamkillsthisround++; + + if ( level.teamkillpointloss ) + { + scoresub = self [[ level.getteamkillscore ]]( einflictor, attacker, smeansofdeath, sweapon ); + score = maps\mp\gametypes\_globallogic_score::_getplayerscore( attacker ) - scoresub; + + if ( score < 0 ) + score = 0; + + maps\mp\gametypes\_globallogic_score::_setplayerscore( attacker, score ); + } + + if ( maps\mp\gametypes\_globallogic_utils::gettimepassed() < 5000 ) + teamkilldelay = 1; + else if ( attacker.pers["teamkills_nostats"] > 1 && maps\mp\gametypes\_globallogic_utils::gettimepassed() < 8000 + attacker.pers["teamkills_nostats"] * 1000 ) + teamkilldelay = 1; + else + teamkilldelay = attacker teamkilldelay(); + + if ( teamkilldelay > 0 ) + { + attacker.teamkillpunish = 1; + attacker thread wait_and_suicide(); + + if ( attacker shouldteamkillkick( teamkilldelay ) ) + { + attacker notify( "teamKillKicked" ); + attacker teamkillkick(); + } + + attacker thread reduceteamkillsovertime(); + } + + if ( isplayer( attacker ) ) + thread maps\mp\gametypes\_battlechatter_mp::onplayersuicideorteamkill( attacker, "teamkill" ); + } +} + +wait_and_suicide() +{ + self endon( "disconnect" ); + self freezecontrolswrapper( 1 ); + wait 0.25; + self suicide(); +} + +playerkilled_awardassists( einflictor, attacker, sweapon, lpattackteam ) +{ + pixbeginevent( "PlayerKilled assists" ); + + if ( isdefined( self.attackers ) ) + { + for ( j = 0; j < self.attackers.size; j++ ) + { + player = self.attackers[j]; + + if ( !isdefined( player ) ) + continue; + + if ( player == attacker ) + continue; + + if ( player.team != lpattackteam ) + continue; + + damage_done = self.attackerdamage[player.clientid].damage; + player thread maps\mp\gametypes\_globallogic_score::processassist( self, damage_done, self.attackerdamage[player.clientid].weapon ); + } + } + + if ( level.teambased ) + self maps\mp\gametypes\_globallogic_score::processkillstreakassists( attacker, einflictor, sweapon ); + + if ( isdefined( self.lastattackedshieldplayer ) && isdefined( self.lastattackedshieldtime ) && self.lastattackedshieldplayer != attacker ) + { + if ( gettime() - self.lastattackedshieldtime < 4000 ) + self.lastattackedshieldplayer thread maps\mp\gametypes\_globallogic_score::processshieldassist( self ); + } + + pixendevent(); +} + +playerkilled_kill( einflictor, attacker, smeansofdeath, sweapon, shitloc ) +{ + maps\mp\gametypes\_globallogic_score::inctotalkills( attacker.team ); + attacker thread maps\mp\gametypes\_globallogic_score::givekillstats( smeansofdeath, sweapon, self ); + + if ( isalive( attacker ) ) + { + pixbeginevent( "killstreak" ); + + if ( !isdefined( einflictor ) || !isdefined( einflictor.requireddeathcount ) || attacker.deathcount == einflictor.requireddeathcount ) + { + shouldgivekillstreak = maps\mp\killstreaks\_killstreaks::shouldgivekillstreak( sweapon ); + + if ( shouldgivekillstreak ) + attacker maps\mp\killstreaks\_killstreaks::addtokillstreakcount( sweapon ); + + attacker.pers["cur_total_kill_streak"]++; + attacker setplayercurrentstreak( attacker.pers["cur_total_kill_streak"] ); + + if ( isdefined( level.killstreaks ) && shouldgivekillstreak ) + { + attacker.pers["cur_kill_streak"]++; + + if ( attacker.pers["cur_kill_streak"] >= 2 ) + { + if ( attacker.pers["cur_kill_streak"] == 10 ) + attacker maps\mp\_challenges::killstreakten(); + + if ( attacker.pers["cur_kill_streak"] <= 30 ) + maps\mp\_scoreevents::processscoreevent( "killstreak_" + attacker.pers["cur_kill_streak"], attacker, self, sweapon ); + else + maps\mp\_scoreevents::processscoreevent( "killstreak_more_than_30", attacker, self, sweapon ); + } + + if ( !isdefined( level.usingmomentum ) || !level.usingmomentum ) + attacker thread maps\mp\killstreaks\_killstreaks::givekillstreakforstreak(); + } + } + + if ( isplayer( attacker ) ) + self thread maps\mp\gametypes\_battlechatter_mp::onplayerkillstreak( attacker ); + + pixendevent(); + } + + if ( attacker.pers["cur_kill_streak"] > attacker.kill_streak ) + { + if ( level.rankedmatch && !level.disablestattracking ) + attacker setdstat( "HighestStats", "kill_streak", attacker.pers["totalKillstreakCount"] ); + + attacker.kill_streak = attacker.pers["cur_kill_streak"]; + } + + if ( attacker.pers["cur_kill_streak"] > attacker.gametype_kill_streak ) + { + attacker maps\mp\gametypes\_persistence::statsetwithgametype( "kill_streak", attacker.pers["cur_kill_streak"] ); + attacker.gametype_kill_streak = attacker.pers["cur_kill_streak"]; + } + + killstreak = maps\mp\killstreaks\_killstreaks::getkillstreakforweapon( sweapon ); + + if ( isdefined( killstreak ) ) + { + if ( maps\mp\_scoreevents::isregisteredevent( killstreak ) ) + maps\mp\_scoreevents::processscoreevent( killstreak, attacker, self, sweapon ); + + if ( sweapon == "straferun_gun_mp" || sweapon == "straferun_rockets_mp" ) + attacker maps\mp\killstreaks\_straferun::addstraferunkill(); + } + else + { + if ( smeansofdeath == "MOD_MELEE" && level.gametype == "gun" ) + { + + } + else + maps\mp\_scoreevents::processscoreevent( "kill", attacker, self, sweapon ); + + if ( smeansofdeath == "MOD_HEAD_SHOT" ) + maps\mp\_scoreevents::processscoreevent( "headshot", attacker, self, sweapon ); + else if ( smeansofdeath == "MOD_MELEE" ) + { + if ( sweapon == "riotshield_mp" ) + { + maps\mp\_scoreevents::processscoreevent( "melee_kill_with_riot_shield", attacker, self, sweapon ); + + if ( isdefined( attacker.class_num ) ) + { + primaryweaponnum = attacker getloadoutitem( attacker.class_num, "primary" ); + secondaryweaponnum = attacker getloadoutitem( attacker.class_num, "secondary" ); + + if ( primaryweaponnum && level.tbl_weaponids[primaryweaponnum]["reference"] == "riotshield" && !secondaryweaponnum || secondaryweaponnum && level.tbl_weaponids[secondaryweaponnum]["reference"] == "riotshield" && !primaryweaponnum ) + attacker addweaponstat( sweapon, "NoLethalKills", 1 ); + } + } + else + maps\mp\_scoreevents::processscoreevent( "melee_kill", attacker, self, sweapon ); + } + } + + attacker thread maps\mp\gametypes\_globallogic_score::trackattackerkill( self.name, self.pers["rank"], self.pers["rankxp"], self.pers["prestige"], self getxuid( 1 ) ); + attackername = attacker.name; + self thread maps\mp\gametypes\_globallogic_score::trackattackeedeath( attackername, attacker.pers["rank"], attacker.pers["rankxp"], attacker.pers["prestige"], attacker getxuid( 1 ) ); + self thread maps\mp\_medals::setlastkilledby( attacker ); + attacker thread maps\mp\gametypes\_globallogic_score::inckillstreaktracker( sweapon ); + + if ( level.teambased && attacker.team != "spectator" ) + { + if ( isai( attacker ) ) + maps\mp\gametypes\_globallogic_score::giveteamscore( "kill", attacker.aiteam, attacker, self ); + else + maps\mp\gametypes\_globallogic_score::giveteamscore( "kill", attacker.team, attacker, self ); + } + + scoresub = level.deathpointloss; + + if ( scoresub != 0 ) + maps\mp\gametypes\_globallogic_score::_setplayerscore( self, maps\mp\gametypes\_globallogic_score::_getplayerscore( self ) - scoresub ); + + level thread playkillbattlechatter( attacker, sweapon, self ); +} + +callback_playerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + profilelog_begintiming( 7, "ship" ); + self endon( "spawned" ); + self notify( "killed_player" ); + + if ( self.sessionteam == "spectator" ) + return; + + if ( game["state"] == "postgame" ) + return; + + self needsrevive( 0 ); + + if ( isdefined( self.burning ) && self.burning == 1 ) + self setburn( 0 ); + + self.suicide = 0; + self.teamkilled = 0; + + if ( isdefined( level.takelivesondeath ) && level.takelivesondeath == 1 ) + { + if ( self.pers["lives"] ) + { + self.pers["lives"]--; + + if ( self.pers["lives"] == 0 ) + { + level notify( "player_eliminated" ); + self notify( "player_eliminated" ); + } + } + } + + self thread flushgroupdialogonplayer( "item_destroyed" ); + sweapon = updateweapon( einflictor, sweapon ); + pixbeginevent( "PlayerKilled pre constants" ); + wasinlaststand = 0; + deathtimeoffset = 0; + lastweaponbeforedroppingintolaststand = undefined; + attackerstance = undefined; + self.laststandthislife = undefined; + self.vattackerorigin = undefined; + + if ( isdefined( self.uselaststandparams ) ) + { + self.uselaststandparams = undefined; + assert( isdefined( self.laststandparams ) ); + + if ( !level.teambased || !isdefined( attacker ) || !isplayer( attacker ) || attacker.team != self.team || attacker == self ) + { + einflictor = self.laststandparams.einflictor; + attacker = self.laststandparams.attacker; + attackerstance = self.laststandparams.attackerstance; + idamage = self.laststandparams.idamage; + smeansofdeath = self.laststandparams.smeansofdeath; + sweapon = self.laststandparams.sweapon; + vdir = self.laststandparams.vdir; + shitloc = self.laststandparams.shitloc; + self.vattackerorigin = self.laststandparams.vattackerorigin; + deathtimeoffset = ( gettime() - self.laststandparams.laststandstarttime ) / 1000; + self thread maps\mp\gametypes\_battlechatter_mp::perkspecificbattlechatter( "secondchance" ); + + if ( isdefined( self.previousprimary ) ) + { + wasinlaststand = 1; + lastweaponbeforedroppingintolaststand = self.previousprimary; + } + } + + self.laststandparams = undefined; + } + + bestplayer = undefined; + bestplayermeansofdeath = undefined; + obituarymeansofdeath = undefined; + bestplayerweapon = undefined; + obituaryweapon = sweapon; + assistedsuicide = 0; + + if ( ( !isdefined( attacker ) || attacker.classname == "trigger_hurt" || attacker.classname == "worldspawn" || isdefined( attacker.ismagicbullet ) && attacker.ismagicbullet == 1 || attacker == self ) && isdefined( self.attackers ) ) + { + if ( !isdefined( bestplayer ) ) + { + for ( i = 0; i < self.attackers.size; i++ ) + { + player = self.attackers[i]; + + if ( !isdefined( player ) ) + continue; + + if ( !isdefined( self.attackerdamage[player.clientid] ) || !isdefined( self.attackerdamage[player.clientid].damage ) ) + continue; + + if ( player == self || level.teambased && player.team == self.team ) + continue; + + if ( self.attackerdamage[player.clientid].lasttimedamaged + 2500 < gettime() ) + continue; + + if ( !allowedassistweapon( self.attackerdamage[player.clientid].weapon ) ) + continue; + + if ( self.attackerdamage[player.clientid].damage > 1 && !isdefined( bestplayer ) ) + { + bestplayer = player; + bestplayermeansofdeath = self.attackerdamage[player.clientid].meansofdeath; + bestplayerweapon = self.attackerdamage[player.clientid].weapon; + continue; + } + + if ( isdefined( bestplayer ) && self.attackerdamage[player.clientid].damage > self.attackerdamage[bestplayer.clientid].damage ) + { + bestplayer = player; + bestplayermeansofdeath = self.attackerdamage[player.clientid].meansofdeath; + bestplayerweapon = self.attackerdamage[player.clientid].weapon; + } + } + } + + if ( isdefined( bestplayer ) ) + { + maps\mp\_scoreevents::processscoreevent( "assisted_suicide", bestplayer, self, sweapon ); + self recordkillmodifier( "assistedsuicide" ); + assistedsuicide = 1; + } + } + + if ( isdefined( bestplayer ) ) + { + attacker = bestplayer; + obituarymeansofdeath = bestplayermeansofdeath; + obituaryweapon = bestplayerweapon; + + if ( isdefined( bestplayerweapon ) ) + sweapon = bestplayerweapon; + } + + if ( isplayer( attacker ) ) + attacker.damagedplayers[self.clientid] = undefined; + + self.deathtime = gettime(); + attacker = updateattacker( attacker, sweapon ); + einflictor = updateinflictor( einflictor ); + smeansofdeath = self playerkilled_updatemeansofdeath( attacker, einflictor, sweapon, smeansofdeath, shitloc ); + + if ( !isdefined( obituarymeansofdeath ) ) + obituarymeansofdeath = smeansofdeath; + + if ( isdefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped == 1 ) + { + self detachshieldmodel( level.carriedshieldmodel, "tag_weapon_left" ); + self.hasriotshield = 0; + self.hasriotshieldequipped = 0; + } + + self thread updateglobalbotkilledcounter(); + self playerkilled_weaponstats( attacker, sweapon, smeansofdeath, wasinlaststand, lastweaponbeforedroppingintolaststand, einflictor ); + self playerkilled_obituary( attacker, einflictor, obituaryweapon, obituarymeansofdeath ); + maps\mp\gametypes\_spawnlogic::deathoccured( self, attacker ); + self.sessionstate = "dead"; + self.statusicon = "hud_status_dead"; + self.pers["weapon"] = undefined; + self.killedplayerscurrent = []; + self.deathcount++; +/# + println( "players(" + self.clientid + ") death count ++: " + self.deathcount ); +#/ + self playerkilled_killstreaks( attacker, sweapon ); + lpselfnum = self getentitynumber(); + lpselfname = self.name; + lpattackguid = ""; + lpattackname = ""; + lpselfteam = self.team; + lpselfguid = self getguid(); + lpattackteam = ""; + lpattackorigin = ( 0, 0, 0 ); + lpattacknum = -1; + awardassists = 0; + wasteamkill = 0; + wassuicide = 0; + pixendevent(); + maps\mp\_scoreevents::processscoreevent( "death", self, self, sweapon ); + self.pers["resetMomentumOnSpawn"] = 1; + + if ( isplayer( attacker ) ) + { + lpattackguid = attacker getguid(); + lpattackname = attacker.name; + lpattackteam = attacker.team; + lpattackorigin = attacker.origin; + + if ( attacker == self || assistedsuicide == 1 ) + { + dokillcam = 0; + wassuicide = 1; + awardassists = self playerkilled_suicide( einflictor, attacker, smeansofdeath, sweapon, shitloc ); + } + else + { + pixbeginevent( "PlayerKilled attacker" ); + lpattacknum = attacker getentitynumber(); + dokillcam = 1; + + if ( level.teambased && self.team == attacker.team && smeansofdeath == "MOD_GRENADE" && level.friendlyfire == 0 ) + { + + } + else if ( level.teambased && self.team == attacker.team ) + { + wasteamkill = 1; + self playerkilled_teamkill( einflictor, attacker, smeansofdeath, sweapon, shitloc ); + } + else + { + self playerkilled_kill( einflictor, attacker, smeansofdeath, sweapon, shitloc ); + + if ( level.teambased ) + awardassists = 1; + } + + pixendevent(); + } + } + else if ( isdefined( attacker ) && ( attacker.classname == "trigger_hurt" || attacker.classname == "worldspawn" ) ) + { + dokillcam = 0; + lpattacknum = -1; + lpattackguid = ""; + lpattackname = ""; + lpattackteam = "world"; + thread maps\mp\_scoreevents::processscoreevent( "suicide", self ); + self maps\mp\gametypes\_globallogic_score::incpersstat( "suicides", 1 ); + self.suicides = self maps\mp\gametypes\_globallogic_score::getpersstat( "suicides" ); + self.suicide = 1; + thread maps\mp\gametypes\_battlechatter_mp::onplayersuicideorteamkill( self, "suicide" ); + awardassists = 1; + + if ( level.maxsuicidesbeforekick > 0 && level.maxsuicidesbeforekick <= self.suicides ) + { + self notify( "teamKillKicked" ); + self suicidekick(); + } + } + else + { + dokillcam = 0; + lpattacknum = -1; + lpattackguid = ""; + lpattackname = ""; + lpattackteam = "world"; + wassuicide = 1; + + if ( isdefined( einflictor ) && isdefined( einflictor.killcament ) ) + { + dokillcam = 1; + lpattacknum = self getentitynumber(); + wassuicide = 0; + } + + if ( isdefined( attacker ) && isdefined( attacker.team ) && isdefined( level.teams[attacker.team] ) ) + { + if ( attacker.team != self.team ) + { + if ( level.teambased ) + maps\mp\gametypes\_globallogic_score::giveteamscore( "kill", attacker.team, attacker, self ); + + wassuicide = 0; + } + } + + awardassists = 1; + } + + if ( !level.ingraceperiod ) + { + if ( smeansofdeath != "MOD_GRENADE" && smeansofdeath != "MOD_GRENADE_SPLASH" && smeansofdeath != "MOD_EXPLOSIVE" && smeansofdeath != "MOD_EXPLOSIVE_SPLASH" && smeansofdeath != "MOD_PROJECTILE_SPLASH" ) + self maps\mp\gametypes\_weapons::dropscavengerfordeath( attacker ); + + if ( !wasteamkill && !wassuicide ) + { + self maps\mp\gametypes\_weapons::dropweaponfordeath( attacker, sweapon, smeansofdeath ); + self maps\mp\gametypes\_weapons::dropoffhand(); + } + } + + if ( sessionmodeiszombiesgame() ) + awardassists = 0; + + if ( awardassists ) + self playerkilled_awardassists( einflictor, attacker, sweapon, lpattackteam ); + + pixbeginevent( "PlayerKilled post constants" ); + self.lastattacker = attacker; + self.lastdeathpos = self.origin; + + if ( isdefined( attacker ) && isplayer( attacker ) && attacker != self && ( !level.teambased || attacker.team != self.team ) ) + self thread maps\mp\_challenges::playerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, shitloc, attackerstance ); + else + self notify( "playerKilledChallengesProcessed" ); + + if ( isdefined( self.attackers ) ) + self.attackers = []; + + if ( isplayer( attacker ) ) + { + if ( maps\mp\killstreaks\_killstreaks::iskillstreakweapon( sweapon ) ) + { + killstreak = maps\mp\killstreaks\_killstreaks::getkillstreakforweapon( sweapon ); + bbprint( "mpattacks", "gametime %d attackerspawnid %d attackerweapon %s attackerx %d attackery %d attackerz %d victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d killstreak %s", gettime(), getplayerspawnid( attacker ), sweapon, lpattackorigin, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 1, killstreak ); + } + else + bbprint( "mpattacks", "gametime %d attackerspawnid %d attackerweapon %s attackerx %d attackery %d attackerz %d victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", gettime(), getplayerspawnid( attacker ), sweapon, lpattackorigin, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 1 ); + } + else + bbprint( "mpattacks", "gametime %d attackerweapon %s victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", gettime(), sweapon, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 1 ); + + logprint( "K;" + lpselfguid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\\n" ); + attackerstring = "none"; + + if ( isplayer( attacker ) ) + attackerstring = attacker getxuid() + "(" + lpattackname + ")"; + + self logstring( "d " + smeansofdeath + "(" + sweapon + ") a:" + attackerstring + " d:" + idamage + " l:" + shitloc + " @ " + int( self.origin[0] ) + " " + int( self.origin[1] ) + " " + int( self.origin[2] ) ); + level thread maps\mp\gametypes\_globallogic::updateteamstatus(); + killcamentity = self getkillcamentity( attacker, einflictor, sweapon ); + killcamentityindex = -1; + killcamentitystarttime = 0; + + if ( isdefined( killcamentity ) ) + { + killcamentityindex = killcamentity getentitynumber(); + + if ( isdefined( killcamentity.starttime ) ) + killcamentitystarttime = killcamentity.starttime; + else + killcamentitystarttime = killcamentity.birthtime; + + if ( !isdefined( killcamentitystarttime ) ) + killcamentitystarttime = 0; + } + + if ( isdefined( self.killstreak_waitamount ) && self.killstreak_waitamount > 0 ) + dokillcam = 0; + + self maps\mp\gametypes\_weapons::detachcarryobjectmodel(); + died_in_vehicle = 0; + + if ( isdefined( self.diedonvehicle ) ) + died_in_vehicle = self.diedonvehicle; + + hit_by_train = 0; + + if ( isdefined( attacker ) && isdefined( attacker.targetname ) && attacker.targetname == "train" ) + hit_by_train = 1; + + pixendevent(); + pixbeginevent( "PlayerKilled body and gibbing" ); + + if ( !died_in_vehicle && !hit_by_train ) + { + vattackerorigin = undefined; + + if ( isdefined( attacker ) ) + vattackerorigin = attacker.origin; + + ragdoll_now = 0; + + if ( isdefined( self.usingvehicle ) && self.usingvehicle && isdefined( self.vehicleposition ) && self.vehicleposition == 1 ) + ragdoll_now = 1; + + body = self cloneplayer( deathanimduration ); + + if ( isdefined( body ) ) + self createdeadbody( idamage, smeansofdeath, sweapon, shitloc, vdir, vattackerorigin, deathanimduration, einflictor, ragdoll_now, body ); + } + + pixendevent(); + thread maps\mp\gametypes\_globallogic_spawn::spawnqueuedclient( self.team, attacker ); + self.switching_teams = undefined; + self.joining_team = undefined; + self.leaving_team = undefined; + self thread [[ level.onplayerkilled ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); + + for ( icb = 0; icb < level.onplayerkilledextraunthreadedcbs.size; icb++ ) + self [[ level.onplayerkilledextraunthreadedcbs[icb] ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); + + self.wantsafespawn = 0; + perks = []; + killstreaks = maps\mp\gametypes\_globallogic::getkillstreaks( attacker ); + + if ( !isdefined( self.killstreak_waitamount ) ) + self thread [[ level.spawnplayerprediction ]](); + + profilelog_endtiming( 7, "gs=" + game["state"] + " zom=" + sessionmodeiszombiesgame() ); + + if ( wasteamkill == 0 && assistedsuicide == 0 && hit_by_train == 0 && smeansofdeath != "MOD_SUICIDE" && !( !isdefined( attacker ) || attacker.classname == "trigger_hurt" || attacker.classname == "worldspawn" || attacker == self || isdefined( attacker.disablefinalkillcam ) ) ) + level thread maps\mp\gametypes\_killcam::recordkillcamsettings( lpattacknum, self getentitynumber(), sweapon, self.deathtime, deathtimeoffset, psoffsettime, killcamentityindex, killcamentitystarttime, perks, killstreaks, attacker ); + + wait 0.25; + weaponclass = getweaponclass( sweapon ); + + if ( weaponclass == "weapon_sniper" ) + self thread maps\mp\gametypes\_battlechatter_mp::killedbysniper( attacker ); + else + self thread maps\mp\gametypes\_battlechatter_mp::playerkilled( attacker ); + + self.cancelkillcam = 0; + self thread maps\mp\gametypes\_killcam::cancelkillcamonuse(); + defaultplayerdeathwatchtime = 1.75; + + if ( isdefined( level.overrideplayerdeathwatchtimer ) ) + defaultplayerdeathwatchtime = [[ level.overrideplayerdeathwatchtimer ]]( defaultplayerdeathwatchtime ); + + maps\mp\gametypes\_globallogic_utils::waitfortimeornotifies( defaultplayerdeathwatchtime ); + self notify( "death_delay_finished" ); +/# + if ( getdvarint( _hash_C1849218 ) != 0 ) + { + dokillcam = 1; + + if ( lpattacknum < 0 ) + lpattacknum = self getentitynumber(); + } +#/ + if ( hit_by_train ) + { + if ( killcamentitystarttime > self.deathtime - 2500 ) + dokillcam = 0; + } + + if ( game["state"] != "playing" ) + return; + + self.respawntimerstarttime = gettime(); + + if ( !self.cancelkillcam && dokillcam && level.killcam ) + { + livesleft = !( level.numlives && !self.pers["lives"] ); + timeuntilspawn = maps\mp\gametypes\_globallogic_spawn::timeuntilspawn( 1 ); + willrespawnimmediately = livesleft && timeuntilspawn <= 0 && !level.playerqueuedrespawn; + self maps\mp\gametypes\_killcam::killcam( lpattacknum, self getentitynumber(), killcamentity, killcamentityindex, killcamentitystarttime, sweapon, self.deathtime, deathtimeoffset, psoffsettime, willrespawnimmediately, maps\mp\gametypes\_globallogic_utils::timeuntilroundend(), perks, killstreaks, attacker ); + } + + if ( game["state"] != "playing" ) + { + self.sessionstate = "dead"; + self.spectatorclient = -1; + self.killcamtargetentity = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + return; + } + + waittillkillstreakdone(); + userespawntime = 1; + + if ( isdefined( level.hostmigrationtimer ) ) + userespawntime = 0; + + maps\mp\gametypes\_hostmigration::waittillhostmigrationcountdown(); + + if ( maps\mp\gametypes\_globallogic_utils::isvalidclass( self.class ) ) + { + timepassed = undefined; + + if ( isdefined( self.respawntimerstarttime ) && userespawntime ) + timepassed = ( gettime() - self.respawntimerstarttime ) / 1000; + + self thread [[ level.spawnclient ]]( timepassed ); + self.respawntimerstarttime = undefined; + } +} + +updateglobalbotkilledcounter() +{ + if ( isdefined( self.pers["isBot"] ) ) + level.globallarryskilled++; +} + +waittillkillstreakdone() +{ + if ( isdefined( self.killstreak_waitamount ) ) + { + starttime = gettime(); + waittime = self.killstreak_waitamount * 1000; + + while ( gettime() < starttime + waittime && isdefined( self.killstreak_waitamount ) ) + wait 0.1; + + wait 2.0; + self.killstreak_waitamount = undefined; + } +} + +suicidekick() +{ + self maps\mp\gametypes\_globallogic_score::incpersstat( "sessionbans", 1 ); + self endon( "disconnect" ); + waittillframeend; + maps\mp\gametypes\_globallogic::gamehistoryplayerkicked(); + ban( self getentitynumber() ); + maps\mp\gametypes\_globallogic_audio::leaderdialog( "kicked" ); +} + +teamkillkick() +{ + self maps\mp\gametypes\_globallogic_score::incpersstat( "sessionbans", 1 ); + self endon( "disconnect" ); + waittillframeend; + playlistbanquantum = maps\mp\gametypes\_tweakables::gettweakablevalue( "team", "teamkillerplaylistbanquantum" ); + playlistbanpenalty = maps\mp\gametypes\_tweakables::gettweakablevalue( "team", "teamkillerplaylistbanpenalty" ); + + if ( playlistbanquantum > 0 && playlistbanpenalty > 0 ) + { + timeplayedtotal = self getdstat( "playerstatslist", "time_played_total", "StatValue" ); + minutesplayed = timeplayedtotal / 60; + freebees = 2; + banallowance = int( floor( minutesplayed / playlistbanquantum ) ) + freebees; + + if ( self.sessionbans > banallowance ) + self setdstat( "playerstatslist", "gametypeban", "StatValue", timeplayedtotal + playlistbanpenalty * 60 ); + } + + maps\mp\gametypes\_globallogic::gamehistoryplayerkicked(); + ban( self getentitynumber() ); + maps\mp\gametypes\_globallogic_audio::leaderdialog( "kicked" ); +} + +teamkilldelay() +{ + teamkills = self.pers["teamkills_nostats"]; + + if ( level.minimumallowedteamkills < 0 || teamkills <= level.minimumallowedteamkills ) + return 0; + + exceeded = teamkills - level.minimumallowedteamkills; + return level.teamkillspawndelay * exceeded; +} + +shouldteamkillkick( teamkilldelay ) +{ + if ( teamkilldelay && level.minimumallowedteamkills >= 0 ) + { + if ( maps\mp\gametypes\_globallogic_utils::gettimepassed() >= 5000 ) + return true; + + if ( self.pers["teamkills_nostats"] > 1 ) + return true; + } + + return false; +} + +reduceteamkillsovertime() +{ + timeperoneteamkillreduction = 20.0; + reductionpersecond = 1.0 / timeperoneteamkillreduction; + + while ( true ) + { + if ( isalive( self ) ) + { + self.pers["teamkills_nostats"] -= reductionpersecond; + + if ( self.pers["teamkills_nostats"] < level.minimumallowedteamkills ) + { + self.pers["teamkills_nostats"] = level.minimumallowedteamkills; + break; + } + } + + wait 1; + } +} + +ignoreteamkills( sweapon, smeansofdeath ) +{ + if ( sessionmodeiszombiesgame() ) + return true; + + if ( smeansofdeath == "MOD_MELEE" ) + return false; + + if ( sweapon == "briefcase_bomb_mp" ) + return true; + + if ( sweapon == "supplydrop_mp" ) + return true; + + return false; +} + +callback_playerlaststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + +} + +damageshellshockandrumble( eattacker, einflictor, sweapon, smeansofdeath, idamage ) +{ + self thread maps\mp\gametypes\_weapons::onweapondamage( eattacker, einflictor, sweapon, smeansofdeath, idamage ); + self playrumbleonentity( "damage_heavy" ); +} + +createdeadbody( idamage, smeansofdeath, sweapon, shitloc, vdir, vattackerorigin, deathanimduration, einflictor, ragdoll_jib, body ) +{ + if ( smeansofdeath == "MOD_HIT_BY_OBJECT" && self getstance() == "prone" ) + { + self.body = body; + + if ( !isdefined( self.switching_teams ) ) + thread maps\mp\gametypes\_deathicons::adddeathicon( body, self, self.team, 5.0 ); + + return; + } + + if ( isdefined( level.ragdoll_override ) && self [[ level.ragdoll_override ]]( idamage, smeansofdeath, sweapon, shitloc, vdir, vattackerorigin, deathanimduration, einflictor, ragdoll_jib, body ) ) + return; + + if ( ragdoll_jib || self isonladder() || self ismantling() || smeansofdeath == "MOD_CRUSH" || smeansofdeath == "MOD_HIT_BY_OBJECT" ) + body startragdoll(); + + if ( !self isonground() ) + { + if ( getdvarint( "scr_disable_air_death_ragdoll" ) == 0 ) + body startragdoll(); + } + + if ( self is_explosive_ragdoll( sweapon, einflictor ) ) + body start_explosive_ragdoll( vdir, sweapon ); + + thread delaystartragdoll( body, shitloc, vdir, sweapon, einflictor, smeansofdeath ); + + if ( smeansofdeath == "MOD_BURNED" || isdefined( self.burning ) ) + body maps\mp\_burnplayer::burnedtodeath(); + + if ( smeansofdeath == "MOD_CRUSH" ) + body maps\mp\gametypes\_globallogic_vehicle::vehiclecrush(); + + self.body = body; + + if ( !isdefined( self.switching_teams ) ) + thread maps\mp\gametypes\_deathicons::adddeathicon( body, self, self.team, 5.0 ); +} + +is_explosive_ragdoll( weapon, inflictor ) +{ + if ( !isdefined( weapon ) ) + return false; + + if ( weapon == "destructible_car_mp" || weapon == "explodable_barrel_mp" ) + return true; + + if ( weapon == "sticky_grenade_mp" || weapon == "explosive_bolt_mp" ) + { + if ( isdefined( inflictor ) && isdefined( inflictor.stucktoplayer ) ) + { + if ( inflictor.stucktoplayer == self ) + return true; + } + } + + return false; +} + +start_explosive_ragdoll( dir, weapon ) +{ + if ( !isdefined( self ) ) + return; + + x = randomintrange( 50, 100 ); + y = randomintrange( 50, 100 ); + z = randomintrange( 10, 20 ); + + if ( isdefined( weapon ) && ( weapon == "sticky_grenade_mp" || weapon == "explosive_bolt_mp" ) ) + { + if ( isdefined( dir ) && lengthsquared( dir ) > 0 ) + { + x = dir[0] * x; + y = dir[1] * y; + } + } + else + { + if ( cointoss() ) + x *= -1; + + if ( cointoss() ) + y *= -1; + } + + self startragdoll(); + self launchragdoll( ( x, y, z ) ); +} + +notifyconnecting() +{ + waittillframeend; + + if ( isdefined( self ) ) + level notify( "connecting", self ); +} + +delaystartragdoll( ent, shitloc, vdir, sweapon, einflictor, smeansofdeath ) +{ + if ( isdefined( ent ) ) + { + deathanim = ent getcorpseanim(); + + if ( animhasnotetrack( deathanim, "ignore_ragdoll" ) ) + return; + } + + if ( level.oldschool ) + { + if ( !isdefined( vdir ) ) + vdir = ( 0, 0, 0 ); + + explosionpos = ent.origin + ( 0, 0, maps\mp\gametypes\_globallogic_utils::gethitlocheight( shitloc ) ); + explosionpos -= vdir * 20; + explosionradius = 40; + explosionforce = 0.75; + + if ( smeansofdeath == "MOD_IMPACT" || smeansofdeath == "MOD_EXPLOSIVE" || issubstr( smeansofdeath, "MOD_GRENADE" ) || issubstr( smeansofdeath, "MOD_PROJECTILE" ) || shitloc == "head" || shitloc == "helmet" ) + explosionforce = 2.5; + + ent startragdoll( 1 ); + wait 0.05; + + if ( !isdefined( ent ) ) + return; + + physicsexplosionsphere( explosionpos, explosionradius, explosionradius / 2, explosionforce ); + return; + } + + wait 0.2; + + if ( !isdefined( ent ) ) + return; + + if ( ent isragdoll() ) + return; + + deathanim = ent getcorpseanim(); + startfrac = 0.35; + + if ( animhasnotetrack( deathanim, "start_ragdoll" ) ) + { + times = getnotetracktimes( deathanim, "start_ragdoll" ); + + if ( isdefined( times ) ) + startfrac = times[0]; + } + + waittime = startfrac * getanimlength( deathanim ); + wait( waittime ); + + if ( isdefined( ent ) ) + ent startragdoll( 1 ); +} + +trackattackerdamage( eattacker, idamage, smeansofdeath, sweapon ) +{ + assert( isplayer( eattacker ) ); + + if ( self.attackerdata.size == 0 ) + self.firsttimedamaged = gettime(); + + if ( !isdefined( self.attackerdata[eattacker.clientid] ) ) + { + self.attackerdamage[eattacker.clientid] = spawnstruct(); + self.attackerdamage[eattacker.clientid].damage = idamage; + self.attackerdamage[eattacker.clientid].meansofdeath = smeansofdeath; + self.attackerdamage[eattacker.clientid].weapon = sweapon; + self.attackerdamage[eattacker.clientid].time = gettime(); + self.attackers[self.attackers.size] = eattacker; + self.attackerdata[eattacker.clientid] = 0; + } + else + { + self.attackerdamage[eattacker.clientid].damage += idamage; + self.attackerdamage[eattacker.clientid].meansofdeath = smeansofdeath; + self.attackerdamage[eattacker.clientid].weapon = sweapon; + + if ( !isdefined( self.attackerdamage[eattacker.clientid].time ) ) + self.attackerdamage[eattacker.clientid].time = gettime(); + } + + self.attackerdamage[eattacker.clientid].lasttimedamaged = gettime(); + + if ( maps\mp\gametypes\_weapons::isprimaryweapon( sweapon ) ) + self.attackerdata[eattacker.clientid] = 1; +} + +giveinflictorownerassist( eattacker, einflictor, idamage, smeansofdeath, sweapon ) +{ + if ( !isdefined( einflictor ) ) + return; + + if ( !isdefined( einflictor.owner ) ) + return; + + if ( !isdefined( einflictor.ownergetsassist ) ) + return; + + if ( !einflictor.ownergetsassist ) + return; + + assert( isplayer( einflictor.owner ) ); + self trackattackerdamage( einflictor.owner, idamage, smeansofdeath, sweapon ); +} + +playerkilled_updatemeansofdeath( attacker, einflictor, sweapon, smeansofdeath, shitloc ) +{ + if ( maps\mp\gametypes\_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) && isplayer( attacker ) ) + return "MOD_HEAD_SHOT"; + + switch ( sweapon ) + { + case "knife_ballistic_mp": + case "crossbow_mp": + if ( smeansofdeath != "MOD_HEAD_SHOT" && smeansofdeath != "MOD_MELEE" ) + smeansofdeath = "MOD_PISTOL_BULLET"; + + break; + case "dog_bite_mp": + smeansofdeath = "MOD_PISTOL_BULLET"; + break; + case "destructible_car_mp": + smeansofdeath = "MOD_EXPLOSIVE"; + break; + case "explodable_barrel_mp": + smeansofdeath = "MOD_EXPLOSIVE"; + break; + } + + return smeansofdeath; +} + +updateattacker( attacker, weapon ) +{ + if ( isai( attacker ) && isdefined( attacker.script_owner ) ) + { + if ( !level.teambased || attacker.script_owner.team != self.team ) + attacker = attacker.script_owner; + } + + if ( attacker.classname == "script_vehicle" && isdefined( attacker.owner ) ) + { + attacker notify( "killed", self ); + attacker = attacker.owner; + } + + if ( isai( attacker ) ) + attacker notify( "killed", self ); + + if ( isdefined( self.capturinglastflag ) && self.capturinglastflag == 1 ) + attacker.lastcapkiller = 1; + + if ( isdefined( attacker ) && isdefined( weapon ) && weapon == "planemortar_mp" ) + { + if ( !isdefined( attacker.planemortarbda ) ) + attacker.planemortarbda = 0; + + attacker.planemortarbda++; + } + + if ( isdefined( attacker ) && isdefined( weapon ) && ( weapon == "straferun_rockets_mp" || weapon == "straferun_gun_mp" ) ) + { + if ( isdefined( attacker.straferunbda ) ) + attacker.straferunbda++; + } + + return attacker; +} + +updateinflictor( einflictor ) +{ + if ( isdefined( einflictor ) && einflictor.classname == "script_vehicle" ) + { + einflictor notify( "killed", self ); + + if ( isdefined( einflictor.bda ) ) + einflictor.bda++; + } + + return einflictor; +} + +updateweapon( einflictor, sweapon ) +{ + if ( sweapon == "none" && isdefined( einflictor ) ) + { + if ( isdefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) + sweapon = "explodable_barrel_mp"; + else if ( isdefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) + sweapon = "destructible_car_mp"; + } + + return sweapon; +} + +getclosestkillcamentity( attacker, killcamentities, depth = 0 ) +{ + closestkillcament = undefined; + closestkillcamentindex = undefined; + closestkillcamentdist = undefined; + origin = undefined; + + foreach ( killcamentindex, killcament in killcamentities ) + { + if ( killcament == attacker ) + continue; + + origin = killcament.origin; + + if ( isdefined( killcament.offsetpoint ) ) + origin += killcament.offsetpoint; + + dist = distancesquared( self.origin, origin ); + + if ( !isdefined( closestkillcament ) || dist < closestkillcamentdist ) + { + closestkillcament = killcament; + closestkillcamentdist = dist; + closestkillcamentindex = killcamentindex; + } + } + + if ( depth < 3 && isdefined( closestkillcament ) ) + { + if ( !bullettracepassed( closestkillcament.origin, self.origin, 0, self ) ) + { + killcamentities[closestkillcamentindex] = undefined; + betterkillcament = getclosestkillcamentity( attacker, killcamentities, depth + 1 ); + + if ( isdefined( betterkillcament ) ) + closestkillcament = betterkillcament; + } + } + + return closestkillcament; +} + +getkillcamentity( attacker, einflictor, sweapon ) +{ + if ( !isdefined( einflictor ) ) + return undefined; + + if ( einflictor == attacker ) + { + if ( !isdefined( einflictor.ismagicbullet ) ) + return undefined; + + if ( isdefined( einflictor.ismagicbullet ) && !einflictor.ismagicbullet ) + return undefined; + } + else if ( isdefined( level.levelspecifickillcam ) ) + { + levelspecifickillcament = self [[ level.levelspecifickillcam ]](); + + if ( isdefined( levelspecifickillcament ) ) + return levelspecifickillcament; + } + + if ( sweapon == "m220_tow_mp" ) + return undefined; + + if ( isdefined( einflictor.killcament ) ) + { + if ( einflictor.killcament == attacker ) + return undefined; + + return einflictor.killcament; + } + else if ( isdefined( einflictor.killcamentities ) ) + return getclosestkillcamentity( attacker, einflictor.killcamentities ); + + if ( isdefined( einflictor.script_gameobjectname ) && einflictor.script_gameobjectname == "bombzone" ) + return einflictor.killcament; + + return einflictor; +} + +playkillbattlechatter( attacker, sweapon, victim ) +{ + if ( isplayer( attacker ) ) + { + if ( !maps\mp\killstreaks\_killstreaks::iskillstreakweapon( sweapon ) ) + level thread maps\mp\gametypes\_battlechatter_mp::saykillbattlechatter( attacker, sweapon, victim ); + } +} diff --git a/MP/Core/maps/mp/gametypes/_globallogic_score.gsc b/MP/Core/maps/mp/gametypes/_globallogic_score.gsc new file mode 100644 index 0000000..9c59017 --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_globallogic_score.gsc @@ -0,0 +1,1364 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_globallogic_utils; +#include maps\mp\gametypes\_rank; +#include maps\mp\_scoreevents; +#include maps\mp\_bb; +#include maps\mp\gametypes\_persistence; +#include maps\mp\gametypes\_wager; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\killstreaks\_killstreaks; +#include maps\mp\killstreaks\_killstreak_weapons; +#include maps\mp\gametypes\_class; +#include maps\mp\_challenges; +#include maps\mp\gametypes\_globallogic_score; +#include maps\mp\gametypes\_globallogic_audio; +#include maps\mp\bots\_bot; + +updatematchbonusscores( winner ) +{ + if ( !game["timepassed"] ) + return; + + if ( !level.rankedmatch ) + return; + + if ( level.teambased && isdefined( winner ) ) + { + if ( winner == "endregulation" ) + return; + } + + if ( !level.timelimit || level.forcedend ) + { + gamelength = maps\mp\gametypes\_globallogic_utils::gettimepassed() / 1000; + gamelength = min( gamelength, 1200 ); + + if ( level.gametype == "twar" && game["roundsplayed"] > 0 ) + gamelength += level.timelimit * 60; + } + else + gamelength = level.timelimit * 60; + + if ( level.teambased ) + { + winningteam = "tie"; + + foreach ( team in level.teams ) + { + if ( winner == team ) + { + winningteam = team; + break; + } + } + + if ( winningteam != "tie" ) + { + winnerscale = 1.0; + loserscale = 0.5; + } + else + { + winnerscale = 0.75; + loserscale = 0.75; + } + + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( player.timeplayed["total"] < 1 || player.pers["participation"] < 1 ) + { + player thread maps\mp\gametypes\_rank::endgameupdate(); + continue; + } + + totaltimeplayed = player.timeplayed["total"]; + + if ( totaltimeplayed > gamelength ) + totaltimeplayed = gamelength; + + if ( level.hostforcedend && player ishost() ) + continue; + + if ( player.pers["score"] < 0 ) + continue; + + spm = player maps\mp\gametypes\_rank::getspm(); + + if ( winningteam == "tie" ) + { + playerscore = int( winnerscale * ( gamelength / 60 * spm ) * totaltimeplayed / gamelength ); + player thread givematchbonus( "tie", playerscore ); + player.matchbonus = playerscore; + continue; + } + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == winningteam ) + { + playerscore = int( winnerscale * ( gamelength / 60 * spm ) * totaltimeplayed / gamelength ); + player thread givematchbonus( "win", playerscore ); + player.matchbonus = playerscore; + continue; + } + + if ( isdefined( player.pers["team"] ) && player.pers["team"] != "spectator" ) + { + playerscore = int( loserscale * ( gamelength / 60 * spm ) * totaltimeplayed / gamelength ); + player thread givematchbonus( "loss", playerscore ); + player.matchbonus = playerscore; + } + } + } + else + { + if ( isdefined( winner ) ) + { + winnerscale = 1.0; + loserscale = 0.5; + } + else + { + winnerscale = 0.75; + loserscale = 0.75; + } + + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( player.timeplayed["total"] < 1 || player.pers["participation"] < 1 ) + { + player thread maps\mp\gametypes\_rank::endgameupdate(); + continue; + } + + totaltimeplayed = player.timeplayed["total"]; + + if ( totaltimeplayed > gamelength ) + totaltimeplayed = gamelength; + + spm = player maps\mp\gametypes\_rank::getspm(); + iswinner = 0; + + for ( pidx = 0; pidx < min( level.placement["all"][0].size, 3 ); pidx++ ) + { + if ( level.placement["all"][pidx] != player ) + continue; + + iswinner = 1; + } + + if ( iswinner ) + { + playerscore = int( winnerscale * ( gamelength / 60 * spm ) * totaltimeplayed / gamelength ); + player thread givematchbonus( "win", playerscore ); + player.matchbonus = playerscore; + continue; + } + + playerscore = int( loserscale * ( gamelength / 60 * spm ) * totaltimeplayed / gamelength ); + player thread givematchbonus( "loss", playerscore ); + player.matchbonus = playerscore; + } + } +} + +givematchbonus( scoretype, score ) +{ + self endon( "disconnect" ); + + level waittill( "give_match_bonus" ); + + if ( maps\mp\_scoreevents::shouldaddrankxp( self ) ) + self addrankxpvalue( scoretype, score ); + + self maps\mp\gametypes\_rank::endgameupdate(); +} + +doskillupdate( winner ) +{ + skillupdate( winner, level.teambased ); +} + +gethighestscoringplayer() +{ + players = level.players; + winner = undefined; + tie = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i].pointstowin ) ) + continue; + + if ( players[i].pointstowin < 1 ) + continue; + + if ( !isdefined( winner ) || players[i].pointstowin > winner.pointstowin ) + { + winner = players[i]; + tie = 0; + continue; + } + + if ( players[i].pointstowin == winner.pointstowin ) + tie = 1; + } + + if ( tie || !isdefined( winner ) ) + return undefined; + else + return winner; +} + +resetscorechain() +{ + self notify( "reset_score_chain" ); + self.scorechain = 0; + self.rankupdatetotal = 0; +} + +scorechaintimer() +{ + self notify( "score_chain_timer" ); + self endon( "reset_score_chain" ); + self endon( "score_chain_timer" ); + self endon( "death" ); + self endon( "disconnect" ); + wait 20; + self thread resetscorechain(); +} + +roundtonearestfive( score ) +{ + rounding = score % 5; + + if ( rounding <= 2 ) + return score - rounding; + else + return score + 5 - rounding; +} + +giveplayermomentumnotification( score, label, descvalue, countstowardrampage ) +{ + rampagebonus = 0; + + if ( isdefined( level.usingrampage ) && level.usingrampage ) + { + if ( countstowardrampage ) + { + if ( !isdefined( self.scorechain ) ) + self.scorechain = 0; + + self.scorechain++; + self thread scorechaintimer(); + } + + if ( isdefined( self.scorechain ) && self.scorechain >= 999 ) + rampagebonus = roundtonearestfive( int( score * level.rampagebonusscale + 0.5 ) ); + } + + if ( score != 0 ) + { + self luinotifyevent( &"score_event", 3, label, score, rampagebonus ); + self luinotifyeventtospectators( &"score_event", 3, label, score, rampagebonus ); + } + + score += rampagebonus; + + if ( score > 0 && self hasperk( "specialty_earnmoremomentum" ) ) + score = roundtonearestfive( int( score * getdvarfloat( "perk_killstreakMomentumMultiplier" ) + 0.5 ) ); + + if ( isalive( self ) ) + _setplayermomentum( self, self.pers["momentum"] + score ); +} + +resetplayermomentumonspawn() +{ + if ( isdefined( level.usingscorestreaks ) && level.usingscorestreaks ) + { + _setplayermomentum( self, 0 ); + self thread resetscorechain(); + } +} + +giveplayermomentum( event, player, victim, weapon, descvalue ) +{ + if ( isdefined( level.disablemomentum ) && level.disablemomentum == 1 ) + return; + + score = maps\mp\gametypes\_rank::getscoreinfovalue( event ); + assert( isdefined( score ) ); + label = maps\mp\gametypes\_rank::getscoreinfolabel( event ); + countstowardrampage = maps\mp\gametypes\_rank::doesscoreinfocounttowardrampage( event ); + + if ( event == "death" ) + _setplayermomentum( victim, victim.pers["momentum"] + score ); + + if ( score == 0 ) + return; + + if ( !isdefined( label ) ) + { +/# + assertmsg( event + " label undefined" ); +#/ + player giveplayermomentumnotification( score, "", descvalue, countstowardrampage ); + return; + } + + if ( level.gameended ) + return; + + player giveplayermomentumnotification( score, label, descvalue, countstowardrampage ); +} + +giveplayerscore( event, player, victim, weapon, descvalue ) +{ + scorediff = 0; + momentum = player.pers["momentum"]; + giveplayermomentum( event, player, victim, weapon, descvalue ); + newmomentum = player.pers["momentum"]; + + if ( level.overrideplayerscore ) + return 0; + + pixbeginevent( "level.onPlayerScore" ); + score = player.pers["score"]; + [[ level.onplayerscore ]]( event, player, victim ); + newscore = player.pers["score"]; + pixendevent(); + bbprint( "mpplayerscore", "spawnid %d gametime %d type %s player %s delta %d deltamomentum %d team %s", getplayerspawnid( player ), gettime(), event, player.name, newscore - score, newmomentum - momentum, player.team ); + player maps\mp\_bb::bbaddtostat( "score", newscore - score ); + + if ( score == newscore ) + return 0; + + pixbeginevent( "givePlayerScore" ); + recordplayerstats( player, "score", newscore ); + scorediff = newscore - score; + challengesenabled = !level.disablechallenges; + player addplayerstatwithgametype( "score", scorediff ); + + if ( challengesenabled ) + player addplayerstat( "CAREER_SCORE", scorediff ); + + if ( level.hardcoremode ) + { + player addplayerstat( "SCORE_HC", scorediff ); + + if ( challengesenabled ) + player addplayerstat( "CAREER_SCORE_HC", scorediff ); + } + + if ( level.multiteam ) + { + player addplayerstat( "SCORE_MULTITEAM", scorediff ); + + if ( challengesenabled ) + player addplayerstat( "CAREER_SCORE_MULTITEAM", scorediff ); + } + + if ( !level.disablestattracking && isdefined( player.pers["lastHighestScore"] ) && newscore > player.pers["lastHighestScore"] ) + player setdstat( "HighestStats", "highest_score", newscore ); + + player maps\mp\gametypes\_persistence::addrecentstat( 0, 0, "score", scorediff ); + pixendevent(); + return scorediff; +} + +default_onplayerscore( event, player, victim ) +{ + score = maps\mp\gametypes\_rank::getscoreinfovalue( event ); + assert( isdefined( score ) ); + + if ( level.wagermatch ) + player thread maps\mp\gametypes\_rank::updaterankscorehud( score ); + + _setplayerscore( player, player.pers["score"] + score ); +} + +_setplayerscore( player, score ) +{ + if ( score == player.pers["score"] ) + return; + + if ( !level.rankedmatch ) + player thread maps\mp\gametypes\_rank::updaterankscorehud( score - player.pers["score"] ); + + player.pers["score"] = score; + player.score = player.pers["score"]; + recordplayerstats( player, "score", player.pers["score"] ); + + if ( level.wagermatch ) + player thread maps\mp\gametypes\_wager::playerscored(); +} + +_getplayerscore( player ) +{ + return player.pers["score"]; +} + +playtop3sounds() +{ + wait 0.05; + maps\mp\gametypes\_globallogic::updateplacement(); + + for ( i = 0; i < level.placement["all"].size; i++ ) + { + prevscoreplace = level.placement["all"][i].prevscoreplace; + + if ( !isdefined( prevscoreplace ) ) + prevscoreplace = 1; + + currentscoreplace = i + 1; + + for ( j = i - 1; j >= 0; j-- ) + { + if ( level.placement["all"][i].score == level.placement["all"][j].score ) + currentscoreplace--; + } + + wasinthemoney = prevscoreplace <= 3; + isinthemoney = currentscoreplace <= 3; + level.placement["all"][i].prevscoreplace = currentscoreplace; + } +} + +setpointstowin( points ) +{ + self.pers["pointstowin"] = clamp( points, 0, 65000 ); + self.pointstowin = self.pers["pointstowin"]; + self thread maps\mp\gametypes\_globallogic::checkscorelimit(); + self thread maps\mp\gametypes\_globallogic::checkplayerscorelimitsoon(); + level thread playtop3sounds(); +} + +givepointstowin( points ) +{ + self setpointstowin( self.pers["pointstowin"] + points ); +} + +_setplayermomentum( player, momentum ) +{ + momentum = clamp( momentum, 0, 2000 ); + oldmomentum = player.pers["momentum"]; + + if ( momentum == oldmomentum ) + return; + + player maps\mp\_bb::bbaddtostat( "momentum", momentum - oldmomentum ); + + if ( momentum > oldmomentum ) + { + highestmomentumcost = 0; + numkillstreaks = 0; + + if ( isdefined( player.killstreak ) ) + numkillstreaks = player.killstreak.size; + + killstreaktypearray = []; + + for ( currentkillstreak = 0; currentkillstreak < numkillstreaks; currentkillstreak++ ) + { + killstreaktype = maps\mp\killstreaks\_killstreaks::getkillstreakbymenuname( player.killstreak[currentkillstreak] ); + + if ( isdefined( killstreaktype ) ) + { + momentumcost = level.killstreaks[killstreaktype].momentumcost; + + if ( momentumcost > highestmomentumcost ) + highestmomentumcost = momentumcost; + + killstreaktypearray[killstreaktypearray.size] = killstreaktype; + } + } + + _giveplayerkillstreakinternal( player, momentum, oldmomentum, killstreaktypearray ); + + while ( highestmomentumcost > 0 && momentum >= highestmomentumcost ) + { + oldmomentum = 0; + momentum -= highestmomentumcost; + _giveplayerkillstreakinternal( player, momentum, oldmomentum, killstreaktypearray ); + } + } + + player.pers["momentum"] = momentum; + player.momentum = player.pers["momentum"]; +} + +_giveplayerkillstreakinternal( player, momentum, oldmomentum, killstreaktypearray ) +{ + for ( killstreaktypeindex = 0; killstreaktypeindex < killstreaktypearray.size; killstreaktypeindex++ ) + { + killstreaktype = killstreaktypearray[killstreaktypeindex]; + momentumcost = level.killstreaks[killstreaktype].momentumcost; + + if ( momentumcost > oldmomentum && momentumcost <= momentum ) + { + weapon = maps\mp\killstreaks\_killstreaks::getkillstreakweapon( killstreaktype ); + + if ( isdefined( level.usingscorestreaks ) && level.usingscorestreaks ) + { + if ( maps\mp\killstreaks\_killstreak_weapons::isheldkillstreakweapon( weapon ) ) + { + if ( !isdefined( player.pers["held_killstreak_ammo_count"][weapon] ) ) + player.pers["held_killstreak_ammo_count"][weapon] = 0; + + if ( !isdefined( player.pers["killstreak_quantity"][weapon] ) ) + player.pers["killstreak_quantity"][weapon] = 0; + + currentweapon = player getcurrentweapon(); + + if ( currentweapon == weapon ) + { + if ( player.pers["killstreak_quantity"][weapon] < level.scorestreaksmaxstacking ) + player.pers["killstreak_quantity"][weapon]++; + } + else + { + player.pers["held_killstreak_clip_count"][weapon] = weaponclipsize( weapon ); + player.pers["held_killstreak_ammo_count"][weapon] = weaponmaxammo( weapon ); + player maps\mp\gametypes\_class::setweaponammooverall( weapon, player.pers["held_killstreak_ammo_count"][weapon] ); + } + } + else + { + player maps\mp\_challenges::earnedkillstreak(); + player maps\mp\killstreaks\_killstreaks::changekillstreakquantity( weapon, 1 ); + } + + player maps\mp\killstreaks\_killstreaks::addkillstreaktoqueue( level.killstreaks[killstreaktype].menuname, 0, killstreaktype ); + continue; + } + + player maps\mp\killstreaks\_killstreaks::addkillstreaktoqueue( level.killstreaks[killstreaktype].menuname, 0, killstreaktype ); + activeeventname = "reward_active"; + + if ( isdefined( weapon ) ) + { + neweventname = weapon + "_active"; + + if ( maps\mp\_scoreevents::isregisteredevent( neweventname ) ) + activeeventname = neweventname; + } + } + } +} + +setplayermomentumdebug() +{ +/# + setdvar( "sv_momentumPercent", 0.0 ); + + while ( true ) + { + wait 1; + momentumpercent = getdvarfloatdefault( "sv_momentumPercent", 0.0 ); + + if ( momentumpercent != 0.0 ) + { + player = gethostplayer(); + + if ( !isdefined( player ) ) + return; + + if ( isdefined( player.killstreak ) ) + _setplayermomentum( player, int( 2000 * momentumpercent / 100 ) ); + } + } +#/ +} + +giveteamscore( event, team, player, victim ) +{ + if ( level.overrideteamscore ) + return; + + pixbeginevent( "level.onTeamScore" ); + teamscore = game["teamScores"][team]; + [[ level.onteamscore ]]( event, team ); + pixendevent(); + newscore = game["teamScores"][team]; + bbprint( "mpteamscores", "gametime %d event %s team %d diff %d score %d", gettime(), event, team, newscore - teamscore, newscore ); + + if ( teamscore == newscore ) + return; + + updateteamscores( team ); + thread maps\mp\gametypes\_globallogic::checkscorelimit(); +} + +giveteamscoreforobjective_delaypostprocessing( team, score ) +{ + teamscore = game["teamScores"][team]; + onteamscore_incrementscore( score, team ); + newscore = game["teamScores"][team]; + bbprint( "mpteamobjscores", "gametime %d team %d diff %d score %d", gettime(), team, newscore - teamscore, newscore ); + + if ( teamscore == newscore ) + return; + + updateteamscores( team ); +} + +postprocessteamscores( teams ) +{ + foreach ( team in teams ) + onteamscore_postprocess( team ); + + thread maps\mp\gametypes\_globallogic::checkscorelimit(); +} + +giveteamscoreforobjective( team, score ) +{ + if ( !isdefined( level.teams[team] ) ) + return; + + teamscore = game["teamScores"][team]; + onteamscore( score, team ); + newscore = game["teamScores"][team]; + bbprint( "mpteamobjscores", "gametime %d team %d diff %d score %d", gettime(), team, newscore - teamscore, newscore ); + + if ( teamscore == newscore ) + return; + + updateteamscores( team ); + thread maps\mp\gametypes\_globallogic::checkscorelimit(); +} + +_setteamscore( team, teamscore ) +{ + if ( teamscore == game["teamScores"][team] ) + return; + + game["teamScores"][team] = clamp( teamscore, 0, 1000000 ); + updateteamscores( team ); + thread maps\mp\gametypes\_globallogic::checkscorelimit(); +} + +resetteamscores() +{ + if ( !isdefined( level.roundscorecarry ) || level.roundscorecarry == 0 || maps\mp\_utility::isfirstround() ) + { + foreach ( team in level.teams ) + game["teamScores"][team] = 0; + } + + maps\mp\gametypes\_globallogic_score::updateallteamscores(); +} + +resetallscores() +{ + resetteamscores(); + resetplayerscores(); +} + +resetplayerscores() +{ + players = level.players; + winner = undefined; + tie = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].pers["score"] ) ) + _setplayerscore( players[i], 0 ); + } +} + +updateteamscores( team ) +{ + setteamscore( team, game["teamScores"][team] ); + level thread maps\mp\gametypes\_globallogic::checkteamscorelimitsoon( team ); +} + +updateallteamscores() +{ + foreach ( team in level.teams ) + updateteamscores( team ); +} + +_getteamscore( team ) +{ + return game["teamScores"][team]; +} + +gethighestteamscoreteam() +{ + score = 0; + winning_teams = []; + + foreach ( team in level.teams ) + { + team_score = game["teamScores"][team]; + + if ( team_score > score ) + { + score = team_score; + winning_teams = []; + } + + if ( team_score == score ) + winning_teams[team] = team; + } + + return winning_teams; +} + +areteamarraysequal( teamsa, teamsb ) +{ + if ( teamsa.size != teamsb.size ) + return false; + + foreach ( team in teamsa ) + { + if ( !isdefined( teamsb[team] ) ) + return false; + } + + return true; +} + +onteamscore( score, team ) +{ + onteamscore_incrementscore( score, team ); + onteamscore_postprocess( team ); +} + +onteamscore_incrementscore( score, team ) +{ + game["teamScores"][team] += score; + + if ( game["teamScores"][team] < 0 ) + game["teamScores"][team] = 0; + + if ( level.scorelimit && game["teamScores"][team] > level.scorelimit ) + game["teamScores"][team] = level.scorelimit; +} + +onteamscore_postprocess( team ) +{ + if ( level.splitscreen ) + return; + + if ( level.scorelimit == 1 ) + return; + + iswinning = gethighestteamscoreteam(); + + if ( iswinning.size == 0 ) + return; + + if ( gettime() - level.laststatustime < 5000 ) + return; + + if ( areteamarraysequal( iswinning, level.waswinning ) ) + return; + + if ( iswinning.size == 1 ) + { + level.laststatustime = gettime(); + + foreach ( team in iswinning ) + { + if ( isdefined( level.waswinning[team] ) ) + { + if ( level.waswinning.size == 1 ) + continue; + } + + maps\mp\gametypes\_globallogic_audio::leaderdialog( "lead_taken", team, "status" ); + } + } + else + return; + + if ( level.waswinning.size == 1 ) + { + foreach ( team in level.waswinning ) + { + if ( isdefined( iswinning[team] ) ) + { + if ( iswinning.size == 1 ) + continue; + + if ( level.waswinning.size > 1 ) + continue; + } + + maps\mp\gametypes\_globallogic_audio::leaderdialog( "lead_lost", team, "status" ); + } + } + + level.waswinning = iswinning; +} + +default_onteamscore( event, team ) +{ + score = maps\mp\gametypes\_rank::getscoreinfovalue( event ); + assert( isdefined( score ) ); + onteamscore( score, team ); +} + +initpersstat( dataname, record_stats ) +{ + if ( !isdefined( self.pers[dataname] ) ) + self.pers[dataname] = 0; + + if ( !isdefined( record_stats ) || record_stats == 1 ) + recordplayerstats( self, dataname, int( self.pers[dataname] ) ); +} + +getpersstat( dataname ) +{ + return self.pers[dataname]; +} + +incpersstat( dataname, increment, record_stats, includegametype ) +{ + pixbeginevent( "incPersStat" ); + self.pers[dataname] += increment; + + if ( isdefined( includegametype ) && includegametype ) + self addplayerstatwithgametype( dataname, increment ); + else + self addplayerstat( dataname, increment ); + + if ( !isdefined( record_stats ) || record_stats == 1 ) + self thread threadedrecordplayerstats( dataname ); + + pixendevent(); +} + +threadedrecordplayerstats( dataname ) +{ + self endon( "disconnect" ); + waittillframeend; + recordplayerstats( self, dataname, self.pers[dataname] ); +} + +updatewinstats( winner ) +{ + winner addplayerstatwithgametype( "losses", -1 ); + winner addplayerstatwithgametype( "wins", 1 ); + + if ( level.hardcoremode ) + winner addplayerstat( "wins_HC", 1 ); + + if ( level.multiteam ) + winner addplayerstat( "wins_MULTITEAM", 1 ); + + winner updatestatratio( "wlratio", "wins", "losses" ); + restorewinstreaks( winner ); + winner addplayerstatwithgametype( "cur_win_streak", 1 ); + winner notify( "win" ); + cur_gamemode_win_streak = winner maps\mp\gametypes\_persistence::statgetwithgametype( "cur_win_streak" ); + gamemode_win_streak = winner maps\mp\gametypes\_persistence::statgetwithgametype( "win_streak" ); + cur_win_streak = winner getdstat( "playerstatslist", "cur_win_streak", "StatValue" ); + + if ( !level.disablestattracking && cur_win_streak > winner getdstat( "HighestStats", "win_streak" ) ) + winner setdstat( "HighestStats", "win_streak", cur_win_streak ); + + if ( cur_gamemode_win_streak > gamemode_win_streak ) + winner maps\mp\gametypes\_persistence::statsetwithgametype( "win_streak", cur_gamemode_win_streak ); + + if ( maps\mp\bots\_bot::is_bot_ranked_match() ) + { + combattrainingwins = winner getdstat( "combatTrainingWins" ); + winner setdstat( "combatTrainingWins", combattrainingwins + 1 ); + } +} + +updatelossstats( loser ) +{ + loser addplayerstatwithgametype( "losses", 1 ); + loser updatestatratio( "wlratio", "wins", "losses" ); + loser notify( "loss" ); +} + +updatetiestats( loser ) +{ + loser addplayerstatwithgametype( "losses", -1 ); + loser addplayerstatwithgametype( "ties", 1 ); + loser updatestatratio( "wlratio", "wins", "losses" ); + + if ( !level.disablestattracking ) + loser setdstat( "playerstatslist", "cur_win_streak", "StatValue", 0 ); + + loser notify( "tie" ); +} + +updatewinlossstats( winner ) +{ + if ( !waslastround() && !level.hostforcedend ) + return; + + players = level.players; + + if ( !isdefined( winner ) || isdefined( winner ) && !isplayer( winner ) && winner == "tie" ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i].pers["team"] ) ) + continue; + + if ( level.hostforcedend && players[i] ishost() ) + continue; + + updatetiestats( players[i] ); + } + } + else if ( isplayer( winner ) ) + { + if ( level.hostforcedend && winner ishost() ) + return; + + updatewinstats( winner ); + + if ( !level.teambased ) + { + placement = level.placement["all"]; + topthreeplayers = min( 3, placement.size ); + + for ( index = 1; index < topthreeplayers; index++ ) + { + nexttopplayer = placement[index]; + updatewinstats( nexttopplayer ); + } + } + } + else + { + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i].pers["team"] ) ) + continue; + + if ( level.hostforcedend && players[i] ishost() ) + continue; + + if ( winner == "tie" ) + { + updatetiestats( players[i] ); + continue; + } + + if ( players[i].pers["team"] == winner ) + { + updatewinstats( players[i] ); + continue; + } + + if ( !level.disablestattracking ) + players[i] setdstat( "playerstatslist", "cur_win_streak", "StatValue", 0 ); + } + } +} + +backupandclearwinstreaks() +{ + self.pers["winStreak"] = self getdstat( "playerstatslist", "cur_win_streak", "StatValue" ); + + if ( !level.disablestattracking ) + self setdstat( "playerstatslist", "cur_win_streak", "StatValue", 0 ); + + self.pers["winStreakForGametype"] = maps\mp\gametypes\_persistence::statgetwithgametype( "cur_win_streak" ); + self maps\mp\gametypes\_persistence::statsetwithgametype( "cur_win_streak", 0 ); +} + +restorewinstreaks( winner ) +{ + if ( !level.disablestattracking ) + winner setdstat( "playerstatslist", "cur_win_streak", "StatValue", winner.pers["winStreak"] ); + + winner maps\mp\gametypes\_persistence::statsetwithgametype( "cur_win_streak", winner.pers["winStreakForGametype"] ); +} + +inckillstreaktracker( sweapon ) +{ + self endon( "disconnect" ); + waittillframeend; + + if ( sweapon == "artillery_mp" ) + self.pers["artillery_kills"]++; + + if ( sweapon == "dog_bite_mp" ) + self.pers["dog_kills"]++; +} + +trackattackerkill( name, rank, xp, prestige, xuid ) +{ + self endon( "disconnect" ); + attacker = self; + waittillframeend; + pixbeginevent( "trackAttackerKill" ); + + if ( !isdefined( attacker.pers["killed_players"][name] ) ) + attacker.pers["killed_players"][name] = 0; + + if ( !isdefined( attacker.killedplayerscurrent[name] ) ) + attacker.killedplayerscurrent[name] = 0; + + if ( !isdefined( attacker.pers["nemesis_tracking"][name] ) ) + attacker.pers["nemesis_tracking"][name] = 0; + + attacker.pers["killed_players"][name]++; + attacker.killedplayerscurrent[name]++; + attacker.pers["nemesis_tracking"][name] += 1.0; + + if ( attacker.pers["nemesis_name"] == name ) + attacker maps\mp\_challenges::killednemesis(); + + if ( attacker.pers["nemesis_name"] == "" || attacker.pers["nemesis_tracking"][name] > attacker.pers["nemesis_tracking"][attacker.pers["nemesis_name"]] ) + { + attacker.pers["nemesis_name"] = name; + attacker.pers["nemesis_rank"] = rank; + attacker.pers["nemesis_rankIcon"] = prestige; + attacker.pers["nemesis_xp"] = xp; + attacker.pers["nemesis_xuid"] = xuid; + } + else if ( isdefined( attacker.pers["nemesis_name"] ) && attacker.pers["nemesis_name"] == name ) + { + attacker.pers["nemesis_rank"] = rank; + attacker.pers["nemesis_xp"] = xp; + } + + if ( !isdefined( attacker.lastkilledvictim ) || !isdefined( attacker.lastkilledvictimcount ) ) + { + attacker.lastkilledvictim = name; + attacker.lastkilledvictimcount = 0; + } + + if ( attacker.lastkilledvictim == name ) + { + attacker.lastkilledvictimcount++; + + if ( attacker.lastkilledvictimcount >= 5 ) + { + attacker.lastkilledvictimcount = 0; + attacker addplayerstat( "streaker", 1 ); + } + } + else + { + attacker.lastkilledvictim = name; + attacker.lastkilledvictimcount = 1; + } + + pixendevent(); +} + +trackattackeedeath( attackername, rank, xp, prestige, xuid ) +{ + self endon( "disconnect" ); + waittillframeend; + pixbeginevent( "trackAttackeeDeath" ); + + if ( !isdefined( self.pers["killed_by"][attackername] ) ) + self.pers["killed_by"][attackername] = 0; + + self.pers["killed_by"][attackername]++; + + if ( !isdefined( self.pers["nemesis_tracking"][attackername] ) ) + self.pers["nemesis_tracking"][attackername] = 0; + + self.pers["nemesis_tracking"][attackername] += 1.5; + + if ( self.pers["nemesis_name"] == "" || self.pers["nemesis_tracking"][attackername] > self.pers["nemesis_tracking"][self.pers["nemesis_name"]] ) + { + self.pers["nemesis_name"] = attackername; + self.pers["nemesis_rank"] = rank; + self.pers["nemesis_rankIcon"] = prestige; + self.pers["nemesis_xp"] = xp; + self.pers["nemesis_xuid"] = xuid; + } + else if ( isdefined( self.pers["nemesis_name"] ) && self.pers["nemesis_name"] == attackername ) + { + self.pers["nemesis_rank"] = rank; + self.pers["nemesis_xp"] = xp; + } + + if ( self.pers["nemesis_name"] == attackername && self.pers["nemesis_tracking"][attackername] >= 2 ) + self setclientuivisibilityflag( "killcam_nemesis", 1 ); + else + self setclientuivisibilityflag( "killcam_nemesis", 0 ); + + pixendevent(); +} + +default_iskillboosting() +{ + return 0; +} + +givekillstats( smeansofdeath, sweapon, evictim ) +{ + self endon( "disconnect" ); + waittillframeend; + + if ( level.rankedmatch && self [[ level.iskillboosting ]]() ) + { +/# + self iprintlnbold( "GAMETYPE DEBUG: NOT GIVING YOU OFFENSIVE CREDIT AS BOOSTING PREVENTION" ); +#/ + return; + } + + pixbeginevent( "giveKillStats" ); + self maps\mp\gametypes\_globallogic_score::incpersstat( "kills", 1, 1, 1 ); + self.kills = self maps\mp\gametypes\_globallogic_score::getpersstat( "kills" ); + self updatestatratio( "kdratio", "kills", "deaths" ); + attacker = self; + + if ( smeansofdeath == "MOD_HEAD_SHOT" && !maps\mp\killstreaks\_killstreaks::iskillstreakweapon( sweapon ) ) + { + attacker thread incpersstat( "headshots", 1, 1, 0 ); + attacker.headshots = attacker.pers["headshots"]; + + if ( isdefined( evictim ) ) + evictim recordkillmodifier( "headshot" ); + } + + pixendevent(); +} + +inctotalkills( team ) +{ + if ( level.teambased && isdefined( level.teams[team] ) ) + game["totalKillsTeam"][team]++; + + game["totalKills"]++; +} + +setinflictorstat( einflictor, eattacker, sweapon ) +{ + if ( !isdefined( eattacker ) ) + return; + + if ( !isdefined( einflictor ) ) + { + eattacker addweaponstat( sweapon, "hits", 1 ); + return; + } + + if ( !isdefined( einflictor.playeraffectedarray ) ) + einflictor.playeraffectedarray = []; + + foundnewplayer = 1; + + for ( i = 0; i < einflictor.playeraffectedarray.size; i++ ) + { + if ( einflictor.playeraffectedarray[i] == self ) + { + foundnewplayer = 0; + break; + } + } + + if ( foundnewplayer ) + { + einflictor.playeraffectedarray[einflictor.playeraffectedarray.size] = self; + + if ( sweapon == "concussion_grenade_mp" || sweapon == "tabun_gas_mp" ) + eattacker addweaponstat( sweapon, "used", 1 ); + + eattacker addweaponstat( sweapon, "hits", 1 ); + } +} + +processshieldassist( killedplayer ) +{ + self endon( "disconnect" ); + killedplayer endon( "disconnect" ); + wait 0.05; + maps\mp\gametypes\_globallogic_utils::waittillslowprocessallowed(); + + if ( !isdefined( level.teams[self.pers["team"]] ) ) + return; + + if ( self.pers["team"] == killedplayer.pers["team"] ) + return; + + if ( !level.teambased ) + return; + + self maps\mp\gametypes\_globallogic_score::incpersstat( "assists", 1, 1, 1 ); + self.assists = self maps\mp\gametypes\_globallogic_score::getpersstat( "assists" ); + maps\mp\_scoreevents::processscoreevent( "shield_assist", self, killedplayer, "riotshield_mp" ); +} + +processassist( killedplayer, damagedone, weapon ) +{ + self endon( "disconnect" ); + killedplayer endon( "disconnect" ); + wait 0.05; + maps\mp\gametypes\_globallogic_utils::waittillslowprocessallowed(); + + if ( !isdefined( level.teams[self.pers["team"]] ) ) + return; + + if ( self.pers["team"] == killedplayer.pers["team"] ) + return; + + if ( !level.teambased ) + return; + + assist_level = "assist"; + assist_level_value = int( ceil( damagedone / 25 ) ); + + if ( assist_level_value < 1 ) + assist_level_value = 1; + else if ( assist_level_value > 3 ) + assist_level_value = 3; + + assist_level = assist_level + "_" + assist_level_value * 25; + self maps\mp\gametypes\_globallogic_score::incpersstat( "assists", 1, 1, 1 ); + self.assists = self maps\mp\gametypes\_globallogic_score::getpersstat( "assists" ); + + if ( isdefined( weapon ) ) + self addweaponstat( weapon, "assists", 1 ); + + switch ( weapon ) + { + case "concussion_grenade_mp": + assist_level = "assist_concussion"; + break; + case "flash_grenade_mp": + assist_level = "assist_flash"; + break; + case "emp_grenade_mp": + assist_level = "assist_emp"; + break; + case "proximity_grenade_mp": + case "proximity_grenade_aoe_mp": + assist_level = "assist_proximity"; + break; + } + + self maps\mp\_challenges::assisted(); + maps\mp\_scoreevents::processscoreevent( assist_level, self, killedplayer, weapon ); +} + +processkillstreakassists( attacker, inflictor, weaponname ) +{ + if ( !isdefined( attacker ) || !isdefined( attacker.team ) || self isenemyplayer( attacker ) == 0 ) + return; + + if ( self == attacker || attacker.classname == "trigger_hurt" || attacker.classname == "worldspawn" ) + return; + + enemycuavactive = 0; + + if ( attacker hasperk( "specialty_immunecounteruav" ) == 0 ) + { + foreach ( team in level.teams ) + { + if ( team == attacker.team ) + continue; + + if ( level.activecounteruavs[team] > 0 ) + enemycuavactive = 1; + } + } + + foreach ( player in level.players ) + { + if ( player.team != attacker.team ) + continue; + + if ( player.team == "spectator" ) + continue; + + if ( player == attacker ) + continue; + + if ( player.sessionstate != "playing" ) + continue; + + assert( isdefined( player.activecounteruavs ) ); + assert( isdefined( player.activeuavs ) ); + assert( isdefined( player.activesatellites ) ); + + if ( player.activecounteruavs > 0 && !maps\mp\killstreaks\_killstreaks::iskillstreakweapon( weaponname ) ) + { + scoregiven = thread maps\mp\_scoreevents::processscoreevent( "counter_uav_assist", player ); + + if ( isdefined( scoregiven ) ) + player maps\mp\_challenges::earnedcuavassistscore( scoregiven ); + } + + if ( enemycuavactive == 0 ) + { + if ( player.activeuavs > 0 && !maps\mp\killstreaks\_killstreaks::iskillstreakweapon( weaponname ) ) + { + scoregiven = thread maps\mp\_scoreevents::processscoreevent( "uav_assist", player ); + + if ( isdefined( scoregiven ) ) + player maps\mp\_challenges::earneduavassistscore( scoregiven ); + } + + if ( player.activesatellites > 0 && !maps\mp\killstreaks\_killstreaks::iskillstreakweapon( weaponname ) ) + { + scoregiven = thread maps\mp\_scoreevents::processscoreevent( "satellite_assist", player ); + + if ( isdefined( scoregiven ) ) + player maps\mp\_challenges::earnedsatelliteassistscore( scoregiven ); + } + } + } + + foreach ( assistteam in level.teams ) + { + if ( assistteam == self.team ) + continue; + + if ( attacker.team != assistteam ) + continue; + + activeempowner = level.empowners[assistteam]; + + if ( isdefined( activeempowner ) && isplayer( activeempowner ) ) + { + if ( isdefined( attacker ) && activeempowner != attacker ) + { + if ( isdefined( activeempowner.emptime ) && activeempowner.spawntime < activeempowner.emptime ) + { + scoregiven = maps\mp\_scoreevents::processscoreevent( "emp_assist", activeempowner ); + + if ( isdefined( scoregiven ) ) + activeempowner maps\mp\_challenges::earnedempassistscore( scoregiven ); + } + } + } + } +} + +xpratethread() +{ +/# + self endon( "death" ); + self endon( "disconnect" ); + level endon( "game_ended" ); + + while ( level.inprematchperiod ) + wait 0.05; + + for (;;) + { + wait 5.0; + + if ( isdefined( level.teams[level.players[0].pers["team"]] ) ) + self maps\mp\gametypes\_rank::giverankxp( "kill", int( min( getdvarint( _hash_F8D00F60 ), 50 ) ) ); + } +#/ +} diff --git a/MP/Core/maps/mp/gametypes/_globallogic_spawn.gsc b/MP/Core/maps/mp/gametypes/_globallogic_spawn.gsc new file mode 100644 index 0000000..1624dc7 --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_globallogic_spawn.gsc @@ -0,0 +1,884 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_globallogic_player; +#include maps\mp\gametypes\_spawning; +#include maps\mp\gametypes\_hud_message; +#include maps\mp\gametypes\_persistence; +#include maps\mp\gametypes\_globallogic_audio; +#include maps\mp\gametypes\_globallogic_score; +#include maps\mp\gametypes\_globallogic_utils; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_class; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_globallogic_ui; +#include maps\mp\bots\_bot; +#include maps\mp\killstreaks\_killstreaks; +#include maps\mp\_vehicles; +#include maps\mp\gametypes\_spectating; +#include maps\mp\gametypes\_hostmigration; +#include maps\mp\gametypes\_globallogic_defaults; +#include maps\mp\gametypes\_spawnlogic; + +timeuntilspawn( includeteamkilldelay ) +{ + if ( level.ingraceperiod && !self.hasspawned ) + return 0; + + respawndelay = 0; + + if ( self.hasspawned ) + { + result = self [[ level.onrespawndelay ]](); + + if ( isdefined( result ) ) + respawndelay = result; + else + respawndelay = level.playerrespawndelay; + + if ( self.suicide && level.suicidespawndelay > 0 ) + respawndelay += level.suicidespawndelay; + + if ( self.teamkilled && level.teamkilledspawndelay > 0 ) + respawndelay += level.teamkilledspawndelay; + + if ( includeteamkilldelay && is_true( self.teamkillpunish ) ) + respawndelay += maps\mp\gametypes\_globallogic_player::teamkilldelay(); + } + + wavebased = level.waverespawndelay > 0; + + if ( wavebased ) + return self timeuntilwavespawn( respawndelay ); + + return respawndelay; +} + +allteamshaveexisted() +{ + foreach ( team in level.teams ) + { + if ( !level.everexisted[team] ) + return false; + } + + return true; +} + +mayspawn() +{ + if ( isdefined( level.mayspawn ) && !self [[ level.mayspawn ]]() ) + return false; + + if ( level.inovertime ) + return false; + + if ( level.playerqueuedrespawn && !isdefined( self.allowqueuespawn ) && !level.ingraceperiod && !level.usestartspawns ) + return false; + + if ( level.numlives ) + { + if ( level.teambased ) + gamehasstarted = allteamshaveexisted(); + else + gamehasstarted = level.maxplayercount > 1 || !isoneround() && !isfirstround(); + + if ( !self.pers["lives"] ) + return false; + else if ( gamehasstarted ) + { + if ( !level.ingraceperiod && !self.hasspawned && !level.wagermatch ) + return false; + } + } + + return true; +} + +timeuntilwavespawn( minimumwait ) +{ + earliestspawntime = gettime() + minimumwait * 1000; + lastwavetime = level.lastwave[self.pers["team"]]; + wavedelay = level.wavedelay[self.pers["team"]] * 1000; + + if ( wavedelay == 0 ) + return 0; + + numwavespassedearliestspawntime = ( earliestspawntime - lastwavetime ) / wavedelay; + numwaves = ceil( numwavespassedearliestspawntime ); + timeofspawn = lastwavetime + numwaves * wavedelay; + + if ( isdefined( self.wavespawnindex ) ) + timeofspawn += 50 * self.wavespawnindex; + + return ( timeofspawn - gettime() ) / 1000; +} + +stoppoisoningandflareonspawn() +{ + self endon( "disconnect" ); + self.inpoisonarea = 0; + self.inburnarea = 0; + self.inflarevisionarea = 0; + self.ingroundnapalm = 0; +} + +spawnplayerprediction() +{ + self endon( "disconnect" ); + self endon( "end_respawn" ); + self endon( "game_ended" ); + self endon( "joined_spectators" ); + self endon( "spawned" ); + + while ( true ) + { + wait 0.5; + + if ( isdefined( level.onspawnplayerunified ) && getdvarint( _hash_CF6EEB8B ) == 0 ) + maps\mp\gametypes\_spawning::onspawnplayer_unified( 1 ); + else + self [[ level.onspawnplayer ]]( 1 ); + } +} + +doinitialspawnmessaging() +{ + self endon( "disconnect" ); + + if ( isdefined( level.disableprematchmessages ) && level.disableprematchmessages ) + return; + + team = self.pers["team"]; + thread maps\mp\gametypes\_hud_message::showinitialfactionpopup( team ); + + if ( isdefined( game["dialog"]["gametype"] ) && ( !level.splitscreen || self == level.players[0] ) ) + { + if ( !isdefined( level.infinalfight ) || !level.infinalfight ) + { + if ( level.hardcoremode && maps\mp\gametypes\_persistence::ispartygamemode() == 0 ) + self maps\mp\gametypes\_globallogic_audio::leaderdialogonplayer( "gametype_hardcore" ); + else + self maps\mp\gametypes\_globallogic_audio::leaderdialogonplayer( "gametype" ); + } + } + + while ( level.inprematchperiod ) + wait 0.05; + + hintmessage = getobjectivehinttext( team ); + + if ( isdefined( hintmessage ) ) + self thread maps\mp\gametypes\_hud_message::hintmessage( hintmessage ); + + if ( team == game["attackers"] ) + self maps\mp\gametypes\_globallogic_audio::leaderdialogonplayer( "offense_obj", "introboost" ); + else + self maps\mp\gametypes\_globallogic_audio::leaderdialogonplayer( "defense_obj", "introboost" ); +} + +spawnplayer() +{ + pixbeginevent( "spawnPlayer_preUTS" ); + self endon( "disconnect" ); + self endon( "joined_spectators" ); + self notify( "spawned" ); + level notify( "player_spawned" ); + self notify( "end_respawn" ); + self setspawnvariables(); + + if ( !self.hasspawned ) + { + self.underscorechance = 70; + self thread maps\mp\gametypes\_globallogic_audio::sndstartmusicsystem(); + } + + if ( isdefined( self.pers["resetMomentumOnSpawn"] ) && self.pers["resetMomentumOnSpawn"] ) + { + self maps\mp\gametypes\_globallogic_score::resetplayermomentumonspawn(); + self.pers["resetMomentumOnSpawn"] = undefined; + } + + if ( level.teambased ) + self.sessionteam = self.team; + else + { + self.sessionteam = "none"; + self.ffateam = self.team; + } + + hadspawned = self.hasspawned; + self.sessionstate = "playing"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.statusicon = ""; + self.damagedplayers = []; + + if ( getdvarint( "scr_csmode" ) > 0 ) + self.maxhealth = getdvarint( "scr_csmode" ); + else + self.maxhealth = level.playermaxhealth; + + self.health = self.maxhealth; + self.friendlydamage = undefined; + self.hasspawned = 1; + self.spawntime = gettime(); + self.afk = 0; + + if ( self.pers["lives"] && ( !isdefined( level.takelivesondeath ) || level.takelivesondeath == 0 ) ) + { + self.pers["lives"]--; + + if ( self.pers["lives"] == 0 ) + { + level notify( "player_eliminated" ); + self notify( "player_eliminated" ); + } + } + + self.laststand = undefined; + self.revivingteammate = 0; + self.burning = undefined; + self.nextkillstreakfree = undefined; + self.activeuavs = 0; + self.activecounteruavs = 0; + self.activesatellites = 0; + self.deathmachinekills = 0; + self.disabledweapon = 0; + self resetusability(); + self maps\mp\gametypes\_globallogic_player::resetattackerlist(); + self.diedonvehicle = undefined; + + if ( !self.wasaliveatmatchstart ) + { + if ( level.ingraceperiod || maps\mp\gametypes\_globallogic_utils::gettimepassed() < 20000 ) + self.wasaliveatmatchstart = 1; + } + + self setdepthoffield( 0, 0, 512, 512, 4, 0 ); + self resetfov(); + pixbeginevent( "onSpawnPlayer" ); + + if ( isdefined( level.onspawnplayerunified ) && getdvarint( _hash_CF6EEB8B ) == 0 ) + self [[ level.onspawnplayerunified ]](); + else + self [[ level.onspawnplayer ]]( 0 ); + + if ( isdefined( level.playerspawnedcb ) ) + self [[ level.playerspawnedcb ]](); + + pixendevent(); + pixendevent(); + level thread maps\mp\gametypes\_globallogic::updateteamstatus(); + pixbeginevent( "spawnPlayer_postUTS" ); + self thread stoppoisoningandflareonspawn(); + self.sensorgrenadedata = undefined; + self stopburning(); + assert( maps\mp\gametypes\_globallogic_utils::isvalidclass( self.class ) ); + + if ( sessionmodeiszombiesgame() ) + self maps\mp\gametypes\_class::giveloadoutlevelspecific( self.team, self.class ); + else + { + self maps\mp\gametypes\_class::setclass( self.class ); + self maps\mp\gametypes\_class::giveloadout( self.team, self.class ); + } + + if ( level.inprematchperiod ) + { + self freeze_player_controls( 1 ); + team = self.pers["team"]; + + if ( isdefined( self.pers["music"].spawn ) && self.pers["music"].spawn == 0 ) + { + if ( level.wagermatch ) + music = "SPAWN_WAGER"; + else + music = game["music"]["spawn_" + team]; + + self thread maps\mp\gametypes\_globallogic_audio::set_music_on_player( music, 0, 0 ); + self.pers["music"].spawn = 1; + } + + if ( level.splitscreen ) + { + if ( isdefined( level.playedstartingmusic ) ) + music = undefined; + else + level.playedstartingmusic = 1; + } + + self thread doinitialspawnmessaging(); + } + else + { + self freeze_player_controls( 0 ); + self enableweapons(); + + if ( !hadspawned && game["state"] == "playing" ) + { + pixbeginevent( "sound" ); + team = self.team; + + if ( isdefined( self.pers["music"].spawn ) && self.pers["music"].spawn == 0 ) + { + music = game["music"]["spawn_short" + team]; + self thread maps\mp\gametypes\_globallogic_audio::set_music_on_player( music, 0, 0 ); + self.pers["music"].spawn = 1; + } + + if ( level.splitscreen ) + { + if ( isdefined( level.playedstartingmusic ) ) + music = undefined; + else + level.playedstartingmusic = 1; + } + + self thread doinitialspawnmessaging(); + pixendevent(); + } + } + + if ( getdvar( "scr_showperksonspawn" ) == "" ) + setdvar( "scr_showperksonspawn", "0" ); + + if ( level.hardcoremode ) + setdvar( "scr_showperksonspawn", "0" ); + + if ( getdvarint( "scr_showperksonspawn" ) == 1 && game["state"] != "postgame" ) + { + pixbeginevent( "showperksonspawn" ); + + if ( level.perksenabled == 1 ) + self maps\mp\gametypes\_hud_util::showperks(); + + self thread maps\mp\gametypes\_globallogic_ui::hideloadoutaftertime( 3.0 ); + self thread maps\mp\gametypes\_globallogic_ui::hideloadoutondeath(); + pixendevent(); + } + + if ( isdefined( self.pers["momentum"] ) ) + self.momentum = self.pers["momentum"]; + + pixendevent(); + waittillframeend; + self notify( "spawned_player" ); + self logstring( "S " + self.origin[0] + " " + self.origin[1] + " " + self.origin[2] ); + setdvar( "scr_selecting_location", "" ); + + if ( self is_bot() ) + { + pixbeginevent( "bot" ); + self thread maps\mp\bots\_bot::bot_spawn(); + pixendevent(); + } + + if ( !sessionmodeiszombiesgame() ) + { + self thread maps\mp\killstreaks\_killstreaks::killstreakwaiter(); + self thread maps\mp\_vehicles::vehicledeathwaiter(); + self thread maps\mp\_vehicles::turretdeathwaiter(); + } +/# + if ( getdvarint( _hash_F8D00F60 ) > 0 ) + self thread maps\mp\gametypes\_globallogic_score::xpratethread(); +#/ + if ( game["state"] == "postgame" ) + { + assert( !level.intermission ); + self maps\mp\gametypes\_globallogic_player::freezeplayerforroundend(); + } +} + +spawnspectator( origin, angles ) +{ + self notify( "spawned" ); + self notify( "end_respawn" ); + in_spawnspectator( origin, angles ); +} + +respawn_asspectator( origin, angles ) +{ + in_spawnspectator( origin, angles ); +} + +in_spawnspectator( origin, angles ) +{ + pixmarker( "BEGIN: in_spawnSpectator" ); + self setspawnvariables(); + + if ( self.pers["team"] == "spectator" ) + self clearlowermessage(); + + self.sessionstate = "spectator"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + + if ( self.pers["team"] == "spectator" ) + self.statusicon = ""; + else + self.statusicon = "hud_status_dead"; + + maps\mp\gametypes\_spectating::setspectatepermissionsformachine(); + [[ level.onspawnspectator ]]( origin, angles ); + + if ( level.teambased && !level.splitscreen ) + self thread spectatorthirdpersonness(); + + level thread maps\mp\gametypes\_globallogic::updateteamstatus(); + pixmarker( "END: in_spawnSpectator" ); +} + +spectatorthirdpersonness() +{ + self endon( "disconnect" ); + self endon( "spawned" ); + self notify( "spectator_thirdperson_thread" ); + self endon( "spectator_thirdperson_thread" ); + self.spectatingthirdperson = 0; +} + +forcespawn( time ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "spawned" ); + + if ( !isdefined( time ) ) + time = 60; + + wait( time ); + + if ( self.hasspawned ) + return; + + if ( self.pers["team"] == "spectator" ) + return; + + if ( !maps\mp\gametypes\_globallogic_utils::isvalidclass( self.pers["class"] ) ) + { + self.pers["class"] = "CLASS_CUSTOM1"; + self.class = self.pers["class"]; + } + + self maps\mp\gametypes\_globallogic_ui::closemenus(); + self thread [[ level.spawnclient ]](); +} + +kickifdontspawn() +{ +/# + if ( getdvarint( "scr_hostmigrationtest" ) == 1 ) + return; +#/ + if ( self ishost() ) + return; + + self kickifidontspawninternal(); +} + +kickifidontspawninternal() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "spawned" ); + waittime = 90; + + if ( getdvar( _hash_4257CF5C ) != "" ) + waittime = getdvarfloat( _hash_4257CF5C ); + + mintime = 45; + + if ( getdvar( _hash_DF057E0 ) != "" ) + mintime = getdvarfloat( _hash_DF057E0 ); + + starttime = gettime(); + kickwait( waittime ); + timepassed = ( gettime() - starttime ) / 1000; + + if ( timepassed < waittime - 0.1 && timepassed < mintime ) + return; + + if ( self.hasspawned ) + return; + + if ( sessionmodeisprivate() ) + return; + + if ( self.pers["team"] == "spectator" ) + return; + + if ( !mayspawn() ) + return; + + maps\mp\gametypes\_globallogic::gamehistoryplayerkicked(); + kick( self getentitynumber() ); +} + +kickwait( waittime ) +{ + level endon( "game_ended" ); + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( waittime ); +} + +spawninterroundintermission() +{ + self notify( "spawned" ); + self notify( "end_respawn" ); + self setspawnvariables(); + self clearlowermessage(); + self freeze_player_controls( 0 ); + self.sessionstate = "spectator"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + self maps\mp\gametypes\_globallogic_defaults::default_onspawnintermission(); + self setorigin( self.origin ); + self setplayerangles( self.angles ); + self setdepthoffield( 0, 128, 512, 4000, 6, 1.8 ); +} + +spawnintermission( usedefaultcallback ) +{ + self notify( "spawned" ); + self notify( "end_respawn" ); + self endon( "disconnect" ); + self setspawnvariables(); + self clearlowermessage(); + self freeze_player_controls( 0 ); + self.sessionstate = "intermission"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + + if ( isdefined( usedefaultcallback ) && usedefaultcallback ) + maps\mp\gametypes\_globallogic_defaults::default_onspawnintermission(); + else + [[ level.onspawnintermission ]](); + + self setdepthoffield( 0, 128, 512, 4000, 6, 1.8 ); +} + +spawnqueuedclientonteam( team ) +{ + player_to_spawn = undefined; + + for ( i = 0; i < level.deadplayers[team].size; i++ ) + { + player = level.deadplayers[team][i]; + + if ( player.waitingtospawn ) + continue; + + player_to_spawn = player; + break; + } + + if ( isdefined( player_to_spawn ) ) + { + player_to_spawn.allowqueuespawn = 1; + player_to_spawn maps\mp\gametypes\_globallogic_ui::closemenus(); + player_to_spawn thread [[ level.spawnclient ]](); + } +} + +spawnqueuedclient( dead_player_team, killer ) +{ + if ( !level.playerqueuedrespawn ) + return; + + maps\mp\gametypes\_globallogic_utils::waittillslowprocessallowed(); + spawn_team = undefined; + + if ( isdefined( killer ) && isdefined( killer.team ) && isdefined( level.teams[killer.team] ) ) + spawn_team = killer.team; + + if ( isdefined( spawn_team ) ) + { + spawnqueuedclientonteam( spawn_team ); + return; + } + + foreach ( team in level.teams ) + { + if ( team == dead_player_team ) + continue; + + spawnqueuedclientonteam( team ); + } +} + +allteamsnearscorelimit() +{ + if ( !level.teambased ) + return false; + + if ( level.scorelimit <= 1 ) + return false; + + foreach ( team in level.teams ) + { + if ( !( game["teamScores"][team] >= level.scorelimit - 1 ) ) + return false; + } + + return true; +} + +shouldshowrespawnmessage() +{ + if ( waslastround() ) + return false; + + if ( isoneround() ) + return false; + + if ( isdefined( level.livesdonotreset ) && level.livesdonotreset ) + return false; + + if ( allteamsnearscorelimit() ) + return false; + + return true; +} + +default_spawnmessage() +{ + setlowermessage( game["strings"]["spawn_next_round"] ); + self thread maps\mp\gametypes\_globallogic_ui::removespawnmessageshortly( 3 ); +} + +showspawnmessage() +{ + if ( shouldshowrespawnmessage() ) + self thread [[ level.spawnmessage ]](); +} + +spawnclient( timealreadypassed ) +{ + pixbeginevent( "spawnClient" ); + assert( isdefined( self.team ) ); + assert( maps\mp\gametypes\_globallogic_utils::isvalidclass( self.class ) ); + + if ( !self mayspawn() ) + { + currentorigin = self.origin; + currentangles = self.angles; + self showspawnmessage(); + self thread [[ level.spawnspectator ]]( currentorigin + vectorscale( ( 0, 0, 1 ), 60.0 ), currentangles ); + pixendevent(); + return; + } + + if ( self.waitingtospawn ) + { + pixendevent(); + return; + } + + self.waitingtospawn = 1; + self.allowqueuespawn = undefined; + self waitandspawnclient( timealreadypassed ); + + if ( isdefined( self ) ) + self.waitingtospawn = 0; + + pixendevent(); +} + +waitandspawnclient( timealreadypassed ) +{ + self endon( "disconnect" ); + self endon( "end_respawn" ); + level endon( "game_ended" ); + + if ( !isdefined( timealreadypassed ) ) + timealreadypassed = 0; + + spawnedasspectator = 0; + + if ( is_true( self.teamkillpunish ) ) + { + teamkilldelay = maps\mp\gametypes\_globallogic_player::teamkilldelay(); + + if ( teamkilldelay > timealreadypassed ) + { + teamkilldelay -= timealreadypassed; + timealreadypassed = 0; + } + else + { + timealreadypassed -= teamkilldelay; + teamkilldelay = 0; + } + + if ( teamkilldelay > 0 ) + { + setlowermessage( &"MP_FRIENDLY_FIRE_WILL_NOT", teamkilldelay ); + self thread respawn_asspectator( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), self.angles ); + spawnedasspectator = 1; + wait( teamkilldelay ); + } + + self.teamkillpunish = 0; + } + + if ( !isdefined( self.wavespawnindex ) && isdefined( level.waveplayerspawnindex[self.team] ) ) + { + self.wavespawnindex = level.waveplayerspawnindex[self.team]; + level.waveplayerspawnindex[self.team]++; + } + + timeuntilspawn = timeuntilspawn( 0 ); + + if ( timeuntilspawn > timealreadypassed ) + { + timeuntilspawn -= timealreadypassed; + timealreadypassed = 0; + } + else + { + timealreadypassed -= timeuntilspawn; + timeuntilspawn = 0; + } + + if ( timeuntilspawn > 0 ) + { + if ( level.playerqueuedrespawn ) + setlowermessage( game["strings"]["you_will_spawn"], timeuntilspawn ); + else if ( self issplitscreen() ) + setlowermessage( game["strings"]["waiting_to_spawn_ss"], timeuntilspawn, 1 ); + else + setlowermessage( game["strings"]["waiting_to_spawn"], timeuntilspawn ); + + if ( !spawnedasspectator ) + { + spawnorigin = self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ); + spawnangles = self.angles; + + if ( isdefined( level.useintermissionpointsonwavespawn ) && [[ level.useintermissionpointsonwavespawn ]]() == 1 ) + { + spawnpoint = maps\mp\gametypes\_spawnlogic::getrandomintermissionpoint(); + + if ( isdefined( spawnpoint ) ) + { + spawnorigin = spawnpoint.origin; + spawnangles = spawnpoint.angles; + } + } + + self thread respawn_asspectator( spawnorigin, spawnangles ); + } + + spawnedasspectator = 1; + self maps\mp\gametypes\_globallogic_utils::waitfortimeornotify( timeuntilspawn, "force_spawn" ); + self notify( "stop_wait_safe_spawn_button" ); + } + + if ( isdefined( level.gametypespawnwaiter ) ) + { + if ( !spawnedasspectator ) + self thread respawn_asspectator( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), self.angles ); + + spawnedasspectator = 1; + + if ( !self [[ level.gametypespawnwaiter ]]() ) + { + self.waitingtospawn = 0; + self clearlowermessage(); + self.wavespawnindex = undefined; + self.respawntimerstarttime = undefined; + return; + } + } + + wavebased = level.waverespawndelay > 0; + + if ( !level.playerforcerespawn && self.hasspawned && !wavebased && !self.wantsafespawn && !level.playerqueuedrespawn ) + { + setlowermessage( game["strings"]["press_to_spawn"] ); + + if ( !spawnedasspectator ) + self thread respawn_asspectator( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), self.angles ); + + spawnedasspectator = 1; + self waitrespawnorsafespawnbutton(); + } + + self.waitingtospawn = 0; + self clearlowermessage(); + self.wavespawnindex = undefined; + self.respawntimerstarttime = undefined; + self thread [[ level.spawnplayer ]](); +} + +waitrespawnorsafespawnbutton() +{ + self endon( "disconnect" ); + self endon( "end_respawn" ); + + while ( true ) + { + if ( self usebuttonpressed() ) + break; + + wait 0.05; + } +} + +waitinspawnqueue() +{ + self endon( "disconnect" ); + self endon( "end_respawn" ); + + if ( !level.ingraceperiod && !level.usestartspawns ) + { + currentorigin = self.origin; + currentangles = self.angles; + self thread [[ level.spawnspectator ]]( currentorigin + vectorscale( ( 0, 0, 1 ), 60.0 ), currentangles ); + + self waittill( "queue_respawn" ); + } +} + +setthirdperson( value ) +{ + if ( !level.console ) + return; + + if ( !isdefined( self.spectatingthirdperson ) || value != self.spectatingthirdperson ) + { + self.spectatingthirdperson = value; + + if ( value ) + { + self setclientthirdperson( 1 ); + self setdepthoffield( 0, 128, 512, 4000, 6, 1.8 ); + } + else + { + self setclientthirdperson( 0 ); + self setdepthoffield( 0, 0, 512, 4000, 4, 0 ); + } + + self resetfov(); + } +} + +setspawnvariables() +{ + resettimeout(); + self stopshellshock(); + self stoprumble( "damage_heavy" ); +} diff --git a/MP/Core/maps/mp/gametypes/_globallogic_ui.gsc b/MP/Core/maps/mp/gametypes/_globallogic_ui.gsc new file mode 100644 index 0000000..66b1ddd --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_globallogic_ui.gsc @@ -0,0 +1,634 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\killstreaks\_killstreaks; +#include maps\mp\bots\_bot; +#include maps\mp\teams\_teams; +#include maps\mp\gametypes\_pregame; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_spectating; +#include maps\mp\gametypes\_globallogic_player; +#include maps\mp\gametypes\_class; + +init() +{ + precachestring( &"MP_HALFTIME" ); + precachestring( &"MP_OVERTIME" ); + precachestring( &"MP_ROUNDEND" ); + precachestring( &"MP_INTERMISSION" ); + precachestring( &"MP_SWITCHING_SIDES_CAPS" ); + precachestring( &"MP_FRIENDLY_FIRE_WILL_NOT" ); + precachestring( &"MP_RAMPAGE" ); + precachestring( &"medal_received" ); + precachestring( &"killstreak_received" ); + precachestring( &"prox_grenade_notify" ); + precachestring( &"player_callout" ); + precachestring( &"score_event" ); + precachestring( &"rank_up" ); + precachestring( &"gun_level_complete" ); + precachestring( &"challenge_complete" ); + + if ( level.splitscreen ) + precachestring( &"MP_ENDED_GAME" ); + else + precachestring( &"MP_HOST_ENDED_GAME" ); +} + +setupcallbacks() +{ + level.autoassign = ::menuautoassign; + level.spectator = ::menuspectator; + level.class = ::menuclass; + level.teammenu = ::menuteam; +} + +hideloadoutaftertime( delay ) +{ + self endon( "disconnect" ); + self endon( "perks_hidden" ); + wait( delay ); + self thread hideallperks( 0.4 ); + self notify( "perks_hidden" ); +} + +hideloadoutondeath() +{ + self endon( "disconnect" ); + self endon( "perks_hidden" ); + + self waittill( "death" ); + + self hideallperks(); + self notify( "perks_hidden" ); +} + +hideloadoutonkill() +{ + self endon( "disconnect" ); + self endon( "death" ); + self endon( "perks_hidden" ); + + self waittill( "killed_player" ); + + self hideallperks(); + self notify( "perks_hidden" ); +} + +freegameplayhudelems() +{ + if ( isdefined( self.perkicon ) ) + { + for ( numspecialties = 0; numspecialties < level.maxspecialties; numspecialties++ ) + { + if ( isdefined( self.perkicon[numspecialties] ) ) + { + self.perkicon[numspecialties] destroyelem(); + self.perkname[numspecialties] destroyelem(); + } + } + } + + if ( isdefined( self.perkhudelem ) ) + self.perkhudelem destroyelem(); + + if ( isdefined( self.killstreakicon ) ) + { + if ( isdefined( self.killstreakicon[0] ) ) + self.killstreakicon[0] destroyelem(); + + if ( isdefined( self.killstreakicon[1] ) ) + self.killstreakicon[1] destroyelem(); + + if ( isdefined( self.killstreakicon[2] ) ) + self.killstreakicon[2] destroyelem(); + + if ( isdefined( self.killstreakicon[3] ) ) + self.killstreakicon[3] destroyelem(); + + if ( isdefined( self.killstreakicon[4] ) ) + self.killstreakicon[4] destroyelem(); + } + + self notify( "perks_hidden" ); + + if ( isdefined( self.lowermessage ) ) + self.lowermessage destroyelem(); + + if ( isdefined( self.lowertimer ) ) + self.lowertimer destroyelem(); + + if ( isdefined( self.proxbar ) ) + self.proxbar destroyelem(); + + if ( isdefined( self.proxbartext ) ) + self.proxbartext destroyelem(); + + if ( isdefined( self.carryicon ) ) + self.carryicon destroyelem(); + + maps\mp\killstreaks\_killstreaks::destroykillstreaktimers(); +} + +teamplayercountsequal( playercounts ) +{ + count = undefined; + + foreach ( team in level.teams ) + { + if ( !isdefined( count ) ) + { + count = playercounts[team]; + continue; + } + + if ( count != playercounts[team] ) + return false; + } + + return true; +} + +teamwithlowestplayercount( playercounts, ignore_team ) +{ + count = 9999; + lowest_team = undefined; + + foreach ( team in level.teams ) + { + if ( count > playercounts[team] ) + { + count = playercounts[team]; + lowest_team = team; + } + } + + return lowest_team; +} + +menuautoassign( comingfrommenu ) +{ + teamkeys = getarraykeys( level.teams ); + assignment = teamkeys[randomint( teamkeys.size )]; + self closemenus(); + + if ( isdefined( level.forceallallies ) && level.forceallallies ) + assignment = "allies"; + else if ( level.teambased ) + { + if ( getdvarint( "party_autoteams" ) == 1 ) + { + if ( level.allow_teamchange == "1" && ( self.hasspawned || comingfrommenu ) ) + assignment = ""; + else + { + team = getassignedteam( self ); + + switch ( team ) + { + case 1: + assignment = teamkeys[1]; + break; + case 2: + assignment = teamkeys[0]; + break; + case 3: + assignment = teamkeys[2]; + break; + case 4: + if ( !isdefined( level.forceautoassign ) || !level.forceautoassign ) + { + self setclientscriptmainmenu( game["menu_class"] ); + return; + } + default: + assignment = ""; + + if ( isdefined( level.teams[team] ) ) + assignment = team; + else if ( team == "spectator" && !level.forceautoassign ) + { + self setclientscriptmainmenu( game["menu_class"] ); + return; + } + } + } + } + + if ( assignment == "" || getdvarint( "party_autoteams" ) == 0 ) + { + if ( sessionmodeiszombiesgame() ) + assignment = "allies"; + else if ( maps\mp\bots\_bot::is_bot_comp_stomp() ) + { + host = gethostplayerforbots(); + assert( isdefined( host ) ); + + if ( !isdefined( host.team ) || host.team == "spectator" ) + host.team = random( teamkeys ); + + if ( !self is_bot() ) + assignment = host.team; + else + assignment = getotherteam( host.team ); + } + else + { + playercounts = self maps\mp\teams\_teams::countplayers(); + + if ( teamplayercountsequal( playercounts ) ) + { + if ( !level.splitscreen && self issplitscreen() ) + { + assignment = self getsplitscreenteam(); + + if ( assignment == "" ) + assignment = pickteamfromscores( teamkeys ); + } + else + assignment = pickteamfromscores( teamkeys ); + } + else + assignment = teamwithlowestplayercount( playercounts, "none" ); + } + } + + if ( assignment == self.pers["team"] && ( self.sessionstate == "playing" || self.sessionstate == "dead" ) ) + { + self beginclasschoice(); + return; + } + } + else if ( getdvarint( "party_autoteams" ) == 1 ) + { + if ( level.allow_teamchange != "1" || !self.hasspawned && !comingfrommenu ) + { + team = getassignedteam( self ); + + if ( isdefined( level.teams[team] ) ) + assignment = team; + else if ( team == "spectator" && !level.forceautoassign ) + { + self setclientscriptmainmenu( game["menu_class"] ); + return; + } + } + } + + if ( assignment != self.pers["team"] && ( self.sessionstate == "playing" || self.sessionstate == "dead" ) ) + { + self.switching_teams = 1; + self.joining_team = assignment; + self.leaving_team = self.pers["team"]; + self suicide(); + } + + self.pers["team"] = assignment; + self.team = assignment; + self.pers["class"] = undefined; + self.class = undefined; + self.pers["weapon"] = undefined; + self.pers["savedmodel"] = undefined; + self updateobjectivetext(); + + if ( level.teambased ) + self.sessionteam = assignment; + else + { + self.sessionteam = "none"; + self.ffateam = assignment; + } + + if ( !isalive( self ) ) + self.statusicon = "hud_status_dead"; + + self notify( "joined_team" ); + level notify( "joined_team" ); + self notify( "end_respawn" ); + + if ( ispregame() ) + { + if ( !self is_bot() ) + { + pclass = self maps\mp\gametypes\_pregame::get_pregame_class(); + self closemenu(); + self closeingamemenu(); + self.selectedclass = 1; + self [[ level.class ]]( pclass ); + self setclientscriptmainmenu( game["menu_class"] ); + return; + } + } + + if ( ispregamegamestarted() ) + { + if ( self is_bot() && isdefined( self.pers["class"] ) ) + { + pclass = self.pers["class"]; + self closemenu(); + self closeingamemenu(); + self.selectedclass = 1; + self [[ level.class ]]( pclass ); + return; + } + } + + self beginclasschoice(); + self setclientscriptmainmenu( game["menu_class"] ); +} + +teamscoresequal() +{ + score = undefined; + + foreach ( team in level.teams ) + { + if ( !isdefined( score ) ) + { + score = getteamscore( team ); + continue; + } + + if ( score != getteamscore( team ) ) + return false; + } + + return true; +} + +teamwithlowestscore() +{ + score = 99999999; + lowest_team = undefined; + + foreach ( team in level.teams ) + { + if ( score > getteamscore( team ) ) + lowest_team = team; + } + + return lowest_team; +} + +pickteamfromscores( teams ) +{ + assignment = "allies"; + + if ( teamscoresequal() ) + assignment = teams[randomint( teams.size )]; + else + assignment = teamwithlowestscore(); + + return assignment; +} + +getsplitscreenteam() +{ + for ( index = 0; index < level.players.size; index++ ) + { + if ( !isdefined( level.players[index] ) ) + continue; + + if ( level.players[index] == self ) + continue; + + if ( !self isplayeronsamemachine( level.players[index] ) ) + continue; + + team = level.players[index].sessionteam; + + if ( team != "spectator" ) + return team; + } + + return ""; +} + +updateobjectivetext() +{ + if ( sessionmodeiszombiesgame() || self.pers["team"] == "spectator" ) + { + self setclientcgobjectivetext( "" ); + return; + } + + if ( level.scorelimit > 0 ) + self setclientcgobjectivetext( getobjectivescoretext( self.pers["team"] ) ); + else + self setclientcgobjectivetext( getobjectivetext( self.pers["team"] ) ); +} + +closemenus() +{ + self closemenu(); + self closeingamemenu(); +} + +beginclasschoice( forcenewchoice ) +{ + assert( isdefined( level.teams[self.pers["team"]] ) ); + team = self.pers["team"]; + + if ( level.disableclassselection == 1 || getdvarint( "migration_soak" ) == 1 ) + { + self.pers["class"] = level.defaultclass; + self.class = level.defaultclass; + + if ( self.sessionstate != "playing" && game["state"] == "playing" ) + self thread [[ level.spawnclient ]](); + + level thread maps\mp\gametypes\_globallogic::updateteamstatus(); + self thread maps\mp\gametypes\_spectating::setspectatepermissionsformachine(); + return; + } + + if ( level.wagermatch ) + self openmenu( game["menu_changeclass_wager"] ); + else if ( getdvarint( "barebones_class_mode" ) ) + self openmenu( game["menu_changeclass_barebones"] ); + else + self openmenu( game["menu_changeclass_" + team] ); +} + +showmainmenuforteam() +{ + assert( isdefined( level.teams[self.pers["team"]] ) ); + team = self.pers["team"]; + + if ( level.wagermatch ) + self openmenu( game["menu_changeclass_wager"] ); + else + self openmenu( game["menu_changeclass_" + team] ); +} + +menuteam( team ) +{ + self closemenus(); + + if ( !level.console && level.allow_teamchange == "0" && ( isdefined( self.hasdonecombat ) && self.hasdonecombat ) ) + return; + + if ( self.pers["team"] != team ) + { + if ( level.ingraceperiod && ( !isdefined( self.hasdonecombat ) || !self.hasdonecombat ) ) + self.hasspawned = 0; + + if ( self.sessionstate == "playing" ) + { + self.switching_teams = 1; + self.joining_team = team; + self.leaving_team = self.pers["team"]; + self suicide(); + } + + self.pers["team"] = team; + self.team = team; + self.pers["class"] = undefined; + self.class = undefined; + self.pers["weapon"] = undefined; + self.pers["savedmodel"] = undefined; + self updateobjectivetext(); + + if ( !level.rankedmatch && !level.leaguematch ) + self.sessionstate = "spectator"; + + if ( level.teambased ) + self.sessionteam = team; + else + { + self.sessionteam = "none"; + self.ffateam = team; + } + + self setclientscriptmainmenu( game["menu_class"] ); + self notify( "joined_team" ); + level notify( "joined_team" ); + self notify( "end_respawn" ); + } + + self beginclasschoice(); +} + +menuspectator() +{ + self closemenus(); + + if ( self.pers["team"] != "spectator" ) + { + if ( isalive( self ) ) + { + self.switching_teams = 1; + self.joining_team = "spectator"; + self.leaving_team = self.pers["team"]; + self suicide(); + } + + self.pers["team"] = "spectator"; + self.team = "spectator"; + self.pers["class"] = undefined; + self.class = undefined; + self.pers["weapon"] = undefined; + self.pers["savedmodel"] = undefined; + self updateobjectivetext(); + self.sessionteam = "spectator"; + + if ( !level.teambased ) + self.ffateam = "spectator"; + + [[ level.spawnspectator ]](); + self thread maps\mp\gametypes\_globallogic_player::spectate_player_watcher(); + self setclientscriptmainmenu( game["menu_class"] ); + self notify( "joined_spectators" ); + } +} + +menuclass( response ) +{ + self closemenus(); + + if ( !isdefined( self.pers["team"] ) || !isdefined( level.teams[self.pers["team"]] ) ) + return; + + class = self maps\mp\gametypes\_class::getclasschoice( response ); + + if ( isdefined( self.pers["class"] ) && self.pers["class"] == class ) + return; + + self.pers["changed_class"] = 1; + self notify( "changed_class" ); + + if ( isdefined( self.curclass ) && self.curclass == class ) + self.pers["changed_class"] = 0; + + if ( ispregame() ) + self maps\mp\gametypes\_pregame::onplayerclasschange( response ); + + if ( self.sessionstate == "playing" ) + { + self.pers["class"] = class; + self.class = class; + self.pers["weapon"] = undefined; + + if ( game["state"] == "postgame" ) + return; + + supplystationclasschange = isdefined( self.usingsupplystation ) && self.usingsupplystation; + self.usingsupplystation = 0; + + if ( level.ingraceperiod && !self.hasdonecombat || supplystationclasschange ) + { + self maps\mp\gametypes\_class::setclass( self.pers["class"] ); + self.tag_stowed_back = undefined; + self.tag_stowed_hip = undefined; + self maps\mp\gametypes\_class::giveloadout( self.pers["team"], self.pers["class"] ); + self maps\mp\killstreaks\_killstreaks::giveownedkillstreak(); + } + else if ( !self issplitscreen() ) + self iprintlnbold( game["strings"]["change_class"] ); + } + else + { + self.pers["class"] = class; + self.class = class; + self.pers["weapon"] = undefined; + + if ( game["state"] == "postgame" ) + return; + + if ( self.sessionstate != "spectator" ) + { + if ( self isinvehicle() ) + return; + + if ( self isremotecontrolling() ) + return; + + if ( self isweaponviewonlylinked() ) + return 0; + } + + if ( game["state"] == "playing" ) + { + timepassed = undefined; + + if ( isdefined( self.respawntimerstarttime ) ) + timepassed = ( gettime() - self.respawntimerstarttime ) / 1000; + + self thread [[ level.spawnclient ]]( timepassed ); + self.respawntimerstarttime = undefined; + } + } + + level thread maps\mp\gametypes\_globallogic::updateteamstatus(); + self thread maps\mp\gametypes\_spectating::setspectatepermissionsformachine(); +} + +removespawnmessageshortly( delay ) +{ + self endon( "disconnect" ); + waittillframeend; + self endon( "end_respawn" ); + wait( delay ); + self clearlowermessage( 2.0 ); +} diff --git a/MP/Core/maps/mp/gametypes/_globallogic_utils.gsc b/MP/Core/maps/mp/gametypes/_globallogic_utils.gsc new file mode 100644 index 0000000..d36a57d --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_globallogic_utils.gsc @@ -0,0 +1,464 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_message; +#include maps\mp\killstreaks\_killstreaks; +#include maps\mp\gametypes\_hostmigration; +#include maps\mp\gametypes\_globallogic_score; + +waittillslowprocessallowed() +{ + while ( level.lastslowprocessframe == gettime() ) + wait 0.05; + + level.lastslowprocessframe = gettime(); +} + +testmenu() +{ + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + wait 10.0; + notifydata = spawnstruct(); + notifydata.titletext = &"MP_CHALLENGE_COMPLETED"; + notifydata.notifytext = "wheee"; + notifydata.sound = "mp_challenge_complete"; + self thread maps\mp\gametypes\_hud_message::notifymessage( notifydata ); + } +} + +testshock() +{ + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + wait 3.0; + numshots = randomint( 6 ); + + for ( i = 0; i < numshots; i++ ) + { + iprintlnbold( numshots ); + self shellshock( "frag_grenade_mp", 0.2 ); + wait 0.1; + } + } +} + +testhps() +{ + self endon( "death" ); + self endon( "disconnect" ); + hps = []; + hps[hps.size] = "radar_mp"; + hps[hps.size] = "artillery_mp"; + hps[hps.size] = "dogs_mp"; + + for (;;) + { + hp = "radar_mp"; + + if ( self thread maps\mp\killstreaks\_killstreaks::givekillstreak( hp ) ) + self playlocalsound( level.killstreaks[hp].informdialog ); + + wait 20.0; + } +} + +timeuntilroundend() +{ + if ( level.gameended ) + { + timepassed = ( gettime() - level.gameendtime ) / 1000; + timeremaining = level.postroundtime - timepassed; + + if ( timeremaining < 0 ) + return 0; + + return timeremaining; + } + + if ( level.inovertime ) + return undefined; + + if ( level.timelimit <= 0 ) + return undefined; + + if ( !isdefined( level.starttime ) ) + return undefined; + + timepassed = ( gettimepassed() - level.starttime ) / 1000; + timeremaining = level.timelimit * 60 - timepassed; + return timeremaining + level.postroundtime; +} + +gettimeremaining() +{ + return level.timelimit * 60 * 1000 - gettimepassed(); +} + +registerpostroundevent( eventfunc ) +{ + if ( !isdefined( level.postroundevents ) ) + level.postroundevents = []; + + level.postroundevents[level.postroundevents.size] = eventfunc; +} + +executepostroundevents() +{ + if ( !isdefined( level.postroundevents ) ) + return; + + for ( i = 0; i < level.postroundevents.size; i++ ) + [[ level.postroundevents[i] ]](); +} + +getvalueinrange( value, minvalue, maxvalue ) +{ + if ( value > maxvalue ) + return maxvalue; + else if ( value < minvalue ) + return minvalue; + else + return value; +} + +assertproperplacement() +{ +/# + numplayers = level.placement["all"].size; + + if ( level.teambased ) + { + for ( i = 0; i < numplayers - 1; i++ ) + { + if ( level.placement["all"][i].score < level.placement["all"][i + 1].score ) + { + println( "^1Placement array:" ); + + for ( i = 0; i < numplayers; i++ ) + { + player = level.placement["all"][i]; + println( "^1" + i + ". " + player.name + ": " + player.score ); + } +/# + assertmsg( "Placement array was not properly sorted" ); +#/ + break; + } + } + } + else + { + for ( i = 0; i < numplayers - 1; i++ ) + { + if ( level.placement["all"][i].pointstowin < level.placement["all"][i + 1].pointstowin ) + { + println( "^1Placement array:" ); + + for ( i = 0; i < numplayers; i++ ) + { + player = level.placement["all"][i]; + println( "^1" + i + ". " + player.name + ": " + player.pointstowin ); + } +/# + assertmsg( "Placement array was not properly sorted" ); +#/ + break; + } + } + } +#/ +} + +isvalidclass( class ) +{ + if ( level.oldschool || sessionmodeiszombiesgame() ) + { + assert( !isdefined( class ) ); + return 1; + } + + return isdefined( class ) && class != ""; +} + +playtickingsound( gametype_tick_sound ) +{ + self endon( "death" ); + self endon( "stop_ticking" ); + level endon( "game_ended" ); + time = level.bombtimer; + + while ( true ) + { + self playsound( gametype_tick_sound ); + + if ( time > 10 ) + { + time -= 1; + wait 1; + } + else if ( time > 4 ) + { + time -= 0.5; + wait 0.5; + } + else if ( time > 1 ) + { + time -= 0.4; + wait 0.4; + } + else + { + time -= 0.3; + wait 0.3; + } + + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + } +} + +stoptickingsound() +{ + self notify( "stop_ticking" ); +} + +gametimer() +{ + level endon( "game_ended" ); + + level waittill( "prematch_over" ); + + level.starttime = gettime(); + level.discardtime = 0; + + if ( isdefined( game["roundMillisecondsAlreadyPassed"] ) ) + { + level.starttime -= game["roundMillisecondsAlreadyPassed"]; + game["roundMillisecondsAlreadyPassed"] = undefined; + } + + prevtime = gettime(); + + while ( game["state"] == "playing" ) + { + if ( !level.timerstopped ) + game["timepassed"] += gettime() - prevtime; + + prevtime = gettime(); + wait 1.0; + } +} + +gettimepassed() +{ + if ( !isdefined( level.starttime ) ) + return 0; + + if ( level.timerstopped ) + return level.timerpausetime - level.starttime - level.discardtime; + else + return gettime() - level.starttime - level.discardtime; +} + +pausetimer() +{ + if ( level.timerstopped ) + return; + + level.timerstopped = 1; + level.timerpausetime = gettime(); +} + +resumetimer() +{ + if ( !level.timerstopped ) + return; + + level.timerstopped = 0; + level.discardtime += gettime() - level.timerpausetime; +} + +getscoreremaining( team ) +{ + assert( isplayer( self ) || isdefined( team ) ); + scorelimit = level.scorelimit; + + if ( isplayer( self ) ) + return scorelimit - maps\mp\gametypes\_globallogic_score::_getplayerscore( self ); + else + return scorelimit - getteamscore( team ); +} + +getteamscoreforround( team ) +{ + if ( level.roundscorecarry && isdefined( game["lastroundscore"][team] ) ) + return getteamscore( team ) - game["lastroundscore"][team]; + + return getteamscore( team ); +} + +getscoreperminute( team ) +{ + assert( isplayer( self ) || isdefined( team ) ); + scorelimit = level.scorelimit; + timelimit = level.timelimit; + minutespassed = gettimepassed() / 60000 + 0.0001; + + if ( isplayer( self ) ) + return maps\mp\gametypes\_globallogic_score::_getplayerscore( self ) / minutespassed; + else + return getteamscoreforround( team ) / minutespassed; +} + +getestimatedtimeuntilscorelimit( team ) +{ + assert( isplayer( self ) || isdefined( team ) ); + scoreperminute = self getscoreperminute( team ); + scoreremaining = self getscoreremaining( team ); + + if ( !scoreperminute ) + return 999999; + + return scoreremaining / scoreperminute; +} + +rumbler() +{ + self endon( "disconnect" ); + + while ( true ) + { + wait 0.1; + self playrumbleonentity( "damage_heavy" ); + } +} + +waitfortimeornotify( time, notifyname ) +{ + self endon( notifyname ); + wait( time ); +} + +waitfortimeornotifynoartillery( time, notifyname ) +{ + self endon( notifyname ); + wait( time ); + + while ( isdefined( level.artilleryinprogress ) ) + { + assert( level.artilleryinprogress ); + wait 0.25; + } +} + +isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) +{ + if ( shitloc != "head" && shitloc != "helmet" ) + return false; + + switch ( smeansofdeath ) + { + case "MOD_MELEE": + case "MOD_BAYONET": + return false; + case "MOD_IMPACT": + if ( sweapon != "knife_ballistic_mp" ) + return false; + } + + if ( maps\mp\killstreaks\_killstreaks::iskillstreakweapon( sweapon ) ) + { + if ( !isdefined( einflictor ) || !isdefined( einflictor.controlled ) || einflictor.controlled == 0 ) + return false; + } + + return true; +} + +gethitlocheight( shitloc ) +{ + switch ( shitloc ) + { + case "neck": + case "helmet": + case "head": + return 60; + case "torso_upper": + case "right_hand": + case "right_arm_upper": + case "right_arm_lower": + case "left_hand": + case "left_arm_upper": + case "left_arm_lower": + case "gun": + return 48; + case "torso_lower": + return 40; + case "right_leg_upper": + case "left_leg_upper": + return 32; + case "right_leg_lower": + case "left_leg_lower": + return 10; + case "right_foot": + case "left_foot": + return 5; + } + + return 48; +} + +debugline( start, end ) +{ +/# + for ( i = 0; i < 50; i++ ) + { + line( start, end ); + wait 0.05; + } +#/ +} + +isexcluded( entity, entitylist ) +{ + for ( index = 0; index < entitylist.size; index++ ) + { + if ( entity == entitylist[index] ) + return true; + } + + return false; +} + +waitfortimeornotifies( desireddelay ) +{ + startedwaiting = gettime(); + waitedtime = ( gettime() - startedwaiting ) / 1000; + + if ( waitedtime < desireddelay ) + { + wait( desireddelay - waitedtime ); + return desireddelay; + } + else + return waitedtime; +} + +logteamwinstring( wintype, winner ) +{ + log_string = wintype; + + if ( isdefined( winner ) ) + log_string = log_string + ", win: " + winner; + + foreach ( team in level.teams ) + log_string = log_string + ", " + team + ": " + game["teamScores"][team]; + + logstring( log_string ); +} diff --git a/MP/Core/maps/mp/gametypes/_globallogic_vehicle.gsc b/MP/Core/maps/mp/gametypes/_globallogic_vehicle.gsc new file mode 100644 index 0000000..2dfaeed --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_globallogic_vehicle.gsc @@ -0,0 +1,368 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_class; +#include maps\mp\_vehicles; +#include maps\mp\gametypes\_weapons; +#include maps\mp\gametypes\_globallogic_player; +#include maps\mp\gametypes\_damagefeedback; + +callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname ) +{ + if ( !( level.idflags_radius & idflags ) ) + idamage = maps\mp\gametypes\_class::cac_modified_vehicle_damage( self, eattacker, idamage, smeansofdeath, sweapon, einflictor ); + + self.idflags = idflags; + self.idflagstime = gettime(); + + if ( game["state"] == "postgame" ) + return; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat ) + return; + + if ( !isdefined( vdir ) ) + idflags |= level.idflags_no_knockback; + + friendly = 0; + + if ( isdefined( self.maxhealth ) && self.health == self.maxhealth || !isdefined( self.attackers ) ) + { + self.attackers = []; + self.attackerdata = []; + self.attackerdamage = []; + } + + if ( sweapon == "none" && isdefined( einflictor ) ) + { + if ( isdefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) + sweapon = "explodable_barrel_mp"; + else if ( isdefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) + sweapon = "destructible_car_mp"; + } + + if ( !( idflags & level.idflags_no_protection ) ) + { + if ( self isvehicleimmunetodamage( idflags, smeansofdeath, sweapon ) ) + return; + + if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) + { + + } + else if ( smeansofdeath == "MOD_PROJECTILE" || smeansofdeath == "MOD_GRENADE" ) + { + idamage *= getvehicleprojectilescalar( sweapon ); + idamage = int( idamage ); + + if ( idamage == 0 ) + return; + } + else if ( smeansofdeath == "MOD_GRENADE_SPLASH" ) + { + idamage *= getvehicleunderneathsplashscalar( sweapon ); + idamage = int( idamage ); + + if ( idamage == 0 ) + return; + } + + idamage *= level.vehicledamagescalar; + idamage = int( idamage ); + + if ( isplayer( eattacker ) ) + eattacker.pers["participation"]++; + + prevhealthratio = self.health / self.maxhealth; + + if ( isdefined( self.owner ) && isplayer( self.owner ) ) + team = self.owner.pers["team"]; + else + team = self maps\mp\_vehicles::vehicle_get_occupant_team(); + + if ( level.teambased && isplayer( eattacker ) && team == eattacker.pers["team"] ) + { + if ( level.friendlyfire == 0 ) + { + if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) + return; + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 1 ); + } + else if ( level.friendlyfire == 1 ) + { + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); + } + else if ( level.friendlyfire == 2 ) + { + if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) + return; + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 1 ); + } + else if ( level.friendlyfire == 3 ) + { + idamage = int( idamage * 0.5 ); + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); + } + + friendly = 1; + } + else if ( !level.hardcoremode && isdefined( self.owner ) && isdefined( eattacker.owner ) && self.owner == eattacker.owner ) + return; + else + { + if ( !level.teambased && isdefined( self.targetname ) && self.targetname == "rcbomb" ) + { + + } + else if ( isdefined( self.owner ) && isdefined( eattacker ) && self.owner == eattacker ) + return; + + if ( idamage < 1 ) + idamage = 1; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( sweapon ) ) + eattacker thread maps\mp\gametypes\_weapons::checkhit( sweapon ); + + if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isdefined( einflictor.iscooked ) ) + self.wascooked = gettime(); + else + self.wascooked = undefined; + + attacker_seat = undefined; + + if ( isdefined( eattacker ) ) + attacker_seat = self getoccupantseat( eattacker ); + + self.lastdamagewasfromenemy = isdefined( eattacker ) && !isdefined( attacker_seat ); + self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); + + if ( level.gametype == "hack" && sweapon != "emp_grenade_mp" ) + idamage = 0; + } + + if ( isdefined( eattacker ) && eattacker != self ) + { + if ( maps\mp\gametypes\_globallogic_player::dodamagefeedback( sweapon, einflictor ) ) + { + if ( idamage > 0 ) + eattacker thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor ); + } + } + } +/# + if ( getdvarint( "g_debugDamage" ) ) + println( "actor:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); +#/ + if ( 1 ) + { + lpselfnum = self getentitynumber(); + lpselfteam = ""; + lpattackerteam = ""; + + if ( isplayer( eattacker ) ) + { + lpattacknum = eattacker getentitynumber(); + lpattackguid = eattacker getguid(); + lpattackname = eattacker.name; + lpattackerteam = eattacker.pers["team"]; + } + else + { + lpattacknum = -1; + lpattackguid = ""; + lpattackname = ""; + lpattackerteam = "world"; + } + + logprint( "VD;" + lpselfnum + ";" + lpselfteam + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\\n" ); + } +} + +callback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ) +{ + idamage = maps\mp\gametypes\_class::cac_modified_vehicle_damage( self, eattacker, idamage, smeansofdeath, sweapon, einflictor ); + finnerdamage = maps\mp\gametypes\_class::cac_modified_vehicle_damage( self, eattacker, finnerdamage, smeansofdeath, sweapon, einflictor ); + fouterdamage = maps\mp\gametypes\_class::cac_modified_vehicle_damage( self, eattacker, fouterdamage, smeansofdeath, sweapon, einflictor ); + self.idflags = idflags; + self.idflagstime = gettime(); + + if ( game["state"] == "postgame" ) + return; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat ) + return; + + friendly = 0; + + if ( !( idflags & level.idflags_no_protection ) ) + { + if ( self isvehicleimmunetodamage( idflags, smeansofdeath, sweapon ) ) + return; + + if ( smeansofdeath == "MOD_PROJECTILE_SPLASH" || smeansofdeath == "MOD_GRENADE_SPLASH" || smeansofdeath == "MOD_EXPLOSIVE" ) + { + scalar = getvehicleprojectilesplashscalar( sweapon ); + idamage = int( idamage * scalar ); + finnerdamage *= scalar; + fouterdamage *= scalar; + + if ( finnerdamage == 0 ) + return; + + if ( idamage < 1 ) + idamage = 1; + } + + occupant_team = self maps\mp\_vehicles::vehicle_get_occupant_team(); + + if ( level.teambased && isplayer( eattacker ) && occupant_team == eattacker.pers["team"] ) + { + if ( level.friendlyfire == 0 ) + { + if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) + return; + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); + } + else if ( level.friendlyfire == 1 ) + { + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); + } + else if ( level.friendlyfire == 2 ) + { + if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) + return; + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); + } + else if ( level.friendlyfire == 3 ) + { + idamage = int( idamage * 0.5 ); + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); + } + + friendly = 1; + } + else if ( !level.hardcoremode && isdefined( self.owner ) && isdefined( eattacker.owner ) && self.owner == eattacker.owner ) + return; + else + { + if ( idamage < 1 ) + idamage = 1; + + self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); + } + } +} + +vehiclecrush() +{ + self endon( "disconnect" ); + + if ( isdefined( level._effect ) && isdefined( level._effect["tanksquish"] ) ) + playfx( level._effect["tanksquish"], self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ) ); + + self playsound( "chr_crunch" ); +} + +getvehicleprojectilescalar( sweapon ) +{ + if ( sweapon == "remote_missile_missile_mp" ) + scale = 10.0; + else if ( sweapon == "remote_mortar_missile_mp" ) + scale = 10.0; + else if ( sweapon == "smaw_mp" ) + scale = 0.2; + else if ( sweapon == "fhj18_mp" ) + scale = 0.2; + else + scale = 1; + + return scale; +} + +getvehicleprojectilesplashscalar( sweapon ) +{ + if ( sweapon == "remote_missile_missile_mp" ) + scale = 10.0; + else if ( sweapon == "remote_mortar_missile_mp" ) + scale = 4.0; + else if ( sweapon == "chopper_minigun_mp" ) + scale = 0.5; + else + scale = 1; + + return scale; +} + +getvehicleunderneathsplashscalar( sweapon ) +{ + if ( sweapon == "satchel_charge_mp" ) + { + scale = 10.0; + scale *= 3.0; + } + else + scale = 1.0; + + return scale; +} + +getvehiclebulletdamage( sweapon ) +{ + if ( issubstr( sweapon, "ptrs41_" ) ) + idamage = 25; + else if ( issubstr( sweapon, "gunner" ) ) + idamage = 5; + else if ( issubstr( sweapon, "mg42_bipod" ) || issubstr( sweapon, "30cal_bipod" ) ) + idamage = 5; + else + idamage = 1; + + return idamage; +} + +allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) +{ + if ( isdefined( self.allowfriendlyfiredamageoverride ) ) + return [[ self.allowfriendlyfiredamageoverride ]]( einflictor, eattacker, smeansofdeath, sweapon ); + + vehicle = eattacker getvehicleoccupied(); + return 0; +} diff --git a/MP/Core/maps/mp/gametypes/_healthoverlay.gsc b/MP/Core/maps/mp/gametypes/_healthoverlay.gsc new file mode 100644 index 0000000..af30f5c --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_healthoverlay.gsc @@ -0,0 +1,278 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\gametypes\_globallogic_player; + +init() +{ + precacheshader( "overlay_low_health" ); + level.healthoverlaycutoff = 0.55; + regentime = level.playerhealthregentime; + level.playerhealth_regularregendelay = regentime * 1000; + level.healthregendisabled = level.playerhealth_regularregendelay <= 0; + level thread onplayerconnect(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread onplayerspawned(); + player thread onplayerkilled(); + player thread onjoinedteam(); + player thread onjoinedspectators(); + player thread onplayerdisconnect(); + } +} + +onjoinedteam() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "joined_team" ); + + self notify( "end_healthregen" ); + } +} + +onjoinedspectators() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "joined_spectators" ); + + self notify( "end_healthregen" ); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread playerhealthregen(); + } +} + +onplayerkilled() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "killed_player" ); + + self notify( "end_healthregen" ); + } +} + +onplayerdisconnect() +{ + self waittill( "disconnect" ); + + self notify( "end_healthregen" ); +} + +playerhealthregen() +{ + self endon( "end_healthregen" ); + + if ( self.health <= 0 ) + { + assert( !isalive( self ) ); + return; + } + + maxhealth = self.health; + oldhealth = maxhealth; + player = self; + health_add = 0; + regenrate = 0.1; + usetrueregen = 0; + veryhurt = 0; + player.breathingstoptime = -10000; + thread playerbreathingsound( maxhealth * 0.35 ); + thread playerheartbeatsound( maxhealth * 0.35 ); + lastsoundtime_recover = 0; + hurttime = 0; + newhealth = 0; + + for (;;) + { + wait 0.05; + + if ( isdefined( player.regenrate ) ) + { + regenrate = player.regenrate; + usetrueregen = 1; + } + + if ( player.health == maxhealth ) + { + veryhurt = 0; + self.atbrinkofdeath = 0; + continue; + } + + if ( player.health <= 0 ) + return; + + if ( isdefined( player.laststand ) && player.laststand ) + continue; + + wasveryhurt = veryhurt; + ratio = player.health / maxhealth; + + if ( ratio <= level.healthoverlaycutoff ) + { + veryhurt = 1; + self.atbrinkofdeath = 1; + + if ( !wasveryhurt ) + hurttime = gettime(); + } + + if ( player.health >= oldhealth ) + { + regentime = level.playerhealth_regularregendelay; + + if ( player hasperk( "specialty_healthregen" ) ) + regentime = int( regentime / getdvarfloat( "perk_healthRegenMultiplier" ) ); + + if ( gettime() - hurttime < regentime ) + continue; + + if ( level.healthregendisabled ) + continue; + + if ( gettime() - lastsoundtime_recover > regentime ) + { + lastsoundtime_recover = gettime(); + self notify( "snd_breathing_better" ); + } + + if ( veryhurt ) + { + newhealth = ratio; + veryhurttime = 3000; + + if ( player hasperk( "specialty_healthregen" ) ) + veryhurttime = int( veryhurttime / getdvarfloat( "perk_healthRegenMultiplier" ) ); + + if ( gettime() > hurttime + veryhurttime ) + newhealth += regenrate; + } + else if ( usetrueregen ) + newhealth = ratio + regenrate; + else + newhealth = 1; + + if ( newhealth >= 1.0 ) + { + self maps\mp\gametypes\_globallogic_player::resetattackerlist(); + newhealth = 1.0; + } + + if ( newhealth <= 0 ) + return; + + player setnormalhealth( newhealth ); + change = player.health - oldhealth; + + if ( change > 0 ) + player decayplayerdamages( change ); + + oldhealth = player.health; + continue; + } + + oldhealth = player.health; + health_add = 0; + hurttime = gettime(); + player.breathingstoptime = hurttime + 6000; + } +} + +decayplayerdamages( decay ) +{ + if ( !isdefined( self.attackerdamage ) ) + return; + + for ( i = 0; i < self.attackerdamage.size; i++ ) + { + if ( !isdefined( self.attackerdamage[i] ) || !isdefined( self.attackerdamage[i].damage ) ) + continue; + + self.attackerdamage[i].damage -= decay; + + if ( self.attackerdamage[i].damage < 0 ) + self.attackerdamage[i].damage = 0; + } +} + +playerbreathingsound( healthcap ) +{ + self endon( "end_healthregen" ); + wait 2; + player = self; + + for (;;) + { + wait 0.2; + + if ( player.health <= 0 ) + return; + + if ( player.health >= healthcap ) + continue; + + if ( level.healthregendisabled && gettime() > player.breathingstoptime ) + continue; + + player notify( "snd_breathing_hurt" ); + wait 0.784; + wait( 0.1 + randomfloat( 0.8 ) ); + } +} + +playerheartbeatsound( healthcap ) +{ + self endon( "end_healthregen" ); + self.hearbeatwait = 0.2; + wait 2; + player = self; + + for (;;) + { + wait 0.2; + + if ( player.health <= 0 ) + return; + + if ( player.health >= healthcap ) + { + self.hearbeatwait = 0.3; + continue; + } + + if ( level.healthregendisabled && gettime() > player.breathingstoptime ) + { + self.hearbeatwait = 0.3; + continue; + } + + player playlocalsound( "mpl_player_heartbeat" ); + wait( self.hearbeatwait ); + + if ( self.hearbeatwait <= 0.6 ) + self.hearbeatwait += 0.1; + } +} diff --git a/MP/Core/maps/mp/gametypes/_hostmigration.gsc b/MP/Core/maps/mp/gametypes/_hostmigration.gsc new file mode 100644 index 0000000..17b167c --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_hostmigration.gsc @@ -0,0 +1,344 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_hud; + +debug_script_structs() +{ +/# + if ( isdefined( level.struct ) ) + { + println( "*** Num structs " + level.struct.size ); + println( "" ); + + for ( i = 0; i < level.struct.size; i++ ) + { + struct = level.struct[i]; + + if ( isdefined( struct.targetname ) ) + { + println( "---" + i + " : " + struct.targetname ); + continue; + } + + println( "---" + i + " : " + "NONE" ); + } + } + else + println( "*** No structs defined." ); +#/ +} + +updatetimerpausedness() +{ + shouldbestopped = isdefined( level.hostmigrationtimer ); + + if ( !level.timerstopped && shouldbestopped ) + { + level.timerstopped = 1; + level.timerpausetime = gettime(); + } + else if ( level.timerstopped && !shouldbestopped ) + { + level.timerstopped = 0; + level.discardtime += gettime() - level.timerpausetime; + } +} + +callback_hostmigrationsave() +{ + +} + +pausetimer() +{ + level.migrationtimerpausetime = gettime(); +} + +resumetimer() +{ + level.discardtime += gettime() - level.migrationtimerpausetime; +} + +locktimer() +{ + level endon( "host_migration_begin" ); + level endon( "host_migration_end" ); + + for (;;) + { + currtime = gettime(); + wait 0.05; + + if ( !level.timerstopped && isdefined( level.discardtime ) ) + level.discardtime += gettime() - currtime; + } +} + +callback_hostmigration() +{ + setslowmotion( 1, 1, 0 ); + makedvarserverinfo( "ui_guncycle", 0 ); + level.hostmigrationreturnedplayercount = 0; + + if ( level.inprematchperiod ) + level waittill( "prematch_over" ); + + if ( level.gameended ) + { +/# + println( "Migration starting at time " + gettime() + ", but game has ended, so no countdown." ); +#/ + return; + } +/# + println( "Migration starting at time " + gettime() ); +#/ + level.hostmigrationtimer = 1; + sethostmigrationstatus( 1 ); + level notify( "host_migration_begin" ); + thread locktimer(); + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + player thread hostmigrationtimerthink(); + } + + level endon( "host_migration_begin" ); + hostmigrationwait(); + level.hostmigrationtimer = undefined; + sethostmigrationstatus( 0 ); +/# + println( "Migration finished at time " + gettime() ); +#/ + recordmatchbegin(); + level notify( "host_migration_end" ); +} + +matchstarttimerconsole_internal( counttime, matchstarttimer ) +{ + waittillframeend; + visionsetnaked( "mpIntro", 0 ); + level endon( "match_start_timer_beginning" ); + + while ( counttime > 0 && !level.gameended ) + { + matchstarttimer thread maps\mp\gametypes\_hud::fontpulse( level ); + wait( matchstarttimer.inframes * 0.05 ); + matchstarttimer setvalue( counttime ); + + if ( counttime == 2 ) + visionsetnaked( getdvar( "mapname" ), 3.0 ); + + counttime--; + wait( 1 - matchstarttimer.inframes * 0.05 ); + } +} + +matchstarttimerconsole( type, duration ) +{ + level notify( "match_start_timer_beginning" ); + wait 0.05; + matchstarttext = createserverfontstring( "objective", 1.5 ); + matchstarttext setpoint( "CENTER", "CENTER", 0, -40 ); + matchstarttext.sort = 1001; + matchstarttext settext( game["strings"]["waiting_for_teams"] ); + matchstarttext.foreground = 0; + matchstarttext.hidewheninmenu = 1; + matchstarttext settext( game["strings"][type] ); + matchstarttimer = createserverfontstring( "objective", 2.2 ); + matchstarttimer setpoint( "CENTER", "CENTER", 0, 0 ); + matchstarttimer.sort = 1001; + matchstarttimer.color = ( 1, 1, 0 ); + matchstarttimer.foreground = 0; + matchstarttimer.hidewheninmenu = 1; + matchstarttimer maps\mp\gametypes\_hud::fontpulseinit(); + counttime = int( duration ); + + if ( counttime >= 2 ) + { + matchstarttimerconsole_internal( counttime, matchstarttimer ); + visionsetnaked( getdvar( "mapname" ), 3.0 ); + } + else + { + visionsetnaked( "mpIntro", 0 ); + visionsetnaked( getdvar( "mapname" ), 1.0 ); + } + + matchstarttimer destroyelem(); + matchstarttext destroyelem(); +} + +hostmigrationwait() +{ + level endon( "game_ended" ); + + if ( level.hostmigrationreturnedplayercount < level.players.size * 2 / 3 ) + { + thread matchstarttimerconsole( "waiting_for_teams", 20.0 ); + hostmigrationwaitforplayers(); + } + + level notify( "host_migration_countdown_begin" ); + thread matchstarttimerconsole( "match_starting_in", 5.0 ); + wait 5; +} + +waittillhostmigrationcountdown() +{ + level endon( "host_migration_end" ); + + if ( !isdefined( level.hostmigrationtimer ) ) + return; + + level waittill( "host_migration_countdown_begin" ); +} + +hostmigrationwaitforplayers() +{ + level endon( "hostmigration_enoughplayers" ); + wait 15; +} + +hostmigrationtimerthink_internal() +{ + level endon( "host_migration_begin" ); + level endon( "host_migration_end" ); + self.hostmigrationcontrolsfrozen = 0; + + while ( !isalive( self ) ) + self waittill( "spawned" ); + + self.hostmigrationcontrolsfrozen = 1; + self freezecontrols( 1 ); + + level waittill( "host_migration_end" ); +} + +hostmigrationtimerthink() +{ + self endon( "disconnect" ); + level endon( "host_migration_begin" ); + hostmigrationtimerthink_internal(); + + if ( self.hostmigrationcontrolsfrozen ) + self freezecontrols( 0 ); +} + +waittillhostmigrationdone() +{ + if ( !isdefined( level.hostmigrationtimer ) ) + return 0; + + starttime = gettime(); + + level waittill( "host_migration_end" ); + + return gettime() - starttime; +} + +waittillhostmigrationstarts( duration ) +{ + if ( isdefined( level.hostmigrationtimer ) ) + return; + + level endon( "host_migration_begin" ); + wait( duration ); +} + +waitlongdurationwithhostmigrationpause( duration ) +{ + if ( duration == 0 ) + return; + + assert( duration > 0 ); + starttime = gettime(); + endtime = gettime() + duration * 1000; + + while ( gettime() < endtime ) + { + waittillhostmigrationstarts( ( endtime - gettime() ) / 1000 ); + + if ( isdefined( level.hostmigrationtimer ) ) + { + timepassed = waittillhostmigrationdone(); + endtime += timepassed; + } + } +/# + if ( gettime() != endtime ) + println( "SCRIPT WARNING: gettime() = " + gettime() + " NOT EQUAL TO endtime = " + endtime ); +#/ + waittillhostmigrationdone(); + return gettime() - starttime; +} + +waitlongdurationwithhostmigrationpauseemp( duration ) +{ + if ( duration == 0 ) + return; + + assert( duration > 0 ); + starttime = gettime(); + empendtime = gettime() + duration * 1000; + level.empendtime = empendtime; + + while ( gettime() < empendtime ) + { + waittillhostmigrationstarts( ( empendtime - gettime() ) / 1000 ); + + if ( isdefined( level.hostmigrationtimer ) ) + { + timepassed = waittillhostmigrationdone(); + + if ( isdefined( empendtime ) ) + empendtime += timepassed; + } + } +/# + if ( gettime() != empendtime ) + println( "SCRIPT WARNING: gettime() = " + gettime() + " NOT EQUAL TO empendtime = " + empendtime ); +#/ + waittillhostmigrationdone(); + level.empendtime = undefined; + return gettime() - starttime; +} + +waitlongdurationwithgameendtimeupdate( duration ) +{ + if ( duration == 0 ) + return; + + assert( duration > 0 ); + starttime = gettime(); + endtime = gettime() + duration * 1000; + + while ( gettime() < endtime ) + { + waittillhostmigrationstarts( ( endtime - gettime() ) / 1000 ); + + while ( isdefined( level.hostmigrationtimer ) ) + { + endtime += 1000; + setgameendtime( int( endtime ) ); + wait 1; + } + } +/# + if ( gettime() != endtime ) + println( "SCRIPT WARNING: gettime() = " + gettime() + " NOT EQUAL TO endtime = " + endtime ); +#/ + while ( isdefined( level.hostmigrationtimer ) ) + { + endtime += 1000; + setgameendtime( int( endtime ) ); + wait 1; + } + + return gettime() - starttime; +} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_hud.gsc b/MP/Core/maps/mp/gametypes/_hud.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/_hud.gsc rename to MP/Core/maps/mp/gametypes/_hud.gsc diff --git a/MP/Core/maps/mp/gametypes/_hud_message.gsc b/MP/Core/maps/mp/gametypes/_hud_message.gsc new file mode 100644 index 0000000..2fa156e --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_hud_message.gsc @@ -0,0 +1,1351 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_hud_message; +#include maps\mp\_music; +#include maps\mp\gametypes\_globallogic_audio; +#include maps\mp\_utility; + +init() +{ + precachestring( &"MENU_POINTS" ); + precachestring( &"MP_FIRSTPLACE_NAME" ); + precachestring( &"MP_SECONDPLACE_NAME" ); + precachestring( &"MP_THIRDPLACE_NAME" ); + precachestring( &"MP_WAGER_PLACE_NAME" ); + precachestring( &"MP_MATCH_BONUS_IS" ); + precachestring( &"MP_CODPOINTS_MATCH_BONUS_IS" ); + precachestring( &"MP_WAGER_WINNINGS_ARE" ); + precachestring( &"MP_WAGER_SIDEBET_WINNINGS_ARE" ); + precachestring( &"MP_WAGER_IN_THE_MONEY" ); + precachestring( &"faction_popup" ); + game["strings"]["draw"] = &"MP_DRAW_CAPS"; + game["strings"]["round_draw"] = &"MP_ROUND_DRAW_CAPS"; + game["strings"]["round_win"] = &"MP_ROUND_WIN_CAPS"; + game["strings"]["round_loss"] = &"MP_ROUND_LOSS_CAPS"; + game["strings"]["victory"] = &"MP_VICTORY_CAPS"; + game["strings"]["defeat"] = &"MP_DEFEAT_CAPS"; + game["strings"]["game_over"] = &"MP_GAME_OVER_CAPS"; + game["strings"]["halftime"] = &"MP_HALFTIME_CAPS"; + game["strings"]["overtime"] = &"MP_OVERTIME_CAPS"; + game["strings"]["roundend"] = &"MP_ROUNDEND_CAPS"; + game["strings"]["intermission"] = &"MP_INTERMISSION_CAPS"; + game["strings"]["side_switch"] = &"MP_SWITCHING_SIDES_CAPS"; + game["strings"]["match_bonus"] = &"MP_MATCH_BONUS_IS"; + game["strings"]["codpoints_match_bonus"] = &"MP_CODPOINTS_MATCH_BONUS_IS"; + game["strings"]["wager_winnings"] = &"MP_WAGER_WINNINGS_ARE"; + game["strings"]["wager_sidebet_winnings"] = &"MP_WAGER_SIDEBET_WINNINGS_ARE"; + game["strings"]["wager_inthemoney"] = &"MP_WAGER_IN_THE_MONEY_CAPS"; + game["strings"]["wager_loss"] = &"MP_WAGER_LOSS_CAPS"; + game["strings"]["wager_topwinners"] = &"MP_WAGER_TOPWINNERS"; + game["menu_endgameupdate"] = "endgameupdate"; + precachemenu( game["menu_endgameupdate"] ); + level thread onplayerconnect(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread hintmessagedeaththink(); + player thread lowermessagethink(); + player thread initnotifymessage(); + player thread initcustomgametypeheader(); + } +} + +initcustomgametypeheader() +{ + font = "default"; + titlesize = 2.5; + self.customgametypeheader = createfontstring( font, titlesize ); + self.customgametypeheader setpoint( "TOP", undefined, 0, 30 ); + self.customgametypeheader.glowalpha = 1; + self.customgametypeheader.hidewheninmenu = 1; + self.customgametypeheader.archived = 0; + self.customgametypeheader.color = ( 1, 1, 0.6 ); + self.customgametypeheader.alpha = 1; + titlesize = 2.0; + self.customgametypesubheader = createfontstring( font, titlesize ); + self.customgametypesubheader setparent( self.customgametypeheader ); + self.customgametypesubheader setpoint( "TOP", "BOTTOM", 0, 0 ); + self.customgametypesubheader.glowalpha = 1; + self.customgametypesubheader.hidewheninmenu = 1; + self.customgametypesubheader.archived = 0; + self.customgametypesubheader.color = ( 1, 1, 0.6 ); + self.customgametypesubheader.alpha = 1; +} + +hintmessage( hinttext, duration ) +{ + notifydata = spawnstruct(); + notifydata.notifytext = hinttext; + notifydata.duration = duration; + notifymessage( notifydata ); +} + +hintmessageplayers( players, hinttext, duration ) +{ + notifydata = spawnstruct(); + notifydata.notifytext = hinttext; + notifydata.duration = duration; + + for ( i = 0; i < players.size; i++ ) + players[i] notifymessage( notifydata ); +} + +showinitialfactionpopup( team ) +{ + self luinotifyevent( &"faction_popup", 1, game["strings"][team + "_name"] ); + maps\mp\gametypes\_hud_message::oldnotifymessage( undefined, undefined, undefined, undefined ); +} + +initnotifymessage() +{ + if ( !sessionmodeiszombiesgame() ) + { + if ( self issplitscreen() ) + { + titlesize = 2.0; + textsize = 1.4; + iconsize = 24; + font = "big"; + point = "TOP"; + relativepoint = "BOTTOM"; + yoffset = 30; + xoffset = 30; + } + else + { + titlesize = 2.5; + textsize = 1.75; + iconsize = 30; + font = "big"; + point = "TOP"; + relativepoint = "BOTTOM"; + yoffset = 0; + xoffset = 0; + } + } + else if ( self issplitscreen() ) + { + titlesize = 2.0; + textsize = 1.4; + iconsize = 24; + font = "big"; + point = "TOP"; + relativepoint = "BOTTOM"; + yoffset = 30; + xoffset = 30; + } + else + { + titlesize = 2.5; + textsize = 1.75; + iconsize = 30; + font = "big"; + point = "BOTTOM LEFT"; + relativepoint = "TOP"; + yoffset = 0; + xoffset = 0; + } + + self.notifytitle = createfontstring( font, titlesize ); + self.notifytitle setpoint( point, undefined, xoffset, yoffset ); + self.notifytitle.glowalpha = 1; + self.notifytitle.hidewheninmenu = 1; + self.notifytitle.archived = 0; + self.notifytitle.alpha = 0; + self.notifytext = createfontstring( font, textsize ); + self.notifytext setparent( self.notifytitle ); + self.notifytext setpoint( point, relativepoint, 0, 0 ); + self.notifytext.glowalpha = 1; + self.notifytext.hidewheninmenu = 1; + self.notifytext.archived = 0; + self.notifytext.alpha = 0; + self.notifytext2 = createfontstring( font, textsize ); + self.notifytext2 setparent( self.notifytitle ); + self.notifytext2 setpoint( point, relativepoint, 0, 0 ); + self.notifytext2.glowalpha = 1; + self.notifytext2.hidewheninmenu = 1; + self.notifytext2.archived = 0; + self.notifytext2.alpha = 0; + self.notifyicon = createicon( "white", iconsize, iconsize ); + self.notifyicon setparent( self.notifytext2 ); + self.notifyicon setpoint( point, relativepoint, 0, 0 ); + self.notifyicon.hidewheninmenu = 1; + self.notifyicon.archived = 0; + self.notifyicon.alpha = 0; + self.doingnotify = 0; + self.notifyqueue = []; +} + +oldnotifymessage( titletext, notifytext, iconname, glowcolor, sound, duration ) +{ + if ( level.wagermatch && !level.teambased ) + return; + + notifydata = spawnstruct(); + notifydata.titletext = titletext; + notifydata.notifytext = notifytext; + notifydata.iconname = iconname; + notifydata.sound = sound; + notifydata.duration = duration; + self.startmessagenotifyqueue[self.startmessagenotifyqueue.size] = notifydata; + self notify( "received award" ); +} + +notifymessage( notifydata ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self.messagenotifyqueue[self.messagenotifyqueue.size] = notifydata; + self notify( "received award" ); +} + +playnotifyloop( duration ) +{ + playnotifyloop = spawn( "script_origin", ( 0, 0, 0 ) ); + playnotifyloop playloopsound( "uin_notify_data_loop" ); + duration -= 4; + + if ( duration < 1 ) + duration = 1; + + wait( duration ); + playnotifyloop delete(); +} + +shownotifymessage( notifydata, duration ) +{ + self endon( "disconnect" ); + self.doingnotify = 1; + waitrequirevisibility( 0 ); + self notify( "notifyMessageBegin", duration ); + self thread resetoncancel(); + + if ( isdefined( notifydata.sound ) ) + self playlocalsound( notifydata.sound ); + + if ( isdefined( notifydata.musicstate ) ) + self maps\mp\_music::setmusicstate( notifydata.music ); + + if ( isdefined( notifydata.leadersound ) ) + self maps\mp\gametypes\_globallogic_audio::leaderdialogonplayer( notifydata.leadersound ); + + if ( isdefined( notifydata.glowcolor ) ) + glowcolor = notifydata.glowcolor; + else + glowcolor = ( 0, 0, 0 ); + + if ( isdefined( notifydata.color ) ) + color = notifydata.color; + else + color = ( 1, 1, 1 ); + + anchorelem = self.notifytitle; + + if ( isdefined( notifydata.titletext ) ) + { + if ( isdefined( notifydata.titlelabel ) ) + self.notifytitle.label = notifydata.titlelabel; + else + self.notifytitle.label = &""; + + if ( isdefined( notifydata.titlelabel ) && !isdefined( notifydata.titleisstring ) ) + self.notifytitle setvalue( notifydata.titletext ); + else + self.notifytitle settext( notifydata.titletext ); + + self.notifytitle setcod7decodefx( 200, int( duration * 1000 ), 600 ); + self.notifytitle.glowcolor = glowcolor; + self.notifytitle.color = color; + self.notifytitle.alpha = 1; + } + + if ( isdefined( notifydata.notifytext ) ) + { + if ( isdefined( notifydata.textlabel ) ) + self.notifytext.label = notifydata.textlabel; + else + self.notifytext.label = &""; + + if ( isdefined( notifydata.textlabel ) && !isdefined( notifydata.textisstring ) ) + self.notifytext setvalue( notifydata.notifytext ); + else + self.notifytext settext( notifydata.notifytext ); + + self.notifytext setcod7decodefx( 100, int( duration * 1000 ), 600 ); + self.notifytext.glowcolor = glowcolor; + self.notifytext.color = color; + self.notifytext.alpha = 1; + anchorelem = self.notifytext; + } + + if ( isdefined( notifydata.notifytext2 ) ) + { + if ( self issplitscreen() ) + { + if ( isdefined( notifydata.text2label ) ) + self iprintlnbold( notifydata.text2label, notifydata.notifytext2 ); + else + self iprintlnbold( notifydata.notifytext2 ); + } + else + { + self.notifytext2 setparent( anchorelem ); + + if ( isdefined( notifydata.text2label ) ) + self.notifytext2.label = notifydata.text2label; + else + self.notifytext2.label = &""; + + self.notifytext2 settext( notifydata.notifytext2 ); + self.notifytext2 setpulsefx( 100, int( duration * 1000 ), 1000 ); + self.notifytext2.glowcolor = glowcolor; + self.notifytext2.color = color; + self.notifytext2.alpha = 1; + anchorelem = self.notifytext2; + } + } + + if ( isdefined( notifydata.iconname ) ) + { + iconwidth = 60; + iconheight = 60; + + if ( isdefined( notifydata.iconwidth ) ) + iconwidth = notifydata.iconwidth; + + if ( isdefined( notifydata.iconheight ) ) + iconheight = notifydata.iconheight; + + self.notifyicon setparent( anchorelem ); + self.notifyicon setshader( notifydata.iconname, iconwidth, iconheight ); + self.notifyicon.alpha = 0; + self.notifyicon fadeovertime( 1.0 ); + self.notifyicon.alpha = 1; + waitrequirevisibility( duration ); + self.notifyicon fadeovertime( 0.75 ); + self.notifyicon.alpha = 0; + } + else + waitrequirevisibility( duration ); + + self notify( "notifyMessageDone" ); + self.doingnotify = 0; +} + +waitrequirevisibility( waittime ) +{ + interval = 0.05; + + while ( !self canreadtext() ) + wait( interval ); + + while ( waittime > 0 ) + { + wait( interval ); + + if ( self canreadtext() ) + waittime -= interval; + } +} + +canreadtext() +{ + if ( self maps\mp\_utility::isflashbanged() ) + return false; + + return true; +} + +resetondeath() +{ + self endon( "notifyMessageDone" ); + self endon( "disconnect" ); + level endon( "game_ended" ); + + self waittill( "death" ); + + resetnotify(); +} + +resetoncancel() +{ + self notify( "resetOnCancel" ); + self endon( "resetOnCancel" ); + self endon( "notifyMessageDone" ); + self endon( "disconnect" ); + + level waittill( "cancel_notify" ); + + resetnotify(); +} + +resetnotify() +{ + self.notifytitle.alpha = 0; + self.notifytext.alpha = 0; + self.notifyicon.alpha = 0; + self.doingnotify = 0; +} + +hintmessagedeaththink() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "death" ); + + if ( isdefined( self.hintmessage ) ) + self.hintmessage destroyelem(); + } +} + +lowermessagethink() +{ + self endon( "disconnect" ); + messagetexty = level.lowertexty; + + if ( self issplitscreen() ) + messagetexty = level.lowertexty - 50; + + self.lowermessage = createfontstring( "default", level.lowertextfontsize ); + self.lowermessage setpoint( "CENTER", level.lowertextyalign, 0, messagetexty ); + self.lowermessage settext( "" ); + self.lowermessage.archived = 0; + timerfontsize = 1.5; + + if ( self issplitscreen() ) + timerfontsize = 1.4; + + self.lowertimer = createfontstring( "default", timerfontsize ); + self.lowertimer setparent( self.lowermessage ); + self.lowertimer setpoint( "TOP", "BOTTOM", 0, 0 ); + self.lowertimer settext( "" ); + self.lowertimer.archived = 0; +} + +setmatchscorehudelemforteam( team ) +{ + if ( level.roundscorecarry ) + self setvalue( getteamscore( team ) ); + else + self setvalue( getroundswon( team ) ); +} + +teamoutcomenotify( winner, isround, endreasontext ) +{ + self endon( "disconnect" ); + self notify( "reset_outcome" ); + team = self.pers["team"]; + + if ( isdefined( team ) && team == "spectator" ) + { + for ( i = 0; i < level.players.size; i++ ) + { + if ( self.currentspectatingclient == level.players[i].clientid ) + { + team = level.players[i].pers["team"]; + break; + } + } + } + + if ( !isdefined( team ) || !isdefined( level.teams[team] ) ) + team = "allies"; + + while ( self.doingnotify ) + wait 0.05; + + self endon( "reset_outcome" ); + headerfont = "extrabig"; + font = "default"; + + if ( self issplitscreen() ) + { + titlesize = 2.0; + textsize = 1.5; + iconsize = 30; + spacing = 10; + } + else + { + titlesize = 3.0; + textsize = 2.0; + iconsize = 70; + spacing = 25; + } + + duration = 60000; + outcometitle = createfontstring( headerfont, titlesize ); + outcometitle setpoint( "TOP", undefined, 0, 30 ); + outcometitle.glowalpha = 1; + outcometitle.hidewheninmenu = 0; + outcometitle.archived = 0; + outcometitle.immunetodemogamehudsettings = 1; + outcometitle.immunetodemofreecamera = 1; + outcometext = createfontstring( font, 2.0 ); + outcometext setparent( outcometitle ); + outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); + outcometext.glowalpha = 1; + outcometext.hidewheninmenu = 0; + outcometext.archived = 0; + outcometext.immunetodemogamehudsettings = 1; + outcometext.immunetodemofreecamera = 1; + + if ( winner == "halftime" ) + { + outcometitle settext( game["strings"]["halftime"] ); + outcometitle.color = ( 1, 1, 1 ); + winner = "allies"; + } + else if ( winner == "intermission" ) + { + outcometitle settext( game["strings"]["intermission"] ); + outcometitle.color = ( 1, 1, 1 ); + winner = "allies"; + } + else if ( winner == "roundend" ) + { + outcometitle settext( game["strings"]["roundend"] ); + outcometitle.color = ( 1, 1, 1 ); + winner = "allies"; + } + else if ( winner == "overtime" ) + { + outcometitle settext( game["strings"]["overtime"] ); + outcometitle.color = ( 1, 1, 1 ); + winner = "allies"; + } + else if ( winner == "tie" ) + { + if ( isround ) + outcometitle settext( game["strings"]["round_draw"] ); + else + outcometitle settext( game["strings"]["draw"] ); + + outcometitle.color = ( 0.29, 0.61, 0.7 ); + winner = "allies"; + } + else if ( isdefined( self.pers["team"] ) && winner == team ) + { + if ( isround ) + outcometitle settext( game["strings"]["round_win"] ); + else + outcometitle settext( game["strings"]["victory"] ); + + outcometitle.color = ( 0.42, 0.68, 0.46 ); + + if ( isdefined( level.endvictoryreasontext ) ) + endreasontext = level.endvictoryreasontext; + } + else + { + if ( isround ) + outcometitle settext( game["strings"]["round_loss"] ); + else + outcometitle settext( game["strings"]["defeat"] ); + + outcometitle.color = ( 0.73, 0.29, 0.19 ); + + if ( isdefined( level.enddefeatreasontext ) ) + endreasontext = level.enddefeatreasontext; + } + + outcometext settext( endreasontext ); + outcometitle setcod7decodefx( 200, duration, 600 ); + outcometext setpulsefx( 100, duration, 1000 ); + iconspacing = 100; + currentx = ( level.teamcount - 1 ) * -1 * iconspacing / 2; + teamicons = []; + teamicons[team] = createicon( game["icons"][team], iconsize, iconsize ); + teamicons[team] setparent( outcometext ); + teamicons[team] setpoint( "TOP", "BOTTOM", currentx, spacing ); + teamicons[team].hidewheninmenu = 0; + teamicons[team].archived = 0; + teamicons[team].immunetodemogamehudsettings = 1; + teamicons[team].immunetodemofreecamera = 1; + teamicons[team].alpha = 0; + teamicons[team] fadeovertime( 0.5 ); + teamicons[team].alpha = 1; + currentx += iconspacing; + + foreach ( enemyteam in level.teams ) + { + if ( team == enemyteam ) + continue; + + teamicons[enemyteam] = createicon( game["icons"][enemyteam], iconsize, iconsize ); + teamicons[enemyteam] setparent( outcometext ); + teamicons[enemyteam] setpoint( "TOP", "BOTTOM", currentx, spacing ); + teamicons[enemyteam].hidewheninmenu = 0; + teamicons[enemyteam].archived = 0; + teamicons[enemyteam].immunetodemogamehudsettings = 1; + teamicons[enemyteam].immunetodemofreecamera = 1; + teamicons[enemyteam].alpha = 0; + teamicons[enemyteam] fadeovertime( 0.5 ); + teamicons[enemyteam].alpha = 1; + currentx += iconspacing; + } + + teamscores = []; + teamscores[team] = createfontstring( font, titlesize ); + teamscores[team] setparent( teamicons[team] ); + teamscores[team] setpoint( "TOP", "BOTTOM", 0, spacing ); + teamscores[team].glowalpha = 1; + + if ( isround ) + teamscores[team] setvalue( getteamscore( team ) ); + else + teamscores[team] [[ level.setmatchscorehudelemforteam ]]( team ); + + teamscores[team].hidewheninmenu = 0; + teamscores[team].archived = 0; + teamscores[team].immunetodemogamehudsettings = 1; + teamscores[team].immunetodemofreecamera = 1; + teamscores[team] setpulsefx( 100, duration, 1000 ); + + foreach ( enemyteam in level.teams ) + { + if ( team == enemyteam ) + continue; + + teamscores[enemyteam] = createfontstring( headerfont, titlesize ); + teamscores[enemyteam] setparent( teamicons[enemyteam] ); + teamscores[enemyteam] setpoint( "TOP", "BOTTOM", 0, spacing ); + teamscores[enemyteam].glowalpha = 1; + + if ( isround ) + teamscores[enemyteam] setvalue( getteamscore( enemyteam ) ); + else + teamscores[enemyteam] [[ level.setmatchscorehudelemforteam ]]( enemyteam ); + + teamscores[enemyteam].hidewheninmenu = 0; + teamscores[enemyteam].archived = 0; + teamscores[enemyteam].immunetodemogamehudsettings = 1; + teamscores[enemyteam].immunetodemofreecamera = 1; + teamscores[enemyteam] setpulsefx( 100, duration, 1000 ); + } + + font = "objective"; + matchbonus = undefined; + + if ( isdefined( self.matchbonus ) ) + { + bonus = ceil( self.matchbonus * level.xpscale ); + + if ( bonus > 0 ) + { + matchbonus = createfontstring( font, 2.0 ); + matchbonus setparent( outcometext ); + matchbonus setpoint( "TOP", "BOTTOM", 0, iconsize + spacing * 3 + teamscores[team].height ); + matchbonus.glowalpha = 1; + matchbonus.hidewheninmenu = 0; + matchbonus.archived = 0; + matchbonus.immunetodemogamehudsettings = 1; + matchbonus.immunetodemofreecamera = 1; + matchbonus.label = game["strings"]["match_bonus"]; + matchbonus setvalue( bonus ); + } + } + + self thread resetoutcomenotify( teamicons, teamscores, outcometitle, outcometext ); +} + +teamoutcomenotifyzombie( winner, isround, endreasontext ) +{ + self endon( "disconnect" ); + self notify( "reset_outcome" ); + team = self.pers["team"]; + + if ( isdefined( team ) && team == "spectator" ) + { + for ( i = 0; i < level.players.size; i++ ) + { + if ( self.currentspectatingclient == level.players[i].clientid ) + { + team = level.players[i].pers["team"]; + break; + } + } + } + + if ( !isdefined( team ) || !isdefined( level.teams[team] ) ) + team = "allies"; + + while ( self.doingnotify ) + wait 0.05; + + self endon( "reset_outcome" ); + + if ( level.splitscreen ) + { + titlesize = 2.0; + spacing = 10; + font = "default"; + } + else + { + titlesize = 3.0; + spacing = 50; + font = "objective"; + } + + outcometitle = createfontstring( font, titlesize ); + outcometitle setpoint( "TOP", undefined, 0, spacing ); + outcometitle.glowalpha = 1; + outcometitle.hidewheninmenu = 0; + outcometitle.archived = 0; + outcometitle.immunetodemogamehudsettings = 1; + outcometitle.immunetodemofreecamera = 1; + outcometitle settext( endreasontext ); + outcometitle setpulsefx( 100, 60000, 1000 ); + self thread resetoutcomenotify( undefined, undefined, outcometitle ); +} + +isintop( players, topn ) +{ + for ( i = 0; i < topn; i++ ) + { + if ( isdefined( players[i] ) && self == players[i] ) + return true; + } + + return false; +} + +outcomenotify( winner, isroundend, endreasontext ) +{ + self endon( "disconnect" ); + self notify( "reset_outcome" ); + + while ( self.doingnotify ) + wait 0.05; + + self endon( "reset_outcome" ); + headerfont = "extrabig"; + font = "default"; + + if ( self issplitscreen() ) + { + titlesize = 2.0; + winnersize = 1.5; + othersize = 1.5; + iconsize = 30; + spacing = 10; + } + else + { + titlesize = 3.0; + winnersize = 2.0; + othersize = 1.5; + iconsize = 30; + spacing = 20; + } + + duration = 60000; + players = level.placement["all"]; + outcometitle = createfontstring( headerfont, titlesize ); + outcometitle setpoint( "TOP", undefined, 0, spacing ); + + if ( !maps\mp\_utility::isoneround() && !isroundend ) + outcometitle settext( game["strings"]["game_over"] ); + else if ( players[0].pointstowin == 0 ) + outcometitle settext( game["strings"]["tie"] ); + else if ( self isintop( players, 3 ) ) + { + outcometitle settext( game["strings"]["victory"] ); + outcometitle.color = ( 0.42, 0.68, 0.46 ); + } + else + { + outcometitle settext( game["strings"]["defeat"] ); + outcometitle.color = ( 0.73, 0.29, 0.19 ); + } + + outcometitle.glowalpha = 1; + outcometitle.hidewheninmenu = 0; + outcometitle.archived = 0; + outcometitle.immunetodemogamehudsettings = 1; + outcometitle.immunetodemofreecamera = 1; + outcometitle setcod7decodefx( 200, duration, 600 ); + outcometext = createfontstring( font, 2.0 ); + outcometext setparent( outcometitle ); + outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); + outcometext.glowalpha = 1; + outcometext.hidewheninmenu = 0; + outcometext.archived = 0; + outcometext.immunetodemogamehudsettings = 1; + outcometext.immunetodemofreecamera = 1; + outcometext settext( endreasontext ); + firsttitle = createfontstring( font, winnersize ); + firsttitle setparent( outcometext ); + firsttitle setpoint( "TOP", "BOTTOM", 0, spacing ); + firsttitle.glowalpha = 1; + firsttitle.hidewheninmenu = 0; + firsttitle.archived = 0; + firsttitle.immunetodemogamehudsettings = 1; + firsttitle.immunetodemofreecamera = 1; + + if ( isdefined( players[0] ) ) + { + firsttitle.label = &"MP_FIRSTPLACE_NAME"; + firsttitle setplayernamestring( players[0] ); + firsttitle setcod7decodefx( 175, duration, 600 ); + } + + secondtitle = createfontstring( font, othersize ); + secondtitle setparent( firsttitle ); + secondtitle setpoint( "TOP", "BOTTOM", 0, spacing ); + secondtitle.glowalpha = 1; + secondtitle.hidewheninmenu = 0; + secondtitle.archived = 0; + secondtitle.immunetodemogamehudsettings = 1; + secondtitle.immunetodemofreecamera = 1; + + if ( isdefined( players[1] ) ) + { + secondtitle.label = &"MP_SECONDPLACE_NAME"; + secondtitle setplayernamestring( players[1] ); + secondtitle setcod7decodefx( 175, duration, 600 ); + } + + thirdtitle = createfontstring( font, othersize ); + thirdtitle setparent( secondtitle ); + thirdtitle setpoint( "TOP", "BOTTOM", 0, spacing ); + thirdtitle setparent( secondtitle ); + thirdtitle.glowalpha = 1; + thirdtitle.hidewheninmenu = 0; + thirdtitle.archived = 0; + thirdtitle.immunetodemogamehudsettings = 1; + thirdtitle.immunetodemofreecamera = 1; + + if ( isdefined( players[2] ) ) + { + thirdtitle.label = &"MP_THIRDPLACE_NAME"; + thirdtitle setplayernamestring( players[2] ); + thirdtitle setcod7decodefx( 175, duration, 600 ); + } + + matchbonus = createfontstring( font, 2.0 ); + matchbonus setparent( thirdtitle ); + matchbonus setpoint( "TOP", "BOTTOM", 0, spacing ); + matchbonus.glowalpha = 1; + matchbonus.hidewheninmenu = 0; + matchbonus.archived = 0; + matchbonus.immunetodemogamehudsettings = 1; + matchbonus.immunetodemofreecamera = 1; + + if ( isdefined( self.matchbonus ) ) + { + bonus = ceil( self.matchbonus * level.xpscale ); + + if ( bonus > 0 ) + { + matchbonus.label = game["strings"]["match_bonus"]; + matchbonus setvalue( bonus ); + } + } + + self thread updateoutcome( firsttitle, secondtitle, thirdtitle ); + self thread resetoutcomenotify( undefined, undefined, outcometitle, outcometext, firsttitle, secondtitle, thirdtitle, matchbonus ); +} + +wageroutcomenotify( winner, endreasontext ) +{ + self endon( "disconnect" ); + self notify( "reset_outcome" ); + + while ( self.doingnotify ) + wait 0.05; + + setmatchflag( "enable_popups", 0 ); + self endon( "reset_outcome" ); + headerfont = "extrabig"; + font = "objective"; + + if ( self issplitscreen() ) + { + titlesize = 2.0; + winnersize = 1.5; + othersize = 1.5; + iconsize = 30; + spacing = 2; + } + else + { + titlesize = 3.0; + winnersize = 2.0; + othersize = 1.5; + iconsize = 30; + spacing = 20; + } + + halftime = 0; + + if ( isdefined( level.sidebet ) && level.sidebet ) + halftime = 1; + + duration = 60000; + players = level.placement["all"]; + outcometitle = createfontstring( headerfont, titlesize ); + outcometitle setpoint( "TOP", undefined, 0, spacing ); + + if ( halftime ) + { + outcometitle settext( game["strings"]["intermission"] ); + outcometitle.color = ( 1, 1, 0 ); + outcometitle.glowcolor = ( 1, 0, 0 ); + } + else if ( isdefined( level.dontcalcwagerwinnings ) && level.dontcalcwagerwinnings == 1 ) + { + outcometitle settext( game["strings"]["wager_topwinners"] ); + outcometitle.color = ( 0.42, 0.68, 0.46 ); + } + else if ( isdefined( self.wagerwinnings ) && self.wagerwinnings > 0 ) + { + outcometitle settext( game["strings"]["wager_inthemoney"] ); + outcometitle.color = ( 0.42, 0.68, 0.46 ); + } + else + { + outcometitle settext( game["strings"]["wager_loss"] ); + outcometitle.color = ( 0.73, 0.29, 0.19 ); + } + + outcometitle.glowalpha = 1; + outcometitle.hidewheninmenu = 0; + outcometitle.archived = 0; + outcometitle.immunetodemogamehudsettings = 1; + outcometitle.immunetodemofreecamera = 1; + outcometitle setcod7decodefx( 200, duration, 600 ); + outcometext = createfontstring( font, 2.0 ); + outcometext setparent( outcometitle ); + outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); + outcometext.glowalpha = 1; + outcometext.hidewheninmenu = 0; + outcometext.archived = 0; + outcometext.immunetodemogamehudsettings = 1; + outcometext.immunetodemofreecamera = 1; + outcometext settext( endreasontext ); + playernamehudelems = []; + playercphudelems = []; + numplayers = players.size; + + for ( i = 0; i < numplayers; i++ ) + { + if ( !halftime && isdefined( players[i] ) ) + { + secondtitle = createfontstring( font, othersize ); + + if ( playernamehudelems.size == 0 ) + { + secondtitle setparent( outcometext ); + secondtitle setpoint( "TOP_LEFT", "BOTTOM", -175, spacing * 3 ); + } + else + { + secondtitle setparent( playernamehudelems[playernamehudelems.size - 1] ); + secondtitle setpoint( "TOP_LEFT", "BOTTOM_LEFT", 0, spacing ); + } + + secondtitle.glowalpha = 1; + secondtitle.hidewheninmenu = 0; + secondtitle.archived = 0; + secondtitle.immunetodemogamehudsettings = 1; + secondtitle.immunetodemofreecamera = 1; + secondtitle.label = &"MP_WAGER_PLACE_NAME"; + secondtitle.playernum = i; + secondtitle setplayernamestring( players[i] ); + playernamehudelems[playernamehudelems.size] = secondtitle; + secondcp = createfontstring( font, othersize ); + secondcp setparent( secondtitle ); + secondcp setpoint( "TOP_RIGHT", "TOP_LEFT", 350, 0 ); + secondcp.glowalpha = 1; + secondcp.hidewheninmenu = 0; + secondcp.archived = 0; + secondcp.immunetodemogamehudsettings = 1; + secondcp.immunetodemofreecamera = 1; + secondcp.label = &"MENU_POINTS"; + secondcp.currentvalue = 0; + + if ( isdefined( players[i].wagerwinnings ) ) + secondcp.targetvalue = players[i].wagerwinnings; + else + secondcp.targetvalue = 0; + + if ( secondcp.targetvalue > 0 ) + secondcp.color = ( 0.42, 0.68, 0.46 ); + + secondcp setvalue( 0 ); + playercphudelems[playercphudelems.size] = secondcp; + } + } + + self thread updatewageroutcome( playernamehudelems, playercphudelems ); + self thread resetwageroutcomenotify( playernamehudelems, playercphudelems, outcometitle, outcometext ); + + if ( halftime ) + return; + + stillupdating = 1; + countupduration = 2; + cpincrement = 9999; + + if ( isdefined( playercphudelems[0] ) ) + { + cpincrement = int( playercphudelems[0].targetvalue / ( countupduration / 0.05 ) ); + + if ( cpincrement < 1 ) + cpincrement = 1; + } + + while ( stillupdating ) + { + stillupdating = 0; + + for ( i = 0; i < playercphudelems.size; i++ ) + { + if ( isdefined( playercphudelems[i] ) && playercphudelems[i].currentvalue < playercphudelems[i].targetvalue ) + { + playercphudelems[i].currentvalue += cpincrement; + + if ( playercphudelems[i].currentvalue > playercphudelems[i].targetvalue ) + playercphudelems[i].currentvalue = playercphudelems[i].targetvalue; + + playercphudelems[i] setvalue( playercphudelems[i].currentvalue ); + stillupdating = 1; + } + } + + wait 0.05; + } +} + +teamwageroutcomenotify( winner, isroundend, endreasontext ) +{ + self endon( "disconnect" ); + self notify( "reset_outcome" ); + team = self.pers["team"]; + + if ( !isdefined( team ) || !isdefined( level.teams[team] ) ) + team = "allies"; + + wait 0.05; + + while ( self.doingnotify ) + wait 0.05; + + self endon( "reset_outcome" ); + headerfont = "extrabig"; + font = "objective"; + + if ( self issplitscreen() ) + { + titlesize = 2.0; + textsize = 1.5; + iconsize = 30; + spacing = 10; + } + else + { + titlesize = 3.0; + textsize = 2.0; + iconsize = 70; + spacing = 15; + } + + halftime = 0; + + if ( isdefined( level.sidebet ) && level.sidebet ) + halftime = 1; + + duration = 60000; + outcometitle = createfontstring( headerfont, titlesize ); + outcometitle setpoint( "TOP", undefined, 0, spacing ); + outcometitle.glowalpha = 1; + outcometitle.hidewheninmenu = 0; + outcometitle.archived = 0; + outcometitle.immunetodemogamehudsettings = 1; + outcometitle.immunetodemofreecamera = 1; + outcometext = createfontstring( font, 2.0 ); + outcometext setparent( outcometitle ); + outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); + outcometext.glowalpha = 1; + outcometext.hidewheninmenu = 0; + outcometext.archived = 0; + outcometext.immunetodemogamehudsettings = 1; + outcometext.immunetodemofreecamera = 1; + + if ( winner == "tie" ) + { + if ( isroundend ) + outcometitle settext( game["strings"]["round_draw"] ); + else + outcometitle settext( game["strings"]["draw"] ); + + outcometitle.color = ( 1, 1, 1 ); + winner = "allies"; + } + else if ( winner == "overtime" ) + { + outcometitle settext( game["strings"]["overtime"] ); + outcometitle.color = ( 1, 1, 1 ); + } + else if ( isdefined( self.pers["team"] ) && winner == team ) + { + if ( isroundend ) + outcometitle settext( game["strings"]["round_win"] ); + else + outcometitle settext( game["strings"]["victory"] ); + + outcometitle.color = ( 0.42, 0.68, 0.46 ); + } + else + { + if ( isroundend ) + outcometitle settext( game["strings"]["round_loss"] ); + else + outcometitle settext( game["strings"]["defeat"] ); + + outcometitle.color = ( 0.73, 0.29, 0.19 ); + } + + if ( !isdefined( level.dontshowendreason ) || !level.dontshowendreason ) + outcometext settext( endreasontext ); + + outcometitle setpulsefx( 100, duration, 1000 ); + outcometext setpulsefx( 100, duration, 1000 ); + teamicons = []; + teamicons[team] = createicon( game["icons"][team], iconsize, iconsize ); + teamicons[team] setparent( outcometext ); + teamicons[team] setpoint( "TOP", "BOTTOM", -60, spacing ); + teamicons[team].hidewheninmenu = 0; + teamicons[team].archived = 0; + teamicons[team].alpha = 0; + teamicons[team] fadeovertime( 0.5 ); + teamicons[team].alpha = 1; + teamicons[team].immunetodemogamehudsettings = 1; + teamicons[team].immunetodemofreecamera = 1; + + foreach ( enemyteam in level.teams ) + { + if ( team == enemyteam ) + continue; + + teamicons[enemyteam] = createicon( game["icons"][enemyteam], iconsize, iconsize ); + teamicons[enemyteam] setparent( outcometext ); + teamicons[enemyteam] setpoint( "TOP", "BOTTOM", 60, spacing ); + teamicons[enemyteam].hidewheninmenu = 0; + teamicons[enemyteam].archived = 0; + teamicons[enemyteam].alpha = 0; + teamicons[enemyteam] fadeovertime( 0.5 ); + teamicons[enemyteam].alpha = 1; + teamicons[enemyteam].immunetodemogamehudsettings = 1; + teamicons[enemyteam].immunetodemofreecamera = 1; + } + + teamscores = []; + teamscores[team] = createfontstring( font, titlesize ); + teamscores[team] setparent( teamicons[team] ); + teamscores[team] setpoint( "TOP", "BOTTOM", 0, spacing ); + teamscores[team].glowalpha = 1; + teamscores[team] setvalue( getteamscore( team ) ); + teamscores[team].hidewheninmenu = 0; + teamscores[team].archived = 0; + teamscores[team].immunetodemogamehudsettings = 1; + teamscores[team].immunetodemofreecamera = 1; + teamscores[team] setpulsefx( 100, duration, 1000 ); + + foreach ( enemyteam in level.teams ) + { + if ( team == enemyteam ) + continue; + + teamscores[enemyteam] = createfontstring( font, titlesize ); + teamscores[enemyteam] setparent( teamicons[enemyteam] ); + teamscores[enemyteam] setpoint( "TOP", "BOTTOM", 0, spacing ); + teamscores[enemyteam].glowalpha = 1; + teamscores[enemyteam] setvalue( getteamscore( enemyteam ) ); + teamscores[enemyteam].hidewheninmenu = 0; + teamscores[enemyteam].archived = 0; + teamscores[enemyteam].immunetodemogamehudsettings = 1; + teamscores[enemyteam].immunetodemofreecamera = 1; + teamscores[enemyteam] setpulsefx( 100, duration, 1000 ); + } + + matchbonus = undefined; + sidebetwinnings = undefined; + + if ( !isroundend && !halftime && isdefined( self.wagerwinnings ) ) + { + matchbonus = createfontstring( font, 2.0 ); + matchbonus setparent( outcometext ); + matchbonus setpoint( "TOP", "BOTTOM", 0, iconsize + spacing * 3 + teamscores[team].height ); + matchbonus.glowalpha = 1; + matchbonus.hidewheninmenu = 0; + matchbonus.archived = 0; + matchbonus.immunetodemogamehudsettings = 1; + matchbonus.immunetodemofreecamera = 1; + matchbonus.label = game["strings"]["wager_winnings"]; + matchbonus setvalue( self.wagerwinnings ); + + if ( isdefined( game["side_bets"] ) && game["side_bets"] ) + { + sidebetwinnings = createfontstring( font, 2.0 ); + sidebetwinnings setparent( matchbonus ); + sidebetwinnings setpoint( "TOP", "BOTTOM", 0, spacing ); + sidebetwinnings.glowalpha = 1; + sidebetwinnings.hidewheninmenu = 0; + sidebetwinnings.archived = 0; + sidebetwinnings.immunetodemogamehudsettings = 1; + sidebetwinnings.immunetodemofreecamera = 1; + sidebetwinnings.label = game["strings"]["wager_sidebet_winnings"]; + sidebetwinnings setvalue( self.pers["wager_sideBetWinnings"] ); + } + } + + self thread resetoutcomenotify( teamicons, teamscores, outcometitle, outcometext, matchbonus, sidebetwinnings ); +} + +destroyhudelem( hudelem ) +{ + if ( isdefined( hudelem ) ) + hudelem destroyelem(); +} + +resetoutcomenotify( hudelemlist1, hudelemlist2, hudelem3, hudelem4, hudelem5, hudelem6, hudelem7, hudelem8, hudelem9, hudelem10 ) +{ + self endon( "disconnect" ); + + self waittill( "reset_outcome" ); + + destroyhudelem( hudelem3 ); + destroyhudelem( hudelem4 ); + destroyhudelem( hudelem5 ); + destroyhudelem( hudelem6 ); + destroyhudelem( hudelem7 ); + destroyhudelem( hudelem8 ); + destroyhudelem( hudelem9 ); + destroyhudelem( hudelem10 ); + + if ( isdefined( hudelemlist1 ) ) + { + foreach ( elem in hudelemlist1 ) + destroyhudelem( elem ); + } + + if ( isdefined( hudelemlist2 ) ) + { + foreach ( elem in hudelemlist2 ) + destroyhudelem( elem ); + } +} + +resetwageroutcomenotify( playernamehudelems, playercphudelems, outcometitle, outcometext ) +{ + self endon( "disconnect" ); + + self waittill( "reset_outcome" ); + + for ( i = playernamehudelems.size - 1; i >= 0; i-- ) + { + if ( isdefined( playernamehudelems[i] ) ) + playernamehudelems[i] destroy(); + } + + for ( i = playercphudelems.size - 1; i >= 0; i-- ) + { + if ( isdefined( playercphudelems[i] ) ) + playercphudelems[i] destroy(); + } + + if ( isdefined( outcometext ) ) + outcometext destroy(); + + if ( isdefined( outcometitle ) ) + outcometitle destroy(); +} + +updateoutcome( firsttitle, secondtitle, thirdtitle ) +{ + self endon( "disconnect" ); + self endon( "reset_outcome" ); + + while ( true ) + { + self waittill( "update_outcome" ); + + players = level.placement["all"]; + + if ( isdefined( firsttitle ) && isdefined( players[0] ) ) + firsttitle setplayernamestring( players[0] ); + else if ( isdefined( firsttitle ) ) + firsttitle.alpha = 0; + + if ( isdefined( secondtitle ) && isdefined( players[1] ) ) + secondtitle setplayernamestring( players[1] ); + else if ( isdefined( secondtitle ) ) + secondtitle.alpha = 0; + + if ( isdefined( thirdtitle ) && isdefined( players[2] ) ) + thirdtitle setplayernamestring( players[2] ); + else if ( isdefined( thirdtitle ) ) + thirdtitle.alpha = 0; + } +} + +updatewageroutcome( playernamehudelems, playercphudelems ) +{ + self endon( "disconnect" ); + self endon( "reset_outcome" ); + + while ( true ) + { + self waittill( "update_outcome" ); + + players = level.placement["all"]; + + for ( i = 0; i < playernamehudelems.size; i++ ) + { + if ( isdefined( playernamehudelems[i] ) && isdefined( players[playernamehudelems[i].playernum] ) ) + { + playernamehudelems[i] setplayernamestring( players[playernamehudelems[i].playernum] ); + continue; + } + + if ( isdefined( playernamehudelems[i] ) ) + playernamehudelems[i].alpha = 0; + + if ( isdefined( playercphudelems[i] ) ) + playercphudelems[i].alpha = 0; + } + } +} + +setshoutcasterwaitingmessage() +{ + if ( !isdefined( self.waitingforplayerstext ) ) + { + self.waitingforplayerstext = createfontstring( "objective", 2.5 ); + self.waitingforplayerstext setpoint( "CENTER", "CENTER", 0, -80 ); + self.waitingforplayerstext.sort = 1001; + self.waitingforplayerstext settext( &"MP_WAITING_FOR_PLAYERS_SHOUTCASTER" ); + self.waitingforplayerstext.foreground = 0; + self.waitingforplayerstext.hidewheninmenu = 1; + } +} + +clearshoutcasterwaitingmessage() +{ + if ( isdefined( self.waitingforplayerstext ) ) + { + destroyhudelem( self.waitingforplayerstext ); + self.waitingforplayerstext = undefined; + } +} diff --git a/MP/Core/maps/mp/gametypes/_hud_util.gsc b/MP/Core/maps/mp/gametypes/_hud_util.gsc new file mode 100644 index 0000000..a155a95 --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_hud_util.gsc @@ -0,0 +1,1018 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +setparent( element ) +{ + if ( isdefined( self.parent ) && self.parent == element ) + return; + + if ( isdefined( self.parent ) ) + self.parent removechild( self ); + + self.parent = element; + self.parent addchild( self ); + + if ( isdefined( self.point ) ) + self setpoint( self.point, self.relativepoint, self.xoffset, self.yoffset ); + else + self setpoint( "TOP" ); +} + +getparent() +{ + return self.parent; +} + +addchild( element ) +{ + element.index = self.children.size; + self.children[self.children.size] = element; +} + +removechild( element ) +{ + element.parent = undefined; + + if ( self.children[self.children.size - 1] != element ) + { + self.children[element.index] = self.children[self.children.size - 1]; + self.children[element.index].index = element.index; + } + + self.children[self.children.size - 1] = undefined; + element.index = undefined; +} + +setpoint( point, relativepoint, xoffset, yoffset, movetime = 0 ) +{ + element = self getparent(); + + if ( movetime ) + self moveovertime( movetime ); + + if ( !isdefined( xoffset ) ) + xoffset = 0; + + self.xoffset = xoffset; + + if ( !isdefined( yoffset ) ) + yoffset = 0; + + self.yoffset = yoffset; + self.point = point; + self.alignx = "center"; + self.aligny = "middle"; + + switch ( point ) + { + case "CENTER": + break; + case "TOP": + self.aligny = "top"; + break; + case "BOTTOM": + self.aligny = "bottom"; + break; + case "LEFT": + self.alignx = "left"; + break; + case "RIGHT": + self.alignx = "right"; + break; + case "TOP_RIGHT": + case "TOPRIGHT": + self.aligny = "top"; + self.alignx = "right"; + break; + case "TOP_LEFT": + case "TOPLEFT": + self.aligny = "top"; + self.alignx = "left"; + break; + case "TOPCENTER": + self.aligny = "top"; + self.alignx = "center"; + break; + case "BOTTOM_RIGHT": + case "BOTTOM RIGHT": + self.aligny = "bottom"; + self.alignx = "right"; + break; + case "BOTTOM_LEFT": + case "BOTTOM LEFT": + self.aligny = "bottom"; + self.alignx = "left"; + break; + default: +/# + println( "^3Warning: unknown point passed to setPoint(): " + point ); +#/ + break; + } + + if ( !isdefined( relativepoint ) ) + relativepoint = point; + + self.relativepoint = relativepoint; + relativex = "center"; + relativey = "middle"; + + switch ( relativepoint ) + { + case "CENTER": + break; + case "TOP": + relativey = "top"; + break; + case "BOTTOM": + relativey = "bottom"; + break; + case "LEFT": + relativex = "left"; + break; + case "RIGHT": + relativex = "right"; + break; + case "TOP_RIGHT": + case "TOPRIGHT": + relativey = "top"; + relativex = "right"; + break; + case "TOP_LEFT": + case "TOPLEFT": + relativey = "top"; + relativex = "left"; + break; + case "TOPCENTER": + relativey = "top"; + relativex = "center"; + break; + case "BOTTOM_RIGHT": + case "BOTTOM RIGHT": + relativey = "bottom"; + relativex = "right"; + break; + case "BOTTOM_LEFT": + case "BOTTOM LEFT": + relativey = "bottom"; + relativex = "left"; + break; + default: +/# + println( "^3Warning: unknown relativePoint passed to setPoint(): " + relativepoint ); +#/ + break; + } + + if ( element == level.uiparent ) + { + self.horzalign = relativex; + self.vertalign = relativey; + } + else + { + self.horzalign = element.horzalign; + self.vertalign = element.vertalign; + } + + if ( relativex == element.alignx ) + { + offsetx = 0; + xfactor = 0; + } + else if ( relativex == "center" || element.alignx == "center" ) + { + offsetx = int( element.width / 2 ); + + if ( relativex == "left" || element.alignx == "right" ) + xfactor = -1; + else + xfactor = 1; + } + else + { + offsetx = element.width; + + if ( relativex == "left" ) + xfactor = -1; + else + xfactor = 1; + } + + self.x = element.x + offsetx * xfactor; + + if ( relativey == element.aligny ) + { + offsety = 0; + yfactor = 0; + } + else if ( relativey == "middle" || element.aligny == "middle" ) + { + offsety = int( element.height / 2 ); + + if ( relativey == "top" || element.aligny == "bottom" ) + yfactor = -1; + else + yfactor = 1; + } + else + { + offsety = element.height; + + if ( relativey == "top" ) + yfactor = -1; + else + yfactor = 1; + } + + self.y = element.y + offsety * yfactor; + self.x += self.xoffset; + self.y += self.yoffset; + + switch ( self.elemtype ) + { + case "bar": + setpointbar( point, relativepoint, xoffset, yoffset ); + self.barframe setparent( self getparent() ); + self.barframe setpoint( point, relativepoint, xoffset, yoffset ); + break; + } + + self updatechildren(); +} + +setpointbar( point, relativepoint, xoffset, yoffset ) +{ + self.bar.horzalign = self.horzalign; + self.bar.vertalign = self.vertalign; + self.bar.alignx = "left"; + self.bar.aligny = self.aligny; + self.bar.y = self.y; + + if ( self.alignx == "left" ) + self.bar.x = self.x; + else if ( self.alignx == "right" ) + self.bar.x = self.x - self.width; + else + self.bar.x = self.x - int( self.width / 2 ); + + if ( self.aligny == "top" ) + self.bar.y = self.y; + else if ( self.aligny == "bottom" ) + self.bar.y = self.y; + + self updatebar( self.bar.frac ); +} + +updatebar( barfrac, rateofchange ) +{ + if ( self.elemtype == "bar" ) + updatebarscale( barfrac, rateofchange ); +} + +updatebarscale( barfrac, rateofchange ) +{ + barwidth = int( self.width * barfrac + 0.5 ); + + if ( !barwidth ) + barwidth = 1; + + self.bar.frac = barfrac; + self.bar setshader( self.bar.shader, barwidth, self.height ); + assert( barwidth <= self.width, "barWidth <= self.width: " + barwidth + " <= " + self.width + " - barFrac was " + barfrac ); + + if ( isdefined( rateofchange ) && barwidth < self.width ) + { + if ( rateofchange > 0 ) + { + assert( ( 1 - barfrac ) / rateofchange > 0, "barFrac: " + barfrac + "rateOfChange: " + rateofchange ); + self.bar scaleovertime( ( 1 - barfrac ) / rateofchange, self.width, self.height ); + } + else if ( rateofchange < 0 ) + { + assert( barfrac / -1 * rateofchange > 0, "barFrac: " + barfrac + "rateOfChange: " + rateofchange ); + self.bar scaleovertime( barfrac / -1 * rateofchange, 1, self.height ); + } + } + + self.bar.rateofchange = rateofchange; + self.bar.lastupdatetime = gettime(); +} + +createfontstring( font, fontscale ) +{ + fontelem = newclienthudelem( self ); + fontelem.elemtype = "font"; + fontelem.font = font; + fontelem.fontscale = fontscale; + fontelem.x = 0; + fontelem.y = 0; + fontelem.width = 0; + fontelem.height = int( level.fontheight * fontscale ); + fontelem.xoffset = 0; + fontelem.yoffset = 0; + fontelem.children = []; + fontelem setparent( level.uiparent ); + fontelem.hidden = 0; + return fontelem; +} + +createserverfontstring( font, fontscale, team ) +{ + if ( isdefined( team ) ) + fontelem = newteamhudelem( team ); + else + fontelem = newhudelem(); + + fontelem.elemtype = "font"; + fontelem.font = font; + fontelem.fontscale = fontscale; + fontelem.x = 0; + fontelem.y = 0; + fontelem.width = 0; + fontelem.height = int( level.fontheight * fontscale ); + fontelem.xoffset = 0; + fontelem.yoffset = 0; + fontelem.children = []; + fontelem setparent( level.uiparent ); + fontelem.hidden = 0; + return fontelem; +} + +createservertimer( font, fontscale, team ) +{ + if ( isdefined( team ) ) + timerelem = newteamhudelem( team ); + else + timerelem = newhudelem(); + + timerelem.elemtype = "timer"; + timerelem.font = font; + timerelem.fontscale = fontscale; + timerelem.x = 0; + timerelem.y = 0; + timerelem.width = 0; + timerelem.height = int( level.fontheight * fontscale ); + timerelem.xoffset = 0; + timerelem.yoffset = 0; + timerelem.children = []; + timerelem setparent( level.uiparent ); + timerelem.hidden = 0; + return timerelem; +} + +createclienttimer( font, fontscale ) +{ + timerelem = newclienthudelem( self ); + timerelem.elemtype = "timer"; + timerelem.font = font; + timerelem.fontscale = fontscale; + timerelem.x = 0; + timerelem.y = 0; + timerelem.width = 0; + timerelem.height = int( level.fontheight * fontscale ); + timerelem.xoffset = 0; + timerelem.yoffset = 0; + timerelem.children = []; + timerelem setparent( level.uiparent ); + timerelem.hidden = 0; + return timerelem; +} + +createicon( shader, width, height ) +{ + iconelem = newclienthudelem( self ); + iconelem.elemtype = "icon"; + iconelem.x = 0; + iconelem.y = 0; + iconelem.width = width; + iconelem.height = height; + iconelem.xoffset = 0; + iconelem.yoffset = 0; + iconelem.children = []; + iconelem setparent( level.uiparent ); + iconelem.hidden = 0; + + if ( isdefined( shader ) ) + iconelem setshader( shader, width, height ); + + return iconelem; +} + +createservericon( shader, width, height, team ) +{ + if ( isdefined( team ) ) + iconelem = newteamhudelem( team ); + else + iconelem = newhudelem(); + + iconelem.elemtype = "icon"; + iconelem.x = 0; + iconelem.y = 0; + iconelem.width = width; + iconelem.height = height; + iconelem.xoffset = 0; + iconelem.yoffset = 0; + iconelem.children = []; + iconelem setparent( level.uiparent ); + iconelem.hidden = 0; + + if ( isdefined( shader ) ) + iconelem setshader( shader, width, height ); + + return iconelem; +} + +createserverbar( color, width, height, flashfrac, team, selected ) +{ + if ( isdefined( team ) ) + barelem = newteamhudelem( team ); + else + barelem = newhudelem(); + + barelem.x = 0; + barelem.y = 0; + barelem.frac = 0; + barelem.color = color; + barelem.sort = -2; + barelem.shader = "progress_bar_fill"; + barelem setshader( "progress_bar_fill", width, height ); + barelem.hidden = 0; + + if ( isdefined( flashfrac ) ) + barelem.flashfrac = flashfrac; + + if ( isdefined( team ) ) + barelemframe = newteamhudelem( team ); + else + barelemframe = newhudelem(); + + barelemframe.elemtype = "icon"; + barelemframe.x = 0; + barelemframe.y = 0; + barelemframe.width = width; + barelemframe.height = height; + barelemframe.xoffset = 0; + barelemframe.yoffset = 0; + barelemframe.bar = barelem; + barelemframe.barframe = barelemframe; + barelemframe.children = []; + barelemframe.sort = -1; + barelemframe.color = ( 1, 1, 1 ); + barelemframe setparent( level.uiparent ); + + if ( isdefined( selected ) ) + barelemframe setshader( "progress_bar_fg_sel", width, height ); + else + barelemframe setshader( "progress_bar_fg", width, height ); + + barelemframe.hidden = 0; + + if ( isdefined( team ) ) + barelembg = newteamhudelem( team ); + else + barelembg = newhudelem(); + + barelembg.elemtype = "bar"; + barelembg.x = 0; + barelembg.y = 0; + barelembg.width = width; + barelembg.height = height; + barelembg.xoffset = 0; + barelembg.yoffset = 0; + barelembg.bar = barelem; + barelembg.barframe = barelemframe; + barelembg.children = []; + barelembg.sort = -3; + barelembg.color = ( 0, 0, 0 ); + barelembg.alpha = 0.5; + barelembg setparent( level.uiparent ); + barelembg setshader( "progress_bar_bg", width, height ); + barelembg.hidden = 0; + return barelembg; +} + +createbar( color, width, height, flashfrac ) +{ + barelem = newclienthudelem( self ); + barelem.x = 0; + barelem.y = 0; + barelem.frac = 0; + barelem.color = color; + barelem.sort = -2; + barelem.shader = "progress_bar_fill"; + barelem setshader( "progress_bar_fill", width, height ); + barelem.hidden = 0; + + if ( isdefined( flashfrac ) ) + barelem.flashfrac = flashfrac; + + barelemframe = newclienthudelem( self ); + barelemframe.elemtype = "icon"; + barelemframe.x = 0; + barelemframe.y = 0; + barelemframe.width = width; + barelemframe.height = height; + barelemframe.xoffset = 0; + barelemframe.yoffset = 0; + barelemframe.bar = barelem; + barelemframe.barframe = barelemframe; + barelemframe.children = []; + barelemframe.sort = -1; + barelemframe.color = ( 1, 1, 1 ); + barelemframe setparent( level.uiparent ); + barelemframe.hidden = 0; + barelembg = newclienthudelem( self ); + barelembg.elemtype = "bar"; + + if ( !level.splitscreen ) + { + barelembg.x = -2; + barelembg.y = -2; + } + + barelembg.width = width; + barelembg.height = height; + barelembg.xoffset = 0; + barelembg.yoffset = 0; + barelembg.bar = barelem; + barelembg.barframe = barelemframe; + barelembg.children = []; + barelembg.sort = -3; + barelembg.color = ( 0, 0, 0 ); + barelembg.alpha = 0.5; + barelembg setparent( level.uiparent ); + + if ( !level.splitscreen ) + barelembg setshader( "progress_bar_bg", width + 4, height + 4 ); + else + barelembg setshader( "progress_bar_bg", width + 0, height + 0 ); + + barelembg.hidden = 0; + return barelembg; +} + +getcurrentfraction() +{ + frac = self.bar.frac; + + if ( isdefined( self.bar.rateofchange ) ) + { + frac += ( gettime() - self.bar.lastupdatetime ) * self.bar.rateofchange; + + if ( frac > 1 ) + frac = 1; + + if ( frac < 0 ) + frac = 0; + } + + return frac; +} + +createprimaryprogressbar() +{ + bar = createbar( ( 1, 1, 1 ), level.primaryprogressbarwidth, level.primaryprogressbarheight ); + + if ( level.splitscreen ) + bar setpoint( "TOP", undefined, level.primaryprogressbarx, level.primaryprogressbary ); + else + bar setpoint( "CENTER", undefined, level.primaryprogressbarx, level.primaryprogressbary ); + + return bar; +} + +createprimaryprogressbartext() +{ + text = createfontstring( "objective", level.primaryprogressbarfontsize ); + + if ( level.splitscreen ) + text setpoint( "TOP", undefined, level.primaryprogressbartextx, level.primaryprogressbartexty ); + else + text setpoint( "CENTER", undefined, level.primaryprogressbartextx, level.primaryprogressbartexty ); + + text.sort = -1; + return text; +} + +createsecondaryprogressbar() +{ + secondaryprogressbarheight = getdvarintdefault( "scr_secondaryProgressBarHeight", level.secondaryprogressbarheight ); + secondaryprogressbarx = getdvarintdefault( "scr_secondaryProgressBarX", level.secondaryprogressbarx ); + secondaryprogressbary = getdvarintdefault( "scr_secondaryProgressBarY", level.secondaryprogressbary ); + bar = createbar( ( 1, 1, 1 ), level.secondaryprogressbarwidth, secondaryprogressbarheight ); + + if ( level.splitscreen ) + bar setpoint( "TOP", undefined, secondaryprogressbarx, secondaryprogressbary ); + else + bar setpoint( "CENTER", undefined, secondaryprogressbarx, secondaryprogressbary ); + + return bar; +} + +createsecondaryprogressbartext() +{ + secondaryprogressbartextx = getdvarintdefault( "scr_btx", level.secondaryprogressbartextx ); + secondaryprogressbartexty = getdvarintdefault( "scr_bty", level.secondaryprogressbartexty ); + text = createfontstring( "objective", level.primaryprogressbarfontsize ); + + if ( level.splitscreen ) + text setpoint( "TOP", undefined, secondaryprogressbartextx, secondaryprogressbartexty ); + else + text setpoint( "CENTER", undefined, secondaryprogressbartextx, secondaryprogressbartexty ); + + text.sort = -1; + return text; +} + +createteamprogressbar( team ) +{ + bar = createserverbar( ( 1, 0, 0 ), level.teamprogressbarwidth, level.teamprogressbarheight, undefined, team ); + bar setpoint( "TOP", undefined, 0, level.teamprogressbary ); + return bar; +} + +createteamprogressbartext( team ) +{ + text = createserverfontstring( "default", level.teamprogressbarfontsize, team ); + text setpoint( "TOP", undefined, 0, level.teamprogressbartexty ); + return text; +} + +setflashfrac( flashfrac ) +{ + self.bar.flashfrac = flashfrac; +} + +hideelem() +{ + if ( self.hidden ) + return; + + self.hidden = 1; + + if ( self.alpha != 0 ) + self.alpha = 0; + + if ( self.elemtype == "bar" || self.elemtype == "bar_shader" ) + { + self.bar.hidden = 1; + + if ( self.bar.alpha != 0 ) + self.bar.alpha = 0; + + self.barframe.hidden = 1; + + if ( self.barframe.alpha != 0 ) + self.barframe.alpha = 0; + } +} + +showelem() +{ + if ( !self.hidden ) + return; + + self.hidden = 0; + + if ( self.elemtype == "bar" || self.elemtype == "bar_shader" ) + { + if ( self.alpha != 0.5 ) + self.alpha = 0.5; + + self.bar.hidden = 0; + + if ( self.bar.alpha != 1 ) + self.bar.alpha = 1; + + self.barframe.hidden = 0; + + if ( self.barframe.alpha != 1 ) + self.barframe.alpha = 1; + } + else if ( self.alpha != 1 ) + self.alpha = 1; +} + +flashthread() +{ + self endon( "death" ); + + if ( !self.hidden ) + self.alpha = 1; + + while ( true ) + { + if ( self.frac >= self.flashfrac ) + { + if ( !self.hidden ) + { + self fadeovertime( 0.3 ); + self.alpha = 0.2; + wait 0.35; + self fadeovertime( 0.3 ); + self.alpha = 1; + } + + wait 0.7; + } + else + { + if ( !self.hidden && self.alpha != 1 ) + self.alpha = 1; + + wait 0.05; + } + } +} + +destroyelem() +{ + tempchildren = []; + + for ( index = 0; index < self.children.size; index++ ) + { + if ( isdefined( self.children[index] ) ) + tempchildren[tempchildren.size] = self.children[index]; + } + + for ( index = 0; index < tempchildren.size; index++ ) + tempchildren[index] setparent( self getparent() ); + + if ( self.elemtype == "bar" || self.elemtype == "bar_shader" ) + { + self.bar destroy(); + self.barframe destroy(); + } + + self destroy(); +} + +seticonshader( shader ) +{ + self setshader( shader, self.width, self.height ); +} + +setwidth( width ) +{ + self.width = width; +} + +setheight( height ) +{ + self.height = height; +} + +setsize( width, height ) +{ + self.width = width; + self.height = height; +} + +updatechildren() +{ + for ( index = 0; index < self.children.size; index++ ) + { + child = self.children[index]; + child setpoint( child.point, child.relativepoint, child.xoffset, child.yoffset ); + } +} + +createloadouticon( player, verindex, horindex, xpos, ypos ) +{ + iconsize = 32; + + if ( player issplitscreen() ) + iconsize = 22; + + ypos -= 90 + iconsize * ( 3 - verindex ); + xpos -= 10 + iconsize * horindex; + icon = createicon( "white", iconsize, iconsize ); + icon setpoint( "BOTTOM RIGHT", "BOTTOM RIGHT", xpos, ypos ); + icon.horzalign = "user_right"; + icon.vertalign = "user_bottom"; + icon.archived = 0; + icon.foreground = 0; + return icon; +} + +setloadouticoncoords( player, verindex, horindex, xpos, ypos ) +{ + iconsize = 32; + + if ( player issplitscreen() ) + iconsize = 22; + + ypos -= 90 + iconsize * ( 3 - verindex ); + xpos -= 10 + iconsize * horindex; + self setpoint( "BOTTOM RIGHT", "BOTTOM RIGHT", xpos, ypos ); + self.horzalign = "user_right"; + self.vertalign = "user_bottom"; + self.archived = 0; + self.foreground = 0; + self.alpha = 1; +} + +setloadouttextcoords( xcoord ) +{ + self setpoint( "RIGHT", "LEFT", xcoord, 0 ); +} + +createloadouttext( icon, xcoord ) +{ + text = createfontstring( "small", 1 ); + text setparent( icon ); + text setpoint( "RIGHT", "LEFT", xcoord, 0 ); + text.archived = 0; + text.alignx = "right"; + text.aligny = "middle"; + text.foreground = 0; + return text; +} + +showloadoutattribute( iconelem, icon, alpha, textelem, text ) +{ + iconsize = 32; + iconelem.alpha = alpha; + + if ( alpha ) + iconelem setshader( icon, iconsize, iconsize ); + + if ( isdefined( textelem ) ) + { + textelem.alpha = alpha; + + if ( alpha ) + textelem settext( text ); + } +} + +hideloadoutattribute( iconelem, fadetime, textelem, hidetextonly ) +{ + if ( isdefined( fadetime ) ) + { + if ( !isdefined( hidetextonly ) || !hidetextonly ) + iconelem fadeovertime( fadetime ); + + if ( isdefined( textelem ) ) + textelem fadeovertime( fadetime ); + } + + if ( !isdefined( hidetextonly ) || !hidetextonly ) + iconelem.alpha = 0; + + if ( isdefined( textelem ) ) + textelem.alpha = 0; +} + +showperks() +{ + ypos = 40; + + if ( self issplitscreen() ) + ypos = 5; + + if ( !isdefined( self.perkhudelem ) ) + self.perkhudelem = createloadouticon( self, 0, 0, 200, ypos ); + else + self.perkhudelem setloadouticoncoords( self, 0, 0, 200, ypos ); + + self.perkhudelem setperks( self ); + self.perkhudelem.x = -20; + self.perkhudelem.alpha = 0; + self.perkhudelem fadeovertime( 0.4 ); + self.perkhudelem.alpha = 1; + self.perkhudelem.hidewheninmenu = 1; +} + +showperk( index, perk, ypos ) +{ + assert( game["state"] != "postgame" ); + + if ( !isdefined( self.perkicon ) ) + { + self.perkicon = []; + self.perkname = []; + } + + if ( !isdefined( self.perkicon[index] ) ) + { + assert( !isdefined( self.perkname[index] ) ); + self.perkicon[index] = createloadouticon( self, index, 0, 200, ypos ); + self.perkname[index] = createloadouttext( self.perkicon[index], 160 ); + } + else + { + self.perkicon[index] setloadouticoncoords( self, index, 0, 200, ypos ); + self.perkname[index] setloadouttextcoords( 160 ); + } + + if ( perk == "perk_null" || perk == "weapon_null" || perk == "specialty_null" ) + alpha = 0; + else + { + assert( isdefined( level.perknames[perk] ), perk ); + alpha = 1; + } + + showloadoutattribute( self.perkicon[index], perk, alpha, self.perkname[index], level.perknames[perk] ); + self.perkicon[index] moveovertime( 0.3 ); + self.perkicon[index].x = -5; + self.perkicon[index].hidewheninmenu = 1; + self.perkname[index] moveovertime( 0.3 ); + self.perkname[index].x = -40; + self.perkname[index].hidewheninmenu = 1; +} + +hideperks( fadetime ) +{ + if ( level.perksenabled == 1 ) + { + if ( game["state"] == "postgame" ) + { + assert( !isdefined( self.perkhudelem ) ); + return; + } + } + + assert( isdefined( self.perkhudelem ) ); + + if ( isdefined( self.perkhudelem ) ) + hideloadoutattribute( self.perkhudelem, fadetime ); +} + +hideperk( index, fadetime = 0.05, hidetextonly ) +{ + if ( level.perksenabled == 1 ) + { + if ( game["state"] == "postgame" ) + { + if ( isdefined( self.perkicon ) ) + { + assert( !isdefined( self.perkicon[index] ) ); + assert( !isdefined( self.perkname[index] ) ); + } + + return; + } + + assert( isdefined( self.perkicon[index] ) ); + assert( isdefined( self.perkname[index] ) ); + + if ( isdefined( self.perkicon ) && isdefined( self.perkicon[index] ) && isdefined( self.perkname ) && isdefined( self.perkname[index] ) ) + hideloadoutattribute( self.perkicon[index], fadetime, self.perkname[index], hidetextonly ); + } +} + +hideallperks( fadetime, hidetextonly ) +{ + if ( level.perksenabled == 1 ) + hideperks( fadetime ); +} + +showkillstreak( index, killstreak, xpos, ypos ) +{ + assert( game["state"] != "postgame" ); + + if ( !isdefined( self.killstreakicon ) ) + self.killstreakicon = []; + + if ( !isdefined( self.killstreakicon[index] ) ) + self.killstreakicon[index] = createloadouticon( self, 3, self.killstreak.size - 1 - index, xpos, ypos ); + + if ( killstreak == "killstreak_null" || killstreak == "weapon_null" ) + alpha = 0; + else + { + assert( isdefined( level.killstreakicons[killstreak] ), killstreak ); + alpha = 1; + } + + showloadoutattribute( self.killstreakicon[index], level.killstreakicons[killstreak], alpha ); +} + +hidekillstreak( index, fadetime ) +{ + if ( iskillstreaksenabled() ) + { + if ( game["state"] == "postgame" ) + { + assert( !isdefined( self.killstreakicon[index] ) ); + return; + } + + assert( isdefined( self.killstreakicon[index] ) ); + hideloadoutattribute( self.killstreakicon[index], fadetime ); + } +} + +setgamemodeinfopoint() +{ + self.x = 11; + self.y = 120; + self.horzalign = "user_left"; + self.vertalign = "user_top"; + self.alignx = "left"; + self.aligny = "top"; +} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_killcam.gsc b/MP/Core/maps/mp/gametypes/_killcam.gsc similarity index 98% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/_killcam.gsc rename to MP/Core/maps/mp/gametypes/_killcam.gsc index 96aed6c..99a875b 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_killcam.gsc +++ b/MP/Core/maps/mp/gametypes/_killcam.gsc @@ -1,5 +1,12 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\_challenges; +#include maps\mp\_tacticalinsertion; +#include maps\mp\gametypes\_spectating; +#include maps\mp\gametypes\_globallogic_spawn; init() { @@ -489,7 +496,6 @@ finalkillcam( winner ) setmatchflag( "final_killcam", 0 ); setmatchflag( "round_end_killcam", 1 ); } - /# if ( getdvarint( "scr_force_finalkillcam" ) == 1 ) { @@ -497,7 +503,6 @@ finalkillcam( winner ) setmatchflag( "round_end_killcam", 0 ); } #/ - if ( level.console ) self maps\mp\gametypes\_globallogic_spawn::setthirdperson( 0 ); diff --git a/MP/Core/maps/mp/gametypes/_menus.gsc b/MP/Core/maps/mp/gametypes/_menus.gsc new file mode 100644 index 0000000..63889b7 --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_menus.gsc @@ -0,0 +1,177 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_rank; + +init() +{ + precachestring( &"open_ingame_menu" ); + game["menu_team"] = "team_marinesopfor"; + game["menu_initteam_allies"] = "initteam_marines"; + game["menu_initteam_axis"] = "initteam_opfor"; + game["menu_class"] = "class"; + game["menu_changeclass"] = "changeclass"; + game["menu_changeclass_offline"] = "changeclass"; + game["menu_wager_side_bet"] = "sidebet"; + game["menu_wager_side_bet_player"] = "sidebet_player"; + game["menu_changeclass_wager"] = "changeclass_wager"; + game["menu_changeclass_custom"] = "changeclass_custom"; + game["menu_changeclass_barebones"] = "changeclass_barebones"; + + foreach ( team in level.teams ) + game["menu_changeclass_" + team] = "changeclass"; + + game["menu_controls"] = "ingame_controls"; + game["menu_options"] = "ingame_options"; + game["menu_leavegame"] = "popup_leavegame"; + precachemenu( game["menu_controls"] ); + precachemenu( game["menu_options"] ); + precachemenu( game["menu_leavegame"] ); + precachemenu( "scoreboard" ); + precachemenu( "spectate" ); + precachemenu( game["menu_team"] ); + precachemenu( game["menu_changeclass_allies"] ); + precachemenu( game["menu_initteam_allies"] ); + precachemenu( game["menu_changeclass_axis"] ); + precachemenu( game["menu_class"] ); + precachemenu( game["menu_changeclass"] ); + precachemenu( game["menu_initteam_axis"] ); + precachemenu( game["menu_changeclass_offline"] ); + precachemenu( game["menu_changeclass_wager"] ); + precachemenu( game["menu_changeclass_custom"] ); + precachemenu( game["menu_changeclass_barebones"] ); + precachemenu( game["menu_wager_side_bet"] ); + precachemenu( game["menu_wager_side_bet_player"] ); + precachestring( &"MP_HOST_ENDED_GAME" ); + precachestring( &"MP_HOST_ENDGAME_RESPONSE" ); + level thread onplayerconnect(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread onmenuresponse(); + } +} + +onmenuresponse() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "menuresponse", menu, response ); + + if ( response == "back" ) + { + self closemenu(); + self closeingamemenu(); + + if ( level.console ) + { + if ( menu == game["menu_changeclass"] || menu == game["menu_changeclass_offline"] || menu == game["menu_team"] || menu == game["menu_controls"] ) + { + if ( isdefined( level.teams[self.pers["team"]] ) ) + self openmenu( game["menu_class"] ); + } + } + + continue; + } + + if ( response == "changeteam" && level.allow_teamchange == "1" ) + { + self closemenu(); + self closeingamemenu(); + self openmenu( game["menu_team"] ); + } + + if ( response == "changeclass_marines_splitscreen" ) + self openmenu( "changeclass_marines_splitscreen" ); + + if ( response == "changeclass_opfor_splitscreen" ) + self openmenu( "changeclass_opfor_splitscreen" ); + + if ( response == "endgame" ) + { + if ( level.splitscreen ) + { + level.skipvote = 1; + + if ( !level.gameended ) + level thread maps\mp\gametypes\_globallogic::forceend(); + } + + continue; + } + + if ( response == "killserverpc" ) + { + level thread maps\mp\gametypes\_globallogic::killserverpc(); + continue; + } + + if ( response == "endround" ) + { + if ( !level.gameended ) + { + self gamehistoryplayerquit(); + level thread maps\mp\gametypes\_globallogic::forceend(); + } + else + { + self closemenu(); + self closeingamemenu(); + self iprintln( &"MP_HOST_ENDGAME_RESPONSE" ); + } + + continue; + } + + if ( menu == game["menu_team"] && level.allow_teamchange == "1" ) + { + switch ( response ) + { + case "autoassign": + self [[ level.autoassign ]]( 1 ); + break; + case "spectator": + self [[ level.spectator ]](); + break; + default: + self [[ level.teammenu ]]( response ); + break; + } + + continue; + } + + if ( menu == game["menu_changeclass"] || menu == game["menu_changeclass_offline"] || menu == game["menu_changeclass_wager"] || menu == game["menu_changeclass_custom"] || menu == game["menu_changeclass_barebones"] ) + { + self closemenu(); + self closeingamemenu(); + + if ( level.rankedmatch && issubstr( response, "custom" ) ) + { + if ( self isitemlocked( maps\mp\gametypes\_rank::getitemindex( "feature_cac" ) ) ) + kick( self getentitynumber() ); + } + + self.selectedclass = 1; + self [[ level.class ]]( response ); + continue; + } + + if ( menu == "spectate" ) + { + player = getplayerfromclientnum( int( response ) ); + + if ( isdefined( player ) ) + self setcurrentspectatorclient( player ); + } + } +} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_objpoints.gsc b/MP/Core/maps/mp/gametypes/_objpoints.gsc similarity index 98% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/_objpoints.gsc rename to MP/Core/maps/mp/gametypes/_objpoints.gsc index 0dfb71e..42e68f2 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_objpoints.gsc +++ b/MP/Core/maps/mp/gametypes/_objpoints.gsc @@ -1,5 +1,7 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; init() { @@ -18,9 +20,7 @@ init() createteamobjpoint( name, origin, team, shader, alpha, scale ) { -/# assert( isdefined( level.teams[team] ) || team == "all" ); -#/ objpoint = getobjpointbyname( name ); if ( isdefined( objpoint ) ) @@ -63,18 +63,12 @@ createteamobjpoint( name, origin, team, shader, alpha, scale ) deleteobjpoint( oldobjpoint ) { -/# assert( level.objpoints.size == level.objpointnames.size ); -#/ if ( level.objpoints.size == 1 ) { -/# assert( level.objpointnames[0] == oldobjpoint.name ); -#/ -/# assert( isdefined( level.objpoints[oldobjpoint.name] ) ); -#/ level.objpoints = []; level.objpointnames = []; oldobjpoint destroy(); diff --git a/MP/Core/maps/mp/gametypes/_perplayer.gsc b/MP/Core/maps/mp/gametypes/_perplayer.gsc new file mode 100644 index 0000000..eac9f10 --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_perplayer.gsc @@ -0,0 +1,179 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +init( id, playerbegincallback, playerendcallback ) +{ + precacheshader( "objpoint_default" ); + handler = spawnstruct(); + handler.id = id; + handler.playerbegincallback = playerbegincallback; + handler.playerendcallback = playerendcallback; + handler.enabled = 0; + handler.players = []; + thread onplayerconnect( handler ); + level.handlerglobalflagval = 0; + return handler; +} + +enable( handler ) +{ + if ( handler.enabled ) + return; + + handler.enabled = 1; + level.handlerglobalflagval++; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i].handlerflagval = level.handlerglobalflagval; + + players = handler.players; + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].handlerflagval != level.handlerglobalflagval ) + continue; + + if ( players[i].handlers[handler.id].ready ) + players[i] handleplayer( handler ); + } +} + +disable( handler ) +{ + if ( !handler.enabled ) + return; + + handler.enabled = 0; + level.handlerglobalflagval++; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i].handlerflagval = level.handlerglobalflagval; + + players = handler.players; + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].handlerflagval != level.handlerglobalflagval ) + continue; + + if ( players[i].handlers[handler.id].ready ) + players[i] unhandleplayer( handler, 0, 0 ); + } +} + +onplayerconnect( handler ) +{ + for (;;) + { + level waittill( "connecting", player ); + + if ( !isdefined( player.handlers ) ) + player.handlers = []; + + player.handlers[handler.id] = spawnstruct(); + player.handlers[handler.id].ready = 0; + player.handlers[handler.id].handled = 0; + player.handlerflagval = -1; + handler.players[handler.players.size] = player; + player thread onplayerdisconnect( handler ); + player thread onplayerspawned( handler ); + player thread onjoinedteam( handler ); + player thread onjoinedspectators( handler ); + player thread onplayerkilled( handler ); + } +} + +onplayerdisconnect( handler ) +{ + self waittill( "disconnect" ); + + newplayers = []; + + for ( i = 0; i < handler.players.size; i++ ) + { + if ( handler.players[i] != self ) + newplayers[newplayers.size] = handler.players[i]; + } + + handler.players = newplayers; + self thread unhandleplayer( handler, 1, 1 ); +} + +onjoinedteam( handler ) +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "joined_team" ); + + self thread unhandleplayer( handler, 1, 0 ); + } +} + +onjoinedspectators( handler ) +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "joined_spectators" ); + + self thread unhandleplayer( handler, 1, 0 ); + } +} + +onplayerspawned( handler ) +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread handleplayer( handler ); + } +} + +onplayerkilled( handler ) +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "killed_player" ); + + self thread unhandleplayer( handler, 1, 0 ); + } +} + +handleplayer( handler ) +{ + self.handlers[handler.id].ready = 1; + + if ( !handler.enabled ) + return; + + if ( self.handlers[handler.id].handled ) + return; + + self.handlers[handler.id].handled = 1; + self thread [[ handler.playerbegincallback ]](); +} + +unhandleplayer( handler, unsetready, disconnected ) +{ + if ( !disconnected && unsetready ) + self.handlers[handler.id].ready = 0; + + if ( !self.handlers[handler.id].handled ) + return; + + if ( !disconnected ) + self.handlers[handler.id].handled = 0; + + self thread [[ handler.playerendcallback ]]( disconnected ); +} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_persistence.gsc b/MP/Core/maps/mp/gametypes/_persistence.gsc similarity index 97% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/_persistence.gsc rename to MP/Core/maps/mp/gametypes/_persistence.gsc index f98cfcf..82840e2 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_persistence.gsc +++ b/MP/Core/maps/mp/gametypes/_persistence.gsc @@ -1,5 +1,15 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_class; +#include maps\mp\gametypes\_rank; +#include maps\mp\_challenges; +#include maps\mp\_medals; +#include maps\mp\_scoreevents; +#include maps\mp\_popups; +#include maps\mp\bots\_bot; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_persistence; init() { @@ -174,20 +184,20 @@ uploadglobalstatcounters() case "ctf": totalflagscaptured += player.captures; totalflagsreturned += player.returns; - continue; + break; case "koth": totalhqsdestroyed += player.destructions; totalhqscaptured += player.captures; - continue; + break; case "sd": totalsddefused += player.defuses; totalsdplants += player.plants; - continue; + break; case "sab": if ( isdefined( player.team ) && isdefined( level.teams[player.team] ) ) totalsabdestroyedbyteam[player.team] += player.destructions; - continue; + break; } } @@ -374,12 +384,10 @@ setafteractionreportstat( statname, value, index ) { if ( self is_bot() ) return; - /# if ( getdvarint( "scr_writeConfigStrings" ) == 1 || getdvarint( "scr_hostmigrationtest" ) == 1 ) return; #/ - if ( level.rankedmatch || level.wagermatch || level.leaguematch ) { if ( isdefined( index ) ) diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_pregame.gsc b/MP/Core/maps/mp/gametypes/_pregame.gsc similarity index 94% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/_pregame.gsc rename to MP/Core/maps/mp/gametypes/_pregame.gsc index 1d1a33f..4091a5a 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_pregame.gsc +++ b/MP/Core/maps/mp/gametypes/_pregame.gsc @@ -1,11 +1,23 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_callbacksetup; +#include maps\mp\gametypes\_spawnlogic; +#include maps\mp\gametypes\_spawning; +#include maps\mp\gametypes\_gameobjects; +#include maps\mp\gametypes\_globallogic_player; +#include maps\mp\gametypes\_hud; +#include maps\mp\gametypes\_globallogic_ui; +#include maps\mp\gametypes\_globallogic_utils; +#include maps\mp\gametypes\_globallogic_score; main() { level.pregame = 1; /# - println( "Pregame main() level.pregame = " + level.pregame + "\n" ); + println( "Pregame main() level.pregame = " + level.pregame + "\\n" ); #/ maps\mp\gametypes\_globallogic::init(); maps\mp\gametypes\_callbacksetup::setupcallbacks(); @@ -205,7 +217,6 @@ pregamemain() if ( 0 >= count ) break; - /# if ( getdvarint( "scr_pregame_abort" ) > 0 ) { @@ -213,7 +224,6 @@ pregamemain() break; } #/ - if ( oldcount != count ) { level.pregameplayercount setvalue( count ); diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_rank.gsc b/MP/Core/maps/mp/gametypes/_rank.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/_rank.gsc rename to MP/Core/maps/mp/gametypes/_rank.gsc index c544f30..7467911 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_rank.gsc +++ b/MP/Core/maps/mp/gametypes/_rank.gsc @@ -1,5 +1,11 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\_scoreevents; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_hud; +#include maps\mp\gametypes\_globallogic; init() { @@ -42,9 +48,7 @@ init() rankid = 0; rankname = tablelookup( "mp/ranktable.csv", 0, rankid, 1 ); -/# assert( isdefined( rankname ) && rankname != "" ); -#/ while ( isdefined( rankname ) && rankname != "" ) { @@ -64,25 +68,19 @@ init() initscoreinfo() { scoreinfotableid = getscoreeventtableid(); -/# assert( isdefined( scoreinfotableid ) ); -#/ if ( !isdefined( scoreinfotableid ) ) return; scorecolumn = getscoreeventcolumn( level.gametype ); xpcolumn = getxpeventcolumn( level.gametype ); -/# assert( scorecolumn >= 0 ); -#/ if ( scorecolumn < 0 ) return; -/# assert( xpcolumn >= 0 ); -#/ if ( xpcolumn < 0 ) return; @@ -298,9 +296,7 @@ onplayerconnect() player.rankupdatetotal = 0; player.cur_ranknum = rankid; -/# assert( isdefined( player.cur_ranknum ), "rank: " + rankid + " does not have an index, check mp/ranktable.csv" ); -#/ prestige = player getdstat( "playerstatslist", "plevel", "StatValue" ); player setrank( rankid, prestige ); player.pers["prestige"] = prestige; @@ -599,9 +595,7 @@ codecallback_rankup( rank, prestige, unlocktokensadded ) getitemindex( refstring ) { itemindex = int( tablelookup( "mp/statstable.csv", 4, refstring, 0 ) ); -/# assert( itemindex > 0, "statsTable refstring " + refstring + " has invalid index: " + itemindex ); -#/ return itemindex; } @@ -744,9 +738,7 @@ getrankforxp( xpval ) { rankid = 0; rankname = level.ranktable[rankid][1]; -/# assert( isdefined( rankname ) ); -#/ while ( isdefined( rankname ) && rankname != "" ) { diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_scoreboard.gsc b/MP/Core/maps/mp/gametypes/_scoreboard.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/_scoreboard.gsc rename to MP/Core/maps/mp/gametypes/_scoreboard.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_serversettings.gsc b/MP/Core/maps/mp/gametypes/_serversettings.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/_serversettings.gsc rename to MP/Core/maps/mp/gametypes/_serversettings.gsc diff --git a/MP/Core/maps/mp/gametypes/_shellshock.gsc b/MP/Core/maps/mp/gametypes/_shellshock.gsc new file mode 100644 index 0000000..ac1d860 --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_shellshock.gsc @@ -0,0 +1,59 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; + +init() +{ + precacheshellshock( "frag_grenade_mp" ); + precacheshellshock( "damage_mp" ); + precacherumble( "artillery_rumble" ); + precacherumble( "grenade_rumble" ); +} + +shellshockondamage( cause, damage ) +{ + if ( self maps\mp\_utility::isflashbanged() ) + return; + + if ( cause == "MOD_EXPLOSIVE" || cause == "MOD_GRENADE" || cause == "MOD_GRENADE_SPLASH" || cause == "MOD_PROJECTILE" || cause == "MOD_PROJECTILE_SPLASH" ) + { + time = 0; + + if ( damage >= 90 ) + time = 4; + else if ( damage >= 50 ) + time = 3; + else if ( damage >= 25 ) + time = 2; + else if ( damage > 10 ) + time = 2; + + if ( time ) + { + if ( self mayapplyscreeneffect() ) + self shellshock( "frag_grenade_mp", 0.5 ); + } + } +} + +endondeath() +{ + self waittill( "death" ); + + waittillframeend; + self notify( "end_explode" ); +} + +endontimer( timer ) +{ + self endon( "disconnect" ); + wait( timer ); + self notify( "end_on_timer" ); +} + +rcbomb_earthquake( position ) +{ + playrumbleonposition( "grenade_rumble", position ); + earthquake( 0.5, 0.5, self.origin, 512 ); +} diff --git a/MP/Core/maps/mp/gametypes/_spawning.gsc b/MP/Core/maps/mp/gametypes/_spawning.gsc new file mode 100644 index 0000000..dbe64b8 --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_spawning.gsc @@ -0,0 +1,1152 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\killstreaks\_airsupport; +#include maps\mp\_tacticalinsertion; +#include maps\mp\gametypes\_callbacksetup; +#include maps\mp\gametypes\_spawnlogic; + +init() +{ + if ( !isdefined( level.gamemodespawndvars ) ) + level.gamemodespawndvars = ::default_gamemodespawndvars; + + level init_spawn_system(); + level.recently_deceased = []; + + foreach ( team in level.teams ) + level.recently_deceased[team] = spawn_array_struct(); + + level thread onplayerconnect(); + + if ( getdvar( _hash_AD6C19FE ) == "" ) + level.spawn_visibility_check_max = 20; + else + level.spawn_visibility_check_max = getdvarint( _hash_AD6C19FE ); + + level.spawnprotectiontime = getgametypesetting( "spawnprotectiontime" ); +/# + setdvar( "scr_debug_spawn_player", "" ); + setdvar( "scr_debug_render_spawn_data", "1" ); + setdvar( "scr_debug_render_snapshotmode", "0" ); + setdvar( "scr_spawn_point_test_mode", "0" ); + level.test_spawn_point_index = 0; + setdvar( "scr_debug_render_spawn_text", "1" ); +#/ +} + +default_gamemodespawndvars( reset_dvars ) +{ + +} + +init_spawn_system() +{ + level.spawnsystem = spawnstruct(); + spawnsystem = level.spawnsystem; + level get_player_spawning_dvars( 1 ); + level thread initialize_player_spawning_dvars(); + spawnsystem.einfluencer_shape_sphere = 0; + spawnsystem.einfluencer_shape_cylinder = 1; + spawnsystem.einfluencer_type_normal = 0; + spawnsystem.einfluencer_type_player = 1; + spawnsystem.einfluencer_type_weapon = 2; + spawnsystem.einfluencer_type_dog = 3; + spawnsystem.einfluencer_type_vehicle = 4; + spawnsystem.einfluencer_type_game_mode = 6; + spawnsystem.einfluencer_type_enemy_spawned = 7; + spawnsystem.einfluencer_curve_constant = 0; + spawnsystem.einfluencer_curve_linear = 1; + spawnsystem.einfluencer_curve_steep = 2; + spawnsystem.einfluencer_curve_inverse_linear = 3; + spawnsystem.einfluencer_curve_negative_to_positive = 4; + spawnsystem.ispawn_teammask = []; + spawnsystem.ispawn_teammask_free = 1; + spawnsystem.ispawn_teammask["free"] = spawnsystem.ispawn_teammask_free; + all = spawnsystem.ispawn_teammask_free; + count = 1; + + foreach ( team in level.teams ) + { + spawnsystem.ispawn_teammask[team] = 1 << count; + all |= spawnsystem.ispawn_teammask[team]; + count++; + } + + spawnsystem.ispawn_teammask["all"] = all; +} + +onplayerconnect() +{ + level endon( "game_ended" ); + + for (;;) + { + level waittill( "connecting", player ); + + player setentertime( gettime() ); + player thread onplayerspawned(); + player thread ondisconnect(); + player thread onteamchange(); + player thread ongrenadethrow(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + level endon( "game_ended" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self maps\mp\killstreaks\_airsupport::clearmonitoredspeed(); + self thread initialspawnprotection(); + self thread monitorgpsjammer(); + + if ( isdefined( self.pers["hasRadar"] ) && self.pers["hasRadar"] ) + self.hasspyplane = 1; + + self enable_player_influencers( 1 ); + self thread ondeath(); + } +} + +monitorgpsjammer() +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( self hasperk( "specialty_gpsjammer" ) == 0 ) + return; + + self gpsjammeractive(); + graceperiods = getdvarintdefault( "perk_gpsjammer_graceperiods", 4 ); + minspeed = getdvarintdefault( "perk_gpsjammer_min_speed", 100 ); + mindistance = getdvarintdefault( "perk_gpsjammer_min_distance", 10 ); + timeperiod = getdvarintdefault( "perk_gpsjammer_time_period", 200 ); + timeperiodsec = timeperiod / 1000; + minspeedsq = minspeed * minspeed; + mindistancesq = mindistance * mindistance; + + if ( minspeedsq == 0 ) + return; + + assert( timeperiodsec >= 0.05 ); + + if ( timeperiodsec < 0.05 ) + return; + + hasperk = 1; + statechange = 0; + faileddistancecheck = 0; + currentfailcount = 0; + timepassed = 0; + timesincedistancecheck = 0; + previousorigin = self.origin; + gpsjammerprotection = 0; + + while ( true ) + { +/# + graceperiods = getdvarintdefault( "perk_gpsjammer_graceperiods", graceperiods ); + minspeed = getdvarintdefault( "perk_gpsjammer_min_speed", minspeed ); + mindistance = getdvarintdefault( "perk_gpsjammer_min_distance", mindistance ); + timeperiod = getdvarintdefault( "perk_gpsjammer_time_period", timeperiod ); + timeperiodsec = timeperiod / 1000; + minspeedsq = minspeed * minspeed; + mindistancesq = mindistance * mindistance; +#/ + gpsjammerprotection = 0; + + if ( isusingremote() || is_true( self.isplanting ) || is_true( self.isdefusing ) ) + gpsjammerprotection = 1; + else + { + if ( timesincedistancecheck > 1 ) + { + timesincedistancecheck = 0; + + if ( distancesquared( previousorigin, self.origin ) < mindistancesq ) + faileddistancecheck = 1; + else + faileddistancecheck = 0; + + previousorigin = self.origin; + } + + velocity = self getvelocity(); + speedsq = lengthsquared( velocity ); + + if ( speedsq > minspeedsq && faileddistancecheck == 0 ) + gpsjammerprotection = 1; + } + + if ( gpsjammerprotection == 1 ) + { + currentfailcount = 0; + + if ( hasperk == 0 ) + { + statechange = 0; + hasperk = 1; + self gpsjammeractive(); + } + } + else + { + currentfailcount++; + + if ( hasperk == 1 && currentfailcount >= graceperiods ) + { + statechange = 1; + hasperk = 0; + self gpsjammerinactive(); + } + } + + if ( statechange == 1 ) + level notify( "radar_status_change" ); + + timesincedistancecheck += timeperiodsec; + wait( timeperiodsec ); + } +} + +ondeath() +{ + self endon( "disconnect" ); + level endon( "game_ended" ); + + self waittill( "death" ); + + self enable_player_influencers( 0 ); + self create_body_influencers(); +} + +onteamchange() +{ + self endon( "disconnect" ); + level endon( "game_ended" ); + + while ( true ) + { + self waittill( "joined_team" ); + + self player_influencers_set_team(); + wait 0.05; + } +} + +ongrenadethrow() +{ + self endon( "disconnect" ); + level endon( "game_ended" ); + + while ( true ) + { + self waittill( "grenade_fire", grenade, weaponname ); + + level thread create_grenade_influencers( self.pers["team"], weaponname, grenade ); + wait 0.05; + } +} + +ondisconnect() +{ + level endon( "game_ended" ); + + self waittill( "disconnect" ); +} + +get_score_curve_index( curve ) +{ + switch ( curve ) + { + case "linear": + return level.spawnsystem.einfluencer_curve_linear; + case "steep": + return level.spawnsystem.einfluencer_curve_steep; + case "inverse_linear": + return level.spawnsystem.einfluencer_curve_linear; + case "negative_to_positive": + return level.spawnsystem.einfluencer_curve_negative_to_positive; + case "constant": + default: + return level.spawnsystem.einfluencer_curve_constant; + } +} + +get_influencer_type_index( curve ) +{ + +} + +create_player_influencers() +{ + assert( !isdefined( self.influencer_enemy_sphere ) ); + assert( !isdefined( self.influencer_weapon_cylinder ) ); + assert( !level.teambased || !isdefined( self.influencer_friendly_sphere ) ); + assert( !level.teambased || !isdefined( self.influencer_friendly_cylinder ) ); + + if ( !level.teambased ) + { + team_mask = level.spawnsystem.ispawn_teammask_free; + other_team_mask = level.spawnsystem.ispawn_teammask_free; + weapon_team_mask = level.spawnsystem.ispawn_teammask_free; + } + else if ( isdefined( self.pers["team"] ) ) + { + team = self.pers["team"]; + team_mask = getteammask( team ); + other_team_mask = getotherteamsmask( team ); + weapon_team_mask = getotherteamsmask( team ); + } + else + { + team_mask = 0; + other_team_mask = 0; + weapon_team_mask = 0; + } + + if ( level.hardcoremode ) + weapon_team_mask |= team_mask; + + angles = self.angles; + origin = self.origin; + up = ( 0, 0, 1 ); + forward = ( 1, 0, 0 ); + cylinder_forward = up; + cylinder_up = forward; + self.influencer_enemy_sphere = addsphereinfluencer( level.spawnsystem.einfluencer_type_player, origin, level.spawnsystem.enemy_influencer_radius, level.spawnsystem.enemy_influencer_score, other_team_mask, "enemy,r,s", get_score_curve_index( level.spawnsystem.enemy_influencer_score_curve ), 0, self ); + + if ( level.teambased ) + { + cylinder_up = -1.0 * forward; + self.influencer_friendly_sphere = addsphereinfluencer( level.spawnsystem.einfluencer_type_player, origin, level.spawnsystem.friend_weak_influencer_radius, level.spawnsystem.friend_weak_influencer_score, team_mask, "friend_weak,r,s", get_score_curve_index( level.spawnsystem.friend_weak_influencer_score_curve ), 0, self ); + } + + self.spawn_influencers_created = 1; + + if ( !isdefined( self.pers["team"] ) || self.pers["team"] == "spectator" ) + self enable_player_influencers( 0 ); +} + +remove_player_influencers() +{ + if ( level.teambased && isdefined( self.influencer_friendly_sphere ) ) + { + removeinfluencer( self.influencer_friendly_sphere ); + self.influencer_friendly_sphere = undefined; + } + + if ( level.teambased && isdefined( self.influencer_friendly_cylinder ) ) + { + removeinfluencer( self.influencer_friendly_cylinder ); + self.influencer_friendly_cylinder = undefined; + } + + if ( isdefined( self.influencer_enemy_sphere ) ) + { + removeinfluencer( self.influencer_enemy_sphere ); + self.influencer_enemy_sphere = undefined; + } + + if ( isdefined( self.influencer_weapon_cylinder ) ) + { + removeinfluencer( self.influencer_weapon_cylinder ); + self.influencer_weapon_cylinder = undefined; + } +} + +enable_player_influencers( enabled ) +{ + if ( !isdefined( self.spawn_influencers_created ) ) + self create_player_influencers(); + + if ( isdefined( self.influencer_friendly_sphere ) ) + enableinfluencer( self.influencer_friendly_sphere, enabled ); + + if ( isdefined( self.influencer_friendly_cylinder ) ) + enableinfluencer( self.influencer_friendly_cylinder, enabled ); + + if ( isdefined( self.influencer_enemy_sphere ) ) + enableinfluencer( self.influencer_enemy_sphere, enabled ); + + if ( isdefined( self.influencer_weapon_cylinder ) ) + enableinfluencer( self.influencer_weapon_cylinder, enabled ); +} + +player_influencers_set_team() +{ + if ( !level.teambased ) + { + team_mask = level.spawnsystem.ispawn_teammask_free; + other_team_mask = level.spawnsystem.ispawn_teammask_free; + weapon_team_mask = level.spawnsystem.ispawn_teammask_free; + } + else + { + team = self.pers["team"]; + team_mask = getteammask( team ); + other_team_mask = getotherteamsmask( team ); + weapon_team_mask = getotherteamsmask( team ); + } + + if ( level.friendlyfire != 0 && level.teambased ) + weapon_team_mask |= team_mask; + + if ( isdefined( self.influencer_friendly_sphere ) ) + setinfluencerteammask( self.influencer_friendly_sphere, team_mask ); + + if ( isdefined( self.influencer_friendly_cylinder ) ) + setinfluencerteammask( self.influencer_friendly_cylinder, team_mask ); + + if ( isdefined( self.influencer_enemy_sphere ) ) + setinfluencerteammask( self.influencer_enemy_sphere, other_team_mask ); + + if ( isdefined( self.influencer_weapon_cylinder ) ) + setinfluencerteammask( self.influencer_weapon_cylinder, weapon_team_mask ); +} + +create_body_influencers() +{ + if ( level.teambased ) + team_mask = getteammask( self.pers["team"] ); + else + team_mask = level.spawnsystem.ispawn_teammask_free; + + addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.dead_friend_influencer_radius, level.spawnsystem.dead_friend_influencer_score, team_mask, "dead_friend,r,s", get_score_curve_index( level.spawnsystem.dead_friend_influencer_score_curve ), level.spawnsystem.dead_friend_influencer_timeout_seconds ); +} + +create_grenade_influencers( parent_team, weaponname, grenade ) +{ + pixbeginevent( "create_grenade_influencers" ); + + if ( !level.teambased ) + weapon_team_mask = level.spawnsystem.ispawn_teammask_free; + else + { + weapon_team_mask = getotherteamsmask( parent_team ); + + if ( level.friendlyfire ) + weapon_team_mask |= getteammask( parent_team ); + } + + if ( issubstr( weaponname, "napalmblob" ) || issubstr( weaponname, "gl_" ) ) + { + pixendevent(); + return; + } + + timeout = 0; + + if ( weaponname == "tabun_gas_mp" ) + timeout = 7.0; + + if ( isdefined( grenade.origin ) ) + { + if ( weaponname == "claymore_mp" || weaponname == "bouncingbetty_mp" ) + addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, grenade.origin, level.spawnsystem.claymore_influencer_radius, level.spawnsystem.claymore_influencer_score, weapon_team_mask, "claymore,r,s", get_score_curve_index( level.spawnsystem.claymore_influencer_score_curve ), timeout, grenade ); + else + addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, grenade.origin, level.spawnsystem.grenade_influencer_radius, level.spawnsystem.grenade_influencer_score, weapon_team_mask, "grenade,r,s", get_score_curve_index( level.spawnsystem.grenade_influencer_score_curve ), timeout, grenade ); + } + + pixendevent(); +} + +create_napalm_fire_influencers( point, direction, parent_team, duration ) +{ + timeout = duration; + weapon_team_mask = 0; + offset = vectorscale( anglestoforward( direction ), 1100 ); + addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point + 2.0 * offset, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); + addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point + offset, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); + addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); + addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point - offset, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); +} + +create_auto_turret_influencer( point, parent_team, angles ) +{ + if ( !level.teambased ) + weapon_team_mask = level.spawnsystem.ispawn_teammask_free; + else + weapon_team_mask = getotherteamsmask( parent_team ); + + projected_point = point + vectorscale( anglestoforward( angles ), level.spawnsystem.auto_turret_influencer_radius * 0.7 ); + influencerid = addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, projected_point, level.spawnsystem.auto_turret_influencer_radius, level.spawnsystem.auto_turret_influencer_score, weapon_team_mask, "auto_turret,r,s", get_score_curve_index( level.spawnsystem.auto_turret_influencer_score_curve ) ); + return influencerid; +} + +create_auto_turret_influencer_close( point, parent_team, angles ) +{ + if ( !level.teambased ) + weapon_team_mask = level.spawnsystem.ispawn_teammask_free; + else + weapon_team_mask = getotherteamsmask( parent_team ); + + projected_point = point + vectorscale( anglestoforward( angles ), level.spawnsystem.auto_turret_influencer_close_radius * 0.7 ); + influencerid = addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, projected_point, level.spawnsystem.auto_turret_influencer_close_radius, level.spawnsystem.auto_turret_influencer_close_score, weapon_team_mask, "auto_turret_close,r,s", get_score_curve_index( level.spawnsystem.auto_turret_influencer_close_score_curve ) ); + return influencerid; +} + +create_dog_influencers() +{ + if ( !level.teambased ) + dog_enemy_team_mask = level.spawnsystem.ispawn_teammask_free; + else + dog_enemy_team_mask = getotherteamsmask( self.aiteam ); + + addsphereinfluencer( level.spawnsystem.einfluencer_type_dog, self.origin, level.spawnsystem.dog_influencer_radius, level.spawnsystem.dog_influencer_score, dog_enemy_team_mask, "dog,r,s", get_score_curve_index( level.spawnsystem.dog_influencer_score_curve ), 0, self ); +} + +create_helicopter_influencers( parent_team ) +{ + if ( !level.teambased ) + team_mask = level.spawnsystem.ispawn_teammask_free; + else + team_mask = getotherteamsmask( parent_team ); + + self.influencer_helicopter_cylinder = addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, ( 0, 0, 0 ), ( 0, 0, 0 ), level.spawnsystem.helicopter_influencer_radius, level.spawnsystem.helicopter_influencer_length, level.spawnsystem.helicopter_influencer_score, team_mask, "helicopter,r,s", get_score_curve_index( level.spawnsystem.helicopter_influencer_score_curve ), 0, self ); +} + +remove_helicopter_influencers() +{ + if ( isdefined( self.influencer_helicopter_cylinder ) ) + removeinfluencer( self.influencer_helicopter_cylinder ); + + self.influencer_helicopter_cylinder = undefined; +} + +create_tvmissile_influencers( parent_team ) +{ + if ( !level.teambased || is_hardcore() ) + team_mask = level.spawnsystem.ispawn_teammask_free; + else + team_mask = getotherteamsmask( parent_team ); + + self.influencer_tvmissile_cylinder = addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, ( 0, 0, 0 ), ( 0, 0, 0 ), level.spawnsystem.tvmissile_influencer_radius, level.spawnsystem.tvmissile_influencer_length, level.spawnsystem.tvmissile_influencer_score, team_mask, "tvmissile,r,s", get_score_curve_index( level.spawnsystem.tvmissile_influencer_score_curve ), 0, self ); +} + +remove_tvmissile_influencers() +{ + if ( isdefined( self.influencer_tvmissile_cylinder ) ) + removeinfluencer( self.influencer_tvmissile_cylinder ); + + self.influencer_tvmissile_cylinder = undefined; +} + +create_artillery_influencers( point, radius ) +{ + weapon_team_mask = 0; + + if ( radius < 0 ) + thisradius = level.spawnsystem.artillery_influencer_radius; + else + thisradius = radius; + + return addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, point + vectorscale( ( 0, 0, -1 ), 2000.0 ), ( 1, 0, 0 ), ( 0, 0, 1 ), thisradius, 5000, level.spawnsystem.artillery_influencer_score, weapon_team_mask, "artillery,s,r", get_score_curve_index( level.spawnsystem.artillery_influencer_score_curve ), 7 ); +} + +create_vehicle_influencers() +{ + weapon_team_mask = 0; + vehicleradius = 144; + cylinderlength = level.spawnsystem.vehicle_influencer_lead_seconds; + up = ( 0, 0, 1 ); + forward = ( 1, 0, 0 ); + cylinder_forward = up; + cylinder_up = forward; + return addcylinderinfluencer( level.spawnsystem.einfluencer_type_vehicle, self.origin, cylinder_forward, cylinder_up, vehicleradius, cylinderlength, level.spawnsystem.vehicle_influencer_score, weapon_team_mask, "vehicle,s", get_score_curve_index( level.spawnsystem.vehicle_influencer_score_curve ), 0, self ); +} + +create_rcbomb_influencers( team ) +{ + if ( !level.teambased ) + other_team_mask = level.spawnsystem.ispawn_teammask_free; + else + other_team_mask = getotherteamsmask( team ); + + return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.rcbomb_influencer_radius, level.spawnsystem.rcbomb_influencer_score, other_team_mask, "rcbomb,r,s", get_score_curve_index( level.spawnsystem.rcbomb_influencer_score_curve ), 0, self ); +} + +create_qrdrone_influencers( team ) +{ + if ( !level.teambased ) + other_team_mask = level.spawnsystem.ispawn_teammask_free; + else + other_team_mask = getotherteamsmask( team ); + + self.influencer_qrdrone_cylinder = addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, ( 0, 0, 0 ), ( 0, 0, 0 ), level.spawnsystem.qrdrone_cylinder_influencer_radius, level.spawnsystem.qrdrone_cylinder_influencer_length, level.spawnsystem.qrdrone_cylinder_influencer_score, other_team_mask, "qrdrone_cyl,r,s", get_score_curve_index( level.spawnsystem.qrdrone_cylinder_influencer_score_curve ), 0, self ); + return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.qrdrone_influencer_radius, level.spawnsystem.qrdrone_influencer_score, other_team_mask, "qrdrone,r,s", get_score_curve_index( level.spawnsystem.qrdrone_influencer_score_curve ), 0, self ); +} + +create_aitank_influencers( team ) +{ + if ( !level.teambased ) + other_team_mask = level.spawnsystem.ispawn_teammask_free; + else + other_team_mask = getotherteamsmask( team ); + + return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.aitank_influencer_radius, level.spawnsystem.aitank_influencer_score, other_team_mask, "aitank,r,s", get_score_curve_index( level.spawnsystem.aitank_influencer_score_curve ), 0, self ); +} + +create_pegasus_influencer( origin, team ) +{ + if ( !level.teambased ) + other_team_mask = level.spawnsystem.ispawn_teammask_free; + else + other_team_mask = getotherteamsmask( team ); + + return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, origin, level.spawnsystem.pegasus_influencer_radius, level.spawnsystem.pegasus_influencer_score, other_team_mask, "pegasus,r,s", get_score_curve_index( level.spawnsystem.pegasus_influencer_score_curve ), 0 ); +} + +create_map_placed_influencers() +{ + staticinfluencerents = getentarray( "mp_uspawn_influencer", "classname" ); + + for ( i = 0; i < staticinfluencerents.size; i++ ) + { + staticinfluencerent = staticinfluencerents[i]; + + if ( isdefined( staticinfluencerent.script_gameobjectname ) && staticinfluencerent.script_gameobjectname == "twar" ) + continue; + + create_map_placed_influencer( staticinfluencerent ); + } +} + +create_map_placed_influencer( influencer_entity, optional_score_override ) +{ + influencer_id = -1; + + if ( isdefined( influencer_entity.script_shape ) && isdefined( influencer_entity.script_score ) && isdefined( influencer_entity.script_score_curve ) ) + { + switch ( influencer_entity.script_shape ) + { + case "sphere": + if ( isdefined( influencer_entity.radius ) ) + { + if ( isdefined( optional_score_override ) ) + score = optional_score_override; + else + score = influencer_entity.script_score; + + influencer_id = addsphereinfluencer( level.spawnsystem.einfluencer_type_game_mode, influencer_entity.origin, influencer_entity.radius, score, getteammask( influencer_entity.script_team ), "*map_defined", get_score_curve_index( influencer_entity.script_score_curve ) ); + } + else + { +/# + assertmsg( "Radiant-placed sphere spawn influencers require 'radius' parameter" ); +#/ + } + + break; + case "cylinder": + if ( isdefined( influencer_entity.radius ) && isdefined( influencer_entity.height ) ) + { + if ( isdefined( optional_score_override ) ) + score = optional_score_override; + else + score = influencer_entity.script_score; + + influencer_id = addcylinderinfluencer( level.spawnsystem.einfluencer_type_game_mode, influencer_entity.origin, anglestoforward( influencer_entity.angles ), anglestoup( influencer_entity.angles ), influencer_entity.radius, influencer_entity.height, score, getteammask( influencer_entity.script_team ), "*map_defined", get_score_curve_index( influencer_entity.script_score_curve ) ); + } + else + { +/# + assertmsg( "Radiant-placed cylinder spawn influencers require 'radius' and 'height' parameters" ); +#/ + } + + break; + default: +/# + assertmsg( "Unsupported script_shape value (\"" + influencer_entity.script_shape + "\") for unified spawning system static influencer. Supported shapes are \"cylinder\" and \"sphere\"." ); +#/ + break; + } + } + else + { +/# + assertmsg( "Radiant-placed spawn influencers require 'script_shape', 'script_score' and 'script_score_curve' parameters" ); +#/ + } + + return influencer_id; +} + +create_enemy_spawned_influencers( origin, team ) +{ + if ( !level.teambased ) + other_team_mask = level.spawnsystem.ispawn_teammask_free; + else + other_team_mask = getotherteamsmask( team ); + + return addsphereinfluencer( level.spawnsystem.einfluencer_type_enemy_spawned, origin, level.spawnsystem.enemy_spawned_influencer_radius, level.spawnsystem.enemy_spawned_influencer_score, other_team_mask, "enemy_spawned,r,s", get_score_curve_index( level.spawnsystem.enemy_spawned_influencer_score_curve ), level.spawnsystem.enemy_spawned_influencer_timeout_seconds ); +} + +updateallspawnpoints() +{ + foreach ( team in level.teams ) + gatherspawnentities( team ); + + clearspawnpoints(); + + if ( level.teambased ) + { + foreach ( team in level.teams ) + addspawnpoints( team, level.unified_spawn_points[team].a ); + } + else + { + foreach ( team in level.teams ) + addspawnpoints( "free", level.unified_spawn_points[team].a ); + } + + remove_unused_spawn_entities(); +} + +initialize_player_spawning_dvars() +{ +/# + reset_dvars = 1; + + while ( true ) + { + get_player_spawning_dvars( reset_dvars ); + reset_dvars = 0; + wait 2; + } +#/ +} + +get_player_spawning_dvars( reset_dvars ) +{ + k_player_height = get_player_height(); + player_height_times_10 = "" + 10.0 * k_player_height; + ss = level.spawnsystem; + player_influencer_radius = 15.0 * k_player_height; + player_influencer_score = 150.0; + dog_influencer_radius = 10.0 * k_player_height; + dog_influencer_score = 150.0; + ss.script_based_influencer_system = set_dvar_int_if_unset( "scr_script_based_influencer_system", "0", reset_dvars ); + ss.randomness_range = set_dvar_float_if_unset( "scr_spawn_randomness_range", "0", reset_dvars ); + ss.objective_facing_bonus = set_dvar_float_if_unset( "scr_spawn_objective_facing_bonus", "0", reset_dvars ); + + if ( level.multiteam ) + { + ss.friend_weak_influencer_score = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_score", "200", reset_dvars ); + ss.friend_weak_influencer_score_curve = set_dvar_if_unset( "scr_spawn_friend_weak_influencer_score_curve", "linear", reset_dvars ); + ss.friend_weak_influencer_radius = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_radius", "1200", reset_dvars ); + } + else + { + ss.friend_weak_influencer_score = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_score", "20", reset_dvars ); + ss.friend_weak_influencer_score_curve = set_dvar_if_unset( "scr_spawn_friend_weak_influencer_score_curve", "linear", reset_dvars ); + ss.friend_weak_influencer_radius = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_radius", "700", reset_dvars ); + } + + ss.enemy_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_score", "-150", reset_dvars ); + ss.enemy_influencer_score_curve = set_dvar_if_unset( "scr_spawn_enemy_influencer_score_curve", "linear", reset_dvars ); + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2600", reset_dvars ); + ss.dead_friend_influencer_timeout_seconds = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_timeout_seconds", "20", reset_dvars ); + ss.dead_friend_influencer_count = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_count", "7", reset_dvars ); + ss.dead_friend_influencer_score = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_score", "-100", reset_dvars ); + ss.dead_friend_influencer_score_curve = set_dvar_if_unset( "scr_spawn_dead_friend_influencer_score_curve", "steep", reset_dvars ); + ss.dead_friend_influencer_radius = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_radius", player_height_times_10, reset_dvars ); + ss.vehicle_influencer_score = set_dvar_float_if_unset( "scr_spawn_vehicle_influencer_score", "-50", reset_dvars ); + ss.vehicle_influencer_score_curve = set_dvar_if_unset( "scr_spawn_vehicle_influencer_score_curve", "linear", reset_dvars ); + ss.vehicle_influencer_lead_seconds = set_dvar_float_if_unset( "scr_spawn_vehicle_influencer_lead_seconds", "3", reset_dvars ); + ss.dog_influencer_score = set_dvar_float_if_unset( "scr_spawn_dog_influencer_score", "-150", reset_dvars ); + ss.dog_influencer_score_curve = set_dvar_if_unset( "scr_spawn_dog_influencer_score_curve", "steep", reset_dvars ); + ss.dog_influencer_radius = set_dvar_float_if_unset( "scr_spawn_dog_influencer_radius", "" + 15.0 * k_player_height, reset_dvars ); + ss.artillery_influencer_score = set_dvar_float_if_unset( "scr_spawn_artillery_influencer_score", "-600", reset_dvars ); + ss.artillery_influencer_score_curve = set_dvar_if_unset( "scr_spawn_artillery_influencer_score_curve", "linear", reset_dvars ); + ss.artillery_influencer_radius = set_dvar_float_if_unset( "scr_spawn_artillery_influencer_radius", "1200", reset_dvars ); + ss.grenade_influencer_score = set_dvar_float_if_unset( "scr_spawn_grenade_influencer_score", "-300", reset_dvars ); + ss.grenade_influencer_score_curve = set_dvar_if_unset( "scr_spawn_grenade_influencer_score_curve", "linear", reset_dvars ); + ss.grenade_influencer_radius = set_dvar_float_if_unset( "scr_spawn_grenade_influencer_radius", "" + 8.0 * k_player_height, reset_dvars ); + ss.grenade_endpoint_influencer_score = set_dvar_float_if_unset( "scr_spawn_grenade_endpoint_influencer_score", "-300", reset_dvars ); + ss.grenade_endpoint_influencer_score_curve = set_dvar_if_unset( "scr_spawn_grenade_endpoint_influencer_score_curve", "linear", reset_dvars ); + ss.grenade_endpoint_influencer_radius = set_dvar_float_if_unset( "scr_spawn_grenade_endpoint_influencer_radius", "" + 8.0 * k_player_height, reset_dvars ); + ss.claymore_influencer_score = set_dvar_float_if_unset( "scr_spawn_claymore_influencer_score", "-150", reset_dvars ); + ss.claymore_influencer_score_curve = set_dvar_if_unset( "scr_spawn_claymore_influencer_score_curve", "steep", reset_dvars ); + ss.claymore_influencer_radius = set_dvar_float_if_unset( "scr_spawn_claymore_influencer_radius", "" + 9.0 * k_player_height, reset_dvars ); + ss.napalm_influencer_score = set_dvar_float_if_unset( "scr_spawn_napalm_influencer_score", "-500", reset_dvars ); + ss.napalm_influencer_score_curve = set_dvar_if_unset( "scr_spawn_napalm_influencer_score_curve", "linear", reset_dvars ); + ss.napalm_influencer_radius = set_dvar_float_if_unset( "scr_spawn_napalm_influencer_radius", "" + 750, reset_dvars ); + ss.auto_turret_influencer_score = set_dvar_float_if_unset( "scr_spawn_auto_turret_influencer_score", "-650", reset_dvars ); + ss.auto_turret_influencer_score_curve = set_dvar_if_unset( "scr_spawn_auto_turret_influencer_score_curve", "linear", reset_dvars ); + ss.auto_turret_influencer_radius = set_dvar_float_if_unset( "scr_spawn_auto_turret_influencer_radius", "" + 1200, reset_dvars ); + ss.auto_turret_influencer_close_score = set_dvar_float_if_unset( "scr_spawn_auto_turret_influencer_close_score", "-250000", reset_dvars ); + ss.auto_turret_influencer_close_score_curve = set_dvar_if_unset( "scr_spawn_auto_turret_influencer_close_score_curve", "constant", reset_dvars ); + ss.auto_turret_influencer_close_radius = set_dvar_float_if_unset( "scr_spawn_auto_turret_influencer_close_radius", "" + 500, reset_dvars ); + ss.rcbomb_influencer_score = set_dvar_float_if_unset( "scr_spawn_rcbomb_influencer_score", "-200", reset_dvars ); + ss.rcbomb_influencer_score_curve = set_dvar_if_unset( "scr_spawn_rcbomb_influencer_score_curve", "steep", reset_dvars ); + ss.rcbomb_influencer_radius = set_dvar_float_if_unset( "scr_spawn_rcbomb_influencer_radius", "" + 25.0 * k_player_height, reset_dvars ); + ss.qrdrone_influencer_score = set_dvar_float_if_unset( "scr_spawn_qrdrone_influencer_score", "-200", reset_dvars ); + ss.qrdrone_influencer_score_curve = set_dvar_if_unset( "scr_spawn_qrdrone_influencer_score_curve", "steep", reset_dvars ); + ss.qrdrone_influencer_radius = set_dvar_float_if_unset( "scr_spawn_qrdrone_influencer_radius", "" + 25.0 * k_player_height, reset_dvars ); + ss.qrdrone_cylinder_influencer_score = set_dvar_float_if_unset( "scr_spawn_qrdrone_cylinder_influencer_score", "-300", reset_dvars ); + ss.qrdrone_cylinder_influencer_score_curve = set_dvar_if_unset( "scr_spawn_qrdrone_cylinder_influencer_score_curve", "linear", reset_dvars ); + ss.qrdrone_cylinder_influencer_radius = set_dvar_float_if_unset( "scr_spawn_qrdrone_cylinder_influencer_radius", 1000, reset_dvars ); + ss.qrdrone_cylinder_influencer_length = set_dvar_float_if_unset( "scr_spawn_qrdrone_cylinder_influencer_length", 2000, reset_dvars ); + ss.aitank_influencer_score = set_dvar_float_if_unset( "scr_spawn_aitank_influencer_score", "-200", reset_dvars ); + ss.aitank_influencer_score_curve = set_dvar_if_unset( "scr_spawn_aitank_influencer_score_curve", "linear", reset_dvars ); + ss.aitank_influencer_radius = set_dvar_float_if_unset( "scr_spawn_aitank_influencer_radius", "" + 25.0 * k_player_height, reset_dvars ); + ss.enemy_spawned_influencer_score_curve = set_dvar_if_unset( "scr_spawn_enemy_spawned_influencer_score_curve", "constant", reset_dvars ); + + if ( level.multiteam ) + { + ss.enemy_spawned_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_score", "-400", reset_dvars ); + ss.enemy_spawned_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_radius", "" + 1100, reset_dvars ); + } + else if ( level.teambased ) + { + ss.enemy_spawned_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_score", "-400", reset_dvars ); + ss.enemy_spawned_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_radius", "" + 1100, reset_dvars ); + } + else + { + ss.enemy_spawned_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_score", "-400", reset_dvars ); + ss.enemy_spawned_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_radius", "" + 1000, reset_dvars ); + } + + ss.enemy_spawned_influencer_timeout_seconds = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_timeout_seconds", "7", reset_dvars ); + ss.helicopter_influencer_score = set_dvar_float_if_unset( "scr_spawn_helicopter_influencer_score", "-500", reset_dvars ); + ss.helicopter_influencer_score_curve = set_dvar_if_unset( "scr_spawn_helicopter_influencer_score_curve", "linear", reset_dvars ); + ss.helicopter_influencer_radius = set_dvar_float_if_unset( "scr_spawn_helicopter_influencer_radius", "" + 2000, reset_dvars ); + ss.helicopter_influencer_length = set_dvar_float_if_unset( "scr_spawn_helicopter_influencer_length", "" + 3500, reset_dvars ); + ss.tvmissile_influencer_score = set_dvar_float_if_unset( "scr_spawn_tvmissile_influencer_score", "-400", reset_dvars ); + ss.tvmissile_influencer_score_curve = set_dvar_if_unset( "scr_spawn_tvmissile_influencer_score_curve", "linear", reset_dvars ); + ss.tvmissile_influencer_radius = set_dvar_float_if_unset( "scr_spawn_tvmissile_influencer_radius", "" + 2000, reset_dvars ); + ss.tvmissile_influencer_length = set_dvar_float_if_unset( "scr_spawn_tvmissile_influencer_length", "" + 3000, reset_dvars ); + ss.pegasus_influencer_score = set_dvar_float_if_unset( "scr_spawn_pegasus_influencer_score", "-250", reset_dvars ); + ss.pegasus_influencer_score_curve = set_dvar_if_unset( "scr_spawn_pegasus_influencer_score_curve", "linear", reset_dvars ); + ss.pegasus_influencer_radius = set_dvar_float_if_unset( "scr_spawn_pegasus_influencer_radius", "" + 20.0 * k_player_height, reset_dvars ); + + if ( !isdefined( ss.unifiedsideswitching ) ) + ss.unifiedsideswitching = 1; + + [[ level.gamemodespawndvars ]]( reset_dvars ); + + if ( isdefined( level.levelspawndvars ) ) + [[ level.levelspawndvars ]]( reset_dvars ); + + setspawnpointrandomvariation( ss.randomness_range ); +} + +level_use_unified_spawning( use ) +{ + +} + +onspawnplayer_unified( predictedspawn = 0 ) +{ +/# + if ( getdvarint( "scr_spawn_point_test_mode" ) != 0 ) + { + spawn_point = get_debug_spawnpoint( self ); + self spawn( spawn_point.origin, spawn_point.angles ); + return; + } +#/ + use_new_spawn_system = 1; + initial_spawn = 1; + + if ( isdefined( self.uspawn_already_spawned ) ) + initial_spawn = !self.uspawn_already_spawned; + + if ( level.usestartspawns ) + use_new_spawn_system = 0; + + if ( level.gametype == "sd" ) + use_new_spawn_system = 0; + + set_dvar_if_unset( "scr_spawn_force_unified", "0" ); + spawnoverride = self maps\mp\_tacticalinsertion::overridespawn( predictedspawn ); + + if ( use_new_spawn_system || getdvarint( "scr_spawn_force_unified" ) != 0 ) + { + if ( !spawnoverride ) + { + spawn_point = getspawnpoint( self, predictedspawn ); + + if ( isdefined( spawn_point ) ) + { + if ( predictedspawn ) + self predictspawnpoint( spawn_point.origin, spawn_point.angles ); + else + { + create_enemy_spawned_influencers( spawn_point.origin, self.pers["team"] ); + self spawn( spawn_point.origin, spawn_point.angles ); + } + } + else + { +/# + println( "ERROR: unable to locate a usable spawn point for player" ); +#/ + maps\mp\gametypes\_callbacksetup::abortlevel(); + } + } + else if ( predictedspawn && isdefined( self.tacticalinsertion ) ) + self predictspawnpoint( self.tacticalinsertion.origin, self.tacticalinsertion.angles ); + + if ( !predictedspawn ) + { + self.lastspawntime = gettime(); + self enable_player_influencers( 1 ); + } + } + else if ( !spawnoverride ) + [[ level.onspawnplayer ]]( predictedspawn ); + + if ( !predictedspawn ) + self.uspawn_already_spawned = 1; +} + +getspawnpoint( player_entity, predictedspawn = 0 ) +{ + if ( level.teambased ) + { + point_team = player_entity.pers["team"]; + influencer_team = player_entity.pers["team"]; + } + else + { + point_team = "free"; + influencer_team = "free"; + } + + if ( level.teambased && isdefined( game["switchedsides"] ) && game["switchedsides"] && level.spawnsystem.unifiedsideswitching ) + point_team = getotherteam( point_team ); + + best_spawn_entity = get_best_spawnpoint( point_team, influencer_team, player_entity, predictedspawn ); + + if ( !predictedspawn ) + player_entity.last_spawn_origin = best_spawn_entity.origin; + + return best_spawn_entity; +} + +get_debug_spawnpoint( player ) +{ + if ( level.teambased ) + team = player.pers["team"]; + else + team = "free"; + + index = level.test_spawn_point_index; + level.test_spawn_point_index++; + + if ( team == "free" ) + { + spawn_counts = 0; + + foreach ( team in level.teams ) + spawn_counts += level.unified_spawn_points[team].a.size; + + if ( level.test_spawn_point_index >= spawn_counts ) + level.test_spawn_point_index = 0; + + count = 0; + + foreach ( team in level.teams ) + { + size = level.unified_spawn_points[team].a.size; + + if ( level.test_spawn_point_index < count + size ) + return level.unified_spawn_points[team].a[level.test_spawn_point_index - count]; + + count += size; + } + } + else + { + if ( level.test_spawn_point_index >= level.unified_spawn_points[team].a.size ) + level.test_spawn_point_index = 0; + + return level.unified_spawn_points[team].a[level.test_spawn_point_index]; + } +} + +get_best_spawnpoint( point_team, influencer_team, player, predictedspawn ) +{ + if ( level.teambased ) + vis_team_mask = getotherteamsmask( player.pers["team"] ); + else + vis_team_mask = level.spawnsystem.ispawn_teammask_free; + + scored_spawn_points = getsortedspawnpoints( point_team, influencer_team, vis_team_mask, player, predictedspawn ); + assert( scored_spawn_points.size > 0 ); + assert( scored_spawn_points.size == 1 ); + + if ( !predictedspawn ) + bbprint( "mpspawnpointsused", "reason %s x %d y %d z %d", "point used", scored_spawn_points[0].origin ); + + return scored_spawn_points[0]; +} + +gatherspawnentities( player_team ) +{ + if ( !isdefined( level.unified_spawn_points ) ) + level.unified_spawn_points = []; + else if ( isdefined( level.unified_spawn_points[player_team] ) ) + return level.unified_spawn_points[player_team]; + + spawn_entities_s = spawn_array_struct(); + spawn_entities_s.a = getentarray( "mp_uspawn_point", "classname" ); + + if ( !isdefined( spawn_entities_s.a ) ) + spawn_entities_s.a = []; + + legacy_spawn_points = maps\mp\gametypes\_spawnlogic::getteamspawnpoints( player_team ); + + for ( legacy_spawn_index = 0; legacy_spawn_index < legacy_spawn_points.size; legacy_spawn_index++ ) + spawn_entities_s.a[spawn_entities_s.a.size] = legacy_spawn_points[legacy_spawn_index]; + + level.unified_spawn_points[player_team] = spawn_entities_s; + return spawn_entities_s; +} + +is_hardcore() +{ + return isdefined( level.hardcoremode ) && level.hardcoremode; +} + +teams_have_enmity( team1, team2 ) +{ + if ( !isdefined( team1 ) || !isdefined( team2 ) || level.gametype == "dm" ) + return 1; + + return team1 != "neutral" && team2 != "neutral" && team1 != team2; +} + +remove_unused_spawn_entities() +{ + spawn_entity_types = []; + spawn_entity_types[spawn_entity_types.size] = "mp_dm_spawn"; + spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn_allies_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn_axis_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn_team1_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn_team2_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn_team3_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn_team4_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn_team5_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn_team6_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn"; + spawn_entity_types[spawn_entity_types.size] = "mp_ctf_spawn_allies_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_ctf_spawn_axis_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_ctf_spawn_allies"; + spawn_entity_types[spawn_entity_types.size] = "mp_ctf_spawn_axis"; + spawn_entity_types[spawn_entity_types.size] = "mp_dom_spawn_allies_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_dom_spawn_axis_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_dom_spawn_flag_a"; + spawn_entity_types[spawn_entity_types.size] = "mp_dom_spawn_flag_b"; + spawn_entity_types[spawn_entity_types.size] = "mp_dom_spawn_flag_c"; + spawn_entity_types[spawn_entity_types.size] = "mp_dom_spawn"; + spawn_entity_types[spawn_entity_types.size] = "mp_sab_spawn_allies_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_sab_spawn_axis_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_sab_spawn_allies"; + spawn_entity_types[spawn_entity_types.size] = "mp_sab_spawn_axis"; + spawn_entity_types[spawn_entity_types.size] = "mp_sd_spawn_attacker"; + spawn_entity_types[spawn_entity_types.size] = "mp_sd_spawn_defender"; + spawn_entity_types[spawn_entity_types.size] = "mp_dem_spawn_attacker_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_dem_spawn_defender_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_dem_spawn_attackerOT_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_dem_spawn_defenderOT_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_dem_spawn_attacker"; + spawn_entity_types[spawn_entity_types.size] = "mp_dem_spawn_defender"; + spawn_entity_types[spawn_entity_types.size] = "mp_twar_spawn_axis_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_twar_spawn_allies_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_twar_spawn"; + + for ( i = 0; i < spawn_entity_types.size; i++ ) + { + if ( spawn_point_class_name_being_used( spawn_entity_types[i] ) ) + continue; + + spawnpoints = maps\mp\gametypes\_spawnlogic::getspawnpointarray( spawn_entity_types[i] ); + delete_all_spawns( spawnpoints ); + } +} + +delete_all_spawns( spawnpoints ) +{ + for ( i = 0; i < spawnpoints.size; i++ ) + spawnpoints[i] delete(); +} + +spawn_point_class_name_being_used( name ) +{ + if ( !isdefined( level.spawn_point_class_names ) ) + return false; + + for ( i = 0; i < level.spawn_point_class_names.size; i++ ) + { + if ( level.spawn_point_class_names[i] == name ) + return true; + } + + return false; +} + +codecallback_updatespawnpoints() +{ + foreach ( team in level.teams ) + maps\mp\gametypes\_spawnlogic::rebuildspawnpoints( team ); + + level.unified_spawn_points = undefined; + updateallspawnpoints(); +} + +initialspawnprotection() +{ + self endon( "death" ); + self endon( "disconnect" ); + self thread maps\mp\killstreaks\_airsupport::monitorspeed( level.spawnprotectiontime ); + + if ( !isdefined( level.spawnprotectiontime ) || level.spawnprotectiontime == 0 ) + return; + + self.specialty_nottargetedbyairsupport = 1; + self spawnprotectionactive(); + wait( level.spawnprotectiontime ); + self spawnprotectioninactive(); + self.specialty_nottargetedbyairsupport = undefined; +} + +getteamstartspawnname( team, spawnpointnamebase ) +{ + spawn_point_team_name = team; + + if ( !level.multiteam && game["switchedsides"] ) + spawn_point_team_name = getotherteam( team ); + + if ( level.multiteam ) + { + if ( team == "axis" ) + spawn_point_team_name = "team1"; + else if ( team == "allies" ) + spawn_point_team_name = "team2"; + + if ( !isoneround() ) + { + number = int( getsubstr( spawn_point_team_name, 4, 5 ) ) - 1; + number = ( number + game["roundsplayed"] ) % level.teams.size + 1; + spawn_point_team_name = "team" + number; + } + } + + return spawnpointnamebase + "_" + spawn_point_team_name + "_start"; +} + +gettdmstartspawnname( team ) +{ + return getteamstartspawnname( team, "mp_tdm_spawn" ); +} diff --git a/MP/Core/maps/mp/gametypes/_spawnlogic.gsc b/MP/Core/maps/mp/gametypes/_spawnlogic.gsc new file mode 100644 index 0000000..ece2bb8 --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_spawnlogic.gsc @@ -0,0 +1,2029 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_callbacksetup; +#include maps\mp\gametypes\_gameobjects; +#include maps\mp\gametypes\_spawnlogic; + +onplayerconnect() +{ + for (;;) + level waittill( "connected", player ); +} + +findboxcenter( mins, maxs ) +{ + center = ( 0, 0, 0 ); + center = maxs - mins; + center = ( center[0] / 2, center[1] / 2, center[2] / 2 ) + mins; + return center; +} + +expandmins( mins, point ) +{ + if ( mins[0] > point[0] ) + mins = ( point[0], mins[1], mins[2] ); + + if ( mins[1] > point[1] ) + mins = ( mins[0], point[1], mins[2] ); + + if ( mins[2] > point[2] ) + mins = ( mins[0], mins[1], point[2] ); + + return mins; +} + +expandmaxs( maxs, point ) +{ + if ( maxs[0] < point[0] ) + maxs = ( point[0], maxs[1], maxs[2] ); + + if ( maxs[1] < point[1] ) + maxs = ( maxs[0], point[1], maxs[2] ); + + if ( maxs[2] < point[2] ) + maxs = ( maxs[0], maxs[1], point[2] ); + + return maxs; +} + +addspawnpointsinternal( team, spawnpointname ) +{ + oldspawnpoints = []; + + if ( level.teamspawnpoints[team].size ) + oldspawnpoints = level.teamspawnpoints[team]; + + level.teamspawnpoints[team] = getspawnpointarray( spawnpointname ); + + if ( !isdefined( level.spawnpoints ) ) + level.spawnpoints = []; + + for ( index = 0; index < level.teamspawnpoints[team].size; index++ ) + { + spawnpoint = level.teamspawnpoints[team][index]; + + if ( !isdefined( spawnpoint.inited ) ) + { + spawnpoint spawnpointinit(); + level.spawnpoints[level.spawnpoints.size] = spawnpoint; + } + } + + for ( index = 0; index < oldspawnpoints.size; index++ ) + { + origin = oldspawnpoints[index].origin; + level.spawnmins = expandmins( level.spawnmins, origin ); + level.spawnmaxs = expandmaxs( level.spawnmaxs, origin ); + level.teamspawnpoints[team][level.teamspawnpoints[team].size] = oldspawnpoints[index]; + } + + if ( !level.teamspawnpoints[team].size ) + { +/# + println( "^1ERROR: No " + spawnpointname + " spawnpoints found in level!" ); +#/ + maps\mp\gametypes\_callbacksetup::abortlevel(); + wait 1; + return; + } +} + +clearspawnpoints() +{ + foreach ( team in level.teams ) + level.teamspawnpoints[team] = []; + + level.spawnpoints = []; + level.unified_spawn_points = undefined; +} + +addspawnpoints( team, spawnpointname ) +{ + addspawnpointclassname( spawnpointname ); + addspawnpointteamclassname( team, spawnpointname ); + addspawnpointsinternal( team, spawnpointname ); +} + +rebuildspawnpoints( team ) +{ + level.teamspawnpoints[team] = []; + + for ( index = 0; index < level.spawn_point_team_class_names[team].size; index++ ) + addspawnpointsinternal( team, level.spawn_point_team_class_names[team][index] ); +} + +placespawnpoints( spawnpointname ) +{ + addspawnpointclassname( spawnpointname ); + spawnpoints = getspawnpointarray( spawnpointname ); +/# + if ( !isdefined( level.extraspawnpointsused ) ) + level.extraspawnpointsused = []; +#/ + if ( !spawnpoints.size ) + { +/# + println( "^1No " + spawnpointname + " spawnpoints found in level!" ); +#/ + maps\mp\gametypes\_callbacksetup::abortlevel(); + wait 1; + return; + } + + for ( index = 0; index < spawnpoints.size; index++ ) + { + spawnpoints[index] spawnpointinit(); +/# + spawnpoints[index].fakeclassname = spawnpointname; + level.extraspawnpointsused[level.extraspawnpointsused.size] = spawnpoints[index]; +#/ + } +} + +dropspawnpoints( spawnpointname ) +{ + spawnpoints = getspawnpointarray( spawnpointname ); + + if ( !spawnpoints.size ) + { +/# + println( "^1No " + spawnpointname + " spawnpoints found in level!" ); +#/ + return; + } + + for ( index = 0; index < spawnpoints.size; index++ ) + spawnpoints[index] placespawnpoint(); +} + +addspawnpointclassname( spawnpointclassname ) +{ + if ( !isdefined( level.spawn_point_class_names ) ) + level.spawn_point_class_names = []; + + level.spawn_point_class_names[level.spawn_point_class_names.size] = spawnpointclassname; +} + +addspawnpointteamclassname( team, spawnpointclassname ) +{ + level.spawn_point_team_class_names[team][level.spawn_point_team_class_names[team].size] = spawnpointclassname; +} + +getspawnpointarray( classname ) +{ + spawnpoints = getentarray( classname, "classname" ); + + if ( !isdefined( level.extraspawnpoints ) || !isdefined( level.extraspawnpoints[classname] ) ) + return spawnpoints; + + for ( i = 0; i < level.extraspawnpoints[classname].size; i++ ) + spawnpoints[spawnpoints.size] = level.extraspawnpoints[classname][i]; + + return spawnpoints; +} + +spawnpointinit() +{ + spawnpoint = self; + origin = spawnpoint.origin; + + if ( !level.spawnminsmaxsprimed ) + { + level.spawnmins = origin; + level.spawnmaxs = origin; + level.spawnminsmaxsprimed = 1; + } + else + { + level.spawnmins = expandmins( level.spawnmins, origin ); + level.spawnmaxs = expandmaxs( level.spawnmaxs, origin ); + } + + spawnpoint placespawnpoint(); + spawnpoint.forward = anglestoforward( spawnpoint.angles ); + spawnpoint.sighttracepoint = spawnpoint.origin + vectorscale( ( 0, 0, 1 ), 50.0 ); + spawnpoint.inited = 1; +} + +getteamspawnpoints( team ) +{ + return level.teamspawnpoints[team]; +} + +getspawnpoint_final( spawnpoints, useweights ) +{ + bestspawnpoint = undefined; + + if ( !isdefined( spawnpoints ) || spawnpoints.size == 0 ) + return undefined; + + if ( !isdefined( useweights ) ) + useweights = 1; + + if ( useweights ) + { + bestspawnpoint = getbestweightedspawnpoint( spawnpoints ); + thread spawnweightdebug( spawnpoints ); + } + else + { + for ( i = 0; i < spawnpoints.size; i++ ) + { + if ( isdefined( self.lastspawnpoint ) && self.lastspawnpoint == spawnpoints[i] ) + continue; + + if ( positionwouldtelefrag( spawnpoints[i].origin ) ) + continue; + + bestspawnpoint = spawnpoints[i]; + break; + } + + if ( !isdefined( bestspawnpoint ) ) + { + if ( isdefined( self.lastspawnpoint ) && !positionwouldtelefrag( self.lastspawnpoint.origin ) ) + { + for ( i = 0; i < spawnpoints.size; i++ ) + { + if ( spawnpoints[i] == self.lastspawnpoint ) + { + bestspawnpoint = spawnpoints[i]; + break; + } + } + } + } + } + + if ( !isdefined( bestspawnpoint ) ) + { + if ( useweights ) + bestspawnpoint = spawnpoints[randomint( spawnpoints.size )]; + else + bestspawnpoint = spawnpoints[0]; + } + + self finalizespawnpointchoice( bestspawnpoint ); +/# + self storespawndata( spawnpoints, useweights, bestspawnpoint ); +#/ + return bestspawnpoint; +} + +finalizespawnpointchoice( spawnpoint ) +{ + time = gettime(); + self.lastspawnpoint = spawnpoint; + self.lastspawntime = time; + spawnpoint.lastspawnedplayer = self; + spawnpoint.lastspawntime = time; +} + +getbestweightedspawnpoint( spawnpoints ) +{ + maxsighttracedspawnpoints = 3; + + for ( try = 0; try <= maxsighttracedspawnpoints; try++ ) + { + bestspawnpoints = []; + bestweight = undefined; + bestspawnpoint = undefined; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + if ( !isdefined( bestweight ) || spawnpoints[i].weight > bestweight ) + { + if ( positionwouldtelefrag( spawnpoints[i].origin ) ) + continue; + + bestspawnpoints = []; + bestspawnpoints[0] = spawnpoints[i]; + bestweight = spawnpoints[i].weight; + continue; + } + + if ( spawnpoints[i].weight == bestweight ) + { + if ( positionwouldtelefrag( spawnpoints[i].origin ) ) + continue; + + bestspawnpoints[bestspawnpoints.size] = spawnpoints[i]; + } + } + + if ( bestspawnpoints.size == 0 ) + return undefined; + + bestspawnpoint = bestspawnpoints[randomint( bestspawnpoints.size )]; + + if ( try == maxsighttracedspawnpoints ) + return bestspawnpoint; + + if ( isdefined( bestspawnpoint.lastsighttracetime ) && bestspawnpoint.lastsighttracetime == gettime() ) + return bestspawnpoint; + + if ( !lastminutesighttraces( bestspawnpoint ) ) + return bestspawnpoint; + + penalty = getlospenalty(); +/# + if ( level.storespawndata || level.debugspawning ) + bestspawnpoint.spawndata[bestspawnpoint.spawndata.size] = "Last minute sight trace: -" + penalty; +#/ + bestspawnpoint.weight -= penalty; + bestspawnpoint.lastsighttracetime = gettime(); + } +} + +checkbad( spawnpoint ) +{ +/# + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( !isalive( player ) || player.sessionstate != "playing" ) + continue; + + if ( level.teambased && player.team == self.team ) + continue; + + losexists = bullettracepassed( player.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), spawnpoint.sighttracepoint, 0, undefined ); + + if ( losexists ) + thread badspawnline( spawnpoint.sighttracepoint, player.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), self.name, player.name ); + } +#/ +} + +badspawnline( start, end, name1, name2 ) +{ +/# + dist = distance( start, end ); + + for ( i = 0; i < 200; i++ ) + { + line( start, end, ( 1, 0, 0 ) ); + print3d( start, "Bad spawn! " + name1 + ", dist = " + dist ); + print3d( end, name2 ); + wait 0.05; + } +#/ +} + +storespawndata( spawnpoints, useweights, bestspawnpoint ) +{ +/# + if ( !isdefined( level.storespawndata ) || !level.storespawndata ) + return; + + level.storespawndata = getdvarint( "scr_recordspawndata" ); + + if ( !level.storespawndata ) + return; + + if ( !isdefined( level.spawnid ) ) + { + level.spawngameid = randomint( 100 ); + level.spawnid = 0; + } + + if ( bestspawnpoint.classname == "mp_global_intermission" ) + return; + + level.spawnid++; + file = openfile( "spawndata.txt", "append" ); + fprintfields( file, level.spawngameid + "." + level.spawnid + "," + spawnpoints.size + "," + self.name ); + + for ( i = 0; i < spawnpoints.size; i++ ) + { + str = vectostr( spawnpoints[i].origin ) + ","; + + if ( spawnpoints[i] == bestspawnpoint ) + str += "1,"; + else + str += "0,"; + + if ( !useweights ) + str += "0,"; + else + str += ( spawnpoints[i].weight + "," ); + + if ( !isdefined( spawnpoints[i].spawndata ) ) + spawnpoints[i].spawndata = []; + + if ( !isdefined( spawnpoints[i].sightchecks ) ) + spawnpoints[i].sightchecks = []; + + str += ( spawnpoints[i].spawndata.size + "," ); + + for ( j = 0; j < spawnpoints[i].spawndata.size; j++ ) + str += ( spawnpoints[i].spawndata[j] + "," ); + + str += ( spawnpoints[i].sightchecks.size + "," ); + + for ( j = 0; j < spawnpoints[i].sightchecks.size; j++ ) + str += ( spawnpoints[i].sightchecks[j].penalty + "," + vectostr( spawnpoints[i].origin ) + "," ); + + fprintfields( file, str ); + } + + obj = spawnstruct(); + getallalliedandenemyplayers( obj ); + numallies = 0; + numenemies = 0; + str = ""; + + for ( i = 0; i < obj.allies.size; i++ ) + { + if ( obj.allies[i] == self ) + continue; + + numallies++; + str += ( vectostr( obj.allies[i].origin ) + "," ); + } + + for ( i = 0; i < obj.enemies.size; i++ ) + { + numenemies++; + str += ( vectostr( obj.enemies[i].origin ) + "," ); + } + + str = numallies + "," + numenemies + "," + str; + fprintfields( file, str ); + otherdata = []; + + if ( isdefined( level.bombguy ) ) + { + index = otherdata.size; + otherdata[index] = spawnstruct(); + otherdata[index].origin = level.bombguy.origin + vectorscale( ( 0, 0, 1 ), 20.0 ); + otherdata[index].text = "Bomb holder"; + } + else if ( isdefined( level.bombpos ) ) + { + index = otherdata.size; + otherdata[index] = spawnstruct(); + otherdata[index].origin = level.bombpos; + otherdata[index].text = "Bomb"; + } + + if ( isdefined( level.flags ) ) + { + for ( i = 0; i < level.flags.size; i++ ) + { + index = otherdata.size; + otherdata[index] = spawnstruct(); + otherdata[index].origin = level.flags[i].origin; + otherdata[index].text = level.flags[i].useobj maps\mp\gametypes\_gameobjects::getownerteam() + " flag"; + } + } + + str = otherdata.size + ","; + + for ( i = 0; i < otherdata.size; i++ ) + str += ( vectostr( otherdata[i].origin ) + "," + otherdata[i].text + "," ); + + fprintfields( file, str ); + closefile( file ); + thisspawnid = level.spawngameid + "." + level.spawnid; + + if ( isdefined( self.thisspawnid ) ) + { + + } + + self.thisspawnid = thisspawnid; +#/ +} + +readspawndata( desiredid, relativepos ) +{ +/# + file = openfile( "spawndata.txt", "read" ); + + if ( file < 0 ) + return; + + oldspawndata = level.curspawndata; + level.curspawndata = undefined; + prev = undefined; + prevthisplayer = undefined; + lookingfornextthisplayer = 0; + lookingfornext = 0; + + if ( isdefined( relativepos ) && !isdefined( oldspawndata ) ) + return; + + while ( true ) + { + if ( freadln( file ) <= 0 ) + break; + + data = spawnstruct(); + data.id = fgetarg( file, 0 ); + numspawns = int( fgetarg( file, 1 ) ); + + if ( numspawns > 256 ) + break; + + data.playername = fgetarg( file, 2 ); + data.spawnpoints = []; + data.friends = []; + data.enemies = []; + data.otherdata = []; + + for ( i = 0; i < numspawns; i++ ) + { + if ( freadln( file ) <= 0 ) + break; + + spawnpoint = spawnstruct(); + spawnpoint.origin = strtovec( fgetarg( file, 0 ) ); + spawnpoint.winner = int( fgetarg( file, 1 ) ); + spawnpoint.weight = int( fgetarg( file, 2 ) ); + spawnpoint.data = []; + spawnpoint.sightchecks = []; + + if ( i == 0 ) + { + data.minweight = spawnpoint.weight; + data.maxweight = spawnpoint.weight; + } + else + { + if ( spawnpoint.weight < data.minweight ) + data.minweight = spawnpoint.weight; + + if ( spawnpoint.weight > data.maxweight ) + data.maxweight = spawnpoint.weight; + } + + argnum = 4; + numdata = int( fgetarg( file, 3 ) ); + + if ( numdata > 256 ) + break; + + for ( j = 0; j < numdata; j++ ) + { + spawnpoint.data[spawnpoint.data.size] = fgetarg( file, argnum ); + argnum++; + } + + numsightchecks = int( fgetarg( file, argnum ) ); + argnum++; + + if ( numsightchecks > 256 ) + break; + + for ( j = 0; j < numsightchecks; j++ ) + { + index = spawnpoint.sightchecks.size; + spawnpoint.sightchecks[index] = spawnstruct(); + spawnpoint.sightchecks[index].penalty = int( fgetarg( file, argnum ) ); + argnum++; + spawnpoint.sightchecks[index].origin = strtovec( fgetarg( file, argnum ) ); + argnum++; + } + + data.spawnpoints[data.spawnpoints.size] = spawnpoint; + } + + if ( !isdefined( data.minweight ) ) + { + data.minweight = -1; + data.maxweight = 0; + } + + if ( data.minweight == data.maxweight ) + data.minweight -= 1; + + if ( freadln( file ) <= 0 ) + break; + + numfriends = int( fgetarg( file, 0 ) ); + numenemies = int( fgetarg( file, 1 ) ); + + if ( numfriends > 32 || numenemies > 32 ) + break; + + argnum = 2; + + for ( i = 0; i < numfriends; i++ ) + { + data.friends[data.friends.size] = strtovec( fgetarg( file, argnum ) ); + argnum++; + } + + for ( i = 0; i < numenemies; i++ ) + { + data.enemies[data.enemies.size] = strtovec( fgetarg( file, argnum ) ); + argnum++; + } + + if ( freadln( file ) <= 0 ) + break; + + numotherdata = int( fgetarg( file, 0 ) ); + argnum = 1; + + for ( i = 0; i < numotherdata; i++ ) + { + otherdata = spawnstruct(); + otherdata.origin = strtovec( fgetarg( file, argnum ) ); + argnum++; + otherdata.text = fgetarg( file, argnum ); + argnum++; + data.otherdata[data.otherdata.size] = otherdata; + } + + if ( isdefined( relativepos ) ) + { + if ( relativepos == "prevthisplayer" ) + { + if ( data.id == oldspawndata.id ) + { + level.curspawndata = prevthisplayer; + break; + } + } + else if ( relativepos == "prev" ) + { + if ( data.id == oldspawndata.id ) + { + level.curspawndata = prev; + break; + } + } + else if ( relativepos == "nextthisplayer" ) + { + if ( lookingfornextthisplayer ) + { + level.curspawndata = data; + break; + } + else if ( data.id == oldspawndata.id ) + lookingfornextthisplayer = 1; + } + else if ( relativepos == "next" ) + { + if ( lookingfornext ) + { + level.curspawndata = data; + break; + } + else if ( data.id == oldspawndata.id ) + lookingfornext = 1; + } + } + else if ( data.id == desiredid ) + { + level.curspawndata = data; + break; + } + + prev = data; + + if ( isdefined( oldspawndata ) && data.playername == oldspawndata.playername ) + prevthisplayer = data; + } + + closefile( file ); +#/ +} + +drawspawndata() +{ +/# + level notify( "drawing_spawn_data" ); + level endon( "drawing_spawn_data" ); + textoffset = vectorscale( ( 0, 0, -1 ), 12.0 ); + + while ( true ) + { + if ( !isdefined( level.curspawndata ) ) + { + wait 0.5; + continue; + } + + for ( i = 0; i < level.curspawndata.friends.size; i++ ) + print3d( level.curspawndata.friends[i], "=)", ( 0.5, 1, 0.5 ), 1, 5 ); + + for ( i = 0; i < level.curspawndata.enemies.size; i++ ) + print3d( level.curspawndata.enemies[i], "=(", ( 1, 0.5, 0.5 ), 1, 5 ); + + for ( i = 0; i < level.curspawndata.otherdata.size; i++ ) + print3d( level.curspawndata.otherdata[i].origin, level.curspawndata.otherdata[i].text, ( 0.5, 0.75, 1 ), 1, 2 ); + + for ( i = 0; i < level.curspawndata.spawnpoints.size; i++ ) + { + sp = level.curspawndata.spawnpoints[i]; + orig = sp.sighttracepoint; + + if ( sp.winner ) + { + print3d( orig, level.curspawndata.playername + " spawned here", ( 0.5, 0.5, 1 ), 1, 2 ); + orig += textoffset; + } + + amnt = ( sp.weight - level.curspawndata.minweight ) / ( level.curspawndata.maxweight - level.curspawndata.minweight ); + print3d( orig, "Weight: " + sp.weight, ( 1 - amnt, amnt, 0.5 ) ); + orig += textoffset; + + for ( j = 0; j < sp.data.size; j++ ) + { + print3d( orig, sp.data[j], ( 1, 1, 1 ) ); + orig += textoffset; + } + + for ( j = 0; j < sp.sightchecks.size; j++ ) + { + print3d( orig, "Sightchecks: -" + sp.sightchecks[j].penalty, ( 1, 0.5, 0.5 ) ); + orig += textoffset; + } + } + + wait 0.05; + } +#/ +} + +vectostr( vec ) +{ +/# + return int( vec[0] ) + "/" + int( vec[1] ) + "/" + int( vec[2] ); +#/ +} + +strtovec( str ) +{ +/# + parts = strtok( str, "/" ); + + if ( parts.size != 3 ) + return ( 0, 0, 0 ); + + return ( int( parts[0] ), int( parts[1] ), int( parts[2] ) ); +#/ +} + +getspawnpoint_random( spawnpoints ) +{ + if ( !isdefined( spawnpoints ) ) + return undefined; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + j = randomint( spawnpoints.size ); + spawnpoint = spawnpoints[i]; + spawnpoints[i] = spawnpoints[j]; + spawnpoints[j] = spawnpoint; + } + + return getspawnpoint_final( spawnpoints, 0 ); +} + +getallotherplayers() +{ + aliveplayers = []; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( !isdefined( level.players[i] ) ) + continue; + + player = level.players[i]; + + if ( player.sessionstate != "playing" || player == self ) + continue; + + aliveplayers[aliveplayers.size] = player; + } + + return aliveplayers; +} + +getallalliedandenemyplayers( obj ) +{ + if ( level.teambased ) + { + assert( isdefined( level.teams[self.team] ) ); + obj.allies = level.aliveplayers[self.team]; + obj.enemies = undefined; + + foreach ( team in level.teams ) + { + if ( team == self.team ) + continue; + + if ( !isdefined( obj.enemies ) ) + { + obj.enemies = level.aliveplayers[team]; + continue; + } + + foreach ( player in level.aliveplayers[team] ) + obj.enemies[obj.enemies.size] = player; + } + } + else + { + obj.allies = []; + obj.enemies = level.activeplayers; + } +} + +initweights( spawnpoints ) +{ + for ( i = 0; i < spawnpoints.size; i++ ) + spawnpoints[i].weight = 0; +/# + if ( level.storespawndata || level.debugspawning ) + { + for ( i = 0; i < spawnpoints.size; i++ ) + { + spawnpoints[i].spawndata = []; + spawnpoints[i].sightchecks = []; + } + } +#/ +} + +getspawnpoint_nearteam( spawnpoints, favoredspawnpoints ) +{ + if ( !isdefined( spawnpoints ) ) + return undefined; +/# + if ( getdvar( "scr_spawn_randomly" ) == "" ) + setdvar( "scr_spawn_randomly", "0" ); + + if ( getdvar( "scr_spawn_randomly" ) == "1" ) + return getspawnpoint_random( spawnpoints ); +#/ + if ( getdvarint( "scr_spawnsimple" ) > 0 ) + return getspawnpoint_random( spawnpoints ); + + spawnlogic_begin(); + k_favored_spawn_point_bonus = 25000; + initweights( spawnpoints ); + obj = spawnstruct(); + getallalliedandenemyplayers( obj ); + numplayers = obj.allies.size + obj.enemies.size; + allieddistanceweight = 2; + myteam = self.team; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + spawnpoint = spawnpoints[i]; + + if ( !isdefined( spawnpoint.numplayersatlastupdate ) ) + spawnpoint.numplayersatlastupdate = 0; + + if ( spawnpoint.numplayersatlastupdate > 0 ) + { + allydistsum = spawnpoint.distsum[myteam]; + enemydistsum = spawnpoint.enemydistsum[myteam]; + spawnpoint.weight = ( enemydistsum - allieddistanceweight * allydistsum ) / spawnpoint.numplayersatlastupdate; +/# + if ( level.storespawndata || level.debugspawning ) + spawnpoint.spawndata[spawnpoint.spawndata.size] = "Base weight: " + int( spawnpoint.weight ) + " = (" + int( enemydistsum ) + " - " + allieddistanceweight + "*" + int( allydistsum ) + ") / " + spawnpoint.numplayersatlastupdate; +#/ + continue; + } + + spawnpoint.weight = 0; +/# + if ( level.storespawndata || level.debugspawning ) + spawnpoint.spawndata[spawnpoint.spawndata.size] = "Base weight: 0"; +#/ + } + + if ( isdefined( favoredspawnpoints ) ) + { + for ( i = 0; i < favoredspawnpoints.size; i++ ) + { + if ( isdefined( favoredspawnpoints[i].weight ) ) + { + favoredspawnpoints[i].weight += k_favored_spawn_point_bonus; + continue; + } + + favoredspawnpoints[i].weight = k_favored_spawn_point_bonus; + } + } + + avoidsamespawn( spawnpoints ); + avoidspawnreuse( spawnpoints, 1 ); + avoidweapondamage( spawnpoints ); + avoidvisibleenemies( spawnpoints, 1 ); + result = getspawnpoint_final( spawnpoints ); +/# + if ( getdvar( "scr_spawn_showbad" ) == "" ) + setdvar( "scr_spawn_showbad", "0" ); + + if ( getdvar( "scr_spawn_showbad" ) == "1" ) + checkbad( result ); +#/ + return result; +} + +getspawnpoint_dm( spawnpoints ) +{ + if ( !isdefined( spawnpoints ) ) + return undefined; + + spawnlogic_begin(); + initweights( spawnpoints ); + aliveplayers = getallotherplayers(); + idealdist = 1600; + baddist = 1200; + + if ( aliveplayers.size > 0 ) + { + for ( i = 0; i < spawnpoints.size; i++ ) + { + totaldistfromideal = 0; + nearbybadamount = 0; + + for ( j = 0; j < aliveplayers.size; j++ ) + { + dist = distance( spawnpoints[i].origin, aliveplayers[j].origin ); + + if ( dist < baddist ) + nearbybadamount += ( baddist - dist ) / baddist; + + distfromideal = abs( dist - idealdist ); + totaldistfromideal += distfromideal; + } + + avgdistfromideal = totaldistfromideal / aliveplayers.size; + welldistancedamount = ( idealdist - avgdistfromideal ) / idealdist; + spawnpoints[i].weight = welldistancedamount - nearbybadamount * 2 + randomfloat( 0.2 ); + } + } + + avoidsamespawn( spawnpoints ); + avoidspawnreuse( spawnpoints, 0 ); + avoidweapondamage( spawnpoints ); + avoidvisibleenemies( spawnpoints, 0 ); + return getspawnpoint_final( spawnpoints ); +} + +spawnlogic_begin() +{ +/# + level.storespawndata = getdvarint( "scr_recordspawndata" ); + level.debugspawning = getdvarint( "scr_spawnpointdebug" ) > 0; +#/ +} + +init() +{ +/# + if ( getdvar( "scr_recordspawndata" ) == "" ) + setdvar( "scr_recordspawndata", 0 ); + + level.storespawndata = getdvarint( "scr_recordspawndata" ); + + if ( getdvar( "scr_killbots" ) == "" ) + setdvar( "scr_killbots", 0 ); + + if ( getdvar( "scr_killbottimer" ) == "" ) + setdvar( "scr_killbottimer", 0.25 ); + + thread loopbotspawns(); +#/ + level.spawnlogic_deaths = []; + level.spawnlogic_spawnkills = []; + level.players = []; + level.grenades = []; + level.pipebombs = []; + level.spawnmins = ( 0, 0, 0 ); + level.spawnmaxs = ( 0, 0, 0 ); + level.spawnminsmaxsprimed = 0; + + if ( isdefined( level.safespawns ) ) + { + for ( i = 0; i < level.safespawns.size; i++ ) + level.safespawns[i] spawnpointinit(); + } + + if ( getdvar( "scr_spawn_enemyavoiddist" ) == "" ) + setdvar( "scr_spawn_enemyavoiddist", "800" ); + + if ( getdvar( "scr_spawn_enemyavoidweight" ) == "" ) + setdvar( "scr_spawn_enemyavoidweight", "0" ); +/# + if ( getdvar( "scr_spawnsimple" ) == "" ) + setdvar( "scr_spawnsimple", "0" ); + + if ( getdvar( "scr_spawnpointdebug" ) == "" ) + setdvar( "scr_spawnpointdebug", "0" ); + + if ( getdvarint( "scr_spawnpointdebug" ) > 0 ) + { + thread showdeathsdebug(); + thread updatedeathinfodebug(); + thread profiledebug(); + } + + if ( level.storespawndata ) + thread allowspawndatareading(); + + if ( getdvar( "scr_spawnprofile" ) == "" ) + setdvar( "scr_spawnprofile", "0" ); + + thread watchspawnprofile(); + thread spawngraphcheck(); +#/ +} + +watchspawnprofile() +{ +/# + while ( true ) + { + while ( true ) + { + if ( getdvarint( "scr_spawnprofile" ) > 0 ) + break; + + wait 0.05; + } + + thread spawnprofile(); + + while ( true ) + { + if ( getdvarint( "scr_spawnprofile" ) <= 0 ) + break; + + wait 0.05; + } + + level notify( "stop_spawn_profile" ); + } +#/ +} + +spawnprofile() +{ +/# + level endon( "stop_spawn_profile" ); + + while ( true ) + { + if ( level.players.size > 0 && level.spawnpoints.size > 0 ) + { + playernum = randomint( level.players.size ); + player = level.players[playernum]; + attempt = 1; + + while ( !isdefined( player ) && attempt < level.players.size ) + { + playernum = ( playernum + 1 ) % level.players.size; + attempt++; + player = level.players[playernum]; + } + + player getspawnpoint_nearteam( level.spawnpoints ); + } + + wait 0.05; + } +#/ +} + +spawngraphcheck() +{ +/# + while ( true ) + { + if ( getdvarint( _hash_C25B6B47 ) < 1 ) + { + wait 3; + continue; + } + + thread spawngraph(); + return; + } +#/ +} + +spawngraph() +{ +/# + w = 20; + h = 20; + weightscale = 0.1; + fakespawnpoints = []; + corners = getentarray( "minimap_corner", "targetname" ); + + if ( corners.size != 2 ) + { + println( "^1 can't spawn graph: no minimap corners" ); + return; + } + + min = corners[0].origin; + max = corners[0].origin; + + if ( corners[1].origin[0] > max[0] ) + max = ( corners[1].origin[0], max[1], max[2] ); + else + min = ( corners[1].origin[0], min[1], min[2] ); + + if ( corners[1].origin[1] > max[1] ) + max = ( max[0], corners[1].origin[1], max[2] ); + else + min = ( min[0], corners[1].origin[1], min[2] ); + + i = 0; + + for ( y = 0; y < h; y++ ) + { + yamnt = y / ( h - 1 ); + + for ( x = 0; x < w; x++ ) + { + xamnt = x / ( w - 1 ); + fakespawnpoints[i] = spawnstruct(); + fakespawnpoints[i].origin = ( min[0] * xamnt + max[0] * ( 1 - xamnt ), min[1] * yamnt + max[1] * ( 1 - yamnt ), min[2] ); + fakespawnpoints[i].angles = ( 0, 0, 0 ); + fakespawnpoints[i].forward = anglestoforward( fakespawnpoints[i].angles ); + fakespawnpoints[i].sighttracepoint = fakespawnpoints[i].origin; + i++; + } + } + + didweights = 0; + + while ( true ) + { + spawni = 0; + numiters = 5; + + for ( i = 0; i < numiters; i++ ) + { + if ( !level.players.size || !isdefined( level.players[0].team ) || level.players[0].team == "spectator" || !isdefined( level.players[0].class ) ) + break; + + endspawni = spawni + fakespawnpoints.size / numiters; + + if ( i == numiters - 1 ) + endspawni = fakespawnpoints.size; + + while ( spawni < endspawni ) + { + spawnpointupdate( fakespawnpoints[spawni] ); + spawni++; + } + + if ( didweights ) + level.players[0] drawspawngraph( fakespawnpoints, w, h, weightscale ); + + wait 0.05; + } + + if ( !level.players.size || !isdefined( level.players[0].team ) || level.players[0].team == "spectator" || !isdefined( level.players[0].class ) ) + { + wait 1; + continue; + } + + level.players[0] getspawnpoint_nearteam( fakespawnpoints ); + + for ( i = 0; i < fakespawnpoints.size; i++ ) + setupspawngraphpoint( fakespawnpoints[i], weightscale ); + + didweights = 1; + level.players[0] drawspawngraph( fakespawnpoints, w, h, weightscale ); + wait 0.05; + } +#/ +} + +drawspawngraph( fakespawnpoints, w, h, weightscale ) +{ +/# + i = 0; + + for ( y = 0; y < h; y++ ) + { + yamnt = y / ( h - 1 ); + + for ( x = 0; x < w; x++ ) + { + xamnt = x / ( w - 1 ); + + if ( y > 0 ) + spawngraphline( fakespawnpoints[i], fakespawnpoints[i - w], weightscale ); + + if ( x > 0 ) + spawngraphline( fakespawnpoints[i], fakespawnpoints[i - 1], weightscale ); + + i++; + } + } +#/ +} + +setupspawngraphpoint( s1, weightscale ) +{ +/# + s1.visible = 1; + + if ( s1.weight < -1000 / weightscale ) + s1.visible = 0; +#/ +} + +spawngraphline( s1, s2, weightscale ) +{ +/# + if ( !s1.visible || !s2.visible ) + return; + + p1 = s1.origin + ( 0, 0, s1.weight * weightscale + 100 ); + p2 = s2.origin + ( 0, 0, s2.weight * weightscale + 100 ); + line( p1, p2, ( 1, 1, 1 ) ); +#/ +} + +loopbotspawns() +{ +/# + while ( true ) + { + if ( getdvarint( "scr_killbots" ) < 1 ) + { + wait 3; + continue; + } + + if ( !isdefined( level.players ) ) + { + wait 0.05; + continue; + } + + bots = []; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( !isdefined( level.players[i] ) ) + continue; + + if ( level.players[i].sessionstate == "playing" && issubstr( level.players[i].name, "bot" ) ) + bots[bots.size] = level.players[i]; + } + + if ( bots.size > 0 ) + { + if ( getdvarint( "scr_killbots" ) == 1 ) + { + killer = bots[randomint( bots.size )]; + victim = bots[randomint( bots.size )]; + victim thread [[ level.callbackplayerdamage ]]( killer, killer, 1000, 0, "MOD_RIFLE_BULLET", "none", ( 0, 0, 0 ), ( 0, 0, 0 ), "none", 0, 0 ); + } + else + { + numkills = getdvarint( "scr_killbots" ); + lastvictim = undefined; + + for ( index = 0; index < numkills; index++ ) + { + killer = bots[randomint( bots.size )]; + + for ( victim = bots[randomint( bots.size )]; isdefined( lastvictim ) && victim == lastvictim; victim = bots[randomint( bots.size )] ) + { + + } + + victim thread [[ level.callbackplayerdamage ]]( killer, killer, 1000, 0, "MOD_RIFLE_BULLET", "none", ( 0, 0, 0 ), ( 0, 0, 0 ), "none", 0, 0 ); + lastvictim = victim; + } + } + } + + if ( getdvar( "scr_killbottimer" ) != "" ) + wait( getdvarfloat( "scr_killbottimer" ) ); + else + wait 0.05; + } +#/ +} + +allowspawndatareading() +{ +/# + setdvar( "scr_showspawnid", "" ); + prevval = getdvar( "scr_showspawnid" ); + prevrelval = getdvar( "scr_spawnidcycle" ); + readthistime = 0; + + while ( true ) + { + val = getdvar( "scr_showspawnid" ); + relval = undefined; + + if ( !isdefined( val ) || val == prevval ) + { + relval = getdvar( "scr_spawnidcycle" ); + + if ( isdefined( relval ) && relval != "" ) + setdvar( "scr_spawnidcycle", "" ); + else + { + wait 0.5; + continue; + } + } + + prevval = val; + readthistime = 0; + readspawndata( val, relval ); + + if ( !isdefined( level.curspawndata ) ) + println( "No spawn data to draw." ); + else + println( "Drawing spawn ID " + level.curspawndata.id ); + + thread drawspawndata(); + } +#/ +} + +showdeathsdebug() +{ +/# + while ( true ) + { + if ( getdvar( "scr_spawnpointdebug" ) == "0" ) + { + wait 3; + continue; + } + + time = gettime(); + + for ( i = 0; i < level.spawnlogic_deaths.size; i++ ) + { + if ( isdefined( level.spawnlogic_deaths[i].los ) ) + line( level.spawnlogic_deaths[i].org, level.spawnlogic_deaths[i].killorg, ( 1, 0, 0 ) ); + else + line( level.spawnlogic_deaths[i].org, level.spawnlogic_deaths[i].killorg, ( 1, 1, 1 ) ); + + killer = level.spawnlogic_deaths[i].killer; + + if ( isdefined( killer ) && isalive( killer ) ) + line( level.spawnlogic_deaths[i].killorg, killer.origin, ( 0.4, 0.4, 0.8 ) ); + } + + for ( p = 0; p < level.players.size; p++ ) + { + if ( !isdefined( level.players[p] ) ) + continue; + + if ( isdefined( level.players[p].spawnlogic_killdist ) ) + print3d( level.players[p].origin + vectorscale( ( 0, 0, 1 ), 64.0 ), level.players[p].spawnlogic_killdist, ( 1, 1, 1 ) ); + } + + oldspawnkills = level.spawnlogic_spawnkills; + level.spawnlogic_spawnkills = []; + + for ( i = 0; i < oldspawnkills.size; i++ ) + { + spawnkill = oldspawnkills[i]; + + if ( spawnkill.dierwasspawner ) + { + line( spawnkill.spawnpointorigin, spawnkill.dierorigin, ( 0.4, 0.5, 0.4 ) ); + line( spawnkill.dierorigin, spawnkill.killerorigin, ( 0, 1, 1 ) ); + print3d( spawnkill.dierorigin + vectorscale( ( 0, 0, 1 ), 32.0 ), "SPAWNKILLED!", ( 0, 1, 1 ) ); + } + else + { + line( spawnkill.spawnpointorigin, spawnkill.killerorigin, ( 0.4, 0.5, 0.4 ) ); + line( spawnkill.killerorigin, spawnkill.dierorigin, ( 0, 1, 1 ) ); + print3d( spawnkill.dierorigin + vectorscale( ( 0, 0, 1 ), 32.0 ), "SPAWNDIED!", ( 0, 1, 1 ) ); + } + + if ( time - spawnkill.time < 60000 ) + level.spawnlogic_spawnkills[level.spawnlogic_spawnkills.size] = oldspawnkills[i]; + } + + wait 0.05; + } +#/ +} + +updatedeathinfodebug() +{ + while ( true ) + { + if ( getdvar( "scr_spawnpointdebug" ) == "0" ) + { + wait 3; + continue; + } + + updatedeathinfo(); + wait 3; + } +} + +spawnweightdebug( spawnpoints ) +{ + level notify( "stop_spawn_weight_debug" ); + level endon( "stop_spawn_weight_debug" ); +/# + while ( true ) + { + if ( getdvar( "scr_spawnpointdebug" ) == "0" ) + { + wait 3; + continue; + } + + textoffset = vectorscale( ( 0, 0, -1 ), 12.0 ); + + for ( i = 0; i < spawnpoints.size; i++ ) + { + amnt = 1 * ( 1 - spawnpoints[i].weight / -100000 ); + + if ( amnt < 0 ) + amnt = 0; + + if ( amnt > 1 ) + amnt = 1; + + orig = spawnpoints[i].origin + vectorscale( ( 0, 0, 1 ), 80.0 ); + print3d( orig, int( spawnpoints[i].weight ), ( 1, amnt, 0.5 ) ); + orig += textoffset; + + if ( isdefined( spawnpoints[i].spawndata ) ) + { + for ( j = 0; j < spawnpoints[i].spawndata.size; j++ ) + { + print3d( orig, spawnpoints[i].spawndata[j], vectorscale( ( 1, 1, 1 ), 0.5 ) ); + orig += textoffset; + } + } + + if ( isdefined( spawnpoints[i].sightchecks ) ) + { + for ( j = 0; j < spawnpoints[i].sightchecks.size; j++ ) + { + if ( spawnpoints[i].sightchecks[j].penalty == 0 ) + continue; + + print3d( orig, "Sight to enemy: -" + spawnpoints[i].sightchecks[j].penalty, vectorscale( ( 1, 1, 1 ), 0.5 ) ); + orig += textoffset; + } + } + } + + wait 0.05; + } +#/ +} + +profiledebug() +{ + while ( true ) + { + if ( getdvar( _hash_6A99E750 ) != "1" ) + { + wait 3; + continue; + } + + for ( i = 0; i < level.spawnpoints.size; i++ ) + level.spawnpoints[i].weight = randomint( 10000 ); + + if ( level.players.size > 0 ) + level.players[randomint( level.players.size )] getspawnpoint_nearteam( level.spawnpoints ); + + wait 0.05; + } +} + +debugnearbyplayers( players, origin ) +{ +/# + if ( getdvar( "scr_spawnpointdebug" ) == "0" ) + return; + + starttime = gettime(); + + while ( true ) + { + for ( i = 0; i < players.size; i++ ) + line( players[i].origin, origin, ( 0.5, 1, 0.5 ) ); + + if ( gettime() - starttime > 5000 ) + return; + + wait 0.05; + } +#/ +} + +deathoccured( dier, killer ) +{ + +} + +checkforsimilardeaths( deathinfo ) +{ + for ( i = 0; i < level.spawnlogic_deaths.size; i++ ) + { + if ( level.spawnlogic_deaths[i].killer == deathinfo.killer ) + { + dist = distance( level.spawnlogic_deaths[i].org, deathinfo.org ); + + if ( dist > 200 ) + continue; + + dist = distance( level.spawnlogic_deaths[i].killorg, deathinfo.killorg ); + + if ( dist > 200 ) + continue; + + level.spawnlogic_deaths[i].remove = 1; + } + } +} + +updatedeathinfo() +{ + time = gettime(); + + for ( i = 0; i < level.spawnlogic_deaths.size; i++ ) + { + deathinfo = level.spawnlogic_deaths[i]; + + if ( time - deathinfo.time > 90000 || !isdefined( deathinfo.killer ) || !isalive( deathinfo.killer ) || !isdefined( level.teams[deathinfo.killer.team] ) || distance( deathinfo.killer.origin, deathinfo.killorg ) > 400 ) + level.spawnlogic_deaths[i].remove = 1; + } + + oldarray = level.spawnlogic_deaths; + level.spawnlogic_deaths = []; + start = 0; + + if ( oldarray.size - 1024 > 0 ) + start = oldarray.size - 1024; + + for ( i = start; i < oldarray.size; i++ ) + { + if ( !isdefined( oldarray[i].remove ) ) + level.spawnlogic_deaths[level.spawnlogic_deaths.size] = oldarray[i]; + } +} + +ispointvulnerable( playerorigin ) +{ + pos = self.origin + level.bettymodelcenteroffset; + playerpos = playerorigin + vectorscale( ( 0, 0, 1 ), 32.0 ); + distsqrd = distancesquared( pos, playerpos ); + forward = anglestoforward( self.angles ); + + if ( distsqrd < level.bettydetectionradius * level.bettydetectionradius ) + { + playerdir = vectornormalize( playerpos - pos ); + angle = acos( vectordot( playerdir, forward ) ); + + if ( angle < level.bettydetectionconeangle ) + return true; + } + + return false; +} + +avoidweapondamage( spawnpoints ) +{ + if ( getdvar( _hash_FB71FB7 ) == "0" ) + return; + + weapondamagepenalty = 100000; + + if ( getdvar( _hash_76B8F046 ) != "" && getdvar( _hash_76B8F046 ) != "0" ) + weapondamagepenalty = getdvarfloat( _hash_76B8F046 ); + + mingrenadedistsquared = 62500; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + for ( j = 0; j < level.grenades.size; j++ ) + { + if ( !isdefined( level.grenades[j] ) ) + continue; + + if ( distancesquared( spawnpoints[i].origin, level.grenades[j].origin ) < mingrenadedistsquared ) + { + spawnpoints[i].weight -= weapondamagepenalty; +/# + if ( level.storespawndata || level.debugspawning ) + spawnpoints[i].spawndata[spawnpoints[i].spawndata.size] = "Was near grenade: -" + int( weapondamagepenalty ); +#/ + } + } + } +} + +spawnperframeupdate() +{ + spawnpointindex = 0; + + while ( true ) + { + wait 0.05; + + if ( !isdefined( level.spawnpoints ) ) + return; + + spawnpointindex = ( spawnpointindex + 1 ) % level.spawnpoints.size; + spawnpoint = level.spawnpoints[spawnpointindex]; + spawnpointupdate( spawnpoint ); + } +} + +getnonteamsum( skip_team, sums ) +{ + value = 0; + + foreach ( team in level.teams ) + { + if ( team == skip_team ) + continue; + + value += sums[team]; + } + + return value; +} + +getnonteammindist( skip_team, mindists ) +{ + dist = 9999999; + + foreach ( team in level.teams ) + { + if ( team == skip_team ) + continue; + + if ( dist > mindists[team] ) + dist = mindists[team]; + } + + return dist; +} + +spawnpointupdate( spawnpoint ) +{ + if ( level.teambased ) + { + sights = []; + + foreach ( team in level.teams ) + { + spawnpoint.enemysights[team] = 0; + sights[team] = 0; + spawnpoint.nearbyplayers[team] = []; + } + } + else + { + spawnpoint.enemysights = 0; + spawnpoint.nearbyplayers["all"] = []; + } + + spawnpointdir = spawnpoint.forward; + debug = 0; +/# + debug = getdvarint( "scr_spawnpointdebug" ) > 0; +#/ + mindist = []; + distsum = []; + + if ( !level.teambased ) + mindist["all"] = 9999999; + + foreach ( team in level.teams ) + { + spawnpoint.distsum[team] = 0; + spawnpoint.enemydistsum[team] = 0; + spawnpoint.minenemydist[team] = 9999999; + mindist[team] = 9999999; + } + + spawnpoint.numplayersatlastupdate = 0; + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( player.sessionstate != "playing" ) + continue; + + diff = player.origin - spawnpoint.origin; + diff = ( diff[0], diff[1], 0 ); + dist = length( diff ); + team = "all"; + + if ( level.teambased ) + team = player.team; + + if ( dist < 1024 ) + spawnpoint.nearbyplayers[team][spawnpoint.nearbyplayers[team].size] = player; + + if ( dist < mindist[team] ) + mindist[team] = dist; + + distsum[team] += dist; + spawnpoint.numplayersatlastupdate++; + pdir = anglestoforward( player.angles ); + + if ( vectordot( spawnpointdir, diff ) < 0 && vectordot( pdir, diff ) > 0 ) + continue; + + losexists = bullettracepassed( player.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), spawnpoint.sighttracepoint, 0, undefined ); + spawnpoint.lastsighttracetime = gettime(); + + if ( losexists ) + { + if ( level.teambased ) + sights[player.team]++; + else + spawnpoint.enemysights++; +/# + if ( debug ) + line( player.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), spawnpoint.sighttracepoint, ( 0.5, 1, 0.5 ) ); +#/ + } + } + + if ( level.teambased ) + { + foreach ( team in level.teams ) + { + spawnpoint.enemysights[team] = getnonteamsum( team, sights ); + spawnpoint.minenemydist[team] = getnonteammindist( team, mindist ); + spawnpoint.distsum[team] = distsum[team]; + spawnpoint.enemydistsum[team] = getnonteamsum( team, distsum ); + } + } + else + { + spawnpoint.distsum["all"] = distsum["all"]; + spawnpoint.enemydistsum["all"] = distsum["all"]; + spawnpoint.minenemydist["all"] = mindist["all"]; + } +} + +getlospenalty() +{ + if ( getdvar( _hash_CACDB8AA ) != "" && getdvar( _hash_CACDB8AA ) != "0" ) + return getdvarfloat( _hash_CACDB8AA ); + + return 100000; +} + +lastminutesighttraces( spawnpoint ) +{ + if ( !isdefined( spawnpoint.nearbyplayers ) ) + return false; + + closest = undefined; + closestdistsq = undefined; + secondclosest = undefined; + secondclosestdistsq = undefined; + + foreach ( team in spawnpoint.nearbyplayers ) + { + if ( team == self.team ) + continue; + + for ( i = 0; i < spawnpoint.nearbyplayers[team].size; i++ ) + { + player = spawnpoint.nearbyplayers[team][i]; + + if ( !isdefined( player ) ) + continue; + + if ( player.sessionstate != "playing" ) + continue; + + if ( player == self ) + continue; + + distsq = distancesquared( spawnpoint.origin, player.origin ); + + if ( !isdefined( closest ) || distsq < closestdistsq ) + { + secondclosest = closest; + secondclosestdistsq = closestdistsq; + closest = player; + closestdistsq = distsq; + continue; + } + + if ( !isdefined( secondclosest ) || distsq < secondclosestdistsq ) + { + secondclosest = player; + secondclosestdistsq = distsq; + } + } + } + + if ( isdefined( closest ) ) + { + if ( bullettracepassed( closest.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), spawnpoint.sighttracepoint, 0, undefined ) ) + return true; + } + + if ( isdefined( secondclosest ) ) + { + if ( bullettracepassed( secondclosest.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), spawnpoint.sighttracepoint, 0, undefined ) ) + return true; + } + + return false; +} + +avoidvisibleenemies( spawnpoints, teambased ) +{ + if ( getdvar( _hash_FB71FB7 ) == "0" ) + return; + + lospenalty = getlospenalty(); + mindistteam = self.team; + + if ( teambased ) + { + for ( i = 0; i < spawnpoints.size; i++ ) + { + if ( !isdefined( spawnpoints[i].enemysights ) ) + continue; + + penalty = lospenalty * spawnpoints[i].enemysights[self.team]; + spawnpoints[i].weight -= penalty; +/# + if ( level.storespawndata || level.debugspawning ) + { + index = spawnpoints[i].sightchecks.size; + spawnpoints[i].sightchecks[index] = spawnstruct(); + spawnpoints[i].sightchecks[index].penalty = penalty; + } +#/ + } + } + else + { + for ( i = 0; i < spawnpoints.size; i++ ) + { + if ( !isdefined( spawnpoints[i].enemysights ) ) + continue; + + penalty = lospenalty * spawnpoints[i].enemysights; + spawnpoints[i].weight -= penalty; +/# + if ( level.storespawndata || level.debugspawning ) + { + index = spawnpoints[i].sightchecks.size; + spawnpoints[i].sightchecks[index] = spawnstruct(); + spawnpoints[i].sightchecks[index].penalty = penalty; + } +#/ + } + + mindistteam = "all"; + } + + avoidweight = getdvarfloat( "scr_spawn_enemyavoidweight" ); + + if ( avoidweight != 0 ) + { + nearbyenemyouterrange = getdvarfloat( "scr_spawn_enemyavoiddist" ); + nearbyenemyouterrangesq = nearbyenemyouterrange * nearbyenemyouterrange; + nearbyenemypenalty = 1500 * avoidweight; + nearbyenemyminorpenalty = 800 * avoidweight; + lastattackerorigin = vectorscale( ( -1, -1, -1 ), 99999.0 ); + lastdeathpos = vectorscale( ( -1, -1, -1 ), 99999.0 ); + + if ( isalive( self.lastattacker ) ) + lastattackerorigin = self.lastattacker.origin; + + if ( isdefined( self.lastdeathpos ) ) + lastdeathpos = self.lastdeathpos; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + mindist = spawnpoints[i].minenemydist[mindistteam]; + + if ( mindist < nearbyenemyouterrange * 2 ) + { + penalty = nearbyenemyminorpenalty * ( 1 - mindist / nearbyenemyouterrange * 2 ); + + if ( mindist < nearbyenemyouterrange ) + penalty += nearbyenemypenalty * ( 1 - mindist / nearbyenemyouterrange ); + + if ( penalty > 0 ) + { + spawnpoints[i].weight -= penalty; +/# + if ( level.storespawndata || level.debugspawning ) + spawnpoints[i].spawndata[spawnpoints[i].spawndata.size] = "Nearest enemy at " + int( spawnpoints[i].minenemydist[mindistteam] ) + " units: -" + int( penalty ); +#/ + } + } + } + } +} + +avoidspawnreuse( spawnpoints, teambased ) +{ + if ( getdvar( _hash_FB71FB7 ) == "0" ) + return; + + time = gettime(); + maxtime = 10000; + maxdistsq = 1048576; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + spawnpoint = spawnpoints[i]; + + if ( !isdefined( spawnpoint.lastspawnedplayer ) || !isdefined( spawnpoint.lastspawntime ) || !isalive( spawnpoint.lastspawnedplayer ) ) + continue; + + if ( spawnpoint.lastspawnedplayer == self ) + continue; + + if ( teambased && spawnpoint.lastspawnedplayer.team == self.team ) + continue; + + timepassed = time - spawnpoint.lastspawntime; + + if ( timepassed < maxtime ) + { + distsq = distancesquared( spawnpoint.lastspawnedplayer.origin, spawnpoint.origin ); + + if ( distsq < maxdistsq ) + { + worsen = 5000 * ( 1 - distsq / maxdistsq ) * ( 1 - timepassed / maxtime ); + spawnpoint.weight -= worsen; +/# + if ( level.storespawndata || level.debugspawning ) + spawnpoint.spawndata[spawnpoint.spawndata.size] = "Was recently used: -" + worsen; +#/ + } + else + spawnpoint.lastspawnedplayer = undefined; + + continue; + } + + spawnpoint.lastspawnedplayer = undefined; + } +} + +avoidsamespawn( spawnpoints ) +{ + if ( getdvar( _hash_FB71FB7 ) == "0" ) + return; + + if ( !isdefined( self.lastspawnpoint ) ) + return; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + if ( spawnpoints[i] == self.lastspawnpoint ) + { + spawnpoints[i].weight -= 50000; +/# + if ( level.storespawndata || level.debugspawning ) + spawnpoints[i].spawndata[spawnpoints[i].spawndata.size] = "Was last spawnpoint: -50000"; +#/ + break; + } + } +} + +getrandomintermissionpoint() +{ + spawnpoints = getentarray( "mp_global_intermission", "classname" ); + + if ( !spawnpoints.size ) + spawnpoints = getentarray( "info_player_start", "classname" ); + + assert( spawnpoints.size ); + spawnpoint = maps\mp\gametypes\_spawnlogic::getspawnpoint_random( spawnpoints ); + return spawnpoint; +} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_spectating.gsc b/MP/Core/maps/mp/gametypes/_spectating.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/_spectating.gsc rename to MP/Core/maps/mp/gametypes/_spectating.gsc diff --git a/MP/Core/maps/mp/gametypes/_tweakables.gsc b/MP/Core/maps/mp/gametypes/_tweakables.gsc new file mode 100644 index 0000000..b36df38 --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_tweakables.gsc @@ -0,0 +1,378 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +gettweakabledvarvalue( category, name ) +{ + switch ( category ) + { + case "rule": + dvar = level.rules[name].dvar; + break; + case "game": + dvar = level.gametweaks[name].dvar; + break; + case "team": + dvar = level.teamtweaks[name].dvar; + break; + case "player": + dvar = level.playertweaks[name].dvar; + break; + case "class": + dvar = level.classtweaks[name].dvar; + break; + case "weapon": + dvar = level.weapontweaks[name].dvar; + break; + case "killstreak": + dvar = level.hardpointtweaks[name].dvar; + break; + case "hud": + dvar = level.hudtweaks[name].dvar; + break; + default: + dvar = undefined; + break; + } + + assert( isdefined( dvar ) ); + value = getdvarint( dvar ); + return value; +} + +gettweakabledvar( category, name ) +{ + switch ( category ) + { + case "rule": + value = level.rules[name].dvar; + break; + case "game": + value = level.gametweaks[name].dvar; + break; + case "team": + value = level.teamtweaks[name].dvar; + break; + case "player": + value = level.playertweaks[name].dvar; + break; + case "class": + value = level.classtweaks[name].dvar; + break; + case "weapon": + value = level.weapontweaks[name].dvar; + break; + case "killstreak": + value = level.hardpointtweaks[name].dvar; + break; + case "hud": + value = level.hudtweaks[name].dvar; + break; + default: + value = undefined; + break; + } + + assert( isdefined( value ) ); + return value; +} + +gettweakablevalue( category, name ) +{ + switch ( category ) + { + case "rule": + value = level.rules[name].value; + break; + case "game": + value = level.gametweaks[name].value; + break; + case "team": + value = level.teamtweaks[name].value; + break; + case "player": + value = level.playertweaks[name].value; + break; + case "class": + value = level.classtweaks[name].value; + break; + case "weapon": + value = level.weapontweaks[name].value; + break; + case "killstreak": + value = level.hardpointtweaks[name].value; + break; + case "hud": + value = level.hudtweaks[name].value; + break; + default: + value = undefined; + break; + } + + overridedvar = "scr_" + level.gametype + "_" + category + "_" + name; + + if ( getdvar( overridedvar ) != "" ) + return getdvarint( overridedvar ); + + assert( isdefined( value ) ); + return value; +} + +gettweakablelastvalue( category, name ) +{ + switch ( category ) + { + case "rule": + value = level.rules[name].lastvalue; + break; + case "game": + value = level.gametweaks[name].lastvalue; + break; + case "team": + value = level.teamtweaks[name].lastvalue; + break; + case "player": + value = level.playertweaks[name].lastvalue; + break; + case "class": + value = level.classtweaks[name].lastvalue; + break; + case "weapon": + value = level.weapontweaks[name].lastvalue; + break; + case "killstreak": + value = level.hardpointtweaks[name].lastvalue; + break; + case "hud": + value = level.hudtweaks[name].lastvalue; + break; + default: + value = undefined; + break; + } + + assert( isdefined( value ) ); + return value; +} + +settweakablevalue( category, name, value ) +{ + switch ( category ) + { + case "rule": + dvar = level.rules[name].dvar; + break; + case "game": + dvar = level.gametweaks[name].dvar; + break; + case "team": + dvar = level.teamtweaks[name].dvar; + break; + case "player": + dvar = level.playertweaks[name].dvar; + break; + case "class": + dvar = level.classtweaks[name].dvar; + break; + case "weapon": + dvar = level.weapontweaks[name].dvar; + break; + case "killstreak": + dvar = level.hardpointtweaks[name].dvar; + break; + case "hud": + dvar = level.hudtweaks[name].dvar; + break; + default: + dvar = undefined; + break; + } + + setdvar( dvar, value ); +} + +settweakablelastvalue( category, name, value ) +{ + switch ( category ) + { + case "rule": + level.rules[name].lastvalue = value; + break; + case "game": + level.gametweaks[name].lastvalue = value; + break; + case "team": + level.teamtweaks[name].lastvalue = value; + break; + case "player": + level.playertweaks[name].lastvalue = value; + break; + case "class": + level.classtweaks[name].lastvalue = value; + break; + case "weapon": + level.weapontweaks[name].lastvalue = value; + break; + case "killstreak": + level.hardpointtweaks[name].lastvalue = value; + break; + case "hud": + level.hudtweaks[name].lastvalue = value; + break; + default: + break; + } +} + +registertweakable( category, name, dvar, value ) +{ + if ( isstring( value ) ) + { + if ( getdvar( dvar ) == "" ) + setdvar( dvar, value ); + else + value = getdvar( dvar ); + } + else if ( getdvar( dvar ) == "" ) + setdvar( dvar, value ); + else + value = getdvarint( dvar ); + + switch ( category ) + { + case "rule": + if ( !isdefined( level.rules[name] ) ) + level.rules[name] = spawnstruct(); + + level.rules[name].value = value; + level.rules[name].lastvalue = value; + level.rules[name].dvar = dvar; + break; + case "game": + if ( !isdefined( level.gametweaks[name] ) ) + level.gametweaks[name] = spawnstruct(); + + level.gametweaks[name].value = value; + level.gametweaks[name].lastvalue = value; + level.gametweaks[name].dvar = dvar; + break; + case "team": + if ( !isdefined( level.teamtweaks[name] ) ) + level.teamtweaks[name] = spawnstruct(); + + level.teamtweaks[name].value = value; + level.teamtweaks[name].lastvalue = value; + level.teamtweaks[name].dvar = dvar; + break; + case "player": + if ( !isdefined( level.playertweaks[name] ) ) + level.playertweaks[name] = spawnstruct(); + + level.playertweaks[name].value = value; + level.playertweaks[name].lastvalue = value; + level.playertweaks[name].dvar = dvar; + break; + case "class": + if ( !isdefined( level.classtweaks[name] ) ) + level.classtweaks[name] = spawnstruct(); + + level.classtweaks[name].value = value; + level.classtweaks[name].lastvalue = value; + level.classtweaks[name].dvar = dvar; + break; + case "weapon": + if ( !isdefined( level.weapontweaks[name] ) ) + level.weapontweaks[name] = spawnstruct(); + + level.weapontweaks[name].value = value; + level.weapontweaks[name].lastvalue = value; + level.weapontweaks[name].dvar = dvar; + break; + case "killstreak": + if ( !isdefined( level.hardpointtweaks[name] ) ) + level.hardpointtweaks[name] = spawnstruct(); + + level.hardpointtweaks[name].value = value; + level.hardpointtweaks[name].lastvalue = value; + level.hardpointtweaks[name].dvar = dvar; + break; + case "hud": + if ( !isdefined( level.hudtweaks[name] ) ) + level.hudtweaks[name] = spawnstruct(); + + level.hudtweaks[name].value = value; + level.hudtweaks[name].lastvalue = value; + level.hudtweaks[name].dvar = dvar; + break; + } +} + +init() +{ + level.clienttweakables = []; + level.tweakablesinitialized = 1; + level.rules = []; + level.gametweaks = []; + level.teamtweaks = []; + level.playertweaks = []; + level.classtweaks = []; + level.weapontweaks = []; + level.hardpointtweaks = []; + level.hudtweaks = []; + registertweakable( "game", "arcadescoring", "scr_game_arcadescoring", 0 ); + registertweakable( "game", "difficulty", "scr_game_difficulty", 1 ); + registertweakable( "game", "pinups", "scr_game_pinups", 0 ); + registertweakable( "team", "teamkillerplaylistbanquantum", "scr_team_teamkillerplaylistbanquantum", 0 ); + registertweakable( "team", "teamkillerplaylistbanpenalty", "scr_team_teamkillerplaylistbanpenalty", 0 ); + registertweakable( "player", "allowrevive", "scr_player_allowrevive", 1 ); + registertweakable( "weapon", "allowfrag", "scr_weapon_allowfrags", 1 ); + registertweakable( "weapon", "allowsmoke", "scr_weapon_allowsmoke", 1 ); + registertweakable( "weapon", "allowflash", "scr_weapon_allowflash", 1 ); + registertweakable( "weapon", "allowc4", "scr_weapon_allowc4", 1 ); + registertweakable( "weapon", "allowsatchel", "scr_weapon_allowsatchel", 1 ); + registertweakable( "weapon", "allowbetty", "scr_weapon_allowbetty", 1 ); + registertweakable( "weapon", "allowrpgs", "scr_weapon_allowrpgs", 1 ); + registertweakable( "weapon", "allowmines", "scr_weapon_allowmines", 1 ); + registertweakable( "hud", "showobjicons", "ui_hud_showobjicons", 1 ); + setclienttweakable( "hud", "showobjicons" ); + registertweakable( "killstreak", "allowradar", "scr_hardpoint_allowradar", 1 ); + registertweakable( "killstreak", "allowradardirection", "scr_hardpoint_allowradardirection", 1 ); + registertweakable( "killstreak", "allowcounteruav", "scr_hardpoint_allowcounteruav", 1 ); + registertweakable( "killstreak", "allowdogs", "scr_hardpoint_allowdogs", 1 ); + registertweakable( "killstreak", "allowhelicopter_comlink", "scr_hardpoint_allowhelicopter_comlink", 1 ); + registertweakable( "killstreak", "allowrcbomb", "scr_hardpoint_allowrcbomb", 1 ); + registertweakable( "killstreak", "allowauto_turret", "scr_hardpoint_allowauto_turret", 1 ); + level thread updateuitweakables(); +} + +setclienttweakable( category, name ) +{ + level.clienttweakables[level.clienttweakables.size] = name; +} + +updateuitweakables() +{ + for (;;) + { + for ( index = 0; index < level.clienttweakables.size; index++ ) + { + clienttweakable = level.clienttweakables[index]; + curvalue = gettweakabledvarvalue( "hud", clienttweakable ); + lastvalue = gettweakablelastvalue( "hud", clienttweakable ); + + if ( curvalue != lastvalue ) + { + updateserverdvar( gettweakabledvar( "hud", clienttweakable ), curvalue ); + settweakablelastvalue( "hud", clienttweakable, curvalue ); + } + } + + wait 1.0; + } +} + +updateserverdvar( dvar, value ) +{ + makedvarserverinfo( dvar, value ); +} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_wager.gsc b/MP/Core/maps/mp/gametypes/_wager.gsc similarity index 98% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/_wager.gsc rename to MP/Core/maps/mp/gametypes/_wager.gsc index 0a4814b..25e3c07 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_wager.gsc +++ b/MP/Core/maps/mp/gametypes/_wager.gsc @@ -1,5 +1,16 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\gametypes\_globallogic_score; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_rank; +#include maps\mp\gametypes\_persistence; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\teams\_teams; +#include maps\mp\gametypes\_globallogic_audio; +#include maps\mp\gametypes\_class; +#include maps\mp\killstreaks\_killstreaks; init() { @@ -852,12 +863,8 @@ gethighestwagerweaponusage( statname ) weaponstats = self.wagerweaponusage[wagerweaponsused[i]]; if ( !isdefined( weaponstats[statname] ) || !getbaseweaponitemindex( wagerweaponsused[i] ) ) - { continue; - continue; - } - - if ( !isdefined( bestweapon ) || weaponstats[statname] > highestvalue ) + else if ( !isdefined( bestweapon ) || weaponstats[statname] > highestvalue ) { bestweapon = wagerweaponsused[i]; highestvalue = weaponstats[statname]; diff --git a/MP/Core/maps/mp/gametypes/_weapon_utils.gsc b/MP/Core/maps/mp/gametypes/_weapon_utils.gsc new file mode 100644 index 0000000..76c7a17 --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_weapon_utils.gsc @@ -0,0 +1,107 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\killstreaks\_killstreaks; + +isgrenadelauncherweapon( weapon ) +{ + if ( getsubstr( weapon, 0, 3 ) == "gl_" ) + return true; + + switch ( weapon ) + { + case "xm25_mp": + case "china_lake_mp": + return true; + default: + return false; + } +} + +isdumbrocketlauncherweapon( weapon ) +{ + switch ( weapon ) + { + case "rpg_mp": + case "m220_tow_mp": + return true; + default: + return false; + } +} + +isguidedrocketlauncherweapon( weapon ) +{ + switch ( weapon ) + { + case "smaw_mp": + case "m72_law_mp": + case "m202_flash_mp": + case "javelin_mp": + case "fhj18_mp": + return true; + default: + return false; + } +} + +isrocketlauncherweapon( weapon ) +{ + if ( isdumbrocketlauncherweapon( weapon ) ) + return true; + + if ( isguidedrocketlauncherweapon( weapon ) ) + return true; + + return false; +} + +islauncherweapon( weapon ) +{ + if ( isrocketlauncherweapon( weapon ) ) + return true; + + if ( isgrenadelauncherweapon( weapon ) ) + return true; + + return false; +} + +ishackweapon( weapon ) +{ + if ( maps\mp\killstreaks\_killstreaks::iskillstreakweapon( weapon ) ) + return true; + + if ( weapon == "briefcase_bomb_mp" ) + return true; + + return false; +} + +ispistol( weapon ) +{ + return isdefined( level.side_arm_array[weapon] ); +} + +isflashorstunweapon( weapon ) +{ + if ( isdefined( weapon ) ) + { + switch ( weapon ) + { + case "proximity_grenade_mp": + case "proximity_grenade_aoe_mp": + case "flash_grenade_mp": + case "concussion_grenade_mp": + return true; + } + } + + return false; +} + +isflashorstundamage( weapon, meansofdeath ) +{ + return isflashorstunweapon( weapon ) && ( meansofdeath == "MOD_GRENADE_SPLASH" || meansofdeath == "MOD_GAS" ); +} diff --git a/MP/Core/maps/mp/gametypes/_weaponobjects.gsc b/MP/Core/maps/mp/gametypes/_weaponobjects.gsc new file mode 100644 index 0000000..d2b58ce --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_weaponobjects.gsc @@ -0,0 +1,2395 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\_satchel_charge; +#include maps\mp\_proximity_grenade; +#include maps\mp\_bouncingbetty; +#include maps\mp\_trophy_system; +#include maps\mp\_sensor_grenade; +#include maps\mp\_ballistic_knife; +#include maps\mp\killstreaks\_rcbomb; +#include maps\mp\killstreaks\_qrdrone; +#include maps\mp\killstreaks\_emp; +#include maps\mp\_challenges; +#include maps\mp\_scoreevents; +#include maps\mp\gametypes\_weaponobjects; +#include maps\mp\_scrambler; +#include maps\mp\gametypes\_globallogic_player; +#include maps\mp\gametypes\_damagefeedback; +#include maps\mp\_entityheadicons; +#include maps\mp\gametypes\_globallogic_audio; +#include maps\mp\_vehicles; +#include maps\mp\gametypes\_dev; + +init() +{ +/# + debug = weapons_get_dvar_int( "scr_weaponobject_debug", "0" ); +#/ + coneangle = weapons_get_dvar_int( "scr_weaponobject_coneangle", "70" ); + mindist = weapons_get_dvar_int( "scr_weaponobject_mindist", "20" ); + graceperiod = weapons_get_dvar( "scr_weaponobject_graceperiod", "0.6" ); + radius = weapons_get_dvar_int( "scr_weaponobject_radius", "192" ); + level thread onplayerconnect(); + level.watcherweapons = []; + level.watcherweapons = getwatcherweapons(); + level.watcherweaponnames = []; + level.watcherweaponnames = getwatchernames( level.watcherweapons ); + level.retrievableweapons = []; + level.retrievableweapons = getretrievableweapons(); + level.retrievableweaponnames = []; + level.retrievableweaponnames = getwatchernames( level.retrievableweapons ); + level.weaponobjects_headicon_offset = []; + level.weaponobjects_headicon_offset["default"] = vectorscale( ( 0, 0, 1 ), 20.0 ); + level.weaponobjectexplodethisframe = 0; + + if ( getdvar( "scr_deleteexplosivesonspawn" ) == "" ) + setdvar( "scr_deleteexplosivesonspawn", 1 ); + + level.deleteexplosivesonspawn = getdvarint( "scr_deleteexplosivesonspawn" ); + + if ( sessionmodeiszombiesgame() ) + return; + + precachestring( &"MP_DEFUSING_EXPLOSIVE" ); + level.claymorefxid = loadfx( "weapon/claymore/fx_claymore_laser" ); + level._equipment_spark_fx = loadfx( "weapon/grenade/fx_spark_disabled_weapon" ); + level._equipment_emp_destroy_fx = loadfx( "weapon/emp/fx_emp_explosion_equip" ); + level._equipment_explode_fx = loadfx( "explosions/fx_exp_equipment" ); + level._equipment_explode_fx_lg = loadfx( "explosions/fx_exp_equipment_lg" ); + level._effect["powerLight"] = loadfx( "weapon/crossbow/fx_trail_crossbow_blink_red_os" ); + setupretrievablehintstrings(); + level.weaponobjects_headicon_offset["acoustic_sensor_mp"] = vectorscale( ( 0, 0, 1 ), 25.0 ); + level.weaponobjects_headicon_offset["sensor_grenade_mp"] = vectorscale( ( 0, 0, 1 ), 25.0 ); + level.weaponobjects_headicon_offset["camera_spike_mp"] = vectorscale( ( 0, 0, 1 ), 35.0 ); + level.weaponobjects_headicon_offset["claymore_mp"] = vectorscale( ( 0, 0, 1 ), 20.0 ); + level.weaponobjects_headicon_offset["bouncingbetty_mp"] = vectorscale( ( 0, 0, 1 ), 20.0 ); + level.weaponobjects_headicon_offset["satchel_charge_mp"] = vectorscale( ( 0, 0, 1 ), 10.0 ); + level.weaponobjects_headicon_offset["scrambler_mp"] = vectorscale( ( 0, 0, 1 ), 20.0 ); + level.weaponobjects_headicon_offset["trophy_system_mp"] = vectorscale( ( 0, 0, 1 ), 35.0 ); + level.weaponobjects_hacker_trigger_width = 32; + level.weaponobjects_hacker_trigger_height = 32; +} + +getwatchernames( weapons ) +{ + names = []; + + foreach ( index, weapon in weapons ) + names[index] = getsubstr( weapon, 0, weapon.size - 3 ); + + return names; +} + +weapons_get_dvar_int( dvar, def ) +{ + return int( weapons_get_dvar( dvar, def ) ); +} + +weapons_get_dvar( dvar, def ) +{ + if ( getdvar( dvar ) != "" ) + return getdvarfloat( dvar ); + else + { + setdvar( dvar, def ); + return def; + } +} + +setupretrievablehintstrings() +{ + createretrievablehint( "hatchet", &"MP_HATCHET_PICKUP" ); + createretrievablehint( "claymore", &"MP_CLAYMORE_PICKUP" ); + createretrievablehint( "bouncingbetty", &"MP_BOUNCINGBETTY_PICKUP" ); + createretrievablehint( "trophy_system", &"MP_TROPHY_SYSTEM_PICKUP" ); + createretrievablehint( "acoustic_sensor", &"MP_ACOUSTIC_SENSOR_PICKUP" ); + createretrievablehint( "camera_spike", &"MP_CAMERA_SPIKE_PICKUP" ); + createretrievablehint( "satchel_charge", &"MP_SATCHEL_CHARGE_PICKUP" ); + createretrievablehint( "scrambler", &"MP_SCRAMBLER_PICKUP" ); + createretrievablehint( "proximity_grenade", &"MP_SHOCK_CHARGE_PICKUP" ); + createdestroyhint( "trophy_system", &"MP_TROPHY_SYSTEM_DESTROY" ); + createdestroyhint( "sensor_grenade", &"MP_SENSOR_GRENADE_DESTROY" ); + createhackerhint( "claymore_mp", &"MP_CLAYMORE_HACKING" ); + createhackerhint( "bouncingbetty_mp", &"MP_BOUNCINGBETTY_HACKING" ); + createhackerhint( "trophy_system_mp", &"MP_TROPHY_SYSTEM_HACKING" ); + createhackerhint( "acoustic_sensor_mp", &"MP_ACOUSTIC_SENSOR_HACKING" ); + createhackerhint( "camera_spike_mp", &"MP_CAMERA_SPIKE_HACKING" ); + createhackerhint( "satchel_charge_mp", &"MP_SATCHEL_CHARGE_HACKING" ); + createhackerhint( "scrambler_mp", &"MP_SCRAMBLER_HACKING" ); +} + +onplayerconnect() +{ + if ( isdefined( level._weaponobjects_on_player_connect_override ) ) + { + level thread [[ level._weaponobjects_on_player_connect_override ]](); + return; + } + + for (;;) + { + level waittill( "connecting", player ); + + player.usedweapons = 0; + player.hits = 0; + player thread onplayerspawned(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + pixbeginevent( "onPlayerSpawned" ); + + if ( !isdefined( self.watchersinitialized ) ) + { + self createbasewatchers(); + self maps\mp\_satchel_charge::createsatchelwatcher(); + self maps\mp\_proximity_grenade::createproximitygrenadewatcher(); + self maps\mp\_bouncingbetty::createbouncingbettywatcher(); + self maps\mp\_trophy_system::createtrophysystemwatcher(); + self maps\mp\_sensor_grenade::createsensorgrenadewatcher(); + self createclaymorewatcher(); + self creatercbombwatcher(); + self createqrdronewatcher(); + self createplayerhelicopterwatcher(); + self createballisticknifewatcher(); + self createhatchetwatcher(); + self createtactinsertwatcher(); + self setupretrievablewatcher(); + self thread watchweaponobjectusage(); + self.watchersinitialized = 1; + } + + self resetwatchers(); + pixendevent(); + } +} + +resetwatchers() +{ + if ( !isdefined( self.weaponobjectwatcherarray ) ) + return undefined; + + team = self.team; + + foreach ( watcher in self.weaponobjectwatcherarray ) + resetweaponobjectwatcher( watcher, team ); +} + +createbasewatchers() +{ + foreach ( index, weapon in level.watcherweapons ) + self createweaponobjectwatcher( level.watcherweaponnames[index], weapon, self.team ); + + foreach ( index, weapon in level.retrievableweapons ) + self createweaponobjectwatcher( level.retrievableweaponnames[index], weapon, self.team ); +} + +setupretrievablewatcher() +{ + for ( i = 0; i < level.retrievableweapons.size; i++ ) + { + watcher = getweaponobjectwatcherbyweapon( level.retrievableweapons[i] ); + + if ( !isdefined( watcher.onspawnretrievetriggers ) ) + watcher.onspawnretrievetriggers = ::onspawnretrievableweaponobject; + + if ( !isdefined( watcher.ondestroyed ) ) + watcher.ondestroyed = ::ondestroyed; + + if ( !isdefined( watcher.pickup ) ) + watcher.pickup = ::pickup; + } +} + +createballisticknifewatcher() +{ + watcher = self createuseweaponobjectwatcher( "knife_ballistic", "knife_ballistic_mp", self.team ); + watcher.onspawn = maps\mp\_ballistic_knife::onspawn; + watcher.detonate = ::deleteent; + watcher.onspawnretrievetriggers = maps\mp\_ballistic_knife::onspawnretrievetrigger; + watcher.storedifferentobject = 1; +} + +createhatchetwatcher() +{ + watcher = self createuseweaponobjectwatcher( "hatchet", "hatchet_mp", self.team ); + watcher.detonate = ::deleteent; + watcher.onspawn = ::voidonspawn; + watcher.ondamage = ::voidondamage; + watcher.onspawnretrievetriggers = ::onspawnhatchettrigger; +} + +createtactinsertwatcher() +{ + watcher = self createuseweaponobjectwatcher( "tactical_insertion", "tactical_insertion_mp", self.team ); + watcher.playdestroyeddialog = 0; +} + +creatercbombwatcher() +{ + watcher = self createuseweaponobjectwatcher( "rcbomb", "rcbomb_mp", self.team ); + watcher.altdetonate = 0; + watcher.headicon = 0; + watcher.ismovable = 1; + watcher.ownergetsassist = 1; + watcher.playdestroyeddialog = 0; + watcher.deleteonkillbrush = 0; + watcher.detonate = maps\mp\killstreaks\_rcbomb::blowup; + watcher.stuntime = 1; +} + +createqrdronewatcher() +{ + watcher = self createuseweaponobjectwatcher( "qrdrone", "qrdrone_turret_mp", self.team ); + watcher.altdetonate = 0; + watcher.headicon = 0; + watcher.ismovable = 1; + watcher.ownergetsassist = 1; + watcher.playdestroyeddialog = 0; + watcher.deleteonkillbrush = 0; + watcher.detonate = maps\mp\killstreaks\_qrdrone::qrdrone_blowup; + watcher.ondamage = maps\mp\killstreaks\_qrdrone::qrdrone_damagewatcher; + watcher.stuntime = 5; +} + +createplayerhelicopterwatcher() +{ + watcher = self createuseweaponobjectwatcher( "helicopter_player", "helicopter_player_mp", self.team ); + watcher.altdetonate = 1; + watcher.headicon = 0; +} + +createclaymorewatcher() +{ + watcher = self createproximityweaponobjectwatcher( "claymore", "claymore_mp", self.team ); + watcher.watchforfire = 1; + watcher.detonate = ::claymoredetonate; + watcher.activatesound = "wpn_claymore_alert"; + watcher.hackable = 1; + watcher.hackertoolradius = level.equipmenthackertoolradius; + watcher.hackertooltimems = level.equipmenthackertooltimems; + watcher.reconmodel = "t6_wpn_claymore_world_detect"; + watcher.ownergetsassist = 1; + detectionconeangle = weapons_get_dvar_int( "scr_weaponobject_coneangle" ); + watcher.detectiondot = cos( detectionconeangle ); + watcher.detectionmindist = weapons_get_dvar_int( "scr_weaponobject_mindist" ); + watcher.detectiongraceperiod = weapons_get_dvar( "scr_weaponobject_graceperiod" ); + watcher.detonateradius = weapons_get_dvar_int( "scr_weaponobject_radius" ); + watcher.stun = ::weaponstun; + watcher.stuntime = 1; +} + +waittillnotmoving_and_notstunned() +{ + for ( prevorigin = self.origin; 1; prevorigin = self.origin ) + { + wait 0.15; + + if ( self.origin == prevorigin && !self isstunned() ) + break; + } +} + +voidonspawn( unused0, unused1 ) +{ + +} + +voidondamage( unused0 ) +{ + +} + +deleteent( attacker, emp ) +{ + self delete(); +} + +clearfxondeath( fx ) +{ + fx endon( "death" ); + self waittill_any( "death", "hacked" ); + fx delete(); +} + +deleteweaponobjectarray() +{ + if ( isdefined( self.objectarray ) ) + { + for ( i = 0; i < self.objectarray.size; i++ ) + { + if ( isdefined( self.objectarray[i] ) ) + { + if ( isdefined( self.objectarray[i].minemover ) ) + { + if ( isdefined( self.objectarray[i].minemover.killcament ) ) + self.objectarray[i].minemover.killcament delete(); + + self.objectarray[i].minemover delete(); + } + + self.objectarray[i] delete(); + } + } + } + + self.objectarray = []; +} + +claymoredetonate( attacker, weaponname ) +{ + from_emp = maps\mp\killstreaks\_emp::isempkillstreakweapon( weaponname ); + + if ( !isdefined( from_emp ) || !from_emp ) + { + if ( isdefined( attacker ) ) + { + if ( self.owner isenemyplayer( attacker ) ) + { + attacker maps\mp\_challenges::destroyedexplosive( weaponname ); + maps\mp\_scoreevents::processscoreevent( "destroyed_claymore", attacker, self.owner, weaponname ); + } + } + } + + maps\mp\gametypes\_weaponobjects::weapondetonate( attacker, weaponname ); +} + +weapondetonate( attacker, weaponname ) +{ + from_emp = maps\mp\killstreaks\_emp::isempweapon( weaponname ); + + if ( from_emp ) + { + self delete(); + return; + } + + if ( isdefined( attacker ) ) + { + if ( isdefined( self.owner ) && attacker != self.owner ) + self.playdialog = 1; + + if ( isplayer( attacker ) ) + self detonate( attacker ); + else + self detonate(); + } + else if ( isdefined( self.owner ) && isplayer( self.owner ) ) + { + self.playdialog = 0; + self detonate( self.owner ); + } + else + self detonate(); +} + +waitanddetonate( object, delay, attacker, weaponname ) +{ + object endon( "death" ); + object endon( "hacked" ); + from_emp = maps\mp\killstreaks\_emp::isempweapon( weaponname ); + + if ( from_emp && !( isdefined( object.name ) && object.name == "qrdrone_turret_mp" ) ) + { + object setclientflag( 15 ); + object setclientflag( 9 ); + object.stun_fx = 1; + playfx( level._equipment_emp_destroy_fx, object.origin + vectorscale( ( 0, 0, 1 ), 5.0 ), ( 0, randomfloat( 360 ), 0 ) ); + delay = 1.1; + } + + if ( delay ) + wait( delay ); + + if ( isdefined( object.detonated ) && object.detonated == 1 ) + return; + + if ( !isdefined( self.detonate ) ) + return; + + if ( isdefined( attacker ) && isplayer( attacker ) && isdefined( attacker.pers["team"] ) && isdefined( object.owner ) && isdefined( object.owner.pers["team"] ) ) + { + if ( level.teambased ) + { + if ( attacker.pers["team"] != object.owner.pers["team"] ) + attacker notify( "destroyed_explosive" ); + } + else if ( attacker != object.owner ) + attacker notify( "destroyed_explosive" ); + } + + object.detonated = 1; + object [[ self.detonate ]]( attacker, weaponname ); +} + +detonateweaponobjectarray( forcedetonation, weapon ) +{ + undetonated = []; + + if ( isdefined( self.objectarray ) ) + { + for ( i = 0; i < self.objectarray.size; i++ ) + { + if ( isdefined( self.objectarray[i] ) ) + { + if ( self.objectarray[i] isstunned() && forcedetonation == 0 ) + { + undetonated[undetonated.size] = self.objectarray[i]; + continue; + } + + if ( isdefined( weapon ) ) + { + if ( weapon ishacked() && weapon.name != self.objectarray[i].name ) + { + undetonated[undetonated.size] = self.objectarray[i]; + continue; + } + else if ( self.objectarray[i] ishacked() && weapon.name != self.objectarray[i].name ) + { + undetonated[undetonated.size] = self.objectarray[i]; + continue; + } + } + + self thread waitanddetonate( self.objectarray[i], 0.1, undefined, weapon ); + } + } + } + + self.objectarray = undetonated; +} + +addweaponobjecttowatcher( watchername, weapon ) +{ + watcher = getweaponobjectwatcher( watchername ); + assert( isdefined( watcher ), "Weapon object watcher " + watchername + " does not exist" ); + self addweaponobject( watcher, weapon ); +} + +addweaponobject( watcher, weapon ) +{ + if ( !isdefined( watcher.storedifferentobject ) ) + watcher.objectarray[watcher.objectarray.size] = weapon; + + weapon.owner = self; + weapon.detonated = 0; + weapon.name = watcher.weapon; + + if ( isdefined( watcher.ondamage ) ) + weapon thread [[ watcher.ondamage ]]( watcher ); + else + weapon thread weaponobjectdamage( watcher ); + + weapon.ownergetsassist = watcher.ownergetsassist; + + if ( isdefined( watcher.onspawn ) ) + weapon thread [[ watcher.onspawn ]]( watcher, self ); + + if ( isdefined( watcher.onspawnfx ) ) + weapon thread [[ watcher.onspawnfx ]](); + + if ( isdefined( watcher.reconmodel ) ) + weapon thread attachreconmodel( watcher.reconmodel, self ); + + if ( isdefined( watcher.onspawnretrievetriggers ) ) + weapon thread [[ watcher.onspawnretrievetriggers ]]( watcher, self ); + + if ( watcher.hackable ) + weapon thread hackerinit( watcher ); + + if ( isdefined( watcher.stun ) ) + weapon thread watchscramble( watcher ); + + if ( watcher.playdestroyeddialog ) + { + weapon thread playdialogondeath( self ); + weapon thread watchobjectdamage( self ); + } + + if ( watcher.deleteonkillbrush ) + { + if ( isdefined( level.deleteonkillbrushoverride ) ) + weapon thread [[ level.deleteonkillbrushoverride ]]( self, watcher ); + else + weapon thread deleteonkillbrush( self ); + } +} + +watchscramble( watcher ) +{ + self endon( "death" ); + self endon( "hacked" ); + self waittillnotmoving(); + + if ( self maps\mp\_scrambler::checkscramblerstun() ) + self thread stunstart( watcher ); + else + self stunstop(); + + for (;;) + { + level waittill_any( "scrambler_spawn", "scrambler_death", "hacked" ); + + if ( isdefined( self.owner ) && self.owner isempjammed() ) + continue; + + if ( self maps\mp\_scrambler::checkscramblerstun() ) + { + self thread stunstart( watcher ); + continue; + } + + self stunstop(); + } +} + +deleteweaponobjecthelper( weapon_ent ) +{ + if ( !isdefined( weapon_ent.name ) ) + return; + + watcher = self getweaponobjectwatcherbyweapon( weapon_ent.name ); + + if ( !isdefined( watcher ) ) + return; + + watcher.objectarray = deleteweaponobject( watcher, weapon_ent ); +} + +deleteweaponobject( watcher, weapon_ent ) +{ + temp_objectarray = watcher.objectarray; + watcher.objectarray = []; + j = 0; + + for ( i = 0; i < temp_objectarray.size; i++ ) + { + if ( !isdefined( temp_objectarray[i] ) || temp_objectarray[i] == weapon_ent ) + continue; + + watcher.objectarray[j] = temp_objectarray[i]; + j++; + } + + return watcher.objectarray; +} + +weaponobjectdamage( watcher ) +{ + self endon( "death" ); + self endon( "hacked" ); + self setcandamage( 1 ); + self.maxhealth = 100000; + self.health = self.maxhealth; + attacker = undefined; + + while ( true ) + { + self waittill( "damage", damage, attacker, direction_vec, point, type, modelname, tagname, partname, weaponname, idflags ); + + if ( isdefined( weaponname ) ) + { + switch ( weaponname ) + { + case "proximity_grenade_mp": + case "flash_grenade_mp": + case "concussion_grenade_mp": + if ( watcher.stuntime > 0 ) + self thread stunstart( watcher, watcher.stuntime ); + + if ( level.teambased && self.owner.team != attacker.team ) + { + if ( maps\mp\gametypes\_globallogic_player::dodamagefeedback( weaponname, attacker ) ) + attacker maps\mp\gametypes\_damagefeedback::updatedamagefeedback(); + } + else if ( !level.teambased && self.owner != attacker ) + { + if ( maps\mp\gametypes\_globallogic_player::dodamagefeedback( weaponname, attacker ) ) + attacker maps\mp\gametypes\_damagefeedback::updatedamagefeedback(); + } + + continue; + case "willy_pete_mp": + continue; + case "emp_grenade_mp": + if ( level.teambased && self.owner.team != attacker.team ) + { + if ( maps\mp\gametypes\_globallogic_player::dodamagefeedback( weaponname, attacker ) ) + attacker maps\mp\gametypes\_damagefeedback::updatedamagefeedback(); + } + else if ( !level.teambased && self.owner != attacker ) + { + if ( maps\mp\gametypes\_globallogic_player::dodamagefeedback( weaponname, attacker ) ) + attacker maps\mp\gametypes\_damagefeedback::updatedamagefeedback(); + } + + break; + default: + break; + } + } + + if ( !isplayer( attacker ) && isdefined( attacker.owner ) ) + attacker = attacker.owner; + + if ( level.teambased && isplayer( attacker ) ) + { + if ( !level.hardcoremode && self.owner.team == attacker.pers["team"] && self.owner != attacker ) + continue; + } + + if ( maps\mp\gametypes\_globallogic_player::dodamagefeedback( weaponname, attacker ) ) + attacker maps\mp\gametypes\_damagefeedback::updatedamagefeedback(); + + if ( !isvehicle( self ) && !friendlyfirecheck( self.owner, attacker ) ) + continue; + + break; + } + + if ( level.weaponobjectexplodethisframe ) + wait( 0.1 + randomfloat( 0.4 ) ); + else + wait 0.05; + + if ( !isdefined( self ) ) + return; + + level.weaponobjectexplodethisframe = 1; + thread resetweaponobjectexplodethisframe(); + self maps\mp\_entityheadicons::setentityheadicon( "none" ); + + if ( isdefined( type ) && ( issubstr( type, "MOD_GRENADE_SPLASH" ) || issubstr( type, "MOD_GRENADE" ) || issubstr( type, "MOD_EXPLOSIVE" ) ) ) + self.waschained = 1; + + if ( isdefined( idflags ) && idflags & level.idflags_penetration ) + self.wasdamagedfrombulletpenetration = 1; + + self.wasdamaged = 1; + watcher thread waitanddetonate( self, 0.0, attacker, weaponname ); +} + +playdialogondeath( owner ) +{ + owner endon( "death" ); + owner endon( "disconnect" ); + self endon( "hacked" ); + + self waittill( "death" ); + + if ( isdefined( self.playdialog ) && self.playdialog ) + owner maps\mp\gametypes\_globallogic_audio::leaderdialogonplayer( "equipment_destroyed", "item_destroyed" ); +} + +watchobjectdamage( owner ) +{ + owner endon( "death" ); + owner endon( "disconnect" ); + self endon( "hacked" ); + self endon( "death" ); + + while ( true ) + { + self waittill( "damage", damage, attacker ); + + if ( isdefined( attacker ) && isplayer( attacker ) && attacker != owner ) + self.playdialog = 1; + else + self.playdialog = 0; + } +} + +stunstart( watcher, time ) +{ + self endon( "death" ); + + if ( self isstunned() ) + return; + + if ( isdefined( self.camerahead ) ) + self.camerahead setclientflag( 9 ); + + self setclientflag( 9 ); + + if ( isdefined( watcher.stun ) ) + self thread [[ watcher.stun ]](); + + if ( watcher.name == "rcbomb" ) + self.owner freezecontrolswrapper( 1 ); + + if ( isdefined( time ) ) + wait( time ); + else + return; + + if ( watcher.name == "rcbomb" ) + self.owner freezecontrolswrapper( 0 ); + + self stunstop(); +} + +stunstop() +{ + self notify( "not_stunned" ); + + if ( isdefined( self.camerahead ) ) + self.camerahead clearclientflag( 9 ); + + self clearclientflag( 9 ); +} + +weaponstun() +{ + self endon( "death" ); + self endon( "not_stunned" ); + origin = self gettagorigin( "tag_fx" ); + + if ( !isdefined( origin ) ) + origin = self.origin + vectorscale( ( 0, 0, 1 ), 10.0 ); + + self.stun_fx = spawn( "script_model", origin ); + self.stun_fx setmodel( "tag_origin" ); + self thread stunfxthink( self.stun_fx ); + wait 0.1; + playfxontag( level._equipment_spark_fx, self.stun_fx, "tag_origin" ); + self.stun_fx playsound( "dst_disable_spark" ); +} + +stunfxthink( fx ) +{ + fx endon( "death" ); + self waittill_any( "death", "not_stunned" ); + fx delete(); +} + +isstunned() +{ + return isdefined( self.stun_fx ); +} + +resetweaponobjectexplodethisframe() +{ + wait 0.05; + level.weaponobjectexplodethisframe = 0; +} + +getweaponobjectwatcher( name ) +{ + if ( !isdefined( self.weaponobjectwatcherarray ) ) + return undefined; + + for ( watcher = 0; watcher < self.weaponobjectwatcherarray.size; watcher++ ) + { + if ( self.weaponobjectwatcherarray[watcher].name == name ) + return self.weaponobjectwatcherarray[watcher]; + } + + return undefined; +} + +getweaponobjectwatcherbyweapon( weapon ) +{ + if ( !isdefined( self.weaponobjectwatcherarray ) ) + return undefined; + + for ( watcher = 0; watcher < self.weaponobjectwatcherarray.size; watcher++ ) + { + if ( isdefined( self.weaponobjectwatcherarray[watcher].weapon ) && self.weaponobjectwatcherarray[watcher].weapon == weapon ) + return self.weaponobjectwatcherarray[watcher]; + + if ( isdefined( self.weaponobjectwatcherarray[watcher].weapon ) && isdefined( self.weaponobjectwatcherarray[watcher].altweapon ) && self.weaponobjectwatcherarray[watcher].altweapon == weapon ) + return self.weaponobjectwatcherarray[watcher]; + } + + return undefined; +} + +resetweaponobjectwatcher( watcher, ownerteam ) +{ + if ( level.deleteexplosivesonspawn == 1 ) + { + self notify( "weapon_object_destroyed" ); + watcher deleteweaponobjectarray(); + } + + watcher.ownerteam = ownerteam; +} + +createweaponobjectwatcher( name, weapon, ownerteam ) +{ + if ( !isdefined( self.weaponobjectwatcherarray ) ) + self.weaponobjectwatcherarray = []; + + weaponobjectwatcher = getweaponobjectwatcher( name ); + + if ( !isdefined( weaponobjectwatcher ) ) + { + weaponobjectwatcher = spawnstruct(); + self.weaponobjectwatcherarray[self.weaponobjectwatcherarray.size] = weaponobjectwatcher; + weaponobjectwatcher.name = name; + weaponobjectwatcher.type = "use"; + weaponobjectwatcher.weapon = weapon; + weaponobjectwatcher.weaponidx = getweaponindexfromname( weapon ); + weaponobjectwatcher.watchforfire = 0; + weaponobjectwatcher.hackable = 0; + weaponobjectwatcher.altdetonate = 0; + weaponobjectwatcher.detectable = 1; + weaponobjectwatcher.headicon = 1; + weaponobjectwatcher.stuntime = 0; + weaponobjectwatcher.activatesound = undefined; + weaponobjectwatcher.ignoredirection = undefined; + weaponobjectwatcher.immediatedetonation = undefined; + weaponobjectwatcher.deploysound = getweaponfiresound( weaponobjectwatcher.weaponidx ); + weaponobjectwatcher.deploysoundplayer = getweaponfiresoundplayer( weaponobjectwatcher.weaponidx ); + weaponobjectwatcher.pickupsound = getweaponpickupsound( weaponobjectwatcher.weaponidx ); + weaponobjectwatcher.pickupsoundplayer = getweaponpickupsoundplayer( weaponobjectwatcher.weaponidx ); + weaponobjectwatcher.altweapon = undefined; + weaponobjectwatcher.ownergetsassist = 0; + weaponobjectwatcher.playdestroyeddialog = 1; + weaponobjectwatcher.deleteonkillbrush = 1; + weaponobjectwatcher.deleteondifferentobjectspawn = 1; + weaponobjectwatcher.enemydestroy = 0; + weaponobjectwatcher.onspawn = undefined; + weaponobjectwatcher.onspawnfx = undefined; + weaponobjectwatcher.onspawnretrievetriggers = undefined; + weaponobjectwatcher.ondetonated = undefined; + weaponobjectwatcher.detonate = undefined; + weaponobjectwatcher.stun = undefined; + weaponobjectwatcher.ondestroyed = undefined; + + if ( !isdefined( weaponobjectwatcher.objectarray ) ) + weaponobjectwatcher.objectarray = []; + } + + resetweaponobjectwatcher( weaponobjectwatcher, ownerteam ); + return weaponobjectwatcher; +} + +createuseweaponobjectwatcher( name, weapon, ownerteam ) +{ + weaponobjectwatcher = createweaponobjectwatcher( name, weapon, ownerteam ); + weaponobjectwatcher.type = "use"; + weaponobjectwatcher.onspawn = ::onspawnuseweaponobject; + return weaponobjectwatcher; +} + +createproximityweaponobjectwatcher( name, weapon, ownerteam ) +{ + weaponobjectwatcher = createweaponobjectwatcher( name, weapon, ownerteam ); + weaponobjectwatcher.type = "proximity"; + weaponobjectwatcher.onspawn = ::onspawnproximityweaponobject; + detectionconeangle = weapons_get_dvar_int( "scr_weaponobject_coneangle" ); + weaponobjectwatcher.detectiondot = cos( detectionconeangle ); + weaponobjectwatcher.detectionmindist = weapons_get_dvar_int( "scr_weaponobject_mindist" ); + weaponobjectwatcher.detectiongraceperiod = weapons_get_dvar( "scr_weaponobject_graceperiod" ); + weaponobjectwatcher.detonateradius = weapons_get_dvar_int( "scr_weaponobject_radius" ); + return weaponobjectwatcher; +} + +commononspawnuseweaponobject( watcher, owner ) +{ + if ( watcher.detectable ) + { + if ( isdefined( watcher.ismovable ) && watcher.ismovable ) + self thread weaponobjectdetectionmovable( owner.pers["team"] ); + else + self thread weaponobjectdetectiontrigger_wait( owner.pers["team"] ); + + if ( watcher.headicon && level.teambased ) + { + self waittillnotmoving(); + offset = level.weaponobjects_headicon_offset["default"]; + + if ( isdefined( level.weaponobjects_headicon_offset[self.name] ) ) + offset = level.weaponobjects_headicon_offset[self.name]; + + if ( isdefined( self ) ) + self maps\mp\_entityheadicons::setentityheadicon( owner.pers["team"], owner, offset ); + } + } +} + +onspawnuseweaponobject( watcher, owner ) +{ + self commononspawnuseweaponobject( watcher, owner ); +} + +onspawnproximityweaponobject( watcher, owner ) +{ + self thread commononspawnuseweaponobject( watcher, owner ); + self thread proximityweaponobjectdetonation( watcher ); +/# + if ( getdvarint( "scr_weaponobject_debug" ) ) + self thread proximityweaponobjectdebug( watcher ); +#/ +} + +watchweaponobjectusage() +{ + self endon( "disconnect" ); + + if ( !isdefined( self.weaponobjectwatcherarray ) ) + self.weaponobjectwatcherarray = []; + + self thread watchweaponobjectspawn(); + self thread watchweaponprojectileobjectspawn(); + self thread watchweaponobjectdetonation(); + self thread watchweaponobjectaltdetonation(); + self thread watchweaponobjectaltdetonate(); + self thread deleteweaponobjectson(); +} + +watchweaponobjectspawn() +{ + self notify( "watchWeaponObjectSpawn" ); + self endon( "watchWeaponObjectSpawn" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "grenade_fire", weapon, weapname ); + + switch ( weapname ) + { + case "tactical_insertion_mp": + case "scrambler_mp": + case "camera_spike_mp": + case "bouncingbetty_mp": + case "acoustic_sensor_mp": + break; + case "trophy_system_mp": + case "sensor_grenade_mp": + case "satchel_charge_mp": + case "proximity_grenade_mp": + case "claymore_mp": + case "bouncingbetty_mp": + for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) + { + if ( self.weaponobjectwatcherarray[i].weapon != weapname ) + continue; + + objectarray_size = self.weaponobjectwatcherarray[i].objectarray.size; + + for ( j = 0; j < objectarray_size; j++ ) + { + if ( !isdefined( self.weaponobjectwatcherarray[i].objectarray[j] ) ) + self.weaponobjectwatcherarray[i].objectarray = deleteweaponobject( self.weaponobjectwatcherarray[i], weapon ); + } + + numallowed = 2; + + if ( weapname == "proximity_grenade_mp" ) + numallowed = weapons_get_dvar_int( "scr_proximityGrenadeMaxInstances" ); + + if ( isdefined( self.weaponobjectwatcherarray[i].detonate ) && self.weaponobjectwatcherarray[i].objectarray.size > numallowed - 1 ) + self.weaponobjectwatcherarray[i] thread waitanddetonate( self.weaponobjectwatcherarray[i].objectarray[0], 0.1, undefined, weapname ); + } + + break; + default: + break; + } + + if ( !self ishacked() ) + { + if ( weapname == "claymore_mp" || weapname == "satchel_charge_mp" || weapname == "bouncingbetty_mp" ) + self addweaponstat( weapname, "used", 1 ); + } + + watcher = getweaponobjectwatcherbyweapon( weapname ); + + if ( isdefined( watcher ) ) + self addweaponobject( watcher, weapon ); + } +} + +anyobjectsinworld( weapon ) +{ + objectsinworld = 0; + + for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) + { + if ( self.weaponobjectwatcherarray[i].weapon != weapon ) + continue; + + if ( isdefined( self.weaponobjectwatcherarray[i].detonate ) && self.weaponobjectwatcherarray[i].objectarray.size > 0 ) + { + objectsinworld = 1; + break; + } + } + + return objectsinworld; +} + +watchweaponprojectileobjectspawn() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "missile_fire", weapon, weapname ); + + watcher = getweaponobjectwatcherbyweapon( weapname ); + + if ( isdefined( watcher ) ) + { + self addweaponobject( watcher, weapon ); + objectarray_size = watcher.objectarray.size; + + for ( j = 0; j < objectarray_size; j++ ) + { + if ( !isdefined( watcher.objectarray[j] ) ) + watcher.objectarray = deleteweaponobject( watcher, weapon ); + } + + if ( isdefined( watcher.detonate ) && watcher.objectarray.size > 3 ) + watcher thread waitanddetonate( watcher.objectarray[0], 0.1 ); + } + } +} + +proximityweaponobjectdebug( watcher ) +{ +/# + self waittillnotmoving(); + self thread showcone( acos( watcher.detectiondot ), watcher.detonateradius, ( 1, 0.85, 0 ) ); + self thread showcone( 60, 256, ( 1, 0, 0 ) ); +#/ +} + +vectorcross( v1, v2 ) +{ +/# + return ( v1[1] * v2[2] - v1[2] * v2[1], v1[2] * v2[0] - v1[0] * v2[2], v1[0] * v2[1] - v1[1] * v2[0] ); +#/ +} + +showcone( angle, range, color ) +{ +/# + self endon( "death" ); + start = self.origin; + forward = anglestoforward( self.angles ); + right = vectorcross( forward, ( 0, 0, 1 ) ); + up = vectorcross( forward, right ); + fullforward = forward * range * cos( angle ); + sideamnt = range * sin( angle ); + + while ( true ) + { + prevpoint = ( 0, 0, 0 ); + + for ( i = 0; i <= 20; i++ ) + { + coneangle = i / 20.0 * 360; + point = start + fullforward + sideamnt * ( right * cos( coneangle ) + up * sin( coneangle ) ); + + if ( i > 0 ) + { + line( start, point, color ); + line( prevpoint, point, color ); + } + + prevpoint = point; + } + + wait 0.05; + } +#/ +} + +weaponobjectdetectionmovable( ownerteam ) +{ + self endon( "end_detection" ); + level endon( "game_ended" ); + self endon( "death" ); + self endon( "hacked" ); + + if ( level.oldschool ) + return; + + if ( !level.teambased ) + return; + + self.detectid = "rcBomb" + gettime() + randomint( 1000000 ); + + while ( !level.gameended ) + { + wait 1; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( isai( player ) ) + continue; + + if ( isdefined( self.model_name ) && player hasperk( "specialty_detectexplosive" ) ) + { + switch ( self.model_name ) + { + case "t6_wpn_claymore_world_detect": + case "t6_wpn_c4_world_detect": + break; + default: + continue; + } + } + else + continue; + + if ( player.team == ownerteam ) + continue; + + if ( isdefined( player.bombsquadids[self.detectid] ) ) + continue; + } + } +} + +seticonpos( item, icon, heightincrease ) +{ + icon.x = item.origin[0]; + icon.y = item.origin[1]; + icon.z = item.origin[2] + heightincrease; +} + +weaponobjectdetectiontrigger_wait( ownerteam ) +{ + self endon( "death" ); + self endon( "hacked" ); + waittillnotmoving(); + + if ( level.oldschool ) + return; + + self thread weaponobjectdetectiontrigger( ownerteam ); +} + +weaponobjectdetectiontrigger( ownerteam ) +{ + trigger = spawn( "trigger_radius", self.origin - vectorscale( ( 0, 0, 1 ), 128.0 ), 0, 512, 256 ); + trigger.detectid = "trigger" + gettime() + randomint( 1000000 ); + trigger sethintlowpriority( 1 ); + self waittill_any( "death", "hacked" ); + trigger notify( "end_detection" ); + + if ( isdefined( trigger.bombsquadicon ) ) + trigger.bombsquadicon destroy(); + + trigger delete(); +} + +hackertriggersetvisibility( owner ) +{ + self endon( "death" ); + assert( isplayer( owner ) ); + ownerteam = owner.pers["team"]; + + for (;;) + { + if ( level.teambased ) + { + self setvisibletoallexceptteam( ownerteam ); + self setexcludeteamfortrigger( ownerteam ); + } + else + { + self setvisibletoall(); + self setteamfortrigger( "none" ); + } + + if ( isdefined( owner ) ) + self setinvisibletoplayer( owner ); + + level waittill_any( "player_spawned", "joined_team" ); + } +} + +hackernotmoving() +{ + self endon( "death" ); + self waittillnotmoving(); + self notify( "landed" ); +} + +hackerinit( watcher ) +{ + self thread hackernotmoving(); + event = self waittill_any_return( "death", "landed" ); + + if ( event == "death" ) + return; + + triggerorigin = self.origin; + + if ( isdefined( self.name ) && self.name == "satchel_charge_mp" ) + triggerorigin = self gettagorigin( "tag_fx" ); + + self.hackertrigger = spawn( "trigger_radius_use", triggerorigin, level.weaponobjects_hacker_trigger_width, level.weaponobjects_hacker_trigger_height ); +/# + +#/ + self.hackertrigger sethintlowpriority( 1 ); + self.hackertrigger setcursorhint( "HINT_NOICON", self ); + self.hackertrigger setignoreentfortrigger( self ); + self.hackertrigger enablelinkto(); + self.hackertrigger linkto( self ); + + if ( isdefined( level.hackerhints[self.name] ) ) + self.hackertrigger sethintstring( level.hackerhints[self.name].hint ); + else + self.hackertrigger sethintstring( &"MP_GENERIC_HACKING" ); + + self.hackertrigger setperkfortrigger( "specialty_disarmexplosive" ); + self.hackertrigger thread hackertriggersetvisibility( self.owner ); + self thread hackerthink( self.hackertrigger, watcher ); +} + +hackerthink( trigger, watcher ) +{ + self endon( "death" ); + + for (;;) + { + trigger waittill( "trigger", player, instant ); + + if ( !isdefined( instant ) && !trigger hackerresult( player, self.owner ) ) + continue; + + self.owner hackerremoveweapon( self ); + self.owner maps\mp\gametypes\_globallogic_audio::leaderdialogonplayer( "hacked_equip", "item_destroyed" ); + self.hacked = 1; + self setmissileowner( player ); + self setteam( player.pers["team"] ); + self.owner = player; + + if ( isweaponequipment( self.name ) || self.name == "proximity_grenade_mp" ) + { + maps\mp\_scoreevents::processscoreevent( "hacked", player ); + player addweaponstat( "pda_hack_mp", "CombatRecordStat", 1 ); + player maps\mp\_challenges::hackedordestroyedequipment(); + } + + if ( self.name == "satchel_charge_mp" && isdefined( player.lowermessage ) ) + { + player.lowermessage settext( &"PLATFORM_SATCHEL_CHARGE_DOUBLE_TAP" ); + player.lowermessage.alpha = 1; + player.lowermessage fadeovertime( 2.0 ); + player.lowermessage.alpha = 0; + } + + self notify( "hacked", player ); + level notify( "hacked", self, player ); + + if ( self.name == "camera_spike_mp" && isdefined( self.camerahead ) ) + self.camerahead notify( "hacked", player ); +/# + +#/ + if ( isdefined( watcher.stun ) ) + { + self thread stunstart( watcher, 0.75 ); + wait 0.75; + } + else + wait 0.05; + + if ( isdefined( player ) && player.sessionstate == "playing" ) + player notify( "grenade_fire", self, self.name, 1 ); + else + watcher thread waitanddetonate( self, 0.0 ); + + return; + } +} + +hackerunfreezeplayer( player ) +{ + self endon( "hack_done" ); + + self waittill( "death" ); + + if ( isdefined( player ) ) + { + player freeze_player_controls( 0 ); + player enableweapons(); + } +} + +hackerresult( player, owner ) +{ + success = 1; + time = gettime(); + hacktime = getdvarfloat( "perk_disarmExplosiveTime" ); + + if ( !canhack( player, owner, 1 ) ) + return 0; + + self thread hackerunfreezeplayer( player ); + + while ( time + hacktime * 1000 > gettime() ) + { + if ( !canhack( player, owner, 0 ) ) + { + success = 0; + break; + } + + if ( !player usebuttonpressed() ) + { + success = 0; + break; + } + + if ( !isdefined( self ) ) + { + success = 0; + break; + } + + player freeze_player_controls( 1 ); + player disableweapons(); + + if ( !isdefined( self.progressbar ) ) + { + self.progressbar = player createprimaryprogressbar(); + self.progressbar.lastuserate = -1; + self.progressbar showelem(); + self.progressbar updatebar( 0.01, 1 / hacktime ); + self.progresstext = player createprimaryprogressbartext(); + self.progresstext settext( &"MP_HACKING" ); + self.progresstext showelem(); + player playlocalsound( "evt_hacker_hacking" ); + } + + wait 0.05; + } + + if ( isdefined( player ) ) + { + player freeze_player_controls( 0 ); + player enableweapons(); + } + + if ( isdefined( self.progressbar ) ) + { + self.progressbar destroyelem(); + self.progresstext destroyelem(); + } + + if ( isdefined( self ) ) + self notify( "hack_done" ); + + return success; +} + +canhack( player, owner, weapon_check ) +{ + if ( !isdefined( player ) ) + return false; + + if ( !isplayer( player ) ) + return false; + + if ( !isalive( player ) ) + return false; + + if ( !isdefined( owner ) ) + return false; + + if ( owner == player ) + return false; + + if ( level.teambased && player.team == owner.team ) + return false; + + if ( isdefined( player.isdefusing ) && player.isdefusing ) + return false; + + if ( isdefined( player.isplanting ) && player.isplanting ) + return false; + + if ( isdefined( player.proxbar ) && !player.proxbar.hidden ) + return false; + + if ( isdefined( player.revivingteammate ) && player.revivingteammate == 1 ) + return false; + + if ( !player isonground() ) + return false; + + if ( player isinvehicle() ) + return false; + + if ( player isweaponviewonlylinked() ) + return false; + + if ( !player hasperk( "specialty_disarmexplosive" ) ) + return false; + + if ( player isempjammed() ) + return false; + + if ( isdefined( player.laststand ) && player.laststand ) + return false; + + if ( weapon_check ) + { + if ( player isthrowinggrenade() ) + return false; + + if ( player isswitchingweapons() ) + return false; + + if ( player ismeleeing() ) + return false; + + weapon = player getcurrentweapon(); + + if ( !isdefined( weapon ) ) + return false; + + if ( weapon == "none" ) + return false; + + if ( isweaponequipment( weapon ) && player isfiring() ) + return false; + + if ( isweaponspecificuse( weapon ) ) + return false; + } + + return true; +} + +hackerremoveweapon( weapon ) +{ + for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) + { + if ( self.weaponobjectwatcherarray[i].weapon != weapon.name ) + continue; + + objectarray_size = self.weaponobjectwatcherarray[i].objectarray.size; + + for ( j = 0; j < objectarray_size; j++ ) + self.weaponobjectwatcherarray[i].objectarray = deleteweaponobject( self.weaponobjectwatcherarray[i], weapon ); + + return; + } +} + +proximityweaponobjectdetonation( watcher ) +{ + self endon( "death" ); + self endon( "hacked" ); + self waittillnotmoving(); + + if ( isdefined( watcher.activationdelay ) ) + wait( watcher.activationdelay ); + + damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - watcher.detonateradius ), level.aitriggerspawnflags | level.vehicletriggerspawnflags, watcher.detonateradius, watcher.detonateradius * 2 ); + damagearea enablelinkto(); + damagearea linkto( self ); + self thread deleteondeath( damagearea ); + up = anglestoup( self.angles ); + traceorigin = self.origin + up; + + while ( true ) + { + damagearea waittill( "trigger", ent ); + + if ( getdvarint( "scr_weaponobject_debug" ) != 1 ) + { + if ( isdefined( self.owner ) && ent == self.owner ) + continue; + + if ( isdefined( self.owner ) && isvehicle( ent ) && isdefined( ent.owner ) && self.owner == ent.owner ) + continue; + + if ( !friendlyfirecheck( self.owner, ent, 0 ) ) + continue; + } + + if ( lengthsquared( ent getvelocity() ) < 10 && !isdefined( watcher.immediatedetonation ) ) + continue; + + if ( !ent shouldaffectweaponobject( self, watcher ) ) + continue; + + if ( self isstunned() ) + continue; + + if ( isplayer( ent ) && !isalive( ent ) ) + continue; + + if ( ent damageconetrace( traceorigin, self ) > 0 ) + break; + } + + if ( isdefined( watcher.activatesound ) ) + self playsound( watcher.activatesound ); + + if ( isdefined( watcher.activatefx ) ) + self setclientflag( 4 ); + + ent thread deathdodger( watcher.detectiongraceperiod ); + wait( watcher.detectiongraceperiod ); + + if ( isplayer( ent ) && ent hasperk( "specialty_delayexplosive" ) ) + wait( getdvarfloat( "perk_delayExplosiveTime" ) ); + + self maps\mp\_entityheadicons::setentityheadicon( "none" ); + self.origin = traceorigin; + + if ( isdefined( self.owner ) && isplayer( self.owner ) ) + self [[ watcher.detonate ]]( self.owner ); + else + self [[ watcher.detonate ]](); +} + +shouldaffectweaponobject( object, watcher ) +{ + radius = getweaponexplosionradius( watcher.weapon ); + distancesqr = distancesquared( self.origin, object.origin ); + + if ( radius * radius < distancesqr ) + return 0; + + pos = self.origin + vectorscale( ( 0, 0, 1 ), 32.0 ); + + if ( isdefined( watcher.ignoredirection ) ) + return 1; + + dirtopos = pos - object.origin; + objectforward = anglestoforward( object.angles ); + dist = vectordot( dirtopos, objectforward ); + + if ( dist < watcher.detectionmindist ) + return 0; + + dirtopos = vectornormalize( dirtopos ); + dot = vectordot( dirtopos, objectforward ); + return dot > watcher.detectiondot; +} + +deathdodger( graceperiod ) +{ + self endon( "death" ); + self endon( "disconnect" ); + wait( 0.2 + graceperiod ); + self notify( "death_dodger" ); +} + +deleteondeath( ent ) +{ + self waittill_any( "death", "hacked" ); + wait 0.05; + + if ( isdefined( ent ) ) + ent delete(); +} + +testkillbrushonstationary( killbrusharray, player ) +{ + player endon( "disconnect" ); + self endon( "death" ); + + self waittill( "stationary" ); + + wait 0.1; + + for ( i = 0; i < killbrusharray.size; i++ ) + { + if ( self istouching( killbrusharray[i] ) ) + { + if ( self.origin[2] > player.origin[2] ) + break; + + if ( isdefined( self ) ) + self delete(); + + return; + } + } +} + +deleteonkillbrush( player ) +{ + player endon( "disconnect" ); + self endon( "death" ); + self endon( "stationary" ); + killbrushes = getentarray( "trigger_hurt", "classname" ); + self thread testkillbrushonstationary( killbrushes, player ); + + while ( true ) + { + for ( i = 0; i < killbrushes.size; i++ ) + { + if ( self istouching( killbrushes[i] ) ) + { + if ( self.origin[2] > player.origin[2] ) + break; + + if ( isdefined( self ) ) + self delete(); + + return; + } + } + + wait 0.1; + } +} + +watchweaponobjectaltdetonation() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "alt_detonate" ); + + if ( !isalive( self ) ) + continue; + + for ( watcher = 0; watcher < self.weaponobjectwatcherarray.size; watcher++ ) + { + if ( self.weaponobjectwatcherarray[watcher].altdetonate ) + self.weaponobjectwatcherarray[watcher] detonateweaponobjectarray( 0 ); + } + } +} + +watchweaponobjectaltdetonate() +{ + self endon( "disconnect" ); + self endon( "detonated" ); + level endon( "game_ended" ); + buttontime = 0; + + for (;;) + { + self waittill( "doubletap_detonate" ); + + if ( !isalive( self ) ) + continue; + + self notify( "alt_detonate" ); + wait 0.05; + } +} + +watchweaponobjectdetonation() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "detonate" ); + + if ( self isusingoffhand() ) + weap = self getcurrentoffhand(); + else + weap = self getcurrentweapon(); + + watcher = getweaponobjectwatcherbyweapon( weap ); + + if ( isdefined( watcher ) ) + watcher detonateweaponobjectarray( 0 ); + } +} + +deleteweaponobjectson() +{ + while ( true ) + { + msg = self waittill_any_return( "disconnect", "joined_team", "joined_spectators", "death" ); + + if ( msg == "death" ) + continue; + + if ( !isdefined( self.weaponobjectwatcherarray ) ) + return; + + watchers = []; + + for ( watcher = 0; watcher < self.weaponobjectwatcherarray.size; watcher++ ) + { + weaponobjectwatcher = spawnstruct(); + watchers[watchers.size] = weaponobjectwatcher; + weaponobjectwatcher.objectarray = []; + + if ( isdefined( self.weaponobjectwatcherarray[watcher].objectarray ) ) + weaponobjectwatcher.objectarray = self.weaponobjectwatcherarray[watcher].objectarray; + } + + wait 0.05; + + for ( watcher = 0; watcher < watchers.size; watcher++ ) + watchers[watcher] deleteweaponobjectarray(); + + if ( msg == "disconnect" ) + return; + } +} + +saydamaged( orig, amount ) +{ +/# + for ( i = 0; i < 60; i++ ) + { + print3d( orig, "damaged! " + amount ); + wait 0.05; + } +#/ +} + +showheadicon( trigger ) +{ + triggerdetectid = trigger.detectid; + useid = -1; + + for ( index = 0; index < 4; index++ ) + { + detectid = self.bombsquadicons[index].detectid; + + if ( detectid == triggerdetectid ) + return; + + if ( detectid == "" ) + useid = index; + } + + if ( useid < 0 ) + return; + + self.bombsquadids[triggerdetectid] = 1; + self.bombsquadicons[useid].x = trigger.origin[0]; + self.bombsquadicons[useid].y = trigger.origin[1]; + self.bombsquadicons[useid].z = trigger.origin[2] + 24 + 128; + self.bombsquadicons[useid] fadeovertime( 0.25 ); + self.bombsquadicons[useid].alpha = 1; + self.bombsquadicons[useid].detectid = trigger.detectid; + + while ( isalive( self ) && isdefined( trigger ) && self istouching( trigger ) ) + wait 0.05; + + if ( !isdefined( self ) ) + return; + + self.bombsquadicons[useid].detectid = ""; + self.bombsquadicons[useid] fadeovertime( 0.25 ); + self.bombsquadicons[useid].alpha = 0; + self.bombsquadids[triggerdetectid] = undefined; +} + +friendlyfirecheck( owner, attacker, forcedfriendlyfirerule ) +{ + if ( !isdefined( owner ) ) + return true; + + if ( !level.teambased ) + return true; + + friendlyfirerule = level.friendlyfire; + + if ( isdefined( forcedfriendlyfirerule ) ) + friendlyfirerule = forcedfriendlyfirerule; + + if ( friendlyfirerule != 0 ) + return true; + + if ( attacker == owner ) + return true; + + if ( isplayer( attacker ) ) + { + if ( !isdefined( attacker.pers["team"] ) ) + return true; + + if ( attacker.pers["team"] != owner.pers["team"] ) + return true; + } + else if ( isai( attacker ) ) + { + if ( attacker.aiteam != owner.pers["team"] ) + return true; + } + else if ( isvehicle( attacker ) ) + { + if ( isdefined( attacker.owner ) && isplayer( attacker.owner ) ) + { + if ( attacker.owner.pers["team"] != owner.pers["team"] ) + return true; + } + else + { + occupant_team = attacker maps\mp\_vehicles::vehicle_get_occupant_team(); + + if ( occupant_team != owner.pers["team"] ) + return true; + } + } + + return false; +} + +onspawnhatchettrigger( watcher, player ) +{ + self endon( "death" ); + self setowner( player ); + self setteam( player.pers["team"] ); + self.owner = player; + self.oldangles = self.angles; + self waittillnotmoving(); + waittillframeend; + + if ( player.pers["team"] == "spectator" ) + return; + + triggerorigin = self.origin; + triggerparentent = undefined; + + if ( isdefined( self.stucktoplayer ) ) + { + if ( isalive( self.stucktoplayer ) || !isdefined( self.stucktoplayer.body ) ) + { + if ( isalive( self.stucktoplayer ) ) + { + triggerparentent = self; + self unlink(); + self.angles = self.oldangles; + self launch( vectorscale( ( 1, 1, 1 ), 5.0 ) ); + self waittillnotmoving(); + waittillframeend; + } + else + triggerparentent = self.stucktoplayer; + } + else + triggerparentent = self.stucktoplayer.body; + } + + if ( isdefined( triggerparentent ) ) + triggerorigin = triggerparentent.origin + vectorscale( ( 0, 0, 1 ), 10.0 ); + + self.hatchetpickuptrigger = spawn( "trigger_radius", triggerorigin, 0, 50, 50 ); + self.hatchetpickuptrigger enablelinkto(); + self.hatchetpickuptrigger linkto( self ); + + if ( isdefined( triggerparentent ) ) + self.hatchetpickuptrigger linkto( triggerparentent ); + + self thread watchhatchettrigger( self.hatchetpickuptrigger, watcher.pickup, watcher.pickupsoundplayer, watcher.pickupsound ); +/# + thread switch_team( self, watcher.weapon, player ); +#/ + self thread watchshutdown( player ); +} + +watchhatchettrigger( trigger, callback, playersoundonuse, npcsoundonuse ) +{ + self endon( "delete" ); + self endon( "hacked" ); + + while ( true ) + { + trigger waittill( "trigger", player ); + + if ( !isalive( player ) ) + continue; + + if ( !player isonground() ) + continue; + + if ( isdefined( trigger.claimedby ) && player != trigger.claimedby ) + continue; + + if ( !player hasweapon( self.name ) ) + continue; + + curr_ammo = player getweaponammostock( "hatchet_mp" ); + maxammo = weaponmaxammo( "hatchet_mp" ); + + if ( player.grenadetypeprimary == "hatchet_mp" ) + maxammo = player.grenadetypeprimarycount; + else if ( isdefined( player.grenadetypesecondary ) && player.grenadetypesecondary == "hatchet_mp" ) + maxammo = player.grenadetypesecondarycount; + + if ( curr_ammo >= maxammo ) + continue; + + if ( isdefined( playersoundonuse ) ) + player playlocalsound( playersoundonuse ); + + if ( isdefined( npcsoundonuse ) ) + player playsound( npcsoundonuse ); + + self thread [[ callback ]]( player ); + } +} + +onspawnretrievableweaponobject( watcher, player ) +{ + self endon( "death" ); + self endon( "hacked" ); + + if ( ishacked() ) + { + self thread watchshutdown( player ); + return; + } + + self setowner( player ); + self setteam( player.pers["team"] ); + self.owner = player; + self.oldangles = self.angles; + self waittillnotmoving(); + + if ( isdefined( watcher.activationdelay ) ) + wait( watcher.activationdelay ); + + waittillframeend; + + if ( player.pers["team"] == "spectator" ) + return; + + triggerorigin = self.origin; + triggerparentent = undefined; + + if ( isdefined( self.stucktoplayer ) ) + { + if ( isalive( self.stucktoplayer ) || !isdefined( self.stucktoplayer.body ) ) + triggerparentent = self.stucktoplayer; + else + triggerparentent = self.stucktoplayer.body; + } + + if ( isdefined( triggerparentent ) ) + triggerorigin = triggerparentent.origin + vectorscale( ( 0, 0, 1 ), 10.0 ); + else + { + up = anglestoup( self.angles ); + triggerorigin = self.origin + up; + } + + self.pickuptrigger = spawn( "trigger_radius_use", triggerorigin ); + self.pickuptrigger sethintlowpriority( 1 ); + self.pickuptrigger setcursorhint( "HINT_NOICON", self ); + self.pickuptrigger enablelinkto(); + self.pickuptrigger linkto( self ); + self.pickuptrigger setinvisibletoall(); + self.pickuptrigger setvisibletoplayer( player ); + + if ( isdefined( level.retrievehints[watcher.name] ) ) + self.pickuptrigger sethintstring( level.retrievehints[watcher.name].hint ); + else + self.pickuptrigger sethintstring( &"MP_GENERIC_PICKUP" ); + + if ( level.teambased ) + self.pickuptrigger setteamfortrigger( player.pers["team"] ); + else + self.pickuptrigger setteamfortrigger( "none" ); + + if ( isdefined( triggerparentent ) ) + self.pickuptrigger linkto( triggerparentent ); + + if ( watcher.enemydestroy ) + { + self.enemytrigger = spawn( "trigger_radius_use", triggerorigin ); + self.enemytrigger setcursorhint( "HINT_NOICON", self ); + self.enemytrigger enablelinkto(); + self.enemytrigger linkto( self ); + self.enemytrigger setinvisibletoplayer( player ); + + if ( level.teambased ) + { + self.enemytrigger setexcludeteamfortrigger( player.team ); + self.enemytrigger.triggerteamignore = self.team; + } + + if ( isdefined( level.destroyhints[watcher.name] ) ) + self.enemytrigger sethintstring( level.destroyhints[watcher.name].hint ); + else + self.enemytrigger sethintstring( &"MP_GENERIC_DESTROY" ); + + self thread watchusetrigger( self.enemytrigger, watcher.ondestroyed ); + } + + self thread watchusetrigger( self.pickuptrigger, watcher.pickup, watcher.pickupsoundplayer, watcher.pickupsound ); +/# + thread switch_team( self, watcher.weapon, player ); +#/ + if ( isdefined( watcher.pickup_trigger_listener ) ) + self thread [[ watcher.pickup_trigger_listener ]]( self.pickuptrigger, player ); + + self thread watchshutdown( player ); +} + +watch_trigger_visibility( triggers, weap_name ) +{ + self notify( "watchTriggerVisibility" ); + self endon( "watchTriggerVisibility" ); + self endon( "death" ); + self endon( "hacked" ); + max_ammo = weaponmaxammo( weap_name ); + start_ammo = weaponstartammo( weap_name ); + ammo_to_check = 0; + + while ( true ) + { + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] hasweapon( weap_name ) ) + { + ammo_to_check = max_ammo; + + if ( self.owner == players[i] ) + { + curr_ammo = players[i] getweaponammostock( weap_name ) + players[i] getweaponammoclip( weap_name ); + + if ( weap_name == "hatchet_mp" ) + curr_ammo = players[i] getweaponammostock( weap_name ); + + if ( curr_ammo < ammo_to_check ) + { + triggers["owner_pickup"] setvisibletoplayer( players[i] ); + triggers["enemy_pickup"] setinvisibletoplayer( players[i] ); + } + else + { + triggers["owner_pickup"] setinvisibletoplayer( players[i] ); + triggers["enemy_pickup"] setinvisibletoplayer( players[i] ); + } + } + else + { + curr_ammo = players[i] getweaponammostock( weap_name ) + players[i] getweaponammoclip( weap_name ); + + if ( weap_name == "hatchet_mp" ) + curr_ammo = players[i] getweaponammostock( weap_name ); + + if ( curr_ammo < ammo_to_check ) + { + triggers["owner_pickup"] setinvisibletoplayer( players[i] ); + triggers["enemy_pickup"] setvisibletoplayer( players[i] ); + } + else + { + triggers["owner_pickup"] setinvisibletoplayer( players[i] ); + triggers["enemy_pickup"] setinvisibletoplayer( players[i] ); + } + } + + continue; + } + + triggers["owner_pickup"] setinvisibletoplayer( players[i] ); + triggers["enemy_pickup"] setinvisibletoplayer( players[i] ); + } + + wait 0.05; + } +} + +destroyent() +{ + self delete(); +} + +pickup( player ) +{ + if ( self.name != "hatchet_mp" && isdefined( self.owner ) && self.owner != player ) + return; + + self notify( "picked_up" ); + self.playdialog = 0; + self destroyent(); + player giveweapon( self.name ); + clip_ammo = player getweaponammoclip( self.name ); + clip_max_ammo = weaponclipsize( self.name ); + + if ( clip_ammo < clip_max_ammo ) + clip_ammo++; + + player setweaponammoclip( self.name, clip_ammo ); +} + +ondestroyed( attacker ) +{ + playfx( level._effect["tacticalInsertionFizzle"], self.origin ); + self playsound( "dst_tac_insert_break" ); + self.owner maps\mp\gametypes\_globallogic_audio::leaderdialogonplayer( "equipment_destroyed", "item_destroyed" ); + self delete(); +} + +watchshutdown( player ) +{ + self waittill_any( "death", "hacked" ); + pickuptrigger = self.pickuptrigger; + hackertrigger = self.hackertrigger; + hatchetpickuptrigger = self.hatchetpickuptrigger; + enemytrigger = self.enemytrigger; + + if ( isdefined( pickuptrigger ) ) + pickuptrigger delete(); + + if ( isdefined( hackertrigger ) ) + { + if ( isdefined( hackertrigger.progressbar ) ) + { + hackertrigger.progressbar destroyelem(); + hackertrigger.progresstext destroyelem(); + } + + hackertrigger delete(); + } + + if ( isdefined( hatchetpickuptrigger ) ) + hatchetpickuptrigger delete(); + + if ( isdefined( enemytrigger ) ) + enemytrigger delete(); +} + +watchusetrigger( trigger, callback, playersoundonuse, npcsoundonuse ) +{ + self endon( "delete" ); + self endon( "hacked" ); + + while ( true ) + { + trigger waittill( "trigger", player ); + + if ( !isalive( player ) ) + continue; + + if ( !player isonground() ) + continue; + + if ( isdefined( trigger.triggerteam ) && player.pers["team"] != trigger.triggerteam ) + continue; + + if ( isdefined( trigger.triggerteamignore ) && player.team == trigger.triggerteamignore ) + continue; + + if ( isdefined( trigger.claimedby ) && player != trigger.claimedby ) + continue; + + grenade = player.throwinggrenade; + isequipment = isweaponequipment( player getcurrentweapon() ); + + if ( isdefined( isequipment ) && isequipment ) + grenade = 0; + + if ( player usebuttonpressed() && !grenade && !player meleebuttonpressed() ) + { + if ( isdefined( playersoundonuse ) ) + player playlocalsound( playersoundonuse ); + + if ( isdefined( npcsoundonuse ) ) + player playsound( npcsoundonuse ); + + self thread [[ callback ]]( player ); + } + } +} + +createretrievablehint( name, hint ) +{ + retrievehint = spawnstruct(); + retrievehint.name = name; + retrievehint.hint = hint; + level.retrievehints[name] = retrievehint; +} + +createhackerhint( name, hint ) +{ + hackerhint = spawnstruct(); + hackerhint.name = name; + hackerhint.hint = hint; + level.hackerhints[name] = hackerhint; +} + +createdestroyhint( name, hint ) +{ + destroyhint = spawnstruct(); + destroyhint.name = name; + destroyhint.hint = hint; + level.destroyhints[name] = destroyhint; +} + +attachreconmodel( modelname, owner ) +{ + if ( !isdefined( self ) ) + return; + + reconmodel = spawn( "script_model", self.origin ); + reconmodel.angles = self.angles; + reconmodel setmodel( modelname ); + reconmodel.model_name = modelname; + reconmodel linkto( self ); + reconmodel setcontents( 0 ); + reconmodel resetreconmodelvisibility( owner ); + reconmodel thread watchreconmodelfordeath( self ); + reconmodel thread resetreconmodelonevent( "joined_team", owner ); + reconmodel thread resetreconmodelonevent( "player_spawned", owner ); + self.reconmodelentity = reconmodel; +} + +resetreconmodelvisibility( owner ) +{ + if ( !isdefined( self ) ) + return; + + self setinvisibletoall(); + self setforcenocull(); + + if ( !isdefined( owner ) ) + return; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( !level.players[i] hasperk( "specialty_detectexplosive" ) && !level.players[i] hasperk( "specialty_showenemyequipment" ) ) + continue; + + if ( level.players[i].team == "spectator" ) + continue; + + hasreconmodel = 0; + + if ( level.players[i] hasperk( "specialty_detectexplosive" ) ) + { + switch ( self.model_name ) + { + case "t6_wpn_claymore_world_detect": + case "t6_wpn_c4_world_detect": + hasreconmodel = 1; + break; + default: + break; + } + } + + if ( level.players[i] hasperk( "specialty_showenemyequipment" ) ) + { + switch ( self.model_name ) + { + case "t6_wpn_trophy_system_world_detect": + case "t6_wpn_taser_mine_world_detect": + case "t6_wpn_tac_insert_detect": + case "t6_wpn_motion_sensor_world_detect": + case "t6_wpn_claymore_world_detect": + case "t6_wpn_c4_world_detect": + case "t6_wpn_bouncing_betty_world_detect": + case "t5_weapon_scrambler_world_detect": + hasreconmodel = 1; + break; + default: + break; + } + } + + if ( !hasreconmodel ) + continue; + + isenemy = 1; + + if ( level.teambased ) + { + if ( level.players[i].team == owner.team ) + isenemy = 0; + } + else if ( level.players[i] == owner ) + isenemy = 0; + + if ( isenemy ) + self setvisibletoplayer( level.players[i] ); + } +} + +watchreconmodelfordeath( parentent ) +{ + self endon( "death" ); + parentent waittill_any( "death", "hacked" ); + self delete(); +} + +resetreconmodelonevent( eventname, owner ) +{ + self endon( "death" ); + + for (;;) + { + level waittill( eventname, newowner ); + + if ( isdefined( newowner ) ) + owner = newowner; + + self resetreconmodelvisibility( owner ); + } +} + +switch_team( entity, weapon_name, owner ) +{ +/# + self notify( "stop_disarmthink" ); + self endon( "stop_disarmthink" ); + self endon( "death" ); + setdvar( "scr_switch_team", "" ); + + while ( true ) + { + wait 0.5; + devgui_int = getdvarint( "scr_switch_team" ); + + if ( devgui_int != 0 ) + { + team = "autoassign"; + player = maps\mp\gametypes\_dev::getormakebot( team ); + + if ( !isdefined( player ) ) + { + println( "Could not add test client" ); + wait 1; + continue; + } + + entity.owner hackerremoveweapon( entity ); + entity.hacked = 1; + entity setowner( player ); + entity setteam( player.pers["team"] ); + entity.owner = player; + entity notify( "hacked", player ); + level notify( "hacked", entity, player ); + + if ( entity.name == "camera_spike_mp" && isdefined( entity.camerahead ) ) + entity.camerahead notify( "hacked", player ); + + wait 0.05; + + if ( isdefined( player ) && player.sessionstate == "playing" ) + player notify( "grenade_fire", self, self.name ); + + setdvar( "scr_switch_team", "0" ); + } + } +#/ +} diff --git a/MP/Core/maps/mp/gametypes/_weapons.gsc b/MP/Core/maps/mp/gametypes/_weapons.gsc new file mode 100644 index 0000000..0c3de95 --- /dev/null +++ b/MP/Core/maps/mp/gametypes/_weapons.gsc @@ -0,0 +1,2011 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_weapon_utils; +#include maps\mp\_flashgrenades; +#include maps\mp\_empgrenade; +#include maps\mp\_entityheadicons; +#include maps\mp\gametypes\_weaponobjects; +#include maps\mp\_smokegrenade; +#include maps\mp\_heatseekingmissile; +#include maps\mp\_acousticsensor; +#include maps\mp\_sensor_grenade; +#include maps\mp\_tacticalinsertion; +#include maps\mp\_scrambler; +#include maps\mp\_explosive_bolt; +#include maps\mp\_sticky_grenade; +#include maps\mp\_proximity_grenade; +#include maps\mp\_bouncingbetty; +#include maps\mp\_trophy_system; +#include maps\mp\_ballistic_knife; +#include maps\mp\_satchel_charge; +#include maps\mp\_riotshield; +#include maps\mp\_hacker_tool; +#include maps\mp\_bb; +#include maps\mp\gametypes\_class; +#include maps\mp\killstreaks\_killstreak_weapons; +#include maps\mp\gametypes\_weapons; +#include maps\mp\_challenges; +#include maps\mp\killstreaks\_supplydrop; +#include maps\mp\_tabun; +#include maps\mp\_scoreevents; +#include maps\mp\gametypes\_globallogic_utils; +#include maps\mp\killstreaks\_dogs; +#include maps\mp\gametypes\_shellshock; +#include maps\mp\gametypes\_gameobjects; + +init() +{ + precacheitem( "knife_mp" ); + precacheitem( "knife_held_mp" ); + precacheitem( "dogs_mp" ); + precacheitem( "dog_bite_mp" ); + precacheitem( "explosive_bolt_mp" ); + precachemodel( "t6_wpn_claymore_world_detect" ); + precachemodel( "t6_wpn_c4_world_detect" ); + precachemodel( "t5_weapon_scrambler_world_detect" ); + precachemodel( "t6_wpn_tac_insert_detect" ); + precachemodel( "t6_wpn_taser_mine_world_detect" ); + precachemodel( "t6_wpn_motion_sensor_world_detect" ); + precachemodel( "t6_wpn_trophy_system_world_detect" ); + precachemodel( "t6_wpn_bouncing_betty_world_detect" ); + precachemodel( "t6_wpn_tac_insert_world" ); + precachemodel( "t6_wpn_shield_stow_world" ); + precachemodel( "t6_wpn_shield_carry_world" ); + precachemodel( "t5_weapon_camera_head_world" ); + precacheitem( "scavenger_item_mp" ); + precacheitem( "scavenger_item_hack_mp" ); + precacheshader( "hud_scavenger_pickup" ); + precacheshellshock( "default" ); + precacheshellshock( "concussion_grenade_mp" ); + precacheshellshock( "tabun_gas_mp" ); + precacheshellshock( "tabun_gas_nokick_mp" ); + precacheshellshock( "proximity_grenade" ); + precacheshellshock( "proximity_grenade_exit" ); + level.missileentities = []; + level.hackertooltargets = []; + level.missileduddeletedelay = getdvarintdefault( "scr_missileDudDeleteDelay", 3 ); + thread maps\mp\_flashgrenades::main(); + thread maps\mp\_empgrenade::init(); + thread maps\mp\_entityheadicons::init(); + + if ( !isdefined( level.roundstartexplosivedelay ) ) + level.roundstartexplosivedelay = 0; + + level thread onplayerconnect(); + maps\mp\gametypes\_weaponobjects::init(); + maps\mp\_smokegrenade::init(); + maps\mp\_heatseekingmissile::init(); + maps\mp\_acousticsensor::init(); + maps\mp\_sensor_grenade::init(); + maps\mp\_tacticalinsertion::init(); + maps\mp\_scrambler::init(); + maps\mp\_explosive_bolt::init(); + maps\mp\_sticky_grenade::init(); + maps\mp\_proximity_grenade::init(); + maps\mp\_bouncingbetty::init(); + maps\mp\_trophy_system::init(); + maps\mp\_ballistic_knife::init(); + maps\mp\_satchel_charge::init(); + maps\mp\_riotshield::init(); + maps\mp\_hacker_tool::init(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player.usedweapons = 0; + player.lastfiretime = 0; + player.hits = 0; + player scavenger_hud_create(); + player thread onplayerspawned(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self.concussionendtime = 0; + self.scavenged = 0; + self.hasdonecombat = 0; + self.shielddamageblocked = 0; + self thread watchweaponusage(); + self thread watchgrenadeusage(); + self thread watchmissileusage(); + self thread watchweaponchange(); + self thread watchturretuse(); + self thread watchriotshielduse(); + self thread trackweapon(); + self.droppeddeathweapon = undefined; + self.tookweaponfrom = []; + self.pickedupweaponkills = []; + self thread updatestowedweapon(); + } +} + +watchturretuse() +{ + self endon( "death" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "turretownerchange", turret ); + + self thread watchfortowfire( turret ); + } +} + +watchfortowfire( turret ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "turretownerchange" ); + + while ( true ) + { + self waittill( "turret_tow_fire" ); + + self thread watchmissleunlink( turret ); + + self waittill( "turret_tow_unlink" ); + } +} + +watchmissleunlink( turret ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "turretownerchange" ); + + self waittill( "turret_tow_unlink" ); + + self relinktoturret( turret ); +} + +watchweaponchange() +{ + self endon( "death" ); + self endon( "disconnect" ); + self.lastdroppableweapon = self getcurrentweapon(); + self.hitsthismag = []; + weapon = self getcurrentweapon(); + + if ( isprimaryweapon( weapon ) && !isdefined( self.hitsthismag[weapon] ) ) + self.hitsthismag[weapon] = weaponclipsize( weapon ); + + self.lastweaponchange = 0; + + while ( true ) + { + previous_weapon = self getcurrentweapon(); + + self waittill( "weapon_change", newweapon ); + + if ( maydropweapon( newweapon ) ) + { + self.lastdroppableweapon = newweapon; + self.lastweaponchange = gettime(); + } + + if ( newweapon != "none" ) + { + if ( ( isprimaryweapon( newweapon ) || issidearm( newweapon ) ) && !isdefined( self.hitsthismag[newweapon] ) ) + self.hitsthismag[newweapon] = weaponclipsize( newweapon ); + } + + if ( doesweaponreplacespawnweapon( self.spawnweapon, newweapon ) ) + { + self.spawnweapon = newweapon; + self.pers["spawnWeapon"] = newweapon; + } + } +} + +watchriotshielduse() +{ + self endon( "death" ); + self endon( "disconnect" ); + self thread maps\mp\_riotshield::trackriotshield(); + + for (;;) + { + self waittill( "raise_riotshield" ); + + self thread maps\mp\_riotshield::startriotshielddeploy(); + } +} + +updatelastheldweapontimings( newtime ) +{ + if ( isdefined( self.currentweapon ) && isdefined( self.currentweaponstarttime ) ) + { + totaltime = int( ( newtime - self.currentweaponstarttime ) / 1000 ); + + if ( totaltime > 0 ) + { + self addweaponstat( self.currentweapon, "timeUsed", totaltime ); + self.currentweaponstarttime = newtime; + } + } +} + +updateweapontimings( newtime ) +{ + if ( self is_bot() ) + return; + + updatelastheldweapontimings( newtime ); + + if ( !isdefined( self.staticweaponsstarttime ) ) + return; + + totaltime = int( ( newtime - self.staticweaponsstarttime ) / 1000 ); + + if ( totaltime < 0 ) + return; + + self.staticweaponsstarttime = newtime; + + if ( isdefined( self.weapon_array_grenade ) ) + { + for ( i = 0; i < self.weapon_array_grenade.size; i++ ) + self addweaponstat( self.weapon_array_grenade[i], "timeUsed", totaltime ); + } + + if ( isdefined( self.weapon_array_inventory ) ) + { + for ( i = 0; i < self.weapon_array_inventory.size; i++ ) + self addweaponstat( self.weapon_array_inventory[i], "timeUsed", totaltime ); + } + + if ( isdefined( self.killstreak ) ) + { + for ( i = 0; i < self.killstreak.size; i++ ) + { + killstreakweapon = level.menureferenceforkillstreak[self.killstreak[i]]; + + if ( isdefined( killstreakweapon ) ) + self addweaponstat( killstreakweapon, "timeUsed", totaltime ); + } + } + + if ( level.rankedmatch && level.perksenabled ) + { + perksindexarray = []; + specialtys = self.specialty; + + if ( !isdefined( specialtys ) ) + return; + + if ( !isdefined( self.class ) ) + return; + + if ( isdefined( self.class_num ) ) + { + for ( numspecialties = 0; numspecialties < level.maxspecialties; numspecialties++ ) + { + perk = self getloadoutitem( self.class_num, "specialty" + ( numspecialties + 1 ) ); + + if ( perk != 0 ) + perksindexarray[perk] = 1; + } + + perkindexarraykeys = getarraykeys( perksindexarray ); + + for ( i = 0; i < perkindexarraykeys.size; i++ ) + { + if ( perksindexarray[perkindexarraykeys[i]] == 1 ) + self adddstat( "itemStats", perkindexarraykeys[i], "stats", "timeUsed", "statValue", totaltime ); + } + } + } +} + +trackweapon() +{ + currentweapon = self getcurrentweapon(); + currenttime = gettime(); + spawnid = getplayerspawnid( self ); + + while ( true ) + { + event = self waittill_any_return( "weapon_change", "death", "disconnect" ); + newtime = gettime(); + + if ( event == "weapon_change" ) + { + self maps\mp\_bb::commitweapondata( spawnid, currentweapon, currenttime ); + newweapon = self getcurrentweapon(); + + if ( newweapon != "none" && newweapon != currentweapon ) + { + updatelastheldweapontimings( newtime ); + self maps\mp\gametypes\_class::initweaponattachments( newweapon ); + currentweapon = newweapon; + currenttime = newtime; + } + } + else + { + if ( event != "disconnect" && isdefined( self ) ) + { + self maps\mp\_bb::commitweapondata( spawnid, currentweapon, currenttime ); + updateweapontimings( newtime ); + } + + return; + } + } +} + +maydropweapon( weapon ) +{ + if ( level.disableweapondrop == 1 ) + return false; + + if ( weapon == "none" ) + return false; + + if ( ishackweapon( weapon ) ) + return false; + + invtype = weaponinventorytype( weapon ); + + if ( invtype != "primary" ) + return false; + + if ( weapon == "none" ) + return false; + + return true; +} + +dropweaponfordeath( attacker, sweapon, smeansofdeath ) +{ + if ( level.disableweapondrop == 1 ) + return; + + weapon = self.lastdroppableweapon; + + if ( isdefined( self.droppeddeathweapon ) ) + return; + + if ( !isdefined( weapon ) ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: not defined" ); +#/ + return; + } + + if ( weapon == "none" ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: weapon == none" ); +#/ + return; + } + + if ( !self hasweapon( weapon ) ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: don't have it anymore (" + weapon + ")" ); +#/ + return; + } + + if ( !self anyammoforweaponmodes( weapon ) ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: no ammo for weapon modes" ); +#/ + return; + } + + if ( !shoulddroplimitedweapon( weapon, self ) ) + return; + + if ( maps\mp\killstreaks\_killstreak_weapons::isheldkillstreakweapon( weapon ) ) + return; + + clipammo = self getweaponammoclip( weapon ); + stockammo = self getweaponammostock( weapon ); + clip_and_stock_ammo = clipammo + stockammo; + + if ( !clip_and_stock_ammo ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: no ammo" ); +#/ + return; + } + + stockmax = weaponmaxammo( weapon ); + + if ( stockammo > stockmax ) + stockammo = stockmax; + + item = self dropitem( weapon ); + + if ( !isdefined( item ) ) + { +/# + iprintlnbold( "dropItem: was not able to drop weapon " + weapon ); +#/ + return; + } +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "dropped weapon: " + weapon ); +#/ + droplimitedweapon( weapon, self, item ); + self.droppeddeathweapon = 1; + item itemweaponsetammo( clipammo, stockammo ); + item.owner = self; + item.ownersattacker = attacker; + item.sweapon = sweapon; + item.smeansofdeath = smeansofdeath; + item thread watchpickup(); + item thread deletepickupafterawhile(); +} + +dropweapontoground( weapon ) +{ + if ( !isdefined( weapon ) ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: not defined" ); +#/ + return; + } + + if ( weapon == "none" ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: weapon == none" ); +#/ + return; + } + + if ( !self hasweapon( weapon ) ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: don't have it anymore (" + weapon + ")" ); +#/ + return; + } + + if ( !self anyammoforweaponmodes( weapon ) ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: no ammo for weapon modes" ); +#/ + switch ( weapon ) + { + case "mp40_blinged_mp": + case "minigun_mp": + case "m32_mp": + case "m220_tow_mp": + case "m202_flash_mp": + self takeweapon( weapon ); + break; + default: + break; + } + + return; + } + + if ( !shoulddroplimitedweapon( weapon, self ) ) + return; + + clipammo = self getweaponammoclip( weapon ); + stockammo = self getweaponammostock( weapon ); + clip_and_stock_ammo = clipammo + stockammo; + + if ( !clip_and_stock_ammo ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: no ammo" ); +#/ + return; + } + + stockmax = weaponmaxammo( weapon ); + + if ( stockammo > stockmax ) + stockammo = stockmax; + + item = self dropitem( weapon ); +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "dropped weapon: " + weapon ); +#/ + droplimitedweapon( weapon, self, item ); + item itemweaponsetammo( clipammo, stockammo ); + item.owner = self; + item thread watchpickup(); + item thread deletepickupafterawhile(); +} + +deletepickupafterawhile() +{ + self endon( "death" ); + wait 60; + + if ( !isdefined( self ) ) + return; + + self delete(); +} + +getitemweaponname() +{ + classname = self.classname; + assert( getsubstr( classname, 0, 7 ) == "weapon_" ); + weapname = getsubstr( classname, 7 ); + return weapname; +} + +watchpickup() +{ + self endon( "death" ); + weapname = self getitemweaponname(); + + self waittill( "trigger", player, droppeditem ); +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "picked up weapon: " + weapname + ", " + isdefined( self.ownersattacker ) ); +#/ + assert( isdefined( player.tookweaponfrom ) ); + assert( isdefined( player.pickedupweaponkills ) ); + + if ( isdefined( droppeditem ) ) + { + droppedweaponname = droppeditem getitemweaponname(); + + if ( isdefined( player.tookweaponfrom[droppedweaponname] ) ) + { + droppeditem.owner = player.tookweaponfrom[droppedweaponname]; + droppeditem.ownersattacker = player; + player.tookweaponfrom[droppedweaponname] = undefined; + } + + droppeditem thread watchpickup(); + } + + if ( isdefined( self.ownersattacker ) && self.ownersattacker == player ) + { + player.tookweaponfrom[weapname] = spawnstruct(); + player.tookweaponfrom[weapname].previousowner = self.owner; + player.tookweaponfrom[weapname].sweapon = self.sweapon; + player.tookweaponfrom[weapname].smeansofdeath = self.smeansofdeath; + player.pickedupweaponkills[weapname] = 0; + } + else + { + player.tookweaponfrom[weapname] = undefined; + player.pickedupweaponkills[weapname] = undefined; + } +} + +itemremoveammofromaltmodes() +{ + origweapname = self getitemweaponname(); + curweapname = weaponaltweaponname( origweapname ); + + for ( altindex = 1; curweapname != "none" && curweapname != origweapname; altindex++ ) + { + self itemweaponsetammo( 0, 0, altindex ); + curweapname = weaponaltweaponname( curweapname ); + } +} + +dropoffhand() +{ + grenadetypes = []; + + for ( index = 0; index < grenadetypes.size; index++ ) + { + if ( !self hasweapon( grenadetypes[index] ) ) + continue; + + count = self getammocount( grenadetypes[index] ); + + if ( !count ) + continue; + + self dropitem( grenadetypes[index] ); + } +} + +watchweaponusage() +{ + self endon( "death" ); + self endon( "disconnect" ); + level endon( "game_ended" ); + self.usedkillstreakweapon = []; + self.usedkillstreakweapon["minigun_mp"] = 0; + self.usedkillstreakweapon["m32_mp"] = 0; + self.usedkillstreakweapon["m202_flash_mp"] = 0; + self.usedkillstreakweapon["m220_tow_mp"] = 0; + self.usedkillstreakweapon["mp40_blinged_mp"] = 0; + self.killstreaktype = []; + self.killstreaktype["minigun_mp"] = "minigun_mp"; + self.killstreaktype["m32_mp"] = "m32_mp"; + self.killstreaktype["m202_flash_mp"] = "m202_flash_mp"; + self.killstreaktype["m220_tow_mp"] = "m220_tow_mp"; + self.killstreaktype["mp40_blinged_mp"] = "mp40_blinged_drop_mp"; + + for (;;) + { + self waittill( "weapon_fired", curweapon ); + + self.lastfiretime = gettime(); + self.hasdonecombat = 1; + + if ( maps\mp\gametypes\_weapons::isprimaryweapon( curweapon ) || maps\mp\gametypes\_weapons::issidearm( curweapon ) ) + { + if ( isdefined( self.hitsthismag[curweapon] ) ) + self thread updatemagshots( curweapon ); + } + + switch ( weaponclass( curweapon ) ) + { + case "rifle": + if ( curweapon == "crossbow_mp" ) + level.globalcrossbowfired++; + + if ( curweapon == "crossbow_explosive_mp" ) + { + level.globalcrossbowfired++; + self addweaponstat( curweapon, "shots", 1 ); + self thread begingrenadetracking(); + break; + } + case "spread": + case "smg": + case "pistol spread": + case "pistol": + case "mg": + self trackweaponfire( curweapon ); + level.globalshotsfired++; + break; + case "rocketlauncher": + case "grenade": + self addweaponstat( curweapon, "shots", 1 ); + break; + default: + break; + } + + if ( maps\mp\killstreaks\_killstreak_weapons::isheldkillstreakweapon( curweapon ) ) + { + self.pers["held_killstreak_ammo_count"][curweapon]--; + self.usedkillstreakweapon[curweapon] = 1; + } + } +} + +updatemagshots( weaponname ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "updateMagShots_" + weaponname ); + self.hitsthismag[weaponname]--; + wait 0.05; + self.hitsthismag[weaponname] = weaponclipsize( weaponname ); +} + +checkhitsthismag( weaponname ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self notify( "updateMagShots_" + weaponname ); + waittillframeend; + + if ( isdefined( self.hitsthismag[weaponname] ) && self.hitsthismag[weaponname] == 0 ) + { + if ( !sessionmodeiszombiesgame() ) + { + weaponclass = getweaponclass( weaponname ); + maps\mp\_challenges::fullclipnomisses( weaponclass, weaponname ); + } + + self.hitsthismag[weaponname] = weaponclipsize( weaponname ); + } +} + +trackweaponfire( curweapon ) +{ + pixbeginevent( "trackWeaponFire" ); + self trackweaponfirenative( curweapon, 1, self.hits, 1 ); + self maps\mp\_bb::bbaddtostat( "shots", 1 ); + self maps\mp\_bb::bbaddtostat( "hits", self.hits ); + self.hits = 0; + pixendevent(); +} + +checkhit( sweapon ) +{ + switch ( weaponclass( sweapon ) ) + { + case "smg": + case "rifle": + case "pistol": + case "mg": + self.hits++; + break; + case "spread": + case "pistol spread": + self.hits = 1; + break; + default: + break; + } + + waittillframeend; + + if ( isdefined( self ) && isdefined( self.hitsthismag ) && isdefined( self.hitsthismag[sweapon] ) ) + self thread checkhitsthismag( sweapon ); +} + +watchgrenadeusage() +{ + self endon( "death" ); + self endon( "disconnect" ); + self.throwinggrenade = 0; + self.gotpullbacknotify = 0; + self thread beginothergrenadetracking(); + self thread watchforthrowbacks(); + self thread watchforgrenadeduds(); + self thread watchforgrenadelauncherduds(); + + for (;;) + { + self waittill( "grenade_pullback", weaponname ); + + self addweaponstat( weaponname, "shots", 1 ); + self.hasdonecombat = 1; + self.throwinggrenade = 1; + self.gotpullbacknotify = 1; + + if ( weaponname == "satchel_charge_mp" ) + self thread beginsatcheltracking(); + + if ( !maps\mp\killstreaks\_supplydrop::issupplydropweapon( weaponname ) && weaponname != "sensor_grenade_mp" ) + { + self setoffhandvisible( 1 ); + self thread watchoffhandend(); + } + + self thread begingrenadetracking(); + } +} + +watchmissileusage() +{ + self endon( "death" ); + self endon( "disconnect" ); + level endon( "game_ended" ); + + for (;;) + { + self waittill( "missile_fire", missile, weapon_name ); + + self.hasdonecombat = 1; + assert( isdefined( missile ) ); + level.missileentities[level.missileentities.size] = missile; + missile thread watchmissiledeath(); + } +} + +watchmissiledeath() +{ + self waittill( "death" ); + + arrayremovevalue( level.missileentities, self ); +} + +dropweaponstoground( origin, radius ) +{ + weapons = getdroppedweapons(); + + for ( i = 0; i < weapons.size; i++ ) + { + if ( distancesquared( origin, weapons[i].origin ) < radius * radius ) + { + trace = bullettrace( weapons[i].origin, weapons[i].origin + vectorscale( ( 0, 0, -1 ), 2000.0 ), 0, weapons[i] ); + weapons[i].origin = trace["position"]; + } + } +} + +dropgrenadestoground( origin, radius ) +{ + grenades = getentarray( "grenade", "classname" ); + + for ( i = 0; i < grenades.size; i++ ) + { + if ( distancesquared( origin, grenades[i].origin ) < radius * radius ) + grenades[i] launch( vectorscale( ( 1, 1, 1 ), 5.0 ) ); + } +} + +watchgrenadecancel() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "grenade_fire" ); + waittillframeend; + weapon = "none"; + + while ( self isthrowinggrenade() && weapon == "none" ) + self waittill( "weapon_change", weapon ); + + self.throwinggrenade = 0; + self.gotpullbacknotify = 0; + self notify( "grenade_throw_cancelled" ); +} + +watchoffhandend() +{ + self notify( "watchOffhandEnd" ); + self endon( "watchOffhandEnd" ); + + while ( self isusingoffhandequipment() ) + { + msg = self waittill_any_return( "death", "disconnect", "grenade_fire", "weapon_change" ); + + if ( msg == "death" || msg == "disconnect" ) + break; + } + + self setoffhandvisible( 0 ); +} + +isusingoffhandequipment() +{ + if ( self isusingoffhand() ) + { + weapon = self getcurrentoffhand(); + + if ( isweaponequipment( weapon ) ) + return true; + } + + return false; +} + +begingrenadetracking() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "grenade_throw_cancelled" ); + starttime = gettime(); + self thread watchgrenadecancel(); + + self waittill( "grenade_fire", grenade, weaponname ); + + assert( isdefined( grenade ) ); + level.missileentities[level.missileentities.size] = grenade; + grenade thread watchmissiledeath(); + + if ( grenade maps\mp\_utility::ishacked() ) + return; + + bbprint( "mpequipmentuses", "gametime %d spawnid %d weaponname %s", gettime(), getplayerspawnid( self ), weaponname ); + + if ( gettime() - starttime > 1000 ) + grenade.iscooked = 1; + + switch ( weaponname ) + { + case "frag_grenade_mp": + level.globalfraggrenadesfired++; + case "sticky_grenade_mp": + self addweaponstat( weaponname, "used", 1 ); + case "explosive_bolt_mp": + grenade.originalowner = self; + break; + case "satchel_charge_mp": + level.globalsatchelchargefired++; + break; + } + + if ( weaponname == "sticky_grenade_mp" || weaponname == "frag_grenade_mp" ) + { + grenade setteam( self.pers["team"] ); + grenade setowner( self ); + } + + self.throwinggrenade = 0; +} + +beginothergrenadetracking() +{ + self notify( "grenadeTrackingStart" ); + self endon( "grenadeTrackingStart" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "grenade_fire", grenade, weaponname, parent ); + + if ( grenade maps\mp\_utility::ishacked() ) + continue; + + switch ( weaponname ) + { + case "flash_grenade_mp": + break; + case "concussion_grenade_mp": + break; + case "willy_pete_mp": + grenade thread maps\mp\_smokegrenade::watchsmokegrenadedetonation( self ); + break; + case "tabun_gas_mp": + grenade thread maps\mp\_tabun::watchtabungrenadedetonation( self ); + break; + case "sticky_grenade_mp": + grenade thread checkstucktoplayer( 1, 1, weaponname ); + grenade thread checkstucktoshield(); + break; + case "satchel_charge_mp": + case "c4_mp": + grenade thread checkstucktoplayer( 1, 0, weaponname ); + break; + case "proximity_grenade_mp": + grenade thread checkstucktoshield(); + grenade thread maps\mp\_proximity_grenade::watchproximitygrenadehitplayer( self ); + break; + case "tactical_insertion_mp": + grenade thread maps\mp\_tacticalinsertion::watch( self ); + break; + case "scrambler_mp": + break; + case "explosive_bolt_mp": + grenade.ownerweaponatlaunch = self.currentweapon; + grenade.owneradsatlaunch = self playerads() == 1 ? 1 : 0; + grenade thread maps\mp\_explosive_bolt::watch_bolt_detonation( self ); + grenade thread checkstucktoplayer( 1, 0, weaponname ); + grenade thread checkstucktoshield(); + break; + case "hatchet_mp": + grenade.lastweaponbeforetoss = self getlastweapon(); + grenade thread checkhatchetbounce(); + grenade thread checkstucktoplayer( 0, 0, weaponname ); + self addweaponstat( weaponname, "used", 1 ); + break; + case "emp_grenade_mp": + grenade thread maps\mp\_empgrenade::watchempexplosion( self, weaponname ); + break; + } + } +} + +checkstucktoplayer( deleteonteamchange, awardscoreevent, weaponname ) +{ + self endon( "death" ); + + self waittill( "stuck_to_player", player ); + + if ( isdefined( player ) ) + { + if ( deleteonteamchange ) + self thread stucktoplayerteamchange( player ); + + if ( awardscoreevent && isdefined( self.originalowner ) ) + { + if ( self.originalowner isenemyplayer( player ) ) + maps\mp\_scoreevents::processscoreevent( "stick_explosive_kill", self.originalowner, player, weaponname ); + } + + self.stucktoplayer = player; + } +} + +checkstucktoshield() +{ + self endon( "death" ); + + self waittill( "stuck_to_shield", other, owner ); + + other maps\mp\_riotshield::watchriotshieldstuckentitydeath( self, owner ); +} + +checkhatchetbounce() +{ + self endon( "stuck_to_player" ); + self endon( "death" ); + + self waittill( "grenade_bounce" ); + + self.bounced = 1; +} + +stucktoplayerteamchange( player ) +{ + self endon( "death" ); + player endon( "disconnect" ); + originalteam = player.pers["team"]; + + while ( true ) + { + player waittill( "joined_team" ); + + if ( player.pers["team"] != originalteam ) + { + self detonate(); + return; + } + } +} + +beginsatcheltracking() +{ + self endon( "death" ); + self endon( "disconnect" ); + self waittill_any( "grenade_fire", "weapon_change" ); + self.throwinggrenade = 0; +} + +watchforthrowbacks() +{ + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "grenade_fire", grenade, weapname ); + + if ( self.gotpullbacknotify ) + { + self.gotpullbacknotify = 0; + continue; + } + + if ( !issubstr( weapname, "frag_" ) ) + continue; + + grenade.threwback = 1; + grenade.originalowner = self; + } +} + +waitanddeletedud( waittime ) +{ + self endon( "death" ); + wait( waittime ); + + if ( isdefined( self ) ) + self delete(); +} + +makeallboltsdud() +{ + grenades = getentarray( "grenade", "classname" ); + + for ( i = 0; i < grenades.size; i++ ) + { + if ( grenades[i].model == "t5_weapon_crossbow_bolt" ) + { + grenades[i] makegrenadedud(); + + if ( !isdefined( grenades[i].isdud ) ) + grenades[i] thread waitanddeletedud( level.missileduddeletedelay ); + + grenades[i].isdud = 1; + } + } +} + +turngrenadeintoadud( weapname, isthrowngrenade, player ) +{ + if ( level.roundstartexplosivedelay >= maps\mp\gametypes\_globallogic_utils::gettimepassed() / 1000 ) + { + if ( isweapondisallowedatmatchstart( weapname ) || issubstr( weapname, "gl_" ) ) + { + timeleft = int( level.roundstartexplosivedelay - maps\mp\gametypes\_globallogic_utils::gettimepassed() / 1000 ); + + if ( !timeleft ) + timeleft = 1; + + if ( weapname == "explosive_bolt_mp" ) + { + self makeallboltsdud(); + player iprintlnbold( &"MP_LAUNCHER_UNAVAILABLE_FOR_N", " " + timeleft + " ", &"EXE_SECONDS" ); + } + else + { + if ( isthrowngrenade ) + player iprintlnbold( &"MP_GRENADE_UNAVAILABLE_FOR_N", " " + timeleft + " ", &"EXE_SECONDS" ); + else + player iprintlnbold( &"MP_LAUNCHER_UNAVAILABLE_FOR_N", " " + timeleft + " ", &"EXE_SECONDS" ); + + self makegrenadedud(); + } + } + } +} + +watchforgrenadeduds() +{ + self endon( "spawned_player" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "grenade_fire", grenade, weapname ); + + grenade turngrenadeintoadud( weapname, 1, self ); + } +} + +watchforgrenadelauncherduds() +{ + self endon( "spawned_player" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "grenade_launcher_fire", grenade, weapname ); + + grenade turngrenadeintoadud( weapname, 0, self ); + assert( isdefined( grenade ) ); + level.missileentities[level.missileentities.size] = grenade; + grenade thread watchmissiledeath(); + } +} + +getdamageableents( pos, radius, dolos, startradius ) +{ + ents = []; + + if ( !isdefined( dolos ) ) + dolos = 0; + + if ( !isdefined( startradius ) ) + startradius = 0; + + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + if ( !isalive( players[i] ) || players[i].sessionstate != "playing" ) + continue; + + playerpos = players[i].origin + vectorscale( ( 0, 0, 1 ), 32.0 ); + distsq = distancesquared( pos, playerpos ); + + if ( distsq < radius * radius && ( !dolos || weapondamagetracepassed( pos, playerpos, startradius, undefined ) ) ) + { + newent = spawnstruct(); + newent.isplayer = 1; + newent.isadestructable = 0; + newent.isadestructible = 0; + newent.isactor = 0; + newent.entity = players[i]; + newent.damagecenter = playerpos; + ents[ents.size] = newent; + } + } + + grenades = getentarray( "grenade", "classname" ); + + for ( i = 0; i < grenades.size; i++ ) + { + entpos = grenades[i].origin; + distsq = distancesquared( pos, entpos ); + + if ( distsq < radius * radius && ( !dolos || weapondamagetracepassed( pos, entpos, startradius, grenades[i] ) ) ) + { + newent = spawnstruct(); + newent.isplayer = 0; + newent.isadestructable = 0; + newent.isadestructible = 0; + newent.isactor = 0; + newent.entity = grenades[i]; + newent.damagecenter = entpos; + ents[ents.size] = newent; + } + } + + destructibles = getentarray( "destructible", "targetname" ); + + for ( i = 0; i < destructibles.size; i++ ) + { + entpos = destructibles[i].origin; + distsq = distancesquared( pos, entpos ); + + if ( distsq < radius * radius && ( !dolos || weapondamagetracepassed( pos, entpos, startradius, destructibles[i] ) ) ) + { + newent = spawnstruct(); + newent.isplayer = 0; + newent.isadestructable = 0; + newent.isadestructible = 1; + newent.isactor = 0; + newent.entity = destructibles[i]; + newent.damagecenter = entpos; + ents[ents.size] = newent; + } + } + + destructables = getentarray( "destructable", "targetname" ); + + for ( i = 0; i < destructables.size; i++ ) + { + entpos = destructables[i].origin; + distsq = distancesquared( pos, entpos ); + + if ( distsq < radius * radius && ( !dolos || weapondamagetracepassed( pos, entpos, startradius, destructables[i] ) ) ) + { + newent = spawnstruct(); + newent.isplayer = 0; + newent.isadestructable = 1; + newent.isadestructible = 0; + newent.isactor = 0; + newent.entity = destructables[i]; + newent.damagecenter = entpos; + ents[ents.size] = newent; + } + } + + dogs = maps\mp\killstreaks\_dogs::dog_manager_get_dogs(); + + foreach ( dog in dogs ) + { + if ( !isalive( dog ) ) + continue; + + entpos = dog.origin; + distsq = distancesquared( pos, entpos ); + + if ( distsq < radius * radius && ( !dolos || weapondamagetracepassed( pos, entpos, startradius, dog ) ) ) + { + newent = spawnstruct(); + newent.isplayer = 0; + newent.isadestructable = 0; + newent.isadestructible = 0; + newent.isactor = 1; + newent.entity = dog; + newent.damagecenter = entpos; + ents[ents.size] = newent; + } + } + + return ents; +} + +weapondamagetracepassed( from, to, startradius, ignore ) +{ + trace = weapondamagetrace( from, to, startradius, ignore ); + return trace["fraction"] == 1; +} + +weapondamagetrace( from, to, startradius, ignore ) +{ + midpos = undefined; + diff = to - from; + + if ( lengthsquared( diff ) < startradius * startradius ) + midpos = to; + + dir = vectornormalize( diff ); + midpos = from + ( dir[0] * startradius, dir[1] * startradius, dir[2] * startradius ); + trace = bullettrace( midpos, to, 0, ignore ); + + if ( getdvarint( _hash_A1C40B1 ) != 0 ) + { + if ( trace["fraction"] == 1 ) + thread debugline( midpos, to, ( 1, 1, 1 ) ); + else + { + thread debugline( midpos, trace["position"], ( 1, 0.9, 0.8 ) ); + thread debugline( trace["position"], to, ( 1, 0.4, 0.3 ) ); + } + } + + return trace; +} + +damageent( einflictor, eattacker, idamage, smeansofdeath, sweapon, damagepos, damagedir ) +{ + if ( self.isplayer ) + { + self.damageorigin = damagepos; + self.entity thread [[ level.callbackplayerdamage ]]( einflictor, eattacker, idamage, 0, smeansofdeath, sweapon, damagepos, damagedir, "none", 0, 0 ); + } + else if ( self.isactor ) + { + self.damageorigin = damagepos; + self.entity thread [[ level.callbackactordamage ]]( einflictor, eattacker, idamage, 0, smeansofdeath, sweapon, damagepos, damagedir, "none", 0, 0 ); + } + else if ( self.isadestructible ) + { + self.damageorigin = damagepos; + self.entity dodamage( idamage, damagepos, eattacker, einflictor, 0, smeansofdeath, 0, sweapon ); + } + else + { + if ( self.isadestructable && ( sweapon == "claymore_mp" || sweapon == "airstrike_mp" ) ) + return; + + self.entity damage_notify_wrapper( idamage, eattacker, ( 0, 0, 0 ), ( 0, 0, 0 ), "mod_explosive", "", "" ); + } +} + +debugline( a, b, color ) +{ +/# + for ( i = 0; i < 600; i++ ) + { + line( a, b, color ); + wait 0.05; + } +#/ +} + +onweapondamage( eattacker, einflictor, sweapon, meansofdeath, damage ) +{ + self endon( "death" ); + self endon( "disconnect" ); + + switch ( sweapon ) + { + case "concussion_grenade_mp": + radius = 512; + + if ( self == eattacker ) + radius *= 0.5; + + scale = 1 - distance( self.origin, einflictor.origin ) / radius; + + if ( scale < 0 ) + scale = 0; + + time = 2 + 4 * scale; + wait 0.05; + + if ( self hasperk( "specialty_stunprotection" ) ) + time *= 0.1; + + self thread playconcussionsound( time ); + + if ( self mayapplyscreeneffect() ) + self shellshock( "concussion_grenade_mp", time, 0 ); + + self.concussionendtime = gettime() + time * 1000; + self.lastconcussedby = eattacker; + break; + case "proximity_grenade_mp": + self proximitygrenadedamageplayer( eattacker, einflictor ); + break; + default: + maps\mp\gametypes\_shellshock::shellshockondamage( meansofdeath, damage ); + break; + } +} + +playconcussionsound( duration ) +{ + self endon( "death" ); + self endon( "disconnect" ); + concussionsound = spawn( "script_origin", ( 0, 0, 1 ) ); + concussionsound.origin = self.origin; + concussionsound linkto( self ); + concussionsound thread deleteentonownerdeath( self ); + concussionsound playsound( "" ); + concussionsound playloopsound( "" ); + + if ( duration > 0.5 ) + wait( duration - 0.5 ); + + concussionsound playsound( "" ); + concussionsound stoploopsound( 0.5 ); + wait 0.5; + concussionsound notify( "delete" ); + concussionsound delete(); +} + +deleteentonownerdeath( owner ) +{ + self endon( "delete" ); + + owner waittill( "death" ); + + self delete(); +} + +monitor_dog_special_grenades() +{ + self endon( "death" ); + + while ( true ) + { + self waittill( "damage", damage, attacker, direction_vec, point, type, modelname, tagname, partname, weaponname, idflags ); + + if ( isflashorstunweapon( weaponname ) ) + { + damage_area = spawn( "trigger_radius", self.origin, 0, 128, 128 ); + attacker thread maps\mp\killstreaks\_dogs::flash_dogs( damage_area ); + wait 0.05; + damage_area delete(); + } + } +} + +isprimaryweapon( weaponname ) +{ + return isdefined( level.primary_weapon_array[weaponname] ); +} + +issidearm( weaponname ) +{ + return isdefined( level.side_arm_array[weaponname] ); +} + +isinventory( weaponname ) +{ + return isdefined( level.inventory_array[weaponname] ); +} + +isgrenade( weaponname ) +{ + return isdefined( level.grenade_array[weaponname] ); +} + +isexplosivebulletweapon( weaponname ) +{ + if ( weaponname == "chopper_minigun_mp" || weaponname == "cobra_20mm_mp" || weaponname == "littlebird_guard_minigun_mp" || weaponname == "cobra_20mm_comlink_mp" ) + return true; + + return false; +} + +getweaponclass_array( current ) +{ + if ( isprimaryweapon( current ) ) + return level.primary_weapon_array; + else if ( issidearm( current ) ) + return level.side_arm_array; + else if ( isgrenade( current ) ) + return level.grenade_array; + else + return level.inventory_array; +} + +updatestowedweapon() +{ + self endon( "spawned" ); + self endon( "killed_player" ); + self endon( "disconnect" ); + self.tag_stowed_back = undefined; + self.tag_stowed_hip = undefined; + team = self.pers["team"]; + class = self.pers["class"]; + + while ( true ) + { + self waittill( "weapon_change", newweapon ); + + if ( self ismantling() ) + continue; + + currentstowed = self getstowedweapon(); + hasstowed = 0; + self.weapon_array_primary = []; + self.weapon_array_sidearm = []; + self.weapon_array_grenade = []; + self.weapon_array_inventory = []; + weaponslist = self getweaponslist(); + + for ( idx = 0; idx < weaponslist.size; idx++ ) + { + switch ( weaponslist[idx] ) + { + case "minigun_mp": + case "m32_mp": + continue; + default: + break; + } + + if ( !hasstowed || currentstowed == weaponslist[idx] ) + { + currentstowed = weaponslist[idx]; + hasstowed = 1; + } + + if ( isprimaryweapon( weaponslist[idx] ) ) + { + self.weapon_array_primary[self.weapon_array_primary.size] = weaponslist[idx]; + continue; + } + + if ( issidearm( weaponslist[idx] ) ) + { + self.weapon_array_sidearm[self.weapon_array_sidearm.size] = weaponslist[idx]; + continue; + } + + if ( isgrenade( weaponslist[idx] ) ) + { + self.weapon_array_grenade[self.weapon_array_grenade.size] = weaponslist[idx]; + continue; + } + + if ( isinventory( weaponslist[idx] ) ) + { + self.weapon_array_inventory[self.weapon_array_inventory.size] = weaponslist[idx]; + continue; + } + + if ( isweaponprimary( weaponslist[idx] ) ) + self.weapon_array_primary[self.weapon_array_primary.size] = weaponslist[idx]; + } + + if ( newweapon != "none" || !hasstowed ) + { + detach_all_weapons(); + stow_on_back(); + stow_on_hip(); + } + } +} + +forcestowedweaponupdate() +{ + detach_all_weapons(); + stow_on_back(); + stow_on_hip(); +} + +detachcarryobjectmodel() +{ + if ( isdefined( self.carryobject ) && isdefined( self.carryobject maps\mp\gametypes\_gameobjects::getvisiblecarriermodel() ) ) + { + if ( isdefined( self.tag_stowed_back ) ) + { + self detach( self.tag_stowed_back, "tag_stowed_back" ); + self.tag_stowed_back = undefined; + } + } +} + +detach_all_weapons() +{ + if ( isdefined( self.tag_stowed_back ) ) + { + clear_weapon = 1; + + if ( isdefined( self.carryobject ) ) + { + carriermodel = self.carryobject maps\mp\gametypes\_gameobjects::getvisiblecarriermodel(); + + if ( isdefined( carriermodel ) && carriermodel == self.tag_stowed_back ) + { + self detach( self.tag_stowed_back, "tag_stowed_back" ); + clear_weapon = 0; + } + } + + if ( clear_weapon ) + self clearstowedweapon(); + + self.tag_stowed_back = undefined; + } + + if ( isdefined( self.tag_stowed_hip ) ) + { + detach_model = getweaponmodel( self.tag_stowed_hip ); + self detach( detach_model, "tag_stowed_hip_rear" ); + self.tag_stowed_hip = undefined; + } +} + +non_stowed_weapon( weapon ) +{ + if ( self hasweapon( "knife_ballistic_mp" ) && weapon != "knife_ballistic_mp" ) + return true; + + if ( self hasweapon( "knife_held_mp" ) && weapon != "knife_held_mp" ) + return true; + + return false; +} + +stow_on_back( current ) +{ + current = self getcurrentweapon(); + currentalt = self getcurrentweaponaltweapon(); + self.tag_stowed_back = undefined; + weaponoptions = 0; + index_weapon = ""; + + if ( isdefined( self.carryobject ) && isdefined( self.carryobject maps\mp\gametypes\_gameobjects::getvisiblecarriermodel() ) ) + { + self.tag_stowed_back = self.carryobject maps\mp\gametypes\_gameobjects::getvisiblecarriermodel(); + self attach( self.tag_stowed_back, "tag_stowed_back", 1 ); + return; + } + else if ( non_stowed_weapon( current ) ) + return; + else if ( current != "none" ) + { + for ( idx = 0; idx < self.weapon_array_primary.size; idx++ ) + { + temp_index_weapon = self.weapon_array_primary[idx]; + assert( isdefined( temp_index_weapon ), "Primary weapon list corrupted." ); + + if ( temp_index_weapon == current ) + continue; + + if ( temp_index_weapon == currentalt ) + continue; + + index_weapon = temp_index_weapon; + assert( isdefined( self.curclass ), "Player missing current class" ); + + if ( issubstr( index_weapon, self.pers["primaryWeapon"] ) && issubstr( self.curclass, "CUSTOM" ) ) + self.tag_stowed_back = getweaponmodel( index_weapon ); + else + { + stowedmodelindex = getweaponstowedmodel( index_weapon ); + self.tag_stowed_back = getweaponmodel( index_weapon, stowedmodelindex ); + } + + if ( issubstr( self.curclass, "CUSTOM" ) ) + weaponoptions = self calcweaponoptions( self.class_num, 0 ); + } + } + + if ( !isdefined( self.tag_stowed_back ) ) + return; + + self setstowedweapon( index_weapon ); +} + +stow_on_hip() +{ + current = self getcurrentweapon(); + self.tag_stowed_hip = undefined; + + for ( idx = 0; idx < self.weapon_array_inventory.size; idx++ ) + { + if ( self.weapon_array_inventory[idx] == current ) + continue; + + if ( !self getweaponammostock( self.weapon_array_inventory[idx] ) ) + continue; + + self.tag_stowed_hip = self.weapon_array_inventory[idx]; + } + + if ( !isdefined( self.tag_stowed_hip ) ) + return; + + if ( self.tag_stowed_hip == "satchel_charge_mp" || self.tag_stowed_hip == "claymore_mp" || self.tag_stowed_hip == "bouncingbetty_mp" ) + { + self.tag_stowed_hip = undefined; + return; + } + + weapon_model = getweaponmodel( self.tag_stowed_hip ); + self attach( weapon_model, "tag_stowed_hip_rear", 1 ); +} + +stow_inventory( inventories, current ) +{ + if ( isdefined( self.inventory_tag ) ) + { + detach_model = getweaponmodel( self.inventory_tag ); + self detach( detach_model, "tag_stowed_hip_rear" ); + self.inventory_tag = undefined; + } + + if ( !isdefined( inventories[0] ) || self getweaponammostock( inventories[0] ) == 0 ) + return; + + if ( inventories[0] != current ) + { + self.inventory_tag = inventories[0]; + weapon_model = getweaponmodel( self.inventory_tag ); + self attach( weapon_model, "tag_stowed_hip_rear", 1 ); + } +} + +weapons_get_dvar_int( dvar, def ) +{ + return int( weapons_get_dvar( dvar, def ) ); +} + +weapons_get_dvar( dvar, def ) +{ + if ( getdvar( dvar ) != "" ) + return getdvarfloat( dvar ); + else + { + setdvar( dvar, def ); + return def; + } +} + +player_is_driver() +{ + if ( !isalive( self ) ) + return false; + + if ( self isremotecontrolling() ) + return false; + + vehicle = self getvehicleoccupied(); + + if ( isdefined( vehicle ) ) + { + seat = vehicle getoccupantseat( self ); + + if ( isdefined( seat ) && seat == 0 ) + return true; + } + + return false; +} + +loadout_get_offhand_weapon( stat ) +{ + if ( isdefined( level.givecustomloadout ) ) + return "weapon_null_mp"; + + assert( isdefined( self.class_num ) ); + + if ( isdefined( self.class_num ) ) + { + index = self maps\mp\gametypes\_class::getloadoutitemfromddlstats( self.class_num, stat ); + + if ( isdefined( level.tbl_weaponids[index] ) && isdefined( level.tbl_weaponids[index]["reference"] ) ) + return level.tbl_weaponids[index]["reference"] + "_mp"; + } + + return "weapon_null_mp"; +} + +loadout_get_offhand_count( stat ) +{ + count = 0; + + if ( isdefined( level.givecustomloadout ) ) + return 0; + + assert( isdefined( self.class_num ) ); + + if ( isdefined( self.class_num ) ) + count = self maps\mp\gametypes\_class::getloadoutitemfromddlstats( self.class_num, stat ); + + return count; +} + +scavenger_think() +{ + self endon( "death" ); + + self waittill( "scavenger", player ); + + primary_weapons = player getweaponslistprimaries(); + offhand_weapons_and_alts = array_exclude( player getweaponslist( 1 ), primary_weapons ); + arrayremovevalue( offhand_weapons_and_alts, "knife_mp" ); + offhand_weapons_and_alts = array_reverse( offhand_weapons_and_alts ); + player playsound( "fly_equipment_pickup_npc" ); + player playlocalsound( "fly_equipment_pickup_plr" ); + player.scavenger_icon.alpha = 1; + player.scavenger_icon fadeovertime( 2.5 ); + player.scavenger_icon.alpha = 0; + loadout_primary = player loadout_get_offhand_weapon( "primarygrenade" ); + loadout_primary_count = player loadout_get_offhand_count( "primarygrenadecount" ); + loadout_secondary = player loadout_get_offhand_weapon( "specialgrenade" ); + loadout_secondary_count = player loadout_get_offhand_count( "specialgrenadeCount" ); + + for ( i = 0; i < offhand_weapons_and_alts.size; i++ ) + { + weapon = offhand_weapons_and_alts[i]; + + if ( ishackweapon( weapon ) ) + continue; + + switch ( weapon ) + { + case "satchel_charge_mp": + if ( player maps\mp\gametypes\_weaponobjects::anyobjectsinworld( weapon ) ) + break; + case "sticky_grenade_mp": + case "hatchet_mp": + case "frag_grenade_mp": + case "claymore_mp": + case "bouncingbetty_mp": + if ( isdefined( player.grenadetypeprimarycount ) && player.grenadetypeprimarycount < 1 ) + break; + case "willy_pete_mp": + case "trophy_system_mp": + case "tabun_gas_mp": + case "sensor_grenade_mp": + case "proximity_grenade_mp": + case "pda_hack_mp": + case "nightingale_mp": + case "flash_grenade_mp": + case "emp_grenade_mp": + case "concussion_grenade_mp": + if ( isdefined( player.grenadetypesecondarycount ) && player.grenadetypesecondarycount < 1 ) + break; + + maxammo = weaponmaxammo( weapon ); + stock = player getweaponammostock( weapon ); + + if ( isdefined( level.customloadoutscavenge ) ) + maxammo = self [[ level.customloadoutscavenge ]]( weapon ); + else if ( weapon == loadout_primary ) + maxammo = loadout_primary_count; + else if ( weapon == loadout_secondary ) + maxammo = loadout_secondary_count; + + if ( stock < maxammo ) + { + ammo = stock + 1; + + if ( ammo > maxammo ) + ammo = maxammo; + + player setweaponammostock( weapon, ammo ); + player.scavenged = 1; + player thread maps\mp\_challenges::scavengedgrenade(); + } + + break; + } + } + + for ( i = 0; i < primary_weapons.size; i++ ) + { + weapon = primary_weapons[i]; + + if ( ishackweapon( weapon ) ) + continue; + + stock = player getweaponammostock( weapon ); + start = player getfractionstartammo( weapon ); + clip = weaponclipsize( weapon ); + clip *= getdvarfloatdefault( "scavenger_clip_multiplier", 1 ); + clip = int( clip ); + maxammo = weaponmaxammo( weapon ); + + if ( stock < maxammo - clip ) + { + ammo = stock + clip; + player setweaponammostock( weapon, ammo ); + player.scavenged = 1; + exit_early = 1; + continue; + } + + player setweaponammostock( weapon, maxammo ); + player.scavenged = 1; + exit_early = 1; + } +} + +scavenger_hud_create() +{ + if ( level.wagermatch ) + return; + + self.scavenger_icon = newclienthudelem( self ); + self.scavenger_icon.horzalign = "center"; + self.scavenger_icon.vertalign = "middle"; + self.scavenger_icon.alpha = 0; + width = 48; + height = 24; + + if ( level.splitscreen ) + { + width = int( width * 0.5 ); + height = int( height * 0.5 ); + } + + self.scavenger_icon.x = width * -1 / 2; + self.scavenger_icon.y = 16; + self.scavenger_icon setshader( "hud_scavenger_pickup", width, height ); +} + +dropscavengerfordeath( attacker ) +{ + if ( sessionmodeiszombiesgame() ) + return; + + if ( level.wagermatch ) + return; + + if ( !isdefined( attacker ) ) + return; + + if ( attacker == self ) + return; + + if ( level.gametype == "hack" ) + item = self dropscavengeritem( "scavenger_item_hack_mp" ); + else if ( isplayer( attacker ) && attacker hasperk( "specialty_scavenger" ) ) + item = self dropscavengeritem( "scavenger_item_mp" ); + else + return; + + item thread scavenger_think(); +} + +addlimitedweapon( weapon_name, owner, num_drops ) +{ + limited_info = spawnstruct(); + limited_info.weapon = weapon_name; + limited_info.drops = num_drops; + owner.limited_info = limited_info; +} + +shoulddroplimitedweapon( weapon_name, owner ) +{ + limited_info = owner.limited_info; + + if ( !isdefined( limited_info ) ) + return true; + + if ( limited_info.weapon != weapon_name ) + return true; + + if ( limited_info.drops <= 0 ) + return false; + + return true; +} + +droplimitedweapon( weapon_name, owner, item ) +{ + limited_info = owner.limited_info; + + if ( !isdefined( limited_info ) ) + return; + + if ( limited_info.weapon != weapon_name ) + return; + + limited_info.drops -= 1; + owner.limited_info = undefined; + item thread limitedpickup( limited_info ); +} + +limitedpickup( limited_info ) +{ + self endon( "death" ); + + self waittill( "trigger", player, item ); + + if ( !isdefined( item ) ) + return; + + player.limited_info = limited_info; +} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/conf.gsc b/MP/Core/maps/mp/gametypes/conf.gsc similarity index 97% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/conf.gsc rename to MP/Core/maps/mp/gametypes/conf.gsc index d5b14b8..715b674 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/conf.gsc +++ b/MP/Core/maps/mp/gametypes/conf.gsc @@ -1,5 +1,18 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; +#include common_scripts\utility; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_callbacksetup; +#include maps\mp\gametypes\_gameobjects; +#include maps\mp\gametypes\_spawnlogic; +#include maps\mp\gametypes\_spawning; +#include maps\mp\gametypes\_globallogic_score; +#include maps\mp\gametypes\_objpoints; +#include maps\mp\gametypes\_globallogic_audio; +#include maps\mp\_scoreevents; +#include maps\mp\gametypes\_hostmigration; main() { @@ -277,7 +290,6 @@ onuse( player ) assert( isdefined( player.lastkillconfirmedtime ) ); assert( isdefined( player.lastkillconfirmedcount ) ); #/ - if ( self.attacker != player ) self.attacker thread onpickup( "teammate_kill_confirmed", splash ); diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/ctf.gsc b/MP/Core/maps/mp/gametypes/ctf.gsc similarity index 98% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/ctf.gsc rename to MP/Core/maps/mp/gametypes/ctf.gsc index c07d07d..8dbbfba 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/ctf.gsc +++ b/MP/Core/maps/mp/gametypes/ctf.gsc @@ -1,5 +1,23 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_callbacksetup; +#include maps\mp\gametypes\_globallogic_audio; +#include maps\mp\teams\_teams; +#include maps\mp\gametypes\_globallogic_score; +#include maps\mp\gametypes\_gameobjects; +#include maps\mp\gametypes\_spawning; +#include maps\mp\gametypes\_spawnlogic; +#include maps\mp\gametypes\_hud_message; +#include maps\mp\gametypes\_globallogic_utils; +#include maps\mp\_popups; +#include maps\mp\_scoreevents; +#include maps\mp\_demo; +#include maps\mp\_challenges; +#include maps\mp\gametypes\_globallogic_defaults; +#include maps\mp\gametypes\_rank; main() { @@ -113,7 +131,6 @@ onstartgametype() { if ( !isdefined( game["switchedsides"] ) ) game["switchedsides"] = 0; - /# setdebugsideswitch( game["switchedsides"] ); #/ @@ -334,9 +351,7 @@ onspawnplayer( predictedspawn ) else spawnpoint = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam( level.spawn_allies ); -/# assert( isdefined( spawnpoint ) ); -#/ if ( predictedspawn ) self predictspawnpoint( spawnpoint.origin, spawnpoint.angles ); @@ -1027,14 +1042,10 @@ returnflaghudelems( time ) self endon( "picked_up" ); level endon( "game_ended" ); ownerteam = self maps\mp\gametypes\_gameobjects::getownerteam(); -/# assert( !level.returnmessageelems["axis"][ownerteam].alpha ); -#/ level.returnmessageelems["axis"][ownerteam].alpha = 1; level.returnmessageelems["axis"][ownerteam] settimer( time ); -/# assert( !level.returnmessageelems["allies"][ownerteam].alpha ); -#/ level.returnmessageelems["allies"][ownerteam].alpha = 1; level.returnmessageelems["allies"][ownerteam] settimer( time ); diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/dem.gsc b/MP/Core/maps/mp/gametypes/dem.gsc similarity index 98% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/dem.gsc rename to MP/Core/maps/mp/gametypes/dem.gsc index 8159bf3..fee761c 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/dem.gsc +++ b/MP/Core/maps/mp/gametypes/dem.gsc @@ -1,5 +1,26 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_callbacksetup; +#include maps\mp\gametypes\_globallogic_defaults; +#include maps\mp\gametypes\_rank; +#include maps\mp\gametypes\_gameobjects; +#include maps\mp\gametypes\_spawning; +#include maps\mp\gametypes\_spawnlogic; +#include maps\mp\_medals; +#include maps\mp\_scoreevents; +#include maps\mp\gametypes\_spectating; +#include maps\mp\gametypes\_globallogic_score; +#include maps\mp\gametypes\_globallogic_audio; +#include maps\mp\gametypes\_globallogic_utils; +#include maps\mp\gametypes\_battlechatter_mp; +#include maps\mp\_demo; +#include maps\mp\_popups; +#include maps\mp\_challenges; +#include maps\mp\gametypes\_hostmigration; main() { @@ -338,9 +359,7 @@ onspawnplayer( predictedspawn ) } spawnpoints = maps\mp\gametypes\_spawnlogic::getspawnpointarray( spawnpointname ); -/# assert( spawnpoints.size ); -#/ spawnpoint = maps\mp\gametypes\_spawnlogic::getspawnpoint_random( spawnpoints ); if ( predictedspawn ) @@ -716,9 +735,7 @@ bombs() level.bombzones[level.bombzones.size] = bombzone; bombzone.bombdefusetrig = defusetrig; -/# assert( isdefined( bombzone.bombdefusetrig ) ); -#/ bombzone.bombdefusetrig.origin += vectorscale( ( 0, 0, -1 ), 10000.0 ); bombzone.bombdefusetrig.label = scriptlabel; dem_enemy_base_influencer_score = level.spawnsystem.dem_enemy_base_influencer_score; @@ -780,9 +797,7 @@ onbeginuse( player ) } } -/# assert( isdefined( closestbomb ) ); -#/ player.defusing = closestbomb; closestbomb hide(); } @@ -1129,9 +1144,7 @@ waitlongdurationwithbombtimeupdate( whichbomb, duration ) if ( duration == 0 ) return; -/# assert( duration > 0 ); -#/ starttime = gettime(); endtime = gettime() + duration * 1000; @@ -1146,12 +1159,10 @@ waitlongdurationwithbombtimeupdate( whichbomb, duration ) wait 0.25; } } - /# if ( gettime() != endtime ) println( "SCRIPT WARNING: gettime() = " + gettime() + " NOT EQUAL TO endtime = " + endtime ); #/ - while ( isdefined( level.hostmigrationtimer ) ) { endtime += 250; diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/dm.gsc b/MP/Core/maps/mp/gametypes/dm.gsc similarity index 92% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/dm.gsc rename to MP/Core/maps/mp/gametypes/dm.gsc index 2a75db1..7369293 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/dm.gsc +++ b/MP/Core/maps/mp/gametypes/dm.gsc @@ -1,5 +1,14 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_callbacksetup; +#include maps\mp\gametypes\_gameobjects; +#include maps\mp\gametypes\_spawning; +#include maps\mp\gametypes\_spawnlogic; +#include maps\mp\gametypes\_globallogic_audio; +#include maps\mp\gametypes\_globallogic_score; main() { diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/dom.gsc b/MP/Core/maps/mp/gametypes/dom.gsc similarity index 98% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/dom.gsc rename to MP/Core/maps/mp/gametypes/dom.gsc index a4e6d7c..f21047b 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/dom.gsc +++ b/MP/Core/maps/mp/gametypes/dom.gsc @@ -1,5 +1,22 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_callbacksetup; +#include maps\mp\gametypes\_globallogic_audio; +#include maps\mp\gametypes\_gameobjects; +#include maps\mp\gametypes\_spawning; +#include maps\mp\gametypes\_spawnlogic; +#include maps\mp\gametypes\_globallogic_score; +#include maps\mp\_challenges; +#include maps\mp\teams\_teams; +#include maps\mp\gametypes\_globallogic_utils; +#include maps\mp\_scoreevents; +#include maps\mp\_demo; +#include maps\mp\_popups; +#include maps\mp\gametypes\_hostmigration; main() { @@ -178,9 +195,7 @@ onspawnplayer( predictedspawn ) if ( !isdefined( spawnpoint ) ) spawnpoint = maps\mp\gametypes\_spawnlogic::getspawnpoint_random( level.spawn_start[spawnteam] ); -/# assert( isdefined( spawnpoint ) ); -#/ if ( predictedspawn ) self predictspawnpoint( spawnpoint.origin, spawnpoint.angles ); @@ -479,9 +494,7 @@ onuse( player ) setdvar( "scr_obj" + self maps\mp\gametypes\_gameobjects::getlabel(), team ); self resetflagbaseeffect(); level.usestartspawns = 0; -/# assert( team != "neutral" ); -#/ isbflag = 0; string = &""; @@ -507,9 +520,7 @@ onuse( player ) break; } -/# assert( string != &"" ); -#/ touchlist = []; touchkeys = getarraykeys( self.touchlist[team] ); @@ -724,7 +735,6 @@ onscoreclosemusic() currentscore = alliedscore; else currentscore = axisscore; - /# if ( getdvarint( _hash_BC4784C ) > 0 ) { @@ -738,7 +748,6 @@ onscoreclosemusic() println( "Music System Domination - scoreThresholdStart " + scorethresholdstart ); } #/ - if ( scoredif <= scorethreshold && scorethresholdstart <= currentscore && level.playingactionmusic != 1 ) { thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "TIME_OUT", "both" ); @@ -861,12 +870,13 @@ onplayerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shi self recordkillmodifier( "assaulting" ); break; - continue; } - + else + { /# - attacker iprintlnbold( "GAMETYPE DEBUG: NOT GIVING YOU OFFENSIVE CREDIT AS BOOSTING PREVENTION" ); + attacker iprintlnbold( "GAMETYPE DEBUG: NOT GIVING YOU OFFENSIVE CREDIT AS BOOSTING PREVENTION" ); #/ + } } } } @@ -1217,15 +1227,9 @@ createflagspawninfluencers() update_spawn_influencers( team ) { -/# assert( isdefined( self.neutral_flag_influencer ) ); -#/ -/# assert( isdefined( self.owned_flag_influencer ) ); -#/ -/# assert( isdefined( self.enemy_flag_influencer ) ); -#/ if ( team == "neutral" ) { diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/gun.gsc b/MP/Core/maps/mp/gametypes/gun.gsc similarity index 96% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/gun.gsc rename to MP/Core/maps/mp/gametypes/gun.gsc index e687421..1dc8b93 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/gun.gsc +++ b/MP/Core/maps/mp/gametypes/gun.gsc @@ -1,5 +1,18 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_callbacksetup; +#include maps\mp\gametypes\_wager; +#include maps\mp\gametypes\_globallogic_score; +#include maps\mp\_scoreevents; +#include maps\mp\gametypes\_globallogic_audio; +#include maps\mp\gametypes\_rank; +#include maps\mp\gametypes\_gameobjects; +#include maps\mp\gametypes\_spawning; +#include maps\mp\gametypes\_spawnlogic; +#include maps\mp\gametypes\_persistence; main() { diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/hq.gsc b/MP/Core/maps/mp/gametypes/hq.gsc similarity index 98% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/hq.gsc rename to MP/Core/maps/mp/gametypes/hq.gsc index eae2566..e073079 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/hq.gsc +++ b/MP/Core/maps/mp/gametypes/hq.gsc @@ -1,5 +1,24 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_callbacksetup; +#include maps\mp\gametypes\_gameobjects; +#include maps\mp\gametypes\_globallogic_score; +#include maps\mp\gametypes\_spawning; +#include maps\mp\gametypes\_spawnlogic; +#include maps\mp\gametypes\_globallogic_audio; +#include maps\mp\killstreaks\_rcbomb; +#include maps\mp\gametypes\_battlechatter_mp; +#include maps\mp\gametypes\_globallogic_utils; +#include maps\mp\_challenges; +#include maps\mp\_scoreevents; +#include maps\mp\_popups; +#include maps\mp\_demo; +#include maps\mp\gametypes\_weapons; +#include maps\mp\killstreaks\_supplydrop; +#include maps\mp\_medals; main() { @@ -193,7 +212,6 @@ spawn_first_radio( delay ) logstring( "radio spawned: (" + level.radio.trigorigin[0] + "," + level.radio.trigorigin[1] + "," + level.radio.trigorigin[2] + ")" ); level.radio enable_radio_spawn_influencer( 1 ); - return; } spawn_next_radio() @@ -205,7 +223,6 @@ spawn_next_radio() logstring( "radio spawned: (" + level.radio.trigorigin[0] + "," + level.radio.trigorigin[1] + "," + level.radio.trigorigin[2] + ")" ); level.radio enable_radio_spawn_influencer( 1 ); - return; } hqmainloop() @@ -637,9 +654,7 @@ onspawnplayer( predictedspawn ) spawnpoint = maps\mp\gametypes\_spawnlogic::getspawnpoint_random( level.spawn_start[spawnteam] ); } -/# assert( isdefined( spawnpoint ) ); -#/ if ( predictedspawn ) self predictspawnpoint( spawnpoint.origin, spawnpoint.angles ); @@ -751,9 +766,7 @@ setupradios() } } -/# assert( !errored ); -#/ radio.trigorigin = radio.trig.origin; visuals = []; visuals[0] = radio; @@ -854,9 +867,7 @@ setupnodes() self.nodes[self.nodes.size] = node; } -/# assert( self.nodes.size ); -#/ temp delete(); } @@ -925,9 +936,7 @@ getnextradiofromqueue() if ( level.radiospawnqueue.size == 0 ) shuffleradios(); -/# assert( level.radiospawnqueue.size > 0 ); -#/ next_radio = level.radiospawnqueue[0]; arrayremoveindex( level.radiospawnqueue, 0 ); return next_radio; @@ -1037,9 +1046,7 @@ pickradiotospawn() } } -/# assert( isdefined( bestradio ) ); -#/ level.prevradio2 = level.prevradio; level.prevradio = bestradio; return bestradio; diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/koth.gsc b/MP/Core/maps/mp/gametypes/koth.gsc similarity index 98% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/koth.gsc rename to MP/Core/maps/mp/gametypes/koth.gsc index fe3b90c..8fa082a 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/koth.gsc +++ b/MP/Core/maps/mp/gametypes/koth.gsc @@ -1,5 +1,23 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_callbacksetup; +#include maps\mp\gametypes\_globallogic_audio; +#include maps\mp\gametypes\_gameobjects; +#include maps\mp\gametypes\_globallogic_score; +#include maps\mp\gametypes\_spawning; +#include maps\mp\gametypes\_spawnlogic; +#include maps\mp\gametypes\_battlechatter_mp; +#include maps\mp\_challenges; +#include maps\mp\gametypes\_globallogic_utils; +#include maps\mp\_scoreevents; +#include maps\mp\_popups; +#include maps\mp\_demo; +#include maps\mp\gametypes\_hostmigration; +#include maps\mp\_medals; main() { @@ -220,7 +238,6 @@ spawn_first_zone( delay ) } level.zone.gameobject.trigger allowtacticalinsertion( 0 ); - return; } spawn_next_zone() @@ -239,7 +256,6 @@ spawn_next_zone() } level.zone.gameobject.trigger allowtacticalinsertion( 0 ); - return; } getnumtouching() @@ -588,7 +604,6 @@ give_capture_credit( touchlist, string, capturetime, capture_team, lastcapturete player addplayerstatwithgametype( "CAPTURES", 1 ); continue; } - /# player iprintlnbold( "GAMETYPE DEBUG: NOT GIVING YOU CAPTURE CREDIT AS BOOSTING PREVENTION" ); #/ @@ -675,9 +690,7 @@ onzonecontested() onzoneuncontested( lastclaimteam ) { -/# assert( lastclaimteam == level.zone.gameobject maps\mp\gametypes\_gameobjects::getownerteam() ); -#/ level.zone.gameobject.iscontested = 0; level.zone.gameobject maps\mp\gametypes\_gameobjects::setclaimteam( lastclaimteam ); } @@ -762,9 +775,7 @@ onspawnplayer( predictedspawn ) spawnpoint = maps\mp\gametypes\_spawnlogic::getspawnpoint_random( level.spawn_start[spawnteam] ); } -/# assert( isdefined( spawnpoint ) ); -#/ if ( predictedspawn ) self predictspawnpoint( spawnpoint.origin, spawnpoint.angles ); @@ -872,9 +883,7 @@ setupzones() } } -/# assert( !errored ); -#/ zone.trigorigin = zone.trig.origin; visuals = []; visuals[0] = zone; @@ -1059,9 +1068,7 @@ getnextzonefromqueue() if ( level.zonespawnqueue.size == 0 ) shufflezones(); -/# assert( level.zonespawnqueue.size > 0 ); -#/ next_zone = level.zonespawnqueue[0]; arrayremoveindex( level.zonespawnqueue, 0 ); return next_zone; @@ -1171,9 +1178,7 @@ pickzonetospawn() } } -/# assert( isdefined( bestzone ) ); -#/ level.prevzone2 = level.prevzone; level.prevzone = bestzone; return bestzone; diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/oic.gsc b/MP/Core/maps/mp/gametypes/oic.gsc similarity index 95% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/oic.gsc rename to MP/Core/maps/mp/gametypes/oic.gsc index 37fd273..8158fc7 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/oic.gsc +++ b/MP/Core/maps/mp/gametypes/oic.gsc @@ -1,5 +1,17 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_callbacksetup; +#include maps\mp\gametypes\_wager; +#include maps\mp\gametypes\_gameobjects; +#include maps\mp\gametypes\_spawning; +#include maps\mp\gametypes\_spawnlogic; +#include maps\mp\gametypes\_globallogic_score; +#include maps\mp\_scoreevents; +#include maps\mp\gametypes\_persistence; main() { diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/oneflag.gsc b/MP/Core/maps/mp/gametypes/oneflag.gsc similarity index 98% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/oneflag.gsc rename to MP/Core/maps/mp/gametypes/oneflag.gsc index dedcbdc..d2e0fd4 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/oneflag.gsc +++ b/MP/Core/maps/mp/gametypes/oneflag.gsc @@ -1,5 +1,24 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_callbacksetup; +#include maps\mp\gametypes\_globallogic_audio; +#include maps\mp\teams\_teams; +#include maps\mp\gametypes\_globallogic_score; +#include maps\mp\gametypes\_gameobjects; +#include maps\mp\gametypes\_spawning; +#include maps\mp\gametypes\_spawnlogic; +#include maps\mp\gametypes\_hud_message; +#include maps\mp\gametypes\_globallogic_utils; +#include maps\mp\_popups; +#include maps\mp\gametypes\_weapons; +#include maps\mp\_scoreevents; +#include maps\mp\_demo; +#include maps\mp\_challenges; +#include maps\mp\gametypes\_globallogic_defaults; +#include maps\mp\gametypes\_rank; main() { @@ -122,7 +141,6 @@ onstartgametype() { if ( !isdefined( game["switchedsides"] ) ) game["switchedsides"] = 0; - /# setdebugsideswitch( game["switchedsides"] ); #/ @@ -387,9 +405,7 @@ onspawnplayer( predictedspawn ) else spawnpoint = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam( level.spawn_allies ); -/# assert( isdefined( spawnpoint ) ); -#/ if ( predictedspawn ) self predictspawnpoint( spawnpoint.origin, spawnpoint.angles ); @@ -1130,14 +1146,10 @@ returnflaghudelems( time ) self endon( "picked_up" ); level endon( "game_ended" ); ownerteam = self maps\mp\gametypes\_gameobjects::getownerteam(); -/# assert( !level.returnmessageelems["axis"][ownerteam].alpha ); -#/ level.returnmessageelems["axis"][ownerteam].alpha = 1; level.returnmessageelems["axis"][ownerteam] settimer( time ); -/# assert( !level.returnmessageelems["allies"][ownerteam].alpha ); -#/ level.returnmessageelems["allies"][ownerteam].alpha = 1; level.returnmessageelems["allies"][ownerteam] settimer( time ); diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/sas.gsc b/MP/Core/maps/mp/gametypes/sas.gsc similarity index 95% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/sas.gsc rename to MP/Core/maps/mp/gametypes/sas.gsc index e6a36b4..5aea788 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/sas.gsc +++ b/MP/Core/maps/mp/gametypes/sas.gsc @@ -1,5 +1,17 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_callbacksetup; +#include maps\mp\gametypes\_wager; +#include maps\mp\gametypes\_globallogic_score; +#include maps\mp\_scoreevents; +#include maps\mp\gametypes\_globallogic_audio; +#include maps\mp\gametypes\_gameobjects; +#include maps\mp\gametypes\_spawning; +#include maps\mp\gametypes\_spawnlogic; +#include maps\mp\gametypes\_persistence; main() { @@ -38,9 +50,7 @@ main() level.setbackweapon = getreffromitemindex( getbaseweaponitemindex( "knife_ballistic_mp" ) ) + "_mp"; break; default: -/# assert( 1, "Invalid setting for gunSelection" ); -#/ break; } diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/sd.gsc b/MP/Core/maps/mp/gametypes/sd.gsc similarity index 97% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/sd.gsc rename to MP/Core/maps/mp/gametypes/sd.gsc index 91ec477..1e728f6 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/sd.gsc +++ b/MP/Core/maps/mp/gametypes/sd.gsc @@ -1,5 +1,25 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_callbacksetup; +#include maps\mp\gametypes\_globallogic_defaults; +#include maps\mp\gametypes\_rank; +#include maps\mp\gametypes\_gameobjects; +#include maps\mp\gametypes\_spawning; +#include maps\mp\gametypes\_spawnlogic; +#include maps\mp\_scoreevents; +#include maps\mp\_medals; +#include maps\mp\gametypes\_spectating; +#include maps\mp\gametypes\_globallogic_score; +#include maps\mp\gametypes\_globallogic_audio; +#include maps\mp\gametypes\_battlechatter_mp; +#include maps\mp\_popups; +#include maps\mp\_demo; +#include maps\mp\gametypes\_globallogic_utils; +#include maps\mp\gametypes\_hostmigration; main() { @@ -241,9 +261,7 @@ onspawnplayer( predictedspawn ) spawnpointname = "mp_sd_spawn_defender"; spawnpoints = maps\mp\gametypes\_spawnlogic::getspawnpointarray( spawnpointname ); -/# assert( spawnpoints.size ); -#/ spawnpoint = maps\mp\gametypes\_spawnlogic::getspawnpoint_random( spawnpoints ); if ( predictedspawn ) @@ -548,9 +566,7 @@ bombs() level.bombzones[level.bombzones.size] = bombzone; bombzone.bombdefusetrig = getent( visuals[0].target, "targetname" ); -/# assert( isdefined( bombzone.bombdefusetrig ) ); -#/ bombzone.bombdefusetrig.origin += vectorscale( ( 0, 0, -1 ), 10000.0 ); bombzone.bombdefusetrig.label = label; } @@ -739,7 +755,6 @@ bombplantedmusicdelay() if ( getdvarint( _hash_BC4784C ) > 0 ) println( "Music System - waiting to set TIME_OUT: " + time ); #/ - if ( time > 1 ) { wait( time ); diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/shrp.gsc b/MP/Core/maps/mp/gametypes/shrp.gsc similarity index 97% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/shrp.gsc rename to MP/Core/maps/mp/gametypes/shrp.gsc index 69526c7..78a9892 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/shrp.gsc +++ b/MP/Core/maps/mp/gametypes/shrp.gsc @@ -1,5 +1,18 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_callbacksetup; +#include maps\mp\gametypes\_gameobjects; +#include maps\mp\gametypes\_spawning; +#include maps\mp\gametypes\_spawnlogic; +#include maps\mp\gametypes\_wager; +#include maps\mp\gametypes\_hostmigration; +#include maps\mp\_scoreevents; +#include maps\mp\gametypes\_globallogic_score; +#include maps\mp\gametypes\_persistence; main() { @@ -161,7 +174,6 @@ getrandomgunfromprogression() if ( isdefined( level.gunprogression ) ) size = level.gunprogression.size; - /# debug_weapon = getdvar( _hash_1C6DE858 ); #/ diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/tdm.gsc b/MP/Core/maps/mp/gametypes/tdm.gsc similarity index 95% rename from Multiplayer Core/patch_mp/maps/mp/gametypes/tdm.gsc rename to MP/Core/maps/mp/gametypes/tdm.gsc index 611341c..15af278 100644 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/tdm.gsc +++ b/MP/Core/maps/mp/gametypes/tdm.gsc @@ -1,5 +1,14 @@ // T6 GSC SOURCE // Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\gametypes\_globallogic; +#include maps\mp\gametypes\_callbacksetup; +#include maps\mp\gametypes\_gameobjects; +#include maps\mp\gametypes\_spawning; +#include maps\mp\gametypes\_spawnlogic; +#include maps\mp\gametypes\_globallogic_score; +#include maps\mp\gametypes\_globallogic_audio; main() { diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_ai_tank.gsc b/MP/Core/maps/mp/killstreaks/_ai_tank.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_ai_tank.gsc rename to MP/Core/maps/mp/killstreaks/_ai_tank.gsc index 8e1535c..eb15509 100644 --- a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_ai_tank.gsc +++ b/MP/Core/maps/mp/killstreaks/_ai_tank.gsc @@ -861,11 +861,8 @@ tank_rocket_think() } } -tank_set_target( entity, use_rocket ) +tank_set_target( entity, use_rocket = 0 ) { - if ( !isdefined( use_rocket ) ) - use_rocket = 0; - self.target_entity = entity; if ( use_rocket ) @@ -1241,11 +1238,11 @@ update_weapon_hud( player ) switch ( self.numberrockets ) { - case "0": + case 0: player.tank_rocket_3 setshader( "mech_check_line", 32, 16 ); - case "1": + case 1: player.tank_rocket_2 setshader( "mech_check_line", 32, 16 ); - case "2": + case 2: player.tank_rocket_1 setshader( "mech_check_line", 32, 16 ); break; } diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_airsupport.gsc b/MP/Core/maps/mp/killstreaks/_airsupport.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_airsupport.gsc rename to MP/Core/maps/mp/killstreaks/_airsupport.gsc index 35d3cfc..0e57806 100644 --- a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_airsupport.gsc +++ b/MP/Core/maps/mp/killstreaks/_airsupport.gsc @@ -71,18 +71,10 @@ endselectiononhostmigration() endselectionthink() { -/# assert( isplayer( self ) ); -#/ -/# assert( isalive( self ) ); -#/ -/# assert( isdefined( self.selectinglocation ) ); -#/ -/# assert( self.selectinglocation == 1 ); -#/ self thread endselectionongameend(); self thread endselectiononhostmigration(); event = self waittill_any_return( "death", "disconnect", "cancel_location", "game_ended", "used", "weapon_change", "emp_jammed" ); @@ -150,9 +142,7 @@ callstrike( flightplan ) level.bomberdamagedents = []; level.bomberdamagedentscount = 0; level.bomberdamagedentsindex = 0; -/# assert( flightplan.distance != 0, "callStrike can not be passed a zero fly distance" ); -#/ planehalfdistance = flightplan.distance / 2; path = getstrikepath( flightplan.target, flightplan.height, planehalfdistance ); startpoint = path["start"]; @@ -165,9 +155,8 @@ callstrike( flightplan ) if ( bombtime < 0 ) bombtime = 0; -/# + assert( flytime > bombtime ); -#/ flightplan.owner endon( "disconnect" ); requireddeathcount = flightplan.owner.deathcount; side = vectorcross( anglestoforward( direction ), ( 0, 0, 1 ) ); @@ -394,9 +383,8 @@ gethelipath( start, goal ) if ( !isdefined( goal_points ) ) return undefined; -/# + assert( goal_points.size >= 1 ); -#/ return goal_points; } @@ -419,11 +407,8 @@ followpath( path, donenotify, stopatgoal ) self notify( donenotify ); } -setgoalposition( goal, donenotify, stopatgoal ) +setgoalposition( goal, donenotify, stopatgoal = 1 ) { - if ( !isdefined( stopatgoal ) ) - stopatgoal = 1; - start = self.origin; goal_points = gethelipath( start, goal ); @@ -486,9 +471,8 @@ calculatepath( start, end, startnoflyzones, goalnoflyzones ) if ( !isdefined( points ) ) return undefined; -/# + assert( points.size >= 1 ); -#/ debug_sphere( points[points.size - 1], 10, ( 1, 0, 0 ), 1, 1000 ); point = start; diff --git a/MP/Core/maps/mp/killstreaks/_dogs.gsc b/MP/Core/maps/mp/killstreaks/_dogs.gsc new file mode 100644 index 0000000..3db6cf3 --- /dev/null +++ b/MP/Core/maps/mp/killstreaks/_dogs.gsc @@ -0,0 +1,949 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\gametypes\_spawnlogic; +#include maps\mp\gametypes\_tweakables; +#include maps\mp\killstreaks\_killstreaks; +#include maps\mp\killstreaks\_killstreakrules; +#include maps\mp\gametypes\_battlechatter_mp; +#include maps\mp\gametypes\_spawning; +#include maps\mp\gametypes\_weapons; +#include maps\mp\_scoreevents; +#include maps\mp\killstreaks\_supplydrop; +#include maps\mp\gametypes\_dev; + +init() +{ + precachemodel( "german_shepherd_vest" ); + precachemodel( "german_shepherd_vest_black" ); + level.dog_targets = []; + level.dog_targets[level.dog_targets.size] = "trigger_radius"; + level.dog_targets[level.dog_targets.size] = "trigger_multiple"; + level.dog_targets[level.dog_targets.size] = "trigger_use_touch"; + level.dog_spawns = []; + init_spawns(); +/# + level thread devgui_dog_think(); +#/ +} + +init_spawns() +{ + spawns = getnodearray( "spawn", "script_noteworthy" ); + + if ( !isdefined( spawns ) || !spawns.size ) + { +/# + println( "No dog spawn nodes found in map" ); +#/ + return; + } + + dog_spawner = getent( "dog_spawner", "targetname" ); + + if ( !isdefined( dog_spawner ) ) + { +/# + println( "No dog_spawner entity found in map" ); +#/ + return; + } + + valid = maps\mp\gametypes\_spawnlogic::getspawnpointarray( "mp_tdm_spawn" ); + dog = dog_spawner spawnactor(); + + foreach ( spawn in spawns ) + { + valid = arraysort( valid, spawn.origin, 0 ); + + for ( i = 0; i < 5; i++ ) + { + if ( findpath( spawn.origin, valid[i].origin, dog, 1, 0 ) ) + { + level.dog_spawns[level.dog_spawns.size] = spawn; + break; + } + } + } +/# + if ( !level.dog_spawns.size ) + println( "No dog spawns connect to MP spawn nodes" ); +#/ + dog delete(); +} + +initkillstreak() +{ + if ( maps\mp\gametypes\_tweakables::gettweakablevalue( "killstreak", "allowdogs" ) ) + { + maps\mp\killstreaks\_killstreaks::registerkillstreak( "dogs_mp", "dogs_mp", "killstreak_dogs", "dogs_used", ::usekillstreakdogs, 1 ); + maps\mp\killstreaks\_killstreaks::registerkillstreakstrings( "dogs_mp", &"KILLSTREAK_EARNED_DOGS", &"KILLSTREAK_DOGS_NOT_AVAILABLE", &"KILLSTREAK_DOGS_INBOUND" ); + maps\mp\killstreaks\_killstreaks::registerkillstreakdialog( "dogs_mp", "mpl_killstreak_dogs", "kls_dogs_used", "", "kls_dogs_enemy", "", "kls_dogs_ready" ); + maps\mp\killstreaks\_killstreaks::registerkillstreakdevdvar( "dogs_mp", "scr_givedogs" ); + maps\mp\killstreaks\_killstreaks::setkillstreakteamkillpenaltyscale( "dogs_mp", 0.0 ); + maps\mp\killstreaks\_killstreaks::registerkillstreakaltweapon( "dogs_mp", "dog_bite_mp" ); + } +} + +usekillstreakdogs( hardpointtype ) +{ + if ( !dog_killstreak_init() ) + return false; + + if ( !self maps\mp\killstreaks\_killstreakrules::iskillstreakallowed( hardpointtype, self.team ) ) + return false; + + killstreak_id = self maps\mp\killstreaks\_killstreakrules::killstreakstart( "dogs_mp", self.team ); + self thread ownerhadactivedogs(); + + if ( killstreak_id == -1 ) + return false; + + if ( level.teambased ) + { + foreach ( team in level.teams ) + { + if ( team == self.team ) + continue; + + thread maps\mp\gametypes\_battlechatter_mp::onkillstreakused( "dogs", team ); + } + } + + self maps\mp\killstreaks\_killstreaks::playkillstreakstartdialog( "dogs_mp", self.team, 1 ); + level.globalkillstreakscalled++; + self addweaponstat( "dogs_mp", "used", 1 ); + ownerdeathcount = self.deathcount; + level thread dog_manager_spawn_dogs( self, ownerdeathcount, killstreak_id ); + level notify( "called_in_the_dogs" ); + return true; +} + +ownerhadactivedogs() +{ + self endon( "disconnect" ); + self.dogsactive = 1; + self.dogsactivekillstreak = 0; + self waittill_any( "death", "game_over", "dogs_complete" ); + self.dogsactivekillstreak = 0; + self.dogsactive = undefined; +} + +dog_killstreak_init() +{ + dog_spawner = getent( "dog_spawner", "targetname" ); + + if ( !isdefined( dog_spawner ) ) + { +/# + println( "No dog spawners found in map" ); +#/ + return false; + } + + spawns = getnodearray( "spawn", "script_noteworthy" ); + + if ( level.dog_spawns.size <= 0 ) + { +/# + println( "No dog spawn nodes found in map" ); +#/ + return false; + } + + exits = getnodearray( "exit", "script_noteworthy" ); + + if ( exits.size <= 0 ) + { +/# + println( "No dog exit nodes found in map" ); +#/ + return false; + } + + return true; +} + +dog_set_model() +{ + self setmodel( "german_shepherd_vest" ); + self setenemymodel( "german_shepherd_vest_black" ); +} + +init_dog() +{ + assert( isai( self ) ); + self.targetname = "attack_dog"; + self.animtree = "dog.atr"; + self.type = "dog"; + self.accuracy = 0.2; + self.health = 100; + self.maxhealth = 100; + self.aiweapon = "dog_bite_mp"; + self.secondaryweapon = ""; + self.sidearm = ""; + self.grenadeammo = 0; + self.goalradius = 128; + self.nododgemove = 1; + self.ignoresuppression = 1; + self.suppressionthreshold = 1; + self.disablearrivals = 0; + self.pathenemyfightdist = 512; + self.soundmod = "dog"; + self thread dog_health_regen(); + self thread selfdefensechallenge(); +} + +get_spawn_node( owner, team ) +{ + assert( level.dog_spawns.size > 0 ); + return random( level.dog_spawns ); +} + +get_score_for_spawn( origin, team ) +{ + players = get_players(); + score = 0; + + foreach ( player in players ) + { + if ( !isdefined( player ) ) + continue; + + if ( !isalive( player ) ) + continue; + + if ( player.sessionstate != "playing" ) + continue; + + if ( distancesquared( player.origin, origin ) > 4194304 ) + continue; + + if ( player.team == team ) + { + score++; + continue; + } + + score--; + } + + return score; +} + +dog_set_owner( owner, team, requireddeathcount ) +{ + self setentityowner( owner ); + self.aiteam = team; + self.requireddeathcount = requireddeathcount; +} + +dog_create_spawn_influencer() +{ + self maps\mp\gametypes\_spawning::create_dog_influencers(); +} + +dog_manager_spawn_dog( owner, team, spawn_node, requireddeathcount ) +{ + dog_spawner = getent( "dog_spawner", "targetname" ); + dog = dog_spawner spawnactor(); + dog forceteleport( spawn_node.origin, spawn_node.angles ); + dog init_dog(); + dog dog_set_owner( owner, team, requireddeathcount ); + dog dog_set_model(); + dog dog_create_spawn_influencer(); + dog thread dog_owner_kills(); + dog thread dog_notify_level_on_death(); + dog thread dog_patrol(); + dog thread maps\mp\gametypes\_weapons::monitor_dog_special_grenades(); + return dog; +} + +dog_manager_spawn_dogs( owner, deathcount, killstreak_id ) +{ + requireddeathcount = deathcount; + team = owner.team; + level.dog_abort = 0; + owner thread dog_manager_abort(); + level thread dog_manager_game_ended(); + count = 0; + + while ( count < 10 ) + { + if ( level.dog_abort ) + break; + + for ( dogs = dog_manager_get_dogs(); dogs.size < 5 && count < 10 && !level.dog_abort; dogs = dog_manager_get_dogs() ) + { + node = get_spawn_node( owner, team ); + level dog_manager_spawn_dog( owner, team, node, requireddeathcount ); + count++; + wait( randomfloatrange( 2, 5 ) ); + } + + level waittill( "dog_died" ); + } + + for (;;) + { + dogs = dog_manager_get_dogs(); + + if ( dogs.size <= 0 ) + { + maps\mp\killstreaks\_killstreakrules::killstreakstop( "dogs_mp", team, killstreak_id ); + + if ( isdefined( owner ) ) + owner notify( "dogs_complete" ); + + return; + } + + level waittill( "dog_died" ); + } +} + +dog_abort() +{ + level.dog_abort = 1; + dogs = dog_manager_get_dogs(); + + foreach ( dog in dogs ) + dog notify( "abort" ); + + level notify( "dog_abort" ); +} + +dog_manager_abort() +{ + level endon( "dog_abort" ); + self wait_endon( 45, "disconnect", "joined_team", "joined_spectators" ); + dog_abort(); +} + +dog_manager_game_ended() +{ + level endon( "dog_abort" ); + + level waittill( "game_ended" ); + + dog_abort(); +} + +dog_notify_level_on_death() +{ + self waittill( "death" ); + + level notify( "dog_died" ); +} + +dog_leave() +{ + self clearentitytarget(); + self.ignoreall = 1; + self.goalradius = 30; + self setgoalnode( self dog_get_exit_node() ); + self wait_endon( 20, "goal", "bad_path" ); + self delete(); +} + +dog_patrol() +{ + self endon( "death" ); +/# + self endon( "debug_patrol" ); +#/ + for (;;) + { + if ( level.dog_abort ) + { + self dog_leave(); + return; + } + + if ( isdefined( self.enemy ) ) + { + wait( randomintrange( 3, 5 ) ); + continue; + } + + nodes = []; + objectives = dog_patrol_near_objective(); + + for ( i = 0; i < objectives.size; i++ ) + { + objective = random( objectives ); + nodes = getnodesinradius( objective.origin, 256, 64, 512, "Path", 16 ); + + if ( nodes.size ) + break; + } + + if ( !nodes.size ) + { + player = self dog_patrol_near_enemy(); + + if ( isdefined( player ) ) + nodes = getnodesinradius( player.origin, 1024, 0, 128, "Path", 8 ); + } + + if ( !nodes.size && isdefined( self.script_owner ) ) + { + if ( isalive( self.script_owner ) && self.script_owner.sessionstate == "playing" ) + nodes = getnodesinradius( self.script_owner.origin, 512, 256, 512, "Path", 16 ); + } + + if ( !nodes.size ) + nodes = getnodesinradius( self.origin, 1024, 512, 512, "Path" ); + + if ( nodes.size ) + { + nodes = array_randomize( nodes ); + + foreach ( node in nodes ) + { + if ( isdefined( node.script_noteworthy ) ) + continue; + + if ( isdefined( node.dog_claimed ) && isalive( node.dog_claimed ) ) + continue; + + self setgoalnode( node ); + node.dog_claimed = self; + nodes = []; + event = self waittill_any_return( "goal", "bad_path", "enemy", "abort" ); + + if ( event == "goal" ) + wait_endon( randomintrange( 3, 5 ), "damage", "enemy", "abort" ); + + node.dog_claimed = undefined; + break; + } + } + + wait 0.5; + } +} + +dog_patrol_near_objective() +{ + if ( !isdefined( level.dog_objectives ) ) + { + level.dog_objectives = []; + level.dog_objective_next_update = 0; + } + + if ( level.gametype == "tdm" || level.gametype == "dm" ) + return level.dog_objectives; + + if ( gettime() >= level.dog_objective_next_update ) + { + level.dog_objectives = []; + + foreach ( target in level.dog_targets ) + { + ents = getentarray( target, "classname" ); + + foreach ( ent in ents ) + { + if ( level.gametype == "koth" ) + { + if ( isdefined( ent.targetname ) && ent.targetname == "radiotrigger" ) + level.dog_objectives[level.dog_objectives.size] = ent; + + continue; + } + + if ( level.gametype == "sd" ) + { + if ( isdefined( ent.targetname ) && ent.targetname == "bombzone" ) + level.dog_objectives[level.dog_objectives.size] = ent; + + continue; + } + + if ( !isdefined( ent.script_gameobjectname ) ) + continue; + + if ( !issubstr( ent.script_gameobjectname, level.gametype ) ) + continue; + + level.dog_objectives[level.dog_objectives.size] = ent; + } + } + + level.dog_objective_next_update = gettime() + randomintrange( 5000, 10000 ); + } + + return level.dog_objectives; +} + +dog_patrol_near_enemy() +{ + players = get_players(); + closest = undefined; + distsq = 99999999; + + foreach ( player in players ) + { + if ( !isdefined( player ) ) + continue; + + if ( !isalive( player ) ) + continue; + + if ( player.sessionstate != "playing" ) + continue; + + if ( isdefined( self.script_owner ) && player == self.script_owner ) + continue; + + if ( level.teambased ) + { + if ( player.team == self.aiteam ) + continue; + } + + if ( gettime() - player.lastfiretime > 3000 ) + continue; + + if ( !isdefined( closest ) ) + { + closest = player; + distsq = distancesquared( self.origin, player.origin ); + continue; + } + + d = distancesquared( self.origin, player.origin ); + + if ( d < distsq ) + { + closest = player; + distsq = d; + } + } + + return closest; +} + +dog_manager_get_dogs() +{ + dogs = getentarray( "attack_dog", "targetname" ); + return dogs; +} + +dog_owner_kills() +{ + if ( !isdefined( self.script_owner ) ) + return; + + self endon( "clear_owner" ); + self endon( "death" ); + self.script_owner endon( "disconnect" ); + + while ( true ) + { + self waittill( "killed", player ); + + self.script_owner notify( "dog_handler" ); + } +} + +dog_health_regen() +{ + self endon( "death" ); + interval = 0.5; + regen_interval = int( self.health / 5 * interval ); + regen_start = 2; + + for (;;) + { + self waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, idflags ); + + self trackattackerdamage( attacker, weaponname ); + self thread dog_health_regen_think( regen_start, interval, regen_interval ); + } +} + +trackattackerdamage( attacker, weapon ) +{ + if ( !isdefined( attacker ) || !isplayer( attacker ) || !isdefined( self.script_owner ) ) + return; + + if ( level.teambased && attacker.team == self.script_owner.team || attacker == self ) + return; + + if ( !isdefined( self.attackerdata ) || !isdefined( self.attackers ) ) + { + self.attackerdata = []; + self.attackers = []; + } + + if ( !isdefined( self.attackerdata[attacker.clientid] ) ) + { + self.attackerclientid[attacker.clientid] = spawnstruct(); + self.attackers[self.attackers.size] = attacker; + } +} + +resetattackerdamage() +{ + self.attackerdata = []; + self.attackers = []; +} + +dog_health_regen_think( delay, interval, regen_interval ) +{ + self endon( "death" ); + self endon( "damage" ); + wait( delay ); + + for ( step = 0; step <= 5; step += interval ) + { + if ( self.health >= 100 ) + break; + + self.health += regen_interval; + wait( interval ); + } + + self resetattackerdamage(); + self.health = 100; +} + +selfdefensechallenge() +{ + self waittill( "death", attacker ); + + if ( isdefined( attacker ) && isplayer( attacker ) ) + { + if ( isdefined( self.script_owner ) && self.script_owner == attacker ) + return; + + if ( level.teambased && isdefined( self.script_owner ) && self.script_owner.team == attacker.team ) + return; + + if ( isdefined( self.attackers ) ) + { + foreach ( player in self.attackers ) + { + if ( player != attacker ) + maps\mp\_scoreevents::processscoreevent( "killed_dog_assist", player ); + } + } + + attacker notify( "selfdefense_dog" ); + } +} + +dog_get_exit_node() +{ + exits = getnodearray( "exit", "script_noteworthy" ); + return getclosest( self.origin, exits ); +} + +flash_dogs( area ) +{ + self endon( "disconnect" ); + dogs = dog_manager_get_dogs(); + + foreach ( dog in dogs ) + { + if ( !isalive( dog ) ) + continue; + + if ( dog istouching( area ) ) + { + do_flash = 1; + + if ( isplayer( self ) ) + { + if ( level.teambased && dog.aiteam == self.team ) + do_flash = 0; + else if ( !level.teambased && isdefined( dog.script_owner ) && self == dog.script_owner ) + do_flash = 0; + } + + if ( isdefined( dog.lastflashed ) && dog.lastflashed + 1500 > gettime() ) + do_flash = 0; + + if ( do_flash ) + { + dog setflashbanged( 1, 500 ); + dog.lastflashed = gettime(); + } + } + } +} + +devgui_dog_think() +{ +/# + setdvar( "devgui_dog", "" ); + debug_patrol = 0; + + for (;;) + { + cmd = getdvar( "devgui_dog" ); + + switch ( cmd ) + { + case "spawn_friendly": + player = gethostplayer(); + devgui_dog_spawn( player.team ); + break; + case "spawn_enemy": + player = gethostplayer(); + + foreach ( team in level.teams ) + { + if ( team == player.team ) + continue; + + devgui_dog_spawn( team ); + } + + break; + case "delete_dogs": + level dog_abort(); + break; + case "dog_camera": + devgui_dog_camera(); + break; + case "spawn_crate": + devgui_crate_spawn(); + break; + case "delete_crates": + devgui_crate_delete(); + break; + case "show_spawns": + devgui_spawn_show(); + break; + case "show_exits": + devgui_exit_show(); + break; + case "debug_route": + devgui_debug_route(); + break; + } + + if ( cmd != "" ) + setdvar( "devgui_dog", "" ); + + wait 0.5; + } +#/ +} + +devgui_dog_spawn( team ) +{ +/# + player = gethostplayer(); + dog_spawner = getent( "dog_spawner", "targetname" ); + level.dog_abort = 0; + + if ( !isdefined( dog_spawner ) ) + { + iprintln( "No dog spawners found in map" ); + return; + } + + direction = player getplayerangles(); + direction_vec = anglestoforward( direction ); + eye = player geteye(); + scale = 8000; + direction_vec = ( direction_vec[0] * scale, direction_vec[1] * scale, direction_vec[2] * scale ); + trace = bullettrace( eye, eye + direction_vec, 0, undefined ); + nodes = getnodesinradius( trace["position"], 256, 0, 128, "Path", 8 ); + + if ( !nodes.size ) + { + iprintln( "No nodes found near crosshair position" ); + return; + } + + iprintln( "Spawning dog at your crosshair position" ); + node = getclosest( trace["position"], nodes ); + dog = dog_manager_spawn_dog( player, player.team, node, 5 ); + + if ( team != player.team ) + { + dog.aiteam = team; + dog clearentityowner(); + dog notify( "clear_owner" ); + } +#/ +} + +devgui_dog_camera() +{ +/# + player = gethostplayer(); + + if ( !isdefined( level.devgui_dog_camera ) ) + level.devgui_dog_camera = 0; + + dog = undefined; + dogs = dog_manager_get_dogs(); + + if ( dogs.size <= 0 ) + { + level.devgui_dog_camera = undefined; + player cameraactivate( 0 ); + return; + } + + for ( i = 0; i < dogs.size; i++ ) + { + dog = dogs[i]; + + if ( !isdefined( dog ) || !isalive( dog ) ) + { + dog = undefined; + continue; + } + + if ( !isdefined( dog.cam ) ) + { + forward = anglestoforward( dog.angles ); + dog.cam = spawn( "script_model", dog.origin + vectorscale( ( 0, 0, 1 ), 50.0 ) + forward * -100 ); + dog.cam setmodel( "tag_origin" ); + dog.cam linkto( dog ); + } + + if ( dog getentitynumber() <= level.devgui_dog_camera ) + { + dog = undefined; + continue; + } + + break; + } + + if ( isdefined( dog ) ) + { + level.devgui_dog_camera = dog getentitynumber(); + player camerasetposition( dog.cam ); + player camerasetlookat( dog ); + player cameraactivate( 1 ); + } + else + { + level.devgui_dog_camera = undefined; + player cameraactivate( 0 ); + } +#/ +} + +devgui_crate_spawn() +{ +/# + player = gethostplayer(); + direction = player getplayerangles(); + direction_vec = anglestoforward( direction ); + eye = player geteye(); + scale = 8000; + direction_vec = ( direction_vec[0] * scale, direction_vec[1] * scale, direction_vec[2] * scale ); + trace = bullettrace( eye, eye + direction_vec, 0, undefined ); + killcament = spawn( "script_model", player.origin ); + level thread maps\mp\killstreaks\_supplydrop::dropcrate( trace["position"] + vectorscale( ( 0, 0, 1 ), 25.0 ), direction, "supplydrop_mp", player, player.team, killcament ); +#/ +} + +devgui_crate_delete() +{ +/# + if ( !isdefined( level.devgui_crates ) ) + return; + + for ( i = 0; i < level.devgui_crates.size; i++ ) + level.devgui_crates[i] delete(); + + level.devgui_crates = []; +#/ +} + +devgui_spawn_show() +{ +/# + if ( !isdefined( level.dog_spawn_show ) ) + level.dog_spawn_show = 1; + else + level.dog_spawn_show = !level.dog_spawn_show; + + if ( !level.dog_spawn_show ) + { + level notify( "hide_dog_spawns" ); + return; + } + + spawns = level.dog_spawns; + color = ( 0, 1, 0 ); + + for ( i = 0; i < spawns.size; i++ ) + maps\mp\gametypes\_dev::showonespawnpoint( spawns[i], color, "hide_dog_spawns", 32, "dog_spawn" ); +#/ +} + +devgui_exit_show() +{ +/# + if ( !isdefined( level.dog_exit_show ) ) + level.dog_exit_show = 1; + else + level.dog_exit_show = !level.dog_exit_show; + + if ( !level.dog_exit_show ) + { + level notify( "hide_dog_exits" ); + return; + } + + exits = getnodearray( "exit", "script_noteworthy" ); + color = ( 1, 0, 0 ); + + for ( i = 0; i < exits.size; i++ ) + maps\mp\gametypes\_dev::showonespawnpoint( exits[i], color, "hide_dog_exits", 32, "dog_exit" ); +#/ +} + +dog_debug_patrol( node1, node2 ) +{ +/# + self endon( "death" ); + self endon( "debug_patrol" ); + + for (;;) + { + self setgoalnode( node1 ); + self waittill_any( "goal", "bad_path" ); + wait 1; + self setgoalnode( node2 ); + self waittill_any( "goal", "bad_path" ); + wait 1; + } +#/ +} + +devgui_debug_route() +{ +/# + iprintln( "Choose nodes with 'A' or press 'B' to cancel" ); + nodes = maps\mp\gametypes\_dev::dev_get_node_pair(); + + if ( !isdefined( nodes ) ) + { + iprintln( "Route Debug Cancelled" ); + return; + } + + iprintln( "Sending dog to chosen nodes" ); + dogs = dog_manager_get_dogs(); + + if ( isdefined( dogs[0] ) ) + { + dogs[0] notify( "debug_patrol" ); + dogs[0] thread dog_debug_patrol( nodes[0], nodes[1] ); + } +#/ +} diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_emp.gsc b/MP/Core/maps/mp/killstreaks/_emp.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_emp.gsc rename to MP/Core/maps/mp/killstreaks/_emp.gsc index a9d85cf..8dfe7ea 100644 --- a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_emp.gsc +++ b/MP/Core/maps/mp/killstreaks/_emp.gsc @@ -76,9 +76,7 @@ emp_isteamemped( check_team ) emp_use( lifeid ) { -/# assert( isdefined( self ) ); -#/ killstreak_id = self maps\mp\killstreaks\_killstreakrules::killstreakstart( "emp_mp", self.team, 0, 1 ); if ( killstreak_id == -1 ) @@ -104,9 +102,7 @@ emp_jamotherteams( teamname, killstreak_id ) { level endon( "game_ended" ); overlays = []; -/# assert( isdefined( level.teams[teamname] ) ); -#/ level notify( "EMP_JamOtherTeams" + teamname ); level endon( "EMP_JamOtherTeams" + teamname ); level.empowners[teamname] = self; @@ -149,9 +145,8 @@ emp_jamplayers( owner, killstreak_id ) level notify( "EMP_JamPlayers" ); level endon( "EMP_JamPlayers" ); overlays = []; -/# assert( isdefined( owner ) ); -#/ + foreach ( player in level.players ) { if ( player == owner ) diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_helicopter.gsc b/MP/Core/maps/mp/killstreaks/_helicopter.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_helicopter.gsc rename to MP/Core/maps/mp/killstreaks/_helicopter.gsc index d24c89c..35f6b97 100644 --- a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_helicopter.gsc +++ b/MP/Core/maps/mp/killstreaks/_helicopter.gsc @@ -18,11 +18,8 @@ #include maps\mp\_scoreevents; #include maps\mp\gametypes\_hostmigration; -precachehelicopter( model, type ) +precachehelicopter( model, type = "blackhawk" ) { - if ( !isdefined( type ) ) - type = "blackhawk"; - precachemodel( model ); level.vehicle_deathmodel[model] = model; precacheitem( "cobra_20mm_mp" ); @@ -70,9 +67,8 @@ usekillstreakhelicopter( hardpointtype ) if ( hardpointtype == "helicopter_x2_mp" ) missilesenabled = 1; -/# + assert( level.heli_paths.size > 0, "No non-primary helicopter paths found in map" ); -#/ random_path = randomint( level.heli_paths[destination].size ); startnode = level.heli_paths[destination][random_path]; protectlocation = undefined; @@ -111,9 +107,8 @@ heli_path_graph() gunner_loop_start = getentarray( "heli_gunner_loop_start", "targetname" ); leave_nodes = getentarray( "heli_leave", "targetname" ); crash_start = getentarray( "heli_crash_start", "targetname" ); -/# assert( isdefined( path_start ) && isdefined( path_dest ), "Missing path_start or path_dest" ); -#/ + for ( i = 0; i < path_dest.size; i++ ) { startnode_array = []; @@ -152,9 +147,9 @@ heli_path_graph() isprimarydest = 1; } } -/# + assert( isdefined( startnode_array ) && startnode_array.size > 0, "No path(s) to destination" ); -#/ + if ( isprimarydest ) { level.heli_primary_path = startnode_array; @@ -169,9 +164,9 @@ heli_path_graph() startnode = getent( loop_start[i].target, "targetname" ); level.heli_loop_paths[level.heli_loop_paths.size] = startnode; } -/# + assert( isdefined( level.heli_loop_paths[0] ), "No helicopter loop paths found in map" ); -#/ + for ( i = 0; i < gunner_loop_start.size; i++ ) { startnode = getent( gunner_loop_start[i].target, "targetname" ); @@ -181,17 +176,16 @@ heli_path_graph() for ( i = 0; i < leave_nodes.size; i++ ) level.heli_leavenodes[level.heli_leavenodes.size] = leave_nodes[i]; -/# + assert( isdefined( level.heli_leavenodes[0] ), "No helicopter leave nodes found in map" ); -#/ + for ( i = 0; i < crash_start.size; i++ ) { crash_start_node = getent( crash_start[i].target, "targetname" ); level.heli_crash_paths[level.heli_crash_paths.size] = crash_start_node; } -/# + assert( isdefined( level.heli_crash_paths[0] ), "No helicopter crash paths found in map" ); -#/ } #using_animtree("mp_vehicles"); @@ -847,27 +841,24 @@ assignprimarytargets( targets ) update_player_threat( targets[idx] ); } -/# + assert( targets.size >= 2, "Not enough targets to assign primary and secondary" ); -#/ highest = 0; second_highest = 0; primarytarget = undefined; for ( idx = 0; idx < targets.size; idx++ ) { -/# assert( isdefined( targets[idx].threatlevel ), "Target player does not have threat level" ); -#/ + if ( targets[idx].threatlevel >= highest ) { highest = targets[idx].threatlevel; primarytarget = targets[idx]; } } -/# + assert( isdefined( primarytarget ), "Targets exist, but none was assigned as primary" ); -#/ self.primarytarget = primarytarget; self notify( "primary acquired" ); } @@ -885,9 +876,8 @@ assignsecondarytargets( targets ) if ( targets[idx].type == "dog" || targets[0].type == "tank_drone" ) update_missile_dog_threat( targets[idx] ); } -/# + assert( targets.size >= 2, "Not enough targets to assign primary and secondary" ); -#/ highest = 0; second_highest = 0; primarytarget = undefined; @@ -895,18 +885,16 @@ assignsecondarytargets( targets ) for ( idx = 0; idx < targets.size; idx++ ) { -/# assert( isdefined( targets[idx].missilethreatlevel ), "Target player does not have threat level" ); -#/ + if ( targets[idx].missilethreatlevel >= highest ) { highest = targets[idx].missilethreatlevel; secondarytarget = targets[idx]; } } -/# + assert( isdefined( secondarytarget ), "1+ targets exist, but none was assigned as secondary" ); -#/ self.secondarytarget = secondarytarget; self notify( "secondary acquired" ); } @@ -1397,9 +1385,8 @@ heli_evasive( hardpointtype ) } } } -/# + assert( gunnerpathfound, "No chopper gunner loop paths found in map" ); -#/ startwait = 2; if ( isdefined( self.donotstop ) && self.donotstop ) @@ -1455,18 +1442,17 @@ heli_crash( hardpointtype, player, playernotify ) { switch ( level.heli_debug_crash ) { - case "1": + case 1: crashtype = "explode"; break; - case "2": + case 2: crashtype = "crashOnPath"; break; - case "3": + case 3: crashtype = "spinOut"; break; + default: } - - asm_endswitch( 4 case 1 loc_5F74 case 2 loc_5F7E case 3 loc_5F88 default loc_5F92 ); } #/ switch ( crashtype ) @@ -1655,9 +1641,7 @@ heli_explode() self playsound( level.heli_sound["crash"] ); wait 0.1; -/# assert( isdefined( self.destroyfunc ) ); -#/ self [[ self.destroyfunc ]](); } @@ -1708,9 +1692,8 @@ heli_leave( hardpointtype ) if ( target_istarget( self ) ) target_remove( self ); -/# + assert( isdefined( self.destroyfunc ) ); -#/ self [[ self.destroyfunc ]](); } @@ -1729,9 +1712,7 @@ heli_fly( currentnode, startwait, hardpointtype ) while ( isdefined( currentnode.target ) ) { nextnode = getent( currentnode.target, "targetname" ); -/# assert( isdefined( nextnode ), "Next node in path is undefined, but has targetname" ); -#/ pos = nextnode.origin + vectorscale( ( 0, 0, 1 ), 30.0 ); if ( isdefined( currentnode.script_airspeed ) && isdefined( currentnode.script_accel ) ) @@ -1894,7 +1875,7 @@ heli_mobilespawn( protectdest ) self notify( "flying" ); self endon( "flying" ); self endon( "abandoned" ); - iprintlnbold( "PROTECT ORIGIN: (" + protectdest[0] + "," + protectdest[1] + "," + protectdest[2] + ")\n" ); + iprintlnbold( "PROTECT ORIGIN: (" + protectdest[0] + "," + protectdest[1] + "," + protectdest[2] + ")\\n" ); heli_reset(); self sethoverparams( 50, 100, 50 ); wait 2; @@ -2017,13 +1998,9 @@ updatetargetyaw() } } -fire_missile( smissiletype, ishots, etarget ) +fire_missile( smissiletype, ishots = 1, etarget ) { - if ( !isdefined( ishots ) ) - ishots = 1; -/# assert( self.health > 0 ); -#/ weaponname = undefined; weaponshoottime = undefined; tags = []; @@ -2040,16 +2017,11 @@ fire_missile( smissiletype, ishots, etarget ) #/ break; } -/# + assert( isdefined( weaponname ) ); -#/ -/# assert( tags.size > 0 ); -#/ weaponshoottime = weaponfiretime( weaponname ); -/# assert( isdefined( weaponshoottime ) ); -#/ self setvehweapon( weaponname ); nextmissiletag = -1; @@ -2361,17 +2333,11 @@ turret_target_flag( turrettarget ) if ( isdefined( turrettarget ) && isdefined( turrettarget.origin ) ) { -/# assert( isdefined( turrettarget.origin ), "turrettarget.origin is undefined after isdefined check" ); -#/ self.turret_last_pos = turrettarget.origin + vectorscale( ( 0, 0, 1 ), 40.0 ); -/# assert( isdefined( self.turret_last_pos ), "self.turret_last_pos is undefined after setting it #1" ); -#/ self setturrettargetvec( self.turret_last_pos ); -/# assert( isdefined( self.turret_last_pos ), "self.turret_last_pos is undefined after setting it #2" ); -#/ debug_print3d_simple( "Turret target lost at: " + self.turret_last_pos, self, vectorscale( ( 0, 0, -1 ), 70.0 ), 60 ); self.targetlost = 1; } diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_helicopter_guard.gsc b/MP/Core/maps/mp/killstreaks/_helicopter_guard.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_helicopter_guard.gsc rename to MP/Core/maps/mp/killstreaks/_helicopter_guard.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_helicopter_gunner.gsc b/MP/Core/maps/mp/killstreaks/_helicopter_gunner.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_helicopter_gunner.gsc rename to MP/Core/maps/mp/killstreaks/_helicopter_gunner.gsc index 98cc29e..03bcdc5 100644 --- a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_helicopter_gunner.gsc +++ b/MP/Core/maps/mp/killstreaks/_helicopter_gunner.gsc @@ -62,9 +62,8 @@ init() heli_gunner_killstreak( hardpointtype ) { -/# assert( hardpointtype == "helicopter_player_gunner_mp" ); -#/ + if ( !isdefined( level.heli_paths ) || !level.heli_paths.size ) { /# @@ -313,9 +312,7 @@ heli_fly_well( startnode, destnodes ) self endon( "crashing" ); self endon( "leaving" ); nextnode = getent( startnode.target, "targetname" ); -/# assert( isdefined( nextnode ), "Next node in path is undefined, but has targetname" ); -#/ self setspeed( 150, 80 ); self setvehgoalpos( nextnode.origin + self.zoffset, 1 ); diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_killstreak_weapons.gsc b/MP/Core/maps/mp/killstreaks/_killstreak_weapons.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_killstreak_weapons.gsc rename to MP/Core/maps/mp/killstreaks/_killstreak_weapons.gsc index c164418..fd26284 100644 --- a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_killstreak_weapons.gsc +++ b/MP/Core/maps/mp/killstreaks/_killstreak_weapons.gsc @@ -194,9 +194,8 @@ usecarriedkillstreakweapon( hardpointtype ) } else killstreak_id = self.m32id; -/# + assert( killstreak_id != -1 ); -#/ self.firedkillstreakweapon = 0; self setblockweaponpickup( hardpointtype, 1 ); @@ -231,9 +230,8 @@ usekillstreakweaponfromcrate( hardpointtype ) self.firedkillstreakweapon = 0; self setblockweaponpickup( hardpointtype, 1 ); killstreak_id = self maps\mp\killstreaks\_killstreakrules::killstreakstart( hardpointtype, self.team, 0, 0 ); -/# assert( killstreak_id != -1 ); -#/ + if ( issubstr( hardpointtype, "inventory" ) ) isfrominventory = 1; else diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_killstreakrules.gsc b/MP/Core/maps/mp/killstreaks/_killstreakrules.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_killstreakrules.gsc rename to MP/Core/maps/mp/killstreaks/_killstreakrules.gsc index efdc98a..0040d80 100644 --- a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_killstreakrules.gsc +++ b/MP/Core/maps/mp/killstreaks/_killstreakrules.gsc @@ -142,9 +142,8 @@ addkillstreaktorule( hardpointtype, rule, counttowards, checkagainst ) level.killstreaktype[hardpointtype] = []; keys = getarraykeys( level.killstreaktype[hardpointtype] ); -/# assert( isdefined( level.killstreakrules[rule] ) ); -#/ + if ( !isdefined( level.killstreaktype[hardpointtype][rule] ) ) level.killstreaktype[hardpointtype][rule] = spawnstruct(); @@ -154,14 +153,13 @@ addkillstreaktorule( hardpointtype, rule, counttowards, checkagainst ) killstreakstart( hardpointtype, team, hacked, displayteammessage ) { -/# assert( isdefined( team ), "team needs to be defined" ); -#/ + if ( self iskillstreakallowed( hardpointtype, team ) == 0 ) return -1; -/# + assert( isdefined( hardpointtype ) ); -#/ + if ( !isdefined( hacked ) ) hacked = 0; @@ -180,9 +178,8 @@ killstreakstart( hardpointtype, team, hacked, displayteammessage ) { if ( !level.killstreaktype[hardpointtype][key].counts ) continue; -/# + assert( isdefined( level.killstreakrules[key] ) ); -#/ level.killstreakrules[key].cur++; if ( level.teambased ) @@ -212,12 +209,8 @@ killstreakstart( hardpointtype, team, hacked, displayteammessage ) killstreakstop( hardpointtype, team, id ) { -/# assert( isdefined( team ), "team needs to be defined" ); -#/ -/# assert( isdefined( hardpointtype ) ); -#/ /# killstreak_debug_text( "Stopped killstreak: " + hardpointtype + " for team: " + team + " id: " + id ); #/ @@ -227,25 +220,17 @@ killstreakstop( hardpointtype, team, id ) { if ( !level.killstreaktype[hardpointtype][key].counts ) continue; -/# + assert( isdefined( level.killstreakrules[key] ) ); -#/ level.killstreakrules[key].cur--; -/# assert( level.killstreakrules[key].cur >= 0 ); -#/ + if ( level.teambased ) { -/# assert( isdefined( team ) ); -#/ -/# assert( isdefined( level.killstreakrules[key].curteam[team] ) ); -#/ level.killstreakrules[key].curteam[team]--; -/# assert( level.killstreakrules[key].curteam[team] >= 0 ); -#/ } } @@ -276,12 +261,8 @@ killstreakstop( hardpointtype, team, id ) iskillstreakallowed( hardpointtype, team ) { -/# assert( isdefined( team ), "team needs to be defined" ); -#/ -/# assert( isdefined( hardpointtype ) ); -#/ isallowed = 1; keys = getarraykeys( level.killstreaktype[hardpointtype] ); @@ -374,7 +355,7 @@ killstreak_debug_text( text ) if ( isdefined( level.killstreak_rule_debug ) ) { if ( level.killstreak_rule_debug == 1.0 ) - iprintln( "KSR: " + text + "\n" ); + iprintln( "KSR: " + text + "\\n" ); else if ( level.killstreak_rule_debug == 2.0 ) iprintlnbold( "KSR: " + text ); } diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_killstreaks.gsc b/MP/Core/maps/mp/killstreaks/_killstreaks.gsc similarity index 98% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_killstreaks.gsc rename to MP/Core/maps/mp/killstreaks/_killstreaks.gsc index 8a38440..5a78922 100644 --- a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_killstreaks.gsc +++ b/MP/Core/maps/mp/killstreaks/_killstreaks.gsc @@ -87,15 +87,9 @@ init() registerkillstreak( killstreaktype, killstreakweapon, killstreakmenuname, killstreakusagekey, killstreakusefunction, killstreakdelaystreak, weaponholdallowed, killstreakstatsname ) { -/# assert( isdefined( killstreaktype ), "Can not register a killstreak without a valid type name." ); -#/ -/# assert( !isdefined( level.killstreaks[killstreaktype] ), "Killstreak " + killstreaktype + " already registered" ); -#/ -/# assert( isdefined( killstreakusefunction ), "No use function defined for killstreak " + killstreaktype ); -#/ level.killstreaks[killstreaktype] = spawnstruct(); level.killstreaks[killstreaktype].killstreaklevel = int( tablelookup( "mp/statstable.csv", 4, killstreakmenuname, 5 ) ); level.killstreaks[killstreaktype].momentumcost = int( tablelookup( "mp/statstable.csv", 4, killstreakmenuname, 16 ) ); @@ -111,9 +105,7 @@ registerkillstreak( killstreaktype, killstreakweapon, killstreakmenuname, killst if ( isdefined( killstreakweapon ) ) { -/# assert( !isdefined( level.killstreakweapons[killstreakweapon] ), "Can not have a weapon associated with multiple killstreaks." ); -#/ precacheitem( killstreakweapon ); level.killstreaks[killstreaktype].weapon = killstreakweapon; level.killstreakweapons[killstreakweapon] = killstreaktype; @@ -131,12 +123,8 @@ registerkillstreak( killstreaktype, killstreakweapon, killstreakmenuname, killst registerkillstreakstrings( killstreaktype, receivedtext, notusabletext, inboundtext, inboundnearplayertext ) { -/# assert( isdefined( killstreaktype ), "Can not register a killstreak without a valid type name." ); -#/ -/# assert( isdefined( level.killstreaks[killstreaktype] ), "Killstreak needs to be registered before calling registerKillstreakStrings." ); -#/ level.killstreaks[killstreaktype].receivedtext = receivedtext; level.killstreaks[killstreaktype].notavailabletext = notusabletext; level.killstreaks[killstreaktype].inboundtext = inboundtext; @@ -157,12 +145,8 @@ registerkillstreakstrings( killstreaktype, receivedtext, notusabletext, inboundt registerkillstreakdialog( killstreaktype, receiveddialog, friendlystartdialog, friendlyenddialog, enemystartdialog, enemyenddialog, dialog ) { -/# assert( isdefined( killstreaktype ), "Can not register a killstreak without a valid type name." ); -#/ -/# assert( isdefined( level.killstreaks[killstreaktype] ), "Killstreak needs to be registered before calling registerKillstreakDialog." ); -#/ precachestring( istring( receiveddialog ) ); level.killstreaks[killstreaktype].informdialog = receiveddialog; game["dialog"][killstreaktype + "_start"] = friendlystartdialog; @@ -174,12 +158,9 @@ registerkillstreakdialog( killstreaktype, receiveddialog, friendlystartdialog, f registerkillstreakaltweapon( killstreaktype, weapon ) { -/# assert( isdefined( killstreaktype ), "Can not register a killstreak without a valid type name." ); -#/ -/# assert( isdefined( level.killstreaks[killstreaktype] ), "Killstreak needs to be registered before calling registerKillstreakAltWeapon." ); -#/ + if ( level.killstreaks[killstreaktype].weapon == weapon ) return; @@ -194,12 +175,9 @@ registerkillstreakaltweapon( killstreaktype, weapon ) registerkillstreakremoteoverrideweapon( killstreaktype, weapon ) { -/# assert( isdefined( killstreaktype ), "Can not register a killstreak without a valid type name." ); -#/ -/# assert( isdefined( level.killstreaks[killstreaktype] ), "Killstreak needs to be registered before calling registerKillstreakAltWeapon." ); -#/ + if ( level.killstreaks[killstreaktype].weapon == weapon ) return; @@ -228,12 +206,8 @@ iskillstreakremoteoverrideweapon( killstreaktype, weapon ) registerkillstreakdevdvar( killstreaktype, dvar ) { -/# assert( isdefined( killstreaktype ), "Can not register a killstreak without a valid type name." ); -#/ -/# assert( isdefined( level.killstreaks[killstreaktype] ), "Killstreak needs to be registered before calling registerKillstreakDevDvar." ); -#/ level.killstreaks[killstreaktype].devdvar = dvar; } @@ -267,9 +241,7 @@ getkillstreakbymenuname( killstreak ) getkillstreakmenuname( killstreaktype ) { -/# assert( isdefined( level.killstreaks[killstreaktype] ) ); -#/ return level.killstreaks[killstreaktype].menuname; } @@ -309,13 +281,13 @@ givekillstreakifstreakcountmatches( index, killstreak, streakcount ) pixbeginevent( "giveKillstreakIfStreakCountMatches" ); /# if ( !isdefined( killstreak ) ) - println( "Killstreak Undefined.\n" ); + println( "Killstreak Undefined.\\n" ); if ( isdefined( killstreak ) ) - println( "Killstreak listed as." + killstreak + "\n" ); + println( "Killstreak listed as." + killstreak + "\\n" ); if ( !iskillstreakavailable( killstreak ) ) - println( "Killstreak Not Available.\n" ); + println( "Killstreak Not Available.\\n" ); #/ if ( self.pers["killstreaksEarnedThisKillstreak"] > index && isroundbased() ) hasalreadyearnedkillstreak = 1; @@ -731,11 +703,7 @@ changekillstreakquantity( killstreakweapon, delta ) previousquantity = quantity; if ( delta < 0 ) - { -/# assert( quantity > 0 ); -#/ - } quantity += delta; @@ -951,9 +919,8 @@ getkillstreakweapon( killstreak ) { if ( !isdefined( killstreak ) ) return "none"; -/# + assert( isdefined( level.killstreaks[killstreak] ) ); -#/ return level.killstreaks[killstreak].weapon; } @@ -964,9 +931,8 @@ getkillstreakmomentumcost( killstreak ) if ( !isdefined( killstreak ) ) return 0; -/# + assert( isdefined( level.killstreaks[killstreak] ) ); -#/ return level.killstreaks[killstreak].momentumcost; } @@ -1051,9 +1017,9 @@ trackweaponusage() else self.lastnonkillstreakweapon = "knife_mp"; } -/# + assert( self.lastnonkillstreakweapon != "none" ); -#/ + for (;;) { currentweapon = self getcurrentweapon(); @@ -1206,33 +1172,33 @@ getxpamountforkillstreak( killstreaktype ) switch ( level.killstreaks[killstreaktype].killstreaklevel ) { - case "4": - case "3": - case "2": - case "1": + case 4: + case 3: + case 2: + case 1: xpamount = 100; break; - case "5": + case 5: xpamount = 150; break; - case "7": - case "6": + case 7: + case 6: xpamount = 200; break; - case "8": + case 8: xpamount = 250; break; - case "9": + case 9: xpamount = 300; break; - case "11": - case "10": + case 11: + case 10: xpamount = 350; break; - case "15": - case "14": - case "13": - case "12": + case 15: + case 14: + case 13: + case 12: xpamount = 500; break; } @@ -1242,9 +1208,7 @@ getxpamountforkillstreak( killstreaktype ) triggerkillstreak( killstreaktype, isfrominventory ) { -/# assert( isdefined( level.killstreaks[killstreaktype].usefunction ), "No use function defined for killstreak " + killstreaktype ); -#/ self.usingkillstreakfrominventory = isfrominventory; if ( level.infinalkillcam ) @@ -1298,9 +1262,8 @@ isweaponassociatedwithkillstreak( weapon ) getfirstvalidkillstreakaltweapon( killstreaktype ) { -/# assert( isdefined( level.killstreaks[killstreaktype] ), "Killstreak not registered." ); -#/ + if ( isdefined( level.killstreaks[killstreaktype].altweapons ) ) { for ( i = 0; i < level.killstreaks[killstreaktype].altweapons.size; i++ ) @@ -1415,9 +1378,8 @@ playkillstreakreadydialog( killstreaktype ) getkillstreakinformdialog( killstreaktype ) { -/# assert( isdefined( level.killstreaks[killstreaktype].informdialog ) ); -#/ + if ( isdefined( level.killstreaks[killstreaktype].informdialog ) ) return level.killstreaks[killstreaktype].informdialog; @@ -1440,9 +1402,7 @@ playkillstreakenddialog( killstreaktype, team ) getkillstreakusagebykillstreak( killstreaktype ) { -/# assert( isdefined( level.killstreaks[killstreaktype] ), "Killstreak needs to be registered before calling getKillstreakUsage." ); -#/ return getkillstreakusage( level.killstreaks[killstreaktype].usagekey ); } @@ -1526,9 +1486,7 @@ onjoinedteam() createkillstreaktimerforteam( killstreaktype, xposition, team ) { -/# assert( isdefined( level.killstreak_timers[team] ) ); -#/ killstreaktimer = spawnstruct(); killstreaktimer.team = team; killstreaktimer.icon = createservericon( level.killstreaks[killstreaktype].iconmaterial, 36, 36, team ); @@ -1591,10 +1549,8 @@ getkillstreaktimerforkillstreak( team, killstreaktype, duration ) { killstreakslot = i; break; - continue; } - - if ( !isdefined( killstreaktimer.killstreaktype ) && !isdefined( killstreakslot ) ) + else if ( !isdefined( killstreaktimer.killstreaktype ) && !isdefined( killstreakslot ) ) killstreakslot = i; } @@ -1795,9 +1751,8 @@ killstreak_data_dump() if ( isdefined( data.altweapons ) ) { -/# assert( data.altweapons.size <= 4 ); -#/ + for ( alt = 0; alt < data.altweapons.size; alt++ ) print( data.altweapons[alt] + "," ); } @@ -1812,9 +1767,7 @@ killstreak_data_dump() if ( isdefined( type_data ) ) { -/# assert( type_data.size < 4 ); -#/ type_keys = getarraykeys( type_data ); while ( type < type_keys.size ) diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_missile_drone.gsc b/MP/Core/maps/mp/killstreaks/_missile_drone.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_missile_drone.gsc rename to MP/Core/maps/mp/killstreaks/_missile_drone.gsc index 3474b46..3a95c7b 100644 --- a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_missile_drone.gsc +++ b/MP/Core/maps/mp/killstreaks/_missile_drone.gsc @@ -36,9 +36,7 @@ init() missile_drone_killstreak( weaponname ) { -/# assert( weaponname == "missile_drone_mp" || weaponname == "inventory_missile_drone_mp" ); -#/ level.missile_drone_origin = level.mapcenter + ( 0, 0, level.missile_drone_flyheight ); hardpointtype = "missile_drone_mp"; result = usemissiledrone( hardpointtype ); @@ -61,9 +59,8 @@ usemissiledrone( hardpointtype ) if ( ismissiledroneweapon( currentweapon ) ) missileweapon = currentweapon; -/# + assert( isdefined( missileweapon ) ); -#/ notifystring = self waittill_any_return( "weapon_change", "grenade_fire", "death" ); if ( notifystring == "weapon_change" || notifystring == "death" ) @@ -547,16 +544,12 @@ get_array_sorted_dot_prod( array, mincos ) { org = self.origin; angles = self getplayerangles(); -/# assert( isdefined( angles ) ); -#/ } else { org = self.origin; -/# assert( isdefined( self.angles ) ); -#/ angles = self.angles; } @@ -566,22 +559,13 @@ get_array_sorted_dot_prod( array, mincos ) for ( i = 0; i < array.size; i++ ) { -/# assert( isdefined( forwardvec ) ); -#/ -/# assert( isdefined( array[i] ) ); -#/ -/# assert( isdefined( array[i].origin ) ); -#/ -/# assert( isdefined( org ) ); -#/ cosa = vectordot( forwardvec, vectornormalize( array[i].origin - org ) ); -/# assert( isdefined( cosa ) ); -#/ + if ( isdefined( mincos ) && cosa < mincos ) continue; diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_missile_swarm.gsc b/MP/Core/maps/mp/killstreaks/_missile_swarm.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_missile_swarm.gsc rename to MP/Core/maps/mp/killstreaks/_missile_swarm.gsc index 4f84c7a..96b8013 100644 --- a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_missile_swarm.gsc +++ b/MP/Core/maps/mp/killstreaks/_missile_swarm.gsc @@ -34,9 +34,7 @@ init() swarm_killstreak( hardpointtype ) { -/# assert( hardpointtype == "missile_swarm_mp" ); -#/ level.missile_swarm_origin = level.mapcenter + ( 0, 0, level.missile_swarm_flyheight ); if ( level.script == "mp_drone" ) @@ -277,9 +275,8 @@ swarm_think( owner, killstreak_id ) while ( gettime() < end_time ) { -/# assert( level.missile_swarm_count >= 0 ); -#/ + if ( level.missile_swarm_count >= level.missile_swarm_max ) { wait 0.5; diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_planemortar.gsc b/MP/Core/maps/mp/killstreaks/_planemortar.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_planemortar.gsc rename to MP/Core/maps/mp/killstreaks/_planemortar.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_qrdrone.gsc b/MP/Core/maps/mp/killstreaks/_qrdrone.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_qrdrone.gsc rename to MP/Core/maps/mp/killstreaks/_qrdrone.gsc index 66e0598..a43c838 100644 --- a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_qrdrone.gsc +++ b/MP/Core/maps/mp/killstreaks/_qrdrone.gsc @@ -737,10 +737,9 @@ qrdrone_damagewatcher() self.owner sendkillstreakdamageevent( 200 ); self qrdrone_death( attacker, weapon, dir, mod ); return; - continue; } - - qrdrone_update_damage_fx( float( damage_taken ) / 225 ); + else + qrdrone_update_damage_fx( float( damage_taken ) / 225 ); } } diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_radar.gsc b/MP/Core/maps/mp/killstreaks/_radar.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_radar.gsc rename to MP/Core/maps/mp/killstreaks/_radar.gsc index 332ab4c..1490b76 100644 --- a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_radar.gsc +++ b/MP/Core/maps/mp/killstreaks/_radar.gsc @@ -106,9 +106,7 @@ teamhassatellite( team ) useradaritem( hardpointtype, team, displaymessage ) { team = self.team; -/# assert( isdefined( level.players ) ); -#/ self maps\mp\killstreaks\_killstreaks::playkillstreakstartdialog( hardpointtype, team ); if ( level.teambased ) diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_rcbomb.gsc b/MP/Core/maps/mp/killstreaks/_rcbomb.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_rcbomb.gsc rename to MP/Core/maps/mp/killstreaks/_rcbomb.gsc index 57a6661..eb5122e 100644 --- a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_rcbomb.gsc +++ b/MP/Core/maps/mp/killstreaks/_rcbomb.gsc @@ -758,9 +758,8 @@ trigger_hurt_monitor() rcbomb_force_explode() { self endon( "death" ); -/# assert( self.targetname == "rcbomb" ); -#/ + while ( !isdefined( self getseatoccupant( 0 ) ) ) wait 0.1; diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_remote_weapons.gsc b/MP/Core/maps/mp/killstreaks/_remote_weapons.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_remote_weapons.gsc rename to MP/Core/maps/mp/killstreaks/_remote_weapons.gsc index 72e8ced..f9d7125 100644 --- a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_remote_weapons.gsc +++ b/MP/Core/maps/mp/killstreaks/_remote_weapons.gsc @@ -66,9 +66,8 @@ initremoteweapon( weapon, weaponname ) setactiveremotecontrolledweapon( weapon ) { -/# assert( !isdefined( self.remoteweapon ), "Trying to activate remote weapon without cleaning up the current one" ); -#/ + if ( isdefined( self.remoteweapon ) ) return; @@ -129,9 +128,7 @@ collectweaponpings() if ( isdefined( self ) ) { -/# assert( isdefined( self.remoteweaponqueue ) ); -#/ best_weapon = undefined; foreach ( weapon in self.remoteweaponqueue ) @@ -151,9 +148,8 @@ collectweaponpings() watchremotecontrolledweapondeath() { self endon( "remove_remote_weapon" ); -/# assert( isdefined( self.remoteweapon ) ); -#/ + self.remoteweapon waittill( "death" ); if ( isdefined( self ) ) diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_remotemissile.gsc b/MP/Core/maps/mp/killstreaks/_remotemissile.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_remotemissile.gsc rename to MP/Core/maps/mp/killstreaks/_remotemissile.gsc index 9b8158a..661d8e8 100644 --- a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_remotemissile.gsc +++ b/MP/Core/maps/mp/killstreaks/_remotemissile.gsc @@ -837,9 +837,7 @@ targeting_hud_think( rocket ) if ( isalive( target ) ) { index = target.clientid; -/# assert( isdefined( index ) ); -#/ self.missile_target_icons[index].x = target.origin[0]; self.missile_target_icons[index].y = target.origin[1]; self.missile_target_icons[index].z = target.origin[2] + 47; diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_remotemortar.gsc b/MP/Core/maps/mp/killstreaks/_remotemortar.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_remotemortar.gsc rename to MP/Core/maps/mp/killstreaks/_remotemortar.gsc index 587da6e..d9ad383 100644 --- a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_remotemortar.gsc +++ b/MP/Core/maps/mp/killstreaks/_remotemortar.gsc @@ -76,9 +76,8 @@ init() remote_mortar_killstreak( hardpointtype ) { -/# assert( hardpointtype == "remote_mortar_mp" ); -#/ + if ( self maps\mp\killstreaks\_killstreakrules::iskillstreakallowed( hardpointtype, self.team ) == 0 ) return false; @@ -177,12 +176,8 @@ remote_killstreak_copilot( voice ) remote_killstreak_abort() { level endon( "remote_end" ); -/# assert( isdefined( self.owner ) ); -#/ -/# assert( isplayer( self.owner ) ); -#/ self.owner waittill_any( "disconnect", "joined_team", "joined_spectators" ); self thread remote_killstreak_end( 0, 1 ); } @@ -225,12 +220,9 @@ remote_owner_exit() remote_killstreak_game_end() { level endon( "remote_end" ); -/# assert( isdefined( self.owner ) ); -#/ -/# assert( isplayer( self.owner ) ); -#/ + level waittill( "game_ended" ); self thread remote_killstreak_end(); @@ -241,9 +233,7 @@ remote_mortar_spawn() self setclientflag( 1 ); self clientnotify( "reapfutz" ); remote = spawnplane( self, "script_model", level.remotemortarrig gettagorigin( "tag_origin" ) ); -/# assert( isdefined( remote ) ); -#/ remote setmodel( "veh_t6_drone_pegasus_mp" ); remote.targetname = "remote_mortar"; remote setowner( self ); diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_spyplane.gsc b/MP/Core/maps/mp/killstreaks/_spyplane.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_spyplane.gsc rename to MP/Core/maps/mp/killstreaks/_spyplane.gsc index 3af4df1..681b59d 100644 --- a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_spyplane.gsc +++ b/MP/Core/maps/mp/killstreaks/_spyplane.gsc @@ -269,9 +269,8 @@ addactivecounteruav() } else { -/# assert( isdefined( self.owner.entnum ) ); -#/ + if ( !isdefined( self.owner.entnum ) ) self.owner.entnum = self.owner getentitynumber(); @@ -303,9 +302,8 @@ addactiveuav() } else { -/# assert( isdefined( self.owner.entnum ) ); -#/ + if ( !isdefined( self.owner.entnum ) ) self.owner.entnum = self.owner getentitynumber(); @@ -324,9 +322,8 @@ addactivesatellite() } else { -/# assert( isdefined( self.owner.entnum ) ); -#/ + if ( !isdefined( self.owner.entnum ) ) self.owner.entnum = self.owner getentitynumber(); @@ -343,32 +340,28 @@ removeactiveuav() if ( isdefined( self.owner ) && self.owner.spawntime < self.birthtime ) { self.owner.activeuavs--; -/# assert( self.owner.activeuavs >= 0 ); -#/ + if ( self.owner.activeuavs < 0 ) self.owner.activeuavs = 0; } level.activeuavs[self.team]--; -/# assert( level.activeuavs[self.team] >= 0 ); -#/ + if ( level.activeuavs[self.team] < 0 ) level.activeuavs[self.team] = 0; } else if ( isdefined( self.owner ) ) { -/# assert( isdefined( self.owner.entnum ) ); -#/ + if ( !isdefined( self.owner.entnum ) ) self.owner.entnum = self.owner getentitynumber(); level.activeuavs[self.owner.entnum]--; -/# assert( level.activeuavs[self.owner.entnum] >= 0 ); -#/ + if ( level.activeuavs[self.owner.entnum] < 0 ) level.activeuavs[self.owner.entnum] = 0; } @@ -384,32 +377,28 @@ removeactivecounteruav() if ( isdefined( self.owner ) && self.owner.spawntime < self.birthtime ) { self.owner.activecounteruavs--; -/# assert( self.owner.activecounteruavs >= 0 ); -#/ + if ( self.owner.activecounteruavs < 0 ) self.owner.activecounteruavs = 0; } level.activecounteruavs[self.team]--; -/# assert( level.activecounteruavs[self.team] >= 0 ); -#/ + if ( level.activecounteruavs[self.team] < 0 ) level.activecounteruavs[self.team] = 0; } else if ( isdefined( self.owner ) ) { -/# assert( isdefined( self.owner.entnum ) ); -#/ + if ( !isdefined( self.owner.entnum ) ) self.owner.entnum = self.owner getentitynumber(); level.activecounteruavs[self.owner.entnum]--; -/# assert( level.activecounteruavs[self.owner.entnum] >= 0 ); -#/ + if ( level.activecounteruavs[self.owner.entnum] < 0 ) level.activecounteruavs[self.owner.entnum] = 0; } @@ -425,32 +414,28 @@ removeactivesatellite() if ( self.owner.spawntime < self.birthtime && isdefined( self.owner ) ) { self.owner.activesatellites--; -/# assert( self.owner.activesatellites >= 0 ); -#/ + if ( self.owner.activesatellites < 0 ) self.owner.activesatellites = 0; } level.activesatellites[self.team]--; -/# assert( level.activesatellites[self.team] >= 0 ); -#/ + if ( level.activesatellites[self.team] < 0 ) level.activesatellites[self.team] = 0; } else if ( isdefined( self.owner ) ) { -/# assert( isdefined( self.owner.entnum ) ); -#/ + if ( !isdefined( self.owner.entnum ) ) self.owner.entnum = self.owner getentitynumber(); level.activesatellites[self.owner.entnum]--; -/# assert( level.activesatellites[self.owner.entnum] >= 0 ); -#/ + if ( level.activesatellites[self.owner.entnum] < 0 ) level.activesatellites[self.owner.entnum] = 0; } @@ -1053,9 +1038,8 @@ updateplayersuavstatus() for ( i = 0; i < level.players.size; i++ ) { player = level.players[i]; -/# assert( isdefined( player.entnum ) ); -#/ + if ( !isdefined( player.entnum ) ) player.entnum = player getentitynumber(); diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_straferun.gsc b/MP/Core/maps/mp/killstreaks/_straferun.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_straferun.gsc rename to MP/Core/maps/mp/killstreaks/_straferun.gsc index 4f4ff78..6012dbf 100644 --- a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_straferun.gsc +++ b/MP/Core/maps/mp/killstreaks/_straferun.gsc @@ -234,11 +234,8 @@ watchforotherkillstreaks() attacker maps\mp\_challenges::addflyswatterstat( hardpointtype, self ); return; } - - continue; } - - if ( hardpointtype == "missile_swarm_mp" ) + else if ( hardpointtype == "missile_swarm_mp" ) { if ( self.owner isenemyplayer( attacker ) ) self.leavenexttime = 1; @@ -357,7 +354,7 @@ startstrafe() if ( isdefined( self.strafing ) ) { - iprintlnbold( "TRYING TO STRAFE WHEN ALREADY STRAFING!\n" ); + iprintlnbold( "TRYING TO STRAFE WHEN ALREADY STRAFING!\\n" ); return; } diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_supplycrate.gsc b/MP/Core/maps/mp/killstreaks/_supplycrate.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_supplycrate.gsc rename to MP/Core/maps/mp/killstreaks/_supplycrate.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_supplydrop.gsc b/MP/Core/maps/mp/killstreaks/_supplydrop.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_supplydrop.gsc rename to MP/Core/maps/mp/killstreaks/_supplydrop.gsc index e0cadfc..b97a4a9 100644 --- a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_supplydrop.gsc +++ b/MP/Core/maps/mp/killstreaks/_supplydrop.gsc @@ -262,15 +262,9 @@ registercratetype( category, type, name, weight, hint, hint_gambler, sharestat, getrandomcratetype( category, gambler_crate_name ) { -/# assert( isdefined( level.cratetypes ) ); -#/ -/# assert( isdefined( level.cratetypes[category] ) ); -#/ -/# assert( isdefined( level.cratecategoryweights[category] ) ); -#/ typekey = undefined; cratetypestart = 0; randomweightend = randomintrange( 1, level.cratecategoryweights[category] + 1 ); @@ -474,7 +468,7 @@ givecrateammo( ammo ) case "m220_tow_mp": case "m202_flash_mp": case "inventory_supplydrop_mp": - continue; + break; case "sticky_grenade_mp": case "satchel_charge_mp": case "hatchet_mp": @@ -490,7 +484,7 @@ givecrateammo( ammo ) if ( stock < maxammo ) self setweaponammostock( weapon, maxammo ); - continue; + break; case "willy_pete_mp": case "tabun_gas_mp": case "proximity_grenade_mp": @@ -507,10 +501,10 @@ givecrateammo( ammo ) if ( stock < maxammo ) self setweaponammostock( weapon, maxammo ); - continue; + break; default: self givemaxammo( weapon ); - continue; + break; } } } @@ -557,11 +551,8 @@ usesupplydropmarker( package_contents_id ) return true; } -issupplydropgrenadeallowed( hardpointtype, killstreakweapon ) +issupplydropgrenadeallowed( hardpointtype, killstreakweapon = hardpointtype ) { - if ( !isdefined( killstreakweapon ) ) - killstreakweapon = hardpointtype; - if ( self maps\mp\killstreaks\_killstreakrules::iskillstreakallowed( hardpointtype, self.team ) == 0 ) { self switchtoweapon( self getlastweapon() ); @@ -866,7 +857,7 @@ geticonforcrate() icon = level.killstreakicons[killstreak]; } - asm_jump( loc_5A1C ); + break; case "weapon": switch ( self.cratetype.name ) { @@ -1138,11 +1129,8 @@ cratespawn( category, owner, team, drop_origin, drop_angle ) return crate; } -cratedelete( drop_all_to_ground ) +cratedelete( drop_all_to_ground = 1 ) { - if ( !isdefined( drop_all_to_ground ) ) - drop_all_to_ground = 1; - if ( isdefined( self.friendlyobjid ) ) { objective_delete( self.friendlyobjid ); diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_turret_killstreak.gsc b/MP/Core/maps/mp/killstreaks/_turret_killstreak.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/killstreaks/_turret_killstreak.gsc rename to MP/Core/maps/mp/killstreaks/_turret_killstreak.gsc index f4949d4..04c0b56 100644 --- a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_turret_killstreak.gsc +++ b/MP/Core/maps/mp/killstreaks/_turret_killstreak.gsc @@ -1813,23 +1813,23 @@ microwave_play_fx( trace, traceright, traceleft, origin ) { switch ( i ) { - case "0": + case 0: playfxontag( level.auto_turret_settings["microwave"].fx, self, "tag_fx11" ); wait 0.05; break; - case "1": + case 1: break; - case "2": + case 2: playfxontag( level.auto_turret_settings["microwave"].fx, self, "tag_fx32" ); wait 0.05; break; - case "3": + case 3: playfxontag( level.auto_turret_settings["microwave"].fx, self, "tag_fx42" ); wait 0.05; playfxontag( level.auto_turret_settings["microwave"].fx, self, "tag_fx43" ); wait 0.05; break; - case "4": + case 4: playfxontag( level.auto_turret_settings["microwave"].fx, self, "tag_fx53" ); wait 0.05; break; @@ -1840,21 +1840,21 @@ microwave_play_fx( trace, traceright, traceleft, origin ) { switch ( i ) { - case "0": + case 0: break; - case "1": + case 1: playfxontag( level.auto_turret_settings["microwave"].fx, self, "tag_fx22" ); wait 0.05; break; - case "2": + case 2: playfxontag( level.auto_turret_settings["microwave"].fx, self, "tag_fx33" ); wait 0.05; break; - case "3": + case 3: playfxontag( level.auto_turret_settings["microwave"].fx, self, "tag_fx44" ); wait 0.05; break; - case "4": + case 4: playfxontag( level.auto_turret_settings["microwave"].fx, self, "tag_fx54" ); wait 0.05; playfxontag( level.auto_turret_settings["microwave"].fx, self, "tag_fx55" ); @@ -1867,26 +1867,26 @@ microwave_play_fx( trace, traceright, traceleft, origin ) { switch ( i ) { - case "0": - continue; - case "1": + case 0: + break; + case 1: playfxontag( level.auto_turret_settings["microwave"].fx, self, "tag_fx21" ); wait 0.05; - continue; - case "2": + break; + case 2: playfxontag( level.auto_turret_settings["microwave"].fx, self, "tag_fx31" ); wait 0.05; - continue; - case "3": + break; + case 3: playfxontag( level.auto_turret_settings["microwave"].fx, self, "tag_fx41" ); wait 0.05; - continue; - case "4": + break; + case 4: playfxontag( level.auto_turret_settings["microwave"].fx, self, "tag_fx51" ); wait 0.05; playfxontag( level.auto_turret_settings["microwave"].fx, self, "tag_fx52" ); wait 0.05; - continue; + break; } } } diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_bridge.gsc b/MP/Core/maps/mp/mp_bridge.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_bridge.gsc rename to MP/Core/maps/mp/mp_bridge.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_carrier.gsc b/MP/Core/maps/mp/mp_carrier.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_carrier.gsc rename to MP/Core/maps/mp/mp_carrier.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_castaway.gsc b/MP/Core/maps/mp/mp_castaway.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_castaway.gsc rename to MP/Core/maps/mp/mp_castaway.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_concert.gsc b/MP/Core/maps/mp/mp_concert.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_concert.gsc rename to MP/Core/maps/mp/mp_concert.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_dig.gsc b/MP/Core/maps/mp/mp_dig.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_dig.gsc rename to MP/Core/maps/mp/mp_dig.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_dockside.gsc b/MP/Core/maps/mp/mp_dockside.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_dockside.gsc rename to MP/Core/maps/mp/mp_dockside.gsc diff --git a/MP/Core/maps/mp/mp_dockside_crane.gsc b/MP/Core/maps/mp/mp_dockside_crane.gsc new file mode 100644 index 0000000..8b67af8 --- /dev/null +++ b/MP/Core/maps/mp/mp_dockside_crane.gsc @@ -0,0 +1,730 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\_tacticalinsertion; +#include maps\mp\killstreaks\_rcbomb; +#include maps\mp\gametypes\_weaponobjects; +#include maps\mp\gametypes\ctf; +#include maps\mp\gametypes\_gameobjects; +#include maps\mp\killstreaks\_supplydrop; + +init() +{ + precachemodel( "p6_dockside_container_lrg_white" ); + crane_dvar_init(); + level.crate_models = []; + level.crate_models[0] = "p6_dockside_container_lrg_red"; + level.crate_models[1] = "p6_dockside_container_lrg_blue"; + level.crate_models[2] = "p6_dockside_container_lrg_white"; + level.crate_models[3] = "p6_dockside_container_lrg_orange"; + claw = getent( "claw_base", "targetname" ); + claw.z_upper = claw.origin[2]; + claw thread sound_wires_move(); + arms_y = getentarray( "claw_arm_y", "targetname" ); + arms_z = getentarray( "claw_arm_z", "targetname" ); + claw.arms = arraycombine( arms_y, arms_z, 1, 0 ); + + foreach ( arm_z in arms_z ) + { + arm_y = getclosest( arm_z.origin, arms_y ); + arm_z.parent = arm_y; + } + + foreach ( arm_y in arms_y ) + arm_y.parent = claw; + + claw claw_link_arms( "claw_arm_y" ); + claw claw_link_arms( "claw_arm_z" ); + crates = getentarray( "crate", "targetname" ); + array_thread( crates, ::sound_pit_move ); + crate_data = []; + + for ( i = 0; i < crates.size; i++ ) + { + crates[i] disconnectpaths(); + data = spawnstruct(); + data.origin = crates[i].origin; + data.angles = crates[i].angles; + crate_data[i] = data; + } + + rail = getent( "crane_rail", "targetname" ); + rail thread sound_ring_move(); + rail.roller = getent( "crane_roller", "targetname" ); + rail.roller.wheel = getent( "crane_wheel", "targetname" ); + claw.wires = getentarray( "crane_wire", "targetname" ); + claw.z_wire_max = rail.roller.wheel.origin[2] - 50; + + foreach ( wire in claw.wires ) + { + wire linkto( claw ); + + if ( wire.origin[2] > claw.z_wire_max ) + wire ghost(); + } + + placements = getentarray( "crate_placement", "targetname" ); + + foreach ( placement in placements ) + { + placement.angles += vectorscale( ( 0, 1, 0 ), 90.0 ); + crates[crates.size] = spawn( "script_model", placement.origin ); + } + + triggers = getentarray( "crate_kill_trigger", "targetname" ); + + foreach ( crate in crates ) + { + crate.kill_trigger = getclosest( crate.origin, triggers ); + crate.kill_trigger.origin = crate.origin - vectorscale( ( 0, 0, 1 ), 5.0 ); + crate.kill_trigger enablelinkto(); + crate.kill_trigger linkto( crate ); + + if ( crate.model != "" ) + { + crate.kill_trigger.active = 1; + continue; + } + + crate.kill_trigger.active = 0; + } + + trigger = getclosest( claw.origin, triggers ); + trigger enablelinkto(); + trigger linkto( claw ); + trigger.active = 1; + placements = array_randomize( placements ); + level thread crane_think( claw, rail, crates, crate_data, placements ); +} + +crane_dvar_init() +{ + set_dvar_float_if_unset( "scr_crane_claw_move_time", "5" ); + set_dvar_float_if_unset( "scr_crane_crate_lower_time", "5" ); + set_dvar_float_if_unset( "scr_crane_crate_raise_time", "5" ); + set_dvar_float_if_unset( "scr_crane_arm_y_move_time", "3" ); + set_dvar_float_if_unset( "scr_crane_arm_z_move_time", "3" ); + set_dvar_float_if_unset( "scr_crane_claw_drop_speed", "25" ); + set_dvar_float_if_unset( "scr_crane_claw_drop_time_min", "5" ); +} + +wire_render() +{ + self endon( "movedone" ); + + for (;;) + { + wait 0.05; + + foreach ( wire in self.wires ) + { + if ( wire.origin[2] > self.z_wire_max ) + { + wire ghost(); + continue; + } + + wire show(); + } + } +} + +crane_think( claw, rail, crates, crate_data, placements ) +{ + wait 1; + claw arms_open(); + + for (;;) + { + for ( i = 0; i < crates.size - placements.size; i++ ) + { + crate = getclosest( crate_data[i].origin, crates ); + rail crane_move( claw, crate_data[i], -318 ); + level notify( "wires_move" ); + claw claw_crate_grab( crate, 318 ); + lower = 1; + target = ( i + 1 ) % ( crates.size - placements.size ); + target_crate = getclosest( crate_data[target].origin, crates ); + + if ( cointoss() ) + { + for ( placement_index = 0; placement_index < placements.size; placement_index++ ) + { + placement = placements[placement_index]; + + if ( !isdefined( placement.crate ) ) + { + lower = 0; + break; + } + } + } + + if ( !lower ) + { + z_dist = crate.origin[2] - placement.origin[2] - 33; + rail crane_move( claw, placement, z_dist * -1 ); + level notify( "wires_move" ); + placement.crate = crate; + } + else + { + rail crane_move( claw, crate_data[target], -181 ); + level notify( "wires_move" ); + } + + claw claw_crate_move( crate ); + + if ( lower ) + crate crate_lower( target_crate, crate_data[target] ); + + crate = target_crate; + target = ( i + 2 ) % ( crates.size - placements.size ); + target_crate = getclosest( crate_data[target].origin, crates ); + + if ( !lower ) + { + crate = crates[3 + placement_index]; + crate.origin = target_crate.origin - vectorscale( ( 0, 0, 1 ), 137.0 ); + crate.angles = target_crate.angles; + wait 0.25; + + claw waittill( "movedone" ); + } + + crate crate_raise( target_crate, crate_data[target] ); + rail crane_move( claw, crate_data[target], -181 ); + level notify( "wires_move" ); + claw claw_crate_grab( target_crate, 181 ); + crate = target_crate; + target = ( i + 3 ) % ( crates.size - placements.size ); + rail crane_move( claw, crate_data[target], -318 ); + level notify( "wires_move" ); + claw claw_crate_drop( crate, crate_data[target] ); + } + } +} + +crane_move( claw, desired, z_dist ) +{ + self.roller linkto( self ); + self.roller.wheel linkto( self.roller ); + claw linkto( self.roller.wheel ); + goal = ( desired.origin[0], desired.origin[1], self.origin[2] ); + dir = vectornormalize( goal - self.origin ); + angles = vectortoangles( dir ); + angles = ( self.angles[0], angles[1] + 90, self.angles[2] ); + yawdiff = absangleclamp360( self.angles[1] - angles[1] ); + time = yawdiff / 25; + self rotateto( angles, time, time * 0.35, time * 0.45 ); + self thread physics_move(); + level notify( "wires_stop" ); + level notify( "ring_move" ); + + self waittill( "rotatedone" ); + + self.roller unlink(); + goal = ( desired.origin[0], desired.origin[1], self.roller.origin[2] ); + diff = distance2d( goal, self.roller.origin ); + speed = getdvarfloat( "scr_crane_claw_drop_speed" ); + time = diff / speed; + + if ( time < getdvarfloat( "scr_crane_claw_drop_time_min" ) ) + time = getdvarfloat( "scr_crane_claw_drop_time_min" ); + + self.roller moveto( goal, time, time * 0.25, time * 0.25 ); + self.roller thread physics_move(); + goal = ( desired.origin[0], desired.origin[1], self.roller.wheel.origin[2] ); + self.roller.wheel unlink(); + self.roller.wheel moveto( goal, time, time * 0.25, time * 0.25 ); + self.roller.wheel rotateto( desired.angles + vectorscale( ( 0, 1, 0 ), 90.0 ), time, time * 0.25, time * 0.25 ); + claw.z_initial = claw.origin[2]; + claw unlink(); + claw rotateto( desired.angles, time, time * 0.25, time * 0.25 ); + claw.goal = ( goal[0], goal[1], claw.origin[2] + z_dist ); + claw.time = time; + claw moveto( claw.goal, time, time * 0.25, time * 0.25 ); + level notify( "ring_stop" ); +} + +physics_move() +{ + self endon( "rotatedone" ); + self endon( "movedone" ); + + for (;;) + { + wait 0.05; + crates = getentarray( "care_package", "script_noteworthy" ); + + foreach ( crate in crates ) + { + if ( crate istouching( self ) ) + crate physicslaunch( crate.origin, ( 0, 0, 0 ) ); + } + } +} + +claw_crate_grab( crate, z_dist ) +{ + self thread wire_render(); + + self waittill( "movedone" ); + + level notify( "wires_stop" ); + self playsound( "amb_crane_arms_b" ); + self claw_z_arms( -33 ); + self playsound( "amb_crane_arms" ); + self arms_close( crate ); + crate movez( 33, getdvarfloat( "scr_crane_arm_z_move_time" ) ); + self claw_z_arms( 33 ); + crate linkto( self ); + self movez( z_dist, getdvarfloat( "scr_crane_claw_move_time" ) ); + self thread wire_render(); + level notify( "wires_move" ); + + self waittill( "movedone" ); + + self playsound( "amb_crane_arms" ); +} + +sound_wires_move() +{ + while ( true ) + { + level waittill( "wires_move" ); + + self playsound( "amb_crane_wire_start" ); + self playloopsound( "amb_crane_wire_lp" ); + + level waittill( "wires_stop" ); + + self playsound( "amb_crane_wire_end" ); + wait 0.1; + self stoploopsound( 0.2 ); + } +} + +sound_ring_move() +{ + while ( true ) + { + level waittill( "ring_move" ); + + self playsound( "amb_crane_ring_start" ); + self playloopsound( "amb_crane_ring_lp" ); + + level waittill( "ring_stop" ); + + self playsound( "amb_crane_ring_end" ); + wait 0.1; + self stoploopsound( 0.2 ); + } +} + +sound_pit_move() +{ + while ( true ) + { + level waittill( "pit_move" ); + + self playsound( "amb_crane_pit_start" ); + self playloopsound( "amb_crane_pit_lp" ); + + level waittill( "pit_stop" ); + + self playsound( "amb_crane_pit_end" ); + self stoploopsound( 0.2 ); + wait 0.2; + } +} + +claw_crate_move( crate, claw ) +{ + self thread wire_render(); + + self waittill( "movedone" ); + + crate unlink(); + self playsound( "amb_crane_arms_b" ); + level notify( "wires_stop" ); + crate movez( -33, getdvarfloat( "scr_crane_arm_z_move_time" ) ); + self claw_z_arms( -33 ); + self playsound( "amb_crane_arms_b" ); + playfxontag( level._effect["crane_dust"], crate, "tag_origin" ); + crate playsound( "amb_crate_drop" ); + self arms_open(); + level notify( "wires_move" ); + self claw_z_arms( 33 ); + z_dist = self.z_initial - self.origin[2]; + self movez( z_dist, getdvarfloat( "scr_crane_claw_move_time" ) ); + self thread wire_render(); +} + +claw_crate_drop( target, data ) +{ + target thread crate_drop_think( self ); + self thread wire_render(); + + self waittill( "claw_movedone" ); + + target unlink(); + level notify( "wires_stop" ); + self playsound( "amb_crane_arms_b" ); + target movez( -33, getdvarfloat( "scr_crane_arm_z_move_time" ) ); + self claw_z_arms( -33 ); + playfxontag( level._effect["crane_dust"], target, "tag_origin" ); + self playsound( "amb_crate_drop" ); + target notify( "claw_done" ); + self playsound( "amb_crane_arms" ); + self arms_open(); + level notify( "wires_move" ); + target.origin = data.origin; + self claw_z_arms( 33 ); + self playsound( "amb_crane_arms" ); + self movez( 318, getdvarfloat( "scr_crane_claw_move_time" ) ); + self thread wire_render(); + + self waittill( "movedone" ); +} + +crate_lower( lower, data ) +{ + z_dist = abs( self.origin[2] - lower.origin[2] ); + self movez( z_dist * -1, getdvarfloat( "scr_crane_crate_lower_time" ) ); + lower movez( z_dist * -1, getdvarfloat( "scr_crane_crate_lower_time" ) ); + level notify( "pit_move" ); + + lower waittill( "movedone" ); + + level notify( "pit_stop" ); + lower ghost(); + self.origin = data.origin; + wait 0.25; +} + +crate_raise( upper, data ) +{ + self crate_set_random_model( upper ); + self.kill_trigger.active = 1; + self.origin = ( data.origin[0], data.origin[1], self.origin[2] ); + self.angles = data.angles; + wait 0.2; + self show(); + z_dist = abs( upper.origin[2] - self.origin[2] ); + self movez( z_dist, getdvarfloat( "scr_crane_crate_raise_time" ) ); + upper movez( z_dist, getdvarfloat( "scr_crane_crate_raise_time" ) ); + level notify( "wires_stop" ); + level notify( "pit_move" ); + upper thread raise_think(); +} + +raise_think() +{ + self waittill( "movedone" ); + + level notify( "pit_stop" ); +} + +crate_set_random_model( other ) +{ + models = array_randomize( level.crate_models ); + + foreach ( model in models ) + { + if ( model == other.model ) + continue; + + self setmodel( model ); + return; + } +} + +arms_open() +{ + self claw_move_arms( -15 ); + self playsound( "amb_crane_arms" ); +} + +arms_close( crate ) +{ + self claw_move_arms( 15, crate ); + self playsound( "amb_crane_arms" ); +} + +claw_link_arms( name ) +{ + foreach ( arm in self.arms ) + { + if ( arm.targetname == name ) + arm linkto( arm.parent ); + } +} + +claw_unlink_arms( name ) +{ + foreach ( arm in self.arms ) + { + if ( arm.targetname == name ) + arm unlink(); + } +} + +claw_move_arms( dist, crate ) +{ + claw_unlink_arms( "claw_arm_y" ); + arms = []; + + foreach ( arm in self.arms ) + { + forward = anglestoforward( arm.angles ); + arm.goal = arm.origin + vectorscale( forward, dist ); + + if ( arm.targetname == "claw_arm_y" ) + { + arms[arms.size] = arm; + arm moveto( arm.goal, getdvarfloat( "scr_crane_arm_y_move_time" ) ); + } + } + + if ( dist > 0 ) + { + wait( getdvarfloat( "scr_crane_arm_y_move_time" ) / 2 ); + + foreach ( arm in self.arms ) + { + if ( arm.targetname == "claw_arm_y" ) + { + arm moveto( arm.goal, 0.1 ); + self playsound( "amb_crane_arms_b" ); + } + } + + wait 0.05; + playfxontag( level._effect["crane_spark"], crate, "tag_origin" ); + self playsound( "amb_arms_latch" ); + } + + assert( arms.size == 4 ); + waittill_multiple_ents( arms[0], "movedone", arms[1], "movedone", arms[2], "movedone", arms[3], "movedone" ); + + foreach ( arm in self.arms ) + arm.origin = arm.goal; + + self claw_link_arms( "claw_arm_y" ); +} + +claw_z_arms( z ) +{ + claw_unlink_arms( "claw_arm_z" ); + arms = []; + + foreach ( arm in self.arms ) + { + if ( arm.targetname == "claw_arm_z" ) + { + arms[arms.size] = arm; + arm movez( z, getdvarfloat( "scr_crane_arm_z_move_time" ) ); + } + } + + assert( arms.size == 4 ); + waittill_multiple_ents( arms[0], "movedone", arms[1], "movedone", arms[2], "movedone", arms[3], "movedone" ); + self claw_link_arms( "claw_arm_z" ); +} + +crate_drop_think( claw ) +{ + self endon( "claw_done" ); + self.disablefinalkillcam = 1; + claw thread claw_drop_think(); + corpse_delay = 0; + + for (;;) + { + wait 0.2; + entities = getdamageableentarray( self.origin, 200 ); + + foreach ( entity in entities ) + { + if ( !entity istouching( self.kill_trigger ) ) + continue; + + if ( isdefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" ) + { + entity maps\mp\_tacticalinsertion::destroy_tactical_insertion(); + continue; + } + + if ( !isalive( entity ) ) + continue; + + if ( isdefined( entity.targetname ) ) + { + if ( entity.targetname == "talon" ) + { + entity notify( "death" ); + continue; + } + else if ( entity.targetname == "rcbomb" ) + { + entity maps\mp\killstreaks\_rcbomb::rcbomb_force_explode(); + continue; + } + else if ( entity.targetname == "riotshield_mp" ) + { + entity dodamage( 1, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); + continue; + } + } + + if ( isdefined( entity.helitype ) && entity.helitype == "qrdrone" ) + { + watcher = entity.owner maps\mp\gametypes\_weaponobjects::getweaponobjectwatcher( "qrdrone" ); + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined ); + continue; + } + + if ( entity.classname == "grenade" ) + { + if ( !isdefined( entity.name ) ) + continue; + + if ( !isdefined( entity.owner ) ) + continue; + + if ( entity.name == "proximity_grenade_mp" ) + { + watcher = entity.owner getwatcherforweapon( entity.name ); + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined, "script_mover_mp" ); + continue; + } + + if ( !isweaponequipment( entity.name ) ) + continue; + + watcher = entity.owner getwatcherforweapon( entity.name ); + + if ( !isdefined( watcher ) ) + continue; + + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined, "script_mover_mp" ); + continue; + } + + if ( entity.classname == "auto_turret" ) + { + if ( !isdefined( entity.damagedtodeath ) || !entity.damagedtodeath ) + entity domaxdamage( self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); + + continue; + } + + entity dodamage( entity.health * 2, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); + + if ( isplayer( entity ) ) + { + claw thread claw_drop_pause(); + corpse_delay = gettime() + 3000; + } + } + + self destroy_supply_crates(); + + if ( gettime() > corpse_delay ) + self destroy_corpses(); + + if ( level.gametype == "ctf" ) + { + foreach ( flag in level.flags ) + { + if ( flag.visuals[0] istouching( self.kill_trigger ) ) + flag maps\mp\gametypes\ctf::returnflag(); + } + + continue; + } + + if ( level.gametype == "sd" && !level.multibomb ) + { + if ( level.sdbomb.visuals[0] istouching( self.kill_trigger ) ) + level.sdbomb maps\mp\gametypes\_gameobjects::returnhome(); + } + } +} + +claw_drop_think() +{ + self endon( "claw_pause" ); + + self waittill( "movedone" ); + + self notify( "claw_movedone" ); +} + +claw_drop_pause() +{ + self notify( "claw_pause" ); + self endon( "claw_pause" ); + z_diff = abs( self.goal[2] - self.origin[2] ); + frac = z_diff / 318; + time = self.time * frac; + + if ( time <= 0 ) + return; + + self moveto( self.origin, 0.01 ); + wait 3; + self thread claw_drop_think(); + self moveto( self.goal, time ); +} + +destroy_supply_crates() +{ + crates = getentarray( "care_package", "script_noteworthy" ); + + foreach ( crate in crates ) + { + if ( distancesquared( crate.origin, self.origin ) < 40000 ) + { + if ( crate istouching( self ) ) + { + playfx( level._supply_drop_explosion_fx, crate.origin ); + playsoundatposition( "wpn_grenade_explode", crate.origin ); + wait 0.1; + crate maps\mp\killstreaks\_supplydrop::cratedelete(); + } + } + } +} + +destroy_corpses() +{ + corpses = getcorpsearray(); + + for ( i = 0; i < corpses.size; i++ ) + { + if ( distancesquared( corpses[i].origin, self.origin ) < 40000 ) + corpses[i] delete(); + } +} + +getwatcherforweapon( weapname ) +{ + if ( !isdefined( self ) ) + return undefined; + + if ( !isplayer( self ) ) + return undefined; + + for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) + { + if ( self.weaponobjectwatcherarray[i].weapon != weapname ) + continue; + + return self.weaponobjectwatcherarray[i]; + } + + return undefined; +} diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_downhill.gsc b/MP/Core/maps/mp/mp_downhill.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_downhill.gsc rename to MP/Core/maps/mp/mp_downhill.gsc diff --git a/MP/Core/maps/mp/mp_downhill_cablecar.gsc b/MP/Core/maps/mp/mp_downhill_cablecar.gsc new file mode 100644 index 0000000..a86f131 --- /dev/null +++ b/MP/Core/maps/mp/mp_downhill_cablecar.gsc @@ -0,0 +1,718 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\killstreaks\_airsupport; +#include maps\mp\_events; +#include maps\mp\gametypes\_hostmigration; +#include maps\mp\_tacticalinsertion; +#include maps\mp\killstreaks\_rcbomb; +#include maps\mp\gametypes\_weaponobjects; +#include maps\mp\gametypes\ctf; +#include maps\mp\gametypes\_gameobjects; +#include maps\mp\killstreaks\_supplydrop; + +main() +{ + level.cablecartrack = []; + level.trackdistancestops = []; + level.distancetofirstrotate = 0; + precacheitem( "gondola_mp" ); + level.gondolasounds = []; + level.gondolasounds["tower_start"] = "veh_cable_car_roller_cross"; + level.gondolasounds["rollers_start"] = "veh_cable_car_start"; + level.gondolasounds["slow_down"] = "veh_cable_car_stop"; + level.gondolaloopsounds = []; + level.gondolaloopsounds["start"] = "veh_cable_car_move_loop"; + level.gondolaloopsounds["rollers_start"] = "veh_cable_car_move_loop"; + level.gondolaloopsounds["rollers_end"] = ""; + tracklength = createcablecarpath(); + assert( level.trackdistancestops.size == 2 ); + + if ( level.trackdistancestops.size == 2 ) + { + velocity = getdvarfloatdefault( "scr_cable_car_velocity", 100 ); + bottomoftracklength = level.trackdistancestops[1] - level.trackdistancestops[0]; + topoftracklength = tracklength - bottomoftracklength; + assert( topoftracklength < bottomoftracklength ); + extratrackrequired = bottomoftracklength - topoftracklength; + extratimerequired = extratrackrequired / velocity; + level.cablecartrack[level.cablecartrack.size - 1].movetime = extratimerequired; + level.cablecartrack[level.cablecartrack.size - 1].rotate = 1; + tracklength = bottomoftracklength * 2; + } + else + return; + + cablecars = getentarray( "cablecar", "targetname" ); + cablecarkilltrigger = getentarray( "cable_car_kill_trigger", "targetname" ); + assert( isdefined( cablecars ) ); + assert( isdefined( cablecarkilltrigger ) ); + level.cablecardefaultangle = cablecars[0].angles; + distancebetweencars = tracklength / cablecars.size; + + if ( getgametypesetting( "allowMapScripting" ) ) + currentdistanceforcar = 0; + else + currentdistanceforcar = distancebetweencars * 0.8; + + for ( i = 0; i < cablecars.size; i++ ) + { + cablecar = cablecars[i]; + cablecar thread waitthenplayfx( 0.1, level.cablecarlightsfx, "tag_origin" ); + cablecar.killtrigger = getclosest( cablecar.origin, cablecarkilltrigger ); + assert( isdefined( cablecar.killtrigger ) ); + cablecar.killtrigger enablelinkto(); + cablecar.killtrigger linkto( cablecar ); + cablecar setpointontrack( currentdistanceforcar, tracklength ); + currentdistanceforcar += distancebetweencars; +/# + debug_star( cablecar.origin, 120000, ( 1, 0, 1 ) ); +#/ + grip = spawn( "script_model", cablecar.origin ); + + if ( cablecar.nextnodeindex >= level.cablecartrack.size - 1 ) + grip.angles = vectortoangles( level.cablecartrack[cablecar.nextnodeindex - 1].origin - level.cablecartrack[cablecar.nextnodeindex].origin ); + else + { + if ( is_true( level.cablecartrack[cablecar.nextnodeindex].pause ) ) + carnode = level.cablecartrack[cablecar.nextnodeindex + 2]; + else + carnode = level.cablecartrack[cablecar.nextnodeindex]; + + grip.angles = vectortoangles( carnode.origin - cablecar.origin ); + } + + grip.origin -= ( 0, cos( grip.angles[1] ) * -12, 8 ); + grip setmodel( "dh_cable_car_top_piece" ); + cablecar.grip = grip; + + if ( getgametypesetting( "allowMapScripting" ) ) + { + level thread cablecarrun( cablecar ); + continue; + } + + cablecar.origin += ( 0, cos( cablecar.angles[1] ) * -15, -66.6 ); + cablecar disconnectpaths(); + } +} + +waitthenplayfx( time, fxnum, tag ) +{ + self endon( "death" ); + wait( time ); + + for (;;) + { + playfxontag( fxnum, self, tag ); + + level waittill( "host_migration_end" ); + } +} + +setpointontrack( distancealongtrack, tracklength ) +{ + pointontrack = level.cablecartrack[0].origin; + + while ( distancealongtrack > tracklength ) + distancealongtrack = tracklength * -1; + + remainingdistance = distancealongtrack; + + for ( i = 0; i < level.cablecartrack.size; i++ ) + { + cablecartracknode = level.cablecartrack[i]; + currentnodeisstop = is_true( cablecartracknode.pause ); + + if ( currentnodeisstop ) + { + velocity = getdvarfloatdefault( "scr_cable_car_velocity", 100 ); + remainingdistance -= 3 * velocity; + + if ( remainingdistance <= 0 ) + { + pointontrack = cablecartracknode.origin; + self.nextnodeindex = i; + self.needtopauseatstart = remainingdistance / velocity; + break; + } + } + + nextnodeisstop = 0; + + if ( level.cablecartrack.size > i + 1 ) + nextnodeisstop = is_true( level.cablecartrack[i + 1].pause ); + + currentnodeisstop = 0; + + if ( is_true( cablecartracknode.pause ) ) + currentnodeisstop = 1; + + distance = cablecartracknode.stepdistance; + + if ( nextnodeisstop || currentnodeisstop ) + distance *= 2; + + if ( !isdefined( distance ) ) + { + pointontrack = cablecartracknode.origin; + self.nextnodeindex = i; + break; + } + + if ( remainingdistance < distance ) + { + if ( distance > 0 ) + { + ratio = remainingdistance / distance; + pointontrack = getpointonline( cablecartracknode.origin, level.cablecartrack[i + 1].origin, ratio ); + } + + self.nextnodeindex = i; + break; + } + + remainingdistance -= distance; + } + + self.angles = level.cablecardefaultangle; + + if ( distancealongtrack < level.distancetofirstrotate ) + self.angles += vectorscale( ( 0, 1, 0 ), 180.0 ); + + self.origin = pointontrack; +} + +createcablecarpath( cablecar ) +{ + currentnode = getent( "cable_down_start", "targetname" ); + startorigin = currentnode.origin; + velocity = getdvarfloatdefault( "scr_cable_car_velocity", 100 ); + tracklength = 0; + previousnode = undefined; + movetime = -1; + + while ( isdefined( currentnode ) ) + { + cablecarnodestruct = spawnstruct(); + cablecarnodestruct.origin = currentnode.origin; + level.cablecartrack[level.cablecartrack.size] = cablecarnodestruct; + + if ( isdefined( currentnode.target ) ) + nextnode = getent( currentnode.target, "targetname" ); + + if ( !isdefined( nextnode ) ) + break; + + stepdistance = distance( currentnode.origin, nextnode.origin ); + cablecarnodestruct.stepdistance = stepdistance; + movetime = stepdistance / velocity; + assert( movetime > 0 ); + pauseratio = 1; + + if ( isdefined( nextnode.script_noteworthy ) && nextnode.script_noteworthy == "stop" ) + pauseratio *= 2; + + if ( isdefined( currentnode.script_noteworthy ) ) + { + if ( currentnode.script_noteworthy == "stop" ) + { + cablecarnodestruct.pause = 1; + tracklength += velocity * 3; + level.trackdistancestops[level.trackdistancestops.size] = tracklength; + pauseratio *= 2; + } + else if ( currentnode.script_noteworthy == "rotate" ) + cablecarnodestruct.rotate = 1; + else if ( currentnode.script_noteworthy == "forceorigin" ) + cablecarnodestruct.forceorigin = 1; + else + { + if ( isdefined( level.gondolasounds[currentnode.script_noteworthy] ) ) + cablecarnodestruct.playsound = level.gondolasounds[currentnode.script_noteworthy]; + + if ( isdefined( level.gondolaloopsounds[currentnode.script_noteworthy] ) ) + cablecarnodestruct.playloopsound = level.gondolaloopsounds[currentnode.script_noteworthy]; + } + } + + tracklength += stepdistance * pauseratio; + + if ( is_true( cablecarnodestruct.rotate ) ) + level.distancetofirstrotate = tracklength; + + cablecarnodestruct.movetime = movetime; + previousnode = currentnode; + currentnode = nextnode; + nextnode = undefined; + } + + return tracklength; +} + +watchpronetouch() +{ + for (;;) + { + self waittill( "touch", entity ); + + if ( isplayer( entity ) ) + { + if ( entity.origin[2] < 940 ) + { + if ( entity getstance() == "prone" ) + entity dodamage( entity.health * 2, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_HIT_BY_OBJECT", 0, "gondola_mp" ); + } + } + } +} + +cablecarrun( cablecar ) +{ + nextnodeindex = cablecar.nextnodeindex; + cablecar thread watchpronetouch(); + cablecar thread cablecar_move_think( cablecar.killtrigger, 1 ); + cablecar thread cablecar_ai_watch(); + cablecar.ismoving = 1; + grip = cablecar.grip; + firstmove = 1; + cablecar.hidden = 0; + grip.forceangles = 0; + + if ( isdefined( cablecar.needtopauseatstart ) ) + { + if ( cablecar.needtopauseatstart > 0 ) + wait( cablecar.needtopauseatstart ); + } + + for (;;) + { + for ( i = nextnodeindex; i < level.cablecartrack.size; i++ ) + { + nextnode = level.cablecartrack[i + 1]; + + if ( !isdefined( nextnode ) ) + nextnode = level.cablecartrack[0]; + + currentnode = level.cablecartrack[i]; + acceltime = 0; + deceltime = 0; + currentmovetime = currentnode.movetime; + + if ( isdefined( nextnode.pause ) || isdefined( currentnode ) && isdefined( currentnode.pause ) ) + { + currentmovetime *= 2; + + if ( isdefined( nextnode.pause ) ) + deceltime = currentmovetime - 0.1; + + if ( isdefined( currentnode ) && isdefined( currentnode.pause ) ) + acceltime = currentmovetime - 0.1; + } +/# + debug_star( nextnode.origin, ( 1, 1, 1 ), 1000 ); +#/ + if ( isdefined( currentnode ) ) + { + if ( isdefined( currentnode.playsound ) ) + cablecar playsound( currentnode.playsound ); + + if ( isdefined( currentnode.playloopsound ) ) + { + cablecar stoploopsound(); + cablecar playsound( "veh_cable_car_leave" ); + + if ( currentnode.playloopsound != "" ) + cablecar playloopsound( currentnode.playloopsound ); + } + } + + if ( isdefined( currentnode.rotate ) ) + { + cablecar hide(); + grip hide(); + cablecar.hidden = 1; + cablecar.origin += vectorscale( ( 0, 0, -1 ), 1000.0 ); + + if ( cablecar.angles[1] > 360 ) + cablecar.angles -= vectorscale( ( 0, 1, 0 ), 180.0 ); + else + cablecar.angles += vectorscale( ( 0, 1, 0 ), 180.0 ); + } + + if ( isdefined( currentnode ) && isdefined( nextnode ) ) + { + angles = vectortoangles( currentnode.origin - nextnode.origin ); + grip.nextangles = angles; + + if ( grip.forceangles == 1 ) + { + grip.forceangles = 0; + grip.angles = grip.nextangles; + } + else + grip rotateto( grip.nextangles, 0.9 ); + } + + if ( firstmove == 1 ) + { + firstmovedistance = distance( cablecar.origin, nextnode.origin ); + velocity = getdvarfloatdefault( "scr_cable_car_velocity", 100 ); + timetomove = firstmovedistance / velocity; + + if ( timetomove > 0 ) + { + cablecar moveto( nextnode.origin + ( 0, cos( cablecar.angles[1] ) * -15, -66.6 ), timetomove ); + grip moveto( nextnode.origin - ( 0, cos( cablecar.angles[1] ) * -12, 8 ), timetomove ); + wait( timetomove ); + } + } + else + { + heightoffset = -66.6; + + if ( is_true( cablecar.hidden ) ) + heightoffset += -1000; + + if ( deceltime > 0 ) + cablecar thread prettyslowdown( currentmovetime - deceltime ); + + grip thread hostmigrationawaremoveto( nextnode.origin - ( 0, cos( cablecar.angles[1] ) * -12, 8 ), currentmovetime, acceltime, deceltime, currentmovetime - 0.05 ); + cablecar hostmigrationawaremoveto( nextnode.origin + ( 0, cos( cablecar.angles[1] ) * -15, heightoffset ), currentmovetime, acceltime, deceltime, currentmovetime - 0.05 ); + } + + if ( cablecar.hidden == 1 ) + { + cablecar.hidden = 0; + + if ( is_true( cablecar.hidden ) ) + cablecar.origin -= vectorscale( ( 0, 0, -1 ), 1000.0 ); + + cablecar show(); + grip show(); + grip.forceangles = 1; + } + + firstmove = 0; + + if ( isdefined( nextnode.pause ) ) + { + cablecar.ismoving = 0; + grip thread hostmigrationawaremoveto( nextnode.origin - ( 0, cos( cablecar.angles[1] ) * -12, 8 ), 300, 0, 0, 3 ); + cablecar hostmigrationawaremoveto( nextnode.origin + ( 0, cos( cablecar.angles[1] ) * -15, -66.6 ), 300, 0, 0, 3 ); + cablecar notify( "started_moving" ); + cablecar thread prettyspeedup(); + cablecar.ismoving = 1; + } + + if ( isdefined( nextnode.forceorigin ) ) + { + cablecar.origin = nextnode.origin + ( 0, cos( cablecar.angles[1] ) * -15, -66.6 ); + grip.origin = nextnode.origin - ( 0, cos( cablecar.angles[1] ) * -12, 8 ); + } + } + + nextnodeindex = 0; + } +} + +hostmigrationawaremoveto( origin, movetime, acceltime, deceltime, waittime ) +{ + starttime = gettime(); + self moveto( origin, movetime, acceltime, deceltime ); + waitcompleted = self waitendonmigration( waittime ); + + if ( !isdefined( waitcompleted ) ) + { + endtime = gettime(); + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + mstimedifference = starttime + waittime * 1000 - endtime; + + if ( mstimedifference > 500 ) + wait( mstimedifference / 1000 ); + } +} + +waitendonmigration( time ) +{ + level endon( "host_migration_begin" ); + wait( time ); + return 1; +} + +prettyslowdown( waittime ) +{ + if ( waittime > 0 ) + wait( waittime ); + + self stoploopsound(); + self playsound( level.gondolasounds["slow_down"] ); + originalangle = self.angles; + swingtime = getdvarfloatdefault( "scr_cable_swing_time", 1.5 ); + swingbacktime = getdvarfloatdefault( "scr_cable_swing_back_time", 1.5 ); + swingangle = getdvarfloatdefault( "scr_cable_swing_angle", 2.0 ); + self rotateto( ( originalangle[0] + swingangle, originalangle[1], originalangle[2] ), swingtime, swingtime / 2, swingtime / 2 ); + + self waittill( "rotatedone" ); + + self rotateto( ( originalangle[0], originalangle[1], originalangle[2] ), swingbacktime, swingbacktime / 2, swingbacktime / 2 ); + + self waittill( "rotatedone" ); +} + +prettyspeedup() +{ + self stoploopsound(); + self playsound( level.gondolasounds["rollers_start"] ); + self playloopsound( level.gondolaloopsounds["start"] ); + originalangle = self.angles; + swingtime = getdvarfloatdefault( "scr_cable_swing_time_up", 1.0 ); + swingbacktime = getdvarfloatdefault( "scr_cable_swing_back_time_up", 1.5 ); + swingangle = getdvarfloatdefault( "scr_cable_swing_angle_up", 2.0 ); + self rotateto( ( originalangle[0] - swingangle, originalangle[1], originalangle[2] ), swingtime, swingtime / 2, swingtime / 2 ); + + self waittill( "rotatedone" ); + + self rotateto( ( originalangle[0], originalangle[1], originalangle[2] ), swingbacktime, swingbacktime / 2, swingbacktime / 2 ); + + self waittill( "rotatedone" ); +} + +cablecar_ai_watch() +{ + self endon( "death" ); + self endon( "delete" ); + + for (;;) + { + wait 1; + + if ( isdefined( self.nodes ) ) + { + for ( i = 0; i < self.nodes.size; i++ ) + { + node = self.nodes[i]; + + foreach ( team in level.teams ) + node setdangerous( team, 0 ); + } + } + + dir = vectornormalize( anglestoforward( self.angles ) ); + dangerorigin = self.origin - dir * 196; + nodes = getnodesinradius( dangerorigin, 256, 0, 196 ); + + for ( i = 0; i < nodes.size; i++ ) + { + node = nodes[i]; + + foreach ( team in level.teams ) + node setdangerous( team, 1 ); + } + + if ( nodes.size > 0 ) + { + self.nodes = nodes; + continue; + } + + self.nodes = undefined; + } +} + +cablecar_move_think( kill_trigger, checkmoving ) +{ + self endon( "death" ); + self endon( "delete" ); + self.disablefinalkillcam = 1; + destroycorpses = 0; + + for (;;) + { + wait 0.05; + pixbeginevent( "cablecar_move_think" ); + + if ( checkmoving ) + { + if ( self.ismoving == 0 ) + self waittill( "started_moving" ); + } + + entities = getdamageableentarray( self.origin, 200 ); + + foreach ( entity in entities ) + { + if ( isdefined( entity.targetname ) && entity.targetname == "cablecar" ) + continue; + + if ( !entity istouching( kill_trigger ) ) + continue; + + if ( isdefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" ) + { + entity maps\mp\_tacticalinsertion::destroy_tactical_insertion(); + continue; + } + + if ( !isalive( entity ) ) + continue; + + if ( isdefined( entity.targetname ) ) + { + if ( entity.targetname == "talon" ) + { + entity notify( "death" ); + continue; + } + else if ( entity.targetname == "rcbomb" ) + { + entity maps\mp\killstreaks\_rcbomb::rcbomb_force_explode(); + continue; + } + else if ( entity.targetname == "riotshield_mp" ) + { + entity dodamage( 1, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); + continue; + } + } + + if ( isdefined( entity.helitype ) && entity.helitype == "qrdrone" ) + { + watcher = entity.owner maps\mp\gametypes\_weaponobjects::getweaponobjectwatcher( "qrdrone" ); + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined ); + continue; + } + + if ( entity.classname == "grenade" ) + { + if ( !isdefined( entity.name ) ) + continue; + + if ( !isdefined( entity.owner ) ) + continue; + + if ( entity.name == "satchel_charge_mp" ) + continue; + + if ( entity.name == "proximity_grenade_mp" ) + { + watcher = entity.owner getwatcherforweapon( entity.name ); + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined, "script_mover_mp" ); + continue; + } + + if ( !isweaponequipment( entity.name ) ) + continue; + + watcher = entity.owner getwatcherforweapon( entity.name ); + + if ( !isdefined( watcher ) ) + continue; + + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined, "script_mover_mp" ); + continue; + } + else if ( entity.classname == "remote_drone" ) + continue; + + if ( entity.classname == "auto_turret" ) + { + if ( isdefined( entity.carried ) && entity.carried == 1 ) + continue; + + if ( !isdefined( entity.damagedtodeath ) || !entity.damagedtodeath ) + entity domaxdamage( self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); + + continue; + } + + if ( isplayer( entity ) ) + { + if ( entity getstance() == "prone" ) + { + if ( entity isonground() == 0 ) + destroycorpses = 1; + } + + entity dodamage( entity.health * 2, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_HIT_BY_OBJECT", 0, "gondola_mp" ); + continue; + } + + entity dodamage( entity.health * 2, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); + } + + if ( destroycorpses == 1 ) + { + destroycorpses = 0; + self destroy_corpses(); + } + + self destroy_supply_crates(); + + if ( level.gametype == "ctf" ) + { + foreach ( flag in level.flags ) + { + if ( flag.curorigin != flag.trigger.baseorigin && flag.visuals[0] istouching( kill_trigger ) ) + flag maps\mp\gametypes\ctf::returnflag(); + } + } + else if ( level.gametype == "sd" && !level.multibomb ) + { + if ( level.sdbomb.visuals[0] istouching( kill_trigger ) ) + level.sdbomb maps\mp\gametypes\_gameobjects::returnhome(); + } + + pixendevent(); + } +} + +getwatcherforweapon( weapname ) +{ + if ( !isdefined( self ) ) + return undefined; + + if ( !isplayer( self ) ) + return undefined; + + for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) + { + if ( self.weaponobjectwatcherarray[i].weapon != weapname ) + continue; + + return self.weaponobjectwatcherarray[i]; + } + + return undefined; +} + +destroy_supply_crates() +{ + crates = getentarray( "care_package", "script_noteworthy" ); + + foreach ( crate in crates ) + { + if ( distancesquared( crate.origin, self.origin ) < 40000 ) + { + if ( crate istouching( self ) ) + { + playfx( level._supply_drop_explosion_fx, crate.origin ); + playsoundatposition( "wpn_grenade_explode", crate.origin ); + wait 0.1; + crate maps\mp\killstreaks\_supplydrop::cratedelete(); + } + } + } +} + +destroy_corpses() +{ + corpses = getcorpsearray(); + + for ( i = 0; i < corpses.size; i++ ) + { + if ( distancesquared( corpses[i].origin, self.origin ) < 40000 ) + corpses[i] delete(); + } +} diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_drone.gsc b/MP/Core/maps/mp/mp_drone.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_drone.gsc rename to MP/Core/maps/mp/mp_drone.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_express.gsc b/MP/Core/maps/mp/mp_express.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_express.gsc rename to MP/Core/maps/mp/mp_express.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_express_train.gsc b/MP/Core/maps/mp/mp_express_train.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_express_train.gsc rename to MP/Core/maps/mp/mp_express_train.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_frostbite.gsc b/MP/Core/maps/mp/mp_frostbite.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_frostbite.gsc rename to MP/Core/maps/mp/mp_frostbite.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_hijacked.gsc b/MP/Core/maps/mp/mp_hijacked.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_hijacked.gsc rename to MP/Core/maps/mp/mp_hijacked.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_hydro.gsc b/MP/Core/maps/mp/mp_hydro.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_hydro.gsc rename to MP/Core/maps/mp/mp_hydro.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_la.gsc b/MP/Core/maps/mp/mp_la.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_la.gsc rename to MP/Core/maps/mp/mp_la.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_magma.gsc b/MP/Core/maps/mp/mp_magma.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_magma.gsc rename to MP/Core/maps/mp/mp_magma.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_meltdown.gsc b/MP/Core/maps/mp/mp_meltdown.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_meltdown.gsc rename to MP/Core/maps/mp/mp_meltdown.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_mirage.gsc b/MP/Core/maps/mp/mp_mirage.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_mirage.gsc rename to MP/Core/maps/mp/mp_mirage.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_nightclub.gsc b/MP/Core/maps/mp/mp_nightclub.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_nightclub.gsc rename to MP/Core/maps/mp/mp_nightclub.gsc diff --git a/MP/Core/maps/mp/mp_nuketown_2020.gsc b/MP/Core/maps/mp/mp_nuketown_2020.gsc new file mode 100644 index 0000000..a5d8964 --- /dev/null +++ b/MP/Core/maps/mp/mp_nuketown_2020.gsc @@ -0,0 +1,480 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\_events; +#include maps\mp\mp_nuketown_2020_fx; +#include maps\mp\_load; +#include maps\mp\mp_nuketown_2020_amb; +#include maps\mp\_compass; +#include maps\mp\gametypes\_globallogic_defaults; +#include maps\mp\killstreaks\_killstreaks; + +#using_animtree("fxanim_props"); + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_nuketown_2020_fx::main(); + precachemodel( "collision_physics_32x32x128" ); + precachemodel( "collision_physics_32x32x32" ); + precachemodel( "collision_physics_wall_32x32x10" ); + precachemodel( "collision_clip_32x32x32" ); + precachemodel( "collision_vehicle_128x128x128" ); + precachemodel( "collision_missile_128x128x10" ); + precachemodel( "nt_2020_doorframe_black" ); + precachemodel( "collision_vehicle_32x32x10" ); + precachemodel( "collision_physics_256x256x10" ); + precachemodel( "collision_physics_cylinder_32x128" ); + precachemodel( "collision_missile_32x32x128" ); + precachemodel( "collision_physics_32x32x10" ); + precachemodel( "collision_clip_wall_64x64x10" ); + precachemodel( "collision_physics_wall_64x64x10" ); + precachemodel( "collision_physics_128x128x10" ); + maps\mp\_load::main(); + maps\mp\mp_nuketown_2020_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_nuketown_2020" ); + spawncollision( "collision_physics_32x32x128", "collider", ( 1216, 167.5, 235 ), ( 0, 3.69986, -90 ) ); + spawncollision( "collision_physics_32x32x128", "collider", ( 1213, 227, 235 ), ( 0, 10.9, -90 ) ); + spawncollision( "collision_physics_32x32x128", "collider", ( 1196, 315.5, 235 ), ( 0, 15.2, -90 ) ); + spawncollision( "collision_physics_32x32x128", "collider", ( 1151.5, 427, 235 ), ( 0, 27.8, -90 ) ); + spawncollision( "collision_physics_32x32x32", "collider", ( 1109, 488, 235 ), ( 0, 46.2, -90 ) ); + spawncollision( "collision_physics_256x256x10", "collider", ( 1067, 291, 240 ), vectorscale( ( 0, 1, 0 ), 14.3 ) ); + prop1 = spawn( "script_model", ( 678.485, 583.124, -91.75 ) ); + prop1.angles = ( 270, 198.902, 86.0983 ); + prop2 = spawn( "script_model", ( 705.49, 482.12, -91.75 ) ); + prop2.angles = ( 270, 198.902, 86.0983 ); + prop3 = spawn( "script_model", ( 732.49, 381.37, -91.75 ) ); + prop3.angles = ( 270, 198.902, 86.0983 ); + prop1 setmodel( "nt_2020_doorframe_black" ); + prop2 setmodel( "nt_2020_doorframe_black" ); + prop3 setmodel( "nt_2020_doorframe_black" ); + busprop1 = spawn( "script_model", ( -121.962, 53.5963, -24.241 ) ); + busprop1.angles = ( 274.162, 199.342, 86.5184 ); + busprop1 setmodel( "nt_2020_doorframe_black" ); + spawncollision( "collision_clip_32x32x32", "collider", ( 817.5, 415, 77 ), vectorscale( ( 0, 1, 0 ), 15.2 ) ); + spawncollision( "collision_clip_32x32x32", "collider", ( 859, 430, 77.5 ), vectorscale( ( 0, 1, 0 ), 15.2 ) ); + spawncollision( "collision_clip_32x32x32", "collider", ( 894, 439.5, 77.5 ), vectorscale( ( 0, 1, 0 ), 15.2 ) ); + spawncollision( "collision_clip_32x32x32", "collider", ( 926.5, 448.5, 77.5 ), vectorscale( ( 0, 1, 0 ), 15.2 ) ); + spawncollision( "collision_clip_32x32x32", "collider", ( 1257.5, 489, -68 ), vectorscale( ( 0, 1, 0 ), 15.2 ) ); + spawncollision( "collision_clip_32x32x32", "collider", ( 1288.5, 497.5, -68 ), vectorscale( ( 0, 1, 0 ), 15.2 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( 570.655, 214.604, -10.5 ), vectorscale( ( 0, 1, 0 ), 284.5 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( 558.345, 260.896, -10.5 ), vectorscale( ( 0, 1, 0 ), 284.5 ) ); + spawncollision( "collision_physics_wall_32x32x10", "collider", ( -1422, 40.5, 4.5 ), vectorscale( ( 0, 1, 0 ), 72.2 ) ); + spawncollision( "collision_physics_cylinder_32x128", "collider", ( 883.75, 826.5, 195.75 ), ( 0, 263.2, -90 ) ); + spawncollision( "collision_physics_cylinder_32x128", "collider", ( 770, 824.75, 195.75 ), ( 0, 276.4, -90 ) ); + spawncollision( "collision_physics_cylinder_32x128", "collider", ( 661.25, 801, 195.75 ), ( 0, 287.4, -90 ) ); + spawncollision( "collision_physics_cylinder_32x128", "collider", ( 560.75, 751.75, 195.75 ), ( 0, 302, -90 ) ); + spawncollision( "collision_physics_32x32x10", "collider", ( 1325, 532, 14 ), vectorscale( ( 0, 1, 0 ), 14.9 ) ); + spawncollision( "collision_physics_32x32x10", "collider", ( 1369, 542.5, 14 ), vectorscale( ( 0, 1, 0 ), 14.9 ) ); + spawncollision( "collision_physics_wall_32x32x10", "collider", ( -1936, 699.5, -49 ), ( 359.339, 356.866, -11.7826 ) ); + spawncollision( "collision_physics_wall_32x32x10", "collider", ( -1936, 703.5, -28.5 ), ( 359.339, 356.866, -11.7826 ) ); + spawncollision( "collision_clip_wall_64x64x10", "collider", ( 1013.5, 76.5, 42 ), vectorscale( ( 0, 1, 0 ), 15.0 ) ); + spawncollision( "collision_clip_wall_64x64x10", "collider", ( -458.5, 589, 63 ), ( 1.3179, 341.742, 3.9882 ) ); + spawncollision( "collision_physics_32x32x10", "collider", ( 653, 344.5, 147 ), vectorscale( ( 0, 1, 0 ), 14.7 ) ); + spawncollision( "collision_physics_32x32x10", "collider", ( 653, 344.5, 98 ), vectorscale( ( 0, 1, 0 ), 14.7 ) ); + spawncollision( "collision_physics_wall_64x64x10", "collider", ( -611.5, 535, 90.5 ), ( 359.952, 250.338, 9.04601 ) ); + spawncollision( "collision_physics_128x128x10", "collider", ( 1168.13, 200.5, 222.485 ), ( 352.436, 6.33769, -2.04434 ) ); + spawncollision( "collision_physics_128x128x10", "collider", ( 1147.43, 295.5, 219.708 ), ( 352.293, 18.1248, -1.3497 ) ); + spawncollision( "collision_physics_128x128x10", "collider", ( 1113.81, 391.5, 218.7 ), ( 352.832, 23.1409, -0.786543 ) ); + level.onspawnintermission = ::nuked_intermission; + level.endgamefunction = ::nuked_end_game; + setdvar( "compassmaxrange", "2100" ); + precacheitem( "vcs_controller_mp" ); + precachemenu( "vcs" ); + precachemodel( "nt_sign_population" ); + precachemodel( "nt_sign_population_vcs" ); + precachestring( &"MPUI_USE_VCS_HINT" ); + level.const_fx_exploder_nuke = 1001; + level.headless_mannequin_count = 0; + level.destructible_callbacks["headless"] = ::mannequin_headless; + level thread nuked_population_sign_think(); + level.disableoutrovisionset = 1; + destructible_car_anims = []; + destructible_car_anims["car1"] = %fxanim_mp_nuked2025_car01_anim; + destructible_car_anims["car2"] = %fxanim_mp_nuked2025_car02_anim; + destructible_car_anims["displayGlass"] = %fxanim_mp_nuked2025_display_glass_anim; + level thread nuked_mannequin_init(); + level thread nuked_powerlevel_think(); + level thread nuked_bomb_drop_think(); +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "1600", reset_dvars ); + ss.dead_friend_influencer_radius = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_radius", "1300", reset_dvars ); + ss.dead_friend_influencer_timeout_seconds = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_timeout_seconds", "8", reset_dvars ); + ss.dead_friend_influencer_count = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_count", "7", reset_dvars ); +} + +move_spawn_point( targetname, start_point, new_point ) +{ + spawn_points = getentarray( targetname, "classname" ); + + for ( i = 0; i < spawn_points.size; i++ ) + { + if ( distancesquared( spawn_points[i].origin, start_point ) < 1 ) + { + spawn_points[i].origin = new_point; + return; + } + } +} + +nuked_mannequin_init() +{ + destructibles = getentarray( "destructible", "targetname" ); + mannequins = nuked_mannequin_filter( destructibles ); + level.mannequin_count = mannequins.size; + + if ( mannequins.size <= 0 ) + return; + + camerastart = getstruct( "endgame_camera_start", "targetname" ); + level.endgamemannequin = getclosest( camerastart.origin, mannequins ); + remove_count = mannequins.size - 25; + remove_count = clamp( remove_count, 0, remove_count ); + mannequins = array_randomize( mannequins ); + + for ( i = 0; i < remove_count; i++ ) + { + assert( isdefined( mannequins[i].target ) ); + + if ( level.endgamemannequin == mannequins[i] ) + continue; + + collision = getent( mannequins[i].target, "targetname" ); + assert( isdefined( collision ) ); + collision delete(); + mannequins[i] delete(); + level.mannequin_count--; + } + + level waittill( "prematch_over" ); + + level.mannequin_time = gettime(); +} + +nuked_mannequin_filter( destructibles ) +{ + mannequins = []; + + for ( i = 0; i < destructibles.size; i++ ) + { + destructible = destructibles[i]; + + if ( issubstr( destructible.destructibledef, "male" ) ) + mannequins[mannequins.size] = destructible; + } + + return mannequins; +} + +mannequin_headless( notifytype, attacker ) +{ + if ( gettime() < level.mannequin_time + getdvarintdefault( "vcs_timelimit", 120 ) * 1000 ) + { + level.headless_mannequin_count++; + + if ( level.headless_mannequin_count == level.mannequin_count ) + level thread do_vcs(); + } +} + +nuked_intermission() +{ + maps\mp\gametypes\_globallogic_defaults::default_onspawnintermission(); +} + +nuked_end_game() +{ + if ( waslastround() ) + { + level notify( "nuke_detonation" ); + level thread nuke_detonation(); + } +} + +nuke_detonation() +{ + level notify( "bomb_drop_pre" ); + clientnotify( "bomb_drop_pre" ); + bomb_loc = getent( "bomb_loc", "targetname" ); + bomb_loc playsound( "amb_end_nuke_2d" ); + destructibles = getentarray( "destructible", "targetname" ); + + for ( i = 0; i < destructibles.size; i++ ) + { + if ( getsubstr( destructibles[i].destructibledef, 0, 4 ) == "veh_" ) + destructibles[i] hide(); + } + + displaysign = getent( "nuke_display_glass_server", "targetname" ); + assert( isdefined( displaysign ) ); + displaysign hide(); + bombwaitpretime = getdvarfloatdefault( "scr_nuke_car_pre", 0.5 ); + wait( bombwaitpretime ); + exploder( level.const_fx_exploder_nuke ); + bomb_loc = getent( "bomb_loc", "targetname" ); + bomb_loc playsound( "amb_end_nuke" ); + level notify( "bomb_drop" ); + clientnotify( "bomb_drop" ); + bombwaittime = getdvarfloatdefault( "scr_nuke_car_flip", 3.25 ); + wait( bombwaittime ); + clientnotify( "nuke_car_flip" ); + location = level.endgamemannequin.origin + ( 0, -20, 50 ); + radiusdamage( location, 128, 128, 128 ); + physicsexplosionsphere( location, 128, 128, 1 ); + mannequinwaittime = getdvarfloatdefault( "scr_nuke_mannequin_flip", 0.25 ); + wait( mannequinwaittime ); + level.endgamemannequin rotateto( level.endgamemannequin.angles + vectorscale( ( 0, 0, 1 ), 90.0 ), 0.7 ); + level.endgamemannequin moveto( level.endgamemannequin.origin + vectorscale( ( 0, 1, 0 ), 90.0 ), 1 ); +} + +nuked_bomb_drop_think() +{ + camerastart = getstruct( "endgame_camera_start", "targetname" ); + cameraend = getstruct( camerastart.target, "targetname" ); + bomb_loc = getent( "bomb_loc", "targetname" ); + cam_move_time = set_dvar_float_if_unset( "scr_cam_move_time", "4.0" ); + bomb_explode_delay = set_dvar_float_if_unset( "scr_bomb_explode_delay", "2.75" ); + env_destroy_delay = set_dvar_float_if_unset( "scr_env_destroy_delay", "0.5" ); + + for (;;) + { + camera = spawn( "script_model", camerastart.origin ); + camera.angles = camerastart.angles; + camera setmodel( "tag_origin" ); + + level waittill( "bomb_drop_pre" ); + + level notify( "fxanim_dome_explode_start" ); + + for ( i = 0; i < get_players().size; i++ ) + { + player = get_players()[i]; + player camerasetposition( camera ); + player camerasetlookat(); + player cameraactivate( 1 ); + player setdepthoffield( 0, 128, 7000, 10000, 6, 1.8 ); + } + + camera moveto( cameraend.origin, cam_move_time, 0, 0 ); + camera rotateto( cameraend.angles, cam_move_time, 0, 0 ); + bombwaittime = getdvarfloatdefault( "mp_nuketown_2020_bombwait", 3.0 ); + wait( bombwaittime ); + wait( env_destroy_delay ); + cameraforward = anglestoforward( cameraend.angles ); + physicsexplosionsphere( bomb_loc.origin, 128, 128, 1 ); + radiusdamage( bomb_loc.origin, 128, 128, 128 ); + } +} + +nuked_population_sign_think() +{ + tens_model = getent( "counter_tens", "targetname" ); + ones_model = getent( "counter_ones", "targetname" ); + step = 36; + ones = 0; + tens = 0; + tens_model rotateroll( step, 0.05 ); + ones_model rotateroll( step, 0.05 ); + + for (;;) + { + wait 1; + + for (;;) + { + num_players = get_players().size; + dial = ones + tens * 10; + + if ( num_players < dial ) + { + ones--; + time = set_dvar_float_if_unset( "scr_dial_rotate_time", "0.5" ); + + if ( ones < 0 ) + { + ones = 9; + tens_model rotateroll( 0 - step, time ); + tens--; + } + + ones_model rotateroll( 0 - step, time ); + + ones_model waittill( "rotatedone" ); + + continue; + } + + if ( num_players > dial ) + { + ones++; + time = set_dvar_float_if_unset( "scr_dial_rotate_time", "0.5" ); + + if ( ones > 9 ) + { + ones = 0; + tens_model rotateroll( step, time ); + tens++; + } + + ones_model rotateroll( step, time ); + + ones_model waittill( "rotatedone" ); + + continue; + } + + break; + } + } +} + +do_vcs() +{ + if ( getdvarintdefault( "disable_vcs", 0 ) ) + return; + + if ( !getgametypesetting( "allowMapScripting" ) ) + return; + + if ( !level.onlinegame || !sessionmodeisprivate() ) + return; + + if ( level.wiiu ) + return; + + targettag = getent( "player_tv_position", "targetname" ); + level.vcs_trigger = spawn( "trigger_radius_use", targettag.origin, 0, 64, 64 ); + level.vcs_trigger setcursorhint( "HINT_NOICON" ); + level.vcs_trigger sethintstring( &"MPUI_USE_VCS_HINT" ); + level.vcs_trigger triggerignoreteam(); + screen = getent( "nuketown_tv", "targetname" ); + screen setmodel( "nt_sign_population_vcs" ); + + while ( true ) + { + level.vcs_trigger waittill( "trigger", player ); + + if ( player isusingremote() || !isalive( player ) ) + continue; + + prevweapon = player getcurrentweapon(); + + if ( prevweapon == "none" || maps\mp\killstreaks\_killstreaks::iskillstreakweapon( prevweapon ) ) + continue; + + level.vcs_trigger setinvisibletoall(); + player giveweapon( "vcs_controller_mp" ); + player switchtoweapon( "vcs_controller_mp" ); + player setstance( "stand" ); + placementtag = spawn( "script_model", player.origin ); + placementtag.angles = player.angles; + player playerlinktoabsolute( placementtag ); + placementtag moveto( targettag.origin, 0.5, 0.05, 0.05 ); + placementtag rotateto( targettag.angles, 0.5, 0.05, 0.05 ); + player enableinvulnerability(); + player openmenu( "vcs" ); + player wait_till_done_playing_vcs(); + + if ( !level.gameended ) + { + if ( isdefined( player ) ) + { + player disableinvulnerability(); + player unlink(); + player takeweapon( "vcs_controller_mp" ); + player switchtoweapon( prevweapon ); + } + + level.vcs_trigger setvisibletoall(); + } + } +} + +wait_till_done_playing_vcs() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "menuresponse", menu, response ); + + return; + } +} + +nuked_powerlevel_think() +{ + pin_model = getent( "nuketown_sign_needle", "targetname" ); + pin_model thread pin_think(); +} + +pin_think() +{ + self endon( "death" ); + self endon( "entityshutdown" ); + self endon( "delete" ); + startangle = 128; + normalangle = 65 + randomfloatrange( -30, 15 ); + yellowangle = -35 + randomfloatrange( -5, 5 ); + redangle = -95 + randomfloatrange( -10, 10 ); + endangle = -138; + self.angles = ( startangle, self.angles[1], self.angles[2] ); + waittillframeend; + + if ( islastround() || isoneround() ) + { + if ( level.timelimit ) + { + add_timed_event( 10, "near_end_game" ); + self pin_move( yellowangle, level.timelimit * 60 ); + } + else if ( level.scorelimit ) + { + add_score_event( int( level.scorelimit * 0.9 ), "near_end_game" ); + self pin_move( normalangle, 300 ); + } + + notifystr = level waittill_any_return( "near_end_game", "game_ended" ); + + if ( notifystr == "near_end_game" ) + { + self pin_check_rotation( 0, 3 ); + self pin_move( redangle, 10 ); + + level waittill( "game_ended" ); + } + + self pin_check_rotation( 0, 2 ); + self pin_move( redangle, 2 ); + } + else if ( level.timelimit ) + self pin_move( normalangle, level.timelimit * 60 ); + else + self pin_move( normalangle, 300 ); + + level waittill( "nuke_detonation" ); + + self pin_check_rotation( 0, 0.05 ); + self pin_move( endangle, 0.1 ); +} + +pin_move( angle, time ) +{ + angles = ( angle, self.angles[1], self.angles[2] ); + self rotateto( angles, time ); +} + +pin_check_rotation( angle, time ) +{ + if ( self.angles[0] > angle ) + { + self pin_move( angle, time ); + + self waittill( "rotatedone" ); + } +} diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_overflow.gsc b/MP/Core/maps/mp/mp_overflow.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_overflow.gsc rename to MP/Core/maps/mp/mp_overflow.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_paintball.gsc b/MP/Core/maps/mp/mp_paintball.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_paintball.gsc rename to MP/Core/maps/mp/mp_paintball.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_pod.gsc b/MP/Core/maps/mp/mp_pod.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_pod.gsc rename to MP/Core/maps/mp/mp_pod.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_raid.gsc b/MP/Core/maps/mp/mp_raid.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_raid.gsc rename to MP/Core/maps/mp/mp_raid.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_skate.gsc b/MP/Core/maps/mp/mp_skate.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_skate.gsc rename to MP/Core/maps/mp/mp_skate.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_slums.gsc b/MP/Core/maps/mp/mp_slums.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_slums.gsc rename to MP/Core/maps/mp/mp_slums.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_socotra.gsc b/MP/Core/maps/mp/mp_socotra.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_socotra.gsc rename to MP/Core/maps/mp/mp_socotra.gsc diff --git a/MP/Core/maps/mp/mp_studio.gsc b/MP/Core/maps/mp/mp_studio.gsc new file mode 100644 index 0000000..dd3e1bb --- /dev/null +++ b/MP/Core/maps/mp/mp_studio.gsc @@ -0,0 +1,373 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_studio_fx; +#include maps\mp\_load; +#include maps\mp\_compass; +#include maps\mp\mp_studio_amb; +#include maps\mp\gametypes\_weaponobjects; +#include maps\mp\_tacticalinsertion; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_studio_fx::main(); + maps\mp\_load::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_studio" ); + maps\mp\mp_studio_amb::main(); + setdvar( "compassmaxrange", "2100" ); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + level.destructible_callbacks["remove_streamers"] = ::death_streamer_think; + alleytrigger = getent( "alleyTrigger", "targetname" ); + windowtrigger = getent( "triggerwindowTarget", "targetname" ); + target7 = getent( "trailerTarget_Window", "targetname" ); + target8 = getent( "alleyTarget_Cover", "targetname" ); + target9 = getent( "alleyTarget_Path", "targetname" ); + targetlight1_off = getent( "steelBuildingTargetLight1_off", "targetname" ); + targetlight1_on = getent( "steelBuildingTargetLight1_on", "targetname" ); + targetlight2_off = getent( "steelBuildingTargetLight2_off", "targetname" ); + targetlight2_on = getent( "steelBuildingTargetLight2_on", "targetname" ); + level.const_fx_exploder_red_light_1 = 1001; + level.const_fx_exploder_red_light_2 = 1002; + speaker1 = getent( "loudspeaker1", "targetname" ); + speaker2 = getent( "loudspeaker2", "targetname" ); + targetlight1_on hide(); + targetlight2_on hide(); + target8 setcandamage( 1 ); + target9 setcandamage( 1 ); + target8 thread damagetarget( 2 ); + target9 thread damagetarget( 2 ); + target7 thread movetarget( 7, ( 57, 23, 0 ), 3 ); + target8 thread movetarget( 1, 240, 10 ); + target9 thread movetarget( 1, 130, 8.6 ); + alleytrigger thread triggercheck( target9 ); + windowtrigger thread triggercheck( target7 ); +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "1900", reset_dvars ); +} + +triggercheck( target ) +{ + self endon( "game_ended" ); + + while ( true ) + { + self waittill( "trigger", player ); + + distance = distance( target.origin, self.origin ); + + if ( distance <= 90 ) + { + target notify( "targetStopMoving" ); + + while ( isdefined( player ) && player istouching( self ) && distance <= 90 ) + { + if ( distancesquared( target.origin, target.railpoints[0] ) < distancesquared( player.origin, target.railpoints[0] ) ) + target.preferrednextpos = 0; + else + target.preferrednextpos = 1; + + wait 0.25; + } + } + } +} + +damagetarget( dir ) +{ + self endon( "game_ended" ); + + while ( true ) + { + self waittill( "damage", damage, attacker, direction ); + + switch ( dir ) + { + case 1: + self rotateroll( self.angles[1] + 90, 0.1 ); + wait 0.2; + self rotateroll( self.angles[1] - 90, 0.1 ); + wait 0.2; + self playsound( "amb_target_flip" ); + break; + case 2: + rotation = 1; + + if ( isdefined( attacker ) && isplayer( attacker ) ) + { + yaw = get2dyaw( attacker.origin, self.origin ); + + if ( attacker.angles[1] > yaw ) + rotation = -1; + } + + self rotateyaw( self.angles[2] + 180 * rotation, 0.3 ); + self playsound( "amb_target_twirl" ); + + self waittill( "rotatedone" ); + + break; + case 3: + self rotatepitch( self.angles[1] + 90, 0.1 ); + wait 0.2; + self rotatepitch( self.angles[1] - 90, 0.1 ); + wait 0.2; + self playsound( "amb_target_flip" ); + break; + case 4: + self rotateroll( self.angles[1] - 90, 0.1 ); + wait 0.2; + self rotateroll( self.angles[1] + 90, 0.1 ); + wait 0.2; + self playsound( "amb_target_flip" ); + break; + case 5: + self rotatepitch( self.angles[1] - 90, 0.1 ); + wait 0.2; + self rotatepitch( self.angles[1] + 90, 0.1 ); + wait 0.2; + self playsound( "amb_target_flip" ); + break; + } + } +} + +damagetargetlights( light_on, light_off, speaker, alias, exploderhandle ) +{ + self endon( "game_ended" ); + + while ( true ) + { + self waittill( "damage" ); + + speaker playsound( alias ); + exploder( exploderhandle ); + light_off hide(); + light_on show(); + wait 0.5; + exploder_stop( exploderhandle ); + light_off show(); + light_on hide(); + } +} + +movetarget( dir, dis, speed ) +{ + self endon( "game_ended" ); + keepmoving = 1; + self thread movement_process(); + startpos = self.origin; + farpos = self.origin; + sound = spawn( "script_origin", self.origin ); + sound linkto( self ); + sound playloopsound( "amb_target_chain" ); + + switch ( dir ) + { + case 1: + farpos = self.origin + ( 0, dis, 0 ); + break; + case 2: + farpos = self.origin - ( 0, dis, 0 ); + break; + case 3: + farpos = self.origin + ( dis, 0, 0 ); + break; + case 4: + farpos = self.origin - ( dis, 0, 0 ); + break; + case 5: + farpos = self.origin + ( 0, 0, dis ); + break; + case 6: + farpos = self.origin - ( 0, 0, dis ); + break; + case 7: + farpos = self.origin - dis; + break; + } + + self.railpoints = []; + self.railpoints[0] = startpos; + self.railpoints[1] = farpos; + self.preferrednextpos = 1; + self.playertrigger = 0; + + while ( true ) + { + nextpos = self.railpoints[self.preferrednextpos]; + + if ( self.preferrednextpos == 0 ) + self.preferrednextpos = 1; + else + self.preferrednextpos = 0; + + self moveto( nextpos, speed ); + self waittill_either( "movedone", "targetStopMoving" ); + self playsound( "amb_target_stop" ); + } +} + +rotatetarget( dir, deg, speed, pausetime ) +{ + self endon( "game_ended" ); + + while ( true ) + { + switch ( dir ) + { + case 1: + self rotateyaw( self.angles[2] + deg, speed ); + self playsound( "amb_target_rotate" ); + wait( pausetime ); + self rotateyaw( self.angles[2] - deg, speed ); + self playsound( "amb_target_rotate" ); + wait( pausetime ); + break; + case 2: + self rotateyaw( self.angles[2] - deg, speed ); + self playsound( "amb_target_rotate" ); + wait( pausetime ); + self rotateyaw( self.angles[2] + deg, speed ); + self playsound( "amb_target_rotate" ); + wait( pausetime ); + break; + case 3: + self rotateroll( self.angles[0] + deg, speed ); + self playsound( "amb_target_rotate" ); + wait( pausetime ); + self rotateroll( self.angles[0] - deg, speed ); + self playsound( "amb_target_rotate" ); + wait( pausetime ); + break; + case 4: + self rotateroll( self.angles[0] - deg, speed ); + self playsound( "amb_target_rotate" ); + wait( pausetime ); + self rotateroll( self.angles[0] + deg, speed ); + self playsound( "amb_target_rotate" ); + wait( pausetime ); + break; + case 5: + self rotateroll( self.angles[1] + deg, speed ); + self playsound( "amb_target_rotate" ); + wait( pausetime ); + self rotateroll( self.angles[1] - deg, speed ); + self playsound( "amb_target_rotate" ); + wait( pausetime ); + break; + case 6: + self rotatepitch( self.angles[1] - deg, speed ); + wait( pausetime ); + self rotatepitch( self.angles[1] + deg, speed ); + wait( pausetime ); + break; + case 7: + self rotateto( ( self.angles[0] + 90, self.angles[1] - 90, self.angles[2] + 45 ), speed ); + wait( pausetime ); + self rotateto( ( self.angles[0] - 90, self.angles[1] + 90, self.angles[2] - 45 ), speed ); + wait( pausetime ); + } + } +} + +movement_process() +{ + for (;;) + { + entities = getdamageableentarray( self.origin, 50 ); + + foreach ( entity in entities ) + { + if ( isdefined( entity.targetname ) && ( entity.targetname == "alleyTarget_Cover" || entity.targetname == "alleyTarget_Path" ) ) + continue; + + if ( isplayer( entity ) ) + continue; + + if ( !entity istouching( self ) ) + continue; + + if ( isdefined( entity.classname ) && entity.classname == "grenade" ) + { + if ( !isdefined( entity.name ) ) + continue; + + if ( !isdefined( entity.owner ) ) + continue; + + if ( entity.name == "satchel_charge_mp" ) + { + if ( entity.origin[2] > self.origin[2] + 5 ) + continue; + } + + watcher = entity.owner getwatcherforweapon( entity.name ); + + if ( !isdefined( watcher ) ) + continue; + + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined ); + } + + if ( isdefined( entity.targetname ) ) + { + if ( entity.targetname == "riotshield_mp" ) + { + entity dodamage( 1, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); + continue; + } + } + + if ( isdefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" ) + entity thread maps\mp\_tacticalinsertion::fizzle(); + } + + wait 0.25; + } +} + +getwatcherforweapon( weapname ) +{ + if ( !isdefined( self ) ) + return undefined; + + if ( !isplayer( self ) ) + return undefined; + + for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) + { + if ( self.weaponobjectwatcherarray[i].weapon != weapname ) + continue; + + return self.weaponobjectwatcherarray[i]; + } + + return undefined; +} + +death_streamer_think( notifytype, attacker ) +{ + streamers = getentarray( "airconditioner_streamer", "targetname" ); + + for ( i = 0; i < streamers.size; i++ ) + { + streamer = streamers[i]; + + if ( distancesquared( streamer.origin, self.origin ) < 2500 ) + streamer delete(); + } +} diff --git a/MP/Core/maps/mp/mp_takeoff.gsc b/MP/Core/maps/mp/mp_takeoff.gsc new file mode 100644 index 0000000..62f2f7c --- /dev/null +++ b/MP/Core/maps/mp/mp_takeoff.gsc @@ -0,0 +1,348 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_events; +#include common_scripts\utility; +#include maps\mp\mp_takeoff_fx; +#include maps\mp\_load; +#include maps\mp\_compass; +#include maps\mp\gametypes\_spawning; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + level.overrideplayerdeathwatchtimer = ::leveloverridetime; + level.useintermissionpointsonwavespawn = ::useintermissionpointsonwavespawn; + maps\mp\mp_takeoff_fx::main(); + precachemodel( "collision_nosight_wall_64x64x10" ); + precachemodel( "collision_clip_wall_128x128x10" ); + precachemodel( "collision_mp_takeoff_solar_weap" ); + maps\mp\_load::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_takeoff" ); + setdvar( "compassmaxrange", "2100" ); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -915, 790, 212 ), ( 0, 0, 0 ) ); + spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -979, 790, 212 ), ( 0, 0, 0 ) ); + spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -1043, 790, 212 ), ( 0, 0, 0 ) ); + spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -1083, 790, 212 ), ( 0, 0, 0 ) ); + spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -915, 790, 148 ), ( 0, 0, 0 ) ); + spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -979, 790, 148 ), ( 0, 0, 0 ) ); + spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -1043, 790, 148 ), ( 0, 0, 0 ) ); + spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -1083, 790, 148 ), ( 0, 0, 0 ) ); + spawncollision( "collision_clip_wall_128x128x10", "collider", ( 136, 2511, 245.5 ), vectorscale( ( 0, 1, 0 ), 90.0 ) ); + spawncollision( "collision_mp_takeoff_solar_weap", "collider", ( 580, 3239.5, 32.5 ), ( 0, 0, 0 ) ); + spawncollision( "collision_clip_wall_128x128x10", "collider", ( 1523.5, 2085.5, 220.5 ), vectorscale( ( 0, 1, 0 ), 270.3 ) ); + maps\mp\gametypes\_spawning::level_use_unified_spawning( 1 ); + level thread dog_jump_think(); + level.disableoutrovisionset = 1; + level.mptakeoffrocket = getent( "takeoff_rocket", "targetname" ); + assert( isdefined( level.mptakeoffrocket ), "Unable to find entity with targetname: 'takeoff_rocket'" ); + level.endgamefunction = ::takeoff_end_game; + level.preendgamefunction = ::takeoff_pre_end_game; + level thread setuprocketcamera(); +/# + execdevgui( "devgui_mp_takeoff" ); + level thread watchdevnotify(); + level thread devgui_endgame(); +#/ +} + +dog_jump_think() +{ + origin = ( 209, 3819, 91 ); + trigger = spawn( "trigger_box", origin, getaitriggerflags(), 64, 32, 64 ); + trigger setexcludeteamfortrigger( "none" ); + + for (;;) + { + trigger waittill( "trigger", entity ); + + if ( isai( entity ) ) + { + glassradiusdamage( origin, 64, 5001, 5000 ); + trigger delete(); + return; + } + } +} + +setuprocketcamera() +{ + wait 0.1; + getrocketcamera(); +} + +getrocketcamera() +{ + camerastruct = getstruct( "endgame_first_camera", "targetname" ); + assert( isdefined( camerastruct ), "Unable to find entity with targetname: 'endgame_first_camera'" ); + + if ( !isdefined( level.rocketcamera ) ) + { + level.rocketcamera = spawn( "script_model", camerastruct.origin ); + level.rocketcamera setmodel( "tag_origin" ); + } + else + level.rocketcamera.origin = camerastruct.origin; + + level.rocketcamera.angles = camerastruct.angles; + return level.rocketcamera; +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2300", reset_dvars ); +} + +watchdevnotify() +{ +/# + startvalue = 0; + setdvarint( "scr_takeoff_rocket", startvalue ); + + for (;;) + { + takeoff_rocket = getdvarint( "scr_takeoff_rocket" ); + + if ( takeoff_rocket != startvalue ) + { + level notify( "dev_takeoff_rocket" ); + startvalue = takeoff_rocket; + } + + wait 0.2; + } +#/ +} + +devgui_endgame() +{ +/# + rocket = level.mptakeoffrocket; + assert( isdefined( rocket ), "Unable to find entity with targetname: 'takeoff_rocket'" ); + rocketorigin = rocket.origin; + rocketangles = rocket.angles; + rocketmodel = rocket.model; + + for (;;) + { + level waittill( "dev_takeoff_rocket" ); + + visionsetnaked( "blackout", 0.1 ); + thread takeoff_pre_end_game(); + wait 1.0; + visionsetnaked( "mp_takeoff", 0.1 ); + thread takeoff_end_game(); + wait 4.5; + level notify( "debug_end_takeoff" ); + wait 1.0; + visionsetnaked( "mp_takeoff", 0.1 ); + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + player cameraactivate( 0 ); + } + + stop_exploder( 1001 ); + rocket delete(); + rocket = spawn( "script_model", rocketorigin ); + rocket.angles = rocketangles; + rocket setmodel( rocketmodel ); + level.mptakeoffrocket = rocket; + } +#/ +} + +water_trigger_init() +{ + wait 3; + triggers = getentarray( "trigger_hurt", "classname" ); + + foreach ( trigger in triggers ) + { + if ( trigger.origin[2] > level.mapcenter[2] ) + continue; + + trigger thread water_trigger_think(); + } + + triggers = getentarray( "water_killbrush", "targetname" ); + + foreach ( trigger in triggers ) + trigger thread player_splash_think(); +} + +player_splash_think() +{ + for (;;) + { + self waittill( "trigger", entity ); + + if ( isplayer( entity ) && isalive( entity ) ) + self thread trigger_thread( entity, ::player_water_fx ); + } +} + +player_water_fx( player, endon_condition ) +{ + maxs = self.origin + self getmaxs(); + + if ( maxs[2] > 60 ) + maxs += vectorscale( ( 0, 0, 1 ), 10.0 ); + + origin = ( player.origin[0], player.origin[1], maxs[2] ); + playfx( level._effect["water_splash_sm"], origin ); +} + +water_trigger_think() +{ + for (;;) + { + self waittill( "trigger", entity ); + + if ( isplayer( entity ) ) + { + entity playsound( "mpl_splash_death" ); + playfx( level._effect["water_splash"], entity.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + } + } +} + +leveloverridetime( defaulttime ) +{ + if ( self isinwater() ) + return 0.4; + + return defaulttime; +} + +useintermissionpointsonwavespawn() +{ + return self isinwater(); +} + +isinwater() +{ + triggers = getentarray( "trigger_hurt", "classname" ); + + foreach ( trigger in triggers ) + { + if ( trigger.origin[2] > level.mapcenter[2] ) + continue; + + if ( self istouching( trigger ) ) + return true; + } + + return false; +} + +takeoff_pre_end_game( timetillendgame, debug ) +{ + if ( !isdefined( debug ) ) + { + level waittill( "play_final_killcam" ); + + wait 10.0; + } + + rocket = level.mptakeoffrocket; + assert( isdefined( rocket ), "Unable to find entity with targetname: 'takeoff_rocket'" ); + rocket rocket_thrusters_initialize(); +} + +takeoff_end_game() +{ +/# + level endon( "debug_end_takeoff" ); +#/ + level.rocket_camera = 0; + rocket = level.mptakeoffrocket; + rocket playsound( "evt_shuttle_launch" ); + assert( isdefined( rocket ), "Unable to find entity with targetname: 'takeoff_rocket'" ); + rocket rocket_thrusters_initialize(); + cameraone = getrocketcamera(); + cameraone thread vibrateaftertime( getdvarfloatdefault( "mp_takeoff_shakewait", 0.5 ) ); + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + player camerasetposition( cameraone ); + player camerasetlookat(); + player cameraactivate( 1 ); + player setdepthoffield( 0, 0, 512, 512, 4, 0 ); + } + + level.rocket_camera = 1; + rocket thread rocket_move(); + wait 4.0; + visionsetnaked( "blackout", getdvarfloatdefault( "mp_takeoff_fade_black", 0.5 ) ); +} + +rocket_thrusters_initialize() +{ + if ( !isdefined( self.thrustersinited ) ) + { + self.thrustersinited = 1; + exploder( 1001 ); + playfxontag( level._effect["fx_mp_tak_shuttle_thruster_lg"], self, "tag_fx" ); + playfxontag( level._effect["fx_mp_tak_shuttle_thruster_sm"], self, "tag_fx5" ); + playfxontag( level._effect["fx_mp_tak_shuttle_thruster_md"], self, "tag_fx6" ); + playfxontag( level._effect["fx_mp_tak_shuttle_thruster_sm"], self, "tag_fx7" ); + } +} + +rocket_move() +{ + origin = self.origin; + heightincrease = getdvarintdefault( "mp_takeoff_rocket_start_height", 0 ); + self.origin += ( 0, 0, heightincrease ); + movetime = getdvarintdefault( "mp_takeoff_moveTime", 17 ); + moveaccelratio = getdvarfloatdefault( "mp_takeoff_moveAccel", 1.0 ); + self moveto( self.origin + vectorscale( ( 0, 0, 1 ), 50000.0 ), movetime, movetime * moveaccelratio ); + + self waittill( "movedone" ); + + origin = self.origin; +} + +vibrateaftertime( waittime ) +{ + self endon( "death" ); +/# + level endon( "debug_end_takeoff" ); +#/ + wait( waittime ); + pitchvibrateamplitude = getdvarfloatdefault( "mp_takeoff_start", 0.1 ); + vibrateamplitude = getdvarfloatdefault( "mp_takeoff_a_start", 0.1 ); + vibratetime = 0.05; + originalangles = self.angles; + + for (;;) + { + angles0 = ( originalangles[0] - pitchvibrateamplitude, originalangles[1], originalangles[2] - vibrateamplitude ); + angles1 = ( originalangles[0] + pitchvibrateamplitude, originalangles[1], originalangles[2] + vibrateamplitude ); + self rotateto( angles0, vibratetime ); + + self waittill( "rotatedone" ); + + self rotateto( angles1, vibratetime ); + + self waittill( "rotatedone" ); + + vibrateamplitude *= getdvarfloatdefault( "mp_takeoff_amp_vredux", 1.12 ); + pitchvibrateamplitude = 0 - pitchvibrateamplitude; + pitchvibrateamplitude *= getdvarfloatdefault( "mp_takeoff_amp_predux", 1.11 ); + } +} diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_turbine.gsc b/MP/Core/maps/mp/mp_turbine.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_turbine.gsc rename to MP/Core/maps/mp/mp_turbine.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_uplink.gsc b/MP/Core/maps/mp/mp_uplink.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_uplink.gsc rename to MP/Core/maps/mp/mp_uplink.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_vertigo.gsc b/MP/Core/maps/mp/mp_vertigo.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_vertigo.gsc rename to MP/Core/maps/mp/mp_vertigo.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_village.gsc b/MP/Core/maps/mp/mp_village.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/mp_village.gsc rename to MP/Core/maps/mp/mp_village.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/teams/_teams.gsc b/MP/Core/maps/mp/teams/_teams.gsc similarity index 99% rename from Multiplayer Core/patch_mp/maps/mp/teams/_teams.gsc rename to MP/Core/maps/mp/teams/_teams.gsc index dcd40ef..743372b 100644 --- a/Multiplayer Core/patch_mp/maps/mp/teams/_teams.gsc +++ b/MP/Core/maps/mp/teams/_teams.gsc @@ -340,33 +340,21 @@ set_player_model( team, weapon ) getteamflagmodel( teamref ) { -/# assert( isdefined( game["flagmodels"] ) ); -#/ -/# assert( isdefined( game["flagmodels"][teamref] ) ); -#/ return game["flagmodels"][teamref]; } getteamflagcarrymodel( teamref ) { -/# assert( isdefined( game["carry_flagmodels"] ) ); -#/ -/# assert( isdefined( game["carry_flagmodels"][teamref] ) ); -#/ return game["carry_flagmodels"][teamref]; } getteamflagicon( teamref ) { -/# assert( isdefined( game["carry_icon"] ) ); -#/ -/# assert( isdefined( game["carry_icon"][teamref] ) ); -#/ return game["carry_icon"][teamref]; } diff --git a/Multiplayer Core/patch_mp/maps/mp/teams/_teamset.gsc b/MP/Core/maps/mp/teams/_teamset.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/teams/_teamset.gsc rename to MP/Core/maps/mp/teams/_teamset.gsc diff --git a/Multiplayer Core/patch_mp/maps/mp/teams/_teamset_multiteam.gsc b/MP/Core/maps/mp/teams/_teamset_multiteam.gsc similarity index 100% rename from Multiplayer Core/patch_mp/maps/mp/teams/_teamset_multiteam.gsc rename to MP/Core/maps/mp/teams/_teamset_multiteam.gsc diff --git a/MP/Factions/faction_cd_mp/maps/mp/teams/_teamset_cd.gsc b/MP/Factions/faction_cd_mp/maps/mp/teams/_teamset_cd.gsc new file mode 100644 index 0000000..ca3515c --- /dev/null +++ b/MP/Factions/faction_cd_mp/maps/mp/teams/_teamset_cd.gsc @@ -0,0 +1,56 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\teams\_teamset; +#include mpbody\class_assault_cd; +#include mpbody\class_lmg_cd; +#include mpbody\class_shotgun_cd; +#include mpbody\class_smg_cd; +#include mpbody\class_sniper_cd; + +main() +{ + init( "axis" ); + maps\mp\teams\_teamset::customteam_init(); + precache(); +} + +init( team ) +{ + maps\mp\teams\_teamset::init(); + game[team] = "cd"; + game["defenders"] = team; + precacheshader( "faction_cd" ); + game["entity_headicon_" + team] = "faction_cd"; + game["headicon_" + team] = "faction_cd"; + level.teamprefix[team] = "vox_cd"; + level.teampostfix[team] = "cda"; + setdvar( "g_TeamName_" + team, &"MPUI_CD_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_FactionName_" + team, "cd" ); + game["strings"][team + "_win"] = &"MP_CD_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_CD_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_CD_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_CD_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_CD_FORFEITED"; + game["strings"][team + "_name"] = &"MP_CD_NAME"; + game["music"]["spawn_" + team] = "SPAWN_TER"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_TER"; + game["music"]["victory_" + team] = "VICTORY_TER"; + game["icons"][team] = "faction_cd"; + game["voice"][team] = "vox_cda_"; + setdvar( "scr_" + team, "ussr" ); + level.heli_vo[team]["hit"] = "vox_ops_2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_axis_3"; + game["carry_flagmodels"][team] = "mp_flag_axis_3_carry"; + game["carry_icon"][team] = "hudicon_spetsnaz_ctf_flag_carry"; +} + +precache() +{ + mpbody\class_assault_cd::precache(); + mpbody\class_lmg_cd::precache(); + mpbody\class_shotgun_cd::precache(); + mpbody\class_smg_cd::precache(); + mpbody\class_sniper_cd::precache(); +} diff --git a/MP/Factions/faction_cd_mp/mpbody/class_assault_cd.gsc b/MP/Factions/faction_cd_mp/mpbody/class_assault_cd.gsc new file mode 100644 index 0000000..0d5aca1 --- /dev/null +++ b/MP/Factions/faction_cd_mp/mpbody/class_assault_cd.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_cordis_assault_fb" ); + precachemodel( "c_mul_mp_cordis_assault_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team6"]["default"] = ::set_player_model; + else + game["set_player_model"]["axis"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_cordis_assault_fb" ); + self setviewmodel( "c_mul_mp_cordis_assault_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_cd_mp/mpbody/class_lmg_cd.gsc b/MP/Factions/faction_cd_mp/mpbody/class_lmg_cd.gsc new file mode 100644 index 0000000..be457aa --- /dev/null +++ b/MP/Factions/faction_cd_mp/mpbody/class_lmg_cd.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_cordis_lmg_fb" ); + precachemodel( "c_mul_mp_cordis_lmg_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team6"]["mg"] = ::set_player_model; + else + game["set_player_model"]["axis"]["mg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_cordis_lmg_fb" ); + self setviewmodel( "c_mul_mp_cordis_lmg_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_cd_mp/mpbody/class_shotgun_cd.gsc b/MP/Factions/faction_cd_mp/mpbody/class_shotgun_cd.gsc new file mode 100644 index 0000000..4b25cf0 --- /dev/null +++ b/MP/Factions/faction_cd_mp/mpbody/class_shotgun_cd.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_cordis_shotgun_fb" ); + precachemodel( "c_mul_mp_cordis_shotgun_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team6"]["spread"] = ::set_player_model; + else + game["set_player_model"]["axis"]["spread"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_cordis_shotgun_fb" ); + self setviewmodel( "c_mul_mp_cordis_shotgun_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_cd_mp/mpbody/class_smg_cd.gsc b/MP/Factions/faction_cd_mp/mpbody/class_smg_cd.gsc new file mode 100644 index 0000000..4374432 --- /dev/null +++ b/MP/Factions/faction_cd_mp/mpbody/class_smg_cd.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_cordis_smg_fb" ); + precachemodel( "c_mul_mp_cordis_smg_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team6"]["smg"] = ::set_player_model; + else + game["set_player_model"]["axis"]["smg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_cordis_smg_fb" ); + self setviewmodel( "c_mul_mp_cordis_smg_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_cd_mp/mpbody/class_sniper_cd.gsc b/MP/Factions/faction_cd_mp/mpbody/class_sniper_cd.gsc new file mode 100644 index 0000000..b768927 --- /dev/null +++ b/MP/Factions/faction_cd_mp/mpbody/class_sniper_cd.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_cordis_sniper_fb" ); + precachemodel( "c_mul_mp_cordis_sniper_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team6"]["rifle"] = ::set_player_model; + else + game["set_player_model"]["axis"]["rifle"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_cordis_sniper_fb" ); + self setviewmodel( "c_mul_mp_cordis_sniper_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_cd_sand_mp/maps/mp/teams/_teamset_cd_sand.gsc b/MP/Factions/faction_cd_sand_mp/maps/mp/teams/_teamset_cd_sand.gsc new file mode 100644 index 0000000..e67d04b --- /dev/null +++ b/MP/Factions/faction_cd_sand_mp/maps/mp/teams/_teamset_cd_sand.gsc @@ -0,0 +1,56 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\teams\_teamset; +#include mpbody\class_assault_cd_sand; +#include mpbody\class_lmg_cd_sand; +#include mpbody\class_shotgun_cd_sand; +#include mpbody\class_smg_cd_sand; +#include mpbody\class_sniper_cd_sand; + +main() +{ + init( "axis" ); + maps\mp\teams\_teamset::customteam_init(); + precache(); +} + +init( team ) +{ + maps\mp\teams\_teamset::init(); + game[team] = "cd"; + game["defenders"] = team; + precacheshader( "faction_cd" ); + game["entity_headicon_" + team] = "faction_cd"; + game["headicon_" + team] = "faction_cd"; + level.teamprefix[team] = "vox_cd"; + level.teampostfix[team] = "cda"; + setdvar( "g_TeamName_" + team, &"MPUI_CD_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_FactionName_" + team, "cd" ); + game["strings"][team + "_win"] = &"MP_CD_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_CD_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_CD_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_CD_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_CD_FORFEITED"; + game["strings"][team + "_name"] = &"MP_CD_NAME"; + game["music"]["spawn_" + team] = "SPAWN_TER"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_TER"; + game["music"]["victory_" + team] = "VICTORY_TER"; + game["icons"][team] = "faction_cd"; + game["voice"][team] = "vox_cda_"; + setdvar( "scr_" + team, "ussr" ); + level.heli_vo[team]["hit"] = "vox_ops_2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_axis_3"; + game["carry_flagmodels"][team] = "mp_flag_axis_3_carry"; + game["carry_icon"][team] = "hudicon_spetsnaz_ctf_flag_carry"; +} + +precache() +{ + mpbody\class_assault_cd_sand::precache(); + mpbody\class_lmg_cd_sand::precache(); + mpbody\class_shotgun_cd_sand::precache(); + mpbody\class_smg_cd_sand::precache(); + mpbody\class_sniper_cd_sand::precache(); +} diff --git a/MP/Factions/faction_cd_sand_mp/mpbody/class_assault_cd_sand.gsc b/MP/Factions/faction_cd_sand_mp/mpbody/class_assault_cd_sand.gsc new file mode 100644 index 0000000..36ab8fb --- /dev/null +++ b/MP/Factions/faction_cd_sand_mp/mpbody/class_assault_cd_sand.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_cordis_assault_ca_fb" ); + precachemodel( "c_mul_mp_cordis_assault_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team6"]["default"] = ::set_player_model; + else + game["set_player_model"]["axis"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_cordis_assault_ca_fb" ); + self setviewmodel( "c_mul_mp_cordis_assault_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_cd_sand_mp/mpbody/class_lmg_cd_sand.gsc b/MP/Factions/faction_cd_sand_mp/mpbody/class_lmg_cd_sand.gsc new file mode 100644 index 0000000..08df76f --- /dev/null +++ b/MP/Factions/faction_cd_sand_mp/mpbody/class_lmg_cd_sand.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_cordis_lmg_ca_fb" ); + precachemodel( "c_mul_mp_cordis_lmg_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team6"]["mg"] = ::set_player_model; + else + game["set_player_model"]["axis"]["mg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_cordis_lmg_ca_fb" ); + self setviewmodel( "c_mul_mp_cordis_lmg_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_cd_sand_mp/mpbody/class_shotgun_cd_sand.gsc b/MP/Factions/faction_cd_sand_mp/mpbody/class_shotgun_cd_sand.gsc new file mode 100644 index 0000000..d36c444 --- /dev/null +++ b/MP/Factions/faction_cd_sand_mp/mpbody/class_shotgun_cd_sand.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_cordis_shotgun_ca_fb" ); + precachemodel( "c_mul_mp_cordis_shotgun_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team6"]["spread"] = ::set_player_model; + else + game["set_player_model"]["axis"]["spread"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_cordis_shotgun_ca_fb" ); + self setviewmodel( "c_mul_mp_cordis_shotgun_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_cd_sand_mp/mpbody/class_smg_cd_sand.gsc b/MP/Factions/faction_cd_sand_mp/mpbody/class_smg_cd_sand.gsc new file mode 100644 index 0000000..885157c --- /dev/null +++ b/MP/Factions/faction_cd_sand_mp/mpbody/class_smg_cd_sand.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_cordis_smg_ca_fb" ); + precachemodel( "c_mul_mp_cordis_smg_ca_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team6"]["smg"] = ::set_player_model; + else + game["set_player_model"]["axis"]["smg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_cordis_smg_ca_fb" ); + self setviewmodel( "c_mul_mp_cordis_smg_ca_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_cd_sand_mp/mpbody/class_sniper_cd_sand.gsc b/MP/Factions/faction_cd_sand_mp/mpbody/class_sniper_cd_sand.gsc new file mode 100644 index 0000000..54d78f2 --- /dev/null +++ b/MP/Factions/faction_cd_sand_mp/mpbody/class_sniper_cd_sand.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_cordis_sniper_ca_fb" ); + precachemodel( "c_mul_mp_cordis_sniper_ca_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team6"]["rifle"] = ::set_player_model; + else + game["set_player_model"]["axis"]["rifle"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_cordis_sniper_ca_fb" ); + self setviewmodel( "c_mul_mp_cordis_sniper_ca_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_fbi_mp/maps/mp/teams/_teamset_fbi.gsc b/MP/Factions/faction_fbi_mp/maps/mp/teams/_teamset_fbi.gsc new file mode 100644 index 0000000..a0d2e39 --- /dev/null +++ b/MP/Factions/faction_fbi_mp/maps/mp/teams/_teamset_fbi.gsc @@ -0,0 +1,56 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\teams\_teamset; +#include mpbody\class_assault_usa_fbi; +#include mpbody\class_lmg_usa_fbi; +#include mpbody\class_shotgun_usa_fbi; +#include mpbody\class_smg_usa_fbi; +#include mpbody\class_sniper_usa_fbi; + +main() +{ + init( "allies" ); + maps\mp\teams\_teamset::customteam_init(); + precache(); +} + +init( team ) +{ + maps\mp\teams\_teamset::init(); + game[team] = "fbi"; + game["attackers"] = team; + precacheshader( "faction_fbi" ); + game["entity_headicon_" + team] = "faction_fbi"; + game["headicon_" + team] = "faction_fbi"; + level.teamprefix[team] = "vox_hr"; + level.teampostfix[team] = "hrt"; + setdvar( "g_TeamName_" + team, &"MPUI_FBI_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_FactionName_" + team, "usa_fbi" ); + game["strings"][team + "_win"] = &"MP_FBI_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_FBI_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_FBI_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_FBI_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_FBI_FORFEITED"; + game["strings"][team + "_name"] = &"MP_FBI_NAME"; + game["music"]["spawn_" + team] = "SPAWN_FBI"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_FBI"; + game["music"]["victory_" + team] = "VICTORY_FBI"; + game["icons"][team] = "faction_fbi"; + game["voice"][team] = "vox_fbi_"; + setdvar( "scr_" + team, "marines" ); + level.heli_vo[team]["hit"] = "vox_ops_2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_allies_2"; + game["carry_flagmodels"][team] = "mp_flag_allies_2_carry"; + game["carry_icon"][team] = "hudicon_marines_ctf_flag_carry"; +} + +precache() +{ + mpbody\class_assault_usa_fbi::precache(); + mpbody\class_lmg_usa_fbi::precache(); + mpbody\class_shotgun_usa_fbi::precache(); + mpbody\class_smg_usa_fbi::precache(); + mpbody\class_sniper_usa_fbi::precache(); +} diff --git a/MP/Factions/faction_fbi_mp/mpbody/class_assault_usa_fbi.gsc b/MP/Factions/faction_fbi_mp/mpbody/class_assault_usa_fbi.gsc new file mode 100644 index 0000000..4df34fb --- /dev/null +++ b/MP/Factions/faction_fbi_mp/mpbody/class_assault_usa_fbi.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_fbi_assault_fb" ); + precachemodel( "c_usa_mp_fbi_longsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team3"]["default"] = ::set_player_model; + else + game["set_player_model"]["allies"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_fbi_assault_fb" ); + self setviewmodel( "c_usa_mp_fbi_longsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_fbi_mp/mpbody/class_lmg_usa_fbi.gsc b/MP/Factions/faction_fbi_mp/mpbody/class_lmg_usa_fbi.gsc new file mode 100644 index 0000000..fbac34c --- /dev/null +++ b/MP/Factions/faction_fbi_mp/mpbody/class_lmg_usa_fbi.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_fbi_lmg_fb" ); + precachemodel( "c_usa_mp_fbi_longsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team3"]["mg"] = ::set_player_model; + else + game["set_player_model"]["allies"]["mg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_fbi_lmg_fb" ); + self setviewmodel( "c_usa_mp_fbi_longsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_fbi_mp/mpbody/class_shotgun_usa_fbi.gsc b/MP/Factions/faction_fbi_mp/mpbody/class_shotgun_usa_fbi.gsc new file mode 100644 index 0000000..77c3c44 --- /dev/null +++ b/MP/Factions/faction_fbi_mp/mpbody/class_shotgun_usa_fbi.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_fbi_shotgun_fb" ); + precachemodel( "c_usa_mp_fbi_longsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team3"]["spread"] = ::set_player_model; + else + game["set_player_model"]["allies"]["spread"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_fbi_shotgun_fb" ); + self setviewmodel( "c_usa_mp_fbi_longsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_fbi_mp/mpbody/class_smg_usa_fbi.gsc b/MP/Factions/faction_fbi_mp/mpbody/class_smg_usa_fbi.gsc new file mode 100644 index 0000000..9c80652 --- /dev/null +++ b/MP/Factions/faction_fbi_mp/mpbody/class_smg_usa_fbi.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_fbi_smg_fb" ); + precachemodel( "c_usa_mp_fbi_shortsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team3"]["smg"] = ::set_player_model; + else + game["set_player_model"]["allies"]["smg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_fbi_smg_fb" ); + self setviewmodel( "c_usa_mp_fbi_shortsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_fbi_mp/mpbody/class_sniper_usa_fbi.gsc b/MP/Factions/faction_fbi_mp/mpbody/class_sniper_usa_fbi.gsc new file mode 100644 index 0000000..77ba3c1 --- /dev/null +++ b/MP/Factions/faction_fbi_mp/mpbody/class_sniper_usa_fbi.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_fbi_sniper_fb" ); + precachemodel( "c_usa_mp_fbi_longsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team3"]["rifle"] = ::set_player_model; + else + game["set_player_model"]["allies"]["rifle"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_fbi_sniper_fb" ); + self setviewmodel( "c_usa_mp_fbi_longsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_isa_mp/maps/mp/teams/_teamset_isa.gsc b/MP/Factions/faction_isa_mp/maps/mp/teams/_teamset_isa.gsc new file mode 100644 index 0000000..1b1ff70 --- /dev/null +++ b/MP/Factions/faction_isa_mp/maps/mp/teams/_teamset_isa.gsc @@ -0,0 +1,56 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\teams\_teamset; +#include mpbody\class_assault_isa; +#include mpbody\class_lmg_isa; +#include mpbody\class_shotgun_isa; +#include mpbody\class_smg_isa; +#include mpbody\class_sniper_isa; + +main() +{ + init( "allies" ); + maps\mp\teams\_teamset::customteam_init(); + precache(); +} + +init( team ) +{ + maps\mp\teams\_teamset::init(); + game[team] = "isa"; + game["attackers"] = team; + precacheshader( "faction_isa" ); + game["entity_headicon_" + team] = "faction_isa"; + game["headicon_" + team] = "faction_isa"; + level.teamprefix[team] = "vox_is"; + level.teampostfix[team] = "isa"; + setdvar( "g_TeamName_" + team, &"MPUI_ISA_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_FactionName_" + team, "isa" ); + game["strings"][team + "_win"] = &"MP_ISA_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_ISA_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_ISA_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_ISA_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_ISA_FORFEITED"; + game["strings"][team + "_name"] = &"MP_ISA_NAME"; + game["music"]["spawn_" + team] = "SPAWN_CIA"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_CIA"; + game["music"]["victory_" + team] = "VICTORY_CIA"; + game["icons"][team] = "faction_isa"; + game["voice"][team] = "vox_isa_"; + setdvar( "scr_" + team, "marines" ); + level.heli_vo[team]["hit"] = "vox_ops_2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_allies_3"; + game["carry_flagmodels"][team] = "mp_flag_allies_3_carry"; + game["carry_icon"][team] = "hudicon_marines_ctf_flag_carry"; +} + +precache() +{ + mpbody\class_assault_isa::precache(); + mpbody\class_lmg_isa::precache(); + mpbody\class_shotgun_isa::precache(); + mpbody\class_smg_isa::precache(); + mpbody\class_sniper_isa::precache(); +} diff --git a/MP/Factions/faction_isa_mp/mpbody/class_assault_isa.gsc b/MP/Factions/faction_isa_mp/mpbody/class_assault_isa.gsc new file mode 100644 index 0000000..2d59738 --- /dev/null +++ b/MP/Factions/faction_isa_mp/mpbody/class_assault_isa.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_isa_assault_fb" ); + precachemodel( "c_usa_mp_isa_assault_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team5"]["default"] = ::set_player_model; + else + game["set_player_model"]["allies"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_isa_assault_fb" ); + self setviewmodel( "c_usa_mp_isa_assault_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_isa_mp/mpbody/class_lmg_isa.gsc b/MP/Factions/faction_isa_mp/mpbody/class_lmg_isa.gsc new file mode 100644 index 0000000..0bf1eb2 --- /dev/null +++ b/MP/Factions/faction_isa_mp/mpbody/class_lmg_isa.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_isa_lmg_fb" ); + precachemodel( "c_usa_mp_isa_lmg_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team5"]["mg"] = ::set_player_model; + else + game["set_player_model"]["allies"]["mg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_isa_lmg_fb" ); + self setviewmodel( "c_usa_mp_isa_lmg_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_isa_mp/mpbody/class_shotgun_isa.gsc b/MP/Factions/faction_isa_mp/mpbody/class_shotgun_isa.gsc new file mode 100644 index 0000000..cf45d66 --- /dev/null +++ b/MP/Factions/faction_isa_mp/mpbody/class_shotgun_isa.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_isa_shotgun_fb" ); + precachemodel( "c_usa_mp_isa_shotgun_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team5"]["spread"] = ::set_player_model; + else + game["set_player_model"]["allies"]["spread"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_isa_shotgun_fb" ); + self setviewmodel( "c_usa_mp_isa_shotgun_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_isa_mp/mpbody/class_smg_isa.gsc b/MP/Factions/faction_isa_mp/mpbody/class_smg_isa.gsc new file mode 100644 index 0000000..b009663 --- /dev/null +++ b/MP/Factions/faction_isa_mp/mpbody/class_smg_isa.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_isa_smg_fb" ); + precachemodel( "c_usa_mp_isa_smg_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team5"]["smg"] = ::set_player_model; + else + game["set_player_model"]["allies"]["smg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_isa_smg_fb" ); + self setviewmodel( "c_usa_mp_isa_smg_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_isa_mp/mpbody/class_sniper_isa.gsc b/MP/Factions/faction_isa_mp/mpbody/class_sniper_isa.gsc new file mode 100644 index 0000000..41fc3e4 --- /dev/null +++ b/MP/Factions/faction_isa_mp/mpbody/class_sniper_isa.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_isa_sniper_fb" ); + precachemodel( "c_usa_mp_isa_sniper_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team5"]["rifle"] = ::set_player_model; + else + game["set_player_model"]["allies"]["rifle"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_isa_sniper_fb" ); + self setviewmodel( "c_usa_mp_isa_sniper_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_mp/maps/mp/teams/_teamset_multiteam.gsc b/MP/Factions/faction_multiteam_mp/maps/mp/teams/_teamset_multiteam.gsc new file mode 100644 index 0000000..f2095c6 --- /dev/null +++ b/MP/Factions/faction_multiteam_mp/maps/mp/teams/_teamset_multiteam.gsc @@ -0,0 +1,219 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\teams\_teamset; +#include mpbody\class_assault_usa_seals; +#include mpbody\class_assault_usa_fbi; +#include mpbody\class_assault_rus_pmc; +#include mpbody\class_assault_chn_pla; +#include mpbody\class_assault_isa; +#include mpbody\class_assault_cd; + +main() +{ + maps\mp\teams\_teamset::init(); + init_seals( "allies" ); + init_pla( "axis" ); + init_fbi( "team3" ); + init_pmc( "team4" ); + init_isa( "team5" ); + init_cd( "team6" ); + init_seals( "team7" ); + init_seals( "team8" ); + precache(); +} + +precache() +{ + mpbody\class_assault_usa_seals::precache(); + mpbody\class_assault_usa_fbi::precache(); + mpbody\class_assault_rus_pmc::precache(); + mpbody\class_assault_chn_pla::precache(); + mpbody\class_assault_isa::precache(); + mpbody\class_assault_cd::precache(); +} + +init_seals( team ) +{ + game[team] = "seals"; + game["attackers"] = team; + precacheshader( "faction_seals" ); + game["entity_headicon_" + team] = "faction_seals"; + game["headicon_" + team] = "faction_seals"; + level.teamprefix[team] = "vox_st"; + level.teampostfix[team] = "st6"; + setdvar( "g_TeamName_" + team, &"MPUI_SEALS_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_FactionName_" + team, "usa_seals" ); + game["strings"][team + "_win"] = &"MP_SEALS_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_SEALS_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_SEALS_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_SEALS_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_SEALS_FORFEITED"; + game["strings"][team + "_name"] = &"MP_SEALS_NAME"; + game["music"]["spawn_" + team] = "SPAWN_ST6"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_ST6"; + game["music"]["victory_" + team] = "VICTORY_ST6"; + game["icons"][team] = "faction_seals"; + game["voice"][team] = "vox_st6_"; + setdvar( "scr_" + team, "marines" ); + level.heli_vo[team]["hit"] = "vox_ops_2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_allies_1"; + game["carry_flagmodels"][team] = "mp_flag_allies_1_carry"; + game["carry_icon"][team] = "hudicon_marines_ctf_flag_carry"; +} + +init_pmc( team ) +{ + game[team] = "pmc"; + game["defenders"] = team; + precacheshader( "faction_pmc" ); + game["entity_headicon_" + team] = "faction_pmc"; + game["headicon_" + team] = "faction_pmc"; + level.teamprefix[team] = "vox_pm"; + level.teampostfix[team] = "pmc"; + setdvar( "g_TeamName_" + team, &"MPUI_PMC_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_FactionName_" + team, "rus_pmc" ); + game["strings"][team + "_win"] = &"MP_PMC_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_PMC_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_PMC_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_PMC_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_PMC_FORFEITED"; + game["strings"][team + "_name"] = &"MP_PMC_NAME"; + game["music"]["spawn_" + team] = "SPAWN_PMC"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_PMC"; + game["music"]["victory_" + team] = "VICTORY_PMC"; + game["icons"][team] = "faction_pmc"; + game["voice"][team] = "vox_pmc_"; + setdvar( "scr_" + team, "ussr" ); + level.heli_vo[team]["hit"] = "vox_rus_0_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_axis_1"; + game["carry_flagmodels"][team] = "mp_flag_axis_1_carry"; + game["carry_icon"][team] = "hudicon_spetsnaz_ctf_flag_carry"; +} + +init_pla( team ) +{ + game[team] = "pla"; + game["defenders"] = team; + precacheshader( "faction_pla" ); + game["entity_headicon_" + team] = "faction_pla"; + game["headicon_" + team] = "faction_pla"; + level.teamprefix[team] = "vox_ch"; + level.teampostfix[team] = "pla"; + setdvar( "g_TeamName_" + team, &"MPUI_PLA_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_FactionName_" + team, "chn_pla" ); + game["strings"][team + "_win"] = &"MP_PLA_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_PLA_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_PLA_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_PLA_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_PLA_FORFEITED"; + game["strings"][team + "_name"] = &"MP_PLA_NAME"; + game["music"]["spawn_" + team] = "SPAWN_PLA"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_PLA"; + game["music"]["victory_" + team] = "VICTORY_PLA"; + game["icons"][team] = "faction_pla"; + game["voice"][team] = "vox_pla_"; + setdvar( "scr_" + team, "ussr" ); + level.heli_vo[team]["hit"] = "vox_rus_0_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_axis_1"; + game["carry_flagmodels"][team] = "mp_flag_axis_1_carry"; + game["carry_icon"][team] = "hudicon_spetsnaz_ctf_flag_carry"; +} + +init_fbi( team ) +{ + game[team] = "fbi"; + game["attackers"] = team; + precacheshader( "faction_fbi" ); + game["entity_headicon_" + team] = "faction_fbi"; + game["headicon_" + team] = "faction_fbi"; + level.teamprefix[team] = "vox_fbi"; + level.teampostfix[team] = "fbi"; + setdvar( "g_TeamName_" + team, &"MPUI_FBI_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_FactionName_" + team, "usa_fbi" ); + game["strings"][team + "_win"] = &"MP_FBI_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_FBI_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_FBI_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_FBI_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_FBI_FORFEITED"; + game["strings"][team + "_name"] = &"MP_FBI_NAME"; + game["music"]["spawn_" + team] = "SPAWN_FBI"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_FBI"; + game["music"]["victory_" + team] = "VICTORY_FBI"; + game["icons"][team] = "faction_fbi"; + game["voice"][team] = "vox_fbi_"; + setdvar( "scr_" + team, "marines" ); + level.heli_vo[team]["hit"] = "vox_ops_2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_allies_1"; + game["carry_flagmodels"][team] = "mp_flag_allies_1_carry"; + game["carry_icon"][team] = "hudicon_marines_ctf_flag_carry"; +} + +init_isa( team ) +{ + game[team] = "isa"; + game["attackers"] = team; + precacheshader( "faction_isa" ); + game["entity_headicon_" + team] = "faction_isa"; + game["headicon_" + team] = "faction_isa"; + level.teamprefix[team] = "vox_is"; + level.teampostfix[team] = "isa"; + setdvar( "g_TeamName_" + team, &"MPUI_ISA_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_FactionName_" + team, "isa" ); + game["strings"][team + "_win"] = &"MP_ISA_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_ISA_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_ISA_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_ISA_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_ISA_FORFEITED"; + game["strings"][team + "_name"] = &"MP_ISA_NAME"; + game["music"]["spawn_" + team] = "SPAWN_CIA"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_CIA"; + game["music"]["victory_" + team] = "VICTORY_CIA"; + game["icons"][team] = "faction_isa"; + game["voice"][team] = "vox_isa_"; + setdvar( "scr_" + team, "marines" ); + level.heli_vo[team]["hit"] = "vox_ops_2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_allies_1"; + game["carry_flagmodels"][team] = "mp_flag_allies_1_carry"; + game["carry_icon"][team] = "hudicon_marines_ctf_flag_carry"; +} + +init_cd( team ) +{ + game[team] = "cd"; + game["attackers"] = team; + precacheshader( "faction_cd" ); + game["entity_headicon_" + team] = "faction_cd"; + game["headicon_" + team] = "faction_cd"; + level.teamprefix[team] = "vox_cd"; + level.teampostfix[team] = "cda"; + setdvar( "g_TeamName_" + team, &"MPUI_CD_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_FactionName_" + team, "cd" ); + game["strings"][team + "_win"] = &"MP_CD_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_CD_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_CD_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_CD_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_CD_FORFEITED"; + game["strings"][team + "_name"] = &"MP_CD_NAME"; + game["music"]["spawn_" + team] = "SPAWN_TER"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_TER"; + game["music"]["victory_" + team] = "VICTORY_TER"; + game["icons"][team] = "faction_cd"; + game["voice"][team] = "vox_cda_"; + setdvar( "scr_" + team, "ussr" ); + level.heli_vo[team]["hit"] = "vox_cd2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_axis_1"; + game["carry_flagmodels"][team] = "mp_flag_axis_1_carry"; + game["carry_icon"][team] = "hudicon_spetsnaz_ctf_flag_carry"; +} diff --git a/MP/Factions/faction_multiteam_mp/mpbody/class_assault_cd.gsc b/MP/Factions/faction_multiteam_mp/mpbody/class_assault_cd.gsc new file mode 100644 index 0000000..0d5aca1 --- /dev/null +++ b/MP/Factions/faction_multiteam_mp/mpbody/class_assault_cd.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_cordis_assault_fb" ); + precachemodel( "c_mul_mp_cordis_assault_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team6"]["default"] = ::set_player_model; + else + game["set_player_model"]["axis"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_cordis_assault_fb" ); + self setviewmodel( "c_mul_mp_cordis_assault_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_mp/mpbody/class_assault_chn_pla.gsc b/MP/Factions/faction_multiteam_mp/mpbody/class_assault_chn_pla.gsc new file mode 100644 index 0000000..39da7c2 --- /dev/null +++ b/MP/Factions/faction_multiteam_mp/mpbody/class_assault_chn_pla.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_chn_mp_pla_assault_fb" ); + precachemodel( "c_chn_mp_pla_longsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["axis"]["default"] = ::set_player_model; + else + game["set_player_model"]["axis"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_chn_mp_pla_assault_fb" ); + self setviewmodel( "c_chn_mp_pla_longsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_mp/mpbody/class_assault_isa.gsc b/MP/Factions/faction_multiteam_mp/mpbody/class_assault_isa.gsc new file mode 100644 index 0000000..2d59738 --- /dev/null +++ b/MP/Factions/faction_multiteam_mp/mpbody/class_assault_isa.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_isa_assault_fb" ); + precachemodel( "c_usa_mp_isa_assault_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team5"]["default"] = ::set_player_model; + else + game["set_player_model"]["allies"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_isa_assault_fb" ); + self setviewmodel( "c_usa_mp_isa_assault_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_mp/mpbody/class_assault_rus_pmc.gsc b/MP/Factions/faction_multiteam_mp/mpbody/class_assault_rus_pmc.gsc new file mode 100644 index 0000000..8eec290 --- /dev/null +++ b/MP/Factions/faction_multiteam_mp/mpbody/class_assault_rus_pmc.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_pmc_assault_fb" ); + precachemodel( "c_mul_mp_pmc_longsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team4"]["default"] = ::set_player_model; + else + game["set_player_model"]["axis"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_pmc_assault_fb" ); + self setviewmodel( "c_mul_mp_pmc_longsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_mp/mpbody/class_assault_usa_fbi.gsc b/MP/Factions/faction_multiteam_mp/mpbody/class_assault_usa_fbi.gsc new file mode 100644 index 0000000..4df34fb --- /dev/null +++ b/MP/Factions/faction_multiteam_mp/mpbody/class_assault_usa_fbi.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_fbi_assault_fb" ); + precachemodel( "c_usa_mp_fbi_longsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team3"]["default"] = ::set_player_model; + else + game["set_player_model"]["allies"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_fbi_assault_fb" ); + self setviewmodel( "c_usa_mp_fbi_longsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_mp/mpbody/class_assault_usa_seals.gsc b/MP/Factions/faction_multiteam_mp/mpbody/class_assault_usa_seals.gsc new file mode 100644 index 0000000..ec39033 --- /dev/null +++ b/MP/Factions/faction_multiteam_mp/mpbody/class_assault_usa_seals.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_seal6_assault_fb" ); + precachemodel( "c_usa_mp_seal6_longsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["allies"]["default"] = ::set_player_model; + else + game["set_player_model"]["allies"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_seal6_assault_fb" ); + self setviewmodel( "c_usa_mp_seal6_longsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_sand_mp/maps/mp/teams/_teamset_multiteam_sand.gsc b/MP/Factions/faction_multiteam_sand_mp/maps/mp/teams/_teamset_multiteam_sand.gsc new file mode 100644 index 0000000..94e83e7 --- /dev/null +++ b/MP/Factions/faction_multiteam_sand_mp/maps/mp/teams/_teamset_multiteam_sand.gsc @@ -0,0 +1,219 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\teams\_teamset; +#include mpbody\class_assault_usa_seals_sand; +#include mpbody\class_assault_usa_fbi_sand; +#include mpbody\class_assault_rus_pmc_sand; +#include mpbody\class_assault_chn_pla_sand; +#include mpbody\class_assault_isa_sand; +#include mpbody\class_assault_cd_sand; + +main() +{ + maps\mp\teams\_teamset::init(); + init_seals( "allies" ); + init_pla( "axis" ); + init_fbi( "team3" ); + init_pmc( "team4" ); + init_isa( "team5" ); + init_cd( "team6" ); + init_seals( "team7" ); + init_seals( "team8" ); + precache(); +} + +precache() +{ + mpbody\class_assault_usa_seals_sand::precache(); + mpbody\class_assault_usa_fbi_sand::precache(); + mpbody\class_assault_rus_pmc_sand::precache(); + mpbody\class_assault_chn_pla_sand::precache(); + mpbody\class_assault_isa_sand::precache(); + mpbody\class_assault_cd_sand::precache(); +} + +init_seals( team ) +{ + game[team] = "seals"; + game["attackers"] = team; + precacheshader( "faction_seals" ); + game["entity_headicon_" + team] = "faction_seals"; + game["headicon_" + team] = "faction_seals"; + level.teamprefix[team] = "vox_st"; + level.teampostfix[team] = "st6"; + setdvar( "g_TeamName_" + team, &"MPUI_SEALS_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_FactionName_" + team, "usa_seals" ); + game["strings"][team + "_win"] = &"MP_SEALS_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_SEALS_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_SEALS_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_SEALS_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_SEALS_FORFEITED"; + game["strings"][team + "_name"] = &"MP_SEALS_NAME"; + game["music"]["spawn_" + team] = "SPAWN_ST6"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_ST6"; + game["music"]["victory_" + team] = "VICTORY_ST6"; + game["icons"][team] = "faction_seals"; + game["voice"][team] = "vox_st6_"; + setdvar( "scr_" + team, "marines" ); + level.heli_vo[team]["hit"] = "vox_ops_2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_allies_1"; + game["carry_flagmodels"][team] = "mp_flag_allies_1_carry"; + game["carry_icon"][team] = "hudicon_marines_ctf_flag_carry"; +} + +init_pmc( team ) +{ + game[team] = "pmc"; + game["defenders"] = team; + precacheshader( "faction_pmc" ); + game["entity_headicon_" + team] = "faction_pmc"; + game["headicon_" + team] = "faction_pmc"; + level.teamprefix[team] = "vox_pm"; + level.teampostfix[team] = "pmc"; + setdvar( "g_TeamName_" + team, &"MPUI_PMC_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_FactionName_" + team, "rus_pmc" ); + game["strings"][team + "_win"] = &"MP_PMC_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_PMC_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_PMC_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_PMC_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_PMC_FORFEITED"; + game["strings"][team + "_name"] = &"MP_PMC_NAME"; + game["music"]["spawn_" + team] = "SPAWN_PMC"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_PMC"; + game["music"]["victory_" + team] = "VICTORY_PMC"; + game["icons"][team] = "faction_pmc"; + game["voice"][team] = "vox_pmc_"; + setdvar( "scr_" + team, "ussr" ); + level.heli_vo[team]["hit"] = "vox_rus_0_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_axis_1"; + game["carry_flagmodels"][team] = "mp_flag_axis_1_carry"; + game["carry_icon"][team] = "hudicon_spetsnaz_ctf_flag_carry"; +} + +init_pla( team ) +{ + game[team] = "pla"; + game["defenders"] = team; + precacheshader( "faction_pla" ); + game["entity_headicon_" + team] = "faction_pla"; + game["headicon_" + team] = "faction_pla"; + level.teamprefix[team] = "vox_ch"; + level.teampostfix[team] = "pla"; + setdvar( "g_TeamName_" + team, &"MPUI_PLA_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_FactionName_" + team, "chn_pla" ); + game["strings"][team + "_win"] = &"MP_PLA_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_PLA_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_PLA_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_PLA_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_PLA_FORFEITED"; + game["strings"][team + "_name"] = &"MP_PLA_NAME"; + game["music"]["spawn_" + team] = "SPAWN_PLA"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_PLA"; + game["music"]["victory_" + team] = "VICTORY_PLA"; + game["icons"][team] = "faction_pla"; + game["voice"][team] = "vox_pla_"; + setdvar( "scr_" + team, "ussr" ); + level.heli_vo[team]["hit"] = "vox_rus_0_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_axis_1"; + game["carry_flagmodels"][team] = "mp_flag_axis_1_carry"; + game["carry_icon"][team] = "hudicon_spetsnaz_ctf_flag_carry"; +} + +init_fbi( team ) +{ + game[team] = "fbi"; + game["attackers"] = team; + precacheshader( "faction_fbi" ); + game["entity_headicon_" + team] = "faction_fbi"; + game["headicon_" + team] = "faction_fbi"; + level.teamprefix[team] = "vox_hr"; + level.teampostfix[team] = "hrt"; + setdvar( "g_TeamName_" + team, &"MPUI_FBI_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_FactionName_" + team, "usa_fbi" ); + game["strings"][team + "_win"] = &"MP_FBI_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_FBI_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_FBI_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_FBI_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_FBI_FORFEITED"; + game["strings"][team + "_name"] = &"MP_FBI_NAME"; + game["music"]["spawn_" + team] = "SPAWN_FBI"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_FBI"; + game["music"]["victory_" + team] = "VICTORY_FBI"; + game["icons"][team] = "faction_fbi"; + game["voice"][team] = "vox_fbi_"; + setdvar( "scr_" + team, "marines" ); + level.heli_vo[team]["hit"] = "vox_ops_2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_allies_1"; + game["carry_flagmodels"][team] = "mp_flag_allies_1_carry"; + game["carry_icon"][team] = "hudicon_marines_ctf_flag_carry"; +} + +init_isa( team ) +{ + game[team] = "isa"; + game["attackers"] = team; + precacheshader( "faction_isa" ); + game["entity_headicon_" + team] = "faction_isa"; + game["headicon_" + team] = "faction_isa"; + level.teamprefix[team] = "vox_is"; + level.teampostfix[team] = "isa"; + setdvar( "g_TeamName_" + team, &"MPUI_ISA_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_FactionName_" + team, "isa" ); + game["strings"][team + "_win"] = &"MP_ISA_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_ISA_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_ISA_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_ISA_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_ISA_FORFEITED"; + game["strings"][team + "_name"] = &"MP_ISA_NAME"; + game["music"]["spawn_" + team] = "SPAWN_CIA"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_CIA"; + game["music"]["victory_" + team] = "VICTORY_CIA"; + game["icons"][team] = "faction_isa"; + game["voice"][team] = "vox_isa_"; + setdvar( "scr_" + team, "marines" ); + level.heli_vo[team]["hit"] = "vox_ops_2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_allies_1"; + game["carry_flagmodels"][team] = "mp_flag_allies_1_carry"; + game["carry_icon"][team] = "hudicon_marines_ctf_flag_carry"; +} + +init_cd( team ) +{ + game[team] = "cd"; + game["attackers"] = team; + precacheshader( "faction_cd" ); + game["entity_headicon_" + team] = "faction_cd"; + game["headicon_" + team] = "faction_cd"; + level.teamprefix[team] = "vox_cd"; + level.teampostfix[team] = "cda"; + setdvar( "g_TeamName_" + team, &"MPUI_CD_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_FactionName_" + team, "cd" ); + game["strings"][team + "_win"] = &"MP_CD_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_CD_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_CD_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_CD_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_CD_FORFEITED"; + game["strings"][team + "_name"] = &"MP_CD_NAME"; + game["music"]["spawn_" + team] = "SPAWN_TER"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_TER"; + game["music"]["victory_" + team] = "VICTORY_TER"; + game["icons"][team] = "faction_cd"; + game["voice"][team] = "vox_cda_"; + setdvar( "scr_" + team, "ussr" ); + level.heli_vo[team]["hit"] = "vox_cd2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_axis_1"; + game["carry_flagmodels"][team] = "mp_flag_axis_1_carry"; + game["carry_icon"][team] = "hudicon_spetsnaz_ctf_flag_carry"; +} diff --git a/MP/Factions/faction_multiteam_sand_mp/mpbody/class_assault_cd_sand.gsc b/MP/Factions/faction_multiteam_sand_mp/mpbody/class_assault_cd_sand.gsc new file mode 100644 index 0000000..36ab8fb --- /dev/null +++ b/MP/Factions/faction_multiteam_sand_mp/mpbody/class_assault_cd_sand.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_cordis_assault_ca_fb" ); + precachemodel( "c_mul_mp_cordis_assault_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team6"]["default"] = ::set_player_model; + else + game["set_player_model"]["axis"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_cordis_assault_ca_fb" ); + self setviewmodel( "c_mul_mp_cordis_assault_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_sand_mp/mpbody/class_assault_chn_pla_sand.gsc b/MP/Factions/faction_multiteam_sand_mp/mpbody/class_assault_chn_pla_sand.gsc new file mode 100644 index 0000000..39da7c2 --- /dev/null +++ b/MP/Factions/faction_multiteam_sand_mp/mpbody/class_assault_chn_pla_sand.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_chn_mp_pla_assault_fb" ); + precachemodel( "c_chn_mp_pla_longsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["axis"]["default"] = ::set_player_model; + else + game["set_player_model"]["axis"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_chn_mp_pla_assault_fb" ); + self setviewmodel( "c_chn_mp_pla_longsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_sand_mp/mpbody/class_assault_isa_sand.gsc b/MP/Factions/faction_multiteam_sand_mp/mpbody/class_assault_isa_sand.gsc new file mode 100644 index 0000000..6ca13cf --- /dev/null +++ b/MP/Factions/faction_multiteam_sand_mp/mpbody/class_assault_isa_sand.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_isa_assault_ca_fb" ); + precachemodel( "c_usa_mp_isa_assault_ca_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team5"]["default"] = ::set_player_model; + else + game["set_player_model"]["allies"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_isa_assault_ca_fb" ); + self setviewmodel( "c_usa_mp_isa_assault_ca_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_sand_mp/mpbody/class_assault_rus_pmc_sand.gsc b/MP/Factions/faction_multiteam_sand_mp/mpbody/class_assault_rus_pmc_sand.gsc new file mode 100644 index 0000000..726f6ca --- /dev/null +++ b/MP/Factions/faction_multiteam_sand_mp/mpbody/class_assault_rus_pmc_sand.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_pmc_assault_fb" ); + precachemodel( "c_mul_mp_pmc_assault_snw_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team4"]["default"] = ::set_player_model; + else + game["set_player_model"]["axis"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_pmc_assault_fb" ); + self setviewmodel( "c_mul_mp_pmc_assault_snw_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_sand_mp/mpbody/class_assault_usa_fbi_sand.gsc b/MP/Factions/faction_multiteam_sand_mp/mpbody/class_assault_usa_fbi_sand.gsc new file mode 100644 index 0000000..4df34fb --- /dev/null +++ b/MP/Factions/faction_multiteam_sand_mp/mpbody/class_assault_usa_fbi_sand.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_fbi_assault_fb" ); + precachemodel( "c_usa_mp_fbi_longsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team3"]["default"] = ::set_player_model; + else + game["set_player_model"]["allies"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_fbi_assault_fb" ); + self setviewmodel( "c_usa_mp_fbi_longsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_sand_mp/mpbody/class_assault_usa_seals_sand.gsc b/MP/Factions/faction_multiteam_sand_mp/mpbody/class_assault_usa_seals_sand.gsc new file mode 100644 index 0000000..ec39033 --- /dev/null +++ b/MP/Factions/faction_multiteam_sand_mp/mpbody/class_assault_usa_seals_sand.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_seal6_assault_fb" ); + precachemodel( "c_usa_mp_seal6_longsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["allies"]["default"] = ::set_player_model; + else + game["set_player_model"]["allies"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_seal6_assault_fb" ); + self setviewmodel( "c_usa_mp_seal6_longsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_snow_mp/maps/mp/teams/_teamset_multiteam_snow.gsc b/MP/Factions/faction_multiteam_snow_mp/maps/mp/teams/_teamset_multiteam_snow.gsc new file mode 100644 index 0000000..0022d6b --- /dev/null +++ b/MP/Factions/faction_multiteam_snow_mp/maps/mp/teams/_teamset_multiteam_snow.gsc @@ -0,0 +1,219 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\teams\_teamset; +#include mpbody\class_assault_usa_seals_snow; +#include mpbody\class_assault_usa_fbi_snow; +#include mpbody\class_assault_rus_pmc_snow; +#include mpbody\class_assault_chn_pla_snow; +#include mpbody\class_assault_isa_snow; +#include mpbody\class_assault_cd_snow; + +main() +{ + maps\mp\teams\_teamset::init(); + init_seals( "allies" ); + init_pla( "axis" ); + init_fbi( "team3" ); + init_pmc( "team4" ); + init_isa( "team5" ); + init_cd( "team6" ); + init_seals( "team7" ); + init_seals( "team8" ); + precache(); +} + +precache() +{ + mpbody\class_assault_usa_seals_snow::precache(); + mpbody\class_assault_usa_fbi_snow::precache(); + mpbody\class_assault_rus_pmc_snow::precache(); + mpbody\class_assault_chn_pla_snow::precache(); + mpbody\class_assault_isa_snow::precache(); + mpbody\class_assault_cd_snow::precache(); +} + +init_seals( team ) +{ + game[team] = "seals"; + game["attackers"] = team; + precacheshader( "faction_seals" ); + game["entity_headicon_" + team] = "faction_seals"; + game["headicon_" + team] = "faction_seals"; + level.teamprefix[team] = "vox_st"; + level.teampostfix[team] = "st6"; + setdvar( "g_TeamName_" + team, &"MPUI_SEALS_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_FactionName_" + team, "usa_seals" ); + game["strings"][team + "_win"] = &"MP_SEALS_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_SEALS_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_SEALS_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_SEALS_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_SEALS_FORFEITED"; + game["strings"][team + "_name"] = &"MP_SEALS_NAME"; + game["music"]["spawn_" + team] = "SPAWN_ST6"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_ST6"; + game["music"]["victory_" + team] = "VICTORY_ST6"; + game["icons"][team] = "faction_seals"; + game["voice"][team] = "vox_st6_"; + setdvar( "scr_" + team, "marines" ); + level.heli_vo[team]["hit"] = "vox_ops_2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_allies_1"; + game["carry_flagmodels"][team] = "mp_flag_allies_1_carry"; + game["carry_icon"][team] = "hudicon_marines_ctf_flag_carry"; +} + +init_pmc( team ) +{ + game[team] = "pmc"; + game["defenders"] = team; + precacheshader( "faction_pmc" ); + game["entity_headicon_" + team] = "faction_pmc"; + game["headicon_" + team] = "faction_pmc"; + level.teamprefix[team] = "vox_pm"; + level.teampostfix[team] = "pmc"; + setdvar( "g_TeamName_" + team, &"MPUI_PMC_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_FactionName_" + team, "rus_pmc" ); + game["strings"][team + "_win"] = &"MP_PMC_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_PMC_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_PMC_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_PMC_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_PMC_FORFEITED"; + game["strings"][team + "_name"] = &"MP_PMC_NAME"; + game["music"]["spawn_" + team] = "SPAWN_PMC"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_PMC"; + game["music"]["victory_" + team] = "VICTORY_PMC"; + game["icons"][team] = "faction_pmc"; + game["voice"][team] = "vox_pmc_"; + setdvar( "scr_" + team, "ussr" ); + level.heli_vo[team]["hit"] = "vox_rus_0_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_axis_1"; + game["carry_flagmodels"][team] = "mp_flag_axis_1_carry"; + game["carry_icon"][team] = "hudicon_spetsnaz_ctf_flag_carry"; +} + +init_pla( team ) +{ + game[team] = "pla"; + game["defenders"] = team; + precacheshader( "faction_pla" ); + game["entity_headicon_" + team] = "faction_pla"; + game["headicon_" + team] = "faction_pla"; + level.teamprefix[team] = "vox_ch"; + level.teampostfix[team] = "pla"; + setdvar( "g_TeamName_" + team, &"MPUI_PLA_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_FactionName_" + team, "chn_pla" ); + game["strings"][team + "_win"] = &"MP_PLA_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_PLA_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_PLA_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_PLA_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_PLA_FORFEITED"; + game["strings"][team + "_name"] = &"MP_PLA_NAME"; + game["music"]["spawn_" + team] = "SPAWN_PLA"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_PLA"; + game["music"]["victory_" + team] = "VICTORY_PLA"; + game["icons"][team] = "faction_pla"; + game["voice"][team] = "vox_pla_"; + setdvar( "scr_" + team, "ussr" ); + level.heli_vo[team]["hit"] = "vox_rus_0_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_axis_1"; + game["carry_flagmodels"][team] = "mp_flag_axis_1_carry"; + game["carry_icon"][team] = "hudicon_spetsnaz_ctf_flag_carry"; +} + +init_fbi( team ) +{ + game[team] = "fbi"; + game["attackers"] = team; + precacheshader( "faction_fbi" ); + game["entity_headicon_" + team] = "faction_fbi"; + game["headicon_" + team] = "faction_fbi"; + level.teamprefix[team] = "vox_hr"; + level.teampostfix[team] = "hrt"; + setdvar( "g_TeamName_" + team, &"MPUI_FBI_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_FactionName_" + team, "usa_fbi" ); + game["strings"][team + "_win"] = &"MP_FBI_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_FBI_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_FBI_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_FBI_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_FBI_FORFEITED"; + game["strings"][team + "_name"] = &"MP_FBI_NAME"; + game["music"]["spawn_" + team] = "SPAWN_FBI"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_FBI"; + game["music"]["victory_" + team] = "VICTORY_FBI"; + game["icons"][team] = "faction_fbi"; + game["voice"][team] = "vox_fbi_"; + setdvar( "scr_" + team, "marines" ); + level.heli_vo[team]["hit"] = "vox_ops_2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_allies_1"; + game["carry_flagmodels"][team] = "mp_flag_allies_1_carry"; + game["carry_icon"][team] = "hudicon_marines_ctf_flag_carry"; +} + +init_isa( team ) +{ + game[team] = "isa"; + game["attackers"] = team; + precacheshader( "faction_isa" ); + game["entity_headicon_" + team] = "faction_isa"; + game["headicon_" + team] = "faction_isa"; + level.teamprefix[team] = "vox_is"; + level.teampostfix[team] = "isa"; + setdvar( "g_TeamName_" + team, &"MPUI_ISA_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_FactionName_" + team, "isa" ); + game["strings"][team + "_win"] = &"MP_ISA_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_ISA_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_ISA_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_ISA_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_ISA_FORFEITED"; + game["strings"][team + "_name"] = &"MP_ISA_NAME"; + game["music"]["spawn_" + team] = "SPAWN_CIA"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_CIA"; + game["music"]["victory_" + team] = "VICTORY_CIA"; + game["icons"][team] = "faction_isa"; + game["voice"][team] = "vox_isa_"; + setdvar( "scr_" + team, "marines" ); + level.heli_vo[team]["hit"] = "vox_ops_2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_allies_1"; + game["carry_flagmodels"][team] = "mp_flag_allies_1_carry"; + game["carry_icon"][team] = "hudicon_marines_ctf_flag_carry"; +} + +init_cd( team ) +{ + game[team] = "cd"; + game["attackers"] = team; + precacheshader( "faction_cd" ); + game["entity_headicon_" + team] = "faction_cd"; + game["headicon_" + team] = "faction_cd"; + level.teamprefix[team] = "vox_cd"; + level.teampostfix[team] = "cda"; + setdvar( "g_TeamName_" + team, &"MPUI_CD_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_FactionName_" + team, "cd" ); + game["strings"][team + "_win"] = &"MP_CD_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_CD_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_CD_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_CD_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_CD_FORFEITED"; + game["strings"][team + "_name"] = &"MP_CD_NAME"; + game["music"]["spawn_" + team] = "SPAWN_TER"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_TER"; + game["music"]["victory_" + team] = "VICTORY_TER"; + game["icons"][team] = "faction_cd"; + game["voice"][team] = "vox_cda_"; + setdvar( "scr_" + team, "ussr" ); + level.heli_vo[team]["hit"] = "vox_cd2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_axis_1"; + game["carry_flagmodels"][team] = "mp_flag_axis_1_carry"; + game["carry_icon"][team] = "hudicon_spetsnaz_ctf_flag_carry"; +} diff --git a/MP/Factions/faction_multiteam_snow_mp/mpbody/class_assault_cd_snow.gsc b/MP/Factions/faction_multiteam_snow_mp/mpbody/class_assault_cd_snow.gsc new file mode 100644 index 0000000..eb382ea --- /dev/null +++ b/MP/Factions/faction_multiteam_snow_mp/mpbody/class_assault_cd_snow.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_cordis_assault_snw_fb" ); + precachemodel( "c_mul_mp_cordis_assault_snw_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team6"]["default"] = ::set_player_model; + else + game["set_player_model"]["axis"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_cordis_assault_snw_fb" ); + self setviewmodel( "c_mul_mp_cordis_assault_snw_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_snow_mp/mpbody/class_assault_chn_pla_snow.gsc b/MP/Factions/faction_multiteam_snow_mp/mpbody/class_assault_chn_pla_snow.gsc new file mode 100644 index 0000000..ba4fbef --- /dev/null +++ b/MP/Factions/faction_multiteam_snow_mp/mpbody/class_assault_chn_pla_snow.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_chn_mp_pla_assault_snw_fb" ); + precachemodel( "c_chn_mp_pla_assault_snw_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["axis"]["default"] = ::set_player_model; + else + game["set_player_model"]["axis"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_chn_mp_pla_assault_snw_fb" ); + self setviewmodel( "c_chn_mp_pla_assault_snw_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_snow_mp/mpbody/class_assault_isa_snow.gsc b/MP/Factions/faction_multiteam_snow_mp/mpbody/class_assault_isa_snow.gsc new file mode 100644 index 0000000..84f8c49 --- /dev/null +++ b/MP/Factions/faction_multiteam_snow_mp/mpbody/class_assault_isa_snow.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_isa_assault_snw_fb" ); + precachemodel( "c_usa_mp_isa_assault_shortsleeve_snw_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team5"]["default"] = ::set_player_model; + else + game["set_player_model"]["allies"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_isa_assault_snw_fb" ); + self setviewmodel( "c_usa_mp_isa_assault_shortsleeve_snw_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_snow_mp/mpbody/class_assault_rus_pmc_snow.gsc b/MP/Factions/faction_multiteam_snow_mp/mpbody/class_assault_rus_pmc_snow.gsc new file mode 100644 index 0000000..4143afc --- /dev/null +++ b/MP/Factions/faction_multiteam_snow_mp/mpbody/class_assault_rus_pmc_snow.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_pmc_assault_snw_fb" ); + precachemodel( "c_mul_mp_pmc_assault_snw_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team4"]["default"] = ::set_player_model; + else + game["set_player_model"]["axis"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_pmc_assault_snw_fb" ); + self setviewmodel( "c_mul_mp_pmc_assault_snw_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_snow_mp/mpbody/class_assault_usa_fbi_snow.gsc b/MP/Factions/faction_multiteam_snow_mp/mpbody/class_assault_usa_fbi_snow.gsc new file mode 100644 index 0000000..2b3df79 --- /dev/null +++ b/MP/Factions/faction_multiteam_snow_mp/mpbody/class_assault_usa_fbi_snow.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_fbi_assault_snw_fb" ); + precachemodel( "c_usa_mp_fbi_assault_snw_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team3"]["default"] = ::set_player_model; + else + game["set_player_model"]["allies"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_fbi_assault_snw_fb" ); + self setviewmodel( "c_usa_mp_fbi_assault_snw_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_snow_mp/mpbody/class_assault_usa_seals_snow.gsc b/MP/Factions/faction_multiteam_snow_mp/mpbody/class_assault_usa_seals_snow.gsc new file mode 100644 index 0000000..ae6d171 --- /dev/null +++ b/MP/Factions/faction_multiteam_snow_mp/mpbody/class_assault_usa_seals_snow.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_seal6_assault_snw_fb" ); + precachemodel( "c_usa_mp_seal6_assault_snw_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["allies"]["default"] = ::set_player_model; + else + game["set_player_model"]["allies"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_seal6_assault_snw_fb" ); + self setviewmodel( "c_usa_mp_seal6_assault_snw_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_wet_mp/maps/mp/teams/_teamset_multiteam_wet.gsc b/MP/Factions/faction_multiteam_wet_mp/maps/mp/teams/_teamset_multiteam_wet.gsc new file mode 100644 index 0000000..1a0f910 --- /dev/null +++ b/MP/Factions/faction_multiteam_wet_mp/maps/mp/teams/_teamset_multiteam_wet.gsc @@ -0,0 +1,219 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\teams\_teamset; +#include mpbody\class_assault_usa_seals_wet; +#include mpbody\class_assault_usa_fbi_wet; +#include mpbody\class_assault_rus_pmc_wet; +#include mpbody\class_assault_chn_pla_wet; +#include mpbody\class_assault_isa_wet; +#include mpbody\class_assault_cd_wet; + +main() +{ + maps\mp\teams\_teamset::init(); + init_seals( "allies" ); + init_pla( "axis" ); + init_fbi( "team3" ); + init_pmc( "team4" ); + init_isa( "team5" ); + init_cd( "team6" ); + init_seals( "team7" ); + init_seals( "team8" ); + precache(); +} + +precache() +{ + mpbody\class_assault_usa_seals_wet::precache(); + mpbody\class_assault_usa_fbi_wet::precache(); + mpbody\class_assault_rus_pmc_wet::precache(); + mpbody\class_assault_chn_pla_wet::precache(); + mpbody\class_assault_isa_wet::precache(); + mpbody\class_assault_cd_wet::precache(); +} + +init_seals( team ) +{ + game[team] = "seals"; + game["attackers"] = team; + precacheshader( "faction_seals" ); + game["entity_headicon_" + team] = "faction_seals"; + game["headicon_" + team] = "faction_seals"; + level.teamprefix[team] = "vox_st"; + level.teampostfix[team] = "st6"; + setdvar( "g_TeamName_" + team, &"MPUI_SEALS_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_FactionName_" + team, "usa_seals" ); + game["strings"][team + "_win"] = &"MP_SEALS_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_SEALS_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_SEALS_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_SEALS_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_SEALS_FORFEITED"; + game["strings"][team + "_name"] = &"MP_SEALS_NAME"; + game["music"]["spawn_" + team] = "SPAWN_ST6"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_ST6"; + game["music"]["victory_" + team] = "VICTORY_ST6"; + game["icons"][team] = "faction_seals"; + game["voice"][team] = "vox_st6_"; + setdvar( "scr_" + team, "marines" ); + level.heli_vo[team]["hit"] = "vox_ops_2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_allies_1"; + game["carry_flagmodels"][team] = "mp_flag_allies_1_carry"; + game["carry_icon"][team] = "hudicon_marines_ctf_flag_carry"; +} + +init_pmc( team ) +{ + game[team] = "pmc"; + game["defenders"] = team; + precacheshader( "faction_pmc" ); + game["entity_headicon_" + team] = "faction_pmc"; + game["headicon_" + team] = "faction_pmc"; + level.teamprefix[team] = "vox_pm"; + level.teampostfix[team] = "pmc"; + setdvar( "g_TeamName_" + team, &"MPUI_PMC_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_FactionName_" + team, "rus_pmc" ); + game["strings"][team + "_win"] = &"MP_PMC_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_PMC_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_PMC_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_PMC_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_PMC_FORFEITED"; + game["strings"][team + "_name"] = &"MP_PMC_NAME"; + game["music"]["spawn_" + team] = "SPAWN_PMC"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_PMC"; + game["music"]["victory_" + team] = "VICTORY_PMC"; + game["icons"][team] = "faction_pmc"; + game["voice"][team] = "vox_pmc_"; + setdvar( "scr_" + team, "ussr" ); + level.heli_vo[team]["hit"] = "vox_rus_0_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_axis_1"; + game["carry_flagmodels"][team] = "mp_flag_axis_1_carry"; + game["carry_icon"][team] = "hudicon_spetsnaz_ctf_flag_carry"; +} + +init_pla( team ) +{ + game[team] = "pla"; + game["defenders"] = team; + precacheshader( "faction_pla" ); + game["entity_headicon_" + team] = "faction_pla"; + game["headicon_" + team] = "faction_pla"; + level.teamprefix[team] = "vox_ch"; + level.teampostfix[team] = "pla"; + setdvar( "g_TeamName_" + team, &"MPUI_PLA_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_FactionName_" + team, "chn_pla" ); + game["strings"][team + "_win"] = &"MP_PLA_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_PLA_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_PLA_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_PLA_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_PLA_FORFEITED"; + game["strings"][team + "_name"] = &"MP_PLA_NAME"; + game["music"]["spawn_" + team] = "SPAWN_PLA"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_PLA"; + game["music"]["victory_" + team] = "VICTORY_PLA"; + game["icons"][team] = "faction_pla"; + game["voice"][team] = "vox_pla_"; + setdvar( "scr_" + team, "ussr" ); + level.heli_vo[team]["hit"] = "vox_rus_0_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_axis_1"; + game["carry_flagmodels"][team] = "mp_flag_axis_1_carry"; + game["carry_icon"][team] = "hudicon_spetsnaz_ctf_flag_carry"; +} + +init_fbi( team ) +{ + game[team] = "fbi"; + game["attackers"] = team; + precacheshader( "faction_fbi" ); + game["entity_headicon_" + team] = "faction_fbi"; + game["headicon_" + team] = "faction_fbi"; + level.teamprefix[team] = "vox_hr"; + level.teampostfix[team] = "hrt"; + setdvar( "g_TeamName_" + team, &"MPUI_FBI_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_FactionName_" + team, "usa_fbi" ); + game["strings"][team + "_win"] = &"MP_FBI_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_FBI_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_FBI_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_FBI_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_FBI_FORFEITED"; + game["strings"][team + "_name"] = &"MP_FBI_NAME"; + game["music"]["spawn_" + team] = "SPAWN_FBI"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_FBI"; + game["music"]["victory_" + team] = "VICTORY_FBI"; + game["icons"][team] = "faction_fbi"; + game["voice"][team] = "vox_fbi_"; + setdvar( "scr_" + team, "marines" ); + level.heli_vo[team]["hit"] = "vox_ops_2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_allies_1"; + game["carry_flagmodels"][team] = "mp_flag_allies_1_carry"; + game["carry_icon"][team] = "hudicon_marines_ctf_flag_carry"; +} + +init_isa( team ) +{ + game[team] = "isa"; + game["attackers"] = team; + precacheshader( "faction_isa" ); + game["entity_headicon_" + team] = "faction_isa"; + game["headicon_" + team] = "faction_isa"; + level.teamprefix[team] = "vox_is"; + level.teampostfix[team] = "isa"; + setdvar( "g_TeamName_" + team, &"MPUI_ISA_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_FactionName_" + team, "isa" ); + game["strings"][team + "_win"] = &"MP_ISA_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_ISA_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_ISA_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_ISA_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_ISA_FORFEITED"; + game["strings"][team + "_name"] = &"MP_ISA_NAME"; + game["music"]["spawn_" + team] = "SPAWN_CIA"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_CIA"; + game["music"]["victory_" + team] = "VICTORY_CIA"; + game["icons"][team] = "faction_isa"; + game["voice"][team] = "vox_isa_"; + setdvar( "scr_" + team, "marines" ); + level.heli_vo[team]["hit"] = "vox_ops_2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_allies_1"; + game["carry_flagmodels"][team] = "mp_flag_allies_1_carry"; + game["carry_icon"][team] = "hudicon_marines_ctf_flag_carry"; +} + +init_cd( team ) +{ + game[team] = "cd"; + game["attackers"] = team; + precacheshader( "faction_cd" ); + game["entity_headicon_" + team] = "faction_cd"; + game["headicon_" + team] = "faction_cd"; + level.teamprefix[team] = "vox_cd"; + level.teampostfix[team] = "cda"; + setdvar( "g_TeamName_" + team, &"MPUI_CD_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_FactionName_" + team, "cd" ); + game["strings"][team + "_win"] = &"MP_CD_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_CD_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_CD_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_CD_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_CD_FORFEITED"; + game["strings"][team + "_name"] = &"MP_CD_NAME"; + game["music"]["spawn_" + team] = "SPAWN_TER"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_TER"; + game["music"]["victory_" + team] = "VICTORY_TER"; + game["icons"][team] = "faction_cd"; + game["voice"][team] = "vox_cda_"; + setdvar( "scr_" + team, "ussr" ); + level.heli_vo[team]["hit"] = "vox_cd2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_axis_1"; + game["carry_flagmodels"][team] = "mp_flag_axis_1_carry"; + game["carry_icon"][team] = "hudicon_spetsnaz_ctf_flag_carry"; +} diff --git a/MP/Factions/faction_multiteam_wet_mp/mpbody/class_assault_cd_wet.gsc b/MP/Factions/faction_multiteam_wet_mp/mpbody/class_assault_cd_wet.gsc new file mode 100644 index 0000000..d80616c --- /dev/null +++ b/MP/Factions/faction_multiteam_wet_mp/mpbody/class_assault_cd_wet.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_cordis_assault_w_fb" ); + precachemodel( "c_mul_mp_cordis_assault_w_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team6"]["default"] = ::set_player_model; + else + game["set_player_model"]["axis"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_cordis_assault_w_fb" ); + self setviewmodel( "c_mul_mp_cordis_assault_w_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_wet_mp/mpbody/class_assault_chn_pla_wet.gsc b/MP/Factions/faction_multiteam_wet_mp/mpbody/class_assault_chn_pla_wet.gsc new file mode 100644 index 0000000..3a84e59 --- /dev/null +++ b/MP/Factions/faction_multiteam_wet_mp/mpbody/class_assault_chn_pla_wet.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_chn_mp_pla_assault_w_fb" ); + precachemodel( "c_chn_mp_pla_longsleeve_w_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["axis"]["default"] = ::set_player_model; + else + game["set_player_model"]["axis"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_chn_mp_pla_assault_w_fb" ); + self setviewmodel( "c_chn_mp_pla_longsleeve_w_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_wet_mp/mpbody/class_assault_isa_wet.gsc b/MP/Factions/faction_multiteam_wet_mp/mpbody/class_assault_isa_wet.gsc new file mode 100644 index 0000000..7a5eb1b --- /dev/null +++ b/MP/Factions/faction_multiteam_wet_mp/mpbody/class_assault_isa_wet.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_isa_assault_w_fb" ); + precachemodel( "c_usa_mp_isa_assault_w_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team5"]["default"] = ::set_player_model; + else + game["set_player_model"]["allies"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_isa_assault_w_fb" ); + self setviewmodel( "c_usa_mp_isa_assault_w_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_wet_mp/mpbody/class_assault_rus_pmc_wet.gsc b/MP/Factions/faction_multiteam_wet_mp/mpbody/class_assault_rus_pmc_wet.gsc new file mode 100644 index 0000000..a32e52e --- /dev/null +++ b/MP/Factions/faction_multiteam_wet_mp/mpbody/class_assault_rus_pmc_wet.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_pmc_assault_w_fb" ); + precachemodel( "c_mul_mp_pmc_longsleeve_w_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team4"]["default"] = ::set_player_model; + else + game["set_player_model"]["axis"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_pmc_assault_w_fb" ); + self setviewmodel( "c_mul_mp_pmc_longsleeve_w_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_wet_mp/mpbody/class_assault_usa_fbi_wet.gsc b/MP/Factions/faction_multiteam_wet_mp/mpbody/class_assault_usa_fbi_wet.gsc new file mode 100644 index 0000000..634c30e --- /dev/null +++ b/MP/Factions/faction_multiteam_wet_mp/mpbody/class_assault_usa_fbi_wet.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_fbi_assault_w_fb" ); + precachemodel( "c_usa_mp_fbi_longsleeve_w_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team3"]["default"] = ::set_player_model; + else + game["set_player_model"]["allies"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_fbi_assault_w_fb" ); + self setviewmodel( "c_usa_mp_fbi_longsleeve_w_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_multiteam_wet_mp/mpbody/class_assault_usa_seals_wet.gsc b/MP/Factions/faction_multiteam_wet_mp/mpbody/class_assault_usa_seals_wet.gsc new file mode 100644 index 0000000..71de3c2 --- /dev/null +++ b/MP/Factions/faction_multiteam_wet_mp/mpbody/class_assault_usa_seals_wet.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_seal6_assault_w_fb" ); + precachemodel( "c_usa_mp_seal6_longsleeve_w_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["allies"]["default"] = ::set_player_model; + else + game["set_player_model"]["allies"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_seal6_assault_w_fb" ); + self setviewmodel( "c_usa_mp_seal6_longsleeve_w_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_pla_mp/maps/mp/teams/_teamset_pla.gsc b/MP/Factions/faction_pla_mp/maps/mp/teams/_teamset_pla.gsc new file mode 100644 index 0000000..7ba23f5 --- /dev/null +++ b/MP/Factions/faction_pla_mp/maps/mp/teams/_teamset_pla.gsc @@ -0,0 +1,56 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\teams\_teamset; +#include mpbody\class_assault_chn_pla; +#include mpbody\class_lmg_chn_pla; +#include mpbody\class_shotgun_chn_pla; +#include mpbody\class_smg_chn_pla; +#include mpbody\class_sniper_chn_pla; + +main() +{ + init( "axis" ); + maps\mp\teams\_teamset::customteam_init(); + precache(); +} + +init( team ) +{ + maps\mp\teams\_teamset::init(); + game[team] = "pla"; + game["defenders"] = team; + precacheshader( "faction_pla" ); + game["entity_headicon_" + team] = "faction_pla"; + game["headicon_" + team] = "faction_pla"; + level.teamprefix[team] = "vox_ch"; + level.teampostfix[team] = "pla"; + setdvar( "g_TeamName_" + team, &"MPUI_PLA_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_FactionName_" + team, "chn_pla" ); + game["strings"][team + "_win"] = &"MP_PLA_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_PLA_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_PLA_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_PLA_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_PLA_FORFEITED"; + game["strings"][team + "_name"] = &"MP_PLA_NAME"; + game["music"]["spawn_" + team] = "SPAWN_PLA"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_PLA"; + game["music"]["victory_" + team] = "VICTORY_PLA"; + game["icons"][team] = "faction_pla"; + game["voice"][team] = "vox_pla_"; + setdvar( "scr_" + team, "ussr" ); + level.heli_vo[team]["hit"] = "vox_rus_0_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_axis_1"; + game["carry_flagmodels"][team] = "mp_flag_axis_1_carry"; + game["carry_icon"][team] = "hudicon_spetsnaz_ctf_flag_carry"; +} + +precache() +{ + mpbody\class_assault_chn_pla::precache(); + mpbody\class_lmg_chn_pla::precache(); + mpbody\class_shotgun_chn_pla::precache(); + mpbody\class_smg_chn_pla::precache(); + mpbody\class_sniper_chn_pla::precache(); +} diff --git a/MP/Factions/faction_pla_mp/mpbody/class_assault_chn_pla.gsc b/MP/Factions/faction_pla_mp/mpbody/class_assault_chn_pla.gsc new file mode 100644 index 0000000..39da7c2 --- /dev/null +++ b/MP/Factions/faction_pla_mp/mpbody/class_assault_chn_pla.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_chn_mp_pla_assault_fb" ); + precachemodel( "c_chn_mp_pla_longsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["axis"]["default"] = ::set_player_model; + else + game["set_player_model"]["axis"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_chn_mp_pla_assault_fb" ); + self setviewmodel( "c_chn_mp_pla_longsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_pla_mp/mpbody/class_lmg_chn_pla.gsc b/MP/Factions/faction_pla_mp/mpbody/class_lmg_chn_pla.gsc new file mode 100644 index 0000000..b3f7eec --- /dev/null +++ b/MP/Factions/faction_pla_mp/mpbody/class_lmg_chn_pla.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_chn_mp_pla_lmg_fb" ); + precachemodel( "c_chn_mp_pla_armorsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["axis"]["mg"] = ::set_player_model; + else + game["set_player_model"]["axis"]["mg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_chn_mp_pla_lmg_fb" ); + self setviewmodel( "c_chn_mp_pla_armorsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_pla_mp/mpbody/class_shotgun_chn_pla.gsc b/MP/Factions/faction_pla_mp/mpbody/class_shotgun_chn_pla.gsc new file mode 100644 index 0000000..e1f9620 --- /dev/null +++ b/MP/Factions/faction_pla_mp/mpbody/class_shotgun_chn_pla.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_chn_mp_pla_shotgun_fb" ); + precachemodel( "c_chn_mp_pla_armorsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["axis"]["spread"] = ::set_player_model; + else + game["set_player_model"]["axis"]["spread"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_chn_mp_pla_shotgun_fb" ); + self setviewmodel( "c_chn_mp_pla_armorsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_pla_mp/mpbody/class_smg_chn_pla.gsc b/MP/Factions/faction_pla_mp/mpbody/class_smg_chn_pla.gsc new file mode 100644 index 0000000..58c4816 --- /dev/null +++ b/MP/Factions/faction_pla_mp/mpbody/class_smg_chn_pla.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_chn_mp_pla_smg_fb" ); + precachemodel( "c_chn_mp_pla_longsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["axis"]["smg"] = ::set_player_model; + else + game["set_player_model"]["axis"]["smg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_chn_mp_pla_smg_fb" ); + self setviewmodel( "c_chn_mp_pla_longsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_pla_mp/mpbody/class_sniper_chn_pla.gsc b/MP/Factions/faction_pla_mp/mpbody/class_sniper_chn_pla.gsc new file mode 100644 index 0000000..ec6f0a4 --- /dev/null +++ b/MP/Factions/faction_pla_mp/mpbody/class_sniper_chn_pla.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_chn_mp_pla_sniper_fb" ); + precachemodel( "c_chn_mp_pla_longsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["axis"]["rifle"] = ::set_player_model; + else + game["set_player_model"]["axis"]["rifle"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_chn_mp_pla_sniper_fb" ); + self setviewmodel( "c_chn_mp_pla_longsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_pla_wet_mp/maps/mp/teams/_teamset_pla_wet.gsc b/MP/Factions/faction_pla_wet_mp/maps/mp/teams/_teamset_pla_wet.gsc new file mode 100644 index 0000000..0acf537 --- /dev/null +++ b/MP/Factions/faction_pla_wet_mp/maps/mp/teams/_teamset_pla_wet.gsc @@ -0,0 +1,56 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\teams\_teamset; +#include mpbody\class_assault_chn_pla_wet; +#include mpbody\class_lmg_chn_pla_wet; +#include mpbody\class_shotgun_chn_pla_wet; +#include mpbody\class_smg_chn_pla_wet; +#include mpbody\class_sniper_chn_pla_wet; + +main() +{ + init( "axis" ); + maps\mp\teams\_teamset::customteam_init(); + precache(); +} + +init( team ) +{ + maps\mp\teams\_teamset::init(); + game[team] = "pla"; + game["defenders"] = team; + precacheshader( "faction_pla" ); + game["entity_headicon_" + team] = "faction_pla"; + game["headicon_" + team] = "faction_pla"; + level.teamprefix[team] = "vox_ch"; + level.teampostfix[team] = "pla"; + setdvar( "g_TeamName_" + team, &"MPUI_PLA_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_FactionName_" + team, "chn_pla" ); + game["strings"][team + "_win"] = &"MP_PLA_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_PLA_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_PLA_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_PLA_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_PLA_FORFEITED"; + game["strings"][team + "_name"] = &"MP_PLA_NAME"; + game["music"]["spawn_" + team] = "SPAWN_PLA"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_PLA"; + game["music"]["victory_" + team] = "VICTORY_PLA"; + game["icons"][team] = "faction_pla"; + game["voice"][team] = "vox_pla_"; + setdvar( "scr_" + team, "ussr" ); + level.heli_vo[team]["hit"] = "vox_rus_0_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_axis_1"; + game["carry_flagmodels"][team] = "mp_flag_axis_1_carry"; + game["carry_icon"][team] = "hudicon_spetsnaz_ctf_flag_carry"; +} + +precache() +{ + mpbody\class_assault_chn_pla_wet::precache(); + mpbody\class_lmg_chn_pla_wet::precache(); + mpbody\class_shotgun_chn_pla_wet::precache(); + mpbody\class_smg_chn_pla_wet::precache(); + mpbody\class_sniper_chn_pla_wet::precache(); +} diff --git a/MP/Factions/faction_pla_wet_mp/mpbody/class_assault_chn_pla_wet.gsc b/MP/Factions/faction_pla_wet_mp/mpbody/class_assault_chn_pla_wet.gsc new file mode 100644 index 0000000..3a84e59 --- /dev/null +++ b/MP/Factions/faction_pla_wet_mp/mpbody/class_assault_chn_pla_wet.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_chn_mp_pla_assault_w_fb" ); + precachemodel( "c_chn_mp_pla_longsleeve_w_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["axis"]["default"] = ::set_player_model; + else + game["set_player_model"]["axis"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_chn_mp_pla_assault_w_fb" ); + self setviewmodel( "c_chn_mp_pla_longsleeve_w_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_pla_wet_mp/mpbody/class_lmg_chn_pla_wet.gsc b/MP/Factions/faction_pla_wet_mp/mpbody/class_lmg_chn_pla_wet.gsc new file mode 100644 index 0000000..3d34cbf --- /dev/null +++ b/MP/Factions/faction_pla_wet_mp/mpbody/class_lmg_chn_pla_wet.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_chn_mp_pla_lmg_w_fb" ); + precachemodel( "c_chn_mp_pla_armorsleeve_w_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["axis"]["mg"] = ::set_player_model; + else + game["set_player_model"]["axis"]["mg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_chn_mp_pla_lmg_w_fb" ); + self setviewmodel( "c_chn_mp_pla_armorsleeve_w_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_pla_wet_mp/mpbody/class_shotgun_chn_pla_wet.gsc b/MP/Factions/faction_pla_wet_mp/mpbody/class_shotgun_chn_pla_wet.gsc new file mode 100644 index 0000000..ea1ef39 --- /dev/null +++ b/MP/Factions/faction_pla_wet_mp/mpbody/class_shotgun_chn_pla_wet.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_chn_mp_pla_shotgun_w_fb" ); + precachemodel( "c_chn_mp_pla_armorsleeve_w_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["axis"]["spread"] = ::set_player_model; + else + game["set_player_model"]["axis"]["spread"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_chn_mp_pla_shotgun_w_fb" ); + self setviewmodel( "c_chn_mp_pla_armorsleeve_w_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_pla_wet_mp/mpbody/class_smg_chn_pla_wet.gsc b/MP/Factions/faction_pla_wet_mp/mpbody/class_smg_chn_pla_wet.gsc new file mode 100644 index 0000000..923d131 --- /dev/null +++ b/MP/Factions/faction_pla_wet_mp/mpbody/class_smg_chn_pla_wet.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_chn_mp_pla_smg_w_fb" ); + precachemodel( "c_chn_mp_pla_longsleeve_w_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["axis"]["smg"] = ::set_player_model; + else + game["set_player_model"]["axis"]["smg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_chn_mp_pla_smg_w_fb" ); + self setviewmodel( "c_chn_mp_pla_longsleeve_w_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_pla_wet_mp/mpbody/class_sniper_chn_pla_wet.gsc b/MP/Factions/faction_pla_wet_mp/mpbody/class_sniper_chn_pla_wet.gsc new file mode 100644 index 0000000..efb66d7 --- /dev/null +++ b/MP/Factions/faction_pla_wet_mp/mpbody/class_sniper_chn_pla_wet.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_chn_mp_pla_sniper_w_fb" ); + precachemodel( "c_chn_mp_pla_longsleeve_w_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["axis"]["rifle"] = ::set_player_model; + else + game["set_player_model"]["axis"]["rifle"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_chn_mp_pla_sniper_w_fb" ); + self setviewmodel( "c_chn_mp_pla_longsleeve_w_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_pmc_mp/maps/mp/teams/_teamset_pmc.gsc b/MP/Factions/faction_pmc_mp/maps/mp/teams/_teamset_pmc.gsc new file mode 100644 index 0000000..23ea22e --- /dev/null +++ b/MP/Factions/faction_pmc_mp/maps/mp/teams/_teamset_pmc.gsc @@ -0,0 +1,56 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\teams\_teamset; +#include mpbody\class_assault_rus_pmc; +#include mpbody\class_lmg_rus_pmc; +#include mpbody\class_shotgun_rus_pmc; +#include mpbody\class_smg_rus_pmc; +#include mpbody\class_sniper_rus_pmc; + +main() +{ + init( "axis" ); + maps\mp\teams\_teamset::customteam_init(); + precache(); +} + +init( team ) +{ + maps\mp\teams\_teamset::init(); + game[team] = "pmc"; + game["defenders"] = team; + precacheshader( "faction_pmc" ); + game["entity_headicon_" + team] = "faction_pmc"; + game["headicon_" + team] = "faction_pmc"; + level.teamprefix[team] = "vox_pm"; + level.teampostfix[team] = "pmc"; + setdvar( "g_TeamName_" + team, &"MPUI_PMC_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_FactionName_" + team, "rus_pmc" ); + game["strings"][team + "_win"] = &"MP_PMC_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_PMC_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_PMC_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_PMC_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_PMC_FORFEITED"; + game["strings"][team + "_name"] = &"MP_PMC_NAME"; + game["music"]["spawn_" + team] = "SPAWN_PMC"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_PMC"; + game["music"]["victory_" + team] = "VICTORY_PMC"; + game["icons"][team] = "faction_pmc"; + game["voice"][team] = "vox_pmc_"; + setdvar( "scr_" + team, "ussr" ); + level.heli_vo[team]["hit"] = "vox_rus_0_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_axis_2"; + game["carry_flagmodels"][team] = "mp_flag_axis_2_carry"; + game["carry_icon"][team] = "hudicon_spetsnaz_ctf_flag_carry"; +} + +precache() +{ + mpbody\class_assault_rus_pmc::precache(); + mpbody\class_lmg_rus_pmc::precache(); + mpbody\class_shotgun_rus_pmc::precache(); + mpbody\class_smg_rus_pmc::precache(); + mpbody\class_sniper_rus_pmc::precache(); +} diff --git a/MP/Factions/faction_pmc_mp/mpbody/class_assault_rus_pmc.gsc b/MP/Factions/faction_pmc_mp/mpbody/class_assault_rus_pmc.gsc new file mode 100644 index 0000000..8eec290 --- /dev/null +++ b/MP/Factions/faction_pmc_mp/mpbody/class_assault_rus_pmc.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_pmc_assault_fb" ); + precachemodel( "c_mul_mp_pmc_longsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team4"]["default"] = ::set_player_model; + else + game["set_player_model"]["axis"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_pmc_assault_fb" ); + self setviewmodel( "c_mul_mp_pmc_longsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_pmc_mp/mpbody/class_lmg_rus_pmc.gsc b/MP/Factions/faction_pmc_mp/mpbody/class_lmg_rus_pmc.gsc new file mode 100644 index 0000000..eac3907 --- /dev/null +++ b/MP/Factions/faction_pmc_mp/mpbody/class_lmg_rus_pmc.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_pmc_lmg_fb" ); + precachemodel( "c_mul_mp_pmc_longsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team4"]["mg"] = ::set_player_model; + else + game["set_player_model"]["axis"]["mg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_pmc_lmg_fb" ); + self setviewmodel( "c_mul_mp_pmc_longsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_pmc_mp/mpbody/class_shotgun_rus_pmc.gsc b/MP/Factions/faction_pmc_mp/mpbody/class_shotgun_rus_pmc.gsc new file mode 100644 index 0000000..bd1f42c --- /dev/null +++ b/MP/Factions/faction_pmc_mp/mpbody/class_shotgun_rus_pmc.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_pmc_shotgun_fb" ); + precachemodel( "c_mul_mp_pmc_shortsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team4"]["spread"] = ::set_player_model; + else + game["set_player_model"]["axis"]["spread"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_pmc_shotgun_fb" ); + self setviewmodel( "c_mul_mp_pmc_shortsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_pmc_mp/mpbody/class_smg_rus_pmc.gsc b/MP/Factions/faction_pmc_mp/mpbody/class_smg_rus_pmc.gsc new file mode 100644 index 0000000..7fe0e8f --- /dev/null +++ b/MP/Factions/faction_pmc_mp/mpbody/class_smg_rus_pmc.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_pmc_smg_fb" ); + precachemodel( "c_mul_mp_pmc_shortsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team4"]["smg"] = ::set_player_model; + else + game["set_player_model"]["axis"]["smg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_pmc_smg_fb" ); + self setviewmodel( "c_mul_mp_pmc_shortsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_pmc_mp/mpbody/class_sniper_rus_pmc.gsc b/MP/Factions/faction_pmc_mp/mpbody/class_sniper_rus_pmc.gsc new file mode 100644 index 0000000..0473cab --- /dev/null +++ b/MP/Factions/faction_pmc_mp/mpbody/class_sniper_rus_pmc.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_pmc_sniper_fb" ); + precachemodel( "c_mul_mp_pmc_longsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team4"]["rifle"] = ::set_player_model; + else + game["set_player_model"]["axis"]["rifle"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_pmc_sniper_fb" ); + self setviewmodel( "c_mul_mp_pmc_longsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_pmc_snow_mp/maps/mp/teams/_teamset_pmc_snow.gsc b/MP/Factions/faction_pmc_snow_mp/maps/mp/teams/_teamset_pmc_snow.gsc new file mode 100644 index 0000000..b00bac2 --- /dev/null +++ b/MP/Factions/faction_pmc_snow_mp/maps/mp/teams/_teamset_pmc_snow.gsc @@ -0,0 +1,56 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\teams\_teamset; +#include mpbody\class_assault_rus_pmc_snow; +#include mpbody\class_lmg_rus_pmc_snow; +#include mpbody\class_shotgun_rus_pmc_snow; +#include mpbody\class_smg_rus_pmc_snow; +#include mpbody\class_sniper_rus_pmc_snow; + +main() +{ + init( "axis" ); + maps\mp\teams\_teamset::customteam_init(); + precache(); +} + +init( team ) +{ + maps\mp\teams\_teamset::init(); + game[team] = "pmc"; + game["defenders"] = team; + precacheshader( "faction_pmc" ); + game["entity_headicon_" + team] = "faction_pmc"; + game["headicon_" + team] = "faction_pmc"; + level.teamprefix[team] = "vox_pm"; + level.teampostfix[team] = "pmc"; + setdvar( "g_TeamName_" + team, &"MPUI_PMC_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); + setdvar( "g_FactionName_" + team, "rus_pmc" ); + game["strings"][team + "_win"] = &"MP_PMC_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_PMC_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_PMC_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_PMC_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_PMC_FORFEITED"; + game["strings"][team + "_name"] = &"MP_PMC_NAME"; + game["music"]["spawn_" + team] = "SPAWN_PMC"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_PMC"; + game["music"]["victory_" + team] = "VICTORY_PMC"; + game["icons"][team] = "faction_pmc"; + game["voice"][team] = "vox_pmc_"; + setdvar( "scr_" + team, "ussr" ); + level.heli_vo[team]["hit"] = "vox_rus_0_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_axis_2"; + game["carry_flagmodels"][team] = "mp_flag_axis_2_carry"; + game["carry_icon"][team] = "hudicon_spetsnaz_ctf_flag_carry"; +} + +precache() +{ + mpbody\class_assault_rus_pmc_snow::precache(); + mpbody\class_lmg_rus_pmc_snow::precache(); + mpbody\class_shotgun_rus_pmc_snow::precache(); + mpbody\class_smg_rus_pmc_snow::precache(); + mpbody\class_sniper_rus_pmc_snow::precache(); +} diff --git a/MP/Factions/faction_pmc_snow_mp/mpbody/class_assault_rus_pmc_snow.gsc b/MP/Factions/faction_pmc_snow_mp/mpbody/class_assault_rus_pmc_snow.gsc new file mode 100644 index 0000000..4143afc --- /dev/null +++ b/MP/Factions/faction_pmc_snow_mp/mpbody/class_assault_rus_pmc_snow.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_pmc_assault_snw_fb" ); + precachemodel( "c_mul_mp_pmc_assault_snw_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team4"]["default"] = ::set_player_model; + else + game["set_player_model"]["axis"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_pmc_assault_snw_fb" ); + self setviewmodel( "c_mul_mp_pmc_assault_snw_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_pmc_snow_mp/mpbody/class_lmg_rus_pmc_snow.gsc b/MP/Factions/faction_pmc_snow_mp/mpbody/class_lmg_rus_pmc_snow.gsc new file mode 100644 index 0000000..d6fdd72 --- /dev/null +++ b/MP/Factions/faction_pmc_snow_mp/mpbody/class_lmg_rus_pmc_snow.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_pmc_lmg_snw_fb" ); + precachemodel( "c_mul_mp_pmc_longsleeve_snw_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team4"]["mg"] = ::set_player_model; + else + game["set_player_model"]["axis"]["mg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_pmc_lmg_snw_fb" ); + self setviewmodel( "c_mul_mp_pmc_longsleeve_snw_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_pmc_snow_mp/mpbody/class_shotgun_rus_pmc_snow.gsc b/MP/Factions/faction_pmc_snow_mp/mpbody/class_shotgun_rus_pmc_snow.gsc new file mode 100644 index 0000000..fe2bcfe --- /dev/null +++ b/MP/Factions/faction_pmc_snow_mp/mpbody/class_shotgun_rus_pmc_snow.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_pmc_shotgun_snw_fb" ); + precachemodel( "c_mul_mp_pmc_shortsleeve_snw_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team4"]["spread"] = ::set_player_model; + else + game["set_player_model"]["axis"]["spread"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_pmc_shotgun_snw_fb" ); + self setviewmodel( "c_mul_mp_pmc_shortsleeve_snw_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_pmc_snow_mp/mpbody/class_smg_rus_pmc_snow.gsc b/MP/Factions/faction_pmc_snow_mp/mpbody/class_smg_rus_pmc_snow.gsc new file mode 100644 index 0000000..97c05fb --- /dev/null +++ b/MP/Factions/faction_pmc_snow_mp/mpbody/class_smg_rus_pmc_snow.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_pmc_smg_snw_fb" ); + precachemodel( "c_mul_mp_pmc_shortsleeve_snw_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team4"]["smg"] = ::set_player_model; + else + game["set_player_model"]["axis"]["smg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_pmc_smg_snw_fb" ); + self setviewmodel( "c_mul_mp_pmc_shortsleeve_snw_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_pmc_snow_mp/mpbody/class_sniper_rus_pmc_snow.gsc b/MP/Factions/faction_pmc_snow_mp/mpbody/class_sniper_rus_pmc_snow.gsc new file mode 100644 index 0000000..4684324 --- /dev/null +++ b/MP/Factions/faction_pmc_snow_mp/mpbody/class_sniper_rus_pmc_snow.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_mul_mp_pmc_sniper_snw_fb" ); + precachemodel( "c_mul_mp_pmc_longsleeve_snw_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["team4"]["rifle"] = ::set_player_model; + else + game["set_player_model"]["axis"]["rifle"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_mul_mp_pmc_sniper_snw_fb" ); + self setviewmodel( "c_mul_mp_pmc_longsleeve_snw_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_seals_mp/maps/mp/teams/_teamset_seals.gsc b/MP/Factions/faction_seals_mp/maps/mp/teams/_teamset_seals.gsc new file mode 100644 index 0000000..f28f265 --- /dev/null +++ b/MP/Factions/faction_seals_mp/maps/mp/teams/_teamset_seals.gsc @@ -0,0 +1,56 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\teams\_teamset; +#include mpbody\class_assault_usa_seals; +#include mpbody\class_lmg_usa_seals; +#include mpbody\class_shotgun_usa_seals; +#include mpbody\class_smg_usa_seals; +#include mpbody\class_sniper_usa_seals; + +main() +{ + init( "allies" ); + maps\mp\teams\_teamset::customteam_init(); + precache(); +} + +init( team ) +{ + maps\mp\teams\_teamset::init(); + game[team] = "seals"; + game["attackers"] = team; + precacheshader( "faction_seals" ); + game["entity_headicon_" + team] = "faction_seals"; + game["headicon_" + team] = "faction_seals"; + level.teamprefix[team] = "vox_st"; + level.teampostfix[team] = "st6"; + setdvar( "g_TeamName_" + team, &"MPUI_SEALS_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_FactionName_" + team, "usa_seals" ); + game["strings"][team + "_win"] = &"MP_SEALS_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_SEALS_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_SEALS_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_SEALS_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_SEALS_FORFEITED"; + game["strings"][team + "_name"] = &"MP_SEALS_NAME"; + game["music"]["spawn_" + team] = "SPAWN_ST6"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_ST6"; + game["music"]["victory_" + team] = "VICTORY_ST6"; + game["icons"][team] = "faction_seals"; + game["voice"][team] = "vox_st6_"; + setdvar( "scr_" + team, "marines" ); + level.heli_vo[team]["hit"] = "vox_ops_2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_allies_1"; + game["carry_flagmodels"][team] = "mp_flag_allies_1_carry"; + game["carry_icon"][team] = "hudicon_marines_ctf_flag_carry"; +} + +precache() +{ + mpbody\class_assault_usa_seals::precache(); + mpbody\class_lmg_usa_seals::precache(); + mpbody\class_shotgun_usa_seals::precache(); + mpbody\class_smg_usa_seals::precache(); + mpbody\class_sniper_usa_seals::precache(); +} diff --git a/MP/Factions/faction_seals_mp/mpbody/class_assault_usa_seals.gsc b/MP/Factions/faction_seals_mp/mpbody/class_assault_usa_seals.gsc new file mode 100644 index 0000000..ec39033 --- /dev/null +++ b/MP/Factions/faction_seals_mp/mpbody/class_assault_usa_seals.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_seal6_assault_fb" ); + precachemodel( "c_usa_mp_seal6_longsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["allies"]["default"] = ::set_player_model; + else + game["set_player_model"]["allies"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_seal6_assault_fb" ); + self setviewmodel( "c_usa_mp_seal6_longsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_seals_mp/mpbody/class_lmg_usa_seals.gsc b/MP/Factions/faction_seals_mp/mpbody/class_lmg_usa_seals.gsc new file mode 100644 index 0000000..4c322b7 --- /dev/null +++ b/MP/Factions/faction_seals_mp/mpbody/class_lmg_usa_seals.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_seal6_lmg_fb" ); + precachemodel( "c_usa_mp_seal6_longsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["allies"]["mg"] = ::set_player_model; + else + game["set_player_model"]["allies"]["mg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_seal6_lmg_fb" ); + self setviewmodel( "c_usa_mp_seal6_longsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_seals_mp/mpbody/class_shotgun_usa_seals.gsc b/MP/Factions/faction_seals_mp/mpbody/class_shotgun_usa_seals.gsc new file mode 100644 index 0000000..4339832 --- /dev/null +++ b/MP/Factions/faction_seals_mp/mpbody/class_shotgun_usa_seals.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_seal6_shotgun_fb" ); + precachemodel( "c_usa_mp_seal6_shortsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["allies"]["spread"] = ::set_player_model; + else + game["set_player_model"]["allies"]["spread"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_seal6_shotgun_fb" ); + self setviewmodel( "c_usa_mp_seal6_shortsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_seals_mp/mpbody/class_smg_usa_seals.gsc b/MP/Factions/faction_seals_mp/mpbody/class_smg_usa_seals.gsc new file mode 100644 index 0000000..5f133bb --- /dev/null +++ b/MP/Factions/faction_seals_mp/mpbody/class_smg_usa_seals.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_seal6_smg_fb" ); + precachemodel( "c_usa_mp_seal6_shortsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["allies"]["smg"] = ::set_player_model; + else + game["set_player_model"]["allies"]["smg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_seal6_smg_fb" ); + self setviewmodel( "c_usa_mp_seal6_shortsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_seals_mp/mpbody/class_sniper_usa_seals.gsc b/MP/Factions/faction_seals_mp/mpbody/class_sniper_usa_seals.gsc new file mode 100644 index 0000000..4b00a9a --- /dev/null +++ b/MP/Factions/faction_seals_mp/mpbody/class_sniper_usa_seals.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_seal6_sniper_fb" ); + precachemodel( "c_usa_mp_seal6_longsleeve_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["allies"]["rifle"] = ::set_player_model; + else + game["set_player_model"]["allies"]["rifle"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_seal6_sniper_fb" ); + self setviewmodel( "c_usa_mp_seal6_longsleeve_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_seals_wet_mp/maps/mp/teams/_teamset_seals_wet.gsc b/MP/Factions/faction_seals_wet_mp/maps/mp/teams/_teamset_seals_wet.gsc new file mode 100644 index 0000000..7c32474 --- /dev/null +++ b/MP/Factions/faction_seals_wet_mp/maps/mp/teams/_teamset_seals_wet.gsc @@ -0,0 +1,56 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\teams\_teamset; +#include mpbody\class_assault_usa_seals_wet; +#include mpbody\class_lmg_usa_seals_wet; +#include mpbody\class_shotgun_usa_seals_wet; +#include mpbody\class_smg_usa_seals_wet; +#include mpbody\class_sniper_usa_seals_wet; + +main() +{ + init( "allies" ); + maps\mp\teams\_teamset::customteam_init(); + precache(); +} + +init( team ) +{ + maps\mp\teams\_teamset::init(); + game[team] = "seals"; + game["attackers"] = team; + precacheshader( "faction_seals" ); + game["entity_headicon_" + team] = "faction_seals"; + game["headicon_" + team] = "faction_seals"; + level.teamprefix[team] = "vox_st"; + level.teampostfix[team] = "st6"; + setdvar( "g_TeamName_" + team, &"MPUI_SEALS_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_FactionName_" + team, "usa_seals" ); + game["strings"][team + "_win"] = &"MP_SEALS_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_SEALS_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_SEALS_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_SEALS_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_SEALS_FORFEITED"; + game["strings"][team + "_name"] = &"MP_SEALS_NAME"; + game["music"]["spawn_" + team] = "SPAWN_ST6"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_ST6"; + game["music"]["victory_" + team] = "VICTORY_ST6"; + game["icons"][team] = "faction_seals"; + game["voice"][team] = "vox_st6_"; + setdvar( "scr_" + team, "marines" ); + level.heli_vo[team]["hit"] = "vox_ops_2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_allies_1"; + game["carry_flagmodels"][team] = "mp_flag_allies_1_carry"; + game["carry_icon"][team] = "hudicon_marines_ctf_flag_carry"; +} + +precache() +{ + mpbody\class_assault_usa_seals_wet::precache(); + mpbody\class_lmg_usa_seals_wet::precache(); + mpbody\class_shotgun_usa_seals_wet::precache(); + mpbody\class_smg_usa_seals_wet::precache(); + mpbody\class_sniper_usa_seals_wet::precache(); +} diff --git a/MP/Factions/faction_seals_wet_mp/mpbody/class_assault_usa_seals_wet.gsc b/MP/Factions/faction_seals_wet_mp/mpbody/class_assault_usa_seals_wet.gsc new file mode 100644 index 0000000..71de3c2 --- /dev/null +++ b/MP/Factions/faction_seals_wet_mp/mpbody/class_assault_usa_seals_wet.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_seal6_assault_w_fb" ); + precachemodel( "c_usa_mp_seal6_longsleeve_w_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["allies"]["default"] = ::set_player_model; + else + game["set_player_model"]["allies"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_seal6_assault_w_fb" ); + self setviewmodel( "c_usa_mp_seal6_longsleeve_w_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_seals_wet_mp/mpbody/class_lmg_usa_seals_wet.gsc b/MP/Factions/faction_seals_wet_mp/mpbody/class_lmg_usa_seals_wet.gsc new file mode 100644 index 0000000..24a6137 --- /dev/null +++ b/MP/Factions/faction_seals_wet_mp/mpbody/class_lmg_usa_seals_wet.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_seal6_lmg_w_fb" ); + precachemodel( "c_usa_mp_seal6_longsleeve_w_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["allies"]["mg"] = ::set_player_model; + else + game["set_player_model"]["allies"]["mg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_seal6_lmg_w_fb" ); + self setviewmodel( "c_usa_mp_seal6_longsleeve_w_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_seals_wet_mp/mpbody/class_shotgun_usa_seals_wet.gsc b/MP/Factions/faction_seals_wet_mp/mpbody/class_shotgun_usa_seals_wet.gsc new file mode 100644 index 0000000..ec3e6e1 --- /dev/null +++ b/MP/Factions/faction_seals_wet_mp/mpbody/class_shotgun_usa_seals_wet.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_seal6_shotgun_w_fb" ); + precachemodel( "c_usa_mp_seal6_shortsleeve_w_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["allies"]["spread"] = ::set_player_model; + else + game["set_player_model"]["allies"]["spread"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_seal6_shotgun_w_fb" ); + self setviewmodel( "c_usa_mp_seal6_shortsleeve_w_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_seals_wet_mp/mpbody/class_smg_usa_seals_wet.gsc b/MP/Factions/faction_seals_wet_mp/mpbody/class_smg_usa_seals_wet.gsc new file mode 100644 index 0000000..418eeb7 --- /dev/null +++ b/MP/Factions/faction_seals_wet_mp/mpbody/class_smg_usa_seals_wet.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_seal6_smg_w_fb" ); + precachemodel( "c_usa_mp_seal6_shortsleeve_w_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["allies"]["smg"] = ::set_player_model; + else + game["set_player_model"]["allies"]["smg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_seal6_smg_w_fb" ); + self setviewmodel( "c_usa_mp_seal6_shortsleeve_w_viewhands" ); + heads = []; +} diff --git a/MP/Factions/faction_seals_wet_mp/mpbody/class_sniper_usa_seals_wet.gsc b/MP/Factions/faction_seals_wet_mp/mpbody/class_sniper_usa_seals_wet.gsc new file mode 100644 index 0000000..3eaaa95 --- /dev/null +++ b/MP/Factions/faction_seals_wet_mp/mpbody/class_sniper_usa_seals_wet.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_seal6_sniper_w_fb" ); + precachemodel( "c_usa_mp_seal6_longsleeve_w_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["allies"]["rifle"] = ::set_player_model; + else + game["set_player_model"]["allies"]["rifle"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_seal6_sniper_w_fb" ); + self setviewmodel( "c_usa_mp_seal6_longsleeve_w_viewhands" ); + heads = []; +} diff --git a/MP/Factions/factions_seals_snow_mp/maps/mp/teams/_teamset_seals_snow.gsc b/MP/Factions/factions_seals_snow_mp/maps/mp/teams/_teamset_seals_snow.gsc new file mode 100644 index 0000000..5ec24ef --- /dev/null +++ b/MP/Factions/factions_seals_snow_mp/maps/mp/teams/_teamset_seals_snow.gsc @@ -0,0 +1,56 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\teams\_teamset; +#include mpbody\class_assault_usa_seals_snow; +#include mpbody\class_lmg_usa_seals_snow; +#include mpbody\class_shotgun_usa_seals_snow; +#include mpbody\class_smg_usa_seals_snow; +#include mpbody\class_sniper_usa_seals_snow; + +main() +{ + init( "allies" ); + maps\mp\teams\_teamset::customteam_init(); + precache(); +} + +init( team ) +{ + maps\mp\teams\_teamset::init(); + game[team] = "seals"; + game["attackers"] = team; + precacheshader( "faction_seals" ); + game["entity_headicon_" + team] = "faction_seals"; + game["headicon_" + team] = "faction_seals"; + level.teamprefix[team] = "vox_st"; + level.teampostfix[team] = "st6"; + setdvar( "g_TeamName_" + team, &"MPUI_SEALS_SHORT" ); + setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); + setdvar( "g_FactionName_" + team, "usa_seals" ); + game["strings"][team + "_win"] = &"MP_SEALS_WIN_MATCH"; + game["strings"][team + "_win_round"] = &"MP_SEALS_WIN_ROUND"; + game["strings"][team + "_mission_accomplished"] = &"MP_SEALS_MISSION_ACCOMPLISHED"; + game["strings"][team + "_eliminated"] = &"MP_SEALS_ELIMINATED"; + game["strings"][team + "_forfeited"] = &"MP_SEALS_FORFEITED"; + game["strings"][team + "_name"] = &"MP_SEALS_NAME"; + game["music"]["spawn_" + team] = "SPAWN_ST6"; + game["music"]["spawn_short" + team] = "SPAWN_SHORT_ST6"; + game["music"]["victory_" + team] = "VICTORY_ST6"; + game["icons"][team] = "faction_seals"; + game["voice"][team] = "vox_st6_"; + setdvar( "scr_" + team, "marines" ); + level.heli_vo[team]["hit"] = "vox_ops_2_kls_attackheli_hit"; + game["flagmodels"][team] = "mp_flag_allies_1"; + game["carry_flagmodels"][team] = "mp_flag_allies_1_carry"; + game["carry_icon"][team] = "hudicon_marines_ctf_flag_carry"; +} + +precache() +{ + mpbody\class_assault_usa_seals_snow::precache(); + mpbody\class_lmg_usa_seals_snow::precache(); + mpbody\class_shotgun_usa_seals_snow::precache(); + mpbody\class_smg_usa_seals_snow::precache(); + mpbody\class_sniper_usa_seals_snow::precache(); +} diff --git a/MP/Factions/factions_seals_snow_mp/mpbody/class_assault_usa_seals_snow.gsc b/MP/Factions/factions_seals_snow_mp/mpbody/class_assault_usa_seals_snow.gsc new file mode 100644 index 0000000..ae6d171 --- /dev/null +++ b/MP/Factions/factions_seals_snow_mp/mpbody/class_assault_usa_seals_snow.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_seal6_assault_snw_fb" ); + precachemodel( "c_usa_mp_seal6_assault_snw_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["allies"]["default"] = ::set_player_model; + else + game["set_player_model"]["allies"]["default"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_seal6_assault_snw_fb" ); + self setviewmodel( "c_usa_mp_seal6_assault_snw_viewhands" ); + heads = []; +} diff --git a/MP/Factions/factions_seals_snow_mp/mpbody/class_lmg_usa_seals_snow.gsc b/MP/Factions/factions_seals_snow_mp/mpbody/class_lmg_usa_seals_snow.gsc new file mode 100644 index 0000000..dc31367 --- /dev/null +++ b/MP/Factions/factions_seals_snow_mp/mpbody/class_lmg_usa_seals_snow.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_seal6_lmg_snw_fb" ); + precachemodel( "c_usa_mp_seal6_longsleeve_snw_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["allies"]["mg"] = ::set_player_model; + else + game["set_player_model"]["allies"]["mg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_seal6_lmg_snw_fb" ); + self setviewmodel( "c_usa_mp_seal6_longsleeve_snw_viewhands" ); + heads = []; +} diff --git a/MP/Factions/factions_seals_snow_mp/mpbody/class_shotgun_usa_seals_snow.gsc b/MP/Factions/factions_seals_snow_mp/mpbody/class_shotgun_usa_seals_snow.gsc new file mode 100644 index 0000000..76bffc0 --- /dev/null +++ b/MP/Factions/factions_seals_snow_mp/mpbody/class_shotgun_usa_seals_snow.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_seal6_shotgun_snw_fb" ); + precachemodel( "c_usa_mp_seal6_shortsleeve_snw_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["allies"]["spread"] = ::set_player_model; + else + game["set_player_model"]["allies"]["spread"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_seal6_shotgun_snw_fb" ); + self setviewmodel( "c_usa_mp_seal6_shortsleeve_snw_viewhands" ); + heads = []; +} diff --git a/MP/Factions/factions_seals_snow_mp/mpbody/class_smg_usa_seals_snow.gsc b/MP/Factions/factions_seals_snow_mp/mpbody/class_smg_usa_seals_snow.gsc new file mode 100644 index 0000000..973bb45 --- /dev/null +++ b/MP/Factions/factions_seals_snow_mp/mpbody/class_smg_usa_seals_snow.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_seal6_smg_snw_fb" ); + precachemodel( "c_usa_mp_seal6_shortsleeve_snw_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["allies"]["smg"] = ::set_player_model; + else + game["set_player_model"]["allies"]["smg"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_seal6_smg_snw_fb" ); + self setviewmodel( "c_usa_mp_seal6_shortsleeve_snw_viewhands" ); + heads = []; +} diff --git a/MP/Factions/factions_seals_snow_mp/mpbody/class_sniper_usa_seals_snow.gsc b/MP/Factions/factions_seals_snow_mp/mpbody/class_sniper_usa_seals_snow.gsc new file mode 100644 index 0000000..74cb47b --- /dev/null +++ b/MP/Factions/factions_seals_snow_mp/mpbody/class_sniper_usa_seals_snow.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; + +precache() +{ + precachemodel( "c_usa_mp_seal6_sniper_snw_fb" ); + precachemodel( "c_usa_mp_seal6_longsleeve_snw_viewhands" ); + + if ( level.multiteam ) + game["set_player_model"]["allies"]["rifle"] = ::set_player_model; + else + game["set_player_model"]["allies"]["rifle"] = ::set_player_model; +} + +set_player_model() +{ + self setmodel( "c_usa_mp_seal6_sniper_snw_fb" ); + self setviewmodel( "c_usa_mp_seal6_longsleeve_snw_viewhands" ); + heads = []; +} diff --git a/MP/Maps/Aftermath/aitype/enemy_dog_mp.gsc b/MP/Maps/Aftermath/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Aftermath/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Aftermath/character/character_mp_german_shepherd.gsc b/MP/Maps/Aftermath/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Aftermath/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Aftermath/maps/mp/createart/mp_la_art.gsc b/MP/Maps/Aftermath/maps/mp/createart/mp_la_art.gsc new file mode 100644 index 0000000..fd6bd77 --- /dev/null +++ b/MP/Maps/Aftermath/maps/mp/createart/mp_la_art.gsc @@ -0,0 +1,43 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + level.tweakfile = 1; + setdvar( "scr_fog_exp_halfplane", "3759.28" ); + setdvar( "scr_fog_exp_halfheight", "243.735" ); + setdvar( "scr_fog_nearplane", "601.593" ); + setdvar( "scr_fog_red", "0.806694" ); + setdvar( "scr_fog_green", "0.962521" ); + setdvar( "scr_fog_blue", "0.9624" ); + setdvar( "scr_fog_baseheight", "-475.268" ); + setdvar( "visionstore_glowTweakEnable", "0" ); + setdvar( "visionstore_glowTweakRadius0", "5" ); + setdvar( "visionstore_glowTweakRadius1", "" ); + setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); + setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); + setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); + setdvar( "visionstore_glowTweakBloomIntensity1", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); + start_dist = 740.262; + half_dist = 4113.21; + half_height = 1651.45; + base_height = -80.5565; + fog_r = 0.372549; + fog_g = 0.454902; + fog_b = 0.447059; + fog_scale = 7.39106; + sun_col_r = 1; + sun_col_g = 0.686275; + sun_col_b = 0.337255; + sun_dir_x = -0.196011; + sun_dir_y = 0.785122; + sun_dir_z = 0.587506; + sun_start_ang = 0; + sun_stop_ang = 61.3208; + time = 0; + max_fog_opacity = 1; + setvolfog( start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale, sun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, sun_stop_ang, time, max_fog_opacity ); + visionsetnaked( "mp_la", 0 ); +} diff --git a/MP/Maps/Aftermath/maps/mp/createfx/mp_la_fx.gsc b/MP/Maps/Aftermath/maps/mp/createfx/mp_la_fx.gsc new file mode 100644 index 0000000..22425af --- /dev/null +++ b/MP/Maps/Aftermath/maps/mp/createfx/mp_la_fx.gsc @@ -0,0 +1,1941 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_ash_falling_lg" ); + ent.v["origin"] = ( -952.321, 2394.96, -174.98 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 198.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_ash_falling_lg" ); + ent.v["origin"] = ( -551.998, 947.768, -207 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 198.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_ash_falling_lg" ); + ent.v["origin"] = ( -1162.16, 2278.29, -185.039 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 198.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_lg" ); + ent.v["origin"] = ( -21.5547, 2116.09, 200.793 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_plume_lg_blk" ); + ent.v["origin"] = ( -8.12979, 2117.18, 323.406 ); + ent.v["angles"] = ( 25.9496, 177.702, 0.355472 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_md" ); + ent.v["origin"] = ( -1848.63, 1255.72, -60.2276 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_md" ); + ent.v["origin"] = ( -1356.31, 3118.37, 24.8662 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_plume_md_blk" ); + ent.v["origin"] = ( -1364.56, 3119.96, 106.711 ); + ent.v["angles"] = ( 6.6665, 170.618, -3.36161 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_plume_md_blk" ); + ent.v["origin"] = ( -1837.14, 1254.46, 26.5401 ); + ent.v["angles"] = ( 13.7633, 180.033, -1.82928 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 82.5291, -265.777, -189.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 147.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -490.99, -116.469, -195.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -1702.53, 5325.4, -198.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 215.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -1644.35, 3832.26, -169.287 ); + ent.v["angles"] = ( 9.87748, 172.948, 0.679485 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_area" ); + ent.v["origin"] = ( -977.869, 2905.91, -103.475 ); + ent.v["angles"] = ( 357.961, 180.165, 8.52735 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_area" ); + ent.v["origin"] = ( -957.79, 2091.25, -154.235 ); + ent.v["angles"] = ( 0.271509, 179.794, 18.4468 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_area" ); + ent.v["origin"] = ( -20.6569, 594.042, -223.878 ); + ent.v["angles"] = ( 1.52444, 171.834, -4.21439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -2493.1, 3583.39, -192.362 ); + ent.v["angles"] = ( 5.9521, 140.997, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_area" ); + ent.v["origin"] = ( -1751.84, 2172.33, -168.27 ); + ent.v["angles"] = ( 351.992, 181.052, 1.55738 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -917.12, 3153.23, -129.147 ); + ent.v["angles"] = ( 1.10482, 181.514, 8.03658 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_burning_fall_slow" ); + ent.v["origin"] = ( -113.622, 2094.77, 800.242 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_area" ); + ent.v["origin"] = ( -1443.98, 2231.3, -207.78 ); + ent.v["angles"] = ( 350.972, 201.276, -1.52216 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -2152.87, 1436.24, -189.736 ); + ent.v["angles"] = ( 5.99598, 179.985, -0.105187 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -427.027, 2241.41, 22.6633 ); + ent.v["angles"] = ( 6, 177.027, 0.210445 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -298.626, 1746.64, 89.7532 ); + ent.v["angles"] = ( 0, 177.005, 0.209294 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -681.807, 3416.2, -94.0107 ); + ent.v["angles"] = ( 18.8818, 189.111, 23.3384 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -607.591, 3513.76, -147.001 ); + ent.v["angles"] = ( 359.345, 182.362, 37.3852 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -878.35, 3415.77, -176.125 ); + ent.v["angles"] = ( 4.94373, 187.157, 17.7141 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -754.333, 1655.38, -58.7808 ); + ent.v["angles"] = ( 28.8715, 170.427, -7.89556 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -1257.06, 3832.83, -201.04 ); + ent.v["angles"] = ( 359.135, 176.132, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -2100.43, 3487.49, -188.882 ); + ent.v["angles"] = ( 1.00656, 174.738, -2.10143 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_lg" ); + ent.v["origin"] = ( -1824.78, 2720.45, 121.789 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_rain_splash_area_100_hvy_lp" ); + ent.v["origin"] = ( 587.892, 2577.51, -278.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fire_sprinkler_splash" ); + ent.v["origin"] = ( -223.954, 2507.96, -238.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fire_sprinkler" ); + ent.v["origin"] = ( 37.7566, 2057.65, -28.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fire_sprinkler_splash" ); + ent.v["origin"] = ( 100.917, 2061.84, -277.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -681.893, 4113.65, -104.086 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 77.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -424.216, 4609.9, -116.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -920.503, 1270.78, -158.913 ); + ent.v["angles"] = ( 2.00501, 174.719, -1.04957 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_ash_falling_lg" ); + ent.v["origin"] = ( 93.4205, 2232.31, 270.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 198.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_lg" ); + ent.v["origin"] = ( 69.0571, 2795.37, 192.124 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 182.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_ash_falling_lg" ); + ent.v["origin"] = ( -2557.9, 2600.64, -206.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fire_sprinkler" ); + ent.v["origin"] = ( -213.506, 2538.61, -30.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fire_sprinkler_sputter" ); + ent.v["origin"] = ( 492.198, 2556.16, -26.125 ); + ent.v["angles"] = ( 88.5858, 45.0046, 44.9959 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -10; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fire_sprinkler_gush" ); + ent.v["origin"] = ( 469.309, 2201.06, -13.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -10; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fire_sprinkler_gush_splash" ); + ent.v["origin"] = ( 475.92, 2201.93, -278.875 ); + ent.v["angles"] = ( 270, 359.851, 0.149435 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -10; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_md" ); + ent.v["origin"] = ( -377.239, 1409.38, 2.04714 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 419.391, 2124.07, -26.125 ); + ent.v["angles"] = ( 360, 90, -3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 488.229, 2108.87, -26.125 ); + ent.v["angles"] = ( 359.858, 68.9773, -0.158489 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 449.315, 2379.55, -27.125 ); + ent.v["angles"] = ( 6.18744, 93.7027, 3.40991 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -198.048, 1928.65, -29.125 ); + ent.v["angles"] = ( 357.604, 37.0378, -1.80648 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 157.297, 2252.51, -49.0022 ); + ent.v["angles"] = ( 0.156988, 92.9959, -2.99635 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 73.1006, 2319.56, -50.5905 ); + ent.v["angles"] = ( 0.156988, 92.9959, -2.99635 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -242.943, 2269.81, -26.125 ); + ent.v["angles"] = ( 357, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -55.2939, 2563.7, -29.125 ); + ent.v["angles"] = ( 359.645, 12.0885, 1.48682 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 273.875, 2018.67, -24.8778 ); + ent.v["angles"] = ( 0.982266, 180.965, 1.01606 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 193.51, 1896.65, -27.3232 ); + ent.v["angles"] = ( 1.01712, 178.965, 0.981151 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_plume_md_blk" ); + ent.v["origin"] = ( -379.818, 1411.63, 69.3466 ); + ent.v["angles"] = ( 12.7831, 180.391, -18.5892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -1582.56, 4123.51, -121.441 ); + ent.v["angles"] = ( 33.6953, 167.93, -18.4065 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -733.486, -782.764, -205.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 355.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fire_sprinkler_splash" ); + ent.v["origin"] = ( -296.187, 2519.92, -240.205 ); + ent.v["angles"] = ( 272, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fire_sprinkler_splash" ); + ent.v["origin"] = ( -134.577, 2548.49, -238.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 489.963, 2601.26, -26.125 ); + ent.v["angles"] = ( 0.790916, 190.964, 1.17117 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 562.202, 2436.96, -29.125 ); + ent.v["angles"] = ( 358.587, 314.957, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_rain_splash_area_100_hvy_lp" ); + ent.v["origin"] = ( 453.183, 2580.19, -278.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -481.855, 3228.03, 5.01965 ); + ent.v["angles"] = ( 359.055, 266.948, 1.05104 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fire_sprinkler_splash" ); + ent.v["origin"] = ( -19.4529, 2060.43, -251 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); + ent.v["origin"] = ( -1282.19, 2086.09, 157.476 ); + ent.v["angles"] = ( 33.791, 18.4808, -35.3513 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_flare_la" ); + ent.v["origin"] = ( -1382.62, 2348.83, -191.915 ); + ent.v["angles"] = ( 350.752, 222.903, -6.20005 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_flare_la" ); + ent.v["origin"] = ( -1899.34, 2051.36, -116.911 ); + ent.v["angles"] = ( 341.715, 337.678, -18.0684 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_flare_la" ); + ent.v["origin"] = ( -1649.47, 2311.68, -153.521 ); + ent.v["angles"] = ( 349.228, 34.2927, 24.7891 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -758.206, 5337.65, -220 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -57.9301, 4440.03, -113.486 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -106.441, 3299.46, -148.509 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -861.118, 5187.94, -221 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -1436.56, 5268.6, -217 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -1313.09, 4476.06, -224.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -1601.94, 5581.6, -150.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -1975.62, 5227.79, -159.602 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( 241.246, 1484.96, -222.286 ); + ent.v["angles"] = ( 4.09965, 181.053, 6.02415 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fire_sprinkler_gush_splash" ); + ent.v["origin"] = ( -661.137, 3097.2, -9.875 ); + ent.v["angles"] = ( 270, 359.851, 0.149435 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -10; + ent = maps\mp\_utility::createoneshoteffect( "fx_dest_fire_hydrant_burst" ); + ent.v["origin"] = ( -669.722, 3060.94, -31.875 ); + ent.v["angles"] = ( 0, 255, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -2144.51, 2817.71, -181.458 ); + ent.v["angles"] = ( 1.19116, 166.741, -2.25932 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -126.487, 2628.74, 52.5623 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -702.531, 2871.47, 54.2262 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 357.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_emrgncy_floodlight" ); + ent.v["origin"] = ( -306.941, 24.5859, -132.51 ); + ent.v["angles"] = ( 19.6379, 301.388, 0.24249 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_emrgncy_floodlight" ); + ent.v["origin"] = ( -323.799, 25.3594, -133.387 ); + ent.v["angles"] = ( 16.2831, 236.015, -1.55665 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -458.724, 2226.06, -84.4114 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 357.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -1793.12, -7.28734, -59.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 120.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -1998.14, 31.7489, -59.875 ); + ent.v["angles"] = ( 359.594, 47.993, 0.913571 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_plume_lg_blk_distant" ); + ent.v["origin"] = ( -4429.44, -6906.03, 4302.8 ); + ent.v["angles"] = ( 333.719, 199.276, -11.3577 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_flare_la" ); + ent.v["origin"] = ( -1543.57, 2094.57, -177.029 ); + ent.v["angles"] = ( 345.817, 165.128, 21.7408 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); + ent.v["origin"] = ( -3530.83, 1579.7, 123.04 ); + ent.v["angles"] = ( 341.039, 185.289, -30.0587 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); + ent.v["origin"] = ( -2991.63, 2485.01, 132.518 ); + ent.v["angles"] = ( 0, 208.999, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); + ent.v["origin"] = ( -3286.09, 3356.75, 7.61793 ); + ent.v["angles"] = ( 354.045, 185.835, 21.1856 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); + ent.v["origin"] = ( -4092.03, 3373.53, 94.0726 ); + ent.v["angles"] = ( 359.642, 188, 20.0663 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); + ent.v["origin"] = ( -4223.02, 1249.5, 124.499 ); + ent.v["angles"] = ( 359.546, 182, -0.891203 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_light_gray_white_ribbon_sm" ); + ent.v["origin"] = ( -29.6098, 2763.39, -252.412 ); + ent.v["angles"] = ( 278, 270, 90 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_light_gray_white_ribbon_sm" ); + ent.v["origin"] = ( 23.6997, 2766.9, -246.414 ); + ent.v["angles"] = ( 278, 270, 106 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_light_gray_white_ribbon_sm" ); + ent.v["origin"] = ( -8.50069, 2812.41, -249.407 ); + ent.v["angles"] = ( 283, 90, -90 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_light_gray_white_ribbon_sm" ); + ent.v["origin"] = ( 28.4305, 2813.22, -246.412 ); + ent.v["angles"] = ( 283, 90, -90 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_light_flourescent_glow_cool" ); + ent.v["origin"] = ( -553.458, -801.702, -120.875 ); + ent.v["angles"] = ( 270.701, 75.3337, 14.6585 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_ash_falling_door" ); + ent.v["origin"] = ( -107.14, 345.002, -195.257 ); + ent.v["angles"] = ( 9.36825, 266.933, 3.03084 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -691.855, -440.721, -214.875 ); + ent.v["angles"] = ( 270, 338.501, -8.5005 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -548.694, -20.3628, -210.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -747.067, -24.2708, -212.932 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -1813.07, -2.45015, -194.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 123.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -1914.29, 223.856, -194.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); + ent.v["origin"] = ( -2347.85, -2228.46, -312.696 ); + ent.v["angles"] = ( 359.642, 188, -0.933735 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); + ent.v["origin"] = ( -788.002, -2878.67, -82.0541 ); + ent.v["angles"] = ( 359.485, 178, -0.85739 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); + ent.v["origin"] = ( 2054.44, 1044, -170.875 ); + ent.v["angles"] = ( 1.37819, 178.007, -1.75516 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -381.602, -213.112, 44.875 ); + ent.v["angles"] = ( 19.5172, 269.525, 0.148691 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fountian_pool_md" ); + ent.v["origin"] = ( 448.854, 4317.18, -202.827 ); + ent.v["angles"] = ( 270, 358.386, -27.3864 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( 57.4833, 3714.52, -198.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 244.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); + ent.v["origin"] = ( -3793.85, 5441.35, -199.875 ); + ent.v["angles"] = ( 359.642, 188, -0.933735 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); + ent.v["origin"] = ( -3788.33, 4039.54, -133.981 ); + ent.v["angles"] = ( 359.642, 188, -0.933735 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -560.288, -944.824, -120.958 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -204.682, -837.057, -120.926 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -560.677, 3156.42, 128.701 ); + ent.v["angles"] = ( 1.01712, 178.965, 0.981151 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_lg" ); + ent.v["origin"] = ( -2516.33, 1142.14, 242.428 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 66.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_lg" ); + ent.v["origin"] = ( -2558.76, 434.15, 213.164 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 30.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_lg" ); + ent.v["origin"] = ( -2535.16, 759.506, 206.086 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_lg" ); + ent.v["origin"] = ( -2147.61, 2028.91, 107.554 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 234.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_lg" ); + ent.v["origin"] = ( -1455.96, 2058.52, 246.206 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_lg" ); + ent.v["origin"] = ( -1471.76, 2549.09, 237.716 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -201.915, 4471.13, -122.955 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1844.64, 4291.11, 3.6067 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1829.28, 4911.67, 3.75691 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flourescent_glow_cool" ); + ent.v["origin"] = ( -128.262, -80.6205, 80.0935 ); + ent.v["angles"] = ( 270.701, 75.3337, 14.6585 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -401.059, 4457.58, -33 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -366.534, 4420.78, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -345.405, 4382.83, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -326.063, 4345.85, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -244.81, 4344.14, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -258.982, 4296.32, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -160.93, 4296.09, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -162.334, 4355.52, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -210.639, 4391.3, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -255.064, 4423.96, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -291.251, 4467.05, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -309.964, 4512.78, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -297.463, 4558.23, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -256.831, 4566.36, -33 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -221.419, 4545.77, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -189.11, 4516.36, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -158.388, 4475.72, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -444.485, 4479.27, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -490.899, 4467.93, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -510.82, 4426.87, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -502.745, 4380.94, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -459.711, 4343.6, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -425.378, 4297.82, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -522.624, 4296.56, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -587.394, 4345.56, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -573.405, 4391.81, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -305.216, 4246.76, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -365.346, 4195.06, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -434.275, 4161.35, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -327.702, 4298.08, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -619.104, 4297.34, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -722.191, 4296.69, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -699.16, 4344.57, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -790.27, 4344.85, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -790.003, 4444.52, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -738.074, 4479.7, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -789.117, 4560.69, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -668.712, 4405.69, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -643.537, 4593.21, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -598.161, 4557.94, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -553.533, 4554.58, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -530.401, 4518.56, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -548.52, 4480.4, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -595.049, 4475.73, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -623.483, 4512.43, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -396.769, 4227.64, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -791.701, 4316.5, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -727.454, 4231.99, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -661.026, 4184.61, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -587.057, 4153.64, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -572.573, 4194.51, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -654.867, 4234.18, -32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -1497.98, 4598.29, -25.7954 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_lg_runner" ); + ent.v["origin"] = ( -763.335, 3248.52, 313.923 ); + ent.v["angles"] = ( 17.459, 135.647, 7.72393 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1630.92, -789.04, -200.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -690.497, 78.4437, -188.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_lg" ); + ent.v["origin"] = ( -467.85, 2570.12, 611.892 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fire_sprinkler_splash" ); + ent.v["origin"] = ( 446.936, 4303.71, -229.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fire_sprinkler_splash" ); + ent.v["origin"] = ( 392.169, 4351.69, -201 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 84.6875, 5249.64, -230 ); + ent.v["angles"] = ( 271, 89.9982, -89.9982 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_lg" ); + ent.v["origin"] = ( -2498.83, 4487.04, 226.208 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 336.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_lg" ); + ent.v["origin"] = ( -2600.69, 4352.41, 215.575 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 357.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_lg" ); + ent.v["origin"] = ( -2451.62, 3410, 199.183 ); + ent.v["angles"] = ( 3, 292, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -453.767, 3414.8, -149.903 ); + ent.v["angles"] = ( 340.815, 166.909, 30.4122 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_ash_falling_door" ); + ent.v["origin"] = ( -303.612, 317.759, 16.6338 ); + ent.v["angles"] = ( 359, 273, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_ash_falling_door" ); + ent.v["origin"] = ( -1040.58, -67.0286, 23.3413 ); + ent.v["angles"] = ( 355.641, 358.979, -0.157766 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); + ent.v["origin"] = ( -3124.18, 22.5527, -136.875 ); + ent.v["angles"] = ( 359.485, 178, 0.142588 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); + ent.v["origin"] = ( -3196.09, -1062.99, -130.378 ); + ent.v["angles"] = ( 359.08, 142, -0.391087 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_ash_falling_door" ); + ent.v["origin"] = ( 74.4852, 326.737, -199.391 ); + ent.v["angles"] = ( 8.93236, 265.914, 0.894206 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -683.751, -474.796, -259.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 288.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_ash_falling_door" ); + ent.v["origin"] = ( -692.254, 2304.82, -143.647 ); + ent.v["angles"] = ( 8.84828, 0.802157, 0.467443 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -431.557, 4521.24, -112.749 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -843.415, -796.511, -110.912 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -151.565, 42.0966, -130.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 162.445, 101.941, -133.156 ); + ent.v["angles"] = ( 359, 180.003, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -383.103, 5437.04, -263 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 200.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fountian_pool_md" ); + ent.v["origin"] = ( 448.343, 4171.92, -202.875 ); + ent.v["angles"] = ( 270, 0, -44 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fountian_pool_md" ); + ent.v["origin"] = ( 448.835, 4480.81, -202.308 ); + ent.v["angles"] = ( 270, 0.365009, -6.365 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fire_sprinkler_splash" ); + ent.v["origin"] = ( 384.685, 4502.37, -201 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fire_sprinkler_splash" ); + ent.v["origin"] = ( 408.437, 4217.42, -201 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm" ); + ent.v["origin"] = ( -374.635, 2400.43, 46.7278 ); + ent.v["angles"] = ( 290.851, 170.338, -0.749529 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm" ); + ent.v["origin"] = ( -393.074, 2499.3, 50.0956 ); + ent.v["angles"] = ( 282, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -460.588, -128.834, -193.262 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_bldg_int_dist_xlg" ); + ent.v["origin"] = ( -4813.42, 12642.5, 7366.9 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 292.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( -2390.05, 5007.86, -207 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 255.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( -2250, 4400.25, -207 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 255.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( 624.49, 3426.27, -198.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( 364.573, 5699.16, -306.042 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 200.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( 56.7123, 4973.03, -263 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 132.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( -930.972, 5312.98, -263 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -530.398, 3931.38, -199 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 188.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -2669.46, 4257.86, -198.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 279.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -2362.9, 3152.38, -194.684 ); + ent.v["angles"] = ( 358.011, 261.997, 0.209168 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 389.891, 918.819, -207 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 797.209, 1274.76, -204.483 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 832.563, 754.542, -206.967 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 892.053, 1008.39, -206.885 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -671.383, 484.81, -198.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -743.871, 815.658, -207 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 174.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -19.0976, 696.666, -202.561 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -1157.44, 502.042, -198.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -1514.25, 805.303, -207 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( -1144.85, -752.532, -267.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( -2065.04, 953.533, -206.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( -1173.11, -1402.76, -267.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -192.247, -894.717, -267.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 189.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( 87.7333, 508.832, -226.74 ); + ent.v["angles"] = ( 7.6167, 253.408, 0.552475 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -125.625, 245.623, -267.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -682.618, -731.131, -267.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 191.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -1333.62, 274.528, -216.758 ); + ent.v["angles"] = ( 10, 256, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -1833, 3929.33, -199 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 215.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -558.042, -31.3918, -259.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 226.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -746.888, -40.7304, -259.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 219.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -1206.89, -91.4872, -267.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 211.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -1896.81, 540.97, -195.424 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 169.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( -2089.28, -722.887, -198.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 182.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -2052.8, -413.834, -210.534 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -1626.31, -836.936, -267.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 20.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -359.543, 2649.98, -9.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 159.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -505.886, 2853.5, -9.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 68.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -519.741, 2924.95, -9.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 348.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_lg_runner" ); + ent.v["origin"] = ( 74.5107, 1615.29, 884.918 ); + ent.v["angles"] = ( 56.0059, 142.126, -22.7039 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_plume_lg_blk" ); + ent.v["origin"] = ( -1778.3, 2713.74, 184.307 ); + ent.v["angles"] = ( 19.9861, 176.915, 2.08109 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_ash_falling_lg" ); + ent.v["origin"] = ( -457.037, 3604.29, -198.076 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 168.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -1680.73, 4743.53, -22.3659 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); + ent.v["origin"] = ( -1101.26, 6330.33, -163.944 ); + ent.v["angles"] = ( 359.546, 182, -0.891203 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_ash_falling_door" ); + ent.v["origin"] = ( -604.34, 3267.18, 67.1462 ); + ent.v["angles"] = ( 359, 273, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_ash_falling_door" ); + ent.v["origin"] = ( -611.061, 2492.91, 48.3769 ); + ent.v["angles"] = ( 1, 92.0031, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_ash_falling_door" ); + ent.v["origin"] = ( -1282.22, 2290.4, -154.676 ); + ent.v["angles"] = ( 356.948, 182.951, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_ash_falling_door" ); + ent.v["origin"] = ( -1970.06, 338.094, 8.03494 ); + ent.v["angles"] = ( 1.99756, 269.999, -0.104725 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -663.516, 4199.55, -127.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -827.341, 334.584, -157.523 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -1064.45, 2311.45, -188.769 ); + ent.v["angles"] = ( 1.95067, 188.736, -1.6488 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -485.553, 1797.67, -0.10499 ); + ent.v["angles"] = ( 3, 177.016, 0.209573 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_area" ); + ent.v["origin"] = ( 289.685, 926.395, -207 ); + ent.v["angles"] = ( 1.52444, 171.834, -0.214389 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_area" ); + ent.v["origin"] = ( 499.431, 1287.88, -207 ); + ent.v["angles"] = ( 1.52444, 171.834, 1.78561 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -529.657, 1239.59, -117.693 ); + ent.v["angles"] = ( 9.16775, 182.587, -30.0951 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -2324.92, 2704.14, -197.297 ); + ent.v["angles"] = ( 358.193, 166.859, -2.25995 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -2477.11, 3916.02, -213 ); + ent.v["angles"] = ( 359.956, 192.995, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_area" ); + ent.v["origin"] = ( -2090.17, 4004.24, -209 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 188.997 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -395.672, 465.25, -177.762 ); + ent.v["angles"] = ( 1.33407, 167.74, 0.74726 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -1926.98, 417.678, -173.728 ); + ent.v["angles"] = ( 4.13914, 168.805, 20.7981 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -2411.83, 1372.46, -205.673 ); + ent.v["angles"] = ( 348.996, 180.016, -0.106588 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); + ent.v["origin"] = ( -1344.9, 1846.08, -49.4547 ); + ent.v["angles"] = ( 344.839, 154.475, -1.08413 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -870.589, 4230.12, -175.664 ); + ent.v["angles"] = ( 6.58558, 185.273, -12.7318 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -1663.37, 3609.93, -94.8212 ); + ent.v["angles"] = ( 6.07375, 187.722, 36.4789 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -1162.65, 2939.78, -84.0657 ); + ent.v["angles"] = ( 349.895, 199.313, -0.702711 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -964.464, 1784.85, -102.752 ); + ent.v["angles"] = ( 357.757, 171.475, -2.41307 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -129.27, 1178.77, -213.474 ); + ent.v["angles"] = ( 356.896, 197.395, 3.71682 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( 197.61, 1626.39, -239.849 ); + ent.v["angles"] = ( 1.59471, 128.99, 4.03132 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -1133.11, 1055.38, -181.292 ); + ent.v["angles"] = ( 7.68519, 210.011, -14.5325 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -1496.56, 989.544, -175.811 ); + ent.v["angles"] = ( 4.40019, 161.69, -31.266 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_area" ); + ent.v["origin"] = ( -949.43, 2526.07, -167.221 ); + ent.v["angles"] = ( 3.61145, 171.978, -26.7966 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -1320.27, 2854.55, -54.1219 ); + ent.v["angles"] = ( 349.895, 199.313, -0.702711 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -1361.67, 2396.29, 23.307 ); + ent.v["angles"] = ( 358.746, 183.201, -0.360224 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -1375.72, 2160.55, 34.5731 ); + ent.v["angles"] = ( 358.715, 177.2, -0.227151 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -1401.06, 3673.71, -176.441 ); + ent.v["angles"] = ( 340.523, 162.054, 2.27733 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -699.771, 2453.26, -172.382 ); + ent.v["angles"] = ( 1.70115, 173.954, -28.1331 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -693.815, 2095.84, -155.414 ); + ent.v["angles"] = ( 2.87078, 179.189, 27.7732 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -593.797, 2046.66, 5.23829 ); + ent.v["angles"] = ( 2.99634, 183.004, -12.8428 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -568.443, 2420.89, -7.77816 ); + ent.v["angles"] = ( 3.65897, 185.935, -12.6727 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -1955.08, 3764.29, -209 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 207.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -2250.65, 2028.86, -174.985 ); + ent.v["angles"] = ( 17.3057, 182.748, -13.2567 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -2537.15, 2016.41, -212.367 ); + ent.v["angles"] = ( 358.178, 188.884, -9.52063 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -2143.81, 1708.54, -182.184 ); + ent.v["angles"] = ( 13.0955, 186.883, -12.7702 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -2355.15, 1695.04, -206.983 ); + ent.v["angles"] = ( 4.31203, 188.87, -0.468583 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -2600.72, 2239.11, -201.275 ); + ent.v["angles"] = ( 4.31207, 188.87, -12.4686 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -2510.21, 1040.65, -212.939 ); + ent.v["angles"] = ( 359.43, 189.949, -12.4333 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -2588.63, 1294.3, -172.83 ); + ent.v["angles"] = ( 333.731, 178.565, -10.7184 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -778.505, 1046.77, -198.082 ); + ent.v["angles"] = ( 357.031, 212.759, -14.4189 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -2124.71, 1993.61, -133.941 ); + ent.v["angles"] = ( 8.32616, 213.983, -0.973063 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -1905.08, 2197.17, -141.248 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 159.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -2237.73, 2304.63, -163.723 ); + ent.v["angles"] = ( 22.3356, 166.273, -0.79912 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -2093.52, 3221.22, -204.71 ); + ent.v["angles"] = ( 360, 175, 3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -2236.85, 3283.24, -219.902 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 165.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_area" ); + ent.v["origin"] = ( -1838.37, 4040.13, -199 ); + ent.v["angles"] = ( 0, 173.997, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -1615.52, 3932.52, -152.145 ); + ent.v["angles"] = ( 21, 171, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -1478.15, 4128.5, -118.027 ); + ent.v["angles"] = ( 350.011, 174.588, -20.614 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); + ent.v["origin"] = ( -1263.36, 4221.16, -257.875 ); + ent.v["angles"] = ( 325.298, 215.525, -8.8776 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_la_sun1" ); + ent.v["origin"] = ( -3652.57, 35635.9, 26492 ); + ent.v["angles"] = ( 285, 90, -68 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); + ent.v["origin"] = ( -1181.49, 5042.49, -261.955 ); + ent.v["angles"] = ( 355, 100, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); + ent.v["origin"] = ( -1303.1, 4950.23, -262.125 ); + ent.v["angles"] = ( 357, 160, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -208.151, 3588.25, -150.774 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); + ent.v["origin"] = ( -1248.93, 5017.84, -262.153 ); + ent.v["angles"] = ( 353.296, 122.013, 2.13843 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); + ent.v["origin"] = ( -1109.89, 5031.68, -264.009 ); + ent.v["angles"] = ( 351.815, 70.7762, 2.06796 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); + ent.v["origin"] = ( -1308.18, 4863.49, -262.01 ); + ent.v["angles"] = ( 353.799, 196.005, 0.540364 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); + ent.v["origin"] = ( -1048.16, 4985.52, -262.043 ); + ent.v["angles"] = ( 350.5, 39.9179, 0.607186 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); + ent.v["origin"] = ( -1013.95, 4917.75, -261.689 ); + ent.v["angles"] = ( 352.203, 6.62802, 0.794539 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); + ent.v["origin"] = ( -1024.53, 4843.52, -261.098 ); + ent.v["angles"] = ( 353.586, 341.451, -0.962938 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); + ent.v["origin"] = ( -1271.45, 4792.13, -261.008 ); + ent.v["angles"] = ( 354.908, 228.158, -0.888594 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); + ent.v["origin"] = ( -1209.02, 4752.88, -261.202 ); + ent.v["angles"] = ( 353.922, 256.238, -0.179304 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); + ent.v["origin"] = ( -1066.2, 4780.05, -261.341 ); + ent.v["angles"] = ( 356.664, 311.377, 1.91272 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); + ent.v["origin"] = ( -1136.27, 4744.76, -261.155 ); + ent.v["angles"] = ( 354.342, 280.368, 0.13846 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_firetruck" ); + ent.v["origin"] = ( -2568.7, 685.6, -207 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.6 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_plume_md_blk_distant" ); + ent.v["origin"] = ( -9689.1, 5424.9, 2557.81 ); + ent.v["angles"] = ( 6.27876, 285.319, -1.24729 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_bldg_ext_dist_falling_debris" ); + ent.v["origin"] = ( -9623.87, 5388.72, 2544.54 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_bldg_int_dist_xlg" ); + ent.v["origin"] = ( -9771.97, 5388.11, 2166.23 ); + ent.v["angles"] = ( 0, 355, -4 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_bldg_int_dist_xlg" ); + ent.v["origin"] = ( -4851.88, -895.618, 1122.79 ); + ent.v["angles"] = ( 0, 355, -4 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_bldg_int_dist_xlg" ); + ent.v["origin"] = ( -4115.58, -6560.9, 4016.83 ); + ent.v["angles"] = ( 3.27622, 49.9342, -2.29716 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_bldg_int_dist_xlg" ); + ent.v["origin"] = ( -5191.22, -6183.18, 5934.13 ); + ent.v["angles"] = ( 4, 86.0023, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_bldg_ext_dist_falling_debris" ); + ent.v["origin"] = ( -3789.11, -5559.43, 3888.22 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 47.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_bldg_int_dist_xlg" ); + ent.v["origin"] = ( -5998.29, 7707.82, 795.268 ); + ent.v["angles"] = ( 356.346, 289.052, -1.62934 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_light_flourescent_ceiling_panel" ); + ent.v["origin"] = ( -233.732, 2628.09, 131.475 ); + ent.v["angles"] = ( 89.9651, 87.9915, 178.992 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 3002; + ent = maps\mp\_utility::createexploder( "fx_light_outdoor_wall" ); + ent.v["origin"] = ( 287.981, 1705.02, -82.1401 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 3003; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_pent_lamp_desk" ); + ent.v["origin"] = ( -674.533, 2778.55, 33.3667 ); + ent.v["angles"] = ( 63.6855, 339.664, -16.8023 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_pent_lamp_desk" ); + ent.v["origin"] = ( -684.725, 2943.07, 33.125 ); + ent.v["angles"] = ( 60, 36, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_plume_detail_blk" ); + ent.v["origin"] = ( -371.722, 2402.06, 62.4251 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_sm_runner" ); + ent.v["origin"] = ( 138.599, 2941.03, -53.0575 ); + ent.v["angles"] = ( 58.194, 327.501, -11.2124 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_ash_falling_door" ); + ent.v["origin"] = ( 37.6359, 517.715, -93.162 ); + ent.v["angles"] = ( 39.9277, 266.515, 1.15198 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_light_outdoor_wall" ); + ent.v["origin"] = ( 673.909, 1705, -82.2921 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 3003; + ent = maps\mp\_utility::createexploder( "fx_light_outdoor_wall" ); + ent.v["origin"] = ( -451.951, 1885.67, -83.2023 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 3001; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_plume_detail_blk" ); + ent.v["origin"] = ( -397.592, 2486.77, 64.4336 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 190.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm" ); + ent.v["origin"] = ( -1873.8, 1215.32, -166.061 ); + ent.v["angles"] = ( 290.851, 170.338, -0.749529 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_plume_detail_blk" ); + ent.v["origin"] = ( -1870.49, 1219.93, -147.364 ); + ent.v["angles"] = ( 360, 175, -16 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["origin"] = ( 7.3392, 2653.22, -27.4032 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( -341.818, -892.832, -137.358 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( -479.281, -893.118, -137.364 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( -620.288, -893.344, -136.622 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( -884.636, -893.028, -137.025 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( -342.588, -1373.44, -136.721 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( -480.67, -1373.52, -137.356 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( -595.581, -1372.76, -137.354 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( -722.606, -1373.44, -137.367 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( -838.612, -1374.6, -137.196 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( -722.372, -1565.15, -136.766 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_red" ); + ent.v["origin"] = ( -838.132, -1565.03, -137.111 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_red" ); + ent.v["origin"] = ( -596.917, -1565.59, -136.134 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_red" ); + ent.v["origin"] = ( -480.061, -1565.45, -136.445 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_red" ); + ent.v["origin"] = ( -341.63, -1564.57, -136.759 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_red" ); + ent.v["origin"] = ( -771.058, -893.535, -136.195 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_red" ); + ent.v["origin"] = ( -740.818, 67.4211, 62.7712 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_red" ); + ent.v["origin"] = ( 41.4271, -124.344, 62.421 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_red" ); + ent.v["origin"] = ( 370.505, -124.113, 62.3464 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_red" ); + ent.v["origin"] = ( 507.182, 67.3318, 63.6387 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_red" ); + ent.v["origin"] = ( 373.911, 68.5682, 63.1458 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( -856.212, 67.3872, 63.4107 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( -621.832, 67.8153, 63.089 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( -494.262, 67.4517, 63.6499 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( -374.945, 66.7372, 62.6954 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( -265.981, 66.8669, 62.7713 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( -142.113, 67.2712, 62.7598 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( -8.12886, 67.0104, 63.8761 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( -189.275, -124.95, 64.0678 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( -70.4325, -125.437, 62.2695 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( 153.795, -125.095, 63.8372 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( 269.424, -126.852, 62.2402 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( 629.683, 67.4643, 62.0338 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( 242.321, 67.9498, 62.6577 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_green" ); + ent.v["origin"] = ( 115.197, 67.3116, 63.0846 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 58.5516, -99.0717, 22.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1007.9, -71.7925, 30.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -355.078, -476.457, -93.4562 ); + ent.v["angles"] = ( 15, 179, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( -28.3065, -223.546, -267.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( -1223.73, -1607.3, -264.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 233.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -2090.31, -174.806, -155.441 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1694.67, 102.1, -136.652 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -2098.87, 94.0168, 3.30144 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; +} diff --git a/MP/Maps/Aftermath/maps/mp/mp_la.gsc b/MP/Maps/Aftermath/maps/mp/mp_la.gsc new file mode 100644 index 0000000..e7b4e12 --- /dev/null +++ b/MP/Maps/Aftermath/maps/mp/mp_la.gsc @@ -0,0 +1,71 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\mp_la_fx; +#include maps\mp\_compass; +#include maps\mp\_load; +#include maps\mp\mp_la_amb; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_la_fx::main(); + + if ( gamemodeismode( level.gamemode_wager_match ) ) + maps\mp\_compass::setupminimap( "compass_map_mp_la_wager" ); + else + maps\mp\_compass::setupminimap( "compass_map_mp_la" ); + + maps\mp\_load::main(); + maps\mp\mp_la_amb::main(); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + registerclientfield( "scriptmover", "police_car_lights", 1, 1, "int" ); + registerclientfield( "scriptmover", "ambulance_lights", 1, 1, "int" ); + level thread destructible_lights(); + level.remotemotarviewleft = 45; + level.remotemotarviewright = 45; +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2600", reset_dvars ); +} + +destructible_lights() +{ + wait 0.05; + destructibles = getentarray( "destructible", "targetname" ); + + foreach ( destructible in destructibles ) + { + if ( destructible.destructibledef == "veh_t6_police_car_destructible_mp" ) + { + destructible thread destructible_think( "police_car_lights" ); + destructible setclientfield( "police_car_lights", 1 ); + continue; + } + + if ( destructible.destructibledef == "veh_iw_civ_ambulance_destructible" ) + { + destructible thread destructible_think( "ambulance_lights" ); + destructible setclientfield( "ambulance_lights", 1 ); + } + } +} + +destructible_think( clientfield ) +{ + self waittill_any( "death", "destructible_base_piece_death" ); + self setclientfield( clientfield, 0 ); +} diff --git a/MP/Maps/Aftermath/maps/mp/mp_la_amb.gsc b/MP/Maps/Aftermath/maps/mp/mp_la_amb.gsc new file mode 100644 index 0000000..d43ebe1 --- /dev/null +++ b/MP/Maps/Aftermath/maps/mp/mp_la_amb.gsc @@ -0,0 +1,20 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + array_thread( getentarray( "advertisement", "targetname" ), ::advertisements ); +} + +advertisements() +{ + self playloopsound( "amb_" + self.script_noteworthy + "_ad" ); + + self waittill( "damage" ); + + self stoploopsound(); + self playloopsound( "amb_" + self.script_noteworthy + "_damaged_ad" ); +} diff --git a/MP/Maps/Aftermath/maps/mp/mp_la_fx.gsc b/MP/Maps/Aftermath/maps/mp/mp_la_fx.gsc new file mode 100644 index 0000000..a9e5aad --- /dev/null +++ b/MP/Maps/Aftermath/maps/mp/mp_la_fx.gsc @@ -0,0 +1,97 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_la_fx; +#include maps\mp\createart\mp_la_art; + +precache_util_fx() +{ + +} + +precache_scripted_fx() +{ + level._effect["fx_light_police_car"] = loadfx( "maps/mp_maps/fx_mp_light_police_car" ); +} + +precache_createfx_fx() +{ + level._effect["fx_water_fire_sprinkler"] = loadfx( "water/fx_water_fire_sprinkler" ); + level._effect["fx_water_fire_sprinkler_splash"] = loadfx( "water/fx_water_fire_sprinkler_splash" ); + level._effect["fx_water_fire_sprinkler_sputter"] = loadfx( "water/fx_water_fire_sprinkler_sputter" ); + level._effect["fx_water_fire_sprinkler_gush"] = loadfx( "water/fx_water_fire_sprinkler_gush" ); + level._effect["fx_water_fire_sprinkler_gush_splash"] = loadfx( "water/fx_water_fire_sprinkler_gush_splash" ); + level._effect["fx_water_fountian_pool_md"] = loadfx( "water/fx_water_fountain_pool_md" ); + level._effect["fx_mp_water_splash_mist_fountain"] = loadfx( "maps/mp_maps/fx_mp_water_splash_mist_fountain" ); + level._effect["fx_mp_water_drip_light_long"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); + level._effect["fx_mp_water_drip_light_shrt"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_shrt" ); + level._effect["fx_insects_swarm_md_light"] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_mp_debris_papers"] = loadfx( "maps/mp_maps/fx_mp_debris_papers" ); + level._effect["fx_mp_debris_papers_narrow"] = loadfx( "maps/mp_maps/fx_mp_debris_papers_narrow" ); + level._effect["fx_paper_interior_short"] = loadfx( "debris/fx_paper_interior_short" ); + level._effect["fx_paper_burning_fall_slow"] = loadfx( "debris/fx_paper_burning_fall_slow" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_dust_crumble_lg"] = loadfx( "dirt/fx_dust_crumble_lg_runner" ); + level._effect["fx_mp_fire_md"] = loadfx( "maps/mp_maps/fx_mp_fire_md" ); + level._effect["fx_fire_bldg_ext_dist_falling_debris"] = loadfx( "fire/fx_fire_bldg_ext_dist_falling_debris" ); + level._effect["fx_fire_lg"] = loadfx( "env/fire/fx_fire_lg" ); + level._effect["fx_fire_sm"] = loadfx( "env/fire/fx_fire_sm" ); + level._effect["fx_fire_bldg_int_dist_xlg"] = loadfx( "fire/fx_fire_bldg_int_dist_xlg" ); + level._effect["fx_mp_fire_ash_falling_lg"] = loadfx( "maps/mp_maps/fx_mp_fire_ash_falling_lg" ); + level._effect["fx_mp_fire_ash_falling_door"] = loadfx( "maps/mp_maps/fx_mp_fire_ash_falling_door" ); + level._effect["fx_mp_ash_falling_lg"] = loadfx( "maps/mp_maps/fx_mp_ash_falling_lg" ); + level._effect["fx_mp_smk_haze_linger_xlg"] = loadfx( "maps/mp_maps/fx_mp_smk_haze_linger_xlg" ); + level._effect["fx_mp_smk_plume_detail_blk"] = loadfx( "maps/mp_maps/fx_mp_smk_plume_detail_blk" ); + level._effect["fx_mp_smk_plume_md_blk"] = loadfx( "maps/mp_maps/fx_mp_smk_plume_md_blk" ); + level._effect["fx_mp_smk_plume_lg_blk"] = loadfx( "maps/mp_maps/fx_mp_smk_plume_lg_blk" ); + level._effect["fx_mp_smk_smolder_rubble_area"] = loadfx( "maps/mp_maps/fx_mp_smk_smolder_rubble_area" ); + level._effect["fx_mp_smk_smolder_rubble_line"] = loadfx( "maps/mp_maps/fx_mp_smk_smolder_rubble_line" ); + level._effect["fx_mp_smk_smolder_rubble_line_sm"] = loadfx( "maps/mp_maps/fx_mp_smk_smolder_rubble_line_sm" ); + level._effect["fx_mp_smk_plume_lg_blk_distant"] = loadfx( "maps/mp_maps/fx_mp_smk_plume_lg_blk_distant" ); + level._effect["fx_mp_smk_plume_md_blk_distant"] = loadfx( "maps/mp_maps/fx_mp_smk_plume_md_blk_distant" ); + level._effect["fx_mp_elec_spark_burst_xsm_thin"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin" ); + level._effect["fx_mp_elec_spark_burst_sm_runner"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_sm_runner" ); + level._effect["fx_mp_elec_spark_burst_xsm_thin_runner"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin_runner" ); + level._effect["fx_mp_elec_spark_burst_md_runner"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_md_runner" ); + level._effect["fx_mp_elec_spark_burst_lg_runner"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_lg_runner" ); + level._effect["fx_light_emrgncy_floodlight"] = loadfx( "light/fx_light_emrgncy_floodlight" ); + level._effect["fx_light_recessed_wrm"] = loadfx( "light/fx_light_recessed_wrm" ); + level._effect["fx_light_ambulance_red"] = loadfx( "env/light/fx_light_ambulance_red" ); + level._effect["fx_mp_light_flare_la"] = loadfx( "maps/mp_maps/fx_mp_light_flare_la" ); + level._effect["fx_light_flourescent_glow_cool"] = loadfx( "light/fx_light_flourescent_glow_cool" ); + level._effect["fx_light_gray_white_ribbon_sm"] = loadfx( "light/fx_light_gray_white_ribbon_sm" ); + level._effect["fx_mp_light_police_car"] = loadfx( "maps/mp_maps/fx_mp_light_police_car" ); + level._effect["fx_mp_light_ambulance"] = loadfx( "maps/mp_maps/fx_mp_light_ambulance" ); + level._effect["fx_mp_light_firetruck"] = loadfx( "maps/mp_maps/fx_mp_light_firetruck" ); + level._effect["fx_light_flourescent_ceiling_panel"] = loadfx( "light/fx_light_flourescent_ceiling_panel" ); + level._effect["fx_light_pent_lamp_desk"] = loadfx( "light/fx_light_pent_lamp_desk" ); + level._effect["fx_light_outdoor_wall"] = loadfx( "light/fx_light_outdoor_wall" ); + level._effect["fx_light_recessed_cool"] = loadfx( "light/fx_light_recessed_cool" ); + level._effect["fx_light_garage_parking_green"] = loadfx( "light/fx_light_garage_parking_green" ); + level._effect["fx_light_garage_parking_red"] = loadfx( "light/fx_light_garage_parking_red" ); + level._effect["fx_lf_mp_la_sun1"] = loadfx( "lens_flares/fx_lf_mp_la_sun1" ); + level._effect["fx_dest_fire_hydrant_burst"] = loadfx( "maps/mp_maps/fx_mp_fire_hydrant_burst" ); + level._effect["fx_rain_splash_area_100_hvy_lp"] = loadfx( "weather/fx_rain_splash_area_100_hvy_lp" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["clearance_pipe"] = %fxanim_gp_garage_clearance_pipe_anim; + level.scr_anim["fxanim_props"]["elevator_doors"] = %fxanim_mp_la_elevator_doors_anim; + level.scr_anim["fxanim_props"]["sparking_wires_med"] = %fxanim_gp_wirespark_med_anim; + level.scr_anim["fxanim_props"]["sparking_wires_long"] = %fxanim_gp_wirespark_long_anim; + level.scr_anim["fxanim_props"]["hanging_wires"] = %fxanim_mp_la_hanging_wires_anim; +} + +main() +{ + precache_util_fx(); + precache_createfx_fx(); + precache_scripted_fx(); + precache_fxanim_props(); + maps\mp\createfx\mp_la_fx::main(); + maps\mp\createart\mp_la_art::main(); +} diff --git a/MP/Maps/Cargo/aitype/enemy_dog_mp.gsc b/MP/Maps/Cargo/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Cargo/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Cargo/character/character_mp_german_shepherd.gsc b/MP/Maps/Cargo/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Cargo/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Cargo/maps/mp/animscripts/traverse/ladder_down.gsc b/MP/Maps/Cargo/maps/mp/animscripts/traverse/ladder_down.gsc new file mode 100644 index 0000000..88315db --- /dev/null +++ b/MP/Maps/Cargo/maps/mp/animscripts/traverse/ladder_down.gsc @@ -0,0 +1,8 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; + +main() +{ + assert( 0, "Not supposed to be used in MP" ); +} diff --git a/MP/Maps/Cargo/maps/mp/animscripts/traverse/ladder_up.gsc b/MP/Maps/Cargo/maps/mp/animscripts/traverse/ladder_up.gsc new file mode 100644 index 0000000..88315db --- /dev/null +++ b/MP/Maps/Cargo/maps/mp/animscripts/traverse/ladder_up.gsc @@ -0,0 +1,8 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; + +main() +{ + assert( 0, "Not supposed to be used in MP" ); +} diff --git a/MP/Maps/Cargo/maps/mp/animscripts/traverse/mantle_over_96.gsc b/MP/Maps/Cargo/maps/mp/animscripts/traverse/mantle_over_96.gsc new file mode 100644 index 0000000..88315db --- /dev/null +++ b/MP/Maps/Cargo/maps/mp/animscripts/traverse/mantle_over_96.gsc @@ -0,0 +1,8 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; + +main() +{ + assert( 0, "Not supposed to be used in MP" ); +} diff --git a/MP/Maps/Cargo/maps/mp/createart/mp_dockside_art.gsc b/MP/Maps/Cargo/maps/mp/createart/mp_dockside_art.gsc new file mode 100644 index 0000000..224d449 --- /dev/null +++ b/MP/Maps/Cargo/maps/mp/createart/mp_dockside_art.gsc @@ -0,0 +1,43 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + level.tweakfile = 1; + setdvar( "scr_fog_exp_halfplane", "3759.28" ); + setdvar( "scr_fog_exp_halfheight", "243.735" ); + setdvar( "scr_fog_nearplane", "601.593" ); + setdvar( "scr_fog_red", "0.806694" ); + setdvar( "scr_fog_green", "0.962521" ); + setdvar( "scr_fog_blue", "0.9624" ); + setdvar( "scr_fog_baseheight", "-475.268" ); + setdvar( "visionstore_glowTweakEnable", "0" ); + setdvar( "visionstore_glowTweakRadius0", "5" ); + setdvar( "visionstore_glowTweakRadius1", "" ); + setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); + setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); + setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); + setdvar( "visionstore_glowTweakBloomIntensity1", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); + start_dist = 501.064; + half_dist = 5397.69; + half_height = 765.766; + base_height = 3.88835; + fog_r = 0.721569; + fog_g = 0.803922; + fog_b = 0.929412; + fog_scale = 2.76409; + sun_col_r = 1; + sun_col_g = 1; + sun_col_b = 1; + sun_dir_x = 0.41452; + sun_dir_y = 0.909807; + sun_dir_z = 0.0206221; + sun_start_ang = 0; + sun_stop_ang = 104.831; + time = 0; + max_fog_opacity = 0.91391; + setvolfog( start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale, sun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, sun_stop_ang, time, max_fog_opacity ); + visionsetnaked( "mp_dockside", 0 ); +} diff --git a/MP/Maps/Cargo/maps/mp/createfx/mp_dockside_fx.gsc b/MP/Maps/Cargo/maps/mp/createfx/mp_dockside_fx.gsc new file mode 100644 index 0000000..6fa39d0 --- /dev/null +++ b/MP/Maps/Cargo/maps/mp/createfx/mp_dockside_fx.gsc @@ -0,0 +1,1928 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_xlg" ); + ent.v["origin"] = ( -1196.31, 2393.9, -58 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( -1392.19, 2727.22, -68 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( -317.102, 3210.62, -76 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( -1812.71, 2051.63, -66 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( -1347.49, 1812.61, -67.7311 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( -856.07, 3419.19, -70 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( -1451.53, 3397.2, -67 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( -1403.35, 1248.77, -60 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( -1501.3, 809.035, -61.3792 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( -943.4, 1872.01, -68 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( -502.979, -1358.92, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 10.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( -128.841, -1475.65, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 10.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_xlg" ); + ent.v["origin"] = ( -1113.42, 1495.64, 490.065 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 32.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( -1202.77, 1624.12, 569.508 ); + ent.v["angles"] = ( 21.8842, 353.537, -116.313 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); + ent.v["origin"] = ( -1196.97, 1669.24, 573.787 ); + ent.v["angles"] = ( 22.8361, 350.276, -69.5269 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -1186.17, 1711.59, 570.53 ); + ent.v["angles"] = ( 20.7275, 347.127, 134.356 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( -1165.3, 1795.59, 570.857 ); + ent.v["angles"] = ( 20.6211, 344.991, 42.6715 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -1178.68, 1752.83, 572.612 ); + ent.v["angles"] = ( 22.6177, 344.865, -3.37474 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( -1151.1, 1839.58, 566.652 ); + ent.v["angles"] = ( 22.2412, 339.474, 114.741 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( -1136.24, 1879.54, 568.856 ); + ent.v["angles"] = ( 22.0453, 337.327, 39.002 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); + ent.v["origin"] = ( -1120.03, 1922.3, 570.717 ); + ent.v["angles"] = ( 22.5096, 334.963, 36.0883 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -1095.56, 1959.49, 572.078 ); + ent.v["angles"] = ( 22.5096, 334.963, 21.0883 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -1076.98, 1997.38, 567.94 ); + ent.v["angles"] = ( 22.3351, 329.141, 86.813 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -1055.33, 2034.7, 573.634 ); + ent.v["angles"] = ( 23.9179, 327.423, 18.1561 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( -1032.53, 2069.64, 569.864 ); + ent.v["angles"] = ( 24.226, 326.381, 17.7311 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( -1004.58, 2104.9, 572.731 ); + ent.v["angles"] = ( 24.527, 325.334, 17.2989 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); + ent.v["origin"] = ( -383.448, 2484.96, 568.869 ); + ent.v["angles"] = ( 24.226, 280.381, 17.731 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -425.076, 2471.21, 572.639 ); + ent.v["angles"] = ( 23.9179, 281.423, 18.156 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -466.903, 2460.57, 565.945 ); + ent.v["angles"] = ( 22.3351, 283.141, 86.813 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( -509.838, 2446.41, 568.083 ); + ent.v["angles"] = ( 22.5096, 288.963, 21.0884 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -630.911, 2404.43, 565.657 ); + ent.v["angles"] = ( 22.2411, 293.474, 114.742 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( -592.766, 2421.1, 568.861 ); + ent.v["angles"] = ( 22.8209, 292.01, 39.2624 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); + ent.v["origin"] = ( -550.703, 2439.03, 569.722 ); + ent.v["angles"] = ( 22.5095, 288.963, 36.0883 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -670.502, 2384.66, 569.862 ); + ent.v["angles"] = ( 20.621, 298.991, 42.6714 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( -710.558, 2364.58, 571.617 ); + ent.v["angles"] = ( 22.6177, 298.865, -3.3747 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( -747.834, 2341.21, 569.536 ); + ent.v["angles"] = ( 20.7275, 301.127, 134.356 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -784.594, 2317.79, 572.792 ); + ent.v["angles"] = ( 22.836, 304.276, -69.5267 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); + ent.v["origin"] = ( -819.878, 2292.5, 567.513 ); + ent.v["angles"] = ( 21.8842, 307.537, -116.313 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 401.444, 2292.79, 573.226 ); + ent.v["angles"] = ( 24.2259, 236.381, 17.7311 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); + ent.v["origin"] = ( 366.185, 2319.33, 567.359 ); + ent.v["angles"] = ( 24.226, 236.381, 17.7311 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 330.49, 2342.78, 571.129 ); + ent.v["angles"] = ( 23.9179, 237.423, 70.156 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 290.711, 2366.15, 566.435 ); + ent.v["angles"] = ( 22.3351, 239.141, 86.8129 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( 252.817, 2384.73, 570.573 ); + ent.v["angles"] = ( 22.5096, 244.963, 21.0884 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( 131.137, 2441.19, 565.147 ); + ent.v["angles"] = ( 22.2411, 249.474, 114.742 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( 172.872, 2425.41, 567.351 ); + ent.v["angles"] = ( 22.0452, 247.327, 39.0018 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); + ent.v["origin"] = ( 215.629, 2409.2, 569.212 ); + ent.v["angles"] = ( 22.5095, 244.963, 36.0883 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( 88.922, 2454.47, 569.352 ); + ent.v["angles"] = ( 20.621, 254.991, 42.6713 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 49.0408, 2467.01, 571.107 ); + ent.v["angles"] = ( 22.6177, 254.865, -3.37468 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 4.98394, 2477.33, 569.025 ); + ent.v["angles"] = ( 20.7275, 257.127, 134.356 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( -37.4259, 2486.14, 572.282 ); + ent.v["angles"] = ( 22.836, 260.276, -69.5267 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -82.552, 2491.94, 567.003 ); + ent.v["angles"] = ( 21.8842, 263.537, -116.313 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 778.018, 1627.01, 573.828 ); + ent.v["angles"] = ( 24.5269, 189.334, 17.299 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); + ent.v["origin"] = ( 772.22, 1671.78, 568.961 ); + ent.v["angles"] = ( 24.226, 190.381, 17.7311 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( 764.253, 1713.74, 567.731 ); + ent.v["angles"] = ( 23.9178, 191.423, 18.156 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( 753.902, 1755.63, 568.037 ); + ent.v["angles"] = ( 22.335, 193.141, 86.8128 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 740.948, 1795.79, 571.175 ); + ent.v["angles"] = ( 22.5096, 198.963, 21.0884 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( 697.035, 1922.54, 566.749 ); + ent.v["angles"] = ( 22.2411, 203.475, 114.742 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( 714.673, 1881.56, 568.953 ); + ent.v["angles"] = ( 22.0452, 201.327, 39.0017 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 732.007, 1842.46, 573.814 ); + ent.v["angles"] = ( 22.5095, 198.963, 36.0883 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 677.262, 1962.14, 570.954 ); + ent.v["angles"] = ( 20.621, 208.991, 42.6713 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 655.823, 2002.03, 571.709 ); + ent.v["angles"] = ( 22.6177, 208.865, -3.37461 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( 635.399, 2038.4, 570.628 ); + ent.v["angles"] = ( 20.7274, 211.127, 134.356 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( 612.274, 2075.02, 573.884 ); + ent.v["angles"] = ( 22.836, 214.276, -69.5265 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 585.13, 2107.27, 568.605 ); + ent.v["angles"] = ( 21.8841, 217.537, -116.313 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 587.926, 886.6, 571.956 ); + ent.v["angles"] = ( 24.5268, 145.334, 17.2989 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 615.459, 923.626, 570.09 ); + ent.v["angles"] = ( 24.226, 146.381, 17.7311 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( 638.877, 959.346, 574.859 ); + ent.v["angles"] = ( 23.9178, 147.423, 18.156 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( 661.828, 996.999, 565.166 ); + ent.v["angles"] = ( 22.335, 149.141, 86.8128 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( 680.991, 1035.84, 567.303 ); + ent.v["angles"] = ( 22.5095, 154.963, 21.0884 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); + ent.v["origin"] = ( 735.571, 1156.24, 567.878 ); + ent.v["angles"] = ( 22.2411, 159.475, 114.742 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 721.069, 1117.22, 570.082 ); + ent.v["angles"] = ( 20.7781, 158.989, 39.6085 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 748.85, 1198.45, 568.083 ); + ent.v["angles"] = ( 20.621, 164.991, 42.6713 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( 762.231, 1241.22, 573.838 ); + ent.v["angles"] = ( 22.6176, 164.865, -3.37463 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( 771.711, 1282.39, 571.756 ); + ent.v["angles"] = ( 20.7274, 167.127, 134.356 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 777.815, 1326.23, 572.013 ); + ent.v["angles"] = ( 22.836, 170.276, -69.5266 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( 787.204, 1370.39, 569.734 ); + ent.v["angles"] = ( 21.884, 173.537, -116.313 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -78.6389, 506.104, 573.822 ); + ent.v["angles"] = ( 24.5268, 99.3342, 17.2989 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -32.8782, 512.019, 568.955 ); + ent.v["angles"] = ( 24.2259, 100.381, 17.731 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 9.08425, 519.986, 571.725 ); + ent.v["angles"] = ( 23.9178, 101.423, 18.1559 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 53.954, 530.635, 567.031 ); + ent.v["angles"] = ( 22.335, 103.141, 86.8127 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( 97.6821, 545.773, 568.169 ); + ent.v["angles"] = ( 22.5095, 108.963, 21.0883 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 217.887, 587.204, 568.743 ); + ent.v["angles"] = ( 22.241, 113.474, 114.742 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( 176.018, 569.098, 568.947 ); + ent.v["angles"] = ( 22.0451, 111.327, 39.0015 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( 137.545, 552.907, 571.808 ); + ent.v["angles"] = ( 22.5095, 108.963, 36.0882 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( 257.478, 606.977, 570.948 ); + ent.v["angles"] = ( 20.621, 118.991, 42.6713 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); + ent.v["origin"] = ( 295.805, 628.004, 572.703 ); + ent.v["angles"] = ( 22.6176, 118.865, -3.37466 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 331.949, 651.248, 569.622 ); + ent.v["angles"] = ( 20.7274, 121.127, 134.356 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 371.982, 673.14, 573.878 ); + ent.v["angles"] = ( 22.8359, 124.276, -69.5266 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( 406.854, 699.14, 568.599 ); + ent.v["angles"] = ( 21.884, 127.537, -116.313 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( -819.273, 699.451, 573.722 ); + ent.v["angles"] = ( 24.5268, 55.3342, 17.2988 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( -782.246, 671.917, 568.855 ); + ent.v["angles"] = ( 24.2259, 56.3813, 17.731 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -746.526, 648.499, 573.625 ); + ent.v["angles"] = ( 23.9178, 57.4231, 18.1559 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); + ent.v["origin"] = ( -709.207, 626.849, 567.932 ); + ent.v["angles"] = ( 22.335, 59.1408, 86.8126 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -668.036, 605.971, 569.069 ); + ent.v["angles"] = ( 22.5095, 64.9632, 21.0883 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -549.633, 551.805, 566.644 ); + ent.v["angles"] = ( 22.241, 69.4745, 114.742 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -590.273, 568.17, 566.848 ); + ent.v["angles"] = ( 22.045, 67.3267, 39.0015 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); + ent.v["origin"] = ( -634.126, 583.801, 570.709 ); + ent.v["angles"] = ( 22.5095, 64.9632, 36.0882 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( -508.114, 539.581, 566.849 ); + ent.v["angles"] = ( 20.621, 74.9912, 42.6713 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( -464.456, 525.712, 574.604 ); + ent.v["angles"] = ( 22.6176, 74.865, -3.37468 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -423.479, 515.665, 570.522 ); + ent.v["angles"] = ( 20.7274, 77.1267, 134.356 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -381.07, 506.858, 573.779 ); + ent.v["angles"] = ( 22.836, 80.2762, -69.5266 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -335.944, 501.058, 568.5 ); + ent.v["angles"] = ( 21.884, 83.5368, -116.313 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -1199.14, 1366.08, 570.377 ); + ent.v["angles"] = ( 24.5268, 9.33421, 17.2988 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( -1197.13, 1320.59, 570.51 ); + ent.v["angles"] = ( 23.273, 10.0498, 76.5974 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -1183.46, 1277.11, 571.28 ); + ent.v["angles"] = ( 23.9178, 11.4231, 18.1559 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -1173.41, 1239.21, 568.587 ); + ent.v["angles"] = ( 22.335, 13.1408, 86.8125 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -1160.27, 1198.06, 569.724 ); + ent.v["angles"] = ( 22.5095, 18.9633, 21.0883 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -1116.54, 1072.29, 567.298 ); + ent.v["angles"] = ( 22.241, 23.4745, 114.742 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( -1132.99, 1110.53, 569.502 ); + ent.v["angles"] = ( 22.045, 21.3267, 70.0014 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( -1152.22, 1155.3, 571.363 ); + ent.v["angles"] = ( 22.5095, 18.9631, -118.912 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -1096.77, 1032.7, 571.504 ); + ent.v["angles"] = ( 20.621, 28.9912, 42.6713 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); + ent.v["origin"] = ( -1076.69, 992.648, 573.259 ); + ent.v["angles"] = ( 22.6176, 28.8649, -3.37469 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); + ent.v["origin"] = ( -1054.9, 956.443, 571.177 ); + ent.v["angles"] = ( 20.7274, 31.1267, 134.356 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( -1032.33, 920.65, 574.433 ); + ent.v["angles"] = ( 22.836, 34.2762, -69.5266 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( -1001.13, 883.661, 568.154 ); + ent.v["angles"] = ( 21.884, 37.5368, -120.313 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_xlg" ); + ent.v["origin"] = ( -847.394, 2137.64, 489.622 ); + ent.v["angles"] = ( 33.0554, 317.415, 0.853006 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_xlg" ); + ent.v["origin"] = ( -208.764, 590.058, 489.779 ); + ent.v["angles"] = ( 33, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_xlg" ); + ent.v["origin"] = ( -849.126, 855.53, 489.355 ); + ent.v["angles"] = ( 32, 45, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_xlg" ); + ent.v["origin"] = ( -209.68, 2402.38, 489.14 ); + ent.v["angles"] = ( 31, 272, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_xlg" ); + ent.v["origin"] = ( 435.405, 2136.45, 487.917 ); + ent.v["angles"] = ( 33, 225, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_xlg" ); + ent.v["origin"] = ( 698.671, 1493.53, 488.689 ); + ent.v["angles"] = ( 34, 180, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_xlg" ); + ent.v["origin"] = ( 433.218, 855.982, 487.856 ); + ent.v["angles"] = ( 33, 134, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( 657.203, -268.636, 372.511 ); + ent.v["angles"] = ( 82, 180, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( 720.705, -333.589, 374.931 ); + ent.v["angles"] = ( 82, 270, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( 783.719, -270.39, 372.949 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 81.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( 721.163, -206.596, 374.979 ); + ent.v["angles"] = ( 82, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_xlg" ); + ent.v["origin"] = ( 711.273, -261.805, -34.9065 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_xlg" ); + ent.v["origin"] = ( -1247.72, -275.608, -65 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 920.707, 3153.72, -67.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 354.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 1001.56, 2154.67, -94 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_sm" ); + ent.v["origin"] = ( 518.367, 782.125, 1029.08 ); + ent.v["angles"] = ( 274, 269.002, 89.9984 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_sm" ); + ent.v["origin"] = ( -923.581, 769.005, 1027.52 ); + ent.v["angles"] = ( 272, 269.007, 89.9931 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_sm" ); + ent.v["origin"] = ( -937.245, 2209.03, 1027.9 ); + ent.v["angles"] = ( 274, 269.002, 89.9984 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_sm" ); + ent.v["origin"] = ( 504.156, 2225.33, 1030.66 ); + ent.v["angles"] = ( 274, 269.002, 89.9984 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_red_md" ); + ent.v["origin"] = ( -1053.81, 594.818, 586.314 ); + ent.v["angles"] = ( 34, 45, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_red_md" ); + ent.v["origin"] = ( -1109.4, 651.148, 587.036 ); + ent.v["angles"] = ( 34, 45, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_red_slw_md" ); + ent.v["origin"] = ( -999.924, 656.052, 418.186 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_red_md" ); + ent.v["origin"] = ( -1109.96, 2342.51, 586.228 ); + ent.v["angles"] = ( 35, 315, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_red_md" ); + ent.v["origin"] = ( -1054.25, 2398.07, 586.383 ); + ent.v["angles"] = ( 35, 315, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_red_md" ); + ent.v["origin"] = ( 638.506, 2397.49, 577.727 ); + ent.v["angles"] = ( 38.9929, 222.713, -0.809685 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_red_md" ); + ent.v["origin"] = ( 694.081, 2342.03, 586.592 ); + ent.v["angles"] = ( 38.9929, 222.713, -0.809685 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_red_md" ); + ent.v["origin"] = ( 693.879, 649.554, 586.359 ); + ent.v["angles"] = ( 34, 136, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_red_md" ); + ent.v["origin"] = ( 638.392, 594.139, 586.436 ); + ent.v["angles"] = ( 34, 136, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_red_slw_md" ); + ent.v["origin"] = ( -998.339, 2312.53, 374.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_red_slw_md" ); + ent.v["origin"] = ( 603.147, 2326.46, 387.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_red_slw_md" ); + ent.v["origin"] = ( 627.347, 664.624, 426.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_spotlight_cool_lg" ); + ent.v["origin"] = ( -235.826, 2195.56, 437.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_spotlight_cool_lg" ); + ent.v["origin"] = ( -843.196, 1061.05, 424 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_spotlight_cool_lg" ); + ent.v["origin"] = ( -826.93, 1909.9, 422.877 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_spotlight_cool_lg" ); + ent.v["origin"] = ( 431.613, 1757.29, 413.098 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_spotlight_cool_lg" ); + ent.v["origin"] = ( 30.6163, 865.449, 431.439 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 288.13, 1627.16, -99.0382 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 330.328, 890.242, -67.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( -96.48, 1416.18, -98.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 699.762, 381.274, -68 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 184.843, -133.136, -22 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( -1716.89, -25.0355, -63.9433 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( -422.001, -864.637, -68 ); + ent.v["angles"] = ( 0, 4, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( -342.466, 2490.04, 573.474 ); + ent.v["angles"] = ( 22.616, 278.69, 17.0413 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); + ent.v["origin"] = ( 701.395, 1076.2, 572.538 ); + ent.v["angles"] = ( 22.5095, 154.963, 34.0882 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 135.617, 2769.89, -83.4701 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); + ent.v["origin"] = ( 489.001, 4166.83, 303.96 ); + ent.v["angles"] = ( 270.361, 56.6429, 33.1621 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); + ent.v["origin"] = ( 487.281, 4211.37, 304.973 ); + ent.v["angles"] = ( 270.361, 56.6429, 33.1621 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); + ent.v["origin"] = ( 961.518, 4166.37, 304.975 ); + ent.v["angles"] = ( 270.361, 56.6429, 33.1621 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); + ent.v["origin"] = ( 959.798, 4210.92, 305.988 ); + ent.v["angles"] = ( 270.361, 56.6429, 33.1621 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); + ent.v["origin"] = ( 1440.42, 4162.7, 306.965 ); + ent.v["angles"] = ( 270.361, 56.6429, 33.1621 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); + ent.v["origin"] = ( 1438.7, 4207.24, 307.978 ); + ent.v["angles"] = ( 270.361, 56.6429, 33.1621 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); + ent.v["origin"] = ( 1441.3, 5022.68, 304.971 ); + ent.v["angles"] = ( 270.361, 56.6429, 33.1621 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); + ent.v["origin"] = ( 1439.58, 5067.22, 305.984 ); + ent.v["angles"] = ( 270.361, 56.6429, 33.1621 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); + ent.v["origin"] = ( 963.77, 5029.13, 305.982 ); + ent.v["angles"] = ( 270.361, 56.6429, 33.1621 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); + ent.v["origin"] = ( 962.05, 5073.68, 306.995 ); + ent.v["angles"] = ( 270.361, 56.6429, 33.1621 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); + ent.v["origin"] = ( 484.601, 5026.98, 304.969 ); + ent.v["angles"] = ( 270.361, 56.6429, 33.1621 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); + ent.v["origin"] = ( 482.881, 5071.53, 305.982 ); + ent.v["angles"] = ( 270.361, 56.6429, 33.1621 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); + ent.v["origin"] = ( 965.362, 4181.98, -42.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); + ent.v["origin"] = ( 1445.05, 4196.62, -47.7932 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); + ent.v["origin"] = ( 501.531, 4205.47, -53.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); + ent.v["origin"] = ( 965.173, 5044.51, -51.5937 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); + ent.v["origin"] = ( 1448.05, 5045.2, -43.3537 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); + ent.v["origin"] = ( 497.463, 5054.02, -45.4584 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 1144.89, 4631.49, -75.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 624.269, 4627.73, -75.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); + ent.v["origin"] = ( 327.546, 5241.17, 259.969 ); + ent.v["angles"] = ( 270.361, 146.654, 33.151 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); + ent.v["origin"] = ( 283.004, 5239.46, 259.982 ); + ent.v["angles"] = ( 270.361, 146.654, 33.151 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); + ent.v["origin"] = ( -186.377, 5247.94, 253.971 ); + ent.v["angles"] = ( 270.361, 146.654, 33.151 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); + ent.v["origin"] = ( -230.919, 5246.22, 254.984 ); + ent.v["angles"] = ( 270.361, 146.654, 33.151 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( 712.801, 187.057, 23.6697 ); + ent.v["angles"] = ( 286, 315, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( 799.233, 189.931, 24.2237 ); + ent.v["angles"] = ( 290, 224, -10 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( -1128.95, 188.415, 23.1149 ); + ent.v["angles"] = ( 286.272, 217.765, -10.3437 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( -1214.12, 190.058, 23.5743 ); + ent.v["angles"] = ( 288, 294, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( -1516.21, 575.703, 23.6455 ); + ent.v["angles"] = ( 287.029, 220.627, 3.38233 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( -1515.08, 490.491, 22.3967 ); + ent.v["angles"] = ( 288, 135, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( -1516.63, 2415.88, 23.3788 ); + ent.v["angles"] = ( 285.022, 130.119, 93.8562 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( -1515.43, 2501.1, 24.0062 ); + ent.v["angles"] = ( 284.312, 219.223, -11.8548 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( -1214.05, 2801.86, 23.6049 ); + ent.v["angles"] = ( 288.027, 39.233, -3.07457 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( -1127.82, 2802.74, 24.4448 ); + ent.v["angles"] = ( 291, 136, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( 1098.06, 576.058, 24.0008 ); + ent.v["angles"] = ( 290, 314, -10 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( 1098.99, 490.925, 23.4468 ); + ent.v["angles"] = ( 286, 45, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( 1099.48, 2502.21, 25.2732 ); + ent.v["angles"] = ( 290, 314, -10 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( 1098.76, 2415.95, 24.7192 ); + ent.v["angles"] = ( 286, 45, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( 711.778, 2801.74, 23.7588 ); + ent.v["angles"] = ( 290, 48, -10 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( 796.818, 2804.61, 23.2048 ); + ent.v["angles"] = ( 286, 139, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); + ent.v["origin"] = ( -989.577, 4136.14, 193.02 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); + ent.v["origin"] = ( -1386.97, 4133.27, 192.994 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); + ent.v["origin"] = ( -1783.6, 4132.88, 193.078 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); + ent.v["origin"] = ( -585.927, 4538.58, 193.017 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); + ent.v["origin"] = ( -587.061, 4934.51, 192.821 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); + ent.v["origin"] = ( -589.031, 5330.63, 193.223 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); + ent.v["origin"] = ( 1124.87, 1947.62, 186.875 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); + ent.v["origin"] = ( 1221.75, 1949.18, 187.875 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); + ent.v["origin"] = ( 1316.51, 1809.37, 184.875 ); + ent.v["angles"] = ( 88.5858, 45.0032, 44.9944 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); + ent.v["origin"] = ( 1221.66, 1810.25, 184.875 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); + ent.v["origin"] = ( 1125.41, 1808.29, 183.875 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); + ent.v["origin"] = ( 1005.2, 1946.42, 186.875 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); + ent.v["origin"] = ( 909.21, 1945.53, 187.875 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); + ent.v["origin"] = ( 812.952, 1945.77, 188.875 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); + ent.v["origin"] = ( 718.132, 1946.42, 187.875 ); + ent.v["angles"] = ( 88.5858, 225.005, -135.004 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); + ent.v["origin"] = ( -4971.84, 3250.3, 1781.75 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); + ent.v["origin"] = ( -5413.76, 3271.35, 1783.84 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); + ent.v["origin"] = ( -5021.75, 1975.9, 2036.01 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); + ent.v["origin"] = ( -5453.25, 1977.28, 2037.28 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); + ent.v["origin"] = ( -161.96, 3497.47, -46 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); + ent.v["origin"] = ( -203.248, 3537.53, 301.983 ); + ent.v["angles"] = ( 270.361, 148.656, 33.1491 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); + ent.v["origin"] = ( -158.793, 3540.8, 300.97 ); + ent.v["angles"] = ( 270.361, 148.656, 33.1491 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( 623.1, 1866.99, 187.875 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( 621.453, 1772.64, 186.875 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( 621.137, 1676.61, 187.875 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( 622.111, 1339.74, 186.875 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( 621.906, 1244.42, 186.875 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( 622.025, 1147.75, 186.875 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); + ent.v["origin"] = ( 623.767, 1051.07, 186.875 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 1940.38, 5312.95, -87.1833 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 1812.24, 4740.63, -68.0085 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 1864.09, 4252.85, -64.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); + ent.v["origin"] = ( 2336.02, 4532.84, -67.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); + ent.v["origin"] = ( 2326, 3147.16, -66.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_pipe_md" ); + ent.v["origin"] = ( 391.517, 3346.46, -34.2983 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_pipe_md" ); + ent.v["origin"] = ( 442.87, 3171.7, 102.733 ); + ent.v["angles"] = ( 6, 270.995, -0.105097 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( 875.986, 1190.52, 62.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 193.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 522.242, 3158.98, 101.707 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_wrm_dbl_md" ); + ent.v["origin"] = ( 546.232, 3237.18, 69.3488 ); + ent.v["angles"] = ( 270, 0, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_wrm_dbl_md" ); + ent.v["origin"] = ( 870.223, 1212.2, 20.8481 ); + ent.v["angles"] = ( 270, 0, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 1163.91, -52.8334, -62 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 68.4461, 3960.75, -76 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( -1255.43, 924.871, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 54.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( -1219.57, 471.547, -67 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 291.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( -494.754, 96.894, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 113.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( -113.811, -963.833, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 25.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( 201.508, -590.635, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 196.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( 407.257, 35.9362, -20 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 7.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( 362.036, -134.284, -20.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 237.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( 776.155, 601.597, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 211.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( 1008.73, 618.736, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 114.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( 1000.96, 2584.14, -67.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 244.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( -397.282, 3543.68, -34.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 115.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( -531.878, 3684.01, -35.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 298.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( -1007.22, 3495.58, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 357.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( 779.277, -257.199, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( -1110.31, 672.304, -55.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 280.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( -982.131, 2516.85, -74 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( -886.575, 2884.5, -70.0427 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 52.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( -1334.43, -289.85, 374.343 ); + ent.v["angles"] = ( 82, 180, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( -1270.47, -227.81, 374.811 ); + ent.v["angles"] = ( 82, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( -1207.92, -291.604, 373.781 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 81.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( -1270.93, -354.802, 374.763 ); + ent.v["angles"] = ( 82, 270, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( 895.044, 1857.07, -97.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 294.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( 1071.47, 1817.2, -97.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 164.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( 843.086, 1381.56, -97.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 346.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_pipe_roof_lg" ); + ent.v["origin"] = ( 4501.78, 7413.04, 1927.14 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_pipe_roof_lg" ); + ent.v["origin"] = ( 6260.38, 7570.06, 1913.19 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( -125.078, 780.255, -65 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); + ent.v["origin"] = ( 1315.93, 1948.99, 185.875 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); + ent.v["origin"] = ( -4966.11, 3679.84, 966.278 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); + ent.v["origin"] = ( -5500.58, 3680.94, 968.368 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_dockside_sun1" ); + ent.v["origin"] = ( -11746.2, -36458.7, 12001.6 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_white_static" ); + ent.v["origin"] = ( -925.644, 2223.33, 1000.05 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_white_static" ); + ent.v["origin"] = ( 516.945, 2211.21, 1000.45 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_white_static" ); + ent.v["origin"] = ( -939.476, 779.961, 999.573 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_white_static" ); + ent.v["origin"] = ( 504.803, 768.376, 1000.34 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_green_static" ); + ent.v["origin"] = ( -3395.36, 4909.93, 630.355 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_green_static" ); + ent.v["origin"] = ( -3387.86, 5090.35, 632.565 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_green_static" ); + ent.v["origin"] = ( -3391.27, 5271.22, 632.031 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_green_static" ); + ent.v["origin"] = ( -3396.79, 5452.17, 632.539 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_green_static" ); + ent.v["origin"] = ( -3396.49, 5630.97, 629.682 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_green_static" ); + ent.v["origin"] = ( -3817.4, 5637.1, 632.27 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_green_static" ); + ent.v["origin"] = ( -3820.24, 5455.5, 637.128 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_green_static" ); + ent.v["origin"] = ( -3817.21, 5274.74, 632.62 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_green_static" ); + ent.v["origin"] = ( -3816.92, 5093.35, 635.153 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_green_static" ); + ent.v["origin"] = ( -3819.63, 4912.76, 631.943 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); + ent.v["origin"] = ( -2991.28, 3023.03, 284.902 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); + ent.v["origin"] = ( -4515.23, 3017.3, 277.482 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); + ent.v["origin"] = ( -3751.42, 3024.34, 285.461 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( -1321.73, 430.243, -68 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 136.264, -1311.71, -114.266 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 10.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( -1032.16, -1377.82, -67.3127 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 10.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 1339.95, 148.534, -63.0499 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 10.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 1349.04, -415.785, -99.3848 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 10.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 886.759, 2696.88, -67.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 354.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 483.095, 2668.57, -81.2681 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 354.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 294.378, 1961.82, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 354.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( -398.28, 1756.36, -93.5527 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( -1238.89, 2389.27, 372.212 ); + ent.v["angles"] = ( 82, 180, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( -1174.8, 2327.25, 373.633 ); + ent.v["angles"] = ( 81, 270, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( -1112.56, 2391.5, 372.651 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 81.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( -1174.57, 2456.3, 373.681 ); + ent.v["angles"] = ( 82, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( 991.116, 1525.73, -97.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 195.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); + ent.v["origin"] = ( 665.838, 1975.22, 570.487 ); + ent.v["angles"] = ( 20.621, 208.991, 2.6713 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); + ent.v["origin"] = ( 19.6306, 2470.73, 569.924 ); + ent.v["angles"] = ( 20.7275, 257.127, 179.356 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); + ent.v["origin"] = ( 708.308, 1098.73, 566.596 ); + ent.v["angles"] = ( 22.5095, 154.963, 4.08816 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); + ent.v["origin"] = ( 314.154, 2346.74, 573.259 ); + ent.v["angles"] = ( 20.3603, 247.522, -178.021 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); + ent.v["origin"] = ( -725.299, 2346.83, 567.03 ); + ent.v["angles"] = ( 22.6177, 298.865, -0.374699 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); + ent.v["origin"] = ( -1143.93, 1856.34, 568.304 ); + ent.v["angles"] = ( 22.2771, 340.554, 178.15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); + ent.v["origin"] = ( 42.3137, 524.267, 565.598 ); + ent.v["angles"] = ( 21.3355, 103.107, 1.79994 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); + ent.v["origin"] = ( 356.595, 663.473, 568.415 ); + ent.v["angles"] = ( 20.7274, 121.126, 177.356 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); + ent.v["origin"] = ( -451.7, 533.035, 568.485 ); + ent.v["angles"] = ( 23.6173, 74.8388, -1.38497 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); + ent.v["origin"] = ( -1143.25, 1130.4, 571.421 ); + ent.v["angles"] = ( 22.045, 21.3267, -179.999 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); + ent.v["origin"] = ( -1013.76, 2087.99, 568.857 ); + ent.v["angles"] = ( 24.2705, 324.188, -1.16975 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 1022.23, 761.633, -68 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); + ent.v["origin"] = ( -6680.89, 3677.54, 969.725 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); + ent.v["origin"] = ( -6146.42, 3676.44, 967.635 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); + ent.v["origin"] = ( -6152.15, 3246.9, 1783.11 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); + ent.v["origin"] = ( -6594.07, 3267.95, 1785.2 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); + ent.v["origin"] = ( -6202.06, 1972.5, 2037.37 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); + ent.v["origin"] = ( -6633.56, 1973.88, 2038.64 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); + ent.v["origin"] = ( -210.766, 7415.62, 257.964 ); + ent.v["angles"] = ( 89.639, 33.3501, -146.845 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); + ent.v["origin"] = ( 301.306, 7421.98, 254.979 ); + ent.v["angles"] = ( 89.639, 33.3501, -146.845 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); + ent.v["origin"] = ( -233.549, 5246.54, -85.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); + ent.v["origin"] = ( 283.745, 5245.8, -79.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_light_flourescent_ceiling_panel" ); + ent.v["origin"] = ( 1200.01, 1394.21, 189.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flourescent_ceiling_panel" ); + ent.v["origin"] = ( 861.946, 1345.03, 189.875 ); + ent.v["angles"] = ( 89.9651, 89.9915, 178.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); + ent.v["origin"] = ( -7863.79, 3686.07, 971.216 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14; + ent = maps\mp\_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); + ent.v["origin"] = ( -7329.32, 3684.97, 969.126 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14; + ent = maps\mp\_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); + ent.v["origin"] = ( -7776.97, 3276.48, 1786.69 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14; + ent = maps\mp\_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); + ent.v["origin"] = ( -7335.05, 3255.43, 1784.6 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14; + ent = maps\mp\_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); + ent.v["origin"] = ( -7816.46, 1982.41, 2040.13 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14; + ent = maps\mp\_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); + ent.v["origin"] = ( -7384.96, 1981.03, 2038.86 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 430.003, -1219.77, -141.265 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 10.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); + ent.v["origin"] = ( 3949.61, 1016.28, 276.485 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); + ent.v["origin"] = ( 5553.59, 1179.68, 267.402 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); + ent.v["origin"] = ( 2540.14, 1173.91, 286.472 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); + ent.v["origin"] = ( 2353.73, 1962.99, 286.476 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); + ent.v["origin"] = ( 2356.84, 3151.28, 284.388 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); + ent.v["origin"] = ( 2346.68, 4532.12, 276.47 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_bridge_accent_vista" ); + ent.v["origin"] = ( -12718.5, -1189.61, -26.9752 ); + ent.v["angles"] = ( 305.012, 103.257, 1.4279 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 17.6232, 4607.21, -66 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( 1677.06, -163.032, -142.73 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 10.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( -1158.61, -228.973, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 129.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( -1182.1, -239.807, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 329.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( -440.237, 147.977, 373.718 ); + ent.v["angles"] = ( 82, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( -504.197, 85.937, 373.249 ); + ent.v["angles"] = ( 82, 180, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( -440.695, 20.9839, 373.67 ); + ent.v["angles"] = ( 82, 270, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( -377.681, 84.183, 373.688 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 81.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_xlg" ); + ent.v["origin"] = ( -438.079, 71.8697, -67 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_bridge_accent_vista" ); + ent.v["origin"] = ( -12603, -1881.62, 12.7116 ); + ent.v["angles"] = ( 319.001, 285.138, 178.914 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_bridge_accent_vista" ); + ent.v["origin"] = ( -12610, -8307.93, 29.8517 ); + ent.v["angles"] = ( 319.001, 285.138, 178.914 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_bridge_accent_vista" ); + ent.v["origin"] = ( -12732, -7581.47, -19.8351 ); + ent.v["angles"] = ( 305.012, 103.257, 1.4279 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_bridge_accent_vista" ); + ent.v["origin"] = ( -12595.5, -14704.3, 27.9472 ); + ent.v["angles"] = ( 319.001, 285.138, 178.914 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_bridge_accent_vista" ); + ent.v["origin"] = ( -12717.5, -13977.8, -21.7396 ); + ent.v["angles"] = ( 305.012, 103.257, 1.4279 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_bridge_accent_vista" ); + ent.v["origin"] = ( -12668.3, 4444.37, 37.4362 ); + ent.v["angles"] = ( 319.001, 285.138, 178.914 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); + ent.v["origin"] = ( -214.553, 6293.06, 263.477 ); + ent.v["angles"] = ( 89.639, 33.3501, -146.845 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); + ent.v["origin"] = ( 304.836, 6295.48, 263.465 ); + ent.v["angles"] = ( 89.639, 33.3501, -146.845 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( -17.8422, -663.502, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 339.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( 229.096, -758.193, 373.901 ); + ent.v["angles"] = ( 82, 270, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( 165.594, -693.24, 371.481 ); + ent.v["angles"] = ( 82, 180, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( 292.11, -694.995, 371.919 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 81.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( 229.554, -631.201, 373.949 ); + ent.v["angles"] = ( 81, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_xlg" ); + ent.v["origin"] = ( 231.992, -712.323, -37 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( -285.562, -704.659, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 296.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( -501.458, 62.6035, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 218.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( 994.85, -42.6779, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 322.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( 1227.8, 1194.16, -57.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 194.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( 710.785, 3211.23, -67.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 296.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); + ent.v["origin"] = ( -1930.68, 2829.1, -53.1636 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_bridge_accent_vista" ); + ent.v["origin"] = ( -12704.2, -20397.6, 66.2259 ); + ent.v["angles"] = ( 305.012, 103.257, 1.4279 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( 1030.74, 1025.95, -97.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( 1044.27, 3214.15, 371.673 ); + ent.v["angles"] = ( 82, 270, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( 1044.73, 3341.14, 372.721 ); + ent.v["angles"] = ( 82, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( 1107.29, 3277.35, 369.691 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 81.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["origin"] = ( 980.771, 3279.1, 373.253 ); + ent.v["angles"] = ( 82, 180, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_xlg" ); + ent.v["origin"] = ( 1056.81, 3282.64, -43.1649 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( 805.401, 1035.3, 63.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 82.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); + ent.v["origin"] = ( -1367.26, 1275.32, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 17.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 415.432, 3138.61, 101.427 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 840.362, 1692.12, 32.4214 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1046.82, 1180.38, 33.4896 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; +} diff --git a/MP/Maps/Cargo/maps/mp/mp_dockside.gsc b/MP/Maps/Cargo/maps/mp/mp_dockside.gsc new file mode 100644 index 0000000..b558fb3 --- /dev/null +++ b/MP/Maps/Cargo/maps/mp/mp_dockside.gsc @@ -0,0 +1,170 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_dockside_fx; +#include maps\mp\_load; +#include maps\mp\mp_dockside_amb; +#include maps\mp\_compass; +#include maps\mp\mp_dockside_crane; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_dockside_fx::main(); + maps\mp\_load::main(); + maps\mp\mp_dockside_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_dockside" ); + level.overrideplayerdeathwatchtimer = ::leveloverridetime; + level.useintermissionpointsonwavespawn = ::useintermissionpointsonwavespawn; + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + setdvar( "sm_sunsamplesizenear", 0.39 ); + setdvar( "sm_sunshadowsmall", 1 ); + + if ( getgametypesetting( "allowMapScripting" ) ) + level maps\mp\mp_dockside_crane::init(); + else + { + crate_triggers = getentarray( "crate_kill_trigger", "targetname" ); + + for ( i = 0; i < crate_triggers.size; i++ ) + crate_triggers[i] delete(); + } + + setheliheightpatchenabled( "war_mode_heli_height_lock", 0 ); + level thread water_trigger_init(); + rts_remove(); +/# + level thread devgui_dockside(); + execdevgui( "devgui_mp_dockside" ); +#/ +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2700", reset_dvars ); +} + +water_trigger_init() +{ + wait 3; + triggers = getentarray( "trigger_hurt", "classname" ); + + foreach ( trigger in triggers ) + { + if ( trigger.origin[2] > level.mapcenter[2] ) + continue; + + trigger thread water_trigger_think(); + } +} + +water_trigger_think() +{ + for (;;) + { + self waittill( "trigger", entity ); + + if ( isplayer( entity ) ) + { + entity playsound( "mpl_splash_death" ); + playfx( level._effect["water_splash"], entity.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + } + } +} + +leveloverridetime( defaulttime ) +{ + if ( self isinwater() ) + return 0.4; + + return defaulttime; +} + +useintermissionpointsonwavespawn() +{ + return self isinwater(); +} + +isinwater() +{ + triggers = getentarray( "trigger_hurt", "classname" ); + + foreach ( trigger in triggers ) + { + if ( trigger.origin[2] > level.mapcenter[2] ) + continue; + + if ( self istouching( trigger ) ) + return true; + } + + return false; +} + +rts_remove() +{ + removes = getentarray( "rts_only", "targetname" ); + + foreach ( remove in removes ) + { + if ( isdefined( remove ) ) + remove delete(); + } +} + +devgui_dockside() +{ +/# + setdvar( "devgui_notify", "" ); + + for (;;) + { + wait 0.5; + devgui_string = getdvar( "devgui_notify" ); + + switch ( devgui_string ) + { + case "": + break; + case "crane_print_dvars": + crane_print_dvars(); + break; + default: + break; + } + + if ( getdvar( "devgui_notify" ) != "" ) + setdvar( "devgui_notify", "" ); + } +#/ +} + +crane_print_dvars() +{ +/# + dvars = []; + dvars[dvars.size] = "scr_crane_claw_move_time"; + dvars[dvars.size] = "scr_crane_crate_lower_time"; + dvars[dvars.size] = "scr_crane_crate_raise_time"; + dvars[dvars.size] = "scr_crane_arm_y_move_time"; + dvars[dvars.size] = "scr_crane_arm_z_move_time"; + dvars[dvars.size] = "scr_crane_claw_drop_speed"; + dvars[dvars.size] = "scr_crane_claw_drop_time_min"; + + foreach ( dvar in dvars ) + { + print( dvar + ": " ); + println( getdvar( dvar ) ); + } +#/ +} diff --git a/MP/Maps/Cargo/maps/mp/mp_dockside_amb.gsc b/MP/Maps/Cargo/maps/mp/mp_dockside_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Cargo/maps/mp/mp_dockside_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Cargo/maps/mp/mp_dockside_crane.gsc b/MP/Maps/Cargo/maps/mp/mp_dockside_crane.gsc new file mode 100644 index 0000000..2f833d3 --- /dev/null +++ b/MP/Maps/Cargo/maps/mp/mp_dockside_crane.gsc @@ -0,0 +1,724 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\_tacticalinsertion; +#include maps\mp\killstreaks\_rcbomb; +#include maps\mp\gametypes\_weaponobjects; +#include maps\mp\gametypes\ctf; +#include maps\mp\gametypes\_gameobjects; +#include maps\mp\killstreaks\_supplydrop; + +init() +{ + precachemodel( "p6_dockside_container_lrg_white" ); + crane_dvar_init(); + level.crate_models = []; + level.crate_models[0] = "p6_dockside_container_lrg_red"; + level.crate_models[1] = "p6_dockside_container_lrg_blue"; + level.crate_models[2] = "p6_dockside_container_lrg_white"; + level.crate_models[3] = "p6_dockside_container_lrg_orange"; + claw = getent( "claw_base", "targetname" ); + claw.z_upper = claw.origin[2]; + claw thread sound_wires_move(); + arms_y = getentarray( "claw_arm_y", "targetname" ); + arms_z = getentarray( "claw_arm_z", "targetname" ); + claw.arms = arraycombine( arms_y, arms_z, 1, 0 ); + + foreach ( arm_z in arms_z ) + { + arm_y = getclosest( arm_z.origin, arms_y ); + arm_z.parent = arm_y; + } + + foreach ( arm_y in arms_y ) + arm_y.parent = claw; + + claw claw_link_arms( "claw_arm_y" ); + claw claw_link_arms( "claw_arm_z" ); + crates = getentarray( "crate", "targetname" ); + array_thread( crates, ::sound_pit_move ); + crate_data = []; + + for ( i = 0; i < crates.size; i++ ) + { + crates[i] disconnectpaths(); + data = spawnstruct(); + data.origin = crates[i].origin; + data.angles = crates[i].angles; + crate_data[i] = data; + } + + rail = getent( "crane_rail", "targetname" ); + rail thread sound_ring_move(); + rail.roller = getent( "crane_roller", "targetname" ); + rail.roller.wheel = getent( "crane_wheel", "targetname" ); + claw.wires = getentarray( "crane_wire", "targetname" ); + claw.z_wire_max = rail.roller.wheel.origin[2] - 50; + + foreach ( wire in claw.wires ) + { + wire linkto( claw ); + + if ( wire.origin[2] > claw.z_wire_max ) + wire ghost(); + } + + placements = getentarray( "crate_placement", "targetname" ); + + foreach ( placement in placements ) + { + placement.angles += vectorscale( ( 0, 1, 0 ), 90.0 ); + crates[crates.size] = spawn( "script_model", placement.origin ); + } + + triggers = getentarray( "crate_kill_trigger", "targetname" ); + + foreach ( crate in crates ) + { + crate.kill_trigger = getclosest( crate.origin, triggers ); + crate.kill_trigger.origin = crate.origin - vectorscale( ( 0, 0, 1 ), 5.0 ); + crate.kill_trigger enablelinkto(); + crate.kill_trigger linkto( crate ); + + if ( crate.model != "" ) + { + crate.kill_trigger.active = 1; + continue; + } + + crate.kill_trigger.active = 0; + } + + trigger = getclosest( claw.origin, triggers ); + trigger enablelinkto(); + trigger linkto( claw ); + trigger.active = 1; + placements = array_randomize( placements ); + level thread crane_think( claw, rail, crates, crate_data, placements ); +} + +crane_dvar_init() +{ + set_dvar_float_if_unset( "scr_crane_claw_move_time", "5" ); + set_dvar_float_if_unset( "scr_crane_crate_lower_time", "5" ); + set_dvar_float_if_unset( "scr_crane_crate_raise_time", "5" ); + set_dvar_float_if_unset( "scr_crane_arm_y_move_time", "3" ); + set_dvar_float_if_unset( "scr_crane_arm_z_move_time", "3" ); + set_dvar_float_if_unset( "scr_crane_claw_drop_speed", "25" ); + set_dvar_float_if_unset( "scr_crane_claw_drop_time_min", "5" ); +} + +wire_render() +{ + self endon( "movedone" ); + + for (;;) + { + wait 0.05; + + foreach ( wire in self.wires ) + { + if ( wire.origin[2] > self.z_wire_max ) + { + wire ghost(); + continue; + } + + wire show(); + } + } +} + +crane_think( claw, rail, crates, crate_data, placements ) +{ + wait 1; + claw arms_open(); + + for (;;) + { + for ( i = 0; i < crates.size - placements.size; i++ ) + { + crate = getclosest( crate_data[i].origin, crates ); + rail crane_move( claw, crate_data[i], -318 ); + level notify( "wires_move" ); + claw claw_crate_grab( crate, 318 ); + lower = 1; + target = ( i + 1 ) % ( crates.size - placements.size ); + target_crate = getclosest( crate_data[target].origin, crates ); + + if ( cointoss() ) + { + for ( placement_index = 0; placement_index < placements.size; placement_index++ ) + { + placement = placements[placement_index]; + + if ( !isdefined( placement.crate ) ) + { + lower = 0; + break; + } + } + } + + if ( !lower ) + { + z_dist = crate.origin[2] - placement.origin[2] - 33; + rail crane_move( claw, placement, z_dist * -1 ); + level notify( "wires_move" ); + placement.crate = crate; + } + else + { + rail crane_move( claw, crate_data[target], -181 ); + level notify( "wires_move" ); + } + + claw claw_crate_move( crate ); + + if ( lower ) + crate crate_lower( target_crate, crate_data[target] ); + + crate = target_crate; + target = ( i + 2 ) % ( crates.size - placements.size ); + target_crate = getclosest( crate_data[target].origin, crates ); + + if ( !lower ) + { + crate = crates[3 + placement_index]; + crate.origin = target_crate.origin - vectorscale( ( 0, 0, 1 ), 137.0 ); + crate.angles = target_crate.angles; + wait 0.25; + + claw waittill( "movedone" ); + } + + crate crate_raise( target_crate, crate_data[target] ); + rail crane_move( claw, crate_data[target], -181 ); + level notify( "wires_move" ); + claw claw_crate_grab( target_crate, 181 ); + crate = target_crate; + target = ( i + 3 ) % ( crates.size - placements.size ); + rail crane_move( claw, crate_data[target], -318 ); + level notify( "wires_move" ); + claw claw_crate_drop( crate, crate_data[target] ); + } + } +} + +crane_move( claw, desired, z_dist ) +{ + self.roller linkto( self ); + self.roller.wheel linkto( self.roller ); + claw linkto( self.roller.wheel ); + goal = ( desired.origin[0], desired.origin[1], self.origin[2] ); + dir = vectornormalize( goal - self.origin ); + angles = vectortoangles( dir ); + angles = ( self.angles[0], angles[1] + 90, self.angles[2] ); + yawdiff = absangleclamp360( self.angles[1] - angles[1] ); + time = yawdiff / 25; + self rotateto( angles, time, time * 0.35, time * 0.45 ); + self thread physics_move(); + level notify( "wires_stop" ); + level notify( "ring_move" ); + + self waittill( "rotatedone" ); + + self.roller unlink(); + goal = ( desired.origin[0], desired.origin[1], self.roller.origin[2] ); + diff = distance2d( goal, self.roller.origin ); + speed = getdvarfloat( "scr_crane_claw_drop_speed" ); + time = diff / speed; + + if ( time < getdvarfloat( "scr_crane_claw_drop_time_min" ) ) + time = getdvarfloat( "scr_crane_claw_drop_time_min" ); + + self.roller moveto( goal, time, time * 0.25, time * 0.25 ); + self.roller thread physics_move(); + goal = ( desired.origin[0], desired.origin[1], self.roller.wheel.origin[2] ); + self.roller.wheel unlink(); + self.roller.wheel moveto( goal, time, time * 0.25, time * 0.25 ); + self.roller.wheel rotateto( desired.angles + vectorscale( ( 0, 1, 0 ), 90.0 ), time, time * 0.25, time * 0.25 ); + claw.z_initial = claw.origin[2]; + claw unlink(); + claw rotateto( desired.angles, time, time * 0.25, time * 0.25 ); + claw.goal = ( goal[0], goal[1], claw.origin[2] + z_dist ); + claw.time = time; + claw moveto( claw.goal, time, time * 0.25, time * 0.25 ); + level notify( "ring_stop" ); +} + +physics_move() +{ + self endon( "rotatedone" ); + self endon( "movedone" ); + + for (;;) + { + wait 0.05; + crates = getentarray( "care_package", "script_noteworthy" ); + + foreach ( crate in crates ) + { + if ( crate istouching( self ) ) + crate physicslaunch( crate.origin, ( 0, 0, 0 ) ); + } + } +} + +claw_crate_grab( crate, z_dist ) +{ + self thread wire_render(); + + self waittill( "movedone" ); + + level notify( "wires_stop" ); + self playsound( "amb_crane_arms_b" ); + self claw_z_arms( -33 ); + self playsound( "amb_crane_arms" ); + self arms_close( crate ); + crate movez( 33, getdvarfloat( "scr_crane_arm_z_move_time" ) ); + self claw_z_arms( 33 ); + crate linkto( self ); + self movez( z_dist, getdvarfloat( "scr_crane_claw_move_time" ) ); + self thread wire_render(); + level notify( "wires_move" ); + + self waittill( "movedone" ); + + self playsound( "amb_crane_arms" ); +} + +sound_wires_move() +{ + while ( true ) + { + level waittill( "wires_move" ); + + self playsound( "amb_crane_wire_start" ); + self playloopsound( "amb_crane_wire_lp" ); + + level waittill( "wires_stop" ); + + self playsound( "amb_crane_wire_end" ); + wait 0.1; + self stoploopsound( 0.2 ); + } +} + +sound_ring_move() +{ + while ( true ) + { + level waittill( "ring_move" ); + + self playsound( "amb_crane_ring_start" ); + self playloopsound( "amb_crane_ring_lp" ); + + level waittill( "ring_stop" ); + + self playsound( "amb_crane_ring_end" ); + wait 0.1; + self stoploopsound( 0.2 ); + } +} + +sound_pit_move() +{ + while ( true ) + { + level waittill( "pit_move" ); + + self playsound( "amb_crane_pit_start" ); + self playloopsound( "amb_crane_pit_lp" ); + + level waittill( "pit_stop" ); + + self playsound( "amb_crane_pit_end" ); + self stoploopsound( 0.2 ); + wait 0.2; + } +} + +claw_crate_move( crate, claw ) +{ + self thread wire_render(); + + self waittill( "movedone" ); + + crate unlink(); + self playsound( "amb_crane_arms_b" ); + level notify( "wires_stop" ); + crate movez( -33, getdvarfloat( "scr_crane_arm_z_move_time" ) ); + self claw_z_arms( -33 ); + self playsound( "amb_crane_arms_b" ); + playfxontag( level._effect["crane_dust"], crate, "tag_origin" ); + crate playsound( "amb_crate_drop" ); + self arms_open(); + level notify( "wires_move" ); + self claw_z_arms( 33 ); + z_dist = self.z_initial - self.origin[2]; + self movez( z_dist, getdvarfloat( "scr_crane_claw_move_time" ) ); + self thread wire_render(); +} + +claw_crate_drop( target, data ) +{ + target thread crate_drop_think( self ); + self thread wire_render(); + + self waittill( "claw_movedone" ); + + target unlink(); + level notify( "wires_stop" ); + self playsound( "amb_crane_arms_b" ); + target movez( -33, getdvarfloat( "scr_crane_arm_z_move_time" ) ); + self claw_z_arms( -33 ); + playfxontag( level._effect["crane_dust"], target, "tag_origin" ); + self playsound( "amb_crate_drop" ); + target notify( "claw_done" ); + self playsound( "amb_crane_arms" ); + self arms_open(); + level notify( "wires_move" ); + target.origin = data.origin; + self claw_z_arms( 33 ); + self playsound( "amb_crane_arms" ); + self movez( 318, getdvarfloat( "scr_crane_claw_move_time" ) ); + self thread wire_render(); + + self waittill( "movedone" ); +} + +crate_lower( lower, data ) +{ + z_dist = abs( self.origin[2] - lower.origin[2] ); + self movez( z_dist * -1, getdvarfloat( "scr_crane_crate_lower_time" ) ); + lower movez( z_dist * -1, getdvarfloat( "scr_crane_crate_lower_time" ) ); + level notify( "pit_move" ); + + lower waittill( "movedone" ); + + level notify( "pit_stop" ); + lower ghost(); + self.origin = data.origin; + wait 0.25; +} + +crate_raise( upper, data ) +{ + self crate_set_random_model( upper ); + self.kill_trigger.active = 1; + self.origin = ( data.origin[0], data.origin[1], self.origin[2] ); + self.angles = data.angles; + wait 0.2; + self show(); + z_dist = abs( upper.origin[2] - self.origin[2] ); + self movez( z_dist, getdvarfloat( "scr_crane_crate_raise_time" ) ); + upper movez( z_dist, getdvarfloat( "scr_crane_crate_raise_time" ) ); + level notify( "wires_stop" ); + level notify( "pit_move" ); + upper thread raise_think(); +} + +raise_think() +{ + self waittill( "movedone" ); + + level notify( "pit_stop" ); +} + +crate_set_random_model( other ) +{ + models = array_randomize( level.crate_models ); + + foreach ( model in models ) + { + if ( model == other.model ) + continue; + + self setmodel( model ); + return; + } +} + +arms_open() +{ + self claw_move_arms( -15 ); + self playsound( "amb_crane_arms" ); +} + +arms_close( crate ) +{ + self claw_move_arms( 15, crate ); + self playsound( "amb_crane_arms" ); +} + +claw_link_arms( name ) +{ + foreach ( arm in self.arms ) + { + if ( arm.targetname == name ) + arm linkto( arm.parent ); + } +} + +claw_unlink_arms( name ) +{ + foreach ( arm in self.arms ) + { + if ( arm.targetname == name ) + arm unlink(); + } +} + +claw_move_arms( dist, crate ) +{ + claw_unlink_arms( "claw_arm_y" ); + arms = []; + + foreach ( arm in self.arms ) + { + if ( arm.targetname == "claw_arm_y" ) + { + arms[arms.size] = arm; + forward = anglestoforward( arm.angles ); + arm.goal = arm.origin + vectorscale( forward, dist ); + arm moveto( arm.goal, getdvarfloat( "scr_crane_arm_y_move_time" ) ); + } + } + + if ( dist > 0 ) + { + wait( getdvarfloat( "scr_crane_arm_y_move_time" ) / 2 ); + + foreach ( arm in self.arms ) + { + if ( arm.targetname == "claw_arm_y" ) + { + arm moveto( arm.goal, 0.1 ); + self playsound( "amb_crane_arms_b" ); + } + } + + wait 0.05; + playfxontag( level._effect["crane_spark"], crate, "tag_origin" ); + self playsound( "amb_arms_latch" ); + } + + assert( arms.size == 4 ); + waittill_multiple_ents( arms[0], "movedone", arms[1], "movedone", arms[2], "movedone", arms[3], "movedone" ); + self claw_link_arms( "claw_arm_y" ); +} + +claw_z_arms( z ) +{ + claw_unlink_arms( "claw_arm_z" ); + arms = []; + + foreach ( arm in self.arms ) + { + if ( arm.targetname == "claw_arm_z" ) + { + arms[arms.size] = arm; + arm movez( z, getdvarfloat( "scr_crane_arm_z_move_time" ) ); + } + } + + assert( arms.size == 4 ); + waittill_multiple_ents( arms[0], "movedone", arms[1], "movedone", arms[2], "movedone", arms[3], "movedone" ); + self claw_link_arms( "claw_arm_z" ); +} + +crate_drop_think( claw ) +{ + self endon( "claw_done" ); + claw thread claw_drop_think(); + corpse_delay = 0; + + for (;;) + { + wait 0.2; + entities = getdamageableentarray( self.origin, 200 ); + + foreach ( entity in entities ) + { + if ( !entity istouching( self.kill_trigger ) ) + continue; + + if ( isdefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" ) + { + entity maps\mp\_tacticalinsertion::destroy_tactical_insertion(); + continue; + } + + if ( !isalive( entity ) ) + continue; + + if ( isdefined( entity.targetname ) ) + { + if ( entity.targetname == "talon" ) + { + entity notify( "death" ); + continue; + } + else if ( entity.targetname == "rcbomb" ) + { + entity maps\mp\killstreaks\_rcbomb::rcbomb_force_explode(); + continue; + } + else if ( entity.targetname == "riotshield_mp" ) + { + entity dodamage( 1, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); + continue; + } + } + + if ( isdefined( entity.helitype ) && entity.helitype == "qrdrone" ) + { + watcher = entity.owner maps\mp\gametypes\_weaponobjects::getweaponobjectwatcher( "qrdrone" ); + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined ); + continue; + } + + if ( entity.classname == "grenade" ) + { + if ( !isdefined( entity.name ) ) + continue; + + if ( !isdefined( entity.owner ) ) + continue; + + if ( entity.name == "proximity_grenade_mp" ) + { + watcher = entity.owner getwatcherforweapon( entity.name ); + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined, "script_mover_mp" ); + continue; + } + + if ( !isweaponequipment( entity.name ) ) + continue; + + watcher = entity.owner getwatcherforweapon( entity.name ); + + if ( !isdefined( watcher ) ) + continue; + + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined, "script_mover_mp" ); + continue; + } + + if ( entity.classname == "auto_turret" ) + { + if ( !isdefined( entity.damagedtodeath ) || !entity.damagedtodeath ) + entity domaxdamage( self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); + + continue; + } + + entity dodamage( entity.health * 2, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); + + if ( isplayer( entity ) ) + { + claw thread claw_drop_pause(); + corpse_delay = gettime() + 3000; + } + } + + self destroy_supply_crates(); + + if ( gettime() > corpse_delay ) + self destroy_corpses(); + + if ( level.gametype == "ctf" ) + { + foreach ( flag in level.flags ) + { + if ( flag.visuals[0] istouching( self.kill_trigger ) ) + flag maps\mp\gametypes\ctf::returnflag(); + } + + continue; + } + + if ( level.gametype == "sd" && !level.multibomb ) + { + if ( level.sdbomb.visuals[0] istouching( self.kill_trigger ) ) + level.sdbomb maps\mp\gametypes\_gameobjects::returnhome(); + } + } +} + +claw_drop_think() +{ + self endon( "claw_pause" ); + + self waittill( "movedone" ); + + self notify( "claw_movedone" ); +} + +claw_drop_pause() +{ + self notify( "claw_pause" ); + self endon( "claw_pause" ); + z_diff = abs( self.goal[2] - self.origin[2] ); + frac = z_diff / 318; + time = self.time * frac; + + if ( time <= 0 ) + return; + + self moveto( self.origin, 0.01 ); + wait 3; + self thread claw_drop_think(); + self moveto( self.goal, time ); +} + +destroy_supply_crates() +{ + crates = getentarray( "care_package", "script_noteworthy" ); + + foreach ( crate in crates ) + { + if ( distancesquared( crate.origin, self.origin ) < 40000 ) + { + if ( crate istouching( self ) ) + { + playfx( level._supply_drop_explosion_fx, crate.origin ); + playsoundatposition( "wpn_grenade_explode", crate.origin ); + wait 0.1; + crate maps\mp\killstreaks\_supplydrop::cratedelete(); + } + } + } +} + +destroy_corpses() +{ + corpses = getcorpsearray(); + + for ( i = 0; i < corpses.size; i++ ) + { + if ( distancesquared( corpses[i].origin, self.origin ) < 40000 ) + corpses[i] delete(); + } +} + +getwatcherforweapon( weapname ) +{ + if ( !isdefined( self ) ) + return undefined; + + if ( !isplayer( self ) ) + return undefined; + + for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) + { + if ( self.weaponobjectwatcherarray[i].weapon != weapname ) + continue; + + return self.weaponobjectwatcherarray[i]; + } + + return undefined; +} diff --git a/MP/Maps/Cargo/maps/mp/mp_dockside_fx.gsc b/MP/Maps/Cargo/maps/mp/mp_dockside_fx.gsc new file mode 100644 index 0000000..edcab4e --- /dev/null +++ b/MP/Maps/Cargo/maps/mp/mp_dockside_fx.gsc @@ -0,0 +1,75 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_dockside_fx; +#include maps\mp\createart\mp_dockside_art; + +precache_util_fx() +{ + +} + +precache_scripted_fx() +{ + level._effect["crane_spark"] = loadfx( "maps/mp_maps/fx_mp_container_lrg_spark_runner" ); + level._effect["crane_dust"] = loadfx( "maps/mp_maps/fx_mp_container_lrg_dust_kickup" ); + level._effect["water_splash"] = loadfx( "bio/player/fx_player_water_splash_mp" ); +} + +precache_createfx_fx() +{ + level._effect["fx_light_flour_dbl_oval_street_wrm"] = loadfx( "light/fx_light_flour_dbl_oval_street_wrm" ); + level._effect["fx_light_floodlight_sqr_wrm"] = loadfx( "light/fx_light_floodlight_sqr_wrm" ); + level._effect["fx_light_floodlight_sqr_cool_xlg"] = loadfx( "light/fx_light_floodlight_sqr_cool_xlg" ); + level._effect["fx_light_floodlight_rnd_cool_glw_add"] = loadfx( "light/fx_light_floodlight_rnd_cool_glw_add" ); + level._effect["fx_light_floodlight_rnd_cool_glw"] = loadfx( "light/fx_light_floodlight_rnd_cool_glw" ); + level._effect["fx_light_floodlight_rnd_cool_glw_dim"] = loadfx( "light/fx_light_floodlight_rnd_cool_glw_dim" ); + level._effect["fx_light_floodlight_rnd_cool_glw_lg"] = loadfx( "light/fx_light_floodlight_rnd_cool_glw_lg" ); + level._effect["fx_light_floodlight_rnd_red_md"] = loadfx( "light/fx_light_floodlight_rnd_red_md" ); + level._effect["fx_la2_light_beacon_red_blink"] = loadfx( "light/fx_light_beacon_red_blink_fst" ); + level._effect["fx_light_beacon_red_blink_sm"] = loadfx( "light/fx_light_beacon_red_blink_fst_sm" ); + level._effect["fx_light_spotlight_sm_cool"] = loadfx( "light/fx_light_spotlight_sm_cool" ); + level._effect["fx_light_spotlight_sm_yellow"] = loadfx( "light/fx_light_spotlight_sm_yellow" ); + level._effect["fx_light_flour_glow_wrm_dbl_md"] = loadfx( "light/fx_light_flour_glow_wrm_dbl_md" ); + level._effect["fx_light_floodlight_sqr_wrm_vista_lg"] = loadfx( "light/fx_light_floodlight_sqr_wrm_vista_lg" ); + level._effect["fx_light_beacon_white_static"] = loadfx( "light/fx_light_beacon_white_static" ); + level._effect["fx_light_beacon_green_static"] = loadfx( "light/fx_light_beacon_green_static" ); + level._effect["fx_light_buoy_red_blink"] = loadfx( "light/fx_light_buoy_red_blink" ); + level._effect["fx_light_flourescent_ceiling_panel"] = loadfx( "light/fx_light_flourescent_ceiling_panel" ); + level._effect["fx_light_bridge_accent_vista"] = loadfx( "light/fx_light_bridge_accent_vista" ); + level._effect["fx_light_container_yellow"] = loadfx( "light/fx_light_container_yellow" ); + level._effect["fx_fog_lit_spotlight_cool_lg"] = loadfx( "fog/fx_fog_lit_spotlight_cool_lg" ); + level._effect["fx_fog_lit_overhead_wrm_lg"] = loadfx( "fog/fx_fog_lit_overhead_wrm_lg" ); + level._effect["fx_fog_lit_overhead_wrm_xlg"] = loadfx( "fog/fx_fog_lit_overhead_wrm_xlg" ); + level._effect["fx_fog_street_cool_slw_sm_md"] = loadfx( "fog/fx_fog_street_cool_slw_md" ); + level._effect["fx_fog_street_red_slw_md"] = loadfx( "fog/fx_fog_street_red_slw_md" ); + level._effect["fx_fog_street_red_slw_md"] = loadfx( "fog/fx_fog_street_red_slw_md" ); + level._effect["fx_paper_interior_short_slw_flat"] = loadfx( "debris/fx_paper_interior_short_slw_flat" ); + level._effect["fx_mp_steam_pipe_md"] = loadfx( "maps/mp_maps/fx_mp_steam_pipe_md" ); + level._effect["fx_mp_steam_pipe_roof_lg"] = loadfx( "maps/mp_maps/fx_mp_steam_pipe_roof_lg" ); + level._effect["fx_mp_water_drip_light_long"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); + level._effect["fx_mp_water_drip_light_shrt"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_shrt" ); + level._effect["fx_lf_dockside_sun1"] = loadfx( "lens_flares/fx_lf_dockside_sun1" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["buoy_fast"] = %fxanim_gp_buoy_fast_anim; + level.scr_anim["fxanim_props"]["seagull_circle_01"] = %fxanim_gp_seagull_circle_01_anim; + level.scr_anim["fxanim_props"]["seagull_circle_02"] = %fxanim_gp_seagull_circle_02_anim; + level.scr_anim["fxanim_props"]["seagull_circle_03"] = %fxanim_gp_seagull_circle_03_anim; + level.scr_anim["fxanim_props"]["roofvent_rotate"] = %fxanim_gp_roofvent_anim; + level.scr_anim["fxanim_props"]["wire_coil_large"] = %fxanim_gp_wire_coil_lrg_anim; + level.scr_anim["fxanim_props"]["crane_wires"] = %fxanim_mp_dockside_crane_wires_anim; +} + +main() +{ + precache_util_fx(); + precache_createfx_fx(); + precache_scripted_fx(); + maps\mp\createfx\mp_dockside_fx::main(); + maps\mp\createart\mp_dockside_art::main(); +} diff --git a/MP/Maps/Carrier/aitype/enemy_dog_mp.gsc b/MP/Maps/Carrier/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Carrier/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Carrier/character/character_mp_german_shepherd.gsc b/MP/Maps/Carrier/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Carrier/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Carrier/maps/mp/createart/mp_carrier_art.gsc b/MP/Maps/Carrier/maps/mp/createart/mp_carrier_art.gsc new file mode 100644 index 0000000..34a3066 --- /dev/null +++ b/MP/Maps/Carrier/maps/mp/createart/mp_carrier_art.gsc @@ -0,0 +1,27 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + level.tweakfile = 1; + setdvar( "scr_fog_exp_halfplane", "3759.28" ); + setdvar( "scr_fog_exp_halfheight", "243.735" ); + setdvar( "scr_fog_nearplane", "601.593" ); + setdvar( "scr_fog_red", "0.806694" ); + setdvar( "scr_fog_green", "0.962521" ); + setdvar( "scr_fog_blue", "0.9624" ); + setdvar( "scr_fog_baseheight", "-475.268" ); + setdvar( "visionstore_glowTweakEnable", "0" ); + setdvar( "visionstore_glowTweakRadius0", "5" ); + setdvar( "visionstore_glowTweakRadius1", "" ); + setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); + setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); + setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); + setdvar( "visionstore_glowTweakBloomIntensity1", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); + visionsetnaked( "mp_carrier", 1 ); + setdvar( "r_lightGridEnableTweaks", 1 ); + setdvar( "r_lightGridIntensity", 1.0 ); + setdvar( "r_lightGridContrast", 0 ); +} diff --git a/MP/Maps/Carrier/maps/mp/createfx/mp_carrier_fx.gsc b/MP/Maps/Carrier/maps/mp/createfx/mp_carrier_fx.gsc new file mode 100644 index 0000000..54ec023 --- /dev/null +++ b/MP/Maps/Carrier/maps/mp/createfx/mp_carrier_fx.gsc @@ -0,0 +1,887 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_vista_wake01" ); + ent.v["origin"] = ( -58.2015, -18360.2, -714.482 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_vista_wake01" ); + ent.v["origin"] = ( -10700.7, 16079.5, -669.519 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_med" ); + ent.v["origin"] = ( -21482.5, -2505.56, -694.797 ); + ent.v["angles"] = ( 357, 180, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_med" ); + ent.v["origin"] = ( -10481.6, 20165.4, -710.126 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_vista_wake01" ); + ent.v["origin"] = ( -9126.13, -13552.4, -715.212 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_vista_wake01" ); + ent.v["origin"] = ( 8665.18, 13595.2, -700.893 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_embers" ); + ent.v["origin"] = ( -3854.6, 79.8424, 183.125 ); + ent.v["angles"] = ( 272, 90, -111 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_center_sm" ); + ent.v["origin"] = ( -1319.65, -363.628, 64.3916 ); + ent.v["angles"] = ( 302.901, 135.003, -145.086 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_white" ); + ent.v["origin"] = ( -513.153, 1362.69, -324.875 ); + ent.v["angles"] = ( 272.603, 130.638, -139.606 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_white" ); + ent.v["origin"] = ( 782.881, -1511.68, -455.222 ); + ent.v["angles"] = ( 276.155, 62.3059, -53.7455 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_burning_vista" ); + ent.v["origin"] = ( -15694.8, 16261.5, -290.759 ); + ent.v["angles"] = ( 275.026, 184.097, -4.82657 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_sm" ); + ent.v["origin"] = ( 6505.5, 13349.9, -328.171 ); + ent.v["angles"] = ( 271.414, 42, 134.991 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_sm" ); + ent.v["origin"] = ( -12455.3, -13247, -470.402 ); + ent.v["angles"] = ( 273, 87, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_signal_lights" ); + ent.v["origin"] = ( -5473.25, 905.82, 209.125 ); + ent.v["angles"] = ( 270, 7.12502, -84.1249 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_center" ); + ent.v["origin"] = ( -3977.28, 46.9893, 55.2842 ); + ent.v["angles"] = ( 280.413, 148.311, -150 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_center" ); + ent.v["origin"] = ( -4941.86, -87.4292, 56.2784 ); + ent.v["angles"] = ( 288.143, 211.092, 145.879 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_lg" ); + ent.v["origin"] = ( -3969.86, 78.2687, 74.125 ); + ent.v["angles"] = ( 278.062, 262.855, 97.0749 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_lg" ); + ent.v["origin"] = ( -5021.34, -113.987, 68 ); + ent.v["angles"] = ( 293.034, 343.215, 18.1473 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_whisp" ); + ent.v["origin"] = ( -4937.9, 17.0403, 30.7431 ); + ent.v["angles"] = ( 273, 90, 87 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_med" ); + ent.v["origin"] = ( -5060.28, 146.711, 29.8151 ); + ent.v["angles"] = ( 297.457, 339.072, -1.6175 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); + ent.v["origin"] = ( -5367.53, 133.109, 34.8895 ); + ent.v["angles"] = ( 288.292, 349.876, 9.59762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); + ent.v["origin"] = ( -5390.14, 63.707, 32.0963 ); + ent.v["angles"] = ( 288.292, 349.876, 9.59762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_sm" ); + ent.v["origin"] = ( -5409.74, 68.626, 32 ); + ent.v["angles"] = ( 283.892, 191.934, 179.103 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_sm" ); + ent.v["origin"] = ( -5377.72, 140.05, 35.7386 ); + ent.v["angles"] = ( 284.984, 176.097, -172.506 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_sm" ); + ent.v["origin"] = ( -5076.63, -71.1425, 75.5114 ); + ent.v["angles"] = ( 320.933, 100.085, -125.612 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); + ent.v["origin"] = ( -5080.25, -59.0195, 78.5789 ); + ent.v["angles"] = ( 288.292, 349.876, 9.59762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_med" ); + ent.v["origin"] = ( -4091.42, 131.545, 50.4025 ); + ent.v["angles"] = ( 276.611, 296.668, 45.7822 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_whisp" ); + ent.v["origin"] = ( -4030.94, 131.781, 44.125 ); + ent.v["angles"] = ( 273, 90, 79 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_whisp" ); + ent.v["origin"] = ( -4445, -195.563, 30.3438 ); + ent.v["angles"] = ( 275.972, 84.4913, 71.4936 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); + ent.v["origin"] = ( -4603.88, -155.65, 30.9479 ); + ent.v["angles"] = ( 288.292, 349.876, 9.59762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_sm" ); + ent.v["origin"] = ( -4598.65, 261.54, 53.6646 ); + ent.v["angles"] = ( 272.126, 137.547, -170.002 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_whisp" ); + ent.v["origin"] = ( -4281.06, 44.5, 44.125 ); + ent.v["angles"] = ( 273, 90, 79 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_whisp" ); + ent.v["origin"] = ( -4609.3, 278.458, 48.332 ); + ent.v["angles"] = ( 273, 90, 87 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_med" ); + ent.v["origin"] = ( -4428.7, -211.233, 36 ); + ent.v["angles"] = ( 274.224, 167.837, 168.144 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_sm" ); + ent.v["origin"] = ( -4453.47, -192.678, 35 ); + ent.v["angles"] = ( 298.931, 143.841, -170.31 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_spark_bounce_runner" ); + ent.v["origin"] = ( -4785.97, 42.2405, 115.005 ); + ent.v["angles"] = ( 64.8322, 222.596, 82.9304 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_spark_bounce_runner" ); + ent.v["origin"] = ( -4806.01, -18.3941, 132.944 ); + ent.v["angles"] = ( 40.9317, 51.6052, -86.0274 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); + ent.v["origin"] = ( -4606.44, 274.965, 59.9653 ); + ent.v["angles"] = ( 280.318, 298.276, 54.5878 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); + ent.v["origin"] = ( -5128.75, -82.0912, 41.6681 ); + ent.v["angles"] = ( 288.292, 349.876, 9.59762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_lg" ); + ent.v["origin"] = ( -4929.69, -96.3975, 63 ); + ent.v["angles"] = ( 293.034, 343.215, 18.1473 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_white" ); + ent.v["origin"] = ( -3959.06, 1892.55, -305.286 ); + ent.v["angles"] = ( 272.236, 54.426, -57.4434 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_white" ); + ent.v["origin"] = ( -3317.06, -2486.78, -148.666 ); + ent.v["angles"] = ( 272.236, 54.426, -57.4434 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_whisp" ); + ent.v["origin"] = ( -4011.45, -38.307, 44.125 ); + ent.v["angles"] = ( 271.008, 95.957, 93.0456 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_embers" ); + ent.v["origin"] = ( -3868.3, 1.7955, 179.57 ); + ent.v["angles"] = ( 270, 0, 14 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_embers" ); + ent.v["origin"] = ( -5019.26, -69.3119, 183.125 ); + ent.v["angles"] = ( 270, 0, -12 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_embers" ); + ent.v["origin"] = ( -4976.18, -169.25, 197.125 ); + ent.v["angles"] = ( 270, 359.987, 2.01273 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_side" ); + ent.v["origin"] = ( -8535.18, -13083.5, -776.479 ); + ent.v["angles"] = ( 6, 160, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_side" ); + ent.v["origin"] = ( 162.964, -17807.9, -763.41 ); + ent.v["angles"] = ( 2.99634, 159.996, -0.157169 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_side" ); + ent.v["origin"] = ( -10291.5, 15930.1, -780.849 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 205.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_side" ); + ent.v["origin"] = ( 8435.41, 13172.4, -832.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 200.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); + ent.v["origin"] = ( -4281.19, 91.9115, 61.2291 ); + ent.v["angles"] = ( 356.963, 131.232, 1.89006 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_sm" ); + ent.v["origin"] = ( -4280.21, 94.8366, 49.8955 ); + ent.v["angles"] = ( 276.977, 176.134, 159.98 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); + ent.v["origin"] = ( -5077.41, -71.4887, 77 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); + ent.v["origin"] = ( -4591.18, 226.715, 66 ); + ent.v["angles"] = ( 332, 356, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_sprinkle_water" ); + ent.v["origin"] = ( -4120.79, -1860.87, 14.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_sprinkle_water" ); + ent.v["origin"] = ( -4720.88, -1708.38, 3.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_wall_water_bottom" ); + ent.v["origin"] = ( -4710.57, -1712.12, -75.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_wall_water_bottom" ); + ent.v["origin"] = ( -4727.65, -1696.49, -75.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_splash_detail" ); + ent.v["origin"] = ( -4105.71, -1846.54, -75.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_splash_detail" ); + ent.v["origin"] = ( -4135.09, -1856.9, -75.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_splash_detail" ); + ent.v["origin"] = ( -4709.19, -1716.29, -75.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_splash_detail" ); + ent.v["origin"] = ( -4732.58, -1689.17, -75.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_xsm" ); + ent.v["origin"] = ( -13732.3, 15785.8, -30.112 ); + ent.v["angles"] = ( 274, 8, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_xsm" ); + ent.v["origin"] = ( -10752.1, -13197, -318.155 ); + ent.v["angles"] = ( 283, 345, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_lg" ); + ent.v["origin"] = ( -1371.09, -357.367, 46.3916 ); + ent.v["angles"] = ( 336.341, 174.239, 4.35777 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_lg" ); + ent.v["origin"] = ( -2200.05, 405.969, 15.125 ); + ent.v["angles"] = ( 278, 270, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_med" ); + ent.v["origin"] = ( -2228.46, 398.769, 54.8563 ); + ent.v["angles"] = ( 290.215, 354.817, 5.71139 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_med" ); + ent.v["origin"] = ( -2463.6, 789.889, 53.125 ); + ent.v["angles"] = ( 290.215, 354.817, 10.7115 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_whisp" ); + ent.v["origin"] = ( -2094.03, 538.268, 51.125 ); + ent.v["angles"] = ( 275.972, 84.4895, 99.4953 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_sm" ); + ent.v["origin"] = ( -2465.97, 773.06, 44.125 ); + ent.v["angles"] = ( 284.008, 149.965, -149.654 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_med" ); + ent.v["origin"] = ( -2365.74, 785.716, 93.523 ); + ent.v["angles"] = ( 290.215, 354.817, 10.7115 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_whisp" ); + ent.v["origin"] = ( -2455.27, 745.334, 59.7645 ); + ent.v["angles"] = ( 275.972, 84.4895, 99.4953 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); + ent.v["origin"] = ( -3973.7, -1130.53, 1381.58 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); + ent.v["origin"] = ( -3972.11, -1898.07, 1381.59 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); + ent.v["origin"] = ( -4835.98, -1513.69, 827.88 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_sm" ); + ent.v["origin"] = ( -3447.69, -1683.97, -23.875 ); + ent.v["angles"] = ( 271, 256.006, 76.9945 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_sm" ); + ent.v["origin"] = ( -4020.17, -1905.87, -19.2877 ); + ent.v["angles"] = ( 270, 0, -21 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_sm" ); + ent.v["origin"] = ( -4236.28, -1904.52, -15.7601 ); + ent.v["angles"] = ( 270, 358.457, -19.4571 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_sm" ); + ent.v["origin"] = ( -4459.57, -1908, -18.5915 ); + ent.v["angles"] = ( 270, 357.973, -20.9727 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_sm" ); + ent.v["origin"] = ( -4675.08, -1908.77, -18.4708 ); + ent.v["angles"] = ( 270, 358.457, -22.4571 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_sm" ); + ent.v["origin"] = ( -4556.52, -1970.96, -23.8727 ); + ent.v["angles"] = ( 276, 76, -76 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_med" ); + ent.v["origin"] = ( -2702.43, 1868.7, -120.875 ); + ent.v["angles"] = ( 273, 274, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); + ent.v["origin"] = ( -3427.92, -81.8574, 21.9565 ); + ent.v["angles"] = ( 317.146, 175.806, 2.41347 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); + ent.v["origin"] = ( -3422.85, -69.953, 31.0785 ); + ent.v["angles"] = ( 288.292, 349.876, 9.59762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); + ent.v["origin"] = ( -2969.28, -62.7099, 177.277 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_whisp" ); + ent.v["origin"] = ( -2234.61, 191.542, 33.2623 ); + ent.v["angles"] = ( 275.972, 84.4895, 99.4953 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_med" ); + ent.v["origin"] = ( -2254.46, 191.494, 30.2707 ); + ent.v["angles"] = ( 274.68, 313.059, 51.9166 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_carrier_hose_water" ); + ent.v["origin"] = ( -5944.17, 176.554, 46.125 ); + ent.v["angles"] = ( 270, 0, -178 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -5352.85, 1117.35, 93.125 ); + ent.v["angles"] = ( 327.422, 149.504, 72.9211 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -5517.17, 949.536, 92.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -4846.19, 926.685, 110.143 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -4266.9, -1344.87, 102.125 ); + ent.v["angles"] = ( 25.0027, 269.016, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); + ent.v["origin"] = ( -4292.1, -369.65, 44.125 ); + ent.v["angles"] = ( 288.292, 349.876, 9.59762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_spark_bounce_runner" ); + ent.v["origin"] = ( -6044.17, -971.258, 142.232 ); + ent.v["angles"] = ( 64.8322, 222.596, 82.9304 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); + ent.v["origin"] = ( -5063.26, 861.135, 159.591 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); + ent.v["origin"] = ( -5061.54, 925.1, 158.584 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); + ent.v["origin"] = ( -5061.25, 986.927, 158.588 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); + ent.v["origin"] = ( -5150.78, 988.019, 158.252 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); + ent.v["origin"] = ( -5151.44, 860.562, 159.255 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); + ent.v["origin"] = ( -5148.66, 927.492, 158.247 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); + ent.v["origin"] = ( -5234.71, 985.008, 159.256 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); + ent.v["origin"] = ( -5232.74, 861.248, 159.259 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); + ent.v["origin"] = ( -5231.04, 926.214, 159.251 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); + ent.v["origin"] = ( -5311.23, 986.513, 159.253 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); + ent.v["origin"] = ( -5310.36, 862.11, 159.256 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); + ent.v["origin"] = ( -5311.74, 925.849, 159.248 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); + ent.v["origin"] = ( -2990.27, -1425.42, -23.5496 ); + ent.v["angles"] = ( 345.698, 169.704, 7.42529 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); + ent.v["origin"] = ( -2990.66, -1431.45, -25.7327 ); + ent.v["angles"] = ( 288.484, 346.765, 27.5501 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); + ent.v["origin"] = ( -3008.45, -1519.56, -58.1315 ); + ent.v["angles"] = ( 284.555, 358.91, 27.2706 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); + ent.v["origin"] = ( -2200.53, 181.707, 10.1593 ); + ent.v["angles"] = ( 317.146, 175.806, 2.41347 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_sm" ); + ent.v["origin"] = ( -2228.89, 187.158, 5.48325 ); + ent.v["angles"] = ( 345, 173, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( -2893.2, -45.4313, 148.287 ); + ent.v["angles"] = ( 358.281, 50.0353, -179.306 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( -2974.98, 15.7562, 149.692 ); + ent.v["angles"] = ( 358.281, 50.0353, -179.306 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); + ent.v["origin"] = ( -2968.33, 14.4817, 147.436 ); + ent.v["angles"] = ( 274.028, 270.507, 14.9761 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); + ent.v["origin"] = ( -2892.41, -53.2338, 149.018 ); + ent.v["angles"] = ( 274.028, 270.507, 14.9761 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); + ent.v["origin"] = ( -2557.05, 726.475, 109.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); + ent.v["origin"] = ( -1865.89, 31.8837, 48.125 ); + ent.v["angles"] = ( 294, 0, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); + ent.v["origin"] = ( -2719.39, -628.071, 115.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); + ent.v["origin"] = ( -3654.59, -1058.95, 89.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); + ent.v["origin"] = ( -3624.6, -557.147, 80.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); + ent.v["origin"] = ( -4939.88, -470.674, 64.125 ); + ent.v["angles"] = ( 272, 270.003, 70.9956 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); + ent.v["origin"] = ( -5515.04, -558.374, 99.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); + ent.v["origin"] = ( -5346.74, 428.328, 100.767 ); + ent.v["angles"] = ( 273.082, 143.357, -154.327 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); + ent.v["origin"] = ( -5810.05, 342.903, 88.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); + ent.v["origin"] = ( -5736.39, -359.219, 61.0693 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); + ent.v["origin"] = ( -5616.28, 692.708, 94.2869 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); + ent.v["origin"] = ( -3296.67, 547.707, 119.245 ); + ent.v["angles"] = ( 270, 356.906, 36.094 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_med" ); + ent.v["origin"] = ( -4274.38, 119.286, 44.125 ); + ent.v["angles"] = ( 281.169, 309.125, 13.1377 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); + ent.v["origin"] = ( -5288.9, -147.045, 93.125 ); + ent.v["angles"] = ( 271.104, 287.171, 70.8336 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_med" ); + ent.v["origin"] = ( -5202.3, 218.401, 45.9961 ); + ent.v["angles"] = ( 274.176, 288.61, 38.9491 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); + ent.v["origin"] = ( -4136.17, -659.741, 69.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); + ent.v["origin"] = ( -2952.7, 30.9951, 70.9518 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); + ent.v["origin"] = ( -4381.43, -1054.36, 65.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_sm" ); + ent.v["origin"] = ( -4878.93, 60.5723, 33 ); + ent.v["angles"] = ( 286.386, 156.261, 177.678 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); + ent.v["origin"] = ( -4880.41, 72.9994, 43.8322 ); + ent.v["angles"] = ( 288.292, 347.876, 9.5976 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_sm" ); + ent.v["origin"] = ( -3953.09, -104.214, 44.125 ); + ent.v["angles"] = ( 276.567, 39.3156, -67.3963 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); + ent.v["origin"] = ( -3939.66, -107.473, 48.9528 ); + ent.v["angles"] = ( 315.281, 349.535, 1.14706 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_sm" ); + ent.v["origin"] = ( -3459.76, -1670.08, -21.875 ); + ent.v["angles"] = ( 271, 256.006, 76.9945 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_med" ); + ent.v["origin"] = ( -2673.19, 1344.67, -290.875 ); + ent.v["angles"] = ( 275.644, 321.987, 39.8366 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_xlg" ); + ent.v["origin"] = ( -6531.17, 1097.36, -283.067 ); + ent.v["angles"] = ( 275.981, 184.506, -175.494 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_xlg" ); + ent.v["origin"] = ( -6582.02, -1250.14, -278.134 ); + ent.v["angles"] = ( 272.184, 107.998, -126.968 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_mist" ); + ent.v["origin"] = ( -8588.57, -12766.9, -561.241 ); + ent.v["angles"] = ( 270, 0.205568, -0.205568 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_mist" ); + ent.v["origin"] = ( -14091.9, -13489.7, -452.354 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_mist" ); + ent.v["origin"] = ( -6462.06, -17808.7, -435.959 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_mist" ); + ent.v["origin"] = ( 11.2148, -16553.5, -273.229 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_mist" ); + ent.v["origin"] = ( -21214.4, -2214, -630.674 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_mist" ); + ent.v["origin"] = ( -10149.3, 15391.4, -421.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_mist" ); + ent.v["origin"] = ( -18681.2, 15370.4, -106.849 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_mist" ); + ent.v["origin"] = ( 8291.97, 12459.5, -448.972 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_mist" ); + ent.v["origin"] = ( 3323.2, 13603.8, -484.159 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_mist" ); + ent.v["origin"] = ( -9888.85, 19843.6, -638.009 ); + ent.v["angles"] = ( 279, 4, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_carrier_sun1" ); + ent.v["origin"] = ( 38623.1, 90590.2, 8650.31 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_med" ); + ent.v["origin"] = ( -4564.92, -1544.95, -450.125 ); + ent.v["angles"] = ( 271.157, 149.399, -144.41 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_med" ); + ent.v["origin"] = ( -5265.77, 1602.43, -346.726 ); + ent.v["angles"] = ( 288.437, 267.003, 93.1525 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_xsm" ); + ent.v["origin"] = ( 4387.92, 13115.7, -544.612 ); + ent.v["angles"] = ( 274, 188, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_xsm" ); + ent.v["origin"] = ( -12050.2, 15687.4, -393.525 ); + ent.v["angles"] = ( 300.846, 79.0048, 111.848 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_xsm" ); + ent.v["origin"] = ( -753.66, -18091.5, -395.443 ); + ent.v["angles"] = ( 277, 345, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_xsm" ); + ent.v["origin"] = ( -1519.06, -17954.7, -575.988 ); + ent.v["angles"] = ( 283, 345, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_white" ); + ent.v["origin"] = ( -1081.07, -1444.35, -443.202 ); + ent.v["angles"] = ( 273.103, 190.141, 175.406 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_white" ); + ent.v["origin"] = ( -3253.04, 1420.7, -509.43 ); + ent.v["angles"] = ( 272.994, 322.174, 37.7963 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_med" ); + ent.v["origin"] = ( -6055.61, -1461.02, -262.926 ); + ent.v["angles"] = ( 271.157, 149.394, -169.406 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_med" ); + ent.v["origin"] = ( -1293.77, -285.233, 60.3013 ); + ent.v["angles"] = ( 290.215, 354.817, 5.71139 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); + ent.v["origin"] = ( -1819.96, -281.825, 80.125 ); + ent.v["angles"] = ( 270, 359.818, -0.818171 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_lg" ); + ent.v["origin"] = ( -1373.5, -313.755, 45.125 ); + ent.v["angles"] = ( 280.383, 227.744, 115.753 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fire_sprinkler_gush_splash_sm" ); + ent.v["origin"] = ( -4720.53, -1707.86, -75.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fire_sprinkler_gush_splash_sm" ); + ent.v["origin"] = ( -4116.44, -1857.15, -75.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_side" ); + ent.v["origin"] = ( -522.152, 899.132, -728.155 ); + ent.v["angles"] = ( 357.444, 176.534, 24.7667 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_side" ); + ent.v["origin"] = ( -1604.54, 905.903, -748.42 ); + ent.v["angles"] = ( 357.444, 176.534, 24.7667 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_side" ); + ent.v["origin"] = ( 541.632, -1017.3, -716 ); + ent.v["angles"] = ( 3.22013, 186.887, -6.00497 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_side" ); + ent.v["origin"] = ( -540.782, -1112.97, -714 ); + ent.v["angles"] = ( 2.99797, 174.365, -16.2623 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_side" ); + ent.v["origin"] = ( -1469.87, -1083.49, -738.966 ); + ent.v["angles"] = ( 2.83823, 176.778, -15.2345 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_lg" ); + ent.v["origin"] = ( -4942.81, -69.6983, 79.0716 ); + ent.v["angles"] = ( 278.528, 290.839, 72.1579 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_side" ); + ent.v["origin"] = ( -485.978, -17870.5, -765.265 ); + ent.v["angles"] = ( 2.99634, 159.996, -0.157169 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_carrier_hazard_light" ); + ent.v["origin"] = ( -2310.63, -376.682, 94.4275 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_carrier_hazard_light" ); + ent.v["origin"] = ( -2309.65, -246.131, 94.9715 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_carrier_hazard_light" ); + ent.v["origin"] = ( -2309.75, 320.981, 94.0247 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; +} diff --git a/MP/Maps/Carrier/maps/mp/mp_carrier.gsc b/MP/Maps/Carrier/maps/mp/mp_carrier.gsc new file mode 100644 index 0000000..7c5698d --- /dev/null +++ b/MP/Maps/Carrier/maps/mp/mp_carrier.gsc @@ -0,0 +1,100 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_carrier_fx; +#include maps\mp\_load; +#include maps\mp\mp_carrier_amb; +#include maps\mp\_compass; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + level.overrideplayerdeathwatchtimer = ::leveloverridetime; + level.useintermissionpointsonwavespawn = ::useintermissionpointsonwavespawn; + maps\mp\mp_carrier_fx::main(); + maps\mp\_load::main(); + maps\mp\mp_carrier_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_carrier" ); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + level thread water_trigger_init(); +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2600", reset_dvars ); +} + +water_trigger_init() +{ + wait 3; + triggers = getentarray( "trigger_hurt", "classname" ); + + foreach ( trigger in triggers ) + { + if ( trigger.origin[2] > level.mapcenter[2] ) + continue; + + trigger thread water_trigger_think(); + } +} + +water_trigger_think() +{ + for (;;) + { + self waittill( "trigger", entity ); + + if ( isplayer( entity ) ) + { + trace = worldtrace( entity.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), entity.origin - vectorscale( ( 0, 0, 1 ), 256.0 ) ); + + if ( trace["surfacetype"] == "none" ) + { + entity playsound( "mpl_splash_death" ); + playfx( level._effect["water_splash"], entity.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + } + } + } +} + +leveloverridetime( defaulttime ) +{ + if ( self isinwater() ) + return 0.4; + + return defaulttime; +} + +useintermissionpointsonwavespawn() +{ + return self isinwater(); +} + +isinwater() +{ + triggers = getentarray( "trigger_hurt", "classname" ); + + foreach ( trigger in triggers ) + { + if ( trigger.origin[2] > level.mapcenter[2] ) + continue; + + if ( self istouching( trigger ) ) + { + trace = worldtrace( self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), self.origin - vectorscale( ( 0, 0, 1 ), 256.0 ) ); + return trace["surfacetype"] == "none"; + } + } + + return 0; +} diff --git a/MP/Maps/Carrier/maps/mp/mp_carrier_amb.gsc b/MP/Maps/Carrier/maps/mp/mp_carrier_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Carrier/maps/mp/mp_carrier_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Carrier/maps/mp/mp_carrier_fx.gsc b/MP/Maps/Carrier/maps/mp/mp_carrier_fx.gsc new file mode 100644 index 0000000..ac31eec --- /dev/null +++ b/MP/Maps/Carrier/maps/mp/mp_carrier_fx.gsc @@ -0,0 +1,77 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_carrier_fx; +#include maps\mp\createart\mp_carrier_art; + +precache_util_fx() +{ + +} + +precache_scripted_fx() +{ + level._effect["water_splash"] = loadfx( "bio/player/fx_player_water_splash_mp" ); +} + +precache_createfx_fx() +{ + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_elec_spark_burst_xsm_thin_runner"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin_runner" ); + level._effect["fx_mp_carrier_spark_bounce_runner"] = loadfx( "maps/mp_maps/fx_mp_carrier_spark_bounce_runner" ); + level._effect["fx_mp_smk_plume_lg_blk"] = loadfx( "maps/mp_maps/fx_mp_smk_plume_lg_blk" ); + level._effect["fx_mp_smk_plume_lg_blk_carrier"] = loadfx( "maps/mp_maps/fx_mp_smk_plume_lg_blk_carrier" ); + level._effect["fx_mp_carrier_smoke_sm"] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_sm" ); + level._effect["fx_mp_carrier_smoke_med"] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_med" ); + level._effect["fx_mp_carrier_smoke_lg"] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_lg" ); + level._effect["fx_mp_carrier_embers"] = loadfx( "maps/mp_maps/fx_mp_carrier_embers" ); + level._effect["fx_mp_carrier_smoke_xlg"] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_xlg" ); + level._effect["fx_mp_carrier_smoke_area"] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_area" ); + level._effect["fx_mp_carrier_smoke_white"] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_white" ); + level._effect["fx_mp_carrier_burning_vista"] = loadfx( "maps/mp_maps/fx_mp_carrier_burning_vista" ); + level._effect["fx_mp_carrier_burning_vista_sm"] = loadfx( "maps/mp_maps/fx_mp_carrier_burning_vista_sm" ); + level._effect["fx_mp_carrier_burning_vista_xsm"] = loadfx( "maps/mp_maps/fx_mp_carrier_burning_vista_xsm" ); + level._effect["fx_mp_carrier_burning_vista_mist"] = loadfx( "maps/mp_maps/fx_mp_carrier_burning_vista_mist" ); + level._effect["fx_mp_carrier_smoke_whisp"] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_whisp" ); + level._effect["fx_mp_carrier_smoke_center"] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_center" ); + level._effect["fx_mp_carrier_smoke_center_sm"] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_center_sm" ); + level._effect["fx_mp_carrier_smoke_white_sm"] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_white_sm" ); + level._effect["fx_mp_carrier_smoke_white_med"] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_white_med" ); + level._effect["fx_mp_fumes_vent_xsm_int"] = loadfx( "maps/mp_maps/fx_mp_fumes_vent_xsm_int" ); + level._effect["fx_mp_carrier_smoke_white_xlg"] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_white_xlg" ); + level._effect["fx_mp_carrier_smoke_fire_sm"] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_fire_sm" ); + level._effect["fx_mp_carrier_smoke_fire_med"] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_fire_med" ); + level._effect["fx_mp_carrier_smoke_fire_lg"] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_fire_lg" ); + level._effect["fx_mp_carrier_vista_wake01"] = loadfx( "maps/mp_maps/fx_mp_carrier_vista_wake01" ); + level._effect["fx_mp_carrier_vista_wake_med"] = loadfx( "maps/mp_maps/fx_mp_carrier_vista_wake_med" ); + level._effect["fx_mp_carrier_vista_wake_side"] = loadfx( "maps/mp_maps/fx_mp_carrier_vista_wake_side" ); + level._effect["fx_mp_slums_sprinkle_water"] = loadfx( "maps/mp_maps/fx_mp_slums_sprinkle_water" ); + level._effect["fx_wall_water_bottom"] = loadfx( "water/fx_wall_water_bottom" ); + level._effect["fx_water_splash_detail"] = loadfx( "water/fx_water_splash_detail" ); + level._effect["fx_carrier_hose_water"] = loadfx( "water/fx_carrier_hose_water" ); + level._effect["fx_water_fire_sprinkler_gush_splash_sm"] = loadfx( "water/fx_water_fire_sprinkler_gush_splash_sm" ); + level._effect["fx_mp_carrier_signal_lights"] = loadfx( "maps/mp_maps/fx_mp_carrier_signal_lights" ); + level._effect["fx_window_god_ray"] = loadfx( "light/fx_window_god_ray" ); + level._effect["fx_light_beacon_red_blink_fst"] = loadfx( "light/fx_light_beacon_red_blink_fst_sm" ); + level._effect["fx_carrier_tube_light_sq"] = loadfx( "light/fx_carrier_tube_light_sq" ); + level._effect["fx_carrier_hazard_light"] = loadfx( "light/fx_carrier_hazard_light" ); + level._effect["fx_lf_mp_carrier_sun1"] = loadfx( "lens_flares/fx_lf_mp_carrier_sun1" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["towing_crane"] = %fxanim_mp_carrier_towing_crane_anim; + level.scr_anim["fxanim_props"]["sparking_wires_med"] = %fxanim_gp_wirespark_med_anim; +} + +main() +{ + precache_util_fx(); + precache_createfx_fx(); + precache_scripted_fx(); + precache_fxanim_props(); + maps\mp\createfx\mp_carrier_fx::main(); + maps\mp\createart\mp_carrier_art::main(); +} diff --git a/MP/Maps/Cove/aitype/enemy_dog_mp.gsc b/MP/Maps/Cove/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Cove/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Cove/character/character_mp_german_shepherd.gsc b/MP/Maps/Cove/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Cove/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Cove/maps/mp/createfx/mp_castaway_fx.gsc b/MP/Maps/Cove/maps/mp/createfx/mp_castaway_fx.gsc new file mode 100644 index 0000000..c07a363 --- /dev/null +++ b/MP/Maps/Cove/maps/mp/createfx/mp_castaway_fx.gsc @@ -0,0 +1,1607 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2309.11, 658.607, 55.2184 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 139.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2272.99, 607.501, 55.2496 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2296.89, 524.59, 53.2357 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 247.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 683.492, 2632.41, 50.1331 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 652.088, 2707.02, 50.0117 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 35.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 614.457, 2759.75, 50.3346 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 40.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 560.507, 2810.95, 48.8594 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 68.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 479.506, 2807.22, 51.5955 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 80.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 444.544, 2838.1, 50.824 ); + ent.v["angles"] = ( 0.515095, 51, 0.857321 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1200.17, -938.649, 45 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 112.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1270.16, -997.653, 48.7685 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 201.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1211.3, -1085.04, 50.4368 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1114.59, -1044.34, 47.3283 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 348.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1140.62, -964.823, 49.4685 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 47.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 178.984, -1295.63, 49 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 232.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 252.374, -1322.76, 53 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 280.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 679.633, -1398.22, 48.2879 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 212.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 718.309, -1423.61, 49.0928 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 263.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2447.31, 615.365, 48.3262 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 615.983, 644.331, 161.413 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1384.3, 234.944, 149.107 ); + ent.v["angles"] = ( 353, 186, 0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1358.43, 75.9958, 140.416 ); + ent.v["angles"] = ( 353, 186, 0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1304.63, 126.641, 155.685 ); + ent.v["angles"] = ( 353, 186, 0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1080.89, 57.8276, 199.926 ); + ent.v["angles"] = ( 353, 186, 0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 929.338, 170.667, 246.904 ); + ent.v["angles"] = ( 350.735, 208.306, -3.77909 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 898.177, 17.1387, 248.148 ); + ent.v["angles"] = ( 0.121878, 95.0073, 6.99893 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 408.851, 338.904, 118.73 ); + ent.v["angles"] = ( 358.192, 110.893, 6.76373 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 117.157, 779.618, 65.4429 ); + ent.v["angles"] = ( 353, 186, 0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 419.306, 386.397, 46.3514 ); + ent.v["angles"] = ( 353.01, 182.978, 0.368177 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 483.953, -1992.45, 54 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 15.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 454.158, -1889.45, 53 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 12.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 422.344, -1826.58, 52 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 24.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 350.834, -1785.55, 50 ); + ent.v["angles"] = ( 358.502, 51.9515, 3.71014 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 294.91, -1804.61, 50 ); + ent.v["angles"] = ( 356.469, 148.058, -1.88022 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 281.548, -1874.87, 51 ); + ent.v["angles"] = ( 358.062, 181.059, -3.49978 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 285.764, -1941.87, 50 ); + ent.v["angles"] = ( 359.513, 203.016, -3.97025 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 311.079, -2018.78, 50 ); + ent.v["angles"] = ( 359.237, 199.026, -3.92671 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 332.755, -2094.82, 50 ); + ent.v["angles"] = ( 359.652, 205.012, -3.9848 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 510.576, -2065.47, 57 ); + ent.v["angles"] = ( 1.23519, 12.0409, 3.80544 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_fire_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 903.136, 649.689, 683.568 ); + ent.v["angles"] = ( 305.237, 85.0031, -101.997 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_area_white" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 697.361, 505.702, 78.7322 ); + ent.v["angles"] = ( 283, 180, 180 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 459.608, 400.383, 37.9355 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_area_white" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 459.42, 71.9871, 93.4523 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1477.47, -609.772, 84.0656 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 345.448, 2841.06, 49.9863 ); + ent.v["angles"] = ( 359.758, 95.9965, 0.97045 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 261.543, 2798.68, 48.7692 ); + ent.v["angles"] = ( 359.234, 131.994, -0.357036 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 192.976, 2734.03, 50.509 ); + ent.v["angles"] = ( 359.234, 131.994, -0.357036 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 154.584, 2654.46, 49.7827 ); + ent.v["angles"] = ( 359.684, 174.993, -0.783479 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1117.63, 2781.93, 45.016 ); + ent.v["angles"] = ( 359.156, 103.991, 0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1172.89, 2741.97, 46.7767 ); + ent.v["angles"] = ( 0.527199, 162.982, -0.700591 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1174.03, 2672.8, 43.0072 ); + ent.v["angles"] = ( 0.597542, 168.982, -0.641649 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1184.68, 2607.73, 44.1291 ); + ent.v["angles"] = ( 0.527199, 162.982, -0.700591 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1213.17, 2530.47, 43.6948 ); + ent.v["angles"] = ( 0.690559, 177.982, -0.540274 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 725.925, -216.535, 122.866 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1137.86, -768.984, 110.756 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 525.403, 743.275, 61.7535 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 514.801, 956.026, 67.7127 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -836.681, 1281.28, 280.915 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 283.776, 1827.24, 217.074 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -100.279, 1284.75, 144.805 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1041.7, 321.277, 263.484 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1160.74, 639.345, 235.517 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1301.81, 878.466, 275.84 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1170.13, 1194.03, 241.53 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 838.773, 1587.88, 239.274 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1187.61, 1678.82, 238.115 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1584.97, 1668.01, 51.4792 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 111.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1633.07, 1733.07, 52.9506 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1672.07, 1802.49, 50.5894 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 145.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1725.54, 1835.75, 48.6745 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1776.39, 1809.99, 49.0012 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 57.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1816.72, 1773.24, 46.2076 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 19.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1852.81, 1735.57, 43.2828 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 35.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1859.23, 1694.72, 47.3971 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1826.63, 1645.81, 46.147 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 322.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1793.66, 1574.6, 51.2513 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 335.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1751.58, 1520.38, 49.7867 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 308.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1711.8, 1453.04, 51.327 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 322.0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_god_ray_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -74.8562, -510.961, 387.453 ); + ent.v["angles"] = ( 42.5524, 297.699, 79.7769 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_god_ray_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -117.168, -452.747, 387.378 ); + ent.v["angles"] = ( 45.8322, 299.768, 81.4295 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_god_ray_lg_02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -418.075, 1331.5, 422.592 ); + ent.v["angles"] = ( 8.16497, 318.371, 92.6577 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_god_ray_lg_02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -491.755, 1267.15, 348.38 ); + ent.v["angles"] = ( 8.16497, 318.371, 92.6577 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_god_ray_lg_r" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -467.022, -520.02, 290.269 ); + ent.v["angles"] = ( 42.786, 310.926, -148.287 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -579.984, 1367.04, 293.438 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 305.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -82.7526, -529.294, 274.845 ); + ent.v["angles"] = ( 40.9649, 305.354, -1.01489 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -97.8313, -574.901, 312.97 ); + ent.v["angles"] = ( 40.9654, 305.377, -1.99895 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_castaway_sun" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -56272.1, 107451, 79521.1 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_cave_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 54.1245, -734.099, 268.991 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_cave_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 22.9793, -776.739, 265.759 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1710.32, 651.483, 50.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_area_white" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1648.56, 135.829, 81.21 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1054.4, 1289.39, 211.954 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 11.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1118.29, 613.617, 193.518 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 11.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -775.772, 216.542, 177.267 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 11.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -136.925, 115.584, 62.116 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 11.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 159.333, 1744.39, 135.427 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 11.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1170.86, 1627.08, 95.7976 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 11.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1409.94, 1224.27, 89.4698 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 11.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 315.539, 2201.44, 80.9044 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 11.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 886.006, 2096.7, 66.5365 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 11.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 50.0848, 2068.83, 109.332 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 11.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -807.146, 1831.56, 143.896 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 11.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1050.72, -840.773, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 11.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 422.058, 1278.75, 71.3407 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 11.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1812.58, 1785.9, 50.125 ); + ent.v["angles"] = ( 271.424, 340.025, 11.9623 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1865.22, 1720.12, 52.2316 ); + ent.v["angles"] = ( 271.424, 340.029, 95.9585 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 991.153, -1175.54, 58.3031 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 11.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_vista_mist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4331.99, 762.78, 134.357 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 354.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_vista_mist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4418.72, 2131.36, 146.511 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 354.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_vista_mist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2514.2, -4640.24, 115.631 ); + ent.v["angles"] = ( 359.234, 64, 0.643204 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4283.13, 2017.94, 49.6744 ); + ent.v["angles"] = ( 270.431, 286.973, -104.935 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4175.98, 1753.47, 56.1265 ); + ent.v["angles"] = ( 272.589, 88.4222, 92.6185 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2517.09, 2208.19, 49.7463 ); + ent.v["angles"] = ( 273.144, 225.996, 2.03693 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3027.37, 614.118, 49.2681 ); + ent.v["angles"] = ( 270.431, 287.096, -55.0586 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2355.81, -3277.15, 60.1393 ); + ent.v["angles"] = ( 272.883, 5.44351, -164.431 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3552.49, -2941.4, 51.0849 ); + ent.v["angles"] = ( 272.883, 5.44328, -101.43 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 670.956, 2563.2, 47.8433 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 980.204, 2518.46, 53.9728 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 22.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 938.81, 2541.44, 48.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 77.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 880.878, 2554.81, 48.2297 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 98.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3175, -728.283, 57.6881 ); + ent.v["angles"] = ( 274.181, 349.567, -88.5148 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_vista_mist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2725.72, -530.151, 65.4903 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 30.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_vista_mist02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4547.33, -1513.11, 201.485 ); + ent.v["angles"] = ( 359.134, 17, -0.500026 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3817.9, -143.819, 50.0749 ); + ent.v["angles"] = ( 270.431, 287.145, -50.1074 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3119.82, 1755.6, 50.975 ); + ent.v["angles"] = ( 273.144, 225.997, -30.964 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1963.71, 2617.47, 50.125 ); + ent.v["angles"] = ( 359.51, 339.982, 0.727229 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1936.18, 2736.76, 49.125 ); + ent.v["angles"] = ( 359.437, 345.982, 0.672048 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1926.81, 2979.34, 49.2804 ); + ent.v["angles"] = ( 359.51, 339.982, 0.727229 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1804.89, 3301.43, 52.8538 ); + ent.v["angles"] = ( 359.51, 339.982, 0.727229 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1938.55, 3563.25, 52.379 ); + ent.v["angles"] = ( 359.391, 349.982, 0.631129 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2088.25, 2088.35, 54.3652 ); + ent.v["angles"] = ( 359.51, 339.982, 0.727229 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2059.35, 2246.16, 51.8481 ); + ent.v["angles"] = ( 359.309, 73.9886, -0.539343 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2383.93, 1928.65, 52.0728 ); + ent.v["angles"] = ( 359.123, 35.9855, 0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2252.66, 1992.58, 51.9542 ); + ent.v["angles"] = ( 0.609476, 261.989, 0.630286 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2772.8, 579.394, 49.5426 ); + ent.v["angles"] = ( 359.139, 24.9843, 0.167899 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2740.71, 719.049, 51.2474 ); + ent.v["angles"] = ( 359.281, 70.9886, -0.502435 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2640.21, 485.421, 50.125 ); + ent.v["angles"] = ( 359.3, 358.982, 0.528118 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2657.59, 273.709, 54.5476 ); + ent.v["angles"] = ( 359.282, 0.982195, 0.503365 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2069.53, -286.611, 47.7132 ); + ent.v["angles"] = ( 358.27, 45.9926, -0.651979 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_vista_mist02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3051.52, -3756.48, 90.985 ); + ent.v["angles"] = ( 359.707, 59.9986, -0.957575 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1583.22, 1546.36, 59.8251 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1615.71, 917.809, 57.5445 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1444.29, 326.517, 61.6153 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1308.58, -254.807, 56.5357 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 37.348, -811.309, 68 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -265.716, -459.817, 89.6134 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 68.6026, -510.946, 69.8698 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1332.65, 486.003, 140.383 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1222.12, -554.443, 46.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 133.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1274.49, -625.496, 50.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 133.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1205.02, -674.093, 53.2369 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 212.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1138.75, -743.154, 45.79 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 297.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1556.04, -653.317, 45.1044 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 16.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -540.755, 1332.93, 240.053 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -421.004, 1862.47, 145.818 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 11.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 34.3818, -1064.4, 69.3073 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -124.506, -53.8282, 85.3477 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 672.816, 2009.48, 156.599 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 264.245, 2341.58, 84.092 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 293.076, 2008.2, 120.677 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 644.024, 2506.68, 246.802 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1844.73, 1295.98, 48.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 202.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1864.94, 1231.61, 50.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 202.0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1897.02, 1179.02, 50.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 223.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1963.6, 1115.58, 49.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 237.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1994.46, 1048.3, 50.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 223.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1221.34, 718.416, 256.468 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -685.64, -361.793, 114.682 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 11.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -898.057, 1352.82, 266.194 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 250.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 843.007, 2156.72, 131.335 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 169.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1143.45, 314.325, 254.818 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 52.0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1372.73, 704.764, 185.365 ); + ent.v["angles"] = ( 7.8362, 75.8857, -1.60495 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1289.6, -268.921, 184.556 ); + ent.v["angles"] = ( 353, 103, 0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1359.07, -763.425, 157.154 ); + ent.v["angles"] = ( 3.0027, 101.013, 0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1202.26, -889.747, 117.217 ); + ent.v["angles"] = ( 358.396, 169.204, 1.18583 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 675.987, -619.385, 89.358 ); + ent.v["angles"] = ( 358.259, 134.273, 1.16002 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -476.405, -496.256, 166.411 ); + ent.v["angles"] = ( 5.02932, 327.214, 4.87513 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -629.191, -182.071, 193.012 ); + ent.v["angles"] = ( 349.912, 108.923, 0.69036 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1095.31, 1047.42, 259.667 ); + ent.v["angles"] = ( 359.813, 75.1664, 3.27994 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -638.842, 1453.98, 292.847 ); + ent.v["angles"] = ( 350.729, 318.194, 0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 166.719, 1529.27, 177.87 ); + ent.v["angles"] = ( 8.79165, 317.407, 3.95414 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 37.1285, 1416.17, 195.027 ); + ent.v["angles"] = ( 2.44562, 260.037, -2.73182 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 574.74, 235.379, 166.746 ); + ent.v["angles"] = ( 7.84506, 94.5444, -4.28343 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -60.0989, 321.93, 116.073 ); + ent.v["angles"] = ( 2.63238, 78.3364, 3.42619 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -147.278, 153.523, 127.703 ); + ent.v["angles"] = ( 348.838, 165.987, 1.72505 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1318.25, 1379.81, 146.382 ); + ent.v["angles"] = ( 358.313, 139.682, 6.84143 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -23.8215, 1976.21, 184.377 ); + ent.v["angles"] = ( 2.4379, 174.24, 7.14616 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -564.44, 2073.1, 163.818 ); + ent.v["angles"] = ( 351.289, 260.576, 5.01022 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1085.09, 1607.01, 154.424 ); + ent.v["angles"] = ( 1.35144, 148.083, 6.39748 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_area_white" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 26.4004, 819.807, 56.9765 ); + ent.v["angles"] = ( 282, 180, 180 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_area_white" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 277.47, 475.201, 145.352 ); + ent.v["angles"] = ( 282, 180, 180 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1605.55, -811.994, 497.718 ); + ent.v["angles"] = ( 327.627, 101.061, 25.6804 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_area_white" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1649.46, -269.168, 64.7911 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_area_white" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1175.08, -157.254, 165.817 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_area_white" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1322.77, 399.876, 136.252 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1737.81, 39.7418, 67.3698 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1021.88, -1452.84, 46.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 266.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1071.46, -1442.36, 47.3262 ); + ent.v["angles"] = ( 0, 320, -1 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1676.72, -930.024, 49.0604 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 212.0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1692.53, -919.158, 48.125 ); + ent.v["angles"] = ( 359.513, 12.9703, 7.98311 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1633.76, -852.426, 47.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 209.0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1667.86, -859.828, 46.006 ); + ent.v["angles"] = ( 359.513, 12.9703, 7.98311 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2149.55, 55.7322, 46.9984 ); + ent.v["angles"] = ( 357.638, 192.29, -4.06977 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2208.14, 44.9981, 46.3903 ); + ent.v["angles"] = ( 4.04907, 339.249, 6.90291 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2089.79, -47.3551, 42.6614 ); + ent.v["angles"] = ( 354.805, 156.274, -1.6893 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2107.24, -55.0931, 46.125 ); + ent.v["angles"] = ( 4.75181, 323.238, -0.3888 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2230.3, -238.416, 45.2701 ); + ent.v["angles"] = ( 358.275, 177.123, 2.18927 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2290.49, -344.137, 48.125 ); + ent.v["angles"] = ( 356.075, 185.175, 0.559793 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2461.16, 27.2183, 50.125 ); + ent.v["angles"] = ( 357.232, 186.143, 3.77498 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2032.55, -438.654, 46.5852 ); + ent.v["angles"] = ( 356.279, 109.157, 2.98296 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2046.15, -492.046, 48.341 ); + ent.v["angles"] = ( 3.96658, 294.162, 0.352762 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1698.24, -555.11, 43.7283 ); + ent.v["angles"] = ( 355.199, 356.609, -1.73468 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1769.16, 1052.96, 43.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 97.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1781.79, 1020.35, 47.349 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 281.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1912.35, 749.293, 48.5828 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 198.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1938.87, 740.911, 46.028 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 9.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_case_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1964.2, 214.067, 83.8798 ); + ent.v["angles"] = ( 357.5, 13.0028, 0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2574.17, -296.451, 118.125 ); + ent.v["angles"] = ( 352.689, 182.975, -1.78804 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_oil_slick" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2577.72, -178.835, 50.4495 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_oil_slick" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3223.19, -258.061, 50.7101 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 335.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2595.33, -321.244, 50.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_leaf_debris" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 314.213, -653.71, 408.651 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 105.0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_leaf_debris" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -366.252, -279.695, 471.791 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 123.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_leaf_debris" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -706.855, 742.915, 524.258 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 123.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_leaf_debris" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -549.139, 1179.75, 606.192 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 123.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_leaf_debris" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -371.368, 1517.9, 740.172 ); + ent.v["angles"] = ( 16, 123, 0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_leaf_debris" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 435.937, 2301.62, 476.874 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 123.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_leaf_debris" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1021.81, 2627.13, 306.963 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 123.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_leaf_debris" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 806.351, 1194.83, 444.228 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_leaf_debris" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 744.553, 1215.07, 405.218 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 174.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 238.687, 1704.33, 142.445 ); + ent.v["angles"] = ( 359, 171, 0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -15.391, 1565.59, 145.964 ); + ent.v["angles"] = ( 0.939825, 331, -0.342114 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -367.136, 2096.07, 110.942 ); + ent.v["angles"] = ( 359.066, 150, 0.358453 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1255.13, 800.127, 192.665 ); + ent.v["angles"] = ( 0.956449, 333.994, -0.292432 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -910.904, 157.83, 190.127 ); + ent.v["angles"] = ( 0.866139, 21, 0.500124 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 169.499, 57.7871, 31.9389 ); + ent.v["angles"] = ( 354.501, 231.076, -0.870136 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 643.582, -278.676, 68.6005 ); + ent.v["angles"] = ( 359, 171, 0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1100.65, 293.445, 200.434 ); + ent.v["angles"] = ( 0.848171, 23.0071, 0.530028 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1399.24, 847.12, 111.835 ); + ent.v["angles"] = ( 0.71944, 35.0075, 0.694792 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1171.49, 1508.18, 102.993 ); + ent.v["angles"] = ( 359.593, 105, 0.913701 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1046.55, 2070.23, 72.8744 ); + ent.v["angles"] = ( 359.066, 150, 0.358453 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 192.797, 631.766, 51.5905 ); + ent.v["angles"] = ( 359.293, 216.007, -0.707151 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 658.266, 578.374, 59.5491 ); + ent.v["angles"] = ( 359.003, 166.001, 0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 223.59, 1017.97, 79.7395 ); + ent.v["angles"] = ( 359.879, 249.002, -0.989253 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -714.883, 365.172, 189.552 ); + ent.v["angles"] = ( 359.844, 247.003, -0.984433 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -650.443, 2481.78, 68.7245 ); + ent.v["angles"] = ( 0.785374, 24.0074, 0.613706 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 649.077, -816.789, 104.771 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 628.067, -821.498, 77.6018 ); + ent.v["angles"] = ( 0.731455, 34.0075, 0.682129 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_oil_slick" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4506.97, 613.694, 50.521 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_oil_slick" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4677.73, 1584.5, 50.6497 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 28.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 456.549, -367.336, 60.8297 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 11.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_fire_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 622.357, 383.587, 367.488 ); + ent.v["angles"] = ( 22, 125, 0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 945.815, 221.19, 389.016 ); + ent.v["angles"] = ( 335, 173, 0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_spark_bounce_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 973.544, 123.743, 345.518 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_spark_bounce_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1074.53, 48.7958, 301.559 ); + ent.v["angles"] = ( 270, 0, 168 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 562.035, 333.608, 306.298 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 130.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1540.41, -717.016, 206.544 ); + ent.v["angles"] = ( 292, 129, -180 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_area_white" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 614.773, 2.37351, 140.966 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 289.563, 280.174, 254.439 ); + ent.v["angles"] = ( 335, 173, 0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_fire_geo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 809.077, 649.277, 571.571 ); + ent.v["angles"] = ( 336.351, 343.514, -5.51342 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_wing_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 844.331, 602.781, 584.35 ); + ent.v["angles"] = ( 3.54735, 138.447, -38.0217 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_wing_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 895.564, 638.798, 606.144 ); + ent.v["angles"] = ( 330.022, 100.868, -5.28882 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 763.184, 549.24, 541.905 ); + ent.v["angles"] = ( 335, 173, 0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_fire_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 721.982, 317.193, 328.821 ); + ent.v["angles"] = ( 65.8061, 116.887, 13.0833 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 775.675, 404.245, 275.493 ); + ent.v["angles"] = ( 282, 180, 180 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 718.213, 317.547, 330.973 ); + ent.v["angles"] = ( 30.979, 94.667, -1.20133 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 817.258, 656.163, 518.532 ); + ent.v["angles"] = ( 20.8712, 82.8833, 70.6872 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_case_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1975.26, 216.495, 84.4666 ); + ent.v["angles"] = ( 357.5, 13.0028, 0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_case_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1986.06, 219.124, 84.9937 ); + ent.v["angles"] = ( 357.5, 13.0028, 0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_case_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1997.03, 221.369, 85.742 ); + ent.v["angles"] = ( 357.5, 13.0028, 0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_case_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2008.09, 224.006, 86.1653 ); + ent.v["angles"] = ( 357.5, 13.0028, 0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_case_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1734.11, 1026.56, 77.7137 ); + ent.v["angles"] = ( 355.746, 13.0267, -0.406129 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_case_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1745.13, 1028.99, 78.7474 ); + ent.v["angles"] = ( 355.746, 13.0267, -0.406129 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_case_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1755.91, 1031.62, 79.7136 ); + ent.v["angles"] = ( 355.746, 13.0267, -0.406129 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_case_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1766.85, 1033.86, 80.8061 ); + ent.v["angles"] = ( 355.746, 13.0267, -0.406129 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_case_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1777.9, 1036.5, 81.6768 ); + ent.v["angles"] = ( 355.746, 13.0267, -0.406129 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 882.603, 106.26, 277.833 ); + ent.v["angles"] = ( 10, 162, 0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3011.39, -58.7442, 57.9464 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 725.92, 314.638, 278.164 ); + ent.v["angles"] = ( 351.812, 355.293, -50.1739 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_fire_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 726.984, 313.314, 336.555 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_crate_smoke01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2693.46, -297.146, 75.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_crate_smoke02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3099.2, -91.7459, 53.125 ); + ent.v["angles"] = ( 271, 89.9983, 90.0017 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3078.1, -54.123, 53.125 ); + ent.v["angles"] = ( 352.526, 175.918, -0.878975 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1615.84, -883.632, 218.378 ); + ent.v["angles"] = ( 29.4765, 253.686, 77.7512 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1516.16, -649.656, 160.702 ); + ent.v["angles"] = ( 7.09684, 226.314, 73.0255 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_tunnel" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1003.37, 69.7438, 331.074 ); + ent.v["angles"] = ( 19.9873, 166.128, 0.727747 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 398.995, 126.994, 70.4241 ); + ent.v["angles"] = ( 347.339, 346.67, 26.9729 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 550.884, 82.2239, 113.698 ); + ent.v["angles"] = ( 347.339, 346.67, 26.9729 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 630.746, 269.288, 125.675 ); + ent.v["angles"] = ( 345.129, 344.341, -38.499 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_spark_lite_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 580.19, 181.503, 247.392 ); + ent.v["angles"] = ( 71.0171, 347.997, 6.33576 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_elec_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 580.439, 182.457, 250.489 ); + ent.v["angles"] = ( 37, 171, 0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1488.2, 669.906, 90.2442 ); + ent.v["angles"] = ( 353, 186, 0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_wing_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 812.629, 627.89, 553.533 ); + ent.v["angles"] = ( 351.857, 123.431, -37.413 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_fire_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1627.62, -810.653, 165.283 ); + ent.v["angles"] = ( 356.263, 115.595, 35.0689 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1398.74, 63.0482, 260.166 ); + ent.v["angles"] = ( 50.9031, 162.76, 16.6978 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_spark_lite_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1388.12, 253.376, 159.581 ); + ent.v["angles"] = ( 337.622, 149.92, 7.45446 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_fire_geo2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1608.56, -804.815, 117.896 ); + ent.v["angles"] = ( 279.867, 282.937, -81.0539 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_fire_geo2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1653.53, -925.349, 261.106 ); + ent.v["angles"] = ( 275.865, 309.6, -104.784 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_wing_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1657.65, -911.035, 301.159 ); + ent.v["angles"] = ( 294.971, 88.7115, -67.751 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_wing02_smoke" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1668.31, -902.987, 346.094 ); + ent.v["angles"] = ( 323.815, 72.2649, -43.3432 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_fire_dlite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 353.223, 239.318, 111 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_fire_dlite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1617.86, -776.196, 121.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1645.96, -883.578, 103.125 ); + ent.v["angles"] = ( 334.112, 152.202, 77.6777 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_fire_only_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 721.202, 317.821, 268.065 ); + ent.v["angles"] = ( 352, 180, 180 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 859.665, 33.1026, 292.615 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 71.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1077.61, 73.2924, 305.191 ); + ent.v["angles"] = ( 358, 352, 0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 330.109, 225.233, 222.364 ); + ent.v["angles"] = ( 24.3835, 3.69784, -54.0505 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -245.273, 481.307, 317.562 ); + ent.v["angles"] = ( 342.909, 59.1376, 5.73361 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -521.874, 810.496, 516.415 ); + ent.v["angles"] = ( 342.909, 59.1376, 5.73361 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -318.097, 849.494, 403.923 ); + ent.v["angles"] = ( 357.727, 24.9655, 14.0332 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -354.891, 1133.95, 577.005 ); + ent.v["angles"] = ( 10.0753, 356.012, 13.3962 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -345.574, 783.929, 402.468 ); + ent.v["angles"] = ( 9.70932, 24.265, 16.6651 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_fire_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 338.456, 295.858, 101.714 ); + ent.v["angles"] = ( 35, 309, 0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_fire_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 362.308, 322.893, 104.366 ); + ent.v["angles"] = ( 35, 309, 0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_fire_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 386.935, 317.799, 109.218 ); + ent.v["angles"] = ( 35, 309, 0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_fire_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 348.293, 309.392, 101.893 ); + ent.v["angles"] = ( 35, 309, 0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_fire_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 324.774, 291.899, 100.042 ); + ent.v["angles"] = ( 35, 309, 0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 714.98, 27.7596, 174.521 ); + ent.v["angles"] = ( 347.339, 346.67, 26.9729 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 148.69, 420.161, 116.878 ); + ent.v["angles"] = ( 28, 168, 0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 212.423, 446.098, 130.426 ); + ent.v["angles"] = ( 22, 76, 0 ); + ent.v["delay"] = -92; +} diff --git a/MP/Maps/Cove/maps/mp/mp_castaway.gsc b/MP/Maps/Cove/maps/mp/mp_castaway.gsc new file mode 100644 index 0000000..eee0127 --- /dev/null +++ b/MP/Maps/Cove/maps/mp/mp_castaway.gsc @@ -0,0 +1,61 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_castaway_fx; +#include maps\mp\_load; +#include maps\mp\mp_castaway_amb; +#include maps\mp\_compass; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_castaway_fx::main(); + precachemodel( "collision_physics_64x64x10" ); + precachemodel( "collision_clip_64x64x10" ); + precachemodel( "collision_physics_128x128x10" ); + precachemodel( "p6_cas_rock_medium_02_trimmed" ); + maps\mp\_load::main(); + maps\mp\mp_castaway_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_castaway" ); + setdvar( "compassmaxrange", "2100" ); + setdvar( "bg_dog_swim_enabled", 1 ); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + spawncollision( "collision_physics_64x64x10", "collider", ( -1181, 1602, 242 ), ( 9.8, 270, 106 ) ); + spawncollision( "collision_physics_64x64x10", "collider", ( -1181, 1635, 242 ), ( 9.81, 270, 106 ) ); + spawncollision( "collision_physics_64x64x10", "collider", ( -1174, 1602, 197 ), ( 360, 270, 90 ) ); + spawncollision( "collision_physics_64x64x10", "collider", ( -1174, 1635, 197 ), ( 360, 270, 90 ) ); + spawncollision( "collision_physics_64x64x10", "collider", ( -329, 656, 123 ), ( 359.424, 286.385, 127.196 ) ); + spawncollision( "collision_physics_64x64x10", "collider", ( -342, 699, 124 ), ( 354.888, 295.033, 125.723 ) ); + spawncollision( "collision_physics_64x64x10", "collider", ( -707, 2358, 145 ), vectorscale( ( 1, 0, 0 ), 90.0 ) ); + spawncollision( "collision_clip_64x64x10", "collider", ( 407.5, 518, 103 ), vectorscale( ( 1, 0, 0 ), 270.0 ) ); + spawncollision( "collision_clip_64x64x10", "collider", ( 381, 552, 103 ), ( 270, 65.4, 6.57 ) ); + spawncollision( "collision_clip_64x64x10", "collider", ( 343, 559, 103 ), ( 270, 112.8, 0 ) ); + spawncollision( "collision_clip_64x64x10", "collider", ( 370.5, 526, 128.5 ), vectorscale( ( 0, 1, 0 ), 66.2 ) ); + spawncollision( "collision_clip_64x64x10", "collider", ( 357, 525, 129.5 ), vectorscale( ( 0, 1, 0 ), 23.0 ) ); + rock1 = spawn( "script_model", ( 373.607, 484.974, 42.6 ) ); + rock1.angles = ( 350.899, 243.975, 4.02471 ); + rock1 setmodel( "p6_cas_rock_medium_02_trimmed" ); + spawncollision( "collision_physics_64x64x10", "collider", ( 479.5, 270, 75 ), ( 346.453, 344.758, 4.31137 ) ); + spawncollision( "collision_physics_64x64x10", "collider", ( 477.5, 270, 76 ), ( 349.833, 342.352, 15.9726 ) ); + spawncollision( "collision_physics_128x128x10", "collider", ( 1503, 186, 121 ), ( 16.2357, 331.376, -70.4431 ) ); + spawncollision( "collision_physics_128x128x10", "collider", ( 1571, 147, 97 ), ( 16.2357, 331.376, -70.4431 ) ); + level.levelkothdisable = []; + level.levelkothdisable[level.levelkothdisable.size] = spawn( "trigger_radius", ( 281.5, 443.5, 161 ), 0, 50, 50 ); +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2200", reset_dvars ); + ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1000", reset_dvars ); + ss.hq_objective_influencer_radius = 3000; +} diff --git a/MP/Maps/Cove/maps/mp/mp_castaway_amb.gsc b/MP/Maps/Cove/maps/mp/mp_castaway_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Cove/maps/mp/mp_castaway_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Cove/maps/mp/mp_castaway_fx.gsc b/MP/Maps/Cove/maps/mp/mp_castaway_fx.gsc new file mode 100644 index 0000000..d08aa07 --- /dev/null +++ b/MP/Maps/Cove/maps/mp/mp_castaway_fx.gsc @@ -0,0 +1,105 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_castaway_fx; + +main() +{ + precache_fxanim_props(); + precache_fxanim_props_dlc3(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_castaway_fx::main(); +} + +precache_scripted_fx() +{ + level._effect["water_splash_sm"] = loadfx( "bio/player/fx_player_water_splash_mp_sm" ); +} + +precache_createfx_fx() +{ + level._effect["fx_mp_castaway_crate_fire"] = loadfx( "maps/mp_maps/fx_mp_castaway_crate_fire" ); + level._effect["fx_mp_castaway_oil_slick"] = loadfx( "maps/mp_maps/fx_mp_castaway_oil_slick" ); + level._effect["fx_mp_castaway_splash_md"] = loadfx( "maps/mp_maps/fx_mp_castaway_splash_md" ); + level._effect["fx_mp_castaway_rock_splash01_runner"] = loadfx( "maps/mp_maps/fx_mp_castaway_rock_splash01_runner" ); + level._effect["fx_mp_castaway_cave_drip"] = loadfx( "maps/mp_maps/fx_mp_castaway_cave_drip" ); + level._effect["fx_xtreme_water_hit_mp_castaway"] = loadfx( "impacts/fx_xtreme_water_hit_mp_castaway" ); + level._effect["fx_mp_slums_dark_smoke_sm"] = loadfx( "maps/mp_maps/fx_mp_slums_dark_smoke_sm" ); + level._effect["fx_mp_castaway_fire_md"] = loadfx( "maps/mp_maps/fx_mp_castaway_fire_md" ); + level._effect["fx_mp_castaway_fire_sm"] = loadfx( "maps/mp_maps/fx_mp_castaway_fire_sm" ); + level._effect["fx_mp_castaway_fire_lg"] = loadfx( "maps/mp_maps/fx_mp_castaway_fire_lg" ); + level._effect["fx_smk_smolder_gray_slow_dark"] = loadfx( "smoke/fx_smk_smolder_gray_slow_dark" ); + level._effect["fx_mp_studio_smoke_area"] = loadfx( "maps/mp_maps/fx_mp_studio_smoke_area" ); + level._effect["fx_mp_castaway_smoke_area"] = loadfx( "maps/mp_maps/fx_mp_castaway_smoke_area" ); + level._effect["fx_mp_castaway_wing_fire"] = loadfx( "maps/mp_maps/fx_mp_castaway_wing_fire" ); + level._effect["fx_mp_castaway_fire_geo"] = loadfx( "maps/mp_maps/fx_mp_castaway_fire_geo" ); + level._effect["fx_mp_castaway_fire_geo2"] = loadfx( "maps/mp_maps/fx_mp_castaway_fire_geo2" ); + level._effect["fx_mp_castaway_crate_smoke01"] = loadfx( "maps/mp_maps/fx_mp_castaway_crate_smoke01" ); + level._effect["fx_mp_castaway_crate_smoke02"] = loadfx( "maps/mp_maps/fx_mp_castaway_crate_smoke02" ); + level._effect["fx_mp_castaway_smoke_sm"] = loadfx( "maps/mp_maps/fx_mp_castaway_smoke_sm" ); + level._effect["fx_mp_castaway_smoke_tunnel"] = loadfx( "maps/mp_maps/fx_mp_castaway_smoke_tunnel" ); + level._effect["fx_mp_castaway_elec_fire"] = loadfx( "maps/mp_maps/fx_mp_castaway_elec_fire" ); + level._effect["fx_mp_castaway_smoke_area_white"] = loadfx( "maps/mp_maps/fx_mp_castaway_smoke_area_white" ); + level._effect["fx_mp_castaway_wing02_smoke"] = loadfx( "maps/mp_maps/fx_mp_castaway_wing02_smoke" ); + level._effect["fx_mp_castaway_fire_only_sm"] = loadfx( "maps/mp_maps/fx_mp_castaway_fire_only_sm" ); + level._effect["fx_mp_castaway_smoke_blow"] = loadfx( "maps/mp_maps/fx_mp_castaway_smoke_blow" ); + level._effect["fx_mp_castaway_fire_drip"] = loadfx( "maps/mp_maps/fx_mp_castaway_fire_drip" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_insects_flies_dragonflies"] = loadfx( "bio/insects/fx_insects_flies_dragonflies" ); + level._effect["fx_insects_butterfly_flutter"] = loadfx( "bio/insects/fx_insects_butterfly_flutter" ); + level._effect["fx_mp_castaway_fire_int"] = loadfx( "maps/mp_maps/fx_mp_castaway_fire_int" ); + level._effect["fx_mp_castaway_god_ray_lg"] = loadfx( "maps/mp_maps/fx_mp_castaway_god_ray_lg" ); + level._effect["fx_mp_castaway_god_ray_lg_r"] = loadfx( "maps/mp_maps/fx_mp_castaway_god_ray_lg_r" ); + level._effect["fx_mp_castaway_god_ray_lg_02"] = loadfx( "maps/mp_maps/fx_mp_castaway_god_ray_lg_02" ); + level._effect["fx_mp_castaway_fire_dlite"] = loadfx( "maps/mp_maps/fx_mp_castaway_fire_dlite" ); + level._effect["fx_mp_castaway_fire_dlite02"] = loadfx( "maps/mp_maps/fx_mp_castaway_fire_dlite02" ); + level._effect["fx_mp_castaway_case_lite"] = loadfx( "maps/mp_maps/fx_mp_castaway_case_lite" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_castaway_air_dust"] = loadfx( "maps/mp_maps/fx_mp_castaway_air_dust" ); + level._effect["fx_mp_castaway_air_mist"] = loadfx( "maps/mp_maps/fx_mp_castaway_air_mist" ); + level._effect["fx_mp_castaway_air_dust_blow"] = loadfx( "maps/mp_maps/fx_mp_castaway_air_dust_blow" ); + level._effect["fx_mp_castaway_leaf_debris"] = loadfx( "maps/mp_maps/fx_mp_castaway_leaf_debris" ); + level._effect["fx_mp_castaway_vista_mist"] = loadfx( "maps/mp_maps/fx_mp_castaway_vista_mist" ); + level._effect["fx_mp_castaway_vista_mist02"] = loadfx( "maps/mp_maps/fx_mp_castaway_vista_mist02" ); + level._effect["fx_mp_carrier_spark_bounce_runner"] = loadfx( "maps/mp_maps/fx_mp_carrier_spark_bounce_runner" ); + level._effect["fx_mp_elec_spark_burst_xsm_thin_runner"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin_runner" ); + level._effect["fx_mp_castaway_spark_lite_runner"] = loadfx( "maps/mp_maps/fx_mp_castaway_spark_lite_runner" ); + level._effect["fx_lf_mp_castaway_sun"] = loadfx( "lens_flares/fx_lf_mp_castaway_sun" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim = []; + level.scr_anim["fxanim_props"] = []; + level.scr_anim["fxanim_props"]["seagull_circle_01"] = %fxanim_gp_seagull_circle_01_anim; + level.scr_anim["fxanim_props"]["seagull_circle_02"] = %fxanim_gp_seagull_circle_02_anim; + level.scr_anim["fxanim_props"]["seagull_circle_03"] = %fxanim_gp_seagull_circle_03_anim; + level.scr_anim["fxanim_props"]["river_debris_barrel"] = %fxanim_angola_river_debris_barrel_anim; + level.scr_anim["fxanim_props"]["shark_fins"] = %fxanim_mp_stu_shark_fins_anim; +} + +#using_animtree("fxanim_props_dlc3"); + +precache_fxanim_props_dlc3() +{ + level.scr_anim["fxanim_props_dlc3"] = []; + level.scr_anim["fxanim_props_dlc3"]["speed_boat"] = %viewmodel_fxanim_mp_cast_speed_boat_anim; + level.scr_anim["fxanim_props_dlc3"]["zodiac_boats"] = %viewmodel_fxanim_mp_cast_zodiac_boats_anim; + level.scr_anim["fxanim_props_dlc3"]["palm_tree_float"] = %viewmodel_fxanim_mp_cast_palm_tree_float_anim; + level.scr_anim["fxanim_props_dlc3"]["fish_grp_01"] = %fxanim_mp_cast_fish_grp_01_anim; + level.scr_anim["fxanim_props_dlc3"]["floating_boxes"] = %fxanim_mp_cast_floating_boxes_anim; + level.scr_anim["fxanim_props_dlc3"]["raft_ropes"] = %fxanim_mp_cast_raft_ropes_anim; + level.scr_anim["fxanim_props_dlc3"]["floating_seaweed"] = %fxanim_mp_cast_seaweed_anim; + level.scr_anim["fxanim_props_dlc3"]["floating_boxes_fx"] = %fxanim_mp_cast_floating_boxes_fx_anim; + level.scr_anim["fxanim_props_dlc3"]["crab_blue_01_01"] = %fxanim_mp_cast_crab_blue_01_01_anim; + level.scr_anim["fxanim_props_dlc3"]["crab_blue_01_02"] = %fxanim_mp_cast_crab_blue_01_02_anim; + level.scr_anim["fxanim_props_dlc3"]["crab_blue_02_01"] = %fxanim_mp_cast_crab_blue_02_01_anim; + level.scr_anim["fxanim_props_dlc3"]["crab_blue_02_02"] = %fxanim_mp_cast_crab_blue_02_02_anim; + level.scr_anim["fxanim_props_dlc3"]["crab_blue_03_01"] = %fxanim_mp_cast_crab_blue_03_01_anim; + level.scr_anim["fxanim_props_dlc3"]["crab_blue_03_02"] = %fxanim_mp_cast_crab_blue_03_02_anim; + level.scr_anim["fxanim_props_dlc3"]["hammock"] = %fxanim_mp_cast_hammock_anim; + level.scr_anim["fxanim_props_dlc3"]["vine_cluster"] = %fxanim_gp_vine_cluster_anim; +} diff --git a/MP/Maps/Detour/aitype/enemy_dog_mp.gsc b/MP/Maps/Detour/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Detour/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Detour/character/character_mp_german_shepherd.gsc b/MP/Maps/Detour/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Detour/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Detour/maps/mp/createfx/mp_bridge_fx.gsc b/MP/Maps/Detour/maps/mp/createfx/mp_bridge_fx.gsc new file mode 100644 index 0000000..167c9cc --- /dev/null +++ b/MP/Maps/Detour/maps/mp/createfx/mp_bridge_fx.gsc @@ -0,0 +1,1407 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_fireball" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3287.39, -429.974, 52.406 ); + ent.v["angles"] = ( 270, 0, -85 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 297.214, 303.426, -8.24041 ); + ent.v["angles"] = ( 357, 104, 24 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -526.87, 509.596, 71.0189 ); + ent.v["angles"] = ( 353.541, 132.992, -7.0747 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -220.636, -41.6506, -41.0029 ); + ent.v["angles"] = ( 45.7726, 71.9174, -7.24831 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1197.56, -866.805, 36.9715 ); + ent.v["angles"] = ( 357.706, 101.412, -3.90359 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -987.52, -908.542, 43.7629 ); + ent.v["angles"] = ( 0, 132.332, -4.52645 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1474.17, -507.839, -65.2753 ); + ent.v["angles"] = ( 0, 132.332, -4.52645 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1196.99, -858.897, 23.4491 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 304.82, 299.989, 0 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 69.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1308.46, -578.147, -24.0032 ); + ent.v["angles"] = ( 338, 36, 0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1471.72, -502.291, -62.1438 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 165.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1303.12, -583.675, -26.2774 ); + ent.v["angles"] = ( 357.877, 104.406, -3.99843 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -219.227, 61.4696, -15.2712 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 115.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1070.78, 362.231, 2.21348 ); + ent.v["angles"] = ( 359, 125, 0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3.01666, 315.447, 8.38729 ); + ent.v["angles"] = ( 347.049, 106.934, 0.317125 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -969.86, -858.697, 0.124999 ); + ent.v["angles"] = ( 359.066, 104, 0.358452 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -861.534, -546.84, 3.125 ); + ent.v["angles"] = ( 359.086, 101, 0.406833 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1447.27, -380.31, -47.8503 ); + ent.v["angles"] = ( 359.066, 104, 0.358452 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2090.03, -332.301, -126.659 ); + ent.v["angles"] = ( 359, 125, 0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2244.25, -594.758, -118.482 ); + ent.v["angles"] = ( 359.066, 104, 0.358452 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3009.68, -684.535, -67.9775 ); + ent.v["angles"] = ( 359.384, 73, 0.788152 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1611.11, -622.403, -102.751 ); + ent.v["angles"] = ( 359.191, 89, 0.58791 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -304.087, -504.391, 4.39694 ); + ent.v["angles"] = ( 359.066, 104, 0.358452 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -43.9016, -285.469, -2.34247 ); + ent.v["angles"] = ( 5.00119, 71.7019, -1.59772 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2355.43, -248.676, -133.492 ); + ent.v["angles"] = ( 359.515, 64, 0.874684 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1300.86, 580.398, -141 ); + ent.v["angles"] = ( 359.117, 97, 0.469575 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1347.43, 312.283, -128 ); + ent.v["angles"] = ( 359.117, 97, 0.469575 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -697.177, 570.062, -128 ); + ent.v["angles"] = ( 359.117, 97, 0.469575 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -267.935, 556.26, -127.875 ); + ent.v["angles"] = ( 359.117, 97, 0.469575 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -399.711, 195.098, -75.5111 ); + ent.v["angles"] = ( 359.117, 97, 0.469575 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -111.534, 802.34, -128 ); + ent.v["angles"] = ( 359.171, 91, 0.5593 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3253.26, -370.641, 171.844 ); + ent.v["angles"] = ( 287, 93, -180 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_bridge_sun" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 250971, -124193, 41985 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 248.305, -59.5536, -20.8347 ); + ent.v["angles"] = ( 2, 0, -16 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 256.103, -60.4754, -17.7327 ); + ent.v["angles"] = ( 44.7805, 72.0951, -7.12204 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 337.308, 2.14762, -20.2256 ); + ent.v["angles"] = ( 288, 90, -90 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1349.71, 458.856, -29.1047 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 34.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1285, 593.824, -21.5363 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 296.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2066.8, 491.843, -33.5513 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 341.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_lg_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1942.81, 259.657, -10.8562 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_lg_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 228.809, -52.7176, -33.984 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_lg_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 239.317, 94.7007, -43.4998 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 257.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_lg_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 142.048, 22.8797, -50.4053 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 352.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 274.624, -37.7175, -39.5964 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 140.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_lg_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 353.59, 52.0483, -49.5538 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_lg_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -278.552, 17.7715, -44.6642 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 335.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_lg_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -118.956, 9.00296, -48.3488 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 198.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -179.061, -62.165, -48.4152 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 79.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -235.95, -35.2447, -42.6025 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 30.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_spark_light_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -201.674, -23.6963, -74.732 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 344.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_spark_light02_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 233.879, -3.67637, -74.9915 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 357.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -173.005, -71.5927, -27.5974 ); + ent.v["angles"] = ( 1, 0, -17 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -124.648, -131.764, -83.875 ); + ent.v["angles"] = ( 45.7726, 71.9174, -7.24831 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 338.363, -49.3833, -74.2608 ); + ent.v["angles"] = ( 45.7726, 71.9174, -7.24831 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -190.088, 202.991, -7.79737 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -183.412, 155.586, 16.1349 ); + ent.v["angles"] = ( 23, 128, 0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -76.6828, -92.7573, -13.0739 ); + ent.v["angles"] = ( 4.52346, 84.067, -16.0903 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -763.712, 35.9396, 97.125 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -923.31, -103.103, 100.619 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1230.9, -40.5745, 100.447 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1267.99, -319.467, -1 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1349.08, -298.166, -4 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1283.6, -289.399, -14.9277 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1381.88, -308.94, -4.9277 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1742.99, -428.07, -12.2136 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1644.6, -408.567, -16.2136 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1624.5, -463.854, -9.2859 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1711.6, -462.246, -11.2859 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2063.59, -566.517, -7.1942 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2032.2, -600.693, -6.2665 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1956.61, -584.143, -10.2665 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1965.2, -547.014, -11.1942 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1994.21, -296.235, -11.4639 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1962.82, -330.411, -10.5361 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1887.23, -313.861, -14.5361 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1895.82, -276.732, -15.4639 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1716.45, -279.037, -19.4639 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1677.22, -335.058, -20.5361 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1609.63, -318.542, -13.5361 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1618.22, -281.413, -19.4639 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1332.45, -725.071, -4.3389 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1420.95, -747.604, 4.6611 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1380.53, -780.996, -0.4111 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1231.64, -571.961, -15.4111 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1226.92, -635.447, -13 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2283.97, -313.634, -12.4639 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2192.27, -292.598, -8.4639 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2251.29, -271.294, -10.5361 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2334.83, -265.579, -14.4639 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1827.5, -472.81, -5.0017 ); + ent.v["angles"] = ( 42.9744, 92.6924, 91.4886 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1938.5, -478.296, 7.99099 ); + ent.v["angles"] = ( 42.9573, 91.3259, -91.4429 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1551.59, -602.519, -18.0082 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2632.27, -448.319, -17.1985 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2533.88, -428.816, -21.1985 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2525.29, -465.945, -20.2707 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2600.88, -482.495, -16.2707 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2635.98, -297.465, -15.4639 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2537.59, -277.962, -19.4639 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2529, -315.091, -18.5361 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2604.59, -331.641, -14.5361 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2647.61, -577.59, -15.7812 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2549.22, -558.087, -19.7812 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2540.63, -595.216, -18.8534 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2616.22, -611.766, -14.8534 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_03" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2064.8, -838.755, -40.9997 ); + ent.v["angles"] = ( 19.7953, 157.841, -95.6378 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_03" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2392.28, -833.753, -44.1786 ); + ent.v["angles"] = ( 19.7953, 157.841, -95.6378 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_03" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1752.42, -824.018, -44.1274 ); + ent.v["angles"] = ( 19.7953, 157.841, -95.6378 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_03" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1434.22, -824.166, -41.7858 ); + ent.v["angles"] = ( 19.7953, 157.841, -95.6378 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_03" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1108.45, -827.684, -21.0838 ); + ent.v["angles"] = ( 19.7953, 157.841, -95.6378 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -991.361, 691.786, -31.8675 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_ash" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 276.916, -259.891, 0.124998 ); + ent.v["angles"] = ( 351, 94, 0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_ash" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -263.859, -294.055, -15.5924 ); + ent.v["angles"] = ( 344, 94, 0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -183.823, 209.21, -3.60733 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 113.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 17947, 27125.8, 2826.47 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 18817, 27334, 2822.81 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -7976.36, 19568, 2818.82 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -8826.64, 19288.2, 2821.47 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -8131.16, 20476.1, 2825.94 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -8392.81, 21361.9, 2822.99 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 17645, 27990.5, 2835.74 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 17395.6, 28972.5, 2840.41 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_bridge_vista_glare_red" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -22295.7, -2205.94, 4374.55 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_sparks_loop_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1257.06, 416.376, -8.7138 ); + ent.v["angles"] = ( 35.4891, 104.923, -6.48424 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_under_smoke" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1638.82, 129.433, -230.885 ); + ent.v["angles"] = ( 354, 88, 0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_under_smoke" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1940.44, 135.966, -221.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1541.54, -222.874, -11.1 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 261.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1826.58, -233.414, -5.10508 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 261.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2568.44, -227.074, -5.64081 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 261.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_under_smoke_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1081.41, 510.679, 61.8525 ); + ent.v["angles"] = ( 356, 89.4836, 0.893179 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_sparks_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -284.623, -1.69012, -136.477 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 350.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_sparks_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 143.901, 0.758762, -136.231 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 350.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1612.87, -598.284, -132 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1318.19, -819.029, -129 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 946.278, -823.533, -127.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 757.6, -880.753, -139.708 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 115.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 150.162, -835.564, -127.75 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 160.81, -1159.38, -160.937 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 117.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 639.384, -589.062, -127.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 304.459, -594.409, -127.002 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 118.98, -591.849, -142.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 986.751, -534.93, -116.925 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 50.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1934.03, -585.504, -121.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 86.0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2222.37, -552.321, -121.292 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 86.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2488, -585.132, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 50.0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2243.15, -358.748, -129 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 85.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2326.44, -126.125, -135.875 ); + ent.v["angles"] = ( 336.984, 102.426, -6.99643 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2257.69, 134.852, 0.125 ); + ent.v["angles"] = ( 357, 85, 0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2009.15, 287.077, 0.125 ); + ent.v["angles"] = ( 357, 85, 0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1531.47, 235.675, 2.20929 ); + ent.v["angles"] = ( 357, 85, 0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1449.47, 583.703, 12.6064 ); + ent.v["angles"] = ( 357.016, 78.9917, 0.313907 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2370.99, 221.205, -124.784 ); + ent.v["angles"] = ( 359.792, 47, 0.978463 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 449.1, -816.805, -112.44 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 115.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3207.87, -430.162, 14.5372 ); + ent.v["angles"] = ( 32.7509, 63.2253, 3.90106 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3207.07, -385.791, 33.125 ); + ent.v["angles"] = ( 347.294, 79.8492, 0.725055 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2788.5, 551.45, 1.5968 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 163.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2794.03, 362.049, 8.69101 ); + ent.v["angles"] = ( 15.7726, 112.072, 0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3045.52, -485.839, -66.7537 ); + ent.v["angles"] = ( 359.384, 73, 0.788152 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -915.663, 661.254, 8.44913 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -919.114, 678.627, 24.2735 ); + ent.v["angles"] = ( 32.7509, 63.2253, 3.90106 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1285.13, 461.515, 9.52951 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1292.33, 469.535, 25.3539 ); + ent.v["angles"] = ( 32.7509, 63.2253, 3.90106 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1245.98, 447.062, -7.91256 ); + ent.v["angles"] = ( 23.6846, 78.9379, 12.3128 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1272.42, 646.383, -150.665 ); + ent.v["angles"] = ( 348, 94, 0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1244.27, 540.578, -155.457 ); + ent.v["angles"] = ( 0.817454, 112.983, 2.84399 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1215.64, 675.684, -149.936 ); + ent.v["angles"] = ( 0.817454, 112.983, 2.84399 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1091.26, 634.096, -149.28 ); + ent.v["angles"] = ( 1.78209, 92, 2.3626 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1070.85, 520.465, -138.303 ); + ent.v["angles"] = ( 17.5045, 71.4214, 1.64168 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3106.83, -432.057, -10.5019 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 357.0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3102.8, -538.623, -7.49289 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 357.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2894.81, -287.074, -84.4665 ); + ent.v["angles"] = ( 0.48477, 6.00488, 0.874828 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1171.12, 329.396, 9.44715 ); + ent.v["angles"] = ( 31.8635, 73.9768, -5.94769 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1171.19, 320.607, 3.61259 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 113.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_under_smoke" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1792.9, 575.419, -213.677 ); + ent.v["angles"] = ( 25, 88, 0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_under_smoke" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2289.22, 527.772, -195.875 ); + ent.v["angles"] = ( 25, 88, 0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -109.972, 887.062, -136.875 ); + ent.v["angles"] = ( 359.171, 91, 0.5593 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_under_smoke" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -110.792, 362.814, -182.875 ); + ent.v["angles"] = ( 353, 88, 0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_under_smoke_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2716, 459.402, -27.0083 ); + ent.v["angles"] = ( 357, 90, 0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -746.211, 121.545, 57.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 266.0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -963.024, -62.8485, 50.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 749.654, -151.681, 60.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 707.766, 54.496, 53.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1257.11, 63.5891, 61.4086 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 182.0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1399.63, -685.843, -68.2654 ); + ent.v["angles"] = ( 360, 262, 18 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1493.15, -699.789, -114.64 ); + ent.v["angles"] = ( 43.6904, 79.2656, 0.821074 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_under_smoke" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1346.59, -725.543, -198.873 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2229.46, -43.5459, -139.875 ); + ent.v["angles"] = ( 359.054, 106, 0.325543 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -216.749, 64.906, -11.0174 ); + ent.v["angles"] = ( 31, 94, 0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 332.155, 5.81922, -20.1137 ); + ent.v["angles"] = ( 37, 94, 0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 148.372, 130.075, -20.4819 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 98.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 147.364, 126.496, -19.8173 ); + ent.v["angles"] = ( 32, 94, 0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 55.9197, -131.945, -14.9653 ); + ent.v["angles"] = ( 359.406, 66.7938, -16.6876 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -161.551, -76.5783, -15.5597 ); + ent.v["angles"] = ( 31, 94, 0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 42.0953, -116.968, -18.6199 ); + ent.v["angles"] = ( 359.066, 104, 0.358452 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1968.65, 367.964, -139.419 ); + ent.v["angles"] = ( 31, 94, 0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1967.14, 370.761, -142.457 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 80.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1619.97, 567.933, -141.466 ); + ent.v["angles"] = ( 31, 94, 0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1620.76, 569.262, -146.503 ); + ent.v["angles"] = ( 356.939, 80.3856, 90.5438 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1622.45, 559.691, -149.088 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2063.7, 415.821, -14.1888 ); + ent.v["angles"] = ( 42.9573, 91.3259, -83.4429 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1899.59, 370.071, -1.71566 ); + ent.v["angles"] = ( 42.9573, 91.3255, 79.5569 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2031.29, 393.986, -1.58296 ); + ent.v["angles"] = ( 42.9743, 92.6922, -76.5116 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1874.21, 390.696, -5.19353 ); + ent.v["angles"] = ( 42.9573, 91.325, 92.5567 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1111.82, 400.254, -13.3927 ); + ent.v["angles"] = ( 42.9573, 91.325, 92.5567 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1241.31, 423.467, -1.50169 ); + ent.v["angles"] = ( 42.9573, 91.325, 92.5567 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1249.41, 433.599, 3.85648 ); + ent.v["angles"] = ( 42.9573, 91.325, 92.5567 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1249.12, 537.084, -156.992 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 103.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1912.96, 332.354, -91.9484 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1378.9, 351.127, -90.0603 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1353.57, 626.263, -102.965 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1680.05, 333.52, -87.4397 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2049.01, 303.002, -81.0112 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2272.69, 176.125, -100.051 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2277.97, -143.508, -93.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1041.2, 412.293, -64.6322 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 64.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -667.407, 458.397, -80 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -380.84, 491.519, -78.4981 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -116.624, 510.917, -84 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1006.47, -848.422, -84 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 749.498, -814.598, -72.0009 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1296.07, -837.271, -80 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1372.63, -594.537, -93 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1610.02, -624.65, -82.0047 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1927.89, -632.142, -75.7304 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2247.13, -542.43, -80.4307 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2248.79, -313.347, -89 ); + ent.v["angles"] = ( 354, 88, 0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1565.62, -302.052, -11.93 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1275.59, -730.21, -9 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1052.18, -797.13, 2.86112 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1092.6, -763.738, 1.93333 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1004.66, -723.214, -1.06668 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 947.235, -740.344, -11.7278 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 977.507, -642.478, -2.06506 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1017.93, -609.086, -2.99285 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 929.428, -586.553, -5.99286 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 872.565, -585.692, -16.654 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 875.331, -836.064, -44 ); + ent.v["angles"] = ( 42.9573, 91.3255, 104.557 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 676.082, -825.64, -34.9157 ); + ent.v["angles"] = ( 42.9573, 91.3255, 104.557 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1217.69, -834.916, -39.7072 ); + ent.v["angles"] = ( 42.9573, 91.3255, 104.557 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1814.69, -566.735, -47.4894 ); + ent.v["angles"] = ( 42.9744, 92.6924, 91.4886 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2452.57, -561.735, -44.7251 ); + ent.v["angles"] = ( 42.9744, 92.6924, 91.4886 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1775.47, -571.487, -47.6838 ); + ent.v["angles"] = ( 42.9573, 91.3259, -91.4429 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -683.269, -69.6538, 11.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -841.069, 92.2863, 8.35446 ); + ent.v["angles"] = ( 359, 229, 0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1013.16, -84.296, 54.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 25.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1263.97, -71.182, 54.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1264.83, -198.095, 8.125 ); + ent.v["angles"] = ( 359.577, 60, 0.906646 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 234.077, -663.898, 13.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -742.184, -939.085, 0.125006 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_cougar_vehicle" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -194.73, -195.79, -10.52 ); + ent.v["angles"] = ( 358.323, 155.966, 4.60057 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_cougar_vehicle" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 523.2, 568.8, 0 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 163.8 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3175.7, -413.789, 15.7215 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3183.23, -420.654, 43.175 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3175.36, -415.694, 0.124999 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -166.77, -58.2551, -50.4136 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_fire_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 254.499, -57.506, -44.5132 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -380.459, 703.401, -21.4474 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -667.161, 703.967, -21.5752 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -126.611, 704.248, -21.6291 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_bridge_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -127.95, 407.707, -42.1471 ); + ent.v["angles"] = ( 31, 90, 0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_bridge_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -383.837, 406.283, -42.0965 ); + ent.v["angles"] = ( 31, 90, 0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_bridge_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -670.658, 406.34, -42.0374 ); + ent.v["angles"] = ( 31, 90, 0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_bridge_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 184.418, 962.497, -25.9691 ); + ent.v["angles"] = ( 43, 180, 0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_under_smoke" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -658.134, 366.129, -196.821 ); + ent.v["angles"] = ( 353, 88, 0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1007.15, -466.265, -10.875 ); + ent.v["angles"] = ( 47, 90, 180 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1091.05, 854.894, 23.9116 ); + ent.v["angles"] = ( 341, 78, 0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2698.07, 700.865, 13.6722 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 163.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2745.19, 708.526, 42.3206 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 163.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_sparks_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1709.46, 484.034, -30.9105 ); + ent.v["angles"] = ( 58, 350, 0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2194.52, -72.3029, -13.5641 ); + ent.v["angles"] = ( 90, 0, 180 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_bridge_sparks_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2122.96, 96.2786, -23.3226 ); + ent.v["angles"] = ( 31.9967, 179.907, -178.265 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 775.796, 7.37119, 113.66 ); + ent.v["angles"] = ( 90, 0, 180 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 655.05, 71.7911, 113.661 ); + ent.v["angles"] = ( 90, 0, 180 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 916.724, 108.33, 113.662 ); + ent.v["angles"] = ( 90, 0, 180 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 920.176, -54.2146, 113.661 ); + ent.v["angles"] = ( 90, 0, 180 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1034.01, 69.0176, 113.652 ); + ent.v["angles"] = ( 90, 0, 180 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1258.08, 66.3518, 113.653 ); + ent.v["angles"] = ( 90, 0, 180 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_cmd_vehicle_cab" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1773.08, 459.611, -3.10805 ); + ent.v["angles"] = ( 359.505, 186.6, 0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_cmd_vehicle_trailer" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1769.79, 469.925, -3.08127 ); + ent.v["angles"] = ( 359.435, 222.803, -0.139886 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2421.68, 105.218, -24.0471 ); + ent.v["angles"] = ( 29, 360, -180 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -397.723, 1155.06, -29.3603 ); + ent.v["angles"] = ( 51, 90, 0 ); + ent.v["delay"] = -96; +} diff --git a/MP/Maps/Detour/maps/mp/mp_bridge.gsc b/MP/Maps/Detour/maps/mp/mp_bridge.gsc new file mode 100644 index 0000000..a9c8be9 --- /dev/null +++ b/MP/Maps/Detour/maps/mp/mp_bridge.gsc @@ -0,0 +1,198 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\mp_bridge_fx; +#include maps\mp\_load; +#include maps\mp\mp_bridge_amb; +#include maps\mp\_compass; +#include maps\mp\gametypes\_spawning; +#include maps\mp\gametypes\_deathicons; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_bridge_fx::main(); + precachemodel( "collision_physics_128x128x10" ); + precachemodel( "collision_missile_128x128x10" ); + precachemodel( "collision_physics_64x64x10" ); + precachemodel( "collision_missile_32x32x128" ); + precachemodel( "collision_clip_32x32x10" ); + precachemodel( "p6_bri_construction_tarp" ); + maps\mp\_load::main(); + maps\mp\mp_bridge_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_bridge" ); + setdvar( "compassmaxrange", "2100" ); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + spawncollision( "collision_physics_128x128x10", "collider", ( -1190, -876, -76 ), ( 342, 2.63, -90 ) ); + barricade1 = spawn( "script_model", ( 850.5, -812.5, 0 ) ); + barricade1.angles = vectorscale( ( 0, 1, 0 ), 90.0 ); + barricade1 setmodel( "p6_bri_construction_tarp" ); + spawncollision( "collision_missile_128x128x10", "collider", ( -2182, -185.5, -142 ), vectorscale( ( 0, 0, 1 ), 90.0 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -2310, -185.5, -142 ), vectorscale( ( 0, 0, 1 ), 90.0 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -2438, -185.5, -142 ), vectorscale( ( 0, 0, 1 ), 90.0 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -2182, -57.5, -142 ), vectorscale( ( 0, 0, 1 ), 90.0 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -2310, -57.5, -142 ), vectorscale( ( 0, 0, 1 ), 90.0 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -2438, -57.5, -142 ), vectorscale( ( 0, 0, 1 ), 90.0 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -2366.5, 91, -142 ), vectorscale( ( 0, 0, 1 ), 90.0 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -1401.5, 759.5, -158.5 ), vectorscale( ( 0, 0, -1 ), 92.4002 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -1309, 726.5, -158.5 ), ( 2.4, 359.9, -91.7047 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -1401.5, 634, -154.5 ), vectorscale( ( 0, 0, -1 ), 92.4002 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -1373.5, 634, -154.5 ), vectorscale( ( 0, 0, -1 ), 92.4002 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -1401.5, 559.5, -154.5 ), vectorscale( ( 0, 0, -1 ), 92.4002 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -1422, 375.5, -141.5 ), vectorscale( ( 0, 0, -1 ), 92.4002 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -1322.5, 438, -146 ), vectorscale( ( 0, 0, -1 ), 92.4002 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -1304.5, 438, -146 ), vectorscale( ( 0, 0, -1 ), 92.4002 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -1322.5, 378.5, -144 ), vectorscale( ( 0, 0, -1 ), 92.4002 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -1230, 396, -144 ), vectorscale( ( 0, 0, -1 ), 92.4002 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -1357, 248, -139 ), vectorscale( ( 0, 0, -1 ), 92.4002 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -1230, 285, -139 ), vectorscale( ( 0, 0, -1 ), 92.4002 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -1230, 248, -139 ), vectorscale( ( 0, 0, -1 ), 92.4002 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( 1370, -697, -134 ), vectorscale( ( 0, 0, 1 ), 90.0 ) ); + spawncollision( "collision_physics_64x64x10", "collider", ( 2432, -44, 30.5 ), ( 0, 270, -90 ) ); + spawncollision( "collision_physics_64x64x10", "collider", ( 2113.5, -44, 30.5 ), ( 0, 270, -90 ) ); + spawncollision( "collision_missile_32x32x128", "collider", ( -2292, -174, -7.5 ), vectorscale( ( 0, 1, 0 ), 270.0 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -2219.5, -184.5, 37 ), vectorscale( ( 1, 0, 0 ), 2.9 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -2197.5, -184.5, 33 ), vectorscale( ( 1, 0, 0 ), 23.9 ) ); + spawncollision( "collision_clip_32x32x10", "collider", ( 1923.5, 553.5, 43.5 ), ( 1.265, 43.3, -90 ) ); + maps\mp\gametypes\_spawning::level_use_unified_spawning( 1 ); + registerclientfield( "scriptmover", "police_car_lights", 1, 1, "int" ); + level thread destructible_lights(); + setdvar( "r_lightGridEnableTweaks", 1 ); + setdvar( "r_lightGridIntensity", 2.0 ); + setdvar( "r_lightGridContrast", 0.0 ); + level.ragdoll_override = ::ragdoll_override; + level.overrideplayerdeathwatchtimer = ::leveloverridetime; + level.useintermissionpointsonwavespawn = ::useintermissionpointsonwavespawn; + level thread pathing_fix(); +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2400", reset_dvars ); + ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1000", reset_dvars ); +} + +destructible_lights() +{ + wait 0.05; + destructibles = getentarray( "destructible", "targetname" ); + + foreach ( destructible in destructibles ) + { + if ( destructible.destructibledef == "veh_t6_dlc_police_car_destructible" ) + { + destructible thread destructible_think( "police_car_lights" ); + destructible setclientfield( "police_car_lights", 1 ); + } + } +} + +destructible_think( clientfield ) +{ + self waittill_any( "death", "destructible_base_piece_death" ); + self setclientfield( clientfield, 0 ); +} + +ragdoll_override( idamage, smeansofdeath, sweapon, shitloc, vdir, vattackerorigin, deathanimduration, einflictor, ragdoll_jib, body ) +{ + if ( smeansofdeath == "MOD_FALLING" ) + { + deathanim = body getcorpseanim(); + startfrac = deathanimduration / 1000; + + if ( animhasnotetrack( deathanim, "start_ragdoll" ) ) + { + times = getnotetracktimes( deathanim, "start_ragdoll" ); + + if ( isdefined( times ) ) + startfrac = times[0]; + } + + self.body = body; + + if ( !isdefined( self.switching_teams ) ) + thread maps\mp\gametypes\_deathicons::adddeathicon( body, self, self.team, 5.0 ); + + self thread water_spash(); + return true; + } + + return false; +} + +water_spash() +{ + self endon( "disconnect" ); + self endon( "spawned_player" ); + self endon( "joined_team" ); + self endon( "joined_spectators" ); + trace = groundtrace( self.origin, self.origin - vectorscale( ( 0, 0, 1 ), 2048.0 ), 0, self.body ); + + if ( trace["surfacetype"] == "water" ) + { + while ( self.origin[2] > trace["position"][2] + 5 ) + wait 0.05; + + bone = self gettagorigin( "j_spinelower" ); + origin = ( bone[0], bone[1], trace["position"][2] + 2.5 ); + self playsound( "mpl_splash_death" ); + playfx( level._effect["water_splash"], origin ); + } +} + +leveloverridetime( defaulttime ) +{ + if ( self isinwater() ) + return 1; + + return defaulttime; +} + +useintermissionpointsonwavespawn() +{ + return self isinwater(); +} + +isinwater() +{ + triggers = getentarray( "trigger_hurt", "classname" ); + + foreach ( trigger in triggers ) + { + if ( trigger.origin[2] > level.mapcenter[2] ) + continue; + + if ( self istouching( trigger ) ) + return true; + } + + return false; +} + +pathing_fix() +{ + wait 1; + nodes = getallnodes(); + disconnect_node( nodes[96] ); + disconnect_node( nodes[600] ); +} + +disconnect_node( node ) +{ + ent = spawn( "script_model", node.origin, 1 ); + ent setmodel( level.deployedshieldmodel ); + ent hide(); + ent disconnectpaths(); + ent.origin -= vectorscale( ( 0, 0, 1 ), 64.0 ); +} diff --git a/MP/Maps/Detour/maps/mp/mp_bridge_amb.gsc b/MP/Maps/Detour/maps/mp/mp_bridge_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Detour/maps/mp/mp_bridge_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Detour/maps/mp/mp_bridge_fx.gsc b/MP/Maps/Detour/maps/mp/mp_bridge_fx.gsc new file mode 100644 index 0000000..4385c93 --- /dev/null +++ b/MP/Maps/Detour/maps/mp/mp_bridge_fx.gsc @@ -0,0 +1,91 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_bridge_fx; + +main() +{ + precache_fxanim_props(); + precache_fxanim_props_dlc3(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_bridge_fx::main(); +} + +precache_scripted_fx() +{ + level._effect["water_splash"] = loadfx( "bio/player/fx_player_water_splash_mp" ); +} + +precache_createfx_fx() +{ + level._effect["fx_mp_carrier_smoke_center"] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_center" ); + level._effect["fx_mp_bridge_smoke_md"] = loadfx( "maps/mp_maps/fx_mp_bridge_smoke_md" ); + level._effect["fx_mp_bridge_smoke_sm"] = loadfx( "maps/mp_maps/fx_mp_bridge_smoke_sm" ); + level._effect["fx_mp_bridge_smoke_area"] = loadfx( "maps/mp_maps/fx_mp_bridge_smoke_area" ); + level._effect["fx_mp_bridge_smoke_vista"] = loadfx( "maps/mp_maps/fx_mp_bridge_smoke_vista" ); + level._effect["fx_mp_bridge_under_smoke"] = loadfx( "maps/mp_maps/fx_mp_bridge_under_smoke" ); + level._effect["fx_mp_bridge_under_smoke_lg"] = loadfx( "maps/mp_maps/fx_mp_bridge_under_smoke_lg" ); + level._effect["fx_mp_bridge_fire_med"] = loadfx( "maps/mp_maps/fx_mp_bridge_fire_med" ); + level._effect["fx_mp_bridge_fire_sm"] = loadfx( "maps/mp_maps/fx_mp_bridge_fire_sm" ); + level._effect["fx_mp_bridge_fire_fireball"] = loadfx( "maps/mp_maps/fx_mp_bridge_fire_fireball" ); + level._effect["fx_mp_elec_spark_burst_xsm_thin_runner"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin_runner" ); + level._effect["fx_mp_bridge_spark_light_runner"] = loadfx( "maps/mp_maps/fx_mp_bridge_spark_light_runner" ); + level._effect["fx_mp_bridge_spark_light02_runner"] = loadfx( "maps/mp_maps/fx_mp_bridge_spark_light02_runner" ); + level._effect["fx_mp_bridge_spark_light"] = loadfx( "maps/mp_maps/fx_mp_bridge_spark_light" ); + level._effect["fx_mp_bridge_spark_loop"] = loadfx( "maps/mp_maps/fx_mp_bridge_spark_loop" ); + level._effect["fx_mp_bridge_sparks_loop_sm"] = loadfx( "maps/mp_maps/fx_mp_bridge_sparks_loop_sm" ); + level._effect["fx_mp_bridge_sparks_sm_runner"] = loadfx( "maps/mp_maps/fx_mp_bridge_sparks_sm_runner" ); + level._effect["fx_vertigo_rectangle_light01"] = loadfx( "light/fx_vertigo_rectangle_light01" ); + level._effect["fx_mp_bridge_god_ray_01"] = loadfx( "maps/mp_maps/fx_mp_bridge_god_ray_01" ); + level._effect["fx_mp_bridge_god_ray_02"] = loadfx( "maps/mp_maps/fx_mp_bridge_god_ray_02" ); + level._effect["fx_mp_bridge_god_ray_03"] = loadfx( "maps/mp_maps/fx_mp_bridge_god_ray_03" ); + level._effect["fx_bridge_street_light"] = loadfx( "light/fx_bridge_street_light" ); + level._effect["fx_vertigo_vista_glare01"] = loadfx( "light/fx_vertigo_vista_glare01" ); + level._effect["fx_vertigo_vista_glare02"] = loadfx( "light/fx_vertigo_vista_glare02" ); + level._effect["fx_bridge_vista_glare_red"] = loadfx( "light/fx_bridge_vista_glare_red" ); + level._effect["fx_mp_light_cougar_vehicle"] = loadfx( "maps/mp_maps/fx_mp_light_cougar_vehicle" ); + level._effect["fx_mp_light_cmd_vehicle_cab"] = loadfx( "maps/mp_maps/fx_mp_light_cmd_vehicle_cab" ); + level._effect["fx_mp_light_cmd_vehicle_trailer"] = loadfx( "maps/mp_maps/fx_mp_light_cmd_vehicle_trailer" ); + level._effect["fx_bridge_rectangle_light"] = loadfx( "light/fx_bridge_rectangle_light" ); + level._effect["fx_dust_crumble_lg_runner"] = loadfx( "dirt/fx_dust_crumble_lg_runner" ); + level._effect["fx_dust_crumble_windy_runner"] = loadfx( "dirt/fx_dust_crumble_windy_runner" ); + level._effect["fx_mp_bridge_blowing_ash"] = loadfx( "maps/mp_maps/fx_mp_bridge_blowing_ash" ); + level._effect["fx_mp_bridge_blowing_dust"] = loadfx( "maps/mp_maps/fx_mp_bridge_blowing_dust" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_castaway_air_dust_blow"] = loadfx( "maps/mp_maps/fx_mp_castaway_air_dust_blow" ); + level._effect["fx_mp_bridge_air_dust_blow"] = loadfx( "maps/mp_maps/fx_mp_bridge_air_dust_blow" ); + level._effect["fx_paper_interior_short"] = loadfx( "debris/fx_paper_interior_short" ); + level._effect["fx_lf_mp_bridge_sun"] = loadfx( "lens_flares/fx_lf_mp_bridge_sun" ); + level._effect["fx_mp_elec_spark_burst_xsm_thin"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin" ); + level._effect["fx_mp_light_police_car"] = loadfx( "maps/mp_maps/fx_mp_light_police_car" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim = []; + level.scr_anim["fxanim_props"] = []; + level.scr_anim["fxanim_props"]["seagull_circle_01"] = %fxanim_gp_seagull_circle_01_anim; + level.scr_anim["fxanim_props"]["seagull_circle_02"] = %fxanim_gp_seagull_circle_02_anim; + level.scr_anim["fxanim_props"]["seagull_circle_03"] = %fxanim_gp_seagull_circle_03_anim; + level.scr_anim["fxanim_props"]["wirespark_long"] = %fxanim_gp_wirespark_long_anim; + level.scr_anim["fxanim_props"]["wirespark_med"] = %fxanim_gp_wirespark_med_anim; +} + +#using_animtree("fxanim_props_dlc3"); + +precache_fxanim_props_dlc3() +{ + level.scr_anim["fxanim_props_dlc3"] = []; + level.scr_anim["fxanim_props_dlc3"]["wires_01"] = %fxanim_mp_bridge_wires_01_anim; + level.scr_anim["fxanim_props_dlc3"]["wires_02"] = %fxanim_mp_bridge_wires_02_anim; + level.scr_anim["fxanim_props_dlc3"]["wires_03"] = %fxanim_mp_bridge_wires_03_anim; + level.scr_anim["fxanim_props_dlc3"]["truck_parts"] = %viewmodel_fxanim_mp_bridge_truck_parts_anim; + level.scr_anim["fxanim_props_dlc3"]["truck_wires"] = %fxanim_mp_bridge_truck_wires_anim; + level.scr_anim["fxanim_props_dlc3"]["control_wires"] = %fxanim_mp_bridge_control_wires_anim; + level.scr_anim["fxanim_props_dlc3"]["wires_billboard"] = %fxanim_mp_bridge_wires_billboard_anim; + level.scr_anim["fxanim_props_dlc3"]["wires_generator"] = %fxanim_mp_bridge_wires_generator_anim; + level.scr_anim["fxanim_props_dlc3"]["wires_road_hole"] = %fxanim_mp_bridge_wires_road_hole_anim; +} diff --git a/MP/Maps/Dig/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Dig/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Dig/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Dig/aitype/enemy_dog_mp.gsc b/MP/Maps/Dig/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Dig/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Dig/character/character_mp_german_shepherd.gsc b/MP/Maps/Dig/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Dig/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Dig/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Dig/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Dig/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Dig/clientscripts/mp/_fxanim_dlc4.csc b/MP/Maps/Dig/clientscripts/mp/_fxanim_dlc4.csc new file mode 100644 index 0000000..4e385a4 --- /dev/null +++ b/MP/Maps/Dig/clientscripts/mp/_fxanim_dlc4.csc @@ -0,0 +1,239 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; + +fxanim_init_dlc( localclientnum ) +{ + a_fxanims = getentarray( localclientnum, "fxanim_dlc4", "targetname" ); + assert( a_fxanims.size <= level.fxanim_max_anims ); + + for ( i = 0; i < a_fxanims.size; i++ ) + { + if ( isdefined( a_fxanims[i].fxanim_parent ) ) + { + parent = getent( localclientnum, a_fxanims[i].fxanim_parent, "targetname" ); + a_fxanims[a_fxanims.size] = parent; + a_fxanims[i] thread _fxanim_model_link( localclientnum ); + continue; + } + + a_fxanims[i] thread fxanim_think( localclientnum ); + } + + if ( isdefined( level.fx_anim_level_dlc_init ) ) + level thread [[ level.fx_anim_level_dlc_init ]]( localclientnum ); +} + +#using_animtree("fxanim_props_dlc4"); + +fxanim_think( localclientnum, random_wait, random_speed ) +{ + self waittill_dobj( localclientnum ); + self thread _fxanim_hide(); + self _fxanim_wait(); + self useanimtree( #animtree ); + n_anim_count = self _fxanim_get_anim_count(); + self notify( "fxanim_start" ); + + for ( n_current_anim = 0; n_current_anim < n_anim_count; n_current_anim++ ) + { + str_scene = self _fxanim_get_scene_name( n_current_anim ); + + if ( !self _fxanim_modifier( str_scene ) ) + { + self _fxanim_animate( str_scene ); + self _fxanim_play_fx( localclientnum ); + } + + self _fxanim_change_anim( n_current_anim ); + } +} + +_fxanim_hide() +{ + if ( isdefined( self.fxanim_hide ) && self.fxanim_hide ) + { + self hide(); + + self waittill( "fxanim_start" ); + + self show(); + } +} + +_fxanim_modifier( str_scene ) +{ + switch ( str_scene ) + { + case "delete": + self delete(); + break; + case "hide": + self hide(); + break; + default: + return false; + break; + } + + return true; +} + +_fxanim_wait() +{ + if ( isdefined( self.fxanim_waittill_1 ) ) + { + if ( isdefined( self.fxanim_waittill_1 ) ) + _fxanim_change_anim( -1 ); + } + + if ( isdefined( self.fxanim_wait ) ) + wait( self.fxanim_wait ); + else if ( isdefined( self.fxanim_wait_min ) && isdefined( self.fxanim_wait_max ) ) + { + n_wait_time = randomfloatrange( self.fxanim_wait_min, self.fxanim_wait_max ); + wait( n_wait_time ); + } +} + +_fxanim_change_anim( n_fxanim_id ) +{ + str_waittill = undefined; + + if ( n_fxanim_id == -1 && isdefined( self.fxanim_waittill_1 ) ) + str_waittill = self.fxanim_waittill_1; + else if ( n_fxanim_id == 0 && isdefined( self.fxanim_waittill_2 ) ) + str_waittill = self.fxanim_waittill_2; + else if ( n_fxanim_id == 1 && isdefined( self.fxanim_waittill_3 ) ) + str_waittill = self.fxanim_waittill_3; + + if ( !isdefined( str_waittill ) && n_fxanim_id != -1 ) + self _fxanim_wait_for_anim_to_end( n_fxanim_id ); + else + { + a_changer = strtok( str_waittill, "_" ); + + level waittill( str_waittill ); + } +} + +_fxanim_wait_for_anim_to_end( n_fxanim_id ) +{ + str_scene = _fxanim_get_scene_name( n_fxanim_id ); + + if ( issubstr( str_scene, "_loop" ) ) + self waittillmatch( "looping anim", "end" ); + else + self waittillmatch( "single anim", "end" ); +} + +_fxanim_animate( str_scene ) +{ + if ( !isdefined( level.scr_anim["fxanim_props_dlc4"][str_scene] ) ) + { +/# + if ( isdefined( str_scene ) ) + println( "Error: fxanim entity at " + self.origin + " is missing animation: " + str_scene ); + else + println( "Error: fxanim entity at " + self.origin + " is missing animation" ); +#/ + return; + } + + self animscripted( level.scr_anim["fxanim_props_dlc4"][str_scene], 1.0, 0.0, 1.0 ); +} + +_fxanim_play_fx( localclientnum ) +{ + if ( isdefined( self.fxanim_fx_1 ) ) + { + assert( isdefined( self.fxanim_fx_1_tag ), "KVP fxanim_fx_1_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_1 ), self, self.fxanim_fx_1_tag ); + } + + if ( isdefined( self.fxanim_fx_2 ) ) + { + assert( isdefined( self.fxanim_fx_2_tag ), "KVP fxanim_fx_2_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_2 ), self, self.fxanim_fx_2_tag ); + } + + if ( isdefined( self.fxanim_fx_3 ) ) + { + assert( isdefined( self.fxanim_fx_3_tag ), "KVP fxanim_fx_3_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_3 ), self, self.fxanim_fx_3_tag ); + } + + if ( isdefined( self.fxanim_fx_4 ) ) + { + assert( isdefined( self.fxanim_fx_4_tag ), "KVP fxanim_fx_4_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_4 ), self, self.fxanim_fx_4_tag ); + } + + if ( isdefined( self.fxanim_fx_5 ) ) + { + assert( isdefined( self.fxanim_fx_5_tag ), "KVP fxanim_fx_5_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_5 ), self, self.fxanim_fx_5_tag ); + } +} + +_fxanim_get_anim_count() +{ + assert( isdefined( self.fxanim_scene_1 ), "fxanim at position " + self.origin + " needs at least one scene defined. Use the KVP fxanim_scene_1" ); + n_fx_count = 0; + + if ( !isdefined( self.fxanim_scene_2 ) ) + n_fx_count = 1; + else if ( !isdefined( self.fxanim_scene_3 ) ) + n_fx_count = 2; + else + n_fx_count = 3; + + return n_fx_count; +} + +_fxanim_get_scene_name( n_anim_id ) +{ + str_scene_name = undefined; + + switch ( n_anim_id ) + { + case 0: + str_scene_name = self.fxanim_scene_1; + break; + case 1: + str_scene_name = self.fxanim_scene_2; + break; + case 2: + str_scene_name = self.fxanim_scene_3; + break; + } + + return str_scene_name; +} + +_fxanim_model_link( localclientnum ) +{ + self waittill_dobj( localclientnum ); + assert( isdefined( self.fxanim_tag ), "Model at origin " + self.origin + " needs an fxanim_tag defined, to show which tag the model will link to" ); + m_parent = getent( localclientnum, self.fxanim_parent, "targetname" ); + assert( isdefined( m_parent ), "Model at origin " + self.origin + " does not have a proper parent. Make sure the fxanim_parent matches the targetname of the fxanim" ); + m_parent waittill_dobj( localclientnum ); + self.origin = m_parent gettagorigin( self.fxanim_tag ); + self.angles = m_parent gettagangles( self.fxanim_tag ); + self linkto( m_parent, self.fxanim_tag ); + + if ( isdefined( self.fxanim_hide ) ) + { + self hide(); + + m_parent waittill( "fxanim_start" ); + + self show(); + } +} + +getfx( fx ) +{ + assert( isdefined( level._effect[fx] ), "Fx " + fx + " is not defined in level._effect." ); + return level._effect[fx]; +} diff --git a/MP/Maps/Dig/clientscripts/mp/createfx/mp_dig_fx.csc b/MP/Maps/Dig/clientscripts/mp/createfx/mp_dig_fx.csc new file mode 100644 index 0000000..a25605b --- /dev/null +++ b/MP/Maps/Dig/clientscripts/mp/createfx/mp_dig_fx.csc @@ -0,0 +1,1732 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -975.73, -682.379, 51.1027 ); + ent.v["angles"] = ( 270.883, 173.792, -175.177 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -442.653, -1235.4, 64.2364 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 121.313, -686.781, 49.5086 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 129.259, 340.491, 52.1854 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -291.945, 1067.71, 48.3673 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -654.739, 1262.91, 96.0455 ); + ent.v["angles"] = ( 271.081, 83.1622, -84.3737 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 771.471, -959.553, 41.3816 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -150.143, -1124.88, 48.2339 ); + ent.v["angles"] = ( 273.25, 68.7368, -70.2869 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -984.748, 313.495, 51.0594 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1308.08, 636.018, 41.0502 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1308.91, 299.631, 46.7513 ); + ent.v["angles"] = ( 357.949, 269.471, -0.139436 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1453.27, -1389.48, 71.947 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -455.187, 296.714, 4.60001 ); + ent.v["angles"] = ( 270.13, 34.2417, -29.4542 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2008.97, -168.12, 310.786 ); + ent.v["angles"] = ( 87.7569, 199.254, 17.5658 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1069.13, 86.0965, 267.875 ); + ent.v["angles"] = ( 88.9043, 323.553, 144.846 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1167.5, -391.909, 46.391 ); + ent.v["angles"] = ( 358.953, 269.383, 0.866636 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1385.91, -386.256, 48.1052 ); + ent.v["angles"] = ( 359.949, 269.501, 0.860007 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1358.06, 127.957, 48.4917 ); + ent.v["angles"] = ( 359.948, 269.536, 0.859066 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1675.14, 130.724, 81 ); + ent.v["angles"] = ( 358.991, 262.521, 0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1667.36, -224.431, 80.4604 ); + ent.v["angles"] = ( 358.948, 269.521, 0.859211 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -981.79, -915.064, 48.2275 ); + ent.v["angles"] = ( 359.938, 266.623, -0.137793 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -303.34, -415.977, 50.7424 ); + ent.v["angles"] = ( 0.765307, 259.487, -0.975561 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -764.705, -882.303, 46.4442 ); + ent.v["angles"] = ( 358.948, 269.521, 0.859211 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -444.67, -92.0192, 45.5844 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -712.43, 626.698, 47.3168 ); + ent.v["angles"] = ( 359.948, 269.519, -0.140769 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -944.994, 757.274, 47.77 ); + ent.v["angles"] = ( 358.948, 269.521, 0.859211 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -115.052, 402.837, 48.9847 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -125.63, 151.183, 46.4389 ); + ent.v["angles"] = ( 0.130779, 227.595, -1.17077 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 582.65, 542.296, 46.0211 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 425.887, 263.578, 49.2162 ); + ent.v["angles"] = ( 358.948, 269.521, -0.140792 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 530.395, -65.4206, 45.0844 ); + ent.v["angles"] = ( 358.948, 269.521, -0.140788 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 198.044, -351.214, 45.5127 ); + ent.v["angles"] = ( 1.94424, 269.671, 2.86038 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 171.534, 27.1388, 49.854 ); + ent.v["angles"] = ( 358.948, 269.521, -2.14079 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1103.69, 823.073, 123 ); + ent.v["angles"] = ( 358.948, 269.521, 1.85921 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1018.38, 325.428, 120.796 ); + ent.v["angles"] = ( 357.919, 271.507, -1.17763 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 949.245, -86.4016, 120 ); + ent.v["angles"] = ( 359.887, 266.572, -1.13692 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1018.23, -335.311, 122.491 ); + ent.v["angles"] = ( 358.948, 269.521, -0.140792 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 977.613, -1074.53, 121 ); + ent.v["angles"] = ( 358.948, 269.521, -0.140792 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 91.8562, -1289.38, 57.745 ); + ent.v["angles"] = ( 359.945, 269.52, -0.107685 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1209.94, -1480.36, 72.3 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1647.7, -1512.51, 75.9932 ); + ent.v["angles"] = ( 358.948, 269.521, -1.14079 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1465, -1152.35, 50.6657 ); + ent.v["angles"] = ( 358.153, 267.511, 0.897194 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1471.32, -748.424, 40.6138 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1760, -764.091, 83 ); + ent.v["angles"] = ( 0, 267.556, 1.89389 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1646.32, -472.952, 78.4257 ); + ent.v["angles"] = ( 358.948, 269.521, 0.859211 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1107.6, 54.0699, 37.6219 ); + ent.v["angles"] = ( 359.801, 272.531, 0.747811 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1267.56, -714.212, 46.3197 ); + ent.v["angles"] = ( 357.949, 269.471, 2.86057 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1253.58, -895.33, 44.3465 ); + ent.v["angles"] = ( 0.945345, 269.621, 1.85912 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1020.8, -1206.86, 49.8449 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -224.186, -431.846, 51.4973 ); + ent.v["angles"] = ( 358.659, 299.542, 1.94962 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -975.899, 1193.7, 37.5132 ); + ent.v["angles"] = ( 357.98, 267.47, -2.06838 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1269.92, 1286.3, 40.8719 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1475.66, 1192.44, 72.625 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1699.99, 1455.44, 33.0763 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1073.47, 1221.27, 40.937 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 923.303, 163.749, 328.984 ); + ent.v["angles"] = ( 88.9042, 323.554, 141.847 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 915.939, -29.2198, 302.891 ); + ent.v["angles"] = ( 88.9042, 323.553, 142.846 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 913.955, -440.54, 245.281 ); + ent.v["angles"] = ( 88.9042, 323.553, 142.846 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1116.28, 339.866, 282.891 ); + ent.v["angles"] = ( 88.9042, 323.553, 142.846 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 568.512, -472.726, 220.998 ); + ent.v["angles"] = ( 88.9042, 323.553, 142.846 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -864.392, -1125.99, 185.998 ); + ent.v["angles"] = ( 88.9042, 323.553, 142.846 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -150.687, 710.23, 46.6714 ); + ent.v["angles"] = ( 359.947, 269.623, 1.85701 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1469.65, -908.833, 42.673 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1511.61, 402.533, 81 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1707.32, 516.114, 83 ); + ent.v["angles"] = ( 359.252, 263.528, 1.95341 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1755.23, -42.2177, 82 ); + ent.v["angles"] = ( 359.408, 260.532, 0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1470.57, 861.328, 88.625 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1225.04, 890.366, 90.125 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -128.653, -828.434, 46.159 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -12097.5, 1256.43, -536.39 ); + ent.v["angles"] = ( 359.888, 267.789, -2.10462 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -8767.93, -4166.24, -1331.77 ); + ent.v["angles"] = ( 2.99625, 270.677, -2.11048 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -6951.2, -7860.92, -334.799 ); + ent.v["angles"] = ( 359.888, 267.789, -2.10462 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3569.52, -10851.6, 334.967 ); + ent.v["angles"] = ( 359.888, 267.789, -2.10462 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -442.389, -638.749, 2.40001 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -18121.5, -7663.97, -863.272 ); + ent.v["angles"] = ( 359.888, 267.789, -2.10462 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1777.02, 331.411, 82 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1712.06, -941.167, 80 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1691.64, -391.157, 77.996 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1669.09, -29.8378, 88.225 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1739.31, 510.762, 80 ); + ent.v["angles"] = ( 358.948, 269.521, -0.14079 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -727.853, -974.935, 41.5098 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1109.1, -925.888, 40.2306 ); + ent.v["angles"] = ( 359.947, 269.571, 2.85873 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -90.9172, -943.541, 43.1525 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 541.239, -671.262, 47.9328 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 709, -141.581, 81.8557 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1028.07, -776.791, 120.465 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1027.42, 579.538, 135.1 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 603.89, 567.279, 46.7686 ); + ent.v["angles"] = ( 358.948, 269.521, -0.14079 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 450.735, 361.061, 45.8586 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -744.916, 653.466, 46.999 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1109.28, 567.716, 46.0958 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1240.78, 109.233, 45.5401 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1401.13, 265.756, 80.5352 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -931.289, 1173.87, 36.9994 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1441.9, 1533.16, 30.7975 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1217.39, 1374.92, 32.3827 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1632.42, 1876.16, 104 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -137.432, 600.148, 51.6498 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 393.219, -380.601, 42.4149 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1271.31, -452.637, 47.8861 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1100.93, 250.476, 157.061 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -710.217, 656.387, 92.0435 ); + ent.v["angles"] = ( 357.802, 272.47, 2.74941 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -133.639, 689.767, 105.909 ); + ent.v["angles"] = ( 355.953, 269.337, 0.868661 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 458.637, 419.364, 106.269 ); + ent.v["angles"] = ( 357.953, 269.367, 0.867047 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1036.83, 731.826, 200 ); + ent.v["angles"] = ( 356.951, 269.421, -0.137209 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1031.53, -699.946, 169 ); + ent.v["angles"] = ( 359.947, 269.571, 0.858728 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 81.4832, -844.086, 132.785 ); + ent.v["angles"] = ( 354.953, 269.321, 2.86987 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1675.49, -265.352, 131.125 ); + ent.v["angles"] = ( 354.953, 269.321, 2.86987 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1100.16, -60.6596, 100.96 ); + ent.v["angles"] = ( 355.11, 266.314, 3.13037 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 675.183, 710.305, 128.792 ); + ent.v["angles"] = ( 354.953, 269.321, 2.86987 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1237.52, -1440.27, 166.125 ); + ent.v["angles"] = ( 357.949, 269.472, -3.13944 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -381.467, -329.471, 120.739 ); + ent.v["angles"] = ( 354.953, 269.321, -1.13013 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -693.051, -694.344, 115.509 ); + ent.v["angles"] = ( 354.953, 269.321, 2.86987 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4102.85, -1085.76, 288.98 ); + ent.v["angles"] = ( 359.888, 267.789, -2.10462 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1116.78, -619.99, 313.501 ); + ent.v["angles"] = ( 88.9041, 323.555, 145.848 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 915.666, -263.719, 323.486 ); + ent.v["angles"] = ( 88.9042, 323.553, 142.846 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 125.188, 217.013, 153.71 ); + ent.v["angles"] = ( 88.9044, 323.551, 105.844 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -716.807, 840.367, 47.6264 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 831.69, 117.031, -33.2341 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 820.294, -65.3089, -36.8615 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 832.56, -269.661, -34.5599 ); + ent.v["angles"] = ( 358.948, 269.521, -1.14079 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 818.498, -109.025, -38.5274 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_dig_sun1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -778139, -2182370.0, 1005360.0 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1323.21, -357.37, 118.457 ); + ent.v["angles"] = ( 354.901, 266.31, -0.863788 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 669.13, -587.953, 92.4911 ); + ent.v["angles"] = ( 359.947, 269.571, 2.85874 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1675.16, -1388.57, 116 ); + ent.v["angles"] = ( 357.953, 269.367, 0.867048 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1661.14, 495.875, 136.125 ); + ent.v["angles"] = ( 355.464, 260.304, 0.624617 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -429.544, -52.0209, 150.475 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 343.584, 702.894, 159.215 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1262.1, -1061.89, 152.575 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 134.492, -537.847, 144.595 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_godray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -653.831, -1789.85, 240.524 ); + ent.v["angles"] = ( 19.6942, 77.2253, 80.3946 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 543.913, -1129.57, 261.248 ); + ent.v["angles"] = ( 87.8034, 195.382, -73.3072 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 778.685, -1139.08, 268.117 ); + ent.v["angles"] = ( 88.9044, 323.555, 53.8487 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 857.281, -1182.28, 121 ); + ent.v["angles"] = ( 358.801, 182.493, 1.20042 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 836.518, -242.665, 54.0575 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 837.238, -8.02314, 56.6063 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 724.74, -143.945, 47.875 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1126.91, -166.919, 357.385 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1175.88, -479.894, 349.311 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1113.42, -83.2409, 335.375 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1089.74, -594.583, 151.575 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -162.782, 1517.97, 280.856 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1149.51, 721.408, 204.167 ); + ent.v["angles"] = ( 87.9176, 317.422, 96.7181 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -255.126, 866.64, 166.274 ); + ent.v["angles"] = ( 87.9176, 317.422, 96.7181 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -63.0658, 915.085, 205.502 ); + ent.v["angles"] = ( 87.287, 270.346, 49.6781 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 666.956, 460.414, 111.737 ); + ent.v["angles"] = ( 89.5803, 354.513, 135.775 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 54.7197, -1593.84, 231.446 ); + ent.v["angles"] = ( 89.5803, 354.513, 136.774 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1260.73, 1587.88, 137.292 ); + ent.v["angles"] = ( 88.2757, 228.508, 9.77534 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -431.035, 1056.25, 167.487 ); + ent.v["angles"] = ( 89.2419, 241.45, 22.714 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -958.992, 497.061, 132.004 ); + ent.v["angles"] = ( 89.2419, 241.449, 22.7132 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -971.242, -1755.72, 249.997 ); + ent.v["angles"] = ( 87.6807, 31.4895, 172.747 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_flood_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -38.7034, -1621.39, 84.7233 ); + ent.v["angles"] = ( 339.971, 268.587, 0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1.90754, 898.943, 256.875 ); + ent.v["angles"] = ( 88.2757, 228.508, 9.77534 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1441.62, 963.417, 216.875 ); + ent.v["angles"] = ( 88.2756, 228.508, 134.776 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1498.6, 722.401, 214.875 ); + ent.v["angles"] = ( 88.2756, 228.508, 42.7757 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1147.27, 836.246, 205.875 ); + ent.v["angles"] = ( 88.2757, 228.508, 9.77534 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -607.801, -432.14, 49.5 ); + ent.v["angles"] = ( 357.838, 294.507, 1.14724 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -700.377, 423.074, 43.498 ); + ent.v["angles"] = ( 357.099, 321.524, 0.931568 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -363.255, 549.215, 48.4972 ); + ent.v["angles"] = ( 359.465, 251.531, 0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -143.952, 1012.57, 155.425 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -518.783, 738.786, 183.035 ); + ent.v["angles"] = ( 0.412715, 241.558, 1.0184 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1661.03, 585.476, 196 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1652.04, -51.402, 195.331 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1654.67, -656.996, 177.377 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1659.15, -1273.91, 175.998 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 85.4724, -889.655, 137.183 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 999.48, -345.859, 206 ); + ent.v["angles"] = ( 358.948, 269.521, 0.859211 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1062.8, 841.45, 219.278 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 629.767, 690.701, 156.481 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 460.46, 391.275, 153.13 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 360.776, 43.45, 149.764 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -143.863, -649.091, 153.709 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -414.27, -464.434, 105.02 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_birds" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1883.91, -6707.73, -1902.99 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_birds" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2134.69, 6130.38, -1397.21 ); + ent.v["angles"] = ( 344.774, 280.496, 5.89231 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -817.262, 1597.98, 320.641 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1045.73, 1597.97, 319.932 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 47.0497, -1422.71, 129.296 ); + ent.v["angles"] = ( 358.948, 269.521, -0.14079 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -653.318, -1477.99, 169.972 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 649.691, -608.587, 136.677 ); + ent.v["angles"] = ( 359.948, 269.536, 0.859066 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -850.343, 878.057, 120.551 ); + ent.v["angles"] = ( 359.073, 275.521, -1.24449 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -436.727, 510.041, 106.495 ); + ent.v["angles"] = ( 1.05096, 274.478, -1.22816 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 94.3003, -885.913, 54.0664 ); + ent.v["angles"] = ( 358.772, 270.589, -1.64526 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 425.107, -356.602, 45.5697 ); + ent.v["angles"] = ( 358.476, 273.461, -1.33844 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 725.922, -15.7982, 94 ); + ent.v["angles"] = ( 359.895, 266.534, 18.6991 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 645.512, -65.1457, 69.4701 ); + ent.v["angles"] = ( 359.268, 265.266, 18.6996 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 75.7466, 732.118, 45.9536 ); + ent.v["angles"] = ( 0.946264, 269.447, -2.14072 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 792.792, 521.818, 45.5704 ); + ent.v["angles"] = ( 358.948, 269.521, -1.14079 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 648.168, 813.298, 51.7547 ); + ent.v["angles"] = ( 358.734, 257.521, -0.897129 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 934.35, 847.926, 85.8486 ); + ent.v["angles"] = ( 1.54767, 266.846, 31.9675 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -91.6783, -72.5055, 166.449 ); + ent.v["angles"] = ( 359.46, 259.533, 2.9983 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -680.881, -322.319, 165.462 ); + ent.v["angles"] = ( 1.09127, 290.635, 0.451672 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -247.309, -303.674, 163.697 ); + ent.v["angles"] = ( 1.84825, 257.637, -0.458686 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1285.1, -1310.03, 190.252 ); + ent.v["angles"] = ( 1.181, 268.631, 0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -611.207, -1471.89, 176.07 ); + ent.v["angles"] = ( 1.09127, 290.635, 0.451672 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -549.428, 1552.88, 231.447 ); + ent.v["angles"] = ( 1.11342, 287.634, 0.393934 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1707.48, 741.902, 214.38 ); + ent.v["angles"] = ( 10.091, 290.707, 3.45868 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -557.063, -111.396, 163.761 ); + ent.v["angles"] = ( 359.745, 321.533, -0.476057 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 958.125, 74.4883, 263.291 ); + ent.v["angles"] = ( 88.9043, 323.553, 144.846 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1364.68, -76.8785, 47.3894 ); + ent.v["angles"] = ( 359.952, 270.466, -0.175114 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1074.96, -1447.93, 217.732 ); + ent.v["angles"] = ( 351.896, 266.302, -0.931192 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -81.2507, -1451.58, 175.088 ); + ent.v["angles"] = ( 358.871, 310.609, 0.797744 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -963.608, -838.785, 184.791 ); + ent.v["angles"] = ( 1.17098, 275.632, 0.153807 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -437.997, -1016.67, 168.033 ); + ent.v["angles"] = ( 1.17098, 275.632, 0.153807 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -926.055, -561.612, 159.214 ); + ent.v["angles"] = ( 1.1061, 247.626, -0.414009 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -847.896, -471.799, 162.992 ); + ent.v["angles"] = ( 0.508757, 332.636, 1.06585 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 900.209, 639.011, 235.326 ); + ent.v["angles"] = ( 1.17088, 260.63, -0.154546 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 478.409, 699.351, 171.698 ); + ent.v["angles"] = ( 0.702775, 321.637, 0.949207 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -661.673, 1163.88, 194.785 ); + ent.v["angles"] = ( 1.18062, 266.631, 0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 85.5207, 461.021, 142.501 ); + ent.v["angles"] = ( 1.18062, 266.631, -2.0313 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 227.509, 698.279, 152.342 ); + ent.v["angles"] = ( 1.14039, 251.628, -0.305606 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 586.755, 903.875, 161.163 ); + ent.v["angles"] = ( 1.17742, 272.632, 0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -883.915, 194.031, 165.5 ); + ent.v["angles"] = ( 359.813, 354.661, 0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1827.71, 1674.85, 139.561 ); + ent.v["angles"] = ( 2.64617, 335.639, -0.955142 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1842.24, 228.424, 190.943 ); + ent.v["angles"] = ( 0.735804, 280.643, -2.71529 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2022.71, 142.335, 273.779 ); + ent.v["angles"] = ( 2.59258, 332.636, -1.09231 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1438.32, -283.568, 140.871 ); + ent.v["angles"] = ( 358.851, 269.41, 0.634039 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1036.47, -483.024, 158.574 ); + ent.v["angles"] = ( 359.497, 187.342, 8.15861 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1107.15, 377.637, 137.291 ); + ent.v["angles"] = ( 3.63692, 322.033, -1.89879 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 0.806075, 198.02, 167.9 ); + ent.v["angles"] = ( 359.741, 183.63, 2.8839 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1108.73, 956.181, 194.268 ); + ent.v["angles"] = ( 1.92927, 287.316, -0.347119 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1491.47, 1049.1, 213.516 ); + ent.v["angles"] = ( 10.0616, 290.487, -1.70858 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2021.66, -418.366, 258.403 ); + ent.v["angles"] = ( 7.04448, 343.978, -3.21619 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1883.88, -882.392, 149.33 ); + ent.v["angles"] = ( 359.792, 314.423, -2.31977 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -829.753, -1471.98, 173.135 ); + ent.v["angles"] = ( 354.278, 269.322, -1.12202 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1376.66, -61.512, 171.625 ); + ent.v["angles"] = ( 358.839, 267.487, -1.09878 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1332.8, 58.874, 228.047 ); + ent.v["angles"] = ( 358.731, 261.486, -0.971446 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1452.51, -92.7596, 313.78 ); + ent.v["angles"] = ( 0.544976, 205.626, -1.04779 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1122.77, -316.76, 243.233 ); + ent.v["angles"] = ( 0.413229, 198.627, -1.10639 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1219.04, 503.105, 249.642 ); + ent.v["angles"] = ( 0.295325, 192.629, -1.14351 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1669.12, -1210.67, 80 ); + ent.v["angles"] = ( 358.89, 266.521, -1.08417 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2001.38, -287.672, 287.781 ); + ent.v["angles"] = ( 2.59258, 332.636, -1.09231 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 360.513, 590.086, 43.9797 ); + ent.v["angles"] = ( 0.502629, 284.474, 0.918724 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -780.043, -55.2936, 238.556 ); + ent.v["angles"] = ( 0.945547, 269.621, 2.85912 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -84.3017, -13.1354, 259.847 ); + ent.v["angles"] = ( 0.945547, 269.621, 2.85912 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -818.997, -64.3306, 163.757 ); + ent.v["angles"] = ( 358.963, 268.521, 0.87744 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -340.637, 1415.26, 98.2628 ); + ent.v["angles"] = ( 358.948, 269.521, -2.14079 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -607.594, 1445.38, 97.2966 ); + ent.v["angles"] = ( 358.948, 269.521, -2.14079 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1796.13, 215.671, 129 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 280.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1555.5, 461.776, 147.516 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 276.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1220.86, 362.402, 99.7544 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -446.422, 253.146, 73.2718 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 266.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -213.107, 412.098, 75.2223 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 227.0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -385.082, 251.864, 47.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 266.0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -699.216, -715.091, 85.9836 ); + ent.v["angles"] = ( 359, 260.017, -1 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 167.585, -791.978, 124.497 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 261.0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -897.901, -895.305, 91 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 684.925, -793.659, 145.478 ); + ent.v["angles"] = ( 357.775, 245.029, -0.707484 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 584.827, -828.038, 41.6965 ); + ent.v["angles"] = ( 1.71852, 268.325, -5.28397 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 302.475, -247.251, 85.7498 ); + ent.v["angles"] = ( 359.072, 264.018, -1.06732 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 92.3654, -208.68, 101.001 ); + ent.v["angles"] = ( 359.754, 295.012, -1.39269 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1078.87, 545.001, 164.504 ); + ent.v["angles"] = ( 359.072, 264.018, -1.06732 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1056.77, -249.934, 163.863 ); + ent.v["angles"] = ( 359.072, 264.018, -1.06732 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 956.673, -32.5662, 164.959 ); + ent.v["angles"] = ( 359.086, 274.019, -0.161166 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 249.666, -596.808, 148.796 ); + ent.v["angles"] = ( 359.072, 264.018, -1.06732 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 683.971, 486.11, 161.286 ); + ent.v["angles"] = ( 359.072, 264.018, 0.932685 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -224.668, 848.046, 92.9363 ); + ent.v["angles"] = ( 359.072, 264.018, 0.932685 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -377.868, 1427.86, 143.875 ); + ent.v["angles"] = ( 359.025, 267.018, 0.88285 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1195.32, 1214.04, 86.7745 ); + ent.v["angles"] = ( 359.072, 264.018, 0.932685 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1574.97, 1523.24, 74.625 ); + ent.v["angles"] = ( 359.058, 266.018, -0.100112 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1500.7, 1592.14, 76.9619 ); + ent.v["angles"] = ( 358.862, 279.019, 0.660769 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1793.15, -566.822, 131 ); + ent.v["angles"] = ( 359.922, 274.032, 0.809581 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1716.18, -1098.13, 123.5 ); + ent.v["angles"] = ( 358.965, 271.018, 0.812661 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1462.64, -631.445, 99.9975 ); + ent.v["angles"] = ( 359.923, 274.032, 0.809605 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 188.737, -1117.3, 153.943 ); + ent.v["angles"] = ( 0.176856, 256.034, 0.793804 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1774.75, 1527.49, 71.625 ); + ent.v["angles"] = ( 359.156, 287.02, -0.431177 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -764.655, 1141.59, 87.9259 ); + ent.v["angles"] = ( 359.058, 266.018, -0.100112 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1239.63, -73.4638, 160.742 ); + ent.v["angles"] = ( 357.949, 266.804, 25.922 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1459.88, -281.93, 316.143 ); + ent.v["angles"] = ( 0.544976, 205.626, -1.04779 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 823.542, 313.234, 52.0039 ); + ent.v["angles"] = ( 359.072, 264.018, 0.932685 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 830.694, 227.968, 14.4987 ); + ent.v["angles"] = ( 19.932, 271.818, -0.463749 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1035.84, -797.458, 162.958 ); + ent.v["angles"] = ( 359.054, 263.018, -1.05096 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -69.6524, 899.951, 96.897 ); + ent.v["angles"] = ( 359, 260.018, -1 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1138.29, 671.473, 83.5 ); + ent.v["angles"] = ( 359.11, 266.018, -1.09904 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1035.15, 783.365, 64.4414 ); + ent.v["angles"] = ( 359.169, 269.017, -1.14411 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1847.65, 670.064, 126.339 ); + ent.v["angles"] = ( 359.601, 293.014, -0.388734 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -905.637, 473.749, 83 ); + ent.v["angles"] = ( 357.263, 321.092, -0.897471 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -702.686, 170.007, 90.5329 ); + ent.v["angles"] = ( 358.352, 326.077, -1.13201 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -989.89, -352.779, 100.273 ); + ent.v["angles"] = ( 358.686, 240.042, 2.56371 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -949.251, -812.154, 180.768 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 279.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_gas_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1380.25, 610.338, 182.788 ); + ent.v["angles"] = ( 359.375, 19.951, 8.97843 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_gas_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1108.34, 230.326, 160.706 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 8758.18, -2601.51, 1789.17 ); + ent.v["angles"] = ( 358.945, 240.805, -1.8246 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1777.36, -5350.6, 244.209 ); + ent.v["angles"] = ( 358.702, 232.807, -1.65996 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1860.58, -5040.41, 57.0436 ); + ent.v["angles"] = ( 359.778, 264.792, -2.09578 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3650.01, 2824.46, 343.516 ); + ent.v["angles"] = ( 2.70279, 262.684, -2.08911 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5223.45, 3715.88, 1175.8 ); + ent.v["angles"] = ( 4.05135, 238.826, 4.86698 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3037.07, 5817.13, 1213 ); + ent.v["angles"] = ( 358.316, 217.806, -1.26734 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1680.86, 2881.89, 111.145 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3002.88, 2118.22, -9.59973 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 237.0 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3479.83, -186.319, -269.401 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -6203.93, 1556.99, -66.1765 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -15649, -1649.3, -1111 ); + ent.v["angles"] = ( 359.888, 267.789, -2.10462 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1426.06, -2082.68, 27.4772 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 212.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1044.48, 2369.78, 305.75 ); + ent.v["angles"] = ( 360, 317, -3 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -9343.47, -2046.97, -1305.17 ); + ent.v["angles"] = ( 3.44027, 285.694, -1.26256 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4950.48, -927.538, -319.972 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4000.32, -4003.76, 63.2383 ); + ent.v["angles"] = ( 7, 289, 0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 9576.57, -8049.61, 1798.74 ); + ent.v["angles"] = ( 358.589, 228.808, -1.56547 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -132.897, 1020.79, 48.591 ); + ent.v["angles"] = ( 0, 266.575, 2.90993 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1267.21, -1107.79, 37.4418 ); + ent.v["angles"] = ( 352.827, 272.212, 2.09263 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1207.49, -73.5797, 39.7421 ); + ent.v["angles"] = ( 271.109, 2.68804, -3.90122 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 147.253, -1602.43, 75 ); + ent.v["angles"] = ( 271.109, 2.68804, -3.90122 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -877.604, -1665, 72 ); + ent.v["angles"] = ( 271.109, 2.68804, -3.90122 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1729.02, -1693.4, 73.9989 ); + ent.v["angles"] = ( 271.109, 2.68804, -3.90122 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1768.6, -420.735, 80.4995 ); + ent.v["angles"] = ( 271.109, 2.68804, -3.90122 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -809.158, 195.222, 48.2225 ); + ent.v["angles"] = ( 271.109, 2.68804, -3.90122 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -194.057, 295.056, 127.152 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 266.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1334.78, 1486.89, 130.006 ); + ent.v["angles"] = ( 356.963, 293.476, -1.22082 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2024.96, -256.793, 301.886 ); + ent.v["angles"] = ( 88.6934, 211.131, 30.4356 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 18.8065, 873.257, 56.4626 ); + ent.v["angles"] = ( 2.94584, 269.721, -0.140539 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1365.13, 1549.66, 30.8293 ); + ent.v["angles"] = ( 0.944308, 266.469, 0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 374.262, 818.93, 56.3473 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 6.3894, -673.185, 97.5047 ); + ent.v["angles"] = ( 358.74, 242.015, -0.64204 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -9.49943, -632.315, 131.625 ); + ent.v["angles"] = ( 358.74, 242.015, -0.64204 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -878.104, -711.226, 95.2438 ); + ent.v["angles"] = ( 359.358, 278.016, -1.26004 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -846.985, -646.685, 115.913 ); + ent.v["angles"] = ( 358.751, 187.002, 0.664114 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -323.034, -128.45, 164.125 ); + ent.v["angles"] = ( 358.634, 230.013, -0.365972 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -319.125, -214.761, 164.922 ); + ent.v["angles"] = ( 358.617, 227.012, -0.293967 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -557.213, -161.625, 171.036 ); + ent.v["angles"] = ( 359.926, 302.01, -1.41222 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -878.347, 346.759, 96.1744 ); + ent.v["angles"] = ( 357.589, 336.104, -1.57558 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1403.9, 408.837, 83.5629 ); + ent.v["angles"] = ( 357.22, 318.089, -0.752899 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1014.59, -369.348, 71.6979 ); + ent.v["angles"] = ( 359.394, 225.057, -0.183771 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1583.7, -684.076, 80 ); + ent.v["angles"] = ( 359.479, 334.037, -0.386453 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1108.27, -1026.02, 91 ); + ent.v["angles"] = ( 359.385, 316.036, -0.206509 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1809.69, -1509.75, 128.469 ); + ent.v["angles"] = ( 358.52, 322.024, 0.82962 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1529.5, -1519.1, 117.215 ); + ent.v["angles"] = ( 0.930588, 228.046, 0.418486 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -319.891, -1143.88, 89.2982 ); + ent.v["angles"] = ( 359.502, 199.017, -0.210622 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -548.541, -401.24, 48.4856 ); + ent.v["angles"] = ( 359.103, 277.026, -0.530978 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -688.887, -590.416, 48.1295 ); + ent.v["angles"] = ( 359.504, 308.026, -0.917323 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -199.19, -698.89, 49.1078 ); + ent.v["angles"] = ( 359.254, 202.017, -0.269819 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 9.95442, 443.757, 128.125 ); + ent.v["angles"] = ( 359.504, 308.026, -0.917323 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 7.38482, 327.405, 97.125 ); + ent.v["angles"] = ( 359.504, 308.026, -0.917323 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 195.711, -1324.31, 144.091 ); + ent.v["angles"] = ( 359.449, 257.013, 0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -870.122, 963.313, 84.6703 ); + ent.v["angles"] = ( 359.169, 269.017, -1.14411 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -725.204, 817.853, 48.6131 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 299.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1032.52, 75.7198, 175.878 ); + ent.v["angles"] = ( 359.958, 272.414, -0.139393 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1071.17, -892.618, 120 ); + ent.v["angles"] = ( 358.948, 269.521, -0.140792 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 682.348, 487.427, 155.49 ); + ent.v["angles"] = ( 88.9042, 323.553, 142.846 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -509.583, -1615.77, 117.2 ); + ent.v["angles"] = ( 0.930588, 228.046, 0.418486 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -742.329, -1525.19, 72 ); + ent.v["angles"] = ( 359.945, 269.52, -0.107685 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -53.5563, -1520.48, 73 ); + ent.v["angles"] = ( 359.945, 269.52, -0.107685 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -439.636, -1518.94, 72 ); + ent.v["angles"] = ( 359.945, 269.52, -0.107685 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -155.602, 1176.58, 226.688 ); + ent.v["angles"] = ( 88.6728, 321.83, 103.094 ); + ent.v["delay"] = -82; +} diff --git a/MP/Maps/Dig/clientscripts/mp/mp_dig.csc b/MP/Maps/Dig/clientscripts/mp/mp_dig.csc new file mode 100644 index 0000000..337970e --- /dev/null +++ b/MP/Maps/Dig/clientscripts/mp/mp_dig.csc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_dig_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_dig_amb; + +main() +{ + setsaveddvar( "sm_sunsamplesizenear", 0.25 ); + setsaveddvar( "sm_sunshadowsmall", 1 ); + clientscripts\mp\_load::main(); + clientscripts\mp\mp_dig_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_dig_amb::main(); + waitforclient( 0 ); +/# + println( "*** Client : mp_dig running..." ); +#/ +} diff --git a/MP/Maps/Dig/clientscripts/mp/mp_dig_amb.csc b/MP/Maps/Dig/clientscripts/mp/mp_dig_amb.csc new file mode 100644 index 0000000..5788f04 --- /dev/null +++ b/MP/Maps/Dig/clientscripts/mp/mp_dig_amb.csc @@ -0,0 +1,63 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "dig_outdoor", 1 ); + setambientroomreverb( "dig_outdoor", "gen_outdoor", 1, 1 ); + setambientroomcontext( "dig_outdoor", "ringoff_plr", "outdoor" ); + declareambientroom( "enclosed_room" ); + setambientroomreverb( "enclosed_room", "dig_stoneroom", 1, 1 ); + setambientroomcontext( "enclosed_room", "ringoff_plr", "indoor" ); + declareambientroom( "tarp_room" ); + setambientroomreverb( "tarp_room", "dig_mediumroom", 1, 1 ); + setambientroomcontext( "tarp_room", "ringoff_plr", "indoor" ); + declareambientroom( "open_air_room" ); + setambientroomreverb( "open_air_room", "dig_partialroom", 1, 1 ); + setambientroomcontext( "open_air_room", "ringoff_plr", "outdoor" ); + declareambientroom( "center_open_air_room" ); + setambientroomreverb( "center_open_air_room", "dig_smallroom", 1, 1 ); + setambientroomcontext( "center_open_air_room", "ringoff_plr", "outdoor" ); + declareambientroom( "tunnel_hall" ); + setambientroomtone( "tunnel_hall", "amb_tunnel_tone_2d", 0.55, 1 ); + setambientroomreverb( "tunnel_hall", "dig_hallroom", 1, 1 ); + setambientroomcontext( "tunnel_hall", "ringoff_plr", "indoor" ); + declareambientroom( "tunnel_room" ); + setambientroomtone( "tunnel_room", "amb_tunnel_tone_2d", 0.55, 1 ); + setambientroomreverb( "tunnel_room", "dig_hallroom", 1, 1 ); + setambientroomcontext( "tunnel_room", "ringoff_plr", "indoor" ); + thread snd_start_autofx_audio(); + thread snd_play_loopers(); +} + +snd_start_autofx_audio() +{ + snd_play_auto_fx( "fx_mp_dig_flood_light", "amb_light", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_dig_gas_drip", "amb_drips", 0, 0, 0, 0 ); +} + +snd_play_loopers() +{ + playloopat( "amb_wind_middle", ( -414, -129, 484 ) ); + playloopat( "amb_gas_pumper", ( -1009, -168, 125 ) ); + playloopat( "amb_pipe_flow", ( -1396, 611, 188 ) ); + playloopat( "amb_pipe_flow_blend", ( -1431, 694, 209 ) ); + playloopat( "amb_pipe_flow_blend", ( -1313, 464, 170 ) ); + playloopat( "amb_pipe_flow_2", ( -1073, 141, 154 ) ); + playloopat( "amb_pipe_flow_2", ( -1144, 277, 152 ) ); + playloopat( "amb_pipe_flow_2", ( -989, -38, 55 ) ); + playloopat( "amb_generator", ( -657, 166, 32 ) ); + playloopat( "amb_generator", ( -622, -490, 39 ) ); + playloopat( "amb_generator", ( 418, 574, 202 ) ); + playloopat( "amb_generator", ( 326, -841, 205 ) ); + playloopat( "amb_generator", ( -538, -248, 112 ) ); + playloopat( "amb_generator", ( -1674, 1694, 68 ) ); + playloopat( "amb_generator", ( -1562, 1153, 122 ) ); + playloopat( "amb_generator", ( -1649, -756, 145 ) ); + playloopat( "amb_generator", ( -191, 1531, 131 ) ); + playloopat( "amb_generator", ( 80, 187, 80 ) ); + playloopat( "amb_generator", ( -514, -1586, 108 ) ); +} diff --git a/MP/Maps/Dig/clientscripts/mp/mp_dig_fx.csc b/MP/Maps/Dig/clientscripts/mp/mp_dig_fx.csc new file mode 100644 index 0000000..68e9e2c --- /dev/null +++ b/MP/Maps/Dig/clientscripts/mp/mp_dig_fx.csc @@ -0,0 +1,76 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_fxanim_dlc4; +#include clientscripts\mp\createfx\mp_dig_fx; +#include clientscripts\mp\_fx; + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_lf_mp_dig_sun1"] = loadfx( "lens_flares/fx_lf_mp_dig_sun1" ); + level._effect["fx_mp_dig_floor_swirl_sm"] = loadfx( "maps/mp_maps/fx_mp_dig_floor_swirl_sm" ); + level._effect["fx_mp_dig_floor_swirl_lg"] = loadfx( "maps/mp_maps/fx_mp_dig_floor_swirl_lg" ); + level._effect["fx_mp_dig_dust"] = loadfx( "maps/mp_maps/fx_mp_dig_dust" ); + level._effect["fx_mp_dig_dust_fall"] = loadfx( "maps/mp_maps/fx_mp_dig_dust_fall" ); + level._effect["fx_mp_dig_dust_fall_2"] = loadfx( "maps/mp_maps/fx_mp_dig_dust_fall_2" ); + level._effect["fx_mp_dig_dust_fall_3"] = loadfx( "maps/mp_maps/fx_mp_dig_dust_fall_3" ); + level._effect["fx_mp_dig_dust_floor"] = loadfx( "maps/mp_maps/fx_mp_dig_dust_floor" ); + level._effect["fx_mp_dig_dust_floor_fall"] = loadfx( "maps/mp_maps/fx_mp_dig_dust_floor_fall" ); + level._effect["fx_mp_dig_dust_fall_pill"] = loadfx( "maps/mp_maps/fx_mp_dig_dust_fall_pill" ); + level._effect["fx_mp_dig_vista_dust"] = loadfx( "maps/mp_maps/fx_mp_dig_vista_dust" ); + level._effect["fx_mp_dig_vista_dust_sm"] = loadfx( "maps/mp_maps/fx_mp_dig_vista_dust_sm" ); + level._effect["fx_mp_dig_vista_dust_close"] = loadfx( "maps/mp_maps/fx_mp_dig_vista_dust_close" ); + level._effect["fx_mp_dig_heat_distort"] = loadfx( "maps/mp_maps/fx_mp_dig_heat_distort" ); + level._effect["fx_mp_dig_dust_lg"] = loadfx( "maps/mp_maps/fx_mp_dig_dust_lg" ); + level._effect["fx_mp_dig_vista_birds"] = loadfx( "maps/mp_maps/fx_mp_dig_vista_birds" ); + level._effect["fx_mp_dig_godray"] = loadfx( "maps/mp_maps/fx_mp_dig_godray" ); + level._effect["fx_mp_dig_godray_wide"] = loadfx( "maps/mp_maps/fx_mp_dig_godray_wide" ); + level._effect["fx_mp_dig_flood_light"] = loadfx( "maps/mp_maps/fx_mp_dig_flood_light" ); + level._effect["fx_mp_dig_dust_mote"] = loadfx( "maps/mp_maps/fx_mp_dig_dust_mote" ); + level._effect["fx_mp_dig_gas_drip"] = loadfx( "maps/mp_maps/fx_mp_dig_gas_drip" ); +} + +#using_animtree("fxanim_props_dlc4"); + +precache_fxanim_props_dlc4() +{ + level.scr_anim["fxanim_props_dlc4"]["wires_yellow_01"] = %fxanim_mp_dig_wires_yellow_01_anim; + level.scr_anim["fxanim_props_dlc4"]["wires_yellow_02"] = %fxanim_mp_dig_wires_yellow_02_anim; + level.scr_anim["fxanim_props_dlc4"]["wires_yellow_03"] = %fxanim_mp_dig_wires_yellow_03_anim; + level.scr_anim["fxanim_props_dlc4"]["ropes_01"] = %fxanim_mp_dig_ropes_01_anim; + level.scr_anim["fxanim_props_dlc4"]["fuel_pipe"] = %fxanim_mp_dig_fuel_pipe_anim; + level.scr_anim["fxanim_props_dlc4"]["wires_yellow_04"] = %fxanim_mp_dig_wires_yellow_04_anim; + level.scr_anim["fxanim_props_dlc4"]["wires_yellow_05"] = %fxanim_mp_dig_wires_yellow_05_anim; + level.scr_anim["fxanim_props_dlc4"]["wires_yellow_06"] = %fxanim_mp_dig_wires_yellow_06_anim; +} + +fxanim_init( localclientnum ) +{ + level thread clientscripts\mp\_fxanim_dlc4::fxanim_init_dlc( localclientnum ); +} + +#using_animtree("fxanim_props"); + +precache_fx_anims() +{ + level.scr_anim["fxanim_props"]["roaches"] = %fxanim_gp_roaches_anim; + level.fx_anim_level_init = ::fxanim_init; +} + +main() +{ + clientscripts\mp\createfx\mp_dig_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fx_anims(); + precache_fxanim_props_dlc4(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} diff --git a/MP/Maps/Dig/maps/mp/createfx/mp_dig_fx.gsc b/MP/Maps/Dig/maps/mp/createfx/mp_dig_fx.gsc new file mode 100644 index 0000000..6fa912e --- /dev/null +++ b/MP/Maps/Dig/maps/mp/createfx/mp_dig_fx.gsc @@ -0,0 +1,1732 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -975.73, -682.379, 51.1027 ); + ent.v["angles"] = ( 270.883, 173.792, -175.177 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -442.653, -1235.4, 64.2364 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 121.313, -686.781, 49.5086 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 129.259, 340.491, 52.1854 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -291.945, 1067.71, 48.3673 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -654.739, 1262.91, 96.0455 ); + ent.v["angles"] = ( 271.081, 83.1622, -84.3737 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 771.471, -959.553, 41.3816 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -150.143, -1124.88, 48.2339 ); + ent.v["angles"] = ( 273.25, 68.7368, -70.2869 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -984.748, 313.495, 51.0594 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1308.08, 636.018, 41.0502 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1308.91, 299.631, 46.7513 ); + ent.v["angles"] = ( 357.949, 269.471, -0.139436 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1453.27, -1389.48, 71.947 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -455.187, 296.714, 4.60001 ); + ent.v["angles"] = ( 270.13, 34.2417, -29.4542 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2008.97, -168.12, 310.786 ); + ent.v["angles"] = ( 87.7569, 199.254, 17.5658 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1069.13, 86.0965, 267.875 ); + ent.v["angles"] = ( 88.9043, 323.553, 144.846 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1167.5, -391.909, 46.391 ); + ent.v["angles"] = ( 358.953, 269.383, 0.866636 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1385.91, -386.256, 48.1052 ); + ent.v["angles"] = ( 359.949, 269.501, 0.860007 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1358.06, 127.957, 48.4917 ); + ent.v["angles"] = ( 359.948, 269.536, 0.859066 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1675.14, 130.724, 81 ); + ent.v["angles"] = ( 358.991, 262.521, 0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1667.36, -224.431, 80.4604 ); + ent.v["angles"] = ( 358.948, 269.521, 0.859211 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -981.79, -915.064, 48.2275 ); + ent.v["angles"] = ( 359.938, 266.623, -0.137793 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -303.34, -415.977, 50.7424 ); + ent.v["angles"] = ( 0.765307, 259.487, -0.975561 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -764.705, -882.303, 46.4442 ); + ent.v["angles"] = ( 358.948, 269.521, 0.859211 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -444.67, -92.0192, 45.5844 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -712.43, 626.698, 47.3168 ); + ent.v["angles"] = ( 359.948, 269.519, -0.140769 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -944.994, 757.274, 47.77 ); + ent.v["angles"] = ( 358.948, 269.521, 0.859211 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -115.052, 402.837, 48.9847 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -125.63, 151.183, 46.4389 ); + ent.v["angles"] = ( 0.130779, 227.595, -1.17077 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 582.65, 542.296, 46.0211 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 425.887, 263.578, 49.2162 ); + ent.v["angles"] = ( 358.948, 269.521, -0.140792 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 530.395, -65.4206, 45.0844 ); + ent.v["angles"] = ( 358.948, 269.521, -0.140788 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 198.044, -351.214, 45.5127 ); + ent.v["angles"] = ( 1.94424, 269.671, 2.86038 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 171.534, 27.1388, 49.854 ); + ent.v["angles"] = ( 358.948, 269.521, -2.14079 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1103.69, 823.073, 123 ); + ent.v["angles"] = ( 358.948, 269.521, 1.85921 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1018.38, 325.428, 120.796 ); + ent.v["angles"] = ( 357.919, 271.507, -1.17763 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 949.245, -86.4016, 120 ); + ent.v["angles"] = ( 359.887, 266.572, -1.13692 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1018.23, -335.311, 122.491 ); + ent.v["angles"] = ( 358.948, 269.521, -0.140792 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 977.613, -1074.53, 121 ); + ent.v["angles"] = ( 358.948, 269.521, -0.140792 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 91.8562, -1289.38, 57.745 ); + ent.v["angles"] = ( 359.945, 269.52, -0.107685 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1209.94, -1480.36, 72.3 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1647.7, -1512.51, 75.9932 ); + ent.v["angles"] = ( 358.948, 269.521, -1.14079 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1465, -1152.35, 50.6657 ); + ent.v["angles"] = ( 358.153, 267.511, 0.897194 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1471.32, -748.424, 40.6138 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1760, -764.091, 83 ); + ent.v["angles"] = ( 0, 267.556, 1.89389 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1646.32, -472.952, 78.4257 ); + ent.v["angles"] = ( 358.948, 269.521, 0.859211 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1107.6, 54.0699, 37.6219 ); + ent.v["angles"] = ( 359.801, 272.531, 0.747811 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1267.56, -714.212, 46.3197 ); + ent.v["angles"] = ( 357.949, 269.471, 2.86057 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1253.58, -895.33, 44.3465 ); + ent.v["angles"] = ( 0.945345, 269.621, 1.85912 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1020.8, -1206.86, 49.8449 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -224.186, -431.846, 51.4973 ); + ent.v["angles"] = ( 358.659, 299.542, 1.94962 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -975.899, 1193.7, 37.5132 ); + ent.v["angles"] = ( 357.98, 267.47, -2.06838 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1269.92, 1286.3, 40.8719 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1475.66, 1192.44, 72.625 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1699.99, 1455.44, 33.0763 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1073.47, 1221.27, 40.937 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 923.303, 163.749, 328.984 ); + ent.v["angles"] = ( 88.9042, 323.554, 141.847 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 915.939, -29.2198, 302.891 ); + ent.v["angles"] = ( 88.9042, 323.553, 142.846 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 913.955, -440.54, 245.281 ); + ent.v["angles"] = ( 88.9042, 323.553, 142.846 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1116.28, 339.866, 282.891 ); + ent.v["angles"] = ( 88.9042, 323.553, 142.846 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 568.512, -472.726, 220.998 ); + ent.v["angles"] = ( 88.9042, 323.553, 142.846 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -864.392, -1125.99, 185.998 ); + ent.v["angles"] = ( 88.9042, 323.553, 142.846 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -150.687, 710.23, 46.6714 ); + ent.v["angles"] = ( 359.947, 269.623, 1.85701 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1469.65, -908.833, 42.673 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1511.61, 402.533, 81 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1707.32, 516.114, 83 ); + ent.v["angles"] = ( 359.252, 263.528, 1.95341 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1755.23, -42.2177, 82 ); + ent.v["angles"] = ( 359.408, 260.532, 0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1470.57, 861.328, 88.625 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1225.04, 890.366, 90.125 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -128.653, -828.434, 46.159 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -12097.5, 1256.43, -536.39 ); + ent.v["angles"] = ( 359.888, 267.789, -2.10462 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -8767.93, -4166.24, -1331.77 ); + ent.v["angles"] = ( 2.99625, 270.677, -2.11048 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -6951.2, -7860.92, -334.799 ); + ent.v["angles"] = ( 359.888, 267.789, -2.10462 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3569.52, -10851.6, 334.967 ); + ent.v["angles"] = ( 359.888, 267.789, -2.10462 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -442.389, -638.749, 2.40001 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -18121.5, -7663.97, -863.272 ); + ent.v["angles"] = ( 359.888, 267.789, -2.10462 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1777.02, 331.411, 82 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1712.06, -941.167, 80 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1691.64, -391.157, 77.996 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1669.09, -29.8378, 88.225 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1739.31, 510.762, 80 ); + ent.v["angles"] = ( 358.948, 269.521, -0.14079 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -727.853, -974.935, 41.5098 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1109.1, -925.888, 40.2306 ); + ent.v["angles"] = ( 359.947, 269.571, 2.85873 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -90.9172, -943.541, 43.1525 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 541.239, -671.262, 47.9328 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 709, -141.581, 81.8557 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1028.07, -776.791, 120.465 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1027.42, 579.538, 135.1 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 603.89, 567.279, 46.7686 ); + ent.v["angles"] = ( 358.948, 269.521, -0.14079 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 450.735, 361.061, 45.8586 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -744.916, 653.466, 46.999 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1109.28, 567.716, 46.0958 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1240.78, 109.233, 45.5401 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1401.13, 265.756, 80.5352 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -931.289, 1173.87, 36.9994 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1441.9, 1533.16, 30.7975 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1217.39, 1374.92, 32.3827 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1632.42, 1876.16, 104 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -137.432, 600.148, 51.6498 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 393.219, -380.601, 42.4149 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1271.31, -452.637, 47.8861 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1100.93, 250.476, 157.061 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -710.217, 656.387, 92.0435 ); + ent.v["angles"] = ( 357.802, 272.47, 2.74941 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -133.639, 689.767, 105.909 ); + ent.v["angles"] = ( 355.953, 269.337, 0.868661 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 458.637, 419.364, 106.269 ); + ent.v["angles"] = ( 357.953, 269.367, 0.867047 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1036.83, 731.826, 200 ); + ent.v["angles"] = ( 356.951, 269.421, -0.137209 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1031.53, -699.946, 169 ); + ent.v["angles"] = ( 359.947, 269.571, 0.858728 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 81.4832, -844.086, 132.785 ); + ent.v["angles"] = ( 354.953, 269.321, 2.86987 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1675.49, -265.352, 131.125 ); + ent.v["angles"] = ( 354.953, 269.321, 2.86987 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1100.16, -60.6596, 100.96 ); + ent.v["angles"] = ( 355.11, 266.314, 3.13037 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 675.183, 710.305, 128.792 ); + ent.v["angles"] = ( 354.953, 269.321, 2.86987 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1237.52, -1440.27, 166.125 ); + ent.v["angles"] = ( 357.949, 269.472, -3.13944 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -381.467, -329.471, 120.739 ); + ent.v["angles"] = ( 354.953, 269.321, -1.13013 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -693.051, -694.344, 115.509 ); + ent.v["angles"] = ( 354.953, 269.321, 2.86987 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4102.85, -1085.76, 288.98 ); + ent.v["angles"] = ( 359.888, 267.789, -2.10462 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1116.78, -619.99, 313.501 ); + ent.v["angles"] = ( 88.9041, 323.555, 145.848 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 915.666, -263.719, 323.486 ); + ent.v["angles"] = ( 88.9042, 323.553, 142.846 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 125.188, 217.013, 153.71 ); + ent.v["angles"] = ( 88.9044, 323.551, 105.844 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -716.807, 840.367, 47.6264 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 831.69, 117.031, -33.2341 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 820.294, -65.3089, -36.8615 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 832.56, -269.661, -34.5599 ); + ent.v["angles"] = ( 358.948, 269.521, -1.14079 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 818.498, -109.025, -38.5274 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_dig_sun1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -778139, -2182370.0, 1005360.0 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1323.21, -357.37, 118.457 ); + ent.v["angles"] = ( 354.901, 266.31, -0.863788 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 669.13, -587.953, 92.4911 ); + ent.v["angles"] = ( 359.947, 269.571, 2.85874 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1675.16, -1388.57, 116 ); + ent.v["angles"] = ( 357.953, 269.367, 0.867048 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1661.14, 495.875, 136.125 ); + ent.v["angles"] = ( 355.464, 260.304, 0.624617 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -429.544, -52.0209, 150.475 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 343.584, 702.894, 159.215 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1262.1, -1061.89, 152.575 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 134.492, -537.847, 144.595 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_godray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -653.831, -1789.85, 240.524 ); + ent.v["angles"] = ( 19.6942, 77.2253, 80.3946 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 543.913, -1129.57, 261.248 ); + ent.v["angles"] = ( 87.8034, 195.382, -73.3072 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 778.685, -1139.08, 268.117 ); + ent.v["angles"] = ( 88.9044, 323.555, 53.8487 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 857.281, -1182.28, 121 ); + ent.v["angles"] = ( 358.801, 182.493, 1.20042 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 836.518, -242.665, 54.0575 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 837.238, -8.02314, 56.6063 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 724.74, -143.945, 47.875 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1126.91, -166.919, 357.385 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1175.88, -479.894, 349.311 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1113.42, -83.2409, 335.375 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1089.74, -594.583, 151.575 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -162.782, 1517.97, 280.856 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1149.51, 721.408, 204.167 ); + ent.v["angles"] = ( 87.9176, 317.422, 96.7181 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -255.126, 866.64, 166.274 ); + ent.v["angles"] = ( 87.9176, 317.422, 96.7181 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -63.0658, 915.085, 205.502 ); + ent.v["angles"] = ( 87.287, 270.346, 49.6781 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 666.956, 460.414, 111.737 ); + ent.v["angles"] = ( 89.5803, 354.513, 135.775 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 54.7197, -1593.84, 231.446 ); + ent.v["angles"] = ( 89.5803, 354.513, 136.774 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1260.73, 1587.88, 137.292 ); + ent.v["angles"] = ( 88.2757, 228.508, 9.77534 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -431.035, 1056.25, 167.487 ); + ent.v["angles"] = ( 89.2419, 241.45, 22.714 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -958.992, 497.061, 132.004 ); + ent.v["angles"] = ( 89.2419, 241.449, 22.7132 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -971.242, -1755.72, 249.997 ); + ent.v["angles"] = ( 87.6807, 31.4895, 172.747 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_flood_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -38.7034, -1621.39, 84.7233 ); + ent.v["angles"] = ( 339.971, 268.587, 0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1.90754, 898.943, 256.875 ); + ent.v["angles"] = ( 88.2757, 228.508, 9.77534 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1441.62, 963.417, 216.875 ); + ent.v["angles"] = ( 88.2756, 228.508, 134.776 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1498.6, 722.401, 214.875 ); + ent.v["angles"] = ( 88.2756, 228.508, 42.7757 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1147.27, 836.246, 205.875 ); + ent.v["angles"] = ( 88.2757, 228.508, 9.77534 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -607.801, -432.14, 49.5 ); + ent.v["angles"] = ( 357.838, 294.507, 1.14724 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -700.377, 423.074, 43.498 ); + ent.v["angles"] = ( 357.099, 321.524, 0.931568 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -363.255, 549.215, 48.4972 ); + ent.v["angles"] = ( 359.465, 251.531, 0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -143.952, 1012.57, 155.425 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -518.783, 738.786, 183.035 ); + ent.v["angles"] = ( 0.412715, 241.558, 1.0184 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1661.03, 585.476, 196 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1652.04, -51.402, 195.331 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1654.67, -656.996, 177.377 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1659.15, -1273.91, 175.998 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 85.4724, -889.655, 137.183 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 999.48, -345.859, 206 ); + ent.v["angles"] = ( 358.948, 269.521, 0.859211 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1062.8, 841.45, 219.278 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 629.767, 690.701, 156.481 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 460.46, 391.275, 153.13 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 360.776, 43.45, 149.764 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -143.863, -649.091, 153.709 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -414.27, -464.434, 105.02 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_birds" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1883.91, -6707.73, -1902.99 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_birds" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2134.69, 6130.38, -1397.21 ); + ent.v["angles"] = ( 344.774, 280.496, 5.89231 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -817.262, 1597.98, 320.641 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1045.73, 1597.97, 319.932 ); + ent.v["angles"] = ( 88.9045, 323.551, 102.845 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 47.0497, -1422.71, 129.296 ); + ent.v["angles"] = ( 358.948, 269.521, -0.14079 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -653.318, -1477.99, 169.972 ); + ent.v["angles"] = ( 358.948, 269.521, 2.85921 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 649.691, -608.587, 136.677 ); + ent.v["angles"] = ( 359.948, 269.536, 0.859066 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -850.343, 878.057, 120.551 ); + ent.v["angles"] = ( 359.073, 275.521, -1.24449 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -436.727, 510.041, 106.495 ); + ent.v["angles"] = ( 1.05096, 274.478, -1.22816 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 94.3003, -885.913, 54.0664 ); + ent.v["angles"] = ( 358.772, 270.589, -1.64526 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 425.107, -356.602, 45.5697 ); + ent.v["angles"] = ( 358.476, 273.461, -1.33844 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 725.922, -15.7982, 94 ); + ent.v["angles"] = ( 359.895, 266.534, 18.6991 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 645.512, -65.1457, 69.4701 ); + ent.v["angles"] = ( 359.268, 265.266, 18.6996 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 75.7466, 732.118, 45.9536 ); + ent.v["angles"] = ( 0.946264, 269.447, -2.14072 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 792.792, 521.818, 45.5704 ); + ent.v["angles"] = ( 358.948, 269.521, -1.14079 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 648.168, 813.298, 51.7547 ); + ent.v["angles"] = ( 358.734, 257.521, -0.897129 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 934.35, 847.926, 85.8486 ); + ent.v["angles"] = ( 1.54767, 266.846, 31.9675 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -91.6783, -72.5055, 166.449 ); + ent.v["angles"] = ( 359.46, 259.533, 2.9983 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -680.881, -322.319, 165.462 ); + ent.v["angles"] = ( 1.09127, 290.635, 0.451672 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -247.309, -303.674, 163.697 ); + ent.v["angles"] = ( 1.84825, 257.637, -0.458686 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1285.1, -1310.03, 190.252 ); + ent.v["angles"] = ( 1.181, 268.631, 0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -611.207, -1471.89, 176.07 ); + ent.v["angles"] = ( 1.09127, 290.635, 0.451672 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -549.428, 1552.88, 231.447 ); + ent.v["angles"] = ( 1.11342, 287.634, 0.393934 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1707.48, 741.902, 214.38 ); + ent.v["angles"] = ( 10.091, 290.707, 3.45868 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -557.063, -111.396, 163.761 ); + ent.v["angles"] = ( 359.745, 321.533, -0.476057 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 958.125, 74.4883, 263.291 ); + ent.v["angles"] = ( 88.9043, 323.553, 144.846 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1364.68, -76.8785, 47.3894 ); + ent.v["angles"] = ( 359.952, 270.466, -0.175114 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1074.96, -1447.93, 217.732 ); + ent.v["angles"] = ( 351.896, 266.302, -0.931192 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -81.2507, -1451.58, 175.088 ); + ent.v["angles"] = ( 358.871, 310.609, 0.797744 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -963.608, -838.785, 184.791 ); + ent.v["angles"] = ( 1.17098, 275.632, 0.153807 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -437.997, -1016.67, 168.033 ); + ent.v["angles"] = ( 1.17098, 275.632, 0.153807 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -926.055, -561.612, 159.214 ); + ent.v["angles"] = ( 1.1061, 247.626, -0.414009 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -847.896, -471.799, 162.992 ); + ent.v["angles"] = ( 0.508757, 332.636, 1.06585 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 900.209, 639.011, 235.326 ); + ent.v["angles"] = ( 1.17088, 260.63, -0.154546 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 478.409, 699.351, 171.698 ); + ent.v["angles"] = ( 0.702775, 321.637, 0.949207 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -661.673, 1163.88, 194.785 ); + ent.v["angles"] = ( 1.18062, 266.631, 0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 85.5207, 461.021, 142.501 ); + ent.v["angles"] = ( 1.18062, 266.631, -2.0313 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 227.509, 698.279, 152.342 ); + ent.v["angles"] = ( 1.14039, 251.628, -0.305606 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 586.755, 903.875, 161.163 ); + ent.v["angles"] = ( 1.17742, 272.632, 0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -883.915, 194.031, 165.5 ); + ent.v["angles"] = ( 359.813, 354.661, 0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1827.71, 1674.85, 139.561 ); + ent.v["angles"] = ( 2.64617, 335.639, -0.955142 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1842.24, 228.424, 190.943 ); + ent.v["angles"] = ( 0.735804, 280.643, -2.71529 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2022.71, 142.335, 273.779 ); + ent.v["angles"] = ( 2.59258, 332.636, -1.09231 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1438.32, -283.568, 140.871 ); + ent.v["angles"] = ( 358.851, 269.41, 0.634039 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1036.47, -483.024, 158.574 ); + ent.v["angles"] = ( 359.497, 187.342, 8.15861 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1107.15, 377.637, 137.291 ); + ent.v["angles"] = ( 3.63692, 322.033, -1.89879 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 0.806075, 198.02, 167.9 ); + ent.v["angles"] = ( 359.741, 183.63, 2.8839 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1108.73, 956.181, 194.268 ); + ent.v["angles"] = ( 1.92927, 287.316, -0.347119 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1491.47, 1049.1, 213.516 ); + ent.v["angles"] = ( 10.0616, 290.487, -1.70858 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2021.66, -418.366, 258.403 ); + ent.v["angles"] = ( 7.04448, 343.978, -3.21619 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1883.88, -882.392, 149.33 ); + ent.v["angles"] = ( 359.792, 314.423, -2.31977 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -829.753, -1471.98, 173.135 ); + ent.v["angles"] = ( 354.278, 269.322, -1.12202 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1376.66, -61.512, 171.625 ); + ent.v["angles"] = ( 358.839, 267.487, -1.09878 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1332.8, 58.874, 228.047 ); + ent.v["angles"] = ( 358.731, 261.486, -0.971446 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1452.51, -92.7596, 313.78 ); + ent.v["angles"] = ( 0.544976, 205.626, -1.04779 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1122.77, -316.76, 243.233 ); + ent.v["angles"] = ( 0.413229, 198.627, -1.10639 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1219.04, 503.105, 249.642 ); + ent.v["angles"] = ( 0.295325, 192.629, -1.14351 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1669.12, -1210.67, 80 ); + ent.v["angles"] = ( 358.89, 266.521, -1.08417 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2001.38, -287.672, 287.781 ); + ent.v["angles"] = ( 2.59258, 332.636, -1.09231 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 360.513, 590.086, 43.9797 ); + ent.v["angles"] = ( 0.502629, 284.474, 0.918724 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -780.043, -55.2936, 238.556 ); + ent.v["angles"] = ( 0.945547, 269.621, 2.85912 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -84.3017, -13.1354, 259.847 ); + ent.v["angles"] = ( 0.945547, 269.621, 2.85912 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -818.997, -64.3306, 163.757 ); + ent.v["angles"] = ( 358.963, 268.521, 0.87744 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -340.637, 1415.26, 98.2628 ); + ent.v["angles"] = ( 358.948, 269.521, -2.14079 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -607.594, 1445.38, 97.2966 ); + ent.v["angles"] = ( 358.948, 269.521, -2.14079 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1796.13, 215.671, 129 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 280.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1555.5, 461.776, 147.516 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 276.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1220.86, 362.402, 99.7544 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -446.422, 253.146, 73.2718 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 266.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -213.107, 412.098, 75.2223 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 227.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -385.082, 251.864, 47.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 266.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -699.216, -715.091, 85.9836 ); + ent.v["angles"] = ( 359, 260.017, -1 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 167.585, -791.978, 124.497 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 261.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -897.901, -895.305, 91 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 684.925, -793.659, 145.478 ); + ent.v["angles"] = ( 357.775, 245.029, -0.707484 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 584.827, -828.038, 41.6965 ); + ent.v["angles"] = ( 1.71852, 268.325, -5.28397 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 302.475, -247.251, 85.7498 ); + ent.v["angles"] = ( 359.072, 264.018, -1.06732 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 92.3654, -208.68, 101.001 ); + ent.v["angles"] = ( 359.754, 295.012, -1.39269 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1078.87, 545.001, 164.504 ); + ent.v["angles"] = ( 359.072, 264.018, -1.06732 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1056.77, -249.934, 163.863 ); + ent.v["angles"] = ( 359.072, 264.018, -1.06732 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 956.673, -32.5662, 164.959 ); + ent.v["angles"] = ( 359.086, 274.019, -0.161166 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 249.666, -596.808, 148.796 ); + ent.v["angles"] = ( 359.072, 264.018, -1.06732 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 683.971, 486.11, 161.286 ); + ent.v["angles"] = ( 359.072, 264.018, 0.932685 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -224.668, 848.046, 92.9363 ); + ent.v["angles"] = ( 359.072, 264.018, 0.932685 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -377.868, 1427.86, 143.875 ); + ent.v["angles"] = ( 359.025, 267.018, 0.88285 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1195.32, 1214.04, 86.7745 ); + ent.v["angles"] = ( 359.072, 264.018, 0.932685 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1574.97, 1523.24, 74.625 ); + ent.v["angles"] = ( 359.058, 266.018, -0.100112 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1500.7, 1592.14, 76.9619 ); + ent.v["angles"] = ( 358.862, 279.019, 0.660769 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1793.15, -566.822, 131 ); + ent.v["angles"] = ( 359.922, 274.032, 0.809581 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1716.18, -1098.13, 123.5 ); + ent.v["angles"] = ( 358.965, 271.018, 0.812661 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1462.64, -631.445, 99.9975 ); + ent.v["angles"] = ( 359.923, 274.032, 0.809605 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 188.737, -1117.3, 153.943 ); + ent.v["angles"] = ( 0.176856, 256.034, 0.793804 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1774.75, 1527.49, 71.625 ); + ent.v["angles"] = ( 359.156, 287.02, -0.431177 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -764.655, 1141.59, 87.9259 ); + ent.v["angles"] = ( 359.058, 266.018, -0.100112 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1239.63, -73.4638, 160.742 ); + ent.v["angles"] = ( 357.949, 266.804, 25.922 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1459.88, -281.93, 316.143 ); + ent.v["angles"] = ( 0.544976, 205.626, -1.04779 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 823.542, 313.234, 52.0039 ); + ent.v["angles"] = ( 359.072, 264.018, 0.932685 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 830.694, 227.968, 14.4987 ); + ent.v["angles"] = ( 19.932, 271.818, -0.463749 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1035.84, -797.458, 162.958 ); + ent.v["angles"] = ( 359.054, 263.018, -1.05096 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -69.6524, 899.951, 96.897 ); + ent.v["angles"] = ( 359, 260.018, -1 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1138.29, 671.473, 83.5 ); + ent.v["angles"] = ( 359.11, 266.018, -1.09904 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1035.15, 783.365, 64.4414 ); + ent.v["angles"] = ( 359.169, 269.017, -1.14411 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1847.65, 670.064, 126.339 ); + ent.v["angles"] = ( 359.601, 293.014, -0.388734 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -905.637, 473.749, 83 ); + ent.v["angles"] = ( 357.263, 321.092, -0.897471 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -702.686, 170.007, 90.5329 ); + ent.v["angles"] = ( 358.352, 326.077, -1.13201 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -989.89, -352.779, 100.273 ); + ent.v["angles"] = ( 358.686, 240.042, 2.56371 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -949.251, -812.154, 180.768 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 279.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_gas_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1380.25, 610.338, 182.788 ); + ent.v["angles"] = ( 359.375, 19.951, 8.97843 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_gas_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1108.34, 230.326, 160.706 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 8758.18, -2601.51, 1789.17 ); + ent.v["angles"] = ( 358.945, 240.805, -1.8246 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1777.36, -5350.6, 244.209 ); + ent.v["angles"] = ( 358.702, 232.807, -1.65996 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1860.58, -5040.41, 57.0436 ); + ent.v["angles"] = ( 359.778, 264.792, -2.09578 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3650.01, 2824.46, 343.516 ); + ent.v["angles"] = ( 2.70279, 262.684, -2.08911 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5223.45, 3715.88, 1175.8 ); + ent.v["angles"] = ( 4.05135, 238.826, 4.86698 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3037.07, 5817.13, 1213 ); + ent.v["angles"] = ( 358.316, 217.806, -1.26734 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1680.86, 2881.89, 111.145 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3002.88, 2118.22, -9.59973 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 237.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3479.83, -186.319, -269.401 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -6203.93, 1556.99, -66.1765 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -15649, -1649.3, -1111 ); + ent.v["angles"] = ( 359.888, 267.789, -2.10462 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1426.06, -2082.68, 27.4772 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 212.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1044.48, 2369.78, 305.75 ); + ent.v["angles"] = ( 360, 317, -3 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -9343.47, -2046.97, -1305.17 ); + ent.v["angles"] = ( 3.44027, 285.694, -1.26256 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4950.48, -927.538, -319.972 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4000.32, -4003.76, 63.2383 ); + ent.v["angles"] = ( 7, 289, 0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 9576.57, -8049.61, 1798.74 ); + ent.v["angles"] = ( 358.589, 228.808, -1.56547 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -132.897, 1020.79, 48.591 ); + ent.v["angles"] = ( 0, 266.575, 2.90993 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1267.21, -1107.79, 37.4418 ); + ent.v["angles"] = ( 352.827, 272.212, 2.09263 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1207.49, -73.5797, 39.7421 ); + ent.v["angles"] = ( 271.109, 2.68804, -3.90122 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 147.253, -1602.43, 75 ); + ent.v["angles"] = ( 271.109, 2.68804, -3.90122 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -877.604, -1665, 72 ); + ent.v["angles"] = ( 271.109, 2.68804, -3.90122 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1729.02, -1693.4, 73.9989 ); + ent.v["angles"] = ( 271.109, 2.68804, -3.90122 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1768.6, -420.735, 80.4995 ); + ent.v["angles"] = ( 271.109, 2.68804, -3.90122 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -809.158, 195.222, 48.2225 ); + ent.v["angles"] = ( 271.109, 2.68804, -3.90122 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -194.057, 295.056, 127.152 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 266.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1334.78, 1486.89, 130.006 ); + ent.v["angles"] = ( 356.963, 293.476, -1.22082 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2024.96, -256.793, 301.886 ); + ent.v["angles"] = ( 88.6934, 211.131, 30.4356 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 18.8065, 873.257, 56.4626 ); + ent.v["angles"] = ( 2.94584, 269.721, -0.140539 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1365.13, 1549.66, 30.8293 ); + ent.v["angles"] = ( 0.944308, 266.469, 0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 374.262, 818.93, 56.3473 ); + ent.v["angles"] = ( 270.13, 34.2431, -35.4556 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 6.3894, -673.185, 97.5047 ); + ent.v["angles"] = ( 358.74, 242.015, -0.64204 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -9.49943, -632.315, 131.625 ); + ent.v["angles"] = ( 358.74, 242.015, -0.64204 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -878.104, -711.226, 95.2438 ); + ent.v["angles"] = ( 359.358, 278.016, -1.26004 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -846.985, -646.685, 115.913 ); + ent.v["angles"] = ( 358.751, 187.002, 0.664114 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -323.034, -128.45, 164.125 ); + ent.v["angles"] = ( 358.634, 230.013, -0.365972 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -319.125, -214.761, 164.922 ); + ent.v["angles"] = ( 358.617, 227.012, -0.293967 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -557.213, -161.625, 171.036 ); + ent.v["angles"] = ( 359.926, 302.01, -1.41222 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -878.347, 346.759, 96.1744 ); + ent.v["angles"] = ( 357.589, 336.104, -1.57558 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1403.9, 408.837, 83.5629 ); + ent.v["angles"] = ( 357.22, 318.089, -0.752899 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1014.59, -369.348, 71.6979 ); + ent.v["angles"] = ( 359.394, 225.057, -0.183771 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1583.7, -684.076, 80 ); + ent.v["angles"] = ( 359.479, 334.037, -0.386453 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1108.27, -1026.02, 91 ); + ent.v["angles"] = ( 359.385, 316.036, -0.206509 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1809.69, -1509.75, 128.469 ); + ent.v["angles"] = ( 358.52, 322.024, 0.82962 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1529.5, -1519.1, 117.215 ); + ent.v["angles"] = ( 0.930588, 228.046, 0.418486 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -319.891, -1143.88, 89.2982 ); + ent.v["angles"] = ( 359.502, 199.017, -0.210622 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -548.541, -401.24, 48.4856 ); + ent.v["angles"] = ( 359.103, 277.026, -0.530978 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -688.887, -590.416, 48.1295 ); + ent.v["angles"] = ( 359.504, 308.026, -0.917323 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -199.19, -698.89, 49.1078 ); + ent.v["angles"] = ( 359.254, 202.017, -0.269819 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 9.95442, 443.757, 128.125 ); + ent.v["angles"] = ( 359.504, 308.026, -0.917323 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 7.38482, 327.405, 97.125 ); + ent.v["angles"] = ( 359.504, 308.026, -0.917323 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 195.711, -1324.31, 144.091 ); + ent.v["angles"] = ( 359.449, 257.013, 0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -870.122, 963.313, 84.6703 ); + ent.v["angles"] = ( 359.169, 269.017, -1.14411 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -725.204, 817.853, 48.6131 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 299.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1032.52, 75.7198, 175.878 ); + ent.v["angles"] = ( 359.958, 272.414, -0.139393 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1071.17, -892.618, 120 ); + ent.v["angles"] = ( 358.948, 269.521, -0.140792 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 682.348, 487.427, 155.49 ); + ent.v["angles"] = ( 88.9042, 323.553, 142.846 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -509.583, -1615.77, 117.2 ); + ent.v["angles"] = ( 0.930588, 228.046, 0.418486 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -742.329, -1525.19, 72 ); + ent.v["angles"] = ( 359.945, 269.52, -0.107685 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -53.5563, -1520.48, 73 ); + ent.v["angles"] = ( 359.945, 269.52, -0.107685 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -439.636, -1518.94, 72 ); + ent.v["angles"] = ( 359.945, 269.52, -0.107685 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -155.602, 1176.58, 226.688 ); + ent.v["angles"] = ( 88.6728, 321.83, 103.094 ); + ent.v["delay"] = -82; +} diff --git a/MP/Maps/Dig/maps/mp/mp_dig.gsc b/MP/Maps/Dig/maps/mp/mp_dig.gsc new file mode 100644 index 0000000..b397e23 --- /dev/null +++ b/MP/Maps/Dig/maps/mp/mp_dig.gsc @@ -0,0 +1,57 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_dig_fx; +#include maps\mp\_load; +#include maps\mp\mp_dig_amb; +#include maps\mp\_compass; +#include maps\mp\gametypes\_spawning; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_dig_fx::main(); + precachemodel( "collision_clip_wall_32x32x10" ); + precachemodel( "p6_dig_brick_03" ); + maps\mp\_load::main(); + maps\mp\mp_dig_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_dig" ); + setdvar( "compassmaxrange", "2100" ); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + brick1 = spawn( "script_model", ( -5.6285, 604.473, 39.05 ) ); + brick1.angles = ( 359.199, 90.0129, -0.822672 ); + brick2 = spawn( "script_model", ( -12.63, 604.47, 39.05 ) ); + brick2.angles = ( 359.199, 90.0129, -0.822672 ); + brick3 = spawn( "script_model", ( -5.63, 614.97, 39.05 ) ); + brick3.angles = ( 359.199, 90.0129, -0.822672 ); + brick4 = spawn( "script_model", ( -12.63, 614.97, 39.05 ) ); + brick4.angles = ( 359.199, 90.0129, -0.822672 ); + brick5 = spawn( "script_model", ( -5.63, 629.47, 39.55 ) ); + brick5.angles = ( 359.199, 90.0129, -0.822672 ); + brick6 = spawn( "script_model", ( -12.63, 629.47, 39.55 ) ); + brick6.angles = ( 359.199, 90.0129, -0.822672 ); + brick1 setmodel( "p6_dig_brick_03" ); + brick2 setmodel( "p6_dig_brick_03" ); + brick3 setmodel( "p6_dig_brick_03" ); + brick4 setmodel( "p6_dig_brick_03" ); + brick5 setmodel( "p6_dig_brick_03" ); + brick6 setmodel( "p6_dig_brick_03" ); + spawncollision( "collision_clip_wall_32x32x10", "collider", ( -1404, -1126, 46.5 ), vectorscale( ( 0, 1, 0 ), 90.0 ) ); + maps\mp\gametypes\_spawning::level_use_unified_spawning( 1 ); +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2300", reset_dvars ); + ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1000", reset_dvars ); +} diff --git a/MP/Maps/Dig/maps/mp/mp_dig_amb.gsc b/MP/Maps/Dig/maps/mp/mp_dig_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Dig/maps/mp/mp_dig_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Dig/maps/mp/mp_dig_fx.gsc b/MP/Maps/Dig/maps/mp/mp_dig_fx.gsc new file mode 100644 index 0000000..cd34dc3 --- /dev/null +++ b/MP/Maps/Dig/maps/mp/mp_dig_fx.gsc @@ -0,0 +1,64 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_dig_fx; + +main() +{ + precache_fxanim_props(); + precache_fxanim_props_dlc4(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_dig_fx::main(); +} + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_lf_mp_dig_sun1"] = loadfx( "lens_flares/fx_lf_mp_dig_sun1" ); + level._effect["fx_mp_dig_floor_swirl_sm"] = loadfx( "maps/mp_maps/fx_mp_dig_floor_swirl_sm" ); + level._effect["fx_mp_dig_floor_swirl_lg"] = loadfx( "maps/mp_maps/fx_mp_dig_floor_swirl_lg" ); + level._effect["fx_mp_dig_dust"] = loadfx( "maps/mp_maps/fx_mp_dig_dust" ); + level._effect["fx_mp_dig_dust_fall"] = loadfx( "maps/mp_maps/fx_mp_dig_dust_fall" ); + level._effect["fx_mp_dig_dust_fall_2"] = loadfx( "maps/mp_maps/fx_mp_dig_dust_fall_2" ); + level._effect["fx_mp_dig_dust_fall_3"] = loadfx( "maps/mp_maps/fx_mp_dig_dust_fall_3" ); + level._effect["fx_mp_dig_dust_floor"] = loadfx( "maps/mp_maps/fx_mp_dig_dust_floor" ); + level._effect["fx_mp_dig_dust_floor_fall"] = loadfx( "maps/mp_maps/fx_mp_dig_dust_floor_fall" ); + level._effect["fx_mp_dig_dust_fall_pill"] = loadfx( "maps/mp_maps/fx_mp_dig_dust_fall_pill" ); + level._effect["fx_mp_dig_vista_dust"] = loadfx( "maps/mp_maps/fx_mp_dig_vista_dust" ); + level._effect["fx_mp_dig_vista_dust_sm"] = loadfx( "maps/mp_maps/fx_mp_dig_vista_dust_sm" ); + level._effect["fx_mp_dig_vista_dust_close"] = loadfx( "maps/mp_maps/fx_mp_dig_vista_dust_close" ); + level._effect["fx_mp_dig_heat_distort"] = loadfx( "maps/mp_maps/fx_mp_dig_heat_distort" ); + level._effect["fx_mp_dig_dust_lg"] = loadfx( "maps/mp_maps/fx_mp_dig_dust_lg" ); + level._effect["fx_mp_dig_vista_birds"] = loadfx( "maps/mp_maps/fx_mp_dig_vista_birds" ); + level._effect["fx_mp_dig_godray"] = loadfx( "maps/mp_maps/fx_mp_dig_godray" ); + level._effect["fx_mp_dig_godray_wide"] = loadfx( "maps/mp_maps/fx_mp_dig_godray_wide" ); + level._effect["fx_mp_dig_flood_light"] = loadfx( "maps/mp_maps/fx_mp_dig_flood_light" ); + level._effect["fx_mp_dig_dust_mote"] = loadfx( "maps/mp_maps/fx_mp_dig_dust_mote" ); + level._effect["fx_mp_dig_gas_drip"] = loadfx( "maps/mp_maps/fx_mp_dig_gas_drip" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["roaches"] = %fxanim_gp_roaches_anim; +} + +#using_animtree("fxanim_props_dlc4"); + +precache_fxanim_props_dlc4() +{ + level.scr_anim["fxanim_props_dlc4"]["wires_yellow_01"] = %fxanim_mp_dig_wires_yellow_01_anim; + level.scr_anim["fxanim_props_dlc4"]["wires_yellow_02"] = %fxanim_mp_dig_wires_yellow_02_anim; + level.scr_anim["fxanim_props_dlc4"]["wires_yellow_03"] = %fxanim_mp_dig_wires_yellow_03_anim; + level.scr_anim["fxanim_props_dlc4"]["ropes_01"] = %fxanim_mp_dig_ropes_01_anim; + level.scr_anim["fxanim_props_dlc4"]["fuel_pipe"] = %fxanim_mp_dig_fuel_pipe_anim; + level.scr_anim["fxanim_props_dlc4"]["wires_yellow_04"] = %fxanim_mp_dig_wires_yellow_04_anim; + level.scr_anim["fxanim_props_dlc4"]["wires_yellow_05"] = %fxanim_mp_dig_wires_yellow_05_anim; + level.scr_anim["fxanim_props_dlc4"]["wires_yellow_06"] = %fxanim_mp_dig_wires_yellow_06_anim; +} diff --git a/MP/Maps/Drone/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Drone/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Drone/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Drone/aitype/enemy_dog_mp.gsc b/MP/Maps/Drone/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Drone/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Drone/character/character_mp_german_shepherd.gsc b/MP/Maps/Drone/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Drone/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Drone/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Drone/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Drone/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Drone/clientscripts/mp/createfx/mp_drone_fx.csc b/MP/Maps/Drone/clientscripts/mp/createfx/mp_drone_fx.csc new file mode 100644 index 0000000..6c62eb8 --- /dev/null +++ b/MP/Maps/Drone/clientscripts/mp/createfx/mp_drone_fx.csc @@ -0,0 +1,2377 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); + ent.v["origin"] = ( 936.438, -2.6611, 660.016 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); + ent.v["origin"] = ( 1576.16, 1062.87, 566.274 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); + ent.v["origin"] = ( 1364.58, 3231.84, 876.975 ); + ent.v["angles"] = ( 298, 270, 80 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); + ent.v["origin"] = ( 1264.63, 2234.28, 626.041 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); + ent.v["origin"] = ( -75.2249, 2832.58, 732.129 ); + ent.v["angles"] = ( 277.7, 320.203, 41.0979 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_hvac_steam_md" ); + ent.v["origin"] = ( -120.827, 314.976, 77 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam" ); + ent.v["origin"] = ( -1748.31, 492.452, 590.125 ); + ent.v["angles"] = vectorscale( ( 0, 0, -1 ), 4.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam" ); + ent.v["origin"] = ( -1722.62, 300.426, 590.125 ); + ent.v["angles"] = vectorscale( ( 0, 0, -1 ), 4.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam" ); + ent.v["origin"] = ( -1707.88, 81.193, 588.125 ); + ent.v["angles"] = vectorscale( ( 0, 0, -1 ), 4.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam" ); + ent.v["origin"] = ( -1719.61, -114.235, 586.125 ); + ent.v["angles"] = vectorscale( ( 0, 0, -1 ), 4.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -621.085, -811.156, 247.628 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 200.984, -825.445, 95.0018 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -88.0372, -1140.5, 105 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_hvac_steam_md" ); + ent.v["origin"] = ( -124.628, 215.759, 76 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_hvac_steam_md" ); + ent.v["origin"] = ( -1378.86, -1845.46, 364.596 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_hvac_steam_md" ); + ent.v["origin"] = ( 238.365, 2005.43, 452.125 ); + ent.v["angles"] = ( 2, 179.964, 179 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 14.33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1167.35, 2885.71, 356.443 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1026.42, 2757.99, 287.41 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 892.973, 3020.42, 374.985 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 331.855, 2952.62, 398.803 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -439.986, 2903.38, 375.882 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 272.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -212.347, 2820.35, 375.646 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 168.041, 2807.25, 384.028 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -99.0851, 2545.89, 219.093 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 786.317, 2626.1, 287.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1086.38, 2456.84, 311.791 ); + ent.v["angles"] = ( 288, 270, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1404.22, 1679.23, 100.893 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1366.4, 1275.45, 98.609 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1069.28, 1100.08, 95.3746 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1443.34, 952.134, 84.514 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1084.44, 621.997, 107.667 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 837.47, -215.239, 89.8274 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 628.449, -326.045, 69.42 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 984.61, 962.721, 106.203 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 671.179, 1676.49, 168.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 292.574, 2176.81, 227.701 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 43.5211, 2115.94, 187.833 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 162.877, -824.592, -39.9999 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -40.4221, -974.386, -40 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 942.157, 3179.8, 354.051 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1216.36, 2985.81, 316.41 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 165.524, 2936.85, 341.609 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1135.3, 1214.31, 52.6228 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 269.25, -641.443, -46 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -69.4102, -1219.08, -40 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -255.296, -1518.57, -9.75282 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 273.049, 1495.92, 115.005 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -688.697, -592.297, -31.4556 ); + ent.v["angles"] = ( 273.163, 341.584, 18.4425 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -281.909, 1533.35, 161.491 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 329.743, 1481.06, 168.389 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -267.701, 1124.94, 180.258 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -660.08, -1691.72, 84.4303 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -352.785, -1541.7, 59.1158 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -389.985, -1061.99, 16.625 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -369.875, 465.705, 212.526 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 54.4449, -871.147, 102 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_dockside_sun1" ); + ent.v["origin"] = ( -30123.6, -97927.8, 52705.6 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_cool_slw_md" ); + ent.v["origin"] = ( 810.467, 2996.84, 404.111 ); + ent.v["angles"] = ( 88, 270, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_cool_slw_md" ); + ent.v["origin"] = ( 1474.57, 1323.38, 169.253 ); + ent.v["angles"] = ( 74.8702, 277.421, -82.3157 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_cool_slw_md" ); + ent.v["origin"] = ( -581.299, 2614.92, 231.156 ); + ent.v["angles"] = ( 16.9291, 335.75, 90.2583 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -1159.65, -1199.87, 98.8739 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1012.18, 3264.64, 379.602 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1137.33, 3388.99, 379.152 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_cool_slw_md" ); + ent.v["origin"] = ( 929.839, -179.398, 100.186 ); + ent.v["angles"] = ( 74.8702, 277.421, -82.3157 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 856.788, 2333.85, 259.687 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -709.457, 2393.01, 222.766 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -537.272, 2158.15, 201.425 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -203.026, 1234.09, 201.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -193.172, 1392.02, 203.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -188.745, 2184.17, 170.27 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -2465.88, -1493.51, 80.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -1933.92, -1983.78, 65 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -1253.42, -1430.2, 78.2332 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_cool_slw_md" ); + ent.v["origin"] = ( -1021.39, -2169.52, 78 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 1208.59, 3181.33, 656.054 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 1357.76, 3469.78, 856.617 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 918.708, 3521.55, 537 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 1157.79, 2436.14, 567.6 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 94.9131, 910.115, 240.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_sm" ); + ent.v["origin"] = ( -110.435, -1027.16, 20 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_cool_ground" ); + ent.v["origin"] = ( -679.49, -381.524, 73.5888 ); + ent.v["angles"] = ( 22.3234, 296.509, 96.2364 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_cool_ground" ); + ent.v["origin"] = ( 986.019, 3510.31, 299.076 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 751.287, 235.978, 66.7407 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 595.931, 458.623, 70.6824 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_cool_ground" ); + ent.v["origin"] = ( 258.914, -420.17, 87 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_cool_slw_md" ); + ent.v["origin"] = ( 1359.69, 2254.33, 274.057 ); + ent.v["angles"] = ( 88, 270, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_cool_slw_md" ); + ent.v["origin"] = ( -501.592, 1924.29, 167.25 ); + ent.v["angles"] = ( 14.5458, 37.6824, -93.0128 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 112.923, -930.589, 14.5377 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -62.7229, -1036.85, 15 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 183.942, -798.378, -5.9982 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_sm" ); + ent.v["origin"] = ( -63.2585, -1040.96, 7 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_red_button_flash" ); + ent.v["origin"] = ( -1066.95, -717.465, 304.065 ); + ent.v["angles"] = ( 90, 344.864, 74.8637 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( 1038.51, 5096.17, 535.6 ); + ent.v["angles"] = ( 358.797, 165.491, -4.97454 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( 2895.63, 2452.31, 1249.44 ); + ent.v["angles"] = ( 355.147, 101.372, -18.0588 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( 2750.27, 433.283, 1075.13 ); + ent.v["angles"] = ( 2.69095, 78.7488, -11.2181 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( -379.52, 4019.43, 832.58 ); + ent.v["angles"] = ( 359.91, 180.661, -35.2304 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_drone" ); + ent.v["origin"] = ( 985.224, 3013.91, 307.517 ); + ent.v["angles"] = ( 314.223, 207.013, 164.712 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_drone" ); + ent.v["origin"] = ( -267.905, 2599.46, 211.263 ); + ent.v["angles"] = ( 327.889, 225.861, 151.596 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_cool_ground" ); + ent.v["origin"] = ( 182.228, -202.018, 98.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_cool_ground" ); + ent.v["origin"] = ( 47.9025, -1660.82, 190 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["origin"] = ( 296.229, -584.168, 116.212 ); + ent.v["angles"] = ( 18, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_02" ); + ent.v["origin"] = ( 795.571, -1035.49, 406.993 ); + ent.v["angles"] = ( 90, 22.5361, 112.536 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -951.827, 1111.64, 312.742 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -455.056, -407.494, 240.668 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -363.63, 59.9479, 211.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -170.645, 694.161, 409.218 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -8.12653, 2556.85, 170.687 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1027.93, 2150.25, 210.548 ); + ent.v["angles"] = ( 270, 8.74616, -76.7461 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1463.13, 1383.41, 105.641 ); + ent.v["angles"] = ( 270, 8.74616, -76.7461 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1531.32, 969.233, 165.095 ); + ent.v["angles"] = ( 270, 8.74616, -76.7461 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1399.83, 737.859, 80.812 ); + ent.v["angles"] = ( 270, 8.74616, -76.7461 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 998.477, 1466, 60.3866 ); + ent.v["angles"] = ( 270, 8.74616, -76.7461 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 917.195, -300.343, 45.699 ); + ent.v["angles"] = ( 270, 8.74616, -76.7461 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -144.907, 1110.06, 113 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_blue_light_flash" ); + ent.v["origin"] = ( -410.128, -1378.22, 246.225 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_blue_light_flash" ); + ent.v["origin"] = ( -445.276, -1340.9, 246.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_blue_light_flash" ); + ent.v["origin"] = ( -446.794, -910.811, 246.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_hvac_steam_md" ); + ent.v["origin"] = ( -88.3861, -569.169, 164 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_hvac_steam_md" ); + ent.v["origin"] = ( -241.005, -572.039, 162 ); + ent.v["angles"] = ( 270, 317.82, 42.1801 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( 2626.25, -915.518, 1098.13 ); + ent.v["angles"] = ( 353.326, 77.7307, -10.7992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( -2009.5, 3711.1, 1273.66 ); + ent.v["angles"] = ( 345.806, 236.473, -33.1638 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_hvac_steam_md" ); + ent.v["origin"] = ( 455.961, 1432.85, 180.481 ); + ent.v["angles"] = ( 360, 180, 179 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_drone_interior_steam" ); + ent.v["origin"] = ( 743.509, -1106.1, 406.125 ); + ent.v["angles"] = ( 44, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_drone_interior_steam" ); + ent.v["origin"] = ( 983.192, -1113.26, 409.282 ); + ent.v["angles"] = ( 25, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 312.372, -1045.85, 255.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -117.875, 926.303, 445.15 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 135.226, 934.289, 382.872 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 127.912, 1358.65, 433.532 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 196.399, 1405.13, 289.44 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 543, 1489.62, 242.926 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 715.455, 1488.13, 245.379 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 180.354, 821.355, 256.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -120.999, 908.161, 239.458 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 295.524, -543.985, 381.949 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1250.25, 2990.51, 717.439 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 541.356, 2930.26, 658.93 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 388.62, 2946.18, 642.458 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -1141.79, -805.362, 407.125 ); + ent.v["angles"] = ( 271, 270.034, 1.96582 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -1872.27, -1062.45, 288.726 ); + ent.v["angles"] = ( 271, 270.034, 1.96582 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -2351.54, -1041.53, 386.588 ); + ent.v["angles"] = ( 271, 270.034, 1.96582 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 173.628, -1099.77, 352.573 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -1453.68, -1649.88, 288.301 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -186.552, -1384.11, 200.671 ); + ent.v["angles"] = ( 271, 270.034, 1.96582 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -872.114, 1368.8, 312.82 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -873.069, 1111.28, 312.606 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_sm" ); + ent.v["origin"] = ( -962.185, 1381.91, 210.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_sm" ); + ent.v["origin"] = ( -869.748, 1384.6, 214.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_sm" ); + ent.v["origin"] = ( -881.925, 1199.53, 211.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_drone_interior_steam" ); + ent.v["origin"] = ( -909.713, 1295.16, 322.125 ); + ent.v["angles"] = ( 81.2173, 10.8219, -163.631 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1089.45, 856.28, 242.851 ); + ent.v["angles"] = ( 90, 335.053, 63.0534 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1077.15, 855.461, 242.899 ); + ent.v["angles"] = ( 90, 335.053, 63.0534 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1091.1, 932.185, 243.851 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1075.83, 933.024, 243.899 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1216.03, 934.751, 243.851 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1201.85, 934.303, 243.899 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1215.18, 853.927, 242.851 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1201.5, 852.116, 242.899 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1472.5, 853.894, 242.851 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1459.25, 853.221, 242.899 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1472.84, 933.865, 243.851 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1460.58, 933.391, 243.899 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_drone_interior_steam" ); + ent.v["origin"] = ( -1255.09, 891.965, 254.875 ); + ent.v["angles"] = ( 84.7532, 287.105, -160.732 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( -106.876, -963.107, 291.72 ); + ent.v["angles"] = ( 270, 2.663, -59.663 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( -99.8857, -953.949, 292.839 ); + ent.v["angles"] = ( 0.982226, 314, 0.190924 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_red_light_flash" ); + ent.v["origin"] = ( -68.1748, -998.306, 315.877 ); + ent.v["angles"] = ( 292, 311, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_red_light_flash" ); + ent.v["origin"] = ( -102.632, -958.564, 267.823 ); + ent.v["angles"] = ( 70.9676, 127.919, -2.06949 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( -211.357, -915.039, 271.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( -171.842, -915.727, 271.106 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( -1341.07, 1494.98, 223.68 ); + ent.v["angles"] = ( 0, 90, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_sm" ); + ent.v["origin"] = ( -1450.12, 934.889, 197.89 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_sm" ); + ent.v["origin"] = ( -1445.62, 854.937, 199.464 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -588.447, 363.689, 334.125 ); + ent.v["angles"] = ( 358, 270, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -577.538, 98.5362, 337.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_pipe_md" ); + ent.v["origin"] = ( 514.313, 1737.05, 183.941 ); + ent.v["angles"] = ( 356.237, 354.329, 13.1112 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( 840.379, 931.497, 199.505 ); + ent.v["angles"] = ( 90, 5.37647, -84.6235 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( 840.094, 986.568, 163.298 ); + ent.v["angles"] = ( 90, 5.37647, -84.6235 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( 840.274, 872.125, 163.532 ); + ent.v["angles"] = ( 90, 5.37647, -84.6235 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( 840.347, 909.422, 138.801 ); + ent.v["angles"] = ( 90, 5.37647, -84.6235 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( 840.692, 1018.43, 155.828 ); + ent.v["angles"] = ( 90, 5.37647, -84.6235 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( 504.147, 854.314, 203.839 ); + ent.v["angles"] = ( 360, 270, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( 503.59, 915.612, 165.927 ); + ent.v["angles"] = ( 90, 303.785, 33.7846 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( 503.256, 993.559, 139.897 ); + ent.v["angles"] = ( 90, 303.785, 33.7846 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( 503.976, 825.379, 163.447 ); + ent.v["angles"] = ( 90, 303.785, 33.7846 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( 503.579, 1027.38, 165.556 ); + ent.v["angles"] = ( 90, 303.785, 33.7846 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["origin"] = ( -144.882, -976.606, 55.1214 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["origin"] = ( -72.7487, -790.111, 55.6851 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["origin"] = ( 93.5639, -1032.85, 55.4228 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["origin"] = ( 81.6291, -716.454, 54.9085 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( 8445.78, 958.823, 2149.85 ); + ent.v["angles"] = ( 352.952, 114.495, -4.16587 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( 1254.54, -14270.6, 2243.52 ); + ent.v["angles"] = ( 2.85125, 355.893, -2.20701 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( -881.677, -5322.52, 988.223 ); + ent.v["angles"] = ( 354.9, 350.148, 6.12797 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( -442.949, -4356.99, 181.056 ); + ent.v["angles"] = ( 359.137, 357.637, 5.97365 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( -3719.41, -6052.14, 2.67401 ); + ent.v["angles"] = ( 1.07069, 320.916, -3.44259 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( -13253.2, -3694.15, 686.953 ); + ent.v["angles"] = ( 357.698, 264.004, -2.77475 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( 6668.92, -2797.05, 1506.1 ); + ent.v["angles"] = ( 351.784, 73.6003, -14.7163 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( 5876.86, 4782.68, 2355.99 ); + ent.v["angles"] = ( 359.409, 143.109, -24.2684 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( -2045.8, 9335.17, 2539.13 ); + ent.v["angles"] = ( 358.641, 176.831, -20.9591 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( -5789.17, -5598.86, -163.943 ); + ent.v["angles"] = ( 359.208, 290.973, -3.51671 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( 4655.55, -7769.33, 430.5 ); + ent.v["angles"] = ( 0.337525, 53.9827, -9.32073 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 129.424, 258.73, 237.501 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 315.32, -230.312, 243.753 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 204.931, -400.728, 365.862 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( 1978.2, -7432.89, 80.51 ); + ent.v["angles"] = ( 0.337525, 53.9827, -9.32073 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( -5377.6, 8554.05, 2315 ); + ent.v["angles"] = ( 1.00764, 230.546, -14.7827 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( -3235.45, -9347.85, 639.106 ); + ent.v["angles"] = ( 2.85125, 355.893, -2.20701 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -661.517, -2184.93, 187.236 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -456.644, -1950.35, 235.93 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -726.787, 372.143, 433.015 ); + ent.v["angles"] = ( 90, 359.66, -0.340199 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -597.895, 429.579, 433.998 ); + ent.v["angles"] = ( 88, 359.998, 179.998 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -854.533, 372.085, 433.992 ); + ent.v["angles"] = ( 90, 359.66, -0.340199 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -983.071, 368.003, 433.001 ); + ent.v["angles"] = ( 90, 359.66, -0.340199 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -984.857, -49.7102, 431.508 ); + ent.v["angles"] = ( 90, 359.66, -0.340199 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -856.609, -50.5221, 432.502 ); + ent.v["angles"] = ( 90, 359.66, -0.340199 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -728.253, -48.6357, 432.504 ); + ent.v["angles"] = ( 90, 359.66, -0.340199 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -599.712, -48.5372, 432.5 ); + ent.v["angles"] = ( 90, 359.66, -0.340199 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -830.456, 194.635, 184.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -1132.19, 194.944, 96.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -1180.67, 894.292, 106.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -911.741, 1768.21, 138.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -1271.18, 1419.71, 158.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_hvac_steam_md" ); + ent.v["origin"] = ( 219.151, 616.294, 374.517 ); + ent.v["angles"] = ( 2, 179.964, 179 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 14.33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_blue_light_flash" ); + ent.v["origin"] = ( -915.636, -386.854, 419.125 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_blue_light_flash" ); + ent.v["origin"] = ( -915.21, -463.176, 417.926 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_blue_light_flash" ); + ent.v["origin"] = ( -788.358, -463.829, 418.928 ); + ent.v["angles"] = ( 359, 0, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_blue_light_flash" ); + ent.v["origin"] = ( -786.844, -385.015, 418.922 ); + ent.v["angles"] = ( 359, 0, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_drone_interior_steam" ); + ent.v["origin"] = ( -791.683, -424.114, 436.875 ); + ent.v["angles"] = ( 331.01, 355.552, 175.795 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_blue_light_flash" ); + ent.v["origin"] = ( -2962.86, -168.376, 239.125 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_blue_light_flash" ); + ent.v["origin"] = ( -2894.13, 611.254, 236.125 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_yellow" ); + ent.v["origin"] = ( -547.259, 803.78, 417.681 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_yellow" ); + ent.v["origin"] = ( -668.379, 808.104, 417.668 ); + ent.v["angles"] = ( 90, 351.756, 171.756 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_yellow" ); + ent.v["origin"] = ( -786.674, 804.643, 417.754 ); + ent.v["angles"] = ( 90, 351.756, 171.756 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_yellow" ); + ent.v["origin"] = ( -908.996, 803.995, 417.771 ); + ent.v["angles"] = ( 90, 351.756, 171.756 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( 1987.28, 7081.2, 1214.18 ); + ent.v["angles"] = ( 355.425, 167.348, -18.467 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -43.3369, -784.125, 1.99582 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -884.958, 1674.59, 259.69 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -454.995, -953.707, 197.141 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -450.125, -1215.63, 203.761 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -117.876, 661.942, 444.521 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 165.658, 1396.33, 420.678 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -40.1639, 935.789, 241.837 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -451.895, -527.453, 243.232 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); + ent.v["origin"] = ( 454.881, 2830.52, 771.77 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); + ent.v["origin"] = ( 1400.95, 2056.99, 598.402 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); + ent.v["origin"] = ( 841.906, 1.72622, 676.081 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); + ent.v["origin"] = ( 689.201, 3590.49, 1074.97 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 135.99, 3.5803, 245.314 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -1254.88, -1838.53, 287.22 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -1254.88, -2109.35, 286.939 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -677.85, -838.797, 196.603 ); + ent.v["angles"] = ( 271, 270.034, 1.96582 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 574.721, -537.327, 351.63 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 889.648, -473.876, 369.575 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 550.125, 182.958, 245.884 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 503.078, -104.937, 250.466 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 506.105, -374.441, 251.652 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 664.315, 717.955, 370.84 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -46.5185, -998.717, 96.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -60.7794, -1226.01, 103.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -904.953, 1599.53, 205.125 ); + ent.v["angles"] = ( 359.582, 275.986, 3.97881 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -906.186, 906.694, 158.125 ); + ent.v["angles"] = ( 0.864256, 183.097, -1.57232 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1301.26, -549.577, 154.125 ); + ent.v["angles"] = ( 4, 181.003, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1866, -902.506, 181.125 ); + ent.v["angles"] = ( 4.03909, 90.7342, -3.59119 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -559.245, 964.368, 331.125 ); + ent.v["angles"] = ( 359.582, 275.986, 3.97881 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -930.002, 933.654, 327.125 ); + ent.v["angles"] = ( 359.582, 275.986, 3.97881 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -623.971, -438.744, 330.125 ); + ent.v["angles"] = ( 0.990275, 183.995, 0.278846 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1021.67, -1041.28, 306.125 ); + ent.v["angles"] = ( 0.995139, 177.004, -0.209229 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 236.535, -1049.11, 294.125 ); + ent.v["angles"] = ( 2.02093, 5.97057, -0.418091 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 755.44, -795.417, 311.125 ); + ent.v["angles"] = ( 3.99512, 176.993, -0.209707 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 561.06, 1463.5, 173.125 ); + ent.v["angles"] = ( 2.30191, 295.197, 2.55832 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -621.524, 1863.79, 189.25 ); + ent.v["angles"] = ( 0.682676, 202.968, -0.43804 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1470.28, 877.346, 136.125 ); + ent.v["angles"] = ( 1.6415, 268.119, 0.72425 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1459.77, -488.147, 131.125 ); + ent.v["angles"] = ( 358.358, 88.1195, -0.724284 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_ring_console_runner" ); + ent.v["origin"] = ( 730.148, -801.732, 275.307 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_ring_console_runner" ); + ent.v["origin"] = ( 723.6, -751.447, 275.971 ); + ent.v["angles"] = ( 270, 1.02303, 168.977 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -6; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_drone" ); + ent.v["origin"] = ( 593.267, 2985.65, 282.35 ); + ent.v["angles"] = ( 314.223, 207.013, 164.712 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -2461.5, -2325.44, 1363.93 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -2413.14, -2325.3, 1075.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -2993.38, -2327.89, 1075.99 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -2940.83, -2321.29, 1366.18 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -687.439, -1392.45, 92.4524 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -873.388, -1569.18, 107.33 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -1024.86, -1229.66, 83.407 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( -6284.61, 10620.2, 4105.17 ); + ent.v["angles"] = ( 1.00764, 230.546, -14.7827 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( 3107.53, 12415.2, 3433.09 ); + ent.v["angles"] = ( 359.361, 176.513, -17.9065 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -2713.62, -481.406, 2158.91 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_blue_light_flash" ); + ent.v["origin"] = ( 184.522, -943.573, 465.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -2681.76, -513.98, 1659.86 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -2686.94, -5971.79, 1159.37 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -3254.8, -5969.08, 1155 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -3204.28, -5968.16, 1441.38 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -2734.42, -5971.58, 1441.93 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_red_button_flash" ); + ent.v["origin"] = ( -1022.9, 720.225, 300.173 ); + ent.v["angles"] = ( 359, 180, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_ring_console_runner" ); + ent.v["origin"] = ( -1019.7, 700.575, 301.161 ); + ent.v["angles"] = ( 270, 359.851, 0.149435 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -7; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 125.875, 237.939, 239.24 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_wall_water_ground" ); + ent.v["origin"] = ( -163.926, 958.558, 114.726 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_wall_water_ground" ); + ent.v["origin"] = ( -163.704, 639.642, 113.797 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_wall_water_ground" ); + ent.v["origin"] = ( -766.908, -786.082, -23.6831 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_wall_water_ground" ); + ent.v["origin"] = ( 202.334, -494.846, -29.897 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_hvac_steam_md" ); + ent.v["origin"] = ( -2016.27, -1050.73, 67 ); + ent.v["angles"] = ( 326, 267, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -978.614, -625.191, 410.046 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -949.153, -625.427, 410.878 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1007.35, -624.938, 410.85 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -853.005, -625.187, 410.836 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -823.602, -625.134, 410.999 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -881.906, -624.554, 410.861 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( -721.986, -322.659, 448.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( -600.388, -321.699, 448.389 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( -597.396, -516.086, 448.429 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( -723.185, -516.122, 448.441 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( -983.077, -321.208, 448.474 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( -981.561, -515.324, 448.466 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_wall_water_ground" ); + ent.v["origin"] = ( 954.967, 759.387, 59.0158 ); + ent.v["angles"] = ( 275, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1154.67, -239.638, 267.525 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 963.38, 116.635, 173.138 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 496.346, 2737.08, 298.94 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 456.052, 2205.88, 185.731 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1121.3, 2751.93, 294.687 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -1488.9, -1596.99, 112 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 861.716, 932.432, 328.489 ); + ent.v["angles"] = ( 4, 178.997, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 611.028, 795.51, 158.806 ); + ent.v["angles"] = ( 358.633, 70.045, -3.75949 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -59.5565, -1193.75, 25.8188 ); + ent.v["angles"] = ( 0, 90.9979, -4 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -3755.95, -9603.46, 1571.11 ); + ent.v["angles"] = ( 270, 0.421275, 1.57871 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -3286.26, -9590.47, 1571.66 ); + ent.v["angles"] = ( 270, 0.421275, 1.57871 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -3238.8, -9589.03, 1289.1 ); + ent.v["angles"] = ( 270, 0.421275, 1.57871 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -3806.41, -9606.13, 1284.73 ); + ent.v["angles"] = ( 270, 0.421275, 1.57871 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -389.543, -968.941, 45.43 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -409.87, -1192.24, 77.6814 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -2915.85, 582.787, 256.524 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -2960.76, -135.903, 259.909 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_drone2" ); + ent.v["origin"] = ( -1477.26, 440.517, 89.4437 ); + ent.v["angles"] = ( 308, 270, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -872.236, 1241.7, 312.473 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -951.889, 1242.73, 313.431 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -953.056, 1368.28, 312.412 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -951.243, 1496.61, 312.439 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -951.362, 1624.56, 313.447 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -872.966, 1496.88, 312.52 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -872.338, 1624.35, 312.54 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( -1340.84, 1479.48, 163.788 ); + ent.v["angles"] = ( 270, 309.768, -39.768 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( -1007.96, 1308.56, 169.669 ); + ent.v["angles"] = ( 0, 90, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_ring_console_runner" ); + ent.v["origin"] = ( -1020.76, 667.062, 301.169 ); + ent.v["angles"] = ( 270, 0.255783, -177.256 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_red_button_flash" ); + ent.v["origin"] = ( -1016.96, 669.05, 300.371 ); + ent.v["angles"] = ( 0, 179, -89.8826 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam" ); + ent.v["origin"] = ( -1822.66, -1035.77, 353.86 ); + ent.v["angles"] = ( 353.017, 265.97, 0.490713 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam" ); + ent.v["origin"] = ( -1929.89, -1022.11, 359.408 ); + ent.v["angles"] = ( 353.017, 265.97, 0.490713 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -952.002, 1481.48, 312.577 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -872.617, 1480.68, 313.451 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -875.283, 1609.12, 311.013 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -952.024, 1610.95, 313.525 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -872.928, 1352.16, 313.001 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -872.054, 1223.13, 313.13 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -952.927, 1352.59, 312.212 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -874.153, 1098.93, 312.002 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -952.295, 1098.67, 313.014 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1074.48, 1471.09, 282.029 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1059.8, 1471.35, 282.107 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1059.17, 1392.64, 282.038 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1076.86, 1392.31, 282.96 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1187.14, 1394.76, 281.465 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1204.82, 1394.43, 282.387 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1314.01, 1392.53, 281.541 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1330.39, 1393.16, 281.463 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1313.21, 1473.16, 282.542 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1330.89, 1472.83, 283.464 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1185.12, 1471.61, 282.54 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1202.8, 1471.29, 282.462 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -952.029, 1225.24, 313.999 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1331.01, 853.498, 242.032 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1345.19, 853.946, 242.984 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1329.88, 934.157, 242.527 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1344.06, 934.606, 242.479 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -948.181, 933.051, 242.523 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -962.284, 933.495, 243.475 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -819.362, 933.69, 242.527 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -833.543, 934.138, 242.479 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -819.8, 854.203, 242.03 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -833.981, 854.651, 242.982 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -948.683, 854.554, 242.025 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -962.117, 854.527, 241.977 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( -6810.74, -2265.67, -1022.36 ); + ent.v["angles"] = ( 357.698, 264.004, -2.77475 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( -2991.83, -3206.12, 153.808 ); + ent.v["angles"] = ( 356.909, 333.223, 7.3457 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 263.835, 927.725, 403.213 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 263.658, 1010.4, 402.739 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_drone_interior_steam" ); + ent.v["origin"] = ( 623.76, -1103.02, 404.754 ); + ent.v["angles"] = ( 45, 90, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_drone_interior_steam" ); + ent.v["origin"] = ( -912.102, 1170.65, 310.491 ); + ent.v["angles"] = ( 60.002, 179.893, 179.998 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_drone_interior_steam" ); + ent.v["origin"] = ( -1131.35, 1435.54, 288.503 ); + ent.v["angles"] = ( 79.644, 99.761, -172.7 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 733.578, 946.591, 240.928 ); + ent.v["angles"] = ( 90, 0, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 734.355, 889.922, 241.904 ); + ent.v["angles"] = ( 90, 0, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 605.725, 888.408, 242.922 ); + ent.v["angles"] = ( 90, 0, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 606.575, 949.938, 241.919 ); + ent.v["angles"] = ( 90, 0, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 638.731, -535.378, 22.6499 ); + ent.v["angles"] = ( 270, 8.74616, -76.7461 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_hvac_steam_md" ); + ent.v["origin"] = ( 209.196, -127.299, 191.188 ); + ent.v["angles"] = ( 359, 270, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_skinny" ); + ent.v["origin"] = ( 678.362, 1171.87, 216.125 ); + ent.v["angles"] = ( 90, 22.5361, 112.536 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_skinny" ); + ent.v["origin"] = ( 415.825, 832.303, 366.397 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_drone_rapid" ); + ent.v["origin"] = ( -649.15, 836.622, 304.125 ); + ent.v["angles"] = ( 270, 0, -179.075 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_drone_rapid" ); + ent.v["origin"] = ( -649.2, 836.448, 331.749 ); + ent.v["angles"] = ( 270, 0, -179.075 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_drone_rapid" ); + ent.v["origin"] = ( -649.2, 809.854, 331.58 ); + ent.v["angles"] = ( 270, 0, -179.075 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_drone_rapid" ); + ent.v["origin"] = ( -649.199, 849.558, 341.199 ); + ent.v["angles"] = ( 270, 0, -179.075 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_drone_rapid" ); + ent.v["origin"] = ( -649.198, 823.159, 341.093 ); + ent.v["angles"] = ( 270, 0, -179.075 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_drone_rapid" ); + ent.v["origin"] = ( -649.194, 810.015, 304.436 ); + ent.v["angles"] = ( 270, 0, -179.075 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( -1287.83, 905.122, 393.987 ); + ent.v["angles"] = ( 90, 0, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( -1136.99, 901.405, 393.648 ); + ent.v["angles"] = ( 90, 0, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_ring_console_runner" ); + ent.v["origin"] = ( -563.921, -396.323, 302.507 ); + ent.v["angles"] = ( 270, 1.02303, 168.977 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_ring_console_runner" ); + ent.v["origin"] = ( -566.368, -443.58, 301.843 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( -990.768, 5498.91, 1464.19 ); + ent.v["angles"] = ( 358.797, 165.491, -4.97454 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -1859.18, -730.723, 232.806 ); + ent.v["angles"] = ( 90, 359.66, -0.340199 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -1353.12, -542.779, 232.406 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -1604.83, -541.29, 232.631 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["origin"] = ( -1859.57, -857.978, 232.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["origin"] = ( -1861.98, -924.381, 230.928 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista_lg" ); + ent.v["origin"] = ( 9644.56, 7823.23, 6680.54 ); + ent.v["angles"] = ( 359.234, 123.905, -28.9793 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista_lg" ); + ent.v["origin"] = ( -13542.6, 16523.3, 9830.55 ); + ent.v["angles"] = ( 1.71905, 218.249, -20.9778 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista_lg" ); + ent.v["origin"] = ( 276.66, 16767.7, 5623.09 ); + ent.v["angles"] = ( 356.208, 178.737, -11.4733 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 297.245, -565.136, 97.0805 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 299.902, -701.637, 23.9968 ); + ent.v["angles"] = ( 0.209195, 92.9928, -3.99514 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1013.72, 4127.44, 293.127 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 708.264, 3949.28, 393.346 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista_lg" ); + ent.v["origin"] = ( 9232, -2215.96, 2746.91 ); + ent.v["angles"] = ( 337.685, 77.4872, -18.9982 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -1354.08, -2307.16, 110 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( -6931.43, -2303.66, 214.174 ); + ent.v["angles"] = ( 0.706331, 305.471, 7.93499 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1148.24, 4659.96, 319.632 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_drone_interior_steam" ); + ent.v["origin"] = ( 743.524, -956.336, 409.645 ); + ent.v["angles"] = ( 37.9905, 261.041, -5.39119 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 766.946, -1247.2, 304.182 ); + ent.v["angles"] = ( 7.05027, 168.986, -0.201279 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 962.284, -868.168, 261.124 ); + ent.v["angles"] = ( 24.7563, 93.1528, 1.67565 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1743.82, 617.397, 251.999 ); + ent.v["angles"] = ( 270, 8.74616, -76.7461 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -364.257, 247.23, 219.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 433.7, 660.709, 247.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 613.776, 692.465, 371.516 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -506.822, 1883.44, 265.412 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 21.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -569.787, 1950.94, 266.577 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 22.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -1614.5, -1804.88, 285.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( 993.073, 5394.7, 1032.47 ); + ent.v["angles"] = ( 358.797, 165.491, -4.97454 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( 2871.98, 1828.48, 870.813 ); + ent.v["angles"] = ( 6.02783, 104.149, -4.99374 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 270.381, 1168.16, 355.939 ); + ent.v["angles"] = ( 65.8451, 277.213, 96.0144 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 371.39, 1294.56, 296.049 ); + ent.v["angles"] = ( 58, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 934.538, 4930.19, 312.547 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( -1284.92, 1115.69, 364.842 ); + ent.v["angles"] = ( 76, 270, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_red_light_flash" ); + ent.v["origin"] = ( -31.8417, -1041.87, 263.384 ); + ent.v["angles"] = ( 292, 311, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_red_light_flash" ); + ent.v["origin"] = ( -34.8275, -1040.35, 254.663 ); + ent.v["angles"] = ( 292, 311, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -154.832, -1934.51, 205.635 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 788.487, 6140.1, 366.7 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 884.408, 5981.83, 300.174 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["origin"] = ( -1454.73, -406.791, 230.183 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["origin"] = ( -1452.6, 799.826, 229.652 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 263.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["origin"] = ( -923.087, 1667.74, 279.368 ); + ent.v["angles"] = ( 292, 311, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["origin"] = ( -1324.26, -2110.99, 277.613 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["origin"] = ( -1679.73, -1985.27, 230.319 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["origin"] = ( -1288.41, 1280.36, 278.775 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["origin"] = ( 178.528, 911.348, 398.839 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( 553.305, -923.114, 355.431 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( 582.745, -1133.63, 355.113 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( 937.727, -1134.12, 355.187 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( 457.015, -1042.54, 357.848 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( 457.027, -1021.6, 357.565 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( 553.538, -937.267, 355.595 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( 444.023, -1042.3, 357.302 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( 445.596, -1019.4, 357.585 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( 889.882, -496.404, 188.74 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -1056.34, -512.798, 379.994 ); + ent.v["angles"] = ( 1, 180, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -1043.11, -513.929, 378.79 ); + ent.v["angles"] = ( 359, 359.997, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -623.879, -234.962, 378.38 ); + ent.v["angles"] = ( 359.983, 89.0033, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -601.586, 617.154, 379.417 ); + ent.v["angles"] = ( 0, 265, 0.996355 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -600.64, 630.638, 379.253 ); + ent.v["angles"] = ( 359.983, 89.0033, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -416.764, 801.349, 378.66 ); + ent.v["angles"] = ( 1, 179.003, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -403.384, 798.815, 378.893 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -1043.08, 885.957, 381.826 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -1043.07, 909.282, 381.768 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -1057.74, 885.405, 381.289 ); + ent.v["angles"] = ( 359, 176.004, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -1056.11, 908.672, 381.347 ); + ent.v["angles"] = ( 359, 176.004, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -822.494, 810.855, 210.5 ); + ent.v["angles"] = ( 359.983, 89.0033, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -1197.75, -543.729, 211.5 ); + ent.v["angles"] = ( 1, 179.003, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -1984.17, -544.368, 211.844 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1371.39, -1683.92, 291.931 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1435.02, -1682.49, 291.95 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1499.81, -1683.35, 291.906 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -1360.18, 981.172, 211.351 ); + ent.v["angles"] = ( 359.983, 271.003, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -1152.56, 981.151, 211.215 ); + ent.v["angles"] = ( 359.983, 271.003, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; +} diff --git a/MP/Maps/Drone/clientscripts/mp/mp_drone.csc b/MP/Maps/Drone/clientscripts/mp/mp_drone.csc new file mode 100644 index 0000000..7e8ed24 --- /dev/null +++ b/MP/Maps/Drone/clientscripts/mp/mp_drone.csc @@ -0,0 +1,26 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_drone_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_drone_amb; + +main() +{ + level.worldmapx = -55; + level.worldmapy = 540; + level.worldlat = 26.1287; + level.worldlong = 96.4161; + clientscripts\mp\_load::main(); + clientscripts\mp\mp_drone_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_drone_amb::main(); + setsaveddvar( "compassmaxrange", "2100" ); + setsaveddvar( "sm_sunsamplesizenear", 0.39 ); + setsaveddvar( "sm_sunshadowsmall", 1 ); + waitforclient( 0 ); +/# + println( "*** Client : mp_drone running..." ); +#/ +} diff --git a/MP/Maps/Drone/clientscripts/mp/mp_drone_amb.csc b/MP/Maps/Drone/clientscripts/mp/mp_drone_amb.csc new file mode 100644 index 0000000..5575500 --- /dev/null +++ b/MP/Maps/Drone/clientscripts/mp/mp_drone_amb.csc @@ -0,0 +1,169 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "drone_outdoor", 1 ); + setambientroomtone( "drone_outdoor", "amb_wind_extreior_2d", 0.55, 1 ); + setambientroomreverb( "drone_outdoor", "drone_outdoor", 1, 1 ); + setambientroomcontext( "drone_outdoor", "ringoff_plr", "outdoor" ); + declareambientroom( "drone_partial_room" ); + setambientroomreverb( "drone_partial_room", "drone_partial_room", 1, 1 ); + setambientroomcontext( "drone_partial_room", "ringoff_plr", "outdoor" ); + declareambientroom( "drone_small_partial" ); + setambientroomreverb( "drone_small_partial", "drone_small_partial", 1, 1 ); + setambientroomcontext( "drone_small_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "drone_small_room" ); + setambientroomreverb( "drone_small_room", "drone_small_room", 1, 1 ); + setambientroomcontext( "drone_small_room", "ringoff_plr", "indoor" ); + declareambientroom( "drone_entry_room" ); + setambientroomreverb( "drone_entry_room", "drone_entry_room", 1, 1 ); + setambientroomcontext( "drone_entry_room", "ringoff_plr", "indoor" ); + declareambientroom( "drone_medium_room" ); + setambientroomreverb( "drone_medium_room", "drone_medium_room", 1, 1 ); + setambientroomcontext( "drone_medium_room", "ringoff_plr", "indoor" ); + declareambientroom( "drone_large_room" ); + setambientroomreverb( "drone_large_room", "drone_large_room", 1, 1 ); + setambientroomcontext( "drone_large_room", "ringoff_plr", "indoor" ); + declareambientroom( "drone_open_room" ); + setambientroomreverb( "drone_open_room", "drone_open_room", 1, 1 ); + setambientroomcontext( "drone_open_room", "ringoff_plr", "outdoor" ); + declareambientroom( "drone_dense_hallway" ); + setambientroomreverb( "drone_dense_hallway", "drone_dense_hallway", 1, 1 ); + setambientroomcontext( "drone_dense_hallway", "ringoff_plr", "indoor" ); + declareambientroom( "drone_indoor_hallway" ); + setambientroomreverb( "drone_indoor_hallway", "drone_indoor_hallway", 1, 1 ); + setambientroomcontext( "drone_indoor_hallway", "ringoff_plr", "indoor" ); + declareambientroom( "drone_indoor_hallway_partial" ); + setambientroomreverb( "drone_indoor_hallway_partial", "drone_indoor_hallway", 1, 1 ); + setambientroomcontext( "drone_indoor_hallway_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "drone_outdoor_hallway" ); + setambientroomreverb( "drone_outdoor_hallway", "drone_outdoor_hallway", 1, 1 ); + setambientroomcontext( "drone_outdoor_hallway", "ringoff_plr", "outdoor" ); + declareambientroom( "drone_stone_room" ); + setambientroomreverb( "drone_stone_room", "drone_stone_room", 1, 1 ); + setambientroomcontext( "drone_stone_room", "ringoff_plr", "indoor" ); + declareambientroom( "drone_container" ); + setambientroomreverb( "drone_container", "drone_container", 1, 1 ); + setambientroomcontext( "drone_container", "ringoff_plr", "indoor" ); + declareambientroom( "drone_small_helipad_room" ); + setambientroomreverb( "drone_small_helipad_room", "drone_small_room", 1, 1 ); + setambientroomcontext( "drone_small_helipad_room", "ringoff_plr", "indoor" ); + declareambientroom( "drone_small_helipad_room_partial" ); + setambientroomreverb( "drone_small_helipad_room_partial", "drone_small_room", 1, 1 ); + setambientroomcontext( "drone_small_helipad_room_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "drone_small_under_helipad_room" ); + setambientroomreverb( "drone_small_under_helipad_room", "drone_cave", 1, 1 ); + setambientroomcontext( "drone_small_under_helipad_room", "ringoff_plr", "indoor" ); + declareambientroom( "drone_small_carpet_room" ); + setambientroomreverb( "drone_small_carpet_room", "drone_carpet", 1, 1 ); + setambientroomcontext( "drone_small_carpet_room", "ringoff_plr", "indoor" ); + declareambientroom( "drone_small_carpet_partial_room" ); + setambientroomreverb( "drone_small_carpet_partial_room", "drone_carpet", 1, 1 ); + setambientroomcontext( "drone_small_carpet_partial_room", "ringoff_plr", "outdoor" ); + declareambientroom( "drone_large_hanger_room" ); + setambientroomreverb( "drone_large_hanger_room", "drone_hangar", 1, 1 ); + setambientroomcontext( "drone_large_hanger_room", "ringoff_plr", "indoor" ); + declareambientroom( "drone_small_comp_room" ); + setambientroomreverb( "drone_small_comp_room", "drone_small_comp", 1, 1 ); + setambientroomcontext( "drone_small_comp_room", "ringoff_plr", "indoor" ); + declareambientroom( "drone_small_comp_room_partial" ); + setambientroomreverb( "drone_small_comp_room_partial", "drone_small_comp", 1, 1 ); + setambientroomcontext( "drone_small_comp_room_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "drone_factory" ); + setambientroomreverb( "drone_factory", "drone_factory", 1, 1 ); + setambientroomcontext( "drone_factory", "ringoff_plr", "indoor" ); + declareambientroom( "drone_factory_partial" ); + setambientroomreverb( "drone_factory_partial", "drone_factory", 1, 1 ); + setambientroomcontext( "drone_factory_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "drone_large_machine_room" ); + setambientroomreverb( "drone_large_machine_room", "drone_factory", 1, 1 ); + setambientroomcontext( "drone_large_machine_room", "ringoff_plr", "indoor" ); + declareambientroom( "drone_small_brick_room" ); + setambientroomreverb( "drone_small_brick_room", "drone_stone_room", 1, 1 ); + setambientroomcontext( "drone_small_brick_room", "ringoff_plr", "indoor" ); + declareambientroom( "drone_small_tile_room" ); + setambientroomreverb( "drone_small_tile_room", "drone_tile_room", 1, 1 ); + setambientroomcontext( "drone_small_tile_room", "ringoff_plr", "indoor" ); + declareambientroom( "drone_small_marble_room" ); + setambientroomreverb( "drone_small_marble_room", "drone_marble_room", 1, 1 ); + setambientroomcontext( "drone_small_marble_room", "ringoff_plr", "indoor" ); + declareambientroom( "drone_small_marble_room_partial" ); + setambientroomreverb( "drone_small_marble_room_partial", "drone_marble_room", 1, 1 ); + setambientroomcontext( "drone_small_marble_room_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "drone_hangar_hall" ); + setambientroomreverb( "drone_hangar_hall", "drone_hangar_hall", 1, 1 ); + setambientroomcontext( "drone_hangar_hall", "ringoff_plr", "indoor" ); + declareambientroom( "drone_hangar_hall_partial" ); + setambientroomreverb( "drone_hangar_hall_partial", "drone_hangar_hall", 1, 1 ); + setambientroomcontext( "drone_hangar_hall_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "drone_stairwell" ); + setambientroomreverb( "drone_stairwell", "drone_stairwell", 1, 1 ); + setambientroomcontext( "drone_stairwell", "ringoff_plr", "indoor" ); + thread snd_start_autofdrone_audio(); + thread snd_play_loopers(); + thread scanner_alert(); +} + +snd_play_loopers() +{ + playloopat( "amb_factory_fans", ( -1872, -1079, 355 ) ); + playloopat( "amb_floor_grate", ( -130, 268, 105 ) ); + playloopat( "amb_cave_drip", ( -72, -1215, -21 ) ); + playloopat( "amb_cave_drip", ( -93, -1148, -28 ) ); + playloopat( "amb_cave_drip", ( -59, -1005, -33 ) ); + playloopat( "amb_cave_drip", ( 179, -831, -31 ) ); + playloopat( "amb_exahust", ( -181, 1236, 239 ) ); + playloopat( "amb_exahust", ( -181, 1394, 239 ) ); + playloopat( "amb_scanner_idle", ( -551, -718, 62 ) ); + playloopat( "amb_scanner_idle", ( -770, -712, 68 ) ); + playloopat( "amb_tarp_flap", ( -65, -1258, 295 ) ); + playloopat( "amb_tarp_flap", ( -324, -686, 291 ) ); + playloopat( "amb_tarp_flap", ( 106, -718, 339 ) ); +} + +snd_start_autofdrone_audio() +{ + snd_play_auto_fx( "fx_mp_drone_interior_steam", "amb_ceilng_fog", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_ceiling_circle_light_glare", "amb_hall_ceiling_lights", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_drone_red_ring_console_runner", "amb_screens_a", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_drone_rectangle_light_blue", "amb_blue_underground_lights", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_wall_water_ground", "amb_gutter_flow", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_mp_steam_pipe_md", "amb_steam_hiss", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_water_drip_light_long", "amb_water_drip", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_mp_water_drip_light_shrt", "amb_water_drip", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_insects_swarm_dark_lg", "amb_flies", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_hvac_steam_md", "amb_fan_steam", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_drone_rectangle_light_skinny", "amb_hall_ceiling_lights", 0, 0, 0, 0 ); +} + +scanner_alert() +{ + scannertrig = getent( 0, "scanner_alert", "targetname" ); + + if ( isdefined( scannertrig ) ) + { + for (;;) + { + scannertrig waittill( "trigger", trigplayer ); + + scannertrig thread trigger_thread( trigplayer, ::trig_enter_alarm, ::trig_leave_alarm ); + wait 0.25; + } + } +} + +trig_enter_alarm( trigplayer ) +{ + self playsound( 0, "amb_scanner_detect" ); + wait 0.25; + playsound( 0, "amb_scanner_alarm", ( -460, -809, -438 ) ); +} + +trig_leave_alarm( trigplayer ) +{ + +} diff --git a/MP/Maps/Drone/clientscripts/mp/mp_drone_fx.csc b/MP/Maps/Drone/clientscripts/mp/mp_drone_fx.csc new file mode 100644 index 0000000..e946bdc --- /dev/null +++ b/MP/Maps/Drone/clientscripts/mp/mp_drone_fx.csc @@ -0,0 +1,191 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\createfx\mp_drone_fx; +#include clientscripts\mp\_fx; + +precache_scripted_fx() +{ + level._effect["fx_mp_drone_robot_sparks"] = loadfx( "maps/mp_maps/fx_mp_drone_robot_sparks" ); +} + +precache_createfx_fx() +{ + level._effect["fx_leaves_falling_mangrove_lg_dark"] = loadfx( "env/foliage/fx_leaves_falling_mangrove_lg_dark" ); + level._effect["fx_mp_vent_steam"] = loadfx( "maps/mp_maps/fx_mp_vent_steam" ); + level._effect["fx_hvac_steam_md"] = loadfx( "smoke/fx_hvac_steam_md" ); + level._effect["fx_mp_water_drip_light_shrt"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_shrt" ); + level._effect["fx_fog_street_cool_slw_md"] = loadfx( "fog/fx_fog_street_cool_slw_md" ); + level._effect["fx_light_emrgncy_floodlight"] = loadfx( "light/fx_light_emrgncy_floodlight" ); + level._effect["fx_insects_swarm_dark_lg"] = loadfx( "bio/insects/fx_insects_swarm_dark_lg" ); + level._effect["fx_mp_fog_low"] = loadfx( "maps/mp_maps/fx_mp_fog_low" ); + level._effect["fx_insects_swarm_md_light"] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); + level._effect["fx_lf_dockside_sun1"] = loadfx( "lens_flares/fx_lf_mp_drone_sun1" ); + level._effect["fx_light_floodlight_rnd_cool_glw_dim"] = loadfx( "light/fx_light_floodlight_rnd_cool_glw_dim" ); + level._effect["fx_mp_steam_pipe_md"] = loadfx( "maps/mp_maps/fx_mp_steam_pipe_md" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_light_dust_motes_sm"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_sm" ); + level._effect["fx_mp_fog_cool_ground"] = loadfx( "maps/mp_maps/fx_mp_fog_cool_ground" ); + level._effect["fx_red_button_flash"] = loadfx( "light/fx_red_button_flash" ); + level._effect["fx_mp_distant_cloud"] = loadfx( "maps/mp_maps/fx_mp_distant_cloud_lowmem" ); + level._effect["fx_light_god_ray_mp_drone"] = loadfx( "env/light/fx_light_god_ray_mp_drone" ); + level._effect["fx_ceiling_circle_light_glare"] = loadfx( "light/fx_ceiling_circle_light_glare" ); + level._effect["fx_drone_rectangle_light"] = loadfx( "light/fx_drone_rectangle_light" ); + level._effect["fx_drone_rectangle_light_02"] = loadfx( "light/fx_drone_rectangle_light_02" ); + level._effect["fx_mp_water_drip_light_long"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); + level._effect["fx_pc_panel_lights_runner"] = loadfx( "props/fx_pc_panel_lights_runner" ); + level._effect["fx_drone_red_ring_console"] = loadfx( "light/fx_drone_red_ring_console" ); + level._effect["fx_blue_light_flash"] = loadfx( "light/fx_blue_light_flash" ); + level._effect["fx_window_god_ray"] = loadfx( "light/fx_window_god_ray" ); + level._effect["fx_mp_drone_interior_steam"] = loadfx( "maps/mp_maps/fx_mp_drone_interior_steam" ); + level._effect["fx_pc_panel_heli"] = loadfx( "props/fx_pc_panel_heli" ); + level._effect["fx_red_light_flash"] = loadfx( "light/fx_red_light_flash" ); + level._effect["fx_drone_rectangle_light_blue"] = loadfx( "light/fx_drone_rectangle_light_blue" ); + level._effect["fx_mp_distant_cloud_vista"] = loadfx( "maps/mp_maps/fx_mp_distant_cloud_vista_lowmem" ); + level._effect["fx_drone_rectangle_light_blue_4"] = loadfx( "light/fx_drone_rectangle_light_blue_4" ); + level._effect["fx_drone_rectangle_light_yellow"] = loadfx( "light/fx_drone_rectangle_light_yellow" ); + level._effect["fx_ceiling_circle_light_led"] = loadfx( "light/fx_ceiling_circle_light_led" ); + level._effect["fx_drone_red_ring_console_runner"] = loadfx( "light/fx_drone_red_ring_console_runner" ); + level._effect["fx_light_beacon_red_blink_fst"] = loadfx( "light/fx_light_beacon_red_blink_fst" ); + level._effect["fx_wall_water_ground"] = loadfx( "water/fx_wall_water_ground" ); + level._effect["fx_drone_rectangle_light_03"] = loadfx( "light/fx_drone_rectangle_light_03" ); + level._effect["fx_drone_red_blink"] = loadfx( "light/fx_drone_red_blink" ); + level._effect["fx_light_god_ray_mp_drone2"] = loadfx( "env/light/fx_light_god_ray_mp_drone2" ); + level._effect["fx_drone_rectangle_light_skinny"] = loadfx( "light/fx_drone_rectangle_light_skinny" ); + level._effect["fx_mp_drone_rapid"] = loadfx( "maps/mp_maps/fx_mp_drone_rapid" ); + level._effect["fx_mp_distant_cloud_vista_lg"] = loadfx( "maps/mp_maps/fx_mp_distant_cloud_vista_lg_lowmem" ); + level._effect["fx_light_exit_sign"] = loadfx( "light/fx_light_exit_sign_glow" ); + level._effect["fx_drone_light_yellow"] = loadfx( "light/fx_drone_light_yellow" ); +} + +main() +{ + clientscripts\mp\createfx\mp_drone_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fxanim_props(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["vines_aquilaria"] = %fxanim_gp_vines_aquilaria_anim; + level.scr_anim["fxanim_props"]["vines_strangler_fig"] = %fxanim_gp_vines_strangler_fig_anim; + level.drone_anims = []; + level.drone_anims["fxanim_mp_drone_factory_link_anim"] = %fxanim_mp_drone_factory_link_anim; + level.drone_anims["fxanim_mp_drone_factory_welder_01_anim"] = %fxanim_mp_drone_factory_welder_01_anim; + level.drone_anims["fxanim_mp_drone_factory_welder_02_anim"] = %fxanim_mp_drone_factory_welder_02_anim; + level.drone_anims["fxanim_mp_drone_factory_welder_03_anim"] = %fxanim_mp_drone_factory_welder_03_anim; + level.drone_anims["fxanim_mp_drone_factory_welder_04_anim"] = %fxanim_mp_drone_factory_welder_04_anim; + level.drone_anims["fxanim_mp_drone_factory_suction_01_anim"] = %fxanim_mp_drone_factory_suction_01_anim; + level.drone_anims["fxanim_mp_drone_factory_suction_02_anim"] = %fxanim_mp_drone_factory_suction_02_anim; + level.drone_anims["fxanim_mp_drone_factory_suction_03_anim"] = %fxanim_mp_drone_factory_suction_03_anim; + level.drone_anims["fxanim_mp_drone_factory_suction_04_anim"] = %fxanim_mp_drone_factory_suction_04_anim; + level.drone_anims["fxanim_mp_drone_factory_link_anim_off"] = %fxanim_mp_drone_factory_link_off_anim; + level.drone_anims["fxanim_mp_drone_factory_welder_01_anim_off"] = %fxanim_mp_drone_factory_welder_01_off_anim; + level.drone_anims["fxanim_mp_drone_factory_welder_02_anim_off"] = %fxanim_mp_drone_factory_welder_02_off_anim; + level.drone_anims["fxanim_mp_drone_factory_welder_03_anim_off"] = %fxanim_mp_drone_factory_welder_03_off_anim; + level.drone_anims["fxanim_mp_drone_factory_welder_04_anim_off"] = %fxanim_mp_drone_factory_welder_04_off_anim; + level.drone_anims["fxanim_mp_drone_factory_suction_01_anim_off"] = %fxanim_mp_drone_factory_suction_01_off_anim; + level.drone_anims["fxanim_mp_drone_factory_suction_02_anim_off"] = %fxanim_mp_drone_factory_suction_02_off_anim; + level.drone_anims["fxanim_mp_drone_factory_suction_03_anim_off"] = %fxanim_mp_drone_factory_suction_03_off_anim; + level.drone_anims["fxanim_mp_drone_factory_suction_04_anim_off"] = %fxanim_mp_drone_factory_suction_04_off_anim; + level.scr_anim["fxanim_props"]["vines_strangler_fig_alt"] = %fxanim_gp_vines_strangler_fig_alt_anim; + level.fx_anim_level_init = ::fxanim_init; +} + +fxanim_init( localclientnum ) +{ + level waittill( "snap_processed" ); + + models = getentarray( localclientnum, "drone_fxanim", "targetname" ); + + foreach ( model in models ) + { + if ( model.model == "fxanim_mp_drone_factory_link_mod" ) + model drone_link( localclientnum ); + + if ( isdefined( model.script_animation ) ) + { + if ( issubstr( model.script_animation, "drone_factory_welder" ) ) + { + model thread drone_animate_fx( localclientnum ); + continue; + } + + model thread drone_animation( localclientnum ); + } + } +} + +drone_animation( localclientnum ) +{ + self waittill_dobj( localclientnum ); + assert( isdefined( level.drone_anims[self.script_animation] ) ); + self useanimtree( #animtree ); + + if ( getgametypesetting( "allowMapScripting" ) ) + self animscripted( level.drone_anims[self.script_animation], 1.0, 0.0, 1.0 ); + else + self animscripted( level.drone_anims[self.script_animation + "_off"], 1.0, 0.0, 1.0 ); +} + +drone_link( localclientnum ) +{ + self waittill_dobj( localclientnum ); + models = getentarray( localclientnum, "drone_linkto", "targetname" ); + + foreach ( model in models ) + { + model waittill_dobj( localclientnum ); + model linkto( self, model.script_noteworthy ); + } +} + +drone_animate_fx( localclientnum ) +{ + self endon( "death" ); + self endon( "entityshutdown" ); + self endon( "delete" ); + self waittill_dobj( localclientnum ); + self useanimtree( #animtree ); + + if ( getgametypesetting( "allowMapScripting" ) ) + self animflaggedscripted( "fx", level.drone_anims[self.script_animation], 1.0, 0.0, 1.0 ); + else + self animflaggedscripted( "fx", level.drone_anims[self.script_animation + "_off"], 1.0, 0.0, 1.0 ); + + for (;;) + { + self waittill( "fx", note ); + + switch ( note ) + { + case "tack_weld_10": + case "tack_weld_09": + case "tack_weld_08": + case "tack_weld_07": + case "tack_weld_06": + case "tack_weld_05": + case "tack_weld_04": + case "tack_weld_03": + case "tack_weld_02": + case "tack_weld_01": + case "seam_weld_04_stop": + case "seam_weld_04_start": + case "seam_weld_03_stop": + case "seam_weld_03_start": + case "seam_weld_02_stop": + case "seam_weld_02_start": + case "seam_weld_01_stop": + case "seam_weld_01_start": + playfxontag( localclientnum, level._effect["fx_mp_drone_robot_sparks"], self, "tag_fx" ); + break; + } + } +} diff --git a/MP/Maps/Drone/maps/mp/createart/mp_drone_art.gsc b/MP/Maps/Drone/maps/mp/createart/mp_drone_art.gsc new file mode 100644 index 0000000..578649d --- /dev/null +++ b/MP/Maps/Drone/maps/mp/createart/mp_drone_art.gsc @@ -0,0 +1,27 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + level.tweakfile = 1; + setdvar( "scr_fog_exp_halfplane", "3759.28" ); + setdvar( "scr_fog_exp_halfheight", "243.735" ); + setdvar( "scr_fog_nearplane", "601.593" ); + setdvar( "scr_fog_red", "0.806694" ); + setdvar( "scr_fog_green", "0.962521" ); + setdvar( "scr_fog_blue", "0.9624" ); + setdvar( "scr_fog_baseheight", "-475.268" ); + setdvar( "visionstore_glowTweakEnable", "0" ); + setdvar( "visionstore_glowTweakRadius0", "5" ); + setdvar( "visionstore_glowTweakRadius1", "" ); + setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); + setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); + setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); + setdvar( "visionstore_glowTweakBloomIntensity1", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); + visionsetnaked( "mp_drone", 1 ); + setdvar( "r_lightGridEnableTweaks", 1 ); + setdvar( "r_lightGridIntensity", 1.0 ); + setdvar( "r_lightGridContrast", 0 ); +} diff --git a/MP/Maps/Drone/maps/mp/createfx/mp_drone_fx.gsc b/MP/Maps/Drone/maps/mp/createfx/mp_drone_fx.gsc new file mode 100644 index 0000000..5d2d5af --- /dev/null +++ b/MP/Maps/Drone/maps/mp/createfx/mp_drone_fx.gsc @@ -0,0 +1,2377 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); + ent.v["origin"] = ( 936.438, -2.6611, 660.016 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); + ent.v["origin"] = ( 1576.16, 1062.87, 566.274 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); + ent.v["origin"] = ( 1364.58, 3231.84, 876.975 ); + ent.v["angles"] = ( 298, 270, 80 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); + ent.v["origin"] = ( 1264.63, 2234.28, 626.041 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); + ent.v["origin"] = ( -75.2249, 2832.58, 732.129 ); + ent.v["angles"] = ( 277.7, 320.203, 41.0979 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_hvac_steam_md" ); + ent.v["origin"] = ( -120.827, 314.976, 77 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam" ); + ent.v["origin"] = ( -1748.31, 492.452, 590.125 ); + ent.v["angles"] = vectorscale( ( 0, 0, -1 ), 4.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam" ); + ent.v["origin"] = ( -1722.62, 300.426, 590.125 ); + ent.v["angles"] = vectorscale( ( 0, 0, -1 ), 4.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam" ); + ent.v["origin"] = ( -1707.88, 81.193, 588.125 ); + ent.v["angles"] = vectorscale( ( 0, 0, -1 ), 4.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam" ); + ent.v["origin"] = ( -1719.61, -114.235, 586.125 ); + ent.v["angles"] = vectorscale( ( 0, 0, -1 ), 4.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -621.085, -811.156, 247.628 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 200.984, -825.445, 95.0018 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -88.0372, -1140.5, 105 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_hvac_steam_md" ); + ent.v["origin"] = ( -124.628, 215.759, 76 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_hvac_steam_md" ); + ent.v["origin"] = ( -1378.86, -1845.46, 364.596 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_hvac_steam_md" ); + ent.v["origin"] = ( 238.365, 2005.43, 452.125 ); + ent.v["angles"] = ( 2, 179.964, 179 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 14.33; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1167.35, 2885.71, 356.443 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1026.42, 2757.99, 287.41 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 892.973, 3020.42, 374.985 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 331.855, 2952.62, 398.803 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -439.986, 2903.38, 375.882 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 272.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -212.347, 2820.35, 375.646 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 168.041, 2807.25, 384.028 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -99.0851, 2545.89, 219.093 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 786.317, 2626.1, 287.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1086.38, 2456.84, 311.791 ); + ent.v["angles"] = ( 288, 270, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1404.22, 1679.23, 100.893 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1366.4, 1275.45, 98.609 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1069.28, 1100.08, 95.3746 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1443.34, 952.134, 84.514 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1084.44, 621.997, 107.667 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 837.47, -215.239, 89.8274 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 628.449, -326.045, 69.42 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 984.61, 962.721, 106.203 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 671.179, 1676.49, 168.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 292.574, 2176.81, 227.701 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 43.5211, 2115.94, 187.833 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 162.877, -824.592, -39.9999 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -40.4221, -974.386, -40 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 942.157, 3179.8, 354.051 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1216.36, 2985.81, 316.41 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 165.524, 2936.85, 341.609 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1135.3, 1214.31, 52.6228 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 269.25, -641.443, -46 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -69.4102, -1219.08, -40 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -255.296, -1518.57, -9.75282 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 273.049, 1495.92, 115.005 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -688.697, -592.297, -31.4556 ); + ent.v["angles"] = ( 273.163, 341.584, 18.4425 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -281.909, 1533.35, 161.491 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 329.743, 1481.06, 168.389 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -267.701, 1124.94, 180.258 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -660.08, -1691.72, 84.4303 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -352.785, -1541.7, 59.1158 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -389.985, -1061.99, 16.625 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -369.875, 465.705, 212.526 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 54.4449, -871.147, 102 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_dockside_sun1" ); + ent.v["origin"] = ( -30123.6, -97927.8, 52705.6 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_md" ); + ent.v["origin"] = ( 810.467, 2996.84, 404.111 ); + ent.v["angles"] = ( 88, 270, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_md" ); + ent.v["origin"] = ( 1474.57, 1323.38, 169.253 ); + ent.v["angles"] = ( 74.8702, 277.421, -82.3157 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_md" ); + ent.v["origin"] = ( -581.299, 2614.92, 231.156 ); + ent.v["angles"] = ( 16.9291, 335.75, 90.2583 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -1159.65, -1199.87, 98.8739 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1012.18, 3264.64, 379.602 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1137.33, 3388.99, 379.152 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_md" ); + ent.v["origin"] = ( 929.839, -179.398, 100.186 ); + ent.v["angles"] = ( 74.8702, 277.421, -82.3157 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 856.788, 2333.85, 259.687 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -709.457, 2393.01, 222.766 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -537.272, 2158.15, 201.425 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -203.026, 1234.09, 201.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -193.172, 1392.02, 203.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -188.745, 2184.17, 170.27 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -2465.88, -1493.51, 80.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -1933.92, -1983.78, 65 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -1253.42, -1430.2, 78.2332 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_md" ); + ent.v["origin"] = ( -1021.39, -2169.52, 78 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 1208.59, 3181.33, 656.054 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 1357.76, 3469.78, 856.617 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 918.708, 3521.55, 537 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 1157.79, 2436.14, 567.6 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 94.9131, 910.115, 240.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_sm" ); + ent.v["origin"] = ( -110.435, -1027.16, 20 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_cool_ground" ); + ent.v["origin"] = ( -679.49, -381.524, 73.5888 ); + ent.v["angles"] = ( 22.3234, 296.509, 96.2364 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_cool_ground" ); + ent.v["origin"] = ( 986.019, 3510.31, 299.076 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 751.287, 235.978, 66.7407 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 595.931, 458.623, 70.6824 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_cool_ground" ); + ent.v["origin"] = ( 258.914, -420.17, 87 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_md" ); + ent.v["origin"] = ( 1359.69, 2254.33, 274.057 ); + ent.v["angles"] = ( 88, 270, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_cool_slw_md" ); + ent.v["origin"] = ( -501.592, 1924.29, 167.25 ); + ent.v["angles"] = ( 14.5458, 37.6824, -93.0128 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 112.923, -930.589, 14.5377 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -62.7229, -1036.85, 15 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 183.942, -798.378, -5.9982 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_sm" ); + ent.v["origin"] = ( -63.2585, -1040.96, 7 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_red_button_flash" ); + ent.v["origin"] = ( -1066.95, -717.465, 304.065 ); + ent.v["angles"] = ( 90, 344.864, 74.8637 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( 1038.51, 5096.17, 535.6 ); + ent.v["angles"] = ( 358.797, 165.491, -4.97454 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( 2895.63, 2452.31, 1249.44 ); + ent.v["angles"] = ( 355.147, 101.372, -18.0588 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( 2750.27, 433.283, 1075.13 ); + ent.v["angles"] = ( 2.69095, 78.7488, -11.2181 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( -379.52, 4019.43, 832.58 ); + ent.v["angles"] = ( 359.91, 180.661, -35.2304 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_drone" ); + ent.v["origin"] = ( 985.224, 3013.91, 307.517 ); + ent.v["angles"] = ( 314.223, 207.013, 164.712 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_drone" ); + ent.v["origin"] = ( -267.905, 2599.46, 211.263 ); + ent.v["angles"] = ( 327.889, 225.861, 151.596 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_cool_ground" ); + ent.v["origin"] = ( 182.228, -202.018, 98.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_cool_ground" ); + ent.v["origin"] = ( 47.9025, -1660.82, 190 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["origin"] = ( 296.229, -584.168, 116.212 ); + ent.v["angles"] = ( 18, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_02" ); + ent.v["origin"] = ( 795.571, -1035.49, 406.993 ); + ent.v["angles"] = ( 90, 22.5361, 112.536 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -951.827, 1111.64, 312.742 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -455.056, -407.494, 240.668 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -363.63, 59.9479, 211.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -170.645, 694.161, 409.218 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -8.12653, 2556.85, 170.687 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1027.93, 2150.25, 210.548 ); + ent.v["angles"] = ( 270, 8.74616, -76.7461 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1463.13, 1383.41, 105.641 ); + ent.v["angles"] = ( 270, 8.74616, -76.7461 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1531.32, 969.233, 165.095 ); + ent.v["angles"] = ( 270, 8.74616, -76.7461 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1399.83, 737.859, 80.812 ); + ent.v["angles"] = ( 270, 8.74616, -76.7461 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 998.477, 1466, 60.3866 ); + ent.v["angles"] = ( 270, 8.74616, -76.7461 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 917.195, -300.343, 45.699 ); + ent.v["angles"] = ( 270, 8.74616, -76.7461 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -144.907, 1110.06, 113 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 15; + ent = maps\mp\_utility::createoneshoteffect( "fx_blue_light_flash" ); + ent.v["origin"] = ( -410.128, -1378.22, 246.225 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_blue_light_flash" ); + ent.v["origin"] = ( -445.276, -1340.9, 246.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_blue_light_flash" ); + ent.v["origin"] = ( -446.794, -910.811, 246.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_hvac_steam_md" ); + ent.v["origin"] = ( -88.3861, -569.169, 164 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_hvac_steam_md" ); + ent.v["origin"] = ( -241.005, -572.039, 162 ); + ent.v["angles"] = ( 270, 317.82, 42.1801 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( 2626.25, -915.518, 1098.13 ); + ent.v["angles"] = ( 353.326, 77.7307, -10.7992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( -2009.5, 3711.1, 1273.66 ); + ent.v["angles"] = ( 345.806, 236.473, -33.1638 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_hvac_steam_md" ); + ent.v["origin"] = ( 455.961, 1432.85, 180.481 ); + ent.v["angles"] = ( 360, 180, 179 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_drone_interior_steam" ); + ent.v["origin"] = ( 743.509, -1106.1, 406.125 ); + ent.v["angles"] = ( 44, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_drone_interior_steam" ); + ent.v["origin"] = ( 983.192, -1113.26, 409.282 ); + ent.v["angles"] = ( 25, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 312.372, -1045.85, 255.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -117.875, 926.303, 445.15 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 135.226, 934.289, 382.872 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 127.912, 1358.65, 433.532 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 196.399, 1405.13, 289.44 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 543, 1489.62, 242.926 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 715.455, 1488.13, 245.379 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 180.354, 821.355, 256.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -120.999, 908.161, 239.458 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 295.524, -543.985, 381.949 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1250.25, 2990.51, 717.439 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 541.356, 2930.26, 658.93 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 388.62, 2946.18, 642.458 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -1141.79, -805.362, 407.125 ); + ent.v["angles"] = ( 271, 270.034, 1.96582 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -1872.27, -1062.45, 288.726 ); + ent.v["angles"] = ( 271, 270.034, 1.96582 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -2351.54, -1041.53, 386.588 ); + ent.v["angles"] = ( 271, 270.034, 1.96582 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 173.628, -1099.77, 352.573 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -1453.68, -1649.88, 288.301 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -186.552, -1384.11, 200.671 ); + ent.v["angles"] = ( 271, 270.034, 1.96582 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -872.114, 1368.8, 312.82 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -873.069, 1111.28, 312.606 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_sm" ); + ent.v["origin"] = ( -962.185, 1381.91, 210.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_sm" ); + ent.v["origin"] = ( -869.748, 1384.6, 214.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_sm" ); + ent.v["origin"] = ( -881.925, 1199.53, 211.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_drone_interior_steam" ); + ent.v["origin"] = ( -909.713, 1295.16, 322.125 ); + ent.v["angles"] = ( 81.2173, 10.8219, -163.631 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1089.45, 856.28, 242.851 ); + ent.v["angles"] = ( 90, 335.053, 63.0534 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1077.15, 855.461, 242.899 ); + ent.v["angles"] = ( 90, 335.053, 63.0534 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1091.1, 932.185, 243.851 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1075.83, 933.024, 243.899 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1216.03, 934.751, 243.851 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1201.85, 934.303, 243.899 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1215.18, 853.927, 242.851 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1201.5, 852.116, 242.899 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1472.5, 853.894, 242.851 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1459.25, 853.221, 242.899 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1472.84, 933.865, 243.851 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1460.58, 933.391, 243.899 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_drone_interior_steam" ); + ent.v["origin"] = ( -1255.09, 891.965, 254.875 ); + ent.v["angles"] = ( 84.7532, 287.105, -160.732 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( -106.876, -963.107, 291.72 ); + ent.v["angles"] = ( 270, 2.663, -59.663 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( -99.8857, -953.949, 292.839 ); + ent.v["angles"] = ( 0.982226, 314, 0.190924 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_red_light_flash" ); + ent.v["origin"] = ( -68.1748, -998.306, 315.877 ); + ent.v["angles"] = ( 292, 311, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_red_light_flash" ); + ent.v["origin"] = ( -102.632, -958.564, 267.823 ); + ent.v["angles"] = ( 70.9676, 127.919, -2.06949 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( -211.357, -915.039, 271.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( -171.842, -915.727, 271.106 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( -1341.07, 1494.98, 223.68 ); + ent.v["angles"] = ( 0, 90, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_sm" ); + ent.v["origin"] = ( -1450.12, 934.889, 197.89 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_sm" ); + ent.v["origin"] = ( -1445.62, 854.937, 199.464 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -588.447, 363.689, 334.125 ); + ent.v["angles"] = ( 358, 270, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -577.538, 98.5362, 337.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_pipe_md" ); + ent.v["origin"] = ( 514.313, 1737.05, 183.941 ); + ent.v["angles"] = ( 356.237, 354.329, 13.1112 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( 840.379, 931.497, 199.505 ); + ent.v["angles"] = ( 90, 5.37647, -84.6235 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( 840.094, 986.568, 163.298 ); + ent.v["angles"] = ( 90, 5.37647, -84.6235 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( 840.274, 872.125, 163.532 ); + ent.v["angles"] = ( 90, 5.37647, -84.6235 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( 840.347, 909.422, 138.801 ); + ent.v["angles"] = ( 90, 5.37647, -84.6235 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( 840.692, 1018.43, 155.828 ); + ent.v["angles"] = ( 90, 5.37647, -84.6235 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( 504.147, 854.314, 203.839 ); + ent.v["angles"] = ( 360, 270, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( 503.59, 915.612, 165.927 ); + ent.v["angles"] = ( 90, 303.785, 33.7846 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( 503.256, 993.559, 139.897 ); + ent.v["angles"] = ( 90, 303.785, 33.7846 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( 503.976, 825.379, 163.447 ); + ent.v["angles"] = ( 90, 303.785, 33.7846 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( 503.579, 1027.38, 165.556 ); + ent.v["angles"] = ( 90, 303.785, 33.7846 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["origin"] = ( -144.882, -976.606, 55.1214 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["origin"] = ( -72.7487, -790.111, 55.6851 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["origin"] = ( 93.5639, -1032.85, 55.4228 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["origin"] = ( 81.6291, -716.454, 54.9085 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( 8445.78, 958.823, 2149.85 ); + ent.v["angles"] = ( 352.952, 114.495, -4.16587 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( 1254.54, -14270.6, 2243.52 ); + ent.v["angles"] = ( 2.85125, 355.893, -2.20701 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( -881.677, -5322.52, 988.223 ); + ent.v["angles"] = ( 354.9, 350.148, 6.12797 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( -442.949, -4356.99, 181.056 ); + ent.v["angles"] = ( 359.137, 357.637, 5.97365 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( -3719.41, -6052.14, 2.67401 ); + ent.v["angles"] = ( 1.07069, 320.916, -3.44259 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( -13253.2, -3694.15, 686.953 ); + ent.v["angles"] = ( 357.698, 264.004, -2.77475 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( 6668.92, -2797.05, 1506.1 ); + ent.v["angles"] = ( 351.784, 73.6003, -14.7163 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( 5876.86, 4782.68, 2355.99 ); + ent.v["angles"] = ( 359.409, 143.109, -24.2684 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( -2045.8, 9335.17, 2539.13 ); + ent.v["angles"] = ( 358.641, 176.831, -20.9591 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( -5789.17, -5598.86, -163.943 ); + ent.v["angles"] = ( 359.208, 290.973, -3.51671 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( 4655.55, -7769.33, 430.5 ); + ent.v["angles"] = ( 0.337525, 53.9827, -9.32073 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 129.424, 258.73, 237.501 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 315.32, -230.312, 243.753 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 204.931, -400.728, 365.862 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( 1978.2, -7432.89, 80.51 ); + ent.v["angles"] = ( 0.337525, 53.9827, -9.32073 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( -5377.6, 8554.05, 2315 ); + ent.v["angles"] = ( 1.00764, 230.546, -14.7827 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( -3235.45, -9347.85, 639.106 ); + ent.v["angles"] = ( 2.85125, 355.893, -2.20701 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -661.517, -2184.93, 187.236 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -456.644, -1950.35, 235.93 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -726.787, 372.143, 433.015 ); + ent.v["angles"] = ( 90, 359.66, -0.340199 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -597.895, 429.579, 433.998 ); + ent.v["angles"] = ( 88, 359.998, 179.998 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -854.533, 372.085, 433.992 ); + ent.v["angles"] = ( 90, 359.66, -0.340199 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -983.071, 368.003, 433.001 ); + ent.v["angles"] = ( 90, 359.66, -0.340199 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -984.857, -49.7102, 431.508 ); + ent.v["angles"] = ( 90, 359.66, -0.340199 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -856.609, -50.5221, 432.502 ); + ent.v["angles"] = ( 90, 359.66, -0.340199 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -728.253, -48.6357, 432.504 ); + ent.v["angles"] = ( 90, 359.66, -0.340199 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -599.712, -48.5372, 432.5 ); + ent.v["angles"] = ( 90, 359.66, -0.340199 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -830.456, 194.635, 184.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -1132.19, 194.944, 96.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -1180.67, 894.292, 106.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -911.741, 1768.21, 138.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -1271.18, 1419.71, 158.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_hvac_steam_md" ); + ent.v["origin"] = ( 219.151, 616.294, 374.517 ); + ent.v["angles"] = ( 2, 179.964, 179 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 14.33; + ent = maps\mp\_utility::createoneshoteffect( "fx_blue_light_flash" ); + ent.v["origin"] = ( -915.636, -386.854, 419.125 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_blue_light_flash" ); + ent.v["origin"] = ( -915.21, -463.176, 417.926 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_blue_light_flash" ); + ent.v["origin"] = ( -788.358, -463.829, 418.928 ); + ent.v["angles"] = ( 359, 0, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_blue_light_flash" ); + ent.v["origin"] = ( -786.844, -385.015, 418.922 ); + ent.v["angles"] = ( 359, 0, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_drone_interior_steam" ); + ent.v["origin"] = ( -791.683, -424.114, 436.875 ); + ent.v["angles"] = ( 331.01, 355.552, 175.795 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_blue_light_flash" ); + ent.v["origin"] = ( -2962.86, -168.376, 239.125 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_blue_light_flash" ); + ent.v["origin"] = ( -2894.13, 611.254, 236.125 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_yellow" ); + ent.v["origin"] = ( -547.259, 803.78, 417.681 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_yellow" ); + ent.v["origin"] = ( -668.379, 808.104, 417.668 ); + ent.v["angles"] = ( 90, 351.756, 171.756 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_yellow" ); + ent.v["origin"] = ( -786.674, 804.643, 417.754 ); + ent.v["angles"] = ( 90, 351.756, 171.756 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_yellow" ); + ent.v["origin"] = ( -908.996, 803.995, 417.771 ); + ent.v["angles"] = ( 90, 351.756, 171.756 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( 1987.28, 7081.2, 1214.18 ); + ent.v["angles"] = ( 355.425, 167.348, -18.467 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -43.3369, -784.125, 1.99582 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -884.958, 1674.59, 259.69 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -454.995, -953.707, 197.141 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -450.125, -1215.63, 203.761 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -117.876, 661.942, 444.521 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 165.658, 1396.33, 420.678 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -40.1639, 935.789, 241.837 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -451.895, -527.453, 243.232 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); + ent.v["origin"] = ( 454.881, 2830.52, 771.77 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); + ent.v["origin"] = ( 1400.95, 2056.99, 598.402 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); + ent.v["origin"] = ( 841.906, 1.72622, 676.081 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); + ent.v["origin"] = ( 689.201, 3590.49, 1074.97 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 135.99, 3.5803, 245.314 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -1254.88, -1838.53, 287.22 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -1254.88, -2109.35, 286.939 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -677.85, -838.797, 196.603 ); + ent.v["angles"] = ( 271, 270.034, 1.96582 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 574.721, -537.327, 351.63 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 889.648, -473.876, 369.575 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 550.125, 182.958, 245.884 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 503.078, -104.937, 250.466 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 506.105, -374.441, 251.652 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 664.315, 717.955, 370.84 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -46.5185, -998.717, 96.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -60.7794, -1226.01, 103.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -904.953, 1599.53, 205.125 ); + ent.v["angles"] = ( 359.582, 275.986, 3.97881 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -906.186, 906.694, 158.125 ); + ent.v["angles"] = ( 0.864256, 183.097, -1.57232 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1301.26, -549.577, 154.125 ); + ent.v["angles"] = ( 4, 181.003, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1866, -902.506, 181.125 ); + ent.v["angles"] = ( 4.03909, 90.7342, -3.59119 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -559.245, 964.368, 331.125 ); + ent.v["angles"] = ( 359.582, 275.986, 3.97881 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -930.002, 933.654, 327.125 ); + ent.v["angles"] = ( 359.582, 275.986, 3.97881 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -623.971, -438.744, 330.125 ); + ent.v["angles"] = ( 0.990275, 183.995, 0.278846 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1021.67, -1041.28, 306.125 ); + ent.v["angles"] = ( 0.995139, 177.004, -0.209229 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 236.535, -1049.11, 294.125 ); + ent.v["angles"] = ( 2.02093, 5.97057, -0.418091 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 755.44, -795.417, 311.125 ); + ent.v["angles"] = ( 3.99512, 176.993, -0.209707 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 561.06, 1463.5, 173.125 ); + ent.v["angles"] = ( 2.30191, 295.197, 2.55832 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -621.524, 1863.79, 189.25 ); + ent.v["angles"] = ( 0.682676, 202.968, -0.43804 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1470.28, 877.346, 136.125 ); + ent.v["angles"] = ( 1.6415, 268.119, 0.72425 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1459.77, -488.147, 131.125 ); + ent.v["angles"] = ( 358.358, 88.1195, -0.724284 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_ring_console_runner" ); + ent.v["origin"] = ( 730.148, -801.732, 275.307 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_ring_console_runner" ); + ent.v["origin"] = ( 723.6, -751.447, 275.971 ); + ent.v["angles"] = ( 270, 1.02303, 168.977 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -6; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_drone" ); + ent.v["origin"] = ( 593.267, 2985.65, 282.35 ); + ent.v["angles"] = ( 314.223, 207.013, 164.712 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -2461.5, -2325.44, 1363.93 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -2413.14, -2325.3, 1075.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -2993.38, -2327.89, 1075.99 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -2940.83, -2321.29, 1366.18 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -687.439, -1392.45, 92.4524 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -873.388, -1569.18, 107.33 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -1024.86, -1229.66, 83.407 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( -6284.61, 10620.2, 4105.17 ); + ent.v["angles"] = ( 1.00764, 230.546, -14.7827 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( 3107.53, 12415.2, 3433.09 ); + ent.v["angles"] = ( 359.361, 176.513, -17.9065 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -2713.62, -481.406, 2158.91 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_blue_light_flash" ); + ent.v["origin"] = ( 184.522, -943.573, 465.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -2681.76, -513.98, 1659.86 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -2686.94, -5971.79, 1159.37 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -3254.8, -5969.08, 1155 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -3204.28, -5968.16, 1441.38 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -2734.42, -5971.58, 1441.93 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_red_button_flash" ); + ent.v["origin"] = ( -1022.9, 720.225, 300.173 ); + ent.v["angles"] = ( 359, 180, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_ring_console_runner" ); + ent.v["origin"] = ( -1019.7, 700.575, 301.161 ); + ent.v["angles"] = ( 270, 359.851, 0.149435 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -7; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 125.875, 237.939, 239.24 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_wall_water_ground" ); + ent.v["origin"] = ( -163.926, 958.558, 114.726 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_wall_water_ground" ); + ent.v["origin"] = ( -163.704, 639.642, 113.797 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_wall_water_ground" ); + ent.v["origin"] = ( -766.908, -786.082, -23.6831 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_wall_water_ground" ); + ent.v["origin"] = ( 202.334, -494.846, -29.897 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_hvac_steam_md" ); + ent.v["origin"] = ( -2016.27, -1050.73, 67 ); + ent.v["angles"] = ( 326, 267, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -978.614, -625.191, 410.046 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -949.153, -625.427, 410.878 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1007.35, -624.938, 410.85 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -853.005, -625.187, 410.836 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -823.602, -625.134, 410.999 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -881.906, -624.554, 410.861 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( -721.986, -322.659, 448.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( -600.388, -321.699, 448.389 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( -597.396, -516.086, 448.429 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( -723.185, -516.122, 448.441 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( -983.077, -321.208, 448.474 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( -981.561, -515.324, 448.466 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_wall_water_ground" ); + ent.v["origin"] = ( 954.967, 759.387, 59.0158 ); + ent.v["angles"] = ( 275, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1154.67, -239.638, 267.525 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 963.38, 116.635, 173.138 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 496.346, 2737.08, 298.94 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 456.052, 2205.88, 185.731 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1121.3, 2751.93, 294.687 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -1488.9, -1596.99, 112 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 861.716, 932.432, 328.489 ); + ent.v["angles"] = ( 4, 178.997, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 611.028, 795.51, 158.806 ); + ent.v["angles"] = ( 358.633, 70.045, -3.75949 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -59.5565, -1193.75, 25.8188 ); + ent.v["angles"] = ( 0, 90.9979, -4 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -3755.95, -9603.46, 1571.11 ); + ent.v["angles"] = ( 270, 0.421275, 1.57871 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -3286.26, -9590.47, 1571.66 ); + ent.v["angles"] = ( 270, 0.421275, 1.57871 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -3238.8, -9589.03, 1289.1 ); + ent.v["angles"] = ( 270, 0.421275, 1.57871 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -3806.41, -9606.13, 1284.73 ); + ent.v["angles"] = ( 270, 0.421275, 1.57871 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -389.543, -968.941, 45.43 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -409.87, -1192.24, 77.6814 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -2915.85, 582.787, 256.524 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["origin"] = ( -2960.76, -135.903, 259.909 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_drone2" ); + ent.v["origin"] = ( -1477.26, 440.517, 89.4437 ); + ent.v["angles"] = ( 308, 270, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -872.236, 1241.7, 312.473 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -951.889, 1242.73, 313.431 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -953.056, 1368.28, 312.412 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -951.243, 1496.61, 312.439 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -951.362, 1624.56, 313.447 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -872.966, 1496.88, 312.52 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -872.338, 1624.35, 312.54 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( -1340.84, 1479.48, 163.788 ); + ent.v["angles"] = ( 270, 309.768, -39.768 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_pc_panel_heli" ); + ent.v["origin"] = ( -1007.96, 1308.56, 169.669 ); + ent.v["angles"] = ( 0, 90, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_ring_console_runner" ); + ent.v["origin"] = ( -1020.76, 667.062, 301.169 ); + ent.v["angles"] = ( 270, 0.255783, -177.256 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_red_button_flash" ); + ent.v["origin"] = ( -1016.96, 669.05, 300.371 ); + ent.v["angles"] = ( 0, 179, -89.8826 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam" ); + ent.v["origin"] = ( -1822.66, -1035.77, 353.86 ); + ent.v["angles"] = ( 353.017, 265.97, 0.490713 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam" ); + ent.v["origin"] = ( -1929.89, -1022.11, 359.408 ); + ent.v["angles"] = ( 353.017, 265.97, 0.490713 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -952.002, 1481.48, 312.577 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -872.617, 1480.68, 313.451 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -875.283, 1609.12, 311.013 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -952.024, 1610.95, 313.525 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -872.928, 1352.16, 313.001 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -872.054, 1223.13, 313.13 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -952.927, 1352.59, 312.212 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -874.153, 1098.93, 312.002 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -952.295, 1098.67, 313.014 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1074.48, 1471.09, 282.029 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1059.8, 1471.35, 282.107 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1059.17, 1392.64, 282.038 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1076.86, 1392.31, 282.96 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1187.14, 1394.76, 281.465 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1204.82, 1394.43, 282.387 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1314.01, 1392.53, 281.541 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1330.39, 1393.16, 281.463 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1313.21, 1473.16, 282.542 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1330.89, 1472.83, 283.464 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1185.12, 1471.61, 282.54 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1202.8, 1471.29, 282.462 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -952.029, 1225.24, 313.999 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1331.01, 853.498, 242.032 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1345.19, 853.946, 242.984 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1329.88, 934.157, 242.527 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1344.06, 934.606, 242.479 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -948.181, 933.051, 242.523 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -962.284, 933.495, 243.475 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -819.362, 933.69, 242.527 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -833.543, 934.138, 242.479 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -819.8, 854.203, 242.03 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -833.981, 854.651, 242.982 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -948.683, 854.554, 242.025 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -962.117, 854.527, 241.977 ); + ent.v["angles"] = ( 90, 2, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["origin"] = ( -6810.74, -2265.67, -1022.36 ); + ent.v["angles"] = ( 357.698, 264.004, -2.77475 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( -2991.83, -3206.12, 153.808 ); + ent.v["angles"] = ( 356.909, 333.223, 7.3457 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 263.835, 927.725, 403.213 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 263.658, 1010.4, 402.739 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_drone_interior_steam" ); + ent.v["origin"] = ( 623.76, -1103.02, 404.754 ); + ent.v["angles"] = ( 45, 90, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_drone_interior_steam" ); + ent.v["origin"] = ( -912.102, 1170.65, 310.491 ); + ent.v["angles"] = ( 60.002, 179.893, 179.998 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_drone_interior_steam" ); + ent.v["origin"] = ( -1131.35, 1435.54, 288.503 ); + ent.v["angles"] = ( 79.644, 99.761, -172.7 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 733.578, 946.591, 240.928 ); + ent.v["angles"] = ( 90, 0, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 734.355, 889.922, 241.904 ); + ent.v["angles"] = ( 90, 0, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 605.725, 888.408, 242.922 ); + ent.v["angles"] = ( 90, 0, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 606.575, 949.938, 241.919 ); + ent.v["angles"] = ( 90, 0, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 638.731, -535.378, 22.6499 ); + ent.v["angles"] = ( 270, 8.74616, -76.7461 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_hvac_steam_md" ); + ent.v["origin"] = ( 209.196, -127.299, 191.188 ); + ent.v["angles"] = ( 359, 270, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_skinny" ); + ent.v["origin"] = ( 678.362, 1171.87, 216.125 ); + ent.v["angles"] = ( 90, 22.5361, 112.536 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_skinny" ); + ent.v["origin"] = ( 415.825, 832.303, 366.397 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_drone_rapid" ); + ent.v["origin"] = ( -649.15, 836.622, 304.125 ); + ent.v["angles"] = ( 270, 0, -179.075 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_drone_rapid" ); + ent.v["origin"] = ( -649.2, 836.448, 331.749 ); + ent.v["angles"] = ( 270, 0, -179.075 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_drone_rapid" ); + ent.v["origin"] = ( -649.2, 809.854, 331.58 ); + ent.v["angles"] = ( 270, 0, -179.075 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_drone_rapid" ); + ent.v["origin"] = ( -649.199, 849.558, 341.199 ); + ent.v["angles"] = ( 270, 0, -179.075 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_drone_rapid" ); + ent.v["origin"] = ( -649.198, 823.159, 341.093 ); + ent.v["angles"] = ( 270, 0, -179.075 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_drone_rapid" ); + ent.v["origin"] = ( -649.194, 810.015, 304.436 ); + ent.v["angles"] = ( 270, 0, -179.075 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( -1287.83, 905.122, 393.987 ); + ent.v["angles"] = ( 90, 0, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( -1136.99, 901.405, 393.648 ); + ent.v["angles"] = ( 90, 0, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_ring_console_runner" ); + ent.v["origin"] = ( -563.921, -396.323, 302.507 ); + ent.v["angles"] = ( 270, 1.02303, 168.977 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_ring_console_runner" ); + ent.v["origin"] = ( -566.368, -443.58, 301.843 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( -990.768, 5498.91, 1464.19 ); + ent.v["angles"] = ( 358.797, 165.491, -4.97454 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -1859.18, -730.723, 232.806 ); + ent.v["angles"] = ( 90, 359.66, -0.340199 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -1353.12, -542.779, 232.406 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); + ent.v["origin"] = ( -1604.83, -541.29, 232.631 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["origin"] = ( -1859.57, -857.978, 232.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["origin"] = ( -1861.98, -924.381, 230.928 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista_lg" ); + ent.v["origin"] = ( 9644.56, 7823.23, 6680.54 ); + ent.v["angles"] = ( 359.234, 123.905, -28.9793 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista_lg" ); + ent.v["origin"] = ( -13542.6, 16523.3, 9830.55 ); + ent.v["angles"] = ( 1.71905, 218.249, -20.9778 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista_lg" ); + ent.v["origin"] = ( 276.66, 16767.7, 5623.09 ); + ent.v["angles"] = ( 356.208, 178.737, -11.4733 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 297.245, -565.136, 97.0805 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 299.902, -701.637, 23.9968 ); + ent.v["angles"] = ( 0.209195, 92.9928, -3.99514 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1013.72, 4127.44, 293.127 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 708.264, 3949.28, 393.346 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista_lg" ); + ent.v["origin"] = ( 9232, -2215.96, 2746.91 ); + ent.v["angles"] = ( 337.685, 77.4872, -18.9982 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -1354.08, -2307.16, 110 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( -6931.43, -2303.66, 214.174 ); + ent.v["angles"] = ( 0.706331, 305.471, 7.93499 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1148.24, 4659.96, 319.632 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_drone_interior_steam" ); + ent.v["origin"] = ( 743.524, -956.336, 409.645 ); + ent.v["angles"] = ( 37.9905, 261.041, -5.39119 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 766.946, -1247.2, 304.182 ); + ent.v["angles"] = ( 7.05027, 168.986, -0.201279 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 962.284, -868.168, 261.124 ); + ent.v["angles"] = ( 24.7563, 93.1528, 1.67565 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 1743.82, 617.397, 251.999 ); + ent.v["angles"] = ( 270, 8.74616, -76.7461 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -364.257, 247.23, 219.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 433.7, 660.709, 247.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 613.776, 692.465, 371.516 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -506.822, 1883.44, 265.412 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 21.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -569.787, 1950.94, 266.577 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 22.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -1614.5, -1804.88, 285.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( 993.073, 5394.7, 1032.47 ); + ent.v["angles"] = ( 358.797, 165.491, -4.97454 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud" ); + ent.v["origin"] = ( 2871.98, 1828.48, 870.813 ); + ent.v["angles"] = ( 6.02783, 104.149, -4.99374 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 270.381, 1168.16, 355.939 ); + ent.v["angles"] = ( 65.8451, 277.213, 96.0144 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 371.39, 1294.56, 296.049 ); + ent.v["angles"] = ( 58, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 934.538, 4930.19, 312.547 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( -1284.92, 1115.69, 364.842 ); + ent.v["angles"] = ( 76, 270, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_red_light_flash" ); + ent.v["origin"] = ( -31.8417, -1041.87, 263.384 ); + ent.v["angles"] = ( 292, 311, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_red_light_flash" ); + ent.v["origin"] = ( -34.8275, -1040.35, 254.663 ); + ent.v["angles"] = ( 292, 311, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( -154.832, -1934.51, 205.635 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 788.487, 6140.1, 366.7 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 884.408, 5981.83, 300.174 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["origin"] = ( -1454.73, -406.791, 230.183 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["origin"] = ( -1452.6, 799.826, 229.652 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 263.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["origin"] = ( -923.087, 1667.74, 279.368 ); + ent.v["angles"] = ( 292, 311, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["origin"] = ( -1324.26, -2110.99, 277.613 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["origin"] = ( -1679.73, -1985.27, 230.319 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["origin"] = ( -1288.41, 1280.36, 278.775 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["origin"] = ( 178.528, 911.348, 398.839 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( 553.305, -923.114, 355.431 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( 582.745, -1133.63, 355.113 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( 937.727, -1134.12, 355.187 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( 457.015, -1042.54, 357.848 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( 457.027, -1021.6, 357.565 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( 553.538, -937.267, 355.595 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( 444.023, -1042.3, 357.302 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( 445.596, -1019.4, 357.585 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( 889.882, -496.404, 188.74 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -1056.34, -512.798, 379.994 ); + ent.v["angles"] = ( 1, 180, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -1043.11, -513.929, 378.79 ); + ent.v["angles"] = ( 359, 359.997, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -623.879, -234.962, 378.38 ); + ent.v["angles"] = ( 359.983, 89.0033, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -601.586, 617.154, 379.417 ); + ent.v["angles"] = ( 0, 265, 0.996355 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -600.64, 630.638, 379.253 ); + ent.v["angles"] = ( 359.983, 89.0033, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -416.764, 801.349, 378.66 ); + ent.v["angles"] = ( 1, 179.003, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -403.384, 798.815, 378.893 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -1043.08, 885.957, 381.826 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -1043.07, 909.282, 381.768 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -1057.74, 885.405, 381.289 ); + ent.v["angles"] = ( 359, 176.004, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -1056.11, 908.672, 381.347 ); + ent.v["angles"] = ( 359, 176.004, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -822.494, 810.855, 210.5 ); + ent.v["angles"] = ( 359.983, 89.0033, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -1197.75, -543.729, 211.5 ); + ent.v["angles"] = ( 1, 179.003, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -1984.17, -544.368, 211.844 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1371.39, -1683.92, 291.931 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1435.02, -1682.49, 291.95 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); + ent.v["origin"] = ( -1499.81, -1683.35, 291.906 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -1360.18, 981.172, 211.351 ); + ent.v["angles"] = ( 359.983, 271.003, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["origin"] = ( -1152.56, 981.151, 211.215 ); + ent.v["angles"] = ( 359.983, 271.003, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; +} diff --git a/MP/Maps/Drone/maps/mp/mp_drone.gsc b/MP/Maps/Drone/maps/mp/mp_drone.gsc new file mode 100644 index 0000000..a23b7df --- /dev/null +++ b/MP/Maps/Drone/maps/mp/mp_drone.gsc @@ -0,0 +1,67 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_drone_fx; +#include maps\mp\_compass; +#include maps\mp\_load; +#include maps\mp\mp_drone_amb; +#include maps\mp\mp_drone_doors; + +main() +{ + precachemodel( "fxanim_gp_robot_arm_welder_server_side_mod" ); + level.levelspawndvars = ::levelspawndvars; + welders = []; + welders[welders.size] = ( -1339.51, 76.04, 136.11 ); + welders[welders.size] = ( -1339.51, -171.9, 136.11 ); + welders[welders.size] = ( -1339.51, 559.04, 136.12 ); + welders[welders.size] = ( -1339.51, 312.01, 136.12 ); + maps\mp\mp_drone_fx::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_drone" ); + maps\mp\_load::main(); + maps\mp\mp_drone_amb::main(); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + + if ( getgametypesetting( "allowMapScripting" ) ) + level maps\mp\mp_drone_doors::init(); + + level.remotemotarviewleft = 35; + level.remotemotarviewright = 35; + level.remotemotarviewup = 18; + setheliheightpatchenabled( "war_mode_heli_height_lock", 0 ); + geo_changes(); + + foreach ( welder in welders ) + { + collision = spawn( "script_model", welder ); + collision setmodel( "fxanim_gp_robot_arm_welder_server_side_mod" ); + } +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2600", reset_dvars ); +} + +geo_changes() +{ + rts_floor = getent( "overwatch_floor", "targetname" ); + + if ( isdefined( rts_floor ) ) + rts_floor delete(); + + removes = getentarray( "rts_only", "targetname" ); + + foreach ( removal in removes ) + removal delete(); +} diff --git a/MP/Maps/Drone/maps/mp/mp_drone_amb.gsc b/MP/Maps/Drone/maps/mp/mp_drone_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Drone/maps/mp/mp_drone_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Drone/maps/mp/mp_drone_doors.gsc b/MP/Maps/Drone/maps/mp/mp_drone_doors.gsc new file mode 100644 index 0000000..0ec8208 --- /dev/null +++ b/MP/Maps/Drone/maps/mp/mp_drone_doors.gsc @@ -0,0 +1,213 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\gametypes\_weaponobjects; +#include maps\mp\_tacticalinsertion; + +init() +{ + triggers = getentarray( "trigger_multiple", "classname" ); + + for ( i = 0; i < 4; i++ ) + { + door = getent( "drone_door" + i, "targetname" ); + + if ( !isdefined( door ) ) + continue; + + right = anglestoforward( door.angles ); + right = vectorscale( right, 116 ); + door.opened = 1; + door.origin_opened = door.origin; + door.force_open_time = 0; + + if ( isdefined( door.script_noteworthy ) && door.script_noteworthy == "flip" ) + door.origin_closed = door.origin + right; + else + door.origin_closed = door.origin - right; + + door.mins = door getmins(); + door.maxs = door getmaxs(); + door setcandamage( 1 ); + door allowbottargetting( 0 ); + door.triggers = []; + + foreach ( trigger in triggers ) + { + if ( isdefined( trigger.target ) ) + { + if ( trigger.target == door.targetname ) + { + trigger.mins = trigger getmins(); + trigger.maxs = trigger getmaxs(); + door.triggers[door.triggers.size] = trigger; + } + } + } + + door thread door_damage_think(); + door thread door_think( i ); + } +} + +door_think( index ) +{ + wait( 0.05 * index ); + self door_close(); + + for (;;) + { + wait 0.25; + + if ( self door_should_open() ) + self door_open(); + else + self door_close(); + + self movement_process(); + } +} + +door_should_open() +{ + if ( gettime() < self.force_open_time ) + return true; + + foreach ( trigger in self.triggers ) + { + if ( trigger trigger_is_occupied() ) + return true; + } + + return false; +} + +door_open() +{ + if ( self.opened ) + return; + + dist = distance( self.origin_opened, self.origin ); + frac = dist / 116; + time = clamp( frac * 0.5, 0.1, 0.5 ); + self moveto( self.origin_opened, time ); + self playsound( "mpl_drone_door_open" ); + self.opened = 1; +} + +door_close() +{ + if ( !self.opened ) + return; + + dist = distance( self.origin_closed, self.origin ); + frac = dist / 116; + time = clamp( frac * 0.5, 0.1, 0.5 ); + self moveto( self.origin_closed, time ); + self playsound( "mpl_drone_door_close" ); + self.opened = 0; +} + +movement_process() +{ + moving = 0; + + if ( self.opened ) + { + if ( distancesquared( self.origin, self.origin_opened ) > 0.001 ) + moving = 1; + } + else if ( distancesquared( self.origin, self.origin_closed ) > 0.001 ) + moving = 1; + + if ( moving ) + { + entities = gettouchingvolume( self.origin, self.mins, self.maxs ); + + foreach ( entity in entities ) + { + if ( isdefined( entity.classname ) && entity.classname == "grenade" ) + { + if ( !isdefined( entity.name ) ) + continue; + + if ( !isdefined( entity.owner ) ) + continue; + + watcher = entity.owner getwatcherforweapon( entity.name ); + + if ( !isdefined( watcher ) ) + continue; + + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined ); + } + + if ( self.opened ) + continue; + + if ( isdefined( entity.classname ) && entity.classname == "auto_turret" ) + { + if ( !isdefined( entity.damagedtodeath ) || !entity.damagedtodeath ) + entity domaxdamage( self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); + + continue; + } + + if ( isdefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" ) + entity maps\mp\_tacticalinsertion::destroy_tactical_insertion(); + } + } +} + +trigger_is_occupied() +{ + entities = gettouchingvolume( self.origin, self.mins, self.maxs ); + + foreach ( entity in entities ) + { + if ( isalive( entity ) ) + { + if ( isplayer( entity ) || isai( entity ) || isvehicle( entity ) ) + return true; + } + } + + return false; +} + +getwatcherforweapon( weapname ) +{ + if ( !isdefined( self ) ) + return undefined; + + if ( !isplayer( self ) ) + return undefined; + + for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) + { + if ( self.weaponobjectwatcherarray[i].weapon != weapname ) + continue; + + return self.weaponobjectwatcherarray[i]; + } + + return undefined; +} + +door_damage_think() +{ + self.maxhealth = 99999; + self.health = self.maxhealth; + + for (;;) + { + self waittill( "damage", damage, attacker, dir, point, mod, model, tag, part, weapon, flags ); + + self.maxhealth = 99999; + self.health = self.maxhealth; + + if ( mod == "MOD_PISTOL_BULLET" || mod == "MOD_RIFLE_BULLET" ) + self.force_open_time = gettime() + 1500; + } +} diff --git a/MP/Maps/Drone/maps/mp/mp_drone_fx.gsc b/MP/Maps/Drone/maps/mp/mp_drone_fx.gsc new file mode 100644 index 0000000..a813042 --- /dev/null +++ b/MP/Maps/Drone/maps/mp/mp_drone_fx.gsc @@ -0,0 +1,102 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_drone_fx; +#include maps\mp\createart\mp_drone_art; + +precache_util_fx() +{ + +} + +precache_scripted_fx() +{ + level._effect["fx_mp_drone_robot_sparks"] = loadfx( "maps/mp_maps/fx_mp_drone_robot_sparks" ); +} + +precache_createfx_fx() +{ + level._effect["fx_leaves_falling_mangrove_lg_dark"] = loadfx( "env/foliage/fx_leaves_falling_mangrove_lg_dark" ); + level._effect["fx_mp_vent_steam"] = loadfx( "maps/mp_maps/fx_mp_vent_steam" ); + level._effect["fx_hvac_steam_md"] = loadfx( "smoke/fx_hvac_steam_md" ); + level._effect["fx_mp_water_drip_light_shrt"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_shrt" ); + level._effect["fx_fog_street_cool_slw_md"] = loadfx( "fog/fx_fog_street_cool_slw_md" ); + level._effect["fx_light_emrgncy_floodlight"] = loadfx( "light/fx_light_emrgncy_floodlight" ); + level._effect["fx_insects_swarm_dark_lg"] = loadfx( "bio/insects/fx_insects_swarm_dark_lg" ); + level._effect["fx_mp_fog_low"] = loadfx( "maps/mp_maps/fx_mp_fog_low" ); + level._effect["fx_insects_swarm_md_light"] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); + level._effect["fx_lf_dockside_sun1"] = loadfx( "lens_flares/fx_lf_mp_drone_sun1" ); + level._effect["fx_light_floodlight_rnd_cool_glw_dim"] = loadfx( "light/fx_light_floodlight_rnd_cool_glw_dim" ); + level._effect["fx_mp_steam_pipe_md"] = loadfx( "maps/mp_maps/fx_mp_steam_pipe_md" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_light_dust_motes_sm"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_sm" ); + level._effect["fx_mp_fog_cool_ground"] = loadfx( "maps/mp_maps/fx_mp_fog_cool_ground" ); + level._effect["fx_red_button_flash"] = loadfx( "light/fx_red_button_flash" ); + level._effect["fx_mp_distant_cloud"] = loadfx( "maps/mp_maps/fx_mp_distant_cloud_lowmem" ); + level._effect["fx_light_god_ray_mp_drone"] = loadfx( "env/light/fx_light_god_ray_mp_drone" ); + level._effect["fx_mp_fumes_vent_xsm_int"] = loadfx( "maps/mp_maps/fx_mp_fumes_vent_xsm_int" ); + level._effect["fx_ceiling_circle_light_glare"] = loadfx( "light/fx_ceiling_circle_light_glare" ); + level._effect["fx_drone_rectangle_light"] = loadfx( "light/fx_drone_rectangle_light" ); + level._effect["fx_drone_rectangle_light_02"] = loadfx( "light/fx_drone_rectangle_light_02" ); + level._effect["fx_mp_water_drip_light_long"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); + level._effect["fx_pc_panel_lights_runner"] = loadfx( "props/fx_pc_panel_lights_runner" ); + level._effect["fx_drone_red_ring_console"] = loadfx( "light/fx_drone_red_ring_console" ); + level._effect["fx_blue_light_flash"] = loadfx( "light/fx_blue_light_flash" ); + level._effect["fx_window_god_ray"] = loadfx( "light/fx_window_god_ray" ); + level._effect["fx_mp_drone_interior_steam"] = loadfx( "maps/mp_maps/fx_mp_drone_interior_steam" ); + level._effect["fx_pc_panel_heli"] = loadfx( "props/fx_pc_panel_heli" ); + level._effect["fx_red_light_flash"] = loadfx( "light/fx_red_light_flash" ); + level._effect["fx_drone_rectangle_light_blue"] = loadfx( "light/fx_drone_rectangle_light_blue" ); + level._effect["fx_mp_distant_cloud_vista"] = loadfx( "maps/mp_maps/fx_mp_distant_cloud_vista_lowmem" ); + level._effect["fx_drone_rectangle_light_blue_4"] = loadfx( "light/fx_drone_rectangle_light_blue_4" ); + level._effect["fx_drone_rectangle_light_yellow"] = loadfx( "light/fx_drone_rectangle_light_yellow" ); + level._effect["fx_ceiling_circle_light_led"] = loadfx( "light/fx_ceiling_circle_light_led" ); + level._effect["fx_drone_red_ring_console_runner"] = loadfx( "light/fx_drone_red_ring_console_runner" ); + level._effect["fx_light_beacon_red_blink_fst"] = loadfx( "light/fx_light_beacon_red_blink_fst" ); + level._effect["fx_wall_water_ground"] = loadfx( "water/fx_wall_water_ground" ); + level._effect["fx_drone_rectangle_light_03"] = loadfx( "light/fx_drone_rectangle_light_03" ); + level._effect["fx_drone_red_blink"] = loadfx( "light/fx_drone_red_blink" ); + level._effect["fx_light_god_ray_mp_drone2"] = loadfx( "env/light/fx_light_god_ray_mp_drone2" ); + level._effect["fx_drone_rectangle_light_skinny"] = loadfx( "light/fx_drone_rectangle_light_skinny" ); + level._effect["fx_mp_drone_rapid"] = loadfx( "maps/mp_maps/fx_mp_drone_rapid" ); + level._effect["fx_mp_distant_cloud_vista_lg"] = loadfx( "maps/mp_maps/fx_mp_distant_cloud_vista_lg_lowmem" ); + level._effect["fx_light_exit_sign"] = loadfx( "light/fx_light_exit_sign_glow" ); + level._effect["fx_drone_light_yellow"] = loadfx( "light/fx_drone_light_yellow" ); +} + +main() +{ + precache_fxanim_props(); + precache_util_fx(); + precache_createfx_fx(); + precache_scripted_fx(); + maps\mp\createfx\mp_drone_fx::main(); + maps\mp\createart\mp_drone_art::main(); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["vines_aquilaria"] = %fxanim_gp_vines_aquilaria_anim; + level.scr_anim["fxanim_props"]["vines_strangler_fig"] = %fxanim_gp_vines_strangler_fig_anim; + level.scr_anim["fxanim_props"]["drone_factory"] = %fxanim_mp_drone_factory_link_anim; + level.scr_anim["fxanim_props"]["drone_welder1"] = %fxanim_mp_drone_factory_welder_01_anim; + level.scr_anim["fxanim_props"]["drone_welder2"] = %fxanim_mp_drone_factory_welder_02_anim; + level.scr_anim["fxanim_props"]["drone_welder3"] = %fxanim_mp_drone_factory_welder_03_anim; + level.scr_anim["fxanim_props"]["drone_welder4"] = %fxanim_mp_drone_factory_welder_04_anim; + level.scr_anim["fxanim_props"]["drone_suction1"] = %fxanim_mp_drone_factory_suction_01_anim; + level.scr_anim["fxanim_props"]["drone_suction2"] = %fxanim_mp_drone_factory_suction_02_anim; + level.scr_anim["fxanim_props"]["drone_suction3"] = %fxanim_mp_drone_factory_suction_03_anim; + level.scr_anim["fxanim_props"]["drone_suction4"] = %fxanim_mp_drone_factory_suction_04_anim; + level.scr_anim["fxanim_props"]["drone_factory_off"] = %fxanim_mp_drone_factory_link_off_anim; + level.scr_anim["fxanim_props"]["drone_welder1_off"] = %fxanim_mp_drone_factory_welder_01_off_anim; + level.scr_anim["fxanim_props"]["drone_welder2_off"] = %fxanim_mp_drone_factory_welder_02_off_anim; + level.scr_anim["fxanim_props"]["drone_welder3_off"] = %fxanim_mp_drone_factory_welder_03_off_anim; + level.scr_anim["fxanim_props"]["drone_welder4_off"] = %fxanim_mp_drone_factory_welder_04_off_anim; + level.scr_anim["fxanim_props"]["drone_suction1_off"] = %fxanim_mp_drone_factory_suction_01_off_anim; + level.scr_anim["fxanim_props"]["drone_suction2_off"] = %fxanim_mp_drone_factory_suction_02_off_anim; + level.scr_anim["fxanim_props"]["drone_suction3_off"] = %fxanim_mp_drone_factory_suction_03_off_anim; + level.scr_anim["fxanim_props"]["drone_suction4_off"] = %fxanim_mp_drone_factory_suction_04_off_anim; + level.scr_anim["fxanim_props"]["vines_strangler_fig_alt"] = %fxanim_gp_vines_strangler_fig_alt_anim; +} diff --git a/MP/Maps/Encore/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Encore/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Encore/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Encore/aitype/enemy_dog_mp.gsc b/MP/Maps/Encore/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Encore/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Encore/character/character_mp_german_shepherd.gsc b/MP/Maps/Encore/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Encore/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Encore/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Encore/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Encore/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Encore/clientscripts/mp/_fxanim_dlc.csc b/MP/Maps/Encore/clientscripts/mp/_fxanim_dlc.csc new file mode 100644 index 0000000..9d3d3be --- /dev/null +++ b/MP/Maps/Encore/clientscripts/mp/_fxanim_dlc.csc @@ -0,0 +1,239 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; + +fxanim_init_dlc( localclientnum ) +{ + a_fxanims = getentarray( localclientnum, "fxanim_dlc", "targetname" ); + assert( a_fxanims.size <= level.fxanim_max_anims ); + + for ( i = 0; i < a_fxanims.size; i++ ) + { + if ( isdefined( a_fxanims[i].fxanim_parent ) ) + { + parent = getent( localclientnum, a_fxanims[i].fxanim_parent, "targetname" ); + a_fxanims[a_fxanims.size] = parent; + a_fxanims[i] thread _fxanim_model_link( localclientnum ); + continue; + } + + a_fxanims[i] thread fxanim_think( localclientnum ); + } + + if ( isdefined( level.fx_anim_level_dlc_init ) ) + level thread [[ level.fx_anim_level_dlc_init ]]( localclientnum ); +} + +#using_animtree("fxanim_props_dlc"); + +fxanim_think( localclientnum, random_wait, random_speed ) +{ + self waittill_dobj( localclientnum ); + self thread _fxanim_hide(); + self _fxanim_wait(); + self useanimtree( #animtree ); + n_anim_count = self _fxanim_get_anim_count(); + self notify( "fxanim_start" ); + + for ( n_current_anim = 0; n_current_anim < n_anim_count; n_current_anim++ ) + { + str_scene = self _fxanim_get_scene_name( n_current_anim ); + + if ( !self _fxanim_modifier( str_scene ) ) + { + self _fxanim_animate( str_scene ); + self _fxanim_play_fx( localclientnum ); + } + + self _fxanim_change_anim( n_current_anim ); + } +} + +_fxanim_hide() +{ + if ( isdefined( self.fxanim_hide ) && self.fxanim_hide ) + { + self hide(); + + self waittill( "fxanim_start" ); + + self show(); + } +} + +_fxanim_modifier( str_scene ) +{ + switch ( str_scene ) + { + case "delete": + self delete(); + break; + case "hide": + self hide(); + break; + default: + return false; + break; + } + + return true; +} + +_fxanim_wait() +{ + if ( isdefined( self.fxanim_waittill_1 ) ) + { + if ( isdefined( self.fxanim_waittill_1 ) ) + _fxanim_change_anim( -1 ); + } + + if ( isdefined( self.fxanim_wait ) ) + wait( self.fxanim_wait ); + else if ( isdefined( self.fxanim_wait_min ) && isdefined( self.fxanim_wait_max ) ) + { + n_wait_time = randomfloatrange( self.fxanim_wait_min, self.fxanim_wait_max ); + wait( n_wait_time ); + } +} + +_fxanim_change_anim( n_fxanim_id ) +{ + str_waittill = undefined; + + if ( n_fxanim_id == -1 && isdefined( self.fxanim_waittill_1 ) ) + str_waittill = self.fxanim_waittill_1; + else if ( n_fxanim_id == 0 && isdefined( self.fxanim_waittill_2 ) ) + str_waittill = self.fxanim_waittill_2; + else if ( n_fxanim_id == 1 && isdefined( self.fxanim_waittill_3 ) ) + str_waittill = self.fxanim_waittill_3; + + if ( !isdefined( str_waittill ) && n_fxanim_id != -1 ) + self _fxanim_wait_for_anim_to_end( n_fxanim_id ); + else + { + a_changer = strtok( str_waittill, "_" ); + + level waittill( str_waittill ); + } +} + +_fxanim_wait_for_anim_to_end( n_fxanim_id ) +{ + str_scene = _fxanim_get_scene_name( n_fxanim_id ); + + if ( issubstr( str_scene, "_loop" ) ) + self waittillmatch( "looping anim", "end" ); + else + self waittillmatch( "single anim", "end" ); +} + +_fxanim_animate( str_scene ) +{ + if ( !isdefined( level.scr_anim["fxanim_props_dlc"][str_scene] ) ) + { +/# + if ( isdefined( str_scene ) ) + println( "Error: fxanim entity at " + self.origin + " is missing animation: " + str_scene ); + else + println( "Error: fxanim entity at " + self.origin + " is missing animation" ); +#/ + return; + } + + self animscripted( level.scr_anim["fxanim_props_dlc"][str_scene], 1.0, 0.0, 1.0 ); +} + +_fxanim_play_fx( localclientnum ) +{ + if ( isdefined( self.fxanim_fx_1 ) ) + { + assert( isdefined( self.fxanim_fx_1_tag ), "KVP fxanim_fx_1_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_1 ), self, self.fxanim_fx_1_tag ); + } + + if ( isdefined( self.fxanim_fx_2 ) ) + { + assert( isdefined( self.fxanim_fx_2_tag ), "KVP fxanim_fx_2_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_2 ), self, self.fxanim_fx_2_tag ); + } + + if ( isdefined( self.fxanim_fx_3 ) ) + { + assert( isdefined( self.fxanim_fx_3_tag ), "KVP fxanim_fx_3_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_3 ), self, self.fxanim_fx_3_tag ); + } + + if ( isdefined( self.fxanim_fx_4 ) ) + { + assert( isdefined( self.fxanim_fx_4_tag ), "KVP fxanim_fx_4_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_4 ), self, self.fxanim_fx_4_tag ); + } + + if ( isdefined( self.fxanim_fx_5 ) ) + { + assert( isdefined( self.fxanim_fx_5_tag ), "KVP fxanim_fx_5_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_5 ), self, self.fxanim_fx_5_tag ); + } +} + +_fxanim_get_anim_count() +{ + assert( isdefined( self.fxanim_scene_1 ), "fxanim at position " + self.origin + " needs at least one scene defined. Use the KVP fxanim_scene_1" ); + n_fx_count = 0; + + if ( !isdefined( self.fxanim_scene_2 ) ) + n_fx_count = 1; + else if ( !isdefined( self.fxanim_scene_3 ) ) + n_fx_count = 2; + else + n_fx_count = 3; + + return n_fx_count; +} + +_fxanim_get_scene_name( n_anim_id ) +{ + str_scene_name = undefined; + + switch ( n_anim_id ) + { + case 0: + str_scene_name = self.fxanim_scene_1; + break; + case 1: + str_scene_name = self.fxanim_scene_2; + break; + case 2: + str_scene_name = self.fxanim_scene_3; + break; + } + + return str_scene_name; +} + +_fxanim_model_link( localclientnum ) +{ + self waittill_dobj( localclientnum ); + assert( isdefined( self.fxanim_tag ), "Model at origin " + self.origin + " needs an fxanim_tag defined, to show which tag the model will link to" ); + m_parent = getent( localclientnum, self.fxanim_parent, "targetname" ); + assert( isdefined( m_parent ), "Model at origin " + self.origin + " does not have a proper parent. Make sure the fxanim_parent matches the targetname of the fxanim" ); + m_parent waittill_dobj( localclientnum ); + self.origin = m_parent gettagorigin( self.fxanim_tag ); + self.angles = m_parent gettagangles( self.fxanim_tag ); + self linkto( m_parent, self.fxanim_tag ); + + if ( isdefined( self.fxanim_hide ) ) + { + self hide(); + + m_parent waittill( "fxanim_start" ); + + self show(); + } +} + +getfx( fx ) +{ + assert( isdefined( level._effect[fx] ), "Fx " + fx + " is not defined in level._effect." ); + return level._effect[fx]; +} diff --git a/MP/Maps/Encore/clientscripts/mp/createfx/mp_concert_fx.csc b/MP/Maps/Encore/clientscripts/mp/createfx/mp_concert_fx.csc new file mode 100644 index 0000000..42d10d4 --- /dev/null +++ b/MP/Maps/Encore/clientscripts/mp/createfx/mp_concert_fx.csc @@ -0,0 +1,1242 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createloopeffect( "fx_pigeon_panic_flight_med" ); + ent.v["origin"] = ( -1349.51, 3293.57, 401.947 ); + ent.v["angles"] = ( 345, 36, 0 ); + ent.v["type"] = "loopfx"; + ent.v["delay"] = 15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md_xslw" ); + ent.v["origin"] = ( -898.217, 114.965, -63.4905 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 134.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md_xslw" ); + ent.v["origin"] = ( -1935.19, 144.112, -68.8491 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md_xslw" ); + ent.v["origin"] = ( -943.246, 661.499, -64 ); + ent.v["angles"] = ( 359.067, 96, -0.35803 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_red" ); + ent.v["origin"] = ( 226.178, 959.617, 448.072 ); + ent.v["angles"] = ( 53.6561, 215.248, -150.351 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_red" ); + ent.v["origin"] = ( -102.867, 1037.12, 438.545 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 81.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_red" ); + ent.v["origin"] = ( -244.747, 962.45, 453.965 ); + ent.v["angles"] = ( 56.1299, 332.501, -29.2417 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_purple" ); + ent.v["origin"] = ( 28.5034, 1068.91, 438.319 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 75.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_purple" ); + ent.v["origin"] = ( -122.511, 1051.59, 438.814 ); + ent.v["angles"] = ( 72.5492, 77.1467, 76.5485 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_purple" ); + ent.v["origin"] = ( 135.081, 1020.73, 438.951 ); + ent.v["angles"] = ( 70.7408, 249.832, -111.661 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( -196.034, 996.132, 456.007 ); + ent.v["angles"] = ( 45.2742, 347.156, -9.20152 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( 93.325, 1033.02, 460.204 ); + ent.v["angles"] = ( 64.0992, 230.2, 14.6467 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( -50.9279, 1068.33, 438.34 ); + ent.v["angles"] = ( 62.4253, 328.492, -28.5179 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( 270.198, 943.826, 440.327 ); + ent.v["angles"] = ( 22.1841, 218.096, 13.7881 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( 382.499, 1013.47, 228 ); + ent.v["angles"] = ( 335.422, 136.481, 22.3923 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( 376.196, 940.998, 226.125 ); + ent.v["angles"] = ( 325.854, 143.528, 19.2049 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( 373.942, 871.326, 226.125 ); + ent.v["angles"] = ( 322.141, 161.291, -3.25927 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( -385.981, 1016.74, 228 ); + ent.v["angles"] = ( 333.28, 42.0694, -30.0419 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( -385.862, 947.273, 227.425 ); + ent.v["angles"] = ( 331.495, 29.8018, -22.313 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( -388.713, 875.995, 225.725 ); + ent.v["angles"] = ( 319.226, 6.46376, -5.27376 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( -288.754, 725.154, 231.821 ); + ent.v["angles"] = ( 311.886, 18.6557, -18.6134 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md_xslw" ); + ent.v["origin"] = ( -2169.73, 268.128, -58 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( -247.451, 687.737, 228.506 ); + ent.v["angles"] = ( 304.274, 31.0757, -28.4085 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_red_static" ); + ent.v["origin"] = ( 104.946, 629.17, 313.6 ); + ent.v["angles"] = ( 324.696, 105.959, 27.117 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_red_static" ); + ent.v["origin"] = ( -114.225, 628.368, 315 ); + ent.v["angles"] = ( 329.497, 75.3379, 5.86822 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_blue_static" ); + ent.v["origin"] = ( 132.338, 635.198, 337.149 ); + ent.v["angles"] = ( 334.021, 16.7312, -7.68143 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_blue_static" ); + ent.v["origin"] = ( -133.435, 623.897, 336 ); + ent.v["angles"] = ( 337.181, 165.402, 2.96132 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( 277.498, 724.9, 230.926 ); + ent.v["angles"] = ( 303.359, 162.87, 4.62987 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( 245.173, 686.562, 229.167 ); + ent.v["angles"] = ( 300.568, 156.516, -5.53957 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); + ent.v["origin"] = ( 341.825, 3346.31, 841.6 ); + ent.v["angles"] = ( 25.7968, 292.527, -171.827 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); + ent.v["origin"] = ( 581.824, 3301.88, 846.233 ); + ent.v["angles"] = ( 25.0505, 247.816, -178.142 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); + ent.v["origin"] = ( 125.915, 3379.94, 837.668 ); + ent.v["angles"] = ( 35.6227, 267.612, -175.96 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); + ent.v["origin"] = ( -198.117, 3371.76, 841.42 ); + ent.v["angles"] = ( 20.7763, 244.643, -179.732 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); + ent.v["origin"] = ( -426.269, 3348.57, 838.398 ); + ent.v["angles"] = ( 33.2519, 280.54, -179.082 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); + ent.v["origin"] = ( -715.339, 3277.37, 840.672 ); + ent.v["angles"] = ( 38.9751, 297.917, -174.776 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); + ent.v["origin"] = ( -1185.1, 3058.42, 850.224 ); + ent.v["angles"] = ( 40.1107, 338.227, 178.436 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); + ent.v["origin"] = ( -937.583, 3177.55, 840.959 ); + ent.v["angles"] = ( 25.4236, 328.98, 179.275 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_vend_machine_sm_orange" ); + ent.v["origin"] = ( -1133.98, 2326.99, 72.8739 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 311.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_vend_machine_sm_blue" ); + ent.v["origin"] = ( -1101.35, 2351.52, 72.8739 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 309.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_vend_machine_sm_blue" ); + ent.v["origin"] = ( -1593.45, 1727.43, 72.7615 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 336.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_vend_machine_sm_orange" ); + ent.v["origin"] = ( -1610.29, 1690.88, 73.1204 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 338.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_vend_machine_sm_orange" ); + ent.v["origin"] = ( 919.399, 2612.68, 71.4912 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 153.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_vend_machine_sm_orange" ); + ent.v["origin"] = ( 890.027, 2555.77, 70.5969 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 153.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_vend_machine_sm_blue" ); + ent.v["origin"] = ( 904.523, 2583.87, 70.775 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 153.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_bath_hygiene_box_glow" ); + ent.v["origin"] = ( 1300.71, 2509.78, 75.1152 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 51.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_bath_hygiene_box_glow" ); + ent.v["origin"] = ( 1325.55, 2489.65, 76.0037 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 51.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_patio_flame_lamp_heat" ); + ent.v["origin"] = ( 1800.69, 290.215, 85.0224 ); + ent.v["angles"] = ( 270, 0.162772, 178.837 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_patio_flame_lamp_heat" ); + ent.v["origin"] = ( 1612.38, -90.3902, 84.6835 ); + ent.v["angles"] = ( 270, 0, -91 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_patio_flame_lamp_heat" ); + ent.v["origin"] = ( 1887.94, -88.0555, 88.0549 ); + ent.v["angles"] = ( 270, 0, -91 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_patio_flame_lamp_heat" ); + ent.v["origin"] = ( 1156.94, 91.5999, 88.3432 ); + ent.v["angles"] = ( 270, 0.162772, 178.837 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( 1020.6, -49.4309, -23.3453 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 100.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_leaves_falling_red" ); + ent.v["origin"] = ( -2565.25, 809.052, 271.777 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 69.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_leaves_falling_red" ); + ent.v["origin"] = ( -1384.17, 9.54169, 299.013 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 105.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_leaves_falling_orange" ); + ent.v["origin"] = ( -1427.58, -293.833, 234.852 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 112.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_leaves_falling_red" ); + ent.v["origin"] = ( -1320, -66.6965, 232.855 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 68.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_leaves_falling_orange" ); + ent.v["origin"] = ( -2554.68, 1642.96, 300.736 ); + ent.v["angles"] = ( 350, 69, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -1847.22, 220.991, -64.5093 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -1478.77, 234.774, -59.0955 ); + ent.v["angles"] = ( 0.671664, 125.998, -0.746423 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -1246.9, 162.695, -61.687 ); + ent.v["angles"] = ( 358.051, 139.997, 0.562438 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -2122.86, 509.215, -62.1621 ); + ent.v["angles"] = ( 358.317, 114.093, -1.69736 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -1317.29, -250.222, -71.875 ); + ent.v["angles"] = ( 359.993, 174.005, -0.209221 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1840.21, 1143.27, 205.318 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 281.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1712.1, 1144.93, 227.351 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 276.5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1583.81, 1144.35, 240.12 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1456.06, 1143.63, 244.2 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1456.72, 975.162, 244.3 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1456.92, 815.969, 244.4 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1584.95, 815.243, 239.208 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 275.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1712.68, 815.754, 227.255 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 276.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1840.16, 816.277, 205.934 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 281.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1839.22, 975.293, 206.287 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 281.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1711.76, 976.348, 226.465 ); + ent.v["angles"] = ( 277.5, 0, 4 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1584.08, 975.739, 239.11 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 275.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1471.53, 655.493, 244.123 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1455.94, 496.228, 244.223 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1598.85, 655.584, 239.218 ); + ent.v["angles"] = ( 271, 0, -6 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1584.49, 496.314, 238.237 ); + ent.v["angles"] = ( 271, 0, -6 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1712.06, 496.298, 226.178 ); + ent.v["angles"] = ( 278.995, 354.662, -0.668452 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1726.69, 654.404, 226.243 ); + ent.v["angles"] = ( 278.995, 354.662, -0.668452 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( 927.798, -394.828, -21.4837 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -68.2444, -524.337, -61.9811 ); + ent.v["angles"] = ( 359.2, 94, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -673.489, -488.407, -61.2224 ); + ent.v["angles"] = ( 358, 94, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -908.163, -12.3734, -61.9838 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 116.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -1313.93, 1546.51, 128.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -1278.01, 1627.62, 129.4 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -1228.57, 1718.44, 129.4 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -1163.06, 1813.75, 129.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -1087.3, 1907.09, 129 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -1004.91, 1995.94, 129 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -920.186, 2069.7, 129.3 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( 414.082, 1948.13, 129.745 ); + ent.v["angles"] = ( 32.5734, 119.859, 16.481 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( 435.322, 1939.09, 129.614 ); + ent.v["angles"] = ( 40.5569, 71.1905, -11.6191 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( 454.017, 1929.44, 129.595 ); + ent.v["angles"] = ( 47.6973, 52.1184, -22.5697 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_fluorescent_overhead_bright" ); + ent.v["origin"] = ( 415.946, 2171.76, 136.875 ); + ent.v["angles"] = ( 90, 180, -157 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_fluorescent_overhead_bright" ); + ent.v["origin"] = ( 532.648, 2118.55, 136.875 ); + ent.v["angles"] = ( 90, 180, -157 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -1971.73, -358.639, -71.875 ); + ent.v["angles"] = ( 359.817, 115.005, -0.101827 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -2257.32, -421.283, -71.875 ); + ent.v["angles"] = ( 359.821, 72.0047, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -2123.45, 164.139, -66.0718 ); + ent.v["angles"] = ( 358, 88, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -1009.56, 740.799, -61.5655 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 68.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_sprinkler_drip_physics" ); + ent.v["origin"] = ( 638.996, 1767.82, -36.7845 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 282.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_sprinkler_drip_physics" ); + ent.v["origin"] = ( -1220.27, 1714.29, 128.46 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_neon_open_sign" ); + ent.v["origin"] = ( -1439.33, 2217.11, 112.888 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 320.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign_glow_yellowish" ); + ent.v["origin"] = ( -985.482, 2298.16, 144.153 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 218.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign_glow_yellowish" ); + ent.v["origin"] = ( -1529.56, 1592.28, 144.013 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 69.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign_glow_yellowish" ); + ent.v["origin"] = ( 1448.06, 419.174, 140.541 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 96.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign_glow_yellowish" ); + ent.v["origin"] = ( 1497.66, 1236.43, 140.07 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign_glow" ); + ent.v["origin"] = ( 1616.52, 2169.05, 130.338 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 131.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign_glow" ); + ent.v["origin"] = ( 1035, 2735.99, 131.535 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 330.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_hand_dryer_glow" ); + ent.v["origin"] = ( 1274.88, 2323.22, 80.9101 ); + ent.v["angles"] = ( 330, 52, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_hand_dryer_glow" ); + ent.v["origin"] = ( 1299.92, 2302.92, 80.9368 ); + ent.v["angles"] = ( 330, 52, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_hand_dryer_glow" ); + ent.v["origin"] = ( 1528.01, 2119.58, 81.379 ); + ent.v["angles"] = ( 330, 52, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_hand_dryer_glow" ); + ent.v["origin"] = ( 1502.97, 2139.88, 81.3522 ); + ent.v["angles"] = ( 330, 52, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_bathroom_monitor_glow" ); + ent.v["origin"] = ( 1535.31, 2552.02, 96.9927 ); + ent.v["angles"] = ( 348, 232, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_bathroom_monitor_glow" ); + ent.v["origin"] = ( 1591.47, 2506.38, 96.4801 ); + ent.v["angles"] = ( 348, 232, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_bathroom_monitor_glow" ); + ent.v["origin"] = ( 1647.33, 2461.11, 96.3226 ); + ent.v["angles"] = ( 348, 232, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_bathroom_monitor_glow" ); + ent.v["origin"] = ( 1703.45, 2415.78, 96.6997 ); + ent.v["angles"] = ( 348, 232, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_bathroom_monitor_glow" ); + ent.v["origin"] = ( 1759.38, 2370.45, 96.5913 ); + ent.v["angles"] = ( 348, 232, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( 1518.02, 2384.72, 124.864 ); + ent.v["angles"] = ( 40, 94, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( 1541.95, 2366.98, 124.806 ); + ent.v["angles"] = ( 33.5876, 50.8703, -6.19034 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( 1562.74, 2348.43, 125.055 ); + ent.v["angles"] = ( 31.7214, 11.4415, -3.24704 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( 2260.15, 1627.25, 24 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 118.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( 2076.11, 1482.05, 24 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 97.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( 1942.86, 1457.43, 24 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 187.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( 1881.36, 1819.78, 24 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 132.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( -1485.69, 1646.44, 166.227 ); + ent.v["angles"] = ( 86.7275, 153.841, 176.177 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( -1313.56, 1702.64, 142.449 ); + ent.v["angles"] = ( 86.7274, 153.841, -176.823 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( -1601.79, 1701.06, 180.42 ); + ent.v["angles"] = ( 86.7274, 153.842, 179.177 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( -1467.81, 1933.32, 179.5 ); + ent.v["angles"] = ( 86.7274, 153.841, -172.823 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( -1362.45, 1866.78, 164.32 ); + ent.v["angles"] = ( 88.6878, 164.707, -161.035 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( -1051.48, 2042.75, 142.222 ); + ent.v["angles"] = ( 86.7274, 153.841, -160.823 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( -1227.57, 2041.63, 167.312 ); + ent.v["angles"] = ( 86.7274, 153.841, -164.823 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( -1334.29, 2108.83, 180.264 ); + ent.v["angles"] = ( 86.7274, 153.841, -163.823 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( -1155.85, 2296.8, 180.727 ); + ent.v["angles"] = ( 86.9256, 136.057, -177.581 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( -1065.66, 2206.19, 165.435 ); + ent.v["angles"] = ( 89.0626, 305.69, -7.95183 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( -1204.97, 2316.67, 157.531 ); + ent.v["angles"] = ( 20.4373, 280.11, -4.93528 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( -1188.33, 2331.68, 157.328 ); + ent.v["angles"] = ( 28.4413, 309.469, -4.11697 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( -1172.66, 2345.06, 157.79 ); + ent.v["angles"] = ( 25.8376, 342.076, 5.31963 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( -1594.59, 1808.22, 157.955 ); + ent.v["angles"] = ( 23.3245, 9.46662, 9.60153 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( -1614.91, 1770.33, 157.684 ); + ent.v["angles"] = ( 20.6662, 293.305, -3.8135 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( -1604.43, 1789.55, 156.921 ); + ent.v["angles"] = ( 28.4412, 319.469, -4.11695 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ceiling_recessed" ); + ent.v["origin"] = ( 1186.45, 2751.39, 136.945 ); + ent.v["angles"] = ( 86.7387, 62.9516, -166.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ceiling_recessed" ); + ent.v["origin"] = ( 1384.88, 2591.56, 138.375 ); + ent.v["angles"] = ( 88.6042, 82.4164, -147.099 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ceiling_recessed" ); + ent.v["origin"] = ( 1586.41, 2429.23, 139.375 ); + ent.v["angles"] = ( 88.8774, 187.046, -42.4822 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ceiling_recessed" ); + ent.v["origin"] = ( 1465.85, 2266.87, 136.375 ); + ent.v["angles"] = ( 89.0517, 199.162, -32.3586 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ceiling_recessed" ); + ent.v["origin"] = ( 1359.8, 2514.99, 136.375 ); + ent.v["angles"] = ( 89.0517, 199.162, -32.3586 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ceiling_recessed" ); + ent.v["origin"] = ( 1258.69, 2601.13, 138.375 ); + ent.v["angles"] = ( 89.0517, 199.162, -32.3586 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ceiling_recessed" ); + ent.v["origin"] = ( 1093.41, 2676.11, 136.775 ); + ent.v["angles"] = ( 89.0516, 199.162, 58.6408 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( 1151.07, 2615.28, 136.775 ); + ent.v["angles"] = ( 89.0516, 199.162, 58.6408 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( 1391.95, 2415.95, 137.575 ); + ent.v["angles"] = ( 89.0516, 199.162, 58.6408 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_sprinkler_drip_physics" ); + ent.v["origin"] = ( 1525.74, 2382.47, 49.6964 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_sprinkler_drip_physics" ); + ent.v["origin"] = ( 1696.66, 2408.8, 45.3473 ); + ent.v["angles"] = ( 89, 180, -57 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -2051.52, 1062.76, 24 ); + ent.v["angles"] = ( 359.567, 71.0595, -0.508649 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); + ent.v["origin"] = ( 1598.24, -28.9399, 0.125 ); + ent.v["angles"] = ( 341.589, 125.471, 108.652 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_concert_sun" ); + ent.v["origin"] = ( -123326, 16214, 24084 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1401.48, 518.774, 157.875 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1401.22, 654.584, 157.175 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 1158.39, 1969.04, 166.428 ); + ent.v["angles"] = ( 90, 0, 49 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 1052.3, 2081.28, 166.382 ); + ent.v["angles"] = ( 90, 0, 43 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 933.055, 2183.92, 166.375 ); + ent.v["angles"] = ( 90, 0, 36 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 1026.63, 2313.69, 178.071 ); + ent.v["angles"] = ( 90, 0, 36 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 1160.05, 2200.94, 177.45 ); + ent.v["angles"] = ( 90, 0, 44 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 1282.81, 2072.3, 178.445 ); + ent.v["angles"] = ( 90, 0, 47 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 594.147, 2380.49, 165.473 ); + ent.v["angles"] = ( 90, 180, -157 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 695.924, 2511.93, 177.562 ); + ent.v["angles"] = ( 90, 180, -157 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ray_sun_md_spread_1s" ); + ent.v["origin"] = ( 631.339, 2367.65, 27 ); + ent.v["angles"] = ( 328.934, 168.707, -77.4483 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ray_sun_md_1s" ); + ent.v["origin"] = ( 598.337, 2351.86, 49 ); + ent.v["angles"] = ( 329.859, 182.49, -91.6652 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); + ent.v["origin"] = ( 830.122, 2224.34, -29 ); + ent.v["angles"] = ( 343.195, 134.207, 100.062 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ray_sun_md_short_1s" ); + ent.v["origin"] = ( 549.608, 2323.99, 29 ); + ent.v["angles"] = ( 327.281, 180.329, -83.6047 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ray_sun_md_wide_1s" ); + ent.v["origin"] = ( 2039.82, 1198.2, 33.125 ); + ent.v["angles"] = ( 335.277, 157.123, -55.0407 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); + ent.v["origin"] = ( 1715.98, 77.9118, -18.875 ); + ent.v["angles"] = ( 337.834, 151.778, 136.172 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 394.151, 201.36, 114.81 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 396.866, 108.737, 114.626 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 266.427, 108.836, 114.695 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 266.979, 201.657, 114.163 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ray_sun_md_short_1s" ); + ent.v["origin"] = ( 23.5171, 1029.3, -57 ); + ent.v["angles"] = ( 341.776, 185.65, -90.7827 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 8.75947, 109.346, 114.496 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 139.199, 109.247, 114.127 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 9.31147, 202.167, 113.964 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 136.484, 201.87, 114.311 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -366.449, 12.2591, 113.936 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -490.844, 11.6303, 114.457 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -490.519, -85.3038, 114.478 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -367.962, -85.0923, 114.459 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); + ent.v["origin"] = ( -701.47, 948.397, -118 ); + ent.v["angles"] = ( 330.435, 162.335, -80.0646 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); + ent.v["origin"] = ( -666.823, 945.4, -38 ); + ent.v["angles"] = ( 330.435, 162.335, -107.065 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); + ent.v["origin"] = ( -1296.1, 1434.01, -94 ); + ent.v["angles"] = ( 330.435, 162.335, 90.9353 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( -1668.91, 1468.81, 81 ); + ent.v["angles"] = ( 6.76034, 30.1075, 1.82019 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( -1005.7, 505.867, -39 ); + ent.v["angles"] = ( 359.536, 36.0461, -0.491171 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_linger_lit" ); + ent.v["origin"] = ( -967.662, 530.119, -37.0119 ); + ent.v["angles"] = ( 1.93877, 151.124, 3.67815 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); + ent.v["origin"] = ( -692.796, 478.937, -123.564 ); + ent.v["angles"] = ( 338.905, 169.305, 83.6134 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ray_sun_md_wide_1s" ); + ent.v["origin"] = ( -533.778, 236.463, -113.875 ); + ent.v["angles"] = ( 326.062, 175.535, 29.4534 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_dust_motes_xsm_short" ); + ent.v["origin"] = ( -698.578, 244.436, -36.9706 ); + ent.v["angles"] = ( 306.462, 170.025, 18.105 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_dust_motes_xsm_short" ); + ent.v["origin"] = ( -411.823, 423.772, 53.3709 ); + ent.v["angles"] = ( 329.795, 165.243, 19.3202 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ray_sun_md_spread_1s" ); + ent.v["origin"] = ( -381.716, 439.186, 0 ); + ent.v["angles"] = ( 330.346, 159.396, -123.487 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ray_sun_md_spread_1s" ); + ent.v["origin"] = ( -398.133, 374.117, -3.04389 ); + ent.v["angles"] = ( 328.633, 154.645, -135.435 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ray_sun_md_short_1s" ); + ent.v["origin"] = ( -438.938, 478.051, 60.8636 ); + ent.v["angles"] = ( 331.363, 166.986, -126.031 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_smk_field_md" ); + ent.v["origin"] = ( 61.6318, 2580.51, 76 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_smk_field_md" ); + ent.v["origin"] = ( -481.2, 2496.29, 81 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_smk_field_md" ); + ent.v["origin"] = ( 1046.07, 1905.4, 54 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 103.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_linger_lit" ); + ent.v["origin"] = ( -412.616, 2536.8, 44 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 78.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( -1201.6, -286.67, -25.875 ); + ent.v["angles"] = ( 355.892, 140.796, 1.67287 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( -1636.01, -193.472, 9.125 ); + ent.v["angles"] = ( 358.206, 96.7923, 1.05661 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); + ent.v["origin"] = ( -2149.42, 508.981, 1.47507 ); + ent.v["angles"] = ( 338.088, 160.576, 86.975 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); + ent.v["origin"] = ( -2246.31, 538.827, -75.4825 ); + ent.v["angles"] = ( 336.091, 160.691, 85.9302 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_dust_motes_xsm_short" ); + ent.v["origin"] = ( -205.55, 672.252, 60 ); + ent.v["angles"] = ( 314.884, 310.617, 143.299 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_dust_motes_xsm_short" ); + ent.v["origin"] = ( -325.491, 380.432, 19.125 ); + ent.v["angles"] = ( 308.258, 132.621, 21.6228 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( -64.8068, 1131.3, -54.0058 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 15.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_smk_field_md" ); + ent.v["origin"] = ( 195.287, 1558.04, -58 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_smk_field_md" ); + ent.v["origin"] = ( -285.1, 1529, -58 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_smk_field_md" ); + ent.v["origin"] = ( -765.279, 1221.25, -49 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_smk_field_md" ); + ent.v["origin"] = ( -311.368, -460.534, -38.9531 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); + ent.v["origin"] = ( -892.485, -325.185, -152.805 ); + ent.v["angles"] = ( 329.267, 170.449, 103.906 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( 174.972, 367.875, -40.2769 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 97.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_light_ray_sun_md_wide_1s" ); + ent.v["origin"] = ( 1006.87, 2178.07, 44 ); + ent.v["angles"] = ( 330.877, 171.735, 124.957 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( 992.676, 2055.13, 79 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 70.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_linger_lit" ); + ent.v["origin"] = ( 1041.64, 2091.38, 57 ); + ent.v["angles"] = ( 3.89792, 91.0306, 0.90132 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( 1468.05, 24.2235, 57.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 104.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_linger_lit" ); + ent.v["origin"] = ( 1448.46, -4.94705, 65.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 107.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_linger_lit" ); + ent.v["origin"] = ( 1361.27, 147.256, 33.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 107.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( 1225.76, 137.601, 54.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 125.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( 293.812, -647.991, -25.9943 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 112.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_fountain_middle" ); + ent.v["origin"] = ( 2561.43, 2105.29, 9 ); + ent.v["angles"] = ( 270, 0, -50 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -10; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_fountain_sides" ); + ent.v["origin"] = ( 2345.44, 2327.04, 10.5205 ); + ent.v["angles"] = ( 270, 1.68468, -21.6846 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_fountain_sides" ); + ent.v["origin"] = ( 2619, 1791.64, 11.6013 ); + ent.v["angles"] = ( 270, 0, -67 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( 404.329, -7.8116, -64.3441 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 133.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -518.291, 1059.17, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 97.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -232.748, 1050.48, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 97.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_fountain_middle" ); + ent.v["origin"] = ( 2470.7, 2231.16, 11.3533 ); + ent.v["angles"] = ( 270, 0, -50 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -6; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_concert_fountain_middle" ); + ent.v["origin"] = ( 2612.39, 1956.03, 11.2229 ); + ent.v["angles"] = ( 270, 0, -50 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -6; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fire_fireplace_md2" ); + ent.v["origin"] = ( 1678.51, 169.766, 67.1178 ); + ent.v["angles"] = ( 271, 180, 81 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1761.27, 1215.55, 159.247 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 276.5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1808.53, 1216.58, 159.25 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 276.5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1856.37, 1216.15, 159.248 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 276.5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -963.89, 1681.53, 85.5611 ); + ent.v["angles"] = ( 72.0012, 141.169, 177.161 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign_glow_yellowish" ); + ent.v["origin"] = ( 191.353, 685.718, 1.3389 ); + ent.v["angles"] = ( 317.37, 59.8108, -5.50809 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign_glow_yellowish" ); + ent.v["origin"] = ( -37.5779, 574.312, 1.07672 ); + ent.v["angles"] = ( 340.454, 244.649, 7.83269 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -2380.42, 882.398, -37.6809 ); + ent.v["angles"] = ( 351.32, 114.302, -1.71628 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -2667.92, 11.7197, -95.359 ); + ent.v["angles"] = ( 355.534, 86.1613, 2.57025 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1158.77, 2875.69, 139.875 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1210.7, 2832.73, 139.875 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1263.23, 2790.23, 139.875 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1315.51, 2747.73, 139.875 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1368.9, 2706.13, 139.875 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1423.78, 2664.28, 138.875 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1476.78, 2622.88, 138.875 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( 125.307, 590.666, -70.1511 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 137.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_vend_machine_sm_orange" ); + ent.v["origin"] = ( -1067.43, 2379.17, 73.2374 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 306.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; +} diff --git a/MP/Maps/Encore/clientscripts/mp/mp_concert.csc b/MP/Maps/Encore/clientscripts/mp/mp_concert.csc new file mode 100644 index 0000000..ab9ccf5 --- /dev/null +++ b/MP/Maps/Encore/clientscripts/mp/mp_concert.csc @@ -0,0 +1,23 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_concert_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_concert_amb; + +main() +{ + level.worldmapx = 0; + level.worldmapy = 0; + level.worldlat = 51.5083; + level.worldlong = -0.108876; + clientscripts\mp\_load::main(); + clientscripts\mp\mp_concert_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_concert_amb::main(); + waitforclient( 0 ); +/# + println( "*** Client : mp_concert running..." ); +#/ +} diff --git a/MP/Maps/Encore/clientscripts/mp/mp_concert_amb.csc b/MP/Maps/Encore/clientscripts/mp/mp_concert_amb.csc new file mode 100644 index 0000000..3cc7fe0 --- /dev/null +++ b/MP/Maps/Encore/clientscripts/mp/mp_concert_amb.csc @@ -0,0 +1,81 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "concert_outdoor", 1 ); + setambientroomtone( "concert_outdoor", "amb_wind_ext_2d", 0.5, 1 ); + setambientroomreverb( "concert_outdoor", "concert_outdoor", 1, 1 ); + setambientroomcontext( "concert_outdoor", "ringoff_plr", "outdoor" ); + declareambientroom( "onstage_room" ); + setambientroomtone( "onstage_room", "amb_wind_ext_2d_qt", 0.5, 1 ); + setambientroomreverb( "onstage_room", "concert_stage", 1, 1 ); + setambientroomcontext( "onstage_room", "ringoff_plr", "outdoor" ); + declareambientroom( "backstage_room" ); + setambientroomtone( "backstage_room", "amb_wind_int_2d", 0.5, 1 ); + setambientroomreverb( "backstage_room", "concert_backstage", 1, 1 ); + setambientroomcontext( "backstage_room", "ringoff_plr", "indoor" ); + declareambientroom( "shop_room" ); + setambientroomtone( "shop_room", "amb_wind_int_2d", 0.5, 1 ); + setambientroomreverb( "shop_room", "concert_smallroom", 1, 1 ); + setambientroomcontext( "shop_room", "ringoff_plr", "indoor" ); + declareambientroom( "staircase_room" ); + setambientroomtone( "staircase_room", "amb_wind_int_2d", 0.5, 1 ); + setambientroomreverb( "staircase_room", "concert_smallroom", 1, 1 ); + setambientroomcontext( "staircase_room", "ringoff_plr", "indoor" ); + declareambientroom( "restaurant_room" ); + setambientroomtone( "restaurant_room", "amb_wind_int_2d", 0.5, 1 ); + setambientroomreverb( "restaurant_room", "concert_mediumroom", 1, 1 ); + setambientroomcontext( "restaurant_room", "ringoff_plr", "indoor" ); + declareambientroom( "rest_patio_room" ); + setambientroomtone( "rest_patio_room", "amb_wind_ext_2d", 0.5, 1 ); + setambientroomreverb( "rest_patio_room", "concert_outdoor", 1, 1 ); + setambientroomcontext( "rest_patio_room", "ringoff_plr", "outdoor" ); + declareambientroom( "seating_area" ); + setambientroomtone( "seating_area", "amb_wind_ext_2d_qt", 0.5, 1 ); + setambientroomreverb( "seating_area", "concert_outdoor", 1, 1 ); + setambientroomcontext( "seating_area", "ringoff_plr", "outdoor" ); + declareambientroom( "bleacherbox_room" ); + setambientroomtone( "bleacherbox_room", "amb_wind_int_2d", 0.5, 1 ); + setambientroomreverb( "bleacherbox_room", "concert_stoneroom", 1, 1 ); + setambientroomcontext( "bleacherbox_room", "ringoff_plr", "indoor" ); + declareambientroom( "locker_room" ); + setambientroomtone( "locker_room", "amb_wind_int_2d", 0.5, 1 ); + setambientroomreverb( "locker_room", "concert_stoneroom", 1, 1 ); + setambientroomcontext( "locker_room", "ringoff_plr", "indoor" ); + declareambientroom( "bleacher_alcove" ); + setambientroomtone( "bleacher_alcove", "amb_wind_ext_2d_qt", 0.5, 1 ); + setambientroomreverb( "bleacher_alcove", "concert_mediumroom", 1, 1 ); + setambientroomcontext( "bleacher_alcove", "ringoff_plr", "outdoor" ); + declareambientroom( "bleacher_overhang" ); + setambientroomtone( "bleacher_overhang", "amb_wind_ext_2d", 0.5, 1 ); + setambientroomreverb( "bleacher_overhang", "concert_outdoor", 1, 1 ); + setambientroomcontext( "bleacher_overhang", "ringoff_plr", "outdoor" ); + declareambientroom( "bleacher_transition" ); + setambientroomtone( "bleacher_transition", "amb_wind_ext_2d_qt", 0.5, 1 ); + setambientroomreverb( "bleacher_transition", "concert_outdoor", 1, 1 ); + setambientroomcontext( "bleacher_transition", "ringoff_plr", "outdoor" ); + declareambientroom( "crawlspace_room" ); + setambientroomtone( "crawlspace_room", "amb_wind_int_2d", 0.5, 1 ); + setambientroomreverb( "crawlspace_room", "concert_smallroom", 1, 1 ); + setambientroomcontext( "crawlspace_room", "ringoff_plr", "indoor" ); + declareambientroom( "under_ramp_room" ); + setambientroomtone( "under_ramp_room", "amb_wind_ext_2d", 0.5, 1 ); + setambientroomreverb( "under_ramp_room", "concert_outdoor", 1, 1 ); + setambientroomcontext( "under_ramp_room", "ringoff_plr", "outdoor" ); + thread snd_start_autofx_audio(); + thread snd_play_loopers(); +} + +snd_play_loopers() +{ + +} + +snd_start_autofx_audio() +{ + +} diff --git a/MP/Maps/Encore/clientscripts/mp/mp_concert_fx.csc b/MP/Maps/Encore/clientscripts/mp/mp_concert_fx.csc new file mode 100644 index 0000000..bb8fb51 --- /dev/null +++ b/MP/Maps/Encore/clientscripts/mp/mp_concert_fx.csc @@ -0,0 +1,106 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_fxanim_dlc; +#include clientscripts\mp\createfx\mp_concert_fx; +#include clientscripts\mp\_fx; + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_lf_mp_concert_sun"] = loadfx( "lens_flares/fx_lf_mp_concert_sun" ); + level._effect["fx_pigeon_panic_flight_med"] = loadfx( "bio/animals/fx_pigeon_panic_flight_med" ); + level._effect["fx_leaves_ground_wind"] = loadfx( "foliage/fx_leaves_ground_wind" ); + level._effect["fx_sand_gust_ground_sm"] = loadfx( "dirt/fx_sand_gust_ground_sm" ); + level._effect["fx_sand_gust_ground_md_xslw"] = loadfx( "dirt/fx_sand_gust_ground_md_xslw" ); + level._effect["fx_concert_leaves_falling_red"] = loadfx( "foliage/fx_concert_leaves_falling_red" ); + level._effect["fx_concert_leaves_falling_orange"] = loadfx( "foliage/fx_concert_leaves_falling_orange" ); + level._effect["fx_leaves_ground_windy"] = loadfx( "foliage/fx_leaves_ground_windy" ); + level._effect["fx_patio_flame_lamp_heat"] = loadfx( "props/fx_patio_flame_lamp_heat" ); + level._effect["fx_water_sprinkler_drip_physics"] = loadfx( "water/fx_water_sprinkler_drip_physics" ); + level._effect["fx_fire_fireplace_md2"] = loadfx( "fire/fx_fire_fireplace_md2" ); + level._effect["fx_smk_linger_lit"] = loadfx( "smoke/fx_concert_smk_linger_lit" ); + level._effect["fx_concert_smk_field_md"] = loadfx( "smoke/fx_concert_smk_field_md" ); + level._effect["fx_light_floodlight_sqr_cool_xlg"] = loadfx( "light/fx_light_floodlight_sqr_cool_xlg" ); + level._effect["fx_light_buoy_red_blink"] = loadfx( "light/fx_light_buoy_red_blink" ); + level._effect["fx_light_floodlight_stadium_lg"] = loadfx( "light/fx_light_floodlight_stadium_lg" ); + level._effect["fx_light_stagelight_wht"] = loadfx( "light/fx_light_stagelight_wht" ); + level._effect["fx_concert_can_light_blue"] = loadfx( "light/fx_concert_can_light_blue" ); + level._effect["fx_concert_can_light_blue_static"] = loadfx( "light/fx_concert_can_light_blue_static" ); + level._effect["fx_concert_can_light_purple"] = loadfx( "light/fx_concert_can_light_purple" ); + level._effect["fx_concert_can_light_red"] = loadfx( "light/fx_concert_can_light_red" ); + level._effect["fx_concert_can_light_red_static"] = loadfx( "light/fx_concert_can_light_red_static" ); + level._effect["fx_light_spotlight_md_cool"] = loadfx( "light/fx_light_spotlight_md_cool" ); + level._effect["fx_light_baracade_yellow"] = loadfx( "light/fx_light_baracade_yellow" ); + level._effect["fx_light_fluorescent_overhead_bright"] = loadfx( "light/fx_light_fluorescent_overhead_bright" ); + level._effect["fx_light_flourescent_ceiling_panel_2"] = loadfx( "light/fx_light_flourescent_ceiling_panel_2" ); + level._effect["fx_track_light"] = loadfx( "light/fx_track_light" ); + level._effect["fx_light_button_yellow_on"] = loadfx( "light/fx_light_button_yellow_on" ); + level._effect["fx_light_vend_machine_sm_orange"] = loadfx( "light/fx_light_vend_machine_sm_orange" ); + level._effect["fx_light_vend_machine_sm_blue"] = loadfx( "light/fx_light_vend_machine_sm_blue" ); + level._effect["fx_concert_bathroom_monitor_glow"] = loadfx( "light/fx_concert_bathroom_monitor_glow" ); + level._effect["fx_concert_bath_hygiene_box_glow"] = loadfx( "light/fx_concert_bath_hygiene_box_glow" ); + level._effect["fx_concert_hand_dryer_glow"] = loadfx( "light/fx_concert_hand_dryer_glow" ); + level._effect["fx_light_com_utility_cool"] = loadfx( "light/fx_light_com_utility_cool" ); + level._effect["fx_light_exit_sign_glow"] = loadfx( "light/fx_light_exit_sign_glow" ); + level._effect["fx_light_recessed_cool"] = loadfx( "light/fx_light_recessed_cool" ); + level._effect["fx_light_recessed_wrm"] = loadfx( "light/fx_light_recessed_wrm" ); + level._effect["fx_light_hanging_modern"] = loadfx( "light/fx_light_hanging_modern" ); + level._effect["fx_light_neon_open_sign"] = loadfx( "light/fx_light_neon_open_sign" ); + level._effect["fx_concert_light_ceiling_recessed_short"] = loadfx( "light/fx_concert_light_ceiling_recessed_short" ); + level._effect["fx_concert_light_ceiling_recessed"] = loadfx( "light/fx_concert_light_ceiling_recessed" ); + level._effect["fx_light_exit_sign_glow_yellowish"] = loadfx( "light/fx_light_exit_sign_glow_yellowish" ); + level._effect["fx_light_flour_glow_v_shape_cool"] = loadfx( "light/fx_light_flour_glow_v_shape_cool" ); + level._effect["fx_light_flour_glow_v_shape_cool_sm"] = loadfx( "light/fx_light_flour_glow_v_shape_cool_sm" ); + level._effect["fx_concert_light_ray_sun_lg_spread_1s"] = loadfx( "light/fx_concert_light_ray_sun_lg_spread_1s" ); + level._effect["fx_concert_light_ray_sun_md_1s"] = loadfx( "light/fx_concert_light_ray_sun_md_1s" ); + level._effect["fx_concert_light_ray_sun_md_short_1s"] = loadfx( "light/fx_concert_light_ray_sun_md_short_1s" ); + level._effect["fx_concert_light_ray_sun_md_spread_1s"] = loadfx( "light/fx_concert_light_ray_sun_md_spread_1s" ); + level._effect["fx_concert_light_ray_sun_md_wide_1s"] = loadfx( "light/fx_concert_light_ray_sun_md_wide_1s" ); + level._effect["fx_concert_light_ray_sun_window_1s"] = loadfx( "light/fx_concert_light_ray_sun_window_1s" ); + level._effect["fx_light_dust_motes_xsm_short"] = loadfx( "light/fx_concert_dust_motes_xsm_short" ); + level._effect["fx_light_dust_motes_sm"] = loadfx( "light/fx_light_dust_motes_sm" ); + level._effect["fx_dust_motes_blowing_sm"] = loadfx( "debris/fx_dust_motes_blowing_sm" ); + level._effect["fx_concert_fountain_sides"] = loadfx( "water/fx_concert_fountain_sides" ); + level._effect["fx_concert_fountain_middle"] = loadfx( "water/fx_concert_fountain_middle" ); + level._effect["fx_insects_butterfly_flutter_radial2"] = loadfx( "bio/insects/fx_insects_butterfly_flutter_radial2" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["seagull_circle_01"] = %fxanim_gp_seagull_circle_01_anim; + level.scr_anim["fxanim_props"]["seagull_circle_02"] = %fxanim_gp_seagull_circle_02_anim; + level.scr_anim["fxanim_props"]["seagull_circle_03"] = %fxanim_gp_seagull_circle_03_anim; + level.scr_anim["fxanim_props"]["london_eye"] = %fxanim_mp_con_london_eye_anim; +} + +#using_animtree("fxanim_props_dlc"); + +precache_fxanim_props_dlc() +{ + level.scr_anim["fxanim_props_dlc"]["wires_stage_rear"] = %fxanim_mp_con_wires_stage_rear_anim; + level.scr_anim["fxanim_props_dlc"]["wires_stage_scaffold"] = %fxanim_mp_con_wires_stage_scaffold_anim; + level.scr_anim["fxanim_props_dlc"]["wires_seats_scaffold"] = %fxanim_mp_con_wires_seats_scaffold_anim; + level.scr_anim["fxanim_props_dlc"]["river_boats"] = %fxanim_mp_con_boat_link_anim; + level.scr_anim["fxanim_props_dlc"]["wires_stage_right"] = %fxanim_mp_con_wires_stage_right_anim; + level.fx_anim_level_init = clientscripts\mp\_fxanim_dlc::fxanim_init_dlc; +} + +main() +{ + clientscripts\mp\createfx\mp_concert_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fxanim_props(); + precache_fxanim_props_dlc(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} diff --git a/MP/Maps/Encore/maps/mp/createfx/mp_concert_fx.gsc b/MP/Maps/Encore/maps/mp/createfx/mp_concert_fx.gsc new file mode 100644 index 0000000..511f053 --- /dev/null +++ b/MP/Maps/Encore/maps/mp/createfx/mp_concert_fx.gsc @@ -0,0 +1,1242 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createloopeffect( "fx_pigeon_panic_flight_med" ); + ent.v["origin"] = ( -1349.51, 3293.57, 401.947 ); + ent.v["angles"] = ( 345, 36, 0 ); + ent.v["type"] = "loopfx"; + ent.v["delay"] = 15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md_xslw" ); + ent.v["origin"] = ( -898.217, 114.965, -63.4905 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 134.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md_xslw" ); + ent.v["origin"] = ( -1935.19, 144.112, -68.8491 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md_xslw" ); + ent.v["origin"] = ( -943.246, 661.499, -64 ); + ent.v["angles"] = ( 359.067, 96, -0.35803 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_red" ); + ent.v["origin"] = ( 226.178, 959.617, 448.072 ); + ent.v["angles"] = ( 53.6561, 215.248, -150.351 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_red" ); + ent.v["origin"] = ( -102.867, 1037.12, 438.545 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 81.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_red" ); + ent.v["origin"] = ( -244.747, 962.45, 453.965 ); + ent.v["angles"] = ( 56.1299, 332.501, -29.2417 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_purple" ); + ent.v["origin"] = ( 28.5034, 1068.91, 438.319 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 75.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_purple" ); + ent.v["origin"] = ( -122.511, 1051.59, 438.814 ); + ent.v["angles"] = ( 72.5492, 77.1467, 76.5485 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_purple" ); + ent.v["origin"] = ( 135.081, 1020.73, 438.951 ); + ent.v["angles"] = ( 70.7408, 249.832, -111.661 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( -196.034, 996.132, 456.007 ); + ent.v["angles"] = ( 45.2742, 347.156, -9.20152 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( 93.325, 1033.02, 460.204 ); + ent.v["angles"] = ( 64.0992, 230.2, 14.6467 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( -50.9279, 1068.33, 438.34 ); + ent.v["angles"] = ( 62.4253, 328.492, -28.5179 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( 270.198, 943.826, 440.327 ); + ent.v["angles"] = ( 22.1841, 218.096, 13.7881 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( 382.499, 1013.47, 228 ); + ent.v["angles"] = ( 335.422, 136.481, 22.3923 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( 376.196, 940.998, 226.125 ); + ent.v["angles"] = ( 325.854, 143.528, 19.2049 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( 373.942, 871.326, 226.125 ); + ent.v["angles"] = ( 322.141, 161.291, -3.25927 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( -385.981, 1016.74, 228 ); + ent.v["angles"] = ( 333.28, 42.0694, -30.0419 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( -385.862, 947.273, 227.425 ); + ent.v["angles"] = ( 331.495, 29.8018, -22.313 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( -388.713, 875.995, 225.725 ); + ent.v["angles"] = ( 319.226, 6.46376, -5.27376 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( -288.754, 725.154, 231.821 ); + ent.v["angles"] = ( 311.886, 18.6557, -18.6134 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md_xslw" ); + ent.v["origin"] = ( -2169.73, 268.128, -58 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( -247.451, 687.737, 228.506 ); + ent.v["angles"] = ( 304.274, 31.0757, -28.4085 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_red_static" ); + ent.v["origin"] = ( 104.946, 629.17, 313.6 ); + ent.v["angles"] = ( 324.696, 105.959, 27.117 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_red_static" ); + ent.v["origin"] = ( -114.225, 628.368, 315 ); + ent.v["angles"] = ( 329.497, 75.3379, 5.86822 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_blue_static" ); + ent.v["origin"] = ( 132.338, 635.198, 337.149 ); + ent.v["angles"] = ( 334.021, 16.7312, -7.68143 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_blue_static" ); + ent.v["origin"] = ( -133.435, 623.897, 336 ); + ent.v["angles"] = ( 337.181, 165.402, 2.96132 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( 277.498, 724.9, 230.926 ); + ent.v["angles"] = ( 303.359, 162.87, 4.62987 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_can_light_blue" ); + ent.v["origin"] = ( 245.173, 686.562, 229.167 ); + ent.v["angles"] = ( 300.568, 156.516, -5.53957 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); + ent.v["origin"] = ( 341.825, 3346.31, 841.6 ); + ent.v["angles"] = ( 25.7968, 292.527, -171.827 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); + ent.v["origin"] = ( 581.824, 3301.88, 846.233 ); + ent.v["angles"] = ( 25.0505, 247.816, -178.142 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); + ent.v["origin"] = ( 125.915, 3379.94, 837.668 ); + ent.v["angles"] = ( 35.6227, 267.612, -175.96 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); + ent.v["origin"] = ( -198.117, 3371.76, 841.42 ); + ent.v["angles"] = ( 20.7763, 244.643, -179.732 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); + ent.v["origin"] = ( -426.269, 3348.57, 838.398 ); + ent.v["angles"] = ( 33.2519, 280.54, -179.082 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); + ent.v["origin"] = ( -715.339, 3277.37, 840.672 ); + ent.v["angles"] = ( 38.9751, 297.917, -174.776 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); + ent.v["origin"] = ( -1185.1, 3058.42, 850.224 ); + ent.v["angles"] = ( 40.1107, 338.227, 178.436 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); + ent.v["origin"] = ( -937.583, 3177.55, 840.959 ); + ent.v["angles"] = ( 25.4236, 328.98, 179.275 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_vend_machine_sm_orange" ); + ent.v["origin"] = ( -1133.98, 2326.99, 72.8739 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 311.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_vend_machine_sm_blue" ); + ent.v["origin"] = ( -1101.35, 2351.52, 72.8739 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 309.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_vend_machine_sm_blue" ); + ent.v["origin"] = ( -1593.45, 1727.43, 72.7615 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 336.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_vend_machine_sm_orange" ); + ent.v["origin"] = ( -1610.29, 1690.88, 73.1204 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 338.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_vend_machine_sm_orange" ); + ent.v["origin"] = ( 919.399, 2612.68, 71.4912 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 153.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_vend_machine_sm_orange" ); + ent.v["origin"] = ( 890.027, 2555.77, 70.5969 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 153.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_vend_machine_sm_blue" ); + ent.v["origin"] = ( 904.523, 2583.87, 70.775 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 153.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_bath_hygiene_box_glow" ); + ent.v["origin"] = ( 1300.71, 2509.78, 75.1152 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 51.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_bath_hygiene_box_glow" ); + ent.v["origin"] = ( 1325.55, 2489.65, 76.0037 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 51.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_patio_flame_lamp_heat" ); + ent.v["origin"] = ( 1800.69, 290.215, 85.0224 ); + ent.v["angles"] = ( 270, 0.162772, 178.837 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_patio_flame_lamp_heat" ); + ent.v["origin"] = ( 1612.38, -90.3902, 84.6835 ); + ent.v["angles"] = ( 270, 0, -91 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_patio_flame_lamp_heat" ); + ent.v["origin"] = ( 1887.94, -88.0555, 88.0549 ); + ent.v["angles"] = ( 270, 0, -91 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_patio_flame_lamp_heat" ); + ent.v["origin"] = ( 1156.94, 91.5999, 88.3432 ); + ent.v["angles"] = ( 270, 0.162772, 178.837 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( 1020.6, -49.4309, -23.3453 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 100.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_leaves_falling_red" ); + ent.v["origin"] = ( -2565.25, 809.052, 271.777 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 69.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_leaves_falling_red" ); + ent.v["origin"] = ( -1384.17, 9.54169, 299.013 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 105.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_leaves_falling_orange" ); + ent.v["origin"] = ( -1427.58, -293.833, 234.852 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 112.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_leaves_falling_red" ); + ent.v["origin"] = ( -1320, -66.6965, 232.855 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 68.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_leaves_falling_orange" ); + ent.v["origin"] = ( -2554.68, 1642.96, 300.736 ); + ent.v["angles"] = ( 350, 69, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -1847.22, 220.991, -64.5093 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -1478.77, 234.774, -59.0955 ); + ent.v["angles"] = ( 0.671664, 125.998, -0.746423 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -1246.9, 162.695, -61.687 ); + ent.v["angles"] = ( 358.051, 139.997, 0.562438 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -2122.86, 509.215, -62.1621 ); + ent.v["angles"] = ( 358.317, 114.093, -1.69736 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -1317.29, -250.222, -71.875 ); + ent.v["angles"] = ( 359.993, 174.005, -0.209221 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1840.21, 1143.27, 205.318 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 281.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1712.1, 1144.93, 227.351 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 276.5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1583.81, 1144.35, 240.12 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1456.06, 1143.63, 244.2 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1456.72, 975.162, 244.3 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1456.92, 815.969, 244.4 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1584.95, 815.243, 239.208 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 275.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1712.68, 815.754, 227.255 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 276.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1840.16, 816.277, 205.934 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 281.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1839.22, 975.293, 206.287 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 281.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1711.76, 976.348, 226.465 ); + ent.v["angles"] = ( 277.5, 0, 4 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1584.08, 975.739, 239.11 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 275.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1471.53, 655.493, 244.123 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1455.94, 496.228, 244.223 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1598.85, 655.584, 239.218 ); + ent.v["angles"] = ( 271, 0, -6 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1584.49, 496.314, 238.237 ); + ent.v["angles"] = ( 271, 0, -6 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1712.06, 496.298, 226.178 ); + ent.v["angles"] = ( 278.995, 354.662, -0.668452 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1726.69, 654.404, 226.243 ); + ent.v["angles"] = ( 278.995, 354.662, -0.668452 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( 927.798, -394.828, -21.4837 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -68.2444, -524.337, -61.9811 ); + ent.v["angles"] = ( 359.2, 94, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -673.489, -488.407, -61.2224 ); + ent.v["angles"] = ( 358, 94, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -908.163, -12.3734, -61.9838 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 116.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -1313.93, 1546.51, 128.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -1278.01, 1627.62, 129.4 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -1228.57, 1718.44, 129.4 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -1163.06, 1813.75, 129.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -1087.3, 1907.09, 129 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -1004.91, 1995.94, 129 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( -920.186, 2069.7, 129.3 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( 414.082, 1948.13, 129.745 ); + ent.v["angles"] = ( 32.5734, 119.859, 16.481 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( 435.322, 1939.09, 129.614 ); + ent.v["angles"] = ( 40.5569, 71.1905, -11.6191 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( 454.017, 1929.44, 129.595 ); + ent.v["angles"] = ( 47.6973, 52.1184, -22.5697 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_fluorescent_overhead_bright" ); + ent.v["origin"] = ( 415.946, 2171.76, 136.875 ); + ent.v["angles"] = ( 90, 180, -157 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_fluorescent_overhead_bright" ); + ent.v["origin"] = ( 532.648, 2118.55, 136.875 ); + ent.v["angles"] = ( 90, 180, -157 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -1971.73, -358.639, -71.875 ); + ent.v["angles"] = ( 359.817, 115.005, -0.101827 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -2257.32, -421.283, -71.875 ); + ent.v["angles"] = ( 359.821, 72.0047, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -2123.45, 164.139, -66.0718 ); + ent.v["angles"] = ( 358, 88, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -1009.56, 740.799, -61.5655 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 68.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_sprinkler_drip_physics" ); + ent.v["origin"] = ( 638.996, 1767.82, -36.7845 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 282.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_sprinkler_drip_physics" ); + ent.v["origin"] = ( -1220.27, 1714.29, 128.46 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_neon_open_sign" ); + ent.v["origin"] = ( -1439.33, 2217.11, 112.888 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 320.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign_glow_yellowish" ); + ent.v["origin"] = ( -985.482, 2298.16, 144.153 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 218.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign_glow_yellowish" ); + ent.v["origin"] = ( -1529.56, 1592.28, 144.013 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 69.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign_glow_yellowish" ); + ent.v["origin"] = ( 1448.06, 419.174, 140.541 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 96.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign_glow_yellowish" ); + ent.v["origin"] = ( 1497.66, 1236.43, 140.07 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign_glow" ); + ent.v["origin"] = ( 1616.52, 2169.05, 130.338 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 131.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign_glow" ); + ent.v["origin"] = ( 1035, 2735.99, 131.535 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 330.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_hand_dryer_glow" ); + ent.v["origin"] = ( 1274.88, 2323.22, 80.9101 ); + ent.v["angles"] = ( 330, 52, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_hand_dryer_glow" ); + ent.v["origin"] = ( 1299.92, 2302.92, 80.9368 ); + ent.v["angles"] = ( 330, 52, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_hand_dryer_glow" ); + ent.v["origin"] = ( 1528.01, 2119.58, 81.379 ); + ent.v["angles"] = ( 330, 52, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_hand_dryer_glow" ); + ent.v["origin"] = ( 1502.97, 2139.88, 81.3522 ); + ent.v["angles"] = ( 330, 52, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_bathroom_monitor_glow" ); + ent.v["origin"] = ( 1535.31, 2552.02, 96.9927 ); + ent.v["angles"] = ( 348, 232, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_bathroom_monitor_glow" ); + ent.v["origin"] = ( 1591.47, 2506.38, 96.4801 ); + ent.v["angles"] = ( 348, 232, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_bathroom_monitor_glow" ); + ent.v["origin"] = ( 1647.33, 2461.11, 96.3226 ); + ent.v["angles"] = ( 348, 232, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_bathroom_monitor_glow" ); + ent.v["origin"] = ( 1703.45, 2415.78, 96.6997 ); + ent.v["angles"] = ( 348, 232, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_bathroom_monitor_glow" ); + ent.v["origin"] = ( 1759.38, 2370.45, 96.5913 ); + ent.v["angles"] = ( 348, 232, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( 1518.02, 2384.72, 124.864 ); + ent.v["angles"] = ( 40, 94, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( 1541.95, 2366.98, 124.806 ); + ent.v["angles"] = ( 33.5876, 50.8703, -6.19034 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( 1562.74, 2348.43, 125.055 ); + ent.v["angles"] = ( 31.7214, 11.4415, -3.24704 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( 2260.15, 1627.25, 24 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 118.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( 2076.11, 1482.05, 24 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 97.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( 1942.86, 1457.43, 24 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 187.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( 1881.36, 1819.78, 24 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 132.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( -1485.69, 1646.44, 166.227 ); + ent.v["angles"] = ( 86.7275, 153.841, 176.177 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( -1313.56, 1702.64, 142.449 ); + ent.v["angles"] = ( 86.7274, 153.841, -176.823 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( -1601.79, 1701.06, 180.42 ); + ent.v["angles"] = ( 86.7274, 153.842, 179.177 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( -1467.81, 1933.32, 179.5 ); + ent.v["angles"] = ( 86.7274, 153.841, -172.823 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( -1362.45, 1866.78, 164.32 ); + ent.v["angles"] = ( 88.6878, 164.707, -161.035 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( -1051.48, 2042.75, 142.222 ); + ent.v["angles"] = ( 86.7274, 153.841, -160.823 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( -1227.57, 2041.63, 167.312 ); + ent.v["angles"] = ( 86.7274, 153.841, -164.823 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( -1334.29, 2108.83, 180.264 ); + ent.v["angles"] = ( 86.7274, 153.841, -163.823 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( -1155.85, 2296.8, 180.727 ); + ent.v["angles"] = ( 86.9256, 136.057, -177.581 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( -1065.66, 2206.19, 165.435 ); + ent.v["angles"] = ( 89.0626, 305.69, -7.95183 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( -1204.97, 2316.67, 157.531 ); + ent.v["angles"] = ( 20.4373, 280.11, -4.93528 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( -1188.33, 2331.68, 157.328 ); + ent.v["angles"] = ( 28.4413, 309.469, -4.11697 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( -1172.66, 2345.06, 157.79 ); + ent.v["angles"] = ( 25.8376, 342.076, 5.31963 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( -1594.59, 1808.22, 157.955 ); + ent.v["angles"] = ( 23.3245, 9.46662, 9.60153 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( -1614.91, 1770.33, 157.684 ); + ent.v["angles"] = ( 20.6662, 293.305, -3.8135 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_track_light" ); + ent.v["origin"] = ( -1604.43, 1789.55, 156.921 ); + ent.v["angles"] = ( 28.4412, 319.469, -4.11695 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed" ); + ent.v["origin"] = ( 1186.45, 2751.39, 136.945 ); + ent.v["angles"] = ( 86.7387, 62.9516, -166.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed" ); + ent.v["origin"] = ( 1384.88, 2591.56, 138.375 ); + ent.v["angles"] = ( 88.6042, 82.4164, -147.099 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed" ); + ent.v["origin"] = ( 1586.41, 2429.23, 139.375 ); + ent.v["angles"] = ( 88.8774, 187.046, -42.4822 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed" ); + ent.v["origin"] = ( 1465.85, 2266.87, 136.375 ); + ent.v["angles"] = ( 89.0517, 199.162, -32.3586 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed" ); + ent.v["origin"] = ( 1359.8, 2514.99, 136.375 ); + ent.v["angles"] = ( 89.0517, 199.162, -32.3586 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed" ); + ent.v["origin"] = ( 1258.69, 2601.13, 138.375 ); + ent.v["angles"] = ( 89.0517, 199.162, -32.3586 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed" ); + ent.v["origin"] = ( 1093.41, 2676.11, 136.775 ); + ent.v["angles"] = ( 89.0516, 199.162, 58.6408 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( 1151.07, 2615.28, 136.775 ); + ent.v["angles"] = ( 89.0516, 199.162, 58.6408 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); + ent.v["origin"] = ( 1391.95, 2415.95, 137.575 ); + ent.v["angles"] = ( 89.0516, 199.162, 58.6408 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_sprinkler_drip_physics" ); + ent.v["origin"] = ( 1525.74, 2382.47, 49.6964 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_sprinkler_drip_physics" ); + ent.v["origin"] = ( 1696.66, 2408.8, 45.3473 ); + ent.v["angles"] = ( 89, 180, -57 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -2051.52, 1062.76, 24 ); + ent.v["angles"] = ( 359.567, 71.0595, -0.508649 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); + ent.v["origin"] = ( 1598.24, -28.9399, 0.125 ); + ent.v["angles"] = ( 341.589, 125.471, 108.652 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_concert_sun" ); + ent.v["origin"] = ( -123326, 16214, 24084 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1401.48, 518.774, 157.875 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1401.22, 654.584, 157.175 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 1158.39, 1969.04, 166.428 ); + ent.v["angles"] = ( 90, 0, 49 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 1052.3, 2081.28, 166.382 ); + ent.v["angles"] = ( 90, 0, 43 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 933.055, 2183.92, 166.375 ); + ent.v["angles"] = ( 90, 0, 36 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 1026.63, 2313.69, 178.071 ); + ent.v["angles"] = ( 90, 0, 36 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 1160.05, 2200.94, 177.45 ); + ent.v["angles"] = ( 90, 0, 44 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 1282.81, 2072.3, 178.445 ); + ent.v["angles"] = ( 90, 0, 47 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 594.147, 2380.49, 165.473 ); + ent.v["angles"] = ( 90, 180, -157 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 695.924, 2511.93, 177.562 ); + ent.v["angles"] = ( 90, 180, -157 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ray_sun_md_spread_1s" ); + ent.v["origin"] = ( 631.339, 2367.65, 27 ); + ent.v["angles"] = ( 328.934, 168.707, -77.4483 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ray_sun_md_1s" ); + ent.v["origin"] = ( 598.337, 2351.86, 49 ); + ent.v["angles"] = ( 329.859, 182.49, -91.6652 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); + ent.v["origin"] = ( 830.122, 2224.34, -29 ); + ent.v["angles"] = ( 343.195, 134.207, 100.062 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ray_sun_md_short_1s" ); + ent.v["origin"] = ( 549.608, 2323.99, 29 ); + ent.v["angles"] = ( 327.281, 180.329, -83.6047 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ray_sun_md_wide_1s" ); + ent.v["origin"] = ( 2039.82, 1198.2, 33.125 ); + ent.v["angles"] = ( 335.277, 157.123, -55.0407 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); + ent.v["origin"] = ( 1715.98, 77.9118, -18.875 ); + ent.v["angles"] = ( 337.834, 151.778, 136.172 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 394.151, 201.36, 114.81 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 396.866, 108.737, 114.626 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 266.427, 108.836, 114.695 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 266.979, 201.657, 114.163 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ray_sun_md_short_1s" ); + ent.v["origin"] = ( 23.5171, 1029.3, -57 ); + ent.v["angles"] = ( 341.776, 185.65, -90.7827 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 8.75947, 109.346, 114.496 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 139.199, 109.247, 114.127 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 9.31147, 202.167, 113.964 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 136.484, 201.87, 114.311 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -366.449, 12.2591, 113.936 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -490.844, 11.6303, 114.457 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -490.519, -85.3038, 114.478 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -367.962, -85.0923, 114.459 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); + ent.v["origin"] = ( -701.47, 948.397, -118 ); + ent.v["angles"] = ( 330.435, 162.335, -80.0646 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); + ent.v["origin"] = ( -666.823, 945.4, -38 ); + ent.v["angles"] = ( 330.435, 162.335, -107.065 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); + ent.v["origin"] = ( -1296.1, 1434.01, -94 ); + ent.v["angles"] = ( 330.435, 162.335, 90.9353 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( -1668.91, 1468.81, 81 ); + ent.v["angles"] = ( 6.76034, 30.1075, 1.82019 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( -1005.7, 505.867, -39 ); + ent.v["angles"] = ( 359.536, 36.0461, -0.491171 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_linger_lit" ); + ent.v["origin"] = ( -967.662, 530.119, -37.0119 ); + ent.v["angles"] = ( 1.93877, 151.124, 3.67815 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); + ent.v["origin"] = ( -692.796, 478.937, -123.564 ); + ent.v["angles"] = ( 338.905, 169.305, 83.6134 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ray_sun_md_wide_1s" ); + ent.v["origin"] = ( -533.778, 236.463, -113.875 ); + ent.v["angles"] = ( 326.062, 175.535, 29.4534 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_dust_motes_xsm_short" ); + ent.v["origin"] = ( -698.578, 244.436, -36.9706 ); + ent.v["angles"] = ( 306.462, 170.025, 18.105 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_dust_motes_xsm_short" ); + ent.v["origin"] = ( -411.823, 423.772, 53.3709 ); + ent.v["angles"] = ( 329.795, 165.243, 19.3202 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ray_sun_md_spread_1s" ); + ent.v["origin"] = ( -381.716, 439.186, 0 ); + ent.v["angles"] = ( 330.346, 159.396, -123.487 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ray_sun_md_spread_1s" ); + ent.v["origin"] = ( -398.133, 374.117, -3.04389 ); + ent.v["angles"] = ( 328.633, 154.645, -135.435 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ray_sun_md_short_1s" ); + ent.v["origin"] = ( -438.938, 478.051, 60.8636 ); + ent.v["angles"] = ( 331.363, 166.986, -126.031 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_smk_field_md" ); + ent.v["origin"] = ( 61.6318, 2580.51, 76 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_smk_field_md" ); + ent.v["origin"] = ( -481.2, 2496.29, 81 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_smk_field_md" ); + ent.v["origin"] = ( 1046.07, 1905.4, 54 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 103.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_linger_lit" ); + ent.v["origin"] = ( -412.616, 2536.8, 44 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 78.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( -1201.6, -286.67, -25.875 ); + ent.v["angles"] = ( 355.892, 140.796, 1.67287 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( -1636.01, -193.472, 9.125 ); + ent.v["angles"] = ( 358.206, 96.7923, 1.05661 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); + ent.v["origin"] = ( -2149.42, 508.981, 1.47507 ); + ent.v["angles"] = ( 338.088, 160.576, 86.975 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); + ent.v["origin"] = ( -2246.31, 538.827, -75.4825 ); + ent.v["angles"] = ( 336.091, 160.691, 85.9302 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_dust_motes_xsm_short" ); + ent.v["origin"] = ( -205.55, 672.252, 60 ); + ent.v["angles"] = ( 314.884, 310.617, 143.299 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_dust_motes_xsm_short" ); + ent.v["origin"] = ( -325.491, 380.432, 19.125 ); + ent.v["angles"] = ( 308.258, 132.621, 21.6228 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( -64.8068, 1131.3, -54.0058 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 15.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_smk_field_md" ); + ent.v["origin"] = ( 195.287, 1558.04, -58 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_smk_field_md" ); + ent.v["origin"] = ( -285.1, 1529, -58 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_smk_field_md" ); + ent.v["origin"] = ( -765.279, 1221.25, -49 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_smk_field_md" ); + ent.v["origin"] = ( -311.368, -460.534, -38.9531 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); + ent.v["origin"] = ( -892.485, -325.185, -152.805 ); + ent.v["angles"] = ( 329.267, 170.449, 103.906 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( 174.972, 367.875, -40.2769 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 97.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_light_ray_sun_md_wide_1s" ); + ent.v["origin"] = ( 1006.87, 2178.07, 44 ); + ent.v["angles"] = ( 330.877, 171.735, 124.957 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( 992.676, 2055.13, 79 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 70.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_linger_lit" ); + ent.v["origin"] = ( 1041.64, 2091.38, 57 ); + ent.v["angles"] = ( 3.89792, 91.0306, 0.90132 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( 1468.05, 24.2235, 57.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 104.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_linger_lit" ); + ent.v["origin"] = ( 1448.46, -4.94705, 65.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 107.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_linger_lit" ); + ent.v["origin"] = ( 1361.27, 147.256, 33.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 107.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( 1225.76, 137.601, 54.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 125.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( 293.812, -647.991, -25.9943 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 112.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_fountain_middle" ); + ent.v["origin"] = ( 2561.43, 2105.29, 9 ); + ent.v["angles"] = ( 270, 0, -50 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -10; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_fountain_sides" ); + ent.v["origin"] = ( 2345.44, 2327.04, 10.5205 ); + ent.v["angles"] = ( 270, 1.68468, -21.6846 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_fountain_sides" ); + ent.v["origin"] = ( 2619, 1791.64, 11.6013 ); + ent.v["angles"] = ( 270, 0, -67 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( 404.329, -7.8116, -64.3441 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 133.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -518.291, 1059.17, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 97.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -232.748, 1050.48, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 97.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_fountain_middle" ); + ent.v["origin"] = ( 2470.7, 2231.16, 11.3533 ); + ent.v["angles"] = ( 270, 0, -50 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -6; + ent = maps\mp\_utility::createoneshoteffect( "fx_concert_fountain_middle" ); + ent.v["origin"] = ( 2612.39, 1956.03, 11.2229 ); + ent.v["angles"] = ( 270, 0, -50 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -6; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_fireplace_md2" ); + ent.v["origin"] = ( 1678.51, 169.766, 67.1178 ); + ent.v["angles"] = ( 271, 180, 81 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1761.27, 1215.55, 159.247 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 276.5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1808.53, 1216.58, 159.25 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 276.5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1856.37, 1216.15, 159.248 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 276.5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -963.89, 1681.53, 85.5611 ); + ent.v["angles"] = ( 72.0012, 141.169, 177.161 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign_glow_yellowish" ); + ent.v["origin"] = ( 191.353, 685.718, 1.3389 ); + ent.v["angles"] = ( 317.37, 59.8108, -5.50809 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign_glow_yellowish" ); + ent.v["origin"] = ( -37.5779, 574.312, 1.07672 ); + ent.v["angles"] = ( 340.454, 244.649, 7.83269 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -2380.42, 882.398, -37.6809 ); + ent.v["angles"] = ( 351.32, 114.302, -1.71628 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_ground_windy" ); + ent.v["origin"] = ( -2667.92, 11.7197, -95.359 ); + ent.v["angles"] = ( 355.534, 86.1613, 2.57025 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1158.77, 2875.69, 139.875 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1210.7, 2832.73, 139.875 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1263.23, 2790.23, 139.875 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1315.51, 2747.73, 139.875 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1368.9, 2706.13, 139.875 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1423.78, 2664.28, 138.875 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_wrm" ); + ent.v["origin"] = ( 1476.78, 2622.88, 138.875 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); + ent.v["origin"] = ( 125.307, 590.666, -70.1511 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 137.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_vend_machine_sm_orange" ); + ent.v["origin"] = ( -1067.43, 2379.17, 73.2374 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 306.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; +} diff --git a/MP/Maps/Encore/maps/mp/mp_concert.gsc b/MP/Maps/Encore/maps/mp/mp_concert.gsc new file mode 100644 index 0000000..e81312d --- /dev/null +++ b/MP/Maps/Encore/maps/mp/mp_concert.gsc @@ -0,0 +1,123 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_concert_fx; +#include maps\mp\_load; +#include maps\mp\mp_concert_amb; +#include maps\mp\_compass; +#include maps\mp\gametypes\_spawning; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + level.overrideplayerdeathwatchtimer = ::leveloverridetime; + level.useintermissionpointsonwavespawn = ::useintermissionpointsonwavespawn; + maps\mp\mp_concert_fx::main(); + maps\mp\_load::main(); + maps\mp\mp_concert_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_concert" ); + setdvar( "compassmaxrange", "2100" ); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + maps\mp\gametypes\_spawning::level_use_unified_spawning( 1 ); + level.remotemotarviewup = 18; + level thread water_trigger_init(); +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2300", reset_dvars ); +} + +water_trigger_init() +{ + wait 3; + triggers = getentarray( "trigger_hurt", "classname" ); + + foreach ( trigger in triggers ) + { + if ( trigger.origin[2] > level.mapcenter[2] ) + continue; + + trigger thread water_trigger_think(); + } + + triggers = getentarray( "water_killbrush", "targetname" ); + + foreach ( trigger in triggers ) + trigger thread player_splash_think(); +} + +player_splash_think() +{ + for (;;) + { + self waittill( "trigger", entity ); + + if ( isplayer( entity ) && isalive( entity ) ) + self thread trigger_thread( entity, ::player_water_fx ); + } +} + +player_water_fx( player, endon_condition ) +{ + maxs = self.origin + self getmaxs(); + + if ( maxs[2] > 60 ) + maxs += vectorscale( ( 0, 0, 1 ), 10.0 ); + + origin = ( player.origin[0], player.origin[1], maxs[2] ); + playfx( level._effect["water_splash_sm"], origin ); +} + +water_trigger_think() +{ + for (;;) + { + self waittill( "trigger", entity ); + + if ( isplayer( entity ) ) + { + entity playsound( "mpl_splash_death" ); + playfx( level._effect["water_splash"], entity.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + } + } +} + +leveloverridetime( defaulttime ) +{ + if ( self isinwater() ) + return 0.4; + + return defaulttime; +} + +useintermissionpointsonwavespawn() +{ + return self isinwater(); +} + +isinwater() +{ + triggers = getentarray( "trigger_hurt", "classname" ); + + foreach ( trigger in triggers ) + { + if ( trigger.origin[2] > level.mapcenter[2] ) + continue; + + if ( self istouching( trigger ) ) + return true; + } + + return false; +} diff --git a/MP/Maps/Encore/maps/mp/mp_concert_amb.gsc b/MP/Maps/Encore/maps/mp/mp_concert_amb.gsc new file mode 100644 index 0000000..e4162d8 --- /dev/null +++ b/MP/Maps/Encore/maps/mp/mp_concert_amb.gsc @@ -0,0 +1,27 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; +#include common_scripts\utility; + +main() +{ + level thread instruments_init(); +} + +instruments_init() +{ + inst_trigs = getentarray( "snd_instrument", "targetname" ); + array_thread( inst_trigs, ::play_instrument ); +} + +play_instrument() +{ + while ( true ) + { + self waittill( "damage" ); + + self playsound( self.script_noteworthy ); + wait 0.1; + } +} diff --git a/MP/Maps/Encore/maps/mp/mp_concert_fx.gsc b/MP/Maps/Encore/maps/mp/mp_concert_fx.gsc new file mode 100644 index 0000000..740ff10 --- /dev/null +++ b/MP/Maps/Encore/maps/mp/mp_concert_fx.gsc @@ -0,0 +1,99 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_concert_fx; + +main() +{ + precache_fxanim_props(); + precache_fxanim_props_dlc(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_concert_fx::main(); +} + +precache_scripted_fx() +{ + level._effect["water_splash"] = loadfx( "bio/player/fx_player_water_splash_mp" ); +} + +precache_createfx_fx() +{ + level._effect["fx_lf_mp_concert_sun"] = loadfx( "lens_flares/fx_lf_mp_concert_sun" ); + level._effect["fx_pigeon_panic_flight_med"] = loadfx( "bio/animals/fx_pigeon_panic_flight_med" ); + level._effect["fx_leaves_ground_wind"] = loadfx( "foliage/fx_leaves_ground_wind" ); + level._effect["fx_sand_gust_ground_sm"] = loadfx( "dirt/fx_sand_gust_ground_sm" ); + level._effect["fx_sand_gust_ground_md_xslw"] = loadfx( "dirt/fx_sand_gust_ground_md_xslw" ); + level._effect["fx_concert_leaves_falling_red"] = loadfx( "foliage/fx_concert_leaves_falling_red" ); + level._effect["fx_concert_leaves_falling_orange"] = loadfx( "foliage/fx_concert_leaves_falling_orange" ); + level._effect["fx_leaves_ground_windy"] = loadfx( "foliage/fx_leaves_ground_windy" ); + level._effect["fx_patio_flame_lamp_heat"] = loadfx( "props/fx_patio_flame_lamp_heat" ); + level._effect["fx_water_sprinkler_drip_physics"] = loadfx( "water/fx_water_sprinkler_drip_physics" ); + level._effect["fx_fire_fireplace_md2"] = loadfx( "fire/fx_fire_fireplace_md2" ); + level._effect["fx_smk_linger_lit"] = loadfx( "smoke/fx_concert_smk_linger_lit" ); + level._effect["fx_concert_smk_field_md"] = loadfx( "smoke/fx_concert_smk_field_md" ); + level._effect["fx_light_floodlight_sqr_cool_xlg"] = loadfx( "light/fx_light_floodlight_sqr_cool_xlg" ); + level._effect["fx_light_buoy_red_blink"] = loadfx( "light/fx_light_buoy_red_blink" ); + level._effect["fx_light_floodlight_stadium_lg"] = loadfx( "light/fx_light_floodlight_stadium_lg" ); + level._effect["fx_light_stagelight_wht"] = loadfx( "light/fx_light_stagelight_wht" ); + level._effect["fx_concert_can_light_blue"] = loadfx( "light/fx_concert_can_light_blue" ); + level._effect["fx_concert_can_light_blue_static"] = loadfx( "light/fx_concert_can_light_blue_static" ); + level._effect["fx_concert_can_light_purple"] = loadfx( "light/fx_concert_can_light_purple" ); + level._effect["fx_concert_can_light_red"] = loadfx( "light/fx_concert_can_light_red" ); + level._effect["fx_concert_can_light_red_static"] = loadfx( "light/fx_concert_can_light_red_static" ); + level._effect["fx_light_spotlight_md_cool"] = loadfx( "light/fx_light_spotlight_md_cool" ); + level._effect["fx_light_baracade_yellow"] = loadfx( "light/fx_light_baracade_yellow" ); + level._effect["fx_light_fluorescent_overhead_bright"] = loadfx( "light/fx_light_fluorescent_overhead_bright" ); + level._effect["fx_light_flourescent_ceiling_panel_2"] = loadfx( "light/fx_light_flourescent_ceiling_panel_2" ); + level._effect["fx_track_light"] = loadfx( "light/fx_track_light" ); + level._effect["fx_light_button_yellow_on"] = loadfx( "light/fx_light_button_yellow_on" ); + level._effect["fx_light_vend_machine_sm_orange"] = loadfx( "light/fx_light_vend_machine_sm_orange" ); + level._effect["fx_light_vend_machine_sm_blue"] = loadfx( "light/fx_light_vend_machine_sm_blue" ); + level._effect["fx_concert_bathroom_monitor_glow"] = loadfx( "light/fx_concert_bathroom_monitor_glow" ); + level._effect["fx_concert_bath_hygiene_box_glow"] = loadfx( "light/fx_concert_bath_hygiene_box_glow" ); + level._effect["fx_concert_hand_dryer_glow"] = loadfx( "light/fx_concert_hand_dryer_glow" ); + level._effect["fx_light_com_utility_cool"] = loadfx( "light/fx_light_com_utility_cool" ); + level._effect["fx_light_exit_sign_glow"] = loadfx( "light/fx_light_exit_sign_glow" ); + level._effect["fx_light_recessed_cool"] = loadfx( "light/fx_light_recessed_cool" ); + level._effect["fx_light_recessed_wrm"] = loadfx( "light/fx_light_recessed_wrm" ); + level._effect["fx_light_hanging_modern"] = loadfx( "light/fx_light_hanging_modern" ); + level._effect["fx_light_neon_open_sign"] = loadfx( "light/fx_light_neon_open_sign" ); + level._effect["fx_concert_light_ceiling_recessed_short"] = loadfx( "light/fx_concert_light_ceiling_recessed_short" ); + level._effect["fx_concert_light_ceiling_recessed"] = loadfx( "light/fx_concert_light_ceiling_recessed" ); + level._effect["fx_light_exit_sign_glow_yellowish"] = loadfx( "light/fx_light_exit_sign_glow_yellowish" ); + level._effect["fx_light_flour_glow_v_shape_cool"] = loadfx( "light/fx_light_flour_glow_v_shape_cool" ); + level._effect["fx_light_flour_glow_v_shape_cool_sm"] = loadfx( "light/fx_light_flour_glow_v_shape_cool_sm" ); + level._effect["fx_concert_light_ray_sun_lg_spread_1s"] = loadfx( "light/fx_concert_light_ray_sun_lg_spread_1s" ); + level._effect["fx_concert_light_ray_sun_md_1s"] = loadfx( "light/fx_concert_light_ray_sun_md_1s" ); + level._effect["fx_concert_light_ray_sun_md_short_1s"] = loadfx( "light/fx_concert_light_ray_sun_md_short_1s" ); + level._effect["fx_concert_light_ray_sun_md_spread_1s"] = loadfx( "light/fx_concert_light_ray_sun_md_spread_1s" ); + level._effect["fx_concert_light_ray_sun_md_wide_1s"] = loadfx( "light/fx_concert_light_ray_sun_md_wide_1s" ); + level._effect["fx_concert_light_ray_sun_window_1s"] = loadfx( "light/fx_concert_light_ray_sun_window_1s" ); + level._effect["fx_light_dust_motes_xsm_short"] = loadfx( "light/fx_concert_dust_motes_xsm_short" ); + level._effect["fx_light_dust_motes_sm"] = loadfx( "light/fx_light_dust_motes_sm" ); + level._effect["fx_dust_motes_blowing_sm"] = loadfx( "debris/fx_dust_motes_blowing_sm" ); + level._effect["fx_concert_fountain_sides"] = loadfx( "water/fx_concert_fountain_sides" ); + level._effect["fx_concert_fountain_middle"] = loadfx( "water/fx_concert_fountain_middle" ); + level._effect["fx_insects_butterfly_flutter_radial2"] = loadfx( "bio/insects/fx_insects_butterfly_flutter_radial2" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["seagull_circle_01"] = %fxanim_gp_seagull_circle_01_anim; + level.scr_anim["fxanim_props"]["seagull_circle_02"] = %fxanim_gp_seagull_circle_02_anim; + level.scr_anim["fxanim_props"]["seagull_circle_03"] = %fxanim_gp_seagull_circle_03_anim; + level.scr_anim["fxanim_props"]["london_eye"] = %fxanim_mp_con_london_eye_anim; +} + +#using_animtree("fxanim_props_dlc"); + +precache_fxanim_props_dlc() +{ + level.scr_anim["fxanim_props_dlc"]["wires_stage_rear"] = %fxanim_mp_con_wires_stage_rear_anim; + level.scr_anim["fxanim_props_dlc"]["wires_stage_scaffold"] = %fxanim_mp_con_wires_stage_scaffold_anim; + level.scr_anim["fxanim_props_dlc"]["wires_seats_scaffold"] = %fxanim_mp_con_wires_seats_scaffold_anim; + level.scr_anim["fxanim_props_dlc"]["river_boats"] = %fxanim_mp_con_boat_link_anim; + level.scr_anim["fxanim_props_dlc"]["wires_stage_right"] = %fxanim_mp_con_wires_stage_right_anim; +} diff --git a/MP/Maps/Express/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Express/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Express/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Express/aitype/enemy_dog_mp.gsc b/MP/Maps/Express/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Express/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Express/character/character_mp_german_shepherd.gsc b/MP/Maps/Express/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Express/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Express/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Express/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Express/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Express/clientscripts/mp/createfx/mp_express_fx.csc b/MP/Maps/Express/clientscripts/mp/createfx/mp_express_fx.csc new file mode 100644 index 0000000..3b9be39 --- /dev/null +++ b/MP/Maps/Express/clientscripts/mp/createfx/mp_express_fx.csc @@ -0,0 +1,1834 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 904.187, -2120.3, -35.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 132.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 672.285, -213.159, 71.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 653.108, 199.932, 71.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 225.28, 50.8324, 37 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 85.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 240.648, -293.811, 46.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 105.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 688.709, -925.867, 35 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 118.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 585.66, -1065.81, 51 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 118.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1033.78, -1877.63, 36.0076 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 118.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1489.26, -1249.97, -51.3096 ); + ent.v["angles"] = ( 338, 224, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1737.87, -915.959, -78.2687 ); + ent.v["angles"] = ( 352.104, 243.1, 1.97313 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1548.32, -407.51, -38 ); + ent.v["angles"] = ( 354.932, 89.9463, 1.83965 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1539.08, 431.675, -54 ); + ent.v["angles"] = ( 352.685, 260.482, -2.7063 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1432.99, 1304.17, -7.92948 ); + ent.v["angles"] = ( 351.296, 139.321, -0.649479 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1741.47, 931.778, -74.1646 ); + ent.v["angles"] = ( 354.651, 117.059, -0.668359 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 730.237, 1397.04, 44 ); + ent.v["angles"] = ( 0.841039, 53.9364, 0.470194 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 986.61, 1741.43, 44 ); + ent.v["angles"] = ( 0.841039, 53.9364, 0.470194 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1235.97, 2016.5, -0.999996 ); + ent.v["angles"] = ( 0.841039, 53.9364, 0.470194 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1856.5, 302.507, -64 ); + ent.v["angles"] = ( 0.434334, 87.9362, 0.860104 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1855, -555.538, -66 ); + ent.v["angles"] = ( 0.434334, 87.9362, 0.860104 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 2095.27, -333.514, -68 ); + ent.v["angles"] = ( 0.434334, 87.9362, 0.860104 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 2081.85, 493.494, -65 ); + ent.v["angles"] = ( 359.611, 270.936, -0.881651 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 77.2361, -1468.28, 179.125 ); + ent.v["angles"] = ( 0.948312, 34.9346, 0.170738 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1074.33, -92.7252, 7.125 ); + ent.v["angles"] = ( 356.611, 270.982, -0.883175 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1131.8, 367.006, 3.125 ); + ent.v["angles"] = ( 0.860073, 357.93, -0.434595 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 104.491, 1461.15, 183.125 ); + ent.v["angles"] = ( 0.513489, 326.93, -0.815337 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 475.278, 1206.18, 178.125 ); + ent.v["angles"] = ( 0.499212, 325.93, 0.175851 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_express" ); + ent.v["origin"] = ( 371.122, 146.88, -21.875 ); + ent.v["angles"] = ( 318.06, 174.658, -176.258 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 2609.36, -338.302, -269.108 ); + ent.v["angles"] = ( 323.854, 177.669, -1.62255 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -128.196, 1616.93, 189.125 ); + ent.v["angles"] = ( 23.16, 147.24, 0.592267 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 121.642, -1308.79, 190.125 ); + ent.v["angles"] = ( 0, 36, -37 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 990.407, -2000.66, -56.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 130.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 377.47, -99.5366, 29.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 85.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -98.5626, -1599.25, 181.125 ); + ent.v["angles"] = ( 18, 215, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 769.788, -1747.88, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 216.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 1073.37, -2096.74, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 225.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 502.51, -1356.86, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 210.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1003; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 273.601, -936.508, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 205.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1004; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 92.7792, -491.237, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 199.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 17.9442, -35.5184, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1006; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 84.1599, 435.962, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 164.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1007; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 245.547, 869.105, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 157.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1008; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 456.781, 1276.61, -58.5 ); + ent.v["angles"] = ( 0, 151, -1 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1009; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 717.311, 1677.81, -57.7634 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1010; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 1037.08, 2051.59, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1011; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 1087.85, -2111.04, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 791.486, -1771.69, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 307.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 517.452, -1381.03, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 299.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2003; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 287.219, -957.808, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 294.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2004; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 119.349, -535.167, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 287.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2005; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 18.978, -56.9463, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 274.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2006; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 72.5543, 413.993, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 256.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2007; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 232.631, 844.638, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 246.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2008; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 446.137, 1250.02, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 243.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2009; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 700.319, 1647.44, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 240.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2010; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 1022.76, 2035.7, -58.5 ); + ent.v["angles"] = ( 359, 224.996, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2011; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1710.93, 684.362, 306.361 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1710.24, 864.104, 298.348 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2030.79, 685.667, 307.942 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2030.28, 866.089, 296.456 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2349.18, 866.885, 297.632 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2667.47, 864.907, 298.658 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2989.25, 865.028, 297.195 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 3308.27, 866.458, 283.293 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1709.26, -866.213, 298.409 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1709.27, -685.866, 308.778 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2028.73, -867.224, 299.535 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2029.89, -685.353, 309.661 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2348.3, -865.907, 299.481 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2669.24, -865.818, 299.669 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2987.5, -866.468, 299.32 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 3310.8, -865.273, 285.616 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1398.88, -110.09, 305.238 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1399.77, 110.015, 306.435 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1400.2, 330.367, 305.939 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1398.17, -331.185, 306.176 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1399.7, -514.48, 304.041 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1398.77, -686.186, 300.364 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1398.49, -864.665, 289.739 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1399.87, 513.153, 306.682 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1400.7, 685.682, 297.438 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1398.36, 864.426, 290.249 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2989.6, 330.444, 313 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2989.74, 110.677, 313 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2989.3, -114.313, 314 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2988.87, -332.26, 313 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 3313.88, -515.219, 296.624 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 3312.54, -330.643, 298.118 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 3314.78, -111.315, 298.429 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 3308.06, 111.38, 295.528 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 3309.16, 332.984, 298.53 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 3304.14, 517.499, 297.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 640.993, 238.484, 184 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 504.093, 238.665, 184 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 776.463, 238.78, 184 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 913.004, 237.345, 184.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 1048.33, 238.616, 184.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 1184.4, 238.699, 186 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 227.961, -261.015, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 47.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 481.22, 1387.52, -13.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 50.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 957.548, 1968.64, -56.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 50.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 21.4283, 38.2671, -31.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 83.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 97.0849, -534.371, -14.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 102.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 258.013, -1227.7, 3 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 114.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1179, -2344.59, -20.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 137.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -17.3512, -1478.04, 26 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 112.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -390.35, 456.912, 27 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 82.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -434.381, 1013.16, 31 ); + ent.v["angles"] = ( 0, 76, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -419.201, -1136.47, 5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 103.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 655.635, -1685.19, -16.3986 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 137.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 707.182, -2201.65, 8.00002 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 127.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -3.71047, 1822.32, 35.9369 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 34.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 368.932, 1710.05, -22.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 49.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 81.0399, 701.163, -13.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 67.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 696.127, 1354.24, -10 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 29.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( -333.014, -1244.49, -38 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 107.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( -608.577, 771.195, -37 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 563.5, 2011.01, -22 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 49.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 518.991, 2232.65, -55.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 21.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 1000.55, -2782.06, -53 ); + ent.v["angles"] = ( 0, 89, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -1040.64, -231.569, 54.125 ); + ent.v["angles"] = ( 23.1981, 127.207, 9.65068 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 153.867, -1297.16, 188.125 ); + ent.v["angles"] = ( 0.75463, 245.254, 68.3993 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -1160.28, 289.832, 34.125 ); + ent.v["angles"] = ( 337.304, 71.365, -37.1935 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -1163.12, -434.502, 70.125 ); + ent.v["angles"] = ( 24.666, 231.513, 32.5726 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -1119.1, -301.723, 64.125 ); + ent.v["angles"] = ( 40.003, 176.672, 1.28912 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1127.08, -378.759, 5.125 ); + ent.v["angles"] = ( 0.643226, 356.938, -0.442156 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -1173.37, 423.165, 63.125 ); + ent.v["angles"] = ( 31.6849, 140.827, -26.2148 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -1162.68, -276.343, 52.125 ); + ent.v["angles"] = ( 37.3658, 239.257, 29.1336 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_fog_water" ); + ent.v["origin"] = ( -3604.39, -464.775, -312.279 ); + ent.v["angles"] = ( 358.161, 267.005, 0.152562 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_fog_water" ); + ent.v["origin"] = ( -3467.55, 2409.66, -240.302 ); + ent.v["angles"] = ( 358.367, 243.996, 0.859104 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_fog_water" ); + ent.v["origin"] = ( -4307.54, -3735.9, -493.182 ); + ent.v["angles"] = ( 358.39, 301.021, -0.902071 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -261.463, -1226.32, 65.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -253.027, -1041.17, 53.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 641.362, -101.817, 185.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 776.611, -103.612, 184.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 912.786, -102.691, 185.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 1048.72, -102.385, 185.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 1184.36, -103.566, 184.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( 290.308, -1437.65, 4.87629 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 30.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( 136.327, -1176.32, 4.643 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 30.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( 102.393, -1108.43, 4.21081 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 23.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -53.2016, -733.819, 4.13237 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 23.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -79.322, -663.618, 4.59664 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 14.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -175.213, -270.254, 4.7733 ); + ent.v["angles"] = ( 356, 14, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -184.92, -195.587, 4.24279 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -184.117, 211.009, 4.53329 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -175.937, 286.796, 4.5513 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 345.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -69.3966, 676.847, 4.16217 ); + ent.v["angles"] = ( 357, 345, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -45.5513, 749.242, 4.1686 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 337.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( 109.75, 1123.94, 4.30387 ); + ent.v["angles"] = ( 357, 337, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( 143.193, 1191.77, 4.00254 ); + ent.v["angles"] = ( 357.022, 329.991, 0.365935 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( 294.656, 1455.37, 4.98705 ); + ent.v["angles"] = ( 357.022, 329.991, 0.365935 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -300.573, -301.651, 4.94043 ); + ent.v["angles"] = ( 4, 194, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -203.825, -694.522, 4.52649 ); + ent.v["angles"] = ( 355, 194, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -171.709, -783.183, 4.14116 ); + ent.v["angles"] = ( 3.96161, 202.019, 0.557685 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -17.1667, -1156.99, 4.09987 ); + ent.v["angles"] = ( 0.951456, 202.989, 0.625416 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( 26.1881, -1241.24, 3.62246 ); + ent.v["angles"] = ( 356.869, 208.924, 0.791536 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -300.033, 319.534, 4.98442 ); + ent.v["angles"] = ( 358.346, 163.906, 2.77418 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -194.02, 709.725, 4.02974 ); + ent.v["angles"] = ( 358.346, 163.906, 2.77418 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -164.703, 798.41, 4.86106 ); + ent.v["angles"] = ( 358.346, 163.906, 2.77418 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -9.7507, 1172.74, 4.31705 ); + ent.v["angles"] = ( 358.696, 156.912, 2.95495 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( 32.116, 1255.5, 4.57541 ); + ent.v["angles"] = ( 358.905, 152.917, 3.03862 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 829.544, -1658.73, -6.99999 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 36.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 1138.93, -1988.61, -21.4837 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 34.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 744.385, 1521.01, -16 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 326.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1010; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust_side2" ); + ent.v["origin"] = ( 96.533, -325.943, -24.8184 ); + ent.v["angles"] = ( 344.927, 2.59774, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_express_train_dust_side2" ); + ent.v["origin"] = ( 72.3679, 59.1355, -18.7997 ); + ent.v["angles"] = ( 344.927, 2.59774, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1006; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 321.841, -335.237, 116.827 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 302.996, -418.976, 116.437 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 280.851, -426.961, 116.467 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 367.523, -321.819, 116.487 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 324.799, -480.676, 116.288 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 303.406, -487.594, 116.459 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 448.491, -592.578, 116.231 ); + ent.v["angles"] = ( 90, 0, -109 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 497.751, -714.566, 116.64 ); + ent.v["angles"] = ( 90, 0, -112 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 472.131, -654.851, 116.52 ); + ent.v["angles"] = ( 90, 180, 71 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 420.888, -512.917, 116.513 ); + ent.v["angles"] = ( 90, 180, 71 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 522.794, -772.595, 115.436 ); + ent.v["angles"] = ( 90, 356.424, -116.576 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 548.732, -830.549, 116.398 ); + ent.v["angles"] = ( 90, 0, -115 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 572.448, -881.352, 116.7 ); + ent.v["angles"] = ( 90, 0, -116 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 608.264, -956.985, 116.223 ); + ent.v["angles"] = ( 90, 0, -117 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 639.5, -1012.87, 115.526 ); + ent.v["angles"] = ( 90, 0, -118 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 673.834, -1072.71, 116.448 ); + ent.v["angles"] = ( 90, 0, -119 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 702.529, -1131.45, 116.528 ); + ent.v["angles"] = ( 90, 0, -120 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 729.194, -1191.58, 116.239 ); + ent.v["angles"] = ( 90, 0, -121 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 833.442, -1359.8, 116.487 ); + ent.v["angles"] = ( 90, 0, -121 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 869.018, -1410.07, 116.526 ); + ent.v["angles"] = ( 90, 0, -123 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 911.295, -1464.28, 116.699 ); + ent.v["angles"] = ( 90, 0, -124 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 951.238, -1516.28, 116.059 ); + ent.v["angles"] = ( 90, 354.289, -131.711 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 751.261, -1231.1, 115.826 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 683.737, -1273.96, 116.576 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 665.447, -1284.32, 116.446 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 793.754, -1303.05, 116.56 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 724.165, -1344.47, 116.62 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 707.857, -1356.69, 116.716 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 423.83, 509.915, 116.072 ); + ent.v["angles"] = ( 90, 180, 109 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 449.814, 588.752, 116.023 ); + ent.v["angles"] = ( 90, 0, -70 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 476.756, 648.723, 116.216 ); + ent.v["angles"] = ( 90, 180, 111 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 497.694, 711.005, 115.296 ); + ent.v["angles"] = ( 90, 0, -68 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 522.956, 770.785, 115.92 ); + ent.v["angles"] = ( 90, 180, 114 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 546.263, 829.552, 115.207 ); + ent.v["angles"] = ( 90, 0, -65 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 573.589, 879.456, 116.203 ); + ent.v["angles"] = ( 90, 0, -65 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 612.652, 954.341, 116.202 ); + ent.v["angles"] = ( 90, 0, -61 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 639.234, 1011.42, 115.917 ); + ent.v["angles"] = ( 90, 0, -64 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 669.696, 1071.27, 116.259 ); + ent.v["angles"] = ( 90, 0, -62 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 701.67, 1129.17, 115.208 ); + ent.v["angles"] = ( 90, 0, -62 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 733.587, 1191.12, 116.088 ); + ent.v["angles"] = ( 90, 0, -62 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 825.314, 1364.26, 115.917 ); + ent.v["angles"] = ( 90, 0, -58 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 864.208, 1414.96, 115.785 ); + ent.v["angles"] = ( 90, 0, -57 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 899.919, 1466.14, 115.487 ); + ent.v["angles"] = ( 90, 0, -54 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 941.677, 1519.63, 115.287 ); + ent.v["angles"] = ( 90, 180, 127 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 318.453, 330.175, 116.692 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 368.513, 320.402, 116.706 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 400.859, 390.454, 116.527 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 378.052, 399.519, 115.45 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 310.648, 420.936, 116.607 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 289.797, 428.453, 116.005 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 421.898, 446.089, 116.656 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 399.327, 454.697, 116.508 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 325.82, 481.623, 116.486 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 304.357, 486.917, 116.088 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 672.015, 1298.09, 115.205 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 690.486, 1289.09, 116.705 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 763.236, 1245.22, 116.495 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 803.491, 1319.2, 116.661 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 864.41, 1282.24, 115.779 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 732.189, 1364.03, 116.706 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 712.576, 1376.36, 115.208 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 403.536, -452.892, 116.743 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 426.259, -446.395, 116.495 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 384.944, -392.286, 116.7 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 404.758, -386.695, 116.711 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -901.354, -468.762, 91.2858 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -1008.32, -468.396, 90.9271 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -901.909, -259.425, 90.9863 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -1008.43, -258.058, 90.9379 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -848.715, -365.584, 120.117 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -953.693, -365.871, 119.957 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -1049.42, -370.366, 117.001 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -1008.01, 476.723, 91.9487 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -901.299, 476.522, 91.9177 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -1008.18, 265.401, 90.9992 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -900.81, 265.054, 91.8765 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -849.857, 368.743, 118.922 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -953.152, 368.135, 118.007 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -1056.79, 368.777, 118.924 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( 179.523, -1503.2, 4.35467 ); + ent.v["angles"] = ( 356.856, 209.925, 0.736721 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 504.787, -102.438, 184 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 102.171, 1339.63, 189.125 ); + ent.v["angles"] = ( 1.87872, 316.291, 64.0532 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 173.443, 1293.26, 188.125 ); + ent.v["angles"] = ( 18.1743, 135.86, -59.5429 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 931.368, 2582.1, -31 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 885.886, -2508.28, -58 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 685.596, -2336.12, -56.3496 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_express_sun1" ); + ent.v["origin"] = ( -193528, 3894.04, 95755.8 ); + ent.v["angles"] = ( 316.36, 196.247, 7.90639 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -282.609, -337.792, 38.2029 ); + ent.v["angles"] = ( 358.436, 255.798, 68.9546 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -276.036, 372.584, 45.2063 ); + ent.v["angles"] = ( 359.697, 75.08, -59.9623 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -121.294, 882.099, 48.2033 ); + ent.v["angles"] = ( 358.437, 255.798, 55.9545 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -124.927, -852.162, 50.2006 ); + ent.v["angles"] = ( 2.10251, 108.765, -52.2021 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( -599.577, 215.274, 175.16 ); + ent.v["angles"] = ( 360, 90, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( -643.794, 215.271, 177.81 ); + ent.v["angles"] = ( 360, 90, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( -1023.14, 186.754, 123.598 ); + ent.v["angles"] = ( 9, 270, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( -1067.38, 186.729, 119.984 ); + ent.v["angles"] = ( 9, 270, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -130.857, 1077.79, 20.3183 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 82.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( -1023.3, -186.739, 122.755 ); + ent.v["angles"] = ( 360, 90, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( -1063.64, -186.737, 121.896 ); + ent.v["angles"] = ( 360, 90, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1688.08, -865.547, -80.875 ); + ent.v["angles"] = ( 356.347, 80.4128, -1.85498 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1740.23, 844.492, -86.875 ); + ent.v["angles"] = ( 357.27, 270.333, 1.15472 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -1051.18, 205.888, 65.9191 ); + ent.v["angles"] = ( 1.14623, 178.3, -28.3207 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_slums" ); + ent.v["origin"] = ( -381.614, 889.597, 44 ); + ent.v["angles"] = ( 321, 155, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_slums" ); + ent.v["origin"] = ( -270.759, 1189.07, 12.125 ); + ent.v["angles"] = ( 321, 155, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_slums" ); + ent.v["origin"] = ( 209.25, 1816.83, 68 ); + ent.v["angles"] = ( 321.28, 140.864, 5.89672 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_slums" ); + ent.v["origin"] = ( -281.885, -932.34, 46 ); + ent.v["angles"] = ( 323.967, 186.381, -1.02081 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_slums" ); + ent.v["origin"] = ( -224.825, -1199.61, -4.1069 ); + ent.v["angles"] = ( 323.967, 186.381, -1.02081 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_slums" ); + ent.v["origin"] = ( 277.828, -1986.83, 105.651 ); + ent.v["angles"] = ( 323.967, 186.381, -1.02081 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 57.2083, -1060.42, 45.2003 ); + ent.v["angles"] = ( 34.589, 339.642, -27.7829 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -194.668, 59.6114, 51.3126 ); + ent.v["angles"] = ( 338.767, 251.389, -44.8256 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -196.644, -31.345, 55.2059 ); + ent.v["angles"] = ( 333.251, 245.042, -42.24 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -199.892, -38.2818, 54.2061 ); + ent.v["angles"] = ( 31.3247, 58.9794, 39.2928 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -196.479, 45.6401, 50.1972 ); + ent.v["angles"] = ( 39.0908, 43.1795, 29.9922 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -255.854, -145.431, 33.1945 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 85.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 17.7745, -1083.87, 24.2003 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 110.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -100.48, 776.088, 40.1935 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 69.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1579.77, 2305.33, -32.6681 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1626.15, 2299.32, -8.50859 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1724.93, 2173.69, -19.3444 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1719.93, -2168.03, -20.3786 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1610.04, -2279.19, -3.2757 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -197.608, -1208.27, 44.4412 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -350.993, 1065.77, 41.5727 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -172.332, 1214.72, 32.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1557.48, 2284.43, -35.3048 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1768.44, -2170.23, -37.3464 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1722.7, -2268, 71.9732 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -59.3688, -467.715, -54.3219 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 86.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -38.3634, 744.013, -53.1034 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 41.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["origin"] = ( -1565.89, 2432.24, -286 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 214.8 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["origin"] = ( -1566.52, 1095.24, -285.438 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 214.6 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["origin"] = ( -1221.29, 655.636, -286 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 33.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["origin"] = ( -1256.54, -697.131, -286 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 151.6 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["origin"] = ( 3786.58, -811.18, -280 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.4 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_flood_light" ); + ent.v["origin"] = ( 1744.17, 2285.01, 81.7873 ); + ent.v["angles"] = ( 1.03533, 249.93, -0.334176 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_flood_light_beam" ); + ent.v["origin"] = ( 1742.27, 2281.49, 79.6697 ); + ent.v["angles"] = ( 21.2134, 287.881, -5.96969 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_flood_light" ); + ent.v["origin"] = ( 1736.27, 2295.67, 82.3763 ); + ent.v["angles"] = ( 0.356206, 196.93, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_flood_light_beam" ); + ent.v["origin"] = ( 1730.24, 2292.12, 82.3454 ); + ent.v["angles"] = ( 28.8562, 147.929, -172.609 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_flood_light" ); + ent.v["origin"] = ( 1728.84, -2285.57, 80.6648 ); + ent.v["angles"] = ( 1.03535, 169.93, -0.334179 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_flood_light_beam" ); + ent.v["origin"] = ( 1720.86, -2280.98, 78.5471 ); + ent.v["angles"] = ( 17.8977, 205.073, -6.83147 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_flood_light" ); + ent.v["origin"] = ( 1738.62, -2276.69, 81.2538 ); + ent.v["angles"] = ( 0.356214, 116.93, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_express_flood_light_beam" ); + ent.v["origin"] = ( 1734.07, -2271.37, 78.2229 ); + ent.v["angles"] = ( 15.9537, 66.2045, -173.271 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1724.81, 2280.89, 72.8578 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -1109.03, 320.483, 74.125 ); + ent.v["angles"] = ( 40.003, 176.672, 1.28912 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_vista_smoke01" ); + ent.v["origin"] = ( -41399.3, -234.981, 9526.94 ); + ent.v["angles"] = ( 292.951, 26.6725, 20.2475 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_vista_smoke01" ); + ent.v["origin"] = ( -35552, 17195.8, 10659.4 ); + ent.v["angles"] = ( 284.622, 35.7853, 23.223 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_vista_smoke01" ); + ent.v["origin"] = ( -37362.6, 13541.6, 6977.84 ); + ent.v["angles"] = ( 274, 89.9949, 26.004 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_vista_smoke01" ); + ent.v["origin"] = ( -39960.2, 1625.92, 7604.65 ); + ent.v["angles"] = ( 299.51, 52.1825, 52.2727 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_vista_fire01" ); + ent.v["origin"] = ( -41302.4, -209.357, 9305.93 ); + ent.v["angles"] = ( 0, 357, 19 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_vista_fire01" ); + ent.v["origin"] = ( -41506.9, 1540.31, 7070.19 ); + ent.v["angles"] = ( 3.48203, 332.944, -13.8901 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_vista_fire01" ); + ent.v["origin"] = ( -37845.4, 13601.6, 6883.59 ); + ent.v["angles"] = ( 13.1745, 25.7166, 20.3595 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_vista_fire01" ); + ent.v["origin"] = ( -37253.6, 17549.5, 10688.4 ); + ent.v["angles"] = ( 4.39891, 33.1717, 43.9386 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -756.344, 3.62298, 126.625 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_express" ); + ent.v["origin"] = ( 419.38, 227.445, -10.875 ); + ent.v["angles"] = ( 320.056, 174.828, -176.369 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_express" ); + ent.v["origin"] = ( 349.346, 56.1756, -15.875 ); + ent.v["angles"] = ( 318.06, 174.658, -176.258 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_express" ); + ent.v["origin"] = ( 392.553, -67.2389, -15.875 ); + ent.v["angles"] = ( 317.951, 182.732, 178.335 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_express" ); + ent.v["origin"] = ( 355.788, -159.05, -9.875 ); + ent.v["angles"] = ( 319.93, 181.442, -178.8 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_express" ); + ent.v["origin"] = ( 413.869, -248.048, -15.875 ); + ent.v["angles"] = ( 312.22, 175.581, -173.868 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_vista_fire01" ); + ent.v["origin"] = ( -41148.2, 1405.53, 10249.3 ); + ent.v["angles"] = ( 3, 331, -14 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_vista_smoke01" ); + ent.v["origin"] = ( -21655.4, -8472, 1199.19 ); + ent.v["angles"] = ( 320.314, 79.9974, 30.4147 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_vista_smoke01" ); + ent.v["origin"] = ( -39643.5, 1732.45, 10848 ); + ent.v["angles"] = ( 293.003, 5.68765, 94.4744 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 1431.7, -2081.46, -57.6439 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 136.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 1041.92, -1442.63, -16 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 182.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 373.369, 586.013, -16 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 346.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 1597.37, 2260.26, -56.4586 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 241.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 139.696, 1348.45, 128.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 46.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 705.478, 1000.37, 128.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 115.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 1212.28, 238.896, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 213.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 1203.74, -232.88, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 674.339, -1132.51, 128.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 187.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 147.871, -1354.05, 128.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 12.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -593.865, -782.896, -40 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -587.496, 794.383, -40 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 31.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 54.3967, 1988.72, -15.8586 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 42.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 864.499, -70.0208, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 158.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 871.996, 38.428, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 343.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 2596.41, -147.93, -280 ); + ent.v["angles"] = ( 323.312, 176.372, 2.16989 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 2588.56, 122.561, -280 ); + ent.v["angles"] = ( 323.854, 177.669, 1.37747 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 2569.79, 320.658, -280 ); + ent.v["angles"] = ( 323.854, 177.669, 0.377455 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 3096.49, -363.051, -271.831 ); + ent.v["angles"] = ( 323.854, 177.669, -1.62255 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 3083.54, -172.68, -282.723 ); + ent.v["angles"] = ( 323.312, 176.372, 2.16989 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 3075.68, 97.8114, -282.723 ); + ent.v["angles"] = ( 323.854, 177.669, 1.37747 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 3056.92, 295.908, -282.723 ); + ent.v["angles"] = ( 323.854, 177.669, 0.377455 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 3528.21, -332.792, -250.831 ); + ent.v["angles"] = ( 323.854, 177.669, -1.62255 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 3515.26, -142.421, -261.723 ); + ent.v["angles"] = ( 323.312, 176.372, 2.16989 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 3507.4, 128.07, -261.723 ); + ent.v["angles"] = ( 323.854, 177.669, 1.37747 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 3488.64, 326.167, -261.723 ); + ent.v["angles"] = ( 323.854, 177.669, 0.377455 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 781.585, 837.429, 161.125 ); + ent.v["angles"] = ( 8.44865, 292.982, 0.50436 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 772.838, -920.961, 181.292 ); + ent.v["angles"] = ( 13.7035, 67.9494, -0.334405 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -456.646, -37.3364, 78.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 226.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -701.479, 149.945, 78.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -875.325, 286.317, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 62.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1002.73, -2661.38, -62.3477 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 664.442, 2312.15, -62.3567 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 995.138, 2656.53, -55.3534 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; +} diff --git a/MP/Maps/Express/clientscripts/mp/mp_express.csc b/MP/Maps/Express/clientscripts/mp/mp_express.csc new file mode 100644 index 0000000..dc43122 --- /dev/null +++ b/MP/Maps/Express/clientscripts/mp/mp_express.csc @@ -0,0 +1,132 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_express_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_express_amb; +#include clientscripts\mp\_fx; + +main() +{ + level.worldmapx = -75; + level.worldmapy = 87; + level.worldlat = 34.0554; + level.worldlong = -118.235; + clientscripts\mp\_load::main(); + clientscripts\mp\mp_express_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_express_amb::main(); + registerclientfield( "vehicle", "train_moving", 1, 1, "int", ::train_move, 0 ); + registerclientfield( "scriptmover", "train_moving", 1, 1, "int", ::train_move, 0 ); + setsaveddvar( "compassmaxrange", "2100" ); + setsaveddvar( "sm_sunsamplesizenear", 0.39 ); + setsaveddvar( "sm_sunshadowsmall", 1 ); + waitforclient( 0 ); +/# + println( "*** Client : mp_express running..." ); +#/ +} + +train_move( localclientnum, oldval, newval, bnewent, binitialsnap, fieldname ) +{ + self endon( "death" ); + self endon( "entityshutdown" ); + + if ( newval ) + { + self notify( "train_stop" ); + self endon( "train_stop" ); + self thread train_move_think( localclientnum ); + clientobjid = getnextobjid( localclientnum ); + objective_add( localclientnum, clientobjid, "invisible", self.origin, "free" ); + objective_onentity( localclientnum, clientobjid, self, 1, 1, 0 ); + expresssize = getdvarintdefault( "scr_express_size", 45 ); + objective_seticonsize( localclientnum, clientobjid, expresssize ); + objective_setstencil( localclientnum, clientobjid, 1 ); + self thread train_end_think( localclientnum, clientobjid ); + wait 0.1; + + if ( self.type == "vehicle" ) + { + objective_state( localclientnum, clientobjid, "active" ); + objective_seticon( localclientnum, clientobjid, "compass_train_engine" ); + self thread train_fx_think( 1001, 1011 ); + } + else if ( self.model == "p6_bullet_train_engine_rev" ) + self thread train_fx_think( 2001, 2011 ); + else + { + objective_state( localclientnum, clientobjid, "active" ); + objective_seticon( localclientnum, clientobjid, "compass_train_carriage" ); + } + } + else + self notify( "train_stop" ); +} + +train_end_think( localclientnum, clientobjid ) +{ + self waittill_any( "train_stop", "death", "entityshutdown" ); + objective_delete( localclientnum, clientobjid ); + releaseobjid( localclientnum, clientobjid ); +} + +train_move_think( localclientnum ) +{ + self endon( "train_stop" ); + self endon( "death" ); + self endon( "entityshutdown" ); + + for (;;) + { + player = getlocalplayer( localclientnum ); + + if ( !isdefined( player ) ) + { + serverwait( localclientnum, 0.05 ); + continue; + } + else if ( player getinkillcam( localclientnum ) ) + { + serverwait( localclientnum, 0.05 ); + continue; + } + + if ( distancesquared( self.origin, player.origin ) < 262144 ) + { + playrumbleonposition( localclientnum, "grenade_rumble", self.origin ); + player earthquake( 0.2, 0.25, self.origin, 512 ); + wait 0.05; + continue; + } + + serverwait( localclientnum, 0.05 ); + } +} + +train_fx_think( id, id_end ) +{ + self endon( "train_stop" ); + self endon( "death" ); + self endon( "entityshutdown" ); + + for (;;) + { + if ( id > id_end ) + return; + + origin = level.createfxexploders[id][0].v["origin"]; + dir = vectornormalize( origin - self.origin ); + forward = anglestoforward( self.angles ); + dot = vectordot( forward, dir ); + + if ( dot <= 0 ) + { + clientscripts\mp\_fx::exploder( id ); + id++; + } + + wait 0.01; + } +} diff --git a/MP/Maps/Express/clientscripts/mp/mp_express_amb.csc b/MP/Maps/Express/clientscripts/mp/mp_express_amb.csc new file mode 100644 index 0000000..c73ec40 --- /dev/null +++ b/MP/Maps/Express/clientscripts/mp/mp_express_amb.csc @@ -0,0 +1,73 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "default_outdoor", 1 ); + setambientroomtone( "default_outdoor", "amb_wind_extreior_2d", 0.2, 0.5 ); + setambientroomreverb( "default_outdoor", "express_outdoor", 1, 1 ); + setambientroomcontext( "default_outdoor", "ringoff_plr", "outdoor" ); + declareambientroom( "subway_room" ); + setambientroomreverb( "subway_room", "express_smallroom", 1, 1 ); + setambientroomcontext( "subway_room", "ringoff_plr", "indoor" ); + declareambientroom( "subway_room_partial" ); + setambientroomreverb( "subway_room_partial", "express_smallroom", 1, 1 ); + setambientroomcontext( "subway_room_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "tunnel_ramp_room" ); + setambientroomreverb( "tunnel_ramp_room", "express_sewerpipe", 1, 1 ); + setambientroomcontext( "tunnel_ramp_room", "ringoff_plr", "indoor" ); + declareambientroom( "tunnel_bridge_room" ); + setambientroomreverb( "tunnel_bridge_room", "express_sewerpipe", 1, 1 ); + setambientroomcontext( "tunnel_bridge_room", "ringoff_plr", "indoor" ); + declareambientroom( "tunnel_bridge_room_partial" ); + setambientroomreverb( "tunnel_bridge_room_partial", "express_sewerpipe", 1, 1 ); + setambientroomcontext( "tunnel_bridge_room_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "tunnel_wide_room" ); + setambientroomreverb( "tunnel_wide_room", "express_stoneroom", 1, 1 ); + setambientroomcontext( "tunnel_wide_room", "ringoff_plr", "indoor" ); + declareambientroom( "ticket_window_room" ); + setambientroomreverb( "ticket_window_room", "express_smallroom", 1, 1 ); + setambientroomcontext( "ticket_window_room", "ringoff_plr", "indoor" ); + declareambientroom( "ticket_main_room" ); + setambientroomreverb( "ticket_main_room", "express_mediumroom", 1, 1 ); + setambientroomcontext( "ticket_main_room", "ringoff_plr", "indoor" ); + declareambientroom( "stairwell" ); + setambientroomreverb( "stairwell", "express_stoneroom", 1, 1 ); + setambientroomcontext( "stairwell", "ringoff_plr", "indoor" ); + declareambientroom( "stairwell_open" ); + setambientroomreverb( "stairwell_open", "express_smallroom", 1, 1 ); + setambientroomcontext( "stairwell_open", "ringoff_plr", "indoor" ); + declareambientroom( "marble_room" ); + setambientroomreverb( "marble_room", "express_stoneroom", 1, 1 ); + setambientroomcontext( "marble_room", "ringoff_plr", "indoor" ); + declareambientroom( "marble_room_partial" ); + setambientroomreverb( "marble_room_partial", "express_stoneroom", 1, 1 ); + setambientroomcontext( "marble_room_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "walkway_open" ); + setambientroomreverb( "walkway_open", "express_outdoor", 1, 1 ); + setambientroomcontext( "walkway_open", "ringoff_plr", "outdoor" ); + declareambientroom( "walkway_closed" ); + setambientroomreverb( "walkway_closed", "express_stoneroom", 1, 1 ); + setambientroomcontext( "walkway_closed", "ringoff_plr", "indoor" ); + declareambientroom( "main_lobby" ); + setambientroomreverb( "main_lobby", "express_largeroom", 1, 1 ); + setambientroomcontext( "main_lobby", "ringoff_plr", "indoor" ); + thread snd_start_autofx_audio(); +} + +snd_play_loopers() +{ + +} + +snd_start_autofx_audio() +{ + snd_play_auto_fx( "fx_express_ceiling_light_big", "amb_halllight_lrg", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_express_hall_light_5", "amb_halllight_sml", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_express_hall_light_one", "amb_halllight_sml", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_vent_heat_distort", "amb_exhaust", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_insects_swarm_lg_light", "amb_flies", 0, 0, 0, 0 ); +} diff --git a/MP/Maps/Express/clientscripts/mp/mp_express_fx.csc b/MP/Maps/Express/clientscripts/mp/mp_express_fx.csc new file mode 100644 index 0000000..e4d4484 --- /dev/null +++ b/MP/Maps/Express/clientscripts/mp/mp_express_fx.csc @@ -0,0 +1,68 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\createfx\mp_express_fx; +#include clientscripts\mp\_fx; + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + +} + +main() +{ + clientscripts\mp\createfx\mp_express_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fxanim_props(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); + + level._effect["fx_mp_debris_papers"] = loadfx( "maps/mp_maps/fx_mp_debris_papers" ); + level._effect["fx_paper_interior_short"] = loadfx( "debris/fx_paper_interior_short" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_fog_low"] = loadfx( "maps/mp_maps/fx_mp_fog_low" ); + level._effect["fx_mp_express_train_blow_dust"] = loadfx( "maps/mp_maps/fx_mp_express_train_blow_dust" ); + level._effect["fx_mp_express_fog_water"] = loadfx( "maps/mp_maps/fx_mp_express_fog_water" ); + level._effect["fx_mp_fumes_vent_xsm_int"] = loadfx( "maps/mp_maps/fx_mp_fumes_vent_xsm_int" ); + level._effect["fx_mp_vent_heat_distort"] = loadfx( "maps/mp_maps/fx_mp_vent_heat_distort" ); + level._effect["fx_insects_swarm_dark_lg"] = loadfx( "bio/insects/fx_insects_swarm_dark_lg" ); + level._effect["fx_mp_debris_papers_narrow"] = loadfx( "maps/mp_maps/fx_mp_debris_papers_narrow" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_insects_swarm_md_light"] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); + level._effect["fx_mp_express_train_dust_side2"] = loadfx( "maps/mp_maps/fx_mp_express_train_dust_side2" ); + level._effect["fx_mp_express_train_dust"] = loadfx( "maps/mp_maps/fx_mp_express_train_dust" ); + level._effect["fx_mp_express_train_dust_side"] = loadfx( "maps/mp_maps/fx_mp_express_train_dust_side" ); + level._effect["fx_lf_mp_express_sun1"] = loadfx( "lens_flares/fx_lf_mp_express_sun1" ); + level._effect["fx_light_god_ray_mp_express"] = loadfx( "env/light/fx_light_god_ray_mp_express" ); + level._effect["fx_light_god_ray_mp_express2"] = loadfx( "env/light/fx_light_god_ray_mp_express2" ); + level._effect["fx_window_god_ray"] = loadfx( "light/fx_window_god_ray" ); + level._effect["fx_express_ceiling_light_big"] = loadfx( "light/fx_express_ceiling_light_big" ); + level._effect["fx_express_ceiling_light_small"] = loadfx( "light/fx_express_ceiling_light_small" ); + level._effect["fx_window_god_ray_sm"] = loadfx( "light/fx_window_god_ray_sm" ); + level._effect["fx_express_train_side_light"] = loadfx( "light/fx_express_train_side_light" ); + level._effect["fx_express_hall_light_one"] = loadfx( "light/fx_express_hall_light_one" ); + level._effect["fx_express_hall_light_5"] = loadfx( "light/fx_express_hall_light_5" ); + level._effect["fx_light_god_ray_mp_slums"] = loadfx( "env/light/fx_light_god_ray_mp_slums" ); + level._effect["fx_express_ceiling_light_xsm"] = loadfx( "light/fx_express_ceiling_light_xsm" ); + level._effect["fx_mp_light_police_car"] = loadfx( "maps/mp_maps/fx_mp_light_police_car" ); + level._effect["fx_drone_rectangle_light_03"] = loadfx( "light/fx_drone_rectangle_light_03" ); + level._effect["fx_express_flood_light"] = loadfx( "light/fx_express_flood_light" ); + level._effect["fx_express_flood_light_beam"] = loadfx( "light/fx_express_flood_light_beam" ); + level._effect["fx_mp_express_vista_smoke01"] = loadfx( "maps/mp_maps/fx_mp_express_vista_smoke01" ); + level._effect["fx_mp_express_vista_fire01"] = loadfx( "maps/mp_maps/fx_mp_express_vista_fire01" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["banner_side_thin"] = %fxanim_mp_express_banner_side_thin_anim; +} diff --git a/MP/Maps/Express/maps/mp/_events.gsc b/MP/Maps/Express/maps/mp/_events.gsc new file mode 100644 index 0000000..61d5499 --- /dev/null +++ b/MP/Maps/Express/maps/mp/_events.gsc @@ -0,0 +1,97 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_globallogic_utils; + +add_timed_event( seconds, notify_string, client_notify_string ) +{ + assert( seconds >= 0 ); + + if ( level.timelimit > 0 ) + level thread timed_event_monitor( seconds, notify_string, client_notify_string ); +} + +timed_event_monitor( seconds, notify_string, client_notify_string ) +{ + for (;;) + { + wait 0.5; + + if ( !isdefined( level.starttime ) ) + continue; + + millisecs_remaining = maps\mp\gametypes\_globallogic_utils::gettimeremaining(); + seconds_remaining = millisecs_remaining / 1000; + + if ( seconds_remaining <= seconds ) + { + event_notify( notify_string, client_notify_string ); + return; + } + } +} + +add_score_event( score, notify_string, client_notify_string ) +{ + assert( score >= 0 ); + + if ( level.scorelimit > 0 ) + { + if ( level.teambased ) + level thread score_team_event_monitor( score, notify_string, client_notify_string ); + else + level thread score_event_monitor( score, notify_string, client_notify_string ); + } +} + +any_team_reach_score( score ) +{ + foreach ( team in level.teams ) + { + if ( game["teamScores"][team] >= score ) + return true; + } + + return false; +} + +score_team_event_monitor( score, notify_string, client_notify_string ) +{ + for (;;) + { + wait 0.5; + + if ( any_team_reach_score( score ) ) + { + event_notify( notify_string, client_notify_string ); + return; + } + } +} + +score_event_monitor( score, notify_string, client_notify_string ) +{ + for (;;) + { + wait 0.5; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].score ) && players[i].score >= score ) + { + event_notify( notify_string, client_notify_string ); + return; + } + } + } +} + +event_notify( notify_string, client_notify_string ) +{ + if ( isdefined( notify_string ) ) + level notify( notify_string ); + + if ( isdefined( client_notify_string ) ) + clientnotify( client_notify_string ); +} diff --git a/MP/Maps/Express/maps/mp/createart/mp_express_art.gsc b/MP/Maps/Express/maps/mp/createart/mp_express_art.gsc new file mode 100644 index 0000000..a6de261 --- /dev/null +++ b/MP/Maps/Express/maps/mp/createart/mp_express_art.gsc @@ -0,0 +1,27 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + level.tweakfile = 1; + setdvar( "scr_fog_exp_halfplane", "3759.28" ); + setdvar( "scr_fog_exp_halfheight", "243.735" ); + setdvar( "scr_fog_nearplane", "601.593" ); + setdvar( "scr_fog_red", "0.806694" ); + setdvar( "scr_fog_green", "0.962521" ); + setdvar( "scr_fog_blue", "0.9624" ); + setdvar( "scr_fog_baseheight", "-475.268" ); + setdvar( "visionstore_glowTweakEnable", "0" ); + setdvar( "visionstore_glowTweakRadius0", "5" ); + setdvar( "visionstore_glowTweakRadius1", "" ); + setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); + setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); + setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); + setdvar( "visionstore_glowTweakBloomIntensity1", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); + visionsetnaked( "mp_express", 1 ); + setdvar( "r_lightGridEnableTweaks", 1 ); + setdvar( "r_lightGridIntensity", 1.0 ); + setdvar( "r_lightGridContrast", 0 ); +} diff --git a/MP/Maps/Express/maps/mp/createfx/mp_express_fx.gsc b/MP/Maps/Express/maps/mp/createfx/mp_express_fx.gsc new file mode 100644 index 0000000..87f6fd1 --- /dev/null +++ b/MP/Maps/Express/maps/mp/createfx/mp_express_fx.gsc @@ -0,0 +1,1834 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 904.187, -2120.3, -35.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 132.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 672.285, -213.159, 71.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 653.108, 199.932, 71.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 225.28, 50.8324, 37 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 85.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 240.648, -293.811, 46.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 105.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 688.709, -925.867, 35 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 118.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 585.66, -1065.81, 51 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 118.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1033.78, -1877.63, 36.0076 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 118.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1489.26, -1249.97, -51.3096 ); + ent.v["angles"] = ( 338, 224, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1737.87, -915.959, -78.2687 ); + ent.v["angles"] = ( 352.104, 243.1, 1.97313 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1548.32, -407.51, -38 ); + ent.v["angles"] = ( 354.932, 89.9463, 1.83965 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1539.08, 431.675, -54 ); + ent.v["angles"] = ( 352.685, 260.482, -2.7063 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1432.99, 1304.17, -7.92948 ); + ent.v["angles"] = ( 351.296, 139.321, -0.649479 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1741.47, 931.778, -74.1646 ); + ent.v["angles"] = ( 354.651, 117.059, -0.668359 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 730.237, 1397.04, 44 ); + ent.v["angles"] = ( 0.841039, 53.9364, 0.470194 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 986.61, 1741.43, 44 ); + ent.v["angles"] = ( 0.841039, 53.9364, 0.470194 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1235.97, 2016.5, -0.999996 ); + ent.v["angles"] = ( 0.841039, 53.9364, 0.470194 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1856.5, 302.507, -64 ); + ent.v["angles"] = ( 0.434334, 87.9362, 0.860104 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1855, -555.538, -66 ); + ent.v["angles"] = ( 0.434334, 87.9362, 0.860104 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 2095.27, -333.514, -68 ); + ent.v["angles"] = ( 0.434334, 87.9362, 0.860104 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 2081.85, 493.494, -65 ); + ent.v["angles"] = ( 359.611, 270.936, -0.881651 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 77.2361, -1468.28, 179.125 ); + ent.v["angles"] = ( 0.948312, 34.9346, 0.170738 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1074.33, -92.7252, 7.125 ); + ent.v["angles"] = ( 356.611, 270.982, -0.883175 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1131.8, 367.006, 3.125 ); + ent.v["angles"] = ( 0.860073, 357.93, -0.434595 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 104.491, 1461.15, 183.125 ); + ent.v["angles"] = ( 0.513489, 326.93, -0.815337 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 475.278, 1206.18, 178.125 ); + ent.v["angles"] = ( 0.499212, 325.93, 0.175851 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_express" ); + ent.v["origin"] = ( 371.122, 146.88, -21.875 ); + ent.v["angles"] = ( 318.06, 174.658, -176.258 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 2609.36, -338.302, -269.108 ); + ent.v["angles"] = ( 323.854, 177.669, -1.62255 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -128.196, 1616.93, 189.125 ); + ent.v["angles"] = ( 23.16, 147.24, 0.592267 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 121.642, -1308.79, 190.125 ); + ent.v["angles"] = ( 0, 36, -37 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 990.407, -2000.66, -56.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 130.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 377.47, -99.5366, 29.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 85.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -98.5626, -1599.25, 181.125 ); + ent.v["angles"] = ( 18, 215, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 769.788, -1747.88, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 216.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 1073.37, -2096.74, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 225.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 502.51, -1356.86, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 210.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1003; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 273.601, -936.508, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 205.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1004; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 92.7792, -491.237, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 199.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 17.9442, -35.5184, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1006; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 84.1599, 435.962, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 164.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1007; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 245.547, 869.105, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 157.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1008; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 456.781, 1276.61, -58.5 ); + ent.v["angles"] = ( 0, 151, -1 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1009; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 717.311, 1677.81, -57.7634 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1010; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 1037.08, 2051.59, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1011; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 1087.85, -2111.04, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 791.486, -1771.69, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 307.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 517.452, -1381.03, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 299.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2003; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 287.219, -957.808, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 294.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2004; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 119.349, -535.167, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 287.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2005; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 18.978, -56.9463, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 274.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2006; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 72.5543, 413.993, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 256.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2007; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 232.631, 844.638, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 246.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2008; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 446.137, 1250.02, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 243.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2009; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 700.319, 1647.44, -58.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 240.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2010; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust" ); + ent.v["origin"] = ( 1022.76, 2035.7, -58.5 ); + ent.v["angles"] = ( 359, 224.996, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2011; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1710.93, 684.362, 306.361 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1710.24, 864.104, 298.348 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2030.79, 685.667, 307.942 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2030.28, 866.089, 296.456 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2349.18, 866.885, 297.632 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2667.47, 864.907, 298.658 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2989.25, 865.028, 297.195 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 3308.27, 866.458, 283.293 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1709.26, -866.213, 298.409 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1709.27, -685.866, 308.778 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2028.73, -867.224, 299.535 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2029.89, -685.353, 309.661 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2348.3, -865.907, 299.481 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2669.24, -865.818, 299.669 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2987.5, -866.468, 299.32 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 3310.8, -865.273, 285.616 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1398.88, -110.09, 305.238 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1399.77, 110.015, 306.435 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1400.2, 330.367, 305.939 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1398.17, -331.185, 306.176 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1399.7, -514.48, 304.041 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1398.77, -686.186, 300.364 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1398.49, -864.665, 289.739 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1399.87, 513.153, 306.682 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1400.7, 685.682, 297.438 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 1398.36, 864.426, 290.249 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2989.6, 330.444, 313 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2989.74, 110.677, 313 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2989.3, -114.313, 314 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 2988.87, -332.26, 313 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 3313.88, -515.219, 296.624 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 3312.54, -330.643, 298.118 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 3314.78, -111.315, 298.429 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 3308.06, 111.38, 295.528 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 3309.16, 332.984, 298.53 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); + ent.v["origin"] = ( 3304.14, 517.499, 297.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 640.993, 238.484, 184 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 504.093, 238.665, 184 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 776.463, 238.78, 184 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 913.004, 237.345, 184.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 1048.33, 238.616, 184.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 1184.4, 238.699, 186 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 227.961, -261.015, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 47.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 481.22, 1387.52, -13.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 50.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 957.548, 1968.64, -56.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 50.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 21.4283, 38.2671, -31.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 83.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 97.0849, -534.371, -14.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 102.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 258.013, -1227.7, 3 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 114.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1179, -2344.59, -20.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 137.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -17.3512, -1478.04, 26 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 112.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -390.35, 456.912, 27 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 82.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -434.381, 1013.16, 31 ); + ent.v["angles"] = ( 0, 76, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -419.201, -1136.47, 5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 103.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 655.635, -1685.19, -16.3986 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 137.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 707.182, -2201.65, 8.00002 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 127.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -3.71047, 1822.32, 35.9369 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 34.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 368.932, 1710.05, -22.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 49.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 81.0399, 701.163, -13.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 67.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 696.127, 1354.24, -10 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 29.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( -333.014, -1244.49, -38 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 107.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( -608.577, 771.195, -37 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 563.5, 2011.01, -22 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 49.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 518.991, 2232.65, -55.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 21.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 1000.55, -2782.06, -53 ); + ent.v["angles"] = ( 0, 89, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -1040.64, -231.569, 54.125 ); + ent.v["angles"] = ( 23.1981, 127.207, 9.65068 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 153.867, -1297.16, 188.125 ); + ent.v["angles"] = ( 0.75463, 245.254, 68.3993 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -1160.28, 289.832, 34.125 ); + ent.v["angles"] = ( 337.304, 71.365, -37.1935 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -1163.12, -434.502, 70.125 ); + ent.v["angles"] = ( 24.666, 231.513, 32.5726 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -1119.1, -301.723, 64.125 ); + ent.v["angles"] = ( 40.003, 176.672, 1.28912 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1127.08, -378.759, 5.125 ); + ent.v["angles"] = ( 0.643226, 356.938, -0.442156 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -1173.37, 423.165, 63.125 ); + ent.v["angles"] = ( 31.6849, 140.827, -26.2148 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -1162.68, -276.343, 52.125 ); + ent.v["angles"] = ( 37.3658, 239.257, 29.1336 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_fog_water" ); + ent.v["origin"] = ( -3604.39, -464.775, -312.279 ); + ent.v["angles"] = ( 358.161, 267.005, 0.152562 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_fog_water" ); + ent.v["origin"] = ( -3467.55, 2409.66, -240.302 ); + ent.v["angles"] = ( 358.367, 243.996, 0.859104 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_fog_water" ); + ent.v["origin"] = ( -4307.54, -3735.9, -493.182 ); + ent.v["angles"] = ( 358.39, 301.021, -0.902071 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -261.463, -1226.32, 65.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -253.027, -1041.17, 53.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 641.362, -101.817, 185.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 776.611, -103.612, 184.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 912.786, -102.691, 185.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 1048.72, -102.385, 185.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 1184.36, -103.566, 184.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( 290.308, -1437.65, 4.87629 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 30.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( 136.327, -1176.32, 4.643 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 30.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( 102.393, -1108.43, 4.21081 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 23.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -53.2016, -733.819, 4.13237 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 23.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -79.322, -663.618, 4.59664 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 14.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -175.213, -270.254, 4.7733 ); + ent.v["angles"] = ( 356, 14, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -184.92, -195.587, 4.24279 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -184.117, 211.009, 4.53329 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -175.937, 286.796, 4.5513 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 345.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -69.3966, 676.847, 4.16217 ); + ent.v["angles"] = ( 357, 345, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -45.5513, 749.242, 4.1686 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 337.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( 109.75, 1123.94, 4.30387 ); + ent.v["angles"] = ( 357, 337, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( 143.193, 1191.77, 4.00254 ); + ent.v["angles"] = ( 357.022, 329.991, 0.365935 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( 294.656, 1455.37, 4.98705 ); + ent.v["angles"] = ( 357.022, 329.991, 0.365935 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -300.573, -301.651, 4.94043 ); + ent.v["angles"] = ( 4, 194, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -203.825, -694.522, 4.52649 ); + ent.v["angles"] = ( 355, 194, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -171.709, -783.183, 4.14116 ); + ent.v["angles"] = ( 3.96161, 202.019, 0.557685 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -17.1667, -1156.99, 4.09987 ); + ent.v["angles"] = ( 0.951456, 202.989, 0.625416 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( 26.1881, -1241.24, 3.62246 ); + ent.v["angles"] = ( 356.869, 208.924, 0.791536 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -300.033, 319.534, 4.98442 ); + ent.v["angles"] = ( 358.346, 163.906, 2.77418 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -194.02, 709.725, 4.02974 ); + ent.v["angles"] = ( 358.346, 163.906, 2.77418 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -164.703, 798.41, 4.86106 ); + ent.v["angles"] = ( 358.346, 163.906, 2.77418 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( -9.7507, 1172.74, 4.31705 ); + ent.v["angles"] = ( 358.696, 156.912, 2.95495 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( 32.116, 1255.5, 4.57541 ); + ent.v["angles"] = ( 358.905, 152.917, 3.03862 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 829.544, -1658.73, -6.99999 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 36.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 1138.93, -1988.61, -21.4837 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 34.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust_side" ); + ent.v["origin"] = ( 744.385, 1521.01, -16 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 326.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1010; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust_side2" ); + ent.v["origin"] = ( 96.533, -325.943, -24.8184 ); + ent.v["angles"] = ( 344.927, 2.59774, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = maps\mp\_utility::createexploder( "fx_mp_express_train_dust_side2" ); + ent.v["origin"] = ( 72.3679, 59.1355, -18.7997 ); + ent.v["angles"] = ( 344.927, 2.59774, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1006; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 321.841, -335.237, 116.827 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 302.996, -418.976, 116.437 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 280.851, -426.961, 116.467 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 367.523, -321.819, 116.487 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 324.799, -480.676, 116.288 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 303.406, -487.594, 116.459 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 448.491, -592.578, 116.231 ); + ent.v["angles"] = ( 90, 0, -109 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 497.751, -714.566, 116.64 ); + ent.v["angles"] = ( 90, 0, -112 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 472.131, -654.851, 116.52 ); + ent.v["angles"] = ( 90, 180, 71 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 420.888, -512.917, 116.513 ); + ent.v["angles"] = ( 90, 180, 71 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 522.794, -772.595, 115.436 ); + ent.v["angles"] = ( 90, 356.424, -116.576 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 548.732, -830.549, 116.398 ); + ent.v["angles"] = ( 90, 0, -115 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 572.448, -881.352, 116.7 ); + ent.v["angles"] = ( 90, 0, -116 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 608.264, -956.985, 116.223 ); + ent.v["angles"] = ( 90, 0, -117 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 639.5, -1012.87, 115.526 ); + ent.v["angles"] = ( 90, 0, -118 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 673.834, -1072.71, 116.448 ); + ent.v["angles"] = ( 90, 0, -119 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 702.529, -1131.45, 116.528 ); + ent.v["angles"] = ( 90, 0, -120 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 729.194, -1191.58, 116.239 ); + ent.v["angles"] = ( 90, 0, -121 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 833.442, -1359.8, 116.487 ); + ent.v["angles"] = ( 90, 0, -121 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 869.018, -1410.07, 116.526 ); + ent.v["angles"] = ( 90, 0, -123 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 911.295, -1464.28, 116.699 ); + ent.v["angles"] = ( 90, 0, -124 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 951.238, -1516.28, 116.059 ); + ent.v["angles"] = ( 90, 354.289, -131.711 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 751.261, -1231.1, 115.826 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 683.737, -1273.96, 116.576 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 665.447, -1284.32, 116.446 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 793.754, -1303.05, 116.56 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 724.165, -1344.47, 116.62 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 707.857, -1356.69, 116.716 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 423.83, 509.915, 116.072 ); + ent.v["angles"] = ( 90, 180, 109 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 449.814, 588.752, 116.023 ); + ent.v["angles"] = ( 90, 0, -70 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 476.756, 648.723, 116.216 ); + ent.v["angles"] = ( 90, 180, 111 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 497.694, 711.005, 115.296 ); + ent.v["angles"] = ( 90, 0, -68 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 522.956, 770.785, 115.92 ); + ent.v["angles"] = ( 90, 180, 114 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 546.263, 829.552, 115.207 ); + ent.v["angles"] = ( 90, 0, -65 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 573.589, 879.456, 116.203 ); + ent.v["angles"] = ( 90, 0, -65 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 612.652, 954.341, 116.202 ); + ent.v["angles"] = ( 90, 0, -61 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 639.234, 1011.42, 115.917 ); + ent.v["angles"] = ( 90, 0, -64 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 669.696, 1071.27, 116.259 ); + ent.v["angles"] = ( 90, 0, -62 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 701.67, 1129.17, 115.208 ); + ent.v["angles"] = ( 90, 0, -62 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 733.587, 1191.12, 116.088 ); + ent.v["angles"] = ( 90, 0, -62 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 825.314, 1364.26, 115.917 ); + ent.v["angles"] = ( 90, 0, -58 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 864.208, 1414.96, 115.785 ); + ent.v["angles"] = ( 90, 0, -57 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 899.919, 1466.14, 115.487 ); + ent.v["angles"] = ( 90, 0, -54 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_5" ); + ent.v["origin"] = ( 941.677, 1519.63, 115.287 ); + ent.v["angles"] = ( 90, 180, 127 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 318.453, 330.175, 116.692 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 368.513, 320.402, 116.706 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 400.859, 390.454, 116.527 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 378.052, 399.519, 115.45 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 310.648, 420.936, 116.607 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 289.797, 428.453, 116.005 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 421.898, 446.089, 116.656 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 399.327, 454.697, 116.508 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 325.82, 481.623, 116.486 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 304.357, 486.917, 116.088 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 672.015, 1298.09, 115.205 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 690.486, 1289.09, 116.705 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 763.236, 1245.22, 116.495 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 803.491, 1319.2, 116.661 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 864.41, 1282.24, 115.779 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 732.189, 1364.03, 116.706 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 712.576, 1376.36, 115.208 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 403.536, -452.892, 116.743 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 426.259, -446.395, 116.495 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 384.944, -392.286, 116.7 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( 404.758, -386.695, 116.711 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -901.354, -468.762, 91.2858 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -1008.32, -468.396, 90.9271 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -901.909, -259.425, 90.9863 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -1008.43, -258.058, 90.9379 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -848.715, -365.584, 120.117 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -953.693, -365.871, 119.957 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -1049.42, -370.366, 117.001 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -1008.01, 476.723, 91.9487 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -901.299, 476.522, 91.9177 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -1008.18, 265.401, 90.9992 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -900.81, 265.054, 91.8765 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -849.857, 368.743, 118.922 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -953.152, 368.135, 118.007 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_hall_light_one" ); + ent.v["origin"] = ( -1056.79, 368.777, 118.924 ); + ent.v["angles"] = ( 90, 53.5508, 128.551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_train_side_light" ); + ent.v["origin"] = ( 179.523, -1503.2, 4.35467 ); + ent.v["angles"] = ( 356.856, 209.925, 0.736721 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); + ent.v["origin"] = ( 504.787, -102.438, 184 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 102.171, 1339.63, 189.125 ); + ent.v["angles"] = ( 1.87872, 316.291, 64.0532 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 173.443, 1293.26, 188.125 ); + ent.v["angles"] = ( 18.1743, 135.86, -59.5429 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 931.368, 2582.1, -31 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_low" ); + ent.v["origin"] = ( 885.886, -2508.28, -58 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 685.596, -2336.12, -56.3496 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_express_sun1" ); + ent.v["origin"] = ( -193528, 3894.04, 95755.8 ); + ent.v["angles"] = ( 316.36, 196.247, 7.90639 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -282.609, -337.792, 38.2029 ); + ent.v["angles"] = ( 358.436, 255.798, 68.9546 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -276.036, 372.584, 45.2063 ); + ent.v["angles"] = ( 359.697, 75.08, -59.9623 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -121.294, 882.099, 48.2033 ); + ent.v["angles"] = ( 358.437, 255.798, 55.9545 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -124.927, -852.162, 50.2006 ); + ent.v["angles"] = ( 2.10251, 108.765, -52.2021 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( -599.577, 215.274, 175.16 ); + ent.v["angles"] = ( 360, 90, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( -643.794, 215.271, 177.81 ); + ent.v["angles"] = ( 360, 90, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( -1023.14, 186.754, 123.598 ); + ent.v["angles"] = ( 9, 270, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( -1067.38, 186.729, 119.984 ); + ent.v["angles"] = ( 9, 270, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -130.857, 1077.79, 20.3183 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 82.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( -1023.3, -186.739, 122.755 ); + ent.v["angles"] = ( 360, 90, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( -1063.64, -186.737, 121.896 ); + ent.v["angles"] = ( 360, 90, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1688.08, -865.547, -80.875 ); + ent.v["angles"] = ( 356.347, 80.4128, -1.85498 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1740.23, 844.492, -86.875 ); + ent.v["angles"] = ( 357.27, 270.333, 1.15472 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -1051.18, 205.888, 65.9191 ); + ent.v["angles"] = ( 1.14623, 178.3, -28.3207 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_slums" ); + ent.v["origin"] = ( -381.614, 889.597, 44 ); + ent.v["angles"] = ( 321, 155, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_slums" ); + ent.v["origin"] = ( -270.759, 1189.07, 12.125 ); + ent.v["angles"] = ( 321, 155, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_slums" ); + ent.v["origin"] = ( 209.25, 1816.83, 68 ); + ent.v["angles"] = ( 321.28, 140.864, 5.89672 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_slums" ); + ent.v["origin"] = ( -281.885, -932.34, 46 ); + ent.v["angles"] = ( 323.967, 186.381, -1.02081 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_slums" ); + ent.v["origin"] = ( -224.825, -1199.61, -4.1069 ); + ent.v["angles"] = ( 323.967, 186.381, -1.02081 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_slums" ); + ent.v["origin"] = ( 277.828, -1986.83, 105.651 ); + ent.v["angles"] = ( 323.967, 186.381, -1.02081 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 57.2083, -1060.42, 45.2003 ); + ent.v["angles"] = ( 34.589, 339.642, -27.7829 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -194.668, 59.6114, 51.3126 ); + ent.v["angles"] = ( 338.767, 251.389, -44.8256 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -196.644, -31.345, 55.2059 ); + ent.v["angles"] = ( 333.251, 245.042, -42.24 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -199.892, -38.2818, 54.2061 ); + ent.v["angles"] = ( 31.3247, 58.9794, 39.2928 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -196.479, 45.6401, 50.1972 ); + ent.v["angles"] = ( 39.0908, 43.1795, 29.9922 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -255.854, -145.431, 33.1945 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 85.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 17.7745, -1083.87, 24.2003 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 110.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -100.48, 776.088, 40.1935 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 69.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 1579.77, 2305.33, -32.6681 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1626.15, 2299.32, -8.50859 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1724.93, 2173.69, -19.3444 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1719.93, -2168.03, -20.3786 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1610.04, -2279.19, -3.2757 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -197.608, -1208.27, 44.4412 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -350.993, 1065.77, 41.5727 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -172.332, 1214.72, 32.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1557.48, 2284.43, -35.3048 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1768.44, -2170.23, -37.3464 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1722.7, -2268, 71.9732 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -59.3688, -467.715, -54.3219 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 86.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -38.3634, 744.013, -53.1034 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 41.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["origin"] = ( -1565.89, 2432.24, -286 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 214.8 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["origin"] = ( -1566.52, 1095.24, -285.438 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 214.6 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["origin"] = ( -1221.29, 655.636, -286 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 33.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["origin"] = ( -1256.54, -697.131, -286 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 151.6 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["origin"] = ( 3786.58, -811.18, -280 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.4 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_flood_light" ); + ent.v["origin"] = ( 1744.17, 2285.01, 81.7873 ); + ent.v["angles"] = ( 1.03533, 249.93, -0.334176 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_flood_light_beam" ); + ent.v["origin"] = ( 1742.27, 2281.49, 79.6697 ); + ent.v["angles"] = ( 21.2134, 287.881, -5.96969 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_flood_light" ); + ent.v["origin"] = ( 1736.27, 2295.67, 82.3763 ); + ent.v["angles"] = ( 0.356206, 196.93, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_flood_light_beam" ); + ent.v["origin"] = ( 1730.24, 2292.12, 82.3454 ); + ent.v["angles"] = ( 28.8562, 147.929, -172.609 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_flood_light" ); + ent.v["origin"] = ( 1728.84, -2285.57, 80.6648 ); + ent.v["angles"] = ( 1.03535, 169.93, -0.334179 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_flood_light_beam" ); + ent.v["origin"] = ( 1720.86, -2280.98, 78.5471 ); + ent.v["angles"] = ( 17.8977, 205.073, -6.83147 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_flood_light" ); + ent.v["origin"] = ( 1738.62, -2276.69, 81.2538 ); + ent.v["angles"] = ( 0.356214, 116.93, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_express_flood_light_beam" ); + ent.v["origin"] = ( 1734.07, -2271.37, 78.2229 ); + ent.v["angles"] = ( 15.9537, 66.2045, -173.271 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1724.81, 2280.89, 72.8578 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -1109.03, 320.483, 74.125 ); + ent.v["angles"] = ( 40.003, 176.672, 1.28912 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_vista_smoke01" ); + ent.v["origin"] = ( -41399.3, -234.981, 9526.94 ); + ent.v["angles"] = ( 292.951, 26.6725, 20.2475 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_vista_smoke01" ); + ent.v["origin"] = ( -35552, 17195.8, 10659.4 ); + ent.v["angles"] = ( 284.622, 35.7853, 23.223 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_vista_smoke01" ); + ent.v["origin"] = ( -37362.6, 13541.6, 6977.84 ); + ent.v["angles"] = ( 274, 89.9949, 26.004 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_vista_smoke01" ); + ent.v["origin"] = ( -39960.2, 1625.92, 7604.65 ); + ent.v["angles"] = ( 299.51, 52.1825, 52.2727 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_vista_fire01" ); + ent.v["origin"] = ( -41302.4, -209.357, 9305.93 ); + ent.v["angles"] = ( 0, 357, 19 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_vista_fire01" ); + ent.v["origin"] = ( -41506.9, 1540.31, 7070.19 ); + ent.v["angles"] = ( 3.48203, 332.944, -13.8901 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_vista_fire01" ); + ent.v["origin"] = ( -37845.4, 13601.6, 6883.59 ); + ent.v["angles"] = ( 13.1745, 25.7166, 20.3595 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_vista_fire01" ); + ent.v["origin"] = ( -37253.6, 17549.5, 10688.4 ); + ent.v["angles"] = ( 4.39891, 33.1717, 43.9386 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -756.344, 3.62298, 126.625 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_express" ); + ent.v["origin"] = ( 419.38, 227.445, -10.875 ); + ent.v["angles"] = ( 320.056, 174.828, -176.369 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_express" ); + ent.v["origin"] = ( 349.346, 56.1756, -15.875 ); + ent.v["angles"] = ( 318.06, 174.658, -176.258 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_express" ); + ent.v["origin"] = ( 392.553, -67.2389, -15.875 ); + ent.v["angles"] = ( 317.951, 182.732, 178.335 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_express" ); + ent.v["origin"] = ( 355.788, -159.05, -9.875 ); + ent.v["angles"] = ( 319.93, 181.442, -178.8 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_express" ); + ent.v["origin"] = ( 413.869, -248.048, -15.875 ); + ent.v["angles"] = ( 312.22, 175.581, -173.868 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_vista_fire01" ); + ent.v["origin"] = ( -41148.2, 1405.53, 10249.3 ); + ent.v["angles"] = ( 3, 331, -14 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_vista_smoke01" ); + ent.v["origin"] = ( -21655.4, -8472, 1199.19 ); + ent.v["angles"] = ( 320.314, 79.9974, 30.4147 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_vista_smoke01" ); + ent.v["origin"] = ( -39643.5, 1732.45, 10848 ); + ent.v["angles"] = ( 293.003, 5.68765, 94.4744 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 1431.7, -2081.46, -57.6439 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 136.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 1041.92, -1442.63, -16 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 182.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 373.369, 586.013, -16 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 346.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 1597.37, 2260.26, -56.4586 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 241.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 139.696, 1348.45, 128.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 46.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 705.478, 1000.37, 128.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 115.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 1212.28, 238.896, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 213.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 1203.74, -232.88, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 674.339, -1132.51, 128.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 187.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 147.871, -1354.05, 128.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 12.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -593.865, -782.896, -40 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -587.496, 794.383, -40 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 31.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 54.3967, 1988.72, -15.8586 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 42.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 864.499, -70.0208, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 158.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 871.996, 38.428, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 343.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 2596.41, -147.93, -280 ); + ent.v["angles"] = ( 323.312, 176.372, 2.16989 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 2588.56, 122.561, -280 ); + ent.v["angles"] = ( 323.854, 177.669, 1.37747 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 2569.79, 320.658, -280 ); + ent.v["angles"] = ( 323.854, 177.669, 0.377455 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 3096.49, -363.051, -271.831 ); + ent.v["angles"] = ( 323.854, 177.669, -1.62255 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 3083.54, -172.68, -282.723 ); + ent.v["angles"] = ( 323.312, 176.372, 2.16989 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 3075.68, 97.8114, -282.723 ); + ent.v["angles"] = ( 323.854, 177.669, 1.37747 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 3056.92, 295.908, -282.723 ); + ent.v["angles"] = ( 323.854, 177.669, 0.377455 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 3528.21, -332.792, -250.831 ); + ent.v["angles"] = ( 323.854, 177.669, -1.62255 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 3515.26, -142.421, -261.723 ); + ent.v["angles"] = ( 323.312, 176.372, 2.16989 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 3507.4, 128.07, -261.723 ); + ent.v["angles"] = ( 323.854, 177.669, 1.37747 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); + ent.v["origin"] = ( 3488.64, 326.167, -261.723 ); + ent.v["angles"] = ( 323.854, 177.669, 0.377455 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 781.585, 837.429, 161.125 ); + ent.v["angles"] = ( 8.44865, 292.982, 0.50436 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 772.838, -920.961, 181.292 ); + ent.v["angles"] = ( 13.7035, 67.9494, -0.334405 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -456.646, -37.3364, 78.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 226.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -701.479, 149.945, 78.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( -875.325, 286.317, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 62.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1002.73, -2661.38, -62.3477 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 664.442, 2312.15, -62.3567 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 995.138, 2656.53, -55.3534 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; +} diff --git a/MP/Maps/Express/maps/mp/mp_express.gsc b/MP/Maps/Express/maps/mp/mp_express.gsc new file mode 100644 index 0000000..1b0e576 --- /dev/null +++ b/MP/Maps/Express/maps/mp/mp_express.gsc @@ -0,0 +1,70 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\mp_express_fx; +#include maps\mp\_load; +#include maps\mp\_compass; +#include maps\mp\mp_express_amb; +#include maps\mp\mp_express_train; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_express_fx::main(); + maps\mp\_load::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_express" ); + maps\mp\mp_express_amb::main(); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + registerclientfield( "vehicle", "train_moving", 1, 1, "int" ); + registerclientfield( "scriptmover", "train_moving", 1, 1, "int" ); + + if ( getgametypesetting( "allowMapScripting" ) ) + maps\mp\mp_express_train::init(); +/# + level thread devgui_express(); + execdevgui( "devgui_mp_express" ); +#/ +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "1900", reset_dvars ); +} + +devgui_express() +{ +/# + setdvar( "devgui_notify", "" ); + + for (;;) + { + wait 0.5; + devgui_string = getdvar( "devgui_notify" ); + + switch ( devgui_string ) + { + case "": + break; + case "train_start": + level notify( "train_start" ); + break; + default: + break; + } + + if ( getdvar( "devgui_notify" ) != "" ) + setdvar( "devgui_notify", "" ); + } +#/ +} diff --git a/MP/Maps/Express/maps/mp/mp_express_amb.gsc b/MP/Maps/Express/maps/mp/mp_express_amb.gsc new file mode 100644 index 0000000..d43ebe1 --- /dev/null +++ b/MP/Maps/Express/maps/mp/mp_express_amb.gsc @@ -0,0 +1,20 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + array_thread( getentarray( "advertisement", "targetname" ), ::advertisements ); +} + +advertisements() +{ + self playloopsound( "amb_" + self.script_noteworthy + "_ad" ); + + self waittill( "damage" ); + + self stoploopsound(); + self playloopsound( "amb_" + self.script_noteworthy + "_damaged_ad" ); +} diff --git a/MP/Maps/Express/maps/mp/mp_express_fx.gsc b/MP/Maps/Express/maps/mp/mp_express_fx.gsc new file mode 100644 index 0000000..8d1ce7b --- /dev/null +++ b/MP/Maps/Express/maps/mp/mp_express_fx.gsc @@ -0,0 +1,63 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_express_fx; +#include maps\mp\createart\mp_express_art; + +main() +{ + precache_fxanim_props(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_express_fx::main(); + maps\mp\createart\mp_express_art::main(); +} + +precache_scripted_fx() +{ + level._effect["fx_mp_debris_papers"] = loadfx( "maps/mp_maps/fx_mp_debris_papers" ); + level._effect["fx_paper_interior_short"] = loadfx( "debris/fx_paper_interior_short" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_fog_low"] = loadfx( "maps/mp_maps/fx_mp_fog_low" ); + level._effect["fx_mp_express_train_blow_dust"] = loadfx( "maps/mp_maps/fx_mp_express_train_blow_dust" ); + level._effect["fx_mp_express_fog_water"] = loadfx( "maps/mp_maps/fx_mp_express_fog_water" ); + level._effect["fx_mp_fumes_vent_xsm_int"] = loadfx( "maps/mp_maps/fx_mp_fumes_vent_xsm_int" ); + level._effect["fx_mp_vent_heat_distort"] = loadfx( "maps/mp_maps/fx_mp_vent_heat_distort" ); + level._effect["fx_insects_swarm_dark_lg"] = loadfx( "bio/insects/fx_insects_swarm_dark_lg" ); + level._effect["fx_mp_debris_papers_narrow"] = loadfx( "maps/mp_maps/fx_mp_debris_papers_narrow" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_insects_swarm_md_light"] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); + level._effect["fx_mp_express_train_dust_side2"] = loadfx( "maps/mp_maps/fx_mp_express_train_dust_side2" ); + level._effect["fx_mp_express_train_dust"] = loadfx( "maps/mp_maps/fx_mp_express_train_dust" ); + level._effect["fx_mp_express_train_dust_side"] = loadfx( "maps/mp_maps/fx_mp_express_train_dust_side" ); + level._effect["fx_lf_mp_express_sun1"] = loadfx( "lens_flares/fx_lf_mp_express_sun1" ); + level._effect["fx_light_god_ray_mp_express"] = loadfx( "env/light/fx_light_god_ray_mp_express" ); + level._effect["fx_light_god_ray_mp_express2"] = loadfx( "env/light/fx_light_god_ray_mp_express2" ); + level._effect["fx_window_god_ray"] = loadfx( "light/fx_window_god_ray" ); + level._effect["fx_express_ceiling_light_big"] = loadfx( "light/fx_express_ceiling_light_big" ); + level._effect["fx_express_ceiling_light_small"] = loadfx( "light/fx_express_ceiling_light_small" ); + level._effect["fx_window_god_ray_sm"] = loadfx( "light/fx_window_god_ray_sm" ); + level._effect["fx_express_train_side_light"] = loadfx( "light/fx_express_train_side_light" ); + level._effect["fx_express_hall_light_one"] = loadfx( "light/fx_express_hall_light_one" ); + level._effect["fx_express_hall_light_5"] = loadfx( "light/fx_express_hall_light_5" ); + level._effect["fx_light_god_ray_mp_slums"] = loadfx( "env/light/fx_light_god_ray_mp_slums" ); + level._effect["fx_express_ceiling_light_xsm"] = loadfx( "light/fx_express_ceiling_light_xsm" ); + level._effect["fx_mp_light_police_car"] = loadfx( "maps/mp_maps/fx_mp_light_police_car" ); + level._effect["fx_drone_rectangle_light_03"] = loadfx( "light/fx_drone_rectangle_light_03" ); + level._effect["fx_express_flood_light"] = loadfx( "light/fx_express_flood_light" ); + level._effect["fx_express_flood_light_beam"] = loadfx( "light/fx_express_flood_light_beam" ); + level._effect["fx_mp_express_vista_smoke01"] = loadfx( "maps/mp_maps/fx_mp_express_vista_smoke01" ); + level._effect["fx_mp_express_vista_fire01"] = loadfx( "maps/mp_maps/fx_mp_express_vista_fire01" ); +} + +precache_createfx_fx() +{ + +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["banner_side_thin"] = %fxanim_mp_express_banner_side_thin_anim; +} diff --git a/MP/Maps/Express/maps/mp/mp_express_train.gsc b/MP/Maps/Express/maps/mp/mp_express_train.gsc new file mode 100644 index 0000000..1b7f7ce --- /dev/null +++ b/MP/Maps/Express/maps/mp/mp_express_train.gsc @@ -0,0 +1,567 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\_events; +#include maps\mp\_tacticalinsertion; +#include maps\mp\killstreaks\_rcbomb; +#include maps\mp\gametypes\_weaponobjects; +#include maps\mp\gametypes\ctf; +#include maps\mp\gametypes\_gameobjects; +#include maps\mp\killstreaks\_supplydrop; + +init() +{ + precachevehicle( "express_train_engine_mp" ); + precachemodel( "p6_bullet_train_car_phys" ); + precachemodel( "p6_bullet_train_engine_rev" ); + precacheshader( "compass_train_carriage" ); + precachestring( &"traincar" ); + precachestring( &"trainengine" ); + gates = getentarray( "train_gate_rail", "targetname" ); + brushes = getentarray( "train_gate_rail_brush", "targetname" ); + triggers = getentarray( "train_gate_kill_trigger", "targetname" ); + traintriggers = getentarray( "train_kill_trigger", "targetname" ); + + foreach ( brush in brushes ) + brush disconnectpaths(); + + waittime = 0.05; + + foreach ( gate in gates ) + { + gate.waittime = waittime; + waittime += 0.05; + gate.og_origin = gate.origin; + brush = getclosest( gate.origin, brushes ); + brush linkto( gate ); + gate.kill_trigger = getclosest( gate.origin, triggers ); + + if ( isdefined( gate.kill_trigger ) ) + { + gate.kill_trigger enablelinkto(); + gate.kill_trigger linkto( gate ); + } + } + + start = getvehiclenode( "train_start", "targetname" ); + endgates = getentarray( "train_gate_rail_end", "targetname" ); + entrygate = getclosest( start.origin, endgates ); + + for ( i = 0; i < endgates.size; i++ ) + { + if ( endgates[i] == entrygate ) + continue; + + exitgate = endgates[i]; + break; + } + + cars = []; + cars[0] = spawnvehicle( "p6_bullet_train_engine_phys", "train", "express_train_engine_mp", start.origin, ( 0, 0, 0 ) ); + cars[0] ghost(); + cars[0] setcheapflag( 1 ); + + foreach ( traintrigger in traintriggers ) + { + cars[0].trainkilltrigger = traintrigger; + traintrigger.origin = start.origin; + traintrigger enablelinkto(); + traintrigger linkto( cars[0] ); + } + + for ( i = 1; i < 20; i++ ) + { + cars[i] = spawn( "script_model", start.origin ); + cars[i] setmodel( "p6_bullet_train_car_phys" ); + cars[i] ghost(); + cars[i] setcheapflag( 1 ); + } + + cars[20] = spawn( "script_model", start.origin ); + cars[20] setmodel( "p6_bullet_train_engine_rev" ); + cars[20] ghost(); + cars[20] setcheapflag( 1 ); + + if ( level.timelimit ) + { + seconds = level.timelimit * 60; + add_timed_event( int( seconds * 0.25 ), "train_start" ); + add_timed_event( int( seconds * 0.75 ), "train_start" ); + } + else if ( level.scorelimit ) + { + add_score_event( int( level.scorelimit * 0.25 ), "train_start" ); + add_score_event( int( level.scorelimit * 0.75 ), "train_start" ); + } + + level thread train_think( gates, entrygate, exitgate, cars, start ); +} + +showaftertime( time ) +{ + wait( time ); + self show(); +} + +train_think( gates, entrygate, exitgate, cars, start ) +{ + level endon( "game_ended" ); + + for (;;) + { + level waittill( "train_start" ); + + entrygate gate_move( -172 ); + traintiming = getdvarfloatdefault( "scr_express_trainTiming", 4.0 ); + exitgate thread waitthenmove( traintiming, -172 ); + array_func( gates, ::gate_move, -172 ); + + foreach ( gate in gates ) + { + gate playloopsound( "amb_train_incomming_beep" ); + gate playsound( "amb_gate_move" ); + } + + gatedownwait = getdvarintdefault( "scr_express_gateDownWait", 2 ); + wait( gatedownwait ); + + foreach ( gate in gates ) + gate stoploopsound( 2 ); + + wait 2; + cars[0] attachpath( start ); + + if ( isdefined( cars[0].trainkilltrigger ) ) + cars[0] thread train_move_think( cars[0].trainkilltrigger ); + + cars[0] startpath(); + cars[0] showaftertime( 0.2 ); + cars[0] thread record_positions(); + cars[0] thread watch_end(); + cars[0] playloopsound( "amb_train_lp" ); + cars[0] setclientfield( "train_moving", 1 ); + next = "_b"; + + for ( i = 1; i < cars.size; i++ ) + { + if ( i == 1 ) + wait 0.4; + else + wait 0.35; + + if ( i >= 3 && i % 3 == 0 ) + { + cars[i] playloopsound( "amb_train_lp" + next ); + + switch ( next ) + { + case "_b": + next = "_c"; + break; + case "_c": + next = "_d"; + break; + case "_d": + next = ""; + break; + default: + next = "_b"; + break; + } + } + + cars[i] thread watch_player_touch(); + + if ( i == cars.size - 1 ) + { + cars[i] thread car_move(); + continue; + } + + cars[i] thread car_move(); + } + + traintiming = getdvarfloatdefault( "scr_express_trainTiming2", 2.0 ); + entrygate thread waitthenmove( traintiming ); + gateupwait = getdvarfloatdefault( "scr_express_gateUpWait", 6.5 ); + wait( gateupwait ); + exitgate gate_move(); + array_func( gates, ::gate_move ); + + foreach ( gate in gates ) + gate playsound( "amb_gate_move" ); + + wait 6; + } +} + +waitthenmove( time, distance ) +{ + wait( time ); + self gate_move( distance ); +} + +record_positions() +{ + self endon( "reached_end_node" ); + + if ( isdefined( level.train_positions ) ) + return; + + level.train_positions = []; + level.train_angles = []; + + for (;;) + { + level.train_positions[level.train_positions.size] = self.origin; + level.train_angles[level.train_angles.size] = self.angles; + wait 0.05; + } +} + +watch_player_touch() +{ + self endon( "end_of_track" ); + self endon( "delete" ); + self endon( "death" ); + + for (;;) + { + self waittill( "touch", entity ); + + if ( isplayer( entity ) ) + entity dodamage( entity.health * 2, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); + } +} + +watch_end() +{ + self waittill( "reached_end_node" ); + + self ghost(); + self setclientfield( "train_moving", 0 ); + self stoploopsound( 0.2 ); + self playsound( "amb_train_end" ); +} + +car_move() +{ + self setclientfield( "train_moving", 1 ); + + for ( i = 0; i < level.train_positions.size; i++ ) + { + self.origin = level.train_positions[i]; + self.angles = level.train_angles[i]; + wait 0.05; + + if ( i == 4 ) + self show(); + } + + self notify( "end_of_track" ); + self ghost(); + self setclientfield( "train_moving", 0 ); + self stoploopsound( 0.2 ); + self playsound( "amb_train_end" ); +} + +gate_rotate( yaw ) +{ + self rotateyaw( yaw, 5 ); +} + +gate_move( z_dist ) +{ + if ( isdefined( self.kill_trigger ) ) + self thread gate_move_think( isdefined( z_dist ) ); + + if ( !isdefined( z_dist ) ) + self moveto( self.og_origin, 5 ); + else + { + self.og_origin = self.origin; + self movez( z_dist, 5 ); + } +} + +train_move_think( kill_trigger ) +{ + self endon( "movedone" ); + + for (;;) + { + wait 0.05; + pixbeginevent( "train_move_think" ); + entities = getdamageableentarray( self.origin, 200 ); + + foreach ( entity in entities ) + { + if ( isdefined( entity.targetname ) && entity.targetname == "train" ) + continue; + + if ( isplayer( entity ) ) + continue; + + if ( !entity istouching( kill_trigger ) ) + continue; + + if ( isdefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" ) + { + entity maps\mp\_tacticalinsertion::destroy_tactical_insertion(); + continue; + } + + if ( !isalive( entity ) ) + continue; + + if ( isdefined( entity.targetname ) ) + { + if ( entity.targetname == "talon" ) + { + entity notify( "death" ); + continue; + } + else if ( entity.targetname == "rcbomb" ) + { + entity maps\mp\killstreaks\_rcbomb::rcbomb_force_explode(); + continue; + } + else if ( entity.targetname == "riotshield_mp" ) + { + entity dodamage( 1, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); + continue; + } + } + + if ( isdefined( entity.helitype ) && entity.helitype == "qrdrone" ) + { + watcher = entity.owner maps\mp\gametypes\_weaponobjects::getweaponobjectwatcher( "qrdrone" ); + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined ); + continue; + } + + if ( entity.classname == "grenade" ) + { + if ( !isdefined( entity.name ) ) + continue; + + if ( !isdefined( entity.owner ) ) + continue; + + if ( entity.name == "proximity_grenade_mp" ) + { + watcher = entity.owner getwatcherforweapon( entity.name ); + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined, "script_mover_mp" ); + continue; + } + + if ( !isweaponequipment( entity.name ) ) + continue; + + watcher = entity.owner getwatcherforweapon( entity.name ); + + if ( !isdefined( watcher ) ) + continue; + + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined, "script_mover_mp" ); + continue; + } + + if ( entity.classname == "auto_turret" ) + { + if ( !isdefined( entity.damagedtodeath ) || !entity.damagedtodeath ) + entity domaxdamage( self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); + + continue; + } + + entity dodamage( entity.health * 2, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); + } + + self destroy_supply_crates(); + + if ( level.gametype == "ctf" ) + { + foreach ( flag in level.flags ) + { + if ( flag.curorigin != flag.trigger.baseorigin && flag.visuals[0] istouching( kill_trigger ) ) + flag maps\mp\gametypes\ctf::returnflag(); + } + } + else if ( level.gametype == "sd" && !level.multibomb ) + { + if ( level.sdbomb.visuals[0] istouching( kill_trigger ) ) + level.sdbomb maps\mp\gametypes\_gameobjects::returnhome(); + } + + pixendevent(); + } +} + +gate_move_think( ignoreplayers ) +{ + self endon( "movedone" ); + corpse_delay = 0; + + if ( isdefined( self.waittime ) ) + wait( self.waittime ); + + for (;;) + { + wait 0.4; + pixbeginevent( "gate_move_think" ); + entities = getdamageableentarray( self.origin, 100 ); + + foreach ( entity in entities ) + { + if ( ignoreplayers == 1 && isplayer( entity ) ) + continue; + + if ( !entity istouching( self.kill_trigger ) ) + continue; + + if ( isdefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" ) + { + entity maps\mp\_tacticalinsertion::destroy_tactical_insertion(); + continue; + } + + if ( !isalive( entity ) ) + continue; + + if ( isdefined( entity.targetname ) ) + { + if ( entity.targetname == "talon" ) + { + entity notify( "death" ); + continue; + } + else if ( entity.targetname == "rcbomb" ) + { + entity maps\mp\killstreaks\_rcbomb::rcbomb_force_explode(); + continue; + } + else if ( entity.targetname == "riotshield_mp" ) + { + entity dodamage( 1, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); + continue; + } + } + + if ( isdefined( entity.helitype ) && entity.helitype == "qrdrone" ) + { + watcher = entity.owner maps\mp\gametypes\_weaponobjects::getweaponobjectwatcher( "qrdrone" ); + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined ); + continue; + } + + if ( entity.classname == "grenade" ) + { + if ( !isdefined( entity.name ) ) + continue; + + if ( !isdefined( entity.owner ) ) + continue; + + if ( entity.name == "proximity_grenade_mp" ) + { + watcher = entity.owner getwatcherforweapon( entity.name ); + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined, "script_mover_mp" ); + continue; + } + + if ( !isweaponequipment( entity.name ) ) + continue; + + watcher = entity.owner getwatcherforweapon( entity.name ); + + if ( !isdefined( watcher ) ) + continue; + + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined, "script_mover_mp" ); + continue; + } + + if ( entity.classname == "auto_turret" ) + { + if ( !isdefined( entity.damagedtodeath ) || !entity.damagedtodeath ) + entity domaxdamage( self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); + + continue; + } + + entity dodamage( entity.health * 2, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); + } + + self destroy_supply_crates(); + + if ( gettime() > corpse_delay ) + self destroy_corpses(); + + if ( level.gametype == "ctf" ) + { + foreach ( flag in level.flags ) + { + if ( flag.visuals[0] istouching( self.kill_trigger ) ) + flag maps\mp\gametypes\ctf::returnflag(); + } + } + else if ( level.gametype == "sd" && !level.multibomb ) + { + if ( level.sdbomb.visuals[0] istouching( self.kill_trigger ) ) + level.sdbomb maps\mp\gametypes\_gameobjects::returnhome(); + } + + pixendevent(); + } +} + +getwatcherforweapon( weapname ) +{ + if ( !isdefined( self ) ) + return undefined; + + if ( !isplayer( self ) ) + return undefined; + + for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) + { + if ( self.weaponobjectwatcherarray[i].weapon != weapname ) + continue; + + return self.weaponobjectwatcherarray[i]; + } + + return undefined; +} + +destroy_supply_crates() +{ + crates = getentarray( "care_package", "script_noteworthy" ); + + foreach ( crate in crates ) + { + if ( distancesquared( crate.origin, self.origin ) < 10000 ) + { + if ( crate istouching( self ) ) + { + playfx( level._supply_drop_explosion_fx, crate.origin ); + playsoundatposition( "wpn_grenade_explode", crate.origin ); + wait 0.1; + crate maps\mp\killstreaks\_supplydrop::cratedelete(); + } + } + } +} + +destroy_corpses() +{ + corpses = getcorpsearray(); + + for ( i = 0; i < corpses.size; i++ ) + { + if ( distancesquared( corpses[i].origin, self.origin ) < 10000 ) + corpses[i] delete(); + } +} diff --git a/MP/Maps/Frost/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Frost/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Frost/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Frost/aitype/enemy_dog_mp.gsc b/MP/Maps/Frost/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Frost/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Frost/character/character_mp_german_shepherd.gsc b/MP/Maps/Frost/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Frost/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Frost/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Frost/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Frost/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Frost/clientscripts/mp/_fxanim_dlc4.csc b/MP/Maps/Frost/clientscripts/mp/_fxanim_dlc4.csc new file mode 100644 index 0000000..4e385a4 --- /dev/null +++ b/MP/Maps/Frost/clientscripts/mp/_fxanim_dlc4.csc @@ -0,0 +1,239 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; + +fxanim_init_dlc( localclientnum ) +{ + a_fxanims = getentarray( localclientnum, "fxanim_dlc4", "targetname" ); + assert( a_fxanims.size <= level.fxanim_max_anims ); + + for ( i = 0; i < a_fxanims.size; i++ ) + { + if ( isdefined( a_fxanims[i].fxanim_parent ) ) + { + parent = getent( localclientnum, a_fxanims[i].fxanim_parent, "targetname" ); + a_fxanims[a_fxanims.size] = parent; + a_fxanims[i] thread _fxanim_model_link( localclientnum ); + continue; + } + + a_fxanims[i] thread fxanim_think( localclientnum ); + } + + if ( isdefined( level.fx_anim_level_dlc_init ) ) + level thread [[ level.fx_anim_level_dlc_init ]]( localclientnum ); +} + +#using_animtree("fxanim_props_dlc4"); + +fxanim_think( localclientnum, random_wait, random_speed ) +{ + self waittill_dobj( localclientnum ); + self thread _fxanim_hide(); + self _fxanim_wait(); + self useanimtree( #animtree ); + n_anim_count = self _fxanim_get_anim_count(); + self notify( "fxanim_start" ); + + for ( n_current_anim = 0; n_current_anim < n_anim_count; n_current_anim++ ) + { + str_scene = self _fxanim_get_scene_name( n_current_anim ); + + if ( !self _fxanim_modifier( str_scene ) ) + { + self _fxanim_animate( str_scene ); + self _fxanim_play_fx( localclientnum ); + } + + self _fxanim_change_anim( n_current_anim ); + } +} + +_fxanim_hide() +{ + if ( isdefined( self.fxanim_hide ) && self.fxanim_hide ) + { + self hide(); + + self waittill( "fxanim_start" ); + + self show(); + } +} + +_fxanim_modifier( str_scene ) +{ + switch ( str_scene ) + { + case "delete": + self delete(); + break; + case "hide": + self hide(); + break; + default: + return false; + break; + } + + return true; +} + +_fxanim_wait() +{ + if ( isdefined( self.fxanim_waittill_1 ) ) + { + if ( isdefined( self.fxanim_waittill_1 ) ) + _fxanim_change_anim( -1 ); + } + + if ( isdefined( self.fxanim_wait ) ) + wait( self.fxanim_wait ); + else if ( isdefined( self.fxanim_wait_min ) && isdefined( self.fxanim_wait_max ) ) + { + n_wait_time = randomfloatrange( self.fxanim_wait_min, self.fxanim_wait_max ); + wait( n_wait_time ); + } +} + +_fxanim_change_anim( n_fxanim_id ) +{ + str_waittill = undefined; + + if ( n_fxanim_id == -1 && isdefined( self.fxanim_waittill_1 ) ) + str_waittill = self.fxanim_waittill_1; + else if ( n_fxanim_id == 0 && isdefined( self.fxanim_waittill_2 ) ) + str_waittill = self.fxanim_waittill_2; + else if ( n_fxanim_id == 1 && isdefined( self.fxanim_waittill_3 ) ) + str_waittill = self.fxanim_waittill_3; + + if ( !isdefined( str_waittill ) && n_fxanim_id != -1 ) + self _fxanim_wait_for_anim_to_end( n_fxanim_id ); + else + { + a_changer = strtok( str_waittill, "_" ); + + level waittill( str_waittill ); + } +} + +_fxanim_wait_for_anim_to_end( n_fxanim_id ) +{ + str_scene = _fxanim_get_scene_name( n_fxanim_id ); + + if ( issubstr( str_scene, "_loop" ) ) + self waittillmatch( "looping anim", "end" ); + else + self waittillmatch( "single anim", "end" ); +} + +_fxanim_animate( str_scene ) +{ + if ( !isdefined( level.scr_anim["fxanim_props_dlc4"][str_scene] ) ) + { +/# + if ( isdefined( str_scene ) ) + println( "Error: fxanim entity at " + self.origin + " is missing animation: " + str_scene ); + else + println( "Error: fxanim entity at " + self.origin + " is missing animation" ); +#/ + return; + } + + self animscripted( level.scr_anim["fxanim_props_dlc4"][str_scene], 1.0, 0.0, 1.0 ); +} + +_fxanim_play_fx( localclientnum ) +{ + if ( isdefined( self.fxanim_fx_1 ) ) + { + assert( isdefined( self.fxanim_fx_1_tag ), "KVP fxanim_fx_1_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_1 ), self, self.fxanim_fx_1_tag ); + } + + if ( isdefined( self.fxanim_fx_2 ) ) + { + assert( isdefined( self.fxanim_fx_2_tag ), "KVP fxanim_fx_2_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_2 ), self, self.fxanim_fx_2_tag ); + } + + if ( isdefined( self.fxanim_fx_3 ) ) + { + assert( isdefined( self.fxanim_fx_3_tag ), "KVP fxanim_fx_3_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_3 ), self, self.fxanim_fx_3_tag ); + } + + if ( isdefined( self.fxanim_fx_4 ) ) + { + assert( isdefined( self.fxanim_fx_4_tag ), "KVP fxanim_fx_4_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_4 ), self, self.fxanim_fx_4_tag ); + } + + if ( isdefined( self.fxanim_fx_5 ) ) + { + assert( isdefined( self.fxanim_fx_5_tag ), "KVP fxanim_fx_5_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_5 ), self, self.fxanim_fx_5_tag ); + } +} + +_fxanim_get_anim_count() +{ + assert( isdefined( self.fxanim_scene_1 ), "fxanim at position " + self.origin + " needs at least one scene defined. Use the KVP fxanim_scene_1" ); + n_fx_count = 0; + + if ( !isdefined( self.fxanim_scene_2 ) ) + n_fx_count = 1; + else if ( !isdefined( self.fxanim_scene_3 ) ) + n_fx_count = 2; + else + n_fx_count = 3; + + return n_fx_count; +} + +_fxanim_get_scene_name( n_anim_id ) +{ + str_scene_name = undefined; + + switch ( n_anim_id ) + { + case 0: + str_scene_name = self.fxanim_scene_1; + break; + case 1: + str_scene_name = self.fxanim_scene_2; + break; + case 2: + str_scene_name = self.fxanim_scene_3; + break; + } + + return str_scene_name; +} + +_fxanim_model_link( localclientnum ) +{ + self waittill_dobj( localclientnum ); + assert( isdefined( self.fxanim_tag ), "Model at origin " + self.origin + " needs an fxanim_tag defined, to show which tag the model will link to" ); + m_parent = getent( localclientnum, self.fxanim_parent, "targetname" ); + assert( isdefined( m_parent ), "Model at origin " + self.origin + " does not have a proper parent. Make sure the fxanim_parent matches the targetname of the fxanim" ); + m_parent waittill_dobj( localclientnum ); + self.origin = m_parent gettagorigin( self.fxanim_tag ); + self.angles = m_parent gettagangles( self.fxanim_tag ); + self linkto( m_parent, self.fxanim_tag ); + + if ( isdefined( self.fxanim_hide ) ) + { + self hide(); + + m_parent waittill( "fxanim_start" ); + + self show(); + } +} + +getfx( fx ) +{ + assert( isdefined( level._effect[fx] ), "Fx " + fx + " is not defined in level._effect." ); + return level._effect[fx]; +} diff --git a/MP/Maps/Frost/clientscripts/mp/createfx/mp_frostbite_fx.csc b/MP/Maps/Frost/clientscripts/mp/createfx/mp_frostbite_fx.csc new file mode 100644 index 0000000..5503391 --- /dev/null +++ b/MP/Maps/Frost/clientscripts/mp/createfx/mp_frostbite_fx.csc @@ -0,0 +1,2862 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_chimney_smk" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -410.489, 345.821, 558.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -431.489, 871.849, 214.527 ); + ent.v["angles"] = ( 347, 90, 0 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1246.37, 304.34, 189.397 ); + ent.v["angles"] = ( 347, 90, 0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1050.76, 314.52, 206.873 ); + ent.v["angles"] = ( 347, 90, 0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1115.24, 1032.81, 101.825 ); + ent.v["angles"] = ( 347.877, 111.503, -4.72963 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1053.44, 1180.17, 108.399 ); + ent.v["angles"] = ( 359.172, 123.419, -7.22717 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 983.494, 1598.5, 61.6371 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 818.352, 1591.27, 63.3892 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 678.869, 1602.85, 71.7692 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1584.13, 678.159, 124.486 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1800.8, 688.808, 126.639 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1301.85, 709.648, 130.766 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1350.78, 545.744, 132.122 ); + ent.v["angles"] = ( 339.112, 104.574, 0.26208 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1606.44, 547.41, 125.742 ); + ent.v["angles"] = ( 339.112, 104.574, 0.26208 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1859.05, 541.8, 121.616 ); + ent.v["angles"] = ( 339.112, 104.574, 0.26208 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1711.23, -248.152, 119.149 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1585.66, -343.091, 141.168 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1578.81, -489.108, 144.886 ); + ent.v["angles"] = ( 350.001, 93.0331, -0.996706 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2048.52, -531.028, 25.1159 ); + ent.v["angles"] = ( 356.994, 87.982, 0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 956.886, -106.427, 69.6195 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -193.875, -20.1535, 63.7605 ); + ent.v["angles"] = ( 335.303, 102.934, -2.95054 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 147.72, 54.2082, 64.3255 ); + ent.v["angles"] = ( 333.719, 118.933, -3.79815 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -572.565, -440.487, 64.125 ); + ent.v["angles"] = ( 348.422, 98.22, 2.98695 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1606.71, 880.84, 110.08 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1415.67, 794.614, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 112.0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 896.915, 789.888, 56.1301 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 847.485, 1042.18, 0.742375 ); + ent.v["angles"] = ( 354, 109, 0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 964.191, 1168.55, 2.37129 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 110.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 438.593, 1612.08, 76.2332 ); + ent.v["angles"] = ( 345, 142, 0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 6.27805, 1143.96, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 55.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -586.372, 1120.37, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 76.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1161.95, 733.162, 65.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 76.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1318.87, 503.012, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 41.0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1639.08, 355.24, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 41.0 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1622.95, 72.4744, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 41.0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1820.12, -253.217, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 54.0 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1475.96, -443.467, 56.125 ); + ent.v["angles"] = ( 355, 47, 0 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1409.93, -618.197, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 62.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1426.87, -917.553, 0.125003 ); + ent.v["angles"] = ( 345.084, 85.7899, 1.60435 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -105.279, -1188.07, 48.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 47.0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 471.92, -815.453, -40.3381 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 119.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1447.43, -315.122, 48.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 100.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1452.07, -513.203, 21.0218 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1455.23, -192.242, 5.13793 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 86.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1726.22, -186.785, 4.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 80.0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1761.9, 102.847, 5.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 80.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2169.18, 113.584, 18.125 ); + ent.v["angles"] = ( 351, 108, 0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2124.46, 523.848, 4.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2221.31, 848.326, 11.5135 ); + ent.v["angles"] = ( 353, 116, 0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1454.74, 241.055, -3.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1335.88, 376.854, 13.4588 ); + ent.v["angles"] = ( 346, 40, 0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1984.88, 283.926, -3.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1832.77, 735.174, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 95.0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1470.94, 598.016, 1.31151 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1014.62, 297.766, 47.9473 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 25.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 765.571, 287.984, 56.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 31.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 825.692, 23.3701, 66.1783 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 100.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 667.626, -187.924, 70.0544 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 100.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 404.235, -178.886, 66.3638 ); + ent.v["angles"] = ( 351.138, 89.8779, 1.57542 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -198.611, -85.379, 62.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 73.0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -373.343, -98.6424, 69.8701 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 64.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -553.452, -168.865, 75.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 55.0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1507.88, 255.227, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1194.86, -576.922, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 73.0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 813.295, 871.923, 354.766 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 760.55, 988.125, 363.46 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 517.585, 1024.08, 362.876 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 434.362, 907.079, 359.725 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 438.788, 846.343, 358.271 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_chunk_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 813.539, 862.23, 354.23 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_chunk_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 429.893, 862.586, 358.027 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 10.2365, 1441.62, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 55.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -7.47807, 951.592, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 55.0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 221.355, 900.579, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 121.0 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -94.9166, 646.579, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 55.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -567.915, 776.265, 301.943 ); + ent.v["angles"] = ( 347, 90, 0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 136.442, -1097.94, 48.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 47.0 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 762.275, -491.978, 49.6536 ); + ent.v["angles"] = ( 350.945, 85.6623, 4.26175 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1040.67, -958.227, 61.7022 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 56.0 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2488.57, 233.782, 8.37213 ); + ent.v["angles"] = ( 349.111, 105.623, -0.113745 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2594, 587.095, 103.614 ); + ent.v["angles"] = ( 339.112, 104.574, 0.262091 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2434.62, 500.223, 58.4831 ); + ent.v["angles"] = ( 339.112, 104.574, 0.26208 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1353, -540.598, 71.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1947.27, -515.917, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 60.0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1601.17, 292.119, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 52.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1779.07, -130.077, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 50.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -887.939, -571.526, 65.256 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 67.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1527.44, -1146.04, 3.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 67.0 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -148.638, -1125.93, 48.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 52.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 197.25, -1129.5, 48.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 805.686, -935.813, 48.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 646.383, -763.118, 50 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 82.0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1126.07, -941.536, 48 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 54.0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1358.37, -193.483, 16.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 82.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1676.54, 15.1295, 7.125 ); + ent.v["angles"] = ( 360, 51, 3 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1098.81, 257.341, 47.4326 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 54.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2084.11, 130.564, 7.50085 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 108.0 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1474.77, 631.001, 0.37949 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1187.07, 849.917, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 847.56, 967.599, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 825.005, 1380.25, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 30.2135, 1304.47, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 63.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 15.5181, 835.403, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 63.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -104.706, 952.34, 24.125 ); + ent.v["angles"] = ( 0, 85, 1 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -480.859, 1329.24, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 64.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -592.442, 879.355, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 67.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -420.421, 1398.45, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -197.19, 1456.79, 29.2276 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -470.375, 1514.91, 51.4339 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_chimney_smk" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 583.758, 1005.74, 474.885 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1602.64, -353.816, 62.125 ); + ent.v["angles"] = ( 359, 81, 0 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1714.87, -507.254, 62.1776 ); + ent.v["angles"] = ( 359.015, 71, 0.173688 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1551.09, 151.876, 64.125 ); + ent.v["angles"] = ( 359.015, 71, 0.173688 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1187.68, 452.858, 67.125 ); + ent.v["angles"] = ( 359.007, 74, 0.121898 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -538.22, 974.872, -7.87501 ); + ent.v["angles"] = ( 359.007, 74, 0.121898 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -451.847, 1356.68, -7.875 ); + ent.v["angles"] = ( 359.073, 59, 0.37468 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 58.556, 1288.42, -39.875 ); + ent.v["angles"] = ( 359, 80, 0 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -29.3202, 808.395, -39.875 ); + ent.v["angles"] = ( 359.018, 70, 0.190945 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 364.882, 792.158, 48.125 ); + ent.v["angles"] = ( 341.026, 94.0735, 1.76206 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 230.171, 318.859, -36.875 ); + ent.v["angles"] = ( 359.054, 100, -0.325766 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -81.1179, 222.964, -39.875 ); + ent.v["angles"] = ( 359, 82, 0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 88.5941, -462.377, -39.875 ); + ent.v["angles"] = ( 359.015, 89, -0.173688 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 353.471, -575.646, -39.7823 ); + ent.v["angles"] = ( 359.161, 114.003, -0.545049 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -628.694, -610.456, 64.125 ); + ent.v["angles"] = ( 359, 82, 0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -937.376, -563.239, 64.125 ); + ent.v["angles"] = ( 359.086, 57, 0.406987 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1470.85, -687.672, 64.125 ); + ent.v["angles"] = ( 359.007, 74, 0.121938 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1372.22, -1214.14, 0.124999 ); + ent.v["angles"] = ( 359.048, 63, 0.309198 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -453.814, -118.852, 59.125 ); + ent.v["angles"] = ( 359.412, 27, 0.809476 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -97.3538, -189.934, 64.125 ); + ent.v["angles"] = ( 359.161, 48, 0.544968 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 317.258, -173.916, 64.125 ); + ent.v["angles"] = ( 359.161, 48, 0.544968 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 646.727, -141.862, 64 ); + ent.v["angles"] = ( 359.001, 85, 0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 641.548, 250.853, 56.125 ); + ent.v["angles"] = ( 359.384, 29, 0.788518 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1384.2, 51.6946, 27.9466 ); + ent.v["angles"] = ( 359.005, 87.0031, -0.104551 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1728.83, 166.996, 8.125 ); + ent.v["angles"] = ( 359, 81.0023, 0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2134.42, 182.169, 2.68919 ); + ent.v["angles"] = ( 359, 81.0023, 0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2165.07, 625.896, -2.55444 ); + ent.v["angles"] = ( 359.117, 109.006, -0.46958 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1541.58, 735.416, -7.10956 ); + ent.v["angles"] = ( 359.125, 110.006, -0.484919 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 934.406, 975.899, -1.875 ); + ent.v["angles"] = ( 353.117, 97.9854, 0.648274 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 908.049, 1063.64, -4.64194 ); + ent.v["angles"] = ( 359.044, 98.0044, -0.292465 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 388.586, 1320.35, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 118.0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 391.156, 1366.37, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 136.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1756.81, -177.91, 4.125 ); + ent.v["angles"] = ( 359.005, 87.0032, -0.104552 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1386.7, -803.411, 48.125 ); + ent.v["angles"] = ( 359.015, 91.0037, -0.173688 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2036.4, -808.217, 24.125 ); + ent.v["angles"] = ( 359.015, 91.0037, -0.173688 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1486.42, -693.82, 118.933 ); + ent.v["angles"] = ( 347.512, 106.398, -3.64098 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 753.573, -895.272, 51.711 ); + ent.v["angles"] = ( 359.101, 55, 0.438408 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2176.62, 540.504, 1.125 ); + ent.v["angles"] = ( 359.004, 76, 0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -738.915, -241.185, 56.125 ); + ent.v["angles"] = ( 359.101, 55, 0.438683 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1138.44, 846.245, 64.125 ); + ent.v["angles"] = ( 359.775, 4, 0.974791 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -916.03, 873.045, 48.125 ); + ent.v["angles"] = ( 359.758, 5, 0.970716 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -348.138, 1108.5, 29.8072 ); + ent.v["angles"] = ( 359.007, 74, 0.121898 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -151.757, 986.9, -7.875 ); + ent.v["angles"] = ( 359.072, 59, 0.374769 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 606.41, 1306.83, -7.875 ); + ent.v["angles"] = ( 359.223, 120.004, -0.629463 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1373.09, -540.03, 37.6918 ); + ent.v["angles"] = ( 359, 81.0021, 0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1357.6, -170.922, 6.88836 ); + ent.v["angles"] = ( 359.015, 91.0037, -0.173688 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 985.956, 236.273, 60.1623 ); + ent.v["angles"] = ( 359.117, 53, 0.470148 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -118.412, -1152.74, 48.125 ); + ent.v["angles"] = ( 359.152, 49, 0.529983 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -38.1773, -946.719, 48.125 ); + ent.v["angles"] = ( 359.152, 49, 0.529983 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1185.74, -1134.3, 0.125002 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 107.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1617.67, -830.019, 24.125 ); + ent.v["angles"] = ( 359.441, 25, 0.829067 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1180.23, 161.84, 46.5162 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 50.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1246.97, -680.621, 131.315 ); + ent.v["angles"] = ( 350, 57, 0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1081.1, -672.172, 123.234 ); + ent.v["angles"] = ( 345.511, 117.938, -6.63063 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 721.319, -761.369, 48 ); + ent.v["angles"] = ( 359.101, 55, 0.438408 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1791.16, -494.816, 147.983 ); + ent.v["angles"] = ( 350.001, 93.0331, -0.996706 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1673.27, -477.141, 133.197 ); + ent.v["angles"] = ( 359.015, 91.0037, -0.173688 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2603.76, 361.873, -8.00089 ); + ent.v["angles"] = ( 351.664, 120.67, -3.42382 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2853.56, 226.871, 95.125 ); + ent.v["angles"] = ( 359.018, 93.004, -0.190853 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2521.49, 515.579, 74.125 ); + ent.v["angles"] = ( 359, 82.0024, 0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1468.42, 890.959, -12 ); + ent.v["angles"] = ( 351, 96, 0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 939.064, 1458.78, 2.52471 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2134.51, 1029.12, -6.0777 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2057.36, 718.072, -5.64542 ); + ent.v["angles"] = ( 353.039, 109.955, 0.735323 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2181.79, 810.03, -6.10637 ); + ent.v["angles"] = ( 356.021, 115.015, -0.418838 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1858.92, -24.7925, 4.125 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1530.15, -647.42, 29.9542 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2039.27, -604.254, 24 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 879.474, -602.926, 53.0785 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 22.4628, -829.813, 47.425 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1268.55, -834.513, 6.64585 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1431.55, -1152.96, 0.124998 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1457.25, 62.5908, 64.125 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1663.89, 533.331, 64.125 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1133.82, 829.261, 64.125 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -564.761, 887.933, -7.875 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -443.449, 1479.25, -3.93508 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 360.297, 860.369, -7.875 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 386.249, 774.188, 2.12499 ); + ent.v["angles"] = ( 351, 100, 0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_frostbite_sun" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 41470.8, 81474.9, 43760 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -119.515, 714.995, 234.125 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -121.215, 498.973, 235.875 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 0.945453, 152.573, 44.4503 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 88.3126, 150.984, 50.2095 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 176.908, 151.647, 44.69 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 175.22, -231.261, 44.9506 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 107.641, -231.622, 49.9984 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5.23104, -231.641, 45.0699 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 473.388, -848.948, 39.2421 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 353.452, -907.799, 38.0944 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1680.42, -120.351, 70.1039 ); + ent.v["angles"] = ( 358, 82.9831, 0.965522 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 176.805, -183.083, 83.2543 ); + ent.v["angles"] = ( 359.021, 93.0025, -0.208115 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -184.008, -165.872, 74.1696 ); + ent.v["angles"] = ( 348.681, 96.7193, 2.30019 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1695.96, 938.254, 145.382 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -109.235, 922.993, -15.7688 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -47.8003, 995.466, -17.8811 ); + ent.v["angles"] = ( 270, 0, -180 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -53.9125, 1100.05, -18.4345 ); + ent.v["angles"] = ( 270, 0, -180 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -56.3575, 1143.1, -17.7955 ); + ent.v["angles"] = ( 270, 0, -180 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -51.8492, 964.058, -17.6728 ); + ent.v["angles"] = ( 270, 0, -180 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 904.312, 364.054, 212.564 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 97.8298, 688.346, -39.875 ); + ent.v["angles"] = ( 359.038, 97, -0.275805 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -613.823, -163.819, 230.402 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1438.62, -553.801, 225.401 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1780.81, 365.135, -4.54347 ); + ent.v["angles"] = ( 335.842, 63.1266, -9.91443 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 303.815, 1584.29, 11.125 ); + ent.v["angles"] = ( 359.066, 102.002, -0.358535 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 79.9812, 1587.66, 15.125 ); + ent.v["angles"] = ( 359.087, 105.003, -0.406902 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -131.016, 1575.53, 20.125 ); + ent.v["angles"] = ( 359.066, 102.002, -0.358535 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -337.805, 1590.17, 28.125 ); + ent.v["angles"] = ( 359.066, 102.002, -0.358535 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -462.52, 1829.52, 7.125 ); + ent.v["angles"] = ( 359.086, 56.9967, 0.406767 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -454.152, 1767.29, 0.406441 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 41.0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 452.453, 1743.78, 81.7499 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 146.0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1019.15, -157.945, 306.375 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1291.63, 120.656, 222.375 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1063.27, 120.605, 225.187 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 863.798, -182.834, 305.521 ); + ent.v["angles"] = ( 270, 359.905, 0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1335.07, -424.906, 309.375 ); + ent.v["angles"] = ( 270, 359.905, 0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1336.77, 4.01327, 310.375 ); + ent.v["angles"] = ( 270, 359.905, 0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1544.59, -826.478, 31.2257 ); + ent.v["angles"] = ( 350.001, 93.0331, -0.996706 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1246.73, -919.276, 54.3458 ); + ent.v["angles"] = ( 350.315, 71.718, 2.6881 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 677.951, -908.931, 50 ); + ent.v["angles"] = ( 354.116, 76.9159, 1.80844 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -509.049, 1078.32, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 81.0 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -570.664, 889.785, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 71.0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -530.672, 1213.73, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 71.0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -431.572, 1414.29, -7.99274 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 46.0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 835.712, 471.239, 479.875 ); + ent.v["angles"] = ( 270, 0, 179.901 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 719.826, 416.339, 65.811 ); + ent.v["angles"] = ( 356.372, 177.167, 0.406507 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1017.68, 772.637, 51.125 ); + ent.v["angles"] = ( 359.594, 267.193, -3.62858 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1029.78, 476.913, 64.125 ); + ent.v["angles"] = ( 354.602, 13.1157, 0.454655 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -634.827, 180.489, 64 ); + ent.v["angles"] = ( 358.409, 93.2084, 0.757363 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2194.49, -312.139, 74.3089 ); + ent.v["angles"] = ( 353.466, 89.1312, 0.871874 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1715.12, 398.506, 79.125 ); + ent.v["angles"] = ( 354.824, 163.312, -0.529949 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -536.661, -571.927, 73.314 ); + ent.v["angles"] = ( 356.558, 36.0075, -0.249026 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2212.07, -88.4093, 167.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2211.75, -32.2866, 167.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2211.91, -144.432, 167.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2212.01, -212.255, 167.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2211.77, 35.9239, 167.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2348.19, -211.986, 167.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2347.86, -143.895, 167.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2347.94, -87.5297, 167.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2348, -31.8133, 167.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2348.25, 36.2742, 167.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1545.38, -153.517, 55.2496 ); + ent.v["angles"] = ( 351, 96, 0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 319.632, 1197.52, 55.5851 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 110.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 738.551, 1299.39, 303.967 ); + ent.v["angles"] = ( 22, 102, 0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 560.327, 1662.16, 336.292 ); + ent.v["angles"] = ( 22, 102, 0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 737.605, 1294.06, 422.5 ); + ent.v["angles"] = ( 27, 102, 0 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 550.529, 1666.92, 248.605 ); + ent.v["angles"] = ( 27, 102, 0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1379.36, 1149.97, 281.679 ); + ent.v["angles"] = ( 20, 102, 0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1378.42, 1144.64, 400.212 ); + ent.v["angles"] = ( 26, 102, 0 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2454.68, 947.644, 288.593 ); + ent.v["angles"] = ( 21, 102, 0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2466.08, 822.952, 477.126 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 102.0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2343.11, 956.299, 557.35 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 102.0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1557.37, 47.3453, 306.023 ); + ent.v["angles"] = ( 25, 102, 0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1666.6, -434.781, 331.211 ); + ent.v["angles"] = ( 25, 102, 0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1720.85, 622.439, 334.574 ); + ent.v["angles"] = ( 25, 102, 0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2098.39, -790.417, 416.859 ); + ent.v["angles"] = ( 19.7257, 141.742, 15.6757 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2483.7, -654.214, 467.06 ); + ent.v["angles"] = ( 344.255, 114.673, 6.95148 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 446.458, 2020.81, 80.702 ); + ent.v["angles"] = ( 0.809128, 138, 0.58791 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -583.849, 2010.61, 227.343 ); + ent.v["angles"] = ( 0.615642, 49.9945, -0.788041 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -492.857, 1615.97, 143.168 ); + ent.v["angles"] = ( 338.472, 40.3506, -0.949152 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1127.08, 702.297, 415.212 ); + ent.v["angles"] = ( 0.987837, 93, -0.156472 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -609.056, 794.417, 355.914 ); + ent.v["angles"] = ( 0.987837, 93, -0.156472 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -930.989, 592.953, 406.04 ); + ent.v["angles"] = ( 0.987837, 93, -0.156472 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 757.411, -276.072, 310.351 ); + ent.v["angles"] = ( 346.956, 92.134, -0.534579 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1981.87, 76.7472, 163.875 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1779.69, -210.987, 42.8888 ); + ent.v["angles"] = ( 349.994, 87.9819, 0 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1846.66, -235.209, 124.026 ); + ent.v["angles"] = ( 349.994, 87.9819, 0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1274.78, 485.401, 65.0418 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 35.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1475.35, 415.719, 64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 37.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1641.93, 337.837, 65.9317 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 53.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1164.76, 545.027, 64.2798 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_chimney_smk" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 952.394, -255.476, 439.441 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1295.5, 120.776, 319.345 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1036.88, -12.5229, 322.325 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 182.0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 992.091, -473.273, 319.836 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1339.32, -301.811, 322.722 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -153.875, 315.849, 319.69 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -696.893, 798.455, 336.682 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -987.525, 551.876, 335.086 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -981.479, 449.099, 334.525 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -825.558, 153.875, 303.339 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 629.055, -473.713, 296.451 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1186.38, -993.517, 376.161 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1447.81, -993.863, 376.046 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_chunk_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 623.649, -231.069, 295.529 ); + ent.v["angles"] = ( 90, 0, 179 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2965.28, 32.1701, 67 ); + ent.v["angles"] = ( 0.998781, 98.9983, 0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2909.21, 374.637, -2.36977 ); + ent.v["angles"] = ( 342.985, 111.944, 0.181592 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2211.08, -753.5, 170.351 ); + ent.v["angles"] = ( 359.002, 78, 0 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1684.52, 525.223, 64.6333 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 38.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1543.51, 515.486, 64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 22.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -179.607, 1001.79, -7.39586 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 72.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -70.9618, -202.45, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 50.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 89.7697, -206.78, 65.8984 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 50.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -268.2, -54.6696, 61.7318 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 51.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2004.59, -456.457, 60 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 23.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1988.81, -524.631, 69.4282 ); + ent.v["angles"] = ( 349.97, 83.8935, 0.595943 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1734.62, -495.639, 63.6133 ); + ent.v["angles"] = ( 349.97, 83.8935, 0.595943 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2012.05, -523.307, 67.9184 ); + ent.v["angles"] = ( 359.015, 71, 0.173688 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1324.67, -525.669, 68.0264 ); + ent.v["angles"] = ( 359.015, 71, 0.173688 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -837.909, -212.76, 77.0417 ); + ent.v["angles"] = ( 359.018, 70, 0.190854 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -827.306, -151.857, 71.5522 ); + ent.v["angles"] = ( 359.212, 55.2079, 1.5764 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -470.121, -54.566, 60.2087 ); + ent.v["angles"] = ( 353.383, 49.0361, 1.6611 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -741.985, -8.33043, 74.9382 ); + ent.v["angles"] = ( 359.13, 58.2071, 1.53299 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1174.47, 223.719, 42.7213 ); + ent.v["angles"] = ( 359.117, 53, 0.470148 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2069.54, 196.152, 6.95731 ); + ent.v["angles"] = ( 347.512, 106.398, -3.64098 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2151.72, 350.151, -8.66062 ); + ent.v["angles"] = ( 344.098, 94.1367, -0.306592 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2330.17, 357.681, 0.251548 ); + ent.v["angles"] = ( 340.204, 119.783, -9.56968 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -628.145, 583.744, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -612.221, 584.037, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -676.405, 584.157, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -692.108, 583.929, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -740.287, 584.083, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -756.268, 584.176, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -804.318, 583.911, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -564.085, 584.13, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -804.068, 471.876, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -756.04, 472.073, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -740.036, 472.031, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -691.735, 472.299, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -676.083, 472.249, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -627.783, 472.244, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -612.054, 472.152, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -563.875, 472.303, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -588.083, 496.533, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -588.57, 559.911, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -652.028, 559.725, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -652.167, 495.684, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -716.395, 559.682, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -715.931, 495.709, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -779.788, 559.962, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -780.142, 495.953, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -918.872, 561.926, 191.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -919.193, 521.906, 191.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -919.142, 481.791, 191.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -756.105, 716.763, 159.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -724.218, 716.756, 159.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -691.938, 716.676, 159.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -556.311, 716.537, 159.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -523.992, 716.617, 159.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -492.089, 716.643, 159.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -673.686, 352.048, 191.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -633.822, 351.97, 191.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -593.718, 351.878, 191.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -572.118, 256.433, 187.575 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -608.279, 256.786, 187.575 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -671.999, 256.31, 187.575 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -708.757, 256.097, 187.575 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -985.622, 522.284, 195.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -985.995, 490.197, 195.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -985.807, 554.107, 195.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -147.746, 349.428, 77.4991 ); + ent.v["angles"] = ( 270, 359.901, -179.901 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -130.365, 718.736, 94.0113 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -69.7436, 1086.44, 99.875 ); + ent.v["angles"] = ( 270, 359.901, -179.901 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1277.93, 668.74, 210.771 ); + ent.v["angles"] = ( 270, 3.81407, 87.1858 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -491.229, 813.631, 201.062 ); + ent.v["angles"] = ( 270, 359.684, 5.31557 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -69.8698, 1414.98, 99.875 ); + ent.v["angles"] = ( 270, 359.901, -179.901 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -70.0592, 1553.68, 99.875 ); + ent.v["angles"] = ( 270, 359.901, -179.901 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -58.3877, 1529.13, -14.899 ); + ent.v["angles"] = ( 270, 0, -180 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -58.9324, 1485.83, -15.538 ); + ent.v["angles"] = ( 270, 0, -180 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -59.8564, 1437.14, -16.5071 ); + ent.v["angles"] = ( 270, 0, -180 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 413.391, -882.922, 43.487 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -78.5497, 595.372, 312.502 ); + ent.v["angles"] = ( 353.758, 58.0399, 0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1621.32, -601.125, 32.5399 ); + ent.v["angles"] = ( 359.792, 3.00146, 0.978294 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 440.55, 82.2872, 227.902 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1078.18, 1067.26, 198.452 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1519.31, 715.491, 290.503 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2240.96, -505.341, 225.006 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 189.387, 574.554, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 148.949, -176.413, -39.875 ); + ent.v["angles"] = ( 359.054, 100, -0.325766 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 59.6543, 7.3049, -39.875 ); + ent.v["angles"] = ( 359.054, 100, -0.325766 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 191.521, 176.221, -39.875 ); + ent.v["angles"] = ( 359.012, 90, -0.15653 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 646.83, 1177.61, -7.40227 ); + ent.v["angles"] = ( 359.044, 98.0044, -0.292465 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 893.525, 1336.91, -4.45304 ); + ent.v["angles"] = ( 359.546, 144.005, -0.891078 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 493.85, 1045.75, -3.60695 ); + ent.v["angles"] = ( 359.546, 144.005, -0.891078 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 724.871, 926.826, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 680.885, 978.213, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 617.398, 989.344, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 519.396, 989.226, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 467.53, 970.443, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 467.879, 846.393, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 467.446, 584.399, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 520.44, 538.792, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 652.975, 539.156, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 776.723, 538.757, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 776.689, 636.819, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 724.557, 670.356, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 707.93, 950.34, 125.294 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 762.63, -453.732, 54.2509 ); + ent.v["angles"] = ( 359.012, 90.0021, -0.15661 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 726.064, -500.123, 56.6932 ); + ent.v["angles"] = ( 350.087, 77.8026, 1.65161 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 820.792, -353.297, 63.0578 ); + ent.v["angles"] = ( 350.484, 106.216, -3.24047 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 726.256, -246.003, 69.0802 ); + ent.v["angles"] = ( 350.036, 79.8322, 1.30142 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 763.402, -434.982, 105.967 ); + ent.v["angles"] = ( 0.984956, 92, -0.17369 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 120.788, -320.239, -39.875 ); + ent.v["angles"] = ( 0.984956, 92, -0.173691 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -22.2062, 577.305, -35.875 ); + ent.v["angles"] = ( 0.839808, 69, -0.545426 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 409.424, -906.023, -31.875 ); + ent.v["angles"] = ( 0.891133, 129, 0.454096 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1381.93, -369.306, 61.0835 ); + ent.v["angles"] = ( 359.775, 4.0015, 0.975713 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1075.51, -370.446, 62.5436 ); + ent.v["angles"] = ( 359.707, 8, 0.957625 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1985.65, -885.882, 64.2012 ); + ent.v["angles"] = ( 353.575, 88.6049, 2.01385 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1984.01, -1212.78, 0.125 ); + ent.v["angles"] = ( 353.575, 88.6049, 2.01385 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1904.67, -1075.63, 0.125004 ); + ent.v["angles"] = ( 355.84, 347.233, -2.75015 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1370.94, -1269.43, 3.54739 ); + ent.v["angles"] = ( 358.746, 29.1856, -4.82541 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1114.85, -1074.67, 16.125 ); + ent.v["angles"] = ( 356.735, 12.9681, 1.11715 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1117.14, -1019.28, 16.125 ); + ent.v["angles"] = ( 357.038, 0.954152, 1.77207 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -381.085, -1062.64, 56.125 ); + ent.v["angles"] = ( 2.08232, 158.95, 0.247645 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -357.283, -1033.74, 49.7454 ); + ent.v["angles"] = ( 356.082, 158.924, 0.248061 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -596.978, -1773.58, 151.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 12.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 121.665, -1911.25, 126.952 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 12.0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3071.03, 58.8564, 88.9139 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 95.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2837.56, -398.468, 181.837 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 80.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3206.13, 601.127, 119.138 ); + ent.v["angles"] = ( 359.054, 75.9962, 0.325583 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2880.34, 1222.72, 74.7587 ); + ent.v["angles"] = ( 359.109, 122, -0.454113 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2873.16, 1021.29, 131.727 ); + ent.v["angles"] = ( 359.305, 141, -0.719251 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2340.5, 1580.05, 140.024 ); + ent.v["angles"] = ( 359.305, 141, -0.719251 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1754.42, 1484.63, 137.346 ); + ent.v["angles"] = ( 359.268, 138, -0.681895 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1361.96, 2043.41, 145.807 ); + ent.v["angles"] = ( 359.577, 160, -0.906323 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 591.842, 2041.84, 105.95 ); + ent.v["angles"] = ( 358.347, 139.009, -0.33636 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -400.232, 1990.04, 13.6441 ); + ent.v["angles"] = ( 359.956, 39.0038, 1.68644 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 69.9684, 2107.88, 1.28343 ); + ent.v["angles"] = ( 358.593, 93.9933, 0.931464 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1428.53, 887.863, 219.72 ); + ent.v["angles"] = ( 358.318, 132.007, -0.132113 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2953.45, -863.059, 101.125 ); + ent.v["angles"] = ( 358.593, 93.9938, 0.931424 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2826.46, -347.518, 119.125 ); + ent.v["angles"] = ( 358.593, 93.9938, 0.931424 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2688.62, -669.493, 92.125 ); + ent.v["angles"] = ( 359.571, 88.8153, 2.00125 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2367.93, -1707.65, 35.2581 ); + ent.v["angles"] = ( 1.33836, 345.017, 1.02694 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1639.5, -1843.9, 67.2 ); + ent.v["angles"] = ( 1.33836, 345.017, 1.02694 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1093.47, -1985.6, 76.7438 ); + ent.v["angles"] = ( 1.33836, 345.017, 1.02694 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1139.65, 840.667, -4.43884 ); + ent.v["angles"] = ( 359.515, 142.006, -0.874715 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 896.325, 837.169, -3.2757 ); + ent.v["angles"] = ( 359.005, 87.0029, -0.104607 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1454.57, 752.979, -2.9017 ); + ent.v["angles"] = ( 359.026, 94, -0.22497 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 774.531, 1284.86, 34.9642 ); + ent.v["angles"] = ( 359.642, 96.4544, 2.15746 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 450.141, 923.149, 104.737 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -172.875, 844.878, 114.97 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -638.788, 284.317, 101.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 85.0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -990.711, 486.784, 92.1028 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 15.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -497.464, -529.336, 106.2 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 21.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2187, -217.43, 85.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1781.36, 421.173, 90.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -322.625, 841.645, 200.125 ); + ent.v["angles"] = ( 340.029, 98.8078, 1.09128 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2230.5, -410.027, 60 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1961.81, -413.822, 60.012 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2409.31, -406.356, 60.1158 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1567.3, 15.8327, 73.6424 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1129.25, -380.019, 60.1486 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 39.7269, 54.7206, 64 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 618.787, -38.2608, 54.5498 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2087, 299.791, -11.9931 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2283.6, 313.643, -11.5676 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2486.87, 324.088, -11.9918 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 756.071, -344.468, 59.3139 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 782.81, -683.56, 64.1483 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2023.91, -572.185, 25.3241 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 458.531, -931.23, 46.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 273.137, -1036.51, 46.125 ); + ent.v["angles"] = ( 359.293, 36, 0.707153 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 72.4933, -831.49, 48.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 592.736, -1963.96, 157.856 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 12.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2014.75, 843.229, -3.65592 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 105.0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1719.02, 1026.22, -5.80841 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1133.39, 903.992, -0.307993 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 141.0 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1814.78, -105.902, 5.03904 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 141.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1954.54, -33.1109, 71.2383 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -546.664, 893.999, -2.65976 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2089.88, -462.942, 115.954 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -352.048, 527.365, 168.275 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2159.74, -175.033, 203.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2184.14, -175.025, 203.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2208.24, -175.084, 203.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2275.08, -74.1907, 202.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2275.3, -10.3107, 202.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2275.32, 53.7201, 202.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2275.67, 118.469, 202.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2147.16, 118.471, 202.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2211.41, 118.283, 202.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2083.1, 118.329, 202.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2019.25, 118.314, 202.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1955.12, 118.402, 202.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1890.93, 118.367, 202.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1080.96, 570.823, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 951.14, 570.963, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1080.88, 669.162, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 950.7, 669.02, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 973.998, 515.875, 353.876 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1137.16, 681.198, 346.875 ); + ent.v["angles"] = ( 270, 359.664, -1.66394 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 957.381, -682.211, 208.401 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1477.76, -841.114, 13.3145 ); + ent.v["angles"] = ( 332, 77.9739, 0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1667.83, 37.5091, 69.7823 ); + ent.v["angles"] = ( 358.198, 72.9795, 1.29793 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1078.24, 848.467, 65.0004 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 15.0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -564.389, 918.585, -5.75974 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 60.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 327.339, 968.668, -7.79999 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 66.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -77.0725, -8.0472, 64.822 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 41.0 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2346.28, -50.0406, 299.822 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 99.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1984.92, -47.1318, 295.911 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1186.38, 90.2745, 363.951 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 898.6, -223.106, 384.704 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 478.244, -254.185, 346.325 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -487.69, -715.612, 445.474 ); + ent.v["angles"] = ( 350.735, 71.6936, 3.77909 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1019.49, -702.781, 424.311 ); + ent.v["angles"] = ( 350.735, 71.6936, 3.77909 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1127.56, 175.511, 353.106 ); + ent.v["angles"] = ( 356.722, 72.089, 3.73584 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -976.165, 573.195, 396.454 ); + ent.v["angles"] = ( 352.731, 71.8263, 3.75999 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1305.64, 1084.22, 457.041 ); + ent.v["angles"] = ( 351.821, 100.073, -0.113968 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1083.43, 1045.53, 459.697 ); + ent.v["angles"] = ( 353.324, 63.7885, 4.73728 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 546.363, 925.207, 472.706 ); + ent.v["angles"] = ( 356.254, 81.044, 2.24349 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 764.777, 900.444, 414.889 ); + ent.v["angles"] = ( 356.254, 81.044, 2.24349 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1004.61, 618.336, 491.023 ); + ent.v["angles"] = ( 356.254, 81.044, 2.24349 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1370.55, -1018.57, 395.701 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 765.705, -1116.99, 411.094 ); + ent.v["angles"] = ( 349, 94, 0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -761.592, -721.762, 430.575 ); + ent.v["angles"] = ( 350.735, 71.6936, 3.77909 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 346.625, -538.651, -40 ); + ent.v["angles"] = ( 0.669214, 150, 0.743289 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 229.388, 425.756, -40 ); + ent.v["angles"] = ( 356.979, 113.989, 0.208445 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -271.429, 230.294, 430.9 ); + ent.v["angles"] = ( 350.735, 71.6936, 3.77909 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 492.792, 830.757, 420.728 ); + ent.v["angles"] = ( 350.002, 92.9843, 0.176406 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1104.47, -469.625, 319.067 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 492.326, -477.801, 254.576 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 759.308, -993.975, 376.341 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 621.908, -232.911, 297.082 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 408.424, -232.051, 294.804 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 958.807, -155.43, 313.846 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1097.8, -695.668, 410.537 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_lamp_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -966.635, -1277.67, 123.016 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_lamp_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -874.747, -1275.83, 122.786 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_lamp_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -780.595, -1275.62, 122.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2019.23, -143.623, 190.087 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_chimney_smk_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -964.516, 2063.36, 754.845 ); + ent.v["angles"] = ( 344, 91, 0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_chimney_smk_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -966.646, 3773.95, 1013.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2063.53, -97.3347, 130.145 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3009.12, 89.5479, 17.1676 ); + ent.v["angles"] = ( 354, 99, 0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2881.71, -215.273, 80.9792 ); + ent.v["angles"] = ( 354, 99, 0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_chimney_smk_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 867.734, 3940.13, 760.844 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_chimney_smk_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5420.96, 638.022, 980.886 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_chimney_smk_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3671.47, -208.346, 752.855 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1032.59, -1043.08, 118.925 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2185.19, -135.838, 194.875 ); + ent.v["angles"] = ( 271, 89.9982, -89.9982 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1896.46, 211.696, 194.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -947.225, 521.461, 181.877 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -632.545, 316.589, 182.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -444.214, -524.532, 206.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -218.013, 711.447, 394.724 ); + ent.v["angles"] = ( 352.029, 56.5772, 6.05717 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1933.92, 1233.09, 82.9831 ); + ent.v["angles"] = ( 0.881862, 127, 0.468935 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1554.76, 1285.67, 84.6922 ); + ent.v["angles"] = ( 0.828014, 133, 0.558549 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2012.3, -1229.33, 161.096 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_frostbite_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 620.022, 416.273, 206.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1974.48, -634.144, 370.125 ); + ent.v["angles"] = ( 350.735, 71.6936, 3.77909 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1744.28, -687.254, 724.304 ); + ent.v["angles"] = ( 350.735, 71.6936, 3.77909 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2877.44, 458.058, 69.5576 ); + ent.v["angles"] = ( 0.260202, 82.0952, 1.75137 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2122.01, 353.132, 6.10629 ); + ent.v["angles"] = ( 351.351, 91.8108, 2.49977 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1797.96, -530.791, 70.1667 ); + ent.v["angles"] = ( 350.517, 81.92, -17.3009 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_chimney_smk_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 410.348, 618.049, 471.859 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_chimney_smk_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1975.16, -195.772, 517.209 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1573.18, -592.849, 239.055 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1574.87, -594.383, 397.334 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_sign_glow_flick" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1574.36, -593.841, 290.021 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1574.24, -593.745, 448.135 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1573.57, -593.07, 499.804 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1563.42, -606.468, 236.928 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_sign_glow_flick" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1563.08, -606.578, 291.924 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1563.39, -606.898, 344.134 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1563.58, -607.089, 396.288 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1563.31, -606.816, 448.477 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1563.09, -606.594, 500.449 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1573.9, -593.399, 344.739 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_chimney_smk_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -980.858, 2468.4, 923.585 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_chimney_smk_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -859.474, 4174.92, 978.359 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_frostbite_chimney_smk_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1090.74, 3282.06, 950.929 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -76; +} diff --git a/MP/Maps/Frost/clientscripts/mp/mp_frostbite.csc b/MP/Maps/Frost/clientscripts/mp/mp_frostbite.csc new file mode 100644 index 0000000..2eab224 --- /dev/null +++ b/MP/Maps/Frost/clientscripts/mp/mp_frostbite.csc @@ -0,0 +1,22 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_frostbite_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_frostbite_amb; + +main() +{ + clientscripts\mp\_load::main(); + clientscripts\mp\mp_frostbite_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_frostbite_amb::main(); + setdvar( "tu7_cg_deathCamAboveWater", "8" ); + setsaveddvar( "sm_sunshadowsmall", 1 ); + setsaveddvar( "sm_sunsamplesizenear", 0.25 ); + waitforclient( 0 ); +/# + println( "*** Client : mp_frostbite running..." ); +#/ +} diff --git a/MP/Maps/Frost/clientscripts/mp/mp_frostbite_amb.csc b/MP/Maps/Frost/clientscripts/mp/mp_frostbite_amb.csc new file mode 100644 index 0000000..202ab39 --- /dev/null +++ b/MP/Maps/Frost/clientscripts/mp/mp_frostbite_amb.csc @@ -0,0 +1,128 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "frostbite_outdoor", 1 ); + setambientroomreverb( "frostbite_outdoor", "frostbite_outdoor", 1, 1 ); + setambientroomcontext( "frostbite_outdoor", "ringoff_plr", "outdoor" ); + declareambientroom( "frostbite_coffee" ); + setambientroomtone( "frostbite_coffee", "amb_interior_2d", 0.55, 1 ); + setambientroomreverb( "frostbite_coffee", "frostbite_smallroom", 1, 1 ); + setambientroomcontext( "frostbite_coffee", "ringoff_plr", "indoor" ); + declareambientroom( "frostbite_stairs" ); + setambientroomreverb( "frostbite_stairs", "frostbite_hallroom", 1, 1 ); + setambientroomcontext( "frostbite_stairs", "ringoff_plr", "outdoor" ); + declareambientroom( "frostbite_bridge_overhang" ); + setambientroomreverb( "frostbite_bridge_overhang", "frostbite_partialroom", 1, 1 ); + setambientroomcontext( "frostbite_bridge_overhang", "ringoff_plr", "outdoor" ); + declareambientroom( "frostbite_small_house" ); + setambientroomtone( "frostbite_small_house", "amb_interior_2d", 0.55, 1 ); + setambientroomreverb( "frostbite_small_house", "frostbite_smallroom", 1, 1 ); + setambientroomcontext( "frostbite_small_house", "ringoff_plr", "indoor" ); + declareambientroom( "frostbite_wood_house" ); + setambientroomtone( "frostbite_wood_house", "amb_interior_2d", 0.55, 1 ); + setambientroomreverb( "frostbite_wood_house", "frostbite_smallroom", 1, 1 ); + setambientroomcontext( "frostbite_wood_house", "ringoff_plr", "indoor" ); + declareambientroom( "frostbite_watch_house" ); + setambientroomtone( "frostbite_watch_house", "amb_interior_2d", 0.55, 1 ); + setambientroomreverb( "frostbite_watch_house", "frostbite_smallroom", 1, 1 ); + setambientroomcontext( "frostbite_watch_house", "ringoff_plr", "indoor" ); + declareambientroom( "frostbite_tunnel" ); + setambientroomreverb( "frostbite_tunnel", "frostbite_stoneroom", 1, 1 ); + setambientroomcontext( "frostbite_tunnel", "ringoff_plr", "indoor" ); + declareambientroom( "frostbite_bar_sml" ); + setambientroomtone( "frostbite_bar_sml", "amb_interior_2d", 0.55, 1 ); + setambientroomreverb( "frostbite_bar_sml", "frostbite_smallroom", 1, 1 ); + setambientroomcontext( "frostbite_bar_sml", "ringoff_plr", "indoor" ); + declareambientroom( "frostbite_bar_med" ); + setambientroomtone( "frostbite_bar_med", "amb_interior_2d", 0.55, 1 ); + setambientroomreverb( "frostbite_bar_med", "frostbite_mediumroom", 1, 1 ); + setambientroomcontext( "frostbite_bar_med", "ringoff_plr", "indoor" ); + declareambientroom( "frostbite_candy_med" ); + setambientroomtone( "frostbite_candy_med", "amb_interior_2d", 0.55, 1 ); + setambientroomreverb( "frostbite_candy_med", "frostbite_mediumroom", 1, 1 ); + setambientroomcontext( "frostbite_candy_med", "ringoff_plr", "indoor" ); + declareambientroom( "frostbite_candy_sml" ); + setambientroomtone( "frostbite_candy_sml", "amb_interior_2d", 0.55, 1 ); + setambientroomreverb( "frostbite_candy_sml", "frostbite_smallroom", 1, 1 ); + setambientroomcontext( "frostbite_candy_sml", "ringoff_plr", "indoor" ); + thread snd_start_autofx_audio(); + thread snd_play_loopers(); +} + +snd_start_autofx_audio() +{ + snd_play_auto_fx( "fx_mp_frostbite_lamp_post", "amb_street_lights", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_downhill_gust_window", "amb_snow_wind_lp", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_frostbite_snow_flurries", "amb_snow_wind_lp", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_frostbite_circle_light_glare", "amb_inside_lights_sml", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_frostbite_circle_light_glare_flr", "amb_inside_lights_sml", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_frostbite_lamp_int", "amb_bar_light", 0, 0, 0, 0 ); +} + +snd_play_loopers() +{ + playloopat( "amb_tree_wind", ( 753, 1335, 331 ) ); + playloopat( "amb_sewer_drain", ( 1468, 905, -4 ) ); + playloopat( "amb_sewer_drain", ( -1543, -150, 62 ) ); + playloopat( "amb_tree_wind", ( 753, 1335, 331 ) ); + playloopat( "amb_tree_wind", ( 574, 1693, 299 ) ); + playloopat( "amb_tree_wind", ( 1611, 1278, 471 ) ); + playloopat( "amb_tree_wind", ( 2400, 929, 488 ) ); + playloopat( "amb_tree_wind", ( 1725, 605, 483 ) ); + playloopat( "amb_tree_wind", ( 1820, -391, 434 ) ); + playloopat( "amb_tree_wind", ( 2776, -283, 375 ) ); + playloopat( "amb_tree_wind", ( 910, 78, 417 ) ); + playloopat( "amb_tree_wind", ( 1523, 49, 227 ) ); + playloopat( "amb_tree_wind", ( -1708, -291, 337 ) ); + playloopat( "amb_tree_wind", ( -1165, -538, 328 ) ); + playloopat( "amb_tree_wind", ( -1498, -1451, 245 ) ); + playloopat( "amb_tree_wind", ( -1197, -1469, 225 ) ); + playloopat( "amb_tree_wind", ( -150, -1456, 268 ) ); + playloopat( "amb_tree_wind", ( 142, -1457, 234 ) ); + playloopat( "amb_tree_wind", ( 1578, -948, 321 ) ); + playloopat( "amb_tree_wind", ( 2216, -789, 435 ) ); + playloopat( "amb_tree_wind", ( -1701, 679, 315 ) ); + playloopat( "amb_wind_mill", ( -809, 1429, 562 ) ); + playloopat( "amb_fridge_hum", ( 2158, -264, 82 ) ); + playloopat( "amb_neon_sign", ( -1031, -1044, 122 ) ); + playloopat( "amb_neon_sign", ( -2185, -132, 198 ) ); + playloopat( "amb_neon_sign", ( -1898, 210, 199 ) ); + playloopat( "amb_neon_sign", ( -949, 521, 180 ) ); + playloopat( "amb_neon_sign", ( -635, 320, 182 ) ); + playloopat( "amb_neon_sign", ( 620, 412, 208 ) ); + playloopat( "amb_neon_sign", ( -461, -1016, 176 ) ); + playloopat( "amb_neon_sign", ( -444, -524, 208 ) ); + playloopat( "amb_clock_tick", ( 1085, 705, 175 ) ); + playloopat( "amb_clock_tick", ( 2158, -253, 139 ) ); + playloopat( "amb_clock_tick", ( -2370, 147, 176 ) ); + playloopat( "amb_clock_tick", ( -401, -206, 172 ) ); + playloopat( "amb_clock_tick", ( 581, 146, 172 ) ); + playloopat( "amb_curtain_flap", ( 1026, 538, 154 ) ); + playloopat( "amb_curtain_flap", ( 2084, 49, 89 ) ); + playloopat( "amb_curtain_flap", ( 1996, -350, 130 ) ); + playloopat( "amb_curtain_flap", ( 473, 783, 132 ) ); + playloopat( "amb_curtain_flap", ( 501, 991, 133 ) ); + playloopat( "amb_fireplace", ( 466, 668, 95 ) ); + playloopat( "amb_outside_heater", ( -146, 855, 20 ) ); + playloopat( "amb_house_radiator_hum", ( 585, 534, 82 ) ); + playloopat( "amb_house_radiator_hum", ( 1027, 534, 78 ) ); + playloopat( "amb_house_radiator_hum", ( 2185, -432, 51 ) ); + playloopat( "amb_house_radiator_hum", ( 349, 257, 100 ) ); + playloopat( "amb_house_radiator_hum", ( -171, -342, 99 ) ); + playloopat( "amb_house_radiator_hum", ( 433, 502, 95 ) ); + playloopat( "amb_house_radiator_hum", ( 2365, -7, 50 ) ); + playloopat( "amb_dryer", ( 1104, 674, 86 ) ); + playloopat( "amb_dryer", ( 1104, 636, 86 ) ); + playloopat( "amb_flag_flap", ( -1274, 378, 199 ) ); + playloopat( "amb_flag_flap", ( -1035, 382, 197 ) ); + playloopat( "amb_flag_flap", ( -1179, 692, 210 ) ); + playloopat( "amb_flag_flap", ( -1178, 815, 207 ) ); + playloopat( "amb_flag_flap", ( -1178, 937, 207 ) ); + playloopat( "amb_flag_flap", ( -242, 1054, 177 ) ); + playloopat( "amb_flag_flap", ( -376, 1056, 174 ) ); +} diff --git a/MP/Maps/Frost/clientscripts/mp/mp_frostbite_fx.csc b/MP/Maps/Frost/clientscripts/mp/mp_frostbite_fx.csc new file mode 100644 index 0000000..ffb8b1a --- /dev/null +++ b/MP/Maps/Frost/clientscripts/mp/mp_frostbite_fx.csc @@ -0,0 +1,143 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_fxanim_dlc4; +#include clientscripts\mp\createfx\mp_frostbite_fx; +#include clientscripts\mp\_fx; + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_lf_mp_frostbite_sun"] = loadfx( "lens_flares/fx_lf_mp_frostbite_sun" ); + level._effect["fx_mp_frostbite_snow_ledge_runner"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_ledge_runner" ); + level._effect["fx_mp_frostbite_snow_chunk_runner"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_chunk_runner" ); + level._effect["fx_mp_frostbite_snow_gust_runner"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_gust_runner" ); + level._effect["fx_mp_frostbite_snow_fog"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_fog" ); + level._effect["fx_mp_frostbite_snow_flurries"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_flurries" ); + level._effect["fx_mp_frostbite_snow_flurries_fine"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_flurries_fine" ); + level._effect["fx_mp_frostbite_snow_flurries_window"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_flurries_window" ); + level._effect["fx_mp_frostbite_snow_flurries_vista"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_flurries_vista" ); + level._effect["fx_mp_frostbite_snow_gust_sm_runner"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_gust_sm_runner" ); + level._effect["fx_mp_frostbite_snow_swirl_runner"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_swirl_runner" ); + level._effect["fx_mp_frostbite_ground_blow"] = loadfx( "maps/mp_maps/fx_mp_frostbite_ground_blow" ); + level._effect["fx_mp_frostbite_snow_gust_tree"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_gust_tree" ); + level._effect["fx_mp_frostbite_snow_gust_roof"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_gust_roof" ); + level._effect["fx_mp_frostbite_ice_fall_runner"] = loadfx( "maps/mp_maps/fx_mp_frostbite_ice_fall_runner" ); + level._effect["fx_mp_frostbite_ice_fall_sm_runner"] = loadfx( "maps/mp_maps/fx_mp_frostbite_ice_fall_sm_runner" ); + level._effect["fx_mp_frostbite_lamp_post"] = loadfx( "maps/mp_maps/fx_mp_frostbite_lamp_post" ); + level._effect["fx_frostbite_circle_light_glare"] = loadfx( "light/fx_frostbite_circle_light_glare" ); + level._effect["fx_frostbite_circle_light_glare_flr"] = loadfx( "light/fx_frostbite_circle_light_glare_flr" ); + level._effect["fx_mp_frostbite_lamp_int"] = loadfx( "maps/mp_maps/fx_mp_frostbite_lamp_int" ); + level._effect["fx_frostbite_exit_sign"] = loadfx( "light/fx_frostbite_exit_sign" ); + level._effect["fx_mp_frostbite_sign_glow"] = loadfx( "maps/mp_maps/fx_mp_frostbite_sign_glow" ); + level._effect["fx_mp_frostbite_sign_glow_flick"] = loadfx( "maps/mp_maps/fx_mp_frostbite_sign_glow_flick" ); + level._effect["fx_light_track_omni"] = loadfx( "light/fx_light_track_omni" ); + level._effect["fx_mp_frostbite_chimney_smk"] = loadfx( "maps/mp_maps/fx_mp_frostbite_chimney_smk" ); + level._effect["fx_mp_frostbite_chimney_smk_dark"] = loadfx( "maps/mp_maps/fx_mp_frostbite_chimney_smk_dark" ); + level._effect["fx_mp_frostbite_chimney_smk_vista"] = loadfx( "maps/mp_maps/fx_mp_frostbite_chimney_smk_vista" ); + level._effect["fx_mp_frostbite_steam"] = loadfx( "maps/mp_maps/fx_mp_frostbite_steam" ); +} + +#using_animtree("fxanim_props_dlc4"); + +precache_fxanim_props_dlc4() +{ + level.scr_anim["fxanim_props_dlc4"]["pennants_01"] = %fxanim_mp_frost_pennants_01_anim; + level.scr_anim["fxanim_props_dlc4"]["pennants_02"] = %fxanim_mp_frost_pennants_02_anim; + level.scr_anim["fxanim_props_dlc4"]["candy_sign"] = %fxanim_mp_frost_candy_sign_anim; + level.scr_anim["fxanim_props_dlc4"]["crane01"] = %fxanim_mp_frostbite_crane_01_anim; + level.scr_anim["fxanim_props_dlc4"]["crane02"] = %fxanim_mp_frostbite_crane_02_anim; + level.scr_anim["fxanim_props_dlc4"]["crane03"] = %fxanim_mp_frostbite_crane_03_anim; + level.scr_anim["fxanim_props_dlc4"]["crane04"] = %fxanim_mp_frostbite_crane_04_anim; + level.scr_anim["fxanim_props_dlc4"]["crane05"] = %fxanim_mp_frostbite_crane_05_anim; + level.scr_anim["fxanim_props_dlc4"]["river_ice"] = %fxanim_mp_frost_ice_anim; + level.scr_anim["fxanim_props_dlc4"]["river_ice2"] = %fxanim_mp_frost_ice_02_anim; + level.scr_anim["fxanim_props_dlc4"]["gate"] = %fxanim_mp_frost_gate_anim; +} + +fxanim_init( localclientnum ) +{ + level thread clientscripts\mp\_fxanim_dlc4::fxanim_init_dlc( localclientnum ); + + for (;;) + { + level waittill( "snap_processed", snapshotlocalclientnum ); + + if ( snapshotlocalclientnum == localclientnum ) + break; + } + + level thread clientscripts\mp\_fxanim_dlc4::fxanim_init_dlc( localclientnum ); + radar = getent( localclientnum, "fxanim_dlc4_crane", "targetname" ); + + if ( isdefined( radar ) ) + { + if ( !isdefined( level.radar_waits ) ) + { + level.radar_waits = []; + + for ( i = 1; i < 6; i++ ) + level.radar_waits[i] = randomfloatrange( 5, 10 ); + } + + radar thread fxanim_radar_think( localclientnum ); + } +} + +#using_animtree("fxanim_props"); + +precache_fx_anims() +{ + level.scr_anim["fxanim_props"]["laundry"] = %fxanim_gp_dryer_loop_anim; + level.scr_anim["fxanim_props"]["dock_chain"] = %fxanim_mp_ver_stair_chain_sign_anim; + level.fx_anim_level_init = ::fxanim_init; +} + +#using_animtree("fxanim_props_dlc4"); + +fxanim_radar_think( localclientnum ) +{ + self endon( "death" ); + self endon( "entityshutdown" ); + self endon( "delete" ); + self waittill_dobj( localclientnum ); + self useanimtree( #animtree ); + anim_index = 1; + + for (;;) + { + self setflaggedanimrestart( "radar_done" + anim_index, level.scr_anim["fxanim_props_dlc4"]["crane0" + anim_index], 1.0, 0.0, 1.0 ); + + for (;;) + { + self waittill( "radar_done" + anim_index, note ); + + if ( note == "end" ) + break; + } + + wait( level.radar_waits[anim_index] ); + self clearanim( level.scr_anim["fxanim_props_dlc4"]["crane0" + anim_index], 0 ); + anim_index++; + + if ( anim_index > 5 ) + anim_index = 1; + } +} + +main() +{ + clientscripts\mp\createfx\mp_frostbite_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fx_anims(); + precache_fxanim_props_dlc4(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} diff --git a/MP/Maps/Frost/maps/mp/createfx/mp_frostbite_fx.gsc b/MP/Maps/Frost/maps/mp/createfx/mp_frostbite_fx.gsc new file mode 100644 index 0000000..6defb44 --- /dev/null +++ b/MP/Maps/Frost/maps/mp/createfx/mp_frostbite_fx.gsc @@ -0,0 +1,2862 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -410.489, 345.821, 558.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -431.489, 871.849, 214.527 ); + ent.v["angles"] = ( 347, 90, 0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1246.37, 304.34, 189.397 ); + ent.v["angles"] = ( 347, 90, 0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1050.76, 314.52, 206.873 ); + ent.v["angles"] = ( 347, 90, 0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1115.24, 1032.81, 101.825 ); + ent.v["angles"] = ( 347.877, 111.503, -4.72963 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1053.44, 1180.17, 108.399 ); + ent.v["angles"] = ( 359.172, 123.419, -7.22717 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 983.494, 1598.5, 61.6371 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 818.352, 1591.27, 63.3892 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 678.869, 1602.85, 71.7692 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1584.13, 678.159, 124.486 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1800.8, 688.808, 126.639 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1301.85, 709.648, 130.766 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1350.78, 545.744, 132.122 ); + ent.v["angles"] = ( 339.112, 104.574, 0.26208 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1606.44, 547.41, 125.742 ); + ent.v["angles"] = ( 339.112, 104.574, 0.26208 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1859.05, 541.8, 121.616 ); + ent.v["angles"] = ( 339.112, 104.574, 0.26208 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1711.23, -248.152, 119.149 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1585.66, -343.091, 141.168 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1578.81, -489.108, 144.886 ); + ent.v["angles"] = ( 350.001, 93.0331, -0.996706 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2048.52, -531.028, 25.1159 ); + ent.v["angles"] = ( 356.994, 87.982, 0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 956.886, -106.427, 69.6195 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -193.875, -20.1535, 63.7605 ); + ent.v["angles"] = ( 335.303, 102.934, -2.95054 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 147.72, 54.2082, 64.3255 ); + ent.v["angles"] = ( 333.719, 118.933, -3.79815 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -572.565, -440.487, 64.125 ); + ent.v["angles"] = ( 348.422, 98.22, 2.98695 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1606.71, 880.84, 110.08 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1415.67, 794.614, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 112.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 896.915, 789.888, 56.1301 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 847.485, 1042.18, 0.742375 ); + ent.v["angles"] = ( 354, 109, 0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 964.191, 1168.55, 2.37129 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 110.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 438.593, 1612.08, 76.2332 ); + ent.v["angles"] = ( 345, 142, 0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 6.27805, 1143.96, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 55.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -586.372, 1120.37, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 76.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1161.95, 733.162, 65.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 76.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1318.87, 503.012, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 41.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1639.08, 355.24, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 41.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1622.95, 72.4744, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 41.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1820.12, -253.217, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 54.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1475.96, -443.467, 56.125 ); + ent.v["angles"] = ( 355, 47, 0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1409.93, -618.197, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 62.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1426.87, -917.553, 0.125003 ); + ent.v["angles"] = ( 345.084, 85.7899, 1.60435 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -105.279, -1188.07, 48.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 47.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 471.92, -815.453, -40.3381 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 119.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1447.43, -315.122, 48.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 100.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1452.07, -513.203, 21.0218 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1455.23, -192.242, 5.13793 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 86.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1726.22, -186.785, 4.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 80.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1761.9, 102.847, 5.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 80.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2169.18, 113.584, 18.125 ); + ent.v["angles"] = ( 351, 108, 0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2124.46, 523.848, 4.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2221.31, 848.326, 11.5135 ); + ent.v["angles"] = ( 353, 116, 0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1454.74, 241.055, -3.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1335.88, 376.854, 13.4588 ); + ent.v["angles"] = ( 346, 40, 0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1984.88, 283.926, -3.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1832.77, 735.174, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 95.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1470.94, 598.016, 1.31151 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1014.62, 297.766, 47.9473 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 25.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 765.571, 287.984, 56.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 31.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 825.692, 23.3701, 66.1783 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 100.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 667.626, -187.924, 70.0544 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 100.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 404.235, -178.886, 66.3638 ); + ent.v["angles"] = ( 351.138, 89.8779, 1.57542 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -198.611, -85.379, 62.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 73.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -373.343, -98.6424, 69.8701 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 64.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -553.452, -168.865, 75.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 55.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1507.88, 255.227, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1194.86, -576.922, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 73.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 813.295, 871.923, 354.766 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 760.55, 988.125, 363.46 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 517.585, 1024.08, 362.876 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 434.362, 907.079, 359.725 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 438.788, 846.343, 358.271 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_chunk_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 813.539, 862.23, 354.23 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_chunk_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 429.893, 862.586, 358.027 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 10.2365, 1441.62, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 55.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -7.47807, 951.592, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 55.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 221.355, 900.579, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 121.0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -94.9166, 646.579, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 55.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -567.915, 776.265, 301.943 ); + ent.v["angles"] = ( 347, 90, 0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 136.442, -1097.94, 48.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 47.0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 762.275, -491.978, 49.6536 ); + ent.v["angles"] = ( 350.945, 85.6623, 4.26175 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1040.67, -958.227, 61.7022 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 56.0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2488.57, 233.782, 8.37213 ); + ent.v["angles"] = ( 349.111, 105.623, -0.113745 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2594, 587.095, 103.614 ); + ent.v["angles"] = ( 339.112, 104.574, 0.262091 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2434.62, 500.223, 58.4831 ); + ent.v["angles"] = ( 339.112, 104.574, 0.26208 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1353, -540.598, 71.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1947.27, -515.917, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 60.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1601.17, 292.119, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 52.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1779.07, -130.077, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 50.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -887.939, -571.526, 65.256 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 67.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1527.44, -1146.04, 3.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 67.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -148.638, -1125.93, 48.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 52.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 197.25, -1129.5, 48.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 805.686, -935.813, 48.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 646.383, -763.118, 50 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 82.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1126.07, -941.536, 48 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 54.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1358.37, -193.483, 16.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 82.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1676.54, 15.1295, 7.125 ); + ent.v["angles"] = ( 360, 51, 3 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1098.81, 257.341, 47.4326 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 54.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2084.11, 130.564, 7.50085 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 108.0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1474.77, 631.001, 0.37949 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1187.07, 849.917, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 847.56, 967.599, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 825.005, 1380.25, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 30.2135, 1304.47, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 63.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 15.5181, 835.403, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 63.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -104.706, 952.34, 24.125 ); + ent.v["angles"] = ( 0, 85, 1 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -480.859, 1329.24, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 64.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -592.442, 879.355, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 67.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -420.421, 1398.45, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -197.19, 1456.79, 29.2276 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -470.375, 1514.91, 51.4339 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 583.758, 1005.74, 474.885 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1602.64, -353.816, 62.125 ); + ent.v["angles"] = ( 359, 81, 0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1714.87, -507.254, 62.1776 ); + ent.v["angles"] = ( 359.015, 71, 0.173688 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1551.09, 151.876, 64.125 ); + ent.v["angles"] = ( 359.015, 71, 0.173688 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1187.68, 452.858, 67.125 ); + ent.v["angles"] = ( 359.007, 74, 0.121898 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -538.22, 974.872, -7.87501 ); + ent.v["angles"] = ( 359.007, 74, 0.121898 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -451.847, 1356.68, -7.875 ); + ent.v["angles"] = ( 359.073, 59, 0.37468 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 58.556, 1288.42, -39.875 ); + ent.v["angles"] = ( 359, 80, 0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -29.3202, 808.395, -39.875 ); + ent.v["angles"] = ( 359.018, 70, 0.190945 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 364.882, 792.158, 48.125 ); + ent.v["angles"] = ( 341.026, 94.0735, 1.76206 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 230.171, 318.859, -36.875 ); + ent.v["angles"] = ( 359.054, 100, -0.325766 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -81.1179, 222.964, -39.875 ); + ent.v["angles"] = ( 359, 82, 0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 88.5941, -462.377, -39.875 ); + ent.v["angles"] = ( 359.015, 89, -0.173688 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 353.471, -575.646, -39.7823 ); + ent.v["angles"] = ( 359.161, 114.003, -0.545049 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -628.694, -610.456, 64.125 ); + ent.v["angles"] = ( 359, 82, 0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -937.376, -563.239, 64.125 ); + ent.v["angles"] = ( 359.086, 57, 0.406987 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1470.85, -687.672, 64.125 ); + ent.v["angles"] = ( 359.007, 74, 0.121938 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1372.22, -1214.14, 0.124999 ); + ent.v["angles"] = ( 359.048, 63, 0.309198 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -453.814, -118.852, 59.125 ); + ent.v["angles"] = ( 359.412, 27, 0.809476 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -97.3538, -189.934, 64.125 ); + ent.v["angles"] = ( 359.161, 48, 0.544968 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 317.258, -173.916, 64.125 ); + ent.v["angles"] = ( 359.161, 48, 0.544968 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 646.727, -141.862, 64 ); + ent.v["angles"] = ( 359.001, 85, 0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 641.548, 250.853, 56.125 ); + ent.v["angles"] = ( 359.384, 29, 0.788518 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1384.2, 51.6946, 27.9466 ); + ent.v["angles"] = ( 359.005, 87.0031, -0.104551 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1728.83, 166.996, 8.125 ); + ent.v["angles"] = ( 359, 81.0023, 0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2134.42, 182.169, 2.68919 ); + ent.v["angles"] = ( 359, 81.0023, 0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2165.07, 625.896, -2.55444 ); + ent.v["angles"] = ( 359.117, 109.006, -0.46958 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1541.58, 735.416, -7.10956 ); + ent.v["angles"] = ( 359.125, 110.006, -0.484919 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 934.406, 975.899, -1.875 ); + ent.v["angles"] = ( 353.117, 97.9854, 0.648274 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 908.049, 1063.64, -4.64194 ); + ent.v["angles"] = ( 359.044, 98.0044, -0.292465 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 388.586, 1320.35, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 118.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 391.156, 1366.37, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 136.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1756.81, -177.91, 4.125 ); + ent.v["angles"] = ( 359.005, 87.0032, -0.104552 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1386.7, -803.411, 48.125 ); + ent.v["angles"] = ( 359.015, 91.0037, -0.173688 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2036.4, -808.217, 24.125 ); + ent.v["angles"] = ( 359.015, 91.0037, -0.173688 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1486.42, -693.82, 118.933 ); + ent.v["angles"] = ( 347.512, 106.398, -3.64098 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 753.573, -895.272, 51.711 ); + ent.v["angles"] = ( 359.101, 55, 0.438408 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2176.62, 540.504, 1.125 ); + ent.v["angles"] = ( 359.004, 76, 0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -738.915, -241.185, 56.125 ); + ent.v["angles"] = ( 359.101, 55, 0.438683 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1138.44, 846.245, 64.125 ); + ent.v["angles"] = ( 359.775, 4, 0.974791 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -916.03, 873.045, 48.125 ); + ent.v["angles"] = ( 359.758, 5, 0.970716 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -348.138, 1108.5, 29.8072 ); + ent.v["angles"] = ( 359.007, 74, 0.121898 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -151.757, 986.9, -7.875 ); + ent.v["angles"] = ( 359.072, 59, 0.374769 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 606.41, 1306.83, -7.875 ); + ent.v["angles"] = ( 359.223, 120.004, -0.629463 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1373.09, -540.03, 37.6918 ); + ent.v["angles"] = ( 359, 81.0021, 0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1357.6, -170.922, 6.88836 ); + ent.v["angles"] = ( 359.015, 91.0037, -0.173688 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 985.956, 236.273, 60.1623 ); + ent.v["angles"] = ( 359.117, 53, 0.470148 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -118.412, -1152.74, 48.125 ); + ent.v["angles"] = ( 359.152, 49, 0.529983 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -38.1773, -946.719, 48.125 ); + ent.v["angles"] = ( 359.152, 49, 0.529983 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1185.74, -1134.3, 0.125002 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 107.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1617.67, -830.019, 24.125 ); + ent.v["angles"] = ( 359.441, 25, 0.829067 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1180.23, 161.84, 46.5162 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 50.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1246.97, -680.621, 131.315 ); + ent.v["angles"] = ( 350, 57, 0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1081.1, -672.172, 123.234 ); + ent.v["angles"] = ( 345.511, 117.938, -6.63063 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 721.319, -761.369, 48 ); + ent.v["angles"] = ( 359.101, 55, 0.438408 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1791.16, -494.816, 147.983 ); + ent.v["angles"] = ( 350.001, 93.0331, -0.996706 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1673.27, -477.141, 133.197 ); + ent.v["angles"] = ( 359.015, 91.0037, -0.173688 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2603.76, 361.873, -8.00089 ); + ent.v["angles"] = ( 351.664, 120.67, -3.42382 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2853.56, 226.871, 95.125 ); + ent.v["angles"] = ( 359.018, 93.004, -0.190853 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2521.49, 515.579, 74.125 ); + ent.v["angles"] = ( 359, 82.0024, 0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1468.42, 890.959, -12 ); + ent.v["angles"] = ( 351, 96, 0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 939.064, 1458.78, 2.52471 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2134.51, 1029.12, -6.0777 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2057.36, 718.072, -5.64542 ); + ent.v["angles"] = ( 353.039, 109.955, 0.735323 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2181.79, 810.03, -6.10637 ); + ent.v["angles"] = ( 356.021, 115.015, -0.418838 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1858.92, -24.7925, 4.125 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1530.15, -647.42, 29.9542 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2039.27, -604.254, 24 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 879.474, -602.926, 53.0785 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 22.4628, -829.813, 47.425 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1268.55, -834.513, 6.64585 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1431.55, -1152.96, 0.124998 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1457.25, 62.5908, 64.125 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1663.89, 533.331, 64.125 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1133.82, 829.261, 64.125 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -564.761, 887.933, -7.875 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -443.449, 1479.25, -3.93508 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 360.297, 860.369, -7.875 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 386.249, 774.188, 2.12499 ); + ent.v["angles"] = ( 351, 100, 0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_frostbite_sun" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 41470.8, 81474.9, 43760 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -119.515, 714.995, 234.125 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -121.215, 498.973, 235.875 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 0.945453, 152.573, 44.4503 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 88.3126, 150.984, 50.2095 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 176.908, 151.647, 44.69 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 175.22, -231.261, 44.9506 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 107.641, -231.622, 49.9984 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5.23104, -231.641, 45.0699 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 473.388, -848.948, 39.2421 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 353.452, -907.799, 38.0944 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1680.42, -120.351, 70.1039 ); + ent.v["angles"] = ( 358, 82.9831, 0.965522 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 176.805, -183.083, 83.2543 ); + ent.v["angles"] = ( 359.021, 93.0025, -0.208115 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -184.008, -165.872, 74.1696 ); + ent.v["angles"] = ( 348.681, 96.7193, 2.30019 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1695.96, 938.254, 145.382 ); + ent.v["angles"] = ( 349.65, 127.717, -7.91001 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -109.235, 922.993, -15.7688 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -47.8003, 995.466, -17.8811 ); + ent.v["angles"] = ( 270, 0, -180 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -53.9125, 1100.05, -18.4345 ); + ent.v["angles"] = ( 270, 0, -180 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -56.3575, 1143.1, -17.7955 ); + ent.v["angles"] = ( 270, 0, -180 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -51.8492, 964.058, -17.6728 ); + ent.v["angles"] = ( 270, 0, -180 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 904.312, 364.054, 212.564 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 97.8298, 688.346, -39.875 ); + ent.v["angles"] = ( 359.038, 97, -0.275805 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -613.823, -163.819, 230.402 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1438.62, -553.801, 225.401 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1780.81, 365.135, -4.54347 ); + ent.v["angles"] = ( 335.842, 63.1266, -9.91443 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 303.815, 1584.29, 11.125 ); + ent.v["angles"] = ( 359.066, 102.002, -0.358535 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 79.9812, 1587.66, 15.125 ); + ent.v["angles"] = ( 359.087, 105.003, -0.406902 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -131.016, 1575.53, 20.125 ); + ent.v["angles"] = ( 359.066, 102.002, -0.358535 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -337.805, 1590.17, 28.125 ); + ent.v["angles"] = ( 359.066, 102.002, -0.358535 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -462.52, 1829.52, 7.125 ); + ent.v["angles"] = ( 359.086, 56.9967, 0.406767 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -454.152, 1767.29, 0.406441 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 41.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 452.453, 1743.78, 81.7499 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 146.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1019.15, -157.945, 306.375 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1291.63, 120.656, 222.375 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1063.27, 120.605, 225.187 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 863.798, -182.834, 305.521 ); + ent.v["angles"] = ( 270, 359.905, 0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1335.07, -424.906, 309.375 ); + ent.v["angles"] = ( 270, 359.905, 0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1336.77, 4.01327, 310.375 ); + ent.v["angles"] = ( 270, 359.905, 0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1544.59, -826.478, 31.2257 ); + ent.v["angles"] = ( 350.001, 93.0331, -0.996706 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1246.73, -919.276, 54.3458 ); + ent.v["angles"] = ( 350.315, 71.718, 2.6881 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 677.951, -908.931, 50 ); + ent.v["angles"] = ( 354.116, 76.9159, 1.80844 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -509.049, 1078.32, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 81.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -570.664, 889.785, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 71.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -530.672, 1213.73, -7.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 71.0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -431.572, 1414.29, -7.99274 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 46.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 835.712, 471.239, 479.875 ); + ent.v["angles"] = ( 270, 0, 179.901 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 719.826, 416.339, 65.811 ); + ent.v["angles"] = ( 356.372, 177.167, 0.406507 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1017.68, 772.637, 51.125 ); + ent.v["angles"] = ( 359.594, 267.193, -3.62858 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1029.78, 476.913, 64.125 ); + ent.v["angles"] = ( 354.602, 13.1157, 0.454655 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -634.827, 180.489, 64 ); + ent.v["angles"] = ( 358.409, 93.2084, 0.757363 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2194.49, -312.139, 74.3089 ); + ent.v["angles"] = ( 353.466, 89.1312, 0.871874 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1715.12, 398.506, 79.125 ); + ent.v["angles"] = ( 354.824, 163.312, -0.529949 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -536.661, -571.927, 73.314 ); + ent.v["angles"] = ( 356.558, 36.0075, -0.249026 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2212.07, -88.4093, 167.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2211.75, -32.2866, 167.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2211.91, -144.432, 167.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2212.01, -212.255, 167.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2211.77, 35.9239, 167.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2348.19, -211.986, 167.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2347.86, -143.895, 167.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2347.94, -87.5297, 167.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2348, -31.8133, 167.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2348.25, 36.2742, 167.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1545.38, -153.517, 55.2496 ); + ent.v["angles"] = ( 351, 96, 0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 319.632, 1197.52, 55.5851 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 110.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 738.551, 1299.39, 303.967 ); + ent.v["angles"] = ( 22, 102, 0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 560.327, 1662.16, 336.292 ); + ent.v["angles"] = ( 22, 102, 0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 737.605, 1294.06, 422.5 ); + ent.v["angles"] = ( 27, 102, 0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 550.529, 1666.92, 248.605 ); + ent.v["angles"] = ( 27, 102, 0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1379.36, 1149.97, 281.679 ); + ent.v["angles"] = ( 20, 102, 0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1378.42, 1144.64, 400.212 ); + ent.v["angles"] = ( 26, 102, 0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2454.68, 947.644, 288.593 ); + ent.v["angles"] = ( 21, 102, 0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2466.08, 822.952, 477.126 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 102.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2343.11, 956.299, 557.35 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 102.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1557.37, 47.3453, 306.023 ); + ent.v["angles"] = ( 25, 102, 0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1666.6, -434.781, 331.211 ); + ent.v["angles"] = ( 25, 102, 0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1720.85, 622.439, 334.574 ); + ent.v["angles"] = ( 25, 102, 0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2098.39, -790.417, 416.859 ); + ent.v["angles"] = ( 19.7257, 141.742, 15.6757 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2483.7, -654.214, 467.06 ); + ent.v["angles"] = ( 344.255, 114.673, 6.95148 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 446.458, 2020.81, 80.702 ); + ent.v["angles"] = ( 0.809128, 138, 0.58791 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -583.849, 2010.61, 227.343 ); + ent.v["angles"] = ( 0.615642, 49.9945, -0.788041 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -492.857, 1615.97, 143.168 ); + ent.v["angles"] = ( 338.472, 40.3506, -0.949152 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1127.08, 702.297, 415.212 ); + ent.v["angles"] = ( 0.987837, 93, -0.156472 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -609.056, 794.417, 355.914 ); + ent.v["angles"] = ( 0.987837, 93, -0.156472 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -930.989, 592.953, 406.04 ); + ent.v["angles"] = ( 0.987837, 93, -0.156472 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 757.411, -276.072, 310.351 ); + ent.v["angles"] = ( 346.956, 92.134, -0.534579 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1981.87, 76.7472, 163.875 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1779.69, -210.987, 42.8888 ); + ent.v["angles"] = ( 349.994, 87.9819, 0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1846.66, -235.209, 124.026 ); + ent.v["angles"] = ( 349.994, 87.9819, 0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1274.78, 485.401, 65.0418 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 35.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1475.35, 415.719, 64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 37.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1641.93, 337.837, 65.9317 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 53.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1164.76, 545.027, 64.2798 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 952.394, -255.476, 439.441 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1295.5, 120.776, 319.345 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1036.88, -12.5229, 322.325 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 182.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 992.091, -473.273, 319.836 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1339.32, -301.811, 322.722 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -153.875, 315.849, 319.69 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -696.893, 798.455, 336.682 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -987.525, 551.876, 335.086 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -981.479, 449.099, 334.525 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -825.558, 153.875, 303.339 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 629.055, -473.713, 296.451 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1186.38, -993.517, 376.161 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1447.81, -993.863, 376.046 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_chunk_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 623.649, -231.069, 295.529 ); + ent.v["angles"] = ( 90, 0, 179 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2965.28, 32.1701, 67 ); + ent.v["angles"] = ( 0.998781, 98.9983, 0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2909.21, 374.637, -2.36977 ); + ent.v["angles"] = ( 342.985, 111.944, 0.181592 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2211.08, -753.5, 170.351 ); + ent.v["angles"] = ( 359.002, 78, 0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1684.52, 525.223, 64.6333 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 38.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1543.51, 515.486, 64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 22.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -179.607, 1001.79, -7.39586 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 72.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -70.9618, -202.45, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 50.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 89.7697, -206.78, 65.8984 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 50.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -268.2, -54.6696, 61.7318 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 51.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2004.59, -456.457, 60 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 23.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1988.81, -524.631, 69.4282 ); + ent.v["angles"] = ( 349.97, 83.8935, 0.595943 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1734.62, -495.639, 63.6133 ); + ent.v["angles"] = ( 349.97, 83.8935, 0.595943 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2012.05, -523.307, 67.9184 ); + ent.v["angles"] = ( 359.015, 71, 0.173688 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1324.67, -525.669, 68.0264 ); + ent.v["angles"] = ( 359.015, 71, 0.173688 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -837.909, -212.76, 77.0417 ); + ent.v["angles"] = ( 359.018, 70, 0.190854 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -827.306, -151.857, 71.5522 ); + ent.v["angles"] = ( 359.212, 55.2079, 1.5764 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -470.121, -54.566, 60.2087 ); + ent.v["angles"] = ( 353.383, 49.0361, 1.6611 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -741.985, -8.33043, 74.9382 ); + ent.v["angles"] = ( 359.13, 58.2071, 1.53299 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1174.47, 223.719, 42.7213 ); + ent.v["angles"] = ( 359.117, 53, 0.470148 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2069.54, 196.152, 6.95731 ); + ent.v["angles"] = ( 347.512, 106.398, -3.64098 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2151.72, 350.151, -8.66062 ); + ent.v["angles"] = ( 344.098, 94.1367, -0.306592 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2330.17, 357.681, 0.251548 ); + ent.v["angles"] = ( 340.204, 119.783, -9.56968 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -628.145, 583.744, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -612.221, 584.037, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -676.405, 584.157, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -692.108, 583.929, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -740.287, 584.083, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -756.268, 584.176, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -804.318, 583.911, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -564.085, 584.13, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -804.068, 471.876, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -756.04, 472.073, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -740.036, 472.031, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -691.735, 472.299, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -676.083, 472.249, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -627.783, 472.244, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -612.054, 472.152, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -563.875, 472.303, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -588.083, 496.533, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -588.57, 559.911, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -652.028, 559.725, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -652.167, 495.684, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -716.395, 559.682, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -715.931, 495.709, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -779.788, 559.962, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -780.142, 495.953, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -918.872, 561.926, 191.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -919.193, 521.906, 191.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -919.142, 481.791, 191.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -756.105, 716.763, 159.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -724.218, 716.756, 159.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -691.938, 716.676, 159.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -556.311, 716.537, 159.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -523.992, 716.617, 159.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -492.089, 716.643, 159.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -673.686, 352.048, 191.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -633.822, 351.97, 191.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -593.718, 351.878, 191.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -572.118, 256.433, 187.575 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -608.279, 256.786, 187.575 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -671.999, 256.31, 187.575 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -708.757, 256.097, 187.575 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -985.622, 522.284, 195.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -985.995, 490.197, 195.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -985.807, 554.107, 195.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -147.746, 349.428, 77.4991 ); + ent.v["angles"] = ( 270, 359.901, -179.901 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -130.365, 718.736, 94.0113 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -69.7436, 1086.44, 99.875 ); + ent.v["angles"] = ( 270, 359.901, -179.901 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1277.93, 668.74, 210.771 ); + ent.v["angles"] = ( 270, 3.81407, 87.1858 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -491.229, 813.631, 201.062 ); + ent.v["angles"] = ( 270, 359.684, 5.31557 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -69.8698, 1414.98, 99.875 ); + ent.v["angles"] = ( 270, 359.901, -179.901 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -70.0592, 1553.68, 99.875 ); + ent.v["angles"] = ( 270, 359.901, -179.901 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -58.3877, 1529.13, -14.899 ); + ent.v["angles"] = ( 270, 0, -180 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -58.9324, 1485.83, -15.538 ); + ent.v["angles"] = ( 270, 0, -180 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -59.8564, 1437.14, -16.5071 ); + ent.v["angles"] = ( 270, 0, -180 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 413.391, -882.922, 43.487 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -78.5497, 595.372, 312.502 ); + ent.v["angles"] = ( 353.758, 58.0399, 0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1621.32, -601.125, 32.5399 ); + ent.v["angles"] = ( 359.792, 3.00146, 0.978294 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 440.55, 82.2872, 227.902 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1078.18, 1067.26, 198.452 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1519.31, 715.491, 290.503 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2240.96, -505.341, 225.006 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 189.387, 574.554, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 148.949, -176.413, -39.875 ); + ent.v["angles"] = ( 359.054, 100, -0.325766 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 59.6543, 7.3049, -39.875 ); + ent.v["angles"] = ( 359.054, 100, -0.325766 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 191.521, 176.221, -39.875 ); + ent.v["angles"] = ( 359.012, 90, -0.15653 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 646.83, 1177.61, -7.40227 ); + ent.v["angles"] = ( 359.044, 98.0044, -0.292465 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 893.525, 1336.91, -4.45304 ); + ent.v["angles"] = ( 359.546, 144.005, -0.891078 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 493.85, 1045.75, -3.60695 ); + ent.v["angles"] = ( 359.546, 144.005, -0.891078 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 724.871, 926.826, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 680.885, 978.213, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 617.398, 989.344, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 519.396, 989.226, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 467.53, 970.443, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 467.879, 846.393, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 467.446, 584.399, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 520.44, 538.792, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 652.975, 539.156, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 776.723, 538.757, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 776.689, 636.819, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 724.557, 670.356, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 707.93, 950.34, 125.294 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 762.63, -453.732, 54.2509 ); + ent.v["angles"] = ( 359.012, 90.0021, -0.15661 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 726.064, -500.123, 56.6932 ); + ent.v["angles"] = ( 350.087, 77.8026, 1.65161 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 820.792, -353.297, 63.0578 ); + ent.v["angles"] = ( 350.484, 106.216, -3.24047 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 726.256, -246.003, 69.0802 ); + ent.v["angles"] = ( 350.036, 79.8322, 1.30142 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 763.402, -434.982, 105.967 ); + ent.v["angles"] = ( 0.984956, 92, -0.17369 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 120.788, -320.239, -39.875 ); + ent.v["angles"] = ( 0.984956, 92, -0.173691 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -22.2062, 577.305, -35.875 ); + ent.v["angles"] = ( 0.839808, 69, -0.545426 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 409.424, -906.023, -31.875 ); + ent.v["angles"] = ( 0.891133, 129, 0.454096 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1381.93, -369.306, 61.0835 ); + ent.v["angles"] = ( 359.775, 4.0015, 0.975713 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1075.51, -370.446, 62.5436 ); + ent.v["angles"] = ( 359.707, 8, 0.957625 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1985.65, -885.882, 64.2012 ); + ent.v["angles"] = ( 353.575, 88.6049, 2.01385 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1984.01, -1212.78, 0.125 ); + ent.v["angles"] = ( 353.575, 88.6049, 2.01385 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1904.67, -1075.63, 0.125004 ); + ent.v["angles"] = ( 355.84, 347.233, -2.75015 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1370.94, -1269.43, 3.54739 ); + ent.v["angles"] = ( 358.746, 29.1856, -4.82541 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1114.85, -1074.67, 16.125 ); + ent.v["angles"] = ( 356.735, 12.9681, 1.11715 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1117.14, -1019.28, 16.125 ); + ent.v["angles"] = ( 357.038, 0.954152, 1.77207 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -381.085, -1062.64, 56.125 ); + ent.v["angles"] = ( 2.08232, 158.95, 0.247645 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -357.283, -1033.74, 49.7454 ); + ent.v["angles"] = ( 356.082, 158.924, 0.248061 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -596.978, -1773.58, 151.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 12.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 121.665, -1911.25, 126.952 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 12.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3071.03, 58.8564, 88.9139 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 95.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2837.56, -398.468, 181.837 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 80.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3206.13, 601.127, 119.138 ); + ent.v["angles"] = ( 359.054, 75.9962, 0.325583 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2880.34, 1222.72, 74.7587 ); + ent.v["angles"] = ( 359.109, 122, -0.454113 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2873.16, 1021.29, 131.727 ); + ent.v["angles"] = ( 359.305, 141, -0.719251 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2340.5, 1580.05, 140.024 ); + ent.v["angles"] = ( 359.305, 141, -0.719251 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1754.42, 1484.63, 137.346 ); + ent.v["angles"] = ( 359.268, 138, -0.681895 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1361.96, 2043.41, 145.807 ); + ent.v["angles"] = ( 359.577, 160, -0.906323 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 591.842, 2041.84, 105.95 ); + ent.v["angles"] = ( 358.347, 139.009, -0.33636 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -400.232, 1990.04, 13.6441 ); + ent.v["angles"] = ( 359.956, 39.0038, 1.68644 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 69.9684, 2107.88, 1.28343 ); + ent.v["angles"] = ( 358.593, 93.9933, 0.931464 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1428.53, 887.863, 219.72 ); + ent.v["angles"] = ( 358.318, 132.007, -0.132113 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2953.45, -863.059, 101.125 ); + ent.v["angles"] = ( 358.593, 93.9938, 0.931424 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2826.46, -347.518, 119.125 ); + ent.v["angles"] = ( 358.593, 93.9938, 0.931424 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2688.62, -669.493, 92.125 ); + ent.v["angles"] = ( 359.571, 88.8153, 2.00125 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2367.93, -1707.65, 35.2581 ); + ent.v["angles"] = ( 1.33836, 345.017, 1.02694 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1639.5, -1843.9, 67.2 ); + ent.v["angles"] = ( 1.33836, 345.017, 1.02694 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1093.47, -1985.6, 76.7438 ); + ent.v["angles"] = ( 1.33836, 345.017, 1.02694 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1139.65, 840.667, -4.43884 ); + ent.v["angles"] = ( 359.515, 142.006, -0.874715 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 896.325, 837.169, -3.2757 ); + ent.v["angles"] = ( 359.005, 87.0029, -0.104607 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1454.57, 752.979, -2.9017 ); + ent.v["angles"] = ( 359.026, 94, -0.22497 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 774.531, 1284.86, 34.9642 ); + ent.v["angles"] = ( 359.642, 96.4544, 2.15746 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 450.141, 923.149, 104.737 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -172.875, 844.878, 114.97 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -638.788, 284.317, 101.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 85.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -990.711, 486.784, 92.1028 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 15.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -497.464, -529.336, 106.2 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 21.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2187, -217.43, 85.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1781.36, 421.173, 90.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -322.625, 841.645, 200.125 ); + ent.v["angles"] = ( 340.029, 98.8078, 1.09128 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2230.5, -410.027, 60 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1961.81, -413.822, 60.012 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2409.31, -406.356, 60.1158 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1567.3, 15.8327, 73.6424 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1129.25, -380.019, 60.1486 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 39.7269, 54.7206, 64 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 618.787, -38.2608, 54.5498 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2087, 299.791, -11.9931 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2283.6, 313.643, -11.5676 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2486.87, 324.088, -11.9918 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 756.071, -344.468, 59.3139 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 782.81, -683.56, 64.1483 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2023.91, -572.185, 25.3241 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 458.531, -931.23, 46.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 273.137, -1036.51, 46.125 ); + ent.v["angles"] = ( 359.293, 36, 0.707153 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 72.4933, -831.49, 48.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 592.736, -1963.96, 157.856 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 12.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2014.75, 843.229, -3.65592 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 105.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1719.02, 1026.22, -5.80841 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1133.39, 903.992, -0.307993 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 141.0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1814.78, -105.902, 5.03904 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 141.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1954.54, -33.1109, 71.2383 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -546.664, 893.999, -2.65976 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2089.88, -462.942, 115.954 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -352.048, 527.365, 168.275 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2159.74, -175.033, 203.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2184.14, -175.025, 203.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2208.24, -175.084, 203.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2275.08, -74.1907, 202.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2275.3, -10.3107, 202.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2275.32, 53.7201, 202.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2275.67, 118.469, 202.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2147.16, 118.471, 202.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2211.41, 118.283, 202.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2083.1, 118.329, 202.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2019.25, 118.314, 202.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1955.12, 118.402, 202.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1890.93, 118.367, 202.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1080.96, 570.823, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 951.14, 570.963, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1080.88, 669.162, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 950.7, 669.02, 215.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 973.998, 515.875, 353.876 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1137.16, 681.198, 346.875 ); + ent.v["angles"] = ( 270, 359.664, -1.66394 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 957.381, -682.211, 208.401 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1477.76, -841.114, 13.3145 ); + ent.v["angles"] = ( 332, 77.9739, 0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1667.83, 37.5091, 69.7823 ); + ent.v["angles"] = ( 358.198, 72.9795, 1.29793 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1078.24, 848.467, 65.0004 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 15.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -564.389, 918.585, -5.75974 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 60.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 327.339, 968.668, -7.79999 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 66.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -77.0725, -8.0472, 64.822 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 41.0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2346.28, -50.0406, 299.822 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 99.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1984.92, -47.1318, 295.911 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1186.38, 90.2745, 363.951 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 898.6, -223.106, 384.704 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 478.244, -254.185, 346.325 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -487.69, -715.612, 445.474 ); + ent.v["angles"] = ( 350.735, 71.6936, 3.77909 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1019.49, -702.781, 424.311 ); + ent.v["angles"] = ( 350.735, 71.6936, 3.77909 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1127.56, 175.511, 353.106 ); + ent.v["angles"] = ( 356.722, 72.089, 3.73584 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -976.165, 573.195, 396.454 ); + ent.v["angles"] = ( 352.731, 71.8263, 3.75999 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1305.64, 1084.22, 457.041 ); + ent.v["angles"] = ( 351.821, 100.073, -0.113968 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1083.43, 1045.53, 459.697 ); + ent.v["angles"] = ( 353.324, 63.7885, 4.73728 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 546.363, 925.207, 472.706 ); + ent.v["angles"] = ( 356.254, 81.044, 2.24349 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 764.777, 900.444, 414.889 ); + ent.v["angles"] = ( 356.254, 81.044, 2.24349 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1004.61, 618.336, 491.023 ); + ent.v["angles"] = ( 356.254, 81.044, 2.24349 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1370.55, -1018.57, 395.701 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 765.705, -1116.99, 411.094 ); + ent.v["angles"] = ( 349, 94, 0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -761.592, -721.762, 430.575 ); + ent.v["angles"] = ( 350.735, 71.6936, 3.77909 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 346.625, -538.651, -40 ); + ent.v["angles"] = ( 0.669214, 150, 0.743289 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 229.388, 425.756, -40 ); + ent.v["angles"] = ( 356.979, 113.989, 0.208445 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -271.429, 230.294, 430.9 ); + ent.v["angles"] = ( 350.735, 71.6936, 3.77909 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 492.792, 830.757, 420.728 ); + ent.v["angles"] = ( 350.002, 92.9843, 0.176406 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1104.47, -469.625, 319.067 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 492.326, -477.801, 254.576 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 759.308, -993.975, 376.341 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 621.908, -232.911, 297.082 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 408.424, -232.051, 294.804 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 958.807, -155.43, 313.846 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1097.8, -695.668, 410.537 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_lamp_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -966.635, -1277.67, 123.016 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_lamp_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -874.747, -1275.83, 122.786 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_lamp_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -780.595, -1275.62, 122.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2019.23, -143.623, 190.087 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -964.516, 2063.36, 754.845 ); + ent.v["angles"] = ( 344, 91, 0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -966.646, 3773.95, 1013.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2063.53, -97.3347, 130.145 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3009.12, 89.5479, 17.1676 ); + ent.v["angles"] = ( 354, 99, 0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2881.71, -215.273, 80.9792 ); + ent.v["angles"] = ( 354, 99, 0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 867.734, 3940.13, 760.844 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5420.96, 638.022, 980.886 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3671.47, -208.346, 752.855 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1032.59, -1043.08, 118.925 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2185.19, -135.838, 194.875 ); + ent.v["angles"] = ( 271, 89.9982, -89.9982 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1896.46, 211.696, 194.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -947.225, 521.461, 181.877 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -632.545, 316.589, 182.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -444.214, -524.532, 206.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -218.013, 711.447, 394.724 ); + ent.v["angles"] = ( 352.029, 56.5772, 6.05717 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1933.92, 1233.09, 82.9831 ); + ent.v["angles"] = ( 0.881862, 127, 0.468935 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1554.76, 1285.67, 84.6922 ); + ent.v["angles"] = ( 0.828014, 133, 0.558549 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2012.3, -1229.33, 161.096 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_frostbite_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 620.022, 416.273, 206.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1974.48, -634.144, 370.125 ); + ent.v["angles"] = ( 350.735, 71.6936, 3.77909 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1744.28, -687.254, 724.304 ); + ent.v["angles"] = ( 350.735, 71.6936, 3.77909 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2877.44, 458.058, 69.5576 ); + ent.v["angles"] = ( 0.260202, 82.0952, 1.75137 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2122.01, 353.132, 6.10629 ); + ent.v["angles"] = ( 351.351, 91.8108, 2.49977 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1797.96, -530.791, 70.1667 ); + ent.v["angles"] = ( 350.517, 81.92, -17.3009 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 410.348, 618.049, 471.859 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1975.16, -195.772, 517.209 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1573.18, -592.849, 239.055 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1574.87, -594.383, 397.334 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow_flick" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1574.36, -593.841, 290.021 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1574.24, -593.745, 448.135 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1573.57, -593.07, 499.804 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1563.42, -606.468, 236.928 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow_flick" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1563.08, -606.578, 291.924 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1563.39, -606.898, 344.134 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1563.58, -607.089, 396.288 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1563.31, -606.816, 448.477 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1563.09, -606.594, 500.449 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1573.9, -593.399, 344.739 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -980.858, 2468.4, 923.585 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -859.474, 4174.92, 978.359 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1090.74, 3282.06, 950.929 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -76; +} diff --git a/MP/Maps/Frost/maps/mp/mp_frostbite.gsc b/MP/Maps/Frost/maps/mp/mp_frostbite.gsc new file mode 100644 index 0000000..d7461ae --- /dev/null +++ b/MP/Maps/Frost/maps/mp/mp_frostbite.gsc @@ -0,0 +1,177 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_frostbite_fx; +#include maps\mp\_load; +#include maps\mp\mp_frostbite_amb; +#include maps\mp\_compass; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + level thread spawnkilltrigger(); + maps\mp\mp_frostbite_fx::main(); + precachemodel( "dh_facilities_sign_08" ); + precachemodel( "p6_fro_concrete_planter" ); + precachemodel( "p6_fro_bookstore_window_trm" ); + precachemodel( "collision_clip_256x256x10" ); + precachemodel( "collision_clip_64x64x10" ); + precachemodel( "collision_physics_256x256x10" ); + precachemodel( "collision_clip_32x32x32" ); + precachemodel( "collision_clip_128x128x10" ); + precachemodel( "collision_clip_wall_32x32x10" ); + precachemodel( "collision_clip_wall_64x64x10" ); + precachemodel( "collision_mp_frost_kitchen_weap" ); + maps\mp\_load::main(); + maps\mp\mp_frostbite_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_frostbite" ); + prop1 = spawn( "script_model", ( -972, 559, 182 ) ); + prop1.angles = vectorscale( ( 0, 1, 0 ), 90.0 ); + prop2 = spawn( "script_model", ( -973, 521, 182 ) ); + prop2.angles = vectorscale( ( 0, 1, 0 ), 90.0 ); + prop3 = spawn( "script_model", ( -972, 485, 182 ) ); + prop3.angles = vectorscale( ( 0, 1, 0 ), 90.0 ); + prop4 = spawn( "script_model", ( -966, 558, 182 ) ); + prop4.angles = vectorscale( ( 0, 1, 0 ), 270.0 ); + prop5 = spawn( "script_model", ( -965, 522, 182 ) ); + prop5.angles = vectorscale( ( 0, 1, 0 ), 270.0 ); + prop6 = spawn( "script_model", ( -966, 484, 182 ) ); + prop6.angles = vectorscale( ( 0, 1, 0 ), 270.0 ); + prop1 setmodel( "dh_facilities_sign_08" ); + prop2 setmodel( "dh_facilities_sign_08" ); + prop3 setmodel( "dh_facilities_sign_08" ); + prop4 setmodel( "dh_facilities_sign_08" ); + prop5 setmodel( "dh_facilities_sign_08" ); + prop6 setmodel( "dh_facilities_sign_08" ); + planter1 = spawn( "script_model", ( -1609, -827.405, 131.751 ) ); + planter1.angles = ( 359.846, 90.58, 89.9993 ); + planter2 = spawn( "script_model", ( -1609, -827.41, 81.75 ) ); + planter2.angles = ( 359.846, 90.58, 89.9993 ); + planter1 setmodel( "p6_fro_concrete_planter" ); + planter2 setmodel( "p6_fro_concrete_planter" ); + brick1 = spawn( "script_model", ( 1129, 703, 95.75 ) ); + brick1.angles = ( 90, 180, -90 ); + brick2 = spawn( "script_model", ( 1127.75, 712, 95.75 ) ); + brick2.angles = ( 90, 180, -90 ); + brick3 = spawn( "script_model", ( 1129, 703, 47.75 ) ); + brick3.angles = ( 90, 180, -90 ); + brick4 = spawn( "script_model", ( 1127.75, 712, 47.75 ) ); + brick4.angles = ( 90, 180, -90 ); + brick5 = spawn( "script_model", ( 1129, 694, 95.75 ) ); + brick5.angles = ( 90, 180, -90 ); + brick6 = spawn( "script_model", ( 1129, 694, 47.75 ) ); + brick6.angles = ( 90, 180, -90 ); + brick7 = spawn( "script_model", ( 1129, 685, 95.75 ) ); + brick7.angles = ( 90, 180, -90 ); + brick8 = spawn( "script_model", ( 1129, 685, 47.75 ) ); + brick8.angles = ( 90, 180, -90 ); + brick1 setmodel( "p6_fro_bookstore_window_trm" ); + brick2 setmodel( "p6_fro_bookstore_window_trm" ); + brick3 setmodel( "p6_fro_bookstore_window_trm" ); + brick4 setmodel( "p6_fro_bookstore_window_trm" ); + brick5 setmodel( "p6_fro_bookstore_window_trm" ); + brick6 setmodel( "p6_fro_bookstore_window_trm" ); + brick7 setmodel( "p6_fro_bookstore_window_trm" ); + brick8 setmodel( "p6_fro_bookstore_window_trm" ); + spawncollision( "collision_clip_256x256x10", "collider", ( 145, -1295.5, 115.5 ), vectorscale( ( 0, 0, -1 ), 88.9 ) ); + spawncollision( "collision_clip_256x256x10", "collider", ( 28, -1295.5, 115.5 ), vectorscale( ( 0, 0, -1 ), 88.9 ) ); + spawncollision( "collision_clip_256x256x10", "collider", ( 252.5, -1251.5, 114 ), ( 0, 45.1, -88.9 ) ); + spawncollision( "collision_clip_64x64x10", "collider", ( 448, 1577, -10.5 ), vectorscale( ( 1, 0, 0 ), 277.0 ) ); + spawncollision( "collision_physics_256x256x10", "collider", ( 1199, 89, 67.5 ), vectorscale( ( 0, 0, -1 ), 90.0 ) ); + spawncollision( "collision_clip_32x32x32", "collider", ( 84.5, 361.75, 66.5 ), ( 359.904, 8.05247, 11.9159 ) ); + spawncollision( "collision_clip_32x32x32", "collider", ( 80, 390, 69.5 ), vectorscale( ( 0, 1, 0 ), 9.19998 ) ); + spawncollision( "collision_clip_32x32x32", "collider", ( 75.5, 418, 66.75 ), ( 1.00357, 9.19998, -11 ) ); + spawncollision( "collision_clip_128x128x10", "collider", ( 244.75, -860, -45 ), vectorscale( ( 0, 1, 0 ), 27.0 ) ); + spawncollision( "collision_clip_wall_32x32x10", "collider", ( 958.5, 716.5, 130 ), vectorscale( ( 0, 0, 1 ), 5.6 ) ); + spawncollision( "collision_clip_wall_64x64x10", "collider", ( -1126, -909, 44.5 ), vectorscale( ( 0, 1, 0 ), 105.6 ) ); + spawncollision( "collision_clip_wall_64x64x10", "collider", ( -1130, -789.5, 44.5 ), vectorscale( ( 0, 1, 0 ), 83.9 ) ); + spawncollision( "collision_clip_wall_64x64x10", "collider", ( -1130, -789.5, 107 ), vectorscale( ( 0, 1, 0 ), 83.9 ) ); + spawncollision( "collision_clip_wall_64x64x10", "collider", ( -1126, -909, 106 ), vectorscale( ( 0, 1, 0 ), 105.6 ) ); + spawncollision( "collision_clip_wall_64x64x10", "collider", ( -1130, -789.5, 164.5 ), vectorscale( ( 0, 1, 0 ), 83.9 ) ); + spawncollision( "collision_mp_frost_kitchen_weap", "collider", ( 1994, -281.5, 16 ), ( 0, 0, 0 ) ); + setdvar( "compassmaxrange", "2100" ); + visionsetnaked( "mp_frostbite", 1 ); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + level.onplayerkilledextraunthreadedcbs[level.onplayerkilledextraunthreadedcbs.size] = ::on_player_killed; + level.overrideplayerdeathwatchtimer = ::leveloverridetime; + level glass_node_fix(); +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2250", reset_dvars ); + ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1000", reset_dvars ); +} + +on_player_killed( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + if ( isdefined( smeansofdeath ) && smeansofdeath == "MOD_TRIGGER_HURT" ) + { + depth = self depthinwater(); + + if ( depth > 0 ) + { + origin = self.origin + ( 0, 0, depth + 5 ); + self playsound( "mpl_splash_death" ); + playfx( level._effect["water_splash"], origin ); + } + } +} + +leveloverridetime( defaulttime ) +{ + if ( self.body depthinwater() > 0 ) + return 0.4; + + return defaulttime; +} + +glass_node_fix() +{ + nodes = getallnodes(); + level thread glass_node_think( nodes[459] ); + level thread glass_node_think( nodes[454] ); +} + +glass_node_think( node ) +{ + wait 0.25; + ent = spawn( "script_model", node.origin, 1 ); + ent setmodel( level.deployedshieldmodel ); + ent hide(); + ent disconnectpaths(); + ent.origin -= vectorscale( ( 0, 0, 1 ), 64.0 ); + + for (;;) + { + level waittill( "glass_smash", origin ); + + if ( distancesquared( origin, node.origin ) < 65536 ) + { + ent delete(); + return; + } + } +} + +spawnkilltrigger() +{ + trigger = spawn( "trigger_radius", ( 536, -1304, -104 ), 0, 256, 128 ); + + while ( true ) + { + trigger waittill( "trigger", player ); + + player dodamage( player.health * 2, trigger.origin, trigger, trigger, "none", "MOD_SUICIDE", 0, "lava_mp" ); + } +} diff --git a/MP/Maps/Frost/maps/mp/mp_frostbite_amb.gsc b/MP/Maps/Frost/maps/mp/mp_frostbite_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Frost/maps/mp/mp_frostbite_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Frost/maps/mp/mp_frostbite_fx.gsc b/MP/Maps/Frost/maps/mp/mp_frostbite_fx.gsc new file mode 100644 index 0000000..1bc3e8c --- /dev/null +++ b/MP/Maps/Frost/maps/mp/mp_frostbite_fx.gsc @@ -0,0 +1,75 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_frostbite_fx; + +main() +{ + precache_fxanim_props(); + precache_fxanim_props_dlc4(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_frostbite_fx::main(); +} + +precache_scripted_fx() +{ + level._effect["water_splash"] = loadfx( "bio/player/fx_player_water_splash_mp_frost" ); +} + +precache_createfx_fx() +{ + level._effect["fx_lf_mp_frostbite_sun"] = loadfx( "lens_flares/fx_lf_mp_frostbite_sun" ); + level._effect["fx_mp_frostbite_snow_ledge_runner"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_ledge_runner" ); + level._effect["fx_mp_frostbite_snow_chunk_runner"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_chunk_runner" ); + level._effect["fx_mp_frostbite_snow_gust_runner"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_gust_runner" ); + level._effect["fx_mp_frostbite_snow_fog"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_fog" ); + level._effect["fx_mp_frostbite_snow_flurries"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_flurries" ); + level._effect["fx_mp_frostbite_snow_flurries_fine"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_flurries_fine" ); + level._effect["fx_mp_frostbite_snow_flurries_window"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_flurries_window" ); + level._effect["fx_mp_frostbite_snow_flurries_vista"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_flurries_vista" ); + level._effect["fx_mp_frostbite_snow_gust_sm_runner"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_gust_sm_runner" ); + level._effect["fx_mp_frostbite_snow_swirl_runner"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_swirl_runner" ); + level._effect["fx_mp_frostbite_ground_blow"] = loadfx( "maps/mp_maps/fx_mp_frostbite_ground_blow" ); + level._effect["fx_mp_frostbite_snow_gust_tree"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_gust_tree" ); + level._effect["fx_mp_frostbite_snow_gust_roof"] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_gust_roof" ); + level._effect["fx_mp_frostbite_ice_fall_runner"] = loadfx( "maps/mp_maps/fx_mp_frostbite_ice_fall_runner" ); + level._effect["fx_mp_frostbite_ice_fall_sm_runner"] = loadfx( "maps/mp_maps/fx_mp_frostbite_ice_fall_sm_runner" ); + level._effect["fx_mp_frostbite_lamp_post"] = loadfx( "maps/mp_maps/fx_mp_frostbite_lamp_post" ); + level._effect["fx_frostbite_circle_light_glare"] = loadfx( "light/fx_frostbite_circle_light_glare" ); + level._effect["fx_frostbite_circle_light_glare_flr"] = loadfx( "light/fx_frostbite_circle_light_glare_flr" ); + level._effect["fx_mp_frostbite_lamp_int"] = loadfx( "maps/mp_maps/fx_mp_frostbite_lamp_int" ); + level._effect["fx_frostbite_exit_sign"] = loadfx( "light/fx_frostbite_exit_sign" ); + level._effect["fx_mp_frostbite_sign_glow"] = loadfx( "maps/mp_maps/fx_mp_frostbite_sign_glow" ); + level._effect["fx_mp_frostbite_sign_glow_flick"] = loadfx( "maps/mp_maps/fx_mp_frostbite_sign_glow_flick" ); + level._effect["fx_light_track_omni"] = loadfx( "light/fx_light_track_omni" ); + level._effect["fx_mp_frostbite_chimney_smk"] = loadfx( "maps/mp_maps/fx_mp_frostbite_chimney_smk" ); + level._effect["fx_mp_frostbite_chimney_smk_dark"] = loadfx( "maps/mp_maps/fx_mp_frostbite_chimney_smk_dark" ); + level._effect["fx_mp_frostbite_chimney_smk_vista"] = loadfx( "maps/mp_maps/fx_mp_frostbite_chimney_smk_vista" ); + level._effect["fx_mp_frostbite_steam"] = loadfx( "maps/mp_maps/fx_mp_frostbite_steam" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["laundry"] = %fxanim_gp_dryer_loop_anim; + level.scr_anim["fxanim_props"]["dock_chain"] = %fxanim_mp_ver_stair_chain_sign_anim; +} + +#using_animtree("fxanim_props_dlc4"); + +precache_fxanim_props_dlc4() +{ + level.scr_anim["fxanim_props_dlc4"]["pennants_01"] = %fxanim_mp_frost_pennants_01_anim; + level.scr_anim["fxanim_props_dlc4"]["pennants_02"] = %fxanim_mp_frost_pennants_02_anim; + level.scr_anim["fxanim_props_dlc4"]["candy_sign"] = %fxanim_mp_frost_candy_sign_anim; + level.scr_anim["fxanim_props_dlc4"]["crane01"] = %fxanim_mp_frostbite_crane_01_anim; + level.scr_anim["fxanim_props_dlc4"]["crane02"] = %fxanim_mp_frostbite_crane_02_anim; + level.scr_anim["fxanim_props_dlc4"]["crane03"] = %fxanim_mp_frostbite_crane_03_anim; + level.scr_anim["fxanim_props_dlc4"]["crane04"] = %fxanim_mp_frostbite_crane_04_anim; + level.scr_anim["fxanim_props_dlc4"]["crane05"] = %fxanim_mp_frostbite_crane_05_anim; + level.scr_anim["fxanim_props_dlc4"]["river_ice"] = %fxanim_mp_frost_ice_anim; + level.scr_anim["fxanim_props_dlc4"]["river_ice2"] = %fxanim_mp_frost_ice_02_anim; + level.scr_anim["fxanim_props_dlc4"]["gate"] = %fxanim_mp_frost_gate_anim; +} diff --git a/MP/Maps/Grind/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Grind/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Grind/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Grind/aitype/enemy_dog_mp.gsc b/MP/Maps/Grind/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Grind/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Grind/character/character_mp_german_shepherd.gsc b/MP/Maps/Grind/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Grind/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Grind/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Grind/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Grind/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Grind/clientscripts/mp/createfx/mp_skate_fx.csc b/MP/Maps/Grind/clientscripts/mp/createfx/mp_skate_fx.csc new file mode 100644 index 0000000..c67b247 --- /dev/null +++ b/MP/Maps/Grind/clientscripts/mp/createfx/mp_skate_fx.csc @@ -0,0 +1,962 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -206.672, 791.965, 164.125 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2053.8, -43.695, 164.125 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2270.56, -96.2856, 164.125 ); + ent.v["angles"] = ( 0.998782, 272.997, 0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 576.598, 540.472, 164.125 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -80.8352, 584.464, 164.125 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1684.21, -406.001, 250.125 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -381.94, -1599.8, 216.125 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1429.05, -784.271, 135.125 ); + ent.v["angles"] = ( 1, 270.997, 0 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1599.65, -107.089, 164.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.997 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1193.21, -1297.63, 136.125 ); + ent.v["angles"] = ( 0.998782, 266.997, 0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 508.57, -1221.64, 136.125 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 62.9516, -1270.87, 184.125 ); + ent.v["angles"] = ( 359, 269.997, 0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1961.83, -828.267, 248.125 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -171.566, 388.264, 219.829 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_seaguls" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3562.07, 3901.73, 25.339 ); + ent.v["angles"] = ( 1.98193, 178.961, -1.03536 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_seaguls" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -862.444, 3993.28, 112.759 ); + ent.v["angles"] = ( 1.98193, 178.961, -1.03536 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_seaguls" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1396.64, 4056.87, 148.768 ); + ent.v["angles"] = ( 1.98193, 178.961, -1.03536 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_seaguls" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -6676.94, 2261.01, -17.496 ); + ent.v["angles"] = ( 1.98193, 178.961, -1.03536 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 59.0294, 846.673, 213.926 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 902.131, 888.74, 205.746 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2071.18, -57.5638, 164 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 287.997 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1460.01, -1097.78, 136.125 ); + ent.v["angles"] = ( 0.906439, 244.994, -0.422714 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -489.494, 173.128, 164 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -351.398, 734.361, 164 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1008.93, 480.972, 164.125 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1989.25, -402.344, 164.125 ); + ent.v["angles"] = ( 0.998782, 266.997, 0 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1539.57, -1286.25, 256.125 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1139.04, 166.352, 164.125 ); + ent.v["angles"] = ( 0.994673, 263.996, -0.104551 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_swirl_tube" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 936.926, 718.65, 165.507 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_swirl_tube" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1432.98, 417.074, 169 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_swirl_tube" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2047.69, 305.064, 168.193 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1820.03, -1169.6, 164.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 219.0 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2579.88, -368.749, 166.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1399.3, -1615.39, 138.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 240.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1202.72, -1271.48, 136.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1137.9, 257.75, 166.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 137.0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 983.217, -1705.19, 136.02 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2797.6, -297.135, 167.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 231.0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2821.9, -191.008, 160.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1905.09, -799.867, 164.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.997 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1988.4, -519.642, 256.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.997 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1560.31, -769.427, 256.125 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1938.12, -536.754, 250.125 ); + ent.v["angles"] = ( 359, 269.997, 0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -890.813, -1586.67, 256.125 ); + ent.v["angles"] = ( 0.220358, 273.026, -1.34401 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_skate_sun1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -694774, 416806, 1009240.0 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2187.82, -906.476, 168.043 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 863.314, 582.275, 164.125 ); + ent.v["angles"] = ( 0.998782, 266.997, 0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -810.17, 220.77, 164.125 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2276.83, -515.025, 248.125 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -258.444, 834.248, 164.125 ); + ent.v["angles"] = ( 0.994673, 263.996, -0.104551 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -464.759, 633.858, 164.125 ); + ent.v["angles"] = ( 0.994673, 263.996, -0.104551 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1416.18, -2099.24, 761.252 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1057.55, -1999.04, 667.403 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -644.763, -1933.24, 759.526 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -85.2617, -1966.6, 791.736 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1225.43, -981.035, 444.647 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1194.33, -812.42, 464.226 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2359.28, 168.284, 556.456 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2713.81, 176.24, 554.473 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -453.053, 1075.66, 604.107 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -573.053, 990.681, 634.994 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1542.71, 272.598, 634.013 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1355.53, 225.847, 572.936 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1694.89, 212.019, 642.524 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1887.51, 15.3983, 678.106 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1066.21, -634.358, 404.74 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1066.06, -559.569, 404.735 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1066.53, -484.936, 404.787 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1002.52, -486.686, 404.774 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1002.55, -559.665, 404.751 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1001.82, -633.688, 404.738 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -938.829, -633.718, 404.761 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -842.616, -634.285, 404.745 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -842.187, -560.05, 404.726 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -842.404, -486.349, 404.742 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -746.373, -485.842, 404.731 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -745.87, -633.641, 404.734 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -746.45, -559.687, 404.746 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -52.5196, -353.897, 396.75 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 107.534, -353.834, 396.735 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 267.635, -354.316, 396.77 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 427.583, -353.758, 396.741 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 587.876, -353.651, 396.732 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 747.584, -353.991, 396.739 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -52.0333, -483.212, 396.784 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -211.225, -481.931, 396.768 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -212.283, -609.602, 396.751 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -52.1382, -609.549, 396.737 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 116.991, -609.8, 396.786 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 108.006, -483.093, 396.778 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 108.5, -789.858, 402.74 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 268.678, -789.733, 402.732 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 427.782, -789.681, 402.74 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 587.546, -789.705, 402.745 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 748.481, -788.981, 402.785 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -937.421, -558.97, 404.793 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -937.582, -485.813, 404.737 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -315.257, -307.062, 407.775 ); + ent.v["angles"] = ( 89, 89.998, -180 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -186.537, -305.446, 407.775 ); + ent.v["angles"] = ( 89, 89.998, -180 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sq_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 710.711, -253.927, 297.775 ); + ent.v["angles"] = ( 89, 89.998, -180 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sq_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 774.344, -250.777, 298.775 ); + ent.v["angles"] = ( 89, 89.998, -180 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_godray_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -971.346, -887.58, 439.675 ); + ent.v["angles"] = ( 45.6192, 321.078, 129.794 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_godray_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -465.693, -590.745, 429.875 ); + ent.v["angles"] = ( 89, 89.998, -180 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_godray_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -467.529, -451.884, 429.875 ); + ent.v["angles"] = ( 89, 89.998, -180 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_godray_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -470.464, -317.062, 429.875 ); + ent.v["angles"] = ( 89, 89.998, -180 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1204.73, -887.71, 340.125 ); + ent.v["angles"] = ( 0, 359.997, -1 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1079.14, -548.138, 346 ); + ent.v["angles"] = ( 0, 359.997, -1 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -443.187, -277.867, 328.156 ); + ent.v["angles"] = ( 1, 270.997, 0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 787.875, -616.608, 241.504 ); + ent.v["angles"] = ( 0, 178, 1 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 395.063, -778.421, 227.497 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1848.58, -1545.43, 375.875 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1849.36, -1670.85, 375.875 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1716.15, -1779.75, 375.875 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sq_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1995.54, -1512.73, 401.175 ); + ent.v["angles"] = ( 43.6595, 322.337, 62.6682 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1952.07, -1422.77, 300.125 ); + ent.v["angles"] = ( 359, 271.997, 0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1587.15, -1852.59, 298.125 ); + ent.v["angles"] = ( 0, 179.997, 1 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sq_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2005.13, -1688.16, 405.175 ); + ent.v["angles"] = ( 39.1217, 319.541, 60.7125 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_godray_lg_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 583.52, -609.755, 428.557 ); + ent.v["angles"] = ( 51.5932, 323.433, 136.976 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_godray_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -734.895, -888.446, 423.775 ); + ent.v["angles"] = ( 58.858, 331.357, 140.615 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sq_4" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1937.78, -1837, 421.375 ); + ent.v["angles"] = ( 39.1217, 319.541, 60.7125 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sq_4" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1749.87, -1839.67, 413.375 ); + ent.v["angles"] = ( 39.1217, 319.541, 60.7125 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_godray_lg_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 266.572, -617.806, 427.875 ); + ent.v["angles"] = ( 51.5932, 323.433, 136.976 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2805.77, -443.645, 250.125 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3065.46, -422.518, 250.125 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3448.81, -500.516, 250.125 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2857.62, -423.1, 250.125 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3251.74, -404.065, 250.125 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_sand_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1125.44, 792.669, 161.148 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_sand_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1048.26, 1627.98, 130 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -90.0779, 1191.85, 160 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 229.246, 1202.5, 155.893 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 547.407, 1278.27, 147.325 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_sand_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 89.8637, 1754.01, 147.787 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_sand_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -655.635, 1750.8, 146.159 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_sand_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1382.01, 2018.33, 122.14 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_sand_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1524.68, 998.233, 142.886 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_toilet_water" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2213.29, -1772.63, 256.125 ); + ent.v["angles"] = ( 270.035, 358.055, -90.0577 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -154.127, 906.933, 204.657 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2112.51, -1764.81, 277.125 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sq_4" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -508.97, -506.96, 431.798 ); + ent.v["angles"] = ( 39.1217, 319.541, 60.7125 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sq_4" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -488.73, -267.467, 446.875 ); + ent.v["angles"] = ( 39.1217, 319.541, 60.7125 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 473.157, -1638.97, 141.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 132.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1532.16, 179.911, 168 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 312.0 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 74.0794, 223.228, 48.1639 ); + ent.v["angles"] = ( 0, 90, 4 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 332.097, 239.007, 45 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -378.891, -694.41, 342.635 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 256, -647.765, 256.02 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1446.49, -847.94, 138.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1392.94, -790.177, 139.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1036.99, 54.9113, 386.743 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 966.192, 54.4502, 386.749 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1105.19, 55.2792, 355.523 ); + ent.v["angles"] = ( 46, 176, 0 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -883.011, -238.186, 401.961 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -472.346, -943.438, 348.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -310.282, -603.774, 292.193 ); + ent.v["angles"] = ( 0, 358.996, 1 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -319.667, -306.077, 301.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1198.28, -999.605, 325.933 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -444.272, -1007.21, 328.463 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1286.84, 175.232, 204.002 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -997.889, -217.299, 327.688 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 462.559, -872.949, 297.875 ); + ent.v["angles"] = ( 89, 89.998, -180 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 462.245, -969.577, 297.875 ); + ent.v["angles"] = ( 89, 89.998, -180 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 928.616, -448.561, 343.875 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 927.757, -384.065, 343.875 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 928.481, -319.961, 343.875 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 928.592, -256.074, 343.875 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2122.23, -1819.42, 375.875 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2122.04, -1569.09, 375.875 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1689.12, -1578.84, 240.125 ); + ent.v["angles"] = ( 359.001, 266.997, 0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 181.132, -1701.32, 290.584 ); + ent.v["angles"] = ( 353.219, 273.112, -1.31069 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1791.68, -913.456, 255.125 ); + ent.v["angles"] = ( 1, 267.01, 0.775123 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -432.054, 860.857, 163.125 ); + ent.v["angles"] = ( 0, 265.996, -0.207937 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -762.608, 641.574, 164.125 ); + ent.v["angles"] = ( 0, 273.994, -0.342054 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1584.33, -1132.52, 258.125 ); + ent.v["angles"] = ( 1, 266.992, -0.225029 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -113.097, -1887.78, 298.113 ); + ent.v["angles"] = ( 357, 254, 0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1624.38, 45.5252, 234.125 ); + ent.v["angles"] = ( 0, 277.994, -0.35791 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -212.386, -1574.7, 199.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 46.5117, -1765.86, 297.094 ); + ent.v["angles"] = ( 356, 254, 0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1923.47, -476.697, 250.125 ); + ent.v["angles"] = ( 1.93186, 272.023, 0.772496 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1880.05, -1829.36, 311.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1932.59, -1568.29, 312.067 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2021.9, -1675.13, 332.432 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1462.3, -769.967, 269.125 ); + ent.v["angles"] = ( 2, 266.988, -0.225131 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sq_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 746.591, -522.948, 373.15 ); + ent.v["angles"] = ( 90, 335.101, 65.1042 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sq_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 747.993, -661.899, 374.157 ); + ent.v["angles"] = ( 90, 335.101, 65.1042 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sq_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 108.296, -669.949, 374.159 ); + ent.v["angles"] = ( 90, 335.101, 65.1042 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sq_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -115.177, -668.703, 374.152 ); + ent.v["angles"] = ( 90, 335.101, 65.1042 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sq_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -115.452, -522.264, 374.162 ); + ent.v["angles"] = ( 90, 335.101, 65.1042 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sq_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 107.706, -521.447, 374.159 ); + ent.v["angles"] = ( 90, 335.101, 65.1042 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 757.596, -481.557, 396.751 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 747.538, -609.668, 396.748 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -23; +} diff --git a/MP/Maps/Grind/clientscripts/mp/mp_skate.csc b/MP/Maps/Grind/clientscripts/mp/mp_skate.csc new file mode 100644 index 0000000..6d7fc02 --- /dev/null +++ b/MP/Maps/Grind/clientscripts/mp/mp_skate.csc @@ -0,0 +1,23 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_skate_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_skate_amb; + +main() +{ + level.worldmapx = 0; + level.worldmapy = 0; + level.worldlat = 33.9857; + level.worldlong = -118.474; + clientscripts\mp\_load::main(); + clientscripts\mp\mp_skate_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_skate_amb::main(); + waitforclient( 0 ); +/# + println( "*** Client : mp_skate running..." ); +#/ +} diff --git a/MP/Maps/Grind/clientscripts/mp/mp_skate_amb.csc b/MP/Maps/Grind/clientscripts/mp/mp_skate_amb.csc new file mode 100644 index 0000000..dca7fac --- /dev/null +++ b/MP/Maps/Grind/clientscripts/mp/mp_skate_amb.csc @@ -0,0 +1,69 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "skate_outdoor", 1 ); + setambientroomtone( "skate_outdoor", "amb_wind_exterior_2d", 0.7, 1 ); + setambientroomreverb( "skate_outdoor", "skate_outdoor", 1, 1 ); + setambientroomcontext( "skate_outdoor", "ringoff_plr", "outdoor" ); + declareambientroom( "med_stone_room" ); + setambientroomtone( "med_stone_room", "amb_wind_interior_2d", 0.7, 1 ); + setambientroomreverb( "med_stone_room", "skate_stoneroom", 1, 1 ); + setambientroomcontext( "med_stone_room", "ringoff_plr", "indoor" ); + declareambientroom( "indoor_skate_room" ); + setambientroomtone( "indoor_skate_room", "amb_wind_interior_2d", 0.7, 1 ); + setambientroomreverb( "indoor_skate_room", "skate_mediumroom", 1, 1 ); + setambientroomcontext( "indoor_skate_room", "ringoff_plr", "indoor" ); + declareambientroom( "indoor_store_room" ); + setambientroomtone( "indoor_store_room", "amb_wind_interior_2d", 0.7, 1 ); + setambientroomreverb( "indoor_store_room", "skate_smallroom", 1, 1 ); + setambientroomcontext( "indoor_store_room", "ringoff_plr", "indoor" ); + declareambientroom( "locker_room" ); + setambientroomtone( "locker_room", "amb_wind_interior_2d", 0.7, 1 ); + setambientroomreverb( "locker_room", "skate_locker", 1, 1 ); + setambientroomcontext( "locker_room", "ringoff_plr", "indoor" ); + declareambientroom( "mtl_corridor_room" ); + setambientroomtone( "mtl_corridor_room", "amb_wind_interior_2d", 0.7, 1 ); + setambientroomreverb( "mtl_corridor_room", "skate_corridor", 1, 1 ); + setambientroomcontext( "mtl_corridor_room", "ringoff_plr", "indoor" ); + declareambientroom( "partial_stone_room" ); + setambientroomtone( "partial_stone_room", "amb_wind_exterior_2d_qt", 0.7, 1 ); + setambientroomreverb( "partial_stone_room", "skate_stoneroom", 1, 1 ); + setambientroomcontext( "partial_stone_room", "ringoff_plr", "outdoor" ); + declareambientroom( "full_pipe_room" ); + setambientroomtone( "full_pipe_room", "amb_wind_interior_2d", 0.7, 1 ); + setambientroomreverb( "full_pipe_room", "skate_pipe", 1, 1 ); + setambientroomcontext( "full_pipe_room", "ringoff_plr", "outdoor" ); + declareambientroom( "underground_room" ); + setambientroomtone( "underground_room", "amb_wind_interior_2d", 0.7, 1 ); + setambientroomreverb( "underground_room", "skate_stoneroom_sml", 1, 1 ); + setambientroomcontext( "underground_room", "ringoff_plr", "indoor" ); + declareambientroom( "open_halfpipe_room" ); + setambientroomtone( "open_halfpipe_room", "amb_wind_exterior_2d_qt", 0.7, 1 ); + setambientroomreverb( "open_halfpipe_room", "skate_pipe", 1, 1 ); + setambientroomcontext( "open_halfpipe_room", "ringoff_plr", "outdoor" ); + declareambientroom( "restroom_room" ); + setambientroomtone( "restroom_room", "amb_wind_interior_2d", 0.7, 1 ); + setambientroomreverb( "restroom_room", "skate_tile_room", 1, 1 ); + setambientroomcontext( "restroom_room", "ringoff_plr", "indoor" ); + declareambientroom( "covered_platform_room" ); + setambientroomtone( "covered_platform_room", "amb_wind_interior_2d", 0.7, 1 ); + setambientroomreverb( "covered_platform_room", "skate_platform", 1, 1 ); + setambientroomcontext( "covered_platform_room", "ringoff_plr", "outdoor" ); + thread snd_start_autofx_audio(); + thread snd_play_loopers(); +} + +snd_play_loopers() +{ + +} + +snd_start_autofx_audio() +{ + +} diff --git a/MP/Maps/Grind/clientscripts/mp/mp_skate_fx.csc b/MP/Maps/Grind/clientscripts/mp/mp_skate_fx.csc new file mode 100644 index 0000000..4cfd02f --- /dev/null +++ b/MP/Maps/Grind/clientscripts/mp/mp_skate_fx.csc @@ -0,0 +1,61 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\createfx\mp_skate_fx; +#include clientscripts\mp\_fx; + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_lf_mp_skate_sun1"] = loadfx( "lens_flares/fx_lf_mp_skate_sun1" ); + level._effect["fx_mp_debris_papers"] = loadfx( "maps/mp_maps/fx_mp_debris_papers" ); + level._effect["fx_mp_skate_dust"] = loadfx( "maps/mp_maps/fx_mp_skate_dust" ); + level._effect["fx_mp_skate_flies"] = loadfx( "maps/mp_maps/fx_mp_skate_flies" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_mp_skate_seaguls"] = loadfx( "maps/mp_maps/fx_mp_skate_seaguls" ); + level._effect["fx_mp_skate_paper_devil"] = loadfx( "maps/mp_maps/fx_mp_skate_paper_devil" ); + level._effect["fx_mp_skate_paper_tree_gust"] = loadfx( "maps/mp_maps/fx_mp_skate_paper_tree_gust" ); + level._effect["fx_mp_skate_light_sml"] = loadfx( "maps/mp_maps/fx_mp_skate_light_sml" ); + level._effect["fx_mp_skate_light_sq"] = loadfx( "maps/mp_maps/fx_mp_skate_light_sq" ); + level._effect["fx_mp_skate_light_sq_2"] = loadfx( "maps/mp_maps/fx_mp_skate_light_sq_2" ); + level._effect["fx_mp_skate_light_sq_3"] = loadfx( "maps/mp_maps/fx_mp_skate_light_sq_3" ); + level._effect["fx_mp_skate_light_sq_4"] = loadfx( "maps/mp_maps/fx_mp_skate_light_sq_4" ); + level._effect["fx_mp_skate_godray_lg"] = loadfx( "maps/mp_maps/fx_mp_skate_godray_lg" ); + level._effect["fx_mp_skate_godray_lg_2"] = loadfx( "maps/mp_maps/fx_mp_skate_godray_lg_2" ); + level._effect["fx_mp_skate_godray_md"] = loadfx( "maps/mp_maps/fx_mp_skate_godray_md" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_skate_sand_gust"] = loadfx( "maps/mp_maps/fx_mp_skate_sand_gust" ); + level._effect["fx_mp_skate_sand_gust_sm"] = loadfx( "maps/mp_maps/fx_mp_skate_sand_gust_sm" ); + level._effect["fx_mp_skate_toilet_water"] = loadfx( "maps/mp_maps/fx_mp_skate_toilet_water" ); + level._effect["fx_paper_swirl_tube"] = loadfx( "debris/fx_paper_swirl_tube" ); + level._effect["fx_paper_arc_ramp"] = loadfx( "debris/fx_paper_arc_ramp" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["air_dancer"] = %fxanim_mp_skate_air_dancer_anim; + level.scr_anim["fxanim_props"]["seagull_circle_01"] = %fxanim_gp_seagull_circle_01_anim; + level.scr_anim["fxanim_props"]["seagull_circle_02"] = %fxanim_gp_seagull_circle_02_anim; + level.scr_anim["fxanim_props"]["seagull_circle_03"] = %fxanim_gp_seagull_circle_03_anim; + level.scr_anim["fxanim_props"]["ferris_wheel_spin"] = %fxanim_mp_skate_ferris_wheel_spin_anim; + level.scr_anim["fxanim_props"]["banner_01"] = %fxanim_mp_skate_banner_01_anim; + level.scr_anim["fxanim_props"]["teardrop_flag"] = %fxanim_gp_teardrop_flag_loop_anim; +} + +main() +{ + clientscripts\mp\createfx\mp_skate_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fxanim_props(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} diff --git a/MP/Maps/Grind/maps/mp/createfx/mp_skate_fx.gsc b/MP/Maps/Grind/maps/mp/createfx/mp_skate_fx.gsc new file mode 100644 index 0000000..eaa2629 --- /dev/null +++ b/MP/Maps/Grind/maps/mp/createfx/mp_skate_fx.gsc @@ -0,0 +1,962 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -206.672, 791.965, 164.125 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2053.8, -43.695, 164.125 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2270.56, -96.2856, 164.125 ); + ent.v["angles"] = ( 0.998782, 272.997, 0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 576.598, 540.472, 164.125 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -80.8352, 584.464, 164.125 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1684.21, -406.001, 250.125 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -381.94, -1599.8, 216.125 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1429.05, -784.271, 135.125 ); + ent.v["angles"] = ( 1, 270.997, 0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1599.65, -107.089, 164.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.997 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1193.21, -1297.63, 136.125 ); + ent.v["angles"] = ( 0.998782, 266.997, 0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 508.57, -1221.64, 136.125 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 62.9516, -1270.87, 184.125 ); + ent.v["angles"] = ( 359, 269.997, 0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1961.83, -828.267, 248.125 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -171.566, 388.264, 219.829 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_seaguls" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3562.07, 3901.73, 25.339 ); + ent.v["angles"] = ( 1.98193, 178.961, -1.03536 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_seaguls" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -862.444, 3993.28, 112.759 ); + ent.v["angles"] = ( 1.98193, 178.961, -1.03536 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_seaguls" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1396.64, 4056.87, 148.768 ); + ent.v["angles"] = ( 1.98193, 178.961, -1.03536 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_seaguls" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -6676.94, 2261.01, -17.496 ); + ent.v["angles"] = ( 1.98193, 178.961, -1.03536 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 59.0294, 846.673, 213.926 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 902.131, 888.74, 205.746 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2071.18, -57.5638, 164 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 287.997 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1460.01, -1097.78, 136.125 ); + ent.v["angles"] = ( 0.906439, 244.994, -0.422714 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -489.494, 173.128, 164 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -351.398, 734.361, 164 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1008.93, 480.972, 164.125 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1989.25, -402.344, 164.125 ); + ent.v["angles"] = ( 0.998782, 266.997, 0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1539.57, -1286.25, 256.125 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1139.04, 166.352, 164.125 ); + ent.v["angles"] = ( 0.994673, 263.996, -0.104551 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_swirl_tube" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 936.926, 718.65, 165.507 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_swirl_tube" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1432.98, 417.074, 169 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_swirl_tube" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2047.69, 305.064, 168.193 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1820.03, -1169.6, 164.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 219.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2579.88, -368.749, 166.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1399.3, -1615.39, 138.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 240.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1202.72, -1271.48, 136.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1137.9, 257.75, 166.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 137.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 983.217, -1705.19, 136.02 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2797.6, -297.135, 167.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 231.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2821.9, -191.008, 160.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1905.09, -799.867, 164.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.997 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1988.4, -519.642, 256.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.997 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1560.31, -769.427, 256.125 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1938.12, -536.754, 250.125 ); + ent.v["angles"] = ( 359, 269.997, 0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -890.813, -1586.67, 256.125 ); + ent.v["angles"] = ( 0.220358, 273.026, -1.34401 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_skate_sun1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -694774, 416806, 1009240.0 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2187.82, -906.476, 168.043 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 863.314, 582.275, 164.125 ); + ent.v["angles"] = ( 0.998782, 266.997, 0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -810.17, 220.77, 164.125 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2276.83, -515.025, 248.125 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -258.444, 834.248, 164.125 ); + ent.v["angles"] = ( 0.994673, 263.996, -0.104551 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -464.759, 633.858, 164.125 ); + ent.v["angles"] = ( 0.994673, 263.996, -0.104551 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1416.18, -2099.24, 761.252 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1057.55, -1999.04, 667.403 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -644.763, -1933.24, 759.526 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -85.2617, -1966.6, 791.736 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1225.43, -981.035, 444.647 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1194.33, -812.42, 464.226 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2359.28, 168.284, 556.456 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2713.81, 176.24, 554.473 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -453.053, 1075.66, 604.107 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -573.053, 990.681, 634.994 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1542.71, 272.598, 634.013 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1355.53, 225.847, 572.936 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1694.89, 212.019, 642.524 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1887.51, 15.3983, 678.106 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1066.21, -634.358, 404.74 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1066.06, -559.569, 404.735 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1066.53, -484.936, 404.787 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1002.52, -486.686, 404.774 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1002.55, -559.665, 404.751 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1001.82, -633.688, 404.738 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -938.829, -633.718, 404.761 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -842.616, -634.285, 404.745 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -842.187, -560.05, 404.726 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -842.404, -486.349, 404.742 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -746.373, -485.842, 404.731 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -745.87, -633.641, 404.734 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -746.45, -559.687, 404.746 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -52.5196, -353.897, 396.75 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 107.534, -353.834, 396.735 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 267.635, -354.316, 396.77 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 427.583, -353.758, 396.741 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 587.876, -353.651, 396.732 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 747.584, -353.991, 396.739 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -52.0333, -483.212, 396.784 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -211.225, -481.931, 396.768 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -212.283, -609.602, 396.751 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -52.1382, -609.549, 396.737 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 116.991, -609.8, 396.786 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 108.006, -483.093, 396.778 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 108.5, -789.858, 402.74 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 268.678, -789.733, 402.732 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 427.782, -789.681, 402.74 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 587.546, -789.705, 402.745 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 748.481, -788.981, 402.785 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -937.421, -558.97, 404.793 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -937.582, -485.813, 404.737 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -315.257, -307.062, 407.775 ); + ent.v["angles"] = ( 89, 89.998, -180 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -186.537, -305.446, 407.775 ); + ent.v["angles"] = ( 89, 89.998, -180 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sq_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 710.711, -253.927, 297.775 ); + ent.v["angles"] = ( 89, 89.998, -180 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sq_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 774.344, -250.777, 298.775 ); + ent.v["angles"] = ( 89, 89.998, -180 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_godray_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -971.346, -887.58, 439.675 ); + ent.v["angles"] = ( 45.6192, 321.078, 129.794 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_godray_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -465.693, -590.745, 429.875 ); + ent.v["angles"] = ( 89, 89.998, -180 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_godray_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -467.529, -451.884, 429.875 ); + ent.v["angles"] = ( 89, 89.998, -180 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_godray_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -470.464, -317.062, 429.875 ); + ent.v["angles"] = ( 89, 89.998, -180 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1204.73, -887.71, 340.125 ); + ent.v["angles"] = ( 0, 359.997, -1 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1079.14, -548.138, 346 ); + ent.v["angles"] = ( 0, 359.997, -1 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -443.187, -277.867, 328.156 ); + ent.v["angles"] = ( 1, 270.997, 0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 787.875, -616.608, 241.504 ); + ent.v["angles"] = ( 0, 178, 1 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 395.063, -778.421, 227.497 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1848.58, -1545.43, 375.875 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1849.36, -1670.85, 375.875 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1716.15, -1779.75, 375.875 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sq_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1995.54, -1512.73, 401.175 ); + ent.v["angles"] = ( 43.6595, 322.337, 62.6682 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1952.07, -1422.77, 300.125 ); + ent.v["angles"] = ( 359, 271.997, 0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1587.15, -1852.59, 298.125 ); + ent.v["angles"] = ( 0, 179.997, 1 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sq_3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2005.13, -1688.16, 405.175 ); + ent.v["angles"] = ( 39.1217, 319.541, 60.7125 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_godray_lg_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 583.52, -609.755, 428.557 ); + ent.v["angles"] = ( 51.5932, 323.433, 136.976 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_godray_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -734.895, -888.446, 423.775 ); + ent.v["angles"] = ( 58.858, 331.357, 140.615 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sq_4" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1937.78, -1837, 421.375 ); + ent.v["angles"] = ( 39.1217, 319.541, 60.7125 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sq_4" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1749.87, -1839.67, 413.375 ); + ent.v["angles"] = ( 39.1217, 319.541, 60.7125 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_godray_lg_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 266.572, -617.806, 427.875 ); + ent.v["angles"] = ( 51.5932, 323.433, 136.976 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2805.77, -443.645, 250.125 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3065.46, -422.518, 250.125 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3448.81, -500.516, 250.125 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2857.62, -423.1, 250.125 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3251.74, -404.065, 250.125 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_sand_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1125.44, 792.669, 161.148 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_sand_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1048.26, 1627.98, 130 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -90.0779, 1191.85, 160 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 229.246, 1202.5, 155.893 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 547.407, 1278.27, 147.325 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_sand_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 89.8637, 1754.01, 147.787 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_sand_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -655.635, 1750.8, 146.159 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_sand_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1382.01, 2018.33, 122.14 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_sand_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1524.68, 998.233, 142.886 ); + ent.v["angles"] = ( 360, 269.997, 0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_toilet_water" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2213.29, -1772.63, 256.125 ); + ent.v["angles"] = ( 270.035, 358.055, -90.0577 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -154.127, 906.933, 204.657 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2112.51, -1764.81, 277.125 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sq_4" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -508.97, -506.96, 431.798 ); + ent.v["angles"] = ( 39.1217, 319.541, 60.7125 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sq_4" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -488.73, -267.467, 446.875 ); + ent.v["angles"] = ( 39.1217, 319.541, 60.7125 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 473.157, -1638.97, 141.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 132.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1532.16, 179.911, 168 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 312.0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 74.0794, 223.228, 48.1639 ); + ent.v["angles"] = ( 0, 90, 4 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 332.097, 239.007, 45 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -378.891, -694.41, 342.635 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 256, -647.765, 256.02 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1446.49, -847.94, 138.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_arc_ramp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1392.94, -790.177, 139.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1036.99, 54.9113, 386.743 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 966.192, 54.4502, 386.749 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1105.19, 55.2792, 355.523 ); + ent.v["angles"] = ( 46, 176, 0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -883.011, -238.186, 401.961 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -472.346, -943.438, 348.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -310.282, -603.774, 292.193 ); + ent.v["angles"] = ( 0, 358.996, 1 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -319.667, -306.077, 301.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1198.28, -999.605, 325.933 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -444.272, -1007.21, 328.463 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1286.84, 175.232, 204.002 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -997.889, -217.299, 327.688 ); + ent.v["angles"] = ( 1, 269.997, 0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 462.559, -872.949, 297.875 ); + ent.v["angles"] = ( 89, 89.998, -180 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 462.245, -969.577, 297.875 ); + ent.v["angles"] = ( 89, 89.998, -180 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 928.616, -448.561, 343.875 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 927.757, -384.065, 343.875 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 928.481, -319.961, 343.875 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 928.592, -256.074, 343.875 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2122.23, -1819.42, 375.875 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2122.04, -1569.09, 375.875 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1689.12, -1578.84, 240.125 ); + ent.v["angles"] = ( 359.001, 266.997, 0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 181.132, -1701.32, 290.584 ); + ent.v["angles"] = ( 353.219, 273.112, -1.31069 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1791.68, -913.456, 255.125 ); + ent.v["angles"] = ( 1, 267.01, 0.775123 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -432.054, 860.857, 163.125 ); + ent.v["angles"] = ( 0, 265.996, -0.207937 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -762.608, 641.574, 164.125 ); + ent.v["angles"] = ( 0, 273.994, -0.342054 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1584.33, -1132.52, 258.125 ); + ent.v["angles"] = ( 1, 266.992, -0.225029 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -113.097, -1887.78, 298.113 ); + ent.v["angles"] = ( 357, 254, 0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1624.38, 45.5252, 234.125 ); + ent.v["angles"] = ( 0, 277.994, -0.35791 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -212.386, -1574.7, 199.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 46.5117, -1765.86, 297.094 ); + ent.v["angles"] = ( 356, 254, 0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1923.47, -476.697, 250.125 ); + ent.v["angles"] = ( 1.93186, 272.023, 0.772496 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1880.05, -1829.36, 311.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1932.59, -1568.29, 312.067 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2021.9, -1675.13, 332.432 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1462.3, -769.967, 269.125 ); + ent.v["angles"] = ( 2, 266.988, -0.225131 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sq_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 746.591, -522.948, 373.15 ); + ent.v["angles"] = ( 90, 335.101, 65.1042 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sq_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 747.993, -661.899, 374.157 ); + ent.v["angles"] = ( 90, 335.101, 65.1042 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sq_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 108.296, -669.949, 374.159 ); + ent.v["angles"] = ( 90, 335.101, 65.1042 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sq_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -115.177, -668.703, 374.152 ); + ent.v["angles"] = ( 90, 335.101, 65.1042 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sq_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -115.452, -522.264, 374.162 ); + ent.v["angles"] = ( 90, 335.101, 65.1042 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sq_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 107.706, -521.447, 374.159 ); + ent.v["angles"] = ( 90, 335.101, 65.1042 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 757.596, -481.557, 396.751 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 747.538, -609.668, 396.748 ); + ent.v["angles"] = ( 90, 304.575, 34.5781 ); + ent.v["delay"] = -23; +} diff --git a/MP/Maps/Grind/maps/mp/mp_skate.gsc b/MP/Maps/Grind/maps/mp/mp_skate.gsc new file mode 100644 index 0000000..7a64163 --- /dev/null +++ b/MP/Maps/Grind/maps/mp/mp_skate.gsc @@ -0,0 +1,52 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_skate_fx; +#include maps\mp\_load; +#include maps\mp\mp_skate_amb; +#include maps\mp\_compass; +#include maps\mp\gametypes\_spawning; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_skate_fx::main(); + maps\mp\_load::main(); + maps\mp\mp_skate_amb::main(); + precachemodel( "collision_physics_cylinder_32x128" ); + precachemodel( "collision_clip_wall_128x128x10" ); + precachemodel( "collision_physics_clip_64x64x10" ); + precachemodel( "paris_construction_scaffold_piece_01" ); + maps\mp\_compass::setupminimap( "compass_map_mp_skate" ); + visionsetnaked( "mp_skate", 1 ); + setdvar( "compassmaxrange", "2100" ); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + spawncollision( "collision_physics_cylinder_32x128", "collider", ( -1045, -418.5, 292 ), vectorscale( ( 0, 1, 0 ), 359.8 ) ); + spawncollision( "collision_physics_cylinder_32x128", "collider", ( -720, -628, 292 ), vectorscale( ( 0, 1, 0 ), 355.6 ) ); + spawncollision( "collision_clip_wall_128x128x10", "collider", ( -2250.5, -837.5, 422.5 ), ( 0, 0, 0 ) ); + spawncollision( "collision_clip_wall_128x128x10", "collider", ( -2333, -837.5, 422.5 ), ( 0, 0, 0 ) ); + spawncollision( "collision_physics_64x64x10", "collider", ( -663.5, -1975.5, 314 ), ( 0, 0, 0 ) ); + pipe1 = spawn( "script_model", ( -1368, -1541, 257 ) ); + pipe1.angles = vectorscale( ( 0, 1, 0 ), 90.0 ); + pipe1 setmodel( "paris_construction_scaffold_piece_01" ); + maps\mp\gametypes\_spawning::level_use_unified_spawning( 1 ); + level.remotemotarviewleft = 40; + level.remotemotarviewright = 40; + level.remotemotarviewup = 20; + level.remotemotarviewdown = 65; +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2300", reset_dvars ); +} diff --git a/MP/Maps/Grind/maps/mp/mp_skate_amb.gsc b/MP/Maps/Grind/maps/mp/mp_skate_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Grind/maps/mp/mp_skate_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Grind/maps/mp/mp_skate_fx.gsc b/MP/Maps/Grind/maps/mp/mp_skate_fx.gsc new file mode 100644 index 0000000..5c3c4d3 --- /dev/null +++ b/MP/Maps/Grind/maps/mp/mp_skate_fx.gsc @@ -0,0 +1,56 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_skate_fx; + +main() +{ + precache_fxanim_props(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_skate_fx::main(); +} + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_lf_mp_skate_sun1"] = loadfx( "lens_flares/fx_lf_mp_skate_sun1" ); + level._effect["fx_mp_debris_papers"] = loadfx( "maps/mp_maps/fx_mp_debris_papers" ); + level._effect["fx_mp_skate_dust"] = loadfx( "maps/mp_maps/fx_mp_skate_dust" ); + level._effect["fx_mp_skate_flies"] = loadfx( "maps/mp_maps/fx_mp_skate_flies" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_mp_skate_seaguls"] = loadfx( "maps/mp_maps/fx_mp_skate_seaguls" ); + level._effect["fx_mp_skate_paper_devil"] = loadfx( "maps/mp_maps/fx_mp_skate_paper_devil" ); + level._effect["fx_mp_skate_paper_tree_gust"] = loadfx( "maps/mp_maps/fx_mp_skate_paper_tree_gust" ); + level._effect["fx_mp_skate_light_sml"] = loadfx( "maps/mp_maps/fx_mp_skate_light_sml" ); + level._effect["fx_mp_skate_light_sq"] = loadfx( "maps/mp_maps/fx_mp_skate_light_sq" ); + level._effect["fx_mp_skate_light_sq_2"] = loadfx( "maps/mp_maps/fx_mp_skate_light_sq_2" ); + level._effect["fx_mp_skate_light_sq_3"] = loadfx( "maps/mp_maps/fx_mp_skate_light_sq_3" ); + level._effect["fx_mp_skate_light_sq_4"] = loadfx( "maps/mp_maps/fx_mp_skate_light_sq_4" ); + level._effect["fx_mp_skate_godray_lg"] = loadfx( "maps/mp_maps/fx_mp_skate_godray_lg" ); + level._effect["fx_mp_skate_godray_lg_2"] = loadfx( "maps/mp_maps/fx_mp_skate_godray_lg_2" ); + level._effect["fx_mp_skate_godray_md"] = loadfx( "maps/mp_maps/fx_mp_skate_godray_md" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_skate_sand_gust"] = loadfx( "maps/mp_maps/fx_mp_skate_sand_gust" ); + level._effect["fx_mp_skate_sand_gust_sm"] = loadfx( "maps/mp_maps/fx_mp_skate_sand_gust_sm" ); + level._effect["fx_mp_skate_toilet_water"] = loadfx( "maps/mp_maps/fx_mp_skate_toilet_water" ); + level._effect["fx_paper_swirl_tube"] = loadfx( "debris/fx_paper_swirl_tube" ); + level._effect["fx_paper_arc_ramp"] = loadfx( "debris/fx_paper_arc_ramp" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["air_dancer"] = %fxanim_mp_skate_air_dancer_anim; + level.scr_anim["fxanim_props"]["seagull_circle_01"] = %fxanim_gp_seagull_circle_01_anim; + level.scr_anim["fxanim_props"]["seagull_circle_02"] = %fxanim_gp_seagull_circle_02_anim; + level.scr_anim["fxanim_props"]["seagull_circle_03"] = %fxanim_gp_seagull_circle_03_anim; + level.scr_anim["fxanim_props"]["ferris_wheel_spin"] = %fxanim_mp_skate_ferris_wheel_spin_anim; + level.scr_anim["fxanim_props"]["banner_01"] = %fxanim_mp_skate_banner_01_anim; + level.scr_anim["fxanim_props"]["teardrop_flag"] = %fxanim_gp_teardrop_flag_loop_anim; +} diff --git a/MP/Maps/Hijacked/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Hijacked/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Hijacked/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Hijacked/aitype/enemy_dog_mp.gsc b/MP/Maps/Hijacked/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Hijacked/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Hijacked/character/character_mp_german_shepherd.gsc b/MP/Maps/Hijacked/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Hijacked/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Hijacked/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Hijacked/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Hijacked/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Hijacked/clientscripts/mp/createfx/mp_hijacked_fx.csc b/MP/Maps/Hijacked/clientscripts/mp/createfx/mp_hijacked_fx.csc new file mode 100644 index 0000000..5927b06 --- /dev/null +++ b/MP/Maps/Hijacked/clientscripts/mp/createfx/mp_hijacked_fx.csc @@ -0,0 +1,1127 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hijacked_jacuzzi_surface" ); + ent.v["origin"] = ( -90.1606, 407.945, 78.25 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hijacked_jacuzzi_steam" ); + ent.v["origin"] = ( -92.9653, 422.779, 63.25 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hijacked_jacuzzi_steam" ); + ent.v["origin"] = ( -2614.9, -20.3813, -95.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hijacked_jacuzzi_steam" ); + ent.v["origin"] = ( -2759.45, 58.6316, -104.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_hijacked_sun1" ); + ent.v["origin"] = ( 54061.7, 41344.5, 11412 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( 573.76, 144.561, 590.63 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( 575.94, -142.117, 589.247 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_shower_dribble" ); + ent.v["origin"] = ( -179.646, 7.25836, 122.875 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( -465.908, 138.082, -64.465 ); + ent.v["angles"] = ( 9, 182, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( -468.137, 68.1617, -60.7915 ); + ent.v["angles"] = ( 12, 182, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( -103.006, 72.8002, -62.7217 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 9.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( -106.924, 136.317, -61.3858 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 12.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 249.077, 167.536, 2.53726 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 253.728, 264.641, 2.55747 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 250.685, 53.8219, 2.39799 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 248.311, -54.6842, 2.48961 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 513.258, 281.236, 10.9304 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -696.048, -89.0073, -57.8954 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 118.751, 292.842, 2.43011 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -18.5375, 141.529, -35.5661 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -18.518, 77.4566, -34.5459 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 117.807, -103.555, 1.44659 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -34.3314, -102.545, 1.5224 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 446.336, -28.4747, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 377.337, -182.483, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 490.328, 3.23551, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 446.01, -182.985, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 376.631, -27.1527, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 758.531, 3.59217, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 759.759, 99.8241, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 620.425, 53.7003, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 490.33, 98.9914, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 376.754, -357.466, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 446.882, -357.271, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1187.12, -122.312, 35.6413 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1186.13, -47.936, 35.1503 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1186.13, 49.0877, 34.0694 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1186.13, 131.298, 35.2899 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1186.13, 223.104, 35.8791 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1817.29, -289.908, 32.2346 ); + ent.v["angles"] = ( 359.642, 111, 0.934186 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1696.05, -333.653, 32.5811 ); + ent.v["angles"] = ( 359.642, 111, 0.934186 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1582.26, -423.005, 32.352 ); + ent.v["angles"] = ( 359.066, 201.006, -0.358378 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1604.22, -483.334, 32.7958 ); + ent.v["angles"] = ( 359.066, 201.006, -0.358378 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1751.84, -487.875, 33.1293 ); + ent.v["angles"] = ( 0.342038, 290, -0.93969 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1872.43, -443.984, 33.0916 ); + ent.v["angles"] = ( 0.342038, 290, -0.93969 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1942.16, -267.088, 32.6749 ); + ent.v["angles"] = ( 0.358317, 69.0062, 0.933602 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1983.03, -380.555, 32.9846 ); + ent.v["angles"] = ( 0.838674, 327, -0.544645 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -570.107, 142.98, -35.5373 ); + ent.v["angles"] = ( 88, 90, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -571.625, 78.8251, -34.5465 ); + ent.v["angles"] = ( 88, 90, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -564.348, -102.706, 2.48068 ); + ent.v["angles"] = ( 88, 90, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -419.713, -103.868, 2.49886 ); + ent.v["angles"] = ( 88, 90, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -565.811, 292.94, 2.40515 ); + ent.v["angles"] = ( 88, 90, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -423.956, 293.601, 2.51992 ); + ent.v["angles"] = ( 88, 90, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 577.031, 281.144, 10.9113 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 640.278, 281.298, 10.9397 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 706.447, 281.368, 10.9698 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -756.471, -89.2182, -56.0133 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -821.903, -89.4519, -56.978 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -882.412, -89.3507, -56.9891 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -989.636, 16.0656, -55.0216 ); + ent.v["angles"] = ( 88.6103, 136.011, -134.995 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -989.634, 79.6021, -56.0087 ); + ent.v["angles"] = ( 88.6103, 136.011, -134.995 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -1095.11, 185.499, -56.0051 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fire_candle" ); + ent.v["origin"] = ( -901.551, -187.907, 76.25 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fire_candle" ); + ent.v["origin"] = ( -1400.1, -87.1361, 137.241 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fire_candle" ); + ent.v["origin"] = ( -1322.14, -87.9463, 150.799 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fire_candle" ); + ent.v["origin"] = ( -1303.17, -87.0827, 150.289 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fire_candle" ); + ent.v["origin"] = ( -1381.12, -87.2421, 162.007 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fire_candle" ); + ent.v["origin"] = ( -1328.09, -86.0462, 174.384 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fire_candle" ); + ent.v["origin"] = ( -994.381, -252.893, 71.7775 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1126.48, -381.899, 35.9584 ); + ent.v["angles"] = ( 0, 270, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1200.14, -382.218, 36.8903 ); + ent.v["angles"] = ( 0, 270, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 641.813, -380.196, 35.4826 ); + ent.v["angles"] = ( 0, 270, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 429.163, -380.125, 35.4553 ); + ent.v["angles"] = ( 0, 270, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1197.07, 380.125, 35.0122 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 785.838, 380.125, 34.5463 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 736.895, 380.125, 34.8262 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 604.161, 380.125, 34.9135 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 552.431, 380.074, 34.3145 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1691.75, 334.55, 33.1672 ); + ent.v["angles"] = ( 359.642, 249.007, -0.933731 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1811.76, 288.482, 32.6657 ); + ent.v["angles"] = ( 359.642, 249.007, -0.933731 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1937.39, 264.144, 32.4951 ); + ent.v["angles"] = ( 0.275624, 286, -0.961268 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1980.37, 375.74, 33.2224 ); + ent.v["angles"] = ( 0.874606, 29.0074, 0.484845 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1872.41, 441.024, 32.7692 ); + ent.v["angles"] = ( 0.358351, 69.0066, 0.933587 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1750.96, 487.491, 33.2152 ); + ent.v["angles"] = ( 0.358351, 69.0066, 0.933587 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1606.62, 495.855, 33.2961 ); + ent.v["angles"] = ( 359.06, 160.001, 0.342072 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1583.03, 434.408, 33.1925 ); + ent.v["angles"] = ( 359.06, 160.001, 0.342072 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -815.355, -408.166, 40.8107 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -815.41, -319.905, 40.9866 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -815.433, -229.21, 41.1303 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -765.875, 65.5175, 33.4091 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -765.875, 160.831, 31.7225 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -765.875, 309.588, 33.5642 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -688.691, 347.301, 40.4182 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -688.847, 436.865, 40.1937 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -864.829, -443.716, 40.9711 ); + ent.v["angles"] = ( 0, 270, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -945.951, -443.718, 8.40014 ); + ent.v["angles"] = ( 0, 270, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1022.13, -380.125, -30.4432 ); + ent.v["angles"] = ( 0, 270, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1384.84, -380.013, -29.4748 ); + ent.v["angles"] = ( 0, 270, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1471.65, -443.713, -19.6586 ); + ent.v["angles"] = ( 0, 270, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1410.8, -414.607, -20.735 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1516.16, -407.42, -19.4231 ); + ent.v["angles"] = ( 359, 180.004, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1515.75, 417.051, -20.281 ); + ent.v["angles"] = ( 359, 180.004, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -975.564, 380.125, -32.9078 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1216.8, 380.125, -31.3572 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1319.46, 380.125, -30.7559 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1466.67, 460.727, -20.6871 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -946.329, 422.841, -20.0038 ); + ent.v["angles"] = ( 359, 180.004, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -825.988, 460.74, 40.8308 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -718.748, 460.508, 40.6256 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1626.13, 239.382, -32.4148 ); + ent.v["angles"] = ( 359, 180.004, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1626.13, 81.7721, -29.5249 ); + ent.v["angles"] = ( 359, 180.004, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1626.13, -91.6108, -30.4321 ); + ent.v["angles"] = ( 359, 180.004, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1626.13, -248.435, -30.3627 ); + ent.v["angles"] = ( 359, 180.004, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_shower_dribble_splsh" ); + ent.v["origin"] = ( -177.097, 6.37252, 13 ); + ent.v["angles"] = ( 270, 0, 91 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_sm" ); + ent.v["origin"] = ( -200.111, 289.863, 43.125 ); + ent.v["angles"] = ( 357.001, 268.003, -0.104803 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -34.3951, 292.516, 2.41037 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -256.192, 292.688, 2.39031 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 538.859, 61.8095, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 538.648, -47.9137, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 538.2, -155.784, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 764.317, 109.847, 273.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 866.193, 83.1137, 273.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 867.596, 60.2214, 273.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 867.094, 34.388, 273.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 866.284, 8.7123, 273.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 866.546, -18.2473, 273.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 867.679, -42.9575, 273.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 866.797, -69.3849, 273.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 889.049, -123.277, 273.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 888.088, -212.317, 273.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 980.837, 161.725, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1033.73, 124.848, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1071.68, 83.8391, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1091.16, 47.3708, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1099.24, 11.8642, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1100.05, -13.1719, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1090.06, -48.5755, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1070.73, -84.269, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1033.9, -122.884, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 977.734, -158.304, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 973.899, 0, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1021.04, 0.304002, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1070.15, 0, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1088.26, -313.302, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1050.56, -314.54, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1012.32, -314.039, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1088.38, -140.576, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1026.52, -139.238, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 960.154, -140.634, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 959.825, -33.4129, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1052.86, -32.6805, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1087.59, -13.8603, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1123.2, -12.9115, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1012.61, 104.865, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1051.96, 105.646, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1087.86, 104.489, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 868.913, 350.593, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1011.85, 349.628, 145.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1014.04, 188.655, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 869.275, 190.384, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1454.85, 98.4955, 75.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1355.53, 99.1895, 75.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1254.55, 98.2117, 75.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1254.02, -81.9806, 75.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1356.24, -81.7505, 75.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1454.68, -82.3886, 75.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1568.28, -72.1987, 75.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1570.08, 51.0223, 75.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1568.25, -202.529, 75.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1453.59, -177.412, 83.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1454.58, 14.9142, 83.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1253.8, 15.5092, 83.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1322.88, 246.12, 67.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1163.39, 246.638, 67.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1164.17, 146.156, 67.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1163.07, 352.566, 67.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1477.64, 352.222, 67.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1478.12, 245.472, 67.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1477.61, 146.043, 67.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -814.761, -40.3514, 155.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -885.047, -39.1045, 155.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -813.578, 83.7546, 155.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -883.924, 84.7102, 155.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -960.938, 83.5231, 155.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -959.67, 215.766, 155.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -884.208, 216.164, 155.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -813.736, 216.564, 155.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -874.55, -120.464, 291.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -874.63, -39.8893, 291.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -993.46, -40.1239, 291.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -993.862, 65.9499, 291.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -874.332, 65.7785, 291.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -874.009, 146.622, 291.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -990.379, -313.807, 287.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1041.24, -314.682, 287.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 740.937, -41.9317, 156.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 319.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 550.424, -148.593, 156.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 545.7, 30.6528, 156.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 289.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_thin_sm" ); + ent.v["origin"] = ( -563.406, -46.8539, -136.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_thin_sm" ); + ent.v["origin"] = ( -288.194, 184.573, -126.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_thin_sm" ); + ent.v["origin"] = ( 42.5135, 29.7155, -124.536 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( 496.434, 282.036, -66.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( -34.7909, 323.486, 79.796 ); + ent.v["angles"] = ( 270, 0, 34 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( -141.692, 326.389, 79 ); + ent.v["angles"] = ( 270, 3.75173, -37.7517 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 13.2024, 447.661, 79.2264 ); + ent.v["angles"] = ( 270, 358.409, 110.591 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( -189.924, 444.388, 79.6899 ); + ent.v["angles"] = ( 270, 3.17983, -112.18 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( -141.367, 506.563, 79.2371 ); + ent.v["angles"] = ( 270, 357.955, -151.955 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( -36.8957, 508.739, 79 ); + ent.v["angles"] = ( 270, 8.1301, 134.87 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( 701.505, 282.93, -58.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( 264.006, 280.999, -76.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( 255.944, 49.5022, -57.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -199.942, 0, -121.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -352.475, 9.23384, -93.5284 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -556.845, 196.738, -125.333 ); + ent.v["angles"] = ( 270, 358.551, 1.44936 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -831.253, -90.8585, -129.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -981.041, 30.9881, -133.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -1089.81, 189.329, -129.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( 169.922, 200.423, -74.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( 29.7705, 225.651, -134.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -58.4583, -24.3011, -59.3958 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -386.601, 251.434, -40.2712 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -539.588, -7.86453, -48.6544 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -257.295, 226.934, -45.323 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -581.662, 224.229, -54.7916 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; +} diff --git a/MP/Maps/Hijacked/clientscripts/mp/mp_hijacked.csc b/MP/Maps/Hijacked/clientscripts/mp/mp_hijacked.csc new file mode 100644 index 0000000..860edcd --- /dev/null +++ b/MP/Maps/Hijacked/clientscripts/mp/mp_hijacked.csc @@ -0,0 +1,24 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_hijacked_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_hijacked_amb; + +main() +{ + level.worldmapx = -239; + level.worldmapy = -16; + level.worldlat = -37.6447; + level.worldlong = 77.8777; + clientscripts\mp\_load::main(); + clientscripts\mp\mp_hijacked_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_hijacked_amb::main(); + setsaveddvar( "compassmaxrange", "2100" ); + waitforclient( 0 ); +/# + println( "*** Client : mp_hijacked running..." ); +#/ +} diff --git a/MP/Maps/Hijacked/clientscripts/mp/mp_hijacked_amb.csc b/MP/Maps/Hijacked/clientscripts/mp/mp_hijacked_amb.csc new file mode 100644 index 0000000..4cfb347 --- /dev/null +++ b/MP/Maps/Hijacked/clientscripts/mp/mp_hijacked_amb.csc @@ -0,0 +1,71 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "hijacked_outdoor", 1 ); + setambientroomtone( "hijacked_outdoor", "amb_wind_extreior_2d", 0.55, 1 ); + setambientroomreverb( "hijacked_outdoor", "hijacked_outdoor", 1, 1 ); + setambientroomcontext( "hijacked_outdoor", "ringoff_plr", "outdoor" ); + declareambientroom( "hijacked_tile_room" ); + setambientroomreverb( "hijacked_tile_room", "hijacked_tile_room", 1, 1 ); + setambientroomcontext( "hijacked_tile_room", "ringoff_plr", "indoor" ); + declareambientroom( "hijacked_tile_room_partial" ); + setambientroomreverb( "hijacked_tile_room_partial", "hijacked_tile_room", 1, 1 ); + setambientroomcontext( "hijacked_tile_room_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "hijacked_carpet_room" ); + setambientroomreverb( "hijacked_carpet_room", "hijacked_smallroom", 1, 1 ); + setambientroomcontext( "hijacked_carpet_room", "ringoff_plr", "indoor" ); + declareambientroom( "hijacked_carpet_room_partial" ); + setambientroomreverb( "hijacked_carpet_room_partial", "hijacked_smallroom", 1, 1 ); + setambientroomcontext( "hijacked_carpet_room_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "hijacked_wood_room" ); + setambientroomreverb( "hijacked_wood_room", "hijacked_wood_room", 1, 1 ); + setambientroomcontext( "hijacked_wood_room", "ringoff_plr", "indoor" ); + declareambientroom( "hijacked_wood_room_partial" ); + setambientroomreverb( "hijacked_wood_room_partial", "hijacked_wood_room", 1, 1 ); + setambientroomcontext( "hijacked_wood_room_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "hijacked_heli_pad_cover" ); + setambientroomreverb( "hijacked_heli_pad_cover", "hijacked__heli_pad_cover", 1, 1 ); + setambientroomcontext( "hijacked_heli_pad_cover", "ringoff_plr", "outdoor" ); + declareambientroom( "hijacked_cabana" ); + setambientroomreverb( "hijacked_cabana", "hijacked_cabana", 1, 1 ); + setambientroomcontext( "hijacked_cabana", "ringoff_plr", "outdoor" ); + declareambientroom( "hijacked_eng_rm_hallway" ); + setambientroomreverb( "hijacked_eng_rm_hallway", "hijacked_eng_rm_hallway", 1, 1 ); + setambientroomcontext( "hijacked_eng_rm_hallway", "ringoff_plr", "indoor" ); + declareambientroom( "hijacked_laundry_rm" ); + setambientroomreverb( "hijacked_laundry_rm", "hijacked_wood_room", 1, 1 ); + setambientroomcontext( "hijacked_laundry_rm", "ringoff_plr", "indoor" ); + declareambientroom( "hijacked_laundry_rm_partial" ); + setambientroomreverb( "hijacked_laundry_rm_partial", "hijacked_wood_room", 1, 1 ); + setambientroomcontext( "hijacked_laundry_rm_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "hijacked_engine_room" ); + setambientroomreverb( "hijacked_engine_room", "hijacked_engine_room", 1, 1 ); + setambientroomcontext( "hijacked_engine_room", "ringoff_plr", "indoor" ); + thread snd_start_autofx_audio(); + thread snd_play_loopers(); +} + +snd_play_loopers() +{ + soundloopemitter( "amb_ribbon_flap", ( -95, 76, -60 ) ); + soundloopemitter( "amb_radar_ping_lp", ( -415, -120, -86 ) ); + soundloopemitter( "amb_radar_ping_lp", ( -330, -16, -111 ) ); +} + +snd_start_autofx_audio() +{ + snd_play_auto_fx( "fx_mp_water_drip_light_shrt", "amb_engine_rm_drips", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_mp_vent_heat_distort", "amb_vent", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_light_flour_glow_v_shape_cool", "amb_flourescent_light", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_light_flour_glow_v_shape_cool_sm", "amb_flourescent_light", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_light_recessed_cool_sm", "amb_outside_lights", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_vent_steam_sm", "amb_jacuzzi_steam", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_water_shower_dribble_splsh", "amb_shower_splash", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_water_shower_dribble", "amb_shower_drip", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_raid_hot_tub_sm", "amb_jacuzzi_bubbles", 0, 0, 0, 0 ); +} diff --git a/MP/Maps/Hijacked/clientscripts/mp/mp_hijacked_fx.csc b/MP/Maps/Hijacked/clientscripts/mp/mp_hijacked_fx.csc new file mode 100644 index 0000000..f380ace --- /dev/null +++ b/MP/Maps/Hijacked/clientscripts/mp/mp_hijacked_fx.csc @@ -0,0 +1,54 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\createfx\mp_hijacked_fx; +#include clientscripts\mp\_fx; + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_fire_candle"] = loadfx( "fire/fx_fire_candle" ); + level._effect["fx_mp_hijacked_jacuzzi_surface"] = loadfx( "maps/mp_maps/fx_mp_hijacked_jacuzzi_surface" ); + level._effect["fx_mp_hijacked_jacuzzi_steam"] = loadfx( "maps/mp_maps/fx_mp_hijacked_jacuzzi_steam" ); + level._effect["fx_raid_hot_tub_sm"] = loadfx( "water/fx_raid_hot_tub_sm" ); + level._effect["fx_mp_vent_heat_distort"] = loadfx( "maps/mp_maps/fx_mp_vent_heat_distort" ); + level._effect["fx_mp_vent_steam_sm"] = loadfx( "maps/mp_maps/fx_mp_vent_steam_sm" ); + level._effect["fx_water_shower_dribble_splsh"] = loadfx( "water/fx_water_shower_dribble_splsh" ); + level._effect["fx_water_shower_dribble"] = loadfx( "water/fx_water_shower_dribble" ); + level._effect["fx_light_beacon_red_blink_fst_sm"] = loadfx( "light/fx_light_beacon_red_blink_fst_sm" ); + level._effect["fx_light_flour_glow_v_shape_cool"] = loadfx( "light/fx_light_flour_glow_v_shape_cool" ); + level._effect["fx_light_flour_glow_v_shape_cool_sm"] = loadfx( "light/fx_light_flour_glow_v_shape_cool_sm" ); + level._effect["fx_light_recessed_cool_sm"] = loadfx( "light/fx_light_recessed_cool_sm" ); + level._effect["fx_light_recessed_cool_sm_soft"] = loadfx( "light/fx_light_recessed_cool_sm_soft" ); + level._effect["fx_lf_mp_hijacked_sun1"] = loadfx( "lens_flares/fx_lf_mp_hijacked_sun1" ); + level._effect["fx_paper_interior_short"] = loadfx( "debris/fx_paper_interior_short" ); + level._effect["fx_mp_fog_thin_sm"] = loadfx( "maps/mp_maps/fx_mp_fog_thin_sm" ); + level._effect["fx_mp_fog_thin_xsm"] = loadfx( "maps/mp_maps/fx_mp_fog_thin_xsm" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["dryer"] = %fxanim_gp_dryer_loop_anim; + level.scr_anim["fxanim_props"]["seagull_circle_01"] = %fxanim_gp_seagull_circle_01_anim; + level.scr_anim["fxanim_props"]["seagull_circle_02"] = %fxanim_gp_seagull_circle_02_anim; + level.scr_anim["fxanim_props"]["seagull_circle_03"] = %fxanim_gp_seagull_circle_03_anim; + level.scr_anim["fxanim_props"]["umbrella_01"] = %fxanim_gp_umbrella_01_anim; +} + +main() +{ + clientscripts\mp\createfx\mp_hijacked_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fxanim_props(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} diff --git a/MP/Maps/Hijacked/maps/mp/createart/mp_hijacked_art.gsc b/MP/Maps/Hijacked/maps/mp/createart/mp_hijacked_art.gsc new file mode 100644 index 0000000..db2078c --- /dev/null +++ b/MP/Maps/Hijacked/maps/mp/createart/mp_hijacked_art.gsc @@ -0,0 +1,20 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + level.tweakfile = 1; + setdvar( "visionstore_glowTweakEnable", "0" ); + setdvar( "visionstore_glowTweakRadius0", "5" ); + setdvar( "visionstore_glowTweakRadius1", "" ); + setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); + setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); + setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); + setdvar( "visionstore_glowTweakBloomIntensity1", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); + visionsetnaked( "mp_hijacked", 1 ); + setdvar( "r_lightGridEnableTweaks", 1 ); + setdvar( "r_lightGridIntensity", 1.0 ); + setdvar( "r_lightGridContrast", 0 ); +} diff --git a/MP/Maps/Hijacked/maps/mp/createfx/mp_hijacked_fx.gsc b/MP/Maps/Hijacked/maps/mp/createfx/mp_hijacked_fx.gsc new file mode 100644 index 0000000..b0b4ea5 --- /dev/null +++ b/MP/Maps/Hijacked/maps/mp/createfx/mp_hijacked_fx.gsc @@ -0,0 +1,1127 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hijacked_jacuzzi_surface" ); + ent.v["origin"] = ( -90.1606, 407.945, 78.25 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hijacked_jacuzzi_steam" ); + ent.v["origin"] = ( -92.9653, 422.779, 63.25 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hijacked_jacuzzi_steam" ); + ent.v["origin"] = ( -2614.9, -20.3813, -95.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hijacked_jacuzzi_steam" ); + ent.v["origin"] = ( -2759.45, 58.6316, -104.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_hijacked_sun1" ); + ent.v["origin"] = ( 54061.7, 41344.5, 11412 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( 573.76, 144.561, 590.63 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( 575.94, -142.117, 589.247 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_shower_dribble" ); + ent.v["origin"] = ( -179.646, 7.25836, 122.875 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( -465.908, 138.082, -64.465 ); + ent.v["angles"] = ( 9, 182, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( -468.137, 68.1617, -60.7915 ); + ent.v["angles"] = ( 12, 182, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( -103.006, 72.8002, -62.7217 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 9.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( -106.924, 136.317, -61.3858 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 12.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 249.077, 167.536, 2.53726 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 253.728, 264.641, 2.55747 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 250.685, 53.8219, 2.39799 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 248.311, -54.6842, 2.48961 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 513.258, 281.236, 10.9304 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -696.048, -89.0073, -57.8954 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 118.751, 292.842, 2.43011 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -18.5375, 141.529, -35.5661 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -18.518, 77.4566, -34.5459 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( 117.807, -103.555, 1.44659 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -34.3314, -102.545, 1.5224 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 446.336, -28.4747, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 377.337, -182.483, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 490.328, 3.23551, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 446.01, -182.985, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 376.631, -27.1527, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 758.531, 3.59217, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 759.759, 99.8241, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 620.425, 53.7003, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 490.33, 98.9914, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 376.754, -357.466, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 446.882, -357.271, 139.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1187.12, -122.312, 35.6413 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1186.13, -47.936, 35.1503 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1186.13, 49.0877, 34.0694 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1186.13, 131.298, 35.2899 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1186.13, 223.104, 35.8791 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1817.29, -289.908, 32.2346 ); + ent.v["angles"] = ( 359.642, 111, 0.934186 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1696.05, -333.653, 32.5811 ); + ent.v["angles"] = ( 359.642, 111, 0.934186 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1582.26, -423.005, 32.352 ); + ent.v["angles"] = ( 359.066, 201.006, -0.358378 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1604.22, -483.334, 32.7958 ); + ent.v["angles"] = ( 359.066, 201.006, -0.358378 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1751.84, -487.875, 33.1293 ); + ent.v["angles"] = ( 0.342038, 290, -0.93969 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1872.43, -443.984, 33.0916 ); + ent.v["angles"] = ( 0.342038, 290, -0.93969 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1942.16, -267.088, 32.6749 ); + ent.v["angles"] = ( 0.358317, 69.0062, 0.933602 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1983.03, -380.555, 32.9846 ); + ent.v["angles"] = ( 0.838674, 327, -0.544645 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -570.107, 142.98, -35.5373 ); + ent.v["angles"] = ( 88, 90, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -571.625, 78.8251, -34.5465 ); + ent.v["angles"] = ( 88, 90, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -564.348, -102.706, 2.48068 ); + ent.v["angles"] = ( 88, 90, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -419.713, -103.868, 2.49886 ); + ent.v["angles"] = ( 88, 90, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -565.811, 292.94, 2.40515 ); + ent.v["angles"] = ( 88, 90, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -423.956, 293.601, 2.51992 ); + ent.v["angles"] = ( 88, 90, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 577.031, 281.144, 10.9113 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 640.278, 281.298, 10.9397 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( 706.447, 281.368, 10.9698 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -756.471, -89.2182, -56.0133 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -821.903, -89.4519, -56.978 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -882.412, -89.3507, -56.9891 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -989.636, 16.0656, -55.0216 ); + ent.v["angles"] = ( 88.6103, 136.011, -134.995 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -989.634, 79.6021, -56.0087 ); + ent.v["angles"] = ( 88.6103, 136.011, -134.995 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); + ent.v["origin"] = ( -1095.11, 185.499, -56.0051 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_candle" ); + ent.v["origin"] = ( -901.551, -187.907, 76.25 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_candle" ); + ent.v["origin"] = ( -1400.1, -87.1361, 137.241 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_candle" ); + ent.v["origin"] = ( -1322.14, -87.9463, 150.799 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_candle" ); + ent.v["origin"] = ( -1303.17, -87.0827, 150.289 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_candle" ); + ent.v["origin"] = ( -1381.12, -87.2421, 162.007 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_candle" ); + ent.v["origin"] = ( -1328.09, -86.0462, 174.384 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_candle" ); + ent.v["origin"] = ( -994.381, -252.893, 71.7775 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1126.48, -381.899, 35.9584 ); + ent.v["angles"] = ( 0, 270, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1200.14, -382.218, 36.8903 ); + ent.v["angles"] = ( 0, 270, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 641.813, -380.196, 35.4826 ); + ent.v["angles"] = ( 0, 270, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 429.163, -380.125, 35.4553 ); + ent.v["angles"] = ( 0, 270, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1197.07, 380.125, 35.0122 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 785.838, 380.125, 34.5463 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 736.895, 380.125, 34.8262 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 604.161, 380.125, 34.9135 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 552.431, 380.074, 34.3145 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1691.75, 334.55, 33.1672 ); + ent.v["angles"] = ( 359.642, 249.007, -0.933731 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1811.76, 288.482, 32.6657 ); + ent.v["angles"] = ( 359.642, 249.007, -0.933731 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1937.39, 264.144, 32.4951 ); + ent.v["angles"] = ( 0.275624, 286, -0.961268 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1980.37, 375.74, 33.2224 ); + ent.v["angles"] = ( 0.874606, 29.0074, 0.484845 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1872.41, 441.024, 32.7692 ); + ent.v["angles"] = ( 0.358351, 69.0066, 0.933587 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1750.96, 487.491, 33.2152 ); + ent.v["angles"] = ( 0.358351, 69.0066, 0.933587 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1606.62, 495.855, 33.2961 ); + ent.v["angles"] = ( 359.06, 160.001, 0.342072 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 1583.03, 434.408, 33.1925 ); + ent.v["angles"] = ( 359.06, 160.001, 0.342072 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -815.355, -408.166, 40.8107 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -815.41, -319.905, 40.9866 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -815.433, -229.21, 41.1303 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -765.875, 65.5175, 33.4091 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -765.875, 160.831, 31.7225 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -765.875, 309.588, 33.5642 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -688.691, 347.301, 40.4182 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -688.847, 436.865, 40.1937 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -864.829, -443.716, 40.9711 ); + ent.v["angles"] = ( 0, 270, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -945.951, -443.718, 8.40014 ); + ent.v["angles"] = ( 0, 270, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1022.13, -380.125, -30.4432 ); + ent.v["angles"] = ( 0, 270, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1384.84, -380.013, -29.4748 ); + ent.v["angles"] = ( 0, 270, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1471.65, -443.713, -19.6586 ); + ent.v["angles"] = ( 0, 270, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1410.8, -414.607, -20.735 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1516.16, -407.42, -19.4231 ); + ent.v["angles"] = ( 359, 180.004, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1515.75, 417.051, -20.281 ); + ent.v["angles"] = ( 359, 180.004, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -975.564, 380.125, -32.9078 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1216.8, 380.125, -31.3572 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1319.46, 380.125, -30.7559 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1466.67, 460.727, -20.6871 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -946.329, 422.841, -20.0038 ); + ent.v["angles"] = ( 359, 180.004, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -825.988, 460.74, 40.8308 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -718.748, 460.508, 40.6256 ); + ent.v["angles"] = ( 0, 90.0032, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1626.13, 239.382, -32.4148 ); + ent.v["angles"] = ( 359, 180.004, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1626.13, 81.7721, -29.5249 ); + ent.v["angles"] = ( 359, 180.004, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1626.13, -91.6108, -30.4321 ); + ent.v["angles"] = ( 359, 180.004, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( -1626.13, -248.435, -30.3627 ); + ent.v["angles"] = ( 359, 180.004, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_shower_dribble_splsh" ); + ent.v["origin"] = ( -177.097, 6.37252, 13 ); + ent.v["angles"] = ( 270, 0, 91 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_sm" ); + ent.v["origin"] = ( -200.111, 289.863, 43.125 ); + ent.v["angles"] = ( 357.001, 268.003, -0.104803 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -34.3951, 292.516, 2.41037 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["origin"] = ( -256.192, 292.688, 2.39031 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 538.859, 61.8095, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 538.648, -47.9137, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 538.2, -155.784, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 764.317, 109.847, 273.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 866.193, 83.1137, 273.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 867.596, 60.2214, 273.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 867.094, 34.388, 273.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 866.284, 8.7123, 273.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 866.546, -18.2473, 273.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 867.679, -42.9575, 273.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 866.797, -69.3849, 273.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 889.049, -123.277, 273.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 888.088, -212.317, 273.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 980.837, 161.725, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1033.73, 124.848, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1071.68, 83.8391, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1091.16, 47.3708, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1099.24, 11.8642, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1100.05, -13.1719, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1090.06, -48.5755, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1070.73, -84.269, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1033.9, -122.884, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 977.734, -158.304, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 973.899, 0, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1021.04, 0.304002, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1070.15, 0, 283.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1088.26, -313.302, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1050.56, -314.54, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1012.32, -314.039, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1088.38, -140.576, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1026.52, -139.238, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 960.154, -140.634, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 959.825, -33.4129, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1052.86, -32.6805, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1087.59, -13.8603, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1123.2, -12.9115, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1012.61, 104.865, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1051.96, 105.646, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1087.86, 104.489, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 868.913, 350.593, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1011.85, 349.628, 145.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1014.04, 188.655, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 869.275, 190.384, 147.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1454.85, 98.4955, 75.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1355.53, 99.1895, 75.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1254.55, 98.2117, 75.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1254.02, -81.9806, 75.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1356.24, -81.7505, 75.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1454.68, -82.3886, 75.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1568.28, -72.1987, 75.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1570.08, 51.0223, 75.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1568.25, -202.529, 75.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1453.59, -177.412, 83.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1454.58, 14.9142, 83.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1253.8, 15.5092, 83.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1322.88, 246.12, 67.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1163.39, 246.638, 67.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1164.17, 146.156, 67.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1163.07, 352.566, 67.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1477.64, 352.222, 67.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1478.12, 245.472, 67.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1477.61, 146.043, 67.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -814.761, -40.3514, 155.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -885.047, -39.1045, 155.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -813.578, 83.7546, 155.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -883.924, 84.7102, 155.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -960.938, 83.5231, 155.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -959.67, 215.766, 155.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -884.208, 216.164, 155.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -813.736, 216.564, 155.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -874.55, -120.464, 291.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -874.63, -39.8893, 291.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -993.46, -40.1239, 291.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -993.862, 65.9499, 291.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -874.332, 65.7785, 291.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -874.009, 146.622, 291.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -990.379, -313.807, 287.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( -1041.24, -314.682, 287.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 740.937, -41.9317, 156.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 319.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 550.424, -148.593, 156.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 545.7, 30.6528, 156.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 289.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_thin_sm" ); + ent.v["origin"] = ( -563.406, -46.8539, -136.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_thin_sm" ); + ent.v["origin"] = ( -288.194, 184.573, -126.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_thin_sm" ); + ent.v["origin"] = ( 42.5135, 29.7155, -124.536 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( 496.434, 282.036, -66.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( -34.7909, 323.486, 79.796 ); + ent.v["angles"] = ( 270, 0, 34 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( -141.692, 326.389, 79 ); + ent.v["angles"] = ( 270, 3.75173, -37.7517 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 13.2024, 447.661, 79.2264 ); + ent.v["angles"] = ( 270, 358.409, 110.591 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( -189.924, 444.388, 79.6899 ); + ent.v["angles"] = ( 270, 3.17983, -112.18 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( -141.367, 506.563, 79.2371 ); + ent.v["angles"] = ( 270, 357.955, -151.955 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( -36.8957, 508.739, 79 ); + ent.v["angles"] = ( 270, 8.1301, 134.87 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( 701.505, 282.93, -58.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( 264.006, 280.999, -76.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( 255.944, 49.5022, -57.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -199.942, 0, -121.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -352.475, 9.23384, -93.5284 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -556.845, 196.738, -125.333 ); + ent.v["angles"] = ( 270, 358.551, 1.44936 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -831.253, -90.8585, -129.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -981.041, 30.9881, -133.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -1089.81, 189.329, -129.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( 169.922, 200.423, -74.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( 29.7705, 225.651, -134.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -58.4583, -24.3011, -59.3958 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -386.601, 251.434, -40.2712 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -539.588, -7.86453, -48.6544 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -257.295, 226.934, -45.323 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); + ent.v["origin"] = ( -581.662, 224.229, -54.7916 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; +} diff --git a/MP/Maps/Hijacked/maps/mp/mp_hijacked.gsc b/MP/Maps/Hijacked/maps/mp/mp_hijacked.gsc new file mode 100644 index 0000000..24dbeb8 --- /dev/null +++ b/MP/Maps/Hijacked/maps/mp/mp_hijacked.gsc @@ -0,0 +1,114 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_hijacked_fx; +#include maps\mp\_load; +#include maps\mp\mp_hijacked_amb; +#include maps\mp\_compass; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + level.overrideplayerdeathwatchtimer = ::leveloverridetime; + level.useintermissionpointsonwavespawn = ::useintermissionpointsonwavespawn; + maps\mp\mp_hijacked_fx::main(); + maps\mp\_load::main(); + maps\mp\mp_hijacked_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_hijacked" ); + level thread water_trigger_init(); +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "1600", reset_dvars ); + ss.dead_friend_influencer_radius = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_radius", "1300", reset_dvars ); + ss.dead_friend_influencer_timeout_seconds = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_timeout_seconds", "8", reset_dvars ); + ss.dead_friend_influencer_count = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_count", "7", reset_dvars ); + ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1200", reset_dvars ); + ss.koth_objective_influencer_inner_radius = 1400; +} + +water_trigger_init() +{ + wait 3; + triggers = getentarray( "trigger_hurt", "classname" ); + + foreach ( trigger in triggers ) + { + if ( trigger.origin[2] > level.mapcenter[2] ) + continue; + + trigger thread water_trigger_think(); + } + + triggers = getentarray( "water_killbrush", "targetname" ); + + foreach ( trigger in triggers ) + trigger thread player_splash_think(); +} + +player_splash_think() +{ + for (;;) + { + self waittill( "trigger", entity ); + + if ( isplayer( entity ) && isalive( entity ) ) + self thread trigger_thread( entity, ::player_water_fx ); + } +} + +player_water_fx( player, endon_condition ) +{ + maxs = self.origin + self getmaxs(); + + if ( maxs[2] > 60 ) + maxs += vectorscale( ( 0, 0, 1 ), 10.0 ); + + origin = ( player.origin[0], player.origin[1], maxs[2] ); + playfx( level._effect["water_splash_sm"], origin ); +} + +water_trigger_think() +{ + for (;;) + { + self waittill( "trigger", entity ); + + if ( isplayer( entity ) ) + { + entity playsound( "mpl_splash_death" ); + playfx( level._effect["water_splash"], entity.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + } + } +} + +leveloverridetime( defaulttime ) +{ + if ( self isinwater() ) + return 0.4; + + return defaulttime; +} + +useintermissionpointsonwavespawn() +{ + return self isinwater(); +} + +isinwater() +{ + triggers = getentarray( "trigger_hurt", "classname" ); + + foreach ( trigger in triggers ) + { + if ( trigger.origin[2] > level.mapcenter[2] ) + continue; + + if ( self istouching( trigger ) ) + return true; + } + + return false; +} diff --git a/MP/Maps/Hijacked/maps/mp/mp_hijacked_amb.gsc b/MP/Maps/Hijacked/maps/mp/mp_hijacked_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Hijacked/maps/mp/mp_hijacked_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Hijacked/maps/mp/mp_hijacked_fx.gsc b/MP/Maps/Hijacked/maps/mp/mp_hijacked_fx.gsc new file mode 100644 index 0000000..0238b09 --- /dev/null +++ b/MP/Maps/Hijacked/maps/mp/mp_hijacked_fx.gsc @@ -0,0 +1,52 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_hijacked_fx; +#include maps\mp\createart\mp_hijacked_art; + +precache_scripted_fx() +{ + level._effect["water_splash"] = loadfx( "bio/player/fx_player_water_splash_mp" ); + level._effect["water_splash_sm"] = loadfx( "bio/player/fx_player_water_splash_mp_sm" ); +} + +precache_createfx_fx() +{ + level._effect["fx_fire_candle"] = loadfx( "fire/fx_fire_candle" ); + level._effect["fx_mp_hijacked_jacuzzi_surface"] = loadfx( "maps/mp_maps/fx_mp_hijacked_jacuzzi_surface" ); + level._effect["fx_mp_hijacked_jacuzzi_steam"] = loadfx( "maps/mp_maps/fx_mp_hijacked_jacuzzi_steam" ); + level._effect["fx_raid_hot_tub_sm"] = loadfx( "water/fx_raid_hot_tub_sm" ); + level._effect["fx_mp_vent_heat_distort"] = loadfx( "maps/mp_maps/fx_mp_vent_heat_distort" ); + level._effect["fx_mp_vent_steam_sm"] = loadfx( "maps/mp_maps/fx_mp_vent_steam_sm" ); + level._effect["fx_water_shower_dribble_splsh"] = loadfx( "water/fx_water_shower_dribble_splsh" ); + level._effect["fx_water_shower_dribble"] = loadfx( "water/fx_water_shower_dribble" ); + level._effect["fx_light_beacon_red_blink_fst_sm"] = loadfx( "light/fx_light_beacon_red_blink_fst_sm" ); + level._effect["fx_light_flour_glow_v_shape_cool"] = loadfx( "light/fx_light_flour_glow_v_shape_cool" ); + level._effect["fx_light_flour_glow_v_shape_cool_sm"] = loadfx( "light/fx_light_flour_glow_v_shape_cool_sm" ); + level._effect["fx_light_recessed_cool_sm"] = loadfx( "light/fx_light_recessed_cool_sm" ); + level._effect["fx_light_recessed_cool_sm_soft"] = loadfx( "light/fx_light_recessed_cool_sm_soft" ); + level._effect["fx_lf_mp_hijacked_sun1"] = loadfx( "lens_flares/fx_lf_mp_hijacked_sun1" ); + level._effect["fx_paper_interior_short"] = loadfx( "debris/fx_paper_interior_short" ); + level._effect["fx_mp_fog_thin_sm"] = loadfx( "maps/mp_maps/fx_mp_fog_thin_sm" ); + level._effect["fx_mp_fog_thin_xsm"] = loadfx( "maps/mp_maps/fx_mp_fog_thin_xsm" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["dryer"] = %fxanim_gp_dryer_loop_anim; + level.scr_anim["fxanim_props"]["seagull_circle_01"] = %fxanim_gp_seagull_circle_01_anim; + level.scr_anim["fxanim_props"]["seagull_circle_02"] = %fxanim_gp_seagull_circle_02_anim; + level.scr_anim["fxanim_props"]["seagull_circle_03"] = %fxanim_gp_seagull_circle_03_anim; + level.scr_anim["fxanim_props"]["umbrella_01"] = %fxanim_gp_umbrella_01_anim; +} + +main() +{ + precache_fxanim_props(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_hijacked_fx::main(); + maps\mp\createart\mp_hijacked_art::main(); +} diff --git a/MP/Maps/Hydro/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Hydro/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Hydro/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Hydro/aitype/enemy_dog_mp.gsc b/MP/Maps/Hydro/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Hydro/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Hydro/character/character_mp_german_shepherd.gsc b/MP/Maps/Hydro/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Hydro/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Hydro/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Hydro/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Hydro/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Hydro/clientscripts/mp/createfx/mp_hydro_fx.csc b/MP/Maps/Hydro/clientscripts/mp/createfx/mp_hydro_fx.csc new file mode 100644 index 0000000..1901b4e --- /dev/null +++ b/MP/Maps/Hydro/clientscripts/mp/createfx/mp_hydro_fx.csc @@ -0,0 +1,1927 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2052.82, -2671.41, 1529.39 ); + ent.v["angles"] = ( 11, 94, 0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2128.64, -2679.26, 1532.27 ); + ent.v["angles"] = ( 10.917, 86.8702, -1.35704 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1998.89, -2675.41, 1533.77 ); + ent.v["angles"] = ( 11, 94, 0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1935.84, -2698.56, 1543.51 ); + ent.v["angles"] = ( 10.9847, 97.0559, 0.582839 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2276.34, -2689.46, 1515.56 ); + ent.v["angles"] = ( 11, 90, 0 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2198.01, -2682.66, 1509.3 ); + ent.v["angles"] = ( 10.939, 96.1114, 1.16396 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2342, -2669.86, 1511.18 ); + ent.v["angles"] = ( 11, 90, 0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2412.65, -2700.9, 1528.06 ); + ent.v["angles"] = ( 10.9729, 85.9253, -0.776853 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2329.16, -2729.37, 1550.41 ); + ent.v["angles"] = ( 10.917, 93.1296, 1.35701 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2261.95, -2727.11, 1550.67 ); + ent.v["angles"] = ( 11, 86, 0 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2198.11, -2720.78, 1546.29 ); + ent.v["angles"] = ( 11, 86, 0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2135.49, -2714.65, 1563.17 ); + ent.v["angles"] = ( 10.9847, 82.9439, -0.582858 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2062.63, -2681.49, 1508.37 ); + ent.v["angles"] = ( 10.9576, 93.093, 0.970567 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1992.35, -2681.47, 1514.63 ); + ent.v["angles"] = ( 11, 88, 0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1929.37, -2678.8, 1510.25 ); + ent.v["angles"] = ( 11, 88, 0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1873.52, -2678.1, 1527.13 ); + ent.v["angles"] = ( 10.9983, 86.9813, -0.194372 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_side" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2065.54, -2396.96, 1358.82 ); + ent.v["angles"] = ( 62.9828, 89.4676, -0.313342 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_side" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2312.69, -2543.77, 1356.26 ); + ent.v["angles"] = ( 56.9854, 87.6956, -4.61113 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_side" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2233.31, -2524.85, 1323.56 ); + ent.v["angles"] = ( 55.974, 91.3205, 1.27719 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_side" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1967.88, -2511.56, 1304 ); + ent.v["angles"] = ( 55.9646, 87.7551, -1.81747 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 466.24, -1445.26, 297.358 ); + ent.v["angles"] = ( 359.255, 117.854, 2.05426 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -165.424, -1170.38, 211.878 ); + ent.v["angles"] = ( 0.344091, 88.8737, 2.15786 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -579.509, -1488.69, 197.625 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 81.0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1784.87, -1019.17, 248.562 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_hydro_sun1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -252361, 399620, 250915 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1527.16, -1245.25, 250.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1626.52, -1182.75, 259.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2358.09, -1050.8, 239 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2308.35, -749.921, 259.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2285.1, -1218.5, 262.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2300.22, -816.447, 262.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1399.57, -161.103, 250.125 ); + ent.v["angles"] = ( 24.5906, 92.3963, 0.617105 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 465.891, -73.493, 259.125 ); + ent.v["angles"] = ( 355.592, 92.0962, 0.562776 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1272.36, -65.8394, 251.125 ); + ent.v["angles"] = ( 17.5909, 92.3174, 0.588632 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1441.17, -335.006, 247.125 ); + ent.v["angles"] = ( 0.372095, 359.142, -1.62169 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1165.74, -1326.99, 267.125 ); + ent.v["angles"] = ( 359.449, 181.139, 0.601526 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_bottom" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1786.68, 891.308, -1093.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_bottom" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 151.115, 568.117, -1090.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_bottom" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -197.861, 569.815, -1093.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 95.0532, -1138.23, 205.859 ); + ent.v["angles"] = ( 0.344091, 88.8737, 2.15786 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 101.247, -1528.84, 216.606 ); + ent.v["angles"] = ( 0.344091, 88.8737, 2.15786 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -171.956, -1550.65, 219.594 ); + ent.v["angles"] = ( 0.344091, 88.8737, 2.15786 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_side_b" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1992.57, 252.088, 54.3273 ); + ent.v["angles"] = ( 57, 96, 0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_side_b" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1932.7, 254.438, 33.0202 ); + ent.v["angles"] = ( 59, 93, 0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_bottom" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1721.7, 893.816, -1094.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1855.24, -1794.71, 100 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2162.79, -1805.66, 102 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 97.0 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2196.57, -1600.59, 97 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 103.0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_strip2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2024.71, -1045.98, 94.0515 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_river_flat2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2035.64, -1092.62, 98.7927 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_corner2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1795.81, -422.584, 85.3393 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 103.0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2129.53, -897.87, 99.8196 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_river_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2302.38, -2404.83, 974.115 ); + ent.v["angles"] = ( 356.021, 90.9852, 0.418848 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -115.691, -862.168, 216.125 ); + ent.v["angles"] = ( 357, 113, 0 ); + ent.v["delay"] = 0.9; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 49.1121, -864.56, 214.204 ); + ent.v["angles"] = ( 353.358, 64.8608, 1.62771 ); + ent.v["delay"] = 0.9; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -45.0877, -361.985, 158.61 ); + ent.v["angles"] = ( 295.157, 82.8883, 2.33001 ); + ent.v["delay"] = 1.5; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 242.276, -339.837, 161.504 ); + ent.v["angles"] = ( 320.23, 90.6643, -3.21933 ); + ent.v["delay"] = 1.5; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -308.234, -356.983, 149.158 ); + ent.v["angles"] = ( 320.23, 90.6643, -3.21933 ); + ent.v["delay"] = 1.5; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -392.9, -656.784, 189.687 ); + ent.v["angles"] = ( 321, 88, 0 ); + ent.v["delay"] = 1.3; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -374.391, -533.755, 187.28 ); + ent.v["angles"] = ( 321, 88, 0 ); + ent.v["delay"] = 1.4; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -389.932, -396.36, 188.808 ); + ent.v["angles"] = ( 321, 88, 0 ); + ent.v["delay"] = 1.5; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 326.135, -359.082, 182.243 ); + ent.v["angles"] = ( 321, 88, 0 ); + ent.v["delay"] = 1.5; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 328.674, -504.435, 180.255 ); + ent.v["angles"] = ( 321, 88, 0 ); + ent.v["delay"] = 1.4; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 328.472, -648.633, 181.622 ); + ent.v["angles"] = ( 321, 88, 0 ); + ent.v["delay"] = 1.3; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -411.256, -509.809, 216.125 ); + ent.v["angles"] = ( 270, 0, 41 ); + ent.v["delay"] = 1.3; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -411.454, -452.358, 217.125 ); + ent.v["angles"] = ( 270, 0, 38 ); + ent.v["delay"] = 1.4; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -412.111, -387.558, 217.125 ); + ent.v["angles"] = ( 270, 0, 41 ); + ent.v["delay"] = 1.5; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -409.556, -343.526, 217.125 ); + ent.v["angles"] = ( 270, 0, 41 ); + ent.v["delay"] = 1.6; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 350.58, -448.946, 218.125 ); + ent.v["angles"] = ( 270, 3.75173, -36.7517 ); + ent.v["delay"] = 1.4; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 350.778, -506.397, 216.125 ); + ent.v["angles"] = ( 270, 0, -35 ); + ent.v["delay"] = 1.3; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 349.923, -384.146, 218.125 ); + ent.v["angles"] = ( 270, 0, -35 ); + ent.v["delay"] = 1.5; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 352.478, -340.114, 218.125 ); + ent.v["angles"] = ( 270, 3.94519, -35.9451 ); + ent.v["delay"] = 1.6; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -160.754, -742.163, 229.08 ); + ent.v["angles"] = ( 0.986304, 97.0012, 0.243874 ); + ent.v["delay"] = 1.1; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 98.7076, -759.976, 222.667 ); + ent.v["angles"] = ( 357.016, 83.9916, 0.313913 ); + ent.v["delay"] = 1.1; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -260.946, -767.161, 217.731 ); + ent.v["angles"] = ( 351.218, 99.8639, -4.09223 ); + ent.v["delay"] = 1.1; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 216.33, -787.167, 223.01 ); + ent.v["angles"] = ( 350.446, 75.8534, 3.64031 ); + ent.v["delay"] = 1.1; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_light_warning" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -214.648, -799.411, 276.875 ); + ent.v["angles"] = ( 89, 180, 180 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_light_warning_blnk" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -215.156, -799.288, 276.875 ); + ent.v["angles"] = ( 89, 180, 180 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_light_warning_blnk" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 155.16, -800.139, 276.875 ); + ent.v["angles"] = ( 89, 180, 180 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_light_warning" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 155.668, -800.262, 276.875 ); + ent.v["angles"] = ( 89, 180, 180 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_light_warning_blnk" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 327.634, -2034.5, 298.571 ); + ent.v["angles"] = ( 89, 180, 180 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_light_warning" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 328.141, -2034.62, 298.571 ); + ent.v["angles"] = ( 89, 180, 180 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_light_warning_blnk" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -407.341, -2035.22, 297.568 ); + ent.v["angles"] = ( 89, 180, 180 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_light_warning" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -406.833, -2035.35, 297.568 ); + ent.v["angles"] = ( 89, 180, 180 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_light_warning_blnk" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -32.3667, -1824.43, 299.875 ); + ent.v["angles"] = ( 89, 180, 180 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_light_warning" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -31.8587, -1824.55, 299.875 ); + ent.v["angles"] = ( 89, 180, 180 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_light_warning_blnk" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -356.508, -205.177, 286.419 ); + ent.v["angles"] = ( 328.022, 272.359, -1.24934 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_light_warning" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -357.091, -205.404, 286.291 ); + ent.v["angles"] = ( 328.022, 272.359, -1.24934 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_light_warning_blnk" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 282.887, -204.253, 287.226 ); + ent.v["angles"] = ( 326.023, 272.413, -1.34857 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_light_warning" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 282.995, -203.762, 287.08 ); + ent.v["angles"] = ( 326.023, 272.413, -1.34857 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_mist_tail" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -216.782, -607.271, 235.581 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = 2; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_mist_tail" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 151.145, -617.3, 236 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = 2; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast_end" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 133.029, -262.021, 178.44 ); + ent.v["angles"] = ( 351, 91, 0 ); + ent.v["delay"] = 1.6; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast_end" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -185.263, -272.333, 178.621 ); + ent.v["angles"] = ( 345, 91, 0 ); + ent.v["delay"] = 1.6; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_side_b" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -184.765, -126.231, 134.327 ); + ent.v["angles"] = ( 60, 90, 0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_side_b" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 127.468, -125.157, 143.721 ); + ent.v["angles"] = ( 60, 90, 0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_river_flat2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2097.75, -831.716, 92.6086 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_river_flat2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1972.71, -856.795, 95.7947 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -392.908, -2200.43, 215.404 ); + ent.v["angles"] = ( 356.806, 109.298, 0.12213 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -309.16, -2207.5, 213.918 ); + ent.v["angles"] = ( 355.159, 82.914, 1.22113 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -538.46, -2155.97, 196.893 ); + ent.v["angles"] = ( 323.094, 155.324, 14.084 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -542.078, -2098.88, 197.934 ); + ent.v["angles"] = ( 323.094, 155.324, 14.084 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -545.256, -2028.61, 200.089 ); + ent.v["angles"] = ( 323.094, 155.324, 14.084 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -607.024, -2132.9, 219.125 ); + ent.v["angles"] = ( 271.414, 98.003, -44.9957 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -608.403, -2075.7, 219.125 ); + ent.v["angles"] = ( 270, 0, 56 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -610.299, -2014.77, 219.125 ); + ent.v["angles"] = ( 270, 0, 59 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 554.313, -2133.65, 217.467 ); + ent.v["angles"] = ( 270, 358.363, -59.363 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 555.163, -2015.48, 217.467 ); + ent.v["angles"] = ( 271.414, 276.018, 26.9912 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 487.343, -2011.03, 201.235 ); + ent.v["angles"] = ( 321.316, 6.32823, -6.49901 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 488.717, -2077.21, 202.276 ); + ent.v["angles"] = ( 323.904, 22.3859, -16.2928 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 489.394, -2151.54, 198.431 ); + ent.v["angles"] = ( 324.798, 25.9103, -17.3473 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_river_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1964.77, -2398.3, 979.494 ); + ent.v["angles"] = ( 356.021, 90.9852, 0.418848 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_river_top_b" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2031.28, -2393.34, 976.36 ); + ent.v["angles"] = ( 356, 90, 0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam_big" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2207.85, -1932.77, 1001 ); + ent.v["angles"] = ( 67, 94, 0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 248.47, -2224.99, 210.799 ); + ent.v["angles"] = ( 347.91, 94.7895, 1.10778 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 332.683, -2207, 217.663 ); + ent.v["angles"] = ( 345.36, 77.7145, 0.44837 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_spray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2162.7, -1933.88, 941.002 ); + ent.v["angles"] = ( 11.4915, 87.2649, 1.66119 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_drip_splash" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2157.44, -1111.23, 209 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_drip_splash" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2098.92, -1088.26, 209.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_spray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2103.76, -2041.85, 990.382 ); + ent.v["angles"] = ( 3.37256, 91.0378, 1.87155 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1178.03, -1032.46, 263 ); + ent.v["angles"] = ( 359.449, 181.139, 0.601526 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_bottom" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2013.31, 890.053, -1090.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_river_flat2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1914.68, -610.823, 90.8482 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 67.0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_river_flat2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1880.64, -397.514, 89.124 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 104.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2020.74, -80.3449, 86.776 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 78.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1161.21, -2219.73, 330.268 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1097.44, -2221.31, 329.845 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -231.32, -1570.65, 277.64 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -231.265, -1431.1, 277.757 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -231.342, -1275.48, 277.59 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -231.309, -1136.3, 277.667 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -231.312, -980.228, 277.643 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -230.82, -1730.54, 278.643 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -342.763, -1889.68, 278.767 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -264.412, -1811.45, 277.797 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 246.183, -1811.18, 277.622 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 278.68, -1888.67, 278.801 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 166.846, -1731.29, 278.588 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 166.368, -1570.14, 278.921 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 166.815, -1431.28, 278.65 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 166.739, -1275.23, 278.779 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 166.813, -1135.03, 278.657 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 166.74, -979.315, 278.772 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -112.854, -978.802, 277.81 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -112.919, -1135.25, 278.835 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -112.732, -1274.63, 278.766 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -112.64, -1430.58, 278.547 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -112.711, -1569.39, 278.708 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -33.5506, -1696.19, 278.672 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 49.6113, -1570.22, 279.923 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 49.2977, -1431.29, 279.794 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 49.3865, -1275.57, 279.823 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 49.3544, -1136.11, 279.807 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 49.9966, -979.138, 279.508 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 182.611, -1485.19, 435.067 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_water_pipe" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1773.05, -420.129, 264.578 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_water_pipe" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1709.45, -438.354, 266.46 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 14.8926, -1546.23, 188.995 ); + ent.v["angles"] = ( 2.19847, 65.1081, 1.43134 ); + ent.v["delay"] = 0.5; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -81.7838, -1546.74, 183.465 ); + ent.v["angles"] = ( 358.861, 107.079, 1.79503 ); + ent.v["delay"] = 0.5; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -425.05, -2177.78, 278.735 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 266.952, -2177.82, 278.664 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 361.152, -2177.94, 278.395 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast01_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -386.188, -2190.85, 210.57 ); + ent.v["angles"] = ( 355.058, 88.9346, 0.707331 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_flood_blast01_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 337.096, -2187.49, 208.808 ); + ent.v["angles"] = ( 355.011, 94.9572, 0.1855 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3590.43, 2554.86, 782.503 ); + ent.v["angles"] = ( 270, 7.71059, 82.2893 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3778.6, 2554.59, 783.062 ); + ent.v["angles"] = ( 270, 7.71059, 82.2893 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3531.08, 1036.72, 782.533 ); + ent.v["angles"] = ( 270, 0.935656, -44.9356 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3663.91, 893.345, 782.53 ); + ent.v["angles"] = ( 270, 0.935656, -44.9356 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2557.32, 280.579, 782.916 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2556.95, 91.2935, 782.309 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1166.46, -1346.86, 324.539 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1223.03, -1346.82, 324.554 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1102.43, -977.076, 324.506 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1159.67, -977.072, 324.498 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1221.24, -977.027, 324.37 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1164.51, -977.078, 324.517 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1102.49, -1346.86, 324.535 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1159.28, -1347.02, 324.265 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -858.543, -685.375, 331.351 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 795.354, -685.377, 331.278 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1175.51, -1988.16, 448.107 ); + ent.v["angles"] = ( 40.0899, 298.827, 112.661 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_carrier_spark_bounce_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1313.75, -563.076, 428 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_carrier_spark_bounce_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1584.04, -145.958, 402.055 ); + ent.v["angles"] = ( 354, 0, 1 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2026.38, -914.425, 108.525 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1898.96, -462.226, 87.2239 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 13.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2058.9, -490.204, 91.016 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_corner2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1733.47, -441.988, 87.4946 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 80.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1760.61, -218.768, 86.0852 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 86.0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_river_flat2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1813.8, -357.981, 88.7497 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 76.0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_river_flat2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1898.29, -752.978, 92.5347 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 104.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1965.87, -217.876, 87.6689 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1193.49, -1598.6, 458.892 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1151.18, -1890.76, 445.465 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -761.044, -1983, 447.302 ); + ent.v["angles"] = ( 49.9351, 305.521, 118.249 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -941.731, -1993.28, 448.463 ); + ent.v["angles"] = ( 56.1551, 299.64, 114.481 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1631.7, -627.746, 263.989 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 69.0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1572.26, -643.986, 257.223 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_side_b" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1786.75, 289.149, -35.9182 ); + ent.v["angles"] = ( 57, 96, 0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_side_b" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1731.66, 309.789, -63.2046 ); + ent.v["angles"] = ( 59, 93, 0 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_bottom" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1953.89, 914.666, -1088.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2118.36, -1494.5, 216.817 ); + ent.v["angles"] = ( 325, 81, 0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1228.44, -1336.03, 260 ); + ent.v["angles"] = ( 0.663961, 13.139, -0.473831 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1262.03, -1041.72, 268 ); + ent.v["angles"] = ( 0.663961, 13.139, -0.473831 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -31.7349, -493.683, 208.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -243.987, -1056.39, 307 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -595.417, -1151.62, 271.92 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 161.59, -1030.86, 308 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 579.632, -1184.81, 265.689 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2013.41, -754.307, 91.7958 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1966.16, -523.137, 90.5133 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2045.27, -573.982, 90.6243 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 86.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_river_top_b" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2238.35, -2395.33, 992.096 ); + ent.v["angles"] = ( 356, 90, 0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2075.28, -1508.54, 173 ); + ent.v["angles"] = ( 325, 81, 0 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_splash_edge" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -369.975, -485.596, 222.454 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 1.3; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_splash_edge" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 308.799, -502.748, 219.842 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = 1.3; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1726.93, -1330.76, 207.412 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2675.57, -892.195, 208.398 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2240.97, -454.214, 208.397 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_drip_splash" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2146.62, -1098.63, 208 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_drip_splash" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2204.18, -1111.86, 208 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_hydro_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 612.585, -405.044, 370.427 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_hydro_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 611.52, -232.791, 370.365 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_hydro_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1026.78, -233.827, 338.456 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -627.625, -2549.36, 330.112 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 36.6848, -1363.15, 433.484 ); + ent.v["angles"] = ( 90, 0, -180 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -99.2721, -1363.84, 433.497 ); + ent.v["angles"] = ( 90, 0, -180 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1506.4, 6537.77, -1707.4 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -110.955, 6425.6, -1708.61 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1648.25, 6513.32, -1601.85 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -755.422, -2210.77, 355.505 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -990.859, -2210.49, 355.781 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1160.49, -2210.69, 355.674 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1324.89, -2210.81, 355.395 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 697.706, -2210.69, 355.645 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 934.094, -2210.73, 355.574 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1095.97, -2210.71, 355.615 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1266.26, -2210.73, 355.57 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1129.97, -1598.62, 459.151 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -818.794, 4644.14, -1102.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -494.498, 4642.28, -1097.56 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -179.776, 4631.22, -1098.74 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 210.565, 4640.95, -1098.38 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 530.588, 4606.62, -1097.53 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 847.021, 4569.71, -1096.77 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1169.26, 4575.48, -1097.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1490.5, 4568.88, -1089.24 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1808.96, 4557.56, -1097.55 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2123.02, 4566.43, -1089.41 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2447.17, 4560.09, -1095.19 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2092.44, 4648.44, -1095.74 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2416.74, 4650.31, -1101.06 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1775.94, 4639.8, -1096.92 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1455.34, 4626, -1096.56 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1137.36, 4612.66, -1095.71 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam_big" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2097.83, -2070.16, 879.83 ); + ent.v["angles"] = ( 60, 94, 0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_hvac_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1139.88, -824.86, 507.588 ); + ent.v["angles"] = ( 271, 89.9983, -179.998 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_hvac_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1078.68, -840.045, 512.588 ); + ent.v["angles"] = ( 271, 89.9983, -179.998 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 388.105, -1287.29, 294.53 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -446.469, -1259.1, 295.287 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam_xlrg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1831.52, 942.271, -896.811 ); + ent.v["angles"] = ( 342, 94, 0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam_xlrg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1886.32, 976.355, -885.117 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam_xlrg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 117.786, 632.247, -795.534 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam_xlrg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -152.096, 631.545, -802.303 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam_xlrg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3719.54, -113.025, 305.403 ); + ent.v["angles"] = ( 7.17566, 49.5615, -6.9832 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam_big2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4414.34, -581.72, 1075.19 ); + ent.v["angles"] = ( 69.5146, 41.4026, -2.31795 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam_big2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4398.49, -595.333, 1033.61 ); + ent.v["angles"] = ( 59.6776, 134.947, 0.447249 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam_xlrg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3731.79, -136.636, 381.986 ); + ent.v["angles"] = ( 6.80137, 141.437, 7.34813 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam_big" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 188.664, -2420.59, 1359.28 ); + ent.v["angles"] = ( 67, 94, 0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam_big" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -270.973, -2491.22, 1402.88 ); + ent.v["angles"] = ( 67, 94, 0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -895.288, -1886.13, 442.363 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -769.576, -1962.03, 493.174 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -940.206, -1957.09, 489.871 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1104.88, -1953.88, 487.722 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1147.49, -2035.41, 542.3 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -975.02, -2029.6, 538.41 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -809.417, -2026.56, 536.377 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1106.69, -2116.2, 596.382 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -850.023, -2112.99, 594.235 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 970.745, -1988.04, 509.452 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1139.39, -1997.84, 516.014 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1016.15, -1928.18, 469.385 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1182.59, -1929.43, 470.215 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1013.57, -2090.6, 578.113 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1186.74, -2085.46, 574.673 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1941.3, -939.942, 109.079 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2058.17, -971.553, 108.239 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1876.73, -943.336, 107.028 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1777.02, 11537.5, -979.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1137.53, 11487, -1007.91 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 211.173, 11552.3, -961.54 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -496.111, 11501.4, -995.7 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 854.694, 11612, -986.82 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2129.98, 11633.4, -995.78 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1496.67, 11584.3, -1012.94 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2151.06, -580.885, 87.5826 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 86.0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2085.95, -580.363, 86.5911 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 95.0 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1194.13, -1524.94, 466.635 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1144.59, -1522.29, 466.582 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1996.43, -986.693, 90.3395 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2073.9, -986.414, 89.3378 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2011.42, -975.625, 90.1791 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1933.06, -981.509, 90.1401 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 778.852, -188.641, 363.812 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 652.786, -188.265, 363.575 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -659.127, -188.247, 363.552 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -720.189, -188.412, 363.732 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -783.297, -188.119, 363.266 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -844.539, -188.557, 363.788 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -907.553, -188.297, 363.64 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 196.213, -1779.2, 199.125 ); + ent.v["angles"] = ( 0.344091, 88.8737, 2.15786 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 304.422, -2054.55, 208.125 ); + ent.v["angles"] = ( 0.344091, 88.8737, 2.15786 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -263.879, -1802.53, 204.125 ); + ent.v["angles"] = ( 0.344091, 88.8737, 2.15786 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -254.012, -1994.83, 205.125 ); + ent.v["angles"] = ( 0.344091, 88.8737, 2.15786 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -379.435, -2038.39, 224.579 ); + ent.v["angles"] = ( 0.344091, 88.8737, 2.15786 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 173.415, -1907.23, 211.125 ); + ent.v["angles"] = ( 0.344091, 88.8737, 2.15786 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -331.952, -2177.79, 278.705 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -388.918, -1923.71, 271.096 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -280.028, -1726.48, 271.093 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 231.21, -1726.62, 271.094 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 320.759, -1923.87, 272.092 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_hydro_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -30.1824, -1579.32, 309.125 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_steam_behind_glass2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 779.03, -2532.73, 183.806 ); + ent.v["angles"] = ( 295.839, 139.671, -144.856 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_steam_behind_glass1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1020.87, -2557.2, 221.763 ); + ent.v["angles"] = ( 336, 88.9793, -0.942621 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_steam_behind_glass2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1072.77, -2517.25, 190.005 ); + ent.v["angles"] = ( 291.776, 32.4804, -42.5563 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_steam_behind_glass1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 881.23, -2660.54, 241.661 ); + ent.v["angles"] = ( 336, 88.9793, -0.942621 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_steam_behind_glass1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -978.173, -2568.53, 250.768 ); + ent.v["angles"] = ( 336.179, 94.4455, -2.15952 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_steam_behind_glass2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1201.39, -2531.02, 180.913 ); + ent.v["angles"] = ( 291.17, 167.755, -170.712 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_steam_behind_glass2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -979.148, -2519.8, 208.843 ); + ent.v["angles"] = ( 307.343, 2.5724, -8.60869 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_steam_behind_glass1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1195.29, -2683.66, 251.995 ); + ent.v["angles"] = ( 336.179, 94.4455, -2.15952 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 0.151123, -1587.44, 442.789 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -123.081, -1587.82, 442.394 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 122.44, -1587.9, 442.212 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -223.631, -1543.76, 442.708 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 161.536, -1357.21, 442.74 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 24.6861, -1201.88, 442.912 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -100.39, -1201.2, 442.438 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 170.602, -1485.09, 435.117 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fan_light_shaft_anim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -532.995, -2072.46, 343.882 ); + ent.v["angles"] = ( 86.6199, 6.51528, 90.9333 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fan_light_shaft_anim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 466.932, -2071.99, 344.881 ); + ent.v["angles"] = ( 86.6199, 6.51528, 90.9333 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2417.8, 11582.2, -996.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1998.76, -585.349, 114.366 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1797.08, -436.714, 92.6481 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 14.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1991.6, -581.31, 103.341 ); + ent.v["angles"] = ( 2.18255, 3.90224, 1.46031 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2071.43, -222.302, 101.03 ); + ent.v["angles"] = ( 3.18223, 3.92776, 1.4615 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2138.59, -262.778, 98.3231 ); + ent.v["angles"] = ( 3.37162, 354.915, 0.945253 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1934.04, -580.823, 104.675 ); + ent.v["angles"] = ( 3.18223, 3.92776, 1.4615 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1829.18, -211.296, 86.0448 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2104.86, 11695, -963.247 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1464.07, 11650.3, -946.247 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -824.585, 11599.9, -974.277 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -183.165, 11614.2, -962.067 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 524.119, 11665.1, -955.907 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1167.64, 11724.8, -993.187 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1791.62, 11697.1, -1009.31 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3377.75, 3713.56, 779.958 ); + ent.v["angles"] = ( 270, 7.71059, 82.2893 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3571.35, 3718.45, 780.517 ); + ent.v["angles"] = ( 270, 7.71059, 82.2893 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_light_warning_blnk_sm" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -32.3471, -1623.88, 312.233 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_hydro_light_warning_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -32.3471, -1623.88, 312.233 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_hydro_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 612.112, -565.014, 370.42 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_hydro_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1026.83, -361.781, 338.476 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_hydro_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1028.39, -569.425, 338.553 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1158.21, -647.371, 442.898 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1158.55, -871.536, 466.552 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1223.68, -869.977, 466.543 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1224.29, -648.488, 442.431 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_hydro_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1036.21, -252.793, 338.364 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_hydro_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -674.316, -539.396, 370.552 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_hydro_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1074.26, -588.583, 338.418 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_hatch_spray" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -26.2665, -1572.47, 256.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_killstreak_spillway_2" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1900, -488, 110 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_killstreak_spillway_1" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1970, -500, 135 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_hydro_killstreak_spillway_mid" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -30, -935, 220 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; +} diff --git a/MP/Maps/Hydro/clientscripts/mp/mp_hydro.csc b/MP/Maps/Hydro/clientscripts/mp/mp_hydro.csc new file mode 100644 index 0000000..2ac1063 --- /dev/null +++ b/MP/Maps/Hydro/clientscripts/mp/mp_hydro.csc @@ -0,0 +1,307 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_hydro_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_hydro_amb; + +main() +{ + level.worldmapx = 0; + level.worldmapy = 0; + level.worldlat = 24.5581; + level.worldlong = 67.9817; + clientscripts\mp\_load::main(); + clientscripts\mp\mp_hydro_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_hydro_amb::main(); + level.onplayerconnect = ::hydroplayerconnected; + registerclientfield( "world", "pre_wave", 1, 1, "int", ::playprewave, 0 ); + registerclientfield( "world", "big_wave", 1, 1, "int", ::playbigwave, 0 ); + setsaveddvar( "r_waterwavebase", 0 ); + setsaveddvar( "r_waterwavewavelength", "290 1 1 1" ); + setsaveddvar( "r_waterwaveangle", "91.43 0 0 0" ); + setsaveddvar( "r_waterwavespeed", "2 2 2 2" ); + setsaveddvar( "r_waterwaveamplitude", "1 0 0 0" ); + setsaveddvar( "r_waterwavenormalscale", 0.25 ); + setsaveddvar( "sm_sunsamplesizenear", 0.35 ); + setdvar( "tu6_player_shallowWaterHeight", "10.5" ); + setdvar( "bg_plantInWaterDepth", "11" ); + setdvar( "tu7_cg_deathCamAboveWater", "8" ); + setdvar( "scr_hydro_water_rush_speed", "4" ); + setdvar( "scr_hydro_water_rush_up_time", "8" ); + setdvar( "scr_hydro_water_rush_down_time", "4.5" ); + waitforclient( 0 ); +/# + println( "*** Client : mp_hydro running..." ); +#/ + level thread water_animation(); +} + +water_animation() +{ + framerate = 0.0166667; + color_u = 0; + color_v = 0; + dist_u = 0; + dist_v = 0; + level.water_multiplier = 1; + level.water_rate = 1; + multiplier = 1; + alpha = 0; + + for (;;) + { + color_u_rate = 0.0000933333; + color_v_rate = 0.00035; + dist_u_rate = -0.00014; + dist_v_rate = 0.00035; + + if ( multiplier < level.water_multiplier ) + { + multiplier = clamp( multiplier + level.water_rate, 1, level.water_multiplier ); + alpha = clamp( alpha + framerate, 0, 1 ); + } + else if ( multiplier > level.water_multiplier ) + { + multiplier = clamp( multiplier - level.water_rate, 1, multiplier ); + alpha = clamp( alpha - framerate, 0, 1 ); + } + + color_u_rate *= multiplier; + color_v_rate *= multiplier; + dist_u_rate *= multiplier; + dist_v_rate *= multiplier; + color_u += color_u_rate; + color_v += color_v_rate; + dist_u += dist_u_rate; + dist_v += dist_v_rate; + str = color_u + " " + color_v + " " + dist_u + " " + dist_v; + setsaveddvar( "r_waterWaveScriptShader0", str ); + str = alpha + " " + alpha + " 0 0"; + setsaveddvar( "r_waterWaveScriptShader1", str ); + wait( framerate ); + } +} + +hydroplayerconnected( localclientnum ) +{ + for (;;) + { + level waittill( "snap_processed", snapshotlocalclientnum ); + + if ( snapshotlocalclientnum == localclientnum ) + break; + } + + level thread water_killstreak_fx( localclientnum ); + water_sheeting_triggers = getentarray( 0, "prone_water_fx", "targetname" ); + + foreach ( trigger in water_sheeting_triggers ) + trigger thread water_prone_fx( localclientnum ); + + security_camera_balls = getentarray( localclientnum, "security_camera_ball", "targetname" ); + + foreach ( cameraball in security_camera_balls ) + cameraball thread cameratrackplayer( localclientnum ); +} + +water_killstreak_fx( localclientnum ) +{ + if ( isdemoplaying() ) + return; + + ents = level.createfxexploders[2001]; + assert( isdefined( ents ) ); + + foreach ( ent in ents ) + { + if ( !isdefined( ent.loopfx ) ) + ent.loopfx = []; + } + + airborne = 2 | 4 | 8; + + for (;;) + { + level waittill( "snap_processed", snapshotlocalclientnum ); + + if ( snapshotlocalclientnum == localclientnum ) + { + player = getlocalplayer( localclientnum ); + + if ( !isdefined( player ) ) + continue; + + foreach ( ent in ents ) + { + if ( player.eflags2 & airborne ) + { + if ( !isdefined( ent.loopfx[localclientnum] ) ) + ent.loopfx[localclientnum] = playfx( localclientnum, level._effect[ent.v["fxid"]], ent.v["origin"], ent.v["forward"], ent.v["up"] ); + + continue; + } + + if ( isdefined( ent.loopfx[localclientnum] ) ) + { + stopfx( localclientnum, ent.loopfx[localclientnum] ); + ent.loopfx[localclientnum] = undefined; + } + } + } + } +} + +water_prone_fx( localclientnum ) +{ + for (;;) + { + self waittill( "trigger", player ); + + if ( !player islocalplayer() ) + continue; + + clientnum = player getlocalclientnumber(); + + if ( !isdefined( clientnum ) ) + continue; + + if ( clientnum != localclientnum ) + continue; + + while ( player istouching( self ) ) + { + if ( player getstance( localclientnum ) == "prone" ) + startwatersheetingfx( localclientnum ); + else + stopwatersheetingfx( localclientnum, 2 ); + + wait 0.1; + + if ( !isdefined( player ) ) + break; + } + + stopwatersheetingfx( localclientnum, 2 ); + } +} + +playprewave( localclientnum, oldval, newval, bnewent, binitialsnap, fieldname, bwasdemojump ) +{ + if ( localclientnum != 0 ) + return; + + if ( newval ) + { + multiplier = getdvarfloat( _hash_EF33F5E5 ); + seconds = getdvarfloat( _hash_25994707 ); + diff = abs( multiplier - level.water_multiplier ); + frames = 60 * seconds; + level.water_multiplier = multiplier; + level.water_rate = diff / frames; + } + else + { + multiplier = 1; + seconds = getdvarfloat( _hash_71478E3A ); + diff = abs( multiplier - level.water_multiplier ); + frames = 60 * seconds; + level.water_multiplier = multiplier; + level.water_rate = diff / frames; + } +} + +playbigwave( localclientnum, oldval, newval, bnewent, binitialsnap, fieldname, bwasdemojump ) +{ + if ( localclientnum != 0 ) + return; + + player = getlocalplayer( localclientnum ); + + if ( !isdefined( player ) ) + return; + + if ( player getinkillcam( localclientnum ) ) + return; + + if ( newval == oldval ) + return; + + if ( newval ) + { + level notify( "playBigWaveSingleton" ); + level endon( "playBigWaveSingleton" ); + wave_1_origin = ( -188, -2267, 208 ); + wave_2_origin = ( 128, -2267, 208 ); + level thread waterlevel(); + level thread waterwaves(); + wait 0.05; + setripplewave( localclientnum, wave_1_origin[0] * -1, wave_1_origin[1] * -1, 800, 1.5, 0.07, 0.0, 5.0, 1800, 2100 ); + setripplewave( localclientnum, wave_2_origin[0] * -1, wave_2_origin[1] * -1, 800, 1.5, 0.07, 0.0, 5.0, 1800, 2100 ); + } +} + +waterlevel() +{ + level endon( "playBigWaveSingleton" ); + + for ( i = 1; i < 101; i++ ) + { + setsaveddvar( "R_WaterWaveBase", 0 + i * 0.205 ); + setsaveddvar( "r_waterwavenormalscale", 0.25 + i * 0.0375 ); + wait 0.025; + } + + wait 2.5; + + for ( i = 100; i > -1; i-- ) + { + setsaveddvar( "R_WaterWaveBase", 0 + i * 0.205 ); + setsaveddvar( "r_waterwavenormalscale", 0.25 + i * 0.0375 ); + wait 0.015; + } +} + +waterwaves() +{ + level endon( "playBigWaveSingleton" ); + + for ( i = 1; i < 18; i++ ) + { + amp = i + " 0 0 0"; + setsaveddvar( "r_waterwaveamplitude", amp ); + wait 0.15; + } + + wait 2.8; + + for ( i = 16; i > 0; i-- ) + { + amp = i + " 0 0 0"; + setsaveddvar( "r_waterwaveamplitude", amp ); + wait 0.15; + } +} + +cameratrackplayer( localclientnum ) +{ + pitch = self.angles[0]; + roll = self.angles[2]; + + for (;;) + { + localplayer = getnonpredictedlocalplayer( 0 ); + + if ( isdefined( localplayer ) && isdefined( localplayer.origin ) ) + { + direction = localplayer.origin - self.origin; + angles = vectortoangles( direction ); + flattenedangles = ( pitch, angles[1] + 90, roll ); + self rotateto( flattenedangles, 0.5 ); + } + + wait 0.5; + } +} diff --git a/MP/Maps/Hydro/clientscripts/mp/mp_hydro_amb.csc b/MP/Maps/Hydro/clientscripts/mp/mp_hydro_amb.csc new file mode 100644 index 0000000..1b8c96a --- /dev/null +++ b/MP/Maps/Hydro/clientscripts/mp/mp_hydro_amb.csc @@ -0,0 +1,153 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "hydro_outdoor", 1 ); + setambientroomtone( "hydro_outdoor", "amb_wind_extreior_2d", 0.2, 0.5 ); + setambientroomreverb( "hydro_outdoor", "hydro_outdoor", 1, 1 ); + setambientroomcontext( "hydro_outdoor", "ringoff_plr", "outdoor" ); + declareambientroom( "hydro_tunnel" ); + setambientroomreverb( "hydro_tunnel", "hydro_pipe_sml", 1, 1 ); + setambientroomcontext( "hydro_tunnel", "ringoff_plr", "indoor" ); + declareambientroom( "hydro_tunnel_partial" ); + setambientroomreverb( "hydro_tunnel_partial", "hydro_pipe_sml", 1, 1 ); + setambientroomcontext( "hydro_tunnel_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "hydro_concrete_room_sml" ); + setambientroomreverb( "hydro_concrete_room_sml", "hyrdo_concroom", 1, 1 ); + setambientroomcontext( "hydro_concrete_room_sml", "ringoff_plr", "indoor" ); + declareambientroom( "hydro_concrete_room_sml_prt" ); + setambientroomreverb( "hydro_concrete_room_sml_prt", "hyrdo_concroom", 1, 1 ); + setambientroomcontext( "hydro_concrete_room_sml_prt", "ringoff_plr", "outdoor" ); + declareambientroom( "hydro_concrete_stairs_sml" ); + setambientroomreverb( "hydro_concrete_stairs_sml", "hyrdo_concstairs", 1, 1 ); + setambientroomcontext( "hydro_concrete_stairs_sml", "ringoff_plr", "indoor" ); + declareambientroom( "hydro_concrete_room_med" ); + setambientroomreverb( "hydro_concrete_room_med", "hydro_mediumroom", 1, 1 ); + setambientroomcontext( "hydro_concrete_room_med", "ringoff_plr", "indoor" ); + declareambientroom( "hydro_concrete_room_med_part" ); + setambientroomreverb( "hydro_concrete_room_med_part", "hydro_mediumroom", 1, 1 ); + setambientroomcontext( "hydro_concrete_room_med_part", "ringoff_plr", "outdoor" ); + declareambientroom( "hydro_engine_room" ); + setambientroomreverb( "hydro_engine_room", "hyrdo_turbine_room", 1, 1 ); + setambientroomcontext( "hydro_engine_room", "ringoff_plr", "indoor" ); + declareambientroom( "hydro_tunnel_med" ); + setambientroomreverb( "hydro_tunnel_med", "hydro_tunnel_med", 1, 1 ); + setambientroomcontext( "hydro_tunnel_med", "ringoff_plr", "indoor" ); + declareambientroom( "hydro_metal_room_sml" ); + setambientroomreverb( "hydro_metal_room_sml", "hyrdo_small_metal_room", 1, 1 ); + setambientroomcontext( "hydro_metal_room_sml", "ringoff_plr", "indoor" ); + declareambientroom( "hydro_metal_tower_sml" ); + setambientroomreverb( "hydro_metal_tower_sml", "hyrdo_smallroom", 1, 1 ); + setambientroomcontext( "hydro_metal_tower_sml", "ringoff_plr", "indoor" ); + declareambientroom( "hydro_server_room" ); + setambientroomreverb( "hydro_server_room", "hyrdo_smallroom", 1, 1 ); + setambientroomcontext( "hydro_server_room", "ringoff_plr", "indoor" ); + declareambientroom( "hydro_container" ); + setambientroomreverb( "hydro_container", "hydro_container", 1, 1 ); + setambientroomcontext( "hydro_container", "ringoff_plr", "indoor" ); + thread snd_start_autofx_audio(); + thread snd_play_loopers(); +} + +snd_play_loopers() +{ + playloopat( "amb_dam_water_low", ( -2035, -1762, 610 ) ); + playloopat( "amb_dam_water_low", ( -2308, -1751, 611 ) ); + playloopat( "amb_dam_water_churn", ( -1718, -1816, 566 ) ); + playloopat( "amb_dam_water_churn", ( -2121, -1746, 700 ) ); + playloopat( "amb_dam_water_churn", ( -1514, 94, 106 ) ); + playloopat( "amb_dam_water_churn", ( -1514, 94, 106 ) ); + playloopat( "amb_dam_water_churn", ( 1491, 123, 109 ) ); + playloopat( "amb_dam_water_low", ( 1689, -1839, 507 ) ); + playloopat( "amb_dam_water_low", ( 2228, -1731, 472 ) ); + playloopat( "amb_dam_water_churn", ( 1689, -1839, 507 ) ); + playloopat( "amb_dam_water_churn", ( 2090, -1861, 232 ) ); + playloopat( "amb_under_water_hatch", ( -30, -1576, 362 ) ); + playloopat( "amb_dam_water_low_bot", ( 1172, 621, -957 ) ); + playloopat( "amb_dam_water_low_bot", ( -1225, 589, -957 ) ); + playloopat( "amb_dam_water_low_bot", ( 150, 656, -948 ) ); + playloopat( "amb_dam_water_low_bot", ( -196, 650, -954 ) ); + playloopat( "amb_wind_door_open", ( 1146, -1547, 439 ) ); + playloopat( "amb_wind_door_open", ( 1158, -734, 435 ) ); + playloopat( "amb_wind_door_open", ( -1235, -1540, 456 ) ); + playloopat( "amb_wind_door_open", ( -1228, -723, 425 ) ); + playloopat( "amb_wind_door_open", ( 2541, -326, 322 ) ); + playloopat( "amb_wind_door_open", ( -2556, 395, 348 ) ); + playloopat( "amb_water_turbine", ( -990, -1946, 361 ) ); + playloopat( "amb_water_turbine", ( 866, -1955, 382 ) ); + playloopat( "amb_lrg_comp_monitor", ( -869, -1791, 261 ) ); + playloopat( "amb_lrg_comp_monitor", ( -1264, -1791, 254 ) ); + playloopat( "amb_lrg_comp_monitor", ( 794, -1795, 258 ) ); + playloopat( "amb_lrg_comp_monitor", ( 1199, -1790, 250 ) ); + playloopat( "amb_water_pipe_lrg", ( 470, -1470, 587 ) ); + playloopat( "amb_water_pipe_lrg", ( -536, -1470, 587 ) ); + playloopat( "amb_water_pipe_lrg", ( 456, -1715, 426 ) ); + playloopat( "amb_water_pipe_lrg", ( -521, -1715, 426 ) ); + playloopat( "amb_water_pipe_lrg", ( -2534, -1485, 429 ) ); + playloopat( "amb_water_pipe_lrg", ( -1769, -1446, 443 ) ); + playloopat( "amb_water_pipe_lrg", ( 1645, -1465, 394 ) ); + playloopat( "amb_water_pipe_lrg", ( 2455, -1469, 385 ) ); + playloopat( "amb_electrical_box", ( -1559, -830, 333 ) ); + playloopat( "amb_electrical_box", ( 1488, -816, 314 ) ); + playloopat( "amb_electrical_box", ( 614, -1340, 332 ) ); + playloopat( "amb_electrical_box", ( -655, -1346, 337 ) ); + playloopat( "amb_electrical_box", ( -2730, -1580, 345 ) ); + playloopat( "amb_electrical_box", ( 2658, -1557, 352 ) ); + playloopat( "amb_fan_lrg", ( 17, -1823, 300 ) ); + playloopat( "amb_fan_lrg", ( -80, -1824, 299 ) ); + playloopat( "amb_fan_lrg", ( 1478, -1924, 367 ) ); + playloopat( "amb_fan_lrg", ( -1541, -1925, 368 ) ); + playloopat( "amb_fan_lrg", ( 466, -2072, 312 ) ); + playloopat( "amb_fan_lrg", ( -525, -2074, 282 ) ); + playloopat( "amb_dam_water_churn", ( -36, -1810, 224 ) ); + playloopat( "amb_dam_water_churn", ( -33, -1542, 221 ) ); + playloopat( "amb_dam_water_churn", ( -33, -878, 225 ) ); + playloopat( "amb_dam_water_churn", ( -31, -334, 221 ) ); + playloopat( "amb_dam_water_churn", ( -317, 294, 213 ) ); + playloopat( "amb_dam_water_churn", ( 246, -287, 208 ) ); + playloopat( "amb_dam_water_churn", ( 377, -1979, 208 ) ); + playloopat( "amb_dam_water_churn", ( -443, -1989, 196 ) ); + playloopat( "amb_dam_water_churn", ( -239, -1679, 195 ) ); + playloopat( "amb_dam_water_churn", ( 178, 1668, 189 ) ); + playloopat( "amb_dam_water_churn", ( -323, -315, 197 ) ); + playloopat( "amb_dam_water_churn", ( -2026, -919, 112 ) ); + playloopat( "amb_dam_water_churn", ( -2131, -801, 113 ) ); + playloopat( "amb_dam_water_churn", ( -1911, -751, 11 ) ); + playloopat( "amb_water_drips", ( -2231, -1022, 214 ) ); + playloopat( "amb_water_drips", ( -2235, -1159, 217 ) ); + playloopat( "amb_water_drips", ( 2156, -1167, 216 ) ); + playloopat( "amb_water_drips", ( 2158, -1050, 215 ) ); + playloopat( "amb_mainframe", ( -30, -1193, 419 ) ); + playloopat( "amb_tunnel_wind", ( 1211, -1054, 317 ) ); + playloopat( "amb_tunnel_wind", ( 1154, -1308, 318 ) ); + playloopat( "amb_tunnel_wind", ( -1208, -1318, 318 ) ); + playloopat( "amb_tunnel_wind", ( -1212, -1056, 320 ) ); + playloopat( "amb_tunnel_wind", ( 1507, -1671, 313 ) ); + playloopat( "amb_tunnel_wind", ( -1575, -1672, 313 ) ); + playloopat( "amb_water_mixer", ( -33, -1762, 219 ) ); + playloopat( "amb_container_wind", ( 2374, -298, 308 ) ); + playloopat( "amb_container_wind", ( 2615, -419, 308 ) ); + playloopat( "amb_container_wind", ( -2376, -297, 338 ) ); + playloopat( "amb_container_wind", ( -2754, -512, 338 ) ); + playloopat( "amb_container_wind", ( -1334, -650, 374 ) ); + playloopat( "amb_container_wind", ( -1387, -1537, 306 ) ); + playloopat( "amb_container_wind", ( -1164, -487, 309 ) ); + playloopat( "amb_container_wind", ( 229, -1366, 416 ) ); + playloopat( "amb_container_wind", ( -270, -1359, 412 ) ); + playloopat( "amb_container_wind", ( 1312, -1544, 311 ) ); + playloopat( "amb_container_wind", ( 1284, -647, 365 ) ); + playloopat( "amb_water_splash", ( 1731, -443, 109 ) ); + playloopat( "amb_water_splash", ( -1797, -428, 100 ) ); +} + +snd_start_autofx_audio() +{ + snd_play_auto_fx( "fx_mp_hydro_water_pipe", "amb_water_pipe_spray", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_hydro_dam_tunnel_glare", "amb_lights_sml", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_village_tube_light", "amb_lights_sml", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_vent_heat_distort", "amb_exhaust", 0, 0, 0, 0 ); +} diff --git a/MP/Maps/Hydro/clientscripts/mp/mp_hydro_fx.csc b/MP/Maps/Hydro/clientscripts/mp/mp_hydro_fx.csc new file mode 100644 index 0000000..3b802c9 --- /dev/null +++ b/MP/Maps/Hydro/clientscripts/mp/mp_hydro_fx.csc @@ -0,0 +1,100 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\createfx\mp_hydro_fx; +#include clientscripts\mp\_fx; + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_hydro_dam_water_bottom"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_bottom" ); + level._effect["fx_mp_hydro_dam_water_top"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_top" ); + level._effect["fx_mp_hydro_dam_water_top_side"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_top_side" ); + level._effect["fx_mp_hydro_dam_water_top_side_b"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_top_side_b" ); + level._effect["fx_mp_hydro_dam_water_top_b"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_top_b" ); + level._effect["fx_mp_hydro_dam_water_spray"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_spray" ); + level._effect["fx_mp_hydro_dam_water_drip_splash"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_drip_splash" ); + level._effect["fx_mp_hydro_dam_water_strip"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_strip" ); + level._effect["fx_mp_hydro_dam_water_strip2"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_strip2" ); + level._effect["fx_mp_hydro_dam_water_corner"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_corner" ); + level._effect["fx_mp_hydro_dam_water_corner2"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_corner2" ); + level._effect["fx_mp_hydro_dam_water_wall"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_wall" ); + level._effect["fx_mp_hydro_dam_river_top"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_river_top" ); + level._effect["fx_mp_hydro_dam_river_top_b"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_river_top_b" ); + level._effect["fx_mp_hydro_dam_river_flat"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_river_flat" ); + level._effect["fx_mp_hydro_dam_river_flat2"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_river_flat2" ); + level._effect["fx_mp_hydro_flood_blast01_spill"] = loadfx( "maps/mp_maps/fx_mp_hydro_flood_blast01_spill" ); + level._effect["fx_mp_hydro_flood_blast01"] = loadfx( "maps/mp_maps/fx_mp_hydro_flood_blast01" ); + level._effect["fx_mp_hydro_flood_blast02"] = loadfx( "maps/mp_maps/fx_mp_hydro_flood_blast02" ); + level._effect["fx_mp_hydro_flood_water_spill"] = loadfx( "maps/mp_maps/fx_mp_hydro_flood_water_spill" ); + level._effect["fx_mp_hydro_flood_mist_tail"] = loadfx( "maps/mp_maps/fx_mp_hydro_flood_mist_tail" ); + level._effect["fx_mp_hydro_flood_blast_end"] = loadfx( "maps/mp_maps/fx_mp_hydro_flood_blast_end" ); + level._effect["fx_mp_hydro_hatch_spray"] = loadfx( "maps/mp_maps/fx_mp_hydro_hatch_spray" ); + level._effect["fx_mp_vent_heat_distort"] = loadfx( "maps/mp_maps/fx_mp_vent_heat_distort" ); + level._effect["fx_mp_hydro_splash_edge"] = loadfx( "maps/mp_maps/fx_mp_hydro_splash_edge" ); + level._effect["fx_mp_hydro_water_pipe"] = loadfx( "maps/mp_maps/fx_mp_hydro_water_pipe" ); + level._effect["fx_mp_hydro_dam_water_vista"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_vista" ); + level._effect["fx_mp_hydro_dam_water_top_vista"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_top_vista" ); + level._effect["fx_mp_hydro_dam_steam"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam" ); + level._effect["fx_mp_hydro_dam_steam2"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam2" ); + level._effect["fx_mp_hydro_dam_steam2_green"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam2_green" ); + level._effect["fx_mp_hydro_dam_steam3"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam3" ); + level._effect["fx_mp_hydro_dam_steam_big"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam_big" ); + level._effect["fx_mp_hydro_dam_steam_big2"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam_big2" ); + level._effect["fx_mp_hydro_dam_steam_xlrg"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam_xlrg" ); + level._effect["fx_mp_hydro_dam_steam_vista"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam_vista" ); + level._effect["fx_fog_street_sm_area_low"] = loadfx( "fog/fx_fog_street_sm_area_low" ); + level._effect["fx_mp_hydro_hvac_steam"] = loadfx( "maps/mp_maps/fx_mp_hydro_hvac_steam" ); + level._effect["fx_mp_hydro_steam_behind_glass1"] = loadfx( "maps/mp_maps/fx_mp_hydro_steam_behind_glass1" ); + level._effect["fx_mp_hydro_steam_behind_glass2"] = loadfx( "maps/mp_maps/fx_mp_hydro_steam_behind_glass2" ); + level._effect["fx_mp_hydro_light_warning"] = loadfx( "maps/mp_maps/fx_mp_hydro_light_warning" ); + level._effect["fx_mp_hydro_light_warning_blnk"] = loadfx( "maps/mp_maps/fx_mp_hydro_light_warning_blnk" ); + level._effect["fx_mp_hydro_light_warning_sm"] = loadfx( "maps/mp_maps/fx_mp_hydro_light_warning_sm" ); + level._effect["fx_mp_hydro_light_warning_blnk_sm"] = loadfx( "maps/mp_maps/fx_mp_hydro_light_warning_blnk_sm" ); + level._effect["fx_drone_light_yellow"] = loadfx( "light/fx_drone_light_yellow" ); + level._effect["fx_drone_red_blink"] = loadfx( "light/fx_drone_red_blink" ); + level._effect["fx_mp_hydro_dam_tunnel_glare"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_tunnel_glare" ); + level._effect["fx_mp_hydro_dam_tunnel_glare_green"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_tunnel_glare_green" ); + level._effect["fx_mp_hydro_dam_tunnel_glare_green2"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_tunnel_glare_green2" ); + level._effect["fx_light_god_ray_mp_hydro"] = loadfx( "env/light/fx_light_god_ray_mp_hydro" ); + level._effect["fx_light_god_ray_mp_hydro_sm"] = loadfx( "env/light/fx_light_god_ray_mp_hydro_sm" ); + level._effect["fx_village_tube_light"] = loadfx( "light/fx_village_tube_light" ); + level._effect["fx_hydro_tube_light"] = loadfx( "light/fx_hydro_tube_light" ); + level._effect["fx_mp_fan_light_shaft_anim"] = loadfx( "light/fx_mp_fan_light_shaft_anim" ); + level._effect["fx_lf_mp_hydro_sun1"] = loadfx( "lens_flares/fx_lf_mp_hydro_sun1" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_carrier_spark_bounce_runner"] = loadfx( "maps/mp_maps/fx_mp_carrier_spark_bounce_runner" ); + level._effect["fx_mp_hydro_killstreak_spillway_1"] = loadfx( "maps/mp_maps/fx_mp_hydro_killstreak_spillway_1" ); + level._effect["fx_mp_hydro_killstreak_spillway_2"] = loadfx( "maps/mp_maps/fx_mp_hydro_killstreak_spillway_2" ); + level._effect["fx_mp_hydro_killstreak_spillway_mid"] = loadfx( "maps/mp_maps/fx_mp_hydro_killstreak_spillway_mid" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["wirespark_med"] = %fxanim_gp_wirespark_med_anim; + level.scr_anim["fxanim_props"]["wires_long"] = %fxanim_mp_hydro_wires_long_anim; + level.scr_anim["fxanim_props"]["wires_med"] = %fxanim_mp_hydro_wires_med_anim; + level.scr_anim["fxanim_props"]["seagull_circle_01"] = %fxanim_gp_seagull_circle_01_anim; + level.scr_anim["fxanim_props"]["seagull_circle_02"] = %fxanim_gp_seagull_circle_02_anim; + level.scr_anim["fxanim_props"]["seagull_circle_03"] = %fxanim_gp_seagull_circle_03_anim; + level.scr_anim["fxanim_props"]["wires_med_02"] = %fxanim_mp_hydro_wires_med_02_anim; + level.scr_anim["fxanim_props"]["wires_long_02"] = %fxanim_mp_hydro_wires_long_02_anim; +} + +main() +{ + clientscripts\mp\createfx\mp_hydro_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fxanim_props(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} diff --git a/MP/Maps/Hydro/maps/mp/_events.gsc b/MP/Maps/Hydro/maps/mp/_events.gsc new file mode 100644 index 0000000..61d5499 --- /dev/null +++ b/MP/Maps/Hydro/maps/mp/_events.gsc @@ -0,0 +1,97 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_globallogic_utils; + +add_timed_event( seconds, notify_string, client_notify_string ) +{ + assert( seconds >= 0 ); + + if ( level.timelimit > 0 ) + level thread timed_event_monitor( seconds, notify_string, client_notify_string ); +} + +timed_event_monitor( seconds, notify_string, client_notify_string ) +{ + for (;;) + { + wait 0.5; + + if ( !isdefined( level.starttime ) ) + continue; + + millisecs_remaining = maps\mp\gametypes\_globallogic_utils::gettimeremaining(); + seconds_remaining = millisecs_remaining / 1000; + + if ( seconds_remaining <= seconds ) + { + event_notify( notify_string, client_notify_string ); + return; + } + } +} + +add_score_event( score, notify_string, client_notify_string ) +{ + assert( score >= 0 ); + + if ( level.scorelimit > 0 ) + { + if ( level.teambased ) + level thread score_team_event_monitor( score, notify_string, client_notify_string ); + else + level thread score_event_monitor( score, notify_string, client_notify_string ); + } +} + +any_team_reach_score( score ) +{ + foreach ( team in level.teams ) + { + if ( game["teamScores"][team] >= score ) + return true; + } + + return false; +} + +score_team_event_monitor( score, notify_string, client_notify_string ) +{ + for (;;) + { + wait 0.5; + + if ( any_team_reach_score( score ) ) + { + event_notify( notify_string, client_notify_string ); + return; + } + } +} + +score_event_monitor( score, notify_string, client_notify_string ) +{ + for (;;) + { + wait 0.5; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].score ) && players[i].score >= score ) + { + event_notify( notify_string, client_notify_string ); + return; + } + } + } +} + +event_notify( notify_string, client_notify_string ) +{ + if ( isdefined( notify_string ) ) + level notify( notify_string ); + + if ( isdefined( client_notify_string ) ) + clientnotify( client_notify_string ); +} diff --git a/MP/Maps/Hydro/maps/mp/createfx/mp_hydro_fx.gsc b/MP/Maps/Hydro/maps/mp/createfx/mp_hydro_fx.gsc new file mode 100644 index 0000000..2fb97ff --- /dev/null +++ b/MP/Maps/Hydro/maps/mp/createfx/mp_hydro_fx.gsc @@ -0,0 +1,1927 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2052.82, -2671.41, 1529.39 ); + ent.v["angles"] = ( 11, 94, 0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2128.64, -2679.26, 1532.27 ); + ent.v["angles"] = ( 10.917, 86.8702, -1.35704 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1998.89, -2675.41, 1533.77 ); + ent.v["angles"] = ( 11, 94, 0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1935.84, -2698.56, 1543.51 ); + ent.v["angles"] = ( 10.9847, 97.0559, 0.582839 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2276.34, -2689.46, 1515.56 ); + ent.v["angles"] = ( 11, 90, 0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2198.01, -2682.66, 1509.3 ); + ent.v["angles"] = ( 10.939, 96.1114, 1.16396 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2342, -2669.86, 1511.18 ); + ent.v["angles"] = ( 11, 90, 0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2412.65, -2700.9, 1528.06 ); + ent.v["angles"] = ( 10.9729, 85.9253, -0.776853 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2329.16, -2729.37, 1550.41 ); + ent.v["angles"] = ( 10.917, 93.1296, 1.35701 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2261.95, -2727.11, 1550.67 ); + ent.v["angles"] = ( 11, 86, 0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2198.11, -2720.78, 1546.29 ); + ent.v["angles"] = ( 11, 86, 0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2135.49, -2714.65, 1563.17 ); + ent.v["angles"] = ( 10.9847, 82.9439, -0.582858 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2062.63, -2681.49, 1508.37 ); + ent.v["angles"] = ( 10.9576, 93.093, 0.970567 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1992.35, -2681.47, 1514.63 ); + ent.v["angles"] = ( 11, 88, 0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1929.37, -2678.8, 1510.25 ); + ent.v["angles"] = ( 11, 88, 0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1873.52, -2678.1, 1527.13 ); + ent.v["angles"] = ( 10.9983, 86.9813, -0.194372 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_side" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2065.54, -2396.96, 1358.82 ); + ent.v["angles"] = ( 62.9828, 89.4676, -0.313342 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_side" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2312.69, -2543.77, 1356.26 ); + ent.v["angles"] = ( 56.9854, 87.6956, -4.61113 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_side" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2233.31, -2524.85, 1323.56 ); + ent.v["angles"] = ( 55.974, 91.3205, 1.27719 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_side" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1967.88, -2511.56, 1304 ); + ent.v["angles"] = ( 55.9646, 87.7551, -1.81747 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 466.24, -1445.26, 297.358 ); + ent.v["angles"] = ( 359.255, 117.854, 2.05426 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -165.424, -1170.38, 211.878 ); + ent.v["angles"] = ( 0.344091, 88.8737, 2.15786 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -579.509, -1488.69, 197.625 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 81.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1784.87, -1019.17, 248.562 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_hydro_sun1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -252361, 399620, 250915 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1527.16, -1245.25, 250.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1626.52, -1182.75, 259.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2358.09, -1050.8, 239 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2308.35, -749.921, 259.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2285.1, -1218.5, 262.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2300.22, -816.447, 262.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1399.57, -161.103, 250.125 ); + ent.v["angles"] = ( 24.5906, 92.3963, 0.617105 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 465.891, -73.493, 259.125 ); + ent.v["angles"] = ( 355.592, 92.0962, 0.562776 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1272.36, -65.8394, 251.125 ); + ent.v["angles"] = ( 17.5909, 92.3174, 0.588632 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1441.17, -335.006, 247.125 ); + ent.v["angles"] = ( 0.372095, 359.142, -1.62169 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1165.74, -1326.99, 267.125 ); + ent.v["angles"] = ( 359.449, 181.139, 0.601526 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_bottom" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1786.68, 891.308, -1093.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_bottom" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 151.115, 568.117, -1090.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_bottom" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -197.861, 569.815, -1093.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 95.0532, -1138.23, 205.859 ); + ent.v["angles"] = ( 0.344091, 88.8737, 2.15786 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 101.247, -1528.84, 216.606 ); + ent.v["angles"] = ( 0.344091, 88.8737, 2.15786 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -171.956, -1550.65, 219.594 ); + ent.v["angles"] = ( 0.344091, 88.8737, 2.15786 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_side_b" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1992.57, 252.088, 54.3273 ); + ent.v["angles"] = ( 57, 96, 0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_side_b" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1932.7, 254.438, 33.0202 ); + ent.v["angles"] = ( 59, 93, 0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_bottom" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1721.7, 893.816, -1094.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1855.24, -1794.71, 100 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2162.79, -1805.66, 102 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 97.0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2196.57, -1600.59, 97 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 103.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2024.71, -1045.98, 94.0515 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2035.64, -1092.62, 98.7927 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_corner2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1795.81, -422.584, 85.3393 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 103.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2129.53, -897.87, 99.8196 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_river_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2302.38, -2404.83, 974.115 ); + ent.v["angles"] = ( 356.021, 90.9852, 0.418848 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -115.691, -862.168, 216.125 ); + ent.v["angles"] = ( 357, 113, 0 ); + ent.v["delay"] = 0.9; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 49.1121, -864.56, 214.204 ); + ent.v["angles"] = ( 353.358, 64.8608, 1.62771 ); + ent.v["delay"] = 0.9; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -45.0877, -361.985, 158.61 ); + ent.v["angles"] = ( 295.157, 82.8883, 2.33001 ); + ent.v["delay"] = 1.5; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 242.276, -339.837, 161.504 ); + ent.v["angles"] = ( 320.23, 90.6643, -3.21933 ); + ent.v["delay"] = 1.5; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -308.234, -356.983, 149.158 ); + ent.v["angles"] = ( 320.23, 90.6643, -3.21933 ); + ent.v["delay"] = 1.5; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -392.9, -656.784, 189.687 ); + ent.v["angles"] = ( 321, 88, 0 ); + ent.v["delay"] = 1.3; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -374.391, -533.755, 187.28 ); + ent.v["angles"] = ( 321, 88, 0 ); + ent.v["delay"] = 1.4; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -389.932, -396.36, 188.808 ); + ent.v["angles"] = ( 321, 88, 0 ); + ent.v["delay"] = 1.5; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 326.135, -359.082, 182.243 ); + ent.v["angles"] = ( 321, 88, 0 ); + ent.v["delay"] = 1.5; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 328.674, -504.435, 180.255 ); + ent.v["angles"] = ( 321, 88, 0 ); + ent.v["delay"] = 1.4; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 328.472, -648.633, 181.622 ); + ent.v["angles"] = ( 321, 88, 0 ); + ent.v["delay"] = 1.3; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -411.256, -509.809, 216.125 ); + ent.v["angles"] = ( 270, 0, 41 ); + ent.v["delay"] = 1.3; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -411.454, -452.358, 217.125 ); + ent.v["angles"] = ( 270, 0, 38 ); + ent.v["delay"] = 1.4; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -412.111, -387.558, 217.125 ); + ent.v["angles"] = ( 270, 0, 41 ); + ent.v["delay"] = 1.5; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -409.556, -343.526, 217.125 ); + ent.v["angles"] = ( 270, 0, 41 ); + ent.v["delay"] = 1.6; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 350.58, -448.946, 218.125 ); + ent.v["angles"] = ( 270, 3.75173, -36.7517 ); + ent.v["delay"] = 1.4; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 350.778, -506.397, 216.125 ); + ent.v["angles"] = ( 270, 0, -35 ); + ent.v["delay"] = 1.3; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 349.923, -384.146, 218.125 ); + ent.v["angles"] = ( 270, 0, -35 ); + ent.v["delay"] = 1.5; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 352.478, -340.114, 218.125 ); + ent.v["angles"] = ( 270, 3.94519, -35.9451 ); + ent.v["delay"] = 1.6; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -160.754, -742.163, 229.08 ); + ent.v["angles"] = ( 0.986304, 97.0012, 0.243874 ); + ent.v["delay"] = 1.1; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 98.7076, -759.976, 222.667 ); + ent.v["angles"] = ( 357.016, 83.9916, 0.313913 ); + ent.v["delay"] = 1.1; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -260.946, -767.161, 217.731 ); + ent.v["angles"] = ( 351.218, 99.8639, -4.09223 ); + ent.v["delay"] = 1.1; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 216.33, -787.167, 223.01 ); + ent.v["angles"] = ( 350.446, 75.8534, 3.64031 ); + ent.v["delay"] = 1.1; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_light_warning" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -214.648, -799.411, 276.875 ); + ent.v["angles"] = ( 89, 180, 180 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_light_warning_blnk" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -215.156, -799.288, 276.875 ); + ent.v["angles"] = ( 89, 180, 180 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_light_warning_blnk" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 155.16, -800.139, 276.875 ); + ent.v["angles"] = ( 89, 180, 180 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_light_warning" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 155.668, -800.262, 276.875 ); + ent.v["angles"] = ( 89, 180, 180 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_light_warning_blnk" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 327.634, -2034.5, 298.571 ); + ent.v["angles"] = ( 89, 180, 180 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_light_warning" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 328.141, -2034.62, 298.571 ); + ent.v["angles"] = ( 89, 180, 180 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_light_warning_blnk" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -407.341, -2035.22, 297.568 ); + ent.v["angles"] = ( 89, 180, 180 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_light_warning" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -406.833, -2035.35, 297.568 ); + ent.v["angles"] = ( 89, 180, 180 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_light_warning_blnk" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -32.3667, -1824.43, 299.875 ); + ent.v["angles"] = ( 89, 180, 180 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_light_warning" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -31.8587, -1824.55, 299.875 ); + ent.v["angles"] = ( 89, 180, 180 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_light_warning_blnk" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -356.508, -205.177, 286.419 ); + ent.v["angles"] = ( 328.022, 272.359, -1.24934 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_light_warning" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -357.091, -205.404, 286.291 ); + ent.v["angles"] = ( 328.022, 272.359, -1.24934 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_light_warning_blnk" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 282.887, -204.253, 287.226 ); + ent.v["angles"] = ( 326.023, 272.413, -1.34857 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_light_warning" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 282.995, -203.762, 287.08 ); + ent.v["angles"] = ( 326.023, 272.413, -1.34857 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_mist_tail" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -216.782, -607.271, 235.581 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = 2; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_mist_tail" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 151.145, -617.3, 236 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = 2; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast_end" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 133.029, -262.021, 178.44 ); + ent.v["angles"] = ( 351, 91, 0 ); + ent.v["delay"] = 1.6; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast_end" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -185.263, -272.333, 178.621 ); + ent.v["angles"] = ( 345, 91, 0 ); + ent.v["delay"] = 1.6; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_side_b" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -184.765, -126.231, 134.327 ); + ent.v["angles"] = ( 60, 90, 0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_side_b" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 127.468, -125.157, 143.721 ); + ent.v["angles"] = ( 60, 90, 0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2097.75, -831.716, 92.6086 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1972.71, -856.795, 95.7947 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -392.908, -2200.43, 215.404 ); + ent.v["angles"] = ( 356.806, 109.298, 0.12213 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -309.16, -2207.5, 213.918 ); + ent.v["angles"] = ( 355.159, 82.914, 1.22113 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -538.46, -2155.97, 196.893 ); + ent.v["angles"] = ( 323.094, 155.324, 14.084 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -542.078, -2098.88, 197.934 ); + ent.v["angles"] = ( 323.094, 155.324, 14.084 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -545.256, -2028.61, 200.089 ); + ent.v["angles"] = ( 323.094, 155.324, 14.084 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -607.024, -2132.9, 219.125 ); + ent.v["angles"] = ( 271.414, 98.003, -44.9957 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -608.403, -2075.7, 219.125 ); + ent.v["angles"] = ( 270, 0, 56 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -610.299, -2014.77, 219.125 ); + ent.v["angles"] = ( 270, 0, 59 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 554.313, -2133.65, 217.467 ); + ent.v["angles"] = ( 270, 358.363, -59.363 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 555.163, -2015.48, 217.467 ); + ent.v["angles"] = ( 271.414, 276.018, 26.9912 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 487.343, -2011.03, 201.235 ); + ent.v["angles"] = ( 321.316, 6.32823, -6.49901 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 488.717, -2077.21, 202.276 ); + ent.v["angles"] = ( 323.904, 22.3859, -16.2928 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast02" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 489.394, -2151.54, 198.431 ); + ent.v["angles"] = ( 324.798, 25.9103, -17.3473 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_river_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1964.77, -2398.3, 979.494 ); + ent.v["angles"] = ( 356.021, 90.9852, 0.418848 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_river_top_b" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2031.28, -2393.34, 976.36 ); + ent.v["angles"] = ( 356, 90, 0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_big" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2207.85, -1932.77, 1001 ); + ent.v["angles"] = ( 67, 94, 0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 248.47, -2224.99, 210.799 ); + ent.v["angles"] = ( 347.91, 94.7895, 1.10778 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 332.683, -2207, 217.663 ); + ent.v["angles"] = ( 345.36, 77.7145, 0.44837 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_spray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2162.7, -1933.88, 941.002 ); + ent.v["angles"] = ( 11.4915, 87.2649, 1.66119 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_drip_splash" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2157.44, -1111.23, 209 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_drip_splash" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2098.92, -1088.26, 209.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_spray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2103.76, -2041.85, 990.382 ); + ent.v["angles"] = ( 3.37256, 91.0378, 1.87155 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1178.03, -1032.46, 263 ); + ent.v["angles"] = ( 359.449, 181.139, 0.601526 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_bottom" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2013.31, 890.053, -1090.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1914.68, -610.823, 90.8482 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 67.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1880.64, -397.514, 89.124 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 104.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2020.74, -80.3449, 86.776 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 78.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1161.21, -2219.73, 330.268 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1097.44, -2221.31, 329.845 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -231.32, -1570.65, 277.64 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -231.265, -1431.1, 277.757 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -231.342, -1275.48, 277.59 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -231.309, -1136.3, 277.667 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -231.312, -980.228, 277.643 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -230.82, -1730.54, 278.643 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -342.763, -1889.68, 278.767 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -264.412, -1811.45, 277.797 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 246.183, -1811.18, 277.622 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 278.68, -1888.67, 278.801 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 166.846, -1731.29, 278.588 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 166.368, -1570.14, 278.921 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 166.815, -1431.28, 278.65 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 166.739, -1275.23, 278.779 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 166.813, -1135.03, 278.657 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 166.74, -979.315, 278.772 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -112.854, -978.802, 277.81 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -112.919, -1135.25, 278.835 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -112.732, -1274.63, 278.766 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -112.64, -1430.58, 278.547 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -112.711, -1569.39, 278.708 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -33.5506, -1696.19, 278.672 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 49.6113, -1570.22, 279.923 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 49.2977, -1431.29, 279.794 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 49.3865, -1275.57, 279.823 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 49.3544, -1136.11, 279.807 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 49.9966, -979.138, 279.508 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 182.611, -1485.19, 435.067 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_water_pipe" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1773.05, -420.129, 264.578 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_water_pipe" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1709.45, -438.354, 266.46 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 14.8926, -1546.23, 188.995 ); + ent.v["angles"] = ( 2.19847, 65.1081, 1.43134 ); + ent.v["delay"] = 0.5; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast01" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -81.7838, -1546.74, 183.465 ); + ent.v["angles"] = ( 358.861, 107.079, 1.79503 ); + ent.v["delay"] = 0.5; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -425.05, -2177.78, 278.735 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 266.952, -2177.82, 278.664 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 361.152, -2177.94, 278.395 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast01_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -386.188, -2190.85, 210.57 ); + ent.v["angles"] = ( 355.058, 88.9346, 0.707331 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_flood_blast01_spill" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 337.096, -2187.49, 208.808 ); + ent.v["angles"] = ( 355.011, 94.9572, 0.1855 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3590.43, 2554.86, 782.503 ); + ent.v["angles"] = ( 270, 7.71059, 82.2893 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3778.6, 2554.59, 783.062 ); + ent.v["angles"] = ( 270, 7.71059, 82.2893 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3531.08, 1036.72, 782.533 ); + ent.v["angles"] = ( 270, 0.935656, -44.9356 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3663.91, 893.345, 782.53 ); + ent.v["angles"] = ( 270, 0.935656, -44.9356 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2557.32, 280.579, 782.916 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2556.95, 91.2935, 782.309 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1166.46, -1346.86, 324.539 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1223.03, -1346.82, 324.554 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1102.43, -977.076, 324.506 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1159.67, -977.072, 324.498 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1221.24, -977.027, 324.37 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1164.51, -977.078, 324.517 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1102.49, -1346.86, 324.535 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1159.28, -1347.02, 324.265 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -858.543, -685.375, 331.351 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 795.354, -685.377, 331.278 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1175.51, -1988.16, 448.107 ); + ent.v["angles"] = ( 40.0899, 298.827, 112.661 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_spark_bounce_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1313.75, -563.076, 428 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_carrier_spark_bounce_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1584.04, -145.958, 402.055 ); + ent.v["angles"] = ( 354, 0, 1 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2026.38, -914.425, 108.525 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1898.96, -462.226, 87.2239 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 13.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2058.9, -490.204, 91.016 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_corner2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1733.47, -441.988, 87.4946 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 80.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1760.61, -218.768, 86.0852 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 86.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1813.8, -357.981, 88.7497 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 76.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1898.29, -752.978, 92.5347 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 104.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1965.87, -217.876, 87.6689 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1193.49, -1598.6, 458.892 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1151.18, -1890.76, 445.465 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -761.044, -1983, 447.302 ); + ent.v["angles"] = ( 49.9351, 305.521, 118.249 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -941.731, -1993.28, 448.463 ); + ent.v["angles"] = ( 56.1551, 299.64, 114.481 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1631.7, -627.746, 263.989 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 69.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1572.26, -643.986, 257.223 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_side_b" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1786.75, 289.149, -35.9182 ); + ent.v["angles"] = ( 57, 96, 0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_side_b" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1731.66, 309.789, -63.2046 ); + ent.v["angles"] = ( 59, 93, 0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_bottom" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1953.89, 914.666, -1088.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2118.36, -1494.5, 216.817 ); + ent.v["angles"] = ( 325, 81, 0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1228.44, -1336.03, 260 ); + ent.v["angles"] = ( 0.663961, 13.139, -0.473831 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1262.03, -1041.72, 268 ); + ent.v["angles"] = ( 0.663961, 13.139, -0.473831 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -31.7349, -493.683, 208.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -243.987, -1056.39, 307 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -595.417, -1151.62, 271.92 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 161.59, -1030.86, 308 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 579.632, -1184.81, 265.689 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2013.41, -754.307, 91.7958 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1966.16, -523.137, 90.5133 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2045.27, -573.982, 90.6243 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 86.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_river_top_b" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2238.35, -2395.33, 992.096 ); + ent.v["angles"] = ( 356, 90, 0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2075.28, -1508.54, 173 ); + ent.v["angles"] = ( 325, 81, 0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_splash_edge" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -369.975, -485.596, 222.454 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 1.3; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_splash_edge" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 308.799, -502.748, 219.842 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = 1.3; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1726.93, -1330.76, 207.412 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2675.57, -892.195, 208.398 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2240.97, -454.214, 208.397 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_drip_splash" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2146.62, -1098.63, 208 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_drip_splash" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2204.18, -1111.86, 208 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_hydro_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 612.585, -405.044, 370.427 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_hydro_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 611.52, -232.791, 370.365 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_hydro_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1026.78, -233.827, 338.456 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -627.625, -2549.36, 330.112 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 36.6848, -1363.15, 433.484 ); + ent.v["angles"] = ( 90, 0, -180 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -99.2721, -1363.84, 433.497 ); + ent.v["angles"] = ( 90, 0, -180 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1506.4, 6537.77, -1707.4 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -110.955, 6425.6, -1708.61 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1648.25, 6513.32, -1601.85 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -755.422, -2210.77, 355.505 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -990.859, -2210.49, 355.781 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1160.49, -2210.69, 355.674 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1324.89, -2210.81, 355.395 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 697.706, -2210.69, 355.645 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 934.094, -2210.73, 355.574 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1095.97, -2210.71, 355.615 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1266.26, -2210.73, 355.57 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1129.97, -1598.62, 459.151 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -818.794, 4644.14, -1102.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -494.498, 4642.28, -1097.56 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -179.776, 4631.22, -1098.74 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 210.565, 4640.95, -1098.38 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 530.588, 4606.62, -1097.53 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 847.021, 4569.71, -1096.77 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1169.26, 4575.48, -1097.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1490.5, 4568.88, -1089.24 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1808.96, 4557.56, -1097.55 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2123.02, 4566.43, -1089.41 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2447.17, 4560.09, -1095.19 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2092.44, 4648.44, -1095.74 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2416.74, 4650.31, -1101.06 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1775.94, 4639.8, -1096.92 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1455.34, 4626, -1096.56 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1137.36, 4612.66, -1095.71 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_big" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2097.83, -2070.16, 879.83 ); + ent.v["angles"] = ( 60, 94, 0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_hvac_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1139.88, -824.86, 507.588 ); + ent.v["angles"] = ( 271, 89.9983, -179.998 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_hvac_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1078.68, -840.045, 512.588 ); + ent.v["angles"] = ( 271, 89.9983, -179.998 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 388.105, -1287.29, 294.53 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -446.469, -1259.1, 295.287 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_xlrg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1831.52, 942.271, -896.811 ); + ent.v["angles"] = ( 342, 94, 0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_xlrg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1886.32, 976.355, -885.117 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_xlrg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 117.786, 632.247, -795.534 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_xlrg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -152.096, 631.545, -802.303 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_xlrg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3719.54, -113.025, 305.403 ); + ent.v["angles"] = ( 7.17566, 49.5615, -6.9832 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_big2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4414.34, -581.72, 1075.19 ); + ent.v["angles"] = ( 69.5146, 41.4026, -2.31795 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_big2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4398.49, -595.333, 1033.61 ); + ent.v["angles"] = ( 59.6776, 134.947, 0.447249 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_xlrg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3731.79, -136.636, 381.986 ); + ent.v["angles"] = ( 6.80137, 141.437, 7.34813 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_big" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 188.664, -2420.59, 1359.28 ); + ent.v["angles"] = ( 67, 94, 0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_big" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -270.973, -2491.22, 1402.88 ); + ent.v["angles"] = ( 67, 94, 0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -895.288, -1886.13, 442.363 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -769.576, -1962.03, 493.174 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -940.206, -1957.09, 489.871 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1104.88, -1953.88, 487.722 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1147.49, -2035.41, 542.3 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -975.02, -2029.6, 538.41 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -809.417, -2026.56, 536.377 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1106.69, -2116.2, 596.382 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -850.023, -2112.99, 594.235 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 970.745, -1988.04, 509.452 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1139.39, -1997.84, 516.014 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1016.15, -1928.18, 469.385 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1182.59, -1929.43, 470.215 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1013.57, -2090.6, 578.113 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1186.74, -2085.46, 574.673 ); + ent.v["angles"] = ( 28.7087, 293.974, -63.9909 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1941.3, -939.942, 109.079 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2058.17, -971.553, 108.239 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1876.73, -943.336, 107.028 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1777.02, 11537.5, -979.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1137.53, 11487, -1007.91 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 211.173, 11552.3, -961.54 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -496.111, 11501.4, -995.7 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 854.694, 11612, -986.82 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2129.98, 11633.4, -995.78 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1496.67, 11584.3, -1012.94 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2151.06, -580.885, 87.5826 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 86.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2085.95, -580.363, 86.5911 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 95.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1194.13, -1524.94, 466.635 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1144.59, -1522.29, 466.582 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1996.43, -986.693, 90.3395 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2073.9, -986.414, 89.3378 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2011.42, -975.625, 90.1791 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1933.06, -981.509, 90.1401 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 778.852, -188.641, 363.812 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 652.786, -188.265, 363.575 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -659.127, -188.247, 363.552 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -720.189, -188.412, 363.732 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -783.297, -188.119, 363.266 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -844.539, -188.557, 363.788 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -907.553, -188.297, 363.64 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 196.213, -1779.2, 199.125 ); + ent.v["angles"] = ( 0.344091, 88.8737, 2.15786 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 304.422, -2054.55, 208.125 ); + ent.v["angles"] = ( 0.344091, 88.8737, 2.15786 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -263.879, -1802.53, 204.125 ); + ent.v["angles"] = ( 0.344091, 88.8737, 2.15786 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -254.012, -1994.83, 205.125 ); + ent.v["angles"] = ( 0.344091, 88.8737, 2.15786 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -379.435, -2038.39, 224.579 ); + ent.v["angles"] = ( 0.344091, 88.8737, 2.15786 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 173.415, -1907.23, 211.125 ); + ent.v["angles"] = ( 0.344091, 88.8737, 2.15786 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -331.952, -2177.79, 278.705 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -388.918, -1923.71, 271.096 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -280.028, -1726.48, 271.093 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 231.21, -1726.62, 271.094 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 320.759, -1923.87, 272.092 ); + ent.v["angles"] = vectorscale( ( 1, 0, -1 ), 90.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -30.1824, -1579.32, 309.125 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_steam_behind_glass2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 779.03, -2532.73, 183.806 ); + ent.v["angles"] = ( 295.839, 139.671, -144.856 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_steam_behind_glass1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1020.87, -2557.2, 221.763 ); + ent.v["angles"] = ( 336, 88.9793, -0.942621 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_steam_behind_glass2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1072.77, -2517.25, 190.005 ); + ent.v["angles"] = ( 291.776, 32.4804, -42.5563 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_steam_behind_glass1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 881.23, -2660.54, 241.661 ); + ent.v["angles"] = ( 336, 88.9793, -0.942621 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_steam_behind_glass1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -978.173, -2568.53, 250.768 ); + ent.v["angles"] = ( 336.179, 94.4455, -2.15952 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_steam_behind_glass2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1201.39, -2531.02, 180.913 ); + ent.v["angles"] = ( 291.17, 167.755, -170.712 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_steam_behind_glass2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -979.148, -2519.8, 208.843 ); + ent.v["angles"] = ( 307.343, 2.5724, -8.60869 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_steam_behind_glass1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1195.29, -2683.66, 251.995 ); + ent.v["angles"] = ( 336.179, 94.4455, -2.15952 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 0.151123, -1587.44, 442.789 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -123.081, -1587.82, 442.394 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 122.44, -1587.9, 442.212 ); + ent.v["angles"] = ( 43.0721, 88.7345, -1.13359 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -223.631, -1543.76, 442.708 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 161.536, -1357.21, 442.74 ); + ent.v["angles"] = ( 45, 180, 0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 24.6861, -1201.88, 442.912 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -100.39, -1201.2, 442.438 ); + ent.v["angles"] = ( 46, 270, 0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 170.602, -1485.09, 435.117 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fan_light_shaft_anim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -532.995, -2072.46, 343.882 ); + ent.v["angles"] = ( 86.6199, 6.51528, 90.9333 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fan_light_shaft_anim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 466.932, -2071.99, 344.881 ); + ent.v["angles"] = ( 86.6199, 6.51528, 90.9333 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2417.8, 11582.2, -996.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1998.76, -585.349, 114.366 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1797.08, -436.714, 92.6481 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 14.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1991.6, -581.31, 103.341 ); + ent.v["angles"] = ( 2.18255, 3.90224, 1.46031 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2071.43, -222.302, 101.03 ); + ent.v["angles"] = ( 3.18223, 3.92776, 1.4615 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2138.59, -262.778, 98.3231 ); + ent.v["angles"] = ( 3.37162, 354.915, 0.945253 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1934.04, -580.823, 104.675 ); + ent.v["angles"] = ( 3.18223, 3.92776, 1.4615 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1829.18, -211.296, 86.0448 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2104.86, 11695, -963.247 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1464.07, 11650.3, -946.247 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -824.585, 11599.9, -974.277 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -183.165, 11614.2, -962.067 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 524.119, 11665.1, -955.907 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1167.64, 11724.8, -993.187 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1791.62, 11697.1, -1009.31 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3377.75, 3713.56, 779.958 ); + ent.v["angles"] = ( 270, 7.71059, 82.2893 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_red_blink" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3571.35, 3718.45, 780.517 ); + ent.v["angles"] = ( 270, 7.71059, 82.2893 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_light_warning_blnk_sm" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -32.3471, -1623.88, 312.233 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_hydro_light_warning_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -32.3471, -1623.88, 312.233 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_hydro_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 612.112, -565.014, 370.42 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_hydro_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1026.83, -361.781, 338.476 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_hydro_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1028.39, -569.425, 338.553 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1158.21, -647.371, 442.898 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1158.55, -871.536, 466.552 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1223.68, -869.977, 466.543 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1224.29, -648.488, 442.431 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_hydro_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1036.21, -252.793, 338.364 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_hydro_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -674.316, -539.396, 370.552 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_hydro_tube_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1074.26, -588.583, 338.418 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_hatch_spray" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -26.2665, -1572.47, 256.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_killstreak_spillway_2" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1900, -488, 110 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_killstreak_spillway_1" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1970, -500, 135 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_mp_hydro_killstreak_spillway_mid" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -30, -935, 220 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; +} diff --git a/MP/Maps/Hydro/maps/mp/mp_hydro.gsc b/MP/Maps/Hydro/maps/mp/mp_hydro.gsc new file mode 100644 index 0000000..51b4f11 --- /dev/null +++ b/MP/Maps/Hydro/maps/mp/mp_hydro.gsc @@ -0,0 +1,452 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\_events; +#include maps\mp\mp_hydro_fx; +#include maps\mp\_load; +#include maps\mp\mp_hydro_amb; +#include maps\mp\_compass; +#include maps\mp\_tacticalinsertion; +#include maps\mp\killstreaks\_rcbomb; +#include maps\mp\gametypes\_weaponobjects; +#include maps\mp\gametypes\ctf; +#include maps\mp\gametypes\_gameobjects; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + precacheitem( "hydro_water_mp" ); + maps\mp\mp_hydro_fx::main(); + precachemodel( "collision_physics_256x256x10" ); + precachemodel( "collision_missile_128x128x10" ); + precachemodel( "collision_physics_64x64x64" ); + maps\mp\_load::main(); + maps\mp\mp_hydro_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_hydro" ); + maps\mp\mp_hydro_amb::main(); +/# + execdevgui( "devgui_mp_hydro" ); +#/ + registerclientfield( "world", "pre_wave", 1, 1, "int" ); + registerclientfield( "world", "big_wave", 1, 1, "int" ); + setdvar( "compassmaxrange", "2300" ); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + spawncollision( "collision_physics_256x256x10", "collider", ( 3695, 340, 84 ), ( 0, 44.8, -90 ) ); + spawncollision( "collision_physics_256x256x10", "collider", ( 3449, 82, 84 ), ( 0, 44.8, -90 ) ); + spawncollision( "collision_physics_64x64x64", "collider", ( 577.5, -1835, 309.5 ), ( 0, 0, 0 ) ); + spawncollision( "collision_physics_64x64x64", "collider", ( 577.5, -1786.5, 339.5 ), ( 0, 0, 0 ) ); + spawncollision( "collision_physics_64x64x64", "collider", ( -641.5, -1834.5, 309.5 ), ( 0, 0, 0 ) ); + spawncollision( "collision_physics_64x64x64", "collider", ( -641.5, -1786, 339.5 ), ( 0, 0, 0 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -521.5, -2106, 325 ), vectorscale( ( 0, 0, 1 ), 90.0 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -521.5, -2041, 325 ), vectorscale( ( 0, 0, 1 ), 90.0 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( 471.5, -2106, 325 ), vectorscale( ( 0, 0, 1 ), 90.0 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( 471.5, -2041, 325 ), vectorscale( ( 0, 0, 1 ), 90.0 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( 1432, -1912, 376.5 ), vectorscale( ( 0, 0, 1 ), 90.0 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( 1516.5, -1912, 376.5 ), vectorscale( ( 0, 0, 1 ), 90.0 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -1490, -1916.5, 376.5 ), vectorscale( ( 0, 0, 1 ), 90.0 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -1574.5, -1916.5, 376.5 ), vectorscale( ( 0, 0, 1 ), 90.0 ) ); + level.waterrushfx = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_wall" ); + level.waterambientfxmiddlefront = loadfx( "maps/mp_maps/fx_mp_hydro_flood_splash_middle_front" ); + level.waterambientfxmiddleback = loadfx( "maps/mp_maps/fx_mp_hydro_flood_splash_middle_back" ); + level.waterambientfxleftfront = loadfx( "maps/mp_maps/fx_mp_hydro_flood_splash_right" ); + level.waterambientfxleftmiddle = loadfx( "maps/mp_maps/fx_mp_hydro_flood_splash_left_mid" ); + level.waterambientfxleftback = loadfx( "maps/mp_maps/fx_mp_hydro_flood_splash_left_back" ); + level.waterambientfxrightfront = loadfx( "maps/mp_maps/fx_mp_hydro_flood_splash_left" ); + level.waterambientfxrightmiddle = loadfx( "maps/mp_maps/fx_mp_hydro_flood_splash_right_mid" ); + level.waterambientfxrightback = loadfx( "maps/mp_maps/fx_mp_hydro_flood_splash_right_back" ); + level.waterambientfxboxfront = loadfx( "maps/mp_maps/fx_mp_hydro_flood_splash_box" ); + level.waterambientfxboxback = loadfx( "maps/mp_maps/fx_mp_hydro_flood_splash_box_back" ); + setdvar( "tu6_player_shallowWaterHeight", "10.5" ); + visionsetnaked( "mp_hydro", 1 ); + level thread removeobjectsondemovertime(); + set_dvar_if_unset( "scr_hydro_water_rush", 1 ); + + if ( getgametypesetting( "allowMapScripting" ) ) + { + level.overrideplayerdeathwatchtimer = ::leveloverridetime; + initwatertriggers(); + } +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2400", reset_dvars ); +} + +leveloverridetime( defaulttime ) +{ + if ( isdefined( self.lastattacker ) && isdefined( self.lastattacker.targetname ) && self.lastattacker.targetname == "water_kill_trigger" ) + return 0.4; + + return defaulttime; +} + +initwatertriggers() +{ + water_kill_triggers = getentarray( "water_kill_trigger", "targetname" ); + water_mover = spawn( "script_model", ( 0, 0, 0 ) ); + water_mover setmodel( "tag_origin" ); + water_ambient_mover = spawn( "script_model", ( 0, 0, 0 ) ); + water_ambient_mover setmodel( "tag_origin" ); + water_ambient_front_pillar = spawn( "script_model", ( -31, -888, 202 ) ); + water_ambient_front_pillar setmodel( "tag_origin" ); + water_ambient_front_pillar.angles = vectorscale( ( 0, 1, 0 ), 90.0 ); + water_ambient_front_pillar linkto( water_ambient_mover ); + water_ambient_back_pillar = spawn( "script_model", ( -32, -1535, 202 ) ); + water_ambient_back_pillar setmodel( "tag_origin" ); + water_ambient_back_pillar.angles = vectorscale( ( 0, 1, 0 ), 90.0 ); + water_ambient_back_pillar linkto( water_ambient_mover ); + water_ambient_front_block = spawn( "script_model", ( -32, -331, 193 ) ); + water_ambient_front_block setmodel( "tag_origin" ); + water_ambient_front_block.angles = vectorscale( ( 0, 1, 0 ), 90.0 ); + water_ambient_front_block linkto( water_ambient_mover ); + water_ambient_back_block = spawn( "script_model", ( -32, -1800, 199 ) ); + water_ambient_back_block setmodel( "tag_origin" ); + water_ambient_back_block.angles = vectorscale( ( 0, 1, 0 ), 90.0 ); + water_ambient_back_block linkto( water_ambient_mover ); + water_ambient_back_right = spawn( "script_model", ( -467, -1975, 190 ) ); + water_ambient_back_right setmodel( "tag_origin" ); + water_ambient_back_right.angles = vectorscale( ( 0, 1, 0 ), 90.0 ); + water_ambient_back_right linkto( water_ambient_mover ); + water_ambient_back_left = spawn( "script_model", ( 404, -1975, 190 ) ); + water_ambient_back_left setmodel( "tag_origin" ); + water_ambient_back_left.angles = vectorscale( ( 0, 1, 0 ), 90.0 ); + water_ambient_back_left linkto( water_ambient_mover ); + water_ambient_middle_right = spawn( "script_model", ( -274, -1680, 185 ) ); + water_ambient_middle_right setmodel( "tag_origin" ); + water_ambient_middle_right.angles = vectorscale( ( 0, 1, 0 ), 90.0 ); + water_ambient_middle_right linkto( water_ambient_mover ); + water_ambient_middle_left = spawn( "script_model", ( 215, -1680, 185 ) ); + water_ambient_middle_left setmodel( "tag_origin" ); + water_ambient_middle_left.angles = vectorscale( ( 0, 1, 0 ), 90.0 ); + water_ambient_middle_left linkto( water_ambient_mover ); + water_ambient_front_right = spawn( "script_model", ( -333, -302, 185 ) ); + water_ambient_front_right setmodel( "tag_origin" ); + water_ambient_front_right.angles = vectorscale( ( 0, 1, 0 ), 90.0 ); + water_ambient_front_right linkto( water_ambient_mover ); + water_ambient_front_left = spawn( "script_model", ( 265, -302, 185 ) ); + water_ambient_front_left setmodel( "tag_origin" ); + water_ambient_front_left.angles = vectorscale( ( 0, 1, 0 ), 90.0 ); + water_ambient_front_left linkto( water_ambient_mover ); + water_pa_1 = spawn( "script_model", ( 1667, -1364, 684 ) ); + water_pa_1 setmodel( "tag_origin" ); + water_pa_2 = spawn( "script_model", ( -1806, -1375, 783 ) ); + water_pa_2 setmodel( "tag_origin" ); + water_pa_3 = spawn( "script_model", ( -100, -1375, 783 ) ); + water_pa_3 setmodel( "tag_origin" ); + wait 0.1; + water_kill_triggers[0] enablelinkto(); + water_kill_triggers[0] linkto( water_mover ); + water_kill_triggers[1] enablelinkto(); + water_kill_triggers[1] linkto( water_mover ); + playfxontag( level.waterambientfxmiddlefront, water_ambient_front_pillar, "tag_origin" ); + playfxontag( level.waterambientfxmiddleback, water_ambient_back_pillar, "tag_origin" ); + playfxontag( level.waterambientfxboxfront, water_ambient_front_block, "tag_origin" ); + playfxontag( level.waterambientfxboxback, water_ambient_back_block, "tag_origin" ); + playfxontag( level.waterambientfxrightback, water_ambient_back_right, "tag_origin" ); + playfxontag( level.waterambientfxleftback, water_ambient_back_left, "tag_origin" ); + playfxontag( level.waterambientfxrightmiddle, water_ambient_middle_right, "tag_origin" ); + playfxontag( level.waterambientfxleftmiddle, water_ambient_middle_left, "tag_origin" ); + playfxontag( level.waterambientfxrightfront, water_ambient_front_right, "tag_origin" ); + playfxontag( level.waterambientfxleftfront, water_ambient_front_left, "tag_origin" ); + setdvar( "R_WaterWaveBase", 0 ); + + if ( level.timelimit ) + { + seconds = level.timelimit * 60; + add_timed_event( int( seconds * 0.25 ), "hydro_water_rush" ); + add_timed_event( int( seconds * 0.75 ), "hydro_water_rush" ); + } + else if ( level.scorelimit ) + { + add_score_event( int( level.scorelimit * 0.25 ), "hydro_water_rush" ); + add_score_event( int( level.scorelimit * 0.75 ), "hydro_water_rush" ); + } + + self thread watchwatertrigger( water_mover, water_kill_triggers, water_pa_1, water_pa_2, water_pa_3, water_ambient_back_pillar, water_ambient_front_block, water_ambient_mover ); + self thread waterkilltriggerthink( water_kill_triggers ); + wait 5; + setdvar( "R_WaterWaveBase", 0 ); +} + +watchwatertrigger( water_mover, water_kill_triggers, water_pa_1, water_pa_2, water_pa_3, water_ambient_back, water_ambient_box, water_ambient_mover ) +{ + thread watchdevnotify(); + + for (;;) + { + level waittill_any( "hydro_water_rush", "dev_water_rush" ); + setclientfield( "pre_wave", 1 ); + water_ambient_back playloopsound( "amb_train_incomming_beep" ); + water_ambient_box playloopsound( "amb_train_incoming_beep" ); + water_pa_1 playsound( "evt_pa_atten" ); + water_pa_2 playsound( "evt_pa_atten" ); + water_pa_3 playsound( "evt_pa_atten" ); + wait 2; + water_pa_1 playsound( "evt_pa_online" ); + water_pa_2 playsound( "evt_pa_online" ); + water_pa_3 playsound( "evt_pa_online" ); + water_fx1 = spawn( "script_model", water_kill_triggers[0].origin + vectorscale( ( 0, 1, 0 ), 1000.0 ) ); + water_fx1 setmodel( "tag_origin" ); + water_fx1.angles = vectorscale( ( 0, 1, 0 ), 90.0 ); + water_fx2 = spawn( "script_model", water_kill_triggers[1].origin + vectorscale( ( 0, 1, 0 ), 1000.0 ) ); + water_fx2 setmodel( "tag_origin" ); + water_fx2.angles = vectorscale( ( 0, 1, 0 ), 90.0 ); + exploder( 1005 ); + wait 3; + water_pa_1 playsound( "evt_pa_online" ); + water_pa_2 playsound( "evt_pa_online" ); + water_pa_3 playsound( "evt_pa_online" ); + wait 1; + playfxontag( level.waterrushfx, water_fx1, "tag_origin" ); + playfxontag( level.waterrushfx, water_fx2, "tag_origin" ); + water_fx1 playloopsound( "evt_water_wave" ); + water_fx2 playloopsound( "evt_water_wave" ); + water_mover.origin = ( 0, 0, 0 ); + setclientfield( "big_wave", 1 ); + water_mover moveto( vectorscale( ( 0, 1, 0 ), 2100.0 ), 2.5 ); + water_ambient_mover moveto( vectorscale( ( 0, 0, 1 ), 20.0 ), 2.5 ); + level thread waterfxloopstarter( water_fx1, water_fx2, 5 ); + thread play_exploder(); + waterlevel = -24; + wait 2; + water_pa_1 playsound( "evt_pa_warn" ); + water_pa_2 playsound( "evt_pa_warn" ); + water_pa_3 playsound( "evt_pa_warn" ); + wait 3; + water_pa_1 playsound( "evt_pa_offline" ); + water_pa_2 playsound( "evt_pa_offline" ); + water_pa_3 playsound( "evt_pa_offline" ); + wait 1; + water_mover moveto( vectorscale( ( 0, 1, 0 ), 4100.0 ), 2.5 ); + water_ambient_mover moveto( ( 0, 0, 0 ), 2.5 ); + water_fx1 stoploopsound( 2 ); + water_fx2 stoploopsound( 2 ); + setclientfield( "pre_wave", 0 ); + wait 1.5; + water_pa_1 playsound( "evt_pa_access" ); + water_pa_2 playsound( "evt_pa_access" ); + water_pa_3 playsound( "evt_pa_access" ); + wait 1; + water_ambient_box stoploopsound( 1 ); + water_ambient_back stoploopsound( 1 ); + stop_exploder( 1005 ); + setdvar( "R_WaterWaveAmplitude", "0 0 0 0" ); + water_mover.origin = vectorscale( ( 0, 0, -1 ), 500.0 ); + wait 2; + water_fx1 delete(); + water_fx2 delete(); + water_mover.origin = ( 0, 0, 0 ); + setclientfield( "big_wave", 0 ); + wait 5; + } +} + +play_exploder() +{ + wait 0.2; + exploder( 1002 ); + wait 0.5; + exploder( 1001 ); +} + +watchdevnotify() +{ + startvalue = getdvar( "scr_hydro_water_rush" ); + + for (;;) + { + should_water_rush = getdvar( "scr_hydro_water_rush" ); + + if ( should_water_rush != startvalue ) + { + level notify( "dev_water_rush" ); + startvalue = should_water_rush; + } + + wait 0.2; + } +} + +waterfxloopstarter( fx1, fx2, looptime ) +{ + level thread waterfxloop( fx1, fx2 ); +} + +waterfxloop( fx1, fx2 ) +{ + start1 = fx1.origin; + start2 = fx2.origin; + fx1 moveto( fx1.origin + vectorscale( ( 0, 1, 0 ), 2200.0 ), 2.67 ); + fx2 moveto( fx2.origin + vectorscale( ( 0, 1, 0 ), 2200.0 ), 2.67 ); + wait 2.67; + fx1 moveto( fx1.origin + ( 0, 600, -1000 ), 2.5 ); + fx2 moveto( fx2.origin + ( 0, 600, -1000 ), 2.5 ); + wait 3; + fx1.origin = start1; + fx2.origin = start2; +} + +waterkilltriggerthink( triggers ) +{ + for (;;) + { + wait 0.1; + entities = getdamageableentarray( triggers[0].origin, 2000 ); + + foreach ( entity in entities ) + { + triggertouched = 0; + + if ( !entity istouching( triggers[0] ) ) + { + triggertouched = 1; + + if ( !entity istouching( triggers[1] ) ) + continue; + } + + if ( isdefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" ) + { + entity maps\mp\_tacticalinsertion::destroy_tactical_insertion(); + continue; + } + + if ( !isalive( entity ) ) + continue; + + if ( isdefined( entity.targetname ) ) + { + if ( entity.targetname == "talon" ) + { + entity notify( "death" ); + continue; + } + else if ( entity.targetname == "rcbomb" ) + { + entity maps\mp\killstreaks\_rcbomb::rcbomb_force_explode(); + continue; + } + else if ( entity.targetname == "riotshield_mp" ) + { + entity dodamage( 1, triggers[triggertouched].origin + ( 0, 0, 1 ), triggers[triggertouched], triggers[triggertouched], 0, "MOD_CRUSH" ); + continue; + } + } + + if ( isdefined( entity.helitype ) && entity.helitype == "qrdrone" ) + { + watcher = entity.owner maps\mp\gametypes\_weaponobjects::getweaponobjectwatcher( "qrdrone" ); + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined ); + continue; + } + + if ( entity.classname == "grenade" ) + { + if ( !isdefined( entity.name ) ) + continue; + + if ( !isdefined( entity.owner ) ) + continue; + + if ( entity.name == "proximity_grenade_mp" ) + { + watcher = entity.owner getwatcherforweapon( entity.name ); + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined, "script_mover_mp" ); + continue; + } + + if ( !isweaponequipment( entity.name ) ) + continue; + + watcher = entity.owner getwatcherforweapon( entity.name ); + + if ( !isdefined( watcher ) ) + continue; + + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined, "script_mover_mp" ); + continue; + } + + if ( entity.classname == "auto_turret" ) + { + if ( !isdefined( entity.damagedtodeath ) || !entity.damagedtodeath ) + entity domaxdamage( triggers[triggertouched].origin + ( 0, 0, 1 ), triggers[triggertouched], triggers[triggertouched], 0, "MOD_CRUSH" ); + + continue; + } + + if ( isplayer( entity ) ) + entity dodamage( entity.health * 2, triggers[triggertouched].origin + ( 0, 0, 1 ), triggers[triggertouched], triggers[triggertouched], 0, "MOD_HIT_BY_OBJECT", 0, "hydro_water_mp" ); + else + entity dodamage( entity.health * 2, triggers[triggertouched].origin + ( 0, 0, 1 ), triggers[triggertouched], triggers[triggertouched], 0, "MOD_CRUSH" ); + + if ( isplayer( entity ) ) + entity playlocalsound( "mpl_splash_death" ); + } + + if ( level.gametype == "ctf" ) + { + foreach ( flag in level.flags ) + { + if ( flag.visuals[0] istouching( triggers[0] ) || flag.visuals[0] istouching( triggers[1] ) ) + flag maps\mp\gametypes\ctf::returnflag(); + } + + continue; + } + + if ( level.gametype == "sd" && !level.multibomb ) + { + if ( level.sdbomb.visuals[0] istouching( triggers[0] ) || level.sdbomb.visuals[0] istouching( triggers[1] ) ) + level.sdbomb maps\mp\gametypes\_gameobjects::returnhome(); + } + } +} + +getwatcherforweapon( weapname ) +{ + if ( !isdefined( self ) ) + return undefined; + + if ( !isplayer( self ) ) + return undefined; + + for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) + { + if ( self.weaponobjectwatcherarray[i].weapon != weapname ) + continue; + + return self.weaponobjectwatcherarray[i]; + } + + return undefined; +} + +removeobjectsondemovertime() +{ + if ( level.gametype == "dem" ) + { + if ( isdefined( game["overtime_round"] ) ) + { + objects = getentarray( "delete_dem_overtime", "script_noteworthy" ); + + if ( isdefined( objects ) ) + { + for ( i = 0; i < objects.size; i++ ) + objects[i] delete(); + } + } + } +} diff --git a/MP/Maps/Hydro/maps/mp/mp_hydro_amb.gsc b/MP/Maps/Hydro/maps/mp/mp_hydro_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Hydro/maps/mp/mp_hydro_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Hydro/maps/mp/mp_hydro_fx.gsc b/MP/Maps/Hydro/maps/mp/mp_hydro_fx.gsc new file mode 100644 index 0000000..69cd0df --- /dev/null +++ b/MP/Maps/Hydro/maps/mp/mp_hydro_fx.gsc @@ -0,0 +1,95 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_hydro_fx; + +main() +{ + precache_fxanim_props(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_hydro_fx::main(); +} + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_hydro_dam_water_bottom"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_bottom" ); + level._effect["fx_mp_hydro_dam_water_top"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_top" ); + level._effect["fx_mp_hydro_dam_water_top_side"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_top_side" ); + level._effect["fx_mp_hydro_dam_water_top_side_b"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_top_side_b" ); + level._effect["fx_mp_hydro_dam_water_top_b"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_top_b" ); + level._effect["fx_mp_hydro_dam_water_spray"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_spray" ); + level._effect["fx_mp_hydro_dam_water_drip_splash"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_drip_splash" ); + level._effect["fx_mp_hydro_dam_water_strip"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_strip" ); + level._effect["fx_mp_hydro_dam_water_strip2"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_strip2" ); + level._effect["fx_mp_hydro_dam_water_corner"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_corner" ); + level._effect["fx_mp_hydro_dam_water_corner2"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_corner2" ); + level._effect["fx_mp_hydro_dam_water_wall"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_wall" ); + level._effect["fx_mp_hydro_dam_river_top"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_river_top" ); + level._effect["fx_mp_hydro_dam_river_top_b"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_river_top_b" ); + level._effect["fx_mp_hydro_dam_river_flat"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_river_flat" ); + level._effect["fx_mp_hydro_dam_river_flat2"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_river_flat2" ); + level._effect["fx_mp_hydro_flood_blast01_spill"] = loadfx( "maps/mp_maps/fx_mp_hydro_flood_blast01_spill" ); + level._effect["fx_mp_hydro_flood_blast01"] = loadfx( "maps/mp_maps/fx_mp_hydro_flood_blast01" ); + level._effect["fx_mp_hydro_flood_blast02"] = loadfx( "maps/mp_maps/fx_mp_hydro_flood_blast02" ); + level._effect["fx_mp_hydro_flood_water_spill"] = loadfx( "maps/mp_maps/fx_mp_hydro_flood_water_spill" ); + level._effect["fx_mp_hydro_flood_mist_tail"] = loadfx( "maps/mp_maps/fx_mp_hydro_flood_mist_tail" ); + level._effect["fx_mp_hydro_flood_blast_end"] = loadfx( "maps/mp_maps/fx_mp_hydro_flood_blast_end" ); + level._effect["fx_mp_hydro_hatch_spray"] = loadfx( "maps/mp_maps/fx_mp_hydro_hatch_spray" ); + level._effect["fx_mp_hydro_splash_edge"] = loadfx( "maps/mp_maps/fx_mp_hydro_splash_edge" ); + level._effect["fx_mp_hydro_water_pipe"] = loadfx( "maps/mp_maps/fx_mp_hydro_water_pipe" ); + level._effect["fx_mp_hydro_dam_water_vista"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_vista" ); + level._effect["fx_mp_hydro_dam_water_top_vista"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_top_vista" ); + level._effect["fx_mp_hydro_dam_steam"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam" ); + level._effect["fx_mp_hydro_dam_steam2"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam2" ); + level._effect["fx_mp_hydro_dam_steam2_green"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam2_green" ); + level._effect["fx_mp_hydro_dam_steam3"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam3" ); + level._effect["fx_mp_hydro_dam_steam_big"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam_big" ); + level._effect["fx_mp_hydro_dam_steam_big2"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam_big2" ); + level._effect["fx_mp_hydro_dam_steam_xlrg"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam_xlrg" ); + level._effect["fx_mp_hydro_dam_steam_vista"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam_vista" ); + level._effect["fx_mp_vent_heat_distort"] = loadfx( "maps/mp_maps/fx_mp_vent_heat_distort" ); + level._effect["fx_fog_street_sm_area_low"] = loadfx( "fog/fx_fog_street_sm_area_low" ); + level._effect["fx_mp_hydro_hvac_steam"] = loadfx( "maps/mp_maps/fx_mp_hydro_hvac_steam" ); + level._effect["fx_mp_hydro_steam_behind_glass1"] = loadfx( "maps/mp_maps/fx_mp_hydro_steam_behind_glass1" ); + level._effect["fx_mp_hydro_steam_behind_glass2"] = loadfx( "maps/mp_maps/fx_mp_hydro_steam_behind_glass2" ); + level._effect["fx_mp_hydro_light_warning"] = loadfx( "maps/mp_maps/fx_mp_hydro_light_warning" ); + level._effect["fx_mp_hydro_light_warning_blnk"] = loadfx( "maps/mp_maps/fx_mp_hydro_light_warning_blnk" ); + level._effect["fx_mp_hydro_light_warning_sm"] = loadfx( "maps/mp_maps/fx_mp_hydro_light_warning_sm" ); + level._effect["fx_mp_hydro_light_warning_blnk_sm"] = loadfx( "maps/mp_maps/fx_mp_hydro_light_warning_blnk_sm" ); + level._effect["fx_drone_light_yellow"] = loadfx( "light/fx_drone_light_yellow" ); + level._effect["fx_drone_red_blink"] = loadfx( "light/fx_drone_red_blink" ); + level._effect["fx_mp_hydro_dam_tunnel_glare"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_tunnel_glare" ); + level._effect["fx_mp_hydro_dam_tunnel_glare_green"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_tunnel_glare_green" ); + level._effect["fx_mp_hydro_dam_tunnel_glare_green2"] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_tunnel_glare_green2" ); + level._effect["fx_light_god_ray_mp_hydro"] = loadfx( "env/light/fx_light_god_ray_mp_hydro" ); + level._effect["fx_light_god_ray_mp_hydro_sm"] = loadfx( "env/light/fx_light_god_ray_mp_hydro_sm" ); + level._effect["fx_village_tube_light"] = loadfx( "light/fx_village_tube_light" ); + level._effect["fx_hydro_tube_light"] = loadfx( "light/fx_hydro_tube_light" ); + level._effect["fx_mp_fan_light_shaft_anim"] = loadfx( "light/fx_mp_fan_light_shaft_anim" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_carrier_spark_bounce_runner"] = loadfx( "maps/mp_maps/fx_mp_carrier_spark_bounce_runner" ); + level._effect["fx_lf_mp_hydro_sun1"] = loadfx( "lens_flares/fx_lf_mp_hydro_sun1" ); + level._effect["fx_mp_hydro_killstreak_spillway_1"] = loadfx( "maps/mp_maps/fx_mp_hydro_killstreak_spillway_1" ); + level._effect["fx_mp_hydro_killstreak_spillway_2"] = loadfx( "maps/mp_maps/fx_mp_hydro_killstreak_spillway_2" ); + level._effect["fx_mp_hydro_killstreak_spillway_mid"] = loadfx( "maps/mp_maps/fx_mp_hydro_killstreak_spillway_mid" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["wirespark_med"] = %fxanim_gp_wirespark_med_anim; + level.scr_anim["fxanim_props"]["wires_long"] = %fxanim_mp_hydro_wires_long_anim; + level.scr_anim["fxanim_props"]["wires_med"] = %fxanim_mp_hydro_wires_med_anim; + level.scr_anim["fxanim_props"]["seagull_circle_01"] = %fxanim_gp_seagull_circle_01_anim; + level.scr_anim["fxanim_props"]["seagull_circle_02"] = %fxanim_gp_seagull_circle_02_anim; + level.scr_anim["fxanim_props"]["seagull_circle_03"] = %fxanim_gp_seagull_circle_03_anim; + level.scr_anim["fxanim_props"]["wires_med_02"] = %fxanim_mp_hydro_wires_med_02_anim; + level.scr_anim["fxanim_props"]["wires_long_02"] = %fxanim_mp_hydro_wires_long_02_anim; +} diff --git a/MP/Maps/Magma/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Magma/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Magma/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Magma/aitype/enemy_dog_mp.gsc b/MP/Maps/Magma/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Magma/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Magma/character/character_mp_german_shepherd.gsc b/MP/Maps/Magma/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Magma/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Magma/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Magma/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Magma/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Magma/clientscripts/mp/_fxanim_dlc.csc b/MP/Maps/Magma/clientscripts/mp/_fxanim_dlc.csc new file mode 100644 index 0000000..9d3d3be --- /dev/null +++ b/MP/Maps/Magma/clientscripts/mp/_fxanim_dlc.csc @@ -0,0 +1,239 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; + +fxanim_init_dlc( localclientnum ) +{ + a_fxanims = getentarray( localclientnum, "fxanim_dlc", "targetname" ); + assert( a_fxanims.size <= level.fxanim_max_anims ); + + for ( i = 0; i < a_fxanims.size; i++ ) + { + if ( isdefined( a_fxanims[i].fxanim_parent ) ) + { + parent = getent( localclientnum, a_fxanims[i].fxanim_parent, "targetname" ); + a_fxanims[a_fxanims.size] = parent; + a_fxanims[i] thread _fxanim_model_link( localclientnum ); + continue; + } + + a_fxanims[i] thread fxanim_think( localclientnum ); + } + + if ( isdefined( level.fx_anim_level_dlc_init ) ) + level thread [[ level.fx_anim_level_dlc_init ]]( localclientnum ); +} + +#using_animtree("fxanim_props_dlc"); + +fxanim_think( localclientnum, random_wait, random_speed ) +{ + self waittill_dobj( localclientnum ); + self thread _fxanim_hide(); + self _fxanim_wait(); + self useanimtree( #animtree ); + n_anim_count = self _fxanim_get_anim_count(); + self notify( "fxanim_start" ); + + for ( n_current_anim = 0; n_current_anim < n_anim_count; n_current_anim++ ) + { + str_scene = self _fxanim_get_scene_name( n_current_anim ); + + if ( !self _fxanim_modifier( str_scene ) ) + { + self _fxanim_animate( str_scene ); + self _fxanim_play_fx( localclientnum ); + } + + self _fxanim_change_anim( n_current_anim ); + } +} + +_fxanim_hide() +{ + if ( isdefined( self.fxanim_hide ) && self.fxanim_hide ) + { + self hide(); + + self waittill( "fxanim_start" ); + + self show(); + } +} + +_fxanim_modifier( str_scene ) +{ + switch ( str_scene ) + { + case "delete": + self delete(); + break; + case "hide": + self hide(); + break; + default: + return false; + break; + } + + return true; +} + +_fxanim_wait() +{ + if ( isdefined( self.fxanim_waittill_1 ) ) + { + if ( isdefined( self.fxanim_waittill_1 ) ) + _fxanim_change_anim( -1 ); + } + + if ( isdefined( self.fxanim_wait ) ) + wait( self.fxanim_wait ); + else if ( isdefined( self.fxanim_wait_min ) && isdefined( self.fxanim_wait_max ) ) + { + n_wait_time = randomfloatrange( self.fxanim_wait_min, self.fxanim_wait_max ); + wait( n_wait_time ); + } +} + +_fxanim_change_anim( n_fxanim_id ) +{ + str_waittill = undefined; + + if ( n_fxanim_id == -1 && isdefined( self.fxanim_waittill_1 ) ) + str_waittill = self.fxanim_waittill_1; + else if ( n_fxanim_id == 0 && isdefined( self.fxanim_waittill_2 ) ) + str_waittill = self.fxanim_waittill_2; + else if ( n_fxanim_id == 1 && isdefined( self.fxanim_waittill_3 ) ) + str_waittill = self.fxanim_waittill_3; + + if ( !isdefined( str_waittill ) && n_fxanim_id != -1 ) + self _fxanim_wait_for_anim_to_end( n_fxanim_id ); + else + { + a_changer = strtok( str_waittill, "_" ); + + level waittill( str_waittill ); + } +} + +_fxanim_wait_for_anim_to_end( n_fxanim_id ) +{ + str_scene = _fxanim_get_scene_name( n_fxanim_id ); + + if ( issubstr( str_scene, "_loop" ) ) + self waittillmatch( "looping anim", "end" ); + else + self waittillmatch( "single anim", "end" ); +} + +_fxanim_animate( str_scene ) +{ + if ( !isdefined( level.scr_anim["fxanim_props_dlc"][str_scene] ) ) + { +/# + if ( isdefined( str_scene ) ) + println( "Error: fxanim entity at " + self.origin + " is missing animation: " + str_scene ); + else + println( "Error: fxanim entity at " + self.origin + " is missing animation" ); +#/ + return; + } + + self animscripted( level.scr_anim["fxanim_props_dlc"][str_scene], 1.0, 0.0, 1.0 ); +} + +_fxanim_play_fx( localclientnum ) +{ + if ( isdefined( self.fxanim_fx_1 ) ) + { + assert( isdefined( self.fxanim_fx_1_tag ), "KVP fxanim_fx_1_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_1 ), self, self.fxanim_fx_1_tag ); + } + + if ( isdefined( self.fxanim_fx_2 ) ) + { + assert( isdefined( self.fxanim_fx_2_tag ), "KVP fxanim_fx_2_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_2 ), self, self.fxanim_fx_2_tag ); + } + + if ( isdefined( self.fxanim_fx_3 ) ) + { + assert( isdefined( self.fxanim_fx_3_tag ), "KVP fxanim_fx_3_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_3 ), self, self.fxanim_fx_3_tag ); + } + + if ( isdefined( self.fxanim_fx_4 ) ) + { + assert( isdefined( self.fxanim_fx_4_tag ), "KVP fxanim_fx_4_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_4 ), self, self.fxanim_fx_4_tag ); + } + + if ( isdefined( self.fxanim_fx_5 ) ) + { + assert( isdefined( self.fxanim_fx_5_tag ), "KVP fxanim_fx_5_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_5 ), self, self.fxanim_fx_5_tag ); + } +} + +_fxanim_get_anim_count() +{ + assert( isdefined( self.fxanim_scene_1 ), "fxanim at position " + self.origin + " needs at least one scene defined. Use the KVP fxanim_scene_1" ); + n_fx_count = 0; + + if ( !isdefined( self.fxanim_scene_2 ) ) + n_fx_count = 1; + else if ( !isdefined( self.fxanim_scene_3 ) ) + n_fx_count = 2; + else + n_fx_count = 3; + + return n_fx_count; +} + +_fxanim_get_scene_name( n_anim_id ) +{ + str_scene_name = undefined; + + switch ( n_anim_id ) + { + case 0: + str_scene_name = self.fxanim_scene_1; + break; + case 1: + str_scene_name = self.fxanim_scene_2; + break; + case 2: + str_scene_name = self.fxanim_scene_3; + break; + } + + return str_scene_name; +} + +_fxanim_model_link( localclientnum ) +{ + self waittill_dobj( localclientnum ); + assert( isdefined( self.fxanim_tag ), "Model at origin " + self.origin + " needs an fxanim_tag defined, to show which tag the model will link to" ); + m_parent = getent( localclientnum, self.fxanim_parent, "targetname" ); + assert( isdefined( m_parent ), "Model at origin " + self.origin + " does not have a proper parent. Make sure the fxanim_parent matches the targetname of the fxanim" ); + m_parent waittill_dobj( localclientnum ); + self.origin = m_parent gettagorigin( self.fxanim_tag ); + self.angles = m_parent gettagangles( self.fxanim_tag ); + self linkto( m_parent, self.fxanim_tag ); + + if ( isdefined( self.fxanim_hide ) ) + { + self hide(); + + m_parent waittill( "fxanim_start" ); + + self show(); + } +} + +getfx( fx ) +{ + assert( isdefined( level._effect[fx] ), "Fx " + fx + " is not defined in level._effect." ); + return level._effect[fx]; +} diff --git a/MP/Maps/Magma/clientscripts/mp/createfx/mp_magma_fx.csc b/MP/Maps/Magma/clientscripts/mp/createfx/mp_magma_fx.csc new file mode 100644 index 0000000..65bd421 --- /dev/null +++ b/MP/Maps/Magma/clientscripts/mp/createfx/mp_magma_fx.csc @@ -0,0 +1,2517 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_lava_edge_fire_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -83.2882, 801.451, -390.872 ); + ent.v["angles"] = ( 355.135, 89.1011, -1.34582 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_ember_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1624.42, 650.628, -633 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_ember_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 794.536, 500.637, -504 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_ember_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3028.16, -806.528, -883 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_ember_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 726.22, -1443.45, -712.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_ember_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1583.59, -1650.88, -941.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_ember_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3811.31, -873.052, -540 ); + ent.v["angles"] = ( 270, 0, -1 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_volcano_smoke" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -64.2282, 11164.4, 3188.97 ); + ent.v["angles"] = ( 345.054, 80.2724, -13.97 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1177.98, 246.814, -478.065 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1268.26, 461.678, -475.091 ); + ent.v["angles"] = ( 5.52931, 258.943, 0.782471 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1070.16, 323.492, -471.174 ); + ent.v["angles"] = ( 358.924, 266.03, -0.674775 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1183.29, 174.587, -476.72 ); + ent.v["angles"] = ( 0.963578, 269.97, -0.47042 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1261.58, -204.029, -494.919 ); + ent.v["angles"] = ( 1.67731, 222.964, -2.4882 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1367.47, 131.479, -491.021 ); + ent.v["angles"] = ( 1.09957, 217.947, 0.516985 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -946.519, 615.787, -437.115 ); + ent.v["angles"] = ( 2.11217, 230.398, 0.997092 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -632.791, 719.894, -407.448 ); + ent.v["angles"] = ( 357.999, 246, 0 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -305.517, 708.333, -395.259 ); + ent.v["angles"] = ( 0.998781, 246, 0 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 149.535, 851.394, -397.767 ); + ent.v["angles"] = ( 3.73616, 276.049, 1.32327 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -43.1799, 647.125, -396.629 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 285.0 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -395.437, 881.646, -393.302 ); + ent.v["angles"] = ( 0.531561, 252, 1.05351 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -809.093, -193.678, -497.643 ); + ent.v["angles"] = ( 6, 300, 0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -992.403, -160.495, -491.895 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 293.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1119.76, -307.973, -494.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 228.0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1132.08, 576.886, -462.039 ); + ent.v["angles"] = ( 356.001, 255.993, 0.104973 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -625.015, 931.451, -403.941 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 261.0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2363.13, -738.011, -420.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 282.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1626.32, -650.634, -288.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 264.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1565.7, -582.743, -378 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 249.0 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1658.71, -1257.92, -484.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1093.95, 113.141, -312.424 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 243.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1639.78, -1292.24, -512 ); + ent.v["angles"] = ( 360, 273, 0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2153.26, -1154.39, -419.875 ); + ent.v["angles"] = ( 1, 282, 0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2580.15, 141.23, -229.024 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 242.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3184.77, -260.96, -407 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_magma_volcano" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -390.698, 8310.66, 4936.46 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_magma_sun1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -209748, -508218, 366879 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ball_falling_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 13558, -2187.5, -394.559 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ball_falling_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -7783.27, 2626.57, -566.854 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ball_falling_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -10250.3, -1290.51, -504 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ball_falling_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -987.249, -8351.25, -844.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ball_falling_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 10978.2, -5330.36, -258.87 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ball_falling_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4576.06, -6048.44, -563.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ball_falling_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2686.84, -8054.87, -768.875 ); + ent.v["angles"] = ( 357, 259, 0 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_lava_edge_fire_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -62.089, -664.62, -655.806 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 229.0 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_ember_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -351.415, -3439.8, -702 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_fire_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1939.01, -473.465, -178.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_fire_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1821.72, -136.48, -204.202 ); + ent.v["angles"] = ( 357, 266, 0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1688.22, -812.028, -504 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 259.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2547.99, -1269.55, -591.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 280.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -670.492, -354.903, -504 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 248.0 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_lava_edge_fire_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -181.153, -720.634, -658.928 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 47.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 273.998, -557.349, -594.992 ); + ent.v["angles"] = ( 12.3588, 179.608, -2.79387 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -12.912, -242.671, -551.814 ); + ent.v["angles"] = ( 5.0234, 283.797, 0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_steam_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4202.01, 5170.7, 1513.43 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 250.0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_plume_md_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -6642.86, -2056.78, -473.243 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 263.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_steam_ocean_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 525.434, -5248.86, -819.334 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 312.0 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_steam_ocean" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 159.289, -5492.31, -805.08 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 279.0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_steam_ocean_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1291.38, -5625.02, -789.521 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1135.62, -2128.65, -477.875 ); + ent.v["angles"] = ( 359, 265, 0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -28.9387, -1858.45, -427.343 ); + ent.v["angles"] = ( 357.037, 286.012, -0.469781 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 776.174, -2172, -487.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2088.64, -2022.94, -426.047 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 26.5999, -540.173, -430.123 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 241.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 391.497, -853.697, -396 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 229.0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -628.151, -1911.96, -413.607 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1584.71, -1000.62, -575.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 275.0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2033.05, -685.937, -599.795 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1546.91, -1487.96, -676 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 274.0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2378.62, -934.667, -599.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 265.0 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1553.74, -738.518, -574.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1308.66, -104.126, -451.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -277.486, -255.843, -504 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 247.0 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1594.97, -546.112, -496 ); + ent.v["angles"] = ( 360, 266, 0 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 623.76, -743.645, -511.411 ); + ent.v["angles"] = ( 1.98053, 274.722, -8.00481 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1857.15, 331.99, -444 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 261.0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2001.86, -26.1502, -466.258 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 275.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2062.57, -255.085, -527.429 ); + ent.v["angles"] = ( 13, 272, 0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1725.7, -581.344, -420.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2507.12, -615.797, -278.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 275.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -204.667, -557.553, -636.955 ); + ent.v["angles"] = ( 356.819, 225.857, -0.323835 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 77.4551, -792.528, -639.13 ); + ent.v["angles"] = ( 0.687726, 237.302, -0.492771 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1519.82, -343.38, -491.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -903.84, -125.267, -494.215 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 338.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 343.479, -1508.19, -499.054 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 281.95, -1507.91, -499.374 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1414.51, -1510.23, -550.417 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1092.46, 469.538, -467.213 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1260.08, 378.752, -483.674 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 261.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1007.73, -134.546, -490.136 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 276.0 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1050.3, 146.914, -471.723 ); + ent.v["angles"] = ( 0.998172, 275, 0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1209.85, -0.161606, -484.718 ); + ent.v["angles"] = ( 0.857287, 258, 0.515153 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1419.29, -300.263, -496 ); + ent.v["angles"] = ( 1, 227, 0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -471.282, 888.208, -396.619 ); + ent.v["angles"] = ( 0.933716, 248, 0.358453 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -35.7145, 603.847, -403.149 ); + ent.v["angles"] = ( 6.55863, 283.087, 0.834612 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 405.413, 765.877, -419.005 ); + ent.v["angles"] = ( 3.43238, 289.035, -2.58516 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -786.345, -221.253, -502.128 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 300.0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -980.752, -454.861, -501.896 ); + ent.v["angles"] = ( 2, 251, 0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -953.482, -1514.72, -373.712 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -847.265, -1514.75, -373.706 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1058.33, -1514.61, -373.724 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -846.64, -1148.29, -373.724 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -952.722, -1148.18, -373.682 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1057.5, -1148.36, -373.732 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_steam_fish" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1342.09, -1547.44, -549.146 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_steam_fish" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1403.08, -1534.48, -547.041 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_steam_fish" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -953.1, -1079.6, -527.057 ); + ent.v["angles"] = ( 271, 89.9971, -89.999 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_steam_fish" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1299.76, -1247.39, -518.76 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_steam_fish" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1048.79, -1692.2, -541.098 ); + ent.v["angles"] = ( 279.055, 186.288, 173.633 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_volcano_erupt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -868.665, 8556.45, 4538.65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_steam_vent_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -851.028, -1374.21, -383.83 ); + ent.v["angles"] = ( 359, 180, 0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_steam_vent_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -850.177, -1477.52, -384.553 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_steam_vent_w" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1480.06, -1162.62, -320.721 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_steam_vent_w" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1483.24, -1493.63, -321.415 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_steam_fish" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1175.61, -1248.18, -521.413 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_steam_fish" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1218.31, -1580.35, -517.999 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1426.91, -1508.83, -550.157 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1198.69, -1514.56, -373.704 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1290.11, -1514.33, -373.626 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1381.75, -1514.6, -373.723 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1399.58, -1148.34, -373.743 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1294.8, -1148.04, -373.638 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1188.54, -1148.01, -373.624 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2687.11, -1956.9, -722.342 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2312.42, -2096.91, -653.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1147.76, 1135.48, -432.177 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1487.59, 1549.79, -342.033 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1782.25, 2418.36, -146.873 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3515.57, -1678.29, -675.173 ); + ent.v["angles"] = ( 12, 260, 0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3446.62, -964.906, -599.976 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3148.46, 235.601, -511.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1920.87, 3045.36, -17.8145 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 926.445, 560.822, -457.741 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 827.565, 627.967, -457.907 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -449.789, -1315.25, -762.553 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -129.784, -1443.23, -758.525 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -322.36, -1780.13, -752.254 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -306.81, -1021.26, -696.554 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 293.0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -252.656, -1334.15, -705.429 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 308.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -42.532, -2876.59, -837.704 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 275.0 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 43.1153, -4787.95, -859.222 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -393.676, -4750.93, -854.995 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -106.799, -645.335, -693 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3326.45, -1222.39, -581.004 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 262.0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2391.88, 344.043, -426.474 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 262.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 999.657, 1930.6, 216.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 225.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -175.467, -4017.95, -875.632 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 138.366, -3492.77, -853.797 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -155.186, -3308.28, -872.807 ); + ent.v["angles"] = ( 6, 260, 0 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1365.06, -2685.88, -736.577 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1677.66, -1903.5, -647.844 ); + ent.v["angles"] = ( 0, 328, -6 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1535.94, -2011.76, -646.706 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 328.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -10.5987, -1050.49, -659.177 ); + ent.v["angles"] = ( 359.087, 252, -0.406351 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_lava_edge_fire_200_dist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 626.782, 1313.29, 894.745 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 237.0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_lava_edge_fire_200_dist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 571.012, 1321.98, 545.487 ); + ent.v["angles"] = ( 0, 237, -2 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_lava_edge_fire_200_dist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 549.976, 1449.53, 546.313 ); + ent.v["angles"] = ( 357, 150, 0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3263.7, 1269.66, -277.084 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3296.05, -714.717, -564.755 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3595.73, -1488.77, -622.813 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3383.08, -1119.2, -585.563 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 262.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 6168.84, -1809.36, -458.875 ); + ent.v["angles"] = ( 27.9944, 284.524, 3.50026 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 174.299, -225.389, -363.043 ); + ent.v["angles"] = ( 72.745, 213.838, -0.713803 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 253.496, -340.313, -478.058 ); + ent.v["angles"] = ( 78.9029, 152.106, -83.7438 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2267.31, -1739.81, -630.602 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2191.13, -1706.69, -658.053 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2627.24, 1863.67, -9.01601 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 263.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4041.85, -1560.45, -436.756 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 262.0 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5229.01, 1477.58, -218.491 ); + ent.v["angles"] = ( 35, 263, 0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_fire_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -158.465, 1237.44, -94.6902 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_fire_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 688.029, 1464.79, 889.097 ); + ent.v["angles"] = ( 359.912, 216.018, -0.725346 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_fire_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1897.73, 1574.44, -89.4524 ); + ent.v["angles"] = ( 354.003, 242.756, -0.31543 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_fire_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1541.36, 883.749, -33.2916 ); + ent.v["angles"] = ( 2.81935, 250.025, 1.02705 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_fire_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -398.79, -1465.43, -674.205 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 264.0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_fire_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2112.83, -1663.76, -596.385 ); + ent.v["angles"] = ( 7.98038, 287.039, 0.56169 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 437.567, -1873.38, -446.514 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1399.43, 428.828, -373.067 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_steam_fish" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -924.608, -1232.27, -517.035 ); + ent.v["angles"] = ( 271, 89.9971, -89.999 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 29.2199, -699.909, -504 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 254.0 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_fire_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 364.608, -397.04, -256.014 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 236.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_fire_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 361.931, -435.377, -370.525 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 228.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -5.65167, -219.994, -221.041 ); + ent.v["angles"] = ( 16, 210, 0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_lava_edge_fire_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -450.82, -945.502, -636.147 ); + ent.v["angles"] = ( 0, 347, 3 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -460.414, -989.039, -642.695 ); + ent.v["angles"] = ( 359.083, 300.945, 5.02909 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -43.1443, -1459.02, -663.314 ); + ent.v["angles"] = ( 359.016, 269.936, 8.93483 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -659.126, -1260.07, -647.64 ); + ent.v["angles"] = ( 353.092, 300.679, 1.04314 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -248.148, -1696.78, -443.463 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3394.17, -1700.07, -531.374 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1309.99, -1273.78, -276.978 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -580.558, -693.833, -157.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_lava_edge_fire_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -205.887, -1918.17, -686.439 ); + ent.v["angles"] = ( 0, 89, -6 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_lava_edge_fire_200_dist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -219.594, -1945.69, -691.204 ); + ent.v["angles"] = ( 1.04473, 92.0848, -1.31476 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -596.288, -585.213, -434.562 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -867.403, -700.257, -440.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 482.401, -1244.46, -536.737 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 785.046, -1242.65, -534.764 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 452.625, -2031.86, -517.281 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1360.91, -1423.83, -597.115 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 248.368, -2015.94, -532.536 ); + ent.v["angles"] = ( 13, 180, 0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -702.31, -2017.12, -521.112 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 17.0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2105.33, -484.65, -442.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 51.0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -212.972, 408.505, -336.698 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -482.482, 357.575, -421.684 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -929.882, 23.623, -448.253 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2509.77, -566.31, -445.87 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2793.82, -584.125, -395.603 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -180.49, -488.8, -592.712 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 308.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 299.403, -1503.08, -613.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 351.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1435.36, -1489.24, -666.045 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 188.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -938.523, -1799.56, -556.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 76.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1463.44, -1397.77, -550 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 326.0 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2116.42, -554.917, -476.346 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 57.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1733.76, -279.229, -487.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 203.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -947.251, 55.4396, -495.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 347.0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -84.0107, 416.238, -384 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 233.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -923.006, -632.686, -487.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 305.0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -457.397, -648.445, -461.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 211.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 597.301, -665.134, -504.611 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 128.0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_steam_ocean_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -258.094, -5693.38, -875.866 ); + ent.v["angles"] = ( 21, 274, 0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_volcano_smoke" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -571.159, 12446.6, 4332.14 ); + ent.v["angles"] = ( 355.189, 104.113, -5.96228 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_volcano_smoke" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1754.37, 13869, 4442.37 ); + ent.v["angles"] = ( 338.547, 67.1298, -33.7248 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4397.92, 5104.39, 1097.25 ); + ent.v["angles"] = ( 9.00167, 330.549, 7.43622 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 72.9087, -1135.59, -660.497 ); + ent.v["angles"] = ( 359.134, 258, -0.499562 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 166.821, -1410.68, -654.333 ); + ent.v["angles"] = ( 0, 192, 2 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 133.139, -1581.91, -648.414 ); + ent.v["angles"] = ( 356, 91, -2 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_lava_edge_fire_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -510.942, -1198.11, -648.953 ); + ent.v["angles"] = ( 356.329, 326.27, -3.27294 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -681.728, -1603.48, -675.759 ); + ent.v["angles"] = ( 357.046, 325.014, -0.521401 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 173.991, -353.474, -615.482 ); + ent.v["angles"] = ( 354, 223, 0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_fire_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2336, -2533.12, -760.701 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_fire_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5942.61, -1775.52, -498.482 ); + ent.v["angles"] = ( 3, 277, 0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2591.95, -1802.4, -678.335 ); + ent.v["angles"] = ( 358.592, 241.033, -2.64979 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2879.19, -2074.01, -725.926 ); + ent.v["angles"] = ( 358.592, 241.033, -2.64979 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3075.23, -1850.81, -639.241 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 202.751, -3035.47, -878.827 ); + ent.v["angles"] = ( 9, 260, 0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 574.858, -3119.23, -832.56 ); + ent.v["angles"] = ( 6, 260, 0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 845.539, -2959.6, -813.282 ); + ent.v["angles"] = ( 6, 260, 0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1675.37, -2592.73, -723.145 ); + ent.v["angles"] = ( 17.1843, 316.436, 22.4512 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 364.907, -4164.38, -862.932 ); + ent.v["angles"] = ( 2, 260, 0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3537.3, -656.398, -279.864 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_fire_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -342.087, 1789.12, 116.807 ); + ent.v["angles"] = ( 0.286742, 246.016, -0.671972 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -729.705, -1652.52, -354.82 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -729.195, -1555.99, -353.662 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -730.135, -1464.69, -354.388 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1206.89, -916.401, -5.66857 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1303.35, -916.76, -5.94865 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1396.74, -916.347, -5.62549 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1108.07, -2000.75, -443.228 ); + ent.v["angles"] = ( 28.1384, 331.016, -7.40568 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -273.184, -1949.66, -520.737 ); + ent.v["angles"] = ( 26.8109, 38.3048, 15.2998 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -252.017, -1951.97, -513.047 ); + ent.v["angles"] = ( 14.8323, 126.468, 20.475 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3144.49, -589.201, -493.532 ); + ent.v["angles"] = ( 1, 260, 0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3251.34, -738.626, -494.296 ); + ent.v["angles"] = ( 356.335, 258.947, 1.53826 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3206.21, -422.99, -494.564 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3145.22, -383.906, -504 ); + ent.v["angles"] = ( 355.034, 277.982, 0.259813 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2481.1, 144.246, -445 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 262.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -534.773, 5.85307, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -610.545, 6.14791, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -694.125, 6.34257, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -441.788, 6.29503, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -357.362, 6.27576, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -273.452, 6.07206, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -188.502, 6.43592, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -188.879, 200.677, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -273.718, 201.307, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -357.628, 201.51, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -527.008, 201.54, -276.707 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -610.811, 201.383, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -189.335, 95.1667, -260.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -358.306, 94.0127, -260.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -526.459, 94.3918, -259.722 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -611.488, 93.8849, -260.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -611.721, 293.946, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -525.581, 294.389, -259.699 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -273.933, 293.785, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -79.6575, 173.643, -260.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -79.6937, 299.404, -260.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -282.377, 144.229, -277.898 ); + ent.v["angles"] = ( 24.7885, 318.138, -3.92266 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -282.139, 144.141, -277.383 ); + ent.v["angles"] = ( 24.7885, 318.138, -3.92266 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -654.165, 143.714, -277.077 ); + ent.v["angles"] = ( 22.9457, 238.342, 1.55561 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -654.54, 142.937, -277.349 ); + ent.v["angles"] = ( 22.9457, 238.342, 1.55561 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -271.192, 385.044, -257.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -271.352, 451.177, -257.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -317.419, 412.098, -257.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -205.112, 385.016, -257.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -204.935, 450.245, -257.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -748.667, 354.28, -392.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -531.184, 447.733, -392.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -386.144, 446.41, -392.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -256.798, 445.252, -392 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -798.462, 62.0562, -361.253 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -795.685, -19.4361, -362.244 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2081.25, -431.153, -361.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2055.35, -335.396, -362.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1949.85, -427.721, -361.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_steam_ocean_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 728.408, -4974.25, -808.065 ); + ent.v["angles"] = ( 354, 315, 0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_steam_ocean" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -707.647, -5568.82, -825 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 258.0 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1887.96, -273.873, -361.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_fire_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 526.073, 1376, 559.353 ); + ent.v["angles"] = ( 8.80175, 210.855, -1.88606 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_steam_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4567.99, 5553.14, 1111.64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 229.0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_vista_lt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1785.37, 6369.42, 2052.35 ); + ent.v["angles"] = ( 324, 254, 0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ball_falling_sky_wall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 472.658, -1126.88, -448.771 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -932.462, -2184.43, -563.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 262.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1446.43, -2531.72, -563.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ball_falling_sky_wall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -251.884, 488.125, -329.798 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1518.29, -1884.86, -457.249 ); + ent.v["angles"] = ( 3, 238, 0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ball_falling_sky_wall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1730.92, 0.125, -418.379 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2039.06, -766.883, -600 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 280.0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1334.07, 331.11, -352.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1334.56, 429.438, -352.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1334.27, 553.43, -352.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2490.79, -944.664, -353.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2546.12, -944.788, -353.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2545.8, -826.642, -351.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2490.89, -826.293, -351.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2491.02, -718.156, -351.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2545.91, -718.14, -351.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2546.13, -615.941, -351.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2491.2, -615.749, -351.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1258.03, 3913.21, -878.606 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 172.0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1955.7, 5060.76, 365.438 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 183.0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_volcano_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -120.551, 8473.12, 3730.76 ); + ent.v["angles"] = ( 355.214, 204.962, -14.7418 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2351.81, -600.506, -457.635 ); + ent.v["angles"] = ( 2.73081, 248.942, -0.785321 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2513.14, -449.068, -422.431 ); + ent.v["angles"] = ( 3.73071, 248.928, -0.786096 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2934.64, -726.397, -446.517 ); + ent.v["angles"] = ( 0.583671, 238.969, -0.899506 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2736.95, -868.426, -577.448 ); + ent.v["angles"] = ( 354.732, 249.051, -0.787759 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2205.11, -1884.75, -623.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3291.92, -1846.96, -636.368 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -69.4731, -138.357, -509.714 ); + ent.v["angles"] = ( 9.01093, 286.835, 0.476183 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 425.82, -500.836, -531.924 ); + ent.v["angles"] = ( 9.36229, 179.756, -2.76595 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -550.928, -1080.29, -617.327 ); + ent.v["angles"] = ( 356, 294, 0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -665.057, -1483.38, -634.255 ); + ent.v["angles"] = ( 356, 294, 0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3113.2, -990.711, -569.239 ); + ent.v["angles"] = ( 354.78, 252.064, -1.06315 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3161.25, -1228.02, -567.583 ); + ent.v["angles"] = ( 354.78, 252.064, -1.06315 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3166.2, -1395.26, -569.021 ); + ent.v["angles"] = ( 354.78, 252.064, -1.06315 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2097.81, 346.452, -423.884 ); + ent.v["angles"] = ( 355.78, 252.045, -1.06162 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2178.41, 181.666, -430.018 ); + ent.v["angles"] = ( 357.697, 246.012, -0.508411 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 237.999, 771.534, -409.114 ); + ent.v["angles"] = ( 3.60661, 281.058, 1.64419 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 478.09, 504.762, -441.122 ); + ent.v["angles"] = ( 359.728, 303.081, -0.124006 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 498.995, 719.129, -434.701 ); + ent.v["angles"] = ( 356.759, 309.097, -0.465887 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 905.025, -1264.46, -411.117 ); + ent.v["angles"] = ( 82, 180, -180 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 904.85, -1509.59, -409.088 ); + ent.v["angles"] = ( 82, 180, -180 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1083.83, -1504.63, -438.737 ); + ent.v["angles"] = ( 82, 180, -180 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1195.38, -1504.59, -455.66 ); + ent.v["angles"] = ( 82, 180, -180 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1296.01, -1504.89, -470.762 ); + ent.v["angles"] = ( 82, 180, -180 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1084.29, -1263.8, -438.95 ); + ent.v["angles"] = ( 82, 180, -180 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1195.52, -1263.72, -454.831 ); + ent.v["angles"] = ( 82, 180, -180 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1294.99, -1263.09, -470.744 ); + ent.v["angles"] = ( 82, 180, -180 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1487.49, -1377.48, -452.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1487.46, -1440.59, -452.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1487.76, -1533.32, -452.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1487.87, -1595.44, -452.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 529.268, -1663.98, -585.048 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 528.894, -1676.88, -577.257 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 529.006, -1688.88, -569.112 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 529.188, -1652.88, -593.181 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 529.16, -1640.88, -600.997 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 529.207, -1628.88, -609.278 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 434.935, -1628.88, -609.085 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 435.047, -1640.88, -601.011 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 434.869, -1652.88, -592.904 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 434.984, -1664.88, -584.941 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 435.076, -1676.88, -576.957 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 434.987, -1688.88, -568.943 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 348.866, -1628.88, -609.156 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 349.208, -1640.88, -601.103 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 349.155, -1652.88, -593.057 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 348.661, -1664.88, -585.058 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 348.646, -1676.88, -576.924 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 348.72, -1688.88, -568.961 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 548.175, -1872.13, -555.215 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 632.829, -1920.13, -555.364 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 353.181, -1872.13, -555.167 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 303.633, -1872.13, -555.23 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_light_bench_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 680.953, -1421.09, -514.469 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1001.22, -823.12, -556.84 ); + ent.v["angles"] = ( 0, 275, -8 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 734.981, -908.96, -527.261 ); + ent.v["angles"] = ( 0, 275, -8 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2179.69, -719.383, -504 ); + ent.v["angles"] = ( 359.166, 269.058, -7.95673 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -945.669, -628.929, -380.753 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -904.886, -588.938, -381.753 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -121.796, 451.579, -281 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -84.3061, 413.031, -282.088 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1418.67, -1390.51, -473.856 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1002.64, -1762.93, -496.312 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 495.858, 675.658, -336 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 306.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1067.58, 272.011, -357 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 159.0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 477.989, -1822.9, -450.625 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 393.218, -1822.99, -450.625 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1159.47, -1923.26, -329.518 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2996.84, -1559.9, -510.442 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_purple" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1917.22, -204.805, -360.124 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2311.48, -1492.13, -452.745 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2311.03, -1429.41, -452.747 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2311.53, -1337.37, -452.748 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2311.16, -1275.3, -452.751 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_purple" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2189.63, -387.395, -379.254 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_purple" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2189.16, -274.331, -380.219 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_purple" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1832.25, -453.288, -364.201 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 868.928, -1658.59, -505.217 ); + ent.v["angles"] = ( 36, 133, 0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 902.351, -1625.04, -505.082 ); + ent.v["angles"] = ( 36, 133, 0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 936.622, -1590.8, -505.116 ); + ent.v["angles"] = ( 36, 133, 0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 921.014, -1575.25, -493.5 ); + ent.v["angles"] = ( 87, 133, 0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 887.005, -1609.09, -493.5 ); + ent.v["angles"] = ( 87, 133, 0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 852.448, -1643.12, -493.5 ); + ent.v["angles"] = ( 87, 133, 0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 652.664, -1247.04, -505.338 ); + ent.v["angles"] = ( 37.9817, 269.473, 1.07224 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 716.919, -1246.88, -505.172 ); + ent.v["angles"] = ( 37.9817, 269.473, 1.07224 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 781.075, -1246.9, -505.143 ); + ent.v["angles"] = ( 37.9817, 269.473, 1.07224 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 653.205, -1269.27, -493.5 ); + ent.v["angles"] = ( 88.6805, 308.641, 39.8353 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 717.018, -1269.17, -493.5 ); + ent.v["angles"] = ( 88.6805, 308.641, 39.8353 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 780.881, -1268.91, -493.5 ); + ent.v["angles"] = ( 88.6805, 308.641, 39.8353 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 797.308, 140.714, -277.709 ); + ent.v["angles"] = ( 25.1892, 54.8851, 91.622 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 399.345, 419.386, -277.668 ); + ent.v["angles"] = ( 25.1892, 54.8851, 91.622 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 691.604, 710.022, -277.341 ); + ent.v["angles"] = ( 24, 235, 90 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1091.06, 430.268, -277.604 ); + ent.v["angles"] = ( 24, 235, 90 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 636.547, 231.149, -332.02 ); + ent.v["angles"] = ( 359.975, 55.1034, 91.425 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1401, -1323.83, -373.677 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1295.36, -1323.34, -373.58 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1190.94, -1323.39, -373.658 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1059.58, -1323.44, -373.678 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -953.73, -1323.76, -373.666 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -848.474, -1324.44, -373.66 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 619.348, -1938.51, -457.498 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 339.88, -1891.01, -433.067 ); + ent.v["angles"] = ( 89, 270.001, -89.9989 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 686.176, -1938.96, -457.078 ); + ent.v["angles"] = ( 89, 270.001, -89.9989 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 549.157, -1891.1, -433.069 ); + ent.v["angles"] = ( 89, 270.001, -89.9989 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2261.22, -1066.16, -194.278 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2262.34, -1323.3, -192.139 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2260.8, -1577.67, -191.197 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1580.34, -222.843, -296.217 ); + ent.v["angles"] = ( 283, 180, 180 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2581.38, -487.787, -392.977 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 290.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_steam_vent_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2832.3, -1609.96, -382.623 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 82.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1218.17, -1092.32, -503.622 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_vending_machine_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1262.69, -1092.69, -519.761 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -255.66, -101.332, -432.744 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_vending_machine_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -300.179, -100.961, -448.882 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -158.842, -2216.4, -501.74 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_vending_machine_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -113.201, -2218.63, -515.77 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -317.577, -2215.4, -500.872 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1026.43, -1570.98, -605.728 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 46.0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_vending_machine_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1175.3, -1111.01, -535.555 ); + ent.v["angles"] = ( 0.1, 179.7, 0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_vending_machine_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2570.42, -1548.69, -545.563 ); + ent.v["angles"] = ( 359.997, 87.6996, 0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2643.47, -1548.45, -529.867 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_toilet_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 893.05, -1461.17, -462.625 ); + ent.v["angles"] = vectorscale( ( 0, 0, 1 ), 90.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_toilet_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 888.609, -1460.96, -461.897 ); + ent.v["angles"] = ( 1.03627, 180.016, -90.9988 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1699.18, -18.1179, -355.246 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1721.15, -77.528, -352.249 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1930.53, -572.014, -367.493 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1871.13, -593.979, -370.49 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1074.34, -1232.78, -532.755 ); + ent.v["angles"] = ( 3, 270, 0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1129.64, -1231.78, -538.404 ); + ent.v["angles"] = ( 4, 270, 0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1191.3, -1234.61, -533.125 ); + ent.v["angles"] = ( 4, 270, 0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1129.79, -1228.98, -534.188 ); + ent.v["angles"] = ( 4, 270, 0 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2544.58, -898.699, -282.916 ); + ent.v["angles"] = ( 21.1594, 183.554, -33.5578 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2136.45, -627.396, -397.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1444.39, -78.3522, -384.191 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_vending_machine_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1444.7, -159.235, -402.968 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 182.0 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2342.2, -738.922, -496.764 ); + ent.v["angles"] = ( 3, 270, 0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2349.33, -711.544, -492.772 ); + ent.v["angles"] = ( 3, 270, 0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1609.01, 422.195, -346.768 ); + ent.v["angles"] = ( 3, 270, 0 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1601.88, 394.817, -350.759 ); + ent.v["angles"] = ( 3, 270, 0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1270.66, -1570.35, -502.582 ); + ent.v["angles"] = ( 270, 0, 179 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1230.86, -1570.82, -502.616 ); + ent.v["angles"] = ( 270, 0, 179 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1190.87, -1571.22, -502.616 ); + ent.v["angles"] = ( 270, 0, 179 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1151.05, -1571.77, -502.532 ); + ent.v["angles"] = ( 270, 0, 179 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1110.99, -1570.03, -502.574 ); + ent.v["angles"] = ( 270, 0, 179 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 377.908, -3726.57, -855.875 ); + ent.v["angles"] = ( 6, 260, 0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 698.904, -1126.88, -421.133 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 734.628, -1126.88, -451.54 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 792.364, -1067.78, -525.52 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 276.0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 785.801, -1092.59, -524.76 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 276.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 170.519, -847.689, -504 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 155.006, -870.964, -504 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -383.779, -328.064, -504 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -254.699, -534.128, -496 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -276.346, -552.186, -496 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2481.91, -760.599, -530.059 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2113.51, -729.266, -600 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2181.1, -1466.16, -591.875 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2159.9, -1486.1, -591.875 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2863.36, -1345.01, -591.875 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2457.01, -903.995, -592 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2023.99, -1015.43, -592 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2022.57, -985.488, -592 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -231.986, -261.663, -504 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 116.416, 603.494, -416.801 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 96.4017, 584.729, -417.975 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2244.72, -981.41, -496 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -561.645, -2287.94, -563.875 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 432.644, -2222.81, -563.875 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1027.61, -2383.18, -563.875 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2013.83, -173.206, -504.754 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2038.67, -110.76, -486.358 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2268.9, -992.821, -496 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1351.97, -399.49, -403.237 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1358.33, -399.875, -450.106 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -755.381, -530.828, -302.55 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -668.686, -531.203, -389.889 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 457.045, -2244.9, -553.902 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 129.4 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -394.461, -795.355, -483.498 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -379.176, -712.155, -627.745 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 233.463, -1668.95, -615.494 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 227.263, -1650.32, -616.036 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1146.86, -945.565, -496 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1234.59, -1008.19, -476.18 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ball_falling_tunnel" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 864.236, 573.493, -203.77 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_magma_ball_falling_tunnel" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 781.09, 602.449, -168.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -63; +} diff --git a/MP/Maps/Magma/clientscripts/mp/mp_magma.csc b/MP/Maps/Magma/clientscripts/mp/mp_magma.csc new file mode 100644 index 0000000..e38beca --- /dev/null +++ b/MP/Maps/Magma/clientscripts/mp/mp_magma.csc @@ -0,0 +1,56 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_magma_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_magma_amb; + +main() +{ + level.worldmapx = 0; + level.worldmapy = 0; + level.worldlat = 33.8476; + level.worldlong = 130.984; + clientscripts\mp\_load::main(); + clientscripts\mp\mp_magma_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_magma_amb::main(); + setsaveddvar( "sm_sunsamplesizenear", 0.45 ); + setsaveddvar( "sm_sunshadowsmall", 1 ); + registerclientfield( "scriptmover", "police_car_lights", 1, 1, "int", ::destructible_car_lights, 0 ); + waitforclient( 0 ); +/# + println( "*** Client : mp_magma running..." ); +#/ +} + +destructible_car_lights( localclientnum, oldval, newval, bnewent, binitialsnap, fieldname, bwasdemojump ) +{ + player = getlocalplayer( localclientnum ); + + if ( !isdefined( player ) ) + return; + + if ( player getinkillcam( localclientnum ) ) + return; + + if ( newval ) + { + wait( randomfloatrange( 0.1, 0.5 ) ); + + if ( isdefined( self.fx ) ) + { + stopfx( localclientnum, self.fx ); + self.fx = undefined; + } + + if ( fieldname == "police_car_lights" ) + self.fx = playfxontag( localclientnum, level._effect["fx_mp_light_police_car_japan"], self, "tag_origin" ); + } + else if ( isdefined( self.fx ) ) + { + stopfx( localclientnum, self.fx ); + self.fx = undefined; + } +} diff --git a/MP/Maps/Magma/clientscripts/mp/mp_magma_amb.csc b/MP/Maps/Magma/clientscripts/mp/mp_magma_amb.csc new file mode 100644 index 0000000..b6be4a1 --- /dev/null +++ b/MP/Maps/Magma/clientscripts/mp/mp_magma_amb.csc @@ -0,0 +1,81 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "magma_outdoor", 1 ); + setambientroomtone( "magma_outdoor", "amb_wind_extreior_2d", 0.2, 0.5 ); + setambientroomreverb( "magma_outdoor", "magma_outdoor", 1, 1 ); + setambientroomcontext( "magma_outdoor", "ringoff_plr", "outdoor" ); + declareambientroom( "magma_karaoke_sml" ); + setambientroomreverb( "magma_karaoke_sml", "magma_smallroom", 1, 1 ); + setambientroomcontext( "magma_karaoke_sml", "ringoff_plr", "indoor" ); + declareambientroom( "magma_karaoke_stairs" ); + setambientroomreverb( "magma_karaoke_stairs", "magma_hallroom", 1, 1 ); + setambientroomcontext( "magma_karaoke_stairs", "ringoff_plr", "indoor" ); + declareambientroom( "magma_bar" ); + setambientroomreverb( "magma_bar", "magma_mediumroom", 1, 1 ); + setambientroomcontext( "magma_bar", "ringoff_plr", "indoor" ); + declareambientroom( "magma_post_office" ); + setambientroomreverb( "magma_post_office", "magma_smallroom", 1, 1 ); + setambientroomcontext( "magma_post_office", "ringoff_plr", "indoor" ); + declareambientroom( "magma_fish_market" ); + setambientroomreverb( "magma_fish_market", "magma_mediumroom", 1, 1 ); + setambientroomcontext( "magma_fish_market", "ringoff_plr", "indoor" ); + declareambientroom( "magma_broken_train" ); + setambientroomreverb( "magma_broken_train", "magma_train", 1, 1 ); + setambientroomcontext( "magma_broken_train", "ringoff_plr", "indoor" ); + declareambientroom( "magma_train_depot_overhang" ); + setambientroomreverb( "magma_train_depot_overhang", "magma_cave", 1, 1 ); + setambientroomcontext( "magma_train_depot_overhang", "ringoff_plr", "indoor" ); + declareambientroom( "magma_train_depot_lrg" ); + setambientroomreverb( "magma_train_depot_lrg", "magma_largeroom", 1, 1 ); + setambientroomcontext( "magma_train_depot_lrg", "ringoff_plr", "indoor" ); + declareambientroom( "magma_train_depot_med" ); + setambientroomreverb( "magma_train_depot_med", "magma_mediumroom", 1, 1 ); + setambientroomcontext( "magma_train_depot_med", "ringoff_plr", "indoor" ); + declareambientroom( "magma_outdoor_stairs" ); + setambientroomreverb( "magma_outdoor_stairs", "magma_hallroom", 1, 1 ); + setambientroomcontext( "magma_outdoor_stairs", "ringoff_plr", "outdoor" ); + declareambientroom( "magma_tunnel" ); + setambientroomreverb( "magma_tunnel", "magma_hangar", 1, 1 ); + setambientroomcontext( "magma_tunnel", "ringoff_plr", "indoor" ); + thread snd_start_autofx_audio(); + thread snd_play_loopers(); +} + +snd_play_loopers() +{ + playloopat( "amb_ribbon_flap", ( -1474, -1162, -327 ) ); + playloopat( "amb_ribbon_flap", ( -1478, -1498, -330 ) ); + playloopat( "amb_ribbon_flap", ( -1474, -1162, -327 ) ); + playloopat( "amb_ac_wall_unit", ( -2320, -1322, -349 ) ); +} + +snd_start_autofx_audio() +{ + snd_play_auto_fx( "fx_mp_magma_ball_falling_sky", "amb_fire_sml_wide", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_mp_magma_lava_edge_fire_50", "amb_fire_sml", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_mp_magma_lava_edge_fire_100", "amb_fire_sml", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_mp_magma_lava_edge_fire_200_dist", "amb_fire_med", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_mp_magma_fire_lg", "amb_fire_lrg", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_magma_fire_med", "amb_fire_med", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_magma_lava_bubble_sm", "amb_magma_spatter", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_magma_fire_xlg", "amb_fire_xlrg", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_magma_steam_vent_w", "amb_exhaust_outside", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_magma_steam_vent_int", "amb_exhaust_outside", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_light_mag_ceiling_light", "amb_ceiling_light", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_light_recessed_cool_sm_soft", "amb_ceiling_light", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_magma_splat_detail", "amb_static_splat", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_magma_splat_detail1", "amb_static_splat", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_magma_splat_detail2", "amb_static_splat", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_magma_splat_grnd_lg", "amb_splat_sizzle", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_mp_magma_splat_grnd_xlg", "amb_splat_sizzle", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_mp_magma_splat_grnd_md", "amb_static_splat", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_mp_magma_splat_wall", "amb_splat_sizzle", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_magma_splat_wall_detail", "amb_splat_sizzle", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_magma_splat_wall_lg", "amb_splat_sizzle", 0, 0, 0, 0 ); +} diff --git a/MP/Maps/Magma/clientscripts/mp/mp_magma_fx.csc b/MP/Maps/Magma/clientscripts/mp/mp_magma_fx.csc new file mode 100644 index 0000000..d1f9f97 --- /dev/null +++ b/MP/Maps/Magma/clientscripts/mp/mp_magma_fx.csc @@ -0,0 +1,168 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_fxanim_dlc; +#include clientscripts\mp\createfx\mp_magma_fx; +#include clientscripts\mp\_fx; + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_magma_ash_ember_lg"] = loadfx( "maps/mp_maps/fx_mp_magma_ash_ember_lg" ); + level._effect["fx_mp_magma_ash_ember_detail"] = loadfx( "maps/mp_maps/fx_mp_magma_ash_ember_detail" ); + level._effect["fx_mp_magma_ash_ember_door"] = loadfx( "maps/mp_maps/fx_mp_magma_ash_ember_door" ); + level._effect["fx_mp_magma_ash_int"] = loadfx( "maps/mp_maps/fx_mp_magma_ash_int" ); + level._effect["fx_mp_magma_ash_ground"] = loadfx( "maps/mp_maps/fx_mp_magma_ash_ground" ); + level._effect["fx_mp_magma_lava_edge_fire_100"] = loadfx( "maps/mp_maps/fx_mp_magma_lava_edge_fire_100" ); + level._effect["fx_mp_magma_lava_edge_fire_200_dist"] = loadfx( "maps/mp_maps/fx_mp_magma_lava_edge_fire_200_dist" ); + level._effect["fx_mp_magma_lava_edge_fire_50"] = loadfx( "maps/mp_maps/fx_mp_magma_lava_edge_fire_50" ); + level._effect["fx_mp_magma_ball_falling_sky"] = loadfx( "maps/mp_maps/fx_mp_magma_ball_falling_sky" ); + level._effect["fx_mp_magma_ball_falling_sky_wall"] = loadfx( "maps/mp_maps/fx_mp_magma_ball_falling_sky_wall" ); + level._effect["fx_mp_magma_ball_falling_tunnel"] = loadfx( "maps/mp_maps/fx_mp_magma_ball_falling_tunnel" ); + level._effect["fx_mp_magma_ball_falling_vista"] = loadfx( "maps/mp_maps/fx_mp_magma_ball_falling_vista" ); + level._effect["fx_mp_magma_splat_wall_fire"] = loadfx( "maps/mp_maps/fx_mp_magma_splat_wall_fire" ); + level._effect["fx_mp_magma_splat_grnd_fire"] = loadfx( "maps/mp_maps/fx_mp_magma_splat_grnd_fire" ); + level._effect["fx_mp_magma_volcano_smoke"] = loadfx( "maps/mp_maps/fx_mp_magma_volcano_smoke" ); + level._effect["fx_mp_magma_volcano_erupt"] = loadfx( "maps/mp_maps/fx_mp_magma_volcano_erupt" ); + level._effect["fx_mp_magma_distort_geo_lg"] = loadfx( "maps/mp_maps/fx_mp_magma_distort_geo_lg" ); + level._effect["fx_mp_magma_distort_geo_md"] = loadfx( "maps/mp_maps/fx_mp_magma_distort_geo_md" ); + level._effect["fx_mp_magma_distort_geo_sm"] = loadfx( "maps/mp_maps/fx_mp_magma_distort_geo_sm" ); + level._effect["fx_mp_magma_fire_med"] = loadfx( "maps/mp_maps/fx_mp_magma_fire_med" ); + level._effect["fx_mp_magma_fire_lg"] = loadfx( "maps/mp_maps/fx_mp_magma_fire_lg" ); + level._effect["fx_mp_magma_fire_xlg"] = loadfx( "maps/mp_maps/fx_mp_magma_fire_xlg" ); + level._effect["fx_mp_elec_spark_burst_xsm_thin"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin" ); + level._effect["fx_mp_elec_spark_burst_xsm_thin_runner"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin_runner" ); + level._effect["fx_mp_elec_spark_burst_md_runner"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_md_runner" ); + level._effect["fx_mp_magma_smk_whisp"] = loadfx( "maps/mp_maps/fx_mp_magma_smk_whisp" ); + level._effect["fx_mp_magma_smk_smolder"] = loadfx( "maps/mp_maps/fx_mp_magma_smk_smolder" ); + level._effect["fx_mp_magma_smk_smolder_med"] = loadfx( "maps/mp_maps/fx_mp_magma_smk_smolder_med" ); + level._effect["fx_mp_magma_smk_smolder_low"] = loadfx( "maps/mp_maps/fx_mp_magma_smk_smolder_low" ); + level._effect["fx_mp_magma_smk_plume_md_vista"] = loadfx( "maps/mp_maps/fx_mp_magma_smk_plume_md_vista" ); + level._effect["fx_mp_magma_smk_smolder_vista"] = loadfx( "maps/mp_maps/fx_mp_magma_smk_smolder_vista" ); + level._effect["fx_mp_magma_smk_smolder_vista_lt"] = loadfx( "maps/mp_maps/fx_mp_magma_smk_smolder_vista_lt" ); + level._effect["fx_mp_magma_steam_ocean"] = loadfx( "maps/mp_maps/fx_mp_magma_steam_ocean" ); + level._effect["fx_mp_magma_steam_ocean_cool"] = loadfx( "maps/mp_maps/fx_mp_magma_steam_ocean_cool" ); + level._effect["fx_mp_magma_steam_ocean_md"] = loadfx( "maps/mp_maps/fx_mp_magma_steam_ocean_md" ); + level._effect["fx_mp_magma_smk_steam_vista"] = loadfx( "maps/mp_maps/fx_mp_magma_smk_steam_vista" ); + level._effect["fx_mp_magma_steam_fish"] = loadfx( "maps/mp_maps/fx_mp_magma_steam_fish" ); + level._effect["fx_mp_magma_steam_vent_w"] = loadfx( "maps/mp_maps/fx_mp_magma_steam_vent_w" ); + level._effect["fx_mp_magma_steam_vent_int"] = loadfx( "maps/mp_maps/fx_mp_magma_steam_vent_int" ); + level._effect["fx_mp_magma_smk_volcano_sm"] = loadfx( "maps/mp_maps/fx_mp_magma_smk_volcano_sm" ); + level._effect["fx_lf_mp_magma_sun1"] = loadfx( "lens_flares/fx_lf_mp_magma_sun1" ); + level._effect["fx_lf_mp_magma_volcano"] = loadfx( "lens_flares/fx_lf_mp_magma_volcano" ); + level._effect["fx_mp_distant_cloud_vista_lg"] = loadfx( "maps/mp_maps/fx_mp_magma_volcano_fog" ); + level._effect["fx_drone_light_yellow"] = loadfx( "light/fx_drone_light_yellow" ); + level._effect["fx_light_mag_ceiling_light"] = loadfx( "light/fx_light_mag_ceiling_light" ); + level._effect["fx_light_recessed_cool_sm_soft"] = loadfx( "light/fx_light_recessed_cool_sm_soft" ); + level._effect["fx_light_streetlight_glow_cool"] = loadfx( "light/fx_light_streetlight_glow_cool" ); + level._effect["fx_mp_light_police_car_japan"] = loadfx( "maps/mp_maps/fx_mp_light_police_car_japan" ); + level._effect["fx_light_stair_blue"] = loadfx( "light/fx_light_stair_blue" ); + level._effect["fx_mp_magma_light_bench_blue"] = loadfx( "maps/mp_maps/fx_mp_magma_light_bench_blue" ); + level._effect["fx_light_recessed_purple"] = loadfx( "light/fx_light_recessed_purple" ); + level._effect["fx_mp_magma_light_recessed_flat"] = loadfx( "maps/mp_maps/fx_mp_magma_light_recessed_flat" ); + level._effect["fx_light_flour_glow_v_shape_cool"] = loadfx( "light/fx_light_flour_glow_v_shape_cool" ); + level._effect["fx_mp_magma_vending_machine_lg"] = loadfx( "maps/mp_maps/fx_mp_magma_vending_machine_lg" ); + level._effect["fx_mp_magma_vending_machine_med"] = loadfx( "maps/mp_maps/fx_mp_magma_vending_machine_med" ); + level._effect["fx_mp_magma_toilet_sign"] = loadfx( "maps/mp_maps/fx_mp_magma_toilet_sign" ); + level._effect["fx_mp_magma_track_light"] = loadfx( "maps/mp_maps/fx_mp_magma_track_light" ); + level._effect["fx_fire_torso"] = loadfx( "fire/fx_fire_ai_torso_magma" ); + level._effect["fx_fire_arm_left"] = loadfx( "fire/fx_fire_ai_arm_left_magma" ); + level._effect["fx_fire_arm_right"] = loadfx( "fire/fx_fire_ai_arm_right_magma" ); + level._effect["fx_fire_leg_left"] = loadfx( "fire/fx_fire_ai_leg_left_magma" ); + level._effect["fx_fire_leg_right"] = loadfx( "fire/fx_fire_ai_leg_right_magma" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["sparking_wires_med"] = %fxanim_gp_wirespark_med_anim; + level.scr_anim["fxanim_props"]["sparking_wires_long"] = %fxanim_gp_wirespark_long_anim; + level.scr_anim["fxanim_props"]["japan_sign_square"] = %fxanim_mp_magma_japan_sign_square_anim; + level.scr_anim["fxanim_props"]["squid_sign_eyes_01"] = %fxanim_mp_magma_squid_sign_eyes_01_anim; + level.scr_anim["fxanim_props"]["squid_sign_eyes_02"] = %fxanim_mp_magma_squid_sign_eyes_02_anim; + level.scr_anim["fxanim_props"]["japan_sign_fish"] = %fxanim_mp_magma_japan_sign_fish_anim; +} + +#using_animtree("fxanim_props_dlc"); + +precache_fxanim_props_dlc() +{ + level.scr_anim["fxanim_props_dlc"]["hanging_lantern_01"] = %fxanim_mp_magma_hanging_lantern_01_anim; + level.scr_anim["fxanim_props_dlc"]["hanging_lantern_02"] = %fxanim_mp_magma_hanging_lantern_02_anim; + level.scr_anim["fxanim_props_dlc"]["train_wire_01"] = %fxanim_mp_magma_train_wire_01_anim; + level.scr_anim["fxanim_props_dlc"]["train_wire_02"] = %fxanim_mp_magma_train_wire_02_anim; + level.scr_anim["fxanim_props_dlc"]["train_wire_03"] = %fxanim_mp_magma_train_wire_03_anim; + level.scr_anim["fxanim_props_dlc"]["sushi_conveyor"] = %fxanim_mp_magma_sushi_conveyor_anim; + level.fx_anim_level_init = clientscripts\mp\_fxanim_dlc::fxanim_init_dlc; + level.fx_anim_level_dlc_init = ::fxanim_level_init; +} + +main() +{ + clientscripts\mp\createfx\mp_magma_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fxanim_props(); + precache_fxanim_props_dlc(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} + +fxanim_level_init( localclientnum ) +{ + fxanims = getentarray( localclientnum, "fxanim_level", "targetname" ); + + if ( !isdefined( level.fxanim_waits ) ) + { + level.fxanim_waits = []; + level.fxanim_speeds = []; + + for ( i = 0; i < fxanims.size; i++ ) + { + level.fxanim_waits[i] = randomfloatrange( 0.1, 1.5 ); + level.fxanim_speeds[i] = randomfloatrange( 0.75, 1.4 ); + } + } + + for ( i = 0; i < fxanims.size; i++ ) + { + assert( isdefined( fxanims[i].fxanim_scene_1 ) ); + + switch ( fxanims[i].fxanim_scene_1 ) + { + case "sparking_wires_med": + fxanims[i] thread fxanim_wire_think( localclientnum, i, "med_spark_06_jnt" ); + break; + case "sparking_wires_long": + fxanims[i] thread fxanim_wire_think( localclientnum, i, "long_spark_06_jnt" ); + break; + } + } +} + +#using_animtree("fxanim_props"); + +fxanim_wire_think( localclientnum, index, bone ) +{ + self endon( "death" ); + self endon( "entityshutdown" ); + self endon( "delete" ); + self waittill_dobj( localclientnum ); + self useanimtree( #animtree ); + wait( level.fxanim_waits[index] ); + self setflaggedanim( "wire_fx", level.scr_anim["fxanim_props"][self.fxanim_scene_1], 1.0, 0.0, level.fxanim_speeds[index] ); + + for (;;) + { + self waittill( "wire_fx", note ); + + playfxontag( localclientnum, level._effect["fx_mp_elec_spark_burst_xsm_thin"], self, bone ); + } +} diff --git a/MP/Maps/Magma/maps/mp/createfx/mp_magma_fx.gsc b/MP/Maps/Magma/maps/mp/createfx/mp_magma_fx.gsc new file mode 100644 index 0000000..84ab884 --- /dev/null +++ b/MP/Maps/Magma/maps/mp/createfx/mp_magma_fx.gsc @@ -0,0 +1,2517 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -83.2882, 801.451, -390.872 ); + ent.v["angles"] = ( 355.135, 89.1011, -1.34582 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_ember_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1624.42, 650.628, -633 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_ember_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 794.536, 500.637, -504 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_ember_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3028.16, -806.528, -883 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_ember_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 726.22, -1443.45, -712.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_ember_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1583.59, -1650.88, -941.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_ember_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3811.31, -873.052, -540 ); + ent.v["angles"] = ( 270, 0, -1 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_volcano_smoke" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -64.2282, 11164.4, 3188.97 ); + ent.v["angles"] = ( 345.054, 80.2724, -13.97 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1177.98, 246.814, -478.065 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1268.26, 461.678, -475.091 ); + ent.v["angles"] = ( 5.52931, 258.943, 0.782471 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1070.16, 323.492, -471.174 ); + ent.v["angles"] = ( 358.924, 266.03, -0.674775 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1183.29, 174.587, -476.72 ); + ent.v["angles"] = ( 0.963578, 269.97, -0.47042 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1261.58, -204.029, -494.919 ); + ent.v["angles"] = ( 1.67731, 222.964, -2.4882 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1367.47, 131.479, -491.021 ); + ent.v["angles"] = ( 1.09957, 217.947, 0.516985 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -946.519, 615.787, -437.115 ); + ent.v["angles"] = ( 2.11217, 230.398, 0.997092 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -632.791, 719.894, -407.448 ); + ent.v["angles"] = ( 357.999, 246, 0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -305.517, 708.333, -395.259 ); + ent.v["angles"] = ( 0.998781, 246, 0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 149.535, 851.394, -397.767 ); + ent.v["angles"] = ( 3.73616, 276.049, 1.32327 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -43.1799, 647.125, -396.629 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 285.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -395.437, 881.646, -393.302 ); + ent.v["angles"] = ( 0.531561, 252, 1.05351 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -809.093, -193.678, -497.643 ); + ent.v["angles"] = ( 6, 300, 0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -992.403, -160.495, -491.895 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 293.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1119.76, -307.973, -494.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 228.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1132.08, 576.886, -462.039 ); + ent.v["angles"] = ( 356.001, 255.993, 0.104973 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -625.015, 931.451, -403.941 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 261.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2363.13, -738.011, -420.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 282.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1626.32, -650.634, -288.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 264.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1565.7, -582.743, -378 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 249.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1658.71, -1257.92, -484.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1093.95, 113.141, -312.424 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 243.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1639.78, -1292.24, -512 ); + ent.v["angles"] = ( 360, 273, 0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2153.26, -1154.39, -419.875 ); + ent.v["angles"] = ( 1, 282, 0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2580.15, 141.23, -229.024 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 242.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3184.77, -260.96, -407 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_magma_volcano" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -390.698, 8310.66, 4936.46 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_magma_sun1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -209748, -508218, 366879 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ball_falling_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 13558, -2187.5, -394.559 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ball_falling_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -7783.27, 2626.57, -566.854 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ball_falling_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -10250.3, -1290.51, -504 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ball_falling_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -987.249, -8351.25, -844.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ball_falling_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 10978.2, -5330.36, -258.87 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ball_falling_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4576.06, -6048.44, -563.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ball_falling_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2686.84, -8054.87, -768.875 ); + ent.v["angles"] = ( 357, 259, 0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -62.089, -664.62, -655.806 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 229.0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_ember_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -351.415, -3439.8, -702 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_fire_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1939.01, -473.465, -178.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_fire_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1821.72, -136.48, -204.202 ); + ent.v["angles"] = ( 357, 266, 0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1688.22, -812.028, -504 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 259.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2547.99, -1269.55, -591.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 280.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -670.492, -354.903, -504 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 248.0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -181.153, -720.634, -658.928 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 47.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 273.998, -557.349, -594.992 ); + ent.v["angles"] = ( 12.3588, 179.608, -2.79387 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -12.912, -242.671, -551.814 ); + ent.v["angles"] = ( 5.0234, 283.797, 0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_steam_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4202.01, 5170.7, 1513.43 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 250.0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_plume_md_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -6642.86, -2056.78, -473.243 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 263.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_steam_ocean_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 525.434, -5248.86, -819.334 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 312.0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_steam_ocean" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 159.289, -5492.31, -805.08 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 279.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_steam_ocean_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1291.38, -5625.02, -789.521 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1135.62, -2128.65, -477.875 ); + ent.v["angles"] = ( 359, 265, 0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -28.9387, -1858.45, -427.343 ); + ent.v["angles"] = ( 357.037, 286.012, -0.469781 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 776.174, -2172, -487.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2088.64, -2022.94, -426.047 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 26.5999, -540.173, -430.123 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 241.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 391.497, -853.697, -396 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 229.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -628.151, -1911.96, -413.607 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1584.71, -1000.62, -575.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 275.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2033.05, -685.937, -599.795 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1546.91, -1487.96, -676 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 274.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2378.62, -934.667, -599.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 265.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1553.74, -738.518, -574.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1308.66, -104.126, -451.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -277.486, -255.843, -504 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 247.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1594.97, -546.112, -496 ); + ent.v["angles"] = ( 360, 266, 0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 623.76, -743.645, -511.411 ); + ent.v["angles"] = ( 1.98053, 274.722, -8.00481 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1857.15, 331.99, -444 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 261.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2001.86, -26.1502, -466.258 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 275.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2062.57, -255.085, -527.429 ); + ent.v["angles"] = ( 13, 272, 0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1725.7, -581.344, -420.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2507.12, -615.797, -278.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 275.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -204.667, -557.553, -636.955 ); + ent.v["angles"] = ( 356.819, 225.857, -0.323835 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 77.4551, -792.528, -639.13 ); + ent.v["angles"] = ( 0.687726, 237.302, -0.492771 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1519.82, -343.38, -491.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -903.84, -125.267, -494.215 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 338.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 343.479, -1508.19, -499.054 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 281.95, -1507.91, -499.374 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1414.51, -1510.23, -550.417 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1092.46, 469.538, -467.213 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1260.08, 378.752, -483.674 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 261.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1007.73, -134.546, -490.136 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 276.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1050.3, 146.914, -471.723 ); + ent.v["angles"] = ( 0.998172, 275, 0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1209.85, -0.161606, -484.718 ); + ent.v["angles"] = ( 0.857287, 258, 0.515153 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1419.29, -300.263, -496 ); + ent.v["angles"] = ( 1, 227, 0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -471.282, 888.208, -396.619 ); + ent.v["angles"] = ( 0.933716, 248, 0.358453 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -35.7145, 603.847, -403.149 ); + ent.v["angles"] = ( 6.55863, 283.087, 0.834612 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 405.413, 765.877, -419.005 ); + ent.v["angles"] = ( 3.43238, 289.035, -2.58516 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -786.345, -221.253, -502.128 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 300.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -980.752, -454.861, -501.896 ); + ent.v["angles"] = ( 2, 251, 0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -953.482, -1514.72, -373.712 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -847.265, -1514.75, -373.706 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1058.33, -1514.61, -373.724 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -846.64, -1148.29, -373.724 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -952.722, -1148.18, -373.682 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1057.5, -1148.36, -373.732 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_steam_fish" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1342.09, -1547.44, -549.146 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_steam_fish" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1403.08, -1534.48, -547.041 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_steam_fish" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -953.1, -1079.6, -527.057 ); + ent.v["angles"] = ( 271, 89.9971, -89.999 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_steam_fish" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1299.76, -1247.39, -518.76 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_steam_fish" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1048.79, -1692.2, -541.098 ); + ent.v["angles"] = ( 279.055, 186.288, 173.633 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_volcano_erupt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -868.665, 8556.45, 4538.65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_steam_vent_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -851.028, -1374.21, -383.83 ); + ent.v["angles"] = ( 359, 180, 0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_steam_vent_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -850.177, -1477.52, -384.553 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_steam_vent_w" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1480.06, -1162.62, -320.721 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_steam_vent_w" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1483.24, -1493.63, -321.415 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_steam_fish" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1175.61, -1248.18, -521.413 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_steam_fish" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1218.31, -1580.35, -517.999 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1426.91, -1508.83, -550.157 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1198.69, -1514.56, -373.704 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1290.11, -1514.33, -373.626 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1381.75, -1514.6, -373.723 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1399.58, -1148.34, -373.743 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1294.8, -1148.04, -373.638 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1188.54, -1148.01, -373.624 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2687.11, -1956.9, -722.342 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2312.42, -2096.91, -653.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1147.76, 1135.48, -432.177 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1487.59, 1549.79, -342.033 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1782.25, 2418.36, -146.873 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3515.57, -1678.29, -675.173 ); + ent.v["angles"] = ( 12, 260, 0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3446.62, -964.906, -599.976 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3148.46, 235.601, -511.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1920.87, 3045.36, -17.8145 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 926.445, 560.822, -457.741 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 827.565, 627.967, -457.907 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -449.789, -1315.25, -762.553 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -129.784, -1443.23, -758.525 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -322.36, -1780.13, -752.254 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -306.81, -1021.26, -696.554 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 293.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -252.656, -1334.15, -705.429 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 308.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -42.532, -2876.59, -837.704 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 275.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 43.1153, -4787.95, -859.222 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -393.676, -4750.93, -854.995 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -106.799, -645.335, -693 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3326.45, -1222.39, -581.004 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 262.0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2391.88, 344.043, -426.474 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 262.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 999.657, 1930.6, 216.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 225.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -175.467, -4017.95, -875.632 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 138.366, -3492.77, -853.797 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -155.186, -3308.28, -872.807 ); + ent.v["angles"] = ( 6, 260, 0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1365.06, -2685.88, -736.577 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1677.66, -1903.5, -647.844 ); + ent.v["angles"] = ( 0, 328, -6 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1535.94, -2011.76, -646.706 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 328.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -10.5987, -1050.49, -659.177 ); + ent.v["angles"] = ( 359.087, 252, -0.406351 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_200_dist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 626.782, 1313.29, 894.745 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 237.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_200_dist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 571.012, 1321.98, 545.487 ); + ent.v["angles"] = ( 0, 237, -2 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_200_dist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 549.976, 1449.53, 546.313 ); + ent.v["angles"] = ( 357, 150, 0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3263.7, 1269.66, -277.084 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3296.05, -714.717, -564.755 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3595.73, -1488.77, -622.813 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3383.08, -1119.2, -585.563 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 262.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 6168.84, -1809.36, -458.875 ); + ent.v["angles"] = ( 27.9944, 284.524, 3.50026 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 174.299, -225.389, -363.043 ); + ent.v["angles"] = ( 72.745, 213.838, -0.713803 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 253.496, -340.313, -478.058 ); + ent.v["angles"] = ( 78.9029, 152.106, -83.7438 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2267.31, -1739.81, -630.602 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2191.13, -1706.69, -658.053 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2627.24, 1863.67, -9.01601 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 263.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4041.85, -1560.45, -436.756 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 262.0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5229.01, 1477.58, -218.491 ); + ent.v["angles"] = ( 35, 263, 0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_fire_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -158.465, 1237.44, -94.6902 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_fire_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 688.029, 1464.79, 889.097 ); + ent.v["angles"] = ( 359.912, 216.018, -0.725346 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_fire_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1897.73, 1574.44, -89.4524 ); + ent.v["angles"] = ( 354.003, 242.756, -0.31543 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_fire_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1541.36, 883.749, -33.2916 ); + ent.v["angles"] = ( 2.81935, 250.025, 1.02705 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_fire_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -398.79, -1465.43, -674.205 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 264.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_fire_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2112.83, -1663.76, -596.385 ); + ent.v["angles"] = ( 7.98038, 287.039, 0.56169 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 437.567, -1873.38, -446.514 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1399.43, 428.828, -373.067 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_steam_fish" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -924.608, -1232.27, -517.035 ); + ent.v["angles"] = ( 271, 89.9971, -89.999 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 29.2199, -699.909, -504 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 254.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_fire_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 364.608, -397.04, -256.014 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 236.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_fire_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 361.931, -435.377, -370.525 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 228.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -5.65167, -219.994, -221.041 ); + ent.v["angles"] = ( 16, 210, 0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -450.82, -945.502, -636.147 ); + ent.v["angles"] = ( 0, 347, 3 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -460.414, -989.039, -642.695 ); + ent.v["angles"] = ( 359.083, 300.945, 5.02909 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -43.1443, -1459.02, -663.314 ); + ent.v["angles"] = ( 359.016, 269.936, 8.93483 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -659.126, -1260.07, -647.64 ); + ent.v["angles"] = ( 353.092, 300.679, 1.04314 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -248.148, -1696.78, -443.463 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3394.17, -1700.07, -531.374 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1309.99, -1273.78, -276.978 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -580.558, -693.833, -157.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -205.887, -1918.17, -686.439 ); + ent.v["angles"] = ( 0, 89, -6 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_200_dist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -219.594, -1945.69, -691.204 ); + ent.v["angles"] = ( 1.04473, 92.0848, -1.31476 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -596.288, -585.213, -434.562 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -867.403, -700.257, -440.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 482.401, -1244.46, -536.737 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 785.046, -1242.65, -534.764 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 452.625, -2031.86, -517.281 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1360.91, -1423.83, -597.115 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 248.368, -2015.94, -532.536 ); + ent.v["angles"] = ( 13, 180, 0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -702.31, -2017.12, -521.112 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 17.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2105.33, -484.65, -442.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 51.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -212.972, 408.505, -336.698 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -482.482, 357.575, -421.684 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -929.882, 23.623, -448.253 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2509.77, -566.31, -445.87 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2793.82, -584.125, -395.603 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -180.49, -488.8, -592.712 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 308.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 299.403, -1503.08, -613.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 351.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1435.36, -1489.24, -666.045 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 188.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -938.523, -1799.56, -556.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 76.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1463.44, -1397.77, -550 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 326.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2116.42, -554.917, -476.346 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 57.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1733.76, -279.229, -487.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 203.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -947.251, 55.4396, -495.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 347.0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -84.0107, 416.238, -384 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 233.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -923.006, -632.686, -487.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 305.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -457.397, -648.445, -461.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 211.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 597.301, -665.134, -504.611 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 128.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_steam_ocean_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -258.094, -5693.38, -875.866 ); + ent.v["angles"] = ( 21, 274, 0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_volcano_smoke" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -571.159, 12446.6, 4332.14 ); + ent.v["angles"] = ( 355.189, 104.113, -5.96228 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_volcano_smoke" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1754.37, 13869, 4442.37 ); + ent.v["angles"] = ( 338.547, 67.1298, -33.7248 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4397.92, 5104.39, 1097.25 ); + ent.v["angles"] = ( 9.00167, 330.549, 7.43622 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 72.9087, -1135.59, -660.497 ); + ent.v["angles"] = ( 359.134, 258, -0.499562 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 166.821, -1410.68, -654.333 ); + ent.v["angles"] = ( 0, 192, 2 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 133.139, -1581.91, -648.414 ); + ent.v["angles"] = ( 356, 91, -2 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -510.942, -1198.11, -648.953 ); + ent.v["angles"] = ( 356.329, 326.27, -3.27294 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -681.728, -1603.48, -675.759 ); + ent.v["angles"] = ( 357.046, 325.014, -0.521401 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 173.991, -353.474, -615.482 ); + ent.v["angles"] = ( 354, 223, 0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_fire_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2336, -2533.12, -760.701 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_fire_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5942.61, -1775.52, -498.482 ); + ent.v["angles"] = ( 3, 277, 0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2591.95, -1802.4, -678.335 ); + ent.v["angles"] = ( 358.592, 241.033, -2.64979 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2879.19, -2074.01, -725.926 ); + ent.v["angles"] = ( 358.592, 241.033, -2.64979 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3075.23, -1850.81, -639.241 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 202.751, -3035.47, -878.827 ); + ent.v["angles"] = ( 9, 260, 0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 574.858, -3119.23, -832.56 ); + ent.v["angles"] = ( 6, 260, 0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 845.539, -2959.6, -813.282 ); + ent.v["angles"] = ( 6, 260, 0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1675.37, -2592.73, -723.145 ); + ent.v["angles"] = ( 17.1843, 316.436, 22.4512 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 364.907, -4164.38, -862.932 ); + ent.v["angles"] = ( 2, 260, 0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3537.3, -656.398, -279.864 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_fire_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -342.087, 1789.12, 116.807 ); + ent.v["angles"] = ( 0.286742, 246.016, -0.671972 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -729.705, -1652.52, -354.82 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -729.195, -1555.99, -353.662 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -730.135, -1464.69, -354.388 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1206.89, -916.401, -5.66857 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1303.35, -916.76, -5.94865 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1396.74, -916.347, -5.62549 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1108.07, -2000.75, -443.228 ); + ent.v["angles"] = ( 28.1384, 331.016, -7.40568 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -273.184, -1949.66, -520.737 ); + ent.v["angles"] = ( 26.8109, 38.3048, 15.2998 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -252.017, -1951.97, -513.047 ); + ent.v["angles"] = ( 14.8323, 126.468, 20.475 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3144.49, -589.201, -493.532 ); + ent.v["angles"] = ( 1, 260, 0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3251.34, -738.626, -494.296 ); + ent.v["angles"] = ( 356.335, 258.947, 1.53826 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3206.21, -422.99, -494.564 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3145.22, -383.906, -504 ); + ent.v["angles"] = ( 355.034, 277.982, 0.259813 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2481.1, 144.246, -445 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 262.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -534.773, 5.85307, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -610.545, 6.14791, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -694.125, 6.34257, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -441.788, 6.29503, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -357.362, 6.27576, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -273.452, 6.07206, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -188.502, 6.43592, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -188.879, 200.677, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -273.718, 201.307, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -357.628, 201.51, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -527.008, 201.54, -276.707 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -610.811, 201.383, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -189.335, 95.1667, -260.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -358.306, 94.0127, -260.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -526.459, 94.3918, -259.722 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -611.488, 93.8849, -260.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -611.721, 293.946, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -525.581, 294.389, -259.699 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -273.933, 293.785, -259.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -79.6575, 173.643, -260.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -79.6937, 299.404, -260.5 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -282.377, 144.229, -277.898 ); + ent.v["angles"] = ( 24.7885, 318.138, -3.92266 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -282.139, 144.141, -277.383 ); + ent.v["angles"] = ( 24.7885, 318.138, -3.92266 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -654.165, 143.714, -277.077 ); + ent.v["angles"] = ( 22.9457, 238.342, 1.55561 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -654.54, 142.937, -277.349 ); + ent.v["angles"] = ( 22.9457, 238.342, 1.55561 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -271.192, 385.044, -257.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -271.352, 451.177, -257.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -317.419, 412.098, -257.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -205.112, 385.016, -257.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -204.935, 450.245, -257.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -748.667, 354.28, -392.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -531.184, 447.733, -392.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -386.144, 446.41, -392.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -256.798, 445.252, -392 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -798.462, 62.0562, -361.253 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -795.685, -19.4361, -362.244 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2081.25, -431.153, -361.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2055.35, -335.396, -362.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1949.85, -427.721, -361.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_steam_ocean_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 728.408, -4974.25, -808.065 ); + ent.v["angles"] = ( 354, 315, 0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_steam_ocean" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -707.647, -5568.82, -825 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 258.0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1887.96, -273.873, -361.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_fire_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 526.073, 1376, 559.353 ); + ent.v["angles"] = ( 8.80175, 210.855, -1.88606 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_steam_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4567.99, 5553.14, 1111.64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 229.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_vista_lt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1785.37, 6369.42, 2052.35 ); + ent.v["angles"] = ( 324, 254, 0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky_wall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 472.658, -1126.88, -448.771 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -932.462, -2184.43, -563.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 262.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1446.43, -2531.72, -563.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky_wall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -251.884, 488.125, -329.798 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1518.29, -1884.86, -457.249 ); + ent.v["angles"] = ( 3, 238, 0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky_wall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1730.92, 0.125, -418.379 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2039.06, -766.883, -600 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 280.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1334.07, 331.11, -352.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1334.56, 429.438, -352.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1334.27, 553.43, -352.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2490.79, -944.664, -353.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2546.12, -944.788, -353.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2545.8, -826.642, -351.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2490.89, -826.293, -351.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2491.02, -718.156, -351.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2545.91, -718.14, -351.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2546.13, -615.941, -351.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2491.2, -615.749, -351.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1258.03, 3913.21, -878.606 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 172.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1955.7, 5060.76, 365.438 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 183.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_volcano_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -120.551, 8473.12, 3730.76 ); + ent.v["angles"] = ( 355.214, 204.962, -14.7418 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2351.81, -600.506, -457.635 ); + ent.v["angles"] = ( 2.73081, 248.942, -0.785321 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2513.14, -449.068, -422.431 ); + ent.v["angles"] = ( 3.73071, 248.928, -0.786096 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2934.64, -726.397, -446.517 ); + ent.v["angles"] = ( 0.583671, 238.969, -0.899506 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2736.95, -868.426, -577.448 ); + ent.v["angles"] = ( 354.732, 249.051, -0.787759 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2205.11, -1884.75, -623.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3291.92, -1846.96, -636.368 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -69.4731, -138.357, -509.714 ); + ent.v["angles"] = ( 9.01093, 286.835, 0.476183 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 425.82, -500.836, -531.924 ); + ent.v["angles"] = ( 9.36229, 179.756, -2.76595 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -550.928, -1080.29, -617.327 ); + ent.v["angles"] = ( 356, 294, 0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -665.057, -1483.38, -634.255 ); + ent.v["angles"] = ( 356, 294, 0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3113.2, -990.711, -569.239 ); + ent.v["angles"] = ( 354.78, 252.064, -1.06315 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3161.25, -1228.02, -567.583 ); + ent.v["angles"] = ( 354.78, 252.064, -1.06315 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3166.2, -1395.26, -569.021 ); + ent.v["angles"] = ( 354.78, 252.064, -1.06315 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2097.81, 346.452, -423.884 ); + ent.v["angles"] = ( 355.78, 252.045, -1.06162 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2178.41, 181.666, -430.018 ); + ent.v["angles"] = ( 357.697, 246.012, -0.508411 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 237.999, 771.534, -409.114 ); + ent.v["angles"] = ( 3.60661, 281.058, 1.64419 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 478.09, 504.762, -441.122 ); + ent.v["angles"] = ( 359.728, 303.081, -0.124006 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 498.995, 719.129, -434.701 ); + ent.v["angles"] = ( 356.759, 309.097, -0.465887 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 905.025, -1264.46, -411.117 ); + ent.v["angles"] = ( 82, 180, -180 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 904.85, -1509.59, -409.088 ); + ent.v["angles"] = ( 82, 180, -180 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1083.83, -1504.63, -438.737 ); + ent.v["angles"] = ( 82, 180, -180 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1195.38, -1504.59, -455.66 ); + ent.v["angles"] = ( 82, 180, -180 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1296.01, -1504.89, -470.762 ); + ent.v["angles"] = ( 82, 180, -180 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1084.29, -1263.8, -438.95 ); + ent.v["angles"] = ( 82, 180, -180 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1195.52, -1263.72, -454.831 ); + ent.v["angles"] = ( 82, 180, -180 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1294.99, -1263.09, -470.744 ); + ent.v["angles"] = ( 82, 180, -180 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1487.49, -1377.48, -452.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1487.46, -1440.59, -452.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1487.76, -1533.32, -452.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1487.87, -1595.44, -452.125 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 529.268, -1663.98, -585.048 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 528.894, -1676.88, -577.257 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 529.006, -1688.88, -569.112 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 529.188, -1652.88, -593.181 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 529.16, -1640.88, -600.997 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 529.207, -1628.88, -609.278 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 434.935, -1628.88, -609.085 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 435.047, -1640.88, -601.011 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 434.869, -1652.88, -592.904 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 434.984, -1664.88, -584.941 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 435.076, -1676.88, -576.957 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 434.987, -1688.88, -568.943 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 348.866, -1628.88, -609.156 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 349.208, -1640.88, -601.103 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 349.155, -1652.88, -593.057 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 348.661, -1664.88, -585.058 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 348.646, -1676.88, -576.924 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 348.72, -1688.88, -568.961 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 548.175, -1872.13, -555.215 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 632.829, -1920.13, -555.364 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 353.181, -1872.13, -555.167 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_stair_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 303.633, -1872.13, -555.23 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_light_bench_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 680.953, -1421.09, -514.469 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1001.22, -823.12, -556.84 ); + ent.v["angles"] = ( 0, 275, -8 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 734.981, -908.96, -527.261 ); + ent.v["angles"] = ( 0, 275, -8 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2179.69, -719.383, -504 ); + ent.v["angles"] = ( 359.166, 269.058, -7.95673 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -945.669, -628.929, -380.753 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -904.886, -588.938, -381.753 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -121.796, 451.579, -281 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -84.3061, 413.031, -282.088 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1418.67, -1390.51, -473.856 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1002.64, -1762.93, -496.312 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 495.858, 675.658, -336 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 306.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1067.58, 272.011, -357 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 159.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 477.989, -1822.9, -450.625 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 393.218, -1822.99, -450.625 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1159.47, -1923.26, -329.518 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2996.84, -1559.9, -510.442 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_purple" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1917.22, -204.805, -360.124 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2311.48, -1492.13, -452.745 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2311.03, -1429.41, -452.747 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2311.53, -1337.37, -452.748 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2311.16, -1275.3, -452.751 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_purple" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2189.63, -387.395, -379.254 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_purple" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2189.16, -274.331, -380.219 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_purple" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1832.25, -453.288, -364.201 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 868.928, -1658.59, -505.217 ); + ent.v["angles"] = ( 36, 133, 0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 902.351, -1625.04, -505.082 ); + ent.v["angles"] = ( 36, 133, 0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 936.622, -1590.8, -505.116 ); + ent.v["angles"] = ( 36, 133, 0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 921.014, -1575.25, -493.5 ); + ent.v["angles"] = ( 87, 133, 0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 887.005, -1609.09, -493.5 ); + ent.v["angles"] = ( 87, 133, 0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 852.448, -1643.12, -493.5 ); + ent.v["angles"] = ( 87, 133, 0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 652.664, -1247.04, -505.338 ); + ent.v["angles"] = ( 37.9817, 269.473, 1.07224 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 716.919, -1246.88, -505.172 ); + ent.v["angles"] = ( 37.9817, 269.473, 1.07224 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 781.075, -1246.9, -505.143 ); + ent.v["angles"] = ( 37.9817, 269.473, 1.07224 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 653.205, -1269.27, -493.5 ); + ent.v["angles"] = ( 88.6805, 308.641, 39.8353 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 717.018, -1269.17, -493.5 ); + ent.v["angles"] = ( 88.6805, 308.641, 39.8353 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 780.881, -1268.91, -493.5 ); + ent.v["angles"] = ( 88.6805, 308.641, 39.8353 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 797.308, 140.714, -277.709 ); + ent.v["angles"] = ( 25.1892, 54.8851, 91.622 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 399.345, 419.386, -277.668 ); + ent.v["angles"] = ( 25.1892, 54.8851, 91.622 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 691.604, 710.022, -277.341 ); + ent.v["angles"] = ( 24, 235, 90 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1091.06, 430.268, -277.604 ); + ent.v["angles"] = ( 24, 235, 90 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 636.547, 231.149, -332.02 ); + ent.v["angles"] = ( 359.975, 55.1034, 91.425 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1401, -1323.83, -373.677 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1295.36, -1323.34, -373.58 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1190.94, -1323.39, -373.658 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1059.58, -1323.44, -373.678 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -953.73, -1323.76, -373.666 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -848.474, -1324.44, -373.66 ); + ent.v["angles"] = ( 270, 0, 89 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 619.348, -1938.51, -457.498 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 339.88, -1891.01, -433.067 ); + ent.v["angles"] = ( 89, 270.001, -89.9989 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 686.176, -1938.96, -457.078 ); + ent.v["angles"] = ( 89, 270.001, -89.9989 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 549.157, -1891.1, -433.069 ); + ent.v["angles"] = ( 89, 270.001, -89.9989 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2261.22, -1066.16, -194.278 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2262.34, -1323.3, -192.139 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2260.8, -1577.67, -191.197 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1580.34, -222.843, -296.217 ); + ent.v["angles"] = ( 283, 180, 180 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2581.38, -487.787, -392.977 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 290.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_steam_vent_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2832.3, -1609.96, -382.623 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 82.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1218.17, -1092.32, -503.622 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_vending_machine_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1262.69, -1092.69, -519.761 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -255.66, -101.332, -432.744 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_vending_machine_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -300.179, -100.961, -448.882 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -158.842, -2216.4, -501.74 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_vending_machine_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -113.201, -2218.63, -515.77 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -317.577, -2215.4, -500.872 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1026.43, -1570.98, -605.728 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 46.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_vending_machine_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1175.3, -1111.01, -535.555 ); + ent.v["angles"] = ( 0.1, 179.7, 0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_vending_machine_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2570.42, -1548.69, -545.563 ); + ent.v["angles"] = ( 359.997, 87.6996, 0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2643.47, -1548.45, -529.867 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_toilet_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 893.05, -1461.17, -462.625 ); + ent.v["angles"] = vectorscale( ( 0, 0, 1 ), 90.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_toilet_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 888.609, -1460.96, -461.897 ); + ent.v["angles"] = ( 1.03627, 180.016, -90.9988 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1699.18, -18.1179, -355.246 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1721.15, -77.528, -352.249 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1930.53, -572.014, -367.493 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1871.13, -593.979, -370.49 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1074.34, -1232.78, -532.755 ); + ent.v["angles"] = ( 3, 270, 0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1129.64, -1231.78, -538.404 ); + ent.v["angles"] = ( 4, 270, 0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1191.3, -1234.61, -533.125 ); + ent.v["angles"] = ( 4, 270, 0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1129.79, -1228.98, -534.188 ); + ent.v["angles"] = ( 4, 270, 0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2544.58, -898.699, -282.916 ); + ent.v["angles"] = ( 21.1594, 183.554, -33.5578 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2136.45, -627.396, -397.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1444.39, -78.3522, -384.191 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_vending_machine_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1444.7, -159.235, -402.968 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 182.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2342.2, -738.922, -496.764 ); + ent.v["angles"] = ( 3, 270, 0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2349.33, -711.544, -492.772 ); + ent.v["angles"] = ( 3, 270, 0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1609.01, 422.195, -346.768 ); + ent.v["angles"] = ( 3, 270, 0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_track_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1601.88, 394.817, -350.759 ); + ent.v["angles"] = ( 3, 270, 0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1270.66, -1570.35, -502.582 ); + ent.v["angles"] = ( 270, 0, 179 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1230.86, -1570.82, -502.616 ); + ent.v["angles"] = ( 270, 0, 179 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1190.87, -1571.22, -502.616 ); + ent.v["angles"] = ( 270, 0, 179 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1151.05, -1571.77, -502.532 ); + ent.v["angles"] = ( 270, 0, 179 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1110.99, -1570.03, -502.574 ); + ent.v["angles"] = ( 270, 0, 179 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 377.908, -3726.57, -855.875 ); + ent.v["angles"] = ( 6, 260, 0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 698.904, -1126.88, -421.133 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 734.628, -1126.88, -451.54 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 792.364, -1067.78, -525.52 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 276.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 785.801, -1092.59, -524.76 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 276.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 170.519, -847.689, -504 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 155.006, -870.964, -504 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -383.779, -328.064, -504 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -254.699, -534.128, -496 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -276.346, -552.186, -496 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2481.91, -760.599, -530.059 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2113.51, -729.266, -600 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2181.1, -1466.16, -591.875 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2159.9, -1486.1, -591.875 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2863.36, -1345.01, -591.875 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2457.01, -903.995, -592 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2023.99, -1015.43, -592 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2022.57, -985.488, -592 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -231.986, -261.663, -504 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 116.416, 603.494, -416.801 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 96.4017, 584.729, -417.975 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2244.72, -981.41, -496 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -561.645, -2287.94, -563.875 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 432.644, -2222.81, -563.875 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1027.61, -2383.18, -563.875 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2013.83, -173.206, -504.754 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2038.67, -110.76, -486.358 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2268.9, -992.821, -496 ); + ent.v["angles"] = ( 270.007, 298.722, 61.4347 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1351.97, -399.49, -403.237 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1358.33, -399.875, -450.106 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -755.381, -530.828, -302.55 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -668.686, -531.203, -389.889 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 457.045, -2244.9, -553.902 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 129.4 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -394.461, -795.355, -483.498 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -379.176, -712.155, -627.745 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 233.463, -1668.95, -615.494 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 227.263, -1650.32, -616.036 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1146.86, -945.565, -496 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1234.59, -1008.19, -476.18 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ball_falling_tunnel" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 864.236, 573.493, -203.77 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_magma_ball_falling_tunnel" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 781.09, 602.449, -168.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -63; +} diff --git a/MP/Maps/Magma/maps/mp/mp_magma.gsc b/MP/Maps/Magma/maps/mp/mp_magma.gsc new file mode 100644 index 0000000..0a51477 --- /dev/null +++ b/MP/Maps/Magma/maps/mp/mp_magma.gsc @@ -0,0 +1,262 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\mp_magma_fx; +#include maps\mp\_load; +#include maps\mp\mp_magma_amb; +#include maps\mp\_compass; +#include maps\mp\gametypes\_spawning; +#include maps\mp\gametypes\_weaponobjects; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + level.overrideplayerdeathwatchtimer = ::leveloverridetime; + level thread spawnkilltrigger(); + maps\mp\mp_magma_fx::main(); + precachemodel( "collision_clip_64x64x10" ); + precachemodel( "collision_physics_64x64x10" ); + precachemodel( "collision_physics_256x256x10" ); + precachemodel( "collision_physics_128x128x10" ); + precachemodel( "collision_physics_64x64x10" ); + precachemodel( "p6_mag_k_rail_barrier" ); + precachemodel( "p6_mag_rocks_medium_02" ); + maps\mp\_load::main(); + maps\mp\mp_magma_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_magma" ); + setdvar( "compassmaxrange", "2100" ); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + barrier1 = spawn( "script_model", ( 235.49, 907.91, -395.97 ) ); + barrier1.angles = ( 2.96968, 263.594, -1.33952 ); + barrier2 = spawn( "script_model", ( 245.37, 837.028, -401.885 ) ); + barrier2.angles = ( 6.5989, 268.994, -0.115603 ); + barrier1 setmodel( "p6_mag_k_rail_barrier" ); + barrier2 setmodel( "p6_mag_k_rail_barrier" ); + rock1 = spawn( "script_model", ( 271.92, 893.99, -494 ) ); + rock1.angles = vectorscale( ( 0, 1, 0 ), 132.0 ); + rock2 = spawn( "script_model", ( 393.42, 895.49, -494 ) ); + rock2.angles = vectorscale( ( 0, 1, 0 ), 132.0 ); + rock3 = spawn( "script_model", ( 477.92, 882.49, -509 ) ); + rock3.angles = vectorscale( ( 0, 1, 0 ), 132.0 ); + rock1 setmodel( "p6_mag_rocks_medium_02" ); + rock2 setmodel( "p6_mag_rocks_medium_02" ); + rock3 setmodel( "p6_mag_rocks_medium_02" ); + spawncollision( "collision_clip_64x64x10", "collider", ( 234, 907, -391.5 ), ( 356.785, 83.5728, -83.5116 ) ); + spawncollision( "collision_clip_64x64x10", "collider", ( 243.5, 835.5, -399 ), ( 353.903, 88.8464, -83.1852 ) ); + spawncollision( "collision_clip_64x64x10", "collider", ( 254, 902.5, -395 ), ( 0.42985, 353.514, 3.77564 ) ); + spawncollision( "collision_clip_64x64x10", "collider", ( 264, 835.5, -401.5 ), ( 0.0466956, 359.602, 6.69984 ) ); + spawncollision( "collision_clip_64x64x10", "collider", ( 247.5, 831.5, -363 ), ( 353.903, 88.8464, -83.1852 ) ); + spawncollision( "collision_clip_64x64x10", "collider", ( 237.5, 904.5, -357.5 ), ( 356.785, 83.5728, -83.5116 ) ); + spawncollision( "collision_physics_64x64x10", "collider", ( 234, 907, -391.5 ), ( 356.785, 83.5728, -83.5116 ) ); + spawncollision( "collision_physics_64x64x10", "collider", ( 243.5, 835.5, -399 ), ( 353.903, 88.8464, -83.1852 ) ); + spawncollision( "collision_physics_256x256x10", "collider", ( -459, 357.5, -578.5 ), ( 270, 183.902, 86.0983 ) ); + spawncollision( "collision_physics_128x128x10", "collider", ( -267, 233.5, -514 ), vectorscale( ( 1, 0, 0 ), 270.0 ) ); + spawncollision( "collision_physics_128x128x10", "collider", ( -669.5, 216, -514 ), vectorscale( ( 1, 0, 0 ), 270.0 ) ); + spawncollision( "collision_physics_64x64x10", "collider", ( -748, 95, -483.5 ), ( 270, 270.2, 1.43 ) ); + level.levelkillbrushes = []; + maps\mp\gametypes\_spawning::level_use_unified_spawning( 1 ); + level.remotemotarviewup = 20; + registerclientfield( "scriptmover", "police_car_lights", 1, 1, "int" ); + precacheitem( "lava_mp" ); + level thread destructible_lights(); + level.overrideweaponfunc = ::overrideweaponfunc; + level.deleteonkillbrushoverride = ::deleteonkillbrushoverride; + level thread lava_trigger_init(); + level.onplayerkilledextraunthreadedcbs[level.onplayerkilledextraunthreadedcbs.size] = ::checkcorpseinlava; +} + +lava_trigger_init() +{ + wait 3; + killbrushes = getentarray( "trigger_hurt", "classname" ); + + for ( i = 0; i < killbrushes.size; i++ ) + { + if ( isdefined( killbrushes[i].script_noteworthy ) && killbrushes[i].script_noteworthy == "lava" ) + level.levelkillbrushes[level.levelkillbrushes.size] = killbrushes[i]; + } +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2600", reset_dvars ); +} + +overrideweaponfunc( sweapon, script_noteworthy ) +{ + if ( isdefined( script_noteworthy ) && script_noteworthy == "lava" ) + sweapon = "lava_mp"; + + return sweapon; +} + +destructible_lights() +{ + wait 0.05; + destructibles = getentarray( "destructible", "targetname" ); + + foreach ( destructible in destructibles ) + { + if ( destructible.destructibledef == "veh_t6_dlc_police_car_jp_destructible" ) + { + destructible thread destructible_think( "police_car_lights" ); + destructible setclientfield( "police_car_lights", 1 ); + } + } +} + +destructible_think( clientfield ) +{ + self waittill_any( "death", "destructible_base_piece_death" ); + self setclientfield( clientfield, 0 ); +} + +checkcorpseinlava( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + if ( !isdefined( einflictor ) || !isdefined( einflictor.script_noteworthy ) ) + return; + + if ( einflictor.script_noteworthy != "lava" ) + return; + + if ( !isdefined( self.body ) ) + return; + + playfxontag( level._effect["fx_fire_torso"], self.body, "J_Spine4" ); + playfxontag( level._effect["fx_fire_arm_left"], self.body, "J_Elbow_LE" ); + playfxontag( level._effect["fx_fire_arm_right"], self.body, "J_Elbow_RI" ); + playfxontag( level._effect["fx_fire_leg_left"], self.body, "J_Hip_LE" ); + playfxontag( level._effect["fx_fire_leg_right"], self.body, "J_Hip_RI" ); +} + +leveloverridetime( defaulttime ) +{ + if ( self isinlava() ) + return getdvarfloatdefault( "scr_lavaPlayerDeathWatchTime", 0.5 ); + + return defaulttime; +} + +isinlava() +{ + if ( !isdefined( self.lastattacker ) || !isdefined( self.lastattacker.script_noteworthy ) ) + return false; + + if ( self.lastattacker.script_noteworthy != "lava" ) + return false; + + return true; +} + +testkillbrushonstationary( lavaarray, killbrusharray, player, watcher ) +{ + player endon( "disconnect" ); + self endon( "death" ); + + self waittill( "stationary" ); + + wait 0.1; + + for ( i = 0; i < lavaarray.size; i++ ) + { + if ( self istouching( lavaarray[i] ) ) + { + playfx( level._effect["fx_fire_torso"], self.origin ); + watcher maps\mp\gametypes\_weaponobjects::waitanddetonate( self, 0.0, undefined, "lava_mp" ); + return; + } + } + + for ( i = 0; i < killbrusharray.size; i++ ) + { + if ( self istouching( killbrusharray[i] ) ) + { + if ( self.origin[2] > player.origin[2] ) + break; + + if ( isdefined( self ) ) + self delete(); + + return; + } + } +} + +deleteonkillbrushoverride( player, watcher ) +{ + player endon( "disconnect" ); + self endon( "death" ); + self endon( "stationary" ); + trigger_hurtarray = getentarray( "trigger_hurt", "classname" ); + lavaarray = []; + killbrusharray = []; + + for ( i = 0; i < trigger_hurtarray.size; i++ ) + { + if ( isdefined( trigger_hurtarray[i].script_noteworthy ) && trigger_hurtarray[i].script_noteworthy == "lava" ) + { + lavaarray[lavaarray.size] = trigger_hurtarray[i]; + continue; + } + + killbrusharray[killbrusharray.size] = trigger_hurtarray[i]; + } + + if ( lavaarray.size < 1 ) + return; + + self thread testkillbrushonstationary( lavaarray, killbrusharray, player, watcher ); + + while ( true ) + { + for ( i = 0; i < lavaarray.size; i++ ) + { + if ( self istouching( lavaarray[i] ) ) + { + wait 0.05; + playfx( level._effect["fx_fire_torso"], self.origin ); + watcher maps\mp\gametypes\_weaponobjects::waitanddetonate( self, 0.0, undefined, "lava_mp" ); + return; + } + } + + for ( i = 0; i < killbrusharray.size; i++ ) + { + if ( self istouching( killbrusharray[i] ) ) + { + if ( self.origin[2] > player.origin[2] ) + break; + + if ( isdefined( self ) ) + self delete(); + + return; + } + } + + wait 0.1; + } +} + +spawnkilltrigger() +{ + trigger = spawn( "trigger_radius", ( 2132, -1692, -708 ), 0, 250, 100 ); + + while ( true ) + { + trigger waittill( "trigger", player ); + + player dodamage( player.health * 2, trigger.origin, trigger, trigger, "none", "MOD_SUICIDE", 0, "lava_mp" ); + } +} diff --git a/MP/Maps/Magma/maps/mp/mp_magma_amb.gsc b/MP/Maps/Magma/maps/mp/mp_magma_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Magma/maps/mp/mp_magma_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Magma/maps/mp/mp_magma_fx.gsc b/MP/Maps/Magma/maps/mp/mp_magma_fx.gsc new file mode 100644 index 0000000..97ddf26 --- /dev/null +++ b/MP/Maps/Magma/maps/mp/mp_magma_fx.gsc @@ -0,0 +1,108 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_magma_fx; + +main() +{ + precache_fxanim_props(); + precache_fxanim_props_dlc(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_magma_fx::main(); +} + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_magma_ash_ember_lg"] = loadfx( "maps/mp_maps/fx_mp_magma_ash_ember_lg" ); + level._effect["fx_mp_magma_ash_ember_detail"] = loadfx( "maps/mp_maps/fx_mp_magma_ash_ember_detail" ); + level._effect["fx_mp_magma_ash_ember_door"] = loadfx( "maps/mp_maps/fx_mp_magma_ash_ember_door" ); + level._effect["fx_mp_magma_ash_int"] = loadfx( "maps/mp_maps/fx_mp_magma_ash_int" ); + level._effect["fx_mp_magma_ash_ground"] = loadfx( "maps/mp_maps/fx_mp_magma_ash_ground" ); + level._effect["fx_mp_magma_lava_edge_fire_100"] = loadfx( "maps/mp_maps/fx_mp_magma_lava_edge_fire_100" ); + level._effect["fx_mp_magma_lava_edge_fire_200_dist"] = loadfx( "maps/mp_maps/fx_mp_magma_lava_edge_fire_200_dist" ); + level._effect["fx_mp_magma_lava_edge_fire_50"] = loadfx( "maps/mp_maps/fx_mp_magma_lava_edge_fire_50" ); + level._effect["fx_mp_magma_ball_falling_sky"] = loadfx( "maps/mp_maps/fx_mp_magma_ball_falling_sky" ); + level._effect["fx_mp_magma_ball_falling_sky_wall"] = loadfx( "maps/mp_maps/fx_mp_magma_ball_falling_sky_wall" ); + level._effect["fx_mp_magma_ball_falling_tunnel"] = loadfx( "maps/mp_maps/fx_mp_magma_ball_falling_tunnel" ); + level._effect["fx_mp_magma_ball_falling_vista"] = loadfx( "maps/mp_maps/fx_mp_magma_ball_falling_vista" ); + level._effect["fx_mp_magma_splat_wall_fire"] = loadfx( "maps/mp_maps/fx_mp_magma_splat_wall_fire" ); + level._effect["fx_mp_magma_splat_grnd_fire"] = loadfx( "maps/mp_maps/fx_mp_magma_splat_grnd_fire" ); + level._effect["fx_mp_magma_volcano_smoke"] = loadfx( "maps/mp_maps/fx_mp_magma_volcano_smoke" ); + level._effect["fx_mp_magma_volcano_erupt"] = loadfx( "maps/mp_maps/fx_mp_magma_volcano_erupt" ); + level._effect["fx_mp_magma_distort_geo_lg"] = loadfx( "maps/mp_maps/fx_mp_magma_distort_geo_lg" ); + level._effect["fx_mp_magma_distort_geo_md"] = loadfx( "maps/mp_maps/fx_mp_magma_distort_geo_md" ); + level._effect["fx_mp_magma_distort_geo_sm"] = loadfx( "maps/mp_maps/fx_mp_magma_distort_geo_sm" ); + level._effect["fx_mp_magma_fire_med"] = loadfx( "maps/mp_maps/fx_mp_magma_fire_med" ); + level._effect["fx_mp_magma_fire_lg"] = loadfx( "maps/mp_maps/fx_mp_magma_fire_lg" ); + level._effect["fx_mp_magma_fire_xlg"] = loadfx( "maps/mp_maps/fx_mp_magma_fire_xlg" ); + level._effect["fx_mp_elec_spark_burst_xsm_thin"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin" ); + level._effect["fx_mp_elec_spark_burst_xsm_thin_runner"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin_runner" ); + level._effect["fx_mp_elec_spark_burst_md_runner"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_md_runner" ); + level._effect["fx_mp_magma_smk_whisp"] = loadfx( "maps/mp_maps/fx_mp_magma_smk_whisp" ); + level._effect["fx_mp_magma_smk_smolder"] = loadfx( "maps/mp_maps/fx_mp_magma_smk_smolder" ); + level._effect["fx_mp_magma_smk_smolder_med"] = loadfx( "maps/mp_maps/fx_mp_magma_smk_smolder_med" ); + level._effect["fx_mp_magma_smk_smolder_low"] = loadfx( "maps/mp_maps/fx_mp_magma_smk_smolder_low" ); + level._effect["fx_mp_magma_smk_plume_md_vista"] = loadfx( "maps/mp_maps/fx_mp_magma_smk_plume_md_vista" ); + level._effect["fx_mp_magma_smk_smolder_vista"] = loadfx( "maps/mp_maps/fx_mp_magma_smk_smolder_vista" ); + level._effect["fx_mp_magma_smk_smolder_vista_lt"] = loadfx( "maps/mp_maps/fx_mp_magma_smk_smolder_vista_lt" ); + level._effect["fx_mp_magma_steam_ocean"] = loadfx( "maps/mp_maps/fx_mp_magma_steam_ocean" ); + level._effect["fx_mp_magma_steam_ocean_cool"] = loadfx( "maps/mp_maps/fx_mp_magma_steam_ocean_cool" ); + level._effect["fx_mp_magma_steam_ocean_md"] = loadfx( "maps/mp_maps/fx_mp_magma_steam_ocean_md" ); + level._effect["fx_mp_magma_smk_steam_vista"] = loadfx( "maps/mp_maps/fx_mp_magma_smk_steam_vista" ); + level._effect["fx_mp_magma_steam_fish"] = loadfx( "maps/mp_maps/fx_mp_magma_steam_fish" ); + level._effect["fx_mp_magma_steam_vent_w"] = loadfx( "maps/mp_maps/fx_mp_magma_steam_vent_w" ); + level._effect["fx_mp_magma_steam_vent_int"] = loadfx( "maps/mp_maps/fx_mp_magma_steam_vent_int" ); + level._effect["fx_mp_magma_smk_volcano_sm"] = loadfx( "maps/mp_maps/fx_mp_magma_smk_volcano_sm" ); + level._effect["fx_lf_mp_magma_sun1"] = loadfx( "lens_flares/fx_lf_mp_magma_sun1" ); + level._effect["fx_lf_mp_magma_volcano"] = loadfx( "lens_flares/fx_lf_mp_magma_volcano" ); + level._effect["fx_mp_distant_cloud_vista_lg"] = loadfx( "maps/mp_maps/fx_mp_magma_volcano_fog" ); + level._effect["fx_drone_light_yellow"] = loadfx( "light/fx_drone_light_yellow" ); + level._effect["fx_light_mag_ceiling_light"] = loadfx( "light/fx_light_mag_ceiling_light" ); + level._effect["fx_light_recessed_cool_sm_soft"] = loadfx( "light/fx_light_recessed_cool_sm_soft" ); + level._effect["fx_light_streetlight_glow_cool"] = loadfx( "light/fx_light_streetlight_glow_cool" ); + level._effect["fx_mp_light_police_car_japan"] = loadfx( "maps/mp_maps/fx_mp_light_police_car_japan" ); + level._effect["fx_light_stair_blue"] = loadfx( "light/fx_light_stair_blue" ); + level._effect["fx_mp_magma_light_bench_blue"] = loadfx( "maps/mp_maps/fx_mp_magma_light_bench_blue" ); + level._effect["fx_light_recessed_purple"] = loadfx( "light/fx_light_recessed_purple" ); + level._effect["fx_mp_magma_light_recessed_flat"] = loadfx( "maps/mp_maps/fx_mp_magma_light_recessed_flat" ); + level._effect["fx_light_flour_glow_v_shape_cool"] = loadfx( "light/fx_light_flour_glow_v_shape_cool" ); + level._effect["fx_mp_magma_vending_machine_lg"] = loadfx( "maps/mp_maps/fx_mp_magma_vending_machine_lg" ); + level._effect["fx_mp_magma_vending_machine_med"] = loadfx( "maps/mp_maps/fx_mp_magma_vending_machine_med" ); + level._effect["fx_mp_magma_toilet_sign"] = loadfx( "maps/mp_maps/fx_mp_magma_toilet_sign" ); + level._effect["fx_mp_magma_track_light"] = loadfx( "maps/mp_maps/fx_mp_magma_track_light" ); + level._effect["fx_fire_torso"] = loadfx( "fire/fx_fire_ai_torso_magma" ); + level._effect["fx_fire_arm_left"] = loadfx( "fire/fx_fire_ai_arm_left_magma" ); + level._effect["fx_fire_arm_right"] = loadfx( "fire/fx_fire_ai_arm_right_magma" ); + level._effect["fx_fire_leg_left"] = loadfx( "fire/fx_fire_ai_leg_left_magma" ); + level._effect["fx_fire_leg_right"] = loadfx( "fire/fx_fire_ai_leg_right_magma" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["sparking_wires_med"] = %fxanim_gp_wirespark_med_anim; + level.scr_anim["fxanim_props"]["sparking_wires_long"] = %fxanim_gp_wirespark_long_anim; + level.scr_anim["fxanim_props"]["japan_sign_square"] = %fxanim_mp_magma_japan_sign_square_anim; + level.scr_anim["fxanim_props"]["squid_sign_eyes_01"] = %fxanim_mp_magma_squid_sign_eyes_01_anim; + level.scr_anim["fxanim_props"]["squid_sign_eyes_02"] = %fxanim_mp_magma_squid_sign_eyes_02_anim; + level.scr_anim["fxanim_props"]["japan_sign_fish"] = %fxanim_mp_magma_japan_sign_fish_anim; +} + +#using_animtree("fxanim_props_dlc"); + +precache_fxanim_props_dlc() +{ + level.scr_anim["fxanim_props_dlc"]["hanging_lantern_01"] = %fxanim_mp_magma_hanging_lantern_01_anim; + level.scr_anim["fxanim_props_dlc"]["hanging_lantern_02"] = %fxanim_mp_magma_hanging_lantern_02_anim; + level.scr_anim["fxanim_props_dlc"]["train_wire_01"] = %fxanim_mp_magma_train_wire_01_anim; + level.scr_anim["fxanim_props_dlc"]["train_wire_02"] = %fxanim_mp_magma_train_wire_02_anim; + level.scr_anim["fxanim_props_dlc"]["train_wire_03"] = %fxanim_mp_magma_train_wire_03_anim; + level.scr_anim["fxanim_props_dlc"]["sushi_conveyor"] = %fxanim_mp_magma_sushi_conveyor_anim; +} diff --git a/MP/Maps/Meltdown/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Meltdown/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Meltdown/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Meltdown/aitype/enemy_dog_mp.gsc b/MP/Maps/Meltdown/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Meltdown/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Meltdown/character/character_mp_german_shepherd.gsc b/MP/Maps/Meltdown/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Meltdown/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Meltdown/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Meltdown/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Meltdown/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Meltdown/clientscripts/mp/createfx/mp_meltdown_fx.csc b/MP/Maps/Meltdown/clientscripts/mp/createfx/mp_meltdown_fx.csc new file mode 100644 index 0000000..12e38da --- /dev/null +++ b/MP/Maps/Meltdown/clientscripts/mp/createfx/mp_meltdown_fx.csc @@ -0,0 +1,2591 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_rain_cooling_tower" ); + ent.v["origin"] = ( -238.789, 1703.29, 390.252 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 1510.04, 4090.67, -140 ); + ent.v["angles"] = ( 2.84124, 163.841, -0.400075 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1450.14, 4421.73, -138.744 ); + ent.v["angles"] = ( 357.96, 178.986, 0.275462 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_meltdown_sun1" ); + ent.v["origin"] = ( 9906.81, -26068.5, 6893.41 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower" ); + ent.v["origin"] = ( -64.1019, 1658.64, 1523.65 ); + ent.v["angles"] = ( 356, 176, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -28.178, 2362.37, 202.125 ); + ent.v["angles"] = ( 13.9832, 248.09, 0.642511 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -215.89, 2393.49, 197.125 ); + ent.v["angles"] = ( 16.0367, 266.441, -0.475019 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( 440.583, 1906.32, 195.125 ); + ent.v["angles"] = ( 15.4495, 204.378, 4.31785 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( 334.9, 2096.3, 201.125 ); + ent.v["angles"] = ( 11.5226, 215.972, 1.56318 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( 149.167, 2275.99, 203 ); + ent.v["angles"] = ( 10.9861, 236.944, -0.530442 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -437.23, 2367.23, 191.125 ); + ent.v["angles"] = ( 12.0831, 287.847, -1.11472 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( 439.715, 1472.3, 192.125 ); + ent.v["angles"] = ( 14.9925, 161.068, 0.430335 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( 368.633, 1340.01, 195.125 ); + ent.v["angles"] = ( 16.5638, 145.376, -4.13018 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -652.51, 2263.27, 202 ); + ent.v["angles"] = ( 11.1192, 305.063, 0.422903 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( 220.939, 1160.41, 196 ); + ent.v["angles"] = ( 15.9893, 131.08, 0.608138 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( 79.9473, 1068.62, 187 ); + ent.v["angles"] = ( 16.0195, 115.029, 0.701384 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -78.513, 1015.27, 187.125 ); + ent.v["angles"] = ( 14.0173, 101, -0.982402 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -263.352, 992.556, 192.125 ); + ent.v["angles"] = ( 14.9981, 87.9662, -0.215232 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -440.524, 1026.24, 193.125 ); + ent.v["angles"] = ( 12.9678, 70.1048, 0.922636 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -761.948, 1230.87, 199 ); + ent.v["angles"] = ( 10.9932, 41.9725, -0.107821 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -778.574, 2148.34, 199 ); + ent.v["angles"] = ( 11.9986, 319.979, -0.159912 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -881.06, 1970.77, 195 ); + ent.v["angles"] = ( 10.8461, 339.182, 1.75937 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -937.289, 1724.15, 193 ); + ent.v["angles"] = ( 12.998, 358.974, -0.23086 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -860.88, 1367.33, 199 ); + ent.v["angles"] = ( 14.979, 27.1056, 0.803426 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_pipe_spill_ocean" ); + ent.v["origin"] = ( 2258.74, 1595.08, -166.13 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_pipe_spill_ocean" ); + ent.v["origin"] = ( 2256.42, 1694.89, -163.962 ); + ent.v["angles"] = ( 0, 0, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_pipe_spill_ocean" ); + ent.v["origin"] = ( 2255.17, 1798.41, -166.797 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 2.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_surface_heat_md" ); + ent.v["origin"] = ( 2068.62, 2628.85, 42.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_surface_heat_lg" ); + ent.v["origin"] = ( -200.453, 4382.97, -217 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_surface_heat_lg" ); + ent.v["origin"] = ( -112.559, 4173.8, -223 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_surface_heat_lg" ); + ent.v["origin"] = ( -241.977, 4006.1, -228 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2852.13, 1444.52, -252.163 ); + ent.v["angles"] = ( 359, 2, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -12.6; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2852.13, 1927.81, -254.316 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14.4; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2852.13, 967.481, -253.435 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -13.33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2852.13, 2461.63, -254.337 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_surface_heat_md" ); + ent.v["origin"] = ( 1728.78, 2631.02, 45.125 ); + ent.v["angles"] = ( 271.457, 10.4739, 21.476 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_surface_heat_lg" ); + ent.v["origin"] = ( 2635.72, 1956.53, -239.533 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 272.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_surface_heat_lg" ); + ent.v["origin"] = ( 2630.46, 1431.73, -234.334 ); + ent.v["angles"] = ( 271.005, 89.5161, -89.4293 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_surface_heat_md" ); + ent.v["origin"] = ( 1736.89, 752.427, 50.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_surface_heat_md" ); + ent.v["origin"] = ( 2064.18, 755.876, 45.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower" ); + ent.v["origin"] = ( -146.025, -2951.02, 1681 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 193.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2852.13, 1185.88, -252.701 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14.4; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2852.13, 2201.12, -254.324 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 357.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -13.33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2852.13, 1684.99, -254.501 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2521.78, 2884.14, -256.464 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 46.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 11.11; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 173.963, 122.428, -35.0915 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 173.048, 321.12, -15.2158 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 175.276, 329.018, 12.6183 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_tunnel" ); + ent.v["origin"] = ( 1460.75, 773.153, 141.259 ); + ent.v["angles"] = ( 284, 359, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_tunnel" ); + ent.v["origin"] = ( 1506.27, 2534.3, 152.469 ); + ent.v["angles"] = ( 273.487, 345.606, 9.43205 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1330.05, 2974.69, 92.4215 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1353.48, 3006.71, 107.217 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_int_top" ); + ent.v["origin"] = ( -273.966, 1669.58, 432 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_tunnel_lng" ); + ent.v["origin"] = ( 1536.64, 2541.52, 227.89 ); + ent.v["angles"] = ( 300.447, 354.612, 1.91846 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_tunnel_lng" ); + ent.v["origin"] = ( 1515.01, 754.879, 254.526 ); + ent.v["angles"] = ( 295.408, 355.104, 3.89016 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2540.89, 526.966, -252.871 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 313.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -13.33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_tunnel_lng" ); + ent.v["origin"] = ( -247.439, 3228.58, -86.1382 ); + ent.v["angles"] = ( 322.147, 1.08707, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2703.33, 2702.6, -254.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 44.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -13.33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2248.2, 3157.73, -254.552 ); + ent.v["angles"] = ( 359.269, 45, -1.68214 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -12.6; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 62.444, 317.355, 2.12501 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1163.29, 328.425, 1.60033 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1160.36, 3061.59, 8.01865 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2338.62, 324.698, -254.098 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 315.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14.4; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2715.29, 701.367, -252.68 ); + ent.v["angles"] = ( 359.331, 314, 0.743289 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -12.6; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 1780.44, -791.725, -251.274 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14.4; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 1579.28, -1301.22, -254.706 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 321.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -13.33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 492.648, 4328.35, 139.016 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 554.563, 4339.13, 138.994 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 843.435, 4366.28, -140 ); + ent.v["angles"] = ( 356.953, 184.993, -0.107418 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -251.936, 3846.3, -21.234 ); + ent.v["angles"] = ( 0.998782, 26, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 8.43061, 4507.15, -66.4063 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 280.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -42.9076, 3884.86, -88.3416 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 72.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_reactor_glw_blue" ); + ent.v["origin"] = ( -125.609, 4204.55, -62.2267 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_reactor_glw_blue" ); + ent.v["origin"] = ( -296.751, 4026.51, -65.2027 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 458.255, 414.337, 41.283 ); + ent.v["angles"] = ( 12, 89, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pak_tower_fire_flareup" ); + ent.v["origin"] = ( -2522.37, -1420.66, 1135.59 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_white_ribbon_sm" ); + ent.v["origin"] = ( -116.505, 2281.07, -56.0053 ); + ent.v["angles"] = ( 302.701, 119.927, -111.036 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_white_ribbon_sm" ); + ent.v["origin"] = ( -113.542, 2273.42, -56.9997 ); + ent.v["angles"] = ( 280.286, 298.824, 60.7822 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_pipe_md" ); + ent.v["origin"] = ( 1358.75, 861.347, -67 ); + ent.v["angles"] = ( 273, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_pipe_md" ); + ent.v["origin"] = ( 2168.52, 453.584, -136.875 ); + ent.v["angles"] = ( 275.657, 127.587, 120.513 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_pipe_md" ); + ent.v["origin"] = ( 2158.68, 2968.16, -135.875 ); + ent.v["angles"] = ( 276.082, 260.573, 99.4797 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 48.4325, 3085.08, -18.1431 ); + ent.v["angles"] = ( 17.9745, 183.154, 0.974222 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 2209.23, 1151.27, -118 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 2204.03, 1312.2, -118 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 2204.42, 2080.28, -115 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 2203.74, 2239.66, -116 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 2204.03, 2400.8, -115 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 2205.96, 989.217, -115 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 2206.18, 1473.58, -115 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 46.2152, 3123.58, -19.095 ); + ent.v["angles"] = ( 17.9546, 175.795, -1.29841 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 47.4133, 3123.03, 21.7425 ); + ent.v["angles"] = ( 332.042, 176.603, 1.594 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 50.6105, 3084.51, 21.4462 ); + ent.v["angles"] = ( 332.042, 183.397, -1.59399 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 46.7455, 3410.03, 21.8109 ); + ent.v["angles"] = ( 332.042, 176.603, 1.594 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 50.3758, 3373.47, 23.5146 ); + ent.v["angles"] = ( 332.042, 183.397, -1.59399 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 46.2486, 3412.54, -19.0266 ); + ent.v["angles"] = ( 17.9745, 176.846, -0.97422 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 48.1859, 3372.04, -18.0747 ); + ent.v["angles"] = ( 17.9745, 183.154, 0.974222 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1613.72, 1.84919, -145.7 ); + ent.v["angles"] = ( 271, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 2360.54, 1759.73, -119.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 2346.11, 1625.25, -119.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_windy" ); + ent.v["origin"] = ( 1095.33, 1796.66, 441.374 ); + ent.v["angles"] = ( 23.2062, 209.072, -1.51774 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -628.106, 1115.63, 179 ); + ent.v["angles"] = ( 12.8372, 56.7672, -2.06839 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_windy" ); + ent.v["origin"] = ( 122.955, -3.2102, 305.555 ); + ent.v["angles"] = ( 293.693, 179.684, -179.129 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( -594.228, 2172.06, 148 ); + ent.v["angles"] = ( 43.071, 31.2458, 0.785727 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( 343.986, 1832.83, 102 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 288.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( 282.813, 1971.61, 123 ); + ent.v["angles"] = ( 21.8738, 303.504, 2.07444 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( 347.617, 1562.74, 104 ); + ent.v["angles"] = ( 1, 73, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( 276.882, 1397.63, 113 ); + ent.v["angles"] = ( 10.9848, 58.9476, -0.791467 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( 305.728, 1467.02, 154 ); + ent.v["angles"] = ( 76, 63, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( 307.705, 1920.67, 158 ); + ent.v["angles"] = ( 78, 302, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( -304.354, 979.006, -10.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 264.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( -605.276, 1223.17, 159 ); + ent.v["angles"] = ( 43.8189, 324.02, -2.11248 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( 38.9152, 1166.13, 150 ); + ent.v["angles"] = ( 58.0104, 206.507, 4.57478 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( -37.2901, 2252.24, 154 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( 46.3434, 2215.2, 112 ); + ent.v["angles"] = ( 0.998781, 329, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( -361.707, 2274.12, 178 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( -281.915, 2283.1, 166 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( -256.86, 1096.86, 155 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( -523.549, 1163.93, 156 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pak_tower_fire_flareup" ); + ent.v["origin"] = ( -1966.49, -394.654, 755.994 ); + ent.v["angles"] = ( 270, 0, 6 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pak_tower_fire_flareup" ); + ent.v["origin"] = ( -2030.98, -89.1915, 754.989 ); + ent.v["angles"] = ( 270, 0, -1.04873 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pak_tower_fire_flareup" ); + ent.v["origin"] = ( -66.9895, 5287.92, 820.994 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pak_tower_fire_flareup" ); + ent.v["origin"] = ( -65.7024, 5639.93, 817.016 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pak_tower_fire_flareup" ); + ent.v["origin"] = ( -1206.65, 3831.67, 754.996 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pak_tower_fire_flareup" ); + ent.v["origin"] = ( -1207.57, 4169.89, 755.992 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pak_tower_fire_flareup" ); + ent.v["origin"] = ( -1624.74, 4167.85, 756.012 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 1033.32, 5418.75, -251.375 ); + ent.v["angles"] = ( 343.217, 173.295, -4.39633 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 967.025, 4994.57, -198.161 ); + ent.v["angles"] = ( 342.986, 178.849, 1.30263 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 956.206, 6636.01, -85.6845 ); + ent.v["angles"] = ( 344.935, 188.795, -8.67367 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flourescent_ceiling_panel_2" ); + ent.v["origin"] = ( 626.278, 108.84, 63.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flourescent_ceiling_panel_2" ); + ent.v["origin"] = ( 434.189, 502.997, 63.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flourescent_ceiling_panel_2" ); + ent.v["origin"] = ( 657.843, 503.237, 63.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 285.769, -284.931, -62.6031 ); + ent.v["angles"] = ( 271, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 1907.88, 3900.13, -254.966 ); + ent.v["angles"] = ( 1.41962, 8.94978, -0.931264 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 1919.06, 4451.61, -273 ); + ent.v["angles"] = ( 358.331, 313.975, 0.760531 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 802.238, 419.058, 164.796 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 372.526, 390.3, 149.796 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 611.184, 301.29, -16.0289 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 593.03, 247.997, -12.1327 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createexploder( "fx_light_flourescent_ceiling_panel" ); + ent.v["origin"] = ( 302.103, 422.394, 198.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 1653.11, 1959.95, 140.181 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 36.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 1652.1, 2116.06, 76.9224 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 42.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 1654.61, 2114.5, 202.007 ); + ent.v["angles"] = ( 38.9934, 358.715, -0.756238 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 1652.84, 2270.97, 139.844 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 36.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 2855.12, 1822.92, -254.283 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 2858.07, 2331.92, -255.29 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 2852.13, 1309.28, -254.586 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 2797.12, 783.196, -252.406 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 315.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 2230.1, -1758.09, -256 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 12.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 1822.7, -1101.26, -253.681 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 945.444, -1419.34, -256 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 308.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 904.072, -1468, -256.186 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 329.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 948.886, -1829.04, -254.054 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 323.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 1791.95, -760.125, -251.117 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 2586.65, 4774.31, -256 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 337.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 1848.42, 4244.04, -291.932 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 353.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 1142.96, 5000.99, -256 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 2615.41, 4881.06, -257.046 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 337.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2431.49, 2974.44, -255.827 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 41.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 904.328, 4556.19, -137 ); + ent.v["angles"] = ( 355.961, 188, -0.214773 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 1355.33, 3801.4, -143 ); + ent.v["angles"] = ( 357.839, 153.239, -1.71538 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_surface_heat_lg" ); + ent.v["origin"] = ( 2682.94, 1708.44, -237.968 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 272.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 598.449, -745.307, -106.792 ); + ent.v["angles"] = ( 359.68, 177.559, -14.0369 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -413.412, 568.263, -31.8336 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -258.783, 2187.77, 1647.49 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -220.862, 1201.96, 1649.09 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -733.75, 1674.27, 1649.28 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -221.534, 1160.39, 2261.35 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( 294.041, 1716.36, 2262.66 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -261.404, 2231.8, 2264.93 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -776.706, 1674.22, 2263.39 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -382.417, -2439.74, 1609.47 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( 132.321, -2912.44, 1606.8 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -856.343, -2954.65, 1609.55 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -385.128, -2397.32, 2222.61 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( 172.388, -2912.71, 2221.63 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -342.398, -3469.5, 2223.69 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -899.259, -2954.06, 2221.3 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -3376.09, 1368.94, 1372.42 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -3382.22, 1449.79, 1369.04 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -3369.01, 2046.71, 1371.93 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -3375.15, 2127.56, 1370.55 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -5392.77, 1897.97, 1387.32 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -5398.9, 1978.82, 1385.94 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -5385.64, 2578.22, 1387.95 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -5391.77, 2659.07, 1386.57 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -8664.25, 4067.45, 2780.68 ); + ent.v["angles"] = ( 270, 6, -36 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -8629.13, 4140.53, 2779.31 ); + ent.v["angles"] = ( 270, 6, -36 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -8962.56, 3457.44, 2781.74 ); + ent.v["angles"] = ( 270, 6, -36 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -8927.45, 3530.52, 2780.37 ); + ent.v["angles"] = ( 270, 6, -36 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -14253.8, 8722.18, 3019.15 ); + ent.v["angles"] = ( 270, 358.987, -44.9871 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -14199.9, 8782.76, 3017.78 ); + ent.v["angles"] = ( 270, 358.987, -44.9871 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -14687, 8186.61, 3021.05 ); + ent.v["angles"] = ( 270, 358.987, -44.9871 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -14633.1, 8247.19, 3019.68 ); + ent.v["angles"] = ( 270, 358.987, -44.9871 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -17050.5, 11070.7, 5193.99 ); + ent.v["angles"] = ( 270, 5.83284, -21.8328 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -17034.1, 11150.1, 5192.61 ); + ent.v["angles"] = ( 270, 5.83284, -21.8328 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -16908.4, 11744.8, 5194.22 ); + ent.v["angles"] = ( 270, 5.83284, -21.8328 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -16892, 11824.2, 5192.85 ); + ent.v["angles"] = ( 270, 5.83284, -21.8328 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -18807.4, 13264.3, 5848.29 ); + ent.v["angles"] = ( 270, 0.210089, -16.2101 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -18791.5, 13342.2, 5846.91 ); + ent.v["angles"] = ( 270, 0.210089, -16.2101 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -18932, 12677, 5848.67 ); + ent.v["angles"] = ( 270, 0.210089, -16.2101 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -18943, 12605.4, 5848.05 ); + ent.v["angles"] = ( 270, 0.210089, -16.2101 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( 255.157, 1714.3, 1648.62 ); + ent.v["angles"] = ( 270, 0.210089, -16.2101 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 2495.56, -2161.46, -202.527 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 317.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 301.905, 583.844, 119.513 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 235.125, 39.5175, 109.522 ); + ent.v["angles"] = ( 15, 359, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 682.204, -810.708, -120.801 ); + ent.v["angles"] = ( 281.042, 264.966, 95.3417 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1310.82, 2254.2, 40 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1230.34, 2221.4, 34 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1284.24, 2062.03, 41.75 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1358.59, 2043.55, 38.75 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1363.36, 2137.91, 40 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1138.79, 2146.31, 37 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 976.226, 1609.79, -23.7989 ); + ent.v["angles"] = ( 345.002, 180.035, -0.267937 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 978.062, 1784.1, -31.8308 ); + ent.v["angles"] = ( 342.045, 174.795, 1.29841 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1244.56, 1410.91, 155.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1246.82, 1385.41, 155.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1380.96, 1334.25, 165.805 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1411.17, 1259.32, 168.97 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1180.59, 1150.99, 175.107 ); + ent.v["angles"] = ( 360, 270, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1269.76, 1169.44, 172.381 ); + ent.v["angles"] = ( 360, 270, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1259.92, 1148.36, 173.74 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1386.93, 1132.01, 174.639 ); + ent.v["angles"] = ( 360, 270, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 615.146, 3146.84, 133.575 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 397.977, 2928.55, -18.2847 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 630.564, 3479.88, -5.07309 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 353.523, 3479.88, -12.0482 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 355.127, 2795.88, 122.608 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1080.94, -499.194, -65.6055 ); + ent.v["angles"] = ( 271, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_smoke" ); + ent.v["origin"] = ( 786.057, 1832.72, -64.5984 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_smoke" ); + ent.v["origin"] = ( 912.885, 1709.01, -70.6813 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_smoke" ); + ent.v["origin"] = ( 783.76, 1549.92, -74 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_smoke" ); + ent.v["origin"] = ( 1355.86, 2038.66, 55.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 1676.42, 3954.45, -136 ); + ent.v["angles"] = ( 355.598, 174.308, -1.37921 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 1672.36, 4262.44, -136 ); + ent.v["angles"] = ( 355.598, 174.308, -1.37921 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 930.409, -2402.01, -266.954 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 350.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -181.14, -546.381, 7.51834 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 357.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 148.284, -1035.87, -66.3374 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 147.573, -444.587, -54.984 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 135.61, -678.836, 9.00472 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 167.83, -688.309, 11.0114 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_pipe_md" ); + ent.v["origin"] = ( -234.22, 4430.22, -138 ); + ent.v["angles"] = ( 356, 250, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -96.3175, -1068.69, -60.0817 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 83.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -1630.82, 3082.7, 1191.56 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -1748.52, 2944.24, 1193.61 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -223.43, 4153.4, 1191.59 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -359.856, 4271.67, 1190.11 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); + ent.v["origin"] = ( -2030.64, -90.0045, 751.999 ); + ent.v["angles"] = ( 270, 0, -1.04873 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); + ent.v["origin"] = ( -1961.2, -394.981, 752.995 ); + ent.v["angles"] = ( 270, 0, -1.04873 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); + ent.v["origin"] = ( -2518.63, -1424.74, 1135.59 ); + ent.v["angles"] = ( 270, 0, -1.04873 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); + ent.v["origin"] = ( -1200.41, 3827.36, 754.992 ); + ent.v["angles"] = ( 270, 0, -1.04873 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); + ent.v["origin"] = ( -1209.11, 4178.67, 752.996 ); + ent.v["angles"] = ( 270, 0, -1.04873 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); + ent.v["origin"] = ( -1614.69, 4160.64, 751.993 ); + ent.v["angles"] = ( 270, 0, -1.04873 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); + ent.v["origin"] = ( -63.1761, 5283.47, 823.987 ); + ent.v["angles"] = ( 270, 0, -1.04873 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); + ent.v["origin"] = ( -62.4625, 5629.45, 827.004 ); + ent.v["angles"] = ( 270, 0, -1.04873 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( -507.734, 2225.69, 160.177 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( 758.973, -9.47859, 375.484 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 644.61, -471.975, -72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 174.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 591.416, -897.14, -143.089 ); + ent.v["angles"] = ( 359.68, 177.559, -8.03697 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 985.664, -752.8, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 226.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1012.12, 16.115, -73 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 237.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 830.071, -318.7, -72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 192.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1258.43, 436.039, -72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1042.31, 550.025, -72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 151.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 704.828, 863.625, -72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 267.112, 943.005, -72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 212.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 42.6443, 582.215, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 222.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( -32.5658, 798.267, -72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 188.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1974.4, 614.669, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1901.83, 167.6, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 167.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1744.92, -276.104, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 183.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1636.32, -507.592, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1361.51, -651.467, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1303.66, -1032.85, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 183.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 37.5944, -216.892, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 2047.69, 2958.23, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 192.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 2073.05, 3197.92, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 174.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1789.56, 3089.11, -136.875 ); + ent.v["angles"] = ( 359, 176, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1790.29, 3726.06, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 564.93, 4233.33, -129.715 ); + ent.v["angles"] = ( 0.22494, 177.026, 13.9981 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 565.547, 4077.68, -92.0285 ); + ent.v["angles"] = ( 0.22494, 177.026, 13.9981 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1114.87, 3399.59, -74 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 155.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( -20.8164, -79.1724, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 141.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1607.48, -748.065, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1969.64, 2748.34, -137.875 ); + ent.v["angles"] = ( 359, 174, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1051.04, 3057.55, -72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1011.96, 2732, -72 ); + ent.v["angles"] = ( 359, 214, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 946.525, 1830.26, 56.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 171.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 926.424, 1544.23, 56.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 192.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1127.7, 1698.44, 56.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 182.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 712.302, 1810.06, 56.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 174.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 739.189, 1557.63, 56.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 998.01, 1202.28, -28.7682 ); + ent.v["angles"] = ( 343.039, 188.191, -19.8711 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 695.873, 1297.28, 0.403737 ); + ent.v["angles"] = ( 346.805, 186.796, -19.508 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 1000.2, 2193.69, -29.8839 ); + ent.v["angles"] = ( 344.143, 175.477, 17.6421 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 696.221, 2207.74, -28.6999 ); + ent.v["angles"] = ( 346.05, 176.102, 17.4815 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 886.939, 3738.72, -73 ); + ent.v["angles"] = ( 359.054, 183, -1.05096 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 724.335, 2487.38, -72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 84.3099, 2508.05, -72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 144.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( -156.639, 2723.24, -73 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 203.962, 3667.24, -65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 202.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 5.6836, 2701.68, -75 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 183.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 619.41, 3906.89, -73 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 365.039, 677.169, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 165.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 579.99, -1230.18, -143.322 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 991.17, -974.482, -136.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 215.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_garage_parking_red" ); + ent.v["origin"] = ( 784.399, 1793.23, 42.088 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_garage_parking_red" ); + ent.v["origin"] = ( 793.055, 1587.47, 42.7344 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -309.579, 2465.72, 56.7041 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 96.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1292.03, 2439.45, -64 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1263.48, -393.252, -135.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1723.84, 912.907, -111.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1650.06, 597.297, -135.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1297.95, 704.378, -64 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1285.67, 966.865, -64 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1304.77, 2683.11, -64 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1099.79, 3891.11, -63.6043 ); + ent.v["angles"] = ( 271, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( -431.998, 2887.33, -61.3418 ); + ent.v["angles"] = ( 271, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1160.2, 3326.74, -64 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1178.16, 75.2075, -64 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 806.555, -768.155, -135.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1714.07, 2458.33, -111.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1689.37, 2783.74, -135.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createexploder( "fx_light_flourescent_ceiling_panel" ); + ent.v["origin"] = ( 337.627, 2958.35, 218.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -392.836, 2232.72, -53.5544 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 16.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -418.629, 2225.84, -37.1378 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 19.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -444.78, 2216.05, -21.133 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 21.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -470.448, 2204.66, -5.18853 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 25.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -495.055, 2193.68, 11.944 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 27.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -520.725, 2179.21, 27.287 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 30.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -544.308, 2164.97, 43.6084 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 33.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -415.404, 2313.01, -53.5861 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 16.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -445.571, 2303.76, -37.1427 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 19.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -475.071, 2293.91, -21.3383 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 22.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -504.726, 2280.79, -5.39598 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 25.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -532.622, 2266.46, 11.4135 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 27.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -562.179, 2250.49, 27.1724 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 30.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -590.045, 2233.93, 43.397 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 33.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -575.44, 2107.32, 120.486 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 218.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -578.235, 1286.51, 120.38 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 140.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( 4.25729, 2165.8, 119.477 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 332.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( 5.9098, 1225.69, 119.504 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 28.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( 381.959, 3500.25, 50.7754 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 96.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( 574.335, 3500.18, 50.6501 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 96.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -588.975, 1160.37, 43.8079 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 328.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -543.702, 1229.46, 43.813 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 326.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -561.56, 1143.04, 27.5869 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -532.975, 1127.7, 11.3637 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 333.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -504.153, 1113.53, -5.74658 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 336.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -474.654, 1100.6, -21.627 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 339.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -445.134, 1089.9, -37.8186 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 341.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -414.916, 1081.22, -53.8621 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 344.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -392.365, 1160.54, -53.7965 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 344.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -418.128, 1168.66, -37.3554 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 341.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -444.31, 1177.31, -21.2478 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 339.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -470.106, 1188.01, -5.62566 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 336.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -495.947, 1200.82, 11.5769 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 332.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -519.802, 1214.13, 27.2616 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 329.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -12.2361, 1198.32, 114.226 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 289.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( 1270.12, 3712.27, 4.09926 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 261.827, -500.631, -118.289 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 261.875, -619.5, -118.429 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 261.875, -744.036, -118.209 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 261.845, -864.272, -118.369 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 38.1894, -968.449, -118.972 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 38.125, -843.974, -118.37 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 38.125, -716.021, -118.284 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 38.125, -588.216, -118.307 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -177.875, -480.953, -46.3274 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -121.108, -531.875, -46.2871 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 204.838, -433.124, -118.206 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 92.6293, -433.124, -118.335 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 685.08, -1584.64, -136 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 691.715, -1851.81, -136 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 565.265, -1610, -144 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 450.379, -1786.14, -144 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -127.874, 2085.74, 52 ); + ent.v["angles"] = ( 270, 0, -12 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( 62.1835, 1955.89, 52 ); + ent.v["angles"] = ( 270, 2.04541, -44.0452 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( 156.455, 1754.86, 52 ); + ent.v["angles"] = ( 270, 0, -83 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( 110.528, 1513.59, 52 ); + ent.v["angles"] = ( 270, 356.634, -116.633 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -26.0349, 1352.2, 52 ); + ent.v["angles"] = ( 270, 0, -147 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -251.151, 1307.7, 52 ); + ent.v["angles"] = ( 270, 0, 176 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -370.46, 2080.32, 52 ); + ent.v["angles"] = ( 270, 0, -162 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -555.858, 1956.93, 52 ); + ent.v["angles"] = ( 270, 0, -123 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -638.55, 1752.3, 52 ); + ent.v["angles"] = ( 270, 356.82, -95.8201 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -622.411, 1541.89, 52 ); + ent.v["angles"] = ( 270, 3.01279, -74.0128 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -494.614, 1369.74, 52 ); + ent.v["angles"] = ( 270, 0, -41 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -254.464, 1896.4, 52 ); + ent.v["angles"] = ( 270, 3.01279, -74.0128 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -37.1649, 1794.69, 52 ); + ent.v["angles"] = ( 270, 3.01279, -74.0128 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -141.764, 1539.79, 52 ); + ent.v["angles"] = ( 270, 3.01279, -74.0128 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -258.127, 1728.27, 52 ); + ent.v["angles"] = ( 270, 3.01279, -74.0128 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -493.17, 1762.39, 52 ); + ent.v["angles"] = ( 270, 3.01279, -74.0128 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -368.487, 1533.22, 52 ); + ent.v["angles"] = ( 270, 3.01279, -74.0128 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1977.98, 366.526, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1464.51, -889.135, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_md" ); + ent.v["origin"] = ( -586.923, 1895.59, 114 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_md" ); + ent.v["origin"] = ( 12.161, 1428.43, 137 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_md" ); + ent.v["origin"] = ( -35.3065, 1986.37, 126 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_md" ); + ent.v["origin"] = ( -246.795, 1728.38, 122 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_md" ); + ent.v["origin"] = ( -612.306, 1452.68, 136 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_sm" ); + ent.v["origin"] = ( -317.229, 2513.04, -21 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_sm" ); + ent.v["origin"] = ( -296.412, 891.759, -31 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_sm" ); + ent.v["origin"] = ( -245.199, 1286.94, 131 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_sm" ); + ent.v["origin"] = ( -327.195, 2103.62, 119 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_sm" ); + ent.v["origin"] = ( 506.353, 1695.17, 161 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( 534.871, 1681.48, 100.529 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_sm" ); + ent.v["origin"] = ( 293.471, 1676.48, 194 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -657.957, 2097.38, 93 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -611.401, 1250.63, 85 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( 138.519, 2063.32, 106 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( 125.064, 1331.07, 100.534 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -296.854, 1081.47, -9.73779 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -296.274, 2329.6, -16.8466 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -474.897, 2248.37, 33.3115 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -619.981, 2157.09, 163.496 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -421.943, 2258.39, 152.995 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -212.626, 2289.77, 150.788 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -5.42307, 2240.35, 102 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -312.504, 2560.61, -58 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_md" ); + ent.v["origin"] = ( -884.266, 1674.01, 65 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -51.6081, 2247.67, 159 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( 252.823, 1391.73, 154.02 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( 254.558, 1981.93, 156 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( 23.0116, 1163.25, 93 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -11.0243, 1151.77, 147.87 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -461.387, 1144.32, 39.4494 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -302.044, 853.825, -56.8727 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createexploder( "fx_light_flourescent_ceiling_panel" ); + ent.v["origin"] = ( 337.668, 2899.52, 218.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_light_flourescent_ceiling_panel" ); + ent.v["origin"] = ( 302.264, 478.068, 198.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -387.346, 1313.75, 213.748 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -131.287, 1312.74, 213.778 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -643.327, 1568.19, 213.577 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -387.359, 1568.09, 213.608 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -131.384, 1569.09, 213.863 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( 124.835, 1568.17, 212.634 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -643.294, 1824.85, 213.486 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -387.312, 1824.95, 213.401 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -131.294, 1823.67, 213.298 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( 124.655, 1824.71, 213.457 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -387.337, 2080.5, 213.691 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -131.268, 2080.18, 213.265 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -348.716, 1311.97, 213.357 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -92.7097, 1311.74, 213.298 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( 163.371, 1568.28, 213.722 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -92.7388, 1569.08, 213.158 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -348.777, 1567.77, 213.012 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -604.806, 1568.54, 212.862 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( 163.318, 1823.49, 213.499 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -92.6991, 1825.02, 213.447 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -348.672, 1824.18, 213.305 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -604.725, 1823.71, 213.342 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -92.6829, 2080.23, 213.458 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -348.7, 2080.17, 213.221 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flourescent_ceiling_panel_2" ); + ent.v["origin"] = ( 441.882, 412.978, 262.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flourescent_ceiling_panel_2" ); + ent.v["origin"] = ( 442.301, 539.491, 263.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flourescent_ceiling_panel_2" ); + ent.v["origin"] = ( 729.979, 413.208, 263.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flourescent_ceiling_panel_2" ); + ent.v["origin"] = ( 730.475, 540.783, 263.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( -389.632, 1117.59, 154.528 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool_dbl_md" ); + ent.v["origin"] = ( 498.304, 3156.75, 165.162 ); + ent.v["angles"] = ( 270, 357.879, 93.121 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool_dbl_md" ); + ent.v["origin"] = ( 370.552, 3155.73, 165.162 ); + ent.v["angles"] = ( 270, 357.879, 93.121 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool_dbl_md" ); + ent.v["origin"] = ( 370.2, 3316.78, 165.161 ); + ent.v["angles"] = ( 270, 357.879, 93.121 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool_dbl_md" ); + ent.v["origin"] = ( 498.256, 3316.51, 165.161 ); + ent.v["angles"] = ( 270, 357.879, 93.121 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool_dbl_md" ); + ent.v["origin"] = ( 628.524, 3316.75, 164.157 ); + ent.v["angles"] = ( 270, 357.879, 93.121 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool_dbl_md" ); + ent.v["origin"] = ( 697.352, 3188.03, 165.153 ); + ent.v["angles"] = ( 270, 357.879, 93.121 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 580.749, 3439.96, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 644.765, 3441.41, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 708.357, 3440.7, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 515.904, 3440.59, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 452.164, 3440.98, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 388.406, 3440.29, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 323.834, 3440.15, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 324.482, 3384.12, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 388.033, 3384.03, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 452.921, 3384.28, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 516.798, 3383.45, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 580.312, 3384.78, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 644.848, 3384.15, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 708.885, 3384.72, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 691.215, 2995.59, 63.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 691.496, 3058.03, 63.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 691.75, 3122.56, 63.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 451.883, 3059.23, 63.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 515.291, 3057.53, 63.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 579.466, 3059.96, 63.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 451.335, 2995.26, 63.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 515.382, 2995.34, 63.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 579.961, 2995.2, 63.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_wrm_sm" ); + ent.v["origin"] = ( 1095.23, 1960.3, 64.125 ); + ent.v["angles"] = ( 338, 46, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 1219.82, -3358.2, -225.966 ); + ent.v["angles"] = ( 340.226, 173.539, -4.47296 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1014.35, -2854.36, -255.925 ); + ent.v["angles"] = ( 327.963, 181.99, -0.407737 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 859.47, -3279.31, -105.188 ); + ent.v["angles"] = ( 356.181, 172.305, -4.21809 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -771.867, -1087.62, -33.9863 ); + ent.v["angles"] = ( 348.908, 218.428, -17.0545 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -817.333, -1822.73, -34 ); + ent.v["angles"] = ( 345.931, 218.807, -7.13726 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -1116.02, 1795.57, 39 ); + ent.v["angles"] = ( 355.615, 238.525, 1.20706 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( -1118.98, 2590.52, -16 ); + ent.v["angles"] = ( 351.764, 220.755, -0.304766 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( -944.947, 4077.54, 53.4589 ); + ent.v["angles"] = ( 3.33533, 259.147, -17.0191 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 658.361, 216.263, -63.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 227.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 651.54, 532.81, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 242.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 470.363, 491.088, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 712.61, 3052.12, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 249.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 492.822, 2899.12, 72.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1234.88, 2010.09, 49 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_smoke" ); + ent.v["origin"] = ( 1127.46, 2234.77, 55.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_smoke" ); + ent.v["origin"] = ( 1134.16, 2003.34, 55.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_smoke" ); + ent.v["origin"] = ( 1379.54, 2273.12, 55.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( 1334.13, 1376.44, 65.125 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( 1164, 1386.85, 83 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( 1354.51, 1168.48, 81.125 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( 1228.09, 1136.18, 70 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool_dbl_md" ); + ent.v["origin"] = ( 1243.18, 1267.06, 171.158 ); + ent.v["angles"] = ( 270, 357.879, 93.121 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 258.569, 1469.85, 114.504 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 334.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 262.837, 1917.35, 114.221 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 22.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -9.18739, 2193.57, 114.655 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 63.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -568.462, 2135.15, 114.072 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 126.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -561.284, 1252.87, 114.373 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 228.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_white_ribbon_sm" ); + ent.v["origin"] = ( -112.213, 1115.25, -56.5153 ); + ent.v["angles"] = ( 302.701, 119.927, -111.036 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_white_ribbon_sm" ); + ent.v["origin"] = ( -109.25, 1107.61, -57.5097 ); + ent.v["angles"] = ( 280.286, 298.824, 60.7822 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; +} diff --git a/MP/Maps/Meltdown/clientscripts/mp/mp_meltdown.csc b/MP/Maps/Meltdown/clientscripts/mp/mp_meltdown.csc new file mode 100644 index 0000000..e700265 --- /dev/null +++ b/MP/Maps/Meltdown/clientscripts/mp/mp_meltdown.csc @@ -0,0 +1,30 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_meltdown_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_meltdown_amb; + +main() +{ + level.worldmapx = 2334; + level.worldmapy = 1722; + level.worldlat = 25.2388; + level.worldlong = 64.4056; + clientscripts\mp\_load::main(); + thread clientscripts\mp\mp_meltdown_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_meltdown_amb::main(); + setsaveddvar( "compassmaxrange", "2100" ); + setsaveddvar( "r_waterwavespeed", ".1246294 .250611 .369935 .131685" ); + setsaveddvar( "r_waterwaveamplitude", "7.89653 9.83175 9.22 7.62334" ); + setsaveddvar( "r_waterwavewavelength", "228.62 537.375 436.002 303.18" ); + setsaveddvar( "r_waterwavesteepness", "1 1 1 1" ); + setsaveddvar( "r_waterwaveangle", "156.581 191.305 133.964 165.722" ); + setsaveddvar( "r_waterwavephase", "3.69 2.53 1.16 1.94" ); + thread waitforclient( 0 ); +/# + println( "*** Client : mp_meltdown running..." ); +#/ +} diff --git a/MP/Maps/Meltdown/clientscripts/mp/mp_meltdown_amb.csc b/MP/Maps/Meltdown/clientscripts/mp/mp_meltdown_amb.csc new file mode 100644 index 0000000..bc06f3e --- /dev/null +++ b/MP/Maps/Meltdown/clientscripts/mp/mp_meltdown_amb.csc @@ -0,0 +1,68 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "default_outdoor", 1 ); + setambientroomtone( "default_outdoor", "amb_wind_extreior_2d", 0.2, 0.5 ); + setambientroomreverb( "default_outdoor", "meltdown_outdoor", 1, 1 ); + setambientroomcontext( "default_outdoor", "ringoff_plr", "outdoor" ); + declareambientroom( "meltdown_partial_room" ); + setambientroomreverb( "meltdown_partial_room", "meltdown_partial_room", 1, 1 ); + setambientroomcontext( "meltdown_partial_room", "ringoff_plr", "outdoor" ); + declareambientroom( "meltdown_small_room" ); + setambientroomreverb( "meltdown_small_room", "meltdown_small_room", 1, 1 ); + setambientroomcontext( "meltdown_small_room", "ringoff_plr", "indoor" ); + declareambientroom( "meltdown_small_room_partial" ); + setambientroomreverb( "meltdown_small_room_partial", "meltdown_small_room", 1, 1 ); + setambientroomcontext( "meltdown_small_room_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "meltdown_medium_room" ); + setambientroomreverb( "meltdown_medium_room", "meltdown_medium_room", 1, 1 ); + setambientroomcontext( "meltdown_medium_room", "ringoff_plr", "indoor" ); + declareambientroom( "meltdown_medium_room_partial" ); + setambientroomreverb( "meltdown_medium_room_partial", "meltdown_medium_room", 1, 1 ); + setambientroomcontext( "meltdown_medium_room_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "meltdown_large_room" ); + setambientroomreverb( "meltdown_large_room", "meltdown_large_room", 1, 1 ); + setambientroomcontext( "meltdown_large_room", "ringoff_plr", "indoor" ); + declareambientroom( "meltdown_open_room" ); + setambientroomreverb( "meltdown_open_room", "meltdown_open_room", 1, 1 ); + setambientroomcontext( "meltdown_open_room", "ringoff_plr", "outdoor" ); + declareambientroom( "meltdown_dense_hallway" ); + setambientroomreverb( "meltdown_dense_hallway", "meltdown_dense_hallway", 1, 1 ); + setambientroomcontext( "meltdown_dense_hallway", "ringoff_plr", "indoor" ); + declareambientroom( "meltdown_stone_room" ); + setambientroomreverb( "meltdown_stone_room", "meltdown_stone_room", 1, 1 ); + setambientroomcontext( "meltdown_stone_room", "ringoff_plr", "indoor" ); + declareambientroom( "meltdown_container" ); + setambientroomreverb( "meltdown_container", "meltdown_container", 1, 1 ); + setambientroomcontext( "meltdown_container", "ringoff_plr", "indoor" ); + declareambientroom( "meltdown_tower" ); + setambientroomreverb( "meltdown_tower", "meltdown_tower", 1, 1 ); + setambientroomcontext( "meltdown_tower", "ringoff_plr", "indoor" ); + thread snd_start_autofx_audio(); + thread snd_play_loopers(); +} + +snd_play_loopers() +{ + playloopat( "amb_ribbon_flap", ( 258, -617, -2 ) ); + playloopat( "amb_ribbon_flap", ( 1364, 839, 30 ) ); + playloopat( "amb_ribbon_flap", ( 1364, 714, -2 ) ); + playloopat( "amb_ceiling_fan", ( 678, 3206, 102 ) ); + playloopat( "amb_ceiling_fan", ( 399, 3205, 105 ) ); +} + +snd_start_autofx_audio() +{ + snd_play_auto_fx( "fx_mp_water_rain_cooling_tower", "amb_water_in_silo", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_insects_swarm_lg_light", "amb_insects", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_water_drip_light_long", "amb_water_drips", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_mp_vent_heat_distort", "amb_heat_distort", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_vent_steam_windy", "amb_exhaust", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_vent_steam_line", "amb_exhaust", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_light_outdoor_wall03_white", "amb_wall_lights", 0, 0, 0, 0 ); +} diff --git a/MP/Maps/Meltdown/clientscripts/mp/mp_meltdown_fx.csc b/MP/Maps/Meltdown/clientscripts/mp/mp_meltdown_fx.csc new file mode 100644 index 0000000..e24d14d --- /dev/null +++ b/MP/Maps/Meltdown/clientscripts/mp/mp_meltdown_fx.csc @@ -0,0 +1,72 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\createfx\mp_meltdown_fx; +#include clientscripts\mp\_fx; + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_fumes_vent_xsm_int"] = loadfx( "maps/mp_maps/fx_mp_fumes_vent_xsm_int" ); + level._effect["fx_mp_steam_pipe_md"] = loadfx( "maps/mp_maps/fx_mp_steam_pipe_md" ); + level._effect["fx_mp_vent_heat_distort"] = loadfx( "maps/mp_maps/fx_mp_vent_heat_distort" ); + level._effect["fx_mp_vent_steam_line"] = loadfx( "maps/mp_maps/fx_mp_vent_steam_line" ); + level._effect["fx_mp_vent_steam_windy"] = loadfx( "maps/mp_maps/fx_mp_vent_steam_windy" ); + level._effect["fx_mp_vent_steam_windy_lg"] = loadfx( "maps/mp_maps/fx_mp_vent_steam_windy_lg" ); + level._effect["fx_mp_steam_smoke"] = loadfx( "maps/mp_maps/fx_mp_steam_smoke" ); + level._effect["fx_mp_water_rain_cooling_tower"] = loadfx( "maps/mp_maps/fx_mp_water_rain_cooling_tower" ); + level._effect["fx_mp_water_rain_cooling_tower_splsh_200"] = loadfx( "maps/mp_maps/fx_mp_water_rain_cooling_tower_splsh_200" ); + level._effect["fx_mp_water_drip_light_long"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); + level._effect["fx_mp_steam_cooling_tower"] = loadfx( "maps/mp_maps/fx_mp_steam_cooling_tower" ); + level._effect["fx_mp_steam_cooling_tower_blocker"] = loadfx( "maps/mp_maps/fx_mp_steam_cooling_tower_blocker" ); + level._effect["fx_mp_steam_cooling_tower_door"] = loadfx( "maps/mp_maps/fx_mp_steam_cooling_tower_door" ); + level._effect["fx_mp_steam_cooling_tower_int_top"] = loadfx( "maps/mp_maps/fx_mp_steam_cooling_tower_int_top" ); + level._effect["fx_mp_steam_cooling_tower_thck_sm"] = loadfx( "maps/mp_maps/fx_mp_steam_cooling_tower_thck_sm" ); + level._effect["fx_mp_steam_cooling_tower_thck_md"] = loadfx( "maps/mp_maps/fx_mp_steam_cooling_tower_thck_md" ); + level._effect["fx_mp_steam_cooling_tower_thck_xsm"] = loadfx( "maps/mp_maps/fx_mp_steam_cooling_tower_thck_xsm" ); + level._effect["fx_water_pipe_spill_ocean"] = loadfx( "water/fx_water_pipe_spill_ocean" ); + level._effect["fx_water_surface_heat_lg"] = loadfx( "water/fx_water_surface_heat_lg" ); + level._effect["fx_water_surface_heat_md"] = loadfx( "water/fx_water_surface_heat_md" ); + level._effect["fx_mp_steam_tunnel"] = loadfx( "maps/mp_maps/fx_mp_steam_tunnel" ); + level._effect["fx_mp_steam_tunnel_lng"] = loadfx( "maps/mp_maps/fx_mp_steam_tunnel_lng" ); + level._effect["fx_water_wave_break_md"] = loadfx( "water/fx_water_wave_break_md" ); + level._effect["fx_water_wave_break_lg"] = loadfx( "water/fx_water_wave_break_lg" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_paper_interior_short"] = loadfx( "debris/fx_paper_interior_short" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_light_gray_white_ribbon_sm"] = loadfx( "light/fx_light_gray_white_ribbon_sm" ); + level._effect["fx_light_flourescent_ceiling_panel_2"] = loadfx( "light/fx_light_flourescent_ceiling_panel_2" ); + level._effect["fx_light_reactor_glw_blue"] = loadfx( "light/fx_light_reactor_glw_blue" ); + level._effect["fx_light_beacon_red_blink_fst_sm"] = loadfx( "light/fx_light_beacon_red_blink_fst_sm" ); + level._effect["fx_light_garage_parking_red"] = loadfx( "light/fx_light_emergency_red" ); + level._effect["fx_light_m_p6_ext_wall_sml"] = loadfx( "light/fx_light_m_p6_ext_wall_sml" ); + level._effect["fx_light_outdoor_wall03_white"] = loadfx( "light/fx_light_outdoor_wall03_white" ); + level._effect["fx_light_flourescent_ceiling_panel"] = loadfx( "light/fx_light_flourescent_ceiling_panel_soft" ); + level._effect["fx_light_recessed_cool_sm"] = loadfx( "light/fx_light_recessed_cool_sm_soft" ); + level._effect["fx_light_floodlight_sqr_wrm_sm"] = loadfx( "light/fx_light_floodlight_sqr_wrm_sm" ); + level._effect["fx_light_flour_glow_cool_dbl_md"] = loadfx( "light/fx_light_flour_glow_cool_dbl_md" ); + level._effect["fx_lf_mp_meltdown_sun1"] = loadfx( "lens_flares/fx_lf_mp_meltdown_sun1" ); + level._effect["fx_sand_gust_ground_sm"] = loadfx( "dirt/fx_sand_gust_ground_sm_slw" ); + level._effect["fx_sand_gust_ground_md"] = loadfx( "dirt/fx_sand_gust_ground_md_slw" ); + level._effect["fx_sand_gust_door"] = loadfx( "dirt/fx_sand_gust_door_slw" ); + level._effect["fx_sand_blowing_lg_vista"] = loadfx( "dirt/fx_sand_blowing_lg_vista" ); + level._effect["fx_dust_gray_street_low"] = loadfx( "dirt/fx_dust_gray_street_low" ); + level._effect["fx_dust_swirl_sm_gray_runner"] = loadfx( "dirt/fx_dust_swirl_sm_gray_runner" ); + level._effect["fx_pak_tower_fire_flareup"] = loadfx( "maps/mp_maps/fx_mp_fire_tower_flareup" ); + level._effect["fx_mp_fire_tower_flareup_amb"] = loadfx( "maps/mp_maps/fx_mp_fire_tower_flareup_amb" ); +} + +main() +{ + clientscripts\mp\createfx\mp_meltdown_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} diff --git a/MP/Maps/Meltdown/maps/mp/createart/mp_meltdown_art.gsc b/MP/Maps/Meltdown/maps/mp/createart/mp_meltdown_art.gsc new file mode 100644 index 0000000..1a6f355 --- /dev/null +++ b/MP/Maps/Meltdown/maps/mp/createart/mp_meltdown_art.gsc @@ -0,0 +1,20 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + level.tweakfile = 1; + setdvar( "visionstore_glowTweakEnable", "0" ); + setdvar( "visionstore_glowTweakRadius0", "5" ); + setdvar( "visionstore_glowTweakRadius1", "" ); + setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); + setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); + setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); + setdvar( "visionstore_glowTweakBloomIntensity1", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); + visionsetnaked( "mp_meltdown", 1 ); + setdvar( "r_lightGridEnableTweaks", 1 ); + setdvar( "r_lightGridIntensity", 1.0 ); + setdvar( "r_lightGridContrast", 0 ); +} diff --git a/MP/Maps/Meltdown/maps/mp/createfx/mp_meltdown_fx.gsc b/MP/Maps/Meltdown/maps/mp/createfx/mp_meltdown_fx.gsc new file mode 100644 index 0000000..86abd94 --- /dev/null +++ b/MP/Maps/Meltdown/maps/mp/createfx/mp_meltdown_fx.gsc @@ -0,0 +1,2591 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower" ); + ent.v["origin"] = ( -238.789, 1703.29, 390.252 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 1510.04, 4090.67, -140 ); + ent.v["angles"] = ( 2.84124, 163.841, -0.400075 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1450.14, 4421.73, -138.744 ); + ent.v["angles"] = ( 357.96, 178.986, 0.275462 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_meltdown_sun1" ); + ent.v["origin"] = ( 9906.81, -26068.5, 6893.41 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower" ); + ent.v["origin"] = ( -64.1019, 1658.64, 1523.65 ); + ent.v["angles"] = ( 356, 176, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -28.178, 2362.37, 202.125 ); + ent.v["angles"] = ( 13.9832, 248.09, 0.642511 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -215.89, 2393.49, 197.125 ); + ent.v["angles"] = ( 16.0367, 266.441, -0.475019 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( 440.583, 1906.32, 195.125 ); + ent.v["angles"] = ( 15.4495, 204.378, 4.31785 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( 334.9, 2096.3, 201.125 ); + ent.v["angles"] = ( 11.5226, 215.972, 1.56318 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( 149.167, 2275.99, 203 ); + ent.v["angles"] = ( 10.9861, 236.944, -0.530442 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -437.23, 2367.23, 191.125 ); + ent.v["angles"] = ( 12.0831, 287.847, -1.11472 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( 439.715, 1472.3, 192.125 ); + ent.v["angles"] = ( 14.9925, 161.068, 0.430335 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( 368.633, 1340.01, 195.125 ); + ent.v["angles"] = ( 16.5638, 145.376, -4.13018 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -652.51, 2263.27, 202 ); + ent.v["angles"] = ( 11.1192, 305.063, 0.422903 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( 220.939, 1160.41, 196 ); + ent.v["angles"] = ( 15.9893, 131.08, 0.608138 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( 79.9473, 1068.62, 187 ); + ent.v["angles"] = ( 16.0195, 115.029, 0.701384 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -78.513, 1015.27, 187.125 ); + ent.v["angles"] = ( 14.0173, 101, -0.982402 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -263.352, 992.556, 192.125 ); + ent.v["angles"] = ( 14.9981, 87.9662, -0.215232 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -440.524, 1026.24, 193.125 ); + ent.v["angles"] = ( 12.9678, 70.1048, 0.922636 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -761.948, 1230.87, 199 ); + ent.v["angles"] = ( 10.9932, 41.9725, -0.107821 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -778.574, 2148.34, 199 ); + ent.v["angles"] = ( 11.9986, 319.979, -0.159912 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -881.06, 1970.77, 195 ); + ent.v["angles"] = ( 10.8461, 339.182, 1.75937 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -937.289, 1724.15, 193 ); + ent.v["angles"] = ( 12.998, 358.974, -0.23086 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -860.88, 1367.33, 199 ); + ent.v["angles"] = ( 14.979, 27.1056, 0.803426 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_pipe_spill_ocean" ); + ent.v["origin"] = ( 2258.74, 1595.08, -166.13 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_pipe_spill_ocean" ); + ent.v["origin"] = ( 2256.42, 1694.89, -163.962 ); + ent.v["angles"] = ( 0, 0, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_pipe_spill_ocean" ); + ent.v["origin"] = ( 2255.17, 1798.41, -166.797 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 2.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_surface_heat_md" ); + ent.v["origin"] = ( 2068.62, 2628.85, 42.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_surface_heat_lg" ); + ent.v["origin"] = ( -200.453, 4382.97, -217 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_surface_heat_lg" ); + ent.v["origin"] = ( -112.559, 4173.8, -223 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_surface_heat_lg" ); + ent.v["origin"] = ( -241.977, 4006.1, -228 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2852.13, 1444.52, -252.163 ); + ent.v["angles"] = ( 359, 2, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -12.6; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2852.13, 1927.81, -254.316 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14.4; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2852.13, 967.481, -253.435 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -13.33; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2852.13, 2461.63, -254.337 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_surface_heat_md" ); + ent.v["origin"] = ( 1728.78, 2631.02, 45.125 ); + ent.v["angles"] = ( 271.457, 10.4739, 21.476 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_surface_heat_lg" ); + ent.v["origin"] = ( 2635.72, 1956.53, -239.533 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 272.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_surface_heat_lg" ); + ent.v["origin"] = ( 2630.46, 1431.73, -234.334 ); + ent.v["angles"] = ( 271.005, 89.5161, -89.4293 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_surface_heat_md" ); + ent.v["origin"] = ( 1736.89, 752.427, 50.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_surface_heat_md" ); + ent.v["origin"] = ( 2064.18, 755.876, 45.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower" ); + ent.v["origin"] = ( -146.025, -2951.02, 1681 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 193.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2852.13, 1185.88, -252.701 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14.4; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2852.13, 2201.12, -254.324 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 357.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -13.33; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2852.13, 1684.99, -254.501 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2521.78, 2884.14, -256.464 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 46.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 11.11; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 173.963, 122.428, -35.0915 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 173.048, 321.12, -15.2158 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 175.276, 329.018, 12.6183 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_tunnel" ); + ent.v["origin"] = ( 1460.75, 773.153, 141.259 ); + ent.v["angles"] = ( 284, 359, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_tunnel" ); + ent.v["origin"] = ( 1506.27, 2534.3, 152.469 ); + ent.v["angles"] = ( 273.487, 345.606, 9.43205 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1330.05, 2974.69, 92.4215 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1353.48, 3006.71, 107.217 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_int_top" ); + ent.v["origin"] = ( -273.966, 1669.58, 432 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_tunnel_lng" ); + ent.v["origin"] = ( 1536.64, 2541.52, 227.89 ); + ent.v["angles"] = ( 300.447, 354.612, 1.91846 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_tunnel_lng" ); + ent.v["origin"] = ( 1515.01, 754.879, 254.526 ); + ent.v["angles"] = ( 295.408, 355.104, 3.89016 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2540.89, 526.966, -252.871 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 313.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -13.33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_tunnel_lng" ); + ent.v["origin"] = ( -247.439, 3228.58, -86.1382 ); + ent.v["angles"] = ( 322.147, 1.08707, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2703.33, 2702.6, -254.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 44.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -13.33; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2248.2, 3157.73, -254.552 ); + ent.v["angles"] = ( 359.269, 45, -1.68214 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -12.6; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 62.444, 317.355, 2.12501 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1163.29, 328.425, 1.60033 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1160.36, 3061.59, 8.01865 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2338.62, 324.698, -254.098 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 315.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14.4; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2715.29, 701.367, -252.68 ); + ent.v["angles"] = ( 359.331, 314, 0.743289 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -12.6; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 1780.44, -791.725, -251.274 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -14.4; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 1579.28, -1301.22, -254.706 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 321.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -13.33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 492.648, 4328.35, 139.016 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 554.563, 4339.13, 138.994 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 843.435, 4366.28, -140 ); + ent.v["angles"] = ( 356.953, 184.993, -0.107418 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -251.936, 3846.3, -21.234 ); + ent.v["angles"] = ( 0.998782, 26, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 8.43061, 4507.15, -66.4063 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 280.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -42.9076, 3884.86, -88.3416 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 72.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_reactor_glw_blue" ); + ent.v["origin"] = ( -125.609, 4204.55, -62.2267 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_reactor_glw_blue" ); + ent.v["origin"] = ( -296.751, 4026.51, -65.2027 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 458.255, 414.337, 41.283 ); + ent.v["angles"] = ( 12, 89, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_pak_tower_fire_flareup" ); + ent.v["origin"] = ( -2522.37, -1420.66, 1135.59 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_white_ribbon_sm" ); + ent.v["origin"] = ( -116.505, 2281.07, -56.0053 ); + ent.v["angles"] = ( 302.701, 119.927, -111.036 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_white_ribbon_sm" ); + ent.v["origin"] = ( -113.542, 2273.42, -56.9997 ); + ent.v["angles"] = ( 280.286, 298.824, 60.7822 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_pipe_md" ); + ent.v["origin"] = ( 1358.75, 861.347, -67 ); + ent.v["angles"] = ( 273, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_pipe_md" ); + ent.v["origin"] = ( 2168.52, 453.584, -136.875 ); + ent.v["angles"] = ( 275.657, 127.587, 120.513 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_pipe_md" ); + ent.v["origin"] = ( 2158.68, 2968.16, -135.875 ); + ent.v["angles"] = ( 276.082, 260.573, 99.4797 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 48.4325, 3085.08, -18.1431 ); + ent.v["angles"] = ( 17.9745, 183.154, 0.974222 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 2209.23, 1151.27, -118 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 2204.03, 1312.2, -118 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 2204.42, 2080.28, -115 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 2203.74, 2239.66, -116 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 2204.03, 2400.8, -115 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 2205.96, 989.217, -115 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 2206.18, 1473.58, -115 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 46.2152, 3123.58, -19.095 ); + ent.v["angles"] = ( 17.9546, 175.795, -1.29841 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 47.4133, 3123.03, 21.7425 ); + ent.v["angles"] = ( 332.042, 176.603, 1.594 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 50.6105, 3084.51, 21.4462 ); + ent.v["angles"] = ( 332.042, 183.397, -1.59399 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 46.7455, 3410.03, 21.8109 ); + ent.v["angles"] = ( 332.042, 176.603, 1.594 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 50.3758, 3373.47, 23.5146 ); + ent.v["angles"] = ( 332.042, 183.397, -1.59399 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 46.2486, 3412.54, -19.0266 ); + ent.v["angles"] = ( 17.9745, 176.846, -0.97422 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 48.1859, 3372.04, -18.0747 ); + ent.v["angles"] = ( 17.9745, 183.154, 0.974222 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1613.72, 1.84919, -145.7 ); + ent.v["angles"] = ( 271, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 2360.54, 1759.73, -119.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 2346.11, 1625.25, -119.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_windy" ); + ent.v["origin"] = ( 1095.33, 1796.66, 441.374 ); + ent.v["angles"] = ( 23.2062, 209.072, -1.51774 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); + ent.v["origin"] = ( -628.106, 1115.63, 179 ); + ent.v["angles"] = ( 12.8372, 56.7672, -2.06839 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_windy" ); + ent.v["origin"] = ( 122.955, -3.2102, 305.555 ); + ent.v["angles"] = ( 293.693, 179.684, -179.129 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( -594.228, 2172.06, 148 ); + ent.v["angles"] = ( 43.071, 31.2458, 0.785727 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( 343.986, 1832.83, 102 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 288.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( 282.813, 1971.61, 123 ); + ent.v["angles"] = ( 21.8738, 303.504, 2.07444 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( 347.617, 1562.74, 104 ); + ent.v["angles"] = ( 1, 73, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( 276.882, 1397.63, 113 ); + ent.v["angles"] = ( 10.9848, 58.9476, -0.791467 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( 305.728, 1467.02, 154 ); + ent.v["angles"] = ( 76, 63, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( 307.705, 1920.67, 158 ); + ent.v["angles"] = ( 78, 302, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( -304.354, 979.006, -10.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 264.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( -605.276, 1223.17, 159 ); + ent.v["angles"] = ( 43.8189, 324.02, -2.11248 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( 38.9152, 1166.13, 150 ); + ent.v["angles"] = ( 58.0104, 206.507, 4.57478 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( -37.2901, 2252.24, 154 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( 46.3434, 2215.2, 112 ); + ent.v["angles"] = ( 0.998781, 329, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( -361.707, 2274.12, 178 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( -281.915, 2283.1, 166 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( -256.86, 1096.86, 155 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( -523.549, 1163.93, 156 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_pak_tower_fire_flareup" ); + ent.v["origin"] = ( -1966.49, -394.654, 755.994 ); + ent.v["angles"] = ( 270, 0, 6 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_pak_tower_fire_flareup" ); + ent.v["origin"] = ( -2030.98, -89.1915, 754.989 ); + ent.v["angles"] = ( 270, 0, -1.04873 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_pak_tower_fire_flareup" ); + ent.v["origin"] = ( -66.9895, 5287.92, 820.994 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_pak_tower_fire_flareup" ); + ent.v["origin"] = ( -65.7024, 5639.93, 817.016 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_pak_tower_fire_flareup" ); + ent.v["origin"] = ( -1206.65, 3831.67, 754.996 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_pak_tower_fire_flareup" ); + ent.v["origin"] = ( -1207.57, 4169.89, 755.992 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_pak_tower_fire_flareup" ); + ent.v["origin"] = ( -1624.74, 4167.85, 756.012 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 1033.32, 5418.75, -251.375 ); + ent.v["angles"] = ( 343.217, 173.295, -4.39633 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 967.025, 4994.57, -198.161 ); + ent.v["angles"] = ( 342.986, 178.849, 1.30263 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 956.206, 6636.01, -85.6845 ); + ent.v["angles"] = ( 344.935, 188.795, -8.67367 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flourescent_ceiling_panel_2" ); + ent.v["origin"] = ( 626.278, 108.84, 63.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flourescent_ceiling_panel_2" ); + ent.v["origin"] = ( 434.189, 502.997, 63.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flourescent_ceiling_panel_2" ); + ent.v["origin"] = ( 657.843, 503.237, 63.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 285.769, -284.931, -62.6031 ); + ent.v["angles"] = ( 271, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 1907.88, 3900.13, -254.966 ); + ent.v["angles"] = ( 1.41962, 8.94978, -0.931264 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 1919.06, 4451.61, -273 ); + ent.v["angles"] = ( 358.331, 313.975, 0.760531 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 802.238, 419.058, 164.796 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 372.526, 390.3, 149.796 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 611.184, 301.29, -16.0289 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 593.03, 247.997, -12.1327 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createexploder( "fx_light_flourescent_ceiling_panel" ); + ent.v["origin"] = ( 302.103, 422.394, 198.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 1653.11, 1959.95, 140.181 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 36.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 1652.1, 2116.06, 76.9224 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 42.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 1654.61, 2114.5, 202.007 ); + ent.v["angles"] = ( 38.9934, 358.715, -0.756238 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 1652.84, 2270.97, 139.844 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 36.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 2855.12, 1822.92, -254.283 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 2858.07, 2331.92, -255.29 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 2852.13, 1309.28, -254.586 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 2797.12, 783.196, -252.406 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 315.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 2230.1, -1758.09, -256 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 12.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 1822.7, -1101.26, -253.681 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 945.444, -1419.34, -256 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 308.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 904.072, -1468, -256.186 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 329.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 948.886, -1829.04, -254.054 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 323.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 1791.95, -760.125, -251.117 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 2586.65, 4774.31, -256 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 337.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 1848.42, 4244.04, -291.932 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 353.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 1142.96, 5000.99, -256 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 2615.41, 4881.06, -257.046 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 337.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_md" ); + ent.v["origin"] = ( 2431.49, 2974.44, -255.827 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 41.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 904.328, 4556.19, -137 ); + ent.v["angles"] = ( 355.961, 188, -0.214773 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 1355.33, 3801.4, -143 ); + ent.v["angles"] = ( 357.839, 153.239, -1.71538 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_surface_heat_lg" ); + ent.v["origin"] = ( 2682.94, 1708.44, -237.968 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 272.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 598.449, -745.307, -106.792 ); + ent.v["angles"] = ( 359.68, 177.559, -14.0369 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -413.412, 568.263, -31.8336 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -258.783, 2187.77, 1647.49 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -220.862, 1201.96, 1649.09 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -733.75, 1674.27, 1649.28 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -221.534, 1160.39, 2261.35 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( 294.041, 1716.36, 2262.66 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -261.404, 2231.8, 2264.93 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -776.706, 1674.22, 2263.39 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -382.417, -2439.74, 1609.47 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( 132.321, -2912.44, 1606.8 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -856.343, -2954.65, 1609.55 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -385.128, -2397.32, 2222.61 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( 172.388, -2912.71, 2221.63 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -342.398, -3469.5, 2223.69 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -899.259, -2954.06, 2221.3 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -3376.09, 1368.94, 1372.42 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -3382.22, 1449.79, 1369.04 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -3369.01, 2046.71, 1371.93 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -3375.15, 2127.56, 1370.55 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -5392.77, 1897.97, 1387.32 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -5398.9, 1978.82, 1385.94 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -5385.64, 2578.22, 1387.95 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -5391.77, 2659.07, 1386.57 ); + ent.v["angles"] = ( 270, 356.858, 3.14196 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -8664.25, 4067.45, 2780.68 ); + ent.v["angles"] = ( 270, 6, -36 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -8629.13, 4140.53, 2779.31 ); + ent.v["angles"] = ( 270, 6, -36 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -8962.56, 3457.44, 2781.74 ); + ent.v["angles"] = ( 270, 6, -36 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -8927.45, 3530.52, 2780.37 ); + ent.v["angles"] = ( 270, 6, -36 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -14253.8, 8722.18, 3019.15 ); + ent.v["angles"] = ( 270, 358.987, -44.9871 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -14199.9, 8782.76, 3017.78 ); + ent.v["angles"] = ( 270, 358.987, -44.9871 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -14687, 8186.61, 3021.05 ); + ent.v["angles"] = ( 270, 358.987, -44.9871 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -14633.1, 8247.19, 3019.68 ); + ent.v["angles"] = ( 270, 358.987, -44.9871 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -17050.5, 11070.7, 5193.99 ); + ent.v["angles"] = ( 270, 5.83284, -21.8328 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -17034.1, 11150.1, 5192.61 ); + ent.v["angles"] = ( 270, 5.83284, -21.8328 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -16908.4, 11744.8, 5194.22 ); + ent.v["angles"] = ( 270, 5.83284, -21.8328 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -16892, 11824.2, 5192.85 ); + ent.v["angles"] = ( 270, 5.83284, -21.8328 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -18807.4, 13264.3, 5848.29 ); + ent.v["angles"] = ( 270, 0.210089, -16.2101 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -18791.5, 13342.2, 5846.91 ); + ent.v["angles"] = ( 270, 0.210089, -16.2101 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -18932, 12677, 5848.67 ); + ent.v["angles"] = ( 270, 0.210089, -16.2101 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -18943, 12605.4, 5848.05 ); + ent.v["angles"] = ( 270, 0.210089, -16.2101 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( 255.157, 1714.3, 1648.62 ); + ent.v["angles"] = ( 270, 0.210089, -16.2101 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 2495.56, -2161.46, -202.527 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 317.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 301.905, 583.844, 119.513 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 235.125, 39.5175, 109.522 ); + ent.v["angles"] = ( 15, 359, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 682.204, -810.708, -120.801 ); + ent.v["angles"] = ( 281.042, 264.966, 95.3417 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1310.82, 2254.2, 40 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1230.34, 2221.4, 34 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1284.24, 2062.03, 41.75 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1358.59, 2043.55, 38.75 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1363.36, 2137.91, 40 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1138.79, 2146.31, 37 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 976.226, 1609.79, -23.7989 ); + ent.v["angles"] = ( 345.002, 180.035, -0.267937 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 978.062, 1784.1, -31.8308 ); + ent.v["angles"] = ( 342.045, 174.795, 1.29841 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1244.56, 1410.91, 155.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1246.82, 1385.41, 155.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1380.96, 1334.25, 165.805 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1411.17, 1259.32, 168.97 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1180.59, 1150.99, 175.107 ); + ent.v["angles"] = ( 360, 270, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1269.76, 1169.44, 172.381 ); + ent.v["angles"] = ( 360, 270, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1259.92, 1148.36, 173.74 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1386.93, 1132.01, 174.639 ); + ent.v["angles"] = ( 360, 270, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 615.146, 3146.84, 133.575 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 397.977, 2928.55, -18.2847 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 630.564, 3479.88, -5.07309 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 353.523, 3479.88, -12.0482 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 355.127, 2795.88, 122.608 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1080.94, -499.194, -65.6055 ); + ent.v["angles"] = ( 271, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_smoke" ); + ent.v["origin"] = ( 786.057, 1832.72, -64.5984 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_smoke" ); + ent.v["origin"] = ( 912.885, 1709.01, -70.6813 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_smoke" ); + ent.v["origin"] = ( 783.76, 1549.92, -74 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_smoke" ); + ent.v["origin"] = ( 1355.86, 2038.66, 55.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 1676.42, 3954.45, -136 ); + ent.v["angles"] = ( 355.598, 174.308, -1.37921 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 1672.36, 4262.44, -136 ); + ent.v["angles"] = ( 355.598, 174.308, -1.37921 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_wave_break_lg" ); + ent.v["origin"] = ( 930.409, -2402.01, -266.954 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 350.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -181.14, -546.381, 7.51834 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 357.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 148.284, -1035.87, -66.3374 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 147.573, -444.587, -54.984 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 135.61, -678.836, 9.00472 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 167.83, -688.309, 11.0114 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_pipe_md" ); + ent.v["origin"] = ( -234.22, 4430.22, -138 ); + ent.v["angles"] = ( 356, 250, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -96.3175, -1068.69, -60.0817 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 83.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -1630.82, 3082.7, 1191.56 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -1748.52, 2944.24, 1193.61 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -223.43, 4153.4, 1191.59 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( -359.856, 4271.67, 1190.11 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); + ent.v["origin"] = ( -2030.64, -90.0045, 751.999 ); + ent.v["angles"] = ( 270, 0, -1.04873 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); + ent.v["origin"] = ( -1961.2, -394.981, 752.995 ); + ent.v["angles"] = ( 270, 0, -1.04873 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); + ent.v["origin"] = ( -2518.63, -1424.74, 1135.59 ); + ent.v["angles"] = ( 270, 0, -1.04873 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); + ent.v["origin"] = ( -1200.41, 3827.36, 754.992 ); + ent.v["angles"] = ( 270, 0, -1.04873 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); + ent.v["origin"] = ( -1209.11, 4178.67, 752.996 ); + ent.v["angles"] = ( 270, 0, -1.04873 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); + ent.v["origin"] = ( -1614.69, 4160.64, 751.993 ); + ent.v["angles"] = ( 270, 0, -1.04873 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); + ent.v["origin"] = ( -63.1761, 5283.47, 823.987 ); + ent.v["angles"] = ( 270, 0, -1.04873 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); + ent.v["origin"] = ( -62.4625, 5629.45, 827.004 ); + ent.v["angles"] = ( 270, 0, -1.04873 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( -507.734, 2225.69, 160.177 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["origin"] = ( 758.973, -9.47859, 375.484 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 644.61, -471.975, -72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 174.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 591.416, -897.14, -143.089 ); + ent.v["angles"] = ( 359.68, 177.559, -8.03697 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 985.664, -752.8, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 226.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1012.12, 16.115, -73 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 237.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 830.071, -318.7, -72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 192.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1258.43, 436.039, -72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1042.31, 550.025, -72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 151.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 704.828, 863.625, -72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 267.112, 943.005, -72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 212.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 42.6443, 582.215, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 222.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( -32.5658, 798.267, -72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 188.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1974.4, 614.669, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1901.83, 167.6, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 167.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1744.92, -276.104, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 183.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1636.32, -507.592, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1361.51, -651.467, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1303.66, -1032.85, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 183.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 37.5944, -216.892, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 2047.69, 2958.23, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 192.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 2073.05, 3197.92, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 174.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1789.56, 3089.11, -136.875 ); + ent.v["angles"] = ( 359, 176, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1790.29, 3726.06, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 564.93, 4233.33, -129.715 ); + ent.v["angles"] = ( 0.22494, 177.026, 13.9981 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 565.547, 4077.68, -92.0285 ); + ent.v["angles"] = ( 0.22494, 177.026, 13.9981 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1114.87, 3399.59, -74 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 155.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( -20.8164, -79.1724, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 141.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1607.48, -748.065, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1969.64, 2748.34, -137.875 ); + ent.v["angles"] = ( 359, 174, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1051.04, 3057.55, -72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1011.96, 2732, -72 ); + ent.v["angles"] = ( 359, 214, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 946.525, 1830.26, 56.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 171.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 926.424, 1544.23, 56.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 192.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1127.7, 1698.44, 56.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 182.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 712.302, 1810.06, 56.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 174.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 739.189, 1557.63, 56.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 998.01, 1202.28, -28.7682 ); + ent.v["angles"] = ( 343.039, 188.191, -19.8711 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 695.873, 1297.28, 0.403737 ); + ent.v["angles"] = ( 346.805, 186.796, -19.508 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 1000.2, 2193.69, -29.8839 ); + ent.v["angles"] = ( 344.143, 175.477, 17.6421 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["origin"] = ( 696.221, 2207.74, -28.6999 ); + ent.v["angles"] = ( 346.05, 176.102, 17.4815 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 886.939, 3738.72, -73 ); + ent.v["angles"] = ( 359.054, 183, -1.05096 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 724.335, 2487.38, -72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 84.3099, 2508.05, -72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 144.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( -156.639, 2723.24, -73 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 203.962, 3667.24, -65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 202.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 5.6836, 2701.68, -75 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 183.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 619.41, 3906.89, -73 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 365.039, 677.169, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 165.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 579.99, -1230.18, -143.322 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 991.17, -974.482, -136.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 215.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_red" ); + ent.v["origin"] = ( 784.399, 1793.23, 42.088 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_garage_parking_red" ); + ent.v["origin"] = ( 793.055, 1587.47, 42.7344 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -309.579, 2465.72, 56.7041 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 96.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1292.03, 2439.45, -64 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1263.48, -393.252, -135.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1723.84, 912.907, -111.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1650.06, 597.297, -135.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1297.95, 704.378, -64 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1285.67, 966.865, -64 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1304.77, 2683.11, -64 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1099.79, 3891.11, -63.6043 ); + ent.v["angles"] = ( 271, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( -431.998, 2887.33, -61.3418 ); + ent.v["angles"] = ( 271, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1160.2, 3326.74, -64 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1178.16, 75.2075, -64 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 806.555, -768.155, -135.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1714.07, 2458.33, -111.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); + ent.v["origin"] = ( 1689.37, 2783.74, -135.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createexploder( "fx_light_flourescent_ceiling_panel" ); + ent.v["origin"] = ( 337.627, 2958.35, 218.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -392.836, 2232.72, -53.5544 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 16.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -418.629, 2225.84, -37.1378 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 19.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -444.78, 2216.05, -21.133 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 21.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -470.448, 2204.66, -5.18853 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 25.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -495.055, 2193.68, 11.944 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 27.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -520.725, 2179.21, 27.287 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 30.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -544.308, 2164.97, 43.6084 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 33.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -415.404, 2313.01, -53.5861 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 16.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -445.571, 2303.76, -37.1427 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 19.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -475.071, 2293.91, -21.3383 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 22.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -504.726, 2280.79, -5.39598 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 25.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -532.622, 2266.46, 11.4135 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 27.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -562.179, 2250.49, 27.1724 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 30.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -590.045, 2233.93, 43.397 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 33.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -575.44, 2107.32, 120.486 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 218.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -578.235, 1286.51, 120.38 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 140.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( 4.25729, 2165.8, 119.477 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 332.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( 5.9098, 1225.69, 119.504 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 28.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( 381.959, 3500.25, 50.7754 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 96.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( 574.335, 3500.18, 50.6501 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 96.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -588.975, 1160.37, 43.8079 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 328.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -543.702, 1229.46, 43.813 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 326.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -561.56, 1143.04, 27.5869 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -532.975, 1127.7, 11.3637 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 333.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -504.153, 1113.53, -5.74658 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 336.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -474.654, 1100.6, -21.627 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 339.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -445.134, 1089.9, -37.8186 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 341.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -414.916, 1081.22, -53.8621 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 344.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -392.365, 1160.54, -53.7965 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 344.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -418.128, 1168.66, -37.3554 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 341.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -444.31, 1177.31, -21.2478 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 339.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -470.106, 1188.01, -5.62566 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 336.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -495.947, 1200.82, 11.5769 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 332.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -519.802, 1214.13, 27.2616 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 329.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -12.2361, 1198.32, 114.226 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 289.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( 1270.12, 3712.27, 4.09926 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 261.827, -500.631, -118.289 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 261.875, -619.5, -118.429 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 261.875, -744.036, -118.209 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 261.845, -864.272, -118.369 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 38.1894, -968.449, -118.972 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 38.125, -843.974, -118.37 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 38.125, -716.021, -118.284 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 38.125, -588.216, -118.307 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -177.875, -480.953, -46.3274 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -121.108, -531.875, -46.2871 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 204.838, -433.124, -118.206 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 92.6293, -433.124, -118.335 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 685.08, -1584.64, -136 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 691.715, -1851.81, -136 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 565.265, -1610, -144 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 450.379, -1786.14, -144 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -127.874, 2085.74, 52 ); + ent.v["angles"] = ( 270, 0, -12 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( 62.1835, 1955.89, 52 ); + ent.v["angles"] = ( 270, 2.04541, -44.0452 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( 156.455, 1754.86, 52 ); + ent.v["angles"] = ( 270, 0, -83 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( 110.528, 1513.59, 52 ); + ent.v["angles"] = ( 270, 356.634, -116.633 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -26.0349, 1352.2, 52 ); + ent.v["angles"] = ( 270, 0, -147 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -251.151, 1307.7, 52 ); + ent.v["angles"] = ( 270, 0, 176 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -370.46, 2080.32, 52 ); + ent.v["angles"] = ( 270, 0, -162 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -555.858, 1956.93, 52 ); + ent.v["angles"] = ( 270, 0, -123 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -638.55, 1752.3, 52 ); + ent.v["angles"] = ( 270, 356.82, -95.8201 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -622.411, 1541.89, 52 ); + ent.v["angles"] = ( 270, 3.01279, -74.0128 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -494.614, 1369.74, 52 ); + ent.v["angles"] = ( 270, 0, -41 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -254.464, 1896.4, 52 ); + ent.v["angles"] = ( 270, 3.01279, -74.0128 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -37.1649, 1794.69, 52 ); + ent.v["angles"] = ( 270, 3.01279, -74.0128 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -141.764, 1539.79, 52 ); + ent.v["angles"] = ( 270, 3.01279, -74.0128 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -258.127, 1728.27, 52 ); + ent.v["angles"] = ( 270, 3.01279, -74.0128 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -493.17, 1762.39, 52 ); + ent.v["angles"] = ( 270, 3.01279, -74.0128 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); + ent.v["origin"] = ( -368.487, 1533.22, 52 ); + ent.v["angles"] = ( 270, 3.01279, -74.0128 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1977.98, 366.526, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_dust_gray_street_low" ); + ent.v["origin"] = ( 1464.51, -889.135, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_md" ); + ent.v["origin"] = ( -586.923, 1895.59, 114 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_md" ); + ent.v["origin"] = ( 12.161, 1428.43, 137 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_md" ); + ent.v["origin"] = ( -35.3065, 1986.37, 126 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_md" ); + ent.v["origin"] = ( -246.795, 1728.38, 122 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_md" ); + ent.v["origin"] = ( -612.306, 1452.68, 136 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_sm" ); + ent.v["origin"] = ( -317.229, 2513.04, -21 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_sm" ); + ent.v["origin"] = ( -296.412, 891.759, -31 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_sm" ); + ent.v["origin"] = ( -245.199, 1286.94, 131 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_sm" ); + ent.v["origin"] = ( -327.195, 2103.62, 119 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_sm" ); + ent.v["origin"] = ( 506.353, 1695.17, 161 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( 534.871, 1681.48, 100.529 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_sm" ); + ent.v["origin"] = ( 293.471, 1676.48, 194 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -657.957, 2097.38, 93 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -611.401, 1250.63, 85 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( 138.519, 2063.32, 106 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( 125.064, 1331.07, 100.534 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -296.854, 1081.47, -9.73779 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -296.274, 2329.6, -16.8466 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -474.897, 2248.37, 33.3115 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -619.981, 2157.09, 163.496 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -421.943, 2258.39, 152.995 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -212.626, 2289.77, 150.788 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -5.42307, 2240.35, 102 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -312.504, 2560.61, -58 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_md" ); + ent.v["origin"] = ( -884.266, 1674.01, 65 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -51.6081, 2247.67, 159 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( 252.823, 1391.73, 154.02 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( 254.558, 1981.93, 156 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( 23.0116, 1163.25, 93 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -11.0243, 1151.77, 147.87 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -461.387, 1144.32, 39.4494 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( -302.044, 853.825, -56.8727 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createexploder( "fx_light_flourescent_ceiling_panel" ); + ent.v["origin"] = ( 337.668, 2899.52, 218.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_light_flourescent_ceiling_panel" ); + ent.v["origin"] = ( 302.264, 478.068, 198.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -387.346, 1313.75, 213.748 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -131.287, 1312.74, 213.778 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -643.327, 1568.19, 213.577 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -387.359, 1568.09, 213.608 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -131.384, 1569.09, 213.863 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( 124.835, 1568.17, 212.634 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -643.294, 1824.85, 213.486 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -387.312, 1824.95, 213.401 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -131.294, 1823.67, 213.298 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( 124.655, 1824.71, 213.457 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -387.337, 2080.5, 213.691 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -131.268, 2080.18, 213.265 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -348.716, 1311.97, 213.357 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -92.7097, 1311.74, 213.298 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( 163.371, 1568.28, 213.722 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -92.7388, 1569.08, 213.158 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -348.777, 1567.77, 213.012 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -604.806, 1568.54, 212.862 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( 163.318, 1823.49, 213.499 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -92.6991, 1825.02, 213.447 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -348.672, 1824.18, 213.305 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -604.725, 1823.71, 213.342 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -92.6829, 2080.23, 213.458 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); + ent.v["origin"] = ( -348.7, 2080.17, 213.221 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flourescent_ceiling_panel_2" ); + ent.v["origin"] = ( 441.882, 412.978, 262.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flourescent_ceiling_panel_2" ); + ent.v["origin"] = ( 442.301, 539.491, 263.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flourescent_ceiling_panel_2" ); + ent.v["origin"] = ( 729.979, 413.208, 263.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flourescent_ceiling_panel_2" ); + ent.v["origin"] = ( 730.475, 540.783, 263.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); + ent.v["origin"] = ( -389.632, 1117.59, 154.528 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_md" ); + ent.v["origin"] = ( 498.304, 3156.75, 165.162 ); + ent.v["angles"] = ( 270, 357.879, 93.121 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_md" ); + ent.v["origin"] = ( 370.552, 3155.73, 165.162 ); + ent.v["angles"] = ( 270, 357.879, 93.121 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_md" ); + ent.v["origin"] = ( 370.2, 3316.78, 165.161 ); + ent.v["angles"] = ( 270, 357.879, 93.121 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_md" ); + ent.v["origin"] = ( 498.256, 3316.51, 165.161 ); + ent.v["angles"] = ( 270, 357.879, 93.121 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_md" ); + ent.v["origin"] = ( 628.524, 3316.75, 164.157 ); + ent.v["angles"] = ( 270, 357.879, 93.121 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_md" ); + ent.v["origin"] = ( 697.352, 3188.03, 165.153 ); + ent.v["angles"] = ( 270, 357.879, 93.121 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 580.749, 3439.96, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 644.765, 3441.41, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 708.357, 3440.7, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 515.904, 3440.59, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 452.164, 3440.98, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 388.406, 3440.29, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 323.834, 3440.15, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 324.482, 3384.12, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 388.033, 3384.03, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 452.921, 3384.28, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 516.798, 3383.45, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 580.312, 3384.78, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 644.848, 3384.15, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 708.885, 3384.72, 95.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 691.215, 2995.59, 63.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 691.496, 3058.03, 63.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 691.75, 3122.56, 63.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 451.883, 3059.23, 63.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 515.291, 3057.53, 63.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 579.466, 3059.96, 63.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 451.335, 2995.26, 63.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 515.382, 2995.34, 63.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); + ent.v["origin"] = ( 579.961, 2995.2, 63.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_sm" ); + ent.v["origin"] = ( 1095.23, 1960.3, 64.125 ); + ent.v["angles"] = ( 338, 46, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 1219.82, -3358.2, -225.966 ); + ent.v["angles"] = ( 340.226, 173.539, -4.47296 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1014.35, -2854.36, -255.925 ); + ent.v["angles"] = ( 327.963, 181.99, -0.407737 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 859.47, -3279.31, -105.188 ); + ent.v["angles"] = ( 356.181, 172.305, -4.21809 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -771.867, -1087.62, -33.9863 ); + ent.v["angles"] = ( 348.908, 218.428, -17.0545 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -817.333, -1822.73, -34 ); + ent.v["angles"] = ( 345.931, 218.807, -7.13726 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -1116.02, 1795.57, 39 ); + ent.v["angles"] = ( 355.615, 238.525, 1.20706 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( -1118.98, 2590.52, -16 ); + ent.v["angles"] = ( 351.764, 220.755, -0.304766 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( -944.947, 4077.54, 53.4589 ); + ent.v["angles"] = ( 3.33533, 259.147, -17.0191 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 658.361, 216.263, -63.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 227.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 651.54, 532.81, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 242.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 470.363, 491.088, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 712.61, 3052.12, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 249.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["origin"] = ( 492.822, 2899.12, 72.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["origin"] = ( 1234.88, 2010.09, 49 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_smoke" ); + ent.v["origin"] = ( 1127.46, 2234.77, 55.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_smoke" ); + ent.v["origin"] = ( 1134.16, 2003.34, 55.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_smoke" ); + ent.v["origin"] = ( 1379.54, 2273.12, 55.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( 1334.13, 1376.44, 65.125 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( 1164, 1386.85, 83 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( 1354.51, 1168.48, 81.125 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); + ent.v["origin"] = ( 1228.09, 1136.18, 70 ); + ent.v["angles"] = ( 270, 4.2937, -4.29471 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_md" ); + ent.v["origin"] = ( 1243.18, 1267.06, 171.158 ); + ent.v["angles"] = ( 270, 357.879, 93.121 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 258.569, 1469.85, 114.504 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 334.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( 262.837, 1917.35, 114.221 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 22.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -9.18739, 2193.57, 114.655 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 63.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -568.462, 2135.15, 114.072 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 126.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); + ent.v["origin"] = ( -561.284, 1252.87, 114.373 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 228.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_white_ribbon_sm" ); + ent.v["origin"] = ( -112.213, 1115.25, -56.5153 ); + ent.v["angles"] = ( 302.701, 119.927, -111.036 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_white_ribbon_sm" ); + ent.v["origin"] = ( -109.25, 1107.61, -57.5097 ); + ent.v["angles"] = ( 280.286, 298.824, 60.7822 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; +} diff --git a/MP/Maps/Meltdown/maps/mp/mp_meltdown.gsc b/MP/Maps/Meltdown/maps/mp/mp_meltdown.gsc new file mode 100644 index 0000000..3b44c42 --- /dev/null +++ b/MP/Maps/Meltdown/maps/mp/mp_meltdown.gsc @@ -0,0 +1,22 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_meltdown_fx; +#include maps\mp\_load; +#include maps\mp\mp_meltdown_amb; +#include maps\mp\_compass; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_meltdown_fx::main(); + maps\mp\_load::main(); + maps\mp\mp_meltdown_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_meltdown" ); +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2100", reset_dvars ); +} diff --git a/MP/Maps/Meltdown/maps/mp/mp_meltdown_amb.gsc b/MP/Maps/Meltdown/maps/mp/mp_meltdown_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Meltdown/maps/mp/mp_meltdown_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Meltdown/maps/mp/mp_meltdown_fx.gsc b/MP/Maps/Meltdown/maps/mp/mp_meltdown_fx.gsc new file mode 100644 index 0000000..0dde9f5 --- /dev/null +++ b/MP/Maps/Meltdown/maps/mp/mp_meltdown_fx.gsc @@ -0,0 +1,75 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_meltdown_fx; +#include maps\mp\createart\mp_meltdown_art; + +main() +{ + precache_fxanim_props(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_meltdown_fx::main(); + maps\mp\createart\mp_meltdown_art::main(); +} + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_fumes_vent_xsm_int"] = loadfx( "maps/mp_maps/fx_mp_fumes_vent_xsm_int" ); + level._effect["fx_mp_steam_pipe_md"] = loadfx( "maps/mp_maps/fx_mp_steam_pipe_md" ); + level._effect["fx_mp_vent_heat_distort"] = loadfx( "maps/mp_maps/fx_mp_vent_heat_distort" ); + level._effect["fx_mp_vent_steam_line"] = loadfx( "maps/mp_maps/fx_mp_vent_steam_line" ); + level._effect["fx_mp_vent_steam_windy"] = loadfx( "maps/mp_maps/fx_mp_vent_steam_windy" ); + level._effect["fx_mp_vent_steam_windy_lg"] = loadfx( "maps/mp_maps/fx_mp_vent_steam_windy_lg" ); + level._effect["fx_mp_steam_smoke"] = loadfx( "maps/mp_maps/fx_mp_steam_smoke" ); + level._effect["fx_mp_water_rain_cooling_tower"] = loadfx( "maps/mp_maps/fx_mp_water_rain_cooling_tower" ); + level._effect["fx_mp_water_rain_cooling_tower_splsh_200"] = loadfx( "maps/mp_maps/fx_mp_water_rain_cooling_tower_splsh_200" ); + level._effect["fx_mp_water_drip_light_long"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); + level._effect["fx_mp_steam_cooling_tower"] = loadfx( "maps/mp_maps/fx_mp_steam_cooling_tower" ); + level._effect["fx_mp_steam_cooling_tower_blocker"] = loadfx( "maps/mp_maps/fx_mp_steam_cooling_tower_blocker" ); + level._effect["fx_mp_steam_cooling_tower_door"] = loadfx( "maps/mp_maps/fx_mp_steam_cooling_tower_door" ); + level._effect["fx_mp_steam_cooling_tower_int_top"] = loadfx( "maps/mp_maps/fx_mp_steam_cooling_tower_int_top" ); + level._effect["fx_mp_steam_cooling_tower_thck_sm"] = loadfx( "maps/mp_maps/fx_mp_steam_cooling_tower_thck_sm" ); + level._effect["fx_mp_steam_cooling_tower_thck_md"] = loadfx( "maps/mp_maps/fx_mp_steam_cooling_tower_thck_md" ); + level._effect["fx_mp_steam_cooling_tower_thck_xsm"] = loadfx( "maps/mp_maps/fx_mp_steam_cooling_tower_thck_xsm" ); + level._effect["fx_water_pipe_spill_ocean"] = loadfx( "water/fx_water_pipe_spill_ocean" ); + level._effect["fx_water_surface_heat_lg"] = loadfx( "water/fx_water_surface_heat_lg" ); + level._effect["fx_water_surface_heat_md"] = loadfx( "water/fx_water_surface_heat_md" ); + level._effect["fx_mp_steam_tunnel"] = loadfx( "maps/mp_maps/fx_mp_steam_tunnel" ); + level._effect["fx_mp_steam_tunnel_lng"] = loadfx( "maps/mp_maps/fx_mp_steam_tunnel_lng" ); + level._effect["fx_water_wave_break_md"] = loadfx( "water/fx_water_wave_break_md" ); + level._effect["fx_water_wave_break_lg"] = loadfx( "water/fx_water_wave_break_lg" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_paper_interior_short"] = loadfx( "debris/fx_paper_interior_short" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_light_gray_white_ribbon_sm"] = loadfx( "light/fx_light_gray_white_ribbon_sm" ); + level._effect["fx_light_flourescent_ceiling_panel_2"] = loadfx( "light/fx_light_flourescent_ceiling_panel_2" ); + level._effect["fx_light_reactor_glw_blue"] = loadfx( "light/fx_light_reactor_glw_blue" ); + level._effect["fx_light_beacon_red_blink_fst_sm"] = loadfx( "light/fx_light_beacon_red_blink_fst_sm" ); + level._effect["fx_light_garage_parking_red"] = loadfx( "light/fx_light_emergency_red" ); + level._effect["fx_light_m_p6_ext_wall_sml"] = loadfx( "light/fx_light_m_p6_ext_wall_sml" ); + level._effect["fx_light_outdoor_wall03_white"] = loadfx( "light/fx_light_outdoor_wall03_white" ); + level._effect["fx_light_flourescent_ceiling_panel"] = loadfx( "light/fx_light_flourescent_ceiling_panel_soft" ); + level._effect["fx_light_recessed_cool_sm"] = loadfx( "light/fx_light_recessed_cool_sm_soft" ); + level._effect["fx_light_floodlight_sqr_wrm_sm"] = loadfx( "light/fx_light_floodlight_sqr_wrm_sm" ); + level._effect["fx_light_flour_glow_cool_dbl_md"] = loadfx( "light/fx_light_flour_glow_cool_dbl_md" ); + level._effect["fx_lf_mp_meltdown_sun1"] = loadfx( "lens_flares/fx_lf_mp_meltdown_sun1" ); + level._effect["fx_sand_gust_ground_sm"] = loadfx( "dirt/fx_sand_gust_ground_sm_slw" ); + level._effect["fx_sand_gust_ground_md"] = loadfx( "dirt/fx_sand_gust_ground_md_slw" ); + level._effect["fx_sand_gust_door"] = loadfx( "dirt/fx_sand_gust_door_slw" ); + level._effect["fx_sand_blowing_lg_vista"] = loadfx( "dirt/fx_sand_blowing_lg_vista" ); + level._effect["fx_dust_gray_street_low"] = loadfx( "dirt/fx_dust_gray_street_low" ); + level._effect["fx_dust_swirl_sm_gray_runner"] = loadfx( "dirt/fx_dust_swirl_sm_gray_runner" ); + level._effect["fx_pak_tower_fire_flareup"] = loadfx( "maps/mp_maps/fx_mp_fire_tower_flareup" ); + level._effect["fx_mp_fire_tower_flareup_amb"] = loadfx( "maps/mp_maps/fx_mp_fire_tower_flareup_amb" ); +} + +precache_fxanim_props() +{ + +} diff --git a/MP/Maps/Meltdown/maps/mp/mp_meltdown_lift.gsc b/MP/Maps/Meltdown/maps/mp/mp_meltdown_lift.gsc new file mode 100644 index 0000000..55a26bb --- /dev/null +++ b/MP/Maps/Meltdown/maps/mp/mp_meltdown_lift.gsc @@ -0,0 +1,196 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\gametypes\_weaponobjects; +#include maps\mp\_tacticalinsertion; +#include maps\mp\killstreaks\_supplydrop; + +init() +{ + precachestring( &"MP_LIFT_OPERATE" ); + precachestring( &"MP_LIFT_COOLDOWN" ); + trigger = getent( "lift_trigger", "targetname" ); + platform = getent( "lift_platform", "targetname" ); + + if ( !isdefined( trigger ) || !isdefined( platform ) ) + return; + + trigger enablelinkto(); + trigger linkto( platform ); + part = getent( "lift_part", "targetname" ); + + if ( isdefined( part ) ) + part linkto( platform ); + + level thread lift_think( trigger, platform ); +} + +lift_think( trigger, platform ) +{ + level waittill( "prematch_over" ); + + location = 0; + + for (;;) + { + trigger sethintstring( &"MP_LIFT_OPERATE" ); + + trigger waittill( "trigger" ); + + trigger sethintstring( &"MP_LIFT_COOLDOWN" ); + + if ( location == 0 ) + { + goal = platform.origin + vectorscale( ( 0, 0, 1 ), 128.0 ); + location = 1; + } + else + { + goal = platform.origin - vectorscale( ( 0, 0, 1 ), 128.0 ); + location = 0; + } + + platform thread lift_move_think( goal ); + + platform waittill( "movedone" ); + + if ( location == 1 ) + trigger thread lift_auto_lower_think(); + + wait 10; + } +} + +lift_move_think( goal ) +{ + self endon( "movedone" ); + timer = 5; + self moveto( goal, 5 ); + + while ( timer >= 0 ) + { + self destroy_equipment(); + self destroy_tactical_insertions(); + self destroy_supply_crates(); + self destroy_corpses(); + self destroy_stuck_weapons(); + wait 0.5; + timer -= 0.5; + } +} + +lift_auto_lower_think() +{ + self endon( "trigger" ); + wait 30; + self notify( "trigger" ); +} + +destroy_equipment() +{ + grenades = getentarray( "grenade", "classname" ); + + for ( i = 0; i < grenades.size; i++ ) + { + item = grenades[i]; + + if ( !isdefined( item.name ) ) + continue; + + if ( !isdefined( item.owner ) ) + continue; + + if ( !isweaponequipment( item.name ) ) + continue; + + if ( !item istouching( self ) ) + continue; + + watcher = item.owner getwatcherforweapon( item.name ); + + if ( !isdefined( watcher ) ) + continue; + + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( item, 0.0, undefined ); + } +} + +destroy_tactical_insertions() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( !isdefined( player.tacticalinsertion ) ) + continue; + + if ( player.tacticalinsertion istouching( self ) ) + player.tacticalinsertion maps\mp\_tacticalinsertion::destroy_tactical_insertion(); + } +} + +destroy_supply_crates() +{ + crates = getentarray( "care_package", "script_noteworthy" ); + + for ( i = 0; i < crates.size; i++ ) + { + crate = crates[i]; + + if ( crate istouching( self ) ) + { + playfx( level._supply_drop_explosion_fx, crate.origin ); + playsoundatposition( "wpn_grenade_explode", crate.origin ); + wait 0.1; + crate maps\mp\killstreaks\_supplydrop::cratedelete(); + } + } +} + +destroy_corpses() +{ + corpses = getcorpsearray(); + + for ( i = 0; i < corpses.size; i++ ) + { + if ( distance2dsquared( corpses[i].origin, self.origin ) < 1048576 ) + corpses[i] delete(); + } +} + +destroy_stuck_weapons() +{ + weapons = getentarray( "sticky_weapon", "targetname" ); + origin = self getpointinbounds( 0.0, 0.0, -0.6 ); + z_cutoff = origin[2]; + + for ( i = 0; i < weapons.size; i++ ) + { + weapon = weapons[i]; + + if ( weapon istouching( self ) && weapon.origin[2] > z_cutoff ) + weapon delete(); + } +} + +getwatcherforweapon( weapname ) +{ + if ( !isdefined( self ) ) + return undefined; + + if ( !isplayer( self ) ) + return undefined; + + for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) + { + if ( self.weaponobjectwatcherarray[i].weapon != weapname ) + continue; + + return self.weaponobjectwatcherarray[i]; + } + + return undefined; +} diff --git a/MP/Maps/Mirage/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Mirage/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Mirage/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Mirage/aitype/enemy_dog_mp.gsc b/MP/Maps/Mirage/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Mirage/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Mirage/character/character_mp_german_shepherd.gsc b/MP/Maps/Mirage/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Mirage/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Mirage/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Mirage/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Mirage/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Mirage/clientscripts/mp/createfx/mp_mirage_fx.csc b/MP/Maps/Mirage/clientscripts/mp/createfx/mp_mirage_fx.csc new file mode 100644 index 0000000..1b99aaf --- /dev/null +++ b/MP/Maps/Mirage/clientscripts/mp/createfx/mp_mirage_fx.csc @@ -0,0 +1,1702 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1091.16, 21.5789, -15.3096 ); + ent.v["angles"] = ( 10, 180, 0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -596.184, 114.64, 3.71116 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1593.32, 244.803, -50.4112 ); + ent.v["angles"] = ( 5, 180, 0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1950.07, 665.598, -82.5685 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1751.17, 1241.41, -47.7047 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2036.56, 1437.56, -47.8889 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1751.14, 1633.92, -6.7206 ); + ent.v["angles"] = ( 12, 180, -13 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 240.209, 263.864, 0 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -202.286, 312.01, 0 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 636.783, 124.097, 0 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1060.99, 386.494, -1 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1316.42, 769.33, 4.3183 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2520.85, 1109.48, 0.8895 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2908.66, 1101.73, 12.9798 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1794.22, 1550.08, 23.4582 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1363.96, 1594.85, 26.6079 ); + ent.v["angles"] = ( 355.019, 180.437, -5.01824 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1109.69, 1382.94, 66.1692 ); + ent.v["angles"] = ( 348.877, 201.141, -0.926659 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1586.02, 2240.7, 23.7261 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1181.25, 2527.9, 23.5668 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 774.856, 2669.9, 21.1304 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -244.403, 2633.43, 27.2288 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -384.346, 2871.67, 27.4893 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -890.474, 2723.1, 24.9618 ); + ent.v["angles"] = ( 360, 226, 0 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -681.631, 2494.51, 27.9246 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1241.15, 2027.04, 23.1111 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 231.0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1623.84, 1579.48, 9.8956 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2623.63, 1135.37, 1.80512 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2123.18, 714.577, -5.50962 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2140.89, 1337.15, 20.8598 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1621.68, 709.732, -1.74518 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1482.18, 2079.48, 8.59846 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1482.91, 2574, 9.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 982.087, 2386.41, 11.4889 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 985.358, 2883.88, 9 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 497.569, 2741.65, 9 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -0.212731, 2741.96, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -499.272, 2742.62, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1010.08, 2583.29, 9 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1125.28, 707.128, -9.15419 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1154.78, 1214.82, 4.1803 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1126.95, 208.184, -3.74612 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 629.447, 125.845, -1 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 134.253, 122.355, -1 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -362.289, 121.904, 1 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -860.037, 128.301, 0.27426 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1359.23, 143.143, -41.1538 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1345.57, -356.737, -4.84829 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -845.29, -371.657, -3.57959 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -345.802, -363.995, -4.91145 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 155.889, -377.427, -4.52922 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 648.367, -370.228, -1.98896 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1858.9, 574.538, -77.0829 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1861.21, 76.1131, -70.0314 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1788.39, 1076.32, -89 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1289.62, 641.011, 23 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2354.68, 1079, -89 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2366.02, 579.598, -71.2848 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1802.43, 1578.19, -90.8889 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2301.12, 1578.09, -58.8877 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2785.92, 1404.29, -48.0723 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2363.7, 78.6753, -15.1506 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -500.453, 3247.06, 188.796 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4.03281, 3249.2, 172.289 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 499.666, 3243.33, 151.402 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2623.41, 1630.85, 52.7547 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3121.62, 1631.09, 173.887 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3127.95, 1131.07, 109.869 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3128.48, 630.281, 248.113 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1645.51, 1139.82, 242.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1155.63, -284.016, 61.87 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1652.66, -238.498, 150.253 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 506.859, 2140.17, 250 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2.91546, 2139.29, 247.032 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -493.73, 2135.46, 248.27 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1687.69, 1771.83, 298.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2290.58, 883.217, -88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sun" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 417385, 809545, 411621 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -348.049, 2129.28, 27.2144 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -110.656, 2048.5, 27.3012 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 695.738, 2032.04, 23 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 563.011, 2327.7, 23 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 371.671, 2540.56, -40.854 ); + ent.v["angles"] = ( 10, 217, 0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -56.7814, 2450.61, -80.539 ); + ent.v["angles"] = ( 345, 180, -24 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 420.208, 2853.79, 28.7489 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 673.677, 2918.76, 27 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1165.8, 2207.69, 21.4538 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 835.442, 2241.02, 24.6877 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 245.0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 184.195, 2059.95, 27 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -603.306, 2881.29, 27 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1364.2, 1828.73, 39.26 ); + ent.v["angles"] = ( 330, 180, 0 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1216.27, 1185.94, 74.1245 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1192.6, 946.894, 43.782 ); + ent.v["angles"] = ( 0, 180, -18 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 175.402, 114.579, 3.89228 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 794.586, -25.4861, 4.27233 ); + ent.v["angles"] = ( 0, 180, 14 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1220.07, 258.77, -1.57812 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2313.86, 559.111, 71.2447 ); + ent.v["angles"] = ( 19.1717, 186.948, 13.5715 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2813.63, 1576.62, 58.4678 ); + ent.v["angles"] = ( 4.97532, 179.686, -9.02184 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 894.861, 164.044, -7.73769 ); + ent.v["angles"] = ( 350, 180, 0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2703.86, 910.23, -41.3147 ); + ent.v["angles"] = ( 320, 180, 11 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2578.19, 1551.26, 2.45107 ); + ent.v["angles"] = ( 330, 180, -17 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2617.19, 1373.04, -35.1011 ); + ent.v["angles"] = ( 330, 180, -11 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2390.42, 1282.34, -48.8889 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1991.37, 1781.42, 12.7667 ); + ent.v["angles"] = ( 360, 180, -33 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 281.687, 1790.51, 539.968 ); + ent.v["angles"] = ( 2.15829, 160.339, 17.8744 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 226.805, 1646.86, 590.497 ); + ent.v["angles"] = ( 2.15829, 160.339, 17.8744 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -289.968, 1813.6, 530.813 ); + ent.v["angles"] = ( 9.42481, 17.7219, -18.4054 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -232.37, 1660.01, 584.575 ); + ent.v["angles"] = ( 9.42481, 17.7219, -18.4054 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1780.38, 1846.46, 320.825 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1355.77, 2101.54, 174.706 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1180.17, 2320.05, 174.012 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1025.8, 2430.29, 177.621 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1258.01, 2210.83, 177.59 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1722.18, 2252.54, 178.483 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2226.12, 1404.17, 175.828 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2454.68, 1586.02, 41.2666 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1379.05, 24.0002, 256.347 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2340.12, 1248.51, 94.4229 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2307.98, 1055.63, 93.9229 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1356.08, 2224.22, 223.428 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2181.91, -435.558, -26.2728 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2179.59, -936.481, 29.8614 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1677.1, -939.043, -25.0194 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1161.46, -1371.89, 40.1637 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -661.182, -1386.81, 41.4324 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -161.693, -1379.15, 40.1006 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 339.998, -1392.58, 40.4828 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 832.476, -1385.38, 43.0231 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1339.74, -1299.17, 106.882 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 372.146, 3856.57, 194.194 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 865.817, 3994.84, 218.772 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2910.28, 1550.47, 502.189 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2412.54, 1395.99, 251.979 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3560.59, 2005.79, 520.399 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3528.06, 657.5, 507.518 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2950, 942.555, 499.898 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1326.73, 2696.19, 260.389 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 846.058, 3007.01, 455.296 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 406.235, 2970.29, 373.637 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -954.391, 2117.66, 464.657 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1319.15, 517.609, 418.382 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -373.75, -52.6996, 493.678 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1335.18, 511.224, 206.787 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2242.69, 1735.49, 492.427 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1770.77, 293.89, 485.163 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2238.27, 635.589, 598.577 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1088.16, -237.124, 622.593 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -569.882, -230.191, 415.49 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 748.337, -439.471, 398.695 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 425.36, -203.352, 378.44 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 973.066, -162.95, 457.354 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1212.22, -213.581, 450.991 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3276.44, 1747.69, 229.887 ); + ent.v["angles"] = ( 14.7791, 179.055, -18.1938 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3294.57, 910.166, 217.861 ); + ent.v["angles"] = ( 16.7316, 182.356, 12.4879 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2922.74, 724.105, 198.562 ); + ent.v["angles"] = ( 16.7316, 182.356, 40.4879 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 364.541, 3395.57, 41.5051 ); + ent.v["angles"] = ( 358, 180, 0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3104.14, 1640.3, 161.936 ); + ent.v["angles"] = ( 10.9758, 180.326, -12.9102 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2635.76, 487.084, 196.835 ); + ent.v["angles"] = ( 18.8055, 191.758, 22.7033 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2578.34, 187.633, 179.509 ); + ent.v["angles"] = ( 20, 180, 0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_dist_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 9922.66, 21899, 3600.31 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_dist_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -27600.3, 10659, 3749.9 ); + ent.v["angles"] = ( 350.782, 193.211, -4.29339 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_dist_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 24368.4, -9748.88, 4609.06 ); + ent.v["angles"] = ( 5, 180, 0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_dist_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 25589.7, -3953.42, 5765.74 ); + ent.v["angles"] = ( 5, 180, 0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_dist_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 28085.9, 3334.54, 4868.93 ); + ent.v["angles"] = ( 5, 180, 0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_dist_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 19922.4, -15798.9, 3135.1 ); + ent.v["angles"] = ( 5, 180, 0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_dist_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 24723.8, 10135.8, 2319.61 ); + ent.v["angles"] = ( 5, 180, 0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_dist_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 17123.1, 16349.4, 2098.76 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1945.27, 1206.2, 271.73 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 826.329, 1238.07, 115.897 ); + ent.v["angles"] = ( 5.72727, 160.904, -1.63441 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 649.534, 1398.28, 100.353 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 145.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1641.56, 1767.3, 43.2977 ); + ent.v["angles"] = ( 11.7062, 172.267, -17.7939 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1365.73, 1815.19, 24.9879 ); + ent.v["angles"] = ( 352, 180, 0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1229.12, 976.699, 24 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -532.217, 173.497, 0.33713 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 206.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1378, 1247, 24.1111 ); + ent.v["angles"] = ( 5, 180, 0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_md_dist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -909.386, 1254.69, 800.431 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 0, 1752.88, 27.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 8.21924, 1358.98, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -221.909, 1460.25, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 226.225, 1484.59, 63.6606 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1977.97, 2075, 36.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2225.8, 1631.59, 36.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1950.65, 186.472, 6.84163 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1508.45, 24.8757, 1.67484 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -884.779, 2176.01, 180.526 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1867.29, 2149.89, 24.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1170.48, 1419.85, 454.96 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2070.9, 402.547, 126.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1519.89, 10.0991, 118.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2311.02, 1550.94, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2223.21, 1550.9, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2134.84, 1551.06, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2135.85, 1742.85, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2224.22, 1742.7, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2312.03, 1742.73, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2135.94, 1647.44, 183.448 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2312.12, 1647.31, 183.448 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2388.07, 1774.99, 162.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2387.74, 1683.12, 162.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2019.74, 1760.27, 162.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2070.94, 1950.87, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1967.5, 1951.76, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1863.13, 1952.07, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2072.41, 2207.05, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1968.03, 2206.93, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1863.66, 2207.25, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2071.4, 2079.41, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1863.84, 2078.62, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2115.29, 2147.13, 170.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1819.93, 1985.75, 170.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1819.8, 2072, 170.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1818.63, 2202.83, 170.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1825.05, 1832.09, 138.246 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1888.77, 1831.99, 138.252 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1953.06, 1832.22, 138.251 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -614.031, 1253.47, 256.257 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -615.356, 1347.3, 256.252 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -615.255, 1440.95, 256.25 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -795.543, 1442.09, 256.243 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -796.641, 1348.38, 256.245 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -797.313, 1254.45, 256.25 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -799.677, 1553.73, 230.249 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -703.951, 1553.24, 229.253 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -608.215, 1553.34, 230.252 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 656.562, 1547, 187.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 705.216, 1547.4, 188.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 753.445, 1547.2, 188.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1613.67, 1535.77, 17.5144 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2092.7, 1339.74, 18.9001 ); + ent.v["angles"] = ( 356.685, 165.763, 11.4656 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1722, 1808.95, 178.388 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2668.47, 2152.08, 155.252 ); + ent.v["angles"] = ( 20.7116, 177.949, -13.5616 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2703.5, 2516.54, 162.2 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dust_xlg_fast" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 248.016, 1701.75, 568.556 ); + ent.v["angles"] = ( 0, 160.109, 16.9886 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dust_xlg_fast" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 50.1204, 1703.15, 529.166 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_shower_dribble" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -834.148, 2990.31, 120.355 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_shower_dribble_splsh" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -834.711, 2987.93, 26.2107 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_shower_dribble" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -970.285, 2853.68, 119.688 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_shower_dribble_splsh" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -968.541, 2853.7, 25.5433 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_shower_dribble" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -924.863, 2899.44, 119.547 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_shower_dribble_splsh" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -920.339, 2891.14, 25.9565 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dust_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 11.3677, 1618.27, 374.937 ); + ent.v["angles"] = ( 40, 270, 90 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2175.81, 954.268, 19.5051 ); + ent.v["angles"] = ( 342, 180, -10 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2030.93, 708.931, 2.98323 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1614.16, 644.316, 14.3407 ); + ent.v["angles"] = ( 0, 180, 11 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -977.887, 2424.62, 27.579 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 603.051, 1997.34, 471.974 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 109.131, 2039.98, 300.305 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 456.487, 1997.09, 472.36 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -250.935, 1998.33, 471.362 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distortion_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 614.392, -1908.18, 0.778503 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distortion_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2228.95, -1517.94, -102.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distortion_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 683.936, 3969.65, 185.814 ); + ent.v["angles"] = ( 270, 0, -180 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_md_dist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -705.043, 905.671, 605.985 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_md_dist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -910.118, 1470.7, 796.54 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2639.45, 1309.46, 430.593 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1618.48, 1712.38, 243.618 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 325.064, 3924.93, 471.421 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 903.79, 4201.08, 542.233 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 586.44, 4636.06, 433.914 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3501.44, 659.554, 382.335 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1653.44, 893.845, 273.388 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1802.35, 561.124, 251.033 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1407.7, 1130.36, 272.622 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_int_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2229.13, 336.441, 51.7138 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_int_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2228.96, 225.435, 52.1552 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_int_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2227.96, 114.408, 65.6977 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_int_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2232.27, -17.0891, 66.0932 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2241.25, 362.757, 254.298 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1477.85, 169.142, 117.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1029.78, 1884.33, 279.075 ); + ent.v["angles"] = ( 19, 360, 0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1045.66, 1813.18, 280.075 ); + ent.v["angles"] = ( 19, 360, 0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1024.83, 1782.77, 280.075 ); + ent.v["angles"] = ( 19, 360, 0 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1002.67, 1752.08, 280.075 ); + ent.v["angles"] = ( 19, 360, 0 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1018.65, 1681.44, 280.075 ); + ent.v["angles"] = ( 19, 360, 0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -198.845, 482.294, 172.276 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1.11494, 481.152, 174.279 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 196.77, 481.294, 174.277 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_int_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -726.043, 2206.27, 174.921 ); + ent.v["angles"] = ( 355, 180, 0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_godray_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -716.878, 2210.33, 261.129 ); + ent.v["angles"] = ( 43.5496, 198.082, 12.678 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_godray_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -45.8602, 1480.96, 268.061 ); + ent.v["angles"] = ( 42.8213, 247.927, -15.4103 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_godray_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 73.1952, 1578.19, 238.74 ); + ent.v["angles"] = ( 42.8213, 247.927, -15.4103 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_godray_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -213.454, 1555.1, 242.305 ); + ent.v["angles"] = ( 42.8213, 247.927, -15.4103 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_godray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2027.63, 183.937, 50.6113 ); + ent.v["angles"] = ( 10, 185, 0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_godray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2025.95, 85.9741, 41.9854 ); + ent.v["angles"] = ( 10, 192, 0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_godray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2038.06, -57.1976, 60.9706 ); + ent.v["angles"] = ( 7, 197, 0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_godray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2027.27, 349.371, 25.897 ); + ent.v["angles"] = ( 12, 164, 0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_godray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1798.41, 2165.83, 131.125 ); + ent.v["angles"] = ( 35, 270, 0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_godray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1911.09, 2162.95, 135.452 ); + ent.v["angles"] = ( 35, 270, 0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_godray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1715.29, 2161.09, 127.314 ); + ent.v["angles"] = ( 35, 270, 0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_godray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1985.12, 2159.55, 130.548 ); + ent.v["angles"] = ( 35, 270, 0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 897.696, 4788.78, 578.073 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1714.79, 3812.23, 825.609 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1944.33, 3229.31, 621.89 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3488.29, 2622.54, 870.884 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 553.282, 3521.04, 567.992 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 400.069, 4161.27, 568.934 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 28.7965, 3061.74, 560.321 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distortion_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4110.31, 1859.71, -88.1768 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3509.14, 1835.98, 426.776 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1207.08, -1749.98, 806.649 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distortion_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3431.97, 2520.41, 294.293 ); + ent.v["angles"] = ( 270, 0, -180 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1615.16, 3056.38, 199.884 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 134.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1631.36, 2704.26, 34.2679 ); + ent.v["angles"] = ( 0, 180, -13 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1604.32, 132.018, 118.25 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1702.35, 112.9, 118.251 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -970.92, 2583.59, 167.442 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -929.168, 2593.17, 166.942 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -879.67, 2609.55, 166.438 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -514.969, 2911.64, 166.949 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -522.627, 2869.33, 166.933 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -542.725, 2829.3, 166.94 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -733.218, 2041.9, 302.249 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -731.652, 2278.22, 302.255 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1047.2, 2278.07, 302.251 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1016.29, 2044.48, 302.251 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -605.784, 1062.47, 289.259 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -604.939, 1768.64, 230.251 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -807.27, 1778.34, 230.251 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -507.609, 1669.29, 257.615 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -507.491, 1862.43, 257.875 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -370.069, 1211.38, 256.252 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -262.063, 1104.4, 256.253 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 280.665, 1099.93, 252.252 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 394.115, 1215.31, 252.255 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 514.388, 1854.96, 256.875 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 513.58, 1670.96, 257.624 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 712.761, 1178.95, 238.247 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 654.314, 1244.8, 246.875 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 746.779, 1245, 246.875 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 602.326, 1268.39, 237.253 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 613.946, 1510.23, 238.244 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 803.638, 1514.41, 238.252 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 748.242, 1448.84, 246.875 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 653.598, 1448.92, 246.875 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_int_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -674.363, 1173.12, 2.65046 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -741.161, 1038.45, 5.69958 ); + ent.v["angles"] = ( 45, 90, 0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_int_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -672.64, 1301.44, -40.5766 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -131.132, 3260.68, 60.9493 ); + ent.v["angles"] = ( 354, 180, 0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1460.74, 3053.21, 56.1114 ); + ent.v["angles"] = ( 4, 180, 0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1198.32, 3257.22, 78.7027 ); + ent.v["angles"] = ( 1, 180, 0 ); + ent.v["delay"] = -67; +} diff --git a/MP/Maps/Mirage/clientscripts/mp/mp_mirage.csc b/MP/Maps/Mirage/clientscripts/mp/mp_mirage.csc new file mode 100644 index 0000000..a984249 --- /dev/null +++ b/MP/Maps/Mirage/clientscripts/mp/mp_mirage.csc @@ -0,0 +1,25 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_mirage_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_mirage_amb; + +main() +{ + level.worldmapx = 0; + level.worldmapy = 0; + level.worldlat = 43.1974; + level.worldlong = 110.923; + clientscripts\mp\_load::main(); + clientscripts\mp\mp_mirage_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_mirage_amb::main(); + setsaveddvar( "sm_sunsamplesizenear", 0.39 ); + setsaveddvar( "sm_sunshadowsmall", 1 ); + waitforclient( 0 ); +/# + println( "*** Client : mp_mirage running..." ); +#/ +} diff --git a/MP/Maps/Mirage/clientscripts/mp/mp_mirage_amb.csc b/MP/Maps/Mirage/clientscripts/mp/mp_mirage_amb.csc new file mode 100644 index 0000000..12561f3 --- /dev/null +++ b/MP/Maps/Mirage/clientscripts/mp/mp_mirage_amb.csc @@ -0,0 +1,85 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "mirage_outdoor", 1 ); + setambientroomtone( "mirage_outdoor", "amb_wind_exterior_2d", 0.5, 1 ); + setambientroomreverb( "mirage_outdoor", "mirage_outdoor", 1, 1 ); + setambientroomcontext( "mirage_outdoor", "ringoff_plr", "outdoor" ); + declareambientroom( "bus_interior" ); + setambientroomtone( "bus_interior", "amb_wind_exterior_2d_qt", 0.5, 1 ); + setambientroomreverb( "bus_interior", "mirage_bus", 1, 1 ); + setambientroomcontext( "bus_interior", "ringoff_plr", "indoor" ); + declareambientroom( "guardhouse_room" ); + setambientroomtone( "guardhouse_room", "amb_wind_interior_2d", 0.5, 1 ); + setambientroomreverb( "guardhouse_room", "mirage_gaurdroom", 1, 1 ); + setambientroomcontext( "guardhouse_room", "ringoff_plr", "indoor" ); + declareambientroom( "kitchen_room" ); + setambientroomtone( "kitchen_room", "amb_wind_interior_2d", 0.5, 1 ); + setambientroomreverb( "kitchen_room", "mirage_medium_room", 1, 1 ); + setambientroomcontext( "kitchen_room", "ringoff_plr", "indoor" ); + declareambientroom( "veranda_room" ); + setambientroomtone( "veranda_room", "amb_wind_exterior_2d_qt", 0.5, 1 ); + setambientroomreverb( "veranda_room", "mirage_partial_room", 1, 1 ); + setambientroomcontext( "veranda_room", "ringoff_plr", "outdoor" ); + declareambientroom( "open_room" ); + setambientroomtone( "open_room", "amb_wind_exterior_2d_qt", 0.5, 1 ); + setambientroomreverb( "open_room", "mirage_open_room", 1, 1 ); + setambientroomcontext( "open_room", "ringoff_plr", "outdoor" ); + declareambientroom( "med_living_room" ); + setambientroomtone( "med_living_room", "amb_wind_interior_2d", 0.5, 1 ); + setambientroomreverb( "med_living_room", "mirage_medium_room", 1, 1 ); + setambientroomcontext( "med_living_room", "ringoff_plr", "indoor" ); + declareambientroom( "cave_tile_room" ); + setambientroomtone( "cave_tile_room", "amb_wind_interior_2d", 0.5, 1 ); + setambientroomreverb( "cave_tile_room", "mirage_tile_room", 1, 1 ); + setambientroomcontext( "cave_tile_room", "ringoff_plr", "indoor" ); + declareambientroom( "center_atrium_room" ); + setambientroomtone( "center_atrium_room", "amb_wind_interior_2d", 0.5, 1 ); + setambientroomreverb( "center_atrium_room", "mirage_large_room", 1, 1 ); + setambientroomcontext( "center_atrium_room", "ringoff_plr", "indoor" ); + declareambientroom( "elevator_room" ); + setambientroomtone( "elevator_room", "amb_wind_interior_2d", 0.5, 1 ); + setambientroomreverb( "elevator_room", "mirage_elevator_area", 1, 1 ); + setambientroomcontext( "elevator_room", "ringoff_plr", "indoor" ); + declareambientroom( "central_anteroom" ); + setambientroomtone( "central_anteroom", "amb_wind_interior_2d", 0.5, 1 ); + setambientroomreverb( "central_anteroom", "mirage_smallroom", 1, 1 ); + setambientroomcontext( "central_anteroom", "ringoff_plr", "indoor" ); + declareambientroom( "vault_room" ); + setambientroomtone( "vault_room", "amb_wind_interior_2d", 0.5, 1 ); + setambientroomreverb( "vault_room", "mirage_vault", 1, 1 ); + setambientroomcontext( "vault_room", "ringoff_plr", "indoor" ); + declareambientroom( "stairwell_room" ); + setambientroomtone( "stairwell_room", "amb_wind_interior_2d", 0.5, 1 ); + setambientroomreverb( "stairwell_room", "mirage_stairs", 1, 1 ); + setambientroomcontext( "stairwell_room", "ringoff_plr", "indoor" ); + declareambientroom( "sand_house_room" ); + setambientroomtone( "sand_house_room", "amb_wind_interior_2d", 0.5, 1 ); + setambientroomreverb( "sand_house_room", "mirage_medium_room", 1, 1 ); + setambientroomcontext( "sand_house_room", "ringoff_plr", "indoor" ); + declareambientroom( "archway_room" ); + setambientroomtone( "archway_room", "amb_wind_exterior_2d", 0.5, 1 ); + setambientroomreverb( "archway_room", "mirage_outdoor", 1, 1 ); + setambientroomcontext( "archway_room", "ringoff_plr", "outdoor" ); + declareambientroom( "small_sitting_room" ); + setambientroomtone( "small_sitting_room", "amb_wind_interior_2d", 0.5, 1 ); + setambientroomreverb( "small_sitting_room", "mirage_smallroom", 1, 1 ); + setambientroomcontext( "small_sitting_room", "ringoff_plr", "indoor" ); + thread snd_start_autofx_audio(); + thread snd_play_loopers(); +} + +snd_play_loopers() +{ + +} + +snd_start_autofx_audio() +{ + +} diff --git a/MP/Maps/Mirage/clientscripts/mp/mp_mirage_fx.csc b/MP/Maps/Mirage/clientscripts/mp/mp_mirage_fx.csc new file mode 100644 index 0000000..a1cb97a --- /dev/null +++ b/MP/Maps/Mirage/clientscripts/mp/mp_mirage_fx.csc @@ -0,0 +1,60 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\createfx\mp_mirage_fx; +#include clientscripts\mp\_fx; + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_distortion_md"] = loadfx( "maps/mp_maps/fx_mp_mirage_distortion_md" ); + level._effect["fx_mp_distortion_lg"] = loadfx( "maps/mp_maps/fx_mp_mirage_distortion_lg" ); + level._effect["fx_mp_sand_gust_int_sm"] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_gust_int_sm" ); + level._effect["fx_mp_dust_lg"] = loadfx( "maps/mp_maps/fx_mp_mirage_dust_lg" ); + level._effect["fx_mp_dust_xlg"] = loadfx( "maps/mp_maps/fx_mp_mirage_dust_xlg" ); + level._effect["fx_mp_dust_xlg_fast"] = loadfx( "maps/mp_maps/fx_mp_mirage_dust_xlg_fast" ); + level._effect["fx_mp_foliage_gust"] = loadfx( "maps/mp_maps/fx_mp_mirage_foliage_gust" ); + level._effect["fx_mp_sand_dist_md"] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_dist_md" ); + level._effect["fx_mp_sand_fall_md"] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_fall_md" ); + level._effect["fx_mp_sand_fall_md_dist"] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_fall_md_dist" ); + level._effect["fx_mp_sand_fall_sm"] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_fall_sm" ); + level._effect["fx_mp_sand_gust_md"] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_gust_md" ); + level._effect["fx_mp_sand_gust_sm"] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_gust_sm" ); + level._effect["fx_mp_sand_gust_sm_far"] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_gust_sm_far" ); + level._effect["fx_mp_godray_md"] = loadfx( "maps/mp_maps/fx_mp_mirage_godray_md" ); + level._effect["fx_mp_godray_lg"] = loadfx( "maps/mp_maps/fx_mp_mirage_godray_lg" ); + level._effect["fx_mp_godray_sm"] = loadfx( "maps/mp_maps/fx_mp_mirage_godray_sm" ); + level._effect["fx_mp_sand_wind"] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_wind" ); + level._effect["fx_mp_light_sm"] = loadfx( "maps/mp_maps/fx_mp_mirage_light_sm" ); + level._effect["fx_mp_sun"] = loadfx( "lens_flares/fx_lf_mp_mirage_sun1" ); + level._effect["fx_water_shower_dribble_splsh"] = loadfx( "water/fx_water_shower_dribble_sm_splsh" ); + level._effect["fx_water_shower_dribble"] = loadfx( "water/fx_water_shower_dribble_sm" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["lantern_lrg"] = %fxanim_mp_mirage_lantern_lrg_anim; + level.scr_anim["fxanim_props"]["lantern_sm"] = %fxanim_mp_mirage_lantern_sm_anim; + level.scr_anim["fxanim_props"]["lamp"] = %fxanim_mp_mirage_lamp_anim; + level.scr_anim["fxanim_props"]["ruined_lanterns"] = %fxanim_mp_mirage_lanterns_ruined_anim; + level.scr_anim["fxanim_props"]["lanterns_string"] = %fxanim_mp_mirage_lanterns_string_anim; + level.scr_anim["fxanim_props"]["lantern_lrg_02"] = %fxanim_mp_mirage_lantern_lrg_02_anim; +} + +main() +{ + clientscripts\mp\createfx\mp_mirage_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fxanim_props(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} diff --git a/MP/Maps/Mirage/maps/mp/createfx/mp_mirage_fx.gsc b/MP/Maps/Mirage/maps/mp/createfx/mp_mirage_fx.gsc new file mode 100644 index 0000000..a47d78b --- /dev/null +++ b/MP/Maps/Mirage/maps/mp/createfx/mp_mirage_fx.gsc @@ -0,0 +1,1702 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1091.16, 21.5789, -15.3096 ); + ent.v["angles"] = ( 10, 180, 0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -596.184, 114.64, 3.71116 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1593.32, 244.803, -50.4112 ); + ent.v["angles"] = ( 5, 180, 0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1950.07, 665.598, -82.5685 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1751.17, 1241.41, -47.7047 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2036.56, 1437.56, -47.8889 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1751.14, 1633.92, -6.7206 ); + ent.v["angles"] = ( 12, 180, -13 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 240.209, 263.864, 0 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -202.286, 312.01, 0 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 636.783, 124.097, 0 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1060.99, 386.494, -1 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1316.42, 769.33, 4.3183 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2520.85, 1109.48, 0.8895 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2908.66, 1101.73, 12.9798 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1794.22, 1550.08, 23.4582 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1363.96, 1594.85, 26.6079 ); + ent.v["angles"] = ( 355.019, 180.437, -5.01824 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1109.69, 1382.94, 66.1692 ); + ent.v["angles"] = ( 348.877, 201.141, -0.926659 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1586.02, 2240.7, 23.7261 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1181.25, 2527.9, 23.5668 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 774.856, 2669.9, 21.1304 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -244.403, 2633.43, 27.2288 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -384.346, 2871.67, 27.4893 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -890.474, 2723.1, 24.9618 ); + ent.v["angles"] = ( 360, 226, 0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -681.631, 2494.51, 27.9246 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1241.15, 2027.04, 23.1111 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 231.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1623.84, 1579.48, 9.8956 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2623.63, 1135.37, 1.80512 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2123.18, 714.577, -5.50962 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2140.89, 1337.15, 20.8598 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1621.68, 709.732, -1.74518 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1482.18, 2079.48, 8.59846 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1482.91, 2574, 9.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 982.087, 2386.41, 11.4889 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 985.358, 2883.88, 9 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 497.569, 2741.65, 9 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -0.212731, 2741.96, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -499.272, 2742.62, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1010.08, 2583.29, 9 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1125.28, 707.128, -9.15419 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1154.78, 1214.82, 4.1803 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1126.95, 208.184, -3.74612 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 629.447, 125.845, -1 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 134.253, 122.355, -1 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -362.289, 121.904, 1 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -860.037, 128.301, 0.27426 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1359.23, 143.143, -41.1538 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1345.57, -356.737, -4.84829 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -845.29, -371.657, -3.57959 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -345.802, -363.995, -4.91145 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 155.889, -377.427, -4.52922 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 648.367, -370.228, -1.98896 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1858.9, 574.538, -77.0829 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1861.21, 76.1131, -70.0314 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1788.39, 1076.32, -89 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1289.62, 641.011, 23 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2354.68, 1079, -89 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2366.02, 579.598, -71.2848 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1802.43, 1578.19, -90.8889 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2301.12, 1578.09, -58.8877 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2785.92, 1404.29, -48.0723 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2363.7, 78.6753, -15.1506 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -500.453, 3247.06, 188.796 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4.03281, 3249.2, 172.289 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 499.666, 3243.33, 151.402 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2623.41, 1630.85, 52.7547 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3121.62, 1631.09, 173.887 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3127.95, 1131.07, 109.869 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3128.48, 630.281, 248.113 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1645.51, 1139.82, 242.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1155.63, -284.016, 61.87 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1652.66, -238.498, 150.253 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 506.859, 2140.17, 250 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2.91546, 2139.29, 247.032 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -493.73, 2135.46, 248.27 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1687.69, 1771.83, 298.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2290.58, 883.217, -88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sun" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 417385, 809545, 411621 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -348.049, 2129.28, 27.2144 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -110.656, 2048.5, 27.3012 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 695.738, 2032.04, 23 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 563.011, 2327.7, 23 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 371.671, 2540.56, -40.854 ); + ent.v["angles"] = ( 10, 217, 0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -56.7814, 2450.61, -80.539 ); + ent.v["angles"] = ( 345, 180, -24 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 420.208, 2853.79, 28.7489 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 673.677, 2918.76, 27 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1165.8, 2207.69, 21.4538 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 835.442, 2241.02, 24.6877 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 245.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 184.195, 2059.95, 27 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -603.306, 2881.29, 27 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1364.2, 1828.73, 39.26 ); + ent.v["angles"] = ( 330, 180, 0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1216.27, 1185.94, 74.1245 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1192.6, 946.894, 43.782 ); + ent.v["angles"] = ( 0, 180, -18 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 175.402, 114.579, 3.89228 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 794.586, -25.4861, 4.27233 ); + ent.v["angles"] = ( 0, 180, 14 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1220.07, 258.77, -1.57812 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2313.86, 559.111, 71.2447 ); + ent.v["angles"] = ( 19.1717, 186.948, 13.5715 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2813.63, 1576.62, 58.4678 ); + ent.v["angles"] = ( 4.97532, 179.686, -9.02184 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 894.861, 164.044, -7.73769 ); + ent.v["angles"] = ( 350, 180, 0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2703.86, 910.23, -41.3147 ); + ent.v["angles"] = ( 320, 180, 11 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2578.19, 1551.26, 2.45107 ); + ent.v["angles"] = ( 330, 180, -17 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2617.19, 1373.04, -35.1011 ); + ent.v["angles"] = ( 330, 180, -11 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2390.42, 1282.34, -48.8889 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1991.37, 1781.42, 12.7667 ); + ent.v["angles"] = ( 360, 180, -33 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 281.687, 1790.51, 539.968 ); + ent.v["angles"] = ( 2.15829, 160.339, 17.8744 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 226.805, 1646.86, 590.497 ); + ent.v["angles"] = ( 2.15829, 160.339, 17.8744 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -289.968, 1813.6, 530.813 ); + ent.v["angles"] = ( 9.42481, 17.7219, -18.4054 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -232.37, 1660.01, 584.575 ); + ent.v["angles"] = ( 9.42481, 17.7219, -18.4054 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1780.38, 1846.46, 320.825 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1355.77, 2101.54, 174.706 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1180.17, 2320.05, 174.012 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1025.8, 2430.29, 177.621 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1258.01, 2210.83, 177.59 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1722.18, 2252.54, 178.483 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2226.12, 1404.17, 175.828 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2454.68, 1586.02, 41.2666 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1379.05, 24.0002, 256.347 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2340.12, 1248.51, 94.4229 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2307.98, 1055.63, 93.9229 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1356.08, 2224.22, 223.428 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2181.91, -435.558, -26.2728 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2179.59, -936.481, 29.8614 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1677.1, -939.043, -25.0194 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1161.46, -1371.89, 40.1637 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -661.182, -1386.81, 41.4324 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -161.693, -1379.15, 40.1006 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 339.998, -1392.58, 40.4828 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 832.476, -1385.38, 43.0231 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1339.74, -1299.17, 106.882 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 372.146, 3856.57, 194.194 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 865.817, 3994.84, 218.772 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2910.28, 1550.47, 502.189 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2412.54, 1395.99, 251.979 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3560.59, 2005.79, 520.399 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3528.06, 657.5, 507.518 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2950, 942.555, 499.898 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1326.73, 2696.19, 260.389 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 846.058, 3007.01, 455.296 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 406.235, 2970.29, 373.637 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -954.391, 2117.66, 464.657 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1319.15, 517.609, 418.382 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -373.75, -52.6996, 493.678 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1335.18, 511.224, 206.787 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2242.69, 1735.49, 492.427 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1770.77, 293.89, 485.163 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2238.27, 635.589, 598.577 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1088.16, -237.124, 622.593 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -569.882, -230.191, 415.49 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 748.337, -439.471, 398.695 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 425.36, -203.352, 378.44 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 973.066, -162.95, 457.354 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1212.22, -213.581, 450.991 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3276.44, 1747.69, 229.887 ); + ent.v["angles"] = ( 14.7791, 179.055, -18.1938 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3294.57, 910.166, 217.861 ); + ent.v["angles"] = ( 16.7316, 182.356, 12.4879 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2922.74, 724.105, 198.562 ); + ent.v["angles"] = ( 16.7316, 182.356, 40.4879 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 364.541, 3395.57, 41.5051 ); + ent.v["angles"] = ( 358, 180, 0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3104.14, 1640.3, 161.936 ); + ent.v["angles"] = ( 10.9758, 180.326, -12.9102 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2635.76, 487.084, 196.835 ); + ent.v["angles"] = ( 18.8055, 191.758, 22.7033 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2578.34, 187.633, 179.509 ); + ent.v["angles"] = ( 20, 180, 0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_dist_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 9922.66, 21899, 3600.31 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_dist_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -27600.3, 10659, 3749.9 ); + ent.v["angles"] = ( 350.782, 193.211, -4.29339 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_dist_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 24368.4, -9748.88, 4609.06 ); + ent.v["angles"] = ( 5, 180, 0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_dist_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 25589.7, -3953.42, 5765.74 ); + ent.v["angles"] = ( 5, 180, 0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_dist_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 28085.9, 3334.54, 4868.93 ); + ent.v["angles"] = ( 5, 180, 0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_dist_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 19922.4, -15798.9, 3135.1 ); + ent.v["angles"] = ( 5, 180, 0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_dist_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 24723.8, 10135.8, 2319.61 ); + ent.v["angles"] = ( 5, 180, 0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_dist_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 17123.1, 16349.4, 2098.76 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1945.27, 1206.2, 271.73 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 826.329, 1238.07, 115.897 ); + ent.v["angles"] = ( 5.72727, 160.904, -1.63441 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 649.534, 1398.28, 100.353 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 145.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1641.56, 1767.3, 43.2977 ); + ent.v["angles"] = ( 11.7062, 172.267, -17.7939 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1365.73, 1815.19, 24.9879 ); + ent.v["angles"] = ( 352, 180, 0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1229.12, 976.699, 24 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -532.217, 173.497, 0.33713 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 206.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1378, 1247, 24.1111 ); + ent.v["angles"] = ( 5, 180, 0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_md_dist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -909.386, 1254.69, 800.431 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 0, 1752.88, 27.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 8.21924, 1358.98, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -221.909, 1460.25, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 226.225, 1484.59, 63.6606 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1977.97, 2075, 36.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2225.8, 1631.59, 36.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1950.65, 186.472, 6.84163 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1508.45, 24.8757, 1.67484 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -884.779, 2176.01, 180.526 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1867.29, 2149.89, 24.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1170.48, 1419.85, 454.96 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2070.9, 402.547, 126.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1519.89, 10.0991, 118.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2311.02, 1550.94, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2223.21, 1550.9, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2134.84, 1551.06, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2135.85, 1742.85, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2224.22, 1742.7, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2312.03, 1742.73, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2135.94, 1647.44, 183.448 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2312.12, 1647.31, 183.448 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2388.07, 1774.99, 162.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2387.74, 1683.12, 162.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2019.74, 1760.27, 162.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2070.94, 1950.87, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1967.5, 1951.76, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1863.13, 1952.07, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2072.41, 2207.05, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1968.03, 2206.93, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1863.66, 2207.25, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2071.4, 2079.41, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1863.84, 2078.62, 182.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2115.29, 2147.13, 170.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1819.93, 1985.75, 170.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1819.8, 2072, 170.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1818.63, 2202.83, 170.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1825.05, 1832.09, 138.246 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1888.77, 1831.99, 138.252 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1953.06, 1832.22, 138.251 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -614.031, 1253.47, 256.257 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -615.356, 1347.3, 256.252 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -615.255, 1440.95, 256.25 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -795.543, 1442.09, 256.243 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -796.641, 1348.38, 256.245 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -797.313, 1254.45, 256.25 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -799.677, 1553.73, 230.249 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -703.951, 1553.24, 229.253 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -608.215, 1553.34, 230.252 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 656.562, 1547, 187.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 705.216, 1547.4, 188.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 753.445, 1547.2, 188.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1613.67, 1535.77, 17.5144 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2092.7, 1339.74, 18.9001 ); + ent.v["angles"] = ( 356.685, 165.763, 11.4656 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1722, 1808.95, 178.388 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2668.47, 2152.08, 155.252 ); + ent.v["angles"] = ( 20.7116, 177.949, -13.5616 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2703.5, 2516.54, 162.2 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dust_xlg_fast" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 248.016, 1701.75, 568.556 ); + ent.v["angles"] = ( 0, 160.109, 16.9886 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dust_xlg_fast" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 50.1204, 1703.15, 529.166 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_shower_dribble" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -834.148, 2990.31, 120.355 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_shower_dribble_splsh" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -834.711, 2987.93, 26.2107 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_shower_dribble" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -970.285, 2853.68, 119.688 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_shower_dribble_splsh" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -968.541, 2853.7, 25.5433 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_shower_dribble" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -924.863, 2899.44, 119.547 ); + ent.v["angles"] = ( 89, 180, -180 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_shower_dribble_splsh" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -920.339, 2891.14, 25.9565 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dust_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 11.3677, 1618.27, 374.937 ); + ent.v["angles"] = ( 40, 270, 90 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2175.81, 954.268, 19.5051 ); + ent.v["angles"] = ( 342, 180, -10 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2030.93, 708.931, 2.98323 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1614.16, 644.316, 14.3407 ); + ent.v["angles"] = ( 0, 180, 11 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -977.887, 2424.62, 27.579 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 603.051, 1997.34, 471.974 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 109.131, 2039.98, 300.305 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 456.487, 1997.09, 472.36 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -250.935, 1998.33, 471.362 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distortion_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 614.392, -1908.18, 0.778503 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distortion_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2228.95, -1517.94, -102.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distortion_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 683.936, 3969.65, 185.814 ); + ent.v["angles"] = ( 270, 0, -180 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_md_dist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -705.043, 905.671, 605.985 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_md_dist" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -910.118, 1470.7, 796.54 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2639.45, 1309.46, 430.593 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1618.48, 1712.38, 243.618 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 325.064, 3924.93, 471.421 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 903.79, 4201.08, 542.233 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 586.44, 4636.06, 433.914 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3501.44, 659.554, 382.335 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1653.44, 893.845, 273.388 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1802.35, 561.124, 251.033 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1407.7, 1130.36, 272.622 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_int_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2229.13, 336.441, 51.7138 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_int_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2228.96, 225.435, 52.1552 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_int_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2227.96, 114.408, 65.6977 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_int_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2232.27, -17.0891, 66.0932 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2241.25, 362.757, 254.298 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1477.85, 169.142, 117.875 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1029.78, 1884.33, 279.075 ); + ent.v["angles"] = ( 19, 360, 0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1045.66, 1813.18, 280.075 ); + ent.v["angles"] = ( 19, 360, 0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1024.83, 1782.77, 280.075 ); + ent.v["angles"] = ( 19, 360, 0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1002.67, 1752.08, 280.075 ); + ent.v["angles"] = ( 19, 360, 0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1018.65, 1681.44, 280.075 ); + ent.v["angles"] = ( 19, 360, 0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -198.845, 482.294, 172.276 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1.11494, 481.152, 174.279 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 196.77, 481.294, 174.277 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_int_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -726.043, 2206.27, 174.921 ); + ent.v["angles"] = ( 355, 180, 0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_godray_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -716.878, 2210.33, 261.129 ); + ent.v["angles"] = ( 43.5496, 198.082, 12.678 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_godray_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -45.8602, 1480.96, 268.061 ); + ent.v["angles"] = ( 42.8213, 247.927, -15.4103 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_godray_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 73.1952, 1578.19, 238.74 ); + ent.v["angles"] = ( 42.8213, 247.927, -15.4103 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_godray_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -213.454, 1555.1, 242.305 ); + ent.v["angles"] = ( 42.8213, 247.927, -15.4103 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_godray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2027.63, 183.937, 50.6113 ); + ent.v["angles"] = ( 10, 185, 0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_godray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2025.95, 85.9741, 41.9854 ); + ent.v["angles"] = ( 10, 192, 0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_godray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2038.06, -57.1976, 60.9706 ); + ent.v["angles"] = ( 7, 197, 0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_godray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2027.27, 349.371, 25.897 ); + ent.v["angles"] = ( 12, 164, 0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_godray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1798.41, 2165.83, 131.125 ); + ent.v["angles"] = ( 35, 270, 0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_godray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1911.09, 2162.95, 135.452 ); + ent.v["angles"] = ( 35, 270, 0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_godray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1715.29, 2161.09, 127.314 ); + ent.v["angles"] = ( 35, 270, 0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_godray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1985.12, 2159.55, 130.548 ); + ent.v["angles"] = ( 35, 270, 0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 897.696, 4788.78, 578.073 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1714.79, 3812.23, 825.609 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1944.33, 3229.31, 621.89 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3488.29, 2622.54, 870.884 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 553.282, 3521.04, 567.992 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 400.069, 4161.27, 568.934 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 28.7965, 3061.74, 560.321 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distortion_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4110.31, 1859.71, -88.1768 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3509.14, 1835.98, 426.776 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_foliage_gust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1207.08, -1749.98, 806.649 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distortion_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3431.97, 2520.41, 294.293 ); + ent.v["angles"] = ( 270, 0, -180 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1615.16, 3056.38, 199.884 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 134.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1631.36, 2704.26, 34.2679 ); + ent.v["angles"] = ( 0, 180, -13 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1604.32, 132.018, 118.25 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1702.35, 112.9, 118.251 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -970.92, 2583.59, 167.442 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -929.168, 2593.17, 166.942 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -879.67, 2609.55, 166.438 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -514.969, 2911.64, 166.949 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -522.627, 2869.33, 166.933 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -542.725, 2829.3, 166.94 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -733.218, 2041.9, 302.249 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -731.652, 2278.22, 302.255 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1047.2, 2278.07, 302.251 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1016.29, 2044.48, 302.251 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -605.784, 1062.47, 289.259 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -604.939, 1768.64, 230.251 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -807.27, 1778.34, 230.251 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -507.609, 1669.29, 257.615 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -507.491, 1862.43, 257.875 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -370.069, 1211.38, 256.252 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -262.063, 1104.4, 256.253 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 280.665, 1099.93, 252.252 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 394.115, 1215.31, 252.255 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 514.388, 1854.96, 256.875 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 513.58, 1670.96, 257.624 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 712.761, 1178.95, 238.247 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 654.314, 1244.8, 246.875 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 746.779, 1245, 246.875 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 602.326, 1268.39, 237.253 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 613.946, 1510.23, 238.244 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 803.638, 1514.41, 238.252 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 748.242, 1448.84, 246.875 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 653.598, 1448.92, 246.875 ); + ent.v["angles"] = ( 90, 4.49091, 4.49089 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_int_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -674.363, 1173.12, 2.65046 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_dust_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -741.161, 1038.45, 5.69958 ); + ent.v["angles"] = ( 45, 90, 0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_int_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -672.64, 1301.44, -40.5766 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -131.132, 3260.68, 60.9493 ); + ent.v["angles"] = ( 354, 180, 0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1460.74, 3053.21, 56.1114 ); + ent.v["angles"] = ( 4, 180, 0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1198.32, 3257.22, 78.7027 ); + ent.v["angles"] = ( 1, 180, 0 ); + ent.v["delay"] = -67; +} diff --git a/MP/Maps/Mirage/maps/mp/mp_mirage.gsc b/MP/Maps/Mirage/maps/mp/mp_mirage.gsc new file mode 100644 index 0000000..d584603 --- /dev/null +++ b/MP/Maps/Mirage/maps/mp/mp_mirage.gsc @@ -0,0 +1,44 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_mirage_fx; +#include maps\mp\_load; +#include maps\mp\mp_mirage_amb; +#include maps\mp\_compass; +#include maps\mp\gametypes\_spawning; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_mirage_fx::main(); + precachemodel( "collision_physics_256x256x10" ); + precachemodel( "collision_physics_cylinder_32x128" ); + precachemodel( "collision_clip_128x128x10" ); + precachemodel( "collision_clip_256x256x10" ); + maps\mp\_load::main(); + maps\mp\mp_mirage_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_mirage" ); + setdvar( "compassmaxrange", "2400" ); + visionsetnaked( "mp_mirage", 1 ); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + spawncollision( "collision_physics_256x256x10", "collider", ( 58.5, 3360, 53.5 ), vectorscale( ( 0, 1, 0 ), 352.9 ) ); + spawncollision( "collision_physics_cylinder_32x128", "collider", ( 3029, 1571.5, 129.5 ), vectorscale( ( 0, 0, -1 ), 8.3 ) ); + spawncollision( "collision_physics_cylinder_32x128", "collider", ( -1341, 517.5, -35.5 ), ( 354.7, 0, -0.6 ) ); + spawncollision( "collision_clip_256x256x10", "collider", ( 1744, 482, 16 ), ( 270, 183.902, 86.0983 ) ); + maps\mp\gametypes\_spawning::level_use_unified_spawning( 1 ); +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2500", reset_dvars ); +} diff --git a/MP/Maps/Mirage/maps/mp/mp_mirage_amb.gsc b/MP/Maps/Mirage/maps/mp/mp_mirage_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Mirage/maps/mp/mp_mirage_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Mirage/maps/mp/mp_mirage_fx.gsc b/MP/Maps/Mirage/maps/mp/mp_mirage_fx.gsc new file mode 100644 index 0000000..33b1ded --- /dev/null +++ b/MP/Maps/Mirage/maps/mp/mp_mirage_fx.gsc @@ -0,0 +1,55 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_mirage_fx; + +main() +{ + precache_fxanim_props(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_mirage_fx::main(); +} + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_distortion_md"] = loadfx( "maps/mp_maps/fx_mp_mirage_distortion_md" ); + level._effect["fx_mp_distortion_lg"] = loadfx( "maps/mp_maps/fx_mp_mirage_distortion_lg" ); + level._effect["fx_mp_sand_gust_int_sm"] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_gust_int_sm" ); + level._effect["fx_mp_dust_lg"] = loadfx( "maps/mp_maps/fx_mp_mirage_dust_lg" ); + level._effect["fx_mp_dust_xlg"] = loadfx( "maps/mp_maps/fx_mp_mirage_dust_xlg" ); + level._effect["fx_mp_dust_xlg_fast"] = loadfx( "maps/mp_maps/fx_mp_mirage_dust_xlg_fast" ); + level._effect["fx_mp_foliage_gust"] = loadfx( "maps/mp_maps/fx_mp_mirage_foliage_gust" ); + level._effect["fx_mp_sand_dist_md"] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_dist_md" ); + level._effect["fx_mp_sand_fall_md"] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_fall_md" ); + level._effect["fx_mp_sand_fall_md_dist"] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_fall_md_dist" ); + level._effect["fx_mp_sand_fall_sm"] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_fall_sm" ); + level._effect["fx_mp_sand_gust_md"] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_gust_md" ); + level._effect["fx_mp_sand_gust_sm"] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_gust_sm" ); + level._effect["fx_mp_sand_gust_sm_far"] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_gust_sm_far" ); + level._effect["fx_mp_godray_md"] = loadfx( "maps/mp_maps/fx_mp_mirage_godray_md" ); + level._effect["fx_mp_godray_lg"] = loadfx( "maps/mp_maps/fx_mp_mirage_godray_lg" ); + level._effect["fx_mp_godray_sm"] = loadfx( "maps/mp_maps/fx_mp_mirage_godray_sm" ); + level._effect["fx_mp_sand_wind"] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_wind" ); + level._effect["fx_mp_light_sm"] = loadfx( "maps/mp_maps/fx_mp_mirage_light_sm" ); + level._effect["fx_mp_sun"] = loadfx( "lens_flares/fx_lf_mp_mirage_sun1" ); + level._effect["fx_water_shower_dribble_splsh"] = loadfx( "water/fx_water_shower_dribble_sm_splsh" ); + level._effect["fx_water_shower_dribble"] = loadfx( "water/fx_water_shower_dribble_sm" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["lantern_lrg"] = %fxanim_mp_mirage_lantern_lrg_anim; + level.scr_anim["fxanim_props"]["lantern_sm"] = %fxanim_mp_mirage_lantern_sm_anim; + level.scr_anim["fxanim_props"]["lamp"] = %fxanim_mp_mirage_lamp_anim; + level.scr_anim["fxanim_props"]["ruined_lanterns"] = %fxanim_mp_mirage_lanterns_ruined_anim; + level.scr_anim["fxanim_props"]["lanterns_string"] = %fxanim_mp_mirage_lanterns_string_anim; + level.scr_anim["fxanim_props"]["lantern_lrg_02"] = %fxanim_mp_mirage_lantern_lrg_02_anim; +} diff --git a/MP/Maps/Nuketown 2025/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Nuketown 2025/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Nuketown 2025/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Nuketown 2025/aitype/enemy_dog_mp.gsc b/MP/Maps/Nuketown 2025/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Nuketown 2025/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Nuketown 2025/character/character_mp_german_shepherd.gsc b/MP/Maps/Nuketown 2025/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Nuketown 2025/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Nuketown 2025/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Nuketown 2025/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Nuketown 2025/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Nuketown 2025/clientscripts/mp/createfx/mp_nuketown_2020_fx.csc b/MP/Maps/Nuketown 2025/clientscripts/mp/createfx/mp_nuketown_2020_fx.csc new file mode 100644 index 0000000..642b687 --- /dev/null +++ b/MP/Maps/Nuketown 2025/clientscripts/mp/createfx/mp_nuketown_2020_fx.csc @@ -0,0 +1,710 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( 493.501, 688.64, -56.4796 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( 553.122, 717.293, -55.6752 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2060.08, 418.913, -22.7122 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2055.91, 417.203, -36.6966 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2064.28, 419.257, -7.556 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2046.87, 466.933, -7.1742 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2043.38, 463.457, -22.9327 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2039.36, 461.972, -36.5077 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2110.04, 265.92, -36.9367 ); + ent.v["angles"] = ( 303.047, 341.706, 85.7265 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2114.09, 267.185, -22.5504 ); + ent.v["angles"] = ( 303.047, 341.706, 85.7265 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2118.41, 268.561, -7.0307 ); + ent.v["angles"] = ( 303.047, 341.706, 85.7265 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2102.2, 316.877, -7.9691 ); + ent.v["angles"] = ( 298.064, 342.497, 85.0622 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2097.43, 314.416, -22.1389 ); + ent.v["angles"] = ( 303.047, 341.706, 85.7265 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2093.61, 311.726, -36.8962 ); + ent.v["angles"] = ( 303.047, 341.706, 85.7265 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2003.36, 563.173, -36.3606 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2007.67, 564.257, -22.3762 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2012.94, 564.872, -7.22 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -1994.78, 612.118, -7.8383 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -1990.43, 610.573, -22.5967 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -1986.23, 608.854, -36.1717 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_vent_steam" ); + ent.v["origin"] = ( -590.984, 651.252, 45.8036 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 73.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_vent_steam" ); + ent.v["origin"] = ( -517.369, 623.43, 43.1913 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 73.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_vent_steam" ); + ent.v["origin"] = ( 1222.24, 999.817, 0.444401 ); + ent.v["angles"] = ( 277.858, 101.672, -82.4167 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_heat_distort" ); + ent.v["origin"] = ( 1371.28, 534.62, -15.125 ); + ent.v["angles"] = ( 270, 339.444, -144.444 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_nuketown_sun1" ); + ent.v["origin"] = ( -86418.6, -82436, 90428 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_stove_heat" ); + ent.v["origin"] = ( -861.853, 707.552, -17 ); + ent.v["angles"] = ( 270, 0, 160 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_nuked_final_explosion" ); + ent.v["origin"] = ( 82.2885, -5689.28, -65.1652 ); + ent.v["angles"] = ( 270, 359.801, -178.8 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -971.468, 370.708, 19 ); + ent.v["angles"] = ( 25.0018, 163.301, -45.745 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 583.21, 149.644, 8.125 ); + ent.v["angles"] = ( 20.9339, 247.089, 7.30503 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 544.954, 117.983, 151 ); + ent.v["angles"] = ( 20.2711, 277.544, 58.6272 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -1008.95, 146.692, 19.046 ); + ent.v["angles"] = ( 42.2934, 281.468, 51.7248 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_heat_distort" ); + ent.v["origin"] = ( 1330.31, 524.15, -14.875 ); + ent.v["angles"] = ( 270, 0, -165 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_fireplace" ); + ent.v["origin"] = ( 687.918, 361.078, -32.0234 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 25.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 1100.37, 342.591, 16.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 1085.27, 398.116, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 1070.8, 452.269, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -893.265, 723.423, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -867.006, 714.345, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -840.568, 704.946, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -993.165, 598.335, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -1002.93, 571.719, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -1034.54, 495.038, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -1044.24, 468.817, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 1143.85, 133.487, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 1114.64, 125.655, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 1085.88, 117.938, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 1042.07, 110.181, 204 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 601.908, 25.4699, 198.34 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 567.591, 78.5851, 198.327 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 548.501, 135.171, 198.349 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 534.676, 198.12, 198.316 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 532.397, 263.242, 198.359 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 1004.62, 578.178, 80.1036 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 943.24, 561.665, 80.1011 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 881.669, 544.379, 80.1048 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 820.117, 528.243, 80.1071 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 909.679, 684.87, 80.0904 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 971.676, 701.663, 80.0924 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 847.847, 668.169, 80.0885 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 786.641, 651.667, 80.0919 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 724.747, 634.881, 80.0951 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -792.537, 581.067, 45.1466 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -792.537, 581.067, 45.1466 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_nuked_final_dust" ); + ent.v["origin"] = ( 28.8272, -5318.94, -61.8423 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_bubbles_runner" ); + ent.v["origin"] = ( -1035.36, 481.202, -19.9983 ); + ent.v["angles"] = ( 288.8, 340.536, -89.9554 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( 1095.53, 349.102, -9.36477 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( 870.083, 331.253, 24.0551 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( 1073.29, 132.668, 5.88701 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( 1086.05, 423.008, 2.59207 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( 1144.04, 159.474, -15.1653 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( 924.595, 370.527, -23.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( -914.925, 709.626, 5.64814 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( -808.226, 676.734, 23.3482 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( -800.818, 568.511, 41.1779 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( -1027.81, 504.999, -4.67077 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( -979.122, 607.775, 16.9038 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( -1026.99, 420.6, 21.5222 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 606.258, 81.2441, 5.12501 ); + ent.v["angles"] = ( 349.318, 112.235, -8.16458 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( -1603.17, 570.872, 14.0831 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 315.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( -1612.36, 580.681, -1.52756 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 336.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( -1154.5, -134.539, 19.5187 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( -1205.61, -132.548, 21.3148 ); + ent.v["angles"] = ( 341.108, 10.061, -6.342 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( -802.663, -256.017, 19.4146 ); + ent.v["angles"] = ( 0.362506, 317.022, -4.10696 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( 856.838, -192.904, 20.5036 ); + ent.v["angles"] = ( 1, 307, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( 1460.39, -30.5036, 16.1233 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 8.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( 1618.55, 602.118, -5.43916 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 8.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( 1619.13, 606.212, -23.7476 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 8.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( -507.503, 934.97, -4.4827 ); + ent.v["angles"] = ( 0.998782, 229, -4.05234 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( -1719.1, 119.659, 21.9169 ); + ent.v["angles"] = ( 1, 332, -7 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_bubbles_runner" ); + ent.v["origin"] = ( 1101.89, 324.85, -17.8269 ); + ent.v["angles"] = ( 293.762, 199.738, -89.7583 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nuke_stove_heat" ); + ent.v["origin"] = ( 1108, 128.733, -17 ); + ent.v["angles"] = ( 270, 0, 14 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_sound_rings" ); + ent.v["origin"] = ( -941.838, 72.1988, 49.7176 ); + ent.v["angles"] = ( 39.5764, 67.876, 0.16167 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_sound_rings" ); + ent.v["origin"] = ( -854.511, 42.9079, 47.8699 ); + ent.v["angles"] = ( 39.5764, 67.876, 0.16167 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_sound_rings" ); + ent.v["origin"] = ( -912.717, 151.319, 48.7044 ); + ent.v["angles"] = ( 39.215, 246.81, -1.0278 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_sound_rings" ); + ent.v["origin"] = ( -824.893, 120.459, 50.4256 ); + ent.v["angles"] = ( 39.215, 246.81, -1.0278 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( -391.12, -240.192, -4.1877 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( 402.799, -352.161, 4.56145 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( 1052.9, -138.837, 37.0968 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( 1518.77, 61.6228, 29.8273 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( 1681.75, 857.584, 18.1054 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( 657.07, 918.281, -8.7821 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( -497.042, 932.756, -12.3271 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( -2044.86, 144.7, 34.5532 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( -1106.94, -157.424, 46.9122 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( -2079.79, 462.182, 61.9822 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( 465.128, 706.506, -46.2148 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( -1712.21, 35.5331, 34.0838 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_rainbow_sm" ); + ent.v["origin"] = ( -776.992, 587.551, 125.249 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 240.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( 439.767, -833.327, 29.1982 ); + ent.v["angles"] = ( 7.06192, 36.9899, -0.88057 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 501.213, 230.902, 69.95 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 513.865, 184.074, 69.9421 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 525.611, 138.217, 69.9473 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 538.156, 90.2157, 69.9334 ); + ent.v["angles"] = ( 90, 20.9967, 5.9967 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 550.482, 45.262, 69.9277 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 938.833, 141.365, 204 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -610.851, 435.785, 57.7037 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -611.227, 435.372, 57.8882 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 835.134, 162.725, 27.7533 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 820.419, 157.038, 19.499 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 804.838, 155.672, 27.0415 ); + ent.v["angles"] = ( 89, 15, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_sandbox" ); + ent.v["origin"] = ( 1422.01, 901.524, -57.7152 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 28.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_sandbox" ); + ent.v["origin"] = ( 1399.76, 1014.83, -57.0013 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 37.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( 479.252, -820.36, 0.715872 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 353.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_nuked_display_glass_break" ); + ent.v["origin"] = ( 32.133, -421.767, -34.7027 ); + ent.v["angles"] = ( 341.003, 92.0149, -0.109475 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( -339.721, -577.902, 7.75219 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_steam_sm" ); + ent.v["origin"] = ( -600.707, -174.85, 15.4798 ); + ent.v["angles"] = ( 54.783, 165.264, 5.21839 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_steam_sm" ); + ent.v["origin"] = ( -619.212, -220.045, 14.9067 ); + ent.v["angles"] = ( 54.783, 165.264, 5.21839 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_steam_sm" ); + ent.v["origin"] = ( -636.35, -264.746, 15.7747 ); + ent.v["angles"] = ( 54.783, 165.264, 5.21839 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_steam_sm" ); + ent.v["origin"] = ( -504.167, -212.012, 16.725 ); + ent.v["angles"] = ( 56.1189, 337.177, -4.89594 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_steam_sm" ); + ent.v["origin"] = ( -518.997, -254.737, 16.8657 ); + ent.v["angles"] = ( 56.1189, 337.177, -4.89594 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_steam_sm" ); + ent.v["origin"] = ( -535.222, -300.106, 17.2411 ); + ent.v["angles"] = ( 56.1189, 337.177, -4.89594 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_steam_sm" ); + ent.v["origin"] = ( 493.406, -201.825, 13.125 ); + ent.v["angles"] = ( 54.783, 165.264, 5.21839 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_steam_sm" ); + ent.v["origin"] = ( 505.301, -247.565, 12.8816 ); + ent.v["angles"] = ( 54.783, 165.264, 5.21839 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_steam_sm" ); + ent.v["origin"] = ( 517.989, -292.23, 13.3148 ); + ent.v["angles"] = ( 54.783, 165.264, 5.21839 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_steam_sm_fast" ); + ent.v["origin"] = ( 540.431, -189.633, 39.6473 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_steam_sm_fast" ); + ent.v["origin"] = ( 554.105, -235.759, 38.6344 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_steam_sm_fast" ); + ent.v["origin"] = ( 567.649, -281.173, 38.6313 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_steam_sm_fast" ); + ent.v["origin"] = ( -554.58, -193.108, 40.9604 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_steam_sm_fast" ); + ent.v["origin"] = ( -570.823, -237.107, 40.9644 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nuke_steam_sm_fast" ); + ent.v["origin"] = ( -587.73, -280.752, 40.9542 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; +} diff --git a/MP/Maps/Nuketown 2025/clientscripts/mp/mp_nuketown_2020.csc b/MP/Maps/Nuketown 2025/clientscripts/mp/mp_nuketown_2020.csc new file mode 100644 index 0000000..9b57d26 --- /dev/null +++ b/MP/Maps/Nuketown 2025/clientscripts/mp/mp_nuketown_2020.csc @@ -0,0 +1,136 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_nuketown_2020_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_nuketown_2020_amb; +#include clientscripts\mp\_fx; + +main() +{ + level.worldmapx = 93; + level.worldmapy = 265; + level.worldlat = 39.8319; + level.worldlong = -117.392; + clientscripts\mp\_load::main(); + clientscripts\mp\mp_nuketown_2020_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_nuketown_2020_amb::main(); + level.onplayerconnect = ::setupclientsideobjects; + waitforclient( 0 ); +} + +setupclientsideobjects( localclientnum ) +{ + while ( !clienthassnapshot( localclientnum ) ) + wait 0.1; + + level thread flag_think( localclientnum ); + level thread nuked_energy_sign_think( localclientnum ); + level thread nuked_car_flip( localclientnum ); +} + +#using_animtree("fxanim_props"); + +nuked_car_flip( localclientnum ) +{ + level thread nuked_dome_explosion_think( localclientnum ); + car01 = getent( localclientnum, "nuke_animated_car01", "targetname" ); + car02 = getent( localclientnum, "nuke_animated_car02", "targetname" ); + displayglass = getent( localclientnum, "nuke_display_glass_client", "targetname" ); + assert( isdefined( car01 ) ); + assert( isdefined( car02 ) ); + assert( isdefined( displayglass ) ); + carmoveoffest = vectorscale( ( 0, 0, 1 ), 120.0 ); + car01.origin -= carmoveoffest; + car02.origin -= carmoveoffest; + car01 hide(); + car02 hide(); + displayglass hide(); + + level waittill( "bomb_drop_pre" ); + + setsaveddvar( "wind_global_vector", "-256 -256 -256" ); + car01.origin += carmoveoffest; + car02.origin += carmoveoffest; + car01 show(); + car02 show(); + displayglass show(); + + level waittill( "nuke_car_flip" ); + + car01 useanimtree( #animtree ); + car01 animflaggedscripted( "fx", level.scr_anim["fxanim_props"]["cardestroy1"], 1.0, 0.0, 1.0 ); + car01 thread waitfornotetrack( localclientnum ); + car02 useanimtree( #animtree ); + car02 animflaggedscripted( "fx", level.scr_anim["fxanim_props"]["cardestroy2"], 1.0, 0.0, 1.0 ); + car02 thread waitfornotetrack( localclientnum ); + displayglass useanimtree( #animtree ); + displayglass animflaggedscripted( "fx", level.scr_anim["fxanim_props"]["displayGlassDestroy"], 1.0, 0.0, 1.0 ); +} + +nuked_dome_explosion_think( localclientnum ) +{ + level waittill( "bomb_drop" ); + + level notify( "fxanim_dome_explode_start" ); +} + +flag_think( localclientnum ) +{ + flags = getentarray( localclientnum, "ending_flag", "targetname" ); + array_thread( flags, ::rotate_flags ); +} + +rotate_flags() +{ + level waittill( "bomb_drop" ); + + self rotateto( ( 0, randomintrange( 75, 105 ), 0 ), randomfloatrange( 0.5, 0.65 ) ); +} + +nuked_energy_sign_think( localclientnum ) +{ + spin_a_model = getent( localclientnum, "nuketown_sign_topper", "targetname" ); + spin_a_model thread spinner_rotate( 1 ); +} + +spinner_rotate( multiplier ) +{ + step = 180 * multiplier; + self spinner_rotate_match( step ); +} + +spinner_rotate_match( step ) +{ + self endon( "death" ); + self endon( "entityshutdown" ); + self endon( "delete" ); + + for (;;) + { + self rotatevelocity( ( 0, step / 2, 0 ), 3600 ); + + self waittill( "rotatedone" ); + } +} + +waitfornotetrack( localclientnum ) +{ + self endon( "entityshutdown" ); + + for (;;) + { + self waittill( "fx", note ); + + if ( note == "camera_goes_dark" ) + { + visionsetnaked( localclientnum, "blackout", 0 ); + break; + } + + if ( note == "glass_shatter" ) + clientscripts\mp\_fx::exploder( 1005 ); + } +} diff --git a/MP/Maps/Nuketown 2025/clientscripts/mp/mp_nuketown_2020_amb.csc b/MP/Maps/Nuketown 2025/clientscripts/mp/mp_nuketown_2020_amb.csc new file mode 100644 index 0000000..041532b --- /dev/null +++ b/MP/Maps/Nuketown 2025/clientscripts/mp/mp_nuketown_2020_amb.csc @@ -0,0 +1,78 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + thread pa_think( "notify_20", "amb_pa_notify_20" ); + thread pa_think( "notify_10", "amb_pa_notify_10" ); + thread pa_think( "notify_5", "amb_pa_notify_5" ); + thread pa_think( "notify_1", "amb_pa_notify_1" ); + thread pa_think( "notify_stones", "mus_sympathy_for_the_devil" ); + thread snd_fx_create(); + declareambientroom( "nuked_outdoor", 1 ); + setambientroomtone( "nuked_outdoor", "amb_wind_extreior_2d", 0.55, 1 ); + setambientroomreverb( "nuked_outdoor", "nuked_outdoor", 1, 1 ); + setambientroomcontext( "nuked_outdoor", "ringoff_plr", "outdoor" ); + declareambientroom( "int_room" ); + setambientroomreverb( "int_room", "nuked_house", 1, 1 ); + setambientroomcontext( "int_room", "ringoff_plr", "indoor" ); + declareambientroom( "int_room_partial" ); + setambientroomreverb( "int_room_partial", "nuked_house", 1, 1 ); + setambientroomcontext( "int_room_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "truck_room" ); + setambientroomreverb( "truck_room", "nuked_truck", 1, 1 ); + setambientroomcontext( "truck_room", "ringoff_plr", "indoor" ); + declareambientroom( "truck_room_partial" ); + setambientroomreverb( "truck_room_partial", "nuked_truck", 1, 1 ); + setambientroomcontext( "truck_room_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "garage" ); + setambientroomreverb( "garage", "nuked_garage", 1, 1 ); + setambientroomcontext( "garage", "ringoff_plr", "indoor" ); + declareambientroom( "garage_partial" ); + setambientroomreverb( "garage_partial", "nuked_garage", 1, 1 ); + setambientroomcontext( "garage_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "wood_room" ); + setambientroomreverb( "wood_room", "nuked_wood_room", 1, 1 ); + setambientroomcontext( "wood_room", "ringoff_plr", "indoor" ); + activateambientroom( 0, "default", 0 ); +} + +snd_fx_create() +{ + wait 1; + clientscripts\mp\_audio::snd_play_auto_fx( "fx_mp_nuked_sprinkler", "amb_sprinklers" ); + clientscripts\mp\_audio::snd_play_auto_fx( "fx_nuke_plant_sprinkler", "amb_sprinkler_sml", 0, 0, 0, 0 ); + clientscripts\mp\_audio::snd_play_auto_fx( "fx_nuke_vent_steam", "amb_exhaust", 0, 0, 0, 0 ); + clientscripts\mp\_audio::snd_play_auto_fx( "fx_nuke_stove_heat", "amb_stove_fire", 0, 0, 0, 0 ); + clientscripts\mp\_audio::snd_play_auto_fx( "fx_nuke_car_wash_sprinkler", "amb_steam_hiss", 0, 0, 0, 0 ); + clientscripts\mp\_audio::snd_play_auto_fx( "fx_mp_nuke_fireplace", "amb_gas_fire", 0, 0, 0, 0 ); + clientscripts\mp\_audio::snd_play_auto_fx( "fx_insects_swarm_lg_light", "amb_flies", 0, 0, 0, 0 ); + clientscripts\mp\_audio::snd_play_auto_fx( "fx_light_recessed_cool_sm_soft", "amb_small_lights", 0, 0, 0, 0 ); + clientscripts\mp\_audio::snd_play_auto_fx( "fx_mp_nuke_sound_rings", "amb_dryer", 0, 0, 0, 0 ); +} + +pa_think( notifyname, alias ) +{ + level waittill( notifyname ); + + speakers = getentarray( 0, "loudspeaker", "targetname" ); + + for ( i = 0; i < speakers.size; i++ ) + speakers[i] thread pa_play( alias ); +} + +pa_play( alias ) +{ + wait( self.script_wait_min ); + self playsound( 0, alias ); +} + +bomb_sound_go() +{ + level waittill( "notify_nuke" ); + + playsound( 0, "amb_end_nuke", ( 0, 0, 0 ) ); +} diff --git a/MP/Maps/Nuketown 2025/clientscripts/mp/mp_nuketown_2020_fx.csc b/MP/Maps/Nuketown 2025/clientscripts/mp/mp_nuketown_2020_fx.csc new file mode 100644 index 0000000..c634c77 --- /dev/null +++ b/MP/Maps/Nuketown 2025/clientscripts/mp/mp_nuketown_2020_fx.csc @@ -0,0 +1,93 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\createfx\mp_nuketown_2020_fx; +#include clientscripts\mp\_fx; + +main() +{ + clientscripts\mp\createfx\mp_nuketown_2020_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fxanim_props(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} + +precache_createfx_fx() +{ + level._effect["fx_water_fire_sprinkler_thin"] = loadfx( "water/fx_water_fire_sprinkler_thin" ); + level._effect["fx_nuke_plant_sprinkler"] = loadfx( "water/fx_nuke_plant_sprinkler" ); + level._effect["fx_nuke_car_wash_sprinkler"] = loadfx( "water/fx_nuke_car_wash_sprinkler" ); + level._effect["fx_window_god_ray_sm"] = loadfx( "light/fx_window_god_ray_sm" ); + level._effect["fx_window_god_ray"] = loadfx( "light/fx_window_god_ray" ); + level._effect["fx_light_recessed_cool_sm_soft"] = loadfx( "light/fx_light_recessed_cool_sm_soft" ); + level._effect["fx_light_recessed_cool_sm_softer"] = loadfx( "light/fx_light_recessed_cool_sm_softer" ); + level._effect["fx_red_button_flash"] = loadfx( "light/fx_red_button_flash" ); + level._effect["fx_mp_water_drip_light_shrt"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_shrt" ); + level._effect["fx_mp_water_drip_light_long"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); + level._effect["fx_mp_nuked_final_dust"] = loadfx( "maps/mp_maps/fx_mp_nuked_final_dust" ); + level._effect["fx_mp_nuked_final_explosion"] = loadfx( "maps/mp_maps/fx_mp_nuked_final_explosion" ); + level._effect["fx_nuke_car_wash_mist"] = loadfx( "smoke/fx_nuke_car_wash_mist" ); + level._effect["fx_nuke_vent_steam"] = loadfx( "smoke/fx_nuke_vent_steam" ); + level._effect["fx_nuke_heat_distort"] = loadfx( "smoke/fx_nuke_heat_distort" ); + level._effect["fx_nuke_stove_heat"] = loadfx( "smoke/fx_nuke_stove_heat" ); + level._effect["fx_lf_mp_nuketown_sun1"] = loadfx( "lens_flares/fx_lf_mp_nuketown_sun1" ); + level._effect["fx_mp_nuke_fireplace"] = loadfx( "maps/mp_maps/fx_mp_nuke_fireplace" ); + level._effect["fx_mp_nuke_butterfly"] = loadfx( "maps/mp_maps/fx_mp_nuke_butterfly" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_insects_swarm_lg_white"] = loadfx( "bio/insects/fx_insects_swarm_lg_white" ); + level._effect["fx_mp_nuke_ufo_fly"] = loadfx( "maps/mp_maps/fx_mp_nuke_ufo_fly" ); + level._effect["fx_mp_nuke_bubbles_runner"] = loadfx( "maps/mp_maps/fx_mp_nuke_bubbles_runner" ); + level._effect["fx_mp_nuke_sparkles_runner"] = loadfx( "maps/mp_maps/fx_mp_nuke_sparkles_runner" ); + level._effect["fx_mp_nuke_sound_rings"] = loadfx( "maps/mp_maps/fx_mp_nuke_sound_rings" ); + level._effect["fx_mp_nuke_rainbow_sm"] = loadfx( "maps/mp_maps/fx_mp_nuke_rainbow_sm" ); + level._effect["fx_mp_nuke_sandbox"] = loadfx( "maps/mp_maps/fx_mp_nuke_sandbox" ); + level._effect["fx_mp_nuked_display_glass_break"] = loadfx( "maps/mp_maps/fx_mp_nuked_display_glass_break" ); + level._effect["fx_mp_nuke_steam_sm"] = loadfx( "maps/mp_maps/fx_mp_nuke_steam_sm" ); + level._effect["fx_mp_nuke_steam_sm_fast"] = loadfx( "maps/mp_maps/fx_mp_nuke_steam_sm_fast" ); +} + +precache_scripted_fx() +{ + +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["hose"] = %fxanim_mp_nuked2025_hose_anim; + level.scr_anim["fxanim_props"]["sprinkler"] = %fxanim_mp_nuked2025_sprinkler_anim; + level.scr_anim["fxanim_props"]["dome"] = %fxanim_mp_nuked2025_dome_anim; + level.scr_anim["fxanim_props"]["cardestroy1"] = %fxanim_mp_nuked2025_car01_anim; + level.scr_anim["fxanim_props"]["cardestroy2"] = %fxanim_mp_nuked2025_car02_anim; + level.scr_anim["fxanim_props"]["displayGlassDestroy"] = %fxanim_mp_nuked2025_display_glass_anim; + level.scr_anim["fxanim_props"]["gate_sign"] = %fxanim_mp_nuked2025_gate_sign_anim; + level.scr_anim["fxanim_props"]["carwash_hoses"] = %fxanim_mp_nuked2025_carwash_hoses_anim; + level.fx_anim_level_init = ::fxanim_init; +} + +fxanim_init( localclientnum ) +{ + for (;;) + { + level waittill( "snap_processed", snapshotlocalclientnum ); + + if ( snapshotlocalclientnum == localclientnum ) + break; + } + + fxanims = getentarray( localclientnum, "fxanim", "targetname" ); + + foreach ( ent in fxanims ) + { + if ( isdefined( ent.model ) && ent.model == "fxanim_mp_nuked2025_sprinkler_mod" ) + { + ent waittill_dobj( localclientnum ); + ent playloopsound( "amb_track_sprinkler" ); + } + } +} diff --git a/MP/Maps/Nuketown 2025/maps/mp/_events.gsc b/MP/Maps/Nuketown 2025/maps/mp/_events.gsc new file mode 100644 index 0000000..61d5499 --- /dev/null +++ b/MP/Maps/Nuketown 2025/maps/mp/_events.gsc @@ -0,0 +1,97 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes\_globallogic_utils; + +add_timed_event( seconds, notify_string, client_notify_string ) +{ + assert( seconds >= 0 ); + + if ( level.timelimit > 0 ) + level thread timed_event_monitor( seconds, notify_string, client_notify_string ); +} + +timed_event_monitor( seconds, notify_string, client_notify_string ) +{ + for (;;) + { + wait 0.5; + + if ( !isdefined( level.starttime ) ) + continue; + + millisecs_remaining = maps\mp\gametypes\_globallogic_utils::gettimeremaining(); + seconds_remaining = millisecs_remaining / 1000; + + if ( seconds_remaining <= seconds ) + { + event_notify( notify_string, client_notify_string ); + return; + } + } +} + +add_score_event( score, notify_string, client_notify_string ) +{ + assert( score >= 0 ); + + if ( level.scorelimit > 0 ) + { + if ( level.teambased ) + level thread score_team_event_monitor( score, notify_string, client_notify_string ); + else + level thread score_event_monitor( score, notify_string, client_notify_string ); + } +} + +any_team_reach_score( score ) +{ + foreach ( team in level.teams ) + { + if ( game["teamScores"][team] >= score ) + return true; + } + + return false; +} + +score_team_event_monitor( score, notify_string, client_notify_string ) +{ + for (;;) + { + wait 0.5; + + if ( any_team_reach_score( score ) ) + { + event_notify( notify_string, client_notify_string ); + return; + } + } +} + +score_event_monitor( score, notify_string, client_notify_string ) +{ + for (;;) + { + wait 0.5; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].score ) && players[i].score >= score ) + { + event_notify( notify_string, client_notify_string ); + return; + } + } + } +} + +event_notify( notify_string, client_notify_string ) +{ + if ( isdefined( notify_string ) ) + level notify( notify_string ); + + if ( isdefined( client_notify_string ) ) + clientnotify( client_notify_string ); +} diff --git a/MP/Maps/Nuketown 2025/maps/mp/createart/mp_nuketown_2020_art.gsc b/MP/Maps/Nuketown 2025/maps/mp/createart/mp_nuketown_2020_art.gsc new file mode 100644 index 0000000..e8997a4 --- /dev/null +++ b/MP/Maps/Nuketown 2025/maps/mp/createart/mp_nuketown_2020_art.gsc @@ -0,0 +1,8 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + level.tweakfile = 1; + visionsetnaked( "mp_nuketown_2020", 1 ); +} diff --git a/MP/Maps/Nuketown 2025/maps/mp/createfx/mp_nuketown_2020_fx.gsc b/MP/Maps/Nuketown 2025/maps/mp/createfx/mp_nuketown_2020_fx.gsc new file mode 100644 index 0000000..f053d35 --- /dev/null +++ b/MP/Maps/Nuketown 2025/maps/mp/createfx/mp_nuketown_2020_fx.gsc @@ -0,0 +1,710 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( 493.501, 688.64, -56.4796 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( 553.122, 717.293, -55.6752 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2060.08, 418.913, -22.7122 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2055.91, 417.203, -36.6966 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2064.28, 419.257, -7.556 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2046.87, 466.933, -7.1742 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2043.38, 463.457, -22.9327 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2039.36, 461.972, -36.5077 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2110.04, 265.92, -36.9367 ); + ent.v["angles"] = ( 303.047, 341.706, 85.7265 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2114.09, 267.185, -22.5504 ); + ent.v["angles"] = ( 303.047, 341.706, 85.7265 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2118.41, 268.561, -7.0307 ); + ent.v["angles"] = ( 303.047, 341.706, 85.7265 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2102.2, 316.877, -7.9691 ); + ent.v["angles"] = ( 298.064, 342.497, 85.0622 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2097.43, 314.416, -22.1389 ); + ent.v["angles"] = ( 303.047, 341.706, 85.7265 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2093.61, 311.726, -36.8962 ); + ent.v["angles"] = ( 303.047, 341.706, 85.7265 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2003.36, 563.173, -36.3606 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2007.67, 564.257, -22.3762 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -2012.94, 564.872, -7.22 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -1994.78, 612.118, -7.8383 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -1990.43, 610.573, -22.5967 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); + ent.v["origin"] = ( -1986.23, 608.854, -36.1717 ); + ent.v["angles"] = ( 296.723, 343.848, 85.683 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_vent_steam" ); + ent.v["origin"] = ( -590.984, 651.252, 45.8036 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 73.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_vent_steam" ); + ent.v["origin"] = ( -517.369, 623.43, 43.1913 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 73.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_vent_steam" ); + ent.v["origin"] = ( 1222.24, 999.817, 0.444401 ); + ent.v["angles"] = ( 277.858, 101.672, -82.4167 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_heat_distort" ); + ent.v["origin"] = ( 1371.28, 534.62, -15.125 ); + ent.v["angles"] = ( 270, 339.444, -144.444 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_nuketown_sun1" ); + ent.v["origin"] = ( -86418.6, -82436, 90428 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_stove_heat" ); + ent.v["origin"] = ( -861.853, 707.552, -17 ); + ent.v["angles"] = ( 270, 0, 160 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createexploder( "fx_mp_nuked_final_explosion" ); + ent.v["origin"] = ( 82.2885, -5689.28, -65.1652 ); + ent.v["angles"] = ( 270, 359.801, -178.8 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -971.468, 370.708, 19 ); + ent.v["angles"] = ( 25.0018, 163.301, -45.745 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 583.21, 149.644, 8.125 ); + ent.v["angles"] = ( 20.9339, 247.089, 7.30503 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 544.954, 117.983, 151 ); + ent.v["angles"] = ( 20.2711, 277.544, 58.6272 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -1008.95, 146.692, 19.046 ); + ent.v["angles"] = ( 42.2934, 281.468, 51.7248 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_heat_distort" ); + ent.v["origin"] = ( 1330.31, 524.15, -14.875 ); + ent.v["angles"] = ( 270, 0, -165 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_fireplace" ); + ent.v["origin"] = ( 687.918, 361.078, -32.0234 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 25.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 1100.37, 342.591, 16.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 1085.27, 398.116, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 1070.8, 452.269, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -893.265, 723.423, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -867.006, 714.345, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -840.568, 704.946, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -993.165, 598.335, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -1002.93, 571.719, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -1034.54, 495.038, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -1044.24, 468.817, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 1143.85, 133.487, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 1114.64, 125.655, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 1085.88, 117.938, 17.375 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 1042.07, 110.181, 204 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 601.908, 25.4699, 198.34 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 567.591, 78.5851, 198.327 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 548.501, 135.171, 198.349 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 534.676, 198.12, 198.316 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 532.397, 263.242, 198.359 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 1004.62, 578.178, 80.1036 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 943.24, 561.665, 80.1011 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 881.669, 544.379, 80.1048 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 820.117, 528.243, 80.1071 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 909.679, 684.87, 80.0904 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 971.676, 701.663, 80.0924 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 847.847, 668.169, 80.0885 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 786.641, 651.667, 80.0919 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 724.747, 634.881, 80.0951 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -792.537, 581.067, 45.1466 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -792.537, 581.067, 45.1466 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createexploder( "fx_mp_nuked_final_dust" ); + ent.v["origin"] = ( 28.8272, -5318.94, -61.8423 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_bubbles_runner" ); + ent.v["origin"] = ( -1035.36, 481.202, -19.9983 ); + ent.v["angles"] = ( 288.8, 340.536, -89.9554 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( 1095.53, 349.102, -9.36477 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( 870.083, 331.253, 24.0551 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( 1073.29, 132.668, 5.88701 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( 1086.05, 423.008, 2.59207 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( 1144.04, 159.474, -15.1653 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( 924.595, 370.527, -23.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( -914.925, 709.626, 5.64814 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( -808.226, 676.734, 23.3482 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( -800.818, 568.511, 41.1779 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( -1027.81, 504.999, -4.67077 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( -979.122, 607.775, 16.9038 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); + ent.v["origin"] = ( -1026.99, 420.6, 21.5222 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 606.258, 81.2441, 5.12501 ); + ent.v["angles"] = ( 349.318, 112.235, -8.16458 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( -1603.17, 570.872, 14.0831 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 315.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( -1612.36, 580.681, -1.52756 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 336.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( -1154.5, -134.539, 19.5187 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( -1205.61, -132.548, 21.3148 ); + ent.v["angles"] = ( 341.108, 10.061, -6.342 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( -802.663, -256.017, 19.4146 ); + ent.v["angles"] = ( 0.362506, 317.022, -4.10696 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( 856.838, -192.904, 20.5036 ); + ent.v["angles"] = ( 1, 307, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( 1460.39, -30.5036, 16.1233 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 8.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( 1618.55, 602.118, -5.43916 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 8.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( 1619.13, 606.212, -23.7476 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 8.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( -507.503, 934.97, -4.4827 ); + ent.v["angles"] = ( 0.998782, 229, -4.05234 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( -1719.1, 119.659, 21.9169 ); + ent.v["angles"] = ( 1, 332, -7 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_bubbles_runner" ); + ent.v["origin"] = ( 1101.89, 324.85, -17.8269 ); + ent.v["angles"] = ( 293.762, 199.738, -89.7583 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_nuke_stove_heat" ); + ent.v["origin"] = ( 1108, 128.733, -17 ); + ent.v["angles"] = ( 270, 0, 14 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_sound_rings" ); + ent.v["origin"] = ( -941.838, 72.1988, 49.7176 ); + ent.v["angles"] = ( 39.5764, 67.876, 0.16167 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_sound_rings" ); + ent.v["origin"] = ( -854.511, 42.9079, 47.8699 ); + ent.v["angles"] = ( 39.5764, 67.876, 0.16167 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_sound_rings" ); + ent.v["origin"] = ( -912.717, 151.319, 48.7044 ); + ent.v["angles"] = ( 39.215, 246.81, -1.0278 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_sound_rings" ); + ent.v["origin"] = ( -824.893, 120.459, 50.4256 ); + ent.v["angles"] = ( 39.215, 246.81, -1.0278 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( -391.12, -240.192, -4.1877 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( 402.799, -352.161, 4.56145 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( 1052.9, -138.837, 37.0968 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( 1518.77, 61.6228, 29.8273 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( 1681.75, 857.584, 18.1054 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( 657.07, 918.281, -8.7821 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( -497.042, 932.756, -12.3271 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( -2044.86, 144.7, 34.5532 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( -1106.94, -157.424, 46.9122 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( -2079.79, 462.182, 61.9822 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( 465.128, 706.506, -46.2148 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( -1712.21, 35.5331, 34.0838 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_rainbow_sm" ); + ent.v["origin"] = ( -776.992, 587.551, 125.249 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 240.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( 439.767, -833.327, 29.1982 ); + ent.v["angles"] = ( 7.06192, 36.9899, -0.88057 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 501.213, 230.902, 69.95 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 513.865, 184.074, 69.9421 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 525.611, 138.217, 69.9473 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 538.156, 90.2157, 69.9334 ); + ent.v["angles"] = ( 90, 20.9967, 5.9967 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 550.482, 45.262, 69.9277 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 938.833, 141.365, 204 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -610.851, 435.785, 57.7037 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( -611.227, 435.372, 57.8882 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 835.134, 162.725, 27.7533 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 820.419, 157.038, 19.499 ); + ent.v["angles"] = ( 90, 0, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); + ent.v["origin"] = ( 804.838, 155.672, 27.0415 ); + ent.v["angles"] = ( 89, 15, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_sandbox" ); + ent.v["origin"] = ( 1422.01, 901.524, -57.7152 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 28.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_sandbox" ); + ent.v["origin"] = ( 1399.76, 1014.83, -57.0013 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 37.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); + ent.v["origin"] = ( 479.252, -820.36, 0.715872 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 353.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createexploder( "fx_mp_nuked_display_glass_break" ); + ent.v["origin"] = ( 32.133, -421.767, -34.7027 ); + ent.v["angles"] = ( 341.003, 92.0149, -0.109475 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); + ent.v["origin"] = ( -339.721, -577.902, 7.75219 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_steam_sm" ); + ent.v["origin"] = ( -600.707, -174.85, 15.4798 ); + ent.v["angles"] = ( 54.783, 165.264, 5.21839 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_steam_sm" ); + ent.v["origin"] = ( -619.212, -220.045, 14.9067 ); + ent.v["angles"] = ( 54.783, 165.264, 5.21839 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_steam_sm" ); + ent.v["origin"] = ( -636.35, -264.746, 15.7747 ); + ent.v["angles"] = ( 54.783, 165.264, 5.21839 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_steam_sm" ); + ent.v["origin"] = ( -504.167, -212.012, 16.725 ); + ent.v["angles"] = ( 56.1189, 337.177, -4.89594 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_steam_sm" ); + ent.v["origin"] = ( -518.997, -254.737, 16.8657 ); + ent.v["angles"] = ( 56.1189, 337.177, -4.89594 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_steam_sm" ); + ent.v["origin"] = ( -535.222, -300.106, 17.2411 ); + ent.v["angles"] = ( 56.1189, 337.177, -4.89594 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_steam_sm" ); + ent.v["origin"] = ( 493.406, -201.825, 13.125 ); + ent.v["angles"] = ( 54.783, 165.264, 5.21839 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_steam_sm" ); + ent.v["origin"] = ( 505.301, -247.565, 12.8816 ); + ent.v["angles"] = ( 54.783, 165.264, 5.21839 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_steam_sm" ); + ent.v["origin"] = ( 517.989, -292.23, 13.3148 ); + ent.v["angles"] = ( 54.783, 165.264, 5.21839 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_steam_sm_fast" ); + ent.v["origin"] = ( 540.431, -189.633, 39.6473 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_steam_sm_fast" ); + ent.v["origin"] = ( 554.105, -235.759, 38.6344 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_steam_sm_fast" ); + ent.v["origin"] = ( 567.649, -281.173, 38.6313 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_steam_sm_fast" ); + ent.v["origin"] = ( -554.58, -193.108, 40.9604 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_steam_sm_fast" ); + ent.v["origin"] = ( -570.823, -237.107, 40.9644 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nuke_steam_sm_fast" ); + ent.v["origin"] = ( -587.73, -280.752, 40.9542 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; +} diff --git a/MP/Maps/Nuketown 2025/maps/mp/mp_nuketown_2020.gsc b/MP/Maps/Nuketown 2025/maps/mp/mp_nuketown_2020.gsc new file mode 100644 index 0000000..b3d99a5 --- /dev/null +++ b/MP/Maps/Nuketown 2025/maps/mp/mp_nuketown_2020.gsc @@ -0,0 +1,420 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\_events; +#include maps\mp\mp_nuketown_2020_fx; +#include maps\mp\_load; +#include maps\mp\mp_nuketown_2020_amb; +#include maps\mp\_compass; +#include maps\mp\gametypes\_globallogic_defaults; +#include maps\mp\killstreaks\_killstreaks; + +#using_animtree("fxanim_props"); + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_nuketown_2020_fx::main(); + maps\mp\_load::main(); + maps\mp\mp_nuketown_2020_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_nuketown_2020" ); + level.onspawnintermission = ::nuked_intermission; + setdvar( "compassmaxrange", "2100" ); + precacheitem( "vcs_controller_mp" ); + precachemenu( "vcs" ); + precachemodel( "nt_sign_population" ); + precachemodel( "nt_sign_population_vcs" ); + precachestring( &"MPUI_USE_VCS_HINT" ); + level.const_fx_exploder_nuke = 1001; + level.headless_mannequin_count = 0; + level.destructible_callbacks["headless"] = ::mannequin_headless; + level thread nuked_population_sign_think(); + level.disableoutrovisionset = 1; + destructible_car_anims = []; + destructible_car_anims["car1"] = %fxanim_mp_nuked2025_car01_anim; + destructible_car_anims["car2"] = %fxanim_mp_nuked2025_car02_anim; + destructible_car_anims["displayGlass"] = %fxanim_mp_nuked2025_display_glass_anim; + level thread nuked_mannequin_init(); + level thread nuked_powerlevel_think(); + level thread nuked_bomb_drop_think(); +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "1600", reset_dvars ); + ss.dead_friend_influencer_radius = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_radius", "1300", reset_dvars ); + ss.dead_friend_influencer_timeout_seconds = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_timeout_seconds", "8", reset_dvars ); + ss.dead_friend_influencer_count = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_count", "7", reset_dvars ); + ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1000", reset_dvars ); + ss.koth_objective_influencer_inner_radius = 1000; +} + +move_spawn_point( targetname, start_point, new_point ) +{ + spawn_points = getentarray( targetname, "classname" ); + + for ( i = 0; i < spawn_points.size; i++ ) + { + if ( distancesquared( spawn_points[i].origin, start_point ) < 1 ) + { + spawn_points[i].origin = new_point; + return; + } + } +} + +nuked_mannequin_init() +{ + destructibles = getentarray( "destructible", "targetname" ); + mannequins = nuked_mannequin_filter( destructibles ); + level.mannequin_count = mannequins.size; + + if ( mannequins.size <= 0 ) + return; + + camerastart = getstruct( "endgame_camera_start", "targetname" ); + level.endgamemannequin = getclosest( camerastart.origin, mannequins ); + remove_count = mannequins.size - 25; + remove_count = clamp( remove_count, 0, remove_count ); + mannequins = array_randomize( mannequins ); + + for ( i = 0; i < remove_count; i++ ) + { + assert( isdefined( mannequins[i].target ) ); + + if ( level.endgamemannequin == mannequins[i] ) + continue; + + collision = getent( mannequins[i].target, "targetname" ); + assert( isdefined( collision ) ); + collision delete(); + mannequins[i] delete(); + level.mannequin_count--; + } + + level waittill( "prematch_over" ); + + level.mannequin_time = gettime(); +} + +nuked_mannequin_filter( destructibles ) +{ + mannequins = []; + + for ( i = 0; i < destructibles.size; i++ ) + { + destructible = destructibles[i]; + + if ( issubstr( destructible.destructibledef, "male" ) ) + mannequins[mannequins.size] = destructible; + } + + return mannequins; +} + +mannequin_headless( notifytype, attacker ) +{ + if ( gettime() < level.mannequin_time + getdvarintdefault( "vcs_timelimit", 120 ) * 1000 ) + { + level.headless_mannequin_count++; + + if ( level.headless_mannequin_count == level.mannequin_count ) + level thread do_vcs(); + } +} + +nuked_intermission() +{ + maps\mp\gametypes\_globallogic_defaults::default_onspawnintermission(); + + if ( waslastround() ) + { + level notify( "nuke_detonation" ); + level thread nuke_detonation(); + } +} + +nuke_detonation() +{ + level notify( "bomb_drop_pre" ); + clientnotify( "bomb_drop_pre" ); + bomb_loc = getent( "bomb_loc", "targetname" ); + bomb_loc playsound( "amb_end_nuke_2d" ); + destructibles = getentarray( "destructible", "targetname" ); + + for ( i = 0; i < destructibles.size; i++ ) + { + if ( getsubstr( destructibles[i].destructibledef, 0, 4 ) == "veh_" ) + destructibles[i] hide(); + } + + displaysign = getent( "nuke_display_glass_server", "targetname" ); + assert( isdefined( displaysign ) ); + displaysign hide(); + bombwaitpretime = getdvarfloatdefault( "scr_nuke_car_pre", 0.5 ); + wait( bombwaitpretime ); + exploder( level.const_fx_exploder_nuke ); + bomb_loc = getent( "bomb_loc", "targetname" ); + bomb_loc playsound( "amb_end_nuke" ); + level notify( "bomb_drop" ); + clientnotify( "bomb_drop" ); + bombwaittime = getdvarfloatdefault( "scr_nuke_car_flip", 3.25 ); + wait( bombwaittime ); + clientnotify( "nuke_car_flip" ); + location = level.endgamemannequin.origin + ( 0, -20, 50 ); + radiusdamage( location, 128, 128, 128 ); + physicsexplosionsphere( location, 128, 128, 1 ); + mannequinwaittime = getdvarfloatdefault( "scr_nuke_mannequin_flip", 0.25 ); + wait( mannequinwaittime ); + level.endgamemannequin rotateto( level.endgamemannequin.angles + vectorscale( ( 0, 0, 1 ), 90.0 ), 0.7 ); + level.endgamemannequin moveto( level.endgamemannequin.origin + vectorscale( ( 0, 1, 0 ), 90.0 ), 1 ); +} + +nuked_bomb_drop_think() +{ + camerastart = getstruct( "endgame_camera_start", "targetname" ); + cameraend = getstruct( camerastart.target, "targetname" ); + bomb_loc = getent( "bomb_loc", "targetname" ); + cam_move_time = set_dvar_float_if_unset( "scr_cam_move_time", "4.0" ); + bomb_explode_delay = set_dvar_float_if_unset( "scr_bomb_explode_delay", "2.75" ); + env_destroy_delay = set_dvar_float_if_unset( "scr_env_destroy_delay", "0.5" ); + + for (;;) + { + camera = spawn( "script_model", camerastart.origin ); + camera.angles = camerastart.angles; + camera setmodel( "tag_origin" ); + + level waittill( "bomb_drop_pre" ); + + level notify( "fxanim_dome_explode_start" ); + + for ( i = 0; i < get_players().size; i++ ) + { + player = get_players()[i]; + player camerasetposition( camera ); + player camerasetlookat(); + player cameraactivate( 1 ); + player setdepthoffield( 0, 128, 7000, 10000, 6, 1.8 ); + } + + camera moveto( cameraend.origin, cam_move_time, 0, 0 ); + camera rotateto( cameraend.angles, cam_move_time, 0, 0 ); + bombwaittime = getdvarfloatdefault( "mp_nuketown_2020_bombwait", 3.0 ); + wait( bombwaittime ); + wait( env_destroy_delay ); + cameraforward = anglestoforward( cameraend.angles ); + physicsexplosionsphere( bomb_loc.origin, 128, 128, 1 ); + radiusdamage( bomb_loc.origin, 128, 128, 128 ); + } +} + +nuked_population_sign_think() +{ + tens_model = getent( "counter_tens", "targetname" ); + ones_model = getent( "counter_ones", "targetname" ); + step = 36; + ones = 0; + tens = 0; + tens_model rotateroll( step, 0.05 ); + ones_model rotateroll( step, 0.05 ); + + for (;;) + { + wait 1; + + for (;;) + { + num_players = get_players().size; + dial = ones + tens * 10; + + if ( num_players < dial ) + { + ones--; + time = set_dvar_float_if_unset( "scr_dial_rotate_time", "0.5" ); + + if ( ones < 0 ) + { + ones = 9; + tens_model rotateroll( 0 - step, time ); + tens--; + } + + ones_model rotateroll( 0 - step, time ); + + ones_model waittill( "rotatedone" ); + + continue; + } + + if ( num_players > dial ) + { + ones++; + time = set_dvar_float_if_unset( "scr_dial_rotate_time", "0.5" ); + + if ( ones > 9 ) + { + ones = 0; + tens_model rotateroll( step, time ); + tens++; + } + + ones_model rotateroll( step, time ); + + ones_model waittill( "rotatedone" ); + + continue; + } + + break; + } + } +} + +do_vcs() +{ + if ( getdvarintdefault( "disable_vcs", 0 ) ) + return; + + if ( !getgametypesetting( "allowMapScripting" ) ) + return; + + if ( !level.onlinegame || !sessionmodeisprivate() ) + return; + + if ( level.wiiu ) + return; + + targettag = getent( "player_tv_position", "targetname" ); + level.vcs_trigger = spawn( "trigger_radius_use", targettag.origin, 0, 64, 64 ); + level.vcs_trigger setcursorhint( "HINT_NOICON" ); + level.vcs_trigger sethintstring( &"MPUI_USE_VCS_HINT" ); + level.vcs_trigger triggerignoreteam(); + screen = getent( "nuketown_tv", "targetname" ); + screen setmodel( "nt_sign_population_vcs" ); + + while ( true ) + { + level.vcs_trigger waittill( "trigger", player ); + + if ( player isusingremote() || !isalive( player ) ) + continue; + + prevweapon = player getcurrentweapon(); + + if ( prevweapon == "none" || maps\mp\killstreaks\_killstreaks::iskillstreakweapon( prevweapon ) ) + continue; + + level.vcs_trigger setinvisibletoall(); + player giveweapon( "vcs_controller_mp" ); + player switchtoweapon( "vcs_controller_mp" ); + player setstance( "stand" ); + placementtag = spawn( "script_model", player.origin ); + placementtag.angles = player.angles; + player playerlinktoabsolute( placementtag ); + placementtag moveto( targettag.origin, 0.5, 0.05, 0.05 ); + placementtag rotateto( targettag.angles, 0.5, 0.05, 0.05 ); + player enableinvulnerability(); + player openmenu( "vcs" ); + player wait_till_done_playing_vcs(); + + if ( !level.gameended ) + { + if ( isdefined( player ) ) + { + player disableinvulnerability(); + player unlink(); + player takeweapon( "vcs_controller_mp" ); + player switchtoweapon( prevweapon ); + } + + level.vcs_trigger setvisibletoall(); + } + } +} + +wait_till_done_playing_vcs() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "menuresponse", menu, response ); + + return; + } +} + +nuked_powerlevel_think() +{ + pin_model = getent( "nuketown_sign_needle", "targetname" ); + pin_model thread pin_think(); +} + +pin_think() +{ + self endon( "death" ); + self endon( "entityshutdown" ); + self endon( "delete" ); + startangle = 128; + normalangle = 65 + randomfloatrange( -30, 15 ); + yellowangle = -35 + randomfloatrange( -5, 5 ); + redangle = -95 + randomfloatrange( -10, 10 ); + endangle = -138; + self.angles = ( startangle, self.angles[1], self.angles[2] ); + waittillframeend; + + if ( islastround() || isoneround() ) + { + if ( level.timelimit ) + { + add_timed_event( 10, "near_end_game" ); + self pin_move( yellowangle, level.timelimit * 60 ); + } + else if ( level.scorelimit ) + { + add_score_event( int( level.scorelimit * 0.9 ), "near_end_game" ); + self pin_move( normalangle, 300 ); + } + + notifystr = level waittill_any_return( "near_end_game", "game_ended" ); + + if ( notifystr == "near_end_game" ) + { + self pin_check_rotation( 0, 3 ); + self pin_move( redangle, 10 ); + + level waittill( "game_ended" ); + } + + self pin_check_rotation( 0, 2 ); + self pin_move( redangle, 2 ); + } + else if ( level.timelimit ) + self pin_move( normalangle, level.timelimit * 60 ); + else + self pin_move( normalangle, 300 ); + + level waittill( "nuke_detonation" ); + + self pin_check_rotation( 0, 0.05 ); + self pin_move( endangle, 0.1 ); +} + +pin_move( angle, time ) +{ + angles = ( angle, self.angles[1], self.angles[2] ); + self rotateto( angles, time ); +} + +pin_check_rotation( angle, time ) +{ + if ( self.angles[0] > angle ) + { + self pin_move( angle, time ); + + self waittill( "rotatedone" ); + } +} diff --git a/MP/Maps/Nuketown 2025/maps/mp/mp_nuketown_2020_amb.gsc b/MP/Maps/Nuketown 2025/maps/mp/mp_nuketown_2020_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Nuketown 2025/maps/mp/mp_nuketown_2020_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Nuketown 2025/maps/mp/mp_nuketown_2020_fx.gsc b/MP/Maps/Nuketown 2025/maps/mp/mp_nuketown_2020_fx.gsc new file mode 100644 index 0000000..fb6c3a1 --- /dev/null +++ b/MP/Maps/Nuketown 2025/maps/mp/mp_nuketown_2020_fx.gsc @@ -0,0 +1,58 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_nuketown_2020_fx; +#include maps\mp\createart\mp_nuketown_2020_art; + +main() +{ + precache_createfx_fx(); + precache_fxanim_props(); + maps\mp\createfx\mp_nuketown_2020_fx::main(); + maps\mp\createart\mp_nuketown_2020_art::main(); +} + +precache_createfx_fx() +{ + level._effect["fx_water_fire_sprinkler_thin"] = loadfx( "water/fx_water_fire_sprinkler_thin" ); + level._effect["fx_nuke_plant_sprinkler"] = loadfx( "water/fx_nuke_plant_sprinkler" ); + level._effect["fx_nuke_car_wash_sprinkler"] = loadfx( "water/fx_nuke_car_wash_sprinkler" ); + level._effect["fx_window_god_ray_sm"] = loadfx( "light/fx_window_god_ray_sm" ); + level._effect["fx_window_god_ray"] = loadfx( "light/fx_window_god_ray" ); + level._effect["fx_light_recessed_cool_sm_soft"] = loadfx( "light/fx_light_recessed_cool_sm_soft" ); + level._effect["fx_light_recessed_cool_sm_softer"] = loadfx( "light/fx_light_recessed_cool_sm_softer" ); + level._effect["fx_red_button_flash"] = loadfx( "light/fx_red_button_flash" ); + level._effect["fx_mp_water_drip_light_shrt"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_shrt" ); + level._effect["fx_mp_water_drip_light_long"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); + level._effect["fx_mp_nuked_final_dust"] = loadfx( "maps/mp_maps/fx_mp_nuked_final_dust" ); + level._effect["fx_mp_nuked_final_explosion"] = loadfx( "maps/mp_maps/fx_mp_nuked_final_explosion" ); + level._effect["fx_nuke_car_wash_mist"] = loadfx( "smoke/fx_nuke_car_wash_mist" ); + level._effect["fx_nuke_vent_steam"] = loadfx( "smoke/fx_nuke_vent_steam" ); + level._effect["fx_nuke_heat_distort"] = loadfx( "smoke/fx_nuke_heat_distort" ); + level._effect["fx_nuke_stove_heat"] = loadfx( "smoke/fx_nuke_stove_heat" ); + level._effect["fx_lf_mp_nuketown_sun1"] = loadfx( "lens_flares/fx_lf_mp_nuketown_sun1" ); + level._effect["fx_mp_nuke_fireplace"] = loadfx( "maps/mp_maps/fx_mp_nuke_fireplace" ); + level._effect["fx_mp_nuke_butterfly"] = loadfx( "maps/mp_maps/fx_mp_nuke_butterfly" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_insects_swarm_lg_white"] = loadfx( "bio/insects/fx_insects_swarm_lg_white" ); + level._effect["fx_mp_nuke_ufo_fly"] = loadfx( "maps/mp_maps/fx_mp_nuke_ufo_fly" ); + level._effect["fx_mp_nuke_bubbles_runner"] = loadfx( "maps/mp_maps/fx_mp_nuke_bubbles_runner" ); + level._effect["fx_mp_nuke_sparkles_runner"] = loadfx( "maps/mp_maps/fx_mp_nuke_sparkles_runner" ); + level._effect["fx_mp_nuke_sound_rings"] = loadfx( "maps/mp_maps/fx_mp_nuke_sound_rings" ); + level._effect["fx_mp_nuke_rainbow_sm"] = loadfx( "maps/mp_maps/fx_mp_nuke_rainbow_sm" ); + level._effect["fx_mp_nuke_sandbox"] = loadfx( "maps/mp_maps/fx_mp_nuke_sandbox" ); + level._effect["fx_mp_nuked_display_glass_break"] = loadfx( "maps/mp_maps/fx_mp_nuked_display_glass_break" ); + level._effect["fx_mp_nuke_steam_sm"] = loadfx( "maps/mp_maps/fx_mp_nuke_steam_sm" ); + level._effect["fx_mp_nuke_steam_sm_fast"] = loadfx( "maps/mp_maps/fx_mp_nuke_steam_sm_fast" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["hose"] = %fxanim_mp_nuked2025_hose_anim; + level.scr_anim["fxanim_props"]["sprinkler"] = %fxanim_mp_nuked2025_sprinkler_anim; + level.scr_anim["fxanim_props"]["dome"] = %fxanim_mp_nuked2025_dome_anim; + level.scr_anim["fxanim_props"]["gate_sign"] = %fxanim_mp_nuked2025_gate_sign_anim; + level.scr_anim["fxanim_props"]["carwash_hoses"] = %fxanim_mp_nuked2025_carwash_hoses_anim; +} diff --git a/MP/Maps/Overflow/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Overflow/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Overflow/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Overflow/aitype/enemy_dog_mp.gsc b/MP/Maps/Overflow/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Overflow/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Overflow/character/character_mp_german_shepherd.gsc b/MP/Maps/Overflow/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Overflow/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Overflow/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Overflow/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Overflow/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Overflow/clientscripts/mp/createfx/mp_overflow_fx.csc b/MP/Maps/Overflow/clientscripts/mp/createfx/mp_overflow_fx.csc new file mode 100644 index 0000000..93e3992 --- /dev/null +++ b/MP/Maps/Overflow/clientscripts/mp/createfx/mp_overflow_fx.csc @@ -0,0 +1,977 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -1761.49, 750.929, 127.471 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_car_floating_river" ); + ent.v["origin"] = ( -3275.25, -2324.1, -144 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 86.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -200; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 1366.83, -1223.55, 116.743 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 926.319, -1353.03, 157.634 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1061.99, -1215.45, 162.401 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 731.12, -1324.45, 159.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1316.45, -1322.9, 210.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1299.46, -1004.78, 109.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1410.84, -896.463, 110.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1436.62, -1063.77, 127.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 701.026, -949.396, 61 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1264.76, -1285.06, 59.2605 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1503.94, 1272.59, 63.067 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -66.6014, 965.41, 49.0598 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -2082.71, 279.391, -15.9111 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -1915.39, -230.614, 1.0775 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -2079.88, -780.976, -132 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -1406.53, -770.4, -18.1476 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -426.31, -1368.17, -38.6984 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -417.39, -1589.6, -40 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1156.88, -1011.35, -40 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1441.99, -1018.84, -44.8633 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1072.74, -1448.99, -72.8503 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 831.688, -1334.41, 2.48272 ); + ent.v["angles"] = ( 270, 0, 28 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 1068.55, -1367.53, -4.9795 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -1118.4, 1991.82, -8 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -902.299, 1741.03, -8 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -523.022, 1589.02, -6.05806 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -479.108, 1355.92, -7.22028 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1162.15, 727.704, 7.09781 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -2237.79, -47.5467, -24.1656 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -876.172, 1977.13, -8 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -224.844, -55.3371, -19.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -16.8662, -238.099, -8.00001 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -628.009, 697.417, -13.2926 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -548.862, 185.006, -18.8134 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -301.946, 580.292, 35.0141 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 125.885, -13.5468, 49.2809 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( 1107.44, -511.039, -8 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( 1522.32, -475.751, -8 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( 1835.39, -588.083, -8 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( 1912.72, -931.626, -2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 409.665, -448.353, -6.74574 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 613.536, -589.676, 6.98202 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_burst_sm_runner_oflow" ); + ent.v["origin"] = ( 1010.84, -1397.33, 177.569 ); + ent.v["angles"] = ( 23.8603, 39.9946, 18.745 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 2.44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -480.09, -11.4621, 0 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner_oflow" ); + ent.v["origin"] = ( -283.508, -1391.37, 268.717 ); + ent.v["angles"] = ( 17.9408, 145.177, 9.14282 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 4.2; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner_oflow" ); + ent.v["origin"] = ( -99.2519, -1517.85, 284.553 ); + ent.v["angles"] = ( 26.2572, 308.833, 23.334 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 3.44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_burst_sm_runner_oflow" ); + ent.v["origin"] = ( -164.92, -1373.38, 190.885 ); + ent.v["angles"] = ( 3.64226, 48.6546, 22.1653 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 2.88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1265.89, -719.679, 41.8711 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 50.1386, -1171.14, 117.178 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -1395.9, 2327.98, -8 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( 2415.13, -1321.27, 8 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 531.422, -1240.56, 109.606 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 1067.89, -1585.95, -8 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 2095.93, -584.791, 0.485807 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_lantern_dec_red" ); + ent.v["origin"] = ( 704.821, -915.196, 111.973 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_black_slow" ); + ent.v["origin"] = ( 141.92, -464.734, 15.8908 ); + ent.v["angles"] = ( 324.496, 343.059, 19.2294 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_black_slow" ); + ent.v["origin"] = ( -666.8, 1696.56, 38.5757 ); + ent.v["angles"] = ( 339.007, 323.897, 0.335757 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); + ent.v["origin"] = ( 274.77, -993.367, 253.181 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -2055.82, -7.81759, 56.921 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -159.118, 1285.97, 59.6602 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 332.54, -1755.32, 35.3767 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 1244.85, -1100.28, -3.45147 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 294.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 1315.76, -1003.09, -6.44468 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 7.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 281.561, -1047.88, 131.505 ); + ent.v["angles"] = ( 293.003, 359.865, -88.7769 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 401.026, -1047.88, 215.816 ); + ent.v["angles"] = ( 65.9905, 179.918, 88.8249 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); + ent.v["origin"] = ( 203.166, -999.101, 254.204 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_black_slow" ); + ent.v["origin"] = ( -2221.17, -352.926, -2.56788 ); + ent.v["angles"] = ( 323.127, 2.83165, 3.41667 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_pop_runner" ); + ent.v["origin"] = ( -258.888, -1360.36, 145.707 ); + ent.v["angles"] = ( 271, 81, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_pop_runner" ); + ent.v["origin"] = ( -95.8447, -1397.92, 230.65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 340.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_black_slow" ); + ent.v["origin"] = ( -1713.24, 463.615, 58.4818 ); + ent.v["angles"] = ( 328.572, 266.776, 5.88032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 451.883, -214.525, 41.6211 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 635.105, -334.629, -7.70327 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -59.6377, -1696.1, -38.5661 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1534.6, -1309.97, -96.9736 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1691.7, -274.356, 39.6039 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1458.36, -540.131, 28.3024 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1713.34, 305.025, 35.5602 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1326.3, 1137.55, 0 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -343.224, 873.519, 0 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -221.84, 1387.69, 0 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1228.27, 548.87, 37.3086 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -870.918, -1616.31, -57.3837 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1721.05, 592.513, 17.8249 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_pop_runner" ); + ent.v["origin"] = ( 2062.53, -1184.57, 71.3509 ); + ent.v["angles"] = ( 291.133, 89.9216, 31.2217 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -312.415, 207.516, -19.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 546.809, -1173.87, 171.523 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 7.4539, -1445.54, 36.6345 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sun_flare_overflow" ); + ent.v["origin"] = ( -46433.1, 22855.7, 39136 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 323.511, -1786.75, 42.1831 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 2180.03, -460.499, 57.439 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -332.373, 1134.76, 0 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_pop_runner" ); + ent.v["origin"] = ( -640.177, -1290.7, 147.491 ); + ent.v["angles"] = ( 270.999, 350.967, 89.9804 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 5.63925, 141.777, -5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 102.726, -1676.11, -39.29 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -1893.37, -1174.76, -129 ); + ent.v["angles"] = ( 270, 176.042, -173.042 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1975.68, -947.405, -132 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1491.67, 731.914, 76.7699 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 341.717, 1591.11, 130.27 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 411.795, 1581.2, 128.326 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 576.52, 578.855, 125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 696.096, 454.547, 159.33 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createloopeffect( "fx_mp_elec_spark_burst_xsm_thin" ); + ent.v["origin"] = ( -14.5798, -720.885, 208.457 ); + ent.v["angles"] = ( 40.7911, 317.585, 28.9301 ); + ent.v["type"] = "loopfx"; + ent.v["delay"] = 2.66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 457.359, 726.909, 64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 895.449, 378.367, 64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 348.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 1646.17, 310.682, 64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 281.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 401.9, 1364.22, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 210.467, 1356.11, 67.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 317.7, -1242.57, 41.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 708.734, -1195.39, 58.1272 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -2089.62, -666.822, -50.9244 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1984.14, -940.224, -59 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1316.99, 900.873, 0 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -414.119, 668.642, 17.1461 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1566.21, 1182.45, 54 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1379.98, -1019.24, 12.0793 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( -1612.48, 777.553, 368.9 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( -1052.88, 1078.5, 493.891 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( -1481.74, 2020.21, 377.685 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -2043.62, -1352.36, -132 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_gas_pipe_md" ); + ent.v["origin"] = ( -1387.51, -1338.69, -54.2344 ); + ent.v["angles"] = ( 16.3733, 215.378, 1.64252 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_pipe_md" ); + ent.v["origin"] = ( -1381.72, 1277.88, 18.7317 ); + ent.v["angles"] = ( 278.891, 259.971, -174.596 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 624.539, -687.744, 46.3582 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1049.77, -250.702, 54.2236 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1393.68, 231.309, 119.686 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 320.349, -295.735, 72.1301 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -2317.62, -687.495, -132.446 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1818.84, -440.783, 1.35371 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 385.109, -944.125, 135.329 ); + ent.v["angles"] = ( 294.002, 359.96, 90.1356 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 237.846, -1047.88, 215.609 ); + ent.v["angles"] = ( 76.9898, 178.921, 87.8758 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 77.7459, -935.875, 160.569 ); + ent.v["angles"] = ( 281.009, 358.533, -87.4961 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 784.764, -988.179, 122.548 ); + ent.v["angles"] = ( 89, 180, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 784.875, -864.688, 117.027 ); + ent.v["angles"] = ( 58.9855, 268.336, 88.0591 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 783.549, -991.576, 25.208 ); + ent.v["angles"] = ( 302.013, 88.4002, -88.1132 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 355.497, -1048.09, 144.746 ); + ent.v["angles"] = ( 329, 0.703705, -89.4423 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -2342.9, 476.596, 16.573 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 1391.27, -1038.06, -6.98319 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 420.542, -944.125, 200.713 ); + ent.v["angles"] = ( 48.9973, 180.021, -90.0839 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 304.26, -944.125, 220.288 ); + ent.v["angles"] = ( 76.0025, 0.305261, 90.2278 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 61.223, -909.392, 129.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 36.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 304.485, -778.755, 128.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 193.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 304.637, -941.671, 129.302 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 234.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fire_detail" ); + ent.v["origin"] = ( -1504.5, -1376.62, -92.2689 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 272.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fire_sm" ); + ent.v["origin"] = ( -1519.6, -1374.82, -63.2638 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 272.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_black_slow" ); + ent.v["origin"] = ( -1522.65, -1364.38, -50.572 ); + ent.v["angles"] = ( 323.127, 2.83165, 3.41667 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_burst_lg_runner_oflow" ); + ent.v["origin"] = ( -59.8228, 246.781, 487.915 ); + ent.v["angles"] = ( 39.6118, 247.793, -16.4119 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner_oflow" ); + ent.v["origin"] = ( 1505.91, -703.472, 370.883 ); + ent.v["angles"] = ( 19, 20, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner_oflow" ); + ent.v["origin"] = ( 1441.86, -644.158, 411.784 ); + ent.v["angles"] = ( 358.014, 125.163, 18.3405 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -12.33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_gas_pipe_md" ); + ent.v["origin"] = ( -1264.16, 1124.34, 36.096 ); + ent.v["angles"] = ( 280.735, 43.2572, 171.51 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1694.54, 372.777, 110 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_pipe_md" ); + ent.v["origin"] = ( -194.429, 1587.51, 78.9634 ); + ent.v["angles"] = ( 0, 315, 87 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_gas_pipe_md" ); + ent.v["origin"] = ( 262.156, 1801.74, 89.6183 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); + ent.v["origin"] = ( 269.944, 283.632, 258.951 ); + ent.v["angles"] = ( 270, 357.537, -42.5371 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); + ent.v["origin"] = ( 430.893, 122.407, 257.082 ); + ent.v["angles"] = ( 270, 357.537, -42.5371 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( 466.63, 1853.76, 407.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_com_utility_cool" ); + ent.v["origin"] = ( -401.203, -584.134, 113.233 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_com_utility_cool" ); + ent.v["origin"] = ( -636.419, -698.195, 118.815 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -169.691, -634.368, 68.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -827.659, -664.326, 172.125 ); + ent.v["angles"] = ( 89, 0, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -569.476, -263.486, 68.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 288.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -659.328, -848.59, 54.7092 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 77.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_pop_runner" ); + ent.v["origin"] = ( 257.031, -1143.64, 165.979 ); + ent.v["angles"] = ( 270.999, 350.967, 89.9804 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner_oflow" ); + ent.v["origin"] = ( -751.752, -1333.3, 406.69 ); + ent.v["angles"] = ( 7.34028, 186.943, 18.7287 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 4.2; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 120.801, -1939.07, 30.6178 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -282.766, -1662.54, 69.0009 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -752.659, -1579.63, 95.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -601.838, -1289.84, 99.9877 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 357.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -616.406, -1425.38, 94.3228 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_river_muddy_slw_lg" ); + ent.v["origin"] = ( -2783, -1654.88, -142 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_smk_plume_lg_blk_distant" ); + ent.v["origin"] = ( -8008.33, -1388.13, 289.25 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 102.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_smk_plume_lg_blk_distant" ); + ent.v["origin"] = ( -6085.92, 7723.71, 217.061 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 66.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_smk_plume_lg_blk_distant" ); + ent.v["origin"] = ( -6456.7, -6681.35, 342.016 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 114.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_smk_plume_lg_blk_distant" ); + ent.v["origin"] = ( 6119.84, 486.473, -30.3497 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_river_muddy_slw_lg" ); + ent.v["origin"] = ( -3471.06, 131.857, -143 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_smk_plume_md_blk_distant" ); + ent.v["origin"] = ( -8716.04, 2683.01, 59.2097 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 102.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_river_muddy_slw_lg" ); + ent.v["origin"] = ( -4100.46, 1646.38, -143 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 64.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_river_muddy_slw_lg" ); + ent.v["origin"] = ( -1276.37, 3897.28, -141 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 4.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_river_muddy_slw_lg" ); + ent.v["origin"] = ( -763.516, 3997.48, -141 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 4.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); + ent.v["origin"] = ( 492.132, 375.722, 221.882 ); + ent.v["angles"] = ( 270, 357.537, -42.5371 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); + ent.v["origin"] = ( 581.149, 465.246, 192.882 ); + ent.v["angles"] = ( 270, 357.537, -42.5371 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); + ent.v["origin"] = ( 111.822, 1177.74, 99.7472 ); + ent.v["angles"] = ( 287, 90, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -112.287, 1148.92, 15.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 90.6879, 1105.79, 49.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -160.586, 1778.97, 111.772 ); + ent.v["angles"] = ( 273, 270, 89.999 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -82.4727, 1847.82, 114.167 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -232.594, 2106.35, 122.874 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 309.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_burst_lg_runner_oflow" ); + ent.v["origin"] = ( 2413.08, -1589.83, 359.129 ); + ent.v["angles"] = ( 38.4911, 100.029, 4.1444 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 2414.13, -296.602, 32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 2361.36, -386.205, 70.7388 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 1070.69, 365.727, 64 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 786.425, 456.36, 64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 139.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_smk_plume_md_blk_distant" ); + ent.v["origin"] = ( 5276.33, -3354.63, 902.325 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 114.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 2149.69, -308.689, 123.043 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 117.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; +} diff --git a/MP/Maps/Overflow/clientscripts/mp/mp_overflow.csc b/MP/Maps/Overflow/clientscripts/mp/mp_overflow.csc new file mode 100644 index 0000000..6ad9544 --- /dev/null +++ b/MP/Maps/Overflow/clientscripts/mp/mp_overflow.csc @@ -0,0 +1,26 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_overflow_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_overflow_amb; + +main() +{ + level.worldmapx = -358; + level.worldmapy = -17; + level.worldlat = 33.9787; + level.worldlong = 71.5975; + clientscripts\mp\_load::main(); + clientscripts\mp\mp_overflow_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_overflow_amb::main(); + setsaveddvar( "compassmaxrange", "2100" ); + setsaveddvar( "sm_sunsamplesizenear", 0.2 ); + setsaveddvar( "sm_sunshadowsmall", 0 ); + waitforclient( 0 ); +/# + println( "*** Client : mp_overflow running..." ); +#/ +} diff --git a/MP/Maps/Overflow/clientscripts/mp/mp_overflow_amb.csc b/MP/Maps/Overflow/clientscripts/mp/mp_overflow_amb.csc new file mode 100644 index 0000000..a362e2c --- /dev/null +++ b/MP/Maps/Overflow/clientscripts/mp/mp_overflow_amb.csc @@ -0,0 +1,96 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "outdoor", 1 ); + setambientroomtone( "outdoor", "amb_wind_extreior_2d", 0.55, 1 ); + setambientroomreverb( "outdoor", "overflow_outdoor", 1, 1 ); + setambientroomcontext( "outdoor", "ringoff_plr", "outdoor" ); + declareambientroom( "small_room" ); + setambientroomreverb( "small_room", "overflow_smallroom", 1, 1 ); + setambientroomcontext( "small_room", "ringoff_plr", "indoor" ); + declareambientroom( "small_room_partial" ); + setambientroomreverb( "small_room_partial", "overflow_smallroom", 1, 1 ); + setambientroomcontext( "small_room_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "construction_bldg" ); + setambientroomreverb( "construction_bldg", "overflow_construction_open", 1, 1 ); + setambientroomcontext( "construction_bldg", "ringoff_plr", "outdoor" ); + declareambientroom( "medium_room" ); + setambientroomreverb( "medium_room", "overflow_mediumroom", 1, 1 ); + setambientroomcontext( "medium_room", "ringoff_plr", "indoor" ); + declareambientroom( "medium_room_partial" ); + setambientroomreverb( "medium_room_partial", "overflow_mediumroom", 1, 1 ); + setambientroomcontext( "medium_room_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "cement_small_room" ); + setambientroomreverb( "cement_small_room", "overflow_cement_sml", 1, 1 ); + setambientroomcontext( "cement_small_room", "ringoff_plr", "indoor" ); + declareambientroom( "cement_small_room_partial" ); + setambientroomreverb( "cement_small_room_partial", "overflow_cement_sml", 1, 1 ); + setambientroomcontext( "cement_small_room_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "cement_hallway" ); + setambientroomreverb( "cement_hallway", "overflow_cement_hall", 1, 1 ); + setambientroomcontext( "cement_hallway", "ringoff_plr", "indoor" ); + declareambientroom( "brick_alley_roof_hall" ); + setambientroomreverb( "brick_alley_roof_hall", "overflow_roof_hall", 1, 1 ); + setambientroomcontext( "brick_alley_roof_hall", "ringoff_plr", "indoor" ); + declareambientroom( "brick_alley_hall" ); + setambientroomreverb( "brick_alley_hall", "overflow_alley_hall", 1, 1 ); + setambientroomcontext( "brick_alley_hall", "ringoff_plr", "outdoor" ); + declareambientroom( "padded_room" ); + setambientroomreverb( "padded_room", "overflow_padded_dead", 1, 1 ); + setambientroomcontext( "padded_room", "ringoff_plr", "indoor" ); + declareambientroom( "padded_room_partial" ); + setambientroomreverb( "padded_room_partial", "overflow_padded_dead", 1, 1 ); + setambientroomcontext( "padded_room_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "grand_stone_room" ); + setambientroomreverb( "grand_stone_room", "overflow_grand_stone_rm", 1, 1 ); + setambientroomcontext( "grand_stone_room", "ringoff_plr", "indoor" ); + declareambientroom( "grand_stone_room_partial" ); + setambientroomreverb( "grand_stone_room_partial", "overflow_grand_stone_rm", 1, 1 ); + setambientroomcontext( "grand_stone_room_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "grand_stone_side_room" ); + setambientroomreverb( "grand_stone_side_room", "overflow_grand_side_rm", 1, 1 ); + setambientroomcontext( "grand_stone_side_room", "ringoff_plr", "indoor" ); + declareambientroom( "grand_stone_stairs" ); + setambientroomreverb( "grand_stone_stairs", "overflow_grand_stairs_sml", 1, 1 ); + setambientroomcontext( "grand_stone_stairs", "ringoff_plr", "indoor" ); + declareambientroom( "parital_brick_room" ); + setambientroomreverb( "parital_brick_room", "overflow_brick_med_partial", 1, 1 ); + setambientroomcontext( "parital_brick_room", "ringoff_plr", "outdoor" ); + thread snd_start_autofx_audio(); + thread snd_play_loopers(); +} + +snd_play_loopers() +{ + playloopat( "amb_water_edge", ( -3390, -349, 221 ) ); + playloopat( "amb_water_lap_lp", ( -3394, -350, 220 ) ); + playloopat( "amb_wind_howl", ( -1119, -53, 330 ) ); + playloopat( "amb_alley_dank_sml", ( 708, -938, 97 ) ); + playloopat( "amb_alley_dank_sml", ( 1340, -1027, 93 ) ); + playloopat( "amb_alley_dank_sml", ( 1145, -48, 176 ) ); + playloopat( "amb_alley_dank_sml_low", ( 21, 1379, 175 ) ); + playloopat( "amb_alley_dank_sml_low", ( -419, 2026, 132 ) ); + playloopat( "amb_wind_mtl_rattle_lp", ( -1542, 374, 407 ) ); +} + +snd_start_autofx_audio() +{ + wait 2; + snd_play_auto_fx( "fx_mp_water_drip_light_shrt", "amb_water_drip_shrt", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_mp_water_drip_light_long", "amb_water_drip_lng", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_mp_steam_pipe_md", "dst_steam_pipe_lp", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_steam_gas_pipe_md", "dst_gas_pipe_lp", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_water_pipe_spill_md", "amb_sewer_flow", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_water_pipe_spray_splash", "amb_sewer_splash", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_insects_swarm_lg_light", "amb_sml_flies", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_insects_swarm_md_light", "amb_lrg_flies", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_insects_fly_sngl_parent", "amb_sml_flies", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_light_flour_glow_cool_sngl_shrt", "amb_flour_light", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_fire_sm", "amb_car_fire_sml", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_fire_detail", "amb_fire_med", 0, 0, 0, 0 ); +} diff --git a/MP/Maps/Overflow/clientscripts/mp/mp_overflow_fx.csc b/MP/Maps/Overflow/clientscripts/mp/mp_overflow_fx.csc new file mode 100644 index 0000000..2a7a270 --- /dev/null +++ b/MP/Maps/Overflow/clientscripts/mp/mp_overflow_fx.csc @@ -0,0 +1,71 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\createfx\mp_overflow_fx; +#include clientscripts\mp\_fx; + +precache_scripted_fx() +{ + +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["canopy04"] = %fxanim_yemen_cloth_canopy04_anim; + level.scr_anim["fxanim_props"]["canopy04_lrg"] = %fxanim_yemen_cloth_canopy04_lrg_anim; + level.scr_anim["fxanim_props"]["canopy07_lrg"] = %fxanim_yemen_cloth_canopy07_lrg_anim; + level.scr_anim["fxanim_props"]["canopy08"] = %fxanim_yemen_cloth_canopy08_anim; + level.scr_anim["fxanim_props"]["canopy08_lrg"] = %fxanim_yemen_cloth_canopy08_lrg_anim; + level.scr_anim["fxanim_props"]["awning_store"] = %fxanim_gp_awning_store_mideast_anim; + level.scr_anim["fxanim_props"]["wire_light"] = %fxanim_mp_overflow_wire_light_anim; +} + +precache_createfx_fx() +{ + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_light_flour_glow_cool_sngl_shrt"] = loadfx( "light/fx_light_flour_glow_cool_sngl_shrt" ); + level._effect["fx_light_lantern_dec_red"] = loadfx( "light/fx_light_lantern_dec_red" ); + level._effect["fx_light_com_utility_cool"] = loadfx( "light/fx_light_com_utility_cool" ); + level._effect["fx_mp_sun_flare_overflow"] = loadfx( "lens_flares/fx_lf_mp_overflow_sun1" ); + level._effect["fx_mp_water_drip_light_long"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); + level._effect["fx_mp_water_drip_light_shrt"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_shrt" ); + level._effect["fx_water_river_muddy_slw_lg"] = loadfx( "water/fx_water_river_muddy_slw_lg" ); + level._effect["fx_insects_roaches_short"] = loadfx( "bio/insects/fx_insects_roaches_short" ); + level._effect["fx_insects_swarm_md_light"] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_debris_papers_narrow"] = loadfx( "env/debris/fx_debris_papers_narrow" ); + level._effect["fx_smk_smolder_black_slow"] = loadfx( "smoke/fx_smk_smolder_black_slow" ); + level._effect["fx_smk_tin_hat_sm"] = loadfx( "smoke/fx_smk_tin_hat_sm" ); + level._effect["fx_mp_smk_plume_lg_blk_distant"] = loadfx( "maps/mp_maps/fx_mp_smk_plume_md_blk_distant_wispy" ); + level._effect["fx_mp_smk_plume_md_blk_distant"] = loadfx( "maps/mp_maps/fx_mp_smk_plume_sm_blk_distant_wispy" ); + level._effect["fx_fire_sm"] = loadfx( "env/fire/fx_fire_sm" ); + level._effect["fx_fire_detail"] = loadfx( "env/fire/fx_fire_detail_sm_nodlight" ); + level._effect["fx_fog_street_md_area"] = loadfx( "fog/fx_fog_street_md_area" ); + level._effect["fx_fog_street_sm_area"] = loadfx( "fog/fx_fog_street_sm_area" ); + level._effect["fx_mp_elec_spark_burst_sm_oflow"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_sm_oflow" ); + level._effect["fx_mp_elec_spark_burst_sm_runner_oflow"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_sm_runner_oflow" ); + level._effect["fx_mp_elec_spark_burst_xsm_thin"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin" ); + level._effect["fx_mp_elec_spark_burst_xsm_thin_runner"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin_runner" ); + level._effect["fx_mp_elec_spark_burst_md_oflow"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_md_oflow" ); + level._effect["fx_mp_elec_spark_burst_md_runner_oflow"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_md_runner_oflow" ); + level._effect["fx_mp_elec_spark_burst_lg_oflow"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_lg_oflow" ); + level._effect["fx_mp_elec_spark_burst_lg_runner_oflow"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_lg_runner_oflow" ); + level._effect["fx_mp_elec_spark_pop_runner"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_pop_runner" ); + level._effect["fx_mp_debris_car_floating_river"] = loadfx( "maps/mp_maps/fx_mp_debris_car_floating_river" ); + level._effect["fx_mp_steam_gas_pipe_md"] = loadfx( "maps/mp_maps/fx_mp_steam_gas_pipe_md" ); + level._effect["fx_mp_steam_pipe_md"] = loadfx( "maps/mp_maps/fx_mp_steam_pipe_md" ); +} + +main() +{ + clientscripts\mp\createfx\mp_overflow_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fxanim_props(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} diff --git a/MP/Maps/Overflow/maps/mp/createart/mp_overflow_art.gsc b/MP/Maps/Overflow/maps/mp/createart/mp_overflow_art.gsc new file mode 100644 index 0000000..71bdb5c --- /dev/null +++ b/MP/Maps/Overflow/maps/mp/createart/mp_overflow_art.gsc @@ -0,0 +1,27 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + level.tweakfile = 1; + setdvar( "scr_fog_exp_halfplane", "3759.28" ); + setdvar( "scr_fog_exp_halfheight", "243.735" ); + setdvar( "scr_fog_nearplane", "601.593" ); + setdvar( "scr_fog_red", "0.806694" ); + setdvar( "scr_fog_green", "0.962521" ); + setdvar( "scr_fog_blue", "0.9624" ); + setdvar( "scr_fog_baseheight", "-475.268" ); + setdvar( "visionstore_glowTweakEnable", "0" ); + setdvar( "visionstore_glowTweakRadius0", "5" ); + setdvar( "visionstore_glowTweakRadius1", "" ); + setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); + setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); + setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); + setdvar( "visionstore_glowTweakBloomIntensity1", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); + visionsetnaked( "mp_overflow", 0 ); + setdvar( "r_lightGridEnableTweaks", 1 ); + setdvar( "r_lightGridIntensity", 1.64 ); + setdvar( "r_lightGridContrast", 0.21 ); +} diff --git a/MP/Maps/Overflow/maps/mp/createfx/mp_overflow_fx.gsc b/MP/Maps/Overflow/maps/mp/createfx/mp_overflow_fx.gsc new file mode 100644 index 0000000..2ca08f3 --- /dev/null +++ b/MP/Maps/Overflow/maps/mp/createfx/mp_overflow_fx.gsc @@ -0,0 +1,977 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -1761.49, 750.929, 127.471 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_car_floating_river" ); + ent.v["origin"] = ( -3275.25, -2324.1, -144 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 86.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -200; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 1366.83, -1223.55, 116.743 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 926.319, -1353.03, 157.634 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1061.99, -1215.45, 162.401 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 731.12, -1324.45, 159.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1316.45, -1322.9, 210.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1299.46, -1004.78, 109.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1410.84, -896.463, 110.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 1436.62, -1063.77, 127.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 701.026, -949.396, 61 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1264.76, -1285.06, 59.2605 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1503.94, 1272.59, 63.067 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -66.6014, 965.41, 49.0598 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -2082.71, 279.391, -15.9111 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -1915.39, -230.614, 1.0775 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -2079.88, -780.976, -132 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -1406.53, -770.4, -18.1476 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -426.31, -1368.17, -38.6984 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -417.39, -1589.6, -40 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1156.88, -1011.35, -40 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1441.99, -1018.84, -44.8633 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1072.74, -1448.99, -72.8503 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 831.688, -1334.41, 2.48272 ); + ent.v["angles"] = ( 270, 0, 28 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 1068.55, -1367.53, -4.9795 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -1118.4, 1991.82, -8 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -902.299, 1741.03, -8 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -523.022, 1589.02, -6.05806 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -479.108, 1355.92, -7.22028 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1162.15, 727.704, 7.09781 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -2237.79, -47.5467, -24.1656 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -876.172, 1977.13, -8 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -224.844, -55.3371, -19.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -16.8662, -238.099, -8.00001 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -628.009, 697.417, -13.2926 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -548.862, 185.006, -18.8134 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -301.946, 580.292, 35.0141 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 125.885, -13.5468, 49.2809 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( 1107.44, -511.039, -8 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( 1522.32, -475.751, -8 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( 1835.39, -588.083, -8 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( 1912.72, -931.626, -2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 409.665, -448.353, -6.74574 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 613.536, -589.676, 6.98202 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_sm_runner_oflow" ); + ent.v["origin"] = ( 1010.84, -1397.33, 177.569 ); + ent.v["angles"] = ( 23.8603, 39.9946, 18.745 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 2.44; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -480.09, -11.4621, 0 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner_oflow" ); + ent.v["origin"] = ( -283.508, -1391.37, 268.717 ); + ent.v["angles"] = ( 17.9408, 145.177, 9.14282 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 4.2; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner_oflow" ); + ent.v["origin"] = ( -99.2519, -1517.85, 284.553 ); + ent.v["angles"] = ( 26.2572, 308.833, 23.334 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 3.44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_sm_runner_oflow" ); + ent.v["origin"] = ( -164.92, -1373.38, 190.885 ); + ent.v["angles"] = ( 3.64226, 48.6546, 22.1653 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 2.88; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1265.89, -719.679, 41.8711 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 50.1386, -1171.14, 117.178 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -1395.9, 2327.98, -8 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( 2415.13, -1321.27, 8 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 531.422, -1240.56, 109.606 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 1067.89, -1585.95, -8 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 2095.93, -584.791, 0.485807 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_lantern_dec_red" ); + ent.v["origin"] = ( 704.821, -915.196, 111.973 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_black_slow" ); + ent.v["origin"] = ( 141.92, -464.734, 15.8908 ); + ent.v["angles"] = ( 324.496, 343.059, 19.2294 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_black_slow" ); + ent.v["origin"] = ( -666.8, 1696.56, 38.5757 ); + ent.v["angles"] = ( 339.007, 323.897, 0.335757 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); + ent.v["origin"] = ( 274.77, -993.367, 253.181 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -2055.82, -7.81759, 56.921 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -159.118, 1285.97, 59.6602 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 332.54, -1755.32, 35.3767 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 1244.85, -1100.28, -3.45147 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 294.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 1315.76, -1003.09, -6.44468 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 7.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 281.561, -1047.88, 131.505 ); + ent.v["angles"] = ( 293.003, 359.865, -88.7769 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 401.026, -1047.88, 215.816 ); + ent.v["angles"] = ( 65.9905, 179.918, 88.8249 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); + ent.v["origin"] = ( 203.166, -999.101, 254.204 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_black_slow" ); + ent.v["origin"] = ( -2221.17, -352.926, -2.56788 ); + ent.v["angles"] = ( 323.127, 2.83165, 3.41667 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_pop_runner" ); + ent.v["origin"] = ( -258.888, -1360.36, 145.707 ); + ent.v["angles"] = ( 271, 81, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_pop_runner" ); + ent.v["origin"] = ( -95.8447, -1397.92, 230.65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 340.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_black_slow" ); + ent.v["origin"] = ( -1713.24, 463.615, 58.4818 ); + ent.v["angles"] = ( 328.572, 266.776, 5.88032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 451.883, -214.525, 41.6211 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 635.105, -334.629, -7.70327 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -59.6377, -1696.1, -38.5661 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1534.6, -1309.97, -96.9736 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1691.7, -274.356, 39.6039 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1458.36, -540.131, 28.3024 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1713.34, 305.025, 35.5602 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1326.3, 1137.55, 0 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -343.224, 873.519, 0 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -221.84, 1387.69, 0 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1228.27, 548.87, 37.3086 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -870.918, -1616.31, -57.3837 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1721.05, 592.513, 17.8249 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_pop_runner" ); + ent.v["origin"] = ( 2062.53, -1184.57, 71.3509 ); + ent.v["angles"] = ( 291.133, 89.9216, 31.2217 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -312.415, 207.516, -19.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 546.809, -1173.87, 171.523 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 7.4539, -1445.54, 36.6345 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sun_flare_overflow" ); + ent.v["origin"] = ( -46433.1, 22855.7, 39136 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 323.511, -1786.75, 42.1831 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 2180.03, -460.499, 57.439 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -332.373, 1134.76, 0 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_pop_runner" ); + ent.v["origin"] = ( -640.177, -1290.7, 147.491 ); + ent.v["angles"] = ( 270.999, 350.967, 89.9804 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 5.63925, 141.777, -5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 102.726, -1676.11, -39.29 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_md_area" ); + ent.v["origin"] = ( -1893.37, -1174.76, -129 ); + ent.v["angles"] = ( 270, 176.042, -173.042 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1975.68, -947.405, -132 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1491.67, 731.914, 76.7699 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 341.717, 1591.11, 130.27 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 411.795, 1581.2, 128.326 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 576.52, 578.855, 125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 696.096, 454.547, 159.33 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createloopeffect( "fx_mp_elec_spark_burst_xsm_thin" ); + ent.v["origin"] = ( -14.5798, -720.885, 208.457 ); + ent.v["angles"] = ( 40.7911, 317.585, 28.9301 ); + ent.v["type"] = "loopfx"; + ent.v["delay"] = 2.66; + ent = maps\mp\_utility::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 457.359, 726.909, 64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 895.449, 378.367, 64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 348.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 1646.17, 310.682, 64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 281.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 401.9, 1364.22, 64.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 210.467, 1356.11, 67.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 317.7, -1242.57, 41.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 708.734, -1195.39, 58.1272 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -2089.62, -666.822, -50.9244 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1984.14, -940.224, -59 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1316.99, 900.873, 0 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -414.119, 668.642, 17.1461 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1566.21, 1182.45, 54 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1379.98, -1019.24, 12.0793 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( -1612.48, 777.553, 368.9 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( -1052.88, 1078.5, 493.891 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( -1481.74, 2020.21, 377.685 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -2043.62, -1352.36, -132 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_gas_pipe_md" ); + ent.v["origin"] = ( -1387.51, -1338.69, -54.2344 ); + ent.v["angles"] = ( 16.3733, 215.378, 1.64252 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_pipe_md" ); + ent.v["origin"] = ( -1381.72, 1277.88, 18.7317 ); + ent.v["angles"] = ( 278.891, 259.971, -174.596 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 624.539, -687.744, 46.3582 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1049.77, -250.702, 54.2236 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1393.68, 231.309, 119.686 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 320.349, -295.735, 72.1301 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -2317.62, -687.495, -132.446 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( -1818.84, -440.783, 1.35371 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 385.109, -944.125, 135.329 ); + ent.v["angles"] = ( 294.002, 359.96, 90.1356 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 237.846, -1047.88, 215.609 ); + ent.v["angles"] = ( 76.9898, 178.921, 87.8758 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 77.7459, -935.875, 160.569 ); + ent.v["angles"] = ( 281.009, 358.533, -87.4961 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 784.764, -988.179, 122.548 ); + ent.v["angles"] = ( 89, 180, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 784.875, -864.688, 117.027 ); + ent.v["angles"] = ( 58.9855, 268.336, 88.0591 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 783.549, -991.576, 25.208 ); + ent.v["angles"] = ( 302.013, 88.4002, -88.1132 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 355.497, -1048.09, 144.746 ); + ent.v["angles"] = ( 329, 0.703705, -89.4423 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -2342.9, 476.596, 16.573 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 1391.27, -1038.06, -6.98319 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 420.542, -944.125, 200.713 ); + ent.v["angles"] = ( 48.9973, 180.021, -90.0839 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 304.26, -944.125, 220.288 ); + ent.v["angles"] = ( 76.0025, 0.305261, 90.2278 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 61.223, -909.392, 129.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 36.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 304.485, -778.755, 128.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 193.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 304.637, -941.671, 129.302 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 234.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_detail" ); + ent.v["origin"] = ( -1504.5, -1376.62, -92.2689 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 272.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm" ); + ent.v["origin"] = ( -1519.6, -1374.82, -63.2638 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 272.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_black_slow" ); + ent.v["origin"] = ( -1522.65, -1364.38, -50.572 ); + ent.v["angles"] = ( 323.127, 2.83165, 3.41667 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_lg_runner_oflow" ); + ent.v["origin"] = ( -59.8228, 246.781, 487.915 ); + ent.v["angles"] = ( 39.6118, 247.793, -16.4119 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner_oflow" ); + ent.v["origin"] = ( 1505.91, -703.472, 370.883 ); + ent.v["angles"] = ( 19, 20, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner_oflow" ); + ent.v["origin"] = ( 1441.86, -644.158, 411.784 ); + ent.v["angles"] = ( 358.014, 125.163, 18.3405 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -12.33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_gas_pipe_md" ); + ent.v["origin"] = ( -1264.16, 1124.34, 36.096 ); + ent.v["angles"] = ( 280.735, 43.2572, 171.51 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1694.54, 372.777, 110 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_pipe_md" ); + ent.v["origin"] = ( -194.429, 1587.51, 78.9634 ); + ent.v["angles"] = ( 0, 315, 87 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_gas_pipe_md" ); + ent.v["origin"] = ( 262.156, 1801.74, 89.6183 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); + ent.v["origin"] = ( 269.944, 283.632, 258.951 ); + ent.v["angles"] = ( 270, 357.537, -42.5371 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); + ent.v["origin"] = ( 430.893, 122.407, 257.082 ); + ent.v["angles"] = ( 270, 357.537, -42.5371 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( 466.63, 1853.76, 407.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_com_utility_cool" ); + ent.v["origin"] = ( -401.203, -584.134, 113.233 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_com_utility_cool" ); + ent.v["origin"] = ( -636.419, -698.195, 118.815 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -169.691, -634.368, 68.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -827.659, -664.326, 172.125 ); + ent.v["angles"] = ( 89, 0, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -569.476, -263.486, 68.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 288.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -659.328, -848.59, 54.7092 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 77.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_pop_runner" ); + ent.v["origin"] = ( 257.031, -1143.64, 165.979 ); + ent.v["angles"] = ( 270.999, 350.967, 89.9804 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner_oflow" ); + ent.v["origin"] = ( -751.752, -1333.3, 406.69 ); + ent.v["angles"] = ( 7.34028, 186.943, 18.7287 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 4.2; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 120.801, -1939.07, 30.6178 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( -282.766, -1662.54, 69.0009 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -752.659, -1579.63, 95.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -601.838, -1289.84, 99.9877 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 357.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( -616.406, -1425.38, 94.3228 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_river_muddy_slw_lg" ); + ent.v["origin"] = ( -2783, -1654.88, -142 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_plume_lg_blk_distant" ); + ent.v["origin"] = ( -8008.33, -1388.13, 289.25 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 102.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_plume_lg_blk_distant" ); + ent.v["origin"] = ( -6085.92, 7723.71, 217.061 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 66.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_plume_lg_blk_distant" ); + ent.v["origin"] = ( -6456.7, -6681.35, 342.016 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 114.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_plume_lg_blk_distant" ); + ent.v["origin"] = ( 6119.84, 486.473, -30.3497 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_river_muddy_slw_lg" ); + ent.v["origin"] = ( -3471.06, 131.857, -143 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_plume_md_blk_distant" ); + ent.v["origin"] = ( -8716.04, 2683.01, 59.2097 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 102.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_river_muddy_slw_lg" ); + ent.v["origin"] = ( -4100.46, 1646.38, -143 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 64.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_river_muddy_slw_lg" ); + ent.v["origin"] = ( -1276.37, 3897.28, -141 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 4.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_river_muddy_slw_lg" ); + ent.v["origin"] = ( -763.516, 3997.48, -141 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 4.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); + ent.v["origin"] = ( 492.132, 375.722, 221.882 ); + ent.v["angles"] = ( 270, 357.537, -42.5371 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); + ent.v["origin"] = ( 581.149, 465.246, 192.882 ); + ent.v["angles"] = ( 270, 357.537, -42.5371 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); + ent.v["origin"] = ( 111.822, 1177.74, 99.7472 ); + ent.v["angles"] = ( 287, 90, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -112.287, 1148.92, 15.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 90.6879, 1105.79, 49.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -160.586, 1778.97, 111.772 ); + ent.v["angles"] = ( 273, 270, 89.999 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -82.4727, 1847.82, 114.167 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -232.594, 2106.35, 122.874 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 309.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_lg_runner_oflow" ); + ent.v["origin"] = ( 2413.08, -1589.83, 359.129 ); + ent.v["angles"] = ( 38.4911, 100.029, 4.1444 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_street_sm_area" ); + ent.v["origin"] = ( 2414.13, -296.602, 32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 2361.36, -386.205, 70.7388 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 1070.69, 365.727, 64 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 786.425, 456.36, 64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 139.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_plume_md_blk_distant" ); + ent.v["origin"] = ( 5276.33, -3354.63, 902.325 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 114.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 2149.69, -308.689, 123.043 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 117.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; +} diff --git a/MP/Maps/Overflow/maps/mp/mp_overflow.gsc b/MP/Maps/Overflow/maps/mp/mp_overflow.gsc new file mode 100644 index 0000000..3bdba9e --- /dev/null +++ b/MP/Maps/Overflow/maps/mp/mp_overflow.gsc @@ -0,0 +1,94 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_overflow_fx; +#include maps\mp\_load; +#include maps\mp\mp_overflow_amb; +#include maps\mp\_compass; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_overflow_fx::main(); + maps\mp\_load::main(); + maps\mp\mp_overflow_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_overflow" ); + level.overrideplayerdeathwatchtimer = ::leveloverridetime; + level.useintermissionpointsonwavespawn = ::useintermissionpointsonwavespawn; + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + setheliheightpatchenabled( "war_mode_heli_height_lock", 0 ); + level thread water_trigger_init(); + level.remotemotarviewup = 13; +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2300", reset_dvars ); +} + +water_trigger_init() +{ + wait 3; + triggers = getentarray( "trigger_hurt", "classname" ); + + foreach ( trigger in triggers ) + { + if ( trigger.origin[2] > level.mapcenter[2] ) + continue; + + trigger thread water_trigger_think(); + } +} + +water_trigger_think() +{ + for (;;) + { + self waittill( "trigger", entity ); + + if ( isplayer( entity ) ) + { + entity playsound( "mpl_splash_death" ); + playfx( level._effect["water_splash"], entity.origin + vectorscale( ( 0, 0, 1 ), 10.0 ) ); + } + } +} + +leveloverridetime( defaulttime ) +{ + if ( self isinwater() ) + return 0.4; + + return defaulttime; +} + +useintermissionpointsonwavespawn() +{ + return self isinwater(); +} + +isinwater() +{ + triggers = getentarray( "trigger_hurt", "classname" ); + + foreach ( trigger in triggers ) + { + if ( trigger.origin[2] > level.mapcenter[2] ) + continue; + + if ( self istouching( trigger ) ) + return true; + } + + return false; +} diff --git a/MP/Maps/Overflow/maps/mp/mp_overflow_amb.gsc b/MP/Maps/Overflow/maps/mp/mp_overflow_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Overflow/maps/mp/mp_overflow_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Overflow/maps/mp/mp_overflow_fx.gsc b/MP/Maps/Overflow/maps/mp/mp_overflow_fx.gsc new file mode 100644 index 0000000..a9ed03c --- /dev/null +++ b/MP/Maps/Overflow/maps/mp/mp_overflow_fx.gsc @@ -0,0 +1,68 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_overflow_fx; +#include maps\mp\createart\mp_overflow_art; + +main() +{ + precache_fxanim_props(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_overflow_fx::main(); + maps\mp\createart\mp_overflow_art::main(); +} + +precache_scripted_fx() +{ + level._effect["water_splash"] = loadfx( "bio/player/fx_player_water_splash_mp" ); +} + +precache_createfx_fx() +{ + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_light_flour_glow_cool_sngl_shrt"] = loadfx( "light/fx_light_flour_glow_cool_sngl_shrt" ); + level._effect["fx_light_lantern_dec_red"] = loadfx( "light/fx_light_lantern_dec_red" ); + level._effect["fx_light_com_utility_cool"] = loadfx( "light/fx_light_com_utility_cool" ); + level._effect["fx_mp_sun_flare_overflow"] = loadfx( "lens_flares/fx_lf_mp_overflow_sun1" ); + level._effect["fx_mp_water_drip_light_long"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); + level._effect["fx_mp_water_drip_light_shrt"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_shrt" ); + level._effect["fx_water_river_muddy_slw_lg"] = loadfx( "water/fx_water_river_muddy_slw_lg" ); + level._effect["fx_insects_roaches_short"] = loadfx( "bio/insects/fx_insects_roaches_short" ); + level._effect["fx_insects_swarm_md_light"] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_debris_papers_narrow"] = loadfx( "env/debris/fx_debris_papers_narrow" ); + level._effect["fx_smk_smolder_black_slow"] = loadfx( "smoke/fx_smk_smolder_black_slow" ); + level._effect["fx_smk_tin_hat_sm"] = loadfx( "smoke/fx_smk_tin_hat_sm" ); + level._effect["fx_mp_smk_plume_lg_blk_distant"] = loadfx( "maps/mp_maps/fx_mp_smk_plume_md_blk_distant_wispy" ); + level._effect["fx_mp_smk_plume_md_blk_distant"] = loadfx( "maps/mp_maps/fx_mp_smk_plume_sm_blk_distant_wispy" ); + level._effect["fx_fire_sm"] = loadfx( "env/fire/fx_fire_sm" ); + level._effect["fx_fire_detail"] = loadfx( "env/fire/fx_fire_detail_sm_nodlight" ); + level._effect["fx_fog_street_md_area"] = loadfx( "fog/fx_fog_street_md_area" ); + level._effect["fx_fog_street_sm_area"] = loadfx( "fog/fx_fog_street_sm_area" ); + level._effect["fx_mp_elec_spark_burst_sm_oflow"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_sm_oflow" ); + level._effect["fx_mp_elec_spark_burst_sm_runner_oflow"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_sm_runner_oflow" ); + level._effect["fx_mp_elec_spark_burst_xsm_thin"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin" ); + level._effect["fx_mp_elec_spark_burst_xsm_thin_runner"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin_runner" ); + level._effect["fx_mp_elec_spark_burst_md_oflow"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_md_oflow" ); + level._effect["fx_mp_elec_spark_burst_md_runner_oflow"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_md_runner_oflow" ); + level._effect["fx_mp_elec_spark_burst_lg_oflow"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_lg_oflow" ); + level._effect["fx_mp_elec_spark_burst_lg_runner_oflow"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_lg_runner_oflow" ); + level._effect["fx_mp_elec_spark_pop_runner"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_pop_runner" ); + level._effect["fx_mp_debris_car_floating_river"] = loadfx( "maps/mp_maps/fx_mp_debris_car_floating_river" ); + level._effect["fx_mp_steam_gas_pipe_md"] = loadfx( "maps/mp_maps/fx_mp_steam_gas_pipe_md" ); + level._effect["fx_mp_steam_pipe_md"] = loadfx( "maps/mp_maps/fx_mp_steam_pipe_md" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["canopy04"] = %fxanim_yemen_cloth_canopy04_anim; + level.scr_anim["fxanim_props"]["canopy04_lrg"] = %fxanim_yemen_cloth_canopy04_lrg_anim; + level.scr_anim["fxanim_props"]["canopy07_lrg"] = %fxanim_yemen_cloth_canopy07_lrg_anim; + level.scr_anim["fxanim_props"]["canopy08"] = %fxanim_yemen_cloth_canopy08_anim; + level.scr_anim["fxanim_props"]["canopy08_lrg"] = %fxanim_yemen_cloth_canopy08_lrg_anim; + level.scr_anim["fxanim_props"]["awning_store"] = %fxanim_gp_awning_store_mideast_anim; + level.scr_anim["fxanim_props"]["wire_light"] = %fxanim_mp_overflow_wire_light_anim; +} diff --git a/MP/Maps/Plaza/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Plaza/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Plaza/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Plaza/aitype/enemy_dog_mp.gsc b/MP/Maps/Plaza/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Plaza/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Plaza/character/character_mp_german_shepherd.gsc b/MP/Maps/Plaza/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Plaza/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Plaza/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Plaza/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Plaza/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Plaza/clientscripts/mp/createfx/mp_nightclub_fx.csc b/MP/Maps/Plaza/clientscripts/mp/createfx/mp_nightclub_fx.csc new file mode 100644 index 0000000..110af7c --- /dev/null +++ b/MP/Maps/Plaza/clientscripts/mp/createfx/mp_nightclub_fx.csc @@ -0,0 +1,2762 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_mist" ); + ent.v["origin"] = ( -16947.6, 1036.3, 89.6801 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 227.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); + ent.v["origin"] = ( -17262.3, 1779.14, -38 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 313.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); + ent.v["origin"] = ( -16883.4, 871.543, -52 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 62.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); + ent.v["origin"] = ( -16262.8, 1545.59, -54.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 97.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); + ent.v["origin"] = ( -16319.4, 1314.85, -88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 187.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); + ent.v["origin"] = ( -17523.1, 502.205, -94.25 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 245.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_laser_blue_static" ); + ent.v["origin"] = ( -17162.9, 986.408, 35.3084 ); + ent.v["angles"] = ( 25.3967, 238.24, -12.2032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_laser_blue_static" ); + ent.v["origin"] = ( -16577.3, 1511.27, 53 ); + ent.v["angles"] = ( 32, 266, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_vista_fog" ); + ent.v["origin"] = ( -21294.7, 1734.81, -22.118 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_vista_fog" ); + ent.v["origin"] = ( -19943.4, 4984.73, -110.446 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 310.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_vista_fog" ); + ent.v["origin"] = ( -16010.3, 5875.07, -119.96 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 263.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -19077, 2023.36, 18.8227 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -18865.1, 2204.92, -20.3623 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -17797, 3449.98, -2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -17547.5, 3567.87, -29.7848 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -16962.7, 3358.8, -185.957 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -16854, 3636.33, -181.583 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -15367.2, 3106.44, -119.687 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -17299.4, 3195.65, -178.935 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); + ent.v["origin"] = ( -17160.3, 846.72, -65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 266.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_laser_blue_static" ); + ent.v["origin"] = ( -16526, 1526.26, 53 ); + ent.v["angles"] = ( 44, 315, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_laser_blue_static" ); + ent.v["origin"] = ( -16627, 1531.34, 54 ); + ent.v["angles"] = ( 34, 240, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_laser_blue_static" ); + ent.v["origin"] = ( -17037.7, 1126.07, 51.6667 ); + ent.v["angles"] = ( 44, 53, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_laser_blue_static" ); + ent.v["origin"] = ( -17028.7, 1025.4, 52.6667 ); + ent.v["angles"] = ( 34, 338, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_laser_blue_static" ); + ent.v["origin"] = ( -17015.8, 1077.37, 51.6667 ); + ent.v["angles"] = ( 32, 4, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -17399.1, 1913.95, -22 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -17474.5, 1900.59, -11 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -19005, 1418.12, -156.044 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18907, 1889.69, -155.089 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -19257.7, 580.886, -156 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18673.7, 175.113, -156 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18331.2, -393.151, -151 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18274.1, 518.358, -164 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -17992.6, 1052.65, -140.458 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18056.3, 1630.21, -136.444 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -17108.9, 2558.04, -144.433 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -16485.7, 2532.69, -146.685 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -16006.1, 2782.28, -150 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -17089.2, 3147.85, -137.72 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -16806.4, 3707.12, -110 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -17306.5, 3610.04, -118.32 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -16153, 3797.9, -154 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -15763.7, 3285.28, -147 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -15222.1, 3282.63, -141 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -15201.5, 2894.57, -162 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -17829.2, 2100.57, -39 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); + ent.v["origin"] = ( -16151.7, 1914.14, -106 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 16.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); + ent.v["origin"] = ( -15879.9, 1996.82, -113 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -16215, 2394.37, -147 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -15608, 3021.46, -153 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -15954, 3648.28, -114.376 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -17574.9, 3233.16, -104.62 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18140.8, 3260.51, -98 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18695.5, 3002.41, -88 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18808.1, 2487, -125 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18614.3, 2168.01, -108 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18599.6, 1549.89, -138 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -19307.3, 1118.48, -156 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18903.4, 388.731, -156 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18793.9, -371.33, -147 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -17439.2, 2223.27, -43 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -16877.8, 2751.34, -142.832 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -17393.1, 3738.54, -83 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -18667, 588.432, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -18827.2, 1051.51, -136.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 315.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -18512.2, 2292.24, -78.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 20.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -17800.7, 2949.98, -77.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 223.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_vista_fog" ); + ent.v["origin"] = ( -21481.1, -1457.28, -14.7847 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 39.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_vista_spotlight01" ); + ent.v["origin"] = ( -22297.8, 10396.7, -305.651 ); + ent.v["angles"] = ( 287.114, 217.488, -83.1891 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_vista_spotlight02" ); + ent.v["origin"] = ( -29544.2, 8247.57, -22.902 ); + ent.v["angles"] = ( 270, 0, 62 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_vista_spotlight02" ); + ent.v["origin"] = ( -12042.3, -2031.22, 334.424 ); + ent.v["angles"] = ( 270, 0, 62 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_red_flash" ); + ent.v["origin"] = ( -34125.3, 10603.4, 9766.02 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_red_flash" ); + ent.v["origin"] = ( -8502.25, -5002.56, 9745.09 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_tank_bubbles" ); + ent.v["origin"] = ( -17960.6, 263.018, -109.182 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_tank_bubbles" ); + ent.v["origin"] = ( -18026.1, 214.757, -112.281 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_tank_bubbles" ); + ent.v["origin"] = ( -18004.3, 182.681, -113.41 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_tank_bubbles" ); + ent.v["origin"] = ( -17936.5, 245.174, -114.934 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -18758.3, 1832.34, -164.052 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -19191.4, 1905.53, -96.4394 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -19136.8, 1329.54, -179.032 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -18546.8, -52.4395, -152.106 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -18820.8, -1085.93, -355.127 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -18586.9, -1347.54, -357.228 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nightclub_bar_light" ); + ent.v["origin"] = ( -15549.5, 2381.68, -12.9216 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nightclub_bar_light" ); + ent.v["origin"] = ( -15583.3, 2321.16, -12.6912 ); + ent.v["angles"] = ( 88, 87, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nightclub_bar_light" ); + ent.v["origin"] = ( -15535.5, 2443.75, -17.2216 ); + ent.v["angles"] = ( 90, 0, 3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nightclub_bar_light" ); + ent.v["origin"] = ( -15627.9, 2275.31, -12.4283 ); + ent.v["angles"] = ( 90, 12.1698, 16.1698 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_nightclub_bar_light" ); + ent.v["origin"] = ( -15686.3, 2236.1, -14.7572 ); + ent.v["angles"] = ( 90, 0, 3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -15538.2, 2524.28, -59.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 242.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -15737.3, 2651.26, -86 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 242.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18028.9, 225.724, -82.7716 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_tank_bubbles" ); + ent.v["origin"] = ( -18007.1, 229.824, -117.014 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18683, 914.973, -2.875 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -16424.5, 3186.35, -30.875 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -18615.2, -184.097, -151.801 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_fireworks_runner" ); + ent.v["origin"] = ( -32592.4, 3269.81, 4907.84 ); + ent.v["angles"] = ( 293.048, 249.116, 168.917 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_fireworks_runner" ); + ent.v["origin"] = ( -25786.4, 13211.2, 4123.72 ); + ent.v["angles"] = ( 289.651, 26.3177, -112.438 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_vista_spotlight01" ); + ent.v["origin"] = ( -28164.3, 1257.98, -303.876 ); + ent.v["angles"] = ( 297.184, 248.043, -54.6899 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( -15286.9, 2476.05, -22.34 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( -15333.9, 2303.12, -21.3415 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( -15286.3, 2131.5, -21.337 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( -15407.4, 2014.32, -21.3334 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( -15640.6, 2010.58, -21.3374 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_fireworks_runner_02" ); + ent.v["origin"] = ( -22292.4, 10417.8, -311.375 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_fireworks_runner_02" ); + ent.v["origin"] = ( -28227.9, 1247.11, -311.375 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_nightclub_sun1" ); + ent.v["origin"] = ( 117342, 198059, 132299 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18539.1, 1430.9, 6.96914 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18631.4, 1346.95, 7.64295 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18632.5, 1197.5, 7.04885 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18699.9, 1142.45, 6.41418 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -19156.5, 1967.21, -59.0252 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18809.9, 2190.39, -60.1828 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -18986.8, 2014.05, -135.861 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -19206.6, 1983.36, -110.516 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -19278.6, 1861.33, -111.037 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -19123.5, 2021.03, 18.4326 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -18883.9, 2220.76, 19 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -18528, 1709.57, -110.651 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -18586.5, 1929.8, -110.117 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18883.1, 1142.5, 4.85368 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -19118.2, 1142.5, 6.36984 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -19205.5, 1044.12, 6.59046 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -19205.5, 861.448, 6.57288 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -19103.4, 709.899, 6.79024 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18817, 611.713, 6.28608 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18685.1, 503.253, 6.46426 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18755.2, 2488.95, -23.1875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18616.8, 2627.33, -23.5142 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18590.2, 2954.62, -22.9736 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18456.8, 3088.54, -22.519 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18127.7, 3115.15, -23.8596 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17990.7, 3253.95, -22.2686 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -16930.7, 3061.88, 6.85486 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -16770.5, 3128.49, 6.77435 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -16644.5, 3285.5, 6.43802 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -16643.5, 3610.15, 7.80851 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -16565.9, 3702.26, 6.1482 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -16361.6, 3702.37, 6.44853 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -16214.7, 3603.04, 7.2351 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -16118.6, 3318.27, 6.87422 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17690.1, 3308.49, -61.21 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17527.2, 3726.89, -60.1496 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17323.1, 3819.52, -68.7982 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -17513, 3489.78, -134.842 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -17186.8, 3821.95, -157.874 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -16647, 3619.2, -157.85 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -15513.8, 2867.51, -56.7778 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -15650.7, 2869.7, -55.8548 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -15778.4, 2867.69, -55.9985 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -15821.7, 2769.45, -55.8483 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -15875.1, 2654.94, -56.0558 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -15947.9, 2554, -55.821 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -16043.3, 2466.53, -56.055 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -15484.6, 2840.4, -55.8791 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -16025.4, 2234.5, -40.1548 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -15725.7, 2234.76, -39.4667 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -15553.6, 2649.15, -40.1164 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18091.8, 784.759, 5.92132 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17114.4, 2869.88, -62.0578 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -16942.4, 2837.63, 5.42827 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -17433.3, 3083.36, -110.897 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -17212.4, 3024.81, -110.851 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_fire" ); + ent.v["origin"] = ( -15783.2, 2417.59, -104.645 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 68.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17201.9, 2952.87, -41.0503 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_club_ring_smk" ); + ent.v["origin"] = ( -16617.9, 1115.89, 296 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18121.5, -256.709, -91.4095 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17808.4, -256.952, -92.8995 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17641, -25.4045, -35.4541 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17641.9, 141.276, -35.4757 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -17585.9, 2186.94, 7.467 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -17599.2, 2088.22, 5.46751 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -17692.5, 2086.3, 5.442 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare03" ); + ent.v["origin"] = ( -17942.9, 2165.33, 14.1474 ); + ent.v["angles"] = ( 270, 0, -44 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare03" ); + ent.v["origin"] = ( -17670, 2436.79, 14.8706 ); + ent.v["angles"] = ( 270, 0, -44 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare04" ); + ent.v["origin"] = ( -18101.7, 398.803, -61.7354 ); + ent.v["angles"] = ( 270, 3.57633, 118.424 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare04" ); + ent.v["origin"] = ( -18348.7, 290.444, -61.8678 ); + ent.v["angles"] = ( 271, 175, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare04" ); + ent.v["origin"] = ( -17803.2, 604.815, -61.3059 ); + ent.v["angles"] = ( 271, 175, -84 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare04" ); + ent.v["origin"] = ( -18362.3, 275.207, -61.8617 ); + ent.v["angles"] = ( 271, 175, 5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare04" ); + ent.v["origin"] = ( -18362.3, 7.89001, -61.8155 ); + ent.v["angles"] = ( 271, 175, 5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare04" ); + ent.v["origin"] = ( -18344.4, -10.2493, -61.4767 ); + ent.v["angles"] = ( 271, 175, 98 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare04" ); + ent.v["origin"] = ( -18199, -10.233, -60.4744 ); + ent.v["angles"] = ( 271, 175, 98 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -19258, 1806.65, -76.0612 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -19331.7, 1678.53, -76.2787 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_fire" ); + ent.v["origin"] = ( -15758.2, 2478.69, -104.643 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 250.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_fire" ); + ent.v["origin"] = ( -15690.3, 2547.99, -104.642 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 222.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_fire" ); + ent.v["origin"] = ( -15741.1, 2505.77, -104.644 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 40.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_fire" ); + ent.v["origin"] = ( -15671.1, 2536.86, -104.638 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 250.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_fire" ); + ent.v["origin"] = ( -15696, 2475.76, -104.64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 68.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_fire" ); + ent.v["origin"] = ( -15714.5, 2450.5, -104.646 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 222.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_fire" ); + ent.v["origin"] = ( -15765.2, 2408.27, -104.648 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 40.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16979.6, 3837.11, -192 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16833.1, 3849.84, -192 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16671, 3860.11, -192 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16524.5, 3870.21, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16373, 3881.74, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16215.6, 3886.85, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16067.6, 3888.5, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15921.3, 3890.71, -192 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15785.7, 3494.92, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15682.1, 3494.8, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15577.6, 3495.38, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15474.9, 3495.77, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15330.3, 3495.16, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15225.9, 3494.86, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -14998, 3450.57, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -14918.8, 3374.3, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -14867.1, 3272.31, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -14867.3, 2905.73, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -14918, 2803.93, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -14998.2, 2728.26, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15943.1, 3543.59, -191.007 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16088, 3546.58, -191.013 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16233.2, 2732.54, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16333.1, 2762.77, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16433, 2792.22, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16532.1, 2822.37, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16631.6, 2851.58, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18692.6, -224.822, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19398.7, 490.279, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19394.3, 633.836, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19384.9, 945.683, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19372.3, 1091.78, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19351.2, 1405.56, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19339.3, 1551.15, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19178.5, 1374.07, -189.292 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19027.2, 1419.26, -190.248 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18848.1, 1404.12, -191.938 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18940.5, 1495.18, -189.407 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19233.1, 1585.31, -191.2 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19080, 1707.21, -190.564 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19104.4, 1853.98, -189.149 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18956.7, 1912.3, -176.854 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18879.1, 2049.5, -161.058 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18733.3, 2099.4, -148.18 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18804.7, 1919.73, -167.606 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18770.9, 1797.74, -178.863 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18674.7, 1723.43, -187.592 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18567.7, 1633.69, -192.182 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18678.1, 1596.16, -191.125 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18381.1, 605.766, -75.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18196.9, 688.089, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18173.4, 789.474, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18252.4, 888.003, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18329.6, 1130.58, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18328.7, 1259.24, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18329.2, 1369.39, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17695.3, 1789.71, 73.2575 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17695.5, 1911.71, 73.2585 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17697.4, 2018.45, 73.2498 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17525.4, 2189.46, 73.2493 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17403.8, 2190.28, 73.2591 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17297.8, 2191.66, 73.254 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16470, 3430.39, -82.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16531.9, 3430.77, -82.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16594.2, 3431.09, -82.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16345.3, 2816.02, -80.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16411.4, 2834.39, -80.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16514.4, 2863.42, -80.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16578, 2884.56, -80.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16860, 2818.45, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16715.5, 2818.2, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16560.5, 2818.03, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16381.2, 2745.94, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16308.8, 2653.26, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16181.3, 2699.06, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16105.7, 2885.53, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17431.8, 1865.1, 32 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17398.1, 1832.64, 32 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17337.1, 1893.98, 32 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17370, 1928.38, 32 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17176.6, 1848.56, 110 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17302.5, 1798.91, 110 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17353, 1673.46, 112 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17302.7, 1549.67, 111 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17178.7, 1497.54, 111 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17053.7, 1551.36, 110 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16997.8, 1678.95, 110 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17053.2, 1798.37, 111 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17911.5, 2248.04, 16.4376 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17877.2, 2281.76, 16.4387 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17844.2, 2315.4, 16.4343 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17809.2, 2350.37, 16.4386 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17775.4, 2385.19, 16.4386 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17741.1, 2418.92, 16.4406 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18173.8, 2592.38, -2 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18135.3, 2630.18, -2 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18096.6, 2668, -2 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17910.4, 2627.62, 47.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17834.1, 2703.35, 47.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17757.9, 2780.26, 47.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17682.3, 2857.09, 47.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18131.8, 2433.14, 47.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18312, 842.426, -80.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18332, 911.121, -80.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18197.1, 1960.08, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18175.7, 1991.31, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18157.3, 2022.63, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18131.3, 2048.88, 45.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18106.4, 2073.47, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18080.5, 2099.79, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18055.1, 2125.06, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18023.9, 2145.04, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17992.4, 2164.96, 47.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17666.4, 2490.59, 47.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17646.5, 2521.89, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17626.6, 2553.5, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17601.1, 2578.74, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17575.9, 2604.1, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17550.4, 2629.21, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17524.4, 2655.89, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17493.4, 2675.55, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17462.2, 2694.79, 47.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16321.8, 954.617, 39.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16458.3, 816.316, 39.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16319.8, 677.462, 40.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16182.4, 815.312, 39.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_cool" ); + ent.v["origin"] = ( -17272.3, 855.064, 31 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_cool" ); + ent.v["origin"] = ( -17201.4, 815.615, 31 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_cool" ); + ent.v["origin"] = ( -17130.4, 798.371, 31 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_cool" ); + ent.v["origin"] = ( -17066.7, 802.249, 30 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_cool" ); + ent.v["origin"] = ( -16993.5, 833.443, 30 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16356.4, 1766.76, 31 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16322.1, 1705.53, 31 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16304.5, 1635.05, 30 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16307.5, 1558.84, 30 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16337.4, 1489.52, 30 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16186.6, 1875.69, 39.2978 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16063.2, 1823.98, 38.295 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15956.6, 1810.64, 37.3021 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15855.5, 1852.9, 38.304 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15775.7, 1929.53, 37.2979 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15867.5, 2072.97, 37.3007 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15999.5, 1940.69, 38.298 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15930.9, 2010.16, 38.2959 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15493.8, 2512.82, 31.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15493.9, 2450.18, 31.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15511.5, 2391.6, 31.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15537.1, 2331.58, 31.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15579.2, 2284.38, 30.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15633.7, 2241.27, 31.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15689.6, 2209.53, 31.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -18154.9, 2467.98, 8.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 226.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -17972.9, 2650.11, 8.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 226.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15718.2, 3570.62, -39.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15717.8, 3698.52, -38.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15718.3, 3826.68, -39.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15591.9, 3570.6, -39.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15461.4, 3569.99, -39.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15590.1, 3698.49, -39.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15589.3, 3826.24, -39.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15461.4, 3826.43, -39.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15461.6, 3698.44, -39.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -15625.2, 2040.68, -95 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -15311.7, 2580.88, -108 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -17726, -174.557, -117.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -17524.4, 208.04, -84.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flood_light" ); + ent.v["origin"] = ( -19360.7, -88.6989, -98.9068 ); + ent.v["angles"] = ( 37.6805, 45.4659, -92.9504 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flood_light" ); + ent.v["origin"] = ( -19345.3, -101.805, -100.665 ); + ent.v["angles"] = ( 33.7943, 34.7068, 68.3069 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flood_light" ); + ent.v["origin"] = ( -19340.6, -96.5053, -77.6845 ); + ent.v["angles"] = ( 16.7776, 48.6563, -79.8364 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -18103.3, -173.657, -17.3201 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -17943.4, -173.271, -15.3252 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -17697.5, -174.193, -17.3258 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -17553.7, -97.1301, -17.3229 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -17549.9, -16.4068, -17.3227 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -17551, 144.281, -17.3241 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -17861.8, -173.744, -17.3317 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16436.6, 1321.9, 248.251 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16551.1, 1376.36, 249 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16676, 1341.99, 249 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16768.1, 1275.34, 249 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16834.4, 1183.19, 249 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16868.2, 1058.45, 249 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16821.4, 923.479, 248.252 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16692.2, 884.987, 249 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16567.4, 917.162, 249 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16475.5, 984.51, 249 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16409.6, 1076.31, 249 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16376, 1200.89, 249 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16206.1, 1031.8, 199 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16272.9, 996.463, 199 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16349.6, 947.451, 199 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16413, 897.28, 199 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16461, 832.284, 199 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16499.4, 770.442, 199 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16535.3, 703.829, 199 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -19307.3, -52.3023, -140.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 47.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_laser_blue_static" ); + ent.v["origin"] = ( -17133.4, 983.978, 36.7995 ); + ent.v["angles"] = ( 36.1065, 291.347, -7.10015 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18116.8, 2879.16, -1.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18090.7, 2905.58, -1.53871 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18064.9, 2930.82, -1.7265 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -17955.7, 3039.98, -0.87473 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -17982.2, 3015.41, -0.68694 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18006.9, 2989.02, -0.27324 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18065.8, 2930.99, -40.3684 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18090.4, 2905.28, -40.1806 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18115.5, 2879.17, -40.7669 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18008.7, 2989.56, -39.1838 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -17981.8, 3015.13, -39.5975 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -17956.7, 3041.06, -38.7853 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18116.9, 2879.97, -78.3747 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18091.1, 2905.72, -78.7885 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18064.8, 2931.38, -78.9762 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18008.5, 2990.13, -78.412 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -17981.6, 3015.7, -78.8257 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -17956.5, 3041.63, -78.0135 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18004, 2390.3, 14.875 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18025.5, 2411.16, 14.875 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -17893.5, 2501.39, 14.875 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -17914.2, 2522, 14.875 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18028.3, 2318.98, -17.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18051.6, 2295.42, -17.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18077.1, 2269.84, -17.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18211.3, 2135.38, -17.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18234.5, 2112.4, -17.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18260.2, 2086.56, -17.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16450.9, 3347.7, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16451.4, 3288.39, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16592.9, 3217.93, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16529.7, 3217.22, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16417.3, 3176.47, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16352.8, 3176.63, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16290.4, 3176.92, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16228.5, 3176.94, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16162.6, 3176.67, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16465.8, 3103.25, -75.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16465.8, 3039.48, -75.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16417.6, 2968.56, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16353.9, 2968.77, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16225.7, 2968.13, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16161.9, 2968.67, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16118.2, 3039.32, -75.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16118.7, 3103.6, -75.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16290.1, 2968.49, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16226.6, 2826.92, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16289.6, 2844.91, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16353.6, 2862.24, -75.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16417.4, 2882.58, -75.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19003.7, 2415.18, -144 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18964.6, 2497.52, -144 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18802, 2659.61, -144 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18763.7, 2915.78, -144 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18720, 3050.94, -144 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18412, 3262, -144 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18150.8, 3314.24, -144 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17980.7, 3482.97, -144 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17918.5, 3500.77, -144 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18997.6, -275.912, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18998.4, -171.879, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18998.5, -379.943, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18953.3, -505.236, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18877.3, -584.013, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18775.7, -636.315, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18666, -659.119, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18517.3, -660.453, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18408.9, -636.482, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18306.2, -585.026, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18229.7, -505.354, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18190.1, -343.978, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18607, -219.183, -157 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18653, -217.389, -157 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18672.3, -151.646, -158 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16860, 638.489, 198.253 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16938.5, 718.482, 198.255 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -17018, 796.892, 198.259 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_laser_roller" ); + ent.v["origin"] = ( -16825.1, 1322.15, 197 ); + ent.v["angles"] = ( 54.952, 308.876, -4.48132 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_laser_disco" ); + ent.v["origin"] = ( -16228.6, 1318.6, 190.705 ); + ent.v["angles"] = ( 15.3541, 194.789, -1.1569 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_laser_disco" ); + ent.v["origin"] = ( -16825.1, 715.555, 192.716 ); + ent.v["angles"] = ( 17.2967, 70.4187, -0.791652 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -14562.1, 3170.65, -156.083 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -14561.8, 3007.41, -156.09 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -14736.8, 3007.53, -156.065 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -14737.3, 3171.15, -156.053 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18295.2, -752.789, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16144, 1353.09, 198.254 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16224.3, 1431.04, 198.252 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16304.1, 1510.57, 198.256 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16913.5, 3062.13, -193 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16911.8, 2956.81, -193 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18787.6, 581.452, -96.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18787.8, 604.217, -97.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18788.2, 628.634, -96.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18788.6, 644.919, -96.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18788.4, 668.32, -96.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18788, 692.106, -96.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18788.3, 708.776, -95.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18788.5, 732.598, -96.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18788.4, 756.3, -96.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -19037.9, 1394.8, -195 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_nightclub_moon" ); + ent.v["origin"] = ( 200148, 316107, 208956 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17806, 1142.62, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17789.5, 1080.04, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17775.8, 1018.76, -190 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17762.5, 954.757, -190 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18354.8, 1436.93, 6.34749 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18142, 926.503, 5.18384 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -19123.3, 2255.54, -48.9937 ); + ent.v["angles"] = ( 273.605, 236.287, 123.659 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17815, 3565.73, -60.9021 ); + ent.v["angles"] = ( 273.605, 236.287, 123.659 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17666.8, 3714.34, -60.5045 ); + ent.v["angles"] = ( 273.605, 236.287, 123.659 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18512.9, 1699.86, -70.6367 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16094.7, 3697.1, -191.217 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15938.8, 3696.11, -191.364 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); + ent.v["origin"] = ( -16673.3, 1321.25, -52 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 215.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -18248.1, 2149.78, -14.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 44.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -18114.1, 2288.51, -13.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 44.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -16095.4, 3050.53, -132.751 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 172.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -15386.6, 3708.2, -119.051 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -19210.6, 274.906, -136.981 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 265.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -16588, 3356.79, -146.875 ); + ent.v["angles"] = ( 0, 336, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -17740.5, 179.522, -7.65209 ); + ent.v["angles"] = ( 273, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -17765.7, 143.731, -8.43552 ); + ent.v["angles"] = ( 273, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -17795.8, 108.716, -7.52192 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -17835.1, 75.7021, -8.1626 ); + ent.v["angles"] = ( 273, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -17878.4, 51.7002, -7.48641 ); + ent.v["angles"] = ( 273, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -17921.9, 37.6316, -8.00315 ); + ent.v["angles"] = ( 273, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18693.6, -28.1875, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18503.2, -232.295, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18499.8, -35.2069, -190 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18535.4, -99.5975, -157 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18565.4, -57.538, -156 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -19049.8, 441.558, -190 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -19049.8, 581.598, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -19200.4, 578.639, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -19200.8, 441.334, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18748.3, 320.281, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18747.5, 259.329, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18659.2, 257.714, -190 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18659.1, 318.068, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18181.1, 1210.52, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18003.8, 1211.65, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18004.1, 1342.17, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18181, 1338.88, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16843, 2678.97, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16717.1, 2678.78, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16717.4, 2500.21, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16844.5, 2500.12, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -15830.1, 3162.02, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -15829.7, 3237.58, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -15750.2, 3237.06, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -15749.7, 3162.65, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -15471.7, 3189.43, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -15472.5, 3000.2, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -15274, 3000.3, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -15274.5, 3190.49, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18349.1, 666.265, -95.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18369.9, 654.226, -95.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18389.8, 641.23, -95.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18410.3, 628.778, -95.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18430, 615.24, -95.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18450.4, 602.715, -95.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18471.7, 589.625, -96.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18491.4, 576.86, -96.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18512, 564.174, -96.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; +} diff --git a/MP/Maps/Plaza/clientscripts/mp/mp_nightclub.csc b/MP/Maps/Plaza/clientscripts/mp/mp_nightclub.csc new file mode 100644 index 0000000..fb2d8d5 --- /dev/null +++ b/MP/Maps/Plaza/clientscripts/mp/mp_nightclub.csc @@ -0,0 +1,25 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_nightclub_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_nightclub_amb; + +main() +{ + level.worldmapx = -17513; + level.worldmapy = 2252; + level.worldlat = -22.106; + level.worldlong = 86.4368; + clientscripts\mp\_load::main(); + clientscripts\mp\mp_nightclub_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_nightclub_amb::main(); + setsaveddvar( "compassmaxrange", "2100" ); + setsaveddvar( "sm_sunsamplesizenear", 0.39 ); + waitforclient( 0 ); +/# + println( "*** Client : mp_nightclub running..." ); +#/ +} diff --git a/MP/Maps/Plaza/clientscripts/mp/mp_nightclub_amb.csc b/MP/Maps/Plaza/clientscripts/mp/mp_nightclub_amb.csc new file mode 100644 index 0000000..5b5d2f2 --- /dev/null +++ b/MP/Maps/Plaza/clientscripts/mp/mp_nightclub_amb.csc @@ -0,0 +1,116 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "nightclub_outdoor", 1 ); + setambientroomtone( "nightclub_outdoor", "amb_wind_extreior_2d", 0.55, 1 ); + setambientroomreverb( "nightclub_outdoor", "nightclub_outdoor", 1, 1 ); + setambientroomcontext( "nightclub_outdoor", "ringoff_plr", "outdoor" ); + declareambientroom( "nightclub_partial_room" ); + setambientroomreverb( "nightclub_partial_room", "nightclub_partial_room", 1, 1 ); + setambientroomcontext( "nightclub_partial_room", "ringoff_plr", "outdoor" ); + declareambientroom( "nightclub_small_room" ); + setambientroomreverb( "nightclub_small_room", "nightclub_small_room", 1, 1 ); + setambientroomcontext( "nightclub_small_room", "ringoff_plr", "indoor" ); + declareambientroom( "nightclub_construction_rm" ); + setambientroomreverb( "nightclub_construction_rm", "nightclub_small_room", 1, 1 ); + setambientroomcontext( "nightclub_construction_rm", "ringoff_plr", "indoor" ); + declareambientroom( "nightclub_construction_rm_prt" ); + setambientroomreverb( "nightclub_construction_rm_prt", "nightclub_small_room", 1, 1 ); + setambientroomcontext( "nightclub_construction_rm_prt", "ringoff_plr", "outdoor" ); + declareambientroom( "nightclub_gift_shop" ); + setambientroomreverb( "nightclub_gift_shop", "nightclub_small_room", 1, 1 ); + setambientroomcontext( "nightclub_gift_shop", "ringoff_plr", "indoor" ); + declareambientroom( "nightclub_gift_shop_prt" ); + setambientroomreverb( "nightclub_gift_shop_prt", "nightclub_small_room", 1, 1 ); + setambientroomcontext( "nightclub_gift_shop_prt", "ringoff_plr", "outdoor" ); + declareambientroom( "nightclub_gift_shop_md" ); + setambientroomreverb( "nightclub_gift_shop_md", "nightclub_medium_room", 1, 1 ); + setambientroomcontext( "nightclub_gift_shop_md", "ringoff_plr", "indoor" ); + declareambientroom( "nightclub_gift_shop_md_prt" ); + setambientroomreverb( "nightclub_gift_shop_md_prt", "nightclub_medium_room", 1, 1 ); + setambientroomcontext( "nightclub_gift_shop_md_prt", "ringoff_plr", "outdoor" ); + declareambientroom( "nightclub_wood_room" ); + setambientroomreverb( "nightclub_wood_room", "nightclub_small_room", 1, 1 ); + setambientroomcontext( "nightclub_wood_room", "ringoff_plr", "indoor" ); + declareambientroom( "nightclub_maint_rm" ); + setambientroomreverb( "nightclub_maint_rm", "nightclub_stone_room", 1, 1 ); + setambientroomcontext( "nightclub_maint_rm", "ringoff_plr", "indoor" ); + declareambientroom( "nightclub_maint_rm_prt" ); + setambientroomreverb( "nightclub_maint_rm_prt", "nightclub_stone_room", 1, 1 ); + setambientroomcontext( "nightclub_maint_rm_prt", "ringoff_plr", "outdoor" ); + declareambientroom( "nightclub_club_hallway" ); + setambientroomreverb( "nightclub_club_hallway", "nightclub_dense_hallway", 1, 1 ); + setambientroomcontext( "nightclub_club_hallway", "ringoff_plr", "indoor" ); + declareambientroom( "nightclub_club_lobby" ); + setambientroomreverb( "nightclub_club_lobby", "nightclub_small_room", 1, 1 ); + setambientroomcontext( "nightclub_club_lobby", "ringoff_plr", "indoor" ); + declareambientroom( "nightclub_club_lobby_prt" ); + setambientroomreverb( "nightclub_club_lobby_prt", "nightclub_small_room", 1, 1 ); + setambientroomcontext( "nightclub_club_lobby_prt", "ringoff_plr", "outdoor" ); + declareambientroom( "nightclub_bar" ); + setambientroomreverb( "nightclub_bar", "nightclub_large_room", 1, 1 ); + setambientroomcontext( "nightclub_bar", "ringoff_plr", "indoor" ); + declareambientroom( "nightclub_stairs" ); + setambientroomreverb( "nightclub_stairs", "nightclub_stone_room", 1, 1 ); + setambientroomcontext( "nightclub_stairs", "ringoff_plr", "indoor" ); + declareambientroom( "nightclub_stairs_prt" ); + setambientroomreverb( "nightclub_stairs_prt", "nightclub_stone_room", 1, 1 ); + setambientroomcontext( "nightclub_stairs_prt", "ringoff_plr", "outdoor" ); + declareambientroom( "nightclub_coffee_shop" ); + setambientroomreverb( "nightclub_coffee_shop", "nightclub_small_room", 1, 1 ); + setambientroomcontext( "nightclub_coffee_shop", "ringoff_plr", "indoor" ); + declareambientroom( "nightclub_medium_room" ); + setambientroomreverb( "nightclub_medium_room", "nightclub_medium_room", 1, 1 ); + setambientroomcontext( "nightclub_medium_room", "ringoff_plr", "indoor" ); + declareambientroom( "nightclub_large_room" ); + setambientroomreverb( "nightclub_large_room", "nightclub_large_room", 1, 1 ); + setambientroomcontext( "nightclub_large_room", "ringoff_plr", "indoor" ); + declareambientroom( "nightclub_open_room" ); + setambientroomreverb( "nightclub_open_room", "nightclub_open_room", 1, 1 ); + setambientroomcontext( "nightclub_open_room", "ringoff_plr", "indoor" ); + declareambientroom( "nightclub_dense_hallway" ); + setambientroomreverb( "nightclub_dense_hallway", "nightclub_dense_hallway", 1, 1 ); + setambientroomcontext( "nightclub_dense_hallway", "ringoff_plr", "indoor" ); + declareambientroom( "nightclub_stone_room" ); + setambientroomreverb( "nightclub_stone_room", "nightclub_stone_room", 1, 1 ); + setambientroomcontext( "nightclub_stone_room", "ringoff_plr", "indoor" ); + declareambientroom( "nightclub_container" ); + setambientroomreverb( "nightclub_container", "nightclub_container", 1, 1 ); + setambientroomcontext( "nightclub_container", "ringoff_plr", "indoor" ); + thread snd_start_autofnightclub_audio(); + thread snd_play_loopers(); + thread snd_start_club_music(); +} + +snd_play_loopers() +{ + playloopat( "amb_rope_swing", ( -16077, 2513, 25 ) ); + playloopat( "amb_rope_swing", ( -16476, 2469, -6 ) ); + playloopat( "amb_rope_swing", ( -16911, 2539, 33 ) ); + playloopat( "amb_rope_swing", ( -17079, 2826, 42 ) ); + playloopat( "amb_rope_swing", ( -17507, 2573, 76 ) ); + playloopat( "vox_ads_1_01_003a_pa", ( -18485, 2094, -84 ) ); + playloopat( "vox_ads_1_01_003a_pa", ( -16887, 2830, -132 ) ); + playloopat( "vox_ads_1_01_003a_pa", ( -16716, 3155, -133 ) ); +} + +snd_start_autofnightclub_audio() +{ + snd_play_auto_fx( "fx_nightclub_bar_light", "amb_bar_lights", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_village_tube_light", "amb_flourescent_light", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_nightclub_tank_bubbles", "amb_aquarium", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_nightclub_flr_glare", "amb_floor_lights", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_nightclub_flood_light", "amb_flood_lights", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_nightclub_fire", "amb_fire", 0, 0, 0, 0 ); +} + +snd_start_club_music() +{ + if ( getgametypesetting( "allowMapScripting" ) ) + playloopat( "amb_nightclub_music", ( -16604, 1089, 98 ) ); +} diff --git a/MP/Maps/Plaza/clientscripts/mp/mp_nightclub_fx.csc b/MP/Maps/Plaza/clientscripts/mp/mp_nightclub_fx.csc new file mode 100644 index 0000000..59cd829 --- /dev/null +++ b/MP/Maps/Plaza/clientscripts/mp/mp_nightclub_fx.csc @@ -0,0 +1,82 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\createfx\mp_nightclub_fx; +#include clientscripts\mp\_fx; + +precache_util_fx() +{ + +} + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_light_laser_blue_fxanim"] = loadfx( "maps/mp_maps/fx_mp_light_laser_blue_fxanim" ); + level._effect["fx_mp_nightclub_tank_bubbles"] = loadfx( "maps/mp_maps/fx_mp_nightclub_tank_bubbles" ); + level._effect["fx_mp_nightclub_fire"] = loadfx( "maps/mp_maps/fx_mp_nightclub_fire" ); + level._effect["fx_insects_mp_firefly"] = loadfx( "bio/insects/fx_insects_mp_firefly" ); + level._effect["fx_mp_nightclub_laser_roller"] = loadfx( "maps/mp_maps/fx_mp_nightclub_laser_roller" ); + level._effect["fx_mp_nightclub_laser_disco"] = loadfx( "maps/mp_maps/fx_mp_nightclub_laser_disco" ); + level._effect["fx_mp_light_laser_blue_static"] = loadfx( "maps/mp_maps/fx_mp_light_laser_blue_static" ); + level._effect["fx_mp_nightclub_vista_spotlight01"] = loadfx( "maps/mp_maps/fx_mp_nightclub_vista_spotlight01" ); + level._effect["fx_mp_nightclub_vista_spotlight02"] = loadfx( "maps/mp_maps/fx_mp_nightclub_vista_spotlight02" ); + level._effect["fx_mp_nightclub_red_flash"] = loadfx( "maps/mp_maps/fx_mp_nightclub_red_flash" ); + level._effect["fx_nightclub_bar_light"] = loadfx( "light/fx_nightclub_bar_light" ); + level._effect["fx_village_tube_light"] = loadfx( "light/fx_village_tube_light" ); + level._effect["fx_mp_nightclub_cyl_glare"] = loadfx( "maps/mp_maps/fx_mp_nightclub_cyl_glare" ); + level._effect["fx_mp_nightclub_cyl_glare02"] = loadfx( "maps/mp_maps/fx_mp_nightclub_cyl_glare02" ); + level._effect["fx_mp_nightclub_cyl_glare03"] = loadfx( "maps/mp_maps/fx_mp_nightclub_cyl_glare03" ); + level._effect["fx_mp_nightclub_cyl_glare04"] = loadfx( "maps/mp_maps/fx_mp_nightclub_cyl_glare04" ); + level._effect["fx_mp_nightclub_cyl_glare05"] = loadfx( "maps/mp_maps/fx_mp_nightclub_cyl_glare05" ); + level._effect["fx_mp_nightclub_flr_glare"] = loadfx( "maps/mp_maps/fx_mp_nightclub_flr_glare" ); + level._effect["fx_mp_nightclub_flr_glare_cool"] = loadfx( "maps/mp_maps/fx_mp_nightclub_flr_glare_cool" ); + level._effect["fx_mp_nightclub_flr_glare_warm"] = loadfx( "maps/mp_maps/fx_mp_nightclub_flr_glare_warm" ); + level._effect["fx_mp_nightclub_flr_glare_sm"] = loadfx( "maps/mp_maps/fx_mp_nightclub_flr_glare_sm" ); + level._effect["fx_mp_nightclub_flr_glare02"] = loadfx( "maps/mp_maps/fx_mp_nightclub_flr_glare02" ); + level._effect["fx_mp_nightclub_sph_glare01"] = loadfx( "maps/mp_maps/fx_mp_nightclub_sph_glare01" ); + level._effect["fx_mp_nightclub_flood_light"] = loadfx( "maps/mp_maps/fx_mp_nightclub_flood_light" ); + level._effect["fx_mp_nightclub_fireworks_runner"] = loadfx( "maps/mp_maps/fx_mp_nightclub_fireworks_runner" ); + level._effect["fx_mp_nightclub_fireworks_runner_02"] = loadfx( "maps/mp_maps/fx_mp_nightclub_fireworks_runner_02" ); + level._effect["fx_mp_nightclub_mist"] = loadfx( "maps/mp_maps/fx_mp_nightclub_mist" ); + level._effect["fx_mp_nightclub_mist_sm"] = loadfx( "maps/mp_maps/fx_mp_nightclub_mist_sm" ); + level._effect["fx_mp_nightclub_vista_fog"] = loadfx( "maps/mp_maps/fx_mp_nightclub_vista_fog" ); + level._effect["fx_mp_nightclub_area_fog"] = loadfx( "maps/mp_maps/fx_mp_nightclub_area_fog" ); + level._effect["fx_mp_nightclub_club_ring_smk"] = loadfx( "maps/mp_maps/fx_mp_nightclub_club_ring_smk" ); + level._effect["fx_lf_mp_nightclub_sun1"] = loadfx( "lens_flares/fx_lf_mp_nightclub_sun1" ); + level._effect["fx_lf_mp_nightclub_moon"] = loadfx( "lens_flares/fx_lf_mp_nightclub_moon" ); + level._effect["fx_mp_nightclub_spotlight"] = loadfx( "maps/mp_maps/fx_mp_nightclub_spotlight" ); + level._effect["fx_mp_light_laser_blue_fxanim"] = loadfx( "maps/mp_maps/fx_mp_light_laser_blue_fxanim" ); +} + +main() +{ + clientscripts\mp\createfx\mp_nightclub_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_util_fx(); + precache_createfx_fx(); + precache_fxanim_props(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["shopping_lights_short"] = %fxanim_gp_shopping_lights_short_anim; + level.scr_anim["fxanim_props"]["shopping_lights_long"] = %fxanim_gp_shopping_lights_long_anim; + level.scr_anim["fxanim_props"]["skylight"] = %fxanim_gp_skylight_anim; + level.scr_anim["fxanim_props"]["seagull_circle_01"] = %fxanim_gp_seagull_circle_01_anim; + level.scr_anim["fxanim_props"]["seagull_circle_02"] = %fxanim_gp_seagull_circle_02_anim; + level.scr_anim["fxanim_props"]["seagull_circle_03"] = %fxanim_gp_seagull_circle_03_anim; + level.scr_anim["fxanim_props"]["roofvent"] = %fxanim_gp_roofvent_anim; + level.scr_anim["fxanim_props"]["solar_system"] = %fxanim_karma_solar_system_anim; +} diff --git a/MP/Maps/Plaza/maps/mp/createart/mp_nightclub_art.gsc b/MP/Maps/Plaza/maps/mp/createart/mp_nightclub_art.gsc new file mode 100644 index 0000000..56783cd --- /dev/null +++ b/MP/Maps/Plaza/maps/mp/createart/mp_nightclub_art.gsc @@ -0,0 +1,20 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + level.tweakfile = 1; + setdvar( "visionstore_glowTweakEnable", "0" ); + setdvar( "visionstore_glowTweakRadius0", "5" ); + setdvar( "visionstore_glowTweakRadius1", "" ); + setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); + setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); + setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); + setdvar( "visionstore_glowTweakBloomIntensity1", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); + visionsetnaked( "mp_nightclub", 1 ); + setdvar( "r_lightGridEnableTweaks", 1 ); + setdvar( "r_lightGridIntensity", 1.4 ); + setdvar( "r_lightGridContrast", 0 ); +} diff --git a/MP/Maps/Plaza/maps/mp/createfx/mp_nightclub_fx.gsc b/MP/Maps/Plaza/maps/mp/createfx/mp_nightclub_fx.gsc new file mode 100644 index 0000000..8536e97 --- /dev/null +++ b/MP/Maps/Plaza/maps/mp/createfx/mp_nightclub_fx.gsc @@ -0,0 +1,2762 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_mist" ); + ent.v["origin"] = ( -16947.6, 1036.3, 89.6801 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 227.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); + ent.v["origin"] = ( -17262.3, 1779.14, -38 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 313.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); + ent.v["origin"] = ( -16883.4, 871.543, -52 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 62.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); + ent.v["origin"] = ( -16262.8, 1545.59, -54.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 97.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); + ent.v["origin"] = ( -16319.4, 1314.85, -88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 187.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); + ent.v["origin"] = ( -17523.1, 502.205, -94.25 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 245.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_laser_blue_static" ); + ent.v["origin"] = ( -17162.9, 986.408, 35.3084 ); + ent.v["angles"] = ( 25.3967, 238.24, -12.2032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_laser_blue_static" ); + ent.v["origin"] = ( -16577.3, 1511.27, 53 ); + ent.v["angles"] = ( 32, 266, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_vista_fog" ); + ent.v["origin"] = ( -21294.7, 1734.81, -22.118 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_vista_fog" ); + ent.v["origin"] = ( -19943.4, 4984.73, -110.446 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 310.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_vista_fog" ); + ent.v["origin"] = ( -16010.3, 5875.07, -119.96 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 263.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -19077, 2023.36, 18.8227 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -18865.1, 2204.92, -20.3623 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -17797, 3449.98, -2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -17547.5, 3567.87, -29.7848 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -16962.7, 3358.8, -185.957 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -16854, 3636.33, -181.583 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -15367.2, 3106.44, -119.687 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -17299.4, 3195.65, -178.935 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); + ent.v["origin"] = ( -17160.3, 846.72, -65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 266.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_laser_blue_static" ); + ent.v["origin"] = ( -16526, 1526.26, 53 ); + ent.v["angles"] = ( 44, 315, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_laser_blue_static" ); + ent.v["origin"] = ( -16627, 1531.34, 54 ); + ent.v["angles"] = ( 34, 240, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_laser_blue_static" ); + ent.v["origin"] = ( -17037.7, 1126.07, 51.6667 ); + ent.v["angles"] = ( 44, 53, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_laser_blue_static" ); + ent.v["origin"] = ( -17028.7, 1025.4, 52.6667 ); + ent.v["angles"] = ( 34, 338, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_laser_blue_static" ); + ent.v["origin"] = ( -17015.8, 1077.37, 51.6667 ); + ent.v["angles"] = ( 32, 4, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -17399.1, 1913.95, -22 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -17474.5, 1900.59, -11 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -19005, 1418.12, -156.044 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18907, 1889.69, -155.089 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -19257.7, 580.886, -156 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18673.7, 175.113, -156 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18331.2, -393.151, -151 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18274.1, 518.358, -164 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -17992.6, 1052.65, -140.458 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18056.3, 1630.21, -136.444 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -17108.9, 2558.04, -144.433 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -16485.7, 2532.69, -146.685 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -16006.1, 2782.28, -150 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -17089.2, 3147.85, -137.72 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -16806.4, 3707.12, -110 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -17306.5, 3610.04, -118.32 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -16153, 3797.9, -154 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -15763.7, 3285.28, -147 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -15222.1, 3282.63, -141 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -15201.5, 2894.57, -162 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -17829.2, 2100.57, -39 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); + ent.v["origin"] = ( -16151.7, 1914.14, -106 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 16.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); + ent.v["origin"] = ( -15879.9, 1996.82, -113 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -16215, 2394.37, -147 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -15608, 3021.46, -153 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -15954, 3648.28, -114.376 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -17574.9, 3233.16, -104.62 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18140.8, 3260.51, -98 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18695.5, 3002.41, -88 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18808.1, 2487, -125 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18614.3, 2168.01, -108 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18599.6, 1549.89, -138 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -19307.3, 1118.48, -156 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18903.4, 388.731, -156 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18793.9, -371.33, -147 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -17439.2, 2223.27, -43 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -16877.8, 2751.34, -142.832 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -17393.1, 3738.54, -83 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -18667, 588.432, -135.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -18827.2, 1051.51, -136.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 315.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -18512.2, 2292.24, -78.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 20.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -17800.7, 2949.98, -77.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 223.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_vista_fog" ); + ent.v["origin"] = ( -21481.1, -1457.28, -14.7847 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 39.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_vista_spotlight01" ); + ent.v["origin"] = ( -22297.8, 10396.7, -305.651 ); + ent.v["angles"] = ( 287.114, 217.488, -83.1891 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_vista_spotlight02" ); + ent.v["origin"] = ( -29544.2, 8247.57, -22.902 ); + ent.v["angles"] = ( 270, 0, 62 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_vista_spotlight02" ); + ent.v["origin"] = ( -12042.3, -2031.22, 334.424 ); + ent.v["angles"] = ( 270, 0, 62 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_red_flash" ); + ent.v["origin"] = ( -34125.3, 10603.4, 9766.02 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_red_flash" ); + ent.v["origin"] = ( -8502.25, -5002.56, 9745.09 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_tank_bubbles" ); + ent.v["origin"] = ( -17960.6, 263.018, -109.182 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_tank_bubbles" ); + ent.v["origin"] = ( -18026.1, 214.757, -112.281 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_tank_bubbles" ); + ent.v["origin"] = ( -18004.3, 182.681, -113.41 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_tank_bubbles" ); + ent.v["origin"] = ( -17936.5, 245.174, -114.934 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -18758.3, 1832.34, -164.052 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -19191.4, 1905.53, -96.4394 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -19136.8, 1329.54, -179.032 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -18546.8, -52.4395, -152.106 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -18820.8, -1085.93, -355.127 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -18586.9, -1347.54, -357.228 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_nightclub_bar_light" ); + ent.v["origin"] = ( -15549.5, 2381.68, -12.9216 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_nightclub_bar_light" ); + ent.v["origin"] = ( -15583.3, 2321.16, -12.6912 ); + ent.v["angles"] = ( 88, 87, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_nightclub_bar_light" ); + ent.v["origin"] = ( -15535.5, 2443.75, -17.2216 ); + ent.v["angles"] = ( 90, 0, 3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_nightclub_bar_light" ); + ent.v["origin"] = ( -15627.9, 2275.31, -12.4283 ); + ent.v["angles"] = ( 90, 12.1698, 16.1698 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_nightclub_bar_light" ); + ent.v["origin"] = ( -15686.3, 2236.1, -14.7572 ); + ent.v["angles"] = ( 90, 0, 3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -15538.2, 2524.28, -59.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 242.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -15737.3, 2651.26, -86 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 242.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18028.9, 225.724, -82.7716 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_tank_bubbles" ); + ent.v["origin"] = ( -18007.1, 229.824, -117.014 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -18683, 914.973, -2.875 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); + ent.v["origin"] = ( -16424.5, 3186.35, -30.875 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -18615.2, -184.097, -151.801 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_fireworks_runner" ); + ent.v["origin"] = ( -32592.4, 3269.81, 4907.84 ); + ent.v["angles"] = ( 293.048, 249.116, 168.917 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_fireworks_runner" ); + ent.v["origin"] = ( -25786.4, 13211.2, 4123.72 ); + ent.v["angles"] = ( 289.651, 26.3177, -112.438 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_vista_spotlight01" ); + ent.v["origin"] = ( -28164.3, 1257.98, -303.876 ); + ent.v["angles"] = ( 297.184, 248.043, -54.6899 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( -15286.9, 2476.05, -22.34 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( -15333.9, 2303.12, -21.3415 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( -15286.3, 2131.5, -21.337 ); + ent.v["angles"] = ( 90, 3.96799, -176.032 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( -15407.4, 2014.32, -21.3334 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( -15640.6, 2010.58, -21.3374 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_fireworks_runner_02" ); + ent.v["origin"] = ( -22292.4, 10417.8, -311.375 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_fireworks_runner_02" ); + ent.v["origin"] = ( -28227.9, 1247.11, -311.375 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_nightclub_sun1" ); + ent.v["origin"] = ( 117342, 198059, 132299 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18539.1, 1430.9, 6.96914 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18631.4, 1346.95, 7.64295 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18632.5, 1197.5, 7.04885 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18699.9, 1142.45, 6.41418 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -19156.5, 1967.21, -59.0252 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18809.9, 2190.39, -60.1828 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -18986.8, 2014.05, -135.861 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -19206.6, 1983.36, -110.516 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -19278.6, 1861.33, -111.037 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -19123.5, 2021.03, 18.4326 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -18883.9, 2220.76, 19 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -18528, 1709.57, -110.651 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -18586.5, 1929.8, -110.117 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18883.1, 1142.5, 4.85368 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -19118.2, 1142.5, 6.36984 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -19205.5, 1044.12, 6.59046 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -19205.5, 861.448, 6.57288 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -19103.4, 709.899, 6.79024 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18817, 611.713, 6.28608 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18685.1, 503.253, 6.46426 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18755.2, 2488.95, -23.1875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18616.8, 2627.33, -23.5142 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18590.2, 2954.62, -22.9736 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18456.8, 3088.54, -22.519 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18127.7, 3115.15, -23.8596 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17990.7, 3253.95, -22.2686 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -16930.7, 3061.88, 6.85486 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -16770.5, 3128.49, 6.77435 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -16644.5, 3285.5, 6.43802 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -16643.5, 3610.15, 7.80851 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -16565.9, 3702.26, 6.1482 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -16361.6, 3702.37, 6.44853 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -16214.7, 3603.04, 7.2351 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -16118.6, 3318.27, 6.87422 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17690.1, 3308.49, -61.21 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17527.2, 3726.89, -60.1496 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17323.1, 3819.52, -68.7982 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -17513, 3489.78, -134.842 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -17186.8, 3821.95, -157.874 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -16647, 3619.2, -157.85 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -15513.8, 2867.51, -56.7778 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -15650.7, 2869.7, -55.8548 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -15778.4, 2867.69, -55.9985 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -15821.7, 2769.45, -55.8483 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -15875.1, 2654.94, -56.0558 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -15947.9, 2554, -55.821 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -16043.3, 2466.53, -56.055 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -15484.6, 2840.4, -55.8791 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -16025.4, 2234.5, -40.1548 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -15725.7, 2234.76, -39.4667 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -15553.6, 2649.15, -40.1164 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18091.8, 784.759, 5.92132 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17114.4, 2869.88, -62.0578 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -16942.4, 2837.63, 5.42827 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -17433.3, 3083.36, -110.897 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -17212.4, 3024.81, -110.851 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_fire" ); + ent.v["origin"] = ( -15783.2, 2417.59, -104.645 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 68.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17201.9, 2952.87, -41.0503 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_club_ring_smk" ); + ent.v["origin"] = ( -16617.9, 1115.89, 296 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18121.5, -256.709, -91.4095 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17808.4, -256.952, -92.8995 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17641, -25.4045, -35.4541 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17641.9, 141.276, -35.4757 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -17585.9, 2186.94, 7.467 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -17599.2, 2088.22, 5.46751 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -17692.5, 2086.3, 5.442 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare03" ); + ent.v["origin"] = ( -17942.9, 2165.33, 14.1474 ); + ent.v["angles"] = ( 270, 0, -44 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare03" ); + ent.v["origin"] = ( -17670, 2436.79, 14.8706 ); + ent.v["angles"] = ( 270, 0, -44 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare04" ); + ent.v["origin"] = ( -18101.7, 398.803, -61.7354 ); + ent.v["angles"] = ( 270, 3.57633, 118.424 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare04" ); + ent.v["origin"] = ( -18348.7, 290.444, -61.8678 ); + ent.v["angles"] = ( 271, 175, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare04" ); + ent.v["origin"] = ( -17803.2, 604.815, -61.3059 ); + ent.v["angles"] = ( 271, 175, -84 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare04" ); + ent.v["origin"] = ( -18362.3, 275.207, -61.8617 ); + ent.v["angles"] = ( 271, 175, 5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare04" ); + ent.v["origin"] = ( -18362.3, 7.89001, -61.8155 ); + ent.v["angles"] = ( 271, 175, 5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare04" ); + ent.v["origin"] = ( -18344.4, -10.2493, -61.4767 ); + ent.v["angles"] = ( 271, 175, 98 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare04" ); + ent.v["origin"] = ( -18199, -10.233, -60.4744 ); + ent.v["angles"] = ( 271, 175, 98 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -19258, 1806.65, -76.0612 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -19331.7, 1678.53, -76.2787 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_fire" ); + ent.v["origin"] = ( -15758.2, 2478.69, -104.643 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 250.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_fire" ); + ent.v["origin"] = ( -15690.3, 2547.99, -104.642 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 222.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_fire" ); + ent.v["origin"] = ( -15741.1, 2505.77, -104.644 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 40.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_fire" ); + ent.v["origin"] = ( -15671.1, 2536.86, -104.638 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 250.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_fire" ); + ent.v["origin"] = ( -15696, 2475.76, -104.64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 68.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_fire" ); + ent.v["origin"] = ( -15714.5, 2450.5, -104.646 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 222.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_fire" ); + ent.v["origin"] = ( -15765.2, 2408.27, -104.648 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 40.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16979.6, 3837.11, -192 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16833.1, 3849.84, -192 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16671, 3860.11, -192 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16524.5, 3870.21, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16373, 3881.74, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16215.6, 3886.85, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16067.6, 3888.5, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15921.3, 3890.71, -192 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15785.7, 3494.92, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15682.1, 3494.8, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15577.6, 3495.38, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15474.9, 3495.77, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15330.3, 3495.16, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15225.9, 3494.86, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -14998, 3450.57, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -14918.8, 3374.3, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -14867.1, 3272.31, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -14867.3, 2905.73, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -14918, 2803.93, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -14998.2, 2728.26, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15943.1, 3543.59, -191.007 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16088, 3546.58, -191.013 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16233.2, 2732.54, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16333.1, 2762.77, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16433, 2792.22, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16532.1, 2822.37, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16631.6, 2851.58, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18692.6, -224.822, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19398.7, 490.279, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19394.3, 633.836, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19384.9, 945.683, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19372.3, 1091.78, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19351.2, 1405.56, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19339.3, 1551.15, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19178.5, 1374.07, -189.292 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19027.2, 1419.26, -190.248 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18848.1, 1404.12, -191.938 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18940.5, 1495.18, -189.407 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19233.1, 1585.31, -191.2 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19080, 1707.21, -190.564 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19104.4, 1853.98, -189.149 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18956.7, 1912.3, -176.854 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18879.1, 2049.5, -161.058 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18733.3, 2099.4, -148.18 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18804.7, 1919.73, -167.606 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18770.9, 1797.74, -178.863 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18674.7, 1723.43, -187.592 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18567.7, 1633.69, -192.182 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18678.1, 1596.16, -191.125 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18381.1, 605.766, -75.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18196.9, 688.089, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18173.4, 789.474, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18252.4, 888.003, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18329.6, 1130.58, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18328.7, 1259.24, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18329.2, 1369.39, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17695.3, 1789.71, 73.2575 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17695.5, 1911.71, 73.2585 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17697.4, 2018.45, 73.2498 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17525.4, 2189.46, 73.2493 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17403.8, 2190.28, 73.2591 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17297.8, 2191.66, 73.254 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16470, 3430.39, -82.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16531.9, 3430.77, -82.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16594.2, 3431.09, -82.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16345.3, 2816.02, -80.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16411.4, 2834.39, -80.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16514.4, 2863.42, -80.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16578, 2884.56, -80.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16860, 2818.45, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16715.5, 2818.2, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16560.5, 2818.03, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16381.2, 2745.94, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16308.8, 2653.26, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16181.3, 2699.06, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16105.7, 2885.53, -72.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17431.8, 1865.1, 32 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17398.1, 1832.64, 32 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17337.1, 1893.98, 32 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17370, 1928.38, 32 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17176.6, 1848.56, 110 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17302.5, 1798.91, 110 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17353, 1673.46, 112 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17302.7, 1549.67, 111 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17178.7, 1497.54, 111 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17053.7, 1551.36, 110 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16997.8, 1678.95, 110 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17053.2, 1798.37, 111 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17911.5, 2248.04, 16.4376 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17877.2, 2281.76, 16.4387 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17844.2, 2315.4, 16.4343 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17809.2, 2350.37, 16.4386 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17775.4, 2385.19, 16.4386 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17741.1, 2418.92, 16.4406 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18173.8, 2592.38, -2 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18135.3, 2630.18, -2 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18096.6, 2668, -2 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17910.4, 2627.62, 47.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17834.1, 2703.35, 47.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17757.9, 2780.26, 47.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17682.3, 2857.09, 47.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18131.8, 2433.14, 47.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18312, 842.426, -80.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18332, 911.121, -80.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18197.1, 1960.08, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18175.7, 1991.31, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18157.3, 2022.63, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18131.3, 2048.88, 45.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18106.4, 2073.47, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18080.5, 2099.79, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18055.1, 2125.06, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18023.9, 2145.04, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17992.4, 2164.96, 47.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17666.4, 2490.59, 47.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17646.5, 2521.89, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17626.6, 2553.5, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17601.1, 2578.74, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17575.9, 2604.1, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17550.4, 2629.21, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17524.4, 2655.89, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17493.4, 2675.55, 46.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17462.2, 2694.79, 47.875 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16321.8, 954.617, 39.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16458.3, 816.316, 39.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16319.8, 677.462, 40.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16182.4, 815.312, 39.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_cool" ); + ent.v["origin"] = ( -17272.3, 855.064, 31 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_cool" ); + ent.v["origin"] = ( -17201.4, 815.615, 31 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_cool" ); + ent.v["origin"] = ( -17130.4, 798.371, 31 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_cool" ); + ent.v["origin"] = ( -17066.7, 802.249, 30 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_cool" ); + ent.v["origin"] = ( -16993.5, 833.443, 30 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16356.4, 1766.76, 31 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16322.1, 1705.53, 31 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16304.5, 1635.05, 30 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16307.5, 1558.84, 30 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16337.4, 1489.52, 30 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16186.6, 1875.69, 39.2978 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -16063.2, 1823.98, 38.295 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15956.6, 1810.64, 37.3021 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15855.5, 1852.9, 38.304 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15775.7, 1929.53, 37.2979 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15867.5, 2072.97, 37.3007 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15999.5, 1940.69, 38.298 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15930.9, 2010.16, 38.2959 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15493.8, 2512.82, 31.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15493.9, 2450.18, 31.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15511.5, 2391.6, 31.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15537.1, 2331.58, 31.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15579.2, 2284.38, 30.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15633.7, 2241.27, 31.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); + ent.v["origin"] = ( -15689.6, 2209.53, 31.875 ); + ent.v["angles"] = ( 88.5859, 314.991, 135.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -18154.9, 2467.98, 8.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 226.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -17972.9, 2650.11, 8.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 226.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15718.2, 3570.62, -39.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15717.8, 3698.52, -38.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15718.3, 3826.68, -39.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15591.9, 3570.6, -39.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15461.4, 3569.99, -39.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15590.1, 3698.49, -39.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15589.3, 3826.24, -39.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15461.4, 3826.43, -39.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15461.6, 3698.44, -39.125 ); + ent.v["angles"] = ( 89, 0, -179.992 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -15625.2, 2040.68, -95 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -15311.7, 2580.88, -108 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -17726, -174.557, -117.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -17524.4, 208.04, -84.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flood_light" ); + ent.v["origin"] = ( -19360.7, -88.6989, -98.9068 ); + ent.v["angles"] = ( 37.6805, 45.4659, -92.9504 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flood_light" ); + ent.v["origin"] = ( -19345.3, -101.805, -100.665 ); + ent.v["angles"] = ( 33.7943, 34.7068, 68.3069 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flood_light" ); + ent.v["origin"] = ( -19340.6, -96.5053, -77.6845 ); + ent.v["angles"] = ( 16.7776, 48.6563, -79.8364 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -18103.3, -173.657, -17.3201 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -17943.4, -173.271, -15.3252 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -17697.5, -174.193, -17.3258 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -17553.7, -97.1301, -17.3229 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -17549.9, -16.4068, -17.3227 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -17551, 144.281, -17.3241 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -17861.8, -173.744, -17.3317 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16436.6, 1321.9, 248.251 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16551.1, 1376.36, 249 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16676, 1341.99, 249 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16768.1, 1275.34, 249 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16834.4, 1183.19, 249 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16868.2, 1058.45, 249 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16821.4, 923.479, 248.252 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16692.2, 884.987, 249 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16567.4, 917.162, 249 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16475.5, 984.51, 249 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16409.6, 1076.31, 249 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16376, 1200.89, 249 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16206.1, 1031.8, 199 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16272.9, 996.463, 199 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16349.6, 947.451, 199 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16413, 897.28, 199 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16461, 832.284, 199 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16499.4, 770.442, 199 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16535.3, 703.829, 199 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -19307.3, -52.3023, -140.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 47.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_laser_blue_static" ); + ent.v["origin"] = ( -17133.4, 983.978, 36.7995 ); + ent.v["angles"] = ( 36.1065, 291.347, -7.10015 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18116.8, 2879.16, -1.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18090.7, 2905.58, -1.53871 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18064.9, 2930.82, -1.7265 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -17955.7, 3039.98, -0.87473 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -17982.2, 3015.41, -0.68694 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18006.9, 2989.02, -0.27324 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18065.8, 2930.99, -40.3684 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18090.4, 2905.28, -40.1806 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18115.5, 2879.17, -40.7669 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18008.7, 2989.56, -39.1838 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -17981.8, 3015.13, -39.5975 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -17956.7, 3041.06, -38.7853 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18116.9, 2879.97, -78.3747 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18091.1, 2905.72, -78.7885 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18064.8, 2931.38, -78.9762 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18008.5, 2990.13, -78.412 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -17981.6, 3015.7, -78.8257 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -17956.5, 3041.63, -78.0135 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18004, 2390.3, 14.875 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18025.5, 2411.16, 14.875 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -17893.5, 2501.39, 14.875 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -17914.2, 2522, 14.875 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18028.3, 2318.98, -17.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18051.6, 2295.42, -17.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18077.1, 2269.84, -17.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18211.3, 2135.38, -17.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18234.5, 2112.4, -17.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18260.2, 2086.56, -17.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16450.9, 3347.7, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16451.4, 3288.39, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16592.9, 3217.93, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16529.7, 3217.22, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16417.3, 3176.47, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16352.8, 3176.63, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16290.4, 3176.92, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16228.5, 3176.94, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16162.6, 3176.67, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16465.8, 3103.25, -75.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16465.8, 3039.48, -75.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16417.6, 2968.56, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16353.9, 2968.77, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16225.7, 2968.13, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16161.9, 2968.67, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16118.2, 3039.32, -75.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16118.7, 3103.6, -75.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16290.1, 2968.49, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16226.6, 2826.92, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16289.6, 2844.91, -76.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16353.6, 2862.24, -75.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16417.4, 2882.58, -75.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -19003.7, 2415.18, -144 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18964.6, 2497.52, -144 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18802, 2659.61, -144 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18763.7, 2915.78, -144 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18720, 3050.94, -144 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18412, 3262, -144 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18150.8, 3314.24, -144 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17980.7, 3482.97, -144 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17918.5, 3500.77, -144 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18997.6, -275.912, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18998.4, -171.879, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18998.5, -379.943, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18953.3, -505.236, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18877.3, -584.013, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18775.7, -636.315, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18666, -659.119, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18517.3, -660.453, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18408.9, -636.482, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18306.2, -585.026, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18229.7, -505.354, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18190.1, -343.978, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18607, -219.183, -157 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18653, -217.389, -157 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18672.3, -151.646, -158 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16860, 638.489, 198.253 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16938.5, 718.482, 198.255 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -17018, 796.892, 198.259 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_laser_roller" ); + ent.v["origin"] = ( -16825.1, 1322.15, 197 ); + ent.v["angles"] = ( 54.952, 308.876, -4.48132 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_laser_disco" ); + ent.v["origin"] = ( -16228.6, 1318.6, 190.705 ); + ent.v["angles"] = ( 15.3541, 194.789, -1.1569 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_laser_disco" ); + ent.v["origin"] = ( -16825.1, 715.555, 192.716 ); + ent.v["angles"] = ( 17.2967, 70.4187, -0.791652 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -14562.1, 3170.65, -156.083 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -14561.8, 3007.41, -156.09 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -14736.8, 3007.53, -156.065 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); + ent.v["origin"] = ( -14737.3, 3171.15, -156.053 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18295.2, -752.789, -192 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16144, 1353.09, 198.254 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16224.3, 1431.04, 198.252 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); + ent.v["origin"] = ( -16304.1, 1510.57, 198.256 ); + ent.v["angles"] = ( 90, 2.69214, -177.308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16913.5, 3062.13, -193 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16911.8, 2956.81, -193 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18787.6, 581.452, -96.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18787.8, 604.217, -97.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18788.2, 628.634, -96.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18788.6, 644.919, -96.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18788.4, 668.32, -96.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18788, 692.106, -96.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18788.3, 708.776, -95.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18788.5, 732.598, -96.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18788.4, 756.3, -96.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_mp_firefly" ); + ent.v["origin"] = ( -19037.9, 1394.8, -195 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_nightclub_moon" ); + ent.v["origin"] = ( 200148, 316107, 208956 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17806, 1142.62, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17789.5, 1080.04, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17775.8, 1018.76, -190 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -17762.5, 954.757, -190 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18354.8, 1436.93, 6.34749 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18142, 926.503, 5.18384 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -19123.3, 2255.54, -48.9937 ); + ent.v["angles"] = ( 273.605, 236.287, 123.659 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17815, 3565.73, -60.9021 ); + ent.v["angles"] = ( 273.605, 236.287, 123.659 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -17666.8, 3714.34, -60.5045 ); + ent.v["angles"] = ( 273.605, 236.287, 123.659 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); + ent.v["origin"] = ( -18512.9, 1699.86, -70.6367 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -16094.7, 3697.1, -191.217 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -15938.8, 3696.11, -191.364 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); + ent.v["origin"] = ( -16673.3, 1321.25, -52 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 215.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -18248.1, 2149.78, -14.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 44.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); + ent.v["origin"] = ( -18114.1, 2288.51, -13.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 44.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -16095.4, 3050.53, -132.751 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 172.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -15386.6, 3708.2, -119.051 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -19210.6, 274.906, -136.981 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 265.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -16588, 3356.79, -146.875 ); + ent.v["angles"] = ( 0, 336, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -17740.5, 179.522, -7.65209 ); + ent.v["angles"] = ( 273, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -17765.7, 143.731, -8.43552 ); + ent.v["angles"] = ( 273, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -17795.8, 108.716, -7.52192 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -17835.1, 75.7021, -8.1626 ); + ent.v["angles"] = ( 273, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -17878.4, 51.7002, -7.48641 ); + ent.v["angles"] = ( 273, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); + ent.v["origin"] = ( -17921.9, 37.6316, -8.00315 ); + ent.v["angles"] = ( 273, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18693.6, -28.1875, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18503.2, -232.295, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18499.8, -35.2069, -190 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18535.4, -99.5975, -157 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( -18565.4, -57.538, -156 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -19049.8, 441.558, -190 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -19049.8, 581.598, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -19200.4, 578.639, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -19200.8, 441.334, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18748.3, 320.281, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18747.5, 259.329, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18659.2, 257.714, -190 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18659.1, 318.068, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18181.1, 1210.52, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18003.8, 1211.65, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18004.1, 1342.17, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18181, 1338.88, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16843, 2678.97, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16717.1, 2678.78, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16717.4, 2500.21, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -16844.5, 2500.12, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -15830.1, 3162.02, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -15829.7, 3237.58, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -15750.2, 3237.06, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -15749.7, 3162.65, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -15471.7, 3189.43, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -15472.5, 3000.2, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -15274, 3000.3, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -15274.5, 3190.49, -191 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18349.1, 666.265, -95.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18369.9, 654.226, -95.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18389.8, 641.23, -95.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18410.3, 628.778, -95.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18430, 615.24, -95.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18450.4, 602.715, -95.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18471.7, 589.625, -96.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18491.4, 576.86, -96.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); + ent.v["origin"] = ( -18512, 564.174, -96.125 ); + ent.v["angles"] = ( 90, 188.803, 8.80348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; +} diff --git a/MP/Maps/Plaza/maps/mp/mp_nightclub.gsc b/MP/Maps/Plaza/maps/mp/mp_nightclub.gsc new file mode 100644 index 0000000..f1e2821 --- /dev/null +++ b/MP/Maps/Plaza/maps/mp/mp_nightclub.gsc @@ -0,0 +1,32 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_nightclub_fx; +#include maps\mp\_load; +#include maps\mp\mp_nightclub_amb; +#include maps\mp\_compass; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_nightclub_fx::main(); + maps\mp\_load::main(); + maps\mp\mp_nightclub_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_nightclub" ); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2200", reset_dvars ); +} diff --git a/MP/Maps/Plaza/maps/mp/mp_nightclub_amb.gsc b/MP/Maps/Plaza/maps/mp/mp_nightclub_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Plaza/maps/mp/mp_nightclub_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Plaza/maps/mp/mp_nightclub_fx.gsc b/MP/Maps/Plaza/maps/mp/mp_nightclub_fx.gsc new file mode 100644 index 0000000..8c5773c --- /dev/null +++ b/MP/Maps/Plaza/maps/mp/mp_nightclub_fx.gsc @@ -0,0 +1,79 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_nightclub_fx; +#include maps\mp\createart\mp_nightclub_art; + +precache_util_fx() +{ + +} + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_light_laser_blue_fxanim"] = loadfx( "maps/mp_maps/fx_mp_light_laser_bluee_fxanim" ); + level._effect["fx_mp_nightclub_tank_bubbles"] = loadfx( "maps/mp_maps/fx_mp_nightclub_tank_bubbles" ); + level._effect["fx_mp_nightclub_fire"] = loadfx( "maps/mp_maps/fx_mp_nightclub_fire" ); + level._effect["fx_insects_mp_firefly"] = loadfx( "bio/insects/fx_insects_mp_firefly" ); + level._effect["fx_mp_nightclub_laser_roller"] = loadfx( "maps/mp_maps/fx_mp_nightclub_laser_roller" ); + level._effect["fx_mp_nightclub_laser_disco"] = loadfx( "maps/mp_maps/fx_mp_nightclub_laser_disco" ); + level._effect["fx_mp_light_laser_blue_static"] = loadfx( "maps/mp_maps/fx_mp_light_laser_blue_static" ); + level._effect["fx_mp_nightclub_vista_spotlight01"] = loadfx( "maps/mp_maps/fx_mp_nightclub_vista_spotlight01" ); + level._effect["fx_mp_nightclub_vista_spotlight02"] = loadfx( "maps/mp_maps/fx_mp_nightclub_vista_spotlight02" ); + level._effect["fx_mp_nightclub_red_flash"] = loadfx( "maps/mp_maps/fx_mp_nightclub_red_flash" ); + level._effect["fx_nightclub_bar_light"] = loadfx( "light/fx_nightclub_bar_light" ); + level._effect["fx_village_tube_light"] = loadfx( "light/fx_village_tube_light" ); + level._effect["fx_mp_nightclub_cyl_glare"] = loadfx( "maps/mp_maps/fx_mp_nightclub_cyl_glare" ); + level._effect["fx_mp_nightclub_cyl_glare02"] = loadfx( "maps/mp_maps/fx_mp_nightclub_cyl_glare02" ); + level._effect["fx_mp_nightclub_cyl_glare03"] = loadfx( "maps/mp_maps/fx_mp_nightclub_cyl_glare03" ); + level._effect["fx_mp_nightclub_cyl_glare04"] = loadfx( "maps/mp_maps/fx_mp_nightclub_cyl_glare04" ); + level._effect["fx_mp_nightclub_cyl_glare05"] = loadfx( "maps/mp_maps/fx_mp_nightclub_cyl_glare05" ); + level._effect["fx_mp_nightclub_flr_glare"] = loadfx( "maps/mp_maps/fx_mp_nightclub_flr_glare" ); + level._effect["fx_mp_nightclub_flr_glare_cool"] = loadfx( "maps/mp_maps/fx_mp_nightclub_flr_glare_cool" ); + level._effect["fx_mp_nightclub_flr_glare_warm"] = loadfx( "maps/mp_maps/fx_mp_nightclub_flr_glare_warm" ); + level._effect["fx_mp_nightclub_flr_glare_sm"] = loadfx( "maps/mp_maps/fx_mp_nightclub_flr_glare_sm" ); + level._effect["fx_mp_nightclub_flr_glare02"] = loadfx( "maps/mp_maps/fx_mp_nightclub_flr_glare02" ); + level._effect["fx_mp_nightclub_sph_glare01"] = loadfx( "maps/mp_maps/fx_mp_nightclub_sph_glare01" ); + level._effect["fx_mp_nightclub_flood_light"] = loadfx( "maps/mp_maps/fx_mp_nightclub_flood_light" ); + level._effect["fx_mp_nightclub_fireworks_runner"] = loadfx( "maps/mp_maps/fx_mp_nightclub_fireworks_runner" ); + level._effect["fx_mp_nightclub_fireworks_runner_02"] = loadfx( "maps/mp_maps/fx_mp_nightclub_fireworks_runner_02" ); + level._effect["fx_mp_nightclub_mist"] = loadfx( "maps/mp_maps/fx_mp_nightclub_mist" ); + level._effect["fx_mp_nightclub_mist_sm"] = loadfx( "maps/mp_maps/fx_mp_nightclub_mist_sm" ); + level._effect["fx_mp_nightclub_vista_fog"] = loadfx( "maps/mp_maps/fx_mp_nightclub_vista_fog" ); + level._effect["fx_mp_nightclub_area_fog"] = loadfx( "maps/mp_maps/fx_mp_nightclub_area_fog" ); + level._effect["fx_mp_nightclub_club_ring_smk"] = loadfx( "maps/mp_maps/fx_mp_nightclub_club_ring_smk" ); + level._effect["fx_lf_mp_nightclub_sun1"] = loadfx( "lens_flares/fx_lf_mp_nightclub_sun1" ); + level._effect["fx_lf_mp_nightclub_moon"] = loadfx( "lens_flares/fx_lf_mp_nightclub_moon" ); + level._effect["fx_mp_nightclub_spotlight"] = loadfx( "maps/mp_maps/fx_mp_nightclub_spotlight" ); + level._effect["fx_mp_light_laser_blue_fxanim"] = loadfx( "maps/mp_maps/fx_mp_light_laser_blue_fxanim" ); +} + +main() +{ + precache_fxanim_props(); + precache_util_fx(); + precache_createfx_fx(); + precache_scripted_fx(); + maps\mp\createfx\mp_nightclub_fx::main(); + maps\mp\createart\mp_nightclub_art::main(); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["shopping_lights_short"] = %fxanim_gp_shopping_lights_short_anim; + level.scr_anim["fxanim_props"]["shopping_lights_long"] = %fxanim_gp_shopping_lights_long_anim; + level.scr_anim["fxanim_props"]["skylight"] = %fxanim_gp_skylight_anim; + level.scr_anim["fxanim_props"]["seagull_circle_01"] = %fxanim_gp_seagull_circle_01_anim; + level.scr_anim["fxanim_props"]["seagull_circle_02"] = %fxanim_gp_seagull_circle_02_anim; + level.scr_anim["fxanim_props"]["seagull_circle_03"] = %fxanim_gp_seagull_circle_03_anim; + level.scr_anim["fxanim_props"]["roofvent"] = %fxanim_gp_roofvent_anim; + level.scr_anim["fxanim_props"]["solar_system"] = %fxanim_karma_solar_system_anim; +} diff --git a/MP/Maps/Pod/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Pod/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Pod/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Pod/aitype/enemy_dog_mp.gsc b/MP/Maps/Pod/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Pod/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Pod/character/character_mp_german_shepherd.gsc b/MP/Maps/Pod/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Pod/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Pod/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Pod/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Pod/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Pod/clientscripts/mp/_fxanim_dlc4.csc b/MP/Maps/Pod/clientscripts/mp/_fxanim_dlc4.csc new file mode 100644 index 0000000..4e385a4 --- /dev/null +++ b/MP/Maps/Pod/clientscripts/mp/_fxanim_dlc4.csc @@ -0,0 +1,239 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; + +fxanim_init_dlc( localclientnum ) +{ + a_fxanims = getentarray( localclientnum, "fxanim_dlc4", "targetname" ); + assert( a_fxanims.size <= level.fxanim_max_anims ); + + for ( i = 0; i < a_fxanims.size; i++ ) + { + if ( isdefined( a_fxanims[i].fxanim_parent ) ) + { + parent = getent( localclientnum, a_fxanims[i].fxanim_parent, "targetname" ); + a_fxanims[a_fxanims.size] = parent; + a_fxanims[i] thread _fxanim_model_link( localclientnum ); + continue; + } + + a_fxanims[i] thread fxanim_think( localclientnum ); + } + + if ( isdefined( level.fx_anim_level_dlc_init ) ) + level thread [[ level.fx_anim_level_dlc_init ]]( localclientnum ); +} + +#using_animtree("fxanim_props_dlc4"); + +fxanim_think( localclientnum, random_wait, random_speed ) +{ + self waittill_dobj( localclientnum ); + self thread _fxanim_hide(); + self _fxanim_wait(); + self useanimtree( #animtree ); + n_anim_count = self _fxanim_get_anim_count(); + self notify( "fxanim_start" ); + + for ( n_current_anim = 0; n_current_anim < n_anim_count; n_current_anim++ ) + { + str_scene = self _fxanim_get_scene_name( n_current_anim ); + + if ( !self _fxanim_modifier( str_scene ) ) + { + self _fxanim_animate( str_scene ); + self _fxanim_play_fx( localclientnum ); + } + + self _fxanim_change_anim( n_current_anim ); + } +} + +_fxanim_hide() +{ + if ( isdefined( self.fxanim_hide ) && self.fxanim_hide ) + { + self hide(); + + self waittill( "fxanim_start" ); + + self show(); + } +} + +_fxanim_modifier( str_scene ) +{ + switch ( str_scene ) + { + case "delete": + self delete(); + break; + case "hide": + self hide(); + break; + default: + return false; + break; + } + + return true; +} + +_fxanim_wait() +{ + if ( isdefined( self.fxanim_waittill_1 ) ) + { + if ( isdefined( self.fxanim_waittill_1 ) ) + _fxanim_change_anim( -1 ); + } + + if ( isdefined( self.fxanim_wait ) ) + wait( self.fxanim_wait ); + else if ( isdefined( self.fxanim_wait_min ) && isdefined( self.fxanim_wait_max ) ) + { + n_wait_time = randomfloatrange( self.fxanim_wait_min, self.fxanim_wait_max ); + wait( n_wait_time ); + } +} + +_fxanim_change_anim( n_fxanim_id ) +{ + str_waittill = undefined; + + if ( n_fxanim_id == -1 && isdefined( self.fxanim_waittill_1 ) ) + str_waittill = self.fxanim_waittill_1; + else if ( n_fxanim_id == 0 && isdefined( self.fxanim_waittill_2 ) ) + str_waittill = self.fxanim_waittill_2; + else if ( n_fxanim_id == 1 && isdefined( self.fxanim_waittill_3 ) ) + str_waittill = self.fxanim_waittill_3; + + if ( !isdefined( str_waittill ) && n_fxanim_id != -1 ) + self _fxanim_wait_for_anim_to_end( n_fxanim_id ); + else + { + a_changer = strtok( str_waittill, "_" ); + + level waittill( str_waittill ); + } +} + +_fxanim_wait_for_anim_to_end( n_fxanim_id ) +{ + str_scene = _fxanim_get_scene_name( n_fxanim_id ); + + if ( issubstr( str_scene, "_loop" ) ) + self waittillmatch( "looping anim", "end" ); + else + self waittillmatch( "single anim", "end" ); +} + +_fxanim_animate( str_scene ) +{ + if ( !isdefined( level.scr_anim["fxanim_props_dlc4"][str_scene] ) ) + { +/# + if ( isdefined( str_scene ) ) + println( "Error: fxanim entity at " + self.origin + " is missing animation: " + str_scene ); + else + println( "Error: fxanim entity at " + self.origin + " is missing animation" ); +#/ + return; + } + + self animscripted( level.scr_anim["fxanim_props_dlc4"][str_scene], 1.0, 0.0, 1.0 ); +} + +_fxanim_play_fx( localclientnum ) +{ + if ( isdefined( self.fxanim_fx_1 ) ) + { + assert( isdefined( self.fxanim_fx_1_tag ), "KVP fxanim_fx_1_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_1 ), self, self.fxanim_fx_1_tag ); + } + + if ( isdefined( self.fxanim_fx_2 ) ) + { + assert( isdefined( self.fxanim_fx_2_tag ), "KVP fxanim_fx_2_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_2 ), self, self.fxanim_fx_2_tag ); + } + + if ( isdefined( self.fxanim_fx_3 ) ) + { + assert( isdefined( self.fxanim_fx_3_tag ), "KVP fxanim_fx_3_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_3 ), self, self.fxanim_fx_3_tag ); + } + + if ( isdefined( self.fxanim_fx_4 ) ) + { + assert( isdefined( self.fxanim_fx_4_tag ), "KVP fxanim_fx_4_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_4 ), self, self.fxanim_fx_4_tag ); + } + + if ( isdefined( self.fxanim_fx_5 ) ) + { + assert( isdefined( self.fxanim_fx_5_tag ), "KVP fxanim_fx_5_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_5 ), self, self.fxanim_fx_5_tag ); + } +} + +_fxanim_get_anim_count() +{ + assert( isdefined( self.fxanim_scene_1 ), "fxanim at position " + self.origin + " needs at least one scene defined. Use the KVP fxanim_scene_1" ); + n_fx_count = 0; + + if ( !isdefined( self.fxanim_scene_2 ) ) + n_fx_count = 1; + else if ( !isdefined( self.fxanim_scene_3 ) ) + n_fx_count = 2; + else + n_fx_count = 3; + + return n_fx_count; +} + +_fxanim_get_scene_name( n_anim_id ) +{ + str_scene_name = undefined; + + switch ( n_anim_id ) + { + case 0: + str_scene_name = self.fxanim_scene_1; + break; + case 1: + str_scene_name = self.fxanim_scene_2; + break; + case 2: + str_scene_name = self.fxanim_scene_3; + break; + } + + return str_scene_name; +} + +_fxanim_model_link( localclientnum ) +{ + self waittill_dobj( localclientnum ); + assert( isdefined( self.fxanim_tag ), "Model at origin " + self.origin + " needs an fxanim_tag defined, to show which tag the model will link to" ); + m_parent = getent( localclientnum, self.fxanim_parent, "targetname" ); + assert( isdefined( m_parent ), "Model at origin " + self.origin + " does not have a proper parent. Make sure the fxanim_parent matches the targetname of the fxanim" ); + m_parent waittill_dobj( localclientnum ); + self.origin = m_parent gettagorigin( self.fxanim_tag ); + self.angles = m_parent gettagangles( self.fxanim_tag ); + self linkto( m_parent, self.fxanim_tag ); + + if ( isdefined( self.fxanim_hide ) ) + { + self hide(); + + m_parent waittill( "fxanim_start" ); + + self show(); + } +} + +getfx( fx ) +{ + assert( isdefined( level._effect[fx] ), "Fx " + fx + " is not defined in level._effect." ); + return level._effect[fx]; +} diff --git a/MP/Maps/Pod/clientscripts/mp/createfx/mp_pod_fx.csc b/MP/Maps/Pod/clientscripts/mp/createfx/mp_pod_fx.csc new file mode 100644 index 0000000..06cad1e --- /dev/null +++ b/MP/Maps/Pod/clientscripts/mp/createfx/mp_pod_fx.csc @@ -0,0 +1,1432 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fireflies_mp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1226.76, -971.781, 242 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fireflies_mp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1419.88, -501.289, 269.512 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fireflies_mp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 451.737, 117.997, 243.766 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fireflies_mp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -493.889, 1388.92, 485.136 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fireflies_mp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1180.41, 1275.41, 480.65 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -71.0005, -3215.34, 384 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 82.0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1135.75, -989.957, 226 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 311.101, 375.438, 266.486 ); + ent.v["angles"] = ( 348.017, 110.067, -0.637349 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1218.49, 1514.58, 492 ); + ent.v["angles"] = ( 0.749496, 3.01092, 1.85562 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1108.03, 543.943, 404.591 ); + ent.v["angles"] = ( 1, 138, 0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -555.427, 522.075, 396.375 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 157.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 193.061, -565.74, 312.484 ); + ent.v["angles"] = ( 359, 122, 0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -23.7125, -2639.98, 383.263 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 82.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -714.798, -2057.47, 385.485 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 53.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1489.15, 1038.92, 477.336 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 119.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1767.78, 1486.54, 476 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 104.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -794.909, 1567.21, 432.785 ); + ent.v["angles"] = ( 1.20835, 329.016, -0.829924 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -530.794, 1031.93, 417.091 ); + ent.v["angles"] = ( 2.18886, 338.017, -1.54593 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 390.071, -2196.56, 378.14 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 72.0 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -424.345, -174.793, 340.248 ); + ent.v["angles"] = ( 1, 91, 0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1302.3, -888.747, 242 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 599.595, -147.909, 255.92 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 4.0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 381.011, 254.308, 247.044 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 52.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 384.265, 835.494, 312.264 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 274.0 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -505.729, 1664.08, 487.204 ); + ent.v["angles"] = ( 359, 231, 0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1311.2, 1333.55, 484 ); + ent.v["angles"] = ( 0.707204, 5.99248, -0.707242 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -226.51, 752.548, 403.484 ); + ent.v["angles"] = ( 357.191, 129.946, 0.982957 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 778.955, -272.959, 438.331 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 180.728, -1144.3, 300.436 ); + ent.v["angles"] = ( 0.918725, 64.1467, 2.66656 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1793.64, -167.128, 360.125 ); + ent.v["angles"] = ( 359.251, 46.9885, 1.85474 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -929.658, 409.406, 446.882 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -932.932, -1389.66, 452.259 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -943.596, 1370.28, 529 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1330.71, -333.409, 246.283 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1441.99, -1326.19, 295.396 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 116.0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 835.927, -1432.59, 300.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 43.0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 326.513, -1871.4, 375.301 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 43.0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -255.537, -2265.77, 390.305 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 117.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1421.8, -466.548, 452.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 43.0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -772.525, 940.723, 411.179 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2692.49, -759.168, 375 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 116.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1757.72, 347.748, 315.993 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 126.0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3152.64, -259.096, 492.929 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 116.0 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 378.526, 2161.94, 592.01 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 315.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2432.44, 353.349, 245.766 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 131.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -646.382, -3409.68, 328.329 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 100.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -115.13, -4535.93, 360.871 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 869.729, -3419.34, 281.051 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 71.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1129.01, -2307.45, 473.803 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 65.0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1893.54, -1638.46, 246.812 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 75.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2153.02, -740.272, 197.823 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 75.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -812.965, -2962, 92.8236 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 120.0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1754.96, -2700.14, 132.284 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2597.97, 1050.47, 111.061 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 105.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1212.61, 2337.14, 463.807 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 341.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 708.806, 1287.9, 465.625 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 345.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1368.98, 2185.74, 873.658 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1989.69, -568.475, 262 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -143.425, 3051.55, 518.887 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 116.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -930.569, 3169, 470.929 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 350.0 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2519.26, 1524.79, 226.836 ); + ent.v["angles"] = ( 0, 96, 1 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2077.68, 2536.77, 493.205 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 338.0 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1213.61, -1153.03, 412.263 ); + ent.v["angles"] = ( 1.53228, 6.01764, 1.28563 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2162.71, 511.684, 355.628 ); + ent.v["angles"] = ( 0.719429, 54, 0.694802 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2031.5, 1221.73, 496.1 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 54.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -532.862, -531.82, 243.639 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 192.0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -943.247, -554.146, 207.382 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 19.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -722.988, -288.497, 205.704 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 340.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2095.95, 880.209, 420.376 ); + ent.v["angles"] = ( 355.761, 39.8424, 4.25103 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2089.01, 1.37489, 347.185 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 52.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -218.633, 512.527, 407.404 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1144.42, -142.489, 293.644 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 324.655, 67.6518, 353.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 431.622, 164.633, 284.519 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1147.22, 335.384, 429.336 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 271.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -603.073, 261.882, 479.747 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -861.765, 145.118, 446.332 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 304.88, -1794.7, 409.378 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1006.48, -186.034, 448.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1304.34, 126.079, 293.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 803.876, -144.25, 249.721 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 169.0 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 963.466, -731.866, 240 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 100.0 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2715.75, 1428.94, 673.057 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1698.98, -1092.66, 48.3447 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 85.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2319.19, 620.92, 30 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 75.0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -619.699, -286.862, 113.705 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 304.0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -207.221, 108.913, 405.778 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3852.96, 547.224, 674.231 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1317.58, -3090.34, 447.926 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 83.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1522.8, -4506.55, 449.851 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 83.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 218.093, -4134.46, 197.488 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 83.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -224.277, -4116.03, 232.138 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 104.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 694.296, -4196.7, 214.493 ); + ent.v["angles"] = ( 14.979, 90.8944, -0.80343 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -618.011, -499.246, 61 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -175.28, -246.959, 344.487 ); + ent.v["angles"] = ( 351.198, 124.855, 1.88608 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -115.955, 339.648, 407.05 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 116.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 64.7574, 1237.37, 458.272 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 122.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1119.32, 2555.25, 891.613 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 315.0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1644.84, -1443.57, 330 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 73.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 385.201, -1084.07, 327.366 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -419.237, -1591.78, 401.419 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -606.739, -1663.17, 716.738 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 18.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -558.364, 512.538, 738.683 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 18.0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1302.73, 2046.75, 786.158 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 357.0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 693.483, 1207.65, 737.382 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 336.0 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2112.69, -413.329, 616.817 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 106.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -108.984, -850.984, 392.053 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -233.417, -919.94, 383.126 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -249.144, -786.257, 388.965 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fireflies_mp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -195.85, -848.004, 351.799 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -57.2, -713.36, 448.576 ); + ent.v["angles"] = ( 90, 0, -135.3 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3.7085, -847.484, 446.878 ); + ent.v["angles"] = ( 90, 180, 89.7001 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -62.5544, -982.449, 447.222 ); + ent.v["angles"] = ( 90, 333.435, -71.8648 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -226.815, -1640.51, 500.793 ); + ent.v["angles"] = ( 90, 0, 179.7 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -362.136, -1697.25, 500.333 ); + ent.v["angles"] = ( 90, 0, 135 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -420.498, -1828.47, 500.365 ); + ent.v["angles"] = ( 90, 180, -90 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -363.555, -1965.86, 500.461 ); + ent.v["angles"] = ( 90, 180, -135 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -231.758, -2023.49, 500.15 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -93.9819, -1968.79, 500.641 ); + ent.v["angles"] = ( 90, 0, -45.4 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -537.503, 191.582, 519.53 ); + ent.v["angles"] = ( 90, 180, 89.9 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -595.317, 327.708, 520.42 ); + ent.v["angles"] = ( 90, 0, -135.1 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -865.553, 324.85, 519.772 ); + ent.v["angles"] = ( 90, 0, 134.9 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1236.63, -1439.24, 518.982 ); + ent.v["angles"] = ( 90, 0, 134.9 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -967.183, -1436.57, 519.53 ); + ent.v["angles"] = ( 90, 0, -135.9 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -910.496, -1573.12, 520.158 ); + ent.v["angles"] = ( 90, 7.12502, -82.875 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 501.392, -2429.01, 510.882 ); + ent.v["angles"] = ( 90, 0, 179.4 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 366.539, -2484.48, 512.101 ); + ent.v["angles"] = ( 90, 180, -45.8 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 310.498, -2621.31, 512.686 ); + ent.v["angles"] = ( 90, 0, 89.7 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 367.253, -2755.45, 512.263 ); + ent.v["angles"] = ( 90, 0, 44.6998 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_pod_sun" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -94218, 41320, 97879.4 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4.5578, -847.255, 393.357 ); + ent.v["angles"] = ( 90, 180, 89.7001 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -56.7957, -713.514, 393.484 ); + ent.v["angles"] = ( 90, 0, -135.3 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -324.875, -718.732, 447.045 ); + ent.v["angles"] = ( 90, 0, -45.2999 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -62.6559, -982.396, 395.403 ); + ent.v["angles"] = ( 90, 333.435, -71.8648 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -379.354, -844.443, 448.08 ); + ent.v["angles"] = ( 90, 180, 89.7001 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -67.403, -971.812, 449.662 ); + ent.v["angles"] = ( 90, 0, 134.7 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -67.025, -717.539, 450.566 ); + ent.v["angles"] = ( 90, 0, 45.1999 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -116.844, -732.226, 471.999 ); + ent.v["angles"] = ( 0, 136, -2 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -110.167, -964.37, 476.001 ); + ent.v["angles"] = ( 0, 136, -2 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -276.255, -892.915, 472.875 ); + ent.v["angles"] = ( 0, 136, -2 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -961.764, -1441.76, 466.855 ); + ent.v["angles"] = ( 90, 0, -135.9 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -909.488, -1572.81, 465.803 ); + ent.v["angles"] = ( 90, 7.12502, -82.875 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1231.82, -1432.99, 457.8 ); + ent.v["angles"] = ( 90, 0, 134.9 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -862.402, 329.431, 467.423 ); + ent.v["angles"] = ( 90, 0, 134.9 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -593.448, 327.146, 467.77 ); + ent.v["angles"] = ( 90, 0, -135.1 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -537.594, 190.261, 466.265 ); + ent.v["angles"] = ( 90, 180, 89.9 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -13.08, -841.886, 447.644 ); + ent.v["angles"] = ( 90, 0, 88.7 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -671.735, -1452.93, 407.471 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 484.845, -2221.58, 387.412 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 493.695, -1709.16, 468.865 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 742.839, -1752.04, 386.533 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 684.763, -1372.99, 437.405 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 855.735, -1137.79, 332.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 880.741, -785.637, 250 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1125.49, -148.525, 271.853 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 796.326, -117.532, 247.723 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 585.81, 629.491, 296.022 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 52.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 678.622, 286.452, 260.159 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 52.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 898.204, -35.593, 319.237 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 940.69, 151.682, 285.772 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1299.22, -106.578, 296.384 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 940.25, -1081.21, 294 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 478.145, -2215.22, 387.254 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -637.105, -1670.92, 460.736 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -324.751, -1242.28, 389.048 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -889.086, -752.901, 458.656 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1642.78, 284.604, 448.521 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1052.42, 739.097, 471.89 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -835.749, 1020.36, 469.025 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -359.855, 924.162, 428.443 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -389.653, 1273.33, 454.797 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -745.921, 1582.95, 472.558 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -85.3774, 815.576, 399.827 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1117.97, 1777.7, 530.223 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -781.707, 135.138, 551.875 ); + ent.v["angles"] = ( 1.43887, 270.018, 1.38938 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -616.882, 203.704, 551.875 ); + ent.v["angles"] = ( 1.43887, 270.018, 1.38938 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1177.08, -1573.61, 550.875 ); + ent.v["angles"] = ( 1.43887, 270.018, 1.38938 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1078.67, -1442.69, 550.875 ); + ent.v["angles"] = ( 1.43887, 270.018, 1.38938 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 185.115, -1386.15, 385.562 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 585.667, -499.697, 459.089 ); + ent.v["angles"] = ( 0, 136, -2 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 528.278, -517.8, 466.055 ); + ent.v["angles"] = ( 0, 136, -2 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -121.366, 510.427, 579.13 ); + ent.v["angles"] = ( 2, 225, 0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1437.35, -959.386, 318.471 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1376.62, -1212.96, 330.88 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -229.138, -1640.49, 442.943 ); + ent.v["angles"] = ( 90, 0, 179.7 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -364.477, -1698.27, 446.177 ); + ent.v["angles"] = ( 90, 0, 135 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -419.608, -1830.77, 447.047 ); + ent.v["angles"] = ( 90, 180, -90 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -367.52, -1963.01, 445.653 ); + ent.v["angles"] = ( 90, 180, -135 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -231.904, -2023.61, 444.986 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -94.8223, -1969.51, 446.785 ); + ent.v["angles"] = ( 90, 0, -45.4 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -36.807, -1835.21, 497.328 ); + ent.v["angles"] = ( 90, 0, -90.3999 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -36.4869, -1832.02, 444.518 ); + ent.v["angles"] = ( 90, 0, -90.3999 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -600.111, 320.301, 522.771 ); + ent.v["angles"] = ( 90, 0, -135.1 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -601.165, 320.94, 519.325 ); + ent.v["angles"] = ( 90, 0, 45 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -545.638, 194.63, 521.671 ); + ent.v["angles"] = ( 90, 180, -90.1 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -858.296, 318.701, 522.551 ); + ent.v["angles"] = ( 90, 0, -45.5999 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -855.148, 62.0831, 520.976 ); + ent.v["angles"] = ( 90, 4.76364, -130.236 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -789.547, 316.146, 441.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 290.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -628.523, 301.407, 426.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 245.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 589.817, -573.24, 328.18 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 78.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 501.177, -363.615, 329.482 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 333.0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1010.69, -1673.16, 418.264 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 99.0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 80.248, 754.344, 361.407 ); + ent.v["angles"] = ( 6, 344, 0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 358.623, 710.229, 320.845 ); + ent.v["angles"] = ( 342.014, 159.886, 0.439226 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 26.8153, -2822.9, 423.996 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -689.693, -1921.21, 388.645 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -973.589, -1500.11, 443.491 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 371.779, -1889.65, 679.358 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -109.818, -1926.96, 692 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -375.706, -1912.02, 692 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -231.786, -1628.93, 692 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 546.031, -1615.52, 678.754 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 214.801, -1482.93, 676.349 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -461.181, -1221.92, 539.465 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -389.868, -1230.64, 536.733 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1193.6, -834.125, 562.809 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1091.43, -717.875, 571.465 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1430.13, -334.457, 567.884 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1430.13, -413.411, 576.943 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1628.1, -172.153, 576.795 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1665.15, -61.875, 578.326 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1686.65, -721.875, 641.751 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -777.308, -2406.36, 535.786 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 415.074, -2419.36, 729.301 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 290.929, -2530.34, 730.934 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 296.043, -2714.21, 730.879 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 427.008, -2822.36, 728.907 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 864.082, -408.114, 579.424 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 577.316, -31.0007, 527.389 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 532.892, -87.9131, 541.986 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -255.081, 983.53, 799.184 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -422.347, 984.819, 798.88 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1182.13, 1284.51, 765.045 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -914.987, 1414.33, 795.677 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -902.981, 976.77, 790.569 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1012.52, 1417.48, 756.971 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -430.28, 1407.94, 777.131 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -147.765, 508.216, 629 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -193.184, 348.634, 629 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1275.67, 400.846, 578.17 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -538.601, -2469.88, 671.914 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 810.209, -591.445, 581.873 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 218.78, -141.81, 577.032 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 153.95, -76.1435, 589.773 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 310.598, -321.507, 580.554 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -602.675, -899.521, 499.723 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -758.965, -847.294, 498.835 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -844.277, -694.496, 423.038 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -971.929, -570.116, 422.651 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1157.35, -371.829, 415.307 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1160.61, -526.336, 414.504 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1186.71, 75.9713, 704.016 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1181.12, 68.9562, 576.126 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -821.779, -2569.21, 498.206 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -703.335, -2540.54, 519.213 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -648.911, -1274.56, 503.025 ); + ent.v["angles"] = ( 0, 136, -2 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -821.205, -1276.11, 501.343 ); + ent.v["angles"] = ( 0, 136, -2 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1045.18, -2842.39, 537.559 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 950.78, -2749.47, 536.74 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 269.096, -1883.85, 811.077 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 426.751, -1862.72, 811.048 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -225.008, -2685.03, 577.589 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -329.146, -2465.74, 570.06 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -219.779, -2576.79, 568.973 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -941.45, -1842.78, 571.449 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1127, -658.899, 380.365 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1248.41, -366.389, 378.606 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1004.72, 226.751, 396.945 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 796.164, 495.222, 376.434 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 211.266, 652.103, 472.895 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -684.915, 405.47, 535.046 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -56.7255, -683.297, 461.051 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -67.9285, -1010.08, 462.892 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -149.189, -1056.54, 461.062 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -886.288, -1581.54, 534.044 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -953.331, -1421.8, 534.049 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -988.449, -1755.56, 536.133 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -377.369, -1680.41, 515.052 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -375.154, -1986.11, 515.052 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -223.123, -2045.63, 505.033 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 403.094, 53.7913, 240.816 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 169.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -152.339, -1220.45, 335.777 ); + ent.v["angles"] = ( 7, 31, 0 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1138.71, -80.3042, 266.042 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 172.0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1722.82, 229.222, 418.093 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 43.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 647.477, -2460.39, 728.65 ); + ent.v["angles"] = ( 270, 0, 40 ); + ent.v["delay"] = -93; +} diff --git a/MP/Maps/Pod/clientscripts/mp/mp_pod.csc b/MP/Maps/Pod/clientscripts/mp/mp_pod.csc new file mode 100644 index 0000000..8417d76 --- /dev/null +++ b/MP/Maps/Pod/clientscripts/mp/mp_pod.csc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_pod_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_pod_amb; + +main() +{ + clientscripts\mp\_load::main(); + clientscripts\mp\mp_pod_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_pod_amb::main(); + setsaveddvar( "sm_sunsamplesizenear", 0.25 ); + setsaveddvar( "sm_sunshadowsmall", 1 ); + waitforclient( 0 ); +/# + println( "*** Client : mp_pod running..." ); +#/ +} diff --git a/MP/Maps/Pod/clientscripts/mp/mp_pod_amb.csc b/MP/Maps/Pod/clientscripts/mp/mp_pod_amb.csc new file mode 100644 index 0000000..02a2842 --- /dev/null +++ b/MP/Maps/Pod/clientscripts/mp/mp_pod_amb.csc @@ -0,0 +1,46 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "pod_outdoor", 1 ); + setambientroomtone( "pod_outdoor", "amb_wind_exterior_2d", 0.55, 1 ); + setambientroomreverb( "pod_outdoor", "pod_outdoor", 1, 1 ); + setambientroomcontext( "pod_outdoor", "ringoff_plr", "outdoor" ); + declareambientroom( "pod_small_int" ); + setambientroomtone( "pod_small_int", "amb_wind_interior_2d", 0.55, 1 ); + setambientroomreverb( "pod_small_int", "pod_mediumroom", 1, 1 ); + setambientroomcontext( "pod_small_int", "ringoff_plr", "indoor" ); + declareambientroom( "pod_stone_int" ); + setambientroomtone( "pod_stone_int", "amb_wind_interior_2d", 0.55, 1 ); + setambientroomreverb( "pod_stone_int", "pod_stoneroom", 1, 1 ); + setambientroomcontext( "pod_stone_int", "ringoff_plr", "indoor" ); + declareambientroom( "room_small" ); + setambientroomtone( "room_small", "amb_wind_interior_2d", 0.55, 1 ); + setambientroomreverb( "room_small", "pod_smallroom", 1, 1 ); + setambientroomcontext( "room_small", "ringoff_plr", "indoor" ); + declareambientroom( "open_room" ); + setambientroomtone( "open_room", "amb_wind_interior_2d", 0.55, 1 ); + setambientroomreverb( "open_room", "pod_partialroom", 1, 1 ); + setambientroomcontext( "open_room", "ringoff_plr", "indoor" ); + declareambientroom( "corridor_room" ); + setambientroomtone( "corridor_room", "amb_wind_interior_2d", 0.55, 1 ); + setambientroomreverb( "corridor_room", "pod_hallroom", 1, 1 ); + setambientroomcontext( "corridor_room", "ringoff_plr", "indoor" ); + thread snd_start_autofx_audio(); + thread snd_play_loopers(); +} + +snd_start_autofx_audio() +{ + snd_play_auto_fx( "fx_mp_pod_water_drips", "amb_water_drip_loop", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_mp_water_drip_light_shrt", "amb_water_drip_loop_small", 0, 0, 0, 1 ); +} + +snd_play_loopers() +{ + +} diff --git a/MP/Maps/Pod/clientscripts/mp/mp_pod_fx.csc b/MP/Maps/Pod/clientscripts/mp/mp_pod_fx.csc new file mode 100644 index 0000000..df41c65 --- /dev/null +++ b/MP/Maps/Pod/clientscripts/mp/mp_pod_fx.csc @@ -0,0 +1,93 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_fxanim_dlc4; +#include clientscripts\mp\createfx\mp_pod_fx; +#include clientscripts\mp\_fx; + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_pod_glass_drop_trail"] = loadfx( "maps/mp_maps/fx_mp_pod_glass_drop_trail" ); + level._effect["fx_mp_pod_glass_drop_runner"] = loadfx( "maps/mp_maps/fx_mp_pod_glass_drop_runner" ); + level._effect["fx_mp_pod_water_spill"] = loadfx( "maps/mp_maps/fx_mp_pod_water_spill" ); + level._effect["fx_mp_pod_water_spill_02"] = loadfx( "maps/mp_maps/fx_mp_pod_water_spill_02" ); + level._effect["fx_mp_pod_water_spill_splash"] = loadfx( "maps/mp_maps/fx_mp_pod_water_spill_splash" ); + level._effect["fx_mp_water_drip_light_shrt"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_shrt" ); + level._effect["fx_mp_water_drip_light_long"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); + level._effect["fx_mp_pod_water_drips"] = loadfx( "maps/mp_maps/fx_mp_pod_water_drips" ); + level._effect["fx_fog_drift_slow"] = loadfx( "fog/fx_fog_drift_slow" ); + level._effect["fx_fog_drift_slow_md"] = loadfx( "fog/fx_fog_drift_slow_md" ); + level._effect["fx_fog_drift_slow_sm"] = loadfx( "fog/fx_fog_drift_slow_sm" ); + level._effect["fx_fog_drift_slow_vista"] = loadfx( "fog/fx_fog_drift_slow_vista" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_lf_mp_pod_sun"] = loadfx( "lens_flares/fx_lf_mp_pod_sun" ); + level._effect["fx_insects_swarm_md_light"] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_insects_fireflies_mp"] = loadfx( "bio/insects/fx_insects_fireflies_mp" ); + level._effect["fx_insects_flies_dragonflies"] = loadfx( "bio/insects/fx_insects_flies_dragonflies" ); + level._effect["fx_insects_roaches"] = loadfx( "bio/insects/fx_insects_roaches" ); + level._effect["fx_insects_roaches_fast"] = loadfx( "bio/insects/fx_insects_roaches_fast" ); + level._effect["fx_insects_roaches_short"] = loadfx( "bio/insects/fx_insects_roaches_short" ); +} + +#using_animtree("fxanim_props_dlc4"); + +precache_fxanim_props_dlc4() +{ + level.scr_anim["fxanim_props_dlc4"]["wire_01"] = %fxanim_mp_pod_wire_01_anim; + level.scr_anim["fxanim_props_dlc4"]["wire_02"] = %fxanim_mp_pod_wire_02_anim; + level.scr_anim["fxanim_props_dlc4"]["wire_03"] = %fxanim_mp_pod_wire_03_anim; + level.scr_anim["fxanim_props_dlc4"]["wire_04"] = %fxanim_mp_pod_wire_04_anim; + level.scr_anim["fxanim_props_dlc4"]["wire_05"] = %fxanim_mp_pod_wire_05_anim; + level.scr_anim["fxanim_props_dlc4"]["wire_06"] = %fxanim_mp_pod_wire_06_anim; + level.scr_anim["fxanim_props_dlc4"]["wire_07"] = %fxanim_mp_pod_wire_07_anim; + level.scr_anim["fxanim_props_dlc4"]["wire_08"] = %fxanim_mp_pod_wire_08_anim; + level.scr_anim["fxanim_props_dlc4"]["wire_09"] = %fxanim_mp_pod_wire_09_anim; + level.scr_anim["fxanim_props_dlc4"]["shirt03"] = %fxanim_gp_shirts03_anim; + level.scr_anim["fxanim_props_dlc4"]["vine_clump_01"] = %fxanim_mp_pod_vine_clump_01_anim; + level.scr_anim["fxanim_props_dlc4"]["vine_clump_02"] = %fxanim_mp_pod_vine_clump_02_anim; + level.scr_anim["fxanim_props_dlc4"]["vine_clump_long"] = %fxanim_mp_pod_vine_clump_long_anim; + level.scr_anim["fxanim_props_dlc4"]["vine_med_leafy"] = %fxanim_mp_pod_vine_med_leafy_anim; + level.scr_anim["fxanim_props_dlc4"]["vine_med_bare"] = %fxanim_mp_pod_vine_med_bare_anim; + level.scr_anim["fxanim_props_dlc4"]["vine_long_leafy"] = %fxanim_mp_pod_vine_long_leafy_anim; + level.scr_anim["fxanim_props_dlc4"]["vine_long_bare"] = %fxanim_mp_pod_vine_long_bare_anim; + level.scr_anim["fxanim_props_dlc4"]["bushy_clump_01"] = %fxanim_mp_pod_bushy_clump_01_anim; + level.scr_anim["fxanim_props_dlc4"]["bushy_clump_02"] = %fxanim_mp_pod_bushy_clump_02_anim; + level.scr_anim["fxanim_props_dlc4"]["vine_loops_pod"] = %fxanim_mp_pod_vine_loops_pod_anim; + level.scr_anim["fxanim_props_dlc4"]["pool_wires"] = %fxanim_mp_pod_pool_wires_anim; +} + +fxanim_init( localclientnum ) +{ + level thread clientscripts\mp\_fxanim_dlc4::fxanim_init_dlc( localclientnum ); +} + +#using_animtree("fxanim_props"); + +precache_fx_anims() +{ + level.scr_anim = []; + level.scr_anim["fxanim_props"]["seagull_circle_01"] = %fxanim_gp_seagull_circle_01_anim; + level.scr_anim["fxanim_props"]["seagull_circle_02"] = %fxanim_gp_seagull_circle_02_anim; + level.scr_anim["fxanim_props"]["seagull_circle_03"] = %fxanim_gp_seagull_circle_03_anim; + level.scr_anim["fxanim_props"]["sheet_med"] = %fxanim_gp_cloth_sheet_med_anim; + level.fx_anim_level_init = ::fxanim_init; +} + +main() +{ + clientscripts\mp\createfx\mp_pod_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fx_anims(); + precache_fxanim_props_dlc4(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} diff --git a/MP/Maps/Pod/maps/mp/createfx/mp_pod_fx.gsc b/MP/Maps/Pod/maps/mp/createfx/mp_pod_fx.gsc new file mode 100644 index 0000000..c003691 --- /dev/null +++ b/MP/Maps/Pod/maps/mp/createfx/mp_pod_fx.gsc @@ -0,0 +1,1432 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fireflies_mp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1226.76, -971.781, 242 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fireflies_mp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1419.88, -501.289, 269.512 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fireflies_mp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 451.737, 117.997, 243.766 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fireflies_mp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -493.889, 1388.92, 485.136 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fireflies_mp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1180.41, 1275.41, 480.65 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -71.0005, -3215.34, 384 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 82.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1135.75, -989.957, 226 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 311.101, 375.438, 266.486 ); + ent.v["angles"] = ( 348.017, 110.067, -0.637349 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1218.49, 1514.58, 492 ); + ent.v["angles"] = ( 0.749496, 3.01092, 1.85562 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1108.03, 543.943, 404.591 ); + ent.v["angles"] = ( 1, 138, 0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -555.427, 522.075, 396.375 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 157.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 193.061, -565.74, 312.484 ); + ent.v["angles"] = ( 359, 122, 0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -23.7125, -2639.98, 383.263 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 82.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -714.798, -2057.47, 385.485 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 53.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1489.15, 1038.92, 477.336 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 119.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1767.78, 1486.54, 476 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 104.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -794.909, 1567.21, 432.785 ); + ent.v["angles"] = ( 1.20835, 329.016, -0.829924 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -530.794, 1031.93, 417.091 ); + ent.v["angles"] = ( 2.18886, 338.017, -1.54593 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 390.071, -2196.56, 378.14 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 72.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -424.345, -174.793, 340.248 ); + ent.v["angles"] = ( 1, 91, 0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1302.3, -888.747, 242 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 599.595, -147.909, 255.92 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 4.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 381.011, 254.308, 247.044 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 52.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 384.265, 835.494, 312.264 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 274.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -505.729, 1664.08, 487.204 ); + ent.v["angles"] = ( 359, 231, 0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1311.2, 1333.55, 484 ); + ent.v["angles"] = ( 0.707204, 5.99248, -0.707242 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -226.51, 752.548, 403.484 ); + ent.v["angles"] = ( 357.191, 129.946, 0.982957 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 778.955, -272.959, 438.331 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 180.728, -1144.3, 300.436 ); + ent.v["angles"] = ( 0.918725, 64.1467, 2.66656 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1793.64, -167.128, 360.125 ); + ent.v["angles"] = ( 359.251, 46.9885, 1.85474 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -929.658, 409.406, 446.882 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -932.932, -1389.66, 452.259 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -943.596, 1370.28, 529 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1330.71, -333.409, 246.283 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1441.99, -1326.19, 295.396 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 116.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 835.927, -1432.59, 300.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 43.0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 326.513, -1871.4, 375.301 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 43.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -255.537, -2265.77, 390.305 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 117.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1421.8, -466.548, 452.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 43.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -772.525, 940.723, 411.179 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2692.49, -759.168, 375 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 116.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1757.72, 347.748, 315.993 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 126.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3152.64, -259.096, 492.929 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 116.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 378.526, 2161.94, 592.01 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 315.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2432.44, 353.349, 245.766 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 131.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -646.382, -3409.68, 328.329 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 100.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -115.13, -4535.93, 360.871 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 869.729, -3419.34, 281.051 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 71.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1129.01, -2307.45, 473.803 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 65.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1893.54, -1638.46, 246.812 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 75.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2153.02, -740.272, 197.823 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 75.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -812.965, -2962, 92.8236 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 120.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1754.96, -2700.14, 132.284 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2597.97, 1050.47, 111.061 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 105.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1212.61, 2337.14, 463.807 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 341.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 708.806, 1287.9, 465.625 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 345.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1368.98, 2185.74, 873.658 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1989.69, -568.475, 262 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -143.425, 3051.55, 518.887 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 116.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -930.569, 3169, 470.929 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 350.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2519.26, 1524.79, 226.836 ); + ent.v["angles"] = ( 0, 96, 1 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2077.68, 2536.77, 493.205 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 338.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1213.61, -1153.03, 412.263 ); + ent.v["angles"] = ( 1.53228, 6.01764, 1.28563 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2162.71, 511.684, 355.628 ); + ent.v["angles"] = ( 0.719429, 54, 0.694802 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2031.5, 1221.73, 496.1 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 54.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -532.862, -531.82, 243.639 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 192.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -943.247, -554.146, 207.382 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 19.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -722.988, -288.497, 205.704 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 340.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2095.95, 880.209, 420.376 ); + ent.v["angles"] = ( 355.761, 39.8424, 4.25103 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2089.01, 1.37489, 347.185 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 52.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -218.633, 512.527, 407.404 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1144.42, -142.489, 293.644 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 324.655, 67.6518, 353.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 431.622, 164.633, 284.519 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1147.22, 335.384, 429.336 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 271.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -603.073, 261.882, 479.747 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -861.765, 145.118, 446.332 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 304.88, -1794.7, 409.378 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1006.48, -186.034, 448.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1304.34, 126.079, 293.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 803.876, -144.25, 249.721 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 169.0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 963.466, -731.866, 240 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 100.0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2715.75, 1428.94, 673.057 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1698.98, -1092.66, 48.3447 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 85.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2319.19, 620.92, 30 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 75.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -619.699, -286.862, 113.705 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 304.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -207.221, 108.913, 405.778 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3852.96, 547.224, 674.231 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1317.58, -3090.34, 447.926 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 83.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1522.8, -4506.55, 449.851 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 83.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 218.093, -4134.46, 197.488 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 83.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -224.277, -4116.03, 232.138 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 104.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 694.296, -4196.7, 214.493 ); + ent.v["angles"] = ( 14.979, 90.8944, -0.80343 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -618.011, -499.246, 61 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -175.28, -246.959, 344.487 ); + ent.v["angles"] = ( 351.198, 124.855, 1.88608 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -115.955, 339.648, 407.05 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 116.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 64.7574, 1237.37, 458.272 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 122.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1119.32, 2555.25, 891.613 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 315.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1644.84, -1443.57, 330 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 73.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 385.201, -1084.07, 327.366 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -419.237, -1591.78, 401.419 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -606.739, -1663.17, 716.738 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 18.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -558.364, 512.538, 738.683 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 18.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1302.73, 2046.75, 786.158 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 357.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 693.483, 1207.65, 737.382 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 336.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2112.69, -413.329, 616.817 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 106.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -108.984, -850.984, 392.053 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -233.417, -919.94, 383.126 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -249.144, -786.257, 388.965 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fireflies_mp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -195.85, -848.004, 351.799 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -57.2, -713.36, 448.576 ); + ent.v["angles"] = ( 90, 0, -135.3 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3.7085, -847.484, 446.878 ); + ent.v["angles"] = ( 90, 180, 89.7001 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -62.5544, -982.449, 447.222 ); + ent.v["angles"] = ( 90, 333.435, -71.8648 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -226.815, -1640.51, 500.793 ); + ent.v["angles"] = ( 90, 0, 179.7 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -362.136, -1697.25, 500.333 ); + ent.v["angles"] = ( 90, 0, 135 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -420.498, -1828.47, 500.365 ); + ent.v["angles"] = ( 90, 180, -90 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -363.555, -1965.86, 500.461 ); + ent.v["angles"] = ( 90, 180, -135 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -231.758, -2023.49, 500.15 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -93.9819, -1968.79, 500.641 ); + ent.v["angles"] = ( 90, 0, -45.4 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -537.503, 191.582, 519.53 ); + ent.v["angles"] = ( 90, 180, 89.9 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -595.317, 327.708, 520.42 ); + ent.v["angles"] = ( 90, 0, -135.1 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -865.553, 324.85, 519.772 ); + ent.v["angles"] = ( 90, 0, 134.9 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1236.63, -1439.24, 518.982 ); + ent.v["angles"] = ( 90, 0, 134.9 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -967.183, -1436.57, 519.53 ); + ent.v["angles"] = ( 90, 0, -135.9 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -910.496, -1573.12, 520.158 ); + ent.v["angles"] = ( 90, 7.12502, -82.875 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 501.392, -2429.01, 510.882 ); + ent.v["angles"] = ( 90, 0, 179.4 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 366.539, -2484.48, 512.101 ); + ent.v["angles"] = ( 90, 180, -45.8 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 310.498, -2621.31, 512.686 ); + ent.v["angles"] = ( 90, 0, 89.7 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 367.253, -2755.45, 512.263 ); + ent.v["angles"] = ( 90, 0, 44.6998 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_pod_sun" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -94218, 41320, 97879.4 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4.5578, -847.255, 393.357 ); + ent.v["angles"] = ( 90, 180, 89.7001 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -56.7957, -713.514, 393.484 ); + ent.v["angles"] = ( 90, 0, -135.3 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -324.875, -718.732, 447.045 ); + ent.v["angles"] = ( 90, 0, -45.2999 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -62.6559, -982.396, 395.403 ); + ent.v["angles"] = ( 90, 333.435, -71.8648 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -379.354, -844.443, 448.08 ); + ent.v["angles"] = ( 90, 180, 89.7001 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -67.403, -971.812, 449.662 ); + ent.v["angles"] = ( 90, 0, 134.7 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -67.025, -717.539, 450.566 ); + ent.v["angles"] = ( 90, 0, 45.1999 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -116.844, -732.226, 471.999 ); + ent.v["angles"] = ( 0, 136, -2 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -110.167, -964.37, 476.001 ); + ent.v["angles"] = ( 0, 136, -2 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -276.255, -892.915, 472.875 ); + ent.v["angles"] = ( 0, 136, -2 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -961.764, -1441.76, 466.855 ); + ent.v["angles"] = ( 90, 0, -135.9 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -909.488, -1572.81, 465.803 ); + ent.v["angles"] = ( 90, 7.12502, -82.875 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1231.82, -1432.99, 457.8 ); + ent.v["angles"] = ( 90, 0, 134.9 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -862.402, 329.431, 467.423 ); + ent.v["angles"] = ( 90, 0, 134.9 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -593.448, 327.146, 467.77 ); + ent.v["angles"] = ( 90, 0, -135.1 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -537.594, 190.261, 466.265 ); + ent.v["angles"] = ( 90, 180, 89.9 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -13.08, -841.886, 447.644 ); + ent.v["angles"] = ( 90, 0, 88.7 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -671.735, -1452.93, 407.471 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 484.845, -2221.58, 387.412 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 493.695, -1709.16, 468.865 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 742.839, -1752.04, 386.533 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 684.763, -1372.99, 437.405 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 855.735, -1137.79, 332.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 880.741, -785.637, 250 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1125.49, -148.525, 271.853 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 796.326, -117.532, 247.723 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 585.81, 629.491, 296.022 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 52.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 678.622, 286.452, 260.159 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 52.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 898.204, -35.593, 319.237 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 940.69, 151.682, 285.772 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1299.22, -106.578, 296.384 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 940.25, -1081.21, 294 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 478.145, -2215.22, 387.254 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -637.105, -1670.92, 460.736 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -324.751, -1242.28, 389.048 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -889.086, -752.901, 458.656 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1642.78, 284.604, 448.521 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1052.42, 739.097, 471.89 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -835.749, 1020.36, 469.025 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -359.855, 924.162, 428.443 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -389.653, 1273.33, 454.797 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -745.921, 1582.95, 472.558 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -85.3774, 815.576, 399.827 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1117.97, 1777.7, 530.223 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -781.707, 135.138, 551.875 ); + ent.v["angles"] = ( 1.43887, 270.018, 1.38938 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -616.882, 203.704, 551.875 ); + ent.v["angles"] = ( 1.43887, 270.018, 1.38938 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1177.08, -1573.61, 550.875 ); + ent.v["angles"] = ( 1.43887, 270.018, 1.38938 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1078.67, -1442.69, 550.875 ); + ent.v["angles"] = ( 1.43887, 270.018, 1.38938 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 185.115, -1386.15, 385.562 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 585.667, -499.697, 459.089 ); + ent.v["angles"] = ( 0, 136, -2 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 528.278, -517.8, 466.055 ); + ent.v["angles"] = ( 0, 136, -2 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -121.366, 510.427, 579.13 ); + ent.v["angles"] = ( 2, 225, 0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1437.35, -959.386, 318.471 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1376.62, -1212.96, 330.88 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -229.138, -1640.49, 442.943 ); + ent.v["angles"] = ( 90, 0, 179.7 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -364.477, -1698.27, 446.177 ); + ent.v["angles"] = ( 90, 0, 135 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -419.608, -1830.77, 447.047 ); + ent.v["angles"] = ( 90, 180, -90 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -367.52, -1963.01, 445.653 ); + ent.v["angles"] = ( 90, 180, -135 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -231.904, -2023.61, 444.986 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -94.8223, -1969.51, 446.785 ); + ent.v["angles"] = ( 90, 0, -45.4 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -36.807, -1835.21, 497.328 ); + ent.v["angles"] = ( 90, 0, -90.3999 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -36.4869, -1832.02, 444.518 ); + ent.v["angles"] = ( 90, 0, -90.3999 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -600.111, 320.301, 522.771 ); + ent.v["angles"] = ( 90, 0, -135.1 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -601.165, 320.94, 519.325 ); + ent.v["angles"] = ( 90, 0, 45 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -545.638, 194.63, 521.671 ); + ent.v["angles"] = ( 90, 180, -90.1 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -858.296, 318.701, 522.551 ); + ent.v["angles"] = ( 90, 0, -45.5999 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -855.148, 62.0831, 520.976 ); + ent.v["angles"] = ( 90, 4.76364, -130.236 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -789.547, 316.146, 441.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 290.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -628.523, 301.407, 426.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 245.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 589.817, -573.24, 328.18 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 78.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 501.177, -363.615, 329.482 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 333.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1010.69, -1673.16, 418.264 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 99.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 80.248, 754.344, 361.407 ); + ent.v["angles"] = ( 6, 344, 0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 358.623, 710.229, 320.845 ); + ent.v["angles"] = ( 342.014, 159.886, 0.439226 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 26.8153, -2822.9, 423.996 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -689.693, -1921.21, 388.645 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -973.589, -1500.11, 443.491 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 371.779, -1889.65, 679.358 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -109.818, -1926.96, 692 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -375.706, -1912.02, 692 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -231.786, -1628.93, 692 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 546.031, -1615.52, 678.754 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 214.801, -1482.93, 676.349 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -461.181, -1221.92, 539.465 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -389.868, -1230.64, 536.733 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1193.6, -834.125, 562.809 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1091.43, -717.875, 571.465 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1430.13, -334.457, 567.884 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1430.13, -413.411, 576.943 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1628.1, -172.153, 576.795 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1665.15, -61.875, 578.326 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1686.65, -721.875, 641.751 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -777.308, -2406.36, 535.786 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 415.074, -2419.36, 729.301 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 290.929, -2530.34, 730.934 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 296.043, -2714.21, 730.879 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 427.008, -2822.36, 728.907 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 864.082, -408.114, 579.424 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 577.316, -31.0007, 527.389 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 532.892, -87.9131, 541.986 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -255.081, 983.53, 799.184 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -422.347, 984.819, 798.88 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1182.13, 1284.51, 765.045 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -914.987, 1414.33, 795.677 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -902.981, 976.77, 790.569 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1012.52, 1417.48, 756.971 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -430.28, 1407.94, 777.131 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -147.765, 508.216, 629 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -193.184, 348.634, 629 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1275.67, 400.846, 578.17 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -538.601, -2469.88, 671.914 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 810.209, -591.445, 581.873 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 218.78, -141.81, 577.032 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 153.95, -76.1435, 589.773 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 310.598, -321.507, 580.554 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -602.675, -899.521, 499.723 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -758.965, -847.294, 498.835 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -844.277, -694.496, 423.038 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -971.929, -570.116, 422.651 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1157.35, -371.829, 415.307 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1160.61, -526.336, 414.504 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1186.71, 75.9713, 704.016 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1181.12, 68.9562, 576.126 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -821.779, -2569.21, 498.206 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -703.335, -2540.54, 519.213 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -648.911, -1274.56, 503.025 ); + ent.v["angles"] = ( 0, 136, -2 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -821.205, -1276.11, 501.343 ); + ent.v["angles"] = ( 0, 136, -2 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1045.18, -2842.39, 537.559 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 950.78, -2749.47, 536.74 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 269.096, -1883.85, 811.077 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 426.751, -1862.72, 811.048 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -225.008, -2685.03, 577.589 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -329.146, -2465.74, 570.06 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -219.779, -2576.79, 568.973 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -941.45, -1842.78, 571.449 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1127, -658.899, 380.365 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1248.41, -366.389, 378.606 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1004.72, 226.751, 396.945 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 796.164, 495.222, 376.434 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 211.266, 652.103, 472.895 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -684.915, 405.47, 535.046 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -56.7255, -683.297, 461.051 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -67.9285, -1010.08, 462.892 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -149.189, -1056.54, 461.062 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -886.288, -1581.54, 534.044 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -953.331, -1421.8, 534.049 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -988.449, -1755.56, 536.133 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -377.369, -1680.41, 515.052 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -375.154, -1986.11, 515.052 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -223.123, -2045.63, 505.033 ); + ent.v["angles"] = ( 0, 66, 1 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 403.094, 53.7913, 240.816 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 169.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -152.339, -1220.45, 335.777 ); + ent.v["angles"] = ( 7, 31, 0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1138.71, -80.3042, 266.042 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 172.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1722.82, 229.222, 418.093 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 43.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 647.477, -2460.39, 728.65 ); + ent.v["angles"] = ( 270, 0, 40 ); + ent.v["delay"] = -93; +} diff --git a/MP/Maps/Pod/maps/mp/mp_pod.gsc b/MP/Maps/Pod/maps/mp/mp_pod.gsc new file mode 100644 index 0000000..51e91ae --- /dev/null +++ b/MP/Maps/Pod/maps/mp/mp_pod.gsc @@ -0,0 +1,76 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_pod_fx; +#include maps\mp\_load; +#include maps\mp\mp_pod_amb; +#include maps\mp\_compass; +#include maps\mp\gametypes\_spawning; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_pod_fx::main(); + precachemodel( "p_rus_door_white_frame_double" ); + precachemodel( "p6_pak_old_plywood" ); + precachemodel( "collision_clip_wall_32x32x10" ); + precachemodel( "collision_physics_wall_32x32x10" ); + precachemodel( "collision_physics_wall_128x128x10" ); + precachemodel( "collision_physics_wall_256x256x10" ); + precachemodel( "collision_physics_256x256x10" ); + precachemodel( "collision_missile_128x128x10" ); + precachemodel( "collision_clip_wall_64x64x10" ); + precachemodel( "collision_physics_256x256x256" ); + maps\mp\_load::main(); + maps\mp\mp_pod_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_pod" ); + prop1 = spawn( "script_model", ( 517.264, -627.226, 323 ) ); + prop1.angles = vectorscale( ( 0, 1, 0 ), 116.6 ); + prop1 setmodel( "p_rus_door_white_frame_double" ); + prop2 = spawn( "script_model", ( 62.1517, -1647.78, 481.602 ) ); + prop2.angles = vectorscale( ( 0, 1, 0 ), 35.2 ); + prop2 setmodel( "p6_pak_old_plywood" ); + prop3 = spawn( "script_model", ( 25.9997, -1673.49, 479.903 ) ); + prop3.angles = vectorscale( ( 0, 1, 0 ), 35.2 ); + prop3 setmodel( "p6_pak_old_plywood" ); + spawncollision( "collision_clip_wall_32x32x10", "collider", ( -1725, 2300, 514 ), ( 0, 0, 0 ) ); + spawncollision( "collision_clip_wall_32x32x10", "collider", ( -473, -2482, 412 ), vectorscale( ( 0, 0, 1 ), 14.0 ) ); + spawncollision( "collision_physics_wall_32x32x10", "collider", ( -473, -2482, 412 ), vectorscale( ( 0, 0, 1 ), 14.0 ) ); + spawncollision( "collision_physics_wall_128x128x10", "collider", ( -87, -1470.5, 751.5 ), vectorscale( ( 0, 1, 0 ), 34.2 ) ); + spawncollision( "collision_physics_256x256x10", "collider", ( 1287.5, -2468, 315 ), vectorscale( ( 0, 0, 1 ), 18.1 ) ); + spawncollision( "collision_physics_256x256x10", "collider", ( 1047.5, -2468, 315 ), vectorscale( ( 0, 0, 1 ), 18.1 ) ); + spawncollision( "collision_physics_256x256x10", "collider", ( 1047.5, -2627.5, 165.5 ), vectorscale( ( 0, 0, 1 ), 64.1 ) ); + spawncollision( "collision_missile_128x128x10", "collider", ( -911.5, -653, 496 ), ( 273, 45.0999, 90 ) ); + spawncollision( "collision_clip_wall_64x64x10", "collider", ( 1356, 50, 358 ), ( 5.64745, 114.9, 6 ) ); + spawncollision( "collision_clip_wall_64x64x10", "collider", ( 1364, 32, 349 ), ( 1.3883, 292.6, -4 ) ); + spawncollision( "collision_clip_wall_64x64x10", "collider", ( 1423, -127, 349 ), ( 1.3883, 285.8, -4 ) ); + spawncollision( "collision_physics_256x256x256", "collider", ( 1218, -2232, 244 ), vectorscale( ( 0, 1, 0 ), 30.0 ) ); + setdvar( "compassmaxrange", "2100" ); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + maps\mp\gametypes\_spawning::level_use_unified_spawning( 1 ); + level thread killstreak_init(); +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2400", reset_dvars ); + ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1000", reset_dvars ); +} + +killstreak_init() +{ + while ( !isdefined( level.missile_swarm_flyheight ) ) + wait 1; + + level.missile_swarm_flyheight = 6000; +} diff --git a/MP/Maps/Pod/maps/mp/mp_pod_amb.gsc b/MP/Maps/Pod/maps/mp/mp_pod_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Pod/maps/mp/mp_pod_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Pod/maps/mp/mp_pod_fx.gsc b/MP/Maps/Pod/maps/mp/mp_pod_fx.gsc new file mode 100644 index 0000000..c7c8fd3 --- /dev/null +++ b/MP/Maps/Pod/maps/mp/mp_pod_fx.gsc @@ -0,0 +1,81 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_pod_fx; + +main() +{ + precache_fxanim_props(); + precache_fxanim_props_dlc4(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_pod_fx::main(); +} + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_pod_glass_drop_trail"] = loadfx( "maps/mp_maps/fx_mp_pod_glass_drop_trail" ); + level._effect["fx_mp_pod_glass_drop_runner"] = loadfx( "maps/mp_maps/fx_mp_pod_glass_drop_runner" ); + level._effect["fx_mp_pod_water_spill"] = loadfx( "maps/mp_maps/fx_mp_pod_water_spill" ); + level._effect["fx_mp_pod_water_spill_02"] = loadfx( "maps/mp_maps/fx_mp_pod_water_spill_02" ); + level._effect["fx_mp_pod_water_spill_splash"] = loadfx( "maps/mp_maps/fx_mp_pod_water_spill_splash" ); + level._effect["fx_mp_water_drip_light_shrt"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_shrt" ); + level._effect["fx_mp_water_drip_light_long"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); + level._effect["fx_mp_pod_water_drips"] = loadfx( "maps/mp_maps/fx_mp_pod_water_drips" ); + level._effect["fx_fog_drift_slow"] = loadfx( "fog/fx_fog_drift_slow" ); + level._effect["fx_fog_drift_slow_md"] = loadfx( "fog/fx_fog_drift_slow_md" ); + level._effect["fx_fog_drift_slow_sm"] = loadfx( "fog/fx_fog_drift_slow_sm" ); + level._effect["fx_fog_drift_slow_vista"] = loadfx( "fog/fx_fog_drift_slow_vista" ); + level._effect["fx_insects_swarm_md_light"] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_insects_fireflies_mp"] = loadfx( "bio/insects/fx_insects_fireflies_mp" ); + level._effect["fx_insects_flies_dragonflies"] = loadfx( "bio/insects/fx_insects_flies_dragonflies" ); + level._effect["fx_insects_roaches"] = loadfx( "bio/insects/fx_insects_roaches" ); + level._effect["fx_insects_roaches_fast"] = loadfx( "bio/insects/fx_insects_roaches_fast" ); + level._effect["fx_insects_roaches_short"] = loadfx( "bio/insects/fx_insects_roaches_short" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_lf_mp_pod_sun"] = loadfx( "lens_flares/fx_lf_mp_pod_sun" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim = []; + level.scr_anim["fxanim_props"]["seagull_circle_01"] = %fxanim_gp_seagull_circle_01_anim; + level.scr_anim["fxanim_props"]["seagull_circle_02"] = %fxanim_gp_seagull_circle_02_anim; + level.scr_anim["fxanim_props"]["seagull_circle_03"] = %fxanim_gp_seagull_circle_03_anim; + level.scr_anim["fxanim_props"]["sheet_med"] = %fxanim_gp_cloth_sheet_med_anim; +} + +#using_animtree("fxanim_props_dlc4"); + +precache_fxanim_props_dlc4() +{ + level.scr_anim["fxanim_props_dlc4"]["wire_01"] = %fxanim_mp_pod_wire_01_anim; + level.scr_anim["fxanim_props_dlc4"]["wire_02"] = %fxanim_mp_pod_wire_02_anim; + level.scr_anim["fxanim_props_dlc4"]["wire_03"] = %fxanim_mp_pod_wire_03_anim; + level.scr_anim["fxanim_props_dlc4"]["wire_04"] = %fxanim_mp_pod_wire_04_anim; + level.scr_anim["fxanim_props_dlc4"]["wire_05"] = %fxanim_mp_pod_wire_05_anim; + level.scr_anim["fxanim_props_dlc4"]["wire_06"] = %fxanim_mp_pod_wire_06_anim; + level.scr_anim["fxanim_props_dlc4"]["wire_07"] = %fxanim_mp_pod_wire_07_anim; + level.scr_anim["fxanim_props_dlc4"]["wire_08"] = %fxanim_mp_pod_wire_08_anim; + level.scr_anim["fxanim_props_dlc4"]["wire_09"] = %fxanim_mp_pod_wire_09_anim; + level.scr_anim["fxanim_props_dlc4"]["shirt03"] = %fxanim_gp_shirts03_anim; + level.scr_anim["fxanim_props_dlc4"]["vine_clump_01"] = %fxanim_mp_pod_vine_clump_01_anim; + level.scr_anim["fxanim_props_dlc4"]["vine_clump_02"] = %fxanim_mp_pod_vine_clump_02_anim; + level.scr_anim["fxanim_props_dlc4"]["vine_clump_long"] = %fxanim_mp_pod_vine_clump_long_anim; + level.scr_anim["fxanim_props_dlc4"]["vine_med_leafy"] = %fxanim_mp_pod_vine_med_leafy_anim; + level.scr_anim["fxanim_props_dlc4"]["vine_med_bare"] = %fxanim_mp_pod_vine_med_bare_anim; + level.scr_anim["fxanim_props_dlc4"]["vine_long_leafy"] = %fxanim_mp_pod_vine_long_leafy_anim; + level.scr_anim["fxanim_props_dlc4"]["vine_long_bare"] = %fxanim_mp_pod_vine_long_bare_anim; + level.scr_anim["fxanim_props_dlc4"]["bushy_clump_01"] = %fxanim_mp_pod_bushy_clump_01_anim; + level.scr_anim["fxanim_props_dlc4"]["bushy_clump_02"] = %fxanim_mp_pod_bushy_clump_02_anim; + level.scr_anim["fxanim_props_dlc4"]["vine_loops_pod"] = %fxanim_mp_pod_vine_loops_pod_anim; + level.scr_anim["fxanim_props_dlc4"]["pool_wires"] = %fxanim_mp_pod_pool_wires_anim; +} diff --git a/MP/Maps/Raid/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Raid/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Raid/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Raid/aitype/enemy_dog_mp.gsc b/MP/Maps/Raid/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Raid/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Raid/character/character_mp_german_shepherd.gsc b/MP/Maps/Raid/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Raid/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Raid/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Raid/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Raid/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Raid/clientscripts/mp/createfx/mp_raid_fx.csc b/MP/Maps/Raid/clientscripts/mp/createfx/mp_raid_fx.csc new file mode 100644 index 0000000..65ae0f2 --- /dev/null +++ b/MP/Maps/Raid/clientscripts/mp/createfx/mp_raid_fx.csc @@ -0,0 +1,1307 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_vista_smoke01" ); + ent.v["origin"] = ( -335.014, 38495.6, 415.011 ); + ent.v["angles"] = ( 273, 270, 74.9951 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_vista_smoke01" ); + ent.v["origin"] = ( 385.599, 38027.9, 220.015 ); + ent.v["angles"] = ( 284.073, 333.327, 12 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_vista_smoke01" ); + ent.v["origin"] = ( 5380.19, 36603.4, 811.309 ); + ent.v["angles"] = ( 274.468, 51.6975, -66.5686 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_vista_smoke01" ); + ent.v["origin"] = ( 4341.51, 36784.6, -529.778 ); + ent.v["angles"] = ( 274.759, 307.533, 37.5384 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_vista_fire01" ); + ent.v["origin"] = ( 116.356, 38955.9, -78.9206 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_vista_fire01" ); + ent.v["origin"] = ( -458.839, 38669.5, 446.002 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_vista_fire01" ); + ent.v["origin"] = ( 4262.06, 37479.3, -514.372 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_vista_fire01" ); + ent.v["origin"] = ( 5389.04, 37565.8, 681.796 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_vista_smoke01" ); + ent.v["origin"] = ( -2033.43, 16362.4, -2305.97 ); + ent.v["angles"] = ( 282.124, 331.347, 13.9276 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_vista_fire01" ); + ent.v["origin"] = ( -2055.39, 16765.4, -2494.9 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_vista_fire01" ); + ent.v["origin"] = ( 9126.21, 22911.5, -2575.16 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_vista_smoke01" ); + ent.v["origin"] = ( 9041.08, 22750.7, -2293.29 ); + ent.v["angles"] = ( 275.277, 165.602, -179.473 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_vista_smoke01" ); + ent.v["origin"] = ( -702.686, 28318.9, -2988.36 ); + ent.v["angles"] = ( 273.724, 346.869, -0.744865 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1570.2, 3268.31, 182.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 264.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1458.32, 1837.96, 283.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 2840.29, 2492.75, 229.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 4457.68, 3364.81, 183.125 ); + ent.v["angles"] = ( 48, 269, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 2864.19, 4444.88, 218.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1057.49, 3476.24, 222.721 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 4472.9, 3429.78, 81.125 ); + ent.v["angles"] = ( 0, 272, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 2773.22, 4168.94, 68.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 24.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1839.08, 2982.57, 157.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 357.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 2618.07, 3025.36, 160.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 2249.3, 3280.52, 174.125 ); + ent.v["angles"] = ( 359, 92, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 2042.28, 2969.79, 132.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 2417.61, 2988.05, 132.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 2555.94, 4345.28, 42 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 2035.52, 4437.81, 41 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 267.176, 2543.58, 215.324 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 662.252, 4602.45, 82.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 2256.39, 2170.38, 177.921 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 2227.1, 1483.85, 170.554 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 2548.51, 1674.13, 148.375 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 669.767, 2659.14, 158.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 933.04, 4241.18, 49.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 2470.71, 4065.26, 54.8949 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 2675.31, 2365.71, 193.283 ); + ent.v["angles"] = ( 341.825, 253.03, -113.609 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 1636.66, 2338.39, 197.022 ); + ent.v["angles"] = ( 337.645, 321.61, -96.6763 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 87.1887, 2638.91, 166.092 ); + ent.v["angles"] = ( 339.409, 331.009, 10.0087 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( -252.816, 3026.72, 116.125 ); + ent.v["angles"] = ( 333.165, 20.0037, -109.479 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -83.165, 3138.7, 129.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 444.242, 3244.06, 133.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 783.778, 3266.36, 127.117 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 306.112, 2824.61, 187.802 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 410.621, 2412.94, 199.438 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 103.452, 2576.1, 214.352 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1809.97, 2300.93, 152.472 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 2253.82, 2973.42, 121.358 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 4019.31, 2644.56, 81.3365 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1485.76, 3789.41, 108.642 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 1583.43, 3784.13, 92.0721 ); + ent.v["angles"] = ( 340.973, 148.423, -142.194 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 2130.71, 1911.84, 116.229 ); + ent.v["angles"] = ( 270, 359.684, 7.31557 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 2163.69, 1451.98, 94.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 2556.04, 2819.89, 59 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1938.94, 3148.42, 59 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 2741.53, 2792.23, 147.099 ); + ent.v["angles"] = ( 21.708, 139.467, 177.77 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 3476.35, 3047.28, 85.1716 ); + ent.v["angles"] = ( 26.5851, 127.603, 179.095 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 1396.98, 3614.54, 124.111 ); + ent.v["angles"] = ( 16.5285, 61.7306, 179.079 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 1384.32, 3618.21, 124.939 ); + ent.v["angles"] = ( 17.2037, 115.706, -174.299 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 2743.99, 2782.21, 146.665 ); + ent.v["angles"] = ( 31.433, 230.02, -155.467 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 3484.51, 3046.16, 82.2246 ); + ent.v["angles"] = ( 28.8046, 20.5274, 149.312 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 1477.99, 2228.48, 251.91 ); + ent.v["angles"] = ( 31.4086, 308.503, 0.947976 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 1480.2, 2236.83, 251.82 ); + ent.v["angles"] = ( 32.1257, 50.5291, -9.14066 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 1273.02, 1889.25, 187.277 ); + ent.v["angles"] = ( 31.5844, 127.511, 179.05 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 1282.52, 1888.05, 187.7 ); + ent.v["angles"] = ( 23.2899, 32.8863, 145.556 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 242.026, 3553.63, 131.257 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 695.195, 3094.85, 190.647 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 1274.79, 2006.62, 219.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 2730.94, 2101.33, 178 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 3054.51, 2972.42, 163.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 3845.61, 3052.19, 66 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 521.991, 3847.83, 47.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 118.379, 3142.13, 154.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 654.403, 3159.72, 164 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 707.174, 2169.13, 234.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 947.036, 1543.42, 223.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 1884.75, 4039.39, 47 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 3828.62, 3977.96, 63 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); + ent.v["origin"] = ( -3879.38, 4818.65, 1887.61 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); + ent.v["origin"] = ( -3877.93, 4819.26, 1639.77 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); + ent.v["origin"] = ( 8690.76, 5171.73, 2008.09 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); + ent.v["origin"] = ( 8690.49, 5170.3, 1762.4 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 4673.12, 2616.92, 194.58 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 965.586, 2120.53, 273.757 ); + ent.v["angles"] = ( 270, 359.684, 7.31557 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_raid" ); + ent.v["origin"] = ( 4432.48, 3212.44, 29.125 ); + ent.v["angles"] = ( 300, 112, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_raid" ); + ent.v["origin"] = ( 1568.72, 3097.72, 104.125 ); + ent.v["angles"] = ( 301, 112, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 472.677, 3543.45, 210.105 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 2841.97, 3220.63, 214.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 281.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_raid" ); + ent.v["origin"] = ( 1544.25, 2895.5, 97.125 ); + ent.v["angles"] = ( 300, 112, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2146.67, 4179.49, 23 ); + ent.v["angles"] = ( 270, 354.56, -71.5595 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2157.44, 4232.38, 23 ); + ent.v["angles"] = ( 270, 357.138, -121.138 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2144.8, 4215.62, 23 ); + ent.v["angles"] = ( 270, 4.39871, -112.399 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2174.13, 4143.68, 23 ); + ent.v["angles"] = ( 270, 0, -39 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2157.75, 4159.17, 23 ); + ent.v["angles"] = ( 270, 357.663, -49.6627 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2335.08, 4212.65, 23 ); + ent.v["angles"] = ( 270, 357.797, 101.203 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2335.46, 4179.08, 23 ); + ent.v["angles"] = ( 270, 6.00901, 63.991 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2324.58, 4158.48, 23 ); + ent.v["angles"] = ( 270, 2.5448, 45.4551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2324.37, 4233.47, 23 ); + ent.v["angles"] = ( 270, 1.78991, 122.21 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2308.8, 4247.75, 23 ); + ent.v["angles"] = ( 270, 352.875, 143.125 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_hot_tub_lg" ); + ent.v["origin"] = ( 2169.65, 4198.67, 23 ); + ent.v["angles"] = ( 270, 0, -92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2174.86, 4249.38, 23 ); + ent.v["angles"] = ( 270, 0, -133 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2308.81, 4143.78, 23 ); + ent.v["angles"] = ( 270, 0, 37 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_hot_tub_lg" ); + ent.v["origin"] = ( 2312.64, 4195.25, 23 ); + ent.v["angles"] = ( 270, 0, 88 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1058.62, 2318.52, 198.125 ); + ent.v["angles"] = ( 270, 359.684, 7.31557 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 862.2, 3581, 136.34 ); + ent.v["angles"] = ( 270, 359.684, 7.31557 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1006.62, 3760.8, 138.024 ); + ent.v["angles"] = ( 270, 359.684, 7.31557 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_raid_sun1" ); + ent.v["origin"] = ( -59885.7, 82819.7, 38855 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 4672.32, 2744.75, 194.496 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 4670.92, 2873.66, 194.709 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 4673.6, 3000.55, 193.443 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 4674.44, 3128.55, 194.45 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 4673.27, 3257.52, 194.669 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 4673.47, 3384.18, 193.374 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 4672.08, 3511.71, 193.483 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 3573.59, 3281.82, 48.7316 ); + ent.v["angles"] = ( 347.036, 10.4759, 152.014 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 3775.89, 3476.12, 47.4129 ); + ent.v["angles"] = ( 348.404, 250.521, 5.65722 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4173.32, 3557.12, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4173.06, 3087.33, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4173.66, 2974.91, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4173.85, 2863.77, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4173.75, 2751.49, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4174.05, 2638.94, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4173.77, 2528.19, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4350.43, 3086.69, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4350.16, 2976.39, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4349.73, 2863.83, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4350.24, 2751.48, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4350.21, 2639.29, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4349.9, 2528.07, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4528.31, 2527.97, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4528.33, 2640.91, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4527.73, 2752.88, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4528.54, 2864.9, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4527.59, 2976.2, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4527.96, 3087.72, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4528.22, 3575.97, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3455.01, 2566.52, 159.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3311.11, 2566.21, 159.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3311.71, 2368.27, 159.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3311.94, 2170.06, 159.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3456.08, 2171.55, 159.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3456.76, 2369.99, 159.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 3388.08, 2406.08, 74 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 3777.36, 2338.37, 159.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 3904.21, 2337.48, 159.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4033.09, 2338.31, 159.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4023.42, 2515.77, 180.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4023.98, 2475.35, 180.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_spot_light_picture" ); + ent.v["origin"] = ( 2998.04, 2615.71, 219.091 ); + ent.v["angles"] = ( 89, 359.994, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_spot_light_picture" ); + ent.v["origin"] = ( 2995.96, 2667.16, 220.756 ); + ent.v["angles"] = ( 89, 359.994, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_spot_light_picture" ); + ent.v["origin"] = ( 2996.11, 2719.36, 219.681 ); + ent.v["angles"] = ( 89, 359.994, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_spot_light_picture" ); + ent.v["origin"] = ( 2996.12, 2771.35, 218.942 ); + ent.v["angles"] = ( 89, 359.994, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_spot_light_picture" ); + ent.v["origin"] = ( 2984.31, 2343.12, 234.796 ); + ent.v["angles"] = ( 89, 359.994, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_spot_light_picture" ); + ent.v["origin"] = ( 2931.17, 2342.05, 234.867 ); + ent.v["angles"] = ( 89, 359.994, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_spot_light_picture" ); + ent.v["origin"] = ( 2880.13, 2343.2, 233.887 ); + ent.v["angles"] = ( 89, 359.994, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_spot_light_picture" ); + ent.v["origin"] = ( 2758.9, 2393.12, 234.991 ); + ent.v["angles"] = ( 89, 359.994, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 2905.52, 2707.55, 258.875 ); + ent.v["angles"] = ( 90, 0, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 1635.52, 4393.23, 40.9837 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1417.74, 3343.87, 244.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1345.17, 3343.86, 244.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1095.11, 3404.98, 244.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1095.36, 3553.4, 244.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1444.98, 3549.91, 244.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1485.68, 1819.49, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1422.08, 1819.86, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1422.32, 1757.04, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1485.79, 1756.85, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1486.93, 1693.35, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1421.9, 1693.06, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1422.03, 1631.29, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1486.17, 1630.41, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1422.61, 1544.35, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1485.01, 1544.56, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1486.94, 1480.97, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1422.97, 1479.91, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1343.03, 1544.72, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1344.49, 1480.37, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1279.76, 1544.85, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1279.7, 1479.63, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 3148.26, 2146.19, 327.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 3148.31, 2189.5, 327.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 3148.23, 2233.2, 327.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3631.35, 3256.47, 168 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3685.02, 3281.8, 168 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3733.82, 3320.03, 168 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3773.57, 3367, 168 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3801.08, 3420.76, 168 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3804.35, 3652.71, 168 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3775.95, 3705.73, 168 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3735.49, 3751.35, 168 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3688.88, 3790.17, 168 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3632.56, 3817.05, 168 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 2170.28, 848.559, 110 ); + ent.v["angles"] = ( 313.957, 279.447, 0.749994 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 2313.58, 873.095, 112.254 ); + ent.v["angles"] = ( 313.957, 279.447, 0.749994 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 2253.39, 858.688, 115.831 ); + ent.v["angles"] = ( 313.957, 279.447, 0.749994 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 2213.63, 838.199, 155.075 ); + ent.v["angles"] = ( 346.567, 285.443, 7.64939 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 2209.36, 787.938, 125.494 ); + ent.v["angles"] = ( 313.957, 279.447, 0.749994 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_fire_lg" ); + ent.v["origin"] = ( 2286.19, 708.541, 117.316 ); + ent.v["angles"] = ( 294, 179.999, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_fire_sm" ); + ent.v["origin"] = ( 2151.25, 809.904, 143.179 ); + ent.v["angles"] = ( 291.203, 187.763, 171.68 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke" ); + ent.v["origin"] = ( 2338.18, 707.495, 110.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 278.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 2261.84, 868.519, 119.843 ); + ent.v["angles"] = ( 313.957, 279.447, 0.749994 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 2132.15, 1608.04, 78 ); + ent.v["angles"] = ( 270, 0, 36 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 2086.79, 1716.23, 77 ); + ent.v["angles"] = ( 273, 133, -143 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 2131.11, 1825.06, 77 ); + ent.v["angles"] = ( 275.582, 111.477, -166.531 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 2240.62, 1869.87, 77 ); + ent.v["angles"] = ( 273, 133, 139 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 2348.97, 1823.61, 77 ); + ent.v["angles"] = ( 273, 133, 95 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 2393.28, 1715.72, 77 ); + ent.v["angles"] = ( 273, 133, 47 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 2347.62, 1607.82, 77 ); + ent.v["angles"] = ( 273, 133, -8 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 2239.34, 1564.15, 77 ); + ent.v["angles"] = ( 273.144, 214.224, -132.142 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_car_smoke" ); + ent.v["origin"] = ( 2313.97, 636.449, 110.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 3606.32, 3329.83, 35 ); + ent.v["angles"] = ( 288, 314, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 3640.36, 3374.19, 31.0136 ); + ent.v["angles"] = ( 288, 314, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 3684.35, 3418.17, 30.2504 ); + ent.v["angles"] = ( 288, 314, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 3728.42, 3462.24, 30.6379 ); + ent.v["angles"] = ( 288, 314, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 3711.12, 3626.14, 31.3475 ); + ent.v["angles"] = ( 283, 45, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 3661.48, 3682.14, 31 ); + ent.v["angles"] = ( 283, 45, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 3610.37, 3737.47, 32 ); + ent.v["angles"] = ( 283, 45, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_fire_lg" ); + ent.v["origin"] = ( 2212.83, 826.272, 121.344 ); + ent.v["angles"] = ( 276, 179.999, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 2203.52, 849.188, 160.515 ); + ent.v["angles"] = ( 288.384, 8.82536, -63.2924 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1264.14, 1388.21, 181.378 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3582.84, 3240.6, 44.4691 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 9.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3817.86, 3466.07, 43.9789 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 259.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3816.57, 3606.79, 48.9979 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3581.82, 3831.04, 48.9828 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 350.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1184.24, 3543.86, 248.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1280.03, 3544.18, 248.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1374.75, 3542.83, 248.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1277.81, 3417.67, 248.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1182.26, 3419.44, 248.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1374.08, 3417.39, 248.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 3265.41, 2388, 58.0346 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 3267.62, 2152.43, 58.8597 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 3497.83, 2153.25, 57.6806 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1370.72, 1631.4, 318.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1367.81, 1694.47, 318.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1369.29, 1756.91, 319.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1368.01, 1818.1, 318.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_fire_lg" ); + ent.v["origin"] = ( 2321.64, 823.737, 117.638 ); + ent.v["angles"] = ( 293.967, 176.932, 176.933 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1392.31, 3296.93, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1276.45, 3296.77, 271.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1276.12, 3187.83, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1391.68, 3187.09, 271.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1392.6, 3067.08, 271.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1329.26, 3066.71, 271.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1309.97, 3033.47, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1310.65, 2963.19, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1329.6, 2932.58, 271.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1393, 2930.5, 271.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1566.79, 2850.57, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1472.7, 2850.46, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1393.09, 2850.51, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1277.19, 2850.46, 271.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1197.66, 2828.79, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1197.09, 2914.07, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1037.95, 2914.38, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1038.28, 2829.86, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1613.13, 3023.21, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1611.61, 3102.04, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1611.62, 3183.2, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1611.23, 3250.95, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; +} diff --git a/MP/Maps/Raid/clientscripts/mp/mp_raid.csc b/MP/Maps/Raid/clientscripts/mp/mp_raid.csc new file mode 100644 index 0000000..ba92708 --- /dev/null +++ b/MP/Maps/Raid/clientscripts/mp/mp_raid.csc @@ -0,0 +1,24 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_raid_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_raid_amb; + +main() +{ + level.worldmapx = 2249; + level.worldmapy = 4525; + level.worldlat = 34.1195; + level.worldlong = -118.35; + clientscripts\mp\_load::main(); + clientscripts\mp\mp_raid_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_raid_amb::main(); + setsaveddvar( "compassmaxrange", "2100" ); + waitforclient( 0 ); +/# + println( "*** Client : mp_raid running..." ); +#/ +} diff --git a/MP/Maps/Raid/clientscripts/mp/mp_raid_amb.csc b/MP/Maps/Raid/clientscripts/mp/mp_raid_amb.csc new file mode 100644 index 0000000..55c3cc4 --- /dev/null +++ b/MP/Maps/Raid/clientscripts/mp/mp_raid_amb.csc @@ -0,0 +1,88 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "raid_outdoor", 1 ); + setambientroomtone( "raid_outdoor", "amb_wind_extreior_2d", 0.55, 1 ); + setambientroomreverb( "raid_outdoor", "raid_outdoor", 1, 1 ); + setambientroomcontext( "raid_outdoor", "ringoff_plr", "outdoor" ); + declareambientroom( "raid_partial_room" ); + setambientroomreverb( "raid_partial_room", "raid_partial_room", 1, 1 ); + setambientroomcontext( "raid_partial_room", "ringoff_plr", "outdoor" ); + declareambientroom( "raid_basketball_room" ); + setambientroomreverb( "raid_basketball_room", "raid_small_room", 1, 1 ); + setambientroomcontext( "raid_basketball_room", "ringoff_plr", "indoor" ); + declareambientroom( "raid_round_pool_rm" ); + setambientroomreverb( "raid_round_pool_rm", "raid_small_room", 1, 1 ); + setambientroomcontext( "raid_round_pool_rm", "ringoff_plr", "indoor" ); + declareambientroom( "raid_lounge" ); + setambientroomreverb( "raid_lounge", "raid_small_room", 1, 1 ); + setambientroomcontext( "raid_lounge", "ringoff_plr", "outdoor" ); + declareambientroom( "raid_bedroom" ); + setambientroomreverb( "raid_bedroom", "raid_small_room", 1, 1 ); + setambientroomcontext( "raid_bedroom", "ringoff_plr", "indoor" ); + declareambientroom( "raid_bedroom_partial" ); + setambientroomreverb( "raid_bedroom_partial", "raid_small_room", 1, 1 ); + setambientroomcontext( "raid_bedroom_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "raid_garage" ); + setambientroomreverb( "raid_garage", "raid_garage", 1, 1 ); + setambientroomcontext( "raid_garage", "ringoff_plr", "indoor" ); + declareambientroom( "raid_garage_partial" ); + setambientroomreverb( "raid_garage_partial", "raid_garage", 1, 1 ); + setambientroomcontext( "raid_garage_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "raid_arcade_rm" ); + setambientroomreverb( "raid_arcade_rm", "raid_medium_room", 1, 1 ); + setambientroomcontext( "raid_arcade_rm", "ringoff_plr", "indoor" ); + declareambientroom( "raid_driveway_overhang" ); + setambientroomreverb( "raid_driveway_overhang", "raid_garage", 1, 1 ); + setambientroomcontext( "raid_driveway_overhang", "ringoff_plr", "outdoor" ); + declareambientroom( "raid_house_entrance" ); + setambientroomreverb( "raid_house_entrance", "raid_medium_room", 1, 1 ); + setambientroomcontext( "raid_house_entrance", "ringoff_plr", "indoor" ); + declareambientroom( "raid_house_entrance_partial" ); + setambientroomreverb( "raid_house_entrance_partial", "raid_medium_room", 1, 1 ); + setambientroomcontext( "raid_house_entrance_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "raid_house_office" ); + setambientroomreverb( "raid_house_office", "raid_small_room", 1, 1 ); + setambientroomcontext( "raid_house_office", "ringoff_plr", "indoor" ); + declareambientroom( "raid_kitchen" ); + setambientroomreverb( "raid_kitchen", "raid_small_room", 1, 1 ); + setambientroomcontext( "raid_kitchen", "ringoff_plr", "indoor" ); + declareambientroom( "raid_kitchen_partial" ); + setambientroomreverb( "raid_kitchen_partial", "raid_small_room", 1, 1 ); + setambientroomcontext( "raid_kitchen_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "raid_library" ); + setambientroomreverb( "raid_library", "raid_small_room", 1, 1 ); + setambientroomcontext( "raid_library", "ringoff_plr", "indoor" ); + declareambientroom( "raid_library_partial" ); + setambientroomreverb( "raid_library_partial", "raid_small_room", 1, 1 ); + setambientroomcontext( "raid_library_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "raid_laundry_rm" ); + setambientroomreverb( "raid_laundry_rm", "raid_small_room", 1, 1 ); + setambientroomcontext( "raid_laundry_rm", "ringoff_plr", "indoor" ); + declareambientroom( "raid_laundry_rm_partial" ); + setambientroomreverb( "raid_laundry_rm_partial", "raid_small_room", 1, 1 ); + setambientroomcontext( "raid_laundry_rm_partial", "ringoff_plr", "outdoor" ); + thread snd_start_autofraid_audio(); + thread snd_play_loopers(); +} + +snd_play_loopers() +{ + playloopat( "amb_tv_static", ( 1713, 4185, 63 ) ); + playloopat( "amb_tv_static", ( 1609, 4168, 61 ) ); + playloopat( "amb_umbrella", ( 1268, 4490, 100 ) ); +} + +snd_start_autofraid_audio() +{ + snd_play_auto_fx( "fx_insects_swarm_lg_light", "amb_flies", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_raid_spot_light", "amb_spot_light", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_raid_hot_tub_sm", "amb_jacuzzi_bubbles", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_fumes_vent_xsm_int", "amb_vent_exhaust", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_slums_fire_lg", "amb_fire", 0, 0, 0, 0 ); +} diff --git a/MP/Maps/Raid/clientscripts/mp/mp_raid_fx.csc b/MP/Maps/Raid/clientscripts/mp/mp_raid_fx.csc new file mode 100644 index 0000000..caf1b47 --- /dev/null +++ b/MP/Maps/Raid/clientscripts/mp/mp_raid_fx.csc @@ -0,0 +1,57 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\createfx\mp_raid_fx; +#include clientscripts\mp\_fx; + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_raid_mist"] = loadfx( "maps/mp_maps/fx_mp_raid_mist" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_insects_butterfly_flutter"] = loadfx( "bio/insects/fx_insects_butterfly_flutter" ); + level._effect["fx_mp_fumes_vent_xsm_int"] = loadfx( "maps/mp_maps/fx_mp_fumes_vent_xsm_int" ); + level._effect["fx_mp_raid_mist_water"] = loadfx( "maps/mp_maps/fx_mp_raid_mist_water" ); + level._effect["fx_paper_interior_short"] = loadfx( "debris/fx_paper_interior_short" ); + level._effect["fx_mp_raid_vista_smoke01"] = loadfx( "maps/mp_maps/fx_mp_raid_vista_smoke01" ); + level._effect["fx_mp_raid_vista_fire01"] = loadfx( "maps/mp_maps/fx_mp_raid_vista_fire01" ); + level._effect["fx_mp_slums_dark_smoke_sm"] = loadfx( "maps/mp_maps/fx_mp_slums_dark_smoke_sm" ); + level._effect["fx_mp_slums_fire_sm"] = loadfx( "maps/mp_maps/fx_mp_slums_fire_sm" ); + level._effect["fx_mp_slums_fire_lg"] = loadfx( "maps/mp_maps/fx_mp_slums_fire_lg" ); + level._effect["fx_mp_slums_dark_smoke"] = loadfx( "maps/mp_maps/fx_mp_slums_dark_smoke" ); + level._effect["fx_mp_village_car_smoke"] = loadfx( "maps/mp_maps/fx_mp_village_car_smoke" ); + level._effect["fx_raid_hot_tub_sm"] = loadfx( "water/fx_raid_hot_tub_sm" ); + level._effect["fx_raid_hot_tub_lg"] = loadfx( "water/fx_raid_hot_tub_lg" ); + level._effect["fx_light_beacon_red_blink_fst"] = loadfx( "light/fx_light_beacon_red_blink_fst" ); + level._effect["fx_light_god_ray_mp_raid"] = loadfx( "env/light/fx_light_god_ray_mp_raid" ); + level._effect["fx_raid_spot_light"] = loadfx( "light/fx_raid_spot_light" ); + level._effect["fx_mp_nightclub_flr_glare"] = loadfx( "maps/mp_maps/fx_mp_nightclub_flr_glare" ); + level._effect["fx_raid_spot_light_picture"] = loadfx( "light/fx_raid_spot_light_picture" ); + level._effect["fx_light_recessed_cool_sm_soft"] = loadfx( "light/fx_light_recessed_cool_sm_soft" ); + level._effect["fx_lf_mp_raid_sun1"] = loadfx( "lens_flares/fx_lf_mp_raid_sun1" ); +} + +main() +{ + clientscripts\mp\createfx\mp_raid_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fxanim_props(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["umbrella"] = %fxanim_gp_umbrella_01_anim; + level.scr_anim["fxanim_props"]["dryer_loop"] = %fxanim_gp_dryer_loop_anim; +} diff --git a/MP/Maps/Raid/maps/mp/createart/mp_raid_art.gsc b/MP/Maps/Raid/maps/mp/createart/mp_raid_art.gsc new file mode 100644 index 0000000..2590b43 --- /dev/null +++ b/MP/Maps/Raid/maps/mp/createart/mp_raid_art.gsc @@ -0,0 +1,27 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + level.tweakfile = 1; + setdvar( "scr_fog_exp_halfplane", "3759.28" ); + setdvar( "scr_fog_exp_halfheight", "243.735" ); + setdvar( "scr_fog_nearplane", "601.593" ); + setdvar( "scr_fog_red", "0.806694" ); + setdvar( "scr_fog_green", "0.962521" ); + setdvar( "scr_fog_blue", "0.9624" ); + setdvar( "scr_fog_baseheight", "-475.268" ); + setdvar( "visionstore_glowTweakEnable", "0" ); + setdvar( "visionstore_glowTweakRadius0", "5" ); + setdvar( "visionstore_glowTweakRadius1", "" ); + setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); + setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); + setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); + setdvar( "visionstore_glowTweakBloomIntensity1", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); + visionsetnaked( "mp_raid", 1 ); + setdvar( "r_lightGridEnableTweaks", 1 ); + setdvar( "r_lightGridIntensity", 1.0 ); + setdvar( "r_lightGridContrast", 0 ); +} diff --git a/MP/Maps/Raid/maps/mp/createfx/mp_raid_fx.gsc b/MP/Maps/Raid/maps/mp/createfx/mp_raid_fx.gsc new file mode 100644 index 0000000..0959261 --- /dev/null +++ b/MP/Maps/Raid/maps/mp/createfx/mp_raid_fx.gsc @@ -0,0 +1,1307 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_vista_smoke01" ); + ent.v["origin"] = ( -335.014, 38495.6, 415.011 ); + ent.v["angles"] = ( 273, 270, 74.9951 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_vista_smoke01" ); + ent.v["origin"] = ( 385.599, 38027.9, 220.015 ); + ent.v["angles"] = ( 284.073, 333.327, 12 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_vista_smoke01" ); + ent.v["origin"] = ( 5380.19, 36603.4, 811.309 ); + ent.v["angles"] = ( 274.468, 51.6975, -66.5686 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_vista_smoke01" ); + ent.v["origin"] = ( 4341.51, 36784.6, -529.778 ); + ent.v["angles"] = ( 274.759, 307.533, 37.5384 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_vista_fire01" ); + ent.v["origin"] = ( 116.356, 38955.9, -78.9206 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_vista_fire01" ); + ent.v["origin"] = ( -458.839, 38669.5, 446.002 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_vista_fire01" ); + ent.v["origin"] = ( 4262.06, 37479.3, -514.372 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_vista_fire01" ); + ent.v["origin"] = ( 5389.04, 37565.8, 681.796 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_vista_smoke01" ); + ent.v["origin"] = ( -2033.43, 16362.4, -2305.97 ); + ent.v["angles"] = ( 282.124, 331.347, 13.9276 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_vista_fire01" ); + ent.v["origin"] = ( -2055.39, 16765.4, -2494.9 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_vista_fire01" ); + ent.v["origin"] = ( 9126.21, 22911.5, -2575.16 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_vista_smoke01" ); + ent.v["origin"] = ( 9041.08, 22750.7, -2293.29 ); + ent.v["angles"] = ( 275.277, 165.602, -179.473 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_vista_smoke01" ); + ent.v["origin"] = ( -702.686, 28318.9, -2988.36 ); + ent.v["angles"] = ( 273.724, 346.869, -0.744865 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1570.2, 3268.31, 182.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 264.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1458.32, 1837.96, 283.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 2840.29, 2492.75, 229.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 4457.68, 3364.81, 183.125 ); + ent.v["angles"] = ( 48, 269, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 2864.19, 4444.88, 218.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1057.49, 3476.24, 222.721 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 4472.9, 3429.78, 81.125 ); + ent.v["angles"] = ( 0, 272, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 2773.22, 4168.94, 68.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 24.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1839.08, 2982.57, 157.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 357.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 2618.07, 3025.36, 160.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 2249.3, 3280.52, 174.125 ); + ent.v["angles"] = ( 359, 92, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 2042.28, 2969.79, 132.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 2417.61, 2988.05, 132.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 2555.94, 4345.28, 42 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 2035.52, 4437.81, 41 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 267.176, 2543.58, 215.324 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 662.252, 4602.45, 82.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 2256.39, 2170.38, 177.921 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 2227.1, 1483.85, 170.554 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 2548.51, 1674.13, 148.375 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 669.767, 2659.14, 158.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 933.04, 4241.18, 49.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 2470.71, 4065.26, 54.8949 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 2675.31, 2365.71, 193.283 ); + ent.v["angles"] = ( 341.825, 253.03, -113.609 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 1636.66, 2338.39, 197.022 ); + ent.v["angles"] = ( 337.645, 321.61, -96.6763 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 87.1887, 2638.91, 166.092 ); + ent.v["angles"] = ( 339.409, 331.009, 10.0087 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( -252.816, 3026.72, 116.125 ); + ent.v["angles"] = ( 333.165, 20.0037, -109.479 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -83.165, 3138.7, 129.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 444.242, 3244.06, 133.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 783.778, 3266.36, 127.117 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 306.112, 2824.61, 187.802 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 410.621, 2412.94, 199.438 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 103.452, 2576.1, 214.352 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1809.97, 2300.93, 152.472 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 2253.82, 2973.42, 121.358 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 4019.31, 2644.56, 81.3365 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1485.76, 3789.41, 108.642 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 1583.43, 3784.13, 92.0721 ); + ent.v["angles"] = ( 340.973, 148.423, -142.194 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 2130.71, 1911.84, 116.229 ); + ent.v["angles"] = ( 270, 359.684, 7.31557 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 2163.69, 1451.98, 94.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 2556.04, 2819.89, 59 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1938.94, 3148.42, 59 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 2741.53, 2792.23, 147.099 ); + ent.v["angles"] = ( 21.708, 139.467, 177.77 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 3476.35, 3047.28, 85.1716 ); + ent.v["angles"] = ( 26.5851, 127.603, 179.095 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 1396.98, 3614.54, 124.111 ); + ent.v["angles"] = ( 16.5285, 61.7306, 179.079 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 1384.32, 3618.21, 124.939 ); + ent.v["angles"] = ( 17.2037, 115.706, -174.299 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 2743.99, 2782.21, 146.665 ); + ent.v["angles"] = ( 31.433, 230.02, -155.467 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 3484.51, 3046.16, 82.2246 ); + ent.v["angles"] = ( 28.8046, 20.5274, 149.312 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 1477.99, 2228.48, 251.91 ); + ent.v["angles"] = ( 31.4086, 308.503, 0.947976 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 1480.2, 2236.83, 251.82 ); + ent.v["angles"] = ( 32.1257, 50.5291, -9.14066 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 1273.02, 1889.25, 187.277 ); + ent.v["angles"] = ( 31.5844, 127.511, 179.05 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 1282.52, 1888.05, 187.7 ); + ent.v["angles"] = ( 23.2899, 32.8863, 145.556 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 242.026, 3553.63, 131.257 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 695.195, 3094.85, 190.647 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 1274.79, 2006.62, 219.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 2730.94, 2101.33, 178 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 3054.51, 2972.42, 163.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 3845.61, 3052.19, 66 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 521.991, 3847.83, 47.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 118.379, 3142.13, 154.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 654.403, 3159.72, 164 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 707.174, 2169.13, 234.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 947.036, 1543.42, 223.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 1884.75, 4039.39, 47 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 3828.62, 3977.96, 63 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); + ent.v["origin"] = ( -3879.38, 4818.65, 1887.61 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); + ent.v["origin"] = ( -3877.93, 4819.26, 1639.77 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); + ent.v["origin"] = ( 8690.76, 5171.73, 2008.09 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); + ent.v["origin"] = ( 8690.49, 5170.3, 1762.4 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 4673.12, 2616.92, 194.58 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 965.586, 2120.53, 273.757 ); + ent.v["angles"] = ( 270, 359.684, 7.31557 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_raid" ); + ent.v["origin"] = ( 4432.48, 3212.44, 29.125 ); + ent.v["angles"] = ( 300, 112, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_raid" ); + ent.v["origin"] = ( 1568.72, 3097.72, 104.125 ); + ent.v["angles"] = ( 301, 112, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 472.677, 3543.45, 210.105 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 2841.97, 3220.63, 214.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 281.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_raid" ); + ent.v["origin"] = ( 1544.25, 2895.5, 97.125 ); + ent.v["angles"] = ( 300, 112, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2146.67, 4179.49, 23 ); + ent.v["angles"] = ( 270, 354.56, -71.5595 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2157.44, 4232.38, 23 ); + ent.v["angles"] = ( 270, 357.138, -121.138 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2144.8, 4215.62, 23 ); + ent.v["angles"] = ( 270, 4.39871, -112.399 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2174.13, 4143.68, 23 ); + ent.v["angles"] = ( 270, 0, -39 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2157.75, 4159.17, 23 ); + ent.v["angles"] = ( 270, 357.663, -49.6627 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2335.08, 4212.65, 23 ); + ent.v["angles"] = ( 270, 357.797, 101.203 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2335.46, 4179.08, 23 ); + ent.v["angles"] = ( 270, 6.00901, 63.991 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2324.58, 4158.48, 23 ); + ent.v["angles"] = ( 270, 2.5448, 45.4551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2324.37, 4233.47, 23 ); + ent.v["angles"] = ( 270, 1.78991, 122.21 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2308.8, 4247.75, 23 ); + ent.v["angles"] = ( 270, 352.875, 143.125 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_hot_tub_lg" ); + ent.v["origin"] = ( 2169.65, 4198.67, 23 ); + ent.v["angles"] = ( 270, 0, -92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2174.86, 4249.38, 23 ); + ent.v["angles"] = ( 270, 0, -133 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); + ent.v["origin"] = ( 2308.81, 4143.78, 23 ); + ent.v["angles"] = ( 270, 0, 37 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_hot_tub_lg" ); + ent.v["origin"] = ( 2312.64, 4195.25, 23 ); + ent.v["angles"] = ( 270, 0, 88 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1058.62, 2318.52, 198.125 ); + ent.v["angles"] = ( 270, 359.684, 7.31557 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 862.2, 3581, 136.34 ); + ent.v["angles"] = ( 270, 359.684, 7.31557 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1006.62, 3760.8, 138.024 ); + ent.v["angles"] = ( 270, 359.684, 7.31557 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_raid_sun1" ); + ent.v["origin"] = ( -59885.7, 82819.7, 38855 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 4672.32, 2744.75, 194.496 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 4670.92, 2873.66, 194.709 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 4673.6, 3000.55, 193.443 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 4674.44, 3128.55, 194.45 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 4673.27, 3257.52, 194.669 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 4673.47, 3384.18, 193.374 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 4672.08, 3511.71, 193.483 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 3573.59, 3281.82, 48.7316 ); + ent.v["angles"] = ( 347.036, 10.4759, 152.014 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); + ent.v["origin"] = ( 3775.89, 3476.12, 47.4129 ); + ent.v["angles"] = ( 348.404, 250.521, 5.65722 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4173.32, 3557.12, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4173.06, 3087.33, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4173.66, 2974.91, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4173.85, 2863.77, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4173.75, 2751.49, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4174.05, 2638.94, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4173.77, 2528.19, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4350.43, 3086.69, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4350.16, 2976.39, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4349.73, 2863.83, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4350.24, 2751.48, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4350.21, 2639.29, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4349.9, 2528.07, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4528.31, 2527.97, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4528.33, 2640.91, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4527.73, 2752.88, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4528.54, 2864.9, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4527.59, 2976.2, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4527.96, 3087.72, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4528.22, 3575.97, 207.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3455.01, 2566.52, 159.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3311.11, 2566.21, 159.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3311.71, 2368.27, 159.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3311.94, 2170.06, 159.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3456.08, 2171.55, 159.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3456.76, 2369.99, 159.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 3388.08, 2406.08, 74 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 3777.36, 2338.37, 159.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 3904.21, 2337.48, 159.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4033.09, 2338.31, 159.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4023.42, 2515.77, 180.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 4023.98, 2475.35, 180.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_spot_light_picture" ); + ent.v["origin"] = ( 2998.04, 2615.71, 219.091 ); + ent.v["angles"] = ( 89, 359.994, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_spot_light_picture" ); + ent.v["origin"] = ( 2995.96, 2667.16, 220.756 ); + ent.v["angles"] = ( 89, 359.994, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_spot_light_picture" ); + ent.v["origin"] = ( 2996.11, 2719.36, 219.681 ); + ent.v["angles"] = ( 89, 359.994, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_spot_light_picture" ); + ent.v["origin"] = ( 2996.12, 2771.35, 218.942 ); + ent.v["angles"] = ( 89, 359.994, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_spot_light_picture" ); + ent.v["origin"] = ( 2984.31, 2343.12, 234.796 ); + ent.v["angles"] = ( 89, 359.994, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_spot_light_picture" ); + ent.v["origin"] = ( 2931.17, 2342.05, 234.867 ); + ent.v["angles"] = ( 89, 359.994, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_spot_light_picture" ); + ent.v["origin"] = ( 2880.13, 2343.2, 233.887 ); + ent.v["angles"] = ( 89, 359.994, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_spot_light_picture" ); + ent.v["origin"] = ( 2758.9, 2393.12, 234.991 ); + ent.v["angles"] = ( 89, 359.994, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 2905.52, 2707.55, 258.875 ); + ent.v["angles"] = ( 90, 0, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist" ); + ent.v["origin"] = ( 1635.52, 4393.23, 40.9837 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1417.74, 3343.87, 244.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1345.17, 3343.86, 244.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1095.11, 3404.98, 244.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1095.36, 3553.4, 244.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1444.98, 3549.91, 244.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1485.68, 1819.49, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1422.08, 1819.86, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1422.32, 1757.04, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1485.79, 1756.85, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1486.93, 1693.35, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1421.9, 1693.06, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1422.03, 1631.29, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1486.17, 1630.41, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1422.61, 1544.35, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1485.01, 1544.56, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1486.94, 1480.97, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1422.97, 1479.91, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1343.03, 1544.72, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1344.49, 1480.37, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1279.76, 1544.85, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1279.7, 1479.63, 356.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 3148.26, 2146.19, 327.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 3148.31, 2189.5, 327.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 3148.23, 2233.2, 327.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3631.35, 3256.47, 168 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3685.02, 3281.8, 168 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3733.82, 3320.03, 168 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3773.57, 3367, 168 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3801.08, 3420.76, 168 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3804.35, 3652.71, 168 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3775.95, 3705.73, 168 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3735.49, 3751.35, 168 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3688.88, 3790.17, 168 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3632.56, 3817.05, 168 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 2170.28, 848.559, 110 ); + ent.v["angles"] = ( 313.957, 279.447, 0.749994 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 2313.58, 873.095, 112.254 ); + ent.v["angles"] = ( 313.957, 279.447, 0.749994 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 2253.39, 858.688, 115.831 ); + ent.v["angles"] = ( 313.957, 279.447, 0.749994 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 2213.63, 838.199, 155.075 ); + ent.v["angles"] = ( 346.567, 285.443, 7.64939 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 2209.36, 787.938, 125.494 ); + ent.v["angles"] = ( 313.957, 279.447, 0.749994 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_fire_lg" ); + ent.v["origin"] = ( 2286.19, 708.541, 117.316 ); + ent.v["angles"] = ( 294, 179.999, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_fire_sm" ); + ent.v["origin"] = ( 2151.25, 809.904, 143.179 ); + ent.v["angles"] = ( 291.203, 187.763, 171.68 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke" ); + ent.v["origin"] = ( 2338.18, 707.495, 110.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 278.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 2261.84, 868.519, 119.843 ); + ent.v["angles"] = ( 313.957, 279.447, 0.749994 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 2132.15, 1608.04, 78 ); + ent.v["angles"] = ( 270, 0, 36 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 2086.79, 1716.23, 77 ); + ent.v["angles"] = ( 273, 133, -143 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 2131.11, 1825.06, 77 ); + ent.v["angles"] = ( 275.582, 111.477, -166.531 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 2240.62, 1869.87, 77 ); + ent.v["angles"] = ( 273, 133, 139 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 2348.97, 1823.61, 77 ); + ent.v["angles"] = ( 273, 133, 95 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 2393.28, 1715.72, 77 ); + ent.v["angles"] = ( 273, 133, 47 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 2347.62, 1607.82, 77 ); + ent.v["angles"] = ( 273, 133, -8 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 2239.34, 1564.15, 77 ); + ent.v["angles"] = ( 273.144, 214.224, -132.142 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_car_smoke" ); + ent.v["origin"] = ( 2313.97, 636.449, 110.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 3606.32, 3329.83, 35 ); + ent.v["angles"] = ( 288, 314, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 3640.36, 3374.19, 31.0136 ); + ent.v["angles"] = ( 288, 314, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 3684.35, 3418.17, 30.2504 ); + ent.v["angles"] = ( 288, 314, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 3728.42, 3462.24, 30.6379 ); + ent.v["angles"] = ( 288, 314, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 3711.12, 3626.14, 31.3475 ); + ent.v["angles"] = ( 283, 45, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 3661.48, 3682.14, 31 ); + ent.v["angles"] = ( 283, 45, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); + ent.v["origin"] = ( 3610.37, 3737.47, 32 ); + ent.v["angles"] = ( 283, 45, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_fire_lg" ); + ent.v["origin"] = ( 2212.83, 826.272, 121.344 ); + ent.v["angles"] = ( 276, 179.999, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 2203.52, 849.188, 160.515 ); + ent.v["angles"] = ( 288.384, 8.82536, -63.2924 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1264.14, 1388.21, 181.378 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3582.84, 3240.6, 44.4691 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 9.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3817.86, 3466.07, 43.9789 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 259.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3816.57, 3606.79, 48.9979 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 3581.82, 3831.04, 48.9828 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 350.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1184.24, 3543.86, 248.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1280.03, 3544.18, 248.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1374.75, 3542.83, 248.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1277.81, 3417.67, 248.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1182.26, 3419.44, 248.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); + ent.v["origin"] = ( 1374.08, 3417.39, 248.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 3265.41, 2388, 58.0346 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 3267.62, 2152.43, 58.8597 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_raid_spot_light" ); + ent.v["origin"] = ( 3497.83, 2153.25, 57.6806 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1370.72, 1631.4, 318.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1367.81, 1694.47, 318.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1369.29, 1756.91, 319.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1368.01, 1818.1, 318.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_fire_lg" ); + ent.v["origin"] = ( 2321.64, 823.737, 117.638 ); + ent.v["angles"] = ( 293.967, 176.932, 176.933 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1392.31, 3296.93, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1276.45, 3296.77, 271.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1276.12, 3187.83, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1391.68, 3187.09, 271.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1392.6, 3067.08, 271.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1329.26, 3066.71, 271.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1309.97, 3033.47, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1310.65, 2963.19, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1329.6, 2932.58, 271.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1393, 2930.5, 271.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1566.79, 2850.57, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1472.7, 2850.46, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1393.09, 2850.51, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1277.19, 2850.46, 271.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1197.66, 2828.79, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1197.09, 2914.07, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1037.95, 2914.38, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1038.28, 2829.86, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1613.13, 3023.21, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1611.61, 3102.04, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1611.62, 3183.2, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["origin"] = ( 1611.23, 3250.95, 270.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; +} diff --git a/MP/Maps/Raid/maps/mp/mp_raid.gsc b/MP/Maps/Raid/maps/mp/mp_raid.gsc new file mode 100644 index 0000000..e260c31 --- /dev/null +++ b/MP/Maps/Raid/maps/mp/mp_raid.gsc @@ -0,0 +1,53 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_raid_fx; +#include maps\mp\_load; +#include maps\mp\mp_raid_amb; +#include maps\mp\_compass; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_raid_fx::main(); + maps\mp\_load::main(); + maps\mp\mp_raid_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_raid" ); + level thread water_trigger_init(); +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "1870", reset_dvars ); +} + +water_trigger_init() +{ + triggers = getentarray( "water_killbrush", "targetname" ); + + foreach ( trigger in triggers ) + trigger thread player_splash_think(); +} + +player_splash_think() +{ + for (;;) + { + self waittill( "trigger", entity ); + + if ( isplayer( entity ) && isalive( entity ) ) + self thread trigger_thread( entity, ::player_water_fx ); + } +} + +player_water_fx( player, endon_condition ) +{ + maxs = self.origin + self getmaxs(); + + if ( maxs[2] < 0 ) + maxs += vectorscale( ( 0, 0, 1 ), 5.0 ); + + origin = ( player.origin[0], player.origin[1], maxs[2] ); + playfx( level._effect["water_splash_sm"], origin ); +} diff --git a/MP/Maps/Raid/maps/mp/mp_raid_amb.gsc b/MP/Maps/Raid/maps/mp/mp_raid_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Raid/maps/mp/mp_raid_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Raid/maps/mp/mp_raid_fx.gsc b/MP/Maps/Raid/maps/mp/mp_raid_fx.gsc new file mode 100644 index 0000000..7d91c08 --- /dev/null +++ b/MP/Maps/Raid/maps/mp/mp_raid_fx.gsc @@ -0,0 +1,54 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_raid_fx; +#include maps\mp\createart\mp_raid_art; + +main() +{ + precache_fxanim_props(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_raid_fx::main(); + maps\mp\createart\mp_raid_art::main(); +} + +precache_scripted_fx() +{ + level._effect["water_splash_sm"] = loadfx( "bio/player/fx_player_water_splash_mp_sm" ); +} + +precache_createfx_fx() +{ + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_raid_mist"] = loadfx( "maps/mp_maps/fx_mp_raid_mist" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_insects_butterfly_flutter"] = loadfx( "bio/insects/fx_insects_butterfly_flutter" ); + level._effect["fx_mp_fumes_vent_xsm_int"] = loadfx( "maps/mp_maps/fx_mp_fumes_vent_xsm_int" ); + level._effect["fx_mp_raid_mist_water"] = loadfx( "maps/mp_maps/fx_mp_raid_mist_water" ); + level._effect["fx_paper_interior_short"] = loadfx( "debris/fx_paper_interior_short" ); + level._effect["fx_mp_raid_vista_smoke01"] = loadfx( "maps/mp_maps/fx_mp_raid_vista_smoke01" ); + level._effect["fx_mp_raid_vista_fire01"] = loadfx( "maps/mp_maps/fx_mp_raid_vista_fire01" ); + level._effect["fx_mp_slums_dark_smoke_sm"] = loadfx( "maps/mp_maps/fx_mp_slums_dark_smoke_sm" ); + level._effect["fx_mp_slums_fire_sm"] = loadfx( "maps/mp_maps/fx_mp_slums_fire_sm" ); + level._effect["fx_mp_slums_fire_lg"] = loadfx( "maps/mp_maps/fx_mp_slums_fire_lg" ); + level._effect["fx_mp_slums_dark_smoke"] = loadfx( "maps/mp_maps/fx_mp_slums_dark_smoke" ); + level._effect["fx_mp_village_car_smoke"] = loadfx( "maps/mp_maps/fx_mp_village_car_smoke" ); + level._effect["fx_raid_hot_tub_sm"] = loadfx( "water/fx_raid_hot_tub_sm" ); + level._effect["fx_raid_hot_tub_lg"] = loadfx( "water/fx_raid_hot_tub_lg" ); + level._effect["fx_light_beacon_red_blink_fst"] = loadfx( "light/fx_light_beacon_red_blink_fst" ); + level._effect["fx_light_god_ray_mp_raid"] = loadfx( "env/light/fx_light_god_ray_mp_raid" ); + level._effect["fx_raid_spot_light"] = loadfx( "light/fx_raid_spot_light" ); + level._effect["fx_mp_nightclub_flr_glare"] = loadfx( "maps/mp_maps/fx_mp_nightclub_flr_glare" ); + level._effect["fx_raid_spot_light_picture"] = loadfx( "light/fx_raid_spot_light_picture" ); + level._effect["fx_light_recessed_cool_sm_soft"] = loadfx( "light/fx_light_recessed_cool_sm_soft" ); + level._effect["fx_lf_mp_raid_sun1"] = loadfx( "lens_flares/fx_lf_mp_raid_sun1" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["umbrella"] = %fxanim_gp_umbrella_01_anim; + level.scr_anim["fxanim_props"]["dryer_loop"] = %fxanim_gp_dryer_loop_anim; +} diff --git a/MP/Maps/Rush/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Rush/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Rush/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Rush/aitype/enemy_dog_mp.gsc b/MP/Maps/Rush/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Rush/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Rush/character/character_mp_german_shepherd.gsc b/MP/Maps/Rush/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Rush/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Rush/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Rush/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Rush/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Rush/clientscripts/mp/_fxanim_dlc3.csc b/MP/Maps/Rush/clientscripts/mp/_fxanim_dlc3.csc new file mode 100644 index 0000000..e60e0f2 --- /dev/null +++ b/MP/Maps/Rush/clientscripts/mp/_fxanim_dlc3.csc @@ -0,0 +1,239 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; + +fxanim_init_dlc( localclientnum ) +{ + a_fxanims = getentarray( localclientnum, "fxanim_dlc3", "targetname" ); + assert( a_fxanims.size <= level.fxanim_max_anims ); + + for ( i = 0; i < a_fxanims.size; i++ ) + { + if ( isdefined( a_fxanims[i].fxanim_parent ) ) + { + parent = getent( localclientnum, a_fxanims[i].fxanim_parent, "targetname" ); + a_fxanims[a_fxanims.size] = parent; + a_fxanims[i] thread _fxanim_model_link( localclientnum ); + continue; + } + + a_fxanims[i] thread fxanim_think( localclientnum ); + } + + if ( isdefined( level.fx_anim_level_dlc_init ) ) + level thread [[ level.fx_anim_level_dlc_init ]]( localclientnum ); +} + +#using_animtree("fxanim_props_dlc3"); + +fxanim_think( localclientnum, random_wait, random_speed ) +{ + self waittill_dobj( localclientnum ); + self thread _fxanim_hide(); + self _fxanim_wait(); + self useanimtree( #animtree ); + n_anim_count = self _fxanim_get_anim_count(); + self notify( "fxanim_start" ); + + for ( n_current_anim = 0; n_current_anim < n_anim_count; n_current_anim++ ) + { + str_scene = self _fxanim_get_scene_name( n_current_anim ); + + if ( !self _fxanim_modifier( str_scene ) ) + { + self _fxanim_animate( str_scene ); + self _fxanim_play_fx( localclientnum ); + } + + self _fxanim_change_anim( n_current_anim ); + } +} + +_fxanim_hide() +{ + if ( isdefined( self.fxanim_hide ) && self.fxanim_hide ) + { + self hide(); + + self waittill( "fxanim_start" ); + + self show(); + } +} + +_fxanim_modifier( str_scene ) +{ + switch ( str_scene ) + { + case "delete": + self delete(); + break; + case "hide": + self hide(); + break; + default: + return false; + break; + } + + return true; +} + +_fxanim_wait() +{ + if ( isdefined( self.fxanim_waittill_1 ) ) + { + if ( isdefined( self.fxanim_waittill_1 ) ) + _fxanim_change_anim( -1 ); + } + + if ( isdefined( self.fxanim_wait ) ) + wait( self.fxanim_wait ); + else if ( isdefined( self.fxanim_wait_min ) && isdefined( self.fxanim_wait_max ) ) + { + n_wait_time = randomfloatrange( self.fxanim_wait_min, self.fxanim_wait_max ); + wait( n_wait_time ); + } +} + +_fxanim_change_anim( n_fxanim_id ) +{ + str_waittill = undefined; + + if ( n_fxanim_id == -1 && isdefined( self.fxanim_waittill_1 ) ) + str_waittill = self.fxanim_waittill_1; + else if ( n_fxanim_id == 0 && isdefined( self.fxanim_waittill_2 ) ) + str_waittill = self.fxanim_waittill_2; + else if ( n_fxanim_id == 1 && isdefined( self.fxanim_waittill_3 ) ) + str_waittill = self.fxanim_waittill_3; + + if ( !isdefined( str_waittill ) && n_fxanim_id != -1 ) + self _fxanim_wait_for_anim_to_end( n_fxanim_id ); + else + { + a_changer = strtok( str_waittill, "_" ); + + level waittill( str_waittill ); + } +} + +_fxanim_wait_for_anim_to_end( n_fxanim_id ) +{ + str_scene = _fxanim_get_scene_name( n_fxanim_id ); + + if ( issubstr( str_scene, "_loop" ) ) + self waittillmatch( "looping anim", "end" ); + else + self waittillmatch( "single anim", "end" ); +} + +_fxanim_animate( str_scene ) +{ + if ( !isdefined( level.scr_anim["fxanim_props_dlc3"][str_scene] ) ) + { +/# + if ( isdefined( str_scene ) ) + println( "Error: fxanim entity at " + self.origin + " is missing animation: " + str_scene ); + else + println( "Error: fxanim entity at " + self.origin + " is missing animation" ); +#/ + return; + } + + self animscripted( level.scr_anim["fxanim_props_dlc3"][str_scene], 1.0, 0.0, 1.0 ); +} + +_fxanim_play_fx( localclientnum ) +{ + if ( isdefined( self.fxanim_fx_1 ) ) + { + assert( isdefined( self.fxanim_fx_1_tag ), "KVP fxanim_fx_1_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_1 ), self, self.fxanim_fx_1_tag ); + } + + if ( isdefined( self.fxanim_fx_2 ) ) + { + assert( isdefined( self.fxanim_fx_2_tag ), "KVP fxanim_fx_2_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_2 ), self, self.fxanim_fx_2_tag ); + } + + if ( isdefined( self.fxanim_fx_3 ) ) + { + assert( isdefined( self.fxanim_fx_3_tag ), "KVP fxanim_fx_3_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_3 ), self, self.fxanim_fx_3_tag ); + } + + if ( isdefined( self.fxanim_fx_4 ) ) + { + assert( isdefined( self.fxanim_fx_4_tag ), "KVP fxanim_fx_4_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_4 ), self, self.fxanim_fx_4_tag ); + } + + if ( isdefined( self.fxanim_fx_5 ) ) + { + assert( isdefined( self.fxanim_fx_5_tag ), "KVP fxanim_fx_5_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_5 ), self, self.fxanim_fx_5_tag ); + } +} + +_fxanim_get_anim_count() +{ + assert( isdefined( self.fxanim_scene_1 ), "fxanim at position " + self.origin + " needs at least one scene defined. Use the KVP fxanim_scene_1" ); + n_fx_count = 0; + + if ( !isdefined( self.fxanim_scene_2 ) ) + n_fx_count = 1; + else if ( !isdefined( self.fxanim_scene_3 ) ) + n_fx_count = 2; + else + n_fx_count = 3; + + return n_fx_count; +} + +_fxanim_get_scene_name( n_anim_id ) +{ + str_scene_name = undefined; + + switch ( n_anim_id ) + { + case 0: + str_scene_name = self.fxanim_scene_1; + break; + case 1: + str_scene_name = self.fxanim_scene_2; + break; + case 2: + str_scene_name = self.fxanim_scene_3; + break; + } + + return str_scene_name; +} + +_fxanim_model_link( localclientnum ) +{ + self waittill_dobj( localclientnum ); + assert( isdefined( self.fxanim_tag ), "Model at origin " + self.origin + " needs an fxanim_tag defined, to show which tag the model will link to" ); + m_parent = getent( localclientnum, self.fxanim_parent, "targetname" ); + assert( isdefined( m_parent ), "Model at origin " + self.origin + " does not have a proper parent. Make sure the fxanim_parent matches the targetname of the fxanim" ); + m_parent waittill_dobj( localclientnum ); + self.origin = m_parent gettagorigin( self.fxanim_tag ); + self.angles = m_parent gettagangles( self.fxanim_tag ); + self linkto( m_parent, self.fxanim_tag ); + + if ( isdefined( self.fxanim_hide ) ) + { + self hide(); + + m_parent waittill( "fxanim_start" ); + + self show(); + } +} + +getfx( fx ) +{ + assert( isdefined( level._effect[fx] ), "Fx " + fx + " is not defined in level._effect." ); + return level._effect[fx]; +} diff --git a/MP/Maps/Rush/clientscripts/mp/createfx/mp_paintball_fx.csc b/MP/Maps/Rush/clientscripts/mp/createfx/mp_paintball_fx.csc new file mode 100644 index 0000000..4182412 --- /dev/null +++ b/MP/Maps/Rush/clientscripts/mp/createfx/mp_paintball_fx.csc @@ -0,0 +1,1507 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 853.916, 167.409, 288.125 ); + ent.v["angles"] = ( 38.8159, 207.967, 49.447 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 835.604, 217.563, 269.156 ); + ent.v["angles"] = ( 38.8159, 207.967, 49.447 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 931.293, 197.565, 305.875 ); + ent.v["angles"] = ( 38.8159, 207.967, 49.447 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 993.701, 167.532, 313.901 ); + ent.v["angles"] = ( 38.816, 207.967, 170.447 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1015.32, 179.95, 309.418 ); + ent.v["angles"] = ( 38.816, 207.967, 170.447 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 55.4715, 1265.72, -1.047 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -291.529, 1728.68, 12.2948 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -945.343, 1521.39, 3.24538 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -469.866, 792.899, 6 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 101.69, -33.0674, -0.300524 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 475.972, -1992.85, -5.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -111.691, -2233.34, -5.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -464.368, -1816.14, 0.125007 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 498.27, 1204.66, 0 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 168.332, 770.189, -5.09031 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_lg_lng_wide_ln" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -943.48, -264.946, 453.357 ); + ent.v["angles"] = ( 32.1322, 209.082, -83.3389 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_lg_lng_wide_ln" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -939.83, -13.1875, 452.875 ); + ent.v["angles"] = ( 31.3491, 206.621, -84.7206 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1241.27, -1507.4, 155.28 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1241.23, -1491.73, 155.047 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1240.58, -1475.4, 154.047 ); + ent.v["angles"] = ( 32.6312, 210, 9.86474 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1422.65, -1491.18, 148.28 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1422.96, -1458.62, 148.047 ); + ent.v["angles"] = ( 32.6312, 210, 9.86474 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1422.62, -1475.51, 148.047 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1061.06, -1502.77, 151.28 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1061.38, -1470.21, 151.047 ); + ent.v["angles"] = ( 32.6312, 210, 9.86474 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1061.03, -1487.1, 151.047 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -862.985, -1502.39, 150.28 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -866.956, -1478.05, 150.047 ); + ent.v["angles"] = ( 32.6311, 210, 5.8648 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -862.95, -1486.72, 150.047 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -667.625, -1504.23, 151.28 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -667.408, -1474.62, 151.047 ); + ent.v["angles"] = ( 32.6312, 210, 9.86474 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -667.06, -1491.51, 151.047 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -679.99, -1700.09, 154.28 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -679.955, -1684.42, 154.047 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -859.14, -1689.87, 157.242 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -859.105, -1674.2, 157.008 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1062.25, -1686.62, 151.242 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1062.21, -1670.95, 151.008 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1227.05, -1685.47, 151.242 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1227.01, -1669.81, 151.008 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1436.02, -1692.94, 141.242 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1435.98, -1677.27, 141.008 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -627.227, -187.197, 273.139 ); + ent.v["angles"] = ( 35.1269, 211.47, 175 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -629.589, -442.371, 268.018 ); + ent.v["angles"] = ( 35.1269, 211.47, 175 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -626.913, 63.8482, 277.419 ); + ent.v["angles"] = ( 35.1269, 211.47, 175 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -619.598, -691.534, 271.625 ); + ent.v["angles"] = ( 35.1269, 211.47, 175 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -619.9, 320.243, 269.725 ); + ent.v["angles"] = ( 35.1269, 211.47, 175 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -644.557, -38.1687, 256.892 ); + ent.v["angles"] = ( 35.1269, 211.47, -62 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -628.461, -294.941, 254.376 ); + ent.v["angles"] = ( 35.1269, 211.47, -62 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -639.372, -552.237, 258.15 ); + ent.v["angles"] = ( 35.1269, 211.47, -62 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -639.873, -803.488, 249.125 ); + ent.v["angles"] = ( 35.1269, 211.47, -62 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -640.368, 219.354, 272.015 ); + ent.v["angles"] = ( 35.1269, 211.47, -62 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -925.381, 966.789, 150.244 ); + ent.v["angles"] = ( 32.6312, 210, 9.86474 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -955.646, 1024.99, 151.083 ); + ent.v["angles"] = ( 32.6312, 210, 9.86474 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1621.58, -1521.9, 145.28 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1621.55, -1506.23, 145.047 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1621.89, -1489.34, 145.047 ); + ent.v["angles"] = ( 32.6312, 210, 9.86474 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1616.45, -1697.12, 139.28 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1616.42, -1681.45, 139.047 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1616.76, -1664.56, 139.047 ); + ent.v["angles"] = ( 32.6312, 210, 9.86474 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -625.719, 477.332, 160.125 ); + ent.v["angles"] = ( 38.8159, 207.967, -136.553 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -555.126, 421.471, 138.125 ); + ent.v["angles"] = ( 38.8159, 207.967, 49.447 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -784.732, 518.297, 149.125 ); + ent.v["angles"] = ( 38.8159, 207.967, 49.447 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1010.03, 408.508, 138.125 ); + ent.v["angles"] = ( 38.8159, 207.967, 49.447 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -254.38, -1115.53, 21.7813 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 263.481, -1161.17, 55.722 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 526.881, -505.724, 11.3183 ); + ent.v["angles"] = ( 272, 180, 180 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 531.171, -48.0607, 59.1306 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 285.709, 308.13, 38.603 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1032.26, 703.104, 59.9999 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -716.446, -1606.04, 49.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 182.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1340.4, -1752.37, 65.455 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1279.69, -985.676, 60.726 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 433.301, 914.848, 116.203 ); + ent.v["angles"] = ( 33.5541, 208.203, 7.04142 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 372.095, -621.87, 92.111 ); + ent.v["angles"] = ( 31.7444, 207.985, 14.6234 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 383.682, 245.065, 214.726 ); + ent.v["angles"] = ( 40.0748, 210.956, -6.76123 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -629.544, 1022.31, 172.295 ); + ent.v["angles"] = ( 31.6923, 207.979, -37.3813 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -150.576, 1076.74, 64.642 ); + ent.v["angles"] = ( 33.4779, 209.399, 0.701882 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 405.132, 300.341, 230.851 ); + ent.v["angles"] = ( 33.7439, 197.547, 164.966 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 742.76, -1203.44, 301.118 ); + ent.v["angles"] = ( 49.8551, 199.993, 5.24075 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 975.237, -499.207, 482.937 ); + ent.v["angles"] = ( 34.722, 197.799, -167.892 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 964.307, -661.867, 479.652 ); + ent.v["angles"] = ( 34.722, 197.799, -167.892 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 100.859, -1250.95, 111.289 ); + ent.v["angles"] = ( 38.074, 210.572, -178.762 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 9.69452, -1697.95, 144.471 ); + ent.v["angles"] = ( 29.7706, 233.925, 160.249 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_tree_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -781.083, 788.052, 205.275 ); + ent.v["angles"] = ( 30.4388, 218.388, 11.0068 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_tree_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -771.748, 842.786, 174.082 ); + ent.v["angles"] = ( 30.4388, 218.388, 21.0068 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_tree_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -799.88, 804.998, 188.504 ); + ent.v["angles"] = ( 30.4388, 218.388, -16.9932 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -250.611, 207.339, 107.696 ); + ent.v["angles"] = ( 44.786, 213.051, 92.3306 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_tree_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -939.89, 723.277, 330 ); + ent.v["angles"] = ( 30.4388, 218.388, 11.0068 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -218.988, -921.311, 120.205 ); + ent.v["angles"] = ( 31.3816, 213.838, 5.68925 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1200.65, -1897.35, 22 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1162.38, -2577.76, 6 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 501.843, -2759.91, 0 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1018.91, -2212.19, 22 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -524.24, -2924.84, 12 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1774.18, 739.939, 11.3555 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1549.6, 2023.86, 27.8375 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -456.397, 2368.44, -23.6198 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1178.73, 2436.94, -35.039 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 247.88, -1555.73, 62.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 989.976, -530.107, 351.917 ); + ent.v["angles"] = ( 37.543, 206.109, -15.4443 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 974.31, -618.38, 466.667 ); + ent.v["angles"] = ( 41.3902, 204.69, -16.3467 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -417.718, -904.594, -8.48339 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 476.497, -518.376, 6.14845 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 129.27, -585.421, -1.83791 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -115.056, 265.543, 0 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 242.373, 309.047, 1.07738 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -53.0083, -849.952, 8.38134 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 155.382, -2578.03, 0.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 591.752, -1040.98, 152.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 583.635, 438.457, 146.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 910.521, -271.777, 141.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 191.592, 1758.77, 10 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 552.886, -1548.95, 200.534 ); + ent.v["angles"] = ( 35.1491, 210.089, 155.916 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 380.266, -61.6555, 20.9007 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -403.308, 413.784, 9.59585 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1119.82, 854.265, 8.51057 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -697.331, 1407.15, -7.21867 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 951.304, -235.513, 306.875 ); + ent.v["angles"] = ( 36.6426, 217.197, 14.2879 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 978.66, 192.493, 291.944 ); + ent.v["angles"] = ( 38.816, 207.967, 170.447 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 786.513, 275.931, 266.135 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1047, 197.378, 256.757 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1010.04, -955.837, 374.468 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1011.72, -925.499, 384.229 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 991.491, -721.681, 357.63 ); + ent.v["angles"] = ( 37.7135, 208.727, 6.04668 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -639.866, 558.088, 158.262 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -874.697, 407.986, 150.875 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -951.398, 403.491, 148.875 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -998.303, 584.186, 178.448 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -834.493, 849.534, 196.54 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -847.664, 767.126, 280.06 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 382.519, 260.178, 232.875 ); + ent.v["angles"] = ( 43.74, 208.36, 68.2065 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -926.265, -2742.17, 30 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_smk_truck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 414.332, -1731.1, 45.4522 ); + ent.v["angles"] = ( 8.10356, 345.246, 1.22482 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_smk_truck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 432.433, -1649.75, 56.5407 ); + ent.v["angles"] = ( 6.27825, 59.0912, 0.74828 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -651.756, -556.564, 293.73 ); + ent.v["angles"] = ( 51.3804, 200.828, -85.0573 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -656.227, -311.202, 294.451 ); + ent.v["angles"] = ( 51.3804, 200.828, -85.0573 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -656.262, -53.4414, 294.771 ); + ent.v["angles"] = ( 51.3804, 200.828, -85.0573 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -658.057, 190.085, 299.978 ); + ent.v["angles"] = ( 51.3804, 200.828, -85.0573 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -663.787, -809.432, 298.547 ); + ent.v["angles"] = ( 51.3804, 200.828, -85.0573 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_smk_truck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -259.268, -2011.91, 51.6704 ); + ent.v["angles"] = ( 1.09209, 177.503, -7.04331 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 107.667, -1816.88, 3.12502 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -637.971, 1119.35, 154.101 ); + ent.v["angles"] = ( 31.6923, 207.979, -43.3813 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -652.574, 1564.88, 105.607 ); + ent.v["angles"] = ( 37.4554, 209.587, 90.3651 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -895.284, 1204.48, 214.281 ); + ent.v["angles"] = ( 40.0782, 199.24, -14.4415 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -378.197, -1272.52, -4.91957 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 67.2094, 852.374, 93.562 ); + ent.v["angles"] = ( 27.3522, 238.813, -162.138 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -114.438, 499.383, 72.6539 ); + ent.v["angles"] = ( 27.3521, 238.812, -161.138 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 375.377, 1483.1, 81.5643 ); + ent.v["angles"] = ( 27.3521, 238.812, -161.138 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 371.022, 1136.43, 101.809 ); + ent.v["angles"] = ( 32.6311, 210, -53.1348 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 366.667, 1132.32, 92.5703 ); + ent.v["angles"] = ( 32.6311, 210, -53.1348 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 380.573, 1119.1, 52.39 ); + ent.v["angles"] = ( 32.6311, 210, -53.1348 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 489.886, 1466.07, 74.5667 ); + ent.v["angles"] = ( 32.6311, 210, 1.86537 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 501.321, 1474.88, 68.8798 ); + ent.v["angles"] = ( 32.6311, 210, 1.86537 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -490.489, 1508.21, 222.34 ); + ent.v["angles"] = ( 37.4555, 209.587, 66.3646 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -915.905, 1178.48, 201.917 ); + ent.v["angles"] = ( 40.0782, 199.24, 178.559 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -941.156, 921.213, 43.998 ); + ent.v["angles"] = ( 31.6633, 216.326, -173.33 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -429.512, 1002.86, 89.6468 ); + ent.v["angles"] = ( 31.7741, 215.158, -173.944 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -178.757, 1388.08, 157.946 ); + ent.v["angles"] = ( 31.6633, 216.326, -173.33 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 118.577, -359.983, 61.0809 ); + ent.v["angles"] = ( 31.6633, 216.326, -173.33 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1048.11, 312.186, 215.231 ); + ent.v["angles"] = ( 35.1268, 211.47, -123 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 157.22, 583.191, 172.797 ); + ent.v["angles"] = ( 33.9524, 203.416, 4.38036 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_smk_truck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 323.251, -3455.93, 2.6891 ); + ent.v["angles"] = ( 17.3589, 13.7113, 7.32843 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_smk_truck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 277.271, -3424.63, 19.8052 ); + ent.v["angles"] = ( 7.99734, 137.989, -0.105292 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_smk_truck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -208.996, -1973.54, 62.1643 ); + ent.v["angles"] = ( 11.3532, 27.8458, -2.62534 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 980.969, -598.063, 360.761 ); + ent.v["angles"] = ( 37.7137, 208.727, -126.953 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -19.0417, -3324.88, 31.827 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -944.878, -3087.09, 18 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1623.86, -2282.52, 32.3783 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1351.13, -2571.08, 53 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_falling_pine_nowind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -842.38, 766.974, 218.54 ); + ent.v["angles"] = ( 357, 339, 0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_falling_pine_nowind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -685.063, 786.549, 249 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_leaves_falling_pine_nowind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1324.09, 120.252, 261.276 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 81.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -49.3284, -1052.68, 95.6226 ); + ent.v["angles"] = ( 31.0338, 210.142, 11.7272 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -138.358, -986.313, 95.3433 ); + ent.v["angles"] = ( 32.5559, 212.947, -170.83 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -99.9566, -1014.91, 95.2054 ); + ent.v["angles"] = ( 31.0338, 210.142, 11.7272 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -17.8136, -1072.15, 95.6869 ); + ent.v["angles"] = ( 31.0338, 210.142, 11.7272 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 282.196, 680.996, 50.2171 ); + ent.v["angles"] = ( 271.41, 314.763, 45.1243 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 637.925, -192.734, 134.693 ); + ent.v["angles"] = ( 41, 180, 0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 609.158, -768.878, 113.543 ); + ent.v["angles"] = ( 41, 180, 0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 485.66, -932.921, 113.684 ); + ent.v["angles"] = ( 43, 90, 0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 791.282, 364.184, 311.721 ); + ent.v["angles"] = ( 38.8161, 207.967, 177.447 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 787.182, 367.261, 301.053 ); + ent.v["angles"] = ( 38.8161, 207.967, 177.447 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 933.74, 195.593, 298.941 ); + ent.v["angles"] = ( 38.816, 207.967, 170.447 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 980.31, -302.056, 294.449 ); + ent.v["angles"] = ( 38.816, 207.967, 170.447 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 969.308, -425.153, 301.225 ); + ent.v["angles"] = ( 38.816, 207.967, 170.447 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 907.835, -339.172, 283.875 ); + ent.v["angles"] = ( 38.8159, 207.967, 49.447 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1049.2, 527.18, 169.125 ); + ent.v["angles"] = ( 36.3528, 205.807, 34.1293 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1076.85, 430.755, 158.125 ); + ent.v["angles"] = ( 38.8159, 207.967, 49.447 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 787.181, 1062.51, 319.921 ); + ent.v["angles"] = ( 31.6921, 207.979, -3.38119 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 783.928, 1013, 297.336 ); + ent.v["angles"] = ( 31.6921, 207.979, -3.38119 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 779.37, 969.046, 303.044 ); + ent.v["angles"] = ( 31.6921, 207.979, -3.38119 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 781.392, 930.053, 309.675 ); + ent.v["angles"] = ( 31.6921, 207.979, -3.38119 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -148.038, 858.137, 135.692 ); + ent.v["angles"] = ( 31.6919, 207.979, 164.619 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -158.696, 958.748, 137.46 ); + ent.v["angles"] = ( 31.6919, 207.979, 164.619 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -247.777, 1443.58, 234.082 ); + ent.v["angles"] = ( 31.6919, 207.979, 164.619 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -240.685, 1440.93, 256.229 ); + ent.v["angles"] = ( 31.6919, 207.979, 164.619 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -238.632, 1445.67, 232.366 ); + ent.v["angles"] = ( 31.6919, 207.979, 164.619 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_lite_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -346.035, -574.066, 188.733 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_lite_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -345.688, -321.647, 191.631 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_lite_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -346.115, -75.1953, 187.874 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1179.96, -1314.62, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1370.7, -1317.09, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1371.17, -1700.59, 116 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1179.22, -1701.16, 116 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -987.427, -1700.91, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -987.166, -1507.44, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -795.706, -1507.04, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -794.945, -1699.91, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -687.867, -1315.95, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -816.761, -1317.05, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -520.761, 270.759, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -327.485, 273.217, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -518.671, 77.9819, 127.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -328.127, 79.0751, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -768.53, -63.2378, 270.778 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 693.118, 959.827, 238 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 182.904, -156.946, 116.617 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 264.276, 272.863, 108.457 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -765.508, -318.599, 271.188 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -765.663, -574.933, 271.191 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -767.305, -832.541, 271.178 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -764.961, 193.323, 271.178 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1408.6, -833.346, 271.182 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1407.19, -575.874, 271.182 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1408.56, -319.679, 271.194 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1408.49, -63.7209, 271.177 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1407.45, 192.251, 271.174 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -542.184, 1525.21, 233.101 ); + ent.v["angles"] = ( 37.4555, 209.587, 66.3646 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1040.33, 502.334, 160.125 ); + ent.v["angles"] = ( 38.8159, 207.967, 49.447 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -854.085, 463.55, 146.125 ); + ent.v["angles"] = ( 38.8159, 207.967, 127.447 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -675.838, 517.929, 173.125 ); + ent.v["angles"] = ( 38.8159, 207.967, 127.447 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -708.341, 431.103, 162.875 ); + ent.v["angles"] = ( 38.816, 207.967, -72.553 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -616.97, 492.367, 176.134 ); + ent.v["angles"] = ( 38.816, 207.967, -72.553 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 546.42, -198.717, 44.0967 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 830.342, 1218.7, 271.002 ); + ent.v["angles"] = ( 31.6921, 207.979, -3.38119 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 831.063, 1442.47, 267.876 ); + ent.v["angles"] = ( 31.6921, 207.979, -3.38119 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -853.677, 865.61, 271.714 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -775.059, 731.217, 255.456 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1169.01, 222.294, 113.582 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1168.09, -157.784, 202.32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -809.053, -280.603, 150.167 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1173.67, -490.371, 184.947 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -900.101, -757.671, 135.902 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1089.96, -539.078, 64.9642 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1095.56, -139.361, 74.1519 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1326.27, -1103.59, 15.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_sun_lg_lng_wide_ln" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -947.777, -511.714, 449.719 ); + ent.v["angles"] = ( 32.1322, 209.082, -83.3389 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_paintball_sun1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 226863, 123066, 149556 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_smk_truck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 191.348, -2750.22, 6.6123 ); + ent.v["angles"] = ( 10, 39, 0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_smk_truck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 135.304, -2740.66, 5.61442 ); + ent.v["angles"] = ( 8.93908, 147.486, 0.985817 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1050.16, -164.059, 220.926 ); + ent.v["angles"] = ( 31.6919, 207.979, 1.61892 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1059.45, -196.574, 226.329 ); + ent.v["angles"] = ( 31.6919, 207.979, 1.61892 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1073.12, -170.085, 208.913 ); + ent.v["angles"] = ( 31.6919, 207.979, 1.61892 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1059.68, -341.59, 217.249 ); + ent.v["angles"] = ( 31.6919, 207.979, 1.61892 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1070.24, -345.177, 222.634 ); + ent.v["angles"] = ( 31.6919, 207.979, 1.61892 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1062.87, -341.465, 199.866 ); + ent.v["angles"] = ( 31.6919, 207.979, 1.61892 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1067.6, -207.208, 235.069 ); + ent.v["angles"] = ( 31, 198, 0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1041.51, -389.538, 208.449 ); + ent.v["angles"] = ( 31.6919, 207.979, 1.61892 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 717.398, -1801.87, 54.6422 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -915.192, 526.495, 80.3322 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -800.266, 491.575, 80.2705 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 184.345, 1722.99, 46 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 594.4, 1262.37, 23 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 539.724, 1091.04, 25 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 531.824, -834.257, 41.8037 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 533.071, -545.16, 0.339389 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_pntbll_steam_thck_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 306.758, -1014.34, 15.1415 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1022.49, -2902.1, -6 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 140.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1545.98, -2838.56, -6 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 5.00001 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2372.88, -2183.73, -6 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 40.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2368.88, -1973.73, -6 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 40.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -726.19, -3445.99, -6 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 110.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -477.99, -2921.81, -6 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 20.0 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 268.36, -3510.83, 50.59 ); + ent.v["angles"] = ( 13.9999, 47.606, -179.951 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 103.34, -2802.73, -6 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 28.9 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -351.812, 254.061, 121.194 ); + ent.v["angles"] = ( 17, 89, 0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -403.855, 253.161, 120.747 ); + ent.v["angles"] = ( 34, 87, 0 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -455.94, 254.449, 121.693 ); + ent.v["angles"] = ( 14.4775, 101.496, -3.96715 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -512.009, 254.746, 122.279 ); + ent.v["angles"] = ( 19.026, 90.8802, -4.45222 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -588.509, 117.018, 122.319 ); + ent.v["angles"] = ( 21, 202, 0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -588.365, 173.301, 122.022 ); + ent.v["angles"] = ( 22.5176, 179.206, -7.99152 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -587.131, 224.059, 120.92 ); + ent.v["angles"] = ( 37.35, 176.612, -9.2972 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -587.932, 277.191, 121.403 ); + ent.v["angles"] = ( 33.4, 177.385, -8.84919 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -552.266, 32.4679, 121.566 ); + ent.v["angles"] = ( 20.8105, 262.48, 22.2274 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -500.162, 33.4249, 120.904 ); + ent.v["angles"] = ( 18.4435, 268.334, 24.1958 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -447.916, 32.3667, 121.571 ); + ent.v["angles"] = ( 23.7793, 280.793, 29.4047 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -391.868, 32.0162, 122.247 ); + ent.v["angles"] = ( 26.6135, 274.947, 26.9134 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -763.463, -1008.66, 145.997 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -956.447, -1103.86, 145.959 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -835.265, -1306.81, 125.989 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -666.835, -1306.65, 126.928 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -666.912, -1306.67, 126.922 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -835.446, -1306.9, 126.962 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -763.12, -1011.6, 145.979 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -957.231, -1103.37, 146.975 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1127.06, -1008.05, 142.124 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 15.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1127.32, -1064.03, 141.654 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 25.0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1128.54, -1115.89, 140.792 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 48.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1127.56, -1168.18, 141.413 ); + ent.v["angles"] = ( 25.9836, 357.775, -0.940139 ); + ent.v["delay"] = -85; +} diff --git a/MP/Maps/Rush/clientscripts/mp/mp_paintball.csc b/MP/Maps/Rush/clientscripts/mp/mp_paintball.csc new file mode 100644 index 0000000..ae949ad --- /dev/null +++ b/MP/Maps/Rush/clientscripts/mp/mp_paintball.csc @@ -0,0 +1,56 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_paintball_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_paintball_amb; + +main() +{ + level.worldmapx = 0; + level.worldmapy = 0; + level.worldlat = 32.1143; + level.worldlong = -82.9414; + clientscripts\mp\_load::main(); + clientscripts\mp\mp_paintball_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_paintball_amb::main(); + registerclientfield( "scriptmover", "police_car_lights", 1, 1, "int", ::destructible_car_lights, 0 ); + setsaveddvar( "sm_sunshadowsmall", 1 ); + setsaveddvar( "sm_sunsamplesizenear", 0.35 ); + waitforclient( 0 ); +/# + println( "*** Client : mp_paintball running..." ); +#/ +} + +destructible_car_lights( localclientnum, oldval, newval, bnewent, binitialsnap, fieldname, bwasdemojump ) +{ + player = getlocalplayer( localclientnum ); + + if ( !isdefined( player ) ) + return; + + if ( player getinkillcam( localclientnum ) ) + return; + + if ( newval ) + { + wait( randomfloatrange( 0.1, 0.5 ) ); + + if ( isdefined( self.fx ) ) + { + stopfx( localclientnum, self.fx ); + self.fx = undefined; + } + + if ( fieldname == "police_car_lights" ) + self.fx = playfxontag( localclientnum, level._effect["fx_mp_light_police_car"], self, "tag_origin" ); + } + else if ( isdefined( self.fx ) ) + { + stopfx( localclientnum, self.fx ); + self.fx = undefined; + } +} diff --git a/MP/Maps/Rush/clientscripts/mp/mp_paintball_amb.csc b/MP/Maps/Rush/clientscripts/mp/mp_paintball_amb.csc new file mode 100644 index 0000000..8e06e74 --- /dev/null +++ b/MP/Maps/Rush/clientscripts/mp/mp_paintball_amb.csc @@ -0,0 +1,61 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "paintball_outdoor", 1 ); + setambientroomtone( "paintball_outdoor", "amb_wind_exterior_2d", 0.4, 1 ); + setambientroomreverb( "paintball_outdoor", "paintball_outdoor", 1, 1 ); + setambientroomcontext( "paintball_outdoor", "ringoff_plr", "outdoor" ); + declareambientroom( "obstacle_area_room" ); + setambientroomtone( "obstacle_area_room", "amb_wind_interior_2d", 0.4, 1 ); + setambientroomreverb( "obstacle_area_room", "paintball_outdoor", 1, 1 ); + setambientroomcontext( "obstacle_area_room", "ringoff_plr", "indoor" ); + declareambientroom( "obstacle_area_small_room" ); + setambientroomtone( "obstacle_area_small_room", "amb_wind_interior_2d", 0.4, 1 ); + setambientroomreverb( "obstacle_area_small_room", "paintball_wood_small", 1, 1 ); + setambientroomcontext( "obstacle_area_small_room", "ringoff_plr", "indoor" ); + declareambientroom( "obstacle_area_corridor" ); + setambientroomtone( "obstacle_area_corridor", "amb_wind_interior_2d", 0.4, 1 ); + setambientroomreverb( "obstacle_area_corridor", "paintball_hallway", 1, 1 ); + setambientroomcontext( "obstacle_area_corridor", "ringoff_plr", "indoor" ); + declareambientroom( "warehouse_room" ); + setambientroomtone( "warehouse_room", "amb_wind_interior_2d", 0.4, 1 ); + setambientroomreverb( "warehouse_room", "paintball_wherehouse", 1, 1 ); + setambientroomcontext( "warehouse_room", "ringoff_plr", "indoor" ); + declareambientroom( "warehouse_entrance" ); + setambientroomtone( "warehouse_entrance", "amb_wind_exterior_2d_qt", 0.4, 1 ); + setambientroomreverb( "warehouse_entrance", "gen_mediumroom", 1, 1 ); + setambientroomcontext( "warehouse_entrance", "ringoff_plr", "indoor" ); + declareambientroom( "proshop_room" ); + setambientroomtone( "proshop_room", "amb_wind_interior_2d", 0.4, 1 ); + setambientroomreverb( "proshop_room", "paintball_room_medium", 1, 1 ); + setambientroomcontext( "proshop_room", "ringoff_plr", "indoor" ); + declareambientroom( "proshop_room_small" ); + setambientroomtone( "proshop_room_small", "amb_wind_interior_2d", 0.4, 1 ); + setambientroomreverb( "proshop_room_small", "paintball_proshop", 1, 1 ); + setambientroomcontext( "proshop_room_small", "ringoff_plr", "indoor" ); + declareambientroom( "bus_room" ); + setambientroomtone( "bus_room", "amb_wind_exterior_2d_qt", 0.4, 1 ); + setambientroomreverb( "bus_room", "paintball_bus", 1, 1 ); + setambientroomcontext( "bus_room", "ringoff_plr", "indoor" ); + declareambientroom( "obstacle_area_under_room" ); + setambientroomtone( "obstacle_area_under_room", "amb_wind_interior_2d", 0.4, 1 ); + setambientroomreverb( "obstacle_area_under_room", "paintball_wood_small", 1, 1 ); + setambientroomcontext( "obstacle_area_under_room", "ringoff_plr", "indoor" ); + thread snd_start_autofx_audio(); + thread snd_play_loopers(); +} + +snd_play_loopers() +{ + +} + +snd_start_autofx_audio() +{ + +} diff --git a/MP/Maps/Rush/clientscripts/mp/mp_paintball_fx.csc b/MP/Maps/Rush/clientscripts/mp/mp_paintball_fx.csc new file mode 100644 index 0000000..34fe063 --- /dev/null +++ b/MP/Maps/Rush/clientscripts/mp/mp_paintball_fx.csc @@ -0,0 +1,93 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_fxanim_dlc3; +#include clientscripts\mp\createfx\mp_paintball_fx; +#include clientscripts\mp\_fx; + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_pntbll_light_ray_sun_wide_wndw"] = loadfx( "light/fx_pntbll_light_ray_sun_wide_wndw" ); + level._effect["fx_pntbll_light_ray_sun_md_lng"] = loadfx( "light/fx_pntbll_light_ray_sun_md_lng" ); + level._effect["fx_pntbll_light_ray_sun_md_lng_1s"] = loadfx( "light/fx_pntbll_light_ray_sun_md_lng_1s" ); + level._effect["fx_pntbll_light_ray_sun_md_xlng_1s"] = loadfx( "light/fx_pntbll_light_ray_sun_md_xlng_1s" ); + level._effect["fx_pntbll_light_ray_sun_md_lng_wd_1s"] = loadfx( "light/fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + level._effect["fx_pntbll_light_ray_sun_md_lng_wd"] = loadfx( "light/fx_pntbll_light_ray_sun_md_lng_wd" ); + level._effect["fx_pntbll_light_ray_sun_lg_lng_wide"] = loadfx( "light/fx_pntbll_light_ray_sun_lg_lng_wide" ); + level._effect["fx_pntbll_light_ray_sun_lg_lng_wide_ln"] = loadfx( "light/fx_pntbll_light_ray_sun_lg_lng_wide_ln" ); + level._effect["fx_pntbll_light_ray_sun_md_lng_bright"] = loadfx( "light/fx_pntbll_light_ray_sun_md_lng_bright" ); + level._effect["fx_pntbll_light_ray_tree_md_lng"] = loadfx( "light/fx_pntbll_light_ray_tree_md_lng" ); + level._effect["fx_pntbll_light_ray_tree_md_lng_thin"] = loadfx( "light/fx_pntbll_light_ray_tree_md_lng_thin" ); + level._effect["fx_pntbll_light_ray_tree_md_xlng_thin"] = loadfx( "light/fx_pntbll_light_ray_tree_md_xlng_thin" ); + level._effect["fx_pntbll_light_ray_camo_net_md"] = loadfx( "light/fx_pntbll_light_ray_camo_net_md" ); + level._effect["fx_pntbll_light_ray_camo_net_lng_dim"] = loadfx( "light/fx_pntbll_light_ray_camo_net_lng_dim" ); + level._effect["fx_pntbll_light_ray_shop_md_lng_thin"] = loadfx( "light/fx_pntbll_light_ray_shop_md_lng_thin" ); + level._effect["fx_pntbll_light_ray_shop_md_lng_dim"] = loadfx( "light/fx_pntbll_light_ray_shop_md_lng_dim" ); + level._effect["fx_pntbll_light_ray_shop_md_lng_wide"] = loadfx( "light/fx_pntbll_light_ray_shop_md_lng_wide" ); + level._effect["fx_light_flour_glow_yellow"] = loadfx( "light/fx_light_flour_glow_yellow" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_light_dust_motes_xsm_short"] = loadfx( "light/fx_concert_dust_motes_xsm_short" ); + level._effect["fx_light_dust_motes_sm"] = loadfx( "light/fx_light_dust_motes_sm" ); + level._effect["fx_dust_motes_blowing_sm"] = loadfx( "debris/fx_dust_motes_blowing_sm" ); + level._effect["fx_insects_swarm_md_light"] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_mp_pntbll_steam_thck_md"] = loadfx( "maps/mp_maps/fx_mp_pntbll_steam_thck_md" ); + level._effect["fx_mp_pntbll_steam_thck_sm"] = loadfx( "maps/mp_maps/fx_mp_pntbll_steam_thck_sm" ); + level._effect["fx_mp_pntbll_steam_thck_xsm"] = loadfx( "maps/mp_maps/fx_mp_pntbll_steam_thck_xsm" ); + level._effect["fx_mp_pntbll_steam_thck_gray"] = loadfx( "maps/mp_maps/fx_mp_pntbll_steam_thck_gray" ); + level._effect["fx_mp_steam_vent_ceiling"] = loadfx( "maps/mp_maps/fx_mp_steam_vent_ceiling" ); + level._effect["fx_mp_steam_vent_ceiling_lg"] = loadfx( "maps/mp_maps/fx_mp_steam_vent_ceiling_lg" ); + level._effect["fx_mp_vent_steam_lite_wind"] = loadfx( "maps/mp_maps/fx_mp_vent_steam_lite_wind" ); + level._effect["fx_mp_pntbll_smk_truck_md"] = loadfx( "maps/mp_maps/fx_mp_pntbll_smk_truck_md" ); + level._effect["fx_mp_pntbll_smk_truck_sm"] = loadfx( "maps/mp_maps/fx_mp_pntbll_smk_truck_sm" ); + level._effect["fx_leaves_falling_pine_nowind"] = loadfx( "foliage/fx_leaves_falling_pine_nowind" ); + level._effect["fx_mp_light_police_car"] = loadfx( "maps/mp_maps/fx_mp_light_police_car" ); + level._effect["fx_light_stadium_flood"] = loadfx( "light/fx_light_stadium_flood" ); + level._effect["fx_light_stadium_flood_flckr"] = loadfx( "light/fx_light_stadium_flood_flckr" ); + level._effect["fx_light_recessed_cool_sm_soft"] = loadfx( "light/fx_light_recessed_cool_sm_soft" ); + level._effect["fx_light_track_omni"] = loadfx( "light/fx_light_track_omni" ); + level._effect["fx_mp_pntbll_paint_drips"] = loadfx( "maps/mp_maps/fx_mp_pntbll_paint_drips" ); + level._effect["fx_lf_mp_paintball_sun1"] = loadfx( "lens_flares/fx_lf_mp_paintball_sun1" ); + level._effect["fx_mp_light_police_car"] = loadfx( "maps/mp_maps/fx_mp_light_police_car" ); +} + +precache_fx_anims() +{ + level.scr_anim = []; + level.scr_anim["fxanim_props"] = []; + level.fx_anim_level_init = ::fxanim_init; +} + +#using_animtree("fxanim_props_dlc3"); + +precache_fxanim_props_dlc3() +{ + level.scr_anim["fxanim_props_dlc3"]["wires_01"] = %fxanim_mp_paint_wires_01_anim; + level.scr_anim["fxanim_props_dlc3"]["wires_02"] = %fxanim_mp_paint_wires_02_anim; + level.scr_anim["fxanim_props_dlc3"]["shop_banners"] = %fxanim_paint_shop_banner_01_anim; + level.scr_anim["fxanim_props_dlc3"]["shop_banners_wall"] = %fxanim_paint_shop_banner_02_anim; + level.scr_anim["fxanim_props_dlc3"]["wires_03"] = %fxanim_mp_paint_wires_03_anim; +} + +fxanim_init( localclientnum ) +{ + level thread clientscripts\mp\_fxanim_dlc3::fxanim_init_dlc( localclientnum ); +} + +main() +{ + clientscripts\mp\createfx\mp_paintball_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fx_anims(); + precache_fxanim_props_dlc3(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} diff --git a/MP/Maps/Rush/maps/mp/createfx/mp_paintball_fx.gsc b/MP/Maps/Rush/maps/mp/createfx/mp_paintball_fx.gsc new file mode 100644 index 0000000..171c796 --- /dev/null +++ b/MP/Maps/Rush/maps/mp/createfx/mp_paintball_fx.gsc @@ -0,0 +1,1507 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 853.916, 167.409, 288.125 ); + ent.v["angles"] = ( 38.8159, 207.967, 49.447 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 835.604, 217.563, 269.156 ); + ent.v["angles"] = ( 38.8159, 207.967, 49.447 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 931.293, 197.565, 305.875 ); + ent.v["angles"] = ( 38.8159, 207.967, 49.447 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 993.701, 167.532, 313.901 ); + ent.v["angles"] = ( 38.816, 207.967, 170.447 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1015.32, 179.95, 309.418 ); + ent.v["angles"] = ( 38.816, 207.967, 170.447 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 55.4715, 1265.72, -1.047 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -291.529, 1728.68, 12.2948 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -945.343, 1521.39, 3.24538 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -469.866, 792.899, 6 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 101.69, -33.0674, -0.300524 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 475.972, -1992.85, -5.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -111.691, -2233.34, -5.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -464.368, -1816.14, 0.125007 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 498.27, 1204.66, 0 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 168.332, 770.189, -5.09031 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_lg_lng_wide_ln" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -943.48, -264.946, 453.357 ); + ent.v["angles"] = ( 32.1322, 209.082, -83.3389 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_lg_lng_wide_ln" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -939.83, -13.1875, 452.875 ); + ent.v["angles"] = ( 31.3491, 206.621, -84.7206 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1241.27, -1507.4, 155.28 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1241.23, -1491.73, 155.047 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1240.58, -1475.4, 154.047 ); + ent.v["angles"] = ( 32.6312, 210, 9.86474 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1422.65, -1491.18, 148.28 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1422.96, -1458.62, 148.047 ); + ent.v["angles"] = ( 32.6312, 210, 9.86474 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1422.62, -1475.51, 148.047 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1061.06, -1502.77, 151.28 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1061.38, -1470.21, 151.047 ); + ent.v["angles"] = ( 32.6312, 210, 9.86474 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1061.03, -1487.1, 151.047 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -862.985, -1502.39, 150.28 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -866.956, -1478.05, 150.047 ); + ent.v["angles"] = ( 32.6311, 210, 5.8648 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -862.95, -1486.72, 150.047 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -667.625, -1504.23, 151.28 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -667.408, -1474.62, 151.047 ); + ent.v["angles"] = ( 32.6312, 210, 9.86474 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -667.06, -1491.51, 151.047 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -679.99, -1700.09, 154.28 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -679.955, -1684.42, 154.047 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -859.14, -1689.87, 157.242 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -859.105, -1674.2, 157.008 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1062.25, -1686.62, 151.242 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1062.21, -1670.95, 151.008 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1227.05, -1685.47, 151.242 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1227.01, -1669.81, 151.008 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1436.02, -1692.94, 141.242 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1435.98, -1677.27, 141.008 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -627.227, -187.197, 273.139 ); + ent.v["angles"] = ( 35.1269, 211.47, 175 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -629.589, -442.371, 268.018 ); + ent.v["angles"] = ( 35.1269, 211.47, 175 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -626.913, 63.8482, 277.419 ); + ent.v["angles"] = ( 35.1269, 211.47, 175 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -619.598, -691.534, 271.625 ); + ent.v["angles"] = ( 35.1269, 211.47, 175 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -619.9, 320.243, 269.725 ); + ent.v["angles"] = ( 35.1269, 211.47, 175 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -644.557, -38.1687, 256.892 ); + ent.v["angles"] = ( 35.1269, 211.47, -62 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -628.461, -294.941, 254.376 ); + ent.v["angles"] = ( 35.1269, 211.47, -62 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -639.372, -552.237, 258.15 ); + ent.v["angles"] = ( 35.1269, 211.47, -62 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -639.873, -803.488, 249.125 ); + ent.v["angles"] = ( 35.1269, 211.47, -62 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -640.368, 219.354, 272.015 ); + ent.v["angles"] = ( 35.1269, 211.47, -62 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -925.381, 966.789, 150.244 ); + ent.v["angles"] = ( 32.6312, 210, 9.86474 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -955.646, 1024.99, 151.083 ); + ent.v["angles"] = ( 32.6312, 210, 9.86474 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1621.58, -1521.9, 145.28 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1621.55, -1506.23, 145.047 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1621.89, -1489.34, 145.047 ); + ent.v["angles"] = ( 32.6312, 210, 9.86474 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1616.45, -1697.12, 139.28 ); + ent.v["angles"] = ( 32.6311, 210, 37.8647 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1616.42, -1681.45, 139.047 ); + ent.v["angles"] = ( 32.7278, 208.818, 95.227 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1616.76, -1664.56, 139.047 ); + ent.v["angles"] = ( 32.6312, 210, 9.86474 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -625.719, 477.332, 160.125 ); + ent.v["angles"] = ( 38.8159, 207.967, -136.553 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -555.126, 421.471, 138.125 ); + ent.v["angles"] = ( 38.8159, 207.967, 49.447 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -784.732, 518.297, 149.125 ); + ent.v["angles"] = ( 38.8159, 207.967, 49.447 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1010.03, 408.508, 138.125 ); + ent.v["angles"] = ( 38.8159, 207.967, 49.447 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -254.38, -1115.53, 21.7813 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 263.481, -1161.17, 55.722 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 526.881, -505.724, 11.3183 ); + ent.v["angles"] = ( 272, 180, 180 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 531.171, -48.0607, 59.1306 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 285.709, 308.13, 38.603 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1032.26, 703.104, 59.9999 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -716.446, -1606.04, 49.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 182.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1340.4, -1752.37, 65.455 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1279.69, -985.676, 60.726 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 433.301, 914.848, 116.203 ); + ent.v["angles"] = ( 33.5541, 208.203, 7.04142 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 372.095, -621.87, 92.111 ); + ent.v["angles"] = ( 31.7444, 207.985, 14.6234 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 383.682, 245.065, 214.726 ); + ent.v["angles"] = ( 40.0748, 210.956, -6.76123 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -629.544, 1022.31, 172.295 ); + ent.v["angles"] = ( 31.6923, 207.979, -37.3813 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -150.576, 1076.74, 64.642 ); + ent.v["angles"] = ( 33.4779, 209.399, 0.701882 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 405.132, 300.341, 230.851 ); + ent.v["angles"] = ( 33.7439, 197.547, 164.966 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 742.76, -1203.44, 301.118 ); + ent.v["angles"] = ( 49.8551, 199.993, 5.24075 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 975.237, -499.207, 482.937 ); + ent.v["angles"] = ( 34.722, 197.799, -167.892 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 964.307, -661.867, 479.652 ); + ent.v["angles"] = ( 34.722, 197.799, -167.892 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 100.859, -1250.95, 111.289 ); + ent.v["angles"] = ( 38.074, 210.572, -178.762 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 9.69452, -1697.95, 144.471 ); + ent.v["angles"] = ( 29.7706, 233.925, 160.249 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_tree_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -781.083, 788.052, 205.275 ); + ent.v["angles"] = ( 30.4388, 218.388, 11.0068 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_tree_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -771.748, 842.786, 174.082 ); + ent.v["angles"] = ( 30.4388, 218.388, 21.0068 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_tree_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -799.88, 804.998, 188.504 ); + ent.v["angles"] = ( 30.4388, 218.388, -16.9932 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -250.611, 207.339, 107.696 ); + ent.v["angles"] = ( 44.786, 213.051, 92.3306 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_tree_md_lng_thin" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -939.89, 723.277, 330 ); + ent.v["angles"] = ( 30.4388, 218.388, 11.0068 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -218.988, -921.311, 120.205 ); + ent.v["angles"] = ( 31.3816, 213.838, 5.68925 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1200.65, -1897.35, 22 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1162.38, -2577.76, 6 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 501.843, -2759.91, 0 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1018.91, -2212.19, 22 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -524.24, -2924.84, 12 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1774.18, 739.939, 11.3555 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1549.6, 2023.86, 27.8375 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -456.397, 2368.44, -23.6198 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1178.73, 2436.94, -35.039 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 247.88, -1555.73, 62.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 989.976, -530.107, 351.917 ); + ent.v["angles"] = ( 37.543, 206.109, -15.4443 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 974.31, -618.38, 466.667 ); + ent.v["angles"] = ( 41.3902, 204.69, -16.3467 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -417.718, -904.594, -8.48339 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 476.497, -518.376, 6.14845 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 129.27, -585.421, -1.83791 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -115.056, 265.543, 0 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 242.373, 309.047, 1.07738 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -53.0083, -849.952, 8.38134 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 155.382, -2578.03, 0.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 591.752, -1040.98, 152.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 583.635, 438.457, 146.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 910.521, -271.777, 141.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 191.592, 1758.77, 10 ); + ent.v["angles"] = ( 271, 180, 180 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 552.886, -1548.95, 200.534 ); + ent.v["angles"] = ( 35.1491, 210.089, 155.916 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 380.266, -61.6555, 20.9007 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -403.308, 413.784, 9.59585 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1119.82, 854.265, 8.51057 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -697.331, 1407.15, -7.21867 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 951.304, -235.513, 306.875 ); + ent.v["angles"] = ( 36.6426, 217.197, 14.2879 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 978.66, 192.493, 291.944 ); + ent.v["angles"] = ( 38.816, 207.967, 170.447 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 786.513, 275.931, 266.135 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1047, 197.378, 256.757 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1010.04, -955.837, 374.468 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1011.72, -925.499, 384.229 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 991.491, -721.681, 357.63 ); + ent.v["angles"] = ( 37.7135, 208.727, 6.04668 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -639.866, 558.088, 158.262 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -874.697, 407.986, 150.875 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -951.398, 403.491, 148.875 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -998.303, 584.186, 178.448 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -834.493, 849.534, 196.54 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -847.664, 767.126, 280.06 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 382.519, 260.178, 232.875 ); + ent.v["angles"] = ( 43.74, 208.36, 68.2065 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -926.265, -2742.17, 30 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_smk_truck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 414.332, -1731.1, 45.4522 ); + ent.v["angles"] = ( 8.10356, 345.246, 1.22482 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_smk_truck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 432.433, -1649.75, 56.5407 ); + ent.v["angles"] = ( 6.27825, 59.0912, 0.74828 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -651.756, -556.564, 293.73 ); + ent.v["angles"] = ( 51.3804, 200.828, -85.0573 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -656.227, -311.202, 294.451 ); + ent.v["angles"] = ( 51.3804, 200.828, -85.0573 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -656.262, -53.4414, 294.771 ); + ent.v["angles"] = ( 51.3804, 200.828, -85.0573 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -658.057, 190.085, 299.978 ); + ent.v["angles"] = ( 51.3804, 200.828, -85.0573 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -663.787, -809.432, 298.547 ); + ent.v["angles"] = ( 51.3804, 200.828, -85.0573 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_smk_truck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -259.268, -2011.91, 51.6704 ); + ent.v["angles"] = ( 1.09209, 177.503, -7.04331 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 107.667, -1816.88, 3.12502 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -637.971, 1119.35, 154.101 ); + ent.v["angles"] = ( 31.6923, 207.979, -43.3813 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -652.574, 1564.88, 105.607 ); + ent.v["angles"] = ( 37.4554, 209.587, 90.3651 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -895.284, 1204.48, 214.281 ); + ent.v["angles"] = ( 40.0782, 199.24, -14.4415 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -378.197, -1272.52, -4.91957 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 67.2094, 852.374, 93.562 ); + ent.v["angles"] = ( 27.3522, 238.813, -162.138 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -114.438, 499.383, 72.6539 ); + ent.v["angles"] = ( 27.3521, 238.812, -161.138 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 375.377, 1483.1, 81.5643 ); + ent.v["angles"] = ( 27.3521, 238.812, -161.138 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 371.022, 1136.43, 101.809 ); + ent.v["angles"] = ( 32.6311, 210, -53.1348 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 366.667, 1132.32, 92.5703 ); + ent.v["angles"] = ( 32.6311, 210, -53.1348 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 380.573, 1119.1, 52.39 ); + ent.v["angles"] = ( 32.6311, 210, -53.1348 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 489.886, 1466.07, 74.5667 ); + ent.v["angles"] = ( 32.6311, 210, 1.86537 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 501.321, 1474.88, 68.8798 ); + ent.v["angles"] = ( 32.6311, 210, 1.86537 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -490.489, 1508.21, 222.34 ); + ent.v["angles"] = ( 37.4555, 209.587, 66.3646 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -915.905, 1178.48, 201.917 ); + ent.v["angles"] = ( 40.0782, 199.24, 178.559 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -941.156, 921.213, 43.998 ); + ent.v["angles"] = ( 31.6633, 216.326, -173.33 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -429.512, 1002.86, 89.6468 ); + ent.v["angles"] = ( 31.7741, 215.158, -173.944 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -178.757, 1388.08, 157.946 ); + ent.v["angles"] = ( 31.6633, 216.326, -173.33 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 118.577, -359.983, 61.0809 ); + ent.v["angles"] = ( 31.6633, 216.326, -173.33 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1048.11, 312.186, 215.231 ); + ent.v["angles"] = ( 35.1268, 211.47, -123 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 157.22, 583.191, 172.797 ); + ent.v["angles"] = ( 33.9524, 203.416, 4.38036 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_smk_truck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 323.251, -3455.93, 2.6891 ); + ent.v["angles"] = ( 17.3589, 13.7113, 7.32843 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_smk_truck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 277.271, -3424.63, 19.8052 ); + ent.v["angles"] = ( 7.99734, 137.989, -0.105292 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_smk_truck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -208.996, -1973.54, 62.1643 ); + ent.v["angles"] = ( 11.3532, 27.8458, -2.62534 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 980.969, -598.063, 360.761 ); + ent.v["angles"] = ( 37.7137, 208.727, -126.953 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -19.0417, -3324.88, 31.827 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -944.878, -3087.09, 18 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1623.86, -2282.52, 32.3783 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1351.13, -2571.08, 53 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_falling_pine_nowind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -842.38, 766.974, 218.54 ); + ent.v["angles"] = ( 357, 339, 0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_falling_pine_nowind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -685.063, 786.549, 249 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_leaves_falling_pine_nowind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1324.09, 120.252, 261.276 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 81.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -49.3284, -1052.68, 95.6226 ); + ent.v["angles"] = ( 31.0338, 210.142, 11.7272 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -138.358, -986.313, 95.3433 ); + ent.v["angles"] = ( 32.5559, 212.947, -170.83 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -99.9566, -1014.91, 95.2054 ); + ent.v["angles"] = ( 31.0338, 210.142, 11.7272 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -17.8136, -1072.15, 95.6869 ); + ent.v["angles"] = ( 31.0338, 210.142, 11.7272 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 282.196, 680.996, 50.2171 ); + ent.v["angles"] = ( 271.41, 314.763, 45.1243 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 637.925, -192.734, 134.693 ); + ent.v["angles"] = ( 41, 180, 0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 609.158, -768.878, 113.543 ); + ent.v["angles"] = ( 41, 180, 0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 485.66, -932.921, 113.684 ); + ent.v["angles"] = ( 43, 90, 0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 791.282, 364.184, 311.721 ); + ent.v["angles"] = ( 38.8161, 207.967, 177.447 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 787.182, 367.261, 301.053 ); + ent.v["angles"] = ( 38.8161, 207.967, 177.447 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 933.74, 195.593, 298.941 ); + ent.v["angles"] = ( 38.816, 207.967, 170.447 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 980.31, -302.056, 294.449 ); + ent.v["angles"] = ( 38.816, 207.967, 170.447 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 969.308, -425.153, 301.225 ); + ent.v["angles"] = ( 38.816, 207.967, 170.447 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 907.835, -339.172, 283.875 ); + ent.v["angles"] = ( 38.8159, 207.967, 49.447 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1049.2, 527.18, 169.125 ); + ent.v["angles"] = ( 36.3528, 205.807, 34.1293 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1076.85, 430.755, 158.125 ); + ent.v["angles"] = ( 38.8159, 207.967, 49.447 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 787.181, 1062.51, 319.921 ); + ent.v["angles"] = ( 31.6921, 207.979, -3.38119 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 783.928, 1013, 297.336 ); + ent.v["angles"] = ( 31.6921, 207.979, -3.38119 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 779.37, 969.046, 303.044 ); + ent.v["angles"] = ( 31.6921, 207.979, -3.38119 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 781.392, 930.053, 309.675 ); + ent.v["angles"] = ( 31.6921, 207.979, -3.38119 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -148.038, 858.137, 135.692 ); + ent.v["angles"] = ( 31.6919, 207.979, 164.619 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -158.696, 958.748, 137.46 ); + ent.v["angles"] = ( 31.6919, 207.979, 164.619 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -247.777, 1443.58, 234.082 ); + ent.v["angles"] = ( 31.6919, 207.979, 164.619 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -240.685, 1440.93, 256.229 ); + ent.v["angles"] = ( 31.6919, 207.979, 164.619 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -238.632, 1445.67, 232.366 ); + ent.v["angles"] = ( 31.6919, 207.979, 164.619 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_lite_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -346.035, -574.066, 188.733 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_lite_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -345.688, -321.647, 191.631 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_lite_wind" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -346.115, -75.1953, 187.874 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1179.96, -1314.62, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1370.7, -1317.09, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1371.17, -1700.59, 116 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1179.22, -1701.16, 116 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -987.427, -1700.91, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -987.166, -1507.44, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -795.706, -1507.04, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -794.945, -1699.91, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -687.867, -1315.95, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -816.761, -1317.05, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -520.761, 270.759, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -327.485, 273.217, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -518.671, 77.9819, 127.875 ); + ent.v["angles"] = ( 90, 360, 0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -328.127, 79.0751, 127.875 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -768.53, -63.2378, 270.778 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 693.118, 959.827, 238 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 182.904, -156.946, 116.617 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 264.276, 272.863, 108.457 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -765.508, -318.599, 271.188 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -765.663, -574.933, 271.191 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -767.305, -832.541, 271.178 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -764.961, 193.323, 271.178 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1408.6, -833.346, 271.182 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1407.19, -575.874, 271.182 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1408.56, -319.679, 271.194 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1408.49, -63.7209, 271.177 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1407.45, 192.251, 271.174 ); + ent.v["angles"] = ( 88, 180, -180 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -542.184, 1525.21, 233.101 ); + ent.v["angles"] = ( 37.4555, 209.587, 66.3646 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1040.33, 502.334, 160.125 ); + ent.v["angles"] = ( 38.8159, 207.967, 49.447 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -854.085, 463.55, 146.125 ); + ent.v["angles"] = ( 38.8159, 207.967, 127.447 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -675.838, 517.929, 173.125 ); + ent.v["angles"] = ( 38.8159, 207.967, 127.447 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -708.341, 431.103, 162.875 ); + ent.v["angles"] = ( 38.816, 207.967, -72.553 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -616.97, 492.367, 176.134 ); + ent.v["angles"] = ( 38.816, 207.967, -72.553 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 546.42, -198.717, 44.0967 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 830.342, 1218.7, 271.002 ); + ent.v["angles"] = ( 31.6921, 207.979, -3.38119 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 831.063, 1442.47, 267.876 ); + ent.v["angles"] = ( 31.6921, 207.979, -3.38119 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -853.677, 865.61, 271.714 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -775.059, 731.217, 255.456 ); + ent.v["angles"] = ( 38.816, 207.967, 35.447 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1169.01, 222.294, 113.582 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1168.09, -157.784, 202.32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -809.053, -280.603, 150.167 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1173.67, -490.371, 184.947 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -900.101, -757.671, 135.902 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1089.96, -539.078, 64.9642 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1095.56, -139.361, 74.1519 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1326.27, -1103.59, 15.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_lg_lng_wide_ln" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -947.777, -511.714, 449.719 ); + ent.v["angles"] = ( 32.1322, 209.082, -83.3389 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_paintball_sun1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 226863, 123066, 149556 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_smk_truck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 191.348, -2750.22, 6.6123 ); + ent.v["angles"] = ( 10, 39, 0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_smk_truck_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 135.304, -2740.66, 5.61442 ); + ent.v["angles"] = ( 8.93908, 147.486, 0.985817 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1050.16, -164.059, 220.926 ); + ent.v["angles"] = ( 31.6919, 207.979, 1.61892 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1059.45, -196.574, 226.329 ); + ent.v["angles"] = ( 31.6919, 207.979, 1.61892 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1073.12, -170.085, 208.913 ); + ent.v["angles"] = ( 31.6919, 207.979, 1.61892 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1059.68, -341.59, 217.249 ); + ent.v["angles"] = ( 31.6919, 207.979, 1.61892 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1070.24, -345.177, 222.634 ); + ent.v["angles"] = ( 31.6919, 207.979, 1.61892 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1062.87, -341.465, 199.866 ); + ent.v["angles"] = ( 31.6919, 207.979, 1.61892 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1067.6, -207.208, 235.069 ); + ent.v["angles"] = ( 31, 198, 0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1041.51, -389.538, 208.449 ); + ent.v["angles"] = ( 31.6919, 207.979, 1.61892 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 717.398, -1801.87, 54.6422 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -915.192, 526.495, 80.3322 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -800.266, 491.575, 80.2705 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 184.345, 1722.99, 46 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 594.4, 1262.37, 23 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 539.724, 1091.04, 25 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 531.824, -834.257, 41.8037 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 533.071, -545.16, 0.339389 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 306.758, -1014.34, 15.1415 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1022.49, -2902.1, -6 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 140.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1545.98, -2838.56, -6 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 5.00001 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2372.88, -2183.73, -6 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 40.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2368.88, -1973.73, -6 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 40.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -726.19, -3445.99, -6 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 110.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -477.99, -2921.81, -6 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 20.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 268.36, -3510.83, 50.59 ); + ent.v["angles"] = ( 13.9999, 47.606, -179.951 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_police_car" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 103.34, -2802.73, -6 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 28.9 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -351.812, 254.061, 121.194 ); + ent.v["angles"] = ( 17, 89, 0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -403.855, 253.161, 120.747 ); + ent.v["angles"] = ( 34, 87, 0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -455.94, 254.449, 121.693 ); + ent.v["angles"] = ( 14.4775, 101.496, -3.96715 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -512.009, 254.746, 122.279 ); + ent.v["angles"] = ( 19.026, 90.8802, -4.45222 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -588.509, 117.018, 122.319 ); + ent.v["angles"] = ( 21, 202, 0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -588.365, 173.301, 122.022 ); + ent.v["angles"] = ( 22.5176, 179.206, -7.99152 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -587.131, 224.059, 120.92 ); + ent.v["angles"] = ( 37.35, 176.612, -9.2972 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -587.932, 277.191, 121.403 ); + ent.v["angles"] = ( 33.4, 177.385, -8.84919 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -552.266, 32.4679, 121.566 ); + ent.v["angles"] = ( 20.8105, 262.48, 22.2274 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -500.162, 33.4249, 120.904 ); + ent.v["angles"] = ( 18.4435, 268.334, 24.1958 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -447.916, 32.3667, 121.571 ); + ent.v["angles"] = ( 23.7793, 280.793, 29.4047 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -391.868, 32.0162, 122.247 ); + ent.v["angles"] = ( 26.6135, 274.947, 26.9134 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -763.463, -1008.66, 145.997 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -956.447, -1103.86, 145.959 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -835.265, -1306.81, 125.989 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -666.835, -1306.65, 126.928 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -666.912, -1306.67, 126.922 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -835.446, -1306.9, 126.962 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -763.12, -1011.6, 145.979 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -957.231, -1103.37, 146.975 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1127.06, -1008.05, 142.124 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 15.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1127.32, -1064.03, 141.654 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 25.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1128.54, -1115.89, 140.792 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 48.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_track_omni" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1127.56, -1168.18, 141.413 ); + ent.v["angles"] = ( 25.9836, 357.775, -0.940139 ); + ent.v["delay"] = -85; +} diff --git a/MP/Maps/Rush/maps/mp/mp_paintball.gsc b/MP/Maps/Rush/maps/mp/mp_paintball.gsc new file mode 100644 index 0000000..e36466a --- /dev/null +++ b/MP/Maps/Rush/maps/mp/mp_paintball.gsc @@ -0,0 +1,116 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\mp_paintball_fx; +#include maps\mp\_load; +#include maps\mp\mp_paintball_amb; +#include maps\mp\_compass; +#include maps\mp\gametypes\_spawning; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_paintball_fx::main(); + precachemodel( "collision_physics_cylinder_32x128" ); + precachemodel( "collision_physics_64x64x10" ); + precachemodel( "collision_physics_32x32x10" ); + precachemodel( "p6_pai_fence_pole" ); + maps\mp\_load::main(); + maps\mp\mp_paintball_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_paintball" ); + setdvar( "compassmaxrange", "2100" ); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + spawncollision( "collision_physics_cylinder_32x128", "collider", ( 1071.5, -1998.5, 373.5 ), ( 0, 0, 0 ) ); + spawncollision( "collision_physics_cylinder_32x128", "collider", ( 1071.5, -1998.5, 262 ), ( 0, 0, 0 ) ); + spawncollision( "collision_physics_cylinder_32x128", "collider", ( 1071.5, -1998.5, 150 ), ( 0, 0, 0 ) ); + spawncollision( "collision_physics_cylinder_32x128", "collider", ( 1071.5, -1998.5, 37.5 ), ( 0, 0, 0 ) ); + spawncollision( "collision_physics_cylinder_32x128", "collider", ( -1446.5, 524.5, 401.5 ), ( 0, 0, 0 ) ); + spawncollision( "collision_physics_cylinder_32x128", "collider", ( -1446.5, 524.5, 290 ), ( 0, 0, 0 ) ); + spawncollision( "collision_physics_cylinder_32x128", "collider", ( -1446.5, 524.5, 178 ), ( 0, 0, 0 ) ); + spawncollision( "collision_physics_cylinder_32x128", "collider", ( -1446.5, 524.5, 65.5 ), ( 0, 0, 0 ) ); + spawncollision( "collision_physics_cylinder_32x128", "collider", ( -1303.5, 1611.5, 394.5 ), ( 0, 0, 0 ) ); + spawncollision( "collision_physics_cylinder_32x128", "collider", ( -1303.5, 1611.5, 283 ), ( 0, 0, 0 ) ); + spawncollision( "collision_physics_cylinder_32x128", "collider", ( -1303.5, 1611.5, 171 ), ( 0, 0, 0 ) ); + spawncollision( "collision_physics_cylinder_32x128", "collider", ( -1303.5, 1611.5, 58.5 ), ( 0, 0, 0 ) ); + spawncollision( "collision_physics_64x64x10", "collider", ( -104.5, -1176.5, 9 ), ( 9.93, 310, 79.786 ) ); + spawncollision( "collision_physics_32x32x10", "collider", ( -105, -1166.5, 38 ), ( 317.842, 319.39, 76.1599 ) ); + spawncollision( "collision_physics_32x32x10", "collider", ( -96.5, -1173, 38.5 ), ( 310.109, 322.353, 74.0248 ) ); + spawncollision( "collision_physics_32x32x10", "collider", ( -93, -1180.5, 38.5 ), ( 310.109, 322.353, 74.0248 ) ); + pole1 = spawn( "script_model", ( 385, 572.5, -39 ) ); + pole1.angles = vectorscale( ( 0, 1, 0 ), 282.6 ); + pole1 setmodel( "p6_pai_fence_pole" ); + maps\mp\gametypes\_spawning::level_use_unified_spawning( 1 ); + registerclientfield( "scriptmover", "police_car_lights", 1, 1, "int" ); + level thread destructible_lights(); + level.remotemotarviewleft = 35; + level.remotemotarviewright = 35; + level.remotemotarviewup = 18; + level thread glass_node_think(); +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2200", reset_dvars ); + ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1200", reset_dvars ); +} + +destructible_lights() +{ + wait 0.05; + destructibles = getentarray( "destructible", "targetname" ); + + foreach ( destructible in destructibles ) + { + if ( destructible.destructibledef == "veh_t6_police_car_destructible_mp" ) + { + destructible thread destructible_think( "police_car_lights" ); + destructible setclientfield( "police_car_lights", 1 ); + } + } +} + +destructible_think( clientfield ) +{ + self waittill_any( "death", "destructible_base_piece_death" ); + self setclientfield( clientfield, 0 ); +} + +glass_node_think() +{ + wait 1; + glass_origin = ( -980.028, -959.375, 60.1195 ); + node_origin = ( -981.75, -934.5, 16.0 ); + node = getnearestnode( node_origin ); + + if ( isdefined( node ) && node.type == "Begin" ) + { + ent = spawn( "script_model", node.origin, 1 ); + ent setmodel( level.deployedshieldmodel ); + ent hide(); + ent disconnectpaths(); + ent.origin -= vectorscale( ( 0, 0, 1 ), 64.0 ); + + for (;;) + { + level waittill( "glass_smash", origin ); + + if ( distancesquared( origin, glass_origin ) < 16384 ) + { + ent.origin += vectorscale( ( 0, 0, 1 ), 64.0 ); + ent delete(); + return; + } + } + } +} diff --git a/MP/Maps/Rush/maps/mp/mp_paintball_amb.gsc b/MP/Maps/Rush/maps/mp/mp_paintball_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Rush/maps/mp/mp_paintball_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Rush/maps/mp/mp_paintball_fx.gsc b/MP/Maps/Rush/maps/mp/mp_paintball_fx.gsc new file mode 100644 index 0000000..ff4a8a4 --- /dev/null +++ b/MP/Maps/Rush/maps/mp/mp_paintball_fx.gsc @@ -0,0 +1,81 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_paintball_fx; + +main() +{ + precache_fxanim_props(); + precache_fxanim_props_dlc3(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_paintball_fx::main(); +} + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_pntbll_light_ray_sun_wide_wndw"] = loadfx( "light/fx_pntbll_light_ray_sun_wide_wndw" ); + level._effect["fx_pntbll_light_ray_sun_md_lng"] = loadfx( "light/fx_pntbll_light_ray_sun_md_lng" ); + level._effect["fx_pntbll_light_ray_sun_md_lng_1s"] = loadfx( "light/fx_pntbll_light_ray_sun_md_lng_1s" ); + level._effect["fx_pntbll_light_ray_sun_md_xlng_1s"] = loadfx( "light/fx_pntbll_light_ray_sun_md_xlng_1s" ); + level._effect["fx_pntbll_light_ray_sun_md_lng_wd_1s"] = loadfx( "light/fx_pntbll_light_ray_sun_md_lng_wd_1s" ); + level._effect["fx_pntbll_light_ray_sun_md_lng_wd"] = loadfx( "light/fx_pntbll_light_ray_sun_md_lng_wd" ); + level._effect["fx_pntbll_light_ray_sun_lg_lng_wide"] = loadfx( "light/fx_pntbll_light_ray_sun_lg_lng_wide" ); + level._effect["fx_pntbll_light_ray_sun_lg_lng_wide_ln"] = loadfx( "light/fx_pntbll_light_ray_sun_lg_lng_wide_ln" ); + level._effect["fx_pntbll_light_ray_sun_md_lng_bright"] = loadfx( "light/fx_pntbll_light_ray_sun_md_lng_bright" ); + level._effect["fx_pntbll_light_ray_tree_md_lng"] = loadfx( "light/fx_pntbll_light_ray_tree_md_lng" ); + level._effect["fx_pntbll_light_ray_tree_md_lng_thin"] = loadfx( "light/fx_pntbll_light_ray_tree_md_lng_thin" ); + level._effect["fx_pntbll_light_ray_tree_md_xlng_thin"] = loadfx( "light/fx_pntbll_light_ray_tree_md_xlng_thin" ); + level._effect["fx_pntbll_light_ray_camo_net_md"] = loadfx( "light/fx_pntbll_light_ray_camo_net_md" ); + level._effect["fx_pntbll_light_ray_camo_net_lng_dim"] = loadfx( "light/fx_pntbll_light_ray_camo_net_lng_dim" ); + level._effect["fx_pntbll_light_ray_shop_md_lng_thin"] = loadfx( "light/fx_pntbll_light_ray_shop_md_lng_thin" ); + level._effect["fx_pntbll_light_ray_shop_md_lng_dim"] = loadfx( "light/fx_pntbll_light_ray_shop_md_lng_dim" ); + level._effect["fx_pntbll_light_ray_shop_md_lng_wide"] = loadfx( "light/fx_pntbll_light_ray_shop_md_lng_wide" ); + level._effect["fx_light_flour_glow_yellow"] = loadfx( "light/fx_light_flour_glow_yellow" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_light_dust_motes_xsm_short"] = loadfx( "light/fx_concert_dust_motes_xsm_short" ); + level._effect["fx_light_dust_motes_sm"] = loadfx( "light/fx_light_dust_motes_sm" ); + level._effect["fx_dust_motes_blowing_sm"] = loadfx( "debris/fx_dust_motes_blowing_sm" ); + level._effect["fx_insects_swarm_md_light"] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_mp_pntbll_steam_thck_md"] = loadfx( "maps/mp_maps/fx_mp_pntbll_steam_thck_md" ); + level._effect["fx_mp_pntbll_steam_thck_sm"] = loadfx( "maps/mp_maps/fx_mp_pntbll_steam_thck_sm" ); + level._effect["fx_mp_pntbll_steam_thck_xsm"] = loadfx( "maps/mp_maps/fx_mp_pntbll_steam_thck_xsm" ); + level._effect["fx_mp_pntbll_steam_thck_gray"] = loadfx( "maps/mp_maps/fx_mp_pntbll_steam_thck_gray" ); + level._effect["fx_mp_steam_vent_ceiling"] = loadfx( "maps/mp_maps/fx_mp_steam_vent_ceiling" ); + level._effect["fx_mp_steam_vent_ceiling_lg"] = loadfx( "maps/mp_maps/fx_mp_steam_vent_ceiling_lg" ); + level._effect["fx_mp_vent_steam_lite_wind"] = loadfx( "maps/mp_maps/fx_mp_vent_steam_lite_wind" ); + level._effect["fx_mp_pntbll_smk_truck_md"] = loadfx( "maps/mp_maps/fx_mp_pntbll_smk_truck_md" ); + level._effect["fx_mp_pntbll_smk_truck_sm"] = loadfx( "maps/mp_maps/fx_mp_pntbll_smk_truck_sm" ); + level._effect["fx_leaves_falling_pine_nowind"] = loadfx( "foliage/fx_leaves_falling_pine_nowind" ); + level._effect["fx_mp_light_police_car"] = loadfx( "maps/mp_maps/fx_mp_light_police_car" ); + level._effect["fx_light_stadium_flood"] = loadfx( "light/fx_light_stadium_flood" ); + level._effect["fx_light_stadium_flood_flckr"] = loadfx( "light/fx_light_stadium_flood_flckr" ); + level._effect["fx_light_recessed_cool_sm_soft"] = loadfx( "light/fx_light_recessed_cool_sm_soft" ); + level._effect["fx_light_track_omni"] = loadfx( "light/fx_light_track_omni" ); + level._effect["fx_mp_pntbll_paint_drips"] = loadfx( "maps/mp_maps/fx_mp_pntbll_paint_drips" ); + level._effect["fx_lf_mp_paintball_sun1"] = loadfx( "lens_flares/fx_lf_mp_paintball_sun1" ); + level._effect["fx_mp_light_police_car"] = loadfx( "maps/mp_maps/fx_mp_light_police_car" ); +} + +precache_fxanim_props() +{ + level.scr_anim = []; + level.scr_anim["fxanim_props"] = []; +} + +#using_animtree("fxanim_props_dlc3"); + +precache_fxanim_props_dlc3() +{ + level.scr_anim["fxanim_props_dlc3"]["wires_01"] = %fxanim_mp_paint_wires_01_anim; + level.scr_anim["fxanim_props_dlc3"]["wires_02"] = %fxanim_mp_paint_wires_02_anim; + level.scr_anim["fxanim_props_dlc3"]["shop_banners"] = %fxanim_paint_shop_banner_01_anim; + level.scr_anim["fxanim_props_dlc3"]["shop_banners_wall"] = %fxanim_paint_shop_banner_02_anim; + level.scr_anim["fxanim_props_dlc3"]["wires_03"] = %fxanim_mp_paint_wires_03_anim; +} diff --git a/MP/Maps/Slums/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Slums/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Slums/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Slums/aitype/enemy_dog_mp.gsc b/MP/Maps/Slums/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Slums/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Slums/character/character_mp_german_shepherd.gsc b/MP/Maps/Slums/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Slums/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Slums/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Slums/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Slums/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Slums/clientscripts/mp/createfx/mp_slums_fx.csc b/MP/Maps/Slums/clientscripts/mp/createfx/mp_slums_fx.csc new file mode 100644 index 0000000..4b8d7c6 --- /dev/null +++ b/MP/Maps/Slums/clientscripts/mp/createfx/mp_slums_fx.csc @@ -0,0 +1,1032 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( -249.136, -855.816, 577.536 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 465.266, 1998.53, 576 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 189.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 465.781, 2024.23, 609 ); + ent.v["angles"] = ( 0, 212, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 118.27, 1901.9, 607 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 231.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -487.65, 1013.92, 564.147 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 254.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 447.828, 1661.07, 670.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1156.43, 88.4098, 627.011 ); + ent.v["angles"] = ( 0, 188, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -369.269, -457.055, 593.777 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 196.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 1257.24, -1055.25, 552 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 165.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1193.1, -422.824, 604.538 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1620.1, 280.059, 610 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 204.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1231.25, -1535.76, 564.267 ); + ent.v["angles"] = ( 0, 180, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 814.655, -1700.05, 493.677 ); + ent.v["angles"] = ( 357.037, 260.988, 0.469819 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 904.792, -3351.33, 462 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 124.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 63.2546, -2730.9, 449 ); + ent.v["angles"] = ( 0.313483, 174.008, 2.98405 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 852.984, -3226.58, 450 ); + ent.v["angles"] = ( 358.662, 153.859, 3.63692 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 367.72, -1515.4, 576 ); + ent.v["angles"] = ( 0, 180, 3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( 413.342, -1638.04, 552 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 163.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( 840.497, -1586.2, 513.235 ); + ent.v["angles"] = ( 336.083, 174.208, 13.3107 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( 383.867, -2727.93, 471.531 ); + ent.v["angles"] = ( 336.083, 174.208, 13.3107 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( -226.231, -2618.3, 468.216 ); + ent.v["angles"] = ( 336.083, 174.208, 13.3107 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke" ); + ent.v["origin"] = ( 1468.22, -1524.01, 505.439 ); + ent.v["angles"] = ( 279.824, 328.913, 7.17169 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke" ); + ent.v["origin"] = ( 1808.5, -45.308, 599 ); + ent.v["angles"] = ( 280.441, 357.415, -1.90431 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke" ); + ent.v["origin"] = ( -1122.61, 1202.27, 576.057 ); + ent.v["angles"] = ( 310.694, 7.82296, -0.158126 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke" ); + ent.v["origin"] = ( 1330.87, 1805.57, 576.327 ); + ent.v["angles"] = ( 296.906, 85.0686, -85.9113 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 994.578, -1127.72, 595 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 675.252, -1128.26, 599 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 344.002, -879.174, 608.982 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -335.945, -2227.9, 532.443 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -268.588, -2309.35, 504.763 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -72.2735, -2483.57, 508 ); + ent.v["angles"] = ( 295, 181, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -450.835, -2411.9, 490.914 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -558.81, -1976.25, 517.153 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -149.851, -1995.69, 492 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 417.446, -2934.3, 510.994 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -1057.89, -374.858, 583.346 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 355.771, -1000.56, 543 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( -155.401, -171.078, 775 ); + ent.v["angles"] = ( 271, 163, -73 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 238.923, -37.4944, 792 ); + ent.v["angles"] = ( 287.102, 158.295, -94.0742 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1212.77, -163.885, 834.399 ); + ent.v["angles"] = ( 286.195, 138.464, -80.1276 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1453.76, -420.619, 851 ); + ent.v["angles"] = ( 271, 163, -73 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1464.98, -1125.69, 805 ); + ent.v["angles"] = ( 271, 163, -73 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( -406.35, -585.207, 552.613 ); + ent.v["angles"] = ( 274, 270, 25 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 395.276, 1158.87, 638.65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 182.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 220.658, 130.059, 598 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 188.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( -273.444, -813.508, 573.981 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 382.28, -260.432, 609.683 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 820.348, -1135.94, 580 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 155.578, -1256.22, 613 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -308.26, -2463.07, 506 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 543.549, -3401.81, 514.374 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -223.19, -2816.17, 510.909 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -648.813, -2473.37, 481 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -212.88, -1977.89, 495.096 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -317.05, -1100.11, 597.572 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -825.658, 218.259, 586.324 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -801.533, 666.124, 596.753 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -898.253, 1448.99, 645.579 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -698.392, 758.429, 635.088 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( -799.391, -186.421, 889.125 ); + ent.v["angles"] = ( 273, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( -796.912, 63.3163, 901.515 ); + ent.v["angles"] = ( 271, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( -690.391, -757.657, 890.888 ); + ent.v["angles"] = ( 270, 358.685, 1.31464 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( 1355.94, -1573.12, 962.79 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); + ent.v["origin"] = ( 1353.97, -1571.1, 968.789 ); + ent.v["angles"] = ( 6.6847, 102.812, -0.531975 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); + ent.v["origin"] = ( -433.279, 30.8972, 1029.8 ); + ent.v["angles"] = ( 43.0794, 113.754, 14.5109 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1425.87, -1048.51, 760.649 ); + ent.v["angles"] = ( 289.198, 146.699, -81.271 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 680.682, -862.471, 592.694 ); + ent.v["angles"] = ( 349.273, 332.5, -6.82402 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 467.543, -1138.91, 622 ); + ent.v["angles"] = ( 357, 111, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 577.511, -227.768, 601 ); + ent.v["angles"] = ( 357, 295, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 4.6388, -1210.95, 627 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 37.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( -1161.52, 1008.91, 919.008 ); + ent.v["angles"] = ( 272, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1243.82, -1660.02, 548.228 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_vista_smoke" ); + ent.v["origin"] = ( -621.875, -5380.24, 876.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_sprinkle_water" ); + ent.v["origin"] = ( -773.034, 1640.41, 718.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_splash_detail" ); + ent.v["origin"] = ( -771.502, 1647.34, 592.337 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_splash_detail" ); + ent.v["origin"] = ( -779.789, 1626.08, 593.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_splash_detail" ); + ent.v["origin"] = ( -486.017, -691.068, 551.283 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_splash_detail" ); + ent.v["origin"] = ( -451.241, -687.673, 552.495 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_sprinkle_water" ); + ent.v["origin"] = ( -467.677, -689.812, 689.033 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 294.573, -1115.65, 594.843 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -534.641, -1309.83, 607.994 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -1091.07, -615.063, 539.242 ); + ent.v["angles"] = ( 6.5365, 334.891, -6.4085 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -1087.59, -512.146, 545.441 ); + ent.v["angles"] = ( 6.5365, 334.891, -6.4085 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -1100.09, -631.07, 545.286 ); + ent.v["angles"] = ( 7.16937, 340.901, 23.3092 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 756.021, -1568.17, 496 ); + ent.v["angles"] = ( 339.569, 260.459, 37.8245 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 890.405, -1493.62, 496 ); + ent.v["angles"] = ( 339.569, 260.459, 37.8245 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 805.15, -1617.87, 498.527 ); + ent.v["angles"] = ( 7.67748, 299.488, 21.1493 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 422.165, -2736.92, 448 ); + ent.v["angles"] = ( 9.10744, 258.552, -4.25539 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 258.235, -2743.73, 448 ); + ent.v["angles"] = ( 10.6652, 267.399, 29.324 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 298.053, -2672.83, 448 ); + ent.v["angles"] = ( 336.672, 274.973, 9.87578 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -174.186, -2602.68, 453.171 ); + ent.v["angles"] = ( 6.44468, 102.056, 33.3416 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 573.655, 144.609, 575 ); + ent.v["angles"] = ( 339.384, 341.64, -37.8244 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_pipe_water_ground" ); + ent.v["origin"] = ( -609.875, 1752.37, 593.025 ); + ent.v["angles"] = ( 270, 0, -179 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 517.208, 139.357, 593 ); + ent.v["angles"] = ( 330.186, 333.887, -8.88146 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 325.279, -1517.28, 612.428 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 352.937, -1682.32, 607.287 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 904.383, -3400.03, 511 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -706.317, 108.196, 595.29 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -896.853, 818.549, 581.999 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 819.409, -715.655, 669.347 ); + ent.v["angles"] = ( 0, 179, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 570.933, 903.671, 682.125 ); + ent.v["angles"] = ( 13.4463, 164.456, 14.2581 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 1091.99, -1697.88, 612.125 ); + ent.v["angles"] = ( 21.7749, 98.6191, 0.218312 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 1046.56, -1699.97, 612.125 ); + ent.v["angles"] = ( 21.7749, 98.6191, 0.218312 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 1054.92, -1689.01, 612.125 ); + ent.v["angles"] = ( 359.461, 6.6804, -21.7696 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -577.855, -1518.53, 655 ); + ent.v["angles"] = ( 21.7749, 98.6191, 0.218312 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -617.034, -1522.15, 657 ); + ent.v["angles"] = ( 21.7749, 98.6191, 0.218312 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -689.729, -3181.92, 637.457 ); + ent.v["angles"] = ( 309.82, 261.617, -1.34511 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_fire_sm" ); + ent.v["origin"] = ( -231.18, -2617.83, 467.701 ); + ent.v["angles"] = ( 288.334, 253.225, 112.074 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -232.756, -2626.43, 471.116 ); + ent.v["angles"] = ( 28.5817, 289.094, 9.61949 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_fire_sm" ); + ent.v["origin"] = ( 1275.41, -1668.1, 505.386 ); + ent.v["angles"] = ( 277.839, 154.121, -150.075 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_fire_sm" ); + ent.v["origin"] = ( 1259.45, -1663.67, 504.009 ); + ent.v["angles"] = ( 277.839, 154.121, -150.075 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 1259.37, -1664.85, 509.538 ); + ent.v["angles"] = ( 339.569, 260.459, 37.8245 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 1277.53, -1668.25, 503.716 ); + ent.v["angles"] = ( 339.569, 260.459, 37.8245 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_fire_sm" ); + ent.v["origin"] = ( 567.277, 150.251, 570.514 ); + ent.v["angles"] = ( 286.522, 114.537, -138.305 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_fire_sm" ); + ent.v["origin"] = ( -1096.57, -519.634, 543.024 ); + ent.v["angles"] = ( 294.944, 333.252, 26.6578 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke" ); + ent.v["origin"] = ( -2170.65, -781.139, 587.679 ); + ent.v["angles"] = ( 303.202, 101.231, -116.688 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1530.65, -758.395, 618.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_fire_lg" ); + ent.v["origin"] = ( 1429.72, -1509.42, 519.556 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); + ent.v["origin"] = ( 1625.76, 128.506, 1048.9 ); + ent.v["angles"] = ( 8.73666, 189.715, -127.142 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( 1634.52, 126.897, 1036.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_fire_lg" ); + ent.v["origin"] = ( -1109.8, -607.005, 544.777 ); + ent.v["angles"] = ( 276.285, 15.571, -16.9603 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_fire_distant" ); + ent.v["origin"] = ( -2241.5, -792.427, 513.146 ); + ent.v["angles"] = ( 354.781, 86.6078, 11.1304 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_fire_distant" ); + ent.v["origin"] = ( -2215.89, -3187.99, 450.309 ); + ent.v["angles"] = ( 280.506, 156.362, 101.335 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_fire_distant" ); + ent.v["origin"] = ( 1502.31, -3044.83, 456 ); + ent.v["angles"] = ( 280.506, 156.363, -68.6656 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_fire_distant" ); + ent.v["origin"] = ( -1841.49, 1344.22, 589.248 ); + ent.v["angles"] = ( 280.506, 156.363, -68.6656 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_fire_distant" ); + ent.v["origin"] = ( 1707.9, 2207.51, 579 ); + ent.v["angles"] = ( 280.506, 156.363, -68.6656 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1014.92, 625.071, 583.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_fire_distant" ); + ent.v["origin"] = ( -366.956, 2456.48, 627.511 ); + ent.v["angles"] = ( 280.506, 156.363, -68.6656 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_embers" ); + ent.v["origin"] = ( -1171.67, 1235.39, 577.61 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_fire_lg" ); + ent.v["origin"] = ( -1127.9, 1219.65, 606.683 ); + ent.v["angles"] = ( 276.285, 15.571, -16.9603 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_embers" ); + ent.v["origin"] = ( 1738.58, 2098.89, 599 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_embers" ); + ent.v["origin"] = ( 1865.73, -49.4312, 599 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_embers" ); + ent.v["origin"] = ( 1450.64, -1522.83, 543.426 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( -220.002, -830.659, 552.486 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 793.626, -361.674, 558 ); + ent.v["angles"] = ( 356.591, 327.205, 22.8033 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_fire_distant" ); + ent.v["origin"] = ( -1666.03, -2387.15, 430.411 ); + ent.v["angles"] = ( 281.958, 95.5086, -29.1018 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 557.212, 629.073, 687.125 ); + ent.v["angles"] = ( 42.0012, 193.021, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 551.54, 652.945, 680.125 ); + ent.v["angles"] = ( 26.9544, 267.226, 26.8022 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -603.546, -1046.59, 604.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -339.741, -944.891, 616.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 927.252, 375.411, 630.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 120.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 639.417, 621.634, 627.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -755.14, 1619.51, 641.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1299.98, -1853.96, 565.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1036.08, -2769.44, 530.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 713.327, -857.275, 610.002 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 680.888, -552.694, 593.979 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 382.759, -486.13, 604.008 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1037.2, 2053.76, 597 ); + ent.v["angles"] = ( 359.642, 191, -0.933737 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_fire_distant" ); + ent.v["origin"] = ( 2343.25, 705.848, 549.353 ); + ent.v["angles"] = ( 0.488145, 345.522, 50.8411 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1097.87, 1078.23, 639.102 ); + ent.v["angles"] = ( 270, 0, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1172.77, 855.816, 614.471 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -327.432, 1351.39, 576 ); + ent.v["angles"] = ( 16.5768, 1.24074, 17.9215 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -379.064, -586.639, 580 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -113.546, 136.467, 588 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 134.845, 2.65759, 594 ); + ent.v["angles"] = ( 270, 0, 2.90451 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_slums_sun1" ); + ent.v["origin"] = ( -52513.5, 36299.2, 18243 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -1096.81, -602.4, 581.951 ); + ent.v["angles"] = ( 38.7356, 347.197, -2.72317 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -1102.28, -627.4, 578.111 ); + ent.v["angles"] = ( 33.0446, 280.811, -5.14528 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -871.979, -2830.09, 503.166 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -420.106, 327.428, 595.658 ); + ent.v["angles"] = ( 0.104537, 276, 1.99467 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 548.003, 279.082, 642.484 ); + ent.v["angles"] = ( 270, 0, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 787.562, -2414.41, 464 ); + ent.v["angles"] = ( 357.037, 260.989, 0.469818 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 437.672, 245.592, 612 ); + ent.v["angles"] = ( 2.99305, 94.0061, 0.20947 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1398.18, -438.871, 791 ); + ent.v["angles"] = ( 271, 163, -73 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1028.92, -3035.26, 683.021 ); + ent.v["angles"] = ( 271, 163, -73 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1059.79, -3063.87, 670.037 ); + ent.v["angles"] = ( 271, 163, -73 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1057.26, -3278.09, 676.031 ); + ent.v["angles"] = ( 271, 163, -73 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( -1197.57, -2622, 672 ); + ent.v["angles"] = ( 271, 163, -35 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 297.888, -132.326, 748.125 ); + ent.v["angles"] = ( 271, 163, -26 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( -998.041, 1424.76, 783.087 ); + ent.v["angles"] = ( 276.978, 151.84, 72.1485 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 302.841, -833.125, 588.995 ); + ent.v["angles"] = ( 343.881, 232.044, 11.9529 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 438.672, -466.224, 590.998 ); + ent.v["angles"] = ( 354.204, 168.079, -1.55845 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1178.86, 1120.29, 817.571 ); + ent.v["angles"] = ( 283.959, 178.821, -88.7878 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 863.989, 1242.15, 809.472 ); + ent.v["angles"] = ( 291.649, 270.721, -77.0853 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1272.18, 1133.09, 888.682 ); + ent.v["angles"] = ( 283.959, 178.821, -88.7878 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -518.169, 1425.43, 578 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 218.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -640.889, 103.133, 533.695 ); + ent.v["angles"] = ( 0.104537, 276, 1.99467 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 265.024, -486.663, 546 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1213.68, -1013.49, 588 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( -79.6434, -249.857, 752.095 ); + ent.v["angles"] = ( 273.296, 218.595, -8.2038 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1217.1, -258.363, 805.326 ); + ent.v["angles"] = ( 271, 163, -29 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( -406.794, 946.959, 801.745 ); + ent.v["angles"] = ( 283.323, 196.447, -96.5895 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( -411.854, 964.125, 758.863 ); + ent.v["angles"] = ( 283.323, 196.447, -141.59 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1018.94, -3190.14, 669.691 ); + ent.v["angles"] = ( 271, 163, -91 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 1142.23, -409.063, 552 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( 400.226, -1046.04, 552 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 159.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( 378.42, -364.824, 552 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 203.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 1242.87, -1522.52, 504 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -268.662, -1416.48, 552.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 163.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -505.713, -232.965, 543.438 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 228.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( -236.324, 1372.56, 576 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 228.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 1084.53, 177.122, 581 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 200.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( 456.554, 650.371, 575.954 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 117.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( 251.977, 1001.05, 575.209 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 144.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -317.066, 59.5064, 552 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 265.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( 88.8449, 1944.49, 576 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 243.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( 692.53, -2278.9, 448 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( 858.873, 519.901, 715.875 ); + ent.v["angles"] = ( 90, 45.7819, 124.782 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( 797.766, 504.151, 715.875 ); + ent.v["angles"] = ( 90, 45.7819, 124.782 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( 792.916, 846.693, 709.66 ); + ent.v["angles"] = ( 90, 0, -14 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( -645.246, -1005.58, 689.875 ); + ent.v["angles"] = ( 90, 355.083, -20.9166 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_fire_sprinkler_gush_splash_sm" ); + ent.v["origin"] = ( -469.252, -688.576, 553.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_fire_sprinkler_gush_splash_sm" ); + ent.v["origin"] = ( -775.723, 1642.17, 593.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_wall_water_bottom" ); + ent.v["origin"] = ( -776.311, 1640.43, 593.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; +} diff --git a/MP/Maps/Slums/clientscripts/mp/mp_slums.csc b/MP/Maps/Slums/clientscripts/mp/mp_slums.csc new file mode 100644 index 0000000..c118991 --- /dev/null +++ b/MP/Maps/Slums/clientscripts/mp/mp_slums.csc @@ -0,0 +1,24 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_slums_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_slums_amb; + +main() +{ + level.worldmapx = 226; + level.worldmapy = -736; + level.worldlat = 8.9515; + level.worldlong = -79.5355; + clientscripts\mp\_load::main(); + clientscripts\mp\mp_slums_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_slums_amb::main(); + setsaveddvar( "compassmaxrange", "2100" ); + waitforclient( 0 ); +/# + println( "*** Client : mp_slums running..." ); +#/ +} diff --git a/MP/Maps/Slums/clientscripts/mp/mp_slums_amb.csc b/MP/Maps/Slums/clientscripts/mp/mp_slums_amb.csc new file mode 100644 index 0000000..d9a46d3 --- /dev/null +++ b/MP/Maps/Slums/clientscripts/mp/mp_slums_amb.csc @@ -0,0 +1,58 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "slums_outside", 1 ); + setambientroomreverb( "slums_outside", "slums_outdoor", 1, 1 ); + setambientroomcontext( "slums_outside", "ringoff_plr", "outdoor" ); + declareambientroom( "slums_garage" ); + setambientroomreverb( "slums_garage", "slums_garage", 1, 1 ); + setambientroomcontext( "slums_garage", "ringoff_plr", "indoor" ); + declareambientroom( "slums_garage_partial" ); + setambientroomreverb( "slums_garage_partial", "slums_garage", 1, 1 ); + setambientroomcontext( "slums_garage_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "slums_broken_bldg" ); + setambientroomreverb( "slums_broken_bldg", "slums_broken_bldg", 1, 1 ); + setambientroomcontext( "slums_broken_bldg", "ringoff_plr", "indoor" ); + declareambientroom( "slums_broken_bldg_partial" ); + setambientroomreverb( "slums_broken_bldg_partial", "slums_broken_bldg", 1, 1 ); + setambientroomcontext( "slums_broken_bldg_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "slums_broken_bldg_md" ); + setambientroomreverb( "slums_broken_bldg_md", "slums_broken_bldg_md", 1, 1 ); + setambientroomcontext( "slums_broken_bldg_md", "ringoff_plr", "indoor" ); + declareambientroom( "slums_broken_bldg_md_partial" ); + setambientroomreverb( "slums_broken_bldg_md_partial", "slums_broken_bldg_md", 1, 1 ); + setambientroomcontext( "slums_broken_bldg_md_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "slums_over_hang" ); + setambientroomreverb( "slums_over_hang", "slums_over_hang", 1, 1 ); + setambientroomcontext( "slums_over_hang", "ringoff_plr", "outdoor" ); + declareambientroom( "slums_mtl_shed_open" ); + setambientroomreverb( "slums_mtl_shed_open", "slums_alley", 1, 1 ); + setambientroomcontext( "slums_mtl_shed_open", "ringoff_plr", "outdoor" ); + declareambientroom( "slums_alley" ); + setambientroomreverb( "slums_alley", "slums_alley", 1, 1 ); + setambientroomcontext( "slums_alley", "ringoff_plr", "indoor" ); + thread snd_start_autofx_audio(); + thread snd_play_loopers(); +} + +snd_play_loopers() +{ + +} + +snd_start_autofx_audio() +{ + snd_play_auto_fx( "fx_insects_swarm_lg_light", "amb_flies_sml", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_insects_swarm_dark_lg", "amb_flies_lrg", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_slums_fire_lg", "amb_fire_lrg", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_slums_fire_sm", "amb_fire_sm", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_slums_sprinkle_water", "amb_water_sprinkler", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_pipe_water_ground", "amb_pipe_water", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_water_splash_detail", "amb_water_splash", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_village_tube_light", "amb_flour_light", 0, 0, 0, 0 ); +} diff --git a/MP/Maps/Slums/clientscripts/mp/mp_slums_fx.csc b/MP/Maps/Slums/clientscripts/mp/mp_slums_fx.csc new file mode 100644 index 0000000..e44d0d2 --- /dev/null +++ b/MP/Maps/Slums/clientscripts/mp/mp_slums_fx.csc @@ -0,0 +1,65 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\createfx\mp_slums_fx; +#include clientscripts\mp\_fx; + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_debris_papers"] = loadfx( "maps/mp_maps/fx_mp_debris_papers" ); + level._effect["fx_mp_debris_papers_narrow"] = loadfx( "maps/mp_maps/fx_mp_debris_papers_narrow" ); + level._effect["fx_mp_express_train_blow_dust"] = loadfx( "maps/mp_maps/fx_mp_express_train_blow_dust" ); + level._effect["fx_insects_swarm_dark_lg"] = loadfx( "bio/insects/fx_insects_swarm_dark_lg" ); + level._effect["fx_mp_slums_leaves"] = loadfx( "maps/mp_maps/fx_mp_slums_leaves" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_mp_elec_spark_burst_md_runner"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_md_runner" ); + level._effect["fx_insects_butterfly_flutter"] = loadfx( "bio/insects/fx_insects_butterfly_flutter" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_slums_fire_sm"] = loadfx( "maps/mp_maps/fx_mp_slums_fire_sm" ); + level._effect["fx_mp_slums_fire_lg"] = loadfx( "maps/mp_maps/fx_mp_slums_fire_lg" ); + level._effect["fx_mp_slums_fire_distant"] = loadfx( "maps/mp_maps/fx_mp_slums_fire_distant" ); + level._effect["fx_mp_slums_embers"] = loadfx( "maps/mp_maps/fx_mp_slums_embers" ); + level._effect["fx_hvac_steam_md"] = loadfx( "smoke/fx_hvac_steam_md" ); + level._effect["fx_smk_smolder_gray_slow_shrt"] = loadfx( "smoke/fx_smk_smolder_gray_slow_shrt" ); + level._effect["fx_mp_slums_dark_smoke"] = loadfx( "maps/mp_maps/fx_mp_slums_dark_smoke" ); + level._effect["fx_smk_tin_hat_sm"] = loadfx( "smoke/fx_smk_tin_hat_sm" ); + level._effect["fx_mp_slums_vista_smoke"] = loadfx( "maps/mp_maps/fx_mp_slums_vista_smoke" ); + level._effect["fx_mp_slums_vista_smoke_low"] = loadfx( "maps/mp_maps/fx_mp_slums_vista_smoke_low" ); + level._effect["fx_mp_slums_dark_smoke_sm"] = loadfx( "maps/mp_maps/fx_mp_slums_dark_smoke_sm" ); + level._effect["fx_window_god_ray_sm"] = loadfx( "light/fx_window_god_ray_sm" ); + level._effect["fx_window_god_ray"] = loadfx( "light/fx_window_god_ray" ); + level._effect["fx_village_tube_light"] = loadfx( "light/fx_village_tube_light" ); + level._effect["fx_mp_slums_sprinkle_water"] = loadfx( "maps/mp_maps/fx_mp_slums_sprinkle_water" ); + level._effect["fx_wall_water_bottom"] = loadfx( "water/fx_wall_water_bottom" ); + level._effect["fx_water_splash_detail"] = loadfx( "water/fx_water_splash_detail" ); + level._effect["fx_pipe_water_ground"] = loadfx( "water/fx_pipe_water_ground" ); + level._effect["fx_water_fire_sprinkler_gush_splash_sm"] = loadfx( "water/fx_water_fire_sprinkler_gush_splash_sm" ); + level._effect["fx_lf_mp_slums_sun1"] = loadfx( "lens_flares/fx_lf_mp_slums_sun1" ); +} + +#using_animtree("fxanim_props"); + +precache_fx_anims() +{ + level.scr_anim["fxanim_props"]["control_wire_sm"] = %fxanim_gp_control_wire_sm_anim; + level.scr_anim["fxanim_props"]["roofvent"] = %fxanim_gp_roofvent_anim; + level.scr_anim["fxanim_props"]["rope_coil"] = %fxanim_gp_rope_coil_anim; + level.scr_anim["fxanim_props"]["dryer_loop"] = %fxanim_gp_dryer_loop_anim; +} + +main() +{ + clientscripts\mp\createfx\mp_slums_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fx_anims(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} diff --git a/MP/Maps/Slums/maps/mp/createart/mp_slums_art.gsc b/MP/Maps/Slums/maps/mp/createart/mp_slums_art.gsc new file mode 100644 index 0000000..3876e78 --- /dev/null +++ b/MP/Maps/Slums/maps/mp/createart/mp_slums_art.gsc @@ -0,0 +1,20 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + level.tweakfile = 1; + setdvar( "visionstore_glowTweakEnable", "0" ); + setdvar( "visionstore_glowTweakRadius0", "5" ); + setdvar( "visionstore_glowTweakRadius1", "" ); + setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); + setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); + setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); + setdvar( "visionstore_glowTweakBloomIntensity1", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); + visionsetnaked( "mp_slums", 0 ); + setdvar( "r_lightGridEnableTweaks", 1 ); + setdvar( "r_lightGridIntensity", 1.0 ); + setdvar( "r_lightGridContrast", 0 ); +} diff --git a/MP/Maps/Slums/maps/mp/createfx/mp_slums_fx.gsc b/MP/Maps/Slums/maps/mp/createfx/mp_slums_fx.gsc new file mode 100644 index 0000000..2fb1000 --- /dev/null +++ b/MP/Maps/Slums/maps/mp/createfx/mp_slums_fx.gsc @@ -0,0 +1,1032 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( -249.136, -855.816, 577.536 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 465.266, 1998.53, 576 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 189.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 465.781, 2024.23, 609 ); + ent.v["angles"] = ( 0, 212, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 118.27, 1901.9, 607 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 231.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -487.65, 1013.92, 564.147 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 254.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 447.828, 1661.07, 670.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1156.43, 88.4098, 627.011 ); + ent.v["angles"] = ( 0, 188, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -369.269, -457.055, 593.777 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 196.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 1257.24, -1055.25, 552 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 165.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1193.1, -422.824, 604.538 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1620.1, 280.059, 610 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 204.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1231.25, -1535.76, 564.267 ); + ent.v["angles"] = ( 0, 180, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 814.655, -1700.05, 493.677 ); + ent.v["angles"] = ( 357.037, 260.988, 0.469819 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 904.792, -3351.33, 462 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 124.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 63.2546, -2730.9, 449 ); + ent.v["angles"] = ( 0.313483, 174.008, 2.98405 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 852.984, -3226.58, 450 ); + ent.v["angles"] = ( 358.662, 153.859, 3.63692 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 367.72, -1515.4, 576 ); + ent.v["angles"] = ( 0, 180, 3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( 413.342, -1638.04, 552 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 163.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( 840.497, -1586.2, 513.235 ); + ent.v["angles"] = ( 336.083, 174.208, 13.3107 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( 383.867, -2727.93, 471.531 ); + ent.v["angles"] = ( 336.083, 174.208, 13.3107 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( -226.231, -2618.3, 468.216 ); + ent.v["angles"] = ( 336.083, 174.208, 13.3107 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke" ); + ent.v["origin"] = ( 1468.22, -1524.01, 505.439 ); + ent.v["angles"] = ( 279.824, 328.913, 7.17169 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke" ); + ent.v["origin"] = ( 1808.5, -45.308, 599 ); + ent.v["angles"] = ( 280.441, 357.415, -1.90431 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke" ); + ent.v["origin"] = ( -1122.61, 1202.27, 576.057 ); + ent.v["angles"] = ( 310.694, 7.82296, -0.158126 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke" ); + ent.v["origin"] = ( 1330.87, 1805.57, 576.327 ); + ent.v["angles"] = ( 296.906, 85.0686, -85.9113 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 994.578, -1127.72, 595 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 675.252, -1128.26, 599 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 344.002, -879.174, 608.982 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -335.945, -2227.9, 532.443 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -268.588, -2309.35, 504.763 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -72.2735, -2483.57, 508 ); + ent.v["angles"] = ( 295, 181, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -450.835, -2411.9, 490.914 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -558.81, -1976.25, 517.153 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -149.851, -1995.69, 492 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 417.446, -2934.3, 510.994 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( -1057.89, -374.858, 583.346 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 355.771, -1000.56, 543 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( -155.401, -171.078, 775 ); + ent.v["angles"] = ( 271, 163, -73 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 238.923, -37.4944, 792 ); + ent.v["angles"] = ( 287.102, 158.295, -94.0742 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1212.77, -163.885, 834.399 ); + ent.v["angles"] = ( 286.195, 138.464, -80.1276 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1453.76, -420.619, 851 ); + ent.v["angles"] = ( 271, 163, -73 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1464.98, -1125.69, 805 ); + ent.v["angles"] = ( 271, 163, -73 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( -406.35, -585.207, 552.613 ); + ent.v["angles"] = ( 274, 270, 25 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 395.276, 1158.87, 638.65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 182.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 220.658, 130.059, 598 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 188.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( -273.444, -813.508, 573.981 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 382.28, -260.432, 609.683 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 820.348, -1135.94, 580 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 155.578, -1256.22, 613 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -308.26, -2463.07, 506 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 543.549, -3401.81, 514.374 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -223.19, -2816.17, 510.909 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -648.813, -2473.37, 481 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -212.88, -1977.89, 495.096 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -317.05, -1100.11, 597.572 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -825.658, 218.259, 586.324 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -801.533, 666.124, 596.753 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -898.253, 1448.99, 645.579 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -698.392, 758.429, 635.088 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( -799.391, -186.421, 889.125 ); + ent.v["angles"] = ( 273, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( -796.912, 63.3163, 901.515 ); + ent.v["angles"] = ( 271, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( -690.391, -757.657, 890.888 ); + ent.v["angles"] = ( 270, 358.685, 1.31464 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( 1355.94, -1573.12, 962.79 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); + ent.v["origin"] = ( 1353.97, -1571.1, 968.789 ); + ent.v["angles"] = ( 6.6847, 102.812, -0.531975 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); + ent.v["origin"] = ( -433.279, 30.8972, 1029.8 ); + ent.v["angles"] = ( 43.0794, 113.754, 14.5109 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1425.87, -1048.51, 760.649 ); + ent.v["angles"] = ( 289.198, 146.699, -81.271 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 680.682, -862.471, 592.694 ); + ent.v["angles"] = ( 349.273, 332.5, -6.82402 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 467.543, -1138.91, 622 ); + ent.v["angles"] = ( 357, 111, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 577.511, -227.768, 601 ); + ent.v["angles"] = ( 357, 295, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 4.6388, -1210.95, 627 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 37.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( -1161.52, 1008.91, 919.008 ); + ent.v["angles"] = ( 272, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1243.82, -1660.02, 548.228 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_vista_smoke" ); + ent.v["origin"] = ( -621.875, -5380.24, 876.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_sprinkle_water" ); + ent.v["origin"] = ( -773.034, 1640.41, 718.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_splash_detail" ); + ent.v["origin"] = ( -771.502, 1647.34, 592.337 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_splash_detail" ); + ent.v["origin"] = ( -779.789, 1626.08, 593.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_splash_detail" ); + ent.v["origin"] = ( -486.017, -691.068, 551.283 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_splash_detail" ); + ent.v["origin"] = ( -451.241, -687.673, 552.495 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_sprinkle_water" ); + ent.v["origin"] = ( -467.677, -689.812, 689.033 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 294.573, -1115.65, 594.843 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -534.641, -1309.83, 607.994 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -1091.07, -615.063, 539.242 ); + ent.v["angles"] = ( 6.5365, 334.891, -6.4085 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -1087.59, -512.146, 545.441 ); + ent.v["angles"] = ( 6.5365, 334.891, -6.4085 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -1100.09, -631.07, 545.286 ); + ent.v["angles"] = ( 7.16937, 340.901, 23.3092 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 756.021, -1568.17, 496 ); + ent.v["angles"] = ( 339.569, 260.459, 37.8245 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 890.405, -1493.62, 496 ); + ent.v["angles"] = ( 339.569, 260.459, 37.8245 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 805.15, -1617.87, 498.527 ); + ent.v["angles"] = ( 7.67748, 299.488, 21.1493 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 422.165, -2736.92, 448 ); + ent.v["angles"] = ( 9.10744, 258.552, -4.25539 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 258.235, -2743.73, 448 ); + ent.v["angles"] = ( 10.6652, 267.399, 29.324 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 298.053, -2672.83, 448 ); + ent.v["angles"] = ( 336.672, 274.973, 9.87578 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -174.186, -2602.68, 453.171 ); + ent.v["angles"] = ( 6.44468, 102.056, 33.3416 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 573.655, 144.609, 575 ); + ent.v["angles"] = ( 339.384, 341.64, -37.8244 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_pipe_water_ground" ); + ent.v["origin"] = ( -609.875, 1752.37, 593.025 ); + ent.v["angles"] = ( 270, 0, -179 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 517.208, 139.357, 593 ); + ent.v["angles"] = ( 330.186, 333.887, -8.88146 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 325.279, -1517.28, 612.428 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 352.937, -1682.32, 607.287 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 904.383, -3400.03, 511 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -706.317, 108.196, 595.29 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -896.853, 818.549, 581.999 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 819.409, -715.655, 669.347 ); + ent.v["angles"] = ( 0, 179, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 570.933, 903.671, 682.125 ); + ent.v["angles"] = ( 13.4463, 164.456, 14.2581 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 1091.99, -1697.88, 612.125 ); + ent.v["angles"] = ( 21.7749, 98.6191, 0.218312 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 1046.56, -1699.97, 612.125 ); + ent.v["angles"] = ( 21.7749, 98.6191, 0.218312 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 1054.92, -1689.01, 612.125 ); + ent.v["angles"] = ( 359.461, 6.6804, -21.7696 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -577.855, -1518.53, 655 ); + ent.v["angles"] = ( 21.7749, 98.6191, 0.218312 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -617.034, -1522.15, 657 ); + ent.v["angles"] = ( 21.7749, 98.6191, 0.218312 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -689.729, -3181.92, 637.457 ); + ent.v["angles"] = ( 309.82, 261.617, -1.34511 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_fire_sm" ); + ent.v["origin"] = ( -231.18, -2617.83, 467.701 ); + ent.v["angles"] = ( 288.334, 253.225, 112.074 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -232.756, -2626.43, 471.116 ); + ent.v["angles"] = ( 28.5817, 289.094, 9.61949 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_fire_sm" ); + ent.v["origin"] = ( 1275.41, -1668.1, 505.386 ); + ent.v["angles"] = ( 277.839, 154.121, -150.075 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_fire_sm" ); + ent.v["origin"] = ( 1259.45, -1663.67, 504.009 ); + ent.v["angles"] = ( 277.839, 154.121, -150.075 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 1259.37, -1664.85, 509.538 ); + ent.v["angles"] = ( 339.569, 260.459, 37.8245 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 1277.53, -1668.25, 503.716 ); + ent.v["angles"] = ( 339.569, 260.459, 37.8245 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_fire_sm" ); + ent.v["origin"] = ( 567.277, 150.251, 570.514 ); + ent.v["angles"] = ( 286.522, 114.537, -138.305 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_fire_sm" ); + ent.v["origin"] = ( -1096.57, -519.634, 543.024 ); + ent.v["angles"] = ( 294.944, 333.252, 26.6578 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke" ); + ent.v["origin"] = ( -2170.65, -781.139, 587.679 ); + ent.v["angles"] = ( 303.202, 101.231, -116.688 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1530.65, -758.395, 618.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_fire_lg" ); + ent.v["origin"] = ( 1429.72, -1509.42, 519.556 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); + ent.v["origin"] = ( 1625.76, 128.506, 1048.9 ); + ent.v["angles"] = ( 8.73666, 189.715, -127.142 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( 1634.52, 126.897, 1036.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_fire_lg" ); + ent.v["origin"] = ( -1109.8, -607.005, 544.777 ); + ent.v["angles"] = ( 276.285, 15.571, -16.9603 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_fire_distant" ); + ent.v["origin"] = ( -2241.5, -792.427, 513.146 ); + ent.v["angles"] = ( 354.781, 86.6078, 11.1304 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_fire_distant" ); + ent.v["origin"] = ( -2215.89, -3187.99, 450.309 ); + ent.v["angles"] = ( 280.506, 156.362, 101.335 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_fire_distant" ); + ent.v["origin"] = ( 1502.31, -3044.83, 456 ); + ent.v["angles"] = ( 280.506, 156.363, -68.6656 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_fire_distant" ); + ent.v["origin"] = ( -1841.49, 1344.22, 589.248 ); + ent.v["angles"] = ( 280.506, 156.363, -68.6656 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_fire_distant" ); + ent.v["origin"] = ( 1707.9, 2207.51, 579 ); + ent.v["angles"] = ( 280.506, 156.363, -68.6656 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1014.92, 625.071, 583.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_fire_distant" ); + ent.v["origin"] = ( -366.956, 2456.48, 627.511 ); + ent.v["angles"] = ( 280.506, 156.363, -68.6656 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_embers" ); + ent.v["origin"] = ( -1171.67, 1235.39, 577.61 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_fire_lg" ); + ent.v["origin"] = ( -1127.9, 1219.65, 606.683 ); + ent.v["angles"] = ( 276.285, 15.571, -16.9603 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_embers" ); + ent.v["origin"] = ( 1738.58, 2098.89, 599 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_embers" ); + ent.v["origin"] = ( 1865.73, -49.4312, 599 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_embers" ); + ent.v["origin"] = ( 1450.64, -1522.83, 543.426 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( -220.002, -830.659, 552.486 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( 793.626, -361.674, 558 ); + ent.v["angles"] = ( 356.591, 327.205, 22.8033 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_fire_distant" ); + ent.v["origin"] = ( -1666.03, -2387.15, 430.411 ); + ent.v["angles"] = ( 281.958, 95.5086, -29.1018 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 557.212, 629.073, 687.125 ); + ent.v["angles"] = ( 42.0012, 193.021, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 551.54, 652.945, 680.125 ); + ent.v["angles"] = ( 26.9544, 267.226, 26.8022 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -603.546, -1046.59, 604.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -339.741, -944.891, 616.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 927.252, 375.411, 630.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 120.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 639.417, 621.634, 627.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -755.14, 1619.51, 641.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1299.98, -1853.96, 565.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1036.08, -2769.44, 530.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 713.327, -857.275, 610.002 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 680.888, -552.694, 593.979 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); + ent.v["origin"] = ( 382.759, -486.13, 604.008 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1037.2, 2053.76, 597 ); + ent.v["angles"] = ( 359.642, 191, -0.933737 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_fire_distant" ); + ent.v["origin"] = ( 2343.25, 705.848, 549.353 ); + ent.v["angles"] = ( 0.488145, 345.522, 50.8411 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1097.87, 1078.23, 639.102 ); + ent.v["angles"] = ( 270, 0, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1172.77, 855.816, 614.471 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -327.432, 1351.39, 576 ); + ent.v["angles"] = ( 16.5768, 1.24074, 17.9215 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -379.064, -586.639, 580 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -113.546, 136.467, 588 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 134.845, 2.65759, 594 ); + ent.v["angles"] = ( 270, 0, 2.90451 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_slums_sun1" ); + ent.v["origin"] = ( -52513.5, 36299.2, 18243 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -1096.81, -602.4, 581.951 ); + ent.v["angles"] = ( 38.7356, 347.197, -2.72317 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -1102.28, -627.4, 578.111 ); + ent.v["angles"] = ( 33.0446, 280.811, -5.14528 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -871.979, -2830.09, 503.166 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -420.106, 327.428, 595.658 ); + ent.v["angles"] = ( 0.104537, 276, 1.99467 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 548.003, 279.082, 642.484 ); + ent.v["angles"] = ( 270, 0, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 787.562, -2414.41, 464 ); + ent.v["angles"] = ( 357.037, 260.989, 0.469818 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 437.672, 245.592, 612 ); + ent.v["angles"] = ( 2.99305, 94.0061, 0.20947 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1398.18, -438.871, 791 ); + ent.v["angles"] = ( 271, 163, -73 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1028.92, -3035.26, 683.021 ); + ent.v["angles"] = ( 271, 163, -73 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1059.79, -3063.87, 670.037 ); + ent.v["angles"] = ( 271, 163, -73 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1057.26, -3278.09, 676.031 ); + ent.v["angles"] = ( 271, 163, -73 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( -1197.57, -2622, 672 ); + ent.v["angles"] = ( 271, 163, -35 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 297.888, -132.326, 748.125 ); + ent.v["angles"] = ( 271, 163, -26 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( -998.041, 1424.76, 783.087 ); + ent.v["angles"] = ( 276.978, 151.84, 72.1485 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 302.841, -833.125, 588.995 ); + ent.v["angles"] = ( 343.881, 232.044, 11.9529 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 438.672, -466.224, 590.998 ); + ent.v["angles"] = ( 354.204, 168.079, -1.55845 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1178.86, 1120.29, 817.571 ); + ent.v["angles"] = ( 283.959, 178.821, -88.7878 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 863.989, 1242.15, 809.472 ); + ent.v["angles"] = ( 291.649, 270.721, -77.0853 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1272.18, 1133.09, 888.682 ); + ent.v["angles"] = ( 283.959, 178.821, -88.7878 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -518.169, 1425.43, 578 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 218.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -640.889, 103.133, 533.695 ); + ent.v["angles"] = ( 0.104537, 276, 1.99467 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 265.024, -486.663, 546 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1213.68, -1013.49, 588 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( -79.6434, -249.857, 752.095 ); + ent.v["angles"] = ( 273.296, 218.595, -8.2038 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1217.1, -258.363, 805.326 ); + ent.v["angles"] = ( 271, 163, -29 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( -406.794, 946.959, 801.745 ); + ent.v["angles"] = ( 283.323, 196.447, -96.5895 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( -411.854, 964.125, 758.863 ); + ent.v["angles"] = ( 283.323, 196.447, -141.59 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_leaves" ); + ent.v["origin"] = ( 1018.94, -3190.14, 669.691 ); + ent.v["angles"] = ( 271, 163, -91 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 1142.23, -409.063, 552 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( 400.226, -1046.04, 552 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 159.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( 378.42, -364.824, 552 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 203.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 1242.87, -1522.52, 504 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -268.662, -1416.48, 552.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 163.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -505.713, -232.965, 543.438 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 228.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( -236.324, 1372.56, 576 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 228.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["origin"] = ( 1084.53, 177.122, 581 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 200.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( 456.554, 650.371, 575.954 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 117.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( 251.977, 1001.05, 575.209 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 144.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( -317.066, 59.5064, 552 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 265.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( 88.8449, 1944.49, 576 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 243.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); + ent.v["origin"] = ( 692.53, -2278.9, 448 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( 858.873, 519.901, 715.875 ); + ent.v["angles"] = ( 90, 45.7819, 124.782 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( 797.766, 504.151, 715.875 ); + ent.v["angles"] = ( 90, 45.7819, 124.782 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( 792.916, 846.693, 709.66 ); + ent.v["angles"] = ( 90, 0, -14 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( -645.246, -1005.58, 689.875 ); + ent.v["angles"] = ( 90, 355.083, -20.9166 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fire_sprinkler_gush_splash_sm" ); + ent.v["origin"] = ( -469.252, -688.576, 553.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_fire_sprinkler_gush_splash_sm" ); + ent.v["origin"] = ( -775.723, 1642.17, 593.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_wall_water_bottom" ); + ent.v["origin"] = ( -776.311, 1640.43, 593.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; +} diff --git a/MP/Maps/Slums/maps/mp/mp_slums.gsc b/MP/Maps/Slums/maps/mp/mp_slums.gsc new file mode 100644 index 0000000..0e9e177 --- /dev/null +++ b/MP/Maps/Slums/maps/mp/mp_slums.gsc @@ -0,0 +1,37 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_slums_fx; +#include maps\mp\_load; +#include maps\mp\_compass; +#include maps\mp\mp_slums_amb; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_slums_fx::main(); + maps\mp\_load::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_slums" ); + maps\mp\mp_slums_amb::main(); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + level.remotemotarviewleft = 30; + level.remotemotarviewright = 30; + level.remotemotarviewup = 10; + level.remotemotarviewdown = 25; +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2500", reset_dvars ); + ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1400", reset_dvars ); +} diff --git a/MP/Maps/Slums/maps/mp/mp_slums_amb.gsc b/MP/Maps/Slums/maps/mp/mp_slums_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Slums/maps/mp/mp_slums_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Slums/maps/mp/mp_slums_fx.gsc b/MP/Maps/Slums/maps/mp/mp_slums_fx.gsc new file mode 100644 index 0000000..4aeabfe --- /dev/null +++ b/MP/Maps/Slums/maps/mp/mp_slums_fx.gsc @@ -0,0 +1,60 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_slums_fx; + +main() +{ + precache_fxanim_props(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_slums_fx::main(); +} + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_debris_papers"] = loadfx( "maps/mp_maps/fx_mp_debris_papers" ); + level._effect["fx_mp_debris_papers_narrow"] = loadfx( "maps/mp_maps/fx_mp_debris_papers_narrow" ); + level._effect["fx_mp_express_train_blow_dust"] = loadfx( "maps/mp_maps/fx_mp_express_train_blow_dust" ); + level._effect["fx_insects_swarm_dark_lg"] = loadfx( "bio/insects/fx_insects_swarm_dark_lg" ); + level._effect["fx_mp_slums_leaves"] = loadfx( "maps/mp_maps/fx_mp_slums_leaves" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_mp_elec_spark_burst_md_runner"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_md_runner" ); + level._effect["fx_insects_butterfly_flutter"] = loadfx( "bio/insects/fx_insects_butterfly_flutter" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_slums_fire_sm"] = loadfx( "maps/mp_maps/fx_mp_slums_fire_sm" ); + level._effect["fx_mp_slums_fire_lg"] = loadfx( "maps/mp_maps/fx_mp_slums_fire_lg" ); + level._effect["fx_mp_slums_fire_distant"] = loadfx( "maps/mp_maps/fx_mp_slums_fire_distant" ); + level._effect["fx_mp_slums_embers"] = loadfx( "maps/mp_maps/fx_mp_slums_embers" ); + level._effect["fx_hvac_steam_md"] = loadfx( "smoke/fx_hvac_steam_md" ); + level._effect["fx_smk_smolder_gray_slow_shrt"] = loadfx( "smoke/fx_smk_smolder_gray_slow_shrt" ); + level._effect["fx_mp_slums_dark_smoke"] = loadfx( "maps/mp_maps/fx_mp_slums_dark_smoke" ); + level._effect["fx_smk_tin_hat_sm"] = loadfx( "smoke/fx_smk_tin_hat_sm" ); + level._effect["fx_mp_slums_vista_smoke"] = loadfx( "maps/mp_maps/fx_mp_slums_vista_smoke" ); + level._effect["fx_mp_slums_vista_smoke_low"] = loadfx( "maps/mp_maps/fx_mp_slums_vista_smoke_low" ); + level._effect["fx_mp_slums_dark_smoke_sm"] = loadfx( "maps/mp_maps/fx_mp_slums_dark_smoke_sm" ); + level._effect["fx_window_god_ray_sm"] = loadfx( "light/fx_window_god_ray_sm" ); + level._effect["fx_window_god_ray"] = loadfx( "light/fx_window_god_ray" ); + level._effect["fx_village_tube_light"] = loadfx( "light/fx_village_tube_light" ); + level._effect["fx_mp_slums_sprinkle_water"] = loadfx( "maps/mp_maps/fx_mp_slums_sprinkle_water" ); + level._effect["fx_wall_water_bottom"] = loadfx( "water/fx_wall_water_bottom" ); + level._effect["fx_water_splash_detail"] = loadfx( "water/fx_water_splash_detail" ); + level._effect["fx_pipe_water_ground"] = loadfx( "water/fx_pipe_water_ground" ); + level._effect["fx_water_fire_sprinkler_gush_splash_sm"] = loadfx( "water/fx_water_fire_sprinkler_gush_splash_sm" ); + level._effect["fx_lf_mp_slums_sun1"] = loadfx( "lens_flares/fx_lf_mp_slums_sun1" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["control_wire_sm"] = %fxanim_gp_control_wire_sm_anim; + level.scr_anim["fxanim_props"]["roofvent"] = %fxanim_gp_roofvent_anim; + level.scr_anim["fxanim_props"]["rope_coil"] = %fxanim_gp_rope_coil_anim; + level.scr_anim["fxanim_props"]["dryer_loop"] = %fxanim_gp_dryer_loop_anim; +} diff --git a/MP/Maps/Standoff/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Standoff/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Standoff/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Standoff/aitype/enemy_dog_mp.gsc b/MP/Maps/Standoff/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Standoff/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Standoff/character/character_mp_german_shepherd.gsc b/MP/Maps/Standoff/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Standoff/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Standoff/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Standoff/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Standoff/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Standoff/clientscripts/mp/createfx/mp_village_fx.csc b/MP/Maps/Standoff/clientscripts/mp/createfx/mp_village_fx.csc new file mode 100644 index 0000000..dde1dbc --- /dev/null +++ b/MP/Maps/Standoff/clientscripts/mp/createfx/mp_village_fx.csc @@ -0,0 +1,1032 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1813.99, -1057.09, 105.081 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_smoke_tower" ); + ent.v["origin"] = ( -191.62, 296.453, 414.336 ); + ent.v["angles"] = ( 291.776, 308.388, 1.73155 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); + ent.v["origin"] = ( -210.571, 316.289, 356.25 ); + ent.v["angles"] = ( 282, 304, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); + ent.v["origin"] = ( -230.998, 235.91, 433.022 ); + ent.v["angles"] = ( 282, 304, -17 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); + ent.v["origin"] = ( -147.721, 335.748, 400.938 ); + ent.v["angles"] = ( 274, 304, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); + ent.v["origin"] = ( -244.801, 271.62, 570.051 ); + ent.v["angles"] = ( 282.163, 294.467, 20.3233 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_smoke_med" ); + ent.v["origin"] = ( -248.784, 275.206, 594.056 ); + ent.v["angles"] = ( 298.271, 319.756, -1.84345 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_smoke_med" ); + ent.v["origin"] = ( -217.965, 251.159, 512.247 ); + ent.v["angles"] = ( 286.281, 321.123, -3.11529 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -558.044, -759.024, 30 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 111.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -1346.47, -2216.44, 48.1873 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 111.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -1371.65, -1164.77, 53 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 126.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -1556.65, -2526.23, 68.055 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 118.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -1330.26, -1845.9, 63 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 114.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -1785.33, -765.98, 71 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 96.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -1619.11, -313.069, 54 ); + ent.v["angles"] = ( 0, 111, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -1090.24, 183.883, 63 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 102.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -413.984, 196.57, 68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 128.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 337.617, 502.419, 53.3354 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 146.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 887.008, 1175.17, 48.401 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 125.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 968.22, 1644.06, 35.7693 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 141.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1239.62, 921.875, 22.625 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 128.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1791.78, 52.5281, 41.662 ); + ent.v["angles"] = ( 0, 134, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1975.07, -361.061, 62.7907 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 128.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1958.69, -674.701, 89.5614 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 128.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 197.522, -1232.76, 18.2266 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 134.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 779.89, -1271.39, 68.979 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 199.043, -1775.94, 41.6918 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 152.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -378.84, 407.307, 1.45424 ); + ent.v["angles"] = ( 358.798, 355.184, -1.78151 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_fire_sm" ); + ent.v["origin"] = ( -364.485, 405.894, 3.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -352.909, 403.105, -3.8992 ); + ent.v["angles"] = ( 346.02, 0.747598, -3.09166 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1180.88, 988.778, 63 ); + ent.v["angles"] = ( 359, 131, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1124.68, 1267.53, 59 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 162.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 32.072, -423.24, 61.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 352.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 235.832, -265.525, 207.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 265.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -483.932, -1081.38, 76.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 287.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1163.42, -1382.08, 63.5 ); + ent.v["angles"] = ( 0, 315, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1165.87, -1113.05, 193.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["origin"] = ( -1822.56, -1542.7, 145.182 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["origin"] = ( -1755.26, -1242.48, 74.125 ); + ent.v["angles"] = ( 359.708, 75, -0.956315 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -1781.29, -1479.9, 25 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_smoke_xsm" ); + ent.v["origin"] = ( -651.754, 509.066, 119.508 ); + ent.v["angles"] = ( 359.307, 95.0041, 89.9016 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_smoke_xsm" ); + ent.v["origin"] = ( -1169.88, -748.4, 80.3306 ); + ent.v["angles"] = ( 2.92213, 94.0682, 76.0184 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["origin"] = ( -1819.67, -98.3161, 66.71 ); + ent.v["angles"] = ( 359.61, 69, -0.920557 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["origin"] = ( -1875.49, -4.31169, 40.1502 ); + ent.v["angles"] = ( 359.553, 73, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -1836.25, -238.945, 74.5251 ); + ent.v["angles"] = ( 0.207931, 99, 0.978301 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -1600.68, 627.364, 57.5066 ); + ent.v["angles"] = ( 0.207931, 99, 0.978301 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -501.126, 1307.26, 64 ); + ent.v["angles"] = ( 359.212, 162.995, 0.61552 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -115.218, 368.125, 442.786 ); + ent.v["angles"] = ( 311.574, 10.8533, -27.6896 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1410.44, -576.939, 38.7539 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 137.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_smoke_xsm" ); + ent.v["origin"] = ( -2090.97, -2277.18, 77.6188 ); + ent.v["angles"] = ( 1.49495, 165.949, 71.2984 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1082.09, 2083.07, 29.4473 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 141.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_papers" ); + ent.v["origin"] = ( -651.623, 1051.25, 16 ); + ent.v["angles"] = ( 354, 148, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_papers" ); + ent.v["origin"] = ( 780.66, -605.108, 10 ); + ent.v["angles"] = ( 355, 100, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_papers" ); + ent.v["origin"] = ( -1798.52, -1729.65, 7.99999 ); + ent.v["angles"] = ( 350.001, 21.9847, 0.158839 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_dust_sm" ); + ent.v["origin"] = ( 884.348, 675.346, 19.2016 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 117.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_dust_sm" ); + ent.v["origin"] = ( 1345.5, 588.924, 18.4655 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 107.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_dust_sm" ); + ent.v["origin"] = ( 1775.24, -7.4167, 35.6556 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 142.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_dust_sm" ); + ent.v["origin"] = ( 1384.49, -1358.68, 21.0023 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 127.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_dust_sm" ); + ent.v["origin"] = ( 513.1, -1248.82, 28.5544 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 124.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_dust_sm" ); + ent.v["origin"] = ( -253.587, -1731.46, -12.4567 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 127.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_dust_sm" ); + ent.v["origin"] = ( -1794.98, -1507.68, 107.064 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_dust_sm" ); + ent.v["origin"] = ( -1772.46, -1218.43, 60.7191 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_dust_sm" ); + ent.v["origin"] = ( 174.843, -389.479, 253.125 ); + ent.v["angles"] = ( 27, 358, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_dust_ceiling" ); + ent.v["origin"] = ( 1185.28, 132.521, 228.36 ); + ent.v["angles"] = ( 358.071, 2.03485, -2.06856 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 936.636, 177.256, 190.125 ); + ent.v["angles"] = ( 23.996, 0, 0.44519 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 925.107, 19.4493, 178.469 ); + ent.v["angles"] = ( 24, 359, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1339.55, 279.875, 184.595 ); + ent.v["angles"] = ( 31.1604, 278.623, 4.91071 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_smoke_vista" ); + ent.v["origin"] = ( -2099.1, 1048.5, 28.4734 ); + ent.v["angles"] = ( 5, 121, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_smoke_vista" ); + ent.v["origin"] = ( -770.419, -4674.93, 23.078 ); + ent.v["angles"] = ( 296.659, 125.262, -162.638 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 912.848, 26.5797, 221.029 ); + ent.v["angles"] = ( 8.72117, 235.36, 52.9501 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 900.848, 174.059, 240.62 ); + ent.v["angles"] = ( 359.703, 222.057, 51.825 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 913.006, 259.51, 230.232 ); + ent.v["angles"] = ( 353.981, 216.367, 52.1394 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 1376.1, 268.679, 219.875 ); + ent.v["angles"] = ( 32.293, 32.3817, -44.3969 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 1284.71, 285.308, 240.087 ); + ent.v["angles"] = ( 22.669, 20.8383, -49.897 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 973.84, 692.361, 246.125 ); + ent.v["angles"] = ( 32.4936, 193.226, 30.4891 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 908.378, 1303.28, 159.172 ); + ent.v["angles"] = ( 25.6135, 109.745, -22.2253 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 918.094, 178.839, 230.125 ); + ent.v["angles"] = ( 40.1079, 155.323, 5.99661 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 913.077, 90.231, 229.452 ); + ent.v["angles"] = ( 40.1079, 155.323, 5.99661 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -299.297, -807.207, 58.106 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1873.37, -651.692, 57.739 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1662.52, 402.372, 59.9872 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1319.87, 921.454, 53.2581 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( 942.983, 341.61, 425.739 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( 291.429, -593.014, 407.06 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( -822.937, -1175.59, 430.223 ); + ent.v["angles"] = ( 277.613, 203.088, 165.729 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( -986.871, -342.934, 269.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -358.229, 1461.05, 100.125 ); + ent.v["angles"] = ( 15.9336, 175.648, 15.162 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 228.178, 1011.59, 204.125 ); + ent.v["angles"] = ( 0, 179, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -297.788, 922.356, 204.125 ); + ent.v["angles"] = ( 1, 87.9966, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -276.759, 1281.41, 210.125 ); + ent.v["angles"] = ( 0.875146, 59.993, 0.514866 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 214.797, 1232.47, 63.125 ); + ent.v["angles"] = ( 359.252, 166.985, 0.686445 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -349.762, 1449.72, 63.125 ); + ent.v["angles"] = ( 0.631591, 337.985, -0.795021 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 781.374, -808.218, 134.125 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 783.156, -714.052, 135.875 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 784.744, -906.287, 135.875 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 975.973, -713.423, 134.875 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 980.667, -808.839, 135.875 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 977.268, -968.699, 135.875 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( -76.4057, 1204.65, 131.875 ); + ent.v["angles"] = ( 90, 1.09202, 91.092 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 1400.8, 279.875, 354.18 ); + ent.v["angles"] = ( 18.8097, 17.4381, -51.1021 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 1306.53, 286, 233.551 ); + ent.v["angles"] = ( 9.11614, 176.045, 52.9863 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 898, 114.4, 246.618 ); + ent.v["angles"] = ( 1.86742, 78.6708, -41.0302 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 1294, 286, 358.222 ); + ent.v["angles"] = ( 18.8097, 17.4381, -51.1021 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 952.644, 685.316, 211.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -1156.81, -1210.64, 231.125 ); + ent.v["angles"] = ( 21.378, 181.56, 24.8377 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -1171.42, -1194.04, 209.125 ); + ent.v["angles"] = ( 338.969, 248.779, 56.8713 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_village_sun1" ); + ent.v["origin"] = ( -38009.8, 47714.5, 28695.4 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 945.914, 1190.32, 152 ); + ent.v["angles"] = ( 25.2608, 174.294, 23.0988 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 942.484, 1141.01, 155.207 ); + ent.v["angles"] = ( 25.8009, 173.551, 25.769 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 939.005, 1098.78, 157.686 ); + ent.v["angles"] = ( 24.8771, 160.285, 22.7013 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 935.66, 1055.82, 159.812 ); + ent.v["angles"] = ( 21.5704, 162.094, 18.5521 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 920.113, 1210.65, 164.104 ); + ent.v["angles"] = ( 8.9977, 234.539, 60.9576 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 920.44, 1302.62, 168 ); + ent.v["angles"] = ( 47, 179, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 926.183, 1118.53, 157.164 ); + ent.v["angles"] = ( 19.4211, 228.395, 59.4418 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( -549.859, -1253.8, 135.159 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( -549.077, -1164.38, 135.205 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_rectangle_light_01" ); + ent.v["origin"] = ( -960.26, -1375.54, 134.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1848.66, -1397.18, 92.8647 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1230.53, -1841.74, 46 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -807.588, -1606.77, 36.5376 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -340.739, -1793.53, 29.9801 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 53.9012, -1650.58, 3.15843 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 461.622, -1132.94, 59.5028 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 252.204, -928.109, 45.0477 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 472.348, 1482.87, 53 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1759.4, 35.3998, 48.7831 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["origin"] = ( 600.239, -1214.29, 33.5164 ); + ent.v["angles"] = ( 351.709, 137.106, -0.714527 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["origin"] = ( 113.833, -1703.52, 13.8842 ); + ent.v["angles"] = ( 351.829, 143.167, -1.58309 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["origin"] = ( -405.78, -1822.65, 34.8997 ); + ent.v["angles"] = ( 351.829, 143.167, -1.58309 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["origin"] = ( -1242.57, -1887.42, 36 ); + ent.v["angles"] = ( 351.829, 143.167, -1.58309 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["origin"] = ( -1819.15, -967.84, 62.6134 ); + ent.v["angles"] = ( 353.645, 91.755, 5.38352 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); + ent.v["origin"] = ( -2076.22, 1091.22, 4.05616 ); + ent.v["angles"] = ( 283.397, 277.182, 26.1863 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); + ent.v["origin"] = ( -817.744, -4709.2, 1 ); + ent.v["angles"] = ( 282, 304, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); + ent.v["origin"] = ( -805.943, -4686.76, -12 ); + ent.v["angles"] = ( 282, 304, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_vista_dust" ); + ent.v["origin"] = ( 813.546, 2758.29, 128 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_vista_dust" ); + ent.v["origin"] = ( 1723.89, 2220.71, 179.746 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_vista_dust" ); + ent.v["origin"] = ( 63.9353, 2214.58, 119.624 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_vista_dust" ); + ent.v["origin"] = ( -2608.83, 593.16, 156.903 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 106.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_vista_dust" ); + ent.v["origin"] = ( 1307.28, -1948.94, 93.1001 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_vista_dust" ); + ent.v["origin"] = ( -209.649, -2376.22, 130.134 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_vista_dust" ); + ent.v["origin"] = ( -1246.72, -2891.95, 93.3384 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 190.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_vista_dust" ); + ent.v["origin"] = ( -2359.62, -2768.92, 126.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 912.7, 76.0871, 67.9724 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 146.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); + ent.v["origin"] = ( -2124.18, 1052.12, 12.5861 ); + ent.v["angles"] = ( 284.961, 266.703, 60.3493 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); + ent.v["origin"] = ( -2098.48, -2364.86, 7.8243 ); + ent.v["angles"] = ( 326.356, 10.272, -18.1131 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); + ent.v["origin"] = ( -1797.63, -1819.84, 358.971 ); + ent.v["angles"] = ( 54.1716, 331.969, -34.4583 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -2093.66, -2367.55, -3.59778 ); + ent.v["angles"] = ( 346.967, 359.667, -18.8306 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_single_glare" ); + ent.v["origin"] = ( -232.778, 1421.11, 252.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( 414.294, -151.083, 137.512 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( 414.61, 34.1189, 138.393 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_barrel_fire" ); + ent.v["origin"] = ( -200.968, -1135.08, 32.5375 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); + ent.v["origin"] = ( -744.447, -4687.3, -6.99999 ); + ent.v["angles"] = ( 282, 304, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_village_rectangle_light_01" ); + ent.v["origin"] = ( -344.857, -1255.08, 166.875 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 897.152, 143.133, 257.051 ); + ent.v["angles"] = ( 14.6493, 219.838, 57.9798 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 898.876, 141.162, 236.842 ); + ent.v["angles"] = ( 15.703, 221.6, 58.441 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 898.665, 141.467, 215.101 ); + ent.v["angles"] = ( 16.7424, 223.379, 58.9382 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 897.683, 137.658, 195.015 ); + ent.v["angles"] = ( 16.7424, 223.379, 58.9382 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 897.561, 36.6521, 193.65 ); + ent.v["angles"] = ( 12.5037, 216.365, 57.1641 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 898.543, 40.4613, 213.736 ); + ent.v["angles"] = ( 14.6493, 219.838, 57.9798 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 898.754, 40.1557, 235.477 ); + ent.v["angles"] = ( 15.703, 221.6, 58.441 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 897.03, 42.1269, 255.686 ); + ent.v["angles"] = ( 14.1175, 218.964, 57.7626 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 898.242, 239.73, 196.02 ); + ent.v["angles"] = ( 14.2521, 221.329, 57.4713 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 899.224, 243.54, 216.106 ); + ent.v["angles"] = ( 12.4374, 220.042, 58.2885 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 899.435, 243.234, 237.847 ); + ent.v["angles"] = ( 11.9601, 215.506, 56.9821 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 897.711, 245.205, 258.056 ); + ent.v["angles"] = ( 13.0445, 217.228, 57.3548 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 1356.57, 279.182, 254.086 ); + ent.v["angles"] = ( 349.552, 50.6812, -60.8956 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 1356.21, 279.19, 232.922 ); + ent.v["angles"] = ( 355.023, 41.0474, -59.5981 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 1353.9, 279.184, 212.182 ); + ent.v["angles"] = ( 355.023, 41.0474, -59.5981 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 1352.74, 286.508, 194.909 ); + ent.v["angles"] = ( 13.6987, 62.8947, -60.7796 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -323.464, -466.393, 44 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -142.017, -73.3138, 44 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -171.254, -619.333, 51 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -31.754, -301.623, 36 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_hole_god_ray" ); + ent.v["origin"] = ( 1005.18, 1318.32, 178.504 ); + ent.v["angles"] = ( 27.9938, 332.352, -22.222 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_hole_god_ray" ); + ent.v["origin"] = ( 1090.45, 1297.82, 170.996 ); + ent.v["angles"] = ( 30.4315, 327.456, -25.5511 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_hole_god_ray" ); + ent.v["origin"] = ( 1136.72, 1294.88, 160.954 ); + ent.v["angles"] = ( 30.4948, 327.476, -26.1648 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_hole_god_ray" ); + ent.v["origin"] = ( 1195.15, 1226.48, 159.977 ); + ent.v["angles"] = ( 29.9515, 331.597, -23.9325 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_statue_water" ); + ent.v["origin"] = ( -156.217, 36.656, 60.3238 ); + ent.v["angles"] = ( 270, 359.97, 179.03 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -1017.28, -1058.86, 220.773 ); + ent.v["angles"] = ( 6.87046, 45.9913, -50.977 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -290.411, 913.023, 222.125 ); + ent.v["angles"] = ( 17.4239, 184.067, -76.3969 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -144.233, 900.932, 220.125 ); + ent.v["angles"] = ( 39.6414, 190.921, -73.0574 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -302.441, 915.411, 263.125 ); + ent.v["angles"] = ( 18, 273, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -140.095, 906.855, 219.125 ); + ent.v["angles"] = ( 42.705, 347.652, 72.2191 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -353.056, 1020.95, 206.515 ); + ent.v["angles"] = ( 359.93, 355.997, -0.997716 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 897.999, 177.858, 197.966 ); + ent.v["angles"] = ( 11.267, 57.2399, -57.898 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 897.989, 178.457, 217.576 ); + ent.v["angles"] = ( 11.267, 57.2399, -57.898 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 897.994, 178.381, 237.001 ); + ent.v["angles"] = ( 11.267, 57.2399, -57.898 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 897.984, 178.876, 256.689 ); + ent.v["angles"] = ( 11.267, 57.2399, -57.898 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 898.004, 79.6484, 261.293 ); + ent.v["angles"] = ( 11.267, 57.2399, -57.898 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 898.014, 79.1534, 241.604 ); + ent.v["angles"] = ( 11.267, 57.2399, -57.898 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 898.009, 79.2299, 222.18 ); + ent.v["angles"] = ( 11.267, 57.2399, -57.898 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 898.02, 78.6311, 202.57 ); + ent.v["angles"] = ( 11.267, 57.2399, -57.898 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 136.857, -339.268, 236.125 ); + ent.v["angles"] = ( 1.02272, 217.865, 59.1694 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 141.63, -351.598, 249.125 ); + ent.v["angles"] = ( 36.1769, 187.871, 24.4501 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 135.422, -410.54, 262.373 ); + ent.v["angles"] = ( 28.3807, 204.441, 33.3643 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_smoke_xsm" ); + ent.v["origin"] = ( -1540.86, -710.073, 61.2767 ); + ent.v["angles"] = ( 352.402, 207.901, 90.8231 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_smoke_xsm" ); + ent.v["origin"] = ( -1529.09, -705.57, 62.0473 ); + ent.v["angles"] = ( 352.402, 207.901, 89.8231 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_smoke_xsm" ); + ent.v["origin"] = ( -892.788, 623.037, 71.6458 ); + ent.v["angles"] = ( 352.402, 139.9, 90.8233 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_smoke_xsm" ); + ent.v["origin"] = ( -884.204, 613.814, 72.4164 ); + ent.v["angles"] = ( 352.402, 139.9, 89.8233 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -945.821, 641.789, 28.4432 ); + ent.v["angles"] = ( 288.722, 291.032, 18.3503 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -1028.82, 580.346, 30.5602 ); + ent.v["angles"] = ( 288.722, 291.032, 18.3503 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -1575.09, -768.375, 24.1325 ); + ent.v["angles"] = ( 288.722, 9.03239, 18.3503 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -1532.25, -862.331, 26.2496 ); + ent.v["angles"] = ( 288.722, 9.03239, 18.3503 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 133.112, -445.545, 230.906 ); + ent.v["angles"] = ( 40.1869, 82.7384, -56.261 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_single_glare" ); + ent.v["origin"] = ( -72.9229, 1563.44, 252.712 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; +} diff --git a/MP/Maps/Standoff/clientscripts/mp/mp_village.csc b/MP/Maps/Standoff/clientscripts/mp/mp_village.csc new file mode 100644 index 0000000..b65883d --- /dev/null +++ b/MP/Maps/Standoff/clientscripts/mp/mp_village.csc @@ -0,0 +1,24 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_village_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_village_amb; + +main() +{ + level.worldmapx = -631; + level.worldmapy = 312; + level.worldlat = 41.1178; + level.worldlong = 76.6909; + clientscripts\mp\_load::main(); + clientscripts\mp\mp_village_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_village_amb::main(); + setsaveddvar( "compassmaxrange", "2100" ); + waitforclient( 0 ); +/# + println( "*** Client : mp_village running..." ); +#/ +} diff --git a/MP/Maps/Standoff/clientscripts/mp/mp_village_amb.csc b/MP/Maps/Standoff/clientscripts/mp/mp_village_amb.csc new file mode 100644 index 0000000..594c098 --- /dev/null +++ b/MP/Maps/Standoff/clientscripts/mp/mp_village_amb.csc @@ -0,0 +1,95 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "village_outdoor", 1 ); + setambientroomtone( "village_outdoor", "amb_wind_extreior_2d", 0.55, 1 ); + setambientroomreverb( "village_outdoor", "village_outdoor", 1, 1 ); + setambientroomcontext( "village_outdoor", "ringoff_plr", "outdoor" ); + declareambientroom( "village_gas_station" ); + setambientroomreverb( "village_gas_station", "village_gas_station", 1, 1 ); + setambientroomcontext( "village_gas_station", "ringoff_plr", "indoor" ); + declareambientroom( "village_gas_station_partial" ); + setambientroomreverb( "village_gas_station_partial", "gen_smallroom", 1, 1 ); + setambientroomcontext( "village_gas_station_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "village_wood_house" ); + setambientroomreverb( "village_wood_house", "village_house_room", 1, 1 ); + setambientroomcontext( "village_wood_house", "ringoff_plr", "indoor" ); + declareambientroom( "village_wood_house_partial" ); + setambientroomreverb( "village_wood_house_partial", "village_house_room", 1, 1 ); + setambientroomcontext( "village_wood_house_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "village_garage" ); + setambientroomreverb( "village_garage", "village_garage", 1, 1 ); + setambientroomcontext( "village_garage", "ringoff_plr", "indoor" ); + declareambientroom( "village_garage_partial" ); + setambientroomreverb( "village_garage_partial", "village_garage", 1, 1 ); + setambientroomcontext( "village_garage_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "village_garage_stairs" ); + setambientroomreverb( "village_garage_stairs", "village_garage_stairs", 1, 1 ); + setambientroomcontext( "village_garage_stairs", "ringoff_plr", "indoor" ); + declareambientroom( "village_garage_office" ); + setambientroomreverb( "village_garage_office", "village_house_room", 1, 1 ); + setambientroomcontext( "village_garage_office", "ringoff_plr", "indoor" ); + declareambientroom( "village_garage_office_partial" ); + setambientroomreverb( "village_garage_office_partial", "village_house_room", 1, 1 ); + setambientroomcontext( "village_garage_office_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "village_stables" ); + setambientroomreverb( "village_stables", "gen_smallroom", 1, 1 ); + setambientroomcontext( "village_stables", "ringoff_plr", "outdoor" ); + declareambientroom( "village_store" ); + setambientroomreverb( "village_store", "village_store", 1, 1 ); + setambientroomcontext( "village_store", "ringoff_plr", "indoor" ); + declareambientroom( "village_store_partial" ); + setambientroomreverb( "village_store_partial", "village_store", 1, 1 ); + setambientroomcontext( "village_store_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "village_store_storage" ); + setambientroomreverb( "village_store_storage", "village_store_storage", 1, 1 ); + setambientroomcontext( "village_store_storage", "ringoff_plr", "indoor" ); + declareambientroom( "village_store_hallway" ); + setambientroomreverb( "village_store_hallway", "village_store_hallway", 1, 1 ); + setambientroomcontext( "village_store_hallway", "ringoff_plr", "indoor" ); + declareambientroom( "village_store_hallway_partial" ); + setambientroomreverb( "village_store_hallway_partial", "village_store_hallway", 1, 1 ); + setambientroomcontext( "village_store_hallway_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "village_diner" ); + setambientroomreverb( "village_diner", "village_diner", 1, 1 ); + setambientroomcontext( "village_diner", "ringoff_plr", "indoor" ); + declareambientroom( "village_diner_partial" ); + setambientroomreverb( "village_diner_partial", "village_diner", 1, 1 ); + setambientroomcontext( "village_diner_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "village_house_kitchen" ); + setambientroomreverb( "village_house_kitchen", "village_house_kitchen", 1, 1 ); + setambientroomcontext( "village_house_kitchen", "ringoff_plr", "indoor" ); + declareambientroom( "village_house_kitchen_partial" ); + setambientroomreverb( "village_house_kitchen_partial", "village_house_kitchen", 1, 1 ); + setambientroomcontext( "village_house_kitchen_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "village_house_room" ); + setambientroomreverb( "village_house_room", "village_house_room", 1, 1 ); + setambientroomcontext( "village_house_room", "ringoff_plr", "indoor" ); + declareambientroom( "village_house_room_partial" ); + setambientroomreverb( "village_house_room_partial", "village_house_room", 1, 1 ); + setambientroomcontext( "village_house_room_partial", "ringoff_plr", "outdoor" ); + thread snd_start_autofx_audio(); +} + +snd_play_loopers() +{ + +} + +snd_start_autofx_audio() +{ + snd_play_auto_fx( "fx_village_tube_light", "amb_tube_light", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_insects_swarm_lg_light", "amb_flies", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_village_tube_light_sq", "amb_tube_light", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_drone_rectangle_light_03", "amb_light_03", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_village_rectangle_light_01", "amb_light_03", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_village_barrel_fire", "amb_fire_sml", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_village_single_glare", "amb_cone_light", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_village_statue_water", "amb_water_fountain", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_slums_fire_sm", "amb_fire_sml", 0, 0, 0, 0 ); +} diff --git a/MP/Maps/Standoff/clientscripts/mp/mp_village_fx.csc b/MP/Maps/Standoff/clientscripts/mp/mp_village_fx.csc new file mode 100644 index 0000000..37c311b --- /dev/null +++ b/MP/Maps/Standoff/clientscripts/mp/mp_village_fx.csc @@ -0,0 +1,67 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\createfx\mp_village_fx; +#include clientscripts\mp\_fx; + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_express_train_blow_dust"] = loadfx( "maps/mp_maps/fx_mp_express_train_blow_dust" ); + level._effect["fx_mp_village_grass"] = loadfx( "maps/mp_maps/fx_mp_village_grass" ); + level._effect["fx_mp_village_papers"] = loadfx( "maps/mp_maps/fx_mp_village_papers" ); + level._effect["fx_mp_village_dust_sm"] = loadfx( "maps/mp_maps/fx_mp_village_dust_sm" ); + level._effect["fx_mp_village_dust_ceiling"] = loadfx( "maps/mp_maps/fx_mp_village_dust_ceiling" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_mp_elec_spark_burst_md_runner"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_md_runner" ); + level._effect["fx_mp_village_vista_dust"] = loadfx( "maps/mp_maps/fx_mp_village_vista_dust" ); + level._effect["fx_mp_village_smoke_fire_lg"] = loadfx( "maps/mp_maps/fx_mp_village_smoke_fire_lg" ); + level._effect["fx_mp_carrier_smoke_fire_sm"] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_fire_sm" ); + level._effect["fx_mp_village_smoke_fire_med"] = loadfx( "maps/mp_maps/fx_mp_village_smoke_fire_med" ); + level._effect["fx_mp_slums_fire_sm"] = loadfx( "maps/mp_maps/fx_mp_slums_fire_sm" ); + level._effect["fx_mp_village_barrel_fire"] = loadfx( "maps/mp_maps/fx_mp_village_barrel_fire" ); + level._effect["fx_mp_slums_dark_smoke_sm"] = loadfx( "maps/mp_maps/fx_mp_slums_dark_smoke_sm" ); + level._effect["fx_mp_village_smoke_tower"] = loadfx( "maps/mp_maps/fx_mp_village_smoke_tower" ); + level._effect["fx_mp_village_smoke_med"] = loadfx( "maps/mp_maps/fx_mp_village_smoke_med" ); + level._effect["fx_mp_village_smoke_xsm"] = loadfx( "maps/mp_maps/fx_mp_village_smoke_xsm" ); + level._effect["fx_mp_smoke_vista"] = loadfx( "maps/mp_maps/fx_mp_smoke_vista" ); + level._effect["fx_smk_tin_hat_sm"] = loadfx( "smoke/fx_smk_tin_hat_sm" ); + level._effect["fx_mp_village_single_glare"] = loadfx( "maps/mp_maps/fx_mp_village_single_glare" ); + level._effect["fx_window_god_ray"] = loadfx( "light/fx_window_god_ray" ); + level._effect["fx_window_god_ray_village"] = loadfx( "light/fx_window_god_ray_village" ); + level._effect["fx_window_god_ray_sm"] = loadfx( "light/fx_window_god_ray_sm" ); + level._effect["fx_drone_rectangle_light_03"] = loadfx( "light/fx_drone_rectangle_light_03" ); + level._effect["fx_village_tube_light"] = loadfx( "light/fx_village_tube_light" ); + level._effect["fx_village_tube_light_sq"] = loadfx( "light/fx_village_tube_light_sq" ); + level._effect["fx_village_rectangle_light_01"] = loadfx( "light/fx_village_rectangle_light_01" ); + level._effect["fx_mp_village_hole_god_ray"] = loadfx( "maps/mp_maps/fx_mp_village_hole_god_ray" ); + level._effect["fx_mp_village_statue_water"] = loadfx( "maps/mp_maps/fx_mp_village_statue_water" ); + level._effect["fx_lf_mp_village_sun1"] = loadfx( "lens_flares/fx_lf_mp_village_sun1" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["sparking_wires_med"] = %fxanim_gp_wirespark_med_anim; + level.scr_anim["fxanim_props"]["windsock"] = %fxanim_gp_windsock_anim; + level.scr_anim["fxanim_props"]["wire_coil_01"] = %fxanim_gp_wire_coil_01_anim; + level.scr_anim["fxanim_props"]["sign_sway_lrg"] = %fxanim_gp_sign_sway_lrg_anim; +} + +main() +{ + clientscripts\mp\createfx\mp_village_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fxanim_props(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} diff --git a/MP/Maps/Standoff/maps/mp/createart/mp_village_art.gsc b/MP/Maps/Standoff/maps/mp/createart/mp_village_art.gsc new file mode 100644 index 0000000..d3333e5 --- /dev/null +++ b/MP/Maps/Standoff/maps/mp/createart/mp_village_art.gsc @@ -0,0 +1,20 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + level.tweakfile = 1; + setdvar( "visionstore_glowTweakEnable", "0" ); + setdvar( "visionstore_glowTweakRadius0", "5" ); + setdvar( "visionstore_glowTweakRadius1", "" ); + setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); + setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); + setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); + setdvar( "visionstore_glowTweakBloomIntensity1", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); + visionsetnaked( "mp_village", 1 ); + setdvar( "r_lightGridEnableTweaks", 1 ); + setdvar( "r_lightGridIntensity", 1.0 ); + setdvar( "r_lightGridContrast", 0 ); +} diff --git a/MP/Maps/Standoff/maps/mp/createfx/mp_village_fx.gsc b/MP/Maps/Standoff/maps/mp/createfx/mp_village_fx.gsc new file mode 100644 index 0000000..0940347 --- /dev/null +++ b/MP/Maps/Standoff/maps/mp/createfx/mp_village_fx.gsc @@ -0,0 +1,1032 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1813.99, -1057.09, 105.081 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_smoke_tower" ); + ent.v["origin"] = ( -191.62, 296.453, 414.336 ); + ent.v["angles"] = ( 291.776, 308.388, 1.73155 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); + ent.v["origin"] = ( -210.571, 316.289, 356.25 ); + ent.v["angles"] = ( 282, 304, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); + ent.v["origin"] = ( -230.998, 235.91, 433.022 ); + ent.v["angles"] = ( 282, 304, -17 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); + ent.v["origin"] = ( -147.721, 335.748, 400.938 ); + ent.v["angles"] = ( 274, 304, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); + ent.v["origin"] = ( -244.801, 271.62, 570.051 ); + ent.v["angles"] = ( 282.163, 294.467, 20.3233 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_smoke_med" ); + ent.v["origin"] = ( -248.784, 275.206, 594.056 ); + ent.v["angles"] = ( 298.271, 319.756, -1.84345 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_smoke_med" ); + ent.v["origin"] = ( -217.965, 251.159, 512.247 ); + ent.v["angles"] = ( 286.281, 321.123, -3.11529 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -558.044, -759.024, 30 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 111.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -1346.47, -2216.44, 48.1873 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 111.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -1371.65, -1164.77, 53 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 126.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -1556.65, -2526.23, 68.055 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 118.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -1330.26, -1845.9, 63 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 114.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -1785.33, -765.98, 71 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 96.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -1619.11, -313.069, 54 ); + ent.v["angles"] = ( 0, 111, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -1090.24, 183.883, 63 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 102.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -413.984, 196.57, 68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 128.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 337.617, 502.419, 53.3354 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 146.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 887.008, 1175.17, 48.401 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 125.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 968.22, 1644.06, 35.7693 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 141.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1239.62, 921.875, 22.625 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 128.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1791.78, 52.5281, 41.662 ); + ent.v["angles"] = ( 0, 134, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1975.07, -361.061, 62.7907 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 128.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1958.69, -674.701, 89.5614 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 128.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 197.522, -1232.76, 18.2266 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 134.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 779.89, -1271.39, 68.979 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 199.043, -1775.94, 41.6918 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 152.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -378.84, 407.307, 1.45424 ); + ent.v["angles"] = ( 358.798, 355.184, -1.78151 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_fire_sm" ); + ent.v["origin"] = ( -364.485, 405.894, 3.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -352.909, 403.105, -3.8992 ); + ent.v["angles"] = ( 346.02, 0.747598, -3.09166 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1180.88, 988.778, 63 ); + ent.v["angles"] = ( 359, 131, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1124.68, 1267.53, 59 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 162.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 32.072, -423.24, 61.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 352.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 235.832, -265.525, 207.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 265.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -483.932, -1081.38, 76.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 287.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1163.42, -1382.08, 63.5 ); + ent.v["angles"] = ( 0, 315, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -1165.87, -1113.05, 193.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["origin"] = ( -1822.56, -1542.7, 145.182 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["origin"] = ( -1755.26, -1242.48, 74.125 ); + ent.v["angles"] = ( 359.708, 75, -0.956315 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -1781.29, -1479.9, 25 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_smoke_xsm" ); + ent.v["origin"] = ( -651.754, 509.066, 119.508 ); + ent.v["angles"] = ( 359.307, 95.0041, 89.9016 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_smoke_xsm" ); + ent.v["origin"] = ( -1169.88, -748.4, 80.3306 ); + ent.v["angles"] = ( 2.92213, 94.0682, 76.0184 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["origin"] = ( -1819.67, -98.3161, 66.71 ); + ent.v["angles"] = ( 359.61, 69, -0.920557 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["origin"] = ( -1875.49, -4.31169, 40.1502 ); + ent.v["angles"] = ( 359.553, 73, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -1836.25, -238.945, 74.5251 ); + ent.v["angles"] = ( 0.207931, 99, 0.978301 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -1600.68, 627.364, 57.5066 ); + ent.v["angles"] = ( 0.207931, 99, 0.978301 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( -501.126, 1307.26, 64 ); + ent.v["angles"] = ( 359.212, 162.995, 0.61552 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -115.218, 368.125, 442.786 ); + ent.v["angles"] = ( 311.574, 10.8533, -27.6896 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1410.44, -576.939, 38.7539 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 137.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_smoke_xsm" ); + ent.v["origin"] = ( -2090.97, -2277.18, 77.6188 ); + ent.v["angles"] = ( 1.49495, 165.949, 71.2984 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 1082.09, 2083.07, 29.4473 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 141.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_papers" ); + ent.v["origin"] = ( -651.623, 1051.25, 16 ); + ent.v["angles"] = ( 354, 148, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_papers" ); + ent.v["origin"] = ( 780.66, -605.108, 10 ); + ent.v["angles"] = ( 355, 100, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_papers" ); + ent.v["origin"] = ( -1798.52, -1729.65, 7.99999 ); + ent.v["angles"] = ( 350.001, 21.9847, 0.158839 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_dust_sm" ); + ent.v["origin"] = ( 884.348, 675.346, 19.2016 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 117.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_dust_sm" ); + ent.v["origin"] = ( 1345.5, 588.924, 18.4655 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 107.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_dust_sm" ); + ent.v["origin"] = ( 1775.24, -7.4167, 35.6556 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 142.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_dust_sm" ); + ent.v["origin"] = ( 1384.49, -1358.68, 21.0023 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 127.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_dust_sm" ); + ent.v["origin"] = ( 513.1, -1248.82, 28.5544 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 124.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_dust_sm" ); + ent.v["origin"] = ( -253.587, -1731.46, -12.4567 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 127.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_dust_sm" ); + ent.v["origin"] = ( -1794.98, -1507.68, 107.064 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_dust_sm" ); + ent.v["origin"] = ( -1772.46, -1218.43, 60.7191 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_dust_sm" ); + ent.v["origin"] = ( 174.843, -389.479, 253.125 ); + ent.v["angles"] = ( 27, 358, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_dust_ceiling" ); + ent.v["origin"] = ( 1185.28, 132.521, 228.36 ); + ent.v["angles"] = ( 358.071, 2.03485, -2.06856 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 936.636, 177.256, 190.125 ); + ent.v["angles"] = ( 23.996, 0, 0.44519 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 925.107, 19.4493, 178.469 ); + ent.v["angles"] = ( 24, 359, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1339.55, 279.875, 184.595 ); + ent.v["angles"] = ( 31.1604, 278.623, 4.91071 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smoke_vista" ); + ent.v["origin"] = ( -2099.1, 1048.5, 28.4734 ); + ent.v["angles"] = ( 5, 121, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smoke_vista" ); + ent.v["origin"] = ( -770.419, -4674.93, 23.078 ); + ent.v["angles"] = ( 296.659, 125.262, -162.638 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 912.848, 26.5797, 221.029 ); + ent.v["angles"] = ( 8.72117, 235.36, 52.9501 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 900.848, 174.059, 240.62 ); + ent.v["angles"] = ( 359.703, 222.057, 51.825 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 913.006, 259.51, 230.232 ); + ent.v["angles"] = ( 353.981, 216.367, 52.1394 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 1376.1, 268.679, 219.875 ); + ent.v["angles"] = ( 32.293, 32.3817, -44.3969 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 1284.71, 285.308, 240.087 ); + ent.v["angles"] = ( 22.669, 20.8383, -49.897 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 973.84, 692.361, 246.125 ); + ent.v["angles"] = ( 32.4936, 193.226, 30.4891 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 908.378, 1303.28, 159.172 ); + ent.v["angles"] = ( 25.6135, 109.745, -22.2253 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 918.094, 178.839, 230.125 ); + ent.v["angles"] = ( 40.1079, 155.323, 5.99661 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 913.077, 90.231, 229.452 ); + ent.v["angles"] = ( 40.1079, 155.323, 5.99661 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -299.297, -807.207, 58.106 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1873.37, -651.692, 57.739 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1662.52, 402.372, 59.9872 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 1319.87, 921.454, 53.2581 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( 942.983, 341.61, 425.739 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( 291.429, -593.014, 407.06 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( -822.937, -1175.59, 430.223 ); + ent.v["angles"] = ( 277.613, 203.088, 165.729 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); + ent.v["origin"] = ( -986.871, -342.934, 269.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -358.229, 1461.05, 100.125 ); + ent.v["angles"] = ( 15.9336, 175.648, 15.162 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 228.178, 1011.59, 204.125 ); + ent.v["angles"] = ( 0, 179, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -297.788, 922.356, 204.125 ); + ent.v["angles"] = ( 1, 87.9966, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -276.759, 1281.41, 210.125 ); + ent.v["angles"] = ( 0.875146, 59.993, 0.514866 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 214.797, 1232.47, 63.125 ); + ent.v["angles"] = ( 359.252, 166.985, 0.686445 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -349.762, 1449.72, 63.125 ); + ent.v["angles"] = ( 0.631591, 337.985, -0.795021 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 781.374, -808.218, 134.125 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 783.156, -714.052, 135.875 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 784.744, -906.287, 135.875 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 975.973, -713.423, 134.875 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 980.667, -808.839, 135.875 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["origin"] = ( 977.268, -968.699, 135.875 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( -76.4057, 1204.65, 131.875 ); + ent.v["angles"] = ( 90, 1.09202, 91.092 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 1400.8, 279.875, 354.18 ); + ent.v["angles"] = ( 18.8097, 17.4381, -51.1021 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 1306.53, 286, 233.551 ); + ent.v["angles"] = ( 9.11614, 176.045, 52.9863 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 898, 114.4, 246.618 ); + ent.v["angles"] = ( 1.86742, 78.6708, -41.0302 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 1294, 286, 358.222 ); + ent.v["angles"] = ( 18.8097, 17.4381, -51.1021 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 952.644, 685.316, 211.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -1156.81, -1210.64, 231.125 ); + ent.v["angles"] = ( 21.378, 181.56, 24.8377 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -1171.42, -1194.04, 209.125 ); + ent.v["angles"] = ( 338.969, 248.779, 56.8713 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_village_sun1" ); + ent.v["origin"] = ( -38009.8, 47714.5, 28695.4 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 945.914, 1190.32, 152 ); + ent.v["angles"] = ( 25.2608, 174.294, 23.0988 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 942.484, 1141.01, 155.207 ); + ent.v["angles"] = ( 25.8009, 173.551, 25.769 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 939.005, 1098.78, 157.686 ); + ent.v["angles"] = ( 24.8771, 160.285, 22.7013 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 935.66, 1055.82, 159.812 ); + ent.v["angles"] = ( 21.5704, 162.094, 18.5521 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 920.113, 1210.65, 164.104 ); + ent.v["angles"] = ( 8.9977, 234.539, 60.9576 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 920.44, 1302.62, 168 ); + ent.v["angles"] = ( 47, 179, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 926.183, 1118.53, 157.164 ); + ent.v["angles"] = ( 19.4211, 228.395, 59.4418 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( -549.859, -1253.8, 135.159 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( -549.077, -1164.38, 135.205 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_rectangle_light_01" ); + ent.v["origin"] = ( -960.26, -1375.54, 134.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1848.66, -1397.18, 92.8647 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1230.53, -1841.74, 46 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -807.588, -1606.77, 36.5376 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -340.739, -1793.53, 29.9801 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 53.9012, -1650.58, 3.15843 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 461.622, -1132.94, 59.5028 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 252.204, -928.109, 45.0477 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( 472.348, 1482.87, 53 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -1759.4, 35.3998, 48.7831 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["origin"] = ( 600.239, -1214.29, 33.5164 ); + ent.v["angles"] = ( 351.709, 137.106, -0.714527 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["origin"] = ( 113.833, -1703.52, 13.8842 ); + ent.v["angles"] = ( 351.829, 143.167, -1.58309 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["origin"] = ( -405.78, -1822.65, 34.8997 ); + ent.v["angles"] = ( 351.829, 143.167, -1.58309 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["origin"] = ( -1242.57, -1887.42, 36 ); + ent.v["angles"] = ( 351.829, 143.167, -1.58309 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["origin"] = ( -1819.15, -967.84, 62.6134 ); + ent.v["angles"] = ( 353.645, 91.755, 5.38352 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); + ent.v["origin"] = ( -2076.22, 1091.22, 4.05616 ); + ent.v["angles"] = ( 283.397, 277.182, 26.1863 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); + ent.v["origin"] = ( -817.744, -4709.2, 1 ); + ent.v["angles"] = ( 282, 304, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); + ent.v["origin"] = ( -805.943, -4686.76, -12 ); + ent.v["angles"] = ( 282, 304, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_vista_dust" ); + ent.v["origin"] = ( 813.546, 2758.29, 128 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_vista_dust" ); + ent.v["origin"] = ( 1723.89, 2220.71, 179.746 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_vista_dust" ); + ent.v["origin"] = ( 63.9353, 2214.58, 119.624 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_vista_dust" ); + ent.v["origin"] = ( -2608.83, 593.16, 156.903 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 106.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_vista_dust" ); + ent.v["origin"] = ( 1307.28, -1948.94, 93.1001 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_vista_dust" ); + ent.v["origin"] = ( -209.649, -2376.22, 130.134 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_vista_dust" ); + ent.v["origin"] = ( -1246.72, -2891.95, 93.3384 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 190.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_vista_dust" ); + ent.v["origin"] = ( -2359.62, -2768.92, 126.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["origin"] = ( 912.7, 76.0871, 67.9724 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 146.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); + ent.v["origin"] = ( -2124.18, 1052.12, 12.5861 ); + ent.v["angles"] = ( 284.961, 266.703, 60.3493 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); + ent.v["origin"] = ( -2098.48, -2364.86, 7.8243 ); + ent.v["angles"] = ( 326.356, 10.272, -18.1131 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); + ent.v["origin"] = ( -1797.63, -1819.84, 358.971 ); + ent.v["angles"] = ( 54.1716, 331.969, -34.4583 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -2093.66, -2367.55, -3.59778 ); + ent.v["angles"] = ( 346.967, 359.667, -18.8306 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_single_glare" ); + ent.v["origin"] = ( -232.778, 1421.11, 252.875 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( 414.294, -151.083, 137.512 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_tube_light" ); + ent.v["origin"] = ( 414.61, 34.1189, 138.393 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_barrel_fire" ); + ent.v["origin"] = ( -200.968, -1135.08, 32.5375 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); + ent.v["origin"] = ( -744.447, -4687.3, -6.99999 ); + ent.v["angles"] = ( 282, 304, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_village_rectangle_light_01" ); + ent.v["origin"] = ( -344.857, -1255.08, 166.875 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 897.152, 143.133, 257.051 ); + ent.v["angles"] = ( 14.6493, 219.838, 57.9798 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 898.876, 141.162, 236.842 ); + ent.v["angles"] = ( 15.703, 221.6, 58.441 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 898.665, 141.467, 215.101 ); + ent.v["angles"] = ( 16.7424, 223.379, 58.9382 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 897.683, 137.658, 195.015 ); + ent.v["angles"] = ( 16.7424, 223.379, 58.9382 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 897.561, 36.6521, 193.65 ); + ent.v["angles"] = ( 12.5037, 216.365, 57.1641 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 898.543, 40.4613, 213.736 ); + ent.v["angles"] = ( 14.6493, 219.838, 57.9798 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 898.754, 40.1557, 235.477 ); + ent.v["angles"] = ( 15.703, 221.6, 58.441 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 897.03, 42.1269, 255.686 ); + ent.v["angles"] = ( 14.1175, 218.964, 57.7626 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 898.242, 239.73, 196.02 ); + ent.v["angles"] = ( 14.2521, 221.329, 57.4713 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 899.224, 243.54, 216.106 ); + ent.v["angles"] = ( 12.4374, 220.042, 58.2885 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 899.435, 243.234, 237.847 ); + ent.v["angles"] = ( 11.9601, 215.506, 56.9821 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 897.711, 245.205, 258.056 ); + ent.v["angles"] = ( 13.0445, 217.228, 57.3548 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 1356.57, 279.182, 254.086 ); + ent.v["angles"] = ( 349.552, 50.6812, -60.8956 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 1356.21, 279.19, 232.922 ); + ent.v["angles"] = ( 355.023, 41.0474, -59.5981 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 1353.9, 279.184, 212.182 ); + ent.v["angles"] = ( 355.023, 41.0474, -59.5981 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 1352.74, 286.508, 194.909 ); + ent.v["angles"] = ( 13.6987, 62.8947, -60.7796 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -323.464, -466.393, 44 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -142.017, -73.3138, 44 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -171.254, -619.333, 51 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["origin"] = ( -31.754, -301.623, 36 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_hole_god_ray" ); + ent.v["origin"] = ( 1005.18, 1318.32, 178.504 ); + ent.v["angles"] = ( 27.9938, 332.352, -22.222 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_hole_god_ray" ); + ent.v["origin"] = ( 1090.45, 1297.82, 170.996 ); + ent.v["angles"] = ( 30.4315, 327.456, -25.5511 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_hole_god_ray" ); + ent.v["origin"] = ( 1136.72, 1294.88, 160.954 ); + ent.v["angles"] = ( 30.4948, 327.476, -26.1648 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_hole_god_ray" ); + ent.v["origin"] = ( 1195.15, 1226.48, 159.977 ); + ent.v["angles"] = ( 29.9515, 331.597, -23.9325 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_statue_water" ); + ent.v["origin"] = ( -156.217, 36.656, 60.3238 ); + ent.v["angles"] = ( 270, 359.97, 179.03 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( -1017.28, -1058.86, 220.773 ); + ent.v["angles"] = ( 6.87046, 45.9913, -50.977 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -290.411, 913.023, 222.125 ); + ent.v["angles"] = ( 17.4239, 184.067, -76.3969 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -144.233, 900.932, 220.125 ); + ent.v["angles"] = ( 39.6414, 190.921, -73.0574 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -302.441, 915.411, 263.125 ); + ent.v["angles"] = ( 18, 273, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -140.095, 906.855, 219.125 ); + ent.v["angles"] = ( 42.705, 347.652, 72.2191 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -353.056, 1020.95, 206.515 ); + ent.v["angles"] = ( 359.93, 355.997, -0.997716 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 897.999, 177.858, 197.966 ); + ent.v["angles"] = ( 11.267, 57.2399, -57.898 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 897.989, 178.457, 217.576 ); + ent.v["angles"] = ( 11.267, 57.2399, -57.898 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 897.994, 178.381, 237.001 ); + ent.v["angles"] = ( 11.267, 57.2399, -57.898 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 897.984, 178.876, 256.689 ); + ent.v["angles"] = ( 11.267, 57.2399, -57.898 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 898.004, 79.6484, 261.293 ); + ent.v["angles"] = ( 11.267, 57.2399, -57.898 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 898.014, 79.1534, 241.604 ); + ent.v["angles"] = ( 11.267, 57.2399, -57.898 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 898.009, 79.2299, 222.18 ); + ent.v["angles"] = ( 11.267, 57.2399, -57.898 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_village" ); + ent.v["origin"] = ( 898.02, 78.6311, 202.57 ); + ent.v["angles"] = ( 11.267, 57.2399, -57.898 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 136.857, -339.268, 236.125 ); + ent.v["angles"] = ( 1.02272, 217.865, 59.1694 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 141.63, -351.598, 249.125 ); + ent.v["angles"] = ( 36.1769, 187.871, 24.4501 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 135.422, -410.54, 262.373 ); + ent.v["angles"] = ( 28.3807, 204.441, 33.3643 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_smoke_xsm" ); + ent.v["origin"] = ( -1540.86, -710.073, 61.2767 ); + ent.v["angles"] = ( 352.402, 207.901, 90.8231 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_smoke_xsm" ); + ent.v["origin"] = ( -1529.09, -705.57, 62.0473 ); + ent.v["angles"] = ( 352.402, 207.901, 89.8231 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_smoke_xsm" ); + ent.v["origin"] = ( -892.788, 623.037, 71.6458 ); + ent.v["angles"] = ( 352.402, 139.9, 90.8233 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_smoke_xsm" ); + ent.v["origin"] = ( -884.204, 613.814, 72.4164 ); + ent.v["angles"] = ( 352.402, 139.9, 89.8233 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -945.821, 641.789, 28.4432 ); + ent.v["angles"] = ( 288.722, 291.032, 18.3503 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -1028.82, 580.346, 30.5602 ); + ent.v["angles"] = ( 288.722, 291.032, 18.3503 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -1575.09, -768.375, 24.1325 ); + ent.v["angles"] = ( 288.722, 9.03239, 18.3503 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["origin"] = ( -1532.25, -862.331, 26.2496 ); + ent.v["angles"] = ( 288.722, 9.03239, 18.3503 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray_sm" ); + ent.v["origin"] = ( 133.112, -445.545, 230.906 ); + ent.v["angles"] = ( 40.1869, 82.7384, -56.261 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_single_glare" ); + ent.v["origin"] = ( -72.9229, 1563.44, 252.712 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; +} diff --git a/MP/Maps/Standoff/maps/mp/mp_village.gsc b/MP/Maps/Standoff/maps/mp/mp_village.gsc new file mode 100644 index 0000000..9d90679 --- /dev/null +++ b/MP/Maps/Standoff/maps/mp/mp_village.gsc @@ -0,0 +1,32 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_village_fx; +#include maps\mp\_load; +#include maps\mp\mp_village_amb; +#include maps\mp\_compass; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_village_fx::main(); + maps\mp\_load::main(); + maps\mp\mp_village_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_village" ); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2600", reset_dvars ); +} diff --git a/MP/Maps/Standoff/maps/mp/mp_village_amb.gsc b/MP/Maps/Standoff/maps/mp/mp_village_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Standoff/maps/mp/mp_village_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Standoff/maps/mp/mp_village_fx.gsc b/MP/Maps/Standoff/maps/mp/mp_village_fx.gsc new file mode 100644 index 0000000..4108eb9 --- /dev/null +++ b/MP/Maps/Standoff/maps/mp/mp_village_fx.gsc @@ -0,0 +1,64 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_village_fx; +#include maps\mp\createart\mp_village_art; + +main() +{ + precache_fxanim_props(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_village_fx::main(); + maps\mp\createart\mp_village_art::main(); +} + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_express_train_blow_dust"] = loadfx( "maps/mp_maps/fx_mp_express_train_blow_dust" ); + level._effect["fx_mp_village_grass"] = loadfx( "maps/mp_maps/fx_mp_village_grass" ); + level._effect["fx_mp_village_papers"] = loadfx( "maps/mp_maps/fx_mp_village_papers" ); + level._effect["fx_mp_village_dust_sm"] = loadfx( "maps/mp_maps/fx_mp_village_dust_sm" ); + level._effect["fx_mp_village_dust_ceiling"] = loadfx( "maps/mp_maps/fx_mp_village_dust_ceiling" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_mp_elec_spark_burst_md_runner"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_md_runner" ); + level._effect["fx_mp_village_vista_dust"] = loadfx( "maps/mp_maps/fx_mp_village_vista_dust" ); + level._effect["fx_mp_village_smoke_fire_lg"] = loadfx( "maps/mp_maps/fx_mp_village_smoke_fire_lg" ); + level._effect["fx_mp_carrier_smoke_fire_sm"] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_fire_sm" ); + level._effect["fx_mp_village_smoke_fire_med"] = loadfx( "maps/mp_maps/fx_mp_village_smoke_fire_med" ); + level._effect["fx_mp_slums_fire_sm"] = loadfx( "maps/mp_maps/fx_mp_slums_fire_sm" ); + level._effect["fx_mp_village_barrel_fire"] = loadfx( "maps/mp_maps/fx_mp_village_barrel_fire" ); + level._effect["fx_mp_slums_dark_smoke_sm"] = loadfx( "maps/mp_maps/fx_mp_slums_dark_smoke_sm" ); + level._effect["fx_mp_village_smoke_tower"] = loadfx( "maps/mp_maps/fx_mp_village_smoke_tower" ); + level._effect["fx_mp_village_smoke_med"] = loadfx( "maps/mp_maps/fx_mp_village_smoke_med" ); + level._effect["fx_mp_village_smoke_xsm"] = loadfx( "maps/mp_maps/fx_mp_village_smoke_xsm" ); + level._effect["fx_mp_smoke_vista"] = loadfx( "maps/mp_maps/fx_mp_smoke_vista" ); + level._effect["fx_smk_tin_hat_sm"] = loadfx( "smoke/fx_smk_tin_hat_sm" ); + level._effect["fx_window_god_ray"] = loadfx( "light/fx_window_god_ray" ); + level._effect["fx_window_god_ray_village"] = loadfx( "light/fx_window_god_ray_village" ); + level._effect["fx_window_god_ray_sm"] = loadfx( "light/fx_window_god_ray_sm" ); + level._effect["fx_drone_rectangle_light_03"] = loadfx( "light/fx_drone_rectangle_light_03" ); + level._effect["fx_village_tube_light"] = loadfx( "light/fx_village_tube_light" ); + level._effect["fx_village_tube_light_sq"] = loadfx( "light/fx_village_tube_light_sq" ); + level._effect["fx_village_rectangle_light_01"] = loadfx( "light/fx_village_rectangle_light_01" ); + level._effect["fx_mp_village_single_glare"] = loadfx( "maps/mp_maps/fx_mp_village_single_glare" ); + level._effect["fx_mp_village_hole_god_ray"] = loadfx( "maps/mp_maps/fx_mp_village_hole_god_ray" ); + level._effect["fx_mp_village_statue_water"] = loadfx( "maps/mp_maps/fx_mp_village_statue_water" ); + level._effect["fx_lf_mp_village_sun1"] = loadfx( "lens_flares/fx_lf_mp_village_sun1" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["sparking_wires_med"] = %fxanim_gp_wirespark_med_anim; + level.scr_anim["fxanim_props"]["windsock"] = %fxanim_gp_windsock_anim; + level.scr_anim["fxanim_props"]["wire_coil_01"] = %fxanim_gp_wire_coil_01_anim; + level.scr_anim["fxanim_props"]["sign_sway_lrg"] = %fxanim_gp_sign_sway_lrg_anim; +} diff --git a/MP/Maps/Studio/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Studio/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Studio/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Studio/aitype/enemy_dog_mp.gsc b/MP/Maps/Studio/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Studio/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Studio/character/character_mp_german_shepherd.gsc b/MP/Maps/Studio/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Studio/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Studio/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Studio/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Studio/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Studio/clientscripts/mp/_fxanim_dlc.csc b/MP/Maps/Studio/clientscripts/mp/_fxanim_dlc.csc new file mode 100644 index 0000000..9d3d3be --- /dev/null +++ b/MP/Maps/Studio/clientscripts/mp/_fxanim_dlc.csc @@ -0,0 +1,239 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; + +fxanim_init_dlc( localclientnum ) +{ + a_fxanims = getentarray( localclientnum, "fxanim_dlc", "targetname" ); + assert( a_fxanims.size <= level.fxanim_max_anims ); + + for ( i = 0; i < a_fxanims.size; i++ ) + { + if ( isdefined( a_fxanims[i].fxanim_parent ) ) + { + parent = getent( localclientnum, a_fxanims[i].fxanim_parent, "targetname" ); + a_fxanims[a_fxanims.size] = parent; + a_fxanims[i] thread _fxanim_model_link( localclientnum ); + continue; + } + + a_fxanims[i] thread fxanim_think( localclientnum ); + } + + if ( isdefined( level.fx_anim_level_dlc_init ) ) + level thread [[ level.fx_anim_level_dlc_init ]]( localclientnum ); +} + +#using_animtree("fxanim_props_dlc"); + +fxanim_think( localclientnum, random_wait, random_speed ) +{ + self waittill_dobj( localclientnum ); + self thread _fxanim_hide(); + self _fxanim_wait(); + self useanimtree( #animtree ); + n_anim_count = self _fxanim_get_anim_count(); + self notify( "fxanim_start" ); + + for ( n_current_anim = 0; n_current_anim < n_anim_count; n_current_anim++ ) + { + str_scene = self _fxanim_get_scene_name( n_current_anim ); + + if ( !self _fxanim_modifier( str_scene ) ) + { + self _fxanim_animate( str_scene ); + self _fxanim_play_fx( localclientnum ); + } + + self _fxanim_change_anim( n_current_anim ); + } +} + +_fxanim_hide() +{ + if ( isdefined( self.fxanim_hide ) && self.fxanim_hide ) + { + self hide(); + + self waittill( "fxanim_start" ); + + self show(); + } +} + +_fxanim_modifier( str_scene ) +{ + switch ( str_scene ) + { + case "delete": + self delete(); + break; + case "hide": + self hide(); + break; + default: + return false; + break; + } + + return true; +} + +_fxanim_wait() +{ + if ( isdefined( self.fxanim_waittill_1 ) ) + { + if ( isdefined( self.fxanim_waittill_1 ) ) + _fxanim_change_anim( -1 ); + } + + if ( isdefined( self.fxanim_wait ) ) + wait( self.fxanim_wait ); + else if ( isdefined( self.fxanim_wait_min ) && isdefined( self.fxanim_wait_max ) ) + { + n_wait_time = randomfloatrange( self.fxanim_wait_min, self.fxanim_wait_max ); + wait( n_wait_time ); + } +} + +_fxanim_change_anim( n_fxanim_id ) +{ + str_waittill = undefined; + + if ( n_fxanim_id == -1 && isdefined( self.fxanim_waittill_1 ) ) + str_waittill = self.fxanim_waittill_1; + else if ( n_fxanim_id == 0 && isdefined( self.fxanim_waittill_2 ) ) + str_waittill = self.fxanim_waittill_2; + else if ( n_fxanim_id == 1 && isdefined( self.fxanim_waittill_3 ) ) + str_waittill = self.fxanim_waittill_3; + + if ( !isdefined( str_waittill ) && n_fxanim_id != -1 ) + self _fxanim_wait_for_anim_to_end( n_fxanim_id ); + else + { + a_changer = strtok( str_waittill, "_" ); + + level waittill( str_waittill ); + } +} + +_fxanim_wait_for_anim_to_end( n_fxanim_id ) +{ + str_scene = _fxanim_get_scene_name( n_fxanim_id ); + + if ( issubstr( str_scene, "_loop" ) ) + self waittillmatch( "looping anim", "end" ); + else + self waittillmatch( "single anim", "end" ); +} + +_fxanim_animate( str_scene ) +{ + if ( !isdefined( level.scr_anim["fxanim_props_dlc"][str_scene] ) ) + { +/# + if ( isdefined( str_scene ) ) + println( "Error: fxanim entity at " + self.origin + " is missing animation: " + str_scene ); + else + println( "Error: fxanim entity at " + self.origin + " is missing animation" ); +#/ + return; + } + + self animscripted( level.scr_anim["fxanim_props_dlc"][str_scene], 1.0, 0.0, 1.0 ); +} + +_fxanim_play_fx( localclientnum ) +{ + if ( isdefined( self.fxanim_fx_1 ) ) + { + assert( isdefined( self.fxanim_fx_1_tag ), "KVP fxanim_fx_1_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_1 ), self, self.fxanim_fx_1_tag ); + } + + if ( isdefined( self.fxanim_fx_2 ) ) + { + assert( isdefined( self.fxanim_fx_2_tag ), "KVP fxanim_fx_2_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_2 ), self, self.fxanim_fx_2_tag ); + } + + if ( isdefined( self.fxanim_fx_3 ) ) + { + assert( isdefined( self.fxanim_fx_3_tag ), "KVP fxanim_fx_3_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_3 ), self, self.fxanim_fx_3_tag ); + } + + if ( isdefined( self.fxanim_fx_4 ) ) + { + assert( isdefined( self.fxanim_fx_4_tag ), "KVP fxanim_fx_4_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_4 ), self, self.fxanim_fx_4_tag ); + } + + if ( isdefined( self.fxanim_fx_5 ) ) + { + assert( isdefined( self.fxanim_fx_5_tag ), "KVP fxanim_fx_5_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_5 ), self, self.fxanim_fx_5_tag ); + } +} + +_fxanim_get_anim_count() +{ + assert( isdefined( self.fxanim_scene_1 ), "fxanim at position " + self.origin + " needs at least one scene defined. Use the KVP fxanim_scene_1" ); + n_fx_count = 0; + + if ( !isdefined( self.fxanim_scene_2 ) ) + n_fx_count = 1; + else if ( !isdefined( self.fxanim_scene_3 ) ) + n_fx_count = 2; + else + n_fx_count = 3; + + return n_fx_count; +} + +_fxanim_get_scene_name( n_anim_id ) +{ + str_scene_name = undefined; + + switch ( n_anim_id ) + { + case 0: + str_scene_name = self.fxanim_scene_1; + break; + case 1: + str_scene_name = self.fxanim_scene_2; + break; + case 2: + str_scene_name = self.fxanim_scene_3; + break; + } + + return str_scene_name; +} + +_fxanim_model_link( localclientnum ) +{ + self waittill_dobj( localclientnum ); + assert( isdefined( self.fxanim_tag ), "Model at origin " + self.origin + " needs an fxanim_tag defined, to show which tag the model will link to" ); + m_parent = getent( localclientnum, self.fxanim_parent, "targetname" ); + assert( isdefined( m_parent ), "Model at origin " + self.origin + " does not have a proper parent. Make sure the fxanim_parent matches the targetname of the fxanim" ); + m_parent waittill_dobj( localclientnum ); + self.origin = m_parent gettagorigin( self.fxanim_tag ); + self.angles = m_parent gettagangles( self.fxanim_tag ); + self linkto( m_parent, self.fxanim_tag ); + + if ( isdefined( self.fxanim_hide ) ) + { + self hide(); + + m_parent waittill( "fxanim_start" ); + + self show(); + } +} + +getfx( fx ) +{ + assert( isdefined( level._effect[fx] ), "Fx " + fx + " is not defined in level._effect." ); + return level._effect[fx]; +} diff --git a/MP/Maps/Studio/clientscripts/mp/createfx/mp_studio_fx.csc b/MP/Maps/Studio/clientscripts/mp/createfx/mp_studio_fx.csc new file mode 100644 index 0000000..cf3fe13 --- /dev/null +++ b/MP/Maps/Studio/clientscripts/mp/createfx/mp_studio_fx.csc @@ -0,0 +1,1257 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -419.168, 1077.59, 4.7879 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -785.297, 1380.25, -18.085 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 67.0 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -811.384, 1230.81, -47.236 ); + ent.v["angles"] = ( 345.335, 52.5894, 3.18865 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 428.936, -465.795, -122.995 ); + ent.v["angles"] = ( 355.806, 198.58, 2.40333 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 372.677, -811.2, -124.239 ); + ent.v["angles"] = ( 351.361, 152.691, 1.22483 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 271.098, -547.557, -112.09 ); + ent.v["angles"] = ( 359, 184, 0 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 652.183, -14.9878, -67.2135 ); + ent.v["angles"] = ( 359.018, 195, -0.190854 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1686.03, 1079.32, -60 ); + ent.v["angles"] = ( 353.704, 158.272, -4.94521 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1485.75, 829.45, -65.4603 ); + ent.v["angles"] = ( 346.838, 187.509, -7.50258 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1851.56, 1162.9, 8.29118 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1324.87, 581.65, -73.357 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1068.34, 344.956, -97.7356 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 556.429, 71.8617, -81.5154 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 409.78, -467.84, -94.7611 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1449.72, 2170.98, -39.9823 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 342.0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1488.93, 2291.52, -36.3985 ); + ent.v["angles"] = ( 27, 360, 3 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 458.226, 2671.17, -48 ); + ent.v["angles"] = ( 349.174, 8.08485, 82.4906 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 372.225, 2598.58, -49.5248 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 554.083, 2626.09, -48 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 679.353, 2603.86, -50.5174 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 561.342, 2567.66, -52.8807 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -147.746, 2346.75, -59.5581 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -203.38, 2393.13, -52.0751 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 341.955, 2621.21, -52 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 341.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 459.483, 2739.2, 200.836 ); + ent.v["angles"] = ( 30.9528, 293.499, 1.80116 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -512.269, 2436.49, -54.8269 ); + ent.v["angles"] = ( 290.668, 274.677, 89.1924 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -118.479, 2557.07, -50.0739 ); + ent.v["angles"] = ( 290.668, 274.677, 89.1924 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -643.664, 2218.07, -4.0618 ); + ent.v["angles"] = ( 0.464774, 57.3871, -2.10586 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_sci_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 627.826, 2686.87, 273.555 ); + ent.v["angles"] = ( 9.97538, 297.938, -0.704698 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_toy_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -689.13, 19.5314, -125.37 ); + ent.v["angles"] = ( 359, 310, 0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_toy_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -542.577, -3.85301, -126.906 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_toy_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -775.348, -168.671, -126.875 ); + ent.v["angles"] = ( 12, 360, -13 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_toy_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -697.089, -391.881, -127.556 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_toy_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -609.744, -372.3, -126.518 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 348.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_toy_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -803.265, -199.911, -89.9242 ); + ent.v["angles"] = ( 12, 360, -13 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -793.77, -200.077, -61.6809 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -803.257, -199.41, -85.0372 ); + ent.v["angles"] = ( 8.25951, 338.06, -32.0767 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -802.103, -212.83, -43.3678 ); + ent.v["angles"] = ( 8.25951, 338.06, -32.0767 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1135.05, 621.062, 127.974 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 79.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -790.84, 593.596, 129.578 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1469.48, 680.631, 132.341 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 79.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -692.435, 711.327, 13.3726 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 103.0 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1167.18, 731.292, 38.3317 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 65.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -684.129, 1148.08, -2.11566 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 72.0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -578.878, 1630.4, -2.58031 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 77.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -865.916, 840.612, -60 ); + ent.v["angles"] = ( 349, 67, 0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1361.09, 880.965, -60.2991 ); + ent.v["angles"] = ( 344.062, 41.0805, 4.81067 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -484.115, 698.256, 124.771 ); + ent.v["angles"] = ( 10, 84, 0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -543.921, -2.38376, -130.689 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 348.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -774.796, -168.235, -122.694 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1255.22, 540.549, -36.5148 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 147.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1273.35, 290.621, -81.4672 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1106.1, 74.146, -80.7151 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog_ground" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1041.15, 143.258, -124 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 201.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog_ground" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1244.81, 542.923, -126 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 255.0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog_background" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1354.14, 113.741, -12.3206 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog_background" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1490.26, 339.428, -37.9775 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_torch" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 391.908, 1092.57, 276.293 ); + ent.v["angles"] = ( 74.9508, 150.486, -1.34998 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_torch" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 905.572, 1212.03, 243.963 ); + ent.v["angles"] = ( 340, 67, 0 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 848.799, 312.775, 6.8703 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 303.0 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 937.984, 350.049, 0.800499 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_sci_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 323.75, 2679.06, 228.147 ); + ent.v["angles"] = ( 1.75725, 234.021, -9.33929 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_ufo_smoke" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 403.479, 2713.06, 193.781 ); + ent.v["angles"] = ( 359.208, 274.358, 3.02421 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_ufo_smoke" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 523.244, 2681.61, 238.884 ); + ent.v["angles"] = ( 359.208, 274.358, 3.02421 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_sci_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -332.342, 2705.27, 156.457 ); + ent.v["angles"] = ( 311.522, 270.988, -11.2056 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_sci_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -237.287, 2689.93, 175.177 ); + ent.v["angles"] = ( 311.522, 270.988, -11.2056 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_sci_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 463.966, 2685.8, 139.64 ); + ent.v["angles"] = ( 300.579, 271.452, -0.337176 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_sci_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 531.638, 2693.88, 144.83 ); + ent.v["angles"] = ( 300.579, 271.452, -0.337176 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_sci_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 585.933, 2691.81, 144.965 ); + ent.v["angles"] = ( 300.579, 271.452, -0.337176 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_smoke_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -257.462, 2780.8, 118.891 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_smoke_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -399.398, 2822.33, 174.014 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_torch" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 551.515, 1109.32, 326.621 ); + ent.v["angles"] = ( 75.8612, 45.7869, -39.9325 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_smoke_ground" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -709.94, -215.475, -118.834 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_smoke_ground" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -691.003, 78.2237, -121.875 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_smoke_ground" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -703.517, -348.103, -119.875 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_smoke_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 535.913, 2763.83, 207.956 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_sci_fire_burst_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 403.059, 2686.61, 219.662 ); + ent.v["angles"] = ( 11, 276, 0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -851.147, 885.891, -71.1348 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 70.0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -314.439, 1470.67, -58.5135 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 55.0 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -446.494, 1682.59, -58.856 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1390.44, 783.137, -7.40077 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 34.0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -644.927, 803.374, -26.7342 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 65.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1210.28, 744.201, -64.2686 ); + ent.v["angles"] = ( 346.002, 65.9706, 0.196647 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1194.17, 813.831, -62.8241 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 70.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -239.529, 1238.38, -32.1725 ); + ent.v["angles"] = ( 355.134, 75.9827, -1.71667 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 623.534, 1651.12, -17.768 ); + ent.v["angles"] = ( 319.61, 77.8521, -7.74391 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 816.593, 1541.12, 122.125 ); + ent.v["angles"] = ( 290.195, 89.1061, -17.2951 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 894.485, 1213.47, 236.577 ); + ent.v["angles"] = ( 284.571, 96.2015, -24.0754 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 425.234, 1162.01, 334.224 ); + ent.v["angles"] = ( 316.979, 94.2527, 18.0529 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 274.178, 1428.36, -44 ); + ent.v["angles"] = ( 329, 51, 0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 753.763, 1211.65, -42.875 ); + ent.v["angles"] = ( 301.844, 82.3785, -11.2166 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 512.833, 1265.8, -42.9028 ); + ent.v["angles"] = ( 301.844, 82.3785, -11.2166 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_water_splash_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 41.9622, -1381.64, -127.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_cannon_splash_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -71.266, -944.427, -127.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog_background" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 514.399, 453.553, 105.629 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_rolling_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 553.339, 382.479, 5.47084 ); + ent.v["angles"] = ( 3.97865, 322.985, -0.418867 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_rolling_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 317.715, 351.608, 10.1889 ); + ent.v["angles"] = ( 353.952, 337.912, 0.628813 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1190.31, 318.399, -37.1449 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1036.54, 157.642, -64.7168 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog_machine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 836.789, 165.325, -117.056 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog_machine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 997.473, 262.393, -119.676 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog_machine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1079.41, 329.947, -122.352 ); + ent.v["angles"] = ( 359, 336, 0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog_machine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1268.16, 285.853, -122.389 ); + ent.v["angles"] = ( 359, 155.087, 0.994677 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog_machine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1188.08, 171.667, -120.523 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 145.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog_machine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 635.872, 103.248, -108.448 ); + ent.v["angles"] = ( 1.94438, 294.661, 0.765812 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 502.281, -982.172, -47 ); + ent.v["angles"] = ( 359.642, 253, -0.933881 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -591.101, -1353.82, -79.5931 ); + ent.v["angles"] = ( 344.517, 73.4634, 4.20901 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 379.533, -657.754, -122.304 ); + ent.v["angles"] = ( 346.341, 167.961, -1.08881 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog_ground" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1172.16, 284.384, -126.8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 236.0 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_water_splash_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -487.374, -1462.38, -127.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1188.46, 1605.07, 91.125 ); + ent.v["angles"] = ( 46.1181, 260.218, -78.7375 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 967.866, 1010.69, 83.125 ); + ent.v["angles"] = ( 52.0158, 291.037, -103.033 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1313.31, 1602.17, 26.125 ); + ent.v["angles"] = ( 42.7436, 255.04, -81.5432 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -198.722, -74.3946, 43 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -336.9, -179.679, 29.125 ); + ent.v["angles"] = ( 53.5724, 274.199, -65.3909 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -170.015, -303.164, 34.125 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -221.969, 62.8027, 41.125 ); + ent.v["angles"] = ( 49.5137, 273.032, -66.2701 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -405.711, 949.874, 26 ); + ent.v["angles"] = ( 36.3383, 276.516, -85.7276 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -269.703, 52.5723, -62 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 265.0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -71.36, 4.94275, -56.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 265.0 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2.75577, 1407.62, 156.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 256.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1310, 1544.43, -4.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 183.0 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1011.07, 914.597, 16.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 99.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 519.241, 1130.37, 272.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 241.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -889.183, 1951.46, -0.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 255.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1032.94, 1248.76, -5.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 75.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -115.039, 968.801, 7.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 85.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -716.27, 586.687, -24.4169 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 274.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_ufo_engine_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 421.831, 2621.14, 254.433 ); + ent.v["angles"] = ( 69.9541, 311.008, 24.8581 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_ufo_engine_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 481.154, 2599, 274.361 ); + ent.v["angles"] = ( 69.2382, 313.006, 46.6788 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_ufo_engine_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 541.076, 2627.28, 281.524 ); + ent.v["angles"] = ( 69.9541, 311.008, 32.8582 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_ufo_engine_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 565.47, 2687.3, 271.318 ); + ent.v["angles"] = ( 69.9541, 311.008, 30.8581 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_ufo_engine_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 397.134, 2678.27, 233.188 ); + ent.v["angles"] = ( 69.9541, 311.008, 9.85815 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_ufo_engine_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 422.385, 2738.37, 223.155 ); + ent.v["angles"] = ( 69.9541, 311.008, 20.8582 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_ufo_engine_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 482.007, 2765.06, 230.044 ); + ent.v["angles"] = ( 69.9541, 311.008, 35.8583 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_ufo_light_flash_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 481.86, 2682.38, 247.188 ); + ent.v["angles"] = ( 69.9541, 311.008, 30.8581 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_ufo_electric_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 527.056, 2639.22, 167.925 ); + ent.v["angles"] = ( 55.2138, 315.354, 24.3534 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_ufo_forcefield" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 464.213, 2703.16, 327.459 ); + ent.v["angles"] = ( 347.358, 3.33799, -15.2356 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_ufo_electric_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 307.651, 2687.88, 326.305 ); + ent.v["angles"] = ( 333.97, 183.123, -60.549 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_ufo_electric_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 639.875, 2686.78, 366.318 ); + ent.v["angles"] = ( 323.299, 13.4548, 70.2931 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_ufo_electric_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 448.215, 2637.88, 167.676 ); + ent.v["angles"] = ( 58.4077, 225.61, -49.9951 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -98.6132, -163.694, 30.125 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_electric_fence" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1292.82, 252.067, -0.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 148.0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_electric_fence" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1154.68, 65.9045, 12.7311 ); + ent.v["angles"] = ( 1, 126, -1 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_electric_fence" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1318.34, 324.426, 38.9517 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 157.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_spark_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1179.97, 85.1171, 12.8549 ); + ent.v["angles"] = ( 55.9308, 131.044, 141.56 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_spark_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1276.06, 226.214, -0.3836 ); + ent.v["angles"] = ( 55.9308, 131.044, 141.56 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_spark_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1181.21, 96.4925, 27.762 ); + ent.v["angles"] = ( 55.9308, 131.044, 141.56 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_electric_fence" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1376.49, 548.482, 27.915 ); + ent.v["angles"] = ( 2.99634, 168.004, 0.157163 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 67.489, -787.72, -92.4579 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 59.7321, -809.906, -93.4565 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 68.5933, -801.293, -93.4587 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 69.5039, -771.286, -93.4575 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_smoke_area_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 855.177, 1140.38, 116.989 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_smoke_area_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 813.079, 1073.07, 91.4545 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_smoke_area_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 860.166, 1541.18, 183.264 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_smoke_area_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 820.13, 1564.09, 133.283 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_sconce_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1158.98, 1598.76, 34.0837 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_sconce_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1101.39, 1752.06, 33.1063 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_sconce_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1037.23, 1928.72, 32.2759 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_sconce_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1262.81, 1308.79, 32.264 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_lamp_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -939.374, 1381.65, 39.7875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_sconce_glare2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -890.686, 1279.31, 33.2206 ); + ent.v["angles"] = ( 270.4, 89.9839, -89.9838 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_sconce_glare2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -838.68, 1422.59, 33.2744 ); + ent.v["angles"] = ( 270.4, 89.9839, -89.9838 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_sconce_glare2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -728.855, 1727.28, 33.294 ); + ent.v["angles"] = ( 270.4, 89.9836, -88.9835 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_sconce_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -836.162, 311.69, -88.8722 ); + ent.v["angles"] = ( 281, 90, -90 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_gold_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 59.8496, -792.982, -94.4596 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_gold_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -785.735, -692.449, -22.1113 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_gold_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -788.543, -833.75, -47.7833 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_single_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -7.20171, 1443.34, 220.099 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_single_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -83.5025, 1090.09, 204.824 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_flood_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 245.593, -253.426, -62.4976 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 114.0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -600.636, 2272.15, -48.3718 ); + ent.v["angles"] = ( 290.668, 274.677, 89.1924 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2205.64, 1298, 9.21009 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2423.39, 1285.76, 29.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1746.6, 1135.07, -56.6561 ); + ent.v["angles"] = ( 338.744, 93.2091, 6.98505 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1852.81, 1996.8, -3.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_studio_sun1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 10841.5, 66858.9, 96616.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -687.122, 1825.54, 65.0531 ); + ent.v["angles"] = ( 39, 162, 0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -718.082, 1724.43, 63.6571 ); + ent.v["angles"] = ( 39, 162, 0 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -830.907, 1414.44, 62.561 ); + ent.v["angles"] = ( 39, 162, 0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -866.961, 1323.08, 62.5687 ); + ent.v["angles"] = ( 39, 162, 0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -905.444, 1209.66, 64.8412 ); + ent.v["angles"] = ( 39, 162, 0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -347.563, 827.099, 86.003 ); + ent.v["angles"] = ( 70.9722, 270.973, -49.8717 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -484.324, 853.761, 83.0062 ); + ent.v["angles"] = ( 69.4359, 281.771, -78.0432 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 824.801, 1738.65, 51.0657 ); + ent.v["angles"] = ( 30, 308, 0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_saloon_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -769.428, 1562.52, 58.875 ); + ent.v["angles"] = ( 43, 158.307, 179.235 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -32.0345, 30.6323, 22.875 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -308.841, -6.63428, 19.875 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_saloon_glare_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -901.167, 1213.3, 59.9585 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_saloon_glare_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -863.82, 1307.43, 59.7489 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_saloon_glare_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -822.942, 1416.42, 59.0963 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_saloon_glare_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -670.448, 1835.08, 60.3287 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_saloon_glare_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -707.478, 1745.17, 60.0388 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_torch" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 824.841, 1562.82, 131.934 ); + ent.v["angles"] = ( 340, 67, 0 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_torch" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 882.248, 1524.09, 165.618 ); + ent.v["angles"] = ( 340, 67, 0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_electric_fence" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1471.07, 750.101, 65.4021 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 147.0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_electric_fence" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1599.09, 942.99, 80.8204 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 141.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_electric_fence" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1765.22, 1104.75, 65.8096 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 119.0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_gold_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -726.994, -761.421, -108.039 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -721.537, -784.228, -108.039 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -719.456, -765.715, -108.038 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -730.445, -745.949, -108.04 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -718.139, -733.919, -108.038 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 410.79, -554.778, 28.0345 ); + ent.v["angles"] = ( 39, 262, 0 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 405.376, -567.497, 8.19697 ); + ent.v["angles"] = ( 39, 270, 0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 399.918, -567.545, 10.8062 ); + ent.v["angles"] = ( 39, 270, 0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1264.27, 185.224, -44.9065 ); + ent.v["angles"] = ( 286.86, 192.632, -134.323 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 992.692, -385.271, 133.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1040.69, -402.387, -2.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 189.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1237.23, 138.681, -60.0913 ); + ent.v["angles"] = ( 300.14, 53.9746, 174.671 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 686.532, 206.38, -98.2946 ); + ent.v["angles"] = ( 274.242, 320.125, -87.8804 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fog_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1238.11, 140.235, -64.0766 ); + ent.v["angles"] = ( 312.037, 226.395, 3.99303 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_saloon_glare_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -731.539, 1665.89, 61.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -179.772, -198.805, 51.875 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -107.18, -302.61, 34.875 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -250.476, -308.096, 18.875 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -306.751, 104.863, 24.1561 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_smoke_ground" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -684.468, -67.9217, -120.875 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_smoke_ground" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -584.193, 30.6769, -123 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_smoke_ground" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -597.6, -433.891, -121.875 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_toy_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -743.634, 75.652, -129.401 ); + ent.v["angles"] = ( 359, 310, 0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_tube_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1000.36, -186.555, 158.871 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 551.425, 1620.86, 12.202 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 64.0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_tube_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -46.4167, 966.638, 82.6585 ); + ent.v["angles"] = ( 89, 0, 15 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_tube_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 22.9989, 1261.39, 83.7595 ); + ent.v["angles"] = ( 89, 0, 15 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_tube_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 71.7504, 1424.09, 83.6555 ); + ent.v["angles"] = ( 89, 360, 15 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -370.821, 894.577, 86.0089 ); + ent.v["angles"] = ( 66.3877, 309.805, 162.006 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -193.243, 1258.19, 157.125 ); + ent.v["angles"] = ( 14.2643, 294.85, -4.73233 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -176.393, 1262.88, 142.125 ); + ent.v["angles"] = ( 14.2643, 294.85, -4.73233 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_lantern_cave" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -836.878, 344.257, -82.7785 ); + ent.v["angles"] = ( 345.011, 351.907, -80.062 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_lantern_cave" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -839.215, 356.728, -81.1982 ); + ent.v["angles"] = ( 343.974, 9.89278, -85.4343 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -212.912, 143.392, 1.33438 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -148.791, 141.034, 3.67727 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -55.8977, -98.3554, 36.1655 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_lamp_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -936.325, 1130.6, 60.231 ); + ent.v["angles"] = ( 270.1, 270.018, 89.9824 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_lamp_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -652.628, 1909.25, 58.7255 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_red_blink" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 498.48, 2050.04, 107.248 ); + ent.v["angles"] = ( 270, 359.992, 0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_red_blink" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 438.785, 2026.6, 107.319 ); + ent.v["angles"] = ( 270, 359.992, 0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 413.526, 2157.43, 58.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 203.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -220.156, 1917.63, 48.125 ); + ent.v["angles"] = ( 0, 22, 1 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1721.89, 1222.08, -18 ); + ent.v["angles"] = ( 355, 75, 0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1799.67, 1278.58, -52.4704 ); + ent.v["angles"] = ( 355.989, 75.9862, 0.156968 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1919.89, 1271.08, -46.6587 ); + ent.v["angles"] = ( 347.356, 102.632, 2.38988 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_studio_sq_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1831.91, 2232.28, 87.1508 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_studio_sq_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1831.93, 2007.62, 87.3595 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_studio_sq_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1831.42, 2455.72, 87.7513 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_studio_sq_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1960.32, 2231.48, 87.7575 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_studio_sq_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2088.08, 2230.96, 87.5544 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_studio_tube_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -195.981, 1150.52, 76.2635 ); + ent.v["angles"] = ( 89, 0, 15 ); + ent.v["delay"] = -75; +} diff --git a/MP/Maps/Studio/clientscripts/mp/mp_studio.csc b/MP/Maps/Studio/clientscripts/mp/mp_studio.csc new file mode 100644 index 0000000..38930a3 --- /dev/null +++ b/MP/Maps/Studio/clientscripts/mp/mp_studio.csc @@ -0,0 +1,30 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_studio_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_studio_amb; + +main() +{ + level.worldmapx = 0; + level.worldmapy = 0; + level.worldlat = 34.0901; + level.worldlong = -118.335; + clientscripts\mp\_load::main(); + clientscripts\mp\mp_studio_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_studio_amb::main(); + setsaveddvar( "r_waterwavespeed", ".528274 .667363 .337185 .172103" ); + setsaveddvar( "r_waterwaveamplitude", "1.5 1.5 1.75 1.65" ); + setsaveddvar( "r_waterwavewavelength", "134.162 113.085 254.753 323.322" ); + setsaveddvar( "r_waterwavesteepness", "1 1 1 1" ); + setsaveddvar( "r_waterwaveangle", "0 130.23 57.3609 128.687" ); + setsaveddvar( "r_waterwavephase", "0 0 0 0" ); + waitforclient( 0 ); + setsaveddvar( "sm_sunsamplesizenear", 0.3 ); +/# + println( "*** Client : mp_studio running..." ); +#/ +} diff --git a/MP/Maps/Studio/clientscripts/mp/mp_studio_amb.csc b/MP/Maps/Studio/clientscripts/mp/mp_studio_amb.csc new file mode 100644 index 0000000..db13440 --- /dev/null +++ b/MP/Maps/Studio/clientscripts/mp/mp_studio_amb.csc @@ -0,0 +1,63 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "outside", 1 ); + setambientroomtone( "outside", "amb_wind_exterior_2d", 0.3, 0.5 ); + setambientroomreverb( "outside", "studio_outdoor", 1, 1 ); + setambientroomcontext( "outside", "ringoff_plr", "outdoor" ); + declareambientroom( "trailer" ); + setambientroomreverb( "trailer", "studio_hallway", 1, 1 ); + setambientroomcontext( "trailer", "ringoff_plr", "indoor" ); + declareambientroom( "med_room" ); + setambientroomreverb( "med_room", "studio_mediumroom", 1, 1 ); + setambientroomcontext( "med_room", "ringoff_plr", "indoor" ); + declareambientroom( "cave" ); + setambientroomreverb( "cave", "studio_cave", 1, 1 ); + setambientroomcontext( "cave", "ringoff_plr", "indoor" ); + declareambientroom( "partial_room" ); + setambientroomtone( "partial_room", "amb_wind_exterior_2d", 0.3, 0.5 ); + setambientroomreverb( "partial_room", "studio_smallroom", 1, 1 ); + setambientroomcontext( "partial_room", "ringoff_plr", "outdoor" ); + declareambientroom( "small_room" ); + setambientroomreverb( "small_room", "studio_smallroom", 1, 1 ); + setambientroomcontext( "small_room", "ringoff_plr", "indoor" ); + declareambientroom( "stone_room" ); + setambientroomreverb( "stone_room", "studio_stoneroom", 1, 1 ); + setambientroomcontext( "stone_room", "ringoff_plr", "indoor" ); + declareambientroom( "wherehouse" ); + setambientroomreverb( "wherehouse", "studio_smallroom", 1, 1 ); + setambientroomtone( "wherehouse", "amb_wind_exterior_2d", 0.3, 0.5 ); + setambientroomcontext( "wherehouse", "ringoff_plr", "outdoor" ); + declareambientroom( "saloon" ); + setambientroomreverb( "saloon", "studio_mediumroom", 1, 1 ); + setambientroomcontext( "saloon", "ringoff_plr", "indoor" ); + declareambientroom( "tall_room" ); + setambientroomreverb( "tall_room", "studio_tall", 1, 1 ); + setambientroomcontext( "tall_room", "ringoff_plr", "indoor" ); + declareambientroom( "shack" ); + setambientroomreverb( "shack", "studio_shack", 1, 1 ); + setambientroomcontext( "shack", "ringoff_plr", "indoor" ); + declareambientroom( "wood_room" ); + setambientroomreverb( "wood_room", "studio_mediumroom", 1, 1 ); + setambientroomcontext( "wood_room", "ringoff_plr", "indoor" ); + thread snd_start_autofx_audio(); +} + +snd_play_loopers() +{ + +} + +snd_start_autofx_audio() +{ + snd_play_auto_fx( "fx_mp_studio_fire_md", "amb_fire_med", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_studio_toy_fire", "amb_fire_sml", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_insects_swarm_lg_light", "amb_flies", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_studio_sconce_glare", "amb_lights_buzz_2", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_studio_sconce_glare2", "amb_lights_buzz_2", 0, 0, 0, 0 ); +} diff --git a/MP/Maps/Studio/clientscripts/mp/mp_studio_fx.csc b/MP/Maps/Studio/clientscripts/mp/mp_studio_fx.csc new file mode 100644 index 0000000..8c7c56a --- /dev/null +++ b/MP/Maps/Studio/clientscripts/mp/mp_studio_fx.csc @@ -0,0 +1,240 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\createfx\mp_studio_fx; +#include clientscripts\mp\_fx; +#include clientscripts\mp\_fxanim_dlc; + +precache_scripted_fx() +{ + level._effect["fx_mp_studio_robot_laser"] = loadfx( "maps/mp_maps/fx_mp_studio_robot_laser" ); +} + +precache_createfx_fx() +{ + +} + +main() +{ + clientscripts\mp\createfx\mp_studio_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fxanim_props(); + precache_fxanim_props_dlc(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); + + level._effect["fx_mp_express_train_blow_dust"] = loadfx( "maps/mp_maps/fx_mp_express_train_blow_dust" ); + level._effect["fx_mp_village_grass"] = loadfx( "maps/mp_maps/fx_mp_village_grass" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_mp_debris_papers"] = loadfx( "maps/mp_maps/fx_mp_debris_papers" ); + level._effect["fx_mp_studio_dust_ledge_runner"] = loadfx( "maps/mp_maps/fx_mp_studio_dust_ledge_runner" ); + level._effect["fx_sand_moving_in_air_pcloud"] = loadfx( "dirt/fx_sand_moving_in_air_pcloud" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_studio_fog"] = loadfx( "maps/mp_maps/fx_mp_studio_fog" ); + level._effect["fx_mp_studio_fog_ground"] = loadfx( "maps/mp_maps/fx_mp_studio_fog_ground" ); + level._effect["fx_mp_studio_fog_background"] = loadfx( "maps/mp_maps/fx_mp_studio_fog_background" ); + level._effect["fx_mp_studio_rolling_fog"] = loadfx( "maps/mp_maps/fx_mp_studio_rolling_fog" ); + level._effect["fx_mp_studio_fog_machine"] = loadfx( "maps/mp_maps/fx_mp_studio_fog_machine" ); + level._effect["fx_mp_studio_fog_sm"] = loadfx( "maps/mp_maps/fx_mp_studio_fog_sm" ); + level._effect["fx_mp_slums_dark_smoke_sm"] = loadfx( "maps/mp_maps/fx_mp_slums_dark_smoke_sm" ); + level._effect["fx_smk_smolder_gray_slow_shrt"] = loadfx( "smoke/fx_smk_smolder_gray_slow_shrt" ); + level._effect["fx_smk_smolder_gray_slow_dark"] = loadfx( "smoke/fx_smk_smolder_gray_slow_dark" ); + level._effect["fx_mp_studio_ufo_fire"] = loadfx( "maps/mp_maps/fx_mp_studio_ufo_fire" ); + level._effect["fx_mp_studio_ufo_smoke"] = loadfx( "maps/mp_maps/fx_mp_studio_ufo_smoke" ); + level._effect["fx_mp_studio_fire_md"] = loadfx( "maps/mp_maps/fx_mp_studio_fire_md" ); + level._effect["fx_mp_studio_smoke_vista"] = loadfx( "maps/mp_maps/fx_mp_studio_smoke_vista" ); + level._effect["fx_mp_studio_smoke_ground"] = loadfx( "maps/mp_maps/fx_mp_studio_smoke_ground" ); + level._effect["fx_mp_studio_smoke_area"] = loadfx( "maps/mp_maps/fx_mp_studio_smoke_area" ); + level._effect["fx_mp_studio_smoke_area_sm"] = loadfx( "maps/mp_maps/fx_mp_studio_smoke_area_sm" ); + level._effect["fx_mp_studio_toy_fire"] = loadfx( "maps/mp_maps/fx_mp_studio_toy_fire" ); + level._effect["fx_mp_studio_torch"] = loadfx( "maps/mp_maps/fx_mp_studio_torch" ); + level._effect["fx_mp_studio_sci_fire_burst_runner"] = loadfx( "maps/mp_maps/fx_mp_studio_sci_fire_burst_runner" ); + level._effect["fx_mp_studio_muzzle_tank_sm"] = loadfx( "maps/mp_maps/fx_mp_studio_muzzle_tank_sm" ); + level._effect["fx_mp_studio_sci_fire"] = loadfx( "maps/mp_maps/fx_mp_studio_sci_fire" ); + level._effect["fx_mp_studio_ufo_electric_runner"] = loadfx( "maps/mp_maps/fx_mp_studio_ufo_electric_runner" ); + level._effect["fx_mp_studio_electric_fence"] = loadfx( "maps/mp_maps/fx_mp_studio_electric_fence" ); + level._effect["fx_mp_studio_spark_sm_runner"] = loadfx( "maps/mp_maps/fx_mp_studio_spark_sm_runner" ); + level._effect["fx_mp_studio_water_dock_splash"] = loadfx( "maps/mp_maps/fx_mp_studio_water_dock_splash" ); + level._effect["fx_mp_studio_water_splash_runner"] = loadfx( "maps/mp_maps/fx_mp_studio_water_splash_runner" ); + level._effect["fx_mp_studio_cannon_splash_runner"] = loadfx( "maps/mp_maps/fx_mp_studio_cannon_splash_runner" ); + level._effect["fx_mp_studio_robot_laser"] = loadfx( "maps/mp_maps/fx_mp_studio_robot_laser" ); + level._effect["fx_light_god_ray_mp_studio"] = loadfx( "env/light/fx_light_god_ray_mp_studio" ); + level._effect["fx_mp_studio_ufo_light_flash"] = loadfx( "maps/mp_maps/fx_mp_studio_ufo_light_flash" ); + level._effect["fx_mp_studio_ufo_light_flash_lg"] = loadfx( "maps/mp_maps/fx_mp_studio_ufo_light_flash_lg" ); + level._effect["fx_mp_studio_fence_god_ray"] = loadfx( "maps/mp_maps/fx_mp_studio_fence_god_ray" ); + level._effect["fx_mp_studio_sconce_glare"] = loadfx( "maps/mp_maps/fx_mp_studio_sconce_glare" ); + level._effect["fx_mp_studio_sconce_glare2"] = loadfx( "maps/mp_maps/fx_mp_studio_sconce_glare2" ); + level._effect["fx_mp_studio_lamp_glare"] = loadfx( "maps/mp_maps/fx_mp_studio_lamp_glare" ); + level._effect["fx_mp_studio_flood_light"] = loadfx( "maps/mp_maps/fx_mp_studio_flood_light" ); + level._effect["fx_mp_studio_tube_glare"] = loadfx( "maps/mp_maps/fx_mp_studio_tube_glare" ); + level._effect["fx_mp_studio_lantern_cave"] = loadfx( "maps/mp_maps/fx_mp_studio_lantern_cave" ); + level._effect["fx_mp_studio_red_blink"] = loadfx( "maps/mp_maps/fx_mp_studio_red_blink" ); + level._effect["fx_studio_sq_glare"] = loadfx( "light/fx_studio_sq_glare" ); + level._effect["fx_mp_village_single_glare"] = loadfx( "maps/mp_maps/fx_mp_village_single_glare" ); + level._effect["fx_mp_studio_gold_sparkle_runner"] = loadfx( "maps/mp_maps/fx_mp_studio_gold_sparkle_runner" ); + level._effect["fx_mp_studio_gold_glow"] = loadfx( "maps/mp_maps/fx_mp_studio_gold_glow" ); + level._effect["fx_mp_studio_ufo_engine_runner"] = loadfx( "maps/mp_maps/fx_mp_studio_ufo_engine_runner" ); + level._effect["fx_mp_studio_ufo_forcefield"] = loadfx( "maps/mp_maps/fx_mp_studio_ufo_forcefield" ); + level._effect["fx_mp_studio_saloon_glare"] = loadfx( "maps/mp_maps/fx_mp_studio_saloon_glare" ); + level._effect["fx_mp_studio_saloon_glare_sq"] = loadfx( "maps/mp_maps/fx_mp_studio_saloon_glare_sq" ); + level._effect["fx_lf_mp_studio_sun1"] = loadfx( "lens_flares/fx_lf_mp_studio_sun1" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["roofvent"] = %fxanim_gp_roofvent_anim; + level.scr_anim["fxanim_props"]["roofvent_slow"] = %fxanim_gp_roofvent_slow_anim; + level.scr_anim["fxanim_props"]["dino_eggs"] = %fxanim_mp_stu_dino_eggs_anim; + level.scr_anim["fxanim_props"]["noose"] = %fxanim_mp_stu_noose_anim; + level.scr_anim["fxanim_props"]["t_rex_barn"] = %fxanim_mp_stu_t_rex_barn_anim; + level.scr_anim["fxanim_props"]["t_rex_fence_01"] = %fxanim_mp_stu_t_rex_fence_01_anim; + level.scr_anim["fxanim_props"]["t_rex_fence_02"] = %fxanim_mp_stu_t_rex_fence_02_anim; + level.scr_anim["fxanim_props"]["t_rex_fence_03"] = %fxanim_mp_stu_t_rex_fence_03_anim; + level.scr_anim["fxanim_props"]["robot_spider_01"] = %fxanim_mp_stu_robot_01_anim; + level.scr_anim["fxanim_props"]["robot_spider_02"] = %fxanim_mp_stu_robot_02_anim; + level.scr_anim["fxanim_props"]["robot_spider_03"] = %fxanim_mp_stu_robot_03_anim; + level.scr_anim["fxanim_props"]["shark_fins"] = %fxanim_mp_stu_shark_fins_anim; + level.scr_anim["fxanim_props"]["pirate_boats"] = %fxanim_mp_stu_pirate_boats_anim; + level.scr_anim["fxanim_props"]["brontosaurus_chew_anim"] = %fxanim_mp_stu_brontosaurus_chew_anim; + level.scr_anim["fxanim_props"]["brontosaurus_look_around"] = %fxanim_mp_stu_brontosaurus_look_around_anim; + level.scr_anim["fxanim_props"]["robot_scanning"] = %fxanim_mp_stu_robot_scanning; + level.scr_anim["fxanim_props"]["t_rex_stand_01"] = %fxanim_mp_stu_t_rex_stand_01_anim; + level.scr_anim["fxanim_props"]["t_rex_stand_02"] = %fxanim_mp_stu_t_rex_stand_02_anim; + level.scr_anim["fxanim_props"]["t_rex_stand_03"] = %fxanim_mp_stu_t_rex_stand_03_anim; + level.scr_anim["fxanim_props"]["captain_01"] = %fxanim_mp_stu_pirate_captain_01_anim; + level.scr_anim["fxanim_props"]["captain_02"] = %fxanim_mp_stu_pirate_captain_02_anim; + level.scr_anim["fxanim_props"]["oarsmen_01"] = %fxanim_mp_stu_pirate_oarsmen_01_anim; + level.scr_anim["fxanim_props"]["oarsmen_02"] = %fxanim_mp_stu_pirate_oarsmen_02_anim; + level.scr_anim["fxanim_props"]["captain_jailed"] = %fxanim_mp_stu_pirate_jailed_captain_anim; + level.scr_anim["fxanim_props"]["oarsmen_jailed"] = %fxanim_mp_stu_pirate_jailed_oarsmen_anim; + level.fx_anim_level_init = ::fxanim_init; +} + +precache_fxanim_props_dlc() +{ + +} + +fxanim_init( localclientnum ) +{ + level thread clientscripts\mp\_fxanim_dlc::fxanim_init_dlc( localclientnum ); + + if ( getgametypesetting( "allowMapScripting" ) == 0 ) + return; + + for (;;) + { + level waittill( "snap_processed", snapshotlocalclientnum ); + + if ( localclientnum != snapshotlocalclientnum ) + continue; + + level thread pirate_animate_fx( localclientnum, "pirate_captain_1", "boat_01_jnt", level.scr_anim["fxanim_props"]["captain_01"] ); + level thread pirate_animate_fx( localclientnum, "pirate_captain_2", "boat_02_jnt", level.scr_anim["fxanim_props"]["captain_02"] ); + level thread pirate_animate_fx( localclientnum, "pirate_oarsman_1", "boat_01_jnt", level.scr_anim["fxanim_props"]["oarsmen_01"] ); + level thread pirate_animate_fx( localclientnum, "pirate_oarsman_2", "boat_02_jnt", level.scr_anim["fxanim_props"]["oarsmen_02"] ); + trex_fence_ribs = getent( localclientnum, "trex_fence_ribs", "targetname" ); + t_rex_stand = getent( localclientnum, "t_rex_stand", "targetname" ); + t_rex_head = getent( localclientnum, "t_rex_fence", "targetname" ); + level thread t_rex_animate_fx( localclientnum, t_rex_head, t_rex_stand ); + trex_fence_ribs waittill_dobj( localclientnum ); + t_rex_head waittill_dobj( localclientnum ); + trex_fence_ribs.origin = t_rex_head gettagorigin( "body_base_jnt" ); + trex_fence_ribs.angles = t_rex_head gettagangles( "body_base_jnt" ); + trex_fence_ribs linkto( t_rex_head, "body_base_jnt" ); + brontosaurus = getent( localclientnum, "brontosaurus_head", "targetname" ); + brontosaurus thread brontosaurus_animate_fx( localclientnum ); + break; + } +} + +pirate_animate_fx( localclientnum, enttargetname, boatjoint, pirateanimation ) +{ + pirateent = getent( localclientnum, enttargetname, "targetname" ); + pirateent waittill_dobj( localclientnum ); + pirate_boats_link = getent( localclientnum, "pirate_boats_link", "targetname" ); + pirateent.origin = pirate_boats_link gettagorigin( boatjoint ); + pirateent.angles = pirate_boats_link gettagangles( boatjoint ); + pirateent linkto( pirate_boats_link, boatjoint ); + pirateent useanimtree( #animtree ); + pirateent setanimrestart( pirateanimation, 1.0, 0.0, 1.0 ); +} + +t_rex_animate_fx( localclientnum, t_rex_head, t_rex_stand ) +{ + t_rex_head waittill_dobj( localclientnum ); + t_rex_stand waittill_dobj( localclientnum ); + t_rex_head useanimtree( #animtree ); + t_rex_stand useanimtree( #animtree ); + currentanim = -1; + randomanim = -1; + mintime = 10; + maxtime = 15; + trexanims = []; + trexanims[0] = level.scr_anim["fxanim_props"]["t_rex_fence_01"]; + trexanims[1] = level.scr_anim["fxanim_props"]["t_rex_fence_02"]; + trexanims[2] = level.scr_anim["fxanim_props"]["t_rex_fence_03"]; + trexanimssize = trexanims.size; + trexbaseanims = []; + trexbaseanims[0] = level.scr_anim["fxanim_props"]["t_rex_stand_01"]; + trexbaseanims[1] = level.scr_anim["fxanim_props"]["t_rex_stand_02"]; + trexbaseanims[2] = level.scr_anim["fxanim_props"]["t_rex_stand_03"]; + trexbaseanimssize = trexbaseanims.size; + assert( trexbaseanimssize == trexanimssize ); + + for (;;) + { + timer = randomfloatrange( mintime, maxtime ); + wait( timer ); + + if ( currentanim != -1 ) + { + t_rex_head clearanim( trexanims[currentanim], 0.05 ); + t_rex_stand clearanim( trexbaseanims[currentanim], 0.05 ); + } + + for ( randomanim = randomint( trexanimssize ); randomanim == currentanim; randomanim = randomint( trexanimssize ) ) + { + + } + + currentanim = randomanim; + t_rex_head setanimrestart( trexanims[currentanim], 1.0, 0.0, 1.0 ); + t_rex_stand setanimrestart( trexbaseanims[currentanim], 1.0, 0.0, 1.0 ); +/# + mintime = getdvarfloatdefault( "mp_studio_trex_min_wait", mintime ); + maxtime = getdvarfloatdefault( "mp_studio_trex_max_wait", maxtime ); +#/ + } +} + +brontosaurus_animate_fx( localclientnum ) +{ + self waittill_dobj( localclientnum ); + self useanimtree( #animtree ); + mintime = 15; + maxtime = 20; + self animscripted( level.scr_anim["fxanim_props"]["brontosaurus_chew_anim"], 1.0, 0.0, 1.0 ); + + for (;;) + { + timer = randomfloatrange( mintime, maxtime ); + wait( timer ); + self clearanim( level.scr_anim["fxanim_props"]["brontosaurus_chew_anim"], 0.5 ); + self animscripted( level.scr_anim["fxanim_props"]["brontosaurus_look_around"], 1.0, 0.5, 1.0 ); + anim_length = getanimlength( level.scr_anim["fxanim_props"]["brontosaurus_look_around"] ); + wait( anim_length ); + self clearanim( level.scr_anim["fxanim_props"]["brontosaurus_look_around"], 0.5 ); + self animscripted( level.scr_anim["fxanim_props"]["brontosaurus_chew_anim"], 1.0, 0.5, 1.0 ); +/# + mintime = getdvarfloatdefault( "mp_studio_trex_min_wait", mintime ); + maxtime = getdvarfloatdefault( "mp_studio_trex_max_wait", maxtime ); +#/ + } +} diff --git a/MP/Maps/Studio/maps/mp/createfx/mp_studio_fx.gsc b/MP/Maps/Studio/maps/mp/createfx/mp_studio_fx.gsc new file mode 100644 index 0000000..024091d --- /dev/null +++ b/MP/Maps/Studio/maps/mp/createfx/mp_studio_fx.gsc @@ -0,0 +1,1257 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -419.168, 1077.59, 4.7879 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -785.297, 1380.25, -18.085 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 67.0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -811.384, 1230.81, -47.236 ); + ent.v["angles"] = ( 345.335, 52.5894, 3.18865 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 428.936, -465.795, -122.995 ); + ent.v["angles"] = ( 355.806, 198.58, 2.40333 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 372.677, -811.2, -124.239 ); + ent.v["angles"] = ( 351.361, 152.691, 1.22483 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 271.098, -547.557, -112.09 ); + ent.v["angles"] = ( 359, 184, 0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 652.183, -14.9878, -67.2135 ); + ent.v["angles"] = ( 359.018, 195, -0.190854 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1686.03, 1079.32, -60 ); + ent.v["angles"] = ( 353.704, 158.272, -4.94521 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1485.75, 829.45, -65.4603 ); + ent.v["angles"] = ( 346.838, 187.509, -7.50258 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1851.56, 1162.9, 8.29118 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1324.87, 581.65, -73.357 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1068.34, 344.956, -97.7356 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 556.429, 71.8617, -81.5154 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 409.78, -467.84, -94.7611 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1449.72, 2170.98, -39.9823 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 342.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1488.93, 2291.52, -36.3985 ); + ent.v["angles"] = ( 27, 360, 3 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 458.226, 2671.17, -48 ); + ent.v["angles"] = ( 349.174, 8.08485, 82.4906 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 372.225, 2598.58, -49.5248 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 554.083, 2626.09, -48 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 679.353, 2603.86, -50.5174 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 561.342, 2567.66, -52.8807 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -147.746, 2346.75, -59.5581 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -203.38, 2393.13, -52.0751 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 341.955, 2621.21, -52 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 341.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_debris_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 459.483, 2739.2, 200.836 ); + ent.v["angles"] = ( 30.9528, 293.499, 1.80116 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -512.269, 2436.49, -54.8269 ); + ent.v["angles"] = ( 290.668, 274.677, 89.1924 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -118.479, 2557.07, -50.0739 ); + ent.v["angles"] = ( 290.668, 274.677, 89.1924 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -643.664, 2218.07, -4.0618 ); + ent.v["angles"] = ( 0.464774, 57.3871, -2.10586 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_sci_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 627.826, 2686.87, 273.555 ); + ent.v["angles"] = ( 9.97538, 297.938, -0.704698 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_toy_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -689.13, 19.5314, -125.37 ); + ent.v["angles"] = ( 359, 310, 0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_toy_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -542.577, -3.85301, -126.906 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_toy_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -775.348, -168.671, -126.875 ); + ent.v["angles"] = ( 12, 360, -13 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_toy_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -697.089, -391.881, -127.556 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_toy_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -609.744, -372.3, -126.518 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 348.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_toy_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -803.265, -199.911, -89.9242 ); + ent.v["angles"] = ( 12, 360, -13 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -793.77, -200.077, -61.6809 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -803.257, -199.41, -85.0372 ); + ent.v["angles"] = ( 8.25951, 338.06, -32.0767 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -802.103, -212.83, -43.3678 ); + ent.v["angles"] = ( 8.25951, 338.06, -32.0767 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1135.05, 621.062, 127.974 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 79.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -790.84, 593.596, 129.578 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1469.48, 680.631, 132.341 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 79.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -692.435, 711.327, 13.3726 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 103.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1167.18, 731.292, 38.3317 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 65.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -684.129, 1148.08, -2.11566 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 72.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -578.878, 1630.4, -2.58031 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 77.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -865.916, 840.612, -60 ); + ent.v["angles"] = ( 349, 67, 0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1361.09, 880.965, -60.2991 ); + ent.v["angles"] = ( 344.062, 41.0805, 4.81067 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -484.115, 698.256, 124.771 ); + ent.v["angles"] = ( 10, 84, 0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -543.921, -2.38376, -130.689 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 348.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -774.796, -168.235, -122.694 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1255.22, 540.549, -36.5148 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 147.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1273.35, 290.621, -81.4672 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1106.1, 74.146, -80.7151 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog_ground" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1041.15, 143.258, -124 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 201.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog_ground" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1244.81, 542.923, -126 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 255.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog_background" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1354.14, 113.741, -12.3206 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog_background" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1490.26, 339.428, -37.9775 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_torch" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 391.908, 1092.57, 276.293 ); + ent.v["angles"] = ( 74.9508, 150.486, -1.34998 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_torch" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 905.572, 1212.03, 243.963 ); + ent.v["angles"] = ( 340, 67, 0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 848.799, 312.775, 6.8703 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 303.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 937.984, 350.049, 0.800499 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_sci_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 323.75, 2679.06, 228.147 ); + ent.v["angles"] = ( 1.75725, 234.021, -9.33929 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_ufo_smoke" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 403.479, 2713.06, 193.781 ); + ent.v["angles"] = ( 359.208, 274.358, 3.02421 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_ufo_smoke" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 523.244, 2681.61, 238.884 ); + ent.v["angles"] = ( 359.208, 274.358, 3.02421 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_sci_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -332.342, 2705.27, 156.457 ); + ent.v["angles"] = ( 311.522, 270.988, -11.2056 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_sci_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -237.287, 2689.93, 175.177 ); + ent.v["angles"] = ( 311.522, 270.988, -11.2056 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_sci_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 463.966, 2685.8, 139.64 ); + ent.v["angles"] = ( 300.579, 271.452, -0.337176 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_sci_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 531.638, 2693.88, 144.83 ); + ent.v["angles"] = ( 300.579, 271.452, -0.337176 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_sci_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 585.933, 2691.81, 144.965 ); + ent.v["angles"] = ( 300.579, 271.452, -0.337176 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -257.462, 2780.8, 118.891 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -399.398, 2822.33, 174.014 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_torch" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 551.515, 1109.32, 326.621 ); + ent.v["angles"] = ( 75.8612, 45.7869, -39.9325 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_ground" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -709.94, -215.475, -118.834 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_ground" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -691.003, 78.2237, -121.875 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_ground" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -703.517, -348.103, -119.875 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 535.913, 2763.83, 207.956 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_sci_fire_burst_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 403.059, 2686.61, 219.662 ); + ent.v["angles"] = ( 11, 276, 0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -851.147, 885.891, -71.1348 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 70.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -314.439, 1470.67, -58.5135 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 55.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -446.494, 1682.59, -58.856 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1390.44, 783.137, -7.40077 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 34.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -644.927, 803.374, -26.7342 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 65.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1210.28, 744.201, -64.2686 ); + ent.v["angles"] = ( 346.002, 65.9706, 0.196647 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1194.17, 813.831, -62.8241 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 70.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -239.529, 1238.38, -32.1725 ); + ent.v["angles"] = ( 355.134, 75.9827, -1.71667 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 623.534, 1651.12, -17.768 ); + ent.v["angles"] = ( 319.61, 77.8521, -7.74391 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 816.593, 1541.12, 122.125 ); + ent.v["angles"] = ( 290.195, 89.1061, -17.2951 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 894.485, 1213.47, 236.577 ); + ent.v["angles"] = ( 284.571, 96.2015, -24.0754 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 425.234, 1162.01, 334.224 ); + ent.v["angles"] = ( 316.979, 94.2527, 18.0529 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 274.178, 1428.36, -44 ); + ent.v["angles"] = ( 329, 51, 0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 753.763, 1211.65, -42.875 ); + ent.v["angles"] = ( 301.844, 82.3785, -11.2166 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 512.833, 1265.8, -42.9028 ); + ent.v["angles"] = ( 301.844, 82.3785, -11.2166 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_water_splash_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 41.9622, -1381.64, -127.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_cannon_splash_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -71.266, -944.427, -127.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog_background" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 514.399, 453.553, 105.629 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_rolling_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 553.339, 382.479, 5.47084 ); + ent.v["angles"] = ( 3.97865, 322.985, -0.418867 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_rolling_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 317.715, 351.608, 10.1889 ); + ent.v["angles"] = ( 353.952, 337.912, 0.628813 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1190.31, 318.399, -37.1449 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1036.54, 157.642, -64.7168 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog_machine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 836.789, 165.325, -117.056 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog_machine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 997.473, 262.393, -119.676 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog_machine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1079.41, 329.947, -122.352 ); + ent.v["angles"] = ( 359, 336, 0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog_machine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1268.16, 285.853, -122.389 ); + ent.v["angles"] = ( 359, 155.087, 0.994677 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog_machine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1188.08, 171.667, -120.523 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 145.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog_machine" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 635.872, 103.248, -108.448 ); + ent.v["angles"] = ( 1.94438, 294.661, 0.765812 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 502.281, -982.172, -47 ); + ent.v["angles"] = ( 359.642, 253, -0.933881 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -591.101, -1353.82, -79.5931 ); + ent.v["angles"] = ( 344.517, 73.4634, 4.20901 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 379.533, -657.754, -122.304 ); + ent.v["angles"] = ( 346.341, 167.961, -1.08881 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog_ground" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1172.16, 284.384, -126.8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 236.0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_water_splash_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -487.374, -1462.38, -127.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1188.46, 1605.07, 91.125 ); + ent.v["angles"] = ( 46.1181, 260.218, -78.7375 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 967.866, 1010.69, 83.125 ); + ent.v["angles"] = ( 52.0158, 291.037, -103.033 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1313.31, 1602.17, 26.125 ); + ent.v["angles"] = ( 42.7436, 255.04, -81.5432 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -198.722, -74.3946, 43 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -336.9, -179.679, 29.125 ); + ent.v["angles"] = ( 53.5724, 274.199, -65.3909 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -170.015, -303.164, 34.125 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -221.969, 62.8027, 41.125 ); + ent.v["angles"] = ( 49.5137, 273.032, -66.2701 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -405.711, 949.874, 26 ); + ent.v["angles"] = ( 36.3383, 276.516, -85.7276 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -269.703, 52.5723, -62 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 265.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -71.36, 4.94275, -56.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 265.0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2.75577, 1407.62, 156.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 256.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1310, 1544.43, -4.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 183.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1011.07, 914.597, 16.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 99.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 519.241, 1130.37, 272.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 241.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -889.183, 1951.46, -0.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 255.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1032.94, 1248.76, -5.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 75.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -115.039, 968.801, 7.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 85.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -716.27, 586.687, -24.4169 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 274.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_ufo_engine_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 421.831, 2621.14, 254.433 ); + ent.v["angles"] = ( 69.9541, 311.008, 24.8581 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_ufo_engine_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 481.154, 2599, 274.361 ); + ent.v["angles"] = ( 69.2382, 313.006, 46.6788 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_ufo_engine_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 541.076, 2627.28, 281.524 ); + ent.v["angles"] = ( 69.9541, 311.008, 32.8582 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_ufo_engine_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 565.47, 2687.3, 271.318 ); + ent.v["angles"] = ( 69.9541, 311.008, 30.8581 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_ufo_engine_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 397.134, 2678.27, 233.188 ); + ent.v["angles"] = ( 69.9541, 311.008, 9.85815 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_ufo_engine_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 422.385, 2738.37, 223.155 ); + ent.v["angles"] = ( 69.9541, 311.008, 20.8582 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_ufo_engine_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 482.007, 2765.06, 230.044 ); + ent.v["angles"] = ( 69.9541, 311.008, 35.8583 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_ufo_light_flash_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 481.86, 2682.38, 247.188 ); + ent.v["angles"] = ( 69.9541, 311.008, 30.8581 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_ufo_electric_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 527.056, 2639.22, 167.925 ); + ent.v["angles"] = ( 55.2138, 315.354, 24.3534 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_ufo_forcefield" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 464.213, 2703.16, 327.459 ); + ent.v["angles"] = ( 347.358, 3.33799, -15.2356 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_ufo_electric_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 307.651, 2687.88, 326.305 ); + ent.v["angles"] = ( 333.97, 183.123, -60.549 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_ufo_electric_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 639.875, 2686.78, 366.318 ); + ent.v["angles"] = ( 323.299, 13.4548, 70.2931 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_ufo_electric_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 448.215, 2637.88, 167.676 ); + ent.v["angles"] = ( 58.4077, 225.61, -49.9951 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -98.6132, -163.694, 30.125 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_electric_fence" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1292.82, 252.067, -0.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 148.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_electric_fence" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1154.68, 65.9045, 12.7311 ); + ent.v["angles"] = ( 1, 126, -1 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_electric_fence" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1318.34, 324.426, 38.9517 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 157.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_spark_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1179.97, 85.1171, 12.8549 ); + ent.v["angles"] = ( 55.9308, 131.044, 141.56 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_spark_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1276.06, 226.214, -0.3836 ); + ent.v["angles"] = ( 55.9308, 131.044, 141.56 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_spark_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1181.21, 96.4925, 27.762 ); + ent.v["angles"] = ( 55.9308, 131.044, 141.56 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_electric_fence" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1376.49, 548.482, 27.915 ); + ent.v["angles"] = ( 2.99634, 168.004, 0.157163 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 67.489, -787.72, -92.4579 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 59.7321, -809.906, -93.4565 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 68.5933, -801.293, -93.4587 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 69.5039, -771.286, -93.4575 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_area_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 855.177, 1140.38, 116.989 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_area_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 813.079, 1073.07, 91.4545 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_area_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 860.166, 1541.18, 183.264 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_area_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 820.13, 1564.09, 133.283 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_sconce_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1158.98, 1598.76, 34.0837 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_sconce_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1101.39, 1752.06, 33.1063 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_sconce_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1037.23, 1928.72, 32.2759 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_sconce_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1262.81, 1308.79, 32.264 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_lamp_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -939.374, 1381.65, 39.7875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_sconce_glare2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -890.686, 1279.31, 33.2206 ); + ent.v["angles"] = ( 270.4, 89.9839, -89.9838 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_sconce_glare2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -838.68, 1422.59, 33.2744 ); + ent.v["angles"] = ( 270.4, 89.9839, -89.9838 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_sconce_glare2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -728.855, 1727.28, 33.294 ); + ent.v["angles"] = ( 270.4, 89.9836, -88.9835 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_sconce_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -836.162, 311.69, -88.8722 ); + ent.v["angles"] = ( 281, 90, -90 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_gold_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 59.8496, -792.982, -94.4596 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_gold_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -785.735, -692.449, -22.1113 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_gold_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -788.543, -833.75, -47.7833 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_single_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -7.20171, 1443.34, 220.099 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_single_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -83.5025, 1090.09, 204.824 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_flood_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 245.593, -253.426, -62.4976 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 114.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -600.636, 2272.15, -48.3718 ); + ent.v["angles"] = ( 290.668, 274.677, 89.1924 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2205.64, 1298, 9.21009 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2423.39, 1285.76, 29.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1746.6, 1135.07, -56.6561 ); + ent.v["angles"] = ( 338.744, 93.2091, 6.98505 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1852.81, 1996.8, -3.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_studio_sun1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 10841.5, 66858.9, 96616.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -687.122, 1825.54, 65.0531 ); + ent.v["angles"] = ( 39, 162, 0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -718.082, 1724.43, 63.6571 ); + ent.v["angles"] = ( 39, 162, 0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -830.907, 1414.44, 62.561 ); + ent.v["angles"] = ( 39, 162, 0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -866.961, 1323.08, 62.5687 ); + ent.v["angles"] = ( 39, 162, 0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -905.444, 1209.66, 64.8412 ); + ent.v["angles"] = ( 39, 162, 0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -347.563, 827.099, 86.003 ); + ent.v["angles"] = ( 70.9722, 270.973, -49.8717 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -484.324, 853.761, 83.0062 ); + ent.v["angles"] = ( 69.4359, 281.771, -78.0432 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 824.801, 1738.65, 51.0657 ); + ent.v["angles"] = ( 30, 308, 0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_saloon_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -769.428, 1562.52, 58.875 ); + ent.v["angles"] = ( 43, 158.307, 179.235 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -32.0345, 30.6323, 22.875 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -308.841, -6.63428, 19.875 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_saloon_glare_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -901.167, 1213.3, 59.9585 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_saloon_glare_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -863.82, 1307.43, 59.7489 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_saloon_glare_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -822.942, 1416.42, 59.0963 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_saloon_glare_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -670.448, 1835.08, 60.3287 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_saloon_glare_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -707.478, 1745.17, 60.0388 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_torch" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 824.841, 1562.82, 131.934 ); + ent.v["angles"] = ( 340, 67, 0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_torch" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 882.248, 1524.09, 165.618 ); + ent.v["angles"] = ( 340, 67, 0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_electric_fence" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1471.07, 750.101, 65.4021 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 147.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_electric_fence" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1599.09, 942.99, 80.8204 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 141.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_electric_fence" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1765.22, 1104.75, 65.8096 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 119.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_gold_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -726.994, -761.421, -108.039 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -721.537, -784.228, -108.039 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -719.456, -765.715, -108.038 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -730.445, -745.949, -108.04 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -718.139, -733.919, -108.038 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 410.79, -554.778, 28.0345 ); + ent.v["angles"] = ( 39, 262, 0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 405.376, -567.497, 8.19697 ); + ent.v["angles"] = ( 39, 270, 0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 399.918, -567.545, 10.8062 ); + ent.v["angles"] = ( 39, 270, 0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1264.27, 185.224, -44.9065 ); + ent.v["angles"] = ( 286.86, 192.632, -134.323 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 992.692, -385.271, 133.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1040.69, -402.387, -2.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 189.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1237.23, 138.681, -60.0913 ); + ent.v["angles"] = ( 300.14, 53.9746, 174.671 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 686.532, 206.38, -98.2946 ); + ent.v["angles"] = ( 274.242, 320.125, -87.8804 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fog_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1238.11, 140.235, -64.0766 ); + ent.v["angles"] = ( 312.037, 226.395, 3.99303 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_saloon_glare_sq" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -731.539, 1665.89, 61.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -179.772, -198.805, 51.875 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -107.18, -302.61, 34.875 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -250.476, -308.096, 18.875 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -306.751, 104.863, 24.1561 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_ground" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -684.468, -67.9217, -120.875 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_ground" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -584.193, 30.6769, -123 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_smoke_ground" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -597.6, -433.891, -121.875 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_toy_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -743.634, 75.652, -129.401 ); + ent.v["angles"] = ( 359, 310, 0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_tube_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1000.36, -186.555, 158.871 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 551.425, 1620.86, 12.202 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 64.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_tube_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -46.4167, 966.638, 82.6585 ); + ent.v["angles"] = ( 89, 0, 15 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_tube_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 22.9989, 1261.39, 83.7595 ); + ent.v["angles"] = ( 89, 0, 15 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_tube_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 71.7504, 1424.09, 83.6555 ); + ent.v["angles"] = ( 89, 360, 15 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -370.821, 894.577, 86.0089 ); + ent.v["angles"] = ( 66.3877, 309.805, 162.006 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -193.243, 1258.19, 157.125 ); + ent.v["angles"] = ( 14.2643, 294.85, -4.73233 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -176.393, 1262.88, 142.125 ); + ent.v["angles"] = ( 14.2643, 294.85, -4.73233 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_lantern_cave" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -836.878, 344.257, -82.7785 ); + ent.v["angles"] = ( 345.011, 351.907, -80.062 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_lantern_cave" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -839.215, 356.728, -81.1982 ); + ent.v["angles"] = ( 343.974, 9.89278, -85.4343 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -212.912, 143.392, 1.33438 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -148.791, 141.034, 3.67727 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -55.8977, -98.3554, 36.1655 ); + ent.v["angles"] = ( 56.2214, 261.044, -76.1716 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_lamp_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -936.325, 1130.6, 60.231 ); + ent.v["angles"] = ( 270.1, 270.018, 89.9824 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_lamp_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -652.628, 1909.25, 58.7255 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_red_blink" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 498.48, 2050.04, 107.248 ); + ent.v["angles"] = ( 270, 359.992, 0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_red_blink" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 438.785, 2026.6, 107.319 ); + ent.v["angles"] = ( 270, 359.992, 0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 413.526, 2157.43, 58.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 203.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -220.156, 1917.63, 48.125 ); + ent.v["angles"] = ( 0, 22, 1 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1721.89, 1222.08, -18 ); + ent.v["angles"] = ( 355, 75, 0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1799.67, 1278.58, -52.4704 ); + ent.v["angles"] = ( 355.989, 75.9862, 0.156968 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_village_grass" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1919.89, 1271.08, -46.6587 ); + ent.v["angles"] = ( 347.356, 102.632, 2.38988 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_studio_sq_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1831.91, 2232.28, 87.1508 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_studio_sq_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1831.93, 2007.62, 87.3595 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_studio_sq_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1831.42, 2455.72, 87.7513 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_studio_sq_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1960.32, 2231.48, 87.7575 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_studio_sq_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2088.08, 2230.96, 87.5544 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_studio_tube_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -195.981, 1150.52, 76.2635 ); + ent.v["angles"] = ( 89, 0, 15 ); + ent.v["delay"] = -75; +} diff --git a/MP/Maps/Studio/maps/mp/mp_studio.gsc b/MP/Maps/Studio/maps/mp/mp_studio.gsc new file mode 100644 index 0000000..dd3e1bb --- /dev/null +++ b/MP/Maps/Studio/maps/mp/mp_studio.gsc @@ -0,0 +1,373 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_studio_fx; +#include maps\mp\_load; +#include maps\mp\_compass; +#include maps\mp\mp_studio_amb; +#include maps\mp\gametypes\_weaponobjects; +#include maps\mp\_tacticalinsertion; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_studio_fx::main(); + maps\mp\_load::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_studio" ); + maps\mp\mp_studio_amb::main(); + setdvar( "compassmaxrange", "2100" ); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + level.destructible_callbacks["remove_streamers"] = ::death_streamer_think; + alleytrigger = getent( "alleyTrigger", "targetname" ); + windowtrigger = getent( "triggerwindowTarget", "targetname" ); + target7 = getent( "trailerTarget_Window", "targetname" ); + target8 = getent( "alleyTarget_Cover", "targetname" ); + target9 = getent( "alleyTarget_Path", "targetname" ); + targetlight1_off = getent( "steelBuildingTargetLight1_off", "targetname" ); + targetlight1_on = getent( "steelBuildingTargetLight1_on", "targetname" ); + targetlight2_off = getent( "steelBuildingTargetLight2_off", "targetname" ); + targetlight2_on = getent( "steelBuildingTargetLight2_on", "targetname" ); + level.const_fx_exploder_red_light_1 = 1001; + level.const_fx_exploder_red_light_2 = 1002; + speaker1 = getent( "loudspeaker1", "targetname" ); + speaker2 = getent( "loudspeaker2", "targetname" ); + targetlight1_on hide(); + targetlight2_on hide(); + target8 setcandamage( 1 ); + target9 setcandamage( 1 ); + target8 thread damagetarget( 2 ); + target9 thread damagetarget( 2 ); + target7 thread movetarget( 7, ( 57, 23, 0 ), 3 ); + target8 thread movetarget( 1, 240, 10 ); + target9 thread movetarget( 1, 130, 8.6 ); + alleytrigger thread triggercheck( target9 ); + windowtrigger thread triggercheck( target7 ); +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "1900", reset_dvars ); +} + +triggercheck( target ) +{ + self endon( "game_ended" ); + + while ( true ) + { + self waittill( "trigger", player ); + + distance = distance( target.origin, self.origin ); + + if ( distance <= 90 ) + { + target notify( "targetStopMoving" ); + + while ( isdefined( player ) && player istouching( self ) && distance <= 90 ) + { + if ( distancesquared( target.origin, target.railpoints[0] ) < distancesquared( player.origin, target.railpoints[0] ) ) + target.preferrednextpos = 0; + else + target.preferrednextpos = 1; + + wait 0.25; + } + } + } +} + +damagetarget( dir ) +{ + self endon( "game_ended" ); + + while ( true ) + { + self waittill( "damage", damage, attacker, direction ); + + switch ( dir ) + { + case 1: + self rotateroll( self.angles[1] + 90, 0.1 ); + wait 0.2; + self rotateroll( self.angles[1] - 90, 0.1 ); + wait 0.2; + self playsound( "amb_target_flip" ); + break; + case 2: + rotation = 1; + + if ( isdefined( attacker ) && isplayer( attacker ) ) + { + yaw = get2dyaw( attacker.origin, self.origin ); + + if ( attacker.angles[1] > yaw ) + rotation = -1; + } + + self rotateyaw( self.angles[2] + 180 * rotation, 0.3 ); + self playsound( "amb_target_twirl" ); + + self waittill( "rotatedone" ); + + break; + case 3: + self rotatepitch( self.angles[1] + 90, 0.1 ); + wait 0.2; + self rotatepitch( self.angles[1] - 90, 0.1 ); + wait 0.2; + self playsound( "amb_target_flip" ); + break; + case 4: + self rotateroll( self.angles[1] - 90, 0.1 ); + wait 0.2; + self rotateroll( self.angles[1] + 90, 0.1 ); + wait 0.2; + self playsound( "amb_target_flip" ); + break; + case 5: + self rotatepitch( self.angles[1] - 90, 0.1 ); + wait 0.2; + self rotatepitch( self.angles[1] + 90, 0.1 ); + wait 0.2; + self playsound( "amb_target_flip" ); + break; + } + } +} + +damagetargetlights( light_on, light_off, speaker, alias, exploderhandle ) +{ + self endon( "game_ended" ); + + while ( true ) + { + self waittill( "damage" ); + + speaker playsound( alias ); + exploder( exploderhandle ); + light_off hide(); + light_on show(); + wait 0.5; + exploder_stop( exploderhandle ); + light_off show(); + light_on hide(); + } +} + +movetarget( dir, dis, speed ) +{ + self endon( "game_ended" ); + keepmoving = 1; + self thread movement_process(); + startpos = self.origin; + farpos = self.origin; + sound = spawn( "script_origin", self.origin ); + sound linkto( self ); + sound playloopsound( "amb_target_chain" ); + + switch ( dir ) + { + case 1: + farpos = self.origin + ( 0, dis, 0 ); + break; + case 2: + farpos = self.origin - ( 0, dis, 0 ); + break; + case 3: + farpos = self.origin + ( dis, 0, 0 ); + break; + case 4: + farpos = self.origin - ( dis, 0, 0 ); + break; + case 5: + farpos = self.origin + ( 0, 0, dis ); + break; + case 6: + farpos = self.origin - ( 0, 0, dis ); + break; + case 7: + farpos = self.origin - dis; + break; + } + + self.railpoints = []; + self.railpoints[0] = startpos; + self.railpoints[1] = farpos; + self.preferrednextpos = 1; + self.playertrigger = 0; + + while ( true ) + { + nextpos = self.railpoints[self.preferrednextpos]; + + if ( self.preferrednextpos == 0 ) + self.preferrednextpos = 1; + else + self.preferrednextpos = 0; + + self moveto( nextpos, speed ); + self waittill_either( "movedone", "targetStopMoving" ); + self playsound( "amb_target_stop" ); + } +} + +rotatetarget( dir, deg, speed, pausetime ) +{ + self endon( "game_ended" ); + + while ( true ) + { + switch ( dir ) + { + case 1: + self rotateyaw( self.angles[2] + deg, speed ); + self playsound( "amb_target_rotate" ); + wait( pausetime ); + self rotateyaw( self.angles[2] - deg, speed ); + self playsound( "amb_target_rotate" ); + wait( pausetime ); + break; + case 2: + self rotateyaw( self.angles[2] - deg, speed ); + self playsound( "amb_target_rotate" ); + wait( pausetime ); + self rotateyaw( self.angles[2] + deg, speed ); + self playsound( "amb_target_rotate" ); + wait( pausetime ); + break; + case 3: + self rotateroll( self.angles[0] + deg, speed ); + self playsound( "amb_target_rotate" ); + wait( pausetime ); + self rotateroll( self.angles[0] - deg, speed ); + self playsound( "amb_target_rotate" ); + wait( pausetime ); + break; + case 4: + self rotateroll( self.angles[0] - deg, speed ); + self playsound( "amb_target_rotate" ); + wait( pausetime ); + self rotateroll( self.angles[0] + deg, speed ); + self playsound( "amb_target_rotate" ); + wait( pausetime ); + break; + case 5: + self rotateroll( self.angles[1] + deg, speed ); + self playsound( "amb_target_rotate" ); + wait( pausetime ); + self rotateroll( self.angles[1] - deg, speed ); + self playsound( "amb_target_rotate" ); + wait( pausetime ); + break; + case 6: + self rotatepitch( self.angles[1] - deg, speed ); + wait( pausetime ); + self rotatepitch( self.angles[1] + deg, speed ); + wait( pausetime ); + break; + case 7: + self rotateto( ( self.angles[0] + 90, self.angles[1] - 90, self.angles[2] + 45 ), speed ); + wait( pausetime ); + self rotateto( ( self.angles[0] - 90, self.angles[1] + 90, self.angles[2] - 45 ), speed ); + wait( pausetime ); + } + } +} + +movement_process() +{ + for (;;) + { + entities = getdamageableentarray( self.origin, 50 ); + + foreach ( entity in entities ) + { + if ( isdefined( entity.targetname ) && ( entity.targetname == "alleyTarget_Cover" || entity.targetname == "alleyTarget_Path" ) ) + continue; + + if ( isplayer( entity ) ) + continue; + + if ( !entity istouching( self ) ) + continue; + + if ( isdefined( entity.classname ) && entity.classname == "grenade" ) + { + if ( !isdefined( entity.name ) ) + continue; + + if ( !isdefined( entity.owner ) ) + continue; + + if ( entity.name == "satchel_charge_mp" ) + { + if ( entity.origin[2] > self.origin[2] + 5 ) + continue; + } + + watcher = entity.owner getwatcherforweapon( entity.name ); + + if ( !isdefined( watcher ) ) + continue; + + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined ); + } + + if ( isdefined( entity.targetname ) ) + { + if ( entity.targetname == "riotshield_mp" ) + { + entity dodamage( 1, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); + continue; + } + } + + if ( isdefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" ) + entity thread maps\mp\_tacticalinsertion::fizzle(); + } + + wait 0.25; + } +} + +getwatcherforweapon( weapname ) +{ + if ( !isdefined( self ) ) + return undefined; + + if ( !isplayer( self ) ) + return undefined; + + for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) + { + if ( self.weaponobjectwatcherarray[i].weapon != weapname ) + continue; + + return self.weaponobjectwatcherarray[i]; + } + + return undefined; +} + +death_streamer_think( notifytype, attacker ) +{ + streamers = getentarray( "airconditioner_streamer", "targetname" ); + + for ( i = 0; i < streamers.size; i++ ) + { + streamer = streamers[i]; + + if ( distancesquared( streamer.origin, self.origin ) < 2500 ) + streamer delete(); + } +} diff --git a/MP/Maps/Studio/maps/mp/mp_studio_amb.gsc b/MP/Maps/Studio/maps/mp/mp_studio_amb.gsc new file mode 100644 index 0000000..35203a3 --- /dev/null +++ b/MP/Maps/Studio/maps/mp/mp_studio_amb.gsc @@ -0,0 +1,39 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + destructibles = getentarray( "destructible", "targetname" ); + + foreach ( dest in destructibles ) + { + if ( dest.destructibledef == "veh_t6_dlc_electric_cart_destructible" ) + { + dest thread cart_fire_think(); + dest thread cart_death_think(); + } + } +} + +cart_fire_think() +{ + self endon( "car_dead" ); + + for (;;) + { + self waittill( "broken", event ); + + if ( event == "destructible_car_fire" ) + { + self playloopsound( "amb_fire_med" ); + return; + } + } +} + +cart_death_think() +{ + self waittill( "car_dead" ); + + self playsound( "exp_barrel" ); +} diff --git a/MP/Maps/Studio/maps/mp/mp_studio_fx.gsc b/MP/Maps/Studio/maps/mp/mp_studio_fx.gsc new file mode 100644 index 0000000..286c163 --- /dev/null +++ b/MP/Maps/Studio/maps/mp/mp_studio_fx.gsc @@ -0,0 +1,113 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_studio_fx; + +main() +{ + precache_fxanim_props(); + precache_fxanim_props_dlc(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_studio_fx::main(); +} + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_express_train_blow_dust"] = loadfx( "maps/mp_maps/fx_mp_express_train_blow_dust" ); + level._effect["fx_mp_village_grass"] = loadfx( "maps/mp_maps/fx_mp_village_grass" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); + level._effect["fx_mp_debris_papers"] = loadfx( "maps/mp_maps/fx_mp_debris_papers" ); + level._effect["fx_mp_studio_dust_ledge_runner"] = loadfx( "maps/mp_maps/fx_mp_studio_dust_ledge_runner" ); + level._effect["fx_sand_moving_in_air_pcloud"] = loadfx( "dirt/fx_sand_moving_in_air_pcloud" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_studio_fog"] = loadfx( "maps/mp_maps/fx_mp_studio_fog" ); + level._effect["fx_mp_studio_fog_ground"] = loadfx( "maps/mp_maps/fx_mp_studio_fog_ground" ); + level._effect["fx_mp_studio_fog_background"] = loadfx( "maps/mp_maps/fx_mp_studio_fog_background" ); + level._effect["fx_mp_studio_rolling_fog"] = loadfx( "maps/mp_maps/fx_mp_studio_rolling_fog" ); + level._effect["fx_mp_studio_fog_machine"] = loadfx( "maps/mp_maps/fx_mp_studio_fog_machine" ); + level._effect["fx_mp_studio_fog_sm"] = loadfx( "maps/mp_maps/fx_mp_studio_fog_sm" ); + level._effect["fx_mp_slums_dark_smoke_sm"] = loadfx( "maps/mp_maps/fx_mp_slums_dark_smoke_sm" ); + level._effect["fx_smk_smolder_gray_slow_shrt"] = loadfx( "smoke/fx_smk_smolder_gray_slow_shrt" ); + level._effect["fx_smk_smolder_gray_slow_dark"] = loadfx( "smoke/fx_smk_smolder_gray_slow_dark" ); + level._effect["fx_mp_studio_ufo_fire"] = loadfx( "maps/mp_maps/fx_mp_studio_ufo_fire" ); + level._effect["fx_mp_studio_ufo_smoke"] = loadfx( "maps/mp_maps/fx_mp_studio_ufo_smoke" ); + level._effect["fx_mp_studio_fire_md"] = loadfx( "maps/mp_maps/fx_mp_studio_fire_md" ); + level._effect["fx_mp_studio_smoke_vista"] = loadfx( "maps/mp_maps/fx_mp_studio_smoke_vista" ); + level._effect["fx_mp_studio_smoke_ground"] = loadfx( "maps/mp_maps/fx_mp_studio_smoke_ground" ); + level._effect["fx_mp_studio_smoke_area"] = loadfx( "maps/mp_maps/fx_mp_studio_smoke_area" ); + level._effect["fx_mp_studio_smoke_area_sm"] = loadfx( "maps/mp_maps/fx_mp_studio_smoke_area_sm" ); + level._effect["fx_mp_studio_toy_fire"] = loadfx( "maps/mp_maps/fx_mp_studio_toy_fire" ); + level._effect["fx_mp_studio_torch"] = loadfx( "maps/mp_maps/fx_mp_studio_torch" ); + level._effect["fx_mp_studio_sci_fire_burst_runner"] = loadfx( "maps/mp_maps/fx_mp_studio_sci_fire_burst_runner" ); + level._effect["fx_mp_studio_muzzle_tank_sm"] = loadfx( "maps/mp_maps/fx_mp_studio_muzzle_tank_sm" ); + level._effect["fx_mp_studio_sci_fire"] = loadfx( "maps/mp_maps/fx_mp_studio_sci_fire" ); + level._effect["fx_mp_studio_ufo_electric_runner"] = loadfx( "maps/mp_maps/fx_mp_studio_ufo_electric_runner" ); + level._effect["fx_mp_studio_electric_fence"] = loadfx( "maps/mp_maps/fx_mp_studio_electric_fence" ); + level._effect["fx_mp_studio_spark_sm_runner"] = loadfx( "maps/mp_maps/fx_mp_studio_spark_sm_runner" ); + level._effect["fx_mp_studio_water_dock_splash"] = loadfx( "maps/mp_maps/fx_mp_studio_water_dock_splash" ); + level._effect["fx_mp_studio_water_splash_runner"] = loadfx( "maps/mp_maps/fx_mp_studio_water_splash_runner" ); + level._effect["fx_mp_studio_cannon_splash_runner"] = loadfx( "maps/mp_maps/fx_mp_studio_cannon_splash_runner" ); + level._effect["fx_mp_studio_robot_laser"] = loadfx( "maps/mp_maps/fx_mp_studio_robot_laser" ); + level._effect["fx_light_god_ray_mp_studio"] = loadfx( "env/light/fx_light_god_ray_mp_studio" ); + level._effect["fx_mp_studio_ufo_light_flash"] = loadfx( "maps/mp_maps/fx_mp_studio_ufo_light_flash" ); + level._effect["fx_mp_studio_ufo_light_flash_lg"] = loadfx( "maps/mp_maps/fx_mp_studio_ufo_light_flash_lg" ); + level._effect["fx_mp_studio_fence_god_ray"] = loadfx( "maps/mp_maps/fx_mp_studio_fence_god_ray" ); + level._effect["fx_mp_studio_sconce_glare"] = loadfx( "maps/mp_maps/fx_mp_studio_sconce_glare" ); + level._effect["fx_mp_studio_sconce_glare2"] = loadfx( "maps/mp_maps/fx_mp_studio_sconce_glare2" ); + level._effect["fx_mp_studio_lamp_glare"] = loadfx( "maps/mp_maps/fx_mp_studio_lamp_glare" ); + level._effect["fx_mp_studio_flood_light"] = loadfx( "maps/mp_maps/fx_mp_studio_flood_light" ); + level._effect["fx_mp_studio_tube_glare"] = loadfx( "maps/mp_maps/fx_mp_studio_tube_glare" ); + level._effect["fx_mp_studio_lantern_cave"] = loadfx( "maps/mp_maps/fx_mp_studio_lantern_cave" ); + level._effect["fx_mp_studio_red_blink"] = loadfx( "maps/mp_maps/fx_mp_studio_red_blink" ); + level._effect["fx_studio_sq_glare"] = loadfx( "light/fx_studio_sq_glare" ); + level._effect["fx_mp_village_single_glare"] = loadfx( "maps/mp_maps/fx_mp_village_single_glare" ); + level._effect["fx_mp_studio_gold_sparkle_runner"] = loadfx( "maps/mp_maps/fx_mp_studio_gold_sparkle_runner" ); + level._effect["fx_mp_studio_gold_glow"] = loadfx( "maps/mp_maps/fx_mp_studio_gold_glow" ); + level._effect["fx_mp_studio_ufo_engine_runner"] = loadfx( "maps/mp_maps/fx_mp_studio_ufo_engine_runner" ); + level._effect["fx_mp_studio_ufo_forcefield"] = loadfx( "maps/mp_maps/fx_mp_studio_ufo_forcefield" ); + level._effect["fx_mp_studio_saloon_glare"] = loadfx( "maps/mp_maps/fx_mp_studio_saloon_glare" ); + level._effect["fx_mp_studio_saloon_glare_sq"] = loadfx( "maps/mp_maps/fx_mp_studio_saloon_glare_sq" ); + level._effect["fx_lf_mp_studio_sun1"] = loadfx( "lens_flares/fx_lf_mp_studio_sun1" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["roofvent"] = %fxanim_gp_roofvent_anim; + level.scr_anim["fxanim_props"]["roofvent_slow"] = %fxanim_gp_roofvent_slow_anim; + level.scr_anim["fxanim_props"]["dino_eggs"] = %fxanim_mp_stu_dino_eggs_anim; + level.scr_anim["fxanim_props"]["noose"] = %fxanim_mp_stu_noose_anim; + level.scr_anim["fxanim_props"]["t_rex_barn"] = %fxanim_mp_stu_t_rex_barn_anim; + level.scr_anim["fxanim_props"]["t_rex_fence_01"] = %fxanim_mp_stu_t_rex_fence_01_anim; + level.scr_anim["fxanim_props"]["t_rex_fence_02"] = %fxanim_mp_stu_t_rex_fence_02_anim; + level.scr_anim["fxanim_props"]["t_rex_fence_03"] = %fxanim_mp_stu_t_rex_fence_03_anim; + level.scr_anim["fxanim_props"]["robot_spider_01"] = %fxanim_mp_stu_robot_01_anim; + level.scr_anim["fxanim_props"]["robot_spider_02"] = %fxanim_mp_stu_robot_02_anim; + level.scr_anim["fxanim_props"]["robot_spider_03"] = %fxanim_mp_stu_robot_03_anim; + level.scr_anim["fxanim_props"]["shark_fins"] = %fxanim_mp_stu_shark_fins_anim; + level.scr_anim["fxanim_props"]["pirate_boats"] = %fxanim_mp_stu_pirate_boats_anim; + level.scr_anim["fxanim_props"]["brontosaurus_chew_anim"] = %fxanim_mp_stu_brontosaurus_chew_anim; + level.scr_anim["fxanim_props"]["brontosaurus_look_around"] = %fxanim_mp_stu_brontosaurus_look_around_anim; + level.scr_anim["fxanim_props"]["robot_scanning"] = %fxanim_mp_stu_robot_scanning; + level.scr_anim["fxanim_props"]["t_rex_stand_01"] = %fxanim_mp_stu_t_rex_stand_01_anim; + level.scr_anim["fxanim_props"]["t_rex_stand_02"] = %fxanim_mp_stu_t_rex_stand_02_anim; + level.scr_anim["fxanim_props"]["t_rex_stand_03"] = %fxanim_mp_stu_t_rex_stand_03_anim; + level.scr_anim["fxanim_props"]["captain_01"] = %fxanim_mp_stu_pirate_captain_01_anim; + level.scr_anim["fxanim_props"]["captain_02"] = %fxanim_mp_stu_pirate_captain_02_anim; + level.scr_anim["fxanim_props"]["oarsmen_01"] = %fxanim_mp_stu_pirate_oarsmen_01_anim; + level.scr_anim["fxanim_props"]["oarsmen_02"] = %fxanim_mp_stu_pirate_oarsmen_02_anim; + level.scr_anim["fxanim_props"]["captain_jailed"] = %fxanim_mp_stu_pirate_jailed_captain_anim; + level.scr_anim["fxanim_props"]["oarsmen_jailed"] = %fxanim_mp_stu_pirate_jailed_oarsmen_anim; +} + +precache_fxanim_props_dlc() +{ + +} diff --git a/MP/Maps/Takeoff/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Takeoff/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Takeoff/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Takeoff/aitype/enemy_dog_mp.gsc b/MP/Maps/Takeoff/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Takeoff/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Takeoff/character/character_mp_german_shepherd.gsc b/MP/Maps/Takeoff/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Takeoff/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Takeoff/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Takeoff/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Takeoff/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Takeoff/clientscripts/mp/_fxanim_dlc4.csc b/MP/Maps/Takeoff/clientscripts/mp/_fxanim_dlc4.csc new file mode 100644 index 0000000..4e385a4 --- /dev/null +++ b/MP/Maps/Takeoff/clientscripts/mp/_fxanim_dlc4.csc @@ -0,0 +1,239 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; + +fxanim_init_dlc( localclientnum ) +{ + a_fxanims = getentarray( localclientnum, "fxanim_dlc4", "targetname" ); + assert( a_fxanims.size <= level.fxanim_max_anims ); + + for ( i = 0; i < a_fxanims.size; i++ ) + { + if ( isdefined( a_fxanims[i].fxanim_parent ) ) + { + parent = getent( localclientnum, a_fxanims[i].fxanim_parent, "targetname" ); + a_fxanims[a_fxanims.size] = parent; + a_fxanims[i] thread _fxanim_model_link( localclientnum ); + continue; + } + + a_fxanims[i] thread fxanim_think( localclientnum ); + } + + if ( isdefined( level.fx_anim_level_dlc_init ) ) + level thread [[ level.fx_anim_level_dlc_init ]]( localclientnum ); +} + +#using_animtree("fxanim_props_dlc4"); + +fxanim_think( localclientnum, random_wait, random_speed ) +{ + self waittill_dobj( localclientnum ); + self thread _fxanim_hide(); + self _fxanim_wait(); + self useanimtree( #animtree ); + n_anim_count = self _fxanim_get_anim_count(); + self notify( "fxanim_start" ); + + for ( n_current_anim = 0; n_current_anim < n_anim_count; n_current_anim++ ) + { + str_scene = self _fxanim_get_scene_name( n_current_anim ); + + if ( !self _fxanim_modifier( str_scene ) ) + { + self _fxanim_animate( str_scene ); + self _fxanim_play_fx( localclientnum ); + } + + self _fxanim_change_anim( n_current_anim ); + } +} + +_fxanim_hide() +{ + if ( isdefined( self.fxanim_hide ) && self.fxanim_hide ) + { + self hide(); + + self waittill( "fxanim_start" ); + + self show(); + } +} + +_fxanim_modifier( str_scene ) +{ + switch ( str_scene ) + { + case "delete": + self delete(); + break; + case "hide": + self hide(); + break; + default: + return false; + break; + } + + return true; +} + +_fxanim_wait() +{ + if ( isdefined( self.fxanim_waittill_1 ) ) + { + if ( isdefined( self.fxanim_waittill_1 ) ) + _fxanim_change_anim( -1 ); + } + + if ( isdefined( self.fxanim_wait ) ) + wait( self.fxanim_wait ); + else if ( isdefined( self.fxanim_wait_min ) && isdefined( self.fxanim_wait_max ) ) + { + n_wait_time = randomfloatrange( self.fxanim_wait_min, self.fxanim_wait_max ); + wait( n_wait_time ); + } +} + +_fxanim_change_anim( n_fxanim_id ) +{ + str_waittill = undefined; + + if ( n_fxanim_id == -1 && isdefined( self.fxanim_waittill_1 ) ) + str_waittill = self.fxanim_waittill_1; + else if ( n_fxanim_id == 0 && isdefined( self.fxanim_waittill_2 ) ) + str_waittill = self.fxanim_waittill_2; + else if ( n_fxanim_id == 1 && isdefined( self.fxanim_waittill_3 ) ) + str_waittill = self.fxanim_waittill_3; + + if ( !isdefined( str_waittill ) && n_fxanim_id != -1 ) + self _fxanim_wait_for_anim_to_end( n_fxanim_id ); + else + { + a_changer = strtok( str_waittill, "_" ); + + level waittill( str_waittill ); + } +} + +_fxanim_wait_for_anim_to_end( n_fxanim_id ) +{ + str_scene = _fxanim_get_scene_name( n_fxanim_id ); + + if ( issubstr( str_scene, "_loop" ) ) + self waittillmatch( "looping anim", "end" ); + else + self waittillmatch( "single anim", "end" ); +} + +_fxanim_animate( str_scene ) +{ + if ( !isdefined( level.scr_anim["fxanim_props_dlc4"][str_scene] ) ) + { +/# + if ( isdefined( str_scene ) ) + println( "Error: fxanim entity at " + self.origin + " is missing animation: " + str_scene ); + else + println( "Error: fxanim entity at " + self.origin + " is missing animation" ); +#/ + return; + } + + self animscripted( level.scr_anim["fxanim_props_dlc4"][str_scene], 1.0, 0.0, 1.0 ); +} + +_fxanim_play_fx( localclientnum ) +{ + if ( isdefined( self.fxanim_fx_1 ) ) + { + assert( isdefined( self.fxanim_fx_1_tag ), "KVP fxanim_fx_1_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_1 ), self, self.fxanim_fx_1_tag ); + } + + if ( isdefined( self.fxanim_fx_2 ) ) + { + assert( isdefined( self.fxanim_fx_2_tag ), "KVP fxanim_fx_2_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_2 ), self, self.fxanim_fx_2_tag ); + } + + if ( isdefined( self.fxanim_fx_3 ) ) + { + assert( isdefined( self.fxanim_fx_3_tag ), "KVP fxanim_fx_3_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_3 ), self, self.fxanim_fx_3_tag ); + } + + if ( isdefined( self.fxanim_fx_4 ) ) + { + assert( isdefined( self.fxanim_fx_4_tag ), "KVP fxanim_fx_4_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_4 ), self, self.fxanim_fx_4_tag ); + } + + if ( isdefined( self.fxanim_fx_5 ) ) + { + assert( isdefined( self.fxanim_fx_5_tag ), "KVP fxanim_fx_5_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_5 ), self, self.fxanim_fx_5_tag ); + } +} + +_fxanim_get_anim_count() +{ + assert( isdefined( self.fxanim_scene_1 ), "fxanim at position " + self.origin + " needs at least one scene defined. Use the KVP fxanim_scene_1" ); + n_fx_count = 0; + + if ( !isdefined( self.fxanim_scene_2 ) ) + n_fx_count = 1; + else if ( !isdefined( self.fxanim_scene_3 ) ) + n_fx_count = 2; + else + n_fx_count = 3; + + return n_fx_count; +} + +_fxanim_get_scene_name( n_anim_id ) +{ + str_scene_name = undefined; + + switch ( n_anim_id ) + { + case 0: + str_scene_name = self.fxanim_scene_1; + break; + case 1: + str_scene_name = self.fxanim_scene_2; + break; + case 2: + str_scene_name = self.fxanim_scene_3; + break; + } + + return str_scene_name; +} + +_fxanim_model_link( localclientnum ) +{ + self waittill_dobj( localclientnum ); + assert( isdefined( self.fxanim_tag ), "Model at origin " + self.origin + " needs an fxanim_tag defined, to show which tag the model will link to" ); + m_parent = getent( localclientnum, self.fxanim_parent, "targetname" ); + assert( isdefined( m_parent ), "Model at origin " + self.origin + " does not have a proper parent. Make sure the fxanim_parent matches the targetname of the fxanim" ); + m_parent waittill_dobj( localclientnum ); + self.origin = m_parent gettagorigin( self.fxanim_tag ); + self.angles = m_parent gettagangles( self.fxanim_tag ); + self linkto( m_parent, self.fxanim_tag ); + + if ( isdefined( self.fxanim_hide ) ) + { + self hide(); + + m_parent waittill( "fxanim_start" ); + + self show(); + } +} + +getfx( fx ) +{ + assert( isdefined( level._effect[fx] ), "Fx " + fx + " is not defined in level._effect." ); + return level._effect[fx]; +} diff --git a/MP/Maps/Takeoff/clientscripts/mp/createfx/mp_takeoff_fx.csc b/MP/Maps/Takeoff/clientscripts/mp/createfx/mp_takeoff_fx.csc new file mode 100644 index 0000000..b81d841 --- /dev/null +++ b/MP/Maps/Takeoff/clientscripts/mp/createfx/mp_takeoff_fx.csc @@ -0,0 +1,3765 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 983.286, 2910.81, 143.273 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1432.95, 2199.07, 143.367 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 516.53, 1937.87, 9.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 638.762, 1936.02, 9.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 715.407, 1868.34, 9.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 437.546, 1867.38, 9.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 716.687, 1721.05, 9.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 643.651, 1648.22, 9.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 508.004, 1648.71, 9.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 434.98, 1725.83, 9.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -648.755, 92.4447, 131.847 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -520.29, 88.8781, 131.849 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -776.327, 88.686, 131.848 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -904.882, 90.2834, 131.952 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -519.447, -34.2767, 131.851 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -648.274, -35.097, 131.85 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -776.23, -33.2154, 131.838 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -904.334, -35.1092, 131.949 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1113.23, 1485.44, 150.001 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -268.701, 3137.87, 149.824 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 226.0 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -658.216, 3233.51, 149.737 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 316.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_tv_glow_blue_flckr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -666.528, -166.834, 127.102 ); + ent.v["angles"] = ( 11, 90, 0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_tv_glow_blue_flckr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -947.046, -166.757, 127.406 ); + ent.v["angles"] = ( 11, 90, 0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_tv_glow_blue_flckr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -974.523, 74.081, 126.104 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 12.0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_tak_shuttle_thruster_smk_grnd" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -4203.15, 2484.17, -697 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1274.53, 1550.32, 341.859 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1118.68, 1549.85, 343.033 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -964.467, 1549.77, 342.676 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -807.474, 1550.47, 342.551 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -652.937, 1551.13, 343.008 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -514.133, 1689.14, 342.813 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -370.846, 1832.96, 343.015 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -192.802, 2012.65, 150 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -90.701, 2109.31, 342.559 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 49.4031, 2253.96, 341.674 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 50.0295, 2493.5, 342.768 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 53.7982, 2734.09, 342.956 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -76.6451, 2863.17, 342.752 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -202.801, 2990.97, 342.686 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -330.71, 3117.95, 342.98 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -458.642, 3245.43, 342.437 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1471.33, 1941.59, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1280.62, 1940.2, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1087.5, 1941.78, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -882.108, 1944.29, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -748.217, 2080.12, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -611.627, 2263.44, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -600.638, 2492.16, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -599.449, 2699.52, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -735.423, 2868.6, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -871.764, 3003.13, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1086.72, 3044.26, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1278.05, 3045.15, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1471.16, 3045.03, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -103.254, 2105.74, 150 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -9.05183, 2201.33, 150 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 32.0324, 2336.98, 150 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 29.9413, 2472.52, 150 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 31.069, 2600.87, 150 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -230.584, 1971.09, 341.786 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -272.42, 315.875, 35.2283 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -544.444, 315.875, 37.4136 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_tak_steam_loading_dock" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -937.289, 3990.75, -447.667 ); + ent.v["angles"] = ( 271, 180, -180 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 151.146, 318.68, 36.1864 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1302.14, 958.538, 83.5725 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1073.44, 380.135, 70.409 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1160.71, 174.23, 75.3968 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 803.083, 800.152, 180.576 ); + ent.v["angles"] = ( 18.997, 270.058, 0.344304 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1652.46, 2130.97, 254.498 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1662.24, 2286.18, 217.879 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 119.43, 3945.7, 104.156 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -613.325, 3201.74, 115.722 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 313.0 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 7.7182, 2734.55, 223.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1171.91, 2764.99, 51.8487 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1154.72, 2493.14, 59.5368 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1298.97, 2195.32, 66.6985 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1316.53, 1673.02, 96.6959 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -826.993, 1705.17, 102 ); + ent.v["angles"] = ( 359.895, 35, 0.994674 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -497.358, 2071.53, 108 ); + ent.v["angles"] = ( 359.724, 45, 0.961412 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -485.146, 2728.7, 113 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 313.0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 14.3494, 2605.83, 92.2667 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -771.889, 2777.05, 89.2267 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -814.044, 2181.69, 74.6889 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 220.0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -991.875, -36.6636, 50.4565 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1684.55, 2342.92, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 214.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1131.28, 2863.43, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 235.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1671.72, 2334.25, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 111.0 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1221.77, 2170.12, 140.508 ); + ent.v["angles"] = ( 318.404, 90.0132, -0.402941 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1613.84, 2057.86, 140.525 ); + ent.v["angles"] = ( 316.404, 90.0327, -0.416093 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1245.63, 2170.15, 276.561 ); + ent.v["angles"] = ( 318.404, 90.0129, -0.402866 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1350.77, 2169.99, 276.689 ); + ent.v["angles"] = ( 317.404, 90.0224, -0.409253 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1874.07, 2056.45, 140.253 ); + ent.v["angles"] = ( 316.404, 90.0327, -0.416109 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1601.34, 2464.26, 145.379 ); + ent.v["angles"] = ( 88.6999, 90, 90 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1496.25, 2318.41, 145.393 ); + ent.v["angles"] = ( 89.6998, 90, 180 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1368.44, 2317.01, 145.415 ); + ent.v["angles"] = ( 89.6998, 90, 180 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1016.59, 2670.06, 146.314 ); + ent.v["angles"] = ( 89.6999, 179.933, -90.0694 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1111.94, 2892.41, 146.467 ); + ent.v["angles"] = ( 89.8999, 90, 180 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1242.91, 2320.22, 278.141 ); + ent.v["angles"] = ( 88.6999, 90, 90 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1714.59, 2361.24, 258.465 ); + ent.v["angles"] = ( 316.404, 90.0327, -0.416109 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1744.81, 2123.62, 258.856 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 328.0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -653.524, 1132.6, 87.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 690.566, -261.614, 96.1049 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1121.82, 1795.84, 85.6525 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_sign_glow_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1539.62, 2449.89, 142.208 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_sign_glow_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1544.48, 2450.13, 142.534 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_sign_glow_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1213.83, 2585.17, 141.868 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_sign_glow_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1217.39, 2581.89, 142.425 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 315.0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 175.404, 3927.2, 217.875 ); + ent.v["angles"] = ( 270.807, 29.7371, 60.0036 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 422.709, 3842.63, 212.875 ); + ent.v["angles"] = ( 270.807, 29.7371, 60.0036 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 419.344, 3874.97, 215.875 ); + ent.v["angles"] = ( 270.807, 29.7371, 60.0036 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -797.568, 669.764, -0.500001 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 737.88, 2476.7, 45.9528 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 775.629, 2414.95, 2.65451 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 775.545, 2391.05, -13.078 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 776.413, 2367.01, -29.1524 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 855.92, 2366.99, -29.2167 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 855.913, 2390.98, -13.2231 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 855.876, 2415.02, 2.86906 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 855.866, 2439.04, 18.8905 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 737.922, 2591.77, 45.8145 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 932.833, 2481.86, 45.965 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 542.071, 2592.38, 45.7944 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 541.982, 2477.57, 46.36 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 776.042, 2439, 18.8111 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 504.153, 2367.07, -29.0153 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 504.122, 2415.04, 2.91993 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 504.044, 2439.01, 18.8256 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 423.734, 2367.02, -29.1636 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 424.22, 2415.05, 2.93267 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 424.076, 2438.98, 18.7634 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 989.767, 1889.31, -24.4579 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1016.12, 1630.12, -24.057 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 957.507, 1668.03, -24.2906 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 957.499, 1812.11, -23.6634 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 958.077, 1300.67, -24.1765 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 958.075, 1140.73, -24.198 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1019.53, 1345.85, -23.9984 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1391.78, 2099.01, 27.143 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1472, 2099.07, 27.0083 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1471.54, 2074.99, 10.7802 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1392.1, 2075.03, 10.8867 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1095.06, 2040.36, -12.9766 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1071.02, 2040.25, -29.1561 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1095.07, 1960.54, -13.0282 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1071.04, 1960.63, -29.0773 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1095.08, 1548.06, -12.9934 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1071.05, 1547.95, -29.0742 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1095.08, 1436.51, -12.9819 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1070.96, 1436.56, -29.3406 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 432.881, 1275.59, -22.2206 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 44.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 335.496, 1373, -22.2644 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 44.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 184.017, 1354.71, -22.1986 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 44.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 73.5534, 1465.16, -22.1953 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 44.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 423.921, 1202.83, -21.8863 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 315.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 262.535, 1363.63, -22.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 134.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 109.96, 1152.18, 45.55 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 571.76, 2366.15, -22 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 708.578, 2366.1, -21.9233 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 360.652, 2280.9, -21.0619 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -84.2352, 3038.97, 35.8816 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -81.1992, 3099.76, 36.0374 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -144.735, 3100.04, 35.8417 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 134.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1121.93, 1672.24, 15.8461 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1121.91, 1839.47, 15.8827 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1122.03, 1300.31, 15.5516 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1121.91, 1138.94, 16.077 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1032.28, 819.028, 26.8803 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1032.55, 795.051, 11.0715 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1112.06, 819.069, 26.9837 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1111.83, 795.05, 11.0518 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 857.367, 571.055, 10.944 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 856.751, 595.075, 26.9887 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 857.369, 619.029, 42.8863 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 857.357, 667.036, 74.9126 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 857.858, 691.063, 90.9648 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 857.418, 739.069, 122.995 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 792.122, 571.023, 10.9047 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 791.755, 594.997, 27.2133 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 791.823, 619.06, 43.0249 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 792.043, 667.042, 74.9312 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 792.084, 691.041, 91.0554 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 791.797, 739.05, 122.949 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1172.61, 2452.09, 42.7919 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1107.72, 2452.13, 43.0581 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1108.28, 2428.13, 58.8672 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1108.31, 2404.13, 75.0598 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1107.82, 2380.13, 90.7716 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1172.27, 2428.13, 58.979 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1172.02, 2404.13, 74.8982 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1172.81, 2379.97, 90.6866 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1211.88, 2339.57, 106.643 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1211.88, 2275.89, 106.652 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1235.88, 2275.77, 123.073 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1259.88, 2276.07, 139.058 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1283.88, 2275.93, 154.531 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1235.88, 2339.87, 122.968 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1259.88, 2339.87, 138.789 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1283.88, 2339.95, 154.964 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1079.88, 533.315, 165.875 ); + ent.v["angles"] = ( 90, 180, 0 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1080.04, 579.854, 171.875 ); + ent.v["angles"] = ( 90, 180, 0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1207.29, 956.834, 175.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -51.3421, 1484.16, 18.939 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -34.3044, 1500.89, 3.0771 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -16.927, 1517.24, -13.0426 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -0.176095, 1534.49, -29.0559 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -89.5913, 1624.58, -29.088 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -106.645, 1606.97, -13.0749 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -123.29, 1589.81, 3.00089 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -140.137, 1572.93, 18.9672 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 584.363, 952.959, 18.9122 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 583.988, 976.968, 2.91464 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 583.988, 1000.95, -13.0733 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 584.489, 1024.96, -28.9313 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 488.049, 1024.94, -29.0188 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 488.011, 1000.92, -12.9862 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 487.806, 976.929, 3.03751 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 487.927, 952.935, 19.0334 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -196.219, 1595.26, 48.7045 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 315.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -641.931, 1237.99, 7.7812 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -657.878, 1369.34, 39.9439 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -641.901, 1012.52, 7.86399 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -641.951, 728.998, 11.7347 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -641.942, 604.127, 11.7988 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -641.99, 480.622, 11.6406 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -641.902, 356.435, 11.8995 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -604.472, 318.136, 11.9742 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -467.119, 318.073, 11.84 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -331.73, 318.123, 12.0064 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -195.636, 318.018, 11.6762 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -45.1334, 318.114, 11.9143 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 75.8681, 318.051, 11.735 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 195.059, 318.112, 12.0508 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 328.451, 909.492, 46.6491 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 199.855, 910.106, 45.9135 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -56.322, 910.094, 45.8658 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 71.5744, 910.109, 45.6172 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 81.4755, 1291.78, 45.7823 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 225.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -9.66185, 1383.02, 45.9526 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 225.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 72.0178, 1049.94, 45.7625 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -55.6394, 1049.89, 45.9148 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -105.906, 979.873, 45.8574 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -329.152, 1577.68, 48.1444 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 225.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -410.167, 1658.74, 47.9093 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 225.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -312.973, 1282.57, 35.7262 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -312.954, 1357.76, 36.3683 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -412.784, 1364.14, 35.8633 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -412.787, 1276.23, 36.1016 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -357.89, 1382.93, 36.0084 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 417.883, 887.503, 45.9123 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 928.036, 2366.03, -24.2746 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -604.97, 923.851, 26.8855 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -604.923, 812.002, 27.0028 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -628.923, 812.315, 11.0009 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -628.996, 923.686, 11.153 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 332.003, 355.003, 26.8363 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 444.581, 355.039, 26.9293 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 443.718, 331.027, 10.8707 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 331.915, 330.952, 10.6477 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 129.896, -447.594, 19.0958 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 129.97, -329.357, 18.7411 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 702.003, -256.255, 18.6353 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 702.053, -444.759, 19.261 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -482.258, 1778.29, 43.2626 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -465.101, 1795.08, 59.2269 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -448.917, 1812.84, 75.2041 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -432.141, 1829.99, 91.2494 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -414.617, 1846.41, 107.159 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -397.226, 1862.97, 123.104 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -380.478, 1880.13, 139.3 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -363.445, 1897.03, 155.051 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -426.012, 1722.04, 43.0612 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -409.041, 1739.01, 59.1723 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -392.029, 1755.95, 75.2505 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -374.943, 1772.81, 91.0044 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -358.167, 1789.97, 107.291 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -341.255, 1806.99, 123.295 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -324.174, 1823.81, 139.474 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -307.375, 1840.97, 155.207 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -128.75, 2973.71, 43.231 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -111.605, 2956.91, 59.1906 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -94.5312, 2940.05, 75.2042 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -77.6862, 2922.95, 91.2482 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -60.6402, 2906.07, 107.052 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -43.7912, 2888.97, 123.032 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -26.8833, 2871.97, 139.635 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -10.0032, 2854.91, 155.109 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -185.219, 2917.24, 43.1477 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -167.903, 2900.62, 59.2746 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -151.138, 2883.44, 75.1347 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -133.987, 2866.65, 91.0165 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -117.207, 2849.49, 107.104 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -99.903, 2832.86, 123.088 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -83.0559, 2815.8, 139.57 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -66.0691, 2798.85, 155.211 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 471.726, 1675.9, 9.75 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 222.0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 485.445, 1912.63, 9.75 ); + ent.v["angles"] = ( 354.204, 147.079, -1.55845 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 666.393, 1700.92, 9.75 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 240.0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -65.8765, -288.37, 19.0651 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -65.8591, -450.205, 19.0412 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_pulse" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 862.534, -199.185, 27.2791 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_pulse" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 96.0406, -230.91, 28.2451 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -874.524, 821.716, 7.79738 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -874.599, 901.875, 7.98359 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1121.42, 901.689, 7.92185 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1121.4, 822.056, 8.01758 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -919.938, 949.504, 7.70692 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1072.29, 949.432, 8.07931 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -358.513, 1257.05, 35.9739 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1296.49, 1331.04, 26.8928 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1296.41, 1307.05, 11.0698 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1175.95, 1331.03, 26.8884 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1175.91, 1307.07, 10.9683 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1056.07, 1331.05, 27.0573 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1055.85, 1307.05, 10.9262 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -935.446, 1331.02, 26.8583 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -936.704, 1307.03, 10.8885 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -816.392, 1331.04, 27.0997 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -815.798, 1307.07, 10.9746 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -696.457, 1331.08, 27.0036 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -696.196, 1307.05, 11.0719 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -761.187, 4839.2, 172.242 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -927.999, 5222.38, 173.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -761.58, 5607.91, 172.293 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -376.747, 5774.4, 172.692 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -278.937, 4681.38, 171.573 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -475.324, 4681.4, 173.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 10.3508, 4837.39, 171.425 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 175.219, 5222.42, 172.187 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 8.72153, 5607.88, 172.437 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1453.14, 3289.36, 946 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1193.21, 2632.27, 906.26 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 711.688, 429.426, 1046.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -623.974, -159.865, 476.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1385.32, 2324.46, 968.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -746.909, 1701.39, 932 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -684.101, 984.58, -0.500004 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1200.64, 580.56, -0.499997 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1198.34, 718.857, -0.499991 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 991.139, -111.185, 6 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 709.233, 1908.43, 9.75 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 217.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 646.962, 2755.67, 27.5 ); + ent.v["angles"] = ( 354, 183, 0 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -800.256, 510.016, -0.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1301.72, 250.611, -0.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 399.61, 3609.42, 32.5 ); + ent.v["angles"] = ( 359, 179, 0 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -81.1495, 4320.76, 32.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1016.96, 3075.33, 38.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1760.87, 1774.31, 0 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1737.64, 1252.34, 0 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1743.15, 615.582, 3 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 164.619, -579.537, 0 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1299.71, 968.25, -0.499998 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1300.51, 1144.84, -0.500003 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -683.831, 1117.54, -0.499997 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 398.043, 888.465, 45.7374 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 661.864, -625.489, -11 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 239.886, -704.53, -11 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1677.22, -68.5633, -11 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1234.19, -48.4095, -11 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1694.63, 1192.36, -0.999999 ); + ent.v["angles"] = ( 0, 172, -1 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1066.68, 3282.2, 29.1427 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1988.2, 1513.88, -0.999997 ); + ent.v["angles"] = ( 356.996, 178.012, -0.157153 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1970.02, 799.371, -41.0728 ); + ent.v["angles"] = ( 350.996, 178.029, -0.158891 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 381.014, 4961.92, 44.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1287.68, 3198.4, -28.203 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1219.17, 3198.39, -27.7394 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1414.83, 2974.37, -27.7554 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1483.16, 2974.43, -27.8981 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1548.37, 2974.39, -27.7688 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_glow_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1337.04, 3087.22, 63.9211 ); + ent.v["angles"] = ( 326, 180, 0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_glow_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1464.72, 2022.63, 71.534 ); + ent.v["angles"] = ( 321, 270, 0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 142.296, 643.942, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -86.9443, 673.226, 29 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -446.986, 3.93933, 117.73 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 90.0745, -294.115, 123.422 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 6.40982, -417.262, 128.783 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 273.822, 2405.29, 213.798 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 28.2924, 209.641, -3 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 226.668, 2547.57, 32.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -59.1336, 4222.76, 32.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -79.787, 4091.04, 32.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 752.394, 3596.74, 29.125 ); + ent.v["angles"] = ( 359, 179, 0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 753.327, 3452.5, 29.125 ); + ent.v["angles"] = ( 359, 179, 0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 746.71, -405.051, 123.151 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 847.36, -272.165, 123.151 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_tak_steam_hvac" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1048.48, 1271.84, 117.81 ); + ent.v["angles"] = ( 357, 168, 0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_tak_steam_hvac" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 299.916, 1308.73, 90.8595 ); + ent.v["angles"] = ( 356.608, 132.937, 0.122398 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_tak_steam_hvac" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 172.647, 994.751, 207.315 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 273.36, 3604.84, 32.5 ); + ent.v["angles"] = ( 359, 179, 0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_takeoff_sun1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 86319.8, 184830, 129198 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 424.119, 3943.38, 202.939 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 381.624, 3943.18, 202.948 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 465.718, 3943.23, 202.928 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 465.84, 3776.95, 202.905 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 424.038, 3777.14, 202.902 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 382.137, 3777.18, 202.92 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 319.696, 4027.9, 166.936 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 359.63, 4028.19, 166.948 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 399.952, 4028.02, 166.895 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 439.816, 4028.19, 166.921 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 479.553, 4027.95, 166.946 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 519.759, 4027.95, 166.911 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 230.838, 3907.97, 202.898 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 230.938, 3948.08, 202.897 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 120.813, 3947.71, 202.941 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 121.014, 3908.11, 202.892 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1151.9, 461.667, 158.933 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1084.04, 461.659, 158.929 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1017.85, 461.753, 158.93 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1018.41, 649.811, 158.944 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1083.59, 650.206, 158.951 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1151.75, 650.008, 158.916 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 865.456, 479.486, 151.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 783.057, 479.824, 151.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 865.459, 421.815, 151.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 783.213, 421.592, 151.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1075.83, 848.391, 174.958 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1010.04, 847.859, 174.908 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1009.96, 991.953, 174.891 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1075.77, 991.966, 174.921 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1158.05, 859.994, 150.332 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1261.87, 860.067, 150.34 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1349.73, 860.07, 150.365 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1261.86, 1047.46, 150.399 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1157.79, 1047.5, 150.397 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1051.65, 1048.22, 150.382 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1130.16, 936.207, 166.916 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1129.89, 976.273, 166.922 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1278.03, 975.903, 166.895 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1277.94, 936.127, 166.901 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1349.53, 1047.96, 150.392 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 576.125, 959.955, 286.332 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 575.706, 879.748, 286.379 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 575.846, 798.449, 286.387 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 576.02, 722.32, 286.37 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 576.09, 639.972, 286.328 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 576.179, 562.047, 286.347 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 576.228, 562.634, 422.427 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 575.934, 639.626, 422.382 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 575.884, 721.974, 422.339 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 575.957, 797.894, 422.338 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 575.716, 879.939, 422.361 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 575.772, 959.691, 422.379 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1474.17, 1289.18, 151.014 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1474.54, 1204.81, 150.954 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1650.85, 1204.74, 150.921 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1651.28, 1288.67, 150.949 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 62.3962, 4348.73, 313.622 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 62.2957, 3771.75, 313.857 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 675.772, 863.407, 723.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -778.598, -127.715, 99.005 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -764.966, -126.217, 97.0285 ); + ent.v["angles"] = ( 67, 180, -180 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -794.06, -126.758, 97.2618 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 62.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -779.735, -140.756, 97.2735 ); + ent.v["angles"] = ( 64, 90, 0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -779.573, -113.357, 97.4315 ); + ent.v["angles"] = ( 63, 271, 0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -898.581, -126.843, 98.663 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 62.0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -884.094, -113.441, 98.8328 ); + ent.v["angles"] = ( 63, 271, 0 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -883.119, -127.799, 100.406 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -884.256, -140.84, 98.6748 ); + ent.v["angles"] = ( 64, 90, 0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -869.487, -126.301, 98.4298 ); + ent.v["angles"] = ( 67, 180, -180 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -368.434, 1355.93, 134.387 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -368.529, 1304.26, 134.41 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -909.869, 2933.34, -45.0905 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -888.329, 2957.39, -29.2049 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -866.258, 2980.95, -13.3263 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -843.931, 3004.18, 2.89832 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -821.874, 3027.75, 18.7913 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -865.306, 2878.96, -45.0933 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -840.549, 2899.23, -29.2758 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -815.79, 2919.5, -13.3795 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -791.259, 2940.06, 2.85001 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -766.301, 2960.09, 18.7407 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -822.691, 2264.91, -45.2797 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -791.177, 2259.3, -29.1206 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -759.688, 2253.58, -13.238 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -728.193, 2247.94, 2.77205 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -696.679, 2242.41, 18.6863 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -807.335, 2351.05, -45.1735 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -775.843, 2345.4, -29.31 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -744.335, 2339.81, -13.5038 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -712.883, 2333.88, 2.95604 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -681.271, 2328.9, 18.7888 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1246.2, 1998.99, -45.4696 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1246.45, 1966.98, -30.3683 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1246.36, 1934.98, -13.2638 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1246.43, 1902.98, 2.81664 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1246.24, 1870.98, 18.7651 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1325.64, 1870.99, 18.8021 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1325.8, 1902.99, 2.77237 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1325.95, 1934.99, -13.3164 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1325.86, 1966.98, -29.3535 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1325.98, 1998.99, -45.5077 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 628.333, 334.603, 59.5787 ); + ent.v["angles"] = ( 334.512, 105.255, -8.17945 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 527.916, 336.229, 59.1082 ); + ent.v["angles"] = ( 332.926, 59.1992, 12.1763 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1047.35, 806.342, -15.875 ); + ent.v["angles"] = ( 317, 273, 0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -960.556, 830.882, -37.7672 ); + ent.v["angles"] = ( 308.01, 271.725, -1.08843 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 653.557, 877.909, 271.374 ); + ent.v["angles"] = ( 319, 180, 180 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_glow_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -159.628, 2550.31, 292.629 ); + ent.v["angles"] = ( 58.6954, 359.606, -89.814 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_glow_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -155.687, 2431.48, 294.46 ); + ent.v["angles"] = ( 60.0946, 359.816, -89.7315 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_glow_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1150.88, 1962.62, 212.343 ); + ent.v["angles"] = ( 90, 0, -90.4 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_flour_glow_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1150.59, 3018.88, 212.332 ); + ent.v["angles"] = ( 90, 0, -90.4 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_modern_sconce" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1070.93, 17.3912, 144.377 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_modern_sconce" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1261.45, 166.907, 144.076 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_modern_sconce" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 728.324, 15.9815, 143.643 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_modern_sconce" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 821.524, 313.055, 148.414 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_modern_sconce" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1260.35, 561.024, 124.251 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_modern_sconce" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 953.039, 817.397, 130.096 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_modern_sconce" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 952.959, 1046.36, 130.139 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 603.882, 768.966, 44.1204 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 587.008, 719.567, 43.834 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 586.979, 559.646, 43.737 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 513.034, 496.762, 43.8888 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 513.037, 374.251, 43.9159 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 695.553, 1634.04, -19.8938 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 307.0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 734.405, 1672.63, -21.9928 ); + ent.v["angles"] = ( 360, 322, -180 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 419.353, 1671.36, -20.7047 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 217.0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 456.661, 1632.58, -21.8037 ); + ent.v["angles"] = ( 0, 231, -180 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 732.729, 1913.98, -20.5855 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 38.0 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 696.37, 1950.15, -20.6845 ); + ent.v["angles"] = ( 0, 51, -180 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 457.625, 1951.12, -19.4472 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 128.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 416.54, 1909.79, -20.5462 ); + ent.v["angles"] = ( 360, 142, -180 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3630.8, 2316.3, 118.388 ); + ent.v["angles"] = ( 87, 180, -180 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3637.9, 2416.64, 133.734 ); + ent.v["angles"] = ( 87, 180, -180 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3798.32, 2488.05, 88 ); + ent.v["angles"] = ( 87, 180, -180 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3630.95, 2661.26, 134.723 ); + ent.v["angles"] = ( 87, 180, -180 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3648.16, 2579.75, 132 ); + ent.v["angles"] = ( 87, 180, -180 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_tak_shuttle_frame_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3921.22, 3187.7, 423.648 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_tak_shuttle_frame_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3920.27, 3187.11, 935.695 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_tak_shuttle_frame_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3920.85, 3187.05, 1450.43 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_tak_shuttle_frame_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3925, 3187.79, 1962.55 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam_w" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3728.67, 1859.17, -145.008 ); + ent.v["angles"] = ( 8, 206, 0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam_w" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3635.65, 3113.8, -99.577 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 154.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_spotlight" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1020.28, 3043.88, 198.93 ); + ent.v["angles"] = ( 23.903, 238.53, -2.22219 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_spotlight" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1050.85, 1917.98, 198.766 ); + ent.v["angles"] = ( 19, 104, 0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_wall_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1173.59, 1835.3, 187.012 ); + ent.v["angles"] = ( 45.9894, 269.397, 1.24654 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_wall_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -767.364, 3022.42, 195.834 ); + ent.v["angles"] = ( 55, 39, 0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1640.79, 1673.45, 32.1748 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1480.46, 1673.44, 32.1118 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1430.55, 1639.88, 31.847 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1430.54, 1367.17, 31.8153 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1224.99, 1134.97, 2.86676 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1224.67, 1113.02, 18.732 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1304.58, 1112.93, 18.9678 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1304.58, 1134.99, 3.14237 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 638.59, 817.475, 63.9314 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 638.581, 945.569, 63.9124 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 638.604, 1057.28, -8.0104 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 596.465, 6.55402, 13.8712 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 689.171, -1.88044, 32.4838 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 913.339, -1.87295, 32.3582 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 533.993, 321.006, 12.1779 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 621.583, 321.072, 11.9689 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 672.793, 1089.43, -8.07374 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 912.952, 1089.42, -8.09043 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 597.295, 17.4297, 13.9255 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1169.38, 1089.39, 40.0032 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1697.54, 1521.2, 31.6123 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1697.41, 1360.26, 32.0627 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1697.43, 1128.86, 32.0431 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1697.99, 975.735, 13.6263 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1697.9, 829.795, 13.8588 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1281.47, 592.892, 32.1985 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1281.43, 336.155, 32.1496 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1281.46, 49.4862, 32.1446 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1649.09, 1078.58, 31.9207 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1456.8, 1078.6, 31.976 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1519.11, 798.059, 13.7796 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1664.56, 798.056, 13.7821 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1665.63, 1009.91, 13.8624 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1522.02, 1009.92, 13.8339 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1486.07, 978.77, 13.8024 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1486.07, 831.541, 13.8139 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1671.73, 1193.41, 32.0709 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1457.79, 1193.45, 31.8305 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 638.587, 65.0128, 32.0535 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 638.534, 296.444, 32.1816 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam_w" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4297.09, 2076.79, -86.4624 ); + ent.v["angles"] = ( 339.001, 222.048, -7.18342 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -510.773, 3298.08, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 241.0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -10.1306, 2497, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 279.0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 62.5652, 2626.85, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 46.4937, 2276.87, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 227.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -305.802, 2032.39, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 169.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -837.933, 1493.27, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 68.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -859.011, 1476.01, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 96.0 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1150.83, 964.907, 0.125004 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 159.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1154.2, 932.522, 0.124999 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -627.997, -95.0112, 0.124999 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -166.466, 103.361, 0.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 162.0 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1264.8, 992.268, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 222.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1258.27, 994.823, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 952.542, 619.736, 0.124996 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 310.0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 714.211, 99.0093, 0.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 46.0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 943.322, 109.799, 0.124999 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 161.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -294.714, 1082.19, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 225.0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1698.79, 1841.52, 0.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 189.0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1692.43, 1877.86, 0.124997 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 168.0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 658.848, 2661.56, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 158.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 629.085, 2654, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 167.0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 518.661, 3510.54, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 168.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -207.531, 793.291, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 162.0 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1361.74, 1813.37, 143.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 166.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1153.17, 1423.92, 100.245 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 187.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 864.537, 3032.53, 119.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 208.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -619.301, 5562.1, 115.301 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 182.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 171.604, 755.813, 136.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 624.657, -207.926, 81.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2945.29, 1737.31, -102.881 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2759.13, 1216.56, -58.7997 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2917.57, 1492.47, -326.273 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2565.47, 702.299, -259.373 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 183.0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2171.8, 3831.34, -315.863 ); + ent.v["angles"] = ( 347.163, 194.233, -2.06839 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1954.82, 4907.56, -478.092 ); + ent.v["angles"] = ( 357.456, 205.035, -1.59106 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2346.22, 2960.37, -567.725 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1988.48, 1920.49, -5.04919 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1931.01, 3116.27, -21.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2224.94, -579.193, -468.523 ); + ent.v["angles"] = ( 351.102, 188.102, -0.785699 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -189.799, -634.757, -525.232 ); + ent.v["angles"] = ( 354.032, 179.033, -0.629524 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 527.666, 1774.13, 99.1583 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 222.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 452.17, -227.665, 0.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 724.945, 847.713, 154.942 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 724.947, 912.609, 154.94 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 748.926, 913.241, 139.011 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 748.963, 847.764, 138.903 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 857.691, 715.031, 106.914 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 792.029, 715.047, 106.92 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 791.936, 643.056, 58.9436 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 857.277, 643.026, 58.8678 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 503.931, 2391.05, -13.0811 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 424.05, 2391.06, -12.9671 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -592.125, 1207.71, 114.394 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 172.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_tak_steam_hvac" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 241.412, 1142.85, 269.079 ); + ent.v["angles"] = ( 357.185, 168.987, -1.89627 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -451.879, 2755.46, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -563.421, 2578.01, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 307.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1320.27, 1711.23, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 26.0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -822.372, 1921.7, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_wall_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1311.53, 2672.75, 159.445 ); + ent.v["angles"] = ( 56.9567, 224.576, 2.54828 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_wall_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -923.639, 1895.27, 186.96 ); + ent.v["angles"] = ( 61.0597, 296.595, 0.136797 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -781.676, 3005.14, 98 ); + ent.v["angles"] = ( 6, 228, 0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1259.22, 1887.77, 87 ); + ent.v["angles"] = ( 14.979, 87.8943, -0.80343 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1238.04, 3158.22, 215.126 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1134.03, 3154.06, 215.1 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1038.13, 3125.91, 215.12 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -950.262, 3094.03, 215.118 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -870.234, 3049.7, 215.127 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -801.808, 2982.05, 215.122 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -753.974, 2898.15, 215.113 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -725.644, 2821.96, 215.128 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -706.028, 2733.44, 215.148 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -697.899, 2641.97, 215.109 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -689.368, 2541.93, 215.151 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -686.227, 2437.93, 215.128 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -693.586, 2338.09, 215.145 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -713.92, 2237.89, 215.108 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -765.482, 2145.81, 215.141 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -837.98, 2054.13, 215.11 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -946.049, 1978.34, 215.128 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1077.59, 1917.81, 215.141 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1217.85, 1890.04, 215.105 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1803.92, 2287.73, 280.207 ); + ent.v["angles"] = ( 89.4613, 158.17, -111.832 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 780.432, 3145.51, 46.6706 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 972.405, 3145.5, 46.775 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 659.913, 3689.5, 46.8525 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -132.209, 4762.87, 290.801 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_tak_steam_hvac" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 214.543, 3134.04, 194.557 ); + ent.v["angles"] = ( 357, 168, 0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 963.288, 937.543, 151.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -567.787, 2121.14, 205.091 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -568.3, 2265.36, 205.097 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -360.016, 2265.37, 205.083 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -360.054, 2409.07, 205.113 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -464.079, 2409.51, 205.085 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -568.324, 2409.53, 205.112 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -567.731, 2856.69, 205.126 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -567.911, 2697.52, 205.077 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -463.919, 2697.29, 205.076 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -359.705, 2697.6, 205.087 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -359.952, 2569.49, 205.077 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -464.03, 2569.28, 205.081 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -567.591, 2569.18, 205.091 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1237.63, 3157.03, 215.203 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1217.34, 1890.9, 215.172 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1078.51, 1918.02, 215.146 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -946.246, 1978.07, 215.131 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -838.025, 2054.32, 215.116 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -766.197, 2146.19, 215.111 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -714.141, 2238.07, 215.116 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -693.975, 2338.32, 215.117 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -686.745, 2438.16, 215.17 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -689.828, 2542.63, 215.165 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -697.525, 2641.64, 215.16 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -706.664, 2734.36, 215.146 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -726.149, 2821.76, 215.122 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -754.147, 2897.64, 215.137 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -802.209, 2981.43, 215.157 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -870.177, 3049.94, 215.112 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -950.342, 3093.78, 215.15 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1037.98, 3125.61, 215.136 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1134.85, 3153.46, 215.18 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1438.3, 2317.09, 159.125 ); + ent.v["angles"] = ( 90, 351.822, -98.1783 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1610.96, 2494.98, 151.875 ); + ent.v["angles"] = ( 90, 351.822, -98.1783 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1007.68, 2678.46, 151.875 ); + ent.v["angles"] = ( 90, 351.822, -98.1783 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1112.74, 2889.84, 146.587 ); + ent.v["angles"] = ( 90, 351.822, -98.1783 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1239.49, 2313.33, 280.347 ); + ent.v["angles"] = ( 90, 351.822, -98.1783 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -707.732, 1466.49, 134.076 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -771.867, 1466.58, 134.07 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -835.617, 1466.68, 134.085 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -900.001, 1466.36, 134.095 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -963.95, 1466.25, 134.093 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_modern_sconce" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1233.38, 334.426, 123.691 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_tak_light_sign_glow_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1430.55, 2115.51, 134.592 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -64; +} diff --git a/MP/Maps/Takeoff/clientscripts/mp/mp_takeoff.csc b/MP/Maps/Takeoff/clientscripts/mp/mp_takeoff.csc new file mode 100644 index 0000000..4c853a3 --- /dev/null +++ b/MP/Maps/Takeoff/clientscripts/mp/mp_takeoff.csc @@ -0,0 +1,27 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_takeoff_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_takeoff_amb; + +main() +{ + level.worldmapx = 0; + level.worldmapy = 0; + level.worldlat = 51.5083; + level.worldlong = -0.108876; + clientscripts\mp\_load::main(); + clientscripts\mp\mp_takeoff_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_takeoff_amb::main(); + setsaveddvar( "sm_sunsamplesizenear", 0.3 ); + setsaveddvar( "r_lightGridEnableTweaks", 1 ); + setsaveddvar( "r_lightGridIntensity", 1.25 ); + setsaveddvar( "r_lightGridContrast", 0.0 ); + waitforclient( 0 ); +/# + println( "*** Client : mp_takeoff running..." ); +#/ +} diff --git a/MP/Maps/Takeoff/clientscripts/mp/mp_takeoff_amb.csc b/MP/Maps/Takeoff/clientscripts/mp/mp_takeoff_amb.csc new file mode 100644 index 0000000..f5b2846 --- /dev/null +++ b/MP/Maps/Takeoff/clientscripts/mp/mp_takeoff_amb.csc @@ -0,0 +1,67 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "outdoor", 1 ); + setambientroomtone( "outdoor", "amb_wind_middle", 0.3, 0.3 ); + setambientroomreverb( "outdoor", "takeoff_outdoor", 1, 1 ); + setambientroomcontext( "outdoor", "ringoff_plr", "outdoor" ); + declareambientroom( "control" ); + setambientroomreverb( "control", "takeoff_control", 1, 1 ); + setambientroomcontext( "control", "ringoff_plr", "indoor" ); + declareambientroom( "snack_shack" ); + setambientroomreverb( "snack_shack", "takeoff_snack", 1, 1 ); + setambientroomcontext( "snack_shack", "ringoff_plr", "indoor" ); + declareambientroom( "stairs" ); + setambientroomreverb( "stairs", "takeoff_stairs", 1, 1 ); + setambientroomcontext( "stairs", "ringoff_plr", "indoor" ); + declareambientroom( "odd_room" ); + setambientroomtone( "odd_room", "amb_odd_room_tone", 0.2, 0.4 ); + setambientroomreverb( "odd_room", "takeoff_odd", 1, 1 ); + setambientroomcontext( "odd_room", "ringoff_plr", "indoor" ); + declareambientroom( "odd_upstairs" ); + setambientroomtone( "odd_upstairs", "amb_odd_room_tone", 0.2, 0.4 ); + setambientroomreverb( "odd_upstairs", "takeoff_odd_up", 1, 1 ); + setambientroomcontext( "odd_upstairs", "ringoff_plr", "indoor" ); + declareambientroom( "tall_room" ); + setambientroomtone( "tall_room", "amb_odd_room_tone", 0.3, 0.4 ); + setambientroomreverb( "tall_room", "takeoff_tall", 1, 1 ); + setambientroomcontext( "tall_room", "ringoff_plr", "indoor" ); + declareambientroom( "tunnel_stone" ); + setambientroomreverb( "tunnel_stone", "takeoff_tunnel", 1, 1 ); + setambientroomcontext( "tunnel_stone", "ringoff_plr", "indoor" ); + declareambientroom( "lobby_side" ); + setambientroomtone( "lobby_side", "amb_space_music", 0.3, 0.4 ); + setambientroomreverb( "lobby_side", "takeoff_lobby_side", 1, 1 ); + setambientroomcontext( "lobby_side", "ringoff_plr", "indoor" ); + declareambientroom( "lobby_center" ); + setambientroomtone( "lobby_center", "amb_space_music", 0.3, 0.4 ); + setambientroomreverb( "lobby_center", "takeoff_lobby_center", 1, 1 ); + setambientroomcontext( "lobby_center", "ringoff_plr", "indoor" ); + declareambientroom( "medical" ); + setambientroomreverb( "medical", "takeoff_medical", 1, 1 ); + setambientroomcontext( "medical", "ringoff_plr", "indoor" ); + declareambientroom( "atrium" ); + setambientroomreverb( "atrium", "takeoff_atrium", 1, 1 ); + setambientroomcontext( "atrium", "ringoff_plr", "indoor" ); + thread snd_start_autofx_audio(); +} + +snd_play_loopers() +{ + clientscripts\mp\_audio::playloopat( "amb_flag", ( -68, 3130, 182 ) ); + clientscripts\mp\_audio::playloopat( "amb_small_waterfall", ( 529, 1798, 90 ) ); +} + +snd_start_autofx_audio() +{ + snd_play_auto_fx( "fx_mp_vent_steam_line_sm", "amb_steam", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_tak_light_flour_sqr_lg", "amb_light_lrg", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_tak_light_tv_glow_blue_flckr", "amb_light_lrg", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_vent_heat_distort", "amb_heat_distort", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_tak_light_tv_glow_blue_flckr", "amb_tv", 0, 0, 0, 0 ); +} diff --git a/MP/Maps/Takeoff/clientscripts/mp/mp_takeoff_fx.csc b/MP/Maps/Takeoff/clientscripts/mp/mp_takeoff_fx.csc new file mode 100644 index 0000000..1505d2d --- /dev/null +++ b/MP/Maps/Takeoff/clientscripts/mp/mp_takeoff_fx.csc @@ -0,0 +1,256 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_fxanim_dlc4; +#include clientscripts\mp\createfx\mp_takeoff_fx; +#include clientscripts\mp\_fx; + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_light_exit_sign"] = loadfx( "light/fx_light_exit_sign_glow" ); + level._effect["fx_light_flour_glow_cool"] = loadfx( "light/fx_tak_light_flour_glow_cool" ); + level._effect["fx_tak_light_flour_glow_cool_sm"] = loadfx( "light/fx_tak_light_flour_glow_cool_sm" ); + level._effect["fx_light_upl_flour_glow_v_shape_cool"] = loadfx( "light/fx_light_upl_flour_glow_v_shape_cool" ); + level._effect["fx_light_recessed_blue"] = loadfx( "light/fx_light_recessed_blue" ); + level._effect["fx_light_recessed_cool_sm_soft"] = loadfx( "light/fx_light_recessed_cool_sm_soft" ); + level._effect["fx_mp_tak_glow_blue"] = loadfx( "maps/mp_maps/fx_mp_tak_glow_blue" ); + level._effect["fx_mp_tak_glow_orange"] = loadfx( "maps/mp_maps/fx_mp_tak_glow_orange" ); + level._effect["fx_mp_tak_glow_yellow"] = loadfx( "maps/mp_maps/fx_mp_tak_glow_yellow" ); + level._effect["fx_mp_tak_glow_red"] = loadfx( "maps/mp_maps/fx_mp_tak_glow_red" ); + level._effect["fx_tak_light_flour_glow_ceiling"] = loadfx( "light/fx_tak_light_flour_glow_ceiling" ); + level._effect["fx_tak_light_flour_sqr_lg"] = loadfx( "light/fx_tak_light_flour_sqr_lg" ); + level._effect["fx_tak_light_flour_rnd_lg"] = loadfx( "light/fx_tak_light_flour_rnd_lg" ); + level._effect["fx_tak_light_tv_glow_blue"] = loadfx( "light/fx_tak_light_tv_glow_blue" ); + level._effect["fx_tak_light_tv_glow_blue_flckr"] = loadfx( "light/fx_tak_light_tv_glow_blue_flckr" ); + level._effect["fx_drone_light_yellow"] = loadfx( "light/fx_drone_light_yellow" ); + level._effect["fx_tak_light_sign_glow_blue"] = loadfx( "light/fx_tak_light_sign_glow_blue" ); + level._effect["fx_tak_light_blue_stair"] = loadfx( "light/fx_tak_light_blue_stair" ); + level._effect["fx_tak_light_blue_stair_sm"] = loadfx( "light/fx_tak_light_blue_stair_sm" ); + level._effect["fx_tak_light_blue"] = loadfx( "light/fx_tak_light_blue" ); + level._effect["fx_tak_light_blue_pulse"] = loadfx( "light/fx_tak_light_blue_pulse" ); + level._effect["fx_tak_light_blue_pulse_curve"] = loadfx( "light/fx_tak_light_blue_pulse_curve" ); + level._effect["fx_light_beacon_yellow"] = loadfx( "light/fx_light_beacon_yellow" ); + level._effect["fx_light_beacon_red_blink_fst_sm"] = loadfx( "light/fx_light_beacon_red_blink_fst_sm" ); + level._effect["fx_tak_light_modern_sconce"] = loadfx( "light/fx_tak_light_modern_sconce" ); + level._effect["fx_tak_light_spotlight"] = loadfx( "light/fx_tak_light_spotlight" ); + level._effect["fx_tak_light_wall_ext"] = loadfx( "light/fx_tak_light_wall_ext" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_tak_dust_ground"] = loadfx( "maps/mp_maps/fx_mp_tak_dust_ground" ); + level._effect["fx_tak_water_fountain_pool_sm"] = loadfx( "water/fx_tak_water_fountain_pool_sm" ); + level._effect["fx_paper_interior_short_sm"] = loadfx( "debris/fx_paper_interior_short_sm" ); + level._effect["fx_paper_exterior_short_sm_fst"] = loadfx( "debris/fx_paper_exterior_short_sm_fst" ); + level._effect["fx_insects_swarm_md_light"] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); + level._effect["fx_mp_vent_heat_distort"] = loadfx( "maps/mp_maps/fx_mp_vent_heat_distort" ); + level._effect["fx_mp_tak_steam_loading_dock"] = loadfx( "maps/mp_maps/fx_mp_tak_steam_loading_dock" ); + level._effect["fx_mp_vent_steam_line"] = loadfx( "maps/mp_maps/fx_mp_vent_steam_line" ); + level._effect["fx_mp_vent_steam_line_sm"] = loadfx( "maps/mp_maps/fx_mp_vent_steam_line_sm" ); + level._effect["fx_mp_vent_steam_line_lg"] = loadfx( "maps/mp_maps/fx_mp_vent_steam_line_lg" ); + level._effect["fx_mp_steam_amb_xlg"] = loadfx( "maps/mp_maps/fx_mp_steam_amb_xlg" ); + level._effect["fx_mp_tak_steam_hvac"] = loadfx( "maps/mp_maps/fx_mp_tak_steam_hvac" ); + level._effect["fx_lf_mp_overflow_sun1"] = loadfx( "lens_flares/fx_lf_mp_overflow_sun1" ); + level._effect["fx_lf_mp_takeoff_sun1"] = loadfx( "lens_flares/fx_lf_mp_takeoff_sun1" ); + level._effect["fx_mp_tak_shuttle_thruster_lg"] = loadfx( "maps/mp_maps/fx_mp_tak_shuttle_thruster_lg" ); + level._effect["fx_mp_tak_shuttle_thruster_md"] = loadfx( "maps/mp_maps/fx_mp_tak_shuttle_thruster_md" ); + level._effect["fx_mp_tak_shuttle_thruster_sm"] = loadfx( "maps/mp_maps/fx_mp_tak_shuttle_thruster_sm" ); + level._effect["fx_mp_tak_shuttle_thruster_smk_grnd"] = loadfx( "maps/mp_maps/fx_mp_tak_shuttle_thruster_smk_grnd" ); + level._effect["fx_mp_tak_shuttle_thruster_steam"] = loadfx( "maps/mp_maps/fx_mp_tak_shuttle_thruster_steam" ); + level._effect["fx_mp_tak_shuttle_thruster_steam_w"] = loadfx( "maps/mp_maps/fx_mp_tak_shuttle_thruster_steam_w" ); + level._effect["fx_mp_tak_shuttle_frame_light"] = loadfx( "maps/mp_maps/fx_mp_tak_shuttle_frame_light" ); + level._effect["fx_mp_tak_steam_nozzle"] = loadfx( "maps/mp_maps/fx_mp_tak_steam_nozzle" ); +} + +#using_animtree("fxanim_props_dlc4"); + +precache_fxanim_props_dlc4() +{ + level.scr_anim["fxanim_props_dlc4"]["decont_blasters"] = %fxanim_mp_takeoff_decont_blasters_anim; + level.scr_anim["fxanim_props_dlc4"]["scaffold_wires_01"] = %fxanim_mp_takeoff_scaffold_wires_01_anim; + level.scr_anim["fxanim_props_dlc4"]["crane_hooks"] = %fxanim_mp_takeoff_crane_hooks_anim; + level.scr_anim["fxanim_props_dlc4"]["rattling_sign"] = %fxanim_mp_takeoff_rattling_sign_anim; + level.scr_anim["fxanim_props_dlc4"]["radar01"] = %fxanim_mp_takeoff_satellite_dish_01_anim; + level.scr_anim["fxanim_props_dlc4"]["radar02"] = %fxanim_mp_takeoff_satellite_dish_02_anim; + level.scr_anim["fxanim_props_dlc4"]["radar03"] = %fxanim_mp_takeoff_satellite_dish_03_anim; + level.scr_anim["fxanim_props_dlc4"]["radar04"] = %fxanim_mp_takeoff_satellite_dish_04_anim; + level.scr_anim["fxanim_props_dlc4"]["radar05"] = %fxanim_mp_takeoff_satellite_dish_05_anim; + level.scr_anim["fxanim_props_dlc4"]["banners"] = %fxanim_mp_takeoff_banner_01_anim; + level.scr_anim["fxanim_props_dlc4"]["planets"] = %fxanim_mp_takeoff_planets_anim; + level.scr_anim["fxanim_props_dlc4"]["banners_lrg"] = %fxanim_mp_takeoff_banner_lrg_anim; +} + +fxanim_init( localclientnum ) +{ + for (;;) + { + level waittill( "snap_processed", snapshotlocalclientnum ); + + if ( snapshotlocalclientnum == localclientnum ) + break; + } + + level thread clientscripts\mp\_fxanim_dlc4::fxanim_init_dlc( localclientnum ); + radar = getent( localclientnum, "fxanim_dlc4_radar", "targetname" ); + + if ( isdefined( radar ) ) + { + if ( !isdefined( level.radar_waits ) ) + { + level.radar_waits = []; + + for ( i = 1; i < 6; i++ ) + level.radar_waits[i] = randomfloatrange( 5, 10 ); + } + + radar thread fxanim_radar_think( localclientnum ); + } + + decont_blasters = getent( localclientnum, "fxanim_dlc4_blasters", "targetname" ); + + if ( isdefined( decont_blasters ) ) + decont_blasters thread fxanim_decontamination_think( localclientnum ); + + planets_candidates = getentarray( localclientnum, "fxanim_dlc4", "targetname" ); + + if ( isdefined( planets_candidates ) && planets_candidates.size > 0 ) + { + foreach ( planets_candidate in planets_candidates ) + { + if ( planets_candidate.model == "fxanim_mp_takeoff_planets_mod" ) + planets_candidate thread fxanim_planets_think( localclientnum ); + } + } + + level thread playexploderonstart(); +} + +#using_animtree("fxanim_props"); + +precache_fx_anims() +{ + level.scr_anim = []; + level.scr_anim["fxanim_props"]["seagull_circle_01"] = %fxanim_gp_seagull_circle_01_anim; + level.scr_anim["fxanim_props"]["seagull_circle_02"] = %fxanim_gp_seagull_circle_02_anim; + level.scr_anim["fxanim_props"]["seagull_circle_03"] = %fxanim_gp_seagull_circle_03_anim; + level.scr_anim["fxanim_props"]["windsock"] = %fxanim_gp_windsock_anim; + level.fx_anim_level_init = ::fxanim_init; +} + +#using_animtree("fxanim_props_dlc4"); + +fxanim_radar_think( localclientnum ) +{ + self endon( "death" ); + self endon( "entityshutdown" ); + self endon( "delete" ); + self waittill_dobj( localclientnum ); + self useanimtree( #animtree ); + anim_index = 1; + + for (;;) + { + self setflaggedanimrestart( "radar_done" + anim_index, level.scr_anim["fxanim_props_dlc4"]["radar0" + anim_index], 1.0, 0.0, 1.0 ); + + for (;;) + { + self waittill( "radar_done" + anim_index, note ); + + if ( note == "end" ) + break; + } + + wait( level.radar_waits[anim_index] ); + self clearanim( level.scr_anim["fxanim_props_dlc4"]["radar0" + anim_index], 0 ); + anim_index++; + + if ( anim_index > 5 ) + anim_index = 1; + } +} + +fxanim_decontamination_think( localclientnum ) +{ + self waittill_dobj( localclientnum ); + self useanimtree( #animtree ); + self animflaggedscripted( "nozzle", level.scr_anim["fxanim_props_dlc4"]["decont_blasters"], 1.0, 0.0, 1.0 ); + self.nozzletags = []; + self.nozzletags["one"] = "nozzle_01_tag_jnt"; + self.nozzletags["two"] = "nozzle_02_tag_jnt"; + self.nozzletags["three"] = "nozzle_03_tag_jnt"; + self.nozzletags["four"] = "nozzle_04_tag_jnt"; + self.nozzlefxid = []; + + for (;;) + { + self waittill( "nozzle", note ); + + if ( note == "end" ) + continue; + + tokens = strtok( note, "_" ); + + if ( tokens.size != 4 ) + continue; + + foundchange = 0; + + if ( tokens[3] == "off" || tokens[3] == "on" ) + { + foundchange = 1; + change = tokens[3]; + } + + if ( foundchange == 0 || tokens[0] != "nozzles" ) + continue; + + foreach ( token in tokens ) + { + if ( isdefined( self.nozzletags[token] ) ) + { + if ( change == "on" ) + { + self.nozzlefxid[token] = playfxontag( localclientnum, level._effect["fx_mp_tak_steam_nozzle"], self, self.nozzletags[token] ); + continue; + } + + stopfx( localclientnum, self.nozzlefxid[token] ); + self.nozzlefxid[token] = undefined; + } + } + } +} + +main() +{ + clientscripts\mp\createfx\mp_takeoff_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fx_anims(); + precache_fxanim_props_dlc4(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} + +playexploderonstart() +{ + clientscripts\mp\_fx::activate_exploder( 2001 ); + clientscripts\mp\_fx::activate_exploder( 2002 ); +} + +fxanim_planets_think( localclientnum ) +{ + self waittill_dobj( localclientnum ); + playfxontag( localclientnum, level._effect["fx_mp_tak_glow_blue"], self, "earth_jnt" ); + playfxontag( localclientnum, level._effect["fx_mp_tak_glow_red"], self, "jupiter_jnt" ); + playfxontag( localclientnum, level._effect["fx_mp_tak_glow_red"], self, "mars_jnt" ); + playfxontag( localclientnum, level._effect["fx_mp_tak_glow_yellow"], self, "mercury_jnt" ); + playfxontag( localclientnum, level._effect["fx_mp_tak_glow_blue"], self, "neptune_jnt" ); + playfxontag( localclientnum, level._effect["fx_mp_tak_glow_yellow"], self, "saturn_jnt" ); + playfxontag( localclientnum, level._effect["fx_mp_tak_glow_blue"], self, "uranus_jnt" ); + playfxontag( localclientnum, level._effect["fx_mp_tak_glow_yellow"], self, "venus_jnt" ); +} diff --git a/MP/Maps/Takeoff/maps/mp/createfx/mp_takeoff_fx.gsc b/MP/Maps/Takeoff/maps/mp/createfx/mp_takeoff_fx.gsc new file mode 100644 index 0000000..a922078 --- /dev/null +++ b/MP/Maps/Takeoff/maps/mp/createfx/mp_takeoff_fx.gsc @@ -0,0 +1,3765 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 983.286, 2910.81, 143.273 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1432.95, 2199.07, 143.367 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 516.53, 1937.87, 9.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 638.762, 1936.02, 9.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 715.407, 1868.34, 9.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 437.546, 1867.38, 9.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 716.687, 1721.05, 9.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 643.651, 1648.22, 9.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 508.004, 1648.71, 9.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 434.98, 1725.83, 9.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -648.755, 92.4447, 131.847 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -520.29, 88.8781, 131.849 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -776.327, 88.686, 131.848 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -904.882, 90.2834, 131.952 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -519.447, -34.2767, 131.851 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -648.274, -35.097, 131.85 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -776.23, -33.2154, 131.838 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -904.334, -35.1092, 131.949 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1113.23, 1485.44, 150.001 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -268.701, 3137.87, 149.824 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 226.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -658.216, 3233.51, 149.737 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 316.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_tv_glow_blue_flckr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -666.528, -166.834, 127.102 ); + ent.v["angles"] = ( 11, 90, 0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_tv_glow_blue_flckr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -947.046, -166.757, 127.406 ); + ent.v["angles"] = ( 11, 90, 0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_tv_glow_blue_flckr" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -974.523, 74.081, 126.104 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 12.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createexploder( "fx_mp_tak_shuttle_thruster_smk_grnd" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -4203.15, 2484.17, -697 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1274.53, 1550.32, 341.859 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1118.68, 1549.85, 343.033 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -964.467, 1549.77, 342.676 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -807.474, 1550.47, 342.551 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -652.937, 1551.13, 343.008 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -514.133, 1689.14, 342.813 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -370.846, 1832.96, 343.015 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -192.802, 2012.65, 150 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -90.701, 2109.31, 342.559 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 49.4031, 2253.96, 341.674 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 50.0295, 2493.5, 342.768 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 53.7982, 2734.09, 342.956 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -76.6451, 2863.17, 342.752 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -202.801, 2990.97, 342.686 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -330.71, 3117.95, 342.98 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -458.642, 3245.43, 342.437 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1471.33, 1941.59, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1280.62, 1940.2, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1087.5, 1941.78, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -882.108, 1944.29, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -748.217, 2080.12, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -611.627, 2263.44, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -600.638, 2492.16, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -599.449, 2699.52, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -735.423, 2868.6, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -871.764, 3003.13, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1086.72, 3044.26, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1278.05, 3045.15, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1471.16, 3045.03, 370 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -103.254, 2105.74, 150 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -9.05183, 2201.33, 150 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 32.0324, 2336.98, 150 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 29.9413, 2472.52, 150 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 31.069, 2600.87, 150 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -230.584, 1971.09, 341.786 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -272.42, 315.875, 35.2283 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -544.444, 315.875, 37.4136 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_tak_steam_loading_dock" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -937.289, 3990.75, -447.667 ); + ent.v["angles"] = ( 271, 180, -180 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 151.146, 318.68, 36.1864 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1302.14, 958.538, 83.5725 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1073.44, 380.135, 70.409 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1160.71, 174.23, 75.3968 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 803.083, 800.152, 180.576 ); + ent.v["angles"] = ( 18.997, 270.058, 0.344304 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1652.46, 2130.97, 254.498 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1662.24, 2286.18, 217.879 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 119.43, 3945.7, 104.156 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -613.325, 3201.74, 115.722 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 313.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 7.7182, 2734.55, 223.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1171.91, 2764.99, 51.8487 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1154.72, 2493.14, 59.5368 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1298.97, 2195.32, 66.6985 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1316.53, 1673.02, 96.6959 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -826.993, 1705.17, 102 ); + ent.v["angles"] = ( 359.895, 35, 0.994674 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -497.358, 2071.53, 108 ); + ent.v["angles"] = ( 359.724, 45, 0.961412 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -485.146, 2728.7, 113 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 313.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 14.3494, 2605.83, 92.2667 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -771.889, 2777.05, 89.2267 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -814.044, 2181.69, 74.6889 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 220.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -991.875, -36.6636, 50.4565 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1684.55, 2342.92, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 214.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1131.28, 2863.43, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 235.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1671.72, 2334.25, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 111.0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1221.77, 2170.12, 140.508 ); + ent.v["angles"] = ( 318.404, 90.0132, -0.402941 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1613.84, 2057.86, 140.525 ); + ent.v["angles"] = ( 316.404, 90.0327, -0.416093 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1245.63, 2170.15, 276.561 ); + ent.v["angles"] = ( 318.404, 90.0129, -0.402866 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1350.77, 2169.99, 276.689 ); + ent.v["angles"] = ( 317.404, 90.0224, -0.409253 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1874.07, 2056.45, 140.253 ); + ent.v["angles"] = ( 316.404, 90.0327, -0.416109 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1601.34, 2464.26, 145.379 ); + ent.v["angles"] = ( 88.6999, 90, 90 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1496.25, 2318.41, 145.393 ); + ent.v["angles"] = ( 89.6998, 90, 180 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1368.44, 2317.01, 145.415 ); + ent.v["angles"] = ( 89.6998, 90, 180 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1016.59, 2670.06, 146.314 ); + ent.v["angles"] = ( 89.6999, 179.933, -90.0694 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1111.94, 2892.41, 146.467 ); + ent.v["angles"] = ( 89.8999, 90, 180 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1242.91, 2320.22, 278.141 ); + ent.v["angles"] = ( 88.6999, 90, 90 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1714.59, 2361.24, 258.465 ); + ent.v["angles"] = ( 316.404, 90.0327, -0.416109 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1744.81, 2123.62, 258.856 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 328.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -653.524, 1132.6, 87.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 690.566, -261.614, 96.1049 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1121.82, 1795.84, 85.6525 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_sign_glow_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1539.62, 2449.89, 142.208 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_sign_glow_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1544.48, 2450.13, 142.534 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_sign_glow_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1213.83, 2585.17, 141.868 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_sign_glow_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1217.39, 2581.89, 142.425 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 315.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 175.404, 3927.2, 217.875 ); + ent.v["angles"] = ( 270.807, 29.7371, 60.0036 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 422.709, 3842.63, 212.875 ); + ent.v["angles"] = ( 270.807, 29.7371, 60.0036 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 419.344, 3874.97, 215.875 ); + ent.v["angles"] = ( 270.807, 29.7371, 60.0036 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -797.568, 669.764, -0.500001 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 737.88, 2476.7, 45.9528 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 775.629, 2414.95, 2.65451 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 775.545, 2391.05, -13.078 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 776.413, 2367.01, -29.1524 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 855.92, 2366.99, -29.2167 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 855.913, 2390.98, -13.2231 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 855.876, 2415.02, 2.86906 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 855.866, 2439.04, 18.8905 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 737.922, 2591.77, 45.8145 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 932.833, 2481.86, 45.965 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 542.071, 2592.38, 45.7944 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 541.982, 2477.57, 46.36 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 776.042, 2439, 18.8111 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 504.153, 2367.07, -29.0153 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 504.122, 2415.04, 2.91993 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 504.044, 2439.01, 18.8256 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 423.734, 2367.02, -29.1636 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 424.22, 2415.05, 2.93267 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 424.076, 2438.98, 18.7634 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 989.767, 1889.31, -24.4579 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1016.12, 1630.12, -24.057 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 957.507, 1668.03, -24.2906 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 957.499, 1812.11, -23.6634 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 958.077, 1300.67, -24.1765 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 958.075, 1140.73, -24.198 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1019.53, 1345.85, -23.9984 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1391.78, 2099.01, 27.143 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1472, 2099.07, 27.0083 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1471.54, 2074.99, 10.7802 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1392.1, 2075.03, 10.8867 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1095.06, 2040.36, -12.9766 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1071.02, 2040.25, -29.1561 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1095.07, 1960.54, -13.0282 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1071.04, 1960.63, -29.0773 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1095.08, 1548.06, -12.9934 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1071.05, 1547.95, -29.0742 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1095.08, 1436.51, -12.9819 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1070.96, 1436.56, -29.3406 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 432.881, 1275.59, -22.2206 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 44.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 335.496, 1373, -22.2644 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 44.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 184.017, 1354.71, -22.1986 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 44.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 73.5534, 1465.16, -22.1953 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 44.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 423.921, 1202.83, -21.8863 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 315.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 262.535, 1363.63, -22.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 134.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 109.96, 1152.18, 45.55 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 571.76, 2366.15, -22 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 708.578, 2366.1, -21.9233 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 360.652, 2280.9, -21.0619 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -84.2352, 3038.97, 35.8816 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -81.1992, 3099.76, 36.0374 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -144.735, 3100.04, 35.8417 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 134.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1121.93, 1672.24, 15.8461 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1121.91, 1839.47, 15.8827 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1122.03, 1300.31, 15.5516 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1121.91, 1138.94, 16.077 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1032.28, 819.028, 26.8803 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1032.55, 795.051, 11.0715 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1112.06, 819.069, 26.9837 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1111.83, 795.05, 11.0518 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 857.367, 571.055, 10.944 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 856.751, 595.075, 26.9887 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 857.369, 619.029, 42.8863 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 857.357, 667.036, 74.9126 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 857.858, 691.063, 90.9648 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 857.418, 739.069, 122.995 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 792.122, 571.023, 10.9047 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 791.755, 594.997, 27.2133 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 791.823, 619.06, 43.0249 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 792.043, 667.042, 74.9312 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 792.084, 691.041, 91.0554 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 791.797, 739.05, 122.949 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1172.61, 2452.09, 42.7919 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1107.72, 2452.13, 43.0581 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1108.28, 2428.13, 58.8672 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1108.31, 2404.13, 75.0598 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1107.82, 2380.13, 90.7716 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1172.27, 2428.13, 58.979 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1172.02, 2404.13, 74.8982 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1172.81, 2379.97, 90.6866 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1211.88, 2339.57, 106.643 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1211.88, 2275.89, 106.652 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1235.88, 2275.77, 123.073 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1259.88, 2276.07, 139.058 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1283.88, 2275.93, 154.531 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1235.88, 2339.87, 122.968 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1259.88, 2339.87, 138.789 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1283.88, 2339.95, 154.964 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1079.88, 533.315, 165.875 ); + ent.v["angles"] = ( 90, 180, 0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1080.04, 579.854, 171.875 ); + ent.v["angles"] = ( 90, 180, 0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1207.29, 956.834, 175.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -51.3421, 1484.16, 18.939 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -34.3044, 1500.89, 3.0771 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -16.927, 1517.24, -13.0426 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -0.176095, 1534.49, -29.0559 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -89.5913, 1624.58, -29.088 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -106.645, 1606.97, -13.0749 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -123.29, 1589.81, 3.00089 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -140.137, 1572.93, 18.9672 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 584.363, 952.959, 18.9122 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 583.988, 976.968, 2.91464 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 583.988, 1000.95, -13.0733 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 584.489, 1024.96, -28.9313 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 488.049, 1024.94, -29.0188 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 488.011, 1000.92, -12.9862 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 487.806, 976.929, 3.03751 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 487.927, 952.935, 19.0334 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -196.219, 1595.26, 48.7045 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 315.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -641.931, 1237.99, 7.7812 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -657.878, 1369.34, 39.9439 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -641.901, 1012.52, 7.86399 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -641.951, 728.998, 11.7347 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -641.942, 604.127, 11.7988 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -641.99, 480.622, 11.6406 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -641.902, 356.435, 11.8995 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -604.472, 318.136, 11.9742 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -467.119, 318.073, 11.84 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -331.73, 318.123, 12.0064 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -195.636, 318.018, 11.6762 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -45.1334, 318.114, 11.9143 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 75.8681, 318.051, 11.735 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 195.059, 318.112, 12.0508 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 328.451, 909.492, 46.6491 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 199.855, 910.106, 45.9135 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -56.322, 910.094, 45.8658 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 71.5744, 910.109, 45.6172 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 81.4755, 1291.78, 45.7823 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 225.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -9.66185, 1383.02, 45.9526 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 225.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 72.0178, 1049.94, 45.7625 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -55.6394, 1049.89, 45.9148 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -105.906, 979.873, 45.8574 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -329.152, 1577.68, 48.1444 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 225.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -410.167, 1658.74, 47.9093 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 225.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -312.973, 1282.57, 35.7262 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -312.954, 1357.76, 36.3683 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -412.784, 1364.14, 35.8633 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -412.787, 1276.23, 36.1016 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -357.89, 1382.93, 36.0084 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 417.883, 887.503, 45.9123 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 928.036, 2366.03, -24.2746 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -604.97, 923.851, 26.8855 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -604.923, 812.002, 27.0028 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -628.923, 812.315, 11.0009 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -628.996, 923.686, 11.153 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 332.003, 355.003, 26.8363 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 444.581, 355.039, 26.9293 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 443.718, 331.027, 10.8707 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 331.915, 330.952, 10.6477 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 129.896, -447.594, 19.0958 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 129.97, -329.357, 18.7411 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 702.003, -256.255, 18.6353 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 702.053, -444.759, 19.261 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -482.258, 1778.29, 43.2626 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -465.101, 1795.08, 59.2269 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -448.917, 1812.84, 75.2041 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -432.141, 1829.99, 91.2494 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -414.617, 1846.41, 107.159 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -397.226, 1862.97, 123.104 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -380.478, 1880.13, 139.3 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -363.445, 1897.03, 155.051 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -426.012, 1722.04, 43.0612 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -409.041, 1739.01, 59.1723 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -392.029, 1755.95, 75.2505 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -374.943, 1772.81, 91.0044 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -358.167, 1789.97, 107.291 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -341.255, 1806.99, 123.295 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -324.174, 1823.81, 139.474 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -307.375, 1840.97, 155.207 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -128.75, 2973.71, 43.231 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -111.605, 2956.91, 59.1906 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -94.5312, 2940.05, 75.2042 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -77.6862, 2922.95, 91.2482 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -60.6402, 2906.07, 107.052 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -43.7912, 2888.97, 123.032 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -26.8833, 2871.97, 139.635 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -10.0032, 2854.91, 155.109 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -185.219, 2917.24, 43.1477 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -167.903, 2900.62, 59.2746 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -151.138, 2883.44, 75.1347 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -133.987, 2866.65, 91.0165 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -117.207, 2849.49, 107.104 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -99.903, 2832.86, 123.088 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -83.0559, 2815.8, 139.57 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -66.0691, 2798.85, 155.211 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 471.726, 1675.9, 9.75 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 222.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 485.445, 1912.63, 9.75 ); + ent.v["angles"] = ( 354.204, 147.079, -1.55845 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 666.393, 1700.92, 9.75 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 240.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -65.8765, -288.37, 19.0651 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -65.8591, -450.205, 19.0412 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_pulse" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 862.534, -199.185, 27.2791 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_pulse" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 96.0406, -230.91, 28.2451 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -874.524, 821.716, 7.79738 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -874.599, 901.875, 7.98359 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1121.42, 901.689, 7.92185 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1121.4, 822.056, 8.01758 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -919.938, 949.504, 7.70692 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1072.29, 949.432, 8.07931 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -358.513, 1257.05, 35.9739 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1296.49, 1331.04, 26.8928 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1296.41, 1307.05, 11.0698 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1175.95, 1331.03, 26.8884 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1175.91, 1307.07, 10.9683 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1056.07, 1331.05, 27.0573 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1055.85, 1307.05, 10.9262 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -935.446, 1331.02, 26.8583 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -936.704, 1307.03, 10.8885 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -816.392, 1331.04, 27.0997 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -815.798, 1307.07, 10.9746 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -696.457, 1331.08, 27.0036 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -696.196, 1307.05, 11.0719 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -761.187, 4839.2, 172.242 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -927.999, 5222.38, 173.2 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -761.58, 5607.91, 172.293 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -376.747, 5774.4, 172.692 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -278.937, 4681.38, 171.573 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -475.324, 4681.4, 173.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 10.3508, 4837.39, 171.425 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 175.219, 5222.42, 172.187 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 8.72153, 5607.88, 172.437 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1453.14, 3289.36, 946 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1193.21, 2632.27, 906.26 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 711.688, 429.426, 1046.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -623.974, -159.865, 476.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1385.32, 2324.46, 968.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -746.909, 1701.39, 932 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -684.101, 984.58, -0.500004 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1200.64, 580.56, -0.499997 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1198.34, 718.857, -0.499991 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 991.139, -111.185, 6 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 709.233, 1908.43, 9.75 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 217.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 646.962, 2755.67, 27.5 ); + ent.v["angles"] = ( 354, 183, 0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -800.256, 510.016, -0.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1301.72, 250.611, -0.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 399.61, 3609.42, 32.5 ); + ent.v["angles"] = ( 359, 179, 0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -81.1495, 4320.76, 32.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1016.96, 3075.33, 38.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1760.87, 1774.31, 0 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1737.64, 1252.34, 0 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1743.15, 615.582, 3 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 164.619, -579.537, 0 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1299.71, 968.25, -0.499998 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1300.51, 1144.84, -0.500003 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -683.831, 1117.54, -0.499997 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 398.043, 888.465, 45.7374 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 661.864, -625.489, -11 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 239.886, -704.53, -11 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1677.22, -68.5633, -11 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1234.19, -48.4095, -11 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1694.63, 1192.36, -0.999999 ); + ent.v["angles"] = ( 0, 172, -1 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1066.68, 3282.2, 29.1427 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1988.2, 1513.88, -0.999997 ); + ent.v["angles"] = ( 356.996, 178.012, -0.157153 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1970.02, 799.371, -41.0728 ); + ent.v["angles"] = ( 350.996, 178.029, -0.158891 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 381.014, 4961.92, 44.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1287.68, 3198.4, -28.203 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1219.17, 3198.39, -27.7394 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1414.83, 2974.37, -27.7554 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1483.16, 2974.43, -27.8981 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1548.37, 2974.39, -27.7688 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_glow_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1337.04, 3087.22, 63.9211 ); + ent.v["angles"] = ( 326, 180, 0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_glow_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1464.72, 2022.63, 71.534 ); + ent.v["angles"] = ( 321, 270, 0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 142.296, 643.942, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -86.9443, 673.226, 29 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -446.986, 3.93933, 117.73 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 90.0745, -294.115, 123.422 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 6.40982, -417.262, 128.783 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 273.822, 2405.29, 213.798 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 28.2924, 209.641, -3 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 226.668, 2547.57, 32.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -59.1336, 4222.76, 32.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -79.787, 4091.04, 32.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 752.394, 3596.74, 29.125 ); + ent.v["angles"] = ( 359, 179, 0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 753.327, 3452.5, 29.125 ); + ent.v["angles"] = ( 359, 179, 0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 746.71, -405.051, 123.151 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 847.36, -272.165, 123.151 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_tak_steam_hvac" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1048.48, 1271.84, 117.81 ); + ent.v["angles"] = ( 357, 168, 0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_tak_steam_hvac" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 299.916, 1308.73, 90.8595 ); + ent.v["angles"] = ( 356.608, 132.937, 0.122398 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_tak_steam_hvac" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 172.647, 994.751, 207.315 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 273.36, 3604.84, 32.5 ); + ent.v["angles"] = ( 359, 179, 0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_takeoff_sun1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 86319.8, 184830, 129198 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 424.119, 3943.38, 202.939 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 381.624, 3943.18, 202.948 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 465.718, 3943.23, 202.928 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 465.84, 3776.95, 202.905 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 424.038, 3777.14, 202.902 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 382.137, 3777.18, 202.92 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 319.696, 4027.9, 166.936 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 359.63, 4028.19, 166.948 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 399.952, 4028.02, 166.895 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 439.816, 4028.19, 166.921 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 479.553, 4027.95, 166.946 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 519.759, 4027.95, 166.911 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 230.838, 3907.97, 202.898 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 230.938, 3948.08, 202.897 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 120.813, 3947.71, 202.941 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 121.014, 3908.11, 202.892 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1151.9, 461.667, 158.933 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1084.04, 461.659, 158.929 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1017.85, 461.753, 158.93 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1018.41, 649.811, 158.944 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1083.59, 650.206, 158.951 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1151.75, 650.008, 158.916 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 865.456, 479.486, 151.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 783.057, 479.824, 151.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 865.459, 421.815, 151.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 783.213, 421.592, 151.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1075.83, 848.391, 174.958 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1010.04, 847.859, 174.908 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1009.96, 991.953, 174.891 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1075.77, 991.966, 174.921 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1158.05, 859.994, 150.332 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1261.87, 860.067, 150.34 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1349.73, 860.07, 150.365 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1261.86, 1047.46, 150.399 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1157.79, 1047.5, 150.397 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1051.65, 1048.22, 150.382 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1130.16, 936.207, 166.916 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1129.89, 976.273, 166.922 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1278.03, 975.903, 166.895 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1277.94, 936.127, 166.901 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1349.53, 1047.96, 150.392 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 576.125, 959.955, 286.332 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 575.706, 879.748, 286.379 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 575.846, 798.449, 286.387 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 576.02, 722.32, 286.37 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 576.09, 639.972, 286.328 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 576.179, 562.047, 286.347 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 576.228, 562.634, 422.427 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 575.934, 639.626, 422.382 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 575.884, 721.974, 422.339 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 575.957, 797.894, 422.338 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 575.716, 879.939, 422.361 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 575.772, 959.691, 422.379 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1474.17, 1289.18, 151.014 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1474.54, 1204.81, 150.954 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1650.85, 1204.74, 150.921 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1651.28, 1288.67, 150.949 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 62.3962, 4348.73, 313.622 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 62.2957, 3771.75, 313.857 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 675.772, 863.407, 723.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -778.598, -127.715, 99.005 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -764.966, -126.217, 97.0285 ); + ent.v["angles"] = ( 67, 180, -180 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -794.06, -126.758, 97.2618 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 62.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -779.735, -140.756, 97.2735 ); + ent.v["angles"] = ( 64, 90, 0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -779.573, -113.357, 97.4315 ); + ent.v["angles"] = ( 63, 271, 0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -898.581, -126.843, 98.663 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 62.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -884.094, -113.441, 98.8328 ); + ent.v["angles"] = ( 63, 271, 0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -883.119, -127.799, 100.406 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -884.256, -140.84, 98.6748 ); + ent.v["angles"] = ( 64, 90, 0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -869.487, -126.301, 98.4298 ); + ent.v["angles"] = ( 67, 180, -180 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -368.434, 1355.93, 134.387 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -368.529, 1304.26, 134.41 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -909.869, 2933.34, -45.0905 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -888.329, 2957.39, -29.2049 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -866.258, 2980.95, -13.3263 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -843.931, 3004.18, 2.89832 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -821.874, 3027.75, 18.7913 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -865.306, 2878.96, -45.0933 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -840.549, 2899.23, -29.2758 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -815.79, 2919.5, -13.3795 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -791.259, 2940.06, 2.85001 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -766.301, 2960.09, 18.7407 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -822.691, 2264.91, -45.2797 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -791.177, 2259.3, -29.1206 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -759.688, 2253.58, -13.238 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -728.193, 2247.94, 2.77205 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -696.679, 2242.41, 18.6863 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -807.335, 2351.05, -45.1735 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -775.843, 2345.4, -29.31 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -744.335, 2339.81, -13.5038 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -712.883, 2333.88, 2.95604 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -681.271, 2328.9, 18.7888 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1246.2, 1998.99, -45.4696 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1246.45, 1966.98, -30.3683 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1246.36, 1934.98, -13.2638 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1246.43, 1902.98, 2.81664 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1246.24, 1870.98, 18.7651 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1325.64, 1870.99, 18.8021 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1325.8, 1902.99, 2.77237 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1325.95, 1934.99, -13.3164 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1325.86, 1966.98, -29.3535 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1325.98, 1998.99, -45.5077 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 628.333, 334.603, 59.5787 ); + ent.v["angles"] = ( 334.512, 105.255, -8.17945 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 527.916, 336.229, 59.1082 ); + ent.v["angles"] = ( 332.926, 59.1992, 12.1763 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1047.35, 806.342, -15.875 ); + ent.v["angles"] = ( 317, 273, 0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -960.556, 830.882, -37.7672 ); + ent.v["angles"] = ( 308.01, 271.725, -1.08843 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 653.557, 877.909, 271.374 ); + ent.v["angles"] = ( 319, 180, 180 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_glow_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -159.628, 2550.31, 292.629 ); + ent.v["angles"] = ( 58.6954, 359.606, -89.814 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_glow_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -155.687, 2431.48, 294.46 ); + ent.v["angles"] = ( 60.0946, 359.816, -89.7315 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_glow_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1150.88, 1962.62, 212.343 ); + ent.v["angles"] = ( 90, 0, -90.4 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_flour_glow_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1150.59, 3018.88, 212.332 ); + ent.v["angles"] = ( 90, 0, -90.4 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_modern_sconce" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1070.93, 17.3912, 144.377 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_modern_sconce" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1261.45, 166.907, 144.076 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_modern_sconce" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 728.324, 15.9815, 143.643 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_modern_sconce" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 821.524, 313.055, 148.414 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_modern_sconce" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1260.35, 561.024, 124.251 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_modern_sconce" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 953.039, 817.397, 130.096 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_modern_sconce" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 952.959, 1046.36, 130.139 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 603.882, 768.966, 44.1204 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 587.008, 719.567, 43.834 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 586.979, 559.646, 43.737 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 513.034, 496.762, 43.8888 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 513.037, 374.251, 43.9159 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 695.553, 1634.04, -19.8938 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 307.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 734.405, 1672.63, -21.9928 ); + ent.v["angles"] = ( 360, 322, -180 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 419.353, 1671.36, -20.7047 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 217.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 456.661, 1632.58, -21.8037 ); + ent.v["angles"] = ( 0, 231, -180 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 732.729, 1913.98, -20.5855 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 38.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 696.37, 1950.15, -20.6845 ); + ent.v["angles"] = ( 0, 51, -180 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 457.625, 1951.12, -19.4472 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 128.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 416.54, 1909.79, -20.5462 ); + ent.v["angles"] = ( 360, 142, -180 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3630.8, 2316.3, 118.388 ); + ent.v["angles"] = ( 87, 180, -180 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3637.9, 2416.64, 133.734 ); + ent.v["angles"] = ( 87, 180, -180 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3798.32, 2488.05, 88 ); + ent.v["angles"] = ( 87, 180, -180 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3630.95, 2661.26, 134.723 ); + ent.v["angles"] = ( 87, 180, -180 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3648.16, 2579.75, 132 ); + ent.v["angles"] = ( 87, 180, -180 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_tak_shuttle_frame_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3921.22, 3187.7, 423.648 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_tak_shuttle_frame_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3920.27, 3187.11, 935.695 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_tak_shuttle_frame_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3920.85, 3187.05, 1450.43 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_tak_shuttle_frame_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3925, 3187.79, 1962.55 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam_w" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3728.67, 1859.17, -145.008 ); + ent.v["angles"] = ( 8, 206, 0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam_w" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3635.65, 3113.8, -99.577 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 154.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_spotlight" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1020.28, 3043.88, 198.93 ); + ent.v["angles"] = ( 23.903, 238.53, -2.22219 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_spotlight" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1050.85, 1917.98, 198.766 ); + ent.v["angles"] = ( 19, 104, 0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_wall_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1173.59, 1835.3, 187.012 ); + ent.v["angles"] = ( 45.9894, 269.397, 1.24654 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_wall_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -767.364, 3022.42, 195.834 ); + ent.v["angles"] = ( 55, 39, 0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1640.79, 1673.45, 32.1748 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1480.46, 1673.44, 32.1118 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1430.55, 1639.88, 31.847 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1430.54, 1367.17, 31.8153 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1224.99, 1134.97, 2.86676 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1224.67, 1113.02, 18.732 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1304.58, 1112.93, 18.9678 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1304.58, 1134.99, 3.14237 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 638.59, 817.475, 63.9314 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 638.581, 945.569, 63.9124 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 638.604, 1057.28, -8.0104 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 596.465, 6.55402, 13.8712 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 689.171, -1.88044, 32.4838 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 913.339, -1.87295, 32.3582 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 533.993, 321.006, 12.1779 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 621.583, 321.072, 11.9689 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 672.793, 1089.43, -8.07374 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 912.952, 1089.42, -8.09043 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 597.295, 17.4297, 13.9255 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1169.38, 1089.39, 40.0032 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1697.54, 1521.2, 31.6123 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1697.41, 1360.26, 32.0627 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1697.43, 1128.86, 32.0431 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1697.99, 975.735, 13.6263 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1697.9, 829.795, 13.8588 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1281.47, 592.892, 32.1985 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1281.43, 336.155, 32.1496 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1281.46, 49.4862, 32.1446 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1649.09, 1078.58, 31.9207 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1456.8, 1078.6, 31.976 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1519.11, 798.059, 13.7796 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1664.56, 798.056, 13.7821 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1665.63, 1009.91, 13.8624 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1522.02, 1009.92, 13.8339 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1486.07, 978.77, 13.8024 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1486.07, 831.541, 13.8139 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1671.73, 1193.41, 32.0709 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1457.79, 1193.45, 31.8305 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 638.587, 65.0128, 32.0535 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 638.534, 296.444, 32.1816 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam_w" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4297.09, 2076.79, -86.4624 ); + ent.v["angles"] = ( 339.001, 222.048, -7.18342 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -510.773, 3298.08, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 241.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -10.1306, 2497, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 279.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 62.5652, 2626.85, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 46.4937, 2276.87, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 227.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -305.802, 2032.39, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 169.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -837.933, 1493.27, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 68.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -859.011, 1476.01, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 96.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1150.83, 964.907, 0.125004 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 159.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1154.2, 932.522, 0.124999 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -627.997, -95.0112, 0.124999 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -166.466, 103.361, 0.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 162.0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1264.8, 992.268, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 222.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1258.27, 994.823, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 952.542, 619.736, 0.124996 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 310.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 714.211, 99.0093, 0.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 46.0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 943.322, 109.799, 0.124999 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 161.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -294.714, 1082.19, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 225.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1698.79, 1841.52, 0.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 189.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1692.43, 1877.86, 0.124997 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 168.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 658.848, 2661.56, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 158.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 629.085, 2654, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 167.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 518.661, 3510.54, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 168.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -207.531, 793.291, 32.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 162.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1361.74, 1813.37, 143.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 166.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1153.17, 1423.92, 100.245 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 187.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 864.537, 3032.53, 119.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 208.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -619.301, 5562.1, 115.301 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 182.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 171.604, 755.813, 136.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 624.657, -207.926, 81.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2945.29, 1737.31, -102.881 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2759.13, 1216.56, -58.7997 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2917.57, 1492.47, -326.273 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2565.47, 702.299, -259.373 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 183.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2171.8, 3831.34, -315.863 ); + ent.v["angles"] = ( 347.163, 194.233, -2.06839 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1954.82, 4907.56, -478.092 ); + ent.v["angles"] = ( 357.456, 205.035, -1.59106 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2346.22, 2960.37, -567.725 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1988.48, 1920.49, -5.04919 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1931.01, 3116.27, -21.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2224.94, -579.193, -468.523 ); + ent.v["angles"] = ( 351.102, 188.102, -0.785699 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -189.799, -634.757, -525.232 ); + ent.v["angles"] = ( 354.032, 179.033, -0.629524 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 527.666, 1774.13, 99.1583 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 222.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 452.17, -227.665, 0.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 724.945, 847.713, 154.942 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 724.947, 912.609, 154.94 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 748.926, 913.241, 139.011 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 748.963, 847.764, 138.903 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 857.691, 715.031, 106.914 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 792.029, 715.047, 106.92 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 791.936, 643.056, 58.9436 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 857.277, 643.026, 58.8678 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 503.931, 2391.05, -13.0811 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue_stair" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 424.05, 2391.06, -12.9671 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2002; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -592.125, 1207.71, 114.394 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 172.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_tak_steam_hvac" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 241.412, 1142.85, 269.079 ); + ent.v["angles"] = ( 357.185, 168.987, -1.89627 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -451.879, 2755.46, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -563.421, 2578.01, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 307.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1320.27, 1711.23, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 26.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -822.372, 1921.7, 32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_wall_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1311.53, 2672.75, 159.445 ); + ent.v["angles"] = ( 56.9567, 224.576, 2.54828 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_wall_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -923.639, 1895.27, 186.96 ); + ent.v["angles"] = ( 61.0597, 296.595, 0.136797 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -781.676, 3005.14, 98 ); + ent.v["angles"] = ( 6, 228, 0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1259.22, 1887.77, 87 ); + ent.v["angles"] = ( 14.979, 87.8943, -0.80343 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1238.04, 3158.22, 215.126 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1134.03, 3154.06, 215.1 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1038.13, 3125.91, 215.12 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -950.262, 3094.03, 215.118 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -870.234, 3049.7, 215.127 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -801.808, 2982.05, 215.122 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -753.974, 2898.15, 215.113 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -725.644, 2821.96, 215.128 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -706.028, 2733.44, 215.148 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -697.899, 2641.97, 215.109 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -689.368, 2541.93, 215.151 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -686.227, 2437.93, 215.128 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -693.586, 2338.09, 215.145 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -713.92, 2237.89, 215.108 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -765.482, 2145.81, 215.141 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -837.98, 2054.13, 215.11 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -946.049, 1978.34, 215.128 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1077.59, 1917.81, 215.141 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1217.85, 1890.04, 215.105 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1803.92, 2287.73, 280.207 ); + ent.v["angles"] = ( 89.4613, 158.17, -111.832 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 780.432, 3145.51, 46.6706 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 972.405, 3145.5, 46.775 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createexploder( "fx_tak_light_blue" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 659.913, 3689.5, 46.8525 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2001; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -132.209, 4762.87, 290.801 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_tak_steam_hvac" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 214.543, 3134.04, 194.557 ); + ent.v["angles"] = ( 357, 168, 0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 963.288, 937.543, 151.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -567.787, 2121.14, 205.091 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -568.3, 2265.36, 205.097 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -360.016, 2265.37, 205.083 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -360.054, 2409.07, 205.113 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -464.079, 2409.51, 205.085 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -568.324, 2409.53, 205.112 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -567.731, 2856.69, 205.126 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -567.911, 2697.52, 205.077 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -463.919, 2697.29, 205.076 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -359.705, 2697.6, 205.087 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -359.952, 2569.49, 205.077 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -464.03, 2569.28, 205.081 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -567.591, 2569.18, 205.091 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1237.63, 3157.03, 215.203 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1217.34, 1890.9, 215.172 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1078.51, 1918.02, 215.146 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -946.246, 1978.07, 215.131 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -838.025, 2054.32, 215.116 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -766.197, 2146.19, 215.111 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -714.141, 2238.07, 215.116 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -693.975, 2338.32, 215.117 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -686.745, 2438.16, 215.17 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -689.828, 2542.63, 215.165 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -697.525, 2641.64, 215.16 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -706.664, 2734.36, 215.146 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -726.149, 2821.76, 215.122 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -754.147, 2897.64, 215.137 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -802.209, 2981.43, 215.157 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -870.177, 3049.94, 215.112 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -950.342, 3093.78, 215.15 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1037.98, 3125.61, 215.136 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1134.85, 3153.46, 215.18 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1438.3, 2317.09, 159.125 ); + ent.v["angles"] = ( 90, 351.822, -98.1783 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1610.96, 2494.98, 151.875 ); + ent.v["angles"] = ( 90, 351.822, -98.1783 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1007.68, 2678.46, 151.875 ); + ent.v["angles"] = ( 90, 351.822, -98.1783 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1112.74, 2889.84, 146.587 ); + ent.v["angles"] = ( 90, 351.822, -98.1783 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1239.49, 2313.33, 280.347 ); + ent.v["angles"] = ( 90, 351.822, -98.1783 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -707.732, 1466.49, 134.076 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -771.867, 1466.58, 134.07 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -835.617, 1466.68, 134.085 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -900.001, 1466.36, 134.095 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -963.95, 1466.25, 134.093 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_modern_sconce" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1233.38, 334.426, 123.691 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 101.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_tak_light_sign_glow_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1430.55, 2115.51, 134.592 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["delay"] = -64; +} diff --git a/MP/Maps/Takeoff/maps/mp/mp_takeoff.gsc b/MP/Maps/Takeoff/maps/mp/mp_takeoff.gsc new file mode 100644 index 0000000..9020d03 --- /dev/null +++ b/MP/Maps/Takeoff/maps/mp/mp_takeoff.gsc @@ -0,0 +1,347 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_events; +#include common_scripts\utility; +#include maps\mp\mp_takeoff_fx; +#include maps\mp\_load; +#include maps\mp\_compass; +#include maps\mp\gametypes\_spawning; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + level.overrideplayerdeathwatchtimer = ::leveloverridetime; + level.useintermissionpointsonwavespawn = ::useintermissionpointsonwavespawn; + maps\mp\mp_takeoff_fx::main(); + precachemodel( "collision_nosight_wall_64x64x10" ); + precachemodel( "collision_clip_wall_128x128x10" ); + precachemodel( "collision_mp_takeoff_solar_weap" ); + maps\mp\_load::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_takeoff" ); + setdvar( "compassmaxrange", "2100" ); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -915, 790, 212 ), ( 0, 0, 0 ) ); + spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -979, 790, 212 ), ( 0, 0, 0 ) ); + spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -1043, 790, 212 ), ( 0, 0, 0 ) ); + spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -1083, 790, 212 ), ( 0, 0, 0 ) ); + spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -915, 790, 148 ), ( 0, 0, 0 ) ); + spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -979, 790, 148 ), ( 0, 0, 0 ) ); + spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -1043, 790, 148 ), ( 0, 0, 0 ) ); + spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -1083, 790, 148 ), ( 0, 0, 0 ) ); + spawncollision( "collision_clip_wall_128x128x10", "collider", ( 136, 2511, 245.5 ), vectorscale( ( 0, 1, 0 ), 90.0 ) ); + spawncollision( "collision_mp_takeoff_solar_weap", "collider", ( 580, 3239.5, 32.5 ), ( 0, 0, 0 ) ); + maps\mp\gametypes\_spawning::level_use_unified_spawning( 1 ); + level thread dog_jump_think(); + level.disableoutrovisionset = 1; + level.mptakeoffrocket = getent( "takeoff_rocket", "targetname" ); + assert( isdefined( level.mptakeoffrocket ), "Unable to find entity with targetname: 'takeoff_rocket'" ); + level.endgamefunction = ::takeoff_end_game; + level.preendgamefunction = ::takeoff_pre_end_game; + level thread setuprocketcamera(); +/# + execdevgui( "devgui_mp_takeoff" ); + level thread watchdevnotify(); + level thread devgui_endgame(); +#/ +} + +dog_jump_think() +{ + origin = ( 209, 3819, 91 ); + trigger = spawn( "trigger_box", origin, getaitriggerflags(), 64, 32, 64 ); + trigger setexcludeteamfortrigger( "none" ); + + for (;;) + { + trigger waittill( "trigger", entity ); + + if ( isai( entity ) ) + { + glassradiusdamage( origin, 64, 5001, 5000 ); + trigger delete(); + return; + } + } +} + +setuprocketcamera() +{ + wait 0.1; + getrocketcamera(); +} + +getrocketcamera() +{ + camerastruct = getstruct( "endgame_first_camera", "targetname" ); + assert( isdefined( camerastruct ), "Unable to find entity with targetname: 'endgame_first_camera'" ); + + if ( !isdefined( level.rocketcamera ) ) + { + level.rocketcamera = spawn( "script_model", camerastruct.origin ); + level.rocketcamera setmodel( "tag_origin" ); + } + else + level.rocketcamera.origin = camerastruct.origin; + + level.rocketcamera.angles = camerastruct.angles; + return level.rocketcamera; +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2300", reset_dvars ); +} + +watchdevnotify() +{ +/# + startvalue = 0; + setdvarint( "scr_takeoff_rocket", startvalue ); + + for (;;) + { + takeoff_rocket = getdvarint( "scr_takeoff_rocket" ); + + if ( takeoff_rocket != startvalue ) + { + level notify( "dev_takeoff_rocket" ); + startvalue = takeoff_rocket; + } + + wait 0.2; + } +#/ +} + +devgui_endgame() +{ +/# + rocket = level.mptakeoffrocket; + assert( isdefined( rocket ), "Unable to find entity with targetname: 'takeoff_rocket'" ); + rocketorigin = rocket.origin; + rocketangles = rocket.angles; + rocketmodel = rocket.model; + + for (;;) + { + level waittill( "dev_takeoff_rocket" ); + + visionsetnaked( "blackout", 0.1 ); + thread takeoff_pre_end_game(); + wait 1.0; + visionsetnaked( "mp_takeoff", 0.1 ); + thread takeoff_end_game(); + wait 4.5; + level notify( "debug_end_takeoff" ); + wait 1.0; + visionsetnaked( "mp_takeoff", 0.1 ); + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + player cameraactivate( 0 ); + } + + stop_exploder( 1001 ); + rocket delete(); + rocket = spawn( "script_model", rocketorigin ); + rocket.angles = rocketangles; + rocket setmodel( rocketmodel ); + level.mptakeoffrocket = rocket; + } +#/ +} + +water_trigger_init() +{ + wait 3; + triggers = getentarray( "trigger_hurt", "classname" ); + + foreach ( trigger in triggers ) + { + if ( trigger.origin[2] > level.mapcenter[2] ) + continue; + + trigger thread water_trigger_think(); + } + + triggers = getentarray( "water_killbrush", "targetname" ); + + foreach ( trigger in triggers ) + trigger thread player_splash_think(); +} + +player_splash_think() +{ + for (;;) + { + self waittill( "trigger", entity ); + + if ( isplayer( entity ) && isalive( entity ) ) + self thread trigger_thread( entity, ::player_water_fx ); + } +} + +player_water_fx( player, endon_condition ) +{ + maxs = self.origin + self getmaxs(); + + if ( maxs[2] > 60 ) + maxs += vectorscale( ( 0, 0, 1 ), 10.0 ); + + origin = ( player.origin[0], player.origin[1], maxs[2] ); + playfx( level._effect["water_splash_sm"], origin ); +} + +water_trigger_think() +{ + for (;;) + { + self waittill( "trigger", entity ); + + if ( isplayer( entity ) ) + { + entity playsound( "mpl_splash_death" ); + playfx( level._effect["water_splash"], entity.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + } + } +} + +leveloverridetime( defaulttime ) +{ + if ( self isinwater() ) + return 0.4; + + return defaulttime; +} + +useintermissionpointsonwavespawn() +{ + return self isinwater(); +} + +isinwater() +{ + triggers = getentarray( "trigger_hurt", "classname" ); + + foreach ( trigger in triggers ) + { + if ( trigger.origin[2] > level.mapcenter[2] ) + continue; + + if ( self istouching( trigger ) ) + return true; + } + + return false; +} + +takeoff_pre_end_game( timetillendgame, debug ) +{ + if ( !isdefined( debug ) ) + { + level waittill( "play_final_killcam" ); + + wait 10.0; + } + + rocket = level.mptakeoffrocket; + assert( isdefined( rocket ), "Unable to find entity with targetname: 'takeoff_rocket'" ); + rocket rocket_thrusters_initialize(); +} + +takeoff_end_game() +{ +/# + level endon( "debug_end_takeoff" ); +#/ + level.rocket_camera = 0; + rocket = level.mptakeoffrocket; + rocket playsound( "evt_shuttle_launch" ); + assert( isdefined( rocket ), "Unable to find entity with targetname: 'takeoff_rocket'" ); + rocket rocket_thrusters_initialize(); + cameraone = getrocketcamera(); + cameraone thread vibrateaftertime( getdvarfloatdefault( "mp_takeoff_shakewait", 0.5 ) ); + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + player camerasetposition( cameraone ); + player camerasetlookat(); + player cameraactivate( 1 ); + player setdepthoffield( 0, 0, 512, 512, 4, 0 ); + } + + level.rocket_camera = 1; + rocket thread rocket_move(); + wait 4.0; + visionsetnaked( "blackout", getdvarfloatdefault( "mp_takeoff_fade_black", 0.5 ) ); +} + +rocket_thrusters_initialize() +{ + if ( !isdefined( self.thrustersinited ) ) + { + self.thrustersinited = 1; + exploder( 1001 ); + playfxontag( level._effect["fx_mp_tak_shuttle_thruster_lg"], self, "tag_fx" ); + playfxontag( level._effect["fx_mp_tak_shuttle_thruster_sm"], self, "tag_fx5" ); + playfxontag( level._effect["fx_mp_tak_shuttle_thruster_md"], self, "tag_fx6" ); + playfxontag( level._effect["fx_mp_tak_shuttle_thruster_sm"], self, "tag_fx7" ); + } +} + +rocket_move() +{ + origin = self.origin; + heightincrease = getdvarintdefault( "mp_takeoff_rocket_start_height", 0 ); + self.origin += ( 0, 0, heightincrease ); + movetime = getdvarintdefault( "mp_takeoff_moveTime", 17 ); + moveaccelratio = getdvarfloatdefault( "mp_takeoff_moveAccel", 1.0 ); + self moveto( self.origin + vectorscale( ( 0, 0, 1 ), 50000.0 ), movetime, movetime * moveaccelratio ); + + self waittill( "movedone" ); + + origin = self.origin; +} + +vibrateaftertime( waittime ) +{ + self endon( "death" ); +/# + level endon( "debug_end_takeoff" ); +#/ + wait( waittime ); + pitchvibrateamplitude = getdvarfloatdefault( "mp_takeoff_start", 0.1 ); + vibrateamplitude = getdvarfloatdefault( "mp_takeoff_a_start", 0.1 ); + vibratetime = 0.05; + originalangles = self.angles; + + for (;;) + { + angles0 = ( originalangles[0] - pitchvibrateamplitude, originalangles[1], originalangles[2] - vibrateamplitude ); + angles1 = ( originalangles[0] + pitchvibrateamplitude, originalangles[1], originalangles[2] + vibrateamplitude ); + self rotateto( angles0, vibratetime ); + + self waittill( "rotatedone" ); + + self rotateto( angles1, vibratetime ); + + self waittill( "rotatedone" ); + + vibrateamplitude *= getdvarfloatdefault( "mp_takeoff_amp_vredux", 1.12 ); + pitchvibrateamplitude = 0 - pitchvibrateamplitude; + pitchvibrateamplitude *= getdvarfloatdefault( "mp_takeoff_amp_predux", 1.11 ); + } +} diff --git a/MP/Maps/Takeoff/maps/mp/mp_takeoff_amb.gsc b/MP/Maps/Takeoff/maps/mp/mp_takeoff_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Takeoff/maps/mp/mp_takeoff_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Takeoff/maps/mp/mp_takeoff_fx.gsc b/MP/Maps/Takeoff/maps/mp/mp_takeoff_fx.gsc new file mode 100644 index 0000000..2f627a4 --- /dev/null +++ b/MP/Maps/Takeoff/maps/mp/mp_takeoff_fx.gsc @@ -0,0 +1,100 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_takeoff_fx; + +main() +{ + maps\mp\createfx\mp_takeoff_fx::main(); + precache_fxanim_props(); + precache_fxanim_props_dlc4(); + precache_scripted_fx(); + precache_createfx_fx(); +} + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_light_exit_sign"] = loadfx( "light/fx_light_exit_sign_glow" ); + level._effect["fx_light_flour_glow_cool"] = loadfx( "light/fx_tak_light_flour_glow_cool" ); + level._effect["fx_tak_light_flour_glow_cool_sm"] = loadfx( "light/fx_tak_light_flour_glow_cool_sm" ); + level._effect["fx_light_upl_flour_glow_v_shape_cool"] = loadfx( "light/fx_light_upl_flour_glow_v_shape_cool" ); + level._effect["fx_light_recessed_blue"] = loadfx( "light/fx_light_recessed_blue" ); + level._effect["fx_light_recessed_cool_sm_soft"] = loadfx( "light/fx_light_recessed_cool_sm_soft" ); + level._effect["fx_mp_tak_glow_blue"] = loadfx( "maps/mp_maps/fx_mp_tak_glow_blue" ); + level._effect["fx_mp_tak_glow_orange"] = loadfx( "maps/mp_maps/fx_mp_tak_glow_orange" ); + level._effect["fx_mp_tak_glow_yellow"] = loadfx( "maps/mp_maps/fx_mp_tak_glow_yellow" ); + level._effect["fx_mp_tak_glow_red"] = loadfx( "maps/mp_maps/fx_mp_tak_glow_red" ); + level._effect["fx_tak_light_flour_glow_ceiling"] = loadfx( "light/fx_tak_light_flour_glow_ceiling" ); + level._effect["fx_tak_light_flour_sqr_lg"] = loadfx( "light/fx_tak_light_flour_sqr_lg" ); + level._effect["fx_tak_light_flour_rnd_lg"] = loadfx( "light/fx_tak_light_flour_rnd_lg" ); + level._effect["fx_tak_light_tv_glow_blue"] = loadfx( "light/fx_tak_light_tv_glow_blue" ); + level._effect["fx_tak_light_tv_glow_blue_flckr"] = loadfx( "light/fx_tak_light_tv_glow_blue_flckr" ); + level._effect["fx_drone_light_yellow"] = loadfx( "light/fx_drone_light_yellow" ); + level._effect["fx_tak_light_sign_glow_blue"] = loadfx( "light/fx_tak_light_sign_glow_blue" ); + level._effect["fx_tak_light_blue_stair"] = loadfx( "light/fx_tak_light_blue_stair" ); + level._effect["fx_tak_light_blue_stair_sm"] = loadfx( "light/fx_tak_light_blue_stair_sm" ); + level._effect["fx_tak_light_blue"] = loadfx( "light/fx_tak_light_blue" ); + level._effect["fx_tak_light_blue_pulse"] = loadfx( "light/fx_tak_light_blue_pulse" ); + level._effect["fx_tak_light_blue_pulse_curve"] = loadfx( "light/fx_tak_light_blue_pulse_curve" ); + level._effect["fx_light_beacon_yellow"] = loadfx( "light/fx_light_beacon_yellow" ); + level._effect["fx_light_beacon_red_blink_fst_sm"] = loadfx( "light/fx_light_beacon_red_blink_fst_sm" ); + level._effect["fx_tak_light_modern_sconce"] = loadfx( "light/fx_tak_light_modern_sconce" ); + level._effect["fx_tak_light_spotlight"] = loadfx( "light/fx_tak_light_spotlight" ); + level._effect["fx_tak_light_wall_ext"] = loadfx( "light/fx_tak_light_wall_ext" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_tak_dust_ground"] = loadfx( "maps/mp_maps/fx_mp_tak_dust_ground" ); + level._effect["fx_tak_water_fountain_pool_sm"] = loadfx( "water/fx_tak_water_fountain_pool_sm" ); + level._effect["fx_paper_interior_short_sm"] = loadfx( "debris/fx_paper_interior_short_sm" ); + level._effect["fx_paper_exterior_short_sm_fst"] = loadfx( "debris/fx_paper_exterior_short_sm_fst" ); + level._effect["fx_insects_swarm_md_light"] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); + level._effect["fx_mp_vent_heat_distort"] = loadfx( "maps/mp_maps/fx_mp_vent_heat_distort" ); + level._effect["fx_mp_tak_steam_loading_dock"] = loadfx( "maps/mp_maps/fx_mp_tak_steam_loading_dock" ); + level._effect["fx_mp_vent_steam_line"] = loadfx( "maps/mp_maps/fx_mp_vent_steam_line" ); + level._effect["fx_mp_vent_steam_line_sm"] = loadfx( "maps/mp_maps/fx_mp_vent_steam_line_sm" ); + level._effect["fx_mp_vent_steam_line_lg"] = loadfx( "maps/mp_maps/fx_mp_vent_steam_line_lg" ); + level._effect["fx_mp_steam_amb_xlg"] = loadfx( "maps/mp_maps/fx_mp_steam_amb_xlg" ); + level._effect["fx_mp_tak_steam_hvac"] = loadfx( "maps/mp_maps/fx_mp_tak_steam_hvac" ); + level._effect["fx_lf_mp_overflow_sun1"] = loadfx( "lens_flares/fx_lf_mp_overflow_sun1" ); + level._effect["fx_lf_mp_takeoff_sun1"] = loadfx( "lens_flares/fx_lf_mp_takeoff_sun1" ); + level._effect["fx_mp_tak_shuttle_thruster_lg"] = loadfx( "maps/mp_maps/fx_mp_tak_shuttle_thruster_lg" ); + level._effect["fx_mp_tak_shuttle_thruster_md"] = loadfx( "maps/mp_maps/fx_mp_tak_shuttle_thruster_md" ); + level._effect["fx_mp_tak_shuttle_thruster_sm"] = loadfx( "maps/mp_maps/fx_mp_tak_shuttle_thruster_sm" ); + level._effect["fx_mp_tak_shuttle_thruster_smk_grnd"] = loadfx( "maps/mp_maps/fx_mp_tak_shuttle_thruster_smk_grnd" ); + level._effect["fx_mp_tak_shuttle_thruster_steam"] = loadfx( "maps/mp_maps/fx_mp_tak_shuttle_thruster_steam" ); + level._effect["fx_mp_tak_shuttle_thruster_steam_w"] = loadfx( "maps/mp_maps/fx_mp_tak_shuttle_thruster_steam_w" ); + level._effect["fx_mp_tak_shuttle_frame_light"] = loadfx( "maps/mp_maps/fx_mp_tak_shuttle_frame_light" ); + level._effect["fx_mp_tak_steam_nozzle"] = loadfx( "maps/mp_maps/fx_mp_tak_steam_nozzle" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["seagull_circle_01"] = %fxanim_gp_seagull_circle_01_anim; + level.scr_anim["fxanim_props"]["seagull_circle_02"] = %fxanim_gp_seagull_circle_02_anim; + level.scr_anim["fxanim_props"]["seagull_circle_03"] = %fxanim_gp_seagull_circle_03_anim; + level.scr_anim["fxanim_props"]["windsock"] = %fxanim_gp_windsock_anim; +} + +#using_animtree("fxanim_props_dlc4"); + +precache_fxanim_props_dlc4() +{ + level.scr_anim["fxanim_props_dlc4"]["decont_blasters"] = %fxanim_mp_takeoff_decont_blasters_anim; + level.scr_anim["fxanim_props_dlc4"]["scaffold_wires_01"] = %fxanim_mp_takeoff_scaffold_wires_01_anim; + level.scr_anim["fxanim_props_dlc4"]["crane_hooks"] = %fxanim_mp_takeoff_crane_hooks_anim; + level.scr_anim["fxanim_props_dlc4"]["rattling_sign"] = %fxanim_mp_takeoff_rattling_sign_anim; + level.scr_anim["fxanim_props_dlc4"]["radar01"] = %fxanim_mp_takeoff_satellite_dish_01_anim; + level.scr_anim["fxanim_props_dlc4"]["radar02"] = %fxanim_mp_takeoff_satellite_dish_02_anim; + level.scr_anim["fxanim_props_dlc4"]["radar03"] = %fxanim_mp_takeoff_satellite_dish_03_anim; + level.scr_anim["fxanim_props_dlc4"]["radar04"] = %fxanim_mp_takeoff_satellite_dish_04_anim; + level.scr_anim["fxanim_props_dlc4"]["radar05"] = %fxanim_mp_takeoff_satellite_dish_05_anim; + level.scr_anim["fxanim_props_dlc4"]["banners"] = %fxanim_mp_takeoff_banner_01_anim; + level.scr_anim["fxanim_props_dlc4"]["planets"] = %fxanim_mp_takeoff_planets_anim; + level.scr_anim["fxanim_props_dlc4"]["banners_lrg"] = %fxanim_mp_takeoff_banner_lrg_anim; +} diff --git a/MP/Maps/Turbine/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Turbine/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Turbine/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Turbine/aitype/enemy_dog_mp.gsc b/MP/Maps/Turbine/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Turbine/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Turbine/character/character_mp_german_shepherd.gsc b/MP/Maps/Turbine/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Turbine/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Turbine/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Turbine/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Turbine/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Turbine/clientscripts/mp/createfx/mp_turbine_fx.csc b/MP/Maps/Turbine/clientscripts/mp/createfx/mp_turbine_fx.csc new file mode 100644 index 0000000..6ad1558 --- /dev/null +++ b/MP/Maps/Turbine/clientscripts/mp/createfx/mp_turbine_fx.csc @@ -0,0 +1,1152 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_lg" ); + ent.v["origin"] = ( -1406.93, 3142.59, 297.121 ); + ent.v["angles"] = ( 3.199, 2.89313, -1.67808 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_lg" ); + ent.v["origin"] = ( 694.313, 3884.36, -197.426 ); + ent.v["angles"] = ( 350.85, 286.023, 2.62714 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 862.108, 1186.49, 58.4705 ); + ent.v["angles"] = ( 352.049, 249.11, 2.04621 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( -1061.35, 1247.45, 404.65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 325.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -1365.35, 1572.96, 440.85 ); + ent.v["angles"] = ( 357.905, 347, 0.501119 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_lg" ); + ent.v["origin"] = ( -452.741, -289.627, 279.825 ); + ent.v["angles"] = ( 4.73876, 313.002, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_lg" ); + ent.v["origin"] = ( -295.966, -1209.25, 165.459 ); + ent.v["angles"] = ( 359.505, 327.837, 0.949091 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -902.648, -1952.23, 134.726 ); + ent.v["angles"] = ( 356.138, 353.803, 0.637275 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_lg" ); + ent.v["origin"] = ( 583.137, 5121.51, -277.77 ); + ent.v["angles"] = ( 0.373405, 276.843, 1.98135 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -631.986, 4760.2, 676.648 ); + ent.v["angles"] = ( 5.19152, 308.8, -4.90136 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -696.815, 3879.16, 584.648 ); + ent.v["angles"] = ( 0.354917, 339.065, -1.2632 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -483.116, 2041.97, 687.352 ); + ent.v["angles"] = ( 358.18, 337.067, -0.704263 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -611.764, 684.761, 691.902 ); + ent.v["angles"] = ( 1.54352, 354.3, -2.40647 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -408.605, 97.2704, 628.06 ); + ent.v["angles"] = ( 6.862, 306.178, 1.11665 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 1223.3, 845.474, 468.491 ); + ent.v["angles"] = ( 357.821, 293.039, 0.224171 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md_lng" ); + ent.v["origin"] = ( 1129.52, 62.0926, 628.811 ); + ent.v["angles"] = ( 16, 295, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 288.574, 1918.46, 222.648 ); + ent.v["angles"] = ( 350.42, 319.396, -4.28809 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -624.243, 5178.65, 960.096 ); + ent.v["angles"] = ( 8.969, 317.957, -0.13832 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 1704.68, 754.97, 444.426 ); + ent.v["angles"] = ( 358.389, 337.971, -0.745886 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 1453.59, 3593.12, 303.806 ); + ent.v["angles"] = ( 0.258878, 316, -3.03393 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( -1268.56, 1893.84, 562.844 ); + ent.v["angles"] = ( 1, 336, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( -1163.74, 2334.46, 577.898 ); + ent.v["angles"] = ( 358.873, 338.927, -0.728582 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_edge_md" ); + ent.v["origin"] = ( -556.151, 1033.24, 409.384 ); + ent.v["angles"] = ( 356.012, 346.999, -0.104143 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -928.736, -1432.33, 168.393 ); + ent.v["angles"] = ( 359.318, 339.836, 0.825526 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 77.0866, 2485.17, 299.642 ); + ent.v["angles"] = ( 2.99589, 342.843, -3.00365 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg" ); + ent.v["origin"] = ( -1466.07, 3172.14, 165 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 352.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( -1119.18, 1237.86, 378.199 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 345.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg" ); + ent.v["origin"] = ( 891.74, 3012.06, -81.939 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 286.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg" ); + ent.v["origin"] = ( 582.339, 5560.47, -168.019 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 274.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_swirl_lg_pipe" ); + ent.v["origin"] = ( 898.253, 2355.64, 13.9226 ); + ent.v["angles"] = ( 353.007, 258.022, -0.315824 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_swirl_lg_pipe" ); + ent.v["origin"] = ( 657.024, 1492.34, 122.829 ); + ent.v["angles"] = ( 341.835, 228.312, 1.77078 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_swirl_lg_pipe" ); + ent.v["origin"] = ( -747.031, -301.723, 407.955 ); + ent.v["angles"] = ( 14.6823, 296.035, 7.1564 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_swirl_sm_pipe" ); + ent.v["origin"] = ( 603.333, 4425.56, -208.672 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 279.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( -1432.82, 1566.2, 424.351 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( -891.049, 960.815, 452.129 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( -904.236, 596.015, 369.058 ); + ent.v["angles"] = ( 6, 252, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( -951.789, 2715.96, 410.876 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg" ); + ent.v["origin"] = ( 270.257, 4517.7, -217.082 ); + ent.v["angles"] = ( 346, 246, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( 691.356, 3771.76, -109.39 ); + ent.v["angles"] = ( 356, 282, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( -60.6774, 2037.37, 226.398 ); + ent.v["angles"] = ( 359, 267, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( 476.955, 2480.05, 4.5545 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 257.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( 994.47, 1536.96, 12.0209 ); + ent.v["angles"] = ( 354.007, 248.984, 0.315192 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( 563.019, 538.721, 204.526 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 243.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( 1505.02, 1033.18, 286.484 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg" ); + ent.v["origin"] = ( -710.605, -1214.89, 147.245 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 319.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( 186.316, -576.102, 208.532 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 274.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( 747.206, -402.197, 662.219 ); + ent.v["angles"] = ( 2.70496, 252.206, -2.5795 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 798.039, -996.082, 534.492 ); + ent.v["angles"] = ( 359.222, 246.005, -2.0119 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 1077.12, 4209.58, -117.659 ); + ent.v["angles"] = ( 341, 324, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 1422.01, 3353.93, 311.228 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 290.243, 3514.05, 124.09 ); + ent.v["angles"] = ( 359.48, 274.72, 2.88561 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -709.655, 98.7326, 629.163 ); + ent.v["angles"] = ( 3.25413, 213.059, 1.12483 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -1181.97, 593.034, 637.965 ); + ent.v["angles"] = ( 2.7712, 237.997, -0.145344 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md_lng" ); + ent.v["origin"] = ( 1223.19, 4333.18, 172.3 ); + ent.v["angles"] = ( 9.48348, 257.808, -1.28711 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -182.631, 5330.66, 531.998 ); + ent.v["angles"] = ( 5.82793, 312.395, -0.566427 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -3182.82, 4803, -264.381 ); + ent.v["angles"] = ( 349.052, 328.114, -0.905957 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -1584.36, 765.031, 333.865 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 288.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 543.265, -836.044, 325.543 ); + ent.v["angles"] = ( 28.5249, 212.902, 4.00985 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1632.56, 337.572, 259.391 ); + ent.v["angles"] = ( 3.24263, 230.166, -0.809293 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1450.28, 920.954, 275.006 ); + ent.v["angles"] = ( 3.33384, 251.994, 4.20092 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1728.84, 1765.33, 167.179 ); + ent.v["angles"] = ( 357.746, 288.527, -3.10413 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1526.29, 1443.57, 220.48 ); + ent.v["angles"] = ( 2.15021, 344.778, -1.62638 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1346.71, 1294.18, 243.9 ); + ent.v["angles"] = ( 357.643, 308.917, 0.301857 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1777.85, 1007.09, 268.742 ); + ent.v["angles"] = ( 356.172, 285.895, 0.293392 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1030.43, -576.162, 339.524 ); + ent.v["angles"] = ( 353.557, 273.802, -0.680109 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 215.396, -496.881, 232.321 ); + ent.v["angles"] = ( 10.4225, 288.799, 17.7869 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1028.23, -510.248, 353.483 ); + ent.v["angles"] = ( 349.971, 208.328, -1.50807 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1689.23, 3332.65, 161 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 294.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 1109.59, 2698.12, -156.358 ); + ent.v["angles"] = ( 353.56, 289.597, 5.18696 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 1216.84, 2143.6, -84.5535 ); + ent.v["angles"] = ( 349.469, 258.235, 0.239357 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 1233.65, 1706.03, 1.47629 ); + ent.v["angles"] = ( 356.907, 243.409, 1.31402 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 665.807, 2893.54, -117.775 ); + ent.v["angles"] = ( 355.333, 237.1, -2.65095 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( -124.23, 1346.62, 241.419 ); + ent.v["angles"] = ( 352.984, 265.323, 2.18371 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( -223.36, 1107.29, 295.599 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( -164.955, -895.34, 238.101 ); + ent.v["angles"] = ( 4, 281, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( 348.49, 4977.43, -240.79 ); + ent.v["angles"] = ( 351.05, 234.926, 0.948469 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( -1320.12, 3809.01, 259.867 ); + ent.v["angles"] = ( 356.06, 291.024, -0.695781 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( -71.2607, 30.6365, 313.505 ); + ent.v["angles"] = ( 4, 271, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 1433.18, 2329.32, 113.125 ); + ent.v["angles"] = ( 4.96089, 307.978, -0.329197 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 1138.84, 3202.16, 177.569 ); + ent.v["angles"] = ( 357.408, 357.226, 2.68068 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 1691.35, 1820.16, 183.599 ); + ent.v["angles"] = ( 359.672, 308.267, -3.69506 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 1860.51, 847.635, 329.508 ); + ent.v["angles"] = ( 358.47, 259.669, -1.60795 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 508.665, 271.964, 204.993 ); + ent.v["angles"] = ( 351.292, 231.873, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -319.246, 818.947, 278.848 ); + ent.v["angles"] = ( 2.03285, 284.245, -1.56861 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 62.9951, 686.778, 277.497 ); + ent.v["angles"] = ( 357.251, 247.31, -0.796102 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -111.33, 364.894, 283.781 ); + ent.v["angles"] = ( 354, 269.332, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 357.04, 1861.44, -22.5386 ); + ent.v["angles"] = ( 331.827, 237.315, -16.1332 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 430.697, 2282.46, -45.8848 ); + ent.v["angles"] = ( 11.7238, 272.207, -9.03757 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 83.5348, 3368.37, -7.50717 ); + ent.v["angles"] = ( 15.5965, 353.462, -3.73034 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 367.498, 4322.44, -198.948 ); + ent.v["angles"] = ( 352.549, 245.527, -1.26226 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 750.257, 4895.05, -248.716 ); + ent.v["angles"] = ( 354.044, 274.732, 4.22172 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 167.674, 3910.4, -81.8178 ); + ent.v["angles"] = ( 335.174, 216.894, 4.2963 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -327.893, 2822.05, 214.486 ); + ent.v["angles"] = ( 357.224, 299.445, -1.83224 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -16.2284, 2226.72, 198.412 ); + ent.v["angles"] = ( 359.035, 251.383, 0.326779 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -124.034, 1764.67, 223.108 ); + ent.v["angles"] = ( 355.984, 265.381, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 134.6, 1610.63, 136.689 ); + ent.v["angles"] = ( 338.939, 209.105, -7.72014 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -904.039, 943.147, 404.487 ); + ent.v["angles"] = ( 13.0126, 279.177, -1.01497 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -933.062, 477.095, 340.013 ); + ent.v["angles"] = ( 10.5988, 245.32, 0.289334 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -912.959, 2441.2, 395.645 ); + ent.v["angles"] = ( 352.99, 272.37, 1.40524 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( 316.517, -2046.73, 155.902 ); + ent.v["angles"] = ( 307.278, 316.232, 1.60742 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_swirl_debris_pipe" ); + ent.v["origin"] = ( 883.406, 2330.73, -84.2394 ); + ent.v["angles"] = ( 353.062, 258.978, 1.36671 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_swirl_debris_pipe" ); + ent.v["origin"] = ( 626.428, 1442.38, 27.1133 ); + ent.v["angles"] = ( 340.168, 227.051, 1.76222 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( -1299.72, 1213.72, 584.78 ); + ent.v["angles"] = ( 359.573, 352.577, 0.723254 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md_lng" ); + ent.v["origin"] = ( -1061.38, 735.035, 640.674 ); + ent.v["angles"] = ( 3.64941, 27.952, -2.55961 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md_lng" ); + ent.v["origin"] = ( -1418.74, 1782.05, 563.118 ); + ent.v["angles"] = ( 2.54877, 236.92, -1.62888 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -673.314, 4306.65, 606.599 ); + ent.v["angles"] = ( 5.00534, 336.913, -0.352102 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1197.18, -337.014, 314.967 ); + ent.v["angles"] = ( 354.762, 231.59, -1.18114 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( 903.164, -2184.91, 522.862 ); + ent.v["angles"] = ( 332.336, 322.034, 1.59212 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -1029.77, -35.9784, 300.06 ); + ent.v["angles"] = ( 1.43943, 309.283, -2.4544 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md_lng" ); + ent.v["origin"] = ( 1565.92, 4039.46, 210.112 ); + ent.v["angles"] = ( 5.25584, 240.93, -0.274937 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1185.17, 539.721, 253.469 ); + ent.v["angles"] = ( 358.534, 319.036, 2.27968 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1188, -51.0568, 285.631 ); + ent.v["angles"] = ( 358.865, 258.48, -3.42533 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1087.26, -793.815, 358.571 ); + ent.v["angles"] = ( 355.909, 262.679, -0.713538 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md_lng" ); + ent.v["origin"] = ( 1077.88, 952.251, 463.789 ); + ent.v["angles"] = ( 4.85968, 219.823, -2.88763 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 953.331, -561.401, 630.357 ); + ent.v["angles"] = ( 2.96603, 250.576, 2.567 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 1859.09, 1215.24, 408.668 ); + ent.v["angles"] = ( 359.508, 234.396, 1.74307 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 55.7173, 2857.45, 210.442 ); + ent.v["angles"] = ( 4.87442, 339.762, -2.37214 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md_lng" ); + ent.v["origin"] = ( 1060.3, 4635.09, 36.8409 ); + ent.v["angles"] = ( 356.058, 221.958, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( 1166.64, 5035.67, 146.327 ); + ent.v["angles"] = ( 0.994242, 214.035, 0.872628 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -1211.34, 1583.81, 408.938 ); + ent.v["angles"] = ( 356.796, 30.0557, -1.87885 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -722.946, -189.859, 291.512 ); + ent.v["angles"] = ( 5.19372, 343.01, -2.07585 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( -605.424, -48.5298, 613.776 ); + ent.v["angles"] = ( 15.2903, 262.743, -0.991539 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -160.668, 2486.05, 224.837 ); + ent.v["angles"] = ( 0.22338, 299.402, -0.83127 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1765.67, 493.103, 276.285 ); + ent.v["angles"] = ( 354.872, 228.535, 0.863738 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 955.179, 3379.24, -143.467 ); + ent.v["angles"] = ( 359.82, 291.805, 5.33257 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -543.302, -748.233, 174.419 ); + ent.v["angles"] = ( 7.89651, 290.097, -0.970216 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 971.571, 573.164, 181.306 ); + ent.v["angles"] = ( 1.54568, 213.548, 12.9273 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 1850.89, 2986.61, 162.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 308.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 534.975, 963.656, 148.785 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 344.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( -590.07, 1409.57, 3895.8 ); + ent.v["angles"] = ( 358.002, 356.999, 90.1046 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( -1372.07, -646.927, 2254.94 ); + ent.v["angles"] = ( 359, 358.036, 92.0687 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( -3368.62, 4495.3, 2149.2 ); + ent.v["angles"] = ( 358.052, 358, 89.07 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( -6039.58, -1936.81, 1058.61 ); + ent.v["angles"] = ( 358, 358, 90.0696 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( -2097.19, 1027.28, 77.539 ); + ent.v["angles"] = ( 308.643, 351.708, -0.551175 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( -2229.93, 1774.39, 34.718 ); + ent.v["angles"] = ( 313.479, 340.444, -3.88965 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( -2160.24, 2535.25, 52.594 ); + ent.v["angles"] = ( 305.077, 319.115, -3.96055 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( -1953.09, 3125.38, -43.654 ); + ent.v["angles"] = ( 315.319, 311.099, 0.545793 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( -1811.25, 10.7626, 117.601 ); + ent.v["angles"] = ( 328.577, 5.01471, 2.21768 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( -951.567, -1402.14, -13.0464 ); + ent.v["angles"] = ( 332.167, 321.788, -3.18111 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( -881.541, -2334.83, 10.4008 ); + ent.v["angles"] = ( 316.325, 325.115, -44.0278 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -2409.68, -2524.98, -718.561 ); + ent.v["angles"] = ( 326.286, 353.382, 3.55199 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -1332.51, 311.914, 328.725 ); + ent.v["angles"] = ( 1.67149, 310.389, 3.0899 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -4312.84, 2115.62, -1135.36 ); + ent.v["angles"] = ( 330, 350, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -3908.19, 4060.75, -939.362 ); + ent.v["angles"] = ( 334.174, 356.653, -3.3286 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -4084.99, 1621.01, -834.717 ); + ent.v["angles"] = ( 330, 350, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -2513.38, -1356.8, -759.779 ); + ent.v["angles"] = ( 337.223, 359.328, -15.7628 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -3142.39, -1971.26, -883.386 ); + ent.v["angles"] = ( 353, 350, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -1617.47, 1684.63, 337.628 ); + ent.v["angles"] = ( 1.04831, 269.045, 2.36302 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -1647.66, 2301.74, 324.983 ); + ent.v["angles"] = ( 358.972, 256.979, 0.44455 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -1673.17, 1264.65, 331.072 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -339.947, 3562.02, 126.633 ); + ent.v["angles"] = ( 351.091, 232.11, -1.05292 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -55.274, 4582.7, -94.3652 ); + ent.v["angles"] = ( 334.74, 201.39, -1.39556 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 524.811, 5541.03, -203.814 ); + ent.v["angles"] = ( 352.351, 271.846, -46.5437 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( 1538.12, -1077.51, 698.234 ); + ent.v["angles"] = ( 339.027, 311.561, 6.44771 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( 1157.6, -1624.21, 651.21 ); + ent.v["angles"] = ( 342.344, 329.511, -2.44014 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -750.024, 2962.74, 257.199 ); + ent.v["angles"] = ( 8.28079, 0.40539, -25.905 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg" ); + ent.v["origin"] = ( 846.748, 2422.28, 237.875 ); + ent.v["angles"] = ( 354, 241, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( 417.109, 954.571, 537.512 ); + ent.v["angles"] = ( 5.28426, 245.016, 2.6592 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 154.477, 4722.76, -218.505 ); + ent.v["angles"] = ( 336.482, 221.079, -9.59356 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -655.181, -338.352, 273.602 ); + ent.v["angles"] = ( 10.5588, 279.873, -2.87696 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_edge_md" ); + ent.v["origin"] = ( -67.8391, -528.105, 331.844 ); + ent.v["angles"] = ( 1.04778, 338.345, 29.656 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 1524.38, 1651.94, 376.213 ); + ent.v["angles"] = ( 3, 302, -3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg" ); + ent.v["origin"] = ( 1714.09, 1591.07, 378.887 ); + ent.v["angles"] = ( 359.603, 273.18, -2.81221 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -1771.76, 2989.17, 311.681 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 266.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg" ); + ent.v["origin"] = ( -1990.25, 1063.03, 356.134 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 305.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( -680.892, -309.436, 307.394 ); + ent.v["angles"] = ( 11.9834, 287.059, 3.32174 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 1304.52, 33.8905, 312.819 ); + ent.v["angles"] = ( 356.535, 244.297, -1.32621 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 1011.51, -528.143, 374.803 ); + ent.v["angles"] = ( 359.46, 270.22, -2.84866 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 1022.63, -514.032, 364.441 ); + ent.v["angles"] = ( 355.313, 204.327, -14.8672 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 922.682, -1124.83, 388.288 ); + ent.v["angles"] = ( 357.017, 190.986, 0.217805 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 615.388, -1144.95, 383.405 ); + ent.v["angles"] = ( 359.291, 299.856, 0.674965 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 1481.23, 3845.26, 39.2438 ); + ent.v["angles"] = ( 343.137, 295.681, 8.88461 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( -809.971, -194.794, 306.185 ); + ent.v["angles"] = ( 6.83035, 345.622, 1.38671 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( -165.392, 79.3756, 336.951 ); + ent.v["angles"] = ( 0.901464, 251.242, -1.76529 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 1005.92, 618.549, 180.287 ); + ent.v["angles"] = ( 0.759633, 216.525, 1.47704 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( -57.3561, 2517.21, 290.704 ); + ent.v["angles"] = ( 8.00806, 276.994, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 489.339, 2648.44, -51.6272 ); + ent.v["angles"] = ( 345.482, 233.234, 1.09263 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -3826.2, 2772.7, -1118.32 ); + ent.v["angles"] = ( 330.02, 347.691, 1.15431 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool_dbl_shrt" ); + ent.v["origin"] = ( 1754.99, 2519.99, 305.875 ); + ent.v["angles"] = ( 270, 76.8444, -30.8444 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 1392.75, 2151.22, 3.16943 ); + ent.v["angles"] = ( 337.23, 6.69176, -2.24398 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 1787.43, 2193.51, 30 ); + ent.v["angles"] = ( 358, 44, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 1914.54, 1812.28, 162.155 ); + ent.v["angles"] = ( 359, 76, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -537.296, 345.119, 674.374 ); + ent.v["angles"] = ( 2.77689, 353.123, 1.38902 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_edge_md" ); + ent.v["origin"] = ( -459.019, 1015.95, 339.523 ); + ent.v["angles"] = ( 356.012, 343.991, 0.105049 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 854.095, 2456.99, -110.479 ); + ent.v["angles"] = ( 343.062, 277.297, -3.37125 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1665.03, 1255.46, 222.378 ); + ent.v["angles"] = ( 352.637, 262.829, 0.156695 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 936.244, 3811.16, 35.1558 ); + ent.v["angles"] = ( 12.9656, 208.561, 3.91753 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 1214.31, 3935.27, 122.169 ); + ent.v["angles"] = ( 0.241001, 28.4359, -0.116949 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 1784.61, 3600.66, 303.572 ); + ent.v["angles"] = ( 0.909339, 210.216, 3.08126 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 800.532, -1358.27, 385.492 ); + ent.v["angles"] = ( 352.679, 49.6001, 2.98446 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 1584.38, 597.151, 392.45 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 259.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( 1395.95, 4714.79, 398.945 ); + ent.v["angles"] = ( 354.075, 303.537, 9.59351 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( 2488.28, 3744.28, 689.949 ); + ent.v["angles"] = ( 354.075, 303.537, 9.59351 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( 2161.8, 3162.21, 357.595 ); + ent.v["angles"] = ( 354.075, 303.537, 9.59348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( 2219.05, 1944.76, 495.746 ); + ent.v["angles"] = ( 354.075, 303.537, 0.593492 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( 2230.27, 1269.62, 571.55 ); + ent.v["angles"] = ( 354.549, 285.454, 2.40076 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( 2128.16, 742.859, 510.444 ); + ent.v["angles"] = ( 348.554, 285.198, 2.43842 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_edge_md" ); + ent.v["origin"] = ( 377.23, -721.381, 325.883 ); + ent.v["angles"] = ( 312.675, 332.421, 24.5171 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 597.794, -1104.02, 429.105 ); + ent.v["angles"] = ( 3.62999, 315.089, -2.40076 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1017.49, -1161.6, 370.77 ); + ent.v["angles"] = ( 356.101, 232.605, 1.43087 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1220.08, 2467.62, -129.983 ); + ent.v["angles"] = ( 356.077, 282.644, 6.72534 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_edge_md" ); + ent.v["origin"] = ( 419.987, -141.665, 409.727 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 214.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -166.7, 80.6192, 330.945 ); + ent.v["angles"] = ( 357.131, 257.281, 0.251018 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -2049.43, -1949.75, -545.314 ); + ent.v["angles"] = ( 334.141, 356.871, -0.747941 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -2862.43, -513.632, -518.882 ); + ent.v["angles"] = ( 339.776, 356.207, -5.21178 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -3720.78, 3398.31, -1041.49 ); + ent.v["angles"] = ( 334.174, 356.653, -3.3286 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -3589.52, 370.865, -470.538 ); + ent.v["angles"] = ( 337.785, 356.403, -5.28281 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -4705.81, 843.088, -891.159 ); + ent.v["angles"] = ( 337.785, 356.403, -5.28281 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( -1638.64, 3645.8, -151.782 ); + ent.v["angles"] = ( 315.319, 311.099, 0.545793 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg" ); + ent.v["origin"] = ( -1503.99, 3225.7, 379.144 ); + ent.v["angles"] = ( 356.561, 263.443, 0.803355 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -1458.27, 4320.31, 563.779 ); + ent.v["angles"] = ( 2.5728, 263.023, 1.04024 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( -808.679, 2751.36, 391.125 ); + ent.v["angles"] = ( 359, 214, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -860.591, 1707.07, 415.062 ); + ent.v["angles"] = ( 359.199, 311.006, 2.45768 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -295.101, 4907.56, 467.116 ); + ent.v["angles"] = ( 5.96933, 317.912, 0.855779 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( 1153.05, 5350.95, 235.29 ); + ent.v["angles"] = ( 349.262, 315.056, 7.91743 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool_dbl_shrt" ); + ent.v["origin"] = ( 2150.68, 2342.27, 304.875 ); + ent.v["angles"] = ( 270, 0, -9 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool_dbl_shrt" ); + ent.v["origin"] = ( 2075.51, 2009.18, 307.875 ); + ent.v["angles"] = ( 270, 356.634, 93.3664 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_cool_dbl_shrt" ); + ent.v["origin"] = ( 2161.57, 2537.25, 136.875 ); + ent.v["angles"] = ( 270, 1.84761, 43.1524 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( 4277.04, -2840.86, 4747.97 ); + ent.v["angles"] = ( 358, 358, 90.0696 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( -1312.81, -4708.91, 3280.53 ); + ent.v["angles"] = ( 358.002, 356.999, 92.1045 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( 3111.08, 6638, 3278.44 ); + ent.v["angles"] = ( 358.052, 358, 89.07 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( 2096.3, 12553, 3102.72 ); + ent.v["angles"] = ( 358.052, 358, 89.07 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( -437.189, 20165.9, 2272.85 ); + ent.v["angles"] = ( 358.052, 358, 89.07 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( -14126.7, 6210.72, -2760.33 ); + ent.v["angles"] = ( 358.052, 358, 89.07 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( -17910.8, 9899.93, -2760.71 ); + ent.v["angles"] = ( 358.052, 358, 89.07 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( -14170.9, 476.198, -2762.81 ); + ent.v["angles"] = ( 358.052, 358, 89.07 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( -18720.7, -3704.99, -1752.84 ); + ent.v["angles"] = ( 358.052, 358, 89.07 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_turbine_sun1" ); + ent.v["origin"] = ( -565.631, 56070.4, 24146.6 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_gust_cliff_edge_md" ); + ent.v["origin"] = ( 44.2128, 2107.05, 182.558 ); + ent.v["angles"] = ( 0, 342, -7 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; +} diff --git a/MP/Maps/Turbine/clientscripts/mp/mp_turbine.csc b/MP/Maps/Turbine/clientscripts/mp/mp_turbine.csc new file mode 100644 index 0000000..5171e1c --- /dev/null +++ b/MP/Maps/Turbine/clientscripts/mp/mp_turbine.csc @@ -0,0 +1,26 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_turbine_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_turbine_amb; + +main() +{ + level.worldmapx = -1697; + level.worldmapy = 1808; + level.worldlat = 18.2522; + level.worldlong = 42.3391; + clientscripts\mp\_load::main(); + clientscripts\mp\mp_turbine_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_turbine_amb::main(); + setsaveddvar( "compassmaxrange", "2100" ); + setsaveddvar( "sm_sunsamplesizenear", 0.39 ); + setsaveddvar( "sm_sunshadowsmall", 1 ); + waitforclient( 0 ); +/# + println( "*** Client : mp_turbine running..." ); +#/ +} diff --git a/MP/Maps/Turbine/clientscripts/mp/mp_turbine_amb.csc b/MP/Maps/Turbine/clientscripts/mp/mp_turbine_amb.csc new file mode 100644 index 0000000..a7c1bcb --- /dev/null +++ b/MP/Maps/Turbine/clientscripts/mp/mp_turbine_amb.csc @@ -0,0 +1,158 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "turbine_outdoor", 1 ); + setambientroomtone( "turbine_outdoor", "amb_wind_extreior_2d", 0.55, 1 ); + setambientroomreverb( "turbine_outdoor", "turbine_outdoor", 1, 1 ); + setambientroomcontext( "turbine_outdoor", "ringoff_plr", "outdoor" ); + declareambientroom( "turbine_comp_room" ); + setambientroomreverb( "turbine_comp_room", "turbine_largeroom", 1, 1 ); + setambientroomcontext( "turbine_comp_room", "ringoff_plr", "indoor" ); + declareambientroom( "turbine_comp_hallway" ); + setambientroomreverb( "turbine_comp_hallway", "turbine_dense_hallway", 1, 1 ); + setambientroomcontext( "turbine_comp_hallway", "ringoff_plr", "indoor" ); + declareambientroom( "turbine_comp_mg_room" ); + setambientroomreverb( "turbine_comp_mg_room", "turbine_smallroom", 1, 1 ); + setambientroomcontext( "turbine_comp_mg_room", "ringoff_plr", "indoor" ); + declareambientroom( "tur_comp_hallway_partial" ); + setambientroomreverb( "tur_comp_hallway_partial", "turbine_dense_hallway", 1, 1 ); + setambientroomcontext( "tur_comp_hallway_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "turbine_tubes" ); + setambientroomtone( "turbine_tubes", "amb_air_dank_a", 0.55, 0.55 ); + setambientroomreverb( "turbine_tubes", "turbine_tube", 1, 1 ); + setambientroomcontext( "turbine_tubes", "ringoff_plr", "indoor" ); + declareambientroom( "turbine_tubes_partial" ); + setambientroomtone( "turbine_tubes", "amb_air_dank_a", 0.55, 0.55 ); + setambientroomreverb( "turbine_tubes_partial", "turbine_tube", 1, 1 ); + setambientroomcontext( "turbine_tubes_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "turbine_tubes_loud" ); + setambientroomtone( "turbine_tubes_loud", "amb_air_dank_c", 0.55, 0.55 ); + setambientroomreverb( "turbine_tubes_loud", "turbine_tube", 1, 1 ); + setambientroomcontext( "turbine_tubes_loud", "ringoff_plr", "indoor" ); + declareambientroom( "tur_tubes_loud_partial" ); + setambientroomtone( "tur_tubes_loud_partial", "amb_air_dank_c", 0.55, 0.55 ); + setambientroomreverb( "tur_tubes_loud_partial", "turbine_tube", 1, 1 ); + setambientroomcontext( "tur_tubes_loud_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "turbine_sewer_pipe" ); + setambientroomtone( "turbine_sewer_pipe", "amb_air_dank_a", 0.55, 0.55 ); + setambientroomreverb( "turbine_sewer_pipe", "turbine_tube", 1, 1 ); + setambientroomcontext( "turbine_sewer_pipe", "ringoff_plr", "indoor" ); + declareambientroom( "turbine_comp_storage" ); + setambientroomreverb( "turbine_comp_storage", "turbine_smallroom", 1, 1 ); + setambientroomcontext( "turbine_comp_storage", "ringoff_plr", "indoor" ); + declareambientroom( "turbine_outside_shed" ); + setambientroomtone( "turbine_outside_shed", "amb_air_dank_a", 0.55, 0.55 ); + setambientroomreverb( "turbine_outside_shed", "turbine_partialroom", 1, 1 ); + setambientroomcontext( "turbine_outside_shed", "ringoff_plr", "outdoor" ); + thread snd_start_autofx_audio(); + thread snd_play_loopers(); + thread wmill_sfx_setup(); +} + +snd_play_loopers() +{ + clientscripts\mp\_audio::playloopat( "amb_wind_cliff", ( -1105, -1343, 1007 ) ); + clientscripts\mp\_audio::playloopat( "amb_wind_cliff", ( -1780, 3042, 462 ) ); + clientscripts\mp\_audio::playloopat( "amb_wind_cliff", ( -1436, -80, 524 ) ); + clientscripts\mp\_audio::playloopat( "amb_wind_cliff", ( -594, -2243, 432 ) ); + clientscripts\mp\_audio::playloopat( "amb_wind_cliff", ( -133, -1095, 734 ) ); + playloopat( "amb_wind_cliff", ( -1779, 1697, 676 ) ); + clientscripts\mp\_audio::playloopat( "amb_wmill_motor", ( -2524, 3083, 856 ) ); + clientscripts\mp\_audio::playloopat( "amb_wmill_base_rumble", ( -888, 1418, 547 ) ); + clientscripts\mp\_audio::playloopat( "amb_ribon_flap", ( -998, 3088, 283 ) ); + clientscripts\mp\_audio::playloopat( "amb_ribon_flap", ( -681, 3175, 239 ) ); + clientscripts\mp\_audio::playloopat( "amb_ribon_flap", ( -618, 3281, 217 ) ); + clientscripts\mp\_audio::playloopat( "amb_ribon_flap", ( 458, 4152, -115 ) ); + clientscripts\mp\_audio::playloopat( "amb_ribon_flap", ( 977, 4313, -110 ) ); + clientscripts\mp\_audio::playloopat( "amb_ribon_flap", ( -132, 3589, 126 ) ); +} + +snd_start_autofx_audio() +{ + snd_play_auto_fx( "fx_light_flour_glow_cool_dbl_shrt", "amb_flour_light", 0, 0, 0, 0 ); +} + +wmill_sfx_setup() +{ + wait 0.5; + location = []; + location[0] = spawnstruct(); + location[0].origin = ( -2579, 3014, 385 ); + location[0].alias = "amb_wmill_whoosh"; + location[1] = spawnstruct(); + location[1].origin = ( -1644, -636, 563 ); + location[1].alias = "amb_wmill_whoosh"; + location[2] = spawnstruct(); + location[2].origin = ( -1073, 1351, 1941 ); + location[2].alias = "amb_wmill_whoosh"; + + while ( true ) + { + for ( i = 0; i < location.size; i++ ) + playsound( 0, location[i].alias, location[i].origin ); + + wait 1.35; + } +} + +snd_play_auto_fx( fxid, alias, offsetx, offsety, offsetz, onground, area ) +{ + for ( i = 0; i < level.createfxent.size; i++ ) + { + if ( level.createfxent[i].v["fxid"] == fxid ) + { + level.createfxent[i].soundent = spawnfakeent( 0 ); + + if ( isdefined( area ) ) + level.createfxent[i].soundentarea = area; + + origin = level.createfxent[i].v["origin"]; + + if ( isdefined( offsetx ) && offsetx > 0 ) + origin += ( offsetx, 0, 0 ); + + if ( isdefined( offsety ) && offsetx > 0 ) + origin += ( 0, offsety, 0 ); + + if ( isdefined( offsetz ) && offsetx > 0 ) + origin += ( 0, 0, offsetz ); + + if ( isdefined( onground ) && onground ) + { + trace = undefined; + d = undefined; + fxorigin = origin; + trace = bullettrace( fxorigin, fxorigin - vectorscale( ( 0, 0, 1 ), 100000.0 ), 0, undefined ); + d = distance( fxorigin, trace["position"] ); + origin = trace["position"]; + } + + setfakeentorg( 0, level.createfxent[i].soundent, origin ); + playloopsound( 0, level.createfxent[i].soundent, alias, 0.5 ); + } + } +} + +snd_play_auto_fturbine_area_emmiters() +{ + for ( i = 0; i < level.createfxent.size; i++ ) + { + if ( level.createfxent[i].soundentarea > 1 ) + { + + } + } +} + +snd_print_fturbine_id( fxid, type, ent ) +{ +/# + if ( getdvarint( _hash_AEB127D ) > 0 ) + println( "^5 ******* fxid; " + fxid + "^5 type; " + type ); +#/ +} diff --git a/MP/Maps/Turbine/clientscripts/mp/mp_turbine_fx.csc b/MP/Maps/Turbine/clientscripts/mp/mp_turbine_fx.csc new file mode 100644 index 0000000..cb016d7 --- /dev/null +++ b/MP/Maps/Turbine/clientscripts/mp/mp_turbine_fx.csc @@ -0,0 +1,69 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\createfx\mp_turbine_fx; +#include clientscripts\mp\_fx; + +precache_scripted_fx() +{ + +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["wires_01"] = %fxanim_mp_turbine_wires_01_anim; + level.scr_anim["fxanim_props"]["wires_02"] = %fxanim_mp_turbine_wires_02_anim; + level.scr_anim["fxanim_props"]["wires_03"] = %fxanim_mp_turbine_wires_03_anim; + level.scr_anim["fxanim_props"]["bridge_cables"] = %fxanim_mp_turbine_bridge_cables_anim; +} + +precache_createfx_fx() +{ + level._effect["fx_sand_blowing_lg"] = loadfx( "dirt/fx_sand_blowing_lg" ); + level._effect["fx_sand_blowing_md"] = loadfx( "dirt/fx_sand_blowing_md" ); + level._effect["fx_sand_blowing_sm"] = loadfx( "dirt/fx_sand_blowing_sm" ); + level._effect["fx_sand_gust_ground_lg"] = loadfx( "dirt/fx_sand_gust_ground_lg" ); + level._effect["fx_sand_gust_ground_sm"] = loadfx( "dirt/fx_sand_gust_ground_sm" ); + level._effect["fx_sand_gust_ground_md"] = loadfx( "dirt/fx_sand_gust_ground_md" ); + level._effect["fx_sand_gust_door"] = loadfx( "dirt/fx_sand_gust_door" ); + level._effect["fx_sand_blowing_lg_vista"] = loadfx( "dirt/fx_sand_blowing_lg_vista" ); + level._effect["fx_sand_blowing_lg_vista_shrt"] = loadfx( "dirt/fx_sand_blowing_lg_vista_shrt" ); + level._effect["fx_sand_gust_cliff_fall"] = loadfx( "dirt/fx_sand_gust_cliff_fall" ); + level._effect["fx_sand_gust_cliff_fall_md"] = loadfx( "dirt/fx_sand_gust_cliff_fall_md" ); + level._effect["fx_sand_gust_cliff_fall_md_lng"] = loadfx( "dirt/fx_sand_gust_cliff_fall_md_lng" ); + level._effect["fx_sand_gust_cliff_edge_md"] = loadfx( "dirt/fx_sand_gust_cliff_edge_md" ); + level._effect["fx_sand_swirl_lg_pipe"] = loadfx( "dirt/fx_sand_swirl_lg_pipe" ); + level._effect["fx_sand_swirl_sm_pipe"] = loadfx( "dirt/fx_sand_swirl_sm_pipe" ); + level._effect["fx_sand_swirl_debris_pipe"] = loadfx( "dirt/fx_sand_swirl_debris_pipe" ); + level._effect["fx_mp_light_wind_turbine"] = loadfx( "maps/mp_maps/fx_mp_light_wind_turbine" ); + level._effect["fx_light_floodlight_sqr_cool"] = loadfx( "light/fx_light_floodlight_sqr_cool" ); + level._effect["fx_light_flour_glow_cool_dbl_shrt"] = loadfx( "light/fx_light_flour_glow_cool_dbl_shrt" ); + level._effect["fx_mp_sun_flare_turbine_streak"] = loadfx( "maps/mp_maps/fx_mp_sun_flare_turbine_streak" ); + level._effect["fx_mp_sun_flare_turbine"] = loadfx( "maps/mp_maps/fx_mp_sun_flare_turbine" ); + level._effect["fx_lf_mp_turbine_sun1"] = loadfx( "lens_flares/fx_lf_mp_turbine_sun1" ); +} + +main() +{ + clientscripts\mp\createfx\mp_turbine_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fxanim_props(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); + + wind_initial_setting(); +} + +wind_initial_setting() +{ + setsaveddvar( "enable_global_wind", 1 ); + setsaveddvar( "wind_global_vector", "-150 -230 -150" ); + setsaveddvar( "wind_global_low_altitude", -175 ); + setsaveddvar( "wind_global_hi_altitude", 4000 ); + setsaveddvar( "wind_global_low_strength_percent", 0.5 ); +} diff --git a/MP/Maps/Turbine/maps/mp/createart/mp_turbine_art.gsc b/MP/Maps/Turbine/maps/mp/createart/mp_turbine_art.gsc new file mode 100644 index 0000000..a228bf1 --- /dev/null +++ b/MP/Maps/Turbine/maps/mp/createart/mp_turbine_art.gsc @@ -0,0 +1,43 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + level.tweakfile = 1; + setdvar( "scr_fog_exp_halfplane", "3759.28" ); + setdvar( "scr_fog_exp_halfheight", "243.735" ); + setdvar( "scr_fog_nearplane", "601.593" ); + setdvar( "scr_fog_red", "0.806694" ); + setdvar( "scr_fog_green", "0.962521" ); + setdvar( "scr_fog_blue", "0.9624" ); + setdvar( "scr_fog_baseheight", "-475.268" ); + setdvar( "visionstore_glowTweakEnable", "0" ); + setdvar( "visionstore_glowTweakRadius0", "5" ); + setdvar( "visionstore_glowTweakRadius1", "" ); + setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); + setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); + setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); + setdvar( "visionstore_glowTweakBloomIntensity1", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); + start_dist = 1866.79; + half_dist = 3885.26; + half_height = 678.638; + base_height = 701.862; + fog_r = 0.52549; + fog_g = 0.258824; + fog_b = 0.117647; + fog_scale = 5.56828; + sun_col_r = 1; + sun_col_g = 1; + sun_col_b = 1; + sun_dir_x = -0.252383; + sun_dir_y = 0.230826; + sun_dir_z = 0.939693; + sun_start_ang = 0; + sun_stop_ang = 104.831; + time = 0; + max_fog_opacity = 0.921463; + setvolfog( start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale, sun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, sun_stop_ang, time, max_fog_opacity ); + visionsetnaked( "mp_turbine", 0 ); +} diff --git a/MP/Maps/Turbine/maps/mp/createfx/mp_turbine_fx.gsc b/MP/Maps/Turbine/maps/mp/createfx/mp_turbine_fx.gsc new file mode 100644 index 0000000..4d7b22b --- /dev/null +++ b/MP/Maps/Turbine/maps/mp/createfx/mp_turbine_fx.gsc @@ -0,0 +1,1152 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_lg" ); + ent.v["origin"] = ( -1406.93, 3142.59, 297.121 ); + ent.v["angles"] = ( 3.199, 2.89313, -1.67808 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_lg" ); + ent.v["origin"] = ( 694.313, 3884.36, -197.426 ); + ent.v["angles"] = ( 350.85, 286.023, 2.62714 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 862.108, 1186.49, 58.4705 ); + ent.v["angles"] = ( 352.049, 249.11, 2.04621 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( -1061.35, 1247.45, 404.65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 325.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -1365.35, 1572.96, 440.85 ); + ent.v["angles"] = ( 357.905, 347, 0.501119 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_lg" ); + ent.v["origin"] = ( -452.741, -289.627, 279.825 ); + ent.v["angles"] = ( 4.73876, 313.002, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_lg" ); + ent.v["origin"] = ( -295.966, -1209.25, 165.459 ); + ent.v["angles"] = ( 359.505, 327.837, 0.949091 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -902.648, -1952.23, 134.726 ); + ent.v["angles"] = ( 356.138, 353.803, 0.637275 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_lg" ); + ent.v["origin"] = ( 583.137, 5121.51, -277.77 ); + ent.v["angles"] = ( 0.373405, 276.843, 1.98135 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -631.986, 4760.2, 676.648 ); + ent.v["angles"] = ( 5.19152, 308.8, -4.90136 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -696.815, 3879.16, 584.648 ); + ent.v["angles"] = ( 0.354917, 339.065, -1.2632 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -483.116, 2041.97, 687.352 ); + ent.v["angles"] = ( 358.18, 337.067, -0.704263 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -611.764, 684.761, 691.902 ); + ent.v["angles"] = ( 1.54352, 354.3, -2.40647 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -408.605, 97.2704, 628.06 ); + ent.v["angles"] = ( 6.862, 306.178, 1.11665 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 1223.3, 845.474, 468.491 ); + ent.v["angles"] = ( 357.821, 293.039, 0.224171 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md_lng" ); + ent.v["origin"] = ( 1129.52, 62.0926, 628.811 ); + ent.v["angles"] = ( 16, 295, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 288.574, 1918.46, 222.648 ); + ent.v["angles"] = ( 350.42, 319.396, -4.28809 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -624.243, 5178.65, 960.096 ); + ent.v["angles"] = ( 8.969, 317.957, -0.13832 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 1704.68, 754.97, 444.426 ); + ent.v["angles"] = ( 358.389, 337.971, -0.745886 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 1453.59, 3593.12, 303.806 ); + ent.v["angles"] = ( 0.258878, 316, -3.03393 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( -1268.56, 1893.84, 562.844 ); + ent.v["angles"] = ( 1, 336, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( -1163.74, 2334.46, 577.898 ); + ent.v["angles"] = ( 358.873, 338.927, -0.728582 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_edge_md" ); + ent.v["origin"] = ( -556.151, 1033.24, 409.384 ); + ent.v["angles"] = ( 356.012, 346.999, -0.104143 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -928.736, -1432.33, 168.393 ); + ent.v["angles"] = ( 359.318, 339.836, 0.825526 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 77.0866, 2485.17, 299.642 ); + ent.v["angles"] = ( 2.99589, 342.843, -3.00365 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg" ); + ent.v["origin"] = ( -1466.07, 3172.14, 165 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 352.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( -1119.18, 1237.86, 378.199 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 345.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg" ); + ent.v["origin"] = ( 891.74, 3012.06, -81.939 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 286.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg" ); + ent.v["origin"] = ( 582.339, 5560.47, -168.019 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 274.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_swirl_lg_pipe" ); + ent.v["origin"] = ( 898.253, 2355.64, 13.9226 ); + ent.v["angles"] = ( 353.007, 258.022, -0.315824 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_swirl_lg_pipe" ); + ent.v["origin"] = ( 657.024, 1492.34, 122.829 ); + ent.v["angles"] = ( 341.835, 228.312, 1.77078 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_swirl_lg_pipe" ); + ent.v["origin"] = ( -747.031, -301.723, 407.955 ); + ent.v["angles"] = ( 14.6823, 296.035, 7.1564 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_swirl_sm_pipe" ); + ent.v["origin"] = ( 603.333, 4425.56, -208.672 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 279.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( -1432.82, 1566.2, 424.351 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( -891.049, 960.815, 452.129 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( -904.236, 596.015, 369.058 ); + ent.v["angles"] = ( 6, 252, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( -951.789, 2715.96, 410.876 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg" ); + ent.v["origin"] = ( 270.257, 4517.7, -217.082 ); + ent.v["angles"] = ( 346, 246, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( 691.356, 3771.76, -109.39 ); + ent.v["angles"] = ( 356, 282, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( -60.6774, 2037.37, 226.398 ); + ent.v["angles"] = ( 359, 267, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( 476.955, 2480.05, 4.5545 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 257.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( 994.47, 1536.96, 12.0209 ); + ent.v["angles"] = ( 354.007, 248.984, 0.315192 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( 563.019, 538.721, 204.526 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 243.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( 1505.02, 1033.18, 286.484 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg" ); + ent.v["origin"] = ( -710.605, -1214.89, 147.245 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 319.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( 186.316, -576.102, 208.532 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 274.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( 747.206, -402.197, 662.219 ); + ent.v["angles"] = ( 2.70496, 252.206, -2.5795 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 798.039, -996.082, 534.492 ); + ent.v["angles"] = ( 359.222, 246.005, -2.0119 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 1077.12, 4209.58, -117.659 ); + ent.v["angles"] = ( 341, 324, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 1422.01, 3353.93, 311.228 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 290.243, 3514.05, 124.09 ); + ent.v["angles"] = ( 359.48, 274.72, 2.88561 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -709.655, 98.7326, 629.163 ); + ent.v["angles"] = ( 3.25413, 213.059, 1.12483 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -1181.97, 593.034, 637.965 ); + ent.v["angles"] = ( 2.7712, 237.997, -0.145344 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md_lng" ); + ent.v["origin"] = ( 1223.19, 4333.18, 172.3 ); + ent.v["angles"] = ( 9.48348, 257.808, -1.28711 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -182.631, 5330.66, 531.998 ); + ent.v["angles"] = ( 5.82793, 312.395, -0.566427 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -3182.82, 4803, -264.381 ); + ent.v["angles"] = ( 349.052, 328.114, -0.905957 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -1584.36, 765.031, 333.865 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 288.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 543.265, -836.044, 325.543 ); + ent.v["angles"] = ( 28.5249, 212.902, 4.00985 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1632.56, 337.572, 259.391 ); + ent.v["angles"] = ( 3.24263, 230.166, -0.809293 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1450.28, 920.954, 275.006 ); + ent.v["angles"] = ( 3.33384, 251.994, 4.20092 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1728.84, 1765.33, 167.179 ); + ent.v["angles"] = ( 357.746, 288.527, -3.10413 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1526.29, 1443.57, 220.48 ); + ent.v["angles"] = ( 2.15021, 344.778, -1.62638 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1346.71, 1294.18, 243.9 ); + ent.v["angles"] = ( 357.643, 308.917, 0.301857 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1777.85, 1007.09, 268.742 ); + ent.v["angles"] = ( 356.172, 285.895, 0.293392 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1030.43, -576.162, 339.524 ); + ent.v["angles"] = ( 353.557, 273.802, -0.680109 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 215.396, -496.881, 232.321 ); + ent.v["angles"] = ( 10.4225, 288.799, 17.7869 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1028.23, -510.248, 353.483 ); + ent.v["angles"] = ( 349.971, 208.328, -1.50807 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1689.23, 3332.65, 161 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 294.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 1109.59, 2698.12, -156.358 ); + ent.v["angles"] = ( 353.56, 289.597, 5.18696 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 1216.84, 2143.6, -84.5535 ); + ent.v["angles"] = ( 349.469, 258.235, 0.239357 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 1233.65, 1706.03, 1.47629 ); + ent.v["angles"] = ( 356.907, 243.409, 1.31402 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 665.807, 2893.54, -117.775 ); + ent.v["angles"] = ( 355.333, 237.1, -2.65095 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( -124.23, 1346.62, 241.419 ); + ent.v["angles"] = ( 352.984, 265.323, 2.18371 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( -223.36, 1107.29, 295.599 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( -164.955, -895.34, 238.101 ); + ent.v["angles"] = ( 4, 281, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( 348.49, 4977.43, -240.79 ); + ent.v["angles"] = ( 351.05, 234.926, 0.948469 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( -1320.12, 3809.01, 259.867 ); + ent.v["angles"] = ( 356.06, 291.024, -0.695781 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( -71.2607, 30.6365, 313.505 ); + ent.v["angles"] = ( 4, 271, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 1433.18, 2329.32, 113.125 ); + ent.v["angles"] = ( 4.96089, 307.978, -0.329197 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 1138.84, 3202.16, 177.569 ); + ent.v["angles"] = ( 357.408, 357.226, 2.68068 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 1691.35, 1820.16, 183.599 ); + ent.v["angles"] = ( 359.672, 308.267, -3.69506 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 1860.51, 847.635, 329.508 ); + ent.v["angles"] = ( 358.47, 259.669, -1.60795 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 508.665, 271.964, 204.993 ); + ent.v["angles"] = ( 351.292, 231.873, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -319.246, 818.947, 278.848 ); + ent.v["angles"] = ( 2.03285, 284.245, -1.56861 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 62.9951, 686.778, 277.497 ); + ent.v["angles"] = ( 357.251, 247.31, -0.796102 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -111.33, 364.894, 283.781 ); + ent.v["angles"] = ( 354, 269.332, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 357.04, 1861.44, -22.5386 ); + ent.v["angles"] = ( 331.827, 237.315, -16.1332 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 430.697, 2282.46, -45.8848 ); + ent.v["angles"] = ( 11.7238, 272.207, -9.03757 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 83.5348, 3368.37, -7.50717 ); + ent.v["angles"] = ( 15.5965, 353.462, -3.73034 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 367.498, 4322.44, -198.948 ); + ent.v["angles"] = ( 352.549, 245.527, -1.26226 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 750.257, 4895.05, -248.716 ); + ent.v["angles"] = ( 354.044, 274.732, 4.22172 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); + ent.v["origin"] = ( 167.674, 3910.4, -81.8178 ); + ent.v["angles"] = ( 335.174, 216.894, 4.2963 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -327.893, 2822.05, 214.486 ); + ent.v["angles"] = ( 357.224, 299.445, -1.83224 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -16.2284, 2226.72, 198.412 ); + ent.v["angles"] = ( 359.035, 251.383, 0.326779 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -124.034, 1764.67, 223.108 ); + ent.v["angles"] = ( 355.984, 265.381, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 134.6, 1610.63, 136.689 ); + ent.v["angles"] = ( 338.939, 209.105, -7.72014 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -904.039, 943.147, 404.487 ); + ent.v["angles"] = ( 13.0126, 279.177, -1.01497 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -933.062, 477.095, 340.013 ); + ent.v["angles"] = ( 10.5988, 245.32, 0.289334 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -912.959, 2441.2, 395.645 ); + ent.v["angles"] = ( 352.99, 272.37, 1.40524 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( 316.517, -2046.73, 155.902 ); + ent.v["angles"] = ( 307.278, 316.232, 1.60742 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_swirl_debris_pipe" ); + ent.v["origin"] = ( 883.406, 2330.73, -84.2394 ); + ent.v["angles"] = ( 353.062, 258.978, 1.36671 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_swirl_debris_pipe" ); + ent.v["origin"] = ( 626.428, 1442.38, 27.1133 ); + ent.v["angles"] = ( 340.168, 227.051, 1.76222 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( -1299.72, 1213.72, 584.78 ); + ent.v["angles"] = ( 359.573, 352.577, 0.723254 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md_lng" ); + ent.v["origin"] = ( -1061.38, 735.035, 640.674 ); + ent.v["angles"] = ( 3.64941, 27.952, -2.55961 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md_lng" ); + ent.v["origin"] = ( -1418.74, 1782.05, 563.118 ); + ent.v["angles"] = ( 2.54877, 236.92, -1.62888 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -673.314, 4306.65, 606.599 ); + ent.v["angles"] = ( 5.00534, 336.913, -0.352102 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1197.18, -337.014, 314.967 ); + ent.v["angles"] = ( 354.762, 231.59, -1.18114 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( 903.164, -2184.91, 522.862 ); + ent.v["angles"] = ( 332.336, 322.034, 1.59212 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -1029.77, -35.9784, 300.06 ); + ent.v["angles"] = ( 1.43943, 309.283, -2.4544 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md_lng" ); + ent.v["origin"] = ( 1565.92, 4039.46, 210.112 ); + ent.v["angles"] = ( 5.25584, 240.93, -0.274937 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1185.17, 539.721, 253.469 ); + ent.v["angles"] = ( 358.534, 319.036, 2.27968 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1188, -51.0568, 285.631 ); + ent.v["angles"] = ( 358.865, 258.48, -3.42533 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1087.26, -793.815, 358.571 ); + ent.v["angles"] = ( 355.909, 262.679, -0.713538 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md_lng" ); + ent.v["origin"] = ( 1077.88, 952.251, 463.789 ); + ent.v["angles"] = ( 4.85968, 219.823, -2.88763 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 953.331, -561.401, 630.357 ); + ent.v["angles"] = ( 2.96603, 250.576, 2.567 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 1859.09, 1215.24, 408.668 ); + ent.v["angles"] = ( 359.508, 234.396, 1.74307 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 55.7173, 2857.45, 210.442 ); + ent.v["angles"] = ( 4.87442, 339.762, -2.37214 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md_lng" ); + ent.v["origin"] = ( 1060.3, 4635.09, 36.8409 ); + ent.v["angles"] = ( 356.058, 221.958, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( 1166.64, 5035.67, 146.327 ); + ent.v["angles"] = ( 0.994242, 214.035, 0.872628 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -1211.34, 1583.81, 408.938 ); + ent.v["angles"] = ( 356.796, 30.0557, -1.87885 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -722.946, -189.859, 291.512 ); + ent.v["angles"] = ( 5.19372, 343.01, -2.07585 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( -605.424, -48.5298, 613.776 ); + ent.v["angles"] = ( 15.2903, 262.743, -0.991539 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -160.668, 2486.05, 224.837 ); + ent.v["angles"] = ( 0.22338, 299.402, -0.83127 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1765.67, 493.103, 276.285 ); + ent.v["angles"] = ( 354.872, 228.535, 0.863738 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 955.179, 3379.24, -143.467 ); + ent.v["angles"] = ( 359.82, 291.805, 5.33257 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -543.302, -748.233, 174.419 ); + ent.v["angles"] = ( 7.89651, 290.097, -0.970216 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 971.571, 573.164, 181.306 ); + ent.v["angles"] = ( 1.54568, 213.548, 12.9273 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 1850.89, 2986.61, 162.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 308.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 534.975, 963.656, 148.785 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 344.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( -590.07, 1409.57, 3895.8 ); + ent.v["angles"] = ( 358.002, 356.999, 90.1046 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( -1372.07, -646.927, 2254.94 ); + ent.v["angles"] = ( 359, 358.036, 92.0687 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( -3368.62, 4495.3, 2149.2 ); + ent.v["angles"] = ( 358.052, 358, 89.07 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( -6039.58, -1936.81, 1058.61 ); + ent.v["angles"] = ( 358, 358, 90.0696 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( -2097.19, 1027.28, 77.539 ); + ent.v["angles"] = ( 308.643, 351.708, -0.551175 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( -2229.93, 1774.39, 34.718 ); + ent.v["angles"] = ( 313.479, 340.444, -3.88965 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( -2160.24, 2535.25, 52.594 ); + ent.v["angles"] = ( 305.077, 319.115, -3.96055 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( -1953.09, 3125.38, -43.654 ); + ent.v["angles"] = ( 315.319, 311.099, 0.545793 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( -1811.25, 10.7626, 117.601 ); + ent.v["angles"] = ( 328.577, 5.01471, 2.21768 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( -951.567, -1402.14, -13.0464 ); + ent.v["angles"] = ( 332.167, 321.788, -3.18111 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( -881.541, -2334.83, 10.4008 ); + ent.v["angles"] = ( 316.325, 325.115, -44.0278 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -2409.68, -2524.98, -718.561 ); + ent.v["angles"] = ( 326.286, 353.382, 3.55199 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -1332.51, 311.914, 328.725 ); + ent.v["angles"] = ( 1.67149, 310.389, 3.0899 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -4312.84, 2115.62, -1135.36 ); + ent.v["angles"] = ( 330, 350, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -3908.19, 4060.75, -939.362 ); + ent.v["angles"] = ( 334.174, 356.653, -3.3286 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -4084.99, 1621.01, -834.717 ); + ent.v["angles"] = ( 330, 350, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -2513.38, -1356.8, -759.779 ); + ent.v["angles"] = ( 337.223, 359.328, -15.7628 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -3142.39, -1971.26, -883.386 ); + ent.v["angles"] = ( 353, 350, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -1617.47, 1684.63, 337.628 ); + ent.v["angles"] = ( 1.04831, 269.045, 2.36302 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -1647.66, 2301.74, 324.983 ); + ent.v["angles"] = ( 358.972, 256.979, 0.44455 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -1673.17, 1264.65, 331.072 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -339.947, 3562.02, 126.633 ); + ent.v["angles"] = ( 351.091, 232.11, -1.05292 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -55.274, 4582.7, -94.3652 ); + ent.v["angles"] = ( 334.74, 201.39, -1.39556 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 524.811, 5541.03, -203.814 ); + ent.v["angles"] = ( 352.351, 271.846, -46.5437 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( 1538.12, -1077.51, 698.234 ); + ent.v["angles"] = ( 339.027, 311.561, 6.44771 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( 1157.6, -1624.21, 651.21 ); + ent.v["angles"] = ( 342.344, 329.511, -2.44014 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -750.024, 2962.74, 257.199 ); + ent.v["angles"] = ( 8.28079, 0.40539, -25.905 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg" ); + ent.v["origin"] = ( 846.748, 2422.28, 237.875 ); + ent.v["angles"] = ( 354, 241, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_md" ); + ent.v["origin"] = ( 417.109, 954.571, 537.512 ); + ent.v["angles"] = ( 5.28426, 245.016, 2.6592 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 154.477, 4722.76, -218.505 ); + ent.v["angles"] = ( 336.482, 221.079, -9.59356 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -655.181, -338.352, 273.602 ); + ent.v["angles"] = ( 10.5588, 279.873, -2.87696 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_edge_md" ); + ent.v["origin"] = ( -67.8391, -528.105, 331.844 ); + ent.v["angles"] = ( 1.04778, 338.345, 29.656 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 1524.38, 1651.94, 376.213 ); + ent.v["angles"] = ( 3, 302, -3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg" ); + ent.v["origin"] = ( 1714.09, 1591.07, 378.887 ); + ent.v["angles"] = ( 359.603, 273.18, -2.81221 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -1771.76, 2989.17, 311.681 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 266.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg" ); + ent.v["origin"] = ( -1990.25, 1063.03, 356.134 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 305.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( -680.892, -309.436, 307.394 ); + ent.v["angles"] = ( 11.9834, 287.059, 3.32174 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 1304.52, 33.8905, 312.819 ); + ent.v["angles"] = ( 356.535, 244.297, -1.32621 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 1011.51, -528.143, 374.803 ); + ent.v["angles"] = ( 359.46, 270.22, -2.84866 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 1022.63, -514.032, 364.441 ); + ent.v["angles"] = ( 355.313, 204.327, -14.8672 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 922.682, -1124.83, 388.288 ); + ent.v["angles"] = ( 357.017, 190.986, 0.217805 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 615.388, -1144.95, 383.405 ); + ent.v["angles"] = ( 359.291, 299.856, 0.674965 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 1481.23, 3845.26, 39.2438 ); + ent.v["angles"] = ( 343.137, 295.681, 8.88461 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( -809.971, -194.794, 306.185 ); + ent.v["angles"] = ( 6.83035, 345.622, 1.38671 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( -165.392, 79.3756, 336.951 ); + ent.v["angles"] = ( 0.901464, 251.242, -1.76529 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 1005.92, 618.549, 180.287 ); + ent.v["angles"] = ( 0.759633, 216.525, 1.47704 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( -57.3561, 2517.21, 290.704 ); + ent.v["angles"] = ( 8.00806, 276.994, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 489.339, 2648.44, -51.6272 ); + ent.v["angles"] = ( 345.482, 233.234, 1.09263 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -3826.2, 2772.7, -1118.32 ); + ent.v["angles"] = ( 330.02, 347.691, 1.15431 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_shrt" ); + ent.v["origin"] = ( 1754.99, 2519.99, 305.875 ); + ent.v["angles"] = ( 270, 76.8444, -30.8444 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 1392.75, 2151.22, 3.16943 ); + ent.v["angles"] = ( 337.23, 6.69176, -2.24398 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 1787.43, 2193.51, 30 ); + ent.v["angles"] = ( 358, 44, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 1914.54, 1812.28, 162.155 ); + ent.v["angles"] = ( 359, 76, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -537.296, 345.119, 674.374 ); + ent.v["angles"] = ( 2.77689, 353.123, 1.38902 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_edge_md" ); + ent.v["origin"] = ( -459.019, 1015.95, 339.523 ); + ent.v["angles"] = ( 356.012, 343.991, 0.105049 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 854.095, 2456.99, -110.479 ); + ent.v["angles"] = ( 343.062, 277.297, -3.37125 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1665.03, 1255.46, 222.378 ); + ent.v["angles"] = ( 352.637, 262.829, 0.156695 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 936.244, 3811.16, 35.1558 ); + ent.v["angles"] = ( 12.9656, 208.561, 3.91753 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 1214.31, 3935.27, 122.169 ); + ent.v["angles"] = ( 0.241001, 28.4359, -0.116949 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); + ent.v["origin"] = ( 1784.61, 3600.66, 303.572 ); + ent.v["angles"] = ( 0.909339, 210.216, 3.08126 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 800.532, -1358.27, 385.492 ); + ent.v["angles"] = ( 352.679, 49.6001, 2.98446 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( 1584.38, 597.151, 392.45 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 259.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( 1395.95, 4714.79, 398.945 ); + ent.v["angles"] = ( 354.075, 303.537, 9.59351 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( 2488.28, 3744.28, 689.949 ); + ent.v["angles"] = ( 354.075, 303.537, 9.59351 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( 2161.8, 3162.21, 357.595 ); + ent.v["angles"] = ( 354.075, 303.537, 9.59348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( 2219.05, 1944.76, 495.746 ); + ent.v["angles"] = ( 354.075, 303.537, 0.593492 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( 2230.27, 1269.62, 571.55 ); + ent.v["angles"] = ( 354.549, 285.454, 2.40076 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( 2128.16, 742.859, 510.444 ); + ent.v["angles"] = ( 348.554, 285.198, 2.43842 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_edge_md" ); + ent.v["origin"] = ( 377.23, -721.381, 325.883 ); + ent.v["angles"] = ( 312.675, 332.421, 24.5171 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_sm" ); + ent.v["origin"] = ( 597.794, -1104.02, 429.105 ); + ent.v["angles"] = ( 3.62999, 315.089, -2.40076 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1017.49, -1161.6, 370.77 ); + ent.v["angles"] = ( 356.101, 232.605, 1.43087 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( 1220.08, 2467.62, -129.983 ); + ent.v["angles"] = ( 356.077, 282.644, 6.72534 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_edge_md" ); + ent.v["origin"] = ( 419.987, -141.665, 409.727 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 214.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -166.7, 80.6192, 330.945 ); + ent.v["angles"] = ( 357.131, 257.281, 0.251018 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -2049.43, -1949.75, -545.314 ); + ent.v["angles"] = ( 334.141, 356.871, -0.747941 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -2862.43, -513.632, -518.882 ); + ent.v["angles"] = ( 339.776, 356.207, -5.21178 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -3720.78, 3398.31, -1041.49 ); + ent.v["angles"] = ( 334.174, 356.653, -3.3286 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -3589.52, 370.865, -470.538 ); + ent.v["angles"] = ( 337.785, 356.403, -5.28281 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( -4705.81, 843.088, -891.159 ); + ent.v["angles"] = ( 337.785, 356.403, -5.28281 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); + ent.v["origin"] = ( -1638.64, 3645.8, -151.782 ); + ent.v["angles"] = ( 315.319, 311.099, 0.545793 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg" ); + ent.v["origin"] = ( -1503.99, 3225.7, 379.144 ); + ent.v["angles"] = ( 356.561, 263.443, 0.803355 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -1458.27, 4320.31, 563.779 ); + ent.v["angles"] = ( 2.5728, 263.023, 1.04024 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_door" ); + ent.v["origin"] = ( -808.679, 2751.36, 391.125 ); + ent.v["angles"] = ( 359, 214, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); + ent.v["origin"] = ( -860.591, 1707.07, 415.062 ); + ent.v["angles"] = ( 359.199, 311.006, 2.45768 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); + ent.v["origin"] = ( -295.101, 4907.56, 467.116 ); + ent.v["angles"] = ( 5.96933, 317.912, 0.855779 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); + ent.v["origin"] = ( 1153.05, 5350.95, 235.29 ); + ent.v["angles"] = ( 349.262, 315.056, 7.91743 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_shrt" ); + ent.v["origin"] = ( 2150.68, 2342.27, 304.875 ); + ent.v["angles"] = ( 270, 0, -9 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_shrt" ); + ent.v["origin"] = ( 2075.51, 2009.18, 307.875 ); + ent.v["angles"] = ( 270, 356.634, 93.3664 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_shrt" ); + ent.v["origin"] = ( 2161.57, 2537.25, 136.875 ); + ent.v["angles"] = ( 270, 1.84761, 43.1524 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( 4277.04, -2840.86, 4747.97 ); + ent.v["angles"] = ( 358, 358, 90.0696 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( -1312.81, -4708.91, 3280.53 ); + ent.v["angles"] = ( 358.002, 356.999, 92.1045 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( 3111.08, 6638, 3278.44 ); + ent.v["angles"] = ( 358.052, 358, 89.07 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( 2096.3, 12553, 3102.72 ); + ent.v["angles"] = ( 358.052, 358, 89.07 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( -437.189, 20165.9, 2272.85 ); + ent.v["angles"] = ( 358.052, 358, 89.07 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( -14126.7, 6210.72, -2760.33 ); + ent.v["angles"] = ( 358.052, 358, 89.07 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( -17910.8, 9899.93, -2760.71 ); + ent.v["angles"] = ( 358.052, 358, 89.07 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( -14170.9, 476.198, -2762.81 ); + ent.v["angles"] = ( 358.052, 358, 89.07 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); + ent.v["origin"] = ( -18720.7, -3704.99, -1752.84 ); + ent.v["angles"] = ( 358.052, 358, 89.07 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_turbine_sun1" ); + ent.v["origin"] = ( -565.631, 56070.4, 24146.6 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_gust_cliff_edge_md" ); + ent.v["origin"] = ( 44.2128, 2107.05, 182.558 ); + ent.v["angles"] = ( 0, 342, -7 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; +} diff --git a/MP/Maps/Turbine/maps/mp/mp_turbine.gsc b/MP/Maps/Turbine/maps/mp/mp_turbine.gsc new file mode 100644 index 0000000..ae3ddeb --- /dev/null +++ b/MP/Maps/Turbine/maps/mp/mp_turbine.gsc @@ -0,0 +1,60 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_turbine_fx; +#include maps\mp\_load; +#include maps\mp\_compass; +#include maps\mp\mp_turbine_amb; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_turbine_fx::main(); + maps\mp\_load::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_turbine" ); + maps\mp\mp_turbine_amb::main(); + + if ( !level.console ) + { + precachemodel( "collision_clip_32x32x32" ); + spawncollision( "collision_clip_32x32x32", "collider", ( -1400, 550, 360 ), ( 0, 0, 0 ) ); + } + + level.remotemotarviewleft = 50; + level.remotemotarviewright = 50; +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2600", reset_dvars ); + ss.koth_objective_influencer_inner_radius = 2400; +} + +turbine_spin_init() +{ + level endon( "game_ended" ); + turbine1 = getent( "turbine_blades", "targetname" ); + turbine1 thread rotate_blades( 4 ); + turbine2 = getent( "turbine_blades2", "targetname" ); + turbine2 thread rotate_blades( 3 ); + turbine3 = getent( "turbine_blades3", "targetname" ); + turbine3 thread rotate_blades( 6 ); + turbine4 = getent( "turbine_blades4", "targetname" ); + turbine4 thread rotate_blades( 3 ); + turbine6 = getent( "turbine_blades6", "targetname" ); + turbine6 thread rotate_blades( 4 ); +} + +rotate_blades( time ) +{ + self endon( "game_ended" ); + revolutions = 1000; + + while ( true ) + { + self rotateroll( 360 * revolutions, time * revolutions ); + + self waittill( "rotatedone" ); + } +} diff --git a/MP/Maps/Turbine/maps/mp/mp_turbine_amb.gsc b/MP/Maps/Turbine/maps/mp/mp_turbine_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Turbine/maps/mp/mp_turbine_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Turbine/maps/mp/mp_turbine_fx.gsc b/MP/Maps/Turbine/maps/mp/mp_turbine_fx.gsc new file mode 100644 index 0000000..c63500f --- /dev/null +++ b/MP/Maps/Turbine/maps/mp/mp_turbine_fx.gsc @@ -0,0 +1,55 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_turbine_fx; +#include maps\mp\createart\mp_turbine_art; + +main() +{ + precache_fxanim_props(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_turbine_fx::main(); + maps\mp\createart\mp_turbine_art::main(); +} + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_sand_blowing_lg"] = loadfx( "dirt/fx_sand_blowing_lg" ); + level._effect["fx_sand_blowing_md"] = loadfx( "dirt/fx_sand_blowing_md" ); + level._effect["fx_sand_blowing_sm"] = loadfx( "dirt/fx_sand_blowing_sm" ); + level._effect["fx_sand_gust_ground_lg"] = loadfx( "dirt/fx_sand_gust_ground_lg" ); + level._effect["fx_sand_gust_ground_sm"] = loadfx( "dirt/fx_sand_gust_ground_sm" ); + level._effect["fx_sand_gust_ground_md"] = loadfx( "dirt/fx_sand_gust_ground_md" ); + level._effect["fx_sand_gust_door"] = loadfx( "dirt/fx_sand_gust_door" ); + level._effect["fx_sand_blowing_lg_vista"] = loadfx( "dirt/fx_sand_blowing_lg_vista" ); + level._effect["fx_sand_blowing_lg_vista_shrt"] = loadfx( "dirt/fx_sand_blowing_lg_vista_shrt" ); + level._effect["fx_sand_gust_cliff_fall"] = loadfx( "dirt/fx_sand_gust_cliff_fall" ); + level._effect["fx_sand_gust_cliff_fall_md"] = loadfx( "dirt/fx_sand_gust_cliff_fall_md" ); + level._effect["fx_sand_gust_cliff_fall_md_lng"] = loadfx( "dirt/fx_sand_gust_cliff_fall_md_lng" ); + level._effect["fx_sand_gust_cliff_edge_md"] = loadfx( "dirt/fx_sand_gust_cliff_edge_md" ); + level._effect["fx_sand_swirl_lg_pipe"] = loadfx( "dirt/fx_sand_swirl_lg_pipe" ); + level._effect["fx_sand_swirl_sm_pipe"] = loadfx( "dirt/fx_sand_swirl_sm_pipe" ); + level._effect["fx_sand_swirl_debris_pipe"] = loadfx( "dirt/fx_sand_swirl_debris_pipe" ); + level._effect["fx_mp_light_wind_turbine"] = loadfx( "maps/mp_maps/fx_mp_light_wind_turbine" ); + level._effect["fx_light_floodlight_sqr_cool"] = loadfx( "light/fx_light_floodlight_sqr_cool" ); + level._effect["fx_light_flour_glow_cool_dbl_shrt"] = loadfx( "light/fx_light_flour_glow_cool_dbl_shrt" ); + level._effect["fx_mp_sun_flare_turbine_streak"] = loadfx( "maps/mp_maps/fx_mp_sun_flare_turbine_streak" ); + level._effect["fx_mp_sun_flare_turbine"] = loadfx( "maps/mp_maps/fx_mp_sun_flare_turbine" ); + level._effect["fx_lf_mp_turbine_sun1"] = loadfx( "lens_flares/fx_lf_mp_turbine_sun1" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["wires_01"] = %fxanim_mp_turbine_wires_01_anim; + level.scr_anim["fxanim_props"]["wires_02"] = %fxanim_mp_turbine_wires_02_anim; + level.scr_anim["fxanim_props"]["wires_03"] = %fxanim_mp_turbine_wires_03_anim; + level.scr_anim["fxanim_props"]["bridge_cables"] = %fxanim_mp_turbine_bridge_cables_anim; +} diff --git a/MP/Maps/Uplink/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Uplink/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Uplink/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Uplink/aitype/enemy_dog_mp.gsc b/MP/Maps/Uplink/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Uplink/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Uplink/character/character_mp_german_shepherd.gsc b/MP/Maps/Uplink/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Uplink/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Uplink/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Uplink/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Uplink/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Uplink/clientscripts/mp/_fxanim_dlc3.csc b/MP/Maps/Uplink/clientscripts/mp/_fxanim_dlc3.csc new file mode 100644 index 0000000..e60e0f2 --- /dev/null +++ b/MP/Maps/Uplink/clientscripts/mp/_fxanim_dlc3.csc @@ -0,0 +1,239 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; + +fxanim_init_dlc( localclientnum ) +{ + a_fxanims = getentarray( localclientnum, "fxanim_dlc3", "targetname" ); + assert( a_fxanims.size <= level.fxanim_max_anims ); + + for ( i = 0; i < a_fxanims.size; i++ ) + { + if ( isdefined( a_fxanims[i].fxanim_parent ) ) + { + parent = getent( localclientnum, a_fxanims[i].fxanim_parent, "targetname" ); + a_fxanims[a_fxanims.size] = parent; + a_fxanims[i] thread _fxanim_model_link( localclientnum ); + continue; + } + + a_fxanims[i] thread fxanim_think( localclientnum ); + } + + if ( isdefined( level.fx_anim_level_dlc_init ) ) + level thread [[ level.fx_anim_level_dlc_init ]]( localclientnum ); +} + +#using_animtree("fxanim_props_dlc3"); + +fxanim_think( localclientnum, random_wait, random_speed ) +{ + self waittill_dobj( localclientnum ); + self thread _fxanim_hide(); + self _fxanim_wait(); + self useanimtree( #animtree ); + n_anim_count = self _fxanim_get_anim_count(); + self notify( "fxanim_start" ); + + for ( n_current_anim = 0; n_current_anim < n_anim_count; n_current_anim++ ) + { + str_scene = self _fxanim_get_scene_name( n_current_anim ); + + if ( !self _fxanim_modifier( str_scene ) ) + { + self _fxanim_animate( str_scene ); + self _fxanim_play_fx( localclientnum ); + } + + self _fxanim_change_anim( n_current_anim ); + } +} + +_fxanim_hide() +{ + if ( isdefined( self.fxanim_hide ) && self.fxanim_hide ) + { + self hide(); + + self waittill( "fxanim_start" ); + + self show(); + } +} + +_fxanim_modifier( str_scene ) +{ + switch ( str_scene ) + { + case "delete": + self delete(); + break; + case "hide": + self hide(); + break; + default: + return false; + break; + } + + return true; +} + +_fxanim_wait() +{ + if ( isdefined( self.fxanim_waittill_1 ) ) + { + if ( isdefined( self.fxanim_waittill_1 ) ) + _fxanim_change_anim( -1 ); + } + + if ( isdefined( self.fxanim_wait ) ) + wait( self.fxanim_wait ); + else if ( isdefined( self.fxanim_wait_min ) && isdefined( self.fxanim_wait_max ) ) + { + n_wait_time = randomfloatrange( self.fxanim_wait_min, self.fxanim_wait_max ); + wait( n_wait_time ); + } +} + +_fxanim_change_anim( n_fxanim_id ) +{ + str_waittill = undefined; + + if ( n_fxanim_id == -1 && isdefined( self.fxanim_waittill_1 ) ) + str_waittill = self.fxanim_waittill_1; + else if ( n_fxanim_id == 0 && isdefined( self.fxanim_waittill_2 ) ) + str_waittill = self.fxanim_waittill_2; + else if ( n_fxanim_id == 1 && isdefined( self.fxanim_waittill_3 ) ) + str_waittill = self.fxanim_waittill_3; + + if ( !isdefined( str_waittill ) && n_fxanim_id != -1 ) + self _fxanim_wait_for_anim_to_end( n_fxanim_id ); + else + { + a_changer = strtok( str_waittill, "_" ); + + level waittill( str_waittill ); + } +} + +_fxanim_wait_for_anim_to_end( n_fxanim_id ) +{ + str_scene = _fxanim_get_scene_name( n_fxanim_id ); + + if ( issubstr( str_scene, "_loop" ) ) + self waittillmatch( "looping anim", "end" ); + else + self waittillmatch( "single anim", "end" ); +} + +_fxanim_animate( str_scene ) +{ + if ( !isdefined( level.scr_anim["fxanim_props_dlc3"][str_scene] ) ) + { +/# + if ( isdefined( str_scene ) ) + println( "Error: fxanim entity at " + self.origin + " is missing animation: " + str_scene ); + else + println( "Error: fxanim entity at " + self.origin + " is missing animation" ); +#/ + return; + } + + self animscripted( level.scr_anim["fxanim_props_dlc3"][str_scene], 1.0, 0.0, 1.0 ); +} + +_fxanim_play_fx( localclientnum ) +{ + if ( isdefined( self.fxanim_fx_1 ) ) + { + assert( isdefined( self.fxanim_fx_1_tag ), "KVP fxanim_fx_1_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_1 ), self, self.fxanim_fx_1_tag ); + } + + if ( isdefined( self.fxanim_fx_2 ) ) + { + assert( isdefined( self.fxanim_fx_2_tag ), "KVP fxanim_fx_2_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_2 ), self, self.fxanim_fx_2_tag ); + } + + if ( isdefined( self.fxanim_fx_3 ) ) + { + assert( isdefined( self.fxanim_fx_3_tag ), "KVP fxanim_fx_3_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_3 ), self, self.fxanim_fx_3_tag ); + } + + if ( isdefined( self.fxanim_fx_4 ) ) + { + assert( isdefined( self.fxanim_fx_4_tag ), "KVP fxanim_fx_4_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_4 ), self, self.fxanim_fx_4_tag ); + } + + if ( isdefined( self.fxanim_fx_5 ) ) + { + assert( isdefined( self.fxanim_fx_5_tag ), "KVP fxanim_fx_5_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_5 ), self, self.fxanim_fx_5_tag ); + } +} + +_fxanim_get_anim_count() +{ + assert( isdefined( self.fxanim_scene_1 ), "fxanim at position " + self.origin + " needs at least one scene defined. Use the KVP fxanim_scene_1" ); + n_fx_count = 0; + + if ( !isdefined( self.fxanim_scene_2 ) ) + n_fx_count = 1; + else if ( !isdefined( self.fxanim_scene_3 ) ) + n_fx_count = 2; + else + n_fx_count = 3; + + return n_fx_count; +} + +_fxanim_get_scene_name( n_anim_id ) +{ + str_scene_name = undefined; + + switch ( n_anim_id ) + { + case 0: + str_scene_name = self.fxanim_scene_1; + break; + case 1: + str_scene_name = self.fxanim_scene_2; + break; + case 2: + str_scene_name = self.fxanim_scene_3; + break; + } + + return str_scene_name; +} + +_fxanim_model_link( localclientnum ) +{ + self waittill_dobj( localclientnum ); + assert( isdefined( self.fxanim_tag ), "Model at origin " + self.origin + " needs an fxanim_tag defined, to show which tag the model will link to" ); + m_parent = getent( localclientnum, self.fxanim_parent, "targetname" ); + assert( isdefined( m_parent ), "Model at origin " + self.origin + " does not have a proper parent. Make sure the fxanim_parent matches the targetname of the fxanim" ); + m_parent waittill_dobj( localclientnum ); + self.origin = m_parent gettagorigin( self.fxanim_tag ); + self.angles = m_parent gettagangles( self.fxanim_tag ); + self linkto( m_parent, self.fxanim_tag ); + + if ( isdefined( self.fxanim_hide ) ) + { + self hide(); + + m_parent waittill( "fxanim_start" ); + + self show(); + } +} + +getfx( fx ) +{ + assert( isdefined( level._effect[fx] ), "Fx " + fx + " is not defined in level._effect." ); + return level._effect[fx]; +} diff --git a/MP/Maps/Uplink/clientscripts/mp/createfx/mp_uplink_fx.csc b/MP/Maps/Uplink/clientscripts/mp/createfx/mp_uplink_fx.csc new file mode 100644 index 0000000..ed1f02d --- /dev/null +++ b/MP/Maps/Uplink/clientscripts/mp/createfx/mp_uplink_fx.csc @@ -0,0 +1,4330 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_os" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3087.23, 1201.53, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_os" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 4112.75, -1202.05, 335.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_os" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3063.42, -3473.09, 352 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_os" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1724.52, -1103.73, 178.979 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_neg_os" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3087.23, 1201.53, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_neg_os" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 4112.75, -1202.05, 335.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_neg_os" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3063.42, -3473.09, 352 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_neg_os" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1724.52, -1103.73, 178.979 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3235.78, 1891.73, 288.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3524.17, 1282.11, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3187.27, 1200.69, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2469.29, 1260.57, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2818.94, 1134.75, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3583.66, 986.25, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3345.38, 981.247, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3074.21, 932.518, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2783.32, 899.299, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2352.24, 1035.47, 320 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2554.78, 874.469, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2918.6, 1955, 288.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2617.7, 1846.38, 288.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2495.7, 1673.11, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2497.06, 1558.67, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3092.52, 1379.85, 335.125 ); + ent.v["angles"] = ( 296, 270, 90 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3167.84, 1378.01, 334.261 ); + ent.v["angles"] = ( 296, 270, 90 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3239.42, 1381.56, 335.931 ); + ent.v["angles"] = ( 296, 270, 90 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2817.1, 1787.71, 352.125 ); + ent.v["angles"] = ( 270, 356.32, 3.68219 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3377.37, 1666.21, 296.815 ); + ent.v["angles"] = ( 277, 90, -90 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3375.89, 1553.32, 310.961 ); + ent.v["angles"] = ( 277, 90, -90 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3856.19, 948.704, 304.323 ); + ent.v["angles"] = ( 278.062, 352.869, 7.13089 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3888.42, 790.33, 298.946 ); + ent.v["angles"] = ( 279.483, 341.714, 18.5216 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3875.64, 694.651, 296.096 ); + ent.v["angles"] = ( 279.039, 6.61275, -6.06275 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3889.02, 609.307, 297.574 ); + ent.v["angles"] = ( 275.993, 0.156288, 0.157217 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3710.8, 375.639, 290.961 ); + ent.v["angles"] = ( 271, 270.005, 89.9947 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3860.81, 467.664, 295 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 272.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3708.93, 162.401, 282.648 ); + ent.v["angles"] = ( 271, 179.989, 179.976 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3679.6, -19.0127, 290.334 ); + ent.v["angles"] = ( 273.6, 56.1405, -56.4022 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3029.78, 685.631, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3069.58, 506.669, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3115.37, 291.434, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2945.86, -26.6236, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3550.88, -259.095, 320 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2943.28, -255.755, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3123.25, -256.32, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3313.52, -241.425, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3136.04, -109.121, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3099.39, 138.382, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3017.19, 186.914, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3098.63, -4.73839, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2612.01, -20.6763, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2758.39, 76.3419, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2753.33, -16.836, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3789.31, -263.511, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3847.64, -446.28, 319.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3852.47, -536.307, 319.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3849.31, -633.662, 319.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3939.55, -626.792, 319.125 ); + ent.v["angles"] = ( 270, 353.157, 59.8427 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4023.38, -801.844, 319.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4014.17, -940.094, 319.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3972.33, -712.302, 319.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4005.35, -1034.7, 319.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3453.43, -327.662, 456.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3373.04, -327.588, 456.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3799.55, -813.546, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3790.38, -982.76, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3718.98, -1358.11, 456.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3719.62, -1267.33, 456.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3719.93, -1176.53, 456.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3719.77, -702.075, 456.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3721.31, -524.952, 456.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3720.06, -433.124, 456.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4014.53, -1126.9, 314.625 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4014.43, -1181.33, 314.625 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4015.93, -1237.73, 314.625 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4011.77, -1280.73, 314.625 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4014.11, -1333.41, 314.625 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4013.85, -1388.29, 314.625 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3911.11, -1573.07, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3555.62, -1591.67, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3737.09, -1613.83, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3707.3, -1855.38, 367.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3706.79, -1986.15, 367.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3708.63, -2067.76, 367.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3682.24, -2179.69, 367.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3635.2, -2319.23, 367.625 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3708.5, -1918.45, 367.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3410.64, -1923.07, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3065.06, -1640.67, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2735.89, -2267.72, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3079.12, -2235.35, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2726.96, -1711.74, 457.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3140.36, -1850.68, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3223.68, -2026.12, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3261.83, -1861.82, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2664.01, -2014.14, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3292.53, -2411.98, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3123.35, -2499.15, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3719.45, -613.46, 456.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3720.73, -1088.77, 456.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3122.62, -2673.1, 456 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3286.09, -2624.23, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3301.87, -2927.35, 416.687 ); + ent.v["angles"] = ( 283.296, 288.275, 82.0096 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2843.71, -3257.66, 353 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3168.83, -3357.95, 352.7 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3539.02, -3387.06, 352 ); + ent.v["angles"] = ( 270, 345.714, 59.2841 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3387.14, -3161.83, 364.238 ); + ent.v["angles"] = ( 276, 310, 71 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3006.54, -2975.48, 371.784 ); + ent.v["angles"] = ( 280.813, 261.713, -98.8559 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2804.61, -2857.58, 373.235 ); + ent.v["angles"] = ( 280.627, 200.394, -38.2626 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2445.5, -2833.93, 351.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2450.68, -2731.92, 351.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2446.17, -2620.92, 351.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2449.01, -2502.86, 351.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2446.2, -2391.78, 351.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2560.28, -2833.6, 353.177 ); + ent.v["angles"] = ( 270, 359.951, 0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2658, -2838.55, 354.2 ); + ent.v["angles"] = ( 272.234, 204.524, 153.564 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3109.89, -3148.96, 353.792 ); + ent.v["angles"] = ( 271.951, 252.322, 133.786 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2411.7, -2233.17, 391.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2336.62, -2235.99, 391.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2166.1, -77.9054, 199.079 ); + ent.v["angles"] = ( 283, 138, -92 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2260.05, -191.682, 259.305 ); + ent.v["angles"] = ( 276.585, 116.5, -87.5666 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1613.97, -868.628, 87.849 ); + ent.v["angles"] = ( 271, 270.002, 89.9982 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1573.17, -961.668, 89.6629 ); + ent.v["angles"] = ( 274.467, 26.3489, -26.5931 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1572.37, -1065.19, 97.0635 ); + ent.v["angles"] = ( 277.262, 74.0182, -73.8785 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1646.34, -953.694, 93.1614 ); + ent.v["angles"] = ( 277.072, 134.737, -135.113 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1654.62, -786.629, 89.1833 ); + ent.v["angles"] = ( 271, 270.002, 89.9982 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1492.99, -876.047, 89.8954 ); + ent.v["angles"] = ( 291.023, 357.397, 2.78851 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1577.92, -801.562, 88.5811 ); + ent.v["angles"] = ( 272.236, 296.57, 63.4299 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1594.79, -1156.01, 110.308 ); + ent.v["angles"] = ( 279.047, 80.4123, -66.2089 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1669.24, -1111.69, 104.485 ); + ent.v["angles"] = ( 276.686, 124.846, -110.168 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1671.54, -1225.24, 123.552 ); + ent.v["angles"] = ( 281.4, 96.0336, -81.5713 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1887.8, -131.782, 124.961 ); + ent.v["angles"] = ( 274.471, 243.413, 135.516 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1735.74, -501.35, 99.6427 ); + ent.v["angles"] = ( 274.299, 272.897, 106.15 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1713.27, -663.278, 90.5723 ); + ent.v["angles"] = ( 276.082, 189.428, 170.52 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1688.98, -339.767, 115.081 ); + ent.v["angles"] = ( 275, 323.161, 36.8734 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1732.64, -262.963, 123.818 ); + ent.v["angles"] = ( 273.446, 302.674, 26.1758 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1772.54, -187.08, 126.675 ); + ent.v["angles"] = ( 279.815, 301.542, 20.1458 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1768.61, -309.726, 115.019 ); + ent.v["angles"] = ( 279.497, 213.441, 125.974 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1818.88, -234.87, 122.392 ); + ent.v["angles"] = ( 271.433, 58.9327, -78.6734 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2015.95, 2.04534, 135.971 ); + ent.v["angles"] = ( 275.733, 156.224, -175.946 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1893.44, -486.273, 99.9823 ); + ent.v["angles"] = ( 271.766, 147.015, -166.751 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1531.69, -1250.91, 177.847 ); + ent.v["angles"] = ( 324.024, 38.4498, -58.9118 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1560.63, -1388.53, 207.619 ); + ent.v["angles"] = ( 312.557, 5.68326, 43.4902 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2132.23, 658.324, 189.843 ); + ent.v["angles"] = ( 286.425, 278.352, 73.8569 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2121.61, 604.716, 177.43 ); + ent.v["angles"] = ( 280.768, 259.842, 91.8343 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2115.3, 553.615, 167.628 ); + ent.v["angles"] = ( 277.79, 266.523, 85.2121 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2114.16, 523.587, 153.082 ); + ent.v["angles"] = ( 277.79, 266.523, 85.2121 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2107.01, 476.656, 143.141 ); + ent.v["angles"] = ( 279.043, 292.771, 59.2362 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2088.2, 422.676, 132.894 ); + ent.v["angles"] = ( 282.365, 313.242, 39.1052 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2088.69, 374.004, 130.359 ); + ent.v["angles"] = ( 274.338, 97.58, -107.369 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2092.69, 298.894, 126.662 ); + ent.v["angles"] = ( 275.73, 263.353, 77.2518 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2070.19, 212, 128.976 ); + ent.v["angles"] = ( 273.303, 73.1266, -83.4922 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1981.57, 261.369, 111.934 ); + ent.v["angles"] = ( 293.945, 356.158, -8.97631 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2128.6, 785.538, 222.722 ); + ent.v["angles"] = ( 293.894, 247.964, 148.586 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2151.39, 874.1, 271.302 ); + ent.v["angles"] = ( 294.448, 233.341, -168.06 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2132.79, 708.153, 198.57 ); + ent.v["angles"] = ( 279.771, 259.658, 91.9464 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2078.66, 843.37, 240.044 ); + ent.v["angles"] = ( 296.12, 252.133, 99.7416 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2007.14, 841.782, 235.83 ); + ent.v["angles"] = ( 295.764, 329.357, 49.3951 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2011.36, 969.641, 281.783 ); + ent.v["angles"] = ( 302.965, 311.179, 31.7985 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2157.38, 991.644, 306.45 ); + ent.v["angles"] = ( 285.024, 223.462, 118.112 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2201.35, 934.941, 301.709 ); + ent.v["angles"] = ( 287.112, 209.113, -172.022 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2092.12, 1005.95, 296.818 ); + ent.v["angles"] = ( 282.532, 241.259, 110.079 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2002.73, -231.271, 125.873 ); + ent.v["angles"] = ( 275.603, 286.402, 54.6416 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2057.06, -290.869, 113.887 ); + ent.v["angles"] = ( 275.603, 286.404, 55.6402 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1992.59, -369.705, 110.684 ); + ent.v["angles"] = ( 286.817, 299.003, 97.0871 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1937.7, -422.648, 102.641 ); + ent.v["angles"] = ( 284.835, 298.04, 98.014 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2068.15, -395.119, 110.55 ); + ent.v["angles"] = ( 279.235, 151.714, -115.962 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2118.42, -345.922, 117.847 ); + ent.v["angles"] = ( 280.369, 185.592, -148.356 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2018.44, -479.374, 114.535 ); + ent.v["angles"] = ( 280.345, 120.334, -84.7543 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1655.09, -436.894, 106.234 ); + ent.v["angles"] = ( 278.748, 311.623, 124.8 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1809.41, -392.022, 111.942 ); + ent.v["angles"] = ( 282.864, 242.751, -111.826 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1710.15, -1388.27, 172.457 ); + ent.v["angles"] = ( 289.11, 119.335, -99.0903 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1683.8, -1669.83, 221.487 ); + ent.v["angles"] = ( 302.566, 55.4783, -24.1213 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1626.37, -1570.24, 193.731 ); + ent.v["angles"] = ( 301.446, 50.2248, -19.6654 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1852.57, -1683.38, 274.033 ); + ent.v["angles"] = ( 287.995, 130.87, -80.1598 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2032.19, -1784.49, 335.841 ); + ent.v["angles"] = ( 286.307, 166.537, -78.0757 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2210.71, -1743.75, 392.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2216.58, -1793.65, 391.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2207.87, -1836.18, 392.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2168.25, -1711.42, 384.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2166.38, -1767.27, 384.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2171.22, -1827.9, 384.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2173.55, -1872.45, 384.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2105.82, -1728.07, 365.321 ); + ent.v["angles"] = ( 300, 180, 180 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2112.01, -1899.42, 363.152 ); + ent.v["angles"] = ( 297.358, 199.842, 162.932 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2115.42, -1801.51, 369.679 ); + ent.v["angles"] = ( 299.062, 180.022, -179.326 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2186.3, -1929.14, 372.242 ); + ent.v["angles"] = ( 281.294, 252.423, 112.833 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1760.69, -1566.57, 248.219 ); + ent.v["angles"] = ( 330.763, 40.4594, -18.9409 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1804.06, -1551.37, 234.26 ); + ent.v["angles"] = ( 288.518, 149.089, -116.897 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2235.76, -2212.58, 371.46 ); + ent.v["angles"] = ( 285.102, 167.067, -130.782 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2214.18, -2149.35, 362.599 ); + ent.v["angles"] = ( 287.79, 185.28, 174.928 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2217.25, -2079.91, 364.633 ); + ent.v["angles"] = ( 285.784, 174.869, -175.659 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2209.48, -2031.73, 362.52 ); + ent.v["angles"] = ( 286.738, 199.827, 160.352 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2154.13, -1963.72, 364.575 ); + ent.v["angles"] = ( 285.8, 201.062, 159.166 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3210.67, 795.412, 569.936 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3233.64, 147.105, 562.289 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2288.2, 828.515, 456.209 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2241.42, 341.138, 530.181 ); + ent.v["angles"] = ( 14, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2261.71, 550.367, 532.696 ); + ent.v["angles"] = ( 8, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2108.32, -739.403, 468.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2096.29, -1059.55, 470.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2229.16, 101.232, 282.088 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1562.68, -649.563, 165.623 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1491.8, -1340, 242.044 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2507, -2470.8, 601.272 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3330.63, -1625.15, 562.022 ); + ent.v["angles"] = ( 359, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3746.36, 1416.94, 570.771 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3886.46, 482.37, 302.573 ); + ent.v["angles"] = ( 359, 216, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3812.7, -146.868, 403.947 ); + ent.v["angles"] = ( 357, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3453.04, -2618.88, 627.36 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3683.74, -2963.74, 567.143 ); + ent.v["angles"] = ( 0, 182.998, -1 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2550.15, -2995.04, 456.625 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3001.02, -2667.14, 619.226 ); + ent.v["angles"] = ( 341, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2841.15, -2021.7, 590.125 ); + ent.v["angles"] = ( 358, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3298.04, 1520.3, 507.686 ); + ent.v["angles"] = ( 356, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2504.68, -216.337, 508.125 ); + ent.v["angles"] = ( 358, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1919.92, -803.211, 265.391 ); + ent.v["angles"] = ( 0.994673, 174, -0.104553 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1899.29, -1356.46, 337.359 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_lightning_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 21039.8, -40047.4, 18228.9 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 131.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 7001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_lightning_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -13763.7, -58199.1, 16443.7 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 7002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_lightning_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -31130.8, 44879.9, 18839.3 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 307.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 7003; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_lightning_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -58515, 907.609, 42269.4 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 18.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 7004; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3652.63, -1041.24, 518.392 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5005; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3652.63, -1182.69, 520.432 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5006; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3652.63, -750.81, 517.562 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5004; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3652.63, -605.924, 517.272 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5003; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2815.15, 584.929, 596.125 ); + ent.v["angles"] = ( 90, 0, -1 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2818.54, 326.218, 596.125 ); + ent.v["angles"] = ( 90, 0, 1 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2823.95, 585.55, 596.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2818.25, 328.157, 596.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3151.31, -771.116, 758.154 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5007; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3152.57, -893.313, 758.434 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5008; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3150.76, -1018.36, 757.994 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5009; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2981.49, -770.546, 720.819 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5010; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2981.55, -899.381, 720.832 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5011; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2986.09, -1019.8, 721.831 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5012; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2800.49, -772.68, 681.024 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5013; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2804.65, -895.649, 681.939 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5014; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2806.05, -1017.29, 682.245 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5015; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2622.56, -775.869, 641.903 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5016; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2625.82, -894.455, 642.62 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5017; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2620.73, -1018.28, 641.502 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5018; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2300.61, -1027.73, 590.125 ); + ent.v["angles"] = ( 270, 21.1127, 158.887 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5019; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2298.93, -1182.6, 590.125 ); + ent.v["angles"] = ( 270, 21.1127, 158.887 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5020; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2201, -458.865, 518.277 ); + ent.v["angles"] = ( 334, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5021; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2200.15, -761.454, 516.57 ); + ent.v["angles"] = ( 334, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5022; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2198.94, -894.747, 514.15 ); + ent.v["angles"] = ( 334, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5023; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2198.53, -1030.06, 513.336 ); + ent.v["angles"] = ( 334, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5024; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2200.73, -1184.52, 517.736 ); + ent.v["angles"] = ( 334, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5025; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2199.64, -1326.53, 515.56 ); + ent.v["angles"] = ( 334, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5026; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2170, -475.943, 380.123 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5027; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2042.04, -854.669, 380.014 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5028; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2042.04, -935.608, 380.211 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5028; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2170, -1309.49, 380.031 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5029; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_window_gust" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3727.25, -1167.66, 545.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6006; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_window_gust" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3726.61, -1036.29, 544.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6005; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_window_gust" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3722.78, -760.999, 544.088 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6004; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_window_gust" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3723.43, -601.983, 544.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6003; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3155.96, -1018.32, 759.096 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6009; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3167.06, -894.453, 761.624 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6008; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3169.1, -772.392, 762.131 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6007; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2977.96, -772.326, 720.036 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6010; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2978.77, -897.002, 720.221 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6011; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2979.64, -1014.98, 720.386 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6012; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2808.89, -1015.73, 682.833 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6015; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2808.67, -892.727, 682.838 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6014; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2811.45, -774.519, 683.433 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6013; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2631.9, -777.514, 643.957 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6016; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2631.86, -899.159, 643.948 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6017; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2628.45, -1021.75, 643.198 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6018; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2305.53, -1027.74, 588.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6019; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2304.22, -1175.28, 588.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6020; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2827.57, 323.755, 320 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2792.78, 302.703, 320 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2807.34, 607.117, 320 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2772.56, 586.064, 320 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3125.05, -772.312, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6007; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3129.18, -904.968, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6008; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3118.34, -1041.52, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6009; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2952.53, -758.719, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6010; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2950.78, -899.116, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6011; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2945.69, -1056.01, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6012; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2807.33, -753.84, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6013; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2847.38, -880.752, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6014; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2803.71, -1050.76, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6015; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2611.65, -784.761, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6016; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2578.19, -915.489, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6017; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2600.02, -1047.13, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6018; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2288.24, -1178.19, 320.125 ); + ent.v["angles"] = ( 270, 7.12502, 113.875 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6020; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2294.41, -1042.77, 320.125 ); + ent.v["angles"] = ( 270, 7.12502, 113.875 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6019; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3588.44, -1184.34, 457.125 ); + ent.v["angles"] = ( 270, 359.851, 179.149 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6006; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3598.33, -1043.36, 456.125 ); + ent.v["angles"] = ( 270, 359.851, 179.149 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6005; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3603.47, -765.402, 456.125 ); + ent.v["angles"] = ( 270, 359.851, 179.149 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6004; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3595.91, -607.819, 456.125 ); + ent.v["angles"] = ( 270, 359.851, 179.149 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6003; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3446.51, 1265.7, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3288.33, 1013.08, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2553.1, 1210.46, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2293.53, 1010.91, 319.806 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2732.3, 1867.09, 288.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3181.28, 1898.16, 288.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3372.71, -245.821, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 167.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3078.48, 62.8625, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 4046.05, -899.27, 319 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3953.91, -1635.27, 319 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3746.81, -1588.63, 320 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3446.92, -1904.83, 456.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3160.87, -1653.54, 456 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3173.61, -2256.4, 456 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2999.53, -2532.03, 620.261 ); + ent.v["angles"] = ( 338, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2786.09, -2647.43, 633.113 ); + ent.v["angles"] = ( 3, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2784.32, -2512.32, 633.513 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2641.83, 1504.47, 563.642 ); + ent.v["angles"] = ( 356, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2440.64, 1227.82, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 349.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2870.7, 681.959, 623.992 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2874.59, 225.487, 623.995 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2741.77, -241.466, 508.001 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3498.66, -309.091, 460.219 ); + ent.v["angles"] = ( 357, 358, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3677.5, -493.221, 685.248 ); + ent.v["angles"] = ( 356.002, 357.995, 0.139827 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3656.42, -736.87, 688.767 ); + ent.v["angles"] = ( 356.002, 357.995, 0.139827 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3663.41, -1323.71, 686.084 ); + ent.v["angles"] = ( 356.002, 357.995, 0.139827 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3667.51, -1040.32, 682.723 ); + ent.v["angles"] = ( 356.002, 357.995, 0.139827 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3868.62, -801.021, 457.125 ); + ent.v["angles"] = ( 357, 358, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3868.49, -988.623, 460.125 ); + ent.v["angles"] = ( 354, 358, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3625.4, -1628.77, 320 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3872.03, -1524.73, 320 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3678.5, -287.467, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3482.64, -1867.04, 456.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3352.4, -2356.24, 456 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3003.48, -2299.03, 456 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2590.87, -2269.11, 457.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2655.66, -1649.01, 456 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2901.48, -1681.08, 456 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3102.71, -1915.32, 456 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3456.13, -2170.92, 598.262 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3010.28, -1960.8, 591.954 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2925.41, -2483.73, 641.835 ); + ent.v["angles"] = ( 351, 358, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2879.08, -2727.84, 633.593 ); + ent.v["angles"] = ( 350.006, 0, -0.352578 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2862.04, -3293.85, 353 ); + ent.v["angles"] = ( 0, 359.97, -0.347226 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2763.53, -2895.95, 361.441 ); + ent.v["angles"] = ( 347.006, 0, -0.356352 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3180.76, -2887.53, 438.385 ); + ent.v["angles"] = ( 355.968, 192.344, -9.44461 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3249.73, -3057.78, 391.704 ); + ent.v["angles"] = ( 354.707, 202.739, -10.0294 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2491.13, -2050.51, 710.203 ); + ent.v["angles"] = ( 357.006, 359.988, -0.347701 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2487.9, -1804.57, 706.202 ); + ent.v["angles"] = ( 354.006, 0, -0.349134 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2260.4, -201.449, 262.592 ); + ent.v["angles"] = ( 359.989, 171.004, -0.208784 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2160.55, -82.9182, 197.975 ); + ent.v["angles"] = ( 356.993, 171.003, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3866.21, 1353.18, 563.345 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1886.41, -1720.6, 291.672 ); + ent.v["angles"] = ( 345.215, 330.096, 0.110719 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1996.19, -1901.78, 323.575 ); + ent.v["angles"] = ( 344.09, 351.76, 1.71682 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1466.62, -1386.24, 262.573 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1559.7, -672.363, 158.596 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2105.41, 560.552, 162.845 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2091.28, 350.864, 129.82 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2106.43, 602.916, 175.598 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2091.49, 354.395, 129.804 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2897.99, 1401.18, 576.357 ); + ent.v["angles"] = ( 356, 358, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3307, 1464.03, 514.125 ); + ent.v["angles"] = ( 359, 358, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_sun1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -226800, -189884, 52587.9 ); + ent.v["angles"] = ( 270, 357.138, 86.8624 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_pipe_gutter_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2965.98, 173.107, 323.125 ); + ent.v["angles"] = ( 273.143, 342.78, -75.8207 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_pipe_gutter_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3082.87, 1761.98, 289.243 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_pipe_gutter_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3512.1, -347.475, 322.029 ); + ent.v["angles"] = ( 271.414, 134.994, -135.002 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_pipe_gutter_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3111.31, 802.297, 321.125 ); + ent.v["angles"] = ( 270, 0.190965, -0.190966 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_pipe_gutter_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2672.68, 801.287, 321.737 ); + ent.v["angles"] = ( 273.013, 3.31781, -8.31019 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_pipe_gutter_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2579.83, -2178.28, 457.473 ); + ent.v["angles"] = ( 271.035, 179.961, 90.0203 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3289.36, -5042.63, 1165.68 ); + ent.v["angles"] = ( 360, 5, -2 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2610.55, 75.2607, 430.081 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2714.17, 815.818, 435.938 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2544.72, 1336.9, 500.634 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3314.69, 865.11, 518.104 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3511.42, 953.866, 520.042 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3780.82, 853.044, 539.584 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3694.58, 846.783, 629.209 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2833.24, 806.486, 517 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2523.96, 813.021, 587.368 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy_lng" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2201.89, 573.124, 511.436 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy_lng" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2200.94, 345.845, 509.457 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2456.86, -2517.19, 571.507 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3029.04, -2697.65, 580.23 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2596.93, -2120.95, 628.675 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2602.11, -1894.12, 627.461 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2833.59, 104.144, 516.747 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2487.06, 96.0294, 587.434 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3708.88, 503.941, 536.4 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_pipe_gutter_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2539.21, 1526.71, 324.371 ); + ent.v["angles"] = ( 274.01, 174.034, -86.01 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2974.1, 659.42, 515.983 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2974.97, 208.728, 517.813 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3741.04, -1165.87, 664.186 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3738.96, -784.9, 661.706 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3738.97, -479.192, 665.19 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3648.14, 1539.94, 318 ); + ent.v["angles"] = ( 270, 356.479, -50.4785 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3779.86, 1606.83, 318 ); + ent.v["angles"] = ( 270, 357.274, -84.2737 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3895.99, 1589.47, 318 ); + ent.v["angles"] = ( 270, 355.236, -111.236 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3988.26, 1515.23, 318 ); + ent.v["angles"] = ( 270, 2.38594, -149.386 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4023.11, 1373.69, 318 ); + ent.v["angles"] = ( 270, 0, 165 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3968.89, 1249.47, 318 ); + ent.v["angles"] = ( 270, 0, 131 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3845.36, 1178.36, 318 ); + ent.v["angles"] = ( 270, 358.091, 107.909 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3180.26, 1412.88, 490.111 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3208.49, 1742.55, 486.425 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3028.84, -2481.21, 579.955 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2599.58, -1726.28, 627.684 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3511.31, -318.887, 450.941 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3738.85, -1335.56, 662.027 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2172.25, -2081.71, 681.754 ); + ent.v["angles"] = ( 357, 179, 0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_waterfall01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1838.81, 471.932, -170.716 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_waterfall02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2782.82, 450.194, 281.481 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.61, -433.509, 561.724 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2781.73, -223.881, 439.554 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3017.24, -1394.9, 563.634 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3632.96, -893.265, 575.628 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3520.39, -1374.8, 441.174 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3888.8, -896.447, 440.999 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2624.4, 150.528, 437.838 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2751.65, 762.975, 438.071 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2987.72, -2551.74, 564.396 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2656.23, -2458.26, 564.505 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3416.4, -536.09, 580.947 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.99, -584.489, 580.943 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3416.63, -632.75, 580.941 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.71, -680.362, 580.943 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.59, -728.113, 580.953 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.99, -776.38, 580.955 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.23, -824.431, 580.955 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.56, -968.144, 580.943 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.96, -1015.96, 580.952 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.84, -1063.94, 580.952 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.67, -1112.11, 580.944 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3416.31, -1160.46, 580.953 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.21, -1208, 580.942 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.29, -1256.1, 580.941 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3560.36, -536.039, 580.956 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3559.88, -583.886, 580.956 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3559.6, -632.116, 580.952 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3559.13, -680.421, 580.95 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3560, -728.238, 580.949 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3559.53, -776.009, 580.945 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3560.38, -823.971, 580.944 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3488.03, -463.266, 580.954 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3487.84, -1327.34, 580.951 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3344.3, -1327.99, 580.957 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3295.31, -1328.12, 580.955 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3247.91, -1328, 580.941 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3199.75, -1328.33, 580.943 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3152.13, -1327.91, 580.945 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2864.04, -1328.12, 580.946 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2912.21, -1327.8, 580.958 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2960.02, -1328.16, 580.94 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3008.39, -1327.95, 580.949 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3055.99, -1328.06, 580.952 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3103.77, -1328.04, 580.941 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3618.15, -966.04, 445.95 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3617.09, -1109.75, 445.96 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3617.81, -1158.28, 445.949 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3617.51, -1205.93, 445.94 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3616.61, -1254.04, 445.95 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3737.07, -893.996, 445.947 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3689.14, -894.096, 445.955 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_pipe_gutter_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3440.57, -1437.51, 320.125 ); + ent.v["angles"] = ( 270, 0, -179 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2057.54, 890.7, 952.498 ); + ent.v["angles"] = ( 270, 0, 1 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1907.61, -311.076, 1493.03 ); + ent.v["angles"] = ( 270, 0, 1 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2361.04, 312.741, 500.362 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3193.93, 394.877, 454.961 ); + ent.v["angles"] = ( 41, 180, -180 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2590.07, 1374.54, 463.373 ); + ent.v["angles"] = ( 48, 225, 0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2644.48, 1318.85, 464.697 ); + ent.v["angles"] = ( 52, 225, 0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3326.65, 845.763, 446.961 ); + ent.v["angles"] = ( 42.9959, 90.2672, 0.489776 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3660.94, -458.65, 568.145 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 42.0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3661.15, -1341.74, 567.816 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 42.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3520.72, -1424.37, 432.098 ); + ent.v["angles"] = ( 41, 271, 0 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3461.96, -1094.02, 416.264 ); + ent.v["angles"] = ( 43, 271, 0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3151.95, 1468.03, 484.625 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3152.25, 1584.34, 484.625 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3153.03, 1683.81, 484.625 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3329.69, 1676.98, 484.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3328.03, 1565.2, 483.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3329.39, 1479.34, 483.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2960.56, 1683.07, 483.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2959.44, 1467.28, 483.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2960.23, 1568.43, 483.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2823.39, -225.612, 432.118 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2949.01, 1533.92, 461.267 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 42.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2351.88, 608.315, 273.373 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2351.88, 455.895, 273.806 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2351.88, 303.208, 274.522 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2354.88, 600.976, 499.639 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2354.88, 505.95, 501.692 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2354.88, 404.029, 501.749 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2354.88, 310.087, 501.633 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2357.13, 309.969, 499.584 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2357.13, 405.538, 501.118 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2357.13, 508.354, 501.64 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2357.13, 600.27, 500.057 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2784.96, 1740.32, 471.764 ); + ent.v["angles"] = ( 43, 90, 0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3919.8, -894.684, 432.555 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 42.0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3794.66, -1218.66, 431.818 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 42.0 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2302.97, -371.047, 429.001 ); + ent.v["angles"] = ( 42.6, 90, 0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2753.74, 795.268, 441.295 ); + ent.v["angles"] = ( 16, 90, 0 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3326.49, 855.314, 454.848 ); + ent.v["angles"] = ( 16, 90, 0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2562.42, 1327.05, 435.508 ); + ent.v["angles"] = ( 30, 226, 0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2607.56, 1273.2, 420.677 ); + ent.v["angles"] = ( 30, 226, 0 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2782.23, 1751.44, 482.413 ); + ent.v["angles"] = ( 19, 90, 0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2309.29, -358.84, 433.584 ); + ent.v["angles"] = ( 16, 90, 1 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3790.87, -535.481, 436.573 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 42.0 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3582.67, -2141.47, 476.36 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 42.0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3711.34, 514.207, 447.481 ); + ent.v["angles"] = ( 43, 270, 0 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2519.26, -2406.24, 597.177 ); + ent.v["angles"] = ( 11.9976, 89.9281, 0 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3544.36, -3507.43, 449.929 ); + ent.v["angles"] = ( 3.01821, 59.571, -1.81287 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3553.52, -3500.25, 476.533 ); + ent.v["angles"] = ( 354.023, 59.8561, -1.82026 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3511.38, -1436.38, 440.787 ); + ent.v["angles"] = ( 9, 270, 0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3800.4, -1216.48, 438.561 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 19.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3931.09, -888.366, 439.714 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 19.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3805.88, -533.379, 446.894 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 19.0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3704.72, 493.377, 448.333 ); + ent.v["angles"] = ( 21, 270, 0 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3177.56, 392.591, 465.691 ); + ent.v["angles"] = ( 20.9699, 182.213, 1.15094 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2835.92, -224.335, 439.901 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 21.0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3407.11, -368.089, 568.58 ); + ent.v["angles"] = ( 43.9, 90.1386, 0.120855 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2990.87, -3629.94, 552.665 ); + ent.v["angles"] = ( 23.9966, 91.0931, 0.392252 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3593.98, -2141.16, 482.712 ); + ent.v["angles"] = ( 18.973, 3.17252, 1.0324 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_window_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2824.75, 772.625, 503.709 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_window_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2549.72, 772.518, 502.413 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_window_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2940.63, 645.311, 503.195 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_window_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2940.99, 241.255, 501.32 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_window_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2820.88, 138.39, 503.01 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_window_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2544.78, 138.375, 503.609 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_window_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2940.34, 364.312, 500.931 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2948.04, -1440.63, 572.801 ); + ent.v["angles"] = ( 18.997, 271.058, 0.344309 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2941.81, -1423.3, 567.642 ); + ent.v["angles"] = ( 42, 270, -1 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_waterfall_splash_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2405.75, 573.203, 71.1382 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 222.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3661.97, -894.547, 564.731 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 39.9 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_window_ray_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2826.26, 772.625, 505.195 ); + ent.v["angles"] = ( 26.9647, 87.6397, -1.42039 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_window_ray_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2551.86, 772.625, 505.559 ); + ent.v["angles"] = ( 27.9847, 88.7434, -0.937363 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_window_ray_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2940.63, 647.096, 506.251 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 24.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_window_ray_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2940.63, 297.078, 500.199 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 24.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_window_ray_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2824.44, 138.375, 503.259 ); + ent.v["angles"] = ( 25, 268, 0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_window_ray_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2545.44, 137.779, 500.514 ); + ent.v["angles"] = ( 26, 268, 0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_waterfall_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2391.66, 611.776, 103.031 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 218.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_waterfall_splash_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2396.57, 253.641, 76.3186 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_waterfall_splash_bttm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2235.5, 374.268, -110.141 ); + ent.v["angles"] = ( 357, 168, 0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_waterfall_splash_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1306.79, 568.701, -676.571 ); + ent.v["angles"] = ( 344.867, 134.648, 9.63852 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_waterfall_splash_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1301.05, 579.184, -666.672 ); + ent.v["angles"] = ( 344.835, 214.428, -0.969892 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2902.42, 264.533, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2902.38, 360.376, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2902.38, 456.675, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2902.21, 648.517, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2880.29, 734.71, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2879.96, 174.158, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2783.01, 733.56, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2688.09, 733.84, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2591.59, 733.826, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2495.45, 733.606, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2495.34, 173.999, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2590.97, 173.697, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2784.74, 174.146, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3537.28, -3526.41, 442.718 ); + ent.v["angles"] = ( 38.3295, 47.781, 7.65557 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3523.3, -3514.35, 442.871 ); + ent.v["angles"] = ( 39.0145, 57.0682, 13.484 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3543.61, -3519.54, 465.513 ); + ent.v["angles"] = ( 18.4776, 52.0136, 11.0123 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2517.22, -2421.74, 586.074 ); + ent.v["angles"] = ( 10, 95, 0 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2701.04, -2778.22, 584.774 ); + ent.v["angles"] = ( 13.9913, 269.061, 0.498551 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2516.71, -2778.17, 585.529 ); + ent.v["angles"] = ( 13.9913, 269.061, 0.498551 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2984.72, -3641.05, 550.556 ); + ent.v["angles"] = ( 42.87, 89.5384, -3.7218 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1872.9, -228.446, 314.628 ); + ent.v["angles"] = ( 14.9977, 114.965, -0.267934 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1738.99, -303.484, 315.212 ); + ent.v["angles"] = ( 15.9976, 114.96, -0.26924 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1793.12, -417.802, 315.731 ); + ent.v["angles"] = ( 14.9977, 296.035, 0.267942 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1929.44, -339.026, 315.253 ); + ent.v["angles"] = ( 14.9977, 296.035, 0.267942 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2943.06, -1812.14, 898.594 ); + ent.v["angles"] = ( 82, 269, 0 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2944.74, -1682.84, 898.483 ); + ent.v["angles"] = ( 84, 89, 180 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3007.78, -1748.38, 898.422 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 81.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2880.25, -1745.33, 898.433 ); + ent.v["angles"] = ( 85, 180, -180 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1874.11, -215.119, 323.655 ); + ent.v["angles"] = ( 15, 116, 0 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1746.59, -291.645, 328.851 ); + ent.v["angles"] = ( 15, 116, 0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1798.97, -429.447, 325.798 ); + ent.v["angles"] = ( 15, 279, 0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1934.31, -354.322, 328.017 ); + ent.v["angles"] = ( 11.4846, 294.293, 3.91956 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2750.86, 784.498, 432.981 ); + ent.v["angles"] = ( 40.5918, 91.3119, 0.940854 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2878.58, -1743.57, 901.234 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 87.0 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2944.42, -1811.47, 898.517 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 87.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3009.25, -1747.08, 898.626 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 87.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2946.59, -1680.37, 898.393 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 87.0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2488.4, -2474.09, 570.393 ); + ent.v["angles"] = ( 31.951, 178.536, -1.12694 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2487.37, -2728.05, 571.976 ); + ent.v["angles"] = ( 40.7852, 180.079, 0.196099 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3140.54, -1068.69, 778.076 ); + ent.v["angles"] = ( 32.949, 66.5757, -41.0534 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2960.64, -1073.55, 750.639 ); + ent.v["angles"] = ( 32.949, 66.5757, -41.0534 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2787.47, -1082.96, 718.765 ); + ent.v["angles"] = ( 32.949, 66.5757, -41.0534 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2572.65, -1044.42, 664.627 ); + ent.v["angles"] = ( 33.1569, 63.0048, 2.99854 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3149.58, -911.372, 773.073 ); + ent.v["angles"] = ( 32.949, 66.5757, -41.0534 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2969.56, -938.68, 754.46 ); + ent.v["angles"] = ( 32.949, 66.5757, -41.0534 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2786.79, -931.982, 709.494 ); + ent.v["angles"] = ( 32.949, 66.5757, -41.0534 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2800.86, -809.553, 710.896 ); + ent.v["angles"] = ( 32.949, 66.5757, -41.0534 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2599.22, -954.256, 686.9 ); + ent.v["angles"] = ( 33.1479, 56.4605, 19.7349 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2010.45, -910.178, 394.208 ); + ent.v["angles"] = ( 20.0221, 38.5956, -173.608 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2168.04, -942.698, 504.532 ); + ent.v["angles"] = ( 20.0221, 38.5956, -163.608 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2173.29, -795.487, 520.607 ); + ent.v["angles"] = ( 20.0221, 38.5956, -160.608 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_lg_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2168.17, -1077.79, 543.967 ); + ent.v["angles"] = ( 20.0221, 38.5956, -160.608 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_lg_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2194.26, -1210.9, 556.544 ); + ent.v["angles"] = ( 20.0221, 38.5956, 169.392 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_lg_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2200.12, -1334.96, 523.961 ); + ent.v["angles"] = ( 20.0221, 38.5956, -160.608 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2189.32, -891.1, 492.362 ); + ent.v["angles"] = ( 20.0221, 38.5956, 8.39143 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2193.02, -762.365, 499.763 ); + ent.v["angles"] = ( 20.0221, 38.5956, 8.39143 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_lg_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2177.44, -1021.97, 523.211 ); + ent.v["angles"] = ( 20.022, 38.5956, -1.60847 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_lg_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2164.83, -1185.87, 521.831 ); + ent.v["angles"] = ( 20.022, 38.5956, -1.60847 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_lg_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2184.51, -1323.61, 518.717 ); + ent.v["angles"] = ( 20.022, 38.5956, -1.60847 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3477.63, 744.377, 511.35 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3661.63, 744.133, 511.323 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3672.01, 571.437, 511.303 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3316.68, 743.289, 511.398 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3327.38, 565.932, 516.325 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3477.01, 571.949, 511.312 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2612.1, -1061.28, 655.885 ); + ent.v["angles"] = ( 31.0783, 65.7405, -162.496 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2619.65, -910.818, 655.989 ); + ent.v["angles"] = ( 31.0784, 65.7407, -159.496 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2786.84, -1077.98, 708.262 ); + ent.v["angles"] = ( 31.0784, 65.7407, -159.496 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2823.01, -955.32, 700.916 ); + ent.v["angles"] = ( 31.0784, 65.7407, -159.496 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2979.26, -1046.74, 723.032 ); + ent.v["angles"] = ( 31.0783, 65.7406, -155.496 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3004.75, -943.689, 753.719 ); + ent.v["angles"] = ( 31.0783, 65.7406, -155.496 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3134.99, -1055.34, 762.436 ); + ent.v["angles"] = ( 31.0783, 65.7405, -144.496 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2801.38, 1489.6, 523.002 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2800.69, 1520.69, 522.973 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2717.94, 1506.33, 486.462 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3358.52, -969.8, 569.052 ); + ent.v["angles"] = ( 11.099, 1.01578, 0.115354 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3229.48, 1066.06, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3263.01, -234.375, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3457.47, -3326.07, 358.594 ); + ent.v["angles"] = ( 359, 165, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2946.91, -3904.54, 722.786 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3558.05, -3930.7, 1058.46 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3612.05, -2744, 651.99 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2067.08, -1478.53, 441.206 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1903.98, -430.666, 104.366 ); + ent.v["angles"] = ( 356, 170, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2165.39, 1104.85, 329.093 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3544.4, -4948.18, 1251.61 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 6.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_generator_grays" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2688.72, 455.641, 442.073 ); + ent.v["angles"] = ( 90, 54.5764, -65.4236 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_generator_grays" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2688.43, 455.536, 441.807 ); + ent.v["angles"] = ( 90, 0, -67 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_waterfall_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1895.9, 565.687, -167.766 ); + ent.v["angles"] = ( 353, 174, 0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_waterfall_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1244.07, 576.876, -693.697 ); + ent.v["angles"] = ( 352.001, 156.99, 0.140534 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_waterfall_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2035.49, 402.351, -157.643 ); + ent.v["angles"] = ( 353, 174, 0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_waterfall_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1698.96, 605.132, -332.233 ); + ent.v["angles"] = ( 353.608, 198.16, -4.85904 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_waterfall_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1854.55, 364.939, -163.948 ); + ent.v["angles"] = ( 12.2948, 156.405, -3.17996 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3146.53, -1254.28, 754.635 ); + ent.v["angles"] = ( 356.034, 180.014, -0.259465 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3335.71, -1736.28, 491.454 ); + ent.v["angles"] = ( 359.034, 180, -0.258879 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2282.31, 19.375, 371.727 ); + ent.v["angles"] = ( 359, 165, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 4092.12, 25.6861, 227.641 ); + ent.v["angles"] = ( 299.012, 166.991, -1.483 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 4014.55, 1070.04, 147.36 ); + ent.v["angles"] = ( 293.795, 181.757, 2.51828 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 4034.02, -1979.78, 161.189 ); + ent.v["angles"] = ( 320.41, 195.549, 1.61723 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3930.39, -1243.23, 38.6635 ); + ent.v["angles"] = ( 283, 177, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3066.92, 1500.46, 562.823 ); + ent.v["angles"] = ( 340.888, 181.296, -5.4186 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3800.89, 1023.33, 307.845 ); + ent.v["angles"] = ( 356.292, 165.145, -2.06136 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3327.88, -2180.56, 659.855 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2730.34, 1019.05, 320.125 ); + ent.v["angles"] = ( 358.024, 7.0048, -0.313043 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2666.99, 13.2197, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3840.36, -886.492, 469.125 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3652.03, -1884.81, 367 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3584.13, -2329.73, 367.602 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2729.35, -2605.48, 674.223 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2939.2, -1258.96, 713.811 ); + ent.v["angles"] = ( 340, 358, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1844.41, -2066.98, 130.677 ); + ent.v["angles"] = ( 305.479, 33.6167, -5.24349 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1488.43, -85.7405, -94.2962 ); + ent.v["angles"] = ( 305.096, 324.366, 24.4648 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2148.81, 1365.86, 174 ); + ent.v["angles"] = ( 311.723, 301.631, 4.35761 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3479.9, 69.7155, 577.992 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3393.92, -2166.14, 640.596 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 354.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2898.54, -3727.83, 653.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2599.13, -3497.7, 438.397 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3273.14, -3189.64, 371.75 ); + ent.v["angles"] = ( 0, 359.97, -0.347226 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3250.31, -3669.57, 421 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 6.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1200.31, -797.216, -118.451 ); + ent.v["angles"] = ( 303.009, 1.71394, -1.07919 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2687.87, 174.395, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_neg_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 638.634, 961.201, 168.752 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_neg_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 5679.35, 993.631, 155.872 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_neg_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 735.897, -3419.67, 220.894 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_neg_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -26.8205, -1383.48, 242.054 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_neg_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2891.21, 3493.35, 248 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_neg_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 5009.29, -3159.64, 321.414 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_neg_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 6261.82, -1324.44, 236.601 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 638.634, 961.201, 168.752 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 5679.35, 993.631, 155.872 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 735.897, -3419.67, 220.894 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -26.8205, -1383.48, 242.054 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2891.21, 3493.35, 248 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 5009.29, -3159.64, 321.414 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_uplink_rain_med_fast_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 6261.82, -1324.44, 236.601 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3233.67, 1272.61, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 4.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3628.61, 1076.71, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2860.24, 1062.4, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3017.58, -2551.49, 567.224 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 42.0 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3028.01, -2556.53, 580.353 ); + ent.v["angles"] = ( 18.973, 3.17252, 1.0324 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1747.69, -371.353, 315.133 ); + ent.v["angles"] = ( 15, 215, 0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2567.28, -2114.59, 576.162 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 88.0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2740.27, -1165.56, 562.277 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2612.3, -1166.33, 562.446 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2483.58, -1168.2, 562.438 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2867.96, -1167.72, 562.468 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2994.64, -1166.52, 562.419 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3124.06, -1164.4, 562.41 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2450.1, -963.719, 561.481 ); + ent.v["angles"] = ( 90, 180, 178 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2449.89, -835.767, 561.508 ); + ent.v["angles"] = ( 90, 0, -1 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2739.31, -628.267, 561.481 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2611.53, -626.74, 561.429 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2482.33, -625.875, 561.467 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3292.49, -1327.71, 448.875 ); + ent.v["angles"] = ( 90, 180, -179 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3774.4, -372.242, 433.634 ); + ent.v["angles"] = ( 16, 95, 0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3775.66, -355.62, 448.144 ); + ent.v["angles"] = ( 11.9976, 89.9281, -1 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3414.04, -355.076, 577.001 ); + ent.v["angles"] = ( 11.9976, 89.9281, -1 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3330.07, 847.411, 448.407 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2750.21, 784.602, 432.931 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3193.35, 394.038, 455.554 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2701.39, -2421.88, 585.312 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2518.01, -2421.92, 585.018 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2699.54, -2778.23, 586.122 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2943.67, -1433.41, 566.958 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1793.24, -417.901, 316.191 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1876.85, -226.804, 315.052 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2647.23, 1318.38, 463.205 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3714.34, 513.339, 448.347 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2823.92, -225.783, 431.642 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3408.79, -362.614, 567.01 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3588.14, -2144.4, 474.095 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2784.65, 1751.88, 469.64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2588.01, 1376.51, 463.901 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3470.19, -126.583, 433.483 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3920.17, -896.397, 431.918 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3520.14, -1425.21, 433.069 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3017.15, -2552.36, 566.764 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1926.76, -339.881, 313.908 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1740.11, -302.663, 316.446 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2566.61, -1984.25, 576.152 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 89.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2565.88, -1882.2, 576.158 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 88.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2567.25, -1779.98, 576.159 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 89.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3673.68, -1342.69, 567.442 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3661.37, -455.664, 567.63 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3661.91, -894.117, 564.75 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2326, -2170.21, 536.667 ); + ent.v["angles"] = ( 0, 90, 90 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3773.65, -370.826, 434.251 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3738.4, 1461.08, 515.92 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3738.59, 1320.72, 516.327 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3878.09, 1320.41, 516.584 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3879.14, 1460.53, 516.166 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2497.65, -1565.42, 555.583 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 89.0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2835.73, 785.691, 596.712 ); + ent.v["angles"] = ( 89, 269.001, -179.999 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3365.49, 1465.38, 485.456 ); + ent.v["angles"] = ( 82.0703, 1.06083, 0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3364.25, 1576.03, 485.581 ); + ent.v["angles"] = ( 82.0703, 1.06083, 0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3365.54, 1687.88, 485.464 ); + ent.v["angles"] = ( 80.0701, 1.06083, 0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2947.53, 1323.95, 465.596 ); + ent.v["angles"] = ( 86.0703, 1.06093, 0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3216.15, -624.56, 562.515 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3087.43, -627.051, 562.442 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2959.56, -628.339, 562.419 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_roof_spill_splash_xshrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3769.85, 859.714, 312.33 ); + ent.v["angles"] = ( 0, 94, 3 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3326.86, 413.644, 514.384 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3327.34, 221.83, 514.415 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3802.06, -1217.94, 431.603 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3799.41, -535.69, 435.268 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3535.59, -3515.08, 440.302 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3549.54, -3522.36, 465.993 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2984.68, -3638.38, 550.642 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2979.9, 489.025, 584.433 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 87.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3192.67, -0.733948, 495.467 ); + ent.v["angles"] = ( 87, 359, 180 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3314.4, -123.48, 486.63 ); + ent.v["angles"] = ( 88, 271, 0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2508.79, -1403.91, 559.435 ); + ent.v["angles"] = ( 86.9221, 285.568, -166.707 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2459.33, -388.164, 434.112 ); + ent.v["angles"] = ( 89, 88.9989, 179.999 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2463.35, -388.286, 564.318 ); + ent.v["angles"] = ( 89, 88.9989, 179.999 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2657.51, -387.155, 564.093 ); + ent.v["angles"] = ( 89, 88.9989, 179.999 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2795.29, -580.639, 564.116 ); + ent.v["angles"] = ( 89, 88.9989, 179.999 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2274.68, -388.055, 564.066 ); + ent.v["angles"] = ( 89, 88.9989, 179.999 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3324.31, -1073.95, 545.179 ); + ent.v["angles"] = ( 90, 0, 180 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3326.28, -879.715, 546.352 ); + ent.v["angles"] = ( 89, 180, 0 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2731.64, -470.318, 421.55 ); + ent.v["angles"] = ( 89, 89.0067, -90.9904 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2689.24, 813.23, 584.131 ); + ent.v["angles"] = ( 89, 269.001, -179.999 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2540.74, 786.614, 597.017 ); + ent.v["angles"] = ( 89, 269, -180 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2557.83, 1649.72, 464.661 ); + ent.v["angles"] = ( 90, 0, 180 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3042.32, -1328.95, 448.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2848.63, -1329.33, 448.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2690.67, 99.9502, 583.895 ); + ent.v["angles"] = ( 90, 303.785, 33.7846 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2835.79, 126.446, 597.654 ); + ent.v["angles"] = ( 90, 303.785, 33.7846 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2539.37, 126.216, 596.738 ); + ent.v["angles"] = ( 90, 303.785, 33.7846 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3009.78, 2657.43, 236.582 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -1; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3296.22, 2813.38, 236.641 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -3; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3464.34, 3198.94, 236.907 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -1; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3296.97, 3583.83, 235.657 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -3; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2812.71, 2657.35, 236.368 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -1; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2527.11, 2813.08, 237.006 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -3; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2359.99, 3198.51, 235.603 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -1; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2525.95, 3583.82, 235.208 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -2; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3843.6, 712.485, 431.667 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1780.67, -1500.64, 215.981 ); + ent.v["angles"] = ( 287.701, 143.213, -111.277 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2184.77, -2010.49, 368.128 ); + ent.v["angles"] = ( 286.738, 199.827, 160.352 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2415.14, -2032.5, 586.446 ); + ent.v["angles"] = ( 90, 180, -90 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2320.32, -2030.8, 586.517 ); + ent.v["angles"] = ( 90, 180, -90 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2319.48, -1839.7, 586.533 ); + ent.v["angles"] = ( 90, 180, -90 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2415.42, -1840.7, 586.568 ); + ent.v["angles"] = ( 90, 180, -90 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2911.94, 3750.4, 235.324 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -3; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2766.4, -1522.78, 555.981 ); + ent.v["angles"] = ( 89, 0, 90 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2900.13, -710.16, 583.42 ); + ent.v["angles"] = ( 89, 88.9989, 179.999 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2263.95, -1405.44, 562.252 ); + ent.v["angles"] = ( 88.7786, 307.686, -142.601 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2860.67, 1419.32, 505.692 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2717.54, 1371.51, 506.439 ); + ent.v["angles"] = ( 90, 0, -1 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2713.89, 1660.05, 506.501 ); + ent.v["angles"] = ( 90, 0, -1 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2859.86, 1609.59, 506.493 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3710.94, 842.765, 441.59 ); + ent.v["angles"] = ( 89, 269.001, -179.999 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_waterfall_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4816.73, 1666.45, -1332.04 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2719.81, -200.111, 442.41 ); + ent.v["angles"] = ( 90, 0, -1 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2591.82, -199.66, 442.372 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2587.52, -327.324, 442.388 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2719.44, -327.046, 442.393 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3590.45, 0.530397, 498.463 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 42.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3597.12, 0.783489, 496.05 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3594.73, 1.78948, 498.904 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 19.0 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2120.85, -992.157, 448.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2119.18, -799.892, 448.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_yllw_ribbon" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3716.42, -1149.08, 316 ); + ent.v["angles"] = ( 283.198, 268.636, 87.3101 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_yllw_ribbon" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3717.97, -1165.89, 317 ); + ent.v["angles"] = ( 307.034, 304.402, 84.0626 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_blue_ribbon" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2516.83, 177.232, 444.875 ); + ent.v["angles"] = ( 59.9688, 23.6611, 142.454 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_blue_ribbon" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2501.88, 163.664, 444.875 ); + ent.v["angles"] = ( 81.3319, 292.048, -137.69 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_blue_ribbon" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2481.79, 174.633, 444.875 ); + ent.v["angles"] = ( 72.1109, 107.254, -136.205 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3336.12, -3690.73, 441.488 ); + ent.v["angles"] = ( 30.3973, 254.117, -5.36284 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3352.13, -3695.58, 439 ); + ent.v["angles"] = ( 23.6594, 258.087, -3.89569 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3330.07, -3698.78, 465 ); + ent.v["angles"] = ( 17.6727, 258.514, -3.74476 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2726.34, -2609.72, 573.865 ); + ent.v["angles"] = ( 90, 0, -1 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2227.58, -385.139, 437.403 ); + ent.v["angles"] = ( 89, 88.9987, 177.999 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2817.56, -1404.78, 559.692 ); + ent.v["angles"] = ( 86.9221, 285.568, -166.707 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3104.21, -1405.86, 556.982 ); + ent.v["angles"] = ( 86.9221, 285.569, -165.706 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3592.37, -1406.25, 555.203 ); + ent.v["angles"] = ( 88.3686, 219.881, 128.611 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3339.6, -619.213, 557.677 ); + ent.v["angles"] = ( 89, 180, -179 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3339.22, -1143.37, 559.54 ); + ent.v["angles"] = ( 89, 180, -179 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3027.63, -1226.82, 563.208 ); + ent.v["angles"] = ( 86.9221, 285.572, 15.2971 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2370.34, -627.876, 556.139 ); + ent.v["angles"] = ( 89, 89.001, 89.0103 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3325.9, -691.829, 546.293 ); + ent.v["angles"] = ( 89, 180, 0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3098.57, -1427.3, 578.914 ); + ent.v["angles"] = ( 89, 0, 90 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2443.42, -1683.2, 560.04 ); + ent.v["angles"] = ( 89, 88.9989, 179.999 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2784.87, 1717.74, 475.695 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2630.37, 1366.49, 475.987 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -21; +} diff --git a/MP/Maps/Uplink/clientscripts/mp/mp_uplink.csc b/MP/Maps/Uplink/clientscripts/mp/mp_uplink.csc new file mode 100644 index 0000000..a224bb0 --- /dev/null +++ b/MP/Maps/Uplink/clientscripts/mp/mp_uplink.csc @@ -0,0 +1,364 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_uplink_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_uplink_amb; +#include clientscripts\mp\_fx; + +main() +{ + level.worldmapx = 0; + level.worldmapy = 0; + level.worldlat = 19.2278; + level.worldlong = 94.4495; + clientscripts\mp\_load::main(); + clientscripts\mp\mp_uplink_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_uplink_amb::main(); + registerclientfield( "world", "trigger_lightning", 1, 1, "int", ::emptyfunction, 0 ); + level.onplayerconnect = ::uplinkonplayerconnect; + level._glasssmashcbfunc = ::_glasssmashcbfunc; + setsaveddvar( "sm_sunshadowsmall", 1 ); + waitforclient( 0 ); +/# + println( "*** Client : mp_uplink running..." ); +#/ + level notify( "uplink_client_connected" ); + initrainfx( 0 ); + level thread initlightningloop( 0 ); +} + +_glasssmashcbfunc( org, dir ) +{ + level notify( "_glassSmashCBFunc" ); + level endon( "_glassSmashCBFunc" ); + + if ( !isdefined( level._uplinkglasssmashed ) ) + level._uplinkglasssmashed = []; + + level._uplinkglasssmashed[level._uplinkglasssmashed.size] = org; + + for ( last = level._uplinkglasssmashed.size - 1; last >= 0; last-- ) + { + wait 0.05; + level notify( "uplink_glass_smash", level._uplinkglasssmashed[last] ); + level._uplinkglasssmashed[last] = undefined; + } +} + +joininprogressglasssmash() +{ + level endon( "uplink_client_connected" ); + + level waittill( "uplink_glass_smash", origin ); + + level.glasssmashjoininprogress[level.glasssmashjoininprogress.size] = origin; +} + +uplinkonplayerconnect( localclientnum ) +{ + for (;;) + { + level waittill( "snap_processed", snapshotlocalclientnum ); + + if ( snapshotlocalclientnum == localclientnum ) + break; + } + + windvanearray = getentarray( localclientnum, "wind_direction", "targetname" ); + + if ( isdefined( windvanearray ) && windvanearray.size > 0 ) + { + foreach ( windvane in windvanearray ) + windvane thread windvanedirection( localclientnum ); + } + + lightpost = getent( localclientnum, "sway_lightpost", "targetname" ); + + if ( isdefined( lightpost ) && !isdemoplaying() ) + lightpost thread lightpostsway(); +} + +initlightningloop( localclientnum ) +{ + for (;;) + { + serverwait( localclientnum, randomfloatrange( 10.0, 15.0 ) ); + playlightning( localclientnum ); + } +} + +playlightning( localclientnum ) +{ + lightning_id = randomintrange( 7001, 7005 ); +/# + assert( isdefined( level.createfxexploders[lightning_id] ) ); + assert( isdefined( level.createfxexploders[lightning_id][0].v["origin"] ) ); +#/ + if ( isdefined( level.createfxexploders[lightning_id] ) ) + { + clientscripts\mp\_fx::activate_exploder( lightning_id ); + lightning_origin = level.createfxexploders[lightning_id][0].v["origin"]; + serverwait( localclientnum, randomfloatrange( 0.05, 0.15 ) ); + n_level_sunlight = getdvarfloat( "r_lightTweakSunLight" ); + n_level_exposure = getdvarfloat( "r_exposureValue" ); + n_strikes = randomintrange( 2, 4 ); + + for ( i = 0; i < n_strikes; i++ ) + { + n_blend_time = randomfloatrange( 0.0, 0.25 ); + setdvar( "r_exposureTweak", 1 ); + playsound( localclientnum, "amb_thunder_flash", lightning_origin ); + setdvar( "r_exposureValue", randomfloatrange( 1.8, 2.3 ) ); + level thread serverlerpdvar( localclientnum, "r_exposureValue", n_level_exposure, n_blend_time ); + setsaveddvar( "r_lightTweakSunLight", randomfloatrange( 25, 32 ) ); + level thread serverlerpdvar( localclientnum, "r_lightTweakSunLight", n_level_sunlight, n_blend_time, 1 ); + serverwait( localclientnum, n_blend_time ); + setdvar( "r_exposureTweak", 0 ); + } + } +} + +lightpostsway() +{ + while ( true ) + { + randomswingangle = randomfloatrange( 0.25, 0.5 ); + randomswingtime = randomfloatrange( 2.0, 4.0 ); + self rotateto( ( randomswingangle * 0.5, randomswingangle * 0.6, randomswingangle * 0.8 ), randomswingtime, randomswingtime * 0.3, randomswingtime * 0.3 ); + + self waittill( "rotatedone" ); + + self rotateto( ( randomswingangle * 0.5 * -1, randomswingangle * -1 * 0.6, randomswingangle * 0.8 * -1 ), randomswingtime, randomswingtime * 0.3, randomswingtime * 0.3 ); + + self waittill( "rotatedone" ); + } +} + +initrainfx( localclientnum ) +{ + intact_window_exploders = []; + shattered_window_exploders = []; + directional_exploders = []; + + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + + if ( !isdefined( ent ) ) + continue; + + if ( ent.v["type"] != "exploder" ) + continue; + + if ( ent.v["exploder"] >= 5001 && ent.v["exploder"] <= 5029 ) + { + intact_window_exploders[intact_window_exploders.size] = ent; + continue; + } + + if ( ent.v["exploder"] >= 6001 && ent.v["exploder"] <= 6020 ) + { + shattered_window_exploders[shattered_window_exploders.size] = ent; + + if ( ent.v["exploder"] >= 6003 && ent.v["exploder"] <= 6006 ) + directional_exploders[directional_exploders.size] = ent; + } + } + + level thread activaterainfxonconnect( localclientnum, intact_window_exploders, shattered_window_exploders, directional_exploders ); +} + +activaterainfxonconnect( localclientnum, intact_window_exploders, shattered_window_exploders, directional_exploders ) +{ + level thread playerjoininprogressglassshatter( localclientnum, intact_window_exploders, shattered_window_exploders ); + level thread triggerexplodersonglassshatter( localclientnum, intact_window_exploders, shattered_window_exploders ); + player = getlocalplayer( localclientnum ); + player thread rainexploderswitch( localclientnum, directional_exploders ); + player thread activateintactwindowexploders( intact_window_exploders ); +} + +rainexploderswitch( localclientnum, directional_exploders ) +{ + level.current_rain_exploder = undefined; + waittillframeend; + + for (;;) + { + if ( !isdefined( level.createfxexploders ) ) + return; + + for ( i = 0; i < directional_exploders.size; i++ ) + clientscripts\mp\_fx::deactivate_exploder( directional_exploders[i].v["exploder"] ); + + if ( randomint( 2 ) ) + { + level.current_rain_exploder = 1002; + level notify( "wind_changed", 270 ); + } + else + { + level.current_rain_exploder = 1001; + level notify( "wind_changed", 90 ); + + if ( isdemoplaying() == 0 ) + { + for ( i = 0; i < directional_exploders.size; i++ ) + { + if ( isdefined( directional_exploders[i].glass_broken ) ) + clientscripts\mp\_fx::activate_exploder( directional_exploders[i].v["exploder"] ); + } + } + } + + clientscripts\mp\_fx::activate_exploder( level.current_rain_exploder ); + serverwait( localclientnum, 8.0 ); + } +} + +windvanedirection( localclientnum ) +{ + originalangles = self.angles; + + for (;;) + { + level waittill( "wind_changed", yaw ); + + self thread windvanejitter( originalangles, yaw ); + } +} + +windvanejitter( originalangles, yaw ) +{ + self notify( "windVaneJitter_singleton" ); + self endon( "windVaneJitter_singleton" ); + wait 0.5; + self rotateto( ( originalangles[0], yaw, originalangles[2] ), 1.0 ); + + self waittill( "rotatedone" ); + + for (;;) + { + time = randomfloatrange( 0.1, 0.5 ); + currentyaw = randomfloatrange( yaw - 30, yaw + 30 ); + self rotateto( ( originalangles[0], currentyaw, originalangles[2] ), time ); + + self waittill( "rotatedone" ); + } +} + +activateintactwindowexploders( intact_window_exploders ) +{ + if ( intact_window_exploders.size > 0 ) + { + for ( i = 0; i < intact_window_exploders.size; i++ ) + clientscripts\mp\_fx::activate_exploder( intact_window_exploders[i].v["exploder"] ); + } +} + +playerjoininprogressglassshatter( localclientnum, intact_window_exploders, shattered_window_exploders ) +{ + if ( isdefined( level.glasssmashjoininprogress ) ) + { + foreach ( origin in level.glasssmashjoininprogress ) + { + glasssmashdetected( localclientnum, origin, intact_window_exploders, shattered_window_exploders ); + wait 0.05; + } + } +} + +triggerexplodersonglassshatter( localclientnum, intact_window_exploders, shattered_window_exploders ) +{ + for (;;) + { + level waittill( "uplink_glass_smash", origin ); + + glasssmashdetected( localclientnum, origin, intact_window_exploders, shattered_window_exploders ); + } +} + +glasssmashdetected( localclientnum, origin, intact_window_exploders, shattered_window_exploders ) +{ + closest = 998001; + closest_intact_exploder = undefined; + closest_shattered_exploder = undefined; + + foreach ( intact_window_exploder in intact_window_exploders ) + { + if ( !isdefined( intact_window_exploder ) ) + continue; + + if ( isdefined( intact_window_exploder.glass_broken ) ) + continue; + + distsq = distancesquared( intact_window_exploder.v["origin"], origin ); + + if ( distsq > 2500 ) + continue; + + if ( distsq < closest ) + { + closest_intact_exploder = intact_window_exploder; + closest = distsq; + } + } + + if ( isdefined( closest_intact_exploder ) ) + { + closest_intact_exploder.glass_broken = 1; + clientscripts\mp\_fx::deactivate_exploder( closest_intact_exploder.v["exploder"] ); + } + + closest = 998001; + + foreach ( shattered_window_exploder in shattered_window_exploders ) + { + if ( !isdefined( shattered_window_exploder ) ) + continue; + + if ( isdefined( shattered_window_exploder.glass_broken ) ) + continue; + + distsq = distancesquared( shattered_window_exploder.v["origin"], origin ); + + if ( issouthernexploder( shattered_window_exploder ) ) + currentthreshold = 7225; + else + currentthreshold = 2500; + + if ( distsq > currentthreshold ) + continue; + + if ( distsq < closest ) + { + closest_shattered_exploder = shattered_window_exploder; + closest = distsq; + } + } + + if ( isdefined( closest_shattered_exploder ) ) + { + closest_shattered_exploder.glass_broken = 1; + + if ( !issouthernexploder( closest_shattered_exploder ) || level.current_rain_exploder == 1001 ) + { + clientscripts\mp\_fx::activate_exploder( closest_shattered_exploder.v["exploder"] ); + origin = closest_shattered_exploder.v["origin"]; + rainsnd = spawn( localclientnum, origin, "script_origin" ); + rainsnd playloopsound( "amb_rain_thru_window", 0.5 ); + } + } +} + +issouthernexploder( exploder ) +{ + return exploder.v["exploder"] >= 6003 && exploder.v["exploder"] <= 6006; +} + +emptyfunction( localclientnum, oldval, newval, bnewent, binitialsnap, fieldname, bwasdemojump ) +{ + +} diff --git a/MP/Maps/Uplink/clientscripts/mp/mp_uplink_amb.csc b/MP/Maps/Uplink/clientscripts/mp/mp_uplink_amb.csc new file mode 100644 index 0000000..a7c11ef --- /dev/null +++ b/MP/Maps/Uplink/clientscripts/mp/mp_uplink_amb.csc @@ -0,0 +1,123 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "outside", 1 ); + setambientroomtone( "outside", "amb_rain_blend_track", 0.5, 0.5 ); + setambientroomreverb( "outside", "uplink_outside", 1, 1 ); + setambientroomcontext( "outside", "ringoff_plr", "outdoor" ); + declareambientroom( "inside" ); + setambientroomtone( "inside", "amb_silent", 0.3, 0.3 ); + setambientroomreverb( "inside", "uplink_inside", 1, 1 ); + setambientroomcontext( "inside", "ringoff_plr", "indoor" ); + declareambientroom( "utility_room" ); + setambientroomtone( "utility_room", "amb_silent", 0.3, 0.3 ); + setambientroomreverb( "utility_room", "uplink_utility_room", 1, 1 ); + setambientroomcontext( "utility_room", "ringoff_plr", "indoor" ); + declareambientroom( "floor_2" ); + setambientroomtone( "floor_2", "amb_silent", 0.3, 0.3 ); + setambientroomreverb( "floor_2", "uplink_floor_2", 1, 1 ); + setambientroomcontext( "floor_2", "ringoff_plr", "indoor" ); + declareambientroom( "small_room" ); + setambientroomtone( "small_room", "amb_silent", 0.3, 0.3 ); + setambientroomreverb( "small_room", "uplink_small_room", 1, 1 ); + setambientroomcontext( "small_room", "ringoff_plr", "indoor" ); + declareambientroom( "open_room" ); + setambientroomtone( "open_room", "amb_silent", 0.3, 0.3 ); + setambientroomreverb( "open_room", "uplink_open_room", 1, 1 ); + setambientroomcontext( "open_room", "ringoff_plr", "indoor" ); + declareambientroom( "partial" ); + setambientroomtone( "partial", "amb_silent", 0.3, 0.3 ); + setambientroomreverb( "partial", "uplink_partial_room", 1, 1 ); + setambientroomcontext( "partial", "ringoff_plr", "indoor" ); + declareambientroom( "container" ); + setambientroomtone( "container", "amb_silent", 0.3, 0.3 ); + setambientroomreverb( "container", "uplink_container", 1, 1 ); + setambientroomcontext( "container", "ringoff_plr", "indoor" ); + declareambientroom( "rain_hit_player" ); + setambientroomtone( "rain_hit_player", "amb_rain_on_player", 0.2, 0.2 ); + setambientroomreverb( "rain_hit_player", "uplink_outside", 1, 1 ); + setambientroomcontext( "rain_hit_player", "ringoff_plr", "outdoor" ); + declareambientroom( "rain_hit_player_1" ); + setambientroomtone( "rain_hit_player_1", "amb_rain_on_player", 0.2, 0.2 ); + setambientroomreverb( "rain_hit_player_1", "uplink_outside", 1, 1 ); + setambientroomcontext( "rain_hit_player_1", "ringoff_plr", "outdoor" ); + thread snd_start_autofx_audio(); + thread snd_play_loopers(); + thread snd_dyn_wind(); +} + +vox_comp_radio() +{ + while ( true ) + { + wait( randomintrange( 12, 30 ) ); + playsound( 0, "vox_comp_radio", ( 2635, 1596, 406 ) ); + } +} + +vox_comp_radio_mainframe() +{ + while ( true ) + { + wait( randomintrange( 12, 30 ) ); + playsound( 0, "vox_comp_radio", ( 2734, -842, 379 ) ); + } +} + +snd_random( min, max, position, alias ) +{ + while ( true ) + { + wait( randomintrange( min, max ) ); + playsound( 0, alias, position ); + } +} + +snd_start_autofx_audio() +{ + snd_play_auto_fx( "fx_mp_distortion_wall_heater", "amb_space_heater", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_water_drip_light_short", "amb_water_drip", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_mp_water_roof_spill_lg_hvy", "amb_rain_roof_spill", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_water_pipe_gutter_md", "amb_waterpipe_flow", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_drone_rectangle_light", "amb_rectangle_lights", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_light_flour_glow_yellow_sm", "amb_rectangle_lights", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_light_recessed_blue", "amb_rectangle_lights", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_light_floodlight_sqr_cool", "amb_square_lights", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_light_recessed_cool", "amb_small_lights", 0, 0, 0, 0 ); +} + +snd_play_loopers() +{ + playloopat( "amb_spawn_rain", ( 1419, 1092, 242 ) ); + playloopat( "amb_large_lights", ( 3540, -3518, 452 ) ); + playloopat( "amb_weather_vane_1", ( 4054, -1348, 567 ) ); + playloopat( "amb_weather_vane_2", ( 4049, -1160, 561 ) ); + playloopat( "amb_weather_vane_2", ( 3767, 1499, 632 ) ); + playloopat( "amb_window_rain", ( 2289, -1027, 607 ) ); + playloopat( "amb_window_rain", ( 2306, -1227, 598 ) ); + playloopat( "amb_rain_metal_tank", ( 1929, -359, 457 ) ); + playloopat( "amb_rain_metal_tank", ( 1781, -324, 325 ) ); +} + +snd_dyn_wind() +{ + snd_add_exploder_alias( 1001, "amb_dynwind" ); + snd_add_exploder_alias( 1002, "amb_dynwind" ); +} + +snd_add_exploder_alias( num, alias ) +{ + for ( i = 0; i < level.createfxent.size; i++ ) + { + if ( isdefined( level.createfxent[i].v["exploder"] ) ) + { + if ( level.createfxent[i].v["exploder"] == num ) + level.createfxent[i].v["soundalias"] = alias; + } + } +} diff --git a/MP/Maps/Uplink/clientscripts/mp/mp_uplink_fx.csc b/MP/Maps/Uplink/clientscripts/mp/mp_uplink_fx.csc new file mode 100644 index 0000000..3685990 --- /dev/null +++ b/MP/Maps/Uplink/clientscripts/mp/mp_uplink_fx.csc @@ -0,0 +1,179 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_fxanim_dlc3; +#include clientscripts\mp\createfx\mp_uplink_fx; +#include clientscripts\mp\_fx; + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_uplink_rain_med_fast_os"] = loadfx( "weather/fx_mp_uplink_rain_med_fast_os" ); + level._effect["fx_mp_uplink_rain_med_fast_os_vista"] = loadfx( "weather/fx_mp_uplink_rain_med_fast_os_vista" ); + level._effect["fx_mp_uplink_rain_med_fast_neg_os"] = loadfx( "weather/fx_mp_uplink_rain_med_fast_neg_os" ); + level._effect["fx_mp_uplink_rain_med_fast_neg_os_vista"] = loadfx( "weather/fx_mp_uplink_rain_med_fast_neg_os_vista" ); + level._effect["fx_mp_upl_rain_gust_md"] = loadfx( "maps/mp_maps/fx_mp_upl_rain_gust_md" ); + level._effect["fx_mp_upl_rain_gust_lg"] = loadfx( "maps/mp_maps/fx_mp_upl_rain_gust_lg" ); + level._effect["fx_mp_upl_rain_gust_lg_neg"] = loadfx( "maps/mp_maps/fx_mp_upl_rain_gust_lg" ); + level._effect["fx_mp_upl_rain_gust_md_neg"] = loadfx( "maps/mp_maps/fx_mp_upl_rain_gust_md_neg" ); + level._effect["fx_mp_upl_rain_splash_50"] = loadfx( "maps/mp_maps/fx_mp_upl_rain_splash_50" ); + level._effect["fx_mp_upl_rain_splash_100"] = loadfx( "maps/mp_maps/fx_mp_upl_rain_splash_100" ); + level._effect["fx_mp_upl_rain_splash_200"] = loadfx( "maps/mp_maps/fx_mp_upl_rain_splash_200" ); + level._effect["fx_mp_upl_rain_splash_300"] = loadfx( "maps/mp_maps/fx_mp_upl_rain_splash_300" ); + level._effect["fx_mp_upl_rain_splash_400"] = loadfx( "maps/mp_maps/fx_mp_upl_rain_splash_400" ); + level._effect["fx_water_pipe_gutter_md"] = loadfx( "water/fx_water_pipe_gutter_md" ); + level._effect["fx_mp_water_roof_spill_lg_hvy"] = loadfx( "maps/mp_maps/fx_mp_water_roof_spill_lg_hvy" ); + level._effect["fx_mp_water_roof_spill_lg_hvy_lng"] = loadfx( "maps/mp_maps/fx_mp_water_roof_spill_lg_hvy_lng" ); + level._effect["fx_mp_water_roof_spill_md_hvy"] = loadfx( "maps/mp_maps/fx_mp_water_roof_spill_md_hvy" ); + level._effect["fx_mp_water_roof_spill_splash_shrt"] = loadfx( "maps/mp_maps/fx_mp_water_roof_spill_splash_shrt" ); + level._effect["fx_mp_water_roof_spill_splash_xshrt"] = loadfx( "maps/mp_maps/fx_mp_water_roof_spill_splash_xshrt" ); + level._effect["fx_mp_fog_cool_ground"] = loadfx( "maps/mp_maps/fx_mp_fog_cool_ground" ); + level._effect["fx_mp_distant_cloud_vista"] = loadfx( "maps/mp_maps/fx_mp_upl_distant_cloud_vista" ); + level._effect["fx_mp_uplink_lightning_lg"] = loadfx( "weather/fx_mp_uplink_lightning_lg" ); + level._effect["fx_mp_upl_window_rain1_splash"] = loadfx( "maps/mp_maps/fx_mp_upl_window_rain1_splash" ); + level._effect["fx_mp_uplink_rain_window_roof_med"] = loadfx( "weather/fx_mp_uplink_rain_window_roof_med" ); + level._effect["fx_mp_uplink_rain_window_gust"] = loadfx( "weather/fx_mp_uplink_rain_window_gust" ); + level._effect["fx_mp_upl_cloud_geo"] = loadfx( "maps/mp_maps/fx_mp_upl_cloud_geo" ); + level._effect["fx_lf_mp_uplink_sun1"] = loadfx( "lens_flares/fx_lf_mp_uplink_sun1" ); + level._effect["fx_lf_mp_uplink_anamorphic"] = loadfx( "lens_flares/fx_lf_mp_uplink_anamorphic" ); + level._effect["fx_lf_mp_uplink_anamorphic2"] = loadfx( "lens_flares/fx_lf_mp_uplink_anamorphic2" ); + level._effect["fx_mp_upl_rain_lit_corona"] = loadfx( "maps/mp_maps/fx_mp_upl_rain_lit_corona" ); + level._effect["fx_drone_rectangle_light"] = loadfx( "light/fx_light_flour_glow_yellow" ); + level._effect["fx_light_flour_glow_yellow_sm"] = loadfx( "light/fx_light_flour_glow_yellow_sm" ); + level._effect["fx_light_flour_glow_yellow_xsm"] = loadfx( "light/fx_light_flour_glow_yellow_xsm" ); + level._effect["fx_drone_rectangle_light_03"] = loadfx( "light/fx_drone_rectangle_light_03" ); + level._effect["fx_drone_rectangle_light_blue"] = loadfx( "maps/mp_maps/fx_mp_upl_rectangle_light_blue" ); + level._effect["fx_light_beacon_yellow"] = loadfx( "light/fx_light_beacon_yellow" ); + level._effect["fx_light_beacon_red_blink_fst"] = loadfx( "light/fx_light_beacon_red_blink_fst" ); + level._effect["fx_light_beacon_red_blink_fst_sm"] = loadfx( "light/fx_light_beacon_red_blink_fst_sm" ); + level._effect["fx_light_exit_sign"] = loadfx( "light/fx_light_exit_sign_glow" ); + level._effect["fx_light_recessed_cool"] = loadfx( "maps/mp_maps/fx_mp_upl_light_recessed_cool" ); + level._effect["fx_light_recessed_blue"] = loadfx( "light/fx_light_recessed_blue" ); + level._effect["fx_light_window_glow"] = loadfx( "light/fx_light_window_glow" ); + level._effect["fx_mp_upl_window_ray_cool"] = loadfx( "maps/mp_maps/fx_mp_upl_window_ray_cool" ); + level._effect["fx_light_floodlight_sqr_wrm"] = loadfx( "maps/mp_maps/fx_mp_upl_floodlight_sqr_warm" ); + level._effect["fx_light_floodlight_sqr_cool"] = loadfx( "maps/mp_maps/fx_mp_upl_floodlight_sqr_cool" ); + level._effect["fx_light_floodlight_sqr_cool_thin"] = loadfx( "maps/mp_maps/fx_mp_upl_floodlight_sqr_cool_thin" ); + level._effect["fx_light_floodlight_sqr_cool_sm"] = loadfx( "maps/mp_maps/fx_mp_upl_floodlight_sqr_cool_sm" ); + level._effect["fx_light_floodlight_sqr_cool_md"] = loadfx( "maps/mp_maps/fx_mp_upl_floodlight_sqr_cool_md" ); + level._effect["fx_mp_upl_floodlight_yellow"] = loadfx( "maps/mp_maps/fx_mp_upl_floodlight_yellow" ); + level._effect["fx_upl_light_ray_sun_window_1s"] = loadfx( "light/fx_upl_light_ray_sun_window_1s" ); + level._effect["fx_upl_light_ray_sun_window_lg_1s"] = loadfx( "light/fx_upl_light_ray_sun_window_lg_1s" ); + level._effect["fx_mp_upl_generator_grays"] = loadfx( "maps/mp_maps/fx_mp_upl_generator_grays" ); + level._effect["fx_light_flour_glow_v_shape_cool_sm"] = loadfx( "light/fx_light_flour_glow_v_shape_cool_sm" ); + level._effect["fx_light_flour_glow_v_shape_cool"] = loadfx( "light/fx_light_upl_flour_glow_v_shape_cool" ); + level._effect["fx_light_gray_yllw_ribbon"] = loadfx( "light/fx_light_gray_yllw_ribbon" ); + level._effect["fx_light_gray_blue_ribbon"] = loadfx( "light/fx_light_gray_blue_ribbon" ); + level._effect["fx_mp_upl_waterfall01"] = loadfx( "maps/mp_maps/fx_mp_upl_waterfall01" ); + level._effect["fx_mp_upl_waterfall02"] = loadfx( "maps/mp_maps/fx_mp_upl_waterfall02" ); + level._effect["fx_mp_upl_waterfall_splash_bttm"] = loadfx( "maps/mp_maps/fx_mp_upl_waterfall_splash_bttm" ); + level._effect["fx_mp_upl_waterfall_splash_fst"] = loadfx( "maps/mp_maps/fx_mp_upl_waterfall_splash_fst" ); + level._effect["fx_mp_upl_waterfall_splash_md"] = loadfx( "maps/mp_maps/fx_mp_upl_waterfall_splash_md" ); + level._effect["fx_mp_upl_waterfall_vista"] = loadfx( "maps/mp_maps/fx_mp_upl_waterfall_vista" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["ant_rooftop"] = %fxanim_gp_antenna_rooftop_anim; + level.fx_anim_level_init = ::fxanim_init; +} + +#using_animtree("fxanim_props_dlc3"); + +precache_fxanim_props_dlc3() +{ + level.scr_anim["fxanim_props_dlc3"]["uplink_gate"] = %fxanim_mp_uplink_gate_anim; + level.scr_anim["fxanim_props_dlc3"]["uplink_gate_b"] = %fxanim_mp_uplink_gate_b_anim; + level.scr_anim["fxanim_props_dlc3"]["cliff_sign"] = %fxanim_mp_uplink_cliff_sign_anim; + level.scr_anim["fxanim_props_dlc3"]["radar01"] = %fxanim_mp_uplink_vista_radar01_anim; + level.scr_anim["fxanim_props_dlc3"]["radar02"] = %fxanim_mp_uplink_vista_radar02_anim; + level.scr_anim["fxanim_props_dlc3"]["radar03"] = %fxanim_mp_uplink_vista_radar03_anim; + level.scr_anim["fxanim_props_dlc3"]["radar04"] = %fxanim_mp_uplink_vista_radar04_anim; + level.scr_anim["fxanim_props_dlc3"]["radar05"] = %fxanim_mp_uplink_vista_radar05_anim; + level.scr_anim["fxanim_props_dlc3"]["sat_dish2"] = %fxanim_gp_satellite_dish2_anim; + level.scr_anim["fxanim_props_dlc3"]["ant_rooftop2_small"] = %fxanim_gp_antenna_rooftop2_small_anim; + level.scr_anim["fxanim_props_dlc3"]["fence01"] = %fxanim_mp_uplink_fence01_anim; + level.scr_anim["fxanim_props_dlc3"]["fence02"] = %fxanim_mp_uplink_fence02_anim; + level.scr_anim["fxanim_props_dlc3"]["vines_01"] = %fxanim_mp_uplink_vines_01_anim; + level.scr_anim["fxanim_props_dlc3"]["vines_02"] = %fxanim_mp_uplink_vines_02_anim; +} + +fxanim_init( localclientnum ) +{ + for (;;) + { + level waittill( "snap_processed", snapshotlocalclientnum ); + + if ( snapshotlocalclientnum == localclientnum ) + break; + } + + level thread clientscripts\mp\_fxanim_dlc3::fxanim_init_dlc( localclientnum ); + radar = getent( localclientnum, "fxanim_dlc3_radar", "targetname" ); + + if ( isdefined( radar ) ) + { + if ( !isdefined( level.radar_waits ) ) + { + level.radar_waits = []; + + for ( i = 1; i < 6; i++ ) + level.radar_waits[i] = randomfloatrange( 5, 10 ); + } + + radar thread fxanim_radar_think( localclientnum ); + } +} + +fxanim_radar_think( localclientnum ) +{ + self endon( "death" ); + self endon( "entityshutdown" ); + self endon( "delete" ); + self waittill_dobj( localclientnum ); + self useanimtree( #animtree ); + anim_index = 1; + playfxontag( localclientnum, level._effect["fx_light_beacon_red_blink_fst"], self, "fx_link_01_jnt" ); + playfxontag( localclientnum, level._effect["fx_light_beacon_red_blink_fst"], self, "fx_link_02_jnt" ); + playfxontag( localclientnum, level._effect["fx_light_beacon_red_blink_fst"], self, "fx_link_03_jnt" ); + playfxontag( localclientnum, level._effect["fx_light_beacon_red_blink_fst"], self, "fx_link_04_jnt" ); + + for (;;) + { + self setflaggedanimrestart( "radar_done" + anim_index, level.scr_anim["fxanim_props_dlc3"]["radar0" + anim_index], 1.0, 0.0, 1.0 ); + + for (;;) + { + self waittill( "radar_done" + anim_index, note ); + + if ( note == "end" ) + break; + } + + wait( level.radar_waits[anim_index] ); + self clearanim( level.scr_anim["fxanim_props_dlc3"]["radar0" + anim_index], 0 ); + anim_index++; + + if ( anim_index > 5 ) + anim_index = 1; + } +} + +main() +{ + clientscripts\mp\createfx\mp_uplink_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fxanim_props(); + precache_fxanim_props_dlc3(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} diff --git a/MP/Maps/Uplink/maps/mp/createfx/mp_uplink_fx.gsc b/MP/Maps/Uplink/maps/mp/createfx/mp_uplink_fx.gsc new file mode 100644 index 0000000..7afcf17 --- /dev/null +++ b/MP/Maps/Uplink/maps/mp/createfx/mp_uplink_fx.gsc @@ -0,0 +1,4330 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_os" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3087.23, 1201.53, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_os" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 4112.75, -1202.05, 335.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_os" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3063.42, -3473.09, 352 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_os" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1724.52, -1103.73, 178.979 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3087.23, 1201.53, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 4112.75, -1202.05, 335.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3063.42, -3473.09, 352 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1724.52, -1103.73, 178.979 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3235.78, 1891.73, 288.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3524.17, 1282.11, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3187.27, 1200.69, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2469.29, 1260.57, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2818.94, 1134.75, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3583.66, 986.25, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3345.38, 981.247, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3074.21, 932.518, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2783.32, 899.299, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2352.24, 1035.47, 320 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2554.78, 874.469, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2918.6, 1955, 288.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2617.7, 1846.38, 288.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2495.7, 1673.11, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2497.06, 1558.67, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3092.52, 1379.85, 335.125 ); + ent.v["angles"] = ( 296, 270, 90 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3167.84, 1378.01, 334.261 ); + ent.v["angles"] = ( 296, 270, 90 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3239.42, 1381.56, 335.931 ); + ent.v["angles"] = ( 296, 270, 90 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2817.1, 1787.71, 352.125 ); + ent.v["angles"] = ( 270, 356.32, 3.68219 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3377.37, 1666.21, 296.815 ); + ent.v["angles"] = ( 277, 90, -90 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3375.89, 1553.32, 310.961 ); + ent.v["angles"] = ( 277, 90, -90 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3856.19, 948.704, 304.323 ); + ent.v["angles"] = ( 278.062, 352.869, 7.13089 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3888.42, 790.33, 298.946 ); + ent.v["angles"] = ( 279.483, 341.714, 18.5216 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3875.64, 694.651, 296.096 ); + ent.v["angles"] = ( 279.039, 6.61275, -6.06275 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3889.02, 609.307, 297.574 ); + ent.v["angles"] = ( 275.993, 0.156288, 0.157217 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3710.8, 375.639, 290.961 ); + ent.v["angles"] = ( 271, 270.005, 89.9947 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3860.81, 467.664, 295 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 272.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3708.93, 162.401, 282.648 ); + ent.v["angles"] = ( 271, 179.989, 179.976 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3679.6, -19.0127, 290.334 ); + ent.v["angles"] = ( 273.6, 56.1405, -56.4022 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3029.78, 685.631, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3069.58, 506.669, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3115.37, 291.434, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2945.86, -26.6236, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3550.88, -259.095, 320 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2943.28, -255.755, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3123.25, -256.32, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3313.52, -241.425, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3136.04, -109.121, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3099.39, 138.382, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3017.19, 186.914, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3098.63, -4.73839, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2612.01, -20.6763, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2758.39, 76.3419, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2753.33, -16.836, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3789.31, -263.511, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3847.64, -446.28, 319.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3852.47, -536.307, 319.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3849.31, -633.662, 319.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3939.55, -626.792, 319.125 ); + ent.v["angles"] = ( 270, 353.157, 59.8427 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4023.38, -801.844, 319.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4014.17, -940.094, 319.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3972.33, -712.302, 319.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4005.35, -1034.7, 319.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3453.43, -327.662, 456.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3373.04, -327.588, 456.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3799.55, -813.546, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3790.38, -982.76, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3718.98, -1358.11, 456.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3719.62, -1267.33, 456.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3719.93, -1176.53, 456.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3719.77, -702.075, 456.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3721.31, -524.952, 456.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3720.06, -433.124, 456.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4014.53, -1126.9, 314.625 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4014.43, -1181.33, 314.625 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4015.93, -1237.73, 314.625 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4011.77, -1280.73, 314.625 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4014.11, -1333.41, 314.625 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4013.85, -1388.29, 314.625 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3911.11, -1573.07, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3555.62, -1591.67, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3737.09, -1613.83, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3707.3, -1855.38, 367.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3706.79, -1986.15, 367.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3708.63, -2067.76, 367.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3682.24, -2179.69, 367.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3635.2, -2319.23, 367.625 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3708.5, -1918.45, 367.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3410.64, -1923.07, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3065.06, -1640.67, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2735.89, -2267.72, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3079.12, -2235.35, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2726.96, -1711.74, 457.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3140.36, -1850.68, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3223.68, -2026.12, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3261.83, -1861.82, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2664.01, -2014.14, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3292.53, -2411.98, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3123.35, -2499.15, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3719.45, -613.46, 456.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3720.73, -1088.77, 456.125 ); + ent.v["angles"] = ( 270, 5.71059, 83.2893 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3122.62, -2673.1, 456 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3286.09, -2624.23, 456.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3301.87, -2927.35, 416.687 ); + ent.v["angles"] = ( 283.296, 288.275, 82.0096 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2843.71, -3257.66, 353 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3168.83, -3357.95, 352.7 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3539.02, -3387.06, 352 ); + ent.v["angles"] = ( 270, 345.714, 59.2841 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3387.14, -3161.83, 364.238 ); + ent.v["angles"] = ( 276, 310, 71 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3006.54, -2975.48, 371.784 ); + ent.v["angles"] = ( 280.813, 261.713, -98.8559 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2804.61, -2857.58, 373.235 ); + ent.v["angles"] = ( 280.627, 200.394, -38.2626 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2445.5, -2833.93, 351.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2450.68, -2731.92, 351.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2446.17, -2620.92, 351.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2449.01, -2502.86, 351.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2446.2, -2391.78, 351.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2560.28, -2833.6, 353.177 ); + ent.v["angles"] = ( 270, 359.951, 0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2658, -2838.55, 354.2 ); + ent.v["angles"] = ( 272.234, 204.524, 153.564 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3109.89, -3148.96, 353.792 ); + ent.v["angles"] = ( 271.951, 252.322, 133.786 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2411.7, -2233.17, 391.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2336.62, -2235.99, 391.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2166.1, -77.9054, 199.079 ); + ent.v["angles"] = ( 283, 138, -92 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2260.05, -191.682, 259.305 ); + ent.v["angles"] = ( 276.585, 116.5, -87.5666 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1613.97, -868.628, 87.849 ); + ent.v["angles"] = ( 271, 270.002, 89.9982 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1573.17, -961.668, 89.6629 ); + ent.v["angles"] = ( 274.467, 26.3489, -26.5931 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1572.37, -1065.19, 97.0635 ); + ent.v["angles"] = ( 277.262, 74.0182, -73.8785 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1646.34, -953.694, 93.1614 ); + ent.v["angles"] = ( 277.072, 134.737, -135.113 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1654.62, -786.629, 89.1833 ); + ent.v["angles"] = ( 271, 270.002, 89.9982 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1492.99, -876.047, 89.8954 ); + ent.v["angles"] = ( 291.023, 357.397, 2.78851 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1577.92, -801.562, 88.5811 ); + ent.v["angles"] = ( 272.236, 296.57, 63.4299 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1594.79, -1156.01, 110.308 ); + ent.v["angles"] = ( 279.047, 80.4123, -66.2089 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1669.24, -1111.69, 104.485 ); + ent.v["angles"] = ( 276.686, 124.846, -110.168 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1671.54, -1225.24, 123.552 ); + ent.v["angles"] = ( 281.4, 96.0336, -81.5713 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1887.8, -131.782, 124.961 ); + ent.v["angles"] = ( 274.471, 243.413, 135.516 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1735.74, -501.35, 99.6427 ); + ent.v["angles"] = ( 274.299, 272.897, 106.15 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1713.27, -663.278, 90.5723 ); + ent.v["angles"] = ( 276.082, 189.428, 170.52 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1688.98, -339.767, 115.081 ); + ent.v["angles"] = ( 275, 323.161, 36.8734 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1732.64, -262.963, 123.818 ); + ent.v["angles"] = ( 273.446, 302.674, 26.1758 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1772.54, -187.08, 126.675 ); + ent.v["angles"] = ( 279.815, 301.542, 20.1458 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1768.61, -309.726, 115.019 ); + ent.v["angles"] = ( 279.497, 213.441, 125.974 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1818.88, -234.87, 122.392 ); + ent.v["angles"] = ( 271.433, 58.9327, -78.6734 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2015.95, 2.04534, 135.971 ); + ent.v["angles"] = ( 275.733, 156.224, -175.946 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1893.44, -486.273, 99.9823 ); + ent.v["angles"] = ( 271.766, 147.015, -166.751 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1531.69, -1250.91, 177.847 ); + ent.v["angles"] = ( 324.024, 38.4498, -58.9118 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1560.63, -1388.53, 207.619 ); + ent.v["angles"] = ( 312.557, 5.68326, 43.4902 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2132.23, 658.324, 189.843 ); + ent.v["angles"] = ( 286.425, 278.352, 73.8569 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2121.61, 604.716, 177.43 ); + ent.v["angles"] = ( 280.768, 259.842, 91.8343 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2115.3, 553.615, 167.628 ); + ent.v["angles"] = ( 277.79, 266.523, 85.2121 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2114.16, 523.587, 153.082 ); + ent.v["angles"] = ( 277.79, 266.523, 85.2121 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2107.01, 476.656, 143.141 ); + ent.v["angles"] = ( 279.043, 292.771, 59.2362 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2088.2, 422.676, 132.894 ); + ent.v["angles"] = ( 282.365, 313.242, 39.1052 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2088.69, 374.004, 130.359 ); + ent.v["angles"] = ( 274.338, 97.58, -107.369 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2092.69, 298.894, 126.662 ); + ent.v["angles"] = ( 275.73, 263.353, 77.2518 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2070.19, 212, 128.976 ); + ent.v["angles"] = ( 273.303, 73.1266, -83.4922 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1981.57, 261.369, 111.934 ); + ent.v["angles"] = ( 293.945, 356.158, -8.97631 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2128.6, 785.538, 222.722 ); + ent.v["angles"] = ( 293.894, 247.964, 148.586 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2151.39, 874.1, 271.302 ); + ent.v["angles"] = ( 294.448, 233.341, -168.06 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2132.79, 708.153, 198.57 ); + ent.v["angles"] = ( 279.771, 259.658, 91.9464 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2078.66, 843.37, 240.044 ); + ent.v["angles"] = ( 296.12, 252.133, 99.7416 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2007.14, 841.782, 235.83 ); + ent.v["angles"] = ( 295.764, 329.357, 49.3951 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2011.36, 969.641, 281.783 ); + ent.v["angles"] = ( 302.965, 311.179, 31.7985 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2157.38, 991.644, 306.45 ); + ent.v["angles"] = ( 285.024, 223.462, 118.112 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2201.35, 934.941, 301.709 ); + ent.v["angles"] = ( 287.112, 209.113, -172.022 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2092.12, 1005.95, 296.818 ); + ent.v["angles"] = ( 282.532, 241.259, 110.079 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2002.73, -231.271, 125.873 ); + ent.v["angles"] = ( 275.603, 286.402, 54.6416 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2057.06, -290.869, 113.887 ); + ent.v["angles"] = ( 275.603, 286.404, 55.6402 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1992.59, -369.705, 110.684 ); + ent.v["angles"] = ( 286.817, 299.003, 97.0871 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1937.7, -422.648, 102.641 ); + ent.v["angles"] = ( 284.835, 298.04, 98.014 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2068.15, -395.119, 110.55 ); + ent.v["angles"] = ( 279.235, 151.714, -115.962 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2118.42, -345.922, 117.847 ); + ent.v["angles"] = ( 280.369, 185.592, -148.356 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2018.44, -479.374, 114.535 ); + ent.v["angles"] = ( 280.345, 120.334, -84.7543 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1655.09, -436.894, 106.234 ); + ent.v["angles"] = ( 278.748, 311.623, 124.8 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1809.41, -392.022, 111.942 ); + ent.v["angles"] = ( 282.864, 242.751, -111.826 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1710.15, -1388.27, 172.457 ); + ent.v["angles"] = ( 289.11, 119.335, -99.0903 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1683.8, -1669.83, 221.487 ); + ent.v["angles"] = ( 302.566, 55.4783, -24.1213 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1626.37, -1570.24, 193.731 ); + ent.v["angles"] = ( 301.446, 50.2248, -19.6654 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1852.57, -1683.38, 274.033 ); + ent.v["angles"] = ( 287.995, 130.87, -80.1598 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2032.19, -1784.49, 335.841 ); + ent.v["angles"] = ( 286.307, 166.537, -78.0757 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2210.71, -1743.75, 392.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2216.58, -1793.65, 391.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2207.87, -1836.18, 392.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2168.25, -1711.42, 384.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2166.38, -1767.27, 384.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2171.22, -1827.9, 384.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2173.55, -1872.45, 384.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2105.82, -1728.07, 365.321 ); + ent.v["angles"] = ( 300, 180, 180 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2112.01, -1899.42, 363.152 ); + ent.v["angles"] = ( 297.358, 199.842, 162.932 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2115.42, -1801.51, 369.679 ); + ent.v["angles"] = ( 299.062, 180.022, -179.326 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2186.3, -1929.14, 372.242 ); + ent.v["angles"] = ( 281.294, 252.423, 112.833 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1760.69, -1566.57, 248.219 ); + ent.v["angles"] = ( 330.763, 40.4594, -18.9409 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1804.06, -1551.37, 234.26 ); + ent.v["angles"] = ( 288.518, 149.089, -116.897 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2235.76, -2212.58, 371.46 ); + ent.v["angles"] = ( 285.102, 167.067, -130.782 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2214.18, -2149.35, 362.599 ); + ent.v["angles"] = ( 287.79, 185.28, 174.928 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2217.25, -2079.91, 364.633 ); + ent.v["angles"] = ( 285.784, 174.869, -175.659 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2209.48, -2031.73, 362.52 ); + ent.v["angles"] = ( 286.738, 199.827, 160.352 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2154.13, -1963.72, 364.575 ); + ent.v["angles"] = ( 285.8, 201.062, 159.166 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3210.67, 795.412, 569.936 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3233.64, 147.105, 562.289 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2288.2, 828.515, 456.209 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2241.42, 341.138, 530.181 ); + ent.v["angles"] = ( 14, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2261.71, 550.367, 532.696 ); + ent.v["angles"] = ( 8, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2108.32, -739.403, 468.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2096.29, -1059.55, 470.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2229.16, 101.232, 282.088 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1562.68, -649.563, 165.623 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1491.8, -1340, 242.044 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2507, -2470.8, 601.272 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3330.63, -1625.15, 562.022 ); + ent.v["angles"] = ( 359, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3746.36, 1416.94, 570.771 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3886.46, 482.37, 302.573 ); + ent.v["angles"] = ( 359, 216, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3812.7, -146.868, 403.947 ); + ent.v["angles"] = ( 357, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3453.04, -2618.88, 627.36 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3683.74, -2963.74, 567.143 ); + ent.v["angles"] = ( 0, 182.998, -1 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2550.15, -2995.04, 456.625 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3001.02, -2667.14, 619.226 ); + ent.v["angles"] = ( 341, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2841.15, -2021.7, 590.125 ); + ent.v["angles"] = ( 358, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3298.04, 1520.3, 507.686 ); + ent.v["angles"] = ( 356, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2504.68, -216.337, 508.125 ); + ent.v["angles"] = ( 358, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1919.92, -803.211, 265.391 ); + ent.v["angles"] = ( 0.994673, 174, -0.104553 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1899.29, -1356.46, 337.359 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_lightning_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 21039.8, -40047.4, 18228.9 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 131.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 7001; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_lightning_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -13763.7, -58199.1, 16443.7 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 7002; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_lightning_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -31130.8, 44879.9, 18839.3 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 307.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 7003; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_lightning_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -58515, 907.609, 42269.4 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 18.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 7004; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3652.63, -1041.24, 518.392 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5005; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3652.63, -1182.69, 520.432 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5006; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3652.63, -750.81, 517.562 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5004; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3652.63, -605.924, 517.272 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5003; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2815.15, 584.929, 596.125 ); + ent.v["angles"] = ( 90, 0, -1 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2818.54, 326.218, 596.125 ); + ent.v["angles"] = ( 90, 0, 1 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5002; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2823.95, 585.55, 596.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6001; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2818.25, 328.157, 596.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3151.31, -771.116, 758.154 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5007; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3152.57, -893.313, 758.434 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5008; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3150.76, -1018.36, 757.994 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5009; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2981.49, -770.546, 720.819 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5010; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2981.55, -899.381, 720.832 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5011; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2986.09, -1019.8, 721.831 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5012; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2800.49, -772.68, 681.024 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5013; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2804.65, -895.649, 681.939 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5014; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2806.05, -1017.29, 682.245 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5015; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2622.56, -775.869, 641.903 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5016; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2625.82, -894.455, 642.62 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5017; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2620.73, -1018.28, 641.502 ); + ent.v["angles"] = ( 283, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5018; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2300.61, -1027.73, 590.125 ); + ent.v["angles"] = ( 270, 21.1127, 158.887 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5019; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2298.93, -1182.6, 590.125 ); + ent.v["angles"] = ( 270, 21.1127, 158.887 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5020; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2201, -458.865, 518.277 ); + ent.v["angles"] = ( 334, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5021; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2200.15, -761.454, 516.57 ); + ent.v["angles"] = ( 334, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5022; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2198.94, -894.747, 514.15 ); + ent.v["angles"] = ( 334, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5023; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2198.53, -1030.06, 513.336 ); + ent.v["angles"] = ( 334, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5024; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2200.73, -1184.52, 517.736 ); + ent.v["angles"] = ( 334, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5025; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2199.64, -1326.53, 515.56 ); + ent.v["angles"] = ( 334, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5026; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2170, -475.943, 380.123 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5027; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2042.04, -854.669, 380.014 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5028; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2042.04, -935.608, 380.211 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5028; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2170, -1309.49, 380.031 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 5029; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_window_gust" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3727.25, -1167.66, 545.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6006; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_window_gust" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3726.61, -1036.29, 544.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6005; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_window_gust" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3722.78, -760.999, 544.088 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6004; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_window_gust" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3723.43, -601.983, 544.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6003; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3155.96, -1018.32, 759.096 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6009; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3167.06, -894.453, 761.624 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6008; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3169.1, -772.392, 762.131 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6007; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2977.96, -772.326, 720.036 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6010; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2978.77, -897.002, 720.221 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6011; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2979.64, -1014.98, 720.386 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6012; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2808.89, -1015.73, 682.833 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6015; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2808.67, -892.727, 682.838 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6014; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2811.45, -774.519, 683.433 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6013; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2631.9, -777.514, 643.957 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6016; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2631.86, -899.159, 643.948 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6017; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2628.45, -1021.75, 643.198 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6018; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2305.53, -1027.74, 588.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6019; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2304.22, -1175.28, 588.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6020; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2827.57, 323.755, 320 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2792.78, 302.703, 320 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2807.34, 607.117, 320 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2772.56, 586.064, 320 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3125.05, -772.312, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6007; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3129.18, -904.968, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6008; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3118.34, -1041.52, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6009; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2952.53, -758.719, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6010; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2950.78, -899.116, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6011; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2945.69, -1056.01, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6012; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2807.33, -753.84, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6013; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2847.38, -880.752, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6014; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2803.71, -1050.76, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6015; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2611.65, -784.761, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6016; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2578.19, -915.489, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6017; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2600.02, -1047.13, 320.125 ); + ent.v["angles"] = ( 270, 1.4321, 132.568 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6018; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2288.24, -1178.19, 320.125 ); + ent.v["angles"] = ( 270, 7.12502, 113.875 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6020; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2294.41, -1042.77, 320.125 ); + ent.v["angles"] = ( 270, 7.12502, 113.875 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6019; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3588.44, -1184.34, 457.125 ); + ent.v["angles"] = ( 270, 359.851, 179.149 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6006; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3598.33, -1043.36, 456.125 ); + ent.v["angles"] = ( 270, 359.851, 179.149 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6005; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3603.47, -765.402, 456.125 ); + ent.v["angles"] = ( 270, 359.851, 179.149 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6004; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3595.91, -607.819, 456.125 ); + ent.v["angles"] = ( 270, 359.851, 179.149 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 6003; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3446.51, 1265.7, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3288.33, 1013.08, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2553.1, 1210.46, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2293.53, 1010.91, 319.806 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2732.3, 1867.09, 288.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3181.28, 1898.16, 288.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3372.71, -245.821, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 167.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3078.48, 62.8625, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 4046.05, -899.27, 319 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3953.91, -1635.27, 319 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3746.81, -1588.63, 320 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3446.92, -1904.83, 456.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3160.87, -1653.54, 456 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3173.61, -2256.4, 456 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2999.53, -2532.03, 620.261 ); + ent.v["angles"] = ( 338, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2786.09, -2647.43, 633.113 ); + ent.v["angles"] = ( 3, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2784.32, -2512.32, 633.513 ); + ent.v["angles"] = ( 360, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2641.83, 1504.47, 563.642 ); + ent.v["angles"] = ( 356, 180, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2440.64, 1227.82, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 349.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2870.7, 681.959, 623.992 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2874.59, 225.487, 623.995 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2741.77, -241.466, 508.001 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3498.66, -309.091, 460.219 ); + ent.v["angles"] = ( 357, 358, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3677.5, -493.221, 685.248 ); + ent.v["angles"] = ( 356.002, 357.995, 0.139827 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3656.42, -736.87, 688.767 ); + ent.v["angles"] = ( 356.002, 357.995, 0.139827 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3663.41, -1323.71, 686.084 ); + ent.v["angles"] = ( 356.002, 357.995, 0.139827 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3667.51, -1040.32, 682.723 ); + ent.v["angles"] = ( 356.002, 357.995, 0.139827 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3868.62, -801.021, 457.125 ); + ent.v["angles"] = ( 357, 358, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3868.49, -988.623, 460.125 ); + ent.v["angles"] = ( 354, 358, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3625.4, -1628.77, 320 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3872.03, -1524.73, 320 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3678.5, -287.467, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3482.64, -1867.04, 456.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3352.4, -2356.24, 456 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3003.48, -2299.03, 456 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2590.87, -2269.11, 457.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2655.66, -1649.01, 456 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2901.48, -1681.08, 456 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3102.71, -1915.32, 456 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3456.13, -2170.92, 598.262 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3010.28, -1960.8, 591.954 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2925.41, -2483.73, 641.835 ); + ent.v["angles"] = ( 351, 358, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2879.08, -2727.84, 633.593 ); + ent.v["angles"] = ( 350.006, 0, -0.352578 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2862.04, -3293.85, 353 ); + ent.v["angles"] = ( 0, 359.97, -0.347226 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2763.53, -2895.95, 361.441 ); + ent.v["angles"] = ( 347.006, 0, -0.356352 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3180.76, -2887.53, 438.385 ); + ent.v["angles"] = ( 355.968, 192.344, -9.44461 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3249.73, -3057.78, 391.704 ); + ent.v["angles"] = ( 354.707, 202.739, -10.0294 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2491.13, -2050.51, 710.203 ); + ent.v["angles"] = ( 357.006, 359.988, -0.347701 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2487.9, -1804.57, 706.202 ); + ent.v["angles"] = ( 354.006, 0, -0.349134 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2260.4, -201.449, 262.592 ); + ent.v["angles"] = ( 359.989, 171.004, -0.208784 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2160.55, -82.9182, 197.975 ); + ent.v["angles"] = ( 356.993, 171.003, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3866.21, 1353.18, 563.345 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1886.41, -1720.6, 291.672 ); + ent.v["angles"] = ( 345.215, 330.096, 0.110719 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1996.19, -1901.78, 323.575 ); + ent.v["angles"] = ( 344.09, 351.76, 1.71682 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1466.62, -1386.24, 262.573 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1559.7, -672.363, 158.596 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2105.41, 560.552, 162.845 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2091.28, 350.864, 129.82 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2106.43, 602.916, 175.598 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2091.49, 354.395, 129.804 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2897.99, 1401.18, 576.357 ); + ent.v["angles"] = ( 356, 358, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3307, 1464.03, 514.125 ); + ent.v["angles"] = ( 359, 358, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_sun1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -226800, -189884, 52587.9 ); + ent.v["angles"] = ( 270, 357.138, 86.8624 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_pipe_gutter_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2965.98, 173.107, 323.125 ); + ent.v["angles"] = ( 273.143, 342.78, -75.8207 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_pipe_gutter_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3082.87, 1761.98, 289.243 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_pipe_gutter_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3512.1, -347.475, 322.029 ); + ent.v["angles"] = ( 271.414, 134.994, -135.002 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_pipe_gutter_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3111.31, 802.297, 321.125 ); + ent.v["angles"] = ( 270, 0.190965, -0.190966 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_pipe_gutter_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2672.68, 801.287, 321.737 ); + ent.v["angles"] = ( 273.013, 3.31781, -8.31019 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_pipe_gutter_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2579.83, -2178.28, 457.473 ); + ent.v["angles"] = ( 271.035, 179.961, 90.0203 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3289.36, -5042.63, 1165.68 ); + ent.v["angles"] = ( 360, 5, -2 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2610.55, 75.2607, 430.081 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2714.17, 815.818, 435.938 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2544.72, 1336.9, 500.634 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3314.69, 865.11, 518.104 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3511.42, 953.866, 520.042 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3780.82, 853.044, 539.584 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3694.58, 846.783, 629.209 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2833.24, 806.486, 517 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2523.96, 813.021, 587.368 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy_lng" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2201.89, 573.124, 511.436 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy_lng" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2200.94, 345.845, 509.457 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2456.86, -2517.19, 571.507 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3029.04, -2697.65, 580.23 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2596.93, -2120.95, 628.675 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2602.11, -1894.12, 627.461 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2833.59, 104.144, 516.747 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2487.06, 96.0294, 587.434 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3708.88, 503.941, 536.4 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_pipe_gutter_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2539.21, 1526.71, 324.371 ); + ent.v["angles"] = ( 274.01, 174.034, -86.01 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2974.1, 659.42, 515.983 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2974.97, 208.728, 517.813 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3741.04, -1165.87, 664.186 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3738.96, -784.9, 661.706 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3738.97, -479.192, 665.19 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3648.14, 1539.94, 318 ); + ent.v["angles"] = ( 270, 356.479, -50.4785 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3779.86, 1606.83, 318 ); + ent.v["angles"] = ( 270, 357.274, -84.2737 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3895.99, 1589.47, 318 ); + ent.v["angles"] = ( 270, 355.236, -111.236 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3988.26, 1515.23, 318 ); + ent.v["angles"] = ( 270, 2.38594, -149.386 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4023.11, 1373.69, 318 ); + ent.v["angles"] = ( 270, 0, 165 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3968.89, 1249.47, 318 ); + ent.v["angles"] = ( 270, 0, 131 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3845.36, 1178.36, 318 ); + ent.v["angles"] = ( 270, 358.091, 107.909 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3180.26, 1412.88, 490.111 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3208.49, 1742.55, 486.425 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3028.84, -2481.21, 579.955 ); + ent.v["angles"] = ( 0, 1, 0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2599.58, -1726.28, 627.684 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3511.31, -318.887, 450.941 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3738.85, -1335.56, 662.027 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2172.25, -2081.71, 681.754 ); + ent.v["angles"] = ( 357, 179, 0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_waterfall01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1838.81, 471.932, -170.716 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_waterfall02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2782.82, 450.194, 281.481 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.61, -433.509, 561.724 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2781.73, -223.881, 439.554 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3017.24, -1394.9, 563.634 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3632.96, -893.265, 575.628 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3520.39, -1374.8, 441.174 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3888.8, -896.447, 440.999 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2624.4, 150.528, 437.838 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2751.65, 762.975, 438.071 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2987.72, -2551.74, 564.396 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2656.23, -2458.26, 564.505 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3416.4, -536.09, 580.947 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.99, -584.489, 580.943 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3416.63, -632.75, 580.941 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.71, -680.362, 580.943 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.59, -728.113, 580.953 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.99, -776.38, 580.955 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.23, -824.431, 580.955 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.56, -968.144, 580.943 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.96, -1015.96, 580.952 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.84, -1063.94, 580.952 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.67, -1112.11, 580.944 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3416.31, -1160.46, 580.953 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.21, -1208, 580.942 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3415.29, -1256.1, 580.941 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3560.36, -536.039, 580.956 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3559.88, -583.886, 580.956 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3559.6, -632.116, 580.952 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3559.13, -680.421, 580.95 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3560, -728.238, 580.949 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3559.53, -776.009, 580.945 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3560.38, -823.971, 580.944 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3488.03, -463.266, 580.954 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3487.84, -1327.34, 580.951 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3344.3, -1327.99, 580.957 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3295.31, -1328.12, 580.955 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3247.91, -1328, 580.941 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3199.75, -1328.33, 580.943 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3152.13, -1327.91, 580.945 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2864.04, -1328.12, 580.946 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2912.21, -1327.8, 580.958 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2960.02, -1328.16, 580.94 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3008.39, -1327.95, 580.949 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3055.99, -1328.06, 580.952 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3103.77, -1328.04, 580.941 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3618.15, -966.04, 445.95 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3617.09, -1109.75, 445.96 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3617.81, -1158.28, 445.949 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3617.51, -1205.93, 445.94 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3616.61, -1254.04, 445.95 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3737.07, -893.996, 445.947 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3689.14, -894.096, 445.955 ); + ent.v["angles"] = ( 89, 269.001, -1.99844 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_pipe_gutter_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3440.57, -1437.51, 320.125 ); + ent.v["angles"] = ( 270, 0, -179 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2057.54, 890.7, 952.498 ); + ent.v["angles"] = ( 270, 0, 1 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1907.61, -311.076, 1493.03 ); + ent.v["angles"] = ( 270, 0, 1 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2361.04, 312.741, 500.362 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3193.93, 394.877, 454.961 ); + ent.v["angles"] = ( 41, 180, -180 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2590.07, 1374.54, 463.373 ); + ent.v["angles"] = ( 48, 225, 0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2644.48, 1318.85, 464.697 ); + ent.v["angles"] = ( 52, 225, 0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3326.65, 845.763, 446.961 ); + ent.v["angles"] = ( 42.9959, 90.2672, 0.489776 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3660.94, -458.65, 568.145 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 42.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3661.15, -1341.74, 567.816 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 42.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3520.72, -1424.37, 432.098 ); + ent.v["angles"] = ( 41, 271, 0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3461.96, -1094.02, 416.264 ); + ent.v["angles"] = ( 43, 271, 0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3151.95, 1468.03, 484.625 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3152.25, 1584.34, 484.625 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3153.03, 1683.81, 484.625 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3329.69, 1676.98, 484.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3328.03, 1565.2, 483.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3329.39, 1479.34, 483.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2960.56, 1683.07, 483.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2959.44, 1467.28, 483.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2960.23, 1568.43, 483.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_rectangle_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2823.39, -225.612, 432.118 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 43.0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2949.01, 1533.92, 461.267 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 42.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2351.88, 608.315, 273.373 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2351.88, 455.895, 273.806 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2351.88, 303.208, 274.522 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2354.88, 600.976, 499.639 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2354.88, 505.95, 501.692 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2354.88, 404.029, 501.749 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2354.88, 310.087, 501.633 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2357.13, 309.969, 499.584 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2357.13, 405.538, 501.118 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2357.13, 508.354, 501.64 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2357.13, 600.27, 500.057 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2784.96, 1740.32, 471.764 ); + ent.v["angles"] = ( 43, 90, 0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3919.8, -894.684, 432.555 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 42.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3794.66, -1218.66, 431.818 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 42.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2302.97, -371.047, 429.001 ); + ent.v["angles"] = ( 42.6, 90, 0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2753.74, 795.268, 441.295 ); + ent.v["angles"] = ( 16, 90, 0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3326.49, 855.314, 454.848 ); + ent.v["angles"] = ( 16, 90, 0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2562.42, 1327.05, 435.508 ); + ent.v["angles"] = ( 30, 226, 0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2607.56, 1273.2, 420.677 ); + ent.v["angles"] = ( 30, 226, 0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2782.23, 1751.44, 482.413 ); + ent.v["angles"] = ( 19, 90, 0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2309.29, -358.84, 433.584 ); + ent.v["angles"] = ( 16, 90, 1 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3790.87, -535.481, 436.573 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 42.0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3582.67, -2141.47, 476.36 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 42.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3711.34, 514.207, 447.481 ); + ent.v["angles"] = ( 43, 270, 0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2519.26, -2406.24, 597.177 ); + ent.v["angles"] = ( 11.9976, 89.9281, 0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3544.36, -3507.43, 449.929 ); + ent.v["angles"] = ( 3.01821, 59.571, -1.81287 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3553.52, -3500.25, 476.533 ); + ent.v["angles"] = ( 354.023, 59.8561, -1.82026 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3511.38, -1436.38, 440.787 ); + ent.v["angles"] = ( 9, 270, 0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3800.4, -1216.48, 438.561 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 19.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3931.09, -888.366, 439.714 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 19.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3805.88, -533.379, 446.894 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 19.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3704.72, 493.377, 448.333 ); + ent.v["angles"] = ( 21, 270, 0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3177.56, 392.591, 465.691 ); + ent.v["angles"] = ( 20.9699, 182.213, 1.15094 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2835.92, -224.335, 439.901 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 21.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3407.11, -368.089, 568.58 ); + ent.v["angles"] = ( 43.9, 90.1386, 0.120855 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2990.87, -3629.94, 552.665 ); + ent.v["angles"] = ( 23.9966, 91.0931, 0.392252 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3593.98, -2141.16, 482.712 ); + ent.v["angles"] = ( 18.973, 3.17252, 1.0324 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_window_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2824.75, 772.625, 503.709 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_window_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2549.72, 772.518, 502.413 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_window_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2940.63, 645.311, 503.195 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_window_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2940.99, 241.255, 501.32 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_window_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2820.88, 138.39, 503.01 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_window_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2544.78, 138.375, 503.609 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_window_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2940.34, 364.312, 500.931 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2948.04, -1440.63, 572.801 ); + ent.v["angles"] = ( 18.997, 271.058, 0.344309 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2941.81, -1423.3, 567.642 ); + ent.v["angles"] = ( 42, 270, -1 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2405.75, 573.203, 71.1382 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 222.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3661.97, -894.547, 564.731 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 39.9 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_window_ray_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2826.26, 772.625, 505.195 ); + ent.v["angles"] = ( 26.9647, 87.6397, -1.42039 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_window_ray_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2551.86, 772.625, 505.559 ); + ent.v["angles"] = ( 27.9847, 88.7434, -0.937363 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_window_ray_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2940.63, 647.096, 506.251 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 24.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_window_ray_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2940.63, 297.078, 500.199 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 24.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_window_ray_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2824.44, 138.375, 503.259 ); + ent.v["angles"] = ( 25, 268, 0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_window_ray_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2545.44, 137.779, 500.514 ); + ent.v["angles"] = ( 26, 268, 0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2391.66, 611.776, 103.031 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 218.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2396.57, 253.641, 76.3186 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_bttm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2235.5, 374.268, -110.141 ); + ent.v["angles"] = ( 357, 168, 0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1306.79, 568.701, -676.571 ); + ent.v["angles"] = ( 344.867, 134.648, 9.63852 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_fst" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1301.05, 579.184, -666.672 ); + ent.v["angles"] = ( 344.835, 214.428, -0.969892 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2902.42, 264.533, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2902.38, 360.376, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2902.38, 456.675, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2902.21, 648.517, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2880.29, 734.71, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2879.96, 174.158, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2783.01, 733.56, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2688.09, 733.84, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2591.59, 733.826, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2495.45, 733.606, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2495.34, 173.999, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2590.97, 173.697, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2784.74, 174.146, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3537.28, -3526.41, 442.718 ); + ent.v["angles"] = ( 38.3295, 47.781, 7.65557 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3523.3, -3514.35, 442.871 ); + ent.v["angles"] = ( 39.0145, 57.0682, 13.484 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3543.61, -3519.54, 465.513 ); + ent.v["angles"] = ( 18.4776, 52.0136, 11.0123 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2517.22, -2421.74, 586.074 ); + ent.v["angles"] = ( 10, 95, 0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2701.04, -2778.22, 584.774 ); + ent.v["angles"] = ( 13.9913, 269.061, 0.498551 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2516.71, -2778.17, 585.529 ); + ent.v["angles"] = ( 13.9913, 269.061, 0.498551 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2984.72, -3641.05, 550.556 ); + ent.v["angles"] = ( 42.87, 89.5384, -3.7218 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1872.9, -228.446, 314.628 ); + ent.v["angles"] = ( 14.9977, 114.965, -0.267934 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1738.99, -303.484, 315.212 ); + ent.v["angles"] = ( 15.9976, 114.96, -0.26924 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1793.12, -417.802, 315.731 ); + ent.v["angles"] = ( 14.9977, 296.035, 0.267942 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1929.44, -339.026, 315.253 ); + ent.v["angles"] = ( 14.9977, 296.035, 0.267942 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2943.06, -1812.14, 898.594 ); + ent.v["angles"] = ( 82, 269, 0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2944.74, -1682.84, 898.483 ); + ent.v["angles"] = ( 84, 89, 180 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3007.78, -1748.38, 898.422 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 81.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2880.25, -1745.33, 898.433 ); + ent.v["angles"] = ( 85, 180, -180 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1874.11, -215.119, 323.655 ); + ent.v["angles"] = ( 15, 116, 0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1746.59, -291.645, 328.851 ); + ent.v["angles"] = ( 15, 116, 0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1798.97, -429.447, 325.798 ); + ent.v["angles"] = ( 15, 279, 0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1934.31, -354.322, 328.017 ); + ent.v["angles"] = ( 11.4846, 294.293, 3.91956 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2750.86, 784.498, 432.981 ); + ent.v["angles"] = ( 40.5918, 91.3119, 0.940854 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2878.58, -1743.57, 901.234 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 87.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2944.42, -1811.47, 898.517 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 87.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3009.25, -1747.08, 898.626 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 87.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2946.59, -1680.37, 898.393 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 87.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2488.4, -2474.09, 570.393 ); + ent.v["angles"] = ( 31.951, 178.536, -1.12694 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2487.37, -2728.05, 571.976 ); + ent.v["angles"] = ( 40.7852, 180.079, 0.196099 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3140.54, -1068.69, 778.076 ); + ent.v["angles"] = ( 32.949, 66.5757, -41.0534 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2960.64, -1073.55, 750.639 ); + ent.v["angles"] = ( 32.949, 66.5757, -41.0534 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2787.47, -1082.96, 718.765 ); + ent.v["angles"] = ( 32.949, 66.5757, -41.0534 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2572.65, -1044.42, 664.627 ); + ent.v["angles"] = ( 33.1569, 63.0048, 2.99854 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3149.58, -911.372, 773.073 ); + ent.v["angles"] = ( 32.949, 66.5757, -41.0534 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2969.56, -938.68, 754.46 ); + ent.v["angles"] = ( 32.949, 66.5757, -41.0534 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2786.79, -931.982, 709.494 ); + ent.v["angles"] = ( 32.949, 66.5757, -41.0534 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2800.86, -809.553, 710.896 ); + ent.v["angles"] = ( 32.949, 66.5757, -41.0534 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2599.22, -954.256, 686.9 ); + ent.v["angles"] = ( 33.1479, 56.4605, 19.7349 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2010.45, -910.178, 394.208 ); + ent.v["angles"] = ( 20.0221, 38.5956, -173.608 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2168.04, -942.698, 504.532 ); + ent.v["angles"] = ( 20.0221, 38.5956, -163.608 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2173.29, -795.487, 520.607 ); + ent.v["angles"] = ( 20.0221, 38.5956, -160.608 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_lg_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2168.17, -1077.79, 543.967 ); + ent.v["angles"] = ( 20.0221, 38.5956, -160.608 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_lg_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2194.26, -1210.9, 556.544 ); + ent.v["angles"] = ( 20.0221, 38.5956, 169.392 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_lg_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2200.12, -1334.96, 523.961 ); + ent.v["angles"] = ( 20.0221, 38.5956, -160.608 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2189.32, -891.1, 492.362 ); + ent.v["angles"] = ( 20.0221, 38.5956, 8.39143 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2193.02, -762.365, 499.763 ); + ent.v["angles"] = ( 20.0221, 38.5956, 8.39143 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_lg_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2177.44, -1021.97, 523.211 ); + ent.v["angles"] = ( 20.022, 38.5956, -1.60847 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_lg_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2164.83, -1185.87, 521.831 ); + ent.v["angles"] = ( 20.022, 38.5956, -1.60847 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_lg_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2184.51, -1323.61, 518.717 ); + ent.v["angles"] = ( 20.022, 38.5956, -1.60847 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3477.63, 744.377, 511.35 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3661.63, 744.133, 511.323 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3672.01, 571.437, 511.303 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3316.68, 743.289, 511.398 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3327.38, 565.932, 516.325 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3477.01, 571.949, 511.312 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2612.1, -1061.28, 655.885 ); + ent.v["angles"] = ( 31.0783, 65.7405, -162.496 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2619.65, -910.818, 655.989 ); + ent.v["angles"] = ( 31.0784, 65.7407, -159.496 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2786.84, -1077.98, 708.262 ); + ent.v["angles"] = ( 31.0784, 65.7407, -159.496 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2823.01, -955.32, 700.916 ); + ent.v["angles"] = ( 31.0784, 65.7407, -159.496 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2979.26, -1046.74, 723.032 ); + ent.v["angles"] = ( 31.0783, 65.7406, -155.496 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3004.75, -943.689, 753.719 ); + ent.v["angles"] = ( 31.0783, 65.7406, -155.496 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3134.99, -1055.34, 762.436 ); + ent.v["angles"] = ( 31.0783, 65.7405, -144.496 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2801.38, 1489.6, 523.002 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2800.69, 1520.69, 522.973 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2717.94, 1506.33, 486.462 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3358.52, -969.8, 569.052 ); + ent.v["angles"] = ( 11.099, 1.01578, 0.115354 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3229.48, 1066.06, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3263.01, -234.375, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3457.47, -3326.07, 358.594 ); + ent.v["angles"] = ( 359, 165, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2946.91, -3904.54, 722.786 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3558.05, -3930.7, 1058.46 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3612.05, -2744, 651.99 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2067.08, -1478.53, 441.206 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1903.98, -430.666, 104.366 ); + ent.v["angles"] = ( 356, 170, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2165.39, 1104.85, 329.093 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3544.4, -4948.18, 1251.61 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 6.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_generator_grays" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2688.72, 455.641, 442.073 ); + ent.v["angles"] = ( 90, 54.5764, -65.4236 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_generator_grays" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2688.43, 455.536, 441.807 ); + ent.v["angles"] = ( 90, 0, -67 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1895.9, 565.687, -167.766 ); + ent.v["angles"] = ( 353, 174, 0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1244.07, 576.876, -693.697 ); + ent.v["angles"] = ( 352.001, 156.99, 0.140534 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2035.49, 402.351, -157.643 ); + ent.v["angles"] = ( 353, 174, 0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1698.96, 605.132, -332.233 ); + ent.v["angles"] = ( 353.608, 198.16, -4.85904 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1854.55, 364.939, -163.948 ); + ent.v["angles"] = ( 12.2948, 156.405, -3.17996 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3146.53, -1254.28, 754.635 ); + ent.v["angles"] = ( 356.034, 180.014, -0.259465 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3335.71, -1736.28, 491.454 ); + ent.v["angles"] = ( 359.034, 180, -0.258879 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2282.31, 19.375, 371.727 ); + ent.v["angles"] = ( 359, 165, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 4092.12, 25.6861, 227.641 ); + ent.v["angles"] = ( 299.012, 166.991, -1.483 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 4014.55, 1070.04, 147.36 ); + ent.v["angles"] = ( 293.795, 181.757, 2.51828 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 4034.02, -1979.78, 161.189 ); + ent.v["angles"] = ( 320.41, 195.549, 1.61723 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3930.39, -1243.23, 38.6635 ); + ent.v["angles"] = ( 283, 177, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3066.92, 1500.46, 562.823 ); + ent.v["angles"] = ( 340.888, 181.296, -5.4186 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3800.89, 1023.33, 307.845 ); + ent.v["angles"] = ( 356.292, 165.145, -2.06136 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3327.88, -2180.56, 659.855 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2730.34, 1019.05, 320.125 ); + ent.v["angles"] = ( 358.024, 7.0048, -0.313043 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2666.99, 13.2197, 320.125 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3840.36, -886.492, 469.125 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3652.03, -1884.81, 367 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3584.13, -2329.73, 367.602 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2729.35, -2605.48, 674.223 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2939.2, -1258.96, 713.811 ); + ent.v["angles"] = ( 340, 358, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1844.41, -2066.98, 130.677 ); + ent.v["angles"] = ( 305.479, 33.6167, -5.24349 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1488.43, -85.7405, -94.2962 ); + ent.v["angles"] = ( 305.096, 324.366, 24.4648 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2148.81, 1365.86, 174 ); + ent.v["angles"] = ( 311.723, 301.631, 4.35761 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3479.9, 69.7155, 577.992 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3393.92, -2166.14, 640.596 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 354.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2898.54, -3727.83, 653.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2599.13, -3497.7, 438.397 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3273.14, -3189.64, 371.75 ); + ent.v["angles"] = ( 0, 359.97, -0.347226 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3250.31, -3669.57, 421 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 6.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1200.31, -797.216, -118.451 ); + ent.v["angles"] = ( 303.009, 1.71394, -1.07919 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2687.87, 174.395, 543.875 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 638.634, 961.201, 168.752 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 5679.35, 993.631, 155.872 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 735.897, -3419.67, 220.894 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -26.8205, -1383.48, 242.054 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2891.21, 3493.35, 248 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 5009.29, -3159.64, 321.414 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 6261.82, -1324.44, 236.601 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 638.634, 961.201, 168.752 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 5679.35, 993.631, 155.872 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 735.897, -3419.67, 220.894 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -26.8205, -1383.48, 242.054 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2891.21, 3493.35, 248 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 5009.29, -3159.64, 321.414 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_uplink_rain_med_fast_os_vista" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 6261.82, -1324.44, 236.601 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3233.67, 1272.61, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 4.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3628.61, 1076.71, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_upl_rain_gust_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2860.24, 1062.4, 320.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3017.58, -2551.49, 567.224 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 42.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3028.01, -2556.53, 580.353 ); + ent.v["angles"] = ( 18.973, 3.17252, 1.0324 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1747.69, -371.353, 315.133 ); + ent.v["angles"] = ( 15, 215, 0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2567.28, -2114.59, 576.162 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 88.0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2740.27, -1165.56, 562.277 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2612.3, -1166.33, 562.446 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2483.58, -1168.2, 562.438 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2867.96, -1167.72, 562.468 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2994.64, -1166.52, 562.419 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3124.06, -1164.4, 562.41 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2450.1, -963.719, 561.481 ); + ent.v["angles"] = ( 90, 180, 178 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2449.89, -835.767, 561.508 ); + ent.v["angles"] = ( 90, 0, -1 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2739.31, -628.267, 561.481 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2611.53, -626.74, 561.429 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2482.33, -625.875, 561.467 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3292.49, -1327.71, 448.875 ); + ent.v["angles"] = ( 90, 180, -179 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3774.4, -372.242, 433.634 ); + ent.v["angles"] = ( 16, 95, 0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3775.66, -355.62, 448.144 ); + ent.v["angles"] = ( 11.9976, 89.9281, -1 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3414.04, -355.076, 577.001 ); + ent.v["angles"] = ( 11.9976, 89.9281, -1 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3330.07, 847.411, 448.407 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2750.21, 784.602, 432.931 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3193.35, 394.038, 455.554 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2701.39, -2421.88, 585.312 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2518.01, -2421.92, 585.018 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2699.54, -2778.23, 586.122 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2943.67, -1433.41, 566.958 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1793.24, -417.901, 316.191 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1876.85, -226.804, 315.052 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2647.23, 1318.38, 463.205 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3714.34, 513.339, 448.347 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2823.92, -225.783, 431.642 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3408.79, -362.614, 567.01 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3588.14, -2144.4, 474.095 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2784.65, 1751.88, 469.64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2588.01, 1376.51, 463.901 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3470.19, -126.583, 433.483 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3920.17, -896.397, 431.918 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3520.14, -1425.21, 433.069 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3017.15, -2552.36, 566.764 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1926.76, -339.881, 313.908 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1740.11, -302.663, 316.446 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2566.61, -1984.25, 576.152 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 89.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2565.88, -1882.2, 576.158 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 88.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2567.25, -1779.98, 576.159 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 89.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3673.68, -1342.69, 567.442 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3661.37, -455.664, 567.63 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3661.91, -894.117, 564.75 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2326, -2170.21, 536.667 ); + ent.v["angles"] = ( 0, 90, 90 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3773.65, -370.826, 434.251 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3738.4, 1461.08, 515.92 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3738.59, 1320.72, 516.327 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3878.09, 1320.41, 516.584 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3879.14, 1460.53, 516.166 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2497.65, -1565.42, 555.583 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 89.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2835.73, 785.691, 596.712 ); + ent.v["angles"] = ( 89, 269.001, -179.999 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3365.49, 1465.38, 485.456 ); + ent.v["angles"] = ( 82.0703, 1.06083, 0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3364.25, 1576.03, 485.581 ); + ent.v["angles"] = ( 82.0703, 1.06083, 0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3365.54, 1687.88, 485.464 ); + ent.v["angles"] = ( 80.0701, 1.06083, 0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2947.53, 1323.95, 465.596 ); + ent.v["angles"] = ( 86.0703, 1.06093, 0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3216.15, -624.56, 562.515 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3087.43, -627.051, 562.442 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2959.56, -628.339, 562.419 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_roof_spill_splash_xshrt" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3769.85, 859.714, 312.33 ); + ent.v["angles"] = ( 0, 94, 3 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3326.86, 413.644, 514.384 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_blue" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3327.34, 221.83, 514.415 ); + ent.v["angles"] = ( 90, 182.261, 172.261 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3802.06, -1217.94, 431.603 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3799.41, -535.69, 435.268 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3535.59, -3515.08, 440.302 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3549.54, -3522.36, 465.993 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2984.68, -3638.38, 550.642 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2979.9, 489.025, 584.433 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 87.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3192.67, -0.733948, 495.467 ); + ent.v["angles"] = ( 87, 359, 180 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3314.4, -123.48, 486.63 ); + ent.v["angles"] = ( 88, 271, 0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2508.79, -1403.91, 559.435 ); + ent.v["angles"] = ( 86.9221, 285.568, -166.707 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2459.33, -388.164, 434.112 ); + ent.v["angles"] = ( 89, 88.9989, 179.999 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2463.35, -388.286, 564.318 ); + ent.v["angles"] = ( 89, 88.9989, 179.999 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2657.51, -387.155, 564.093 ); + ent.v["angles"] = ( 89, 88.9989, 179.999 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2795.29, -580.639, 564.116 ); + ent.v["angles"] = ( 89, 88.9989, 179.999 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2274.68, -388.055, 564.066 ); + ent.v["angles"] = ( 89, 88.9989, 179.999 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3324.31, -1073.95, 545.179 ); + ent.v["angles"] = ( 90, 0, 180 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3326.28, -879.715, 546.352 ); + ent.v["angles"] = ( 89, 180, 0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2731.64, -470.318, 421.55 ); + ent.v["angles"] = ( 89, 89.0067, -90.9904 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2689.24, 813.23, 584.131 ); + ent.v["angles"] = ( 89, 269.001, -179.999 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2540.74, 786.614, 597.017 ); + ent.v["angles"] = ( 89, 269, -180 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2557.83, 1649.72, 464.661 ); + ent.v["angles"] = ( 90, 0, 180 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3042.32, -1328.95, 448.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2848.63, -1329.33, 448.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2690.67, 99.9502, 583.895 ); + ent.v["angles"] = ( 90, 303.785, 33.7846 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2835.79, 126.446, 597.654 ); + ent.v["angles"] = ( 90, 303.785, 33.7846 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2539.37, 126.216, 596.738 ); + ent.v["angles"] = ( 90, 303.785, 33.7846 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3009.78, 2657.43, 236.582 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -1; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3296.22, 2813.38, 236.641 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -3; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3464.34, 3198.94, 236.907 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -1; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3296.97, 3583.83, 235.657 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -3; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2812.71, 2657.35, 236.368 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -1; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2527.11, 2813.08, 237.006 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -3; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2359.99, 3198.51, 235.603 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -1; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2525.95, 3583.82, 235.208 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -2; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3843.6, 712.485, 431.667 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1780.67, -1500.64, 215.981 ); + ent.v["angles"] = ( 287.701, 143.213, -111.277 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2184.77, -2010.49, 368.128 ); + ent.v["angles"] = ( 286.738, 199.827, 160.352 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2415.14, -2032.5, 586.446 ); + ent.v["angles"] = ( 90, 180, -90 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2320.32, -2030.8, 586.517 ); + ent.v["angles"] = ( 90, 180, -90 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2319.48, -1839.7, 586.533 ); + ent.v["angles"] = ( 90, 180, -90 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2415.42, -1840.7, 586.568 ); + ent.v["angles"] = ( 90, 180, -90 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_beacon_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2911.94, 3750.4, 235.324 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -3; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2766.4, -1522.78, 555.981 ); + ent.v["angles"] = ( 89, 0, 90 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2900.13, -710.16, 583.42 ); + ent.v["angles"] = ( 89, 88.9989, 179.999 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2263.95, -1405.44, 562.252 ); + ent.v["angles"] = ( 88.7786, 307.686, -142.601 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2860.67, 1419.32, 505.692 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2717.54, 1371.51, 506.439 ); + ent.v["angles"] = ( 90, 0, -1 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2713.89, 1660.05, 506.501 ); + ent.v["angles"] = ( 90, 0, -1 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2859.86, 1609.59, 506.493 ); + ent.v["angles"] = ( 90, 6.82842, -83.1716 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3710.94, 842.765, 441.59 ); + ent.v["angles"] = ( 89, 269.001, -179.999 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_waterfall_vista" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4816.73, 1666.45, -1332.04 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2719.81, -200.111, 442.41 ); + ent.v["angles"] = ( 90, 0, -1 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2591.82, -199.66, 442.372 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2587.52, -327.324, 442.388 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2719.44, -327.046, 442.393 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 90.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3590.45, 0.530397, 498.463 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 42.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3597.12, 0.783489, 496.05 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3594.73, 1.78948, 498.904 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 19.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2120.85, -992.157, 448.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2119.18, -799.892, 448.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 1 ), 90.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_yllw_ribbon" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3716.42, -1149.08, 316 ); + ent.v["angles"] = ( 283.198, 268.636, 87.3101 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_yllw_ribbon" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3717.97, -1165.89, 317 ); + ent.v["angles"] = ( 307.034, 304.402, 84.0626 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_blue_ribbon" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2516.83, 177.232, 444.875 ); + ent.v["angles"] = ( 59.9688, 23.6611, 142.454 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_blue_ribbon" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2501.88, 163.664, 444.875 ); + ent.v["angles"] = ( 81.3319, 292.048, -137.69 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_blue_ribbon" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2481.79, 174.633, 444.875 ); + ent.v["angles"] = ( 72.1109, 107.254, -136.205 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3336.12, -3690.73, 441.488 ); + ent.v["angles"] = ( 30.3973, 254.117, -5.36284 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3352.13, -3695.58, 439 ); + ent.v["angles"] = ( 23.6594, 258.087, -3.89569 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_recessed_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3330.07, -3698.78, 465 ); + ent.v["angles"] = ( 17.6727, 258.514, -3.74476 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2726.34, -2609.72, 573.865 ); + ent.v["angles"] = ( 90, 0, -1 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2227.58, -385.139, 437.403 ); + ent.v["angles"] = ( 89, 88.9987, 177.999 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2817.56, -1404.78, 559.692 ); + ent.v["angles"] = ( 86.9221, 285.568, -166.707 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3104.21, -1405.86, 556.982 ); + ent.v["angles"] = ( 86.9221, 285.569, -165.706 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3592.37, -1406.25, 555.203 ); + ent.v["angles"] = ( 88.3686, 219.881, 128.611 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3339.6, -619.213, 557.677 ); + ent.v["angles"] = ( 89, 180, -179 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3339.22, -1143.37, 559.54 ); + ent.v["angles"] = ( 89, 180, -179 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3027.63, -1226.82, 563.208 ); + ent.v["angles"] = ( 86.9221, 285.572, 15.2971 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2370.34, -627.876, 556.139 ); + ent.v["angles"] = ( 89, 89.001, 89.0103 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3325.9, -691.829, 546.293 ); + ent.v["angles"] = ( 89, 180, 0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3098.57, -1427.3, 578.914 ); + ent.v["angles"] = ( 89, 0, 90 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2443.42, -1683.2, 560.04 ); + ent.v["angles"] = ( 89, 88.9989, 179.999 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2784.87, 1717.74, 475.695 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_exit_sign" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2630.37, 1366.49, 475.987 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -21; +} diff --git a/MP/Maps/Uplink/maps/mp/mp_uplink.gsc b/MP/Maps/Uplink/maps/mp/mp_uplink.gsc new file mode 100644 index 0000000..f1e035e --- /dev/null +++ b/MP/Maps/Uplink/maps/mp/mp_uplink.gsc @@ -0,0 +1,93 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_globallogic_utils; +#include maps\mp\mp_uplink_fx; +#include maps\mp\_load; +#include maps\mp\mp_uplink_amb; +#include maps\mp\_compass; +#include maps\mp\gametypes\_spawning; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_uplink_fx::main(); + precachemodel( "collision_physics_128x128x10" ); + precachemodel( "collision_physics_256x256x10" ); + precachemodel( "collision_physics_64x64x10" ); + precachemodel( "collision_physics_32x32x10" ); + maps\mp\_load::main(); + maps\mp\mp_uplink_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_uplink" ); + setdvar( "compassmaxrange", "2100" ); + registerclientfield( "world", "trigger_lightning", 1, 1, "int" ); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + spawncollision( "collision_physics_128x128x10", "collider", ( 1661, 345.5, 298.5 ), ( 0, 0, 0 ) ); + spawncollision( "collision_physics_128x128x10", "collider", ( 1661, 345.5, 313.5 ), ( 0, 0, 0 ) ); + spawncollision( "collision_physics_256x256x10", "collider", ( 3257, -3.5, 872.5 ), ( 360, 270, 90 ) ); + spawncollision( "collision_physics_256x256x10", "collider", ( 3394, -136.5, 872.5 ), ( 270, 183.902, 86.0983 ) ); + spawncollision( "collision_physics_256x256x10", "collider", ( 3270.5, -3.5, 872.5 ), ( 360, 270, 90 ) ); + spawncollision( "collision_physics_256x256x10", "collider", ( 3394, 129.5, 872.5 ), ( 270, 183.902, 86.0983 ) ); + spawncollision( "collision_physics_256x256x10", "collider", ( 3399.5, 1, 990 ), ( 1.12, 270, 180 ) ); + spawncollision( "collision_physics_128x128x10", "collider", ( 2343.5, 865.5, 320.5 ), vectorscale( ( 0, 1, 0 ), 332.7 ) ); + spawncollision( "collision_physics_64x64x10", "collider", ( 2291, 904, 316 ), ( 355.461, 27.1924, -2.32818 ) ); + spawncollision( "collision_physics_32x32x10", "collider", ( 3049.5, -3452, 339 ), ( 78.6193, 281.502, -105.573 ) ); + maps\mp\gametypes\_spawning::level_use_unified_spawning( 1 ); + level.remotemotarviewdown = 50; + level thread gondola_sway(); + glasses = getstructarray( "glass_shatter_on_spawn", "targetname" ); + + for ( i = 0; i < glasses.size; i++ ) + radiusdamage( glasses[i].origin, 64, 101, 100 ); +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2350", reset_dvars ); + ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1000", reset_dvars ); +} + +gondola_sway() +{ + gondola_cab = getent( "gondola_cab", "targetname" ); + gondola_cab setmovingplatformenabled( 1 ); + + while ( true ) + { + randomswingangle = randomfloatrange( 0.25, 0.5 ); + randomswingtime = randomfloatrange( 2.5, 4.0 ); + gondola_cab rotateto( ( randomswingangle * 0.5, randomswingangle * 0.6, randomswingangle * 0.8 ), randomswingtime, randomswingtime * 0.3, randomswingtime * 0.3 ); + gondola_cab playsound( "amb_gondola_swing" ); + wait( randomswingtime ); + gondola_cab rotateto( ( randomswingangle * 0.5 * -1, randomswingangle * -1 * 0.6, randomswingangle * 0.8 * -1 ), randomswingtime, randomswingtime * 0.3, randomswingtime * 0.3 ); + gondola_cab playsound( "amb_gondola_swing_back" ); + wait( randomswingtime ); + gondola_cab destroy_corpses(); + } +} + +destroy_corpses() +{ + time = gettime(); + corpses = getcorpsearray(); + + for ( i = 0; i < corpses.size; i++ ) + { + if ( corpses[i].birthtime + 3000 < time ) + { + if ( distance2dsquared( corpses[i].origin, self.origin ) < 10000 ) + corpses[i] delete(); + } + } +} diff --git a/MP/Maps/Uplink/maps/mp/mp_uplink_amb.gsc b/MP/Maps/Uplink/maps/mp/mp_uplink_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Uplink/maps/mp/mp_uplink_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Uplink/maps/mp/mp_uplink_fx.gsc b/MP/Maps/Uplink/maps/mp/mp_uplink_fx.gsc new file mode 100644 index 0000000..2b63936 --- /dev/null +++ b/MP/Maps/Uplink/maps/mp/mp_uplink_fx.gsc @@ -0,0 +1,111 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_uplink_fx; + +main() +{ + precache_fxanim_props(); + precache_fxanim_props_dlc3(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_uplink_fx::main(); +} + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_uplink_rain_med_fast_os"] = loadfx( "weather/fx_mp_uplink_rain_med_fast_os" ); + level._effect["fx_mp_uplink_rain_med_fast_os_vista"] = loadfx( "weather/fx_mp_uplink_rain_med_fast_os_vista" ); + level._effect["fx_mp_uplink_rain_med_fast_neg_os"] = loadfx( "weather/fx_mp_uplink_rain_med_fast_neg_os" ); + level._effect["fx_mp_uplink_rain_med_fast_neg_os_vista"] = loadfx( "weather/fx_mp_uplink_rain_med_fast_neg_os_vista" ); + level._effect["fx_mp_upl_rain_gust_md"] = loadfx( "maps/mp_maps/fx_mp_upl_rain_gust_md" ); + level._effect["fx_mp_upl_rain_gust_lg"] = loadfx( "maps/mp_maps/fx_mp_upl_rain_gust_lg" ); + level._effect["fx_mp_upl_rain_gust_lg_neg"] = loadfx( "maps/mp_maps/fx_mp_upl_rain_gust_lg" ); + level._effect["fx_mp_upl_rain_gust_md_neg"] = loadfx( "maps/mp_maps/fx_mp_upl_rain_gust_md_neg" ); + level._effect["fx_mp_upl_rain_splash_50"] = loadfx( "maps/mp_maps/fx_mp_upl_rain_splash_50" ); + level._effect["fx_mp_upl_rain_splash_100"] = loadfx( "maps/mp_maps/fx_mp_upl_rain_splash_100" ); + level._effect["fx_mp_upl_rain_splash_200"] = loadfx( "maps/mp_maps/fx_mp_upl_rain_splash_200" ); + level._effect["fx_mp_upl_rain_splash_300"] = loadfx( "maps/mp_maps/fx_mp_upl_rain_splash_300" ); + level._effect["fx_mp_upl_rain_splash_400"] = loadfx( "maps/mp_maps/fx_mp_upl_rain_splash_400" ); + level._effect["fx_water_pipe_gutter_md"] = loadfx( "water/fx_water_pipe_gutter_md" ); + level._effect["fx_mp_water_roof_spill_lg_hvy"] = loadfx( "maps/mp_maps/fx_mp_water_roof_spill_lg_hvy" ); + level._effect["fx_mp_water_roof_spill_lg_hvy_lng"] = loadfx( "maps/mp_maps/fx_mp_water_roof_spill_lg_hvy_lng" ); + level._effect["fx_mp_water_roof_spill_md_hvy"] = loadfx( "maps/mp_maps/fx_mp_water_roof_spill_md_hvy" ); + level._effect["fx_mp_water_roof_spill_splash_shrt"] = loadfx( "maps/mp_maps/fx_mp_water_roof_spill_splash_shrt" ); + level._effect["fx_mp_water_roof_spill_splash_xshrt"] = loadfx( "maps/mp_maps/fx_mp_water_roof_spill_splash_xshrt" ); + level._effect["fx_mp_fog_cool_ground"] = loadfx( "maps/mp_maps/fx_mp_fog_cool_ground" ); + level._effect["fx_mp_distant_cloud_vista"] = loadfx( "maps/mp_maps/fx_mp_upl_distant_cloud_vista" ); + level._effect["fx_mp_uplink_lightning_lg"] = loadfx( "weather/fx_mp_uplink_lightning_lg" ); + level._effect["fx_mp_upl_window_rain1_splash"] = loadfx( "maps/mp_maps/fx_mp_upl_window_rain1_splash" ); + level._effect["fx_mp_uplink_rain_window_roof_med"] = loadfx( "weather/fx_mp_uplink_rain_window_roof_med" ); + level._effect["fx_mp_uplink_rain_window_gust"] = loadfx( "weather/fx_mp_uplink_rain_window_gust" ); + level._effect["fx_mp_upl_cloud_geo"] = loadfx( "maps/mp_maps/fx_mp_upl_cloud_geo" ); + level._effect["fx_lf_mp_uplink_sun1"] = loadfx( "lens_flares/fx_lf_mp_uplink_sun1" ); + level._effect["fx_lf_mp_uplink_anamorphic"] = loadfx( "lens_flares/fx_lf_mp_uplink_anamorphic" ); + level._effect["fx_lf_mp_uplink_anamorphic2"] = loadfx( "lens_flares/fx_lf_mp_uplink_anamorphic2" ); + level._effect["fx_mp_upl_rain_lit_corona"] = loadfx( "maps/mp_maps/fx_mp_upl_rain_lit_corona" ); + level._effect["fx_drone_rectangle_light"] = loadfx( "light/fx_light_flour_glow_yellow" ); + level._effect["fx_light_flour_glow_yellow_sm"] = loadfx( "light/fx_light_flour_glow_yellow_sm" ); + level._effect["fx_light_flour_glow_yellow_xsm"] = loadfx( "light/fx_light_flour_glow_yellow_xsm" ); + level._effect["fx_drone_rectangle_light_03"] = loadfx( "light/fx_drone_rectangle_light_03" ); + level._effect["fx_drone_rectangle_light_blue"] = loadfx( "maps/mp_maps/fx_mp_upl_rectangle_light_blue" ); + level._effect["fx_light_beacon_yellow"] = loadfx( "light/fx_light_beacon_yellow" ); + level._effect["fx_light_beacon_red_blink_fst"] = loadfx( "light/fx_light_beacon_red_blink_fst" ); + level._effect["fx_light_beacon_red_blink_fst_sm"] = loadfx( "light/fx_light_beacon_red_blink_fst_sm" ); + level._effect["fx_light_exit_sign"] = loadfx( "light/fx_light_exit_sign_gLow" ); + level._effect["fx_light_recessed_cool"] = loadfx( "maps/mp_maps/fx_mp_upl_light_recessed_cool" ); + level._effect["fx_light_recessed_blue"] = loadfx( "light/fx_light_recessed_blue" ); + level._effect["fx_light_window_glow"] = loadfx( "light/fx_light_window_glow" ); + level._effect["fx_mp_upl_window_ray_cool"] = loadfx( "maps/mp_maps/fx_mp_upl_window_ray_cool" ); + level._effect["fx_light_floodlight_sqr_wrm"] = loadfx( "maps/mp_maps/fx_mp_upl_floodlight_sqr_warm" ); + level._effect["fx_light_floodlight_sqr_cool"] = loadfx( "maps/mp_maps/fx_mp_upl_floodlight_sqr_cool" ); + level._effect["fx_light_floodlight_sqr_cool_thin"] = loadfx( "maps/mp_maps/fx_mp_upl_floodlight_sqr_cool_thin" ); + level._effect["fx_light_floodlight_sqr_cool_sm"] = loadfx( "maps/mp_maps/fx_mp_upl_floodlight_sqr_cool_sm" ); + level._effect["fx_light_floodlight_sqr_cool_md"] = loadfx( "maps/mp_maps/fx_mp_upl_floodlight_sqr_cool_md" ); + level._effect["fx_mp_upl_floodlight_yellow"] = loadfx( "maps/mp_maps/fx_mp_upl_floodlight_yellow" ); + level._effect["fx_upl_light_ray_sun_window_1s"] = loadfx( "light/fx_upl_light_ray_sun_window_1s" ); + level._effect["fx_upl_light_ray_sun_window_lg_1s"] = loadfx( "light/fx_upl_light_ray_sun_window_lg_1s" ); + level._effect["fx_mp_upl_generator_grays"] = loadfx( "maps/mp_maps/fx_mp_upl_generator_grays" ); + level._effect["fx_light_flour_glow_v_shape_cool_sm"] = loadfx( "light/fx_light_flour_glow_v_shape_cool_sm" ); + level._effect["fx_light_flour_glow_v_shape_cool"] = loadfx( "light/fx_light_upl_flour_glow_v_shape_cool" ); + level._effect["fx_light_gray_yllw_ribbon"] = loadfx( "light/fx_light_gray_yllw_ribbon" ); + level._effect["fx_light_gray_blue_ribbon"] = loadfx( "light/fx_light_gray_blue_ribbon" ); + level._effect["fx_mp_upl_waterfall01"] = loadfx( "maps/mp_maps/fx_mp_upl_waterfall01" ); + level._effect["fx_mp_upl_waterfall02"] = loadfx( "maps/mp_maps/fx_mp_upl_waterfall02" ); + level._effect["fx_mp_upl_waterfall_splash_bttm"] = loadfx( "maps/mp_maps/fx_mp_upl_waterfall_splash_bttm" ); + level._effect["fx_mp_upl_waterfall_splash_fst"] = loadfx( "maps/mp_maps/fx_mp_upl_waterfall_splash_fst" ); + level._effect["fx_mp_upl_waterfall_splash_md"] = loadfx( "maps/mp_maps/fx_mp_upl_waterfall_splash_md" ); + level._effect["fx_mp_upl_waterfall_vista"] = loadfx( "maps/mp_maps/fx_mp_upl_waterfall_vista" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["ant_rooftop"] = %fxanim_gp_antenna_rooftop_anim; +} + +#using_animtree("fxanim_props_dlc3"); + +precache_fxanim_props_dlc3() +{ + level.scr_anim["fxanim_props_dlc3"]["uplink_gate"] = %fxanim_mp_uplink_gate_anim; + level.scr_anim["fxanim_props_dlc3"]["uplink_gate_b"] = %fxanim_mp_uplink_gate_b_anim; + level.scr_anim["fxanim_props_dlc3"]["cliff_sign"] = %fxanim_mp_uplink_cliff_sign_anim; + level.scr_anim["fxanim_props_dlc3"]["radar01"] = %fxanim_mp_uplink_vista_radar01_anim; + level.scr_anim["fxanim_props_dlc3"]["radar02"] = %fxanim_mp_uplink_vista_radar02_anim; + level.scr_anim["fxanim_props_dlc3"]["radar03"] = %fxanim_mp_uplink_vista_radar03_anim; + level.scr_anim["fxanim_props_dlc3"]["radar04"] = %fxanim_mp_uplink_vista_radar04_anim; + level.scr_anim["fxanim_props_dlc3"]["radar05"] = %fxanim_mp_uplink_vista_radar05_anim; + level.scr_anim["fxanim_props_dlc3"]["sat_dish2"] = %fxanim_gp_satellite_dish2_anim; + level.scr_anim["fxanim_props_dlc3"]["ant_rooftop2_small"] = %fxanim_gp_antenna_rooftop2_small_anim; + level.scr_anim["fxanim_props_dlc3"]["fence01"] = %fxanim_mp_uplink_fence01_anim; + level.scr_anim["fxanim_props_dlc3"]["fence02"] = %fxanim_mp_uplink_fence02_anim; + level.scr_anim["fxanim_props_dlc3"]["vines_01"] = %fxanim_mp_uplink_vines_01_anim; + level.scr_anim["fxanim_props_dlc3"]["vines_02"] = %fxanim_mp_uplink_vines_02_anim; +} diff --git a/MP/Maps/Vertigo/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Vertigo/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Vertigo/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Vertigo/aitype/enemy_dog_mp.gsc b/MP/Maps/Vertigo/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Vertigo/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Vertigo/character/character_mp_german_shepherd.gsc b/MP/Maps/Vertigo/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Vertigo/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Vertigo/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Vertigo/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Vertigo/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Vertigo/clientscripts/mp/_fxanim_dlc.csc b/MP/Maps/Vertigo/clientscripts/mp/_fxanim_dlc.csc new file mode 100644 index 0000000..9d3d3be --- /dev/null +++ b/MP/Maps/Vertigo/clientscripts/mp/_fxanim_dlc.csc @@ -0,0 +1,239 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; + +fxanim_init_dlc( localclientnum ) +{ + a_fxanims = getentarray( localclientnum, "fxanim_dlc", "targetname" ); + assert( a_fxanims.size <= level.fxanim_max_anims ); + + for ( i = 0; i < a_fxanims.size; i++ ) + { + if ( isdefined( a_fxanims[i].fxanim_parent ) ) + { + parent = getent( localclientnum, a_fxanims[i].fxanim_parent, "targetname" ); + a_fxanims[a_fxanims.size] = parent; + a_fxanims[i] thread _fxanim_model_link( localclientnum ); + continue; + } + + a_fxanims[i] thread fxanim_think( localclientnum ); + } + + if ( isdefined( level.fx_anim_level_dlc_init ) ) + level thread [[ level.fx_anim_level_dlc_init ]]( localclientnum ); +} + +#using_animtree("fxanim_props_dlc"); + +fxanim_think( localclientnum, random_wait, random_speed ) +{ + self waittill_dobj( localclientnum ); + self thread _fxanim_hide(); + self _fxanim_wait(); + self useanimtree( #animtree ); + n_anim_count = self _fxanim_get_anim_count(); + self notify( "fxanim_start" ); + + for ( n_current_anim = 0; n_current_anim < n_anim_count; n_current_anim++ ) + { + str_scene = self _fxanim_get_scene_name( n_current_anim ); + + if ( !self _fxanim_modifier( str_scene ) ) + { + self _fxanim_animate( str_scene ); + self _fxanim_play_fx( localclientnum ); + } + + self _fxanim_change_anim( n_current_anim ); + } +} + +_fxanim_hide() +{ + if ( isdefined( self.fxanim_hide ) && self.fxanim_hide ) + { + self hide(); + + self waittill( "fxanim_start" ); + + self show(); + } +} + +_fxanim_modifier( str_scene ) +{ + switch ( str_scene ) + { + case "delete": + self delete(); + break; + case "hide": + self hide(); + break; + default: + return false; + break; + } + + return true; +} + +_fxanim_wait() +{ + if ( isdefined( self.fxanim_waittill_1 ) ) + { + if ( isdefined( self.fxanim_waittill_1 ) ) + _fxanim_change_anim( -1 ); + } + + if ( isdefined( self.fxanim_wait ) ) + wait( self.fxanim_wait ); + else if ( isdefined( self.fxanim_wait_min ) && isdefined( self.fxanim_wait_max ) ) + { + n_wait_time = randomfloatrange( self.fxanim_wait_min, self.fxanim_wait_max ); + wait( n_wait_time ); + } +} + +_fxanim_change_anim( n_fxanim_id ) +{ + str_waittill = undefined; + + if ( n_fxanim_id == -1 && isdefined( self.fxanim_waittill_1 ) ) + str_waittill = self.fxanim_waittill_1; + else if ( n_fxanim_id == 0 && isdefined( self.fxanim_waittill_2 ) ) + str_waittill = self.fxanim_waittill_2; + else if ( n_fxanim_id == 1 && isdefined( self.fxanim_waittill_3 ) ) + str_waittill = self.fxanim_waittill_3; + + if ( !isdefined( str_waittill ) && n_fxanim_id != -1 ) + self _fxanim_wait_for_anim_to_end( n_fxanim_id ); + else + { + a_changer = strtok( str_waittill, "_" ); + + level waittill( str_waittill ); + } +} + +_fxanim_wait_for_anim_to_end( n_fxanim_id ) +{ + str_scene = _fxanim_get_scene_name( n_fxanim_id ); + + if ( issubstr( str_scene, "_loop" ) ) + self waittillmatch( "looping anim", "end" ); + else + self waittillmatch( "single anim", "end" ); +} + +_fxanim_animate( str_scene ) +{ + if ( !isdefined( level.scr_anim["fxanim_props_dlc"][str_scene] ) ) + { +/# + if ( isdefined( str_scene ) ) + println( "Error: fxanim entity at " + self.origin + " is missing animation: " + str_scene ); + else + println( "Error: fxanim entity at " + self.origin + " is missing animation" ); +#/ + return; + } + + self animscripted( level.scr_anim["fxanim_props_dlc"][str_scene], 1.0, 0.0, 1.0 ); +} + +_fxanim_play_fx( localclientnum ) +{ + if ( isdefined( self.fxanim_fx_1 ) ) + { + assert( isdefined( self.fxanim_fx_1_tag ), "KVP fxanim_fx_1_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_1 ), self, self.fxanim_fx_1_tag ); + } + + if ( isdefined( self.fxanim_fx_2 ) ) + { + assert( isdefined( self.fxanim_fx_2_tag ), "KVP fxanim_fx_2_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_2 ), self, self.fxanim_fx_2_tag ); + } + + if ( isdefined( self.fxanim_fx_3 ) ) + { + assert( isdefined( self.fxanim_fx_3_tag ), "KVP fxanim_fx_3_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_3 ), self, self.fxanim_fx_3_tag ); + } + + if ( isdefined( self.fxanim_fx_4 ) ) + { + assert( isdefined( self.fxanim_fx_4_tag ), "KVP fxanim_fx_4_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_4 ), self, self.fxanim_fx_4_tag ); + } + + if ( isdefined( self.fxanim_fx_5 ) ) + { + assert( isdefined( self.fxanim_fx_5_tag ), "KVP fxanim_fx_5_tag must be set on fxanim at " + self.origin ); + playfxontag( localclientnum, getfx( self.fxanim_fx_5 ), self, self.fxanim_fx_5_tag ); + } +} + +_fxanim_get_anim_count() +{ + assert( isdefined( self.fxanim_scene_1 ), "fxanim at position " + self.origin + " needs at least one scene defined. Use the KVP fxanim_scene_1" ); + n_fx_count = 0; + + if ( !isdefined( self.fxanim_scene_2 ) ) + n_fx_count = 1; + else if ( !isdefined( self.fxanim_scene_3 ) ) + n_fx_count = 2; + else + n_fx_count = 3; + + return n_fx_count; +} + +_fxanim_get_scene_name( n_anim_id ) +{ + str_scene_name = undefined; + + switch ( n_anim_id ) + { + case 0: + str_scene_name = self.fxanim_scene_1; + break; + case 1: + str_scene_name = self.fxanim_scene_2; + break; + case 2: + str_scene_name = self.fxanim_scene_3; + break; + } + + return str_scene_name; +} + +_fxanim_model_link( localclientnum ) +{ + self waittill_dobj( localclientnum ); + assert( isdefined( self.fxanim_tag ), "Model at origin " + self.origin + " needs an fxanim_tag defined, to show which tag the model will link to" ); + m_parent = getent( localclientnum, self.fxanim_parent, "targetname" ); + assert( isdefined( m_parent ), "Model at origin " + self.origin + " does not have a proper parent. Make sure the fxanim_parent matches the targetname of the fxanim" ); + m_parent waittill_dobj( localclientnum ); + self.origin = m_parent gettagorigin( self.fxanim_tag ); + self.angles = m_parent gettagangles( self.fxanim_tag ); + self linkto( m_parent, self.fxanim_tag ); + + if ( isdefined( self.fxanim_hide ) ) + { + self hide(); + + m_parent waittill( "fxanim_start" ); + + self show(); + } +} + +getfx( fx ) +{ + assert( isdefined( level._effect[fx] ), "Fx " + fx + " is not defined in level._effect." ); + return level._effect[fx]; +} diff --git a/MP/Maps/Vertigo/clientscripts/mp/createfx/mp_vertigo_fx.csc b/MP/Maps/Vertigo/clientscripts/mp/createfx/mp_vertigo_fx.csc new file mode 100644 index 0000000..005797e --- /dev/null +++ b/MP/Maps/Vertigo/clientscripts/mp/createfx/mp_vertigo_fx.csc @@ -0,0 +1,2651 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_tube_cloud" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 139.088, -197.21, -1090.66 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_engine_exhaust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2116.6, 257.579, 189.246 ); + ent.v["angles"] = ( 90, 0, -153 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_engine_exhaust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2387.62, -304.607, 189.2 ); + ent.v["angles"] = ( 90, 0, -177 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 383.971, -692.532, 349.989 ); + ent.v["angles"] = ( 346.078, 179.818, 1.49289 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 383.224, -2341.53, -71.7422 ); + ent.v["angles"] = ( 348.687, 242.656, -16.6018 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 682.909, 2308.98, -71.875 ); + ent.v["angles"] = ( 348.733, 161.589, 1.15808 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 255.875, 2252.37, 130.641 ); + ent.v["angles"] = ( 28, 182, 0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 388.63, 1764.81, 147.138 ); + ent.v["angles"] = ( 28, 182, 0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 539.673, 2134.39, 109.463 ); + ent.v["angles"] = ( 28, 182, 0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 734.582, 1954.95, 72.125 ); + ent.v["angles"] = ( 356, 182, 0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1012.06, 1670.04, 81.125 ); + ent.v["angles"] = ( 355.089, 167.956, 0.728233 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1365.49, 1324.73, 74.125 ); + ent.v["angles"] = ( 350.773, 166.351, -1.67269 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1026.65, 1995.24, 72.125 ); + ent.v["angles"] = ( 354, 181.791, 1 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 350.492, 2723, -13.875 ); + ent.v["angles"] = ( 352, 182, 0 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 359.875, 1470.73, 196.767 ); + ent.v["angles"] = ( 28, 182, 0 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -38.8576, 2086.44, 43 ); + ent.v["angles"] = ( 348, 182, 0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1321.85, 206.888, 124.125 ); + ent.v["angles"] = ( 0.96607, 197, 0.258881 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1313.21, -237.616, 127.125 ); + ent.v["angles"] = ( 354.921, 206.978, 0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1332.27, -657.416, 117.125 ); + ent.v["angles"] = ( 347.217, 207.286, -1.9486 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 664.279, -1262.18, 0.125004 ); + ent.v["angles"] = ( 348, 182, 0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 410.713, -1369.66, 31.125 ); + ent.v["angles"] = ( 1, 182, 0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 462.54, -2115.38, 2.125 ); + ent.v["angles"] = ( 348.995, 187.978, 0.106493 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -318.446, -1572.76, -2.875 ); + ent.v["angles"] = ( 0.913676, 157.996, -0.406835 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -615.344, -1420.88, 20.125 ); + ent.v["angles"] = ( 0.933716, 160.996, -0.358456 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -906.191, -553.71, 23.125 ); + ent.v["angles"] = ( 0.933716, 160.996, -0.358456 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1273.94, -438.487, 36 ); + ent.v["angles"] = ( 1.05676, 140, 2.31437 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -938.567, 534.347, 52.125 ); + ent.v["angles"] = ( 0.913537, 206.002, 0.406772 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -785.622, 733.686, 8.125 ); + ent.v["angles"] = ( 0, 194.995, 0.58329 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1312.7, 502.122, 36 ); + ent.v["angles"] = ( 351.891, 208.931, 0.458623 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_lf_mp_vertigo_sun1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -74189.3, -104308, 60968.7 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1132.96, 866.058, 8 ); + ent.v["angles"] = ( 356.901, 218.993, -0.298072 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_hvac_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 479.779, 1198.28, 263 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_hvac_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 470.203, 1348.06, 251 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -381.454, 701.188, 346.125 ); + ent.v["angles"] = ( 0, 189.973, -0.609694 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 286.132, 1294.43, 285.426 ); + ent.v["angles"] = ( 346, 186, 0 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -864.222, 486.128, 333.193 ); + ent.v["angles"] = ( 0, 191.97, -0.609241 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1810.16, 143.205, 123 ); + ent.v["angles"] = ( 348.665, 186.49, 3.58956 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1819.15, -5.93272, 123 ); + ent.v["angles"] = ( 348.665, 186.49, 3.58956 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1854.17, -214.174, 123 ); + ent.v["angles"] = ( 348.665, 186.49, 3.58956 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_hvac_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 699.495, -611.343, 343 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_hvac_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 692.04, -753.007, 344 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -108.889, -789.21, 380.423 ); + ent.v["angles"] = ( 359.59, 169.448, 4.05614 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1496.66, -147.763, -422.176 ); + ent.v["angles"] = ( 306, 180, 180 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -749.541, 871.793, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 222.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1238.29, 803.232, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 245.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1329.29, 554.237, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 228.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1196.37, 403.889, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 196.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -996.39, 535.179, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 195.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1344.26, 198.479, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 219.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1519.23, 392.059, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 232.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1484.54, 616.615, 29 ); + ent.v["angles"] = ( 351.953, 220.041, -1.10739 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -808.7, -995.611, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 116.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -811.49, -783.811, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 116.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -965.573, -550.956, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 147.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -823.113, -1086.01, 28.125 ); + ent.v["angles"] = ( 353.303, 102.035, 0.350131 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1069.79, -837.07, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 154.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1223.64, -681.98, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 112.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1251.23, -461.442, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 123.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1391.81, -608.475, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 117.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1531.57, -401.499, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 113.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1346.11, -193.437, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 117.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -904.515, -447.715, 338.345 ); + ent.v["angles"] = ( 1.8007, 173.947, -0.788855 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1127.29, -911.202, 21 ); + ent.v["angles"] = ( 353.441, 117.136, -1.40291 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1423.88, -705.278, 26 ); + ent.v["angles"] = ( 353.303, 102.035, 0.350131 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1525.49, -580.443, 26 ); + ent.v["angles"] = ( 353.976, 131.211, -2.95299 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -524.691, -1454.61, -14.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 157.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -755.647, -1410.35, -14.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 161.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -252.028, -1504, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 20.7631, -1446.83, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 193.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 268.159, -1432.7, 2.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 584.314, -1249.13, 2.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 212.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 352.552, -2103, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 190.0 ); + ent.v["delay"] = 0.5; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1261.56, -514.406, 24 ); + ent.v["angles"] = ( 355.379, 138.189, -0.662342 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 42.1688, -2157.57, -38.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 165.0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 29.6573, -2361.63, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -51.0343, -2053.51, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -547.346, -2367.91, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -829.511, -2388.75, -14.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 172.0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -791.389, -2217.15, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -819.013, -2074.44, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -376.224, -2440.92, -29.875 ); + ent.v["angles"] = ( 347.983, 168.315, 2.02679 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 58.6174, -2513.36, -35.0498 ); + ent.v["angles"] = ( 347.983, 168.315, 2.02679 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1138.18, -654.639, 104.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 228.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1325.12, -582.159, 104.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 206.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1353.16, -277.399, 104.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 206.0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1181.88, -253.866, 104.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 203.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1384.77, -489.427, 111.125 ); + ent.v["angles"] = ( 348.982, 199.856, 1.00443 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1352.9, 1078.52, 77.9802 ); + ent.v["angles"] = ( 348.76, 156.314, 1.96767 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1195.41, 1072.81, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 150.0 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1177.14, 1269.39, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 140.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1021.45, 1110.85, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 130.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1036.72, 1548.7, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 140.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 854.725, 1660.87, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 140.0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1036.13, 1939.57, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 159.0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 998.407, 2088.38, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 168.0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 867.215, 2016.76, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -65.4101, 1911.44, 8.12498 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 159.0 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 457.73, 2082.63, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 456.679, 1895.15, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 162.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 236.465, 2098.45, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 163.0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -70.0854, 2167.19, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 217.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -204.676, 2059.53, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 210.0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -380.955, 1962.13, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 215.0 ); + ent.v["delay"] = -51; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -512.594, 1881.23, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 223.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 483.054, 1998.27, 8.125 ); + ent.v["angles"] = ( 357.968, 179.4, -1.40884 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 275.949, 1758.43, 18.125 ); + ent.v["angles"] = ( 356.869, 207.474, -2.2006 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -36.7725, 1867.95, 8.125 ); + ent.v["angles"] = ( 356.718, 141.358, 1.96938 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -200.347, 1292.04, 26.125 ); + ent.v["angles"] = ( 356.288, 186.444, -0.931219 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 173.615, 1344.49, 26.125 ); + ent.v["angles"] = ( 356.406, 192.455, -1.31456 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 11.1581, 1656.28, 19.125 ); + ent.v["angles"] = ( 358.034, 231.471, -3.28361 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -442.443, 1228.04, 14.125 ); + ent.v["angles"] = ( 357.03, 211.477, -2.41371 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 271.864, 1536.48, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 235.0 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 41.2617, 1755.28, 8.12499 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -81.2866, 1412.98, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -377.841, 1260.05, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 212.0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -531.233, 1159.78, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 208.0 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -511.794, 1693.49, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 261.0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -466.151, 1894.2, 24.125 ); + ent.v["angles"] = ( 354.94, 217.695, 0.752233 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1152.88, -854.066, -68.5767 ); + ent.v["angles"] = ( 354.886, 229.214, -4.78672 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1364.43, -775.2, 83.0182 ); + ent.v["angles"] = ( 344.838, 214.713, -3.39837 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 761.395, -1830.95, -14.875 ); + ent.v["angles"] = ( 354.886, 229.214, -4.78672 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1500.93, 160.562, -392.879 ); + ent.v["angles"] = ( 284.923, 195.69, -15.4778 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1386.85, -0.40712, 104.125 ); + ent.v["angles"] = ( 344.921, 206.978, 0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1299.44, 240.533, 104.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1149.11, 258.088, 104.125 ); + ent.v["angles"] = ( 0, 203, 1 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1058.65, 242.355, 104.125 ); + ent.v["angles"] = ( 352.993, 226.945, 0.315841 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1025.44, -306.635, 104.125 ); + ent.v["angles"] = ( 351, 120, 0 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1410.34, 1397.92, 64.456 ); + ent.v["angles"] = ( 356.003, 116.027, 0.30977 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1104.01, 2185.4, 34.628 ); + ent.v["angles"] = ( 360, 117, 0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -61.6901, -2529.28, -35.036 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -620.515, 1071.99, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 223.0 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -786.342, 942.03, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 213.0 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 161.709, 475.711, 253.315 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 90.0 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 414.705, 475.51, 253.512 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 90.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -128.84, 476.21, 253.019 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 90.0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 166.246, -477.193, 257.013 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 90.0 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 419.242, -477.394, 253.111 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 90.0 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -124.303, -476.695, 253.317 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 90.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 403.564, 227.519, -28.5444 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 493.012, 227.148, -28.4856 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 402.841, 239.038, -20.5703 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 493.275, 239.146, -20.4755 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 492.853, 251.146, -12.5319 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 403.165, 250.941, -12.1948 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 402.717, 262.938, -4.20705 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 493.237, 263.159, -4.49432 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 402.988, 274.96, 3.72217 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 492.728, 275.093, 3.63967 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -411.512, 227.769, 3.57521 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -411.064, 215.772, -4.41254 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -411.388, 203.869, -12.788 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -410.648, 191.85, -20.7621 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -306.816, 191.918, -20.7033 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -306.974, 215.916, -4.74964 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -306.553, 203.916, -12.6932 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -306.6, 227.729, 3.28794 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -410.065, -227.751, 3.25096 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -409.681, -215.738, -4.78662 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -410.102, -203.738, -12.7302 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -409.839, -191.74, -20.7403 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -305.744, -227.642, 3.53823 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -306.192, -215.645, -4.44952 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -305.868, -203.742, -12.825 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -306.616, -191.924, -20.7991 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 403.816, -227.766, -28.6694 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 403.974, -251.764, -12.7157 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 403.553, -239.764, -20.6593 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 403.59, -263.777, -4.6781 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 404.099, -275.711, 3.45589 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 492.242, -275.675, 3.53839 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 492.065, -251.656, -12.3786 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 492.513, -263.653, -4.39083 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 492.389, -239.753, -20.7541 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 491.769, -227.139, -28.7282 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2082.61, -1.01203, 26.9824 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -150.194, 632.125, 125.662 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 485.992, -616.359, 126.075 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 693.681, 299.8, -28.4497 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 639.292, 299.774, -28.41 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 638.743, 323.778, -12.2831 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 638.473, 347.778, 3.68284 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 638.639, 371.835, 19.535 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 638.657, 395.833, 35.4332 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 692.673, 323.766, -12.3056 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 692.959, 347.825, 3.5542 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 692.97, 371.825, 19.4223 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 692.737, 395.796, 35.3611 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 638.444, 419.799, 51.3686 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 692.431, 419.777, 51.6694 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 692.598, 443.775, 67.6715 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 638.265, 443.77, 67.7783 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 638.156, 467.834, 83.4719 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 692.908, 467.784, 83.6632 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 692.631, 491.84, 99.5161 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 638.857, 491.813, 99.405 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -167.653, 841.118, 161.486 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 120.435, 840.829, 161.519 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 963.427, 932.405, 226.97 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 963.566, 828.126, 226.99 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 963.515, 700.186, 226.946 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 963.216, 579.167, 226.938 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1067.72, 579.378, 226.982 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1195.92, 579.024, 226.959 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1315.83, 579.121, 227.008 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 773.168, 931.6, 226.93 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 772.333, 827.754, 226.934 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 772.128, 699.719, 226.917 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 772.17, 579.753, 226.913 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 772.335, 459.918, 226.925 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 773.061, 340.964, 226.932 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 900.534, 341.812, 226.904 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1020.29, 340.464, 226.957 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1148.39, 340.17, 226.938 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1252.56, 340.682, 227 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -19; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1137.22, 329.999, 222.614 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1167.26, 591.005, 222.041 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1134.73, 319.875, 221.855 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 484.221, -907.598, 138.928 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 396.173, -907.707, 138.921 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 314.338, -907.49, 138.962 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 228.535, -907.985, 138.952 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 228.136, -824.176, 138.901 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 228.389, -720.292, 138.936 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 228.342, -630.07, 138.922 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 307.67, -628.383, 138.941 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 396.018, -627.999, 138.87 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 477.511, -628.4, 138.963 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 562.819, -627.973, 138.933 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 563.755, -719.835, 138.903 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 563.851, -816.061, 138.893 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 564.186, -907.832, 138.902 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 763.629, -260.158, 110.257 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 666.206, -260.229, 110.19 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 666.371, -517.457, 110.245 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 763.225, -516.866, 110.182 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 895.875, 959.012, 222.433 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 896.137, 968.985, 221.969 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1221.59, 1193.39, -32.3915 ); + ent.v["angles"] = ( 353.172, 210.076, -5.06534 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1914.29, 475.083, -98.5827 ); + ent.v["angles"] = ( 356.863, 226.856, -6.28727 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1907.93, -523.041, -101.72 ); + ent.v["angles"] = ( 354.75, 130.559, 5.69202 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1751.52, -318.157, -73.924 ); + ent.v["angles"] = ( 354.494, 119.12, -1.62881 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1736.65, 324.336, -77.8728 ); + ent.v["angles"] = ( 3.07512, 224.911, -4.85074 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1451.19, -743.178, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 112.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1415.04, 710.398, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 235.0 ); + ent.v["delay"] = -27; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 132.032, 1326.79, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 198.0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1170.25, 600.996, 221.456 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 858.106, 1119.56, 72.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -60.0527, 1622.76, 8.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 111.503, 1259.6, 8.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -841.676, 696.682, 8.12501 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -857.078, -839.934, 8.12499 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -813.156, -1390.77, -15.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -360.583, -1532.07, -15.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -299.273, -1961.18, -39.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -64.2093, -2215.95, -38.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 258.71, -1393.37, 2.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1063.44, -652.588, 104.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 913.612, 1625.07, 72.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -486.997, -0.34445, 131.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -86; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -486.258, 65.9312, 131.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -487.054, -65.6625, 131.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 55.6919, 553.974, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 87.4143, 554.415, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 119.298, 554.324, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 151.278, 554.342, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 183.427, 554.225, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -41; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 55.4838, 445.547, 147.675 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 0.221552, 446.094, 147.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -64.1532, 446.451, 147.775 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -120.541, 444.114, 147.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -120.279, 514.237, 147.975 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -62.2018, 514.628, 147.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 0.885532, 514.311, 148.075 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 56.3233, 514.524, 147.775 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -62; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -36.2142, -538.871, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -12.4754, -538.573, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 11.7402, -538.678, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -29; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 55.2983, -445.035, 147.375 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -0.633395, -445.515, 147.575 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -64.7383, -445.413, 147.475 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -120.461, -445.296, 147.375 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 55.1512, -514.847, 147.575 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -0.716966, -515.157, 147.575 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -64.0745, -514.529, 147.275 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -121.025, -514.744, 147.475 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 243.696, -539.428, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 275.842, -539.417, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 307.835, -539.438, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 339.771, -539.372, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 371.585, -539.575, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 439.913, -514.518, 147.488 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 384.045, -514.828, 147.488 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 320.687, -514.2, 147.188 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 263.737, -514.415, 147.388 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 264.301, -444.968, 147.288 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 320.024, -445.085, 147.388 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 384.129, -445.187, 147.488 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 440.06, -444.706, 147.288 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 439.61, 445.411, 147.387 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 383.742, 445.101, 147.387 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 320.384, 445.73, 147.087 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -30; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 263.434, 445.515, 147.287 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 263.998, 514.962, 147.187 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 319.721, 514.845, 147.287 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -58; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 383.825, 514.743, 147.387 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 439.757, 515.224, 147.187 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1131.99, -1162.94, -35.0664 ); + ent.v["angles"] = ( 352.41, 166.72, 1.50995 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1019.32, -2462.65, -165.875 ); + ent.v["angles"] = ( 348.921, 153.033, 5.10368 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1087.36, -2073.48, -164.875 ); + ent.v["angles"] = ( 347.82, 176.495, 0.309443 ); + ent.v["delay"] = -69; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1019.34, -2130.27, -164.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1002.59, -2414.97, -164.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 161.0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -839.085, -2526.31, -165.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -618.858, -2535.85, -165.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1056.89, -1422.37, -164.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1075.03, -1422.39, -165.875 ); + ent.v["angles"] = ( 347.82, 176.495, 0.309443 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1137.08, -1725.78, -165.875 ); + ent.v["angles"] = ( 347.82, 176.495, 0.309443 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 82.7181, 716.205, 130.414 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -127.984, 715.832, 130.285 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -86.7862, 800.508, 269.592 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -23.1172, 800.587, 269.581 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 40.8077, 800.617, 269.566 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 104.999, 800.361, 269.578 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 168.631, 800.134, 269.516 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -151.392, 800.161, 269.5 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -215.677, 799.702, 269.484 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1166.22, 1228.2, 72.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -92; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 8.88535, 2738.81, -25.875 ); + ent.v["angles"] = ( 352, 182, 0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 249.542, 2439.57, -23.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 288.154, 2647.37, -23.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 191.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 286.908, 2807.39, -23.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 187.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 83.4179, 2835.79, -23.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -69.8988, 2749.31, -23.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 167.0 ); + ent.v["delay"] = -55; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -45.3872, 2416.13, -23.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 164.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 75.4267, 2483.04, -23.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 164.0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 21.5958, 2403.97, -23.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -592.784, 2.75473, 143.495 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -634.921, 2.44208, 143.457 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1265.11, -262.639, 258 ); + ent.v["angles"] = ( 14.5514, 170.533, 4.19063 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_fountain2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 908.787, 1379.48, 141.626 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_fountain2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 859.033, 1379.95, 141.624 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_fountain2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 859.441, 1430.14, 141.621 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_fountain2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 908.674, 1429.57, 141.626 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -550.842, 1.93084, 143.418 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_cloud_vista01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4176.68, -1558.32, -265.88 ); + ent.v["angles"] = ( 356.218, 90.936, 15.4889 ); + ent.v["delay"] = -74; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_cloud_vista01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4123.72, 2820.82, -160.92 ); + ent.v["angles"] = ( 3.80286, 94.5069, 16.5068 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -203.562, -311.435, 452.875 ); + ent.v["angles"] = ( 31, 47, 0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 267.231, -701.351, 169.875 ); + ent.v["angles"] = ( 39.9927, 358.695, -0.839002 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 407.841, -705.041, 171.999 ); + ent.v["angles"] = ( 39.9927, 358.695, -0.839002 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1731.03, -98.9847, 160.834 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -28; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1730.95, 98.0763, 161.032 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1887.13, 385.512, 160.689 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2272.02, 552.056, 160.752 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2657.71, 385.377, 160.602 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2825.86, -0.414622, 160.702 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2657.37, -385.33, 160.739 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -16; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2271.75, -552.032, 160.614 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1886.41, -385.326, 160.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 800.335, -1150.44, 49.4157 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1038.38, -911.995, 146.931 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1380.42, -740.291, 146.835 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 326.222, -883.306, 56.9769 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 66.0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 469.581, -564.856, 53.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -90.72, -458.701, 47.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 422.238, 585.337, 56.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -127.314, 472.814, 57.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = -40; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -329.886, -191.875, 60.3687 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 664.013, 557.267, 180.125 ); + ent.v["angles"] = ( 22.9984, 270.059, 0.188646 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 875.494, 939.356, 167.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 264.0 ); + ent.v["delay"] = -90; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -172.074, 694.08, 78.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 38.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1041.95, -5.36076, 44.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 497.014, -1401.67, 2.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 699.705, -1112.65, 2.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 227.0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -579.589, -1555.87, 174.901 ); + ent.v["angles"] = ( 270.1, 89.9824, -89.9824 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -423.362, -1712.07, 174.395 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_hvac_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -732.81, -1729, 170.305 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 279.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 23.9426, -2007.99, 124.917 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 386.703, -1523.1, 85.3447 ); + ent.v["angles"] = ( 36, 90, 0 ); + ent.v["delay"] = -53; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 584.358, -1637.63, 85.5607 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 44.0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -226.04, 2168.42, 108.122 ); + ent.v["angles"] = ( 42, 270, 0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -641.169, -1541.63, 85.34 ); + ent.v["angles"] = ( 45, 90, 0 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 250.309, -2019.86, 93.6452 ); + ent.v["angles"] = ( 42, 270, 0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -137.563, -2445.94, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 194.49, -2120.83, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -84.0866, -2048.9, -38.875 ); + ent.v["angles"] = ( 354.008, 179.017, -0.315168 ); + ent.v["delay"] = -39; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -556.644, -2377.1, -15.875 ); + ent.v["angles"] = ( 2, 176, 0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 95.3456, -1425.73, 0.124997 ); + ent.v["angles"] = ( 356, 176.996, 0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 610.68, -1909.84, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 107.509, 2652.71, -24.875 ); + ent.v["angles"] = ( 355, 177, 0 ); + ent.v["delay"] = -76; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_leaves" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 70.2246, 1966.59, 236.093 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -868.654, 935.581, 8.125 ); + ent.v["angles"] = ( 359.939, 204.995, 0.58151 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 926.906, 93.2134, -30.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 919.822, 0.470383, -31.675 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 910.76, -81.669, -30.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 809.796, -82.3613, -31.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 805.749, 81.2526, -31.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 939.436, 9.13624, 22.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 936.147, 106.635, 25.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 946.549, -102.599, 22.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 648.747, -63.0647, -8.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 653.365, 83.0813, -8.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -537.313, 102.399, 149.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -73; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -707.767, 131.302, 149.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -537.69, -73.0583, 149.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -18; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -706.103, -129.935, 149.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1375.61, 989.379, 82.125 ); + ent.v["angles"] = ( 359.066, 148, -0.35845 ); + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1199.92, 283.929, 145.125 ); + ent.v["angles"] = ( 359.06, 146.999, -0.342117 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1039.47, 1054.02, 82.9967 ); + ent.v["angles"] = ( 342.07, 209.015, 1.94891 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 732.851, 2360.24, -71.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 552.6, 2375.11, -71.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 958.315, 2224.68, -16.6024 ); + ent.v["angles"] = ( 2.74195, 155.824, -4.37488 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 389.484, 2408.95, -71.875 ); + ent.v["angles"] = ( 323.84, 185.566, -5.90976 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -642.125, 859.219, 150.697 ); + ent.v["angles"] = ( 28.3977, 183.831, -2.77951 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -821.479, 1014.5, 137.195 ); + ent.v["angles"] = ( 18.4505, 252.99, 10.3824 ); + ent.v["delay"] = -88; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 405.84, -1081.51, 17.125 ); + ent.v["angles"] = ( 354.531, 117.179, 0.385648 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 526.185, -1171.74, 10.125 ); + ent.v["angles"] = ( 357.54, 156.217, 0.607548 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 79.9893, -2228.97, -25.8254 ); + ent.v["angles"] = ( 343.583, 186.444, -0.980469 ); + ent.v["delay"] = -36; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -187.233, -2320.71, -39.875 ); + ent.v["angles"] = ( 343.583, 186.444, -0.980469 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1115.59, 1039.79, 15.5127 ); + ent.v["angles"] = ( 352.146, 239.242, 6.57324 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -660.494, -1348.97, 6.125 ); + ent.v["angles"] = ( 356.459, 157.895, -6.48668 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -403.679, -1659.3, 0.124992 ); + ent.v["angles"] = ( 348.422, 130.713, -4.92561 ); + ent.v["delay"] = -78; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 74.5673, -1506, 0.125 ); + ent.v["angles"] = ( 348.315, 188.387, -11.7419 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -335.937, -1665.94, -14.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 139.0 ); + ent.v["delay"] = -64; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1167.88, -149.835, 71.125 ); + ent.v["angles"] = ( 11.899, 140.524, -6.36916 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1181.91, 156.689, 71.7639 ); + ent.v["angles"] = ( 10.5463, 207.968, 8.43506 ); + ent.v["delay"] = -66; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 272.377, 156.772, 294.446 ); + ent.v["angles"] = ( 20.4738, 168.143, -0.190327 ); + ent.v["delay"] = -37; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 280.783, -157.498, 304.554 ); + ent.v["angles"] = ( 20.062, 201.383, 12.4488 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 359.501, 2.97124, 374.064 ); + ent.v["angles"] = ( 3.85253, 177.929, -0.592478 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1316.42, 1532.06, 9.45738 ); + ent.v["angles"] = ( 13.7406, 138.541, 2.39633 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 832.702, 2420.86, -63.875 ); + ent.v["angles"] = ( 352.486, 184.368, -2.59096 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_window_exploder_sm" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1087.41, 1790.99, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1004; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1154.04, 1781.46, -71.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1004; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_window_exploder_sm" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1089.45, 1722.5, -16.375 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_window_exploder_sm" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1090.77, 1658.11, -13.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1006; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1153.31, 1716.83, -70.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1147.73, 1655.14, -70.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1006; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 460.062, -5.77599, 241.875 ); + ent.v["angles"] = ( 70.985, 357.368, -1.97359 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 602.999, 2.65791, 247.875 ); + ent.v["angles"] = ( 73.9827, 356.995, -2.33009 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 550.875, -834.571, 151.889 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -56; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 249.171, -832.189, 144.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1169.75, 428.055, 241.997 ); + ent.v["angles"] = ( 35, 359.064, -178.965 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 993.56, 489.823, 247.855 ); + ent.v["angles"] = ( 32, 359, -179 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 830.228, 490.995, 261.875 ); + ent.v["angles"] = ( 37, 359, 180 ); + ent.v["delay"] = -48; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 894.313, 367.333, 232.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1068.96, 363.937, 232.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["delay"] = -98; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1242.24, 367.463, 232.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 98.2005, 951.081, 210.713 ); + ent.v["angles"] = ( 45.9909, 271.035, -178.561 ); + ent.v["delay"] = -71; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -111.793, 938.676, 216.647 ); + ent.v["angles"] = ( 45.9909, 271.035, -178.561 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -23.9163, 940.398, 216.935 ); + ent.v["angles"] = ( 45.9909, 271.035, -178.561 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 878.19, 1654.11, -71.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1049.99, 1721.41, -71.875 ); + ent.v["angles"] = ( 353.499, 159.441, 1.40194 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_window_exploder_sm" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1064.93, 2083.99, -4.45833 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1007; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_window_exploder_sm" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1066.97, 2015.5, -4.95833 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1008; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_window_exploder_sm" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1068.29, 1951.11, -2.45833 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1009; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1062.04, 1944.34, -71.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1009; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1064.31, 2008.03, -71.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1008; + ent = clientscripts\mp\_fx::createexploder( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1065.07, 2083.63, -71.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1007; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 416.036, -993.68, 124.603 ); + ent.v["angles"] = ( 37, 180, 0 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 531.298, 417.494, 111.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -72; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 531.907, 469.291, 111.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -70; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 531.294, 520.883, 111.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1157.37, 11.9901, 56.9112 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 351.0 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -997.433, -117.621, 20.6506 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1036.17, -115.582, 20.5776 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 83.0 ); + ent.v["delay"] = -83; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1073.82, -110.394, 20.6955 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 73.0 ); + ent.v["delay"] = -45; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -960.17, -115.855, 20.7174 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["delay"] = -61; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -921.688, -110.503, 20.7792 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 102.0 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1074.04, 110.256, 20.7069 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 283.0 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1035.62, 115.503, 20.8145 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -82; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -998.143, 117.164, 20.6784 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -17; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -959.506, 115.432, 20.7077 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 261.0 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -921.932, 109.942, 20.7696 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 250.0 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_vista_glare02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4960, -14193.7, 1559.32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -42; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_vista_glare02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4945.9, -14767.3, 1557.57 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_vista_glare02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5559.13, -14165.1, 1558.79 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_vista_glare01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5250.75, -14450.8, 3634.11 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -89; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_vista_glare02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3796.34, 1023.36, 3187.05 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -84; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_vista_glare01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4441.48, -265.302, 4685.88 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_vista_glare01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -17579.9, -8675.96, -1260.8 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_vista_glare02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -17935.2, -6071.58, 95.2771 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -38; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_vista_glare01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5536.33, 24316.3, 901.667 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_vista_glare01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -12759.3, 8842.79, 1076.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -49; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_cloud_vista02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 14660.5, -1574.92, -3077.22 ); + ent.v["angles"] = ( 272.996, 272, -80 ); + ent.v["delay"] = -68; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_cloud_vista02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -12533.4, 2949.43, -3652.95 ); + ent.v["angles"] = ( 272.996, 272, -102 ); + ent.v["delay"] = -99; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_cloud_vista02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -8026.13, 17166.5, -3406.23 ); + ent.v["angles"] = ( 275.107, 73.0283, 61.0151 ); + ent.v["delay"] = -77; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 248.515, -578.392, 110.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -24; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 301.871, -578.087, 110.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 352.932, -576.978, 110.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -87; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 584.976, -433.18, 111.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -31; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 585.555, -484.838, 111.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -26; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 585.231, -536.431, 111.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -34; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 702.856, 1117.16, 199.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -75; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 699.4, 1309.12, 178.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -32; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 705.887, 1437.78, 135.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -91; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 701.718, 1221.89, 178.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -57; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 702.928, 1512.3, 157.375 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -67; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 704.998, 1627.89, 135.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -80; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -648.854, 804.452, 143.772 ); + ent.v["angles"] = ( 42, 180, 0 ); + ent.v["delay"] = -25; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -885.009, 1162.61, 113.108 ); + ent.v["angles"] = ( 40.7, 90, 0 ); + ent.v["delay"] = -43; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -700.175, 1310.6, 137 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -97; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -795.727, 1315.04, 135 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -46; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -890.214, 1315.26, 137 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -697.896, 1441.97, 137 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -85; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -795.668, 1439.3, 137 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -44; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -892.328, 1441.47, 137 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -892, 1566.8, 137 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -23; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -795.344, 1568.09, 137 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -63; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -698.9, 1567.67, 137 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -81; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -702.955, -2137.27, -47.4609 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -60; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -702.795, -2260.32, -47.4965 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -21; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -891.843, -2398.4, -47.4919 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -52; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -914.01, -2258.67, -47.5889 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -914.119, -2144.49, -47.6094 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -100; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_vista_glare02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 12598.5, 12054.5, -3256.24 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -94; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_vista_glare02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 21165.2, 13485.9, 794.341 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -33; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_vista_glare02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -14485.4, 4189.54, -2414.1 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -47; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -916.875, 1303.61, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["delay"] = -59; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -706.259, 1544.53, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 243.0 ); + ent.v["delay"] = -54; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_vista_glare02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3701.46, -24961, -3912.72 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -96; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_vista_glare01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -5469.52, -23030.6, -1608.99 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_vista_glare02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -12338.3, 8835.45, 247.365 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -79; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -922.059, -1734.65, 106.431 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -65; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -921.365, -1859.69, 106.374 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -35; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -813.061, -1859.79, 106.463 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -95; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -787.081, -1605.17, 106.596 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -44; +} diff --git a/MP/Maps/Vertigo/clientscripts/mp/mp_vertigo.csc b/MP/Maps/Vertigo/clientscripts/mp/mp_vertigo.csc new file mode 100644 index 0000000..348cae9 --- /dev/null +++ b/MP/Maps/Vertigo/clientscripts/mp/mp_vertigo.csc @@ -0,0 +1,61 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_vertigo_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_vertigo_amb; + +main() +{ + level.worldmapx = 0; + level.worldmapy = 0; + level.worldlat = 18.9752; + level.worldlong = 72.8275; + clientscripts\mp\_load::main(); + clientscripts\mp\mp_vertigo_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_vertigo_amb::main(); + level.onplayerconnect = ::vertigoplayerconnected; + waitforclient( 0 ); +/# + println( "*** Client : mp_vertigo running..." ); +#/ +} + +vertigoplayerconnected( localclientnum ) +{ + for (;;) + { + level waittill( "snap_processed", snapshotlocalclientnum ); + + if ( snapshotlocalclientnum == localclientnum ) + break; + } + + security_camera_balls = getentarray( localclientnum, "security_camera_ball", "targetname" ); + + foreach ( cameraball in security_camera_balls ) + cameraball thread cameratrackplayer( localclientnum ); +} + +cameratrackplayer( localclientnum ) +{ + pitch = self.angles[0]; + roll = self.angles[2]; + + for (;;) + { + localplayer = getnonpredictedlocalplayer( 0 ); + + if ( isdefined( localplayer ) && isdefined( localplayer.origin ) ) + { + direction = localplayer.origin - self.origin; + angles = vectortoangles( direction ); + flattenedangles = ( pitch, angles[1] + 90, roll ); + self rotateto( flattenedangles, 0.5 ); + } + + wait 0.5; + } +} diff --git a/MP/Maps/Vertigo/clientscripts/mp/mp_vertigo_amb.csc b/MP/Maps/Vertigo/clientscripts/mp/mp_vertigo_amb.csc new file mode 100644 index 0000000..33db81e --- /dev/null +++ b/MP/Maps/Vertigo/clientscripts/mp/mp_vertigo_amb.csc @@ -0,0 +1,105 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "vertigo_outdoor", 1 ); + setambientroomtone( "vertigo_outdoor", "amb_wind_extreior_2d", 0.3, 0.5 ); + setambientroomreverb( "vertigo_outdoor", "vertigo_outdoor", 1, 1 ); + setambientroomcontext( "vertigo_outdoor", "ringoff_plr", "outdoor" ); + declareambientroom( "vertigo_lobby" ); + setambientroomreverb( "vertigo_lobby", "vertigo_mediumroom", 1, 1 ); + setambientroomcontext( "vertigo_lobby", "ringoff_plr", "indoor" ); + declareambientroom( "vertigo_mn_bldg_hall" ); + setambientroomreverb( "vertigo_mn_bldg_hall", "vertigo_largeroom", 1, 1 ); + setambientroomcontext( "vertigo_mn_bldg_hall", "ringoff_plr", "indoor" ); + declareambientroom( "vertigo_display_rm" ); + setambientroomreverb( "vertigo_display_rm", "vertigo_smallroom", 1, 1 ); + setambientroomcontext( "vertigo_display_rm", "ringoff_plr", "indoor" ); + declareambientroom( "vertigo_display_stairs" ); + setambientroomreverb( "vertigo_display_stairs", "vertigo_hallroom", 1, 1 ); + setambientroomcontext( "vertigo_display_stairs", "ringoff_plr", "indoor" ); + declareambientroom( "vertigo_comp_rm" ); + setambientroomreverb( "vertigo_comp_rm", "vertigo_smallroom", 1, 1 ); + setambientroomcontext( "vertigo_comp_rm", "ringoff_plr", "indoor" ); + declareambientroom( "vertigo_bathroom_area" ); + setambientroomreverb( "vertigo_bathroom_area", "vertigo_smallroom", 1, 1 ); + setambientroomcontext( "vertigo_bathroom_area", "ringoff_plr", "indoor" ); + declareambientroom( "vertigo_waiting_rm" ); + setambientroomreverb( "vertigo_waiting_rm", "vertigo_stoneroom", 1, 1 ); + setambientroomcontext( "vertigo_waiting_rm", "ringoff_plr", "indoor" ); + declareambientroom( "vertigo_concrete_rm" ); + setambientroomreverb( "vertigo_concrete_rm", "vertigo_stoneroom", 1, 1 ); + setambientroomcontext( "vertigo_concrete_rm", "ringoff_plr", "indoor" ); + declareambientroom( "vertigo_conf_rm" ); + setambientroomreverb( "vertigo_conf_rm", "vertigo_mediumroom", 1, 1 ); + setambientroomcontext( "vertigo_conf_rm", "ringoff_plr", "indoor" ); + declareambientroom( "vertigo_carpet_rm" ); + setambientroomreverb( "vertigo_carpet_rm", "vertigo_smallroom", 1, 1 ); + setambientroomcontext( "vertigo_carpet_rm", "ringoff_plr", "indoor" ); + thread snd_start_autofx_audio(); + thread snd_play_loopers(); +} + +snd_play_loopers() +{ + playloopat( "amb_fountain_water_1", ( 877, 1375, 164 ) ); + playloopat( "amb_retina_scanner", ( 1090, 580, 163 ) ); + playloopat( "amb_retina_scanner", ( -238, 604, 73 ) ); + playloopat( "amb_retina_scanner", ( 549, -575, 69 ) ); + playloopat( "amb_ac_fan", ( -192, -2645, 50 ) ); + playloopat( "amb_ac_fan", ( -201, -1796, 74 ) ); + playloopat( "amb_ac_fan", ( -200, -1674, 64 ) ); + playloopat( "amb_ac_fan", ( 1179, -466, 178 ) ); + playloopat( "amb_ac_fan", ( 1032, 700, 329 ) ); + playloopat( "amb_ac_fan", ( 947, 703, 321 ) ); + playloopat( "amb_ac_fan", ( 384, -1255, 78 ) ); + playloopat( "amb_generator_2", ( -1371, 805, 99 ) ); + playloopat( "amb_generator_2", ( -1702, 670, 117 ) ); + playloopat( "amb_door_pad_display", ( 160, 985, 72 ) ); + playloopat( "amb_door_pad_display", ( 160, 985, 72 ) ); + playloopat( "amb_door_pad_display", ( -68, 638, 73 ) ); + playloopat( "amb_door_pad_display", ( 912, -149, 30 ) ); + playloopat( "amb_door_pad_display", ( 338, 583, 72 ) ); + playloopat( "amb_door_pad_display", ( -69, 591, 71 ) ); + playloopat( "amb_tech_display", ( 188, 845, 90 ) ); + playloopat( "amb_tech_display", ( 83, 628, 91 ) ); + playloopat( "amb_tech_display", ( -337, -472, 87 ) ); + playloopat( "amb_tech_display", ( 987, 748, 153 ) ); + playloopat( "amb_tech_display", ( 824, 339, 170 ) ); + playloopat( "amb_tech_display", ( 778, 723, 198 ) ); + playloopat( "amb_tech_display", ( 776, 845, 189 ) ); + playloopat( "amb_tech_display", ( -793, -1895, 63 ) ); + playloopat( "amb_fan_lrg", ( -809, -2318, 40 ) ); + playloopat( "amb_fan_lrg", ( -809, -2146, 50 ) ); + playloopat( "amb_fan_lrg", ( -941, -1732, 180 ) ); + playloopat( "amb_fan_lrg", ( -765, -1732, 183 ) ); + playloopat( "amb_fan_lrg", ( -572, -1734, 187 ) ); + playloopat( "amb_outside_fans", ( -444, -2202, 21 ) ); + playloopat( "amb_outside_fans", ( -443, -2141, 21 ) ); + playloopat( "amb_outside_fans", ( -450, -2044, 24 ) ); + playloopat( "amb_outside_fans", ( -684, -2014, 21 ) ); + playloopat( "amb_outside_fans", ( -683, -2202, 21 ) ); + playloopat( "amb_outside_fans", ( 181, -1188, 39 ) ); + playloopat( "amb_outside_fans", ( 182, -1188, 40 ) ); + playloopat( "amb_metal_rattle_2", ( 365, -1922, 302 ) ); + playloopat( "amb_metal_rattle_2", ( -1750, -604, 352 ) ); + playloopat( "amb_build_ledge", ( -3024, 1869, 917 ) ); + playloopat( "amb_ac_wall_unit", ( -206, 1473, 123 ) ); + playloopat( "amb_ac_wall_unit", ( -34, -1337, 28 ) ); + playloopat( "amb_ribbon_flap", ( -452, -2202, 48 ) ); +} + +snd_start_autofx_audio() +{ + snd_play_auto_fx( "fx_mp_vertigo_engine_exhaust", "veh_osp_steady_close", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_mp_vertigo_fountain2", "amb_water_fountain_2", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_vertigo_fountain", "amb_water_fountain_3", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_vertigo_hvac_steam", "amb_hvac_steam", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_light_mag_ceiling_light", "amb_celing_light", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_vertigo_ceiling_light_sm", "amb_celing_light_sml", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_vertigo_ceiling_light", "amb_celing_light_sml", 0, 0, 0, 0 ); +} diff --git a/MP/Maps/Vertigo/clientscripts/mp/mp_vertigo_fx.csc b/MP/Maps/Vertigo/clientscripts/mp/mp_vertigo_fx.csc new file mode 100644 index 0000000..5ec99a3 --- /dev/null +++ b/MP/Maps/Vertigo/clientscripts/mp/mp_vertigo_fx.csc @@ -0,0 +1,135 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\createfx\mp_vertigo_fx; +#include clientscripts\mp\_fx; +#include clientscripts\mp\_fxanim_dlc; + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_vertigo_tube_cloud"] = loadfx( "maps/mp_maps/fx_mp_vertigo_tube_cloud" ); + level._effect["fx_mp_vertigo_engine_exhaust"] = loadfx( "maps/mp_maps/fx_mp_vertigo_engine_exhaust" ); + level._effect["fx_mp_vertigo_hvac_steam"] = loadfx( "maps/mp_maps/fx_mp_vertigo_hvac_steam" ); + level._effect["fx_mp_vertigo_wind_cloud_med"] = loadfx( "maps/mp_maps/fx_mp_vertigo_wind_cloud_med" ); + level._effect["fx_mp_vertigo_wind_med"] = loadfx( "maps/mp_maps/fx_mp_vertigo_wind_med" ); + level._effect["fx_mp_vertigo_wind_med_dark"] = loadfx( "maps/mp_maps/fx_mp_vertigo_wind_med_dark" ); + level._effect["fx_mp_vertigo_ground_dust"] = loadfx( "maps/mp_maps/fx_mp_vertigo_ground_dust" ); + level._effect["fx_mp_vertigo_ground_dust_lite"] = loadfx( "maps/mp_maps/fx_mp_vertigo_ground_dust_lite" ); + level._effect["fx_mp_vertigo_dirt_swirl"] = loadfx( "maps/mp_maps/fx_mp_vertigo_dirt_swirl" ); + level._effect["fx_mp_vertigo_cloud_vista01"] = loadfx( "maps/mp_maps/fx_mp_vertigo_cloud_vista01" ); + level._effect["fx_mp_vertigo_cloud_vista02"] = loadfx( "maps/mp_maps/fx_mp_vertigo_cloud_vista02" ); + level._effect["fx_mp_vertigo_window_exploder"] = loadfx( "maps/mp_maps/fx_mp_vertigo_window_exploder" ); + level._effect["fx_mp_vertigo_window_exploder_sm"] = loadfx( "maps/mp_maps/fx_mp_vertigo_window_exploder_sm" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_vertigo_leaves"] = loadfx( "maps/mp_maps/fx_mp_vertigo_leaves" ); + level._effect["fx_paper_interior_short"] = loadfx( "debris/fx_paper_interior_short" ); + level._effect["fx_mp_vertigo_fountain"] = loadfx( "maps/mp_maps/fx_mp_vertigo_fountain" ); + level._effect["fx_mp_vertigo_fountain2"] = loadfx( "maps/mp_maps/fx_mp_vertigo_fountain2" ); + level._effect["fx_drone_red_blink"] = loadfx( "light/fx_drone_red_blink" ); + level._effect["fx_vertigo_rectangle_light_skinny"] = loadfx( "light/fx_vertigo_rectangle_light_skinny" ); + level._effect["fx_drone_light_yellow"] = loadfx( "light/fx_drone_light_yellow" ); + level._effect["fx_vertigo_step_light"] = loadfx( "light/fx_vertigo_step_light" ); + level._effect["fx_vertigo_step_light_sm"] = loadfx( "light/fx_vertigo_step_light_sm" ); + level._effect["fx_mp_vertigo_pillar_lights"] = loadfx( "maps/mp_maps/fx_mp_vertigo_pillar_lights" ); + level._effect["fx_mp_vertigo_ceiling_light"] = loadfx( "maps/mp_maps/fx_mp_vertigo_ceiling_light" ); + level._effect["fx_mp_vertigo_ceiling_light_sm"] = loadfx( "maps/mp_maps/fx_mp_vertigo_ceiling_light_sm" ); + level._effect["fx_light_god_ray_mp_vertigo"] = loadfx( "env/light/fx_light_god_ray_mp_vertigo" ); + level._effect["fx_light_god_ray_mp_vertigo_sm"] = loadfx( "env/light/fx_light_god_ray_mp_vertigo_sm" ); + level._effect["fx_light_mag_ceiling_light"] = loadfx( "light/fx_light_mag_ceiling_light" ); + level._effect["fx_landing_light_vertigo"] = loadfx( "light/fx_landing_light_vertigo" ); + level._effect["fx_mp_vertigo_scanner_glare"] = loadfx( "maps/mp_maps/fx_mp_vertigo_scanner_glare" ); + level._effect["fx_vertigo_vista_glare01"] = loadfx( "light/fx_vertigo_vista_glare01" ); + level._effect["fx_vertigo_vista_glare02"] = loadfx( "light/fx_vertigo_vista_glare02" ); + level._effect["fx_vertigo_rectangle_light01"] = loadfx( "light/fx_vertigo_rectangle_light01" ); + level._effect["fx_lf_mp_vertigo_sun1"] = loadfx( "lens_flares/fx_lf_mp_vertigo_sun1" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); +} + +main() +{ + clientscripts\mp\createfx\mp_vertigo_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_createfx_fx(); + precache_fxanim_props(); + precache_fxanim_props_dlc(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["wirespark_med"] = %fxanim_gp_wirespark_med_anim; + level.scr_anim["fxanim_props"]["stair_chain"] = %fxanim_mp_ver_stair_chain_sign_anim; + level.scr_anim["fxanim_props"]["roofvent_modern"] = %fxanim_gp_roofvent_slow_anim; + level.scr_anim["fxanim_props"]["cell_antenna"] = %fxanim_gp_cell_antenna_anim; + level.scr_anim["fxanim_props"]["antenna_rooftop"] = %fxanim_gp_antenna_rooftop_anim; + level.scr_anim["fxanim_props"]["deck_antenna"] = %fxanim_gp_deck_antenna_anim; + level.scr_anim["fxanim_props"]["ant_rooftop_small"] = %fxanim_gp_antenna_rooftop_small_anim; + level.scr_anim["fxanim_props"]["sat_dish"] = %fxanim_gp_satellite_dish_anim; + level.scr_anim["fxanim_props"]["com_tower"] = %fxanim_gp_communication_tower_anim; + level.fx_anim_level_init = ::fxanim_init; +} + +#using_animtree("fxanim_props_dlc"); + +precache_fxanim_props_dlc() +{ + level.scr_anim["fxanim_props_dlc"]["hook"] = %fxanim_mp_ver_hook_anim; + level.scr_anim["fxanim_props_dlc"]["blinds_impact"] = %fxanim_gp_blinds_long_impact_anim; + level.scr_anim["fxanim_props_dlc"]["blinds_idle"] = %fxanim_gp_blinds_long_idle_anim; +} + +fxanim_init( localclientnum ) +{ + level thread clientscripts\mp\_fxanim_dlc::fxanim_init_dlc( localclientnum ); + + for (;;) + { + level waittill( "snap_processed", snapshotlocalclientnum ); + + if ( localclientnum == snapshotlocalclientnum ) + break; + } + + fxanims = getentarray( localclientnum, "fxanim_level", "targetname" ); + + foreach ( fxanim in fxanims ) + { + if ( isdefined( fxanim.fxanim_scene_1 ) && fxanim.fxanim_scene_1 == "blinds_impact" ) + fxanim thread blind_animate(); + } +} + +blind_animate() +{ + for (;;) + { + level waittill( "glass_smash", org ); + + if ( distancesquared( org, self.origin ) < 4096 ) + break; + } + + self useanimtree( #animtree ); + self animflaggedscripted( "blind", level.scr_anim["fxanim_props_dlc"]["blinds_impact"], 1.0, 0.0, 1.0 ); + + for (;;) + { + self waittill( "blind", note ); + + if ( note == "end" ) + { + self animscripted( level.scr_anim["fxanim_props_dlc"]["blinds_idle"], 1.0, 0.0, 1.0 ); + return; + } + } +} diff --git a/MP/Maps/Vertigo/maps/mp/createart/mp_vertigo_art.gsc b/MP/Maps/Vertigo/maps/mp/createart/mp_vertigo_art.gsc new file mode 100644 index 0000000..7f18c26 --- /dev/null +++ b/MP/Maps/Vertigo/maps/mp/createart/mp_vertigo_art.gsc @@ -0,0 +1,43 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + level.tweakfile = 1; + setdvar( "scr_fog_exp_halfplane", "3759.28" ); + setdvar( "scr_fog_exp_halfheight", "243.735" ); + setdvar( "scr_fog_nearplane", "601.593" ); + setdvar( "scr_fog_red", "0.806694" ); + setdvar( "scr_fog_green", "0.962521" ); + setdvar( "scr_fog_blue", "0.9624" ); + setdvar( "scr_fog_baseheight", "-475.268" ); + setdvar( "visionstore_glowTweakEnable", "0" ); + setdvar( "visionstore_glowTweakRadius0", "5" ); + setdvar( "visionstore_glowTweakRadius1", "" ); + setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); + setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); + setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); + setdvar( "visionstore_glowTweakBloomIntensity1", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); + start_dist = 11424.9; + half_dist = 16020; + half_height = 1164; + base_height = -2675; + fog_r = 0.372549; + fog_g = 0.454902; + fog_b = 0.447059; + fog_scale = 1; + sun_col_r = 1; + sun_col_g = 0.686275; + sun_col_b = 0.337255; + sun_dir_x = -0.196011; + sun_dir_y = 0.785122; + sun_dir_z = 0.587506; + sun_start_ang = 0; + sun_stop_ang = 61.3208; + time = 0; + max_fog_opacity = 0.962; + setvolfog( start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale, sun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, sun_stop_ang, time, max_fog_opacity ); + visionsetnaked( "mp_la", 0 ); +} diff --git a/MP/Maps/Vertigo/maps/mp/createfx/mp_vertigo_fx.gsc b/MP/Maps/Vertigo/maps/mp/createfx/mp_vertigo_fx.gsc new file mode 100644 index 0000000..736f8e3 --- /dev/null +++ b/MP/Maps/Vertigo/maps/mp/createfx/mp_vertigo_fx.gsc @@ -0,0 +1,2651 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_tube_cloud" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 139.088, -197.21, -1090.66 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_engine_exhaust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2116.6, 257.579, 189.246 ); + ent.v["angles"] = ( 90, 0, -153 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_engine_exhaust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2387.62, -304.607, 189.2 ); + ent.v["angles"] = ( 90, 0, -177 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 383.971, -692.532, 349.989 ); + ent.v["angles"] = ( 346.078, 179.818, 1.49289 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 383.224, -2341.53, -71.7422 ); + ent.v["angles"] = ( 348.687, 242.656, -16.6018 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 682.909, 2308.98, -71.875 ); + ent.v["angles"] = ( 348.733, 161.589, 1.15808 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 255.875, 2252.37, 130.641 ); + ent.v["angles"] = ( 28, 182, 0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 388.63, 1764.81, 147.138 ); + ent.v["angles"] = ( 28, 182, 0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 539.673, 2134.39, 109.463 ); + ent.v["angles"] = ( 28, 182, 0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 734.582, 1954.95, 72.125 ); + ent.v["angles"] = ( 356, 182, 0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1012.06, 1670.04, 81.125 ); + ent.v["angles"] = ( 355.089, 167.956, 0.728233 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1365.49, 1324.73, 74.125 ); + ent.v["angles"] = ( 350.773, 166.351, -1.67269 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1026.65, 1995.24, 72.125 ); + ent.v["angles"] = ( 354, 181.791, 1 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 350.492, 2723, -13.875 ); + ent.v["angles"] = ( 352, 182, 0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 359.875, 1470.73, 196.767 ); + ent.v["angles"] = ( 28, 182, 0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -38.8576, 2086.44, 43 ); + ent.v["angles"] = ( 348, 182, 0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1321.85, 206.888, 124.125 ); + ent.v["angles"] = ( 0.96607, 197, 0.258881 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1313.21, -237.616, 127.125 ); + ent.v["angles"] = ( 354.921, 206.978, 0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1332.27, -657.416, 117.125 ); + ent.v["angles"] = ( 347.217, 207.286, -1.9486 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 664.279, -1262.18, 0.125004 ); + ent.v["angles"] = ( 348, 182, 0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 410.713, -1369.66, 31.125 ); + ent.v["angles"] = ( 1, 182, 0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 462.54, -2115.38, 2.125 ); + ent.v["angles"] = ( 348.995, 187.978, 0.106493 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -318.446, -1572.76, -2.875 ); + ent.v["angles"] = ( 0.913676, 157.996, -0.406835 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -615.344, -1420.88, 20.125 ); + ent.v["angles"] = ( 0.933716, 160.996, -0.358456 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -906.191, -553.71, 23.125 ); + ent.v["angles"] = ( 0.933716, 160.996, -0.358456 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1273.94, -438.487, 36 ); + ent.v["angles"] = ( 1.05676, 140, 2.31437 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -938.567, 534.347, 52.125 ); + ent.v["angles"] = ( 0.913537, 206.002, 0.406772 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -785.622, 733.686, 8.125 ); + ent.v["angles"] = ( 0, 194.995, 0.58329 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1312.7, 502.122, 36 ); + ent.v["angles"] = ( 351.891, 208.931, 0.458623 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_mp_vertigo_sun1" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -74189.3, -104308, 60968.7 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1132.96, 866.058, 8 ); + ent.v["angles"] = ( 356.901, 218.993, -0.298072 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_hvac_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 479.779, 1198.28, 263 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_hvac_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 470.203, 1348.06, 251 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -381.454, 701.188, 346.125 ); + ent.v["angles"] = ( 0, 189.973, -0.609694 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 286.132, 1294.43, 285.426 ); + ent.v["angles"] = ( 346, 186, 0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -864.222, 486.128, 333.193 ); + ent.v["angles"] = ( 0, 191.97, -0.609241 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1810.16, 143.205, 123 ); + ent.v["angles"] = ( 348.665, 186.49, 3.58956 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1819.15, -5.93272, 123 ); + ent.v["angles"] = ( 348.665, 186.49, 3.58956 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1854.17, -214.174, 123 ); + ent.v["angles"] = ( 348.665, 186.49, 3.58956 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_hvac_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 699.495, -611.343, 343 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_hvac_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 692.04, -753.007, 344 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -108.889, -789.21, 380.423 ); + ent.v["angles"] = ( 359.59, 169.448, 4.05614 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1496.66, -147.763, -422.176 ); + ent.v["angles"] = ( 306, 180, 180 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -749.541, 871.793, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 222.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1238.29, 803.232, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 245.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1329.29, 554.237, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 228.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1196.37, 403.889, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 196.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -996.39, 535.179, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 195.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1344.26, 198.479, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 219.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1519.23, 392.059, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 232.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1484.54, 616.615, 29 ); + ent.v["angles"] = ( 351.953, 220.041, -1.10739 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -808.7, -995.611, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 116.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -811.49, -783.811, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 116.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -965.573, -550.956, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 147.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -823.113, -1086.01, 28.125 ); + ent.v["angles"] = ( 353.303, 102.035, 0.350131 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1069.79, -837.07, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 154.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1223.64, -681.98, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 112.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1251.23, -461.442, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 123.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1391.81, -608.475, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 117.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1531.57, -401.499, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 113.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1346.11, -193.437, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 117.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -904.515, -447.715, 338.345 ); + ent.v["angles"] = ( 1.8007, 173.947, -0.788855 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1127.29, -911.202, 21 ); + ent.v["angles"] = ( 353.441, 117.136, -1.40291 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1423.88, -705.278, 26 ); + ent.v["angles"] = ( 353.303, 102.035, 0.350131 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1525.49, -580.443, 26 ); + ent.v["angles"] = ( 353.976, 131.211, -2.95299 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -524.691, -1454.61, -14.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 157.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -755.647, -1410.35, -14.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 161.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -252.028, -1504, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 20.7631, -1446.83, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 193.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 268.159, -1432.7, 2.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 584.314, -1249.13, 2.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 212.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 352.552, -2103, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 190.0 ); + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1261.56, -514.406, 24 ); + ent.v["angles"] = ( 355.379, 138.189, -0.662342 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 42.1688, -2157.57, -38.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 165.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 29.6573, -2361.63, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -51.0343, -2053.51, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -547.346, -2367.91, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -829.511, -2388.75, -14.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 172.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -791.389, -2217.15, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -819.013, -2074.44, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -376.224, -2440.92, -29.875 ); + ent.v["angles"] = ( 347.983, 168.315, 2.02679 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 58.6174, -2513.36, -35.0498 ); + ent.v["angles"] = ( 347.983, 168.315, 2.02679 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1138.18, -654.639, 104.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 228.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1325.12, -582.159, 104.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 206.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1353.16, -277.399, 104.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 206.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1181.88, -253.866, 104.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 203.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1384.77, -489.427, 111.125 ); + ent.v["angles"] = ( 348.982, 199.856, 1.00443 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1352.9, 1078.52, 77.9802 ); + ent.v["angles"] = ( 348.76, 156.314, 1.96767 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1195.41, 1072.81, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 150.0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1177.14, 1269.39, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 140.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1021.45, 1110.85, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 130.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1036.72, 1548.7, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 140.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 854.725, 1660.87, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 140.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1036.13, 1939.57, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 159.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 998.407, 2088.38, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 168.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 867.215, 2016.76, 72.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -65.4101, 1911.44, 8.12498 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 159.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 457.73, 2082.63, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 456.679, 1895.15, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 162.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 236.465, 2098.45, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 163.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -70.0854, 2167.19, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 217.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -204.676, 2059.53, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 210.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -380.955, 1962.13, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 215.0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -512.594, 1881.23, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 223.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 483.054, 1998.27, 8.125 ); + ent.v["angles"] = ( 357.968, 179.4, -1.40884 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 275.949, 1758.43, 18.125 ); + ent.v["angles"] = ( 356.869, 207.474, -2.2006 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -36.7725, 1867.95, 8.125 ); + ent.v["angles"] = ( 356.718, 141.358, 1.96938 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -200.347, 1292.04, 26.125 ); + ent.v["angles"] = ( 356.288, 186.444, -0.931219 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 173.615, 1344.49, 26.125 ); + ent.v["angles"] = ( 356.406, 192.455, -1.31456 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 11.1581, 1656.28, 19.125 ); + ent.v["angles"] = ( 358.034, 231.471, -3.28361 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -442.443, 1228.04, 14.125 ); + ent.v["angles"] = ( 357.03, 211.477, -2.41371 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 271.864, 1536.48, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 235.0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 41.2617, 1755.28, 8.12499 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -81.2866, 1412.98, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -377.841, 1260.05, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 212.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -531.233, 1159.78, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 208.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -511.794, 1693.49, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 261.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -466.151, 1894.2, 24.125 ); + ent.v["angles"] = ( 354.94, 217.695, 0.752233 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1152.88, -854.066, -68.5767 ); + ent.v["angles"] = ( 354.886, 229.214, -4.78672 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1364.43, -775.2, 83.0182 ); + ent.v["angles"] = ( 344.838, 214.713, -3.39837 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 761.395, -1830.95, -14.875 ); + ent.v["angles"] = ( 354.886, 229.214, -4.78672 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1500.93, 160.562, -392.879 ); + ent.v["angles"] = ( 284.923, 195.69, -15.4778 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1386.85, -0.40712, 104.125 ); + ent.v["angles"] = ( 344.921, 206.978, 0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1299.44, 240.533, 104.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1149.11, 258.088, 104.125 ); + ent.v["angles"] = ( 0, 203, 1 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1058.65, 242.355, 104.125 ); + ent.v["angles"] = ( 352.993, 226.945, 0.315841 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1025.44, -306.635, 104.125 ); + ent.v["angles"] = ( 351, 120, 0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1410.34, 1397.92, 64.456 ); + ent.v["angles"] = ( 356.003, 116.027, 0.30977 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1104.01, 2185.4, 34.628 ); + ent.v["angles"] = ( 360, 117, 0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -61.6901, -2529.28, -35.036 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -620.515, 1071.99, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 223.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -786.342, 942.03, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 213.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 161.709, 475.711, 253.315 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 90.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 414.705, 475.51, 253.512 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 90.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -128.84, 476.21, 253.019 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 90.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 166.246, -477.193, 257.013 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 90.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 419.242, -477.394, 253.111 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 90.0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -124.303, -476.695, 253.317 ); + ent.v["angles"] = vectorscale( ( 1, 1, 0 ), 90.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 403.564, 227.519, -28.5444 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 493.012, 227.148, -28.4856 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 402.841, 239.038, -20.5703 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 493.275, 239.146, -20.4755 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 492.853, 251.146, -12.5319 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 403.165, 250.941, -12.1948 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 402.717, 262.938, -4.20705 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 493.237, 263.159, -4.49432 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 402.988, 274.96, 3.72217 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 492.728, 275.093, 3.63967 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -411.512, 227.769, 3.57521 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -411.064, 215.772, -4.41254 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -411.388, 203.869, -12.788 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -410.648, 191.85, -20.7621 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -306.816, 191.918, -20.7033 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -306.974, 215.916, -4.74964 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -306.553, 203.916, -12.6932 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -306.6, 227.729, 3.28794 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -410.065, -227.751, 3.25096 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -409.681, -215.738, -4.78662 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -410.102, -203.738, -12.7302 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -409.839, -191.74, -20.7403 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -305.744, -227.642, 3.53823 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -306.192, -215.645, -4.44952 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -305.868, -203.742, -12.825 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -306.616, -191.924, -20.7991 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 403.816, -227.766, -28.6694 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 403.974, -251.764, -12.7157 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 403.553, -239.764, -20.6593 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 403.59, -263.777, -4.6781 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 404.099, -275.711, 3.45589 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 492.242, -275.675, 3.53839 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 492.065, -251.656, -12.3786 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 492.513, -263.653, -4.39083 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 492.389, -239.753, -20.7541 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 491.769, -227.139, -28.7282 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2082.61, -1.01203, 26.9824 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -150.194, 632.125, 125.662 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 485.992, -616.359, 126.075 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 693.681, 299.8, -28.4497 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 639.292, 299.774, -28.41 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 638.743, 323.778, -12.2831 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 638.473, 347.778, 3.68284 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 638.639, 371.835, 19.535 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 638.657, 395.833, 35.4332 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 692.673, 323.766, -12.3056 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 692.959, 347.825, 3.5542 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 692.97, 371.825, 19.4223 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 692.737, 395.796, 35.3611 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 638.444, 419.799, 51.3686 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 692.431, 419.777, 51.6694 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 692.598, 443.775, 67.6715 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 638.265, 443.77, 67.7783 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 638.156, 467.834, 83.4719 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 692.908, 467.784, 83.6632 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 692.631, 491.84, 99.5161 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 638.857, 491.813, 99.405 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -167.653, 841.118, 161.486 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 120.435, 840.829, 161.519 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 963.427, 932.405, 226.97 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 963.566, 828.126, 226.99 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 963.515, 700.186, 226.946 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 963.216, 579.167, 226.938 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1067.72, 579.378, 226.982 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1195.92, 579.024, 226.959 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1315.83, 579.121, 227.008 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 773.168, 931.6, 226.93 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 772.333, 827.754, 226.934 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 772.128, 699.719, 226.917 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 772.17, 579.753, 226.913 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 772.335, 459.918, 226.925 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 773.061, 340.964, 226.932 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 900.534, 341.812, 226.904 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1020.29, 340.464, 226.957 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1148.39, 340.17, 226.938 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1252.56, 340.682, 227 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1137.22, 329.999, 222.614 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1167.26, 591.005, 222.041 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1134.73, 319.875, 221.855 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 484.221, -907.598, 138.928 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 396.173, -907.707, 138.921 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 314.338, -907.49, 138.962 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 228.535, -907.985, 138.952 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 228.136, -824.176, 138.901 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 228.389, -720.292, 138.936 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 228.342, -630.07, 138.922 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 307.67, -628.383, 138.941 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 396.018, -627.999, 138.87 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 477.511, -628.4, 138.963 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 562.819, -627.973, 138.933 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 563.755, -719.835, 138.903 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 563.851, -816.061, 138.893 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 564.186, -907.832, 138.902 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 763.629, -260.158, 110.257 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 666.206, -260.229, 110.19 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 666.371, -517.457, 110.245 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 763.225, -516.866, 110.182 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 895.875, 959.012, 222.433 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 896.137, 968.985, 221.969 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1221.59, 1193.39, -32.3915 ); + ent.v["angles"] = ( 353.172, 210.076, -5.06534 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1914.29, 475.083, -98.5827 ); + ent.v["angles"] = ( 356.863, 226.856, -6.28727 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1907.93, -523.041, -101.72 ); + ent.v["angles"] = ( 354.75, 130.559, 5.69202 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1751.52, -318.157, -73.924 ); + ent.v["angles"] = ( 354.494, 119.12, -1.62881 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1736.65, 324.336, -77.8728 ); + ent.v["angles"] = ( 3.07512, 224.911, -4.85074 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1451.19, -743.178, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 112.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1415.04, 710.398, 8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 235.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 132.032, 1326.79, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 198.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_drone_light_yellow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1170.25, 600.996, 221.456 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 858.106, 1119.56, 72.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -60.0527, 1622.76, 8.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 111.503, 1259.6, 8.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -841.676, 696.682, 8.12501 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -857.078, -839.934, 8.12499 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -813.156, -1390.77, -15.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -360.583, -1532.07, -15.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -299.273, -1961.18, -39.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -64.2093, -2215.95, -38.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 258.71, -1393.37, 2.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1063.44, -652.588, 104.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 913.612, 1625.07, 72.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -486.997, -0.34445, 131.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -486.258, 65.9312, 131.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -487.054, -65.6625, 131.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 55.6919, 553.974, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 87.4143, 554.415, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 119.298, 554.324, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 151.278, 554.342, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 183.427, 554.225, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 55.4838, 445.547, 147.675 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 0.221552, 446.094, 147.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -64.1532, 446.451, 147.775 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -120.541, 444.114, 147.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -120.279, 514.237, 147.975 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -62.2018, 514.628, 147.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 0.885532, 514.311, 148.075 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 56.3233, 514.524, 147.775 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -36.2142, -538.871, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -12.4754, -538.573, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 11.7402, -538.678, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 55.2983, -445.035, 147.375 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -0.633395, -445.515, 147.575 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -64.7383, -445.413, 147.475 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -120.461, -445.296, 147.375 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 55.1512, -514.847, 147.575 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -0.716966, -515.157, 147.575 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -64.0745, -514.529, 147.275 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -121.025, -514.744, 147.475 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 243.696, -539.428, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 275.842, -539.417, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 307.835, -539.438, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 339.771, -539.372, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 371.585, -539.575, 143.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 439.913, -514.518, 147.488 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 384.045, -514.828, 147.488 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 320.687, -514.2, 147.188 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 263.737, -514.415, 147.388 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 264.301, -444.968, 147.288 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 320.024, -445.085, 147.388 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 384.129, -445.187, 147.488 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 440.06, -444.706, 147.288 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 439.61, 445.411, 147.387 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 383.742, 445.101, 147.387 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 320.384, 445.73, 147.087 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 263.434, 445.515, 147.287 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 263.998, 514.962, 147.187 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 319.721, 514.845, 147.287 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 383.825, 514.743, 147.387 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 439.757, 515.224, 147.187 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1131.99, -1162.94, -35.0664 ); + ent.v["angles"] = ( 352.41, 166.72, 1.50995 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1019.32, -2462.65, -165.875 ); + ent.v["angles"] = ( 348.921, 153.033, 5.10368 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1087.36, -2073.48, -164.875 ); + ent.v["angles"] = ( 347.82, 176.495, 0.309443 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1019.34, -2130.27, -164.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1002.59, -2414.97, -164.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 161.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -839.085, -2526.31, -165.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -618.858, -2535.85, -165.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1056.89, -1422.37, -164.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1075.03, -1422.39, -165.875 ); + ent.v["angles"] = ( 347.82, 176.495, 0.309443 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1137.08, -1725.78, -165.875 ); + ent.v["angles"] = ( 347.82, 176.495, 0.309443 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 82.7181, 716.205, 130.414 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -127.984, 715.832, 130.285 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -86.7862, 800.508, 269.592 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -23.1172, 800.587, 269.581 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 40.8077, 800.617, 269.566 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 104.999, 800.361, 269.578 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 168.631, 800.134, 269.516 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -151.392, 800.161, 269.5 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -215.677, 799.702, 269.484 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1166.22, 1228.2, 72.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 8.88535, 2738.81, -25.875 ); + ent.v["angles"] = ( 352, 182, 0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 249.542, 2439.57, -23.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 288.154, 2647.37, -23.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 191.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 286.908, 2807.39, -23.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 187.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 83.4179, 2835.79, -23.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -69.8988, 2749.31, -23.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 167.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -45.3872, 2416.13, -23.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 164.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 75.4267, 2483.04, -23.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 164.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 21.5958, 2403.97, -23.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -592.784, 2.75473, 143.495 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -634.921, 2.44208, 143.457 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1265.11, -262.639, 258 ); + ent.v["angles"] = ( 14.5514, 170.533, 4.19063 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_fountain2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 908.787, 1379.48, 141.626 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_fountain2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 859.033, 1379.95, 141.624 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_fountain2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 859.441, 1430.14, 141.621 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_fountain2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 908.674, 1429.57, 141.626 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -550.842, 1.93084, 143.418 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_cloud_vista01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4176.68, -1558.32, -265.88 ); + ent.v["angles"] = ( 356.218, 90.936, 15.4889 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_cloud_vista01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4123.72, 2820.82, -160.92 ); + ent.v["angles"] = ( 3.80286, 94.5069, 16.5068 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -203.562, -311.435, 452.875 ); + ent.v["angles"] = ( 31, 47, 0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 267.231, -701.351, 169.875 ); + ent.v["angles"] = ( 39.9927, 358.695, -0.839002 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 407.841, -705.041, 171.999 ); + ent.v["angles"] = ( 39.9927, 358.695, -0.839002 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1731.03, -98.9847, 160.834 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1730.95, 98.0763, 161.032 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1887.13, 385.512, 160.689 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2272.02, 552.056, 160.752 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2657.71, 385.377, 160.602 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2825.86, -0.414622, 160.702 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2657.37, -385.33, 160.739 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2271.75, -552.032, 160.614 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1886.41, -385.326, 160.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 800.335, -1150.44, 49.4157 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1038.38, -911.995, 146.931 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1380.42, -740.291, 146.835 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 326.222, -883.306, 56.9769 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 66.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 469.581, -564.856, 53.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -90.72, -458.701, 47.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 422.238, 585.337, 56.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -127.314, 472.814, 57.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -329.886, -191.875, 60.3687 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 664.013, 557.267, 180.125 ); + ent.v["angles"] = ( 22.9984, 270.059, 0.188646 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 875.494, 939.356, 167.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 264.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -172.074, 694.08, 78.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 38.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1041.95, -5.36076, 44.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 497.014, -1401.67, 2.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 699.705, -1112.65, 2.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 227.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -579.589, -1555.87, 174.901 ); + ent.v["angles"] = ( 270.1, 89.9824, -89.9824 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -423.362, -1712.07, 174.395 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_hvac_steam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -732.81, -1729, 170.305 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 279.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_landing_light_vertigo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 23.9426, -2007.99, 124.917 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 386.703, -1523.1, 85.3447 ); + ent.v["angles"] = ( 36, 90, 0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 584.358, -1637.63, 85.5607 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 44.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -226.04, 2168.42, 108.122 ); + ent.v["angles"] = ( 42, 270, 0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -641.169, -1541.63, 85.34 ); + ent.v["angles"] = ( 45, 90, 0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 250.309, -2019.86, 93.6452 ); + ent.v["angles"] = ( 42, 270, 0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -137.563, -2445.94, -39.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 194.49, -2120.83, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -84.0866, -2048.9, -38.875 ); + ent.v["angles"] = ( 354.008, 179.017, -0.315168 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -556.644, -2377.1, -15.875 ); + ent.v["angles"] = ( 2, 176, 0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 95.3456, -1425.73, 0.124997 ); + ent.v["angles"] = ( 356, 176.996, 0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 610.68, -1909.84, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med_dark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 107.509, 2652.71, -24.875 ); + ent.v["angles"] = ( 355, 177, 0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_leaves" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 70.2246, 1966.59, 236.093 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -868.654, 935.581, 8.125 ); + ent.v["angles"] = ( 359.939, 204.995, 0.58151 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 926.906, 93.2134, -30.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 919.822, 0.470383, -31.675 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_ground_dust" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 910.76, -81.669, -30.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 809.796, -82.3613, -31.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 805.749, 81.2526, -31.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 939.436, 9.13624, 22.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 936.147, 106.635, 25.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 946.549, -102.599, 22.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 648.747, -63.0647, -8.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 653.365, 83.0813, -8.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -537.313, 102.399, 149.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -707.767, 131.302, 149.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -537.69, -73.0583, 149.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -706.103, -129.935, 149.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1375.61, 989.379, 82.125 ); + ent.v["angles"] = ( 359.066, 148, -0.35845 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1199.92, 283.929, 145.125 ); + ent.v["angles"] = ( 359.06, 146.999, -0.342117 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1039.47, 1054.02, 82.9967 ); + ent.v["angles"] = ( 342.07, 209.015, 1.94891 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 732.851, 2360.24, -71.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 552.6, 2375.11, -71.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 958.315, 2224.68, -16.6024 ); + ent.v["angles"] = ( 2.74195, 155.824, -4.37488 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 389.484, 2408.95, -71.875 ); + ent.v["angles"] = ( 323.84, 185.566, -5.90976 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -642.125, 859.219, 150.697 ); + ent.v["angles"] = ( 28.3977, 183.831, -2.77951 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -821.479, 1014.5, 137.195 ); + ent.v["angles"] = ( 18.4505, 252.99, 10.3824 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 405.84, -1081.51, 17.125 ); + ent.v["angles"] = ( 354.531, 117.179, 0.385648 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 526.185, -1171.74, 10.125 ); + ent.v["angles"] = ( 357.54, 156.217, 0.607548 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 79.9893, -2228.97, -25.8254 ); + ent.v["angles"] = ( 343.583, 186.444, -0.980469 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -187.233, -2320.71, -39.875 ); + ent.v["angles"] = ( 343.583, 186.444, -0.980469 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1115.59, 1039.79, 15.5127 ); + ent.v["angles"] = ( 352.146, 239.242, 6.57324 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -660.494, -1348.97, 6.125 ); + ent.v["angles"] = ( 356.459, 157.895, -6.48668 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -403.679, -1659.3, 0.124992 ); + ent.v["angles"] = ( 348.422, 130.713, -4.92561 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 74.5673, -1506, 0.125 ); + ent.v["angles"] = ( 348.315, 188.387, -11.7419 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -335.937, -1665.94, -14.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 139.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1167.88, -149.835, 71.125 ); + ent.v["angles"] = ( 11.899, 140.524, -6.36916 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1181.91, 156.689, 71.7639 ); + ent.v["angles"] = ( 10.5463, 207.968, 8.43506 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 272.377, 156.772, 294.446 ); + ent.v["angles"] = ( 20.4738, 168.143, -0.190327 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 280.783, -157.498, 304.554 ); + ent.v["angles"] = ( 20.062, 201.383, 12.4488 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 359.501, 2.97124, 374.064 ); + ent.v["angles"] = ( 3.85253, 177.929, -0.592478 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1316.42, 1532.06, 9.45738 ); + ent.v["angles"] = ( 13.7406, 138.541, 2.39633 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 832.702, 2420.86, -63.875 ); + ent.v["angles"] = ( 352.486, 184.368, -2.59096 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_window_exploder_sm" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1087.41, 1790.99, -15.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1004; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1154.04, 1781.46, -71.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1004; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_window_exploder_sm" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1089.45, 1722.5, -16.375 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_window_exploder_sm" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1090.77, 1658.11, -13.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1006; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1153.31, 1716.83, -70.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1147.73, 1655.14, -70.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1006; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 460.062, -5.77599, 241.875 ); + ent.v["angles"] = ( 70.985, 357.368, -1.97359 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 602.999, 2.65791, 247.875 ); + ent.v["angles"] = ( 73.9827, 356.995, -2.33009 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 550.875, -834.571, 151.889 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 249.171, -832.189, 144.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1169.75, 428.055, 241.997 ); + ent.v["angles"] = ( 35, 359.064, -178.965 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 993.56, 489.823, 247.855 ); + ent.v["angles"] = ( 32, 359, -179 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 830.228, 490.995, 261.875 ); + ent.v["angles"] = ( 37, 359, 180 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 894.313, 367.333, 232.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1068.96, 363.937, 232.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1242.24, 367.463, 232.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 98.2005, 951.081, 210.713 ); + ent.v["angles"] = ( 45.9909, 271.035, -178.561 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -111.793, 938.676, 216.647 ); + ent.v["angles"] = ( 45.9909, 271.035, -178.561 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -23.9163, 940.398, 216.935 ); + ent.v["angles"] = ( 45.9909, 271.035, -178.561 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_dirt_swirl" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 878.19, 1654.11, -71.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1005; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_wind_med" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1049.99, 1721.41, -71.875 ); + ent.v["angles"] = ( 353.499, 159.441, 1.40194 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_window_exploder_sm" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1064.93, 2083.99, -4.45833 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1007; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_window_exploder_sm" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1066.97, 2015.5, -4.95833 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1008; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_window_exploder_sm" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1068.29, 1951.11, -2.45833 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1009; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1062.04, 1944.34, -71.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1009; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1064.31, 2008.03, -71.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1008; + ent = maps\mp\_utility::createexploder( "fx_mp_vertigo_ground_dust_lite" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1065.07, 2083.63, -71.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1007; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 416.036, -993.68, 124.603 ); + ent.v["angles"] = ( 37, 180, 0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 531.298, 417.494, 111.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 531.907, 469.291, 111.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 531.294, 520.883, 111.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1157.37, 11.9901, 56.9112 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 351.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -997.433, -117.621, 20.6506 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1036.17, -115.582, 20.5776 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 83.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1073.82, -110.394, 20.6955 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 73.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -960.17, -115.855, 20.7174 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -921.688, -110.503, 20.7792 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 102.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1074.04, 110.256, 20.7069 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 283.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1035.62, 115.503, 20.8145 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -998.143, 117.164, 20.6784 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -959.506, 115.432, 20.7077 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 261.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -921.932, 109.942, 20.7696 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 250.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4960, -14193.7, 1559.32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4945.9, -14767.3, 1557.57 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5559.13, -14165.1, 1558.79 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5250.75, -14450.8, 3634.11 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3796.34, 1023.36, 3187.05 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4441.48, -265.302, 4685.88 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -17579.9, -8675.96, -1260.8 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -17935.2, -6071.58, 95.2771 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5536.33, 24316.3, 901.667 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -12759.3, 8842.79, 1076.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_cloud_vista02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 14660.5, -1574.92, -3077.22 ); + ent.v["angles"] = ( 272.996, 272, -80 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_cloud_vista02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -12533.4, 2949.43, -3652.95 ); + ent.v["angles"] = ( 272.996, 272, -102 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_cloud_vista02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -8026.13, 17166.5, -3406.23 ); + ent.v["angles"] = ( 275.107, 73.0283, 61.0151 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 248.515, -578.392, 110.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 301.871, -578.087, 110.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 352.932, -576.978, 110.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 584.976, -433.18, 111.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 585.555, -484.838, 111.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 585.231, -536.431, 111.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 702.856, 1117.16, 199.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 699.4, 1309.12, 178.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 705.887, 1437.78, 135.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 701.718, 1221.89, 178.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 702.928, 1512.3, 157.375 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 704.998, 1627.89, 135.875 ); + ent.v["angles"] = ( 90, 359.935, -1.06532 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -648.854, 804.452, 143.772 ); + ent.v["angles"] = ( 42, 180, 0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -885.009, 1162.61, 113.108 ); + ent.v["angles"] = ( 40.7, 90, 0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -700.175, 1310.6, 137 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -795.727, 1315.04, 135 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -890.214, 1315.26, 137 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -697.896, 1441.97, 137 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -795.668, 1439.3, 137 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -892.328, 1441.47, 137 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -892, 1566.8, 137 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -795.344, 1568.09, 137 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -698.9, 1567.67, 137 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -702.955, -2137.27, -47.4609 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -702.795, -2260.32, -47.4965 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -891.843, -2398.4, -47.4919 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -914.01, -2258.67, -47.5889 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -914.119, -2144.49, -47.6094 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 12598.5, 12054.5, -3256.24 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 21165.2, 13485.9, 794.341 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -14485.4, 4189.54, -2414.1 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -916.875, 1303.61, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_paper_interior_short" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -706.259, 1544.53, 8.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 243.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3701.46, -24961, -3912.72 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -5469.52, -23030.6, -1608.99 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_vista_glare02" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -12338.3, 8835.45, 247.365 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -922.059, -1734.65, 106.431 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -921.365, -1859.69, 106.374 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -813.061, -1859.79, 106.463 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -787.081, -1605.17, 106.596 ); + ent.v["angles"] = ( 90, 180, 90 ); + ent.v["delay"] = -44; +} diff --git a/MP/Maps/Vertigo/maps/mp/mp_vertigo.gsc b/MP/Maps/Vertigo/maps/mp/mp_vertigo.gsc new file mode 100644 index 0000000..8202b0a --- /dev/null +++ b/MP/Maps/Vertigo/maps/mp/mp_vertigo.gsc @@ -0,0 +1,181 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_vertigo_fx; +#include maps\mp\_load; +#include maps\mp\mp_vertigo_amb; +#include maps\mp\_compass; +#include maps\mp\mp_vertigo_doors; +#include maps\mp\gametypes\_deathicons; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + level.ragdoll_override = ::ragdoll_override; + maps\mp\mp_vertigo_fx::main(); + maps\mp\_load::main(); + maps\mp\mp_vertigo_amb::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_vertigo" ); + setdvar( "compassmaxrange", "2100" ); + game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; + game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; + game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; + game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; + game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; + game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; + game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; + game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; + game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; + game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; + level thread waitforglassbreak(); + + if ( getgametypesetting( "allowMapScripting" ) ) + level maps\mp\mp_vertigo_doors::init(); +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2400", reset_dvars ); + ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1400", reset_dvars ); +} + +waitforglassbreak() +{ + if ( glassexploderssetupcorrectly( 1000, 3 ) == 0 ) + return; + + if ( glassexploderssetupcorrectly( 1004, 3 ) == 0 ) + return; + + if ( glassexploderssetupcorrectly( 1007, 3 ) == 0 ) + return; + + for (;;) + { + level waittill( "glass_smash", origin ); + + playglassexploder( origin, 1000, 3 ); + playglassexploder( origin, 1004, 3 ); + playglassexploder( origin, 1007, 3 ); + } +} + +playglassexploder( origin, exploderbase, explodercount ) +{ + distancesq = distancesquared( origin, level.createfxexploders[exploderbase][0].v["origin"] ); + + if ( distancesq > 21000 ) + return; + + nearestpane = exploderbase; + + if ( distancesq > 5000 ) + { + nearestpane = -1; + distancesq = 5000; + } + + nearestpanedistsq = distancesq; + + for ( glassexploderindex = 1; glassexploderindex < explodercount; glassexploderindex++ ) + { + glassexploder = glassexploderindex + exploderbase; + currentdistsq = distancesquared( origin, level.createfxexploders[glassexploder][0].v["origin"] ); + + if ( currentdistsq < nearestpanedistsq ) + { + nearestpane = glassexploder; + nearestpanedistsq = currentdistsq; + } + } + + if ( nearestpane != -1 ) + { + exploder( nearestpane ); + level thread window_smash_wind_sound( origin ); + } +} + +window_smash_wind_sound( origin ) +{ + wind_ent = spawn( "script_origin", origin ); + wind_ent playloopsound( "evt_window_wind", 1 ); + + level waittill( "game_ended" ); + + wind_ent stoploopsound( 0.5 ); + wind_ent delete(); +} + +glassexploderssetupcorrectly( exploderbase, explodercount ) +{ + for ( glassexploderindex = 0; glassexploderindex < explodercount; glassexploderindex++ ) + { + glassexploder = glassexploderindex + exploderbase; + + if ( !isdefined( level.createfxexploders[glassexploder] ) ) + { +/# + assertmsg( "Glass exploder " + glassexploder + " is undefined" ); +#/ + return false; + } + + if ( !isdefined( level.createfxexploders[glassexploder][0] ) || !isdefined( level.createfxexploders[glassexploder][0].v ) || !isdefined( level.createfxexploders[glassexploder][0].v["origin"] ) ) + { +/# + assertmsg( "Glass exploder " + glassexploder + " is undefined" ); +#/ + return false; + } + } + + return true; +} + +ragdoll_override( idamage, smeansofdeath, sweapon, shitloc, vdir, vattackerorigin, deathanimduration, einflictor, ragdoll_jib, body ) +{ + if ( smeansofdeath == "MOD_FALLING" ) + { + deathanim = body getcorpseanim(); + startfrac = deathanimduration / 1000; + + if ( animhasnotetrack( deathanim, "start_ragdoll" ) ) + { + times = getnotetracktimes( deathanim, "start_ragdoll" ); + + if ( isdefined( times ) ) + startfrac = times[0]; + } + + self.body = body; + + if ( !isdefined( self.switching_teams ) ) + thread maps\mp\gametypes\_deathicons::adddeathicon( body, self, self.team, 5.0 ); + + thread startragdollonground( startfrac ); + return true; + } + + return false; +} + +startragdollonground( deathanimduration ) +{ + for ( timer = 0; timer < deathanimduration; timer += 0.05 ) + { + if ( !isdefined( self ) || !isdefined( self.body ) ) + return; + + if ( self isonground() ) + break; + + wait 0.05; + } + + if ( !isdefined( self ) || !isdefined( self.body ) ) + return; + + self.body startragdoll(); +} diff --git a/MP/Maps/Vertigo/maps/mp/mp_vertigo_amb.gsc b/MP/Maps/Vertigo/maps/mp/mp_vertigo_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Vertigo/maps/mp/mp_vertigo_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Vertigo/maps/mp/mp_vertigo_doors.gsc b/MP/Maps/Vertigo/maps/mp/mp_vertigo_doors.gsc new file mode 100644 index 0000000..2e8f2a3 --- /dev/null +++ b/MP/Maps/Vertigo/maps/mp/mp_vertigo_doors.gsc @@ -0,0 +1,287 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\gametypes\_weaponobjects; +#include maps\mp\_tacticalinsertion; + +init() +{ + triggers = getentarray( "trigger_multiple", "classname" ); + + for ( i = 0; i < 2; i++ ) + { + door = getent( "vertigo_door" + i, "targetname" ); + o = ( i + 1 ) % 2; + otherdoor = getent( "vertigo_door" + o, "targetname" ); + + if ( !isdefined( door ) ) + continue; + + right = anglestoforward( door.angles ); + right = vectorscale( right, 54 ); + door.opened = 1; + door.origin_opened = door.origin; + door.force_open_time = 0; + + if ( isdefined( door.script_noteworthy ) && door.script_noteworthy == "flip" ) + door.origin_closed = door.origin - right; + else + door.origin_closed = door.origin + right; + + door.origin = door.origin_closed; + pointa = door getpointinbounds( 1, 1, 1 ); + pointb = door getpointinbounds( -1, -1, -1 ); + door.mins = getminpoint( pointa, pointb ) - door.origin; + door.maxs = getmaxpoint( pointa, pointb ) - door.origin; + door setcandamage( 1 ); + door allowbottargetting( 0 ); + door.triggers = []; + + foreach ( trigger in triggers ) + { + if ( isdefined( trigger.target ) ) + { + if ( trigger.target == door.targetname ) + { + trigger.mins = trigger getmins(); + trigger.maxs = trigger getmaxs(); + door.triggers[door.triggers.size] = trigger; + } + } + } + + door thread door_damage_think( otherdoor ); + + if ( i > 0 ) + { + door thread door_notify_think( i ); + continue; + } + + door thread door_think( i ); + } +} + +getminpoint( pointa, pointb ) +{ + point = []; + point[0] = pointa[0]; + point[1] = pointa[1]; + point[2] = pointa[2]; + + for ( i = 0; i < 3; i++ ) + { + if ( point[i] > pointb[i] ) + point[i] = pointb[i]; + } + + return ( point[0], point[1], point[2] ); +} + +getmaxpoint( pointa, pointb ) +{ + point = []; + point[0] = pointa[0]; + point[1] = pointa[1]; + point[2] = pointa[2]; + + for ( i = 0; i < 3; i++ ) + { + if ( point[i] < pointb[i] ) + point[i] = pointb[i]; + } + + return ( point[0], point[1], point[2] ); +} + +door_think( index ) +{ + wait( 0.05 * index ); + self door_close(); + + for (;;) + { + wait 0.25; + + if ( self door_should_open() ) + { + level notify( "dooropen" ); + self door_open(); + } + else + { + level notify( "doorclose" ); + self door_close(); + } + + self movement_process(); + } +} + +door_notify_think( index ) +{ + wait( 0.05 * index ); + self door_close(); + + for (;;) + { + event = level waittill_any_return( "dooropen", "doorclose" ); + + if ( !isdefined( event ) ) + continue; + + if ( event == "dooropen" ) + self door_open(); + else + self door_close(); + + self movement_process(); + } +} + +door_should_open() +{ + if ( gettime() < self.force_open_time ) + return true; + + foreach ( trigger in self.triggers ) + { + if ( trigger trigger_is_occupied() ) + return true; + } + + return false; +} + +door_open() +{ + if ( self.opened ) + return; + + dist = distance( self.origin_opened, self.origin ); + frac = dist / 54; + time = clamp( frac * 0.3, 0.1, 0.3 ); + self moveto( self.origin_opened, time ); + self playsound( "mpl_drone_door_open" ); + self.opened = 1; +} + +door_close() +{ + if ( !self.opened ) + return; + + dist = distance( self.origin_closed, self.origin ); + frac = dist / 54; + time = clamp( frac * 0.3, 0.1, 0.3 ); + self moveto( self.origin_closed, time ); + self playsound( "mpl_drone_door_close" ); + self.opened = 0; +} + +movement_process() +{ + moving = 0; + + if ( self.opened ) + { + if ( distancesquared( self.origin, self.origin_opened ) > 0.001 ) + moving = 1; + } + else if ( distancesquared( self.origin, self.origin_closed ) > 0.001 ) + moving = 1; + + if ( moving ) + { + entities = gettouchingvolume( self.origin, self.mins, self.maxs ); + + foreach ( entity in entities ) + { + if ( isdefined( entity.classname ) && entity.classname == "grenade" ) + { + if ( !isdefined( entity.name ) ) + continue; + + if ( !isdefined( entity.owner ) ) + continue; + + watcher = entity.owner getwatcherforweapon( entity.name ); + + if ( !isdefined( watcher ) ) + continue; + + watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined ); + } + + if ( self.opened ) + continue; + + if ( isdefined( entity.classname ) && entity.classname == "auto_turret" ) + { + if ( !isdefined( entity.damagedtodeath ) || !entity.damagedtodeath ) + entity domaxdamage( self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); + + continue; + } + + if ( isdefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" ) + entity maps\mp\_tacticalinsertion::destroy_tactical_insertion(); + } + } +} + +trigger_is_occupied() +{ + entities = gettouchingvolume( self.origin, self.mins, self.maxs ); + + foreach ( entity in entities ) + { + if ( isalive( entity ) ) + { + if ( isplayer( entity ) || isai( entity ) || isvehicle( entity ) ) + return true; + } + } + + return false; +} + +getwatcherforweapon( weapname ) +{ + if ( !isdefined( self ) ) + return undefined; + + if ( !isplayer( self ) ) + return undefined; + + for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) + { + if ( self.weaponobjectwatcherarray[i].weapon != weapname ) + continue; + + return self.weaponobjectwatcherarray[i]; + } + + return undefined; +} + +door_damage_think( otherdoor ) +{ + self.maxhealth = 99999; + self.health = self.maxhealth; + + for (;;) + { + self waittill( "damage", damage, attacker, dir, point, mod, model, tag, part, weapon, flags ); + + self.maxhealth = 99999; + self.health = self.maxhealth; + + if ( mod == "MOD_PISTOL_BULLET" || mod == "MOD_RIFLE_BULLET" ) + { + self.force_open_time = gettime() + 1500; + otherdoor.force_open_time = gettime() + 1500; + } + } +} diff --git a/MP/Maps/Vertigo/maps/mp/mp_vertigo_fx.gsc b/MP/Maps/Vertigo/maps/mp/mp_vertigo_fx.gsc new file mode 100644 index 0000000..2b54e95 --- /dev/null +++ b/MP/Maps/Vertigo/maps/mp/mp_vertigo_fx.gsc @@ -0,0 +1,84 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_vertigo_fx; +#include maps\mp\createart\mp_vertigo_art; + +main() +{ + precache_fxanim_props(); + precache_fxanim_props_dlc(); + precache_scripted_fx(); + precache_createfx_fx(); + maps\mp\createfx\mp_vertigo_fx::main(); + maps\mp\createart\mp_vertigo_art::main(); +} + +precache_scripted_fx() +{ + +} + +precache_createfx_fx() +{ + level._effect["fx_mp_vertigo_tube_cloud"] = loadfx( "maps/mp_maps/fx_mp_vertigo_tube_cloud" ); + level._effect["fx_mp_vertigo_engine_exhaust"] = loadfx( "maps/mp_maps/fx_mp_vertigo_engine_exhaust" ); + level._effect["fx_mp_vertigo_hvac_steam"] = loadfx( "maps/mp_maps/fx_mp_vertigo_hvac_steam" ); + level._effect["fx_mp_vertigo_wind_cloud_med"] = loadfx( "maps/mp_maps/fx_mp_vertigo_wind_cloud_med" ); + level._effect["fx_mp_vertigo_wind_med"] = loadfx( "maps/mp_maps/fx_mp_vertigo_wind_med" ); + level._effect["fx_mp_vertigo_wind_med_dark"] = loadfx( "maps/mp_maps/fx_mp_vertigo_wind_med_dark" ); + level._effect["fx_mp_vertigo_ground_dust"] = loadfx( "maps/mp_maps/fx_mp_vertigo_ground_dust" ); + level._effect["fx_mp_vertigo_ground_dust_lite"] = loadfx( "maps/mp_maps/fx_mp_vertigo_ground_dust_lite" ); + level._effect["fx_mp_vertigo_dirt_swirl"] = loadfx( "maps/mp_maps/fx_mp_vertigo_dirt_swirl" ); + level._effect["fx_mp_vertigo_cloud_vista01"] = loadfx( "maps/mp_maps/fx_mp_vertigo_cloud_vista01" ); + level._effect["fx_mp_vertigo_cloud_vista02"] = loadfx( "maps/mp_maps/fx_mp_vertigo_cloud_vista02" ); + level._effect["fx_mp_vertigo_window_exploder"] = loadfx( "maps/mp_maps/fx_mp_vertigo_window_exploder" ); + level._effect["fx_mp_vertigo_window_exploder_sm"] = loadfx( "maps/mp_maps/fx_mp_vertigo_window_exploder_sm" ); + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); + level._effect["fx_mp_vertigo_leaves"] = loadfx( "maps/mp_maps/fx_mp_vertigo_leaves" ); + level._effect["fx_paper_interior_short"] = loadfx( "debris/fx_paper_interior_short" ); + level._effect["fx_mp_vertigo_fountain"] = loadfx( "maps/mp_maps/fx_mp_vertigo_fountain" ); + level._effect["fx_mp_vertigo_fountain2"] = loadfx( "maps/mp_maps/fx_mp_vertigo_fountain2" ); + level._effect["fx_drone_red_blink"] = loadfx( "light/fx_drone_red_blink" ); + level._effect["fx_vertigo_rectangle_light_skinny"] = loadfx( "light/fx_vertigo_rectangle_light_skinny" ); + level._effect["fx_drone_light_yellow"] = loadfx( "light/fx_drone_light_yellow" ); + level._effect["fx_vertigo_step_light"] = loadfx( "light/fx_vertigo_step_light" ); + level._effect["fx_vertigo_step_light_sm"] = loadfx( "light/fx_vertigo_step_light_sm" ); + level._effect["fx_mp_vertigo_pillar_lights"] = loadfx( "maps/mp_maps/fx_mp_vertigo_pillar_lights" ); + level._effect["fx_mp_vertigo_ceiling_light"] = loadfx( "maps/mp_maps/fx_mp_vertigo_ceiling_light" ); + level._effect["fx_mp_vertigo_ceiling_light_sm"] = loadfx( "maps/mp_maps/fx_mp_vertigo_ceiling_light_sm" ); + level._effect["fx_light_god_ray_mp_vertigo"] = loadfx( "env/light/fx_light_god_ray_mp_vertigo" ); + level._effect["fx_light_god_ray_mp_vertigo_sm"] = loadfx( "env/light/fx_light_god_ray_mp_vertigo_sm" ); + level._effect["fx_light_mag_ceiling_light"] = loadfx( "light/fx_light_mag_ceiling_light" ); + level._effect["fx_landing_light_vertigo"] = loadfx( "light/fx_landing_light_vertigo" ); + level._effect["fx_mp_vertigo_scanner_glare"] = loadfx( "maps/mp_maps/fx_mp_vertigo_scanner_glare" ); + level._effect["fx_vertigo_vista_glare01"] = loadfx( "light/fx_vertigo_vista_glare01" ); + level._effect["fx_vertigo_vista_glare02"] = loadfx( "light/fx_vertigo_vista_glare02" ); + level._effect["fx_vertigo_rectangle_light01"] = loadfx( "light/fx_vertigo_rectangle_light01" ); + level._effect["fx_lf_mp_vertigo_sun1"] = loadfx( "lens_flares/fx_lf_mp_vertigo_sun1" ); + level._effect["fx_insects_swarm_lg_light"] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["wirespark_med"] = %fxanim_gp_wirespark_med_anim; + level.scr_anim["fxanim_props"]["stair_chain"] = %fxanim_mp_ver_stair_chain_sign_anim; + level.scr_anim["fxanim_props"]["roofvent_modern"] = %fxanim_gp_roofvent_slow_anim; + level.scr_anim["fxanim_props"]["cell_antenna"] = %fxanim_gp_cell_antenna_anim; + level.scr_anim["fxanim_props"]["antenna_rooftop"] = %fxanim_gp_antenna_rooftop_anim; + level.scr_anim["fxanim_props"]["deck_antenna"] = %fxanim_gp_deck_antenna_anim; + level.scr_anim["fxanim_props"]["ant_rooftop_small"] = %fxanim_gp_antenna_rooftop_small_anim; + level.scr_anim["fxanim_props"]["sat_dish"] = %fxanim_gp_satellite_dish_anim; + level.scr_anim["fxanim_props"]["com_tower"] = %fxanim_gp_communication_tower_anim; +} + +#using_animtree("fxanim_props_dlc"); + +precache_fxanim_props_dlc() +{ + level.scr_anim["fxanim_props_dlc"]["hook"] = %fxanim_mp_ver_hook_anim; + level.scr_anim["fxanim_props_dlc"]["blinds_impact"] = %fxanim_gp_blinds_long_impact_anim; + level.scr_anim["fxanim_props_dlc"]["blinds_idle"] = %fxanim_gp_blinds_long_idle_anim; +} diff --git a/MP/Maps/Yemen/aitype/clientscripts/enemy_dog_mp.csc b/MP/Maps/Yemen/aitype/clientscripts/enemy_dog_mp.csc new file mode 100644 index 0000000..36b6f3f --- /dev/null +++ b/MP/Maps/Yemen/aitype/clientscripts/enemy_dog_mp.csc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\clientscripts\character_mp_german_shepherd; + +main() +{ + character\clientscripts\character_mp_german_shepherd::main(); + self._aitype = "enemy_dog_mp"; +} + +precache( ai_index ) +{ + character\clientscripts\character_mp_german_shepherd::precache(); + usefootsteptable( ai_index, "default_ai" ); + setdemolockonvalues( ai_index, 100, 8, 0, 60, 8, 0, 60 ); +} diff --git a/MP/Maps/Yemen/aitype/enemy_dog_mp.gsc b/MP/Maps/Yemen/aitype/enemy_dog_mp.gsc new file mode 100644 index 0000000..3681044 --- /dev/null +++ b/MP/Maps/Yemen/aitype/enemy_dog_mp.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\character_mp_german_shepherd; + +main() +{ + self.accuracy = 1; + self.animstatedef = ""; + self.animtree = "dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "dog"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\character_mp_german_shepherd::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + character\character_mp_german_shepherd::precache(); +} diff --git a/MP/Maps/Yemen/character/character_mp_german_shepherd.gsc b/MP/Maps/Yemen/character/character_mp_german_shepherd.gsc new file mode 100644 index 0000000..84d735a --- /dev/null +++ b/MP/Maps/Yemen/character/character_mp_german_shepherd.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "german_shepherd" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "german_shepherd" ); +} diff --git a/MP/Maps/Yemen/character/clientscripts/character_mp_german_shepherd.csc b/MP/Maps/Yemen/character/clientscripts/character_mp_german_shepherd.csc new file mode 100644 index 0000000..1da1555 --- /dev/null +++ b/MP/Maps/Yemen/character/clientscripts/character_mp_german_shepherd.csc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + +} + +precache() +{ + register_gibs(); +} + +register_gibs() +{ + +} diff --git a/MP/Maps/Yemen/clientscripts/mp/createfx/mp_socotra_fx.csc b/MP/Maps/Yemen/clientscripts/mp/createfx/mp_socotra_fx.csc new file mode 100644 index 0000000..b54b63e --- /dev/null +++ b/MP/Maps/Yemen/clientscripts/mp/createfx/mp_socotra_fx.csc @@ -0,0 +1,1732 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_fx; + +main() +{ + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -428.667, 1020.38, 227.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -299.283, -1657.69, 211 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 116.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_smk_plume_md_blk" ); + ent.v["origin"] = ( -684.98, -2470.29, 271.493 ); + ent.v["angles"] = ( 13.1475, 136.766, -14.1714 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -919.616, -1164.18, 199.961 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 123.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_md" ); + ent.v["origin"] = ( -1113.35, -989.305, 202.779 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 75.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -1118.63, -605.538, 199.424 ); + ent.v["angles"] = ( 359, 148, 4 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -1292.58, -437.347, 208 ); + ent.v["angles"] = ( 358, 79, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -1080.2, -21.7796, 199.386 ); + ent.v["angles"] = ( 360, 100, -5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -821.967, 276.546, 135.901 ); + ent.v["angles"] = ( 6, 64, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_windy_heavy_md" ); + ent.v["origin"] = ( 2287.92, 574.404, 208 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 162.951 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 1948.58, 398.333, 215.353 ); + ent.v["angles"] = ( 4.06298, 162.951, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 2128.62, 309.126, 222.428 ); + ent.v["angles"] = ( 359.063, 162.951, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 1676, 1504.57, 285.333 ); + ent.v["angles"] = ( 359.063, 162.951, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 1577.41, 1108.61, 208.397 ); + ent.v["angles"] = ( 359.063, 162.951, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 1609.37, -537.299, 104 ); + ent.v["angles"] = ( 1.06456, 152.953, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_md" ); + ent.v["origin"] = ( 1413.76, -1118.39, 113 ); + ent.v["angles"] = ( 1.86574, 124.938, -0.888848 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 1261.97, -572.017, 104 ); + ent.v["angles"] = ( 0.74629, 94.9473, 1.14286 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 1550.7, 1585.04, 226.624 ); + ent.v["angles"] = ( 359.063, 162.951, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 493.669, -312.98, 107.225 ); + ent.v["angles"] = ( 354.639, 128.607, 9.96805 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 376.001, -576.508, 115 ); + ent.v["angles"] = ( 0.23689, 84.1525, 1.3566 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( -14.7859, -976.204, 132.466 ); + ent.v["angles"] = ( 358.783, 156.142, 0.644598 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( -331.998, -1281.27, 181.291 ); + ent.v["angles"] = ( 6.44461, 75.2916, -0.688908 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( -534.17, -2031.74, 206 ); + ent.v["angles"] = ( 358, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_debris_papers" ); + ent.v["origin"] = ( -472.675, -1623.29, 205 ); + ent.v["angles"] = ( 359, 74.9825, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -613.956, -1514.2, 211.983 ); + ent.v["angles"] = ( 1, 122, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -901.652, -637.395, 175.959 ); + ent.v["angles"] = ( 5.76759, 46.0834, 1.65956 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -696.847, -401.109, 151.056 ); + ent.v["angles"] = ( 5.89547, 82.9891, 0.366278 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -664.27, -168.367, 129.555 ); + ent.v["angles"] = ( 5.01985, 75.126, 0.959562 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 864.562, 2067.46, 364.905 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 903.675, 2122.7, 355.458 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 738.132, 2006.89, 356.521 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 846.644, 2359.7, 359.182 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 999.565, 1939.78, 363.225 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 769.001, 2309.17, 360.381 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 764.505, 1969.73, 358.987 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 1596.5, -392.904, 104 ); + ent.v["angles"] = ( 0.311249, 79.95, -1.01768 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 1247.44, -377.946, 105 ); + ent.v["angles"] = ( 1.74609, 94.9673, 1.1433 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_swirl_sm_runner" ); + ent.v["origin"] = ( -283.752, -527.138, 216.125 ); + ent.v["angles"] = ( 270.979, 223.667, 54.1511 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 8.88122, 58.394, 114.507 ); + ent.v["angles"] = ( 358.503, 169.732, -0.475275 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 302.535, -823.243, 131.256 ); + ent.v["angles"] = ( 1.95937, 58.7663, -0.148735 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 673.43, 665.231, 66.9461 ); + ent.v["angles"] = ( 351.734, 154.516, -1.28083 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 485.741, 1766.49, 286 ); + ent.v["angles"] = ( 359.917, 214.666, -2.5138 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 2122.56, 444.018, 217.298 ); + ent.v["angles"] = ( 2.73693, 122.034, 1.63656 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 1482.08, 1286.01, 205.233 ); + ent.v["angles"] = ( 354.189, 116.634, 1.82825 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 1131.79, 1650.59, 279.69 ); + ent.v["angles"] = ( 358.829, 168.683, -2.35321 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 2298.92, 452.79, 238.662 ); + ent.v["angles"] = ( 358.9, 133.021, -0.617255 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge" ); + ent.v["origin"] = ( 2264.17, 295.53, 327.398 ); + ent.v["angles"] = ( 0.165289, 131.407, -4.86239 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 2002.27, 219.609, 267.522 ); + ent.v["angles"] = ( 1.28624, 96.0756, 1.62549 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 2385.88, 749.519, 271.76 ); + ent.v["angles"] = ( 357.164, 159.775, 0.7788 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_swirl_sm_runner" ); + ent.v["origin"] = ( -153.71, 703.091, 118.378 ); + ent.v["angles"] = ( 271.131, 58.3991, 112.726 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_swirl_sm_runner" ); + ent.v["origin"] = ( 655.296, -622.333, 122.125 ); + ent.v["angles"] = ( 271.099, 5.13488, 6.98167 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_wide_distant" ); + ent.v["origin"] = ( 430.306, -53.1272, 114.945 ); + ent.v["angles"] = ( 0.793186, 125.188, 4.24615 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 1243.82, -1022.43, 103.227 ); + ent.v["angles"] = ( 357.344, 87.7779, 2.21321 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_wide_distant" ); + ent.v["origin"] = ( 1007.59, -1244.43, 96.343 ); + ent.v["angles"] = ( 1, 117, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 896.394, -1562.37, 185.756 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 114.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 862.716, -1415.86, 136.038 ); + ent.v["angles"] = ( 358, 98, 12 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 542.182, -1589.99, 107.357 ); + ent.v["angles"] = ( 0.483277, 89.9489, -0.948553 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -235.547, -1313.64, 187.995 ); + ent.v["angles"] = ( 7.45735, 104.689, 4.5107 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_windy_heavy_sm_slow" ); + ent.v["origin"] = ( -191.268, -1058.69, 140.715 ); + ent.v["angles"] = ( 3.01636, 116.686, 6.97532 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -273.233, -876.34, 146.396 ); + ent.v["angles"] = ( 0.379013, 117.015, 1.25579 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -1012.98, -962.73, 206.9 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 113.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -29.9021, -1773.79, 435.866 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 130.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 250.474, -144.697, 148.615 ); + ent.v["angles"] = ( 358.932, 116.562, -0.477644 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 1498.19, 818.139, 356.028 ); + ent.v["angles"] = ( 3.53969, 166.051, -2.0746 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_wide_distant" ); + ent.v["origin"] = ( 1391.2, 521.116, 397.125 ); + ent.v["angles"] = ( 1.51758, 172.901, -1.37094 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -438.382, -589.383, 147.291 ); + ent.v["angles"] = ( 358.454, 149.921, -0.622784 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -730.827, -584.895, 163.689 ); + ent.v["angles"] = ( 0.994673, 77, -0.104552 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 214.052, 877.131, 111.236 ); + ent.v["angles"] = ( 354.286, 147.464, 3.01364 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -7.15416, 1176.39, 173.275 ); + ent.v["angles"] = ( 346.045, 84.263, 0.27686 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 710.736, 1701.52, 282 ); + ent.v["angles"] = ( 351.476, 120.732, -0.395834 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 607.241, 2348.43, 289 ); + ent.v["angles"] = ( 345.782, 127.287, 2.25374 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge" ); + ent.v["origin"] = ( 1624.93, 1640.97, 336.129 ); + ent.v["angles"] = ( 3.25051, 190.388, -19.8542 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge" ); + ent.v["origin"] = ( 1847.51, 1462.08, 341.83 ); + ent.v["angles"] = ( 0.321654, 188.733, -28.9518 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_swirl_sm_runner" ); + ent.v["origin"] = ( 1988.79, -758.457, 144.125 ); + ent.v["angles"] = ( 270, 356.82, 121.18 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 715.418, 1120.62, 348.736 ); + ent.v["angles"] = ( 2.9289, 160.966, 0.889903 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 650.098, 940.689, 201.22 ); + ent.v["angles"] = ( 347.148, 142.304, -10.5408 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_swirl_sm_runner" ); + ent.v["origin"] = ( 644.365, 1235.2, 236.125 ); + ent.v["angles"] = ( 270, 0, 87 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 676.651, -188.09, 64.8804 ); + ent.v["angles"] = ( 347.747, 127.37, 10.1578 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 836.866, 12.3742, 30 ); + ent.v["angles"] = ( 355.963, 91.9184, 3.35687 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_md" ); + ent.v["origin"] = ( 708.484, -199.705, 62.7395 ); + ent.v["angles"] = ( 5.02986, 107.371, 8.75006 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_swirl_sm_runner" ); + ent.v["origin"] = ( 1210.12, -146.126, 78 ); + ent.v["angles"] = ( 270, 0, 105 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_swirl_sm_runner" ); + ent.v["origin"] = ( -112.135, 1598.35, 254.375 ); + ent.v["angles"] = ( 281.628, 239.905, -91.2958 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 1050.06, -350.187, 310.031 ); + ent.v["angles"] = ( 12.6728, 136.308, -1.02616 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 1256.35, -1199.55, 131.209 ); + ent.v["angles"] = ( 356.802, 103.969, 1.78147 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( -57.98, -1767.6, 419.574 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 131.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -533.581, -2168.42, 204 ); + ent.v["angles"] = ( 0, 89, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -12.5957, -2022.8, 135.678 ); + ent.v["angles"] = ( 353, 39, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge" ); + ent.v["origin"] = ( 413.439, -1782.14, 115.644 ); + ent.v["angles"] = ( 353.521, 121.957, -3.00394 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_wide_distant" ); + ent.v["origin"] = ( 424.984, -987.308, 382.288 ); + ent.v["angles"] = ( 351.483, 141.527, -7.95857 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 457.247, -1013.04, 391.53 ); + ent.v["angles"] = ( 9.82644, 130.124, -1.83855 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( -518.603, -749.194, 246.612 ); + ent.v["angles"] = ( 0.713854, 105.764, 2.01348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_wide_distant" ); + ent.v["origin"] = ( -963.41, -176.684, 392.302 ); + ent.v["angles"] = ( 3, 126, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( -730.808, 102.319, 324.469 ); + ent.v["angles"] = ( 0.937058, 123.048, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_wide_distant" ); + ent.v["origin"] = ( -1003.7, 687.996, 271.049 ); + ent.v["angles"] = ( 354.678, 167.044, 8.34405 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -723.079, 59.7503, 328.999 ); + ent.v["angles"] = ( 0, 115, -4 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( -1096.73, -299.022, 338.408 ); + ent.v["angles"] = ( 1.18061, 121.63, -3.3697 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( -1408.71, -314.012, 319.907 ); + ent.v["angles"] = ( 2.23243, 62.896, 23.7886 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( -1343.26, -636.583, 314.666 ); + ent.v["angles"] = ( 358.677, 92.1731, -4.06551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 644.996, -229.812, 123.402 ); + ent.v["angles"] = ( 356.623, 136.626, -2.09549 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_swirl_sm_runner" ); + ent.v["origin"] = ( 1778.22, 636.784, 208 ); + ent.v["angles"] = ( 270, 356.634, 141.366 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_md" ); + ent.v["origin"] = ( 1913.52, 1674.94, 434.511 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 192.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 528.24, 2717.08, 319 ); + ent.v["angles"] = ( 347.783, 180.45, -4.70543 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 168.472, 1352.82, 543.125 ); + ent.v["angles"] = ( 1.83386, 152.89, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_wide_distant" ); + ent.v["origin"] = ( 607.987, 1533.49, 539.125 ); + ent.v["angles"] = ( 357.855, 90.9659, -1.72969 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 330.375, 1488.81, 539.125 ); + ent.v["angles"] = ( 1.83386, 152.89, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 1541.01, 958.029, 273.631 ); + ent.v["angles"] = ( 0.509164, 123.987, -0.103306 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 2365.2, 588.265, 208.897 ); + ent.v["angles"] = ( 2.37443, 133.039, 2.12878 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 1901.24, 930.968, 197.422 ); + ent.v["angles"] = ( 2.55089, 128.038, 0.913741 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1207.88, 1251.03, 357.449 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1082.67, 774.131, 354.138 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -501.058, 1260.23, 224.565 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( -1040.08, 95.0819, 182.463 ); + ent.v["angles"] = ( 0.403872, 103.933, 0.841211 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( -842.099, 14.7438, 312.837 ); + ent.v["angles"] = ( 0.251666, 113.932, 1.89856 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 856.004, 189.103, -158.307 ); + ent.v["angles"] = ( 358.297, 186.626, -2.00872 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 497.619, 148.666, -217.398 ); + ent.v["angles"] = ( 357.9, 205.58, -0.908693 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_swirl_sm_runner" ); + ent.v["origin"] = ( 1084.12, 582.391, 40.3607 ); + ent.v["angles"] = ( 271.691, 32.1267, 113.903 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_swirl_sm_runner" ); + ent.v["origin"] = ( 1189.24, 442.334, 39.624 ); + ent.v["angles"] = ( 271.691, 32.1267, 113.903 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( -1491.64, -423.987, 345.897 ); + ent.v["angles"] = ( 0, 83, 10 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -533.823, -1831.14, 204 ); + ent.v["angles"] = ( 0, 81, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -478.125, -943.409, 354.478 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 438.499, -1414.15, 335.006 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 380.657, -1712.88, 313.985 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 919.828, -1233.76, 128.252 ); + ent.v["angles"] = ( 2, 98, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 1073.67, -1135.86, 121.826 ); + ent.v["angles"] = ( 2, 98, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 818.841, -1281.75, 130.119 ); + ent.v["angles"] = ( 2, 98, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 231.681, -892.675, 123.747 ); + ent.v["angles"] = ( 2.03768, 45.1736, 0.905698 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 379.228, -114.312, 124.517 ); + ent.v["angles"] = ( 6.63058, 143.138, 6.94948 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 489.236, -6.16093, 104.378 ); + ent.v["angles"] = ( 18.778, 117.737, 5.77029 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -104.444, -679.758, 285.325 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 64.423, -290.784, 276.711 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 802.242, 32.3345, 30.7429 ); + ent.v["angles"] = ( 0.23689, 84.1525, 1.3566 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 832.125, 1263.28, 336.682 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_seagulls_circle_swarm" ); + ent.v["origin"] = ( 2622.06, -4378.09, -799.945 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 196.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_seagulls_circle_below" ); + ent.v["origin"] = ( 4206.07, -698.541, -258.309 ); + ent.v["angles"] = ( 2, 180, 177 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_seagulls_circle_below" ); + ent.v["origin"] = ( 2320.77, -2465.39, -277.373 ); + ent.v["angles"] = ( 2, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 193.48, -1603.02, 262.443 ); + ent.v["angles"] = ( 0, 273, -11 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 315.457, -1454.86, 255.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 297.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 310.031, -1502.66, 254.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 246.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 53.6141, -1603.33, 319.961 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 327.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fire_fuel_sm" ); + ent.v["origin"] = ( -654.418, -2476.15, 218.599 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 144.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( -516.391, -1716.12, 204 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 81.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( -346.704, -1173.06, 167.742 ); + ent.v["angles"] = ( 3, 42, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 387.38, -476.34, 115 ); + ent.v["angles"] = ( 2.71912, 67.0301, 1.26899 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 660.712, -129.057, 57.873 ); + ent.v["angles"] = ( 3.85335, 60.0393, 0.928899 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 672.427, 682.916, 57.109 ); + ent.v["angles"] = ( 354.468, 158.143, -0.44383 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 2294.65, 640.427, 209.085 ); + ent.v["angles"] = ( 359.435, 152.108, -0.174735 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 2162.65, 525.436, 208.13 ); + ent.v["angles"] = ( 359.646, 188.109, 0.52679 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 2010.26, 893.875, 204 ); + ent.v["angles"] = ( 0.228463, 133.111, 0.592133 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 1711.88, 1183.94, 204 ); + ent.v["angles"] = ( 0.19716, 136.111, 0.603278 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 1410.3, 1480.1, 211.59 ); + ent.v["angles"] = ( 349.894, 131.905, -0.588894 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 1114.49, 1697.94, 281.048 ); + ent.v["angles"] = ( 359.927, 175.498, -0.382703 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 643.875, 1736.29, 279 ); + ent.v["angles"] = ( 0, 186.498, -0.389533 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 285.347, 1706.97, 273.918 ); + ent.v["angles"] = ( 0.202075, 217.498, -0.333024 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 360.172, 834.124, 101.096 ); + ent.v["angles"] = ( 357.544, 164.117, 1.9823 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( -1054.08, -987.404, 198.574 ); + ent.v["angles"] = ( 358.511, 93.0131, 4.28793 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( -1274.63, -596.182, 205.534 ); + ent.v["angles"] = ( 1.50271, 93.2374, 4.28795 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( -1304.1, -541.903, 233.78 ); + ent.v["angles"] = ( 354.522, 92.7128, 4.30619 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -740.805, 1164.36, 357.972 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -739.695, 1177.4, 369.241 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -740.633, 1214.96, 385.644 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -739.833, 1208.95, 362.392 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -739.833, 1207.94, 354.186 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -739.833, 1203.48, 405.82 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -741.214, 1190.81, 385.091 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -739.833, 1197.64, 391.757 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -739.543, 1183.13, 401.289 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -739.833, 1205.23, 426.036 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -738.181, 1214.46, 414.48 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -739.833, 1178.11, 392.785 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -739.833, 1172.79, 417.426 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -750.503, 1193.89, 438.609 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -742.294, 1070.12, 372.871 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -741.183, 1083.16, 366.14 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -742.122, 1120.72, 391.543 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -741.322, 1114.7, 372.291 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -741.322, 1113.69, 360.085 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -741.322, 1109.23, 411.719 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -742.703, 1096.56, 382.99 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -741.322, 1103.39, 397.656 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -741.032, 1088.88, 407.188 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -741.322, 1110.98, 437.935 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -739.67, 1120.22, 420.378 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -741.322, 1083.86, 398.684 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -741.322, 1078.54, 423.325 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -751.992, 1099.65, 444.508 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_cigarette_room_amb" ); + ent.v["origin"] = ( -435.24, 1055.74, 330.914 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 568.632, 1978.33, 288 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 1110.4, 1672.47, 288 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 168.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 1776.48, 1028.71, 213 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 126.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 915.645, 515.697, 57.6754 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 439.258, 795.985, 99.6238 ); + ent.v["angles"] = ( 8, 338, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 14.7404, 500.338, 125.978 ); + ent.v["angles"] = ( 358.071, 81.8688, -0.234714 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -251.773, 138.033, 73.4858 ); + ent.v["angles"] = ( 359.369, 3.85458, -0.16143 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -813.864, -533.271, 168.258 ); + ent.v["angles"] = ( 5.31381, 18.8909, -0.226672 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -407.932, -1419.24, 227.317 ); + ent.v["angles"] = ( 2.03436, 58.0035, 0.34443 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -456.855, -1535.95, 213 ); + ent.v["angles"] = ( 2.94029, 140.104, 2.06521 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -28.2685, -924.07, 140.076 ); + ent.v["angles"] = ( 1.42287, 1.9788, -2.49435 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 1301.64, -1044.03, 111.326 ); + ent.v["angles"] = ( 2.74164, 44.9893, -0.853829 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 1271.54, -788.359, 112.948 ); + ent.v["angles"] = ( 2.54176, 90.0386, -0.663714 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 853.086, -1357.3, 113.713 ); + ent.v["angles"] = ( 359.88, 12.056, -1.62417 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 1884.41, 854.873, 213 ); + ent.v["angles"] = ( 358.436, 270.048, -0.544642 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 2144.21, 572.547, 213 ); + ent.v["angles"] = ( 358.867, 204.029, 0.207109 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 1895.1, 884.776, 204 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 2117.48, 552.453, 204 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 1007.92, 1723.79, 285 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 623.778, 1715.64, 279 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 833.656, 2043.51, 325.125 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 956.695, 2138.91, 328.125 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 487.208, 2163.69, 291.647 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 642.222, 2087.73, 299 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 1085.06, 1360.13, 225.013 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 1020.14, 1254.59, 289.25 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 857.167, 1312.18, 283.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 339.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 1110.35, 1269.43, 283.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 1107.11, 1264.1, 418.875 ); + ent.v["angles"] = ( 0, 168, -91 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 928.332, 1151.45, 418.875 ); + ent.v["angles"] = ( 0.587759, 44.9158, -92.7655 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 930.59, 1285.83, 283.25 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_butterfly_static_prnt" ); + ent.v["origin"] = ( -1134.84, -893.278, 230.488 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 299.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_butterfly_static_prnt" ); + ent.v["origin"] = ( 1494.94, -967.977, 133.481 ); + ent.v["angles"] = ( 313.693, 176.165, -6.43306 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 1503.98, -1073.77, 111.084 ); + ent.v["angles"] = ( 354, 181, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 1188.36, -853.235, 104.965 ); + ent.v["angles"] = ( 349.399, 353.438, 7.41377 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_butterfly_static_prnt" ); + ent.v["origin"] = ( 1410.33, -365.597, 130.493 ); + ent.v["angles"] = ( 327.984, 226.948, -38.9286 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_purple" ); + ent.v["origin"] = ( 1591.55, 294.975, 260.561 ); + ent.v["angles"] = ( 8.96774, 48.9338, -0.633866 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_pink" ); + ent.v["origin"] = ( 1572.61, 303.454, 271.805 ); + ent.v["angles"] = ( 5.96792, 48.967, -0.629531 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_purple" ); + ent.v["origin"] = ( 1578.28, 298.739, 303.798 ); + ent.v["angles"] = ( 353.969, 49.0986, -0.629603 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_pink" ); + ent.v["origin"] = ( 1591.27, 300.873, 289.89 ); + ent.v["angles"] = ( 353.936, 43.065, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_purple" ); + ent.v["origin"] = ( 1591.02, 296.169, 298.529 ); + ent.v["angles"] = ( 357.027, 53.0651, -1.04599 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_purple" ); + ent.v["origin"] = ( 1583.38, 296.169, 285.967 ); + ent.v["angles"] = ( 0, 53.0103, -1.04458 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_purple" ); + ent.v["origin"] = ( 1600.84, 296.169, 281.766 ); + ent.v["angles"] = ( 2.026, 52.9738, -1.04524 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_blue" ); + ent.v["origin"] = ( 1579.03, 296.023, 278.541 ); + ent.v["angles"] = ( 5.0255, 52.9189, -1.04861 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_blue" ); + ent.v["origin"] = ( 1598.67, 296.023, 284.048 ); + ent.v["angles"] = ( 5.90469, 46.8837, -1.2573 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_blue" ); + ent.v["origin"] = ( 1587.55, 296.023, 314.258 ); + ent.v["angles"] = ( 349.028, 53.2133, -1.06403 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_blue" ); + ent.v["origin"] = ( 1570.19, 291.793, 262.931 ); + ent.v["angles"] = ( 11.0245, 52.8072, -1.06422 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 964.812, 1184.6, 337.278 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 900.721, 1178.92, 322.852 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1106.38, 1290.85, 330.415 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1116.07, 1218.73, 330.927 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1563.72, 571.713, 261.162 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1525.18, 343.339, 257.63 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1490.34, 338.676, 252.827 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1652.67, 394.473, 256.724 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1066.8, 1444.87, 342.913 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 1007.2, 1528.61, 292.716 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_seagulls_circle_below" ); + ent.v["origin"] = ( 5151.47, 110.746, 287.963 ); + ent.v["angles"] = ( 2, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_seagulls_circle_below" ); + ent.v["origin"] = ( 700.43, -3082.15, -384.497 ); + ent.v["angles"] = ( 2, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 141.362, 1638.12, 273.058 ); + ent.v["angles"] = ( 7.81536, 242.167, -1.50751 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -87.8483, 259.648, 99.037 ); + ent.v["angles"] = ( 8, 224, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -851.192, -1199.62, 208.51 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 318.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 1363.1, -654.17, 175.159 ); + ent.v["angles"] = ( 356.262, 129.95, 1.16999 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 1427.19, -666.059, 239.234 ); + ent.v["angles"] = ( 356.262, 129.95, 1.16999 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 1503.68, -1015.03, 197.776 ); + ent.v["angles"] = ( 357.204, 132.973, 1.0238 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 1240.3, -303.689, 104 ); + ent.v["angles"] = ( 357.398, 98.9209, -2.071 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 1758.24, 342.945, 255.308 ); + ent.v["angles"] = ( 359.965, 62.0042, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -18.6295, 1248.16, 181.784 ); + ent.v["angles"] = ( 15.986, 268.284, -2.61464 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 206.858, 843.558, 124.375 ); + ent.v["angles"] = ( 2, 332, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 304.593, 884.716, 122.632 ); + ent.v["angles"] = ( 5, 332, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 805.009, 516.556, 50.4845 ); + ent.v["angles"] = ( 1.43876, 287.983, -1.38981 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 1011.04, 1548.22, 283 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 978.594, 1845.3, 322.884 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_butterfly_static_prnt" ); + ent.v["origin"] = ( 88.6087, -1868.49, 203.885 ); + ent.v["angles"] = ( 6.03354, 271.314, -35.1252 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1879.49, -244.125, 295.202 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1800.97, -682.559, 297.873 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 1793.72, -835.498, 110 ); + ent.v["angles"] = ( 359.354, 161.886, -0.882607 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_md" ); + ent.v["origin"] = ( 1482.63, 1069.3, 204.398 ); + ent.v["angles"] = ( 1.86574, 124.938, -0.888848 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_md" ); + ent.v["origin"] = ( 1337.51, 1570.16, 235.242 ); + ent.v["angles"] = ( 351.789, 147.64, -0.173719 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -1230.93, -52.771, 74.876 ); + ent.v["angles"] = ( 41.9836, 129.151, 9.69062 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -1101.04, 301.61, 81.6412 ); + ent.v["angles"] = ( 354.438, 121.931, 7.22208 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -479.455, 1156.87, 212.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( -474.464, 1105.36, 185.125 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -403.648, 116.011, 84.7432 ); + ent.v["angles"] = ( 356.466, 197.97, -0.30639 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -301.636, -1427.11, 204.4 ); + ent.v["angles"] = ( 6, 116, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -77.2682, -969.96, 152.072 ); + ent.v["angles"] = ( 1.67574, 7.97567, -1.33206 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -241.353, -875.267, 172.512 ); + ent.v["angles"] = ( 1.13469, 129.036, -2.36212 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 1085.16, 495.734, 56.8909 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 1004.92, 922.4, 296.125 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 369.113, 2121.6, 323.372 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 627.41, 1614.24, 334.312 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 744.232, 1616.26, 336.336 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 721.963, -126.523, 64.4678 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 1832.51, -442.99, 240.125 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 324.501, -1412.22, 264.125 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_faucet_on" ); + ent.v["origin"] = ( 1935.99, 695.071, 242.023 ); + ent.v["angles"] = ( 83, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_water_faucet_splash" ); + ent.v["origin"] = ( 1929.33, 696.249, 204.239 ); + ent.v["angles"] = ( 273, 1, 89 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -776.643, 379.363, 125.799 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 64.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -714.771, 514.557, 115 ); + ent.v["angles"] = ( 354, 74, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -6.46447, 364.925, 164.844 ); + ent.v["angles"] = ( 358.071, 81.8687, -1.23472 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -680.417, -523.191, 143.789 ); + ent.v["angles"] = ( 0.369069, 3.88662, 1.838 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_seagulls_circle_below" ); + ent.v["origin"] = ( 4672.62, -198.619, 1247.15 ); + ent.v["angles"] = ( 2, 180, 177 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_seagulls_circle_below" ); + ent.v["origin"] = ( 1922.04, -3536.46, 1170.22 ); + ent.v["angles"] = ( 1.15591, 165.017, 176.585 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_seagulls_circle_below" ); + ent.v["origin"] = ( -1102.22, -4538.26, 1047.8 ); + ent.v["angles"] = ( 2, 180, 177 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_seagulls_circle_below" ); + ent.v["origin"] = ( -4172.67, -1879.29, 1088.26 ); + ent.v["angles"] = ( 2, 180, 177 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( 533.246, 305.745, 161.23 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 71.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -878.101, -235.076, 329.121 ); + ent.v["angles"] = ( 0, 115, -4 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( 545.875, 286.287, 163.76 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 254.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_blue_ribbon" ); + ent.v["origin"] = ( 74.5502, -445.167, 208.5 ); + ent.v["angles"] = ( 305.86, 17.0497, -96.3044 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_blue_ribbon" ); + ent.v["origin"] = ( 69.7567, -492.776, 205.5 ); + ent.v["angles"] = ( 300.341, 345.752, -85.0169 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_blue_ribbon" ); + ent.v["origin"] = ( -31.3304, -549.847, 208.5 ); + ent.v["angles"] = ( 299.559, 230.559, 94.0593 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_blue_ribbon" ); + ent.v["origin"] = ( 6.02181, -540.682, 208.5 ); + ent.v["angles"] = ( 299.083, 255.419, 100.622 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_seagulls_circle_below" ); + ent.v["origin"] = ( -2879.38, 1547.04, 1079.23 ); + ent.v["angles"] = ( 2, 180, 177 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 732, 2127.86, 349.619 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 865.589, 2205.97, 366.338 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1032.85, 2029, 372.667 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 1329.42, -1118.49, 105.281 ); + ent.v["angles"] = ( 359.572, 204.044, 2.5911 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 1100.3, -1329.92, -293.425 ); + ent.v["angles"] = ( 0.788114, 133, -0.615798 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_light_gray_stain_glss_pink" ); + ent.v["origin"] = ( 1594.57, 304.802, 306.428 ); + ent.v["angles"] = ( 347.969, 49.1658, -0.640177 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -226.441, 614.918, 173.918 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 666.446, 390.311, 209.082 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 173.692, 553.872, 210.921 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1559.99, 607.556, 290.68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -432.632, 887.769, 388.807 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -659.863, 1264.31, 328.627 ); + ent.v["angles"] = ( 14.9977, 269.965, -0.267933 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -1117.73, 15.1349, -317.279 ); + ent.v["angles"] = ( 1.48609, 133.63, 1.71703 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( 2156.08, 890.474, 239.741 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( 2012.1, 924.563, 228.909 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 171.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( 440.904, -472.458, 139.958 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 122.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( 470.403, -610.971, 162.06 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 124.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_fire_fireplace_md" ); + ent.v["origin"] = ( 1987.12, -258.44, 252.658 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_wide_distant_thin" ); + ent.v["origin"] = ( 119.687, 380.612, 134.812 ); + ent.v["angles"] = ( 358.764, 173.999, -1.86329 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_wide_distant_thin" ); + ent.v["origin"] = ( -43.8084, 8.52594, 101.195 ); + ent.v["angles"] = ( 357.629, 138.987, -3.03409 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -156.146, -1069.57, 168.804 ); + ent.v["angles"] = ( 6, 116, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 237.141, -922.686, 153.971 ); + ent.v["angles"] = ( 359.108, 74.025, 1.49298 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_socotra_flicker_light" ); + ent.v["origin"] = ( -695.177, -787.753, 338.235 ); + ent.v["angles"] = ( 359.895, 267.003, -2.99818 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( -690.172, -790.339, 362.369 ); + ent.v["angles"] = ( 81, 74, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sparks_bounce_socotra" ); + ent.v["origin"] = ( -709.882, -748.195, 358.126 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -233.708, 323.416, 227.125 ); + ent.v["angles"] = ( 8.91874, 271.853, 17.1653 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -229.885, 350.939, 169.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -594.031, 884.4, 235.125 ); + ent.v["angles"] = ( 6.30834, 161.512, -78.7069 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -652.328, 889.87, 229.125 ); + ent.v["angles"] = ( 2.53584, 327.814, 80.936 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 70.7891, 1431.43, 363.554 ); + ent.v["angles"] = ( 35.9848, 216.144, -21.2539 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -21.0226, 1447.7, 369.293 ); + ent.v["angles"] = ( 39.6913, 267.27, 11.4673 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 55.9814, 1464.14, 300.951 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -593.003, -2204.35, 329 ); + ent.v["angles"] = ( 41, 267, 14 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -495.957, -2195.21, 331 ); + ent.v["angles"] = ( 41, 267, 14 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_wide_distant_thin" ); + ent.v["origin"] = ( 1926.97, 563.822, 205 ); + ent.v["angles"] = ( 358.764, 173.999, -1.86329 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_wide_distant_thin" ); + ent.v["origin"] = ( 859.618, 533.827, 32.8482 ); + ent.v["angles"] = ( 357.794, 126.986, -0.366646 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge" ); + ent.v["origin"] = ( 1061.13, -1228.45, 91.7016 ); + ent.v["angles"] = ( 356.865, 127.791, -3.65074 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_wide_distant_thin" ); + ent.v["origin"] = ( 62.6718, 216.636, 118.859 ); + ent.v["angles"] = ( 358.495, 153.971, -3.54378 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_wide_distant_thin" ); + ent.v["origin"] = ( 680.441, 78.4259, 24.6143 ); + ent.v["angles"] = ( 356.362, 124.047, -0.505892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_mp_sun_flare_socotra" ); + ent.v["origin"] = ( -6746.94, -19551.1, 9526.35 ); + ent.v["angles"] = ( 314.686, 143.193, -125.925 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -1630.71, 339.54, -80 ); + ent.v["angles"] = ( 356.894, 44.49, -2.05213 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 38.5778, 593.921, 119.296 ); + ent.v["angles"] = ( 356.042, 88.5716, -1.64698 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 986.849, -130.034, 77.4107 ); + ent.v["angles"] = ( 357.364, 177.077, 0.459794 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 1394.73, 969.905, 194.986 ); + ent.v["angles"] = ( 359.131, 250.057, -0.896664 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 2023.85, 1220.5, 288.725 ); + ent.v["angles"] = ( 358.942, 172.044, 0.663439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = clientscripts\mp\_fx::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 2226.05, 1050.06, 350.851 ); + ent.v["angles"] = ( 358.942, 172.044, 0.663439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; +} diff --git a/MP/Maps/Yemen/clientscripts/mp/mp_socotra.csc b/MP/Maps/Yemen/clientscripts/mp/mp_socotra.csc new file mode 100644 index 0000000..cfc231d --- /dev/null +++ b/MP/Maps/Yemen/clientscripts/mp/mp_socotra.csc @@ -0,0 +1,25 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_load; +#include clientscripts\mp\mp_socotra_fx; +#include clientscripts\mp\_audio; +#include clientscripts\mp\mp_socotra_amb; + +main() +{ + level.worldmapx = 1971; + level.worldmapy = -531; + level.worldlat = 12.5532; + level.worldlong = 54.5316; + clientscripts\mp\_load::main(); + clientscripts\mp\mp_socotra_fx::main(); + thread clientscripts\mp\_audio::audio_init( 0 ); + thread clientscripts\mp\mp_socotra_amb::main(); + setsaveddvar( "compassmaxrange", "2100" ); + setsaveddvar( "sm_sunsamplesizenear", 0.39 ); + waitforclient( 0 ); +/# + println( "*** Client : mp_socotra running..." ); +#/ +} diff --git a/MP/Maps/Yemen/clientscripts/mp/mp_socotra_amb.csc b/MP/Maps/Yemen/clientscripts/mp/mp_socotra_amb.csc new file mode 100644 index 0000000..d6f9d8b --- /dev/null +++ b/MP/Maps/Yemen/clientscripts/mp/mp_socotra_amb.csc @@ -0,0 +1,68 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\_ambientpackage; +#include clientscripts\mp\_audio; + +main() +{ + declareambientroom( "default", 1 ); + setambientroomtone( "default", "amb_battel_2d", 0.2, 0.5 ); + setambientroomreverb( "default", "socotra_outdoor", 1, 1 ); + setambientroomcontext( "default", "ringoff_plr", "outdoor" ); + declareambientroom( "under_bridge" ); + setambientroomreverb( "under_bridge", "socotra_stoneroom", 1, 1 ); + setambientroomcontext( "under_bridge", "ringoff_plr", "outdoor" ); + declareambientroom( "small_room" ); + setambientroomreverb( "small_room", "socotra_smallroom", 1, 1 ); + setambientroomcontext( "small_room", "ringoff_plr", "indoor" ); + declareambientroom( "small_room_partial" ); + setambientroomreverb( "small_room_partial", "socotra_smallroom", 1, 1 ); + setambientroomcontext( "small_room_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "medium_room" ); + setambientroomreverb( "medium_room", "socotra_mediumroom", 1, 1 ); + setambientroomcontext( "medium_room", "ringoff_plr", "indoor" ); + declareambientroom( "medium_room_partial" ); + setambientroomreverb( "medium_room_partial", "socotra_mediumroom", 1, 1 ); + setambientroomcontext( "medium_room_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "largeroom_room" ); + setambientroomreverb( "largeroom_room", "socotra_largeroom", 1, 1 ); + setambientroomcontext( "largeroom_room", "ringoff_plr", "indoor" ); + declareambientroom( "hallroom" ); + setambientroomreverb( "hallroom", "socotra_hallroom", 1, 1 ); + setambientroomcontext( "hallroom", "ringoff_plr", "indoor" ); + declareambientroom( "hallroom_partial" ); + setambientroomreverb( "hallroom_partial", "socotra_hallroom", 1, 1 ); + setambientroomcontext( "hallroom_partial", "ringoff_plr", "outdoor" ); + declareambientroom( "partialroom" ); + setambientroomreverb( "partialroom", "socotra_partialroom", 1, 1 ); + setambientroomcontext( "partialroom", "ringoff_plr", "outdoor" ); + thread snd_start_autofx_audio(); + thread snd_play_loopers(); +} + +snd_play_loopers() +{ + playloopat( "amb_battle_dist", ( -1404, 166, 1299 ) ); + playloopat( "amb_rope_creak", ( 2187, -231, 386 ) ); + playloopat( "amb_rope_creak", ( 2119, -503, 391 ) ); + playloopat( "amb_rope_creak", ( -37, -2296, 244 ) ); + playloopat( "amb_rope_creak", ( -277, 993, 475 ) ); + playloopat( "amb_rope_creak", ( 227, 425, 267 ) ); + playloopat( "amb_rope_creak", ( 431, 255, 267 ) ); + playloopat( "amb_rope_creak", ( 595, 257, 252 ) ); + playloopat( "amb_rope_creak", ( -614, -317, 355 ) ); +} + +snd_start_autofx_audio() +{ + snd_play_auto_fx( "fx_insects_swarm_md_light", "amb_insects_flys_md", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_insects_fly_swarm_lng", "amb_insects_flys_lg", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_insects_fly_swarm", "amb_insects_flys_swarm", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_mp_water_drip_light_shrt", "amb_water_drip", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_mp_water_drip_light_long", "amb_water_drip_2", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_fire_fuel_sm", "amb_fire_large", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_water_faucet_on", "amb_water_faucet", 0, 0, 0, 0 ); + snd_play_auto_fx( "fx_water_faucet_splash", "amb_water_faucet_splash", 0, 0, 0, 1 ); + snd_play_auto_fx( "fx_fire_fireplace_md", "amb_fireplace", 0, 0, 0, 0 ); +} diff --git a/MP/Maps/Yemen/clientscripts/mp/mp_socotra_fx.csc b/MP/Maps/Yemen/clientscripts/mp/mp_socotra_fx.csc new file mode 100644 index 0000000..af954a1 --- /dev/null +++ b/MP/Maps/Yemen/clientscripts/mp/mp_socotra_fx.csc @@ -0,0 +1,146 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include clientscripts\mp\_utility; +#include clientscripts\mp\createfx\mp_socotra_fx; +#include clientscripts\mp\_fx; + +precache_util_fx() +{ + +} + +precache_scripted_fx() +{ + +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["rope_toggle"] = %fxanim_gp_rope_toggle_anim; + level.scr_anim["fxanim_props"]["ropes_hang"] = %fxanim_gp_ropes_hang_01_anim; + level.scr_anim["fxanim_props"]["rope_arch"] = %fxanim_mp_socotra_rope_arch_anim; + level.scr_anim["fxanim_props"]["wire_coil"] = %fxanim_gp_wire_coil_01_anim; + level.scr_anim["fxanim_props"]["wirespark_long"] = %fxanim_gp_wirespark_long_anim; + level.scr_anim["fxanim_props"]["wirespark_med"] = %fxanim_gp_wirespark_med_anim; + level.scr_anim["fxanim_props"]["yemen_pent_long"] = %fxanim_gp_flag_yemen_pent_long_anim; + level.scr_anim["fxanim_props"]["roaches"] = %fxanim_gp_roaches_anim; + level.scr_anim["fxanim_props"]["cloth_sheet_med"] = %fxanim_gp_cloth_sheet_med_anim; + level.scr_anim["fxanim_props"]["rope_coil"] = %fxanim_gp_rope_coil_anim; + level.fx_anim_level_init = ::fxanim_init; +} + +precache_createfx_fx() +{ + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_sand_dust_motes" ); + level._effect["fx_light_gray_stain_glss_pink"] = loadfx( "light/fx_light_gray_stain_glss_pink" ); + level._effect["fx_light_gray_stain_glss_blue"] = loadfx( "light/fx_light_gray_stain_glss_blue" ); + level._effect["fx_light_gray_stain_glss_purple"] = loadfx( "light/fx_light_gray_stain_glss_purple" ); + level._effect["fx_light_gray_stain_glss_warm_sm"] = loadfx( "light/fx_light_gray_stain_glss_warm_sm" ); + level._effect["fx_mp_sun_flare_socotra"] = loadfx( "maps/mp_maps/fx_mp_sun_flare_socotra" ); + level._effect["fx_light_gray_blue_ribbon"] = loadfx( "light/fx_light_gray_blue_ribbon" ); + level._effect["fx_insects_butterfly_flutter"] = loadfx( "bio/insects/fx_insects_butterfly_flutter" ); + level._effect["fx_insects_butterfly_static_prnt"] = loadfx( "bio/insects/fx_insects_butterfly_static_prnt" ); + level._effect["fx_insects_roaches_short"] = loadfx( "bio/insects/fx_insects_roaches_short" ); + level._effect["fx_insects_fly_swarm_lng"] = loadfx( "bio/insects/fx_insects_fly_swarm_lng" ); + level._effect["fx_insects_fly_swarm"] = loadfx( "bio/insects/fx_insects_fly_swarm" ); + level._effect["fx_insects_swarm_md_light"] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); + level._effect["fx_seagulls_circle_below"] = loadfx( "bio/animals/fx_seagulls_circle_below" ); + level._effect["fx_seagulls_circle_swarm"] = loadfx( "bio/animals/fx_seagulls_circle_swarm" ); + level._effect["fx_leaves_falling_lite_sm"] = loadfx( "foliage/fx_leaves_falling_lite_sm" ); + level._effect["fx_debris_papers"] = loadfx( "env/debris/fx_debris_papers" ); + level._effect["fx_debris_papers_narrow"] = loadfx( "env/debris/fx_debris_papers_narrow" ); + level._effect["fx_mp_smk_plume_sm_blk"] = loadfx( "maps/mp_maps/fx_mp_smk_plume_sm_blk" ); + level._effect["fx_mp_smk_plume_md_blk"] = loadfx( "maps/mp_maps/fx_mp_socotra_smk_plume_blck" ); + level._effect["fx_smk_cigarette_room_amb"] = loadfx( "smoke/fx_smk_cigarette_room_amb" ); + level._effect["fx_smk_smolder_gray_slow_shrt"] = loadfx( "smoke/fx_smk_smolder_gray_slow_shrt" ); + level._effect["fx_fire_fuel_sm"] = loadfx( "fire/fx_fire_fuel_sm" ); + level._effect["fx_mp_water_drip_light_long"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); + level._effect["fx_mp_water_drip_light_shrt"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_shrt" ); + level._effect["fx_water_faucet_on"] = loadfx( "water/fx_water_faucet_on" ); + level._effect["fx_water_faucet_splash"] = loadfx( "water/fx_water_faucet_splash" ); + level._effect["fx_mp_sand_kickup_md"] = loadfx( "maps/mp_maps/fx_mp_sand_kickup_md" ); + level._effect["fx_mp_sand_kickup_thin"] = loadfx( "maps/mp_maps/fx_mp_sand_kickup_thin" ); + level._effect["fx_mp_sand_windy_heavy_sm_slow"] = loadfx( "maps/mp_maps/fx_mp_sand_windy_heavy_sm_slow" ); + level._effect["fx_sand_ledge"] = loadfx( "dirt/fx_sand_ledge" ); + level._effect["fx_sand_ledge_sml"] = loadfx( "dirt/fx_sand_ledge_sml" ); + level._effect["fx_sand_ledge_md"] = loadfx( "dirt/fx_sand_ledge_md" ); + level._effect["fx_sand_ledge_wide_distant"] = loadfx( "dirt/fx_sand_ledge_wide_distant" ); + level._effect["fx_sand_windy_heavy_md"] = loadfx( "dirt/fx_sand_windy_heavy_md" ); + level._effect["fx_sand_swirl_sm_runner"] = loadfx( "dirt/fx_sand_swirl_sm_runner" ); + level._effect["fx_sand_moving_in_air_md"] = loadfx( "dirt/fx_sand_moving_in_air_md" ); + level._effect["fx_sand_moving_in_air_pcloud"] = loadfx( "dirt/fx_sand_moving_in_air_pcloud" ); + level._effect["fx_mp_elec_spark_burst_xsm_thin"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin" ); + level._effect["fx_fire_fireplace_md"] = loadfx( "fire/fx_fire_fireplace_md" ); + level._effect["fx_sand_ledge_wide_distant_thin"] = loadfx( "dirt/fx_sand_ledge_wide_distant_thin" ); + level._effect["fx_mp_socotra_flicker_light"] = loadfx( "maps/mp_maps/fx_mp_socotra_flicker_light" ); + level._effect["fx_sparks_bounce_socotra"] = loadfx( "electrical/fx_sparks_bounce_socotra" ); + level._effect["fx_window_god_ray"] = loadfx( "light/fx_window_god_ray" ); + level._effect["fx_mp_sun_flare_socotra"] = loadfx( "lens_flares/fx_lf_mp_socotra_sun1" ); +} + +fxanim_init( localclientnum ) +{ + fxanims = getentarray( localclientnum, "fxanim_level", "targetname" ); + + if ( !isdefined( level.fxanim_waits ) ) + { + level.fxanim_waits = []; + level.fxanim_speeds = []; + + for ( i = 0; i < fxanims.size; i++ ) + { + level.fxanim_waits[i] = randomfloatrange( 0.1, 1.5 ); + level.fxanim_speeds[i] = randomfloatrange( 0.75, 1.4 ); + } + } + + for ( i = 0; i < fxanims.size; i++ ) + { + assert( isdefined( fxanims[i].fxanim_scene_1 ) ); + + switch ( fxanims[i].fxanim_scene_1 ) + { + case "wirespark_med": + case "sparking_wires_med": + fxanims[i] thread fxanim_wire_think( localclientnum, i, "med_spark_06_jnt" ); + break; + case "wirespark_long": + case "sparking_wires_long": + fxanims[i] thread fxanim_wire_think( localclientnum, i, "long_spark_06_jnt" ); + break; + } + } +} + +fxanim_wire_think( localclientnum, index, bone ) +{ + self endon( "death" ); + self endon( "entityshutdown" ); + self endon( "delete" ); + self waittill_dobj( localclientnum ); + self useanimtree( #animtree ); + wait( level.fxanim_waits[index] ); + self setflaggedanim( "wire_fx", level.scr_anim["fxanim_props"][self.fxanim_scene_1], 1.0, 0.0, level.fxanim_speeds[index] ); + + for (;;) + { + self waittill( "wire_fx", note ); + + playfxontag( localclientnum, level._effect["fx_mp_elec_spark_burst_xsm_thin"], self, bone ); + } +} + +main() +{ + clientscripts\mp\createfx\mp_socotra_fx::main(); + clientscripts\mp\_fx::reportnumeffects(); + precache_util_fx(); + precache_createfx_fx(); + precache_fxanim_props(); + disablefx = getdvarint( _hash_C9B177D6 ); + + if ( !isdefined( disablefx ) || disablefx <= 0 ) + precache_scripted_fx(); +} diff --git a/MP/Maps/Yemen/maps/mp/createart/mp_socotra_art.gsc b/MP/Maps/Yemen/maps/mp/createart/mp_socotra_art.gsc new file mode 100644 index 0000000..d08baa9 --- /dev/null +++ b/MP/Maps/Yemen/maps/mp/createart/mp_socotra_art.gsc @@ -0,0 +1,27 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + level.tweakfile = 1; + setdvar( "scr_fog_exp_halfplane", "3759.28" ); + setdvar( "scr_fog_exp_halfheight", "243.735" ); + setdvar( "scr_fog_nearplane", "601.593" ); + setdvar( "scr_fog_red", "0.806694" ); + setdvar( "scr_fog_green", "0.962521" ); + setdvar( "scr_fog_blue", "0.9624" ); + setdvar( "scr_fog_baseheight", "-475.268" ); + setdvar( "visionstore_glowTweakEnable", "0" ); + setdvar( "visionstore_glowTweakRadius0", "5" ); + setdvar( "visionstore_glowTweakRadius1", "" ); + setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); + setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); + setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); + setdvar( "visionstore_glowTweakBloomIntensity1", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); + visionsetnaked( "mp_socotra", 0 ); + setdvar( "r_lightGridEnableTweaks", 1 ); + setdvar( "r_lightGridIntensity", 1.0 ); + setdvar( "r_lightGridContrast", 0 ); +} diff --git a/MP/Maps/Yemen/maps/mp/createfx/mp_socotra_fx.gsc b/MP/Maps/Yemen/maps/mp/createfx/mp_socotra_fx.gsc new file mode 100644 index 0000000..76ea6d3 --- /dev/null +++ b/MP/Maps/Yemen/maps/mp/createfx/mp_socotra_fx.gsc @@ -0,0 +1,1732 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -428.667, 1020.38, 227.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -299.283, -1657.69, 211 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 116.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_smk_plume_md_blk" ); + ent.v["origin"] = ( -684.98, -2470.29, 271.493 ); + ent.v["angles"] = ( 13.1475, 136.766, -14.1714 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -919.616, -1164.18, 199.961 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 123.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_md" ); + ent.v["origin"] = ( -1113.35, -989.305, 202.779 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 75.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -1118.63, -605.538, 199.424 ); + ent.v["angles"] = ( 359, 148, 4 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -1292.58, -437.347, 208 ); + ent.v["angles"] = ( 358, 79, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -1080.2, -21.7796, 199.386 ); + ent.v["angles"] = ( 360, 100, -5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -821.967, 276.546, 135.901 ); + ent.v["angles"] = ( 6, 64, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_windy_heavy_md" ); + ent.v["origin"] = ( 2287.92, 574.404, 208 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 162.951 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 1948.58, 398.333, 215.353 ); + ent.v["angles"] = ( 4.06298, 162.951, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 2128.62, 309.126, 222.428 ); + ent.v["angles"] = ( 359.063, 162.951, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 1676, 1504.57, 285.333 ); + ent.v["angles"] = ( 359.063, 162.951, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 1577.41, 1108.61, 208.397 ); + ent.v["angles"] = ( 359.063, 162.951, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 1609.37, -537.299, 104 ); + ent.v["angles"] = ( 1.06456, 152.953, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_md" ); + ent.v["origin"] = ( 1413.76, -1118.39, 113 ); + ent.v["angles"] = ( 1.86574, 124.938, -0.888848 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 1261.97, -572.017, 104 ); + ent.v["angles"] = ( 0.74629, 94.9473, 1.14286 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 1550.7, 1585.04, 226.624 ); + ent.v["angles"] = ( 359.063, 162.951, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 493.669, -312.98, 107.225 ); + ent.v["angles"] = ( 354.639, 128.607, 9.96805 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 376.001, -576.508, 115 ); + ent.v["angles"] = ( 0.23689, 84.1525, 1.3566 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( -14.7859, -976.204, 132.466 ); + ent.v["angles"] = ( 358.783, 156.142, 0.644598 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( -331.998, -1281.27, 181.291 ); + ent.v["angles"] = ( 6.44461, 75.2916, -0.688908 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( -534.17, -2031.74, 206 ); + ent.v["angles"] = ( 358, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_debris_papers" ); + ent.v["origin"] = ( -472.675, -1623.29, 205 ); + ent.v["angles"] = ( 359, 74.9825, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -613.956, -1514.2, 211.983 ); + ent.v["angles"] = ( 1, 122, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -901.652, -637.395, 175.959 ); + ent.v["angles"] = ( 5.76759, 46.0834, 1.65956 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -696.847, -401.109, 151.056 ); + ent.v["angles"] = ( 5.89547, 82.9891, 0.366278 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -664.27, -168.367, 129.555 ); + ent.v["angles"] = ( 5.01985, 75.126, 0.959562 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 864.562, 2067.46, 364.905 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 903.675, 2122.7, 355.458 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 738.132, 2006.89, 356.521 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 846.644, 2359.7, 359.182 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 999.565, 1939.78, 363.225 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 769.001, 2309.17, 360.381 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 764.505, 1969.73, 358.987 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 1596.5, -392.904, 104 ); + ent.v["angles"] = ( 0.311249, 79.95, -1.01768 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 1247.44, -377.946, 105 ); + ent.v["angles"] = ( 1.74609, 94.9673, 1.1433 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_swirl_sm_runner" ); + ent.v["origin"] = ( -283.752, -527.138, 216.125 ); + ent.v["angles"] = ( 270.979, 223.667, 54.1511 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 8.88122, 58.394, 114.507 ); + ent.v["angles"] = ( 358.503, 169.732, -0.475275 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 302.535, -823.243, 131.256 ); + ent.v["angles"] = ( 1.95937, 58.7663, -0.148735 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 673.43, 665.231, 66.9461 ); + ent.v["angles"] = ( 351.734, 154.516, -1.28083 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 485.741, 1766.49, 286 ); + ent.v["angles"] = ( 359.917, 214.666, -2.5138 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 2122.56, 444.018, 217.298 ); + ent.v["angles"] = ( 2.73693, 122.034, 1.63656 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 1482.08, 1286.01, 205.233 ); + ent.v["angles"] = ( 354.189, 116.634, 1.82825 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 1131.79, 1650.59, 279.69 ); + ent.v["angles"] = ( 358.829, 168.683, -2.35321 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 2298.92, 452.79, 238.662 ); + ent.v["angles"] = ( 358.9, 133.021, -0.617255 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge" ); + ent.v["origin"] = ( 2264.17, 295.53, 327.398 ); + ent.v["angles"] = ( 0.165289, 131.407, -4.86239 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 2002.27, 219.609, 267.522 ); + ent.v["angles"] = ( 1.28624, 96.0756, 1.62549 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 2385.88, 749.519, 271.76 ); + ent.v["angles"] = ( 357.164, 159.775, 0.7788 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_swirl_sm_runner" ); + ent.v["origin"] = ( -153.71, 703.091, 118.378 ); + ent.v["angles"] = ( 271.131, 58.3991, 112.726 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_swirl_sm_runner" ); + ent.v["origin"] = ( 655.296, -622.333, 122.125 ); + ent.v["angles"] = ( 271.099, 5.13488, 6.98167 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_wide_distant" ); + ent.v["origin"] = ( 430.306, -53.1272, 114.945 ); + ent.v["angles"] = ( 0.793186, 125.188, 4.24615 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 1243.82, -1022.43, 103.227 ); + ent.v["angles"] = ( 357.344, 87.7779, 2.21321 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_wide_distant" ); + ent.v["origin"] = ( 1007.59, -1244.43, 96.343 ); + ent.v["angles"] = ( 1, 117, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 896.394, -1562.37, 185.756 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 114.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 862.716, -1415.86, 136.038 ); + ent.v["angles"] = ( 358, 98, 12 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 542.182, -1589.99, 107.357 ); + ent.v["angles"] = ( 0.483277, 89.9489, -0.948553 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -235.547, -1313.64, 187.995 ); + ent.v["angles"] = ( 7.45735, 104.689, 4.5107 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_windy_heavy_sm_slow" ); + ent.v["origin"] = ( -191.268, -1058.69, 140.715 ); + ent.v["angles"] = ( 3.01636, 116.686, 6.97532 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -273.233, -876.34, 146.396 ); + ent.v["angles"] = ( 0.379013, 117.015, 1.25579 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -1012.98, -962.73, 206.9 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 113.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -29.9021, -1773.79, 435.866 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 130.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 250.474, -144.697, 148.615 ); + ent.v["angles"] = ( 358.932, 116.562, -0.477644 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 1498.19, 818.139, 356.028 ); + ent.v["angles"] = ( 3.53969, 166.051, -2.0746 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_wide_distant" ); + ent.v["origin"] = ( 1391.2, 521.116, 397.125 ); + ent.v["angles"] = ( 1.51758, 172.901, -1.37094 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -438.382, -589.383, 147.291 ); + ent.v["angles"] = ( 358.454, 149.921, -0.622784 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -730.827, -584.895, 163.689 ); + ent.v["angles"] = ( 0.994673, 77, -0.104552 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 214.052, 877.131, 111.236 ); + ent.v["angles"] = ( 354.286, 147.464, 3.01364 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -7.15416, 1176.39, 173.275 ); + ent.v["angles"] = ( 346.045, 84.263, 0.27686 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 710.736, 1701.52, 282 ); + ent.v["angles"] = ( 351.476, 120.732, -0.395834 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 607.241, 2348.43, 289 ); + ent.v["angles"] = ( 345.782, 127.287, 2.25374 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge" ); + ent.v["origin"] = ( 1624.93, 1640.97, 336.129 ); + ent.v["angles"] = ( 3.25051, 190.388, -19.8542 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge" ); + ent.v["origin"] = ( 1847.51, 1462.08, 341.83 ); + ent.v["angles"] = ( 0.321654, 188.733, -28.9518 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_swirl_sm_runner" ); + ent.v["origin"] = ( 1988.79, -758.457, 144.125 ); + ent.v["angles"] = ( 270, 356.82, 121.18 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 715.418, 1120.62, 348.736 ); + ent.v["angles"] = ( 2.9289, 160.966, 0.889903 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 650.098, 940.689, 201.22 ); + ent.v["angles"] = ( 347.148, 142.304, -10.5408 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_swirl_sm_runner" ); + ent.v["origin"] = ( 644.365, 1235.2, 236.125 ); + ent.v["angles"] = ( 270, 0, 87 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 676.651, -188.09, 64.8804 ); + ent.v["angles"] = ( 347.747, 127.37, 10.1578 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 836.866, 12.3742, 30 ); + ent.v["angles"] = ( 355.963, 91.9184, 3.35687 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_md" ); + ent.v["origin"] = ( 708.484, -199.705, 62.7395 ); + ent.v["angles"] = ( 5.02986, 107.371, 8.75006 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_swirl_sm_runner" ); + ent.v["origin"] = ( 1210.12, -146.126, 78 ); + ent.v["angles"] = ( 270, 0, 105 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_swirl_sm_runner" ); + ent.v["origin"] = ( -112.135, 1598.35, 254.375 ); + ent.v["angles"] = ( 281.628, 239.905, -91.2958 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 1050.06, -350.187, 310.031 ); + ent.v["angles"] = ( 12.6728, 136.308, -1.02616 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 1256.35, -1199.55, 131.209 ); + ent.v["angles"] = ( 356.802, 103.969, 1.78147 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( -57.98, -1767.6, 419.574 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 131.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -533.581, -2168.42, 204 ); + ent.v["angles"] = ( 0, 89, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -12.5957, -2022.8, 135.678 ); + ent.v["angles"] = ( 353, 39, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge" ); + ent.v["origin"] = ( 413.439, -1782.14, 115.644 ); + ent.v["angles"] = ( 353.521, 121.957, -3.00394 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_wide_distant" ); + ent.v["origin"] = ( 424.984, -987.308, 382.288 ); + ent.v["angles"] = ( 351.483, 141.527, -7.95857 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 457.247, -1013.04, 391.53 ); + ent.v["angles"] = ( 9.82644, 130.124, -1.83855 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( -518.603, -749.194, 246.612 ); + ent.v["angles"] = ( 0.713854, 105.764, 2.01348 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_wide_distant" ); + ent.v["origin"] = ( -963.41, -176.684, 392.302 ); + ent.v["angles"] = ( 3, 126, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( -730.808, 102.319, 324.469 ); + ent.v["angles"] = ( 0.937058, 123.048, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_wide_distant" ); + ent.v["origin"] = ( -1003.7, 687.996, 271.049 ); + ent.v["angles"] = ( 354.678, 167.044, 8.34405 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -723.079, 59.7503, 328.999 ); + ent.v["angles"] = ( 0, 115, -4 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( -1096.73, -299.022, 338.408 ); + ent.v["angles"] = ( 1.18061, 121.63, -3.3697 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( -1408.71, -314.012, 319.907 ); + ent.v["angles"] = ( 2.23243, 62.896, 23.7886 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( -1343.26, -636.583, 314.666 ); + ent.v["angles"] = ( 358.677, 92.1731, -4.06551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 644.996, -229.812, 123.402 ); + ent.v["angles"] = ( 356.623, 136.626, -2.09549 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_swirl_sm_runner" ); + ent.v["origin"] = ( 1778.22, 636.784, 208 ); + ent.v["angles"] = ( 270, 356.634, 141.366 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_md" ); + ent.v["origin"] = ( 1913.52, 1674.94, 434.511 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 192.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 528.24, 2717.08, 319 ); + ent.v["angles"] = ( 347.783, 180.45, -4.70543 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 168.472, 1352.82, 543.125 ); + ent.v["angles"] = ( 1.83386, 152.89, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_wide_distant" ); + ent.v["origin"] = ( 607.987, 1533.49, 539.125 ); + ent.v["angles"] = ( 357.855, 90.9659, -1.72969 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 330.375, 1488.81, 539.125 ); + ent.v["angles"] = ( 1.83386, 152.89, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 1541.01, 958.029, 273.631 ); + ent.v["angles"] = ( 0.509164, 123.987, -0.103306 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 2365.2, 588.265, 208.897 ); + ent.v["angles"] = ( 2.37443, 133.039, 2.12878 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 1901.24, 930.968, 197.422 ); + ent.v["angles"] = ( 2.55089, 128.038, 0.913741 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1207.88, 1251.03, 357.449 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1082.67, 774.131, 354.138 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -501.058, 1260.23, 224.565 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( -1040.08, 95.0819, 182.463 ); + ent.v["angles"] = ( 0.403872, 103.933, 0.841211 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( -842.099, 14.7438, 312.837 ); + ent.v["angles"] = ( 0.251666, 113.932, 1.89856 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 856.004, 189.103, -158.307 ); + ent.v["angles"] = ( 358.297, 186.626, -2.00872 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 497.619, 148.666, -217.398 ); + ent.v["angles"] = ( 357.9, 205.58, -0.908693 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_swirl_sm_runner" ); + ent.v["origin"] = ( 1084.12, 582.391, 40.3607 ); + ent.v["angles"] = ( 271.691, 32.1267, 113.903 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_swirl_sm_runner" ); + ent.v["origin"] = ( 1189.24, 442.334, 39.624 ); + ent.v["angles"] = ( 271.691, 32.1267, 113.903 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( -1491.64, -423.987, 345.897 ); + ent.v["angles"] = ( 0, 83, 10 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -533.823, -1831.14, 204 ); + ent.v["angles"] = ( 0, 81, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -478.125, -943.409, 354.478 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 438.499, -1414.15, 335.006 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 380.657, -1712.88, 313.985 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 919.828, -1233.76, 128.252 ); + ent.v["angles"] = ( 2, 98, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 1073.67, -1135.86, 121.826 ); + ent.v["angles"] = ( 2, 98, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 818.841, -1281.75, 130.119 ); + ent.v["angles"] = ( 2, 98, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 231.681, -892.675, 123.747 ); + ent.v["angles"] = ( 2.03768, 45.1736, 0.905698 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 379.228, -114.312, 124.517 ); + ent.v["angles"] = ( 6.63058, 143.138, 6.94948 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 489.236, -6.16093, 104.378 ); + ent.v["angles"] = ( 18.778, 117.737, 5.77029 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -104.444, -679.758, 285.325 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 64.423, -290.784, 276.711 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_debris_papers_narrow" ); + ent.v["origin"] = ( 802.242, 32.3345, 30.7429 ); + ent.v["angles"] = ( 0.23689, 84.1525, 1.3566 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 832.125, 1263.28, 336.682 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_seagulls_circle_swarm" ); + ent.v["origin"] = ( 2622.06, -4378.09, -799.945 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 196.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_seagulls_circle_below" ); + ent.v["origin"] = ( 4206.07, -698.541, -258.309 ); + ent.v["angles"] = ( 2, 180, 177 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_seagulls_circle_below" ); + ent.v["origin"] = ( 2320.77, -2465.39, -277.373 ); + ent.v["angles"] = ( 2, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); + ent.v["origin"] = ( 193.48, -1603.02, 262.443 ); + ent.v["angles"] = ( 0, 273, -11 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 315.457, -1454.86, 255.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 297.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 310.031, -1502.66, 254.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 246.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); + ent.v["origin"] = ( 53.6141, -1603.33, 319.961 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 327.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_fuel_sm" ); + ent.v["origin"] = ( -654.418, -2476.15, 218.599 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 144.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( -516.391, -1716.12, 204 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 81.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( -346.704, -1173.06, 167.742 ); + ent.v["angles"] = ( 3, 42, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 387.38, -476.34, 115 ); + ent.v["angles"] = ( 2.71912, 67.0301, 1.26899 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 660.712, -129.057, 57.873 ); + ent.v["angles"] = ( 3.85335, 60.0393, 0.928899 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 672.427, 682.916, 57.109 ); + ent.v["angles"] = ( 354.468, 158.143, -0.44383 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 2294.65, 640.427, 209.085 ); + ent.v["angles"] = ( 359.435, 152.108, -0.174735 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 2162.65, 525.436, 208.13 ); + ent.v["angles"] = ( 359.646, 188.109, 0.52679 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 2010.26, 893.875, 204 ); + ent.v["angles"] = ( 0.228463, 133.111, 0.592133 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 1711.88, 1183.94, 204 ); + ent.v["angles"] = ( 0.19716, 136.111, 0.603278 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 1410.3, 1480.1, 211.59 ); + ent.v["angles"] = ( 349.894, 131.905, -0.588894 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 1114.49, 1697.94, 281.048 ); + ent.v["angles"] = ( 359.927, 175.498, -0.382703 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 643.875, 1736.29, 279 ); + ent.v["angles"] = ( 0, 186.498, -0.389533 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 285.347, 1706.97, 273.918 ); + ent.v["angles"] = ( 0.202075, 217.498, -0.333024 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( 360.172, 834.124, 101.096 ); + ent.v["angles"] = ( 357.544, 164.117, 1.9823 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( -1054.08, -987.404, 198.574 ); + ent.v["angles"] = ( 358.511, 93.0131, 4.28793 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( -1274.63, -596.182, 205.534 ); + ent.v["angles"] = ( 1.50271, 93.2374, 4.28795 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); + ent.v["origin"] = ( -1304.1, -541.903, 233.78 ); + ent.v["angles"] = ( 354.522, 92.7128, 4.30619 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -740.805, 1164.36, 357.972 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -739.695, 1177.4, 369.241 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -740.633, 1214.96, 385.644 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -739.833, 1208.95, 362.392 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -739.833, 1207.94, 354.186 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -739.833, 1203.48, 405.82 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -741.214, 1190.81, 385.091 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -739.833, 1197.64, 391.757 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -739.543, 1183.13, 401.289 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -739.833, 1205.23, 426.036 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -738.181, 1214.46, 414.48 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -739.833, 1178.11, 392.785 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -739.833, 1172.79, 417.426 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -750.503, 1193.89, 438.609 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -742.294, 1070.12, 372.871 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -741.183, 1083.16, 366.14 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -742.122, 1120.72, 391.543 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -741.322, 1114.7, 372.291 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -741.322, 1113.69, 360.085 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -741.322, 1109.23, 411.719 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -742.703, 1096.56, 382.99 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -741.322, 1103.39, 397.656 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -741.032, 1088.88, 407.188 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -741.322, 1110.98, 437.935 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -739.67, 1120.22, 420.378 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -741.322, 1083.86, 398.684 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -741.322, 1078.54, 423.325 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); + ent.v["origin"] = ( -751.992, 1099.65, 444.508 ); + ent.v["angles"] = ( 33.9941, 61.2062, 0.674439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_cigarette_room_amb" ); + ent.v["origin"] = ( -435.24, 1055.74, 330.914 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 568.632, 1978.33, 288 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 1110.4, 1672.47, 288 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 168.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 1776.48, 1028.71, 213 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 126.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 915.645, 515.697, 57.6754 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 439.258, 795.985, 99.6238 ); + ent.v["angles"] = ( 8, 338, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 14.7404, 500.338, 125.978 ); + ent.v["angles"] = ( 358.071, 81.8688, -0.234714 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -251.773, 138.033, 73.4858 ); + ent.v["angles"] = ( 359.369, 3.85458, -0.16143 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -813.864, -533.271, 168.258 ); + ent.v["angles"] = ( 5.31381, 18.8909, -0.226672 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -407.932, -1419.24, 227.317 ); + ent.v["angles"] = ( 2.03436, 58.0035, 0.34443 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -456.855, -1535.95, 213 ); + ent.v["angles"] = ( 2.94029, 140.104, 2.06521 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -28.2685, -924.07, 140.076 ); + ent.v["angles"] = ( 1.42287, 1.9788, -2.49435 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 1301.64, -1044.03, 111.326 ); + ent.v["angles"] = ( 2.74164, 44.9893, -0.853829 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 1271.54, -788.359, 112.948 ); + ent.v["angles"] = ( 2.54176, 90.0386, -0.663714 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 853.086, -1357.3, 113.713 ); + ent.v["angles"] = ( 359.88, 12.056, -1.62417 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 1884.41, 854.873, 213 ); + ent.v["angles"] = ( 358.436, 270.048, -0.544642 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 2144.21, 572.547, 213 ); + ent.v["angles"] = ( 358.867, 204.029, 0.207109 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 1895.1, 884.776, 204 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 2117.48, 552.453, 204 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 1007.92, 1723.79, 285 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 623.778, 1715.64, 279 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 833.656, 2043.51, 325.125 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 956.695, 2138.91, 328.125 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 487.208, 2163.69, 291.647 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 642.222, 2087.73, 299 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 1085.06, 1360.13, 225.013 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 1020.14, 1254.59, 289.25 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 857.167, 1312.18, 283.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 339.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 1110.35, 1269.43, 283.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 1107.11, 1264.1, 418.875 ); + ent.v["angles"] = ( 0, 168, -91 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_roaches_short" ); + ent.v["origin"] = ( 928.332, 1151.45, 418.875 ); + ent.v["angles"] = ( 0.587759, 44.9158, -92.7655 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 930.59, 1285.83, 283.25 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_static_prnt" ); + ent.v["origin"] = ( -1134.84, -893.278, 230.488 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 299.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_static_prnt" ); + ent.v["origin"] = ( 1494.94, -967.977, 133.481 ); + ent.v["angles"] = ( 313.693, 176.165, -6.43306 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 1503.98, -1073.77, 111.084 ); + ent.v["angles"] = ( 354, 181, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); + ent.v["origin"] = ( 1188.36, -853.235, 104.965 ); + ent.v["angles"] = ( 349.399, 353.438, 7.41377 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_static_prnt" ); + ent.v["origin"] = ( 1410.33, -365.597, 130.493 ); + ent.v["angles"] = ( 327.984, 226.948, -38.9286 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_purple" ); + ent.v["origin"] = ( 1591.55, 294.975, 260.561 ); + ent.v["angles"] = ( 8.96774, 48.9338, -0.633866 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_pink" ); + ent.v["origin"] = ( 1572.61, 303.454, 271.805 ); + ent.v["angles"] = ( 5.96792, 48.967, -0.629531 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_purple" ); + ent.v["origin"] = ( 1578.28, 298.739, 303.798 ); + ent.v["angles"] = ( 353.969, 49.0986, -0.629603 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_pink" ); + ent.v["origin"] = ( 1591.27, 300.873, 289.89 ); + ent.v["angles"] = ( 353.936, 43.065, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_purple" ); + ent.v["origin"] = ( 1591.02, 296.169, 298.529 ); + ent.v["angles"] = ( 357.027, 53.0651, -1.04599 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_purple" ); + ent.v["origin"] = ( 1583.38, 296.169, 285.967 ); + ent.v["angles"] = ( 0, 53.0103, -1.04458 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_purple" ); + ent.v["origin"] = ( 1600.84, 296.169, 281.766 ); + ent.v["angles"] = ( 2.026, 52.9738, -1.04524 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_blue" ); + ent.v["origin"] = ( 1579.03, 296.023, 278.541 ); + ent.v["angles"] = ( 5.0255, 52.9189, -1.04861 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_blue" ); + ent.v["origin"] = ( 1598.67, 296.023, 284.048 ); + ent.v["angles"] = ( 5.90469, 46.8837, -1.2573 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_blue" ); + ent.v["origin"] = ( 1587.55, 296.023, 314.258 ); + ent.v["angles"] = ( 349.028, 53.2133, -1.06403 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_blue" ); + ent.v["origin"] = ( 1570.19, 291.793, 262.931 ); + ent.v["angles"] = ( 11.0245, 52.8072, -1.06422 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 964.812, 1184.6, 337.278 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 900.721, 1178.92, 322.852 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1106.38, 1290.85, 330.415 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1116.07, 1218.73, 330.927 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1563.72, 571.713, 261.162 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1525.18, 343.339, 257.63 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1490.34, 338.676, 252.827 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1652.67, 394.473, 256.724 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1066.8, 1444.87, 342.913 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 1007.2, 1528.61, 292.716 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_seagulls_circle_below" ); + ent.v["origin"] = ( 5151.47, 110.746, 287.963 ); + ent.v["angles"] = ( 2, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_seagulls_circle_below" ); + ent.v["origin"] = ( 700.43, -3082.15, -384.497 ); + ent.v["angles"] = ( 2, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 141.362, 1638.12, 273.058 ); + ent.v["angles"] = ( 7.81536, 242.167, -1.50751 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -87.8483, 259.648, 99.037 ); + ent.v["angles"] = ( 8, 224, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -851.192, -1199.62, 208.51 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 318.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 1363.1, -654.17, 175.159 ); + ent.v["angles"] = ( 356.262, 129.95, 1.16999 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 1427.19, -666.059, 239.234 ); + ent.v["angles"] = ( 356.262, 129.95, 1.16999 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 1503.68, -1015.03, 197.776 ); + ent.v["angles"] = ( 357.204, 132.973, 1.0238 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 1240.3, -303.689, 104 ); + ent.v["angles"] = ( 357.398, 98.9209, -2.071 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 1758.24, 342.945, 255.308 ); + ent.v["angles"] = ( 359.965, 62.0042, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -18.6295, 1248.16, 181.784 ); + ent.v["angles"] = ( 15.986, 268.284, -2.61464 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 206.858, 843.558, 124.375 ); + ent.v["angles"] = ( 2, 332, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 304.593, 884.716, 122.632 ); + ent.v["angles"] = ( 5, 332, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 805.009, 516.556, 50.4845 ); + ent.v["angles"] = ( 1.43876, 287.983, -1.38981 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 1011.04, 1548.22, 283 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 978.594, 1845.3, 322.884 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_butterfly_static_prnt" ); + ent.v["origin"] = ( 88.6087, -1868.49, 203.885 ); + ent.v["angles"] = ( 6.03354, 271.314, -35.1252 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1879.49, -244.125, 295.202 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1800.97, -682.559, 297.873 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 1793.72, -835.498, 110 ); + ent.v["angles"] = ( 359.354, 161.886, -0.882607 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_md" ); + ent.v["origin"] = ( 1482.63, 1069.3, 204.398 ); + ent.v["angles"] = ( 1.86574, 124.938, -0.888848 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_md" ); + ent.v["origin"] = ( 1337.51, 1570.16, 235.242 ); + ent.v["angles"] = ( 351.789, 147.64, -0.173719 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -1230.93, -52.771, 74.876 ); + ent.v["angles"] = ( 41.9836, 129.151, 9.69062 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -1101.04, 301.61, 81.6412 ); + ent.v["angles"] = ( 354.438, 121.931, 7.22208 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -479.455, 1156.87, 212.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( -474.464, 1105.36, 185.125 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -403.648, 116.011, 84.7432 ); + ent.v["angles"] = ( 356.466, 197.97, -0.30639 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -301.636, -1427.11, 204.4 ); + ent.v["angles"] = ( 6, 116, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -77.2682, -969.96, 152.072 ); + ent.v["angles"] = ( 1.67574, 7.97567, -1.33206 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -241.353, -875.267, 172.512 ); + ent.v["angles"] = ( 1.13469, 129.036, -2.36212 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 1085.16, 495.734, 56.8909 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 1004.92, 922.4, 296.125 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 369.113, 2121.6, 323.372 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 627.41, 1614.24, 334.312 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 744.232, 1616.26, 336.336 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 721.963, -126.523, 64.4678 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 1832.51, -442.99, 240.125 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm" ); + ent.v["origin"] = ( 324.501, -1412.22, 264.125 ); + ent.v["angles"] = ( 358.867, 204.029, -0.792892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_faucet_on" ); + ent.v["origin"] = ( 1935.99, 695.071, 242.023 ); + ent.v["angles"] = ( 83, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_water_faucet_splash" ); + ent.v["origin"] = ( 1929.33, 696.249, 204.239 ); + ent.v["angles"] = ( 273, 1, 89 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -776.643, 379.363, 125.799 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 64.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -714.771, 514.557, 115 ); + ent.v["angles"] = ( 354, 74, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -6.46447, 364.925, 164.844 ); + ent.v["angles"] = ( 358.071, 81.8687, -1.23472 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( -680.417, -523.191, 143.789 ); + ent.v["angles"] = ( 0.369069, 3.88662, 1.838 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_seagulls_circle_below" ); + ent.v["origin"] = ( 4672.62, -198.619, 1247.15 ); + ent.v["angles"] = ( 2, 180, 177 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_seagulls_circle_below" ); + ent.v["origin"] = ( 1922.04, -3536.46, 1170.22 ); + ent.v["angles"] = ( 1.15591, 165.017, 176.585 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_seagulls_circle_below" ); + ent.v["origin"] = ( -1102.22, -4538.26, 1047.8 ); + ent.v["angles"] = ( 2, 180, 177 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_seagulls_circle_below" ); + ent.v["origin"] = ( -4172.67, -1879.29, 1088.26 ); + ent.v["angles"] = ( 2, 180, 177 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( 533.246, 305.745, 161.23 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 71.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -878.101, -235.076, 329.121 ); + ent.v["angles"] = ( 0, 115, -4 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( 545.875, 286.287, 163.76 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 254.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_blue_ribbon" ); + ent.v["origin"] = ( 74.5502, -445.167, 208.5 ); + ent.v["angles"] = ( 305.86, 17.0497, -96.3044 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_blue_ribbon" ); + ent.v["origin"] = ( 69.7567, -492.776, 205.5 ); + ent.v["angles"] = ( 300.341, 345.752, -85.0169 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_blue_ribbon" ); + ent.v["origin"] = ( -31.3304, -549.847, 208.5 ); + ent.v["angles"] = ( 299.559, 230.559, 94.0593 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_blue_ribbon" ); + ent.v["origin"] = ( 6.02181, -540.682, 208.5 ); + ent.v["angles"] = ( 299.083, 255.419, 100.622 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_seagulls_circle_below" ); + ent.v["origin"] = ( -2879.38, 1547.04, 1079.23 ); + ent.v["angles"] = ( 2, 180, 177 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 732, 2127.86, 349.619 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 865.589, 2205.97, 366.338 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 1032.85, 2029, 372.667 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); + ent.v["origin"] = ( 1329.42, -1118.49, 105.281 ); + ent.v["angles"] = ( 359.572, 204.044, 2.5911 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 1100.3, -1329.92, -293.425 ); + ent.v["angles"] = ( 0.788114, 133, -0.615798 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_gray_stain_glss_pink" ); + ent.v["origin"] = ( 1594.57, 304.802, 306.428 ); + ent.v["angles"] = ( 347.969, 49.1658, -0.640177 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -226.441, 614.918, 173.918 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 666.446, 390.311, 209.082 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 173.692, 553.872, 210.921 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 1559.99, 607.556, 290.68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -432.632, 887.769, 388.807 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -659.863, 1264.31, 328.627 ); + ent.v["angles"] = ( 14.9977, 269.965, -0.267933 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -1117.73, 15.1349, -317.279 ); + ent.v["angles"] = ( 1.48609, 133.63, 1.71703 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( 2156.08, 890.474, 239.741 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 143.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( 2012.1, 924.563, 228.909 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 171.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( 440.904, -472.458, 139.958 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 122.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( 470.403, -610.971, 162.06 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 124.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_fireplace_md" ); + ent.v["origin"] = ( 1987.12, -258.44, 252.658 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_wide_distant_thin" ); + ent.v["origin"] = ( 119.687, 380.612, 134.812 ); + ent.v["angles"] = ( 358.764, 173.999, -1.86329 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_wide_distant_thin" ); + ent.v["origin"] = ( -43.8084, 8.52594, 101.195 ); + ent.v["angles"] = ( 357.629, 138.987, -3.03409 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( -156.146, -1069.57, 168.804 ); + ent.v["angles"] = ( 6, 116, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); + ent.v["origin"] = ( 237.141, -922.686, 153.971 ); + ent.v["angles"] = ( 359.108, 74.025, 1.49298 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_socotra_flicker_light" ); + ent.v["origin"] = ( -695.177, -787.753, 338.235 ); + ent.v["angles"] = ( 359.895, 267.003, -2.99818 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); + ent.v["origin"] = ( -690.172, -790.339, 362.369 ); + ent.v["angles"] = ( 81, 74, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sparks_bounce_socotra" ); + ent.v["origin"] = ( -709.882, -748.195, 358.126 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -233.708, 323.416, 227.125 ); + ent.v["angles"] = ( 8.91874, 271.853, 17.1653 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( -229.885, 350.939, 169.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -594.031, 884.4, 235.125 ); + ent.v["angles"] = ( 6.30834, 161.512, -78.7069 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -652.328, 889.87, 229.125 ); + ent.v["angles"] = ( 2.53584, 327.814, 80.936 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( 70.7891, 1431.43, 363.554 ); + ent.v["angles"] = ( 35.9848, 216.144, -21.2539 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -21.0226, 1447.7, 369.293 ); + ent.v["angles"] = ( 39.6913, 267.27, 11.4673 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); + ent.v["origin"] = ( 55.9814, 1464.14, 300.951 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -593.003, -2204.35, 329 ); + ent.v["angles"] = ( 41, 267, 14 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_window_god_ray" ); + ent.v["origin"] = ( -495.957, -2195.21, 331 ); + ent.v["angles"] = ( 41, 267, 14 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_wide_distant_thin" ); + ent.v["origin"] = ( 1926.97, 563.822, 205 ); + ent.v["angles"] = ( 358.764, 173.999, -1.86329 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_wide_distant_thin" ); + ent.v["origin"] = ( 859.618, 533.827, 32.8482 ); + ent.v["angles"] = ( 357.794, 126.986, -0.366646 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge" ); + ent.v["origin"] = ( 1061.13, -1228.45, 91.7016 ); + ent.v["angles"] = ( 356.865, 127.791, -3.65074 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_wide_distant_thin" ); + ent.v["origin"] = ( 62.6718, 216.636, 118.859 ); + ent.v["angles"] = ( 358.495, 153.971, -3.54378 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_wide_distant_thin" ); + ent.v["origin"] = ( 680.441, 78.4259, 24.6143 ); + ent.v["angles"] = ( 356.362, 124.047, -0.505892 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_sun_flare_socotra" ); + ent.v["origin"] = ( -6746.94, -19551.1, 9526.35 ); + ent.v["angles"] = ( 314.686, 143.193, -125.925 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( -1630.71, 339.54, -80 ); + ent.v["angles"] = ( 356.894, 44.49, -2.05213 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); + ent.v["origin"] = ( 38.5778, 593.921, 119.296 ); + ent.v["angles"] = ( 356.042, 88.5716, -1.64698 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_sml" ); + ent.v["origin"] = ( 986.849, -130.034, 77.4107 ); + ent.v["angles"] = ( 357.364, 177.077, 0.459794 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 1394.73, 969.905, 194.986 ); + ent.v["angles"] = ( 359.131, 250.057, -0.896664 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 2023.85, 1220.5, 288.725 ); + ent.v["angles"] = ( 358.942, 172.044, 0.663439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_sand_ledge_md" ); + ent.v["origin"] = ( 2226.05, 1050.06, 350.851 ); + ent.v["angles"] = ( 358.942, 172.044, 0.663439 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; +} diff --git a/MP/Maps/Yemen/maps/mp/mp_socotra.gsc b/MP/Maps/Yemen/maps/mp/mp_socotra.gsc new file mode 100644 index 0000000..c4063a7 --- /dev/null +++ b/MP/Maps/Yemen/maps/mp/mp_socotra.gsc @@ -0,0 +1,40 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\mp_socotra_fx; +#include maps\mp\_load; +#include maps\mp\_compass; +#include maps\mp\mp_socotra_amb; +#include maps\mp\gametypes\_spawning; + +main() +{ + level.levelspawndvars = ::levelspawndvars; + maps\mp\mp_socotra_fx::main(); + maps\mp\_load::main(); + maps\mp\_compass::setupminimap( "compass_map_mp_socotra" ); + maps\mp\mp_socotra_amb::main(); + setheliheightpatchenabled( "war_mode_heli_height_lock", 0 ); + maps\mp\gametypes\_spawning::level_use_unified_spawning( 1 ); + rts_remove(); + level.remotemotarviewleft = 30; + level.remotemotarviewright = 30; + level.remotemotarviewup = 18; +} + +levelspawndvars( reset_dvars ) +{ + ss = level.spawnsystem; + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2000", reset_dvars ); +} + +rts_remove() +{ + rtsfloors = getentarray( "overwatch_floor", "targetname" ); + + foreach ( rtsfloor in rtsfloors ) + { + if ( isdefined( rtsfloor ) ) + rtsfloor delete(); + } +} diff --git a/MP/Maps/Yemen/maps/mp/mp_socotra_amb.gsc b/MP/Maps/Yemen/maps/mp/mp_socotra_amb.gsc new file mode 100644 index 0000000..feecde8 --- /dev/null +++ b/MP/Maps/Yemen/maps/mp/mp_socotra_amb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_ambientpackage; + +main() +{ + +} diff --git a/MP/Maps/Yemen/maps/mp/mp_socotra_fx.gsc b/MP/Maps/Yemen/maps/mp/mp_socotra_fx.gsc new file mode 100644 index 0000000..cba89d4 --- /dev/null +++ b/MP/Maps/Yemen/maps/mp/mp_socotra_fx.gsc @@ -0,0 +1,90 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\mp_socotra_fx; +#include maps\mp\createart\mp_socotra_art; + +precache_util_fx() +{ + +} + +precache_scripted_fx() +{ + +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["rope_toggle"] = %fxanim_gp_rope_toggle_anim; + level.scr_anim["fxanim_props"]["ropes_hang"] = %fxanim_gp_ropes_hang_01_anim; + level.scr_anim["fxanim_props"]["rope_arch"] = %fxanim_mp_socotra_rope_arch_anim; + level.scr_anim["fxanim_props"]["wire_coil"] = %fxanim_gp_wire_coil_01_anim; + level.scr_anim["fxanim_props"]["wirespark_long"] = %fxanim_gp_wirespark_long_anim; + level.scr_anim["fxanim_props"]["wirespark_med"] = %fxanim_gp_wirespark_med_anim; + level.scr_anim["fxanim_props"]["yemen_pent_long"] = %fxanim_gp_flag_yemen_pent_long_anim; + level.scr_anim["fxanim_props"]["roaches"] = %fxanim_gp_roaches_anim; + level.scr_anim["fxanim_props"]["cloth_sheet_med"] = %fxanim_gp_cloth_sheet_med_anim; + level.scr_anim["fxanim_props"]["rope_coil"] = %fxanim_gp_rope_coil_anim; +} + +precache_createfx_fx() +{ + level._effect["fx_mp_light_dust_motes_md"] = loadfx( "maps/mp_maps/fx_mp_sand_dust_motes" ); + level._effect["fx_light_gray_stain_glss_pink"] = loadfx( "light/fx_light_gray_stain_glss_pink" ); + level._effect["fx_light_gray_stain_glss_blue"] = loadfx( "light/fx_light_gray_stain_glss_blue" ); + level._effect["fx_light_gray_stain_glss_purple"] = loadfx( "light/fx_light_gray_stain_glss_purple" ); + level._effect["fx_light_gray_stain_glss_warm_sm"] = loadfx( "light/fx_light_gray_stain_glss_warm_sm" ); + level._effect["fx_mp_sun_flare_socotra"] = loadfx( "maps/mp_maps/fx_mp_sun_flare_socotra" ); + level._effect["fx_light_gray_blue_ribbon"] = loadfx( "light/fx_light_gray_blue_ribbon" ); + level._effect["fx_insects_butterfly_flutter"] = loadfx( "bio/insects/fx_insects_butterfly_flutter" ); + level._effect["fx_insects_butterfly_static_prnt"] = loadfx( "bio/insects/fx_insects_butterfly_static_prnt" ); + level._effect["fx_insects_roaches_short"] = loadfx( "bio/insects/fx_insects_roaches_short" ); + level._effect["fx_insects_fly_swarm_lng"] = loadfx( "bio/insects/fx_insects_fly_swarm_lng" ); + level._effect["fx_insects_fly_swarm"] = loadfx( "bio/insects/fx_insects_fly_swarm" ); + level._effect["fx_insects_swarm_md_light"] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); + level._effect["fx_seagulls_circle_below"] = loadfx( "bio/animals/fx_seagulls_circle_below" ); + level._effect["fx_seagulls_circle_swarm"] = loadfx( "bio/animals/fx_seagulls_circle_swarm" ); + level._effect["fx_leaves_falling_lite_sm"] = loadfx( "foliage/fx_leaves_falling_lite_sm" ); + level._effect["fx_debris_papers"] = loadfx( "env/debris/fx_debris_papers" ); + level._effect["fx_debris_papers_narrow"] = loadfx( "env/debris/fx_debris_papers_narrow" ); + level._effect["fx_mp_smk_plume_sm_blk"] = loadfx( "maps/mp_maps/fx_mp_smk_plume_sm_blk" ); + level._effect["fx_mp_smk_plume_md_blk"] = loadfx( "maps/mp_maps/fx_mp_socotra_smk_plume_blck" ); + level._effect["fx_smk_cigarette_room_amb"] = loadfx( "smoke/fx_smk_cigarette_room_amb" ); + level._effect["fx_smk_smolder_gray_slow_shrt"] = loadfx( "smoke/fx_smk_smolder_gray_slow_shrt" ); + level._effect["fx_fire_fuel_sm"] = loadfx( "fire/fx_fire_fuel_sm" ); + level._effect["fx_mp_water_drip_light_long"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); + level._effect["fx_mp_water_drip_light_shrt"] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_shrt" ); + level._effect["fx_water_faucet_on"] = loadfx( "water/fx_water_faucet_on" ); + level._effect["fx_water_faucet_splash"] = loadfx( "water/fx_water_faucet_splash" ); + level._effect["fx_mp_sand_kickup_md"] = loadfx( "maps/mp_maps/fx_mp_sand_kickup_md" ); + level._effect["fx_mp_sand_kickup_thin"] = loadfx( "maps/mp_maps/fx_mp_sand_kickup_thin" ); + level._effect["fx_mp_sand_windy_heavy_sm_slow"] = loadfx( "maps/mp_maps/fx_mp_sand_windy_heavy_sm_slow" ); + level._effect["fx_sand_ledge"] = loadfx( "dirt/fx_sand_ledge" ); + level._effect["fx_sand_ledge_sml"] = loadfx( "dirt/fx_sand_ledge_sml" ); + level._effect["fx_sand_ledge_md"] = loadfx( "dirt/fx_sand_ledge_md" ); + level._effect["fx_sand_ledge_wide_distant"] = loadfx( "dirt/fx_sand_ledge_wide_distant" ); + level._effect["fx_sand_windy_heavy_md"] = loadfx( "dirt/fx_sand_windy_heavy_md" ); + level._effect["fx_sand_swirl_sm_runner"] = loadfx( "dirt/fx_sand_swirl_sm_runner" ); + level._effect["fx_sand_moving_in_air_md"] = loadfx( "dirt/fx_sand_moving_in_air_md" ); + level._effect["fx_sand_moving_in_air_pcloud"] = loadfx( "dirt/fx_sand_moving_in_air_pcloud" ); + level._effect["fx_mp_elec_spark_burst_xsm_thin"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin" ); + level._effect["fx_fire_fireplace_md"] = loadfx( "fire/fx_fire_fireplace_md" ); + level._effect["fx_sand_ledge_wide_distant_thin"] = loadfx( "dirt/fx_sand_ledge_wide_distant_thin" ); + level._effect["fx_mp_socotra_flicker_light"] = loadfx( "maps/mp_maps/fx_mp_socotra_flicker_light" ); + level._effect["fx_sparks_bounce_socotra"] = loadfx( "electrical/fx_sparks_bounce_socotra" ); + level._effect["fx_window_god_ray"] = loadfx( "light/fx_window_god_ray" ); + level._effect["fx_mp_sun_flare_socotra"] = loadfx( "lens_flares/fx_lf_mp_socotra_sun1" ); +} + +main() +{ + precache_util_fx(); + precache_createfx_fx(); + precache_scripted_fx(); + precache_fxanim_props(); + maps\mp\createfx\mp_socotra_fx::main(); + maps\mp\createart\mp_socotra_art::main(); +} diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/dog_combat.gsc b/Multiplayer Core/common_mp/maps/mp/animscripts/dog_combat.gsc deleted file mode 100644 index acb4bcf..0000000 --- a/Multiplayer Core/common_mp/maps/mp/animscripts/dog_combat.gsc +++ /dev/null @@ -1,87 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include common_scripts\utility; -#include maps\mp\animscripts\shared; -#include maps\mp\animscripts\utility; - -main() -{ - debug_anim_print( "dog_combat::main() " ); - self endon( "killanimscript" ); - self setaimanimweights( 0, 0 ); -/# - if ( !debug_allow_combat() ) - { - combatidle(); - return; - } -#/ - if ( isdefined( level.hostmigrationtimer ) ) - { - combatidle(); - return; - } -/# - assert( isdefined( self.enemy ) ); -#/ - if ( !isalive( self.enemy ) ) - { - combatidle(); - return; - } - - if ( isplayer( self.enemy ) ) - self meleebiteattackplayer( self.enemy ); -} - -combatidle() -{ - self set_orient_mode( "face enemy" ); - self animmode( "zonly_physics", 0 ); - idleanims = []; - idleanims[0] = "combat_attackidle"; - idleanims[1] = "combat_attackidle_bark"; - idleanims[2] = "combat_attackidle_growl"; - idleanim = random( idleanims ); - debug_anim_print( "dog_combat::combatIdle() - Setting " + idleanim ); - self setanimstate( idleanim ); - self maps\mp\animscripts\shared::donotetracks( "done" ); - debug_anim_print( "dog_combat::combatIdle() - " + idleanim + " notify done." ); -} - -meleebiteattackplayer( player ) -{ - self set_orient_mode( "face enemy" ); - self animmode( "gravity", 0 ); - self.safetochangescript = 0; - - if ( use_low_attack() ) - { - self animmode( "angle deltas", 0 ); - self setanimstate( "combat_attack_player_close_range" ); - self maps\mp\animscripts\shared::donotetracksfortime( 1.4, "done" ); - self animmode( "gravity", 0 ); - } - else - { - attack_time = 1.2 + randomfloat( 0.4 ); - debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_run_attack" ); - self setanimstate( "combat_attack_run" ); - self maps\mp\animscripts\shared::donotetracksfortime( attack_time, "done", ::handlemeleebiteattacknotetracks, player ); - debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - combat_attack_run notify done." ); - } - - self.safetochangescript = 1; - self animmode( "none", 0 ); -} - -handlemeleebiteattacknotetracks( note, player ) -{ - if ( note == "dog_melee" ) - self melee( anglestoforward( self.angles ) ); -} - -use_low_attack( player ) -{ - return 0; -} diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/dog_death.gsc b/Multiplayer Core/common_mp/maps/mp/animscripts/dog_death.gsc deleted file mode 100644 index 408d5ac..0000000 --- a/Multiplayer Core/common_mp/maps/mp/animscripts/dog_death.gsc +++ /dev/null @@ -1,34 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include maps\mp\animscripts\utility; -#include maps\mp\animscripts\shared; - -main() -{ - debug_anim_print( "dog_death::main()" ); - self setaimanimweights( 0, 0 ); - self endon( "killanimscript" ); - - if ( isdefined( self.a.nodeath ) ) - { -/# - assert( self.a.nodeath, "Nodeath needs to be set to true or undefined." ); -#/ - wait 3; - return; - } - - self unlink(); - - if ( isdefined( self.enemy ) && isdefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self ) - self.enemy.syncedmeleetarget = undefined; - - death_anim = "death_" + getanimdirection( self.damageyaw ); -/# - println( death_anim ); -#/ - self animmode( "gravity", 0 ); - debug_anim_print( "dog_death::main() - Setting " + death_anim ); - self setanimstate( death_anim ); - self maps\mp\animscripts\shared::donotetracks( "done" ); -} diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/dog_init.gsc b/Multiplayer Core/common_mp/maps/mp/animscripts/dog_init.gsc deleted file mode 100644 index b807e09..0000000 --- a/Multiplayer Core/common_mp/maps/mp/animscripts/dog_init.gsc +++ /dev/null @@ -1,75 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include maps\mp\animscripts\shared; -#include maps\mp\animscripts\utility; -#include maps\mp\animscripts\dog_move; - -main() -{ - level.dog_debug_orient = 0; - level.dog_debug_anims = 0; - level.dog_debug_anims_ent = 0; - level.dog_debug_turns = 0; - debug_anim_print( "dog_init::main() " ); - maps\mp\animscripts\dog_move::setup_sound_variables(); - anim_get_dvar_int( "debug_dog_sound", "0" ); - anim_get_dvar_int( "debug_dog_notetracks", "0" ); - anim_get_dvar_int( "dog_force_walk", 0 ); - anim_get_dvar_int( "dog_force_run", 0 ); - self.ignoresuppression = 1; - self.chatinitialized = 0; - self.nododgemove = 1; - level.dogattackplayerdist = 50; - level.dogattackplayercloserangedist = 50; - level.dogrunturnspeed = 20; - level.dogrunpainspeed = 20; - self.meleeattackdist = 0; - self thread setmeleeattackdist(); - self.a = spawnstruct(); - self.a.pose = "stand"; - self.a.nextstandinghitdying = 0; - self.a.movement = "run"; - set_anim_playback_rate(); - self.suppressionthreshold = 1; - self.disablearrivals = 0; - level.dogstoppingdistsq = 3416.82; - self.stopanimdistsq = level.dogstoppingdistsq; - self.pathenemyfightdist = 512; - self settalktospecies( "dog" ); - level.lastdogmeleeplayertime = 0; - level.dogmeleeplayercounter = 0; - - if ( !isdefined( level.dog_hits_before_kill ) ) - level.dog_hits_before_kill = 1; -} - -set_anim_playback_rate() -{ - self.animplaybackrate = 0.9 + randomfloat( 0.2 ); - self.moveplaybackrate = 1; -} - -setmeleeattackdist() -{ - self endon( "death" ); - - while ( true ) - { - if ( isdefined( self.enemy ) ) - { - if ( isplayer( self.enemy ) ) - { - stance = self.enemy getstance(); - - if ( stance == "prone" ) - self.meleeattackdist = level.dogattackplayercloserangedist; - else - self.meleeattackdist = level.dogattackplayerdist; - } - else - self.meleeattackdist = level.dogattackplayerdist; - } - - wait 1; - } -} diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/dog_stop.gsc b/Multiplayer Core/common_mp/maps/mp/animscripts/dog_stop.gsc deleted file mode 100644 index 43d1909..0000000 --- a/Multiplayer Core/common_mp/maps/mp/animscripts/dog_stop.gsc +++ /dev/null @@ -1,129 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include maps\mp\animscripts\shared; -#include maps\mp\animscripts\utility; - -main() -{ - debug_anim_print( "dog_stop::main()" ); - self endon( "killanimscript" ); - self setaimanimweights( 0, 0 ); - self thread lookattarget( "attackIdle" ); - - while ( true ) - { - if ( shouldattackidle() ) - { - self randomattackidle(); - maps\mp\animscripts\shared::donotetracks( "done" ); - } - else - { - self set_orient_mode( "face current" ); - debug_anim_print( "dog_stop::main() - Setting stop_idle" ); - self notify( "stop tracking" ); - self setaimanimweights( 0, 0 ); - self setanimstate( "stop_idle" ); - maps\mp\animscripts\shared::donotetracks( "done" ); - self thread lookattarget( "attackIdle" ); - } - - debug_anim_print( "dog_stop::main() - stop idle loop notify done." ); - } -} - -isfacingenemy( tolerancecosangle ) -{ -/# - assert( isdefined( self.enemy ) ); -#/ - vectoenemy = self.enemy.origin - self.origin; - disttoenemy = length( vectoenemy ); - - if ( disttoenemy < 1 ) - return 1; - - forward = anglestoforward( self.angles ); - val1 = forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1]; - val2 = ( forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1] ) / disttoenemy; - return ( forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1] ) / disttoenemy > tolerancecosangle; -} - -randomattackidle() -{ - if ( isfacingenemy( -0.5 ) ) - self set_orient_mode( "face current" ); - else - self set_orient_mode( "face enemy" ); - - if ( should_growl() ) - { - debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl" ); - self setanimstate( "stop_attackidle_growl" ); - return; - } - - idlechance = 33; - barkchance = 66; - - if ( isdefined( self.mode ) ) - { - if ( self.mode == "growl" ) - { - idlechance = 15; - barkchance = 30; - } - else if ( self.mode == "bark" ) - { - idlechance = 15; - barkchance = 85; - } - } - - rand = randomint( 100 ); - - if ( rand < idlechance ) - { - debug_anim_print( "dog_stop::main() - Setting stop_attackidle" ); - self setanimstate( "stop_attackidle" ); - } - else if ( rand < barkchance ) - { - debug_anim_print( "dog_stop::main() - Setting stop_attackidle_bark " ); - self setanimstate( "stop_attackidle_bark" ); - } - else - { - debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl " ); - self setanimstate( "stop_attackidle_growl" ); - } -} - -shouldattackidle() -{ - return isdefined( self.enemy ) && isalive( self.enemy ) && distancesquared( self.origin, self.enemy.origin ) < 1000000; -} - -should_growl() -{ - if ( isdefined( self.script_growl ) ) - return 1; - - if ( !isalive( self.enemy ) ) - return 1; - - return !self cansee( self.enemy ); -} - -lookattarget( lookposeset ) -{ - self endon( "killanimscript" ); - self endon( "stop tracking" ); - debug_anim_print( "dog_stop::lookAtTarget() - Starting look at " + lookposeset ); - self.rightaimlimit = 90; - self.leftaimlimit = -90; - self.upaimlimit = 45; - self.downaimlimit = -45; - self maps\mp\animscripts\shared::setanimaimweight( 1, 0.2 ); - self maps\mp\animscripts\shared::trackloop(); -} diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/shared.gsc b/Multiplayer Core/common_mp/maps/mp/animscripts/shared.gsc deleted file mode 100644 index a5c4b3a..0000000 --- a/Multiplayer Core/common_mp/maps/mp/animscripts/shared.gsc +++ /dev/null @@ -1,287 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include common_scripts\utility; -#include maps\mp\animscripts\utility; -#include maps\mp\_utility; - -handledogsoundnotetracks( note ) -{ - if ( note == "sound_dogstep_run_default" ) - return true; - - prefix = getsubstr( note, 0, 5 ); - - if ( prefix != "sound" ) - return false; - - return true; -} - -growling() -{ - return isdefined( self.script_growl ); -} - -handlenotetrack( note, flagname, customfunction, var1 ) -{ -/# - if ( getdvarint( _hash_6EBEB982 ) ) - println( "dog notetrack: " + flagname + " " + note + " " + gettime() ); -#/ - if ( isai( self ) && self.type == "dog" ) - { - if ( handledogsoundnotetracks( note ) ) - return; - } - - switch ( note ) - { - case "undefined": - case "finish": - case "end": - return note; - default: - if ( isdefined( customfunction ) ) - { - if ( !isdefined( var1 ) ) - return [[ customfunction ]]( note ); - else - return [[ customfunction ]]( note, var1 ); - } - - break; - } -} - -donotetracks( flagname, customfunction, var1 ) -{ - for (;;) - { - self waittill( flagname, note ); - - if ( !isdefined( note ) ) - note = "undefined"; - - val = self handlenotetrack( note, flagname, customfunction, var1 ); - - if ( isdefined( val ) ) - return val; - } -} - -donotetracksforeverproc( notetracksfunc, flagname, killstring, customfunction, var1 ) -{ - if ( isdefined( killstring ) ) - self endon( killstring ); - - self endon( "killanimscript" ); - - for (;;) - { - time = gettime(); - returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 ); - timetaken = gettime() - time; - - if ( timetaken < 0.05 ) - { - time = gettime(); - returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 ); - timetaken = gettime() - time; - - if ( timetaken < 0.05 ) - { -/# - println( gettime() + " mapsmpanimscriptsshared::DoNoteTracksForever is trying to cause an infinite loop on anim " + flagname + ", returned " + returnednote + "." ); -#/ - wait( 0.05 - timetaken ); - } - } - } -} - -donotetracksforever( flagname, killstring, customfunction, var1 ) -{ - donotetracksforeverproc( ::donotetracks, flagname, killstring, customfunction, var1 ); -} - -donotetracksfortimeproc( donotetracksforeverfunc, time, flagname, customfunction, ent, var1 ) -{ - ent endon( "stop_notetracks" ); - [[ donotetracksforeverfunc ]]( flagname, undefined, customfunction, var1 ); -} - -donotetracksfortime( time, flagname, customfunction, var1 ) -{ - ent = spawnstruct(); - ent thread donotetracksfortimeendnotify( time ); - donotetracksfortimeproc( ::donotetracksforever, time, flagname, customfunction, ent, var1 ); -} - -donotetracksfortimeendnotify( time ) -{ - wait( time ); - self notify( "stop_notetracks" ); -} - -trackloop() -{ - players = get_players(); - deltachangeperframe = 5; - aimblendtime = 0.05; - prevyawdelta = 0; - prevpitchdelta = 0; - maxyawdeltachange = 5; - maxpitchdeltachange = 5; - pitchadd = 0; - yawadd = 0; - - if ( self.type == "dog" || self.type == "zombie" || self.type == "zombie_dog" ) - { - domaxanglecheck = 0; - self.shootent = self.enemy; - } - else - { - domaxanglecheck = 1; - - if ( self.a.script == "cover_crouch" && isdefined( self.a.covermode ) && self.a.covermode == "lean" ) - pitchadd = -1 * anim.covercrouchleanpitch; - - if ( ( self.a.script == "cover_left" || self.a.script == "cover_right" ) && isdefined( self.a.cornermode ) && self.a.cornermode == "lean" ) - yawadd = self.covernode.angles[1] - self.angles[1]; - } - - yawdelta = 0; - pitchdelta = 0; - firstframe = 1; - - for (;;) - { - incranimaimweight(); - selfshootatpos = ( self.origin[0], self.origin[1], self geteye()[2] ); - shootpos = undefined; - - if ( isdefined( self.enemy ) ) - shootpos = self.enemy getshootatpos(); - - if ( !isdefined( shootpos ) ) - { - yawdelta = 0; - pitchdelta = 0; - } - else - { - vectortoshootpos = shootpos - selfshootatpos; - anglestoshootpos = vectortoangles( vectortoshootpos ); - pitchdelta = 360 - anglestoshootpos[0]; - pitchdelta = angleclamp180( pitchdelta + pitchadd ); - yawdelta = self.angles[1] - anglestoshootpos[1]; - yawdelta = angleclamp180( yawdelta + yawadd ); - } - - if ( domaxanglecheck && ( abs( yawdelta ) > 60 || abs( pitchdelta ) > 60 ) ) - { - yawdelta = 0; - pitchdelta = 0; - } - else - { - if ( yawdelta > self.rightaimlimit ) - yawdelta = self.rightaimlimit; - else if ( yawdelta < self.leftaimlimit ) - yawdelta = self.leftaimlimit; - - if ( pitchdelta > self.upaimlimit ) - pitchdelta = self.upaimlimit; - else if ( pitchdelta < self.downaimlimit ) - pitchdelta = self.downaimlimit; - } - - if ( firstframe ) - firstframe = 0; - else - { - yawdeltachange = yawdelta - prevyawdelta; - - if ( abs( yawdeltachange ) > maxyawdeltachange ) - yawdelta = prevyawdelta + maxyawdeltachange * sign( yawdeltachange ); - - pitchdeltachange = pitchdelta - prevpitchdelta; - - if ( abs( pitchdeltachange ) > maxpitchdeltachange ) - pitchdelta = prevpitchdelta + maxpitchdeltachange * sign( pitchdeltachange ); - } - - prevyawdelta = yawdelta; - prevpitchdelta = pitchdelta; - updown = 0; - leftright = 0; - - if ( yawdelta > 0 ) - { -/# - assert( yawdelta <= self.rightaimlimit ); -#/ - weight = yawdelta / self.rightaimlimit * self.a.aimweight; - leftright = weight; - } - else if ( yawdelta < 0 ) - { -/# - assert( yawdelta >= self.leftaimlimit ); -#/ - weight = yawdelta / self.leftaimlimit * self.a.aimweight; - leftright = -1 * weight; - } - - if ( pitchdelta > 0 ) - { -/# - assert( pitchdelta <= self.upaimlimit ); -#/ - weight = pitchdelta / self.upaimlimit * self.a.aimweight; - updown = weight; - } - else if ( pitchdelta < 0 ) - { -/# - assert( pitchdelta >= self.downaimlimit ); -#/ - weight = pitchdelta / self.downaimlimit * self.a.aimweight; - updown = -1 * weight; - } - - self setaimanimweights( updown, leftright ); - wait 0.05; - } -} - -setanimaimweight( goalweight, goaltime ) -{ - if ( !isdefined( goaltime ) || goaltime <= 0 ) - { - self.a.aimweight = goalweight; - self.a.aimweight_start = goalweight; - self.a.aimweight_end = goalweight; - self.a.aimweight_transframes = 0; - } - else - { - self.a.aimweight = goalweight; - self.a.aimweight_start = self.a.aimweight; - self.a.aimweight_end = goalweight; - self.a.aimweight_transframes = int( goaltime * 20 ); - } - - self.a.aimweight_t = 0; -} - -incranimaimweight() -{ - if ( self.a.aimweight_t < self.a.aimweight_transframes ) - { - self.a.aimweight_t++; - t = 1.0 * self.a.aimweight_t / self.a.aimweight_transframes; - self.a.aimweight = self.a.aimweight_start * ( 1 - t ) + self.a.aimweight_end * t; - } -} diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/traverse/shared.gsc b/Multiplayer Core/common_mp/maps/mp/animscripts/traverse/shared.gsc deleted file mode 100644 index 279b040..0000000 --- a/Multiplayer Core/common_mp/maps/mp/animscripts/traverse/shared.gsc +++ /dev/null @@ -1,207 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include maps\mp\animscripts\utility; -#include maps\mp\_utility; -#include common_scripts\utility; -#include maps\mp\animscripts\shared; - -init_traverse() -{ - point = getent( self.target, "targetname" ); - - if ( isdefined( point ) ) - { - self.traverse_height = point.origin[2]; - point delete(); - } - else - { - point = getstruct( self.target, "targetname" ); - - if ( isdefined( point ) ) - self.traverse_height = point.origin[2]; - } -} - -teleportthread( verticaloffset ) -{ - self endon( "killanimscript" ); - self notify( "endTeleportThread" ); - self endon( "endTeleportThread" ); - reps = 5; - offset = ( 0, 0, verticaloffset / reps ); - - for ( i = 0; i < reps; i++ ) - { - self teleport( self.origin + offset ); - wait 0.05; - } -} - -teleportthreadex( verticaloffset, delay, frames ) -{ - self endon( "killanimscript" ); - self notify( "endTeleportThread" ); - self endon( "endTeleportThread" ); - - if ( verticaloffset == 0 ) - return; - - wait( delay ); - amount = verticaloffset / frames; - - if ( amount > 10.0 ) - amount = 10.0; - else if ( amount < -10.0 ) - amount = -10.0; - - offset = ( 0, 0, amount ); - - for ( i = 0; i < frames; i++ ) - { - self teleport( self.origin + offset ); - wait 0.05; - } -} - -dog_wall_and_window_hop( traversename, height ) -{ - self endon( "killanimscript" ); - self traversemode( "nogravity" ); - self traversemode( "noclip" ); - startnode = self getnegotiationstartnode(); -/# - assert( isdefined( startnode ) ); -#/ - self orientmode( "face angle", startnode.angles[1] ); - - if ( isdefined( startnode.traverse_height ) ) - { - realheight = startnode.traverse_height - startnode.origin[2]; - self thread teleportthread( realheight - height ); - } - else if ( height != 36.0 ) - self thread teleportthreadex( height - 36.0, 0.2, 7 ); - - debug_anim_print( "traverse::dog_wall_and_window_hop() - Setting " + traversename ); - self setanimstate( traversename ); - maps\mp\animscripts\shared::donotetracksfortime( 1.0, "done" ); - debug_anim_print( "traverse::dog_wall_and_window_hop() - " + traversename ); - self.traversecomplete = 1; -} - -dog_jump_down( height, frames, time ) -{ - self endon( "killanimscript" ); - self traversemode( "noclip" ); - - if ( !isdefined( time ) ) - time = 0.3; - - startnode = self getnegotiationstartnode(); -/# - assert( isdefined( startnode ) ); -#/ - self orientmode( "face angle", startnode.angles[1] ); - - if ( isdefined( startnode.traverse_height ) ) - { - realheight = startnode.traverse_height - startnode.origin[2]; - self thread teleportthread( realheight - height ); - } - else if ( height != 40.0 ) - self thread teleportthreadex( height - 40.0, 0.1, frames ); - - debug_anim_print( "traverse::dog_jump_down() - Setting traverse_jump_down_40" ); - self setanimstate( "traverse_jump_down_40" ); - maps\mp\animscripts\shared::donotetracksfortime( time, "done" ); - debug_anim_print( "traverse::dog_jump_down() - traverse_jump_down_40 " ); - self traversemode( "gravity" ); - self.traversecomplete = 1; -} - -dog_jump_down_far( height, frames, time ) -{ - self endon( "killanimscript" ); - self traversemode( "noclip" ); - - if ( !isdefined( time ) ) - time = 0.3; - - startnode = self getnegotiationstartnode(); -/# - assert( isdefined( startnode ) ); -#/ - self orientmode( "face angle", startnode.angles[1] ); - - if ( isdefined( startnode.traverse_height ) ) - { - realheight = startnode.traverse_height - startnode.origin[2]; - self thread teleportthread( realheight - height ); - } - else if ( height != 80.0 ) - self thread teleportthreadex( 80.0 - height, 0.1, frames ); - - debug_anim_print( "traverse::dog_jump_down() - Setting traverse_jump_down_80" ); - self setanimstate( "traverse_jump_down_80" ); - maps\mp\animscripts\shared::donotetracksfortime( time, "done" ); - debug_anim_print( "traverse::dog_jump_down() - traverse_jump_down_80 " ); - self traversemode( "gravity" ); - self.traversecomplete = 1; -} - -dog_jump_up( height, frames ) -{ - self endon( "killanimscript" ); - self traversemode( "noclip" ); - startnode = self getnegotiationstartnode(); -/# - assert( isdefined( startnode ) ); -#/ - self orientmode( "face angle", startnode.angles[1] ); - - if ( isdefined( startnode.traverse_height ) ) - { - realheight = startnode.traverse_height - startnode.origin[2]; - self thread teleportthread( realheight - height ); - } - else if ( height != 40.0 ) - self thread teleportthreadex( height - 40.0, 0.2, frames ); - - debug_anim_print( "traverse::dog_jump_up() - Setting traverse_jump_up_40" ); - self setanimstate( "traverse_jump_up_40" ); - maps\mp\animscripts\shared::donotetracksfortime( 0.5, "done" ); - debug_anim_print( "traverse::dog_jump_up() - traverse_jump_up_40 " ); - self traversemode( "gravity" ); - self.traversecomplete = 1; -} - -dog_jump_up_high( height, frames ) -{ -/# - assert( self.type == "dog", "Only dogs can do this traverse currently." ); -#/ - self endon( "killanimscript" ); - self traversemode( "nogravity" ); - self traversemode( "noclip" ); - startnode = self getnegotiationstartnode(); -/# - assert( isdefined( startnode ) ); -#/ - self orientmode( "face angle", startnode.angles[1] ); - - if ( isdefined( startnode.traverse_height ) ) - { - realheight = startnode.traverse_height - startnode.origin[2]; - self thread teleportthreadex( height - 80, 0.2, frames ); - } - else if ( height != 80.0 ) - self thread teleportthreadex( height - 80.0, 0.2, frames ); - - debug_anim_print( "traverse::dog_jump_up_80() - Setting traverse_jump_up_80" ); - self setanimstate( "traverse_jump_up_80" ); - maps\mp\animscripts\shared::donotetracksfortime( 0.6, "done" ); - debug_anim_print( "traverse::dog_jump_up_80() - traverse_jump_up_80 " ); - self traversemode( "gravity" ); - self.traversecomplete = 1; -} diff --git a/Multiplayer Core/common_mp/maps/mp/animscripts/utility.gsc b/Multiplayer Core/common_mp/maps/mp/animscripts/utility.gsc deleted file mode 100644 index 66154d0..0000000 --- a/Multiplayer Core/common_mp/maps/mp/animscripts/utility.gsc +++ /dev/null @@ -1,138 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -anim_get_dvar_int( dvar, def ) -{ - return int( anim_get_dvar( dvar, def ) ); -} - -anim_get_dvar( dvar, def ) -{ - if ( getdvar( dvar ) != "" ) - return getdvarfloat( dvar ); - else - { - setdvar( dvar, def ); - return def; - } -} - -set_orient_mode( mode, val1 ) -{ -/# - if ( level.dog_debug_orient == self getentnum() ) - { - if ( isdefined( val1 ) ) - println( "DOG: Setting orient mode: " + mode + " " + val1 + " " + gettime() ); - else - println( "DOG: Setting orient mode: " + mode + " " + gettime() ); - } -#/ - if ( isdefined( val1 ) ) - self orientmode( mode, val1 ); - else - self orientmode( mode ); -} - -debug_anim_print( text ) -{ -/# - if ( level.dog_debug_anims ) - println( text + " " + gettime() ); - - if ( level.dog_debug_anims_ent == self getentnum() ) - println( text + " " + gettime() ); -#/ -} - -debug_turn_print( text, line ) -{ -/# - if ( level.dog_debug_turns == self getentnum() ) - { - duration = 200; - currentyawcolor = ( 1, 1, 1 ); - lookaheadyawcolor = ( 1, 0, 0 ); - desiredyawcolor = ( 1, 1, 0 ); - currentyaw = angleclamp180( self.angles[1] ); - desiredyaw = angleclamp180( self.desiredangle ); - lookaheaddir = self.lookaheaddir; - lookaheadangles = vectortoangles( lookaheaddir ); - lookaheadyaw = angleclamp180( lookaheadangles[1] ); - println( text + " " + gettime() + " cur: " + currentyaw + " look: " + lookaheadyaw + " desired: " + desiredyaw ); - } -#/ -} - -debug_allow_movement() -{ -/# - return anim_get_dvar_int( "debug_dog_allow_movement", "1" ); -#/ - return 1; -} - -debug_allow_combat() -{ -/# - return anim_get_dvar_int( "debug_dog_allow_combat", "1" ); -#/ - return 1; -} - -current_yaw_line_debug( duration ) -{ -/# - currentyawcolor = []; - currentyawcolor[0] = ( 0, 0, 1 ); - currentyawcolor[1] = ( 1, 0, 1 ); - current_color_index = 0; - start_time = gettime(); - - if ( !isdefined( level.lastdebugheight ) ) - level.lastdebugheight = 15; - - while ( gettime() - start_time < 1000 ) - { - pos1 = ( self.origin[0], self.origin[1], self.origin[2] + level.lastdebugheight ); - pos2 = pos1 + vectorscale( anglestoforward( self.angles ), ( current_color_index + 1 ) * 10 ); - line( pos1, pos2, currentyawcolor[current_color_index], 0.3, 1, duration ); - current_color_index = ( current_color_index + 1 ) % currentyawcolor.size; - wait 0.05; - } - - if ( level.lastdebugheight == 15 ) - level.lastdebugheight = 30; - else - level.lastdebugheight = 15; -#/ -} - -getanimdirection( damageyaw ) -{ - if ( damageyaw > 135 || damageyaw <= -135 ) - return "front"; - else if ( damageyaw > 45 && damageyaw <= 135 ) - return "right"; - else if ( damageyaw > -45 && damageyaw <= 45 ) - return "back"; - else - return "left"; - - return "front"; -} - -setfootstepeffect( name, fx ) -{ -/# - assert( isdefined( name ), "Need to define the footstep surface type." ); -#/ -/# - assert( isdefined( fx ), "Need to define the mud footstep effect." ); -#/ - if ( !isdefined( anim.optionalstepeffects ) ) - anim.optionalstepeffects = []; - - anim.optionalstepeffects[anim.optionalstepeffects.size] = name; - level._effect["step_" + name] = fx; -} diff --git a/Multiplayer Core/common_mp/maps/mp/killstreaks/_dogs.gsc b/Multiplayer Core/common_mp/maps/mp/killstreaks/_dogs.gsc deleted file mode 100644 index 3041f42..0000000 --- a/Multiplayer Core/common_mp/maps/mp/killstreaks/_dogs.gsc +++ /dev/null @@ -1,904 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include maps\mp\_utility; -#include common_scripts\utility; -#include maps\mp\gametypes\_tweakables; -#include maps\mp\killstreaks\_killstreaks; -#include maps\mp\killstreaks\_killstreakrules; -#include maps\mp\gametypes\_battlechatter_mp; -#include maps\mp\gametypes\_spawning; -#include maps\mp\gametypes\_weapons; -#include maps\mp\_scoreevents; -#include maps\mp\killstreaks\_supplydrop; -#include maps\mp\gametypes\_dev; - -init() -{ - precachemodel( "german_shepherd_vest" ); - precachemodel( "german_shepherd_vest_black" ); - level.dog_targets = []; - level.dog_targets[level.dog_targets.size] = "trigger_radius"; - level.dog_targets[level.dog_targets.size] = "trigger_multiple"; - level.dog_targets[level.dog_targets.size] = "trigger_use_touch"; -/# - level thread devgui_dog_think(); -#/ -} - -initkillstreak() -{ - if ( maps\mp\gametypes\_tweakables::gettweakablevalue( "killstreak", "allowdogs" ) ) - { - maps\mp\killstreaks\_killstreaks::registerkillstreak( "dogs_mp", "dogs_mp", "killstreak_dogs", "dogs_used", ::usekillstreakdogs, 1 ); - maps\mp\killstreaks\_killstreaks::registerkillstreakstrings( "dogs_mp", &"KILLSTREAK_EARNED_DOGS", &"KILLSTREAK_DOGS_NOT_AVAILABLE", &"KILLSTREAK_DOGS_INBOUND" ); - maps\mp\killstreaks\_killstreaks::registerkillstreakdialog( "dogs_mp", "mpl_killstreak_dogs", "kls_dogs_used", "", "kls_dogs_enemy", "", "kls_dogs_ready" ); - maps\mp\killstreaks\_killstreaks::registerkillstreakdevdvar( "dogs_mp", "scr_givedogs" ); - maps\mp\killstreaks\_killstreaks::setkillstreakteamkillpenaltyscale( "dogs_mp", 0.0 ); - maps\mp\killstreaks\_killstreaks::registerkillstreakaltweapon( "dogs_mp", "dog_bite_mp" ); - } -} - -usekillstreakdogs( hardpointtype ) -{ - if ( !dog_killstreak_init() ) - return false; - - if ( !self maps\mp\killstreaks\_killstreakrules::iskillstreakallowed( hardpointtype, self.team ) ) - return false; - - killstreak_id = self maps\mp\killstreaks\_killstreakrules::killstreakstart( "dogs_mp", self.team ); - self thread ownerhadactivedogs(); - - if ( killstreak_id == -1 ) - return false; - - if ( level.teambased ) - { - foreach ( team in level.teams ) - { - if ( team == self.team ) - continue; - - thread maps\mp\gametypes\_battlechatter_mp::onkillstreakused( "dogs", team ); - } - } - - self maps\mp\killstreaks\_killstreaks::playkillstreakstartdialog( "dogs_mp", self.team, 1 ); - level.globalkillstreakscalled++; - self addweaponstat( "dogs_mp", "used", 1 ); - ownerdeathcount = self.deathcount; - level thread dog_manager_spawn_dogs( self, ownerdeathcount, killstreak_id ); - level notify( "called_in_the_dogs" ); - return true; -} - -ownerhadactivedogs() -{ - self endon( "disconnect" ); - self.dogsactive = 1; - self.dogsactivekillstreak = 0; - self waittill_any( "death", "game_over", "dogs_complete" ); - self.dogsactivekillstreak = 0; - self.dogsactive = undefined; -} - -dog_killstreak_init() -{ - dog_spawner = getent( "dog_spawner", "targetname" ); - - if ( !isdefined( dog_spawner ) ) - { -/# - println( "No dog spawners found in map" ); -#/ - return false; - } - - spawns = getnodearray( "spawn", "script_noteworthy" ); - - if ( spawns.size <= 0 ) - { -/# - println( "No dog spawn nodes found in map" ); -#/ - return false; - } - - exits = getnodearray( "exit", "script_noteworthy" ); - - if ( exits.size <= 0 ) - { -/# - println( "No dog exit nodes found in map" ); -#/ - return false; - } - - return true; -} - -dog_set_model() -{ - self setmodel( "german_shepherd_vest" ); - self setenemymodel( "german_shepherd_vest_black" ); -} - -init_dog() -{ -/# - assert( isai( self ) ); -#/ - self.targetname = "attack_dog"; - self.animtree = "dog.atr"; - self.type = "dog"; - self.accuracy = 0.2; - self.health = 100; - self.maxhealth = 100; - self.aiweapon = "dog_bite_mp"; - self.secondaryweapon = ""; - self.sidearm = ""; - self.grenadeammo = 0; - self.goalradius = 128; - self.nododgemove = 1; - self.ignoresuppression = 1; - self.suppressionthreshold = 1; - self.disablearrivals = 0; - self.pathenemyfightdist = 512; - self.soundmod = "dog"; - self.meleeattackdist = 90; - self thread dog_health_regen(); - self thread selfdefensechallenge(); -} - -get_spawn_node( owner, team ) -{ - spawns = getnodearray( "spawn", "script_noteworthy" ); - return spawns[randomint( spawns.size )]; -} - -get_score_for_spawn( origin, team ) -{ - players = get_players(); - score = 0; - - foreach ( player in players ) - { - if ( !isdefined( player ) ) - continue; - - if ( !isalive( player ) ) - continue; - - if ( player.sessionstate != "playing" ) - continue; - - if ( distancesquared( player.origin, origin ) > 4194304 ) - continue; - - if ( player.team == team ) - { - score++; - continue; - } - - score--; - } - - return score; -} - -dog_set_owner( owner, team, requireddeathcount ) -{ - self setentityowner( owner ); - self.aiteam = team; - self.requireddeathcount = requireddeathcount; -} - -dog_create_spawn_influencer() -{ - self maps\mp\gametypes\_spawning::create_dog_influencers(); -} - -dog_manager_spawn_dog( owner, team, spawn_node, requireddeathcount ) -{ - dog_spawner = getent( "dog_spawner", "targetname" ); - dog = dog_spawner spawnactor(); - dog forceteleport( spawn_node.origin, spawn_node.angles ); - dog init_dog(); - dog dog_set_owner( owner, team, requireddeathcount ); - dog dog_set_model(); - dog dog_create_spawn_influencer(); - dog thread dog_owner_kills(); - dog thread dog_notify_level_on_death(); - dog thread dog_patrol(); - dog thread maps\mp\gametypes\_weapons::monitor_dog_special_grenades(); - return dog; -} - -dog_manager_spawn_dogs( owner, deathcount, killstreak_id ) -{ - requireddeathcount = deathcount; - team = owner.team; - level.dog_abort = 0; - owner thread dog_manager_abort(); - level thread dog_manager_game_ended(); - count = 0; - - while ( count < 10 ) - { - if ( level.dog_abort ) - break; - - for ( dogs = dog_manager_get_dogs(); dogs.size < 5 && count < 10 && !level.dog_abort; dogs = dog_manager_get_dogs() ) - { - node = get_spawn_node( owner, team ); - level dog_manager_spawn_dog( owner, team, node, requireddeathcount ); - count++; - wait( randomfloatrange( 2, 5 ) ); - } - - level waittill( "dog_died" ); - } - - for (;;) - { - dogs = dog_manager_get_dogs(); - - if ( dogs.size <= 0 ) - { - maps\mp\killstreaks\_killstreakrules::killstreakstop( "dogs_mp", team, killstreak_id ); - - if ( isdefined( owner ) ) - owner notify( "dogs_complete" ); - - return; - } - - level waittill( "dog_died" ); - } -} - -dog_abort() -{ - level.dog_abort = 1; - dogs = dog_manager_get_dogs(); - - foreach ( dog in dogs ) - dog notify( "abort" ); - - level notify( "dog_abort" ); -} - -dog_manager_abort() -{ - level endon( "dog_abort" ); - self wait_endon( 50, "disconnect", "joined_team", "joined_specators" ); - dog_abort(); -} - -dog_manager_game_ended() -{ - level endon( "dog_abort" ); - - level waittill( "game_ended" ); - - dog_abort(); -} - -dog_notify_level_on_death() -{ - self waittill( "death" ); - - level notify( "dog_died" ); -} - -dog_leave() -{ - self clearentitytarget(); - self.ignoreall = 1; - self.goalradius = 30; - self setgoalnode( self dog_get_exit_node() ); - self wait_endon( 20, "goal", "bad_path" ); - self delete(); -} - -dog_patrol() -{ - self endon( "death" ); -/# - self endon( "debug_patrol" ); -#/ - for (;;) - { - if ( level.dog_abort ) - { - self dog_leave(); - return; - } - - if ( isdefined( self.enemy ) ) - { - wait( randomintrange( 3, 5 ) ); - continue; - } - - nodes = []; - objectives = dog_patrol_near_objective(); - - for ( i = 0; i < objectives.size; i++ ) - { - objective = random( objectives ); - nodes = getnodesinradius( objective.origin, 256, 64, 512, "Path", 16 ); - - if ( nodes.size ) - break; - } - - if ( !nodes.size ) - { - player = self dog_patrol_near_enemy(); - - if ( isdefined( player ) ) - nodes = getnodesinradius( player.origin, 1024, 0, 128, "Path", 8 ); - } - - if ( !nodes.size && isdefined( self.script_owner ) ) - { - if ( isalive( self.script_owner ) && self.script_owner.sessionstate == "playing" ) - nodes = getnodesinradius( self.script_owner.origin, 512, 256, 512, "Path", 16 ); - } - - if ( !nodes.size ) - nodes = getnodesinradius( self.origin, 1024, 512, 512, "Path" ); - - if ( nodes.size ) - { - nodes = array_randomize( nodes ); - - foreach ( node in nodes ) - { - if ( isdefined( node.script_noteworthy ) ) - continue; - - if ( isdefined( node.dog_claimed ) && isalive( node.dog_claimed ) ) - continue; - - self setgoalnode( node ); - node.dog_claimed = self; - nodes = []; - event = self waittill_any_return( "goal", "bad_path", "enemy", "abort" ); - - if ( event == "goal" ) - wait_endon( randomintrange( 3, 5 ), "damage", "enemy", "abort" ); - - node.dog_claimed = undefined; - break; - } - } - - wait 0.5; - } -} - -dog_patrol_near_objective() -{ - if ( !isdefined( level.dog_objectives ) ) - { - level.dog_objectives = []; - level.dog_objective_next_update = 0; - } - - if ( level.gametype == "tdm" || level.gametype == "dm" ) - return level.dog_objectives; - - if ( gettime() >= level.dog_objective_next_update ) - { - level.dog_objectives = []; - - foreach ( target in level.dog_targets ) - { - ents = getentarray( target, "classname" ); - - foreach ( ent in ents ) - { - if ( level.gametype == "koth" ) - { - if ( isdefined( ent.targetname ) && ent.targetname == "radiotrigger" ) - level.dog_objectives[level.dog_objectives.size] = ent; - - continue; - } - - if ( level.gametype == "sd" ) - { - if ( isdefined( ent.targetname ) && ent.targetname == "bombzone" ) - level.dog_objectives[level.dog_objectives.size] = ent; - - continue; - } - - if ( !isdefined( ent.script_gameobjectname ) ) - continue; - - if ( !issubstr( ent.script_gameobjectname, level.gametype ) ) - continue; - - level.dog_objectives[level.dog_objectives.size] = ent; - } - } - - level.dog_objective_next_update = gettime() + randomintrange( 5000, 10000 ); - } - - return level.dog_objectives; -} - -dog_patrol_near_enemy() -{ - players = get_players(); - closest = undefined; - distsq = 99999999; - - foreach ( player in players ) - { - if ( !isdefined( player ) ) - continue; - - if ( !isalive( player ) ) - continue; - - if ( player.sessionstate != "playing" ) - continue; - - if ( isdefined( self.script_owner ) && player == self.script_owner ) - continue; - - if ( level.teambased ) - { - if ( player.team == self.aiteam ) - continue; - } - - if ( gettime() - player.lastfiretime > 3000 ) - continue; - - if ( !isdefined( closest ) ) - { - closest = player; - distsq = distancesquared( self.origin, player.origin ); - continue; - } - - d = distancesquared( self.origin, player.origin ); - - if ( d < distsq ) - { - closest = player; - distsq = d; - } - } - - return closest; -} - -dog_manager_get_dogs() -{ - dogs = getentarray( "attack_dog", "targetname" ); - return dogs; -} - -dog_owner_kills() -{ - if ( !isdefined( self.script_owner ) ) - return; - - self endon( "clear_owner" ); - self endon( "death" ); - self.script_owner endon( "disconnect" ); - - while ( true ) - { - self waittill( "killed", player ); - - self.script_owner notify( "dog_handler" ); - } -} - -dog_health_regen() -{ - self endon( "death" ); - interval = 0.5; - regen_interval = int( self.health / 5 * interval ); - regen_start = 2; - - for (;;) - { - self waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, idflags ); - - self trackattackerdamage( attacker, weaponname ); - self thread dog_health_regen_think( regen_start, interval, regen_interval ); - } -} - -trackattackerdamage( attacker, weapon ) -{ - if ( !isdefined( attacker ) || !isplayer( attacker ) || !isdefined( self.script_owner ) ) - return; - - if ( level.teambased && attacker.team == self.script_owner.team || attacker == self ) - return; - - if ( !isdefined( self.attackerdata ) || !isdefined( self.attackers ) ) - { - self.attackerdata = []; - self.attackers = []; - } - - if ( !isdefined( self.attackerdata[attacker.clientid] ) ) - { - self.attackerclientid[attacker.clientid] = spawnstruct(); - self.attackers[self.attackers.size] = attacker; - } -} - -resetattackerdamage() -{ - self.attackerdata = []; - self.attackers = []; -} - -dog_health_regen_think( delay, interval, regen_interval ) -{ - self endon( "death" ); - self endon( "damage" ); - wait( delay ); - - for ( step = 0; step <= 5; step += interval ) - { - if ( self.health >= 100 ) - break; - - self.health += regen_interval; - wait( interval ); - } - - self resetattackerdamage(); - self.health = 100; -} - -selfdefensechallenge() -{ - self waittill( "death", attacker ); - - if ( isdefined( attacker ) && isplayer( attacker ) ) - { - if ( isdefined( self.script_owner ) && self.script_owner == attacker ) - return; - - if ( level.teambased && isdefined( self.script_owner ) && self.script_owner.team == attacker.team ) - return; - - if ( isdefined( self.attackers ) ) - { - foreach ( player in self.attackers ) - { - if ( player != attacker ) - maps\mp\_scoreevents::processscoreevent( "killed_dog_assist", player ); - } - } - - attacker notify( "selfdefense_dog" ); - } -} - -dog_get_exit_node() -{ - exits = getnodearray( "exit", "script_noteworthy" ); - return getclosest( self.origin, exits ); -} - -flash_dogs( area ) -{ - self endon( "disconnect" ); - dogs = dog_manager_get_dogs(); - - foreach ( dog in dogs ) - { - if ( !isalive( dog ) ) - continue; - - if ( dog istouching( area ) ) - { - do_flash = 1; - - if ( isplayer( self ) ) - { - if ( level.teambased && dog.aiteam == self.team ) - do_flash = 0; - else if ( !level.teambased && isdefined( dog.script_owner ) && self == dog.script_owner ) - do_flash = 0; - } - - if ( isdefined( dog.lastflashed ) && dog.lastflashed + 1500 > gettime() ) - do_flash = 0; - - if ( do_flash ) - { - dog setflashbanged( 1, 500 ); - dog.lastflashed = gettime(); - } - } - } -} - -devgui_dog_think() -{ -/# - setdvar( "devgui_dog", "" ); - debug_patrol = 0; - - for (;;) - { - cmd = getdvar( "devgui_dog" ); - - switch ( cmd ) - { - case "spawn_friendly": - player = gethostplayer(); - devgui_dog_spawn( player.team ); - break; - case "spawn_enemy": - player = gethostplayer(); - - foreach ( team in level.teams ) - { - if ( team == player.team ) - continue; - - devgui_dog_spawn( team ); - } - - break; - case "delete_dogs": - level dog_abort(); - break; - case "dog_camera": - devgui_dog_camera(); - break; - case "spawn_crate": - devgui_crate_spawn(); - break; - case "delete_crates": - devgui_crate_delete(); - break; - case "show_spawns": - devgui_spawn_show(); - break; - case "show_exits": - devgui_exit_show(); - break; - case "debug_route": - devgui_debug_route(); - break; - } - - if ( cmd != "" ) - setdvar( "devgui_dog", "" ); - - wait 0.5; - } -#/ -} - -devgui_dog_spawn( team ) -{ -/# - player = gethostplayer(); - dog_spawner = getent( "dog_spawner", "targetname" ); - level.dog_abort = 0; - - if ( !isdefined( dog_spawner ) ) - { - iprintln( "No dog spawners found in map" ); - return; - } - - direction = player getplayerangles(); - direction_vec = anglestoforward( direction ); - eye = player geteye(); - scale = 8000; - direction_vec = ( direction_vec[0] * scale, direction_vec[1] * scale, direction_vec[2] * scale ); - trace = bullettrace( eye, eye + direction_vec, 0, undefined ); - nodes = getnodesinradius( trace["position"], 256, 0, 128, "Path", 8 ); - - if ( !nodes.size ) - { - iprintln( "No nodes found near crosshair position" ); - return; - } - - iprintln( "Spawning dog at your crosshair position" ); - node = getclosest( trace["position"], nodes ); - dog = dog_manager_spawn_dog( player, player.team, node, 5 ); - - if ( team != player.team ) - { - dog.aiteam = team; - dog clearentityowner(); - dog notify( "clear_owner" ); - } -#/ -} - -devgui_dog_camera() -{ -/# - player = gethostplayer(); - - if ( !isdefined( level.devgui_dog_camera ) ) - level.devgui_dog_camera = 0; - - dog = undefined; - dogs = dog_manager_get_dogs(); - - if ( dogs.size <= 0 ) - { - level.devgui_dog_camera = undefined; - player cameraactivate( 0 ); - return; - } - - for ( i = 0; i < dogs.size; i++ ) - { - dog = dogs[i]; - - if ( !isdefined( dog ) || !isalive( dog ) ) - { - dog = undefined; - continue; - } - - if ( !isdefined( dog.cam ) ) - { - forward = anglestoforward( dog.angles ); - dog.cam = spawn( "script_model", dog.origin + vectorscale( ( 0, 0, 1 ), 50.0 ) + forward * -100 ); - dog.cam setmodel( "tag_origin" ); - dog.cam linkto( dog ); - } - - if ( dog getentitynumber() <= level.devgui_dog_camera ) - { - dog = undefined; - continue; - } - - break; - } - - if ( isdefined( dog ) ) - { - level.devgui_dog_camera = dog getentitynumber(); - player camerasetposition( dog.cam ); - player camerasetlookat( dog ); - player cameraactivate( 1 ); - } - else - { - level.devgui_dog_camera = undefined; - player cameraactivate( 0 ); - } -#/ -} - -devgui_crate_spawn() -{ -/# - player = gethostplayer(); - direction = player getplayerangles(); - direction_vec = anglestoforward( direction ); - eye = player geteye(); - scale = 8000; - direction_vec = ( direction_vec[0] * scale, direction_vec[1] * scale, direction_vec[2] * scale ); - trace = bullettrace( eye, eye + direction_vec, 0, undefined ); - killcament = spawn( "script_model", player.origin ); - level thread maps\mp\killstreaks\_supplydrop::dropcrate( trace["position"] + vectorscale( ( 0, 0, 1 ), 25.0 ), direction, "supplydrop_mp", player, player.team, killcament ); -#/ -} - -devgui_crate_delete() -{ -/# - if ( !isdefined( level.devgui_crates ) ) - return; - - for ( i = 0; i < level.devgui_crates.size; i++ ) - level.devgui_crates[i] delete(); - - level.devgui_crates = []; -#/ -} - -devgui_spawn_show() -{ -/# - if ( !isdefined( level.dog_spawn_show ) ) - level.dog_spawn_show = 1; - else - level.dog_spawn_show = !level.dog_spawn_show; - - if ( !level.dog_spawn_show ) - { - level notify( "hide_dog_spawns" ); - return; - } - - spawns = getnodearray( "spawn", "script_noteworthy" ); - color = ( 0, 1, 0 ); - - for ( i = 0; i < spawns.size; i++ ) - maps\mp\gametypes\_dev::showonespawnpoint( spawns[i], color, "hide_dog_spawns", 32, "dog_spawn" ); -#/ -} - -devgui_exit_show() -{ -/# - if ( !isdefined( level.dog_exit_show ) ) - level.dog_exit_show = 1; - else - level.dog_exit_show = !level.dog_exit_show; - - if ( !level.dog_exit_show ) - { - level notify( "hide_dog_exits" ); - return; - } - - exits = getnodearray( "exit", "script_noteworthy" ); - color = ( 1, 0, 0 ); - - for ( i = 0; i < exits.size; i++ ) - maps\mp\gametypes\_dev::showonespawnpoint( exits[i], color, "hide_dog_exits", 32, "dog_exit" ); -#/ -} - -dog_debug_patrol( node1, node2 ) -{ -/# - self endon( "death" ); - self endon( "debug_patrol" ); - - for (;;) - { - self setgoalnode( node1 ); - self waittill_any( "goal", "bad_path" ); - wait 1; - self setgoalnode( node2 ); - self waittill_any( "goal", "bad_path" ); - wait 1; - } -#/ -} - -devgui_debug_route() -{ -/# - iprintln( "Choose nodes with 'A' or press 'B' to cancel" ); - nodes = maps\mp\gametypes\_dev::dev_get_node_pair(); - - if ( !isdefined( nodes ) ) - { - iprintln( "Route Debug Cancelled" ); - return; - } - - iprintln( "Sending dog to chosen nodes" ); - dogs = dog_manager_get_dogs(); - - if ( isdefined( dogs[0] ) ) - { - dogs[0] notify( "debug_patrol" ); - dogs[0] thread dog_debug_patrol( nodes[0], nodes[1] ); - } -#/ -} diff --git a/Multiplayer Core/patch_mp/codescripts/delete.gsc b/Multiplayer Core/patch_mp/codescripts/delete.gsc deleted file mode 100644 index 67cd584..0000000 --- a/Multiplayer Core/patch_mp/codescripts/delete.gsc +++ /dev/null @@ -1,26 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -main() -{ -/# - assert( isdefined( self ) ); -#/ - wait 0; - - if ( isdefined( self ) ) - { -/# - if ( isdefined( self.classname ) ) - { - if ( self.classname == "trigger_once" || self.classname == "trigger_radius" || self.classname == "trigger_multiple" ) - { - println( "" ); - println( "*** trigger debug: delete.gsc is deleting trigger with ent#: " + self getentitynumber() + " at origin: " + self.origin ); - println( "" ); - } - } -#/ - self delete(); - } -} diff --git a/Multiplayer Core/patch_mp/common_scripts/utility.gsc b/Multiplayer Core/patch_mp/common_scripts/utility.gsc deleted file mode 100644 index cea261c..0000000 --- a/Multiplayer Core/patch_mp/common_scripts/utility.gsc +++ /dev/null @@ -1,1739 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -init_session_mode_flags() -{ - level.gamemode_public_match = 0; - level.gamemode_private_match = 1; - level.gamemode_local_splitscreen = 2; - level.gamemode_wager_match = 3; - level.gamemode_theater = 5; - level.gamemode_league_match = 6; - level.gamemode_rts = 7; - level.language = getdvar( "language" ); -} - -empty( a, b, c, d, e ) -{ - -} - -add_to_array( array, item, allow_dupes ) -{ - if ( !isdefined( item ) ) - return array; - - if ( !isdefined( allow_dupes ) ) - allow_dupes = 1; - - if ( !isdefined( array ) ) - array[0] = item; - else if ( allow_dupes || !isinarray( array, item ) ) - array[array.size] = item; - - return array; -} - -array_copy( array ) -{ - a_copy = []; - - foreach ( elem in array ) - a_copy[a_copy.size] = elem; - - return a_copy; -} - -array_delete( array, is_struct ) -{ - foreach ( ent in array ) - { - if ( isdefined( is_struct ) && is_struct ) - { - ent structdelete(); - ent = undefined; - continue; - } - - if ( isdefined( ent ) ) - ent delete(); - } -} - -array_randomize( array ) -{ - for ( i = 0; i < array.size; i++ ) - { - j = randomint( array.size ); - temp = array[i]; - array[i] = array[j]; - array[j] = temp; - } - - return array; -} - -array_reverse( array ) -{ - array2 = []; - - for ( i = array.size - 1; i >= 0; i-- ) - array2[array2.size] = array[i]; - - return array2; -} - -array_exclude( array, arrayexclude ) -{ - newarray = array; - - if ( isarray( arrayexclude ) ) - { - for ( i = 0; i < arrayexclude.size; i++ ) - arrayremovevalue( newarray, arrayexclude[i] ); - } - else - arrayremovevalue( newarray, arrayexclude ); - - return newarray; -} - -array_notify( ents, notifier ) -{ - for ( i = 0; i < ents.size; i++ ) - ents[i] notify( notifier ); -} - -array_wait( array, msg, timeout ) -{ - keys = getarraykeys( array ); - structs = []; - - for ( i = 0; i < keys.size; i++ ) - { - key = keys[i]; - structs[key] = spawnstruct(); - structs[key]._array_wait = 1; - structs[key] thread array_waitlogic1( array[key], msg, timeout ); - } - - for ( i = 0; i < keys.size; i++ ) - { - key = keys[i]; - - if ( isdefined( array[key] ) && structs[key]._array_wait ) - structs[key] waittill( "_array_wait" ); - } -} - -array_wait_any( array, msg, timeout ) -{ - if ( array.size == 0 ) - return undefined; - - keys = getarraykeys( array ); - structs = []; - internal_msg = msg + "array_wait"; - - for ( i = 0; i < keys.size; i++ ) - { - key = keys[i]; - structs[key] = spawnstruct(); - structs[key]._array_wait = 1; - structs[key] thread array_waitlogic3( array[key], msg, internal_msg, timeout ); - } - - level waittill( internal_msg, ent ); - - return ent; -} - -array_waitlogic1( ent, msg, timeout ) -{ - self array_waitlogic2( ent, msg, timeout ); - self._array_wait = 0; - self notify( "_array_wait" ); -} - -array_waitlogic2( ent, msg, timeout ) -{ - ent endon( msg ); - ent endon( "death" ); - - if ( isdefined( timeout ) ) - wait( timeout ); - else - ent waittill( msg ); -} - -array_waitlogic3( ent, msg, internal_msg, timeout ) -{ - if ( msg != "death" ) - ent endon( "death" ); - - level endon( internal_msg ); - self array_waitlogic2( ent, msg, timeout ); - level notify( internal_msg, ent ); -} - -array_check_for_dupes( array, single ) -{ - for ( i = 0; i < array.size; i++ ) - { - if ( array[i] == single ) - return false; - } - - return true; -} - -array_swap( array, index1, index2 ) -{ -/# - assert( index1 < array.size, "index1 to swap out of range" ); -#/ -/# - assert( index2 < array.size, "index2 to swap out of range" ); -#/ - temp = array[index1]; - array[index1] = array[index2]; - array[index2] = temp; - return array; -} - -array_average( array ) -{ -/# - assert( isarray( array ) ); -#/ -/# - assert( array.size > 0 ); -#/ - total = 0; - - for ( i = 0; i < array.size; i++ ) - total += array[i]; - - return total / array.size; -} - -array_std_deviation( array, mean ) -{ -/# - assert( isarray( array ) ); -#/ -/# - assert( array.size > 0 ); -#/ - tmp = []; - - for ( i = 0; i < array.size; i++ ) - tmp[i] = ( array[i] - mean ) * ( array[i] - mean ); - - total = 0; - - for ( i = 0; i < tmp.size; i++ ) - total += tmp[i]; - - return sqrt( total / array.size ); -} - -random_normal_distribution( mean, std_deviation, lower_bound, upper_bound ) -{ - x1 = 0; - x2 = 0; - w = 1; - y1 = 0; - - while ( w >= 1 ) - { - x1 = 2 * randomfloatrange( 0, 1 ) - 1; - x2 = 2 * randomfloatrange( 0, 1 ) - 1; - w = x1 * x1 + x2 * x2; - } - - w = sqrt( -2.0 * log( w ) / w ); - y1 = x1 * w; - number = mean + y1 * std_deviation; - - if ( isdefined( lower_bound ) && number < lower_bound ) - number = lower_bound; - - if ( isdefined( upper_bound ) && number > upper_bound ) - number = upper_bound; - - return number; -} - -random( array ) -{ - keys = getarraykeys( array ); - return array[keys[randomint( keys.size )]]; -} - -get_players( str_team ) -{ - if ( isdefined( str_team ) ) - return getplayers( str_team ); - else - return getplayers(); -} - -is_prefix( msg, prefix ) -{ - if ( prefix.size > msg.size ) - return false; - - for ( i = 0; i < prefix.size; i++ ) - { - if ( msg[i] != prefix[i] ) - return false; - } - - return true; -} - -is_suffix( msg, suffix ) -{ - if ( suffix.size > msg.size ) - return false; - - for ( i = 0; i < suffix.size; i++ ) - { - if ( msg[msg.size - 1 - i] != suffix[suffix.size - 1 - i] ) - return false; - } - - return true; -} - -vector_compare( vec1, vec2 ) -{ - return abs( vec1[0] - vec2[0] ) < 0.001 && abs( vec1[1] - vec2[1] ) < 0.001 && abs( vec1[2] - vec2[2] ) < 0.001; -} - -draw_debug_line( start, end, timer ) -{ -/# - for ( i = 0; i < timer * 20; i++ ) - { - line( start, end, ( 1, 1, 0.5 ) ); - wait 0.05; - } -#/ -} - -waittillend( msg ) -{ - self waittillmatch( msg, "end" ); -} - -random_vector( max_length ) -{ - return ( randomfloatrange( -1 * max_length, max_length ), randomfloatrange( -1 * max_length, max_length ), randomfloatrange( -1 * max_length, max_length ) ); -} - -angle_dif( oldangle, newangle ) -{ - outvalue = ( oldangle - newangle ) % 360; - - if ( outvalue < 0 ) - outvalue += 360; - - if ( outvalue > 180 ) - outvalue = ( outvalue - 360 ) * -1; - - return outvalue; -} - -sign( x ) -{ - if ( x >= 0 ) - return 1; - - return -1; -} - -track( spot_to_track ) -{ - if ( isdefined( self.current_target ) ) - { - if ( spot_to_track == self.current_target ) - return; - } - - self.current_target = spot_to_track; -} - -clear_exception( type ) -{ -/# - assert( isdefined( self.exception[type] ) ); -#/ - self.exception[type] = anim.defaultexception; -} - -set_exception( type, func ) -{ -/# - assert( isdefined( self.exception[type] ) ); -#/ - self.exception[type] = func; -} - -set_all_exceptions( exceptionfunc ) -{ - keys = getarraykeys( self.exception ); - - for ( i = 0; i < keys.size; i++ ) - self.exception[keys[i]] = exceptionfunc; -} - -cointoss() -{ - return randomint( 100 ) >= 50; -} - -waittill_string( msg, ent ) -{ - if ( msg != "death" ) - self endon( "death" ); - - ent endon( "die" ); - - self waittill( msg ); - - ent notify( "returned", msg ); -} - -waittill_multiple( string1, string2, string3, string4, string5 ) -{ - self endon( "death" ); - ent = spawnstruct(); - ent.threads = 0; - - if ( isdefined( string1 ) ) - { - self thread waittill_string( string1, ent ); - ent.threads++; - } - - if ( isdefined( string2 ) ) - { - self thread waittill_string( string2, ent ); - ent.threads++; - } - - if ( isdefined( string3 ) ) - { - self thread waittill_string( string3, ent ); - ent.threads++; - } - - if ( isdefined( string4 ) ) - { - self thread waittill_string( string4, ent ); - ent.threads++; - } - - if ( isdefined( string5 ) ) - { - self thread waittill_string( string5, ent ); - ent.threads++; - } - - while ( ent.threads ) - { - ent waittill( "returned" ); - - ent.threads--; - } - - ent notify( "die" ); -} - -waittill_multiple_ents( ent1, string1, ent2, string2, ent3, string3, ent4, string4 ) -{ - self endon( "death" ); - ent = spawnstruct(); - ent.threads = 0; - - if ( isdefined( ent1 ) ) - { -/# - assert( isdefined( string1 ) ); -#/ - ent1 thread waittill_string( string1, ent ); - ent.threads++; - } - - if ( isdefined( ent2 ) ) - { -/# - assert( isdefined( string2 ) ); -#/ - ent2 thread waittill_string( string2, ent ); - ent.threads++; - } - - if ( isdefined( ent3 ) ) - { -/# - assert( isdefined( string3 ) ); -#/ - ent3 thread waittill_string( string3, ent ); - ent.threads++; - } - - if ( isdefined( ent4 ) ) - { -/# - assert( isdefined( string4 ) ); -#/ - ent4 thread waittill_string( string4, ent ); - ent.threads++; - } - - while ( ent.threads ) - { - ent waittill( "returned" ); - - ent.threads--; - } - - ent notify( "die" ); -} - -waittill_any_return( string1, string2, string3, string4, string5, string6, string7 ) -{ - if ( ( !isdefined( string1 ) || string1 != "death" ) && ( !isdefined( string2 ) || string2 != "death" ) && ( !isdefined( string3 ) || string3 != "death" ) && ( !isdefined( string4 ) || string4 != "death" ) && ( !isdefined( string5 ) || string5 != "death" ) && ( !isdefined( string6 ) || string6 != "death" ) && ( !isdefined( string7 ) || string7 != "death" ) ) - self endon( "death" ); - - ent = spawnstruct(); - - if ( isdefined( string1 ) ) - self thread waittill_string( string1, ent ); - - if ( isdefined( string2 ) ) - self thread waittill_string( string2, ent ); - - if ( isdefined( string3 ) ) - self thread waittill_string( string3, ent ); - - if ( isdefined( string4 ) ) - self thread waittill_string( string4, ent ); - - if ( isdefined( string5 ) ) - self thread waittill_string( string5, ent ); - - if ( isdefined( string6 ) ) - self thread waittill_string( string6, ent ); - - if ( isdefined( string7 ) ) - self thread waittill_string( string7, ent ); - - ent waittill( "returned", msg ); - - ent notify( "die" ); - return msg; -} - -waittill_any_array_return( a_notifies ) -{ - if ( isinarray( a_notifies, "death" ) ) - self endon( "death" ); - - s_tracker = spawnstruct(); - - foreach ( str_notify in a_notifies ) - { - if ( isdefined( str_notify ) ) - self thread waittill_string( str_notify, s_tracker ); - } - - s_tracker waittill( "returned", msg ); - - s_tracker notify( "die" ); - return msg; -} - -waittill_any( str_notify1, str_notify2, str_notify3, str_notify4, str_notify5 ) -{ -/# - assert( isdefined( str_notify1 ) ); -#/ - waittill_any_array( array( str_notify1, str_notify2, str_notify3, str_notify4, str_notify5 ) ); -} - -waittill_any_array( a_notifies ) -{ -/# - assert( isdefined( a_notifies[0] ), "At least the first element has to be defined for waittill_any_array." ); -#/ - for ( i = 1; i < a_notifies.size; i++ ) - { - if ( isdefined( a_notifies[i] ) ) - self endon( a_notifies[i] ); - } - - self waittill( a_notifies[0] ); -} - -waittill_any_timeout( n_timeout, string1, string2, string3, string4, string5 ) -{ - if ( ( !isdefined( string1 ) || string1 != "death" ) && ( !isdefined( string2 ) || string2 != "death" ) && ( !isdefined( string3 ) || string3 != "death" ) && ( !isdefined( string4 ) || string4 != "death" ) && ( !isdefined( string5 ) || string5 != "death" ) ) - self endon( "death" ); - - ent = spawnstruct(); - - if ( isdefined( string1 ) ) - self thread waittill_string( string1, ent ); - - if ( isdefined( string2 ) ) - self thread waittill_string( string2, ent ); - - if ( isdefined( string3 ) ) - self thread waittill_string( string3, ent ); - - if ( isdefined( string4 ) ) - self thread waittill_string( string4, ent ); - - if ( isdefined( string5 ) ) - self thread waittill_string( string5, ent ); - - ent thread _timeout( n_timeout ); - - ent waittill( "returned", msg ); - - ent notify( "die" ); - return msg; -} - -_timeout( delay ) -{ - self endon( "die" ); - wait( delay ); - self notify( "returned", "timeout" ); -} - -waittill_any_ents( ent1, string1, ent2, string2, ent3, string3, ent4, string4, ent5, string5, ent6, string6, ent7, string7 ) -{ -/# - assert( isdefined( ent1 ) ); -#/ -/# - assert( isdefined( string1 ) ); -#/ - if ( isdefined( ent2 ) && isdefined( string2 ) ) - ent2 endon( string2 ); - - if ( isdefined( ent3 ) && isdefined( string3 ) ) - ent3 endon( string3 ); - - if ( isdefined( ent4 ) && isdefined( string4 ) ) - ent4 endon( string4 ); - - if ( isdefined( ent5 ) && isdefined( string5 ) ) - ent5 endon( string5 ); - - if ( isdefined( ent6 ) && isdefined( string6 ) ) - ent6 endon( string6 ); - - if ( isdefined( ent7 ) && isdefined( string7 ) ) - ent7 endon( string7 ); - - ent1 waittill( string1 ); -} - -waittill_any_ents_two( ent1, string1, ent2, string2 ) -{ -/# - assert( isdefined( ent1 ) ); -#/ -/# - assert( isdefined( string1 ) ); -#/ - if ( isdefined( ent2 ) && isdefined( string2 ) ) - ent2 endon( string2 ); - - ent1 waittill( string1 ); -} - -waittill_flag_exists( msg ) -{ - while ( !flag_exists( msg ) ) - { - waittillframeend; - - if ( flag_exists( msg ) ) - break; - - wait 0.05; - } -} - -isflashed() -{ - if ( !isdefined( self.flashendtime ) ) - return 0; - - return gettime() < self.flashendtime; -} - -isstunned() -{ - if ( !isdefined( self.flashendtime ) ) - return 0; - - return gettime() < self.flashendtime; -} - -flag( flagname ) -{ -/# - assert( isdefined( flagname ), "Tried to check flag but the flag was not defined." ); -#/ -/# - assert( isdefined( level.flag[flagname] ), "Tried to check flag " + flagname + " but the flag was not initialized." ); -#/ - if ( !level.flag[flagname] ) - return false; - - return true; -} - -flag_delete( flagname ) -{ - if ( isdefined( level.flag[flagname] ) ) - level.flag[flagname] = undefined; - else - { -/# - println( "flag_delete() called on flag that does not exist: " + flagname ); -#/ - } -} - -flag_init( flagname, val, b_is_trigger ) -{ - if ( !isdefined( b_is_trigger ) ) - b_is_trigger = 0; - - if ( !isdefined( level.flag ) ) - level.flag = []; - - if ( !isdefined( level.sp_stat_tracking_func ) ) - level.sp_stat_tracking_func = ::empty; - - if ( !isdefined( level.first_frame ) ) - { -/# - assert( !isdefined( level.flag[flagname] ), "Attempt to reinitialize existing flag: " + flagname ); -#/ - } - - if ( isdefined( val ) && val ) - level.flag[flagname] = 1; - else - level.flag[flagname] = 0; - - if ( b_is_trigger ) - { - if ( !isdefined( level.trigger_flags ) ) - { - init_trigger_flags(); - level.trigger_flags[flagname] = []; - } - else if ( !isdefined( level.trigger_flags[flagname] ) ) - level.trigger_flags[flagname] = []; - } - - if ( is_suffix( flagname, "aa_" ) ) - thread [[ level.sp_stat_tracking_func ]]( flagname ); -} - -flag_set( flagname ) -{ -/# - assert( isdefined( level.flag[flagname] ), "Attempt to set a flag before calling flag_init: " + flagname ); -#/ - level.flag[flagname] = 1; - level notify( flagname ); - set_trigger_flag_permissions( flagname ); -} - -flag_set_for_time( n_time, str_flag ) -{ - level notify( "set_flag_for_time:" + str_flag ); - flag_set( str_flag ); - level endon( "set_flag_for_time:" + str_flag ); - wait( n_time ); - flag_clear( str_flag ); -} - -flag_toggle( flagname ) -{ - if ( flag( flagname ) ) - flag_clear( flagname ); - else - flag_set( flagname ); -} - -flag_wait( flagname ) -{ - level waittill_flag_exists( flagname ); - - while ( !level.flag[flagname] ) - level waittill( flagname ); -} - -flag_wait_any( str_flag1, str_flag2, str_flag3, str_flag4, str_flag5 ) -{ - level flag_wait_any_array( array( str_flag1, str_flag2, str_flag3, str_flag4, str_flag5 ) ); -} - -flag_wait_any_array( a_flags ) -{ - while ( true ) - { - for ( i = 0; i < a_flags.size; i++ ) - { - if ( flag( a_flags[i] ) ) - return a_flags[i]; - } - - level waittill_any_array( a_flags ); - } -} - -flag_clear( flagname ) -{ -/# - assert( isdefined( level.flag[flagname] ), "Attempt to set a flag before calling flag_init: " + flagname ); -#/ - if ( level.flag[flagname] ) - { - level.flag[flagname] = 0; - level notify( flagname ); - set_trigger_flag_permissions( flagname ); - } -} - -flag_waitopen( flagname ) -{ - while ( level.flag[flagname] ) - level waittill( flagname ); -} - -flag_waitopen_array( a_flags ) -{ - foreach ( str_flag in a_flags ) - { - if ( flag( str_flag ) ) - { - flag_waitopen( str_flag ); - continue; - } - } -} - -flag_exists( flagname ) -{ - if ( self == level ) - { - if ( !isdefined( level.flag ) ) - return false; - - if ( isdefined( level.flag[flagname] ) ) - return true; - } - else - { - if ( !isdefined( self.ent_flag ) ) - return false; - - if ( isdefined( self.ent_flag[flagname] ) ) - return true; - } - - return false; -} - -script_gen_dump_addline( string, signature ) -{ - if ( !isdefined( string ) ) - string = "nowrite"; - - if ( !isdefined( level._loadstarted ) ) - { - if ( !isdefined( level.script_gen_dump_preload ) ) - level.script_gen_dump_preload = []; - - struct = spawnstruct(); - struct.string = string; - struct.signature = signature; - level.script_gen_dump_preload[level.script_gen_dump_preload.size] = struct; - return; - } - - if ( !isdefined( level.script_gen_dump[signature] ) ) - level.script_gen_dump_reasons[level.script_gen_dump_reasons.size] = "Added: " + string; - - level.script_gen_dump[signature] = string; - level.script_gen_dump2[signature] = string; -} - -array_func( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ) -{ - if ( !isdefined( entities ) ) - return; - - if ( isarray( entities ) ) - { - if ( entities.size ) - { - keys = getarraykeys( entities ); - - for ( i = 0; i < keys.size; i++ ) - single_func( entities[keys[i]], func, arg1, arg2, arg3, arg4, arg5, arg6 ); - } - } - else - single_func( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ); -} - -single_func( entity, func, arg1, arg2, arg3, arg4, arg5, arg6 ) -{ - if ( !isdefined( entity ) ) - entity = level; - - if ( isdefined( arg6 ) ) - return entity [[ func ]]( arg1, arg2, arg3, arg4, arg5, arg6 ); - else if ( isdefined( arg5 ) ) - return entity [[ func ]]( arg1, arg2, arg3, arg4, arg5 ); - else if ( isdefined( arg4 ) ) - return entity [[ func ]]( arg1, arg2, arg3, arg4 ); - else if ( isdefined( arg3 ) ) - return entity [[ func ]]( arg1, arg2, arg3 ); - else if ( isdefined( arg2 ) ) - return entity [[ func ]]( arg1, arg2 ); - else if ( isdefined( arg1 ) ) - return entity [[ func ]]( arg1 ); - else - return entity [[ func ]](); -} - -new_func( func, arg1, arg2, arg3, arg4, arg5, arg6 ) -{ - s_func = spawnstruct(); - s_func.func = func; - s_func.arg1 = arg1; - s_func.arg2 = arg2; - s_func.arg3 = arg3; - s_func.arg4 = arg4; - s_func.arg5 = arg5; - s_func.arg6 = arg6; - return s_func; -} - -call_func( s_func ) -{ - return single_func( self, s_func.func, s_func.arg1, s_func.arg2, s_func.arg3, s_func.arg4, s_func.arg5, s_func.arg6 ); -} - -array_thread( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ) -{ -/# - assert( isdefined( entities ), "Undefined entity array passed to common_scriptsutility::array_thread" ); -#/ -/# - assert( isdefined( func ), "Undefined function passed to common_scriptsutility::array_thread" ); -#/ - if ( isarray( entities ) ) - { - if ( isdefined( arg6 ) ) - { - foreach ( ent in entities ) - ent thread [[ func ]]( arg1, arg2, arg3, arg4, arg5, arg6 ); - } - else if ( isdefined( arg5 ) ) - { - foreach ( ent in entities ) - ent thread [[ func ]]( arg1, arg2, arg3, arg4, arg5 ); - } - else if ( isdefined( arg4 ) ) - { - foreach ( ent in entities ) - ent thread [[ func ]]( arg1, arg2, arg3, arg4 ); - } - else if ( isdefined( arg3 ) ) - { - foreach ( ent in entities ) - ent thread [[ func ]]( arg1, arg2, arg3 ); - } - else if ( isdefined( arg2 ) ) - { - foreach ( ent in entities ) - ent thread [[ func ]]( arg1, arg2 ); - } - else if ( isdefined( arg1 ) ) - { - foreach ( ent in entities ) - ent thread [[ func ]]( arg1 ); - } - else - { - foreach ( ent in entities ) - ent thread [[ func ]](); - } - } - else - single_thread( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ); -} - -array_ent_thread( entities, func, arg1, arg2, arg3, arg4, arg5 ) -{ -/# - assert( isdefined( entities ), "Undefined entity array passed to common_scriptsutility::array_ent_thread" ); -#/ -/# - assert( isdefined( func ), "Undefined function passed to common_scriptsutility::array_ent_thread" ); -#/ - if ( isarray( entities ) ) - { - if ( entities.size ) - { - keys = getarraykeys( entities ); - - for ( i = 0; i < keys.size; i++ ) - single_thread( self, func, entities[keys[i]], arg1, arg2, arg3, arg4, arg5 ); - } - } - else - single_thread( self, func, entities, arg1, arg2, arg3, arg4, arg5 ); -} - -single_thread( entity, func, arg1, arg2, arg3, arg4, arg5, arg6 ) -{ -/# - assert( isdefined( entity ), "Undefined entity passed to common_scriptsutility::single_thread()" ); -#/ - if ( isdefined( arg6 ) ) - entity thread [[ func ]]( arg1, arg2, arg3, arg4, arg5, arg6 ); - else if ( isdefined( arg5 ) ) - entity thread [[ func ]]( arg1, arg2, arg3, arg4, arg5 ); - else if ( isdefined( arg4 ) ) - entity thread [[ func ]]( arg1, arg2, arg3, arg4 ); - else if ( isdefined( arg3 ) ) - entity thread [[ func ]]( arg1, arg2, arg3 ); - else if ( isdefined( arg2 ) ) - entity thread [[ func ]]( arg1, arg2 ); - else if ( isdefined( arg1 ) ) - entity thread [[ func ]]( arg1 ); - else - entity thread [[ func ]](); -} - -remove_undefined_from_array( array ) -{ - newarray = []; - - for ( i = 0; i < array.size; i++ ) - { - if ( !isdefined( array[i] ) ) - continue; - - newarray[newarray.size] = array[i]; - } - - return newarray; -} - -trigger_on( name, type ) -{ - if ( isdefined( name ) ) - { - if ( !isdefined( type ) ) - type = "targetname"; - - ents = getentarray( name, type ); - array_thread( ents, ::trigger_on_proc ); - } - else - self trigger_on_proc(); -} - -trigger_on_proc() -{ - if ( isdefined( self.realorigin ) ) - self.origin = self.realorigin; - - self.trigger_off = undefined; -} - -trigger_off( name, type ) -{ - if ( isdefined( name ) ) - { - if ( !isdefined( type ) ) - type = "targetname"; - - ents = getentarray( name, type ); - array_thread( ents, ::trigger_off_proc ); - } - else - self trigger_off_proc(); -} - -trigger_off_proc() -{ - if ( !isdefined( self.trigger_off ) || !self.trigger_off ) - { - self.realorigin = self.origin; - self.origin += vectorscale( ( 0, 0, -1 ), 10000.0 ); - self.trigger_off = 1; - } -} - -trigger_wait( str_name, str_key, e_entity ) -{ - if ( !isdefined( str_key ) ) - str_key = "targetname"; - - if ( isdefined( str_name ) ) - { - triggers = getentarray( str_name, str_key ); -/# - assert( triggers.size > 0, "trigger not found: " + str_name + " key: " + str_key ); -#/ - if ( triggers.size == 1 ) - { - trigger_hit = triggers[0]; - trigger_hit _trigger_wait( e_entity ); - } - else - { - s_tracker = spawnstruct(); - array_thread( triggers, ::_trigger_wait_think, s_tracker, e_entity ); - - s_tracker waittill( "trigger", e_other, trigger_hit ); - - trigger_hit.who = e_other; - } - - level notify( str_name, trigger_hit.who ); - return trigger_hit; - } - else - return _trigger_wait( e_entity ); -} - -_trigger_wait( e_entity ) -{ - do - { - if ( is_look_trigger( self ) ) - { - self waittill( "trigger_look", e_other ); - - continue; - } - - self waittill( "trigger", e_other ); - } - while ( isdefined( e_entity ) && e_other != e_entity ); - - self.who = e_other; - return self; -} - -_trigger_wait_think( s_tracker, e_entity ) -{ - self endon( "death" ); - s_tracker endon( "trigger" ); - e_other = _trigger_wait( e_entity ); - s_tracker notify( "trigger", e_other, self ); -} - -trigger_use( str_name, str_key, ent, b_assert ) -{ - if ( !isdefined( str_key ) ) - str_key = "targetname"; - - if ( !isdefined( b_assert ) ) - b_assert = 1; - - if ( !isdefined( ent ) ) - ent = get_players()[0]; - - if ( isdefined( str_name ) ) - { - e_trig = getent( str_name, str_key ); - - if ( !isdefined( e_trig ) ) - { - if ( b_assert ) - { -/# - assertmsg( "trigger not found: " + str_name + " key: " + str_key ); -#/ - } - - return; - } - } - else - { - e_trig = self; - str_name = self.targetname; - } - - e_trig useby( ent ); - level notify( str_name, ent ); - - if ( is_look_trigger( e_trig ) ) - e_trig notify( "trigger_look" ); - - return e_trig; -} - -set_trigger_flag_permissions( msg ) -{ - if ( !isdefined( level.trigger_flags ) || !isdefined( level.trigger_flags[msg] ) ) - return; - - level.trigger_flags[msg] = remove_undefined_from_array( level.trigger_flags[msg] ); - array_thread( level.trigger_flags[msg], ::update_trigger_based_on_flags ); -} - -update_trigger_based_on_flags() -{ - true_on = 1; - - if ( isdefined( self.script_flag_true ) ) - { - true_on = 0; - tokens = create_flags_and_return_tokens( self.script_flag_true ); - - for ( i = 0; i < tokens.size; i++ ) - { - if ( flag( tokens[i] ) ) - { - true_on = 1; - break; - } - } - } - - false_on = 1; - - if ( isdefined( self.script_flag_false ) ) - { - tokens = create_flags_and_return_tokens( self.script_flag_false ); - - for ( i = 0; i < tokens.size; i++ ) - { - if ( flag( tokens[i] ) ) - { - false_on = 0; - break; - } - } - } - - [[ level.trigger_func[true_on && false_on] ]](); -} - -create_flags_and_return_tokens( flags ) -{ - tokens = strtok( flags, " " ); - - for ( i = 0; i < tokens.size; i++ ) - { - if ( !isdefined( level.flag[tokens[i]] ) ) - flag_init( tokens[i], undefined, 1 ); - } - - return tokens; -} - -init_trigger_flags() -{ - level.trigger_flags = []; - level.trigger_func[1] = ::trigger_on; - level.trigger_func[0] = ::trigger_off; -} - -is_look_trigger( trig ) -{ - return isdefined( trig ) ? trig has_spawnflag( 256 ) && !( !isdefined( trig.classname ) && !isdefined( "trigger_damage" ) || isdefined( trig.classname ) && isdefined( "trigger_damage" ) && trig.classname == "trigger_damage" ) : 0; -} - -is_trigger_once( trig ) -{ - return isdefined( trig ) ? trig has_spawnflag( 1024 ) || !isdefined( self.classname ) && !isdefined( "trigger_once" ) || isdefined( self.classname ) && isdefined( "trigger_once" ) && self.classname == "trigger_once" : 0; -} - -getstruct( name, type ) -{ - if ( !isdefined( type ) ) - type = "targetname"; -/# - assert( isdefined( level.struct_class_names ), "Tried to getstruct before the structs were init" ); -#/ - array = level.struct_class_names[type][name]; - - if ( !isdefined( array ) ) - return undefined; - - if ( array.size > 1 ) - { -/# - assertmsg( "getstruct used for more than one struct of type " + type + " called " + name + "." ); -#/ - return undefined; - } - - return array[0]; -} - -getstructarray( name, type ) -{ - if ( !isdefined( type ) ) - type = "targetname"; -/# - assert( isdefined( level.struct_class_names ), "Tried to getstruct before the structs were init" ); -#/ - array = level.struct_class_names[type][name]; - - if ( !isdefined( array ) ) - return []; - - return array; -} - -structdelete() -{ - if ( isdefined( self.target ) && isdefined( level.struct_class_names["target"][self.target] ) ) - level.struct_class_names["target"][self.target] = undefined; - - if ( isdefined( self.targetname ) && isdefined( level.struct_class_names["targetname"][self.targetname] ) ) - level.struct_class_names["targetname"][self.targetname] = undefined; - - if ( isdefined( self.script_noteworthy ) && isdefined( level.struct_class_names["script_noteworthy"][self.script_noteworthy] ) ) - level.struct_class_names["script_noteworthy"][self.script_noteworthy] = undefined; - - if ( isdefined( self.script_linkname ) && isdefined( level.struct_class_names["script_linkname"][self.script_linkname] ) ) - level.struct_class_names["script_linkname"][self.script_linkname] = undefined; -} - -struct_class_init() -{ -/# - assert( !isdefined( level.struct_class_names ), "level.struct_class_names is being initialized in the wrong place! It shouldn't be initialized yet." ); -#/ - level.struct_class_names = []; - level.struct_class_names["target"] = []; - level.struct_class_names["targetname"] = []; - level.struct_class_names["script_noteworthy"] = []; - level.struct_class_names["script_linkname"] = []; - level.struct_class_names["script_unitrigger_type"] = []; - - foreach ( s_struct in level.struct ) - { - if ( isdefined( s_struct.targetname ) ) - { - if ( !isdefined( level.struct_class_names["targetname"][s_struct.targetname] ) ) - level.struct_class_names["targetname"][s_struct.targetname] = []; - - size = level.struct_class_names["targetname"][s_struct.targetname].size; - level.struct_class_names["targetname"][s_struct.targetname][size] = s_struct; - } - - if ( isdefined( s_struct.target ) ) - { - if ( !isdefined( level.struct_class_names["target"][s_struct.target] ) ) - level.struct_class_names["target"][s_struct.target] = []; - - size = level.struct_class_names["target"][s_struct.target].size; - level.struct_class_names["target"][s_struct.target][size] = s_struct; - } - - if ( isdefined( s_struct.script_noteworthy ) ) - { - if ( !isdefined( level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy] ) ) - level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy] = []; - - size = level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy].size; - level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy][size] = s_struct; - } - - if ( isdefined( s_struct.script_linkname ) ) - { -/# - assert( !isdefined( level.struct_class_names["script_linkname"][s_struct.script_linkname] ), "Two structs have the same linkname" ); -#/ - level.struct_class_names["script_linkname"][s_struct.script_linkname][0] = s_struct; - } - - if ( isdefined( s_struct.script_unitrigger_type ) ) - { - if ( !isdefined( level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type] ) ) - level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type] = []; - - size = level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type].size; - level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type][size] = s_struct; - } - } -} - -fileprint_start( file ) -{ -/# - filename = file; - file = openfile( filename, "write" ); - level.fileprint = file; - level.fileprintlinecount = 0; - level.fileprint_filename = filename; -#/ -} - -fileprint_map_start( file ) -{ -/# - file = "map_source/" + file + ".map"; - fileprint_start( file ); - level.fileprint_mapentcount = 0; - fileprint_map_header( 1 ); -#/ -} - -fileprint_chk( file, str ) -{ -/# - level.fileprintlinecount++; - - if ( level.fileprintlinecount > 400 ) - { - wait 0.05; - level.fileprintlinecount++; - level.fileprintlinecount = 0; - } - - fprintln( file, str ); -#/ -} - -fileprint_map_header( binclude_blank_worldspawn ) -{ - if ( !isdefined( binclude_blank_worldspawn ) ) - binclude_blank_worldspawn = 0; -/# - assert( isdefined( level.fileprint ) ); -#/ -/# - fileprint_chk( level.fileprint, "iwmap 4" ); - fileprint_chk( level.fileprint, "\"000_Global\" flags active" ); - fileprint_chk( level.fileprint, "\"The Map\" flags" ); - - if ( !binclude_blank_worldspawn ) - return; - - fileprint_map_entity_start(); - fileprint_map_keypairprint( "classname", "worldspawn" ); - fileprint_map_entity_end(); -#/ -} - -fileprint_map_keypairprint( key1, key2 ) -{ -/# - assert( isdefined( level.fileprint ) ); - fileprint_chk( level.fileprint, "\"" + key1 + "\" \"" + key2 + "\"" ); -#/ -} - -fileprint_map_entity_start() -{ -/# - assert( !isdefined( level.fileprint_entitystart ) ); - level.fileprint_entitystart = 1; - assert( isdefined( level.fileprint ) ); - fileprint_chk( level.fileprint, "// entity " + level.fileprint_mapentcount ); - fileprint_chk( level.fileprint, "{" ); - level.fileprint_mapentcount++; -#/ -} - -fileprint_map_entity_end() -{ -/# - assert( isdefined( level.fileprint_entitystart ) ); - assert( isdefined( level.fileprint ) ); - level.fileprint_entitystart = undefined; - fileprint_chk( level.fileprint, "}" ); -#/ -} - -fileprint_end() -{ -/# - assert( !isdefined( level.fileprint_entitystart ) ); - saved = closefile( level.fileprint ); - - if ( saved != 1 ) - { - println( "-----------------------------------" ); - println( " " ); - println( "file write failure" ); - println( "file with name: " + level.fileprint_filename ); - println( "make sure you checkout the file you are trying to save" ); - println( "note: USE P4 Search to find the file and check that one out" ); - println( " Do not checkin files in from the xenonoutput folder, " ); - println( " this is junctioned to the proper directory where you need to go" ); - println( "junctions looks like this" ); - println( " " ); - println( "..\xenonOutput\scriptdata\createfx ..\share\raw\maps\createfx" ); - println( "..\xenonOutput\scriptdata\createart ..\share\raw\maps\createart" ); - println( "..\xenonOutput\scriptdata\vision ..\share\raw\vision" ); - println( "..\xenonOutput\scriptdata\scriptgen ..\share\raw\maps\scriptgen" ); - println( "..\xenonOutput\scriptdata\zone_source ..\xenon\zone_source" ); - println( "..\xenonOutput\accuracy ..\share\raw\accuracy" ); - println( "..\xenonOutput\scriptdata\map_source ..\map_source\xenon_export" ); - println( " " ); - println( "-----------------------------------" ); - println( "File not saved( see console.log for info ) " ); - } - - level.fileprint = undefined; - level.fileprint_filename = undefined; -#/ -} - -fileprint_radiant_vec( vector ) -{ -/# - string = "" + vector[0] + " " + vector[1] + " " + vector[2] + ""; - return string; -#/ -} - -is_mature() -{ - if ( level.onlinegame ) - return 1; - - return getlocalprofileint( "cg_mature" ); -} - -is_german_build() -{ - if ( level.language == "german" ) - return true; - - return false; -} - -is_gib_restricted_build() -{ - if ( getdvar( "language" ) == "japanese" ) - return true; - - return false; -} - -is_true( check ) -{ - return isdefined( check ) && check; -} - -is_false( check ) -{ - return isdefined( check ) && !check; -} - -has_spawnflag( spawnflags ) -{ - if ( isdefined( self.spawnflags ) ) - return ( self.spawnflags & spawnflags ) == spawnflags; - - return 0; -} - -clamp( val, val_min, val_max ) -{ - if ( val < val_min ) - val = val_min; - else if ( val > val_max ) - val = val_max; - - return val; -} - -linear_map( num, min_a, max_a, min_b, max_b ) -{ - return clamp( ( num - min_a ) / ( max_a - min_a ) * ( max_b - min_b ) + min_b, min_b, max_b ); -} - -lag( desired, curr, k, dt ) -{ - r = 0.0; - - if ( k * dt >= 1.0 || k <= 0.0 ) - r = desired; - else - { - err = desired - curr; - r = curr + k * err * dt; - } - - return r; -} - -death_notify_wrapper( attacker, damagetype ) -{ - level notify( "face", "death", self ); - self notify( "death", attacker, damagetype ); -} - -damage_notify_wrapper( damage, attacker, direction_vec, point, type, modelname, tagname, partname, idflags ) -{ - level notify( "face", "damage", self ); - self notify( "damage", damage, attacker, direction_vec, point, type, modelname, tagname, partname, idflags ); -} - -explode_notify_wrapper() -{ - level notify( "face", "explode", self ); - self notify( "explode" ); -} - -alert_notify_wrapper() -{ - level notify( "face", "alert", self ); - self notify( "alert" ); -} - -shoot_notify_wrapper() -{ - level notify( "face", "shoot", self ); - self notify( "shoot" ); -} - -melee_notify_wrapper() -{ - level notify( "face", "melee", self ); - self notify( "melee" ); -} - -isusabilityenabled() -{ - return !self.disabledusability; -} - -_disableusability() -{ - self.disabledusability++; - self disableusability(); -} - -_enableusability() -{ - self.disabledusability--; -/# - assert( self.disabledusability >= 0 ); -#/ - if ( !self.disabledusability ) - self enableusability(); -} - -resetusability() -{ - self.disabledusability = 0; - self enableusability(); -} - -_disableweapon() -{ - if ( !isdefined( self.disabledweapon ) ) - self.disabledweapon = 0; - - self.disabledweapon++; - self disableweapons(); -} - -_enableweapon() -{ - self.disabledweapon--; -/# - assert( self.disabledweapon >= 0 ); -#/ - if ( !self.disabledweapon ) - self enableweapons(); -} - -isweaponenabled() -{ - return !self.disabledweapon; -} - -delay_thread( timer, func, param1, param2, param3, param4, param5, param6 ) -{ - self thread _delay_thread_proc( func, timer, param1, param2, param3, param4, param5, param6 ); -} - -_delay_thread_proc( func, timer, param1, param2, param3, param4, param5, param6 ) -{ - self endon( "death" ); - self endon( "disconnect" ); - wait( timer ); - single_thread( self, func, param1, param2, param3, param4, param5, param6 ); -} - -delay_notify( str_notify, n_delay, str_endon ) -{ -/# - assert( isdefined( str_notify ) ); -#/ -/# - assert( isdefined( n_delay ) ); -#/ - self thread _delay_notify_proc( str_notify, n_delay, str_endon ); -} - -_delay_notify_proc( str_notify, n_delay, str_endon ) -{ - self endon( "death" ); - - if ( isdefined( str_endon ) ) - self endon( str_endon ); - - if ( n_delay > 0 ) - wait( n_delay ); - - self notify( str_notify ); -} - -notify_delay_with_ender( snotifystring, fdelay, ender ) -{ - if ( isdefined( ender ) ) - level endon( ender ); -/# - assert( isdefined( self ) ); -#/ -/# - assert( isdefined( snotifystring ) ); -#/ -/# - assert( isdefined( fdelay ) ); -#/ - self endon( "death" ); - - if ( fdelay > 0 ) - wait( fdelay ); - - if ( !isdefined( self ) ) - return; - - self notify( snotifystring ); -} diff --git a/Multiplayer Core/patch_mp/maps/mp/_art.gsc b/Multiplayer Core/patch_mp/maps/mp/_art.gsc deleted file mode 100644 index 050b7f2..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/_art.gsc +++ /dev/null @@ -1,447 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include common_scripts\utility; -#include maps\mp\_utility; - -main() -{ -/# - if ( getdvar( "scr_art_tweak" ) == "" || getdvar( "scr_art_tweak" ) == "0" ) - setdvar( "scr_art_tweak", 0 ); - - if ( getdvar( "scr_dof_enable" ) == "" ) - setdvar( "scr_dof_enable", "1" ); - - if ( getdvar( "scr_cinematic_autofocus" ) == "" ) - setdvar( "scr_cinematic_autofocus", "1" ); - - if ( getdvar( "scr_art_visionfile" ) == "" && isdefined( level.script ) ) - setdvar( "scr_art_visionfile", level.script ); - - if ( getdvar( "debug_reflection" ) == "" ) - setdvar( "debug_reflection", "0" ); - - if ( getdvar( "debug_reflection_matte" ) == "" ) - setdvar( "debug_reflection_matte", "0" ); - - if ( getdvar( "debug_color_pallete" ) == "" ) - setdvar( "debug_color_pallete", "0" ); - - precachemodel( "test_sphere_lambert" ); - precachemodel( "test_macbeth_chart" ); - precachemodel( "test_macbeth_chart_unlit" ); - precachemodel( "test_sphere_silver" ); - level thread debug_reflection(); - level thread debug_reflection_matte(); - level thread debug_color_pallete(); -#/ - if ( !isdefined( level.dofdefault ) ) - { - level.dofdefault["nearStart"] = 0; - level.dofdefault["nearEnd"] = 1; - level.dofdefault["farStart"] = 8000; - level.dofdefault["farEnd"] = 10000; - level.dofdefault["nearBlur"] = 6; - level.dofdefault["farBlur"] = 0; - } - - level.curdof = ( level.dofdefault["farStart"] - level.dofdefault["nearEnd"] ) / 2; -/# - thread tweakart(); -#/ - if ( !isdefined( level.script ) ) - level.script = tolower( getdvar( "mapname" ) ); -} - -artfxprintln( file, string ) -{ -/# - if ( file == -1 ) - return; - - fprintln( file, string ); -#/ -} - -strtok_loc( string, par1 ) -{ - stringlist = []; - indexstring = ""; - - for ( i = 0; i < string.size; i++ ) - { - if ( string[i] == " " ) - { - stringlist[stringlist.size] = indexstring; - indexstring = ""; - continue; - } - - indexstring += string[i]; - } - - if ( indexstring.size ) - stringlist[stringlist.size] = indexstring; - - return stringlist; -} - -setfogsliders() -{ - fogall = strtok_loc( getdvar( "g_fogColorReadOnly" ), " " ); - red = fogall[0]; - green = fogall[1]; - blue = fogall[2]; - halfplane = getdvar( "g_fogHalfDistReadOnly" ); - nearplane = getdvar( "g_fogStartDistReadOnly" ); - - if ( !isdefined( red ) || !isdefined( green ) || !isdefined( blue ) || !isdefined( halfplane ) ) - { - red = 1; - green = 1; - blue = 1; - halfplane = 10000001; - nearplane = 10000000; - } - - setdvar( "scr_fog_exp_halfplane", halfplane ); - setdvar( "scr_fog_nearplane", nearplane ); - setdvar( "scr_fog_color", red + " " + green + " " + blue ); -} - -tweakart() -{ -/# - if ( !isdefined( level.tweakfile ) ) - level.tweakfile = 0; - - if ( getdvar( "scr_fog_baseheight" ) == "" ) - { - setdvar( "scr_fog_exp_halfplane", "500" ); - setdvar( "scr_fog_exp_halfheight", "500" ); - setdvar( "scr_fog_nearplane", "0" ); - setdvar( "scr_fog_baseheight", "0" ); - } - - setdvar( "scr_fog_fraction", "1.0" ); - setdvar( "scr_art_dump", "0" ); - setdvar( "scr_art_sun_fog_dir_set", "0" ); - setdvar( "scr_dof_nearStart", level.dofdefault["nearStart"] ); - setdvar( "scr_dof_nearEnd", level.dofdefault["nearEnd"] ); - setdvar( "scr_dof_farStart", level.dofdefault["farStart"] ); - setdvar( "scr_dof_farEnd", level.dofdefault["farEnd"] ); - setdvar( "scr_dof_nearBlur", level.dofdefault["nearBlur"] ); - setdvar( "scr_dof_farBlur", level.dofdefault["farBlur"] ); - file = undefined; - filename = undefined; - tweak_toggle = 1; - - for (;;) - { - while ( getdvarint( "scr_art_tweak" ) == 0 ) - { - tweak_toggle = 1; - wait 0.05; - } - - if ( tweak_toggle ) - { - tweak_toggle = 0; - fogsettings = getfogsettings(); - setdvar( "scr_fog_nearplane", fogsettings[0] ); - setdvar( "scr_fog_exp_halfplane", fogsettings[1] ); - setdvar( "scr_fog_exp_halfheight", fogsettings[3] ); - setdvar( "scr_fog_baseheight", fogsettings[2] ); - setdvar( "scr_fog_color", fogsettings[4] + " " + fogsettings[5] + " " + fogsettings[6] ); - setdvar( "scr_fog_color_scale", fogsettings[7] ); - setdvar( "scr_sun_fog_color", fogsettings[8] + " " + fogsettings[9] + " " + fogsettings[10] ); - level.fogsundir = []; - level.fogsundir[0] = fogsettings[11]; - level.fogsundir[1] = fogsettings[12]; - level.fogsundir[2] = fogsettings[13]; - setdvar( "scr_sun_fog_start_angle", fogsettings[14] ); - setdvar( "scr_sun_fog_end_angle", fogsettings[15] ); - setdvar( "scr_fog_max_opacity", fogsettings[16] ); - } - - level.fogexphalfplane = getdvarfloat( "scr_fog_exp_halfplane" ); - level.fogexphalfheight = getdvarfloat( "scr_fog_exp_halfheight" ); - level.fognearplane = getdvarfloat( "scr_fog_nearplane" ); - level.fogbaseheight = getdvarfloat( "scr_fog_baseheight" ); - level.fogcolorred = getdvarcolorred( "scr_fog_color" ); - level.fogcolorgreen = getdvarcolorgreen( "scr_fog_color" ); - level.fogcolorblue = getdvarcolorblue( "scr_fog_color" ); - level.fogcolorscale = getdvarfloat( "scr_fog_color_scale" ); - level.sunfogcolorred = getdvarcolorred( "scr_sun_fog_color" ); - level.sunfogcolorgreen = getdvarcolorgreen( "scr_sun_fog_color" ); - level.sunfogcolorblue = getdvarcolorblue( "scr_sun_fog_color" ); - level.sunstartangle = getdvarfloat( "scr_sun_fog_start_angle" ); - level.sunendangle = getdvarfloat( "scr_sun_fog_end_angle" ); - level.fogmaxopacity = getdvarfloat( "scr_fog_max_opacity" ); - - if ( getdvarint( "scr_art_sun_fog_dir_set" ) ) - { - setdvar( "scr_art_sun_fog_dir_set", "0" ); - println( "Setting sun fog direction to facing of player" ); - players = get_players(); - dir = vectornormalize( anglestoforward( players[0] getplayerangles() ) ); - level.fogsundir = []; - level.fogsundir[0] = dir[0]; - level.fogsundir[1] = dir[1]; - level.fogsundir[2] = dir[2]; - } - - fovslidercheck(); - dumpsettings(); - - if ( !getdvarint( _hash_DBBD8F3B ) ) - { - if ( !isdefined( level.fogsundir ) ) - { - level.fogsundir = []; - level.fogsundir[0] = 1; - level.fogsundir[1] = 0; - level.fogsundir[2] = 0; - } - - setvolfog( level.fognearplane, level.fogexphalfplane, level.fogexphalfheight, level.fogbaseheight, level.fogcolorred, level.fogcolorgreen, level.fogcolorblue, level.fogcolorscale, level.sunfogcolorred, level.sunfogcolorgreen, level.sunfogcolorblue, level.fogsundir[0], level.fogsundir[1], level.fogsundir[2], level.sunstartangle, level.sunendangle, 0, level.fogmaxopacity ); - } - else - setexpfog( 100000000, 100000001, 0, 0, 0, 0 ); - - wait 0.1; - } -#/ -} - -fovslidercheck() -{ - if ( level.dofdefault["nearStart"] >= level.dofdefault["nearEnd"] ) - { - level.dofdefault["nearStart"] = level.dofdefault["nearEnd"] - 1; - setdvar( "scr_dof_nearStart", level.dofdefault["nearStart"] ); - } - - if ( level.dofdefault["nearEnd"] <= level.dofdefault["nearStart"] ) - { - level.dofdefault["nearEnd"] = level.dofdefault["nearStart"] + 1; - setdvar( "scr_dof_nearEnd", level.dofdefault["nearEnd"] ); - } - - if ( level.dofdefault["farStart"] >= level.dofdefault["farEnd"] ) - { - level.dofdefault["farStart"] = level.dofdefault["farEnd"] - 1; - setdvar( "scr_dof_farStart", level.dofdefault["farStart"] ); - } - - if ( level.dofdefault["farEnd"] <= level.dofdefault["farStart"] ) - { - level.dofdefault["farEnd"] = level.dofdefault["farStart"] + 1; - setdvar( "scr_dof_farEnd", level.dofdefault["farEnd"] ); - } - - if ( level.dofdefault["farBlur"] >= level.dofdefault["nearBlur"] ) - { - level.dofdefault["farBlur"] = level.dofdefault["nearBlur"] - 0.1; - setdvar( "scr_dof_farBlur", level.dofdefault["farBlur"] ); - } - - if ( level.dofdefault["farStart"] <= level.dofdefault["nearEnd"] ) - { - level.dofdefault["farStart"] = level.dofdefault["nearEnd"] + 1; - setdvar( "scr_dof_farStart", level.dofdefault["farStart"] ); - } -} - -dumpsettings() -{ -/# - if ( getdvar( "scr_art_dump" ) != "0" ) - { - println( "\tstart_dist = " + level.fognearplane + ";" ); - println( "\thalf_dist = " + level.fogexphalfplane + ";" ); - println( "\thalf_height = " + level.fogexphalfheight + ";" ); - println( "\tbase_height = " + level.fogbaseheight + ";" ); - println( "\tfog_r = " + level.fogcolorred + ";" ); - println( "\tfog_g = " + level.fogcolorgreen + ";" ); - println( "\tfog_b = " + level.fogcolorblue + ";" ); - println( "\tfog_scale = " + level.fogcolorscale + ";" ); - println( "\tsun_col_r = " + level.sunfogcolorred + ";" ); - println( "\tsun_col_g = " + level.sunfogcolorgreen + ";" ); - println( "\tsun_col_b = " + level.sunfogcolorblue + ";" ); - println( "\tsun_dir_x = " + level.fogsundir[0] + ";" ); - println( "\tsun_dir_y = " + level.fogsundir[1] + ";" ); - println( "\tsun_dir_z = " + level.fogsundir[2] + ";" ); - println( "\tsun_start_ang = " + level.sunstartangle + ";" ); - println( "\tsun_stop_ang = " + level.sunendangle + ";" ); - println( "\ttime = 0;" ); - println( "\tmax_fog_opacity = " + level.fogmaxopacity + ";" ); - println( "" ); - println( "\tsetVolFog(start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale," ); - println( "\t\tsun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, " ); - println( "\t\tsun_stop_ang, time, max_fog_opacity);" ); - setdvar( "scr_art_dump", "0" ); - } -#/ -} - -debug_reflection() -{ -/# - for ( level.debug_reflection = 0; 1; level.debug_reflection = 0 ) - { - wait 0.1; - asm_cond( getdvar( "debug_reflection" ) == "2" && level.debug_reflection != 2 || getdvar( "debug_reflection" ) == "3" && level.debug_reflection != 3, loc_1498 ); - remove_reflection_objects(); - asm_cond( getdvar( "debug_reflection" ) == "2", loc_147C ); - create_reflection_objects(); - level.debug_reflection = 2; - asm_jump( loc_1495 ); - create_reflection_objects(); - create_reflection_object(); - level.debug_reflection = 3; - asm_jump( loc_1517 ); - asm_cond( getdvar( "debug_reflection" ) == "1" && level.debug_reflection != 1, loc_14EC ); - setdvar( "debug_reflection_matte", "0" ); - setdvar( "debug_color_pallete", "0" ); - remove_reflection_objects(); - create_reflection_object(); - level.debug_reflection = 1; - asm_jump( loc_1517 ); - asm_cond( getdvar( "debug_reflection" ) == "0" && level.debug_reflection != 0, loc_1517 ); - remove_reflection_objects(); - } -#/ -} - -remove_reflection_objects() -{ -/# - if ( ( level.debug_reflection == 2 || level.debug_reflection == 3 ) && isdefined( level.debug_reflection_objects ) ) - { - for ( i = 0; i < level.debug_reflection_objects.size; i++ ) - level.debug_reflection_objects[i] delete(); - - level.debug_reflection_objects = undefined; - } - - if ( level.debug_reflection == 1 || level.debug_reflection == 3 || level.debug_reflection_matte == 1 || level.debug_color_pallete == 1 || level.debug_color_pallete == 2 ) - { - if ( isdefined( level.debug_reflectionobject ) ) - level.debug_reflectionobject delete(); - } -#/ -} - -create_reflection_objects() -{ -/# - reflection_locs = getreflectionlocs(); - - for ( i = 0; i < reflection_locs.size; i++ ) - { - level.debug_reflection_objects[i] = spawn( "script_model", reflection_locs[i] ); - level.debug_reflection_objects[i] setmodel( "test_sphere_silver" ); - } -#/ -} - -create_reflection_object( model ) -{ - if ( !isdefined( model ) ) - model = "test_sphere_silver"; -/# - if ( isdefined( level.debug_reflectionobject ) ) - level.debug_reflectionobject delete(); - - players = get_players(); - player = players[0]; - level.debug_reflectionobject = spawn( "script_model", player geteye() + vectorscale( anglestoforward( player.angles ), 100 ) ); - level.debug_reflectionobject setmodel( model ); - level.debug_reflectionobject.origin = player geteye() + vectorscale( anglestoforward( player getplayerangles() ), 100 ); - level.debug_reflectionobject linkto( player ); - thread debug_reflection_buttons(); -#/ -} - -debug_reflection_buttons() -{ -/# - level notify( "new_reflection_button_running" ); - level endon( "new_reflection_button_running" ); - level.debug_reflectionobject endon( "death" ); - offset = 100; - lastoffset = offset; - - while ( getdvar( "debug_reflection" ) == "1" || getdvar( "debug_reflection" ) == "3" || getdvar( "debug_reflection_matte" ) == "1" || getdvar( "debug_color_pallete" ) == "1" || getdvar( "debug_color_pallete" ) == "2" ) - { - players = get_players(); - - if ( players[0] buttonpressed( "BUTTON_X" ) ) - offset += 50; - - if ( players[0] buttonpressed( "BUTTON_Y" ) ) - offset -= 50; - - if ( offset > 1000 ) - offset = 1000; - - if ( offset < 64 ) - offset = 64; - - level.debug_reflectionobject unlink(); - level.debug_reflectionobject.origin = players[0] geteye() + vectorscale( anglestoforward( players[0] getplayerangles() ), offset ); - temp_angles = vectortoangles( players[0].origin - level.debug_reflectionobject.origin ); - level.debug_reflectionobject.angles = ( 0, temp_angles[1], 0 ); - lastoffset = offset; - line( level.debug_reflectionobject.origin, getreflectionorigin( level.debug_reflectionobject.origin ), ( 1, 0, 0 ), 1, 1 ); - wait 0.05; - - if ( isdefined( level.debug_reflectionobject ) ) - level.debug_reflectionobject linkto( players[0] ); - } -#/ -} - -debug_reflection_matte() -{ -/# - for ( level.debug_reflection_matte = 0; 1; level.debug_reflection_matte = 0 ) - { - wait 0.1; - asm_cond( getdvar( "debug_reflection_matte" ) == "1" && level.debug_reflection_matte != 1, loc_18DC ); - setdvar( "debug_reflection", "0" ); - setdvar( "debug_color_pallete", "0" ); - remove_reflection_objects(); - create_reflection_object( "test_sphere_lambert" ); - level.debug_reflection_matte = 1; - asm_jump( loc_1907 ); - asm_cond( getdvar( "debug_reflection_matte" ) == "0" && level.debug_reflection_matte != 0, loc_1907 ); - remove_reflection_objects(); - } -#/ -} - -debug_color_pallete() -{ -/# - for ( level.debug_color_pallete = 0; 1; level.debug_color_pallete = 0 ) - { - wait 0.1; - asm_cond( getdvar( "debug_color_pallete" ) == "1" && level.debug_color_pallete != 1, loc_1980 ); - setdvar( "debug_reflection", "0" ); - setdvar( "debug_reflection_matte", "0" ); - remove_reflection_objects(); - create_reflection_object( "test_macbeth_chart" ); - level.debug_color_pallete = 1; - asm_jump( loc_19E7 ); - asm_cond( getdvar( "debug_color_pallete" ) == "2" && level.debug_color_pallete != 2, loc_19BC ); - remove_reflection_objects(); - create_reflection_object( "test_macbeth_chart_unlit" ); - level.debug_color_pallete = 2; - asm_jump( loc_19E7 ); - asm_cond( getdvar( "debug_color_pallete" ) == "0" && level.debug_color_pallete != 0, loc_19E7 ); - remove_reflection_objects(); - } -#/ -} diff --git a/Multiplayer Core/patch_mp/maps/mp/_bb.gsc b/Multiplayer Core/patch_mp/maps/mp/_bb.gsc deleted file mode 100644 index 9c095c5..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/_bb.gsc +++ /dev/null @@ -1,91 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include maps\mp\_utility; -#include common_scripts\utility; - -init() -{ - level thread onplayerconnect(); -} - -onplayerconnect() -{ - for (;;) - { - level waittill( "connected", player ); - - player thread onplayerspawned(); - player thread onplayerdeath(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - self._bbdata = []; - - for (;;) - { - self waittill( "spawned_player" ); - - self._bbdata["score"] = 0; - self._bbdata["momentum"] = 0; - self._bbdata["spawntime"] = gettime(); - self._bbdata["shots"] = 0; - self._bbdata["hits"] = 0; - } -} - -onplayerdisconnect() -{ - for (;;) - { - self waittill( "disconnect" ); - - self commitspawndata(); - break; - } -} - -onplayerdeath() -{ - self endon( "disconnect" ); - - for (;;) - { - self waittill( "death" ); - - self commitspawndata(); - } -} - -commitspawndata() -{ -/# - assert( isdefined( self._bbdata ) ); -#/ - if ( !isdefined( self._bbdata ) ) - return; - - bbprint( "mpplayerlives", "gametime %d spawnid %d lifescore %d lifemomentum %d lifetime %d name %s", gettime(), getplayerspawnid( self ), self._bbdata["score"], self._bbdata["momentum"], gettime() - self._bbdata["spawntime"], self.name ); -} - -commitweapondata( spawnid, currentweapon, time0 ) -{ -/# - assert( isdefined( self._bbdata ) ); -#/ - if ( !isdefined( self._bbdata ) ) - return; - - time1 = gettime(); - bbprint( "mpweapons", "spawnid %d name %s duration %d shots %d hits %d", spawnid, currentweapon, time1 - time0, self._bbdata["shots"], self._bbdata["hits"] ); - self._bbdata["shots"] = 0; - self._bbdata["hits"] = 0; -} - -bbaddtostat( statname, delta ) -{ - if ( isdefined( self._bbdata ) && isdefined( self._bbdata[statname] ) ) - self._bbdata[statname] += delta; -} diff --git a/Multiplayer Core/patch_mp/maps/mp/_busing.gsc b/Multiplayer Core/patch_mp/maps/mp/_busing.gsc deleted file mode 100644 index 5a8bf36..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/_busing.gsc +++ /dev/null @@ -1,20 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include maps\mp\_utility; - -businit() -{ -/# - assert( level.clientscripts ); -#/ - level.busstate = ""; - registerclientsys( "busCmd" ); -} - -setbusstate( state ) -{ - if ( level.busstate != state ) - setclientsysstate( "busCmd", state ); - - level.busstate = state; -} diff --git a/Multiplayer Core/patch_mp/maps/mp/_challenges.gsc b/Multiplayer Core/patch_mp/maps/mp/_challenges.gsc deleted file mode 100644 index 167ec67..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/_challenges.gsc +++ /dev/null @@ -1,1881 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include maps\mp\_utility; -#include common_scripts\utility; - -init() -{ - if ( !isdefined( level.challengescallbacks ) ) - level.challengescallbacks = []; - - waittillframeend; - - if ( canprocesschallenges() ) - { - registerchallengescallback( "playerKilled", ::challengekills ); - registerchallengescallback( "gameEnd", ::challengegameend ); - registerchallengescallback( "roundEnd", ::challengeroundend ); - } - - level thread onplayerconnect(); - - foreach ( team in level.teams ) - initteamchallenges( team ); -} - -addflyswatterstat( weapon, aircraft ) -{ - if ( !isdefined( self.pers["flyswattercount"] ) ) - self.pers["flyswattercount"] = 0; - - self addweaponstat( weapon, "destroyed_aircraft", 1 ); - self.pers["flyswattercount"]++; - - if ( self.pers["flyswattercount"] == 5 ) - self addweaponstat( weapon, "destroyed_5_aircraft", 1 ); - - if ( isdefined( aircraft ) && isdefined( aircraft.birthtime ) ) - { - if ( gettime() - aircraft.birthtime < 20000 ) - self addweaponstat( weapon, "destroyed_aircraft_under20s", 1 ); - } - - if ( !isdefined( self.destroyedaircrafttime ) ) - self.destroyedaircrafttime = []; - - if ( isdefined( self.destroyedaircrafttime[weapon] ) && gettime() - self.destroyedaircrafttime[weapon] < 10000 ) - { - self addweaponstat( weapon, "destroyed_2aircraft_quickly", 1 ); - self.destroyedaircrafttime[weapon] = undefined; - } - else - self.destroyedaircrafttime[weapon] = gettime(); -} - -canprocesschallenges() -{ -/# - if ( getdvarintdefault( "scr_debug_challenges", 0 ) ) - return true; -#/ - if ( level.rankedmatch || level.wagermatch ) - return true; - - return false; -} - -initteamchallenges( team ) -{ - if ( !isdefined( game["challenge"] ) ) - game["challenge"] = []; - - if ( !isdefined( game["challenge"][team] ) ) - { - game["challenge"][team] = []; - game["challenge"][team]["plantedBomb"] = 0; - game["challenge"][team]["destroyedBombSite"] = 0; - game["challenge"][team]["capturedFlag"] = 0; - } - - game["challenge"][team]["allAlive"] = 1; -} - -registerchallengescallback( callback, func ) -{ - if ( !isdefined( level.challengescallbacks[callback] ) ) - level.challengescallbacks[callback] = []; - - level.challengescallbacks[callback][level.challengescallbacks[callback].size] = func; -} - -dochallengecallback( callback, data ) -{ - if ( !isdefined( level.challengescallbacks ) ) - return; - - if ( !isdefined( level.challengescallbacks[callback] ) ) - return; - - if ( isdefined( data ) ) - { - for ( i = 0; i < level.challengescallbacks[callback].size; i++ ) - thread [[ level.challengescallbacks[callback][i] ]]( data ); - } - else - { - for ( i = 0; i < level.challengescallbacks[callback].size; i++ ) - thread [[ level.challengescallbacks[callback][i] ]](); - } -} - -onplayerconnect() -{ - for (;;) - { - level waittill( "connected", player ); - - player thread initchallengedata(); - player thread spawnwatcher(); - player thread monitorreloads(); - } -} - -monitorreloads() -{ - self endon( "disconnect" ); - - while ( true ) - { - self waittill( "reload" ); - - currentweapon = self getcurrentweapon(); - - if ( currentweapon == "none" ) - continue; - - time = gettime(); - self.lastreloadtime = time; - - if ( currentweapon == "crossbow_mp" ) - self.crossbowclipkillcount = 0; - - if ( weaponhasattachment( currentweapon, "dualclip" ) ) - self thread reloadthenkill( currentweapon ); - } -} - -reloadthenkill( reloadweapon ) -{ - self endon( "disconnect" ); - self endon( "death" ); - self endon( "reloadThenKillTimedOut" ); - self notify( "reloadThenKillStart" ); - self endon( "reloadThenKillStart" ); - self thread reloadthenkilltimeout( 5 ); - - for (;;) - { - self waittill( "killed_enemy_player", time, weapon ); - - if ( reloadweapon == weapon ) - self addplayerstat( "reload_then_kill_dualclip", 1 ); - } -} - -reloadthenkilltimeout( time ) -{ - self endon( "disconnect" ); - self endon( "death" ); - self endon( "reloadThenKillStart" ); - wait( time ); - self notify( "reloadThenKillTimedOut" ); -} - -initchallengedata() -{ - self.pers["bulletStreak"] = 0; - self.pers["lastBulletKillTime"] = 0; - self.pers["stickExplosiveKill"] = 0; - self.pers["carepackagesCalled"] = 0; - self.explosiveinfo = []; -} - -isdamagefromplayercontrolledaitank( eattacker, einflictor, sweapon ) -{ - if ( sweapon == "ai_tank_drone_gun_mp" ) - { - if ( isdefined( eattacker ) && isdefined( eattacker.remoteweapon ) && isdefined( einflictor ) ) - { - if ( isdefined( einflictor.controlled ) && einflictor.controlled == 1 ) - { - if ( eattacker.remoteweapon == einflictor ) - return true; - } - } - } - else if ( sweapon == "ai_tank_drone_rocket_mp" ) - { - if ( isdefined( einflictor ) && !isdefined( einflictor.from_ai ) ) - return true; - } - - return false; -} - -isdamagefromplayercontrolledsentry( eattacker, einflictor, sweapon ) -{ - if ( sweapon == "auto_gun_turret_mp" ) - { - if ( isdefined( eattacker ) && isdefined( eattacker.remoteweapon ) && isdefined( einflictor ) ) - { - if ( eattacker.remoteweapon == einflictor ) - { - if ( isdefined( einflictor.controlled ) && einflictor.controlled == 1 ) - return true; - } - } - } - - return false; -} - -challengekills( data, time ) -{ - victim = data.victim; - player = data.attacker; - attacker = data.attacker; - time = data.time; - victim = data.victim; - weapon = data.sweapon; - time = data.time; - inflictor = data.einflictor; - meansofdeath = data.smeansofdeath; - wasplanting = data.wasplanting; - wasdefusing = data.wasdefusing; - lastweaponbeforetoss = data.lastweaponbeforetoss; - ownerweaponatlaunch = data.ownerweaponatlaunch; - - if ( !isdefined( data.sweapon ) ) - return; - - if ( !isdefined( player ) || !isplayer( player ) ) - return; - - weaponclass = getweaponclass( weapon ); - game["challenge"][victim.team]["allAlive"] = 0; - - if ( level.teambased ) - { - if ( player.team == victim.team ) - return; - } - else if ( player == victim ) - return; - - if ( isdamagefromplayercontrolledaitank( player, inflictor, weapon ) == 1 ) - player addplayerstat( "kill_with_remote_control_ai_tank", 1 ); - - if ( weapon == "auto_gun_turret_mp" ) - { - if ( isdefined( inflictor ) ) - { - if ( !isdefined( inflictor.killcount ) ) - inflictor.killcount = 0; - - inflictor.killcount++; - - if ( inflictor.killcount >= 5 ) - { - inflictor.killcount = 0; - player addplayerstat( "killstreak_5_with_sentry_gun", 1 ); - } - } - - if ( isdamagefromplayercontrolledsentry( player, inflictor, weapon ) == 1 ) - player addplayerstat( "kill_with_remote_control_sentry_gun", 1 ); - } - - if ( weapon == "minigun_mp" || weapon == "inventory_minigun_mp" ) - { - player.deathmachinekills++; - - if ( player.deathmachinekills >= 5 ) - { - player.deathmachinekills = 0; - player addplayerstat( "killstreak_5_with_death_machine", 1 ); - } - } - - if ( data.waslockingon == 1 && weapon == "chopper_minigun_mp" ) - player addplayerstat( "kill_enemy_locking_on_with_chopper_gunner", 1 ); - - if ( isdefined( level.iskillstreakweapon ) ) - { - if ( [[ level.iskillstreakweapon ]]( data.sweapon ) ) - return; - } - - attacker notify( "killed_enemy_player", time, weapon ); - - if ( isdefined( player.primaryloadoutweapon ) && weapon == player.primaryloadoutweapon || isdefined( player.primaryloadoutaltweapon ) && weapon == player.primaryloadoutaltweapon ) - { - if ( player isbonuscardactive( 0, player.class_num ) ) - { - player addbonuscardstat( 0, "kills", 1, player.class_num ); - player addplayerstat( "kill_with_loadout_weapon_with_3_attachments", 1 ); - } - - if ( isdefined( player.secondaryweaponkill ) && player.secondaryweaponkill == 1 ) - { - player.primaryweaponkill = 0; - player.secondaryweaponkill = 0; - - if ( player isbonuscardactive( 2, player.class_num ) ) - { - player addbonuscardstat( 2, "kills", 1, player.class_num ); - player addplayerstat( "kill_with_both_primary_weapons", 1 ); - } - } - else - player.primaryweaponkill = 1; - } - else if ( isdefined( player.secondaryloadoutweapon ) && weapon == player.secondaryloadoutweapon || isdefined( player.secondaryloadoutaltweapon ) && weapon == player.secondaryloadoutaltweapon ) - { - if ( player isbonuscardactive( 1, player.class_num ) ) - player addbonuscardstat( 1, "kills", 1, player.class_num ); - - if ( isdefined( player.primaryweaponkill ) && player.primaryweaponkill == 1 ) - { - player.primaryweaponkill = 0; - player.secondaryweaponkill = 0; - - if ( player isbonuscardactive( 2, player.class_num ) ) - { - player addbonuscardstat( 2, "kills", 1, player.class_num ); - player addplayerstat( "kill_with_both_primary_weapons", 1 ); - } - } - else - player.secondaryweaponkill = 1; - } - - if ( player isbonuscardactive( 5, player.class_num ) || player isbonuscardactive( 4, player.class_num ) || player isbonuscardactive( 3, player.class_num ) ) - player addplayerstat( "kill_with_2_perks_same_category", 1 ); - - baseweaponname = getreffromitemindex( getbaseweaponitemindex( weapon ) ) + "_mp"; - - if ( isdefined( player.weaponkills[baseweaponname] ) ) - { - player.weaponkills[baseweaponname]++; - - if ( player.weaponkills[baseweaponname] == 5 ) - player addweaponstat( baseweaponname, "killstreak_5", 1 ); - - if ( player.weaponkills[baseweaponname] == 10 ) - player addweaponstat( baseweaponname, "killstreak_10", 1 ); - } - else - player.weaponkills[baseweaponname] = 1; - - attachmentname = player getweaponoptic( weapon ); - - if ( isdefined( attachmentname ) && attachmentname != "" ) - { - if ( isdefined( player.attachmentkills[attachmentname] ) ) - { - player.attachmentkills[attachmentname]++; - - if ( player.attachmentkills[attachmentname] == 5 ) - player addweaponstat( weapon, "killstreak_5_attachment", 1 ); - } - else - player.attachmentkills[attachmentname] = 1; - } -/# - assert( isdefined( player.activecounteruavs ) ); -#/ -/# - assert( isdefined( player.activeuavs ) ); -#/ -/# - assert( isdefined( player.activesatellites ) ); -#/ - if ( player.activeuavs > 0 ) - player addplayerstat( "kill_while_uav_active", 1 ); - - if ( player.activecounteruavs > 0 ) - player addplayerstat( "kill_while_cuav_active", 1 ); - - if ( player.activesatellites > 0 ) - player addplayerstat( "kill_while_satellite_active", 1 ); - - if ( isdefined( attacker.tacticalinsertiontime ) && attacker.tacticalinsertiontime + 5000 > time ) - { - player addplayerstat( "kill_after_tac_insert", 1 ); - player addweaponstat( "tactical_insertion_mp", "CombatRecordStat", 1 ); - } - - if ( isdefined( victim.tacticalinsertiontime ) && victim.tacticalinsertiontime + 5000 > time ) - player addweaponstat( "tactical_insertion_mp", "headshots", 1 ); - - if ( isdefined( level.isplayertrackedfunc ) ) - { - if ( attacker [[ level.isplayertrackedfunc ]]( victim, time ) ) - { - attacker addplayerstat( "kill_enemy_revealed_by_sensor", 1 ); - attacker addweaponstat( "sensor_grenade_mp", "CombatRecordStat", 1 ); - } - } - - if ( level.teambased ) - { - activeempowner = level.empowners[player.team]; - - if ( isdefined( activeempowner ) ) - { - if ( activeempowner == player ) - player addplayerstat( "kill_while_emp_active", 1 ); - } - } - else if ( isdefined( level.empplayer ) ) - { - if ( level.empplayer == player ) - player addplayerstat( "kill_while_emp_active", 1 ); - } - - if ( isdefined( player.flakjacketclaymore[victim.clientid] ) && player.flakjacketclaymore[victim.clientid] == 1 ) - player addplayerstat( "survive_claymore_kill_planter_flak_jacket_equipped", 1 ); - - if ( isdefined( player.dogsactive ) ) - { - if ( weapon != "dog_bite_mp" ) - { - player.dogsactivekillstreak++; - - if ( player.dogsactivekillstreak > 5 ) - player addplayerstat( "killstreak_5_dogs", 1 ); - } - } - - isstunned = 0; - - if ( victim maps\mp\_utility::isflashbanged() ) - { - if ( isdefined( victim.lastflashedby ) && victim.lastflashedby == player ) - { - player addplayerstat( "kill_flashed_enemy", 1 ); - player addweaponstat( "flash_grenade_mp", "CombatRecordStat", 1 ); - } - - isstunned = 1; - } - - if ( isdefined( victim.concussionendtime ) && victim.concussionendtime > gettime() ) - { - if ( isdefined( victim.lastconcussedby ) && victim.lastconcussedby == player ) - { - player addplayerstat( "kill_concussed_enemy", 1 ); - player addweaponstat( "concussion_grenade_mp", "CombatRecordStat", 1 ); - } - - isstunned = 1; - } - - if ( isdefined( player.laststunnedby ) ) - { - if ( player.laststunnedby == victim && player.laststunnedtime + 5000 > time ) - player addplayerstat( "kill_enemy_who_shocked_you", 1 ); - } - - if ( isdefined( victim.laststunnedby ) && victim.laststunnedtime + 5000 > time ) - { - isstunned = 1; - - if ( victim.laststunnedby == player ) - { - player addplayerstat( "kill_shocked_enemy", 1 ); - player addweaponstat( "proximity_grenade_mp", "CombatRecordStat", 1 ); - - if ( data.smeansofdeath == "MOD_MELEE" ) - player addplayerstat( "shock_enemy_then_stab_them", 1 ); - } - } - - if ( player.mantletime + 5000 > time ) - player addplayerstat( "mantle_then_kill", 1 ); - - if ( isdefined( player.tookweaponfrom ) && isdefined( player.tookweaponfrom[weapon] ) && isdefined( player.tookweaponfrom[weapon].previousowner ) ) - { - if ( level.teambased ) - { - if ( player.tookweaponfrom[weapon].previousowner.team != player.team ) - { - player.pickedupweaponkills[weapon]++; - player addplayerstat( "kill_enemy_with_picked_up_weapon", 1 ); - } - } - else - { - player.pickedupweaponkills[weapon]++; - player addplayerstat( "kill_enemy_with_picked_up_weapon", 1 ); - } - - if ( player.pickedupweaponkills[weapon] >= 5 ) - { - player.pickedupweaponkills[weapon] = 0; - player addplayerstat( "killstreak_5_picked_up_weapon", 1 ); - } - } - - if ( isdefined( victim.explosiveinfo["originalOwnerKill"] ) && victim.explosiveinfo["originalOwnerKill"] == 1 ) - { - if ( victim.explosiveinfo["damageExplosiveKill"] == 1 ) - player addplayerstat( "kill_enemy_shoot_their_explosive", 1 ); - } - - if ( data.attackerstance == "crouch" ) - player addplayerstat( "kill_enemy_while_crouched", 1 ); - else if ( data.attackerstance == "prone" ) - player addplayerstat( "kill_enemy_while_prone", 1 ); - - if ( data.victimstance == "prone" ) - player addplayerstat( "kill_prone_enemy", 1 ); - - if ( data.smeansofdeath == "MOD_HEAD_SHOT" || data.smeansofdeath == "MOD_PISTOL_BULLET" || data.smeansofdeath == "MOD_RIFLE_BULLET" ) - player genericbulletkill( data, victim, weapon ); - - if ( level.teambased ) - { - if ( !isdefined( player.pers["kill_every_enemy"] ) && ( level.playercount[victim.pers["team"]] > 3 && player.pers["killed_players"].size >= level.playercount[victim.pers["team"]] ) ) - { - player addplayerstat( "kill_every_enemy", 1 ); - player.pers["kill_every_enemy"] = 1; - } - } - - switch ( weaponclass ) - { - case "weapon_pistol": - if ( data.smeansofdeath == "MOD_HEAD_SHOT" ) - { - player.pers["pistolHeadshot"]++; - - if ( player.pers["pistolHeadshot"] >= 10 ) - { - player.pers["pistolHeadshot"] = 0; - player addplayerstat( "pistolHeadshot_10_onegame", 1 ); - } - } - - break; - case "weapon_assault": - if ( data.smeansofdeath == "MOD_HEAD_SHOT" ) - { - player.pers["assaultRifleHeadshot"]++; - - if ( player.pers["assaultRifleHeadshot"] >= 5 ) - { - player.pers["assaultRifleHeadshot"] = 0; - player addplayerstat( "headshot_assault_5_onegame", 1 ); - } - } - - break; - case "weapon_smg": - case "weapon_lmg": - break; - case "weapon_sniper": - if ( isdefined( victim.firsttimedamaged ) && victim.firsttimedamaged == time ) - { - player addplayerstat( "kill_enemy_one_bullet_sniper", 1 ); - player addweaponstat( weapon, "kill_enemy_one_bullet_sniper", 1 ); - - if ( !isdefined( player.pers["one_shot_sniper_kills"] ) ) - player.pers["one_shot_sniper_kills"] = 0; - - player.pers["one_shot_sniper_kills"]++; - - if ( player.pers["one_shot_sniper_kills"] == 10 ) - player addplayerstat( "kill_10_enemy_one_bullet_sniper_onegame", 1 ); - } - - break; - case "weapon_cqb": - if ( isdefined( victim.firsttimedamaged ) && victim.firsttimedamaged == time ) - { - player addplayerstat( "kill_enemy_one_bullet_shotgun", 1 ); - player addweaponstat( weapon, "kill_enemy_one_bullet_shotgun", 1 ); - - if ( !isdefined( player.pers["one_shot_shotgun_kills"] ) ) - player.pers["one_shot_shotgun_kills"] = 0; - - player.pers["one_shot_shotgun_kills"]++; - - if ( player.pers["one_shot_shotgun_kills"] == 10 ) - player addplayerstat( "kill_10_enemy_one_bullet_shotgun_onegame", 1 ); - } - - break; - } - - if ( data.smeansofdeath == "MOD_MELEE" ) - { - if ( weaponhasattachment( weapon, "tacknife" ) ) - { - player addplayerstat( "kill_enemy_with_tacknife", 1 ); - player bladekill(); - } - else if ( weapon == "knife_ballistic_mp" ) - { - player bladekill(); - player addweaponstat( weapon, "ballistic_knife_melee", 1 ); - } - else if ( weapon == "knife_held_mp" || weapon == "knife_mp" ) - player bladekill(); - else if ( weapon == "riotshield_mp" ) - { - if ( victim.lastfiretime + 3000 > time ) - player addweaponstat( weapon, "shield_melee_while_enemy_shooting", 1 ); - } - } - else - { - if ( data.smeansofdeath == "MOD_IMPACT" && baseweaponname == "crossbow_mp" ) - { - if ( weaponhasattachment( weapon, "stackfire" ) ) - player addplayerstat( "KILL_CROSSBOW_STACKFIRE", 1 ); - } - else if ( isdefined( ownerweaponatlaunch ) ) - { - if ( weaponhasattachment( ownerweaponatlaunch, "stackfire" ) ) - player addplayerstat( "KILL_CROSSBOW_STACKFIRE", 1 ); - } - - if ( weapon == "knife_ballistic_mp" ) - { - player bladekill(); - - if ( isdefined( player.retreivedblades ) && player.retreivedblades > 0 ) - { - player.retreivedblades--; - player addweaponstat( weapon, "kill_retrieved_blade", 1 ); - } - } - } - - lethalgrenadekill = 0; - - switch ( weapon ) - { - case "bouncingbetty_mp": - lethalgrenadekill = 1; - player notify( "lethalGrenadeKill" ); - break; - case "hatchet_mp": - player bladekill(); - lethalgrenadekill = 1; - player notify( "lethalGrenadeKill" ); - - if ( isdefined( lastweaponbeforetoss ) ) - { - if ( lastweaponbeforetoss == level.riotshield_name ) - { - player addweaponstat( level.riotshield_name, "hatchet_kill_with_shield_equiped", 1 ); - player addplayerstat( "hatchet_kill_with_shield_equiped", 1 ); - } - } - - break; - case "claymore_mp": - lethalgrenadekill = 1; - player notify( "lethalGrenadeKill" ); - player addplayerstat( "kill_with_claymore", 1 ); - - if ( data.washacked ) - player addplayerstat( "kill_with_hacked_claymore", 1 ); - - break; - case "satchel_charge_mp": - lethalgrenadekill = 1; - player notify( "lethalGrenadeKill" ); - player addplayerstat( "kill_with_c4", 1 ); - break; - case "destructible_car_mp": - player addplayerstat( "kill_enemy_withcar", 1 ); - - if ( isdefined( inflictor.destroyingweapon ) ) - player addweaponstat( inflictor.destroyingweapon, "kills_from_cars", 1 ); - - break; - case "sticky_grenade_mp": - lethalgrenadekill = 1; - player notify( "lethalGrenadeKill" ); - - if ( isdefined( victim.explosiveinfo["stuckToPlayer"] ) && victim.explosiveinfo["stuckToPlayer"] == victim ) - { - attacker.pers["stickExplosiveKill"]++; - - if ( attacker.pers["stickExplosiveKill"] >= 5 ) - { - attacker.pers["stickExplosiveKill"] = 0; - player addplayerstat( "stick_explosive_kill_5_onegame", 1 ); - } - } - - break; - case "frag_grenade_mp": - lethalgrenadekill = 1; - player notify( "lethalGrenadeKill" ); - - if ( isdefined( data.victim.explosiveinfo["cookedKill"] ) && data.victim.explosiveinfo["cookedKill"] == 1 ) - player addplayerstat( "kill_with_cooked_grenade", 1 ); - - if ( isdefined( data.victim.explosiveinfo["throwbackKill"] ) && data.victim.explosiveinfo["throwbackKill"] == 1 ) - player addplayerstat( "kill_with_tossed_back_lethal", 1 ); - - break; - case "explosive_bolt_mp": - case "crossbow_mp": - if ( !isdefined( player.crossbowclipkillcount ) ) - player.crossbowclipkillcount = 0; - - player.crossbowclipkillcount++; - - if ( player.crossbowclipkillcount >= weaponclipsize( "crossbow_mp" ) ) - { - player.crossbowclipkillcount = 0; - player addweaponstat( "crossbow_mp", "crossbow_kill_clip", 1 ); - } - - break; - } - - if ( lethalgrenadekill ) - { - if ( player isbonuscardactive( 6, player.class_num ) ) - { - player addbonuscardstat( 6, "kills", 1, player.class_num ); - - if ( !isdefined( player.pers["dangerCloseKills"] ) ) - player.pers["dangerCloseKills"] = 0; - - player.pers["dangerCloseKills"]++; - - if ( player.pers["dangerCloseKills"] == 5 ) - player addplayerstat( "kill_with_dual_lethal_grenades", 1 ); - } - } - - player perkkills( victim, isstunned, time ); -} - -perkkills( victim, isstunned, time ) -{ - player = self; - - if ( player hasperk( "specialty_movefaster" ) ) - player addplayerstat( "perk_movefaster_kills", 1 ); - - if ( player hasperk( "specialty_noname" ) ) - player addplayerstat( "perk_noname_kills", 1 ); - - if ( player hasperk( "specialty_quieter" ) ) - player addplayerstat( "perk_quieter_kills", 1 ); - - if ( player hasperk( "specialty_longersprint" ) ) - { - if ( isdefined( player.lastsprinttime ) && gettime() - player.lastsprinttime < 2500 ) - player addplayerstat( "perk_longersprint", 1 ); - } - - if ( player hasperk( "specialty_fastmantle" ) ) - { - if ( isdefined( player.lastsprinttime ) && gettime() - player.lastsprinttime < 2500 && player playerads() >= 1 ) - player addplayerstat( "perk_fastmantle_kills", 1 ); - } - - if ( player hasperk( "specialty_loudenemies" ) ) - player addplayerstat( "perk_loudenemies_kills", 1 ); - - if ( isstunned == 1 && player hasperk( "specialty_stunprotection" ) ) - player addplayerstat( "perk_protection_stun_kills", 1 ); -/# - assert( isdefined( victim.activecounteruavs ) ); -#/ - activeemp = 0; - - if ( level.teambased ) - { - foreach ( team in level.teams ) - { - if ( team == player.team ) - continue; - - if ( isdefined( level.empowners[team] ) ) - { - activeemp = 1; - break; - } - } - } - else if ( isdefined( level.empplayer ) ) - { - if ( level.empplayer != player ) - activeemp = 1; - } - - activecuav = 0; - - if ( level.teambased ) - { - foreach ( team in level.teams ) - { - if ( team == player.team ) - continue; - - if ( level.activecounteruavs[team] > 0 ) - { - activecuav = 1; - break; - } - } - } - else - { - players = level.players; - - for ( i = 0; i < players.size; i++ ) - { - if ( players[i] != player ) - { - if ( isdefined( level.activecounteruavs[players[i].entnum] ) && level.activecounteruavs[players[i].entnum] > 0 ) - { - activecuav = 1; - break; - } - } - } - } - - if ( activecuav == 1 || activeemp == 1 ) - { - if ( player hasperk( "specialty_immunecounteruav" ) ) - player addplayerstat( "perk_immune_cuav_kills", 1 ); - } - - activeuavvictim = 0; - - if ( level.teambased ) - { - if ( level.activeuavs[victim.team] > 0 ) - activeuavvictim = 1; - } - else - activeuavvictim = isdefined( level.activeuavs[victim.entnum] ) && level.activeuavs[victim.entnum] > 0; - - if ( activeuavvictim == 1 ) - { - if ( player hasperk( "specialty_gpsjammer" ) ) - player addplayerstat( "perk_gpsjammer_immune_kills", 1 ); - } - - if ( player.lastweaponchange + 5000 > time ) - { - if ( player hasperk( "specialty_fastweaponswitch" ) ) - player addplayerstat( "perk_fastweaponswitch_kill_after_swap", 1 ); - } - - if ( player.scavenged == 1 ) - { - if ( player hasperk( "specialty_scavenger" ) ) - player addplayerstat( "perk_scavenger_kills_after_resupply", 1 ); - } -} - -flakjacketprotected( weapon, attacker ) -{ - if ( weapon == "claymore_mp" ) - self.flakjacketclaymore[attacker.clientid] = 1; - - self addplayerstat( "perk_flak_survive", 1 ); -} - -earnedkillstreak() -{ - if ( self hasperk( "specialty_earnmoremomentum" ) ) - self addplayerstat( "perk_earnmoremomentum_earn_streak", 1 ); -} - -genericbulletkill( data, victim, weapon ) -{ - player = self; - time = data.time; - - if ( player.pers["lastBulletKillTime"] == time ) - player.pers["bulletStreak"]++; - else - player.pers["bulletStreak"] = 1; - - player.pers["lastBulletKillTime"] = time; - - if ( data.victim.idflagstime == time ) - { - if ( data.victim.idflags & level.idflags_penetration ) - { - player addplayerstat( "kill_enemy_through_wall", 1 ); - - if ( isdefined( weapon ) && weaponhasattachment( weapon, "fmj" ) ) - player addplayerstat( "kill_enemy_through_wall_with_fmj", 1 ); - } - } -} - -ishighestscoringplayer( player ) -{ - if ( !isdefined( player.score ) || player.score < 1 ) - return false; - - players = level.players; - - if ( level.teambased ) - team = player.pers["team"]; - else - team = "all"; - - highscore = player.score; - - for ( i = 0; i < players.size; i++ ) - { - if ( !isdefined( players[i].score ) ) - continue; - - if ( players[i] == player ) - continue; - - if ( players[i].score < 1 ) - continue; - - if ( team != "all" && players[i].pers["team"] != team ) - continue; - - if ( players[i].score >= highscore ) - return false; - } - - return true; -} - -spawnwatcher() -{ - self endon( "disconnect" ); - self.pers["stickExplosiveKill"] = 0; - self.pers["pistolHeadshot"] = 0; - self.pers["assaultRifleHeadshot"] = 0; - self.pers["killNemesis"] = 0; - - while ( true ) - { - self waittill( "spawned_player" ); - - self.pers["longshotsPerLife"] = 0; - self.flakjacketclaymore = []; - self.weaponkills = []; - self.attachmentkills = []; - self.retreivedblades = 0; - self.lastreloadtime = 0; - self.crossbowclipkillcount = 0; - self thread watchfordtp(); - self thread watchformantle(); - self thread monitor_player_sprint(); - } -} - -pickedupballisticknife() -{ - self.retreivedblades++; -} - -watchfordtp() -{ - self endon( "disconnect" ); - self endon( "death" ); - - for ( self.dtptime = 0; 1; self.dtptime = gettime() + 4000 ) - self waittill( "dtp_end" ); -} - -watchformantle() -{ - self endon( "disconnect" ); - self endon( "death" ); - - for ( self.mantletime = 0; 1; self.mantletime = mantleendtime ) - self waittill( "mantle_start", mantleendtime ); -} - -disarmedhackedcarepackage() -{ - self addplayerstat( "disarm_hacked_carepackage", 1 ); -} - -destroyed_car() -{ - if ( !isdefined( self ) || !isplayer( self ) ) - return; - - self addplayerstat( "destroy_car", 1 ); -} - -killednemesis() -{ - self.pers["killNemesis"]++; - - if ( self.pers["killNemesis"] >= 5 ) - { - self.pers["killNemesis"] = 0; - self addplayerstat( "kill_nemesis", 1 ); - } -} - -killwhiledamagingwithhpm() -{ - self addplayerstat( "kill_while_damaging_with_microwave_turret", 1 ); -} - -longdistancehatchetkill() -{ - self addplayerstat( "long_distance_hatchet_kill", 1 ); -} - -blockedsatellite() -{ - self addplayerstat( "activate_cuav_while_enemy_satelite_active", 1 ); -} - -longdistancekill() -{ - self.pers["longshotsPerLife"]++; - - if ( self.pers["longshotsPerLife"] >= 3 ) - { - self.pers["longshotsPerLife"] = 0; - self addplayerstat( "longshot_3_onelife", 1 ); - } -} - -challengeroundend( data ) -{ - player = data.player; - winner = data.winner; - - if ( endedearly( winner ) ) - return; - - if ( level.teambased ) - { - winnerscore = game["teamScores"][winner]; - loserscore = getlosersteamscores( winner ); - } - - switch ( level.gametype ) - { - case "sd": - if ( player.team == winner ) - { - if ( game["challenge"][winner]["allAlive"] ) - player addgametypestat( "round_win_no_deaths", 1 ); - - if ( isdefined( player.lastmansddefeat3enemies ) ) - player addgametypestat( "last_man_defeat_3_enemies", 1 ); - } - - break; - default: - break; - } -} - -roundend( winner ) -{ - wait 0.05; - data = spawnstruct(); - data.time = gettime(); - - if ( level.teambased ) - { - if ( isdefined( winner ) && isdefined( level.teams[winner] ) ) - data.winner = winner; - } - else if ( isdefined( winner ) ) - data.winner = winner; - - for ( index = 0; index < level.placement["all"].size; index++ ) - { - data.player = level.placement["all"][index]; - data.place = index; - dochallengecallback( "roundEnd", data ); - } -} - -gameend( winner ) -{ - wait 0.05; - data = spawnstruct(); - data.time = gettime(); - - if ( level.teambased ) - { - if ( isdefined( winner ) && isdefined( level.teams[winner] ) ) - data.winner = winner; - } - else if ( isdefined( winner ) && isplayer( winner ) ) - data.winner = winner; - - for ( index = 0; index < level.placement["all"].size; index++ ) - { - data.player = level.placement["all"][index]; - data.place = index; - dochallengecallback( "gameEnd", data ); - } -} - -getfinalkill( player ) -{ - if ( isplayer( player ) ) - player addplayerstat( "get_final_kill", 1 ); -} - -destroyrcbomb( weaponname ) -{ - self destroyscorestreak( weaponname ); - - if ( weaponname == "hatchet_mp" ) - self addplayerstat( "destroy_rcbomb_with_hatchet", 1 ); -} - -capturedcrate() -{ - if ( isdefined( self.lastrescuedby ) && isdefined( self.lastrescuedtime ) ) - { - if ( self.lastrescuedtime + 5000 > gettime() ) - self.lastrescuedby addplayerstat( "defend_teammate_who_captured_package", 1 ); - } -} - -destroyscorestreak( weaponname ) -{ - if ( isdefined( weaponname ) && weaponname == "qrdrone_turret_mp" ) - self addplayerstat( "destroy_score_streak_with_qrdrone", 1 ); -} - -capturedobjective( capturetime ) -{ - if ( isdefined( self.smokegrenadetime ) && isdefined( self.smokegrenadeposition ) ) - { - if ( self.smokegrenadetime + 14000 > capturetime ) - { - distsq = distancesquared( self.smokegrenadeposition, self.origin ); - - if ( distsq < 57600 ) - { - self addplayerstat( "capture_objective_in_smoke", 1 ); - self addweaponstat( "willy_pete_mp", "CombatRecordStat", 1 ); - } - else - { - - } - } - } -} - -hackedordestroyedequipment() -{ - if ( self hasperk( "specialty_showenemyequipment" ) ) - self addplayerstat( "perk_hacker_destroy", 1 ); -} - -destroyedequipment( weaponname ) -{ - if ( isdefined( weaponname ) && weaponname == "emp_grenade_mp" ) - { - self addplayerstat( "destroy_equipment_with_emp_grenade", 1 ); - self addweaponstat( "emp_grenade_mp", "combatRecordStat", 1 ); - } - - self addplayerstat( "destroy_equipment", 1 ); - self hackedordestroyedequipment(); -} - -destroyedtacticalinsert() -{ - if ( !isdefined( self.pers["tacticalInsertsDestroyed"] ) ) - self.pers["tacticalInsertsDestroyed"] = 0; - - self.pers["tacticalInsertsDestroyed"]++; - - if ( self.pers["tacticalInsertsDestroyed"] >= 5 ) - { - self.pers["tacticalInsertsDestroyed"] = 0; - self addplayerstat( "destroy_5_tactical_inserts", 1 ); - } -} - -bladekill() -{ - if ( !isdefined( self.pers["bladeKills"] ) ) - self.pers["bladeKills"] = 0; - - self.pers["bladeKills"]++; - - if ( self.pers["bladeKills"] >= 15 ) - { - self.pers["bladeKills"] = 0; - self addplayerstat( "kill_15_with_blade", 1 ); - } -} - -destroyedexplosive( weaponname ) -{ - self destroyedequipment( weaponname ); - self addplayerstat( "destroy_explosive", 1 ); -} - -assisted() -{ - self addplayerstat( "assist", 1 ); -} - -earnedmicrowaveassistscore( score ) -{ - self addplayerstat( "assist_score_microwave_turret", score ); - self addplayerstat( "assist_score_killstreak", score ); -} - -earnedcuavassistscore( score ) -{ - self addplayerstat( "assist_score_cuav", score ); - self addplayerstat( "assist_score_killstreak", score ); - self addweaponstat( "counteruav_mp", "assists", 1 ); -} - -earneduavassistscore( score ) -{ - self addplayerstat( "assist_score_uav", score ); - self addplayerstat( "assist_score_killstreak", score ); - self addweaponstat( "radar_mp", "assists", 1 ); -} - -earnedsatelliteassistscore( score ) -{ - self addplayerstat( "assist_score_satellite", score ); - self addplayerstat( "assist_score_killstreak", score ); - self addweaponstat( "radardirection_mp", "assists", 1 ); -} - -earnedempassistscore( score ) -{ - self addplayerstat( "assist_score_emp", score ); - self addplayerstat( "assist_score_killstreak", score ); - self addweaponstat( "emp_mp", "assists", 1 ); -} - -teamcompletedchallenge( team, challenge ) -{ - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - if ( isdefined( players[i].team ) && players[i].team == team ) - players[i] addgametypestat( challenge, 1 ); - } -} - -endedearly( winner ) -{ - if ( level.hostforcedend ) - return true; - - if ( !isdefined( winner ) ) - return true; - - if ( level.teambased ) - { - if ( winner == "tie" ) - return true; - } - - return false; -} - -getlosersteamscores( winner ) -{ - teamscores = 0; - - foreach ( team in level.teams ) - { - if ( team == winner ) - continue; - - teamscores += game["teamScores"][team]; - } - - return teamscores; -} - -didloserfailchallenge( winner, challenge ) -{ - foreach ( team in level.teams ) - { - if ( team == winner ) - continue; - - if ( game["challenge"][team][challenge] ) - return false; - } - - return true; -} - -challengegameend( data ) -{ - player = data.player; - winner = data.winner; - - if ( isdefined( level.scoreeventgameendcallback ) ) - [[ level.scoreeventgameendcallback ]]( data ); - - if ( endedearly( winner ) ) - return; - - if ( level.teambased ) - { - winnerscore = game["teamScores"][winner]; - loserscore = getlosersteamscores( winner ); - } - - switch ( level.gametype ) - { - case "tdm": - if ( player.team == winner ) - { - if ( winnerscore >= loserscore + 20 ) - player addgametypestat( "CRUSH", 1 ); - } - - mostkillsleastdeaths = 1; - - for ( index = 0; index < level.placement["all"].size; index++ ) - { - if ( level.placement["all"][index].deaths < player.deaths ) - mostkillsleastdeaths = 0; - - if ( level.placement["all"][index].kills > player.kills ) - mostkillsleastdeaths = 0; - } - - if ( mostkillsleastdeaths && player.kills > 0 && level.placement["all"].size > 3 ) - player addgametypestat( "most_kills_least_deaths", 1 ); - - break; - case "dm": - if ( player == winner ) - { - if ( level.placement["all"].size >= 2 ) - { - secondplace = level.placement["all"][1]; - - if ( player.kills >= secondplace.kills + 7 ) - player addgametypestat( "CRUSH", 1 ); - } - } - - break; - case "ctf": - if ( player.team == winner ) - { - if ( loserscore == 0 ) - player addgametypestat( "SHUT_OUT", 1 ); - } - - break; - case "dom": - if ( player.team == winner ) - { - if ( winnerscore >= loserscore + 70 ) - player addgametypestat( "CRUSH", 1 ); - } - - break; - case "hq": - if ( player.team == winner && winnerscore > 0 ) - { - if ( winnerscore >= loserscore + 70 ) - player addgametypestat( "CRUSH", 1 ); - } - - break; - case "koth": - if ( player.team == winner && winnerscore > 0 ) - { - if ( winnerscore >= loserscore + 70 ) - player addgametypestat( "CRUSH", 1 ); - } - - if ( player.team == winner && winnerscore > 0 ) - { - if ( winnerscore >= loserscore + 110 ) - player addgametypestat( "ANNIHILATION", 1 ); - } - - break; - case "dem": - if ( player.team == game["defenders"] && player.team == winner ) - { - if ( loserscore == 0 ) - player addgametypestat( "SHUT_OUT", 1 ); - } - - break; - case "sd": - if ( player.team == winner ) - { - if ( loserscore <= 1 ) - player addgametypestat( "CRUSH", 1 ); - } - default: - break; - } -} - -multikill( killcount, weapon ) -{ - if ( killcount >= 3 && isdefined( self.lastkillwheninjured ) ) - { - if ( self.lastkillwheninjured + 5000 > gettime() ) - self addplayerstat( "multikill_3_near_death", 1 ); - } -} - -domattackermultikill( killcount ) -{ - self addgametypestat( "kill_2_enemies_capturing_your_objective", 1 ); -} - -totaldomination( team ) -{ - teamcompletedchallenge( team, "control_3_points_3_minutes" ); -} - -holdflagentirematch( team, label ) -{ - switch ( label ) - { - case "_a": - event = "hold_a_entire_match"; - break; - case "_b": - event = "hold_b_entire_match"; - break; - case "_c": - event = "hold_c_entire_match"; - break; - default: - return; - } - - teamcompletedchallenge( team, event ); -} - -capturedbfirstminute() -{ - self addgametypestat( "capture_b_first_minute", 1 ); -} - -controlzoneentirely( team ) -{ - teamcompletedchallenge( team, "control_zone_entirely" ); -} - -multi_lmg_smg_kill() -{ - self addplayerstat( "multikill_3_lmg_or_smg_hip_fire", 1 ); -} - -killedzoneattacker( weapon ) -{ - if ( weapon == "planemortar_mp" || weapon == "remote_missile_missile_mp" || weapon == "remote_missile_bomblet_mp" ) - self thread updatezonemultikills(); -} - -killeddog() -{ - origin = self.origin; - - if ( level.teambased ) - { - teammates = get_team_alive_players_s( self.team ); - - foreach ( player in teammates.a ) - { - if ( player == self ) - continue; - - distsq = distancesquared( origin, player.origin ); - - if ( distsq < 57600 ) - { - self addplayerstat( "killed_dog_close_to_teammate", 1 ); - break; - } - } - } -} - -updatezonemultikills() -{ - self endon( "disconnect" ); - level endon( "game_ended" ); - self notify( "updateRecentZoneKills" ); - self endon( "updateRecentZoneKills" ); - - if ( !isdefined( self.recentzonekillcount ) ) - self.recentzonekillcount = 0; - - self.recentzonekillcount++; - wait 4.0; - - if ( self.recentzonekillcount > 1 ) - self addplayerstat( "multikill_2_zone_attackers", 1 ); - - self.recentzonekillcount = 0; -} - -multi_rcbomb_kill() -{ - self addplayerstat( "muiltikill_2_with_rcbomb", 1 ); -} - -multi_remotemissile_kill() -{ - self addplayerstat( "multikill_3_remote_missile", 1 ); -} - -multi_mgl_kill() -{ - self addplayerstat( "multikill_3_with_mgl", 1 ); -} - -immediatecapture() -{ - self addgametypestat( "immediate_capture", 1 ); -} - -killedlastcontester() -{ - self addgametypestat( "contest_then_capture", 1 ); -} - -bothbombsdetonatewithintime() -{ - self addgametypestat( "both_bombs_detonate_10_seconds", 1 ); -} - -fullclipnomisses( weaponclass, weapon ) -{ - -} - -destroyedturret( weaponname ) -{ - self destroyscorestreak( weaponname ); - self addplayerstat( "destroy_turret", 1 ); -} - -calledincarepackage() -{ - self.pers["carepackagesCalled"]++; - - if ( self.pers["carepackagesCalled"] >= 3 ) - { - self addplayerstat( "call_in_3_care_packages", 1 ); - self.pers["carepackagesCalled"] = 0; - } -} - -destroyedhelicopter( attacker, weapon, damagetype, playercontrolled ) -{ - attacker destroyscorestreak( weapon ); - - if ( damagetype == "MOD_RIFLE_BULLET" || damagetype == "MOD_PISTOL_BULLET" ) - attacker addplayerstat( "destroyed_helicopter_with_bullet", 1 ); -} - -destroyedqrdrone( damagetype, weapon ) -{ - self destroyscorestreak( weapon ); - self addplayerstat( "destroy_qrdrone", 1 ); - - if ( damagetype == "MOD_RIFLE_BULLET" || damagetype == "MOD_PISTOL_BULLET" ) - self addplayerstat( "destroyed_qrdrone_with_bullet", 1 ); - - self destroyedplayercontrolledaircraft(); -} - -destroyedplayercontrolledaircraft() -{ - if ( self hasperk( "specialty_noname" ) ) - self addplayerstat( "destroy_helicopter", 1 ); -} - -destroyedaircraft( attacker, weapon ) -{ - attacker destroyscorestreak( weapon ); - - if ( isdefined( weapon ) ) - { - if ( weapon == "emp_mp" || weapon == "killstreak_emp_mp" ) - attacker addplayerstat( "destroy_aircraft_with_emp", 1 ); - else if ( weapon == "missile_drone_projectile_mp" || weapon == "missile_drone_mp" ) - attacker addplayerstat( "destroy_aircraft_with_missile_drone", 1 ); - } - - if ( attacker hasperk( "specialty_nottargetedbyairsupport" ) ) - attacker addplayerstat( "perk_nottargetedbyairsupport_destroy_aircraft", 1 ); - - attacker addplayerstat( "destroy_aircraft", 1 ); -} - -killstreakten() -{ - primary = self getloadoutitem( self.class_num, "primary" ); - - if ( primary != 0 ) - return; - - secondary = self getloadoutitem( self.class_num, "secondary" ); - - if ( secondary != 0 ) - return; - - primarygrenade = self getloadoutitem( self.class_num, "primarygrenade" ); - - if ( primarygrenade != 0 ) - return; - - specialgrenade = self getloadoutitem( self.class_num, "specialgrenade" ); - - if ( specialgrenade != 0 ) - return; - - for ( numspecialties = 0; numspecialties < level.maxspecialties; numspecialties++ ) - { - perk = self getloadoutitem( self.class_num, "specialty" + ( numspecialties + 1 ) ); - - if ( perk != 0 ) - return; - } - - self addplayerstat( "killstreak_10_no_weapons_perks", 1 ); -} - -scavengedgrenade() -{ - self endon( "disconnect" ); - self endon( "death" ); - self notify( "scavengedGrenade" ); - self endon( "scavengedGrenade" ); - - for (;;) - { - self waittill( "lethalGrenadeKill" ); - - self addplayerstat( "kill_with_resupplied_lethal_grenade", 1 ); - } -} - -stunnedtankwithempgrenade( attacker ) -{ - attacker addplayerstat( "stun_aitank_wIth_emp_grenade", 1 ); -} - -playerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, shitloc, attackerstance ) -{ -/# - print( level.gametype ); -#/ - self.anglesondeath = self getplayerangles(); - - if ( isdefined( attacker ) ) - attacker.anglesonkill = attacker getplayerangles(); - - if ( !isdefined( sweapon ) ) - sweapon = "none"; - - self endon( "disconnect" ); - data = spawnstruct(); - data.victim = self; - data.victimstance = self getstance(); - data.einflictor = einflictor; - data.attacker = attacker; - data.attackerstance = attackerstance; - data.idamage = idamage; - data.smeansofdeath = smeansofdeath; - data.sweapon = sweapon; - data.shitloc = shitloc; - data.time = gettime(); - - if ( isdefined( einflictor ) && isdefined( einflictor.lastweaponbeforetoss ) ) - data.lastweaponbeforetoss = einflictor.lastweaponbeforetoss; - - if ( isdefined( einflictor ) && isdefined( einflictor.ownerweaponatlaunch ) ) - data.ownerweaponatlaunch = einflictor.ownerweaponatlaunch; - - waslockingon = 0; - - if ( isdefined( einflictor.locking_on ) ) - waslockingon |= einflictor.locking_on; - - if ( isdefined( einflictor.locked_on ) ) - waslockingon |= einflictor.locked_on; - - waslockingon &= 1 << data.victim.entnum; - - if ( waslockingon != 0 ) - data.waslockingon = 1; - else - data.waslockingon = 0; - - data.washacked = einflictor maps\mp\_utility::ishacked(); - data.wasplanting = data.victim.isplanting; - - if ( !isdefined( data.wasplanting ) ) - data.wasplanting = 0; - - data.wasdefusing = data.victim.isdefusing; - - if ( !isdefined( data.wasdefusing ) ) - data.wasdefusing = 0; - - data.victimweapon = data.victim.currentweapon; - data.victimonground = data.victim isonground(); - - if ( isplayer( attacker ) ) - { - data.attackeronground = data.attacker isonground(); - - if ( !isdefined( data.attackerstance ) ) - data.attackerstance = data.attacker getstance(); - } - else - { - data.attackeronground = 0; - data.attackerstance = "stand"; - } - - waitandprocessplayerkilledcallback( data ); - data.attacker notify( "playerKilledChallengesProcessed" ); -} - -waittillslowprocessallowed() -{ - while ( level.lastslowprocessframe == gettime() ) - wait 0.05; - - level.lastslowprocessframe = gettime(); -} - -doscoreeventcallback( callback, data ) -{ - if ( !isdefined( level.scoreeventcallbacks ) ) - return; - - if ( !isdefined( level.scoreeventcallbacks[callback] ) ) - return; - - if ( isdefined( data ) ) - { - for ( i = 0; i < level.scoreeventcallbacks[callback].size; i++ ) - thread [[ level.scoreeventcallbacks[callback][i] ]]( data ); - } - else - { - for ( i = 0; i < level.scoreeventcallbacks[callback].size; i++ ) - thread [[ level.scoreeventcallbacks[callback][i] ]](); - } -} - -waitandprocessplayerkilledcallback( data ) -{ - if ( isdefined( data.attacker ) ) - data.attacker endon( "disconnect" ); - - wait 0.05; - waittillslowprocessallowed(); - level thread dochallengecallback( "playerKilled", data ); - level thread doscoreeventcallback( "playerKilled", data ); -} - -weaponisknife( weapon ) -{ - if ( weapon == "knife_held_mp" || weapon == "knife_mp" || weapon == "knife_ballistic_mp" ) - return true; - - return false; -} - -eventreceived( eventname ) -{ - self endon( "disconnect" ); - waittillslowprocessallowed(); - - switch ( level.gametype ) - { - case "tdm": - if ( eventname == "killstreak_10" ) - self addgametypestat( "killstreak_10", 1 ); - else if ( eventname == "killstreak_15" ) - self addgametypestat( "killstreak_15", 1 ); - else if ( eventname == "killstreak_20" ) - self addgametypestat( "killstreak_20", 1 ); - else if ( eventname == "multikill_3" ) - self addgametypestat( "multikill_3", 1 ); - else if ( eventname == "kill_enemy_who_killed_teammate" ) - self addgametypestat( "kill_enemy_who_killed_teammate", 1 ); - else if ( eventname == "kill_enemy_injuring_teammate" ) - self addgametypestat( "kill_enemy_injuring_teammate", 1 ); - - break; - case "dm": - if ( eventname == "killstreak_10" ) - self addgametypestat( "killstreak_10", 1 ); - else if ( eventname == "killstreak_15" ) - self addgametypestat( "killstreak_15", 1 ); - else if ( eventname == "killstreak_20" ) - self addgametypestat( "killstreak_20", 1 ); - else if ( eventname == "killstreak_30" ) - self addgametypestat( "killstreak_30", 1 ); - - break; - case "sd": - if ( eventname == "defused_bomb_last_man_alive" ) - self addgametypestat( "defused_bomb_last_man_alive", 1 ); - else if ( eventname == "elimination_and_last_player_alive" ) - self addgametypestat( "elimination_and_last_player_alive", 1 ); - else if ( eventname == "killed_bomb_planter" ) - self addgametypestat( "killed_bomb_planter", 1 ); - else if ( eventname == "killed_bomb_defuser" ) - self addgametypestat( "killed_bomb_defuser", 1 ); - - break; - case "ctf": - if ( eventname == "kill_flag_carrier" ) - self addgametypestat( "kill_flag_carrier", 1 ); - else if ( eventname == "defend_flag_carrier" ) - self addgametypestat( "defend_flag_carrier", 1 ); - - break; - case "dem": - if ( eventname == "killed_bomb_planter" ) - self addgametypestat( "killed_bomb_planter", 1 ); - else if ( eventname == "killed_bomb_defuser" ) - self addgametypestat( "killed_bomb_defuser", 1 ); - - break; - default: - break; - } -} - -monitor_player_sprint() -{ - self endon( "disconnect" ); - self endon( "death" ); - - for ( self.lastsprinttime = undefined; 1; self.lastsprinttime = gettime() ) - { - self waittill( "sprint_begin" ); - - self waittill( "sprint_end" ); - } -} diff --git a/Multiplayer Core/patch_mp/maps/mp/_createfx.gsc b/Multiplayer Core/patch_mp/maps/mp/_createfx.gsc deleted file mode 100644 index 4af95df..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/_createfx.gsc +++ /dev/null @@ -1,2937 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\_createfxmenu; -#include maps\mp\_createfxundo; -#include maps\mp\_fx; -#include maps\mp\_script_gen; - -createfx() -{ -/# - println( "^2Running CreateFX 2.0" ); -#/ - if ( ismp() ) - { - init_mp_paths(); - level.timelimitoverride = 1; - } - else - init_sp_paths(); - - precachemodel( "fx_axis_createfx" ); - precacheshader( "black" ); - - if ( getdvar( "createfx_scaleid" ) == "" ) - setdvar( "createfx_scaleid", "0.5" ); - - if ( getdvar( "createfx_print_frames" ) == "" ) - setdvar( "createfx_print_frames", "3" ); - - if ( getdvar( "createfx_drawaxis" ) == "" ) - setdvar( "createfx_drawaxis", "1" ); - - if ( getdvar( "createfx_drawaxis_range" ) == "" ) - setdvar( "createfx_drawaxis_range", "2000" ); - - if ( getdvar( "createfx_autosave_time" ) == "" ) - setdvar( "createfx_autosave_time", "300" ); - - if ( getdvar( "createfx_oneshot_min_delay" ) == "" ) - setdvar( "createfx_oneshot_min_delay", "-100" ); - - if ( getdvar( "createfx_oneshot_max_delay" ) == "" ) - setdvar( "createfx_oneshot_max_delay", "-15" ); - - flag_init( "createfx_saving" ); - - if ( !isdefined( level.createfx ) ) - level.createfx = []; - - if ( !isdefined( level.cfx_uniqueid ) ) - level.cfx_uniqueid = 0; - - level.cfx_last_action = "none"; - - if ( !ismp() ) - level thread [[ level.cfx_func_run_gump_func ]](); - - if ( isdefined( level.createfx_callback_thread ) ) - level thread [[ level.createfx_callback_thread ]](); - - if ( ismp() ) - { - level.callbackplayerdisconnect = ::empty; - level.callbackplayerdamage = ::damage_void; - level.callbackplayerkilled = ::empty; - level.callbackplayerconnect = ::callback_playerconnect; - - while ( !isdefined( level.player ) ) - wait 0.05; - - thread createfxdelay(); - } - - level.is_camera_on = 0; - thread createfxlogic(); - - level waittill( "eternity" ); -} - -fx_init() -{ - if ( ismp() ) - init_client_mp_variables(); - else - init_client_sp_variables(); - - level.exploderfunction = level.cfx_exploder_before; - waittillframeend; - waittillframeend; - level.exploderfunction = level.cfx_exploder_after; - level.non_fx_ents = 0; - - if ( level.createfx_enabled ) - { - triggers = getentarray( "trigger_multiple", "classname" ); - - for ( i = 0; i < triggers.size; i++ ) - triggers[i] delete(); - - triggers = getentarray( "trigger_once", "classname" ); - - for ( i = 0; i < triggers.size; i++ ) - triggers[i] delete(); - - triggers = getentarray( "trigger_box", "classname" ); - - for ( i = 0; i < triggers.size; i++ ) - triggers[i] delete(); - - triggers = getentarray( "trigger_radius", "classname" ); - - for ( i = 0; i < triggers.size; i++ ) - triggers[i] delete(); - - triggers = getentarray( "trigger_lookat", "classname" ); - - for ( i = 0; i < triggers.size; i++ ) - triggers[i] delete(); - - triggers = getentarray( "trigger_damage", "classname" ); - - for ( i = 0; i < triggers.size; i++ ) - triggers[i] delete(); - - sm = getentarray( "spawn_manager", "classname" ); - - for ( i = 0; i < sm.size; i++ ) - sm[i] delete(); - - delete_spawns(); - - if ( !ismp() ) - { - delete_arrays_in_sp(); -/# - println( "We're not in MP!" ); -#/ - } - } - - for ( i = 0; i < level.createfxent.size; i++ ) - { - ent = level.createfxent[i]; - ent set_forward_and_up_vectors(); - - if ( level.clientscripts ) - { - if ( !level.createfx_enabled ) - continue; - } - - if ( isdefined( ent.model ) ) - level.non_fx_ents++; - - if ( ent.v["type"] == "loopfx" ) - ent thread [[ level.cfx_func_loopfx ]](); - - if ( ent.v["type"] == "oneshotfx" ) - ent thread [[ level.cfx_func_oneshotfx ]](); - - if ( ent.v["type"] == "soundfx" ) - ent thread [[ level.cfx_func_soundfx ]](); - } -} - -add_effect( name, effect ) -{ - if ( !isdefined( level._effect ) ) - level._effect = []; - - level._effect[name] = loadfx( effect ); -} - -createeffect( type, fxid ) -{ - ent = undefined; - - if ( !isdefined( level.createfx_enabled ) ) - level.createfx_enabled = getdvar( "createfx" ) != ""; - - if ( !isdefined( level.createfxent ) ) - level.createfxent = []; - - if ( level.createfx_enabled ) - { - if ( !isdefined( level.cfx_uniqueid ) ) - level.cfx_uniqueid = 0; - - ent = spawnstruct(); - ent.uniqueid = level.cfx_uniqueid; - level.cfx_uniqueid++; - } - else if ( type == "exploder" ) - ent = spawnstruct(); - else - { - if ( !isdefined( level._fake_createfx_struct ) ) - level._fake_createfx_struct = spawnstruct(); - - ent = level._fake_createfx_struct; - } - - level.createfxent[level.createfxent.size] = ent; - ent.v = []; - ent.v["type"] = type; - ent.v["fxid"] = fxid; - ent.v["angles"] = ( 0, 0, 0 ); - ent.v["origin"] = ( 0, 0, 0 ); - ent.drawn = 1; - return ent; -} - -createloopsound() -{ - ent = spawnstruct(); - - if ( !isdefined( level.createfxent ) ) - level.createfxent = []; - - level.createfxent[level.createfxent.size] = ent; - ent.v = []; - ent.v["type"] = "soundfx"; - ent.v["fxid"] = "No FX"; - ent.v["soundalias"] = "nil"; - ent.v["angles"] = ( 0, 0, 0 ); - ent.v["origin"] = ( 0, 0, 0 ); - ent.drawn = 1; - return ent; -} - -set_forward_and_up_vectors() -{ - self.v["up"] = anglestoup( self.v["angles"] ); - self.v["forward"] = anglestoforward( self.v["angles"] ); -} - -createfxlogic() -{ - waittillframeend; - menu_init(); - - if ( !ismp() ) - { - players = get_players(); - - if ( !isdefined( players ) || players.size == 0 ) - level waittill( "first_player_ready" ); - } -/# - adddebugcommand( "noclip" ); -#/ - if ( !isdefined( level._effect ) ) - level._effect = []; - - if ( getdvar( "createfx_map" ) == "" ) - setdvar( "createfx_map", level.script ); - else if ( getdvar( "createfx_map" ) == level.script ) - { - if ( !ismp() ) - { - playerpos = []; - playerpos[0] = getdvarint( _hash_274F266C ); - playerpos[1] = getdvarint( _hash_274F266D ); - playerpos[2] = getdvarint( _hash_274F266E ); - player = get_players()[0]; - player setorigin( ( playerpos[0], playerpos[1], playerpos[2] ) ); - } - } -/# - filename = level.cfx_server_scriptdata + level.script + "_fx.gsc"; - file = openfile( filename, "append" ); - level.write_error = ""; - - if ( file == -1 ) - level.write_error = filename; - else - closefile( file ); -#/ - level.createfxhudelements = []; - level.createfx_hudelements = 100; - stroffsetx = []; - stroffsety = []; - stroffsetx[0] = 0; - stroffsety[0] = 0; - stroffsetx[1] = 1; - stroffsety[1] = 1; - stroffsetx[2] = -2; - stroffsety[2] = 1; - setdvar( "fx", "nil" ); - crosshair = newdebughudelem(); - crosshair.location = 0; - crosshair.alignx = "center"; - crosshair.aligny = "middle"; - crosshair.foreground = 1; - crosshair.fontscale = 2; - crosshair.sort = 20; - crosshair.alpha = 1; - crosshair.x = 320; - crosshair.y = 233; - crosshair settext( "." ); - center_text_init(); - level.cleartextmarker = newdebughudelem(); - level.cleartextmarker.alpha = 0; - level.cleartextmarker settext( "marker" ); - - for ( i = 0; i < level.createfx_hudelements; i++ ) - { - newstrarray = []; - - for ( p = 0; p < 2; p++ ) - { - newstr = newhudelem(); - newstr.alignx = "left"; - newstr.location = 0; - newstr.foreground = 1; - newstr.fontscale = 1.1; - newstr.sort = 20 - p; - newstr.alpha = 1; - newstr.x = 0 + stroffsetx[p]; - newstr.y = 60 + stroffsety[p] + i * 15; - - if ( p > 0 ) - newstr.color = ( 0, 0, 0 ); - - newstrarray[newstrarray.size] = newstr; - } - - level.createfxhudelements[i] = newstrarray; - } - - level.selectedmove_up = 0; - level.selectedmove_forward = 0; - level.selectedmove_right = 0; - level.selectedrotate_pitch = 0; - level.selectedrotate_roll = 0; - level.selectedrotate_yaw = 0; - level.selected_fx = []; - level.selected_fx_ents = []; - level.createfx_lockedlist = []; - level.createfx_lockedlist["escape"] = 1; - level.createfx_lockedlist["BUTTON_LSHLDR"] = 1; - level.createfx_lockedlist["BUTTON_RSHLDR"] = 1; - level.createfx_lockedlist["mouse1"] = 1; - level.createfx_lockedlist["ctrl"] = 1; - level.createfx_draw_enabled = 1; - level.buttonisheld = []; - axismode = 0; - colors = []; - colors["loopfx"]["selected"] = ( 1.0, 1.0, 0.2 ); - colors["loopfx"]["highlighted"] = ( 0.4, 0.95, 1.0 ); - colors["loopfx"]["default"] = ( 0.3, 0.5, 1.0 ); - colors["oneshotfx"]["selected"] = ( 1.0, 1.0, 0.2 ); - colors["oneshotfx"]["highlighted"] = ( 0.33, 0.97, 1.0 ); - colors["oneshotfx"]["default"] = ( 0.1, 0.73, 0.73 ); - colors["exploder"]["selected"] = ( 1.0, 1.0, 0.2 ); - colors["exploder"]["highlighted"] = ( 1.0, 0.1, 0.1 ); - colors["exploder"]["default"] = ( 1.0, 0.1, 0.1 ); - colors["rainfx"]["selected"] = ( 1.0, 1.0, 0.2 ); - colors["rainfx"]["highlighted"] = ( 0.95, 0.4, 0.95 ); - colors["rainfx"]["default"] = ( 0.78, 0.0, 0.73 ); - colors["soundfx"]["selected"] = ( 1.0, 1.0, 0.2 ); - colors["soundfx"]["highlighted"] = ( 0.5, 1.0, 0.75 ); - colors["soundfx"]["default"] = ( 0.2, 0.9, 0.2 ); - lasthighlightedent = undefined; - level.fx_rotating = 0; - setmenu( "none" ); - level.createfx_selecting = 0; - level.createfx_last_player_origin = ( 0, 0, 0 ); - level.createfx_last_player_forward = ( 0, 0, 0 ); - level.createfx_last_view_change_test = 0; - player = get_players()[0]; - black = newdebughudelem(); - black.x = -120; - black.y = 200; - black.foreground = 0; - black setshader( "black", 250, 160 ); - black.alpha = 0; - level.createfx_inputlocked = 0; - help_on_last_frame = 0; - - for ( i = 0; i < level.createfxent.size; i++ ) - { - ent = level.createfxent[i]; - ent post_entity_creation_function(); - } - - thread draw_distance(); - lastselectentity = undefined; - thread createfx_autosave(); - - if ( !ismp() ) - make_sp_player_invulnerable( player ); - - for (;;) - { - player = get_players()[0]; - changedselectedents = 0; - right = anglestoright( player getplayerangles() ); - forward = anglestoforward( player getplayerangles() ); - up = anglestoup( player getplayerangles() ); - dot = 0.85; - placeent_vector = vectorscale( forward, 750 ); - level.createfxcursor = bullettrace( player geteye(), player geteye() + placeent_vector, 0, undefined ); - highlightedent = undefined; - level.buttonclick = []; - level.button_is_kb = []; - process_button_held_and_clicked(); - ctrlheld = button_is_held( "ctrl", "BUTTON_LSHLDR" ); - shiftheld = button_is_held( "shift" ); - functionheld = button_is_held( "f" ); - leftclick = button_is_clicked( "mouse1", "BUTTON_A" ); - leftheld = button_is_held( "mouse1", "BUTTON_A" ); - create_fx_menu(); - - if ( button_is_clicked( "BUTTON_X" ) || shiftheld && button_is_clicked( "x" ) ) - axismode = !axismode; - - if ( button_is_clicked( "F2" ) || functionheld && button_is_clicked( "2" ) ) - toggle_createfx_drawing(); - - if ( button_is_clicked( "F3" ) || functionheld && button_is_clicked( "3" ) ) - print_ambient_fx_inventory(); - - if ( button_is_clicked( "F5" ) || functionheld && button_is_clicked( "5" ) ) - createfx_save(); - - if ( button_is_clicked( "ins", "i" ) ) - insert_effect(); - - if ( button_is_clicked( "c" ) ) - { - if ( level.is_camera_on == 0 ) - { -/# - adddebugcommand( "noclip" ); -#/ - level thread handle_camera(); - level.is_camera_on = 1; - } - else if ( level.is_camera_on == 1 ) - { -/# - adddebugcommand( "noclip" ); -#/ - level notify( "new_camera" ); - level.is_camera_on = 0; - axismode = 0; - } - } - - if ( button_is_held( "BUTTON_RTRIG" ) && level.is_camera_on ) - axismode = 1; - else if ( !button_is_held( "BUTTON_RTRIG" ) && level.is_camera_on ) - axismode = 0; - - if ( button_is_clicked( "del" ) || !shiftheld && button_is_clicked( "d" ) ) - delete_pressed(); - - if ( button_is_clicked( "end" ) || shiftheld && button_is_clicked( "d" ) ) - { - drop_selection_to_ground(); - changedselectedents = 1; - } - - if ( button_is_clicked( "s" ) ) - { - setmenu( "select_by_property" ); - wait 0.05; - } - - if ( isdefined( level.cfx_selected_prop ) ) - { - if ( ctrlheld ) - select_ents_by_property( level.cfx_selected_prop, 1 ); - else - select_ents_by_property( level.cfx_selected_prop ); - - level.cfx_selected_prop = undefined; - } - - if ( button_is_clicked( "j" ) ) - { - setmenu( "jump_to_effect" ); - draw_effects_list( "Select effect to jump to:" ); - } - - if ( button_is_clicked( "escape" ) ) - clear_settable_fx(); - - if ( button_is_clicked( "space" ) && !shiftheld ) - set_off_exploders(); - - if ( button_is_clicked( "space" ) && shiftheld ) - turn_off_exploders(); - - if ( button_is_clicked( "tab", "BUTTON_RSHLDR" ) ) - { - move_selection_to_cursor(); - changedselectedents = 1; - } - - if ( button_is_clicked( "z" ) ) - { - if ( shiftheld ) - { - - } - else - undo(); - } - - if ( button_is_held( "q", "F1" ) ) - { - help_on_last_frame = 1; - show_help(); - wait 0.05; - continue; - } - else if ( help_on_last_frame == 1 ) - { - clear_fx_hudelements(); - help_on_last_frame = 0; - } - - if ( button_is_clicked( "BUTTON_LSTICK" ) && !ctrlheld ) - copy_ents(); - - if ( button_is_clicked( "BUTTON_RSTICK" ) ) - { - if ( ctrlheld ) - paste_ents_onto_ents(); - else - paste_ents(); - } - - if ( isdefined( level.selected_fx_option_index ) ) - menu_fx_option_set(); - - if ( button_is_held( "BUTTON_RTRIG" ) && button_is_held( "BUTTON_LTRIG" ) ) - { - move_player_around_map_fast(); - wait 0.25; - continue; - } - - if ( menu( "none" ) ) - { - if ( button_is_clicked( "rightarrow" ) ) - move_player_to_next_same_effect( 1, lastselectentity ); - else if ( button_is_clicked( "leftarrow" ) ) - move_player_to_next_same_effect( 0, lastselectentity ); - } - - if ( level.write_error != "" ) - { - level notify( "write_error" ); - thread write_error_msg( level.write_error ); - level.write_error = ""; - } - - highlightedent = level.fx_highlightedent; - - if ( leftclick || gettime() - level.createfx_last_view_change_test > 250 ) - { - if ( leftclick || vector_changed( level.createfx_last_player_origin, player.origin ) || dot_changed( level.createfx_last_player_forward, forward ) ) - { - for ( i = 0; i < level.createfxent.size; i++ ) - { - ent = level.createfxent[i]; - - if ( !ent.drawn ) - continue; - - difference = vectornormalize( ent.v["origin"] - player.origin + vectorscale( ( 0, 0, 1 ), 55.0 ) ); - newdot = vectordot( forward, difference ); - - if ( newdot < dot ) - continue; - - if ( newdot == dot ) - { - if ( ent_is_selected( ent ) ) - continue; - } - - dot = newdot; - highlightedent = ent; - highlightedent.last_fx_index = i; - } - - level.fx_highlightedent = highlightedent; - level.createfx_last_player_origin = player.origin; - level.createfx_last_player_forward = forward; - } - - level.createfx_last_view_change_test = gettime(); - } - - if ( isdefined( highlightedent ) ) - { - if ( isdefined( lasthighlightedent ) ) - { - if ( lasthighlightedent != highlightedent ) - { - if ( !ent_is_selected( lasthighlightedent ) ) - lasthighlightedent thread entity_highlight_disable(); - - if ( !ent_is_selected( highlightedent ) ) - highlightedent thread entity_highlight_enable(); - } - } - else if ( !ent_is_selected( highlightedent ) ) - highlightedent thread entity_highlight_enable(); - } - - manipulate_createfx_ents( highlightedent, leftclick, leftheld, ctrlheld, colors, right ); - - if ( axismode && level.selected_fx_ents.size > 0 ) - { - thread process_fx_rotater(); - - if ( button_is_clicked( "enter", "r" ) ) - reset_axis_of_selected_ents(); - - if ( button_is_clicked( "v" ) ) - copy_angles_of_selected_ents(); - - if ( getdvarint( "createfx_drawaxis" ) == 1 ) - { - for ( i = 0; i < level.selected_fx_ents.size; i++ ) - level.selected_fx_ents[i] draw_axis(); - } - - if ( level.selectedrotate_pitch != 0 || level.selectedrotate_yaw != 0 || level.selectedrotate_roll != 0 ) - changedselectedents = 1; - - wait 0.05; - } - else - { - stop_drawing_axis_models(); - selectedmove_vector = get_selected_move_vector(); - - if ( distancesquared( ( 0, 0, 0 ), selectedmove_vector ) > 0 ) - { - changedselectedents = 1; - - if ( level.cfx_last_action != "translate" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "translate"; - } - } - - for ( i = 0; i < level.selected_fx_ents.size; i++ ) - { - ent = level.selected_fx_ents[i]; - - if ( isdefined( ent.model ) ) - continue; - - ent.v["origin"] += selectedmove_vector; - } - - wait 0.05; - } - - if ( changedselectedents ) - update_selected_entities(); - - lasthighlightedent = highlightedent; - - if ( last_selected_entity_has_changed( lastselectentity ) ) - { - level.effect_list_offset = 0; - clear_settable_fx(); - setmenu( "none" ); - } - - if ( level.selected_fx_ents.size ) - { - lastselectentity = level.selected_fx_ents[level.selected_fx_ents.size - 1]; - continue; - } - - lastselectentity = undefined; - } -} - -toggle_createfx_drawing() -{ - level.createfx_draw_enabled = !level.createfx_draw_enabled; -} - -manipulate_createfx_ents( highlightedent, leftclick, leftheld, ctrlheld, colors, right ) -{ - if ( !level.createfx_draw_enabled ) - { - clear_fx_hudelements(); - return; - } - - scale = getdvarfloat( "createfx_scaleid" ); - print_frames = getdvarint( "createfx_print_frames" ); - - if ( !isdefined( level.createfx_manipulate_offset ) ) - level.createfx_manipulate_offset = 0; - - offset = level.createfx_manipulate_offset; - level.createfx_manipulate_offset = ( level.createfx_manipulate_offset + 1 ) % print_frames; - - for ( i = offset; i < level.createfxent.size; i += print_frames ) - { - ent = level.createfxent[i]; - - if ( !ent.drawn ) - continue; - - if ( isdefined( highlightedent ) && ent == highlightedent ) - { - continue; - continue; - } - - colorindex = "default"; - - if ( index_is_selected( i ) ) - colorindex = "selected"; -/# - print3d( ent.v["origin"], ".", colors[ent.v["type"]][colorindex], 1, scale, print_frames ); -#/ - if ( ent.textalpha > 0 ) - { - printright = vectorscale( right, ent.v["fxid"].size * -2.93 * scale ); - printup = ( 0, 0, 15 * scale ); -/# - print3d( ent.v["origin"] + printright + printup, ent.v["fxid"], colors[ent.v["type"]][colorindex], ent.textalpha, scale, print_frames ); -#/ - } - } - - if ( isdefined( highlightedent ) ) - { - if ( !entities_are_selected() ) - display_fx_info( highlightedent ); - - if ( leftclick ) - { - entwasselected = index_is_selected( highlightedent.last_fx_index ); - level.createfx_selecting = !entwasselected; - - if ( !ctrlheld ) - { - selectedsize = level.selected_fx_ents.size; - clear_entity_selection(); - - if ( entwasselected && selectedsize == 1 ) - select_entity( highlightedent.last_fx_index, highlightedent ); - } - - toggle_entity_selection( highlightedent.last_fx_index, highlightedent ); - } - else if ( leftheld ) - { - if ( ctrlheld ) - { - if ( level.createfx_selecting ) - select_entity( highlightedent.last_fx_index, highlightedent ); - - if ( !level.createfx_selecting ) - deselect_entity( highlightedent.last_fx_index, highlightedent ); - } - } - - colorindex = "highlighted"; - - if ( index_is_selected( highlightedent.last_fx_index ) ) - colorindex = "selected"; -/# - print3d( highlightedent.v["origin"], ".", colors[highlightedent.v["type"]][colorindex], 1, scale, 1 ); -#/ - if ( highlightedent.textalpha > 0 ) - { - printright = vectorscale( right, highlightedent.v["fxid"].size * -2.93 * scale ); - printup = ( 0, 0, 15 * scale ); -/# - print3d( highlightedent.v["origin"] + printright + printup, highlightedent.v["fxid"], colors[highlightedent.v["type"]][colorindex], highlightedent.textalpha, scale, 1 ); -#/ - } - } -} - -clear_settable_fx() -{ - level.createfx_inputlocked = 0; - setdvar( "fx", "nil" ); - level.selected_fx_option_index = undefined; - reset_fx_hud_colors(); -} - -reset_fx_hud_colors() -{ - for ( i = 0; i < level.createfx_hudelements; i++ ) - level.createfxhudelements[i][0].color = ( 1, 1, 1 ); -} - -button_is_held( name, name2 ) -{ - if ( isdefined( name2 ) ) - { - if ( isdefined( level.buttonisheld[name2] ) ) - return 1; - } - - return isdefined( level.buttonisheld[name] ); -} - -button_is_clicked( name, name2 ) -{ - if ( isdefined( name2 ) ) - { - if ( isdefined( level.buttonclick[name2] ) ) - return 1; - } - - return isdefined( level.buttonclick[name] ); -} - -toggle_entity_selection( index, ent ) -{ - if ( isdefined( level.selected_fx[index] ) ) - deselect_entity( index, ent ); - else - select_entity( index, ent ); -} - -select_entity( index, ent, skip_undo ) -{ - if ( isdefined( level.selected_fx[index] ) ) - return; - - ent.last_fx_index = index; - - if ( !isdefined( skip_undo ) && level.cfx_last_action != "none" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "none"; - } - - clear_settable_fx(); - level notify( "new_ent_selection" ); - ent thread entity_highlight_enable(); - level.selected_fx[index] = 1; - level.selected_fx_ents[level.selected_fx_ents.size] = ent; -} - -ent_is_highlighted( ent ) -{ - if ( !isdefined( level.fx_highlightedent ) ) - return 0; - - return ent == level.fx_highlightedent; -} - -deselect_entity( index, ent ) -{ - if ( !isdefined( level.selected_fx[index] ) ) - return; - - if ( level.cfx_last_action != "none" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "none"; - } - - clear_settable_fx(); - level notify( "new_ent_selection" ); - level.selected_fx[index] = undefined; - - if ( !ent_is_highlighted( ent ) ) - ent thread entity_highlight_disable(); - - newarray = []; - - for ( i = 0; i < level.selected_fx_ents.size; i++ ) - { - if ( level.selected_fx_ents[i] != ent ) - newarray[newarray.size] = level.selected_fx_ents[i]; - } - - level.selected_fx_ents = newarray; -} - -index_is_selected( index ) -{ - return isdefined( level.selected_fx[index] ); -} - -ent_is_selected( ent ) -{ - for ( i = 0; i < level.selected_fx_ents.size; i++ ) - { - if ( level.selected_fx_ents[i] == ent ) - return true; - } - - return false; -} - -clear_entity_selection( skip_undo ) -{ - if ( !isdefined( skip_undo ) && level.cfx_last_action != "none" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "none"; - } - - for ( i = 0; i < level.selected_fx_ents.size; i++ ) - { - if ( !ent_is_highlighted( level.selected_fx_ents[i] ) ) - level.selected_fx_ents[i] thread entity_highlight_disable(); - } - - level.selected_fx = []; - level.selected_fx_ents = []; -} - -draw_axis() -{ - if ( isdefined( self.draw_axis_model ) ) - return; - - self.draw_axis_model = spawn_axis_model( self.v["origin"], self.v["angles"] ); - level thread draw_axis_think( self ); - - if ( !isdefined( level.draw_axis_models ) ) - level.draw_axis_models = []; - - level.draw_axis_models[level.draw_axis_models.size] = self.draw_axis_model; -} - -spawn_axis_model( origin, angles ) -{ - model = spawn( "script_model", origin ); - model setmodel( "fx_axis_createfx" ); - model.angles = angles; - return model; -} - -draw_axis_think( axis_parent ) -{ - axis_model = axis_parent.draw_axis_model; - axis_model endon( "death" ); - player = get_players()[0]; - range = getdvarint( "createfx_drawaxis_range" ); - - for ( i = 0; 1; i = 0 ) - { - asm_cond( !isdefined( axis_parent ), loc_48FC ); - asm_jump( loc_49CC ); - asm_cond( distancesquared( axis_model.origin, player.origin ) > range * range, loc_4940 ); - asm_cond( isdefined( axis_model ), loc_493D ); - axis_model delete(); - arrayremovevalue( level.draw_axis_models, undefined ); - asm_jump( loc_4980 ); - asm_cond( !isdefined( axis_model ), loc_4980 ); - axis_model = spawn_axis_model( axis_parent.v["origin"], axis_parent.v["angles"] ); - axis_parent.draw_axis_model = axis_model; - level.draw_axis_models[level.draw_axis_models.size] = axis_model; - axis_model.origin = axis_parent.v["origin"]; - axis_model.angles = axis_parent.v["angles"]; - wait 0.1; - i++; - asm_cond( i >= 10, loc_49C8 ); - range = getdvarint( "createfx_drawaxis_range" ); - } - - if ( isdefined( axis_model ) ) - axis_model delete(); -} - -stop_drawing_axis_models() -{ - if ( isdefined( level.draw_axis_models ) ) - { - for ( i = 0; i < level.draw_axis_models.size; i++ ) - { - if ( isdefined( level.draw_axis_models[i] ) ) - level.draw_axis_models[i] delete(); - } - - arrayremovevalue( level.draw_axis_models, undefined ); - } -} - -clear_fx_hudelements() -{ - level.cfx_center_text[level.cfx_center_text_max - 1] clearalltextafterhudelem(); - - for ( i = 0; i < level.createfx_hudelements; i++ ) - { - for ( p = 0; p < 2; p++ ) - level.createfxhudelements[i][p] settext( "" ); - } - - level.fxhudelements = 0; -} - -set_fx_hudelement( text ) -{ - if ( ismp() && !isdefined( level.createfx_delay_done ) ) - return; - - if ( level.fxhudelements < level.createfx_hudelements ) - { - for ( p = 0; p < 2; p++ ) - level.createfxhudelements[level.fxhudelements][p] settext( text ); - - level.fxhudelements++; - } -} - -buttondown( button, button2 ) -{ - return buttonpressed_internal( button ) || buttonpressed_internal( button2 ); -} - -buttonpressed_internal( button ) -{ - if ( !isdefined( button ) ) - return 0; - - if ( kb_locked( button ) ) - return 0; - - player = get_players()[0]; - return player buttonpressed( button ); -} - -get_selected_move_vector() -{ - player = get_players()[0]; - yaw = player getplayerangles()[1]; - angles = ( 0, yaw, 0 ); - right = anglestoright( angles ); - forward = anglestoforward( angles ); - up = anglestoup( angles ); - ctrlheld = button_is_held( "ctrl", "BUTTON_LSHLDR" ); - - if ( buttondown( "kp_uparrow", "DPAD_UP" ) ) - { - if ( level.selectedmove_forward < 0 ) - level.selectedmove_forward = 0; - - if ( ctrlheld ) - { - level.selectedmove_forward = 0.1; - wait 0.05; - } - else - level.selectedmove_forward += 1; - } - else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) ) - { - if ( level.selectedmove_forward > 0 ) - level.selectedmove_forward = 0; - - if ( ctrlheld ) - { - level.selectedmove_forward = -1 * 0.1; - wait 0.05; - } - else - level.selectedmove_forward -= 1; - } - else - level.selectedmove_forward = 0; - - if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) ) - { - if ( level.selectedmove_right < 0 ) - level.selectedmove_right = 0; - - if ( ctrlheld ) - { - level.selectedmove_right = 0.1; - wait 0.05; - } - else - level.selectedmove_right += 1; - } - else if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) ) - { - if ( level.selectedmove_right > 0 ) - level.selectedmove_right = 0; - - if ( ctrlheld ) - { - level.selectedmove_right = -1 * 0.1; - wait 0.05; - } - else - level.selectedmove_right -= 1; - } - else - level.selectedmove_right = 0; - - if ( buttondown( "BUTTON_Y" ) ) - { - if ( level.selectedmove_up < 0 ) - level.selectedmove_up = 0; - - if ( ctrlheld ) - { - level.selectedmove_up = 0.1; - wait 0.05; - } - else - level.selectedmove_up += 1; - } - else if ( buttondown( "BUTTON_B" ) ) - { - if ( level.selectedmove_up > 0 ) - level.selectedmove_up = 0; - - if ( ctrlheld ) - { - level.selectedmove_up = -1 * 0.1; - wait 0.05; - } - else - level.selectedmove_up -= 1; - } - else - level.selectedmove_up = 0; - - vector = ( 0, 0, 0 ); - vector += vectorscale( forward, level.selectedmove_forward ); - vector += vectorscale( right, level.selectedmove_right ); - vector += vectorscale( up, level.selectedmove_up ); - return vector; -} - -process_button_held_and_clicked() -{ - add_button( "mouse1" ); - add_kb_button( "shift" ); - add_kb_button( "ctrl" ); - add_button( "BUTTON_RSHLDR" ); - add_button( "BUTTON_LSHLDR" ); - add_button( "BUTTON_RSTICK" ); - add_button( "BUTTON_LSTICK" ); - add_button( "BUTTON_A" ); - add_button( "BUTTON_B" ); - add_button( "BUTTON_X" ); - add_button( "BUTTON_Y" ); - add_button( "DPAD_UP" ); - add_button( "DPAD_LEFT" ); - add_button( "DPAD_RIGHT" ); - add_button( "DPAD_DOWN" ); - add_kb_button( "escape" ); - add_button( "BUTTON_RTRIG" ); - add_button( "BUTTON_LTRIG" ); - add_kb_button( "a" ); - add_button( "F1" ); - add_button( "F5" ); - add_button( "F2" ); - add_kb_button( "c" ); - add_kb_button( "d" ); - add_kb_button( "f" ); - add_kb_button( "h" ); - add_kb_button( "i" ); - add_kb_button( "j" ); - add_kb_button( "k" ); - add_kb_button( "l" ); - add_kb_button( "m" ); - add_kb_button( "p" ); - add_kb_button( "q" ); - add_kb_button( "r" ); - add_kb_button( "s" ); - add_kb_button( "v" ); - add_kb_button( "x" ); - add_kb_button( "z" ); - add_button( "del" ); - add_kb_button( "end" ); - add_kb_button( "tab" ); - add_kb_button( "ins" ); - add_kb_button( "add" ); - add_kb_button( "space" ); - add_kb_button( "enter" ); - add_kb_button( "leftarrow" ); - add_kb_button( "rightarrow" ); - add_kb_button( "1" ); - add_kb_button( "2" ); - add_kb_button( "3" ); - add_kb_button( "4" ); - add_kb_button( "5" ); - add_kb_button( "6" ); - add_kb_button( "7" ); - add_kb_button( "8" ); - add_kb_button( "9" ); - add_kb_button( "0" ); - add_kb_button( "~" ); -} - -locked( name ) -{ - if ( isdefined( level.createfx_lockedlist[name] ) ) - return 0; - - return kb_locked( name ); -} - -kb_locked( name ) -{ - return level.createfx_inputlocked && isdefined( level.button_is_kb[name] ); -} - -add_button( name ) -{ - player = get_players()[0]; - - if ( locked( name ) ) - return; - - if ( !isdefined( level.buttonisheld[name] ) ) - { - if ( player buttonpressed( name ) ) - { - level.buttonisheld[name] = 1; - level.buttonclick[name] = 1; - } - } - else if ( !player buttonpressed( name ) ) - level.buttonisheld[name] = undefined; -} - -add_kb_button( name ) -{ - level.button_is_kb[name] = 1; - add_button( name ); -} - -set_anglemod_move_vector() -{ -/# - ctrlheld = button_is_held( "ctrl", "BUTTON_LSHLDR" ); - players = get_players(); - - if ( level.is_camera_on == 1 ) - { - newmovement = players[0] getnormalizedmovement(); - dolly_movement = players[0] getnormalizedcameramovement(); - - if ( newmovement[1] <= -0.3 ) - level.selectedrotate_yaw -= 1; - else if ( newmovement[1] >= 0.3 ) - level.selectedrotate_yaw += 1; - else if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) ) - { - if ( level.selectedrotate_yaw < 0 ) - level.selectedrotate_yaw = 0; - - level.selectedrotate_yaw += 0.1; - } - else if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) ) - { - if ( level.selectedrotate_yaw > 0 ) - level.selectedrotate_yaw = 0; - - level.selectedrotate_yaw -= 0.1; - } - else - level.selectedrotate_yaw = 0; - - if ( dolly_movement[0] <= -0.2 ) - level.selectedrotate_pitch += 1; - else if ( dolly_movement[0] >= 0.2 ) - level.selectedrotate_pitch -= 1; - else if ( buttondown( "kp_uparrow", "DPAD_UP" ) ) - { - if ( level.selectedrotate_pitch < 0 ) - level.selectedrotate_pitch = 0; - - level.selectedrotate_pitch += 0.1; - } - else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) ) - { - if ( level.selectedrotate_pitch > 0 ) - level.selectedrotate_pitch = 0; - - level.selectedrotate_pitch -= 0.1; - } - else - level.selectedrotate_pitch = 0; - - if ( buttondown( "BUTTON_Y" ) ) - { - if ( level.selectedrotate_roll < 0 ) - level.selectedrotate_roll = 0; - - level.selectedrotate_roll += 0.1; - } - else if ( buttondown( "BUTTON_B" ) ) - { - if ( level.selectedrotate_roll > 0 ) - level.selectedrotate_roll = 0; - - level.selectedrotate_roll -= 0.1; - } - else - level.selectedrotate_roll = 0; - } - else - { - if ( buttondown( "kp_uparrow", "DPAD_UP" ) ) - { - if ( level.selectedrotate_pitch < 0 ) - level.selectedrotate_pitch = 0; - - if ( ctrlheld ) - { - level.selectedrotate_pitch = 0.1; - wait 0.05; - } - else - level.selectedrotate_pitch += 1; - } - else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) ) - { - if ( level.selectedrotate_pitch > 0 ) - level.selectedrotate_pitch = 0; - - if ( ctrlheld ) - { - level.selectedrotate_pitch = -1 * 0.1; - wait 0.05; - } - else - level.selectedrotate_pitch -= 1; - } - else - level.selectedrotate_pitch = 0; - - if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) ) - { - if ( level.selectedrotate_yaw < 0 ) - level.selectedrotate_yaw = 0; - - if ( ctrlheld ) - { - level.selectedrotate_yaw = 0.1; - wait 0.05; - } - else - level.selectedrotate_yaw += 1; - } - else if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) ) - { - if ( level.selectedrotate_yaw > 0 ) - level.selectedrotate_yaw = 0; - - if ( ctrlheld ) - { - level.selectedrotate_yaw = -1 * 0.1; - wait 0.05; - } - else - level.selectedrotate_yaw -= 1; - } - else - level.selectedrotate_yaw = 0; - - if ( buttondown( "BUTTON_Y" ) ) - { - if ( level.selectedrotate_roll < 0 ) - level.selectedrotate_roll = 0; - - if ( ctrlheld ) - { - level.selectedrotate_roll = 0.1; - wait 0.05; - } - else - level.selectedrotate_roll += 1; - } - else if ( buttondown( "BUTTON_B" ) ) - { - if ( level.selectedrotate_roll > 0 ) - level.selectedrotate_roll = 0; - - if ( ctrlheld ) - { - level.selectedrotate_roll = -1 * 0.1; - wait 0.05; - } - else - level.selectedrotate_roll -= 1; - } - else - level.selectedrotate_roll = 0; - } -#/ -} - -cfxprintln( file, string ) -{ -/# - if ( file == -1 ) - return; - - fprintln( file, string ); -#/ -} - -update_save_bar( number ) -{ - level notify( "saving_start" ); - level endon( "saving_start" ); - level.current_saving_number = 0; - - while ( level.current_saving_number < level.createfxent.size ) - { - center_text_clear(); - center_text_add( "Saving Createfx to File" ); - center_text_add( "Saving effect " + level.current_saving_number + "/" + level.createfxent.size ); - center_text_add( "Do not reset Xenon until saving is complete." ); - wait 0.05; - center_text_clear(); - } - - center_text_add( "Saving Complete." ); - center_text_add( level.createfxent.size + " effects saved to files." ); -} - -generate_fx_log( type, autosave ) -{ -/# - autosave = isdefined( autosave ); - - if ( type == "server" ) - { - if ( !autosave ) - filename = level.cfx_server_scriptdata + level.script + "_fx.gsc"; - else - filename = level.cfx_server_scriptdata + "backup.gsc"; - - call_loop = level.cfx_server_loop; - call_oneshot = level.cfx_server_oneshot; - call_exploder = level.cfx_server_exploder; - call_loopsound = level.cfx_server_loopsound; - } - else if ( type == "client" ) - { - if ( !autosave ) - filename = level.cfx_client_scriptdata + level.script + "_fx.csc"; - else - filename = level.cfx_client_scriptdata + "backup.csc"; - - call_loop = level.cfx_client_loop; - call_oneshot = level.cfx_client_oneshot; - call_exploder = level.cfx_client_exploder; - call_loopsound = level.cfx_client_loopsound; - } - else - { - println( "^1Error: Improper type in generate_fx_log()" ); - return; - } - - file = openfile( filename, "write" ); - - if ( file == -1 ) - { - level.write_error = filename; - - if ( type == "server" ) - return 1; - else if ( type == "client" ) - return 2; - else - return 3; - } - else - { - cfxprintln( file, "//_createfx generated. Do not touch!!" ); - cfxprintln( file, "main()" ); - cfxprintln( file, "{" ); - - for ( p = 0; p < level.createfxent.size; p++ ) - { - ent = level.createfxent[p]; - origin = []; - angles = []; - - for ( i = 0; i < 3; i++ ) - { - origin[i] = ent.v["origin"][i]; - angles[i] = ent.v["angles"][i]; - - if ( origin[i] < 0.1 && origin[i] > 0.1 * -1 ) - origin[i] = 0; - - if ( angles[i] < 0.1 && angles[i] > 0.1 * -1 ) - angles[i] = 0; - } - - ent.v["origin"] = ( origin[0], origin[1], origin[2] ); - ent.v["angles"] = ( angles[0], angles[1], angles[2] ); - } - - if ( !autosave ) - println( " *** CREATING EFFECT, COPY THESE LINES TO ", level.script, "_fx.gsc *** " ); - - cfxprintln( file, "// CreateFX entities placed: " + level.createfxent.size - level.non_fx_ents ); - breather = 0; - - if ( autosave ) - breather_pause = 1; - else - breather_pause = 5; - - for ( i = 0; i < level.createfxent.size; i++ ) - { - e = level.createfxent[i]; -/# - assert( isdefined( e.v["type"] ), "effect at origin " + e.v["origin"] + " has no type" ); -#/ - if ( isdefined( e.model ) ) - continue; - - if ( e.v["fxid"] == "No FX" ) - continue; - - output_name = "\t"; - output_props = "\t"; - ent_type = e.v["type"]; - - if ( ent_type == "loopfx" ) - output_name += ( "ent = " + call_loop + "( \"" + e.v["fxid"] + "\" );" ); - - if ( ent_type == "oneshotfx" ) - output_name += ( "ent = " + call_oneshot + "( \"" + e.v["fxid"] + "\" );" ); - - if ( ent_type == "exploder" ) - output_name += ( "ent = " + call_exploder + "( \"" + e.v["fxid"] + "\" );" ); - - if ( ent_type == "soundfx" ) - output_name += ( "ent = " + call_loopsound + "();" ); - - output_props += get_fx_options( e ); - cfxprintln( file, output_name ); - cfxprintln( file, output_props ); - cfxprintln( file, "\t" ); - breather++; - - if ( breather >= breather_pause ) - { - wait 0.05; - breather = 0; - } - } - - if ( level.bscriptgened ) - { - script_gen_dump_addline( level.cfx_server_scriptgendump, level.script + "_fx" ); - [[ level.cfx_func_script_gen_dump ]](); - } - - cfxprintln( file, "}" ); - saved = closefile( file ); -/# - assert( saved == 1, "File not saved (see above message?): " + filename ); -#/ - println( "CreateFX entities placed: " + level.createfxent.size - level.non_fx_ents ); - return 0; - } -#/ -} - -get_fx_options( ent ) -{ - output_props = ""; - - for ( i = 0; i < level.createfx_options.size; i++ ) - { - option = level.createfx_options[i]; - - if ( !isdefined( ent.v[option["name"]] ) ) - continue; - - if ( !mask( option["mask"], ent.v["type"] ) ) - continue; - - if ( option["type"] == "string" ) - { - if ( option["name"] == "fxid" ) - continue; - - output_props += ( "ent.v[ \"" + option["name"] + "\" ] = \"" + ent.v[option["name"]] + "\"; " ); - continue; - } - - output_props += ( "ent.v[ \"" + option["name"] + "\" ] = " + ent.v[option["name"]] + "; " ); - } - - return output_props; -} - -entity_highlight_disable() -{ - self notify( "highlight change" ); - self endon( "highlight change" ); - - for (;;) - { - self.textalpha -= 0.05; - - if ( self.textalpha < 0.4 ) - break; - - wait 0.05; - } - - self.textalpha = 0.4; -} - -entity_highlight_enable() -{ - self notify( "highlight change" ); - self endon( "highlight change" ); - - for (;;) - { - self.textalpha += 0.05; - - if ( self.textalpha > 1 ) - break; - - wait 0.05; - } - - self.textalpha = 1; -} - -get_center_of_array( array ) -{ - center = ( 0, 0, 0 ); - - for ( i = 0; i < array.size; i++ ) - center = ( center[0] + array[i].v["origin"][0], center[1] + array[i].v["origin"][1], center[2] + array[i].v["origin"][2] ); - - return ( center[0] / array.size, center[1] / array.size, center[2] / array.size ); -} - -rotation_is_occuring() -{ - if ( level.selectedrotate_roll != 0 ) - return 1; - - if ( level.selectedrotate_pitch != 0 ) - return 1; - - return level.selectedrotate_yaw != 0; -} - -process_fx_rotater() -{ - if ( level.fx_rotating ) - return; - - set_anglemod_move_vector(); - - if ( !rotation_is_occuring() ) - return; - - level.fx_rotating = 1; - - if ( level.cfx_last_action != "rotate" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "rotate"; - } - - if ( level.selected_fx_ents.size > 1 ) - { - center = get_center_of_array( level.selected_fx_ents ); - org = spawn( "script_origin", center ); - org.v["angles"] = level.selected_fx_ents[0].v["angles"]; - org.v["origin"] = center; - rotater = []; - - for ( i = 0; i < level.selected_fx_ents.size; i++ ) - { - rotater[i] = spawn( "script_origin", level.selected_fx_ents[i].v["origin"] ); - rotater[i].angles = level.selected_fx_ents[i].v["angles"]; - rotater[i] linkto( org ); - } - - rotate_over_time( org, rotater ); - org delete(); - - for ( i = 0; i < rotater.size; i++ ) - rotater[i] delete(); - } - else if ( level.selected_fx_ents.size == 1 ) - { - ent = level.selected_fx_ents[0]; - rotater = spawn( "script_origin", ( 0, 0, 0 ) ); - rotater.angles = ent.v["angles"]; - - if ( level.selectedrotate_pitch != 0 ) - rotater devaddpitch( level.selectedrotate_pitch ); - else if ( level.selectedrotate_yaw != 0 ) - rotater devaddyaw( level.selectedrotate_yaw ); - else - rotater devaddroll( level.selectedrotate_roll ); - - ent.v["angles"] = rotater.angles; - rotater delete(); - wait 0.05; - } - - level.fx_rotating = 0; -} - -rotate_over_time( org, rotater ) -{ - level endon( "new_ent_selection" ); - - for ( p = 0; p < 2; p++ ) - { - if ( level.selectedrotate_pitch != 0 ) - org devaddpitch( level.selectedrotate_pitch ); - else if ( level.selectedrotate_yaw != 0 ) - org devaddyaw( level.selectedrotate_yaw ); - else - org devaddroll( level.selectedrotate_roll ); - - wait 0.05; - - for ( i = 0; i < level.selected_fx_ents.size; i++ ) - { - ent = level.selected_fx_ents[i]; - - if ( isdefined( ent.model ) ) - continue; - - ent.v["origin"] = rotater[i].origin; - ent.v["angles"] = rotater[i].angles; - } - } -} - -delete_pressed() -{ - if ( level.createfx_inputlocked ) - { - remove_selected_option(); - return; - } - - delete_selection(); -} - -remove_selected_option() -{ - if ( !isdefined( level.selected_fx_option_index ) ) - return; - - name = level.createfx_options[level.selected_fx_option_index]["name"]; - - for ( i = 0; i < level.createfxent.size; i++ ) - { - ent = level.createfxent[i]; - - if ( !ent_is_selected( ent ) ) - continue; - - ent remove_option( name ); - } - - update_selected_entities(); - clear_settable_fx(); -} - -remove_option( name ) -{ - self.v[name] = undefined; -} - -delete_selection() -{ - newarray = []; - - if ( level.selected_fx_ents.size < 1 ) - return; - - store_undo_state( "delete", level.selected_fx_ents ); - level.cfx_last_action = "none"; - - for ( i = 0; i < level.createfxent.size; i++ ) - { - ent = level.createfxent[i]; - - if ( ent_is_selected( ent ) ) - { - if ( isdefined( ent.looper ) ) - ent.looper delete(); - - level.fx_highlightedent = undefined; - ent notify( "stop_loop" ); - continue; - } - - newarray[newarray.size] = ent; - } - - level.createfxent = newarray; - level.selected_fx = []; - level.selected_fx_ents = []; - clear_fx_hudelements(); -} - -move_selection_to_cursor( skip_undo ) -{ - origin = level.createfxcursor["position"]; - - if ( level.selected_fx_ents.size <= 0 ) - return; - - if ( !isdefined( skip_undo ) && level.cfx_last_action != "move_to_cursor" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "move_to_cursor"; - } - - center = get_center_of_array( level.selected_fx_ents ); - difference = center - origin; - - for ( i = 0; i < level.selected_fx_ents.size; i++ ) - { - ent = level.selected_fx_ents[i]; - - if ( isdefined( ent.model ) ) - continue; - - ent.v["origin"] -= difference; - } -} - -insert_effect() -{ - setmenu( "creation" ); - level.effect_list_offset = 0; - clear_fx_hudelements(); - set_fx_hudelement( "Pick effect type to create:" ); - set_fx_hudelement( "1. One Shot fx" ); - set_fx_hudelement( "2. Looping fx" ); - set_fx_hudelement( "3. Exploder" ); - set_fx_hudelement( "4. Looping sound" ); - set_fx_hudelement( "(c) Cancel" ); - set_fx_hudelement( "(x) Exit" ); -} - -show_help() -{ - clear_fx_hudelements(); - set_fx_hudelement( "Help:" ); - set_fx_hudelement( "I Insert effect" ); - set_fx_hudelement( "Shift + D Delete selected effects" ); - set_fx_hudelement( "F + 5 Save" ); - set_fx_hudelement( "A button Toggle the selection of the current effect" ); - set_fx_hudelement( "X button Toggle effect rotation mode" ); - set_fx_hudelement( "Y button Move selected effects up or rotate X axis" ); - set_fx_hudelement( "B button Move selected effects down or rotate X axis" ); - set_fx_hudelement( "D-pad Up/Down Move selected effects Forward/Backward or rotate Y axis" ); - set_fx_hudelement( "D-pad Left/Right Move selected effects Left/Right or rotate Z axis" ); - set_fx_hudelement( "R Shoulder Move selected effects to the cursor" ); - set_fx_hudelement( "L Shoulder Hold to select multiple effects" ); - set_fx_hudelement( "Right Arrow Next page in options menu" ); - set_fx_hudelement( "Left Arrow Previous page in options menu" ); - set_fx_hudelement( "A Add option to the selected effects" ); - set_fx_hudelement( "X Exit effect options menu" ); - set_fx_hudelement( "Shift + D Drop selected effects to the ground" ); - set_fx_hudelement( "R Reset the rotation of the selected effects" ); - set_fx_hudelement( "L Stick Copy effects" ); - set_fx_hudelement( "R Stick Paste effects" ); - set_fx_hudelement( "V Copy the angles from the most recently selected fx onto all selected fx." ); - set_fx_hudelement( "F + 2 Toggle CreateFX dot and menu drawing" ); - set_fx_hudelement( "U UFO" ); - set_fx_hudelement( "N Noclip" ); - set_fx_hudelement( "R Trig + L Trig Jump forward 8000 units" ); - set_fx_hudelement( "T Toggle Timescale FAST" ); - set_fx_hudelement( "Y Toggle Timescale SLOW" ); - set_fx_hudelement( "H Toggle FX Visibility" ); - set_fx_hudelement( "W Toggle effect wireframe" ); - set_fx_hudelement( "P Toggle FX Profile" ); -} - -center_text_init() -{ - level.cfx_center_text = []; - level.cfx_center_text_index = 0; - level.cfx_center_text_max = 3; - new_array = []; - - for ( p = 0; p < level.cfx_center_text_max; p++ ) - { - center_hud = newdebughudelem(); - center_hud settext( " " ); - center_hud.horzalign = "center"; - center_hud.vertalign = "middle"; - center_hud.alignx = "center"; - center_hud.aligny = "middle"; - center_hud.foreground = 1; - center_hud.fontscale = 1.1; - center_hud.sort = 21; - center_hud.alpha = 1; - center_hud.color = ( 1, 0, 0 ); - center_hud.y = p * 25; - new_array[p] = center_hud; - } - - level.cfx_center_text = new_array; -} - -center_text_add( text ) -{ - if ( isdefined( text ) && isdefined( level.cfx_center_text ) ) - { - level.cfx_center_text[level.cfx_center_text_index] settext( text ); - level.cfx_center_text_index++; - - if ( level.cfx_center_text_index >= level.cfx_center_text_max ) - level.cfx_center_text_index = level.cfx_center_text_max - 1; - } -} - -center_text_clear() -{ - for ( p = 0; p < level.cfx_center_text_max; p++ ) - level.cfx_center_text[p] settext( " " ); - - level.cfx_center_text_index = 0; -} - -write_error_msg( filename ) -{ - level notify( "write_error" ); - level endon( "write_error" ); - - if ( isdefined( filename ) ) - { - center_text_clear(); - center_text_add( "File " + filename + " is not writeable." ); - center_text_add( "If it's checked out, restart your computer!" ); - center_text_add( "Hold the A Button to dismiss." ); - - for (;;) - { - player = get_players()[0]; - - if ( player buttonpressed( "BUTTON_A" ) ) - { - center_text_clear(); - level.write_error = ""; - break; - } - - wait 0.25; - } - } -} - -select_last_entity( skip_undo ) -{ - select_entity( level.createfxent.size - 1, level.createfxent[level.createfxent.size - 1], skip_undo ); -} - -post_entity_creation_function() -{ - self.textalpha = 0; - self.drawn = 1; -} - -copy_ents() -{ - if ( level.selected_fx_ents.size <= 0 ) - return; - - array = []; - - for ( i = 0; i < level.selected_fx_ents.size; i++ ) - { - ent = level.selected_fx_ents[i]; - newent = spawnstruct(); - newent.v = ent.v; - newent post_entity_creation_function(); - array[array.size] = newent; - } - - level.stored_ents = array; -} - -paste_ents() -{ - delay_min = getdvarint( "createfx_oneshot_min_delay" ); - delay_max = getdvarint( "createfx_oneshot_max_delay" ); - - if ( delay_min > delay_max ) - { - temp = delay_min; - delay_min = delay_max; - delay_max = temp; - } - - if ( !isdefined( level.stored_ents ) ) - return; - - clear_entity_selection(); - - if ( level.cfx_last_action != "none" ) - store_undo_state( "edit", level.selected_fx_ents ); - - level.cfx_last_action = "none"; - - for ( i = 0; i < level.stored_ents.size; i++ ) - { - level.stored_ents[i].uniqueid = level.cfx_uniqueid; - level.cfx_uniqueid++; - - if ( level.stored_ents[i].v["type"] == "oneshotfx" ) - level.stored_ents[i].v["delay"] = randomintrange( delay_min, delay_max ); - - add_and_select_entity( level.stored_ents[i], "skip_undo" ); - } - - move_selection_to_cursor( "skip_undo" ); - update_selected_entities(); - store_undo_state( "add", level.stored_ents ); - level.stored_ents = []; - copy_ents(); -} - -paste_ents_onto_ents() -{ - if ( !isdefined( level.stored_ents ) || !isdefined( level.selected_fx_ents ) ) - return; - - if ( level.stored_ents.size < 1 || level.selected_fx_ents.size < 1 ) - return; - - if ( level.stored_ents.size != level.selected_fx_ents.size ) - { -/# - println( "^2CreateFX: Number of source ents must match the number of destination ents for Paste Into to work." ); -#/ - return; - } - - if ( level.cfx_last_action != "none" ) - store_undo_state( "edit", level.selected_fx_ents ); - - level.cfx_last_action = "none"; - selected_ents_temp = level.selected_fx_ents; - - for ( i = 0; i < level.stored_ents.size; i++ ) - { - source_ent = level.stored_ents[i]; - target_ent = level.selected_fx_ents[i]; - source_ent.uniqueid = level.cfx_uniqueid; - level.cfx_uniqueid++; - source_ent.v["angles"] = target_ent.v["angles"]; - source_ent.v["origin"] = target_ent.v["origin"]; - add_and_select_entity( source_ent, "skip_undo" ); - } - - for ( i = 0; i < selected_ents_temp.size; i++ ) - deselect_entity( selected_ents_temp[i].last_fx_index, selected_ents_temp[i] ); - - update_selected_entities(); - store_undo_state( "add", level.stored_ents ); - level.stored_ents = []; - copy_ents(); -} - -add_and_select_entity( ent, skip_undo ) -{ - level.createfxent[level.createfxent.size] = ent; - select_last_entity( skip_undo ); -} - -stop_fx_looper() -{ - if ( isdefined( self.looper ) ) - self.looper delete(); - - self [[ level.cfx_func_stop_loopsound ]](); -} - -restart_fx_looper() -{ - stop_fx_looper(); - self set_forward_and_up_vectors(); - - if ( self.v["type"] == "loopfx" ) - self [[ level.cfx_func_create_looper ]](); - - if ( self.v["type"] == "oneshotfx" ) - self [[ level.cfx_func_create_triggerfx ]](); - - if ( self.v["type"] == "soundfx" ) - self [[ level.cfx_func_create_loopsound ]](); -} - -update_selected_entities() -{ - for ( i = 0; i < level.selected_fx_ents.size; i++ ) - { - ent = level.selected_fx_ents[i]; - ent restart_fx_looper(); - } -} - -copy_angles_of_selected_ents() -{ - level notify( "new_ent_selection" ); - - if ( level.cfx_last_action != "copy_angles" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "copy_angles"; - } - - for ( i = 0; i < level.selected_fx_ents.size; i++ ) - { - ent = level.selected_fx_ents[i]; - ent.v["angles"] = level.selected_fx_ents[level.selected_fx_ents.size - 1].v["angles"]; - ent set_forward_and_up_vectors(); - } - - update_selected_entities(); -} - -reset_axis_of_selected_ents() -{ - level notify( "new_ent_selection" ); - - if ( level.cfx_last_action != "reset_axis" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "reset_axis"; - } - - for ( i = 0; i < level.selected_fx_ents.size; i++ ) - { - ent = level.selected_fx_ents[i]; - ent.v["angles"] = ( 0, 0, 0 ); - ent set_forward_and_up_vectors(); - } - - update_selected_entities(); -} - -last_selected_entity_has_changed( lastselectentity ) -{ - if ( isdefined( lastselectentity ) ) - { - if ( !entities_are_selected() ) - return 1; - } - else - return entities_are_selected(); - - return lastselectentity != level.selected_fx_ents[level.selected_fx_ents.size - 1]; -} - -createfx_showorigin( id, org, delay, org2, type, exploder, id2, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout ) -{ - -} - -drop_selection_to_ground() -{ - if ( level.cfx_last_action != "drop_to_ground" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "drop_to_ground"; - } - - for ( i = 0; i < level.selected_fx_ents.size; i++ ) - { - ent = level.selected_fx_ents[i]; - trace = bullettrace( ent.v["origin"], ent.v["origin"] + vectorscale( ( 0, 0, -1 ), 2048.0 ), 0, undefined ); - ent.v["origin"] = trace["position"]; - } -} - -set_off_exploders() -{ - level notify( "createfx_exploder_reset" ); - exploders = []; - - for ( i = 0; i < level.selected_fx_ents.size; i++ ) - { - ent = level.selected_fx_ents[i]; - - if ( isdefined( ent.v["exploder"] ) ) - exploders[ent.v["exploder"]] = 1; - } - - keys = getarraykeys( exploders ); - - for ( i = 0; i < keys.size; i++ ) - exploder( keys[i] ); -} - -turn_off_exploders() -{ - level notify( "createfx_exploder_reset" ); - exploders = []; - - for ( i = 0; i < level.selected_fx_ents.size; i++ ) - { - ent = level.selected_fx_ents[i]; - - if ( isdefined( ent.v["exploder"] ) ) - exploders[ent.v["exploder"]] = 1; - } - - keys = getarraykeys( exploders ); - - for ( i = 0; i < keys.size; i++ ) - stop_exploder( keys[i] ); -} - -draw_distance() -{ - count = 0; - last_pos = ( 0, 0, 0 ); - - if ( getdvarint( "createfx_drawdist" ) == 0 ) - setdvar( "createfx_drawdist", "1500" ); - - player = get_players()[0]; - - for (;;) - { - maxdist = getdvarint( "createfx_drawdist" ); - maxdistsqr = maxdist * maxdist; -/# - if ( flag( "createfx_saving" ) ) - println( "Waiting for createfx to save..." ); -#/ - flag_waitopen( "createfx_saving" ); - - for ( i = 0; i < level.createfxent.size; i++ ) - { - ent = level.createfxent[i]; - - if ( ent_is_selected( ent ) ) - ent.drawn = 1; - else - ent.drawn = distancesquared( player.origin, ent.v["origin"] ) <= maxdistsqr; - - count++; - - if ( count > 50 ) - { - count = 0; - wait 0.05; - } - } - - wait 0.1; - - while ( distancesquared( player.origin, last_pos ) < 2500 ) - wait 0.1; - - last_pos = player.origin; - } -} - -createfx_save( autosave ) -{ - flag_waitopen( "createfx_saving" ); - flag_set( "createfx_saving" ); - resettimeout(); - - if ( isdefined( autosave ) ) - savemode = "AUTOSAVE"; - else - savemode = "USER SAVE"; - - type = "server"; - old_time = gettime(); -/# - println( "\n^3#### CREATEFX SERVER " + savemode + " BEGIN ####" ); -#/ - file_error = generate_fx_log( type, autosave ); -/# - println( "^3#### CREATEFX SERVER " + savemode + " END (Time: " + ( gettime() - old_time ) * 0.001 + " seconds)####" ); -#/ - if ( file_error ) - { -/# - println( "^3#### CREATEFX " + savemode + " CANCELLED ####" ); -#/ - createfx_emergency_backup(); - } - else - { - if ( level.clientscripts && !isdefined( autosave ) ) - { - old_time = gettime(); -/# - println( "\n^3#### CREATEFX CLIENT " + savemode + " BEGIN ####" ); -#/ - file_error = generate_fx_log( "client" ); -/# - println( "^3#### CREATEFX CLIENT " + savemode + " END (Time: " + ( gettime() - old_time ) * 0.001 + " seconds)####" ); -#/ - if ( file_error ) - { -/# - iprintln( "CreateFX clientscript file is not writeable! Aborting save." ); -#/ -/# - println( "^3#### CREATEFX " + savemode + " CANCELLED ####" ); -#/ - return; - } - } - - flag_clear( "createfx_saving" ); - } -} - -createfx_autosave() -{ - for (;;) - { - wait_time = getdvarint( "createfx_autosave_time" ); - - if ( wait_time < 120 || isstring( wait_time ) ) - wait_time = 120; - - wait( wait_time ); - - if ( !flag( "createfx_saving" ) ) - createfx_save( 1 ); - } -} - -createfx_emergency_backup() -{ -/# - println( "^5#### CREATEFX EMERGENCY BACKUP BEGIN ####" ); -#/ - file_error = generate_fx_log( "server", 1 ); - - if ( file_error ) - { -/# - iprintln( "Error saving to backup.gsc. All is lost!" ); -#/ - } - else - { -/# - println( "^5#### CREATEFX EMERGENCY BACKUP END ####" ); -#/ - } - - flag_clear( "createfx_saving" ); -} - -move_player_around_map_fast() -{ - player = get_players()[0]; - direction = player getplayerangles(); - direction_vec = anglestoforward( direction ); - eye = player geteye(); - trace = bullettrace( eye, eye + vectorscale( direction_vec, 20000 ), 0, undefined ); - dist = distance( eye, trace["position"] ); - position = eye + vectorscale( direction_vec, dist - 64 ); - player setorigin( position ); -} - -move_player_to_next_same_effect( forward_search, lastselectentity ) -{ - player = get_players()[0]; - direction = player getplayerangles(); - direction_vec = anglestoforward( direction ); - - if ( !isdefined( forward_search ) ) - forward_search = 1; - - ent = level.selected_fx_ents[level.selected_fx_ents.size - 1]; - start_index = 0; - - if ( level.selected_fx_ents.size <= 0 ) - { - if ( forward_search ) - ent = level.cfx_next_ent; - else - ent = level.cfx_previous_ent; - - if ( isdefined( ent ) ) - { - index = get_ent_index( ent ); - - if ( index >= 0 ) - { - select_entity( index, ent ); - position = ent.v["origin"] - vectorscale( direction_vec, 175 ); - player setorigin( position ); - level.cfx_previous_ent = ent; - level.cfx_next_ent = get_next_ent_with_same_id( index, ent.v["fxid"] ); - } - else if ( forward_search ) - level.cfx_next_ent = undefined; - else - level.cfx_previous_ent = undefined; - } - - return; - } - - if ( level.selected_fx_ents.size == 1 ) - { - for ( i = 0; i < level.createfxent.size; i++ ) - { - if ( isdefined( level.selected_fx[i] ) ) - { - start_index = i; - deselect_entity( i, ent ); - break; - } - } - - if ( forward_search ) - { - level.cfx_previous_ent = ent; - ent = get_next_ent_with_same_id( i, ent.v["fxid"] ); - select_entity( level.ent_found_index, ent ); - position = ent.v["origin"] - vectorscale( direction_vec, 175 ); - player setorigin( position ); - level.cfx_next_ent = get_next_ent_with_same_id( level.ent_found_index, ent.v["fxid"] ); - return; - } - else - { - level.cfx_next_ent = ent; - ent = get_previous_ent_with_same_id( i, ent.v["fxid"] ); - select_entity( level.ent_found_index, ent ); - position = ent.v["origin"] - vectorscale( direction_vec, 175 ); - player setorigin( position ); - level.cfx_previous_ent = get_previous_ent_with_same_id( level.ent_found_index, ent.v["fxid"] ); - return; - } - } - else - { - if ( isdefined( level.last_ent_moved_to ) && !last_selected_entity_has_changed( lastselectentity ) ) - ent = level.last_ent_moved_to; - - for ( i = 0; i < level.selected_fx_ents.size; i++ ) - { - if ( ent == level.selected_fx_ents[i] ) - break; - } - - if ( forward_search ) - { - if ( i < level.selected_fx_ents.size - 1 ) - { - i++; - ent = level.selected_fx_ents[i]; - } - else - ent = level.selected_fx_ents[0]; - } - else if ( i > 0 ) - ent = level.selected_fx_ents[i - 1]; - else - ent = level.selected_fx_ents[level.selected_fx_ents.size - 1]; - - level.last_ent_moved_to = ent; - position = ent.v["origin"] - vectorscale( direction_vec, 175 ); - player setorigin( position ); - } -} - -get_next_ent_with_same_id( index, ent_id ) -{ - for ( i = index + 1; i < level.createfxent.size; i++ ) - { - if ( ent_id == level.createfxent[i].v["fxid"] ) - { - level.ent_found_index = i; - return level.createfxent[i]; - } - } - - for ( i = 0; i < index; i++ ) - { - if ( ent_id == level.createfxent[i].v["fxid"] ) - { - level.ent_found_index = i; - return level.createfxent[i]; - } - } - - level.ent_found_index = index; - return level.createfxent[index]; -} - -get_previous_ent_with_same_id( index, ent_id ) -{ - for ( i = index - 1; i > 0; i-- ) - { - if ( ent_id == level.createfxent[i].v["fxid"] ) - { - level.ent_found_index = i; - return level.createfxent[i]; - } - } - - for ( i = level.createfxent.size - 1; i > index; i-- ) - { - if ( ent_id == level.createfxent[i].v["fxid"] ) - { - level.ent_found_index = i; - return level.createfxent[i]; - } - } - - level.ent_found_index = index; - return level.createfxent[index]; -} - -get_ent_index( ent ) -{ - for ( i = 0; i < level.createfxent.size; i++ ) - { - if ( ent == level.createfxent[i] ) - return i; - } - - return -1; -} - -select_ents_by_property( property, add_to_selection ) -{ - ent = level.selected_fx_ents[level.selected_fx_ents.size - 1]; - prop_to_match = ent.v[property]; - - if ( !isdefined( add_to_selection ) ) - clear_entity_selection(); - - for ( i = 0; i < level.createfxent.size; i++ ) - { - if ( isdefined( level.createfxent[i].v[property] ) ) - { - if ( level.createfxent[i].v[property] == prop_to_match ) - select_entity( i, level.createfxent[i] ); - } - } -} - -print_ambient_fx_inventory() -{ -/# - fx_list = get_level_ambient_fx(); - ent_list = []; - fx_list_count = []; - println( "\n\n^2INVENTORY OF AMBIENT EFFECTS: " ); - - for ( i = 0; i < level.createfxent.size; i++ ) - ent_list[i] = level.createfxent[i].v["fxid"]; - - for ( i = 0; i < fx_list.size; i++ ) - { - count = 0; - - for ( j = 0; j < ent_list.size; j++ ) - { - if ( fx_list[i] == ent_list[j] ) - { - count++; - ent_list[j] = ""; - } - } - - fx_list_count[i] = count; - } - - for ( i = 0; i < fx_list_count.size - 1; i++ ) - { - for ( j = i + 1; j < fx_list_count.size; j++ ) - { - if ( fx_list_count[j] < fx_list_count[i] ) - { - temp_count = fx_list_count[i]; - temp_id = fx_list[i]; - fx_list_count[i] = fx_list_count[j]; - fx_list[i] = fx_list[j]; - fx_list_count[j] = temp_count; - fx_list[j] = temp_id; - } - } - } - - for ( i = 0; i < fx_list_count.size; i++ ) - { - switch ( fx_list_count[i] ) - { - case "0": - print( "^1" ); - break; - case "1": - print( "^3" ); - break; - default: - break; - } - - print( fx_list_count[i] + "\t" + fx_list[i] + "\n" ); - } - - print( "\n" ); -#/ -} - -vector_changed( old, new ) -{ - if ( distancesquared( old, new ) >= 1 ) - return true; - - return false; -} - -dot_changed( old, new ) -{ - dot = vectordot( old, new ); - - if ( dot < 1 ) - return true; - - return false; -} - -damage_void( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) -{ - -} - -handle_camera() -{ -/# - level notify( "new_camera" ); - level endon( "new_camera" ); - movement = ( 0, 0, 0 ); - - if ( !isdefined( level.camera ) ) - { - level.camera = spawn( "script_origin", ( 0, 0, 0 ) ); - level.camera setmodel( "tag_origin" ); - } - - players = get_players(); - players[0] playerlinktodelta( level.camera, "tag_origin", 1, 0, 0, 0, 0, 1 ); - players[0] disableweapons(); - level.camera_snapto = 1; - level.stick_camera = 1; - level.camera_prev_snapto = 0; - level.cameravec = ( 90, 150, 20 ); - model = undefined; - n_y_vector = 0; - n_x_vector = 0; - zoom_level = 300; - b_changes_x = 0; - b_changes_z = 0; - b_changes_y = 0; - test_string = ""; - - while ( true ) - { - if ( level.camera_snapto > 0 ) - { - if ( level.stick_camera ) - { - originoffset = vectorscale( level.cameravec, -1 ); - temp_offset = originoffset + vectorscale( ( 0, 0, -1 ), 60.0 ); - anglesoffset = vectortoangles( temp_offset ); - - if ( level.camera_prev_snapto == level.camera_snapto ) - { - players = get_players(); - newmovement = players[0] getnormalizedmovement(); - dolly_movement = players[0] getnormalizedcameramovement(); - - if ( button_is_held( "BUTTON_LTRIG" ) || button_is_held( "BUTTON_RTRIG" ) ) - { - - } - else - { - if ( newmovement[1] <= -0.4 ) - { - n_y_vector += -0.2; - b_changes_y = 1; - } - else if ( newmovement[1] >= 0.4 ) - { - n_y_vector += 0.2; - b_changes_y = 1; - } - else - b_changes_y = 0; - - if ( newmovement[0] <= -0.4 ) - { - n_x_vector += -0.4; - b_changes_x = 1; - } - else if ( newmovement[0] >= 0.4 ) - { - n_x_vector += 0.4; - b_changes_x = 1; - } - else - b_changes_x = 0; - - if ( dolly_movement[0] <= -0.4 ) - { - zoom_level += 30; - b_changes_z = 1; - } - else if ( dolly_movement[0] >= 0.4 ) - { - zoom_level += -30; - b_changes_z = 1; - } - else - b_changes_z = 0; - - if ( b_changes_z || b_changes_x || b_changes_y ) - { - newmovement = ( n_x_vector, n_y_vector, newmovement[2] ); - movement = ( 0, 0, 0 ); - movement = vectorscale( movement, 0.8 ) + vectorscale( newmovement, 1 - 0.8 ); - tilt = max( 0, 10 + movement[0] * 160 ); - level.cameravec = ( cos( movement[1] * 180 ) * zoom_level, sin( movement[1] * 180 ) * zoom_level, tilt ); - iprintln( level.cameravec[0] + " " + level.cameravec[1] + " " + level.cameravec[2] ); - } - } - } - else - level.camera_prev_snapto = level.camera_snapto; - - if ( isdefined( level.current_select_ent ) ) - { - originoffset = vectorscale( level.cameravec, -1 ); - temp_offset = originoffset + vectorscale( ( 0, 0, -1 ), 60.0 ); - anglesoffset = vectortoangles( temp_offset ); - - if ( !isdefined( model ) ) - { - model = spawn( "script_origin", level.current_select_ent.v["origin"] ); - model setmodel( "tag_origin" ); - } - - if ( model.origin != level.current_select_ent.v["origin"] ) - model.origin = level.current_select_ent.v["origin"]; - - level.camera linkto( model, "tag_origin", level.cameravec, anglesoffset ); - } - else - { - wait 0.05; - continue; - } - } - else - level.camera unlink(); - } - - wait 0.05; - } -#/ -} - -camera_hud_toggle( text ) -{ - if ( isdefined( level.camera_hud ) ) - level.camera_hud destroy(); - - level.camera_hud = newdebughudelem(); - level.camera_hud settext( text ); - level.camera_hud.horzalign = "left"; - level.camera_hud.vertalign = "bottom"; - level.camera_hud.alignx = "left"; - level.camera_hud.aligny = "bottom"; - level.camera_hud.foreground = 1; - level.camera_hud.fontscale = 1.1; - level.camera_hud.sort = 21; - level.camera_hud.alpha = 1; - level.camera_hud.color = ( 1, 1, 1 ); -} - -init_sp_paths() -{ - -} - -make_sp_player_invulnerable( player ) -{ - -} - -delete_arrays_in_sp() -{ - -} - -used_in_animation( sp ) -{ - -} - -init_client_sp_variables() -{ - -} - -init_mp_paths() -{ - level.cfx_server_scriptdata = "mpcreatefx/"; - level.cfx_client_scriptdata = "mpclientcreatefx/"; - level.cfx_server_loop = "maps\mp\_utility::createLoopEffect"; - level.cfx_server_oneshot = "maps\mp\_utility::createOneshotEffect"; - level.cfx_server_exploder = "maps\mp\_utility::createExploder"; - level.cfx_server_loopsound = "maps\mp\_createfx::createLoopSound"; - level.cfx_server_scriptgendump = "maps\mp\createfx\" + level.script + "_fx::main();"; - level.cfx_client_loop = "clientscripts\mp\_fx::createLoopEffect"; - level.cfx_client_oneshot = "clientscripts\mp\_fx::createOneshotEffect"; - level.cfx_client_exploder = "clientscripts\mp\_fx::createExploder"; - level.cfx_client_loopsound = "clientscripts\mp\_fx::createLoopSound"; - level.cfx_client_scriptgendump = "clientscripts\mp\_createfx\" + level.script + "_fx::main();"; - level.cfx_func_run_gump_func = ::empty; - level.cfx_func_loopfx = maps\mp\_fx::loopfxthread; - level.cfx_func_oneshotfx = maps\mp\_fx::oneshotfxthread; - level.cfx_func_soundfx = maps\mp\_fx::create_loopsound; - level.cfx_func_script_gen_dump = maps\mp\_script_gen::script_gen_dump; - level.cfx_func_stop_loopsound = maps\mp\_fx::stop_loopsound; - level.cfx_func_create_looper = maps\mp\_fx::create_looper; - level.cfx_func_create_triggerfx = maps\mp\_fx::create_triggerfx; - level.cfx_func_create_loopsound = maps\mp\_fx::create_loopsound; -} - -callback_playerconnect() -{ - self waittill( "begin" ); - - if ( !isdefined( level.hasspawned ) ) - { - spawnpoints = getentarray( "mp_global_intermission", "classname" ); - - if ( !spawnpoints.size ) - spawnpoints = getentarray( "info_player_start", "classname" ); -/# - assert( spawnpoints.size ); -#/ - spawnpoint = spawnpoints[0]; - self.sessionteam = "none"; - self.sessionstate = "playing"; - - if ( !level.teambased ) - self.ffateam = "none"; - - self spawn( spawnpoint.origin, spawnpoint.angles ); - level.player = self; - level.hasspawned = 1; - } - else - kick( self.name ); -} - -delete_spawns() -{ - spawn_classes = []; - spawn_classes[spawn_classes.size] = "mp_dm_spawn"; - spawn_classes[spawn_classes.size] = "mp_tdm_spawn"; - spawn_classes[spawn_classes.size] = "mp_dom_spawn"; - spawn_classes[spawn_classes.size] = "mp_dom_spawn_axis_start"; - spawn_classes[spawn_classes.size] = "mp_dom_spawn_allies_start"; - spawn_classes[spawn_classes.size] = "mp_res_spawn_allies"; - spawn_classes[spawn_classes.size] = "mp_res_spawn_axis"; - spawn_classes[spawn_classes.size] = "mp_res_spawn_axis_start"; - spawn_classes[spawn_classes.size] = "mp_dem_spawn_attacker"; - spawn_classes[spawn_classes.size] = "mp_dem_spawn_attacker_a"; - spawn_classes[spawn_classes.size] = "mp_dem_spawn_attacker_b"; - spawn_classes[spawn_classes.size] = "mp_dem_spawn_attacker_c"; - spawn_classes[spawn_classes.size] = "mp_dem_spawn_attacker_start"; - spawn_classes[spawn_classes.size] = "mp_dem_spawn_attackerOT_start"; - spawn_classes[spawn_classes.size] = "mp_dem_spawn_defender"; - spawn_classes[spawn_classes.size] = "mp_dem_spawn_defender_a"; - spawn_classes[spawn_classes.size] = "mp_dem_spawn_defender_b"; - spawn_classes[spawn_classes.size] = "mp_dem_spawn_defender_c"; - spawn_classes[spawn_classes.size] = "mp_dem_spawn_defender_start"; - spawn_classes[spawn_classes.size] = "mp_dem_spawn_defenderOT_start"; - - foreach ( class in spawn_classes ) - { - spawns = getentarray( class, "classname" ); - - foreach ( spawn in spawns ) - spawn delete(); - } -} - -createfxdelay() -{ - wait 10; - level.createfx_delay_done = 1; -} - -init_client_mp_variables() -{ - level.cfx_exploder_before = maps\mp\_utility::exploder_before_load; - level.cfx_exploder_after = maps\mp\_utility::exploder_after_load; -} diff --git a/Multiplayer Core/patch_mp/maps/mp/_demo.gsc b/Multiplayer Core/patch_mp/maps/mp/_demo.gsc deleted file mode 100644 index ce5101f..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/_demo.gsc +++ /dev/null @@ -1,94 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -init() -{ - level.bookmark["kill"] = 0; - level.bookmark["event"] = 1; - level.bookmark["zm_round_end"] = 2; - level.bookmark["zm_player_downed"] = 3; - level.bookmark["zm_player_revived"] = 4; - level.bookmark["zm_player_bledout"] = 5; - level.bookmark["zm_player_use_magicbox"] = 6; - level.bookmark["score_event"] = 7; - level.bookmark["medal"] = 8; - level.bookmark["round_result"] = 9; - level.bookmark["game_result"] = 10; - level.bookmark["zm_powerup_dropped"] = 11; - level.bookmark["zm_player_powerup_grabbed"] = 12; - level.bookmark["zm_player_perk"] = 13; - level.bookmark["zm_power"] = 14; - level.bookmark["zm_player_door"] = 15; - level.bookmark["zm_player_buildable_placed"] = 16; - level.bookmark["zm_player_use_packapunch"] = 17; - level.bookmark["zm_player_rampage"] = 18; - level.bookmark["zm_player_grenade_special"] = 19; - level.bookmark["zm_player_grenade_multiattack"] = 20; - level.bookmark["zm_player_meat_stink"] = 21; - level.bookmark["zm_player_grabbed_magicbox"] = 22; - level.bookmark["zm_player_grabbed_packapunch"] = 23; - level.bookmark["zm_player_grenade_special_long"] = 24; -} - -bookmark( type, time, clientent1, clientent2, eventpriority, inflictorent, overrideentitycamera, actorent ) -{ -/# - assert( isdefined( level.bookmark[type] ), "Unable to find a bookmark type for type - " + type ); -#/ - client1 = 255; - client2 = 255; - inflictorentnum = -1; - inflictorenttype = 0; - inflictorbirthtime = 0; - actorentnum = undefined; - scoreeventpriority = 0; - - if ( isdefined( clientent1 ) ) - client1 = clientent1 getentitynumber(); - - if ( isdefined( clientent2 ) ) - client2 = clientent2 getentitynumber(); - - if ( isdefined( eventpriority ) ) - scoreeventpriority = eventpriority; - - if ( isdefined( inflictorent ) ) - { - inflictorentnum = inflictorent getentitynumber(); - inflictorenttype = inflictorent getentitytype(); - - if ( isdefined( inflictorent.birthtime ) ) - inflictorbirthtime = inflictorent.birthtime; - } - - if ( !isdefined( overrideentitycamera ) ) - overrideentitycamera = 0; - - if ( isdefined( actorent ) ) - actorentnum = actorent getentitynumber(); - - adddemobookmark( level.bookmark[type], time, client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum ); -} - -gameresultbookmark( type, winningteamindex, losingteamindex ) -{ -/# - assert( isdefined( level.bookmark[type] ), "Unable to find a bookmark type for type - " + type ); -#/ - client1 = 255; - client2 = 255; - scoreeventpriority = 0; - inflictorentnum = -1; - inflictorenttype = 0; - inflictorbirthtime = 0; - overrideentitycamera = 0; - actorentnum = undefined; - - if ( isdefined( winningteamindex ) ) - client1 = winningteamindex; - - if ( isdefined( losingteamindex ) ) - client2 = losingteamindex; - - adddemobookmark( level.bookmark[type], gettime(), client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum ); -} diff --git a/Multiplayer Core/patch_mp/maps/mp/_fx.gsc b/Multiplayer Core/patch_mp/maps/mp/_fx.gsc deleted file mode 100644 index 32ef5e4..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/_fx.gsc +++ /dev/null @@ -1,455 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\_createfx; - -print_org( fxcommand, fxid, fxpos, waittime ) -{ -/# - if ( getdvar( _hash_F49A52C ) == "1" ) - { - println( "{" ); - println( "\"origin\" \"" + fxpos[0] + " " + fxpos[1] + " " + fxpos[2] + "\"" ); - println( "\"classname\" \"script_model\"" ); - println( "\"model\" \"fx\"" ); - println( "\"script_fxcommand\" \"" + fxcommand + "\"" ); - println( "\"script_fxid\" \"" + fxid + "\"" ); - println( "\"script_delay\" \"" + waittime + "\"" ); - println( "}" ); - } -#/ -} - -oneshotfx( fxid, fxpos, waittime, fxpos2 ) -{ - -} - -oneshotfxthread() -{ - wait 0.05; - - if ( self.v["delay"] > 0 ) - wait( self.v["delay"] ); - - create_triggerfx(); -} - -create_triggerfx() -{ - self.looper = spawnfx_wrapper( self.v["fxid"], self.v["origin"], self.v["forward"], self.v["up"] ); - triggerfx( self.looper, self.v["delay"] ); - create_loopsound(); -} - -exploderfx( num, fxid, fxpos, waittime, fxpos2, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout, exploder_group ) -{ - if ( 1 ) - { - ent = createexploder( fxid ); - ent.v["origin"] = fxpos; - ent.v["angles"] = ( 0, 0, 0 ); - - if ( isdefined( fxpos2 ) ) - ent.v["angles"] = vectortoangles( fxpos2 - fxpos ); - - ent.v["delay"] = waittime; - ent.v["exploder"] = num; - return; - } - - fx = spawn( "script_origin", ( 0, 0, 0 ) ); - fx.origin = fxpos; - fx.angles = vectortoangles( fxpos2 - fxpos ); - fx.script_exploder = num; - fx.script_fxid = fxid; - fx.script_delay = waittime; - fx.script_firefx = firefx; - fx.script_firefxdelay = firefxdelay; - fx.script_firefxsound = firefxsound; - fx.script_sound = fxsound; - fx.script_earthquake = fxquake; - fx.script_damage = fxdamage; - fx.script_radius = damage_radius; - fx.script_soundalias = soundalias; - fx.script_firefxtimeout = firefxtimeout; - fx.script_repeat = repeat; - fx.script_delay_min = delay_min; - fx.script_delay_max = delay_max; - fx.script_exploder_group = exploder_group; - forward = anglestoforward( fx.angles ); - forward = vectorscale( forward, 150 ); - fx.targetpos = fxpos + forward; - - if ( !isdefined( level._script_exploders ) ) - level._script_exploders = []; - - level._script_exploders[level._script_exploders.size] = fx; - maps\mp\_createfx::createfx_showorigin( fxid, fxpos, waittime, fxpos2, "exploderfx", fx, undefined, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout ); -} - -loopfx( fxid, fxpos, waittime, fxpos2, fxstart, fxstop, timeout ) -{ -/# - println( "Loopfx is deprecated!" ); -#/ - ent = createloopeffect( fxid ); - ent.v["origin"] = fxpos; - ent.v["angles"] = ( 0, 0, 0 ); - - if ( isdefined( fxpos2 ) ) - ent.v["angles"] = vectortoangles( fxpos2 - fxpos ); - - ent.v["delay"] = waittime; -} - -create_looper() -{ - self.looper = playloopedfx( level._effect[self.v["fxid"]], self.v["delay"], self.v["origin"], 0, self.v["forward"], self.v["up"] ); - create_loopsound(); -} - -create_loopsound() -{ - self notify( "stop_loop" ); - - if ( isdefined( self.v["soundalias"] ) && self.v["soundalias"] != "nil" ) - { - if ( isdefined( self.looper ) ) - self.looper thread maps\mp\_utility::loop_fx_sound( self.v["soundalias"], self.v["origin"], "death" ); - else - thread maps\mp\_utility::loop_fx_sound( self.v["soundalias"], self.v["origin"], "stop_loop" ); - } -} - -stop_loopsound() -{ - self notify( "stop_loop" ); -} - -loopfxthread() -{ - wait 0.05; - - if ( isdefined( self.fxstart ) ) - level waittill( "start fx" + self.fxstart ); - - while ( true ) - { - create_looper(); - - if ( isdefined( self.timeout ) ) - thread loopfxstop( self.timeout ); - - if ( isdefined( self.fxstop ) ) - level waittill( "stop fx" + self.fxstop ); - else - return; - - if ( isdefined( self.looper ) ) - self.looper delete(); - - if ( isdefined( self.fxstart ) ) - level waittill( "start fx" + self.fxstart ); - else - return; - } -} - -loopfxchangeid( ent ) -{ - self endon( "death" ); - - ent waittill( "effect id changed", change ); -} - -loopfxchangeorg( ent ) -{ - self endon( "death" ); - - for (;;) - { - ent waittill( "effect org changed", change ); - - self.origin = change; - } -} - -loopfxchangedelay( ent ) -{ - self endon( "death" ); - - ent waittill( "effect delay changed", change ); -} - -loopfxdeletion( ent ) -{ - self endon( "death" ); - - ent waittill( "effect deleted" ); - - self delete(); -} - -loopfxstop( timeout ) -{ - self endon( "death" ); - wait( timeout ); - self.looper delete(); -} - -loopsound( sound, pos, waittime ) -{ - level thread loopsoundthread( sound, pos, waittime ); -} - -loopsoundthread( sound, pos, waittime ) -{ - org = spawn( "script_origin", pos ); - org.origin = pos; - org playloopsound( sound ); -} - -gunfireloopfx( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) -{ - thread gunfireloopfxthread( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ); -} - -gunfireloopfxthread( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) -{ - level endon( "stop all gunfireloopfx" ); - wait 0.05; - - if ( betweensetsmax < betweensetsmin ) - { - temp = betweensetsmax; - betweensetsmax = betweensetsmin; - betweensetsmin = temp; - } - - betweensetsbase = betweensetsmin; - betweensetsrange = betweensetsmax - betweensetsmin; - - if ( shotdelaymax < shotdelaymin ) - { - temp = shotdelaymax; - shotdelaymax = shotdelaymin; - shotdelaymin = temp; - } - - shotdelaybase = shotdelaymin; - shotdelayrange = shotdelaymax - shotdelaymin; - - if ( shotsmax < shotsmin ) - { - temp = shotsmax; - shotsmax = shotsmin; - shotsmin = temp; - } - - shotsbase = shotsmin; - shotsrange = shotsmax - shotsmin; - fxent = spawnfx( level._effect[fxid], fxpos ); - - for (;;) - { - shotnum = shotsbase + randomint( shotsrange ); - - for ( i = 0; i < shotnum; i++ ) - { - triggerfx( fxent ); - wait( shotdelaybase + randomfloat( shotdelayrange ) ); - } - - wait( betweensetsbase + randomfloat( betweensetsrange ) ); - } -} - -gunfireloopfxvec( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) -{ - thread gunfireloopfxvecthread( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ); -} - -gunfireloopfxvecthread( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) -{ - level endon( "stop all gunfireloopfx" ); - wait 0.05; - - if ( betweensetsmax < betweensetsmin ) - { - temp = betweensetsmax; - betweensetsmax = betweensetsmin; - betweensetsmin = temp; - } - - betweensetsbase = betweensetsmin; - betweensetsrange = betweensetsmax - betweensetsmin; - - if ( shotdelaymax < shotdelaymin ) - { - temp = shotdelaymax; - shotdelaymax = shotdelaymin; - shotdelaymin = temp; - } - - shotdelaybase = shotdelaymin; - shotdelayrange = shotdelaymax - shotdelaymin; - - if ( shotsmax < shotsmin ) - { - temp = shotsmax; - shotsmax = shotsmin; - shotsmin = temp; - } - - shotsbase = shotsmin; - shotsrange = shotsmax - shotsmin; - fxpos2 = vectornormalize( fxpos2 - fxpos ); - fxent = spawnfx( level._effect[fxid], fxpos, fxpos2 ); - - for (;;) - { - shotnum = shotsbase + randomint( shotsrange ); - - for ( i = 0; i < int( shotnum / level.fxfireloopmod ); i++ ) - { - triggerfx( fxent ); - delay = ( shotdelaybase + randomfloat( shotdelayrange ) ) * level.fxfireloopmod; - - if ( delay < 0.05 ) - delay = 0.05; - - wait( delay ); - } - - wait( shotdelaybase + randomfloat( shotdelayrange ) ); - wait( betweensetsbase + randomfloat( betweensetsrange ) ); - } -} - -setfireloopmod( value ) -{ - level.fxfireloopmod = 1 / value; -} - -setup_fx() -{ - if ( !isdefined( self.script_fxid ) || !isdefined( self.script_fxcommand ) || !isdefined( self.script_delay ) ) - return; - - org = undefined; - - if ( isdefined( self.target ) ) - { - ent = getent( self.target, "targetname" ); - - if ( isdefined( ent ) ) - org = ent.origin; - } - - fxstart = undefined; - - if ( isdefined( self.script_fxstart ) ) - fxstart = self.script_fxstart; - - fxstop = undefined; - - if ( isdefined( self.script_fxstop ) ) - fxstop = self.script_fxstop; - - if ( self.script_fxcommand == "OneShotfx" ) - oneshotfx( self.script_fxid, self.origin, self.script_delay, org ); - - if ( self.script_fxcommand == "loopfx" ) - loopfx( self.script_fxid, self.origin, self.script_delay, org, fxstart, fxstop ); - - if ( self.script_fxcommand == "loopsound" ) - loopsound( self.script_fxid, self.origin, self.script_delay ); - - self delete(); -} - -script_print_fx() -{ -/# - if ( !isdefined( self.script_fxid ) || !isdefined( self.script_fxcommand ) || !isdefined( self.script_delay ) ) - { - println( "Effect at origin ", self.origin, " doesn't have script_fxid/script_fxcommand/script_delay" ); - self delete(); - return; - } - - if ( isdefined( self.target ) ) - org = getent( self.target, "targetname" ).origin; - else - org = "undefined"; - - if ( self.script_fxcommand == "OneShotfx" ) - println( "mapsmp_fx::OneShotfx(\"" + self.script_fxid + "\", " + self.origin + ", " + self.script_delay + ", " + org + ");" ); - - if ( self.script_fxcommand == "loopfx" ) - println( "mapsmp_fx::LoopFx(\"" + self.script_fxid + "\", " + self.origin + ", " + self.script_delay + ", " + org + ");" ); - - if ( self.script_fxcommand == "loopsound" ) - println( "mapsmp_fx::LoopSound(\"" + self.script_fxid + "\", " + self.origin + ", " + self.script_delay + ", " + org + ");" ); -#/ -} - -script_playfx( id, pos, pos2 ) -{ - if ( !id ) - return; - - if ( isdefined( pos2 ) ) - playfx( id, pos, pos2 ); - else - playfx( id, pos ); -} - -script_playfxontag( id, ent, tag ) -{ - if ( !id ) - return; - - playfxontag( id, ent, tag ); -} - -grenadeexplosionfx( pos ) -{ - playfx( level._effect["mechanical explosion"], pos ); - earthquake( 0.15, 0.5, pos, 250 ); -} - -soundfx( fxid, fxpos, endonnotify ) -{ - org = spawn( "script_origin", ( 0, 0, 0 ) ); - org.origin = fxpos; - org playloopsound( fxid ); - - if ( isdefined( endonnotify ) ) - org thread soundfxdelete( endonnotify ); -} - -soundfxdelete( endonnotify ) -{ - level waittill( endonnotify ); - - self delete(); -} - -blenddelete( blend ) -{ - self waittill( "death" ); - - blend delete(); -} - -spawnfx_wrapper( fx_id, origin, forward, up ) -{ -/# - assert( isdefined( level._effect[fx_id] ), "Missing level._effect[\"" + fx_id + "\"]. You did not setup the fx before calling it in createFx." ); -#/ - fx_object = spawnfx( level._effect[fx_id], origin, forward, up ); - return fx_object; -} diff --git a/Multiplayer Core/patch_mp/maps/mp/_load.gsc b/Multiplayer Core/patch_mp/maps/mp/_load.gsc deleted file mode 100644 index 7e577f9..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/_load.gsc +++ /dev/null @@ -1,516 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\_script_gen; -#include maps\mp\gametypes\_spawning; -#include maps\mp\gametypes\_tweakables; -#include maps\mp\_destructible; -#include maps\mp\_riotshield; -#include maps\mp\_vehicles; -#include maps\mp\killstreaks\_dogs; -#include maps\mp\killstreaks\_ai_tank; -#include maps\mp\killstreaks\_rcbomb; -#include maps\mp\killstreaks\_helicopter_guard; -#include maps\mp\_trophy_system; -#include maps\mp\_proximity_grenade; -#include maps\mp\_audio; -#include maps\mp\_busing; -#include maps\mp\_music; -#include maps\mp\_fxanim; -#include maps\mp\_interactive_objects; -#include maps\mp\_serverfaceanim_mp; -#include maps\mp\_art; -#include maps\mp\_createfx; -#include maps\mp\_global_fx; -#include maps\mp\_demo; -#include maps\mp\_development_dvars; -#include maps\mp\_load; -#include maps\mp\animscripts\utility; -#include maps\mp\animscripts\traverse\shared; -#include maps\mp\gametypes\_spawnlogic; - -main( bscriptgened, bcsvgened, bsgenabled ) -{ - if ( !isdefined( level.script_gen_dump_reasons ) ) - level.script_gen_dump_reasons = []; - - if ( !isdefined( bsgenabled ) ) - level.script_gen_dump_reasons[level.script_gen_dump_reasons.size] = "First run"; - - if ( !isdefined( bcsvgened ) ) - bcsvgened = 0; - - level.bcsvgened = bcsvgened; - - if ( !isdefined( bscriptgened ) ) - bscriptgened = 0; - else - bscriptgened = 1; - - level.bscriptgened = bscriptgened; - level._loadstarted = 1; - struct_class_init(); - level.clientscripts = getdvar( "cg_usingClientScripts" ) != ""; - level._client_exploders = []; - level._client_exploder_ids = []; - - if ( !isdefined( level.flag ) ) - { - level.flag = []; - level.flags_lock = []; - } - - if ( !isdefined( level.timeofday ) ) - level.timeofday = "day"; - - flag_init( "scriptgen_done" ); - level.script_gen_dump_reasons = []; - - if ( !isdefined( level.script_gen_dump ) ) - { - level.script_gen_dump = []; - level.script_gen_dump_reasons[0] = "First run"; - } - - if ( !isdefined( level.script_gen_dump2 ) ) - level.script_gen_dump2 = []; - - if ( isdefined( level.createfxent ) ) - script_gen_dump_addline( "maps\mp\createfx\" + level.script + "_fx::main();", level.script + "_fx" ); - - if ( isdefined( level.script_gen_dump_preload ) ) - { - for ( i = 0; i < level.script_gen_dump_preload.size; i++ ) - script_gen_dump_addline( level.script_gen_dump_preload[i].string, level.script_gen_dump_preload[i].signature ); - } - - if ( getdvar( "scr_RequiredMapAspectratio" ) == "" ) - setdvar( "scr_RequiredMapAspectratio", "1" ); - - setdvar( "r_waterFogTest", 0 ); - setdvar( "tu6_player_shallowWaterHeight", "0.0" ); - precacherumble( "reload_small" ); - precacherumble( "reload_medium" ); - precacherumble( "reload_large" ); - precacherumble( "reload_clipin" ); - precacherumble( "reload_clipout" ); - precacherumble( "reload_rechamber" ); - precacherumble( "pullout_small" ); - precacherumble( "buzz_high" ); - precacherumble( "riotshield_impact" ); - registerclientsys( "levelNotify" ); - level.aitriggerspawnflags = getaitriggerflags(); - level.vehicletriggerspawnflags = getvehicletriggerflags(); - level.physicstracemaskphysics = 1; - level.physicstracemaskvehicle = 2; - level.physicstracemaskwater = 4; - level.physicstracemaskclip = 8; - level.physicstracecontentsvehicleclip = 16; - level.createfx_enabled = getdvar( "createfx" ) != ""; - - if ( !sessionmodeiszombiesgame() ) - { - thread maps\mp\gametypes\_spawning::init(); - thread maps\mp\gametypes\_tweakables::init(); - thread maps\mp\_destructible::init(); - thread maps\mp\_riotshield::register(); - thread maps\mp\_vehicles::init(); - thread maps\mp\killstreaks\_dogs::init(); - thread maps\mp\killstreaks\_ai_tank::register(); - thread maps\mp\killstreaks\_rcbomb::register(); - thread maps\mp\killstreaks\_helicopter_guard::register(); - thread maps\mp\_trophy_system::register(); - thread maps\mp\_proximity_grenade::register(); - maps\mp\_audio::init(); - thread maps\mp\_busing::businit(); - thread maps\mp\_music::music_init(); - thread maps\mp\_fxanim::init(); - } - else - { - level thread start_intro_screen_zm(); - thread maps\mp\_interactive_objects::init(); - maps\mp\_audio::init(); - thread maps\mp\_busing::businit(); - thread maps\mp\_music::music_init(); - thread maps\mp\_fxanim::init(); - thread maps\mp\_serverfaceanim_mp::init(); - - if ( level.createfx_enabled ) - setinitialplayersconnected(); - } - - visionsetnight( "default_night" ); - setup_traversals(); - maps\mp\_art::main(); - setupexploders(); - parse_structs(); - - if ( sessionmodeiszombiesgame() ) - thread footsteps(); -/# - level thread level_notify_listener(); - level thread client_notify_listener(); -#/ - thread maps\mp\_createfx::fx_init(); - - if ( level.createfx_enabled ) - { - calculate_map_center(); - maps\mp\_createfx::createfx(); - } - - if ( getdvar( "r_reflectionProbeGenerate" ) == "1" ) - { - maps\mp\_global_fx::main(); - - level waittill( "eternity" ); - } - - thread maps\mp\_global_fx::main(); - maps\mp\_demo::init(); - - if ( !sessionmodeiszombiesgame() ) - thread maps\mp\_development_dvars::init(); - - for ( p = 0; p < 6; p++ ) - { - switch ( p ) - { - case "0": - triggertype = "trigger_multiple"; - break; - case "1": - triggertype = "trigger_once"; - break; - case "2": - triggertype = "trigger_use"; - break; - case "3": - triggertype = "trigger_radius"; - break; - case "4": - triggertype = "trigger_lookat"; - break; - default: -/# - assert( p == 5 ); -#/ - triggertype = "trigger_damage"; - break; - } - - triggers = getentarray( triggertype, "classname" ); - - for ( i = 0; i < triggers.size; i++ ) - { - if ( isdefined( triggers[i].script_prefab_exploder ) ) - triggers[i].script_exploder = triggers[i].script_prefab_exploder; - - if ( isdefined( triggers[i].script_exploder ) ) - level thread maps\mp\_load::exploder_load( triggers[i] ); - } - } -} - -level_notify_listener() -{ - while ( true ) - { - val = getdvar( "level_notify" ); - - if ( val != "" ) - { - level notify( val ); - setdvar( "level_notify", "" ); - } - - wait 0.2; - } -} - -client_notify_listener() -{ - while ( true ) - { - val = getdvar( "client_notify" ); - - if ( val != "" ) - { - clientnotify( val ); - setdvar( "client_notify", "" ); - } - - wait 0.2; - } -} - -footsteps() -{ - maps\mp\animscripts\utility::setfootstepeffect( "asphalt", loadfx( "bio/player/fx_footstep_dust" ) ); - maps\mp\animscripts\utility::setfootstepeffect( "brick", loadfx( "bio/player/fx_footstep_dust" ) ); - maps\mp\animscripts\utility::setfootstepeffect( "carpet", loadfx( "bio/player/fx_footstep_dust" ) ); - maps\mp\animscripts\utility::setfootstepeffect( "cloth", loadfx( "bio/player/fx_footstep_dust" ) ); - maps\mp\animscripts\utility::setfootstepeffect( "concrete", loadfx( "bio/player/fx_footstep_dust" ) ); - maps\mp\animscripts\utility::setfootstepeffect( "dirt", loadfx( "bio/player/fx_footstep_sand" ) ); - maps\mp\animscripts\utility::setfootstepeffect( "foliage", loadfx( "bio/player/fx_footstep_sand" ) ); - maps\mp\animscripts\utility::setfootstepeffect( "gravel", loadfx( "bio/player/fx_footstep_dust" ) ); - maps\mp\animscripts\utility::setfootstepeffect( "grass", loadfx( "bio/player/fx_footstep_dust" ) ); - maps\mp\animscripts\utility::setfootstepeffect( "metal", loadfx( "bio/player/fx_footstep_dust" ) ); - maps\mp\animscripts\utility::setfootstepeffect( "mud", loadfx( "bio/player/fx_footstep_mud" ) ); - maps\mp\animscripts\utility::setfootstepeffect( "paper", loadfx( "bio/player/fx_footstep_dust" ) ); - maps\mp\animscripts\utility::setfootstepeffect( "plaster", loadfx( "bio/player/fx_footstep_dust" ) ); - maps\mp\animscripts\utility::setfootstepeffect( "rock", loadfx( "bio/player/fx_footstep_dust" ) ); - maps\mp\animscripts\utility::setfootstepeffect( "sand", loadfx( "bio/player/fx_footstep_sand" ) ); - maps\mp\animscripts\utility::setfootstepeffect( "water", loadfx( "bio/player/fx_footstep_water" ) ); - maps\mp\animscripts\utility::setfootstepeffect( "wood", loadfx( "bio/player/fx_footstep_dust" ) ); -} - -parse_structs() -{ - for ( i = 0; i < level.struct.size; i++ ) - { - if ( isdefined( level.struct[i].targetname ) ) - { - if ( level.struct[i].targetname == "flak_fire_fx" ) - { - level._effect["flak20_fire_fx"] = loadfx( "weapon/tracer/fx_tracer_flak_single_noExp" ); - level._effect["flak38_fire_fx"] = loadfx( "weapon/tracer/fx_tracer_quad_20mm_Flak38_noExp" ); - level._effect["flak_cloudflash_night"] = loadfx( "weapon/flak/fx_flak_cloudflash_night" ); - level._effect["flak_burst_single"] = loadfx( "weapon/flak/fx_flak_single_day_dist" ); - } - - if ( level.struct[i].targetname == "fake_fire_fx" ) - level._effect["distant_muzzleflash"] = loadfx( "weapon/muzzleflashes/heavy" ); - - if ( level.struct[i].targetname == "spotlight_fx" ) - level._effect["spotlight_beam"] = loadfx( "env/light/fx_ray_spotlight_md" ); - } - } -} - -exploder_load( trigger ) -{ - level endon( "killexplodertridgers" + trigger.script_exploder ); - - trigger waittill( "trigger" ); - - if ( isdefined( trigger.script_chance ) && randomfloat( 1 ) > trigger.script_chance ) - { - if ( isdefined( trigger.script_delay ) ) - wait( trigger.script_delay ); - else - wait 4; - - level thread exploder_load( trigger ); - return; - } - - maps\mp\_utility::exploder( trigger.script_exploder ); - level notify( "killexplodertridgers" + trigger.script_exploder ); -} - -setupexploders() -{ - ents = getentarray( "script_brushmodel", "classname" ); - smodels = getentarray( "script_model", "classname" ); - - for ( i = 0; i < smodels.size; i++ ) - ents[ents.size] = smodels[i]; - - for ( i = 0; i < ents.size; i++ ) - { - if ( isdefined( ents[i].script_prefab_exploder ) ) - ents[i].script_exploder = ents[i].script_prefab_exploder; - - if ( isdefined( ents[i].script_exploder ) ) - { - if ( ents[i].model == "fx" && ( !isdefined( ents[i].targetname ) || ents[i].targetname != "exploderchunk" ) ) - { - ents[i] hide(); - continue; - } - - if ( isdefined( ents[i].targetname ) && ents[i].targetname == "exploder" ) - { - ents[i] hide(); - ents[i] notsolid(); - continue; - } - - if ( isdefined( ents[i].targetname ) && ents[i].targetname == "exploderchunk" ) - { - ents[i] hide(); - ents[i] notsolid(); - } - } - } - - script_exploders = []; - potentialexploders = getentarray( "script_brushmodel", "classname" ); - - for ( i = 0; i < potentialexploders.size; i++ ) - { - if ( isdefined( potentialexploders[i].script_prefab_exploder ) ) - potentialexploders[i].script_exploder = potentialexploders[i].script_prefab_exploder; - - if ( isdefined( potentialexploders[i].script_exploder ) ) - script_exploders[script_exploders.size] = potentialexploders[i]; - } - - potentialexploders = getentarray( "script_model", "classname" ); - - for ( i = 0; i < potentialexploders.size; i++ ) - { - if ( isdefined( potentialexploders[i].script_prefab_exploder ) ) - potentialexploders[i].script_exploder = potentialexploders[i].script_prefab_exploder; - - if ( isdefined( potentialexploders[i].script_exploder ) ) - script_exploders[script_exploders.size] = potentialexploders[i]; - } - - potentialexploders = getentarray( "item_health", "classname" ); - - for ( i = 0; i < potentialexploders.size; i++ ) - { - if ( isdefined( potentialexploders[i].script_prefab_exploder ) ) - potentialexploders[i].script_exploder = potentialexploders[i].script_prefab_exploder; - - if ( isdefined( potentialexploders[i].script_exploder ) ) - script_exploders[script_exploders.size] = potentialexploders[i]; - } - - if ( !isdefined( level.createfxent ) ) - level.createfxent = []; - - acceptabletargetnames = []; - acceptabletargetnames["exploderchunk visible"] = 1; - acceptabletargetnames["exploderchunk"] = 1; - acceptabletargetnames["exploder"] = 1; - - for ( i = 0; i < script_exploders.size; i++ ) - { - exploder = script_exploders[i]; - ent = createexploder( exploder.script_fxid ); - ent.v = []; - ent.v["origin"] = exploder.origin; - ent.v["angles"] = exploder.angles; - ent.v["delay"] = exploder.script_delay; - ent.v["firefx"] = exploder.script_firefx; - ent.v["firefxdelay"] = exploder.script_firefxdelay; - ent.v["firefxsound"] = exploder.script_firefxsound; - ent.v["firefxtimeout"] = exploder.script_firefxtimeout; - ent.v["earthquake"] = exploder.script_earthquake; - ent.v["damage"] = exploder.script_damage; - ent.v["damage_radius"] = exploder.script_radius; - ent.v["soundalias"] = exploder.script_soundalias; - ent.v["repeat"] = exploder.script_repeat; - ent.v["delay_min"] = exploder.script_delay_min; - ent.v["delay_max"] = exploder.script_delay_max; - ent.v["target"] = exploder.target; - ent.v["ender"] = exploder.script_ender; - ent.v["type"] = "exploder"; - - if ( !isdefined( exploder.script_fxid ) ) - ent.v["fxid"] = "No FX"; - else - ent.v["fxid"] = exploder.script_fxid; - - ent.v["exploder"] = exploder.script_exploder; -/# - assert( isdefined( exploder.script_exploder ), "Exploder at origin " + exploder.origin + " has no script_exploder" ); -#/ - if ( !isdefined( ent.v["delay"] ) ) - ent.v["delay"] = 0; - - if ( isdefined( exploder.target ) ) - { - org = getent( ent.v["target"], "targetname" ).origin; - ent.v["angles"] = vectortoangles( org - ent.v["origin"] ); - } - - if ( exploder.classname == "script_brushmodel" || isdefined( exploder.model ) ) - { - ent.model = exploder; - ent.model.disconnect_paths = exploder.script_disconnectpaths; - } - - if ( isdefined( exploder.targetname ) && isdefined( acceptabletargetnames[exploder.targetname] ) ) - ent.v["exploder_type"] = exploder.targetname; - else - ent.v["exploder_type"] = "normal"; - - ent maps\mp\_createfx::post_entity_creation_function(); - } - - level.createfxexploders = []; - - for ( i = 0; i < level.createfxent.size; i++ ) - { - ent = level.createfxent[i]; - - if ( ent.v["type"] != "exploder" ) - continue; - - ent.v["exploder_id"] = getexploderid( ent ); - - if ( !isdefined( level.createfxexploders[ent.v["exploder"]] ) ) - level.createfxexploders[ent.v["exploder"]] = []; - - level.createfxexploders[ent.v["exploder"]][level.createfxexploders[ent.v["exploder"]].size] = ent; - } -} - -setup_traversals() -{ - potential_traverse_nodes = getallnodes(); - - for ( i = 0; i < potential_traverse_nodes.size; i++ ) - { - node = potential_traverse_nodes[i]; - - if ( node.type == "Begin" ) - node maps\mp\animscripts\traverse\shared::init_traverse(); - } -} - -calculate_map_center() -{ - if ( !isdefined( level.mapcenter ) ) - { - level.nodesmins = ( 0, 0, 0 ); - level.nodesmaxs = ( 0, 0, 0 ); - level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter( level.nodesmins, level.nodesmaxs ); -/# - println( "map center: ", level.mapcenter ); -#/ - setmapcenter( level.mapcenter ); - } -} - -start_intro_screen_zm() -{ - if ( level.createfx_enabled ) - return; - - if ( !isdefined( level.introscreen ) ) - { - level.introscreen = newhudelem(); - level.introscreen.x = 0; - level.introscreen.y = 0; - level.introscreen.horzalign = "fullscreen"; - level.introscreen.vertalign = "fullscreen"; - level.introscreen.foreground = 0; - level.introscreen setshader( "black", 640, 480 ); - wait 0.05; - } - - level.introscreen.alpha = 1; - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - players[i] freezecontrols( 1 ); - - wait 1; -} diff --git a/Multiplayer Core/patch_mp/maps/mp/_music.gsc b/Multiplayer Core/patch_mp/maps/mp/_music.gsc deleted file mode 100644 index 8d9c2db..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/_music.gsc +++ /dev/null @@ -1,28 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include maps\mp\_utility; - -music_init() -{ -/# - assert( level.clientscripts ); -#/ - level.musicstate = ""; - registerclientsys( "musicCmd" ); -} - -setmusicstate( state, player ) -{ - if ( isdefined( level.musicstate ) ) - { - if ( isdefined( player ) ) - { - setclientsysstate( "musicCmd", state, player ); - return; - } - else if ( level.musicstate != state ) - setclientsysstate( "musicCmd", state ); - } - - level.musicstate = state; -} diff --git a/Multiplayer Core/patch_mp/maps/mp/_script_gen.gsc b/Multiplayer Core/patch_mp/maps/mp/_script_gen.gsc deleted file mode 100644 index cb9a7ff..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/_script_gen.gsc +++ /dev/null @@ -1,291 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\_script_gen; - -script_gen_dump_checksaved() -{ - signatures = getarraykeys( level.script_gen_dump ); - - for ( i = 0; i < signatures.size; i++ ) - { - if ( !isdefined( level.script_gen_dump2[signatures[i]] ) ) - { - level.script_gen_dump[signatures[i]] = undefined; - level.script_gen_dump_reasons[level.script_gen_dump_reasons.size] = "Signature unmatched( removed feature ): " + signatures[i]; - } - } -} - -script_gen_dump() -{ -/# - script_gen_dump_checksaved(); - - if ( !level.script_gen_dump_reasons.size ) - { - flag_set( "scriptgen_done" ); - return; - } - - firstrun = 0; - - if ( level.bscriptgened ) - { - println( " " ); - println( " " ); - println( " " ); - println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); - println( "^3Dumping scriptgen dump for these reasons" ); - println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); - - for ( i = 0; i < level.script_gen_dump_reasons.size; i++ ) - { - if ( issubstr( level.script_gen_dump_reasons[i], "nowrite" ) ) - { - substr = getsubstr( level.script_gen_dump_reasons[i], 15 ); - println( i + ". ) " + substr ); - } - else - println( i + ". ) " + level.script_gen_dump_reasons[i] ); - - if ( level.script_gen_dump_reasons[i] == "First run" ) - firstrun = 1; - } - - println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); - println( " " ); - - if ( firstrun ) - { - println( "for First Run make sure you delete all of the vehicle precache script calls, createart calls, createfx calls( most commonly placed in maps\" + level.script + "_fx.gsc ) " ); - println( " " ); - println( "replace:" ); - println( "maps\_load::main( 1 );" ); - println( " " ); - println( "with( don't forget to add this file to P4 ):" ); - println( "maps\scriptgen\" + level.script + "_scriptgen::main();" ); - println( " " ); - } - - println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); - println( " " ); - println( "^2 / \ / \ / \" ); - println( "^2scroll up" ); - println( "^2 / \ / \ / \" ); - println( " " ); - } - else - return; - - filename = "scriptgen/" + level.script + "_scriptgen.gsc"; - csvfilename = "zone_source/" + level.script + ".csv"; - - if ( level.bscriptgened ) - file = openfile( filename, "write" ); - else - file = 0; - - assert( file != -1, "File not writeable( check it and and restart the map ): " + filename ); - script_gen_dumpprintln( file, "// script generated script do not write your own script here it will go away if you do." ); - script_gen_dumpprintln( file, "main()" ); - script_gen_dumpprintln( file, "{" ); - script_gen_dumpprintln( file, "" ); - script_gen_dumpprintln( file, "\tlevel.script_gen_dump = [];" ); - script_gen_dumpprintln( file, "" ); - signatures = getarraykeys( level.script_gen_dump ); - - for ( i = 0; i < signatures.size; i++ ) - { - if ( !issubstr( level.script_gen_dump[signatures[i]], "nowrite" ) ) - script_gen_dumpprintln( file, "\t" + level.script_gen_dump[signatures[i]] ); - } - - for ( i = 0; i < signatures.size; i++ ) - { - if ( !issubstr( level.script_gen_dump[signatures[i]], "nowrite" ) ) - { - script_gen_dumpprintln( file, "\tlevel.script_gen_dump[ " + "\"" + signatures[i] + "\"" + " ] = " + "\"" + signatures[i] + "\"" + ";" ); - continue; - } - - script_gen_dumpprintln( file, "\tlevel.script_gen_dump[ " + "\"" + signatures[i] + "\"" + " ] = " + "\"nowrite\"" + ";" ); - } - - script_gen_dumpprintln( file, "" ); - keys1 = undefined; - keys2 = undefined; - - if ( isdefined( level.sg_precacheanims ) ) - keys1 = getarraykeys( level.sg_precacheanims ); - - if ( isdefined( keys1 ) ) - { - for ( i = 0; i < keys1.size; i++ ) - script_gen_dumpprintln( file, "\tanim_precach_" + keys1[i] + "();" ); - } - - script_gen_dumpprintln( file, "\tmaps\_load::main( 1, " + level.bcsvgened + ", 1 );" ); - script_gen_dumpprintln( file, "}" ); - script_gen_dumpprintln( file, "" ); - - if ( isdefined( level.sg_precacheanims ) ) - keys1 = getarraykeys( level.sg_precacheanims ); - - if ( isdefined( keys1 ) ) - { - for ( i = 0; i < keys1.size; i++ ) - { - script_gen_dumpprintln( file, "#using_animtree( \"" + keys1[i] + "\" );" ); - script_gen_dumpprintln( file, "anim_precach_" + keys1[i] + "()" ); - script_gen_dumpprintln( file, "{" ); - script_gen_dumpprintln( file, "\tlevel.sg_animtree[ \"" + keys1[i] + "\" ] = #animtree;" ); - keys2 = getarraykeys( level.sg_precacheanims[keys1[i]] ); - - if ( isdefined( keys2 ) ) - { - for ( j = 0; j < keys2.size; j++ ) - script_gen_dumpprintln( file, "\tlevel.sg_anim[ \"" + keys2[j] + "\" ] = %" + keys2[j] + ";" ); - } - - script_gen_dumpprintln( file, "}" ); - script_gen_dumpprintln( file, "" ); - } - } - - if ( level.bscriptgened ) - saved = closefile( file ); - else - saved = 1; - - if ( level.bcsvgened ) - csvfile = openfile( csvfilename, "write" ); - else - csvfile = 0; - - assert( csvfile != -1, "File not writeable( check it and and restart the map ): " + csvfilename ); - signatures = getarraykeys( level.script_gen_dump ); - - for ( i = 0; i < signatures.size; i++ ) - script_gen_csvdumpprintln( csvfile, signatures[i] ); - - if ( level.bcsvgened ) - csvfilesaved = closefile( csvfile ); - else - csvfilesaved = 1; - - assert( csvfilesaved == 1, "csv not saved( see above message? ): " + csvfilename ); - assert( saved == 1, "map not saved( see above message? ): " + filename ); -#/ -/# - assert( !level.bscriptgened, "SCRIPTGEN generated: follow instructions listed above this error in the console" ); -#/ - if ( level.bscriptgened ) - { -/# - assertmsg( "SCRIPTGEN updated: Rebuild fast file and run map again" ); -#/ - } - - flag_set( "scriptgen_done" ); -} - -script_gen_csvdumpprintln( file, signature ) -{ - prefix = undefined; - writtenprefix = undefined; - path = ""; - extension = ""; - - if ( issubstr( signature, "ignore" ) ) - prefix = "ignore"; - else if ( issubstr( signature, "col_map_sp" ) ) - prefix = "col_map_sp"; - else if ( issubstr( signature, "gfx_map" ) ) - prefix = "gfx_map"; - else if ( issubstr( signature, "rawfile" ) ) - prefix = "rawfile"; - else if ( issubstr( signature, "sound" ) ) - prefix = "sound"; - else if ( issubstr( signature, "xmodel" ) ) - prefix = "xmodel"; - else if ( issubstr( signature, "xanim" ) ) - prefix = "xanim"; - else if ( issubstr( signature, "item" ) ) - { - prefix = "item"; - writtenprefix = "weapon"; - path = "sp/"; - } - else if ( issubstr( signature, "fx" ) ) - prefix = "fx"; - else if ( issubstr( signature, "menu" ) ) - { - prefix = "menu"; - writtenprefix = "menufile"; - path = "ui / scriptmenus/"; - extension = ".menu"; - } - else if ( issubstr( signature, "rumble" ) ) - { - prefix = "rumble"; - writtenprefix = "rawfile"; - path = "rumble/"; - } - else if ( issubstr( signature, "shader" ) ) - { - prefix = "shader"; - writtenprefix = "material"; - } - else if ( issubstr( signature, "shock" ) ) - { - prefix = "shock"; - writtenprefix = "rawfile"; - extension = ".shock"; - path = "shock/"; - } - else if ( issubstr( signature, "string" ) ) - { - prefix = "string"; -/# - assertmsg( "string not yet supported by scriptgen" ); -#/ - } - else if ( issubstr( signature, "turret" ) ) - { - prefix = "turret"; - writtenprefix = "weapon"; - path = "sp/"; - } - else if ( issubstr( signature, "vehicle" ) ) - { - prefix = "vehicle"; - writtenprefix = "rawfile"; - path = "vehicles/"; - } - - if ( !isdefined( prefix ) ) - return; - - if ( !isdefined( writtenprefix ) ) - string = prefix + ", " + getsubstr( signature, prefix.size + 1, signature.size ); - else - string = writtenprefix + ", " + path + getsubstr( signature, prefix.size + 1, signature.size ) + extension; -/# - if ( file == -1 || !level.bcsvgened ) - println( string ); - else - fprintln( file, string ); -#/ -} - -script_gen_dumpprintln( file, string ) -{ -/# - if ( file == -1 || !level.bscriptgened ) - println( string ); - else - fprintln( file, string ); -#/ -} diff --git a/Multiplayer Core/patch_mp/maps/mp/_utility.gsc b/Multiplayer Core/patch_mp/maps/mp/_utility.gsc deleted file mode 100644 index 70e5702..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/_utility.gsc +++ /dev/null @@ -1,2721 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include common_scripts\utility; -#include maps\mp\gametypes\_hud_util; -#include maps\mp\_createfx; -#include maps\mp\_utility; - -addcallback( event, func ) -{ -/# - assert( isdefined( event ), "Trying to set a callback on an undefined event." ); -#/ - if ( !isdefined( level._callbacks ) || !isdefined( level._callbacks[event] ) ) - level._callbacks[event] = []; - - level._callbacks[event] = add_to_array( level._callbacks[event], func, 0 ); -} - -callback( event ) -{ - if ( isdefined( level._callbacks ) && isdefined( level._callbacks[event] ) ) - { - for ( i = 0; i < level._callbacks[event].size; i++ ) - { - callback = level._callbacks[event][i]; - - if ( isdefined( callback ) ) - self thread [[ callback ]](); - } - } -} - -onfinalizeinitialization_callback( func ) -{ - addcallback( "on_finalize_initialization", func ); -} - -triggeroff() -{ - if ( !isdefined( self.realorigin ) ) - self.realorigin = self.origin; - - if ( self.origin == self.realorigin ) - self.origin += vectorscale( ( 0, 0, -1 ), 10000.0 ); -} - -triggeron() -{ - if ( isdefined( self.realorigin ) ) - self.origin = self.realorigin; -} - -error( msg ) -{ -/# - println( "^c*ERROR* ", msg ); - wait 0.05; - - if ( getdvar( _hash_F49A52C ) != "1" ) - { -/# - assertmsg( "This is a forced error - attach the log file" ); -#/ - } -#/ -} - -warning( msg ) -{ -/# - println( "^1WARNING: " + msg ); -#/ -} - -spawn_array_struct() -{ - s = spawnstruct(); - s.a = []; - return s; -} - -within_fov( start_origin, start_angles, end_origin, fov ) -{ - normal = vectornormalize( end_origin - start_origin ); - forward = anglestoforward( start_angles ); - dot = vectordot( forward, normal ); - return dot >= fov; -} - -append_array_struct( dst_s, src_s ) -{ - for ( i = 0; i < src_s.a.size; i++ ) - dst_s.a[dst_s.a.size] = src_s.a[i]; -} - -exploder( num ) -{ - [[ level.exploderfunction ]]( num ); -} - -exploder_stop( num ) -{ - stop_exploder( num ); -} - -exploder_sound() -{ - if ( isdefined( self.script_delay ) ) - wait( self.script_delay ); - - self playsound( level.scr_sound[self.script_sound] ); -} - -cannon_effect() -{ - if ( isdefined( self.v["repeat"] ) ) - { - for ( i = 0; i < self.v["repeat"]; i++ ) - { - playfx( level._effect[self.v["fxid"]], self.v["origin"], self.v["forward"], self.v["up"] ); - self exploder_delay(); - } - - return; - } - - self exploder_delay(); - - if ( isdefined( self.looper ) ) - self.looper delete(); - - self.looper = spawnfx( getfx( self.v["fxid"] ), self.v["origin"], self.v["forward"], self.v["up"] ); - triggerfx( self.looper ); - exploder_playsound(); -} - -exploder_delay() -{ - if ( !isdefined( self.v["delay"] ) ) - self.v["delay"] = 0; - - min_delay = self.v["delay"]; - max_delay = self.v["delay"] + 0.001; - - if ( isdefined( self.v["delay_min"] ) ) - min_delay = self.v["delay_min"]; - - if ( isdefined( self.v["delay_max"] ) ) - max_delay = self.v["delay_max"]; - - if ( min_delay > 0 ) - wait( randomfloatrange( min_delay, max_delay ) ); -} - -exploder_playsound() -{ - if ( !isdefined( self.v["soundalias"] ) || self.v["soundalias"] == "nil" ) - return; - - play_sound_in_space( self.v["soundalias"], self.v["origin"] ); -} - -brush_delete() -{ - num = self.v["exploder"]; - - if ( isdefined( self.v["delay"] ) ) - wait( self.v["delay"] ); - else - wait 0.05; - - if ( !isdefined( self.model ) ) - return; -/# - assert( isdefined( self.model ) ); -#/ - if ( level.createfx_enabled ) - { - if ( isdefined( self.exploded ) ) - return; - - self.exploded = 1; - self.model hide(); - self.model notsolid(); - wait 3; - self.exploded = undefined; - self.model show(); - self.model solid(); - return; - } - - if ( !isdefined( self.v["fxid"] ) || self.v["fxid"] == "No FX" ) - self.v["exploder"] = undefined; - - waittillframeend; - self.model delete(); -} - -brush_show() -{ - if ( isdefined( self.v["delay"] ) ) - wait( self.v["delay"] ); -/# - assert( isdefined( self.model ) ); -#/ - self.model show(); - self.model solid(); - - if ( level.createfx_enabled ) - { - if ( isdefined( self.exploded ) ) - return; - - self.exploded = 1; - wait 3; - self.exploded = undefined; - self.model hide(); - self.model notsolid(); - } -} - -brush_throw() -{ - if ( isdefined( self.v["delay"] ) ) - wait( self.v["delay"] ); - - ent = undefined; - - if ( isdefined( self.v["target"] ) ) - ent = getent( self.v["target"], "targetname" ); - - if ( !isdefined( ent ) ) - { - self.model delete(); - return; - } - - self.model show(); - startorg = self.v["origin"]; - startang = self.v["angles"]; - org = ent.origin; - temp_vec = org - self.v["origin"]; - x = temp_vec[0]; - y = temp_vec[1]; - z = temp_vec[2]; - self.model rotatevelocity( ( x, y, z ), 12 ); - self.model movegravity( ( x, y, z ), 12 ); - - if ( level.createfx_enabled ) - { - if ( isdefined( self.exploded ) ) - return; - - self.exploded = 1; - wait 3; - self.exploded = undefined; - self.v["origin"] = startorg; - self.v["angles"] = startang; - self.model hide(); - return; - } - - self.v["exploder"] = undefined; - wait 6; - self.model delete(); -} - -getplant() -{ - start = self.origin + vectorscale( ( 0, 0, 1 ), 10.0 ); - range = 11; - forward = anglestoforward( self.angles ); - forward = vectorscale( forward, range ); - traceorigins[0] = start + forward; - traceorigins[1] = start; - trace = bullettrace( traceorigins[0], traceorigins[0] + vectorscale( ( 0, 0, -1 ), 18.0 ), 0, undefined ); - - if ( trace["fraction"] < 1 ) - { - temp = spawnstruct(); - temp.origin = trace["position"]; - temp.angles = orienttonormal( trace["normal"] ); - return temp; - } - - trace = bullettrace( traceorigins[1], traceorigins[1] + vectorscale( ( 0, 0, -1 ), 18.0 ), 0, undefined ); - - if ( trace["fraction"] < 1 ) - { - temp = spawnstruct(); - temp.origin = trace["position"]; - temp.angles = orienttonormal( trace["normal"] ); - return temp; - } - - traceorigins[2] = start + vectorscale( ( 1, 1, 0 ), 16.0 ); - traceorigins[3] = start + vectorscale( ( 1, -1, 0 ), 16.0 ); - traceorigins[4] = start + vectorscale( ( -1, -1, 0 ), 16.0 ); - traceorigins[5] = start + vectorscale( ( -1, 1, 0 ), 16.0 ); - besttracefraction = undefined; - besttraceposition = undefined; - - for ( i = 0; i < traceorigins.size; i++ ) - { - trace = bullettrace( traceorigins[i], traceorigins[i] + vectorscale( ( 0, 0, -1 ), 1000.0 ), 0, undefined ); - - if ( !isdefined( besttracefraction ) || trace["fraction"] < besttracefraction ) - { - besttracefraction = trace["fraction"]; - besttraceposition = trace["position"]; - } - } - - if ( besttracefraction == 1 ) - besttraceposition = self.origin; - - temp = spawnstruct(); - temp.origin = besttraceposition; - temp.angles = orienttonormal( trace["normal"] ); - return temp; -} - -orienttonormal( normal ) -{ - hor_normal = ( normal[0], normal[1], 0 ); - hor_length = length( hor_normal ); - - if ( !hor_length ) - return ( 0, 0, 0 ); - - hor_dir = vectornormalize( hor_normal ); - neg_height = normal[2] * -1; - tangent = ( hor_dir[0] * neg_height, hor_dir[1] * neg_height, hor_length ); - plant_angle = vectortoangles( tangent ); - return plant_angle; -} - -array_levelthread( ents, process, var, excluders ) -{ - exclude = []; - - for ( i = 0; i < ents.size; i++ ) - exclude[i] = 0; - - if ( isdefined( excluders ) ) - { - for ( i = 0; i < ents.size; i++ ) - { - for ( p = 0; p < excluders.size; p++ ) - { - if ( ents[i] == excluders[p] ) - exclude[i] = 1; - } - } - } - - for ( i = 0; i < ents.size; i++ ) - { - if ( !exclude[i] ) - { - if ( isdefined( var ) ) - { - level thread [[ process ]]( ents[i], var ); - continue; - } - - level thread [[ process ]]( ents[i] ); - } - } -} - -deleteplacedentity( entity ) -{ - entities = getentarray( entity, "classname" ); - - for ( i = 0; i < entities.size; i++ ) - entities[i] delete(); -} - -playsoundonplayers( sound, team ) -{ -/# - assert( isdefined( level.players ) ); -#/ - if ( level.splitscreen ) - { - if ( isdefined( level.players[0] ) ) - level.players[0] playlocalsound( sound ); - } - else if ( isdefined( team ) ) - { - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - - if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) - player playlocalsound( sound ); - } - } - else - { - for ( i = 0; i < level.players.size; i++ ) - level.players[i] playlocalsound( sound ); - } -} - -get_player_height() -{ - return 70.0; -} - -isbulletimpactmod( smeansofdeath ) -{ - return issubstr( smeansofdeath, "BULLET" ) || smeansofdeath == "MOD_HEAD_SHOT"; -} - -get_team_alive_players_s( teamname ) -{ - teamplayers_s = spawn_array_struct(); - - if ( isdefined( teamname ) && isdefined( level.aliveplayers ) && isdefined( level.aliveplayers[teamname] ) ) - { - for ( i = 0; i < level.aliveplayers[teamname].size; i++ ) - teamplayers_s.a[teamplayers_s.a.size] = level.aliveplayers[teamname][i]; - } - - return teamplayers_s; -} - -get_all_alive_players_s() -{ - allplayers_s = spawn_array_struct(); - - if ( isdefined( level.aliveplayers ) ) - { - keys = getarraykeys( level.aliveplayers ); - - for ( i = 0; i < keys.size; i++ ) - { - team = keys[i]; - - for ( j = 0; j < level.aliveplayers[team].size; j++ ) - allplayers_s.a[allplayers_s.a.size] = level.aliveplayers[team][j]; - } - } - - return allplayers_s; -} - -waitrespawnbutton() -{ - self endon( "disconnect" ); - self endon( "end_respawn" ); - - while ( self usebuttonpressed() != 1 ) - wait 0.05; -} - -setlowermessage( text, time, combinemessageandtimer ) -{ - if ( !isdefined( self.lowermessage ) ) - return; - - if ( isdefined( self.lowermessageoverride ) && text != &"" ) - { - text = self.lowermessageoverride; - time = undefined; - } - - self notify( "lower_message_set" ); - self.lowermessage settext( text ); - - if ( isdefined( time ) && time > 0 ) - { - if ( !isdefined( combinemessageandtimer ) || !combinemessageandtimer ) - self.lowertimer.label = &""; - else - { - self.lowermessage settext( "" ); - self.lowertimer.label = text; - } - - self.lowertimer settimer( time ); - } - else - { - self.lowertimer settext( "" ); - self.lowertimer.label = &""; - } - - if ( self issplitscreen() ) - self.lowermessage.fontscale = 1.4; - - self.lowermessage fadeovertime( 0.05 ); - self.lowermessage.alpha = 1; - self.lowertimer fadeovertime( 0.05 ); - self.lowertimer.alpha = 1; -} - -setlowermessagevalue( text, value, combinemessage ) -{ - if ( !isdefined( self.lowermessage ) ) - return; - - if ( isdefined( self.lowermessageoverride ) && text != &"" ) - { - text = self.lowermessageoverride; - time = undefined; - } - - self notify( "lower_message_set" ); - - if ( !isdefined( combinemessage ) || !combinemessage ) - self.lowermessage settext( text ); - else - self.lowermessage settext( "" ); - - if ( isdefined( value ) && value > 0 ) - { - if ( !isdefined( combinemessage ) || !combinemessage ) - self.lowertimer.label = &""; - else - self.lowertimer.label = text; - - self.lowertimer setvalue( value ); - } - else - { - self.lowertimer settext( "" ); - self.lowertimer.label = &""; - } - - if ( self issplitscreen() ) - self.lowermessage.fontscale = 1.4; - - self.lowermessage fadeovertime( 0.05 ); - self.lowermessage.alpha = 1; - self.lowertimer fadeovertime( 0.05 ); - self.lowertimer.alpha = 1; -} - -clearlowermessage( fadetime ) -{ - if ( !isdefined( self.lowermessage ) ) - return; - - self notify( "lower_message_set" ); - - if ( !isdefined( fadetime ) || fadetime == 0 ) - setlowermessage( &"" ); - else - { - self endon( "disconnect" ); - self endon( "lower_message_set" ); - self.lowermessage fadeovertime( fadetime ); - self.lowermessage.alpha = 0; - self.lowertimer fadeovertime( fadetime ); - self.lowertimer.alpha = 0; - wait( fadetime ); - self setlowermessage( "" ); - } -} - -printonteam( text, team ) -{ -/# - assert( isdefined( level.players ) ); -#/ - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - - if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) - player iprintln( text ); - } -} - -printboldonteam( text, team ) -{ -/# - assert( isdefined( level.players ) ); -#/ - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - - if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) - player iprintlnbold( text ); - } -} - -printboldonteamarg( text, team, arg ) -{ -/# - assert( isdefined( level.players ) ); -#/ - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - - if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) - player iprintlnbold( text, arg ); - } -} - -printonteamarg( text, team, arg ) -{ - -} - -printonplayers( text, team ) -{ - players = level.players; - - for ( i = 0; i < players.size; i++ ) - { - if ( isdefined( team ) ) - { - if ( isdefined( players[i].pers["team"] ) && players[i].pers["team"] == team ) - players[i] iprintln( text ); - - continue; - } - - players[i] iprintln( text ); - } -} - -printandsoundoneveryone( team, enemyteam, printfriendly, printenemy, soundfriendly, soundenemy, printarg ) -{ - shoulddosounds = isdefined( soundfriendly ); - shoulddoenemysounds = 0; - - if ( isdefined( soundenemy ) ) - { -/# - assert( shoulddosounds ); -#/ - shoulddoenemysounds = 1; - } - - if ( !isdefined( printarg ) ) - printarg = ""; - - if ( level.splitscreen || !shoulddosounds ) - { - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - playerteam = player.pers["team"]; - - if ( isdefined( playerteam ) ) - { - if ( playerteam == team && isdefined( printfriendly ) && printfriendly != &"" ) - { - player iprintln( printfriendly, printarg ); - continue; - } - - if ( isdefined( printenemy ) && printenemy != &"" ) - { - if ( isdefined( enemyteam ) && playerteam == enemyteam ) - { - player iprintln( printenemy, printarg ); - continue; - } - - if ( !isdefined( enemyteam ) && playerteam != team ) - player iprintln( printenemy, printarg ); - } - } - } - - if ( shoulddosounds ) - { -/# - assert( level.splitscreen ); -#/ - level.players[0] playlocalsound( soundfriendly ); - } - } - else - { -/# - assert( shoulddosounds ); -#/ - if ( shoulddoenemysounds ) - { - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - playerteam = player.pers["team"]; - - if ( isdefined( playerteam ) ) - { - if ( playerteam == team ) - { - if ( isdefined( printfriendly ) && printfriendly != &"" ) - player iprintln( printfriendly, printarg ); - - player playlocalsound( soundfriendly ); - continue; - } - - if ( isdefined( enemyteam ) && playerteam == enemyteam || !isdefined( enemyteam ) && playerteam != team ) - { - if ( isdefined( printenemy ) && printenemy != &"" ) - player iprintln( printenemy, printarg ); - - player playlocalsound( soundenemy ); - } - } - } - } - else - { - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - playerteam = player.pers["team"]; - - if ( isdefined( playerteam ) ) - { - if ( playerteam == team ) - { - if ( isdefined( printfriendly ) && printfriendly != &"" ) - player iprintln( printfriendly, printarg ); - - player playlocalsound( soundfriendly ); - continue; - } - - if ( isdefined( printenemy ) && printenemy != &"" ) - { - if ( isdefined( enemyteam ) && playerteam == enemyteam ) - { - player iprintln( printenemy, printarg ); - continue; - } - - if ( !isdefined( enemyteam ) && playerteam != team ) - player iprintln( printenemy, printarg ); - } - } - } - } - } -} - -_playlocalsound( soundalias ) -{ - if ( level.splitscreen && !self ishost() ) - return; - - self playlocalsound( soundalias ); -} - -dvarintvalue( dvar, defval, minval, maxval ) -{ - dvar = "scr_" + level.gametype + "_" + dvar; - - if ( getdvar( dvar ) == "" ) - { - setdvar( dvar, defval ); - return defval; - } - - value = getdvarint( dvar ); - - if ( value > maxval ) - value = maxval; - else if ( value < minval ) - value = minval; - else - return value; - - setdvar( dvar, value ); - return value; -} - -dvarfloatvalue( dvar, defval, minval, maxval ) -{ - dvar = "scr_" + level.gametype + "_" + dvar; - - if ( getdvar( dvar ) == "" ) - { - setdvar( dvar, defval ); - return defval; - } - - value = getdvarfloat( dvar ); - - if ( value > maxval ) - value = maxval; - else if ( value < minval ) - value = minval; - else - return value; - - setdvar( dvar, value ); - return value; -} - -play_sound_on_tag( alias, tag ) -{ - if ( isdefined( tag ) ) - { - org = spawn( "script_origin", self gettagorigin( tag ) ); - org linkto( self, tag, ( 0, 0, 0 ), ( 0, 0, 0 ) ); - } - else - { - org = spawn( "script_origin", ( 0, 0, 0 ) ); - org.origin = self.origin; - org.angles = self.angles; - org linkto( self ); - } - - org playsound( alias ); - wait 5.0; - org delete(); -} - -createloopeffect( fxid ) -{ - ent = maps\mp\_createfx::createeffect( "loopfx", fxid ); - ent.v["delay"] = 0.5; - return ent; -} - -createoneshoteffect( fxid ) -{ - ent = maps\mp\_createfx::createeffect( "oneshotfx", fxid ); - ent.v["delay"] = -15; - return ent; -} - -loop_fx_sound( alias, origin, ender, timeout ) -{ - org = spawn( "script_origin", ( 0, 0, 0 ) ); - - if ( isdefined( ender ) ) - { - thread loop_sound_delete( ender, org ); - self endon( ender ); - } - - org.origin = origin; - org playloopsound( alias ); - - if ( !isdefined( timeout ) ) - return; - - wait( timeout ); -} - -exploder_damage() -{ - if ( isdefined( self.v["delay"] ) ) - delay = self.v["delay"]; - else - delay = 0; - - if ( isdefined( self.v["damage_radius"] ) ) - radius = self.v["damage_radius"]; - else - radius = 128; - - damage = self.v["damage"]; - origin = self.v["origin"]; - wait( delay ); - radiusdamage( origin, radius, damage, damage ); -} - -exploder_before_load( num ) -{ - waittillframeend; - waittillframeend; - activate_exploder( num ); -} - -exploder_after_load( num ) -{ - activate_exploder( num ); -} - -getexploderid( ent ) -{ - if ( !isdefined( level._exploder_ids ) ) - { - level._exploder_ids = []; - level._exploder_id = 1; - } - - if ( !isdefined( level._exploder_ids[ent.v["exploder"]] ) ) - { - level._exploder_ids[ent.v["exploder"]] = level._exploder_id; - level._exploder_id++; - } - - return level._exploder_ids[ent.v["exploder"]]; -} - -activate_exploder_on_clients( num ) -{ - if ( !isdefined( level._exploder_ids[num] ) ) - return; - - if ( !isdefined( level._client_exploders[num] ) ) - level._client_exploders[num] = 1; - - if ( !isdefined( level._client_exploder_ids[num] ) ) - level._client_exploder_ids[num] = 1; - - activateclientexploder( level._exploder_ids[num] ); -} - -delete_exploder_on_clients( num ) -{ - if ( !isdefined( level._exploder_ids[num] ) ) - return; - - if ( !isdefined( level._client_exploders[num] ) ) - return; - - level._client_exploders[num] = undefined; - level._client_exploder_ids[num] = undefined; - deactivateclientexploder( level._exploder_ids[num] ); -} - -activate_individual_exploder() -{ - level notify( "exploder" + self.v["exploder"] ); - - if ( level.createfx_enabled || !level.clientscripts || !isdefined( level._exploder_ids[int( self.v["exploder"] )] ) || isdefined( self.v["exploder_server"] ) ) - { -/# - println( "Exploder " + self.v["exploder"] + " created on server." ); -#/ - if ( isdefined( self.v["firefx"] ) ) - self thread fire_effect(); - - if ( isdefined( self.v["fxid"] ) && self.v["fxid"] != "No FX" ) - self thread cannon_effect(); - else if ( isdefined( self.v["soundalias"] ) ) - self thread sound_effect(); - } - - if ( isdefined( self.v["trailfx"] ) ) - self thread trail_effect(); - - if ( isdefined( self.v["damage"] ) ) - self thread exploder_damage(); - - if ( self.v["exploder_type"] == "exploder" ) - self thread brush_show(); - else if ( self.v["exploder_type"] == "exploderchunk" || self.v["exploder_type"] == "exploderchunk visible" ) - self thread brush_throw(); - else - self thread brush_delete(); -} - -trail_effect() -{ - self exploder_delay(); - - if ( !isdefined( self.v["trailfxtag"] ) ) - self.v["trailfxtag"] = "tag_origin"; - - temp_ent = undefined; - - if ( self.v["trailfxtag"] == "tag_origin" ) - playfxontag( level._effect[self.v["trailfx"]], self.model, self.v["trailfxtag"] ); - else - { - temp_ent = spawn( "script_model", self.model.origin ); - temp_ent setmodel( "tag_origin" ); - temp_ent linkto( self.model, self.v["trailfxtag"] ); - playfxontag( level._effect[self.v["trailfx"]], temp_ent, "tag_origin" ); - } - - if ( isdefined( self.v["trailfxsound"] ) ) - { - if ( !isdefined( temp_ent ) ) - self.model playloopsound( self.v["trailfxsound"] ); - else - temp_ent playloopsound( self.v["trailfxsound"] ); - } - - if ( isdefined( self.v["ender"] ) && isdefined( temp_ent ) ) - level thread trail_effect_ender( temp_ent, self.v["ender"] ); - - if ( !isdefined( self.v["trailfxtimeout"] ) ) - return; - - wait( self.v["trailfxtimeout"] ); - - if ( isdefined( temp_ent ) ) - temp_ent delete(); -} - -trail_effect_ender( ent, ender ) -{ - ent endon( "death" ); - - self waittill( ender ); - - ent delete(); -} - -activate_exploder( num ) -{ - num = int( num ); -/# - if ( level.createfx_enabled ) - { - for ( i = 0; i < level.createfxent.size; i++ ) - { - ent = level.createfxent[i]; - - if ( !isdefined( ent ) ) - continue; - - if ( ent.v["type"] != "exploder" ) - continue; - - if ( !isdefined( ent.v["exploder"] ) ) - continue; - - if ( ent.v["exploder"] != num ) - continue; - - if ( isdefined( ent.v["exploder_server"] ) ) - client_send = 0; - - ent activate_individual_exploder(); - } - - return; - } -#/ - client_send = 1; - - if ( isdefined( level.createfxexploders[num] ) ) - { - for ( i = 0; i < level.createfxexploders[num].size; i++ ) - { - if ( client_send && isdefined( level.createfxexploders[num][i].v["exploder_server"] ) ) - client_send = 0; - - level.createfxexploders[num][i] activate_individual_exploder(); - } - } - - if ( level.clientscripts ) - { - if ( !level.createfx_enabled && client_send == 1 ) - activate_exploder_on_clients( num ); - } -} - -stop_exploder( num ) -{ - num = int( num ); - - if ( level.clientscripts ) - { - if ( !level.createfx_enabled ) - delete_exploder_on_clients( num ); - } - - if ( isdefined( level.createfxexploders[num] ) ) - { - for ( i = 0; i < level.createfxexploders[num].size; i++ ) - { - if ( !isdefined( level.createfxexploders[num][i].looper ) ) - continue; - - level.createfxexploders[num][i].looper delete(); - } - } -} - -sound_effect() -{ - self effect_soundalias(); -} - -effect_soundalias() -{ - if ( !isdefined( self.v["delay"] ) ) - self.v["delay"] = 0; - - origin = self.v["origin"]; - alias = self.v["soundalias"]; - wait( self.v["delay"] ); - play_sound_in_space( alias, origin ); -} - -play_sound_in_space( alias, origin, master ) -{ - org = spawn( "script_origin", ( 0, 0, 1 ) ); - - if ( !isdefined( origin ) ) - origin = self.origin; - - org.origin = origin; - - if ( isdefined( master ) && master ) - org playsoundasmaster( alias ); - else - org playsound( alias ); - - wait 10.0; - org delete(); -} - -loop_sound_in_space( alias, origin, ender ) -{ - org = spawn( "script_origin", ( 0, 0, 1 ) ); - - if ( !isdefined( origin ) ) - origin = self.origin; - - org.origin = origin; - org playloopsound( alias ); - - level waittill( ender ); - - org stoploopsound(); - wait 0.1; - org delete(); -} - -fire_effect() -{ - if ( !isdefined( self.v["delay"] ) ) - self.v["delay"] = 0; - - delay = self.v["delay"]; - - if ( isdefined( self.v["delay_min"] ) && isdefined( self.v["delay_max"] ) ) - delay = self.v["delay_min"] + randomfloat( self.v["delay_max"] - self.v["delay_min"] ); - - forward = self.v["forward"]; - up = self.v["up"]; - org = undefined; - firefxsound = self.v["firefxsound"]; - origin = self.v["origin"]; - firefx = self.v["firefx"]; - ender = self.v["ender"]; - - if ( !isdefined( ender ) ) - ender = "createfx_effectStopper"; - - timeout = self.v["firefxtimeout"]; - firefxdelay = 0.5; - - if ( isdefined( self.v["firefxdelay"] ) ) - firefxdelay = self.v["firefxdelay"]; - - wait( delay ); - - if ( isdefined( firefxsound ) ) - level thread loop_fx_sound( firefxsound, origin, ender, timeout ); - - playfx( level._effect[firefx], self.v["origin"], forward, up ); -} - -loop_sound_delete( ender, ent ) -{ - ent endon( "death" ); - - self waittill( ender ); - - ent delete(); -} - -createexploder( fxid ) -{ - ent = maps\mp\_createfx::createeffect( "exploder", fxid ); - ent.v["delay"] = 0; - ent.v["exploder"] = 1; - ent.v["exploder_type"] = "normal"; - return ent; -} - -getotherteam( team ) -{ - if ( team == "allies" ) - return "axis"; - else if ( team == "axis" ) - return "allies"; - else - return "allies"; -/# - assertmsg( "getOtherTeam: invalid team " + team ); -#/ -} - -getteammask( team ) -{ - if ( !level.teambased || !isdefined( team ) || !isdefined( level.spawnsystem.ispawn_teammask[team] ) ) - return level.spawnsystem.ispawn_teammask_free; - - return level.spawnsystem.ispawn_teammask[team]; -} - -getotherteamsmask( skip_team ) -{ - mask = 0; - - foreach ( team in level.teams ) - { - if ( team == skip_team ) - continue; - - mask |= getteammask( team ); - } - - return mask; -} - -wait_endon( waittime, endonstring, endonstring2, endonstring3, endonstring4 ) -{ - self endon( endonstring ); - - if ( isdefined( endonstring2 ) ) - self endon( endonstring2 ); - - if ( isdefined( endonstring3 ) ) - self endon( endonstring3 ); - - if ( isdefined( endonstring4 ) ) - self endon( endonstring4 ); - - wait( waittime ); - return 1; -} - -ismg( weapon ) -{ - return issubstr( weapon, "_bipod_" ); -} - -plot_points( plotpoints, r, g, b, timer ) -{ -/# - lastpoint = plotpoints[0]; - - if ( !isdefined( r ) ) - r = 1; - - if ( !isdefined( g ) ) - g = 1; - - if ( !isdefined( b ) ) - b = 1; - - if ( !isdefined( timer ) ) - timer = 0.05; - - for ( i = 1; i < plotpoints.size; i++ ) - { - line( lastpoint, plotpoints[i], ( r, g, b ), 1, timer ); - lastpoint = plotpoints[i]; - } -#/ -} - -player_flag_wait( msg ) -{ - while ( !self.flag[msg] ) - self waittill( msg ); -} - -player_flag_wait_either( flag1, flag2 ) -{ - for (;;) - { - if ( flag( flag1 ) ) - return; - - if ( flag( flag2 ) ) - return; - - self waittill_either( flag1, flag2 ); - } -} - -player_flag_waitopen( msg ) -{ - while ( self.flag[msg] ) - self waittill( msg ); -} - -player_flag_init( message, trigger ) -{ - if ( !isdefined( self.flag ) ) - { - self.flag = []; - self.flags_lock = []; - } -/# - assert( !isdefined( self.flag[message] ), "Attempt to reinitialize existing message: " + message ); -#/ - self.flag[message] = 0; -/# - self.flags_lock[message] = 0; -#/ -} - -player_flag_set_delayed( message, delay ) -{ - wait( delay ); - player_flag_set( message ); -} - -player_flag_set( message ) -{ -/# - assert( isdefined( self.flag[message] ), "Attempt to set a flag before calling flag_init: " + message ); - assert( self.flag[message] == self.flags_lock[message] ); - self.flags_lock[message] = 1; -#/ - self.flag[message] = 1; - self notify( message ); -} - -player_flag_clear( message ) -{ -/# - assert( isdefined( self.flag[message] ), "Attempt to set a flag before calling flag_init: " + message ); - assert( self.flag[message] == self.flags_lock[message] ); - self.flags_lock[message] = 0; -#/ - self.flag[message] = 0; - self notify( message ); -} - -player_flag( message ) -{ -/# - assert( isdefined( message ), "Tried to check flag but the flag was not defined." ); -#/ - if ( !self.flag[message] ) - return false; - - return true; -} - -registerclientsys( ssysname ) -{ - if ( !isdefined( level._clientsys ) ) - level._clientsys = []; - - if ( level._clientsys.size >= 32 ) - { -/# - error( "Max num client systems exceeded." ); -#/ - return; - } - - if ( isdefined( level._clientsys[ssysname] ) ) - { -/# - error( "Attempt to re-register client system : " + ssysname ); -#/ - return; - } - else - { - level._clientsys[ssysname] = spawnstruct(); - level._clientsys[ssysname].sysid = clientsysregister( ssysname ); - } -} - -setclientsysstate( ssysname, ssysstate, player ) -{ - if ( !isdefined( level._clientsys ) ) - { -/# - error( "setClientSysState called before registration of any systems." ); -#/ - return; - } - - if ( !isdefined( level._clientsys[ssysname] ) ) - { -/# - error( "setClientSysState called on unregistered system " + ssysname ); -#/ - return; - } - - if ( isdefined( player ) ) - player clientsyssetstate( level._clientsys[ssysname].sysid, ssysstate ); - else - { - clientsyssetstate( level._clientsys[ssysname].sysid, ssysstate ); - level._clientsys[ssysname].sysstate = ssysstate; - } -} - -getclientsysstate( ssysname ) -{ - if ( !isdefined( level._clientsys ) ) - { -/# - error( "Cannot getClientSysState before registering any client systems." ); -#/ - return ""; - } - - if ( !isdefined( level._clientsys[ssysname] ) ) - { -/# - error( "Client system " + ssysname + " cannot return state, as it is unregistered." ); -#/ - return ""; - } - - if ( isdefined( level._clientsys[ssysname].sysstate ) ) - return level._clientsys[ssysname].sysstate; - - return ""; -} - -clientnotify( event ) -{ - if ( level.clientscripts ) - { - if ( isplayer( self ) ) - maps\mp\_utility::setclientsysstate( "levelNotify", event, self ); - else - maps\mp\_utility::setclientsysstate( "levelNotify", event ); - } -} - -alphabet_compare( a, b ) -{ - list = []; - val = 1; - list["0"] = val; - val++; - list["1"] = val; - val++; - list["2"] = val; - val++; - list["3"] = val; - val++; - list["4"] = val; - val++; - list["5"] = val; - val++; - list["6"] = val; - val++; - list["7"] = val; - val++; - list["8"] = val; - val++; - list["9"] = val; - val++; - list["_"] = val; - val++; - list["a"] = val; - val++; - list["b"] = val; - val++; - list["c"] = val; - val++; - list["d"] = val; - val++; - list["e"] = val; - val++; - list["f"] = val; - val++; - list["g"] = val; - val++; - list["h"] = val; - val++; - list["i"] = val; - val++; - list["j"] = val; - val++; - list["k"] = val; - val++; - list["l"] = val; - val++; - list["m"] = val; - val++; - list["n"] = val; - val++; - list["o"] = val; - val++; - list["p"] = val; - val++; - list["q"] = val; - val++; - list["r"] = val; - val++; - list["s"] = val; - val++; - list["t"] = val; - val++; - list["u"] = val; - val++; - list["v"] = val; - val++; - list["w"] = val; - val++; - list["x"] = val; - val++; - list["y"] = val; - val++; - list["z"] = val; - val++; - a = tolower( a ); - b = tolower( b ); - val1 = 0; - - if ( isdefined( list[a] ) ) - val1 = list[a]; - - val2 = 0; - - if ( isdefined( list[b] ) ) - val2 = list[b]; - - if ( val1 > val2 ) - return "1st"; - - if ( val1 < val2 ) - return "2nd"; - - return "same"; -} - -is_later_in_alphabet( string1, string2 ) -{ - count = string1.size; - - if ( count >= string2.size ) - count = string2.size; - - for ( i = 0; i < count; i++ ) - { - val = alphabet_compare( string1[i], string2[i] ); - - if ( val == "1st" ) - return 1; - - if ( val == "2nd" ) - return 0; - } - - return string1.size > string2.size; -} - -alphabetize( array ) -{ - if ( array.size <= 1 ) - return array; - - count = 0; - - for (;;) - { - changed = 0; - - for ( i = 0; i < array.size - 1; i++ ) - { - if ( is_later_in_alphabet( array[i], array[i + 1] ) ) - { - val = array[i]; - array[i] = array[i + 1]; - array[i + 1] = val; - changed = 1; - count++; - - if ( count >= 9 ) - { - count = 0; - wait 0.05; - } - } - } - - if ( !changed ) - return array; - } - - return array; -} - -get_players() -{ - players = getplayers(); - return players; -} - -getfx( fx ) -{ -/# - assert( isdefined( level._effect[fx] ), "Fx " + fx + " is not defined in level._effect." ); -#/ - return level._effect[fx]; -} - -struct_arrayspawn() -{ - struct = spawnstruct(); - struct.array = []; - struct.lastindex = 0; - return struct; -} - -structarray_add( struct, object ) -{ -/# - assert( !isdefined( object.struct_array_index ) ); -#/ - struct.array[struct.lastindex] = object; - object.struct_array_index = struct.lastindex; - struct.lastindex++; -} - -structarray_remove( struct, object ) -{ - structarray_swaptolast( struct, object ); - struct.array[struct.lastindex - 1] = undefined; - struct.lastindex--; -} - -structarray_swaptolast( struct, object ) -{ - struct structarray_swap( struct.array[struct.lastindex - 1], object ); -} - -structarray_shuffle( struct, shuffle ) -{ - for ( i = 0; i < shuffle; i++ ) - struct structarray_swap( struct.array[i], struct.array[randomint( struct.lastindex )] ); -} - -structarray_swap( object1, object2 ) -{ - index1 = object1.struct_array_index; - index2 = object2.struct_array_index; - self.array[index2] = object1; - self.array[index1] = object2; - self.array[index1].struct_array_index = index1; - self.array[index2].struct_array_index = index2; -} - -waittill_either( msg1, msg2 ) -{ - self endon( msg1 ); - - self waittill( msg2 ); -} - -combinearrays( array1, array2 ) -{ -/# - assert( isdefined( array1 ) || isdefined( array2 ) ); -#/ - if ( !isdefined( array1 ) && isdefined( array2 ) ) - return array2; - - if ( !isdefined( array2 ) && isdefined( array1 ) ) - return array1; - - foreach ( elem in array2 ) - array1[array1.size] = elem; - - return array1; -} - -getclosest( org, array, dist ) -{ - return comparesizes( org, array, dist, ::closerfunc ); -} - -getclosestfx( org, fxarray, dist ) -{ - return comparesizesfx( org, fxarray, dist, ::closerfunc ); -} - -getfarthest( org, array, dist ) -{ - return comparesizes( org, array, dist, ::fartherfunc ); -} - -comparesizesfx( org, array, dist, comparefunc ) -{ - if ( !array.size ) - return undefined; - - if ( isdefined( dist ) ) - { - distsqr = dist * dist; - struct = undefined; - keys = getarraykeys( array ); - - for ( i = 0; i < keys.size; i++ ) - { - newdistsqr = distancesquared( array[keys[i]].v["origin"], org ); - - if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) - continue; - - distsqr = newdistsqr; - struct = array[keys[i]]; - } - - return struct; - } - - keys = getarraykeys( array ); - struct = array[keys[0]]; - distsqr = distancesquared( struct.v["origin"], org ); - - for ( i = 1; i < keys.size; i++ ) - { - newdistsqr = distancesquared( array[keys[i]].v["origin"], org ); - - if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) - continue; - - distsqr = newdistsqr; - struct = array[keys[i]]; - } - - return struct; -} - -comparesizes( org, array, dist, comparefunc ) -{ - if ( !array.size ) - return undefined; - - if ( isdefined( dist ) ) - { - distsqr = dist * dist; - ent = undefined; - keys = getarraykeys( array ); - - for ( i = 0; i < keys.size; i++ ) - { - if ( !isdefined( array[keys[i]] ) ) - continue; - - newdistsqr = distancesquared( array[keys[i]].origin, org ); - - if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) - continue; - - distsqr = newdistsqr; - ent = array[keys[i]]; - } - - return ent; - } - - keys = getarraykeys( array ); - ent = array[keys[0]]; - distsqr = distancesquared( ent.origin, org ); - - for ( i = 1; i < keys.size; i++ ) - { - if ( !isdefined( array[keys[i]] ) ) - continue; - - newdistsqr = distancesquared( array[keys[i]].origin, org ); - - if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) - continue; - - distsqr = newdistsqr; - ent = array[keys[i]]; - } - - return ent; -} - -closerfunc( dist1, dist2 ) -{ - return dist1 >= dist2; -} - -fartherfunc( dist1, dist2 ) -{ - return dist1 <= dist2; -} - -get_array_of_closest( org, array, excluders, max, maxdist ) -{ - if ( !isdefined( max ) ) - max = array.size; - - if ( !isdefined( excluders ) ) - excluders = []; - - maxdists2rd = undefined; - - if ( isdefined( maxdist ) ) - maxdists2rd = maxdist * maxdist; - - dist = []; - index = []; - - for ( i = 0; i < array.size; i++ ) - { - if ( !isdefined( array[i] ) ) - continue; - - excluded = 0; - - for ( p = 0; p < excluders.size; p++ ) - { - if ( array[i] != excluders[p] ) - continue; - - excluded = 1; - break; - } - - if ( excluded ) - continue; - - length = distancesquared( org, array[i].origin ); - - if ( isdefined( maxdists2rd ) && maxdists2rd < length ) - continue; - - dist[dist.size] = length; - index[index.size] = i; - } - - for (;;) - { - change = 0; - - for ( i = 0; i < dist.size - 1; i++ ) - { - if ( dist[i] <= dist[i + 1] ) - continue; - - change = 1; - temp = dist[i]; - dist[i] = dist[i + 1]; - dist[i + 1] = temp; - temp = index[i]; - index[i] = index[i + 1]; - index[i + 1] = temp; - } - - if ( !change ) - break; - } - - newarray = []; - - if ( max > dist.size ) - max = dist.size; - - for ( i = 0; i < max; i++ ) - newarray[i] = array[index[i]]; - - return newarray; -} - -set_dvar_if_unset( dvar, value, reset ) -{ - if ( !isdefined( reset ) ) - reset = 0; - - if ( reset || getdvar( dvar ) == "" ) - { - setdvar( dvar, value ); - return value; - } - - return getdvar( dvar ); -} - -set_dvar_float_if_unset( dvar, value, reset ) -{ - if ( !isdefined( reset ) ) - reset = 0; - - if ( reset || getdvar( dvar ) == "" ) - setdvar( dvar, value ); - - return getdvarfloat( dvar ); -} - -set_dvar_int_if_unset( dvar, value, reset ) -{ - if ( !isdefined( reset ) ) - reset = 0; - - if ( reset || getdvar( dvar ) == "" ) - { - setdvar( dvar, value ); - return int( value ); - } - - return getdvarint( dvar ); -} - -drawcylinder( pos, rad, height, duration, stop_notify ) -{ -/# - if ( !isdefined( duration ) ) - duration = 0; - - level thread drawcylinder_think( pos, rad, height, duration, stop_notify ); -#/ -} - -drawcylinder_think( pos, rad, height, seconds, stop_notify ) -{ -/# - if ( isdefined( stop_notify ) ) - level endon( stop_notify ); - - stop_time = gettime() + seconds * 1000; - currad = rad; - curheight = height; - - for (;;) - { - if ( seconds > 0 && stop_time <= gettime() ) - return; - - for ( r = 0; r < 20; r++ ) - { - theta = r / 20 * 360; - theta2 = ( r + 1 ) / 20 * 360; - line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, 0 ) ); - line( pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, curheight ) ); - line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ) ); - } - - wait 0.05; - } -#/ -} - -is_bot() -{ - return isplayer( self ) && isdefined( self.pers["isBot"] ) && self.pers["isBot"] != 0; -} - -add_trigger_to_ent( ent ) -{ - if ( !isdefined( ent._triggers ) ) - ent._triggers = []; - - ent._triggers[self getentitynumber()] = 1; -} - -remove_trigger_from_ent( ent ) -{ - if ( !isdefined( ent ) ) - return; - - if ( !isdefined( ent._triggers ) ) - return; - - if ( !isdefined( ent._triggers[self getentitynumber()] ) ) - return; - - ent._triggers[self getentitynumber()] = 0; -} - -ent_already_in_trigger( trig ) -{ - if ( !isdefined( self._triggers ) ) - return false; - - if ( !isdefined( self._triggers[trig getentitynumber()] ) ) - return false; - - if ( !self._triggers[trig getentitynumber()] ) - return false; - - return true; -} - -trigger_thread_death_monitor( ent, ender ) -{ - ent waittill( "death" ); - - self endon( ender ); - self remove_trigger_from_ent( ent ); -} - -trigger_thread( ent, on_enter_payload, on_exit_payload ) -{ - ent endon( "entityshutdown" ); - ent endon( "death" ); - - if ( ent ent_already_in_trigger( self ) ) - return; - - self add_trigger_to_ent( ent ); - ender = "end_trig_death_monitor" + self getentitynumber() + " " + ent getentitynumber(); - self thread trigger_thread_death_monitor( ent, ender ); - endon_condition = "leave_trigger_" + self getentitynumber(); - - if ( isdefined( on_enter_payload ) ) - self thread [[ on_enter_payload ]]( ent, endon_condition ); - - while ( isdefined( ent ) && ent istouching( self ) ) - wait 0.01; - - ent notify( endon_condition ); - - if ( isdefined( ent ) && isdefined( on_exit_payload ) ) - self thread [[ on_exit_payload ]]( ent ); - - if ( isdefined( ent ) ) - self remove_trigger_from_ent( ent ); - - self notify( ender ); -} - -isoneround() -{ - if ( level.roundlimit == 1 ) - return true; - - return false; -} - -isfirstround() -{ - if ( level.roundlimit > 1 && game["roundsplayed"] == 0 ) - return true; - - return false; -} - -islastround() -{ - if ( level.roundlimit > 1 && game["roundsplayed"] >= level.roundlimit - 1 ) - return true; - - return false; -} - -waslastround() -{ - if ( level.forcedend ) - return true; - - if ( isdefined( level.shouldplayovertimeround ) ) - { - if ( [[ level.shouldplayovertimeround ]]() ) - { - level.nextroundisovertime = 1; - return false; - } - else if ( isdefined( game["overtime_round"] ) ) - return true; - } - - if ( hitroundlimit() || hitscorelimit() || hitroundwinlimit() ) - return true; - - return false; -} - -hitroundlimit() -{ - if ( level.roundlimit <= 0 ) - return 0; - - return getroundsplayed() >= level.roundlimit; -} - -anyteamhitroundwinlimit() -{ - foreach ( team in level.teams ) - { - if ( getroundswon( team ) >= level.roundwinlimit ) - return true; - } - - return false; -} - -anyteamhitroundlimitwithdraws() -{ - tie_wins = game["roundswon"]["tie"]; - - foreach ( team in level.teams ) - { - if ( getroundswon( team ) + tie_wins >= level.roundwinlimit ) - return true; - } - - return false; -} - -getroundwinlimitwinningteam() -{ - max_wins = 0; - winning_team = undefined; - - foreach ( team in level.teams ) - { - wins = getroundswon( team ); - - if ( !isdefined( winning_team ) ) - { - max_wins = wins; - winning_team = team; - continue; - } - - if ( wins == max_wins ) - { - winning_team = "tie"; - continue; - } - - if ( wins > max_wins ) - { - max_wins = wins; - winning_team = team; - } - } - - return winning_team; -} - -hitroundwinlimit() -{ - if ( !isdefined( level.roundwinlimit ) || level.roundwinlimit <= 0 ) - return false; - - if ( anyteamhitroundwinlimit() ) - return true; - - if ( anyteamhitroundlimitwithdraws() ) - { - if ( getroundwinlimitwinningteam() != "tie" ) - return true; - } - - return false; -} - -anyteamhitscorelimit() -{ - foreach ( team in level.teams ) - { - if ( game["teamScores"][team] >= level.scorelimit ) - return true; - } - - return false; -} - -hitscorelimit() -{ - if ( isscoreroundbased() ) - return false; - - if ( level.scorelimit <= 0 ) - return false; - - if ( level.teambased ) - { - if ( anyteamhitscorelimit() ) - return true; - } - else - { - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - - if ( isdefined( player.pointstowin ) && player.pointstowin >= level.scorelimit ) - return true; - } - } - - return false; -} - -getroundswon( team ) -{ - return game["roundswon"][team]; -} - -getotherteamsroundswon( skip_team ) -{ - roundswon = 0; - - foreach ( team in level.teams ) - { - if ( team == skip_team ) - continue; - - roundswon += game["roundswon"][team]; - } - - return roundswon; -} - -getroundsplayed() -{ - return game["roundsplayed"]; -} - -isscoreroundbased() -{ - return level.scoreroundbased; -} - -isroundbased() -{ - if ( level.roundlimit != 1 && level.roundwinlimit != 1 ) - return true; - - return false; -} - -waittillnotmoving() -{ - if ( self ishacked() ) - { - wait 0.05; - return; - } - - if ( self.classname == "grenade" ) - self waittill( "stationary" ); - else - { - for ( prevorigin = self.origin; 1; prevorigin = self.origin ) - { - wait 0.15; - - if ( self.origin == prevorigin ) - break; - } - } -} - -mayapplyscreeneffect() -{ -/# - assert( isdefined( self ) ); -#/ -/# - assert( isplayer( self ) ); -#/ - return !isdefined( self.viewlockedentity ); -} - -getdvarfloatdefault( dvarname, defaultvalue ) -{ - value = getdvar( dvarname ); - - if ( value != "" ) - return float( value ); - - return defaultvalue; -} - -getdvarintdefault( dvarname, defaultvalue ) -{ - value = getdvar( dvarname ); - - if ( value != "" ) - return int( value ); - - return defaultvalue; -} - -closestpointonline( point, linestart, lineend ) -{ - linemagsqrd = lengthsquared( lineend - linestart ); - t = ( ( point[0] - linestart[0] ) * ( lineend[0] - linestart[0] ) + ( point[1] - linestart[1] ) * ( lineend[1] - linestart[1] ) + ( point[2] - linestart[2] ) * ( lineend[2] - linestart[2] ) ) / linemagsqrd; - - if ( t < 0.0 ) - return linestart; - else if ( t > 1.0 ) - return lineend; - - start_x = linestart[0] + t * ( lineend[0] - linestart[0] ); - start_y = linestart[1] + t * ( lineend[1] - linestart[1] ); - start_z = linestart[2] + t * ( lineend[2] - linestart[2] ); - return ( start_x, start_y, start_z ); -} - -isstrstart( string1, substr ) -{ - return getsubstr( string1, 0, substr.size ) == substr; -} - -spread_array_thread( entities, process, var1, var2, var3 ) -{ - keys = getarraykeys( entities ); - - if ( isdefined( var3 ) ) - { - for ( i = 0; i < keys.size; i++ ) - { - entities[keys[i]] thread [[ process ]]( var1, var2, var3 ); - wait 0.1; - } - - return; - } - - if ( isdefined( var2 ) ) - { - for ( i = 0; i < keys.size; i++ ) - { - entities[keys[i]] thread [[ process ]]( var1, var2 ); - wait 0.1; - } - - return; - } - - if ( isdefined( var1 ) ) - { - for ( i = 0; i < keys.size; i++ ) - { - entities[keys[i]] thread [[ process ]]( var1 ); - wait 0.1; - } - - return; - } - - for ( i = 0; i < keys.size; i++ ) - { - entities[keys[i]] thread [[ process ]](); - wait 0.1; - } -} - -freeze_player_controls( boolean ) -{ -/# - assert( isdefined( boolean ), "'freeze_player_controls()' has not been passed an argument properly." ); -#/ - if ( boolean && isdefined( self ) ) - self freezecontrols( boolean ); - else if ( !boolean && isdefined( self ) && !level.gameended ) - self freezecontrols( boolean ); -} - -gethostplayer() -{ - players = get_players(); - - for ( index = 0; index < players.size; index++ ) - { - if ( players[index] ishost() ) - return players[index]; - } -} - -gethostplayerforbots() -{ - players = get_players(); - - for ( index = 0; index < players.size; index++ ) - { - if ( players[index] ishostforbots() ) - return players[index]; - } -} - -ispregame() -{ - return isdefined( level.pregame ) && level.pregame; -} - -iskillstreaksenabled() -{ - return isdefined( level.killstreaksenabled ) && level.killstreaksenabled; -} - -isrankenabled() -{ - return isdefined( level.rankenabled ) && level.rankenabled; -} - -playsmokesound( position, duration, startsound, stopsound, loopsound ) -{ - smokesound = spawn( "script_origin", ( 0, 0, 1 ) ); - smokesound.origin = position; - smokesound playsound( startsound ); - smokesound playloopsound( loopsound ); - - if ( duration > 0.5 ) - wait( duration - 0.5 ); - - thread playsoundinspace( stopsound, position ); - smokesound stoploopsound( 0.5 ); - wait 0.5; - smokesound delete(); -} - -playsoundinspace( alias, origin, master ) -{ - org = spawn( "script_origin", ( 0, 0, 1 ) ); - - if ( !isdefined( origin ) ) - origin = self.origin; - - org.origin = origin; - - if ( isdefined( master ) && master ) - org playsoundasmaster( alias ); - else - org playsound( alias ); - - wait 10.0; - org delete(); -} - -get2dyaw( start, end ) -{ - yaw = 0; - vector = ( end[0] - start[0], end[1] - start[1], 0 ); - return vectoangles( vector ); -} - -vectoangles( vector ) -{ - yaw = 0; - vecx = vector[0]; - vecy = vector[1]; - - if ( vecx == 0 && vecy == 0 ) - return 0; - - if ( vecy < 0.001 && vecy > -0.001 ) - vecy = 0.001; - - yaw = atan( vecx / vecy ); - - if ( vecy < 0 ) - yaw += 180; - - return 90 - yaw; -} - -deleteaftertime( time ) -{ -/# - assert( isdefined( self ) ); -#/ -/# - assert( isdefined( time ) ); -#/ -/# - assert( time >= 0.05 ); -#/ - self thread deleteaftertimethread( time ); -} - -deleteaftertimethread( time ) -{ - self endon( "death" ); - wait( time ); - self delete(); -} - -setusingremote( remotename ) -{ - if ( isdefined( self.carryicon ) ) - self.carryicon.alpha = 0; -/# - assert( !self isusingremote() ); -#/ - self.usingremote = remotename; - self disableoffhandweapons(); - self notify( "using_remote" ); -} - -getremotename() -{ -/# - assert( self isusingremote() ); -#/ - return self.usingremote; -} - -isusingremote() -{ - return isdefined( self.usingremote ); -} - -getlastweapon() -{ - last_weapon = undefined; - - if ( self hasweapon( self.lastnonkillstreakweapon ) ) - last_weapon = self.lastnonkillstreakweapon; - else if ( self hasweapon( self.lastdroppableweapon ) ) - last_weapon = self.lastdroppableweapon; -/# - assert( isdefined( last_weapon ) ); -#/ - return last_weapon; -} - -freezecontrolswrapper( frozen ) -{ - if ( isdefined( level.hostmigrationtimer ) ) - { - self freeze_player_controls( 1 ); - return; - } - - self freeze_player_controls( frozen ); -} - -setobjectivetext( team, text ) -{ - game["strings"]["objective_" + team] = text; - precachestring( text ); -} - -setobjectivescoretext( team, text ) -{ - game["strings"]["objective_score_" + team] = text; - precachestring( text ); -} - -setobjectivehinttext( team, text ) -{ - game["strings"]["objective_hint_" + team] = text; - precachestring( text ); -} - -getobjectivetext( team ) -{ - return game["strings"]["objective_" + team]; -} - -getobjectivescoretext( team ) -{ - return game["strings"]["objective_score_" + team]; -} - -getobjectivehinttext( team ) -{ - return game["strings"]["objective_hint_" + team]; -} - -registerroundswitch( minvalue, maxvalue ) -{ - level.roundswitch = clamp( getgametypesetting( "roundSwitch" ), minvalue, maxvalue ); - level.roundswitchmin = minvalue; - level.roundswitchmax = maxvalue; -} - -registerroundlimit( minvalue, maxvalue ) -{ - level.roundlimit = clamp( getgametypesetting( "roundLimit" ), minvalue, maxvalue ); - level.roundlimitmin = minvalue; - level.roundlimitmax = maxvalue; -} - -registerroundwinlimit( minvalue, maxvalue ) -{ - level.roundwinlimit = clamp( getgametypesetting( "roundWinLimit" ), minvalue, maxvalue ); - level.roundwinlimitmin = minvalue; - level.roundwinlimitmax = maxvalue; -} - -registerscorelimit( minvalue, maxvalue ) -{ - level.scorelimit = clamp( getgametypesetting( "scoreLimit" ), minvalue, maxvalue ); - level.scorelimitmin = minvalue; - level.scorelimitmax = maxvalue; - setdvar( "ui_scorelimit", level.scorelimit ); -} - -registertimelimit( minvalue, maxvalue ) -{ - level.timelimit = clamp( getgametypesetting( "timeLimit" ), minvalue, maxvalue ); - level.timelimitmin = minvalue; - level.timelimitmax = maxvalue; - setdvar( "ui_timelimit", level.timelimit ); -} - -registernumlives( minvalue, maxvalue ) -{ - level.numlives = clamp( getgametypesetting( "playerNumLives" ), minvalue, maxvalue ); - level.numlivesmin = minvalue; - level.numlivesmax = maxvalue; -} - -getplayerfromclientnum( clientnum ) -{ - if ( clientnum < 0 ) - return undefined; - - for ( i = 0; i < level.players.size; i++ ) - { - if ( level.players[i] getentitynumber() == clientnum ) - return level.players[i]; - } - - return undefined; -} - -setclientfield( field_name, value ) -{ - if ( self == level ) - codesetworldclientfield( field_name, value ); - else - codesetclientfield( self, field_name, value ); -} - -setclientfieldtoplayer( field_name, value ) -{ - codesetplayerstateclientfield( self, field_name, value ); -} - -getclientfield( field_name ) -{ - if ( self == level ) - return codegetworldclientfield( field_name ); - else - return codegetclientfield( self, field_name ); -} - -getclientfieldtoplayer( field_name ) -{ - return codegetplayerstateclientfield( self, field_name ); -} - -isenemyplayer( player ) -{ -/# - assert( isdefined( player ) ); -#/ - if ( !isplayer( player ) ) - return false; - - if ( level.teambased ) - { - if ( player.team == self.team ) - return false; - } - else if ( player == self ) - return false; - - return true; -} - -getweaponclass( weapon ) -{ -/# - assert( isdefined( weapon ) ); -#/ - if ( !isdefined( weapon ) ) - return undefined; - - if ( !isdefined( level.weaponclassarray ) ) - level.weaponclassarray = []; - - if ( isdefined( level.weaponclassarray[weapon] ) ) - return level.weaponclassarray[weapon]; - - baseweaponindex = getbaseweaponitemindex( weapon ) + 1; - weaponclass = tablelookupcolumnforrow( "mp/statstable.csv", baseweaponindex, 2 ); - level.weaponclassarray[weapon] = weaponclass; - return weaponclass; -} - -ispressbuild() -{ - buildtype = getdvar( _hash_19B966D7 ); - - if ( isdefined( buildtype ) && buildtype == "press" ) - return true; - - return false; -} - -isflashbanged() -{ - return isdefined( self.flashendtime ) && gettime() < self.flashendtime; -} - -ishacked() -{ - return isdefined( self.hacked ) && self.hacked; -} - -domaxdamage( origin, attacker, inflictor, headshot, mod ) -{ - if ( isdefined( self.damagedtodeath ) && self.damagedtodeath ) - return; - - if ( isdefined( self.maxhealth ) ) - damage = self.maxhealth + 1; - else - damage = self.health + 1; - - self.damagedtodeath = 1; - self dodamage( damage, origin, attacker, inflictor, headshot, mod ); -} diff --git a/Multiplayer Core/patch_mp/maps/mp/animscripts/dog_combat.gsc b/Multiplayer Core/patch_mp/maps/mp/animscripts/dog_combat.gsc deleted file mode 100644 index 655371a..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/animscripts/dog_combat.gsc +++ /dev/null @@ -1,105 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include common_scripts\utility; -#include maps\mp\animscripts\shared; -#include maps\mp\animscripts\utility; - -main() -{ - debug_anim_print( "dog_combat::main() " ); - self endon( "killanimscript" ); - self setaimanimweights( 0, 0 ); -/# - if ( !debug_allow_combat() ) - { - combatidle(); - return; - } -#/ - if ( isdefined( level.hostmigrationtimer ) ) - { - combatidle(); - return; - } -/# - assert( isdefined( self.enemy ) ); -#/ - if ( !isalive( self.enemy ) ) - { - combatidle(); - return; - } - - if ( isplayer( self.enemy ) ) - self meleebiteattackplayer( self.enemy ); -} - -combatidle() -{ - self set_orient_mode( "face enemy" ); - self animmode( "zonly_physics", 0 ); - idleanims = []; - idleanims[0] = "combat_attackidle"; - idleanims[1] = "combat_attackidle_bark"; - idleanims[2] = "combat_attackidle_growl"; - idleanim = random( idleanims ); - debug_anim_print( "dog_combat::combatIdle() - Setting " + idleanim ); - self setanimstate( idleanim ); - self maps\mp\animscripts\shared::donotetracks( "done" ); - debug_anim_print( "dog_combat::combatIdle() - " + idleanim + " notify done." ); -} - -meleebiteattackplayer( player ) -{ - self set_orient_mode( "face enemy" ); - self animmode( "gravity", 0 ); - self.safetochangescript = 0; - - if ( use_low_attack() ) - { - self animmode( "angle deltas", 0 ); - self setanimstate( "combat_attack_player_close_range" ); - wait 0.35; - - if ( isplayer( self.enemy ) && self.enemy getstance() == "prone" ) - self meleewithoffset( vectorscale( ( 0, 0, -1 ), 9.0 ) ); - else - self melee(); - - self maps\mp\animscripts\shared::donotetracksfortime( 1.2, "done" ); - self animmode( "gravity", 0 ); - } - else - { - attack_time = 1.2 + randomfloat( 0.4 ); - debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_run_attack" ); - self setanimstate( "combat_attack_run" ); - self maps\mp\animscripts\shared::donotetracksfortime( attack_time, "done", ::handlemeleebiteattacknotetracks, player ); - debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - combat_attack_run notify done." ); - } - - self.safetochangescript = 1; - self animmode( "none", 0 ); -} - -handlemeleebiteattacknotetracks( note, player ) -{ - if ( note == "dog_melee" ) - self melee( anglestoforward( self.angles ) ); -} - -use_low_attack() -{ - if ( isplayer( self.enemy ) ) - { - if ( self.enemy getstance() == "prone" ) - { - attack_height = self.origin[2] + 16; - - if ( self.enemy.origin[2] < attack_height ) - return true; - } - } - - return false; -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_callbacksetup.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_callbacksetup.gsc deleted file mode 100644 index 781467f..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_callbacksetup.gsc +++ /dev/null @@ -1,204 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -codecallback_startgametype() -{ - if ( !isdefined( level.gametypestarted ) || !level.gametypestarted ) - { - [[ level.callbackstartgametype ]](); - level.gametypestarted = 1; - } -} - -codecallback_finalizeinitialization() -{ - maps\mp\_utility::callback( "on_finalize_initialization" ); -} - -codecallback_playerconnect() -{ - self endon( "disconnect" ); - self thread maps\mp\_audio::monitor_player_sprint(); - [[ level.callbackplayerconnect ]](); -} - -codecallback_playerdisconnect() -{ - self notify( "disconnect" ); - level notify( "disconnect", self ); - client_num = self getentitynumber(); - [[ level.callbackplayerdisconnect ]](); -} - -codecallback_hostmigration() -{ -/# - println( "****CodeCallback_HostMigration****" ); -#/ - [[ level.callbackhostmigration ]](); -} - -codecallback_hostmigrationsave() -{ -/# - println( "****CodeCallback_HostMigrationSave****" ); -#/ - [[ level.callbackhostmigrationsave ]](); -} - -codecallback_playermigrated() -{ -/# - println( "****CodeCallback_PlayerMigrated****" ); -#/ - [[ level.callbackplayermigrated ]](); -} - -codecallback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) -{ - self endon( "disconnect" ); - [[ level.callbackplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ); -} - -codecallback_playerkilled( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ) -{ - self endon( "disconnect" ); - [[ level.callbackplayerkilled ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ); -} - -codecallback_playerlaststand( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ) -{ - self endon( "disconnect" ); - [[ level.callbackplayerlaststand ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ); -} - -codecallback_playermelee( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit ) -{ - self endon( "disconnect" ); - [[ level.callbackplayermelee ]]( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit ); -} - -codecallback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) -{ - [[ level.callbackactordamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ); -} - -codecallback_actorkilled( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset ) -{ - [[ level.callbackactorkilled ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset ); -} - -codecallback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, damagefromunderneath, modelindex, partname ) -{ - [[ level.callbackvehicledamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, damagefromunderneath, modelindex, partname ); -} - -codecallback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, timeoffset ) -{ - [[ level.callbackvehicleradiusdamage ]]( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, timeoffset ); -} - -codecallback_faceeventnotify( notify_msg, ent ) -{ - if ( isdefined( ent ) && isdefined( ent.do_face_anims ) && ent.do_face_anims ) - { - if ( isdefined( level.face_event_handler ) && isdefined( level.face_event_handler.events[notify_msg] ) ) - ent sendfaceevent( level.face_event_handler.events[notify_msg] ); - } -} - -codecallback_menuresponse( action, arg ) -{ - if ( !isdefined( level.menuresponsequeue ) ) - { - level.menuresponsequeue = []; - level thread menuresponsequeuepump(); - } - - index = level.menuresponsequeue.size; - level.menuresponsequeue[index] = spawnstruct(); - level.menuresponsequeue[index].action = action; - level.menuresponsequeue[index].arg = arg; - level.menuresponsequeue[index].ent = self; - level notify( "menuresponse_queue" ); -} - -menuresponsequeuepump() -{ - while ( true ) - { - level waittill( "menuresponse_queue" ); - - level.menuresponsequeue[0].ent notify( "menuresponse", level.menuresponsequeue[0].action, level.menuresponsequeue[0].arg ); - arrayremoveindex( level.menuresponsequeue, 0, 0 ); - wait 0.05; - - if ( !( level.menuresponsequeue.size > 0 ) ) - { - - } - } -} - -setupcallbacks() -{ - setdefaultcallbacks(); - level.idflags_radius = 1; - level.idflags_no_armor = 2; - level.idflags_no_knockback = 4; - level.idflags_penetration = 8; - level.idflags_destructible_entity = 16; - level.idflags_shield_explosive_impact = 32; - level.idflags_shield_explosive_impact_huge = 64; - level.idflags_shield_explosive_splash = 128; - level.idflags_no_team_protection = 256; - level.idflags_no_protection = 512; - level.idflags_passthru = 1024; -} - -setdefaultcallbacks() -{ - level.callbackstartgametype = maps\mp\gametypes\_globallogic::callback_startgametype; - level.callbackplayerconnect = maps\mp\gametypes\_globallogic_player::callback_playerconnect; - level.callbackplayerdisconnect = maps\mp\gametypes\_globallogic_player::callback_playerdisconnect; - level.callbackplayerdamage = maps\mp\gametypes\_globallogic_player::callback_playerdamage; - level.callbackplayerkilled = maps\mp\gametypes\_globallogic_player::callback_playerkilled; - level.callbackplayermelee = maps\mp\gametypes\_globallogic_player::callback_playermelee; - level.callbackplayerlaststand = maps\mp\gametypes\_globallogic_player::callback_playerlaststand; - level.callbackactordamage = maps\mp\gametypes\_globallogic_actor::callback_actordamage; - level.callbackactorkilled = maps\mp\gametypes\_globallogic_actor::callback_actorkilled; - level.callbackvehicledamage = maps\mp\gametypes\_globallogic_vehicle::callback_vehicledamage; - level.callbackvehicleradiusdamage = maps\mp\gametypes\_globallogic_vehicle::callback_vehicleradiusdamage; - level.callbackplayermigrated = maps\mp\gametypes\_globallogic_player::callback_playermigrated; - level.callbackhostmigration = maps\mp\gametypes\_hostmigration::callback_hostmigration; - level.callbackhostmigrationsave = maps\mp\gametypes\_hostmigration::callback_hostmigrationsave; -} - -abortlevel() -{ -/# - println( "ERROR: Aborting level - gametype is not supported" ); -#/ - level.callbackstartgametype = ::callbackvoid; - level.callbackplayerconnect = ::callbackvoid; - level.callbackplayerdisconnect = ::callbackvoid; - level.callbackplayerdamage = ::callbackvoid; - level.callbackplayerkilled = ::callbackvoid; - level.callbackplayerlaststand = ::callbackvoid; - level.callbackplayermelee = ::callbackvoid; - level.callbackactordamage = ::callbackvoid; - level.callbackactorkilled = ::callbackvoid; - level.callbackvehicledamage = ::callbackvoid; - setdvar( "g_gametype", "dm" ); - exitlevel( 0 ); -} - -codecallback_glasssmash( pos, dir ) -{ - level notify( "glass_smash", pos, dir ); -} - -callbackvoid() -{ - -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_dev.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_dev.gsc deleted file mode 100644 index 46066a9..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_dev.gsc +++ /dev/null @@ -1,3301 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -init() -{ -/# - if ( sessionmodeiszombiesgame() ) - { - for (;;) - { - updatedevsettingszm(); - wait 0.5; - } - - return; - } - - if ( getdvar( "scr_showspawns" ) == "" ) - setdvar( "scr_showspawns", "0" ); - - if ( getdvar( "scr_showstartspawns" ) == "" ) - setdvar( "scr_showstartspawns", "0" ); - - if ( getdvar( "scr_botsHasPlayerWeapon" ) == "" ) - setdvar( "scr_botsHasPlayerWeapon", "0" ); - - if ( getdvar( "scr_botsGrenadesOnly" ) == "" ) - setdvar( "scr_botsGrenadesOnly", "0" ); - - if ( getdvar( "scr_botsSpecialGrenadesOnly" ) == "" ) - setdvar( "scr_botsSpecialGrenadesOnly", "0" ); - - if ( getdvar( "scr_devHeliPathsDebugDraw" ) == "" ) - setdvar( "scr_devHeliPathsDebugDraw", "0" ); - - if ( getdvar( "scr_devStrafeRunPathDebugDraw" ) == "" ) - setdvar( "scr_devStrafeRunPathDebugDraw", "0" ); - - if ( getdvar( "scr_show_hq_spawns" ) == "" ) - setdvar( "scr_show_hq_spawns", "" ); - - if ( getdvar( "scr_testScriptRuntimeError" ) == "" ) - setdvar( "scr_testScriptRuntimeError", "0" ); - - precachemodel( "defaultactor" ); - precachestring( &"testPlayerScoreForTan" ); - thread testscriptruntimeerror(); - thread testdvars(); - thread addtestclients(); - thread addenemyheli(); - thread addenemyu2(); - thread addtestcarepackage(); - thread removetestclients(); - thread watch_botsdvars(); - thread devhelipathdebugdraw(); - thread devstraferunpathdebugdraw(); - thread maps\mp\gametypes\_dev_class::dev_cac_init(); - thread maps\mp\gametypes\_globallogic_score::setplayermomentumdebug(); - setdvar( "scr_giveperk", "" ); - setdvar( "scr_forceevent", "" ); - setdvar( "scr_draw_triggers", "0" ); - thread engagement_distance_debug_toggle(); - thread equipment_dev_gui(); - thread grenade_dev_gui(); - setdvar( "debug_dynamic_ai_spawning", "0" ); - level.bot_overlay = 0; - level.bot_threat = 0; - level.bot_path = 0; - level.dem_spawns = []; - - if ( level.gametype == "dem" ) - { - extra_spawns = []; - extra_spawns[0] = "mp_dem_spawn_attacker_a"; - extra_spawns[1] = "mp_dem_spawn_attacker_b"; - extra_spawns[2] = "mp_dem_spawn_defender_a"; - extra_spawns[3] = "mp_dem_spawn_defender_b"; - - for ( i = 0; i < extra_spawns.size; i++ ) - { - points = getentarray( extra_spawns[i], "classname" ); - - if ( isdefined( points ) && points.size > 0 ) - level.dem_spawns = arraycombine( level.dem_spawns, points, 1, 0 ); - } - } - - thread onplayerconnect(); - - for (;;) - { - updatedevsettings(); - wait 0.5; - } -#/ -} - -onplayerconnect() -{ -/# - for (;;) - level waittill( "connecting", player ); -#/ -} - -updatehardpoints() -{ -/# - keys = getarraykeys( level.killstreaks ); - - for ( i = 0; i < keys.size; i++ ) - { - if ( !isdefined( level.killstreaks[keys[i]].devdvar ) ) - continue; - - dvar = level.killstreaks[keys[i]].devdvar; - - if ( getdvarint( dvar ) == 1 ) - { - foreach ( player in level.players ) - { - if ( isdefined( level.usingmomentum ) && level.usingmomentum && isdefined( level.usingscorestreaks ) && level.usingscorestreaks ) - { - player maps\mp\killstreaks\_killstreaks::givekillstreak( keys[i] ); - continue; - } - - if ( player is_bot() ) - { - player.bot["killstreaks"] = []; - player.bot["killstreaks"][0] = maps\mp\killstreaks\_killstreaks::getkillstreakmenuname( keys[i] ); - killstreakweapon = maps\mp\killstreaks\_killstreaks::getkillstreakweapon( keys[i] ); - player maps\mp\killstreaks\_killstreaks::givekillstreakweapon( killstreakweapon, 1 ); - maps\mp\gametypes\_globallogic_score::_setplayermomentum( player, 2000 ); - continue; - } - - player maps\mp\killstreaks\_killstreaks::givekillstreak( keys[i] ); - } - - setdvar( dvar, "0" ); - } - } -#/ -} - -warpalltohost( team ) -{ -/# - host = gethostplayer(); - players = get_players(); - origin = host.origin; - nodes = getnodesinradius( origin, 128, 32, 128, "Path" ); - angles = host getplayerangles(); - yaw = ( 0.0, angles[1], 0.0 ); - forward = anglestoforward( yaw ); - spawn_origin = origin + forward * 128 + vectorscale( ( 0, 0, 1 ), 16.0 ); - - if ( !bullettracepassed( host geteye(), spawn_origin, 0, host ) ) - spawn_origin = undefined; - - for ( i = 0; i < players.size; i++ ) - { - if ( players[i] == host ) - continue; - - if ( isdefined( team ) ) - { - if ( team == "enemies_host" && host.team == players[i].team ) - continue; - - if ( team == "friendlies_host" && host.team != players[i].team ) - continue; - } - - if ( isdefined( spawn_origin ) ) - { - players[i] setorigin( spawn_origin ); - continue; - } - - if ( nodes.size > 0 ) - { - node = random( nodes ); - players[i] setorigin( node.origin ); - continue; - } - - players[i] setorigin( origin ); - } - - setdvar( "scr_playerwarp", "" ); -#/ -} - -updatedevsettingszm() -{ -/# - if ( level.players.size > 0 ) - { - if ( getdvar( "r_streamDumpDistance" ) == "3" ) - { - if ( !isdefined( level.streamdumpteamindex ) ) - level.streamdumpteamindex = 0; - else - level.streamdumpteamindex++; - - numpoints = 0; - spawnpoints = []; - location = level.scr_zm_map_start_location; - - if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) ) - location = level.default_start_location; - - match_string = level.scr_zm_ui_gametype + "_" + location; - - if ( level.streamdumpteamindex < level.teams.size ) - { - structs = getstructarray( "initial_spawn", "script_noteworthy" ); - - if ( isdefined( structs ) ) - { - foreach ( struct in structs ) - { - if ( isdefined( struct.script_string ) ) - { - tokens = strtok( struct.script_string, " " ); - - foreach ( token in tokens ) - { - if ( token == match_string ) - spawnpoints[spawnpoints.size] = struct; - } - } - } - } - - if ( !isdefined( spawnpoints ) || spawnpoints.size == 0 ) - spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); - - if ( isdefined( spawnpoints ) ) - numpoints = spawnpoints.size; - } - - if ( numpoints == 0 ) - { - setdvar( "r_streamDumpDistance", "0" ); - level.streamdumpteamindex = -1; - } - else - { - averageorigin = ( 0, 0, 0 ); - averageangles = ( 0, 0, 0 ); - - foreach ( spawnpoint in spawnpoints ) - { - averageorigin += spawnpoint.origin / numpoints; - averageangles += spawnpoint.angles / numpoints; - } - - level.players[0] setplayerangles( averageangles ); - level.players[0] setorigin( averageorigin ); - wait 0.05; - setdvar( "r_streamDumpDistance", "2" ); - } - } - } -#/ -} - -updatedevsettings() -{ -/# - show_spawns = getdvarint( "scr_showspawns" ); - show_start_spawns = getdvarint( "scr_showstartspawns" ); - player = gethostplayer(); - - if ( show_spawns >= 1 ) - show_spawns = 1; - else - show_spawns = 0; - - if ( show_start_spawns >= 1 ) - show_start_spawns = 1; - else - show_start_spawns = 0; - - if ( !isdefined( level.show_spawns ) || level.show_spawns != show_spawns ) - { - level.show_spawns = show_spawns; - setdvar( "scr_showspawns", level.show_spawns ); - - if ( level.show_spawns ) - showspawnpoints(); - else - hidespawnpoints(); - } - - if ( !isdefined( level.show_start_spawns ) || level.show_start_spawns != show_start_spawns ) - { - level.show_start_spawns = show_start_spawns; - setdvar( "scr_showstartspawns", level.show_start_spawns ); - - if ( level.show_start_spawns ) - showstartspawnpoints(); - else - hidestartspawnpoints(); - } - - updateminimapsetting(); - - if ( level.players.size > 0 ) - { - updatehardpoints(); - - if ( getdvar( "scr_playerwarp" ) == "host" ) - warpalltohost(); - else if ( getdvar( "scr_playerwarp" ) == "enemies_host" ) - warpalltohost( getdvar( "scr_playerwarp" ) ); - else if ( getdvar( "scr_playerwarp" ) == "friendlies_host" ) - warpalltohost( getdvar( "scr_playerwarp" ) ); - else if ( getdvar( "scr_playerwarp" ) == "next_start_spawn" ) - { - players = get_players(); - setdvar( "scr_playerwarp", "" ); - - if ( !isdefined( level.devgui_start_spawn_index ) ) - level.devgui_start_spawn_index = 0; - - player = gethostplayer(); - spawns = level.spawn_start[player.pers["team"]]; - - if ( !isdefined( spawns ) || spawns.size <= 0 ) - return; - - for ( i = 0; i < players.size; i++ ) - { - players[i] setorigin( spawns[level.devgui_start_spawn_index].origin ); - players[i] setplayerangles( spawns[level.devgui_start_spawn_index].angles ); - } - - level.devgui_start_spawn_index++; - - if ( level.devgui_start_spawn_index >= spawns.size ) - level.devgui_start_spawn_index = 0; - } - else if ( getdvar( "scr_playerwarp" ) == "prev_start_spawn" ) - { - players = get_players(); - setdvar( "scr_playerwarp", "" ); - - if ( !isdefined( level.devgui_start_spawn_index ) ) - level.devgui_start_spawn_index = 0; - - player = gethostplayer(); - spawns = level.spawn_start[player.pers["team"]]; - - if ( !isdefined( spawns ) || spawns.size <= 0 ) - return; - - for ( i = 0; i < players.size; i++ ) - { - players[i] setorigin( spawns[level.devgui_start_spawn_index].origin ); - players[i] setplayerangles( spawns[level.devgui_start_spawn_index].angles ); - } - - level.devgui_start_spawn_index--; - - if ( level.devgui_start_spawn_index < 0 ) - level.devgui_start_spawn_index = spawns.size - 1; - } - else if ( getdvar( "scr_playerwarp" ) == "next_spawn" ) - { - players = get_players(); - setdvar( "scr_playerwarp", "" ); - - if ( !isdefined( level.devgui_spawn_index ) ) - level.devgui_spawn_index = 0; - - spawns = level.spawnpoints; - spawns = arraycombine( spawns, level.dem_spawns, 1, 0 ); - - if ( !isdefined( spawns ) || spawns.size <= 0 ) - return; - - for ( i = 0; i < players.size; i++ ) - { - players[i] setorigin( spawns[level.devgui_spawn_index].origin ); - players[i] setplayerangles( spawns[level.devgui_spawn_index].angles ); - } - - level.devgui_spawn_index++; - - if ( level.devgui_spawn_index >= spawns.size ) - level.devgui_spawn_index = 0; - } - else if ( getdvar( "scr_playerwarp" ) == "prev_spawn" ) - { - players = get_players(); - setdvar( "scr_playerwarp", "" ); - - if ( !isdefined( level.devgui_spawn_index ) ) - level.devgui_spawn_index = 0; - - spawns = level.spawnpoints; - spawns = arraycombine( spawns, level.dem_spawns, 1, 0 ); - - if ( !isdefined( spawns ) || spawns.size <= 0 ) - return; - - for ( i = 0; i < players.size; i++ ) - { - players[i] setorigin( spawns[level.devgui_spawn_index].origin ); - players[i] setplayerangles( spawns[level.devgui_spawn_index].angles ); - } - - level.devgui_spawn_index--; - - if ( level.devgui_spawn_index < 0 ) - level.devgui_spawn_index = spawns.size - 1; - } - else if ( getdvar( "scr_devgui_spawn" ) != "" ) - { - player = gethostplayer(); - - if ( !isdefined( player.devgui_spawn_active ) ) - player.devgui_spawn_active = 0; - - if ( !player.devgui_spawn_active ) - { - iprintln( "Previous spawn bound to D-Pad Left" ); - iprintln( "Next spawn bound to D-Pad Right" ); - player.devgui_spawn_active = 1; - player thread devgui_spawn_think(); - } - else - { - player notify( "devgui_spawn_think" ); - player.devgui_spawn_active = 0; - player setactionslot( 3, "altMode" ); - player setactionslot( 4, "nightvision" ); - } - - setdvar( "scr_devgui_spawn", "" ); - } - else if ( getdvar( "scr_player_ammo" ) != "" ) - { - players = get_players(); - - if ( !isdefined( level.devgui_unlimited_ammo ) ) - level.devgui_unlimited_ammo = 1; - else - level.devgui_unlimited_ammo = !level.devgui_unlimited_ammo; - - if ( level.devgui_unlimited_ammo ) - iprintln( "Giving unlimited ammo to all players" ); - else - iprintln( "Stopping unlimited ammo for all players" ); - - for ( i = 0; i < players.size; i++ ) - { - if ( level.devgui_unlimited_ammo ) - { - players[i] thread devgui_unlimited_ammo(); - continue; - } - - players[i] notify( "devgui_unlimited_ammo" ); - } - - setdvar( "scr_player_ammo", "" ); - } - else if ( getdvar( "scr_player_momentum" ) != "" ) - { - if ( !isdefined( level.devgui_unlimited_momentum ) ) - level.devgui_unlimited_momentum = 1; - else - level.devgui_unlimited_momentum = !level.devgui_unlimited_momentum; - - if ( level.devgui_unlimited_momentum ) - { - iprintln( "Giving unlimited momentum to all players" ); - level thread devgui_unlimited_momentum(); - } - else - { - iprintln( "Stopping unlimited momentum for all players" ); - level notify( "devgui_unlimited_momentum" ); - } - - setdvar( "scr_player_momentum", "" ); - } - else if ( getdvar( "scr_give_player_score" ) != "" ) - { - level thread devgui_increase_momentum( getdvarint( "scr_give_player_score" ) ); - setdvar( "scr_give_player_score", "" ); - } - else if ( getdvar( "scr_player_zero_ammo" ) != "" ) - { - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - player = players[i]; - weapons = player getweaponslist(); - arrayremovevalue( weapons, "knife_mp" ); - - for ( j = 0; j < weapons.size; j++ ) - { - if ( weapons[j] == "none" ) - continue; - - player setweaponammostock( weapons[j], 0 ); - player setweaponammoclip( weapons[j], 0 ); - } - } - - setdvar( "scr_player_zero_ammo", "" ); - } - else if ( getdvar( "scr_emp_jammed" ) != "" ) - { - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - player = players[i]; - - if ( getdvar( "scr_emp_jammed" ) == "0" ) - { - player setempjammed( 0 ); - continue; - } - - player setempjammed( 1 ); - } - - setdvar( "scr_emp_jammed", "" ); - } - else if ( getdvar( "scr_round_pause" ) != "" ) - { - if ( !level.timerstopped ) - { - iprintln( "Pausing Round Timer" ); - maps\mp\gametypes\_globallogic_utils::pausetimer(); - } - else - { - iprintln( "Resuming Round Timer" ); - maps\mp\gametypes\_globallogic_utils::resumetimer(); - } - - setdvar( "scr_round_pause", "" ); - } - else if ( getdvar( "scr_round_end" ) != "" ) - { - level maps\mp\gametypes\_globallogic::forceend(); - setdvar( "scr_round_end", "" ); - } - else if ( getdvar( "scr_health_debug" ) != "" ) - { - players = get_players(); - host = gethostplayer(); - - if ( !isdefined( host.devgui_health_debug ) ) - host.devgui_health_debug = 0; - - if ( host.devgui_health_debug ) - { - host.devgui_health_debug = 0; - - for ( i = 0; i < players.size; i++ ) - { - players[i] notify( "devgui_health_debug" ); - - if ( isdefined( players[i].debug_health_bar ) ) - { - players[i].debug_health_bar destroy(); - players[i].debug_health_text destroy(); - players[i].debug_health_bar = undefined; - players[i].debug_health_text = undefined; - } - } - } - else - { - host.devgui_health_debug = 1; - - for ( i = 0; i < players.size; i++ ) - players[i] thread devgui_health_debug(); - } - - setdvar( "scr_health_debug", "" ); - } - else if ( getdvar( "scr_show_hq_spawns" ) != "" ) - { - if ( !isdefined( level.devgui_show_hq ) ) - level.devgui_show_hq = 0; - - if ( level.gametype == "koth" && isdefined( level.radios ) ) - { - if ( !level.devgui_show_hq ) - { - for ( i = 0; i < level.radios.size; i++ ) - { - color = ( 1, 0, 0 ); - level showonespawnpoint( level.radios[i], color, "hide_hq_points", 32, "hq_spawn" ); - } - } - else - level notify( "hide_hq_points" ); - - level.devgui_show_hq = !level.devgui_show_hq; - } - - setdvar( "scr_show_hq_spawns", "" ); - } - - if ( getdvar( "r_streamDumpDistance" ) == "3" ) - { - if ( !isdefined( level.streamdumpteamindex ) ) - level.streamdumpteamindex = 0; - else - level.streamdumpteamindex++; - - numpoints = 0; - - if ( level.streamdumpteamindex < level.teams.size ) - { - teamname = getarraykeys( level.teams )[level.streamdumpteamindex]; - - if ( isdefined( level.spawn_start[teamname] ) ) - numpoints = level.spawn_start[teamname].size; - } - - if ( numpoints == 0 ) - { - setdvar( "r_streamDumpDistance", "0" ); - level.streamdumpteamindex = -1; - } - else - { - averageorigin = ( 0, 0, 0 ); - averageangles = ( 0, 0, 0 ); - - foreach ( spawnpoint in level.spawn_start[teamname] ) - { - averageorigin += spawnpoint.origin / numpoints; - averageangles += spawnpoint.angles / numpoints; - } - - level.players[0] setplayerangles( averageangles ); - level.players[0] setorigin( averageorigin ); - wait 0.05; - setdvar( "r_streamDumpDistance", "2" ); - } - } - } - - if ( getdvar( "scr_giveperk" ) == "0" ) - { - players = get_players(); - iprintln( "Taking all perks from all players" ); - - for ( i = 0; i < players.size; i++ ) - players[i] clearperks(); - - setdvar( "scr_giveperk", "" ); - } - - if ( getdvar( "scr_giveperk" ) != "" ) - { - perk = getdvar( "scr_giveperk" ); - specialties = strtok( perk, "|" ); - players = get_players(); - iprintln( "Giving all players perk: '" + perk + "'" ); - - for ( i = 0; i < players.size; i++ ) - { - for ( j = 0; j < specialties.size; j++ ) - { - players[i] setperk( specialties[j] ); - players[i].extraperks[specialties[j]] = 1; - } - } - - setdvar( "scr_giveperk", "" ); - } - - if ( getdvar( "scr_forcegrenade" ) != "" ) - { - force_grenade_throw( getdvar( "scr_forcegrenade" ) ); - setdvar( "scr_forcegrenade", "" ); - } - - if ( getdvar( "scr_forceevent" ) != "" ) - { - event = getdvar( "scr_forceevent" ); - player = gethostplayer(); - forward = anglestoforward( player.angles ); - right = anglestoright( player.angles ); - - if ( event == "painfront" ) - player dodamage( 1, player.origin + forward ); - else if ( event == "painback" ) - player dodamage( 1, player.origin - forward ); - else if ( event == "painleft" ) - player dodamage( 1, player.origin - right ); - else if ( event == "painright" ) - player dodamage( 1, player.origin + right ); - - setdvar( "scr_forceevent", "" ); - } - - if ( getdvar( "scr_takeperk" ) != "" ) - { - perk = getdvar( "scr_takeperk" ); - - for ( i = 0; i < level.players.size; i++ ) - { - level.players[i] unsetperk( perk ); - level.players[i].extraperks[perk] = undefined; - } - - setdvar( "scr_takeperk", "" ); - } - - if ( getdvar( "scr_x_kills_y" ) != "" ) - { - nametokens = strtok( getdvar( "scr_x_kills_y" ), " " ); - - if ( nametokens.size > 1 ) - thread xkillsy( nametokens[0], nametokens[1] ); - - setdvar( "scr_x_kills_y", "" ); - } - - if ( getdvar( "scr_usedogs" ) != "" ) - { - ownername = getdvar( "scr_usedogs" ); - setdvar( "scr_usedogs", "" ); - owner = undefined; - - for ( index = 0; index < level.players.size; index++ ) - { - if ( level.players[index].name == ownername ) - owner = level.players[index]; - } - - if ( isdefined( owner ) ) - owner maps\mp\killstreaks\_killstreaks::triggerkillstreak( "dogs_mp" ); - } - - if ( getdvar( "scr_set_level" ) != "" ) - { - player.pers["rank"] = 0; - player.pers["rankxp"] = 0; - newrank = min( getdvarint( "scr_set_level" ), 54 ); - newrank = max( newrank, 1 ); - setdvar( "scr_set_level", "" ); - lastxp = 0; - - for ( index = 0; index <= newrank; index++ ) - { - newxp = maps\mp\gametypes\_rank::getrankinfominxp( index ); - player thread maps\mp\gametypes\_rank::giverankxp( "kill", newxp - lastxp ); - lastxp = newxp; - wait 0.25; - self notify( "cancel_notify" ); - } - } - - if ( getdvar( "scr_givexp" ) != "" ) - { - player thread maps\mp\gametypes\_rank::giverankxp( "challenge", getdvarint( "scr_givexp" ), 1 ); - setdvar( "scr_givexp", "" ); - } - - if ( getdvar( "scr_do_notify" ) != "" ) - { - for ( i = 0; i < level.players.size; i++ ) - level.players[i] maps\mp\gametypes\_hud_message::oldnotifymessage( getdvar( "scr_do_notify" ), getdvar( "scr_do_notify" ), game["icons"]["allies"] ); - - announcement( getdvar( "scr_do_notify" ), 0 ); - setdvar( "scr_do_notify", "" ); - } - - if ( getdvar( _hash_4F1284FA ) != "" ) - { - ents = getentarray(); - level.entarray = []; - level.entcounts = []; - level.entgroups = []; - - for ( index = 0; index < ents.size; index++ ) - { - classname = ents[index].classname; - - if ( !issubstr( classname, "_spawn" ) ) - { - curent = ents[index]; - level.entarray[level.entarray.size] = curent; - - if ( !isdefined( level.entcounts[classname] ) ) - level.entcounts[classname] = 0; - - level.entcounts[classname]++; - - if ( !isdefined( level.entgroups[classname] ) ) - level.entgroups[classname] = []; - - level.entgroups[classname][level.entgroups[classname].size] = curent; - } - } - } - - if ( getdvar( "debug_dynamic_ai_spawning" ) == "1" && !isdefined( level.larry ) ) - thread larry_thread(); - else if ( getdvar( "debug_dynamic_ai_spawning" ) == "0" ) - level notify( "kill_larry" ); - - if ( level.bot_overlay == 0 && getdvarint( _hash_1CBC4852 ) == 1 ) - { - level thread bot_overlay_think(); - level.bot_overlay = 1; - } - else if ( level.bot_overlay == 1 && getdvarint( _hash_1CBC4852 ) == 0 ) - { - level bot_overlay_stop(); - level.bot_overlay = 0; - } - - if ( level.bot_threat == 0 && getdvarint( _hash_68A98D18 ) == 1 ) - { - level thread bot_threat_think(); - level.bot_threat = 1; - } - else if ( level.bot_threat == 1 && getdvarint( _hash_68A98D18 ) == 0 ) - { - level bot_threat_stop(); - level.bot_threat = 0; - } - - if ( level.bot_path == 0 && getdvarint( _hash_D6F2CC5D ) == 1 ) - { - level thread bot_path_think(); - level.bot_path = 1; - } - else if ( level.bot_path == 1 && getdvarint( _hash_D6F2CC5D ) == 0 ) - { - level bot_path_stop(); - level.bot_path = 0; - } - - if ( getdvarint( "scr_force_finalkillcam" ) == 1 ) - { - level thread maps\mp\gametypes\_killcam::dofinalkillcam(); - level thread waitthennotifyfinalkillcam(); - } - - if ( getdvarint( "scr_force_roundkillcam" ) == 1 ) - { - level thread maps\mp\gametypes\_killcam::dofinalkillcam(); - level thread waitthennotifyroundkillcam(); - } - - if ( !level.bot_overlay && !level.bot_threat && !level.bot_path ) - level notify( "bot_dpad_terminate" ); -#/ -} - -waitthennotifyroundkillcam() -{ -/# - wait 0.05; - level notify( "play_final_killcam" ); - setdvar( "scr_force_roundkillcam", 0 ); -#/ -} - -waitthennotifyfinalkillcam() -{ -/# - wait 0.05; - level notify( "play_final_killcam" ); - wait 0.05; - setdvar( "scr_force_finalkillcam", 0 ); -#/ -} - -devgui_spawn_think() -{ -/# - self notify( "devgui_spawn_think" ); - self endon( "devgui_spawn_think" ); - self endon( "disconnect" ); - dpad_left = 0; - dpad_right = 0; - - for (;;) - { - self setactionslot( 3, "" ); - self setactionslot( 4, "" ); - - if ( !dpad_left && self buttonpressed( "DPAD_LEFT" ) ) - { - setdvar( "scr_playerwarp", "prev_spawn" ); - dpad_left = 1; - } - else if ( !self buttonpressed( "DPAD_LEFT" ) ) - dpad_left = 0; - - if ( !dpad_right && self buttonpressed( "DPAD_RIGHT" ) ) - { - setdvar( "scr_playerwarp", "next_spawn" ); - dpad_right = 1; - } - else if ( !self buttonpressed( "DPAD_RIGHT" ) ) - dpad_right = 0; - - wait 0.05; - } -#/ -} - -devgui_unlimited_ammo() -{ -/# - self notify( "devgui_unlimited_ammo" ); - self endon( "devgui_unlimited_ammo" ); - self endon( "disconnect" ); - - for (;;) - { - wait 0.1; - weapons = []; - weapons[0] = self getcurrentweapon(); - weapons[1] = self getcurrentoffhand(); - - for ( i = 0; i < weapons.size; i++ ) - { - if ( weapons[i] == "none" ) - continue; - - if ( maps\mp\killstreaks\_killstreaks::iskillstreakweapon( weapons[i] ) ) - continue; - - self givemaxammo( weapons[i] ); - } - } -#/ -} - -devgui_unlimited_momentum() -{ -/# - level notify( "devgui_unlimited_momentum" ); - level endon( "devgui_unlimited_momentum" ); - - for (;;) - { - wait 1; - players = get_players(); - - foreach ( player in players ) - { - if ( !isdefined( player ) ) - continue; - - if ( !isalive( player ) ) - continue; - - if ( player.sessionstate != "playing" ) - continue; - - maps\mp\gametypes\_globallogic_score::_setplayermomentum( player, 5000 ); - } - } -#/ -} - -devgui_increase_momentum( score ) -{ -/# - players = get_players(); - - foreach ( player in players ) - { - if ( !isdefined( player ) ) - continue; - - if ( !isalive( player ) ) - continue; - - if ( player.sessionstate != "playing" ) - continue; - - player maps\mp\gametypes\_globallogic_score::giveplayermomentumnotification( score, &"testPlayerScoreForTan", "PLAYER_SCORE", 0 ); - } -#/ -} - -devgui_health_debug() -{ -/# - self notify( "devgui_health_debug" ); - self endon( "devgui_health_debug" ); - self endon( "disconnect" ); - x = 80; - y = 40; - self.debug_health_bar = newclienthudelem( self ); - self.debug_health_bar.x = x + 80; - self.debug_health_bar.y = y + 2; - self.debug_health_bar.alignx = "left"; - self.debug_health_bar.aligny = "top"; - self.debug_health_bar.horzalign = "fullscreen"; - self.debug_health_bar.vertalign = "fullscreen"; - self.debug_health_bar.alpha = 1; - self.debug_health_bar.foreground = 1; - self.debug_health_bar setshader( "black", 1, 8 ); - self.debug_health_text = newclienthudelem( self ); - self.debug_health_text.x = x + 80; - self.debug_health_text.y = y; - self.debug_health_text.alignx = "left"; - self.debug_health_text.aligny = "top"; - self.debug_health_text.horzalign = "fullscreen"; - self.debug_health_text.vertalign = "fullscreen"; - self.debug_health_text.alpha = 1; - self.debug_health_text.fontscale = 1; - self.debug_health_text.foreground = 1; - - if ( !isdefined( self.maxhealth ) || self.maxhealth <= 0 ) - self.maxhealth = 100; - - for (;;) - { - wait 0.05; - width = self.health / self.maxhealth * 300; - width = int( max( width, 1 ) ); - self.debug_health_bar setshader( "black", width, 8 ); - self.debug_health_text setvalue( self.health ); - } -#/ -} - -giveextraperks() -{ -/# - if ( !isdefined( self.extraperks ) ) - return; - - perks = getarraykeys( self.extraperks ); - - for ( i = 0; i < perks.size; i++ ) - self setperk( perks[i] ); -#/ -} - -xkillsy( attackername, victimname ) -{ -/# - attacker = undefined; - victim = undefined; - - for ( index = 0; index < level.players.size; index++ ) - { - if ( level.players[index].name == attackername ) - { - attacker = level.players[index]; - continue; - } - - if ( level.players[index].name == victimname ) - victim = level.players[index]; - } - - if ( !isalive( attacker ) || !isalive( victim ) ) - return; - - victim thread [[ level.callbackplayerdamage ]]( attacker, attacker, 1000, 0, "MOD_RIFLE_BULLET", "none", ( 0, 0, 0 ), ( 0, 0, 0 ), "none", 0, 0 ); -#/ -} - -updateminimapsetting() -{ -/# - requiredmapaspectratio = getdvarfloat( "scr_RequiredMapAspectratio" ); - - if ( !isdefined( level.minimapheight ) ) - { - setdvar( "scr_minimap_height", "0" ); - level.minimapheight = 0; - } - - minimapheight = getdvarfloat( "scr_minimap_height" ); - - if ( minimapheight != level.minimapheight ) - { - if ( minimapheight <= 0 ) - { - gethostplayer() cameraactivate( 0 ); - level.minimapheight = minimapheight; - level notify( "end_draw_map_bounds" ); - } - - if ( minimapheight > 0 ) - { - level.minimapheight = minimapheight; - players = get_players(); - - if ( players.size > 0 ) - { - player = gethostplayer(); - corners = getentarray( "minimap_corner", "targetname" ); - - if ( corners.size == 2 ) - { - viewpos = corners[0].origin + corners[1].origin; - viewpos = ( viewpos[0] * 0.5, viewpos[1] * 0.5, viewpos[2] * 0.5 ); - level thread minimapwarn( corners ); - maxcorner = ( corners[0].origin[0], corners[0].origin[1], viewpos[2] ); - mincorner = ( corners[0].origin[0], corners[0].origin[1], viewpos[2] ); - - if ( corners[1].origin[0] > corners[0].origin[0] ) - maxcorner = ( corners[1].origin[0], maxcorner[1], maxcorner[2] ); - else - mincorner = ( corners[1].origin[0], mincorner[1], mincorner[2] ); - - if ( corners[1].origin[1] > corners[0].origin[1] ) - maxcorner = ( maxcorner[0], corners[1].origin[1], maxcorner[2] ); - else - mincorner = ( mincorner[0], corners[1].origin[1], mincorner[2] ); - - viewpostocorner = maxcorner - viewpos; - viewpos = ( viewpos[0], viewpos[1], viewpos[2] + minimapheight ); - northvector = ( cos( getnorthyaw() ), sin( getnorthyaw() ), 0 ); - eastvector = ( northvector[1], 0 - northvector[0], 0 ); - disttotop = vectordot( northvector, viewpostocorner ); - - if ( disttotop < 0 ) - disttotop = 0 - disttotop; - - disttoside = vectordot( eastvector, viewpostocorner ); - - if ( disttoside < 0 ) - disttoside = 0 - disttoside; - - if ( requiredmapaspectratio > 0 ) - { - mapaspectratio = disttoside / disttotop; - - if ( mapaspectratio < requiredmapaspectratio ) - { - incr = requiredmapaspectratio / mapaspectratio; - disttoside *= incr; - addvec = vecscale( eastvector, vectordot( eastvector, maxcorner - viewpos ) * ( incr - 1 ) ); - mincorner -= addvec; - maxcorner += addvec; - } - else - { - incr = mapaspectratio / requiredmapaspectratio; - disttotop *= incr; - addvec = vecscale( northvector, vectordot( northvector, maxcorner - viewpos ) * ( incr - 1 ) ); - mincorner -= addvec; - maxcorner += addvec; - } - } - - if ( level.console ) - { - aspectratioguess = 1.77778; - angleside = 2 * atan( disttoside * 0.8 / minimapheight ); - angletop = 2 * atan( disttotop * aspectratioguess * 0.8 / minimapheight ); - } - else - { - aspectratioguess = 1.33333; - angleside = 2 * atan( disttoside / minimapheight ); - angletop = 2 * atan( disttotop * aspectratioguess / minimapheight ); - } - - if ( angleside > angletop ) - angle = angleside; - else - angle = angletop; - - znear = minimapheight - 1000; - - if ( znear < 16 ) - znear = 16; - - if ( znear > 10000 ) - znear = 10000; - - player camerasetposition( viewpos, ( 90, getnorthyaw(), 0 ) ); - player cameraactivate( 1 ); - player takeallweapons(); - setdvar( "cg_drawGun", 0 ); - setdvar( "cg_draw2D", 0 ); - setdvar( "cg_drawFPS", 0 ); - setdvar( "fx_enable", 0 ); - setdvar( "r_fog", 0 ); - setdvar( "r_highLodDist", 0 ); - setdvar( "r_znear", znear ); - setdvar( "r_lodscale", 0 ); - setdvar( "r_lodScaleRigid", 0 ); - setdvar( "cg_drawVersion", 0 ); - setdvar( "sm_enable", 1 ); - setdvar( "player_view_pitch_down", 90 ); - setdvar( "player_view_pitch_up", 0 ); - setdvar( "cg_fov", angle ); - setdvar( "cg_fovMin", 1 ); - setdvar( "debug_show_viewpos", "0" ); - - if ( isdefined( level.objpoints ) ) - { - for ( i = 0; i < level.objpointnames.size; i++ ) - { - if ( isdefined( level.objpoints[level.objpointnames[i]] ) ) - level.objpoints[level.objpointnames[i]] destroy(); - } - - level.objpoints = []; - level.objpointnames = []; - } - - thread drawminimapbounds( viewpos, mincorner, maxcorner ); - } - else - println( "^1Error: There are not exactly 2 \"minimap_corner\" entities in the level." ); - } - else - setdvar( "scr_minimap_height", "0" ); - } - } -#/ -} - -vecscale( vec, scalar ) -{ -/# - return ( vec[0] * scalar, vec[1] * scalar, vec[2] * scalar ); -#/ -} - -drawminimapbounds( viewpos, mincorner, maxcorner ) -{ -/# - level notify( "end_draw_map_bounds" ); - level endon( "end_draw_map_bounds" ); - viewheight = viewpos[2] - maxcorner[2]; - north = ( cos( getnorthyaw() ), sin( getnorthyaw() ), 0 ); - diaglen = length( mincorner - maxcorner ); - mincorneroffset = mincorner - viewpos; - mincorneroffset = vectornormalize( ( mincorneroffset[0], mincorneroffset[1], 0 ) ); - mincorner += vecscale( mincorneroffset, diaglen * 1 / 800 ); - maxcorneroffset = maxcorner - viewpos; - maxcorneroffset = vectornormalize( ( maxcorneroffset[0], maxcorneroffset[1], 0 ) ); - maxcorner += vecscale( maxcorneroffset, diaglen * 1 / 800 ); - diagonal = maxcorner - mincorner; - side = vecscale( north, vectordot( diagonal, north ) ); - sidenorth = vecscale( north, abs( vectordot( diagonal, north ) ) ); - corner0 = mincorner; - corner1 = mincorner + side; - corner2 = maxcorner; - corner3 = maxcorner - side; - toppos = vecscale( mincorner + maxcorner, 0.5 ) + vecscale( sidenorth, 0.51 ); - textscale = diaglen * 0.003; - - while ( true ) - { - line( corner0, corner1 ); - line( corner1, corner2 ); - line( corner2, corner3 ); - line( corner3, corner0 ); - print3d( toppos, "This Side Up", ( 1, 1, 1 ), 1, textscale ); - wait 0.05; - } -#/ -} - -minimapwarn( corners ) -{ -/# - threshold = 10; - width = abs( corners[0].origin[0] - corners[1].origin[0] ); - width = int( width ); - height = abs( corners[0].origin[1] - corners[1].origin[1] ); - height = int( height ); - - if ( abs( width - height ) > threshold ) - { - for (;;) - { - iprintln( "^1Warning: Minimap corners do not form a square (width: " + width + " height: " + height + ")\n" ); - - if ( height > width ) - { - scale = height / width; - iprintln( "^1Warning: The compass minimap might be scaled: " + scale + " units in height more than width\n" ); - } - else - { - scale = width / height; - iprintln( "^1Warning: The compass minimap might be scaled: " + scale + " units in width more than height\n" ); - } - - wait 10; - } - } -#/ -} - -testscriptruntimeerrorassert() -{ -/# - wait 1; - assert( 0 ); -#/ -} - -testscriptruntimeerror2() -{ -/# - myundefined = "test"; - - if ( myundefined == 1 ) - println( "undefined in testScriptRuntimeError2\n" ); -#/ -} - -testscriptruntimeerror1() -{ -/# - testscriptruntimeerror2(); -#/ -} - -testscriptruntimeerror() -{ -/# - wait 5; - - for (;;) - { - if ( getdvar( "scr_testScriptRuntimeError" ) != "0" ) - break; - - wait 1; - } - - myerror = getdvar( "scr_testScriptRuntimeError" ); - setdvar( "scr_testScriptRuntimeError", "0" ); - - if ( myerror == "assert" ) - testscriptruntimeerrorassert(); - else - testscriptruntimeerror1(); - - thread testscriptruntimeerror(); -#/ -} - -testdvars() -{ -/# - wait 5; - - for (;;) - { - if ( getdvar( "scr_testdvar" ) != "" ) - break; - - wait 1; - } - - tokens = strtok( getdvar( "scr_testdvar" ), " " ); - dvarname = tokens[0]; - dvarvalue = tokens[1]; - setdvar( dvarname, dvarvalue ); - setdvar( "scr_testdvar", "" ); - thread testdvars(); -#/ -} - -addtestclients() -{ -/# - wait 5; - - for (;;) - { - if ( getdvarint( "scr_testclients" ) > 0 ) - break; - - wait 1; - } - - playsoundonplayers( "vox_kls_dav_spawn" ); - testclients = getdvarint( "scr_testclients" ); - setdvar( "scr_testclients", 0 ); - - for ( i = 0; i < testclients; i++ ) - { - ent[i] = addtestclient(); - - if ( !isdefined( ent[i] ) ) - { - println( "Could not add test client" ); - wait 1; - continue; - } - - ent[i].pers["isBot"] = 1; - ent[i] thread testclient( "autoassign" ); - } - - thread addtestclients(); -#/ -} - -addenemyheli() -{ -/# - wait 5; - - for (;;) - { - if ( getdvarint( "scr_spawnenemyheli" ) > 0 ) - break; - - wait 1; - } - - enemyheli = getdvarint( "scr_spawnenemyheli" ); - setdvar( "scr_spawnenemyheli", 0 ); - team = "autoassign"; - player = gethostplayer(); - - if ( isdefined( player.pers["team"] ) ) - team = getotherteam( player.pers["team"] ); - - ent = getormakebot( team ); - - if ( !isdefined( ent ) ) - { - println( "Could not add test client" ); - wait 1; - thread addenemyheli(); - return; - } - - switch ( enemyheli ) - { - case 1: - level.helilocation = ent.origin; - ent thread maps\mp\killstreaks\_helicopter::usekillstreakhelicopter( "helicopter_comlink_mp" ); - wait 0.5; - ent notify( "confirm_location", level.helilocation ); - break; - case 2: - ent thread maps\mp\killstreaks\_helicopter_gunner::heli_gunner_killstreak( "helicopter_player_gunner_mp" ); - break; - } - - thread addenemyheli(); -#/ -} - -getormakebot( team ) -{ -/# - for ( i = 0; i < level.players.size; i++ ) - { - if ( level.players[i].team == team ) - { - if ( isdefined( level.players[i].pers["isBot"] ) && level.players[i].pers["isBot"] ) - return level.players[i]; - } - } - - ent = addtestclient(); - - if ( isdefined( ent ) ) - { - playsoundonplayers( "vox_kls_dav_spawn" ); - ent.pers["isBot"] = 1; - ent thread testclient( team ); - wait 1; - } - - return ent; -#/ -} - -addenemyu2() -{ -/# - wait 5; - - for (;;) - { - if ( getdvarint( "scr_spawnenemyu2" ) > 0 ) - break; - - wait 1; - } - - type = getdvarint( "scr_spawnenemyu2" ); - setdvar( "scr_spawnenemyu2", 0 ); - team = "autoassign"; - player = gethostplayer(); - - if ( isdefined( player.team ) ) - team = getotherteam( player.team ); - - ent = getormakebot( team ); - - if ( !isdefined( ent ) ) - { - println( "Could not add test client" ); - wait 1; - thread addenemyu2(); - return; - } - - if ( type == 3 ) - ent thread maps\mp\killstreaks\_radar::usekillstreaksatellite( "radardirection_mp" ); - else if ( type == 2 ) - ent thread maps\mp\killstreaks\_radar::usekillstreakcounteruav( "counteruav_mp" ); - else - ent thread maps\mp\killstreaks\_radar::usekillstreakradar( "radar_mp" ); - - thread addenemyu2(); -#/ -} - -addtestcarepackage() -{ -/# - wait 5; - - for (;;) - { - if ( getdvarint( "scr_givetestsupplydrop" ) > 0 ) - break; - - wait 1; - } - - supplydrop = getdvarint( "scr_givetestsupplydrop" ); - team = "autoassign"; - player = gethostplayer(); - - if ( isdefined( player.pers["team"] ) ) - { - switch ( supplydrop ) - { - case 2: - team = getotherteam( player.pers["team"] ); - break; - case 1: - default: - team = player.pers["team"]; - break; - } - } - - setdvar( "scr_givetestsupplydrop", 0 ); - ent = getormakebot( team ); - - if ( !isdefined( ent ) ) - { - println( "Could not add test client" ); - wait 1; - thread addtestcarepackage(); - return; - } - - ent maps\mp\killstreaks\_killstreakrules::killstreakstart( "supply_drop_mp", team ); - ent thread maps\mp\killstreaks\_supplydrop::helidelivercrate( ent.origin, "supplydrop_mp", ent, team ); - thread addtestcarepackage(); -#/ -} - -removetestclients() -{ -/# - wait 5; - - for (;;) - { - if ( getdvarint( "scr_testclientsremove" ) > 0 ) - break; - - wait 1; - } - - playsoundonplayers( "vox_kls_dav_kill" ); - removetype = getdvarint( "scr_testclientsremove" ); - setdvar( "scr_testclientsremove", 0 ); - host = gethostplayer(); - players = level.players; - - for ( i = 0; i < players.size; i++ ) - { - if ( isdefined( players[i].pers["isBot"] ) && players[i].pers["isBot"] == 1 ) - { - if ( removetype == 2 && host.team != players[i].team ) - continue; - - if ( removetype == 3 && host.team == players[i].team ) - continue; - - kick( players[i] getentitynumber() ); - } - } - - thread removetestclients(); -#/ -} - -testclient( team ) -{ -/# - self endon( "disconnect" ); - - while ( !isdefined( self.pers["team"] ) ) - wait 0.05; - - if ( level.teambased ) - { - self notify( "menuresponse", game["menu_team"], team ); - wait 0.5; - } - - while ( true ) - { - classes = maps\mp\bots\_bot::bot_build_classes(); - self notify( "menuresponse", "changeclass", random( classes ) ); - - self waittill( "spawned_player" ); - - wait 0.1; - } -#/ -} - -showonespawnpoint( spawn_point, color, notification, height, print ) -{ -/# - if ( !isdefined( height ) || height <= 0 ) - height = get_player_height(); - - if ( !isdefined( print ) ) - print = spawn_point.classname; - - center = spawn_point.origin; - forward = anglestoforward( spawn_point.angles ); - right = anglestoright( spawn_point.angles ); - forward = vectorscale( forward, 16 ); - right = vectorscale( right, 16 ); - a = center + forward - right; - b = center + forward + right; - c = center - forward + right; - d = center - forward - right; - thread lineuntilnotified( a, b, color, 0, notification ); - thread lineuntilnotified( b, c, color, 0, notification ); - thread lineuntilnotified( c, d, color, 0, notification ); - thread lineuntilnotified( d, a, color, 0, notification ); - thread lineuntilnotified( a, a + ( 0, 0, height ), color, 0, notification ); - thread lineuntilnotified( b, b + ( 0, 0, height ), color, 0, notification ); - thread lineuntilnotified( c, c + ( 0, 0, height ), color, 0, notification ); - thread lineuntilnotified( d, d + ( 0, 0, height ), color, 0, notification ); - a += ( 0, 0, height ); - b += ( 0, 0, height ); - c += ( 0, 0, height ); - d += ( 0, 0, height ); - thread lineuntilnotified( a, b, color, 0, notification ); - thread lineuntilnotified( b, c, color, 0, notification ); - thread lineuntilnotified( c, d, color, 0, notification ); - thread lineuntilnotified( d, a, color, 0, notification ); - center += ( 0, 0, height / 2 ); - arrow_forward = anglestoforward( spawn_point.angles ); - arrowhead_forward = anglestoforward( spawn_point.angles ); - arrowhead_right = anglestoright( spawn_point.angles ); - arrow_forward = vectorscale( arrow_forward, 32 ); - arrowhead_forward = vectorscale( arrowhead_forward, 24 ); - arrowhead_right = vectorscale( arrowhead_right, 8 ); - a = center + arrow_forward; - b = center + arrowhead_forward - arrowhead_right; - c = center + arrowhead_forward + arrowhead_right; - thread lineuntilnotified( center, a, color, 0, notification ); - thread lineuntilnotified( a, b, color, 0, notification ); - thread lineuntilnotified( a, c, color, 0, notification ); - thread print3duntilnotified( spawn_point.origin + ( 0, 0, height ), print, color, 1, 1, notification ); - return; -#/ -} - -showspawnpoints() -{ -/# - if ( isdefined( level.spawnpoints ) ) - { - color = ( 1, 1, 1 ); - - for ( spawn_point_index = 0; spawn_point_index < level.spawnpoints.size; spawn_point_index++ ) - showonespawnpoint( level.spawnpoints[spawn_point_index], color, "hide_spawnpoints" ); - } - - for ( i = 0; i < level.dem_spawns.size; i++ ) - { - color = ( 0, 1, 0 ); - showonespawnpoint( level.dem_spawns[i], color, "hide_spawnpoints" ); - } - - return; -#/ -} - -hidespawnpoints() -{ -/# - level notify( "hide_spawnpoints" ); - return; -#/ -} - -showstartspawnpoints() -{ -/# - if ( !level.teambased ) - return; - - if ( !isdefined( level.spawn_start ) ) - return; - - team_colors = []; - team_colors["axis"] = ( 1, 0, 1 ); - team_colors["allies"] = ( 0, 1, 1 ); - team_colors["team3"] = ( 1, 1, 0 ); - team_colors["team4"] = ( 0, 1, 0 ); - team_colors["team5"] = ( 0, 0, 1 ); - team_colors["team6"] = ( 1, 0.7, 0 ); - team_colors["team7"] = ( 0.25, 0.25, 1.0 ); - team_colors["team8"] = ( 0.88, 0, 1 ); - - foreach ( team in level.teams ) - { - color = team_colors[team]; - - foreach ( spawnpoint in level.spawn_start[team] ) - showonespawnpoint( spawnpoint, color, "hide_startspawnpoints" ); - } - - return; -#/ -} - -hidestartspawnpoints() -{ -/# - level notify( "hide_startspawnpoints" ); - return; -#/ -} - -print3duntilnotified( origin, text, color, alpha, scale, notification ) -{ -/# - level endon( notification ); - - for (;;) - { - print3d( origin, text, color, alpha, scale ); - wait 0.05; - } -#/ -} - -lineuntilnotified( start, end, color, depthtest, notification ) -{ -/# - level endon( notification ); - - for (;;) - { - line( start, end, color, depthtest ); - wait 0.05; - } -#/ -} - -engagement_distance_debug_toggle() -{ -/# - level endon( "kill_engage_dist_debug_toggle_watcher" ); - - if ( !isdefined( getdvarint( "debug_engage_dists" ) ) ) - setdvar( "debug_engage_dists", "0" ); - - laststate = getdvarint( "debug_engage_dists" ); - - while ( true ) - { - currentstate = getdvarint( "debug_engage_dists" ); - - if ( dvar_turned_on( currentstate ) && !dvar_turned_on( laststate ) ) - { - weapon_engage_dists_init(); - thread debug_realtime_engage_dist(); - laststate = currentstate; - } - else if ( !dvar_turned_on( currentstate ) && dvar_turned_on( laststate ) ) - { - level notify( "kill_all_engage_dist_debug" ); - laststate = currentstate; - } - - wait 0.3; - } -#/ -} - -dvar_turned_on( val ) -{ -/# - if ( val <= 0 ) - return false; - else - return true; -#/ -} - -engagement_distance_debug_init() -{ -/# - level.debug_xpos = -50; - level.debug_ypos = 250; - level.debug_yinc = 18; - level.debug_fontscale = 1.5; - level.white = ( 1, 1, 1 ); - level.green = ( 0, 1, 0 ); - level.yellow = ( 1, 1, 0 ); - level.red = ( 1, 0, 0 ); - level.realtimeengagedist = newhudelem(); - level.realtimeengagedist.alignx = "left"; - level.realtimeengagedist.fontscale = level.debug_fontscale; - level.realtimeengagedist.x = level.debug_xpos; - level.realtimeengagedist.y = level.debug_ypos; - level.realtimeengagedist.color = level.white; - level.realtimeengagedist settext( "Current Engagement Distance: " ); - xpos = level.debug_xpos + 207; - level.realtimeengagedist_value = newhudelem(); - level.realtimeengagedist_value.alignx = "left"; - level.realtimeengagedist_value.fontscale = level.debug_fontscale; - level.realtimeengagedist_value.x = xpos; - level.realtimeengagedist_value.y = level.debug_ypos; - level.realtimeengagedist_value.color = level.white; - level.realtimeengagedist_value setvalue( 0 ); - xpos += 37; - level.realtimeengagedist_middle = newhudelem(); - level.realtimeengagedist_middle.alignx = "left"; - level.realtimeengagedist_middle.fontscale = level.debug_fontscale; - level.realtimeengagedist_middle.x = xpos; - level.realtimeengagedist_middle.y = level.debug_ypos; - level.realtimeengagedist_middle.color = level.white; - level.realtimeengagedist_middle settext( " units, SHORT/LONG by " ); - xpos += 105; - level.realtimeengagedist_offvalue = newhudelem(); - level.realtimeengagedist_offvalue.alignx = "left"; - level.realtimeengagedist_offvalue.fontscale = level.debug_fontscale; - level.realtimeengagedist_offvalue.x = xpos; - level.realtimeengagedist_offvalue.y = level.debug_ypos; - level.realtimeengagedist_offvalue.color = level.white; - level.realtimeengagedist_offvalue setvalue( 0 ); - hudobjarray = []; - hudobjarray[0] = level.realtimeengagedist; - hudobjarray[1] = level.realtimeengagedist_value; - hudobjarray[2] = level.realtimeengagedist_middle; - hudobjarray[3] = level.realtimeengagedist_offvalue; - return hudobjarray; -#/ -} - -engage_dist_debug_hud_destroy( hudarray, killnotify ) -{ -/# - level waittill( killnotify ); - - for ( i = 0; i < hudarray.size; i++ ) - hudarray[i] destroy(); -#/ -} - -weapon_engage_dists_init() -{ -/# - level.engagedists = []; - genericpistol = spawnstruct(); - genericpistol.engagedistmin = 125; - genericpistol.engagedistoptimal = 225; - genericpistol.engagedistmulligan = 50; - genericpistol.engagedistmax = 400; - shotty = spawnstruct(); - shotty.engagedistmin = 50; - shotty.engagedistoptimal = 200; - shotty.engagedistmulligan = 75; - shotty.engagedistmax = 350; - genericsmg = spawnstruct(); - genericsmg.engagedistmin = 100; - genericsmg.engagedistoptimal = 275; - genericsmg.engagedistmulligan = 100; - genericsmg.engagedistmax = 500; - genericlmg = spawnstruct(); - genericlmg.engagedistmin = 325; - genericlmg.engagedistoptimal = 550; - genericlmg.engagedistmulligan = 150; - genericlmg.engagedistmax = 850; - genericriflesa = spawnstruct(); - genericriflesa.engagedistmin = 325; - genericriflesa.engagedistoptimal = 550; - genericriflesa.engagedistmulligan = 150; - genericriflesa.engagedistmax = 850; - genericriflebolt = spawnstruct(); - genericriflebolt.engagedistmin = 350; - genericriflebolt.engagedistoptimal = 600; - genericriflebolt.engagedistmulligan = 150; - genericriflebolt.engagedistmax = 900; - generichmg = spawnstruct(); - generichmg.engagedistmin = 390; - generichmg.engagedistoptimal = 600; - generichmg.engagedistmulligan = 100; - generichmg.engagedistmax = 900; - genericsniper = spawnstruct(); - genericsniper.engagedistmin = 950; - genericsniper.engagedistoptimal = 1700; - genericsniper.engagedistmulligan = 300; - genericsniper.engagedistmax = 3000; - engage_dists_add( "colt_mp", genericpistol ); - engage_dists_add( "nambu_mp", genericpistol ); - engage_dists_add( "tokarev_mp", genericpistol ); - engage_dists_add( "walther_mp", genericpistol ); - engage_dists_add( "thompson_mp", genericsmg ); - engage_dists_add( "type100_smg_mp", genericsmg ); - engage_dists_add( "ppsh_mp", genericsmg ); - engage_dists_add( "mp40_mp", genericsmg ); - engage_dists_add( "stg44_mp", genericsmg ); - engage_dists_add( "sten_mp", genericsmg ); - engage_dists_add( "sten_silenced_mp", genericsmg ); - engage_dists_add( "shotgun_mp", shotty ); - engage_dists_add( "bar_mp", genericlmg ); - engage_dists_add( "bar_bipod_mp", genericlmg ); - engage_dists_add( "type99_lmg_mp", genericlmg ); - engage_dists_add( "type99_lmg_bipod_mp", genericlmg ); - engage_dists_add( "dp28_mp", genericlmg ); - engage_dists_add( "dp28_bipod_mp", genericlmg ); - engage_dists_add( "fg42_mp", genericlmg ); - engage_dists_add( "fg42_bipod_mp", genericlmg ); - engage_dists_add( "bren_mp", genericlmg ); - engage_dists_add( "bren_bipod_mp", genericlmg ); - engage_dists_add( "m1garand_mp", genericriflesa ); - engage_dists_add( "m1garand_bayonet_mp", genericriflesa ); - engage_dists_add( "m1carbine_mp", genericriflesa ); - engage_dists_add( "m1carbine_bayonet_mp", genericriflesa ); - engage_dists_add( "svt40_mp", genericriflesa ); - engage_dists_add( "gewehr43_mp", genericriflesa ); - engage_dists_add( "springfield_mp", genericriflebolt ); - engage_dists_add( "springfield_bayonet_mp", genericriflebolt ); - engage_dists_add( "type99_rifle_mp", genericriflebolt ); - engage_dists_add( "type99_rifle_bayonet_mp", genericriflebolt ); - engage_dists_add( "mosin_rifle_mp", genericriflebolt ); - engage_dists_add( "mosin_rifle_bayonet_mp", genericriflebolt ); - engage_dists_add( "kar98k_mp", genericriflebolt ); - engage_dists_add( "kar98k_bayonet_mp", genericriflebolt ); - engage_dists_add( "lee_enfield_mp", genericriflebolt ); - engage_dists_add( "lee_enfield_bayonet_mp", genericriflebolt ); - engage_dists_add( "30cal_mp", generichmg ); - engage_dists_add( "30cal_bipod_mp", generichmg ); - engage_dists_add( "mg42_mp", generichmg ); - engage_dists_add( "mg42_bipod_mp", generichmg ); - engage_dists_add( "springfield_scoped_mp", genericsniper ); - engage_dists_add( "type99_rifle_scoped_mp", genericsniper ); - engage_dists_add( "mosin_rifle_scoped_mp", genericsniper ); - engage_dists_add( "kar98k_scoped_mp", genericsniper ); - engage_dists_add( "fg42_scoped_mp", genericsniper ); - engage_dists_add( "lee_enfield_scoped_mp", genericsniper ); - level thread engage_dists_watcher(); -#/ -} - -engage_dists_add( weapontypestr, values ) -{ -/# - level.engagedists[weapontypestr] = values; -#/ -} - -get_engage_dists( weapontypestr ) -{ -/# - if ( isdefined( level.engagedists[weapontypestr] ) ) - return level.engagedists[weapontypestr]; - else - return undefined; -#/ -} - -engage_dists_watcher() -{ -/# - level endon( "kill_all_engage_dist_debug" ); - level endon( "kill_engage_dists_watcher" ); - - while ( true ) - { - player = gethostplayer(); - playerweapon = player getcurrentweapon(); - - if ( !isdefined( player.lastweapon ) ) - player.lastweapon = playerweapon; - else if ( player.lastweapon == playerweapon ) - { - wait 0.05; - continue; - } - - values = get_engage_dists( playerweapon ); - - if ( isdefined( values ) ) - level.weaponengagedistvalues = values; - else - level.weaponengagedistvalues = undefined; - - player.lastweapon = playerweapon; - wait 0.05; - } -#/ -} - -debug_realtime_engage_dist() -{ -/# - level endon( "kill_all_engage_dist_debug" ); - level endon( "kill_realtime_engagement_distance_debug" ); - hudobjarray = engagement_distance_debug_init(); - level thread engage_dist_debug_hud_destroy( hudobjarray, "kill_all_engage_dist_debug" ); - level.debugrtengagedistcolor = level.green; - player = gethostplayer(); - - while ( true ) - { - lasttracepos = ( 0, 0, 0 ); - direction = player getplayerangles(); - direction_vec = anglestoforward( direction ); - eye = player geteye(); - eye = ( eye[0], eye[1], eye[2] + 20 ); - trace = bullettrace( eye, eye + vectorscale( direction_vec, 10000 ), 1, player ); - tracepoint = trace["position"]; - tracenormal = trace["normal"]; - tracedist = int( distance( eye, tracepoint ) ); - - if ( tracepoint != lasttracepos ) - { - lasttracepos = tracepoint; - - if ( !isdefined( level.weaponengagedistvalues ) ) - { - hudobj_changecolor( hudobjarray, level.white ); - hudobjarray engagedist_hud_changetext( "nodata", tracedist ); - } - else - { - engagedistmin = level.weaponengagedistvalues.engagedistmin; - engagedistoptimal = level.weaponengagedistvalues.engagedistoptimal; - engagedistmulligan = level.weaponengagedistvalues.engagedistmulligan; - engagedistmax = level.weaponengagedistvalues.engagedistmax; - - if ( tracedist >= engagedistmin && tracedist <= engagedistmax ) - { - if ( tracedist >= engagedistoptimal - engagedistmulligan && tracedist <= engagedistoptimal + engagedistmulligan ) - { - hudobjarray engagedist_hud_changetext( "optimal", tracedist ); - hudobj_changecolor( hudobjarray, level.green ); - } - else - { - hudobjarray engagedist_hud_changetext( "ok", tracedist ); - hudobj_changecolor( hudobjarray, level.yellow ); - } - } - else if ( tracedist < engagedistmin ) - { - hudobj_changecolor( hudobjarray, level.red ); - hudobjarray engagedist_hud_changetext( "short", tracedist ); - } - else if ( tracedist > engagedistmax ) - { - hudobj_changecolor( hudobjarray, level.red ); - hudobjarray engagedist_hud_changetext( "long", tracedist ); - } - } - } - - thread plot_circle_fortime( 1, 5, 0.05, level.debugrtengagedistcolor, tracepoint, tracenormal ); - thread plot_circle_fortime( 1, 1, 0.05, level.debugrtengagedistcolor, tracepoint, tracenormal ); - wait 0.05; - } -#/ -} - -hudobj_changecolor( hudobjarray, newcolor ) -{ -/# - for ( i = 0; i < hudobjarray.size; i++ ) - { - hudobj = hudobjarray[i]; - - if ( hudobj.color != newcolor ) - { - hudobj.color = newcolor; - level.debugrtengagedistcolor = newcolor; - } - } -#/ -} - -engagedist_hud_changetext( engagedisttype, units ) -{ -/# - if ( !isdefined( level.lastdisttype ) ) - level.lastdisttype = "none"; - - if ( engagedisttype == "optimal" ) - { - self[1] setvalue( units ); - self[2] settext( "units: OPTIMAL!" ); - self[3].alpha = 0; - } - else if ( engagedisttype == "ok" ) - { - self[1] setvalue( units ); - self[2] settext( "units: OK!" ); - self[3].alpha = 0; - } - else if ( engagedisttype == "short" ) - { - amountunder = level.weaponengagedistvalues.engagedistmin - units; - self[1] setvalue( units ); - self[3] setvalue( amountunder ); - self[3].alpha = 1; - - if ( level.lastdisttype != engagedisttype ) - self[2] settext( "units: SHORT by " ); - } - else if ( engagedisttype == "long" ) - { - amountover = units - level.weaponengagedistvalues.engagedistmax; - self[1] setvalue( units ); - self[3] setvalue( amountover ); - self[3].alpha = 1; - - if ( level.lastdisttype != engagedisttype ) - self[2] settext( "units: LONG by " ); - } - else if ( engagedisttype == "nodata" ) - { - self[1] setvalue( units ); - self[2] settext( " units: (NO CURRENT WEAPON VALUES)" ); - self[3].alpha = 0; - } - - level.lastdisttype = engagedisttype; -#/ -} - -plot_circle_fortime( radius1, radius2, time, color, origin, normal ) -{ -/# - if ( !isdefined( color ) ) - color = ( 0, 1, 0 ); - - hangtime = 0.05; - circleres = 6; - hemires = circleres / 2; - circleinc = 360 / circleres; - circleres++; - plotpoints = []; - rad = 0.0; - timer = gettime() + time * 1000; - radius = radius1; - - while ( gettime() < timer ) - { - radius = radius2; - angletoplayer = vectortoangles( normal ); - - for ( i = 0; i < circleres; i++ ) - { - plotpoints[plotpoints.size] = origin + vectorscale( anglestoforward( angletoplayer + ( rad, 90, 0 ) ), radius ); - rad += circleinc; - } - - maps\mp\_utility::plot_points( plotpoints, color[0], color[1], color[2], hangtime ); - plotpoints = []; - wait( hangtime ); - } -#/ -} - -larry_thread() -{ -/# - setdvar( "bot_AllowMovement", "0" ); - setdvar( "bot_PressAttackBtn", "0" ); - setdvar( "bot_PressMeleeBtn", "0" ); - level.larry = spawnstruct(); - player = gethostplayer(); - player thread larry_init( level.larry ); - - level waittill( "kill_larry" ); - - larry_hud_destroy( level.larry ); - - if ( isdefined( level.larry.model ) ) - level.larry.model delete(); - - if ( isdefined( level.larry.ai ) ) - { - for ( i = 0; i < level.larry.ai.size; i++ ) - kick( level.larry.ai[i] getentitynumber() ); - } - - level.larry = undefined; -#/ -} - -larry_init( larry ) -{ -/# - level endon( "kill_larry" ); - larry_hud_init( larry ); - larry.model = spawn( "script_model", ( 0, 0, 0 ) ); - larry.model setmodel( "defaultactor" ); - larry.ai = []; - wait 0.1; - - for (;;) - { - wait 0.05; - - if ( larry.ai.size > 0 ) - { - larry.model hide(); - continue; - } - - direction = self getplayerangles(); - direction_vec = anglestoforward( direction ); - eye = self geteye(); - trace = bullettrace( eye, eye + vectorscale( direction_vec, 8000 ), 0, undefined ); - dist = distance( eye, trace["position"] ); - position = eye + vectorscale( direction_vec, dist - 64 ); - larry.model.origin = position; - larry.model.angles = self.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); - - if ( self usebuttonpressed() ) - { - self larry_ai( larry ); - - while ( self usebuttonpressed() ) - wait 0.05; - } - } -#/ -} - -larry_ai( larry ) -{ -/# - larry.ai[larry.ai.size] = addtestclient(); - i = larry.ai.size - 1; - larry.ai[i].pers["isBot"] = 1; - larry.ai[i] thread testclient( "autoassign" ); - larry.ai[i] thread larry_ai_thread( larry, larry.model.origin, larry.model.angles ); - larry.ai[i] thread larry_ai_damage( larry ); - larry.ai[i] thread larry_ai_health( larry ); -#/ -} - -larry_ai_thread( larry, origin, angles ) -{ -/# - level endon( "kill_larry" ); - - for (;;) - { - self waittill( "spawned_player" ); - - larry.menu[larry.menu_health] setvalue( self.health ); - larry.menu[larry.menu_damage] settext( "" ); - larry.menu[larry.menu_range] settext( "" ); - larry.menu[larry.menu_hitloc] settext( "" ); - larry.menu[larry.menu_weapon] settext( "" ); - larry.menu[larry.menu_perks] settext( "" ); - self setorigin( origin ); - self setplayerangles( angles ); - self clearperks(); - } -#/ -} - -larry_ai_damage( larry ) -{ -/# - level endon( "kill_larry" ); - - for (;;) - { - self waittill( "damage", damage, attacker, dir, point ); - - if ( !isdefined( attacker ) ) - continue; - - player = gethostplayer(); - - if ( !isdefined( player ) ) - continue; - - if ( attacker != player ) - continue; - - eye = player geteye(); - range = int( distance( eye, point ) ); - larry.menu[larry.menu_health] setvalue( self.health ); - larry.menu[larry.menu_damage] setvalue( damage ); - larry.menu[larry.menu_range] setvalue( range ); - - if ( isdefined( self.cac_debug_location ) ) - larry.menu[larry.menu_hitloc] settext( self.cac_debug_location ); - else - larry.menu[larry.menu_hitloc] settext( "" ); - - if ( isdefined( self.cac_debug_weapon ) ) - { - larry.menu[larry.menu_weapon] settext( self.cac_debug_weapon ); - continue; - } - - larry.menu[larry.menu_weapon] settext( "" ); - } -#/ -} - -larry_ai_health( larry ) -{ -/# - level endon( "kill_larry" ); - - for (;;) - { - wait 0.05; - larry.menu[larry.menu_health] setvalue( self.health ); - } -#/ -} - -larry_hud_init( larry ) -{ -/# - x = -45; - y = 275; - menu_name = "larry_menu"; - larry.hud = new_hud( menu_name, undefined, x, y, 1 ); - larry.hud setshader( "white", 135, 65 ); - larry.hud.alignx = "left"; - larry.hud.aligny = "top"; - larry.hud.sort = 10; - larry.hud.alpha = 0.6; - larry.hud.color = vectorscale( ( 0, 0, 1 ), 0.5 ); - larry.menu[0] = new_hud( menu_name, "Larry Health:", x + 5, y + 10, 1 ); - larry.menu[1] = new_hud( menu_name, "Damage:", x + 5, y + 20, 1 ); - larry.menu[2] = new_hud( menu_name, "Range:", x + 5, y + 30, 1 ); - larry.menu[3] = new_hud( menu_name, "Hit Location:", x + 5, y + 40, 1 ); - larry.menu[4] = new_hud( menu_name, "Weapon:", x + 5, y + 50, 1 ); - larry.cleartextmarker = newdebughudelem(); - larry.cleartextmarker.alpha = 0; - larry.cleartextmarker settext( "marker" ); - larry.menu_health = larry.menu.size; - larry.menu_damage = larry.menu.size + 1; - larry.menu_range = larry.menu.size + 2; - larry.menu_hitloc = larry.menu.size + 3; - larry.menu_weapon = larry.menu.size + 4; - larry.menu_perks = larry.menu.size + 5; - x_offset = 70; - larry.menu[larry.menu_health] = new_hud( menu_name, "", x + x_offset, y + 10, 1 ); - larry.menu[larry.menu_damage] = new_hud( menu_name, "", x + x_offset, y + 20, 1 ); - larry.menu[larry.menu_range] = new_hud( menu_name, "", x + x_offset, y + 30, 1 ); - larry.menu[larry.menu_hitloc] = new_hud( menu_name, "", x + x_offset, y + 40, 1 ); - larry.menu[larry.menu_weapon] = new_hud( menu_name, "", x + x_offset, y + 50, 1 ); - larry.menu[larry.menu_perks] = new_hud( menu_name, "", x + x_offset, y + 60, 1 ); -#/ -} - -larry_hud_destroy( larry ) -{ -/# - if ( isdefined( larry.hud ) ) - { - larry.hud destroy(); - - for ( i = 0; i < larry.menu.size; i++ ) - larry.menu[i] destroy(); - - larry.cleartextmarker destroy(); - } -#/ -} - -new_hud( hud_name, msg, x, y, scale ) -{ -/# - if ( !isdefined( level.hud_array ) ) - level.hud_array = []; - - if ( !isdefined( level.hud_array[hud_name] ) ) - level.hud_array[hud_name] = []; - - hud = set_hudelem( msg, x, y, scale ); - level.hud_array[hud_name][level.hud_array[hud_name].size] = hud; - return hud; -#/ -} - -set_hudelem( text, x, y, scale, alpha, sort, debug_hudelem ) -{ -/# - if ( !isdefined( alpha ) ) - alpha = 1; - - if ( !isdefined( scale ) ) - scale = 1; - - if ( !isdefined( sort ) ) - sort = 20; - - hud = newdebughudelem(); - hud.debug_hudelem = 1; - hud.location = 0; - hud.alignx = "left"; - hud.aligny = "middle"; - hud.foreground = 1; - hud.fontscale = scale; - hud.sort = sort; - hud.alpha = alpha; - hud.x = x; - hud.y = y; - hud.og_scale = scale; - - if ( isdefined( text ) ) - hud settext( text ); - - return hud; -#/ -} - -watch_botsdvars() -{ -/# - hasplayerweaponprev = getdvarint( "scr_botsHasPlayerWeapon" ); - grenadesonlyprev = getdvarint( "scr_botsGrenadesOnly" ); - secondarygrenadesonlyprev = getdvarint( "scr_botsSpecialGrenadesOnly" ); - - while ( true ) - { - if ( hasplayerweaponprev != getdvarint( "scr_botsHasPlayerWeapon" ) ) - { - hasplayerweaponprev = getdvarint( "scr_botsHasPlayerWeapon" ); - - if ( hasplayerweaponprev ) - iprintlnbold( "LARRY has player weapon: ON" ); - else - iprintlnbold( "LARRY has player weapon: OFF" ); - } - - if ( grenadesonlyprev != getdvarint( "scr_botsGrenadesOnly" ) ) - { - grenadesonlyprev = getdvarint( "scr_botsGrenadesOnly" ); - - if ( grenadesonlyprev ) - iprintlnbold( "LARRY using grenades only: ON" ); - else - iprintlnbold( "LARRY using grenades only: OFF" ); - } - - if ( secondarygrenadesonlyprev != getdvarint( "scr_botsSpecialGrenadesOnly" ) ) - { - secondarygrenadesonlyprev = getdvarint( "scr_botsSpecialGrenadesOnly" ); - - if ( secondarygrenadesonlyprev ) - iprintlnbold( "LARRY using secondary grenades only: ON" ); - else - iprintlnbold( "LARRY using secondary grenades only: OFF" ); - } - - wait 1.0; - } -#/ -} - -getattachmentchangemodifierbutton() -{ -/# - return "BUTTON_X"; -#/ -} - -watchattachmentchange() -{ -/# - self endon( "disconnect" ); - clientnum = self getentitynumber(); - - if ( clientnum != 0 ) - return; - - dpad_left = 0; - dpad_right = 0; - dpad_up = 0; - dpad_down = 0; - lstick_down = 0; - dpad_modifier_button = getattachmentchangemodifierbutton(); - - for (;;) - { - if ( self buttonpressed( dpad_modifier_button ) ) - { - if ( !dpad_left && self buttonpressed( "DPAD_LEFT" ) ) - { - self giveweaponnextattachment( "muzzle" ); - dpad_left = 1; - self thread print_weapon_name(); - } - - if ( !dpad_right && self buttonpressed( "DPAD_RIGHT" ) ) - { - self giveweaponnextattachment( "trigger" ); - dpad_right = 1; - self thread print_weapon_name(); - } - - if ( !dpad_up && self buttonpressed( "DPAD_UP" ) ) - { - self giveweaponnextattachment( "top" ); - dpad_up = 1; - self thread print_weapon_name(); - } - - if ( !dpad_down && self buttonpressed( "DPAD_DOWN" ) ) - { - self giveweaponnextattachment( "bottom" ); - dpad_down = 1; - self thread print_weapon_name(); - } - - if ( !lstick_down && self buttonpressed( "BUTTON_LSTICK" ) ) - { - self giveweaponnextattachment( "gunperk" ); - lstick_down = 1; - self thread print_weapon_name(); - } - } - - if ( !self buttonpressed( "DPAD_LEFT" ) ) - dpad_left = 0; - - if ( !self buttonpressed( "DPAD_RIGHT" ) ) - dpad_right = 0; - - if ( !self buttonpressed( "DPAD_UP" ) ) - dpad_up = 0; - - if ( !self buttonpressed( "DPAD_DOWN" ) ) - dpad_down = 0; - - if ( !self buttonpressed( "BUTTON_LSTICK" ) ) - lstick_down = 0; - - wait 0.05; - } -#/ -} - -print_weapon_name() -{ -/# - self notify( "print_weapon_name" ); - self endon( "print_weapon_name" ); - wait 0.2; - - if ( self isswitchingweapons() ) - { - self waittill( "weapon_change_complete", weapon_name ); - - fail_safe = 0; - - while ( weapon_name == "none" ) - { - self waittill( "weapon_change_complete", weapon_name ); - - wait 0.05; - fail_safe++; - - if ( fail_safe > 120 ) - break; - } - } - else - weapon_name = self getcurrentweapon(); - - printweaponname = getdvarintdefault( "scr_print_weapon_name", 1 ); - - if ( printweaponname ) - iprintlnbold( weapon_name ); -#/ -} - -set_equipment_list() -{ -/# - if ( isdefined( level.dev_equipment ) ) - return; - - level.dev_equipment = []; - level.dev_equipment[1] = "acoustic_sensor_mp"; - level.dev_equipment[2] = "camera_spike_mp"; - level.dev_equipment[3] = "claymore_mp"; - level.dev_equipment[4] = "satchel_charge_mp"; - level.dev_equipment[5] = "scrambler_mp"; - level.dev_equipment[6] = "tactical_insertion_mp"; - level.dev_equipment[7] = "bouncingbetty_mp"; - level.dev_equipment[8] = "trophy_system_mp"; - level.dev_equipment[9] = "pda_hack_mp"; -#/ -} - -set_grenade_list() -{ -/# - if ( isdefined( level.dev_grenade ) ) - return; - - level.dev_grenade = []; - level.dev_grenade[1] = "frag_grenade_mp"; - level.dev_grenade[2] = "sticky_grenade_mp"; - level.dev_grenade[3] = "hatchet_mp"; - level.dev_grenade[4] = "willy_pete_mp"; - level.dev_grenade[5] = "proximity_grenade_mp"; - level.dev_grenade[6] = "flash_grenade_mp"; - level.dev_grenade[7] = "concussion_grenade_mp"; - level.dev_grenade[8] = "nightingale_mp"; - level.dev_grenade[9] = "emp_grenade_mp"; - level.dev_grenade[10] = "sensor_grenade_mp"; -#/ -} - -take_all_grenades_and_equipment( player ) -{ -/# - for ( i = 0; i < level.dev_equipment.size; i++ ) - player takeweapon( level.dev_equipment[i + 1] ); - - for ( i = 0; i < level.dev_grenade.size; i++ ) - player takeweapon( level.dev_grenade[i + 1] ); -#/ -} - -equipment_dev_gui() -{ -/# - set_equipment_list(); - set_grenade_list(); - setdvar( "scr_give_equipment", "" ); - - while ( true ) - { - wait 0.5; - devgui_int = getdvarint( "scr_give_equipment" ); - - if ( devgui_int != 0 ) - { - for ( i = 0; i < level.players.size; i++ ) - { - take_all_grenades_and_equipment( level.players[i] ); - level.players[i] giveweapon( level.dev_equipment[devgui_int] ); - } - - setdvar( "scr_give_equipment", "0" ); - } - } -#/ -} - -grenade_dev_gui() -{ -/# - set_equipment_list(); - set_grenade_list(); - setdvar( "scr_give_grenade", "" ); - - while ( true ) - { - wait 0.5; - devgui_int = getdvarint( "scr_give_grenade" ); - - if ( devgui_int != 0 ) - { - for ( i = 0; i < level.players.size; i++ ) - { - take_all_grenades_and_equipment( level.players[i] ); - level.players[i] giveweapon( level.dev_grenade[devgui_int] ); - } - - setdvar( "scr_give_grenade", "0" ); - } - } -#/ -} - -force_grenade_throw( weapon ) -{ -/# - setdvar( "bot_AllowMovement", "0" ); - setdvar( "bot_PressAttackBtn", "0" ); - setdvar( "bot_PressMeleeBtn", "0" ); - setdvar( "scr_botsAllowKillstreaks", "0" ); - host = gethostplayer(); - - if ( !isdefined( host.team ) ) - { - iprintln( "Unable to determine host player team" ); - return; - } - - bot = getormakebot( getotherteam( host.team ) ); - - if ( !isdefined( bot ) ) - { - iprintln( "Could not add test client" ); - return; - } - - angles = host getplayerangles(); - angles = ( 0, angles[1], 0 ); - dir = anglestoforward( angles ); - dir = vectornormalize( dir ); - origin = host geteye() + vectorscale( dir, 256 ); - velocity = vectorscale( dir, -1024 ); - grenade = bot magicgrenade( weapon, origin, velocity ); - grenade setteam( bot.team ); - grenade setowner( bot ); -#/ -} - -bot_dpad_think() -{ -/# - level notify( "bot_dpad_stop" ); - level endon( "bot_dpad_stop" ); - level endon( "bot_dpad_terminate" ); - - if ( !isdefined( level.bot_index ) ) - level.bot_index = 0; - - host = gethostplayer(); - - while ( !isdefined( host ) ) - { - wait 0.5; - host = gethostplayer(); - level.bot_index = 0; - } - - dpad_left = 0; - dpad_right = 0; - - for (;;) - { - wait 0.05; - host setactionslot( 3, "" ); - host setactionslot( 4, "" ); - players = get_players(); - max = players.size; - - if ( !dpad_left && host buttonpressed( "DPAD_LEFT" ) ) - { - level.bot_index--; - - if ( level.bot_index < 0 ) - level.bot_index = max - 1; - - if ( !players[level.bot_index] is_bot() ) - continue; - - dpad_left = 1; - } - else if ( !host buttonpressed( "DPAD_LEFT" ) ) - dpad_left = 0; - - if ( !dpad_right && host buttonpressed( "DPAD_RIGHT" ) ) - { - level.bot_index++; - - if ( level.bot_index >= max ) - level.bot_index = 0; - - if ( !players[level.bot_index] is_bot() ) - continue; - - dpad_right = 1; - } - else if ( !host buttonpressed( "DPAD_RIGHT" ) ) - dpad_right = 0; - - level notify( "bot_index_changed" ); - } -#/ -} - -bot_overlay_think() -{ -/# - level endon( "bot_overlay_stop" ); - level thread bot_dpad_think(); - iprintln( "Previous Bot bound to D-Pad Left" ); - iprintln( "Next Bot bound to D-Pad Right" ); - - for (;;) - { - if ( getdvarint( "bot_Debug" ) != level.bot_index ) - setdvar( "bot_Debug", level.bot_index ); - - level waittill( "bot_index_changed" ); - } -#/ -} - -bot_threat_think() -{ -/# - level endon( "bot_threat_stop" ); - level thread bot_dpad_think(); - iprintln( "Previous Bot bound to D-Pad Left" ); - iprintln( "Next Bot bound to D-Pad Right" ); - - for (;;) - { - if ( getdvarint( "bot_DebugThreat" ) != level.bot_index ) - setdvar( "bot_DebugThreat", level.bot_index ); - - level waittill( "bot_index_changed" ); - } -#/ -} - -bot_path_think() -{ -/# - level endon( "bot_path_stop" ); - level thread bot_dpad_think(); - iprintln( "Previous Bot bound to D-Pad Left" ); - iprintln( "Next Bot bound to D-Pad Right" ); - - for (;;) - { - if ( getdvarint( "bot_DebugPaths" ) != level.bot_index ) - setdvar( "bot_DebugPaths", level.bot_index ); - - level waittill( "bot_index_changed" ); - } -#/ -} - -bot_overlay_stop() -{ -/# - level notify( "bot_overlay_stop" ); - setdvar( "bot_Debug", "-1" ); -#/ -} - -bot_path_stop() -{ -/# - level notify( "bot_path_stop" ); - setdvar( "bot_DebugPaths", "-1" ); -#/ -} - -bot_threat_stop() -{ -/# - level notify( "bot_threat_stop" ); - setdvar( "bot_DebugThreat", "-1" ); -#/ -} - -devstraferunpathdebugdraw() -{ -/# - white = ( 1, 1, 1 ); - red = ( 1, 0, 0 ); - green = ( 0, 1, 0 ); - blue = ( 0, 0, 1 ); - violet = ( 0.4, 0, 0.6 ); - maxdrawtime = 10; - drawtime = maxdrawtime; - origintextoffset = vectorscale( ( 0, 0, -1 ), 50.0 ); - endonmsg = "devStopStrafeRunPathDebugDraw"; - - while ( true ) - { - if ( getdvarint( "scr_devStrafeRunPathDebugDraw" ) > 0 ) - { - nodes = []; - end = 0; - node = getvehiclenode( "warthog_start", "targetname" ); - - if ( !isdefined( node ) ) - { - println( "No strafe run path found" ); - setdvar( "scr_devStrafeRunPathDebugDraw", "0" ); - continue; - } - - while ( isdefined( node.target ) ) - { - new_node = getvehiclenode( node.target, "targetname" ); - - foreach ( n in nodes ) - { - if ( n == new_node ) - end = 1; - } - - textscale = 30; - - if ( drawtime == maxdrawtime ) - node thread drawpathsegment( new_node, violet, violet, 1, textscale, origintextoffset, drawtime, endonmsg ); - - if ( isdefined( node.script_noteworthy ) ) - { - textscale = 10; - - switch ( node.script_noteworthy ) - { - case "strafe_start": - textcolor = green; - textalpha = 1; - break; - case "strafe_stop": - textcolor = red; - textalpha = 1; - break; - case "strafe_leave": - textcolor = white; - textalpha = 1; - break; - } - - switch ( node.script_noteworthy ) - { - case "strafe_stop": - case "strafe_start": - case "strafe_leave": - sides = 10; - radius = 100; - - if ( drawtime == maxdrawtime ) - sphere( node.origin, radius, textcolor, textalpha, 1, sides, drawtime * 1000 ); - - node draworiginlines(); - node drawnoteworthytext( textcolor, textalpha, textscale ); - break; - } - } - - if ( end ) - break; - - nodes[nodes.size] = new_node; - node = new_node; - } - - drawtime -= 0.05; - - if ( drawtime < 0 ) - drawtime = maxdrawtime; - - wait 0.05; - } - else - wait 1; - } -#/ -} - -devhelipathdebugdraw() -{ -/# - white = ( 1, 1, 1 ); - red = ( 1, 0, 0 ); - green = ( 0, 1, 0 ); - blue = ( 0, 0, 1 ); - textcolor = white; - textalpha = 1; - textscale = 1; - maxdrawtime = 10; - drawtime = maxdrawtime; - origintextoffset = vectorscale( ( 0, 0, -1 ), 50.0 ); - endonmsg = "devStopHeliPathsDebugDraw"; - - while ( true ) - { - if ( getdvarint( "scr_devHeliPathsDebugDraw" ) > 0 ) - { - script_origins = getentarray( "script_origin", "classname" ); - - foreach ( ent in script_origins ) - { - if ( isdefined( ent.targetname ) ) - { - switch ( ent.targetname ) - { - case "heli_start": - textcolor = blue; - textalpha = 1; - textscale = 3; - break; - case "heli_loop_start": - textcolor = green; - textalpha = 1; - textscale = 3; - break; - case "heli_attack_area": - textcolor = red; - textalpha = 1; - textscale = 3; - break; - case "heli_leave": - textcolor = white; - textalpha = 1; - textscale = 3; - break; - } - - switch ( ent.targetname ) - { - case "heli_start": - case "heli_loop_start": - case "heli_leave": - case "heli_attack_area": - if ( drawtime == maxdrawtime ) - ent thread drawpath( textcolor, white, textalpha, textscale, origintextoffset, drawtime, endonmsg ); - - ent draworiginlines(); - ent drawtargetnametext( textcolor, textalpha, textscale ); - ent draworigintext( textcolor, textalpha, textscale, origintextoffset ); - continue; - } - } - } - - drawtime -= 0.05; - - if ( drawtime < 0 ) - drawtime = maxdrawtime; - } - - if ( getdvarint( "scr_devHeliPathsDebugDraw" ) == 0 ) - { - level notify( endonmsg ); - drawtime = maxdrawtime; - wait 1; - } - - wait 0.05; - } -#/ -} - -draworiginlines() -{ -/# - red = ( 1, 0, 0 ); - green = ( 0, 1, 0 ); - blue = ( 0, 0, 1 ); - line( self.origin, self.origin + anglestoforward( self.angles ) * 10, red ); - line( self.origin, self.origin + anglestoright( self.angles ) * 10, green ); - line( self.origin, self.origin + anglestoup( self.angles ) * 10, blue ); -#/ -} - -drawtargetnametext( textcolor, textalpha, textscale, textoffset ) -{ -/# - if ( !isdefined( textoffset ) ) - textoffset = ( 0, 0, 0 ); - - print3d( self.origin + textoffset, self.targetname, textcolor, textalpha, textscale ); -#/ -} - -drawnoteworthytext( textcolor, textalpha, textscale, textoffset ) -{ -/# - if ( !isdefined( textoffset ) ) - textoffset = ( 0, 0, 0 ); - - print3d( self.origin + textoffset, self.script_noteworthy, textcolor, textalpha, textscale ); -#/ -} - -draworigintext( textcolor, textalpha, textscale, textoffset ) -{ -/# - if ( !isdefined( textoffset ) ) - textoffset = ( 0, 0, 0 ); - - originstring = "(" + self.origin[0] + ", " + self.origin[1] + ", " + self.origin[2] + ")"; - print3d( self.origin + textoffset, originstring, textcolor, textalpha, textscale ); -#/ -} - -drawspeedacceltext( textcolor, textalpha, textscale, textoffset ) -{ -/# - if ( isdefined( self.script_airspeed ) ) - print3d( self.origin + ( 0, 0, textoffset[2] * 2 ), "script_airspeed:" + self.script_airspeed, textcolor, textalpha, textscale ); - - if ( isdefined( self.script_accel ) ) - print3d( self.origin + ( 0, 0, textoffset[2] * 3 ), "script_accel:" + self.script_accel, textcolor, textalpha, textscale ); -#/ -} - -drawpath( linecolor, textcolor, textalpha, textscale, textoffset, drawtime, endonmsg ) -{ -/# - level endon( endonmsg ); - ent = self; - entfirsttarget = ent.targetname; - - while ( isdefined( ent.target ) ) - { - enttarget = getent( ent.target, "targetname" ); - ent thread drawpathsegment( enttarget, linecolor, textcolor, textalpha, textscale, textoffset, drawtime, endonmsg ); - - if ( ent.targetname == "heli_loop_start" ) - entfirsttarget = ent.target; - else if ( ent.target == entfirsttarget ) - break; - - ent = enttarget; - wait 0.05; - } -#/ -} - -drawpathsegment( enttarget, linecolor, textcolor, textalpha, textscale, textoffset, drawtime, endonmsg ) -{ -/# - level endon( endonmsg ); - - while ( drawtime > 0 ) - { - if ( isdefined( self.targetname ) && self.targetname == "warthog_start" ) - print3d( self.origin + textoffset, self.targetname, textcolor, textalpha, textscale ); - - line( self.origin, enttarget.origin, linecolor ); - self drawspeedacceltext( textcolor, textalpha, textscale, textoffset ); - drawtime -= 0.05; - wait 0.05; - } -#/ -} - -get_lookat_origin( player ) -{ -/# - angles = player getplayerangles(); - forward = anglestoforward( angles ); - dir = vectorscale( forward, 8000 ); - eye = player geteye(); - trace = bullettrace( eye, eye + dir, 0, undefined ); - return trace["position"]; -#/ -} - -draw_pathnode( node, color ) -{ -/# - if ( !isdefined( color ) ) - color = ( 1, 0, 1 ); - - box( node.origin, vectorscale( ( -1, -1, 0 ), 16.0 ), vectorscale( ( 1, 1, 1 ), 16.0 ), 0, color, 1, 0, 1 ); -#/ -} - -draw_pathnode_think( node, color ) -{ -/# - level endon( "draw_pathnode_stop" ); - - for (;;) - { - draw_pathnode( node, color ); - wait 0.05; - } -#/ -} - -draw_pathnodes_stop() -{ -/# - wait 5; - level notify( "draw_pathnode_stop" ); -#/ -} - -node_get( player ) -{ -/# - for (;;) - { - wait 0.05; - origin = get_lookat_origin( player ); - node = getnearestnode( origin ); - - if ( !isdefined( node ) ) - continue; - - if ( player buttonpressed( "BUTTON_A" ) ) - return node; - else if ( player buttonpressed( "BUTTON_B" ) ) - return undefined; - - if ( node.type == "Path" ) - { - draw_pathnode( node, ( 1, 0, 1 ) ); - continue; - } - - draw_pathnode( node, ( 0.85, 0.85, 0.1 ) ); - } -#/ -} - -dev_get_node_pair() -{ -/# - player = gethostplayer(); - start = undefined; - - while ( !isdefined( start ) ) - { - start = node_get( player ); - - if ( player buttonpressed( "BUTTON_B" ) ) - { - level notify( "draw_pathnode_stop" ); - return undefined; - } - } - - level thread draw_pathnode_think( start, ( 0, 1, 0 ) ); - - while ( player buttonpressed( "BUTTON_A" ) ) - wait 0.05; - - end = undefined; - - while ( !isdefined( end ) ) - { - end = node_get( player ); - - if ( player buttonpressed( "BUTTON_B" ) ) - { - level notify( "draw_pathnode_stop" ); - return undefined; - } - } - - level thread draw_pathnode_think( end, ( 0, 1, 0 ) ); - level thread draw_pathnodes_stop(); - array = []; - array[0] = start; - array[1] = end; - return array; -#/ -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_gameobjects.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_gameobjects.gsc deleted file mode 100644 index a3c83f3..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_gameobjects.gsc +++ /dev/null @@ -1,2577 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -main( allowed ) -{ - level.vehiclesenabled = getgametypesetting( "vehiclesEnabled" ); - level.vehiclestimed = getgametypesetting( "vehiclesTimed" ); - level.objectivepingdelay = getgametypesetting( "objectivePingTime" ); - level.nonteambasedteam = "allies"; -/# - if ( level.script == "mp_vehicle_test" ) - level.vehiclesenabled = 1; -#/ - - if ( level.vehiclesenabled ) - { - allowed[allowed.size] = "vehicle"; - filter_script_vehicles_from_vehicle_descriptors( allowed ); - } - - entities = getentarray(); - - for ( entity_index = entities.size - 1; entity_index >= 0; entity_index-- ) - { - entity = entities[entity_index]; - - if ( !entity_is_allowed( entity, allowed ) ) - entity delete(); - } - - return; -} - -entity_is_allowed( entity, allowed_game_modes ) -{ - if ( isdefined( level.createfx_enabled ) && level.createfx_enabled ) - return 1; - - allowed = 1; - - if ( isdefined( entity.script_gameobjectname ) && entity.script_gameobjectname != "[all_modes]" ) - { - allowed = 0; - gameobjectnames = strtok( entity.script_gameobjectname, " " ); - - for ( i = 0; i < allowed_game_modes.size && !allowed; i++ ) - { - for ( j = 0; j < gameobjectnames.size && !allowed; j++ ) - allowed = gameobjectnames[j] == allowed_game_modes[i]; - } - } - - return allowed; -} - -filter_script_vehicles_from_vehicle_descriptors( allowed_game_modes ) -{ - vehicle_descriptors = getentarray( "vehicle_descriptor", "targetname" ); - script_vehicles = getentarray( "script_vehicle", "classname" ); - vehicles_to_remove = []; - - for ( descriptor_index = 0; descriptor_index < vehicle_descriptors.size; descriptor_index++ ) - { - descriptor = vehicle_descriptors[descriptor_index]; - closest_distance_sq = 1e+12; - closest_vehicle = undefined; - - for ( vehicle_index = 0; vehicle_index < script_vehicles.size; vehicle_index++ ) - { - vehicle = script_vehicles[vehicle_index]; - dsquared = distancesquared( vehicle getorigin(), descriptor getorigin() ); - - if ( dsquared < closest_distance_sq ) - { - closest_distance_sq = dsquared; - closest_vehicle = vehicle; - } - } - - if ( isdefined( closest_vehicle ) ) - { - if ( !entity_is_allowed( descriptor, allowed_game_modes ) ) - vehicles_to_remove[vehicles_to_remove.size] = closest_vehicle; - } - } - - for ( vehicle_index = 0; vehicle_index < vehicles_to_remove.size; vehicle_index++ ) - vehicles_to_remove[vehicle_index] delete(); - - return; -} - -init() -{ - level.numgametypereservedobjectives = 0; - level.releasedobjectives = []; - - if ( !sessionmodeiszombiesgame() ) - { - precacheitem( "briefcase_bomb_mp" ); - precacheitem( "briefcase_bomb_defuse_mp" ); - } - - level thread onplayerconnect(); -} - -onplayerconnect() -{ - level endon( "game_ended" ); - - for (;;) - { - level waittill( "connecting", player ); - - player thread onplayerspawned(); - player thread ondisconnect(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - level endon( "game_ended" ); - - for (;;) - { - self waittill( "spawned_player" ); - - self thread ondeath(); - self.touchtriggers = []; - self.carryobject = undefined; - self.claimtrigger = undefined; - self.canpickupobject = 1; - self.disabledweapon = 0; - self.killedinuse = undefined; - } -} - -ondeath() -{ - level endon( "game_ended" ); - - self waittill( "death" ); - - if ( isdefined( self.carryobject ) ) - self.carryobject thread setdropped(); -} - -ondisconnect() -{ - level endon( "game_ended" ); - - self waittill( "disconnect" ); - - if ( isdefined( self.carryobject ) ) - self.carryobject thread setdropped(); -} - -createcarryobject( ownerteam, trigger, visuals, offset, objectivename ) -{ - carryobject = spawnstruct(); - carryobject.type = "carryObject"; - carryobject.curorigin = trigger.origin; - carryobject.ownerteam = ownerteam; - carryobject.entnum = trigger getentitynumber(); - - if ( issubstr( trigger.classname, "use" ) ) - carryobject.triggertype = "use"; - else - carryobject.triggertype = "proximity"; - - trigger.baseorigin = trigger.origin; - carryobject.trigger = trigger; - carryobject.useweapon = undefined; - - if ( !isdefined( offset ) ) - offset = ( 0, 0, 0 ); - - carryobject.offset3d = offset; - carryobject.newstyle = 0; - - if ( isdefined( objectivename ) ) - carryobject.newstyle = 1; - else - objectivename = &""; - - for ( index = 0; index < visuals.size; index++ ) - { - visuals[index].baseorigin = visuals[index].origin; - visuals[index].baseangles = visuals[index].angles; - } - - carryobject.visuals = visuals; - carryobject.compassicons = []; - carryobject.objid = []; - - if ( !carryobject.newstyle ) - { - foreach ( team in level.teams ) - carryobject.objid[team] = getnextobjid(); - } - - carryobject.objidpingfriendly = 0; - carryobject.objidpingenemy = 0; - level.objidstart += 2; - - if ( !carryobject.newstyle ) - { - if ( level.teambased ) - { - foreach ( team in level.teams ) - { - objective_add( carryobject.objid[team], "invisible", carryobject.curorigin ); - objective_team( carryobject.objid[team], team ); - carryobject.objpoints[team] = maps\mp\gametypes\_objpoints::createteamobjpoint( "objpoint_" + team + "_" + carryobject.entnum, carryobject.curorigin + offset, team, undefined ); - carryobject.objpoints[team].alpha = 0; - } - } - else - { - objective_add( carryobject.objid[level.nonteambasedteam], "invisible", carryobject.curorigin ); - carryobject.objpoints[level.nonteambasedteam] = maps\mp\gametypes\_objpoints::createteamobjpoint( "objpoint_" + level.nonteambasedteam + "_" + carryobject.entnum, carryobject.curorigin + offset, "all", undefined ); - carryobject.objpoints[level.nonteambasedteam].alpha = 0; - } - } - - carryobject.objectiveid = getnextobjid(); - objective_add( carryobject.objectiveid, "invisible", carryobject.curorigin, objectivename ); - carryobject.carrier = undefined; - carryobject.isresetting = 0; - carryobject.interactteam = "none"; - carryobject.allowweapons = 0; - carryobject.visiblecarriermodel = undefined; - carryobject.worldicons = []; - carryobject.carriervisible = 0; - carryobject.visibleteam = "none"; - carryobject.worldiswaypoint = []; - carryobject.carryicon = undefined; - carryobject.ondrop = undefined; - carryobject.onpickup = undefined; - carryobject.onreset = undefined; - - if ( carryobject.triggertype == "use" ) - carryobject thread carryobjectusethink(); - else - { - carryobject.numtouching["neutral"] = 0; - carryobject.numtouching["none"] = 0; - carryobject.touchlist["neutral"] = []; - carryobject.touchlist["none"] = []; - - foreach ( team in level.teams ) - { - carryobject.numtouching[team] = 0; - carryobject.touchlist[team] = []; - } - - carryobject.curprogress = 0; - carryobject.usetime = 0; - carryobject.userate = 0; - carryobject.claimteam = "none"; - carryobject.claimplayer = undefined; - carryobject.lastclaimteam = "none"; - carryobject.lastclaimtime = 0; - carryobject.claimgraceperiod = 0; - carryobject.mustmaintainclaim = 0; - carryobject.cancontestclaim = 0; - carryobject.decayprogress = 0; - carryobject.teamusetimes = []; - carryobject.teamusetexts = []; - carryobject.onuse = ::setpickedup; - carryobject thread useobjectproxthink(); - } - - carryobject thread updatecarryobjectorigin(); - carryobject thread updatecarryobjectobjectiveorigin(); - return carryobject; -} - -carryobjectusethink() -{ - level endon( "game_ended" ); - self.trigger endon( "destroyed" ); - - while ( true ) - { - self.trigger waittill( "trigger", player ); - - if ( self.isresetting ) - continue; - - if ( !isalive( player ) ) - continue; - - if ( isdefined( player.laststand ) && player.laststand ) - continue; - - if ( !self caninteractwith( player ) ) - continue; - - if ( !player.canpickupobject ) - continue; - - if ( player.throwinggrenade ) - continue; - - if ( isdefined( self.carrier ) ) - continue; - - if ( player isinvehicle() ) - continue; - - if ( player isweaponviewonlylinked() ) - continue; - - if ( !player istouching( self.trigger ) ) - continue; - - self setpickedup( player ); - } -} - -carryobjectproxthink() -{ - level endon( "game_ended" ); - self.trigger endon( "destroyed" ); - - while ( true ) - { - self.trigger waittill( "trigger", player ); - - if ( self.isresetting ) - continue; - - if ( !isalive( player ) ) - continue; - - if ( isdefined( player.laststand ) && player.laststand ) - continue; - - if ( !self caninteractwith( player ) ) - continue; - - if ( !player.canpickupobject ) - continue; - - if ( player.throwinggrenade ) - continue; - - if ( isdefined( self.carrier ) ) - continue; - - if ( player isinvehicle() ) - continue; - - if ( player isweaponviewonlylinked() ) - continue; - - if ( !player istouching( self.trigger ) ) - continue; - - self setpickedup( player ); - } -} - -pickupobjectdelay( origin ) -{ - level endon( "game_ended" ); - self endon( "death" ); - self endon( "disconnect" ); - self.canpickupobject = 0; - - for (;;) - { - if ( distancesquared( self.origin, origin ) > 4096 ) - break; - - wait 0.2; - } - - self.canpickupobject = 1; -} - -setpickedup( player ) -{ - if ( !isalive( player ) ) - return; - - if ( isdefined( player.carryobject ) ) - { - if ( is_true( player.carryobject.swappable ) ) - player.carryobject thread setdropped(); - else - { - if ( isdefined( self.onpickupfailed ) ) - self [[ self.onpickupfailed ]]( player ); - - return; - } - } - - player giveobject( self ); - self setcarrier( player ); - - for ( index = 0; index < self.visuals.size; index++ ) - self.visuals[index] thread hideobject(); - - self.trigger.origin += vectorscale( ( 0, 0, 1 ), 10000.0 ); - self notify( "pickup_object" ); - - if ( isdefined( self.onpickup ) ) - self [[ self.onpickup ]]( player ); - - self updatecompassicons(); - self updateworldicons(); - self updateobjective(); -} - -hideobject() -{ - radius = 32; - origin = self.origin; - grenades = getentarray( "grenade", "classname" ); - radiussq = radius * radius; - linkedgrenades = []; - linkedgrenadesindex = 0; - self hide(); - - for ( i = 0; i < grenades.size; i++ ) - { - if ( distancesquared( origin, grenades[i].origin ) < radiussq ) - { - if ( grenades[i] islinkedto( self ) ) - { - linkedgrenades[linkedgrenadesindex] = grenades[i]; - linkedgrenades[linkedgrenadesindex] unlink(); - linkedgrenadesindex++; - } - } - } - - self.origin += vectorscale( ( 0, 0, 1 ), 10000.0 ); - waittillframeend; - - for ( i = 0; i < linkedgrenadesindex; i++ ) - linkedgrenades[i] launch( vectorscale( ( 1, 1, 1 ), 5.0 ) ); -} - -updatecarryobjectorigin() -{ - level endon( "game_ended" ); - self.trigger endon( "destroyed" ); - - if ( self.newstyle ) - return; - - objpingdelay = level.objectivepingdelay; - - for (;;) - { - if ( isdefined( self.carrier ) && level.teambased ) - { - self.curorigin = self.carrier.origin + vectorscale( ( 0, 0, 1 ), 75.0 ); - - foreach ( team in level.teams ) - self.objpoints[team] maps\mp\gametypes\_objpoints::updateorigin( self.curorigin ); - - if ( ( self.visibleteam == "friendly" || self.visibleteam == "any" ) && self.objidpingfriendly ) - { - foreach ( team in level.teams ) - { - if ( self isfriendlyteam( team ) ) - { - if ( self.objpoints[team].isshown ) - { - self.objpoints[team].alpha = self.objpoints[team].basealpha; - self.objpoints[team] fadeovertime( objpingdelay + 1.0 ); - self.objpoints[team].alpha = 0; - } - - objective_position( self.objid[team], self.curorigin ); - } - } - } - - if ( ( self.visibleteam == "enemy" || self.visibleteam == "any" ) && self.objidpingenemy ) - { - if ( !self isfriendlyteam( team ) ) - { - if ( self.objpoints[team].isshown ) - { - self.objpoints[team].alpha = self.objpoints[team].basealpha; - self.objpoints[team] fadeovertime( objpingdelay + 1.0 ); - self.objpoints[team].alpha = 0; - } - - objective_position( self.objid[team], self.curorigin ); - } - } - - self wait_endon( objpingdelay, "dropped", "reset" ); - continue; - } - - if ( isdefined( self.carrier ) ) - { - self.curorigin = self.carrier.origin + vectorscale( ( 0, 0, 1 ), 75.0 ); - self.objpoints[level.nonteambasedteam] maps\mp\gametypes\_objpoints::updateorigin( self.curorigin ); - objective_position( self.objid[level.nonteambasedteam], self.curorigin ); - wait 0.05; - continue; - } - - if ( level.teambased ) - { - foreach ( team in level.teams ) - self.objpoints[team] maps\mp\gametypes\_objpoints::updateorigin( self.curorigin + self.offset3d ); - } - else - self.objpoints[level.nonteambasedteam] maps\mp\gametypes\_objpoints::updateorigin( self.curorigin + self.offset3d ); - - wait 0.05; - } -} - -updatecarryobjectobjectiveorigin() -{ - level endon( "game_ended" ); - self.trigger endon( "destroyed" ); - - if ( !self.newstyle ) - return; - - objpingdelay = level.objectivepingdelay; - - for (;;) - { - if ( isdefined( self.carrier ) ) - { - self.curorigin = self.carrier.origin; - objective_position( self.objectiveid, self.curorigin ); - self wait_endon( objpingdelay, "dropped", "reset" ); - continue; - } - - objective_position( self.objectiveid, self.curorigin ); - wait 0.05; - } -} - -giveobject( object ) -{ -/# - assert( !isdefined( self.carryobject ) ); -#/ - self.carryobject = object; - self thread trackcarrier(); - - if ( !object.allowweapons ) - { - self _disableweapon(); - self thread manualdropthink(); - } - - self.disallowvehicleusage = 1; - - if ( isdefined( object.visiblecarriermodel ) ) - self maps\mp\gametypes\_weapons::forcestowedweaponupdate(); - - if ( !object.newstyle ) - { - if ( isdefined( object.carryicon ) ) - { - if ( self issplitscreen() ) - { - self.carryicon = createicon( object.carryicon, 35, 35 ); - self.carryicon.x = -130; - self.carryicon.y = -90; - self.carryicon.horzalign = "right"; - self.carryicon.vertalign = "bottom"; - } - else - { - self.carryicon = createicon( object.carryicon, 50, 50 ); - - if ( !object.allowweapons ) - self.carryicon setpoint( "CENTER", "CENTER", 0, 60 ); - else - { - self.carryicon.x = 130; - self.carryicon.y = -60; - self.carryicon.horzalign = "user_left"; - self.carryicon.vertalign = "user_bottom"; - } - } - - self.carryicon.alpha = 0.75; - self.carryicon.hidewhileremotecontrolling = 1; - self.carryicon.hidewheninkillcam = 1; - } - } -} - -returnhome() -{ - self.isresetting = 1; - self notify( "reset" ); - - for ( index = 0; index < self.visuals.size; index++ ) - { - self.visuals[index].origin = self.visuals[index].baseorigin; - self.visuals[index].angles = self.visuals[index].baseangles; - self.visuals[index] show(); - } - - self.trigger.origin = self.trigger.baseorigin; - self.curorigin = self.trigger.origin; - - if ( isdefined( self.onreset ) ) - self [[ self.onreset ]](); - - self clearcarrier(); - updateworldicons(); - updatecompassicons(); - updateobjective(); - self.isresetting = 0; -} - -isobjectawayfromhome() -{ - if ( isdefined( self.carrier ) ) - return true; - - if ( distancesquared( self.trigger.origin, self.trigger.baseorigin ) > 4 ) - return true; - - return false; -} - -setposition( origin, angles ) -{ - self.isresetting = 1; - - for ( index = 0; index < self.visuals.size; index++ ) - { - visual = self.visuals[index]; - visual.origin = origin; - visual.angles = angles; - visual show(); - } - - self.trigger.origin = origin; - self.curorigin = self.trigger.origin; - self clearcarrier(); - updateworldicons(); - updatecompassicons(); - updateobjective(); - self.isresetting = 0; -} - -onplayerlaststand() -{ - if ( isdefined( self.carryobject ) ) - self.carryobject thread setdropped(); -} - -setdropped() -{ - self.isresetting = 1; - self notify( "dropped" ); - startorigin = ( 0, 0, 0 ); - endorigin = ( 0, 0, 0 ); - body = undefined; - - if ( isdefined( self.carrier ) && self.carrier.team != "spectator" ) - { - startorigin = self.carrier.origin + vectorscale( ( 0, 0, 1 ), 20.0 ); - endorigin = self.carrier.origin - vectorscale( ( 0, 0, 1 ), 2000.0 ); - body = self.carrier.body; - self.visuals[0].origin = self.carrier.origin; - } - else - { - startorigin = self.safeorigin + vectorscale( ( 0, 0, 1 ), 20.0 ); - endorigin = self.safeorigin - vectorscale( ( 0, 0, 1 ), 20.0 ); - } - - trace = playerphysicstrace( startorigin, endorigin ); - angletrace = bullettrace( startorigin, endorigin, 0, body ); - droppingplayer = self.carrier; - - if ( isdefined( trace ) ) - { - tempangle = randomfloat( 360 ); - droporigin = trace; - - if ( angletrace["fraction"] < 1 && distance( angletrace["position"], trace ) < 10.0 ) - { - forward = ( cos( tempangle ), sin( tempangle ), 0 ); - forward = vectornormalize( forward - vectorscale( angletrace["normal"], vectordot( forward, angletrace["normal"] ) ) ); - dropangles = vectortoangles( forward ); - } - else - dropangles = ( 0, tempangle, 0 ); - - for ( index = 0; index < self.visuals.size; index++ ) - { - self.visuals[index].origin = droporigin; - self.visuals[index].angles = dropangles; - self.visuals[index] show(); - } - - self.trigger.origin = droporigin; - self.curorigin = self.trigger.origin; - self thread pickuptimeout( trace[2], startorigin[2] ); - } - else - { - for ( index = 0; index < self.visuals.size; index++ ) - { - self.visuals[index].origin = self.visuals[index].baseorigin; - self.visuals[index].angles = self.visuals[index].baseangles; - self.visuals[index] show(); - } - - self.trigger.origin = self.trigger.baseorigin; - self.curorigin = self.trigger.baseorigin; - } - - if ( isdefined( self.ondrop ) ) - self [[ self.ondrop ]]( droppingplayer ); - - self clearcarrier(); - self updatecompassicons(); - self updateworldicons(); - self updateobjective(); - self.isresetting = 0; -} - -setcarrier( carrier ) -{ - self.carrier = carrier; - objective_setplayerusing( self.objectiveid, carrier ); - self thread updatevisibilityaccordingtoradar(); -} - -clearcarrier() -{ - if ( !isdefined( self.carrier ) ) - return; - - self.carrier takeobject( self ); - objective_clearplayerusing( self.objectiveid, self.carrier ); - self.carrier = undefined; - self notify( "carrier_cleared" ); -} - -shouldbereset( minz, maxz ) -{ - minetriggers = getentarray( "minefield", "targetname" ); - hurttriggers = getentarray( "trigger_hurt", "classname" ); - elevators = getentarray( "script_elevator", "targetname" ); - - for ( index = 0; index < minetriggers.size; index++ ) - { - if ( self.visuals[0] istouchingswept( minetriggers[index], minz, maxz ) ) - return true; - } - - for ( index = 0; index < hurttriggers.size; index++ ) - { - if ( self.visuals[0] istouchingswept( hurttriggers[index], minz, maxz ) ) - return true; - } - - for ( index = 0; index < elevators.size; index++ ) - { -/# - assert( isdefined( elevators[index].occupy_volume ) ); -#/ - - if ( self.visuals[0] istouchingswept( elevators[index].occupy_volume, minz, maxz ) ) - return true; - } - - return false; -} - -pickuptimeout( minz, maxz ) -{ - self endon( "pickup_object" ); - self endon( "stop_pickup_timeout" ); - wait 0.05; - - if ( self shouldbereset( minz, maxz ) ) - { - self returnhome(); - return; - } - - if ( isdefined( self.autoresettime ) ) - { - wait( self.autoresettime ); - - if ( !isdefined( self.carrier ) ) - self returnhome(); - } -} - -takeobject( object ) -{ - if ( isdefined( self.carryicon ) ) - self.carryicon destroyelem(); - - if ( isdefined( object.visiblecarriermodel ) ) - self maps\mp\gametypes\_weapons::detach_all_weapons(); - - self.carryobject = undefined; - - if ( !isalive( self ) ) - return; - - self notify( "drop_object" ); - self.disallowvehicleusage = 0; - - if ( object.triggertype == "proximity" ) - self thread pickupobjectdelay( object.trigger.origin ); - - if ( isdefined( object.visiblecarriermodel ) ) - self maps\mp\gametypes\_weapons::forcestowedweaponupdate(); - - if ( !object.allowweapons ) - self _enableweapon(); -} - -trackcarrier() -{ - level endon( "game_ended" ); - self endon( "disconnect" ); - self endon( "death" ); - self endon( "drop_object" ); - - while ( isdefined( self.carryobject ) && isalive( self ) ) - { - if ( self isonground() ) - { - trace = bullettrace( self.origin + vectorscale( ( 0, 0, 1 ), 20.0 ), self.origin - vectorscale( ( 0, 0, 1 ), 20.0 ), 0, undefined ); - - if ( trace["fraction"] < 1 ) - self.carryobject.safeorigin = trace["position"]; - } - - wait 0.05; - } -} - -manualdropthink() -{ - level endon( "game_ended" ); - self endon( "disconnect" ); - self endon( "death" ); - self endon( "drop_object" ); - - for (;;) - { - while ( self attackbuttonpressed() || self fragbuttonpressed() || self secondaryoffhandbuttonpressed() || self meleebuttonpressed() ) - wait 0.05; - - while ( !self attackbuttonpressed() && !self fragbuttonpressed() && !self secondaryoffhandbuttonpressed() && !self meleebuttonpressed() ) - wait 0.05; - - if ( isdefined( self.carryobject ) && !self usebuttonpressed() ) - self.carryobject thread setdropped(); - } -} - -createuseobject( ownerteam, trigger, visuals, offset, objectivename ) -{ - useobject = spawnstruct(); - useobject.type = "useObject"; - useobject.curorigin = trigger.origin; - useobject.ownerteam = ownerteam; - useobject.entnum = trigger getentitynumber(); - useobject.keyobject = undefined; - - if ( issubstr( trigger.classname, "use" ) ) - useobject.triggertype = "use"; - else - useobject.triggertype = "proximity"; - - useobject.trigger = trigger; - - for ( index = 0; index < visuals.size; index++ ) - { - visuals[index].baseorigin = visuals[index].origin; - visuals[index].baseangles = visuals[index].angles; - } - - useobject.visuals = visuals; - - if ( !isdefined( offset ) ) - offset = ( 0, 0, 0 ); - - useobject.offset3d = offset; - useobject.newstyle = 0; - - if ( isdefined( objectivename ) ) - useobject.newstyle = 1; - else - objectivename = &""; - - useobject.compassicons = []; - useobject.objid = []; - - if ( !useobject.newstyle ) - { - foreach ( team in level.teams ) - useobject.objid[team] = getnextobjid(); - - if ( level.teambased ) - { - foreach ( team in level.teams ) - { - objective_add( useobject.objid[team], "invisible", useobject.curorigin ); - objective_team( useobject.objid[team], team ); - } - } - else - objective_add( useobject.objid[level.nonteambasedteam], "invisible", useobject.curorigin ); - } - - useobject.objectiveid = getnextobjid(); - objective_add( useobject.objectiveid, "invisible", useobject.curorigin + offset, objectivename ); - - if ( !useobject.newstyle ) - { - if ( level.teambased ) - { - foreach ( team in level.teams ) - { - useobject.objpoints[team] = maps\mp\gametypes\_objpoints::createteamobjpoint( "objpoint_" + team + "_" + useobject.entnum, useobject.curorigin + offset, team, undefined ); - useobject.objpoints[team].alpha = 0; - } - } - else - { - useobject.objpoints[level.nonteambasedteam] = maps\mp\gametypes\_objpoints::createteamobjpoint( "objpoint_allies_" + useobject.entnum, useobject.curorigin + offset, "all", undefined ); - useobject.objpoints[level.nonteambasedteam].alpha = 0; - } - } - - useobject.interactteam = "none"; - useobject.worldicons = []; - useobject.visibleteam = "none"; - useobject.worldiswaypoint = []; - useobject.onuse = undefined; - useobject.oncantuse = undefined; - useobject.usetext = "default"; - useobject.usetime = 10000; - useobject clearprogress(); - useobject.decayprogress = 0; - - if ( useobject.triggertype == "proximity" ) - { - useobject.numtouching["neutral"] = 0; - useobject.numtouching["none"] = 0; - useobject.touchlist["neutral"] = []; - useobject.touchlist["none"] = []; - - foreach ( team in level.teams ) - { - useobject.numtouching[team] = 0; - useobject.touchlist[team] = []; - } - - useobject.teamusetimes = []; - useobject.teamusetexts = []; - useobject.userate = 0; - useobject.claimteam = "none"; - useobject.claimplayer = undefined; - useobject.lastclaimteam = "none"; - useobject.lastclaimtime = 0; - useobject.claimgraceperiod = 1.0; - useobject.mustmaintainclaim = 0; - useobject.cancontestclaim = 0; - useobject thread useobjectproxthink(); - } - else - { - useobject.userate = 1; - useobject thread useobjectusethink(); - } - - return useobject; -} - -setkeyobject( object ) -{ - if ( !isdefined( object ) ) - { - self.keyobject = undefined; - return; - } - - if ( !isdefined( self.keyobject ) ) - self.keyobject = []; - - self.keyobject[self.keyobject.size] = object; -} - -haskeyobject( use ) -{ - for ( x = 0; x < use.keyobject.size; x++ ) - { - if ( isdefined( self.carryobject ) && isdefined( use.keyobject[x] ) && self.carryobject == use.keyobject[x] ) - return true; - } - - return false; -} - -useobjectusethink() -{ - level endon( "game_ended" ); - self.trigger endon( "destroyed" ); - - while ( true ) - { - self.trigger waittill( "trigger", player ); - - if ( !isalive( player ) ) - continue; - - if ( !self caninteractwith( player ) ) - continue; - - if ( !player isonground() ) - continue; - - if ( player isinvehicle() ) - continue; - - if ( isdefined( self.keyobject ) && ( !isdefined( player.carryobject ) || !player haskeyobject( self ) ) ) - { - if ( isdefined( self.oncantuse ) ) - self [[ self.oncantuse ]]( player ); - - continue; - } - - result = 1; - - if ( self.usetime > 0 ) - { - if ( isdefined( self.onbeginuse ) ) - self [[ self.onbeginuse ]]( player ); - - team = player.pers["team"]; - result = self useholdthink( player ); - - if ( isdefined( self.onenduse ) ) - self [[ self.onenduse ]]( team, player, result ); - } - - if ( !result ) - continue; - - if ( isdefined( self.onuse ) ) - self [[ self.onuse ]]( player ); - } -} - -getearliestclaimplayer() -{ -/# - assert( self.claimteam != "none" ); -#/ - team = self.claimteam; - earliestplayer = self.claimplayer; - - if ( self.touchlist[team].size > 0 ) - { - earliesttime = undefined; - players = getarraykeys( self.touchlist[team] ); - - for ( index = 0; index < players.size; index++ ) - { - touchdata = self.touchlist[team][players[index]]; - - if ( !isdefined( earliesttime ) || touchdata.starttime < earliesttime ) - { - earliestplayer = touchdata.player; - earliesttime = touchdata.starttime; - } - } - } - - return earliestplayer; -} - -useobjectproxthink() -{ - level endon( "game_ended" ); - self.trigger endon( "destroyed" ); - self thread proxtriggerthink(); - - while ( true ) - { - if ( self.usetime && self.curprogress >= self.usetime ) - { - self clearprogress(); - creditplayer = getearliestclaimplayer(); - - if ( isdefined( self.onenduse ) ) - self [[ self.onenduse ]]( self getclaimteam(), creditplayer, isdefined( creditplayer ) ); - - if ( isdefined( creditplayer ) && isdefined( self.onuse ) ) - self [[ self.onuse ]]( creditplayer ); - - if ( !self.mustmaintainclaim ) - { - self setclaimteam( "none" ); - self.claimplayer = undefined; - } - } - - if ( self.claimteam != "none" ) - { - if ( self useobjectlockedforteam( self.claimteam ) ) - { - if ( isdefined( self.onenduse ) ) - self [[ self.onenduse ]]( self getclaimteam(), self.claimplayer, 0 ); - - self setclaimteam( "none" ); - self.claimplayer = undefined; - self clearprogress(); - } - else if ( self.usetime && ( !self.mustmaintainclaim || self getownerteam() != self getclaimteam() ) ) - { - if ( self.decayprogress && !self.numtouching[self.claimteam] ) - { - if ( isdefined( self.claimplayer ) ) - { - if ( isdefined( self.onenduse ) ) - self [[ self.onenduse ]]( self getclaimteam(), self.claimplayer, 0 ); - - self.claimplayer = undefined; - } - - decayscale = 0; - - if ( self.decaytime ) - decayscale = self.usetime / self.decaytime; - - self.curprogress -= 50 * self.userate * decayscale; - - if ( self.curprogress <= 0 ) - self clearprogress(); - - self updatecurrentprogress(); - - if ( isdefined( self.onuseupdate ) ) - self [[ self.onuseupdate ]]( self getclaimteam(), self.curprogress / self.usetime, 50 * self.userate * decayscale / self.usetime ); - - if ( self.curprogress == 0 ) - self setclaimteam( "none" ); - } - else if ( !self.numtouching[self.claimteam] ) - { - if ( isdefined( self.onenduse ) ) - self [[ self.onenduse ]]( self getclaimteam(), self.claimplayer, 0 ); - - self setclaimteam( "none" ); - self.claimplayer = undefined; - } - else - { - self.curprogress += 50 * self.userate; - self updatecurrentprogress(); - - if ( isdefined( self.onuseupdate ) ) - self [[ self.onuseupdate ]]( self getclaimteam(), self.curprogress / self.usetime, 50 * self.userate / self.usetime ); - } - } - else if ( !self.mustmaintainclaim ) - { - if ( isdefined( self.onuse ) ) - self [[ self.onuse ]]( self.claimplayer ); - - if ( !self.mustmaintainclaim ) - { - self setclaimteam( "none" ); - self.claimplayer = undefined; - } - } - else if ( !self.numtouching[self.claimteam] ) - { - if ( isdefined( self.onunoccupied ) ) - self [[ self.onunoccupied ]](); - - self setclaimteam( "none" ); - self.claimplayer = undefined; - } - else if ( self.cancontestclaim ) - { - numother = getnumtouchingexceptteam( self.claimteam ); - - if ( numother > 0 ) - { - if ( isdefined( self.oncontested ) ) - self [[ self.oncontested ]](); - - self setclaimteam( "none" ); - self.claimplayer = undefined; - } - } - } - else - { - if ( self.curprogress > 0 && gettime() - self.lastclaimtime > self.claimgraceperiod * 1000 ) - self clearprogress(); - - if ( self.mustmaintainclaim && self getownerteam() != "none" ) - { - if ( !self.numtouching[self getownerteam()] ) - { - if ( isdefined( self.onunoccupied ) ) - self [[ self.onunoccupied ]](); - } - else if ( self.cancontestclaim && self.lastclaimteam != "none" && self.numtouching[self.lastclaimteam] ) - { - numother = getnumtouchingexceptteam( self.lastclaimteam ); - - if ( numother == 0 ) - { - if ( isdefined( self.onuncontested ) ) - self [[ self.onuncontested ]]( self.lastclaimteam ); - } - } - } - } - - wait 0.05; - maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); - } -} - -useobjectlockedforteam( team ) -{ - if ( isdefined( self.teamlock ) && isdefined( level.teams[team] ) ) - return self.teamlock[team]; - - return 0; -} - -canclaim( player ) -{ - if ( isdefined( self.carrier ) ) - return false; - - if ( self.cancontestclaim ) - { - numother = getnumtouchingexceptteam( player.pers["team"] ); - - if ( numother != 0 ) - return false; - } - - if ( !isdefined( self.keyobject ) || isdefined( player.carryobject ) && player haskeyobject( self ) ) - return true; - - return false; -} - -proxtriggerthink() -{ - level endon( "game_ended" ); - self.trigger endon( "destroyed" ); - entitynumber = self.entnum; - - while ( true ) - { - self.trigger waittill( "trigger", player ); - - if ( !isalive( player ) || self useobjectlockedforteam( player.pers["team"] ) ) - continue; - - if ( player.spawntime == gettime() ) - continue; - - if ( player isweaponviewonlylinked() ) - continue; - - if ( self isexcluded( player ) ) - continue; - - if ( self caninteractwith( player ) && self.claimteam == "none" ) - { - if ( self canclaim( player ) ) - { - setclaimteam( player.pers["team"] ); - self.claimplayer = player; - relativeteam = self getrelativeteam( player.pers["team"] ); - - if ( isdefined( self.teamusetimes[relativeteam] ) ) - self.usetime = self.teamusetimes[relativeteam]; - - if ( self.usetime && isdefined( self.onbeginuse ) ) - self [[ self.onbeginuse ]]( self.claimplayer ); - } - else if ( isdefined( self.oncantuse ) ) - self [[ self.oncantuse ]]( player ); - } - - if ( isalive( player ) && !isdefined( player.touchtriggers[entitynumber] ) ) - player thread triggertouchthink( self ); - } -} - -isexcluded( player ) -{ - if ( !isdefined( self.exclusions ) ) - return false; - - foreach ( exclusion in self.exclusions ) - { - if ( exclusion istouching( player ) ) - return true; - } - - return false; -} - -clearprogress() -{ - self.curprogress = 0; - self updatecurrentprogress(); - - if ( isdefined( self.onuseclear ) ) - self [[ self.onuseclear ]](); -} - -setclaimteam( newteam ) -{ -/# - assert( newteam != self.claimteam ); -#/ - - if ( self.claimteam == "none" && gettime() - self.lastclaimtime > self.claimgraceperiod * 1000 ) - self clearprogress(); - else if ( newteam != "none" && newteam != self.lastclaimteam ) - self clearprogress(); - - self.lastclaimteam = self.claimteam; - self.lastclaimtime = gettime(); - self.claimteam = newteam; - self updateuserate(); -} - -getclaimteam() -{ - return self.claimteam; -} - -continuetriggertouchthink( team, object ) -{ - if ( !isalive( self ) ) - return false; - - if ( self useobjectlockedforteam( team ) ) - return false; - - if ( !self istouching( object.trigger ) ) - return false; - - return true; -} - -triggertouchthink( object ) -{ - team = self.pers["team"]; - score = 1; - object.numtouching[team] += score; - - if ( object.usetime ) - object updateuserate(); - - touchname = "player" + self.clientid; - struct = spawnstruct(); - struct.player = self; - struct.starttime = gettime(); - object.touchlist[team][touchname] = struct; - objective_setplayerusing( object.objectiveid, self ); - self.touchtriggers[object.entnum] = object.trigger; - - if ( isdefined( object.ontouchuse ) ) - object [[ object.ontouchuse ]]( self ); - - while ( self continuetriggertouchthink( team, object ) ) - { - if ( object.usetime ) - self updateproxbar( object, 0 ); - - wait 0.05; - } - - if ( isdefined( self ) ) - { - if ( object.usetime ) - self updateproxbar( object, 1 ); - - self.touchtriggers[object.entnum] = undefined; - objective_clearplayerusing( object.objectiveid, self ); - } - - if ( level.gameended ) - return; - - object.touchlist[team][touchname] = undefined; - object.numtouching[team] -= score; - - if ( object.numtouching[team] < 1 ) - object.numtouching[team] = 0; - - if ( object.usetime ) - { - if ( object.numtouching[team] <= 0 && object.curprogress >= object.usetime ) - { - object.curprogress = object.usetime - 1; - object updatecurrentprogress(); - } - } - - if ( isdefined( self ) && isdefined( object.onendtouchuse ) ) - object [[ object.onendtouchuse ]]( self ); - - object updateuserate(); -} - -updateproxbar( object, forceremove ) -{ - if ( object.newstyle ) - return; - - if ( !forceremove && object.decayprogress ) - { - if ( !object caninteractwith( self ) ) - { - if ( isdefined( self.proxbar ) ) - self.proxbar hideelem(); - - if ( isdefined( self.proxbartext ) ) - self.proxbartext hideelem(); - - return; - } - else - { - if ( !isdefined( self.proxbar ) ) - { - self.proxbar = createprimaryprogressbar(); - self.proxbar.lastuserate = -1; - } - - if ( self.pers["team"] == object.claimteam ) - { - if ( self.proxbar.bar.color != ( 1, 1, 1 ) ) - { - self.proxbar.bar.color = ( 1, 1, 1 ); - self.proxbar.lastuserate = -1; - } - } - else if ( self.proxbar.bar.color != ( 1, 0, 0 ) ) - { - self.proxbar.bar.color = ( 1, 0, 0 ); - self.proxbar.lastuserate = -1; - } - } - } - else if ( forceremove || !object caninteractwith( self ) || self.pers["team"] != object.claimteam ) - { - if ( isdefined( self.proxbar ) ) - self.proxbar hideelem(); - - if ( isdefined( self.proxbartext ) ) - self.proxbartext hideelem(); - - return; - } - - if ( !isdefined( self.proxbar ) ) - { - self.proxbar = createprimaryprogressbar(); - self.proxbar.lastuserate = -1; - self.proxbar.lasthostmigrationstate = 0; - } - - if ( self.proxbar.hidden ) - { - self.proxbar showelem(); - self.proxbar.lastuserate = -1; - self.proxbar.lasthostmigrationstate = 0; - } - - if ( !isdefined( self.proxbartext ) ) - { - self.proxbartext = createprimaryprogressbartext(); - self.proxbartext settext( object.usetext ); - } - - if ( self.proxbartext.hidden ) - { - self.proxbartext showelem(); - self.proxbartext settext( object.usetext ); - } - - if ( self.proxbar.lastuserate != object.userate || self.proxbar.lasthostmigrationstate != isdefined( level.hostmigrationtimer ) ) - { - if ( object.curprogress > object.usetime ) - object.curprogress = object.usetime; - - if ( object.decayprogress && self.pers["team"] != object.claimteam ) - { - if ( object.curprogress > 0 ) - { - progress = object.curprogress / object.usetime; - rate = 1000 / object.usetime * ( object.userate * -1 ); - - if ( isdefined( level.hostmigrationtimer ) ) - rate = 0; - - self.proxbar updatebar( progress, rate ); - } - } - else - { - progress = object.curprogress / object.usetime; - rate = 1000 / object.usetime * object.userate; - - if ( isdefined( level.hostmigrationtimer ) ) - rate = 0; - - self.proxbar updatebar( progress, rate ); - } - - self.proxbar.lasthostmigrationstate = isdefined( level.hostmigrationtimer ); - self.proxbar.lastuserate = object.userate; - } -} - -getnumtouchingexceptteam( ignoreteam ) -{ - numtouching = 0; - - foreach ( team in level.teams ) - { - if ( ignoreteam == team ) - continue; - - numtouching += self.numtouching[team]; - } - - return numtouching; -} - -updateuserate() -{ - numclaimants = self.numtouching[self.claimteam]; - numother = 0; - numother = getnumtouchingexceptteam( self.claimteam ); - self.userate = 0; - - if ( self.decayprogress ) - { - if ( numclaimants && !numother ) - self.userate = numclaimants; - else if ( !numclaimants && numother ) - self.userate = numother; - else if ( !numclaimants && !numother ) - self.userate = 0; - } - else if ( numclaimants && !numother ) - self.userate = numclaimants; - - if ( isdefined( self.onupdateuserate ) ) - self [[ self.onupdateuserate ]](); -} - -useholdthink( player ) -{ - player notify( "use_hold" ); - - if ( !is_true( self.dontlinkplayertotrigger ) ) - { - player playerlinkto( self.trigger ); - player playerlinkedoffsetenable(); - } - - player clientclaimtrigger( self.trigger ); - player.claimtrigger = self.trigger; - useweapon = self.useweapon; - lastweapon = player getcurrentweapon(); - - if ( isdefined( useweapon ) ) - { -/# - assert( isdefined( lastweapon ) ); -#/ - - if ( lastweapon == useweapon ) - { -/# - assert( isdefined( player.lastnonuseweapon ) ); -#/ - lastweapon = player.lastnonuseweapon; - } - -/# - assert( lastweapon != useweapon ); -#/ - player.lastnonuseweapon = lastweapon; - player giveweapon( useweapon ); - player setweaponammostock( useweapon, 0 ); - player setweaponammoclip( useweapon, 0 ); - player switchtoweapon( useweapon ); - } - else - player _disableweapon(); - - self clearprogress(); - self.inuse = 1; - self.userate = 0; - objective_setplayerusing( self.objectiveid, player ); - player thread personalusebar( self ); - result = useholdthinkloop( player, lastweapon ); - - if ( isdefined( player ) ) - { - objective_clearplayerusing( self.objectiveid, player ); - self clearprogress(); - - if ( isdefined( player.attachedusemodel ) ) - { - player detach( player.attachedusemodel, "tag_inhand" ); - player.attachedusemodel = undefined; - } - - player notify( "done_using" ); - } - - if ( isdefined( useweapon ) && isdefined( player ) ) - player thread takeuseweapon( useweapon ); - - if ( isdefined( result ) && result ) - return true; - - if ( isdefined( player ) ) - { - player.claimtrigger = undefined; - - if ( isdefined( useweapon ) ) - { - ammo = player getweaponammoclip( lastweapon ); - - if ( lastweapon != "none" && !maps\mp\killstreaks\_killstreaks::iskillstreakweapon( lastweapon ) && !( isweaponequipment( lastweapon ) && player getweaponammoclip( lastweapon ) == 0 ) ) - player switchtoweapon( lastweapon ); - else - { - player takeweapon( useweapon ); - player switchtolastnonkillstreakweapon(); - } - } - else if ( isalive( player ) ) - player _enableweapon(); - - if ( !is_true( self.dontlinkplayertotrigger ) ) - player unlink(); - - if ( !isalive( player ) ) - player.killedinuse = 1; - } - - self.inuse = 0; - - if ( self.trigger.classname == "trigger_radius_use" ) - player clientreleasetrigger( self.trigger ); - else - self.trigger releaseclaimedtrigger(); - - return false; -} - -takeuseweapon( useweapon ) -{ - self endon( "use_hold" ); - self endon( "death" ); - self endon( "disconnect" ); - level endon( "game_ended" ); - - while ( self getcurrentweapon() == useweapon && !self.throwinggrenade ) - wait 0.05; - - self takeweapon( useweapon ); -} - -continueholdthinkloop( player, waitforweapon, timedout, usetime ) -{ - maxwaittime = 1.5; - - if ( !isalive( player ) ) - return false; - - if ( isdefined( player.laststand ) && player.laststand ) - return false; - - if ( self.curprogress >= usetime ) - return false; - - if ( !player usebuttonpressed() ) - return false; - - if ( player.throwinggrenade ) - return false; - - if ( player meleebuttonpressed() ) - return false; - - if ( player isinvehicle() ) - return false; - - if ( player isremotecontrolling() ) - return false; - - if ( player isweaponviewonlylinked() ) - return false; - - if ( !player istouching( self.trigger ) ) - return false; - - if ( !self.userate && !waitforweapon ) - return false; - - if ( waitforweapon && timedout > maxwaittime ) - return false; - - return true; -} - -updatecurrentprogress() -{ - if ( self.usetime ) - { - if ( isdefined( self.curprogress ) ) - progress = float( self.curprogress ) / self.usetime; - else - progress = 0; - - objective_setprogress( self.objectiveid, clamp( progress, 0, 1 ) ); - } -} - -useholdthinkloop( player, lastweapon ) -{ - level endon( "game_ended" ); - self endon( "disabled" ); - useweapon = self.useweapon; - waitforweapon = 1; - timedout = 0; - usetime = self.usetime; - - while ( self continueholdthinkloop( player, waitforweapon, timedout, usetime ) ) - { - timedout += 0.05; - - if ( !isdefined( useweapon ) || player getcurrentweapon() == useweapon ) - { - self.curprogress += 50 * self.userate; - self updatecurrentprogress(); - self.userate = 1; - waitforweapon = 0; - } - else - self.userate = 0; - - if ( self.curprogress >= usetime ) - { - self.inuse = 0; - player clientreleasetrigger( self.trigger ); - player.claimtrigger = undefined; - - if ( isdefined( useweapon ) ) - { - if ( lastweapon != "none" && !maps\mp\killstreaks\_killstreaks::iskillstreakweapon( lastweapon ) && !( isweaponequipment( lastweapon ) && player getweaponammoclip( lastweapon ) == 0 ) ) - player switchtoweapon( lastweapon ); - else - { - player takeweapon( useweapon ); - player switchtolastnonkillstreakweapon(); - } - } - else - player _enableweapon(); - - if ( !is_true( self.dontlinkplayertotrigger ) ) - player unlink(); - - wait 0.05; - return isalive( player ); - } - - wait 0.05; - maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); - } - - return 0; -} - -personalusebar( object ) -{ - self endon( "disconnect" ); - - if ( object.newstyle ) - return; - - if ( isdefined( self.usebar ) ) - return; - - self.usebar = createprimaryprogressbar(); - self.usebartext = createprimaryprogressbartext(); - self.usebartext settext( object.usetext ); - usetime = object.usetime; - lastrate = -1; - lasthostmigrationstate = isdefined( level.hostmigrationtimer ); - - while ( isalive( self ) && object.inuse && !level.gameended ) - { - if ( lastrate != object.userate || lasthostmigrationstate != isdefined( level.hostmigrationtimer ) ) - { - if ( object.curprogress > usetime ) - object.curprogress = usetime; - - if ( object.decayprogress && self.pers["team"] != object.claimteam ) - { - if ( object.curprogress > 0 ) - { - progress = object.curprogress / usetime; - rate = 1000 / usetime * ( object.userate * -1 ); - - if ( isdefined( level.hostmigrationtimer ) ) - rate = 0; - - self.proxbar updatebar( progress, rate ); - } - } - else - { - progress = object.curprogress / usetime; - rate = 1000 / usetime * object.userate; - - if ( isdefined( level.hostmigrationtimer ) ) - rate = 0; - - self.usebar updatebar( progress, rate ); - } - - if ( !object.userate ) - { - self.usebar hideelem(); - self.usebartext hideelem(); - } - else - { - self.usebar showelem(); - self.usebartext showelem(); - } - } - - lastrate = object.userate; - lasthostmigrationstate = isdefined( level.hostmigrationtimer ); - wait 0.05; - } - - self.usebar destroyelem(); - self.usebartext destroyelem(); -} - -updatetrigger() -{ - if ( self.triggertype != "use" ) - return; - - if ( self.interactteam == "none" ) - self.trigger.origin -= vectorscale( ( 0, 0, 1 ), 50000.0 ); - else if ( self.interactteam == "any" || !level.teambased ) - { - self.trigger.origin = self.curorigin; - self.trigger setteamfortrigger( "none" ); - } - else if ( self.interactteam == "friendly" ) - { - self.trigger.origin = self.curorigin; - - if ( isdefined( level.teams[self.ownerteam] ) ) - self.trigger setteamfortrigger( self.ownerteam ); - else - self.trigger.origin -= vectorscale( ( 0, 0, 1 ), 50000.0 ); - } - else if ( self.interactteam == "enemy" ) - { - self.trigger.origin = self.curorigin; - self.trigger setexcludeteamfortrigger( self.ownerteam ); - } -} - -updateobjective() -{ - if ( !self.newstyle ) - return; - - objective_team( self.objectiveid, self.ownerteam ); - - if ( self.visibleteam == "any" ) - { - objective_state( self.objectiveid, "active" ); - objective_visibleteams( self.objectiveid, level.spawnsystem.ispawn_teammask["all"] ); - } - else if ( self.visibleteam == "friendly" ) - { - objective_state( self.objectiveid, "active" ); - objective_visibleteams( self.objectiveid, level.spawnsystem.ispawn_teammask[self.ownerteam] ); - } - else if ( self.visibleteam == "enemy" ) - { - objective_state( self.objectiveid, "active" ); - objective_visibleteams( self.objectiveid, level.spawnsystem.ispawn_teammask["all"] & ~level.spawnsystem.ispawn_teammask[self.ownerteam] ); - } - else - { - objective_state( self.objectiveid, "invisible" ); - objective_visibleteams( self.objectiveid, 0 ); - } - - if ( self.type == "carryObject" ) - { - if ( isalive( self.carrier ) ) - objective_onentity( self.objectiveid, self.carrier ); - else - objective_clearentity( self.objectiveid ); - } -} - -updateworldicons() -{ - if ( self.visibleteam == "any" ) - { - updateworldicon( "friendly", 1 ); - updateworldicon( "enemy", 1 ); - } - else if ( self.visibleteam == "friendly" ) - { - updateworldicon( "friendly", 1 ); - updateworldicon( "enemy", 0 ); - } - else if ( self.visibleteam == "enemy" ) - { - updateworldicon( "friendly", 0 ); - updateworldicon( "enemy", 1 ); - } - else - { - updateworldicon( "friendly", 0 ); - updateworldicon( "enemy", 0 ); - } -} - -updateworldicon( relativeteam, showicon ) -{ - if ( self.newstyle ) - return; - - if ( !isdefined( self.worldicons[relativeteam] ) ) - showicon = 0; - - updateteams = getupdateteams( relativeteam ); - - for ( index = 0; index < updateteams.size; index++ ) - { - if ( !level.teambased && updateteams[index] != level.nonteambasedteam ) - continue; - - opname = "objpoint_" + updateteams[index] + "_" + self.entnum; - objpoint = maps\mp\gametypes\_objpoints::getobjpointbyname( opname ); - objpoint notify( "stop_flashing_thread" ); - objpoint thread maps\mp\gametypes\_objpoints::stopflashing(); - - if ( showicon ) - { - objpoint setshader( self.worldicons[relativeteam], level.objpointsize, level.objpointsize ); - objpoint fadeovertime( 0.05 ); - objpoint.alpha = objpoint.basealpha; - objpoint.isshown = 1; - iswaypoint = 1; - - if ( isdefined( self.worldiswaypoint[relativeteam] ) ) - iswaypoint = self.worldiswaypoint[relativeteam]; - - if ( isdefined( self.compassicons[relativeteam] ) ) - objpoint setwaypoint( iswaypoint, self.worldicons[relativeteam] ); - else - objpoint setwaypoint( iswaypoint ); - - if ( self.type == "carryObject" ) - { - if ( isdefined( self.carrier ) && !shouldpingobject( relativeteam ) ) - objpoint settargetent( self.carrier ); - else - objpoint cleartargetent(); - } - - continue; - } - - objpoint fadeovertime( 0.05 ); - objpoint.alpha = 0; - objpoint.isshown = 0; - objpoint cleartargetent(); - } -} - -updatecompassicons() -{ - if ( self.visibleteam == "any" ) - { - updatecompassicon( "friendly", 1 ); - updatecompassicon( "enemy", 1 ); - } - else if ( self.visibleteam == "friendly" ) - { - updatecompassicon( "friendly", 1 ); - updatecompassicon( "enemy", 0 ); - } - else if ( self.visibleteam == "enemy" ) - { - updatecompassicon( "friendly", 0 ); - updatecompassicon( "enemy", 1 ); - } - else - { - updatecompassicon( "friendly", 0 ); - updatecompassicon( "enemy", 0 ); - } -} - -updatecompassicon( relativeteam, showicon ) -{ - if ( self.newstyle ) - return; - - updateteams = getupdateteams( relativeteam ); - - for ( index = 0; index < updateteams.size; index++ ) - { - showiconthisteam = showicon; - - if ( !showiconthisteam && shouldshowcompassduetoradar( updateteams[index] ) ) - showiconthisteam = 1; - - if ( level.teambased ) - objid = self.objid[updateteams[index]]; - else - objid = self.objid[level.nonteambasedteam]; - - if ( !isdefined( self.compassicons[relativeteam] ) || !showiconthisteam ) - { - objective_state( objid, "invisible" ); - continue; - } - - objective_icon( objid, self.compassicons[relativeteam] ); - objective_state( objid, "active" ); - - if ( self.type == "carryObject" ) - { - if ( isalive( self.carrier ) && !shouldpingobject( relativeteam ) ) - { - objective_onentity( objid, self.carrier ); - continue; - } - - objective_position( objid, self.curorigin ); - } - } -} - -shouldpingobject( relativeteam ) -{ - if ( relativeteam == "friendly" && self.objidpingfriendly ) - return true; - else if ( relativeteam == "enemy" && self.objidpingenemy ) - return true; - - return false; -} - -getupdateteams( relativeteam ) -{ - updateteams = []; - - if ( level.teambased ) - { - if ( relativeteam == "friendly" ) - { - foreach ( team in level.teams ) - { - if ( self isfriendlyteam( team ) ) - updateteams[updateteams.size] = team; - } - } - else if ( relativeteam == "enemy" ) - { - foreach ( team in level.teams ) - { - if ( !self isfriendlyteam( team ) ) - updateteams[updateteams.size] = team; - } - } - } - else if ( relativeteam == "friendly" ) - updateteams[updateteams.size] = level.nonteambasedteam; - else - updateteams[updateteams.size] = "axis"; - - return updateteams; -} - -shouldshowcompassduetoradar( team ) -{ - showcompass = 0; - - if ( !isdefined( self.carrier ) ) - return 0; - - if ( self.carrier hasperk( "specialty_gpsjammer" ) == 0 ) - { - if ( maps\mp\killstreaks\_radar::teamhasspyplane( team ) ) - showcompass = 1; - } - - if ( maps\mp\killstreaks\_radar::teamhassatellite( team ) ) - showcompass = 1; - - return showcompass; -} - -updatevisibilityaccordingtoradar() -{ - self endon( "death" ); - self endon( "carrier_cleared" ); - - while ( true ) - { - level waittill( "radar_status_change" ); - - self updatecompassicons(); - } -} - -setownerteam( team ) -{ - self.ownerteam = team; - self updatetrigger(); - self updatecompassicons(); - self updateworldicons(); - self updateobjective(); -} - -getownerteam() -{ - return self.ownerteam; -} - -setdecaytime( time ) -{ - self.decaytime = int( time * 1000 ); -} - -setusetime( time ) -{ - self.usetime = int( time * 1000 ); -} - -setusetext( text ) -{ - self.usetext = text; -} - -setteamusetime( relativeteam, time ) -{ - self.teamusetimes[relativeteam] = int( time * 1000 ); -} - -setteamusetext( relativeteam, text ) -{ - self.teamusetexts[relativeteam] = text; -} - -setusehinttext( text ) -{ - self.trigger sethintstring( text ); -} - -allowcarry( relativeteam ) -{ - allowuse( relativeteam ); -} - -allowuse( relativeteam ) -{ - self.interactteam = relativeteam; - updatetrigger(); -} - -setvisibleteam( relativeteam ) -{ - self.visibleteam = relativeteam; - - if ( !maps\mp\gametypes\_tweakables::gettweakablevalue( "hud", "showobjicons" ) ) - self.visibleteam = "none"; - - updatecompassicons(); - updateworldicons(); - updateobjective(); -} - -setmodelvisibility( visibility ) -{ - if ( visibility ) - { - for ( index = 0; index < self.visuals.size; index++ ) - { - self.visuals[index] show(); - - if ( self.visuals[index].classname == "script_brushmodel" || self.visuals[index].classname == "script_model" ) - self.visuals[index] thread makesolid(); - } - } - else - { - for ( index = 0; index < self.visuals.size; index++ ) - { - self.visuals[index] hide(); - - if ( self.visuals[index].classname == "script_brushmodel" || self.visuals[index].classname == "script_model" ) - { - self.visuals[index] notify( "changing_solidness" ); - self.visuals[index] notsolid(); - } - } - } -} - -makesolid() -{ - self endon( "death" ); - self notify( "changing_solidness" ); - self endon( "changing_solidness" ); - - while ( true ) - { - for ( i = 0; i < level.players.size; i++ ) - { - if ( level.players[i] istouching( self ) ) - break; - } - - if ( i == level.players.size ) - { - self solid(); - break; - } - - wait 0.05; - } -} - -setcarriervisible( relativeteam ) -{ - self.carriervisible = relativeteam; -} - -setcanuse( relativeteam ) -{ - self.useteam = relativeteam; -} - -set2dicon( relativeteam, shader ) -{ - self.compassicons[relativeteam] = shader; - updatecompassicons(); -} - -set3dicon( relativeteam, shader ) -{ - self.worldicons[relativeteam] = shader; - updateworldicons(); -} - -set3duseicon( relativeteam, shader ) -{ - self.worlduseicons[relativeteam] = shader; -} - -set3diswaypoint( relativeteam, waypoint ) -{ - self.worldiswaypoint[relativeteam] = waypoint; -} - -setcarryicon( shader ) -{ - self.carryicon = shader; -} - -setvisiblecarriermodel( visiblemodel ) -{ - self.visiblecarriermodel = visiblemodel; -} - -getvisiblecarriermodel() -{ - return self.visiblecarriermodel; -} - -destroyobject( deletetrigger, forcehide ) -{ - if ( !isdefined( forcehide ) ) - forcehide = 1; - - self disableobject( forcehide ); - - foreach ( visual in self.visuals ) - { - visual hide(); - visual delete(); - } - - self.trigger notify( "destroyed" ); - - if ( is_true( deletetrigger ) ) - self.trigger delete(); - else - self.trigger triggeron(); -} - -disableobject( forcehide ) -{ - self notify( "disabled" ); - - if ( self.type == "carryObject" || isdefined( forcehide ) && forcehide ) - { - if ( isdefined( self.carrier ) ) - self.carrier takeobject( self ); - - for ( index = 0; index < self.visuals.size; index++ ) - self.visuals[index] hide(); - } - - self.trigger triggeroff(); - self setvisibleteam( "none" ); -} - -enableobject( forceshow ) -{ - if ( self.type == "carryObject" || isdefined( forceshow ) && forceshow ) - { - for ( index = 0; index < self.visuals.size; index++ ) - self.visuals[index] show(); - } - - self.trigger triggeron(); - self setvisibleteam( "any" ); -} - -getrelativeteam( team ) -{ - if ( self.ownerteam == "any" ) - return "friendly"; - - if ( team == self.ownerteam ) - return "friendly"; - else if ( team == getenemyteam( self.ownerteam ) ) - return "enemy"; - else - return "neutral"; -} - -isfriendlyteam( team ) -{ - if ( !level.teambased ) - return true; - - if ( self.ownerteam == "any" ) - return true; - - if ( self.ownerteam == team ) - return true; - - return false; -} - -caninteractwith( player ) -{ - team = player.pers["team"]; - - switch ( self.interactteam ) - { - case "none": - return false; - case "any": - return true; - case "friendly": - if ( level.teambased ) - { - if ( team == self.ownerteam ) - return true; - else - return false; - } - else if ( player == self.ownerteam ) - return true; - else - return false; - case "enemy": - if ( level.teambased ) - { - if ( team != self.ownerteam ) - return true; - else if ( isdefined( self.decayprogress ) && self.decayprogress && self.curprogress > 0 ) - return true; - else - return false; - } - else if ( player != self.ownerteam ) - return true; - else - return false; - default: -/# - assert( 0, "invalid interactTeam" ); -#/ - return false; - } -} - -isteam( team ) -{ - if ( team == "neutral" ) - return true; - - if ( isdefined( level.teams[team] ) ) - return true; - - if ( team == "any" ) - return true; - - if ( team == "none" ) - return true; - - return false; -} - -isrelativeteam( relativeteam ) -{ - if ( relativeteam == "friendly" ) - return true; - - if ( relativeteam == "enemy" ) - return true; - - if ( relativeteam == "any" ) - return true; - - if ( relativeteam == "none" ) - return true; - - return false; -} - -getenemyteam( team ) -{ - if ( team == "neutral" ) - return "none"; - else if ( team == "allies" ) - return "axis"; - else - return "allies"; -} - -getnextobjid() -{ - nextid = 0; - - if ( level.releasedobjectives.size > 0 ) - { - nextid = level.releasedobjectives[level.releasedobjectives.size - 1]; - level.releasedobjectives[level.releasedobjectives.size - 1] = undefined; - } - else - { - nextid = level.numgametypereservedobjectives; - level.numgametypereservedobjectives++; - } - -/# - if ( nextid >= 32 ) - println( "^3SCRIPT WARNING: Ran out of objective IDs" ); -#/ - - if ( nextid > 31 ) - nextid = 31; - - return nextid; -} - -releaseobjid( objid ) -{ -/# - assert( objid < level.numgametypereservedobjectives ); -#/ - - for ( i = 0; i < level.releasedobjectives.size; i++ ) - { - if ( objid == level.releasedobjectives[i] && objid == 31 ) - return; - -/# - assert( objid != level.releasedobjectives[i] ); -#/ - } - - level.releasedobjectives[level.releasedobjectives.size] = objid; -} - -getlabel() -{ - label = self.trigger.script_label; - - if ( !isdefined( label ) ) - { - label = ""; - return label; - } - - if ( label[0] != "_" ) - return "_" + label; - - return label; -} - -mustmaintainclaim( enabled ) -{ - self.mustmaintainclaim = enabled; -} - -cancontestclaim( enabled ) -{ - self.cancontestclaim = enabled; -} - -setflags( flags ) -{ - objective_setgamemodeflags( self.objectiveid, flags ); -} - -getflags( flags ) -{ - return objective_getgamemodeflags( self.objectiveid ); -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globalentities.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_globalentities.gsc deleted file mode 100644 index 592d38c..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globalentities.gsc +++ /dev/null @@ -1,2 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic.gsc deleted file mode 100644 index 77a1374..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic.gsc +++ /dev/null @@ -1,3206 +0,0 @@ -#include maps/mp/gametypes/_hostmigration; -#include maps/mp/gametypes/_dev; -#include maps/mp/_multi_extracam; -#include maps/mp/gametypes/_friendicons; -#include maps/mp/_bb; -#include maps/mp/gametypes/_battlechatter_mp; -#include maps/mp/gametypes/_healthoverlay; -#include maps/mp/gametypes/_damagefeedback; -#include maps/mp/teams/_teams; -#include maps/mp/gametypes/_menus; -#include maps/mp/_decoy; -#include maps/mp/gametypes/_spawnlogic; -#include maps/mp/gametypes/_gameobjects; -#include maps/mp/gametypes/_objpoints; -#include maps/mp/gametypes/_spectating; -#include maps/mp/gametypes/_deathicons; -#include maps/mp/gametypes/_shellshock; -#include maps/mp/gametypes/_killcam; -#include maps/mp/gametypes/_scoreboard; -#include maps/mp/gametypes/_weaponobjects; -#include maps/mp/gametypes/_clientids; -#include maps/mp/gametypes/_serversettings; -#include maps/mp/_challenges; -#include maps/mp/_music; -#include maps/mp/gametypes/_weapons; -#include maps/mp/gametypes/_globallogic_player; -#include maps/mp/_demo; -#include maps/mp/killstreaks/_killstreaks; -#include maps/mp/gametypes/_wager; -#include maps/mp/gametypes/_persistence; -#include maps/mp/gametypes/_hud; -#include maps/mp/gametypes/_globallogic_utils; -#include maps/mp/bots/_bot; -#include maps/mp/gametypes/_hud_message; -#include maps/mp/gametypes/_globallogic_defaults; -#include maps/mp/gametypes/_globallogic_score; -#include maps/mp/gametypes/_globallogic_spawn; -#include maps/mp/_gamerep; -#include maps/mp/_gameadvertisement; -#include maps/mp/gametypes/_globallogic_audio; -#include maps/mp/gametypes/_class; -#include maps/mp/gametypes/_globallogic_ui; -#include maps/mp/gametypes/_tweakables; -#include common_scripts/utility; -#include maps/mp/_busing; -#include maps/mp/_burnplayer; -#include maps/mp/gametypes/_hud_util; -#include maps/mp/_utility; - - -init() //checked matches bo3 _globallogic.gsc within reason -{ - - // hack to allow maps with no scripts to run correctly - if ( !isDefined( level.tweakablesInitialized ) ) - maps\mp\gametypes\_tweakables::init(); - - init_session_mode_flags(); - - level.splitscreen = isSplitScreen(); - level.xenon = (GetDvar( "xenonGame") == "true"); - level.ps3 = (GetDvar( "ps3Game") == "true"); - level.wiiu = (GetDvar( "wiiuGame") == "true"); - - level.onlineGame = SessionModeIsOnlineGame(); - level.systemlink = sessionmodeissystemlink(); - if ( level.xenon || level.ps3 || level.wiiu ) - { - level.console = 1; - } - else - { - level.console = 0; - } - - if ( !ispregame() ) - { - level.rankedMatch = GameModeIsUsingXP(); - } - level.leagueMatch = GameModeIsMode( level.GAMEMODE_LEAGUE_MATCH ); - - level.contractsEnabled = !GetGametypeSetting( "disableContracts" ); - - if ( GameModeIsMode( level.GAMEMODE_BASIC_TRAINING ) ) - { - level.contractsEnabled = false; - } - /* - /# - if ( GetDvarint( "scr_forcerankedmatch" ) == 1 ) - level.rankedMatch = true; - #/ - */ - level.script = toLower( GetDvar( "mapname" ) ); - level.gametype = toLower( GetDvar( "g_gametype" ) ); - - level.teamBased = false; - level.teamCount = GetGametypeSetting( "teamCount" ); - level.multiTeam = ( level.teamCount > 2 ); - - if ( SessionModeIsZombiesGame() ) - { - level.zombie_team_index = level.teamCount + 1; - if ( 2 == level.zombie_team_index ) - { - level.zombie_team = "axis"; - } - else - { - level.zombie_team = "team" + level.zombie_team_index; - } - } - - // used to loop through all valid playing teams ( not spectator ) - // can also be used to check if a team is valid ( isdefined( level.teams[team] ) ) - // NOTE: added in the same order they are defined in code - level.teams = []; - level.teamIndex = []; - - teamCount = level.teamCount; - - level.teams[ "allies" ] = "allies"; - level.teams[ "axis" ] = "axis"; - - level.teamIndex[ "neutral" ] = 0; // Neutral team set to 0 so that it can be used by objectives - level.teamIndex[ "allies" ] = 1; - level.teamIndex[ "axis" ] = 2; - - for( teamIndex = 3; teamIndex <= teamCount; teamIndex++ ) - { - level.teams[ "team" + teamIndex ] = "team" + teamIndex; - level.teamIndex[ "team" + teamIndex ] = teamIndex; - } - - level.overrideTeamScore = false; - level.overridePlayerScore = false; - level.displayHalftimeText = false; - level.displayRoundEndText = true; - - level.endGameOnScoreLimit = true; - level.endGameOnTimeLimit = true; - level.scoreRoundBased = false; - level.resetPlayerScoreEveryRound = false; - - level.gameForfeited= false; - level.forceAutoAssign = false; - - level.halftimeType = "halftime"; - level.halftimeSubCaption = &"MP_SWITCHING_SIDES_CAPS"; - - level.lastStatusTime = 0; - level.wasWinning = []; - - level.lastSlowProcessFrame = 0; - - level.placement = []; - foreach( team in level.teams ) - { - level.placement[team] = []; - } - level.placement["all"] = []; - - level.postRoundTime = 7.0;//Kevin Sherwood changed to 9 to have enough time for music stingers - - level.inOvertime = false; - - level.defaultOffenseRadius = 560; - - level.dropTeam = GetDvarint( "sv_maxclients" ); - - level.inFinalKillcam = false; - - maps\mp\gametypes\_globallogic_ui::init(); - - registerDvars(); - maps\mp\gametypes\_class::initPerkDvars(); - - level.oldschool = ( GetDvarint( "scr_oldschool" ) == 1 ); - if ( level.oldschool ) - { - logString( "game mode: oldschool" ); - - SetDvar( "jump_height", 64 ); - SetDvar( "jump_slowdownEnable", 0 ); - SetDvar( "bg_fallDamageMinHeight", 256 ); - SetDvar( "bg_fallDamageMaxHeight", 512 ); - SetDvar( "player_clipSizeMultiplier", 2.0 ); - } - - precacheModel( "tag_origin" ); - precacheRumble( "dtp_rumble" ); - precacheRumble( "slide_rumble" ); - - precache_mp_leaderboards(); - - // sets up the flame fx - maps\mp\_burnplayer::initBurnPlayer(); - - if ( !isDefined( game["tiebreaker"] ) ) - game["tiebreaker"] = false; - - maps\mp\gametypes\_globallogic_audio::registerDialogGroup( "introboost", true ); - maps\mp\gametypes\_globallogic_audio::registerDialogGroup( "status", true ); - - thread maps\mp\_gameadvertisement::init(); - thread maps\mp\_gamerep::init(); - level.disablechallenges = 0; - if(level.leaguematch ) - { - level.disablechallenges = 1; - } - level.disablestattracking = 0; -} - -registerDvars() //checked matches bo3 _globallogic.gsc within reason -{ - if ( GetDvar( "scr_oldschool" ) == "" ) - SetDvar( "scr_oldschool", "0" ); - - makeDvarServerInfo( "scr_oldschool" ); - - if ( GetDvar( "ui_guncycle" ) == "" ) - SetDvar( "ui_guncycle", 0 ); - - makedvarserverinfo( "ui_guncycle" ); - - if ( GetDvar( "ui_weapon_tiers" ) == "" ) - SetDvar( "ui_weapon_tiers", 0 ); - makedvarserverinfo( "ui_weapon_tiers" ); - - SetDvar( "ui_text_endreason", ""); - makeDvarServerInfo( "ui_text_endreason", "" ); - - setMatchFlag( "bomb_timer", 0 ); - - setMatchFlag( "enable_popups", 1 ); - - setMatchFlag( "pregame", isPregame() ); - - if ( GetDvar( "scr_vehicle_damage_scalar" ) == "" ) - SetDvar( "scr_vehicle_damage_scalar", "1" ); - - level.vehicleDamageScalar = GetDvarfloat( "scr_vehicle_damage_scalar"); - - level.fire_audio_repeat_duration = GetDvarint( "fire_audio_repeat_duration" ); - level.fire_audio_random_max_duration = GetDvarint( "fire_audio_random_max_duration" ); - teamname = getcustomteamname(level.teamindex["allies"]); - if(isdefined(teamname)) - { - setdvar("g_customTeamName_Allies", teamname); - } - else - { - setdvar("g_customTeamName_Allies", ""); - } - teamname = getcustomteamname(level.teamindex["axis"]); - if(isdefined(teamname)) - { - setdvar("g_customTeamName_Axis", teamname); - } - else - { - setdvar("g_customTeamName_Axis", ""); - } -} - -blank( arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10 ) //checked matches bo3 _globallogic.gsc within reason -{ -} - -SetupCallbacks() //checked matches bo3 _globallogic.gsc within reason -{ - level.spawnPlayer = maps\mp\gametypes\_globallogic_spawn::spawnPlayer; - level.spawnPlayerPrediction = maps\mp\gametypes\_globallogic_spawn::spawnPlayerPrediction; - level.spawnClient = maps\mp\gametypes\_globallogic_spawn::spawnClient; - level.spawnSpectator = maps\mp\gametypes\_globallogic_spawn::spawnSpectator; - level.spawnIntermission = maps\mp\gametypes\_globallogic_spawn::spawnIntermission; - level.onPlayerScore = maps\mp\gametypes\_globallogic_score::default_onPlayerScore; - level.onTeamScore = maps\mp\gametypes\_globallogic_score::default_onTeamScore; - - level.waveSpawnTimer = ::waveSpawnTimer; - level.spawnMessage = maps\mp\gametypes\_globallogic_spawn::default_spawnMessage; - - level.onSpawnPlayer = ::blank; - level.onSpawnPlayerUnified = ::blank; - level.onSpawnSpectator = maps\mp\gametypes\_globallogic_defaults::default_onSpawnSpectator; - level.onSpawnIntermission = maps\mp\gametypes\_globallogic_defaults::default_onSpawnIntermission; - level.onRespawnDelay = ::blank; - - level.onForfeit = maps\mp\gametypes\_globallogic_defaults::default_onForfeit; - level.onTimeLimit = maps\mp\gametypes\_globallogic_defaults::default_onTimeLimit; - level.onScoreLimit = maps\mp\gametypes\_globallogic_defaults::default_onScoreLimit; - level.onAliveCountChange = maps\mp\gametypes\_globallogic_defaults::default_onAliveCountChange; - level.onDeadEvent = maps\mp\gametypes\_globallogic_defaults::default_onDeadEvent; - level.onOneLeftEvent = maps\mp\gametypes\_globallogic_defaults::default_onOneLeftEvent; - level.giveTeamScore = maps\mp\gametypes\_globallogic_score::giveTeamScore; - level.onLastTeamAliveEvent = undefined; - - level.getTimeLimit = maps\mp\gametypes\_globallogic_defaults::default_getTimeLimit; - level.getTeamKillPenalty = maps\mp\gametypes\_globallogic_defaults::default_getTeamKillPenalty; - level.getTeamKillScore = maps\mp\gametypes\_globallogic_defaults::default_getTeamKillScore; - - level.isKillBoosting = maps\mp\gametypes\_globallogic_score::default_isKillBoosting; - - level._setTeamScore = maps\mp\gametypes\_globallogic_score::_setTeamScore; - level._setPlayerScore = maps\mp\gametypes\_globallogic_score::_setPlayerScore; - - level._getTeamScore = maps\mp\gametypes\_globallogic_score::_getTeamScore; - level._getPlayerScore = maps\mp\gametypes\_globallogic_score::_getPlayerScore; - - level.onPrecacheGametype = ::blank; - level.onStartGameType = ::blank; - level.onPlayerConnect = ::blank; - level.onPlayerDisconnect = ::blank; - level.onPlayerDamage = ::blank; - level.onPlayerKilled = ::blank; - level.onPlayerKilledExtraUnthreadedCBs = []; //< Array of other CB function pointers - - level.onTeamOutcomeNotify = maps\mp\gametypes\_hud_message::teamOutcomeNotify; - level.onOutcomeNotify = maps\mp\gametypes\_hud_message::outcomeNotify; - level.onTeamWagerOutcomeNotify = maps\mp\gametypes\_hud_message::teamWagerOutcomeNotify; - level.onWagerOutcomeNotify = maps\mp\gametypes\_hud_message::wagerOutcomeNotify; - level.setMatchScoreHUDElemForTeam = maps\mp\gametypes\_hud_message::setMatchScoreHUDElemForTeam; - level.onEndGame = ::blank; - level.onRoundEndGame = maps\mp\gametypes\_globallogic_defaults::default_onRoundEndGame; - level.onMedalAwarded = ::blank; - - maps\mp\gametypes\_globallogic_ui::SetupCallbacks(); -} - -precache_mp_leaderboards() //checked matches bo3 _globallogic.gsc within reason -{ - if(maps/mp/bots/_bot::is_bot_ranked_match()) - { - return; - } - if( SessionModeIsZombiesGame() ) - return; - - if( !level.rankedMatch ) - return; - - mapname = GetDvar( "mapname" ); - - globalLeaderboards = "LB_MP_GB_XPPRESTIGE LB_MP_GB_TOTALXP_AT LB_MP_GB_TOTALXP_LT LB_MP_GB_WINS_AT LB_MP_GB_WINS_LT LB_MP_GB_KILLS_AT LB_MP_GB_KILLS_LT LB_MP_GB_ACCURACY_AT LB_MP_GB_ACCURACY_LT"; - careerleaderboard = ""; - switch(level.gametype) - { - case "gun": - case "oic": - case "sas": - case "shrp": - break; - default: - careerleaderboard = " LB_MP_GB_SCOREPERMINUTE"; - break; - } - - gamemodeleaderboard = " LB_MP_GM_" + level.gametype; - gamemodeleaderboardext = " LB_MP_GM_" + level.gametype + "_EXT"; - gamemodehcleaderboard = ""; - gamemodehcleaderboardext = ""; - - hardcoremode = getgametypesetting("hardcoreMode"); - if(isdefined(hardcoremode) && hardcoremode) - { - gamemodehcleaderboard = gamemodeleaderboard + "_HC"; - gamemodehcleaderboardext = gamemodeleaderboardext + "_HC"; - } - mapLeaderboard = " LB_MP_MAP_" + getsubstr( mapname, 3, mapname.size ); // strip the MP_ from the map name - - precacheleaderboards(globalleaderboards + careerleaderboard + gamemodeleaderboard + gamemodeleaderboardext + gamemodehcleaderboard + gamemodehcleaderboardext + mapleaderboard); -} - -compareTeamByGameStat( gameStat, teamA, teamB, previous_winner_score ) //checked matches bo3 _globallogic.gsc within reason -{ - winner = undefined; - - if ( teamA == "tie" ) - { - winner = "tie"; - - if ( previous_winner_score < game[gameStat][teamB] ) - winner = teamB; - } - else if ( game[gameStat][teamA] == game[gameStat][teamB] ) - winner = "tie"; - else if ( game[gameStat][teamB] > game[gameStat][teamA] ) - winner = teamB; - else - winner = teamA; - - return winner; -} - -determineTeamWinnerByGameStat( gameStat ) //checked matches bo3 _globallogic.gsc within reason -{ - teamKeys = GetArrayKeys(level.teams); - winner = teamKeys[0]; - previous_winner_score = game[gameStat][winner]; - - for ( teamIndex = 1; teamIndex < teamKeys.size; teamIndex++ ) - { - winner = compareTeamByGameStat( gameStat, winner, teamKeys[teamIndex], previous_winner_score); - - if ( winner != "tie" ) - { - previous_winner_score = game[gameStat][winner]; - } - } - - return winner; -} - -compareTeamByTeamScore( teamA, teamB, previous_winner_score ) //checked matches bo3 _globallogic.gsc within reason -{ - winner = undefined; - teamBScore = [[level._getTeamScore]]( teamB ); - - if ( teamA == "tie" ) - { - winner = "tie"; - - if ( previous_winner_score < teamBScore ) - winner = teamB; - - return winner; - } - - teamAScore = [[level._getTeamScore]]( teamA ); - - if ( teamBScore == teamAScore ) - winner = "tie"; - else if ( teamBScore > teamAScore ) - winner = teamB; - else - winner = teamA; - - return winner; -} - -determineTeamWinnerByTeamScore( ) //checked matches bo3 _globallogic.gsc within reason -{ - teamKeys = GetArrayKeys(level.teams); - winner = teamKeys[0]; - previous_winner_score = [[level._getTeamScore]]( winner ); - - for ( teamIndex = 1; teamIndex < teamKeys.size; teamIndex++ ) - { - winner = compareTeamByTeamScore( winner, teamKeys[teamIndex], previous_winner_score); - - if ( winner != "tie" ) - { - previous_winner_score = [[level._getTeamScore]]( winner ); - } - } - - return winner; -} - -forceEnd(hostsucks) //checked matches bo3 _globallogic.gsc within reason -{ - if (!isDefined(hostsucks)) - hostsucks = false; - - if ( level.hostForcedEnd || level.forcedEnd ) - return; - - winner = undefined; - - if ( level.teamBased ) - { - winner = determineTeamWinnerByGameStat("teamScores"); - maps\mp\gametypes\_globallogic_utils::logTeamWinString( "host ended game", winner ); - } - else - { - winner = maps\mp\gametypes\_globallogic_score::getHighestScoringPlayer(); - if ( isDefined( winner ) ) - logString( "host ended game, win: " + winner.name ); - else - logString( "host ended game, tie" ); - } - - level.forcedEnd = true; - level.hostForcedEnd = true; - - if (hostsucks) - { - endString = &"MP_HOST_SUCKS"; - } - else - { - if ( level.splitscreen ) - endString = &"MP_ENDED_GAME"; - else - endString = &"MP_HOST_ENDED_GAME"; - } - - setMatchFlag( "disableIngameMenu", 1 ); - makeDvarServerInfo( "ui_text_endreason", endString ); - SetDvar( "ui_text_endreason", endString ); - thread endGame( winner, endString ); -} - -killserverPc() //checked matches bo3 _globallogic.gsc within reason -{ - if ( level.hostForcedEnd || level.forcedEnd ) - return; - - winner = undefined; - - if ( level.teamBased ) - { - winner = determineTeamWinnerByGameStat("teamScores"); - maps\mp\gametypes\_globallogic_utils::logTeamWinString( "host ended game", winner ); - } - else - { - winner = maps\mp\gametypes\_globallogic_score::getHighestScoringPlayer(); - if ( isDefined( winner ) ) - logString( "host ended game, win: " + winner.name ); - else - logString( "host ended game, tie" ); - } - - level.forcedEnd = true; - level.hostForcedEnd = true; - - level.killserver = true; - - endString = &"MP_HOST_ENDED_GAME"; - - /* -/# - PrintLn("kill server; ending game\n"); -#/ - */ - thread endGame( winner, endString ); -} - -atleasttwoteams() //checked changed to match bo3 _globallogic.gsc -{ - valid_count = 0; - - foreach ( team in level.teams ) - { - if ( level.playerCount[team] != 0 ) - { - valid_count++; - } - } - - if ( valid_count < 2 ) - { - return false; - } - - return true; -} - -checkIfTeamForfeits( team ) //checked matches bo3 _globallogic.gsc within reason -{ - if(!game["everExisted"][team]) - { - return 0; - } - if ( level.playerCount[team] < 1 && totalPlayerCount() > 0 ) - { - return true; - } - - return false; -} - -checkForAnyTeamForfeit() //checked does not match bo3 _globallogic.gsc did not change -{ - forfeit_count = 0; - valid_team = undefined; - foreach(team in level.teams) - { - if(checkifteamforfeits(team)) - { - forfeit_count++; - if(!level.multiteam) - { - thread [[level.onforfeit]](team); - return 1; - } - } - else - { - valid_team = team; - } - } - if(level.multiteam && forfeit_count == level.teams.size - 1) - { - thread [[level.onforfeit]](valid_team); - return 1; - } - return 0; -} - -doSpawnQueueUpdates() //checked matches bo3 _globallogic.gsc within reason -{ - foreach( team in level.teams ) - { - if ( level.spawnQueueModified[team] ) - { - [[level.onAliveCountChange]]( team ); - } - } -} - -isTeamAllDead( team ) //checked matches bo3 _globallogic.gsc within reason -{ - if ( level.everExisted[team] && !level.aliveCount[team] && !level.playerLives[team] ) - { - return 1; - } - return 0; -} - -areAllTeamsDead( ) //checked matches bo3 _globallogic.gsc within reason -{ - foreach( team in level.teams ) - { - // if team was alive and now they are not - if ( !isTeamAllDead( team ) ) - { - return false; - } - } - - return true; -} - -allDeadTeamCount( ) //checked does not exist in bo3 _globallogic.gsc leaving in -{ - count = 0; - foreach( team in level.teams ) - { - // if team was alive and now they are not - if ( isTeamAllDead( team ) ) - { - count++; - } - } - - return count; -} - -getlastteamalive() -{ - count = 0; - everexistedcount = 0; - aliveteam = undefined; - foreach(team in level.teams) - { - if(level.everexisted[team]) - { - if(!isteamalldead(team)) - { - aliveteam = team; - count++; - } - everexistedcount++; - } - } - if(everexistedcount > 1 && count == 1) - { - return aliveteam; - } - return undefined; -} - -doDeadEventUpdates() //checked changed to match bo3 _globallogic.gsc -{ - if ( level.teamBased ) - { - // if all teams were alive and now they are all dead in the same instance - if ( areAllTeamsDead( ) ) - { - [[level.onDeadEvent]]( "all" ); - return true; - } - if ( !isdefined( level.onDeadEvent ) ) - { - lastTeamAlive = getLastTeamAlive(); - if ( isdefined( lastTeamAlive ) ) - { - [[level.onLastTeamAliveEvent]]( lastTeamAlive ); - return true; - } - } - else - { - foreach( team in level.teams ) - { - // if team was alive and now they are not - if ( isTeamAllDead( team ) ) - { - [[level.onDeadEvent]]( team ); - return true; - } - } - } - } - else - { - // everyone is dead - if ( totalAliveCount() == 0 && totalPlayerLives() == 0 && level.maxPlayerCount > 1 ) - { - [[ level.onDeadEvent ]]( "all" ); - return true; - } - } - - return false; -} - -isOnlyOneLeftAliveOnTeam( team ) //checked matches bo3 _globallogic.gsc within reason -{ - if ( level.lastAliveCount[team] > 1 && level.aliveCount[team] == 1 && level.playerLives[team] == 1 ) - { - return 1; - } - return 0; -} - - -doOneLeftEventUpdates() //checked matches bo3 _globallogic.gsc within reason -{ - if ( level.teamBased ) - { - foreach( team in level.teams ) - { - // one "team" left - if ( isOnlyOneLeftAliveOnTeam( team ) ) - { - [[level.onOneLeftEvent]]( team ); - return true; - } - } - } - else - { - // last man standing - if ( (totalAliveCount() == 1) && (totalPlayerLives() == 1) && level.maxPlayerCount > 1 ) - { - [[level.onOneLeftEvent]]( "all" ); - return true; - } - } - - return false; -} - -updateGameEvents() //checked matches bo3 _globallogic.gsc within reason -{ - /* -/# - if( GetDvarint( "scr_hostmigrationtest" ) == 1 ) - { - return; - } -#/ - */ - if ( level.rankedMatch && !level.inGracePeriod || level.wagerMatch && !level.inGracePeriod || level.leagueMatch && !level.inGracePeriod ) - { - if ( level.teamBased ) - { - if (!level.gameForfeited ) - { - if( game["state"] == "playing" && checkForAnyTeamForfeit() ) - { - return; - } - } - else // level.gameForfeited==true - { - if ( atleasttwoteams() ) - { - level.gameForfeited = false; - level notify( "abort forfeit" ); - } - } - } - else - { - if (!level.gameForfeited) - { - if ( totalPlayerCount() == 1 && level.maxPlayerCount > 1 ) - { - thread [[level.onForfeit]](); - return; - } - } - else // level.gameForfeited==true - { - if ( totalPlayerCount() > 1 ) - { - level.gameForfeited = false; - level notify( "abort forfeit" ); - } - } - } - } - - if ( !level.playerQueuedRespawn && !level.numLives && !level.inOverTime ) - return; - - if ( level.inGracePeriod ) - return; - - if ( level.playerQueuedRespawn ) - { - doSpawnQueueUpdates(); - } - - if ( doDeadEventUpdates() ) - return; - - if ( doOneLeftEventUpdates() ) - return; -} - - -matchStartTimer() //checked does not match bo3 _globallogic.gsc did not change -{ - visionSetNaked( "mpIntro", 0 ); - - matchStartText = createServerFontString( "objective", 1.5 ); - matchStartText setPoint( "CENTER", "CENTER", 0, -40 ); - matchStartText.sort = 1001; - matchStartText setText( game["strings"]["waiting_for_teams"] ); - matchStartText.foreground = false; - matchStartText.hidewheninmenu = true; - - waitForPlayers(); - matchStartText setText( game["strings"]["match_starting_in"] ); - - matchStartTimer = createServerFontString( "objective", 2.2 ); - matchStartTimer setPoint( "CENTER", "CENTER", 0, 0 ); - matchStartTimer.sort = 1001; - matchStartTimer.color = (1,1,0); - matchStartTimer.foreground = false; - matchStartTimer.hidewheninmenu = true; - - - //Since the scaling is disabled, we cant see the pulse effect by scaling. We need to change keep switching between - //some small and big font to get the pulse effect. This will be fixed when we have fixed set of different sizes fonts. - - //matchStartTimer maps\mp\gametypes\_hud::fontPulseInit(); - - countTime = int( level.prematchPeriod ); - - if ( countTime >= 2 ) - { - while ( countTime > 0 && !level.gameEnded ) - { - matchStartTimer setValue( countTime ); - //matchStartTimer thread maps\mp\gametypes\_hud::fontPulse( level ); - if ( countTime == 2 ) - visionSetNaked( GetDvar( "mapname" ), 3.0 ); - countTime--; - foreach(player in level.players) - { - player playlocalsound("uin_start_count_down"); - } - wait ( 1.0 ); - } - } - else - { - visionSetNaked( GetDvar( "mapname" ), 1.0 ); - } - - matchStartTimer destroyElem(); - matchStartText destroyElem(); -} - -matchStartTimerSkip() //checked does not match bo3 _globallogic.gsc did not change -{ - if ( !isPregame() ) - visionSetNaked( GetDvar( "mapname" ), 0 ); - else - visionSetNaked( "mpIntro", 0 ); -} - -notifyTeamWaveSpawn( team, time ) //checked matches bo3 _globallogic.gsc within reason -{ - if ( time - level.lastWave[team] > (level.waveDelay[team] * 1000) ) - { - level notify ( "wave_respawn_" + team ); - level.lastWave[team] = time; - level.wavePlayerSpawnIndex[team] = 0; - } -} - -waveSpawnTimer() //checked matches bo3 _globallogic.gsc within reason -{ - level endon( "game_ended" ); - - while ( game["state"] == "playing" ) - { - time = getTime(); - - foreach( team in level.teams ) - { - notifyTeamWaveSpawn( team, time ); - } - wait ( 0.05 ); - } -} - - -hostIdledOut() //checked matches bo3 _globallogic.gsc within reason -{ - hostPlayer = getHostPlayer(); - /* -/# - if( GetDvarint( "scr_writeconfigstrings" ) == 1 || GetDvarint( "scr_hostmigrationtest" ) == 1 ) - return false; -#/ - */ - // host never spawned - if ( isDefined( hostPlayer ) && !hostPlayer.hasSpawned && !isDefined( hostPlayer.selectedClass ) ) - return true; - - return false; -} - -IncrementMatchCompletionStat( gameMode, playedOrHosted, stat ) //checked matches bo3 _globallogic.gsc within reason -{ - self AddDStat( "gameHistory", gameMode, "modeHistory", playedOrHosted, stat, 1 ); -} - -SetMatchCompletionStat( gameMode, playedOrHosted, stat ) //checked matches bo3 _globallogic.gsc within reason -{ - self SetDStat( "gameHistory", gameMode, "modeHistory", playedOrHosted, stat, 1 ); -} - -GetCurrentGameMode() //checked does not exist in bo3 _globallogic.gsc -{ - if( GameModeIsMode( level.GAMEMODE_LEAGUE_MATCH ) ) - return "leaguematch"; - - return "publicmatch"; -} - -getteamscoreratio() -{ - playerteam = self.pers["team"]; - score = getteamscore(playerteam); - otherteamscore = 0; - foreach(team in level.teams) - { - if(team == playerteam) - { - } - else - { - otherteamscore = otherteamscore + getteamscore(team); - } - } - if(level.teams.size > 1) - { - otherteamscore = otherteamscore / level.teams.size - 1; - } - if(otherteamscore != 0) - { - return float(score) / float(otherteamscore); - } - return score; -} - -gethighestscore() -{ - highestscore = -999999999; - for(index = 0; index < level.players.size; index++) - { - player = level.players[index]; - if(player.score > highestscore) - { - highestscore = player.score; - } - } - return highestscore; -} - -getnexthighestscore(score) -{ - highestscore = -999999999; - for(index = 0; index < level.players.size; index++) - { - player = level.players[index]; - if(player.score >= score) - { - } - else - { - if(player.score > highestscore) - { - highestscore = player.score; - } - } - } - return highestscore; -} - -sendAfterActionReport() //checked matches bo3 _globallogic.gsc within reason -{ - /* -/# - if( GetDvarint( "scr_writeconfigstrings" ) == 1 ) - return; -#/ - */ - if ( !level.onlineGame ) - { - return; - } - - if( isPregame() ) - return; - - if ( SessionModeIsZombiesGame() ) - { - return; - } - - //Send After Action Report information to the client - index = 0; - while ( index < level.players.size ) - { - player = level.players[index]; - - if ( player is_bot() ) - { - index++; - continue; - } - - //Find the Nemesis for each player - nemesis = player.pers["nemesis_name"]; - - if( !isDefined( player.pers["killed_players"][nemesis] ) ) - player.pers["killed_players"][nemesis] = 0; - if( !isDefined( player.pers["killed_by"][nemesis] ) ) - player.pers["killed_by"][nemesis] = 0; - - //Get the kill to death spread of the player - spread = player.kills - player.deaths; - - if( player.pers["cur_kill_streak"] > player.pers["best_kill_streak"] ) - player.pers["best_kill_streak"] = player.pers["cur_kill_streak"]; - - if ( level.rankedMatch || level.wagerMatch || level.leagueMatch ) - player maps\mp\gametypes\_persistence::setAfterActionReportStat( "privateMatch", 0 ); - else - player maps\mp\gametypes\_persistence::setAfterActionReportStat( "privateMatch", 1 ); - - player setNemesisXuid( player.pers["nemesis_xuid"] ); - player maps\mp\gametypes\_persistence::setAfterActionReportStat( "nemesisName", nemesis ); - player maps\mp\gametypes\_persistence::setAfterActionReportStat( "nemesisRank", player.pers["nemesis_rank"] ); - player maps\mp\gametypes\_persistence::setAfterActionReportStat( "nemesisRankIcon", player.pers["nemesis_rankIcon"] ); - player maps\mp\gametypes\_persistence::setAfterActionReportStat( "nemesisKills", player.pers["killed_players"][nemesis] ); - player maps\mp\gametypes\_persistence::setAfterActionReportStat( "nemesisKilledBy", player.pers["killed_by"][nemesis] ); - player maps\mp\gametypes\_persistence::setAfterActionReportStat( "bestKillstreak", player.pers["best_kill_streak"] ); - player maps\mp\gametypes\_persistence::setAfterActionReportStat( "kills", player.kills ); - player maps\mp\gametypes\_persistence::setAfterActionReportStat( "deaths", player.deaths ); - player maps\mp\gametypes\_persistence::setAfterActionReportStat( "headshots", player.headshots ); - player maps\mp\gametypes\_persistence::setAfterActionReportStat( "score", player.score ); - player maps\mp\gametypes\_persistence::setAfterActionReportStat( "xpEarned", int( player.pers["summary"]["xp"] ) ); - player maps\mp\gametypes\_persistence::setAfterActionReportStat( "cpEarned", int( player.pers["summary"]["codpoints"] ) ); - player maps\mp\gametypes\_persistence::setAfterActionReportStat( "miscBonus", int( player.pers["summary"]["challenge"] + player.pers["summary"]["misc"] ) ); - player maps\mp\gametypes\_persistence::setAfterActionReportStat( "matchBonus", int( player.pers["summary"]["match"] ) ); - player maps\mp\gametypes\_persistence::setAfterActionReportStat( "demoFileID", getDemoFileID() ); - player maps\mp\gametypes\_persistence::setafteractionreportstat("leagueTeamID", player getleagueteamid()); - - teamscoreratio = player getteamscoreratio(); - scoreboardposition = getplacementforplayer(player); - if(scoreboardposition < 0) - { - scoreboardposition = level.players.size; - } - player gamehistoryfinishmatch(4, player.kills, player.deaths, player.score, scoreboardposition, teamscoreratio); - - placement = level.placement["all"]; - for ( otherPlayerIndex = 0; otherPlayerIndex < placement.size; otherPlayerIndex++ ) - { - if ( level.placement["all"][otherPlayerIndex] == player ) - { - recordPlayerStats( player, "position", otherPlayerIndex ); - } - } - - if ( level.wagerMatch ) - { - recordPlayerStats( player, "wagerPayout", player.wagerWinnings ); - player maps\mp\gametypes\_wager::setWagerAfterActionReportStats(); - player maps\mp\gametypes\_persistence::setAfterActionReportStat( "wagerMatch", 1 ); - } - else - { - player maps\mp\gametypes\_persistence::setAfterActionReportStat( "wagerMatch", 0 ); - } - player maps\mp\gametypes\_persistence::setAfterActionReportStat( "wagerMatchFailed", 0 ); - - if ( level.rankedMatch || level.wagerMatch || level.leagueMatch ) - player maps\mp\gametypes\_persistence::setAfterActionReportStat( "valid", 1 ); - - if ( IsDefined( player.pers["matchesPlayedStatsTracked"] ) ) - { - gameMode = GetCurrentGameMode(); - - player IncrementMatchCompletionStat( gameMode, "played", "completed" ); - - if ( IsDefined( player.pers["matchesHostedStatsTracked"] ) ) - { - player IncrementMatchCompletionStat( gameMode, "hosted", "completed" ); - player.pers["matchesHostedStatsTracked"] = undefined; - } - - player.pers["matchesPlayedStatsTracked"] = undefined; - } - - recordPlayerStats( player, "highestKillStreak", player.pers["best_kill_streak"] ); - recordPlayerStats( player, "numUavCalled", player maps\mp\killstreaks\_killstreaks::getKillstreakUsage("uav_used") ); - recordPlayerStats( player, "numDogsCalled", player maps\mp\killstreaks\_killstreaks::getKillstreakUsage("dogs_used") ); - recordPlayerStats( player, "numDogsKills", player.pers["dog_kills"] ); - - recordPlayerMatchEnd( player ); - RecordPlayerStats(player, "presentAtEnd", 1 ); - index++; - } -} - -gamehistoryplayerkicked() -{ - teamscoreratio = self getteamscoreratio(); - scoreboardposition = getplacementforplayer(self); - if(scoreboardposition < 0) - { - scoreboardposition = level.players.size; - } - /* - /# - /# - assert(isdefined(self.kills)); - #/ - /# - assert(isdefined(self.deaths)); - #/ - /# - assert(isdefined(self.score)); - #/ - /# - assert(isdefined(scoreboardposition)); - #/ - /# - assert(isdefined(teamscoreratio)); - #/ - #/ - */ - self gamehistoryfinishmatch(2, self.kills, self.deaths, self.score, scoreboardposition, teamscoreratio); - if(isdefined(self.pers["matchesPlayedStatsTracked"])) - { - gamemode = getcurrentgamemode(); - self incrementmatchcompletionstat(gamemode, "played", "kicked"); - self.pers["matchesPlayedStatsTracked"] = undefined; - } - uploadstats(self); - wait(1); -} - -gamehistoryplayerquit() -{ - teamscoreratio = self getteamscoreratio(); - scoreboardposition = getplacementforplayer(self); - if(scoreboardposition < 0) - { - scoreboardposition = level.players.size; - } - self gamehistoryfinishmatch(3, self.kills, self.deaths, self.score, scoreboardposition, teamscoreratio); - if(isdefined(self.pers["matchesPlayedStatsTracked"])) - { - gamemode = getcurrentgamemode(); - self incrementmatchcompletionstat(gamemode, "played", "quit"); - if(isdefined(self.pers["matchesHostedStatsTracked"])) - { - self incrementmatchcompletionstat(gamemode, "hosted", "quit"); - self.pers["matchesHostedStatsTracked"] = undefined; - } - self.pers["matchesPlayedStatsTracked"] = undefined; - } - uploadstats(self); - if(!self ishost()) - { - wait(1); - } -} - -displayRoundEnd( winner, endReasonText ) //checked matches bo3 _globallogic.gsc within reason -{ - if ( level.displayRoundEndText ) - { - if(level.teambased) - { - if ( winner == "tie" ) - { - maps\mp\_demo::gameResultBookmark( "round_result", level.teamIndex[ "neutral" ], level.teamIndex[ "neutral" ] ); - } - else - { - maps\mp\_demo::gameResultBookmark( "round_result", level.teamIndex[ winner ], level.teamIndex[ "neutral" ] ); - } - } - setmatchflag( "cg_drawSpectatorMessages", 0 ); - players = level.players; - index = 0; - while ( index < players.size ) - { - player = players[index]; - if(!waslastround()) - { - player notify("round_ended"); - } - if ( !isDefined( player.pers["team"] ) ) - { - player [[level.spawnIntermission]]( true ); - player closeMenu(); - player closeInGameMenu(); - index++; - continue; - } - - if ( level.wagerMatch ) - { - if ( level.teamBased ) - player thread [[level.onTeamWagerOutcomeNotify]]( winner, true, endReasonText ); - else - player thread [[level.onWagerOutcomeNotify]]( winner, endReasonText ); - } - else - { - if ( level.teamBased ) - { - player thread [[level.onTeamOutcomeNotify]]( winner, true, endReasonText ); - player maps\mp\gametypes\_globallogic_audio::set_music_on_player( "ROUND_END" ); - } - else - { - player thread [[level.onOutcomeNotify]]( winner, true, endReasonText ); - player maps\mp\gametypes\_globallogic_audio::set_music_on_player( "ROUND_END" ); - } - } - - player setClientUIVisibilityFlag( "hud_visible", 0 ); - player setClientUIVisibilityFlag( "g_compassShowEnemies", 0 ); - index++; - } - } - - if ( wasLastRound() ) - { - roundEndWait( level.roundEndDelay, false ); - } - else - { - thread maps\mp\gametypes\_globallogic_audio::announceRoundWinner( winner, level.roundEndDelay / 4 ); - roundEndWait( level.roundEndDelay, true ); - } -} - -displayRoundSwitch( winner, endReasonText ) //checked matches bo3 _globallogic.gsc within reason -{ - switchType = level.halftimeType; - if ( switchType == "halftime" ) - { - if ( is_true( level.nextRoundIsOvertime ) ) - { - switchType = "overtime"; - } - else - { - if ( level.roundLimit ) - { - if ( (game["roundsplayed"] * 2) == level.roundLimit ) - switchType = "halftime"; - else - switchType = "intermission"; - } - else if ( level.scoreLimit ) - { - if ( game["roundsplayed"] == (level.scoreLimit - 1) ) - switchType = "halftime"; - else - switchType = "intermission"; - } - else - { - switchType = "intermission"; - } - } - } - - leaderdialog = maps\mp\gametypes\_globallogic_audio::getRoundSwitchDialog( switchType ); - - SetMatchTalkFlag( "EveryoneHearsEveryone", 1 ); - - players = level.players; - index = 0; - while ( index < players.size ) - { - player = players[index]; - - if ( !isDefined( player.pers["team"] ) ) - { - player [[level.spawnIntermission]]( true ); - player closeMenu(); - player closeInGameMenu(); - index++; - continue; - } - - player maps\mp\gametypes\_globallogic_audio::leaderDialogOnPlayer( leaderdialog ); - player maps\mp\gametypes\_globallogic_audio::set_music_on_player( "ROUND_SWITCH" ); - - if ( level.wagerMatch ) - player thread [[level.onTeamWagerOutcomeNotify]]( switchType, true, level.halftimeSubCaption ); - else - player thread [[level.onTeamOutcomeNotify]]( switchType, false, level.halftimeSubCaption ); - player setClientUIVisibilityFlag( "hud_visible", 0 ); - index++; - } - - roundEndWait( level.halftimeRoundEndDelay, false ); -} - -displayGameEnd( winner, endReasonText ) //checked matches bo3 _globallogic.gsc within reason -{ - SetMatchTalkFlag( "EveryoneHearsEveryone", 1 ); - setmatchflag( "cg_drawSpectatorMessages", 0 ); - - if ( level.teambased ) - { - if ( winner == "tie" ) - { - maps\mp\_demo::gameResultBookmark( "game_result", level.teamIndex[ "neutral" ], level.teamIndex[ "neutral" ] ); - } - else - { - maps\mp\_demo::gameResultBookmark( "game_result", level.teamIndex[ winner ], level.teamIndex[ "neutral" ] ); - } - } - // catching gametype, since DM forceEnd sends winner as player entity, instead of string - players = level.players; - index = 0; - while ( index < players.size ) - { - player = players[index]; - - if ( !isDefined( player.pers["team"] ) ) - { - player [[level.spawnIntermission]]( true ); - player closeMenu(); - player closeInGameMenu(); - index++; - continue; - } - - if ( level.wagerMatch ) - { - if ( level.teamBased ) - player thread [[level.onTeamWagerOutcomeNotify]]( winner, false, endReasonText ); - else - player thread [[level.onWagerOutcomeNotify]]( winner, endReasonText ); - } - else - { - if ( level.teamBased ) - { - player thread [[level.onTeamOutcomeNotify]]( winner, false, endReasonText ); - } - else - { - player thread [[level.onOutcomeNotify]]( winner, false, endReasonText ); - - if ( isDefined( winner ) && player == winner ) - { - music = game["music"]["victory_" + player.team]; - player maps\mp\gametypes\_globallogic_audio::set_music_on_player( music ); - } - else if ( !level.splitScreen ) - { - player maps\mp\gametypes\_globallogic_audio::set_music_on_player( "LOSE" ); - } - } - } - - player setClientUIVisibilityFlag( "hud_visible", 0 ); - player setClientUIVisibilityFlag( "g_compassShowEnemies", 0 ); - index++; - } - - if ( level.teamBased ) - { - thread maps\mp\gametypes\_globallogic_audio::announceGameWinner( winner, level.postRoundTime / 2 ); - - players = level.players; - for ( index = 0; index < players.size; index++ ) - { - player = players[index]; - team = player.pers["team"]; - - if ( level.splitscreen ) - { - if ( winner == "tie" ) - { - player maps\mp\gametypes\_globallogic_audio::set_music_on_player( "DRAW" ); - } - else if ( winner == team ) - { - music = game["music"]["victory_" + player.team]; - player maps\mp\gametypes\_globallogic_audio::set_music_on_player( music ); - } - else - { - player maps\mp\gametypes\_globallogic_audio::set_music_on_player( "LOSE" ); - } - } - else - { - if ( winner == "tie" ) - { - player maps\mp\gametypes\_globallogic_audio::set_music_on_player( "DRAW" ); - } - else if ( winner == team ) - { - music = game["music"]["victory_" + player.team]; - player maps\mp\gametypes\_globallogic_audio::set_music_on_player( music ); - } - else - { - player maps\mp\gametypes\_globallogic_audio::set_music_on_player( "LOSE" ); - } - } - } - } - - bbPrint( "session_epilogs", "reason %s", endReasonText ); - - // tagTMR: all round data aggregates that cannot be summed from other tables post-runtime - bbPrint( "mpmatchfacts", "gametime %d winner %s killstreakcount %d", gettime(), winner, level.killstreak_counter ); - - roundEndWait( level.postRoundTime, true ); -} - -getEndReasonText() //checked matches bo3 _globallogic.gsc within reason -{ - if ( IsDefined( level.endReasonText ) ) - { - return level.endReasonText; - } - - if ( hitRoundLimit() || hitRoundWinLimit() ) - return game["strings"]["round_limit_reached"]; - else if ( hitScoreLimit() ) - return game["strings"]["score_limit_reached"]; - - if ( level.forcedEnd ) - { - if ( level.hostForcedEnd ) - return &"MP_HOST_ENDED_GAME"; - else - return &"MP_ENDED_GAME"; - } - return game["strings"]["time_limit_reached"]; -} - -resetOutcomeForAllPlayers() //checked matches bo3 _globallogic.gsc within reason -{ - players = level.players; - for ( index = 0; index < players.size; index++ ) - { - player = players[index]; - player notify ( "reset_outcome" ); - } -} - -startNextRound( winner, endReasonText ) //checked matches bo3 _globallogic.gsc within reason -{ - if ( !isOneRound() ) - { - displayRoundEnd( winner, endReasonText ); - - maps\mp\gametypes\_globallogic_utils::executePostRoundEvents(); - - if ( !wasLastRound() ) - { - if ( checkRoundSwitch() ) - { - displayRoundSwitch( winner, endReasonText ); - } - - if ( is_true( level.nextRoundIsOvertime ) ) - { - if ( !IsDefined( game["overtime_round"] ) ) - { - game["overtime_round"] = 1; - } - else - { - game["overtime_round"]++; - } - } - - SetMatchTalkFlag( "DeadChatWithDead", level.voip.deadChatWithDead ); - SetMatchTalkFlag( "DeadChatWithTeam", level.voip.deadChatWithTeam ); - SetMatchTalkFlag( "DeadHearTeamLiving", level.voip.deadHearTeamLiving ); - SetMatchTalkFlag( "DeadHearAllLiving", level.voip.deadHearAllLiving ); - SetMatchTalkFlag( "EveryoneHearsEveryone", level.voip.everyoneHearsEveryone ); - SetMatchTalkFlag( "DeadHearKiller", level.voip.deadHearKiller ); - SetMatchTalkFlag( "KillersHearVictim", level.voip.killersHearVictim ); - - game["state"] = "playing"; - level.allowBattleChatter = GetGametypeSetting( "allowBattleChatter" ); - map_restart( true ); - return true; - } - } - return false; -} - - -settopplayerstats() -{ - if(level.rankedmatch || level.wagermatch) - { - placement = level.placement["all"]; - topthreeplayers = min(3, placement.size); - for(index = 0; index < topthreeplayers; index++) - { - if(level.placement["all"][index].score) - { - if(!index) - { - level.placement["all"][index] addplayerstatwithgametype("TOPPLAYER", 1); - level.placement["all"][index] notify("topplayer"); - } - else - { - level.placement["all"][index] notify("nottopplayer"); - } - level.placement["all"][index] addplayerstatwithgametype("TOP3", 1); - level.placement["all"][index] addplayerstat("TOP3ANY", 1); - if(level.hardcoremode) - { - level.placement["all"][index] addplayerstat("TOP3ANY_HC", 1); - } - if(level.multiteam) - { - level.placement["all"][index] addplayerstat("TOP3ANY_MULTITEAM", 1); - } - level.placement["all"][index] notify("top3"); - } - } - for(index = 3; index < placement.size; index++) - { - level.placement["all"][index] notify("nottop3"); - level.placement["all"][index] notify("nottopplayer"); - } - if(level.teambased) - { - foreach(team in level.teams) - { - settopteamstats(team); - } - } - } -} - -settopteamstats(team) -{ - placementteam = level.placement[team]; - topthreeteamplayers = min(3, placementteam.size); - if(placementteam.size < 5) - { - return; - } - for(index = 0; index < topthreeteamplayers; index++) - { - if(placementteam[index].score) - { - placementteam[index] addplayerstat("TOP3TEAM", 1); - placementteam[index] addplayerstat("TOP3ANY", 1); - if(level.hardcoremode) - { - placementteam[index] addplayerstat("TOP3ANY_HC", 1); - } - if(level.multiteam) - { - placementteam[index] addplayerstat("TOP3ANY_MULTITEAM", 1); - } - placementteam[index] addplayerstatwithgametype("TOP3TEAM", 1); - } - } -} - -getGameLength() //checked does not exist in bo3 _globallogic.gsc -{ - if ( !level.timeLimit || level.forcedEnd ) - { - gameLength = maps\mp\gametypes\_globallogic_utils::getTimePassed() / 1000; - // cap it at 20 minutes to avoid exploiting - gameLength = min( gameLength, 1200 ); - } - else - { - gameLength = level.timeLimit * 60; - } - - return gameLength; -} - -endGame( winner, endReasonText ) //checked matches bo3 _globallogic.gsc within reason -{ - // return if already ending via host quit or victory - if ( game["state"] == "postgame" || level.gameEnded ) - return; - - if ( isDefined( level.onEndGame ) ) - [[level.onEndGame]]( winner ); - - //This wait was added possibly for wager match issues, but we think is no longer necessary. - //It was creating issues with multiple players calling this fuction when checking game score. In modes like HQ, - //The game score is given to every player on the team that captured the HQ, so when the points are dished out it loops through - //all players on that team and checks if the score limit has been reached. But since this wait occured before the game["state"] - //could be set to "postgame" the check score thread would send the next player that reached the score limit into this function, - //when the following code should only be hit once. If this wait turns out to be needed, we need to try pulling the game["state"] = "postgame"; - //up above the wait. - //wait 0.05; - - if ( !level.wagerMatch ) - setMatchFlag( "enable_popups", 0 ); - if ( !isdefined( level.disableOutroVisionSet ) || level.disableOutroVisionSet == false ) - { - if ( SessionModeIsZombiesGame() && level.forcedEnd ) - { - visionSetNaked( "zombie_last_stand", 2.0 ); - } - else - { - visionSetNaked( "mpOutro", 2.0 ); - } - } - - setmatchflag( "cg_drawSpectatorMessages", 0 ); - setmatchflag( "game_ended", 1 ); - - game["state"] = "postgame"; - level.gameEndTime = getTime(); - level.gameEnded = true; - SetDvar( "g_gameEnded", 1 ); - level.inGracePeriod = false; - level notify ( "game_ended" ); - level.allowBattleChatter = false; - maps\mp\gametypes\_globallogic_audio::flushDialog(); - foreach(team in level.teams) - { - game["lastroundscore"][team] = getteamscore(team); - } - if ( !IsDefined( game["overtime_round"] ) || wasLastRound() ) // Want to treat all overtime rounds as a single round - { - game["roundsplayed"]++; - game["roundwinner"][game["roundsplayed"]] = winner; - - //Added "if" check for FFA - Leif - if( level.teambased ) - { - game["roundswon"][winner]++; - } - } - - if ( isdefined( winner ) && level.teambased && isdefined( level.teams[winner] ) ) - { - level.finalKillCam_winner = winner; - } - else - { - level.finalKillCam_winner = "none"; - } - - setGameEndTime( 0 ); // stop/hide the timers - - updatePlacement(); - - updateRankedMatch( winner ); - - // freeze players - players = level.players; - - newTime = getTime(); - gameLength = getGameLength(); - - SetMatchTalkFlag( "EveryoneHearsEveryone", 1 ); - - bbGameOver = 0; - if ( isOneRound() || wasLastRound() ) - { - bbGameOver = 1; - } - index = 0; - while ( index < players.size ) - { - player = players[index]; - player maps\mp\gametypes\_globallogic_player::freezePlayerForRoundEnd(); - player thread roundEndDoF( 4.0 ); - - player maps\mp\gametypes\_globallogic_ui::freeGameplayHudElems(); - - // Update weapon usage stats - player maps\mp\gametypes\_weapons::updateWeaponTimings( newTime ); - - player bbPlayerMatchEnd( gameLength, endReasonText, bbGameOver ); - - if( isPregame() ) - index++; - continue; - - if( level.rankedMatch || level.wagerMatch || level.leagueMatch && !player IsSplitscreen() ) - { - if ( isDefined( player.setPromotion ) ) - player setDStat( "AfterActionReportStats", "lobbyPopup", "promotion" ); - else - player setDStat( "AfterActionReportStats", "lobbyPopup", "summary" ); - } - index++; - } - - maps\mp\_music::setmusicstate( "SILENT" ); - maps\mp\_gamerep::gameRepUpdateInformationForRound(); - maps\mp\gametypes\_wager::finalizeWagerRound(); - thread maps\mp\_challenges::roundEnd( winner ); - - if ( startNextRound( winner, endReasonText ) ) - { - return; - } - - /////////////////////////////////////////// - // After this the match is really ending // - /////////////////////////////////////////// - - if ( !isOneRound() && !level.gameforfeited ) - { - if ( isDefined( level.onRoundEndGame ) ) - winner = [[level.onRoundEndGame]]( winner ); - - endReasonText = getEndReasonText(); - } - if(!level.wagermatch && !sessionmodeiszombiesgame()) - { - maps/mp/gametypes/_globallogic_score::updatewinlossstats(winner); - } - if(level.teambased) - { - if(winner == "tie") - { - recordgameresult("draw"); - } - else - { - recordgameresult(winner); - } - } - else if(!isdefined(winner)) - { - recordgameresult("draw"); - } - else - { - recordgameresult(winner.team); - } - skillUpdate( winner, level.teamBased ); - recordLeagueWinner( winner ); - - setTopPlayerStats(); - thread maps\mp\_challenges::gameEnd( winner ); - - if ( IsDefined( winner ) && !isDefined( level.skipGameEnd ) || !level.skipGameEnd ) - { - if(isdefined(level.preendgamefunction)) - { - thread [[level.preendgamefunction]](level.postroundtime); - } - displayGameEnd( winner, endReasonText ); - } - if ( isOneRound() ) - { - maps\mp\gametypes\_globallogic_utils::executePostRoundEvents(); - } - - level.intermission = true; - - maps\mp\_gamerep::gameRepAnalyzeAndReport(); - - if( !isPregame() ) - thread sendAfterActionReport(); - maps\mp\gametypes\_wager::finalizeWagerGame(); - - SetMatchTalkFlag( "EveryoneHearsEveryone", 1 ); - - //regain players array since some might've disconnected during the wait above - players = level.players; - for ( index = 0; index < players.size; index++ ) - { - player = players[index]; - - recordPlayerStats( player, "presentAtEnd", 1 ); - - player closeMenu(); - player closeInGameMenu(); - player notify ( "reset_outcome", level.infinalkillcam ); - player thread [[level.spawnIntermission]](); - player setClientUIVisibilityFlag( "hud_visible", 1 ); - } - if(isdefined(level.endgamefunction)) - { - level thread [[level.endgamefunction]](); - } - //Eckert - Fading out sound - level notify ( "sfade"); - logString( "game ended" ); - - if ( !isDefined( level.skipGameEnd ) || !level.skipGameEnd ) - wait 5.0; - - exitLevel( false ); - -} - -bbPlayerMatchEnd( gameLength, endReasonString, gameOver ) // self == player //checked does not exist in bo3 _globallogic.gsc leaving in -{ - playerRank = getPlacementForPlayer( self ); - - totalTimePlayed = 0; - if ( isDefined( self.timePlayed ) && isDefined( self.timePlayed["total"] ) ) - { - totalTimePlayed = self.timePlayed["total"]; - if ( totalTimePlayed > gameLength ) - { - totalTimePlayed = gameLength; - } - } - - xuid = self GetXUID(); - - bbPrint( "mpplayermatchfacts", "score %d momentum %d endreason %s sessionrank %d playtime %d xuid %s gameover %d team %s", - self.pers["score"], - self.pers["momentum"], - endReasonString, - playerRank, - totalTimePlayed, - xuid, - gameOver, - self.pers["team"] ); -} - -roundEndWait( defaultDelay, matchBonus ) //checked matches bo3 _globallogic.gsc within reason -{ - notifiesDone = false; - while ( !notifiesDone ) - { - players = level.players; - notifiesDone = true; - index = 0; - while ( index < players.size ) - { - if ( !isDefined( players[index].doingNotify ) || !players[index].doingNotify ) - index++; - continue; - - notifiesDone = false; - index++; - } - wait ( 0.5 ); - } - - if ( !matchBonus ) - { - wait ( defaultDelay ); - level notify ( "round_end_done" ); - return; - } - - wait ( defaultDelay / 2 ); - level notify ( "give_match_bonus" ); - wait ( defaultDelay / 2 ); - - notifiesDone = false; - while ( !notifiesDone ) - { - players = level.players; - notifiesDone = true; - index = 0; - while ( index < players.size ) - { - if ( !isDefined( players[index].doingNotify ) || !players[index].doingNotify ) - index++; - continue; - - notifiesDone = false; - index++; - } - wait ( 0.5 ); - } - - level notify ( "round_end_done" ); -} - - -roundEndDOF( time ) //checked matches bo3 _globallogic.gsc within reason -{ - self setDepthOfField( 0, 128, 512, 4000, 6, 1.8 ); -} - - -checkTimeLimit() //checked matches bo3 _globallogic.gsc within reason -{ - if ( is_true( level.timeLimitOverride ) ) - return; - - if ( game["state"] != "playing" ) - { - setGameEndTime( 0 ); - return; - } - - if ( level.timeLimit <= 0 ) - { - setGameEndTime( 0 ); - return; - } - - if ( level.inPrematchPeriod ) - { - setGameEndTime( 0 ); - return; - } - - if ( level.timerStopped ) - { - setGameEndTime( 0 ); - return; - } - - if ( !isdefined( level.startTime ) ) - return; - - timeLeft = maps\mp\gametypes\_globallogic_utils::getTimeRemaining(); - - // want this accurate to the millisecond - setGameEndTime( getTime() + int(timeLeft) ); - - if ( timeLeft > 0 ) - return; - - [[level.onTimeLimit]](); -} - -allTeamsUnderScoreLimit() //checked does not exist in bo3 _globallogic.gsc leaving in -{ - foreach ( team in level.teams ) - { - if ( game["teamScores"][team] >= level.scoreLimit ) - return false; - } - - return true; -} - -checkScoreLimit() //checked matches bo3 _globallogic.gsc within reason -{ - if ( game["state"] != "playing" ) - return false; - - if ( level.scoreLimit <= 0 ) - return false; - - if ( level.teamBased ) - { - if( allTeamsUnderScoreLimit() ) - return false; - } - else - { - if ( !isPlayer( self ) ) - return false; - - if ( self.score < level.scoreLimit ) - return false; - } - - [[level.onScoreLimit]](); -} - - -updateGameTypeDvars() //checked matches bo3 _globallogic.gsc within reason -{ - level endon ( "game_ended" ); - - while ( game["state"] == "playing" ) - { - roundlimit = clamp( GetGametypeSetting( "roundLimit" ), level.roundLimitMin, level.roundLimitMax ); - if ( roundlimit != level.roundlimit ) - { - level.roundlimit = roundlimit; - level notify ( "update_roundlimit" ); - } - - timeLimit = [[level.getTimeLimit]](); - if ( timeLimit != level.timeLimit ) - { - level.timeLimit = timeLimit; - SetDvar( "ui_timelimit", level.timeLimit ); - level notify ( "update_timelimit" ); - } - thread checkTimeLimit(); - - scoreLimit = clamp( GetGametypeSetting( "scoreLimit" ), level.scoreLimitMin, level.scoreLimitMax ); - if ( scoreLimit != level.scoreLimit ) - { - level.scoreLimit = scoreLimit; - SetDvar( "ui_scorelimit", level.scoreLimit ); - level notify ( "update_scorelimit" ); - } - thread checkScoreLimit(); - - // make sure we check time limit right when game ends - if ( isdefined( level.startTime ) ) - { - if ( maps\mp\gametypes\_globallogic_utils::getTimeRemaining() < 3000 ) - { - wait .1; - continue; - } - } - wait 1; - } -} - - -removeDisconnectedPlayerFromPlacement() //checked matches bo3 _globallogic.gsc within reason -{ - offset = 0; - numPlayers = level.placement["all"].size; - found = false; - for ( i = 0; i < numPlayers; i++ ) - { - if ( level.placement["all"][i] == self ) - found = true; - - if ( found ) - level.placement["all"][i] = level.placement["all"][ i + 1 ]; - } - if ( !found ) - return; - - level.placement["all"][ numPlayers - 1 ] = undefined; - /* - assert( level.placement["all"].size == numPlayers - 1 ); - */ - /* - /# - maps\mp\gametypes\_globallogic_utils::assertProperPlacement(); - #/ - */ - updateTeamPlacement(); - - if ( level.teamBased ) - return; - - numPlayers = level.placement["all"].size; - for ( i = 0; i < numPlayers; i++ ) - { - player = level.placement["all"][i]; - player notify( "update_outcome" ); - } - -} - -updatePlacement() //checked matches bo3 _globallogic.gsc within reason -{ - - if ( !level.players.size ) - return; - - level.placement["all"] = []; - for ( index = 0; index < level.players.size; index++ ) - { - if ( isdefined( level.teams[ level.players[index].team ] ) ) - level.placement["all"][level.placement["all"].size] = level.players[index]; - } - - placementAll = level.placement["all"]; - if(level.teambased) - { - for ( i = 1; i < placementAll.size; i++ ) - { - player = placementAll[ i ]; - playerScore = player.score; - for ( j = i - 1; j >= 0 && playerScore > placementAll[j].score || playerScore == placementAll[j].score && player.deaths < placementAll[j].deaths ; j-- ) - { - placementAll[ j + 1 ] = placementAll[ j ]; - } - placementAll[ j + 1 ] = player; - } - } - else - { - for(i = 1; i < placementall.size; i++) - { - player = placementall[i]; - playerscore = player.pointstowin; - for(j = i - 1; j >= 0 && playerscore > placementall[j].pointstowin || playerscore == placementall[j].pointstowin && player.deaths < placementall[j].deaths; j--) - { - placementall[j + 1] = placementall[j]; - } - placementall[j + 1] = player; - } - } - level.placement["all"] = placementAll; - /* - /# - maps\mp\gametypes\_globallogic_utils::assertProperPlacement(); - #/ - */ - updateTeamPlacement(); - -} - - -updateTeamPlacement() //checked matches bo3 _globallogic.gsc within reason -{ - foreach( team in level.teams ) - { - placement[team] = []; - } - placement["spectator"] = []; - - if ( !level.teamBased ) - return; - - placementAll = level.placement["all"]; - placementAllSize = placementAll.size; - - for ( i = 0; i < placementAllSize; i++ ) - { - player = placementAll[i]; - team = player.pers["team"]; - - placement[team][ placement[team].size ] = player; - } - - foreach( team in level.teams ) - { - level.placement[team] = placement[team]; - } -} - -getPlacementForPlayer( player ) //checked matches bo3 _globallogic.gsc within reason -{ - updatePlacement(); - - playerRank = -1; - placement = level.placement["all"]; - for ( placementIndex = 0; placementIndex < placement.size; placementIndex++ ) - { - if ( level.placement["all"][placementIndex] == player ) - { - playerRank = (placementIndex + 1); - break; - } - } - - return playerRank; -} - -sortDeadPlayers( team ) //checked matches bo3 _globallogic.gsc within reason -{ - // only need to sort if we are running queued respawn - if ( !level.playerQueuedRespawn ) - return; - - // sort by death time - for ( i = 1; i < level.deadPlayers[team].size; i++ ) - { - player = level.deadPlayers[team][i]; - for ( j = i - 1; j >= 0 && player.deathTime < level.deadPlayers[team][j].deathTime; j-- ) - level.deadPlayers[team][j + 1] = level.deadPlayers[team][j]; - level.deadPlayers[team][j + 1] = player; - } - - for ( i = 0; i < level.deadPlayers[team].size; i++ ) - { - if ( level.deadPlayers[team][i].spawnQueueIndex != i ) - { - level.spawnQueueModified[team] = true; - } - level.deadPlayers[team][i].spawnQueueIndex = i; - } -} - -istopscoringplayer(player) -{ - topplayer = 0; - updateplacement(); - /# - assert(level.placement["all"].size > 0); - #/ - if(level.placement["all"].size == 0) - { - return 0; - } - if(level.teambased) - { - topscore = level.placement["all"][0].score; - for(index = 0; index < level.placement["all"].size; index++) - { - if(level.placement["all"][index].score == 0) - { - break; - } - if(topscore > level.placement["all"][index].score) - { - break; - } - if(self == level.placement["all"][index]) - { - topscoringplayer = 1; - break; - } - } - } - else - { - topscore = level.placement["all"][0].pointstowin; - for(index = 0; index < level.placement["all"].size; index++) - { - if(level.placement["all"][index].pointstowin == 0) - { - break; - } - if(topscore > level.placement["all"][index].pointstowin) - { - break; - } - if(self == level.placement["all"][index]) - { - topplayer = 1; - break; - } - } - } - return topplayer; -} - -totalAliveCount() //checked matches bo3 _globallogic.gsc within reason -{ - count = 0; - foreach( team in level.teams ) - { - count += level.aliveCount[team]; - } - return count; -} - -totalPlayerLives() //checked matches bo3 _globallogic.gsc within reason -{ - count = 0; - foreach( team in level.teams ) - { - count += level.playerLives[team]; - } - return count; -} - -totalPlayerCount() //checked does not exist in bo3 _globallogic.gsc -{ - count = 0; - foreach( team in level.teams ) - { - count += level.playerCount[team]; - } - return count; -} - -initTeamVariables( team ) //checked matches bo3 _globallogic.gsc within reason -{ - - if ( !isdefined( level.aliveCount ) ) - level.aliveCount = []; - - level.aliveCount[team] = 0; - level.lastAliveCount[team] = 0; - if(!isdefined(game["everExisted"])) - { - game["everExisted"] = []; - } - if(!isdefined(game["everExisted"][team])) - { - game["everExisted"][team] = 0; - } - level.everExisted[team] = false; - level.waveDelay[team] = 0; - level.lastWave[team] = 0; - level.wavePlayerSpawnIndex[team] = 0; - - resetTeamVariables( team ); -} - -resetTeamVariables( team ) //checked matches bo3 _globallogic.gsc within reason -{ - level.playerCount[team] = 0; - level.botsCount[team] = 0; - level.lastAliveCount[team] = level.aliveCount[team]; - level.aliveCount[team] = 0; - level.playerLives[team] = 0; - level.alivePlayers[team] = []; - level.deadPlayers[team] = []; - level.squads[team] = []; - level.spawnQueueModified[team] = false; -} - -updateTeamStatus() //checked matches bo3 _globallogic.gsc within reason -{ - // run only once per frame, at the end of the frame. - level notify("updating_team_status"); - level endon("updating_team_status"); - level endon ( "game_ended" ); - waittillframeend; - - wait 0; // Required for Callback_PlayerDisconnect to complete before updateTeamStatus can execute - - if ( game["state"] == "postgame" ) - return; - - resetTimeout(); - - foreach( team in level.teams ) - { - resetTeamVariables( team ); - } - - level.activePlayers = []; - - players = level.players; - i = 0; - while ( i < players.size ) - { - player = players[i]; - - if ( !isDefined( player ) && level.splitscreen ) - i++; - continue; - - team = player.team; - class = player.class; - - if ( team != "spectator" && isDefined( class ) && class != "" ) - { - level.playerCount[team]++; - - if( isDefined( player.pers["isBot"] ) ) - level.botsCount[team]++; - - if ( player.sessionstate == "playing" ) - { - level.aliveCount[team]++; - level.playerLives[team]++; - player.spawnQueueIndex = -1; - - if ( isAlive( player ) ) - { - level.alivePlayers[team][level.alivePlayers[team].size] = player; - level.activeplayers[ level.activeplayers.size ] = player; - } - else - { - level.deadPlayers[team][level.deadPlayers[team].size] = player; - } - } - else - { - level.deadPlayers[team][level.deadPlayers[team].size] = player; - if ( player maps\mp\gametypes\_globallogic_spawn::maySpawn() ) - level.playerLives[team]++; - } - } - i++; - } - - totalAlive = totalAliveCount(); - - if ( totalAlive > level.maxPlayerCount ) - level.maxPlayerCount = totalAlive; - - foreach( team in level.teams ) - { - if ( level.aliveCount[team] ) - level.everExisted[team] = true; - - sortDeadPlayers( team ); - } - - level updateGameEvents(); -} - -checkTeamScoreLimitSoon( team ) //checked matches bo3 _globallogic.gsc within reason -{ - /* - assert( IsDefined( team ) ); - */ - if ( level.scoreLimit <= 0 ) - return; - - if ( !level.teamBased ) - return; - - // Give the data a minute to converge/settle - if ( maps\mp\gametypes\_globallogic_utils::getTimePassed() < ( 60 * 1000 ) ) - return; - - timeLeft = maps\mp\gametypes\_globallogic_utils::getEstimatedTimeUntilScoreLimit( team ); - - if ( timeLeft < 1 ) - { - level notify( "match_ending_soon", "score" ); - } -} - -checkPlayerScoreLimitSoon() //checked matches bo3 _globallogic.gsc within reason -{ - assert( IsPlayer( self ) ); - - if ( level.scoreLimit <= 0 ) - return; - - if ( level.teamBased ) - return; - - // Give the data a minute to converge/settle - if ( maps\mp\gametypes\_globallogic_utils::getTimePassed() < ( 60 * 1000 ) ) - return; - - timeLeft = maps\mp\gametypes\_globallogic_utils::getEstimatedTimeUntilScoreLimit( undefined ); - - if ( timeLeft < 1 ) - { - level notify( "match_ending_soon", "score" ); - } -} - -timeLimitClock() //checked matches bo3 _globallogic.gsc within reason -{ - level endon ( "game_ended" ); - - wait .05; - - clockObject = spawn( "script_origin", (0,0,0) ); - - while ( game["state"] == "playing" ) - { - if ( !level.timerStopped && level.timeLimit ) - { - timeLeft = maps\mp\gametypes\_globallogic_utils::getTimeRemaining() / 1000; - timeLeftInt = int(timeLeft + 0.5); // adding .5 and flooring rounds it. - - if ( timeLeftInt == 601 ) - clientnotify ( "notify_10" ); - - if ( timeLeftInt == 301 ) - clientnotify ( "notify_5" ); - - if ( timeLeftInt == 60 ) - clientnotify ( "notify_1" ); - - if ( timeLeftInt == 12 ) - clientnotify ( "notify_count" ); - - if ( timeLeftInt >= 40 && timeLeftInt <= 60 ) - level notify ( "match_ending_soon", "time" ); - - if ( timeLeftInt >= 30 && timeLeftInt <= 40 ) - level notify ( "match_ending_pretty_soon", "time" ); - - if( timeLeftInt <= 32 ) - level notify ( "match_ending_vox" ); - - if ( timeLeftInt <= 10 || timeLeftInt <= 30 && timeLeftInt % 2 == 0 ) - { - level notify ( "match_ending_very_soon", "time" ); - // don't play a tick at exactly 0 seconds, that's when something should be happening! - if ( timeLeftInt == 0 ) - break; - - clockObject playSound( "mpl_ui_timer_countdown" ); - } - - // synchronize to be exactly on the second - if ( timeLeft - floor(timeLeft) >= .05 ) - wait timeLeft - floor(timeLeft); - } - - wait ( 1.0 ); - } -} - -timeLimitClock_Intermission( waitTime ) //checked matches bo3 _globallogic.gsc within reason -{ - setGameEndTime( getTime() + int(waitTime*1000) ); - clockObject = spawn( "script_origin", (0,0,0) ); - - if ( waitTime >= 10.0 ) - wait ( waitTime - 10.0 ); - - for ( ;; ) - { - clockObject playSound( "mpl_ui_timer_countdown" ); - wait ( 1.0 ); - } -} - - -startGame() //checked does not match bo3 _globallogic.gsc did not change -{ - thread maps\mp\gametypes\_globallogic_utils::gameTimer(); - level.timerStopped = false; - // RF, disabled this, as it is not required anymore. - //thread maps\mp\gametypes\_spawnlogic::spawnPerFrameUpdate(); - - SetMatchTalkFlag( "DeadChatWithDead", level.voip.deadChatWithDead ); - SetMatchTalkFlag( "DeadChatWithTeam", level.voip.deadChatWithTeam ); - SetMatchTalkFlag( "DeadHearTeamLiving", level.voip.deadHearTeamLiving ); - SetMatchTalkFlag( "DeadHearAllLiving", level.voip.deadHearAllLiving ); - SetMatchTalkFlag( "EveryoneHearsEveryone", level.voip.everyoneHearsEveryone ); - SetMatchTalkFlag( "DeadHearKiller", level.voip.deadHearKiller ); - SetMatchTalkFlag( "KillersHearVictim", level.voip.killersHearVictim ); - - - prematchPeriod(); - level notify("prematch_over"); - - thread timeLimitClock(); - thread gracePeriod(); - thread watchMatchEndingSoon(); - - thread maps\mp\gametypes\_globallogic_audio::musicController(); - recordMatchBegin(); -} - - -waitForPlayers() //checked does not match bo3 _globallogic.gsc did not change -{ - starttime = GetTime(); - while ( GetNumConnectedPlayers() < 1 ) - { - wait ( 0.05 ); - if(GetTime() - starttime > 120000) - { - exitlevel(0); - } - } -} - -prematchPeriod() //checked matches bo3 _globallogic.gsc within reason -{ - setMatchFlag( "hud_hardcore", level.hardcoreMode ); - - level endon( "game_ended" ); - - if ( level.prematchPeriod > 0 ) - { - thread matchStartTimer(); - - waitForPlayers(); - - wait ( level.prematchPeriod ); - } - else - { - matchStartTimerSkip(); - - wait 0.05; - } - - level.inPrematchPeriod = false; - - for ( index = 0; index < level.players.size; index++ ) - { - level.players[index] freeze_player_controls( false ); - level.players[index] enableWeapons(); - } - - maps\mp\gametypes\_wager::prematchPeriod(); - - if ( game["state"] != "playing" ) - return; -} - -gracePeriod() //checked matches bo3 _globallogic.gsc within reason -{ - level endon("game_ended"); - - if ( IsDefined( level.gracePeriodFunc ) ) - { - [[ level.gracePeriodFunc ]](); - } - else - { - wait ( level.gracePeriod ); - } - - level notify ( "grace_period_ending" ); - wait ( 0.05 ); - - level.inGracePeriod = false; - - if ( game["state"] != "playing" ) - return; - - if ( level.numLives ) - { - // Players on a team but without a weapon show as dead since they can not get in this round - players = level.players; - - for ( i = 0; i < players.size; i++ ) - { - player = players[i]; - - if ( !player.hasSpawned && player.sessionteam != "spectator" && !isAlive( player ) ) - player.statusicon = "hud_status_dead"; - } - } - - level thread updateTeamStatus(); -} - -watchMatchEndingSoon() //checked matches bo3 _globallogic.gsc within reason -{ - SetDvar( "xblive_matchEndingSoon", 0 ); - level waittill( "match_ending_soon", reason ); - SetDvar( "xblive_matchEndingSoon", 1 ); -} - -assertTeamVariables( ) //checked matches bo3 _globallogic.gsc within reason -{ - // these are defined in the teamset file - if ( !level.createFX_enabled && !SessionModeIsZombiesGame() ) - { - foreach ( team in level.teams ) - { - /* - Assert( IsDefined( game["strings"][ team + "_win"] ) ); - Assert( IsDefined( game["strings"][ team + "_win_round"] ) ); - Assert( IsDefined( game["strings"][ team + "_mission_accomplished"] ) ); - Assert( IsDefined( game["strings"][ team + "_eliminated"] ) ); - Assert( IsDefined( game["strings"][ team + "_forfeited"] ) ); - Assert( IsDefined( game["strings"][ team + "_name"] ) ); - Assert( IsDefined( game["music"]["spawn_" + team] ) ); - Assert( IsDefined( game["music"]["victory_" + team] ) ); - Assert( IsDefined( game["icons"][team] ) ); - Assert( IsDefined( game["voice"][team] ) ); - */ - } - } -} - -anyTeamHasWaveDelay() //checked matches bo3 _globallogic.gsc within reason -{ - foreach ( team in level.teams ) - { - if ( level.waveDelay[team] ) - return true; - } - - return false; -} - -Callback_StartGameType() //checked does not match bo3 _globallogic.gsc did not change -{ - level.prematchPeriod = 0; - level.intermission = false; - - setmatchflag( "cg_drawSpectatorMessages", 1 ); - setmatchflag( "game_ended", 0 ); - - if ( !isDefined( game["gamestarted"] ) ) - { - // defaults if not defined in level script - if ( !isDefined( game["allies"] ) ) - game["allies"] = "seals"; - if ( !isDefined( game["axis"] ) ) - game["axis"] = "pmc"; - if ( !isDefined( game["attackers"] ) ) - game["attackers"] = "allies"; - if ( !isDefined( game["defenders"] ) ) - game["defenders"] = "axis"; - - // if this hits the teams are not setup right - /* - assert( game["attackers"] != game["defenders"] ); - */ - // TODO MTEAM - need to update this valid team - foreach( team in level.teams ) - { - if ( !isDefined( game[team] ) ) - game[team] = "pmc"; - } - - if ( !isDefined( game["state"] ) ) - game["state"] = "playing"; - - precacheStatusIcon( "hud_status_dead" ); - precacheStatusIcon( "hud_status_connecting" ); - - precacheRumble( "damage_heavy" ); - precacheRumble( "damage_light" ); - - precacheShader( "white" ); - precacheShader( "black" ); - - makeDvarServerInfo( "scr_allies", "marines" ); - makeDvarServerInfo( "scr_axis", "nva" ); - - makeDvarServerInfo( "cg_thirdPersonAngle", 354 ); - - SetDvar( "cg_thirdPersonAngle", 354 ); - - game["strings"]["press_to_spawn"] = &"PLATFORM_PRESS_TO_SPAWN"; - if ( level.teamBased ) - { - game["strings"]["waiting_for_teams"] = &"MP_WAITING_FOR_TEAMS"; - game["strings"]["opponent_forfeiting_in"] = &"MP_OPPONENT_FORFEITING_IN"; - } - else - { - game["strings"]["waiting_for_teams"] = &"MP_WAITING_FOR_PLAYERS"; - game["strings"]["opponent_forfeiting_in"] = &"MP_OPPONENT_FORFEITING_IN"; - } - game["strings"]["match_starting_in"] = &"MP_MATCH_STARTING_IN"; - game["strings"]["spawn_next_round"] = &"MP_SPAWN_NEXT_ROUND"; - game["strings"]["waiting_to_spawn"] = &"MP_WAITING_TO_SPAWN"; - game["strings"]["waiting_to_spawn_ss"] = &"MP_WAITING_TO_SPAWN_SS"; - game["strings"]["you_will_spawn"] = &"MP_YOU_WILL_RESPAWN"; - game["strings"]["match_starting"] = &"MP_MATCH_STARTING"; - game["strings"]["change_class"] = &"MP_CHANGE_CLASS_NEXT_SPAWN"; - game["strings"]["last_stand"] = &"MPUI_LAST_STAND"; - - game["strings"]["cowards_way"] = &"PLATFORM_COWARDS_WAY_OUT"; - - game["strings"]["tie"] = &"MP_MATCH_TIE"; - game["strings"]["round_draw"] = &"MP_ROUND_DRAW"; - - game["strings"]["enemies_eliminated"] = &"MP_ENEMIES_ELIMINATED"; - game["strings"]["score_limit_reached"] = &"MP_SCORE_LIMIT_REACHED"; - game["strings"]["round_limit_reached"] = &"MP_ROUND_LIMIT_REACHED"; - game["strings"]["time_limit_reached"] = &"MP_TIME_LIMIT_REACHED"; - game["strings"]["players_forfeited"] = &"MP_PLAYERS_FORFEITED"; - game["strings"]["other_teams_forfeited"] = &"MP_OTHER_TEAMS_FORFEITED"; - - assertTeamVariables(); - - [[level.onPrecacheGameType]](); - - game["gamestarted"] = true; - - game["totalKills"] = 0; - - foreach( team in level.teams ) - { - game["teamScores"][team] = 0; - game["totalKillsTeam"][team] = 0; - } - if(!ispregame()) - { - level.prematchperiod = getgametypesetting("prematchperiod"); - } - if ( GetDvarint( "xblive_clanmatch" ) != 0 ) - { - // TODO MTEAM is this code used anymore? - foreach( team in level.teams ) - { - game["icons"][team] = "composite_emblem_team_axis"; - } - - game["icons"]["allies"] = "composite_emblem_team_allies"; - game["icons"]["axis"] = "composite_emblem_team_axis"; - } - } - - if(!isdefined(game["timepassed"])) - game["timepassed"] = 0; - - if(!isdefined(game["roundsplayed"])) - game["roundsplayed"] = 0; - SetRoundsPlayed( game["roundsplayed"] ); - - if ( IsDefined( game["overtime_round"] ) ) - { - SetMatchFlag( "overtime", 1 ); - } - else - { - SetMatchFlag( "overtime", 0 ); - } - - if(!isdefined(game["roundwinner"] )) - game["roundwinner"] = []; - - if(!isdefined(game["roundswon"] )) - game["roundswon"] = []; - - if(!isdefined(game["roundswon"]["tie"] )) - game["roundswon"]["tie"] = 0; - - foreach ( team in level.teams ) - { - if(!isdefined(game["roundswon"][team] )) - game["roundswon"][team] = 0; - - level.teamSpawnPoints[team] = []; - level.spawn_point_team_class_names[team] = []; - } - - level.skipVote = false; - level.gameEnded = false; - SetDvar( "g_gameEnded", 0 ); - - level.objIDStart = 0; - level.forcedEnd = false; - level.hostForcedEnd = false; - - level.hardcoreMode = GetGametypeSetting( "hardcoreMode" ); - if ( level.hardcoreMode ) - { - logString( "game mode: hardcore" ); - - //set up friendly fire delay for hardcore - if( !isDefined(level.friendlyFireDelayTime) ) - level.friendlyFireDelayTime = 0; - } - - if ( GetDvar( "scr_max_rank" ) == "" ) - SetDvar( "scr_max_rank", "0" ); - level.rankCap = GetDvarint( "scr_max_rank" ); - - if ( GetDvar( "scr_min_prestige" ) == "" ) - { - SetDvar( "scr_min_prestige", "0" ); - } - level.minPrestige = GetDvarint( "scr_min_prestige" ); - - // this gets set to false when someone takes damage or a gametype-specific event happens. - level.useStartSpawns = true; - - level.roundscorecarry = getgametypesetting("roundscorecarry"); - level.allowhitmarkers = getgametypesetting("allowhitmarkers"); - level.playerqueuedrespawn = getgametypesetting("playerQueuedRespawn"); - level.playerforcerespawn = getgametypesetting("playerForceRespawn"); - level.roundstartexplosivedelay = getgametypesetting("roundStartExplosiveDelay"); - level.roundstartkillstreakdelay = getgametypesetting("roundStartKillstreakDelay"); - level.perksenabled = getgametypesetting("perksEnabled"); - level.disableattachments = getgametypesetting("disableAttachments"); - level.disabletacinsert = getgametypesetting("disableTacInsert"); - level.disablecac = getgametypesetting("disableCAC"); - level.disableclassselection = getgametypesetting("disableClassSelection"); - level.disableweapondrop = getgametypesetting("disableweapondrop"); - level.onlyheadshots = getgametypesetting("onlyHeadshots"); - level.minimumallowedteamkills = getgametypesetting("teamKillPunishCount") - 1; - level.teamkillreducedpenalty = getgametypesetting("teamKillReducedPenalty"); - level.teamkillpointloss = getgametypesetting("teamKillPointLoss"); - level.teamkillspawndelay = getgametypesetting("teamKillSpawnDelay"); - level.deathpointloss = getgametypesetting("deathPointLoss"); - level.leaderbonus = getgametypesetting("leaderBonus"); - level.forceradar = getgametypesetting("forceRadar"); - level.playersprinttime = getgametypesetting("playerSprintTime"); - level.bulletdamagescalar = getgametypesetting("bulletDamageScalar"); - level.playermaxhealth = getgametypesetting("playerMaxHealth"); - level.playerhealthregentime = getgametypesetting("playerHealthRegenTime"); - level.playerrespawndelay = getgametypesetting("playerRespawnDelay"); - level.playerobjectiveheldrespawndelay = getgametypesetting("playerObjectiveHeldRespawnDelay"); - level.waverespawndelay = getgametypesetting("waveRespawnDelay"); - level.suicidespawndelay = getgametypesetting("spawnsuicidepenalty"); - level.teamkilledspawndelay = getgametypesetting("spawnteamkilledpenalty"); - level.maxsuicidesbeforekick = getgametypesetting("maxsuicidesbeforekick"); - level.spectatetype = getgametypesetting("spectateType"); - level.voip = spawnstruct(); - level.voip.deadchatwithdead = getgametypesetting("voipDeadChatWithDead"); - level.voip.deadchatwithteam = getgametypesetting("voipDeadChatWithTeam"); - level.voip.deadhearallliving = getgametypesetting("voipDeadHearAllLiving"); - level.voip.deadhearteamliving = getgametypesetting("voipDeadHearTeamLiving"); - level.voip.everyonehearseveryone = getgametypesetting("voipEveryoneHearsEveryone"); - level.voip.deadhearkiller = getgametypesetting("voipDeadHearKiller"); - level.voip.killershearvictim = getgametypesetting("voipKillersHearVictim"); - - if( GetDvar( "r_reflectionProbeGenerate" ) == "1" ) - level waittill( "eternity" ); - - if( SessionModeIsZombiesGame() ) - { - level.prematchPeriod = 0; - - - //thread maps\mp\gametypes\_persistence::init(); - level.persistentDataInfo = []; - level.maxRecentStats = 10; - level.maxHitLocations = 19; - level.globalShotsFired = 0; - thread maps/mp/gametypes/_hud::init(); - thread maps/mp/gametypes/_serversettings::init(); - thread maps/mp/gametypes/_clientids::init(); - thread maps/mp/gametypes/_weaponobjects::init(); - thread maps/mp/gametypes/_scoreboard::init(); - thread maps/mp/gametypes/_killcam::init(); - thread maps/mp/gametypes/_shellshock::init(); - thread maps/mp/gametypes/_deathicons::init(); - thread maps/mp/gametypes/_spectating::init(); - thread maps/mp/gametypes/_objpoints::init(); - thread maps/mp/gametypes/_gameobjects::init(); - thread maps/mp/gametypes/_spawnlogic::init(); - thread maps/mp/gametypes/_globallogic_audio::init(); - thread maps/mp/gametypes/_wager::init(); - thread maps/mp/bots/_bot::init(); - thread maps/mp/_decoy::init(); - } - else - { - thread maps\mp\gametypes\_persistence::init(); - thread maps\mp\gametypes\_menus::init(); - thread maps\mp\gametypes\_hud::init(); - thread maps\mp\gametypes\_serversettings::init(); - thread maps\mp\gametypes\_clientids::init(); - thread maps\mp\teams\_teams::init(); - thread maps\mp\gametypes\_weapons::init(); - thread maps\mp\gametypes\_scoreboard::init(); - thread maps\mp\gametypes\_killcam::init(); - thread maps\mp\gametypes\_shellshock::init(); - thread maps\mp\gametypes\_deathicons::init(); - thread maps\mp\gametypes\_damagefeedback::init(); - thread maps\mp\gametypes\_healthoverlay::init(); - thread maps\mp\gametypes\_spectating::init(); - thread maps\mp\gametypes\_objpoints::init(); - thread maps\mp\gametypes\_gameobjects::init(); - thread maps\mp\gametypes\_spawnlogic::init(); - thread maps\mp\gametypes\_battlechatter_mp::init(); - thread maps\mp\killstreaks\_killstreaks::init(); - thread maps\mp\gametypes\_globallogic_audio::init(); - thread maps\mp\gametypes\_wager::init(); - thread maps\mp\bots\_bot::init(); - thread maps\mp\_decoy::init(); - thread maps\mp\_bb::init(); - } - - if ( level.teamBased ) - thread maps\mp\gametypes\_friendicons::init(); - - thread maps\mp\gametypes\_hud_message::init(); - thread maps\mp\_multi_extracam::init(); - - stringNames = getArrayKeys( game["strings"] ); - for ( index = 0; index < stringNames.size; index++ ) - { - precacheString( game[ "strings" ][ stringNames[ index ] ] ); - } - foreach( team in level.teams ) - { - initTeamVariables( team ); - } - - level.maxPlayerCount = 0; - level.activePlayers = []; - - level.allowAnnouncer = GetGametypeSetting( "allowAnnouncer" ); - - if ( !isDefined( level.timeLimit ) ) - registerTimeLimit( 1, 1440 ); - - if ( !isDefined( level.scoreLimit ) ) - registerScoreLimit( 1, 500 ); - - if ( !isDefined( level.roundLimit ) ) - registerRoundLimit( 0, 10 ); - - if ( !isDefined( level.roundWinLimit ) ) - registerRoundWinLimit( 0, 10 ); - - // The order the following functions are registered in are the order they will get called - maps\mp\gametypes\_globallogic_utils::registerPostRoundEvent( maps\mp\gametypes\_killcam::postRoundFinalKillcam ); - maps\mp\gametypes\_globallogic_utils::registerPostRoundEvent( maps\mp\gametypes\_wager::postRoundSideBet ); - - makeDvarServerInfo( "ui_scorelimit" ); - makeDvarServerInfo( "ui_timelimit" ); - makeDvarServerInfo( "ui_allow_classchange", GetDvar( "ui_allow_classchange" ) ); - - waveDelay = level.waveRespawnDelay; - if ( waveDelay && !isPreGame() ) - { - foreach ( team in level.teams ) - { - level.waveDelay[team] = waveDelay; - level.lastWave[team] = 0; - } - - level thread [[level.waveSpawnTimer]](); - } - - level.inPrematchPeriod = true; - - if ( level.prematchPeriod > 2.0 ) - level.prematchPeriod = level.prematchPeriod + (randomFloat( 4 ) - 2); // live host obfuscation - - if ( level.numLives || anyTeamHasWaveDelay() || level.playerQueuedRespawn ) - level.gracePeriod = 15; - else - level.gracePeriod = 5; - - level.inGracePeriod = true; - - level.roundEndDelay = 5; - level.halftimeRoundEndDelay = 3; - - maps\mp\gametypes\_globallogic_score::updateAllTeamScores(); - - level.killstreaksenabled = GetGametypeSetting( "killstreaksenabled" ); - - if ( GetDvar( "scr_game_rankenabled" ) == "" ) - SetDvar( "scr_game_rankenabled", true ); - level.rankEnabled = GetDvarint( "scr_game_rankenabled" ); - - if ( GetDvar( "scr_game_medalsenabled" ) == "" ) - SetDvar( "scr_game_medalsenabled", true ); - level.medalsEnabled = GetDvarint( "scr_game_medalsenabled" ); - - if( level.hardcoreMode && level.rankedMatch && GetDvar( "scr_game_friendlyFireDelay" ) == "" ) - SetDvar( "scr_game_friendlyFireDelay", true ); - level.friendlyFireDelay = GetDvarint( "scr_game_friendlyFireDelay" ); - - // level gametype and features globals should be defaulted before this, and level.onstartgametype should reset them if desired - if(GetDvar("createfx") == "") - { - [[level.onStartGameType]](); - } - - // disable killstreaks for custom game modes - if( GetDvarInt( "custom_killstreak_mode" ) == 1 ) - { - level.killstreaksenabled = 0; - } - - // this must be after onstartgametype for scr_showspawns to work when set at start of game - /* - /# - thread maps\mp\gametypes\_dev::init(); - #/ - */ - /* -/# - PrintLn( "Globallogic Callback_StartGametype() isPregame() = " + isPregame() + "\n" ); -#/ - */ - level thread maps\mp\gametypes\_killcam::doFinalKillcam(); - - thread startGame(); - level thread updateGameTypeDvars(); - /* -/# - if( GetDvarint( "scr_writeconfigstrings" ) == 1 ) - { - level.skipGameEnd = true; - level.roundLimit = 1; - - // let things settle - wait(1); -// level.forcedEnd = true; - thread forceEnd( false ); -// thread endgame( "tie","" ); - } - if( GetDvarint( "scr_hostmigrationtest" ) == 1 ) - { - thread ForceDebugHostMigration(); - } -#/ - */ -} - - -ForceDebugHostMigration() -{ - /* - /# - while (1) - { - maps\mp\gametypes\_hostmigration::waitTillHostMigrationDone(); - wait(60); - starthostmigration(); - maps\mp\gametypes\_hostmigration::waitTillHostMigrationDone(); - //thread forceEnd( false ); - } - #/ - */ -} - - -registerFriendlyFireDelay( dvarString, defaultValue, minValue, maxValue ) //checked matches bo3 _globallogic.gsc within reason -{ - dvarString = ("scr_" + dvarString + "_friendlyFireDelayTime"); - if ( getDvar( dvarString ) == "" ) - setDvar( dvarString, defaultValue ); - - if ( getDvarInt( dvarString ) > maxValue ) - setDvar( dvarString, maxValue ); - else if ( getDvarInt( dvarString ) < minValue ) - setDvar( dvarString, minValue ); - - level.friendlyFireDelayTime = getDvarInt( dvarString ); -} - -checkRoundSwitch() //checked matches bo3 _globallogic.gsc within reason -{ - if ( !isdefined( level.roundSwitch ) || !level.roundSwitch ) - return false; - if ( !isdefined( level.onRoundSwitch ) ) - return false; - /* - assert( game["roundsplayed"] > 0 ); - */ - if ( game["roundsplayed"] % level.roundswitch == 0 ) - { - [[level.onRoundSwitch]](); - return true; - } - - return false; -} - - -listenForGameEnd() //checked matches bo3 _globallogic.gsc within reason -{ - self waittill( "host_sucks_end_game" ); - //if ( level.console ) - // endparty(); - level.skipVote = true; - - if ( !level.gameEnded ) - level thread maps\mp\gametypes\_globallogic::forceEnd(true); -} - - -getKillStreaks( player ) //checked matches bo3 _globallogic.gsc within reason -{ - for ( killstreakNum = 0; killstreakNum < level.maxKillstreaks; killstreakNum++ ) - { - killstreak[ killstreakNum ] = "killstreak_null"; - } - - if ( isPlayer( player ) && !level.oldschool && level.disableCAC != 1 && - !isdefined( player.pers["isBot"] ) && isdefined( player.killstreak ) ) - { - currentKillstreak = 0; - for ( killstreakNum = 0; killstreakNum < level.maxKillstreaks; killstreakNum++ ) - { - if ( isDefined( player.killstreak[ killstreakNum ] ) ) - { - killstreak[ currentKillstreak ] = player.killstreak[ killstreakNum ]; - currentKillstreak++; - } - } - } - - return killstreak; -} - -updateRankedMatch(winner) //checked matches bo3 _globallogic.gsc within reason -{ - if ( level.rankedMatch ) - { - if ( hostIdledOut() ) - { - level.hostForcedEnd = true; - logString( "host idled out" ); - endLobby(); - } - } - if ( !level.wagerMatch && !SessionModeIsZombiesGame() ) - { - maps\mp\gametypes\_globallogic_score::updateMatchBonusScores( winner ); - maps\mp\gametypes\_globallogic_score::updateWinLossStats( winner ); - } -} - - - diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_actor.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_actor.gsc deleted file mode 100644 index 861b0c3..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_actor.gsc +++ /dev/null @@ -1,180 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) -{ - if ( game["state"] == "postgame" ) - return; - - if ( self.aiteam == "spectator" ) - return; - - if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat ) - return; - - self.idflags = idflags; - self.idflagstime = gettime(); - eattacker = maps\mp\gametypes\_globallogic_player::figureoutattacker( eattacker ); - - if ( !isdefined( vdir ) ) - idflags |= level.idflags_no_knockback; - - friendly = 0; - - if ( self.health == self.maxhealth || !isdefined( self.attackers ) ) - { - self.attackers = []; - self.attackerdata = []; - self.attackerdamage = []; - } - - if ( maps\mp\gametypes\_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) ) - smeansofdeath = "MOD_HEAD_SHOT"; - - if ( level.onlyheadshots ) - { - if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) - return; - else if ( smeansofdeath == "MOD_HEAD_SHOT" ) - idamage = 150; - } - - if ( smeansofdeath == "MOD_BURNED" ) - { - if ( sweapon == "none" ) - self maps\mp\_burnplayer::walkedthroughflames(); - - if ( sweapon == "m2_flamethrower_mp" ) - self maps\mp\_burnplayer::burnedwithflamethrower(); - } - - if ( sweapon == "none" && isdefined( einflictor ) ) - { - if ( isdefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) - sweapon = "explodable_barrel_mp"; - else if ( isdefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) - sweapon = "destructible_car_mp"; - } - - if ( !( idflags & level.idflags_no_protection ) ) - { - if ( isplayer( eattacker ) ) - eattacker.pers["participation"]++; - - prevhealthratio = self.health / self.maxhealth; - - if ( level.teambased && isplayer( eattacker ) && self != eattacker && self.aiteam == eattacker.pers["team"] ) - { - if ( level.friendlyfire == 0 ) - return; - else if ( level.friendlyfire == 1 ) - { - if ( idamage < 1 ) - idamage = 1; - - self.lastdamagewasfromenemy = 0; - self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - } - else if ( level.friendlyfire == 2 ) - return; - else if ( level.friendlyfire == 3 ) - { - idamage = int( idamage * 0.5 ); - - if ( idamage < 1 ) - idamage = 1; - - self.lastdamagewasfromenemy = 0; - self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - } - - friendly = 1; - } - else - { - if ( isdefined( eattacker ) && isdefined( self.script_owner ) && eattacker == self.script_owner && !level.hardcoremode ) - return; - - if ( isdefined( eattacker ) && isdefined( self.script_owner ) && isdefined( eattacker.script_owner ) && eattacker.script_owner == self.script_owner ) - return; - - if ( idamage < 1 ) - idamage = 1; - - if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( sweapon ) && !issubstr( smeansofdeath, "MOD_MELEE" ) ) - eattacker thread maps\mp\gametypes\_weapons::checkhit( sweapon ); - - if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isdefined( einflictor ) && isdefined( einflictor.iscooked ) ) - self.wascooked = gettime(); - else - self.wascooked = undefined; - - self.lastdamagewasfromenemy = isdefined( eattacker ) && eattacker != self; - self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - } - - if ( isdefined( eattacker ) && eattacker != self ) - { - if ( sweapon != "artillery_mp" && ( !isdefined( einflictor ) || !isai( einflictor ) ) ) - { - if ( idamage > 0 ) - eattacker thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor ); - } - } - } - -/# - if ( getdvarint( "g_debugDamage" ) ) - println( "actor:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); -#/ - - if ( 1 ) - { - lpselfnum = self getentitynumber(); - lpselfteam = self.aiteam; - lpattackerteam = ""; - - if ( isplayer( eattacker ) ) - { - lpattacknum = eattacker getentitynumber(); - lpattackguid = eattacker getguid(); - lpattackname = eattacker.name; - lpattackerteam = eattacker.pers["team"]; - } - else - { - lpattacknum = -1; - lpattackguid = ""; - lpattackname = ""; - lpattackerteam = "world"; - } - - logprint( "AD;" + lpselfnum + ";" + lpselfteam + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + ";" + boneindex + "\n" ); - } -} - -callback_actorkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) -{ - if ( game["state"] == "postgame" ) - return; - - if ( isai( attacker ) && isdefined( attacker.script_owner ) ) - { - if ( attacker.script_owner.team != self.aiteam ) - attacker = attacker.script_owner; - } - - if ( attacker.classname == "script_vehicle" && isdefined( attacker.owner ) ) - attacker = attacker.owner; - - if ( isdefined( attacker ) && isplayer( attacker ) ) - { - if ( !level.teambased || self.aiteam != attacker.pers["team"] ) - { - level.globalkillstreaksdestroyed++; - attacker addweaponstat( "dogs_mp", "destroyed", 1 ); - maps\mp\_scoreevents::processscoreevent( "killed_dog", attacker, self, sweapon ); - attacker maps\mp\_challenges::killeddog(); - } - } -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_audio.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_audio.gsc deleted file mode 100644 index a92e876..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_audio.gsc +++ /dev/null @@ -1,878 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -init() -{ - game["music"]["defeat"] = "mus_defeat"; - game["music"]["victory_spectator"] = "mus_defeat"; - game["music"]["winning"] = "mus_time_running_out_winning"; - game["music"]["losing"] = "mus_time_running_out_losing"; - game["music"]["match_end"] = "mus_match_end"; - game["music"]["victory_tie"] = "mus_defeat"; - game["music"]["suspense"] = []; - game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_01"; - game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_02"; - game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_03"; - game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_04"; - game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_05"; - game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_06"; - game["dialog"]["mission_success"] = "mission_success"; - game["dialog"]["mission_failure"] = "mission_fail"; - game["dialog"]["mission_draw"] = "draw"; - game["dialog"]["round_success"] = "encourage_win"; - game["dialog"]["round_failure"] = "encourage_lost"; - game["dialog"]["round_draw"] = "draw"; - game["dialog"]["timesup"] = "timesup"; - game["dialog"]["winning"] = "winning"; - game["dialog"]["losing"] = "losing"; - game["dialog"]["min_draw"] = "min_draw"; - game["dialog"]["lead_lost"] = "lead_lost"; - game["dialog"]["lead_tied"] = "tied"; - game["dialog"]["lead_taken"] = "lead_taken"; - game["dialog"]["last_alive"] = "lastalive"; - game["dialog"]["boost"] = "generic_boost"; - - if ( !isdefined( game["dialog"]["offense_obj"] ) ) - game["dialog"]["offense_obj"] = "generic_boost"; - - if ( !isdefined( game["dialog"]["defense_obj"] ) ) - game["dialog"]["defense_obj"] = "generic_boost"; - - game["dialog"]["hardcore"] = "hardcore"; - game["dialog"]["oldschool"] = "oldschool"; - game["dialog"]["highspeed"] = "highspeed"; - game["dialog"]["tactical"] = "tactical"; - game["dialog"]["challenge"] = "challengecomplete"; - game["dialog"]["promotion"] = "promotion"; - game["dialog"]["bomb_acquired"] = "sd_bomb_taken"; - game["dialog"]["bomb_taken"] = "sd_bomb_taken_taken"; - game["dialog"]["bomb_lost"] = "sd_bomb_drop"; - game["dialog"]["bomb_defused"] = "sd_bomb_defused"; - game["dialog"]["bomb_planted"] = "sd_bomb_planted"; - game["dialog"]["obj_taken"] = "securedobj"; - game["dialog"]["obj_lost"] = "lostobj"; - game["dialog"]["obj_defend"] = "defend_start"; - game["dialog"]["obj_destroy"] = "destroy_start"; - game["dialog"]["obj_capture"] = "capture_obj"; - game["dialog"]["objs_capture"] = "capture_objs"; - game["dialog"]["hq_located"] = "hq_located"; - game["dialog"]["hq_enemy_captured"] = "hq_capture"; - game["dialog"]["hq_enemy_destroyed"] = "hq_defend"; - game["dialog"]["hq_secured"] = "hq_secured"; - game["dialog"]["hq_offline"] = "hq_offline"; - game["dialog"]["hq_online"] = "hq_online"; - game["dialog"]["koth_located"] = "koth_located"; - game["dialog"]["koth_captured"] = "koth_captured"; - game["dialog"]["koth_lost"] = "koth_lost"; - game["dialog"]["koth_secured"] = "koth_secured"; - game["dialog"]["koth_contested"] = "koth_contest"; - game["dialog"]["koth_offline"] = "koth_offline"; - game["dialog"]["koth_online"] = "koth_online"; - game["dialog"]["move_to_new"] = "new_positions"; - game["dialog"]["attack"] = "attack"; - game["dialog"]["defend"] = "defend"; - game["dialog"]["offense"] = "offense"; - game["dialog"]["defense"] = "defense"; - game["dialog"]["halftime"] = "sd_halftime"; - game["dialog"]["overtime"] = "overtime"; - game["dialog"]["side_switch"] = "switchingsides"; - game["dialog"]["flag_taken"] = "ourflag"; - game["dialog"]["flag_dropped"] = "ourflag_drop"; - game["dialog"]["flag_returned"] = "ourflag_return"; - game["dialog"]["flag_captured"] = "ourflag_capt"; - game["dialog"]["enemy_flag_taken"] = "enemyflag"; - game["dialog"]["enemy_flag_dropped"] = "enemyflag_drop"; - game["dialog"]["enemy_flag_returned"] = "enemyflag_return"; - game["dialog"]["enemy_flag_captured"] = "enemyflag_capt"; - game["dialog"]["securing_a"] = "dom_securing_a"; - game["dialog"]["securing_b"] = "dom_securing_b"; - game["dialog"]["securing_c"] = "dom_securing_c"; - game["dialog"]["securing_d"] = "dom_securing_d"; - game["dialog"]["securing_e"] = "dom_securing_e"; - game["dialog"]["securing_f"] = "dom_securing_f"; - game["dialog"]["secured_a"] = "dom_secured_a"; - game["dialog"]["secured_b"] = "dom_secured_b"; - game["dialog"]["secured_c"] = "dom_secured_c"; - game["dialog"]["secured_d"] = "dom_secured_d"; - game["dialog"]["secured_e"] = "dom_secured_e"; - game["dialog"]["secured_f"] = "dom_secured_f"; - game["dialog"]["losing_a"] = "dom_losing_a"; - game["dialog"]["losing_b"] = "dom_losing_b"; - game["dialog"]["losing_c"] = "dom_losing_c"; - game["dialog"]["losing_d"] = "dom_losing_d"; - game["dialog"]["losing_e"] = "dom_losing_e"; - game["dialog"]["losing_f"] = "dom_losing_f"; - game["dialog"]["lost_a"] = "dom_lost_a"; - game["dialog"]["lost_b"] = "dom_lost_b"; - game["dialog"]["lost_c"] = "dom_lost_c"; - game["dialog"]["lost_d"] = "dom_lost_d"; - game["dialog"]["lost_e"] = "dom_lost_e"; - game["dialog"]["lost_f"] = "dom_lost_f"; - game["dialog"]["enemy_a"] = "dom_enemy_a"; - game["dialog"]["enemy_b"] = "dom_enemy_b"; - game["dialog"]["enemy_c"] = "dom_enemy_c"; - game["dialog"]["enemy_d"] = "dom_enemy_d"; - game["dialog"]["enemy_e"] = "dom_enemy_e"; - game["dialog"]["enemy_f"] = "dom_enemy_f"; - game["dialog"]["secure_flag"] = "secure_flag"; - game["dialog"]["securing_flag"] = "securing_flag"; - game["dialog"]["losing_flag"] = "losing_flag"; - game["dialog"]["lost_flag"] = "lost_flag"; - game["dialog"]["oneflag_enemy"] = "oneflag_enemy"; - game["dialog"]["oneflag_friendly"] = "oneflag_friendly"; - game["dialog"]["lost_all"] = "dom_lock_theytake"; - game["dialog"]["secure_all"] = "dom_lock_wetake"; - game["dialog"]["squad_move"] = "squad_move"; - game["dialog"]["squad_30sec"] = "squad_30sec"; - game["dialog"]["squad_winning"] = "squad_onemin_vic"; - game["dialog"]["squad_losing"] = "squad_onemin_loss"; - game["dialog"]["squad_down"] = "squad_down"; - game["dialog"]["squad_bomb"] = "squad_bomb"; - game["dialog"]["squad_plant"] = "squad_plant"; - game["dialog"]["squad_take"] = "squad_takeobj"; - game["dialog"]["kicked"] = "player_kicked"; - game["dialog"]["sentry_destroyed"] = "dest_sentry"; - game["dialog"]["sentry_hacked"] = "kls_turret_hacked"; - game["dialog"]["microwave_destroyed"] = "dest_microwave"; - game["dialog"]["microwave_hacked"] = "kls_microwave_hacked"; - game["dialog"]["sam_destroyed"] = "dest_sam"; - game["dialog"]["tact_destroyed"] = "dest_tact"; - game["dialog"]["equipment_destroyed"] = "dest_equip"; - game["dialog"]["hacked_equip"] = "hacked_equip"; - game["dialog"]["uav_destroyed"] = "kls_u2_destroyed"; - game["dialog"]["cuav_destroyed"] = "kls_cu2_destroyed"; - game["dialog"]["wm_in_the_money"] = "mpl_wager_top3_gain"; - game["dialog"]["wm_oot_money"] = "mpl_wager_top3_loss"; - level.dialoggroups = []; - level thread post_match_snapshot_watcher(); -} - -registerdialoggroup( group, skipifcurrentlyplayinggroup ) -{ - if ( !isdefined( level.dialoggroups ) ) - level.dialoggroups = []; - else if ( isdefined( level.dialoggroup[group] ) ) - { -/# - error( "registerDialogGroup: Dialog group " + group + " already registered." ); -#/ - return; - } - - level.dialoggroup[group] = spawnstruct(); - level.dialoggroup[group].group = group; - level.dialoggroup[group].skipifcurrentlyplayinggroup = skipifcurrentlyplayinggroup; - level.dialoggroup[group].currentcount = 0; -} - -sndstartmusicsystem() -{ - self endon( "disconnect" ); - - if ( game["state"] == "postgame" ) - return; - - if ( game["state"] == "pregame" ) - { -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - music state is undefined Waiting 15 seconds to set music state" ); -#/ - wait 45; - - if ( !isdefined( level.nextmusicstate ) ) - { - self.pers["music"].currentstate = "UNDERSCORE"; - self thread suspensemusic(); - } - } - - if ( !isdefined( level.nextmusicstate ) ) - { -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - music state is undefined Waiting 15 seconds to set music state" ); -#/ - self.pers["music"].currentstate = "UNDERSCORE"; - self thread suspensemusic(); - } -} - -suspensemusicforplayer() -{ - self endon( "disconnect" ); - self thread set_music_on_player( "UNDERSCORE", 0 ); -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - Setting Music State Random Underscore " + self.pers["music"].returnstate + " On player " + self getentitynumber() ); -#/ -} - -suspensemusic( random ) -{ - level endon( "game_ended" ); - level endon( "match_ending_soon" ); - self endon( "disconnect" ); -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - Starting random underscore" ); -#/ - - while ( true ) - { - wait( randomintrange( 25, 60 ) ); -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - Checking for random underscore" ); -#/ - - if ( !isdefined( self.pers["music"].inque ) ) - self.pers["music"].inque = 0; - - if ( self.pers["music"].inque ) - { -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - Inque no random underscore" ); -#/ - continue; - } - - if ( !isdefined( self.pers["music"].currentstate ) ) - self.pers["music"].currentstate = "SILENT"; - - if ( randomint( 100 ) < self.underscorechance && self.pers["music"].currentstate != "ACTION" && self.pers["music"].currentstate != "TIME_OUT" ) - { - self thread suspensemusicforplayer(); - self.underscorechance -= 20; -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - Starting random underscore" ); -#/ - } - } -} - -leaderdialogforotherteams( dialog, skip_team, squad_dialog ) -{ - foreach ( team in level.teams ) - { - if ( team != skip_team ) - leaderdialog( dialog, team, undefined, undefined, squad_dialog ); - } -} - -announceroundwinner( winner, delay ) -{ - if ( delay > 0 ) - wait( delay ); - - if ( !isdefined( winner ) || isplayer( winner ) ) - return; - - if ( isdefined( level.teams[winner] ) ) - { - leaderdialog( "round_success", winner ); - leaderdialogforotherteams( "round_failure", winner ); - } - else - { - foreach ( team in level.teams ) - thread playsoundonplayers( "mus_round_draw" + "_" + level.teampostfix[team] ); - - leaderdialog( "round_draw" ); - } -} - -announcegamewinner( winner, delay ) -{ - if ( delay > 0 ) - wait( delay ); - - if ( !isdefined( winner ) || isplayer( winner ) ) - return; - - if ( isdefined( level.teams[winner] ) ) - { - leaderdialog( "mission_success", winner ); - leaderdialogforotherteams( "mission_failure", winner ); - } - else - leaderdialog( "mission_draw" ); -} - -doflameaudio() -{ - self endon( "disconnect" ); - waittillframeend; - - if ( !isdefined( self.lastflamehurtaudio ) ) - self.lastflamehurtaudio = 0; - - currenttime = gettime(); - - if ( self.lastflamehurtaudio + level.fire_audio_repeat_duration + randomint( level.fire_audio_random_max_duration ) < currenttime ) - { - self playlocalsound( "vox_pain_small" ); - self.lastflamehurtaudio = currenttime; - } -} - -leaderdialog( dialog, team, group, excludelist, squaddialog ) -{ -/# - assert( isdefined( level.players ) ); -#/ - - if ( level.wagermatch ) - return; - - if ( !isdefined( team ) ) - { - dialogs = []; - - foreach ( team in level.teams ) - dialogs[team] = dialog; - - leaderdialogallteams( dialogs, group, excludelist ); - return; - } - - if ( isdefined( excludelist ) ) - { - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - - if ( isdefined( player.pers["team"] ) && player.pers["team"] == team && !maps\mp\gametypes\_globallogic_utils::isexcluded( player, excludelist ) ) - player leaderdialogonplayer( dialog, group ); - } - } - else - { - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - - if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) - player leaderdialogonplayer( dialog, group ); - } - } -} - -leaderdialogallteams( dialogs, group, excludelist ) -{ -/# - assert( isdefined( level.players ) ); -#/ - - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - team = player.pers["team"]; - - if ( !isdefined( team ) ) - continue; - - if ( !isdefined( dialogs[team] ) ) - continue; - - if ( isdefined( excludelist ) && maps\mp\gametypes\_globallogic_utils::isexcluded( player, excludelist ) ) - continue; - - player leaderdialogonplayer( dialogs[team], group ); - } -} - -flushdialog() -{ - foreach ( player in level.players ) - player flushdialogonplayer(); -} - -flushdialogonplayer() -{ - self.leaderdialoggroups = []; - self.leaderdialogqueue = []; - self.leaderdialogactive = 0; - self.currentleaderdialoggroup = ""; - self notify( "flush_dialog" ); -} - -flushgroupdialog( group ) -{ - foreach ( player in level.players ) - player flushgroupdialogonplayer( group ); -} - -flushgroupdialogonplayer( group ) -{ - self.leaderdialoggroups[group] = undefined; - arrayremovevalue( self.leaderdialogqueue, group ); - - if ( self.leaderdialogqueue.size == 0 ) - self flushdialogonplayer(); -} - -addgroupdialogtoplayer( dialog, group ) -{ - if ( !isdefined( level.dialoggroup[group] ) ) - { -/# - error( "leaderDialogOnPlayer: Dialog group " + group + " is not registered" ); -#/ - return 0; - } - - addtoqueue = 0; - - if ( !isdefined( self.leaderdialoggroups[group] ) ) - addtoqueue = 1; - - if ( !level.dialoggroup[group].skipifcurrentlyplayinggroup ) - { - if ( self.currentleaderdialog == dialog && self.currentleaderdialogtime + 2000 > gettime() ) - { - self.leaderdialoggroups[group] = undefined; - arrayremovevalue( self.leaderdialogqueue, group ); - - if ( self.leaderdialogqueue.size == 0 ) - self flushdialogonplayer(); - - return 0; - } - } - else if ( self.currentleaderdialoggroup == group ) - return 0; - - self.leaderdialoggroups[group] = dialog; - return addtoqueue; -} - -leaderdialogonplayer( dialog, group ) -{ -/# - assert( isdefined( dialog ) ); -#/ - team = self.pers["team"]; - - if ( !isdefined( team ) ) - return; - - if ( !isdefined( level.teams[team] ) ) - return; - - if ( isdefined( group ) ) - { - if ( !addgroupdialogtoplayer( dialog, group ) ) - return; - - dialog = group; - } - - if ( self.leaderdialogqueue.size < 10 ) - self.leaderdialogqueue[self.leaderdialogqueue.size] = dialog; - - if ( !self.leaderdialogactive ) - self thread playnextleaderdialog(); -} - -waitforsound( sound, extratime ) -{ - if ( !isdefined( extratime ) ) - extratime = 0.1; - - time = soundgetplaybacktime( sound ); - - if ( time < 0 ) - wait( 3.0 + extratime ); - else - wait( time * 0.001 + extratime ); -} - -playnextleaderdialog() -{ - self endon( "disconnect" ); - self endon( "flush_dialog" ); - - if ( isdefined( level.allowannouncer ) && !level.allowannouncer ) - return; - - self.leaderdialogactive = 1; - waittillframeend; -/# - assert( self.leaderdialogqueue.size > 0 ); -#/ - dialog = self.leaderdialogqueue[0]; -/# - assert( isdefined( dialog ) ); -#/ - arrayremoveindex( self.leaderdialogqueue, 0 ); - team = self.pers["team"]; - - if ( isdefined( self.leaderdialoggroups[dialog] ) ) - { - group = dialog; - dialog = self.leaderdialoggroups[group]; - self.leaderdialoggroups[group] = undefined; - self.currentleaderdialoggroup = group; - } - - if ( level.wagermatch ) - faction = "vox_wm_"; - else - faction = game["voice"][team]; - - if ( !isdefined( faction ) ) - return; - - sound_name = faction + game["dialog"][dialog]; - - if ( level.allowannouncer ) - { - self playlocalsound( sound_name ); - self.currentleaderdialog = dialog; - self.currentleaderdialogtime = gettime(); - } - - waitforsound( sound_name ); - self.leaderdialogactive = 0; - self.currentleaderdialoggroup = ""; - self.currentleaderdialog = ""; - - if ( self.leaderdialogqueue.size > 0 ) - self thread playnextleaderdialog(); -} - -isteamwinning( checkteam ) -{ - score = game["teamScores"][checkteam]; - - foreach ( team in level.teams ) - { - if ( team != checkteam ) - { - if ( game["teamScores"][team] >= score ) - return false; - } - } - - return true; -} - -announceteamiswinning() -{ - foreach ( team in level.teams ) - { - if ( isteamwinning( team ) ) - { - leaderdialog( "winning", team, undefined, undefined, "squad_winning" ); - leaderdialogforotherteams( "losing", team, "squad_losing" ); - return true; - } - } - - return false; -} - -musiccontroller() -{ - level endon( "game_ended" ); - level thread musictimesout(); - - level waittill( "match_ending_soon" ); - - if ( islastround() || isoneround() ) - { - if ( level.teambased ) - { - if ( !announceteamiswinning() ) - leaderdialog( "min_draw" ); - } - - level waittill( "match_ending_very_soon" ); - - foreach ( team in level.teams ) - leaderdialog( "timesup", team, undefined, undefined, "squad_30sec" ); - } - else - { - level waittill( "match_ending_vox" ); - - leaderdialog( "timesup" ); - } -} - -musictimesout() -{ - level endon( "game_ended" ); - - level waittill( "match_ending_very_soon" ); - - thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "TIME_OUT", "both", 1, 0 ); -} - -actionmusicset() -{ - level endon( "game_ended" ); - level.playingactionmusic = 1; - wait 45; - level.playingactionmusic = 0; -} - -play_2d_on_team( alias, team ) -{ -/# - assert( isdefined( level.players ) ); -#/ - - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - - if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) - player playlocalsound( alias ); - } -} - -set_music_on_team( state, team, save_state, return_state, wait_time ) -{ - if ( sessionmodeiszombiesgame() ) - return; - -/# - assert( isdefined( level.players ) ); -#/ - - if ( !isdefined( team ) ) - { - team = "both"; -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - team undefined: Setting to both" ); -#/ - } - - if ( !isdefined( save_state ) ) - { - save_sate = 0; -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - save_sate undefined: Setting to false" ); -#/ - } - - if ( !isdefined( return_state ) ) - { - return_state = 0; -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - Music System - return_state undefined: Setting to false" ); -#/ - } - - if ( !isdefined( wait_time ) ) - { - wait_time = 0; -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - wait_time undefined: Setting to 0" ); -#/ - } - - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - - if ( team == "both" ) - { - player thread set_music_on_player( state, save_state, return_state, wait_time ); - continue; - } - - if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) - { - player thread set_music_on_player( state, save_state, return_state, wait_time ); -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - Setting Music State " + state + " On player " + player getentitynumber() ); -#/ - } - } -} - -set_music_on_player( state, save_state, return_state, wait_time ) -{ - self endon( "disconnect" ); - - if ( sessionmodeiszombiesgame() ) - return; - -/# - assert( isplayer( self ) ); -#/ - - if ( !isdefined( save_state ) ) - { - save_state = 0; -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - Music System - save_sate undefined: Setting to false" ); -#/ - } - - if ( !isdefined( return_state ) ) - { - return_state = 0; -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - Music System - return_state undefined: Setting to false" ); -#/ - } - - if ( !isdefined( wait_time ) ) - { - wait_time = 0; -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - wait_time undefined: Setting to 0" ); -#/ - } - - if ( !isdefined( state ) ) - { - state = "UNDERSCORE"; -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - state undefined: Setting to UNDERSCORE" ); -#/ - } - - maps\mp\_music::setmusicstate( state, self ); - - if ( isdefined( self.pers["music"].currentstate ) && save_state ) - { - self.pers["music"].returnstate = state; -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - Saving Music State " + self.pers["music"].returnstate + " On " + self getentitynumber() ); -#/ - } - - self.pers["music"].previousstate = self.pers["music"].currentstate; - self.pers["music"].currentstate = state; -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - Setting Music State " + state + " On player " + self getentitynumber() ); -#/ - - if ( isdefined( self.pers["music"].returnstate ) && return_state ) - { -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - Starting Return State " + self.pers["music"].returnstate + " On " + self getentitynumber() ); -#/ - self set_next_music_state( self.pers["music"].returnstate, wait_time ); - } -} - -return_music_state_player( wait_time ) -{ - if ( !isdefined( wait_time ) ) - { - wait_time = 0; -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - wait_time undefined: Setting to 0" ); -#/ - } - - self set_next_music_state( self.pers["music"].returnstate, wait_time ); -} - -return_music_state_team( team, wait_time ) -{ - if ( !isdefined( wait_time ) ) - { - wait_time = 0; -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - wait_time undefined: Setting to 0" ); -#/ - } - - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - - if ( team == "both" ) - { - player thread set_next_music_state( self.pers["music"].returnstate, wait_time ); - continue; - } - - if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) - { - player thread set_next_music_state( self.pers["music"].returnstate, wait_time ); -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - Setting Music State " + self.pers["music"].returnstate + " On player " + player getentitynumber() ); -#/ - } - } -} - -set_next_music_state( nextstate, wait_time ) -{ - self endon( "disconnect" ); - self.pers["music"].nextstate = nextstate; -/# - if ( getdvarint( _hash_BC4784C ) > 0 ) - println( "Music System - Setting next Music State " + self.pers["music"].nextstate + " On " + self getentitynumber() ); -#/ - - if ( !isdefined( self.pers["music"].inque ) ) - self.pers["music"].inque = 0; - - if ( self.pers["music"].inque ) - { - return; -/# - println( "Music System - Music state in que" ); -#/ - } - else - { - self.pers["music"].inque = 1; - - if ( wait_time ) - wait( wait_time ); - - self set_music_on_player( self.pers["music"].nextstate, 0 ); - self.pers["music"].inque = 0; - } -} - -getroundswitchdialog( switchtype ) -{ - switch ( switchtype ) - { - case "halftime": - return "halftime"; - case "overtime": - return "overtime"; - default: - return "side_switch"; - } -} - -post_match_snapshot_watcher() -{ - level waittill( "game_ended" ); - - level clientnotify( "pm" ); - - level waittill( "sfade" ); - - level clientnotify( "pmf" ); -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_defaults.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_defaults.gsc deleted file mode 100644 index 9a43eeb..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_defaults.gsc +++ /dev/null @@ -1,263 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -getwinningteamfromloser( losing_team ) -{ - if ( level.multiteam ) - return "tie"; - else if ( losing_team == "axis" ) - return "allies"; - - return "axis"; -} - -default_onforfeit( team ) -{ - level.gameforfeited = 1; - level notify( "forfeit in progress" ); - level endon( "forfeit in progress" ); - level endon( "abort forfeit" ); - forfeit_delay = 20.0; - announcement( game["strings"]["opponent_forfeiting_in"], forfeit_delay, 0 ); - wait 10.0; - announcement( game["strings"]["opponent_forfeiting_in"], 10.0, 0 ); - wait 10.0; - endreason = &""; - - if ( level.multiteam ) - { - setdvar( "ui_text_endreason", game["strings"]["other_teams_forfeited"] ); - endreason = game["strings"]["other_teams_forfeited"]; - winner = team; - } - else if ( !isdefined( team ) ) - { - setdvar( "ui_text_endreason", game["strings"]["players_forfeited"] ); - endreason = game["strings"]["players_forfeited"]; - winner = level.players[0]; - } - else if ( isdefined( level.teams[team] ) ) - { - endreason = game["strings"][team + "_forfeited"]; - setdvar( "ui_text_endreason", endreason ); - winner = getwinningteamfromloser( team ); - } - else - { -/# - assert( isdefined( team ), "Forfeited team is not defined" ); -#/ -/# - assert( 0, "Forfeited team " + team + " is not allies or axis" ); -#/ - winner = "tie"; - } - - level.forcedend = 1; - - if ( isplayer( winner ) ) - logstring( "forfeit, win: " + winner getxuid() + "(" + winner.name + ")" ); - else - maps\mp\gametypes\_globallogic_utils::logteamwinstring( "forfeit", winner ); - - thread maps\mp\gametypes\_globallogic::endgame( winner, endreason ); -} - -default_ondeadevent( team ) -{ - if ( isdefined( level.teams[team] ) ) - { - eliminatedstring = game["strings"][team + "_eliminated"]; - iprintln( eliminatedstring ); - makedvarserverinfo( "ui_text_endreason", eliminatedstring ); - setdvar( "ui_text_endreason", eliminatedstring ); - winner = getwinningteamfromloser( team ); - maps\mp\gametypes\_globallogic_utils::logteamwinstring( "team eliminated", winner ); - thread maps\mp\gametypes\_globallogic::endgame( winner, eliminatedstring ); - } - else - { - makedvarserverinfo( "ui_text_endreason", game["strings"]["tie"] ); - setdvar( "ui_text_endreason", game["strings"]["tie"] ); - maps\mp\gametypes\_globallogic_utils::logteamwinstring( "tie" ); - - if ( level.teambased ) - thread maps\mp\gametypes\_globallogic::endgame( "tie", game["strings"]["tie"] ); - else - thread maps\mp\gametypes\_globallogic::endgame( undefined, game["strings"]["tie"] ); - } -} - -default_onlastteamaliveevent( team ) -{ - if ( isdefined( level.teams[team] ) ) - { - eliminatedstring = game["strings"]["enemies_eliminated"]; - iprintln( eliminatedstring ); - makedvarserverinfo( "ui_text_endreason", eliminatedstring ); - setdvar( "ui_text_endreason", eliminatedstring ); - winner = maps\mp\gametypes\_globallogic::determineteamwinnerbygamestat( "teamScores" ); - maps\mp\gametypes\_globallogic_utils::logteamwinstring( "team eliminated", winner ); - thread maps\mp\gametypes\_globallogic::endgame( winner, eliminatedstring ); - } - else - { - makedvarserverinfo( "ui_text_endreason", game["strings"]["tie"] ); - setdvar( "ui_text_endreason", game["strings"]["tie"] ); - maps\mp\gametypes\_globallogic_utils::logteamwinstring( "tie" ); - - if ( level.teambased ) - thread maps\mp\gametypes\_globallogic::endgame( "tie", game["strings"]["tie"] ); - else - thread maps\mp\gametypes\_globallogic::endgame( undefined, game["strings"]["tie"] ); - } -} - -default_onalivecountchange( team ) -{ - -} - -default_onroundendgame( winner ) -{ - return winner; -} - -default_ononeleftevent( team ) -{ - if ( !level.teambased ) - { - winner = maps\mp\gametypes\_globallogic_score::gethighestscoringplayer(); - - if ( isdefined( winner ) ) - logstring( "last one alive, win: " + winner.name ); - else - logstring( "last one alive, win: unknown" ); - - thread maps\mp\gametypes\_globallogic::endgame( winner, &"MP_ENEMIES_ELIMINATED" ); - } - else - { - for ( index = 0; index < level.players.size; index++ ) - { - player = level.players[index]; - - if ( !isalive( player ) ) - continue; - - if ( !isdefined( player.pers["team"] ) || player.pers["team"] != team ) - continue; - - player maps\mp\gametypes\_globallogic_audio::leaderdialogonplayer( "sudden_death" ); - } - } -} - -default_ontimelimit() -{ - winner = undefined; - - if ( level.teambased ) - { - winner = maps\mp\gametypes\_globallogic::determineteamwinnerbygamestat( "teamScores" ); - maps\mp\gametypes\_globallogic_utils::logteamwinstring( "time limit", winner ); - } - else - { - winner = maps\mp\gametypes\_globallogic_score::gethighestscoringplayer(); - - if ( isdefined( winner ) ) - logstring( "time limit, win: " + winner.name ); - else - logstring( "time limit, tie" ); - } - - makedvarserverinfo( "ui_text_endreason", game["strings"]["time_limit_reached"] ); - setdvar( "ui_text_endreason", game["strings"]["time_limit_reached"] ); - thread maps\mp\gametypes\_globallogic::endgame( winner, game["strings"]["time_limit_reached"] ); -} - -default_onscorelimit() -{ - if ( !level.endgameonscorelimit ) - return false; - - winner = undefined; - - if ( level.teambased ) - { - winner = maps\mp\gametypes\_globallogic::determineteamwinnerbygamestat( "teamScores" ); - maps\mp\gametypes\_globallogic_utils::logteamwinstring( "scorelimit", winner ); - } - else - { - winner = maps\mp\gametypes\_globallogic_score::gethighestscoringplayer(); - - if ( isdefined( winner ) ) - logstring( "scorelimit, win: " + winner.name ); - else - logstring( "scorelimit, tie" ); - } - - makedvarserverinfo( "ui_text_endreason", game["strings"]["score_limit_reached"] ); - setdvar( "ui_text_endreason", game["strings"]["score_limit_reached"] ); - thread maps\mp\gametypes\_globallogic::endgame( winner, game["strings"]["score_limit_reached"] ); - return true; -} - -default_onspawnspectator( origin, angles ) -{ - if ( isdefined( origin ) && isdefined( angles ) ) - { - self spawn( origin, angles ); - return; - } - - spawnpointname = "mp_global_intermission"; - spawnpoints = getentarray( spawnpointname, "classname" ); -/# - assert( spawnpoints.size, "There are no mp_global_intermission spawn points in the map. There must be at least one." ); -#/ - spawnpoint = maps\mp\gametypes\_spawnlogic::getspawnpoint_random( spawnpoints ); - self spawn( spawnpoint.origin, spawnpoint.angles ); -} - -default_onspawnintermission() -{ - spawnpointname = "mp_global_intermission"; - spawnpoints = getentarray( spawnpointname, "classname" ); - spawnpoint = spawnpoints[0]; - - if ( isdefined( spawnpoint ) ) - self spawn( spawnpoint.origin, spawnpoint.angles ); - else - { -/# - maps\mp\_utility::error( "NO " + spawnpointname + " SPAWNPOINTS IN MAP" ); -#/ - } -} - -default_gettimelimit() -{ - return clamp( getgametypesetting( "timeLimit" ), level.timelimitmin, level.timelimitmax ); -} - -default_getteamkillpenalty( einflictor, attacker, smeansofdeath, sweapon ) -{ - teamkill_penalty = 1; - score = maps\mp\gametypes\_globallogic_score::_getplayerscore( attacker ); - - if ( score == 0 ) - teamkill_penalty = 2; - - if ( maps\mp\killstreaks\_killstreaks::iskillstreakweapon( sweapon ) ) - teamkill_penalty *= maps\mp\killstreaks\_killstreaks::getkillstreakteamkillpenaltyscale( sweapon ); - - return teamkill_penalty; -} - -default_getteamkillscore( einflictor, attacker, smeansofdeath, sweapon ) -{ - return maps\mp\gametypes\_rank::getscoreinfovalue( "team_kill" ); -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_player.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_player.gsc deleted file mode 100644 index 90b9d8d..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_player.gsc +++ /dev/null @@ -1,2604 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -freezeplayerforroundend() -{ - self clearlowermessage(); - self closemenu(); - self closeingamemenu(); - self freeze_player_controls( 1 ); - - if ( !sessionmodeiszombiesgame() ) - { - currentweapon = self getcurrentweapon(); - - if ( maps\mp\killstreaks\_killstreaks::iskillstreakweapon( currentweapon ) && !maps\mp\killstreaks\_killstreak_weapons::isheldkillstreakweapon( currentweapon ) ) - self takeweapon( currentweapon ); - } -} - -callback_playerconnect() -{ - thread notifyconnecting(); - self.statusicon = "hud_status_connecting"; - - self waittill( "begin" ); - - if ( isdefined( level.reset_clientdvars ) ) - self [[ level.reset_clientdvars ]](); - - waittillframeend; - self.statusicon = ""; - self.guid = self getguid(); - matchrecorderincrementheaderstat( "playerCountJoined", 1 ); - profilelog_begintiming( 4, "ship" ); - level notify( "connected", self ); - - if ( self ishost() ) - self thread maps\mp\gametypes\_globallogic::listenforgameend(); - - if ( !level.splitscreen && !isdefined( self.pers["score"] ) ) - iprintln( &"MP_CONNECTED", self ); - - if ( !isdefined( self.pers["score"] ) ) - { - self thread maps\mp\gametypes\_persistence::adjustrecentstats(); - self maps\mp\gametypes\_persistence::setafteractionreportstat( "valid", 0 ); - - if ( gamemodeismode( level.gamemode_wager_match ) && !self ishost() ) - self maps\mp\gametypes\_persistence::setafteractionreportstat( "wagerMatchFailed", 1 ); - else - self maps\mp\gametypes\_persistence::setafteractionreportstat( "wagerMatchFailed", 0 ); - } - - if ( ( level.rankedmatch || level.wagermatch || level.leaguematch ) && !isdefined( self.pers["matchesPlayedStatsTracked"] ) ) - { - gamemode = maps\mp\gametypes\_globallogic::getcurrentgamemode(); - self maps\mp\gametypes\_globallogic::incrementmatchcompletionstat( gamemode, "played", "started" ); - - if ( !isdefined( self.pers["matchesHostedStatsTracked"] ) && self islocaltohost() ) - { - self maps\mp\gametypes\_globallogic::incrementmatchcompletionstat( gamemode, "hosted", "started" ); - self.pers["matchesHostedStatsTracked"] = 1; - } - - self.pers["matchesPlayedStatsTracked"] = 1; - self thread maps\mp\gametypes\_persistence::uploadstatssoon(); - } - - self maps\mp\_gamerep::gamerepplayerconnected(); - lpselfnum = self getentitynumber(); - lpguid = self getguid(); - logprint( "J;" + lpguid + ";" + lpselfnum + ";" + self.name + "\n" ); - bbprint( "mpjoins", "name %s client %s", self.name, lpselfnum ); - - if ( !sessionmodeiszombiesgame() ) - self setclientuivisibilityflag( "hud_visible", 1 ); - - if ( level.forceradar == 1 ) - { - self.pers["hasRadar"] = 1; - self.hasspyplane = 1; - level.activeuavs[self getentitynumber()] = 1; - } - - if ( level.forceradar == 2 ) - self setclientuivisibilityflag( "g_compassShowEnemies", level.forceradar ); - else - self setclientuivisibilityflag( "g_compassShowEnemies", 0 ); - - self setclientplayersprinttime( level.playersprinttime ); - self setclientnumlives( level.numlives ); - makedvarserverinfo( "cg_drawTalk", 1 ); - - if ( level.hardcoremode ) - self setclientdrawtalk( 3 ); - - if ( sessionmodeiszombiesgame() ) - self [[ level.player_stats_init ]](); - else - { - self maps\mp\gametypes\_globallogic_score::initpersstat( "score" ); - - if ( level.resetplayerscoreeveryround ) - self.pers["score"] = 0; - - self.score = self.pers["score"]; - self maps\mp\gametypes\_globallogic_score::initpersstat( "pointstowin" ); - - if ( level.scoreroundbased ) - self.pers["pointstowin"] = 0; - - self.pointstowin = self.pers["pointstowin"]; - self maps\mp\gametypes\_globallogic_score::initpersstat( "momentum", 0 ); - self.momentum = self maps\mp\gametypes\_globallogic_score::getpersstat( "momentum" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "suicides" ); - self.suicides = self maps\mp\gametypes\_globallogic_score::getpersstat( "suicides" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "headshots" ); - self.headshots = self maps\mp\gametypes\_globallogic_score::getpersstat( "headshots" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "challenges" ); - self.challenges = self maps\mp\gametypes\_globallogic_score::getpersstat( "challenges" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "kills" ); - self.kills = self maps\mp\gametypes\_globallogic_score::getpersstat( "kills" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "deaths" ); - self.deaths = self maps\mp\gametypes\_globallogic_score::getpersstat( "deaths" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "assists" ); - self.assists = self maps\mp\gametypes\_globallogic_score::getpersstat( "assists" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "defends", 0 ); - self.defends = self maps\mp\gametypes\_globallogic_score::getpersstat( "defends" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "offends", 0 ); - self.offends = self maps\mp\gametypes\_globallogic_score::getpersstat( "offends" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "plants", 0 ); - self.plants = self maps\mp\gametypes\_globallogic_score::getpersstat( "plants" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "defuses", 0 ); - self.defuses = self maps\mp\gametypes\_globallogic_score::getpersstat( "defuses" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "returns", 0 ); - self.returns = self maps\mp\gametypes\_globallogic_score::getpersstat( "returns" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "captures", 0 ); - self.captures = self maps\mp\gametypes\_globallogic_score::getpersstat( "captures" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "destructions", 0 ); - self.destructions = self maps\mp\gametypes\_globallogic_score::getpersstat( "destructions" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "backstabs", 0 ); - self.backstabs = self maps\mp\gametypes\_globallogic_score::getpersstat( "backstabs" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "longshots", 0 ); - self.longshots = self maps\mp\gametypes\_globallogic_score::getpersstat( "longshots" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "survived", 0 ); - self.survived = self maps\mp\gametypes\_globallogic_score::getpersstat( "survived" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "stabs", 0 ); - self.stabs = self maps\mp\gametypes\_globallogic_score::getpersstat( "stabs" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "tomahawks", 0 ); - self.tomahawks = self maps\mp\gametypes\_globallogic_score::getpersstat( "tomahawks" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "humiliated", 0 ); - self.humiliated = self maps\mp\gametypes\_globallogic_score::getpersstat( "humiliated" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "x2score", 0 ); - self.x2score = self maps\mp\gametypes\_globallogic_score::getpersstat( "x2score" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "agrkills", 0 ); - self.x2score = self maps\mp\gametypes\_globallogic_score::getpersstat( "agrkills" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "hacks", 0 ); - self.x2score = self maps\mp\gametypes\_globallogic_score::getpersstat( "hacks" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "killsconfirmed", 0 ); - self.killsconfirmed = self maps\mp\gametypes\_globallogic_score::getpersstat( "killsconfirmed" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "killsdenied", 0 ); - self.killsdenied = self maps\mp\gametypes\_globallogic_score::getpersstat( "killsdenied" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "sessionbans", 0 ); - self.sessionbans = self maps\mp\gametypes\_globallogic_score::getpersstat( "sessionbans" ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "gametypeban", 0 ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "time_played_total", 0 ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "time_played_alive", 0 ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "teamkills", 0 ); - self maps\mp\gametypes\_globallogic_score::initpersstat( "teamkills_nostats", 0 ); - self.teamkillpunish = 0; - - if ( level.minimumallowedteamkills >= 0 && self.pers["teamkills_nostats"] > level.minimumallowedteamkills ) - self thread reduceteamkillsovertime(); - } - - if ( getdvar( "r_reflectionProbeGenerate" ) == "1" ) - level waittill( "eternity" ); - - self.killedplayerscurrent = []; - - if ( !isdefined( self.pers["best_kill_streak"] ) ) - { - self.pers["killed_players"] = []; - self.pers["killed_by"] = []; - self.pers["nemesis_tracking"] = []; - self.pers["artillery_kills"] = 0; - self.pers["dog_kills"] = 0; - self.pers["nemesis_name"] = ""; - self.pers["nemesis_rank"] = 0; - self.pers["nemesis_rankIcon"] = 0; - self.pers["nemesis_xp"] = 0; - self.pers["nemesis_xuid"] = ""; - self.pers["best_kill_streak"] = 0; - } - - if ( !isdefined( self.pers["music"] ) ) - { - self.pers["music"] = spawnstruct(); - self.pers["music"].spawn = 0; - self.pers["music"].inque = 0; - self.pers["music"].currentstate = "SILENT"; - self.pers["music"].previousstate = "SILENT"; - self.pers["music"].nextstate = "UNDERSCORE"; - self.pers["music"].returnstate = "UNDERSCORE"; - } - - self.leaderdialogqueue = []; - self.leaderdialogactive = 0; - self.leaderdialoggroups = []; - self.currentleaderdialoggroup = ""; - self.currentleaderdialog = ""; - self.currentleaderdialogtime = 0; - - if ( !isdefined( self.pers["cur_kill_streak"] ) ) - self.pers["cur_kill_streak"] = 0; - - if ( !isdefined( self.pers["cur_total_kill_streak"] ) ) - { - self.pers["cur_total_kill_streak"] = 0; - self setplayercurrentstreak( 0 ); - } - - if ( !isdefined( self.pers["totalKillstreakCount"] ) ) - self.pers["totalKillstreakCount"] = 0; - - if ( !isdefined( self.pers["killstreaksEarnedThisKillstreak"] ) ) - self.pers["killstreaksEarnedThisKillstreak"] = 0; - - if ( isdefined( level.usingscorestreaks ) && level.usingscorestreaks && !isdefined( self.pers["killstreak_quantity"] ) ) - self.pers["killstreak_quantity"] = []; - - if ( isdefined( level.usingscorestreaks ) && level.usingscorestreaks && !isdefined( self.pers["held_killstreak_ammo_count"] ) ) - self.pers["held_killstreak_ammo_count"] = []; - - if ( isdefined( level.usingscorestreaks ) && level.usingscorestreaks && !isdefined( self.pers["held_killstreak_clip_count"] ) ) - self.pers["held_killstreak_clip_count"] = []; - - if ( !isdefined( self.pers["changed_class"] ) ) - self.pers["changed_class"] = 0; - - self.lastkilltime = 0; - self.cur_death_streak = 0; - self disabledeathstreak(); - self.death_streak = 0; - self.kill_streak = 0; - self.gametype_kill_streak = 0; - self.spawnqueueindex = -1; - self.deathtime = 0; - - if ( level.onlinegame ) - { - self.death_streak = self getdstat( "HighestStats", "death_streak" ); - self.kill_streak = self getdstat( "HighestStats", "kill_streak" ); - self.gametype_kill_streak = self maps\mp\gametypes\_persistence::statgetwithgametype( "kill_streak" ); - } - - self.lastgrenadesuicidetime = -1; - self.teamkillsthisround = 0; - - if ( !isdefined( level.livesdonotreset ) || !level.livesdonotreset || !isdefined( self.pers["lives"] ) ) - self.pers["lives"] = level.numlives; - - if ( !level.teambased ) - self.pers["team"] = undefined; - - self.hasspawned = 0; - self.waitingtospawn = 0; - self.wantsafespawn = 0; - self.deathcount = 0; - self.wasaliveatmatchstart = 0; - self thread maps\mp\_flashgrenades::monitorflash(); - level.players[level.players.size] = self; - - if ( level.splitscreen ) - setdvar( "splitscreen_playerNum", level.players.size ); - - if ( game["state"] == "postgame" ) - { - self.pers["needteam"] = 1; - self.pers["team"] = "spectator"; - self.team = "spectator"; - self setclientuivisibilityflag( "hud_visible", 0 ); - self [[ level.spawnintermission ]](); - self closemenu(); - self closeingamemenu(); - profilelog_endtiming( 4, "gs=" + game["state"] + " zom=" + sessionmodeiszombiesgame() ); - return; - } - - if ( ( level.rankedmatch || level.wagermatch || level.leaguematch ) && !isdefined( self.pers["lossAlreadyReported"] ) ) - { - if ( level.leaguematch ) - self recordleaguepreloser(); - - maps\mp\gametypes\_globallogic_score::updatelossstats( self ); - self.pers["lossAlreadyReported"] = 1; - } - - if ( !isdefined( self.pers["winstreakAlreadyCleared"] ) ) - { - self maps\mp\gametypes\_globallogic_score::backupandclearwinstreaks(); - self.pers["winstreakAlreadyCleared"] = 1; - } - - if ( self istestclient() ) - self.pers["isBot"] = 1; - - if ( level.rankedmatch || level.leaguematch ) - self maps\mp\gametypes\_persistence::setafteractionreportstat( "demoFileID", "0" ); - - level endon( "game_ended" ); - - if ( isdefined( level.hostmigrationtimer ) ) - self thread maps\mp\gametypes\_hostmigration::hostmigrationtimerthink(); - - if ( level.oldschool ) - { - self.pers["class"] = undefined; - self.class = self.pers["class"]; - } - - if ( isdefined( self.pers["team"] ) ) - self.team = self.pers["team"]; - - if ( isdefined( self.pers["class"] ) ) - self.class = self.pers["class"]; - - if ( !isdefined( self.pers["team"] ) || isdefined( self.pers["needteam"] ) ) - { - self.pers["needteam"] = undefined; - self.pers["team"] = "spectator"; - self.team = "spectator"; - self.sessionstate = "dead"; - self maps\mp\gametypes\_globallogic_ui::updateobjectivetext(); - [[ level.spawnspectator ]](); - [[ level.autoassign ]]( 0 ); - - if ( level.rankedmatch || level.leaguematch ) - self thread maps\mp\gametypes\_globallogic_spawn::kickifdontspawn(); - - if ( self.pers["team"] == "spectator" ) - { - self.sessionteam = "spectator"; - - if ( !level.teambased ) - self.ffateam = "spectator"; - - self thread spectate_player_watcher(); - } - - if ( level.teambased ) - { - self.sessionteam = self.pers["team"]; - - if ( !isalive( self ) ) - self.statusicon = "hud_status_dead"; - - self thread maps\mp\gametypes\_spectating::setspectatepermissions(); - } - } - else if ( self.pers["team"] == "spectator" ) - { - self setclientscriptmainmenu( game["menu_class"] ); - [[ level.spawnspectator ]](); - self.sessionteam = "spectator"; - self.sessionstate = "spectator"; - - if ( !level.teambased ) - self.ffateam = "spectator"; - - self thread spectate_player_watcher(); - } - else - { - self.sessionteam = self.pers["team"]; - self.sessionstate = "dead"; - - if ( !level.teambased ) - self.ffateam = self.pers["team"]; - - self maps\mp\gametypes\_globallogic_ui::updateobjectivetext(); - [[ level.spawnspectator ]](); - - if ( maps\mp\gametypes\_globallogic_utils::isvalidclass( self.pers["class"] ) ) - self thread [[ level.spawnclient ]](); - else - self maps\mp\gametypes\_globallogic_ui::showmainmenuforteam(); - - self thread maps\mp\gametypes\_spectating::setspectatepermissions(); - } - - if ( self.sessionteam != "spectator" ) - self thread maps\mp\gametypes\_spawning::onspawnplayer_unified( 1 ); - - profilelog_endtiming( 4, "gs=" + game["state"] + " zom=" + sessionmodeiszombiesgame() ); - - if ( isdefined( self.pers["isBot"] ) ) - return; -} - -spectate_player_watcher() -{ - self endon( "disconnect" ); - - if ( !level.splitscreen && !level.hardcoremode && getdvarint( "scr_showperksonspawn" ) == 1 && game["state"] != "postgame" && !isdefined( self.perkhudelem ) ) - { - if ( level.perksenabled == 1 ) - self maps\mp\gametypes\_hud_util::showperks(); - - self thread maps\mp\gametypes\_globallogic_ui::hideloadoutaftertime( 0 ); - } - - self.watchingactiveclient = 1; - self.waitingforplayerstext = undefined; - - while ( true ) - { - if ( self.pers["team"] != "spectator" || level.gameended ) - { - self maps\mp\gametypes\_hud_message::clearshoutcasterwaitingmessage(); - self freezecontrols( 0 ); - self.watchingactiveclient = 0; - break; - } - else - { - count = 0; - - for ( i = 0; i < level.players.size; i++ ) - { - if ( level.players[i].team != "spectator" ) - { - count++; - break; - } - } - - if ( count > 0 ) - { - if ( !self.watchingactiveclient ) - { - self maps\mp\gametypes\_hud_message::clearshoutcasterwaitingmessage(); - self freezecontrols( 0 ); - } - - self.watchingactiveclient = 1; - } - else - { - if ( self.watchingactiveclient ) - { - [[ level.onspawnspectator ]](); - self freezecontrols( 1 ); - self maps\mp\gametypes\_hud_message::setshoutcasterwaitingmessage(); - } - - self.watchingactiveclient = 0; - } - - wait 0.5; - } - } -} - -callback_playermigrated() -{ -/# - println( "Player " + self.name + " finished migrating at time " + gettime() ); -#/ - - if ( isdefined( self.connected ) && self.connected ) - self maps\mp\gametypes\_globallogic_ui::updateobjectivetext(); - - level.hostmigrationreturnedplayercount++; - - if ( level.hostmigrationreturnedplayercount >= level.players.size * 2 / 3 ) - { -/# - println( "2/3 of players have finished migrating" ); -#/ - level notify( "hostmigration_enoughplayers" ); - } -} - -callback_playerdisconnect() -{ - profilelog_begintiming( 5, "ship" ); - - if ( game["state"] != "postgame" && !level.gameended ) - { - gamelength = maps\mp\gametypes\_globallogic::getgamelength(); - self maps\mp\gametypes\_globallogic::bbplayermatchend( gamelength, "MP_PLAYER_DISCONNECT", 0 ); - } - - self removeplayerondisconnect(); - - if ( level.splitscreen ) - { - players = level.players; - - if ( players.size <= 1 ) - level thread maps\mp\gametypes\_globallogic::forceend(); - - setdvar( "splitscreen_playerNum", players.size ); - } - - if ( isdefined( self.score ) && isdefined( self.pers["team"] ) ) - { - self logstring( "team: score " + self.pers["team"] + ":" + self.score ); - level.dropteam += 1; - } - - [[ level.onplayerdisconnect ]](); - lpselfnum = self getentitynumber(); - lpguid = self getguid(); - logprint( "Q;" + lpguid + ";" + lpselfnum + ";" + self.name + "\n" ); - self maps\mp\_gamerep::gamerepplayerdisconnected(); - - for ( entry = 0; entry < level.players.size; entry++ ) - { - if ( level.players[entry] == self ) - { - while ( entry < level.players.size - 1 ) - { - level.players[entry] = level.players[entry + 1]; - entry++; - } - - level.players[entry] = undefined; - break; - } - } - - for ( entry = 0; entry < level.players.size; entry++ ) - { - if ( isdefined( level.players[entry].pers["killed_players"][self.name] ) ) - level.players[entry].pers["killed_players"][self.name] = undefined; - - if ( isdefined( level.players[entry].killedplayerscurrent[self.name] ) ) - level.players[entry].killedplayerscurrent[self.name] = undefined; - - if ( isdefined( level.players[entry].pers["killed_by"][self.name] ) ) - level.players[entry].pers["killed_by"][self.name] = undefined; - - if ( isdefined( level.players[entry].pers["nemesis_tracking"][self.name] ) ) - level.players[entry].pers["nemesis_tracking"][self.name] = undefined; - - if ( level.players[entry].pers["nemesis_name"] == self.name ) - level.players[entry] choosenextbestnemesis(); - } - - if ( level.gameended ) - self maps\mp\gametypes\_globallogic::removedisconnectedplayerfromplacement(); - - level thread maps\mp\gametypes\_globallogic::updateteamstatus(); - profilelog_endtiming( 5, "gs=" + game["state"] + " zom=" + sessionmodeiszombiesgame() ); -} - -callback_playermelee( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit ) -{ - hit = 1; - - if ( level.teambased && self.team == eattacker.team ) - { - if ( level.friendlyfire == 0 ) - hit = 0; - } - - self finishmeleehit( eattacker, sweapon, vorigin, vdir, boneindex, shieldhit, hit ); -} - -choosenextbestnemesis() -{ - nemesisarray = self.pers["nemesis_tracking"]; - nemesisarraykeys = getarraykeys( nemesisarray ); - nemesisamount = 0; - nemesisname = ""; - - if ( nemesisarraykeys.size > 0 ) - { - for ( i = 0; i < nemesisarraykeys.size; i++ ) - { - nemesisarraykey = nemesisarraykeys[i]; - - if ( nemesisarray[nemesisarraykey] > nemesisamount ) - { - nemesisname = nemesisarraykey; - nemesisamount = nemesisarray[nemesisarraykey]; - } - } - } - - self.pers["nemesis_name"] = nemesisname; - - if ( nemesisname != "" ) - { - for ( playerindex = 0; playerindex < level.players.size; playerindex++ ) - { - if ( level.players[playerindex].name == nemesisname ) - { - nemesisplayer = level.players[playerindex]; - self.pers["nemesis_rank"] = nemesisplayer.pers["rank"]; - self.pers["nemesis_rankIcon"] = nemesisplayer.pers["rankxp"]; - self.pers["nemesis_xp"] = nemesisplayer.pers["prestige"]; - self.pers["nemesis_xuid"] = nemesisplayer getxuid( 1 ); - break; - } - } - } - else - self.pers["nemesis_xuid"] = ""; -} - -removeplayerondisconnect() -{ - for ( entry = 0; entry < level.players.size; entry++ ) - { - if ( level.players[entry] == self ) - { - while ( entry < level.players.size - 1 ) - { - level.players[entry] = level.players[entry + 1]; - entry++; - } - - level.players[entry] = undefined; - break; - } - } -} - -custom_gamemodes_modified_damage( victim, eattacker, idamage, smeansofdeath, sweapon, einflictor, shitloc ) -{ - if ( level.onlinegame && !sessionmodeisprivate() ) - return idamage; - - if ( isdefined( eattacker ) && isdefined( eattacker.damagemodifier ) ) - idamage *= eattacker.damagemodifier; - - if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) - idamage = int( idamage * level.bulletdamagescalar ); - - return idamage; -} - -figureoutattacker( eattacker ) -{ - if ( isdefined( eattacker ) ) - { - if ( isai( eattacker ) && isdefined( eattacker.script_owner ) ) - { - team = self.team; - - if ( isai( self ) && isdefined( self.aiteam ) ) - team = self.aiteam; - - if ( eattacker.script_owner.team != team ) - eattacker = eattacker.script_owner; - } - - if ( eattacker.classname == "script_vehicle" && isdefined( eattacker.owner ) ) - eattacker = eattacker.owner; - else if ( eattacker.classname == "auto_turret" && isdefined( eattacker.owner ) ) - eattacker = eattacker.owner; - } - - return eattacker; -} - -figureoutweapon( sweapon, einflictor ) -{ - if ( sweapon == "none" && isdefined( einflictor ) ) - { - if ( isdefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) - sweapon = "explodable_barrel_mp"; - else if ( isdefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) - sweapon = "destructible_car_mp"; - } - - return sweapon; -} - -isplayerimmunetokillstreak( eattacker, sweapon ) -{ - if ( level.hardcoremode ) - return false; - - if ( !isdefined( eattacker ) ) - return false; - - if ( self != eattacker ) - return false; - - if ( sweapon != "straferun_gun_mp" && sweapon != "straferun_rockets_mp" ) - return false; - - return true; -} - -callback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) -{ - profilelog_begintiming( 6, "ship" ); - - if ( game["state"] == "postgame" ) - return; - - if ( self.sessionteam == "spectator" ) - return; - - if ( isdefined( self.candocombat ) && !self.candocombat ) - return; - - if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat ) - return; - - if ( isdefined( level.hostmigrationtimer ) ) - return; - - if ( ( sweapon == "ai_tank_drone_gun_mp" || sweapon == "ai_tank_drone_rocket_mp" ) && !level.hardcoremode ) - { - if ( isdefined( eattacker ) && eattacker == self ) - { - if ( isdefined( einflictor ) && isdefined( einflictor.from_ai ) ) - return; - } - - if ( isdefined( eattacker ) && isdefined( eattacker.owner ) && eattacker.owner == self ) - return; - } - - if ( sweapon == "emp_grenade_mp" ) - { - if ( self hasperk( "specialty_immuneemp" ) ) - return; - - self notify( "emp_grenaded", eattacker ); - } - - if ( isdefined( eattacker ) ) - idamage = maps\mp\gametypes\_class::cac_modified_damage( self, eattacker, idamage, smeansofdeath, sweapon, einflictor, shitloc ); - - idamage = custom_gamemodes_modified_damage( self, eattacker, idamage, smeansofdeath, sweapon, einflictor, shitloc ); - idamage = int( idamage ); - self.idflags = idflags; - self.idflagstime = gettime(); - eattacker = figureoutattacker( eattacker ); - pixbeginevent( "PlayerDamage flags/tweaks" ); - - if ( !isdefined( vdir ) ) - idflags |= level.idflags_no_knockback; - - friendly = 0; - - if ( self.health != self.maxhealth ) - self notify( "snd_pain_player" ); - - if ( isdefined( einflictor ) && isdefined( einflictor.script_noteworthy ) ) - { - if ( einflictor.script_noteworthy == "ragdoll_now" ) - smeansofdeath = "MOD_FALLING"; - - if ( isdefined( level.overrideweaponfunc ) ) - sweapon = [[ level.overrideweaponfunc ]]( sweapon, einflictor.script_noteworthy ); - } - - if ( maps\mp\gametypes\_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) && isplayer( eattacker ) ) - smeansofdeath = "MOD_HEAD_SHOT"; - - if ( level.onplayerdamage != maps\mp\gametypes\_globallogic::blank ) - { - modifieddamage = [[ level.onplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); - - if ( isdefined( modifieddamage ) ) - { - if ( modifieddamage <= 0 ) - return; - - idamage = modifieddamage; - } - } - - if ( level.onlyheadshots ) - { - if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) - return; - else if ( smeansofdeath == "MOD_HEAD_SHOT" ) - idamage = 150; - } - - if ( self maps\mp\_vehicles::player_is_occupant_invulnerable( smeansofdeath ) ) - return; - - if ( isdefined( eattacker ) && isplayer( eattacker ) && self.team != eattacker.team ) - self.lastattackweapon = sweapon; - - sweapon = figureoutweapon( sweapon, einflictor ); - pixendevent(); - - if ( idflags & level.idflags_penetration && isplayer( eattacker ) && eattacker hasperk( "specialty_bulletpenetration" ) ) - self thread maps\mp\gametypes\_battlechatter_mp::perkspecificbattlechatter( "deepimpact", 1 ); - - attackerishittingteammate = isplayer( eattacker ) && self isenemyplayer( eattacker ) == 0; - - if ( shitloc == "riotshield" ) - { - if ( attackerishittingteammate && level.friendlyfire == 0 ) - return; - - if ( ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) && !maps\mp\killstreaks\_killstreaks::iskillstreakweapon( sweapon ) && !attackerishittingteammate ) - { - if ( self.hasriotshieldequipped ) - { - if ( isplayer( eattacker ) ) - { - eattacker.lastattackedshieldplayer = self; - eattacker.lastattackedshieldtime = gettime(); - } - - previous_shield_damage = self.shielddamageblocked; - self.shielddamageblocked += idamage; - - if ( self.shielddamageblocked % 400 < previous_shield_damage % 400 ) - { - score_event = "shield_blocked_damage"; - - if ( self.shielddamageblocked > 2000 ) - score_event = "shield_blocked_damage_reduced"; - - if ( isdefined( level.scoreinfo[score_event]["value"] ) ) - self addweaponstat( "riotshield_mp", "score_from_blocked_damage", level.scoreinfo[score_event]["value"] ); - - thread maps\mp\_scoreevents::processscoreevent( score_event, self ); - } - } - } - - if ( idflags & level.idflags_shield_explosive_impact ) - { - shitloc = "none"; - - if ( !( idflags & level.idflags_shield_explosive_impact_huge ) ) - idamage *= 0.0; - } - else if ( idflags & level.idflags_shield_explosive_splash ) - { - if ( isdefined( einflictor ) && isdefined( einflictor.stucktoplayer ) && einflictor.stucktoplayer == self ) - idamage = 101; - - shitloc = "none"; - } - else - return; - } - - if ( !( idflags & level.idflags_no_protection ) ) - { - if ( isdefined( einflictor ) && ( smeansofdeath == "MOD_GAS" || maps\mp\gametypes\_class::isexplosivedamage( undefined, smeansofdeath ) ) ) - { - if ( ( einflictor.classname == "grenade" || sweapon == "tabun_gas_mp" ) && self.lastspawntime + 3500 > gettime() && distancesquared( einflictor.origin, self.lastspawnpoint.origin ) < 62500 ) - return; - - if ( self isplayerimmunetokillstreak( eattacker, sweapon ) ) - return; - - self.explosiveinfo = []; - self.explosiveinfo["damageTime"] = gettime(); - self.explosiveinfo["damageId"] = einflictor getentitynumber(); - self.explosiveinfo["originalOwnerKill"] = 0; - self.explosiveinfo["bulletPenetrationKill"] = 0; - self.explosiveinfo["chainKill"] = 0; - self.explosiveinfo["damageExplosiveKill"] = 0; - self.explosiveinfo["chainKill"] = 0; - self.explosiveinfo["cookedKill"] = 0; - self.explosiveinfo["weapon"] = sweapon; - self.explosiveinfo["originalowner"] = einflictor.originalowner; - isfrag = sweapon == "frag_grenade_mp"; - - if ( isdefined( eattacker ) && eattacker != self ) - { - if ( isdefined( eattacker ) && isdefined( einflictor.owner ) && ( sweapon == "satchel_charge_mp" || sweapon == "claymore_mp" || sweapon == "bouncingbetty_mp" ) ) - { - self.explosiveinfo["originalOwnerKill"] = einflictor.owner == self; - self.explosiveinfo["damageExplosiveKill"] = isdefined( einflictor.wasdamaged ); - self.explosiveinfo["chainKill"] = isdefined( einflictor.waschained ); - self.explosiveinfo["wasJustPlanted"] = isdefined( einflictor.wasjustplanted ); - self.explosiveinfo["bulletPenetrationKill"] = isdefined( einflictor.wasdamagedfrombulletpenetration ); - self.explosiveinfo["cookedKill"] = 0; - } - - if ( ( sweapon == "sticky_grenade_mp" || sweapon == "explosive_bolt_mp" ) && isdefined( einflictor ) && isdefined( einflictor.stucktoplayer ) ) - self.explosiveinfo["stuckToPlayer"] = einflictor.stucktoplayer; - - if ( sweapon == "proximity_grenade_mp" || sweapon == "proximity_grenade_aoe_mp" ) - { - self.laststunnedby = eattacker; - self.laststunnedtime = self.idflagstime; - } - - if ( isdefined( eattacker.lastgrenadesuicidetime ) && eattacker.lastgrenadesuicidetime >= gettime() - 50 && isfrag ) - self.explosiveinfo["suicideGrenadeKill"] = 1; - else - self.explosiveinfo["suicideGrenadeKill"] = 0; - } - - if ( isfrag ) - { - self.explosiveinfo["cookedKill"] = isdefined( einflictor.iscooked ); - self.explosiveinfo["throwbackKill"] = isdefined( einflictor.threwback ); - } - - if ( isdefined( eattacker ) && isplayer( eattacker ) && eattacker != self ) - self maps\mp\gametypes\_globallogic_score::setinflictorstat( einflictor, eattacker, sweapon ); - } - - if ( smeansofdeath == "MOD_IMPACT" && isdefined( eattacker ) && isplayer( eattacker ) && eattacker != self ) - { - if ( sweapon != "knife_ballistic_mp" ) - self maps\mp\gametypes\_globallogic_score::setinflictorstat( einflictor, eattacker, sweapon ); - - if ( sweapon == "hatchet_mp" && isdefined( einflictor ) ) - self.explosiveinfo["projectile_bounced"] = isdefined( einflictor.bounced ); - } - - if ( isplayer( eattacker ) ) - eattacker.pers["participation"]++; - - prevhealthratio = self.health / self.maxhealth; - - if ( level.teambased && isplayer( eattacker ) && self != eattacker && self.team == eattacker.team ) - { - pixmarker( "BEGIN: PlayerDamage player" ); - - if ( level.friendlyfire == 0 ) - { - if ( sweapon == "artillery_mp" || sweapon == "airstrike_mp" || sweapon == "napalm_mp" || sweapon == "mortar_mp" ) - self damageshellshockandrumble( eattacker, einflictor, sweapon, smeansofdeath, idamage ); - - return; - } - else if ( level.friendlyfire == 1 ) - { - if ( idamage < 1 ) - idamage = 1; - - if ( level.friendlyfiredelay && level.friendlyfiredelaytime >= ( gettime() - level.starttime - level.discardtime ) / 1000 ) - { - eattacker.lastdamagewasfromenemy = 0; - eattacker.friendlydamage = 1; - eattacker finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - eattacker.friendlydamage = undefined; - } - else - { - self.lastdamagewasfromenemy = 0; - self finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - } - } - else if ( level.friendlyfire == 2 && isalive( eattacker ) ) - { - idamage = int( idamage * 0.5 ); - - if ( idamage < 1 ) - idamage = 1; - - eattacker.lastdamagewasfromenemy = 0; - eattacker.friendlydamage = 1; - eattacker finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - eattacker.friendlydamage = undefined; - } - else if ( level.friendlyfire == 3 && isalive( eattacker ) ) - { - idamage = int( idamage * 0.5 ); - - if ( idamage < 1 ) - idamage = 1; - - self.lastdamagewasfromenemy = 0; - eattacker.lastdamagewasfromenemy = 0; - self finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - eattacker.friendlydamage = 1; - eattacker finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - eattacker.friendlydamage = undefined; - } - - friendly = 1; - pixmarker( "END: PlayerDamage player" ); - } - else - { - if ( idamage < 1 ) - idamage = 1; - - if ( isdefined( eattacker ) && isplayer( eattacker ) && allowedassistweapon( sweapon ) ) - self trackattackerdamage( eattacker, idamage, smeansofdeath, sweapon ); - - giveinflictorownerassist( eattacker, einflictor, idamage, smeansofdeath, sweapon ); - - if ( isdefined( eattacker ) ) - level.lastlegitimateattacker = eattacker; - - if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( sweapon ) && !issubstr( smeansofdeath, "MOD_MELEE" ) ) - eattacker thread maps\mp\gametypes\_weapons::checkhit( sweapon ); - - if ( ( smeansofdeath == "MOD_GRENADE" || smeansofdeath == "MOD_GRENADE_SPLASH" ) && isdefined( einflictor.iscooked ) ) - self.wascooked = gettime(); - else - self.wascooked = undefined; - - self.lastdamagewasfromenemy = isdefined( eattacker ) && eattacker != self; - - if ( self.lastdamagewasfromenemy ) - { - if ( isplayer( eattacker ) ) - { - if ( isdefined( eattacker.damagedplayers[self.clientid] ) == 0 ) - eattacker.damagedplayers[self.clientid] = spawnstruct(); - - eattacker.damagedplayers[self.clientid].time = gettime(); - eattacker.damagedplayers[self.clientid].entity = self; - } - } - - self finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - } - - if ( isdefined( eattacker ) && isplayer( eattacker ) && eattacker != self ) - { - if ( dodamagefeedback( sweapon, einflictor, idamage, smeansofdeath ) ) - { - if ( idamage > 0 ) - { - if ( self.health > 0 ) - perkfeedback = doperkfeedback( self, sweapon, smeansofdeath, einflictor ); - - eattacker thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor, perkfeedback ); - } - } - } - - self.hasdonecombat = 1; - } - - if ( isdefined( eattacker ) && eattacker != self && !friendly ) - level.usestartspawns = 0; - - pixbeginevent( "PlayerDamage log" ); -/# - if ( getdvarint( "g_debugDamage" ) ) - println( "client:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); -#/ - - if ( self.sessionstate != "dead" ) - { - lpselfnum = self getentitynumber(); - lpselfname = self.name; - lpselfteam = self.team; - lpselfguid = self getguid(); - lpattackerteam = ""; - lpattackerorigin = ( 0, 0, 0 ); - - if ( isplayer( eattacker ) ) - { - lpattacknum = eattacker getentitynumber(); - lpattackguid = eattacker getguid(); - lpattackname = eattacker.name; - lpattackerteam = eattacker.team; - lpattackerorigin = eattacker.origin; - bbprint( "mpattacks", "gametime %d attackerspawnid %d attackerweapon %s attackerx %d attackery %d attackerz %d victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", gettime(), getplayerspawnid( eattacker ), sweapon, lpattackerorigin, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 0 ); - } - else - { - lpattacknum = -1; - lpattackguid = ""; - lpattackname = ""; - lpattackerteam = "world"; - bbprint( "mpattacks", "gametime %d attackerweapon %s victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", gettime(), sweapon, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 0 ); - } - - logprint( "D;" + lpselfguid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\n" ); - } - - pixendevent(); - profilelog_endtiming( 6, "gs=" + game["state"] + " zom=" + sessionmodeiszombiesgame() ); -} - -resetattackerlist() -{ - self.attackers = []; - self.attackerdata = []; - self.attackerdamage = []; - self.firsttimedamaged = 0; -} - -dodamagefeedback( sweapon, einflictor, idamage, smeansofdeath ) -{ - if ( !isdefined( sweapon ) ) - return false; - - if ( level.allowhitmarkers == 0 ) - return false; - - if ( level.allowhitmarkers == 1 ) - { - if ( isdefined( smeansofdeath ) && isdefined( idamage ) ) - { - if ( istacticalhitmarker( sweapon, smeansofdeath, idamage ) ) - return false; - } - } - - return true; -} - -istacticalhitmarker( sweapon, smeansofdeath, idamage ) -{ - if ( isgrenade( sweapon ) ) - { - if ( sweapon == "willy_pete_mp" ) - { - if ( smeansofdeath == "MOD_GRENADE_SPLASH" ) - return true; - } - else if ( idamage == 1 ) - return true; - } - - return false; -} - -doperkfeedback( player, sweapon, smeansofdeath, einflictor ) -{ - perkfeedback = undefined; - hastacticalmask = maps\mp\gametypes\_class::hastacticalmask( player ); - hasflakjacket = player hasperk( "specialty_flakjacket" ); - isexplosivedamage = maps\mp\gametypes\_class::isexplosivedamage( sweapon, smeansofdeath ); - isflashorstundamage = maps\mp\gametypes\_weapon_utils::isflashorstundamage( sweapon, smeansofdeath ); - - if ( isflashorstundamage && hastacticalmask ) - perkfeedback = "tacticalMask"; - else if ( isexplosivedamage && hasflakjacket && !isaikillstreakdamage( sweapon, einflictor ) ) - perkfeedback = "flakjacket"; - - return perkfeedback; -} - -isaikillstreakdamage( sweapon, einflictor ) -{ - switch ( sweapon ) - { - case "ai_tank_drone_rocket_mp": - return isdefined( einflictor.firedbyai ); - case "missile_swarm_projectile_mp": - return 1; - case "planemortar_mp": - return 1; - case "chopper_minigun_mp": - return 1; - case "straferun_rockets_mp": - return 1; - case "littlebird_guard_minigun_mp": - return 1; - case "cobra_20mm_comlink_mp": - return 1; - } - - return 0; -} - -finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) -{ - pixbeginevent( "finishPlayerDamageWrapper" ); - - if ( !level.console && idflags & level.idflags_penetration && isplayer( eattacker ) ) - { -/# - println( "penetrated:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); -#/ - eattacker addplayerstat( "penetration_shots", 1 ); - } - - self finishplayerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - - if ( getdvar( "scr_csmode" ) != "" ) - self shellshock( "damage_mp", 0.2 ); - - self damageshellshockandrumble( eattacker, einflictor, sweapon, smeansofdeath, idamage ); - pixendevent(); -} - -allowedassistweapon( weapon ) -{ - if ( !maps\mp\killstreaks\_killstreaks::iskillstreakweapon( weapon ) ) - return true; - - if ( maps\mp\killstreaks\_killstreaks::iskillstreakweaponassistallowed( weapon ) ) - return true; - - return false; -} - -playerkilled_killstreaks( attacker, sweapon ) -{ - if ( !isdefined( self.switching_teams ) ) - { - if ( isplayer( attacker ) && level.teambased && attacker != self && self.team == attacker.team ) - { - self.pers["cur_kill_streak"] = 0; - self.pers["cur_total_kill_streak"] = 0; - self.pers["totalKillstreakCount"] = 0; - self.pers["killstreaksEarnedThisKillstreak"] = 0; - self setplayercurrentstreak( 0 ); - } - else - { - self maps\mp\gametypes\_globallogic_score::incpersstat( "deaths", 1, 1, 1 ); - self.deaths = self maps\mp\gametypes\_globallogic_score::getpersstat( "deaths" ); - self updatestatratio( "kdratio", "kills", "deaths" ); - - if ( self.pers["cur_kill_streak"] > self.pers["best_kill_streak"] ) - self.pers["best_kill_streak"] = self.pers["cur_kill_streak"]; - - self.pers["kill_streak_before_death"] = self.pers["cur_kill_streak"]; - self.pers["cur_kill_streak"] = 0; - self.pers["cur_total_kill_streak"] = 0; - self.pers["totalKillstreakCount"] = 0; - self.pers["killstreaksEarnedThisKillstreak"] = 0; - self setplayercurrentstreak( 0 ); - self.cur_death_streak++; - - if ( self.cur_death_streak > self.death_streak ) - { - if ( level.rankedmatch && !level.disablestattracking ) - self setdstat( "HighestStats", "death_streak", self.cur_death_streak ); - - self.death_streak = self.cur_death_streak; - } - - if ( self.cur_death_streak >= getdvarint( "perk_deathStreakCountRequired" ) ) - self enabledeathstreak(); - } - } - else - { - self.pers["totalKillstreakCount"] = 0; - self.pers["killstreaksEarnedThisKillstreak"] = 0; - } - - if ( !sessionmodeiszombiesgame() && maps\mp\killstreaks\_killstreaks::iskillstreakweapon( sweapon ) ) - level.globalkillstreaksdeathsfrom++; -} - -playerkilled_weaponstats( attacker, sweapon, smeansofdeath, wasinlaststand, lastweaponbeforedroppingintolaststand, inflictor ) -{ - if ( isplayer( attacker ) && attacker != self && ( !level.teambased || level.teambased && self.team != attacker.team ) ) - { - self addweaponstat( sweapon, "deaths", 1 ); - - if ( wasinlaststand && isdefined( lastweaponbeforedroppingintolaststand ) ) - weaponname = lastweaponbeforedroppingintolaststand; - else - weaponname = self.lastdroppableweapon; - - if ( isdefined( weaponname ) ) - self addweaponstat( weaponname, "deathsDuringUse", 1 ); - - if ( smeansofdeath != "MOD_FALLING" ) - { - if ( sweapon == "explosive_bolt_mp" && isdefined( inflictor ) && isdefined( inflictor.ownerweaponatlaunch ) && inflictor.owneradsatlaunch ) - attacker addweaponstat( inflictor.ownerweaponatlaunch, "kills", 1, attacker.class_num, 1 ); - else - attacker addweaponstat( sweapon, "kills", 1, attacker.class_num ); - } - - if ( smeansofdeath == "MOD_HEAD_SHOT" ) - attacker addweaponstat( sweapon, "headshots", 1 ); - - if ( smeansofdeath == "MOD_PROJECTILE" ) - attacker addweaponstat( sweapon, "direct_hit_kills", 1 ); - } -} - -playerkilled_obituary( attacker, einflictor, sweapon, smeansofdeath ) -{ - if ( !isplayer( attacker ) || self isenemyplayer( attacker ) == 0 || isdefined( sweapon ) && maps\mp\killstreaks\_killstreaks::iskillstreakweapon( sweapon ) ) - { - level notify( "reset_obituary_count" ); - level.lastobituaryplayercount = 0; - level.lastobituaryplayer = undefined; - } - else - { - if ( isdefined( level.lastobituaryplayer ) && level.lastobituaryplayer == attacker ) - level.lastobituaryplayercount++; - else - { - level notify( "reset_obituary_count" ); - level.lastobituaryplayer = attacker; - level.lastobituaryplayercount = 1; - } - - level thread maps\mp\_scoreevents::decrementlastobituaryplayercountafterfade(); - - if ( level.lastobituaryplayercount >= 4 ) - { - level notify( "reset_obituary_count" ); - level.lastobituaryplayercount = 0; - level.lastobituaryplayer = undefined; - self thread uninterruptedobitfeedkills( attacker, sweapon ); - } - } - - overrideentitycamera = maps\mp\killstreaks\_killstreaks::shouldoverrideentitycameraindemo( attacker, sweapon ); - - if ( level.teambased && isdefined( attacker.pers ) && self.team == attacker.team && smeansofdeath == "MOD_GRENADE" && level.friendlyfire == 0 ) - { - obituary( self, self, sweapon, smeansofdeath ); - maps\mp\_demo::bookmark( "kill", gettime(), self, self, 0, einflictor, overrideentitycamera ); - } - else - { - obituary( self, attacker, sweapon, smeansofdeath ); - maps\mp\_demo::bookmark( "kill", gettime(), self, attacker, 0, einflictor, overrideentitycamera ); - } -} - -playerkilled_suicide( einflictor, attacker, smeansofdeath, sweapon, shitloc ) -{ - awardassists = 0; - - if ( isdefined( self.switching_teams ) ) - { - if ( !level.teambased && ( isdefined( level.teams[self.leaving_team] ) && isdefined( level.teams[self.joining_team] ) && level.teams[self.leaving_team] != level.teams[self.joining_team] ) ) - { - playercounts = self maps\mp\teams\_teams::countplayers(); - playercounts[self.leaving_team]--; - playercounts[self.joining_team]++; - - if ( playercounts[self.joining_team] - playercounts[self.leaving_team] > 1 ) - { - thread maps\mp\_scoreevents::processscoreevent( "suicide", self ); - self thread maps\mp\gametypes\_rank::giverankxp( "suicide" ); - self maps\mp\gametypes\_globallogic_score::incpersstat( "suicides", 1 ); - self.suicides = self maps\mp\gametypes\_globallogic_score::getpersstat( "suicides" ); - } - } - } - else - { - thread maps\mp\_scoreevents::processscoreevent( "suicide", self ); - self maps\mp\gametypes\_globallogic_score::incpersstat( "suicides", 1 ); - self.suicides = self maps\mp\gametypes\_globallogic_score::getpersstat( "suicides" ); - - if ( smeansofdeath == "MOD_SUICIDE" && shitloc == "none" && self.throwinggrenade ) - self.lastgrenadesuicidetime = gettime(); - - if ( level.maxsuicidesbeforekick > 0 && level.maxsuicidesbeforekick <= self.suicides ) - { - self notify( "teamKillKicked" ); - self suicidekick(); - } - - thread maps\mp\gametypes\_battlechatter_mp::onplayersuicideorteamkill( self, "suicide" ); - awardassists = 1; - self.suicide = 1; - } - - if ( isdefined( self.friendlydamage ) ) - { - self iprintln( &"MP_FRIENDLY_FIRE_WILL_NOT" ); - - if ( level.teamkillpointloss ) - { - scoresub = self [[ level.getteamkillscore ]]( einflictor, attacker, smeansofdeath, sweapon ); - score = maps\mp\gametypes\_globallogic_score::_getplayerscore( attacker ) - scoresub; - - if ( score < 0 ) - score = 0; - - maps\mp\gametypes\_globallogic_score::_setplayerscore( attacker, score ); - } - } - - return awardassists; -} - -playerkilled_teamkill( einflictor, attacker, smeansofdeath, sweapon, shitloc ) -{ - thread maps\mp\_scoreevents::processscoreevent( "team_kill", attacker ); - self.teamkilled = 1; - - if ( !ignoreteamkills( sweapon, smeansofdeath ) ) - { - teamkill_penalty = self [[ level.getteamkillpenalty ]]( einflictor, attacker, smeansofdeath, sweapon ); - attacker maps\mp\gametypes\_globallogic_score::incpersstat( "teamkills_nostats", teamkill_penalty, 0 ); - attacker maps\mp\gametypes\_globallogic_score::incpersstat( "teamkills", 1 ); - attacker.teamkillsthisround++; - - if ( level.teamkillpointloss ) - { - scoresub = self [[ level.getteamkillscore ]]( einflictor, attacker, smeansofdeath, sweapon ); - score = maps\mp\gametypes\_globallogic_score::_getplayerscore( attacker ) - scoresub; - - if ( score < 0 ) - score = 0; - - maps\mp\gametypes\_globallogic_score::_setplayerscore( attacker, score ); - } - - if ( maps\mp\gametypes\_globallogic_utils::gettimepassed() < 5000 ) - teamkilldelay = 1; - else if ( attacker.pers["teamkills_nostats"] > 1 && maps\mp\gametypes\_globallogic_utils::gettimepassed() < 8000 + attacker.pers["teamkills_nostats"] * 1000 ) - teamkilldelay = 1; - else - teamkilldelay = attacker teamkilldelay(); - - if ( teamkilldelay > 0 ) - { - attacker.teamkillpunish = 1; - attacker thread wait_and_suicide(); - - if ( attacker shouldteamkillkick( teamkilldelay ) ) - { - attacker notify( "teamKillKicked" ); - attacker teamkillkick(); - } - - attacker thread reduceteamkillsovertime(); - } - - if ( isplayer( attacker ) ) - thread maps\mp\gametypes\_battlechatter_mp::onplayersuicideorteamkill( attacker, "teamkill" ); - } -} - -wait_and_suicide() -{ - self endon( "disconnect" ); - self freezecontrolswrapper( 1 ); - wait 0.25; - self suicide(); -} - -playerkilled_awardassists( einflictor, attacker, sweapon, lpattackteam ) -{ - pixbeginevent( "PlayerKilled assists" ); - - if ( isdefined( self.attackers ) ) - { - for ( j = 0; j < self.attackers.size; j++ ) - { - player = self.attackers[j]; - - if ( !isdefined( player ) ) - continue; - - if ( player == attacker ) - continue; - - if ( player.team != lpattackteam ) - continue; - - damage_done = self.attackerdamage[player.clientid].damage; - player thread maps\mp\gametypes\_globallogic_score::processassist( self, damage_done, self.attackerdamage[player.clientid].weapon ); - } - } - - if ( level.teambased ) - self maps\mp\gametypes\_globallogic_score::processkillstreakassists( attacker, einflictor, sweapon ); - - if ( isdefined( self.lastattackedshieldplayer ) && isdefined( self.lastattackedshieldtime ) && self.lastattackedshieldplayer != attacker ) - { - if ( gettime() - self.lastattackedshieldtime < 4000 ) - self.lastattackedshieldplayer thread maps\mp\gametypes\_globallogic_score::processshieldassist( self ); - } - - pixendevent(); -} - -playerkilled_kill( einflictor, attacker, smeansofdeath, sweapon, shitloc ) -{ - maps\mp\gametypes\_globallogic_score::inctotalkills( attacker.team ); - attacker thread maps\mp\gametypes\_globallogic_score::givekillstats( smeansofdeath, sweapon, self ); - - if ( isalive( attacker ) ) - { - pixbeginevent( "killstreak" ); - - if ( !isdefined( einflictor ) || !isdefined( einflictor.requireddeathcount ) || attacker.deathcount == einflictor.requireddeathcount ) - { - shouldgivekillstreak = maps\mp\killstreaks\_killstreaks::shouldgivekillstreak( sweapon ); - - if ( shouldgivekillstreak ) - attacker maps\mp\killstreaks\_killstreaks::addtokillstreakcount( sweapon ); - - attacker.pers["cur_total_kill_streak"]++; - attacker setplayercurrentstreak( attacker.pers["cur_total_kill_streak"] ); - - if ( isdefined( level.killstreaks ) && shouldgivekillstreak ) - { - attacker.pers["cur_kill_streak"]++; - - if ( attacker.pers["cur_kill_streak"] >= 2 ) - { - if ( attacker.pers["cur_kill_streak"] == 10 ) - attacker maps\mp\_challenges::killstreakten(); - - if ( attacker.pers["cur_kill_streak"] <= 30 ) - maps\mp\_scoreevents::processscoreevent( "killstreak_" + attacker.pers["cur_kill_streak"], attacker, self, sweapon ); - else - maps\mp\_scoreevents::processscoreevent( "killstreak_more_than_30", attacker, self, sweapon ); - } - - if ( !isdefined( level.usingmomentum ) || !level.usingmomentum ) - attacker thread maps\mp\killstreaks\_killstreaks::givekillstreakforstreak(); - } - } - - if ( isplayer( attacker ) ) - self thread maps\mp\gametypes\_battlechatter_mp::onplayerkillstreak( attacker ); - - pixendevent(); - } - - if ( attacker.pers["cur_kill_streak"] > attacker.kill_streak ) - { - if ( level.rankedmatch && !level.disablestattracking ) - attacker setdstat( "HighestStats", "kill_streak", attacker.pers["totalKillstreakCount"] ); - - attacker.kill_streak = attacker.pers["cur_kill_streak"]; - } - - if ( attacker.pers["cur_kill_streak"] > attacker.gametype_kill_streak ) - { - attacker maps\mp\gametypes\_persistence::statsetwithgametype( "kill_streak", attacker.pers["cur_kill_streak"] ); - attacker.gametype_kill_streak = attacker.pers["cur_kill_streak"]; - } - - killstreak = maps\mp\killstreaks\_killstreaks::getkillstreakforweapon( sweapon ); - - if ( isdefined( killstreak ) ) - { - if ( maps\mp\_scoreevents::isregisteredevent( killstreak ) ) - maps\mp\_scoreevents::processscoreevent( killstreak, attacker, self, sweapon ); - - if ( sweapon == "straferun_gun_mp" || sweapon == "straferun_rockets_mp" ) - attacker maps\mp\killstreaks\_straferun::addstraferunkill(); - } - else - { - if ( smeansofdeath == "MOD_MELEE" && level.gametype == "gun" ) - { - - } - else - maps\mp\_scoreevents::processscoreevent( "kill", attacker, self, sweapon ); - - if ( smeansofdeath == "MOD_HEAD_SHOT" ) - maps\mp\_scoreevents::processscoreevent( "headshot", attacker, self, sweapon ); - else if ( smeansofdeath == "MOD_MELEE" ) - { - if ( sweapon == "riotshield_mp" ) - { - maps\mp\_scoreevents::processscoreevent( "melee_kill_with_riot_shield", attacker, self, sweapon ); - - if ( isdefined( attacker.class_num ) ) - { - primaryweaponnum = attacker getloadoutitem( attacker.class_num, "primary" ); - secondaryweaponnum = attacker getloadoutitem( attacker.class_num, "secondary" ); - - if ( primaryweaponnum && level.tbl_weaponids[primaryweaponnum]["reference"] == "riotshield" && !secondaryweaponnum || secondaryweaponnum && level.tbl_weaponids[secondaryweaponnum]["reference"] == "riotshield" && !primaryweaponnum ) - attacker addweaponstat( sweapon, "NoLethalKills", 1 ); - } - } - else - maps\mp\_scoreevents::processscoreevent( "melee_kill", attacker, self, sweapon ); - } - } - - attacker thread maps\mp\gametypes\_globallogic_score::trackattackerkill( self.name, self.pers["rank"], self.pers["rankxp"], self.pers["prestige"], self getxuid( 1 ) ); - attackername = attacker.name; - self thread maps\mp\gametypes\_globallogic_score::trackattackeedeath( attackername, attacker.pers["rank"], attacker.pers["rankxp"], attacker.pers["prestige"], attacker getxuid( 1 ) ); - self thread maps\mp\_medals::setlastkilledby( attacker ); - attacker thread maps\mp\gametypes\_globallogic_score::inckillstreaktracker( sweapon ); - - if ( level.teambased && attacker.team != "spectator" ) - { - if ( isai( attacker ) ) - maps\mp\gametypes\_globallogic_score::giveteamscore( "kill", attacker.aiteam, attacker, self ); - else - maps\mp\gametypes\_globallogic_score::giveteamscore( "kill", attacker.team, attacker, self ); - } - - scoresub = level.deathpointloss; - - if ( scoresub != 0 ) - maps\mp\gametypes\_globallogic_score::_setplayerscore( self, maps\mp\gametypes\_globallogic_score::_getplayerscore( self ) - scoresub ); - - level thread playkillbattlechatter( attacker, sweapon, self ); -} - -callback_playerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) -{ - profilelog_begintiming( 7, "ship" ); - self endon( "spawned" ); - self notify( "killed_player" ); - - if ( self.sessionteam == "spectator" ) - return; - - if ( game["state"] == "postgame" ) - return; - - self needsrevive( 0 ); - - if ( isdefined( self.burning ) && self.burning == 1 ) - self setburn( 0 ); - - self.suicide = 0; - self.teamkilled = 0; - - if ( isdefined( level.takelivesondeath ) && level.takelivesondeath == 1 ) - { - if ( self.pers["lives"] ) - { - self.pers["lives"]--; - - if ( self.pers["lives"] == 0 ) - { - level notify( "player_eliminated" ); - self notify( "player_eliminated" ); - } - } - } - - self thread flushgroupdialogonplayer( "item_destroyed" ); - sweapon = updateweapon( einflictor, sweapon ); - pixbeginevent( "PlayerKilled pre constants" ); - wasinlaststand = 0; - deathtimeoffset = 0; - lastweaponbeforedroppingintolaststand = undefined; - attackerstance = undefined; - self.laststandthislife = undefined; - self.vattackerorigin = undefined; - - if ( isdefined( self.uselaststandparams ) ) - { - self.uselaststandparams = undefined; -/# - assert( isdefined( self.laststandparams ) ); -#/ - - if ( !level.teambased || !isdefined( attacker ) || !isplayer( attacker ) || attacker.team != self.team || attacker == self ) - { - einflictor = self.laststandparams.einflictor; - attacker = self.laststandparams.attacker; - attackerstance = self.laststandparams.attackerstance; - idamage = self.laststandparams.idamage; - smeansofdeath = self.laststandparams.smeansofdeath; - sweapon = self.laststandparams.sweapon; - vdir = self.laststandparams.vdir; - shitloc = self.laststandparams.shitloc; - self.vattackerorigin = self.laststandparams.vattackerorigin; - deathtimeoffset = ( gettime() - self.laststandparams.laststandstarttime ) / 1000; - self thread maps\mp\gametypes\_battlechatter_mp::perkspecificbattlechatter( "secondchance" ); - - if ( isdefined( self.previousprimary ) ) - { - wasinlaststand = 1; - lastweaponbeforedroppingintolaststand = self.previousprimary; - } - } - - self.laststandparams = undefined; - } - - bestplayer = undefined; - bestplayermeansofdeath = undefined; - obituarymeansofdeath = undefined; - bestplayerweapon = undefined; - obituaryweapon = sweapon; - assistedsuicide = 0; - - if ( ( !isdefined( attacker ) || attacker.classname == "trigger_hurt" || attacker.classname == "worldspawn" || isdefined( attacker.ismagicbullet ) && attacker.ismagicbullet == 1 || attacker == self ) && isdefined( self.attackers ) ) - { - if ( !isdefined( bestplayer ) ) - { - for ( i = 0; i < self.attackers.size; i++ ) - { - player = self.attackers[i]; - - if ( !isdefined( player ) ) - continue; - - if ( !isdefined( self.attackerdamage[player.clientid] ) || !isdefined( self.attackerdamage[player.clientid].damage ) ) - continue; - - if ( player == self || level.teambased && player.team == self.team ) - continue; - - if ( self.attackerdamage[player.clientid].lasttimedamaged + 2500 < gettime() ) - continue; - - if ( !allowedassistweapon( self.attackerdamage[player.clientid].weapon ) ) - continue; - - if ( self.attackerdamage[player.clientid].damage > 1 && !isdefined( bestplayer ) ) - { - bestplayer = player; - bestplayermeansofdeath = self.attackerdamage[player.clientid].meansofdeath; - bestplayerweapon = self.attackerdamage[player.clientid].weapon; - continue; - } - - if ( isdefined( bestplayer ) && self.attackerdamage[player.clientid].damage > self.attackerdamage[bestplayer.clientid].damage ) - { - bestplayer = player; - bestplayermeansofdeath = self.attackerdamage[player.clientid].meansofdeath; - bestplayerweapon = self.attackerdamage[player.clientid].weapon; - } - } - } - - if ( isdefined( bestplayer ) ) - { - maps\mp\_scoreevents::processscoreevent( "assisted_suicide", bestplayer, self, sweapon ); - self recordkillmodifier( "assistedsuicide" ); - assistedsuicide = 1; - } - } - - if ( isdefined( bestplayer ) ) - { - attacker = bestplayer; - obituarymeansofdeath = bestplayermeansofdeath; - obituaryweapon = bestplayerweapon; - - if ( isdefined( bestplayerweapon ) ) - sweapon = bestplayerweapon; - } - - if ( isplayer( attacker ) ) - attacker.damagedplayers[self.clientid] = undefined; - - self.deathtime = gettime(); - attacker = updateattacker( attacker, sweapon ); - einflictor = updateinflictor( einflictor ); - smeansofdeath = self playerkilled_updatemeansofdeath( attacker, einflictor, sweapon, smeansofdeath, shitloc ); - - if ( !isdefined( obituarymeansofdeath ) ) - obituarymeansofdeath = smeansofdeath; - - if ( isdefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped == 1 ) - { - self detachshieldmodel( level.carriedshieldmodel, "tag_weapon_left" ); - self.hasriotshield = 0; - self.hasriotshieldequipped = 0; - } - - self thread updateglobalbotkilledcounter(); - self playerkilled_weaponstats( attacker, sweapon, smeansofdeath, wasinlaststand, lastweaponbeforedroppingintolaststand, einflictor ); - self playerkilled_obituary( attacker, einflictor, obituaryweapon, obituarymeansofdeath ); - maps\mp\gametypes\_spawnlogic::deathoccured( self, attacker ); - self.sessionstate = "dead"; - self.statusicon = "hud_status_dead"; - self.pers["weapon"] = undefined; - self.killedplayerscurrent = []; - self.deathcount++; -/# - println( "players(" + self.clientid + ") death count ++: " + self.deathcount ); -#/ - self playerkilled_killstreaks( attacker, sweapon ); - lpselfnum = self getentitynumber(); - lpselfname = self.name; - lpattackguid = ""; - lpattackname = ""; - lpselfteam = self.team; - lpselfguid = self getguid(); - lpattackteam = ""; - lpattackorigin = ( 0, 0, 0 ); - lpattacknum = -1; - awardassists = 0; - wasteamkill = 0; - wassuicide = 0; - pixendevent(); - maps\mp\_scoreevents::processscoreevent( "death", self, self, sweapon ); - self.pers["resetMomentumOnSpawn"] = 1; - - if ( isplayer( attacker ) ) - { - lpattackguid = attacker getguid(); - lpattackname = attacker.name; - lpattackteam = attacker.team; - lpattackorigin = attacker.origin; - - if ( attacker == self || assistedsuicide == 1 ) - { - dokillcam = 0; - wassuicide = 1; - awardassists = self playerkilled_suicide( einflictor, attacker, smeansofdeath, sweapon, shitloc ); - } - else - { - pixbeginevent( "PlayerKilled attacker" ); - lpattacknum = attacker getentitynumber(); - dokillcam = 1; - - if ( level.teambased && self.team == attacker.team && smeansofdeath == "MOD_GRENADE" && level.friendlyfire == 0 ) - { - - } - else if ( level.teambased && self.team == attacker.team ) - { - wasteamkill = 1; - self playerkilled_teamkill( einflictor, attacker, smeansofdeath, sweapon, shitloc ); - } - else - { - self playerkilled_kill( einflictor, attacker, smeansofdeath, sweapon, shitloc ); - - if ( level.teambased ) - awardassists = 1; - } - - pixendevent(); - } - } - else if ( isdefined( attacker ) && ( attacker.classname == "trigger_hurt" || attacker.classname == "worldspawn" ) ) - { - dokillcam = 0; - lpattacknum = -1; - lpattackguid = ""; - lpattackname = ""; - lpattackteam = "world"; - thread maps\mp\_scoreevents::processscoreevent( "suicide", self ); - self maps\mp\gametypes\_globallogic_score::incpersstat( "suicides", 1 ); - self.suicides = self maps\mp\gametypes\_globallogic_score::getpersstat( "suicides" ); - self.suicide = 1; - thread maps\mp\gametypes\_battlechatter_mp::onplayersuicideorteamkill( self, "suicide" ); - awardassists = 1; - - if ( level.maxsuicidesbeforekick > 0 && level.maxsuicidesbeforekick <= self.suicides ) - { - self notify( "teamKillKicked" ); - self suicidekick(); - } - } - else - { - dokillcam = 0; - lpattacknum = -1; - lpattackguid = ""; - lpattackname = ""; - lpattackteam = "world"; - wassuicide = 1; - - if ( isdefined( einflictor ) && isdefined( einflictor.killcament ) ) - { - dokillcam = 1; - lpattacknum = self getentitynumber(); - wassuicide = 0; - } - - if ( isdefined( attacker ) && isdefined( attacker.team ) && isdefined( level.teams[attacker.team] ) ) - { - if ( attacker.team != self.team ) - { - if ( level.teambased ) - maps\mp\gametypes\_globallogic_score::giveteamscore( "kill", attacker.team, attacker, self ); - - wassuicide = 0; - } - } - - awardassists = 1; - } - - if ( !level.ingraceperiod ) - { - if ( smeansofdeath != "MOD_GRENADE" && smeansofdeath != "MOD_GRENADE_SPLASH" && smeansofdeath != "MOD_EXPLOSIVE" && smeansofdeath != "MOD_EXPLOSIVE_SPLASH" && smeansofdeath != "MOD_PROJECTILE_SPLASH" ) - self maps\mp\gametypes\_weapons::dropscavengerfordeath( attacker ); - - if ( !wasteamkill && !wassuicide ) - { - self maps\mp\gametypes\_weapons::dropweaponfordeath( attacker, sweapon, smeansofdeath ); - self maps\mp\gametypes\_weapons::dropoffhand(); - } - } - - if ( sessionmodeiszombiesgame() ) - awardassists = 0; - - if ( awardassists ) - self playerkilled_awardassists( einflictor, attacker, sweapon, lpattackteam ); - - pixbeginevent( "PlayerKilled post constants" ); - self.lastattacker = attacker; - self.lastdeathpos = self.origin; - - if ( isdefined( attacker ) && isplayer( attacker ) && attacker != self && ( !level.teambased || attacker.team != self.team ) ) - self thread maps\mp\_challenges::playerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, shitloc, attackerstance ); - else - self notify( "playerKilledChallengesProcessed" ); - - if ( isdefined( self.attackers ) ) - self.attackers = []; - - if ( isplayer( attacker ) ) - { - if ( maps\mp\killstreaks\_killstreaks::iskillstreakweapon( sweapon ) ) - { - killstreak = maps\mp\killstreaks\_killstreaks::getkillstreakforweapon( sweapon ); - bbprint( "mpattacks", "gametime %d attackerspawnid %d attackerweapon %s attackerx %d attackery %d attackerz %d victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d killstreak %s", gettime(), getplayerspawnid( attacker ), sweapon, lpattackorigin, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 1, killstreak ); - } - else - bbprint( "mpattacks", "gametime %d attackerspawnid %d attackerweapon %s attackerx %d attackery %d attackerz %d victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", gettime(), getplayerspawnid( attacker ), sweapon, lpattackorigin, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 1 ); - } - else - bbprint( "mpattacks", "gametime %d attackerweapon %s victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", gettime(), sweapon, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 1 ); - - logprint( "K;" + lpselfguid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\n" ); - attackerstring = "none"; - - if ( isplayer( attacker ) ) - attackerstring = attacker getxuid() + "(" + lpattackname + ")"; - - self logstring( "d " + smeansofdeath + "(" + sweapon + ") a:" + attackerstring + " d:" + idamage + " l:" + shitloc + " @ " + int( self.origin[0] ) + " " + int( self.origin[1] ) + " " + int( self.origin[2] ) ); - level thread maps\mp\gametypes\_globallogic::updateteamstatus(); - killcamentity = self getkillcamentity( attacker, einflictor, sweapon ); - killcamentityindex = -1; - killcamentitystarttime = 0; - - if ( isdefined( killcamentity ) ) - { - killcamentityindex = killcamentity getentitynumber(); - - if ( isdefined( killcamentity.starttime ) ) - killcamentitystarttime = killcamentity.starttime; - else - killcamentitystarttime = killcamentity.birthtime; - - if ( !isdefined( killcamentitystarttime ) ) - killcamentitystarttime = 0; - } - - if ( isdefined( self.killstreak_waitamount ) && self.killstreak_waitamount > 0 ) - dokillcam = 0; - - self maps\mp\gametypes\_weapons::detachcarryobjectmodel(); - died_in_vehicle = 0; - - if ( isdefined( self.diedonvehicle ) ) - died_in_vehicle = self.diedonvehicle; - - hit_by_train = 0; - - if ( isdefined( attacker ) && isdefined( attacker.targetname ) && attacker.targetname == "train" ) - hit_by_train = 1; - - pixendevent(); - pixbeginevent( "PlayerKilled body and gibbing" ); - - if ( !died_in_vehicle && !hit_by_train ) - { - vattackerorigin = undefined; - - if ( isdefined( attacker ) ) - vattackerorigin = attacker.origin; - - ragdoll_now = 0; - - if ( isdefined( self.usingvehicle ) && self.usingvehicle && isdefined( self.vehicleposition ) && self.vehicleposition == 1 ) - ragdoll_now = 1; - - body = self cloneplayer( deathanimduration ); - - if ( isdefined( body ) ) - self createdeadbody( idamage, smeansofdeath, sweapon, shitloc, vdir, vattackerorigin, deathanimduration, einflictor, ragdoll_now, body ); - } - - pixendevent(); - thread maps\mp\gametypes\_globallogic_spawn::spawnqueuedclient( self.team, attacker ); - self.switching_teams = undefined; - self.joining_team = undefined; - self.leaving_team = undefined; - self thread [[ level.onplayerkilled ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); - - for ( icb = 0; icb < level.onplayerkilledextraunthreadedcbs.size; icb++ ) - self [[ level.onplayerkilledextraunthreadedcbs[icb] ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); - - self.wantsafespawn = 0; - perks = []; - killstreaks = maps\mp\gametypes\_globallogic::getkillstreaks( attacker ); - - if ( !isdefined( self.killstreak_waitamount ) ) - self thread [[ level.spawnplayerprediction ]](); - - profilelog_endtiming( 7, "gs=" + game["state"] + " zom=" + sessionmodeiszombiesgame() ); - - if ( wasteamkill == 0 && assistedsuicide == 0 && hit_by_train == 0 && smeansofdeath != "MOD_SUICIDE" && !( !isdefined( attacker ) || attacker.classname == "trigger_hurt" || attacker.classname == "worldspawn" || attacker == self || isdefined( attacker.disablefinalkillcam ) ) ) - level thread maps\mp\gametypes\_killcam::recordkillcamsettings( lpattacknum, self getentitynumber(), sweapon, self.deathtime, deathtimeoffset, psoffsettime, killcamentityindex, killcamentitystarttime, perks, killstreaks, attacker ); - - wait 0.25; - weaponclass = getweaponclass( sweapon ); - - if ( weaponclass == "weapon_sniper" ) - self thread maps\mp\gametypes\_battlechatter_mp::killedbysniper( attacker ); - else - self thread maps\mp\gametypes\_battlechatter_mp::playerkilled( attacker ); - - self.cancelkillcam = 0; - self thread maps\mp\gametypes\_killcam::cancelkillcamonuse(); - defaultplayerdeathwatchtime = 1.75; - - if ( isdefined( level.overrideplayerdeathwatchtimer ) ) - defaultplayerdeathwatchtime = [[ level.overrideplayerdeathwatchtimer ]]( defaultplayerdeathwatchtime ); - - maps\mp\gametypes\_globallogic_utils::waitfortimeornotifies( defaultplayerdeathwatchtime ); - self notify( "death_delay_finished" ); -/# - if ( getdvarint( _hash_C1849218 ) != 0 ) - { - dokillcam = 1; - - if ( lpattacknum < 0 ) - lpattacknum = self getentitynumber(); - } -#/ - - if ( hit_by_train ) - { - if ( killcamentitystarttime > self.deathtime - 2500 ) - dokillcam = 0; - } - - if ( game["state"] != "playing" ) - return; - - self.respawntimerstarttime = gettime(); - - if ( !self.cancelkillcam && dokillcam && level.killcam ) - { - livesleft = !( level.numlives && !self.pers["lives"] ); - timeuntilspawn = maps\mp\gametypes\_globallogic_spawn::timeuntilspawn( 1 ); - willrespawnimmediately = livesleft && timeuntilspawn <= 0 && !level.playerqueuedrespawn; - self maps\mp\gametypes\_killcam::killcam( lpattacknum, self getentitynumber(), killcamentity, killcamentityindex, killcamentitystarttime, sweapon, self.deathtime, deathtimeoffset, psoffsettime, willrespawnimmediately, maps\mp\gametypes\_globallogic_utils::timeuntilroundend(), perks, killstreaks, attacker ); - } - - if ( game["state"] != "playing" ) - { - self.sessionstate = "dead"; - self.spectatorclient = -1; - self.killcamtargetentity = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - return; - } - - waittillkillstreakdone(); - userespawntime = 1; - - if ( isdefined( level.hostmigrationtimer ) ) - userespawntime = 0; - - maps\mp\gametypes\_hostmigration::waittillhostmigrationcountdown(); - - if ( maps\mp\gametypes\_globallogic_utils::isvalidclass( self.class ) ) - { - timepassed = undefined; - - if ( isdefined( self.respawntimerstarttime ) && userespawntime ) - timepassed = ( gettime() - self.respawntimerstarttime ) / 1000; - - self thread [[ level.spawnclient ]]( timepassed ); - self.respawntimerstarttime = undefined; - } -} - -updateglobalbotkilledcounter() -{ - if ( isdefined( self.pers["isBot"] ) ) - level.globallarryskilled++; -} - -waittillkillstreakdone() -{ - if ( isdefined( self.killstreak_waitamount ) ) - { - starttime = gettime(); - waittime = self.killstreak_waitamount * 1000; - - while ( gettime() < starttime + waittime && isdefined( self.killstreak_waitamount ) ) - wait 0.1; - - wait 2.0; - self.killstreak_waitamount = undefined; - } -} - -suicidekick() -{ - self maps\mp\gametypes\_globallogic_score::incpersstat( "sessionbans", 1 ); - self endon( "disconnect" ); - waittillframeend; - maps\mp\gametypes\_globallogic::gamehistoryplayerkicked(); - ban( self getentitynumber() ); - maps\mp\gametypes\_globallogic_audio::leaderdialog( "kicked" ); -} - -teamkillkick() -{ - self maps\mp\gametypes\_globallogic_score::incpersstat( "sessionbans", 1 ); - self endon( "disconnect" ); - waittillframeend; - playlistbanquantum = maps\mp\gametypes\_tweakables::gettweakablevalue( "team", "teamkillerplaylistbanquantum" ); - playlistbanpenalty = maps\mp\gametypes\_tweakables::gettweakablevalue( "team", "teamkillerplaylistbanpenalty" ); - - if ( playlistbanquantum > 0 && playlistbanpenalty > 0 ) - { - timeplayedtotal = self getdstat( "playerstatslist", "time_played_total", "StatValue" ); - minutesplayed = timeplayedtotal / 60; - freebees = 2; - banallowance = int( floor( minutesplayed / playlistbanquantum ) ) + freebees; - - if ( self.sessionbans > banallowance ) - self setdstat( "playerstatslist", "gametypeban", "StatValue", timeplayedtotal + playlistbanpenalty * 60 ); - } - - maps\mp\gametypes\_globallogic::gamehistoryplayerkicked(); - ban( self getentitynumber() ); - maps\mp\gametypes\_globallogic_audio::leaderdialog( "kicked" ); -} - -teamkilldelay() -{ - teamkills = self.pers["teamkills_nostats"]; - - if ( level.minimumallowedteamkills < 0 || teamkills <= level.minimumallowedteamkills ) - return 0; - - exceeded = teamkills - level.minimumallowedteamkills; - return level.teamkillspawndelay * exceeded; -} - -shouldteamkillkick( teamkilldelay ) -{ - if ( teamkilldelay && level.minimumallowedteamkills >= 0 ) - { - if ( maps\mp\gametypes\_globallogic_utils::gettimepassed() >= 5000 ) - return true; - - if ( self.pers["teamkills_nostats"] > 1 ) - return true; - } - - return false; -} - -reduceteamkillsovertime() -{ - timeperoneteamkillreduction = 20.0; - reductionpersecond = 1.0 / timeperoneteamkillreduction; - - while ( true ) - { - if ( isalive( self ) ) - { - self.pers["teamkills_nostats"] -= reductionpersecond; - - if ( self.pers["teamkills_nostats"] < level.minimumallowedteamkills ) - { - self.pers["teamkills_nostats"] = level.minimumallowedteamkills; - break; - } - } - - wait 1; - } -} - -ignoreteamkills( sweapon, smeansofdeath ) -{ - if ( sessionmodeiszombiesgame() ) - return true; - - if ( smeansofdeath == "MOD_MELEE" ) - return false; - - if ( sweapon == "briefcase_bomb_mp" ) - return true; - - if ( sweapon == "supplydrop_mp" ) - return true; - - return false; -} - -callback_playerlaststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) -{ - -} - -damageshellshockandrumble( eattacker, einflictor, sweapon, smeansofdeath, idamage ) -{ - self thread maps\mp\gametypes\_weapons::onweapondamage( eattacker, einflictor, sweapon, smeansofdeath, idamage ); - self playrumbleonentity( "damage_heavy" ); -} - -createdeadbody( idamage, smeansofdeath, sweapon, shitloc, vdir, vattackerorigin, deathanimduration, einflictor, ragdoll_jib, body ) -{ - if ( smeansofdeath == "MOD_HIT_BY_OBJECT" && self getstance() == "prone" ) - { - self.body = body; - - if ( !isdefined( self.switching_teams ) ) - thread maps\mp\gametypes\_deathicons::adddeathicon( body, self, self.team, 5.0 ); - - return; - } - - if ( isdefined( level.ragdoll_override ) && self [[ level.ragdoll_override ]]( idamage, smeansofdeath, sweapon, shitloc, vdir, vattackerorigin, deathanimduration, einflictor, ragdoll_jib, body ) ) - return; - - if ( ragdoll_jib || self isonladder() || self ismantling() || smeansofdeath == "MOD_CRUSH" || smeansofdeath == "MOD_HIT_BY_OBJECT" ) - body startragdoll(); - - if ( !self isonground() ) - { - if ( getdvarint( "scr_disable_air_death_ragdoll" ) == 0 ) - body startragdoll(); - } - - if ( self is_explosive_ragdoll( sweapon, einflictor ) ) - body start_explosive_ragdoll( vdir, sweapon ); - - thread delaystartragdoll( body, shitloc, vdir, sweapon, einflictor, smeansofdeath ); - - if ( smeansofdeath == "MOD_BURNED" || isdefined( self.burning ) ) - body maps\mp\_burnplayer::burnedtodeath(); - - if ( smeansofdeath == "MOD_CRUSH" ) - body maps\mp\gametypes\_globallogic_vehicle::vehiclecrush(); - - self.body = body; - - if ( !isdefined( self.switching_teams ) ) - thread maps\mp\gametypes\_deathicons::adddeathicon( body, self, self.team, 5.0 ); -} - -is_explosive_ragdoll( weapon, inflictor ) -{ - if ( !isdefined( weapon ) ) - return false; - - if ( weapon == "destructible_car_mp" || weapon == "explodable_barrel_mp" ) - return true; - - if ( weapon == "sticky_grenade_mp" || weapon == "explosive_bolt_mp" ) - { - if ( isdefined( inflictor ) && isdefined( inflictor.stucktoplayer ) ) - { - if ( inflictor.stucktoplayer == self ) - return true; - } - } - - return false; -} - -start_explosive_ragdoll( dir, weapon ) -{ - if ( !isdefined( self ) ) - return; - - x = randomintrange( 50, 100 ); - y = randomintrange( 50, 100 ); - z = randomintrange( 10, 20 ); - - if ( isdefined( weapon ) && ( weapon == "sticky_grenade_mp" || weapon == "explosive_bolt_mp" ) ) - { - if ( isdefined( dir ) && lengthsquared( dir ) > 0 ) - { - x = dir[0] * x; - y = dir[1] * y; - } - } - else - { - if ( cointoss() ) - x *= -1; - - if ( cointoss() ) - y *= -1; - } - - self startragdoll(); - self launchragdoll( ( x, y, z ) ); -} - -notifyconnecting() -{ - waittillframeend; - - if ( isdefined( self ) ) - level notify( "connecting", self ); -} - -delaystartragdoll( ent, shitloc, vdir, sweapon, einflictor, smeansofdeath ) -{ - if ( isdefined( ent ) ) - { - deathanim = ent getcorpseanim(); - - if ( animhasnotetrack( deathanim, "ignore_ragdoll" ) ) - return; - } - - if ( level.oldschool ) - { - if ( !isdefined( vdir ) ) - vdir = ( 0, 0, 0 ); - - explosionpos = ent.origin + ( 0, 0, maps\mp\gametypes\_globallogic_utils::gethitlocheight( shitloc ) ); - explosionpos -= vdir * 20; - explosionradius = 40; - explosionforce = 0.75; - - if ( smeansofdeath == "MOD_IMPACT" || smeansofdeath == "MOD_EXPLOSIVE" || issubstr( smeansofdeath, "MOD_GRENADE" ) || issubstr( smeansofdeath, "MOD_PROJECTILE" ) || shitloc == "head" || shitloc == "helmet" ) - explosionforce = 2.5; - - ent startragdoll( 1 ); - wait 0.05; - - if ( !isdefined( ent ) ) - return; - - physicsexplosionsphere( explosionpos, explosionradius, explosionradius / 2, explosionforce ); - return; - } - - wait 0.2; - - if ( !isdefined( ent ) ) - return; - - if ( ent isragdoll() ) - return; - - deathanim = ent getcorpseanim(); - startfrac = 0.35; - - if ( animhasnotetrack( deathanim, "start_ragdoll" ) ) - { - times = getnotetracktimes( deathanim, "start_ragdoll" ); - - if ( isdefined( times ) ) - startfrac = times[0]; - } - - waittime = startfrac * getanimlength( deathanim ); - wait( waittime ); - - if ( isdefined( ent ) ) - ent startragdoll( 1 ); -} - -trackattackerdamage( eattacker, idamage, smeansofdeath, sweapon ) -{ -/# - assert( isplayer( eattacker ) ); -#/ - - if ( self.attackerdata.size == 0 ) - self.firsttimedamaged = gettime(); - - if ( !isdefined( self.attackerdata[eattacker.clientid] ) ) - { - self.attackerdamage[eattacker.clientid] = spawnstruct(); - self.attackerdamage[eattacker.clientid].damage = idamage; - self.attackerdamage[eattacker.clientid].meansofdeath = smeansofdeath; - self.attackerdamage[eattacker.clientid].weapon = sweapon; - self.attackerdamage[eattacker.clientid].time = gettime(); - self.attackers[self.attackers.size] = eattacker; - self.attackerdata[eattacker.clientid] = 0; - } - else - { - self.attackerdamage[eattacker.clientid].damage += idamage; - self.attackerdamage[eattacker.clientid].meansofdeath = smeansofdeath; - self.attackerdamage[eattacker.clientid].weapon = sweapon; - - if ( !isdefined( self.attackerdamage[eattacker.clientid].time ) ) - self.attackerdamage[eattacker.clientid].time = gettime(); - } - - self.attackerdamage[eattacker.clientid].lasttimedamaged = gettime(); - - if ( maps\mp\gametypes\_weapons::isprimaryweapon( sweapon ) ) - self.attackerdata[eattacker.clientid] = 1; -} - -giveinflictorownerassist( eattacker, einflictor, idamage, smeansofdeath, sweapon ) -{ - if ( !isdefined( einflictor ) ) - return; - - if ( !isdefined( einflictor.owner ) ) - return; - - if ( !isdefined( einflictor.ownergetsassist ) ) - return; - - if ( !einflictor.ownergetsassist ) - return; - -/# - assert( isplayer( einflictor.owner ) ); -#/ - self trackattackerdamage( einflictor.owner, idamage, smeansofdeath, sweapon ); -} - -playerkilled_updatemeansofdeath( attacker, einflictor, sweapon, smeansofdeath, shitloc ) -{ - if ( maps\mp\gametypes\_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) && isplayer( attacker ) ) - return "MOD_HEAD_SHOT"; - - switch ( sweapon ) - { - case "knife_ballistic_mp": - case "crossbow_mp": - if ( smeansofdeath != "MOD_HEAD_SHOT" && smeansofdeath != "MOD_MELEE" ) - smeansofdeath = "MOD_PISTOL_BULLET"; - - break; - case "dog_bite_mp": - smeansofdeath = "MOD_PISTOL_BULLET"; - break; - case "destructible_car_mp": - smeansofdeath = "MOD_EXPLOSIVE"; - break; - case "explodable_barrel_mp": - smeansofdeath = "MOD_EXPLOSIVE"; - break; - } - - return smeansofdeath; -} - -updateattacker( attacker, weapon ) -{ - if ( isai( attacker ) && isdefined( attacker.script_owner ) ) - { - if ( !level.teambased || attacker.script_owner.team != self.team ) - attacker = attacker.script_owner; - } - - if ( attacker.classname == "script_vehicle" && isdefined( attacker.owner ) ) - { - attacker notify( "killed", self ); - attacker = attacker.owner; - } - - if ( isai( attacker ) ) - attacker notify( "killed", self ); - - if ( isdefined( self.capturinglastflag ) && self.capturinglastflag == 1 ) - attacker.lastcapkiller = 1; - - if ( isdefined( attacker ) && isdefined( weapon ) && weapon == "planemortar_mp" ) - { - if ( !isdefined( attacker.planemortarbda ) ) - attacker.planemortarbda = 0; - - attacker.planemortarbda++; - } - - if ( isdefined( attacker ) && isdefined( weapon ) && ( weapon == "straferun_rockets_mp" || weapon == "straferun_gun_mp" ) ) - { - if ( isdefined( attacker.straferunbda ) ) - attacker.straferunbda++; - } - - return attacker; -} - -updateinflictor( einflictor ) -{ - if ( isdefined( einflictor ) && einflictor.classname == "script_vehicle" ) - { - einflictor notify( "killed", self ); - - if ( isdefined( einflictor.bda ) ) - einflictor.bda++; - } - - return einflictor; -} - -updateweapon( einflictor, sweapon ) -{ - if ( sweapon == "none" && isdefined( einflictor ) ) - { - if ( isdefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) - sweapon = "explodable_barrel_mp"; - else if ( isdefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) - sweapon = "destructible_car_mp"; - } - - return sweapon; -} - -getclosestkillcamentity( attacker, killcamentities, depth ) -{ - if ( !isdefined( depth ) ) - depth = 0; - - closestkillcament = undefined; - closestkillcamentindex = undefined; - closestkillcamentdist = undefined; - origin = undefined; - - foreach ( killcamentindex, killcament in killcamentities ) - { - if ( killcament == attacker ) - continue; - - origin = killcament.origin; - - if ( isdefined( killcament.offsetpoint ) ) - origin += killcament.offsetpoint; - - dist = distancesquared( self.origin, origin ); - - if ( !isdefined( closestkillcament ) || dist < closestkillcamentdist ) - { - closestkillcament = killcament; - closestkillcamentdist = dist; - closestkillcamentindex = killcamentindex; - } - } - - if ( depth < 3 && isdefined( closestkillcament ) ) - { - if ( !bullettracepassed( closestkillcament.origin, self.origin, 0, self ) ) - { - killcamentities[closestkillcamentindex] = undefined; - betterkillcament = getclosestkillcamentity( attacker, killcamentities, depth + 1 ); - - if ( isdefined( betterkillcament ) ) - closestkillcament = betterkillcament; - } - } - - return closestkillcament; -} - -getkillcamentity( attacker, einflictor, sweapon ) -{ - if ( !isdefined( einflictor ) ) - return undefined; - - if ( einflictor == attacker ) - { - if ( !isdefined( einflictor.ismagicbullet ) ) - return undefined; - - if ( isdefined( einflictor.ismagicbullet ) && !einflictor.ismagicbullet ) - return undefined; - } - else if ( isdefined( level.levelspecifickillcam ) ) - { - levelspecifickillcament = self [[ level.levelspecifickillcam ]](); - - if ( isdefined( levelspecifickillcament ) ) - return levelspecifickillcament; - } - - if ( sweapon == "m220_tow_mp" ) - return undefined; - - if ( isdefined( einflictor.killcament ) ) - { - if ( einflictor.killcament == attacker ) - return undefined; - - return einflictor.killcament; - } - else if ( isdefined( einflictor.killcamentities ) ) - return getclosestkillcamentity( attacker, einflictor.killcamentities ); - - if ( isdefined( einflictor.script_gameobjectname ) && einflictor.script_gameobjectname == "bombzone" ) - return einflictor.killcament; - - return einflictor; -} - -playkillbattlechatter( attacker, sweapon, victim ) -{ - if ( isplayer( attacker ) ) - { - if ( !maps\mp\killstreaks\_killstreaks::iskillstreakweapon( sweapon ) ) - level thread maps\mp\gametypes\_battlechatter_mp::saykillbattlechatter( attacker, sweapon, victim ); - } -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_score.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_score.gsc deleted file mode 100644 index 4535a1d..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_score.gsc +++ /dev/null @@ -1,1360 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -updatematchbonusscores( winner ) -{ - if ( !game["timepassed"] ) - return; - - if ( !level.rankedmatch ) - return; - - if ( level.teambased && isdefined( winner ) ) - { - if ( winner == "endregulation" ) - return; - } - - if ( !level.timelimit || level.forcedend ) - { - gamelength = maps\mp\gametypes\_globallogic_utils::gettimepassed() / 1000; - gamelength = min( gamelength, 1200 ); - - if ( level.gametype == "twar" && game["roundsplayed"] > 0 ) - gamelength += level.timelimit * 60; - } - else - gamelength = level.timelimit * 60; - - if ( level.teambased ) - { - winningteam = "tie"; - - foreach ( team in level.teams ) - { - if ( winner == team ) - { - winningteam = team; - break; - } - } - - if ( winningteam != "tie" ) - { - winnerscale = 1.0; - loserscale = 0.5; - } - else - { - winnerscale = 0.75; - loserscale = 0.75; - } - - players = level.players; - - for ( i = 0; i < players.size; i++ ) - { - player = players[i]; - - if ( player.timeplayed["total"] < 1 || player.pers["participation"] < 1 ) - { - player thread maps\mp\gametypes\_rank::endgameupdate(); - continue; - } - - totaltimeplayed = player.timeplayed["total"]; - - if ( totaltimeplayed > gamelength ) - totaltimeplayed = gamelength; - - if ( level.hostforcedend && player ishost() ) - continue; - - if ( player.pers["score"] < 0 ) - continue; - - spm = player maps\mp\gametypes\_rank::getspm(); - - if ( winningteam == "tie" ) - { - playerscore = int( winnerscale * ( gamelength / 60 * spm ) * totaltimeplayed / gamelength ); - player thread givematchbonus( "tie", playerscore ); - player.matchbonus = playerscore; - continue; - } - - if ( isdefined( player.pers["team"] ) && player.pers["team"] == winningteam ) - { - playerscore = int( winnerscale * ( gamelength / 60 * spm ) * totaltimeplayed / gamelength ); - player thread givematchbonus( "win", playerscore ); - player.matchbonus = playerscore; - continue; - } - - if ( isdefined( player.pers["team"] ) && player.pers["team"] != "spectator" ) - { - playerscore = int( loserscale * ( gamelength / 60 * spm ) * totaltimeplayed / gamelength ); - player thread givematchbonus( "loss", playerscore ); - player.matchbonus = playerscore; - } - } - } - else - { - if ( isdefined( winner ) ) - { - winnerscale = 1.0; - loserscale = 0.5; - } - else - { - winnerscale = 0.75; - loserscale = 0.75; - } - - players = level.players; - - for ( i = 0; i < players.size; i++ ) - { - player = players[i]; - - if ( player.timeplayed["total"] < 1 || player.pers["participation"] < 1 ) - { - player thread maps\mp\gametypes\_rank::endgameupdate(); - continue; - } - - totaltimeplayed = player.timeplayed["total"]; - - if ( totaltimeplayed > gamelength ) - totaltimeplayed = gamelength; - - spm = player maps\mp\gametypes\_rank::getspm(); - iswinner = 0; - - for ( pidx = 0; pidx < min( level.placement["all"][0].size, 3 ); pidx++ ) - { - if ( level.placement["all"][pidx] != player ) - continue; - - iswinner = 1; - } - - if ( iswinner ) - { - playerscore = int( winnerscale * ( gamelength / 60 * spm ) * totaltimeplayed / gamelength ); - player thread givematchbonus( "win", playerscore ); - player.matchbonus = playerscore; - continue; - } - - playerscore = int( loserscale * ( gamelength / 60 * spm ) * totaltimeplayed / gamelength ); - player thread givematchbonus( "loss", playerscore ); - player.matchbonus = playerscore; - } - } -} - -givematchbonus( scoretype, score ) -{ - self endon( "disconnect" ); - - level waittill( "give_match_bonus" ); - - if ( maps\mp\_scoreevents::shouldaddrankxp( self ) ) - self addrankxpvalue( scoretype, score ); - - self maps\mp\gametypes\_rank::endgameupdate(); -} - -doskillupdate( winner ) -{ - skillupdate( winner, level.teambased ); -} - -gethighestscoringplayer() -{ - players = level.players; - winner = undefined; - tie = 0; - - for ( i = 0; i < players.size; i++ ) - { - if ( !isdefined( players[i].pointstowin ) ) - continue; - - if ( players[i].pointstowin < 1 ) - continue; - - if ( !isdefined( winner ) || players[i].pointstowin > winner.pointstowin ) - { - winner = players[i]; - tie = 0; - continue; - } - - if ( players[i].pointstowin == winner.pointstowin ) - tie = 1; - } - - if ( tie || !isdefined( winner ) ) - return undefined; - else - return winner; -} - -resetscorechain() -{ - self notify( "reset_score_chain" ); - self.scorechain = 0; - self.rankupdatetotal = 0; -} - -scorechaintimer() -{ - self notify( "score_chain_timer" ); - self endon( "reset_score_chain" ); - self endon( "score_chain_timer" ); - self endon( "death" ); - self endon( "disconnect" ); - wait 20; - self thread resetscorechain(); -} - -roundtonearestfive( score ) -{ - rounding = score % 5; - - if ( rounding <= 2 ) - return score - rounding; - else - return score + 5 - rounding; -} - -giveplayermomentumnotification( score, label, descvalue, countstowardrampage ) -{ - rampagebonus = 0; - - if ( isdefined( level.usingrampage ) && level.usingrampage ) - { - if ( countstowardrampage ) - { - if ( !isdefined( self.scorechain ) ) - self.scorechain = 0; - - self.scorechain++; - self thread scorechaintimer(); - } - - if ( isdefined( self.scorechain ) && self.scorechain >= 999 ) - rampagebonus = roundtonearestfive( int( score * level.rampagebonusscale + 0.5 ) ); - } - - if ( score != 0 ) - { - self luinotifyevent( &"score_event", 3, label, score, rampagebonus ); - self luinotifyeventtospectators( &"score_event", 3, label, score, rampagebonus ); - } - - score += rampagebonus; - - if ( score > 0 && self hasperk( "specialty_earnmoremomentum" ) ) - score = roundtonearestfive( int( score * getdvarfloat( "perk_killstreakMomentumMultiplier" ) + 0.5 ) ); - - if ( isalive( self ) ) - _setplayermomentum( self, self.pers["momentum"] + score ); -} - -resetplayermomentumonspawn() -{ - if ( isdefined( level.usingscorestreaks ) && level.usingscorestreaks ) - { - _setplayermomentum( self, 0 ); - self thread resetscorechain(); - } -} - -giveplayermomentum( event, player, victim, weapon, descvalue ) -{ - if ( isdefined( level.disablemomentum ) && level.disablemomentum == 1 ) - return; - - score = maps\mp\gametypes\_rank::getscoreinfovalue( event ); -/# - assert( isdefined( score ) ); -#/ - label = maps\mp\gametypes\_rank::getscoreinfolabel( event ); - countstowardrampage = maps\mp\gametypes\_rank::doesscoreinfocounttowardrampage( event ); - - if ( event == "death" ) - _setplayermomentum( victim, victim.pers["momentum"] + score ); - - if ( score == 0 ) - return; - - if ( !isdefined( label ) ) - { -/# - assertmsg( event + " label undefined" ); -#/ - player giveplayermomentumnotification( score, "", descvalue, countstowardrampage ); - return; - } - - if ( level.gameended ) - return; - - player giveplayermomentumnotification( score, label, descvalue, countstowardrampage ); -} - -giveplayerscore( event, player, victim, weapon, descvalue ) -{ - scorediff = 0; - momentum = player.pers["momentum"]; - giveplayermomentum( event, player, victim, weapon, descvalue ); - newmomentum = player.pers["momentum"]; - - if ( level.overrideplayerscore ) - return 0; - - pixbeginevent( "level.onPlayerScore" ); - score = player.pers["score"]; - [[ level.onplayerscore ]]( event, player, victim ); - newscore = player.pers["score"]; - pixendevent(); - bbprint( "mpplayerscore", "spawnid %d gametime %d type %s player %s delta %d deltamomentum %d team %s", getplayerspawnid( player ), gettime(), event, player.name, newscore - score, newmomentum - momentum, player.team ); - player maps\mp\_bb::bbaddtostat( "score", newscore - score ); - - if ( score == newscore ) - return 0; - - pixbeginevent( "givePlayerScore" ); - recordplayerstats( player, "score", newscore ); - scorediff = newscore - score; - challengesenabled = !level.disablechallenges; - player addplayerstatwithgametype( "score", scorediff ); - - if ( challengesenabled ) - player addplayerstat( "CAREER_SCORE", scorediff ); - - if ( level.hardcoremode ) - { - player addplayerstat( "SCORE_HC", scorediff ); - - if ( challengesenabled ) - player addplayerstat( "CAREER_SCORE_HC", scorediff ); - } - - if ( level.multiteam ) - { - player addplayerstat( "SCORE_MULTITEAM", scorediff ); - - if ( challengesenabled ) - player addplayerstat( "CAREER_SCORE_MULTITEAM", scorediff ); - } - - if ( !level.disablestattracking && isdefined( player.pers["lastHighestScore"] ) && newscore > player.pers["lastHighestScore"] ) - player setdstat( "HighestStats", "highest_score", newscore ); - - player maps\mp\gametypes\_persistence::addrecentstat( 0, 0, "score", scorediff ); - pixendevent(); - return scorediff; -} - -default_onplayerscore( event, player, victim ) -{ - score = maps\mp\gametypes\_rank::getscoreinfovalue( event ); -/# - assert( isdefined( score ) ); -#/ - - if ( level.wagermatch ) - player thread maps\mp\gametypes\_rank::updaterankscorehud( score ); - - _setplayerscore( player, player.pers["score"] + score ); -} - -_setplayerscore( player, score ) -{ - if ( score == player.pers["score"] ) - return; - - if ( !level.rankedmatch ) - player thread maps\mp\gametypes\_rank::updaterankscorehud( score - player.pers["score"] ); - - player.pers["score"] = score; - player.score = player.pers["score"]; - recordplayerstats( player, "score", player.pers["score"] ); - - if ( level.wagermatch ) - player thread maps\mp\gametypes\_wager::playerscored(); -} - -_getplayerscore( player ) -{ - return player.pers["score"]; -} - -playtop3sounds() -{ - wait 0.05; - maps\mp\gametypes\_globallogic::updateplacement(); - - for ( i = 0; i < level.placement["all"].size; i++ ) - { - prevscoreplace = level.placement["all"][i].prevscoreplace; - - if ( !isdefined( prevscoreplace ) ) - prevscoreplace = 1; - - currentscoreplace = i + 1; - - for ( j = i - 1; j >= 0; j-- ) - { - if ( level.placement["all"][i].score == level.placement["all"][j].score ) - currentscoreplace--; - } - - wasinthemoney = prevscoreplace <= 3; - isinthemoney = currentscoreplace <= 3; - level.placement["all"][i].prevscoreplace = currentscoreplace; - } -} - -setpointstowin( points ) -{ - self.pers["pointstowin"] = clamp( points, 0, 65000 ); - self.pointstowin = self.pers["pointstowin"]; - self thread maps\mp\gametypes\_globallogic::checkscorelimit(); - self thread maps\mp\gametypes\_globallogic::checkplayerscorelimitsoon(); - level thread playtop3sounds(); -} - -givepointstowin( points ) -{ - self setpointstowin( self.pers["pointstowin"] + points ); -} - -_setplayermomentum( player, momentum ) -{ - momentum = clamp( momentum, 0, 2000 ); - oldmomentum = player.pers["momentum"]; - - if ( momentum == oldmomentum ) - return; - - player maps\mp\_bb::bbaddtostat( "momentum", momentum - oldmomentum ); - - if ( momentum > oldmomentum ) - { - highestmomentumcost = 0; - numkillstreaks = 0; - - if ( isdefined( player.killstreak ) ) - numkillstreaks = player.killstreak.size; - - killstreaktypearray = []; - - for ( currentkillstreak = 0; currentkillstreak < numkillstreaks; currentkillstreak++ ) - { - killstreaktype = maps\mp\killstreaks\_killstreaks::getkillstreakbymenuname( player.killstreak[currentkillstreak] ); - - if ( isdefined( killstreaktype ) ) - { - momentumcost = level.killstreaks[killstreaktype].momentumcost; - - if ( momentumcost > highestmomentumcost ) - highestmomentumcost = momentumcost; - - killstreaktypearray[killstreaktypearray.size] = killstreaktype; - } - } - - _giveplayerkillstreakinternal( player, momentum, oldmomentum, killstreaktypearray ); - - while ( highestmomentumcost > 0 && momentum >= highestmomentumcost ) - { - oldmomentum = 0; - momentum -= highestmomentumcost; - _giveplayerkillstreakinternal( player, momentum, oldmomentum, killstreaktypearray ); - } - } - - player.pers["momentum"] = momentum; - player.momentum = player.pers["momentum"]; -} - -_giveplayerkillstreakinternal( player, momentum, oldmomentum, killstreaktypearray ) -{ - for ( killstreaktypeindex = 0; killstreaktypeindex < killstreaktypearray.size; killstreaktypeindex++ ) - { - killstreaktype = killstreaktypearray[killstreaktypeindex]; - momentumcost = level.killstreaks[killstreaktype].momentumcost; - - if ( momentumcost > oldmomentum && momentumcost <= momentum ) - { - weapon = maps\mp\killstreaks\_killstreaks::getkillstreakweapon( killstreaktype ); - - if ( isdefined( level.usingscorestreaks ) && level.usingscorestreaks ) - { - if ( maps\mp\killstreaks\_killstreak_weapons::isheldkillstreakweapon( weapon ) ) - { - if ( !isdefined( player.pers["held_killstreak_ammo_count"][weapon] ) ) - player.pers["held_killstreak_ammo_count"][weapon] = 0; - - if ( !isdefined( player.pers["killstreak_quantity"][weapon] ) ) - player.pers["killstreak_quantity"][weapon] = 0; - - currentweapon = player getcurrentweapon(); - - if ( currentweapon == weapon ) - { - if ( player.pers["killstreak_quantity"][weapon] < level.scorestreaksmaxstacking ) - player.pers["killstreak_quantity"][weapon]++; - } - else - { - player.pers["held_killstreak_clip_count"][weapon] = weaponclipsize( weapon ); - player.pers["held_killstreak_ammo_count"][weapon] = weaponmaxammo( weapon ); - player maps\mp\gametypes\_class::setweaponammooverall( weapon, player.pers["held_killstreak_ammo_count"][weapon] ); - } - } - else - { - player maps\mp\_challenges::earnedkillstreak(); - player maps\mp\killstreaks\_killstreaks::changekillstreakquantity( weapon, 1 ); - } - - player maps\mp\killstreaks\_killstreaks::addkillstreaktoqueue( level.killstreaks[killstreaktype].menuname, 0, killstreaktype ); - continue; - } - - player maps\mp\killstreaks\_killstreaks::addkillstreaktoqueue( level.killstreaks[killstreaktype].menuname, 0, killstreaktype ); - activeeventname = "reward_active"; - - if ( isdefined( weapon ) ) - { - neweventname = weapon + "_active"; - - if ( maps\mp\_scoreevents::isregisteredevent( neweventname ) ) - activeeventname = neweventname; - } - } - } -} - -setplayermomentumdebug() -{ -/# - setdvar( "sv_momentumPercent", 0.0 ); - - while ( true ) - { - wait 1; - momentumpercent = getdvarfloatdefault( "sv_momentumPercent", 0.0 ); - - if ( momentumpercent != 0.0 ) - { - player = gethostplayer(); - - if ( !isdefined( player ) ) - return; - - if ( isdefined( player.killstreak ) ) - _setplayermomentum( player, int( 2000 * momentumpercent / 100 ) ); - } - } -#/ -} - -giveteamscore( event, team, player, victim ) -{ - if ( level.overrideteamscore ) - return; - - pixbeginevent( "level.onTeamScore" ); - teamscore = game["teamScores"][team]; - [[ level.onteamscore ]]( event, team ); - pixendevent(); - newscore = game["teamScores"][team]; - bbprint( "mpteamscores", "gametime %d event %s team %d diff %d score %d", gettime(), event, team, newscore - teamscore, newscore ); - - if ( teamscore == newscore ) - return; - - updateteamscores( team ); - thread maps\mp\gametypes\_globallogic::checkscorelimit(); -} - -giveteamscoreforobjective_delaypostprocessing( team, score ) -{ - teamscore = game["teamScores"][team]; - onteamscore_incrementscore( score, team ); - newscore = game["teamScores"][team]; - bbprint( "mpteamobjscores", "gametime %d team %d diff %d score %d", gettime(), team, newscore - teamscore, newscore ); - - if ( teamscore == newscore ) - return; - - updateteamscores( team ); -} - -postprocessteamscores( teams ) -{ - foreach ( team in teams ) - onteamscore_postprocess( team ); - - thread maps\mp\gametypes\_globallogic::checkscorelimit(); -} - -giveteamscoreforobjective( team, score ) -{ - if ( !isdefined( level.teams[team] ) ) - return; - - teamscore = game["teamScores"][team]; - onteamscore( score, team ); - newscore = game["teamScores"][team]; - bbprint( "mpteamobjscores", "gametime %d team %d diff %d score %d", gettime(), team, newscore - teamscore, newscore ); - - if ( teamscore == newscore ) - return; - - updateteamscores( team ); - thread maps\mp\gametypes\_globallogic::checkscorelimit(); -} - -_setteamscore( team, teamscore ) -{ - if ( teamscore == game["teamScores"][team] ) - return; - - game["teamScores"][team] = clamp( teamscore, 0, 1000000 ); - updateteamscores( team ); - thread maps\mp\gametypes\_globallogic::checkscorelimit(); -} - -resetteamscores() -{ - if ( !isdefined( level.roundscorecarry ) || level.roundscorecarry == 0 || maps\mp\_utility::isfirstround() ) - { - foreach ( team in level.teams ) - game["teamScores"][team] = 0; - } - - maps\mp\gametypes\_globallogic_score::updateallteamscores(); -} - -resetallscores() -{ - resetteamscores(); - resetplayerscores(); -} - -resetplayerscores() -{ - players = level.players; - winner = undefined; - tie = 0; - - for ( i = 0; i < players.size; i++ ) - { - if ( isdefined( players[i].pers["score"] ) ) - _setplayerscore( players[i], 0 ); - } -} - -updateteamscores( team ) -{ - setteamscore( team, game["teamScores"][team] ); - level thread maps\mp\gametypes\_globallogic::checkteamscorelimitsoon( team ); -} - -updateallteamscores() -{ - foreach ( team in level.teams ) - updateteamscores( team ); -} - -_getteamscore( team ) -{ - return game["teamScores"][team]; -} - -gethighestteamscoreteam() -{ - score = 0; - winning_teams = []; - - foreach ( team in level.teams ) - { - team_score = game["teamScores"][team]; - - if ( team_score > score ) - { - score = team_score; - winning_teams = []; - } - - if ( team_score == score ) - winning_teams[team] = team; - } - - return winning_teams; -} - -areteamarraysequal( teamsa, teamsb ) -{ - if ( teamsa.size != teamsb.size ) - return false; - - foreach ( team in teamsa ) - { - if ( !isdefined( teamsb[team] ) ) - return false; - } - - return true; -} - -onteamscore( score, team ) -{ - onteamscore_incrementscore( score, team ); - onteamscore_postprocess( team ); -} - -onteamscore_incrementscore( score, team ) -{ - game["teamScores"][team] += score; - - if ( game["teamScores"][team] < 0 ) - game["teamScores"][team] = 0; - - if ( level.scorelimit && game["teamScores"][team] > level.scorelimit ) - game["teamScores"][team] = level.scorelimit; -} - -onteamscore_postprocess( team ) -{ - if ( level.splitscreen ) - return; - - if ( level.scorelimit == 1 ) - return; - - iswinning = gethighestteamscoreteam(); - - if ( iswinning.size == 0 ) - return; - - if ( gettime() - level.laststatustime < 5000 ) - return; - - if ( areteamarraysequal( iswinning, level.waswinning ) ) - return; - - if ( iswinning.size == 1 ) - { - level.laststatustime = gettime(); - - foreach ( team in iswinning ) - { - if ( isdefined( level.waswinning[team] ) ) - { - if ( level.waswinning.size == 1 ) - continue; - } - - maps\mp\gametypes\_globallogic_audio::leaderdialog( "lead_taken", team, "status" ); - } - } - else - return; - - if ( level.waswinning.size == 1 ) - { - foreach ( team in level.waswinning ) - { - if ( isdefined( iswinning[team] ) ) - { - if ( iswinning.size == 1 ) - continue; - - if ( level.waswinning.size > 1 ) - continue; - } - - maps\mp\gametypes\_globallogic_audio::leaderdialog( "lead_lost", team, "status" ); - } - } - - level.waswinning = iswinning; -} - -default_onteamscore( event, team ) -{ - score = maps\mp\gametypes\_rank::getscoreinfovalue( event ); -/# - assert( isdefined( score ) ); -#/ - onteamscore( score, team ); -} - -initpersstat( dataname, record_stats ) -{ - if ( !isdefined( self.pers[dataname] ) ) - self.pers[dataname] = 0; - - if ( !isdefined( record_stats ) || record_stats == 1 ) - recordplayerstats( self, dataname, int( self.pers[dataname] ) ); -} - -getpersstat( dataname ) -{ - return self.pers[dataname]; -} - -incpersstat( dataname, increment, record_stats, includegametype ) -{ - pixbeginevent( "incPersStat" ); - self.pers[dataname] += increment; - - if ( isdefined( includegametype ) && includegametype ) - self addplayerstatwithgametype( dataname, increment ); - else - self addplayerstat( dataname, increment ); - - if ( !isdefined( record_stats ) || record_stats == 1 ) - self thread threadedrecordplayerstats( dataname ); - - pixendevent(); -} - -threadedrecordplayerstats( dataname ) -{ - self endon( "disconnect" ); - waittillframeend; - recordplayerstats( self, dataname, self.pers[dataname] ); -} - -updatewinstats( winner ) -{ - winner addplayerstatwithgametype( "losses", -1 ); - winner addplayerstatwithgametype( "wins", 1 ); - - if ( level.hardcoremode ) - winner addplayerstat( "wins_HC", 1 ); - - if ( level.multiteam ) - winner addplayerstat( "wins_MULTITEAM", 1 ); - - winner updatestatratio( "wlratio", "wins", "losses" ); - restorewinstreaks( winner ); - winner addplayerstatwithgametype( "cur_win_streak", 1 ); - winner notify( "win" ); - cur_gamemode_win_streak = winner maps\mp\gametypes\_persistence::statgetwithgametype( "cur_win_streak" ); - gamemode_win_streak = winner maps\mp\gametypes\_persistence::statgetwithgametype( "win_streak" ); - cur_win_streak = winner getdstat( "playerstatslist", "cur_win_streak", "StatValue" ); - - if ( !level.disablestattracking && cur_win_streak > winner getdstat( "HighestStats", "win_streak" ) ) - winner setdstat( "HighestStats", "win_streak", cur_win_streak ); - - if ( cur_gamemode_win_streak > gamemode_win_streak ) - winner maps\mp\gametypes\_persistence::statsetwithgametype( "win_streak", cur_gamemode_win_streak ); - - if ( maps\mp\bots\_bot::is_bot_ranked_match() ) - { - combattrainingwins = winner getdstat( "combatTrainingWins" ); - winner setdstat( "combatTrainingWins", combattrainingwins + 1 ); - } -} - -updatelossstats( loser ) -{ - loser addplayerstatwithgametype( "losses", 1 ); - loser updatestatratio( "wlratio", "wins", "losses" ); - loser notify( "loss" ); -} - -updatetiestats( loser ) -{ - loser addplayerstatwithgametype( "losses", -1 ); - loser addplayerstatwithgametype( "ties", 1 ); - loser updatestatratio( "wlratio", "wins", "losses" ); - - if ( !level.disablestattracking ) - loser setdstat( "playerstatslist", "cur_win_streak", "StatValue", 0 ); - - loser notify( "tie" ); -} - -updatewinlossstats( winner ) -{ - if ( !waslastround() && !level.hostforcedend ) - return; - - players = level.players; - - if ( !isdefined( winner ) || isdefined( winner ) && !isplayer( winner ) && winner == "tie" ) - { - for ( i = 0; i < players.size; i++ ) - { - if ( !isdefined( players[i].pers["team"] ) ) - continue; - - if ( level.hostforcedend && players[i] ishost() ) - continue; - - updatetiestats( players[i] ); - } - } - else if ( isplayer( winner ) ) - { - if ( level.hostforcedend && winner ishost() ) - return; - - updatewinstats( winner ); - - if ( !level.teambased ) - { - placement = level.placement["all"]; - topthreeplayers = min( 3, placement.size ); - - for ( index = 1; index < topthreeplayers; index++ ) - { - nexttopplayer = placement[index]; - updatewinstats( nexttopplayer ); - } - } - } - else - { - for ( i = 0; i < players.size; i++ ) - { - if ( !isdefined( players[i].pers["team"] ) ) - continue; - - if ( level.hostforcedend && players[i] ishost() ) - continue; - - if ( winner == "tie" ) - { - updatetiestats( players[i] ); - continue; - } - - if ( players[i].pers["team"] == winner ) - { - updatewinstats( players[i] ); - continue; - } - - if ( !level.disablestattracking ) - players[i] setdstat( "playerstatslist", "cur_win_streak", "StatValue", 0 ); - } - } -} - -backupandclearwinstreaks() -{ - self.pers["winStreak"] = self getdstat( "playerstatslist", "cur_win_streak", "StatValue" ); - - if ( !level.disablestattracking ) - self setdstat( "playerstatslist", "cur_win_streak", "StatValue", 0 ); - - self.pers["winStreakForGametype"] = maps\mp\gametypes\_persistence::statgetwithgametype( "cur_win_streak" ); - self maps\mp\gametypes\_persistence::statsetwithgametype( "cur_win_streak", 0 ); -} - -restorewinstreaks( winner ) -{ - if ( !level.disablestattracking ) - winner setdstat( "playerstatslist", "cur_win_streak", "StatValue", winner.pers["winStreak"] ); - - winner maps\mp\gametypes\_persistence::statsetwithgametype( "cur_win_streak", winner.pers["winStreakForGametype"] ); -} - -inckillstreaktracker( sweapon ) -{ - self endon( "disconnect" ); - waittillframeend; - - if ( sweapon == "artillery_mp" ) - self.pers["artillery_kills"]++; - - if ( sweapon == "dog_bite_mp" ) - self.pers["dog_kills"]++; -} - -trackattackerkill( name, rank, xp, prestige, xuid ) -{ - self endon( "disconnect" ); - attacker = self; - waittillframeend; - pixbeginevent( "trackAttackerKill" ); - - if ( !isdefined( attacker.pers["killed_players"][name] ) ) - attacker.pers["killed_players"][name] = 0; - - if ( !isdefined( attacker.killedplayerscurrent[name] ) ) - attacker.killedplayerscurrent[name] = 0; - - if ( !isdefined( attacker.pers["nemesis_tracking"][name] ) ) - attacker.pers["nemesis_tracking"][name] = 0; - - attacker.pers["killed_players"][name]++; - attacker.killedplayerscurrent[name]++; - attacker.pers["nemesis_tracking"][name] += 1.0; - - if ( attacker.pers["nemesis_name"] == name ) - attacker maps\mp\_challenges::killednemesis(); - - if ( attacker.pers["nemesis_name"] == "" || attacker.pers["nemesis_tracking"][name] > attacker.pers["nemesis_tracking"][attacker.pers["nemesis_name"]] ) - { - attacker.pers["nemesis_name"] = name; - attacker.pers["nemesis_rank"] = rank; - attacker.pers["nemesis_rankIcon"] = prestige; - attacker.pers["nemesis_xp"] = xp; - attacker.pers["nemesis_xuid"] = xuid; - } - else if ( isdefined( attacker.pers["nemesis_name"] ) && attacker.pers["nemesis_name"] == name ) - { - attacker.pers["nemesis_rank"] = rank; - attacker.pers["nemesis_xp"] = xp; - } - - if ( !isdefined( attacker.lastkilledvictim ) || !isdefined( attacker.lastkilledvictimcount ) ) - { - attacker.lastkilledvictim = name; - attacker.lastkilledvictimcount = 0; - } - - if ( attacker.lastkilledvictim == name ) - { - attacker.lastkilledvictimcount++; - - if ( attacker.lastkilledvictimcount >= 5 ) - { - attacker.lastkilledvictimcount = 0; - attacker addplayerstat( "streaker", 1 ); - } - } - else - { - attacker.lastkilledvictim = name; - attacker.lastkilledvictimcount = 1; - } - - pixendevent(); -} - -trackattackeedeath( attackername, rank, xp, prestige, xuid ) -{ - self endon( "disconnect" ); - waittillframeend; - pixbeginevent( "trackAttackeeDeath" ); - - if ( !isdefined( self.pers["killed_by"][attackername] ) ) - self.pers["killed_by"][attackername] = 0; - - self.pers["killed_by"][attackername]++; - - if ( !isdefined( self.pers["nemesis_tracking"][attackername] ) ) - self.pers["nemesis_tracking"][attackername] = 0; - - self.pers["nemesis_tracking"][attackername] += 1.5; - - if ( self.pers["nemesis_name"] == "" || self.pers["nemesis_tracking"][attackername] > self.pers["nemesis_tracking"][self.pers["nemesis_name"]] ) - { - self.pers["nemesis_name"] = attackername; - self.pers["nemesis_rank"] = rank; - self.pers["nemesis_rankIcon"] = prestige; - self.pers["nemesis_xp"] = xp; - self.pers["nemesis_xuid"] = xuid; - } - else if ( isdefined( self.pers["nemesis_name"] ) && self.pers["nemesis_name"] == attackername ) - { - self.pers["nemesis_rank"] = rank; - self.pers["nemesis_xp"] = xp; - } - - if ( self.pers["nemesis_name"] == attackername && self.pers["nemesis_tracking"][attackername] >= 2 ) - self setclientuivisibilityflag( "killcam_nemesis", 1 ); - else - self setclientuivisibilityflag( "killcam_nemesis", 0 ); - - pixendevent(); -} - -default_iskillboosting() -{ - return 0; -} - -givekillstats( smeansofdeath, sweapon, evictim ) -{ - self endon( "disconnect" ); - waittillframeend; - - if ( level.rankedmatch && self [[ level.iskillboosting ]]() ) - { -/# - self iprintlnbold( "GAMETYPE DEBUG: NOT GIVING YOU OFFENSIVE CREDIT AS BOOSTING PREVENTION" ); -#/ - return; - } - - pixbeginevent( "giveKillStats" ); - self maps\mp\gametypes\_globallogic_score::incpersstat( "kills", 1, 1, 1 ); - self.kills = self maps\mp\gametypes\_globallogic_score::getpersstat( "kills" ); - self updatestatratio( "kdratio", "kills", "deaths" ); - attacker = self; - - if ( smeansofdeath == "MOD_HEAD_SHOT" && !maps\mp\killstreaks\_killstreaks::iskillstreakweapon( sweapon ) ) - { - attacker thread incpersstat( "headshots", 1, 1, 0 ); - attacker.headshots = attacker.pers["headshots"]; - - if ( isdefined( evictim ) ) - evictim recordkillmodifier( "headshot" ); - } - - pixendevent(); -} - -inctotalkills( team ) -{ - if ( level.teambased && isdefined( level.teams[team] ) ) - game["totalKillsTeam"][team]++; - - game["totalKills"]++; -} - -setinflictorstat( einflictor, eattacker, sweapon ) -{ - if ( !isdefined( eattacker ) ) - return; - - if ( !isdefined( einflictor ) ) - { - eattacker addweaponstat( sweapon, "hits", 1 ); - return; - } - - if ( !isdefined( einflictor.playeraffectedarray ) ) - einflictor.playeraffectedarray = []; - - foundnewplayer = 1; - - for ( i = 0; i < einflictor.playeraffectedarray.size; i++ ) - { - if ( einflictor.playeraffectedarray[i] == self ) - { - foundnewplayer = 0; - break; - } - } - - if ( foundnewplayer ) - { - einflictor.playeraffectedarray[einflictor.playeraffectedarray.size] = self; - - if ( sweapon == "concussion_grenade_mp" || sweapon == "tabun_gas_mp" ) - eattacker addweaponstat( sweapon, "used", 1 ); - - eattacker addweaponstat( sweapon, "hits", 1 ); - } -} - -processshieldassist( killedplayer ) -{ - self endon( "disconnect" ); - killedplayer endon( "disconnect" ); - wait 0.05; - maps\mp\gametypes\_globallogic_utils::waittillslowprocessallowed(); - - if ( !isdefined( level.teams[self.pers["team"]] ) ) - return; - - if ( self.pers["team"] == killedplayer.pers["team"] ) - return; - - if ( !level.teambased ) - return; - - self maps\mp\gametypes\_globallogic_score::incpersstat( "assists", 1, 1, 1 ); - self.assists = self maps\mp\gametypes\_globallogic_score::getpersstat( "assists" ); - maps\mp\_scoreevents::processscoreevent( "shield_assist", self, killedplayer, "riotshield_mp" ); -} - -processassist( killedplayer, damagedone, weapon ) -{ - self endon( "disconnect" ); - killedplayer endon( "disconnect" ); - wait 0.05; - maps\mp\gametypes\_globallogic_utils::waittillslowprocessallowed(); - - if ( !isdefined( level.teams[self.pers["team"]] ) ) - return; - - if ( self.pers["team"] == killedplayer.pers["team"] ) - return; - - if ( !level.teambased ) - return; - - assist_level = "assist"; - assist_level_value = int( ceil( damagedone / 25 ) ); - - if ( assist_level_value < 1 ) - assist_level_value = 1; - else if ( assist_level_value > 3 ) - assist_level_value = 3; - - assist_level = assist_level + "_" + assist_level_value * 25; - self maps\mp\gametypes\_globallogic_score::incpersstat( "assists", 1, 1, 1 ); - self.assists = self maps\mp\gametypes\_globallogic_score::getpersstat( "assists" ); - - if ( isdefined( weapon ) ) - self addweaponstat( weapon, "assists", 1 ); - - switch ( weapon ) - { - case "concussion_grenade_mp": - assist_level = "assist_concussion"; - break; - case "flash_grenade_mp": - assist_level = "assist_flash"; - break; - case "emp_grenade_mp": - assist_level = "assist_emp"; - break; - case "proximity_grenade_mp": - case "proximity_grenade_aoe_mp": - assist_level = "assist_proximity"; - break; - } - - self maps\mp\_challenges::assisted(); - maps\mp\_scoreevents::processscoreevent( assist_level, self, killedplayer, weapon ); -} - -processkillstreakassists( attacker, inflictor, weaponname ) -{ - if ( !isdefined( attacker ) || !isdefined( attacker.team ) || self isenemyplayer( attacker ) == 0 ) - return; - - if ( self == attacker || attacker.classname == "trigger_hurt" || attacker.classname == "worldspawn" ) - return; - - enemycuavactive = 0; - - if ( attacker hasperk( "specialty_immunecounteruav" ) == 0 ) - { - foreach ( team in level.teams ) - { - if ( team == attacker.team ) - continue; - - if ( level.activecounteruavs[team] > 0 ) - enemycuavactive = 1; - } - } - - foreach ( player in level.players ) - { - if ( player.team != attacker.team ) - continue; - - if ( player.team == "spectator" ) - continue; - - if ( player == attacker ) - continue; - - if ( player.sessionstate != "playing" ) - continue; - -/# - assert( isdefined( player.activecounteruavs ) ); -#/ -/# - assert( isdefined( player.activeuavs ) ); -#/ -/# - assert( isdefined( player.activesatellites ) ); -#/ - - if ( player.activecounteruavs > 0 && !maps\mp\killstreaks\_killstreaks::iskillstreakweapon( weaponname ) ) - { - scoregiven = thread maps\mp\_scoreevents::processscoreevent( "counter_uav_assist", player ); - - if ( isdefined( scoregiven ) ) - player maps\mp\_challenges::earnedcuavassistscore( scoregiven ); - } - - if ( enemycuavactive == 0 ) - { - if ( player.activeuavs > 0 && !maps\mp\killstreaks\_killstreaks::iskillstreakweapon( weaponname ) ) - { - scoregiven = thread maps\mp\_scoreevents::processscoreevent( "uav_assist", player ); - - if ( isdefined( scoregiven ) ) - player maps\mp\_challenges::earneduavassistscore( scoregiven ); - } - - if ( player.activesatellites > 0 && !maps\mp\killstreaks\_killstreaks::iskillstreakweapon( weaponname ) ) - { - scoregiven = thread maps\mp\_scoreevents::processscoreevent( "satellite_assist", player ); - - if ( isdefined( scoregiven ) ) - player maps\mp\_challenges::earnedsatelliteassistscore( scoregiven ); - } - } - } - - foreach ( assistteam in level.teams ) - { - if ( assistteam == self.team ) - continue; - - if ( attacker.team != assistteam ) - continue; - - activeempowner = level.empowners[assistteam]; - - if ( isdefined( activeempowner ) && isplayer( activeempowner ) ) - { - if ( isdefined( attacker ) && activeempowner != attacker ) - { - if ( isdefined( activeempowner.emptime ) && activeempowner.spawntime < activeempowner.emptime ) - { - scoregiven = maps\mp\_scoreevents::processscoreevent( "emp_assist", activeempowner ); - - if ( isdefined( scoregiven ) ) - activeempowner maps\mp\_challenges::earnedempassistscore( scoregiven ); - } - } - } - } -} - -xpratethread() -{ -/# - self endon( "death" ); - self endon( "disconnect" ); - level endon( "game_ended" ); - - while ( level.inprematchperiod ) - wait 0.05; - - for (;;) - { - wait 5.0; - - if ( isdefined( level.teams[level.players[0].pers["team"]] ) ) - self maps\mp\gametypes\_rank::giverankxp( "kill", int( min( getdvarint( _hash_F8D00F60 ), 50 ) ) ); - } -#/ -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_spawn.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_spawn.gsc deleted file mode 100644 index ed95e1f..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_spawn.gsc +++ /dev/null @@ -1,875 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -timeuntilspawn( includeteamkilldelay ) -{ - if ( level.ingraceperiod && !self.hasspawned ) - return 0; - - respawndelay = 0; - - if ( self.hasspawned ) - { - result = self [[ level.onrespawndelay ]](); - - if ( isdefined( result ) ) - respawndelay = result; - else - respawndelay = level.playerrespawndelay; - - if ( self.suicide && level.suicidespawndelay > 0 ) - respawndelay += level.suicidespawndelay; - - if ( self.teamkilled && level.teamkilledspawndelay > 0 ) - respawndelay += level.teamkilledspawndelay; - - if ( includeteamkilldelay && is_true( self.teamkillpunish ) ) - respawndelay += maps\mp\gametypes\_globallogic_player::teamkilldelay(); - } - - wavebased = level.waverespawndelay > 0; - - if ( wavebased ) - return self timeuntilwavespawn( respawndelay ); - - return respawndelay; -} - -allteamshaveexisted() -{ - foreach ( team in level.teams ) - { - if ( !level.everexisted[team] ) - return false; - } - - return true; -} - -mayspawn() -{ - if ( isdefined( level.mayspawn ) && !self [[ level.mayspawn ]]() ) - return false; - - if ( level.inovertime ) - return false; - - if ( level.playerqueuedrespawn && !isdefined( self.allowqueuespawn ) && !level.ingraceperiod && !level.usestartspawns ) - return false; - - if ( level.numlives ) - { - if ( level.teambased ) - gamehasstarted = allteamshaveexisted(); - else - gamehasstarted = level.maxplayercount > 1 || !isoneround() && !isfirstround(); - - if ( !self.pers["lives"] ) - return false; - else if ( gamehasstarted ) - { - if ( !level.ingraceperiod && !self.hasspawned && !level.wagermatch ) - return false; - } - } - - return true; -} - -timeuntilwavespawn( minimumwait ) -{ - earliestspawntime = gettime() + minimumwait * 1000; - lastwavetime = level.lastwave[self.pers["team"]]; - wavedelay = level.wavedelay[self.pers["team"]] * 1000; - - if ( wavedelay == 0 ) - return 0; - - numwavespassedearliestspawntime = ( earliestspawntime - lastwavetime ) / wavedelay; - numwaves = ceil( numwavespassedearliestspawntime ); - timeofspawn = lastwavetime + numwaves * wavedelay; - - if ( isdefined( self.wavespawnindex ) ) - timeofspawn += 50 * self.wavespawnindex; - - return ( timeofspawn - gettime() ) / 1000; -} - -stoppoisoningandflareonspawn() -{ - self endon( "disconnect" ); - self.inpoisonarea = 0; - self.inburnarea = 0; - self.inflarevisionarea = 0; - self.ingroundnapalm = 0; -} - -spawnplayerprediction() -{ - self endon( "disconnect" ); - self endon( "end_respawn" ); - self endon( "game_ended" ); - self endon( "joined_spectators" ); - self endon( "spawned" ); - - while ( true ) - { - wait 0.5; - - if ( isdefined( level.onspawnplayerunified ) && getdvarint( _hash_CF6EEB8B ) == 0 ) - maps\mp\gametypes\_spawning::onspawnplayer_unified( 1 ); - else - self [[ level.onspawnplayer ]]( 1 ); - } -} - -doinitialspawnmessaging() -{ - self endon( "disconnect" ); - - if ( isdefined( level.disableprematchmessages ) && level.disableprematchmessages ) - return; - - team = self.pers["team"]; - thread maps\mp\gametypes\_hud_message::showinitialfactionpopup( team ); - - if ( isdefined( game["dialog"]["gametype"] ) && ( !level.splitscreen || self == level.players[0] ) ) - { - if ( !isdefined( level.infinalfight ) || !level.infinalfight ) - { - if ( level.hardcoremode && maps\mp\gametypes\_persistence::ispartygamemode() == 0 ) - self maps\mp\gametypes\_globallogic_audio::leaderdialogonplayer( "gametype_hardcore" ); - else - self maps\mp\gametypes\_globallogic_audio::leaderdialogonplayer( "gametype" ); - } - } - - while ( level.inprematchperiod ) - wait 0.05; - - hintmessage = getobjectivehinttext( team ); - - if ( isdefined( hintmessage ) ) - self thread maps\mp\gametypes\_hud_message::hintmessage( hintmessage ); - - if ( team == game["attackers"] ) - self maps\mp\gametypes\_globallogic_audio::leaderdialogonplayer( "offense_obj", "introboost" ); - else - self maps\mp\gametypes\_globallogic_audio::leaderdialogonplayer( "defense_obj", "introboost" ); -} - -spawnplayer() -{ - pixbeginevent( "spawnPlayer_preUTS" ); - self endon( "disconnect" ); - self endon( "joined_spectators" ); - self notify( "spawned" ); - level notify( "player_spawned" ); - self notify( "end_respawn" ); - self setspawnvariables(); - - if ( !self.hasspawned ) - { - self.underscorechance = 70; - self thread maps\mp\gametypes\_globallogic_audio::sndstartmusicsystem(); - } - - if ( isdefined( self.pers["resetMomentumOnSpawn"] ) && self.pers["resetMomentumOnSpawn"] ) - { - self maps\mp\gametypes\_globallogic_score::resetplayermomentumonspawn(); - self.pers["resetMomentumOnSpawn"] = undefined; - } - - if ( level.teambased ) - self.sessionteam = self.team; - else - { - self.sessionteam = "none"; - self.ffateam = self.team; - } - - hadspawned = self.hasspawned; - self.sessionstate = "playing"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.statusicon = ""; - self.damagedplayers = []; - - if ( getdvarint( "scr_csmode" ) > 0 ) - self.maxhealth = getdvarint( "scr_csmode" ); - else - self.maxhealth = level.playermaxhealth; - - self.health = self.maxhealth; - self.friendlydamage = undefined; - self.hasspawned = 1; - self.spawntime = gettime(); - self.afk = 0; - - if ( self.pers["lives"] && ( !isdefined( level.takelivesondeath ) || level.takelivesondeath == 0 ) ) - { - self.pers["lives"]--; - - if ( self.pers["lives"] == 0 ) - { - level notify( "player_eliminated" ); - self notify( "player_eliminated" ); - } - } - - self.laststand = undefined; - self.revivingteammate = 0; - self.burning = undefined; - self.nextkillstreakfree = undefined; - self.activeuavs = 0; - self.activecounteruavs = 0; - self.activesatellites = 0; - self.deathmachinekills = 0; - self.disabledweapon = 0; - self resetusability(); - self maps\mp\gametypes\_globallogic_player::resetattackerlist(); - self.diedonvehicle = undefined; - - if ( !self.wasaliveatmatchstart ) - { - if ( level.ingraceperiod || maps\mp\gametypes\_globallogic_utils::gettimepassed() < 20000 ) - self.wasaliveatmatchstart = 1; - } - - self setdepthoffield( 0, 0, 512, 512, 4, 0 ); - self resetfov(); - pixbeginevent( "onSpawnPlayer" ); - - if ( isdefined( level.onspawnplayerunified ) && getdvarint( _hash_CF6EEB8B ) == 0 ) - self [[ level.onspawnplayerunified ]](); - else - self [[ level.onspawnplayer ]]( 0 ); - - if ( isdefined( level.playerspawnedcb ) ) - self [[ level.playerspawnedcb ]](); - - pixendevent(); - pixendevent(); - level thread maps\mp\gametypes\_globallogic::updateteamstatus(); - pixbeginevent( "spawnPlayer_postUTS" ); - self thread stoppoisoningandflareonspawn(); - self.sensorgrenadedata = undefined; - self stopburning(); -/# - assert( maps\mp\gametypes\_globallogic_utils::isvalidclass( self.class ) ); -#/ - - if ( sessionmodeiszombiesgame() ) - self maps\mp\gametypes\_class::giveloadoutlevelspecific( self.team, self.class ); - else - { - self maps\mp\gametypes\_class::setclass( self.class ); - self maps\mp\gametypes\_class::giveloadout( self.team, self.class ); - } - - if ( level.inprematchperiod ) - { - self freeze_player_controls( 1 ); - team = self.pers["team"]; - - if ( isdefined( self.pers["music"].spawn ) && self.pers["music"].spawn == 0 ) - { - if ( level.wagermatch ) - music = "SPAWN_WAGER"; - else - music = game["music"]["spawn_" + team]; - - self thread maps\mp\gametypes\_globallogic_audio::set_music_on_player( music, 0, 0 ); - self.pers["music"].spawn = 1; - } - - if ( level.splitscreen ) - { - if ( isdefined( level.playedstartingmusic ) ) - music = undefined; - else - level.playedstartingmusic = 1; - } - - self thread doinitialspawnmessaging(); - } - else - { - self freeze_player_controls( 0 ); - self enableweapons(); - - if ( !hadspawned && game["state"] == "playing" ) - { - pixbeginevent( "sound" ); - team = self.team; - - if ( isdefined( self.pers["music"].spawn ) && self.pers["music"].spawn == 0 ) - { - music = game["music"]["spawn_short" + team]; - self thread maps\mp\gametypes\_globallogic_audio::set_music_on_player( music, 0, 0 ); - self.pers["music"].spawn = 1; - } - - if ( level.splitscreen ) - { - if ( isdefined( level.playedstartingmusic ) ) - music = undefined; - else - level.playedstartingmusic = 1; - } - - self thread doinitialspawnmessaging(); - pixendevent(); - } - } - - if ( getdvar( "scr_showperksonspawn" ) == "" ) - setdvar( "scr_showperksonspawn", "0" ); - - if ( level.hardcoremode ) - setdvar( "scr_showperksonspawn", "0" ); - - if ( getdvarint( "scr_showperksonspawn" ) == 1 && game["state"] != "postgame" ) - { - pixbeginevent( "showperksonspawn" ); - - if ( level.perksenabled == 1 ) - self maps\mp\gametypes\_hud_util::showperks(); - - self thread maps\mp\gametypes\_globallogic_ui::hideloadoutaftertime( 3.0 ); - self thread maps\mp\gametypes\_globallogic_ui::hideloadoutondeath(); - pixendevent(); - } - - if ( isdefined( self.pers["momentum"] ) ) - self.momentum = self.pers["momentum"]; - - pixendevent(); - waittillframeend; - self notify( "spawned_player" ); - self logstring( "S " + self.origin[0] + " " + self.origin[1] + " " + self.origin[2] ); - setdvar( "scr_selecting_location", "" ); - - if ( self is_bot() ) - { - pixbeginevent( "bot" ); - self thread maps\mp\bots\_bot::bot_spawn(); - pixendevent(); - } - - if ( !sessionmodeiszombiesgame() ) - { - self thread maps\mp\killstreaks\_killstreaks::killstreakwaiter(); - self thread maps\mp\_vehicles::vehicledeathwaiter(); - self thread maps\mp\_vehicles::turretdeathwaiter(); - } - -/# - if ( getdvarint( _hash_F8D00F60 ) > 0 ) - self thread maps\mp\gametypes\_globallogic_score::xpratethread(); -#/ - - if ( game["state"] == "postgame" ) - { -/# - assert( !level.intermission ); -#/ - self maps\mp\gametypes\_globallogic_player::freezeplayerforroundend(); - } -} - -spawnspectator( origin, angles ) -{ - self notify( "spawned" ); - self notify( "end_respawn" ); - in_spawnspectator( origin, angles ); -} - -respawn_asspectator( origin, angles ) -{ - in_spawnspectator( origin, angles ); -} - -in_spawnspectator( origin, angles ) -{ - pixmarker( "BEGIN: in_spawnSpectator" ); - self setspawnvariables(); - - if ( self.pers["team"] == "spectator" ) - self clearlowermessage(); - - self.sessionstate = "spectator"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - - if ( self.pers["team"] == "spectator" ) - self.statusicon = ""; - else - self.statusicon = "hud_status_dead"; - - maps\mp\gametypes\_spectating::setspectatepermissionsformachine(); - [[ level.onspawnspectator ]]( origin, angles ); - - if ( level.teambased && !level.splitscreen ) - self thread spectatorthirdpersonness(); - - level thread maps\mp\gametypes\_globallogic::updateteamstatus(); - pixmarker( "END: in_spawnSpectator" ); -} - -spectatorthirdpersonness() -{ - self endon( "disconnect" ); - self endon( "spawned" ); - self notify( "spectator_thirdperson_thread" ); - self endon( "spectator_thirdperson_thread" ); - self.spectatingthirdperson = 0; -} - -forcespawn( time ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "spawned" ); - - if ( !isdefined( time ) ) - time = 60; - - wait( time ); - - if ( self.hasspawned ) - return; - - if ( self.pers["team"] == "spectator" ) - return; - - if ( !maps\mp\gametypes\_globallogic_utils::isvalidclass( self.pers["class"] ) ) - { - self.pers["class"] = "CLASS_CUSTOM1"; - self.class = self.pers["class"]; - } - - self maps\mp\gametypes\_globallogic_ui::closemenus(); - self thread [[ level.spawnclient ]](); -} - -kickifdontspawn() -{ -/# - if ( getdvarint( "scr_hostmigrationtest" ) == 1 ) - return; -#/ - - if ( self ishost() ) - return; - - self kickifidontspawninternal(); -} - -kickifidontspawninternal() -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "spawned" ); - waittime = 90; - - if ( getdvar( _hash_4257CF5C ) != "" ) - waittime = getdvarfloat( _hash_4257CF5C ); - - mintime = 45; - - if ( getdvar( _hash_DF057E0 ) != "" ) - mintime = getdvarfloat( _hash_DF057E0 ); - - starttime = gettime(); - kickwait( waittime ); - timepassed = ( gettime() - starttime ) / 1000; - - if ( timepassed < waittime - 0.1 && timepassed < mintime ) - return; - - if ( self.hasspawned ) - return; - - if ( sessionmodeisprivate() ) - return; - - if ( self.pers["team"] == "spectator" ) - return; - - if ( !mayspawn() ) - return; - - maps\mp\gametypes\_globallogic::gamehistoryplayerkicked(); - kick( self getentitynumber() ); -} - -kickwait( waittime ) -{ - level endon( "game_ended" ); - maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( waittime ); -} - -spawninterroundintermission() -{ - self notify( "spawned" ); - self notify( "end_respawn" ); - self setspawnvariables(); - self clearlowermessage(); - self freeze_player_controls( 0 ); - self.sessionstate = "spectator"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - self maps\mp\gametypes\_globallogic_defaults::default_onspawnintermission(); - self setorigin( self.origin ); - self setplayerangles( self.angles ); - self setdepthoffield( 0, 128, 512, 4000, 6, 1.8 ); -} - -spawnintermission( usedefaultcallback ) -{ - self notify( "spawned" ); - self notify( "end_respawn" ); - self endon( "disconnect" ); - self setspawnvariables(); - self clearlowermessage(); - self freeze_player_controls( 0 ); - self.sessionstate = "intermission"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - - if ( isdefined( usedefaultcallback ) && usedefaultcallback ) - maps\mp\gametypes\_globallogic_defaults::default_onspawnintermission(); - else - [[ level.onspawnintermission ]](); - - self setdepthoffield( 0, 128, 512, 4000, 6, 1.8 ); -} - -spawnqueuedclientonteam( team ) -{ - player_to_spawn = undefined; - - for ( i = 0; i < level.deadplayers[team].size; i++ ) - { - player = level.deadplayers[team][i]; - - if ( player.waitingtospawn ) - continue; - - player_to_spawn = player; - break; - } - - if ( isdefined( player_to_spawn ) ) - { - player_to_spawn.allowqueuespawn = 1; - player_to_spawn maps\mp\gametypes\_globallogic_ui::closemenus(); - player_to_spawn thread [[ level.spawnclient ]](); - } -} - -spawnqueuedclient( dead_player_team, killer ) -{ - if ( !level.playerqueuedrespawn ) - return; - - maps\mp\gametypes\_globallogic_utils::waittillslowprocessallowed(); - spawn_team = undefined; - - if ( isdefined( killer ) && isdefined( killer.team ) && isdefined( level.teams[killer.team] ) ) - spawn_team = killer.team; - - if ( isdefined( spawn_team ) ) - { - spawnqueuedclientonteam( spawn_team ); - return; - } - - foreach ( team in level.teams ) - { - if ( team == dead_player_team ) - continue; - - spawnqueuedclientonteam( team ); - } -} - -allteamsnearscorelimit() -{ - if ( !level.teambased ) - return false; - - if ( level.scorelimit <= 1 ) - return false; - - foreach ( team in level.teams ) - { - if ( !( game["teamScores"][team] >= level.scorelimit - 1 ) ) - return false; - } - - return true; -} - -shouldshowrespawnmessage() -{ - if ( waslastround() ) - return false; - - if ( isoneround() ) - return false; - - if ( isdefined( level.livesdonotreset ) && level.livesdonotreset ) - return false; - - if ( allteamsnearscorelimit() ) - return false; - - return true; -} - -default_spawnmessage() -{ - setlowermessage( game["strings"]["spawn_next_round"] ); - self thread maps\mp\gametypes\_globallogic_ui::removespawnmessageshortly( 3 ); -} - -showspawnmessage() -{ - if ( shouldshowrespawnmessage() ) - self thread [[ level.spawnmessage ]](); -} - -spawnclient( timealreadypassed ) -{ - pixbeginevent( "spawnClient" ); -/# - assert( isdefined( self.team ) ); -#/ -/# - assert( maps\mp\gametypes\_globallogic_utils::isvalidclass( self.class ) ); -#/ - - if ( !self mayspawn() ) - { - currentorigin = self.origin; - currentangles = self.angles; - self showspawnmessage(); - self thread [[ level.spawnspectator ]]( currentorigin + vectorscale( ( 0, 0, 1 ), 60.0 ), currentangles ); - pixendevent(); - return; - } - - if ( self.waitingtospawn ) - { - pixendevent(); - return; - } - - self.waitingtospawn = 1; - self.allowqueuespawn = undefined; - self waitandspawnclient( timealreadypassed ); - - if ( isdefined( self ) ) - self.waitingtospawn = 0; - - pixendevent(); -} - -waitandspawnclient( timealreadypassed ) -{ - self endon( "disconnect" ); - self endon( "end_respawn" ); - level endon( "game_ended" ); - - if ( !isdefined( timealreadypassed ) ) - timealreadypassed = 0; - - spawnedasspectator = 0; - - if ( is_true( self.teamkillpunish ) ) - { - teamkilldelay = maps\mp\gametypes\_globallogic_player::teamkilldelay(); - - if ( teamkilldelay > timealreadypassed ) - { - teamkilldelay -= timealreadypassed; - timealreadypassed = 0; - } - else - { - timealreadypassed -= teamkilldelay; - teamkilldelay = 0; - } - - if ( teamkilldelay > 0 ) - { - setlowermessage( &"MP_FRIENDLY_FIRE_WILL_NOT", teamkilldelay ); - self thread respawn_asspectator( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), self.angles ); - spawnedasspectator = 1; - wait( teamkilldelay ); - } - - self.teamkillpunish = 0; - } - - if ( !isdefined( self.wavespawnindex ) && isdefined( level.waveplayerspawnindex[self.team] ) ) - { - self.wavespawnindex = level.waveplayerspawnindex[self.team]; - level.waveplayerspawnindex[self.team]++; - } - - timeuntilspawn = timeuntilspawn( 0 ); - - if ( timeuntilspawn > timealreadypassed ) - { - timeuntilspawn -= timealreadypassed; - timealreadypassed = 0; - } - else - { - timealreadypassed -= timeuntilspawn; - timeuntilspawn = 0; - } - - if ( timeuntilspawn > 0 ) - { - if ( level.playerqueuedrespawn ) - setlowermessage( game["strings"]["you_will_spawn"], timeuntilspawn ); - else if ( self issplitscreen() ) - setlowermessage( game["strings"]["waiting_to_spawn_ss"], timeuntilspawn, 1 ); - else - setlowermessage( game["strings"]["waiting_to_spawn"], timeuntilspawn ); - - if ( !spawnedasspectator ) - { - spawnorigin = self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ); - spawnangles = self.angles; - - if ( isdefined( level.useintermissionpointsonwavespawn ) && [[ level.useintermissionpointsonwavespawn ]]() == 1 ) - { - spawnpoint = maps\mp\gametypes\_spawnlogic::getrandomintermissionpoint(); - - if ( isdefined( spawnpoint ) ) - { - spawnorigin = spawnpoint.origin; - spawnangles = spawnpoint.angles; - } - } - - self thread respawn_asspectator( spawnorigin, spawnangles ); - } - - spawnedasspectator = 1; - self maps\mp\gametypes\_globallogic_utils::waitfortimeornotify( timeuntilspawn, "force_spawn" ); - self notify( "stop_wait_safe_spawn_button" ); - } - - if ( isdefined( level.gametypespawnwaiter ) ) - { - if ( !spawnedasspectator ) - self thread respawn_asspectator( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), self.angles ); - - spawnedasspectator = 1; - - if ( !self [[ level.gametypespawnwaiter ]]() ) - { - self.waitingtospawn = 0; - self clearlowermessage(); - self.wavespawnindex = undefined; - self.respawntimerstarttime = undefined; - return; - } - } - - wavebased = level.waverespawndelay > 0; - - if ( !level.playerforcerespawn && self.hasspawned && !wavebased && !self.wantsafespawn && !level.playerqueuedrespawn ) - { - setlowermessage( game["strings"]["press_to_spawn"] ); - - if ( !spawnedasspectator ) - self thread respawn_asspectator( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), self.angles ); - - spawnedasspectator = 1; - self waitrespawnorsafespawnbutton(); - } - - self.waitingtospawn = 0; - self clearlowermessage(); - self.wavespawnindex = undefined; - self.respawntimerstarttime = undefined; - self thread [[ level.spawnplayer ]](); -} - -waitrespawnorsafespawnbutton() -{ - self endon( "disconnect" ); - self endon( "end_respawn" ); - - while ( true ) - { - if ( self usebuttonpressed() ) - break; - - wait 0.05; - } -} - -waitinspawnqueue() -{ - self endon( "disconnect" ); - self endon( "end_respawn" ); - - if ( !level.ingraceperiod && !level.usestartspawns ) - { - currentorigin = self.origin; - currentangles = self.angles; - self thread [[ level.spawnspectator ]]( currentorigin + vectorscale( ( 0, 0, 1 ), 60.0 ), currentangles ); - - self waittill( "queue_respawn" ); - } -} - -setthirdperson( value ) -{ - if ( !level.console ) - return; - - if ( !isdefined( self.spectatingthirdperson ) || value != self.spectatingthirdperson ) - { - self.spectatingthirdperson = value; - - if ( value ) - { - self setclientthirdperson( 1 ); - self setdepthoffield( 0, 128, 512, 4000, 6, 1.8 ); - } - else - { - self setclientthirdperson( 0 ); - self setdepthoffield( 0, 0, 512, 4000, 4, 0 ); - } - - self resetfov(); - } -} - -setspawnvariables() -{ - resettimeout(); - self stopshellshock(); - self stoprumble( "damage_heavy" ); -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_ui.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_ui.gsc deleted file mode 100644 index 6881a21..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_ui.gsc +++ /dev/null @@ -1,629 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -init() -{ - precachestring( &"MP_HALFTIME" ); - precachestring( &"MP_OVERTIME" ); - precachestring( &"MP_ROUNDEND" ); - precachestring( &"MP_INTERMISSION" ); - precachestring( &"MP_SWITCHING_SIDES_CAPS" ); - precachestring( &"MP_FRIENDLY_FIRE_WILL_NOT" ); - precachestring( &"MP_RAMPAGE" ); - precachestring( &"medal_received" ); - precachestring( &"killstreak_received" ); - precachestring( &"prox_grenade_notify" ); - precachestring( &"player_callout" ); - precachestring( &"score_event" ); - precachestring( &"rank_up" ); - precachestring( &"gun_level_complete" ); - precachestring( &"challenge_complete" ); - - if ( level.splitscreen ) - precachestring( &"MP_ENDED_GAME" ); - else - precachestring( &"MP_HOST_ENDED_GAME" ); -} - -setupcallbacks() -{ - level.autoassign = ::menuautoassign; - level.spectator = ::menuspectator; - level.class = ::menuclass; - level.teammenu = ::menuteam; -} - -hideloadoutaftertime( delay ) -{ - self endon( "disconnect" ); - self endon( "perks_hidden" ); - wait( delay ); - self thread hideallperks( 0.4 ); - self notify( "perks_hidden" ); -} - -hideloadoutondeath() -{ - self endon( "disconnect" ); - self endon( "perks_hidden" ); - - self waittill( "death" ); - - self hideallperks(); - self notify( "perks_hidden" ); -} - -hideloadoutonkill() -{ - self endon( "disconnect" ); - self endon( "death" ); - self endon( "perks_hidden" ); - - self waittill( "killed_player" ); - - self hideallperks(); - self notify( "perks_hidden" ); -} - -freegameplayhudelems() -{ - if ( isdefined( self.perkicon ) ) - { - for ( numspecialties = 0; numspecialties < level.maxspecialties; numspecialties++ ) - { - if ( isdefined( self.perkicon[numspecialties] ) ) - { - self.perkicon[numspecialties] destroyelem(); - self.perkname[numspecialties] destroyelem(); - } - } - } - - if ( isdefined( self.perkhudelem ) ) - self.perkhudelem destroyelem(); - - if ( isdefined( self.killstreakicon ) ) - { - if ( isdefined( self.killstreakicon[0] ) ) - self.killstreakicon[0] destroyelem(); - - if ( isdefined( self.killstreakicon[1] ) ) - self.killstreakicon[1] destroyelem(); - - if ( isdefined( self.killstreakicon[2] ) ) - self.killstreakicon[2] destroyelem(); - - if ( isdefined( self.killstreakicon[3] ) ) - self.killstreakicon[3] destroyelem(); - - if ( isdefined( self.killstreakicon[4] ) ) - self.killstreakicon[4] destroyelem(); - } - - self notify( "perks_hidden" ); - - if ( isdefined( self.lowermessage ) ) - self.lowermessage destroyelem(); - - if ( isdefined( self.lowertimer ) ) - self.lowertimer destroyelem(); - - if ( isdefined( self.proxbar ) ) - self.proxbar destroyelem(); - - if ( isdefined( self.proxbartext ) ) - self.proxbartext destroyelem(); - - if ( isdefined( self.carryicon ) ) - self.carryicon destroyelem(); - - maps\mp\killstreaks\_killstreaks::destroykillstreaktimers(); -} - -teamplayercountsequal( playercounts ) -{ - count = undefined; - - foreach ( team in level.teams ) - { - if ( !isdefined( count ) ) - { - count = playercounts[team]; - continue; - } - - if ( count != playercounts[team] ) - return false; - } - - return true; -} - -teamwithlowestplayercount( playercounts, ignore_team ) -{ - count = 9999; - lowest_team = undefined; - - foreach ( team in level.teams ) - { - if ( count > playercounts[team] ) - { - count = playercounts[team]; - lowest_team = team; - } - } - - return lowest_team; -} - -menuautoassign( comingfrommenu ) -{ - teamkeys = getarraykeys( level.teams ); - assignment = teamkeys[randomint( teamkeys.size )]; - self closemenus(); - - if ( isdefined( level.forceallallies ) && level.forceallallies ) - assignment = "allies"; - else if ( level.teambased ) - { - if ( getdvarint( "party_autoteams" ) == 1 ) - { - if ( level.allow_teamchange == "1" && ( self.hasspawned || comingfrommenu ) ) - assignment = ""; - else - { - team = getassignedteam( self ); - - switch ( team ) - { - case 1: - assignment = teamkeys[1]; - break; - case 2: - assignment = teamkeys[0]; - break; - case 3: - assignment = teamkeys[2]; - break; - case 4: - if ( !isdefined( level.forceautoassign ) || !level.forceautoassign ) - { - self setclientscriptmainmenu( game["menu_class"] ); - return; - } - default: - assignment = ""; - - if ( isdefined( level.teams[team] ) ) - assignment = team; - else if ( team == "spectator" && !level.forceautoassign ) - { - self setclientscriptmainmenu( game["menu_class"] ); - return; - } - } - } - } - - if ( assignment == "" || getdvarint( "party_autoteams" ) == 0 ) - { - if ( sessionmodeiszombiesgame() ) - assignment = "allies"; - else if ( maps\mp\bots\_bot::is_bot_comp_stomp() ) - { - host = gethostplayerforbots(); -/# - assert( isdefined( host ) ); -#/ - - if ( !isdefined( host.team ) || host.team == "spectator" ) - host.team = random( teamkeys ); - - if ( !self is_bot() ) - assignment = host.team; - else - assignment = getotherteam( host.team ); - } - else - { - playercounts = self maps\mp\teams\_teams::countplayers(); - - if ( teamplayercountsequal( playercounts ) ) - { - if ( !level.splitscreen && self issplitscreen() ) - { - assignment = self getsplitscreenteam(); - - if ( assignment == "" ) - assignment = pickteamfromscores( teamkeys ); - } - else - assignment = pickteamfromscores( teamkeys ); - } - else - assignment = teamwithlowestplayercount( playercounts, "none" ); - } - } - - if ( assignment == self.pers["team"] && ( self.sessionstate == "playing" || self.sessionstate == "dead" ) ) - { - self beginclasschoice(); - return; - } - } - else if ( getdvarint( "party_autoteams" ) == 1 ) - { - if ( level.allow_teamchange != "1" || !self.hasspawned && !comingfrommenu ) - { - team = getassignedteam( self ); - - if ( isdefined( level.teams[team] ) ) - assignment = team; - else if ( team == "spectator" && !level.forceautoassign ) - { - self setclientscriptmainmenu( game["menu_class"] ); - return; - } - } - } - - if ( assignment != self.pers["team"] && ( self.sessionstate == "playing" || self.sessionstate == "dead" ) ) - { - self.switching_teams = 1; - self.joining_team = assignment; - self.leaving_team = self.pers["team"]; - self suicide(); - } - - self.pers["team"] = assignment; - self.team = assignment; - self.pers["class"] = undefined; - self.class = undefined; - self.pers["weapon"] = undefined; - self.pers["savedmodel"] = undefined; - self updateobjectivetext(); - - if ( level.teambased ) - self.sessionteam = assignment; - else - { - self.sessionteam = "none"; - self.ffateam = assignment; - } - - if ( !isalive( self ) ) - self.statusicon = "hud_status_dead"; - - self notify( "joined_team" ); - level notify( "joined_team" ); - self notify( "end_respawn" ); - - if ( ispregame() ) - { - if ( !self is_bot() ) - { - pclass = self maps\mp\gametypes\_pregame::get_pregame_class(); - self closemenu(); - self closeingamemenu(); - self.selectedclass = 1; - self [[ level.class ]]( pclass ); - self setclientscriptmainmenu( game["menu_class"] ); - return; - } - } - - if ( ispregamegamestarted() ) - { - if ( self is_bot() && isdefined( self.pers["class"] ) ) - { - pclass = self.pers["class"]; - self closemenu(); - self closeingamemenu(); - self.selectedclass = 1; - self [[ level.class ]]( pclass ); - return; - } - } - - self beginclasschoice(); - self setclientscriptmainmenu( game["menu_class"] ); -} - -teamscoresequal() -{ - score = undefined; - - foreach ( team in level.teams ) - { - if ( !isdefined( score ) ) - { - score = getteamscore( team ); - continue; - } - - if ( score != getteamscore( team ) ) - return false; - } - - return true; -} - -teamwithlowestscore() -{ - score = 99999999; - lowest_team = undefined; - - foreach ( team in level.teams ) - { - if ( score > getteamscore( team ) ) - lowest_team = team; - } - - return lowest_team; -} - -pickteamfromscores( teams ) -{ - assignment = "allies"; - - if ( teamscoresequal() ) - assignment = teams[randomint( teams.size )]; - else - assignment = teamwithlowestscore(); - - return assignment; -} - -getsplitscreenteam() -{ - for ( index = 0; index < level.players.size; index++ ) - { - if ( !isdefined( level.players[index] ) ) - continue; - - if ( level.players[index] == self ) - continue; - - if ( !self isplayeronsamemachine( level.players[index] ) ) - continue; - - team = level.players[index].sessionteam; - - if ( team != "spectator" ) - return team; - } - - return ""; -} - -updateobjectivetext() -{ - if ( sessionmodeiszombiesgame() || self.pers["team"] == "spectator" ) - { - self setclientcgobjectivetext( "" ); - return; - } - - if ( level.scorelimit > 0 ) - self setclientcgobjectivetext( getobjectivescoretext( self.pers["team"] ) ); - else - self setclientcgobjectivetext( getobjectivetext( self.pers["team"] ) ); -} - -closemenus() -{ - self closemenu(); - self closeingamemenu(); -} - -beginclasschoice( forcenewchoice ) -{ -/# - assert( isdefined( level.teams[self.pers["team"]] ) ); -#/ - team = self.pers["team"]; - - if ( level.disableclassselection == 1 || getdvarint( "migration_soak" ) == 1 ) - { - self.pers["class"] = level.defaultclass; - self.class = level.defaultclass; - - if ( self.sessionstate != "playing" && game["state"] == "playing" ) - self thread [[ level.spawnclient ]](); - - level thread maps\mp\gametypes\_globallogic::updateteamstatus(); - self thread maps\mp\gametypes\_spectating::setspectatepermissionsformachine(); - return; - } - - if ( level.wagermatch ) - self openmenu( game["menu_changeclass_wager"] ); - else if ( getdvarint( "barebones_class_mode" ) ) - self openmenu( game["menu_changeclass_barebones"] ); - else - self openmenu( game["menu_changeclass_" + team] ); -} - -showmainmenuforteam() -{ -/# - assert( isdefined( level.teams[self.pers["team"]] ) ); -#/ - team = self.pers["team"]; - - if ( level.wagermatch ) - self openmenu( game["menu_changeclass_wager"] ); - else - self openmenu( game["menu_changeclass_" + team] ); -} - -menuteam( team ) -{ - self closemenus(); - - if ( !level.console && level.allow_teamchange == "0" && ( isdefined( self.hasdonecombat ) && self.hasdonecombat ) ) - return; - - if ( self.pers["team"] != team ) - { - if ( level.ingraceperiod && ( !isdefined( self.hasdonecombat ) || !self.hasdonecombat ) ) - self.hasspawned = 0; - - if ( self.sessionstate == "playing" ) - { - self.switching_teams = 1; - self.joining_team = team; - self.leaving_team = self.pers["team"]; - self suicide(); - } - - self.pers["team"] = team; - self.team = team; - self.pers["class"] = undefined; - self.class = undefined; - self.pers["weapon"] = undefined; - self.pers["savedmodel"] = undefined; - self updateobjectivetext(); - - if ( !level.rankedmatch && !level.leaguematch ) - self.sessionstate = "spectator"; - - if ( level.teambased ) - self.sessionteam = team; - else - { - self.sessionteam = "none"; - self.ffateam = team; - } - - self setclientscriptmainmenu( game["menu_class"] ); - self notify( "joined_team" ); - level notify( "joined_team" ); - self notify( "end_respawn" ); - } - - self beginclasschoice(); -} - -menuspectator() -{ - self closemenus(); - - if ( self.pers["team"] != "spectator" ) - { - if ( isalive( self ) ) - { - self.switching_teams = 1; - self.joining_team = "spectator"; - self.leaving_team = self.pers["team"]; - self suicide(); - } - - self.pers["team"] = "spectator"; - self.team = "spectator"; - self.pers["class"] = undefined; - self.class = undefined; - self.pers["weapon"] = undefined; - self.pers["savedmodel"] = undefined; - self updateobjectivetext(); - self.sessionteam = "spectator"; - - if ( !level.teambased ) - self.ffateam = "spectator"; - - [[ level.spawnspectator ]](); - self thread maps\mp\gametypes\_globallogic_player::spectate_player_watcher(); - self setclientscriptmainmenu( game["menu_class"] ); - self notify( "joined_spectators" ); - } -} - -menuclass( response ) -{ - self closemenus(); - - if ( !isdefined( self.pers["team"] ) || !isdefined( level.teams[self.pers["team"]] ) ) - return; - - class = self maps\mp\gametypes\_class::getclasschoice( response ); - - if ( isdefined( self.pers["class"] ) && self.pers["class"] == class ) - return; - - self.pers["changed_class"] = 1; - self notify( "changed_class" ); - - if ( isdefined( self.curclass ) && self.curclass == class ) - self.pers["changed_class"] = 0; - - if ( ispregame() ) - self maps\mp\gametypes\_pregame::onplayerclasschange( response ); - - if ( self.sessionstate == "playing" ) - { - self.pers["class"] = class; - self.class = class; - self.pers["weapon"] = undefined; - - if ( game["state"] == "postgame" ) - return; - - supplystationclasschange = isdefined( self.usingsupplystation ) && self.usingsupplystation; - self.usingsupplystation = 0; - - if ( level.ingraceperiod && !self.hasdonecombat || supplystationclasschange ) - { - self maps\mp\gametypes\_class::setclass( self.pers["class"] ); - self.tag_stowed_back = undefined; - self.tag_stowed_hip = undefined; - self maps\mp\gametypes\_class::giveloadout( self.pers["team"], self.pers["class"] ); - self maps\mp\killstreaks\_killstreaks::giveownedkillstreak(); - } - else if ( !self issplitscreen() ) - self iprintlnbold( game["strings"]["change_class"] ); - } - else - { - self.pers["class"] = class; - self.class = class; - self.pers["weapon"] = undefined; - - if ( game["state"] == "postgame" ) - return; - - if ( self.sessionstate != "spectator" ) - { - if ( self isinvehicle() ) - return; - - if ( self isremotecontrolling() ) - return; - - if ( self isweaponviewonlylinked() ) - return 0; - } - - if ( game["state"] == "playing" ) - { - timepassed = undefined; - - if ( isdefined( self.respawntimerstarttime ) ) - timepassed = ( gettime() - self.respawntimerstarttime ) / 1000; - - self thread [[ level.spawnclient ]]( timepassed ); - self.respawntimerstarttime = undefined; - } - } - - level thread maps\mp\gametypes\_globallogic::updateteamstatus(); - self thread maps\mp\gametypes\_spectating::setspectatepermissionsformachine(); -} - -removespawnmessageshortly( delay ) -{ - self endon( "disconnect" ); - waittillframeend; - self endon( "end_respawn" ); - wait( delay ); - self clearlowermessage( 2.0 ); -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_utils.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_utils.gsc deleted file mode 100644 index cfc4743..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_utils.gsc +++ /dev/null @@ -1,471 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -waittillslowprocessallowed() -{ - while ( level.lastslowprocessframe == gettime() ) - wait 0.05; - - level.lastslowprocessframe = gettime(); -} - -testmenu() -{ - self endon( "death" ); - self endon( "disconnect" ); - - for (;;) - { - wait 10.0; - notifydata = spawnstruct(); - notifydata.titletext = &"MP_CHALLENGE_COMPLETED"; - notifydata.notifytext = "wheee"; - notifydata.sound = "mp_challenge_complete"; - self thread maps\mp\gametypes\_hud_message::notifymessage( notifydata ); - } -} - -testshock() -{ - self endon( "death" ); - self endon( "disconnect" ); - - for (;;) - { - wait 3.0; - numshots = randomint( 6 ); - - for ( i = 0; i < numshots; i++ ) - { - iprintlnbold( numshots ); - self shellshock( "frag_grenade_mp", 0.2 ); - wait 0.1; - } - } -} - -testhps() -{ - self endon( "death" ); - self endon( "disconnect" ); - hps = []; - hps[hps.size] = "radar_mp"; - hps[hps.size] = "artillery_mp"; - hps[hps.size] = "dogs_mp"; - - for (;;) - { - hp = "radar_mp"; - - if ( self thread maps\mp\killstreaks\_killstreaks::givekillstreak( hp ) ) - self playlocalsound( level.killstreaks[hp].informdialog ); - - wait 20.0; - } -} - -timeuntilroundend() -{ - if ( level.gameended ) - { - timepassed = ( gettime() - level.gameendtime ) / 1000; - timeremaining = level.postroundtime - timepassed; - - if ( timeremaining < 0 ) - return 0; - - return timeremaining; - } - - if ( level.inovertime ) - return undefined; - - if ( level.timelimit <= 0 ) - return undefined; - - if ( !isdefined( level.starttime ) ) - return undefined; - - timepassed = ( gettimepassed() - level.starttime ) / 1000; - timeremaining = level.timelimit * 60 - timepassed; - return timeremaining + level.postroundtime; -} - -gettimeremaining() -{ - return level.timelimit * 60 * 1000 - gettimepassed(); -} - -registerpostroundevent( eventfunc ) -{ - if ( !isdefined( level.postroundevents ) ) - level.postroundevents = []; - - level.postroundevents[level.postroundevents.size] = eventfunc; -} - -executepostroundevents() -{ - if ( !isdefined( level.postroundevents ) ) - return; - - for ( i = 0; i < level.postroundevents.size; i++ ) - [[ level.postroundevents[i] ]](); -} - -getvalueinrange( value, minvalue, maxvalue ) -{ - if ( value > maxvalue ) - return maxvalue; - else if ( value < minvalue ) - return minvalue; - else - return value; -} - -assertproperplacement() -{ -/# - numplayers = level.placement["all"].size; - - if ( level.teambased ) - { - for ( i = 0; i < numplayers - 1; i++ ) - { - if ( level.placement["all"][i].score < level.placement["all"][i + 1].score ) - { - println( "^1Placement array:" ); - - for ( i = 0; i < numplayers; i++ ) - { - player = level.placement["all"][i]; - println( "^1" + i + ". " + player.name + ": " + player.score ); - } - -/# - assertmsg( "Placement array was not properly sorted" ); -#/ - break; - } - } - } - else - { - for ( i = 0; i < numplayers - 1; i++ ) - { - if ( level.placement["all"][i].pointstowin < level.placement["all"][i + 1].pointstowin ) - { - println( "^1Placement array:" ); - - for ( i = 0; i < numplayers; i++ ) - { - player = level.placement["all"][i]; - println( "^1" + i + ". " + player.name + ": " + player.pointstowin ); - } - -/# - assertmsg( "Placement array was not properly sorted" ); -#/ - break; - } - } - } -#/ -} - -isvalidclass( class ) -{ - if ( level.oldschool || sessionmodeiszombiesgame() ) - { -/# - assert( !isdefined( class ) ); -#/ - return 1; - } - - return isdefined( class ) && class != ""; -} - -playtickingsound( gametype_tick_sound ) -{ - self endon( "death" ); - self endon( "stop_ticking" ); - level endon( "game_ended" ); - time = level.bombtimer; - - while ( true ) - { - self playsound( gametype_tick_sound ); - - if ( time > 10 ) - { - time -= 1; - wait 1; - } - else if ( time > 4 ) - { - time -= 0.5; - wait 0.5; - } - else if ( time > 1 ) - { - time -= 0.4; - wait 0.4; - } - else - { - time -= 0.3; - wait 0.3; - } - - maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); - } -} - -stoptickingsound() -{ - self notify( "stop_ticking" ); -} - -gametimer() -{ - level endon( "game_ended" ); - - level waittill( "prematch_over" ); - - level.starttime = gettime(); - level.discardtime = 0; - - if ( isdefined( game["roundMillisecondsAlreadyPassed"] ) ) - { - level.starttime -= game["roundMillisecondsAlreadyPassed"]; - game["roundMillisecondsAlreadyPassed"] = undefined; - } - - prevtime = gettime(); - - while ( game["state"] == "playing" ) - { - if ( !level.timerstopped ) - game["timepassed"] += gettime() - prevtime; - - prevtime = gettime(); - wait 1.0; - } -} - -gettimepassed() -{ - if ( !isdefined( level.starttime ) ) - return 0; - - if ( level.timerstopped ) - return level.timerpausetime - level.starttime - level.discardtime; - else - return gettime() - level.starttime - level.discardtime; -} - -pausetimer() -{ - if ( level.timerstopped ) - return; - - level.timerstopped = 1; - level.timerpausetime = gettime(); -} - -resumetimer() -{ - if ( !level.timerstopped ) - return; - - level.timerstopped = 0; - level.discardtime += gettime() - level.timerpausetime; -} - -getscoreremaining( team ) -{ -/# - assert( isplayer( self ) || isdefined( team ) ); -#/ - scorelimit = level.scorelimit; - - if ( isplayer( self ) ) - return scorelimit - maps\mp\gametypes\_globallogic_score::_getplayerscore( self ); - else - return scorelimit - getteamscore( team ); -} - -getteamscoreforround( team ) -{ - if ( level.roundscorecarry && isdefined( game["lastroundscore"][team] ) ) - return getteamscore( team ) - game["lastroundscore"][team]; - - return getteamscore( team ); -} - -getscoreperminute( team ) -{ -/# - assert( isplayer( self ) || isdefined( team ) ); -#/ - scorelimit = level.scorelimit; - timelimit = level.timelimit; - minutespassed = gettimepassed() / 60000 + 0.0001; - - if ( isplayer( self ) ) - return maps\mp\gametypes\_globallogic_score::_getplayerscore( self ) / minutespassed; - else - return getteamscoreforround( team ) / minutespassed; -} - -getestimatedtimeuntilscorelimit( team ) -{ -/# - assert( isplayer( self ) || isdefined( team ) ); -#/ - scoreperminute = self getscoreperminute( team ); - scoreremaining = self getscoreremaining( team ); - - if ( !scoreperminute ) - return 999999; - - return scoreremaining / scoreperminute; -} - -rumbler() -{ - self endon( "disconnect" ); - - while ( true ) - { - wait 0.1; - self playrumbleonentity( "damage_heavy" ); - } -} - -waitfortimeornotify( time, notifyname ) -{ - self endon( notifyname ); - wait( time ); -} - -waitfortimeornotifynoartillery( time, notifyname ) -{ - self endon( notifyname ); - wait( time ); - - while ( isdefined( level.artilleryinprogress ) ) - { -/# - assert( level.artilleryinprogress ); -#/ - wait 0.25; - } -} - -isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) -{ - if ( shitloc != "head" && shitloc != "helmet" ) - return false; - - switch ( smeansofdeath ) - { - case "MOD_MELEE": - case "MOD_BAYONET": - return false; - case "MOD_IMPACT": - if ( sweapon != "knife_ballistic_mp" ) - return false; - } - - if ( maps\mp\killstreaks\_killstreaks::iskillstreakweapon( sweapon ) ) - { - if ( !isdefined( einflictor ) || !isdefined( einflictor.controlled ) || einflictor.controlled == 0 ) - return false; - } - - return true; -} - -gethitlocheight( shitloc ) -{ - switch ( shitloc ) - { - case "neck": - case "helmet": - case "head": - return 60; - case "torso_upper": - case "right_hand": - case "right_arm_upper": - case "right_arm_lower": - case "left_hand": - case "left_arm_upper": - case "left_arm_lower": - case "gun": - return 48; - case "torso_lower": - return 40; - case "right_leg_upper": - case "left_leg_upper": - return 32; - case "right_leg_lower": - case "left_leg_lower": - return 10; - case "right_foot": - case "left_foot": - return 5; - } - - return 48; -} - -debugline( start, end ) -{ -/# - for ( i = 0; i < 50; i++ ) - { - line( start, end ); - wait 0.05; - } -#/ -} - -isexcluded( entity, entitylist ) -{ - for ( index = 0; index < entitylist.size; index++ ) - { - if ( entity == entitylist[index] ) - return true; - } - - return false; -} - -waitfortimeornotifies( desireddelay ) -{ - startedwaiting = gettime(); - waitedtime = ( gettime() - startedwaiting ) / 1000; - - if ( waitedtime < desireddelay ) - { - wait( desireddelay - waitedtime ); - return desireddelay; - } - else - return waitedtime; -} - -logteamwinstring( wintype, winner ) -{ - log_string = wintype; - - if ( isdefined( winner ) ) - log_string = log_string + ", win: " + winner; - - foreach ( team in level.teams ) - log_string = log_string + ", " + team + ": " + game["teamScores"][team]; - - logstring( log_string ); -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_vehicle.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_vehicle.gsc deleted file mode 100644 index 9ebcf13..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_globallogic_vehicle.gsc +++ /dev/null @@ -1,364 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname ) -{ - if ( !( level.idflags_radius & idflags ) ) - idamage = maps\mp\gametypes\_class::cac_modified_vehicle_damage( self, eattacker, idamage, smeansofdeath, sweapon, einflictor ); - - self.idflags = idflags; - self.idflagstime = gettime(); - - if ( game["state"] == "postgame" ) - return; - - if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat ) - return; - - if ( !isdefined( vdir ) ) - idflags |= level.idflags_no_knockback; - - friendly = 0; - - if ( isdefined( self.maxhealth ) && self.health == self.maxhealth || !isdefined( self.attackers ) ) - { - self.attackers = []; - self.attackerdata = []; - self.attackerdamage = []; - } - - if ( sweapon == "none" && isdefined( einflictor ) ) - { - if ( isdefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) - sweapon = "explodable_barrel_mp"; - else if ( isdefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) - sweapon = "destructible_car_mp"; - } - - if ( !( idflags & level.idflags_no_protection ) ) - { - if ( self isvehicleimmunetodamage( idflags, smeansofdeath, sweapon ) ) - return; - - if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) - { - - } - else if ( smeansofdeath == "MOD_PROJECTILE" || smeansofdeath == "MOD_GRENADE" ) - { - idamage *= getvehicleprojectilescalar( sweapon ); - idamage = int( idamage ); - - if ( idamage == 0 ) - return; - } - else if ( smeansofdeath == "MOD_GRENADE_SPLASH" ) - { - idamage *= getvehicleunderneathsplashscalar( sweapon ); - idamage = int( idamage ); - - if ( idamage == 0 ) - return; - } - - idamage *= level.vehicledamagescalar; - idamage = int( idamage ); - - if ( isplayer( eattacker ) ) - eattacker.pers["participation"]++; - - prevhealthratio = self.health / self.maxhealth; - - if ( isdefined( self.owner ) && isplayer( self.owner ) ) - team = self.owner.pers["team"]; - else - team = self maps\mp\_vehicles::vehicle_get_occupant_team(); - - if ( level.teambased && isplayer( eattacker ) && team == eattacker.pers["team"] ) - { - if ( level.friendlyfire == 0 ) - { - if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) - return; - - if ( idamage < 1 ) - idamage = 1; - - self.lastdamagewasfromenemy = 0; - self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 1 ); - } - else if ( level.friendlyfire == 1 ) - { - if ( idamage < 1 ) - idamage = 1; - - self.lastdamagewasfromenemy = 0; - self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); - } - else if ( level.friendlyfire == 2 ) - { - if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) - return; - - if ( idamage < 1 ) - idamage = 1; - - self.lastdamagewasfromenemy = 0; - self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 1 ); - } - else if ( level.friendlyfire == 3 ) - { - idamage = int( idamage * 0.5 ); - - if ( idamage < 1 ) - idamage = 1; - - self.lastdamagewasfromenemy = 0; - self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); - } - - friendly = 1; - } - else if ( !level.hardcoremode && isdefined( self.owner ) && isdefined( eattacker.owner ) && self.owner == eattacker.owner ) - return; - else - { - if ( !level.teambased && isdefined( self.targetname ) && self.targetname == "rcbomb" ) - { - - } - else if ( isdefined( self.owner ) && isdefined( eattacker ) && self.owner == eattacker ) - return; - - if ( idamage < 1 ) - idamage = 1; - - if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( sweapon ) ) - eattacker thread maps\mp\gametypes\_weapons::checkhit( sweapon ); - - if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isdefined( einflictor.iscooked ) ) - self.wascooked = gettime(); - else - self.wascooked = undefined; - - attacker_seat = undefined; - - if ( isdefined( eattacker ) ) - attacker_seat = self getoccupantseat( eattacker ); - - self.lastdamagewasfromenemy = isdefined( eattacker ) && !isdefined( attacker_seat ); - self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); - - if ( level.gametype == "hack" && sweapon != "emp_grenade_mp" ) - idamage = 0; - } - - if ( isdefined( eattacker ) && eattacker != self ) - { - if ( maps\mp\gametypes\_globallogic_player::dodamagefeedback( sweapon, einflictor ) ) - { - if ( idamage > 0 ) - eattacker thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor ); - } - } - } - -/# - if ( getdvarint( "g_debugDamage" ) ) - println( "actor:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); -#/ - - if ( 1 ) - { - lpselfnum = self getentitynumber(); - lpselfteam = ""; - lpattackerteam = ""; - - if ( isplayer( eattacker ) ) - { - lpattacknum = eattacker getentitynumber(); - lpattackguid = eattacker getguid(); - lpattackname = eattacker.name; - lpattackerteam = eattacker.pers["team"]; - } - else - { - lpattacknum = -1; - lpattackguid = ""; - lpattackname = ""; - lpattackerteam = "world"; - } - - logprint( "VD;" + lpselfnum + ";" + lpselfteam + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\n" ); - } -} - -callback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ) -{ - idamage = maps\mp\gametypes\_class::cac_modified_vehicle_damage( self, eattacker, idamage, smeansofdeath, sweapon, einflictor ); - finnerdamage = maps\mp\gametypes\_class::cac_modified_vehicle_damage( self, eattacker, finnerdamage, smeansofdeath, sweapon, einflictor ); - fouterdamage = maps\mp\gametypes\_class::cac_modified_vehicle_damage( self, eattacker, fouterdamage, smeansofdeath, sweapon, einflictor ); - self.idflags = idflags; - self.idflagstime = gettime(); - - if ( game["state"] == "postgame" ) - return; - - if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat ) - return; - - friendly = 0; - - if ( !( idflags & level.idflags_no_protection ) ) - { - if ( self isvehicleimmunetodamage( idflags, smeansofdeath, sweapon ) ) - return; - - if ( smeansofdeath == "MOD_PROJECTILE_SPLASH" || smeansofdeath == "MOD_GRENADE_SPLASH" || smeansofdeath == "MOD_EXPLOSIVE" ) - { - scalar = getvehicleprojectilesplashscalar( sweapon ); - idamage = int( idamage * scalar ); - finnerdamage *= scalar; - fouterdamage *= scalar; - - if ( finnerdamage == 0 ) - return; - - if ( idamage < 1 ) - idamage = 1; - } - - occupant_team = self maps\mp\_vehicles::vehicle_get_occupant_team(); - - if ( level.teambased && isplayer( eattacker ) && occupant_team == eattacker.pers["team"] ) - { - if ( level.friendlyfire == 0 ) - { - if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) - return; - - if ( idamage < 1 ) - idamage = 1; - - self.lastdamagewasfromenemy = 0; - self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); - } - else if ( level.friendlyfire == 1 ) - { - if ( idamage < 1 ) - idamage = 1; - - self.lastdamagewasfromenemy = 0; - self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); - } - else if ( level.friendlyfire == 2 ) - { - if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) - return; - - if ( idamage < 1 ) - idamage = 1; - - self.lastdamagewasfromenemy = 0; - self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); - } - else if ( level.friendlyfire == 3 ) - { - idamage = int( idamage * 0.5 ); - - if ( idamage < 1 ) - idamage = 1; - - self.lastdamagewasfromenemy = 0; - self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); - } - - friendly = 1; - } - else if ( !level.hardcoremode && isdefined( self.owner ) && isdefined( eattacker.owner ) && self.owner == eattacker.owner ) - return; - else - { - if ( idamage < 1 ) - idamage = 1; - - self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); - } - } -} - -vehiclecrush() -{ - self endon( "disconnect" ); - - if ( isdefined( level._effect ) && isdefined( level._effect["tanksquish"] ) ) - playfx( level._effect["tanksquish"], self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ) ); - - self playsound( "chr_crunch" ); -} - -getvehicleprojectilescalar( sweapon ) -{ - if ( sweapon == "remote_missile_missile_mp" ) - scale = 10.0; - else if ( sweapon == "remote_mortar_missile_mp" ) - scale = 10.0; - else if ( sweapon == "smaw_mp" ) - scale = 0.2; - else if ( sweapon == "fhj18_mp" ) - scale = 0.2; - else - scale = 1; - - return scale; -} - -getvehicleprojectilesplashscalar( sweapon ) -{ - if ( sweapon == "remote_missile_missile_mp" ) - scale = 10.0; - else if ( sweapon == "remote_mortar_missile_mp" ) - scale = 4.0; - else if ( sweapon == "chopper_minigun_mp" ) - scale = 0.5; - else - scale = 1; - - return scale; -} - -getvehicleunderneathsplashscalar( sweapon ) -{ - if ( sweapon == "satchel_charge_mp" ) - { - scale = 10.0; - scale *= 3.0; - } - else - scale = 1.0; - - return scale; -} - -getvehiclebulletdamage( sweapon ) -{ - if ( issubstr( sweapon, "ptrs41_" ) ) - idamage = 25; - else if ( issubstr( sweapon, "gunner" ) ) - idamage = 5; - else if ( issubstr( sweapon, "mg42_bipod" ) || issubstr( sweapon, "30cal_bipod" ) ) - idamage = 5; - else - idamage = 1; - - return idamage; -} - -allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) -{ - if ( isdefined( self.allowfriendlyfiredamageoverride ) ) - return [[ self.allowfriendlyfiredamageoverride ]]( einflictor, eattacker, smeansofdeath, sweapon ); - - vehicle = eattacker getvehicleoccupied(); - return 0; -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_healthoverlay.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_healthoverlay.gsc deleted file mode 100644 index ac19bb5..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_healthoverlay.gsc +++ /dev/null @@ -1,279 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -init() -{ - precacheshader( "overlay_low_health" ); - level.healthoverlaycutoff = 0.55; - regentime = level.playerhealthregentime; - level.playerhealth_regularregendelay = regentime * 1000; - level.healthregendisabled = level.playerhealth_regularregendelay <= 0; - level thread onplayerconnect(); -} - -onplayerconnect() -{ - for (;;) - { - level waittill( "connecting", player ); - - player thread onplayerspawned(); - player thread onplayerkilled(); - player thread onjoinedteam(); - player thread onjoinedspectators(); - player thread onplayerdisconnect(); - } -} - -onjoinedteam() -{ - self endon( "disconnect" ); - - for (;;) - { - self waittill( "joined_team" ); - - self notify( "end_healthregen" ); - } -} - -onjoinedspectators() -{ - self endon( "disconnect" ); - - for (;;) - { - self waittill( "joined_spectators" ); - - self notify( "end_healthregen" ); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - - for (;;) - { - self waittill( "spawned_player" ); - - self thread playerhealthregen(); - } -} - -onplayerkilled() -{ - self endon( "disconnect" ); - - for (;;) - { - self waittill( "killed_player" ); - - self notify( "end_healthregen" ); - } -} - -onplayerdisconnect() -{ - self waittill( "disconnect" ); - - self notify( "end_healthregen" ); -} - -playerhealthregen() -{ - self endon( "end_healthregen" ); - - if ( self.health <= 0 ) - { -/# - assert( !isalive( self ) ); -#/ - return; - } - - maxhealth = self.health; - oldhealth = maxhealth; - player = self; - health_add = 0; - regenrate = 0.1; - usetrueregen = 0; - veryhurt = 0; - player.breathingstoptime = -10000; - thread playerbreathingsound( maxhealth * 0.35 ); - thread playerheartbeatsound( maxhealth * 0.35 ); - lastsoundtime_recover = 0; - hurttime = 0; - newhealth = 0; - - for (;;) - { - wait 0.05; - - if ( isdefined( player.regenrate ) ) - { - regenrate = player.regenrate; - usetrueregen = 1; - } - - if ( player.health == maxhealth ) - { - veryhurt = 0; - self.atbrinkofdeath = 0; - continue; - } - - if ( player.health <= 0 ) - return; - - if ( isdefined( player.laststand ) && player.laststand ) - continue; - - wasveryhurt = veryhurt; - ratio = player.health / maxhealth; - - if ( ratio <= level.healthoverlaycutoff ) - { - veryhurt = 1; - self.atbrinkofdeath = 1; - - if ( !wasveryhurt ) - hurttime = gettime(); - } - - if ( player.health >= oldhealth ) - { - regentime = level.playerhealth_regularregendelay; - - if ( player hasperk( "specialty_healthregen" ) ) - regentime = int( regentime / getdvarfloat( "perk_healthRegenMultiplier" ) ); - - if ( gettime() - hurttime < regentime ) - continue; - - if ( level.healthregendisabled ) - continue; - - if ( gettime() - lastsoundtime_recover > regentime ) - { - lastsoundtime_recover = gettime(); - self notify( "snd_breathing_better" ); - } - - if ( veryhurt ) - { - newhealth = ratio; - veryhurttime = 3000; - - if ( player hasperk( "specialty_healthregen" ) ) - veryhurttime = int( veryhurttime / getdvarfloat( "perk_healthRegenMultiplier" ) ); - - if ( gettime() > hurttime + veryhurttime ) - newhealth += regenrate; - } - else if ( usetrueregen ) - newhealth = ratio + regenrate; - else - newhealth = 1; - - if ( newhealth >= 1.0 ) - { - self maps\mp\gametypes\_globallogic_player::resetattackerlist(); - newhealth = 1.0; - } - - if ( newhealth <= 0 ) - return; - - player setnormalhealth( newhealth ); - change = player.health - oldhealth; - - if ( change > 0 ) - player decayplayerdamages( change ); - - oldhealth = player.health; - continue; - } - - oldhealth = player.health; - health_add = 0; - hurttime = gettime(); - player.breathingstoptime = hurttime + 6000; - } -} - -decayplayerdamages( decay ) -{ - if ( !isdefined( self.attackerdamage ) ) - return; - - for ( i = 0; i < self.attackerdamage.size; i++ ) - { - if ( !isdefined( self.attackerdamage[i] ) || !isdefined( self.attackerdamage[i].damage ) ) - continue; - - self.attackerdamage[i].damage -= decay; - - if ( self.attackerdamage[i].damage < 0 ) - self.attackerdamage[i].damage = 0; - } -} - -playerbreathingsound( healthcap ) -{ - self endon( "end_healthregen" ); - wait 2; - player = self; - - for (;;) - { - wait 0.2; - - if ( player.health <= 0 ) - return; - - if ( player.health >= healthcap ) - continue; - - if ( level.healthregendisabled && gettime() > player.breathingstoptime ) - continue; - - player notify( "snd_breathing_hurt" ); - wait 0.784; - wait( 0.1 + randomfloat( 0.8 ) ); - } -} - -playerheartbeatsound( healthcap ) -{ - self endon( "end_healthregen" ); - self.hearbeatwait = 0.2; - wait 2; - player = self; - - for (;;) - { - wait 0.2; - - if ( player.health <= 0 ) - return; - - if ( player.health >= healthcap ) - { - self.hearbeatwait = 0.3; - continue; - } - - if ( level.healthregendisabled && gettime() > player.breathingstoptime ) - { - self.hearbeatwait = 0.3; - continue; - } - - player playlocalsound( "mpl_player_heartbeat" ); - wait( self.hearbeatwait ); - - if ( self.hearbeatwait <= 0.6 ) - self.hearbeatwait += 0.1; - } -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_hostmigration.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_hostmigration.gsc deleted file mode 100644 index d3aa5fd..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_hostmigration.gsc +++ /dev/null @@ -1,351 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -debug_script_structs() -{ -/# - if ( isdefined( level.struct ) ) - { - println( "*** Num structs " + level.struct.size ); - println( "" ); - - for ( i = 0; i < level.struct.size; i++ ) - { - struct = level.struct[i]; - - if ( isdefined( struct.targetname ) ) - { - println( "---" + i + " : " + struct.targetname ); - continue; - } - - println( "---" + i + " : " + "NONE" ); - } - } - else - println( "*** No structs defined." ); -#/ -} - -updatetimerpausedness() -{ - shouldbestopped = isdefined( level.hostmigrationtimer ); - - if ( !level.timerstopped && shouldbestopped ) - { - level.timerstopped = 1; - level.timerpausetime = gettime(); - } - else if ( level.timerstopped && !shouldbestopped ) - { - level.timerstopped = 0; - level.discardtime += gettime() - level.timerpausetime; - } -} - -callback_hostmigrationsave() -{ - -} - -pausetimer() -{ - level.migrationtimerpausetime = gettime(); -} - -resumetimer() -{ - level.discardtime += gettime() - level.migrationtimerpausetime; -} - -locktimer() -{ - level endon( "host_migration_begin" ); - level endon( "host_migration_end" ); - - for (;;) - { - currtime = gettime(); - wait 0.05; - - if ( !level.timerstopped && isdefined( level.discardtime ) ) - level.discardtime += gettime() - currtime; - } -} - -callback_hostmigration() -{ - setslowmotion( 1, 1, 0 ); - makedvarserverinfo( "ui_guncycle", 0 ); - level.hostmigrationreturnedplayercount = 0; - - if ( level.inprematchperiod ) - level waittill( "prematch_over" ); - - if ( level.gameended ) - { -/# - println( "Migration starting at time " + gettime() + ", but game has ended, so no countdown." ); -#/ - return; - } - -/# - println( "Migration starting at time " + gettime() ); -#/ - level.hostmigrationtimer = 1; - sethostmigrationstatus( 1 ); - level notify( "host_migration_begin" ); - thread locktimer(); - players = level.players; - - for ( i = 0; i < players.size; i++ ) - { - player = players[i]; - player thread hostmigrationtimerthink(); - } - - level endon( "host_migration_begin" ); - hostmigrationwait(); - level.hostmigrationtimer = undefined; - sethostmigrationstatus( 0 ); -/# - println( "Migration finished at time " + gettime() ); -#/ - recordmatchbegin(); - level notify( "host_migration_end" ); -} - -matchstarttimerconsole_internal( counttime, matchstarttimer ) -{ - waittillframeend; - visionsetnaked( "mpIntro", 0 ); - level endon( "match_start_timer_beginning" ); - - while ( counttime > 0 && !level.gameended ) - { - matchstarttimer thread maps\mp\gametypes\_hud::fontpulse( level ); - wait( matchstarttimer.inframes * 0.05 ); - matchstarttimer setvalue( counttime ); - - if ( counttime == 2 ) - visionsetnaked( getdvar( "mapname" ), 3.0 ); - - counttime--; - wait( 1 - matchstarttimer.inframes * 0.05 ); - } -} - -matchstarttimerconsole( type, duration ) -{ - level notify( "match_start_timer_beginning" ); - wait 0.05; - matchstarttext = createserverfontstring( "objective", 1.5 ); - matchstarttext setpoint( "CENTER", "CENTER", 0, -40 ); - matchstarttext.sort = 1001; - matchstarttext settext( game["strings"]["waiting_for_teams"] ); - matchstarttext.foreground = 0; - matchstarttext.hidewheninmenu = 1; - matchstarttext settext( game["strings"][type] ); - matchstarttimer = createserverfontstring( "objective", 2.2 ); - matchstarttimer setpoint( "CENTER", "CENTER", 0, 0 ); - matchstarttimer.sort = 1001; - matchstarttimer.color = ( 1, 1, 0 ); - matchstarttimer.foreground = 0; - matchstarttimer.hidewheninmenu = 1; - matchstarttimer maps\mp\gametypes\_hud::fontpulseinit(); - counttime = int( duration ); - - if ( counttime >= 2 ) - { - matchstarttimerconsole_internal( counttime, matchstarttimer ); - visionsetnaked( getdvar( "mapname" ), 3.0 ); - } - else - { - visionsetnaked( "mpIntro", 0 ); - visionsetnaked( getdvar( "mapname" ), 1.0 ); - } - - matchstarttimer destroyelem(); - matchstarttext destroyelem(); -} - -hostmigrationwait() -{ - level endon( "game_ended" ); - - if ( level.hostmigrationreturnedplayercount < level.players.size * 2 / 3 ) - { - thread matchstarttimerconsole( "waiting_for_teams", 20.0 ); - hostmigrationwaitforplayers(); - } - - level notify( "host_migration_countdown_begin" ); - thread matchstarttimerconsole( "match_starting_in", 5.0 ); - wait 5; -} - -waittillhostmigrationcountdown() -{ - level endon( "host_migration_end" ); - - if ( !isdefined( level.hostmigrationtimer ) ) - return; - - level waittill( "host_migration_countdown_begin" ); -} - -hostmigrationwaitforplayers() -{ - level endon( "hostmigration_enoughplayers" ); - wait 15; -} - -hostmigrationtimerthink_internal() -{ - level endon( "host_migration_begin" ); - level endon( "host_migration_end" ); - self.hostmigrationcontrolsfrozen = 0; - - while ( !isalive( self ) ) - self waittill( "spawned" ); - - self.hostmigrationcontrolsfrozen = 1; - self freezecontrols( 1 ); - - level waittill( "host_migration_end" ); -} - -hostmigrationtimerthink() -{ - self endon( "disconnect" ); - level endon( "host_migration_begin" ); - hostmigrationtimerthink_internal(); - - if ( self.hostmigrationcontrolsfrozen ) - self freezecontrols( 0 ); -} - -waittillhostmigrationdone() -{ - if ( !isdefined( level.hostmigrationtimer ) ) - return 0; - - starttime = gettime(); - - level waittill( "host_migration_end" ); - - return gettime() - starttime; -} - -waittillhostmigrationstarts( duration ) -{ - if ( isdefined( level.hostmigrationtimer ) ) - return; - - level endon( "host_migration_begin" ); - wait( duration ); -} - -waitlongdurationwithhostmigrationpause( duration ) -{ - if ( duration == 0 ) - return; - -/# - assert( duration > 0 ); -#/ - starttime = gettime(); - endtime = gettime() + duration * 1000; - - while ( gettime() < endtime ) - { - waittillhostmigrationstarts( ( endtime - gettime() ) / 1000 ); - - if ( isdefined( level.hostmigrationtimer ) ) - { - timepassed = waittillhostmigrationdone(); - endtime += timepassed; - } - } - -/# - if ( gettime() != endtime ) - println( "SCRIPT WARNING: gettime() = " + gettime() + " NOT EQUAL TO endtime = " + endtime ); -#/ - waittillhostmigrationdone(); - return gettime() - starttime; -} - -waitlongdurationwithhostmigrationpauseemp( duration ) -{ - if ( duration == 0 ) - return; - -/# - assert( duration > 0 ); -#/ - starttime = gettime(); - empendtime = gettime() + duration * 1000; - level.empendtime = empendtime; - - while ( gettime() < empendtime ) - { - waittillhostmigrationstarts( ( empendtime - gettime() ) / 1000 ); - - if ( isdefined( level.hostmigrationtimer ) ) - { - timepassed = waittillhostmigrationdone(); - - if ( isdefined( empendtime ) ) - empendtime += timepassed; - } - } - -/# - if ( gettime() != empendtime ) - println( "SCRIPT WARNING: gettime() = " + gettime() + " NOT EQUAL TO empendtime = " + empendtime ); -#/ - waittillhostmigrationdone(); - level.empendtime = undefined; - return gettime() - starttime; -} - -waitlongdurationwithgameendtimeupdate( duration ) -{ - if ( duration == 0 ) - return; - -/# - assert( duration > 0 ); -#/ - starttime = gettime(); - endtime = gettime() + duration * 1000; - - while ( gettime() < endtime ) - { - waittillhostmigrationstarts( ( endtime - gettime() ) / 1000 ); - - while ( isdefined( level.hostmigrationtimer ) ) - { - endtime += 1000; - setgameendtime( int( endtime ) ); - wait 1; - } - } - -/# - if ( gettime() != endtime ) - println( "SCRIPT WARNING: gettime() = " + gettime() + " NOT EQUAL TO endtime = " + endtime ); -#/ - - while ( isdefined( level.hostmigrationtimer ) ) - { - endtime += 1000; - setgameendtime( int( endtime ) ); - wait 1; - } - - return gettime() - starttime; -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_hud_message.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_hud_message.gsc deleted file mode 100644 index be9704b..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_hud_message.gsc +++ /dev/null @@ -1,1346 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -init() -{ - precachestring( &"MENU_POINTS" ); - precachestring( &"MP_FIRSTPLACE_NAME" ); - precachestring( &"MP_SECONDPLACE_NAME" ); - precachestring( &"MP_THIRDPLACE_NAME" ); - precachestring( &"MP_WAGER_PLACE_NAME" ); - precachestring( &"MP_MATCH_BONUS_IS" ); - precachestring( &"MP_CODPOINTS_MATCH_BONUS_IS" ); - precachestring( &"MP_WAGER_WINNINGS_ARE" ); - precachestring( &"MP_WAGER_SIDEBET_WINNINGS_ARE" ); - precachestring( &"MP_WAGER_IN_THE_MONEY" ); - precachestring( &"faction_popup" ); - game["strings"]["draw"] = &"MP_DRAW_CAPS"; - game["strings"]["round_draw"] = &"MP_ROUND_DRAW_CAPS"; - game["strings"]["round_win"] = &"MP_ROUND_WIN_CAPS"; - game["strings"]["round_loss"] = &"MP_ROUND_LOSS_CAPS"; - game["strings"]["victory"] = &"MP_VICTORY_CAPS"; - game["strings"]["defeat"] = &"MP_DEFEAT_CAPS"; - game["strings"]["game_over"] = &"MP_GAME_OVER_CAPS"; - game["strings"]["halftime"] = &"MP_HALFTIME_CAPS"; - game["strings"]["overtime"] = &"MP_OVERTIME_CAPS"; - game["strings"]["roundend"] = &"MP_ROUNDEND_CAPS"; - game["strings"]["intermission"] = &"MP_INTERMISSION_CAPS"; - game["strings"]["side_switch"] = &"MP_SWITCHING_SIDES_CAPS"; - game["strings"]["match_bonus"] = &"MP_MATCH_BONUS_IS"; - game["strings"]["codpoints_match_bonus"] = &"MP_CODPOINTS_MATCH_BONUS_IS"; - game["strings"]["wager_winnings"] = &"MP_WAGER_WINNINGS_ARE"; - game["strings"]["wager_sidebet_winnings"] = &"MP_WAGER_SIDEBET_WINNINGS_ARE"; - game["strings"]["wager_inthemoney"] = &"MP_WAGER_IN_THE_MONEY_CAPS"; - game["strings"]["wager_loss"] = &"MP_WAGER_LOSS_CAPS"; - game["strings"]["wager_topwinners"] = &"MP_WAGER_TOPWINNERS"; - game["menu_endgameupdate"] = "endgameupdate"; - precachemenu( game["menu_endgameupdate"] ); - level thread onplayerconnect(); -} - -onplayerconnect() -{ - for (;;) - { - level waittill( "connecting", player ); - - player thread hintmessagedeaththink(); - player thread lowermessagethink(); - player thread initnotifymessage(); - player thread initcustomgametypeheader(); - } -} - -initcustomgametypeheader() -{ - font = "default"; - titlesize = 2.5; - self.customgametypeheader = createfontstring( font, titlesize ); - self.customgametypeheader setpoint( "TOP", undefined, 0, 30 ); - self.customgametypeheader.glowalpha = 1; - self.customgametypeheader.hidewheninmenu = 1; - self.customgametypeheader.archived = 0; - self.customgametypeheader.color = ( 1, 1, 0.6 ); - self.customgametypeheader.alpha = 1; - titlesize = 2.0; - self.customgametypesubheader = createfontstring( font, titlesize ); - self.customgametypesubheader setparent( self.customgametypeheader ); - self.customgametypesubheader setpoint( "TOP", "BOTTOM", 0, 0 ); - self.customgametypesubheader.glowalpha = 1; - self.customgametypesubheader.hidewheninmenu = 1; - self.customgametypesubheader.archived = 0; - self.customgametypesubheader.color = ( 1, 1, 0.6 ); - self.customgametypesubheader.alpha = 1; -} - -hintmessage( hinttext, duration ) -{ - notifydata = spawnstruct(); - notifydata.notifytext = hinttext; - notifydata.duration = duration; - notifymessage( notifydata ); -} - -hintmessageplayers( players, hinttext, duration ) -{ - notifydata = spawnstruct(); - notifydata.notifytext = hinttext; - notifydata.duration = duration; - - for ( i = 0; i < players.size; i++ ) - players[i] notifymessage( notifydata ); -} - -showinitialfactionpopup( team ) -{ - self luinotifyevent( &"faction_popup", 1, game["strings"][team + "_name"] ); - maps\mp\gametypes\_hud_message::oldnotifymessage( undefined, undefined, undefined, undefined ); -} - -initnotifymessage() -{ - if ( !sessionmodeiszombiesgame() ) - { - if ( self issplitscreen() ) - { - titlesize = 2.0; - textsize = 1.4; - iconsize = 24; - font = "big"; - point = "TOP"; - relativepoint = "BOTTOM"; - yoffset = 30; - xoffset = 30; - } - else - { - titlesize = 2.5; - textsize = 1.75; - iconsize = 30; - font = "big"; - point = "TOP"; - relativepoint = "BOTTOM"; - yoffset = 0; - xoffset = 0; - } - } - else if ( self issplitscreen() ) - { - titlesize = 2.0; - textsize = 1.4; - iconsize = 24; - font = "big"; - point = "TOP"; - relativepoint = "BOTTOM"; - yoffset = 30; - xoffset = 30; - } - else - { - titlesize = 2.5; - textsize = 1.75; - iconsize = 30; - font = "big"; - point = "BOTTOM LEFT"; - relativepoint = "TOP"; - yoffset = 0; - xoffset = 0; - } - - self.notifytitle = createfontstring( font, titlesize ); - self.notifytitle setpoint( point, undefined, xoffset, yoffset ); - self.notifytitle.glowalpha = 1; - self.notifytitle.hidewheninmenu = 1; - self.notifytitle.archived = 0; - self.notifytitle.alpha = 0; - self.notifytext = createfontstring( font, textsize ); - self.notifytext setparent( self.notifytitle ); - self.notifytext setpoint( point, relativepoint, 0, 0 ); - self.notifytext.glowalpha = 1; - self.notifytext.hidewheninmenu = 1; - self.notifytext.archived = 0; - self.notifytext.alpha = 0; - self.notifytext2 = createfontstring( font, textsize ); - self.notifytext2 setparent( self.notifytitle ); - self.notifytext2 setpoint( point, relativepoint, 0, 0 ); - self.notifytext2.glowalpha = 1; - self.notifytext2.hidewheninmenu = 1; - self.notifytext2.archived = 0; - self.notifytext2.alpha = 0; - self.notifyicon = createicon( "white", iconsize, iconsize ); - self.notifyicon setparent( self.notifytext2 ); - self.notifyicon setpoint( point, relativepoint, 0, 0 ); - self.notifyicon.hidewheninmenu = 1; - self.notifyicon.archived = 0; - self.notifyicon.alpha = 0; - self.doingnotify = 0; - self.notifyqueue = []; -} - -oldnotifymessage( titletext, notifytext, iconname, glowcolor, sound, duration ) -{ - if ( level.wagermatch && !level.teambased ) - return; - - notifydata = spawnstruct(); - notifydata.titletext = titletext; - notifydata.notifytext = notifytext; - notifydata.iconname = iconname; - notifydata.sound = sound; - notifydata.duration = duration; - self.startmessagenotifyqueue[self.startmessagenotifyqueue.size] = notifydata; - self notify( "received award" ); -} - -notifymessage( notifydata ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self.messagenotifyqueue[self.messagenotifyqueue.size] = notifydata; - self notify( "received award" ); -} - -playnotifyloop( duration ) -{ - playnotifyloop = spawn( "script_origin", ( 0, 0, 0 ) ); - playnotifyloop playloopsound( "uin_notify_data_loop" ); - duration -= 4; - - if ( duration < 1 ) - duration = 1; - - wait( duration ); - playnotifyloop delete(); -} - -shownotifymessage( notifydata, duration ) -{ - self endon( "disconnect" ); - self.doingnotify = 1; - waitrequirevisibility( 0 ); - self notify( "notifyMessageBegin", duration ); - self thread resetoncancel(); - - if ( isdefined( notifydata.sound ) ) - self playlocalsound( notifydata.sound ); - - if ( isdefined( notifydata.musicstate ) ) - self maps\mp\_music::setmusicstate( notifydata.music ); - - if ( isdefined( notifydata.leadersound ) ) - self maps\mp\gametypes\_globallogic_audio::leaderdialogonplayer( notifydata.leadersound ); - - if ( isdefined( notifydata.glowcolor ) ) - glowcolor = notifydata.glowcolor; - else - glowcolor = ( 0, 0, 0 ); - - if ( isdefined( notifydata.color ) ) - color = notifydata.color; - else - color = ( 1, 1, 1 ); - - anchorelem = self.notifytitle; - - if ( isdefined( notifydata.titletext ) ) - { - if ( isdefined( notifydata.titlelabel ) ) - self.notifytitle.label = notifydata.titlelabel; - else - self.notifytitle.label = &""; - - if ( isdefined( notifydata.titlelabel ) && !isdefined( notifydata.titleisstring ) ) - self.notifytitle setvalue( notifydata.titletext ); - else - self.notifytitle settext( notifydata.titletext ); - - self.notifytitle setcod7decodefx( 200, int( duration * 1000 ), 600 ); - self.notifytitle.glowcolor = glowcolor; - self.notifytitle.color = color; - self.notifytitle.alpha = 1; - } - - if ( isdefined( notifydata.notifytext ) ) - { - if ( isdefined( notifydata.textlabel ) ) - self.notifytext.label = notifydata.textlabel; - else - self.notifytext.label = &""; - - if ( isdefined( notifydata.textlabel ) && !isdefined( notifydata.textisstring ) ) - self.notifytext setvalue( notifydata.notifytext ); - else - self.notifytext settext( notifydata.notifytext ); - - self.notifytext setcod7decodefx( 100, int( duration * 1000 ), 600 ); - self.notifytext.glowcolor = glowcolor; - self.notifytext.color = color; - self.notifytext.alpha = 1; - anchorelem = self.notifytext; - } - - if ( isdefined( notifydata.notifytext2 ) ) - { - if ( self issplitscreen() ) - { - if ( isdefined( notifydata.text2label ) ) - self iprintlnbold( notifydata.text2label, notifydata.notifytext2 ); - else - self iprintlnbold( notifydata.notifytext2 ); - } - else - { - self.notifytext2 setparent( anchorelem ); - - if ( isdefined( notifydata.text2label ) ) - self.notifytext2.label = notifydata.text2label; - else - self.notifytext2.label = &""; - - self.notifytext2 settext( notifydata.notifytext2 ); - self.notifytext2 setpulsefx( 100, int( duration * 1000 ), 1000 ); - self.notifytext2.glowcolor = glowcolor; - self.notifytext2.color = color; - self.notifytext2.alpha = 1; - anchorelem = self.notifytext2; - } - } - - if ( isdefined( notifydata.iconname ) ) - { - iconwidth = 60; - iconheight = 60; - - if ( isdefined( notifydata.iconwidth ) ) - iconwidth = notifydata.iconwidth; - - if ( isdefined( notifydata.iconheight ) ) - iconheight = notifydata.iconheight; - - self.notifyicon setparent( anchorelem ); - self.notifyicon setshader( notifydata.iconname, iconwidth, iconheight ); - self.notifyicon.alpha = 0; - self.notifyicon fadeovertime( 1.0 ); - self.notifyicon.alpha = 1; - waitrequirevisibility( duration ); - self.notifyicon fadeovertime( 0.75 ); - self.notifyicon.alpha = 0; - } - else - waitrequirevisibility( duration ); - - self notify( "notifyMessageDone" ); - self.doingnotify = 0; -} - -waitrequirevisibility( waittime ) -{ - interval = 0.05; - - while ( !self canreadtext() ) - wait( interval ); - - while ( waittime > 0 ) - { - wait( interval ); - - if ( self canreadtext() ) - waittime -= interval; - } -} - -canreadtext() -{ - if ( self maps\mp\_utility::isflashbanged() ) - return false; - - return true; -} - -resetondeath() -{ - self endon( "notifyMessageDone" ); - self endon( "disconnect" ); - level endon( "game_ended" ); - - self waittill( "death" ); - - resetnotify(); -} - -resetoncancel() -{ - self notify( "resetOnCancel" ); - self endon( "resetOnCancel" ); - self endon( "notifyMessageDone" ); - self endon( "disconnect" ); - - level waittill( "cancel_notify" ); - - resetnotify(); -} - -resetnotify() -{ - self.notifytitle.alpha = 0; - self.notifytext.alpha = 0; - self.notifyicon.alpha = 0; - self.doingnotify = 0; -} - -hintmessagedeaththink() -{ - self endon( "disconnect" ); - - for (;;) - { - self waittill( "death" ); - - if ( isdefined( self.hintmessage ) ) - self.hintmessage destroyelem(); - } -} - -lowermessagethink() -{ - self endon( "disconnect" ); - messagetexty = level.lowertexty; - - if ( self issplitscreen() ) - messagetexty = level.lowertexty - 50; - - self.lowermessage = createfontstring( "default", level.lowertextfontsize ); - self.lowermessage setpoint( "CENTER", level.lowertextyalign, 0, messagetexty ); - self.lowermessage settext( "" ); - self.lowermessage.archived = 0; - timerfontsize = 1.5; - - if ( self issplitscreen() ) - timerfontsize = 1.4; - - self.lowertimer = createfontstring( "default", timerfontsize ); - self.lowertimer setparent( self.lowermessage ); - self.lowertimer setpoint( "TOP", "BOTTOM", 0, 0 ); - self.lowertimer settext( "" ); - self.lowertimer.archived = 0; -} - -setmatchscorehudelemforteam( team ) -{ - if ( level.roundscorecarry ) - self setvalue( getteamscore( team ) ); - else - self setvalue( getroundswon( team ) ); -} - -teamoutcomenotify( winner, isround, endreasontext ) -{ - self endon( "disconnect" ); - self notify( "reset_outcome" ); - team = self.pers["team"]; - - if ( isdefined( team ) && team == "spectator" ) - { - for ( i = 0; i < level.players.size; i++ ) - { - if ( self.currentspectatingclient == level.players[i].clientid ) - { - team = level.players[i].pers["team"]; - break; - } - } - } - - if ( !isdefined( team ) || !isdefined( level.teams[team] ) ) - team = "allies"; - - while ( self.doingnotify ) - wait 0.05; - - self endon( "reset_outcome" ); - headerfont = "extrabig"; - font = "default"; - - if ( self issplitscreen() ) - { - titlesize = 2.0; - textsize = 1.5; - iconsize = 30; - spacing = 10; - } - else - { - titlesize = 3.0; - textsize = 2.0; - iconsize = 70; - spacing = 25; - } - - duration = 60000; - outcometitle = createfontstring( headerfont, titlesize ); - outcometitle setpoint( "TOP", undefined, 0, 30 ); - outcometitle.glowalpha = 1; - outcometitle.hidewheninmenu = 0; - outcometitle.archived = 0; - outcometitle.immunetodemogamehudsettings = 1; - outcometitle.immunetodemofreecamera = 1; - outcometext = createfontstring( font, 2.0 ); - outcometext setparent( outcometitle ); - outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); - outcometext.glowalpha = 1; - outcometext.hidewheninmenu = 0; - outcometext.archived = 0; - outcometext.immunetodemogamehudsettings = 1; - outcometext.immunetodemofreecamera = 1; - - if ( winner == "halftime" ) - { - outcometitle settext( game["strings"]["halftime"] ); - outcometitle.color = ( 1, 1, 1 ); - winner = "allies"; - } - else if ( winner == "intermission" ) - { - outcometitle settext( game["strings"]["intermission"] ); - outcometitle.color = ( 1, 1, 1 ); - winner = "allies"; - } - else if ( winner == "roundend" ) - { - outcometitle settext( game["strings"]["roundend"] ); - outcometitle.color = ( 1, 1, 1 ); - winner = "allies"; - } - else if ( winner == "overtime" ) - { - outcometitle settext( game["strings"]["overtime"] ); - outcometitle.color = ( 1, 1, 1 ); - winner = "allies"; - } - else if ( winner == "tie" ) - { - if ( isround ) - outcometitle settext( game["strings"]["round_draw"] ); - else - outcometitle settext( game["strings"]["draw"] ); - - outcometitle.color = ( 0.29, 0.61, 0.7 ); - winner = "allies"; - } - else if ( isdefined( self.pers["team"] ) && winner == team ) - { - if ( isround ) - outcometitle settext( game["strings"]["round_win"] ); - else - outcometitle settext( game["strings"]["victory"] ); - - outcometitle.color = ( 0.42, 0.68, 0.46 ); - - if ( isdefined( level.endvictoryreasontext ) ) - endreasontext = level.endvictoryreasontext; - } - else - { - if ( isround ) - outcometitle settext( game["strings"]["round_loss"] ); - else - outcometitle settext( game["strings"]["defeat"] ); - - outcometitle.color = ( 0.73, 0.29, 0.19 ); - - if ( isdefined( level.enddefeatreasontext ) ) - endreasontext = level.enddefeatreasontext; - } - - outcometext settext( endreasontext ); - outcometitle setcod7decodefx( 200, duration, 600 ); - outcometext setpulsefx( 100, duration, 1000 ); - iconspacing = 100; - currentx = ( level.teamcount - 1 ) * -1 * iconspacing / 2; - teamicons = []; - teamicons[team] = createicon( game["icons"][team], iconsize, iconsize ); - teamicons[team] setparent( outcometext ); - teamicons[team] setpoint( "TOP", "BOTTOM", currentx, spacing ); - teamicons[team].hidewheninmenu = 0; - teamicons[team].archived = 0; - teamicons[team].immunetodemogamehudsettings = 1; - teamicons[team].immunetodemofreecamera = 1; - teamicons[team].alpha = 0; - teamicons[team] fadeovertime( 0.5 ); - teamicons[team].alpha = 1; - currentx += iconspacing; - - foreach ( enemyteam in level.teams ) - { - if ( team == enemyteam ) - continue; - - teamicons[enemyteam] = createicon( game["icons"][enemyteam], iconsize, iconsize ); - teamicons[enemyteam] setparent( outcometext ); - teamicons[enemyteam] setpoint( "TOP", "BOTTOM", currentx, spacing ); - teamicons[enemyteam].hidewheninmenu = 0; - teamicons[enemyteam].archived = 0; - teamicons[enemyteam].immunetodemogamehudsettings = 1; - teamicons[enemyteam].immunetodemofreecamera = 1; - teamicons[enemyteam].alpha = 0; - teamicons[enemyteam] fadeovertime( 0.5 ); - teamicons[enemyteam].alpha = 1; - currentx += iconspacing; - } - - teamscores = []; - teamscores[team] = createfontstring( font, titlesize ); - teamscores[team] setparent( teamicons[team] ); - teamscores[team] setpoint( "TOP", "BOTTOM", 0, spacing ); - teamscores[team].glowalpha = 1; - - if ( isround ) - teamscores[team] setvalue( getteamscore( team ) ); - else - teamscores[team] [[ level.setmatchscorehudelemforteam ]]( team ); - - teamscores[team].hidewheninmenu = 0; - teamscores[team].archived = 0; - teamscores[team].immunetodemogamehudsettings = 1; - teamscores[team].immunetodemofreecamera = 1; - teamscores[team] setpulsefx( 100, duration, 1000 ); - - foreach ( enemyteam in level.teams ) - { - if ( team == enemyteam ) - continue; - - teamscores[enemyteam] = createfontstring( headerfont, titlesize ); - teamscores[enemyteam] setparent( teamicons[enemyteam] ); - teamscores[enemyteam] setpoint( "TOP", "BOTTOM", 0, spacing ); - teamscores[enemyteam].glowalpha = 1; - - if ( isround ) - teamscores[enemyteam] setvalue( getteamscore( enemyteam ) ); - else - teamscores[enemyteam] [[ level.setmatchscorehudelemforteam ]]( enemyteam ); - - teamscores[enemyteam].hidewheninmenu = 0; - teamscores[enemyteam].archived = 0; - teamscores[enemyteam].immunetodemogamehudsettings = 1; - teamscores[enemyteam].immunetodemofreecamera = 1; - teamscores[enemyteam] setpulsefx( 100, duration, 1000 ); - } - - font = "objective"; - matchbonus = undefined; - - if ( isdefined( self.matchbonus ) ) - { - bonus = ceil( self.matchbonus * level.xpscale ); - - if ( bonus > 0 ) - { - matchbonus = createfontstring( font, 2.0 ); - matchbonus setparent( outcometext ); - matchbonus setpoint( "TOP", "BOTTOM", 0, iconsize + spacing * 3 + teamscores[team].height ); - matchbonus.glowalpha = 1; - matchbonus.hidewheninmenu = 0; - matchbonus.archived = 0; - matchbonus.immunetodemogamehudsettings = 1; - matchbonus.immunetodemofreecamera = 1; - matchbonus.label = game["strings"]["match_bonus"]; - matchbonus setvalue( bonus ); - } - } - - self thread resetoutcomenotify( teamicons, teamscores, outcometitle, outcometext ); -} - -teamoutcomenotifyzombie( winner, isround, endreasontext ) -{ - self endon( "disconnect" ); - self notify( "reset_outcome" ); - team = self.pers["team"]; - - if ( isdefined( team ) && team == "spectator" ) - { - for ( i = 0; i < level.players.size; i++ ) - { - if ( self.currentspectatingclient == level.players[i].clientid ) - { - team = level.players[i].pers["team"]; - break; - } - } - } - - if ( !isdefined( team ) || !isdefined( level.teams[team] ) ) - team = "allies"; - - while ( self.doingnotify ) - wait 0.05; - - self endon( "reset_outcome" ); - - if ( level.splitscreen ) - { - titlesize = 2.0; - spacing = 10; - font = "default"; - } - else - { - titlesize = 3.0; - spacing = 50; - font = "objective"; - } - - outcometitle = createfontstring( font, titlesize ); - outcometitle setpoint( "TOP", undefined, 0, spacing ); - outcometitle.glowalpha = 1; - outcometitle.hidewheninmenu = 0; - outcometitle.archived = 0; - outcometitle.immunetodemogamehudsettings = 1; - outcometitle.immunetodemofreecamera = 1; - outcometitle settext( endreasontext ); - outcometitle setpulsefx( 100, 60000, 1000 ); - self thread resetoutcomenotify( undefined, undefined, outcometitle ); -} - -isintop( players, topn ) -{ - for ( i = 0; i < topn; i++ ) - { - if ( isdefined( players[i] ) && self == players[i] ) - return true; - } - - return false; -} - -outcomenotify( winner, isroundend, endreasontext ) -{ - self endon( "disconnect" ); - self notify( "reset_outcome" ); - - while ( self.doingnotify ) - wait 0.05; - - self endon( "reset_outcome" ); - headerfont = "extrabig"; - font = "default"; - - if ( self issplitscreen() ) - { - titlesize = 2.0; - winnersize = 1.5; - othersize = 1.5; - iconsize = 30; - spacing = 10; - } - else - { - titlesize = 3.0; - winnersize = 2.0; - othersize = 1.5; - iconsize = 30; - spacing = 20; - } - - duration = 60000; - players = level.placement["all"]; - outcometitle = createfontstring( headerfont, titlesize ); - outcometitle setpoint( "TOP", undefined, 0, spacing ); - - if ( !maps\mp\_utility::isoneround() && !isroundend ) - outcometitle settext( game["strings"]["game_over"] ); - else if ( players[0].pointstowin == 0 ) - outcometitle settext( game["strings"]["tie"] ); - else if ( self isintop( players, 3 ) ) - { - outcometitle settext( game["strings"]["victory"] ); - outcometitle.color = ( 0.42, 0.68, 0.46 ); - } - else - { - outcometitle settext( game["strings"]["defeat"] ); - outcometitle.color = ( 0.73, 0.29, 0.19 ); - } - - outcometitle.glowalpha = 1; - outcometitle.hidewheninmenu = 0; - outcometitle.archived = 0; - outcometitle.immunetodemogamehudsettings = 1; - outcometitle.immunetodemofreecamera = 1; - outcometitle setcod7decodefx( 200, duration, 600 ); - outcometext = createfontstring( font, 2.0 ); - outcometext setparent( outcometitle ); - outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); - outcometext.glowalpha = 1; - outcometext.hidewheninmenu = 0; - outcometext.archived = 0; - outcometext.immunetodemogamehudsettings = 1; - outcometext.immunetodemofreecamera = 1; - outcometext settext( endreasontext ); - firsttitle = createfontstring( font, winnersize ); - firsttitle setparent( outcometext ); - firsttitle setpoint( "TOP", "BOTTOM", 0, spacing ); - firsttitle.glowalpha = 1; - firsttitle.hidewheninmenu = 0; - firsttitle.archived = 0; - firsttitle.immunetodemogamehudsettings = 1; - firsttitle.immunetodemofreecamera = 1; - - if ( isdefined( players[0] ) ) - { - firsttitle.label = &"MP_FIRSTPLACE_NAME"; - firsttitle setplayernamestring( players[0] ); - firsttitle setcod7decodefx( 175, duration, 600 ); - } - - secondtitle = createfontstring( font, othersize ); - secondtitle setparent( firsttitle ); - secondtitle setpoint( "TOP", "BOTTOM", 0, spacing ); - secondtitle.glowalpha = 1; - secondtitle.hidewheninmenu = 0; - secondtitle.archived = 0; - secondtitle.immunetodemogamehudsettings = 1; - secondtitle.immunetodemofreecamera = 1; - - if ( isdefined( players[1] ) ) - { - secondtitle.label = &"MP_SECONDPLACE_NAME"; - secondtitle setplayernamestring( players[1] ); - secondtitle setcod7decodefx( 175, duration, 600 ); - } - - thirdtitle = createfontstring( font, othersize ); - thirdtitle setparent( secondtitle ); - thirdtitle setpoint( "TOP", "BOTTOM", 0, spacing ); - thirdtitle setparent( secondtitle ); - thirdtitle.glowalpha = 1; - thirdtitle.hidewheninmenu = 0; - thirdtitle.archived = 0; - thirdtitle.immunetodemogamehudsettings = 1; - thirdtitle.immunetodemofreecamera = 1; - - if ( isdefined( players[2] ) ) - { - thirdtitle.label = &"MP_THIRDPLACE_NAME"; - thirdtitle setplayernamestring( players[2] ); - thirdtitle setcod7decodefx( 175, duration, 600 ); - } - - matchbonus = createfontstring( font, 2.0 ); - matchbonus setparent( thirdtitle ); - matchbonus setpoint( "TOP", "BOTTOM", 0, spacing ); - matchbonus.glowalpha = 1; - matchbonus.hidewheninmenu = 0; - matchbonus.archived = 0; - matchbonus.immunetodemogamehudsettings = 1; - matchbonus.immunetodemofreecamera = 1; - - if ( isdefined( self.matchbonus ) ) - { - bonus = ceil( self.matchbonus * level.xpscale ); - - if ( bonus > 0 ) - { - matchbonus.label = game["strings"]["match_bonus"]; - matchbonus setvalue( bonus ); - } - } - - self thread updateoutcome( firsttitle, secondtitle, thirdtitle ); - self thread resetoutcomenotify( undefined, undefined, outcometitle, outcometext, firsttitle, secondtitle, thirdtitle, matchbonus ); -} - -wageroutcomenotify( winner, endreasontext ) -{ - self endon( "disconnect" ); - self notify( "reset_outcome" ); - - while ( self.doingnotify ) - wait 0.05; - - setmatchflag( "enable_popups", 0 ); - self endon( "reset_outcome" ); - headerfont = "extrabig"; - font = "objective"; - - if ( self issplitscreen() ) - { - titlesize = 2.0; - winnersize = 1.5; - othersize = 1.5; - iconsize = 30; - spacing = 2; - } - else - { - titlesize = 3.0; - winnersize = 2.0; - othersize = 1.5; - iconsize = 30; - spacing = 20; - } - - halftime = 0; - - if ( isdefined( level.sidebet ) && level.sidebet ) - halftime = 1; - - duration = 60000; - players = level.placement["all"]; - outcometitle = createfontstring( headerfont, titlesize ); - outcometitle setpoint( "TOP", undefined, 0, spacing ); - - if ( halftime ) - { - outcometitle settext( game["strings"]["intermission"] ); - outcometitle.color = ( 1, 1, 0 ); - outcometitle.glowcolor = ( 1, 0, 0 ); - } - else if ( isdefined( level.dontcalcwagerwinnings ) && level.dontcalcwagerwinnings == 1 ) - { - outcometitle settext( game["strings"]["wager_topwinners"] ); - outcometitle.color = ( 0.42, 0.68, 0.46 ); - } - else if ( isdefined( self.wagerwinnings ) && self.wagerwinnings > 0 ) - { - outcometitle settext( game["strings"]["wager_inthemoney"] ); - outcometitle.color = ( 0.42, 0.68, 0.46 ); - } - else - { - outcometitle settext( game["strings"]["wager_loss"] ); - outcometitle.color = ( 0.73, 0.29, 0.19 ); - } - - outcometitle.glowalpha = 1; - outcometitle.hidewheninmenu = 0; - outcometitle.archived = 0; - outcometitle.immunetodemogamehudsettings = 1; - outcometitle.immunetodemofreecamera = 1; - outcometitle setcod7decodefx( 200, duration, 600 ); - outcometext = createfontstring( font, 2.0 ); - outcometext setparent( outcometitle ); - outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); - outcometext.glowalpha = 1; - outcometext.hidewheninmenu = 0; - outcometext.archived = 0; - outcometext.immunetodemogamehudsettings = 1; - outcometext.immunetodemofreecamera = 1; - outcometext settext( endreasontext ); - playernamehudelems = []; - playercphudelems = []; - numplayers = players.size; - - for ( i = 0; i < numplayers; i++ ) - { - if ( !halftime && isdefined( players[i] ) ) - { - secondtitle = createfontstring( font, othersize ); - - if ( playernamehudelems.size == 0 ) - { - secondtitle setparent( outcometext ); - secondtitle setpoint( "TOP_LEFT", "BOTTOM", -175, spacing * 3 ); - } - else - { - secondtitle setparent( playernamehudelems[playernamehudelems.size - 1] ); - secondtitle setpoint( "TOP_LEFT", "BOTTOM_LEFT", 0, spacing ); - } - - secondtitle.glowalpha = 1; - secondtitle.hidewheninmenu = 0; - secondtitle.archived = 0; - secondtitle.immunetodemogamehudsettings = 1; - secondtitle.immunetodemofreecamera = 1; - secondtitle.label = &"MP_WAGER_PLACE_NAME"; - secondtitle.playernum = i; - secondtitle setplayernamestring( players[i] ); - playernamehudelems[playernamehudelems.size] = secondtitle; - secondcp = createfontstring( font, othersize ); - secondcp setparent( secondtitle ); - secondcp setpoint( "TOP_RIGHT", "TOP_LEFT", 350, 0 ); - secondcp.glowalpha = 1; - secondcp.hidewheninmenu = 0; - secondcp.archived = 0; - secondcp.immunetodemogamehudsettings = 1; - secondcp.immunetodemofreecamera = 1; - secondcp.label = &"MENU_POINTS"; - secondcp.currentvalue = 0; - - if ( isdefined( players[i].wagerwinnings ) ) - secondcp.targetvalue = players[i].wagerwinnings; - else - secondcp.targetvalue = 0; - - if ( secondcp.targetvalue > 0 ) - secondcp.color = ( 0.42, 0.68, 0.46 ); - - secondcp setvalue( 0 ); - playercphudelems[playercphudelems.size] = secondcp; - } - } - - self thread updatewageroutcome( playernamehudelems, playercphudelems ); - self thread resetwageroutcomenotify( playernamehudelems, playercphudelems, outcometitle, outcometext ); - - if ( halftime ) - return; - - stillupdating = 1; - countupduration = 2; - cpincrement = 9999; - - if ( isdefined( playercphudelems[0] ) ) - { - cpincrement = int( playercphudelems[0].targetvalue / ( countupduration / 0.05 ) ); - - if ( cpincrement < 1 ) - cpincrement = 1; - } - - while ( stillupdating ) - { - stillupdating = 0; - - for ( i = 0; i < playercphudelems.size; i++ ) - { - if ( isdefined( playercphudelems[i] ) && playercphudelems[i].currentvalue < playercphudelems[i].targetvalue ) - { - playercphudelems[i].currentvalue += cpincrement; - - if ( playercphudelems[i].currentvalue > playercphudelems[i].targetvalue ) - playercphudelems[i].currentvalue = playercphudelems[i].targetvalue; - - playercphudelems[i] setvalue( playercphudelems[i].currentvalue ); - stillupdating = 1; - } - } - - wait 0.05; - } -} - -teamwageroutcomenotify( winner, isroundend, endreasontext ) -{ - self endon( "disconnect" ); - self notify( "reset_outcome" ); - team = self.pers["team"]; - - if ( !isdefined( team ) || !isdefined( level.teams[team] ) ) - team = "allies"; - - wait 0.05; - - while ( self.doingnotify ) - wait 0.05; - - self endon( "reset_outcome" ); - headerfont = "extrabig"; - font = "objective"; - - if ( self issplitscreen() ) - { - titlesize = 2.0; - textsize = 1.5; - iconsize = 30; - spacing = 10; - } - else - { - titlesize = 3.0; - textsize = 2.0; - iconsize = 70; - spacing = 15; - } - - halftime = 0; - - if ( isdefined( level.sidebet ) && level.sidebet ) - halftime = 1; - - duration = 60000; - outcometitle = createfontstring( headerfont, titlesize ); - outcometitle setpoint( "TOP", undefined, 0, spacing ); - outcometitle.glowalpha = 1; - outcometitle.hidewheninmenu = 0; - outcometitle.archived = 0; - outcometitle.immunetodemogamehudsettings = 1; - outcometitle.immunetodemofreecamera = 1; - outcometext = createfontstring( font, 2.0 ); - outcometext setparent( outcometitle ); - outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); - outcometext.glowalpha = 1; - outcometext.hidewheninmenu = 0; - outcometext.archived = 0; - outcometext.immunetodemogamehudsettings = 1; - outcometext.immunetodemofreecamera = 1; - - if ( winner == "tie" ) - { - if ( isroundend ) - outcometitle settext( game["strings"]["round_draw"] ); - else - outcometitle settext( game["strings"]["draw"] ); - - outcometitle.color = ( 1, 1, 1 ); - winner = "allies"; - } - else if ( winner == "overtime" ) - { - outcometitle settext( game["strings"]["overtime"] ); - outcometitle.color = ( 1, 1, 1 ); - } - else if ( isdefined( self.pers["team"] ) && winner == team ) - { - if ( isroundend ) - outcometitle settext( game["strings"]["round_win"] ); - else - outcometitle settext( game["strings"]["victory"] ); - - outcometitle.color = ( 0.42, 0.68, 0.46 ); - } - else - { - if ( isroundend ) - outcometitle settext( game["strings"]["round_loss"] ); - else - outcometitle settext( game["strings"]["defeat"] ); - - outcometitle.color = ( 0.73, 0.29, 0.19 ); - } - - if ( !isdefined( level.dontshowendreason ) || !level.dontshowendreason ) - outcometext settext( endreasontext ); - - outcometitle setpulsefx( 100, duration, 1000 ); - outcometext setpulsefx( 100, duration, 1000 ); - teamicons = []; - teamicons[team] = createicon( game["icons"][team], iconsize, iconsize ); - teamicons[team] setparent( outcometext ); - teamicons[team] setpoint( "TOP", "BOTTOM", -60, spacing ); - teamicons[team].hidewheninmenu = 0; - teamicons[team].archived = 0; - teamicons[team].alpha = 0; - teamicons[team] fadeovertime( 0.5 ); - teamicons[team].alpha = 1; - teamicons[team].immunetodemogamehudsettings = 1; - teamicons[team].immunetodemofreecamera = 1; - - foreach ( enemyteam in level.teams ) - { - if ( team == enemyteam ) - continue; - - teamicons[enemyteam] = createicon( game["icons"][enemyteam], iconsize, iconsize ); - teamicons[enemyteam] setparent( outcometext ); - teamicons[enemyteam] setpoint( "TOP", "BOTTOM", 60, spacing ); - teamicons[enemyteam].hidewheninmenu = 0; - teamicons[enemyteam].archived = 0; - teamicons[enemyteam].alpha = 0; - teamicons[enemyteam] fadeovertime( 0.5 ); - teamicons[enemyteam].alpha = 1; - teamicons[enemyteam].immunetodemogamehudsettings = 1; - teamicons[enemyteam].immunetodemofreecamera = 1; - } - - teamscores = []; - teamscores[team] = createfontstring( font, titlesize ); - teamscores[team] setparent( teamicons[team] ); - teamscores[team] setpoint( "TOP", "BOTTOM", 0, spacing ); - teamscores[team].glowalpha = 1; - teamscores[team] setvalue( getteamscore( team ) ); - teamscores[team].hidewheninmenu = 0; - teamscores[team].archived = 0; - teamscores[team].immunetodemogamehudsettings = 1; - teamscores[team].immunetodemofreecamera = 1; - teamscores[team] setpulsefx( 100, duration, 1000 ); - - foreach ( enemyteam in level.teams ) - { - if ( team == enemyteam ) - continue; - - teamscores[enemyteam] = createfontstring( font, titlesize ); - teamscores[enemyteam] setparent( teamicons[enemyteam] ); - teamscores[enemyteam] setpoint( "TOP", "BOTTOM", 0, spacing ); - teamscores[enemyteam].glowalpha = 1; - teamscores[enemyteam] setvalue( getteamscore( enemyteam ) ); - teamscores[enemyteam].hidewheninmenu = 0; - teamscores[enemyteam].archived = 0; - teamscores[enemyteam].immunetodemogamehudsettings = 1; - teamscores[enemyteam].immunetodemofreecamera = 1; - teamscores[enemyteam] setpulsefx( 100, duration, 1000 ); - } - - matchbonus = undefined; - sidebetwinnings = undefined; - - if ( !isroundend && !halftime && isdefined( self.wagerwinnings ) ) - { - matchbonus = createfontstring( font, 2.0 ); - matchbonus setparent( outcometext ); - matchbonus setpoint( "TOP", "BOTTOM", 0, iconsize + spacing * 3 + teamscores[team].height ); - matchbonus.glowalpha = 1; - matchbonus.hidewheninmenu = 0; - matchbonus.archived = 0; - matchbonus.immunetodemogamehudsettings = 1; - matchbonus.immunetodemofreecamera = 1; - matchbonus.label = game["strings"]["wager_winnings"]; - matchbonus setvalue( self.wagerwinnings ); - - if ( isdefined( game["side_bets"] ) && game["side_bets"] ) - { - sidebetwinnings = createfontstring( font, 2.0 ); - sidebetwinnings setparent( matchbonus ); - sidebetwinnings setpoint( "TOP", "BOTTOM", 0, spacing ); - sidebetwinnings.glowalpha = 1; - sidebetwinnings.hidewheninmenu = 0; - sidebetwinnings.archived = 0; - sidebetwinnings.immunetodemogamehudsettings = 1; - sidebetwinnings.immunetodemofreecamera = 1; - sidebetwinnings.label = game["strings"]["wager_sidebet_winnings"]; - sidebetwinnings setvalue( self.pers["wager_sideBetWinnings"] ); - } - } - - self thread resetoutcomenotify( teamicons, teamscores, outcometitle, outcometext, matchbonus, sidebetwinnings ); -} - -destroyhudelem( hudelem ) -{ - if ( isdefined( hudelem ) ) - hudelem destroyelem(); -} - -resetoutcomenotify( hudelemlist1, hudelemlist2, hudelem3, hudelem4, hudelem5, hudelem6, hudelem7, hudelem8, hudelem9, hudelem10 ) -{ - self endon( "disconnect" ); - - self waittill( "reset_outcome" ); - - destroyhudelem( hudelem3 ); - destroyhudelem( hudelem4 ); - destroyhudelem( hudelem5 ); - destroyhudelem( hudelem6 ); - destroyhudelem( hudelem7 ); - destroyhudelem( hudelem8 ); - destroyhudelem( hudelem9 ); - destroyhudelem( hudelem10 ); - - if ( isdefined( hudelemlist1 ) ) - { - foreach ( elem in hudelemlist1 ) - destroyhudelem( elem ); - } - - if ( isdefined( hudelemlist2 ) ) - { - foreach ( elem in hudelemlist2 ) - destroyhudelem( elem ); - } -} - -resetwageroutcomenotify( playernamehudelems, playercphudelems, outcometitle, outcometext ) -{ - self endon( "disconnect" ); - - self waittill( "reset_outcome" ); - - for ( i = playernamehudelems.size - 1; i >= 0; i-- ) - { - if ( isdefined( playernamehudelems[i] ) ) - playernamehudelems[i] destroy(); - } - - for ( i = playercphudelems.size - 1; i >= 0; i-- ) - { - if ( isdefined( playercphudelems[i] ) ) - playercphudelems[i] destroy(); - } - - if ( isdefined( outcometext ) ) - outcometext destroy(); - - if ( isdefined( outcometitle ) ) - outcometitle destroy(); -} - -updateoutcome( firsttitle, secondtitle, thirdtitle ) -{ - self endon( "disconnect" ); - self endon( "reset_outcome" ); - - while ( true ) - { - self waittill( "update_outcome" ); - - players = level.placement["all"]; - - if ( isdefined( firsttitle ) && isdefined( players[0] ) ) - firsttitle setplayernamestring( players[0] ); - else if ( isdefined( firsttitle ) ) - firsttitle.alpha = 0; - - if ( isdefined( secondtitle ) && isdefined( players[1] ) ) - secondtitle setplayernamestring( players[1] ); - else if ( isdefined( secondtitle ) ) - secondtitle.alpha = 0; - - if ( isdefined( thirdtitle ) && isdefined( players[2] ) ) - thirdtitle setplayernamestring( players[2] ); - else if ( isdefined( thirdtitle ) ) - thirdtitle.alpha = 0; - } -} - -updatewageroutcome( playernamehudelems, playercphudelems ) -{ - self endon( "disconnect" ); - self endon( "reset_outcome" ); - - while ( true ) - { - self waittill( "update_outcome" ); - - players = level.placement["all"]; - - for ( i = 0; i < playernamehudelems.size; i++ ) - { - if ( isdefined( playernamehudelems[i] ) && isdefined( players[playernamehudelems[i].playernum] ) ) - { - playernamehudelems[i] setplayernamestring( players[playernamehudelems[i].playernum] ); - continue; - } - - if ( isdefined( playernamehudelems[i] ) ) - playernamehudelems[i].alpha = 0; - - if ( isdefined( playercphudelems[i] ) ) - playercphudelems[i].alpha = 0; - } - } -} - -setshoutcasterwaitingmessage() -{ - if ( !isdefined( self.waitingforplayerstext ) ) - { - self.waitingforplayerstext = createfontstring( "objective", 2.5 ); - self.waitingforplayerstext setpoint( "CENTER", "CENTER", 0, -80 ); - self.waitingforplayerstext.sort = 1001; - self.waitingforplayerstext settext( &"MP_WAITING_FOR_PLAYERS_SHOUTCASTER" ); - self.waitingforplayerstext.foreground = 0; - self.waitingforplayerstext.hidewheninmenu = 1; - } -} - -clearshoutcasterwaitingmessage() -{ - if ( isdefined( self.waitingforplayerstext ) ) - { - destroyhudelem( self.waitingforplayerstext ); - self.waitingforplayerstext = undefined; - } -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_hud_util.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_hud_util.gsc deleted file mode 100644 index be6aa99..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_hud_util.gsc +++ /dev/null @@ -1,1055 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -setparent( element ) -{ - if ( isdefined( self.parent ) && self.parent == element ) - return; - - if ( isdefined( self.parent ) ) - self.parent removechild( self ); - - self.parent = element; - self.parent addchild( self ); - - if ( isdefined( self.point ) ) - self setpoint( self.point, self.relativepoint, self.xoffset, self.yoffset ); - else - self setpoint( "TOP" ); -} - -getparent() -{ - return self.parent; -} - -addchild( element ) -{ - element.index = self.children.size; - self.children[self.children.size] = element; -} - -removechild( element ) -{ - element.parent = undefined; - - if ( self.children[self.children.size - 1] != element ) - { - self.children[element.index] = self.children[self.children.size - 1]; - self.children[element.index].index = element.index; - } - - self.children[self.children.size - 1] = undefined; - element.index = undefined; -} - -setpoint( point, relativepoint, xoffset, yoffset, movetime ) -{ - if ( !isdefined( movetime ) ) - movetime = 0; - - element = self getparent(); - - if ( movetime ) - self moveovertime( movetime ); - - if ( !isdefined( xoffset ) ) - xoffset = 0; - - self.xoffset = xoffset; - - if ( !isdefined( yoffset ) ) - yoffset = 0; - - self.yoffset = yoffset; - self.point = point; - self.alignx = "center"; - self.aligny = "middle"; - - switch ( point ) - { - case "CENTER": - break; - case "TOP": - self.aligny = "top"; - break; - case "BOTTOM": - self.aligny = "bottom"; - break; - case "LEFT": - self.alignx = "left"; - break; - case "RIGHT": - self.alignx = "right"; - break; - case "TOP_RIGHT": - case "TOPRIGHT": - self.aligny = "top"; - self.alignx = "right"; - break; - case "TOP_LEFT": - case "TOPLEFT": - self.aligny = "top"; - self.alignx = "left"; - break; - case "TOPCENTER": - self.aligny = "top"; - self.alignx = "center"; - break; - case "BOTTOM_RIGHT": - case "BOTTOM RIGHT": - self.aligny = "bottom"; - self.alignx = "right"; - break; - case "BOTTOM_LEFT": - case "BOTTOM LEFT": - self.aligny = "bottom"; - self.alignx = "left"; - break; - default: -/# - println( "^3Warning: unknown point passed to setPoint(): " + point ); -#/ - break; - } - - if ( !isdefined( relativepoint ) ) - relativepoint = point; - - self.relativepoint = relativepoint; - relativex = "center"; - relativey = "middle"; - - switch ( relativepoint ) - { - case "CENTER": - break; - case "TOP": - relativey = "top"; - break; - case "BOTTOM": - relativey = "bottom"; - break; - case "LEFT": - relativex = "left"; - break; - case "RIGHT": - relativex = "right"; - break; - case "TOP_RIGHT": - case "TOPRIGHT": - relativey = "top"; - relativex = "right"; - break; - case "TOP_LEFT": - case "TOPLEFT": - relativey = "top"; - relativex = "left"; - break; - case "TOPCENTER": - relativey = "top"; - relativex = "center"; - break; - case "BOTTOM_RIGHT": - case "BOTTOM RIGHT": - relativey = "bottom"; - relativex = "right"; - break; - case "BOTTOM_LEFT": - case "BOTTOM LEFT": - relativey = "bottom"; - relativex = "left"; - break; - default: -/# - println( "^3Warning: unknown relativePoint passed to setPoint(): " + relativepoint ); -#/ - break; - } - - if ( element == level.uiparent ) - { - self.horzalign = relativex; - self.vertalign = relativey; - } - else - { - self.horzalign = element.horzalign; - self.vertalign = element.vertalign; - } - - if ( relativex == element.alignx ) - { - offsetx = 0; - xfactor = 0; - } - else if ( relativex == "center" || element.alignx == "center" ) - { - offsetx = int( element.width / 2 ); - - if ( relativex == "left" || element.alignx == "right" ) - xfactor = -1; - else - xfactor = 1; - } - else - { - offsetx = element.width; - - if ( relativex == "left" ) - xfactor = -1; - else - xfactor = 1; - } - - self.x = element.x + offsetx * xfactor; - - if ( relativey == element.aligny ) - { - offsety = 0; - yfactor = 0; - } - else if ( relativey == "middle" || element.aligny == "middle" ) - { - offsety = int( element.height / 2 ); - - if ( relativey == "top" || element.aligny == "bottom" ) - yfactor = -1; - else - yfactor = 1; - } - else - { - offsety = element.height; - - if ( relativey == "top" ) - yfactor = -1; - else - yfactor = 1; - } - - self.y = element.y + offsety * yfactor; - self.x += self.xoffset; - self.y += self.yoffset; - - switch ( self.elemtype ) - { - case "bar": - setpointbar( point, relativepoint, xoffset, yoffset ); - self.barframe setparent( self getparent() ); - self.barframe setpoint( point, relativepoint, xoffset, yoffset ); - break; - } - - self updatechildren(); -} - -setpointbar( point, relativepoint, xoffset, yoffset ) -{ - self.bar.horzalign = self.horzalign; - self.bar.vertalign = self.vertalign; - self.bar.alignx = "left"; - self.bar.aligny = self.aligny; - self.bar.y = self.y; - - if ( self.alignx == "left" ) - self.bar.x = self.x; - else if ( self.alignx == "right" ) - self.bar.x = self.x - self.width; - else - self.bar.x = self.x - int( self.width / 2 ); - - if ( self.aligny == "top" ) - self.bar.y = self.y; - else if ( self.aligny == "bottom" ) - self.bar.y = self.y; - - self updatebar( self.bar.frac ); -} - -updatebar( barfrac, rateofchange ) -{ - if ( self.elemtype == "bar" ) - updatebarscale( barfrac, rateofchange ); -} - -updatebarscale( barfrac, rateofchange ) -{ - barwidth = int( self.width * barfrac + 0.5 ); - - if ( !barwidth ) - barwidth = 1; - - self.bar.frac = barfrac; - self.bar setshader( self.bar.shader, barwidth, self.height ); -/# - assert( barwidth <= self.width, "barWidth <= self.width: " + barwidth + " <= " + self.width + " - barFrac was " + barfrac ); -#/ - - if ( isdefined( rateofchange ) && barwidth < self.width ) - { - if ( rateofchange > 0 ) - { -/# - assert( ( 1 - barfrac ) / rateofchange > 0, "barFrac: " + barfrac + "rateOfChange: " + rateofchange ); -#/ - self.bar scaleovertime( ( 1 - barfrac ) / rateofchange, self.width, self.height ); - } - else if ( rateofchange < 0 ) - { -/# - assert( barfrac / -1 * rateofchange > 0, "barFrac: " + barfrac + "rateOfChange: " + rateofchange ); -#/ - self.bar scaleovertime( barfrac / -1 * rateofchange, 1, self.height ); - } - } - - self.bar.rateofchange = rateofchange; - self.bar.lastupdatetime = gettime(); -} - -createfontstring( font, fontscale ) -{ - fontelem = newclienthudelem( self ); - fontelem.elemtype = "font"; - fontelem.font = font; - fontelem.fontscale = fontscale; - fontelem.x = 0; - fontelem.y = 0; - fontelem.width = 0; - fontelem.height = int( level.fontheight * fontscale ); - fontelem.xoffset = 0; - fontelem.yoffset = 0; - fontelem.children = []; - fontelem setparent( level.uiparent ); - fontelem.hidden = 0; - return fontelem; -} - -createserverfontstring( font, fontscale, team ) -{ - if ( isdefined( team ) ) - fontelem = newteamhudelem( team ); - else - fontelem = newhudelem(); - - fontelem.elemtype = "font"; - fontelem.font = font; - fontelem.fontscale = fontscale; - fontelem.x = 0; - fontelem.y = 0; - fontelem.width = 0; - fontelem.height = int( level.fontheight * fontscale ); - fontelem.xoffset = 0; - fontelem.yoffset = 0; - fontelem.children = []; - fontelem setparent( level.uiparent ); - fontelem.hidden = 0; - return fontelem; -} - -createservertimer( font, fontscale, team ) -{ - if ( isdefined( team ) ) - timerelem = newteamhudelem( team ); - else - timerelem = newhudelem(); - - timerelem.elemtype = "timer"; - timerelem.font = font; - timerelem.fontscale = fontscale; - timerelem.x = 0; - timerelem.y = 0; - timerelem.width = 0; - timerelem.height = int( level.fontheight * fontscale ); - timerelem.xoffset = 0; - timerelem.yoffset = 0; - timerelem.children = []; - timerelem setparent( level.uiparent ); - timerelem.hidden = 0; - return timerelem; -} - -createclienttimer( font, fontscale ) -{ - timerelem = newclienthudelem( self ); - timerelem.elemtype = "timer"; - timerelem.font = font; - timerelem.fontscale = fontscale; - timerelem.x = 0; - timerelem.y = 0; - timerelem.width = 0; - timerelem.height = int( level.fontheight * fontscale ); - timerelem.xoffset = 0; - timerelem.yoffset = 0; - timerelem.children = []; - timerelem setparent( level.uiparent ); - timerelem.hidden = 0; - return timerelem; -} - -createicon( shader, width, height ) -{ - iconelem = newclienthudelem( self ); - iconelem.elemtype = "icon"; - iconelem.x = 0; - iconelem.y = 0; - iconelem.width = width; - iconelem.height = height; - iconelem.xoffset = 0; - iconelem.yoffset = 0; - iconelem.children = []; - iconelem setparent( level.uiparent ); - iconelem.hidden = 0; - - if ( isdefined( shader ) ) - iconelem setshader( shader, width, height ); - - return iconelem; -} - -createservericon( shader, width, height, team ) -{ - if ( isdefined( team ) ) - iconelem = newteamhudelem( team ); - else - iconelem = newhudelem(); - - iconelem.elemtype = "icon"; - iconelem.x = 0; - iconelem.y = 0; - iconelem.width = width; - iconelem.height = height; - iconelem.xoffset = 0; - iconelem.yoffset = 0; - iconelem.children = []; - iconelem setparent( level.uiparent ); - iconelem.hidden = 0; - - if ( isdefined( shader ) ) - iconelem setshader( shader, width, height ); - - return iconelem; -} - -createserverbar( color, width, height, flashfrac, team, selected ) -{ - if ( isdefined( team ) ) - barelem = newteamhudelem( team ); - else - barelem = newhudelem(); - - barelem.x = 0; - barelem.y = 0; - barelem.frac = 0; - barelem.color = color; - barelem.sort = -2; - barelem.shader = "progress_bar_fill"; - barelem setshader( "progress_bar_fill", width, height ); - barelem.hidden = 0; - - if ( isdefined( flashfrac ) ) - barelem.flashfrac = flashfrac; - - if ( isdefined( team ) ) - barelemframe = newteamhudelem( team ); - else - barelemframe = newhudelem(); - - barelemframe.elemtype = "icon"; - barelemframe.x = 0; - barelemframe.y = 0; - barelemframe.width = width; - barelemframe.height = height; - barelemframe.xoffset = 0; - barelemframe.yoffset = 0; - barelemframe.bar = barelem; - barelemframe.barframe = barelemframe; - barelemframe.children = []; - barelemframe.sort = -1; - barelemframe.color = ( 1, 1, 1 ); - barelemframe setparent( level.uiparent ); - - if ( isdefined( selected ) ) - barelemframe setshader( "progress_bar_fg_sel", width, height ); - else - barelemframe setshader( "progress_bar_fg", width, height ); - - barelemframe.hidden = 0; - - if ( isdefined( team ) ) - barelembg = newteamhudelem( team ); - else - barelembg = newhudelem(); - - barelembg.elemtype = "bar"; - barelembg.x = 0; - barelembg.y = 0; - barelembg.width = width; - barelembg.height = height; - barelembg.xoffset = 0; - barelembg.yoffset = 0; - barelembg.bar = barelem; - barelembg.barframe = barelemframe; - barelembg.children = []; - barelembg.sort = -3; - barelembg.color = ( 0, 0, 0 ); - barelembg.alpha = 0.5; - barelembg setparent( level.uiparent ); - barelembg setshader( "progress_bar_bg", width, height ); - barelembg.hidden = 0; - return barelembg; -} - -createbar( color, width, height, flashfrac ) -{ - barelem = newclienthudelem( self ); - barelem.x = 0; - barelem.y = 0; - barelem.frac = 0; - barelem.color = color; - barelem.sort = -2; - barelem.shader = "progress_bar_fill"; - barelem setshader( "progress_bar_fill", width, height ); - barelem.hidden = 0; - - if ( isdefined( flashfrac ) ) - barelem.flashfrac = flashfrac; - - barelemframe = newclienthudelem( self ); - barelemframe.elemtype = "icon"; - barelemframe.x = 0; - barelemframe.y = 0; - barelemframe.width = width; - barelemframe.height = height; - barelemframe.xoffset = 0; - barelemframe.yoffset = 0; - barelemframe.bar = barelem; - barelemframe.barframe = barelemframe; - barelemframe.children = []; - barelemframe.sort = -1; - barelemframe.color = ( 1, 1, 1 ); - barelemframe setparent( level.uiparent ); - barelemframe.hidden = 0; - barelembg = newclienthudelem( self ); - barelembg.elemtype = "bar"; - - if ( !level.splitscreen ) - { - barelembg.x = -2; - barelembg.y = -2; - } - - barelembg.width = width; - barelembg.height = height; - barelembg.xoffset = 0; - barelembg.yoffset = 0; - barelembg.bar = barelem; - barelembg.barframe = barelemframe; - barelembg.children = []; - barelembg.sort = -3; - barelembg.color = ( 0, 0, 0 ); - barelembg.alpha = 0.5; - barelembg setparent( level.uiparent ); - - if ( !level.splitscreen ) - barelembg setshader( "progress_bar_bg", width + 4, height + 4 ); - else - barelembg setshader( "progress_bar_bg", width + 0, height + 0 ); - - barelembg.hidden = 0; - return barelembg; -} - -getcurrentfraction() -{ - frac = self.bar.frac; - - if ( isdefined( self.bar.rateofchange ) ) - { - frac += ( gettime() - self.bar.lastupdatetime ) * self.bar.rateofchange; - - if ( frac > 1 ) - frac = 1; - - if ( frac < 0 ) - frac = 0; - } - - return frac; -} - -createprimaryprogressbar() -{ - bar = createbar( ( 1, 1, 1 ), level.primaryprogressbarwidth, level.primaryprogressbarheight ); - - if ( level.splitscreen ) - bar setpoint( "TOP", undefined, level.primaryprogressbarx, level.primaryprogressbary ); - else - bar setpoint( "CENTER", undefined, level.primaryprogressbarx, level.primaryprogressbary ); - - return bar; -} - -createprimaryprogressbartext() -{ - text = createfontstring( "objective", level.primaryprogressbarfontsize ); - - if ( level.splitscreen ) - text setpoint( "TOP", undefined, level.primaryprogressbartextx, level.primaryprogressbartexty ); - else - text setpoint( "CENTER", undefined, level.primaryprogressbartextx, level.primaryprogressbartexty ); - - text.sort = -1; - return text; -} - -createsecondaryprogressbar() -{ - secondaryprogressbarheight = getdvarintdefault( "scr_secondaryProgressBarHeight", level.secondaryprogressbarheight ); - secondaryprogressbarx = getdvarintdefault( "scr_secondaryProgressBarX", level.secondaryprogressbarx ); - secondaryprogressbary = getdvarintdefault( "scr_secondaryProgressBarY", level.secondaryprogressbary ); - bar = createbar( ( 1, 1, 1 ), level.secondaryprogressbarwidth, secondaryprogressbarheight ); - - if ( level.splitscreen ) - bar setpoint( "TOP", undefined, secondaryprogressbarx, secondaryprogressbary ); - else - bar setpoint( "CENTER", undefined, secondaryprogressbarx, secondaryprogressbary ); - - return bar; -} - -createsecondaryprogressbartext() -{ - secondaryprogressbartextx = getdvarintdefault( "scr_btx", level.secondaryprogressbartextx ); - secondaryprogressbartexty = getdvarintdefault( "scr_bty", level.secondaryprogressbartexty ); - text = createfontstring( "objective", level.primaryprogressbarfontsize ); - - if ( level.splitscreen ) - text setpoint( "TOP", undefined, secondaryprogressbartextx, secondaryprogressbartexty ); - else - text setpoint( "CENTER", undefined, secondaryprogressbartextx, secondaryprogressbartexty ); - - text.sort = -1; - return text; -} - -createteamprogressbar( team ) -{ - bar = createserverbar( ( 1, 0, 0 ), level.teamprogressbarwidth, level.teamprogressbarheight, undefined, team ); - bar setpoint( "TOP", undefined, 0, level.teamprogressbary ); - return bar; -} - -createteamprogressbartext( team ) -{ - text = createserverfontstring( "default", level.teamprogressbarfontsize, team ); - text setpoint( "TOP", undefined, 0, level.teamprogressbartexty ); - return text; -} - -setflashfrac( flashfrac ) -{ - self.bar.flashfrac = flashfrac; -} - -hideelem() -{ - if ( self.hidden ) - return; - - self.hidden = 1; - - if ( self.alpha != 0 ) - self.alpha = 0; - - if ( self.elemtype == "bar" || self.elemtype == "bar_shader" ) - { - self.bar.hidden = 1; - - if ( self.bar.alpha != 0 ) - self.bar.alpha = 0; - - self.barframe.hidden = 1; - - if ( self.barframe.alpha != 0 ) - self.barframe.alpha = 0; - } -} - -showelem() -{ - if ( !self.hidden ) - return; - - self.hidden = 0; - - if ( self.elemtype == "bar" || self.elemtype == "bar_shader" ) - { - if ( self.alpha != 0.5 ) - self.alpha = 0.5; - - self.bar.hidden = 0; - - if ( self.bar.alpha != 1 ) - self.bar.alpha = 1; - - self.barframe.hidden = 0; - - if ( self.barframe.alpha != 1 ) - self.barframe.alpha = 1; - } - else if ( self.alpha != 1 ) - self.alpha = 1; -} - -flashthread() -{ - self endon( "death" ); - - if ( !self.hidden ) - self.alpha = 1; - - while ( true ) - { - if ( self.frac >= self.flashfrac ) - { - if ( !self.hidden ) - { - self fadeovertime( 0.3 ); - self.alpha = 0.2; - wait 0.35; - self fadeovertime( 0.3 ); - self.alpha = 1; - } - - wait 0.7; - } - else - { - if ( !self.hidden && self.alpha != 1 ) - self.alpha = 1; - - wait 0.05; - } - } -} - -destroyelem() -{ - tempchildren = []; - - for ( index = 0; index < self.children.size; index++ ) - { - if ( isdefined( self.children[index] ) ) - tempchildren[tempchildren.size] = self.children[index]; - } - - for ( index = 0; index < tempchildren.size; index++ ) - tempchildren[index] setparent( self getparent() ); - - if ( self.elemtype == "bar" || self.elemtype == "bar_shader" ) - { - self.bar destroy(); - self.barframe destroy(); - } - - self destroy(); -} - -seticonshader( shader ) -{ - self setshader( shader, self.width, self.height ); -} - -setwidth( width ) -{ - self.width = width; -} - -setheight( height ) -{ - self.height = height; -} - -setsize( width, height ) -{ - self.width = width; - self.height = height; -} - -updatechildren() -{ - for ( index = 0; index < self.children.size; index++ ) - { - child = self.children[index]; - child setpoint( child.point, child.relativepoint, child.xoffset, child.yoffset ); - } -} - -createloadouticon( player, verindex, horindex, xpos, ypos ) -{ - iconsize = 32; - - if ( player issplitscreen() ) - iconsize = 22; - - ypos -= 90 + iconsize * ( 3 - verindex ); - xpos -= 10 + iconsize * horindex; - icon = createicon( "white", iconsize, iconsize ); - icon setpoint( "BOTTOM RIGHT", "BOTTOM RIGHT", xpos, ypos ); - icon.horzalign = "user_right"; - icon.vertalign = "user_bottom"; - icon.archived = 0; - icon.foreground = 0; - return icon; -} - -setloadouticoncoords( player, verindex, horindex, xpos, ypos ) -{ - iconsize = 32; - - if ( player issplitscreen() ) - iconsize = 22; - - ypos -= 90 + iconsize * ( 3 - verindex ); - xpos -= 10 + iconsize * horindex; - self setpoint( "BOTTOM RIGHT", "BOTTOM RIGHT", xpos, ypos ); - self.horzalign = "user_right"; - self.vertalign = "user_bottom"; - self.archived = 0; - self.foreground = 0; - self.alpha = 1; -} - -setloadouttextcoords( xcoord ) -{ - self setpoint( "RIGHT", "LEFT", xcoord, 0 ); -} - -createloadouttext( icon, xcoord ) -{ - text = createfontstring( "small", 1 ); - text setparent( icon ); - text setpoint( "RIGHT", "LEFT", xcoord, 0 ); - text.archived = 0; - text.alignx = "right"; - text.aligny = "middle"; - text.foreground = 0; - return text; -} - -showloadoutattribute( iconelem, icon, alpha, textelem, text ) -{ - iconsize = 32; - iconelem.alpha = alpha; - - if ( alpha ) - iconelem setshader( icon, iconsize, iconsize ); - - if ( isdefined( textelem ) ) - { - textelem.alpha = alpha; - - if ( alpha ) - textelem settext( text ); - } -} - -hideloadoutattribute( iconelem, fadetime, textelem, hidetextonly ) -{ - if ( isdefined( fadetime ) ) - { - if ( !isdefined( hidetextonly ) || !hidetextonly ) - iconelem fadeovertime( fadetime ); - - if ( isdefined( textelem ) ) - textelem fadeovertime( fadetime ); - } - - if ( !isdefined( hidetextonly ) || !hidetextonly ) - iconelem.alpha = 0; - - if ( isdefined( textelem ) ) - textelem.alpha = 0; -} - -showperks() -{ - ypos = 40; - - if ( self issplitscreen() ) - ypos = 5; - - if ( !isdefined( self.perkhudelem ) ) - self.perkhudelem = createloadouticon( self, 0, 0, 200, ypos ); - else - self.perkhudelem setloadouticoncoords( self, 0, 0, 200, ypos ); - - self.perkhudelem setperks( self ); - self.perkhudelem.x = -20; - self.perkhudelem.alpha = 0; - self.perkhudelem fadeovertime( 0.4 ); - self.perkhudelem.alpha = 1; - self.perkhudelem.hidewheninmenu = 1; -} - -showperk( index, perk, ypos ) -{ -/# - assert( game["state"] != "postgame" ); -#/ - - if ( !isdefined( self.perkicon ) ) - { - self.perkicon = []; - self.perkname = []; - } - - if ( !isdefined( self.perkicon[index] ) ) - { -/# - assert( !isdefined( self.perkname[index] ) ); -#/ - self.perkicon[index] = createloadouticon( self, index, 0, 200, ypos ); - self.perkname[index] = createloadouttext( self.perkicon[index], 160 ); - } - else - { - self.perkicon[index] setloadouticoncoords( self, index, 0, 200, ypos ); - self.perkname[index] setloadouttextcoords( 160 ); - } - - if ( perk == "perk_null" || perk == "weapon_null" || perk == "specialty_null" ) - alpha = 0; - else - { -/# - assert( isdefined( level.perknames[perk] ), perk ); -#/ - alpha = 1; - } - - showloadoutattribute( self.perkicon[index], perk, alpha, self.perkname[index], level.perknames[perk] ); - self.perkicon[index] moveovertime( 0.3 ); - self.perkicon[index].x = -5; - self.perkicon[index].hidewheninmenu = 1; - self.perkname[index] moveovertime( 0.3 ); - self.perkname[index].x = -40; - self.perkname[index].hidewheninmenu = 1; -} - -hideperks( fadetime ) -{ - if ( level.perksenabled == 1 ) - { - if ( game["state"] == "postgame" ) - { -/# - assert( !isdefined( self.perkhudelem ) ); -#/ - return; - } - } - -/# - assert( isdefined( self.perkhudelem ) ); -#/ - - if ( isdefined( self.perkhudelem ) ) - hideloadoutattribute( self.perkhudelem, fadetime ); -} - -hideperk( index, fadetime, hidetextonly ) -{ - if ( !isdefined( fadetime ) ) - fadetime = 0.05; - - if ( level.perksenabled == 1 ) - { - if ( game["state"] == "postgame" ) - { - if ( isdefined( self.perkicon ) ) - { -/# - assert( !isdefined( self.perkicon[index] ) ); -#/ -/# - assert( !isdefined( self.perkname[index] ) ); -#/ - } - - return; - } - -/# - assert( isdefined( self.perkicon[index] ) ); -#/ -/# - assert( isdefined( self.perkname[index] ) ); -#/ - - if ( isdefined( self.perkicon ) && isdefined( self.perkicon[index] ) && isdefined( self.perkname ) && isdefined( self.perkname[index] ) ) - hideloadoutattribute( self.perkicon[index], fadetime, self.perkname[index], hidetextonly ); - } -} - -hideallperks( fadetime, hidetextonly ) -{ - if ( level.perksenabled == 1 ) - hideperks( fadetime ); -} - -showkillstreak( index, killstreak, xpos, ypos ) -{ -/# - assert( game["state"] != "postgame" ); -#/ - - if ( !isdefined( self.killstreakicon ) ) - self.killstreakicon = []; - - if ( !isdefined( self.killstreakicon[index] ) ) - self.killstreakicon[index] = createloadouticon( self, 3, self.killstreak.size - 1 - index, xpos, ypos ); - - if ( killstreak == "killstreak_null" || killstreak == "weapon_null" ) - alpha = 0; - else - { -/# - assert( isdefined( level.killstreakicons[killstreak] ), killstreak ); -#/ - alpha = 1; - } - - showloadoutattribute( self.killstreakicon[index], level.killstreakicons[killstreak], alpha ); -} - -hidekillstreak( index, fadetime ) -{ - if ( iskillstreaksenabled() ) - { - if ( game["state"] == "postgame" ) - { -/# - assert( !isdefined( self.killstreakicon[index] ) ); -#/ - return; - } - -/# - assert( isdefined( self.killstreakicon[index] ) ); -#/ - hideloadoutattribute( self.killstreakicon[index], fadetime ); - } -} - -setgamemodeinfopoint() -{ - self.x = 11; - self.y = 120; - self.horzalign = "user_left"; - self.vertalign = "user_top"; - self.alignx = "left"; - self.aligny = "top"; -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_menus.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_menus.gsc deleted file mode 100644 index 1a66843..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_menus.gsc +++ /dev/null @@ -1,174 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -init() -{ - precachestring( &"open_ingame_menu" ); - game["menu_team"] = "team_marinesopfor"; - game["menu_initteam_allies"] = "initteam_marines"; - game["menu_initteam_axis"] = "initteam_opfor"; - game["menu_class"] = "class"; - game["menu_changeclass"] = "changeclass"; - game["menu_changeclass_offline"] = "changeclass"; - game["menu_wager_side_bet"] = "sidebet"; - game["menu_wager_side_bet_player"] = "sidebet_player"; - game["menu_changeclass_wager"] = "changeclass_wager"; - game["menu_changeclass_custom"] = "changeclass_custom"; - game["menu_changeclass_barebones"] = "changeclass_barebones"; - - foreach ( team in level.teams ) - game["menu_changeclass_" + team] = "changeclass"; - - game["menu_controls"] = "ingame_controls"; - game["menu_options"] = "ingame_options"; - game["menu_leavegame"] = "popup_leavegame"; - precachemenu( game["menu_controls"] ); - precachemenu( game["menu_options"] ); - precachemenu( game["menu_leavegame"] ); - precachemenu( "scoreboard" ); - precachemenu( "spectate" ); - precachemenu( game["menu_team"] ); - precachemenu( game["menu_changeclass_allies"] ); - precachemenu( game["menu_initteam_allies"] ); - precachemenu( game["menu_changeclass_axis"] ); - precachemenu( game["menu_class"] ); - precachemenu( game["menu_changeclass"] ); - precachemenu( game["menu_initteam_axis"] ); - precachemenu( game["menu_changeclass_offline"] ); - precachemenu( game["menu_changeclass_wager"] ); - precachemenu( game["menu_changeclass_custom"] ); - precachemenu( game["menu_changeclass_barebones"] ); - precachemenu( game["menu_wager_side_bet"] ); - precachemenu( game["menu_wager_side_bet_player"] ); - precachestring( &"MP_HOST_ENDED_GAME" ); - precachestring( &"MP_HOST_ENDGAME_RESPONSE" ); - level thread onplayerconnect(); -} - -onplayerconnect() -{ - for (;;) - { - level waittill( "connecting", player ); - - player thread onmenuresponse(); - } -} - -onmenuresponse() -{ - self endon( "disconnect" ); - - for (;;) - { - self waittill( "menuresponse", menu, response ); - - if ( response == "back" ) - { - self closemenu(); - self closeingamemenu(); - - if ( level.console ) - { - if ( menu == game["menu_changeclass"] || menu == game["menu_changeclass_offline"] || menu == game["menu_team"] || menu == game["menu_controls"] ) - { - if ( isdefined( level.teams[self.pers["team"]] ) ) - self openmenu( game["menu_class"] ); - } - } - - continue; - } - - if ( response == "changeteam" && level.allow_teamchange == "1" ) - { - self closemenu(); - self closeingamemenu(); - self openmenu( game["menu_team"] ); - } - - if ( response == "changeclass_marines_splitscreen" ) - self openmenu( "changeclass_marines_splitscreen" ); - - if ( response == "changeclass_opfor_splitscreen" ) - self openmenu( "changeclass_opfor_splitscreen" ); - - if ( response == "endgame" ) - { - if ( level.splitscreen ) - { - level.skipvote = 1; - - if ( !level.gameended ) - level thread maps\mp\gametypes\_globallogic::forceend(); - } - - continue; - } - - if ( response == "killserverpc" ) - { - level thread maps\mp\gametypes\_globallogic::killserverpc(); - continue; - } - - if ( response == "endround" ) - { - if ( !level.gameended ) - { - self gamehistoryplayerquit(); - level thread maps\mp\gametypes\_globallogic::forceend(); - } - else - { - self closemenu(); - self closeingamemenu(); - self iprintln( &"MP_HOST_ENDGAME_RESPONSE" ); - } - - continue; - } - - if ( menu == game["menu_team"] && level.allow_teamchange == "1" ) - { - switch ( response ) - { - case "autoassign": - self [[ level.autoassign ]]( 1 ); - break; - case "spectator": - self [[ level.spectator ]](); - break; - default: - self [[ level.teammenu ]]( response ); - break; - } - - continue; - } - - if ( menu == game["menu_changeclass"] || menu == game["menu_changeclass_offline"] || menu == game["menu_changeclass_wager"] || menu == game["menu_changeclass_custom"] || menu == game["menu_changeclass_barebones"] ) - { - self closemenu(); - self closeingamemenu(); - - if ( level.rankedmatch && issubstr( response, "custom" ) ) - { - if ( self isitemlocked( maps\mp\gametypes\_rank::getitemindex( "feature_cac" ) ) ) - kick( self getentitynumber() ); - } - - self.selectedclass = 1; - self [[ level.class ]]( response ); - continue; - } - - if ( menu == "spectate" ) - { - player = getplayerfromclientnum( int( response ) ); - - if ( isdefined( player ) ) - self setcurrentspectatorclient( player ); - } - } -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_perplayer.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_perplayer.gsc deleted file mode 100644 index 79e5a72..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_perplayer.gsc +++ /dev/null @@ -1,178 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -init( id, playerbegincallback, playerendcallback ) -{ - precacheshader( "objpoint_default" ); - handler = spawnstruct(); - handler.id = id; - handler.playerbegincallback = playerbegincallback; - handler.playerendcallback = playerendcallback; - handler.enabled = 0; - handler.players = []; - thread onplayerconnect( handler ); - level.handlerglobalflagval = 0; - return handler; -} - -enable( handler ) -{ - if ( handler.enabled ) - return; - - handler.enabled = 1; - level.handlerglobalflagval++; - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - players[i].handlerflagval = level.handlerglobalflagval; - - players = handler.players; - - for ( i = 0; i < players.size; i++ ) - { - if ( players[i].handlerflagval != level.handlerglobalflagval ) - continue; - - if ( players[i].handlers[handler.id].ready ) - players[i] handleplayer( handler ); - } -} - -disable( handler ) -{ - if ( !handler.enabled ) - return; - - handler.enabled = 0; - level.handlerglobalflagval++; - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - players[i].handlerflagval = level.handlerglobalflagval; - - players = handler.players; - - for ( i = 0; i < players.size; i++ ) - { - if ( players[i].handlerflagval != level.handlerglobalflagval ) - continue; - - if ( players[i].handlers[handler.id].ready ) - players[i] unhandleplayer( handler, 0, 0 ); - } -} - -onplayerconnect( handler ) -{ - for (;;) - { - level waittill( "connecting", player ); - - if ( !isdefined( player.handlers ) ) - player.handlers = []; - - player.handlers[handler.id] = spawnstruct(); - player.handlers[handler.id].ready = 0; - player.handlers[handler.id].handled = 0; - player.handlerflagval = -1; - handler.players[handler.players.size] = player; - player thread onplayerdisconnect( handler ); - player thread onplayerspawned( handler ); - player thread onjoinedteam( handler ); - player thread onjoinedspectators( handler ); - player thread onplayerkilled( handler ); - } -} - -onplayerdisconnect( handler ) -{ - self waittill( "disconnect" ); - - newplayers = []; - - for ( i = 0; i < handler.players.size; i++ ) - { - if ( handler.players[i] != self ) - newplayers[newplayers.size] = handler.players[i]; - } - - handler.players = newplayers; - self thread unhandleplayer( handler, 1, 1 ); -} - -onjoinedteam( handler ) -{ - self endon( "disconnect" ); - - for (;;) - { - self waittill( "joined_team" ); - - self thread unhandleplayer( handler, 1, 0 ); - } -} - -onjoinedspectators( handler ) -{ - self endon( "disconnect" ); - - for (;;) - { - self waittill( "joined_spectators" ); - - self thread unhandleplayer( handler, 1, 0 ); - } -} - -onplayerspawned( handler ) -{ - self endon( "disconnect" ); - - for (;;) - { - self waittill( "spawned_player" ); - - self thread handleplayer( handler ); - } -} - -onplayerkilled( handler ) -{ - self endon( "disconnect" ); - - for (;;) - { - self waittill( "killed_player" ); - - self thread unhandleplayer( handler, 1, 0 ); - } -} - -handleplayer( handler ) -{ - self.handlers[handler.id].ready = 1; - - if ( !handler.enabled ) - return; - - if ( self.handlers[handler.id].handled ) - return; - - self.handlers[handler.id].handled = 1; - self thread [[ handler.playerbegincallback ]](); -} - -unhandleplayer( handler, unsetready, disconnected ) -{ - if ( !disconnected && unsetready ) - self.handlers[handler.id].ready = 0; - - if ( !self.handlers[handler.id].handled ) - return; - - if ( !disconnected ) - self.handlers[handler.id].handled = 0; - - self thread [[ handler.playerendcallback ]]( disconnected ); -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_shellshock.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_shellshock.gsc deleted file mode 100644 index 1ff3fc3..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_shellshock.gsc +++ /dev/null @@ -1,57 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -init() -{ - precacheshellshock( "frag_grenade_mp" ); - precacheshellshock( "damage_mp" ); - precacherumble( "artillery_rumble" ); - precacherumble( "grenade_rumble" ); -} - -shellshockondamage( cause, damage ) -{ - if ( self maps\mp\_utility::isflashbanged() ) - return; - - if ( cause == "MOD_EXPLOSIVE" || cause == "MOD_GRENADE" || cause == "MOD_GRENADE_SPLASH" || cause == "MOD_PROJECTILE" || cause == "MOD_PROJECTILE_SPLASH" ) - { - time = 0; - - if ( damage >= 90 ) - time = 4; - else if ( damage >= 50 ) - time = 3; - else if ( damage >= 25 ) - time = 2; - else if ( damage > 10 ) - time = 2; - - if ( time ) - { - if ( self mayapplyscreeneffect() ) - self shellshock( "frag_grenade_mp", 0.5 ); - } - } -} - -endondeath() -{ - self waittill( "death" ); - - waittillframeend; - self notify( "end_explode" ); -} - -endontimer( timer ) -{ - self endon( "disconnect" ); - wait( timer ); - self notify( "end_on_timer" ); -} - -rcbomb_earthquake( position ) -{ - playrumbleonposition( "grenade_rumble", position ); - earthquake( 0.5, 0.5, self.origin, 512 ); -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_spawning.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_spawning.gsc deleted file mode 100644 index 66b6c7e..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_spawning.gsc +++ /dev/null @@ -1,1169 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -init() -{ - if ( !isdefined( level.gamemodespawndvars ) ) - level.gamemodespawndvars = ::default_gamemodespawndvars; - - level init_spawn_system(); - level.recently_deceased = []; - - foreach ( team in level.teams ) - level.recently_deceased[team] = spawn_array_struct(); - - level thread onplayerconnect(); - - if ( getdvar( _hash_AD6C19FE ) == "" ) - level.spawn_visibility_check_max = 20; - else - level.spawn_visibility_check_max = getdvarint( _hash_AD6C19FE ); - - level.spawnprotectiontime = getgametypesetting( "spawnprotectiontime" ); -/# - setdvar( "scr_debug_spawn_player", "" ); - setdvar( "scr_debug_render_spawn_data", "1" ); - setdvar( "scr_debug_render_snapshotmode", "0" ); - setdvar( "scr_spawn_point_test_mode", "0" ); - level.test_spawn_point_index = 0; - setdvar( "scr_debug_render_spawn_text", "1" ); -#/ - return; -} - -default_gamemodespawndvars( reset_dvars ) -{ - -} - -init_spawn_system() -{ - level.spawnsystem = spawnstruct(); - spawnsystem = level.spawnsystem; - level get_player_spawning_dvars( 1 ); - level thread initialize_player_spawning_dvars(); - spawnsystem.einfluencer_shape_sphere = 0; - spawnsystem.einfluencer_shape_cylinder = 1; - spawnsystem.einfluencer_type_normal = 0; - spawnsystem.einfluencer_type_player = 1; - spawnsystem.einfluencer_type_weapon = 2; - spawnsystem.einfluencer_type_dog = 3; - spawnsystem.einfluencer_type_vehicle = 4; - spawnsystem.einfluencer_type_game_mode = 6; - spawnsystem.einfluencer_type_enemy_spawned = 7; - spawnsystem.einfluencer_curve_constant = 0; - spawnsystem.einfluencer_curve_linear = 1; - spawnsystem.einfluencer_curve_steep = 2; - spawnsystem.einfluencer_curve_inverse_linear = 3; - spawnsystem.einfluencer_curve_negative_to_positive = 4; - spawnsystem.ispawn_teammask = []; - spawnsystem.ispawn_teammask_free = 1; - spawnsystem.ispawn_teammask["free"] = spawnsystem.ispawn_teammask_free; - all = spawnsystem.ispawn_teammask_free; - count = 1; - - foreach ( team in level.teams ) - { - spawnsystem.ispawn_teammask[team] = 1 << count; - all |= spawnsystem.ispawn_teammask[team]; - count++; - } - - spawnsystem.ispawn_teammask["all"] = all; -} - -onplayerconnect() -{ - level endon( "game_ended" ); - - for (;;) - { - level waittill( "connecting", player ); - - player setentertime( gettime() ); - player thread onplayerspawned(); - player thread ondisconnect(); - player thread onteamchange(); - player thread ongrenadethrow(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - level endon( "game_ended" ); - - for (;;) - { - self waittill( "spawned_player" ); - - self maps\mp\killstreaks\_airsupport::clearmonitoredspeed(); - self thread initialspawnprotection(); - self thread monitorgpsjammer(); - - if ( isdefined( self.pers["hasRadar"] ) && self.pers["hasRadar"] ) - self.hasspyplane = 1; - - self enable_player_influencers( 1 ); - self thread ondeath(); - } -} - -monitorgpsjammer() -{ - self endon( "death" ); - self endon( "disconnect" ); - - if ( self hasperk( "specialty_gpsjammer" ) == 0 ) - return; - - self gpsjammeractive(); - graceperiods = getdvarintdefault( "perk_gpsjammer_graceperiods", 4 ); - minspeed = getdvarintdefault( "perk_gpsjammer_min_speed", 100 ); - mindistance = getdvarintdefault( "perk_gpsjammer_min_distance", 10 ); - timeperiod = getdvarintdefault( "perk_gpsjammer_time_period", 200 ); - timeperiodsec = timeperiod / 1000; - minspeedsq = minspeed * minspeed; - mindistancesq = mindistance * mindistance; - - if ( minspeedsq == 0 ) - return; - -/# - assert( timeperiodsec >= 0.05 ); -#/ - - if ( timeperiodsec < 0.05 ) - return; - - hasperk = 1; - statechange = 0; - faileddistancecheck = 0; - currentfailcount = 0; - timepassed = 0; - timesincedistancecheck = 0; - previousorigin = self.origin; - gpsjammerprotection = 0; - - while ( true ) - { -/# - graceperiods = getdvarintdefault( "perk_gpsjammer_graceperiods", graceperiods ); - minspeed = getdvarintdefault( "perk_gpsjammer_min_speed", minspeed ); - mindistance = getdvarintdefault( "perk_gpsjammer_min_distance", mindistance ); - timeperiod = getdvarintdefault( "perk_gpsjammer_time_period", timeperiod ); - timeperiodsec = timeperiod / 1000; - minspeedsq = minspeed * minspeed; - mindistancesq = mindistance * mindistance; -#/ - gpsjammerprotection = 0; - - if ( isusingremote() || is_true( self.isplanting ) || is_true( self.isdefusing ) ) - gpsjammerprotection = 1; - else - { - if ( timesincedistancecheck > 1 ) - { - timesincedistancecheck = 0; - - if ( distancesquared( previousorigin, self.origin ) < mindistancesq ) - faileddistancecheck = 1; - else - faileddistancecheck = 0; - - previousorigin = self.origin; - } - - velocity = self getvelocity(); - speedsq = lengthsquared( velocity ); - - if ( speedsq > minspeedsq && faileddistancecheck == 0 ) - gpsjammerprotection = 1; - } - - if ( gpsjammerprotection == 1 ) - { - currentfailcount = 0; - - if ( hasperk == 0 ) - { - statechange = 0; - hasperk = 1; - self gpsjammeractive(); - } - } - else - { - currentfailcount++; - - if ( hasperk == 1 && currentfailcount >= graceperiods ) - { - statechange = 1; - hasperk = 0; - self gpsjammerinactive(); - } - } - - if ( statechange == 1 ) - level notify( "radar_status_change" ); - - timesincedistancecheck += timeperiodsec; - wait( timeperiodsec ); - } -} - -ondeath() -{ - self endon( "disconnect" ); - level endon( "game_ended" ); - - self waittill( "death" ); - - self enable_player_influencers( 0 ); - self create_body_influencers(); -} - -onteamchange() -{ - self endon( "disconnect" ); - level endon( "game_ended" ); - - while ( true ) - { - self waittill( "joined_team" ); - - self player_influencers_set_team(); - wait 0.05; - } -} - -ongrenadethrow() -{ - self endon( "disconnect" ); - level endon( "game_ended" ); - - while ( true ) - { - self waittill( "grenade_fire", grenade, weaponname ); - - level thread create_grenade_influencers( self.pers["team"], weaponname, grenade ); - wait 0.05; - } -} - -ondisconnect() -{ - level endon( "game_ended" ); - - self waittill( "disconnect" ); -} - -get_score_curve_index( curve ) -{ - switch ( curve ) - { - case "linear": - return level.spawnsystem.einfluencer_curve_linear; - case "steep": - return level.spawnsystem.einfluencer_curve_steep; - case "inverse_linear": - return level.spawnsystem.einfluencer_curve_linear; - case "negative_to_positive": - return level.spawnsystem.einfluencer_curve_negative_to_positive; - case "constant": - default: - return level.spawnsystem.einfluencer_curve_constant; - } -} - -get_influencer_type_index( curve ) -{ - -} - -create_player_influencers() -{ -/# - assert( !isdefined( self.influencer_enemy_sphere ) ); -#/ -/# - assert( !isdefined( self.influencer_weapon_cylinder ) ); -#/ -/# - assert( !level.teambased || !isdefined( self.influencer_friendly_sphere ) ); -#/ -/# - assert( !level.teambased || !isdefined( self.influencer_friendly_cylinder ) ); -#/ - - if ( !level.teambased ) - { - team_mask = level.spawnsystem.ispawn_teammask_free; - other_team_mask = level.spawnsystem.ispawn_teammask_free; - weapon_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else if ( isdefined( self.pers["team"] ) ) - { - team = self.pers["team"]; - team_mask = getteammask( team ); - other_team_mask = getotherteamsmask( team ); - weapon_team_mask = getotherteamsmask( team ); - } - else - { - team_mask = 0; - other_team_mask = 0; - weapon_team_mask = 0; - } - - if ( level.hardcoremode ) - weapon_team_mask |= team_mask; - - angles = self.angles; - origin = self.origin; - up = ( 0, 0, 1 ); - forward = ( 1, 0, 0 ); - cylinder_forward = up; - cylinder_up = forward; - self.influencer_enemy_sphere = addsphereinfluencer( level.spawnsystem.einfluencer_type_player, origin, level.spawnsystem.enemy_influencer_radius, level.spawnsystem.enemy_influencer_score, other_team_mask, "enemy,r,s", get_score_curve_index( level.spawnsystem.enemy_influencer_score_curve ), 0, self ); - - if ( level.teambased ) - { - cylinder_up = -1.0 * forward; - self.influencer_friendly_sphere = addsphereinfluencer( level.spawnsystem.einfluencer_type_player, origin, level.spawnsystem.friend_weak_influencer_radius, level.spawnsystem.friend_weak_influencer_score, team_mask, "friend_weak,r,s", get_score_curve_index( level.spawnsystem.friend_weak_influencer_score_curve ), 0, self ); - } - - self.spawn_influencers_created = 1; - - if ( !isdefined( self.pers["team"] ) || self.pers["team"] == "spectator" ) - self enable_player_influencers( 0 ); -} - -remove_player_influencers() -{ - if ( level.teambased && isdefined( self.influencer_friendly_sphere ) ) - { - removeinfluencer( self.influencer_friendly_sphere ); - self.influencer_friendly_sphere = undefined; - } - - if ( level.teambased && isdefined( self.influencer_friendly_cylinder ) ) - { - removeinfluencer( self.influencer_friendly_cylinder ); - self.influencer_friendly_cylinder = undefined; - } - - if ( isdefined( self.influencer_enemy_sphere ) ) - { - removeinfluencer( self.influencer_enemy_sphere ); - self.influencer_enemy_sphere = undefined; - } - - if ( isdefined( self.influencer_weapon_cylinder ) ) - { - removeinfluencer( self.influencer_weapon_cylinder ); - self.influencer_weapon_cylinder = undefined; - } -} - -enable_player_influencers( enabled ) -{ - if ( !isdefined( self.spawn_influencers_created ) ) - self create_player_influencers(); - - if ( isdefined( self.influencer_friendly_sphere ) ) - enableinfluencer( self.influencer_friendly_sphere, enabled ); - - if ( isdefined( self.influencer_friendly_cylinder ) ) - enableinfluencer( self.influencer_friendly_cylinder, enabled ); - - if ( isdefined( self.influencer_enemy_sphere ) ) - enableinfluencer( self.influencer_enemy_sphere, enabled ); - - if ( isdefined( self.influencer_weapon_cylinder ) ) - enableinfluencer( self.influencer_weapon_cylinder, enabled ); -} - -player_influencers_set_team() -{ - if ( !level.teambased ) - { - team_mask = level.spawnsystem.ispawn_teammask_free; - other_team_mask = level.spawnsystem.ispawn_teammask_free; - weapon_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - team = self.pers["team"]; - team_mask = getteammask( team ); - other_team_mask = getotherteamsmask( team ); - weapon_team_mask = getotherteamsmask( team ); - } - - if ( level.friendlyfire != 0 && level.teambased ) - weapon_team_mask |= team_mask; - - if ( isdefined( self.influencer_friendly_sphere ) ) - setinfluencerteammask( self.influencer_friendly_sphere, team_mask ); - - if ( isdefined( self.influencer_friendly_cylinder ) ) - setinfluencerteammask( self.influencer_friendly_cylinder, team_mask ); - - if ( isdefined( self.influencer_enemy_sphere ) ) - setinfluencerteammask( self.influencer_enemy_sphere, other_team_mask ); - - if ( isdefined( self.influencer_weapon_cylinder ) ) - setinfluencerteammask( self.influencer_weapon_cylinder, weapon_team_mask ); -} - -create_body_influencers() -{ - if ( level.teambased ) - team_mask = getteammask( self.pers["team"] ); - else - team_mask = level.spawnsystem.ispawn_teammask_free; - - addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.dead_friend_influencer_radius, level.spawnsystem.dead_friend_influencer_score, team_mask, "dead_friend,r,s", get_score_curve_index( level.spawnsystem.dead_friend_influencer_score_curve ), level.spawnsystem.dead_friend_influencer_timeout_seconds ); -} - -create_grenade_influencers( parent_team, weaponname, grenade ) -{ - pixbeginevent( "create_grenade_influencers" ); - - if ( !level.teambased ) - weapon_team_mask = level.spawnsystem.ispawn_teammask_free; - else - { - weapon_team_mask = getotherteamsmask( parent_team ); - - if ( level.friendlyfire ) - weapon_team_mask |= getteammask( parent_team ); - } - - if ( issubstr( weaponname, "napalmblob" ) || issubstr( weaponname, "gl_" ) ) - { - pixendevent(); - return; - } - - timeout = 0; - - if ( weaponname == "tabun_gas_mp" ) - timeout = 7.0; - - if ( isdefined( grenade.origin ) ) - { - if ( weaponname == "claymore_mp" || weaponname == "bouncingbetty_mp" ) - addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, grenade.origin, level.spawnsystem.claymore_influencer_radius, level.spawnsystem.claymore_influencer_score, weapon_team_mask, "claymore,r,s", get_score_curve_index( level.spawnsystem.claymore_influencer_score_curve ), timeout, grenade ); - else - addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, grenade.origin, level.spawnsystem.grenade_influencer_radius, level.spawnsystem.grenade_influencer_score, weapon_team_mask, "grenade,r,s", get_score_curve_index( level.spawnsystem.grenade_influencer_score_curve ), timeout, grenade ); - } - - pixendevent(); -} - -create_napalm_fire_influencers( point, direction, parent_team, duration ) -{ - timeout = duration; - weapon_team_mask = 0; - offset = vectorscale( anglestoforward( direction ), 1100 ); - addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point + 2.0 * offset, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); - addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point + offset, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); - addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); - addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point - offset, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); -} - -create_auto_turret_influencer( point, parent_team, angles ) -{ - if ( !level.teambased ) - weapon_team_mask = level.spawnsystem.ispawn_teammask_free; - else - weapon_team_mask = getotherteamsmask( parent_team ); - - projected_point = point + vectorscale( anglestoforward( angles ), level.spawnsystem.auto_turret_influencer_radius * 0.7 ); - influencerid = addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, projected_point, level.spawnsystem.auto_turret_influencer_radius, level.spawnsystem.auto_turret_influencer_score, weapon_team_mask, "auto_turret,r,s", get_score_curve_index( level.spawnsystem.auto_turret_influencer_score_curve ) ); - return influencerid; -} - -create_auto_turret_influencer_close( point, parent_team, angles ) -{ - if ( !level.teambased ) - weapon_team_mask = level.spawnsystem.ispawn_teammask_free; - else - weapon_team_mask = getotherteamsmask( parent_team ); - - projected_point = point + vectorscale( anglestoforward( angles ), level.spawnsystem.auto_turret_influencer_close_radius * 0.7 ); - influencerid = addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, projected_point, level.spawnsystem.auto_turret_influencer_close_radius, level.spawnsystem.auto_turret_influencer_close_score, weapon_team_mask, "auto_turret_close,r,s", get_score_curve_index( level.spawnsystem.auto_turret_influencer_close_score_curve ) ); - return influencerid; -} - -create_dog_influencers() -{ - if ( !level.teambased ) - dog_enemy_team_mask = level.spawnsystem.ispawn_teammask_free; - else - dog_enemy_team_mask = getotherteamsmask( self.aiteam ); - - addsphereinfluencer( level.spawnsystem.einfluencer_type_dog, self.origin, level.spawnsystem.dog_influencer_radius, level.spawnsystem.dog_influencer_score, dog_enemy_team_mask, "dog,r,s", get_score_curve_index( level.spawnsystem.dog_influencer_score_curve ), 0, self ); -} - -create_helicopter_influencers( parent_team ) -{ - if ( !level.teambased ) - team_mask = level.spawnsystem.ispawn_teammask_free; - else - team_mask = getotherteamsmask( parent_team ); - - self.influencer_helicopter_cylinder = addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, ( 0, 0, 0 ), ( 0, 0, 0 ), level.spawnsystem.helicopter_influencer_radius, level.spawnsystem.helicopter_influencer_length, level.spawnsystem.helicopter_influencer_score, team_mask, "helicopter,r,s", get_score_curve_index( level.spawnsystem.helicopter_influencer_score_curve ), 0, self ); -} - -remove_helicopter_influencers() -{ - if ( isdefined( self.influencer_helicopter_cylinder ) ) - removeinfluencer( self.influencer_helicopter_cylinder ); - - self.influencer_helicopter_cylinder = undefined; -} - -create_tvmissile_influencers( parent_team ) -{ - if ( !level.teambased || is_hardcore() ) - team_mask = level.spawnsystem.ispawn_teammask_free; - else - team_mask = getotherteamsmask( parent_team ); - - self.influencer_tvmissile_cylinder = addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, ( 0, 0, 0 ), ( 0, 0, 0 ), level.spawnsystem.tvmissile_influencer_radius, level.spawnsystem.tvmissile_influencer_length, level.spawnsystem.tvmissile_influencer_score, team_mask, "tvmissile,r,s", get_score_curve_index( level.spawnsystem.tvmissile_influencer_score_curve ), 0, self ); -} - -remove_tvmissile_influencers() -{ - if ( isdefined( self.influencer_tvmissile_cylinder ) ) - removeinfluencer( self.influencer_tvmissile_cylinder ); - - self.influencer_tvmissile_cylinder = undefined; -} - -create_artillery_influencers( point, radius ) -{ - weapon_team_mask = 0; - - if ( radius < 0 ) - thisradius = level.spawnsystem.artillery_influencer_radius; - else - thisradius = radius; - - return addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, point + vectorscale( ( 0, 0, -1 ), 2000.0 ), ( 1, 0, 0 ), ( 0, 0, 1 ), thisradius, 5000, level.spawnsystem.artillery_influencer_score, weapon_team_mask, "artillery,s,r", get_score_curve_index( level.spawnsystem.artillery_influencer_score_curve ), 7 ); -} - -create_vehicle_influencers() -{ - weapon_team_mask = 0; - vehicleradius = 144; - cylinderlength = level.spawnsystem.vehicle_influencer_lead_seconds; - up = ( 0, 0, 1 ); - forward = ( 1, 0, 0 ); - cylinder_forward = up; - cylinder_up = forward; - return addcylinderinfluencer( level.spawnsystem.einfluencer_type_vehicle, self.origin, cylinder_forward, cylinder_up, vehicleradius, cylinderlength, level.spawnsystem.vehicle_influencer_score, weapon_team_mask, "vehicle,s", get_score_curve_index( level.spawnsystem.vehicle_influencer_score_curve ), 0, self ); -} - -create_rcbomb_influencers( team ) -{ - if ( !level.teambased ) - other_team_mask = level.spawnsystem.ispawn_teammask_free; - else - other_team_mask = getotherteamsmask( team ); - - return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.rcbomb_influencer_radius, level.spawnsystem.rcbomb_influencer_score, other_team_mask, "rcbomb,r,s", get_score_curve_index( level.spawnsystem.rcbomb_influencer_score_curve ), 0, self ); -} - -create_qrdrone_influencers( team ) -{ - if ( !level.teambased ) - other_team_mask = level.spawnsystem.ispawn_teammask_free; - else - other_team_mask = getotherteamsmask( team ); - - self.influencer_qrdrone_cylinder = addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, ( 0, 0, 0 ), ( 0, 0, 0 ), level.spawnsystem.qrdrone_cylinder_influencer_radius, level.spawnsystem.qrdrone_cylinder_influencer_length, level.spawnsystem.qrdrone_cylinder_influencer_score, other_team_mask, "qrdrone_cyl,r,s", get_score_curve_index( level.spawnsystem.qrdrone_cylinder_influencer_score_curve ), 0, self ); - return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.qrdrone_influencer_radius, level.spawnsystem.qrdrone_influencer_score, other_team_mask, "qrdrone,r,s", get_score_curve_index( level.spawnsystem.qrdrone_influencer_score_curve ), 0, self ); -} - -create_aitank_influencers( team ) -{ - if ( !level.teambased ) - other_team_mask = level.spawnsystem.ispawn_teammask_free; - else - other_team_mask = getotherteamsmask( team ); - - return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.aitank_influencer_radius, level.spawnsystem.aitank_influencer_score, other_team_mask, "aitank,r,s", get_score_curve_index( level.spawnsystem.aitank_influencer_score_curve ), 0, self ); -} - -create_pegasus_influencer( origin, team ) -{ - if ( !level.teambased ) - other_team_mask = level.spawnsystem.ispawn_teammask_free; - else - other_team_mask = getotherteamsmask( team ); - - return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, origin, level.spawnsystem.pegasus_influencer_radius, level.spawnsystem.pegasus_influencer_score, other_team_mask, "pegasus,r,s", get_score_curve_index( level.spawnsystem.pegasus_influencer_score_curve ), 0 ); -} - -create_map_placed_influencers() -{ - staticinfluencerents = getentarray( "mp_uspawn_influencer", "classname" ); - - for ( i = 0; i < staticinfluencerents.size; i++ ) - { - staticinfluencerent = staticinfluencerents[i]; - - if ( isdefined( staticinfluencerent.script_gameobjectname ) && staticinfluencerent.script_gameobjectname == "twar" ) - continue; - - create_map_placed_influencer( staticinfluencerent ); - } -} - -create_map_placed_influencer( influencer_entity, optional_score_override ) -{ - influencer_id = -1; - - if ( isdefined( influencer_entity.script_shape ) && isdefined( influencer_entity.script_score ) && isdefined( influencer_entity.script_score_curve ) ) - { - switch ( influencer_entity.script_shape ) - { - case "sphere": - if ( isdefined( influencer_entity.radius ) ) - { - if ( isdefined( optional_score_override ) ) - score = optional_score_override; - else - score = influencer_entity.script_score; - - influencer_id = addsphereinfluencer( level.spawnsystem.einfluencer_type_game_mode, influencer_entity.origin, influencer_entity.radius, score, getteammask( influencer_entity.script_team ), "*map_defined", get_score_curve_index( influencer_entity.script_score_curve ) ); - } - else - { -/# - assertmsg( "Radiant-placed sphere spawn influencers require 'radius' parameter" ); -#/ - } - - break; - case "cylinder": - if ( isdefined( influencer_entity.radius ) && isdefined( influencer_entity.height ) ) - { - if ( isdefined( optional_score_override ) ) - score = optional_score_override; - else - score = influencer_entity.script_score; - - influencer_id = addcylinderinfluencer( level.spawnsystem.einfluencer_type_game_mode, influencer_entity.origin, anglestoforward( influencer_entity.angles ), anglestoup( influencer_entity.angles ), influencer_entity.radius, influencer_entity.height, score, getteammask( influencer_entity.script_team ), "*map_defined", get_score_curve_index( influencer_entity.script_score_curve ) ); - } - else - { -/# - assertmsg( "Radiant-placed cylinder spawn influencers require 'radius' and 'height' parameters" ); -#/ - } - - break; - default: -/# - assertmsg( "Unsupported script_shape value (\"" + influencer_entity.script_shape + "\") for unified spawning system static influencer. Supported shapes are \"cylinder\" and \"sphere\"." ); -#/ - break; - } - } - else - { -/# - assertmsg( "Radiant-placed spawn influencers require 'script_shape', 'script_score' and 'script_score_curve' parameters" ); -#/ - } - - return influencer_id; -} - -create_enemy_spawned_influencers( origin, team ) -{ - if ( !level.teambased ) - other_team_mask = level.spawnsystem.ispawn_teammask_free; - else - other_team_mask = getotherteamsmask( team ); - - return addsphereinfluencer( level.spawnsystem.einfluencer_type_enemy_spawned, origin, level.spawnsystem.enemy_spawned_influencer_radius, level.spawnsystem.enemy_spawned_influencer_score, other_team_mask, "enemy_spawned,r,s", get_score_curve_index( level.spawnsystem.enemy_spawned_influencer_score_curve ), level.spawnsystem.enemy_spawned_influencer_timeout_seconds ); -} - -updateallspawnpoints() -{ - foreach ( team in level.teams ) - gatherspawnentities( team ); - - clearspawnpoints(); - - if ( level.teambased ) - { - foreach ( team in level.teams ) - addspawnpoints( team, level.unified_spawn_points[team].a ); - } - else - { - foreach ( team in level.teams ) - addspawnpoints( "free", level.unified_spawn_points[team].a ); - } - - remove_unused_spawn_entities(); -} - -initialize_player_spawning_dvars() -{ -/# - reset_dvars = 1; - - while ( true ) - { - get_player_spawning_dvars( reset_dvars ); - reset_dvars = 0; - wait 2; - } -#/ -} - -get_player_spawning_dvars( reset_dvars ) -{ - k_player_height = get_player_height(); - player_height_times_10 = "" + 10.0 * k_player_height; - ss = level.spawnsystem; - player_influencer_radius = 15.0 * k_player_height; - player_influencer_score = 150.0; - dog_influencer_radius = 10.0 * k_player_height; - dog_influencer_score = 150.0; - ss.script_based_influencer_system = set_dvar_int_if_unset( "scr_script_based_influencer_system", "0", reset_dvars ); - ss.randomness_range = set_dvar_float_if_unset( "scr_spawn_randomness_range", "0", reset_dvars ); - ss.objective_facing_bonus = set_dvar_float_if_unset( "scr_spawn_objective_facing_bonus", "0", reset_dvars ); - - if ( level.multiteam ) - { - ss.friend_weak_influencer_score = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_score", "200", reset_dvars ); - ss.friend_weak_influencer_score_curve = set_dvar_if_unset( "scr_spawn_friend_weak_influencer_score_curve", "linear", reset_dvars ); - ss.friend_weak_influencer_radius = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_radius", "1200", reset_dvars ); - } - else - { - ss.friend_weak_influencer_score = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_score", "20", reset_dvars ); - ss.friend_weak_influencer_score_curve = set_dvar_if_unset( "scr_spawn_friend_weak_influencer_score_curve", "linear", reset_dvars ); - ss.friend_weak_influencer_radius = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_radius", "700", reset_dvars ); - } - - ss.enemy_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_score", "-150", reset_dvars ); - ss.enemy_influencer_score_curve = set_dvar_if_unset( "scr_spawn_enemy_influencer_score_curve", "linear", reset_dvars ); - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2600", reset_dvars ); - ss.dead_friend_influencer_timeout_seconds = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_timeout_seconds", "20", reset_dvars ); - ss.dead_friend_influencer_count = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_count", "7", reset_dvars ); - ss.dead_friend_influencer_score = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_score", "-100", reset_dvars ); - ss.dead_friend_influencer_score_curve = set_dvar_if_unset( "scr_spawn_dead_friend_influencer_score_curve", "steep", reset_dvars ); - ss.dead_friend_influencer_radius = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_radius", player_height_times_10, reset_dvars ); - ss.vehicle_influencer_score = set_dvar_float_if_unset( "scr_spawn_vehicle_influencer_score", "-50", reset_dvars ); - ss.vehicle_influencer_score_curve = set_dvar_if_unset( "scr_spawn_vehicle_influencer_score_curve", "linear", reset_dvars ); - ss.vehicle_influencer_lead_seconds = set_dvar_float_if_unset( "scr_spawn_vehicle_influencer_lead_seconds", "3", reset_dvars ); - ss.dog_influencer_score = set_dvar_float_if_unset( "scr_spawn_dog_influencer_score", "-150", reset_dvars ); - ss.dog_influencer_score_curve = set_dvar_if_unset( "scr_spawn_dog_influencer_score_curve", "steep", reset_dvars ); - ss.dog_influencer_radius = set_dvar_float_if_unset( "scr_spawn_dog_influencer_radius", "" + 15.0 * k_player_height, reset_dvars ); - ss.artillery_influencer_score = set_dvar_float_if_unset( "scr_spawn_artillery_influencer_score", "-600", reset_dvars ); - ss.artillery_influencer_score_curve = set_dvar_if_unset( "scr_spawn_artillery_influencer_score_curve", "linear", reset_dvars ); - ss.artillery_influencer_radius = set_dvar_float_if_unset( "scr_spawn_artillery_influencer_radius", "1200", reset_dvars ); - ss.grenade_influencer_score = set_dvar_float_if_unset( "scr_spawn_grenade_influencer_score", "-300", reset_dvars ); - ss.grenade_influencer_score_curve = set_dvar_if_unset( "scr_spawn_grenade_influencer_score_curve", "linear", reset_dvars ); - ss.grenade_influencer_radius = set_dvar_float_if_unset( "scr_spawn_grenade_influencer_radius", "" + 8.0 * k_player_height, reset_dvars ); - ss.grenade_endpoint_influencer_score = set_dvar_float_if_unset( "scr_spawn_grenade_endpoint_influencer_score", "-300", reset_dvars ); - ss.grenade_endpoint_influencer_score_curve = set_dvar_if_unset( "scr_spawn_grenade_endpoint_influencer_score_curve", "linear", reset_dvars ); - ss.grenade_endpoint_influencer_radius = set_dvar_float_if_unset( "scr_spawn_grenade_endpoint_influencer_radius", "" + 8.0 * k_player_height, reset_dvars ); - ss.claymore_influencer_score = set_dvar_float_if_unset( "scr_spawn_claymore_influencer_score", "-150", reset_dvars ); - ss.claymore_influencer_score_curve = set_dvar_if_unset( "scr_spawn_claymore_influencer_score_curve", "steep", reset_dvars ); - ss.claymore_influencer_radius = set_dvar_float_if_unset( "scr_spawn_claymore_influencer_radius", "" + 9.0 * k_player_height, reset_dvars ); - ss.napalm_influencer_score = set_dvar_float_if_unset( "scr_spawn_napalm_influencer_score", "-500", reset_dvars ); - ss.napalm_influencer_score_curve = set_dvar_if_unset( "scr_spawn_napalm_influencer_score_curve", "linear", reset_dvars ); - ss.napalm_influencer_radius = set_dvar_float_if_unset( "scr_spawn_napalm_influencer_radius", "" + 750, reset_dvars ); - ss.auto_turret_influencer_score = set_dvar_float_if_unset( "scr_spawn_auto_turret_influencer_score", "-650", reset_dvars ); - ss.auto_turret_influencer_score_curve = set_dvar_if_unset( "scr_spawn_auto_turret_influencer_score_curve", "linear", reset_dvars ); - ss.auto_turret_influencer_radius = set_dvar_float_if_unset( "scr_spawn_auto_turret_influencer_radius", "" + 1200, reset_dvars ); - ss.auto_turret_influencer_close_score = set_dvar_float_if_unset( "scr_spawn_auto_turret_influencer_close_score", "-250000", reset_dvars ); - ss.auto_turret_influencer_close_score_curve = set_dvar_if_unset( "scr_spawn_auto_turret_influencer_close_score_curve", "constant", reset_dvars ); - ss.auto_turret_influencer_close_radius = set_dvar_float_if_unset( "scr_spawn_auto_turret_influencer_close_radius", "" + 500, reset_dvars ); - ss.rcbomb_influencer_score = set_dvar_float_if_unset( "scr_spawn_rcbomb_influencer_score", "-200", reset_dvars ); - ss.rcbomb_influencer_score_curve = set_dvar_if_unset( "scr_spawn_rcbomb_influencer_score_curve", "steep", reset_dvars ); - ss.rcbomb_influencer_radius = set_dvar_float_if_unset( "scr_spawn_rcbomb_influencer_radius", "" + 25.0 * k_player_height, reset_dvars ); - ss.qrdrone_influencer_score = set_dvar_float_if_unset( "scr_spawn_qrdrone_influencer_score", "-200", reset_dvars ); - ss.qrdrone_influencer_score_curve = set_dvar_if_unset( "scr_spawn_qrdrone_influencer_score_curve", "steep", reset_dvars ); - ss.qrdrone_influencer_radius = set_dvar_float_if_unset( "scr_spawn_qrdrone_influencer_radius", "" + 25.0 * k_player_height, reset_dvars ); - ss.qrdrone_cylinder_influencer_score = set_dvar_float_if_unset( "scr_spawn_qrdrone_cylinder_influencer_score", "-300", reset_dvars ); - ss.qrdrone_cylinder_influencer_score_curve = set_dvar_if_unset( "scr_spawn_qrdrone_cylinder_influencer_score_curve", "linear", reset_dvars ); - ss.qrdrone_cylinder_influencer_radius = set_dvar_float_if_unset( "scr_spawn_qrdrone_cylinder_influencer_radius", 1000, reset_dvars ); - ss.qrdrone_cylinder_influencer_length = set_dvar_float_if_unset( "scr_spawn_qrdrone_cylinder_influencer_length", 2000, reset_dvars ); - ss.aitank_influencer_score = set_dvar_float_if_unset( "scr_spawn_aitank_influencer_score", "-200", reset_dvars ); - ss.aitank_influencer_score_curve = set_dvar_if_unset( "scr_spawn_aitank_influencer_score_curve", "linear", reset_dvars ); - ss.aitank_influencer_radius = set_dvar_float_if_unset( "scr_spawn_aitank_influencer_radius", "" + 25.0 * k_player_height, reset_dvars ); - ss.enemy_spawned_influencer_score_curve = set_dvar_if_unset( "scr_spawn_enemy_spawned_influencer_score_curve", "constant", reset_dvars ); - - if ( level.multiteam ) - { - ss.enemy_spawned_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_score", "-400", reset_dvars ); - ss.enemy_spawned_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_radius", "" + 1100, reset_dvars ); - } - else if ( level.teambased ) - { - ss.enemy_spawned_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_score", "-400", reset_dvars ); - ss.enemy_spawned_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_radius", "" + 1100, reset_dvars ); - } - else - { - ss.enemy_spawned_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_score", "-400", reset_dvars ); - ss.enemy_spawned_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_radius", "" + 1000, reset_dvars ); - } - - ss.enemy_spawned_influencer_timeout_seconds = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_timeout_seconds", "7", reset_dvars ); - ss.helicopter_influencer_score = set_dvar_float_if_unset( "scr_spawn_helicopter_influencer_score", "-500", reset_dvars ); - ss.helicopter_influencer_score_curve = set_dvar_if_unset( "scr_spawn_helicopter_influencer_score_curve", "linear", reset_dvars ); - ss.helicopter_influencer_radius = set_dvar_float_if_unset( "scr_spawn_helicopter_influencer_radius", "" + 2000, reset_dvars ); - ss.helicopter_influencer_length = set_dvar_float_if_unset( "scr_spawn_helicopter_influencer_length", "" + 3500, reset_dvars ); - ss.tvmissile_influencer_score = set_dvar_float_if_unset( "scr_spawn_tvmissile_influencer_score", "-400", reset_dvars ); - ss.tvmissile_influencer_score_curve = set_dvar_if_unset( "scr_spawn_tvmissile_influencer_score_curve", "linear", reset_dvars ); - ss.tvmissile_influencer_radius = set_dvar_float_if_unset( "scr_spawn_tvmissile_influencer_radius", "" + 2000, reset_dvars ); - ss.tvmissile_influencer_length = set_dvar_float_if_unset( "scr_spawn_tvmissile_influencer_length", "" + 3000, reset_dvars ); - ss.pegasus_influencer_score = set_dvar_float_if_unset( "scr_spawn_pegasus_influencer_score", "-250", reset_dvars ); - ss.pegasus_influencer_score_curve = set_dvar_if_unset( "scr_spawn_pegasus_influencer_score_curve", "linear", reset_dvars ); - ss.pegasus_influencer_radius = set_dvar_float_if_unset( "scr_spawn_pegasus_influencer_radius", "" + 20.0 * k_player_height, reset_dvars ); - - if ( !isdefined( ss.unifiedsideswitching ) ) - ss.unifiedsideswitching = 1; - - [[ level.gamemodespawndvars ]]( reset_dvars ); - - if ( isdefined( level.levelspawndvars ) ) - [[ level.levelspawndvars ]]( reset_dvars ); - - setspawnpointrandomvariation( ss.randomness_range ); -} - -level_use_unified_spawning( use ) -{ - -} - -onspawnplayer_unified( predictedspawn ) -{ - if ( !isdefined( predictedspawn ) ) - predictedspawn = 0; - -/# - if ( getdvarint( "scr_spawn_point_test_mode" ) != 0 ) - { - spawn_point = get_debug_spawnpoint( self ); - self spawn( spawn_point.origin, spawn_point.angles ); - return; - } -#/ - use_new_spawn_system = 1; - initial_spawn = 1; - - if ( isdefined( self.uspawn_already_spawned ) ) - initial_spawn = !self.uspawn_already_spawned; - - if ( level.usestartspawns ) - use_new_spawn_system = 0; - - if ( level.gametype == "sd" ) - use_new_spawn_system = 0; - - set_dvar_if_unset( "scr_spawn_force_unified", "0" ); - spawnoverride = self maps\mp\_tacticalinsertion::overridespawn( predictedspawn ); - - if ( use_new_spawn_system || getdvarint( "scr_spawn_force_unified" ) != 0 ) - { - if ( !spawnoverride ) - { - spawn_point = getspawnpoint( self, predictedspawn ); - - if ( isdefined( spawn_point ) ) - { - if ( predictedspawn ) - self predictspawnpoint( spawn_point.origin, spawn_point.angles ); - else - { - create_enemy_spawned_influencers( spawn_point.origin, self.pers["team"] ); - self spawn( spawn_point.origin, spawn_point.angles ); - } - } - else - { -/# - println( "ERROR: unable to locate a usable spawn point for player" ); -#/ - maps\mp\gametypes\_callbacksetup::abortlevel(); - } - } - else if ( predictedspawn && isdefined( self.tacticalinsertion ) ) - self predictspawnpoint( self.tacticalinsertion.origin, self.tacticalinsertion.angles ); - - if ( !predictedspawn ) - { - self.lastspawntime = gettime(); - self enable_player_influencers( 1 ); - } - } - else if ( !spawnoverride ) - [[ level.onspawnplayer ]]( predictedspawn ); - - if ( !predictedspawn ) - self.uspawn_already_spawned = 1; - - return; -} - -getspawnpoint( player_entity, predictedspawn ) -{ - if ( !isdefined( predictedspawn ) ) - predictedspawn = 0; - - if ( level.teambased ) - { - point_team = player_entity.pers["team"]; - influencer_team = player_entity.pers["team"]; - } - else - { - point_team = "free"; - influencer_team = "free"; - } - - if ( level.teambased && isdefined( game["switchedsides"] ) && game["switchedsides"] && level.spawnsystem.unifiedsideswitching ) - point_team = getotherteam( point_team ); - - best_spawn_entity = get_best_spawnpoint( point_team, influencer_team, player_entity, predictedspawn ); - - if ( !predictedspawn ) - player_entity.last_spawn_origin = best_spawn_entity.origin; - - return best_spawn_entity; -} - -get_debug_spawnpoint( player ) -{ - if ( level.teambased ) - team = player.pers["team"]; - else - team = "free"; - - index = level.test_spawn_point_index; - level.test_spawn_point_index++; - - if ( team == "free" ) - { - spawn_counts = 0; - - foreach ( team in level.teams ) - spawn_counts += level.unified_spawn_points[team].a.size; - - if ( level.test_spawn_point_index >= spawn_counts ) - level.test_spawn_point_index = 0; - - count = 0; - - foreach ( team in level.teams ) - { - size = level.unified_spawn_points[team].a.size; - - if ( level.test_spawn_point_index < count + size ) - return level.unified_spawn_points[team].a[level.test_spawn_point_index - count]; - - count += size; - } - } - else - { - if ( level.test_spawn_point_index >= level.unified_spawn_points[team].a.size ) - level.test_spawn_point_index = 0; - - return level.unified_spawn_points[team].a[level.test_spawn_point_index]; - } -} - -get_best_spawnpoint( point_team, influencer_team, player, predictedspawn ) -{ - if ( level.teambased ) - vis_team_mask = getotherteamsmask( player.pers["team"] ); - else - vis_team_mask = level.spawnsystem.ispawn_teammask_free; - - scored_spawn_points = getsortedspawnpoints( point_team, influencer_team, vis_team_mask, player, predictedspawn ); -/# - assert( scored_spawn_points.size > 0 ); -#/ -/# - assert( scored_spawn_points.size == 1 ); -#/ - - if ( !predictedspawn ) - bbprint( "mpspawnpointsused", "reason %s x %d y %d z %d", "point used", scored_spawn_points[0].origin ); - - return scored_spawn_points[0]; -} - -gatherspawnentities( player_team ) -{ - if ( !isdefined( level.unified_spawn_points ) ) - level.unified_spawn_points = []; - else if ( isdefined( level.unified_spawn_points[player_team] ) ) - return level.unified_spawn_points[player_team]; - - spawn_entities_s = spawn_array_struct(); - spawn_entities_s.a = getentarray( "mp_uspawn_point", "classname" ); - - if ( !isdefined( spawn_entities_s.a ) ) - spawn_entities_s.a = []; - - legacy_spawn_points = maps\mp\gametypes\_spawnlogic::getteamspawnpoints( player_team ); - - for ( legacy_spawn_index = 0; legacy_spawn_index < legacy_spawn_points.size; legacy_spawn_index++ ) - spawn_entities_s.a[spawn_entities_s.a.size] = legacy_spawn_points[legacy_spawn_index]; - - level.unified_spawn_points[player_team] = spawn_entities_s; - return spawn_entities_s; -} - -is_hardcore() -{ - return isdefined( level.hardcoremode ) && level.hardcoremode; -} - -teams_have_enmity( team1, team2 ) -{ - if ( !isdefined( team1 ) || !isdefined( team2 ) || level.gametype == "dm" ) - return 1; - - return team1 != "neutral" && team2 != "neutral" && team1 != team2; -} - -remove_unused_spawn_entities() -{ - spawn_entity_types = []; - spawn_entity_types[spawn_entity_types.size] = "mp_dm_spawn"; - spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn_allies_start"; - spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn_axis_start"; - spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn_team1_start"; - spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn_team2_start"; - spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn_team3_start"; - spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn_team4_start"; - spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn_team5_start"; - spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn_team6_start"; - spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn"; - spawn_entity_types[spawn_entity_types.size] = "mp_ctf_spawn_allies_start"; - spawn_entity_types[spawn_entity_types.size] = "mp_ctf_spawn_axis_start"; - spawn_entity_types[spawn_entity_types.size] = "mp_ctf_spawn_allies"; - spawn_entity_types[spawn_entity_types.size] = "mp_ctf_spawn_axis"; - spawn_entity_types[spawn_entity_types.size] = "mp_dom_spawn_allies_start"; - spawn_entity_types[spawn_entity_types.size] = "mp_dom_spawn_axis_start"; - spawn_entity_types[spawn_entity_types.size] = "mp_dom_spawn_flag_a"; - spawn_entity_types[spawn_entity_types.size] = "mp_dom_spawn_flag_b"; - spawn_entity_types[spawn_entity_types.size] = "mp_dom_spawn_flag_c"; - spawn_entity_types[spawn_entity_types.size] = "mp_dom_spawn"; - spawn_entity_types[spawn_entity_types.size] = "mp_sab_spawn_allies_start"; - spawn_entity_types[spawn_entity_types.size] = "mp_sab_spawn_axis_start"; - spawn_entity_types[spawn_entity_types.size] = "mp_sab_spawn_allies"; - spawn_entity_types[spawn_entity_types.size] = "mp_sab_spawn_axis"; - spawn_entity_types[spawn_entity_types.size] = "mp_sd_spawn_attacker"; - spawn_entity_types[spawn_entity_types.size] = "mp_sd_spawn_defender"; - spawn_entity_types[spawn_entity_types.size] = "mp_dem_spawn_attacker_start"; - spawn_entity_types[spawn_entity_types.size] = "mp_dem_spawn_defender_start"; - spawn_entity_types[spawn_entity_types.size] = "mp_dem_spawn_attackerOT_start"; - spawn_entity_types[spawn_entity_types.size] = "mp_dem_spawn_defenderOT_start"; - spawn_entity_types[spawn_entity_types.size] = "mp_dem_spawn_attacker"; - spawn_entity_types[spawn_entity_types.size] = "mp_dem_spawn_defender"; - spawn_entity_types[spawn_entity_types.size] = "mp_twar_spawn_axis_start"; - spawn_entity_types[spawn_entity_types.size] = "mp_twar_spawn_allies_start"; - spawn_entity_types[spawn_entity_types.size] = "mp_twar_spawn"; - - for ( i = 0; i < spawn_entity_types.size; i++ ) - { - if ( spawn_point_class_name_being_used( spawn_entity_types[i] ) ) - continue; - - spawnpoints = maps\mp\gametypes\_spawnlogic::getspawnpointarray( spawn_entity_types[i] ); - delete_all_spawns( spawnpoints ); - } -} - -delete_all_spawns( spawnpoints ) -{ - for ( i = 0; i < spawnpoints.size; i++ ) - spawnpoints[i] delete(); -} - -spawn_point_class_name_being_used( name ) -{ - if ( !isdefined( level.spawn_point_class_names ) ) - return false; - - for ( i = 0; i < level.spawn_point_class_names.size; i++ ) - { - if ( level.spawn_point_class_names[i] == name ) - return true; - } - - return false; -} - -codecallback_updatespawnpoints() -{ - foreach ( team in level.teams ) - maps\mp\gametypes\_spawnlogic::rebuildspawnpoints( team ); - - level.unified_spawn_points = undefined; - updateallspawnpoints(); -} - -initialspawnprotection() -{ - self endon( "death" ); - self endon( "disconnect" ); - self thread maps\mp\killstreaks\_airsupport::monitorspeed( level.spawnprotectiontime ); - - if ( !isdefined( level.spawnprotectiontime ) || level.spawnprotectiontime == 0 ) - return; - - self.specialty_nottargetedbyairsupport = 1; - self spawnprotectionactive(); - wait( level.spawnprotectiontime ); - self spawnprotectioninactive(); - self.specialty_nottargetedbyairsupport = undefined; -} - -getteamstartspawnname( team, spawnpointnamebase ) -{ - spawn_point_team_name = team; - - if ( !level.multiteam && game["switchedsides"] ) - spawn_point_team_name = getotherteam( team ); - - if ( level.multiteam ) - { - if ( team == "axis" ) - spawn_point_team_name = "team1"; - else if ( team == "allies" ) - spawn_point_team_name = "team2"; - - if ( !isoneround() ) - { - number = int( getsubstr( spawn_point_team_name, 4, 5 ) ) - 1; - number = ( number + game["roundsplayed"] ) % level.teams.size + 1; - spawn_point_team_name = "team" + number; - } - } - - return spawnpointnamebase + "_" + spawn_point_team_name + "_start"; -} - -gettdmstartspawnname( team ) -{ - return getteamstartspawnname( team, "mp_tdm_spawn" ); -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_spawnlogic.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_spawnlogic.gsc deleted file mode 100644 index 41ef34c..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_spawnlogic.gsc +++ /dev/null @@ -1,2034 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -onplayerconnect() -{ - for (;;) - level waittill( "connected", player ); -} - -findboxcenter( mins, maxs ) -{ - center = ( 0, 0, 0 ); - center = maxs - mins; - center = ( center[0] / 2, center[1] / 2, center[2] / 2 ) + mins; - return center; -} - -expandmins( mins, point ) -{ - if ( mins[0] > point[0] ) - mins = ( point[0], mins[1], mins[2] ); - - if ( mins[1] > point[1] ) - mins = ( mins[0], point[1], mins[2] ); - - if ( mins[2] > point[2] ) - mins = ( mins[0], mins[1], point[2] ); - - return mins; -} - -expandmaxs( maxs, point ) -{ - if ( maxs[0] < point[0] ) - maxs = ( point[0], maxs[1], maxs[2] ); - - if ( maxs[1] < point[1] ) - maxs = ( maxs[0], point[1], maxs[2] ); - - if ( maxs[2] < point[2] ) - maxs = ( maxs[0], maxs[1], point[2] ); - - return maxs; -} - -addspawnpointsinternal( team, spawnpointname ) -{ - oldspawnpoints = []; - - if ( level.teamspawnpoints[team].size ) - oldspawnpoints = level.teamspawnpoints[team]; - - level.teamspawnpoints[team] = getspawnpointarray( spawnpointname ); - - if ( !isdefined( level.spawnpoints ) ) - level.spawnpoints = []; - - for ( index = 0; index < level.teamspawnpoints[team].size; index++ ) - { - spawnpoint = level.teamspawnpoints[team][index]; - - if ( !isdefined( spawnpoint.inited ) ) - { - spawnpoint spawnpointinit(); - level.spawnpoints[level.spawnpoints.size] = spawnpoint; - } - } - - for ( index = 0; index < oldspawnpoints.size; index++ ) - { - origin = oldspawnpoints[index].origin; - level.spawnmins = expandmins( level.spawnmins, origin ); - level.spawnmaxs = expandmaxs( level.spawnmaxs, origin ); - level.teamspawnpoints[team][level.teamspawnpoints[team].size] = oldspawnpoints[index]; - } - - if ( !level.teamspawnpoints[team].size ) - { -/# - println( "^1ERROR: No " + spawnpointname + " spawnpoints found in level!" ); -#/ - maps\mp\gametypes\_callbacksetup::abortlevel(); - wait 1; - return; - } -} - -clearspawnpoints() -{ - foreach ( team in level.teams ) - level.teamspawnpoints[team] = []; - - level.spawnpoints = []; - level.unified_spawn_points = undefined; -} - -addspawnpoints( team, spawnpointname ) -{ - addspawnpointclassname( spawnpointname ); - addspawnpointteamclassname( team, spawnpointname ); - addspawnpointsinternal( team, spawnpointname ); -} - -rebuildspawnpoints( team ) -{ - level.teamspawnpoints[team] = []; - - for ( index = 0; index < level.spawn_point_team_class_names[team].size; index++ ) - addspawnpointsinternal( team, level.spawn_point_team_class_names[team][index] ); -} - -placespawnpoints( spawnpointname ) -{ - addspawnpointclassname( spawnpointname ); - spawnpoints = getspawnpointarray( spawnpointname ); -/# - if ( !isdefined( level.extraspawnpointsused ) ) - level.extraspawnpointsused = []; -#/ - - if ( !spawnpoints.size ) - { -/# - println( "^1No " + spawnpointname + " spawnpoints found in level!" ); -#/ - maps\mp\gametypes\_callbacksetup::abortlevel(); - wait 1; - return; - } - - for ( index = 0; index < spawnpoints.size; index++ ) - { - spawnpoints[index] spawnpointinit(); -/# - spawnpoints[index].fakeclassname = spawnpointname; - level.extraspawnpointsused[level.extraspawnpointsused.size] = spawnpoints[index]; -#/ - } -} - -dropspawnpoints( spawnpointname ) -{ - spawnpoints = getspawnpointarray( spawnpointname ); - - if ( !spawnpoints.size ) - { -/# - println( "^1No " + spawnpointname + " spawnpoints found in level!" ); -#/ - return; - } - - for ( index = 0; index < spawnpoints.size; index++ ) - spawnpoints[index] placespawnpoint(); -} - -addspawnpointclassname( spawnpointclassname ) -{ - if ( !isdefined( level.spawn_point_class_names ) ) - level.spawn_point_class_names = []; - - level.spawn_point_class_names[level.spawn_point_class_names.size] = spawnpointclassname; -} - -addspawnpointteamclassname( team, spawnpointclassname ) -{ - level.spawn_point_team_class_names[team][level.spawn_point_team_class_names[team].size] = spawnpointclassname; -} - -getspawnpointarray( classname ) -{ - spawnpoints = getentarray( classname, "classname" ); - - if ( !isdefined( level.extraspawnpoints ) || !isdefined( level.extraspawnpoints[classname] ) ) - return spawnpoints; - - for ( i = 0; i < level.extraspawnpoints[classname].size; i++ ) - spawnpoints[spawnpoints.size] = level.extraspawnpoints[classname][i]; - - return spawnpoints; -} - -spawnpointinit() -{ - spawnpoint = self; - origin = spawnpoint.origin; - - if ( !level.spawnminsmaxsprimed ) - { - level.spawnmins = origin; - level.spawnmaxs = origin; - level.spawnminsmaxsprimed = 1; - } - else - { - level.spawnmins = expandmins( level.spawnmins, origin ); - level.spawnmaxs = expandmaxs( level.spawnmaxs, origin ); - } - - spawnpoint placespawnpoint(); - spawnpoint.forward = anglestoforward( spawnpoint.angles ); - spawnpoint.sighttracepoint = spawnpoint.origin + vectorscale( ( 0, 0, 1 ), 50.0 ); - spawnpoint.inited = 1; -} - -getteamspawnpoints( team ) -{ - return level.teamspawnpoints[team]; -} - -getspawnpoint_final( spawnpoints, useweights ) -{ - bestspawnpoint = undefined; - - if ( !isdefined( spawnpoints ) || spawnpoints.size == 0 ) - return undefined; - - if ( !isdefined( useweights ) ) - useweights = 1; - - if ( useweights ) - { - bestspawnpoint = getbestweightedspawnpoint( spawnpoints ); - thread spawnweightdebug( spawnpoints ); - } - else - { - for ( i = 0; i < spawnpoints.size; i++ ) - { - if ( isdefined( self.lastspawnpoint ) && self.lastspawnpoint == spawnpoints[i] ) - continue; - - if ( positionwouldtelefrag( spawnpoints[i].origin ) ) - continue; - - bestspawnpoint = spawnpoints[i]; - break; - } - - if ( !isdefined( bestspawnpoint ) ) - { - if ( isdefined( self.lastspawnpoint ) && !positionwouldtelefrag( self.lastspawnpoint.origin ) ) - { - for ( i = 0; i < spawnpoints.size; i++ ) - { - if ( spawnpoints[i] == self.lastspawnpoint ) - { - bestspawnpoint = spawnpoints[i]; - break; - } - } - } - } - } - - if ( !isdefined( bestspawnpoint ) ) - { - if ( useweights ) - bestspawnpoint = spawnpoints[randomint( spawnpoints.size )]; - else - bestspawnpoint = spawnpoints[0]; - } - - self finalizespawnpointchoice( bestspawnpoint ); -/# - self storespawndata( spawnpoints, useweights, bestspawnpoint ); -#/ - return bestspawnpoint; -} - -finalizespawnpointchoice( spawnpoint ) -{ - time = gettime(); - self.lastspawnpoint = spawnpoint; - self.lastspawntime = time; - spawnpoint.lastspawnedplayer = self; - spawnpoint.lastspawntime = time; -} - -getbestweightedspawnpoint( spawnpoints ) -{ - maxsighttracedspawnpoints = 3; - - for ( try = 0; try <= maxsighttracedspawnpoints; try++ ) - { - bestspawnpoints = []; - bestweight = undefined; - bestspawnpoint = undefined; - - for ( i = 0; i < spawnpoints.size; i++ ) - { - if ( !isdefined( bestweight ) || spawnpoints[i].weight > bestweight ) - { - if ( positionwouldtelefrag( spawnpoints[i].origin ) ) - continue; - - bestspawnpoints = []; - bestspawnpoints[0] = spawnpoints[i]; - bestweight = spawnpoints[i].weight; - continue; - } - - if ( spawnpoints[i].weight == bestweight ) - { - if ( positionwouldtelefrag( spawnpoints[i].origin ) ) - continue; - - bestspawnpoints[bestspawnpoints.size] = spawnpoints[i]; - } - } - - if ( bestspawnpoints.size == 0 ) - return undefined; - - bestspawnpoint = bestspawnpoints[randomint( bestspawnpoints.size )]; - - if ( try == maxsighttracedspawnpoints ) - return bestspawnpoint; - - if ( isdefined( bestspawnpoint.lastsighttracetime ) && bestspawnpoint.lastsighttracetime == gettime() ) - return bestspawnpoint; - - if ( !lastminutesighttraces( bestspawnpoint ) ) - return bestspawnpoint; - - penalty = getlospenalty(); -/# - if ( level.storespawndata || level.debugspawning ) - bestspawnpoint.spawndata[bestspawnpoint.spawndata.size] = "Last minute sight trace: -" + penalty; -#/ - bestspawnpoint.weight -= penalty; - bestspawnpoint.lastsighttracetime = gettime(); - } -} - -checkbad( spawnpoint ) -{ -/# - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - - if ( !isalive( player ) || player.sessionstate != "playing" ) - continue; - - if ( level.teambased && player.team == self.team ) - continue; - - losexists = bullettracepassed( player.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), spawnpoint.sighttracepoint, 0, undefined ); - - if ( losexists ) - thread badspawnline( spawnpoint.sighttracepoint, player.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), self.name, player.name ); - } -#/ -} - -badspawnline( start, end, name1, name2 ) -{ -/# - dist = distance( start, end ); - - for ( i = 0; i < 200; i++ ) - { - line( start, end, ( 1, 0, 0 ) ); - print3d( start, "Bad spawn! " + name1 + ", dist = " + dist ); - print3d( end, name2 ); - wait 0.05; - } -#/ -} - -storespawndata( spawnpoints, useweights, bestspawnpoint ) -{ -/# - if ( !isdefined( level.storespawndata ) || !level.storespawndata ) - return; - - level.storespawndata = getdvarint( "scr_recordspawndata" ); - - if ( !level.storespawndata ) - return; - - if ( !isdefined( level.spawnid ) ) - { - level.spawngameid = randomint( 100 ); - level.spawnid = 0; - } - - if ( bestspawnpoint.classname == "mp_global_intermission" ) - return; - - level.spawnid++; - file = openfile( "spawndata.txt", "append" ); - fprintfields( file, level.spawngameid + "." + level.spawnid + "," + spawnpoints.size + "," + self.name ); - - for ( i = 0; i < spawnpoints.size; i++ ) - { - str = vectostr( spawnpoints[i].origin ) + ","; - - if ( spawnpoints[i] == bestspawnpoint ) - str += "1,"; - else - str += "0,"; - - if ( !useweights ) - str += "0,"; - else - str += ( spawnpoints[i].weight + "," ); - - if ( !isdefined( spawnpoints[i].spawndata ) ) - spawnpoints[i].spawndata = []; - - if ( !isdefined( spawnpoints[i].sightchecks ) ) - spawnpoints[i].sightchecks = []; - - str += ( spawnpoints[i].spawndata.size + "," ); - - for ( j = 0; j < spawnpoints[i].spawndata.size; j++ ) - str += ( spawnpoints[i].spawndata[j] + "," ); - - str += ( spawnpoints[i].sightchecks.size + "," ); - - for ( j = 0; j < spawnpoints[i].sightchecks.size; j++ ) - str += ( spawnpoints[i].sightchecks[j].penalty + "," + vectostr( spawnpoints[i].origin ) + "," ); - - fprintfields( file, str ); - } - - obj = spawnstruct(); - getallalliedandenemyplayers( obj ); - numallies = 0; - numenemies = 0; - str = ""; - - for ( i = 0; i < obj.allies.size; i++ ) - { - if ( obj.allies[i] == self ) - continue; - - numallies++; - str += ( vectostr( obj.allies[i].origin ) + "," ); - } - - for ( i = 0; i < obj.enemies.size; i++ ) - { - numenemies++; - str += ( vectostr( obj.enemies[i].origin ) + "," ); - } - - str = numallies + "," + numenemies + "," + str; - fprintfields( file, str ); - otherdata = []; - - if ( isdefined( level.bombguy ) ) - { - index = otherdata.size; - otherdata[index] = spawnstruct(); - otherdata[index].origin = level.bombguy.origin + vectorscale( ( 0, 0, 1 ), 20.0 ); - otherdata[index].text = "Bomb holder"; - } - else if ( isdefined( level.bombpos ) ) - { - index = otherdata.size; - otherdata[index] = spawnstruct(); - otherdata[index].origin = level.bombpos; - otherdata[index].text = "Bomb"; - } - - if ( isdefined( level.flags ) ) - { - for ( i = 0; i < level.flags.size; i++ ) - { - index = otherdata.size; - otherdata[index] = spawnstruct(); - otherdata[index].origin = level.flags[i].origin; - otherdata[index].text = level.flags[i].useobj maps\mp\gametypes\_gameobjects::getownerteam() + " flag"; - } - } - - str = otherdata.size + ","; - - for ( i = 0; i < otherdata.size; i++ ) - str += ( vectostr( otherdata[i].origin ) + "," + otherdata[i].text + "," ); - - fprintfields( file, str ); - closefile( file ); - thisspawnid = level.spawngameid + "." + level.spawnid; - - if ( isdefined( self.thisspawnid ) ) - { - - } - - self.thisspawnid = thisspawnid; -#/ -} - -readspawndata( desiredid, relativepos ) -{ -/# - file = openfile( "spawndata.txt", "read" ); - - if ( file < 0 ) - return; - - oldspawndata = level.curspawndata; - level.curspawndata = undefined; - prev = undefined; - prevthisplayer = undefined; - lookingfornextthisplayer = 0; - lookingfornext = 0; - - if ( isdefined( relativepos ) && !isdefined( oldspawndata ) ) - return; - - while ( true ) - { - if ( freadln( file ) <= 0 ) - break; - - data = spawnstruct(); - data.id = fgetarg( file, 0 ); - numspawns = int( fgetarg( file, 1 ) ); - - if ( numspawns > 256 ) - break; - - data.playername = fgetarg( file, 2 ); - data.spawnpoints = []; - data.friends = []; - data.enemies = []; - data.otherdata = []; - - for ( i = 0; i < numspawns; i++ ) - { - if ( freadln( file ) <= 0 ) - break; - - spawnpoint = spawnstruct(); - spawnpoint.origin = strtovec( fgetarg( file, 0 ) ); - spawnpoint.winner = int( fgetarg( file, 1 ) ); - spawnpoint.weight = int( fgetarg( file, 2 ) ); - spawnpoint.data = []; - spawnpoint.sightchecks = []; - - if ( i == 0 ) - { - data.minweight = spawnpoint.weight; - data.maxweight = spawnpoint.weight; - } - else - { - if ( spawnpoint.weight < data.minweight ) - data.minweight = spawnpoint.weight; - - if ( spawnpoint.weight > data.maxweight ) - data.maxweight = spawnpoint.weight; - } - - argnum = 4; - numdata = int( fgetarg( file, 3 ) ); - - if ( numdata > 256 ) - break; - - for ( j = 0; j < numdata; j++ ) - { - spawnpoint.data[spawnpoint.data.size] = fgetarg( file, argnum ); - argnum++; - } - - numsightchecks = int( fgetarg( file, argnum ) ); - argnum++; - - if ( numsightchecks > 256 ) - break; - - for ( j = 0; j < numsightchecks; j++ ) - { - index = spawnpoint.sightchecks.size; - spawnpoint.sightchecks[index] = spawnstruct(); - spawnpoint.sightchecks[index].penalty = int( fgetarg( file, argnum ) ); - argnum++; - spawnpoint.sightchecks[index].origin = strtovec( fgetarg( file, argnum ) ); - argnum++; - } - - data.spawnpoints[data.spawnpoints.size] = spawnpoint; - } - - if ( !isdefined( data.minweight ) ) - { - data.minweight = -1; - data.maxweight = 0; - } - - if ( data.minweight == data.maxweight ) - data.minweight -= 1; - - if ( freadln( file ) <= 0 ) - break; - - numfriends = int( fgetarg( file, 0 ) ); - numenemies = int( fgetarg( file, 1 ) ); - - if ( numfriends > 32 || numenemies > 32 ) - break; - - argnum = 2; - - for ( i = 0; i < numfriends; i++ ) - { - data.friends[data.friends.size] = strtovec( fgetarg( file, argnum ) ); - argnum++; - } - - for ( i = 0; i < numenemies; i++ ) - { - data.enemies[data.enemies.size] = strtovec( fgetarg( file, argnum ) ); - argnum++; - } - - if ( freadln( file ) <= 0 ) - break; - - numotherdata = int( fgetarg( file, 0 ) ); - argnum = 1; - - for ( i = 0; i < numotherdata; i++ ) - { - otherdata = spawnstruct(); - otherdata.origin = strtovec( fgetarg( file, argnum ) ); - argnum++; - otherdata.text = fgetarg( file, argnum ); - argnum++; - data.otherdata[data.otherdata.size] = otherdata; - } - - if ( isdefined( relativepos ) ) - { - if ( relativepos == "prevthisplayer" ) - { - if ( data.id == oldspawndata.id ) - { - level.curspawndata = prevthisplayer; - break; - } - } - else if ( relativepos == "prev" ) - { - if ( data.id == oldspawndata.id ) - { - level.curspawndata = prev; - break; - } - } - else if ( relativepos == "nextthisplayer" ) - { - if ( lookingfornextthisplayer ) - { - level.curspawndata = data; - break; - } - else if ( data.id == oldspawndata.id ) - lookingfornextthisplayer = 1; - } - else if ( relativepos == "next" ) - { - if ( lookingfornext ) - { - level.curspawndata = data; - break; - } - else if ( data.id == oldspawndata.id ) - lookingfornext = 1; - } - } - else if ( data.id == desiredid ) - { - level.curspawndata = data; - break; - } - - prev = data; - - if ( isdefined( oldspawndata ) && data.playername == oldspawndata.playername ) - prevthisplayer = data; - } - - closefile( file ); -#/ -} - -drawspawndata() -{ -/# - level notify( "drawing_spawn_data" ); - level endon( "drawing_spawn_data" ); - textoffset = vectorscale( ( 0, 0, -1 ), 12.0 ); - - while ( true ) - { - if ( !isdefined( level.curspawndata ) ) - { - wait 0.5; - continue; - } - - for ( i = 0; i < level.curspawndata.friends.size; i++ ) - print3d( level.curspawndata.friends[i], "=)", ( 0.5, 1, 0.5 ), 1, 5 ); - - for ( i = 0; i < level.curspawndata.enemies.size; i++ ) - print3d( level.curspawndata.enemies[i], "=(", ( 1, 0.5, 0.5 ), 1, 5 ); - - for ( i = 0; i < level.curspawndata.otherdata.size; i++ ) - print3d( level.curspawndata.otherdata[i].origin, level.curspawndata.otherdata[i].text, ( 0.5, 0.75, 1 ), 1, 2 ); - - for ( i = 0; i < level.curspawndata.spawnpoints.size; i++ ) - { - sp = level.curspawndata.spawnpoints[i]; - orig = sp.sighttracepoint; - - if ( sp.winner ) - { - print3d( orig, level.curspawndata.playername + " spawned here", ( 0.5, 0.5, 1 ), 1, 2 ); - orig += textoffset; - } - - amnt = ( sp.weight - level.curspawndata.minweight ) / ( level.curspawndata.maxweight - level.curspawndata.minweight ); - print3d( orig, "Weight: " + sp.weight, ( 1 - amnt, amnt, 0.5 ) ); - orig += textoffset; - - for ( j = 0; j < sp.data.size; j++ ) - { - print3d( orig, sp.data[j], ( 1, 1, 1 ) ); - orig += textoffset; - } - - for ( j = 0; j < sp.sightchecks.size; j++ ) - { - print3d( orig, "Sightchecks: -" + sp.sightchecks[j].penalty, ( 1, 0.5, 0.5 ) ); - orig += textoffset; - } - } - - wait 0.05; - } -#/ -} - -vectostr( vec ) -{ -/# - return int( vec[0] ) + "/" + int( vec[1] ) + "/" + int( vec[2] ); -#/ -} - -strtovec( str ) -{ -/# - parts = strtok( str, "/" ); - - if ( parts.size != 3 ) - return ( 0, 0, 0 ); - - return ( int( parts[0] ), int( parts[1] ), int( parts[2] ) ); -#/ -} - -getspawnpoint_random( spawnpoints ) -{ - if ( !isdefined( spawnpoints ) ) - return undefined; - - for ( i = 0; i < spawnpoints.size; i++ ) - { - j = randomint( spawnpoints.size ); - spawnpoint = spawnpoints[i]; - spawnpoints[i] = spawnpoints[j]; - spawnpoints[j] = spawnpoint; - } - - return getspawnpoint_final( spawnpoints, 0 ); -} - -getallotherplayers() -{ - aliveplayers = []; - - for ( i = 0; i < level.players.size; i++ ) - { - if ( !isdefined( level.players[i] ) ) - continue; - - player = level.players[i]; - - if ( player.sessionstate != "playing" || player == self ) - continue; - - aliveplayers[aliveplayers.size] = player; - } - - return aliveplayers; -} - -getallalliedandenemyplayers( obj ) -{ - if ( level.teambased ) - { -/# - assert( isdefined( level.teams[self.team] ) ); -#/ - obj.allies = level.aliveplayers[self.team]; - obj.enemies = undefined; - - foreach ( team in level.teams ) - { - if ( team == self.team ) - continue; - - if ( !isdefined( obj.enemies ) ) - { - obj.enemies = level.aliveplayers[team]; - continue; - } - - foreach ( player in level.aliveplayers[team] ) - obj.enemies[obj.enemies.size] = player; - } - } - else - { - obj.allies = []; - obj.enemies = level.activeplayers; - } -} - -initweights( spawnpoints ) -{ - for ( i = 0; i < spawnpoints.size; i++ ) - spawnpoints[i].weight = 0; - -/# - if ( level.storespawndata || level.debugspawning ) - { - for ( i = 0; i < spawnpoints.size; i++ ) - { - spawnpoints[i].spawndata = []; - spawnpoints[i].sightchecks = []; - } - } -#/ -} - -getspawnpoint_nearteam( spawnpoints, favoredspawnpoints ) -{ - if ( !isdefined( spawnpoints ) ) - return undefined; - -/# - if ( getdvar( "scr_spawn_randomly" ) == "" ) - setdvar( "scr_spawn_randomly", "0" ); - - if ( getdvar( "scr_spawn_randomly" ) == "1" ) - return getspawnpoint_random( spawnpoints ); -#/ - - if ( getdvarint( "scr_spawnsimple" ) > 0 ) - return getspawnpoint_random( spawnpoints ); - - spawnlogic_begin(); - k_favored_spawn_point_bonus = 25000; - initweights( spawnpoints ); - obj = spawnstruct(); - getallalliedandenemyplayers( obj ); - numplayers = obj.allies.size + obj.enemies.size; - allieddistanceweight = 2; - myteam = self.team; - - for ( i = 0; i < spawnpoints.size; i++ ) - { - spawnpoint = spawnpoints[i]; - - if ( !isdefined( spawnpoint.numplayersatlastupdate ) ) - spawnpoint.numplayersatlastupdate = 0; - - if ( spawnpoint.numplayersatlastupdate > 0 ) - { - allydistsum = spawnpoint.distsum[myteam]; - enemydistsum = spawnpoint.enemydistsum[myteam]; - spawnpoint.weight = ( enemydistsum - allieddistanceweight * allydistsum ) / spawnpoint.numplayersatlastupdate; -/# - if ( level.storespawndata || level.debugspawning ) - spawnpoint.spawndata[spawnpoint.spawndata.size] = "Base weight: " + int( spawnpoint.weight ) + " = (" + int( enemydistsum ) + " - " + allieddistanceweight + "*" + int( allydistsum ) + ") / " + spawnpoint.numplayersatlastupdate; -#/ - continue; - } - - spawnpoint.weight = 0; -/# - if ( level.storespawndata || level.debugspawning ) - spawnpoint.spawndata[spawnpoint.spawndata.size] = "Base weight: 0"; -#/ - } - - if ( isdefined( favoredspawnpoints ) ) - { - for ( i = 0; i < favoredspawnpoints.size; i++ ) - { - if ( isdefined( favoredspawnpoints[i].weight ) ) - { - favoredspawnpoints[i].weight += k_favored_spawn_point_bonus; - continue; - } - - favoredspawnpoints[i].weight = k_favored_spawn_point_bonus; - } - } - - avoidsamespawn( spawnpoints ); - avoidspawnreuse( spawnpoints, 1 ); - avoidweapondamage( spawnpoints ); - avoidvisibleenemies( spawnpoints, 1 ); - result = getspawnpoint_final( spawnpoints ); -/# - if ( getdvar( "scr_spawn_showbad" ) == "" ) - setdvar( "scr_spawn_showbad", "0" ); - - if ( getdvar( "scr_spawn_showbad" ) == "1" ) - checkbad( result ); -#/ - return result; -} - -getspawnpoint_dm( spawnpoints ) -{ - if ( !isdefined( spawnpoints ) ) - return undefined; - - spawnlogic_begin(); - initweights( spawnpoints ); - aliveplayers = getallotherplayers(); - idealdist = 1600; - baddist = 1200; - - if ( aliveplayers.size > 0 ) - { - for ( i = 0; i < spawnpoints.size; i++ ) - { - totaldistfromideal = 0; - nearbybadamount = 0; - - for ( j = 0; j < aliveplayers.size; j++ ) - { - dist = distance( spawnpoints[i].origin, aliveplayers[j].origin ); - - if ( dist < baddist ) - nearbybadamount += ( baddist - dist ) / baddist; - - distfromideal = abs( dist - idealdist ); - totaldistfromideal += distfromideal; - } - - avgdistfromideal = totaldistfromideal / aliveplayers.size; - welldistancedamount = ( idealdist - avgdistfromideal ) / idealdist; - spawnpoints[i].weight = welldistancedamount - nearbybadamount * 2 + randomfloat( 0.2 ); - } - } - - avoidsamespawn( spawnpoints ); - avoidspawnreuse( spawnpoints, 0 ); - avoidweapondamage( spawnpoints ); - avoidvisibleenemies( spawnpoints, 0 ); - return getspawnpoint_final( spawnpoints ); -} - -spawnlogic_begin() -{ -/# - level.storespawndata = getdvarint( "scr_recordspawndata" ); - level.debugspawning = getdvarint( "scr_spawnpointdebug" ) > 0; -#/ -} - -init() -{ -/# - if ( getdvar( "scr_recordspawndata" ) == "" ) - setdvar( "scr_recordspawndata", 0 ); - - level.storespawndata = getdvarint( "scr_recordspawndata" ); - - if ( getdvar( "scr_killbots" ) == "" ) - setdvar( "scr_killbots", 0 ); - - if ( getdvar( "scr_killbottimer" ) == "" ) - setdvar( "scr_killbottimer", 0.25 ); - - thread loopbotspawns(); -#/ - level.spawnlogic_deaths = []; - level.spawnlogic_spawnkills = []; - level.players = []; - level.grenades = []; - level.pipebombs = []; - level.spawnmins = ( 0, 0, 0 ); - level.spawnmaxs = ( 0, 0, 0 ); - level.spawnminsmaxsprimed = 0; - - if ( isdefined( level.safespawns ) ) - { - for ( i = 0; i < level.safespawns.size; i++ ) - level.safespawns[i] spawnpointinit(); - } - - if ( getdvar( "scr_spawn_enemyavoiddist" ) == "" ) - setdvar( "scr_spawn_enemyavoiddist", "800" ); - - if ( getdvar( "scr_spawn_enemyavoidweight" ) == "" ) - setdvar( "scr_spawn_enemyavoidweight", "0" ); - -/# - if ( getdvar( "scr_spawnsimple" ) == "" ) - setdvar( "scr_spawnsimple", "0" ); - - if ( getdvar( "scr_spawnpointdebug" ) == "" ) - setdvar( "scr_spawnpointdebug", "0" ); - - if ( getdvarint( "scr_spawnpointdebug" ) > 0 ) - { - thread showdeathsdebug(); - thread updatedeathinfodebug(); - thread profiledebug(); - } - - if ( level.storespawndata ) - thread allowspawndatareading(); - - if ( getdvar( "scr_spawnprofile" ) == "" ) - setdvar( "scr_spawnprofile", "0" ); - - thread watchspawnprofile(); - thread spawngraphcheck(); -#/ -} - -watchspawnprofile() -{ -/# - while ( true ) - { - while ( true ) - { - if ( getdvarint( "scr_spawnprofile" ) > 0 ) - break; - - wait 0.05; - } - - thread spawnprofile(); - - while ( true ) - { - if ( getdvarint( "scr_spawnprofile" ) <= 0 ) - break; - - wait 0.05; - } - - level notify( "stop_spawn_profile" ); - } -#/ -} - -spawnprofile() -{ -/# - level endon( "stop_spawn_profile" ); - - while ( true ) - { - if ( level.players.size > 0 && level.spawnpoints.size > 0 ) - { - playernum = randomint( level.players.size ); - player = level.players[playernum]; - attempt = 1; - - while ( !isdefined( player ) && attempt < level.players.size ) - { - playernum = ( playernum + 1 ) % level.players.size; - attempt++; - player = level.players[playernum]; - } - - player getspawnpoint_nearteam( level.spawnpoints ); - } - - wait 0.05; - } -#/ -} - -spawngraphcheck() -{ -/# - while ( true ) - { - if ( getdvarint( _hash_C25B6B47 ) < 1 ) - { - wait 3; - continue; - } - - thread spawngraph(); - return; - } -#/ -} - -spawngraph() -{ -/# - w = 20; - h = 20; - weightscale = 0.1; - fakespawnpoints = []; - corners = getentarray( "minimap_corner", "targetname" ); - - if ( corners.size != 2 ) - { - println( "^1 can't spawn graph: no minimap corners" ); - return; - } - - min = corners[0].origin; - max = corners[0].origin; - - if ( corners[1].origin[0] > max[0] ) - max = ( corners[1].origin[0], max[1], max[2] ); - else - min = ( corners[1].origin[0], min[1], min[2] ); - - if ( corners[1].origin[1] > max[1] ) - max = ( max[0], corners[1].origin[1], max[2] ); - else - min = ( min[0], corners[1].origin[1], min[2] ); - - i = 0; - - for ( y = 0; y < h; y++ ) - { - yamnt = y / ( h - 1 ); - - for ( x = 0; x < w; x++ ) - { - xamnt = x / ( w - 1 ); - fakespawnpoints[i] = spawnstruct(); - fakespawnpoints[i].origin = ( min[0] * xamnt + max[0] * ( 1 - xamnt ), min[1] * yamnt + max[1] * ( 1 - yamnt ), min[2] ); - fakespawnpoints[i].angles = ( 0, 0, 0 ); - fakespawnpoints[i].forward = anglestoforward( fakespawnpoints[i].angles ); - fakespawnpoints[i].sighttracepoint = fakespawnpoints[i].origin; - i++; - } - } - - didweights = 0; - - while ( true ) - { - spawni = 0; - numiters = 5; - - for ( i = 0; i < numiters; i++ ) - { - if ( !level.players.size || !isdefined( level.players[0].team ) || level.players[0].team == "spectator" || !isdefined( level.players[0].class ) ) - break; - - endspawni = spawni + fakespawnpoints.size / numiters; - - if ( i == numiters - 1 ) - endspawni = fakespawnpoints.size; - - while ( spawni < endspawni ) - { - spawnpointupdate( fakespawnpoints[spawni] ); - spawni++; - } - - if ( didweights ) - level.players[0] drawspawngraph( fakespawnpoints, w, h, weightscale ); - - wait 0.05; - } - - if ( !level.players.size || !isdefined( level.players[0].team ) || level.players[0].team == "spectator" || !isdefined( level.players[0].class ) ) - { - wait 1; - continue; - } - - level.players[0] getspawnpoint_nearteam( fakespawnpoints ); - - for ( i = 0; i < fakespawnpoints.size; i++ ) - setupspawngraphpoint( fakespawnpoints[i], weightscale ); - - didweights = 1; - level.players[0] drawspawngraph( fakespawnpoints, w, h, weightscale ); - wait 0.05; - } -#/ -} - -drawspawngraph( fakespawnpoints, w, h, weightscale ) -{ -/# - i = 0; - - for ( y = 0; y < h; y++ ) - { - yamnt = y / ( h - 1 ); - - for ( x = 0; x < w; x++ ) - { - xamnt = x / ( w - 1 ); - - if ( y > 0 ) - spawngraphline( fakespawnpoints[i], fakespawnpoints[i - w], weightscale ); - - if ( x > 0 ) - spawngraphline( fakespawnpoints[i], fakespawnpoints[i - 1], weightscale ); - - i++; - } - } -#/ -} - -setupspawngraphpoint( s1, weightscale ) -{ -/# - s1.visible = 1; - - if ( s1.weight < -1000 / weightscale ) - s1.visible = 0; -#/ -} - -spawngraphline( s1, s2, weightscale ) -{ -/# - if ( !s1.visible || !s2.visible ) - return; - - p1 = s1.origin + ( 0, 0, s1.weight * weightscale + 100 ); - p2 = s2.origin + ( 0, 0, s2.weight * weightscale + 100 ); - line( p1, p2, ( 1, 1, 1 ) ); -#/ -} - -loopbotspawns() -{ -/# - while ( true ) - { - if ( getdvarint( "scr_killbots" ) < 1 ) - { - wait 3; - continue; - } - - if ( !isdefined( level.players ) ) - { - wait 0.05; - continue; - } - - bots = []; - - for ( i = 0; i < level.players.size; i++ ) - { - if ( !isdefined( level.players[i] ) ) - continue; - - if ( level.players[i].sessionstate == "playing" && issubstr( level.players[i].name, "bot" ) ) - bots[bots.size] = level.players[i]; - } - - if ( bots.size > 0 ) - { - if ( getdvarint( "scr_killbots" ) == 1 ) - { - killer = bots[randomint( bots.size )]; - victim = bots[randomint( bots.size )]; - victim thread [[ level.callbackplayerdamage ]]( killer, killer, 1000, 0, "MOD_RIFLE_BULLET", "none", ( 0, 0, 0 ), ( 0, 0, 0 ), "none", 0, 0 ); - } - else - { - numkills = getdvarint( "scr_killbots" ); - lastvictim = undefined; - - for ( index = 0; index < numkills; index++ ) - { - killer = bots[randomint( bots.size )]; - - for ( victim = bots[randomint( bots.size )]; isdefined( lastvictim ) && victim == lastvictim; victim = bots[randomint( bots.size )] ) - { - - } - - victim thread [[ level.callbackplayerdamage ]]( killer, killer, 1000, 0, "MOD_RIFLE_BULLET", "none", ( 0, 0, 0 ), ( 0, 0, 0 ), "none", 0, 0 ); - lastvictim = victim; - } - } - } - - if ( getdvar( "scr_killbottimer" ) != "" ) - wait( getdvarfloat( "scr_killbottimer" ) ); - else - wait 0.05; - } -#/ -} - -allowspawndatareading() -{ -/# - setdvar( "scr_showspawnid", "" ); - prevval = getdvar( "scr_showspawnid" ); - prevrelval = getdvar( "scr_spawnidcycle" ); - readthistime = 0; - - while ( true ) - { - val = getdvar( "scr_showspawnid" ); - relval = undefined; - - if ( !isdefined( val ) || val == prevval ) - { - relval = getdvar( "scr_spawnidcycle" ); - - if ( isdefined( relval ) && relval != "" ) - setdvar( "scr_spawnidcycle", "" ); - else - { - wait 0.5; - continue; - } - } - - prevval = val; - readthistime = 0; - readspawndata( val, relval ); - - if ( !isdefined( level.curspawndata ) ) - println( "No spawn data to draw." ); - else - println( "Drawing spawn ID " + level.curspawndata.id ); - - thread drawspawndata(); - } -#/ -} - -showdeathsdebug() -{ -/# - while ( true ) - { - if ( getdvar( "scr_spawnpointdebug" ) == "0" ) - { - wait 3; - continue; - } - - time = gettime(); - - for ( i = 0; i < level.spawnlogic_deaths.size; i++ ) - { - if ( isdefined( level.spawnlogic_deaths[i].los ) ) - line( level.spawnlogic_deaths[i].org, level.spawnlogic_deaths[i].killorg, ( 1, 0, 0 ) ); - else - line( level.spawnlogic_deaths[i].org, level.spawnlogic_deaths[i].killorg, ( 1, 1, 1 ) ); - - killer = level.spawnlogic_deaths[i].killer; - - if ( isdefined( killer ) && isalive( killer ) ) - line( level.spawnlogic_deaths[i].killorg, killer.origin, ( 0.4, 0.4, 0.8 ) ); - } - - for ( p = 0; p < level.players.size; p++ ) - { - if ( !isdefined( level.players[p] ) ) - continue; - - if ( isdefined( level.players[p].spawnlogic_killdist ) ) - print3d( level.players[p].origin + vectorscale( ( 0, 0, 1 ), 64.0 ), level.players[p].spawnlogic_killdist, ( 1, 1, 1 ) ); - } - - oldspawnkills = level.spawnlogic_spawnkills; - level.spawnlogic_spawnkills = []; - - for ( i = 0; i < oldspawnkills.size; i++ ) - { - spawnkill = oldspawnkills[i]; - - if ( spawnkill.dierwasspawner ) - { - line( spawnkill.spawnpointorigin, spawnkill.dierorigin, ( 0.4, 0.5, 0.4 ) ); - line( spawnkill.dierorigin, spawnkill.killerorigin, ( 0, 1, 1 ) ); - print3d( spawnkill.dierorigin + vectorscale( ( 0, 0, 1 ), 32.0 ), "SPAWNKILLED!", ( 0, 1, 1 ) ); - } - else - { - line( spawnkill.spawnpointorigin, spawnkill.killerorigin, ( 0.4, 0.5, 0.4 ) ); - line( spawnkill.killerorigin, spawnkill.dierorigin, ( 0, 1, 1 ) ); - print3d( spawnkill.dierorigin + vectorscale( ( 0, 0, 1 ), 32.0 ), "SPAWNDIED!", ( 0, 1, 1 ) ); - } - - if ( time - spawnkill.time < 60000 ) - level.spawnlogic_spawnkills[level.spawnlogic_spawnkills.size] = oldspawnkills[i]; - } - - wait 0.05; - } -#/ -} - -updatedeathinfodebug() -{ - while ( true ) - { - if ( getdvar( "scr_spawnpointdebug" ) == "0" ) - { - wait 3; - continue; - } - - updatedeathinfo(); - wait 3; - } -} - -spawnweightdebug( spawnpoints ) -{ - level notify( "stop_spawn_weight_debug" ); - level endon( "stop_spawn_weight_debug" ); -/# - while ( true ) - { - if ( getdvar( "scr_spawnpointdebug" ) == "0" ) - { - wait 3; - continue; - } - - textoffset = vectorscale( ( 0, 0, -1 ), 12.0 ); - - for ( i = 0; i < spawnpoints.size; i++ ) - { - amnt = 1 * ( 1 - spawnpoints[i].weight / -100000 ); - - if ( amnt < 0 ) - amnt = 0; - - if ( amnt > 1 ) - amnt = 1; - - orig = spawnpoints[i].origin + vectorscale( ( 0, 0, 1 ), 80.0 ); - print3d( orig, int( spawnpoints[i].weight ), ( 1, amnt, 0.5 ) ); - orig += textoffset; - - if ( isdefined( spawnpoints[i].spawndata ) ) - { - for ( j = 0; j < spawnpoints[i].spawndata.size; j++ ) - { - print3d( orig, spawnpoints[i].spawndata[j], vectorscale( ( 1, 1, 1 ), 0.5 ) ); - orig += textoffset; - } - } - - if ( isdefined( spawnpoints[i].sightchecks ) ) - { - for ( j = 0; j < spawnpoints[i].sightchecks.size; j++ ) - { - if ( spawnpoints[i].sightchecks[j].penalty == 0 ) - continue; - - print3d( orig, "Sight to enemy: -" + spawnpoints[i].sightchecks[j].penalty, vectorscale( ( 1, 1, 1 ), 0.5 ) ); - orig += textoffset; - } - } - } - - wait 0.05; - } -#/ -} - -profiledebug() -{ - while ( true ) - { - if ( getdvar( _hash_6A99E750 ) != "1" ) - { - wait 3; - continue; - } - - for ( i = 0; i < level.spawnpoints.size; i++ ) - level.spawnpoints[i].weight = randomint( 10000 ); - - if ( level.players.size > 0 ) - level.players[randomint( level.players.size )] getspawnpoint_nearteam( level.spawnpoints ); - - wait 0.05; - } -} - -debugnearbyplayers( players, origin ) -{ -/# - if ( getdvar( "scr_spawnpointdebug" ) == "0" ) - return; - - starttime = gettime(); - - while ( true ) - { - for ( i = 0; i < players.size; i++ ) - line( players[i].origin, origin, ( 0.5, 1, 0.5 ) ); - - if ( gettime() - starttime > 5000 ) - return; - - wait 0.05; - } -#/ -} - -deathoccured( dier, killer ) -{ - -} - -checkforsimilardeaths( deathinfo ) -{ - for ( i = 0; i < level.spawnlogic_deaths.size; i++ ) - { - if ( level.spawnlogic_deaths[i].killer == deathinfo.killer ) - { - dist = distance( level.spawnlogic_deaths[i].org, deathinfo.org ); - - if ( dist > 200 ) - continue; - - dist = distance( level.spawnlogic_deaths[i].killorg, deathinfo.killorg ); - - if ( dist > 200 ) - continue; - - level.spawnlogic_deaths[i].remove = 1; - } - } -} - -updatedeathinfo() -{ - time = gettime(); - - for ( i = 0; i < level.spawnlogic_deaths.size; i++ ) - { - deathinfo = level.spawnlogic_deaths[i]; - - if ( time - deathinfo.time > 90000 || !isdefined( deathinfo.killer ) || !isalive( deathinfo.killer ) || !isdefined( level.teams[deathinfo.killer.team] ) || distance( deathinfo.killer.origin, deathinfo.killorg ) > 400 ) - level.spawnlogic_deaths[i].remove = 1; - } - - oldarray = level.spawnlogic_deaths; - level.spawnlogic_deaths = []; - start = 0; - - if ( oldarray.size - 1024 > 0 ) - start = oldarray.size - 1024; - - for ( i = start; i < oldarray.size; i++ ) - { - if ( !isdefined( oldarray[i].remove ) ) - level.spawnlogic_deaths[level.spawnlogic_deaths.size] = oldarray[i]; - } -} - -ispointvulnerable( playerorigin ) -{ - pos = self.origin + level.bettymodelcenteroffset; - playerpos = playerorigin + vectorscale( ( 0, 0, 1 ), 32.0 ); - distsqrd = distancesquared( pos, playerpos ); - forward = anglestoforward( self.angles ); - - if ( distsqrd < level.bettydetectionradius * level.bettydetectionradius ) - { - playerdir = vectornormalize( playerpos - pos ); - angle = acos( vectordot( playerdir, forward ) ); - - if ( angle < level.bettydetectionconeangle ) - return true; - } - - return false; -} - -avoidweapondamage( spawnpoints ) -{ - if ( getdvar( _hash_FB71FB7 ) == "0" ) - return; - - weapondamagepenalty = 100000; - - if ( getdvar( _hash_76B8F046 ) != "" && getdvar( _hash_76B8F046 ) != "0" ) - weapondamagepenalty = getdvarfloat( _hash_76B8F046 ); - - mingrenadedistsquared = 62500; - - for ( i = 0; i < spawnpoints.size; i++ ) - { - for ( j = 0; j < level.grenades.size; j++ ) - { - if ( !isdefined( level.grenades[j] ) ) - continue; - - if ( distancesquared( spawnpoints[i].origin, level.grenades[j].origin ) < mingrenadedistsquared ) - { - spawnpoints[i].weight -= weapondamagepenalty; -/# - if ( level.storespawndata || level.debugspawning ) - spawnpoints[i].spawndata[spawnpoints[i].spawndata.size] = "Was near grenade: -" + int( weapondamagepenalty ); -#/ - } - } - } -} - -spawnperframeupdate() -{ - spawnpointindex = 0; - - while ( true ) - { - wait 0.05; - - if ( !isdefined( level.spawnpoints ) ) - return; - - spawnpointindex = ( spawnpointindex + 1 ) % level.spawnpoints.size; - spawnpoint = level.spawnpoints[spawnpointindex]; - spawnpointupdate( spawnpoint ); - } -} - -getnonteamsum( skip_team, sums ) -{ - value = 0; - - foreach ( team in level.teams ) - { - if ( team == skip_team ) - continue; - - value += sums[team]; - } - - return value; -} - -getnonteammindist( skip_team, mindists ) -{ - dist = 9999999; - - foreach ( team in level.teams ) - { - if ( team == skip_team ) - continue; - - if ( dist > mindists[team] ) - dist = mindists[team]; - } - - return dist; -} - -spawnpointupdate( spawnpoint ) -{ - if ( level.teambased ) - { - sights = []; - - foreach ( team in level.teams ) - { - spawnpoint.enemysights[team] = 0; - sights[team] = 0; - spawnpoint.nearbyplayers[team] = []; - } - } - else - { - spawnpoint.enemysights = 0; - spawnpoint.nearbyplayers["all"] = []; - } - - spawnpointdir = spawnpoint.forward; - debug = 0; -/# - debug = getdvarint( "scr_spawnpointdebug" ) > 0; -#/ - mindist = []; - distsum = []; - - if ( !level.teambased ) - mindist["all"] = 9999999; - - foreach ( team in level.teams ) - { - spawnpoint.distsum[team] = 0; - spawnpoint.enemydistsum[team] = 0; - spawnpoint.minenemydist[team] = 9999999; - mindist[team] = 9999999; - } - - spawnpoint.numplayersatlastupdate = 0; - - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - - if ( player.sessionstate != "playing" ) - continue; - - diff = player.origin - spawnpoint.origin; - diff = ( diff[0], diff[1], 0 ); - dist = length( diff ); - team = "all"; - - if ( level.teambased ) - team = player.team; - - if ( dist < 1024 ) - spawnpoint.nearbyplayers[team][spawnpoint.nearbyplayers[team].size] = player; - - if ( dist < mindist[team] ) - mindist[team] = dist; - - distsum[team] += dist; - spawnpoint.numplayersatlastupdate++; - pdir = anglestoforward( player.angles ); - - if ( vectordot( spawnpointdir, diff ) < 0 && vectordot( pdir, diff ) > 0 ) - continue; - - losexists = bullettracepassed( player.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), spawnpoint.sighttracepoint, 0, undefined ); - spawnpoint.lastsighttracetime = gettime(); - - if ( losexists ) - { - if ( level.teambased ) - sights[player.team]++; - else - spawnpoint.enemysights++; - -/# - if ( debug ) - line( player.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), spawnpoint.sighttracepoint, ( 0.5, 1, 0.5 ) ); -#/ - } - } - - if ( level.teambased ) - { - foreach ( team in level.teams ) - { - spawnpoint.enemysights[team] = getnonteamsum( team, sights ); - spawnpoint.minenemydist[team] = getnonteammindist( team, mindist ); - spawnpoint.distsum[team] = distsum[team]; - spawnpoint.enemydistsum[team] = getnonteamsum( team, distsum ); - } - } - else - { - spawnpoint.distsum["all"] = distsum["all"]; - spawnpoint.enemydistsum["all"] = distsum["all"]; - spawnpoint.minenemydist["all"] = mindist["all"]; - } -} - -getlospenalty() -{ - if ( getdvar( _hash_CACDB8AA ) != "" && getdvar( _hash_CACDB8AA ) != "0" ) - return getdvarfloat( _hash_CACDB8AA ); - - return 100000; -} - -lastminutesighttraces( spawnpoint ) -{ - if ( !isdefined( spawnpoint.nearbyplayers ) ) - return false; - - closest = undefined; - closestdistsq = undefined; - secondclosest = undefined; - secondclosestdistsq = undefined; - - foreach ( team in spawnpoint.nearbyplayers ) - { - if ( team == self.team ) - continue; - - for ( i = 0; i < spawnpoint.nearbyplayers[team].size; i++ ) - { - player = spawnpoint.nearbyplayers[team][i]; - - if ( !isdefined( player ) ) - continue; - - if ( player.sessionstate != "playing" ) - continue; - - if ( player == self ) - continue; - - distsq = distancesquared( spawnpoint.origin, player.origin ); - - if ( !isdefined( closest ) || distsq < closestdistsq ) - { - secondclosest = closest; - secondclosestdistsq = closestdistsq; - closest = player; - closestdistsq = distsq; - continue; - } - - if ( !isdefined( secondclosest ) || distsq < secondclosestdistsq ) - { - secondclosest = player; - secondclosestdistsq = distsq; - } - } - } - - if ( isdefined( closest ) ) - { - if ( bullettracepassed( closest.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), spawnpoint.sighttracepoint, 0, undefined ) ) - return true; - } - - if ( isdefined( secondclosest ) ) - { - if ( bullettracepassed( secondclosest.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), spawnpoint.sighttracepoint, 0, undefined ) ) - return true; - } - - return false; -} - -avoidvisibleenemies( spawnpoints, teambased ) -{ - if ( getdvar( _hash_FB71FB7 ) == "0" ) - return; - - lospenalty = getlospenalty(); - mindistteam = self.team; - - if ( teambased ) - { - for ( i = 0; i < spawnpoints.size; i++ ) - { - if ( !isdefined( spawnpoints[i].enemysights ) ) - continue; - - penalty = lospenalty * spawnpoints[i].enemysights[self.team]; - spawnpoints[i].weight -= penalty; -/# - if ( level.storespawndata || level.debugspawning ) - { - index = spawnpoints[i].sightchecks.size; - spawnpoints[i].sightchecks[index] = spawnstruct(); - spawnpoints[i].sightchecks[index].penalty = penalty; - } -#/ - } - } - else - { - for ( i = 0; i < spawnpoints.size; i++ ) - { - if ( !isdefined( spawnpoints[i].enemysights ) ) - continue; - - penalty = lospenalty * spawnpoints[i].enemysights; - spawnpoints[i].weight -= penalty; -/# - if ( level.storespawndata || level.debugspawning ) - { - index = spawnpoints[i].sightchecks.size; - spawnpoints[i].sightchecks[index] = spawnstruct(); - spawnpoints[i].sightchecks[index].penalty = penalty; - } -#/ - } - - mindistteam = "all"; - } - - avoidweight = getdvarfloat( "scr_spawn_enemyavoidweight" ); - - if ( avoidweight != 0 ) - { - nearbyenemyouterrange = getdvarfloat( "scr_spawn_enemyavoiddist" ); - nearbyenemyouterrangesq = nearbyenemyouterrange * nearbyenemyouterrange; - nearbyenemypenalty = 1500 * avoidweight; - nearbyenemyminorpenalty = 800 * avoidweight; - lastattackerorigin = vectorscale( ( -1, -1, -1 ), 99999.0 ); - lastdeathpos = vectorscale( ( -1, -1, -1 ), 99999.0 ); - - if ( isalive( self.lastattacker ) ) - lastattackerorigin = self.lastattacker.origin; - - if ( isdefined( self.lastdeathpos ) ) - lastdeathpos = self.lastdeathpos; - - for ( i = 0; i < spawnpoints.size; i++ ) - { - mindist = spawnpoints[i].minenemydist[mindistteam]; - - if ( mindist < nearbyenemyouterrange * 2 ) - { - penalty = nearbyenemyminorpenalty * ( 1 - mindist / nearbyenemyouterrange * 2 ); - - if ( mindist < nearbyenemyouterrange ) - penalty += nearbyenemypenalty * ( 1 - mindist / nearbyenemyouterrange ); - - if ( penalty > 0 ) - { - spawnpoints[i].weight -= penalty; -/# - if ( level.storespawndata || level.debugspawning ) - spawnpoints[i].spawndata[spawnpoints[i].spawndata.size] = "Nearest enemy at " + int( spawnpoints[i].minenemydist[mindistteam] ) + " units: -" + int( penalty ); -#/ - } - } - } - } -} - -avoidspawnreuse( spawnpoints, teambased ) -{ - if ( getdvar( _hash_FB71FB7 ) == "0" ) - return; - - time = gettime(); - maxtime = 10000; - maxdistsq = 1048576; - - for ( i = 0; i < spawnpoints.size; i++ ) - { - spawnpoint = spawnpoints[i]; - - if ( !isdefined( spawnpoint.lastspawnedplayer ) || !isdefined( spawnpoint.lastspawntime ) || !isalive( spawnpoint.lastspawnedplayer ) ) - continue; - - if ( spawnpoint.lastspawnedplayer == self ) - continue; - - if ( teambased && spawnpoint.lastspawnedplayer.team == self.team ) - continue; - - timepassed = time - spawnpoint.lastspawntime; - - if ( timepassed < maxtime ) - { - distsq = distancesquared( spawnpoint.lastspawnedplayer.origin, spawnpoint.origin ); - - if ( distsq < maxdistsq ) - { - worsen = 5000 * ( 1 - distsq / maxdistsq ) * ( 1 - timepassed / maxtime ); - spawnpoint.weight -= worsen; -/# - if ( level.storespawndata || level.debugspawning ) - spawnpoint.spawndata[spawnpoint.spawndata.size] = "Was recently used: -" + worsen; -#/ - } - else - spawnpoint.lastspawnedplayer = undefined; - - continue; - } - - spawnpoint.lastspawnedplayer = undefined; - } -} - -avoidsamespawn( spawnpoints ) -{ - if ( getdvar( _hash_FB71FB7 ) == "0" ) - return; - - if ( !isdefined( self.lastspawnpoint ) ) - return; - - for ( i = 0; i < spawnpoints.size; i++ ) - { - if ( spawnpoints[i] == self.lastspawnpoint ) - { - spawnpoints[i].weight -= 50000; -/# - if ( level.storespawndata || level.debugspawning ) - spawnpoints[i].spawndata[spawnpoints[i].spawndata.size] = "Was last spawnpoint: -50000"; -#/ - break; - } - } -} - -getrandomintermissionpoint() -{ - spawnpoints = getentarray( "mp_global_intermission", "classname" ); - - if ( !spawnpoints.size ) - spawnpoints = getentarray( "info_player_start", "classname" ); - -/# - assert( spawnpoints.size ); -#/ - spawnpoint = maps\mp\gametypes\_spawnlogic::getspawnpoint_random( spawnpoints ); - return spawnpoint; -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_tweakables.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_tweakables.gsc deleted file mode 100644 index b0fbb5f..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_tweakables.gsc +++ /dev/null @@ -1,385 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -gettweakabledvarvalue( category, name ) -{ - switch ( category ) - { - case "rule": - dvar = level.rules[name].dvar; - break; - case "game": - dvar = level.gametweaks[name].dvar; - break; - case "team": - dvar = level.teamtweaks[name].dvar; - break; - case "player": - dvar = level.playertweaks[name].dvar; - break; - case "class": - dvar = level.classtweaks[name].dvar; - break; - case "weapon": - dvar = level.weapontweaks[name].dvar; - break; - case "killstreak": - dvar = level.hardpointtweaks[name].dvar; - break; - case "hud": - dvar = level.hudtweaks[name].dvar; - break; - default: - dvar = undefined; - break; - } - -/# - assert( isdefined( dvar ) ); -#/ - value = getdvarint( dvar ); - return value; -} - -gettweakabledvar( category, name ) -{ - switch ( category ) - { - case "rule": - value = level.rules[name].dvar; - break; - case "game": - value = level.gametweaks[name].dvar; - break; - case "team": - value = level.teamtweaks[name].dvar; - break; - case "player": - value = level.playertweaks[name].dvar; - break; - case "class": - value = level.classtweaks[name].dvar; - break; - case "weapon": - value = level.weapontweaks[name].dvar; - break; - case "killstreak": - value = level.hardpointtweaks[name].dvar; - break; - case "hud": - value = level.hudtweaks[name].dvar; - break; - default: - value = undefined; - break; - } - -/# - assert( isdefined( value ) ); -#/ - return value; -} - -gettweakablevalue( category, name ) -{ - switch ( category ) - { - case "rule": - value = level.rules[name].value; - break; - case "game": - value = level.gametweaks[name].value; - break; - case "team": - value = level.teamtweaks[name].value; - break; - case "player": - value = level.playertweaks[name].value; - break; - case "class": - value = level.classtweaks[name].value; - break; - case "weapon": - value = level.weapontweaks[name].value; - break; - case "killstreak": - value = level.hardpointtweaks[name].value; - break; - case "hud": - value = level.hudtweaks[name].value; - break; - default: - value = undefined; - break; - } - - overridedvar = "scr_" + level.gametype + "_" + category + "_" + name; - - if ( getdvar( overridedvar ) != "" ) - return getdvarint( overridedvar ); - -/# - assert( isdefined( value ) ); -#/ - return value; -} - -gettweakablelastvalue( category, name ) -{ - switch ( category ) - { - case "rule": - value = level.rules[name].lastvalue; - break; - case "game": - value = level.gametweaks[name].lastvalue; - break; - case "team": - value = level.teamtweaks[name].lastvalue; - break; - case "player": - value = level.playertweaks[name].lastvalue; - break; - case "class": - value = level.classtweaks[name].lastvalue; - break; - case "weapon": - value = level.weapontweaks[name].lastvalue; - break; - case "killstreak": - value = level.hardpointtweaks[name].lastvalue; - break; - case "hud": - value = level.hudtweaks[name].lastvalue; - break; - default: - value = undefined; - break; - } - -/# - assert( isdefined( value ) ); -#/ - return value; -} - -settweakablevalue( category, name, value ) -{ - switch ( category ) - { - case "rule": - dvar = level.rules[name].dvar; - break; - case "game": - dvar = level.gametweaks[name].dvar; - break; - case "team": - dvar = level.teamtweaks[name].dvar; - break; - case "player": - dvar = level.playertweaks[name].dvar; - break; - case "class": - dvar = level.classtweaks[name].dvar; - break; - case "weapon": - dvar = level.weapontweaks[name].dvar; - break; - case "killstreak": - dvar = level.hardpointtweaks[name].dvar; - break; - case "hud": - dvar = level.hudtweaks[name].dvar; - break; - default: - dvar = undefined; - break; - } - - setdvar( dvar, value ); -} - -settweakablelastvalue( category, name, value ) -{ - switch ( category ) - { - case "rule": - level.rules[name].lastvalue = value; - break; - case "game": - level.gametweaks[name].lastvalue = value; - break; - case "team": - level.teamtweaks[name].lastvalue = value; - break; - case "player": - level.playertweaks[name].lastvalue = value; - break; - case "class": - level.classtweaks[name].lastvalue = value; - break; - case "weapon": - level.weapontweaks[name].lastvalue = value; - break; - case "killstreak": - level.hardpointtweaks[name].lastvalue = value; - break; - case "hud": - level.hudtweaks[name].lastvalue = value; - break; - default: - break; - } -} - -registertweakable( category, name, dvar, value ) -{ - if ( isstring( value ) ) - { - if ( getdvar( dvar ) == "" ) - setdvar( dvar, value ); - else - value = getdvar( dvar ); - } - else if ( getdvar( dvar ) == "" ) - setdvar( dvar, value ); - else - value = getdvarint( dvar ); - - switch ( category ) - { - case "rule": - if ( !isdefined( level.rules[name] ) ) - level.rules[name] = spawnstruct(); - - level.rules[name].value = value; - level.rules[name].lastvalue = value; - level.rules[name].dvar = dvar; - break; - case "game": - if ( !isdefined( level.gametweaks[name] ) ) - level.gametweaks[name] = spawnstruct(); - - level.gametweaks[name].value = value; - level.gametweaks[name].lastvalue = value; - level.gametweaks[name].dvar = dvar; - break; - case "team": - if ( !isdefined( level.teamtweaks[name] ) ) - level.teamtweaks[name] = spawnstruct(); - - level.teamtweaks[name].value = value; - level.teamtweaks[name].lastvalue = value; - level.teamtweaks[name].dvar = dvar; - break; - case "player": - if ( !isdefined( level.playertweaks[name] ) ) - level.playertweaks[name] = spawnstruct(); - - level.playertweaks[name].value = value; - level.playertweaks[name].lastvalue = value; - level.playertweaks[name].dvar = dvar; - break; - case "class": - if ( !isdefined( level.classtweaks[name] ) ) - level.classtweaks[name] = spawnstruct(); - - level.classtweaks[name].value = value; - level.classtweaks[name].lastvalue = value; - level.classtweaks[name].dvar = dvar; - break; - case "weapon": - if ( !isdefined( level.weapontweaks[name] ) ) - level.weapontweaks[name] = spawnstruct(); - - level.weapontweaks[name].value = value; - level.weapontweaks[name].lastvalue = value; - level.weapontweaks[name].dvar = dvar; - break; - case "killstreak": - if ( !isdefined( level.hardpointtweaks[name] ) ) - level.hardpointtweaks[name] = spawnstruct(); - - level.hardpointtweaks[name].value = value; - level.hardpointtweaks[name].lastvalue = value; - level.hardpointtweaks[name].dvar = dvar; - break; - case "hud": - if ( !isdefined( level.hudtweaks[name] ) ) - level.hudtweaks[name] = spawnstruct(); - - level.hudtweaks[name].value = value; - level.hudtweaks[name].lastvalue = value; - level.hudtweaks[name].dvar = dvar; - break; - } -} - -init() -{ - level.clienttweakables = []; - level.tweakablesinitialized = 1; - level.rules = []; - level.gametweaks = []; - level.teamtweaks = []; - level.playertweaks = []; - level.classtweaks = []; - level.weapontweaks = []; - level.hardpointtweaks = []; - level.hudtweaks = []; - registertweakable( "game", "arcadescoring", "scr_game_arcadescoring", 0 ); - registertweakable( "game", "difficulty", "scr_game_difficulty", 1 ); - registertweakable( "game", "pinups", "scr_game_pinups", 0 ); - registertweakable( "team", "teamkillerplaylistbanquantum", "scr_team_teamkillerplaylistbanquantum", 0 ); - registertweakable( "team", "teamkillerplaylistbanpenalty", "scr_team_teamkillerplaylistbanpenalty", 0 ); - registertweakable( "player", "allowrevive", "scr_player_allowrevive", 1 ); - registertweakable( "weapon", "allowfrag", "scr_weapon_allowfrags", 1 ); - registertweakable( "weapon", "allowsmoke", "scr_weapon_allowsmoke", 1 ); - registertweakable( "weapon", "allowflash", "scr_weapon_allowflash", 1 ); - registertweakable( "weapon", "allowc4", "scr_weapon_allowc4", 1 ); - registertweakable( "weapon", "allowsatchel", "scr_weapon_allowsatchel", 1 ); - registertweakable( "weapon", "allowbetty", "scr_weapon_allowbetty", 1 ); - registertweakable( "weapon", "allowrpgs", "scr_weapon_allowrpgs", 1 ); - registertweakable( "weapon", "allowmines", "scr_weapon_allowmines", 1 ); - registertweakable( "hud", "showobjicons", "ui_hud_showobjicons", 1 ); - setclienttweakable( "hud", "showobjicons" ); - registertweakable( "killstreak", "allowradar", "scr_hardpoint_allowradar", 1 ); - registertweakable( "killstreak", "allowradardirection", "scr_hardpoint_allowradardirection", 1 ); - registertweakable( "killstreak", "allowcounteruav", "scr_hardpoint_allowcounteruav", 1 ); - registertweakable( "killstreak", "allowdogs", "scr_hardpoint_allowdogs", 1 ); - registertweakable( "killstreak", "allowhelicopter_comlink", "scr_hardpoint_allowhelicopter_comlink", 1 ); - registertweakable( "killstreak", "allowrcbomb", "scr_hardpoint_allowrcbomb", 1 ); - registertweakable( "killstreak", "allowauto_turret", "scr_hardpoint_allowauto_turret", 1 ); - level thread updateuitweakables(); -} - -setclienttweakable( category, name ) -{ - level.clienttweakables[level.clienttweakables.size] = name; -} - -updateuitweakables() -{ - for (;;) - { - for ( index = 0; index < level.clienttweakables.size; index++ ) - { - clienttweakable = level.clienttweakables[index]; - curvalue = gettweakabledvarvalue( "hud", clienttweakable ); - lastvalue = gettweakablelastvalue( "hud", clienttweakable ); - - if ( curvalue != lastvalue ) - { - updateserverdvar( gettweakabledvar( "hud", clienttweakable ), curvalue ); - settweakablelastvalue( "hud", clienttweakable, curvalue ); - } - } - - wait 1.0; - } -} - -updateserverdvar( dvar, value ) -{ - makedvarserverinfo( dvar, value ); -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_weapon_utils.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_weapon_utils.gsc deleted file mode 100644 index 038403b..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_weapon_utils.gsc +++ /dev/null @@ -1,104 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -isgrenadelauncherweapon( weapon ) -{ - if ( getsubstr( weapon, 0, 3 ) == "gl_" ) - return true; - - switch ( weapon ) - { - case "xm25_mp": - case "china_lake_mp": - return true; - default: - return false; - } -} - -isdumbrocketlauncherweapon( weapon ) -{ - switch ( weapon ) - { - case "rpg_mp": - case "m220_tow_mp": - return true; - default: - return false; - } -} - -isguidedrocketlauncherweapon( weapon ) -{ - switch ( weapon ) - { - case "smaw_mp": - case "m72_law_mp": - case "m202_flash_mp": - case "javelin_mp": - case "fhj18_mp": - return true; - default: - return false; - } -} - -isrocketlauncherweapon( weapon ) -{ - if ( isdumbrocketlauncherweapon( weapon ) ) - return true; - - if ( isguidedrocketlauncherweapon( weapon ) ) - return true; - - return false; -} - -islauncherweapon( weapon ) -{ - if ( isrocketlauncherweapon( weapon ) ) - return true; - - if ( isgrenadelauncherweapon( weapon ) ) - return true; - - return false; -} - -ishackweapon( weapon ) -{ - if ( maps\mp\killstreaks\_killstreaks::iskillstreakweapon( weapon ) ) - return true; - - if ( weapon == "briefcase_bomb_mp" ) - return true; - - return false; -} - -ispistol( weapon ) -{ - return isdefined( level.side_arm_array[weapon] ); -} - -isflashorstunweapon( weapon ) -{ - if ( isdefined( weapon ) ) - { - switch ( weapon ) - { - case "proximity_grenade_mp": - case "proximity_grenade_aoe_mp": - case "flash_grenade_mp": - case "concussion_grenade_mp": - return true; - } - } - - return false; -} - -isflashorstundamage( weapon, meansofdeath ) -{ - return isflashorstunweapon( weapon ) && ( meansofdeath == "MOD_GRENADE_SPLASH" || meansofdeath == "MOD_GAS" ); -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_weaponobjects.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_weaponobjects.gsc deleted file mode 100644 index e48d1c3..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_weaponobjects.gsc +++ /dev/null @@ -1,2380 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -init() -{ -/# - debug = weapons_get_dvar_int( "scr_weaponobject_debug", "0" ); -#/ - coneangle = weapons_get_dvar_int( "scr_weaponobject_coneangle", "70" ); - mindist = weapons_get_dvar_int( "scr_weaponobject_mindist", "20" ); - graceperiod = weapons_get_dvar( "scr_weaponobject_graceperiod", "0.6" ); - radius = weapons_get_dvar_int( "scr_weaponobject_radius", "192" ); - level thread onplayerconnect(); - level.watcherweapons = []; - level.watcherweapons = getwatcherweapons(); - level.watcherweaponnames = []; - level.watcherweaponnames = getwatchernames( level.watcherweapons ); - level.retrievableweapons = []; - level.retrievableweapons = getretrievableweapons(); - level.retrievableweaponnames = []; - level.retrievableweaponnames = getwatchernames( level.retrievableweapons ); - level.weaponobjects_headicon_offset = []; - level.weaponobjects_headicon_offset["default"] = vectorscale( ( 0, 0, 1 ), 20.0 ); - level.weaponobjectexplodethisframe = 0; - - if ( getdvar( "scr_deleteexplosivesonspawn" ) == "" ) - setdvar( "scr_deleteexplosivesonspawn", 1 ); - - level.deleteexplosivesonspawn = getdvarint( "scr_deleteexplosivesonspawn" ); - - if ( sessionmodeiszombiesgame() ) - return; - - precachestring( &"MP_DEFUSING_EXPLOSIVE" ); - level.claymorefxid = loadfx( "weapon/claymore/fx_claymore_laser" ); - level._equipment_spark_fx = loadfx( "weapon/grenade/fx_spark_disabled_weapon" ); - level._equipment_emp_destroy_fx = loadfx( "weapon/emp/fx_emp_explosion_equip" ); - level._equipment_explode_fx = loadfx( "explosions/fx_exp_equipment" ); - level._equipment_explode_fx_lg = loadfx( "explosions/fx_exp_equipment_lg" ); - level._effect["powerLight"] = loadfx( "weapon/crossbow/fx_trail_crossbow_blink_red_os" ); - setupretrievablehintstrings(); - level.weaponobjects_headicon_offset["acoustic_sensor_mp"] = vectorscale( ( 0, 0, 1 ), 25.0 ); - level.weaponobjects_headicon_offset["sensor_grenade_mp"] = vectorscale( ( 0, 0, 1 ), 25.0 ); - level.weaponobjects_headicon_offset["camera_spike_mp"] = vectorscale( ( 0, 0, 1 ), 35.0 ); - level.weaponobjects_headicon_offset["claymore_mp"] = vectorscale( ( 0, 0, 1 ), 20.0 ); - level.weaponobjects_headicon_offset["bouncingbetty_mp"] = vectorscale( ( 0, 0, 1 ), 20.0 ); - level.weaponobjects_headicon_offset["satchel_charge_mp"] = vectorscale( ( 0, 0, 1 ), 10.0 ); - level.weaponobjects_headicon_offset["scrambler_mp"] = vectorscale( ( 0, 0, 1 ), 20.0 ); - level.weaponobjects_headicon_offset["trophy_system_mp"] = vectorscale( ( 0, 0, 1 ), 35.0 ); - level.weaponobjects_hacker_trigger_width = 32; - level.weaponobjects_hacker_trigger_height = 32; -} - -getwatchernames( weapons ) -{ - names = []; - - foreach ( index, weapon in weapons ) - names[index] = getsubstr( weapon, 0, weapon.size - 3 ); - - return names; -} - -weapons_get_dvar_int( dvar, def ) -{ - return int( weapons_get_dvar( dvar, def ) ); -} - -weapons_get_dvar( dvar, def ) -{ - if ( getdvar( dvar ) != "" ) - return getdvarfloat( dvar ); - else - { - setdvar( dvar, def ); - return def; - } -} - -setupretrievablehintstrings() -{ - createretrievablehint( "hatchet", &"MP_HATCHET_PICKUP" ); - createretrievablehint( "claymore", &"MP_CLAYMORE_PICKUP" ); - createretrievablehint( "bouncingbetty", &"MP_BOUNCINGBETTY_PICKUP" ); - createretrievablehint( "trophy_system", &"MP_TROPHY_SYSTEM_PICKUP" ); - createretrievablehint( "acoustic_sensor", &"MP_ACOUSTIC_SENSOR_PICKUP" ); - createretrievablehint( "camera_spike", &"MP_CAMERA_SPIKE_PICKUP" ); - createretrievablehint( "satchel_charge", &"MP_SATCHEL_CHARGE_PICKUP" ); - createretrievablehint( "scrambler", &"MP_SCRAMBLER_PICKUP" ); - createretrievablehint( "proximity_grenade", &"MP_SHOCK_CHARGE_PICKUP" ); - createdestroyhint( "trophy_system", &"MP_TROPHY_SYSTEM_DESTROY" ); - createdestroyhint( "sensor_grenade", &"MP_SENSOR_GRENADE_DESTROY" ); - createhackerhint( "claymore_mp", &"MP_CLAYMORE_HACKING" ); - createhackerhint( "bouncingbetty_mp", &"MP_BOUNCINGBETTY_HACKING" ); - createhackerhint( "trophy_system_mp", &"MP_TROPHY_SYSTEM_HACKING" ); - createhackerhint( "acoustic_sensor_mp", &"MP_ACOUSTIC_SENSOR_HACKING" ); - createhackerhint( "camera_spike_mp", &"MP_CAMERA_SPIKE_HACKING" ); - createhackerhint( "satchel_charge_mp", &"MP_SATCHEL_CHARGE_HACKING" ); - createhackerhint( "scrambler_mp", &"MP_SCRAMBLER_HACKING" ); -} - -onplayerconnect() -{ - if ( isdefined( level._weaponobjects_on_player_connect_override ) ) - { - level thread [[ level._weaponobjects_on_player_connect_override ]](); - return; - } - - for (;;) - { - level waittill( "connecting", player ); - - player.usedweapons = 0; - player.hits = 0; - player thread onplayerspawned(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - - for (;;) - { - self waittill( "spawned_player" ); - - pixbeginevent( "onPlayerSpawned" ); - - if ( !isdefined( self.watchersinitialized ) ) - { - self createbasewatchers(); - self maps\mp\_satchel_charge::createsatchelwatcher(); - self maps\mp\_proximity_grenade::createproximitygrenadewatcher(); - self maps\mp\_bouncingbetty::createbouncingbettywatcher(); - self maps\mp\_trophy_system::createtrophysystemwatcher(); - self maps\mp\_sensor_grenade::createsensorgrenadewatcher(); - self createclaymorewatcher(); - self creatercbombwatcher(); - self createqrdronewatcher(); - self createplayerhelicopterwatcher(); - self createballisticknifewatcher(); - self createhatchetwatcher(); - self createtactinsertwatcher(); - self setupretrievablewatcher(); - self thread watchweaponobjectusage(); - self.watchersinitialized = 1; - } - - self resetwatchers(); - pixendevent(); - } -} - -resetwatchers() -{ - if ( !isdefined( self.weaponobjectwatcherarray ) ) - return undefined; - - team = self.team; - - foreach ( watcher in self.weaponobjectwatcherarray ) - resetweaponobjectwatcher( watcher, team ); -} - -createbasewatchers() -{ - foreach ( index, weapon in level.watcherweapons ) - self createweaponobjectwatcher( level.watcherweaponnames[index], weapon, self.team ); - - foreach ( index, weapon in level.retrievableweapons ) - self createweaponobjectwatcher( level.retrievableweaponnames[index], weapon, self.team ); -} - -setupretrievablewatcher() -{ - for ( i = 0; i < level.retrievableweapons.size; i++ ) - { - watcher = getweaponobjectwatcherbyweapon( level.retrievableweapons[i] ); - - if ( !isdefined( watcher.onspawnretrievetriggers ) ) - watcher.onspawnretrievetriggers = ::onspawnretrievableweaponobject; - - if ( !isdefined( watcher.ondestroyed ) ) - watcher.ondestroyed = ::ondestroyed; - - if ( !isdefined( watcher.pickup ) ) - watcher.pickup = ::pickup; - } -} - -createballisticknifewatcher() -{ - watcher = self createuseweaponobjectwatcher( "knife_ballistic", "knife_ballistic_mp", self.team ); - watcher.onspawn = maps\mp\_ballistic_knife::onspawn; - watcher.detonate = ::deleteent; - watcher.onspawnretrievetriggers = maps\mp\_ballistic_knife::onspawnretrievetrigger; - watcher.storedifferentobject = 1; -} - -createhatchetwatcher() -{ - watcher = self createuseweaponobjectwatcher( "hatchet", "hatchet_mp", self.team ); - watcher.detonate = ::deleteent; - watcher.onspawn = ::voidonspawn; - watcher.ondamage = ::voidondamage; - watcher.onspawnretrievetriggers = ::onspawnhatchettrigger; -} - -createtactinsertwatcher() -{ - watcher = self createuseweaponobjectwatcher( "tactical_insertion", "tactical_insertion_mp", self.team ); - watcher.playdestroyeddialog = 0; -} - -creatercbombwatcher() -{ - watcher = self createuseweaponobjectwatcher( "rcbomb", "rcbomb_mp", self.team ); - watcher.altdetonate = 0; - watcher.headicon = 0; - watcher.ismovable = 1; - watcher.ownergetsassist = 1; - watcher.playdestroyeddialog = 0; - watcher.deleteonkillbrush = 0; - watcher.detonate = maps\mp\killstreaks\_rcbomb::blowup; - watcher.stuntime = 1; -} - -createqrdronewatcher() -{ - watcher = self createuseweaponobjectwatcher( "qrdrone", "qrdrone_turret_mp", self.team ); - watcher.altdetonate = 0; - watcher.headicon = 0; - watcher.ismovable = 1; - watcher.ownergetsassist = 1; - watcher.playdestroyeddialog = 0; - watcher.deleteonkillbrush = 0; - watcher.detonate = maps\mp\killstreaks\_qrdrone::qrdrone_blowup; - watcher.ondamage = maps\mp\killstreaks\_qrdrone::qrdrone_damagewatcher; - watcher.stuntime = 5; -} - -createplayerhelicopterwatcher() -{ - watcher = self createuseweaponobjectwatcher( "helicopter_player", "helicopter_player_mp", self.team ); - watcher.altdetonate = 1; - watcher.headicon = 0; -} - -createclaymorewatcher() -{ - watcher = self createproximityweaponobjectwatcher( "claymore", "claymore_mp", self.team ); - watcher.watchforfire = 1; - watcher.detonate = ::claymoredetonate; - watcher.activatesound = "wpn_claymore_alert"; - watcher.hackable = 1; - watcher.hackertoolradius = level.equipmenthackertoolradius; - watcher.hackertooltimems = level.equipmenthackertooltimems; - watcher.reconmodel = "t6_wpn_claymore_world_detect"; - watcher.ownergetsassist = 1; - detectionconeangle = weapons_get_dvar_int( "scr_weaponobject_coneangle" ); - watcher.detectiondot = cos( detectionconeangle ); - watcher.detectionmindist = weapons_get_dvar_int( "scr_weaponobject_mindist" ); - watcher.detectiongraceperiod = weapons_get_dvar( "scr_weaponobject_graceperiod" ); - watcher.detonateradius = weapons_get_dvar_int( "scr_weaponobject_radius" ); - watcher.stun = ::weaponstun; - watcher.stuntime = 1; -} - -waittillnotmoving_and_notstunned() -{ - for ( prevorigin = self.origin; 1; prevorigin = self.origin ) - { - wait 0.15; - - if ( self.origin == prevorigin && !self isstunned() ) - break; - } -} - -voidonspawn( unused0, unused1 ) -{ - -} - -voidondamage( unused0 ) -{ - -} - -deleteent( attacker, emp ) -{ - self delete(); -} - -clearfxondeath( fx ) -{ - fx endon( "death" ); - self waittill_any( "death", "hacked" ); - fx delete(); -} - -deleteweaponobjectarray() -{ - if ( isdefined( self.objectarray ) ) - { - for ( i = 0; i < self.objectarray.size; i++ ) - { - if ( isdefined( self.objectarray[i] ) ) - { - if ( isdefined( self.objectarray[i].minemover ) ) - { - if ( isdefined( self.objectarray[i].minemover.killcament ) ) - self.objectarray[i].minemover.killcament delete(); - - self.objectarray[i].minemover delete(); - } - - self.objectarray[i] delete(); - } - } - } - - self.objectarray = []; -} - -claymoredetonate( attacker, weaponname ) -{ - from_emp = maps\mp\killstreaks\_emp::isempkillstreakweapon( weaponname ); - - if ( !isdefined( from_emp ) || !from_emp ) - { - if ( isdefined( attacker ) ) - { - if ( self.owner isenemyplayer( attacker ) ) - { - attacker maps\mp\_challenges::destroyedexplosive( weaponname ); - maps\mp\_scoreevents::processscoreevent( "destroyed_claymore", attacker, self.owner, weaponname ); - } - } - } - - maps\mp\gametypes\_weaponobjects::weapondetonate( attacker, weaponname ); -} - -weapondetonate( attacker, weaponname ) -{ - from_emp = maps\mp\killstreaks\_emp::isempweapon( weaponname ); - - if ( from_emp ) - { - self delete(); - return; - } - - if ( isdefined( attacker ) ) - { - if ( isdefined( self.owner ) && attacker != self.owner ) - self.playdialog = 1; - - if ( isplayer( attacker ) ) - self detonate( attacker ); - else - self detonate(); - } - else if ( isdefined( self.owner ) && isplayer( self.owner ) ) - { - self.playdialog = 0; - self detonate( self.owner ); - } - else - self detonate(); -} - -waitanddetonate( object, delay, attacker, weaponname ) -{ - object endon( "death" ); - object endon( "hacked" ); - from_emp = maps\mp\killstreaks\_emp::isempweapon( weaponname ); - - if ( from_emp && !( isdefined( object.name ) && object.name == "qrdrone_turret_mp" ) ) - { - object setclientflag( 15 ); - object setclientflag( 9 ); - object.stun_fx = 1; - playfx( level._equipment_emp_destroy_fx, object.origin + vectorscale( ( 0, 0, 1 ), 5.0 ), ( 0, randomfloat( 360 ), 0 ) ); - delay = 1.1; - } - - if ( delay ) - wait( delay ); - - if ( isdefined( object.detonated ) && object.detonated == 1 ) - return; - - if ( !isdefined( self.detonate ) ) - return; - - if ( isdefined( attacker ) && isplayer( attacker ) && isdefined( attacker.pers["team"] ) && isdefined( object.owner ) && isdefined( object.owner.pers["team"] ) ) - { - if ( level.teambased ) - { - if ( attacker.pers["team"] != object.owner.pers["team"] ) - attacker notify( "destroyed_explosive" ); - } - else if ( attacker != object.owner ) - attacker notify( "destroyed_explosive" ); - } - - object.detonated = 1; - object [[ self.detonate ]]( attacker, weaponname ); -} - -detonateweaponobjectarray( forcedetonation, weapon ) -{ - undetonated = []; - - if ( isdefined( self.objectarray ) ) - { - for ( i = 0; i < self.objectarray.size; i++ ) - { - if ( isdefined( self.objectarray[i] ) ) - { - if ( self.objectarray[i] isstunned() && forcedetonation == 0 ) - { - undetonated[undetonated.size] = self.objectarray[i]; - continue; - } - - if ( isdefined( weapon ) ) - { - if ( weapon ishacked() && weapon.name != self.objectarray[i].name ) - { - undetonated[undetonated.size] = self.objectarray[i]; - continue; - } - else if ( self.objectarray[i] ishacked() && weapon.name != self.objectarray[i].name ) - { - undetonated[undetonated.size] = self.objectarray[i]; - continue; - } - } - - self thread waitanddetonate( self.objectarray[i], 0.1, undefined, weapon ); - } - } - } - - self.objectarray = undetonated; -} - -addweaponobjecttowatcher( watchername, weapon ) -{ - watcher = getweaponobjectwatcher( watchername ); -/# - assert( isdefined( watcher ), "Weapon object watcher " + watchername + " does not exist" ); -#/ - self addweaponobject( watcher, weapon ); -} - -addweaponobject( watcher, weapon ) -{ - if ( !isdefined( watcher.storedifferentobject ) ) - watcher.objectarray[watcher.objectarray.size] = weapon; - - weapon.owner = self; - weapon.detonated = 0; - weapon.name = watcher.weapon; - - if ( isdefined( watcher.ondamage ) ) - weapon thread [[ watcher.ondamage ]]( watcher ); - else - weapon thread weaponobjectdamage( watcher ); - - weapon.ownergetsassist = watcher.ownergetsassist; - - if ( isdefined( watcher.onspawn ) ) - weapon thread [[ watcher.onspawn ]]( watcher, self ); - - if ( isdefined( watcher.onspawnfx ) ) - weapon thread [[ watcher.onspawnfx ]](); - - if ( isdefined( watcher.reconmodel ) ) - weapon thread attachreconmodel( watcher.reconmodel, self ); - - if ( isdefined( watcher.onspawnretrievetriggers ) ) - weapon thread [[ watcher.onspawnretrievetriggers ]]( watcher, self ); - - if ( watcher.hackable ) - weapon thread hackerinit( watcher ); - - if ( isdefined( watcher.stun ) ) - weapon thread watchscramble( watcher ); - - if ( watcher.playdestroyeddialog ) - { - weapon thread playdialogondeath( self ); - weapon thread watchobjectdamage( self ); - } - - if ( watcher.deleteonkillbrush ) - { - if ( isdefined( level.deleteonkillbrushoverride ) ) - weapon thread [[ level.deleteonkillbrushoverride ]]( self, watcher ); - else - weapon thread deleteonkillbrush( self ); - } -} - -watchscramble( watcher ) -{ - self endon( "death" ); - self endon( "hacked" ); - self waittillnotmoving(); - - if ( self maps\mp\_scrambler::checkscramblerstun() ) - self thread stunstart( watcher ); - else - self stunstop(); - - for (;;) - { - level waittill_any( "scrambler_spawn", "scrambler_death", "hacked" ); - - if ( isdefined( self.owner ) && self.owner isempjammed() ) - continue; - - if ( self maps\mp\_scrambler::checkscramblerstun() ) - { - self thread stunstart( watcher ); - continue; - } - - self stunstop(); - } -} - -deleteweaponobjecthelper( weapon_ent ) -{ - if ( !isdefined( weapon_ent.name ) ) - return; - - watcher = self getweaponobjectwatcherbyweapon( weapon_ent.name ); - - if ( !isdefined( watcher ) ) - return; - - watcher.objectarray = deleteweaponobject( watcher, weapon_ent ); -} - -deleteweaponobject( watcher, weapon_ent ) -{ - temp_objectarray = watcher.objectarray; - watcher.objectarray = []; - j = 0; - - for ( i = 0; i < temp_objectarray.size; i++ ) - { - if ( !isdefined( temp_objectarray[i] ) || temp_objectarray[i] == weapon_ent ) - continue; - - watcher.objectarray[j] = temp_objectarray[i]; - j++; - } - - return watcher.objectarray; -} - -weaponobjectdamage( watcher ) -{ - self endon( "death" ); - self endon( "hacked" ); - self setcandamage( 1 ); - self.maxhealth = 100000; - self.health = self.maxhealth; - attacker = undefined; - - while ( true ) - { - self waittill( "damage", damage, attacker, direction_vec, point, type, modelname, tagname, partname, weaponname, idflags ); - - if ( isdefined( weaponname ) ) - { - switch ( weaponname ) - { - case "proximity_grenade_mp": - case "flash_grenade_mp": - case "concussion_grenade_mp": - if ( watcher.stuntime > 0 ) - self thread stunstart( watcher, watcher.stuntime ); - - if ( level.teambased && self.owner.team != attacker.team ) - { - if ( maps\mp\gametypes\_globallogic_player::dodamagefeedback( weaponname, attacker ) ) - attacker maps\mp\gametypes\_damagefeedback::updatedamagefeedback(); - } - else if ( !level.teambased && self.owner != attacker ) - { - if ( maps\mp\gametypes\_globallogic_player::dodamagefeedback( weaponname, attacker ) ) - attacker maps\mp\gametypes\_damagefeedback::updatedamagefeedback(); - } - - continue; - case "willy_pete_mp": - continue; - case "emp_grenade_mp": - if ( level.teambased && self.owner.team != attacker.team ) - { - if ( maps\mp\gametypes\_globallogic_player::dodamagefeedback( weaponname, attacker ) ) - attacker maps\mp\gametypes\_damagefeedback::updatedamagefeedback(); - } - else if ( !level.teambased && self.owner != attacker ) - { - if ( maps\mp\gametypes\_globallogic_player::dodamagefeedback( weaponname, attacker ) ) - attacker maps\mp\gametypes\_damagefeedback::updatedamagefeedback(); - } - - break; - default: - break; - } - } - - if ( !isplayer( attacker ) && isdefined( attacker.owner ) ) - attacker = attacker.owner; - - if ( level.teambased && isplayer( attacker ) ) - { - if ( !level.hardcoremode && self.owner.team == attacker.pers["team"] && self.owner != attacker ) - continue; - } - - if ( maps\mp\gametypes\_globallogic_player::dodamagefeedback( weaponname, attacker ) ) - attacker maps\mp\gametypes\_damagefeedback::updatedamagefeedback(); - - if ( !isvehicle( self ) && !friendlyfirecheck( self.owner, attacker ) ) - continue; - - break; - } - - if ( level.weaponobjectexplodethisframe ) - wait( 0.1 + randomfloat( 0.4 ) ); - else - wait 0.05; - - if ( !isdefined( self ) ) - return; - - level.weaponobjectexplodethisframe = 1; - thread resetweaponobjectexplodethisframe(); - self maps\mp\_entityheadicons::setentityheadicon( "none" ); - - if ( isdefined( type ) && ( issubstr( type, "MOD_GRENADE_SPLASH" ) || issubstr( type, "MOD_GRENADE" ) || issubstr( type, "MOD_EXPLOSIVE" ) ) ) - self.waschained = 1; - - if ( isdefined( idflags ) && idflags & level.idflags_penetration ) - self.wasdamagedfrombulletpenetration = 1; - - self.wasdamaged = 1; - watcher thread waitanddetonate( self, 0.0, attacker, weaponname ); -} - -playdialogondeath( owner ) -{ - owner endon( "death" ); - owner endon( "disconnect" ); - self endon( "hacked" ); - - self waittill( "death" ); - - if ( isdefined( self.playdialog ) && self.playdialog ) - owner maps\mp\gametypes\_globallogic_audio::leaderdialogonplayer( "equipment_destroyed", "item_destroyed" ); -} - -watchobjectdamage( owner ) -{ - owner endon( "death" ); - owner endon( "disconnect" ); - self endon( "hacked" ); - self endon( "death" ); - - while ( true ) - { - self waittill( "damage", damage, attacker ); - - if ( isdefined( attacker ) && isplayer( attacker ) && attacker != owner ) - self.playdialog = 1; - else - self.playdialog = 0; - } -} - -stunstart( watcher, time ) -{ - self endon( "death" ); - - if ( self isstunned() ) - return; - - if ( isdefined( self.camerahead ) ) - self.camerahead setclientflag( 9 ); - - self setclientflag( 9 ); - - if ( isdefined( watcher.stun ) ) - self thread [[ watcher.stun ]](); - - if ( watcher.name == "rcbomb" ) - self.owner freezecontrolswrapper( 1 ); - - if ( isdefined( time ) ) - wait( time ); - else - return; - - if ( watcher.name == "rcbomb" ) - self.owner freezecontrolswrapper( 0 ); - - self stunstop(); -} - -stunstop() -{ - self notify( "not_stunned" ); - - if ( isdefined( self.camerahead ) ) - self.camerahead clearclientflag( 9 ); - - self clearclientflag( 9 ); -} - -weaponstun() -{ - self endon( "death" ); - self endon( "not_stunned" ); - origin = self gettagorigin( "tag_fx" ); - - if ( !isdefined( origin ) ) - origin = self.origin + vectorscale( ( 0, 0, 1 ), 10.0 ); - - self.stun_fx = spawn( "script_model", origin ); - self.stun_fx setmodel( "tag_origin" ); - self thread stunfxthink( self.stun_fx ); - wait 0.1; - playfxontag( level._equipment_spark_fx, self.stun_fx, "tag_origin" ); - self.stun_fx playsound( "dst_disable_spark" ); -} - -stunfxthink( fx ) -{ - fx endon( "death" ); - self waittill_any( "death", "not_stunned" ); - fx delete(); -} - -isstunned() -{ - return isdefined( self.stun_fx ); -} - -resetweaponobjectexplodethisframe() -{ - wait 0.05; - level.weaponobjectexplodethisframe = 0; -} - -getweaponobjectwatcher( name ) -{ - if ( !isdefined( self.weaponobjectwatcherarray ) ) - return undefined; - - for ( watcher = 0; watcher < self.weaponobjectwatcherarray.size; watcher++ ) - { - if ( self.weaponobjectwatcherarray[watcher].name == name ) - return self.weaponobjectwatcherarray[watcher]; - } - - return undefined; -} - -getweaponobjectwatcherbyweapon( weapon ) -{ - if ( !isdefined( self.weaponobjectwatcherarray ) ) - return undefined; - - for ( watcher = 0; watcher < self.weaponobjectwatcherarray.size; watcher++ ) - { - if ( isdefined( self.weaponobjectwatcherarray[watcher].weapon ) && self.weaponobjectwatcherarray[watcher].weapon == weapon ) - return self.weaponobjectwatcherarray[watcher]; - - if ( isdefined( self.weaponobjectwatcherarray[watcher].weapon ) && isdefined( self.weaponobjectwatcherarray[watcher].altweapon ) && self.weaponobjectwatcherarray[watcher].altweapon == weapon ) - return self.weaponobjectwatcherarray[watcher]; - } - - return undefined; -} - -resetweaponobjectwatcher( watcher, ownerteam ) -{ - if ( level.deleteexplosivesonspawn == 1 ) - { - self notify( "weapon_object_destroyed" ); - watcher deleteweaponobjectarray(); - } - - watcher.ownerteam = ownerteam; -} - -createweaponobjectwatcher( name, weapon, ownerteam ) -{ - if ( !isdefined( self.weaponobjectwatcherarray ) ) - self.weaponobjectwatcherarray = []; - - weaponobjectwatcher = getweaponobjectwatcher( name ); - - if ( !isdefined( weaponobjectwatcher ) ) - { - weaponobjectwatcher = spawnstruct(); - self.weaponobjectwatcherarray[self.weaponobjectwatcherarray.size] = weaponobjectwatcher; - weaponobjectwatcher.name = name; - weaponobjectwatcher.type = "use"; - weaponobjectwatcher.weapon = weapon; - weaponobjectwatcher.weaponidx = getweaponindexfromname( weapon ); - weaponobjectwatcher.watchforfire = 0; - weaponobjectwatcher.hackable = 0; - weaponobjectwatcher.altdetonate = 0; - weaponobjectwatcher.detectable = 1; - weaponobjectwatcher.headicon = 1; - weaponobjectwatcher.stuntime = 0; - weaponobjectwatcher.activatesound = undefined; - weaponobjectwatcher.ignoredirection = undefined; - weaponobjectwatcher.immediatedetonation = undefined; - weaponobjectwatcher.deploysound = getweaponfiresound( weaponobjectwatcher.weaponidx ); - weaponobjectwatcher.deploysoundplayer = getweaponfiresoundplayer( weaponobjectwatcher.weaponidx ); - weaponobjectwatcher.pickupsound = getweaponpickupsound( weaponobjectwatcher.weaponidx ); - weaponobjectwatcher.pickupsoundplayer = getweaponpickupsoundplayer( weaponobjectwatcher.weaponidx ); - weaponobjectwatcher.altweapon = undefined; - weaponobjectwatcher.ownergetsassist = 0; - weaponobjectwatcher.playdestroyeddialog = 1; - weaponobjectwatcher.deleteonkillbrush = 1; - weaponobjectwatcher.deleteondifferentobjectspawn = 1; - weaponobjectwatcher.enemydestroy = 0; - weaponobjectwatcher.onspawn = undefined; - weaponobjectwatcher.onspawnfx = undefined; - weaponobjectwatcher.onspawnretrievetriggers = undefined; - weaponobjectwatcher.ondetonated = undefined; - weaponobjectwatcher.detonate = undefined; - weaponobjectwatcher.stun = undefined; - weaponobjectwatcher.ondestroyed = undefined; - - if ( !isdefined( weaponobjectwatcher.objectarray ) ) - weaponobjectwatcher.objectarray = []; - } - - resetweaponobjectwatcher( weaponobjectwatcher, ownerteam ); - return weaponobjectwatcher; -} - -createuseweaponobjectwatcher( name, weapon, ownerteam ) -{ - weaponobjectwatcher = createweaponobjectwatcher( name, weapon, ownerteam ); - weaponobjectwatcher.type = "use"; - weaponobjectwatcher.onspawn = ::onspawnuseweaponobject; - return weaponobjectwatcher; -} - -createproximityweaponobjectwatcher( name, weapon, ownerteam ) -{ - weaponobjectwatcher = createweaponobjectwatcher( name, weapon, ownerteam ); - weaponobjectwatcher.type = "proximity"; - weaponobjectwatcher.onspawn = ::onspawnproximityweaponobject; - detectionconeangle = weapons_get_dvar_int( "scr_weaponobject_coneangle" ); - weaponobjectwatcher.detectiondot = cos( detectionconeangle ); - weaponobjectwatcher.detectionmindist = weapons_get_dvar_int( "scr_weaponobject_mindist" ); - weaponobjectwatcher.detectiongraceperiod = weapons_get_dvar( "scr_weaponobject_graceperiod" ); - weaponobjectwatcher.detonateradius = weapons_get_dvar_int( "scr_weaponobject_radius" ); - return weaponobjectwatcher; -} - -commononspawnuseweaponobject( watcher, owner ) -{ - if ( watcher.detectable ) - { - if ( isdefined( watcher.ismovable ) && watcher.ismovable ) - self thread weaponobjectdetectionmovable( owner.pers["team"] ); - else - self thread weaponobjectdetectiontrigger_wait( owner.pers["team"] ); - - if ( watcher.headicon && level.teambased ) - { - self waittillnotmoving(); - offset = level.weaponobjects_headicon_offset["default"]; - - if ( isdefined( level.weaponobjects_headicon_offset[self.name] ) ) - offset = level.weaponobjects_headicon_offset[self.name]; - - if ( isdefined( self ) ) - self maps\mp\_entityheadicons::setentityheadicon( owner.pers["team"], owner, offset ); - } - } -} - -onspawnuseweaponobject( watcher, owner ) -{ - self commononspawnuseweaponobject( watcher, owner ); -} - -onspawnproximityweaponobject( watcher, owner ) -{ - self thread commononspawnuseweaponobject( watcher, owner ); - self thread proximityweaponobjectdetonation( watcher ); -/# - if ( getdvarint( "scr_weaponobject_debug" ) ) - self thread proximityweaponobjectdebug( watcher ); -#/ -} - -watchweaponobjectusage() -{ - self endon( "disconnect" ); - - if ( !isdefined( self.weaponobjectwatcherarray ) ) - self.weaponobjectwatcherarray = []; - - self thread watchweaponobjectspawn(); - self thread watchweaponprojectileobjectspawn(); - self thread watchweaponobjectdetonation(); - self thread watchweaponobjectaltdetonation(); - self thread watchweaponobjectaltdetonate(); - self thread deleteweaponobjectson(); -} - -watchweaponobjectspawn() -{ - self notify( "watchWeaponObjectSpawn" ); - self endon( "watchWeaponObjectSpawn" ); - self endon( "disconnect" ); - - while ( true ) - { - self waittill( "grenade_fire", weapon, weapname ); - - switch ( weapname ) - { - case "tactical_insertion_mp": - case "scrambler_mp": - case "camera_spike_mp": - case "bouncingbetty_mp": - case "acoustic_sensor_mp": - break; - case "trophy_system_mp": - case "sensor_grenade_mp": - case "satchel_charge_mp": - case "proximity_grenade_mp": - case "claymore_mp": - case "bouncingbetty_mp": - for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) - { - if ( self.weaponobjectwatcherarray[i].weapon != weapname ) - continue; - - objectarray_size = self.weaponobjectwatcherarray[i].objectarray.size; - - for ( j = 0; j < objectarray_size; j++ ) - { - if ( !isdefined( self.weaponobjectwatcherarray[i].objectarray[j] ) ) - self.weaponobjectwatcherarray[i].objectarray = deleteweaponobject( self.weaponobjectwatcherarray[i], weapon ); - } - - numallowed = 2; - - if ( weapname == "proximity_grenade_mp" ) - numallowed = weapons_get_dvar_int( "scr_proximityGrenadeMaxInstances" ); - - if ( isdefined( self.weaponobjectwatcherarray[i].detonate ) && self.weaponobjectwatcherarray[i].objectarray.size > numallowed - 1 ) - self.weaponobjectwatcherarray[i] thread waitanddetonate( self.weaponobjectwatcherarray[i].objectarray[0], 0.1, undefined, weapname ); - } - - break; - default: - break; - } - - if ( !self ishacked() ) - { - if ( weapname == "claymore_mp" || weapname == "satchel_charge_mp" || weapname == "bouncingbetty_mp" ) - self addweaponstat( weapname, "used", 1 ); - } - - watcher = getweaponobjectwatcherbyweapon( weapname ); - - if ( isdefined( watcher ) ) - self addweaponobject( watcher, weapon ); - } -} - -anyobjectsinworld( weapon ) -{ - objectsinworld = 0; - - for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) - { - if ( self.weaponobjectwatcherarray[i].weapon != weapon ) - continue; - - if ( isdefined( self.weaponobjectwatcherarray[i].detonate ) && self.weaponobjectwatcherarray[i].objectarray.size > 0 ) - { - objectsinworld = 1; - break; - } - } - - return objectsinworld; -} - -watchweaponprojectileobjectspawn() -{ - self endon( "disconnect" ); - - while ( true ) - { - self waittill( "missile_fire", weapon, weapname ); - - watcher = getweaponobjectwatcherbyweapon( weapname ); - - if ( isdefined( watcher ) ) - { - self addweaponobject( watcher, weapon ); - objectarray_size = watcher.objectarray.size; - - for ( j = 0; j < objectarray_size; j++ ) - { - if ( !isdefined( watcher.objectarray[j] ) ) - watcher.objectarray = deleteweaponobject( watcher, weapon ); - } - - if ( isdefined( watcher.detonate ) && watcher.objectarray.size > 3 ) - watcher thread waitanddetonate( watcher.objectarray[0], 0.1 ); - } - } -} - -proximityweaponobjectdebug( watcher ) -{ -/# - self waittillnotmoving(); - self thread showcone( acos( watcher.detectiondot ), watcher.detonateradius, ( 1, 0.85, 0 ) ); - self thread showcone( 60, 256, ( 1, 0, 0 ) ); -#/ -} - -vectorcross( v1, v2 ) -{ -/# - return ( v1[1] * v2[2] - v1[2] * v2[1], v1[2] * v2[0] - v1[0] * v2[2], v1[0] * v2[1] - v1[1] * v2[0] ); -#/ -} - -showcone( angle, range, color ) -{ -/# - self endon( "death" ); - start = self.origin; - forward = anglestoforward( self.angles ); - right = vectorcross( forward, ( 0, 0, 1 ) ); - up = vectorcross( forward, right ); - fullforward = forward * range * cos( angle ); - sideamnt = range * sin( angle ); - - while ( true ) - { - prevpoint = ( 0, 0, 0 ); - - for ( i = 0; i <= 20; i++ ) - { - coneangle = i / 20.0 * 360; - point = start + fullforward + sideamnt * ( right * cos( coneangle ) + up * sin( coneangle ) ); - - if ( i > 0 ) - { - line( start, point, color ); - line( prevpoint, point, color ); - } - - prevpoint = point; - } - - wait 0.05; - } -#/ -} - -weaponobjectdetectionmovable( ownerteam ) -{ - self endon( "end_detection" ); - level endon( "game_ended" ); - self endon( "death" ); - self endon( "hacked" ); - - if ( level.oldschool ) - return; - - if ( !level.teambased ) - return; - - self.detectid = "rcBomb" + gettime() + randomint( 1000000 ); - - while ( !level.gameended ) - { - wait 1; - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - player = players[i]; - - if ( isai( player ) ) - continue; - - if ( isdefined( self.model_name ) && player hasperk( "specialty_detectexplosive" ) ) - { - switch ( self.model_name ) - { - case "t6_wpn_claymore_world_detect": - case "t6_wpn_c4_world_detect": - break; - default: - continue; - } - } - else - continue; - - if ( player.team == ownerteam ) - continue; - - if ( isdefined( player.bombsquadids[self.detectid] ) ) - continue; - } - } -} - -seticonpos( item, icon, heightincrease ) -{ - icon.x = item.origin[0]; - icon.y = item.origin[1]; - icon.z = item.origin[2] + heightincrease; -} - -weaponobjectdetectiontrigger_wait( ownerteam ) -{ - self endon( "death" ); - self endon( "hacked" ); - waittillnotmoving(); - - if ( level.oldschool ) - return; - - self thread weaponobjectdetectiontrigger( ownerteam ); -} - -weaponobjectdetectiontrigger( ownerteam ) -{ - trigger = spawn( "trigger_radius", self.origin - vectorscale( ( 0, 0, 1 ), 128.0 ), 0, 512, 256 ); - trigger.detectid = "trigger" + gettime() + randomint( 1000000 ); - trigger sethintlowpriority( 1 ); - self waittill_any( "death", "hacked" ); - trigger notify( "end_detection" ); - - if ( isdefined( trigger.bombsquadicon ) ) - trigger.bombsquadicon destroy(); - - trigger delete(); -} - -hackertriggersetvisibility( owner ) -{ - self endon( "death" ); -/# - assert( isplayer( owner ) ); -#/ - ownerteam = owner.pers["team"]; - - for (;;) - { - if ( level.teambased ) - { - self setvisibletoallexceptteam( ownerteam ); - self setexcludeteamfortrigger( ownerteam ); - } - else - { - self setvisibletoall(); - self setteamfortrigger( "none" ); - } - - if ( isdefined( owner ) ) - self setinvisibletoplayer( owner ); - - level waittill_any( "player_spawned", "joined_team" ); - } -} - -hackernotmoving() -{ - self endon( "death" ); - self waittillnotmoving(); - self notify( "landed" ); -} - -hackerinit( watcher ) -{ - self thread hackernotmoving(); - event = self waittill_any_return( "death", "landed" ); - - if ( event == "death" ) - return; - - triggerorigin = self.origin; - - if ( isdefined( self.name ) && self.name == "satchel_charge_mp" ) - triggerorigin = self gettagorigin( "tag_fx" ); - - self.hackertrigger = spawn( "trigger_radius_use", triggerorigin, level.weaponobjects_hacker_trigger_width, level.weaponobjects_hacker_trigger_height ); -/# - -#/ - self.hackertrigger sethintlowpriority( 1 ); - self.hackertrigger setcursorhint( "HINT_NOICON", self ); - self.hackertrigger setignoreentfortrigger( self ); - self.hackertrigger enablelinkto(); - self.hackertrigger linkto( self ); - - if ( isdefined( level.hackerhints[self.name] ) ) - self.hackertrigger sethintstring( level.hackerhints[self.name].hint ); - else - self.hackertrigger sethintstring( &"MP_GENERIC_HACKING" ); - - self.hackertrigger setperkfortrigger( "specialty_disarmexplosive" ); - self.hackertrigger thread hackertriggersetvisibility( self.owner ); - self thread hackerthink( self.hackertrigger, watcher ); -} - -hackerthink( trigger, watcher ) -{ - self endon( "death" ); - - for (;;) - { - trigger waittill( "trigger", player, instant ); - - if ( !isdefined( instant ) && !trigger hackerresult( player, self.owner ) ) - continue; - - self.owner hackerremoveweapon( self ); - self.owner maps\mp\gametypes\_globallogic_audio::leaderdialogonplayer( "hacked_equip", "item_destroyed" ); - self.hacked = 1; - self setmissileowner( player ); - self setteam( player.pers["team"] ); - self.owner = player; - - if ( isweaponequipment( self.name ) || self.name == "proximity_grenade_mp" ) - { - maps\mp\_scoreevents::processscoreevent( "hacked", player ); - player addweaponstat( "pda_hack_mp", "CombatRecordStat", 1 ); - player maps\mp\_challenges::hackedordestroyedequipment(); - } - - if ( self.name == "satchel_charge_mp" && isdefined( player.lowermessage ) ) - { - player.lowermessage settext( &"PLATFORM_SATCHEL_CHARGE_DOUBLE_TAP" ); - player.lowermessage.alpha = 1; - player.lowermessage fadeovertime( 2.0 ); - player.lowermessage.alpha = 0; - } - - self notify( "hacked", player ); - level notify( "hacked", self, player ); - - if ( self.name == "camera_spike_mp" && isdefined( self.camerahead ) ) - self.camerahead notify( "hacked", player ); - -/# - -#/ - - if ( isdefined( watcher.stun ) ) - { - self thread stunstart( watcher, 0.75 ); - wait 0.75; - } - else - wait 0.05; - - if ( isdefined( player ) && player.sessionstate == "playing" ) - player notify( "grenade_fire", self, self.name, 1 ); - else - watcher thread waitanddetonate( self, 0.0 ); - - return; - } -} - -hackerunfreezeplayer( player ) -{ - self endon( "hack_done" ); - - self waittill( "death" ); - - if ( isdefined( player ) ) - { - player freeze_player_controls( 0 ); - player enableweapons(); - } -} - -hackerresult( player, owner ) -{ - success = 1; - time = gettime(); - hacktime = getdvarfloat( "perk_disarmExplosiveTime" ); - - if ( !canhack( player, owner, 1 ) ) - return 0; - - self thread hackerunfreezeplayer( player ); - - while ( time + hacktime * 1000 > gettime() ) - { - if ( !canhack( player, owner, 0 ) ) - { - success = 0; - break; - } - - if ( !player usebuttonpressed() ) - { - success = 0; - break; - } - - if ( !isdefined( self ) ) - { - success = 0; - break; - } - - player freeze_player_controls( 1 ); - player disableweapons(); - - if ( !isdefined( self.progressbar ) ) - { - self.progressbar = player createprimaryprogressbar(); - self.progressbar.lastuserate = -1; - self.progressbar showelem(); - self.progressbar updatebar( 0.01, 1 / hacktime ); - self.progresstext = player createprimaryprogressbartext(); - self.progresstext settext( &"MP_HACKING" ); - self.progresstext showelem(); - player playlocalsound( "evt_hacker_hacking" ); - } - - wait 0.05; - } - - if ( isdefined( player ) ) - { - player freeze_player_controls( 0 ); - player enableweapons(); - } - - if ( isdefined( self.progressbar ) ) - { - self.progressbar destroyelem(); - self.progresstext destroyelem(); - } - - if ( isdefined( self ) ) - self notify( "hack_done" ); - - return success; -} - -canhack( player, owner, weapon_check ) -{ - if ( !isdefined( player ) ) - return false; - - if ( !isplayer( player ) ) - return false; - - if ( !isalive( player ) ) - return false; - - if ( !isdefined( owner ) ) - return false; - - if ( owner == player ) - return false; - - if ( level.teambased && player.team == owner.team ) - return false; - - if ( isdefined( player.isdefusing ) && player.isdefusing ) - return false; - - if ( isdefined( player.isplanting ) && player.isplanting ) - return false; - - if ( isdefined( player.proxbar ) && !player.proxbar.hidden ) - return false; - - if ( isdefined( player.revivingteammate ) && player.revivingteammate == 1 ) - return false; - - if ( !player isonground() ) - return false; - - if ( player isinvehicle() ) - return false; - - if ( player isweaponviewonlylinked() ) - return false; - - if ( !player hasperk( "specialty_disarmexplosive" ) ) - return false; - - if ( player isempjammed() ) - return false; - - if ( isdefined( player.laststand ) && player.laststand ) - return false; - - if ( weapon_check ) - { - if ( player isthrowinggrenade() ) - return false; - - if ( player isswitchingweapons() ) - return false; - - if ( player ismeleeing() ) - return false; - - weapon = player getcurrentweapon(); - - if ( !isdefined( weapon ) ) - return false; - - if ( weapon == "none" ) - return false; - - if ( isweaponequipment( weapon ) && player isfiring() ) - return false; - - if ( isweaponspecificuse( weapon ) ) - return false; - } - - return true; -} - -hackerremoveweapon( weapon ) -{ - for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) - { - if ( self.weaponobjectwatcherarray[i].weapon != weapon.name ) - continue; - - objectarray_size = self.weaponobjectwatcherarray[i].objectarray.size; - - for ( j = 0; j < objectarray_size; j++ ) - self.weaponobjectwatcherarray[i].objectarray = deleteweaponobject( self.weaponobjectwatcherarray[i], weapon ); - - return; - } -} - -proximityweaponobjectdetonation( watcher ) -{ - self endon( "death" ); - self endon( "hacked" ); - self waittillnotmoving(); - - if ( isdefined( watcher.activationdelay ) ) - wait( watcher.activationdelay ); - - damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - watcher.detonateradius ), level.aitriggerspawnflags | level.vehicletriggerspawnflags, watcher.detonateradius, watcher.detonateradius * 2 ); - damagearea enablelinkto(); - damagearea linkto( self ); - self thread deleteondeath( damagearea ); - up = anglestoup( self.angles ); - traceorigin = self.origin + up; - - while ( true ) - { - damagearea waittill( "trigger", ent ); - - if ( getdvarint( "scr_weaponobject_debug" ) != 1 ) - { - if ( isdefined( self.owner ) && ent == self.owner ) - continue; - - if ( isdefined( self.owner ) && isvehicle( ent ) && isdefined( ent.owner ) && self.owner == ent.owner ) - continue; - - if ( !friendlyfirecheck( self.owner, ent, 0 ) ) - continue; - } - - if ( lengthsquared( ent getvelocity() ) < 10 && !isdefined( watcher.immediatedetonation ) ) - continue; - - if ( !ent shouldaffectweaponobject( self, watcher ) ) - continue; - - if ( self isstunned() ) - continue; - - if ( isplayer( ent ) && !isalive( ent ) ) - continue; - - if ( ent damageconetrace( traceorigin, self ) > 0 ) - break; - } - - if ( isdefined( watcher.activatesound ) ) - self playsound( watcher.activatesound ); - - if ( isdefined( watcher.activatefx ) ) - self setclientflag( 4 ); - - ent thread deathdodger( watcher.detectiongraceperiod ); - wait( watcher.detectiongraceperiod ); - - if ( isplayer( ent ) && ent hasperk( "specialty_delayexplosive" ) ) - wait( getdvarfloat( "perk_delayExplosiveTime" ) ); - - self maps\mp\_entityheadicons::setentityheadicon( "none" ); - self.origin = traceorigin; - - if ( isdefined( self.owner ) && isplayer( self.owner ) ) - self [[ watcher.detonate ]]( self.owner ); - else - self [[ watcher.detonate ]](); -} - -shouldaffectweaponobject( object, watcher ) -{ - radius = getweaponexplosionradius( watcher.weapon ); - distancesqr = distancesquared( self.origin, object.origin ); - - if ( radius * radius < distancesqr ) - return 0; - - pos = self.origin + vectorscale( ( 0, 0, 1 ), 32.0 ); - - if ( isdefined( watcher.ignoredirection ) ) - return 1; - - dirtopos = pos - object.origin; - objectforward = anglestoforward( object.angles ); - dist = vectordot( dirtopos, objectforward ); - - if ( dist < watcher.detectionmindist ) - return 0; - - dirtopos = vectornormalize( dirtopos ); - dot = vectordot( dirtopos, objectforward ); - return dot > watcher.detectiondot; -} - -deathdodger( graceperiod ) -{ - self endon( "death" ); - self endon( "disconnect" ); - wait( 0.2 + graceperiod ); - self notify( "death_dodger" ); -} - -deleteondeath( ent ) -{ - self waittill_any( "death", "hacked" ); - wait 0.05; - - if ( isdefined( ent ) ) - ent delete(); -} - -testkillbrushonstationary( killbrusharray, player ) -{ - player endon( "disconnect" ); - self endon( "death" ); - - self waittill( "stationary" ); - - wait 0.1; - - for ( i = 0; i < killbrusharray.size; i++ ) - { - if ( self istouching( killbrusharray[i] ) ) - { - if ( self.origin[2] > player.origin[2] ) - break; - - if ( isdefined( self ) ) - self delete(); - - return; - } - } -} - -deleteonkillbrush( player ) -{ - player endon( "disconnect" ); - self endon( "death" ); - self endon( "stationary" ); - killbrushes = getentarray( "trigger_hurt", "classname" ); - self thread testkillbrushonstationary( killbrushes, player ); - - while ( true ) - { - for ( i = 0; i < killbrushes.size; i++ ) - { - if ( self istouching( killbrushes[i] ) ) - { - if ( self.origin[2] > player.origin[2] ) - break; - - if ( isdefined( self ) ) - self delete(); - - return; - } - } - - wait 0.1; - } -} - -watchweaponobjectaltdetonation() -{ - self endon( "disconnect" ); - - while ( true ) - { - self waittill( "alt_detonate" ); - - if ( !isalive( self ) ) - continue; - - for ( watcher = 0; watcher < self.weaponobjectwatcherarray.size; watcher++ ) - { - if ( self.weaponobjectwatcherarray[watcher].altdetonate ) - self.weaponobjectwatcherarray[watcher] detonateweaponobjectarray( 0 ); - } - } -} - -watchweaponobjectaltdetonate() -{ - self endon( "disconnect" ); - self endon( "detonated" ); - level endon( "game_ended" ); - buttontime = 0; - - for (;;) - { - self waittill( "doubletap_detonate" ); - - if ( !isalive( self ) ) - continue; - - self notify( "alt_detonate" ); - wait 0.05; - } -} - -watchweaponobjectdetonation() -{ - self endon( "disconnect" ); - - while ( true ) - { - self waittill( "detonate" ); - - if ( self isusingoffhand() ) - weap = self getcurrentoffhand(); - else - weap = self getcurrentweapon(); - - watcher = getweaponobjectwatcherbyweapon( weap ); - - if ( isdefined( watcher ) ) - watcher detonateweaponobjectarray( 0 ); - } -} - -deleteweaponobjectson() -{ - while ( true ) - { - msg = self waittill_any_return( "disconnect", "joined_team", "joined_spectators", "death" ); - - if ( msg == "death" ) - continue; - - if ( !isdefined( self.weaponobjectwatcherarray ) ) - return; - - watchers = []; - - for ( watcher = 0; watcher < self.weaponobjectwatcherarray.size; watcher++ ) - { - weaponobjectwatcher = spawnstruct(); - watchers[watchers.size] = weaponobjectwatcher; - weaponobjectwatcher.objectarray = []; - - if ( isdefined( self.weaponobjectwatcherarray[watcher].objectarray ) ) - weaponobjectwatcher.objectarray = self.weaponobjectwatcherarray[watcher].objectarray; - } - - wait 0.05; - - for ( watcher = 0; watcher < watchers.size; watcher++ ) - watchers[watcher] deleteweaponobjectarray(); - - if ( msg == "disconnect" ) - return; - } -} - -saydamaged( orig, amount ) -{ -/# - for ( i = 0; i < 60; i++ ) - { - print3d( orig, "damaged! " + amount ); - wait 0.05; - } -#/ -} - -showheadicon( trigger ) -{ - triggerdetectid = trigger.detectid; - useid = -1; - - for ( index = 0; index < 4; index++ ) - { - detectid = self.bombsquadicons[index].detectid; - - if ( detectid == triggerdetectid ) - return; - - if ( detectid == "" ) - useid = index; - } - - if ( useid < 0 ) - return; - - self.bombsquadids[triggerdetectid] = 1; - self.bombsquadicons[useid].x = trigger.origin[0]; - self.bombsquadicons[useid].y = trigger.origin[1]; - self.bombsquadicons[useid].z = trigger.origin[2] + 24 + 128; - self.bombsquadicons[useid] fadeovertime( 0.25 ); - self.bombsquadicons[useid].alpha = 1; - self.bombsquadicons[useid].detectid = trigger.detectid; - - while ( isalive( self ) && isdefined( trigger ) && self istouching( trigger ) ) - wait 0.05; - - if ( !isdefined( self ) ) - return; - - self.bombsquadicons[useid].detectid = ""; - self.bombsquadicons[useid] fadeovertime( 0.25 ); - self.bombsquadicons[useid].alpha = 0; - self.bombsquadids[triggerdetectid] = undefined; -} - -friendlyfirecheck( owner, attacker, forcedfriendlyfirerule ) -{ - if ( !isdefined( owner ) ) - return true; - - if ( !level.teambased ) - return true; - - friendlyfirerule = level.friendlyfire; - - if ( isdefined( forcedfriendlyfirerule ) ) - friendlyfirerule = forcedfriendlyfirerule; - - if ( friendlyfirerule != 0 ) - return true; - - if ( attacker == owner ) - return true; - - if ( isplayer( attacker ) ) - { - if ( !isdefined( attacker.pers["team"] ) ) - return true; - - if ( attacker.pers["team"] != owner.pers["team"] ) - return true; - } - else if ( isai( attacker ) ) - { - if ( attacker.aiteam != owner.pers["team"] ) - return true; - } - else if ( isvehicle( attacker ) ) - { - if ( isdefined( attacker.owner ) && isplayer( attacker.owner ) ) - { - if ( attacker.owner.pers["team"] != owner.pers["team"] ) - return true; - } - else - { - occupant_team = attacker maps\mp\_vehicles::vehicle_get_occupant_team(); - - if ( occupant_team != owner.pers["team"] ) - return true; - } - } - - return false; -} - -onspawnhatchettrigger( watcher, player ) -{ - self endon( "death" ); - self setowner( player ); - self setteam( player.pers["team"] ); - self.owner = player; - self.oldangles = self.angles; - self waittillnotmoving(); - waittillframeend; - - if ( player.pers["team"] == "spectator" ) - return; - - triggerorigin = self.origin; - triggerparentent = undefined; - - if ( isdefined( self.stucktoplayer ) ) - { - if ( isalive( self.stucktoplayer ) || !isdefined( self.stucktoplayer.body ) ) - { - if ( isalive( self.stucktoplayer ) ) - { - triggerparentent = self; - self unlink(); - self.angles = self.oldangles; - self launch( vectorscale( ( 1, 1, 1 ), 5.0 ) ); - self waittillnotmoving(); - waittillframeend; - } - else - triggerparentent = self.stucktoplayer; - } - else - triggerparentent = self.stucktoplayer.body; - } - - if ( isdefined( triggerparentent ) ) - triggerorigin = triggerparentent.origin + vectorscale( ( 0, 0, 1 ), 10.0 ); - - self.hatchetpickuptrigger = spawn( "trigger_radius", triggerorigin, 0, 50, 50 ); - self.hatchetpickuptrigger enablelinkto(); - self.hatchetpickuptrigger linkto( self ); - - if ( isdefined( triggerparentent ) ) - self.hatchetpickuptrigger linkto( triggerparentent ); - - self thread watchhatchettrigger( self.hatchetpickuptrigger, watcher.pickup, watcher.pickupsoundplayer, watcher.pickupsound ); -/# - thread switch_team( self, watcher.weapon, player ); -#/ - self thread watchshutdown( player ); -} - -watchhatchettrigger( trigger, callback, playersoundonuse, npcsoundonuse ) -{ - self endon( "delete" ); - self endon( "hacked" ); - - while ( true ) - { - trigger waittill( "trigger", player ); - - if ( !isalive( player ) ) - continue; - - if ( !player isonground() ) - continue; - - if ( isdefined( trigger.claimedby ) && player != trigger.claimedby ) - continue; - - if ( !player hasweapon( self.name ) ) - continue; - - curr_ammo = player getweaponammostock( "hatchet_mp" ); - maxammo = weaponmaxammo( "hatchet_mp" ); - - if ( player.grenadetypeprimary == "hatchet_mp" ) - maxammo = player.grenadetypeprimarycount; - else if ( isdefined( player.grenadetypesecondary ) && player.grenadetypesecondary == "hatchet_mp" ) - maxammo = player.grenadetypesecondarycount; - - if ( curr_ammo >= maxammo ) - continue; - - if ( isdefined( playersoundonuse ) ) - player playlocalsound( playersoundonuse ); - - if ( isdefined( npcsoundonuse ) ) - player playsound( npcsoundonuse ); - - self thread [[ callback ]]( player ); - } -} - -onspawnretrievableweaponobject( watcher, player ) -{ - self endon( "death" ); - self endon( "hacked" ); - - if ( ishacked() ) - { - self thread watchshutdown( player ); - return; - } - - self setowner( player ); - self setteam( player.pers["team"] ); - self.owner = player; - self.oldangles = self.angles; - self waittillnotmoving(); - - if ( isdefined( watcher.activationdelay ) ) - wait( watcher.activationdelay ); - - waittillframeend; - - if ( player.pers["team"] == "spectator" ) - return; - - triggerorigin = self.origin; - triggerparentent = undefined; - - if ( isdefined( self.stucktoplayer ) ) - { - if ( isalive( self.stucktoplayer ) || !isdefined( self.stucktoplayer.body ) ) - triggerparentent = self.stucktoplayer; - else - triggerparentent = self.stucktoplayer.body; - } - - if ( isdefined( triggerparentent ) ) - triggerorigin = triggerparentent.origin + vectorscale( ( 0, 0, 1 ), 10.0 ); - else - { - up = anglestoup( self.angles ); - triggerorigin = self.origin + up; - } - - self.pickuptrigger = spawn( "trigger_radius_use", triggerorigin ); - self.pickuptrigger sethintlowpriority( 1 ); - self.pickuptrigger setcursorhint( "HINT_NOICON", self ); - self.pickuptrigger enablelinkto(); - self.pickuptrigger linkto( self ); - self.pickuptrigger setinvisibletoall(); - self.pickuptrigger setvisibletoplayer( player ); - - if ( isdefined( level.retrievehints[watcher.name] ) ) - self.pickuptrigger sethintstring( level.retrievehints[watcher.name].hint ); - else - self.pickuptrigger sethintstring( &"MP_GENERIC_PICKUP" ); - - if ( level.teambased ) - self.pickuptrigger setteamfortrigger( player.pers["team"] ); - else - self.pickuptrigger setteamfortrigger( "none" ); - - if ( isdefined( triggerparentent ) ) - self.pickuptrigger linkto( triggerparentent ); - - if ( watcher.enemydestroy ) - { - self.enemytrigger = spawn( "trigger_radius_use", triggerorigin ); - self.enemytrigger setcursorhint( "HINT_NOICON", self ); - self.enemytrigger enablelinkto(); - self.enemytrigger linkto( self ); - self.enemytrigger setinvisibletoplayer( player ); - - if ( level.teambased ) - { - self.enemytrigger setexcludeteamfortrigger( player.team ); - self.enemytrigger.triggerteamignore = self.team; - } - - if ( isdefined( level.destroyhints[watcher.name] ) ) - self.enemytrigger sethintstring( level.destroyhints[watcher.name].hint ); - else - self.enemytrigger sethintstring( &"MP_GENERIC_DESTROY" ); - - self thread watchusetrigger( self.enemytrigger, watcher.ondestroyed ); - } - - self thread watchusetrigger( self.pickuptrigger, watcher.pickup, watcher.pickupsoundplayer, watcher.pickupsound ); -/# - thread switch_team( self, watcher.weapon, player ); -#/ - - if ( isdefined( watcher.pickup_trigger_listener ) ) - self thread [[ watcher.pickup_trigger_listener ]]( self.pickuptrigger, player ); - - self thread watchshutdown( player ); -} - -watch_trigger_visibility( triggers, weap_name ) -{ - self notify( "watchTriggerVisibility" ); - self endon( "watchTriggerVisibility" ); - self endon( "death" ); - self endon( "hacked" ); - max_ammo = weaponmaxammo( weap_name ); - start_ammo = weaponstartammo( weap_name ); - ammo_to_check = 0; - - while ( true ) - { - players = level.players; - - for ( i = 0; i < players.size; i++ ) - { - if ( players[i] hasweapon( weap_name ) ) - { - ammo_to_check = max_ammo; - - if ( self.owner == players[i] ) - { - curr_ammo = players[i] getweaponammostock( weap_name ) + players[i] getweaponammoclip( weap_name ); - - if ( weap_name == "hatchet_mp" ) - curr_ammo = players[i] getweaponammostock( weap_name ); - - if ( curr_ammo < ammo_to_check ) - { - triggers["owner_pickup"] setvisibletoplayer( players[i] ); - triggers["enemy_pickup"] setinvisibletoplayer( players[i] ); - } - else - { - triggers["owner_pickup"] setinvisibletoplayer( players[i] ); - triggers["enemy_pickup"] setinvisibletoplayer( players[i] ); - } - } - else - { - curr_ammo = players[i] getweaponammostock( weap_name ) + players[i] getweaponammoclip( weap_name ); - - if ( weap_name == "hatchet_mp" ) - curr_ammo = players[i] getweaponammostock( weap_name ); - - if ( curr_ammo < ammo_to_check ) - { - triggers["owner_pickup"] setinvisibletoplayer( players[i] ); - triggers["enemy_pickup"] setvisibletoplayer( players[i] ); - } - else - { - triggers["owner_pickup"] setinvisibletoplayer( players[i] ); - triggers["enemy_pickup"] setinvisibletoplayer( players[i] ); - } - } - - continue; - } - - triggers["owner_pickup"] setinvisibletoplayer( players[i] ); - triggers["enemy_pickup"] setinvisibletoplayer( players[i] ); - } - - wait 0.05; - } -} - -destroyent() -{ - self delete(); -} - -pickup( player ) -{ - if ( self.name != "hatchet_mp" && isdefined( self.owner ) && self.owner != player ) - return; - - self notify( "picked_up" ); - self.playdialog = 0; - self destroyent(); - player giveweapon( self.name ); - clip_ammo = player getweaponammoclip( self.name ); - clip_max_ammo = weaponclipsize( self.name ); - - if ( clip_ammo < clip_max_ammo ) - clip_ammo++; - - player setweaponammoclip( self.name, clip_ammo ); -} - -ondestroyed( attacker ) -{ - playfx( level._effect["tacticalInsertionFizzle"], self.origin ); - self playsound( "dst_tac_insert_break" ); - self.owner maps\mp\gametypes\_globallogic_audio::leaderdialogonplayer( "equipment_destroyed", "item_destroyed" ); - self delete(); -} - -watchshutdown( player ) -{ - self waittill_any( "death", "hacked" ); - pickuptrigger = self.pickuptrigger; - hackertrigger = self.hackertrigger; - hatchetpickuptrigger = self.hatchetpickuptrigger; - enemytrigger = self.enemytrigger; - - if ( isdefined( pickuptrigger ) ) - pickuptrigger delete(); - - if ( isdefined( hackertrigger ) ) - { - if ( isdefined( hackertrigger.progressbar ) ) - { - hackertrigger.progressbar destroyelem(); - hackertrigger.progresstext destroyelem(); - } - - hackertrigger delete(); - } - - if ( isdefined( hatchetpickuptrigger ) ) - hatchetpickuptrigger delete(); - - if ( isdefined( enemytrigger ) ) - enemytrigger delete(); -} - -watchusetrigger( trigger, callback, playersoundonuse, npcsoundonuse ) -{ - self endon( "delete" ); - self endon( "hacked" ); - - while ( true ) - { - trigger waittill( "trigger", player ); - - if ( !isalive( player ) ) - continue; - - if ( !player isonground() ) - continue; - - if ( isdefined( trigger.triggerteam ) && player.pers["team"] != trigger.triggerteam ) - continue; - - if ( isdefined( trigger.triggerteamignore ) && player.team == trigger.triggerteamignore ) - continue; - - if ( isdefined( trigger.claimedby ) && player != trigger.claimedby ) - continue; - - grenade = player.throwinggrenade; - isequipment = isweaponequipment( player getcurrentweapon() ); - - if ( isdefined( isequipment ) && isequipment ) - grenade = 0; - - if ( player usebuttonpressed() && !grenade && !player meleebuttonpressed() ) - { - if ( isdefined( playersoundonuse ) ) - player playlocalsound( playersoundonuse ); - - if ( isdefined( npcsoundonuse ) ) - player playsound( npcsoundonuse ); - - self thread [[ callback ]]( player ); - } - } -} - -createretrievablehint( name, hint ) -{ - retrievehint = spawnstruct(); - retrievehint.name = name; - retrievehint.hint = hint; - level.retrievehints[name] = retrievehint; -} - -createhackerhint( name, hint ) -{ - hackerhint = spawnstruct(); - hackerhint.name = name; - hackerhint.hint = hint; - level.hackerhints[name] = hackerhint; -} - -createdestroyhint( name, hint ) -{ - destroyhint = spawnstruct(); - destroyhint.name = name; - destroyhint.hint = hint; - level.destroyhints[name] = destroyhint; -} - -attachreconmodel( modelname, owner ) -{ - if ( !isdefined( self ) ) - return; - - reconmodel = spawn( "script_model", self.origin ); - reconmodel.angles = self.angles; - reconmodel setmodel( modelname ); - reconmodel.model_name = modelname; - reconmodel linkto( self ); - reconmodel setcontents( 0 ); - reconmodel resetreconmodelvisibility( owner ); - reconmodel thread watchreconmodelfordeath( self ); - reconmodel thread resetreconmodelonevent( "joined_team", owner ); - reconmodel thread resetreconmodelonevent( "player_spawned", owner ); - self.reconmodelentity = reconmodel; -} - -resetreconmodelvisibility( owner ) -{ - if ( !isdefined( self ) ) - return; - - self setinvisibletoall(); - self setforcenocull(); - - if ( !isdefined( owner ) ) - return; - - for ( i = 0; i < level.players.size; i++ ) - { - if ( !level.players[i] hasperk( "specialty_detectexplosive" ) && !level.players[i] hasperk( "specialty_showenemyequipment" ) ) - continue; - - if ( level.players[i].team == "spectator" ) - continue; - - hasreconmodel = 0; - - if ( level.players[i] hasperk( "specialty_detectexplosive" ) ) - { - switch ( self.model_name ) - { - case "t6_wpn_claymore_world_detect": - case "t6_wpn_c4_world_detect": - hasreconmodel = 1; - break; - default: - break; - } - } - - if ( level.players[i] hasperk( "specialty_showenemyequipment" ) ) - { - switch ( self.model_name ) - { - case "t6_wpn_trophy_system_world_detect": - case "t6_wpn_taser_mine_world_detect": - case "t6_wpn_tac_insert_detect": - case "t6_wpn_motion_sensor_world_detect": - case "t6_wpn_claymore_world_detect": - case "t6_wpn_c4_world_detect": - case "t6_wpn_bouncing_betty_world_detect": - case "t5_weapon_scrambler_world_detect": - hasreconmodel = 1; - break; - default: - break; - } - } - - if ( !hasreconmodel ) - continue; - - isenemy = 1; - - if ( level.teambased ) - { - if ( level.players[i].team == owner.team ) - isenemy = 0; - } - else if ( level.players[i] == owner ) - isenemy = 0; - - if ( isenemy ) - self setvisibletoplayer( level.players[i] ); - } -} - -watchreconmodelfordeath( parentent ) -{ - self endon( "death" ); - parentent waittill_any( "death", "hacked" ); - self delete(); -} - -resetreconmodelonevent( eventname, owner ) -{ - self endon( "death" ); - - for (;;) - { - level waittill( eventname, newowner ); - - if ( isdefined( newowner ) ) - owner = newowner; - - self resetreconmodelvisibility( owner ); - } -} - -switch_team( entity, weapon_name, owner ) -{ -/# - self notify( "stop_disarmthink" ); - self endon( "stop_disarmthink" ); - self endon( "death" ); - setdvar( "scr_switch_team", "" ); - - while ( true ) - { - wait 0.5; - devgui_int = getdvarint( "scr_switch_team" ); - - if ( devgui_int != 0 ) - { - team = "autoassign"; - player = maps\mp\gametypes\_dev::getormakebot( team ); - - if ( !isdefined( player ) ) - { - println( "Could not add test client" ); - wait 1; - continue; - } - - entity.owner hackerremoveweapon( entity ); - entity.hacked = 1; - entity setowner( player ); - entity setteam( player.pers["team"] ); - entity.owner = player; - entity notify( "hacked", player ); - level notify( "hacked", entity, player ); - - if ( entity.name == "camera_spike_mp" && isdefined( entity.camerahead ) ) - entity.camerahead notify( "hacked", player ); - - wait 0.05; - - if ( isdefined( player ) && player.sessionstate == "playing" ) - player notify( "grenade_fire", self, self.name ); - - setdvar( "scr_switch_team", "0" ); - } - } -#/ -} diff --git a/Multiplayer Core/patch_mp/maps/mp/gametypes/_weapons.gsc b/Multiplayer Core/patch_mp/maps/mp/gametypes/_weapons.gsc deleted file mode 100644 index bfc8775..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/gametypes/_weapons.gsc +++ /dev/null @@ -1,2000 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool - -init() -{ - precacheitem( "knife_mp" ); - precacheitem( "knife_held_mp" ); - precacheitem( "dogs_mp" ); - precacheitem( "dog_bite_mp" ); - precacheitem( "explosive_bolt_mp" ); - precachemodel( "t6_wpn_claymore_world_detect" ); - precachemodel( "t6_wpn_c4_world_detect" ); - precachemodel( "t5_weapon_scrambler_world_detect" ); - precachemodel( "t6_wpn_tac_insert_detect" ); - precachemodel( "t6_wpn_taser_mine_world_detect" ); - precachemodel( "t6_wpn_motion_sensor_world_detect" ); - precachemodel( "t6_wpn_trophy_system_world_detect" ); - precachemodel( "t6_wpn_bouncing_betty_world_detect" ); - precachemodel( "t6_wpn_tac_insert_world" ); - precachemodel( "t6_wpn_shield_stow_world" ); - precachemodel( "t6_wpn_shield_carry_world" ); - precachemodel( "t5_weapon_camera_head_world" ); - precacheitem( "scavenger_item_mp" ); - precacheitem( "scavenger_item_hack_mp" ); - precacheshader( "hud_scavenger_pickup" ); - precacheshellshock( "default" ); - precacheshellshock( "concussion_grenade_mp" ); - precacheshellshock( "tabun_gas_mp" ); - precacheshellshock( "tabun_gas_nokick_mp" ); - precacheshellshock( "proximity_grenade" ); - precacheshellshock( "proximity_grenade_exit" ); - level.missileentities = []; - level.hackertooltargets = []; - level.missileduddeletedelay = getdvarintdefault( "scr_missileDudDeleteDelay", 3 ); - thread maps\mp\_flashgrenades::main(); - thread maps\mp\_empgrenade::init(); - thread maps\mp\_entityheadicons::init(); - - if ( !isdefined( level.roundstartexplosivedelay ) ) - level.roundstartexplosivedelay = 0; - - level thread onplayerconnect(); - maps\mp\gametypes\_weaponobjects::init(); - maps\mp\_smokegrenade::init(); - maps\mp\_heatseekingmissile::init(); - maps\mp\_acousticsensor::init(); - maps\mp\_sensor_grenade::init(); - maps\mp\_tacticalinsertion::init(); - maps\mp\_scrambler::init(); - maps\mp\_explosive_bolt::init(); - maps\mp\_sticky_grenade::init(); - maps\mp\_proximity_grenade::init(); - maps\mp\_bouncingbetty::init(); - maps\mp\_trophy_system::init(); - maps\mp\_ballistic_knife::init(); - maps\mp\_satchel_charge::init(); - maps\mp\_riotshield::init(); - maps\mp\_hacker_tool::init(); -} - -onplayerconnect() -{ - for (;;) - { - level waittill( "connecting", player ); - - player.usedweapons = 0; - player.lastfiretime = 0; - player.hits = 0; - player scavenger_hud_create(); - player thread onplayerspawned(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - - for (;;) - { - self waittill( "spawned_player" ); - - self.concussionendtime = 0; - self.scavenged = 0; - self.hasdonecombat = 0; - self.shielddamageblocked = 0; - self thread watchweaponusage(); - self thread watchgrenadeusage(); - self thread watchmissileusage(); - self thread watchweaponchange(); - self thread watchturretuse(); - self thread watchriotshielduse(); - self thread trackweapon(); - self.droppeddeathweapon = undefined; - self.tookweaponfrom = []; - self.pickedupweaponkills = []; - self thread updatestowedweapon(); - } -} - -watchturretuse() -{ - self endon( "death" ); - self endon( "disconnect" ); - - while ( true ) - { - self waittill( "turretownerchange", turret ); - - self thread watchfortowfire( turret ); - } -} - -watchfortowfire( turret ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "turretownerchange" ); - - while ( true ) - { - self waittill( "turret_tow_fire" ); - - self thread watchmissleunlink( turret ); - - self waittill( "turret_tow_unlink" ); - } -} - -watchmissleunlink( turret ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "turretownerchange" ); - - self waittill( "turret_tow_unlink" ); - - self relinktoturret( turret ); -} - -watchweaponchange() -{ - self endon( "death" ); - self endon( "disconnect" ); - self.lastdroppableweapon = self getcurrentweapon(); - self.hitsthismag = []; - weapon = self getcurrentweapon(); - - if ( isprimaryweapon( weapon ) && !isdefined( self.hitsthismag[weapon] ) ) - self.hitsthismag[weapon] = weaponclipsize( weapon ); - - self.lastweaponchange = 0; - - while ( true ) - { - previous_weapon = self getcurrentweapon(); - - self waittill( "weapon_change", newweapon ); - - if ( maydropweapon( newweapon ) ) - { - self.lastdroppableweapon = newweapon; - self.lastweaponchange = gettime(); - } - - if ( newweapon != "none" ) - { - if ( ( isprimaryweapon( newweapon ) || issidearm( newweapon ) ) && !isdefined( self.hitsthismag[newweapon] ) ) - self.hitsthismag[newweapon] = weaponclipsize( newweapon ); - } - - if ( doesweaponreplacespawnweapon( self.spawnweapon, newweapon ) ) - { - self.spawnweapon = newweapon; - self.pers["spawnWeapon"] = newweapon; - } - } -} - -watchriotshielduse() -{ - self endon( "death" ); - self endon( "disconnect" ); - self thread maps\mp\_riotshield::trackriotshield(); - - for (;;) - { - self waittill( "raise_riotshield" ); - - self thread maps\mp\_riotshield::startriotshielddeploy(); - } -} - -updatelastheldweapontimings( newtime ) -{ - if ( isdefined( self.currentweapon ) && isdefined( self.currentweaponstarttime ) ) - { - totaltime = int( ( newtime - self.currentweaponstarttime ) / 1000 ); - - if ( totaltime > 0 ) - { - self addweaponstat( self.currentweapon, "timeUsed", totaltime ); - self.currentweaponstarttime = newtime; - } - } -} - -updateweapontimings( newtime ) -{ - if ( self is_bot() ) - return; - - updatelastheldweapontimings( newtime ); - - if ( !isdefined( self.staticweaponsstarttime ) ) - return; - - totaltime = int( ( newtime - self.staticweaponsstarttime ) / 1000 ); - - if ( totaltime < 0 ) - return; - - self.staticweaponsstarttime = newtime; - - if ( isdefined( self.weapon_array_grenade ) ) - { - for ( i = 0; i < self.weapon_array_grenade.size; i++ ) - self addweaponstat( self.weapon_array_grenade[i], "timeUsed", totaltime ); - } - - if ( isdefined( self.weapon_array_inventory ) ) - { - for ( i = 0; i < self.weapon_array_inventory.size; i++ ) - self addweaponstat( self.weapon_array_inventory[i], "timeUsed", totaltime ); - } - - if ( isdefined( self.killstreak ) ) - { - for ( i = 0; i < self.killstreak.size; i++ ) - { - killstreakweapon = level.menureferenceforkillstreak[self.killstreak[i]]; - - if ( isdefined( killstreakweapon ) ) - self addweaponstat( killstreakweapon, "timeUsed", totaltime ); - } - } - - if ( level.rankedmatch && level.perksenabled ) - { - perksindexarray = []; - specialtys = self.specialty; - - if ( !isdefined( specialtys ) ) - return; - - if ( !isdefined( self.class ) ) - return; - - if ( isdefined( self.class_num ) ) - { - for ( numspecialties = 0; numspecialties < level.maxspecialties; numspecialties++ ) - { - perk = self getloadoutitem( self.class_num, "specialty" + ( numspecialties + 1 ) ); - - if ( perk != 0 ) - perksindexarray[perk] = 1; - } - - perkindexarraykeys = getarraykeys( perksindexarray ); - - for ( i = 0; i < perkindexarraykeys.size; i++ ) - { - if ( perksindexarray[perkindexarraykeys[i]] == 1 ) - self adddstat( "itemStats", perkindexarraykeys[i], "stats", "timeUsed", "statValue", totaltime ); - } - } - } -} - -trackweapon() -{ - currentweapon = self getcurrentweapon(); - currenttime = gettime(); - spawnid = getplayerspawnid( self ); - - while ( true ) - { - event = self waittill_any_return( "weapon_change", "death", "disconnect" ); - newtime = gettime(); - - if ( event == "weapon_change" ) - { - self maps\mp\_bb::commitweapondata( spawnid, currentweapon, currenttime ); - newweapon = self getcurrentweapon(); - - if ( newweapon != "none" && newweapon != currentweapon ) - { - updatelastheldweapontimings( newtime ); - self maps\mp\gametypes\_class::initweaponattachments( newweapon ); - currentweapon = newweapon; - currenttime = newtime; - } - } - else - { - if ( event != "disconnect" && isdefined( self ) ) - { - self maps\mp\_bb::commitweapondata( spawnid, currentweapon, currenttime ); - updateweapontimings( newtime ); - } - - return; - } - } -} - -maydropweapon( weapon ) -{ - if ( level.disableweapondrop == 1 ) - return false; - - if ( weapon == "none" ) - return false; - - if ( ishackweapon( weapon ) ) - return false; - - invtype = weaponinventorytype( weapon ); - - if ( invtype != "primary" ) - return false; - - if ( weapon == "none" ) - return false; - - return true; -} - -dropweaponfordeath( attacker, sweapon, smeansofdeath ) -{ - if ( level.disableweapondrop == 1 ) - return; - - weapon = self.lastdroppableweapon; - - if ( isdefined( self.droppeddeathweapon ) ) - return; - - if ( !isdefined( weapon ) ) - { -/# - if ( getdvar( _hash_8F7FC88 ) == "1" ) - println( "didn't drop weapon: not defined" ); -#/ - return; - } - - if ( weapon == "none" ) - { -/# - if ( getdvar( _hash_8F7FC88 ) == "1" ) - println( "didn't drop weapon: weapon == none" ); -#/ - return; - } - - if ( !self hasweapon( weapon ) ) - { -/# - if ( getdvar( _hash_8F7FC88 ) == "1" ) - println( "didn't drop weapon: don't have it anymore (" + weapon + ")" ); -#/ - return; - } - - if ( !self anyammoforweaponmodes( weapon ) ) - { -/# - if ( getdvar( _hash_8F7FC88 ) == "1" ) - println( "didn't drop weapon: no ammo for weapon modes" ); -#/ - return; - } - - if ( !shoulddroplimitedweapon( weapon, self ) ) - return; - - if ( maps\mp\killstreaks\_killstreak_weapons::isheldkillstreakweapon( weapon ) ) - return; - - clipammo = self getweaponammoclip( weapon ); - stockammo = self getweaponammostock( weapon ); - clip_and_stock_ammo = clipammo + stockammo; - - if ( !clip_and_stock_ammo ) - { -/# - if ( getdvar( _hash_8F7FC88 ) == "1" ) - println( "didn't drop weapon: no ammo" ); -#/ - return; - } - - stockmax = weaponmaxammo( weapon ); - - if ( stockammo > stockmax ) - stockammo = stockmax; - - item = self dropitem( weapon ); - - if ( !isdefined( item ) ) - { -/# - iprintlnbold( "dropItem: was not able to drop weapon " + weapon ); -#/ - return; - } - -/# - if ( getdvar( _hash_8F7FC88 ) == "1" ) - println( "dropped weapon: " + weapon ); -#/ - droplimitedweapon( weapon, self, item ); - self.droppeddeathweapon = 1; - item itemweaponsetammo( clipammo, stockammo ); - item.owner = self; - item.ownersattacker = attacker; - item.sweapon = sweapon; - item.smeansofdeath = smeansofdeath; - item thread watchpickup(); - item thread deletepickupafterawhile(); -} - -dropweapontoground( weapon ) -{ - if ( !isdefined( weapon ) ) - { -/# - if ( getdvar( _hash_8F7FC88 ) == "1" ) - println( "didn't drop weapon: not defined" ); -#/ - return; - } - - if ( weapon == "none" ) - { -/# - if ( getdvar( _hash_8F7FC88 ) == "1" ) - println( "didn't drop weapon: weapon == none" ); -#/ - return; - } - - if ( !self hasweapon( weapon ) ) - { -/# - if ( getdvar( _hash_8F7FC88 ) == "1" ) - println( "didn't drop weapon: don't have it anymore (" + weapon + ")" ); -#/ - return; - } - - if ( !self anyammoforweaponmodes( weapon ) ) - { -/# - if ( getdvar( _hash_8F7FC88 ) == "1" ) - println( "didn't drop weapon: no ammo for weapon modes" ); -#/ - - switch ( weapon ) - { - case "mp40_blinged_mp": - case "minigun_mp": - case "m32_mp": - case "m220_tow_mp": - case "m202_flash_mp": - self takeweapon( weapon ); - break; - default: - break; - } - - return; - } - - if ( !shoulddroplimitedweapon( weapon, self ) ) - return; - - clipammo = self getweaponammoclip( weapon ); - stockammo = self getweaponammostock( weapon ); - clip_and_stock_ammo = clipammo + stockammo; - - if ( !clip_and_stock_ammo ) - { -/# - if ( getdvar( _hash_8F7FC88 ) == "1" ) - println( "didn't drop weapon: no ammo" ); -#/ - return; - } - - stockmax = weaponmaxammo( weapon ); - - if ( stockammo > stockmax ) - stockammo = stockmax; - - item = self dropitem( weapon ); -/# - if ( getdvar( _hash_8F7FC88 ) == "1" ) - println( "dropped weapon: " + weapon ); -#/ - droplimitedweapon( weapon, self, item ); - item itemweaponsetammo( clipammo, stockammo ); - item.owner = self; - item thread watchpickup(); - item thread deletepickupafterawhile(); -} - -deletepickupafterawhile() -{ - self endon( "death" ); - wait 60; - - if ( !isdefined( self ) ) - return; - - self delete(); -} - -getitemweaponname() -{ - classname = self.classname; -/# - assert( getsubstr( classname, 0, 7 ) == "weapon_" ); -#/ - weapname = getsubstr( classname, 7 ); - return weapname; -} - -watchpickup() -{ - self endon( "death" ); - weapname = self getitemweaponname(); - - self waittill( "trigger", player, droppeditem ); - -/# - if ( getdvar( _hash_8F7FC88 ) == "1" ) - println( "picked up weapon: " + weapname + ", " + isdefined( self.ownersattacker ) ); -#/ -/# - assert( isdefined( player.tookweaponfrom ) ); -#/ -/# - assert( isdefined( player.pickedupweaponkills ) ); -#/ - - if ( isdefined( droppeditem ) ) - { - droppedweaponname = droppeditem getitemweaponname(); - - if ( isdefined( player.tookweaponfrom[droppedweaponname] ) ) - { - droppeditem.owner = player.tookweaponfrom[droppedweaponname]; - droppeditem.ownersattacker = player; - player.tookweaponfrom[droppedweaponname] = undefined; - } - - droppeditem thread watchpickup(); - } - - if ( isdefined( self.ownersattacker ) && self.ownersattacker == player ) - { - player.tookweaponfrom[weapname] = spawnstruct(); - player.tookweaponfrom[weapname].previousowner = self.owner; - player.tookweaponfrom[weapname].sweapon = self.sweapon; - player.tookweaponfrom[weapname].smeansofdeath = self.smeansofdeath; - player.pickedupweaponkills[weapname] = 0; - } - else - { - player.tookweaponfrom[weapname] = undefined; - player.pickedupweaponkills[weapname] = undefined; - } -} - -itemremoveammofromaltmodes() -{ - origweapname = self getitemweaponname(); - curweapname = weaponaltweaponname( origweapname ); - - for ( altindex = 1; curweapname != "none" && curweapname != origweapname; altindex++ ) - { - self itemweaponsetammo( 0, 0, altindex ); - curweapname = weaponaltweaponname( curweapname ); - } -} - -dropoffhand() -{ - grenadetypes = []; - - for ( index = 0; index < grenadetypes.size; index++ ) - { - if ( !self hasweapon( grenadetypes[index] ) ) - continue; - - count = self getammocount( grenadetypes[index] ); - - if ( !count ) - continue; - - self dropitem( grenadetypes[index] ); - } -} - -watchweaponusage() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon( "game_ended" ); - self.usedkillstreakweapon = []; - self.usedkillstreakweapon["minigun_mp"] = 0; - self.usedkillstreakweapon["m32_mp"] = 0; - self.usedkillstreakweapon["m202_flash_mp"] = 0; - self.usedkillstreakweapon["m220_tow_mp"] = 0; - self.usedkillstreakweapon["mp40_blinged_mp"] = 0; - self.killstreaktype = []; - self.killstreaktype["minigun_mp"] = "minigun_mp"; - self.killstreaktype["m32_mp"] = "m32_mp"; - self.killstreaktype["m202_flash_mp"] = "m202_flash_mp"; - self.killstreaktype["m220_tow_mp"] = "m220_tow_mp"; - self.killstreaktype["mp40_blinged_mp"] = "mp40_blinged_drop_mp"; - - for (;;) - { - self waittill( "weapon_fired", curweapon ); - - self.lastfiretime = gettime(); - self.hasdonecombat = 1; - - if ( maps\mp\gametypes\_weapons::isprimaryweapon( curweapon ) || maps\mp\gametypes\_weapons::issidearm( curweapon ) ) - { - if ( isdefined( self.hitsthismag[curweapon] ) ) - self thread updatemagshots( curweapon ); - } - - switch ( weaponclass( curweapon ) ) - { - case "rifle": - if ( curweapon == "crossbow_mp" ) - level.globalcrossbowfired++; - - if ( curweapon == "crossbow_explosive_mp" ) - { - level.globalcrossbowfired++; - self addweaponstat( curweapon, "shots", 1 ); - self thread begingrenadetracking(); - break; - } - case "spread": - case "smg": - case "pistol spread": - case "pistol": - case "mg": - self trackweaponfire( curweapon ); - level.globalshotsfired++; - break; - case "rocketlauncher": - case "grenade": - self addweaponstat( curweapon, "shots", 1 ); - break; - default: - break; - } - - if ( maps\mp\killstreaks\_killstreak_weapons::isheldkillstreakweapon( curweapon ) ) - { - self.pers["held_killstreak_ammo_count"][curweapon]--; - self.usedkillstreakweapon[curweapon] = 1; - } - } -} - -updatemagshots( weaponname ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "updateMagShots_" + weaponname ); - self.hitsthismag[weaponname]--; - wait 0.05; - self.hitsthismag[weaponname] = weaponclipsize( weaponname ); -} - -checkhitsthismag( weaponname ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self notify( "updateMagShots_" + weaponname ); - waittillframeend; - - if ( isdefined( self.hitsthismag[weaponname] ) && self.hitsthismag[weaponname] == 0 ) - { - if ( !sessionmodeiszombiesgame() ) - { - weaponclass = getweaponclass( weaponname ); - maps\mp\_challenges::fullclipnomisses( weaponclass, weaponname ); - } - - self.hitsthismag[weaponname] = weaponclipsize( weaponname ); - } -} - -trackweaponfire( curweapon ) -{ - pixbeginevent( "trackWeaponFire" ); - self trackweaponfirenative( curweapon, 1, self.hits, 1 ); - self maps\mp\_bb::bbaddtostat( "shots", 1 ); - self maps\mp\_bb::bbaddtostat( "hits", self.hits ); - self.hits = 0; - pixendevent(); -} - -checkhit( sweapon ) -{ - switch ( weaponclass( sweapon ) ) - { - case "smg": - case "rifle": - case "pistol": - case "mg": - self.hits++; - break; - case "spread": - case "pistol spread": - self.hits = 1; - break; - default: - break; - } - - waittillframeend; - - if ( isdefined( self ) && isdefined( self.hitsthismag ) && isdefined( self.hitsthismag[sweapon] ) ) - self thread checkhitsthismag( sweapon ); -} - -watchgrenadeusage() -{ - self endon( "death" ); - self endon( "disconnect" ); - self.throwinggrenade = 0; - self.gotpullbacknotify = 0; - self thread beginothergrenadetracking(); - self thread watchforthrowbacks(); - self thread watchforgrenadeduds(); - self thread watchforgrenadelauncherduds(); - - for (;;) - { - self waittill( "grenade_pullback", weaponname ); - - self addweaponstat( weaponname, "shots", 1 ); - self.hasdonecombat = 1; - self.throwinggrenade = 1; - self.gotpullbacknotify = 1; - - if ( weaponname == "satchel_charge_mp" ) - self thread beginsatcheltracking(); - - if ( !maps\mp\killstreaks\_supplydrop::issupplydropweapon( weaponname ) && weaponname != "sensor_grenade_mp" ) - { - self setoffhandvisible( 1 ); - self thread watchoffhandend(); - } - - self thread begingrenadetracking(); - } -} - -watchmissileusage() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon( "game_ended" ); - - for (;;) - { - self waittill( "missile_fire", missile, weapon_name ); - - self.hasdonecombat = 1; -/# - assert( isdefined( missile ) ); -#/ - level.missileentities[level.missileentities.size] = missile; - missile thread watchmissiledeath(); - } -} - -watchmissiledeath() -{ - self waittill( "death" ); - - arrayremovevalue( level.missileentities, self ); -} - -dropweaponstoground( origin, radius ) -{ - weapons = getdroppedweapons(); - - for ( i = 0; i < weapons.size; i++ ) - { - if ( distancesquared( origin, weapons[i].origin ) < radius * radius ) - { - trace = bullettrace( weapons[i].origin, weapons[i].origin + vectorscale( ( 0, 0, -1 ), 2000.0 ), 0, weapons[i] ); - weapons[i].origin = trace["position"]; - } - } -} - -dropgrenadestoground( origin, radius ) -{ - grenades = getentarray( "grenade", "classname" ); - - for ( i = 0; i < grenades.size; i++ ) - { - if ( distancesquared( origin, grenades[i].origin ) < radius * radius ) - grenades[i] launch( vectorscale( ( 1, 1, 1 ), 5.0 ) ); - } -} - -watchgrenadecancel() -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "grenade_fire" ); - waittillframeend; - weapon = "none"; - - while ( self isthrowinggrenade() && weapon == "none" ) - self waittill( "weapon_change", weapon ); - - self.throwinggrenade = 0; - self.gotpullbacknotify = 0; - self notify( "grenade_throw_cancelled" ); -} - -watchoffhandend() -{ - self notify( "watchOffhandEnd" ); - self endon( "watchOffhandEnd" ); - - while ( self isusingoffhandequipment() ) - { - msg = self waittill_any_return( "death", "disconnect", "grenade_fire", "weapon_change" ); - - if ( msg == "death" || msg == "disconnect" ) - break; - } - - self setoffhandvisible( 0 ); -} - -isusingoffhandequipment() -{ - if ( self isusingoffhand() ) - { - weapon = self getcurrentoffhand(); - - if ( isweaponequipment( weapon ) ) - return true; - } - - return false; -} - -begingrenadetracking() -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "grenade_throw_cancelled" ); - starttime = gettime(); - self thread watchgrenadecancel(); - - self waittill( "grenade_fire", grenade, weaponname ); - -/# - assert( isdefined( grenade ) ); -#/ - level.missileentities[level.missileentities.size] = grenade; - grenade thread watchmissiledeath(); - - if ( grenade maps\mp\_utility::ishacked() ) - return; - - bbprint( "mpequipmentuses", "gametime %d spawnid %d weaponname %s", gettime(), getplayerspawnid( self ), weaponname ); - - if ( gettime() - starttime > 1000 ) - grenade.iscooked = 1; - - switch ( weaponname ) - { - case "frag_grenade_mp": - level.globalfraggrenadesfired++; - case "sticky_grenade_mp": - self addweaponstat( weaponname, "used", 1 ); - case "explosive_bolt_mp": - grenade.originalowner = self; - break; - case "satchel_charge_mp": - level.globalsatchelchargefired++; - break; - } - - if ( weaponname == "sticky_grenade_mp" || weaponname == "frag_grenade_mp" ) - { - grenade setteam( self.pers["team"] ); - grenade setowner( self ); - } - - self.throwinggrenade = 0; -} - -beginothergrenadetracking() -{ - self notify( "grenadeTrackingStart" ); - self endon( "grenadeTrackingStart" ); - self endon( "disconnect" ); - - for (;;) - { - self waittill( "grenade_fire", grenade, weaponname, parent ); - - if ( grenade maps\mp\_utility::ishacked() ) - continue; - - switch ( weaponname ) - { - case "flash_grenade_mp": - continue; - case "concussion_grenade_mp": - continue; - case "willy_pete_mp": - grenade thread maps\mp\_smokegrenade::watchsmokegrenadedetonation( self ); - continue; - case "tabun_gas_mp": - grenade thread maps\mp\_tabun::watchtabungrenadedetonation( self ); - continue; - case "sticky_grenade_mp": - grenade thread checkstucktoplayer( 1, 1, weaponname ); - grenade thread checkstucktoshield(); - continue; - case "satchel_charge_mp": - case "c4_mp": - grenade thread checkstucktoplayer( 1, 0, weaponname ); - continue; - case "proximity_grenade_mp": - grenade thread checkstucktoshield(); - grenade thread maps\mp\_proximity_grenade::watchproximitygrenadehitplayer( self ); - continue; - case "tactical_insertion_mp": - grenade thread maps\mp\_tacticalinsertion::watch( self ); - continue; - case "scrambler_mp": - continue; - case "explosive_bolt_mp": - grenade.ownerweaponatlaunch = self.currentweapon; - grenade.owneradsatlaunch = self playerads() == 1 ? 1 : 0; - grenade thread maps\mp\_explosive_bolt::watch_bolt_detonation( self ); - grenade thread checkstucktoplayer( 1, 0, weaponname ); - grenade thread checkstucktoshield(); - continue; - case "hatchet_mp": - grenade.lastweaponbeforetoss = self getlastweapon(); - grenade thread checkhatchetbounce(); - grenade thread checkstucktoplayer( 0, 0, weaponname ); - self addweaponstat( weaponname, "used", 1 ); - continue; - case "emp_grenade_mp": - grenade thread maps\mp\_empgrenade::watchempexplosion( self, weaponname ); - continue; - } - } -} - -checkstucktoplayer( deleteonteamchange, awardscoreevent, weaponname ) -{ - self endon( "death" ); - - self waittill( "stuck_to_player", player ); - - if ( isdefined( player ) ) - { - if ( deleteonteamchange ) - self thread stucktoplayerteamchange( player ); - - if ( awardscoreevent && isdefined( self.originalowner ) ) - { - if ( self.originalowner isenemyplayer( player ) ) - maps\mp\_scoreevents::processscoreevent( "stick_explosive_kill", self.originalowner, player, weaponname ); - } - - self.stucktoplayer = player; - } -} - -checkstucktoshield() -{ - self endon( "death" ); - - self waittill( "stuck_to_shield", other, owner ); - - other maps\mp\_riotshield::watchriotshieldstuckentitydeath( self, owner ); -} - -checkhatchetbounce() -{ - self endon( "stuck_to_player" ); - self endon( "death" ); - - self waittill( "grenade_bounce" ); - - self.bounced = 1; -} - -stucktoplayerteamchange( player ) -{ - self endon( "death" ); - player endon( "disconnect" ); - originalteam = player.pers["team"]; - - while ( true ) - { - player waittill( "joined_team" ); - - if ( player.pers["team"] != originalteam ) - { - self detonate(); - return; - } - } -} - -beginsatcheltracking() -{ - self endon( "death" ); - self endon( "disconnect" ); - self waittill_any( "grenade_fire", "weapon_change" ); - self.throwinggrenade = 0; -} - -watchforthrowbacks() -{ - self endon( "death" ); - self endon( "disconnect" ); - - for (;;) - { - self waittill( "grenade_fire", grenade, weapname ); - - if ( self.gotpullbacknotify ) - { - self.gotpullbacknotify = 0; - continue; - } - - if ( !issubstr( weapname, "frag_" ) ) - continue; - - grenade.threwback = 1; - grenade.originalowner = self; - } -} - -waitanddeletedud( waittime ) -{ - self endon( "death" ); - wait( waittime ); - - if ( isdefined( self ) ) - self delete(); -} - -makeallboltsdud() -{ - grenades = getentarray( "grenade", "classname" ); - - for ( i = 0; i < grenades.size; i++ ) - { - if ( grenades[i].model == "t5_weapon_crossbow_bolt" ) - { - grenades[i] makegrenadedud(); - - if ( !isdefined( grenades[i].isdud ) ) - grenades[i] thread waitanddeletedud( level.missileduddeletedelay ); - - grenades[i].isdud = 1; - } - } -} - -turngrenadeintoadud( weapname, isthrowngrenade, player ) -{ - if ( level.roundstartexplosivedelay >= maps\mp\gametypes\_globallogic_utils::gettimepassed() / 1000 ) - { - if ( isweapondisallowedatmatchstart( weapname ) || issubstr( weapname, "gl_" ) ) - { - timeleft = int( level.roundstartexplosivedelay - maps\mp\gametypes\_globallogic_utils::gettimepassed() / 1000 ); - - if ( !timeleft ) - timeleft = 1; - - if ( weapname == "explosive_bolt_mp" ) - { - self makeallboltsdud(); - player iprintlnbold( &"MP_LAUNCHER_UNAVAILABLE_FOR_N", " " + timeleft + " ", &"EXE_SECONDS" ); - } - else - { - if ( isthrowngrenade ) - player iprintlnbold( &"MP_GRENADE_UNAVAILABLE_FOR_N", " " + timeleft + " ", &"EXE_SECONDS" ); - else - player iprintlnbold( &"MP_LAUNCHER_UNAVAILABLE_FOR_N", " " + timeleft + " ", &"EXE_SECONDS" ); - - self makegrenadedud(); - } - } - } -} - -watchforgrenadeduds() -{ - self endon( "spawned_player" ); - self endon( "disconnect" ); - - while ( true ) - { - self waittill( "grenade_fire", grenade, weapname ); - - grenade turngrenadeintoadud( weapname, 1, self ); - } -} - -watchforgrenadelauncherduds() -{ - self endon( "spawned_player" ); - self endon( "disconnect" ); - - while ( true ) - { - self waittill( "grenade_launcher_fire", grenade, weapname ); - - grenade turngrenadeintoadud( weapname, 0, self ); -/# - assert( isdefined( grenade ) ); -#/ - level.missileentities[level.missileentities.size] = grenade; - grenade thread watchmissiledeath(); - } -} - -getdamageableents( pos, radius, dolos, startradius ) -{ - ents = []; - - if ( !isdefined( dolos ) ) - dolos = 0; - - if ( !isdefined( startradius ) ) - startradius = 0; - - players = level.players; - - for ( i = 0; i < players.size; i++ ) - { - if ( !isalive( players[i] ) || players[i].sessionstate != "playing" ) - continue; - - playerpos = players[i].origin + vectorscale( ( 0, 0, 1 ), 32.0 ); - distsq = distancesquared( pos, playerpos ); - - if ( distsq < radius * radius && ( !dolos || weapondamagetracepassed( pos, playerpos, startradius, undefined ) ) ) - { - newent = spawnstruct(); - newent.isplayer = 1; - newent.isadestructable = 0; - newent.isadestructible = 0; - newent.isactor = 0; - newent.entity = players[i]; - newent.damagecenter = playerpos; - ents[ents.size] = newent; - } - } - - grenades = getentarray( "grenade", "classname" ); - - for ( i = 0; i < grenades.size; i++ ) - { - entpos = grenades[i].origin; - distsq = distancesquared( pos, entpos ); - - if ( distsq < radius * radius && ( !dolos || weapondamagetracepassed( pos, entpos, startradius, grenades[i] ) ) ) - { - newent = spawnstruct(); - newent.isplayer = 0; - newent.isadestructable = 0; - newent.isadestructible = 0; - newent.isactor = 0; - newent.entity = grenades[i]; - newent.damagecenter = entpos; - ents[ents.size] = newent; - } - } - - destructibles = getentarray( "destructible", "targetname" ); - - for ( i = 0; i < destructibles.size; i++ ) - { - entpos = destructibles[i].origin; - distsq = distancesquared( pos, entpos ); - - if ( distsq < radius * radius && ( !dolos || weapondamagetracepassed( pos, entpos, startradius, destructibles[i] ) ) ) - { - newent = spawnstruct(); - newent.isplayer = 0; - newent.isadestructable = 0; - newent.isadestructible = 1; - newent.isactor = 0; - newent.entity = destructibles[i]; - newent.damagecenter = entpos; - ents[ents.size] = newent; - } - } - - destructables = getentarray( "destructable", "targetname" ); - - for ( i = 0; i < destructables.size; i++ ) - { - entpos = destructables[i].origin; - distsq = distancesquared( pos, entpos ); - - if ( distsq < radius * radius && ( !dolos || weapondamagetracepassed( pos, entpos, startradius, destructables[i] ) ) ) - { - newent = spawnstruct(); - newent.isplayer = 0; - newent.isadestructable = 1; - newent.isadestructible = 0; - newent.isactor = 0; - newent.entity = destructables[i]; - newent.damagecenter = entpos; - ents[ents.size] = newent; - } - } - - dogs = maps\mp\killstreaks\_dogs::dog_manager_get_dogs(); - - foreach ( dog in dogs ) - { - if ( !isalive( dog ) ) - continue; - - entpos = dog.origin; - distsq = distancesquared( pos, entpos ); - - if ( distsq < radius * radius && ( !dolos || weapondamagetracepassed( pos, entpos, startradius, dog ) ) ) - { - newent = spawnstruct(); - newent.isplayer = 0; - newent.isadestructable = 0; - newent.isadestructible = 0; - newent.isactor = 1; - newent.entity = dog; - newent.damagecenter = entpos; - ents[ents.size] = newent; - } - } - - return ents; -} - -weapondamagetracepassed( from, to, startradius, ignore ) -{ - trace = weapondamagetrace( from, to, startradius, ignore ); - return trace["fraction"] == 1; -} - -weapondamagetrace( from, to, startradius, ignore ) -{ - midpos = undefined; - diff = to - from; - - if ( lengthsquared( diff ) < startradius * startradius ) - midpos = to; - - dir = vectornormalize( diff ); - midpos = from + ( dir[0] * startradius, dir[1] * startradius, dir[2] * startradius ); - trace = bullettrace( midpos, to, 0, ignore ); - - if ( getdvarint( _hash_A1C40B1 ) != 0 ) - { - if ( trace["fraction"] == 1 ) - thread debugline( midpos, to, ( 1, 1, 1 ) ); - else - { - thread debugline( midpos, trace["position"], ( 1, 0.9, 0.8 ) ); - thread debugline( trace["position"], to, ( 1, 0.4, 0.3 ) ); - } - } - - return trace; -} - -damageent( einflictor, eattacker, idamage, smeansofdeath, sweapon, damagepos, damagedir ) -{ - if ( self.isplayer ) - { - self.damageorigin = damagepos; - self.entity thread [[ level.callbackplayerdamage ]]( einflictor, eattacker, idamage, 0, smeansofdeath, sweapon, damagepos, damagedir, "none", 0, 0 ); - } - else if ( self.isactor ) - { - self.damageorigin = damagepos; - self.entity thread [[ level.callbackactordamage ]]( einflictor, eattacker, idamage, 0, smeansofdeath, sweapon, damagepos, damagedir, "none", 0, 0 ); - } - else if ( self.isadestructible ) - { - self.damageorigin = damagepos; - self.entity dodamage( idamage, damagepos, eattacker, einflictor, 0, smeansofdeath, 0, sweapon ); - } - else - { - if ( self.isadestructable && ( sweapon == "claymore_mp" || sweapon == "airstrike_mp" ) ) - return; - - self.entity damage_notify_wrapper( idamage, eattacker, ( 0, 0, 0 ), ( 0, 0, 0 ), "mod_explosive", "", "" ); - } -} - -debugline( a, b, color ) -{ -/# - for ( i = 0; i < 600; i++ ) - { - line( a, b, color ); - wait 0.05; - } -#/ -} - -onweapondamage( eattacker, einflictor, sweapon, meansofdeath, damage ) -{ - self endon( "death" ); - self endon( "disconnect" ); - - switch ( sweapon ) - { - case "concussion_grenade_mp": - radius = 512; - - if ( self == eattacker ) - radius *= 0.5; - - scale = 1 - distance( self.origin, einflictor.origin ) / radius; - - if ( scale < 0 ) - scale = 0; - - time = 2 + 4 * scale; - wait 0.05; - - if ( self hasperk( "specialty_stunprotection" ) ) - time *= 0.1; - - self thread playconcussionsound( time ); - - if ( self mayapplyscreeneffect() ) - self shellshock( "concussion_grenade_mp", time, 0 ); - - self.concussionendtime = gettime() + time * 1000; - self.lastconcussedby = eattacker; - break; - case "proximity_grenade_mp": - self proximitygrenadedamageplayer( eattacker, einflictor ); - break; - default: - maps\mp\gametypes\_shellshock::shellshockondamage( meansofdeath, damage ); - break; - } -} - -playconcussionsound( duration ) -{ - self endon( "death" ); - self endon( "disconnect" ); - concussionsound = spawn( "script_origin", ( 0, 0, 1 ) ); - concussionsound.origin = self.origin; - concussionsound linkto( self ); - concussionsound thread deleteentonownerdeath( self ); - concussionsound playsound( "" ); - concussionsound playloopsound( "" ); - - if ( duration > 0.5 ) - wait( duration - 0.5 ); - - concussionsound playsound( "" ); - concussionsound stoploopsound( 0.5 ); - wait 0.5; - concussionsound notify( "delete" ); - concussionsound delete(); -} - -deleteentonownerdeath( owner ) -{ - self endon( "delete" ); - - owner waittill( "death" ); - - self delete(); -} - -monitor_dog_special_grenades() -{ - self endon( "death" ); - - while ( true ) - { - self waittill( "damage", damage, attacker, direction_vec, point, type, modelname, tagname, partname, weaponname, idflags ); - - if ( isflashorstunweapon( weaponname ) ) - { - damage_area = spawn( "trigger_radius", self.origin, 0, 128, 128 ); - attacker thread maps\mp\killstreaks\_dogs::flash_dogs( damage_area ); - wait 0.05; - damage_area delete(); - } - } -} - -isprimaryweapon( weaponname ) -{ - return isdefined( level.primary_weapon_array[weaponname] ); -} - -issidearm( weaponname ) -{ - return isdefined( level.side_arm_array[weaponname] ); -} - -isinventory( weaponname ) -{ - return isdefined( level.inventory_array[weaponname] ); -} - -isgrenade( weaponname ) -{ - return isdefined( level.grenade_array[weaponname] ); -} - -isexplosivebulletweapon( weaponname ) -{ - if ( weaponname == "chopper_minigun_mp" || weaponname == "cobra_20mm_mp" || weaponname == "littlebird_guard_minigun_mp" || weaponname == "cobra_20mm_comlink_mp" ) - return true; - - return false; -} - -getweaponclass_array( current ) -{ - if ( isprimaryweapon( current ) ) - return level.primary_weapon_array; - else if ( issidearm( current ) ) - return level.side_arm_array; - else if ( isgrenade( current ) ) - return level.grenade_array; - else - return level.inventory_array; -} - -updatestowedweapon() -{ - self endon( "spawned" ); - self endon( "killed_player" ); - self endon( "disconnect" ); - self.tag_stowed_back = undefined; - self.tag_stowed_hip = undefined; - team = self.pers["team"]; - class = self.pers["class"]; - - while ( true ) - { - self waittill( "weapon_change", newweapon ); - - if ( self ismantling() ) - continue; - - currentstowed = self getstowedweapon(); - hasstowed = 0; - self.weapon_array_primary = []; - self.weapon_array_sidearm = []; - self.weapon_array_grenade = []; - self.weapon_array_inventory = []; - weaponslist = self getweaponslist(); - - for ( idx = 0; idx < weaponslist.size; idx++ ) - { - switch ( weaponslist[idx] ) - { - case "minigun_mp": - case "m32_mp": - continue; - default: - break; - } - - if ( !hasstowed || currentstowed == weaponslist[idx] ) - { - currentstowed = weaponslist[idx]; - hasstowed = 1; - } - - if ( isprimaryweapon( weaponslist[idx] ) ) - { - self.weapon_array_primary[self.weapon_array_primary.size] = weaponslist[idx]; - continue; - } - - if ( issidearm( weaponslist[idx] ) ) - { - self.weapon_array_sidearm[self.weapon_array_sidearm.size] = weaponslist[idx]; - continue; - } - - if ( isgrenade( weaponslist[idx] ) ) - { - self.weapon_array_grenade[self.weapon_array_grenade.size] = weaponslist[idx]; - continue; - } - - if ( isinventory( weaponslist[idx] ) ) - { - self.weapon_array_inventory[self.weapon_array_inventory.size] = weaponslist[idx]; - continue; - } - - if ( isweaponprimary( weaponslist[idx] ) ) - self.weapon_array_primary[self.weapon_array_primary.size] = weaponslist[idx]; - } - - if ( newweapon != "none" || !hasstowed ) - { - detach_all_weapons(); - stow_on_back(); - stow_on_hip(); - } - } -} - -forcestowedweaponupdate() -{ - detach_all_weapons(); - stow_on_back(); - stow_on_hip(); -} - -detachcarryobjectmodel() -{ - if ( isdefined( self.carryobject ) && isdefined( self.carryobject maps\mp\gametypes\_gameobjects::getvisiblecarriermodel() ) ) - { - if ( isdefined( self.tag_stowed_back ) ) - { - self detach( self.tag_stowed_back, "tag_stowed_back" ); - self.tag_stowed_back = undefined; - } - } -} - -detach_all_weapons() -{ - if ( isdefined( self.tag_stowed_back ) ) - { - clear_weapon = 1; - - if ( isdefined( self.carryobject ) ) - { - carriermodel = self.carryobject maps\mp\gametypes\_gameobjects::getvisiblecarriermodel(); - - if ( isdefined( carriermodel ) && carriermodel == self.tag_stowed_back ) - { - self detach( self.tag_stowed_back, "tag_stowed_back" ); - clear_weapon = 0; - } - } - - if ( clear_weapon ) - self clearstowedweapon(); - - self.tag_stowed_back = undefined; - } - - if ( isdefined( self.tag_stowed_hip ) ) - { - detach_model = getweaponmodel( self.tag_stowed_hip ); - self detach( detach_model, "tag_stowed_hip_rear" ); - self.tag_stowed_hip = undefined; - } -} - -non_stowed_weapon( weapon ) -{ - if ( self hasweapon( "knife_ballistic_mp" ) && weapon != "knife_ballistic_mp" ) - return true; - - if ( self hasweapon( "knife_held_mp" ) && weapon != "knife_held_mp" ) - return true; - - return false; -} - -stow_on_back( current ) -{ - current = self getcurrentweapon(); - currentalt = self getcurrentweaponaltweapon(); - self.tag_stowed_back = undefined; - weaponoptions = 0; - index_weapon = ""; - - if ( isdefined( self.carryobject ) && isdefined( self.carryobject maps\mp\gametypes\_gameobjects::getvisiblecarriermodel() ) ) - { - self.tag_stowed_back = self.carryobject maps\mp\gametypes\_gameobjects::getvisiblecarriermodel(); - self attach( self.tag_stowed_back, "tag_stowed_back", 1 ); - return; - } - else if ( non_stowed_weapon( current ) ) - return; - else if ( current != "none" ) - { - for ( idx = 0; idx < self.weapon_array_primary.size; idx++ ) - { - temp_index_weapon = self.weapon_array_primary[idx]; -/# - assert( isdefined( temp_index_weapon ), "Primary weapon list corrupted." ); -#/ - - if ( temp_index_weapon == current ) - continue; - - if ( temp_index_weapon == currentalt ) - continue; - - index_weapon = temp_index_weapon; -/# - assert( isdefined( self.curclass ), "Player missing current class" ); -#/ - - if ( issubstr( index_weapon, self.pers["primaryWeapon"] ) && issubstr( self.curclass, "CUSTOM" ) ) - self.tag_stowed_back = getweaponmodel( index_weapon ); - else - { - stowedmodelindex = getweaponstowedmodel( index_weapon ); - self.tag_stowed_back = getweaponmodel( index_weapon, stowedmodelindex ); - } - - if ( issubstr( self.curclass, "CUSTOM" ) ) - weaponoptions = self calcweaponoptions( self.class_num, 0 ); - } - } - - if ( !isdefined( self.tag_stowed_back ) ) - return; - - self setstowedweapon( index_weapon ); -} - -stow_on_hip() -{ - current = self getcurrentweapon(); - self.tag_stowed_hip = undefined; - - for ( idx = 0; idx < self.weapon_array_inventory.size; idx++ ) - { - if ( self.weapon_array_inventory[idx] == current ) - continue; - - if ( !self getweaponammostock( self.weapon_array_inventory[idx] ) ) - continue; - - self.tag_stowed_hip = self.weapon_array_inventory[idx]; - } - - if ( !isdefined( self.tag_stowed_hip ) ) - return; - - if ( self.tag_stowed_hip == "satchel_charge_mp" || self.tag_stowed_hip == "claymore_mp" || self.tag_stowed_hip == "bouncingbetty_mp" ) - { - self.tag_stowed_hip = undefined; - return; - } - - weapon_model = getweaponmodel( self.tag_stowed_hip ); - self attach( weapon_model, "tag_stowed_hip_rear", 1 ); -} - -stow_inventory( inventories, current ) -{ - if ( isdefined( self.inventory_tag ) ) - { - detach_model = getweaponmodel( self.inventory_tag ); - self detach( detach_model, "tag_stowed_hip_rear" ); - self.inventory_tag = undefined; - } - - if ( !isdefined( inventories[0] ) || self getweaponammostock( inventories[0] ) == 0 ) - return; - - if ( inventories[0] != current ) - { - self.inventory_tag = inventories[0]; - weapon_model = getweaponmodel( self.inventory_tag ); - self attach( weapon_model, "tag_stowed_hip_rear", 1 ); - } -} - -weapons_get_dvar_int( dvar, def ) -{ - return int( weapons_get_dvar( dvar, def ) ); -} - -weapons_get_dvar( dvar, def ) -{ - if ( getdvar( dvar ) != "" ) - return getdvarfloat( dvar ); - else - { - setdvar( dvar, def ); - return def; - } -} - -player_is_driver() -{ - if ( !isalive( self ) ) - return false; - - if ( self isremotecontrolling() ) - return false; - - vehicle = self getvehicleoccupied(); - - if ( isdefined( vehicle ) ) - { - seat = vehicle getoccupantseat( self ); - - if ( isdefined( seat ) && seat == 0 ) - return true; - } - - return false; -} - -loadout_get_offhand_weapon( stat ) -{ - if ( isdefined( level.givecustomloadout ) ) - return "weapon_null_mp"; - -/# - assert( isdefined( self.class_num ) ); -#/ - - if ( isdefined( self.class_num ) ) - { - index = self maps\mp\gametypes\_class::getloadoutitemfromddlstats( self.class_num, stat ); - - if ( isdefined( level.tbl_weaponids[index] ) && isdefined( level.tbl_weaponids[index]["reference"] ) ) - return level.tbl_weaponids[index]["reference"] + "_mp"; - } - - return "weapon_null_mp"; -} - -loadout_get_offhand_count( stat ) -{ - count = 0; - - if ( isdefined( level.givecustomloadout ) ) - return 0; - -/# - assert( isdefined( self.class_num ) ); -#/ - - if ( isdefined( self.class_num ) ) - count = self maps\mp\gametypes\_class::getloadoutitemfromddlstats( self.class_num, stat ); - - return count; -} - -scavenger_think() -{ - self endon( "death" ); - - self waittill( "scavenger", player ); - - primary_weapons = player getweaponslistprimaries(); - offhand_weapons_and_alts = array_exclude( player getweaponslist( 1 ), primary_weapons ); - arrayremovevalue( offhand_weapons_and_alts, "knife_mp" ); - offhand_weapons_and_alts = array_reverse( offhand_weapons_and_alts ); - player playsound( "fly_equipment_pickup_npc" ); - player playlocalsound( "fly_equipment_pickup_plr" ); - player.scavenger_icon.alpha = 1; - player.scavenger_icon fadeovertime( 2.5 ); - player.scavenger_icon.alpha = 0; - loadout_primary = player loadout_get_offhand_weapon( "primarygrenade" ); - loadout_primary_count = player loadout_get_offhand_count( "primarygrenadecount" ); - loadout_secondary = player loadout_get_offhand_weapon( "specialgrenade" ); - loadout_secondary_count = player loadout_get_offhand_count( "specialgrenadeCount" ); - - for ( i = 0; i < offhand_weapons_and_alts.size; i++ ) - { - weapon = offhand_weapons_and_alts[i]; - - if ( ishackweapon( weapon ) ) - continue; - - switch ( weapon ) - { - case "satchel_charge_mp": - if ( player maps\mp\gametypes\_weaponobjects::anyobjectsinworld( weapon ) ) - continue; - case "sticky_grenade_mp": - case "hatchet_mp": - case "frag_grenade_mp": - case "claymore_mp": - case "bouncingbetty_mp": - if ( isdefined( player.grenadetypeprimarycount ) && player.grenadetypeprimarycount < 1 ) - continue; - case "willy_pete_mp": - case "trophy_system_mp": - case "tabun_gas_mp": - case "sensor_grenade_mp": - case "proximity_grenade_mp": - case "pda_hack_mp": - case "nightingale_mp": - case "flash_grenade_mp": - case "emp_grenade_mp": - case "concussion_grenade_mp": - if ( isdefined( player.grenadetypesecondarycount ) && player.grenadetypesecondarycount < 1 ) - continue; - - maxammo = weaponmaxammo( weapon ); - stock = player getweaponammostock( weapon ); - - if ( isdefined( level.customloadoutscavenge ) ) - maxammo = self [[ level.customloadoutscavenge ]]( weapon ); - else if ( weapon == loadout_primary ) - maxammo = loadout_primary_count; - else if ( weapon == loadout_secondary ) - maxammo = loadout_secondary_count; - - if ( stock < maxammo ) - { - ammo = stock + 1; - - if ( ammo > maxammo ) - ammo = maxammo; - - player setweaponammostock( weapon, ammo ); - player.scavenged = 1; - player thread maps\mp\_challenges::scavengedgrenade(); - } - - continue; - } - } - - for ( i = 0; i < primary_weapons.size; i++ ) - { - weapon = primary_weapons[i]; - - if ( ishackweapon( weapon ) ) - continue; - - stock = player getweaponammostock( weapon ); - start = player getfractionstartammo( weapon ); - clip = weaponclipsize( weapon ); - clip *= getdvarfloatdefault( "scavenger_clip_multiplier", 1 ); - clip = int( clip ); - maxammo = weaponmaxammo( weapon ); - - if ( stock < maxammo - clip ) - { - ammo = stock + clip; - player setweaponammostock( weapon, ammo ); - player.scavenged = 1; - exit_early = 1; - continue; - } - - player setweaponammostock( weapon, maxammo ); - player.scavenged = 1; - exit_early = 1; - } -} - -scavenger_hud_create() -{ - if ( level.wagermatch ) - return; - - self.scavenger_icon = newclienthudelem( self ); - self.scavenger_icon.horzalign = "center"; - self.scavenger_icon.vertalign = "middle"; - self.scavenger_icon.alpha = 0; - width = 48; - height = 24; - - if ( level.splitscreen ) - { - width = int( width * 0.5 ); - height = int( height * 0.5 ); - } - - self.scavenger_icon.x = width * -1 / 2; - self.scavenger_icon.y = 16; - self.scavenger_icon setshader( "hud_scavenger_pickup", width, height ); -} - -dropscavengerfordeath( attacker ) -{ - if ( sessionmodeiszombiesgame() ) - return; - - if ( level.wagermatch ) - return; - - if ( !isdefined( attacker ) ) - return; - - if ( attacker == self ) - return; - - if ( level.gametype == "hack" ) - item = self dropscavengeritem( "scavenger_item_hack_mp" ); - else if ( isplayer( attacker ) && attacker hasperk( "specialty_scavenger" ) ) - item = self dropscavengeritem( "scavenger_item_mp" ); - else - return; - - item thread scavenger_think(); -} - -addlimitedweapon( weapon_name, owner, num_drops ) -{ - limited_info = spawnstruct(); - limited_info.weapon = weapon_name; - limited_info.drops = num_drops; - owner.limited_info = limited_info; -} - -shoulddroplimitedweapon( weapon_name, owner ) -{ - limited_info = owner.limited_info; - - if ( !isdefined( limited_info ) ) - return true; - - if ( limited_info.weapon != weapon_name ) - return true; - - if ( limited_info.drops <= 0 ) - return false; - - return true; -} - -droplimitedweapon( weapon_name, owner, item ) -{ - limited_info = owner.limited_info; - - if ( !isdefined( limited_info ) ) - return; - - if ( limited_info.weapon != weapon_name ) - return; - - limited_info.drops -= 1; - owner.limited_info = undefined; - item thread limitedpickup( limited_info ); -} - -limitedpickup( limited_info ) -{ - self endon( "death" ); - - self waittill( "trigger", player, item ); - - if ( !isdefined( item ) ) - return; - - player.limited_info = limited_info; -} diff --git a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_dogs.gsc b/Multiplayer Core/patch_mp/maps/mp/killstreaks/_dogs.gsc deleted file mode 100644 index 37723e3..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/killstreaks/_dogs.gsc +++ /dev/null @@ -1,953 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include maps\mp\_utility; -#include common_scripts\utility; -#include maps\mp\gametypes\_spawnlogic; -#include maps\mp\gametypes\_tweakables; -#include maps\mp\killstreaks\_killstreaks; -#include maps\mp\killstreaks\_killstreakrules; -#include maps\mp\gametypes\_battlechatter_mp; -#include maps\mp\gametypes\_spawning; -#include maps\mp\gametypes\_weapons; -#include maps\mp\_scoreevents; -#include maps\mp\killstreaks\_supplydrop; -#include maps\mp\gametypes\_dev; - -init() -{ - precachemodel( "german_shepherd_vest" ); - precachemodel( "german_shepherd_vest_black" ); - level.dog_targets = []; - level.dog_targets[level.dog_targets.size] = "trigger_radius"; - level.dog_targets[level.dog_targets.size] = "trigger_multiple"; - level.dog_targets[level.dog_targets.size] = "trigger_use_touch"; - level.dog_spawns = []; - init_spawns(); -/# - level thread devgui_dog_think(); -#/ -} - -init_spawns() -{ - spawns = getnodearray( "spawn", "script_noteworthy" ); - - if ( !isdefined( spawns ) || !spawns.size ) - { -/# - println( "No dog spawn nodes found in map" ); -#/ - return; - } - - dog_spawner = getent( "dog_spawner", "targetname" ); - - if ( !isdefined( dog_spawner ) ) - { -/# - println( "No dog_spawner entity found in map" ); -#/ - return; - } - - valid = maps\mp\gametypes\_spawnlogic::getspawnpointarray( "mp_tdm_spawn" ); - dog = dog_spawner spawnactor(); - - foreach ( spawn in spawns ) - { - valid = arraysort( valid, spawn.origin, 0 ); - - for ( i = 0; i < 5; i++ ) - { - if ( findpath( spawn.origin, valid[i].origin, dog, 1, 0 ) ) - { - level.dog_spawns[level.dog_spawns.size] = spawn; - break; - } - } - } -/# - if ( !level.dog_spawns.size ) - println( "No dog spawns connect to MP spawn nodes" ); -#/ - dog delete(); -} - -initkillstreak() -{ - if ( maps\mp\gametypes\_tweakables::gettweakablevalue( "killstreak", "allowdogs" ) ) - { - maps\mp\killstreaks\_killstreaks::registerkillstreak( "dogs_mp", "dogs_mp", "killstreak_dogs", "dogs_used", ::usekillstreakdogs, 1 ); - maps\mp\killstreaks\_killstreaks::registerkillstreakstrings( "dogs_mp", &"KILLSTREAK_EARNED_DOGS", &"KILLSTREAK_DOGS_NOT_AVAILABLE", &"KILLSTREAK_DOGS_INBOUND" ); - maps\mp\killstreaks\_killstreaks::registerkillstreakdialog( "dogs_mp", "mpl_killstreak_dogs", "kls_dogs_used", "", "kls_dogs_enemy", "", "kls_dogs_ready" ); - maps\mp\killstreaks\_killstreaks::registerkillstreakdevdvar( "dogs_mp", "scr_givedogs" ); - maps\mp\killstreaks\_killstreaks::setkillstreakteamkillpenaltyscale( "dogs_mp", 0.0 ); - maps\mp\killstreaks\_killstreaks::registerkillstreakaltweapon( "dogs_mp", "dog_bite_mp" ); - } -} - -usekillstreakdogs( hardpointtype ) -{ - if ( !dog_killstreak_init() ) - return false; - - if ( !self maps\mp\killstreaks\_killstreakrules::iskillstreakallowed( hardpointtype, self.team ) ) - return false; - - killstreak_id = self maps\mp\killstreaks\_killstreakrules::killstreakstart( "dogs_mp", self.team ); - self thread ownerhadactivedogs(); - - if ( killstreak_id == -1 ) - return false; - - if ( level.teambased ) - { - foreach ( team in level.teams ) - { - if ( team == self.team ) - continue; - - thread maps\mp\gametypes\_battlechatter_mp::onkillstreakused( "dogs", team ); - } - } - - self maps\mp\killstreaks\_killstreaks::playkillstreakstartdialog( "dogs_mp", self.team, 1 ); - level.globalkillstreakscalled++; - self addweaponstat( "dogs_mp", "used", 1 ); - ownerdeathcount = self.deathcount; - level thread dog_manager_spawn_dogs( self, ownerdeathcount, killstreak_id ); - level notify( "called_in_the_dogs" ); - return true; -} - -ownerhadactivedogs() -{ - self endon( "disconnect" ); - self.dogsactive = 1; - self.dogsactivekillstreak = 0; - self waittill_any( "death", "game_over", "dogs_complete" ); - self.dogsactivekillstreak = 0; - self.dogsactive = undefined; -} - -dog_killstreak_init() -{ - dog_spawner = getent( "dog_spawner", "targetname" ); - - if ( !isdefined( dog_spawner ) ) - { -/# - println( "No dog spawners found in map" ); -#/ - return false; - } - - spawns = getnodearray( "spawn", "script_noteworthy" ); - - if ( level.dog_spawns.size <= 0 ) - { -/# - println( "No dog spawn nodes found in map" ); -#/ - return false; - } - - exits = getnodearray( "exit", "script_noteworthy" ); - - if ( exits.size <= 0 ) - { -/# - println( "No dog exit nodes found in map" ); -#/ - return false; - } - - return true; -} - -dog_set_model() -{ - self setmodel( "german_shepherd_vest" ); - self setenemymodel( "german_shepherd_vest_black" ); -} - -init_dog() -{ -/# - assert( isai( self ) ); -#/ - self.targetname = "attack_dog"; - self.animtree = "dog.atr"; - self.type = "dog"; - self.accuracy = 0.2; - self.health = 100; - self.maxhealth = 100; - self.aiweapon = "dog_bite_mp"; - self.secondaryweapon = ""; - self.sidearm = ""; - self.grenadeammo = 0; - self.goalradius = 128; - self.nododgemove = 1; - self.ignoresuppression = 1; - self.suppressionthreshold = 1; - self.disablearrivals = 0; - self.pathenemyfightdist = 512; - self.soundmod = "dog"; - self thread dog_health_regen(); - self thread selfdefensechallenge(); -} - -get_spawn_node( owner, team ) -{ -/# - assert( level.dog_spawns.size > 0 ); -#/ - return random( level.dog_spawns ); -} - -get_score_for_spawn( origin, team ) -{ - players = get_players(); - score = 0; - - foreach ( player in players ) - { - if ( !isdefined( player ) ) - continue; - - if ( !isalive( player ) ) - continue; - - if ( player.sessionstate != "playing" ) - continue; - - if ( distancesquared( player.origin, origin ) > 4194304 ) - continue; - - if ( player.team == team ) - { - score++; - continue; - } - - score--; - } - - return score; -} - -dog_set_owner( owner, team, requireddeathcount ) -{ - self setentityowner( owner ); - self.aiteam = team; - self.requireddeathcount = requireddeathcount; -} - -dog_create_spawn_influencer() -{ - self maps\mp\gametypes\_spawning::create_dog_influencers(); -} - -dog_manager_spawn_dog( owner, team, spawn_node, requireddeathcount ) -{ - dog_spawner = getent( "dog_spawner", "targetname" ); - dog = dog_spawner spawnactor(); - dog forceteleport( spawn_node.origin, spawn_node.angles ); - dog init_dog(); - dog dog_set_owner( owner, team, requireddeathcount ); - dog dog_set_model(); - dog dog_create_spawn_influencer(); - dog thread dog_owner_kills(); - dog thread dog_notify_level_on_death(); - dog thread dog_patrol(); - dog thread maps\mp\gametypes\_weapons::monitor_dog_special_grenades(); - return dog; -} - -dog_manager_spawn_dogs( owner, deathcount, killstreak_id ) -{ - requireddeathcount = deathcount; - team = owner.team; - level.dog_abort = 0; - owner thread dog_manager_abort(); - level thread dog_manager_game_ended(); - count = 0; - - while ( count < 10 ) - { - if ( level.dog_abort ) - break; - - for ( dogs = dog_manager_get_dogs(); dogs.size < 5 && count < 10 && !level.dog_abort; dogs = dog_manager_get_dogs() ) - { - node = get_spawn_node( owner, team ); - level dog_manager_spawn_dog( owner, team, node, requireddeathcount ); - count++; - wait( randomfloatrange( 2, 5 ) ); - } - - level waittill( "dog_died" ); - } - - for (;;) - { - dogs = dog_manager_get_dogs(); - - if ( dogs.size <= 0 ) - { - maps\mp\killstreaks\_killstreakrules::killstreakstop( "dogs_mp", team, killstreak_id ); - - if ( isdefined( owner ) ) - owner notify( "dogs_complete" ); - - return; - } - - level waittill( "dog_died" ); - } -} - -dog_abort() -{ - level.dog_abort = 1; - dogs = dog_manager_get_dogs(); - - foreach ( dog in dogs ) - dog notify( "abort" ); - - level notify( "dog_abort" ); -} - -dog_manager_abort() -{ - level endon( "dog_abort" ); - self wait_endon( 45, "disconnect", "joined_team", "joined_spectators" ); - dog_abort(); -} - -dog_manager_game_ended() -{ - level endon( "dog_abort" ); - - level waittill( "game_ended" ); - - dog_abort(); -} - -dog_notify_level_on_death() -{ - self waittill( "death" ); - - level notify( "dog_died" ); -} - -dog_leave() -{ - self clearentitytarget(); - self.ignoreall = 1; - self.goalradius = 30; - self setgoalnode( self dog_get_exit_node() ); - self wait_endon( 20, "goal", "bad_path" ); - self delete(); -} - -dog_patrol() -{ - self endon( "death" ); -/# - self endon( "debug_patrol" ); -#/ - for (;;) - { - if ( level.dog_abort ) - { - self dog_leave(); - return; - } - - if ( isdefined( self.enemy ) ) - { - wait( randomintrange( 3, 5 ) ); - continue; - } - - nodes = []; - objectives = dog_patrol_near_objective(); - - for ( i = 0; i < objectives.size; i++ ) - { - objective = random( objectives ); - nodes = getnodesinradius( objective.origin, 256, 64, 512, "Path", 16 ); - - if ( nodes.size ) - break; - } - - if ( !nodes.size ) - { - player = self dog_patrol_near_enemy(); - - if ( isdefined( player ) ) - nodes = getnodesinradius( player.origin, 1024, 0, 128, "Path", 8 ); - } - - if ( !nodes.size && isdefined( self.script_owner ) ) - { - if ( isalive( self.script_owner ) && self.script_owner.sessionstate == "playing" ) - nodes = getnodesinradius( self.script_owner.origin, 512, 256, 512, "Path", 16 ); - } - - if ( !nodes.size ) - nodes = getnodesinradius( self.origin, 1024, 512, 512, "Path" ); - - if ( nodes.size ) - { - nodes = array_randomize( nodes ); - - foreach ( node in nodes ) - { - if ( isdefined( node.script_noteworthy ) ) - continue; - - if ( isdefined( node.dog_claimed ) && isalive( node.dog_claimed ) ) - continue; - - self setgoalnode( node ); - node.dog_claimed = self; - nodes = []; - event = self waittill_any_return( "goal", "bad_path", "enemy", "abort" ); - - if ( event == "goal" ) - wait_endon( randomintrange( 3, 5 ), "damage", "enemy", "abort" ); - - node.dog_claimed = undefined; - break; - } - } - - wait 0.5; - } -} - -dog_patrol_near_objective() -{ - if ( !isdefined( level.dog_objectives ) ) - { - level.dog_objectives = []; - level.dog_objective_next_update = 0; - } - - if ( level.gametype == "tdm" || level.gametype == "dm" ) - return level.dog_objectives; - - if ( gettime() >= level.dog_objective_next_update ) - { - level.dog_objectives = []; - - foreach ( target in level.dog_targets ) - { - ents = getentarray( target, "classname" ); - - foreach ( ent in ents ) - { - if ( level.gametype == "koth" ) - { - if ( isdefined( ent.targetname ) && ent.targetname == "radiotrigger" ) - level.dog_objectives[level.dog_objectives.size] = ent; - - continue; - } - - if ( level.gametype == "sd" ) - { - if ( isdefined( ent.targetname ) && ent.targetname == "bombzone" ) - level.dog_objectives[level.dog_objectives.size] = ent; - - continue; - } - - if ( !isdefined( ent.script_gameobjectname ) ) - continue; - - if ( !issubstr( ent.script_gameobjectname, level.gametype ) ) - continue; - - level.dog_objectives[level.dog_objectives.size] = ent; - } - } - - level.dog_objective_next_update = gettime() + randomintrange( 5000, 10000 ); - } - - return level.dog_objectives; -} - -dog_patrol_near_enemy() -{ - players = get_players(); - closest = undefined; - distsq = 99999999; - - foreach ( player in players ) - { - if ( !isdefined( player ) ) - continue; - - if ( !isalive( player ) ) - continue; - - if ( player.sessionstate != "playing" ) - continue; - - if ( isdefined( self.script_owner ) && player == self.script_owner ) - continue; - - if ( level.teambased ) - { - if ( player.team == self.aiteam ) - continue; - } - - if ( gettime() - player.lastfiretime > 3000 ) - continue; - - if ( !isdefined( closest ) ) - { - closest = player; - distsq = distancesquared( self.origin, player.origin ); - continue; - } - - d = distancesquared( self.origin, player.origin ); - - if ( d < distsq ) - { - closest = player; - distsq = d; - } - } - - return closest; -} - -dog_manager_get_dogs() -{ - dogs = getentarray( "attack_dog", "targetname" ); - return dogs; -} - -dog_owner_kills() -{ - if ( !isdefined( self.script_owner ) ) - return; - - self endon( "clear_owner" ); - self endon( "death" ); - self.script_owner endon( "disconnect" ); - - while ( true ) - { - self waittill( "killed", player ); - - self.script_owner notify( "dog_handler" ); - } -} - -dog_health_regen() -{ - self endon( "death" ); - interval = 0.5; - regen_interval = int( self.health / 5 * interval ); - regen_start = 2; - - for (;;) - { - self waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, idflags ); - - self trackattackerdamage( attacker, weaponname ); - self thread dog_health_regen_think( regen_start, interval, regen_interval ); - } -} - -trackattackerdamage( attacker, weapon ) -{ - if ( !isdefined( attacker ) || !isplayer( attacker ) || !isdefined( self.script_owner ) ) - return; - - if ( level.teambased && attacker.team == self.script_owner.team || attacker == self ) - return; - - if ( !isdefined( self.attackerdata ) || !isdefined( self.attackers ) ) - { - self.attackerdata = []; - self.attackers = []; - } - - if ( !isdefined( self.attackerdata[attacker.clientid] ) ) - { - self.attackerclientid[attacker.clientid] = spawnstruct(); - self.attackers[self.attackers.size] = attacker; - } -} - -resetattackerdamage() -{ - self.attackerdata = []; - self.attackers = []; -} - -dog_health_regen_think( delay, interval, regen_interval ) -{ - self endon( "death" ); - self endon( "damage" ); - wait( delay ); - - for ( step = 0; step <= 5; step += interval ) - { - if ( self.health >= 100 ) - break; - - self.health += regen_interval; - wait( interval ); - } - - self resetattackerdamage(); - self.health = 100; -} - -selfdefensechallenge() -{ - self waittill( "death", attacker ); - - if ( isdefined( attacker ) && isplayer( attacker ) ) - { - if ( isdefined( self.script_owner ) && self.script_owner == attacker ) - return; - - if ( level.teambased && isdefined( self.script_owner ) && self.script_owner.team == attacker.team ) - return; - - if ( isdefined( self.attackers ) ) - { - foreach ( player in self.attackers ) - { - if ( player != attacker ) - maps\mp\_scoreevents::processscoreevent( "killed_dog_assist", player ); - } - } - - attacker notify( "selfdefense_dog" ); - } -} - -dog_get_exit_node() -{ - exits = getnodearray( "exit", "script_noteworthy" ); - return getclosest( self.origin, exits ); -} - -flash_dogs( area ) -{ - self endon( "disconnect" ); - dogs = dog_manager_get_dogs(); - - foreach ( dog in dogs ) - { - if ( !isalive( dog ) ) - continue; - - if ( dog istouching( area ) ) - { - do_flash = 1; - - if ( isplayer( self ) ) - { - if ( level.teambased && dog.aiteam == self.team ) - do_flash = 0; - else if ( !level.teambased && isdefined( dog.script_owner ) && self == dog.script_owner ) - do_flash = 0; - } - - if ( isdefined( dog.lastflashed ) && dog.lastflashed + 1500 > gettime() ) - do_flash = 0; - - if ( do_flash ) - { - dog setflashbanged( 1, 500 ); - dog.lastflashed = gettime(); - } - } - } -} - -devgui_dog_think() -{ -/# - setdvar( "devgui_dog", "" ); - debug_patrol = 0; - - for (;;) - { - cmd = getdvar( "devgui_dog" ); - - switch ( cmd ) - { - case "spawn_friendly": - player = gethostplayer(); - devgui_dog_spawn( player.team ); - break; - case "spawn_enemy": - player = gethostplayer(); - - foreach ( team in level.teams ) - { - if ( team == player.team ) - continue; - - devgui_dog_spawn( team ); - } - - break; - case "delete_dogs": - level dog_abort(); - break; - case "dog_camera": - devgui_dog_camera(); - break; - case "spawn_crate": - devgui_crate_spawn(); - break; - case "delete_crates": - devgui_crate_delete(); - break; - case "show_spawns": - devgui_spawn_show(); - break; - case "show_exits": - devgui_exit_show(); - break; - case "debug_route": - devgui_debug_route(); - break; - } - - if ( cmd != "" ) - setdvar( "devgui_dog", "" ); - - wait 0.5; - } -#/ -} - -devgui_dog_spawn( team ) -{ -/# - player = gethostplayer(); - dog_spawner = getent( "dog_spawner", "targetname" ); - level.dog_abort = 0; - - if ( !isdefined( dog_spawner ) ) - { - iprintln( "No dog spawners found in map" ); - return; - } - - direction = player getplayerangles(); - direction_vec = anglestoforward( direction ); - eye = player geteye(); - scale = 8000; - direction_vec = ( direction_vec[0] * scale, direction_vec[1] * scale, direction_vec[2] * scale ); - trace = bullettrace( eye, eye + direction_vec, 0, undefined ); - nodes = getnodesinradius( trace["position"], 256, 0, 128, "Path", 8 ); - - if ( !nodes.size ) - { - iprintln( "No nodes found near crosshair position" ); - return; - } - - iprintln( "Spawning dog at your crosshair position" ); - node = getclosest( trace["position"], nodes ); - dog = dog_manager_spawn_dog( player, player.team, node, 5 ); - - if ( team != player.team ) - { - dog.aiteam = team; - dog clearentityowner(); - dog notify( "clear_owner" ); - } -#/ -} - -devgui_dog_camera() -{ -/# - player = gethostplayer(); - - if ( !isdefined( level.devgui_dog_camera ) ) - level.devgui_dog_camera = 0; - - dog = undefined; - dogs = dog_manager_get_dogs(); - - if ( dogs.size <= 0 ) - { - level.devgui_dog_camera = undefined; - player cameraactivate( 0 ); - return; - } - - for ( i = 0; i < dogs.size; i++ ) - { - dog = dogs[i]; - - if ( !isdefined( dog ) || !isalive( dog ) ) - { - dog = undefined; - continue; - } - - if ( !isdefined( dog.cam ) ) - { - forward = anglestoforward( dog.angles ); - dog.cam = spawn( "script_model", dog.origin + vectorscale( ( 0, 0, 1 ), 50.0 ) + forward * -100 ); - dog.cam setmodel( "tag_origin" ); - dog.cam linkto( dog ); - } - - if ( dog getentitynumber() <= level.devgui_dog_camera ) - { - dog = undefined; - continue; - } - - break; - } - - if ( isdefined( dog ) ) - { - level.devgui_dog_camera = dog getentitynumber(); - player camerasetposition( dog.cam ); - player camerasetlookat( dog ); - player cameraactivate( 1 ); - } - else - { - level.devgui_dog_camera = undefined; - player cameraactivate( 0 ); - } -#/ -} - -devgui_crate_spawn() -{ -/# - player = gethostplayer(); - direction = player getplayerangles(); - direction_vec = anglestoforward( direction ); - eye = player geteye(); - scale = 8000; - direction_vec = ( direction_vec[0] * scale, direction_vec[1] * scale, direction_vec[2] * scale ); - trace = bullettrace( eye, eye + direction_vec, 0, undefined ); - killcament = spawn( "script_model", player.origin ); - level thread maps\mp\killstreaks\_supplydrop::dropcrate( trace["position"] + vectorscale( ( 0, 0, 1 ), 25.0 ), direction, "supplydrop_mp", player, player.team, killcament ); -#/ -} - -devgui_crate_delete() -{ -/# - if ( !isdefined( level.devgui_crates ) ) - return; - - for ( i = 0; i < level.devgui_crates.size; i++ ) - level.devgui_crates[i] delete(); - - level.devgui_crates = []; -#/ -} - -devgui_spawn_show() -{ -/# - if ( !isdefined( level.dog_spawn_show ) ) - level.dog_spawn_show = 1; - else - level.dog_spawn_show = !level.dog_spawn_show; - - if ( !level.dog_spawn_show ) - { - level notify( "hide_dog_spawns" ); - return; - } - - spawns = level.dog_spawns; - color = ( 0, 1, 0 ); - - for ( i = 0; i < spawns.size; i++ ) - maps\mp\gametypes\_dev::showonespawnpoint( spawns[i], color, "hide_dog_spawns", 32, "dog_spawn" ); -#/ -} - -devgui_exit_show() -{ -/# - if ( !isdefined( level.dog_exit_show ) ) - level.dog_exit_show = 1; - else - level.dog_exit_show = !level.dog_exit_show; - - if ( !level.dog_exit_show ) - { - level notify( "hide_dog_exits" ); - return; - } - - exits = getnodearray( "exit", "script_noteworthy" ); - color = ( 1, 0, 0 ); - - for ( i = 0; i < exits.size; i++ ) - maps\mp\gametypes\_dev::showonespawnpoint( exits[i], color, "hide_dog_exits", 32, "dog_exit" ); -#/ -} - -dog_debug_patrol( node1, node2 ) -{ -/# - self endon( "death" ); - self endon( "debug_patrol" ); - - for (;;) - { - self setgoalnode( node1 ); - self waittill_any( "goal", "bad_path" ); - wait 1; - self setgoalnode( node2 ); - self waittill_any( "goal", "bad_path" ); - wait 1; - } -#/ -} - -devgui_debug_route() -{ -/# - iprintln( "Choose nodes with 'A' or press 'B' to cancel" ); - nodes = maps\mp\gametypes\_dev::dev_get_node_pair(); - - if ( !isdefined( nodes ) ) - { - iprintln( "Route Debug Cancelled" ); - return; - } - - iprintln( "Sending dog to chosen nodes" ); - dogs = dog_manager_get_dogs(); - - if ( isdefined( dogs[0] ) ) - { - dogs[0] notify( "debug_patrol" ); - dogs[0] thread dog_debug_patrol( nodes[0], nodes[1] ); - } -#/ -} diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_dockside_crane.gsc b/Multiplayer Core/patch_mp/maps/mp/mp_dockside_crane.gsc deleted file mode 100644 index 25125e4..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/mp_dockside_crane.gsc +++ /dev/null @@ -1,732 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include maps\mp\_utility; -#include common_scripts\utility; -#include maps\mp\_tacticalinsertion; -#include maps\mp\killstreaks\_rcbomb; -#include maps\mp\gametypes\_weaponobjects; -#include maps\mp\gametypes\ctf; -#include maps\mp\gametypes\_gameobjects; -#include maps\mp\killstreaks\_supplydrop; - -init() -{ - precachemodel( "p6_dockside_container_lrg_white" ); - crane_dvar_init(); - level.crate_models = []; - level.crate_models[0] = "p6_dockside_container_lrg_red"; - level.crate_models[1] = "p6_dockside_container_lrg_blue"; - level.crate_models[2] = "p6_dockside_container_lrg_white"; - level.crate_models[3] = "p6_dockside_container_lrg_orange"; - claw = getent( "claw_base", "targetname" ); - claw.z_upper = claw.origin[2]; - claw thread sound_wires_move(); - arms_y = getentarray( "claw_arm_y", "targetname" ); - arms_z = getentarray( "claw_arm_z", "targetname" ); - claw.arms = arraycombine( arms_y, arms_z, 1, 0 ); - - foreach ( arm_z in arms_z ) - { - arm_y = getclosest( arm_z.origin, arms_y ); - arm_z.parent = arm_y; - } - - foreach ( arm_y in arms_y ) - arm_y.parent = claw; - - claw claw_link_arms( "claw_arm_y" ); - claw claw_link_arms( "claw_arm_z" ); - crates = getentarray( "crate", "targetname" ); - array_thread( crates, ::sound_pit_move ); - crate_data = []; - - for ( i = 0; i < crates.size; i++ ) - { - crates[i] disconnectpaths(); - data = spawnstruct(); - data.origin = crates[i].origin; - data.angles = crates[i].angles; - crate_data[i] = data; - } - - rail = getent( "crane_rail", "targetname" ); - rail thread sound_ring_move(); - rail.roller = getent( "crane_roller", "targetname" ); - rail.roller.wheel = getent( "crane_wheel", "targetname" ); - claw.wires = getentarray( "crane_wire", "targetname" ); - claw.z_wire_max = rail.roller.wheel.origin[2] - 50; - - foreach ( wire in claw.wires ) - { - wire linkto( claw ); - - if ( wire.origin[2] > claw.z_wire_max ) - wire ghost(); - } - - placements = getentarray( "crate_placement", "targetname" ); - - foreach ( placement in placements ) - { - placement.angles += vectorscale( ( 0, 1, 0 ), 90.0 ); - crates[crates.size] = spawn( "script_model", placement.origin ); - } - - triggers = getentarray( "crate_kill_trigger", "targetname" ); - - foreach ( crate in crates ) - { - crate.kill_trigger = getclosest( crate.origin, triggers ); - crate.kill_trigger.origin = crate.origin - vectorscale( ( 0, 0, 1 ), 5.0 ); - crate.kill_trigger enablelinkto(); - crate.kill_trigger linkto( crate ); - - if ( crate.model != "" ) - { - crate.kill_trigger.active = 1; - continue; - } - - crate.kill_trigger.active = 0; - } - - trigger = getclosest( claw.origin, triggers ); - trigger enablelinkto(); - trigger linkto( claw ); - trigger.active = 1; - placements = array_randomize( placements ); - level thread crane_think( claw, rail, crates, crate_data, placements ); -} - -crane_dvar_init() -{ - set_dvar_float_if_unset( "scr_crane_claw_move_time", "5" ); - set_dvar_float_if_unset( "scr_crane_crate_lower_time", "5" ); - set_dvar_float_if_unset( "scr_crane_crate_raise_time", "5" ); - set_dvar_float_if_unset( "scr_crane_arm_y_move_time", "3" ); - set_dvar_float_if_unset( "scr_crane_arm_z_move_time", "3" ); - set_dvar_float_if_unset( "scr_crane_claw_drop_speed", "25" ); - set_dvar_float_if_unset( "scr_crane_claw_drop_time_min", "5" ); -} - -wire_render() -{ - self endon( "movedone" ); - - for (;;) - { - wait 0.05; - - foreach ( wire in self.wires ) - { - if ( wire.origin[2] > self.z_wire_max ) - { - wire ghost(); - continue; - } - - wire show(); - } - } -} - -crane_think( claw, rail, crates, crate_data, placements ) -{ - wait 1; - claw arms_open(); - - for (;;) - { - for ( i = 0; i < crates.size - placements.size; i++ ) - { - crate = getclosest( crate_data[i].origin, crates ); - rail crane_move( claw, crate_data[i], -318 ); - level notify( "wires_move" ); - claw claw_crate_grab( crate, 318 ); - lower = 1; - target = ( i + 1 ) % ( crates.size - placements.size ); - target_crate = getclosest( crate_data[target].origin, crates ); - - if ( cointoss() ) - { - for ( placement_index = 0; placement_index < placements.size; placement_index++ ) - { - placement = placements[placement_index]; - - if ( !isdefined( placement.crate ) ) - { - lower = 0; - break; - } - } - } - - if ( !lower ) - { - z_dist = crate.origin[2] - placement.origin[2] - 33; - rail crane_move( claw, placement, z_dist * -1 ); - level notify( "wires_move" ); - placement.crate = crate; - } - else - { - rail crane_move( claw, crate_data[target], -181 ); - level notify( "wires_move" ); - } - - claw claw_crate_move( crate ); - - if ( lower ) - crate crate_lower( target_crate, crate_data[target] ); - - crate = target_crate; - target = ( i + 2 ) % ( crates.size - placements.size ); - target_crate = getclosest( crate_data[target].origin, crates ); - - if ( !lower ) - { - crate = crates[3 + placement_index]; - crate.origin = target_crate.origin - vectorscale( ( 0, 0, 1 ), 137.0 ); - crate.angles = target_crate.angles; - wait 0.25; - - claw waittill( "movedone" ); - } - - crate crate_raise( target_crate, crate_data[target] ); - rail crane_move( claw, crate_data[target], -181 ); - level notify( "wires_move" ); - claw claw_crate_grab( target_crate, 181 ); - crate = target_crate; - target = ( i + 3 ) % ( crates.size - placements.size ); - rail crane_move( claw, crate_data[target], -318 ); - level notify( "wires_move" ); - claw claw_crate_drop( crate, crate_data[target] ); - } - } -} - -crane_move( claw, desired, z_dist ) -{ - self.roller linkto( self ); - self.roller.wheel linkto( self.roller ); - claw linkto( self.roller.wheel ); - goal = ( desired.origin[0], desired.origin[1], self.origin[2] ); - dir = vectornormalize( goal - self.origin ); - angles = vectortoangles( dir ); - angles = ( self.angles[0], angles[1] + 90, self.angles[2] ); - yawdiff = absangleclamp360( self.angles[1] - angles[1] ); - time = yawdiff / 25; - self rotateto( angles, time, time * 0.35, time * 0.45 ); - self thread physics_move(); - level notify( "wires_stop" ); - level notify( "ring_move" ); - - self waittill( "rotatedone" ); - - self.roller unlink(); - goal = ( desired.origin[0], desired.origin[1], self.roller.origin[2] ); - diff = distance2d( goal, self.roller.origin ); - speed = getdvarfloat( "scr_crane_claw_drop_speed" ); - time = diff / speed; - - if ( time < getdvarfloat( "scr_crane_claw_drop_time_min" ) ) - time = getdvarfloat( "scr_crane_claw_drop_time_min" ); - - self.roller moveto( goal, time, time * 0.25, time * 0.25 ); - self.roller thread physics_move(); - goal = ( desired.origin[0], desired.origin[1], self.roller.wheel.origin[2] ); - self.roller.wheel unlink(); - self.roller.wheel moveto( goal, time, time * 0.25, time * 0.25 ); - self.roller.wheel rotateto( desired.angles + vectorscale( ( 0, 1, 0 ), 90.0 ), time, time * 0.25, time * 0.25 ); - claw.z_initial = claw.origin[2]; - claw unlink(); - claw rotateto( desired.angles, time, time * 0.25, time * 0.25 ); - claw.goal = ( goal[0], goal[1], claw.origin[2] + z_dist ); - claw.time = time; - claw moveto( claw.goal, time, time * 0.25, time * 0.25 ); - level notify( "ring_stop" ); -} - -physics_move() -{ - self endon( "rotatedone" ); - self endon( "movedone" ); - - for (;;) - { - wait 0.05; - crates = getentarray( "care_package", "script_noteworthy" ); - - foreach ( crate in crates ) - { - if ( crate istouching( self ) ) - crate physicslaunch( crate.origin, ( 0, 0, 0 ) ); - } - } -} - -claw_crate_grab( crate, z_dist ) -{ - self thread wire_render(); - - self waittill( "movedone" ); - - level notify( "wires_stop" ); - self playsound( "amb_crane_arms_b" ); - self claw_z_arms( -33 ); - self playsound( "amb_crane_arms" ); - self arms_close( crate ); - crate movez( 33, getdvarfloat( "scr_crane_arm_z_move_time" ) ); - self claw_z_arms( 33 ); - crate linkto( self ); - self movez( z_dist, getdvarfloat( "scr_crane_claw_move_time" ) ); - self thread wire_render(); - level notify( "wires_move" ); - - self waittill( "movedone" ); - - self playsound( "amb_crane_arms" ); -} - -sound_wires_move() -{ - while ( true ) - { - level waittill( "wires_move" ); - - self playsound( "amb_crane_wire_start" ); - self playloopsound( "amb_crane_wire_lp" ); - - level waittill( "wires_stop" ); - - self playsound( "amb_crane_wire_end" ); - wait 0.1; - self stoploopsound( 0.2 ); - } -} - -sound_ring_move() -{ - while ( true ) - { - level waittill( "ring_move" ); - - self playsound( "amb_crane_ring_start" ); - self playloopsound( "amb_crane_ring_lp" ); - - level waittill( "ring_stop" ); - - self playsound( "amb_crane_ring_end" ); - wait 0.1; - self stoploopsound( 0.2 ); - } -} - -sound_pit_move() -{ - while ( true ) - { - level waittill( "pit_move" ); - - self playsound( "amb_crane_pit_start" ); - self playloopsound( "amb_crane_pit_lp" ); - - level waittill( "pit_stop" ); - - self playsound( "amb_crane_pit_end" ); - self stoploopsound( 0.2 ); - wait 0.2; - } -} - -claw_crate_move( crate, claw ) -{ - self thread wire_render(); - - self waittill( "movedone" ); - - crate unlink(); - self playsound( "amb_crane_arms_b" ); - level notify( "wires_stop" ); - crate movez( -33, getdvarfloat( "scr_crane_arm_z_move_time" ) ); - self claw_z_arms( -33 ); - self playsound( "amb_crane_arms_b" ); - playfxontag( level._effect["crane_dust"], crate, "tag_origin" ); - crate playsound( "amb_crate_drop" ); - self arms_open(); - level notify( "wires_move" ); - self claw_z_arms( 33 ); - z_dist = self.z_initial - self.origin[2]; - self movez( z_dist, getdvarfloat( "scr_crane_claw_move_time" ) ); - self thread wire_render(); -} - -claw_crate_drop( target, data ) -{ - target thread crate_drop_think( self ); - self thread wire_render(); - - self waittill( "claw_movedone" ); - - target unlink(); - level notify( "wires_stop" ); - self playsound( "amb_crane_arms_b" ); - target movez( -33, getdvarfloat( "scr_crane_arm_z_move_time" ) ); - self claw_z_arms( -33 ); - playfxontag( level._effect["crane_dust"], target, "tag_origin" ); - self playsound( "amb_crate_drop" ); - target notify( "claw_done" ); - self playsound( "amb_crane_arms" ); - self arms_open(); - level notify( "wires_move" ); - target.origin = data.origin; - self claw_z_arms( 33 ); - self playsound( "amb_crane_arms" ); - self movez( 318, getdvarfloat( "scr_crane_claw_move_time" ) ); - self thread wire_render(); - - self waittill( "movedone" ); -} - -crate_lower( lower, data ) -{ - z_dist = abs( self.origin[2] - lower.origin[2] ); - self movez( z_dist * -1, getdvarfloat( "scr_crane_crate_lower_time" ) ); - lower movez( z_dist * -1, getdvarfloat( "scr_crane_crate_lower_time" ) ); - level notify( "pit_move" ); - - lower waittill( "movedone" ); - - level notify( "pit_stop" ); - lower ghost(); - self.origin = data.origin; - wait 0.25; -} - -crate_raise( upper, data ) -{ - self crate_set_random_model( upper ); - self.kill_trigger.active = 1; - self.origin = ( data.origin[0], data.origin[1], self.origin[2] ); - self.angles = data.angles; - wait 0.2; - self show(); - z_dist = abs( upper.origin[2] - self.origin[2] ); - self movez( z_dist, getdvarfloat( "scr_crane_crate_raise_time" ) ); - upper movez( z_dist, getdvarfloat( "scr_crane_crate_raise_time" ) ); - level notify( "wires_stop" ); - level notify( "pit_move" ); - upper thread raise_think(); -} - -raise_think() -{ - self waittill( "movedone" ); - - level notify( "pit_stop" ); -} - -crate_set_random_model( other ) -{ - models = array_randomize( level.crate_models ); - - foreach ( model in models ) - { - if ( model == other.model ) - continue; - - self setmodel( model ); - return; - } -} - -arms_open() -{ - self claw_move_arms( -15 ); - self playsound( "amb_crane_arms" ); -} - -arms_close( crate ) -{ - self claw_move_arms( 15, crate ); - self playsound( "amb_crane_arms" ); -} - -claw_link_arms( name ) -{ - foreach ( arm in self.arms ) - { - if ( arm.targetname == name ) - arm linkto( arm.parent ); - } -} - -claw_unlink_arms( name ) -{ - foreach ( arm in self.arms ) - { - if ( arm.targetname == name ) - arm unlink(); - } -} - -claw_move_arms( dist, crate ) -{ - claw_unlink_arms( "claw_arm_y" ); - arms = []; - - foreach ( arm in self.arms ) - { - forward = anglestoforward( arm.angles ); - arm.goal = arm.origin + vectorscale( forward, dist ); - - if ( arm.targetname == "claw_arm_y" ) - { - arms[arms.size] = arm; - arm moveto( arm.goal, getdvarfloat( "scr_crane_arm_y_move_time" ) ); - } - } - - if ( dist > 0 ) - { - wait( getdvarfloat( "scr_crane_arm_y_move_time" ) / 2 ); - - foreach ( arm in self.arms ) - { - if ( arm.targetname == "claw_arm_y" ) - { - arm moveto( arm.goal, 0.1 ); - self playsound( "amb_crane_arms_b" ); - } - } - - wait 0.05; - playfxontag( level._effect["crane_spark"], crate, "tag_origin" ); - self playsound( "amb_arms_latch" ); - } -/# - assert( arms.size == 4 ); -#/ - waittill_multiple_ents( arms[0], "movedone", arms[1], "movedone", arms[2], "movedone", arms[3], "movedone" ); - - foreach ( arm in self.arms ) - arm.origin = arm.goal; - - self claw_link_arms( "claw_arm_y" ); -} - -claw_z_arms( z ) -{ - claw_unlink_arms( "claw_arm_z" ); - arms = []; - - foreach ( arm in self.arms ) - { - if ( arm.targetname == "claw_arm_z" ) - { - arms[arms.size] = arm; - arm movez( z, getdvarfloat( "scr_crane_arm_z_move_time" ) ); - } - } -/# - assert( arms.size == 4 ); -#/ - waittill_multiple_ents( arms[0], "movedone", arms[1], "movedone", arms[2], "movedone", arms[3], "movedone" ); - self claw_link_arms( "claw_arm_z" ); -} - -crate_drop_think( claw ) -{ - self endon( "claw_done" ); - self.disablefinalkillcam = 1; - claw thread claw_drop_think(); - corpse_delay = 0; - - for (;;) - { - wait 0.2; - entities = getdamageableentarray( self.origin, 200 ); - - foreach ( entity in entities ) - { - if ( !entity istouching( self.kill_trigger ) ) - continue; - - if ( isdefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" ) - { - entity maps\mp\_tacticalinsertion::destroy_tactical_insertion(); - continue; - } - - if ( !isalive( entity ) ) - continue; - - if ( isdefined( entity.targetname ) ) - { - if ( entity.targetname == "talon" ) - { - entity notify( "death" ); - continue; - } - else if ( entity.targetname == "rcbomb" ) - { - entity maps\mp\killstreaks\_rcbomb::rcbomb_force_explode(); - continue; - } - else if ( entity.targetname == "riotshield_mp" ) - { - entity dodamage( 1, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - continue; - } - } - - if ( isdefined( entity.helitype ) && entity.helitype == "qrdrone" ) - { - watcher = entity.owner maps\mp\gametypes\_weaponobjects::getweaponobjectwatcher( "qrdrone" ); - watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined ); - continue; - } - - if ( entity.classname == "grenade" ) - { - if ( !isdefined( entity.name ) ) - continue; - - if ( !isdefined( entity.owner ) ) - continue; - - if ( entity.name == "proximity_grenade_mp" ) - { - watcher = entity.owner getwatcherforweapon( entity.name ); - watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined, "script_mover_mp" ); - continue; - } - - if ( !isweaponequipment( entity.name ) ) - continue; - - watcher = entity.owner getwatcherforweapon( entity.name ); - - if ( !isdefined( watcher ) ) - continue; - - watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined, "script_mover_mp" ); - continue; - } - - if ( entity.classname == "auto_turret" ) - { - if ( !isdefined( entity.damagedtodeath ) || !entity.damagedtodeath ) - entity domaxdamage( self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - - continue; - } - - entity dodamage( entity.health * 2, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - - if ( isplayer( entity ) ) - { - claw thread claw_drop_pause(); - corpse_delay = gettime() + 3000; - } - } - - self destroy_supply_crates(); - - if ( gettime() > corpse_delay ) - self destroy_corpses(); - - if ( level.gametype == "ctf" ) - { - foreach ( flag in level.flags ) - { - if ( flag.visuals[0] istouching( self.kill_trigger ) ) - flag maps\mp\gametypes\ctf::returnflag(); - } - - continue; - } - - if ( level.gametype == "sd" && !level.multibomb ) - { - if ( level.sdbomb.visuals[0] istouching( self.kill_trigger ) ) - level.sdbomb maps\mp\gametypes\_gameobjects::returnhome(); - } - } -} - -claw_drop_think() -{ - self endon( "claw_pause" ); - - self waittill( "movedone" ); - - self notify( "claw_movedone" ); -} - -claw_drop_pause() -{ - self notify( "claw_pause" ); - self endon( "claw_pause" ); - z_diff = abs( self.goal[2] - self.origin[2] ); - frac = z_diff / 318; - time = self.time * frac; - - if ( time <= 0 ) - return; - - self moveto( self.origin, 0.01 ); - wait 3; - self thread claw_drop_think(); - self moveto( self.goal, time ); -} - -destroy_supply_crates() -{ - crates = getentarray( "care_package", "script_noteworthy" ); - - foreach ( crate in crates ) - { - if ( distancesquared( crate.origin, self.origin ) < 40000 ) - { - if ( crate istouching( self ) ) - { - playfx( level._supply_drop_explosion_fx, crate.origin ); - playsoundatposition( "wpn_grenade_explode", crate.origin ); - wait 0.1; - crate maps\mp\killstreaks\_supplydrop::cratedelete(); - } - } - } -} - -destroy_corpses() -{ - corpses = getcorpsearray(); - - for ( i = 0; i < corpses.size; i++ ) - { - if ( distancesquared( corpses[i].origin, self.origin ) < 40000 ) - corpses[i] delete(); - } -} - -getwatcherforweapon( weapname ) -{ - if ( !isdefined( self ) ) - return undefined; - - if ( !isplayer( self ) ) - return undefined; - - for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) - { - if ( self.weaponobjectwatcherarray[i].weapon != weapname ) - continue; - - return self.weaponobjectwatcherarray[i]; - } - - return undefined; -} diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_downhill_cablecar.gsc b/Multiplayer Core/patch_mp/maps/mp/mp_downhill_cablecar.gsc deleted file mode 100644 index 3d8b168..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/mp_downhill_cablecar.gsc +++ /dev/null @@ -1,729 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include maps\mp\_utility; -#include common_scripts\utility; -#include maps\mp\killstreaks\_airsupport; -#include maps\mp\_events; -#include maps\mp\gametypes\_hostmigration; -#include maps\mp\_tacticalinsertion; -#include maps\mp\killstreaks\_rcbomb; -#include maps\mp\gametypes\_weaponobjects; -#include maps\mp\gametypes\ctf; -#include maps\mp\gametypes\_gameobjects; -#include maps\mp\killstreaks\_supplydrop; - -main() -{ - level.cablecartrack = []; - level.trackdistancestops = []; - level.distancetofirstrotate = 0; - precacheitem( "gondola_mp" ); - level.gondolasounds = []; - level.gondolasounds["tower_start"] = "veh_cable_car_roller_cross"; - level.gondolasounds["rollers_start"] = "veh_cable_car_start"; - level.gondolasounds["slow_down"] = "veh_cable_car_stop"; - level.gondolaloopsounds = []; - level.gondolaloopsounds["start"] = "veh_cable_car_move_loop"; - level.gondolaloopsounds["rollers_start"] = "veh_cable_car_move_loop"; - level.gondolaloopsounds["rollers_end"] = ""; - tracklength = createcablecarpath(); -/# - assert( level.trackdistancestops.size == 2 ); -#/ - if ( level.trackdistancestops.size == 2 ) - { - velocity = getdvarfloatdefault( "scr_cable_car_velocity", 100 ); - bottomoftracklength = level.trackdistancestops[1] - level.trackdistancestops[0]; - topoftracklength = tracklength - bottomoftracklength; -/# - assert( topoftracklength < bottomoftracklength ); -#/ - extratrackrequired = bottomoftracklength - topoftracklength; - extratimerequired = extratrackrequired / velocity; - level.cablecartrack[level.cablecartrack.size - 1].movetime = extratimerequired; - level.cablecartrack[level.cablecartrack.size - 1].rotate = 1; - tracklength = bottomoftracklength * 2; - } - else - return; - - cablecars = getentarray( "cablecar", "targetname" ); - cablecarkilltrigger = getentarray( "cable_car_kill_trigger", "targetname" ); -/# - assert( isdefined( cablecars ) ); -#/ -/# - assert( isdefined( cablecarkilltrigger ) ); -#/ - level.cablecardefaultangle = cablecars[0].angles; - distancebetweencars = tracklength / cablecars.size; - - if ( getgametypesetting( "allowMapScripting" ) ) - currentdistanceforcar = 0; - else - currentdistanceforcar = distancebetweencars * 0.8; - - for ( i = 0; i < cablecars.size; i++ ) - { - cablecar = cablecars[i]; - cablecar thread waitthenplayfx( 0.1, level.cablecarlightsfx, "tag_origin" ); - cablecar.killtrigger = getclosest( cablecar.origin, cablecarkilltrigger ); -/# - assert( isdefined( cablecar.killtrigger ) ); -#/ - cablecar.killtrigger enablelinkto(); - cablecar.killtrigger linkto( cablecar ); - cablecar setpointontrack( currentdistanceforcar, tracklength ); - currentdistanceforcar += distancebetweencars; -/# - debug_star( cablecar.origin, 120000, ( 1, 0, 1 ) ); -#/ - grip = spawn( "script_model", cablecar.origin ); - - if ( cablecar.nextnodeindex >= level.cablecartrack.size - 1 ) - grip.angles = vectortoangles( level.cablecartrack[cablecar.nextnodeindex - 1].origin - level.cablecartrack[cablecar.nextnodeindex].origin ); - else - { - if ( is_true( level.cablecartrack[cablecar.nextnodeindex].pause ) ) - carnode = level.cablecartrack[cablecar.nextnodeindex + 2]; - else - carnode = level.cablecartrack[cablecar.nextnodeindex]; - - grip.angles = vectortoangles( carnode.origin - cablecar.origin ); - } - - grip.origin -= ( 0, cos( grip.angles[1] ) * -12, 8 ); - grip setmodel( "dh_cable_car_top_piece" ); - cablecar.grip = grip; - - if ( getgametypesetting( "allowMapScripting" ) ) - { - level thread cablecarrun( cablecar ); - continue; - } - - cablecar.origin += ( 0, cos( cablecar.angles[1] ) * -15, -66.6 ); - cablecar disconnectpaths(); - } -} - -waitthenplayfx( time, fxnum, tag ) -{ - self endon( "death" ); - wait( time ); - - for (;;) - { - playfxontag( fxnum, self, tag ); - - level waittill( "host_migration_end" ); - } -} - -setpointontrack( distancealongtrack, tracklength ) -{ - pointontrack = level.cablecartrack[0].origin; - - while ( distancealongtrack > tracklength ) - distancealongtrack = tracklength * -1; - - remainingdistance = distancealongtrack; - - for ( i = 0; i < level.cablecartrack.size; i++ ) - { - cablecartracknode = level.cablecartrack[i]; - currentnodeisstop = is_true( cablecartracknode.pause ); - - if ( currentnodeisstop ) - { - velocity = getdvarfloatdefault( "scr_cable_car_velocity", 100 ); - remainingdistance -= 3 * velocity; - - if ( remainingdistance <= 0 ) - { - pointontrack = cablecartracknode.origin; - self.nextnodeindex = i; - self.needtopauseatstart = remainingdistance / velocity; - break; - } - } - - nextnodeisstop = 0; - - if ( level.cablecartrack.size > i + 1 ) - nextnodeisstop = is_true( level.cablecartrack[i + 1].pause ); - - currentnodeisstop = 0; - - if ( is_true( cablecartracknode.pause ) ) - currentnodeisstop = 1; - - distance = cablecartracknode.stepdistance; - - if ( nextnodeisstop || currentnodeisstop ) - distance *= 2; - - if ( !isdefined( distance ) ) - { - pointontrack = cablecartracknode.origin; - self.nextnodeindex = i; - break; - } - - if ( remainingdistance < distance ) - { - if ( distance > 0 ) - { - ratio = remainingdistance / distance; - pointontrack = getpointonline( cablecartracknode.origin, level.cablecartrack[i + 1].origin, ratio ); - } - - self.nextnodeindex = i; - break; - } - - remainingdistance -= distance; - } - - self.angles = level.cablecardefaultangle; - - if ( distancealongtrack < level.distancetofirstrotate ) - self.angles += vectorscale( ( 0, 1, 0 ), 180.0 ); - - self.origin = pointontrack; -} - -createcablecarpath( cablecar ) -{ - currentnode = getent( "cable_down_start", "targetname" ); - startorigin = currentnode.origin; - velocity = getdvarfloatdefault( "scr_cable_car_velocity", 100 ); - tracklength = 0; - previousnode = undefined; - movetime = -1; - - while ( isdefined( currentnode ) ) - { - cablecarnodestruct = spawnstruct(); - cablecarnodestruct.origin = currentnode.origin; - level.cablecartrack[level.cablecartrack.size] = cablecarnodestruct; - - if ( isdefined( currentnode.target ) ) - nextnode = getent( currentnode.target, "targetname" ); - - if ( !isdefined( nextnode ) ) - break; - - stepdistance = distance( currentnode.origin, nextnode.origin ); - cablecarnodestruct.stepdistance = stepdistance; - movetime = stepdistance / velocity; -/# - assert( movetime > 0 ); -#/ - pauseratio = 1; - - if ( isdefined( nextnode.script_noteworthy ) && nextnode.script_noteworthy == "stop" ) - pauseratio *= 2; - - if ( isdefined( currentnode.script_noteworthy ) ) - { - if ( currentnode.script_noteworthy == "stop" ) - { - cablecarnodestruct.pause = 1; - tracklength += velocity * 3; - level.trackdistancestops[level.trackdistancestops.size] = tracklength; - pauseratio *= 2; - } - else if ( currentnode.script_noteworthy == "rotate" ) - cablecarnodestruct.rotate = 1; - else if ( currentnode.script_noteworthy == "forceorigin" ) - cablecarnodestruct.forceorigin = 1; - else - { - if ( isdefined( level.gondolasounds[currentnode.script_noteworthy] ) ) - cablecarnodestruct.playsound = level.gondolasounds[currentnode.script_noteworthy]; - - if ( isdefined( level.gondolaloopsounds[currentnode.script_noteworthy] ) ) - cablecarnodestruct.playloopsound = level.gondolaloopsounds[currentnode.script_noteworthy]; - } - } - - tracklength += stepdistance * pauseratio; - - if ( is_true( cablecarnodestruct.rotate ) ) - level.distancetofirstrotate = tracklength; - - cablecarnodestruct.movetime = movetime; - previousnode = currentnode; - currentnode = nextnode; - nextnode = undefined; - } - - return tracklength; -} - -watchpronetouch() -{ - for (;;) - { - self waittill( "touch", entity ); - - if ( isplayer( entity ) ) - { - if ( entity.origin[2] < 940 ) - { - if ( entity getstance() == "prone" ) - entity dodamage( entity.health * 2, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_HIT_BY_OBJECT", 0, "gondola_mp" ); - } - } - } -} - -cablecarrun( cablecar ) -{ - nextnodeindex = cablecar.nextnodeindex; - cablecar thread watchpronetouch(); - cablecar thread cablecar_move_think( cablecar.killtrigger, 1 ); - cablecar thread cablecar_ai_watch(); - cablecar.ismoving = 1; - grip = cablecar.grip; - firstmove = 1; - cablecar.hidden = 0; - grip.forceangles = 0; - - if ( isdefined( cablecar.needtopauseatstart ) ) - { - if ( cablecar.needtopauseatstart > 0 ) - wait( cablecar.needtopauseatstart ); - } - - for (;;) - { - for ( i = nextnodeindex; i < level.cablecartrack.size; i++ ) - { - nextnode = level.cablecartrack[i + 1]; - - if ( !isdefined( nextnode ) ) - nextnode = level.cablecartrack[0]; - - currentnode = level.cablecartrack[i]; - acceltime = 0; - deceltime = 0; - currentmovetime = currentnode.movetime; - - if ( isdefined( nextnode.pause ) || isdefined( currentnode ) && isdefined( currentnode.pause ) ) - { - currentmovetime *= 2; - - if ( isdefined( nextnode.pause ) ) - deceltime = currentmovetime - 0.1; - - if ( isdefined( currentnode ) && isdefined( currentnode.pause ) ) - acceltime = currentmovetime - 0.1; - } -/# - debug_star( nextnode.origin, ( 1, 1, 1 ), 1000 ); -#/ - if ( isdefined( currentnode ) ) - { - if ( isdefined( currentnode.playsound ) ) - cablecar playsound( currentnode.playsound ); - - if ( isdefined( currentnode.playloopsound ) ) - { - cablecar stoploopsound(); - cablecar playsound( "veh_cable_car_leave" ); - - if ( currentnode.playloopsound != "" ) - cablecar playloopsound( currentnode.playloopsound ); - } - } - - if ( isdefined( currentnode.rotate ) ) - { - cablecar hide(); - grip hide(); - cablecar.hidden = 1; - cablecar.origin += vectorscale( ( 0, 0, -1 ), 1000.0 ); - - if ( cablecar.angles[1] > 360 ) - cablecar.angles -= vectorscale( ( 0, 1, 0 ), 180.0 ); - else - cablecar.angles += vectorscale( ( 0, 1, 0 ), 180.0 ); - } - - if ( isdefined( currentnode ) && isdefined( nextnode ) ) - { - angles = vectortoangles( currentnode.origin - nextnode.origin ); - grip.nextangles = angles; - - if ( grip.forceangles == 1 ) - { - grip.forceangles = 0; - grip.angles = grip.nextangles; - } - else - grip rotateto( grip.nextangles, 0.9 ); - } - - if ( firstmove == 1 ) - { - firstmovedistance = distance( cablecar.origin, nextnode.origin ); - velocity = getdvarfloatdefault( "scr_cable_car_velocity", 100 ); - timetomove = firstmovedistance / velocity; - - if ( timetomove > 0 ) - { - cablecar moveto( nextnode.origin + ( 0, cos( cablecar.angles[1] ) * -15, -66.6 ), timetomove ); - grip moveto( nextnode.origin - ( 0, cos( cablecar.angles[1] ) * -12, 8 ), timetomove ); - wait( timetomove ); - } - } - else - { - heightoffset = -66.6; - - if ( is_true( cablecar.hidden ) ) - heightoffset += -1000; - - if ( deceltime > 0 ) - cablecar thread prettyslowdown( currentmovetime - deceltime ); - - grip thread hostmigrationawaremoveto( nextnode.origin - ( 0, cos( cablecar.angles[1] ) * -12, 8 ), currentmovetime, acceltime, deceltime, currentmovetime - 0.05 ); - cablecar hostmigrationawaremoveto( nextnode.origin + ( 0, cos( cablecar.angles[1] ) * -15, heightoffset ), currentmovetime, acceltime, deceltime, currentmovetime - 0.05 ); - } - - if ( cablecar.hidden == 1 ) - { - cablecar.hidden = 0; - - if ( is_true( cablecar.hidden ) ) - cablecar.origin -= vectorscale( ( 0, 0, -1 ), 1000.0 ); - - cablecar show(); - grip show(); - grip.forceangles = 1; - } - - firstmove = 0; - - if ( isdefined( nextnode.pause ) ) - { - cablecar.ismoving = 0; - grip thread hostmigrationawaremoveto( nextnode.origin - ( 0, cos( cablecar.angles[1] ) * -12, 8 ), 300, 0, 0, 3 ); - cablecar hostmigrationawaremoveto( nextnode.origin + ( 0, cos( cablecar.angles[1] ) * -15, -66.6 ), 300, 0, 0, 3 ); - cablecar notify( "started_moving" ); - cablecar thread prettyspeedup(); - cablecar.ismoving = 1; - } - - if ( isdefined( nextnode.forceorigin ) ) - { - cablecar.origin = nextnode.origin + ( 0, cos( cablecar.angles[1] ) * -15, -66.6 ); - grip.origin = nextnode.origin - ( 0, cos( cablecar.angles[1] ) * -12, 8 ); - } - } - - nextnodeindex = 0; - } -} - -hostmigrationawaremoveto( origin, movetime, acceltime, deceltime, waittime ) -{ - starttime = gettime(); - self moveto( origin, movetime, acceltime, deceltime ); - waitcompleted = self waitendonmigration( waittime ); - - if ( !isdefined( waitcompleted ) ) - { - endtime = gettime(); - maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); - mstimedifference = starttime + waittime * 1000 - endtime; - - if ( mstimedifference > 500 ) - wait( mstimedifference / 1000 ); - } -} - -waitendonmigration( time ) -{ - level endon( "host_migration_begin" ); - wait( time ); - return 1; -} - -prettyslowdown( waittime ) -{ - if ( waittime > 0 ) - wait( waittime ); - - self stoploopsound(); - self playsound( level.gondolasounds["slow_down"] ); - originalangle = self.angles; - swingtime = getdvarfloatdefault( "scr_cable_swing_time", 1.5 ); - swingbacktime = getdvarfloatdefault( "scr_cable_swing_back_time", 1.5 ); - swingangle = getdvarfloatdefault( "scr_cable_swing_angle", 2.0 ); - self rotateto( ( originalangle[0] + swingangle, originalangle[1], originalangle[2] ), swingtime, swingtime / 2, swingtime / 2 ); - - self waittill( "rotatedone" ); - - self rotateto( ( originalangle[0], originalangle[1], originalangle[2] ), swingbacktime, swingbacktime / 2, swingbacktime / 2 ); - - self waittill( "rotatedone" ); -} - -prettyspeedup() -{ - self stoploopsound(); - self playsound( level.gondolasounds["rollers_start"] ); - self playloopsound( level.gondolaloopsounds["start"] ); - originalangle = self.angles; - swingtime = getdvarfloatdefault( "scr_cable_swing_time_up", 1.0 ); - swingbacktime = getdvarfloatdefault( "scr_cable_swing_back_time_up", 1.5 ); - swingangle = getdvarfloatdefault( "scr_cable_swing_angle_up", 2.0 ); - self rotateto( ( originalangle[0] - swingangle, originalangle[1], originalangle[2] ), swingtime, swingtime / 2, swingtime / 2 ); - - self waittill( "rotatedone" ); - - self rotateto( ( originalangle[0], originalangle[1], originalangle[2] ), swingbacktime, swingbacktime / 2, swingbacktime / 2 ); - - self waittill( "rotatedone" ); -} - -cablecar_ai_watch() -{ - self endon( "death" ); - self endon( "delete" ); - - for (;;) - { - wait 1; - - if ( isdefined( self.nodes ) ) - { - for ( i = 0; i < self.nodes.size; i++ ) - { - node = self.nodes[i]; - - foreach ( team in level.teams ) - node setdangerous( team, 0 ); - } - } - - dir = vectornormalize( anglestoforward( self.angles ) ); - dangerorigin = self.origin - dir * 196; - nodes = getnodesinradius( dangerorigin, 256, 0, 196 ); - - for ( i = 0; i < nodes.size; i++ ) - { - node = nodes[i]; - - foreach ( team in level.teams ) - node setdangerous( team, 1 ); - } - - if ( nodes.size > 0 ) - { - self.nodes = nodes; - continue; - } - - self.nodes = undefined; - } -} - -cablecar_move_think( kill_trigger, checkmoving ) -{ - self endon( "death" ); - self endon( "delete" ); - self.disablefinalkillcam = 1; - destroycorpses = 0; - - for (;;) - { - wait 0.05; - pixbeginevent( "cablecar_move_think" ); - - if ( checkmoving ) - { - if ( self.ismoving == 0 ) - self waittill( "started_moving" ); - } - - entities = getdamageableentarray( self.origin, 200 ); - - foreach ( entity in entities ) - { - if ( isdefined( entity.targetname ) && entity.targetname == "cablecar" ) - continue; - - if ( !entity istouching( kill_trigger ) ) - continue; - - if ( isdefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" ) - { - entity maps\mp\_tacticalinsertion::destroy_tactical_insertion(); - continue; - } - - if ( !isalive( entity ) ) - continue; - - if ( isdefined( entity.targetname ) ) - { - if ( entity.targetname == "talon" ) - { - entity notify( "death" ); - continue; - } - else if ( entity.targetname == "rcbomb" ) - { - entity maps\mp\killstreaks\_rcbomb::rcbomb_force_explode(); - continue; - } - else if ( entity.targetname == "riotshield_mp" ) - { - entity dodamage( 1, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - continue; - } - } - - if ( isdefined( entity.helitype ) && entity.helitype == "qrdrone" ) - { - watcher = entity.owner maps\mp\gametypes\_weaponobjects::getweaponobjectwatcher( "qrdrone" ); - watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined ); - continue; - } - - if ( entity.classname == "grenade" ) - { - if ( !isdefined( entity.name ) ) - continue; - - if ( !isdefined( entity.owner ) ) - continue; - - if ( entity.name == "satchel_charge_mp" ) - continue; - - if ( entity.name == "proximity_grenade_mp" ) - { - watcher = entity.owner getwatcherforweapon( entity.name ); - watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined, "script_mover_mp" ); - continue; - } - - if ( !isweaponequipment( entity.name ) ) - continue; - - watcher = entity.owner getwatcherforweapon( entity.name ); - - if ( !isdefined( watcher ) ) - continue; - - watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined, "script_mover_mp" ); - continue; - } - else if ( entity.classname == "remote_drone" ) - continue; - - if ( entity.classname == "auto_turret" ) - { - if ( isdefined( entity.carried ) && entity.carried == 1 ) - continue; - - if ( !isdefined( entity.damagedtodeath ) || !entity.damagedtodeath ) - entity domaxdamage( self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - - continue; - } - - if ( isplayer( entity ) ) - { - if ( entity getstance() == "prone" ) - { - if ( entity isonground() == 0 ) - destroycorpses = 1; - } - - entity dodamage( entity.health * 2, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_HIT_BY_OBJECT", 0, "gondola_mp" ); - continue; - } - - entity dodamage( entity.health * 2, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - } - - if ( destroycorpses == 1 ) - { - destroycorpses = 0; - self destroy_corpses(); - } - - self destroy_supply_crates(); - - if ( level.gametype == "ctf" ) - { - foreach ( flag in level.flags ) - { - if ( flag.curorigin != flag.trigger.baseorigin && flag.visuals[0] istouching( kill_trigger ) ) - flag maps\mp\gametypes\ctf::returnflag(); - } - } - else if ( level.gametype == "sd" && !level.multibomb ) - { - if ( level.sdbomb.visuals[0] istouching( kill_trigger ) ) - level.sdbomb maps\mp\gametypes\_gameobjects::returnhome(); - } - - pixendevent(); - } -} - -getwatcherforweapon( weapname ) -{ - if ( !isdefined( self ) ) - return undefined; - - if ( !isplayer( self ) ) - return undefined; - - for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) - { - if ( self.weaponobjectwatcherarray[i].weapon != weapname ) - continue; - - return self.weaponobjectwatcherarray[i]; - } - - return undefined; -} - -destroy_supply_crates() -{ - crates = getentarray( "care_package", "script_noteworthy" ); - - foreach ( crate in crates ) - { - if ( distancesquared( crate.origin, self.origin ) < 40000 ) - { - if ( crate istouching( self ) ) - { - playfx( level._supply_drop_explosion_fx, crate.origin ); - playsoundatposition( "wpn_grenade_explode", crate.origin ); - wait 0.1; - crate maps\mp\killstreaks\_supplydrop::cratedelete(); - } - } - } -} - -destroy_corpses() -{ - corpses = getcorpsearray(); - - for ( i = 0; i < corpses.size; i++ ) - { - if ( distancesquared( corpses[i].origin, self.origin ) < 40000 ) - corpses[i] delete(); - } -} diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_nuketown_2020.gsc b/Multiplayer Core/patch_mp/maps/mp/mp_nuketown_2020.gsc deleted file mode 100644 index 27cef13..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/mp_nuketown_2020.gsc +++ /dev/null @@ -1,485 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include maps\mp\_utility; -#include common_scripts\utility; -#include maps\mp\_events; -#include maps\mp\mp_nuketown_2020_fx; -#include maps\mp\_load; -#include maps\mp\mp_nuketown_2020_amb; -#include maps\mp\_compass; -#include maps\mp\gametypes\_globallogic_defaults; -#include maps\mp\killstreaks\_killstreaks; - -#using_animtree("fxanim_props"); - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps\mp\mp_nuketown_2020_fx::main(); - precachemodel( "collision_physics_32x32x128" ); - precachemodel( "collision_physics_32x32x32" ); - precachemodel( "collision_physics_wall_32x32x10" ); - precachemodel( "collision_clip_32x32x32" ); - precachemodel( "collision_vehicle_128x128x128" ); - precachemodel( "collision_missile_128x128x10" ); - precachemodel( "nt_2020_doorframe_black" ); - precachemodel( "collision_vehicle_32x32x10" ); - precachemodel( "collision_physics_256x256x10" ); - precachemodel( "collision_physics_cylinder_32x128" ); - precachemodel( "collision_missile_32x32x128" ); - precachemodel( "collision_physics_32x32x10" ); - precachemodel( "collision_clip_wall_64x64x10" ); - precachemodel( "collision_physics_wall_64x64x10" ); - precachemodel( "collision_physics_128x128x10" ); - maps\mp\_load::main(); - maps\mp\mp_nuketown_2020_amb::main(); - maps\mp\_compass::setupminimap( "compass_map_mp_nuketown_2020" ); - spawncollision( "collision_physics_32x32x128", "collider", ( 1216, 167.5, 235 ), ( 0, 3.69986, -90 ) ); - spawncollision( "collision_physics_32x32x128", "collider", ( 1213, 227, 235 ), ( 0, 10.9, -90 ) ); - spawncollision( "collision_physics_32x32x128", "collider", ( 1196, 315.5, 235 ), ( 0, 15.2, -90 ) ); - spawncollision( "collision_physics_32x32x128", "collider", ( 1151.5, 427, 235 ), ( 0, 27.8, -90 ) ); - spawncollision( "collision_physics_32x32x32", "collider", ( 1109, 488, 235 ), ( 0, 46.2, -90 ) ); - spawncollision( "collision_physics_256x256x10", "collider", ( 1067, 291, 240 ), vectorscale( ( 0, 1, 0 ), 14.3 ) ); - prop1 = spawn( "script_model", ( 678.485, 583.124, -91.75 ) ); - prop1.angles = ( 270, 198.902, 86.0983 ); - prop2 = spawn( "script_model", ( 705.49, 482.12, -91.75 ) ); - prop2.angles = ( 270, 198.902, 86.0983 ); - prop3 = spawn( "script_model", ( 732.49, 381.37, -91.75 ) ); - prop3.angles = ( 270, 198.902, 86.0983 ); - prop1 setmodel( "nt_2020_doorframe_black" ); - prop2 setmodel( "nt_2020_doorframe_black" ); - prop3 setmodel( "nt_2020_doorframe_black" ); - busprop1 = spawn( "script_model", ( -121.962, 53.5963, -24.241 ) ); - busprop1.angles = ( 274.162, 199.342, 86.5184 ); - busprop1 setmodel( "nt_2020_doorframe_black" ); - spawncollision( "collision_clip_32x32x32", "collider", ( 817.5, 415, 77 ), vectorscale( ( 0, 1, 0 ), 15.2 ) ); - spawncollision( "collision_clip_32x32x32", "collider", ( 859, 430, 77.5 ), vectorscale( ( 0, 1, 0 ), 15.2 ) ); - spawncollision( "collision_clip_32x32x32", "collider", ( 894, 439.5, 77.5 ), vectorscale( ( 0, 1, 0 ), 15.2 ) ); - spawncollision( "collision_clip_32x32x32", "collider", ( 926.5, 448.5, 77.5 ), vectorscale( ( 0, 1, 0 ), 15.2 ) ); - spawncollision( "collision_clip_32x32x32", "collider", ( 1257.5, 489, -68 ), vectorscale( ( 0, 1, 0 ), 15.2 ) ); - spawncollision( "collision_clip_32x32x32", "collider", ( 1288.5, 497.5, -68 ), vectorscale( ( 0, 1, 0 ), 15.2 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( 570.655, 214.604, -10.5 ), vectorscale( ( 0, 1, 0 ), 284.5 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( 558.345, 260.896, -10.5 ), vectorscale( ( 0, 1, 0 ), 284.5 ) ); - spawncollision( "collision_physics_wall_32x32x10", "collider", ( -1422, 40.5, 4.5 ), vectorscale( ( 0, 1, 0 ), 72.2 ) ); - spawncollision( "collision_physics_cylinder_32x128", "collider", ( 883.75, 826.5, 195.75 ), ( 0, 263.2, -90 ) ); - spawncollision( "collision_physics_cylinder_32x128", "collider", ( 770, 824.75, 195.75 ), ( 0, 276.4, -90 ) ); - spawncollision( "collision_physics_cylinder_32x128", "collider", ( 661.25, 801, 195.75 ), ( 0, 287.4, -90 ) ); - spawncollision( "collision_physics_cylinder_32x128", "collider", ( 560.75, 751.75, 195.75 ), ( 0, 302, -90 ) ); - spawncollision( "collision_physics_32x32x10", "collider", ( 1325, 532, 14 ), vectorscale( ( 0, 1, 0 ), 14.9 ) ); - spawncollision( "collision_physics_32x32x10", "collider", ( 1369, 542.5, 14 ), vectorscale( ( 0, 1, 0 ), 14.9 ) ); - spawncollision( "collision_physics_wall_32x32x10", "collider", ( -1936, 699.5, -49 ), ( 359.339, 356.866, -11.7826 ) ); - spawncollision( "collision_physics_wall_32x32x10", "collider", ( -1936, 703.5, -28.5 ), ( 359.339, 356.866, -11.7826 ) ); - spawncollision( "collision_clip_wall_64x64x10", "collider", ( 1013.5, 76.5, 42 ), vectorscale( ( 0, 1, 0 ), 15.0 ) ); - spawncollision( "collision_clip_wall_64x64x10", "collider", ( -458.5, 589, 63 ), ( 1.3179, 341.742, 3.9882 ) ); - spawncollision( "collision_physics_32x32x10", "collider", ( 653, 344.5, 147 ), vectorscale( ( 0, 1, 0 ), 14.7 ) ); - spawncollision( "collision_physics_32x32x10", "collider", ( 653, 344.5, 98 ), vectorscale( ( 0, 1, 0 ), 14.7 ) ); - spawncollision( "collision_physics_wall_64x64x10", "collider", ( -611.5, 535, 90.5 ), ( 359.952, 250.338, 9.04601 ) ); - spawncollision( "collision_physics_128x128x10", "collider", ( 1168.13, 200.5, 222.485 ), ( 352.436, 6.33769, -2.04434 ) ); - spawncollision( "collision_physics_128x128x10", "collider", ( 1147.43, 295.5, 219.708 ), ( 352.293, 18.1248, -1.3497 ) ); - spawncollision( "collision_physics_128x128x10", "collider", ( 1113.81, 391.5, 218.7 ), ( 352.832, 23.1409, -0.786543 ) ); - level.onspawnintermission = ::nuked_intermission; - level.endgamefunction = ::nuked_end_game; - setdvar( "compassmaxrange", "2100" ); - precacheitem( "vcs_controller_mp" ); - precachemenu( "vcs" ); - precachemodel( "nt_sign_population" ); - precachemodel( "nt_sign_population_vcs" ); - precachestring( &"MPUI_USE_VCS_HINT" ); - level.const_fx_exploder_nuke = 1001; - level.headless_mannequin_count = 0; - level.destructible_callbacks["headless"] = ::mannequin_headless; - level thread nuked_population_sign_think(); - level.disableoutrovisionset = 1; - destructible_car_anims = []; - destructible_car_anims["car1"] = %fxanim_mp_nuked2025_car01_anim; - destructible_car_anims["car2"] = %fxanim_mp_nuked2025_car02_anim; - destructible_car_anims["displayGlass"] = %fxanim_mp_nuked2025_display_glass_anim; - level thread nuked_mannequin_init(); - level thread nuked_powerlevel_think(); - level thread nuked_bomb_drop_think(); -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "1600", reset_dvars ); - ss.dead_friend_influencer_radius = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_radius", "1300", reset_dvars ); - ss.dead_friend_influencer_timeout_seconds = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_timeout_seconds", "8", reset_dvars ); - ss.dead_friend_influencer_count = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_count", "7", reset_dvars ); -} - -move_spawn_point( targetname, start_point, new_point ) -{ - spawn_points = getentarray( targetname, "classname" ); - - for ( i = 0; i < spawn_points.size; i++ ) - { - if ( distancesquared( spawn_points[i].origin, start_point ) < 1 ) - { - spawn_points[i].origin = new_point; - return; - } - } -} - -nuked_mannequin_init() -{ - destructibles = getentarray( "destructible", "targetname" ); - mannequins = nuked_mannequin_filter( destructibles ); - level.mannequin_count = mannequins.size; - - if ( mannequins.size <= 0 ) - return; - - camerastart = getstruct( "endgame_camera_start", "targetname" ); - level.endgamemannequin = getclosest( camerastart.origin, mannequins ); - remove_count = mannequins.size - 25; - remove_count = clamp( remove_count, 0, remove_count ); - mannequins = array_randomize( mannequins ); - - for ( i = 0; i < remove_count; i++ ) - { -/# - assert( isdefined( mannequins[i].target ) ); -#/ - if ( level.endgamemannequin == mannequins[i] ) - continue; - - collision = getent( mannequins[i].target, "targetname" ); -/# - assert( isdefined( collision ) ); -#/ - collision delete(); - mannequins[i] delete(); - level.mannequin_count--; - } - - level waittill( "prematch_over" ); - - level.mannequin_time = gettime(); -} - -nuked_mannequin_filter( destructibles ) -{ - mannequins = []; - - for ( i = 0; i < destructibles.size; i++ ) - { - destructible = destructibles[i]; - - if ( issubstr( destructible.destructibledef, "male" ) ) - mannequins[mannequins.size] = destructible; - } - - return mannequins; -} - -mannequin_headless( notifytype, attacker ) -{ - if ( gettime() < level.mannequin_time + getdvarintdefault( "vcs_timelimit", 120 ) * 1000 ) - { - level.headless_mannequin_count++; - - if ( level.headless_mannequin_count == level.mannequin_count ) - level thread do_vcs(); - } -} - -nuked_intermission() -{ - maps\mp\gametypes\_globallogic_defaults::default_onspawnintermission(); -} - -nuked_end_game() -{ - if ( waslastround() ) - { - level notify( "nuke_detonation" ); - level thread nuke_detonation(); - } -} - -nuke_detonation() -{ - level notify( "bomb_drop_pre" ); - clientnotify( "bomb_drop_pre" ); - bomb_loc = getent( "bomb_loc", "targetname" ); - bomb_loc playsound( "amb_end_nuke_2d" ); - destructibles = getentarray( "destructible", "targetname" ); - - for ( i = 0; i < destructibles.size; i++ ) - { - if ( getsubstr( destructibles[i].destructibledef, 0, 4 ) == "veh_" ) - destructibles[i] hide(); - } - - displaysign = getent( "nuke_display_glass_server", "targetname" ); -/# - assert( isdefined( displaysign ) ); -#/ - displaysign hide(); - bombwaitpretime = getdvarfloatdefault( "scr_nuke_car_pre", 0.5 ); - wait( bombwaitpretime ); - exploder( level.const_fx_exploder_nuke ); - bomb_loc = getent( "bomb_loc", "targetname" ); - bomb_loc playsound( "amb_end_nuke" ); - level notify( "bomb_drop" ); - clientnotify( "bomb_drop" ); - bombwaittime = getdvarfloatdefault( "scr_nuke_car_flip", 3.25 ); - wait( bombwaittime ); - clientnotify( "nuke_car_flip" ); - location = level.endgamemannequin.origin + ( 0, -20, 50 ); - radiusdamage( location, 128, 128, 128 ); - physicsexplosionsphere( location, 128, 128, 1 ); - mannequinwaittime = getdvarfloatdefault( "scr_nuke_mannequin_flip", 0.25 ); - wait( mannequinwaittime ); - level.endgamemannequin rotateto( level.endgamemannequin.angles + vectorscale( ( 0, 0, 1 ), 90.0 ), 0.7 ); - level.endgamemannequin moveto( level.endgamemannequin.origin + vectorscale( ( 0, 1, 0 ), 90.0 ), 1 ); -} - -nuked_bomb_drop_think() -{ - camerastart = getstruct( "endgame_camera_start", "targetname" ); - cameraend = getstruct( camerastart.target, "targetname" ); - bomb_loc = getent( "bomb_loc", "targetname" ); - cam_move_time = set_dvar_float_if_unset( "scr_cam_move_time", "4.0" ); - bomb_explode_delay = set_dvar_float_if_unset( "scr_bomb_explode_delay", "2.75" ); - env_destroy_delay = set_dvar_float_if_unset( "scr_env_destroy_delay", "0.5" ); - - for (;;) - { - camera = spawn( "script_model", camerastart.origin ); - camera.angles = camerastart.angles; - camera setmodel( "tag_origin" ); - - level waittill( "bomb_drop_pre" ); - - level notify( "fxanim_dome_explode_start" ); - - for ( i = 0; i < get_players().size; i++ ) - { - player = get_players()[i]; - player camerasetposition( camera ); - player camerasetlookat(); - player cameraactivate( 1 ); - player setdepthoffield( 0, 128, 7000, 10000, 6, 1.8 ); - } - - camera moveto( cameraend.origin, cam_move_time, 0, 0 ); - camera rotateto( cameraend.angles, cam_move_time, 0, 0 ); - bombwaittime = getdvarfloatdefault( "mp_nuketown_2020_bombwait", 3.0 ); - wait( bombwaittime ); - wait( env_destroy_delay ); - cameraforward = anglestoforward( cameraend.angles ); - physicsexplosionsphere( bomb_loc.origin, 128, 128, 1 ); - radiusdamage( bomb_loc.origin, 128, 128, 128 ); - } -} - -nuked_population_sign_think() -{ - tens_model = getent( "counter_tens", "targetname" ); - ones_model = getent( "counter_ones", "targetname" ); - step = 36; - ones = 0; - tens = 0; - tens_model rotateroll( step, 0.05 ); - ones_model rotateroll( step, 0.05 ); - - for (;;) - { - wait 1; - - for (;;) - { - num_players = get_players().size; - dial = ones + tens * 10; - - if ( num_players < dial ) - { - ones--; - time = set_dvar_float_if_unset( "scr_dial_rotate_time", "0.5" ); - - if ( ones < 0 ) - { - ones = 9; - tens_model rotateroll( 0 - step, time ); - tens--; - } - - ones_model rotateroll( 0 - step, time ); - - ones_model waittill( "rotatedone" ); - - continue; - } - - if ( num_players > dial ) - { - ones++; - time = set_dvar_float_if_unset( "scr_dial_rotate_time", "0.5" ); - - if ( ones > 9 ) - { - ones = 0; - tens_model rotateroll( step, time ); - tens++; - } - - ones_model rotateroll( step, time ); - - ones_model waittill( "rotatedone" ); - - continue; - } - - break; - } - } -} - -do_vcs() -{ - if ( getdvarintdefault( "disable_vcs", 0 ) ) - return; - - if ( !getgametypesetting( "allowMapScripting" ) ) - return; - - if ( !level.onlinegame || !sessionmodeisprivate() ) - return; - - if ( level.wiiu ) - return; - - targettag = getent( "player_tv_position", "targetname" ); - level.vcs_trigger = spawn( "trigger_radius_use", targettag.origin, 0, 64, 64 ); - level.vcs_trigger setcursorhint( "HINT_NOICON" ); - level.vcs_trigger sethintstring( &"MPUI_USE_VCS_HINT" ); - level.vcs_trigger triggerignoreteam(); - screen = getent( "nuketown_tv", "targetname" ); - screen setmodel( "nt_sign_population_vcs" ); - - while ( true ) - { - level.vcs_trigger waittill( "trigger", player ); - - if ( player isusingremote() || !isalive( player ) ) - continue; - - prevweapon = player getcurrentweapon(); - - if ( prevweapon == "none" || maps\mp\killstreaks\_killstreaks::iskillstreakweapon( prevweapon ) ) - continue; - - level.vcs_trigger setinvisibletoall(); - player giveweapon( "vcs_controller_mp" ); - player switchtoweapon( "vcs_controller_mp" ); - player setstance( "stand" ); - placementtag = spawn( "script_model", player.origin ); - placementtag.angles = player.angles; - player playerlinktoabsolute( placementtag ); - placementtag moveto( targettag.origin, 0.5, 0.05, 0.05 ); - placementtag rotateto( targettag.angles, 0.5, 0.05, 0.05 ); - player enableinvulnerability(); - player openmenu( "vcs" ); - player wait_till_done_playing_vcs(); - - if ( !level.gameended ) - { - if ( isdefined( player ) ) - { - player disableinvulnerability(); - player unlink(); - player takeweapon( "vcs_controller_mp" ); - player switchtoweapon( prevweapon ); - } - - level.vcs_trigger setvisibletoall(); - } - } -} - -wait_till_done_playing_vcs() -{ - self endon( "disconnect" ); - - while ( true ) - { - self waittill( "menuresponse", menu, response ); - - return; - } -} - -nuked_powerlevel_think() -{ - pin_model = getent( "nuketown_sign_needle", "targetname" ); - pin_model thread pin_think(); -} - -pin_think() -{ - self endon( "death" ); - self endon( "entityshutdown" ); - self endon( "delete" ); - startangle = 128; - normalangle = 65 + randomfloatrange( -30, 15 ); - yellowangle = -35 + randomfloatrange( -5, 5 ); - redangle = -95 + randomfloatrange( -10, 10 ); - endangle = -138; - self.angles = ( startangle, self.angles[1], self.angles[2] ); - waittillframeend; - - if ( islastround() || isoneround() ) - { - if ( level.timelimit ) - { - add_timed_event( 10, "near_end_game" ); - self pin_move( yellowangle, level.timelimit * 60 ); - } - else if ( level.scorelimit ) - { - add_score_event( int( level.scorelimit * 0.9 ), "near_end_game" ); - self pin_move( normalangle, 300 ); - } - - notifystr = level waittill_any_return( "near_end_game", "game_ended" ); - - if ( notifystr == "near_end_game" ) - { - self pin_check_rotation( 0, 3 ); - self pin_move( redangle, 10 ); - - level waittill( "game_ended" ); - } - - self pin_check_rotation( 0, 2 ); - self pin_move( redangle, 2 ); - } - else if ( level.timelimit ) - self pin_move( normalangle, level.timelimit * 60 ); - else - self pin_move( normalangle, 300 ); - - level waittill( "nuke_detonation" ); - - self pin_check_rotation( 0, 0.05 ); - self pin_move( endangle, 0.1 ); -} - -pin_move( angle, time ) -{ - angles = ( angle, self.angles[1], self.angles[2] ); - self rotateto( angles, time ); -} - -pin_check_rotation( angle, time ) -{ - if ( self.angles[0] > angle ) - { - self pin_move( angle, time ); - - self waittill( "rotatedone" ); - } -} diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_studio.gsc b/Multiplayer Core/patch_mp/maps/mp/mp_studio.gsc deleted file mode 100644 index 4becbfd..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/mp_studio.gsc +++ /dev/null @@ -1,373 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include maps\mp\_utility; -#include maps\mp\mp_studio_fx; -#include maps\mp\_load; -#include maps\mp\_compass; -#include maps\mp\mp_studio_amb; -#include maps\mp\gametypes\_weaponobjects; -#include maps\mp\_tacticalinsertion; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps\mp\mp_studio_fx::main(); - maps\mp\_load::main(); - maps\mp\_compass::setupminimap( "compass_map_mp_studio" ); - maps\mp\mp_studio_amb::main(); - setdvar( "compassmaxrange", "2100" ); - game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; - game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; - game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; - game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; - game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; - game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; - game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; - game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; - game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; - game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; - level.destructible_callbacks["remove_streamers"] = ::death_streamer_think; - alleytrigger = getent( "alleyTrigger", "targetname" ); - windowtrigger = getent( "triggerwindowTarget", "targetname" ); - target7 = getent( "trailerTarget_Window", "targetname" ); - target8 = getent( "alleyTarget_Cover", "targetname" ); - target9 = getent( "alleyTarget_Path", "targetname" ); - targetlight1_off = getent( "steelBuildingTargetLight1_off", "targetname" ); - targetlight1_on = getent( "steelBuildingTargetLight1_on", "targetname" ); - targetlight2_off = getent( "steelBuildingTargetLight2_off", "targetname" ); - targetlight2_on = getent( "steelBuildingTargetLight2_on", "targetname" ); - level.const_fx_exploder_red_light_1 = 1001; - level.const_fx_exploder_red_light_2 = 1002; - speaker1 = getent( "loudspeaker1", "targetname" ); - speaker2 = getent( "loudspeaker2", "targetname" ); - targetlight1_on hide(); - targetlight2_on hide(); - target8 setcandamage( 1 ); - target9 setcandamage( 1 ); - target8 thread damagetarget( 2 ); - target9 thread damagetarget( 2 ); - target7 thread movetarget( 7, ( 57, 23, 0 ), 3 ); - target8 thread movetarget( 1, 240, 10 ); - target9 thread movetarget( 1, 130, 8.6 ); - alleytrigger thread triggercheck( target9 ); - windowtrigger thread triggercheck( target7 ); -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "1900", reset_dvars ); -} - -triggercheck( target ) -{ - self endon( "game_ended" ); - - while ( true ) - { - self waittill( "trigger", player ); - - distance = distance( target.origin, self.origin ); - - if ( distance <= 90 ) - { - target notify( "targetStopMoving" ); - - while ( isdefined( player ) && player istouching( self ) && distance <= 90 ) - { - if ( distancesquared( target.origin, target.railpoints[0] ) < distancesquared( player.origin, target.railpoints[0] ) ) - target.preferrednextpos = 0; - else - target.preferrednextpos = 1; - - wait 0.25; - } - } - } -} - -damagetarget( dir ) -{ - self endon( "game_ended" ); - - while ( true ) - { - self waittill( "damage", damage, attacker, direction ); - - switch ( dir ) - { - case "1": - self rotateroll( self.angles[1] + 90, 0.1 ); - wait 0.2; - self rotateroll( self.angles[1] - 90, 0.1 ); - wait 0.2; - self playsound( "amb_target_flip" ); - break; - case "2": - rotation = 1; - - if ( isdefined( attacker ) && isplayer( attacker ) ) - { - yaw = get2dyaw( attacker.origin, self.origin ); - - if ( attacker.angles[1] > yaw ) - rotation = -1; - } - - self rotateyaw( self.angles[2] + 180 * rotation, 0.3 ); - self playsound( "amb_target_twirl" ); - - self waittill( "rotatedone" ); - - break; - case "3": - self rotatepitch( self.angles[1] + 90, 0.1 ); - wait 0.2; - self rotatepitch( self.angles[1] - 90, 0.1 ); - wait 0.2; - self playsound( "amb_target_flip" ); - break; - case "4": - self rotateroll( self.angles[1] - 90, 0.1 ); - wait 0.2; - self rotateroll( self.angles[1] + 90, 0.1 ); - wait 0.2; - self playsound( "amb_target_flip" ); - break; - case "5": - self rotatepitch( self.angles[1] - 90, 0.1 ); - wait 0.2; - self rotatepitch( self.angles[1] + 90, 0.1 ); - wait 0.2; - self playsound( "amb_target_flip" ); - break; - } - } -} - -damagetargetlights( light_on, light_off, speaker, alias, exploderhandle ) -{ - self endon( "game_ended" ); - - while ( true ) - { - self waittill( "damage" ); - - speaker playsound( alias ); - exploder( exploderhandle ); - light_off hide(); - light_on show(); - wait 0.5; - exploder_stop( exploderhandle ); - light_off show(); - light_on hide(); - } -} - -movetarget( dir, dis, speed ) -{ - self endon( "game_ended" ); - keepmoving = 1; - self thread movement_process(); - startpos = self.origin; - farpos = self.origin; - sound = spawn( "script_origin", self.origin ); - sound linkto( self ); - sound playloopsound( "amb_target_chain" ); - - switch ( dir ) - { - case "1": - farpos = self.origin + ( 0, dis, 0 ); - break; - case "2": - farpos = self.origin - ( 0, dis, 0 ); - break; - case "3": - farpos = self.origin + ( dis, 0, 0 ); - break; - case "4": - farpos = self.origin - ( dis, 0, 0 ); - break; - case "5": - farpos = self.origin + ( 0, 0, dis ); - break; - case "6": - farpos = self.origin - ( 0, 0, dis ); - break; - case "7": - farpos = self.origin - dis; - break; - } - - self.railpoints = []; - self.railpoints[0] = startpos; - self.railpoints[1] = farpos; - self.preferrednextpos = 1; - self.playertrigger = 0; - - while ( true ) - { - nextpos = self.railpoints[self.preferrednextpos]; - - if ( self.preferrednextpos == 0 ) - self.preferrednextpos = 1; - else - self.preferrednextpos = 0; - - self moveto( nextpos, speed ); - self waittill_either( "movedone", "targetStopMoving" ); - self playsound( "amb_target_stop" ); - } -} - -rotatetarget( dir, deg, speed, pausetime ) -{ - self endon( "game_ended" ); - - while ( true ) - { - switch ( dir ) - { - case "1": - self rotateyaw( self.angles[2] + deg, speed ); - self playsound( "amb_target_rotate" ); - wait( pausetime ); - self rotateyaw( self.angles[2] - deg, speed ); - self playsound( "amb_target_rotate" ); - wait( pausetime ); - break; - case "2": - self rotateyaw( self.angles[2] - deg, speed ); - self playsound( "amb_target_rotate" ); - wait( pausetime ); - self rotateyaw( self.angles[2] + deg, speed ); - self playsound( "amb_target_rotate" ); - wait( pausetime ); - break; - case "3": - self rotateroll( self.angles[0] + deg, speed ); - self playsound( "amb_target_rotate" ); - wait( pausetime ); - self rotateroll( self.angles[0] - deg, speed ); - self playsound( "amb_target_rotate" ); - wait( pausetime ); - break; - case "4": - self rotateroll( self.angles[0] - deg, speed ); - self playsound( "amb_target_rotate" ); - wait( pausetime ); - self rotateroll( self.angles[0] + deg, speed ); - self playsound( "amb_target_rotate" ); - wait( pausetime ); - break; - case "5": - self rotateroll( self.angles[1] + deg, speed ); - self playsound( "amb_target_rotate" ); - wait( pausetime ); - self rotateroll( self.angles[1] - deg, speed ); - self playsound( "amb_target_rotate" ); - wait( pausetime ); - break; - case "6": - self rotatepitch( self.angles[1] - deg, speed ); - wait( pausetime ); - self rotatepitch( self.angles[1] + deg, speed ); - wait( pausetime ); - break; - case "7": - self rotateto( ( self.angles[0] + 90, self.angles[1] - 90, self.angles[2] + 45 ), speed ); - wait( pausetime ); - self rotateto( ( self.angles[0] - 90, self.angles[1] + 90, self.angles[2] - 45 ), speed ); - wait( pausetime ); - } - } -} - -movement_process() -{ - for (;;) - { - entities = getdamageableentarray( self.origin, 50 ); - - foreach ( entity in entities ) - { - if ( isdefined( entity.targetname ) && ( entity.targetname == "alleyTarget_Cover" || entity.targetname == "alleyTarget_Path" ) ) - continue; - - if ( isplayer( entity ) ) - continue; - - if ( !entity istouching( self ) ) - continue; - - if ( isdefined( entity.classname ) && entity.classname == "grenade" ) - { - if ( !isdefined( entity.name ) ) - continue; - - if ( !isdefined( entity.owner ) ) - continue; - - if ( entity.name == "satchel_charge_mp" ) - { - if ( entity.origin[2] > self.origin[2] + 5 ) - continue; - } - - watcher = entity.owner getwatcherforweapon( entity.name ); - - if ( !isdefined( watcher ) ) - continue; - - watcher thread maps\mp\gametypes\_weaponobjects::waitanddetonate( entity, 0.0, undefined ); - } - - if ( isdefined( entity.targetname ) ) - { - if ( entity.targetname == "riotshield_mp" ) - { - entity dodamage( 1, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - continue; - } - } - - if ( isdefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" ) - entity thread maps\mp\_tacticalinsertion::fizzle(); - } - - wait 0.25; - } -} - -getwatcherforweapon( weapname ) -{ - if ( !isdefined( self ) ) - return undefined; - - if ( !isplayer( self ) ) - return undefined; - - for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) - { - if ( self.weaponobjectwatcherarray[i].weapon != weapname ) - continue; - - return self.weaponobjectwatcherarray[i]; - } - - return undefined; -} - -death_streamer_think( notifytype, attacker ) -{ - streamers = getentarray( "airconditioner_streamer", "targetname" ); - - for ( i = 0; i < streamers.size; i++ ) - { - streamer = streamers[i]; - - if ( distancesquared( streamer.origin, self.origin ) < 2500 ) - streamer delete(); - } -} diff --git a/Multiplayer Core/patch_mp/maps/mp/mp_takeoff.gsc b/Multiplayer Core/patch_mp/maps/mp/mp_takeoff.gsc deleted file mode 100644 index f47354a..0000000 --- a/Multiplayer Core/patch_mp/maps/mp/mp_takeoff.gsc +++ /dev/null @@ -1,355 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include maps\mp\_utility; -#include maps\mp\_events; -#include common_scripts\utility; -#include maps\mp\mp_takeoff_fx; -#include maps\mp\_load; -#include maps\mp\_compass; -#include maps\mp\gametypes\_spawning; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - level.overrideplayerdeathwatchtimer = ::leveloverridetime; - level.useintermissionpointsonwavespawn = ::useintermissionpointsonwavespawn; - maps\mp\mp_takeoff_fx::main(); - precachemodel( "collision_nosight_wall_64x64x10" ); - precachemodel( "collision_clip_wall_128x128x10" ); - precachemodel( "collision_mp_takeoff_solar_weap" ); - maps\mp\_load::main(); - maps\mp\_compass::setupminimap( "compass_map_mp_takeoff" ); - setdvar( "compassmaxrange", "2100" ); - game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; - game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; - game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; - game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; - game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; - game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; - game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; - game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; - game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; - game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; - spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -915, 790, 212 ), ( 0, 0, 0 ) ); - spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -979, 790, 212 ), ( 0, 0, 0 ) ); - spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -1043, 790, 212 ), ( 0, 0, 0 ) ); - spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -1083, 790, 212 ), ( 0, 0, 0 ) ); - spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -915, 790, 148 ), ( 0, 0, 0 ) ); - spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -979, 790, 148 ), ( 0, 0, 0 ) ); - spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -1043, 790, 148 ), ( 0, 0, 0 ) ); - spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -1083, 790, 148 ), ( 0, 0, 0 ) ); - spawncollision( "collision_clip_wall_128x128x10", "collider", ( 136, 2511, 245.5 ), vectorscale( ( 0, 1, 0 ), 90.0 ) ); - spawncollision( "collision_mp_takeoff_solar_weap", "collider", ( 580, 3239.5, 32.5 ), ( 0, 0, 0 ) ); - spawncollision( "collision_clip_wall_128x128x10", "collider", ( 1523.5, 2085.5, 220.5 ), vectorscale( ( 0, 1, 0 ), 270.3 ) ); - maps\mp\gametypes\_spawning::level_use_unified_spawning( 1 ); - level thread dog_jump_think(); - level.disableoutrovisionset = 1; - level.mptakeoffrocket = getent( "takeoff_rocket", "targetname" ); -/# - assert( isdefined( level.mptakeoffrocket ), "Unable to find entity with targetname: 'takeoff_rocket'" ); -#/ - level.endgamefunction = ::takeoff_end_game; - level.preendgamefunction = ::takeoff_pre_end_game; - level thread setuprocketcamera(); -/# - execdevgui( "devgui_mp_takeoff" ); - level thread watchdevnotify(); - level thread devgui_endgame(); -#/ -} - -dog_jump_think() -{ - origin = ( 209, 3819, 91 ); - trigger = spawn( "trigger_box", origin, getaitriggerflags(), 64, 32, 64 ); - trigger setexcludeteamfortrigger( "none" ); - - for (;;) - { - trigger waittill( "trigger", entity ); - - if ( isai( entity ) ) - { - glassradiusdamage( origin, 64, 5001, 5000 ); - trigger delete(); - return; - } - } -} - -setuprocketcamera() -{ - wait 0.1; - getrocketcamera(); -} - -getrocketcamera() -{ - camerastruct = getstruct( "endgame_first_camera", "targetname" ); -/# - assert( isdefined( camerastruct ), "Unable to find entity with targetname: 'endgame_first_camera'" ); -#/ - if ( !isdefined( level.rocketcamera ) ) - { - level.rocketcamera = spawn( "script_model", camerastruct.origin ); - level.rocketcamera setmodel( "tag_origin" ); - } - else - level.rocketcamera.origin = camerastruct.origin; - - level.rocketcamera.angles = camerastruct.angles; - return level.rocketcamera; -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2300", reset_dvars ); -} - -watchdevnotify() -{ -/# - startvalue = 0; - setdvarint( "scr_takeoff_rocket", startvalue ); - - for (;;) - { - takeoff_rocket = getdvarint( "scr_takeoff_rocket" ); - - if ( takeoff_rocket != startvalue ) - { - level notify( "dev_takeoff_rocket" ); - startvalue = takeoff_rocket; - } - - wait 0.2; - } -#/ -} - -devgui_endgame() -{ -/# - rocket = level.mptakeoffrocket; - assert( isdefined( rocket ), "Unable to find entity with targetname: 'takeoff_rocket'" ); - rocketorigin = rocket.origin; - rocketangles = rocket.angles; - rocketmodel = rocket.model; - - for (;;) - { - level waittill( "dev_takeoff_rocket" ); - - visionsetnaked( "blackout", 0.1 ); - thread takeoff_pre_end_game(); - wait 1.0; - visionsetnaked( "mp_takeoff", 0.1 ); - thread takeoff_end_game(); - wait 4.5; - level notify( "debug_end_takeoff" ); - wait 1.0; - visionsetnaked( "mp_takeoff", 0.1 ); - - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - player cameraactivate( 0 ); - } - - stop_exploder( 1001 ); - rocket delete(); - rocket = spawn( "script_model", rocketorigin ); - rocket.angles = rocketangles; - rocket setmodel( rocketmodel ); - level.mptakeoffrocket = rocket; - } -#/ -} - -water_trigger_init() -{ - wait 3; - triggers = getentarray( "trigger_hurt", "classname" ); - - foreach ( trigger in triggers ) - { - if ( trigger.origin[2] > level.mapcenter[2] ) - continue; - - trigger thread water_trigger_think(); - } - - triggers = getentarray( "water_killbrush", "targetname" ); - - foreach ( trigger in triggers ) - trigger thread player_splash_think(); -} - -player_splash_think() -{ - for (;;) - { - self waittill( "trigger", entity ); - - if ( isplayer( entity ) && isalive( entity ) ) - self thread trigger_thread( entity, ::player_water_fx ); - } -} - -player_water_fx( player, endon_condition ) -{ - maxs = self.origin + self getmaxs(); - - if ( maxs[2] > 60 ) - maxs += vectorscale( ( 0, 0, 1 ), 10.0 ); - - origin = ( player.origin[0], player.origin[1], maxs[2] ); - playfx( level._effect["water_splash_sm"], origin ); -} - -water_trigger_think() -{ - for (;;) - { - self waittill( "trigger", entity ); - - if ( isplayer( entity ) ) - { - entity playsound( "mpl_splash_death" ); - playfx( level._effect["water_splash"], entity.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ); - } - } -} - -leveloverridetime( defaulttime ) -{ - if ( self isinwater() ) - return 0.4; - - return defaulttime; -} - -useintermissionpointsonwavespawn() -{ - return self isinwater(); -} - -isinwater() -{ - triggers = getentarray( "trigger_hurt", "classname" ); - - foreach ( trigger in triggers ) - { - if ( trigger.origin[2] > level.mapcenter[2] ) - continue; - - if ( self istouching( trigger ) ) - return true; - } - - return false; -} - -takeoff_pre_end_game( timetillendgame, debug ) -{ - if ( !isdefined( debug ) ) - { - level waittill( "play_final_killcam" ); - - wait 10.0; - } - - rocket = level.mptakeoffrocket; -/# - assert( isdefined( rocket ), "Unable to find entity with targetname: 'takeoff_rocket'" ); -#/ - rocket rocket_thrusters_initialize(); -} - -takeoff_end_game() -{ -/# - level endon( "debug_end_takeoff" ); -#/ - level.rocket_camera = 0; - rocket = level.mptakeoffrocket; - rocket playsound( "evt_shuttle_launch" ); -/# - assert( isdefined( rocket ), "Unable to find entity with targetname: 'takeoff_rocket'" ); -#/ - rocket rocket_thrusters_initialize(); - cameraone = getrocketcamera(); - cameraone thread vibrateaftertime( getdvarfloatdefault( "mp_takeoff_shakewait", 0.5 ) ); - - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - player camerasetposition( cameraone ); - player camerasetlookat(); - player cameraactivate( 1 ); - player setdepthoffield( 0, 0, 512, 512, 4, 0 ); - } - - level.rocket_camera = 1; - rocket thread rocket_move(); - wait 4.0; - visionsetnaked( "blackout", getdvarfloatdefault( "mp_takeoff_fade_black", 0.5 ) ); -} - -rocket_thrusters_initialize() -{ - if ( !isdefined( self.thrustersinited ) ) - { - self.thrustersinited = 1; - exploder( 1001 ); - playfxontag( level._effect["fx_mp_tak_shuttle_thruster_lg"], self, "tag_fx" ); - playfxontag( level._effect["fx_mp_tak_shuttle_thruster_sm"], self, "tag_fx5" ); - playfxontag( level._effect["fx_mp_tak_shuttle_thruster_md"], self, "tag_fx6" ); - playfxontag( level._effect["fx_mp_tak_shuttle_thruster_sm"], self, "tag_fx7" ); - } -} - -rocket_move() -{ - origin = self.origin; - heightincrease = getdvarintdefault( "mp_takeoff_rocket_start_height", 0 ); - self.origin += ( 0, 0, heightincrease ); - movetime = getdvarintdefault( "mp_takeoff_moveTime", 17 ); - moveaccelratio = getdvarfloatdefault( "mp_takeoff_moveAccel", 1.0 ); - self moveto( self.origin + vectorscale( ( 0, 0, 1 ), 50000.0 ), movetime, movetime * moveaccelratio ); - - self waittill( "movedone" ); - - origin = self.origin; -} - -vibrateaftertime( waittime ) -{ - self endon( "death" ); -/# - level endon( "debug_end_takeoff" ); -#/ - wait( waittime ); - pitchvibrateamplitude = getdvarfloatdefault( "mp_takeoff_start", 0.1 ); - vibrateamplitude = getdvarfloatdefault( "mp_takeoff_a_start", 0.1 ); - vibratetime = 0.05; - originalangles = self.angles; - - for (;;) - { - angles0 = ( originalangles[0] - pitchvibrateamplitude, originalangles[1], originalangles[2] - vibrateamplitude ); - angles1 = ( originalangles[0] + pitchvibrateamplitude, originalangles[1], originalangles[2] + vibrateamplitude ); - self rotateto( angles0, vibratetime ); - - self waittill( "rotatedone" ); - - self rotateto( angles1, vibratetime ); - - self waittill( "rotatedone" ); - - vibrateamplitude *= getdvarfloatdefault( "mp_takeoff_amp_vredux", 1.12 ); - pitchvibrateamplitude = 0 - pitchvibrateamplitude; - pitchvibrateamplitude *= getdvarfloatdefault( "mp_takeoff_amp_predux", 1.11 ); - } -} diff --git a/Multiplayer Core/patch_mp/patch_mp functions descriptions and locations.md b/Multiplayer Core/patch_mp/patch_mp functions descriptions and locations.md deleted file mode 100644 index 4cb5451..0000000 --- a/Multiplayer Core/patch_mp/patch_mp functions descriptions and locations.md +++ /dev/null @@ -1,4 +0,0 @@ -# Black Ops 2 patch_mp Functions Descriptions and Locations List - -### Functions in maps/mp/_utility.gsc: - diff --git a/Multiplayer Core/patch_mp/readme.md b/Multiplayer Core/patch_mp/readme.md deleted file mode 100644 index 8123e18..0000000 --- a/Multiplayer Core/patch_mp/readme.md +++ /dev/null @@ -1,229 +0,0 @@ -### The following scripts compile and run successfully with no known errors: -``` -patch_mp/maps/mp/gametypes/_clientids.gsc -patch_mp/maps/mp/gametypes/_globalentities.gsc -patch_mp/maps/mp/gametypes/_scoreboard.gsc -patch_mp/maps/mp/gametypes/_shellshock.gsc -``` -### The following scripts compile and run successfully with minor errors: -``` -``` -### The following scripts compile and run successfully with major errors: -``` -patch_mp/maps/mp/bots/_bot.gsc -``` -### The following scripts compile and run serverside but clients cannot join due to exe_client_field_mismatch -``` -``` -### The following scripts compile but cause a minidump or other severe error: -``` -``` -### The following scripts cannot be compiled due to animation references -``` -``` -### The following scripts have been checked, but they have not been tested yet -``` -patch_mp/maps/codescripts/character_mp.gsc -patch_mp/maps/codescripts/delete.gsc -patch_mp/maps/codescripts/struct.gsc - -patch_mp/maps/mp/_acousticsensor.gsc -patch_mp/maps/mp/_ambientpackage.gsc -patch_mp/maps/mp/_audio.gsc -patch_mp/maps/mp/_ballistic_knife.gsc -patch_mp/maps/mp/_bb.gsc -patch_mp/maps/mp/_bouncingbetty.gsc -patch_mp/maps/mp/_busing.gsc -patch_mp/maps/mp/_compass.gsc -patch_mp/maps/mp/_demo.gsc -patch_mp/maps/mp/_development_dvars.gsc -patch_mp/maps/mp/_empgrenade.gsc -patch_mp/maps/mp/_entityheadicons.gsc -patch_mp/maps/mp/_explosive_bolt.gsc -patch_mp/maps/mp/_flashgrenades.gsc -patch_mp/maps/mp/_fxanim.gsc -patch_mp/maps/mp/_medals.gsc -patch_mp/maps/mp/_menus.gsc -patch_mp/maps/mp/_multi_extracam.gsc -patch_mp/maps/mp/_music.gsc -patch_mp/maps/mp/_pc.gsc -patch_mp/maps/mp/_satchel_charge.gsc -patch_mp/maps/mp/_scrambler.gsc -patch_mp/maps/mp/_sensor_grenade.gsc -patch_mp/maps/mp/_smokegrenade.gsc -patch_mp/maps/mp/_sticky_grenade.gsc -patch_mp/maps/mp/_teargrenades.gsc -patch_mp/maps/mp/_treadfx.gsc -patch_mp/maps/mp/mp_bridge.gsc -patch_mp/maps/mp/mp_carrier.gsc -patch_mp/maps/mp/mp_castaway.sc -patch_mp/maps/mp/mp_concert.gsc -patch_mp/maps/mp/mp_dig.gsc -patch_mp/maps/mp/mp_dockside.gsc -patch_mp/maps/mp/mp_dockside_crane.gsc -patch_mp/maps/mp/mp_downhill.gsc -patch_mp/maps/mp/mp_drone.gsc -patch_mp/maps/mp/mp_express.gsc -patch_mp/maps/mp/mp_frostbite.gsc -patch_mp/maps/mp/mp_hijacked.gsc -patch_mp/maps/mp/mp_hydro.gsc -patch_mp/maps/mp/mp_la.gsc -patch_mp/maps/mp/mp_meltdown.gsc -patch_mp/maps/mp/mp_mirage.gsc -patch_mp/maps/mp/mp_nightclub.gsc -patch_mp/maps/mp/mp_nuketown_2020.gsc -patch_mp/maps/mp/mp_overflow.gsc -patch_mp/maps/mp/mp_paintball.gsc -patch_mp/maps/mp/mp_pod.gsc -patch_mp/maps/mp/mp_raid.gsc -patch_mp/maps/mp/mp_skate.gsc -patch_mp/maps/mp/mp_slums.gsc -patch_mp/maps/mp/mp_socotra.gsc -patch_mp/maps/mp/mp_studio.gsc -patch_mp/maps/mp/mp_takeoff.gsc -patch_mp/maps/mp/mp_turbine.gsc -patch_mp/maps/mp/mp_uplink.gsc -patch_mp/maps/mp/mp_vertigo.gsc -patch_mp/maps/mp/mp_village.gsc - -patch_mp/maps/mp/bots/_bot_combat.gsc -patch_mp/maps/mp/bots/_bot_loadout.gsc -patch_mp/maps/mp/bots/_bot_conf.gsc -patch_mp/maps/mp/bots/_bot_ctf.gsc -patch_mp/maps/mp/bots/_bot_dem.gsc -patch_mp/maps/mp/bots/_bot_dom.gsc -patch_mp/maps/mp/bots/_bot_hack.gsc -patch_mp/maps/mp/bots/_bot_hq.gsc -patch_mp/maps/mp/bots/_bot_koth.gsc -patch_mp/maps/mp/bots/_bot_sd.gsc - -patch_mp/maps/mp/gametypes/_battlechatter_mp.gsc -patch_mp/maps/mp/gametypes/_callbacksetup.gsc -patch_mp/maps/mp/gametypes/_class.gsc -patch_mp/maps/mp/gametypes/_copter.gsc -patch_mp/maps/mp/gametypes/_damagefeedback.gsc -patch_mp/maps/mp/gametypes/_deathicons.gsc -patch_mp/maps/mp/gametypes/_friendicons.gsc -patch_mp/maps/mp/gametypes/_gameobjects.gsc -patch_mp/maps/mp/gametypes/_globallogic.gsc -patch_mp/maps/mp/gametypes/_globallogic_actor.gsc -patch_mp/maps/mp/gametypes/_globallogic_audio.gsc -patch_mp/maps/mp/gametypes/_globallogic_defaults.gsc -patch_mp/maps/mp/gametypes/_globallogic_player.gsc -patch_mp/maps/mp/gametypes/_globallogic_score.gsc -patch_mp/maps/mp/gametypes/_globallogic_spawn.gsc -patch_mp/maps/mp/gametypes/_globallogic_ui.gsc -patch_mp/maps/mp/gametypes/_globallogic_utils.gsc -patch_mp/maps/mp/gametypes/_globallogic_vehicle.gsc -patch_mp/maps/mp/gametypes/_healthoverlay.gsc -patch_mp/maps/mp/gametypes/_hostmigration.gsc -patch_mp/maps/mp/gametypes/_hud.gsc -patch_mp/maps/mp/gametypes/_hud_message.gsc -patch_mp/maps/mp/gametypes/_hud_util.gsc -patch_mp/maps/mp/gametypes/_killcam.gsc -patch_mp/maps/mp/gametypes/_menus.gsc -patch_mp/maps/mp/gametypes/_objpoints.gsc -patch_mp/maps/mp/gametypes/_perplayer.gsc -patch_mp/maps/mp/gametypes/_persistence.gsc -patch_mp/maps/mp/gametypes/_pregame.gsc -patch_mp/maps/mp/gametypes/_rank.gsc -patch_mp/maps/mp/gametypes/_serversettings.gsc -patch_mp/maps/mp/gametypes/_spawning.gsc -patch_mp/maps/mp/gametypes/_spawnlogic.gsc -patch_mp/maps/mp/gametypes/_spectating.gsc -patch_mp/maps/mp/gametypes/_tweakables.gsc -patch_mp/maps/mp/gametypes/_wager.gsc -patch_mp/maps/mp/gametypes/_weapons.gsc -patch_mp/maps/mp/gametypes/_weaponobjects.gsc -patch_mp/maps/mp/gametypes/_weapon_utils.gsc -patch_mp/maps/mp/gametypes/conf.gsc -patch_mp/maps/mp/gametypes/ctf.gsc -patch_mp/maps/mp/gametypes/dem.gsc -patch_mp/maps/mp/gametypes/dm.gsc -patch_mp/maps/mp/gametypes/dom.gsc -patch_mp/maps/mp/gametypes/gun.gsc -patch_mp/maps/mp/gametypes/hq.gsc -patch_mp/maps/mp/gametypes/koth.gsc -patch_mp/maps/mp/gametypes/oic.gsc -patch_mp/maps/mp/gametypes/oneflag.gsc -patch_mp/maps/mp/gametypes/sas.gsc -patch_mp/maps/mp/gametypes/sd.gsc -patch_mp/maps/mp/gametypes/shrp.gsc -patch_mp/maps/mp/gametypes/tdm.gsc - -patch_mp/maps/mp/teams/_teams.gsc -patch_mp/maps/mp/teams/_teamset.gsc -patch_mp/maps/mp/teams/_teamset_multiteam.gsc - -patch_mp/maps/mp/killstreaks/_supplydrop.gsc -``` -### The following scripts are not checked yet, uploaded to setup a baseline: -``` -patch_mp/maps/common_scripts/utility.gsc - -patch_mp/maps/mp/_challenges.gsc -patch_mp/maps/mp/_decoy.gsc -patch_mp/maps/mp/_destructible.gsc -patch_mp/maps/mp/_fx.gsc -patch_mp/maps/mp/_gameadvertisement.gsc -patch_mp/maps/mp/_gamerep.gsc -patch_mp/maps/mp/_global_fx.gsc -patch_mp/maps/mp/_hacker_tool.gsc -patch_mp/maps/mp/_heatseekingmissle.gsc -patch_mp/maps/mp/_interactive_objects.gsc -patch_mp/maps/mp/_load.gsc -patch_mp/maps/mp/_mgturret.gsc -patch_mp/maps/mp/_popups.gsc -patch_mp/maps/mp/_proximity_grenade.gsc -patch_mp/maps/mp/_riotshield.gsc -patch_mp/maps/mp/_scoreevents.gsc -patch_mp/maps/mp/_tabun.gsc -patch_mp/maps/mp/_tacticalinsertion.gsc -patch_mp/maps/mp/_trophy_system.gsc -patch_mp/maps/mp/_utility.gsc -patch_mp/maps/mp/_vehicles.gsc -patch_mp/maps/mp/mp_downhill_cablecar.gsc -patch_mp/maps/mp/mp_express_train.gsc -patch_mp/maps/mp/mp_magma.gsc - -patch_mp/maps/mp/killstreaks/_ai_tank.gsc -patch_mp/maps/mp/killstreaks/_airsupport.gsc -patch_mp/maps/mp/killstreaks/_dogs.gsc -patch_mp/maps/mp/killstreaks/_emp.gsc -patch_mp/maps/mp/killstreaks/_helicopter.gsc -patch_mp/maps/mp/killstreaks/_helicopter_guard.gsc -patch_mp/maps/mp/killstreaks/_helicopter_gunner.gsc -patch_mp/maps/mp/killstreaks/_killstreak_weapons.gsc -patch_mp/maps/mp/killstreaks/_killstreakrules.gsc -patch_mp/maps/mp/killstreaks/_killstreaks.gsc -patch_mp/maps/mp/killstreaks/_missile_drone.gsc -patch_mp/maps/mp/killstreaks/_missile_swarm.gsc -patch_mp/maps/mp/killstreaks/_planemortar.gsc -patch_mp/maps/mp/killstreaks/_qrdrone.gsc -patch_mp/maps/mp/killstreaks/_radar.gsc -patch_mp/maps/mp/killstreaks/_rcbomb.gsc -patch_mp/maps/mp/killstreaks/_remote_weapons.gsc -patch_mp/maps/mp/killstreaks/_remotemissile.gsc -patch_mp/maps/mp/killstreaks/_remotemortar.gsc -patch_mp/maps/mp/killstreaks/_spyplane.gsc -patch_mp/maps/mp/killstreaks/_straferun.gsc -patch_mp/maps/mp/killstreaks/_supplycrate.gsc -patch_mp/maps/mp/killstreaks/_turret_killstreak.gsc -``` -### The following scipts are dev scripts filled with dev calls making them useless to modify for now -``` -patch_mp/maps/mp/_art.gsc -patch_mp/maps/mp/_createfx.gsc -patch_mp/maps/mp/_createfxmenu.gsc -patch_mp/maps/mp/_createfxundo.gsc -patch_mp/maps/mp/_script_gen.gsc -patch_mp/maps/mp/gametypes/_dev.gsc -patch_mp/maps/mp/gametypes/_dev_class.gsc -``` - - -### notes: -``` -``` - - diff --git a/Multiplayer Factions/faction_cd_mp/maps/mp/teams/_teamset_cd.gsc b/Multiplayer Factions/faction_cd_mp/maps/mp/teams/_teamset_cd.gsc deleted file mode 100644 index 6215066..0000000 --- a/Multiplayer Factions/faction_cd_mp/maps/mp/teams/_teamset_cd.gsc +++ /dev/null @@ -1,48 +0,0 @@ - -main() -{ - init( "axis" ); - maps/mp/teams/_teamset::customteam_init(); - precache(); -} - -init( team ) -{ - maps/mp/teams/_teamset::init(); - game[ team ] = "cd"; - game[ "defenders" ] = team; - precacheshader( "faction_cd" ); - game[ "entity_headicon_" + team ] = "faction_cd"; - game[ "headicon_" + team ] = "faction_cd"; - level.teamprefix[ team ] = "vox_cd"; - level.teampostfix[ team ] = "cda"; - setdvar( "g_TeamName_" + team, &"MPUI_CD_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_FactionName_" + team, "cd" ); - game[ "strings" ][ team + "_win" ] = &"MP_CD_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_CD_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_CD_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_CD_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_CD_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_CD_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_TER"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_TER"; - game[ "music" ][ "victory_" + team ] = "VICTORY_TER"; - game[ "icons" ][ team ] = "faction_cd"; - game[ "voice" ][ team ] = "vox_cda_"; - setdvar( "scr_" + team, "ussr" ); - level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_axis_3"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_3_carry"; - game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry"; -} - -precache() -{ - mpbody/class_assault_cd::precache(); - mpbody/class_lmg_cd::precache(); - mpbody/class_shotgun_cd::precache(); - mpbody/class_smg_cd::precache(); - mpbody/class_sniper_cd::precache(); -} diff --git a/Multiplayer Factions/faction_cd_mp/mpbody/class_assault_cd.gsc b/Multiplayer Factions/faction_cd_mp/mpbody/class_assault_cd.gsc deleted file mode 100644 index 18a19d7..0000000 --- a/Multiplayer Factions/faction_cd_mp/mpbody/class_assault_cd.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_cordis_assault_fb" ); - precachemodel( "c_mul_mp_cordis_assault_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team6" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_cordis_assault_fb" ); - self setviewmodel( "c_mul_mp_cordis_assault_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_cd_mp/mpbody/class_lmg_cd.gsc b/Multiplayer Factions/faction_cd_mp/mpbody/class_lmg_cd.gsc deleted file mode 100644 index 6e50af5..0000000 --- a/Multiplayer Factions/faction_cd_mp/mpbody/class_lmg_cd.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_cordis_lmg_fb" ); - precachemodel( "c_mul_mp_cordis_lmg_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team6" ][ "mg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "mg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_cordis_lmg_fb" ); - self setviewmodel( "c_mul_mp_cordis_lmg_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_cd_mp/mpbody/class_shotgun_cd.gsc b/Multiplayer Factions/faction_cd_mp/mpbody/class_shotgun_cd.gsc deleted file mode 100644 index 4d99eae..0000000 --- a/Multiplayer Factions/faction_cd_mp/mpbody/class_shotgun_cd.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_cordis_shotgun_fb" ); - precachemodel( "c_mul_mp_cordis_shotgun_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team6" ][ "spread" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "spread" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_cordis_shotgun_fb" ); - self setviewmodel( "c_mul_mp_cordis_shotgun_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_cd_mp/mpbody/class_smg_cd.gsc b/Multiplayer Factions/faction_cd_mp/mpbody/class_smg_cd.gsc deleted file mode 100644 index ffaa983..0000000 --- a/Multiplayer Factions/faction_cd_mp/mpbody/class_smg_cd.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_cordis_smg_fb" ); - precachemodel( "c_mul_mp_cordis_smg_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team6" ][ "smg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "smg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_cordis_smg_fb" ); - self setviewmodel( "c_mul_mp_cordis_smg_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_cd_mp/mpbody/class_sniper_cd.gsc b/Multiplayer Factions/faction_cd_mp/mpbody/class_sniper_cd.gsc deleted file mode 100644 index 6caaf15..0000000 --- a/Multiplayer Factions/faction_cd_mp/mpbody/class_sniper_cd.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_cordis_sniper_fb" ); - precachemodel( "c_mul_mp_cordis_sniper_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team6" ][ "rifle" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "rifle" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_cordis_sniper_fb" ); - self setviewmodel( "c_mul_mp_cordis_sniper_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_cd_sand_mp/maps/mp/teams/_teamset_cd_sand.gsc b/Multiplayer Factions/faction_cd_sand_mp/maps/mp/teams/_teamset_cd_sand.gsc deleted file mode 100644 index 3572318..0000000 --- a/Multiplayer Factions/faction_cd_sand_mp/maps/mp/teams/_teamset_cd_sand.gsc +++ /dev/null @@ -1,48 +0,0 @@ - -main() -{ - init( "axis" ); - maps/mp/teams/_teamset::customteam_init(); - precache(); -} - -init( team ) -{ - maps/mp/teams/_teamset::init(); - game[ team ] = "cd"; - game[ "defenders" ] = team; - precacheshader( "faction_cd" ); - game[ "entity_headicon_" + team ] = "faction_cd"; - game[ "headicon_" + team ] = "faction_cd"; - level.teamprefix[ team ] = "vox_cd"; - level.teampostfix[ team ] = "cda"; - setdvar( "g_TeamName_" + team, &"MPUI_CD_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_FactionName_" + team, "cd" ); - game[ "strings" ][ team + "_win" ] = &"MP_CD_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_CD_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_CD_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_CD_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_CD_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_CD_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_TER"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_TER"; - game[ "music" ][ "victory_" + team ] = "VICTORY_TER"; - game[ "icons" ][ team ] = "faction_cd"; - game[ "voice" ][ team ] = "vox_cda_"; - setdvar( "scr_" + team, "ussr" ); - level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_axis_3"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_3_carry"; - game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry"; -} - -precache() -{ - mpbody/class_assault_cd_sand::precache(); - mpbody/class_lmg_cd_sand::precache(); - mpbody/class_shotgun_cd_sand::precache(); - mpbody/class_smg_cd_sand::precache(); - mpbody/class_sniper_cd_sand::precache(); -} diff --git a/Multiplayer Factions/faction_cd_sand_mp/mpbody/class_assault_cd_sand.gsc b/Multiplayer Factions/faction_cd_sand_mp/mpbody/class_assault_cd_sand.gsc deleted file mode 100644 index b052612..0000000 --- a/Multiplayer Factions/faction_cd_sand_mp/mpbody/class_assault_cd_sand.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_cordis_assault_ca_fb" ); - precachemodel( "c_mul_mp_cordis_assault_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team6" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_cordis_assault_ca_fb" ); - self setviewmodel( "c_mul_mp_cordis_assault_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_cd_sand_mp/mpbody/class_lmg_cd_sand.gsc b/Multiplayer Factions/faction_cd_sand_mp/mpbody/class_lmg_cd_sand.gsc deleted file mode 100644 index 38cc98c..0000000 --- a/Multiplayer Factions/faction_cd_sand_mp/mpbody/class_lmg_cd_sand.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_cordis_lmg_ca_fb" ); - precachemodel( "c_mul_mp_cordis_lmg_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team6" ][ "mg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "mg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_cordis_lmg_ca_fb" ); - self setviewmodel( "c_mul_mp_cordis_lmg_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_cd_sand_mp/mpbody/class_shotgun_cd_sand.gsc b/Multiplayer Factions/faction_cd_sand_mp/mpbody/class_shotgun_cd_sand.gsc deleted file mode 100644 index 42bc41e..0000000 --- a/Multiplayer Factions/faction_cd_sand_mp/mpbody/class_shotgun_cd_sand.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_cordis_shotgun_ca_fb" ); - precachemodel( "c_mul_mp_cordis_shotgun_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team6" ][ "spread" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "spread" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_cordis_shotgun_ca_fb" ); - self setviewmodel( "c_mul_mp_cordis_shotgun_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_cd_sand_mp/mpbody/class_smg_cd_sand.gsc b/Multiplayer Factions/faction_cd_sand_mp/mpbody/class_smg_cd_sand.gsc deleted file mode 100644 index e5e08d8..0000000 --- a/Multiplayer Factions/faction_cd_sand_mp/mpbody/class_smg_cd_sand.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_cordis_smg_ca_fb" ); - precachemodel( "c_mul_mp_cordis_smg_ca_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team6" ][ "smg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "smg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_cordis_smg_ca_fb" ); - self setviewmodel( "c_mul_mp_cordis_smg_ca_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_cd_sand_mp/mpbody/class_sniper_cd_sand.gsc b/Multiplayer Factions/faction_cd_sand_mp/mpbody/class_sniper_cd_sand.gsc deleted file mode 100644 index ac2503c..0000000 --- a/Multiplayer Factions/faction_cd_sand_mp/mpbody/class_sniper_cd_sand.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_cordis_sniper_ca_fb" ); - precachemodel( "c_mul_mp_cordis_sniper_ca_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team6" ][ "rifle" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "rifle" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_cordis_sniper_ca_fb" ); - self setviewmodel( "c_mul_mp_cordis_sniper_ca_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_fbi_mp/maps/mp/teams/_teamset_fbi.gsc b/Multiplayer Factions/faction_fbi_mp/maps/mp/teams/_teamset_fbi.gsc deleted file mode 100644 index 828eafb..0000000 --- a/Multiplayer Factions/faction_fbi_mp/maps/mp/teams/_teamset_fbi.gsc +++ /dev/null @@ -1,48 +0,0 @@ - -main() -{ - init( "allies" ); - maps/mp/teams/_teamset::customteam_init(); - precache(); -} - -init( team ) -{ - maps/mp/teams/_teamset::init(); - game[ team ] = "fbi"; - game[ "attackers" ] = team; - precacheshader( "faction_fbi" ); - game[ "entity_headicon_" + team ] = "faction_fbi"; - game[ "headicon_" + team ] = "faction_fbi"; - level.teamprefix[ team ] = "vox_hr"; - level.teampostfix[ team ] = "hrt"; - setdvar( "g_TeamName_" + team, &"MPUI_FBI_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "usa_fbi" ); - game[ "strings" ][ team + "_win" ] = &"MP_FBI_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_FBI_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_FBI_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_FBI_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_FBI_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_FBI_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_FBI"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_FBI"; - game[ "music" ][ "victory_" + team ] = "VICTORY_FBI"; - game[ "icons" ][ team ] = "faction_fbi"; - game[ "voice" ][ team ] = "vox_fbi_"; - setdvar( "scr_" + team, "marines" ); - level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_allies_2"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_2_carry"; - game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry"; -} - -precache() -{ - mpbody/class_assault_usa_fbi::precache(); - mpbody/class_lmg_usa_fbi::precache(); - mpbody/class_shotgun_usa_fbi::precache(); - mpbody/class_smg_usa_fbi::precache(); - mpbody/class_sniper_usa_fbi::precache(); -} diff --git a/Multiplayer Factions/faction_fbi_mp/mpbody/class_assault_usa_fbi.gsc b/Multiplayer Factions/faction_fbi_mp/mpbody/class_assault_usa_fbi.gsc deleted file mode 100644 index e397e6f..0000000 --- a/Multiplayer Factions/faction_fbi_mp/mpbody/class_assault_usa_fbi.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_fbi_assault_fb" ); - precachemodel( "c_usa_mp_fbi_longsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team3" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_fbi_assault_fb" ); - self setviewmodel( "c_usa_mp_fbi_longsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_fbi_mp/mpbody/class_lmg_usa_fbi.gsc b/Multiplayer Factions/faction_fbi_mp/mpbody/class_lmg_usa_fbi.gsc deleted file mode 100644 index 1941df6..0000000 --- a/Multiplayer Factions/faction_fbi_mp/mpbody/class_lmg_usa_fbi.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_fbi_lmg_fb" ); - precachemodel( "c_usa_mp_fbi_longsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team3" ][ "mg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "mg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_fbi_lmg_fb" ); - self setviewmodel( "c_usa_mp_fbi_longsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_fbi_mp/mpbody/class_shotgun_usa_fbi.gsc b/Multiplayer Factions/faction_fbi_mp/mpbody/class_shotgun_usa_fbi.gsc deleted file mode 100644 index 44d06fd..0000000 --- a/Multiplayer Factions/faction_fbi_mp/mpbody/class_shotgun_usa_fbi.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_fbi_shotgun_fb" ); - precachemodel( "c_usa_mp_fbi_longsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team3" ][ "spread" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "spread" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_fbi_shotgun_fb" ); - self setviewmodel( "c_usa_mp_fbi_longsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_fbi_mp/mpbody/class_smg_usa_fbi.gsc b/Multiplayer Factions/faction_fbi_mp/mpbody/class_smg_usa_fbi.gsc deleted file mode 100644 index 7f75ce2..0000000 --- a/Multiplayer Factions/faction_fbi_mp/mpbody/class_smg_usa_fbi.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_fbi_smg_fb" ); - precachemodel( "c_usa_mp_fbi_shortsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team3" ][ "smg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "smg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_fbi_smg_fb" ); - self setviewmodel( "c_usa_mp_fbi_shortsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_fbi_mp/mpbody/class_sniper_usa_fbi.gsc b/Multiplayer Factions/faction_fbi_mp/mpbody/class_sniper_usa_fbi.gsc deleted file mode 100644 index 42b3557..0000000 --- a/Multiplayer Factions/faction_fbi_mp/mpbody/class_sniper_usa_fbi.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_fbi_sniper_fb" ); - precachemodel( "c_usa_mp_fbi_longsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team3" ][ "rifle" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "rifle" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_fbi_sniper_fb" ); - self setviewmodel( "c_usa_mp_fbi_longsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_isa_mp/maps/mp/teams/_teamset_isa.gsc b/Multiplayer Factions/faction_isa_mp/maps/mp/teams/_teamset_isa.gsc deleted file mode 100644 index 19f6895..0000000 --- a/Multiplayer Factions/faction_isa_mp/maps/mp/teams/_teamset_isa.gsc +++ /dev/null @@ -1,48 +0,0 @@ - -main() -{ - init( "allies" ); - maps/mp/teams/_teamset::customteam_init(); - precache(); -} - -init( team ) -{ - maps/mp/teams/_teamset::init(); - game[ team ] = "isa"; - game[ "attackers" ] = team; - precacheshader( "faction_isa" ); - game[ "entity_headicon_" + team ] = "faction_isa"; - game[ "headicon_" + team ] = "faction_isa"; - level.teamprefix[ team ] = "vox_is"; - level.teampostfix[ team ] = "isa"; - setdvar( "g_TeamName_" + team, &"MPUI_ISA_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "isa" ); - game[ "strings" ][ team + "_win" ] = &"MP_ISA_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_ISA_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_ISA_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_ISA_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_ISA_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_ISA_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_CIA"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_CIA"; - game[ "music" ][ "victory_" + team ] = "VICTORY_CIA"; - game[ "icons" ][ team ] = "faction_isa"; - game[ "voice" ][ team ] = "vox_isa_"; - setdvar( "scr_" + team, "marines" ); - level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_allies_3"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_3_carry"; - game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry"; -} - -precache() -{ - mpbody/class_assault_isa::precache(); - mpbody/class_lmg_isa::precache(); - mpbody/class_shotgun_isa::precache(); - mpbody/class_smg_isa::precache(); - mpbody/class_sniper_isa::precache(); -} diff --git a/Multiplayer Factions/faction_isa_mp/mpbody/class_assault_isa.gsc b/Multiplayer Factions/faction_isa_mp/mpbody/class_assault_isa.gsc deleted file mode 100644 index 9db8fa3..0000000 --- a/Multiplayer Factions/faction_isa_mp/mpbody/class_assault_isa.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_isa_assault_fb" ); - precachemodel( "c_usa_mp_isa_assault_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team5" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_isa_assault_fb" ); - self setviewmodel( "c_usa_mp_isa_assault_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_isa_mp/mpbody/class_lmg_isa.gsc b/Multiplayer Factions/faction_isa_mp/mpbody/class_lmg_isa.gsc deleted file mode 100644 index 35d0774..0000000 --- a/Multiplayer Factions/faction_isa_mp/mpbody/class_lmg_isa.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_isa_lmg_fb" ); - precachemodel( "c_usa_mp_isa_lmg_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team5" ][ "mg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "mg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_isa_lmg_fb" ); - self setviewmodel( "c_usa_mp_isa_lmg_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_isa_mp/mpbody/class_shotgun_isa.gsc b/Multiplayer Factions/faction_isa_mp/mpbody/class_shotgun_isa.gsc deleted file mode 100644 index 3f99d0c..0000000 --- a/Multiplayer Factions/faction_isa_mp/mpbody/class_shotgun_isa.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_isa_shotgun_fb" ); - precachemodel( "c_usa_mp_isa_shotgun_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team5" ][ "spread" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "spread" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_isa_shotgun_fb" ); - self setviewmodel( "c_usa_mp_isa_shotgun_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_isa_mp/mpbody/class_smg_isa.gsc b/Multiplayer Factions/faction_isa_mp/mpbody/class_smg_isa.gsc deleted file mode 100644 index 3435902..0000000 --- a/Multiplayer Factions/faction_isa_mp/mpbody/class_smg_isa.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_isa_smg_fb" ); - precachemodel( "c_usa_mp_isa_smg_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team5" ][ "smg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "smg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_isa_smg_fb" ); - self setviewmodel( "c_usa_mp_isa_smg_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_isa_mp/mpbody/class_sniper_isa.gsc b/Multiplayer Factions/faction_isa_mp/mpbody/class_sniper_isa.gsc deleted file mode 100644 index ff1d64b..0000000 --- a/Multiplayer Factions/faction_isa_mp/mpbody/class_sniper_isa.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_isa_sniper_fb" ); - precachemodel( "c_usa_mp_isa_sniper_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team5" ][ "rifle" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "rifle" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_isa_sniper_fb" ); - self setviewmodel( "c_usa_mp_isa_sniper_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_isa_sand_mp/maps/mp/teams/_teamset_isa_sand.gsc b/Multiplayer Factions/faction_isa_sand_mp/maps/mp/teams/_teamset_isa_sand.gsc deleted file mode 100644 index cacb633..0000000 --- a/Multiplayer Factions/faction_isa_sand_mp/maps/mp/teams/_teamset_isa_sand.gsc +++ /dev/null @@ -1,48 +0,0 @@ - -main() -{ - init( "allies" ); - maps/mp/teams/_teamset::customteam_init(); - precache(); -} - -init( team ) -{ - maps/mp/teams/_teamset::init(); - game[ team ] = "isa"; - game[ "attackers" ] = team; - precacheshader( "faction_isa" ); - game[ "entity_headicon_" + team ] = "faction_isa"; - game[ "headicon_" + team ] = "faction_isa"; - level.teamprefix[ team ] = "vox_is"; - level.teampostfix[ team ] = "isa"; - setdvar( "g_TeamName_" + team, &"MPUI_ISA_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "isa" ); - game[ "strings" ][ team + "_win" ] = &"MP_ISA_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_ISA_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_ISA_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_ISA_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_ISA_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_ISA_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_CIA"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_CIA"; - game[ "music" ][ "victory_" + team ] = "VICTORY_CIA"; - game[ "icons" ][ team ] = "faction_isa"; - game[ "voice" ][ team ] = "vox_isa_"; - setdvar( "scr_" + team, "marines" ); - level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_allies_3"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_3_carry"; - game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry"; -} - -precache() -{ - mpbody/class_assault_isa_sand::precache(); - mpbody/class_lmg_isa_sand::precache(); - mpbody/class_shotgun_isa_sand::precache(); - mpbody/class_smg_isa_sand::precache(); - mpbody/class_sniper_isa_sand::precache(); -} diff --git a/Multiplayer Factions/faction_isa_sand_mp/mpbody/class_assault_isa_sand.gsc b/Multiplayer Factions/faction_isa_sand_mp/mpbody/class_assault_isa_sand.gsc deleted file mode 100644 index 3be0b2f..0000000 --- a/Multiplayer Factions/faction_isa_sand_mp/mpbody/class_assault_isa_sand.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_isa_assault_ca_fb" ); - precachemodel( "c_usa_mp_isa_assault_ca_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team5" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_isa_assault_ca_fb" ); - self setviewmodel( "c_usa_mp_isa_assault_ca_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_isa_sand_mp/mpbody/class_lmg_isa_sand.gsc b/Multiplayer Factions/faction_isa_sand_mp/mpbody/class_lmg_isa_sand.gsc deleted file mode 100644 index d789f2b..0000000 --- a/Multiplayer Factions/faction_isa_sand_mp/mpbody/class_lmg_isa_sand.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_isa_lmg_ca_fb" ); - precachemodel( "c_usa_mp_isa_lmg_ca_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team5" ][ "mg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "mg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_isa_lmg_ca_fb" ); - self setviewmodel( "c_usa_mp_isa_lmg_ca_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_isa_sand_mp/mpbody/class_shotgun_isa_sand.gsc b/Multiplayer Factions/faction_isa_sand_mp/mpbody/class_shotgun_isa_sand.gsc deleted file mode 100644 index f4ec45c..0000000 --- a/Multiplayer Factions/faction_isa_sand_mp/mpbody/class_shotgun_isa_sand.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_isa_shotgun_ca_fb" ); - precachemodel( "c_usa_mp_isa_shotgun_ca_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team5" ][ "spread" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "spread" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_isa_shotgun_ca_fb" ); - self setviewmodel( "c_usa_mp_isa_shotgun_ca_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_isa_sand_mp/mpbody/class_smg_isa_sand.gsc b/Multiplayer Factions/faction_isa_sand_mp/mpbody/class_smg_isa_sand.gsc deleted file mode 100644 index 51ff032..0000000 --- a/Multiplayer Factions/faction_isa_sand_mp/mpbody/class_smg_isa_sand.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_isa_smg_ca_fb" ); - precachemodel( "c_usa_mp_isa_smg_ca_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team5" ][ "smg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "smg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_isa_smg_ca_fb" ); - self setviewmodel( "c_usa_mp_isa_smg_ca_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_isa_sand_mp/mpbody/class_sniper_isa_sand.gsc b/Multiplayer Factions/faction_isa_sand_mp/mpbody/class_sniper_isa_sand.gsc deleted file mode 100644 index 390993d..0000000 --- a/Multiplayer Factions/faction_isa_sand_mp/mpbody/class_sniper_isa_sand.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_isa_sniper_ca_fb" ); - precachemodel( "c_usa_mp_isa_sniper_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team5" ][ "rifle" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "rifle" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_isa_sniper_ca_fb" ); - self setviewmodel( "c_usa_mp_isa_sniper_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_mp/maps/mp/teams/_teamset_multiteam.gsc b/Multiplayer Factions/faction_multiteam_mp/maps/mp/teams/_teamset_multiteam.gsc deleted file mode 100644 index ca9f41a..0000000 --- a/Multiplayer Factions/faction_multiteam_mp/maps/mp/teams/_teamset_multiteam.gsc +++ /dev/null @@ -1,211 +0,0 @@ -#include maps/mp/teams/_teamset; - -main() -{ - maps/mp/teams/_teamset::init(); - init_seals( "allies" ); - init_pla( "axis" ); - init_fbi( "team3" ); - init_pmc( "team4" ); - init_isa( "team5" ); - init_cd( "team6" ); - init_seals( "team7" ); - init_seals( "team8" ); - precache(); -} - -precache() -{ - mpbody/class_assault_usa_seals::precache(); - mpbody/class_assault_usa_fbi::precache(); - mpbody/class_assault_rus_pmc::precache(); - mpbody/class_assault_chn_pla::precache(); - mpbody/class_assault_isa::precache(); - mpbody/class_assault_cd::precache(); -} - -init_seals( team ) -{ - game[ team ] = "seals"; - game[ "attackers" ] = team; - precacheshader( "faction_seals" ); - game[ "entity_headicon_" + team ] = "faction_seals"; - game[ "headicon_" + team ] = "faction_seals"; - level.teamprefix[ team ] = "vox_st"; - level.teampostfix[ team ] = "st6"; - setdvar( "g_TeamName_" + team, &"MPUI_SEALS_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "usa_seals" ); - game[ "strings" ][ team + "_win" ] = &"MP_SEALS_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_SEALS_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_SEALS_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_SEALS_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_SEALS_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_SEALS_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_ST6"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_ST6"; - game[ "music" ][ "victory_" + team ] = "VICTORY_ST6"; - game[ "icons" ][ team ] = "faction_seals"; - game[ "voice" ][ team ] = "vox_st6_"; - setdvar( "scr_" + team, "marines" ); - level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_allies_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry"; -} - -init_pmc( team ) -{ - game[ team ] = "pmc"; - game[ "defenders" ] = team; - precacheshader( "faction_pmc" ); - game[ "entity_headicon_" + team ] = "faction_pmc"; - game[ "headicon_" + team ] = "faction_pmc"; - level.teamprefix[ team ] = "vox_pm"; - level.teampostfix[ team ] = "pmc"; - setdvar( "g_TeamName_" + team, &"MPUI_PMC_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_FactionName_" + team, "rus_pmc" ); - game[ "strings" ][ team + "_win" ] = &"MP_PMC_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_PMC_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_PMC_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_PMC_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_PMC_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_PMC_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_PMC"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_PMC"; - game[ "music" ][ "victory_" + team ] = "VICTORY_PMC"; - game[ "icons" ][ team ] = "faction_pmc"; - game[ "voice" ][ team ] = "vox_pmc_"; - setdvar( "scr_" + team, "ussr" ); - level.heli_vo[ team ][ "hit" ] = "vox_rus_0_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_axis_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry"; -} - -init_pla( team ) -{ - game[ team ] = "pla"; - game[ "defenders" ] = team; - precacheshader( "faction_pla" ); - game[ "entity_headicon_" + team ] = "faction_pla"; - game[ "headicon_" + team ] = "faction_pla"; - level.teamprefix[ team ] = "vox_ch"; - level.teampostfix[ team ] = "pla"; - setdvar( "g_TeamName_" + team, &"MPUI_PLA_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_FactionName_" + team, "chn_pla" ); - game[ "strings" ][ team + "_win" ] = &"MP_PLA_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_PLA_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_PLA_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_PLA_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_PLA_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_PLA_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_PLA"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_PLA"; - game[ "music" ][ "victory_" + team ] = "VICTORY_PLA"; - game[ "icons" ][ team ] = "faction_pla"; - game[ "voice" ][ team ] = "vox_pla_"; - setdvar( "scr_" + team, "ussr" ); - level.heli_vo[ team ][ "hit" ] = "vox_rus_0_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_axis_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry"; -} - -init_fbi( team ) -{ - game[ team ] = "fbi"; - game[ "attackers" ] = team; - precacheshader( "faction_fbi" ); - game[ "entity_headicon_" + team ] = "faction_fbi"; - game[ "headicon_" + team ] = "faction_fbi"; - level.teamprefix[ team ] = "vox_fbi"; - level.teampostfix[ team ] = "fbi"; - setdvar( "g_TeamName_" + team, &"MPUI_FBI_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "usa_fbi" ); - game[ "strings" ][ team + "_win" ] = &"MP_FBI_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_FBI_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_FBI_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_FBI_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_FBI_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_FBI_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_FBI"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_FBI"; - game[ "music" ][ "victory_" + team ] = "VICTORY_FBI"; - game[ "icons" ][ team ] = "faction_fbi"; - game[ "voice" ][ team ] = "vox_fbi_"; - setdvar( "scr_" + team, "marines" ); - level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_allies_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry"; -} - -init_isa( team ) -{ - game[ team ] = "isa"; - game[ "attackers" ] = team; - precacheshader( "faction_isa" ); - game[ "entity_headicon_" + team ] = "faction_isa"; - game[ "headicon_" + team ] = "faction_isa"; - level.teamprefix[ team ] = "vox_is"; - level.teampostfix[ team ] = "isa"; - setdvar( "g_TeamName_" + team, &"MPUI_ISA_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "isa" ); - game[ "strings" ][ team + "_win" ] = &"MP_ISA_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_ISA_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_ISA_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_ISA_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_ISA_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_ISA_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_CIA"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_CIA"; - game[ "music" ][ "victory_" + team ] = "VICTORY_CIA"; - game[ "icons" ][ team ] = "faction_isa"; - game[ "voice" ][ team ] = "vox_isa_"; - setdvar( "scr_" + team, "marines" ); - level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_allies_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry"; -} - -init_cd( team ) -{ - game[ team ] = "cd"; - game[ "attackers" ] = team; - precacheshader( "faction_cd" ); - game[ "entity_headicon_" + team ] = "faction_cd"; - game[ "headicon_" + team ] = "faction_cd"; - level.teamprefix[ team ] = "vox_cd"; - level.teampostfix[ team ] = "cda"; - setdvar( "g_TeamName_" + team, &"MPUI_CD_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "cd" ); - game[ "strings" ][ team + "_win" ] = &"MP_CD_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_CD_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_CD_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_CD_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_CD_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_CD_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_TER"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_TER"; - game[ "music" ][ "victory_" + team ] = "VICTORY_TER"; - game[ "icons" ][ team ] = "faction_cd"; - game[ "voice" ][ team ] = "vox_cda_"; - setdvar( "scr_" + team, "ussr" ); - level.heli_vo[ team ][ "hit" ] = "vox_cd2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_axis_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry"; -} diff --git a/Multiplayer Factions/faction_multiteam_mp/mpbody/class_assault_cd.gsc b/Multiplayer Factions/faction_multiteam_mp/mpbody/class_assault_cd.gsc deleted file mode 100644 index 18a19d7..0000000 --- a/Multiplayer Factions/faction_multiteam_mp/mpbody/class_assault_cd.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_cordis_assault_fb" ); - precachemodel( "c_mul_mp_cordis_assault_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team6" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_cordis_assault_fb" ); - self setviewmodel( "c_mul_mp_cordis_assault_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_mp/mpbody/class_assault_chn_pla.gsc b/Multiplayer Factions/faction_multiteam_mp/mpbody/class_assault_chn_pla.gsc deleted file mode 100644 index e42afea..0000000 --- a/Multiplayer Factions/faction_multiteam_mp/mpbody/class_assault_chn_pla.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_chn_mp_pla_assault_fb" ); - precachemodel( "c_chn_mp_pla_longsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_chn_mp_pla_assault_fb" ); - self setviewmodel( "c_chn_mp_pla_longsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_mp/mpbody/class_assault_isa.gsc b/Multiplayer Factions/faction_multiteam_mp/mpbody/class_assault_isa.gsc deleted file mode 100644 index 9db8fa3..0000000 --- a/Multiplayer Factions/faction_multiteam_mp/mpbody/class_assault_isa.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_isa_assault_fb" ); - precachemodel( "c_usa_mp_isa_assault_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team5" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_isa_assault_fb" ); - self setviewmodel( "c_usa_mp_isa_assault_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_mp/mpbody/class_assault_rus_pmc.gsc b/Multiplayer Factions/faction_multiteam_mp/mpbody/class_assault_rus_pmc.gsc deleted file mode 100644 index a702e9d..0000000 --- a/Multiplayer Factions/faction_multiteam_mp/mpbody/class_assault_rus_pmc.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_pmc_assault_fb" ); - precachemodel( "c_mul_mp_pmc_longsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team4" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_pmc_assault_fb" ); - self setviewmodel( "c_mul_mp_pmc_longsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_mp/mpbody/class_assault_usa_fbi.gsc b/Multiplayer Factions/faction_multiteam_mp/mpbody/class_assault_usa_fbi.gsc deleted file mode 100644 index e397e6f..0000000 --- a/Multiplayer Factions/faction_multiteam_mp/mpbody/class_assault_usa_fbi.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_fbi_assault_fb" ); - precachemodel( "c_usa_mp_fbi_longsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team3" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_fbi_assault_fb" ); - self setviewmodel( "c_usa_mp_fbi_longsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_mp/mpbody/class_assault_usa_seals.gsc b/Multiplayer Factions/faction_multiteam_mp/mpbody/class_assault_usa_seals.gsc deleted file mode 100644 index 89219e7..0000000 --- a/Multiplayer Factions/faction_multiteam_mp/mpbody/class_assault_usa_seals.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_seal6_assault_fb" ); - precachemodel( "c_usa_mp_seal6_longsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_seal6_assault_fb" ); - self setviewmodel( "c_usa_mp_seal6_longsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_sand_mp/maps/mp/teams/_teamset_multiteam_sand.gsc b/Multiplayer Factions/faction_multiteam_sand_mp/maps/mp/teams/_teamset_multiteam_sand.gsc deleted file mode 100644 index 4166ae6..0000000 --- a/Multiplayer Factions/faction_multiteam_sand_mp/maps/mp/teams/_teamset_multiteam_sand.gsc +++ /dev/null @@ -1,211 +0,0 @@ -#include maps/mp/teams/_teamset; - -main() -{ - maps/mp/teams/_teamset::init(); - init_seals( "allies" ); - init_pla( "axis" ); - init_fbi( "team3" ); - init_pmc( "team4" ); - init_isa( "team5" ); - init_cd( "team6" ); - init_seals( "team7" ); - init_seals( "team8" ); - precache(); -} - -precache() -{ - mpbody/class_assault_usa_seals_sand::precache(); - mpbody/class_assault_usa_fbi_sand::precache(); - mpbody/class_assault_rus_pmc_sand::precache(); - mpbody/class_assault_chn_pla_sand::precache(); - mpbody/class_assault_isa_sand::precache(); - mpbody/class_assault_cd_sand::precache(); -} - -init_seals( team ) -{ - game[ team ] = "seals"; - game[ "attackers" ] = team; - precacheshader( "faction_seals" ); - game[ "entity_headicon_" + team ] = "faction_seals"; - game[ "headicon_" + team ] = "faction_seals"; - level.teamprefix[ team ] = "vox_st"; - level.teampostfix[ team ] = "st6"; - setdvar( "g_TeamName_" + team, &"MPUI_SEALS_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "usa_seals" ); - game[ "strings" ][ team + "_win" ] = &"MP_SEALS_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_SEALS_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_SEALS_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_SEALS_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_SEALS_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_SEALS_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_ST6"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_ST6"; - game[ "music" ][ "victory_" + team ] = "VICTORY_ST6"; - game[ "icons" ][ team ] = "faction_seals"; - game[ "voice" ][ team ] = "vox_st6_"; - setdvar( "scr_" + team, "marines" ); - level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_allies_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry"; -} - -init_pmc( team ) -{ - game[ team ] = "pmc"; - game[ "defenders" ] = team; - precacheshader( "faction_pmc" ); - game[ "entity_headicon_" + team ] = "faction_pmc"; - game[ "headicon_" + team ] = "faction_pmc"; - level.teamprefix[ team ] = "vox_pm"; - level.teampostfix[ team ] = "pmc"; - setdvar( "g_TeamName_" + team, &"MPUI_PMC_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_FactionName_" + team, "rus_pmc" ); - game[ "strings" ][ team + "_win" ] = &"MP_PMC_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_PMC_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_PMC_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_PMC_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_PMC_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_PMC_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_PMC"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_PMC"; - game[ "music" ][ "victory_" + team ] = "VICTORY_PMC"; - game[ "icons" ][ team ] = "faction_pmc"; - game[ "voice" ][ team ] = "vox_pmc_"; - setdvar( "scr_" + team, "ussr" ); - level.heli_vo[ team ][ "hit" ] = "vox_rus_0_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_axis_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry"; -} - -init_pla( team ) -{ - game[ team ] = "pla"; - game[ "defenders" ] = team; - precacheshader( "faction_pla" ); - game[ "entity_headicon_" + team ] = "faction_pla"; - game[ "headicon_" + team ] = "faction_pla"; - level.teamprefix[ team ] = "vox_ch"; - level.teampostfix[ team ] = "pla"; - setdvar( "g_TeamName_" + team, &"MPUI_PLA_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_FactionName_" + team, "chn_pla" ); - game[ "strings" ][ team + "_win" ] = &"MP_PLA_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_PLA_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_PLA_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_PLA_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_PLA_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_PLA_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_PLA"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_PLA"; - game[ "music" ][ "victory_" + team ] = "VICTORY_PLA"; - game[ "icons" ][ team ] = "faction_pla"; - game[ "voice" ][ team ] = "vox_pla_"; - setdvar( "scr_" + team, "ussr" ); - level.heli_vo[ team ][ "hit" ] = "vox_rus_0_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_axis_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry"; -} - -init_fbi( team ) -{ - game[ team ] = "fbi"; - game[ "attackers" ] = team; - precacheshader( "faction_fbi" ); - game[ "entity_headicon_" + team ] = "faction_fbi"; - game[ "headicon_" + team ] = "faction_fbi"; - level.teamprefix[ team ] = "vox_hr"; - level.teampostfix[ team ] = "hrt"; - setdvar( "g_TeamName_" + team, &"MPUI_FBI_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "usa_fbi" ); - game[ "strings" ][ team + "_win" ] = &"MP_FBI_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_FBI_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_FBI_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_FBI_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_FBI_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_FBI_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_FBI"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_FBI"; - game[ "music" ][ "victory_" + team ] = "VICTORY_FBI"; - game[ "icons" ][ team ] = "faction_fbi"; - game[ "voice" ][ team ] = "vox_fbi_"; - setdvar( "scr_" + team, "marines" ); - level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_allies_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry"; -} - -init_isa( team ) -{ - game[ team ] = "isa"; - game[ "attackers" ] = team; - precacheshader( "faction_isa" ); - game[ "entity_headicon_" + team ] = "faction_isa"; - game[ "headicon_" + team ] = "faction_isa"; - level.teamprefix[ team ] = "vox_is"; - level.teampostfix[ team ] = "isa"; - setdvar( "g_TeamName_" + team, &"MPUI_ISA_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "isa" ); - game[ "strings" ][ team + "_win" ] = &"MP_ISA_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_ISA_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_ISA_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_ISA_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_ISA_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_ISA_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_CIA"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_CIA"; - game[ "music" ][ "victory_" + team ] = "VICTORY_CIA"; - game[ "icons" ][ team ] = "faction_isa"; - game[ "voice" ][ team ] = "vox_isa_"; - setdvar( "scr_" + team, "marines" ); - level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_allies_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry"; -} - -init_cd( team ) -{ - game[ team ] = "cd"; - game[ "attackers" ] = team; - precacheshader( "faction_cd" ); - game[ "entity_headicon_" + team ] = "faction_cd"; - game[ "headicon_" + team ] = "faction_cd"; - level.teamprefix[ team ] = "vox_cd"; - level.teampostfix[ team ] = "cda"; - setdvar( "g_TeamName_" + team, &"MPUI_CD_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "cd" ); - game[ "strings" ][ team + "_win" ] = &"MP_CD_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_CD_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_CD_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_CD_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_CD_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_CD_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_TER"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_TER"; - game[ "music" ][ "victory_" + team ] = "VICTORY_TER"; - game[ "icons" ][ team ] = "faction_cd"; - game[ "voice" ][ team ] = "vox_cda_"; - setdvar( "scr_" + team, "ussr" ); - level.heli_vo[ team ][ "hit" ] = "vox_cd2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_axis_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry"; -} diff --git a/Multiplayer Factions/faction_multiteam_sand_mp/mpbody/class_assault_cd_sand.gsc b/Multiplayer Factions/faction_multiteam_sand_mp/mpbody/class_assault_cd_sand.gsc deleted file mode 100644 index b052612..0000000 --- a/Multiplayer Factions/faction_multiteam_sand_mp/mpbody/class_assault_cd_sand.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_cordis_assault_ca_fb" ); - precachemodel( "c_mul_mp_cordis_assault_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team6" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_cordis_assault_ca_fb" ); - self setviewmodel( "c_mul_mp_cordis_assault_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_sand_mp/mpbody/class_assault_chn_pla_sand.gsc b/Multiplayer Factions/faction_multiteam_sand_mp/mpbody/class_assault_chn_pla_sand.gsc deleted file mode 100644 index e42afea..0000000 --- a/Multiplayer Factions/faction_multiteam_sand_mp/mpbody/class_assault_chn_pla_sand.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_chn_mp_pla_assault_fb" ); - precachemodel( "c_chn_mp_pla_longsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_chn_mp_pla_assault_fb" ); - self setviewmodel( "c_chn_mp_pla_longsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_sand_mp/mpbody/class_assault_isa_sand.gsc b/Multiplayer Factions/faction_multiteam_sand_mp/mpbody/class_assault_isa_sand.gsc deleted file mode 100644 index 3be0b2f..0000000 --- a/Multiplayer Factions/faction_multiteam_sand_mp/mpbody/class_assault_isa_sand.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_isa_assault_ca_fb" ); - precachemodel( "c_usa_mp_isa_assault_ca_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team5" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_isa_assault_ca_fb" ); - self setviewmodel( "c_usa_mp_isa_assault_ca_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_sand_mp/mpbody/class_assault_rus_pmc_sand.gsc b/Multiplayer Factions/faction_multiteam_sand_mp/mpbody/class_assault_rus_pmc_sand.gsc deleted file mode 100644 index 7810f7f..0000000 --- a/Multiplayer Factions/faction_multiteam_sand_mp/mpbody/class_assault_rus_pmc_sand.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_pmc_assault_fb" ); - precachemodel( "c_mul_mp_pmc_assault_snw_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team4" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_pmc_assault_fb" ); - self setviewmodel( "c_mul_mp_pmc_assault_snw_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_sand_mp/mpbody/class_assault_usa_fbi_sand.gsc b/Multiplayer Factions/faction_multiteam_sand_mp/mpbody/class_assault_usa_fbi_sand.gsc deleted file mode 100644 index e397e6f..0000000 --- a/Multiplayer Factions/faction_multiteam_sand_mp/mpbody/class_assault_usa_fbi_sand.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_fbi_assault_fb" ); - precachemodel( "c_usa_mp_fbi_longsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team3" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_fbi_assault_fb" ); - self setviewmodel( "c_usa_mp_fbi_longsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_sand_mp/mpbody/class_assault_usa_seals_sand.gsc b/Multiplayer Factions/faction_multiteam_sand_mp/mpbody/class_assault_usa_seals_sand.gsc deleted file mode 100644 index 89219e7..0000000 --- a/Multiplayer Factions/faction_multiteam_sand_mp/mpbody/class_assault_usa_seals_sand.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_seal6_assault_fb" ); - precachemodel( "c_usa_mp_seal6_longsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_seal6_assault_fb" ); - self setviewmodel( "c_usa_mp_seal6_longsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_snow_mp/maps/mp/teams/_teamset_multiteam_snow.gsc b/Multiplayer Factions/faction_multiteam_snow_mp/maps/mp/teams/_teamset_multiteam_snow.gsc deleted file mode 100644 index 8262050..0000000 --- a/Multiplayer Factions/faction_multiteam_snow_mp/maps/mp/teams/_teamset_multiteam_snow.gsc +++ /dev/null @@ -1,211 +0,0 @@ -#include maps/mp/teams/_teamset; - -main() -{ - maps/mp/teams/_teamset::init(); - init_seals( "allies" ); - init_pla( "axis" ); - init_fbi( "team3" ); - init_pmc( "team4" ); - init_isa( "team5" ); - init_cd( "team6" ); - init_seals( "team7" ); - init_seals( "team8" ); - precache(); -} - -precache() -{ - mpbody/class_assault_usa_seals_snow::precache(); - mpbody/class_assault_usa_fbi_snow::precache(); - mpbody/class_assault_rus_pmc_snow::precache(); - mpbody/class_assault_chn_pla_snow::precache(); - mpbody/class_assault_isa_snow::precache(); - mpbody/class_assault_cd_snow::precache(); -} - -init_seals( team ) -{ - game[ team ] = "seals"; - game[ "attackers" ] = team; - precacheshader( "faction_seals" ); - game[ "entity_headicon_" + team ] = "faction_seals"; - game[ "headicon_" + team ] = "faction_seals"; - level.teamprefix[ team ] = "vox_st"; - level.teampostfix[ team ] = "st6"; - setdvar( "g_TeamName_" + team, &"MPUI_SEALS_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "usa_seals" ); - game[ "strings" ][ team + "_win" ] = &"MP_SEALS_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_SEALS_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_SEALS_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_SEALS_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_SEALS_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_SEALS_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_ST6"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_ST6"; - game[ "music" ][ "victory_" + team ] = "VICTORY_ST6"; - game[ "icons" ][ team ] = "faction_seals"; - game[ "voice" ][ team ] = "vox_st6_"; - setdvar( "scr_" + team, "marines" ); - level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_allies_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry"; -} - -init_pmc( team ) -{ - game[ team ] = "pmc"; - game[ "defenders" ] = team; - precacheshader( "faction_pmc" ); - game[ "entity_headicon_" + team ] = "faction_pmc"; - game[ "headicon_" + team ] = "faction_pmc"; - level.teamprefix[ team ] = "vox_pm"; - level.teampostfix[ team ] = "pmc"; - setdvar( "g_TeamName_" + team, &"MPUI_PMC_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_FactionName_" + team, "rus_pmc" ); - game[ "strings" ][ team + "_win" ] = &"MP_PMC_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_PMC_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_PMC_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_PMC_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_PMC_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_PMC_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_PMC"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_PMC"; - game[ "music" ][ "victory_" + team ] = "VICTORY_PMC"; - game[ "icons" ][ team ] = "faction_pmc"; - game[ "voice" ][ team ] = "vox_pmc_"; - setdvar( "scr_" + team, "ussr" ); - level.heli_vo[ team ][ "hit" ] = "vox_rus_0_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_axis_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry"; -} - -init_pla( team ) -{ - game[ team ] = "pla"; - game[ "defenders" ] = team; - precacheshader( "faction_pla" ); - game[ "entity_headicon_" + team ] = "faction_pla"; - game[ "headicon_" + team ] = "faction_pla"; - level.teamprefix[ team ] = "vox_ch"; - level.teampostfix[ team ] = "pla"; - setdvar( "g_TeamName_" + team, &"MPUI_PLA_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_FactionName_" + team, "chn_pla" ); - game[ "strings" ][ team + "_win" ] = &"MP_PLA_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_PLA_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_PLA_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_PLA_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_PLA_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_PLA_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_PLA"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_PLA"; - game[ "music" ][ "victory_" + team ] = "VICTORY_PLA"; - game[ "icons" ][ team ] = "faction_pla"; - game[ "voice" ][ team ] = "vox_pla_"; - setdvar( "scr_" + team, "ussr" ); - level.heli_vo[ team ][ "hit" ] = "vox_rus_0_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_axis_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry"; -} - -init_fbi( team ) -{ - game[ team ] = "fbi"; - game[ "attackers" ] = team; - precacheshader( "faction_fbi" ); - game[ "entity_headicon_" + team ] = "faction_fbi"; - game[ "headicon_" + team ] = "faction_fbi"; - level.teamprefix[ team ] = "vox_hr"; - level.teampostfix[ team ] = "hrt"; - setdvar( "g_TeamName_" + team, &"MPUI_FBI_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "usa_fbi" ); - game[ "strings" ][ team + "_win" ] = &"MP_FBI_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_FBI_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_FBI_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_FBI_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_FBI_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_FBI_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_FBI"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_FBI"; - game[ "music" ][ "victory_" + team ] = "VICTORY_FBI"; - game[ "icons" ][ team ] = "faction_fbi"; - game[ "voice" ][ team ] = "vox_fbi_"; - setdvar( "scr_" + team, "marines" ); - level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_allies_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry"; -} - -init_isa( team ) -{ - game[ team ] = "isa"; - game[ "attackers" ] = team; - precacheshader( "faction_isa" ); - game[ "entity_headicon_" + team ] = "faction_isa"; - game[ "headicon_" + team ] = "faction_isa"; - level.teamprefix[ team ] = "vox_is"; - level.teampostfix[ team ] = "isa"; - setdvar( "g_TeamName_" + team, &"MPUI_ISA_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "isa" ); - game[ "strings" ][ team + "_win" ] = &"MP_ISA_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_ISA_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_ISA_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_ISA_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_ISA_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_ISA_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_CIA"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_CIA"; - game[ "music" ][ "victory_" + team ] = "VICTORY_CIA"; - game[ "icons" ][ team ] = "faction_isa"; - game[ "voice" ][ team ] = "vox_isa_"; - setdvar( "scr_" + team, "marines" ); - level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_allies_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry"; -} - -init_cd( team ) -{ - game[ team ] = "cd"; - game[ "attackers" ] = team; - precacheshader( "faction_cd" ); - game[ "entity_headicon_" + team ] = "faction_cd"; - game[ "headicon_" + team ] = "faction_cd"; - level.teamprefix[ team ] = "vox_cd"; - level.teampostfix[ team ] = "cda"; - setdvar( "g_TeamName_" + team, &"MPUI_CD_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "cd" ); - game[ "strings" ][ team + "_win" ] = &"MP_CD_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_CD_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_CD_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_CD_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_CD_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_CD_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_TER"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_TER"; - game[ "music" ][ "victory_" + team ] = "VICTORY_TER"; - game[ "icons" ][ team ] = "faction_cd"; - game[ "voice" ][ team ] = "vox_cda_"; - setdvar( "scr_" + team, "ussr" ); - level.heli_vo[ team ][ "hit" ] = "vox_cd2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_axis_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry"; -} diff --git a/Multiplayer Factions/faction_multiteam_snow_mp/mpbody/class_assault_cd_snow.gsc b/Multiplayer Factions/faction_multiteam_snow_mp/mpbody/class_assault_cd_snow.gsc deleted file mode 100644 index 0295e25..0000000 --- a/Multiplayer Factions/faction_multiteam_snow_mp/mpbody/class_assault_cd_snow.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_cordis_assault_snw_fb" ); - precachemodel( "c_mul_mp_cordis_assault_snw_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team6" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_cordis_assault_snw_fb" ); - self setviewmodel( "c_mul_mp_cordis_assault_snw_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_snow_mp/mpbody/class_assault_chn_pla_snow.gsc b/Multiplayer Factions/faction_multiteam_snow_mp/mpbody/class_assault_chn_pla_snow.gsc deleted file mode 100644 index 9d79aad..0000000 --- a/Multiplayer Factions/faction_multiteam_snow_mp/mpbody/class_assault_chn_pla_snow.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_chn_mp_pla_assault_snw_fb" ); - precachemodel( "c_chn_mp_pla_assault_snw_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_chn_mp_pla_assault_snw_fb" ); - self setviewmodel( "c_chn_mp_pla_assault_snw_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_snow_mp/mpbody/class_assault_isa_snow.gsc b/Multiplayer Factions/faction_multiteam_snow_mp/mpbody/class_assault_isa_snow.gsc deleted file mode 100644 index a65c923..0000000 --- a/Multiplayer Factions/faction_multiteam_snow_mp/mpbody/class_assault_isa_snow.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_isa_assault_snw_fb" ); - precachemodel( "c_usa_mp_isa_assault_shortsleeve_snw_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team5" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_isa_assault_snw_fb" ); - self setviewmodel( "c_usa_mp_isa_assault_shortsleeve_snw_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_snow_mp/mpbody/class_assault_rus_pmc_snow.gsc b/Multiplayer Factions/faction_multiteam_snow_mp/mpbody/class_assault_rus_pmc_snow.gsc deleted file mode 100644 index 4be9aec..0000000 --- a/Multiplayer Factions/faction_multiteam_snow_mp/mpbody/class_assault_rus_pmc_snow.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_pmc_assault_snw_fb" ); - precachemodel( "c_mul_mp_pmc_assault_snw_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team4" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_pmc_assault_snw_fb" ); - self setviewmodel( "c_mul_mp_pmc_assault_snw_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_snow_mp/mpbody/class_assault_usa_fbi_snow.gsc b/Multiplayer Factions/faction_multiteam_snow_mp/mpbody/class_assault_usa_fbi_snow.gsc deleted file mode 100644 index a847f6e..0000000 --- a/Multiplayer Factions/faction_multiteam_snow_mp/mpbody/class_assault_usa_fbi_snow.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_fbi_assault_snw_fb" ); - precachemodel( "c_usa_mp_fbi_assault_snw_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team3" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_fbi_assault_snw_fb" ); - self setviewmodel( "c_usa_mp_fbi_assault_snw_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_snow_mp/mpbody/class_assault_usa_seals_snow.gsc b/Multiplayer Factions/faction_multiteam_snow_mp/mpbody/class_assault_usa_seals_snow.gsc deleted file mode 100644 index dd0cde5..0000000 --- a/Multiplayer Factions/faction_multiteam_snow_mp/mpbody/class_assault_usa_seals_snow.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_seal6_assault_snw_fb" ); - precachemodel( "c_usa_mp_seal6_assault_snw_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_seal6_assault_snw_fb" ); - self setviewmodel( "c_usa_mp_seal6_assault_snw_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_wet_mp/maps/mp/teams/_teamset_multiteam_wet.gsc b/Multiplayer Factions/faction_multiteam_wet_mp/maps/mp/teams/_teamset_multiteam_wet.gsc deleted file mode 100644 index f274b5b..0000000 --- a/Multiplayer Factions/faction_multiteam_wet_mp/maps/mp/teams/_teamset_multiteam_wet.gsc +++ /dev/null @@ -1,211 +0,0 @@ -#include maps/mp/teams/_teamset; - -main() -{ - maps/mp/teams/_teamset::init(); - init_seals( "allies" ); - init_pla( "axis" ); - init_fbi( "team3" ); - init_pmc( "team4" ); - init_isa( "team5" ); - init_cd( "team6" ); - init_seals( "team7" ); - init_seals( "team8" ); - precache(); -} - -precache() -{ - mpbody/class_assault_usa_seals_wet::precache(); - mpbody/class_assault_usa_fbi_wet::precache(); - mpbody/class_assault_rus_pmc_wet::precache(); - mpbody/class_assault_chn_pla_wet::precache(); - mpbody/class_assault_isa_wet::precache(); - mpbody/class_assault_cd_wet::precache(); -} - -init_seals( team ) -{ - game[ team ] = "seals"; - game[ "attackers" ] = team; - precacheshader( "faction_seals" ); - game[ "entity_headicon_" + team ] = "faction_seals"; - game[ "headicon_" + team ] = "faction_seals"; - level.teamprefix[ team ] = "vox_st"; - level.teampostfix[ team ] = "st6"; - setdvar( "g_TeamName_" + team, &"MPUI_SEALS_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "usa_seals" ); - game[ "strings" ][ team + "_win" ] = &"MP_SEALS_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_SEALS_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_SEALS_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_SEALS_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_SEALS_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_SEALS_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_ST6"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_ST6"; - game[ "music" ][ "victory_" + team ] = "VICTORY_ST6"; - game[ "icons" ][ team ] = "faction_seals"; - game[ "voice" ][ team ] = "vox_st6_"; - setdvar( "scr_" + team, "marines" ); - level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_allies_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry"; -} - -init_pmc( team ) -{ - game[ team ] = "pmc"; - game[ "defenders" ] = team; - precacheshader( "faction_pmc" ); - game[ "entity_headicon_" + team ] = "faction_pmc"; - game[ "headicon_" + team ] = "faction_pmc"; - level.teamprefix[ team ] = "vox_pm"; - level.teampostfix[ team ] = "pmc"; - setdvar( "g_TeamName_" + team, &"MPUI_PMC_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_FactionName_" + team, "rus_pmc" ); - game[ "strings" ][ team + "_win" ] = &"MP_PMC_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_PMC_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_PMC_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_PMC_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_PMC_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_PMC_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_PMC"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_PMC"; - game[ "music" ][ "victory_" + team ] = "VICTORY_PMC"; - game[ "icons" ][ team ] = "faction_pmc"; - game[ "voice" ][ team ] = "vox_pmc_"; - setdvar( "scr_" + team, "ussr" ); - level.heli_vo[ team ][ "hit" ] = "vox_rus_0_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_axis_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry"; -} - -init_pla( team ) -{ - game[ team ] = "pla"; - game[ "defenders" ] = team; - precacheshader( "faction_pla" ); - game[ "entity_headicon_" + team ] = "faction_pla"; - game[ "headicon_" + team ] = "faction_pla"; - level.teamprefix[ team ] = "vox_ch"; - level.teampostfix[ team ] = "pla"; - setdvar( "g_TeamName_" + team, &"MPUI_PLA_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_FactionName_" + team, "chn_pla" ); - game[ "strings" ][ team + "_win" ] = &"MP_PLA_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_PLA_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_PLA_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_PLA_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_PLA_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_PLA_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_PLA"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_PLA"; - game[ "music" ][ "victory_" + team ] = "VICTORY_PLA"; - game[ "icons" ][ team ] = "faction_pla"; - game[ "voice" ][ team ] = "vox_pla_"; - setdvar( "scr_" + team, "ussr" ); - level.heli_vo[ team ][ "hit" ] = "vox_rus_0_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_axis_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry"; -} - -init_fbi( team ) -{ - game[ team ] = "fbi"; - game[ "attackers" ] = team; - precacheshader( "faction_fbi" ); - game[ "entity_headicon_" + team ] = "faction_fbi"; - game[ "headicon_" + team ] = "faction_fbi"; - level.teamprefix[ team ] = "vox_hr"; - level.teampostfix[ team ] = "hrt"; - setdvar( "g_TeamName_" + team, &"MPUI_FBI_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "usa_fbi" ); - game[ "strings" ][ team + "_win" ] = &"MP_FBI_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_FBI_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_FBI_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_FBI_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_FBI_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_FBI_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_FBI"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_FBI"; - game[ "music" ][ "victory_" + team ] = "VICTORY_FBI"; - game[ "icons" ][ team ] = "faction_fbi"; - game[ "voice" ][ team ] = "vox_fbi_"; - setdvar( "scr_" + team, "marines" ); - level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_allies_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry"; -} - -init_isa( team ) -{ - game[ team ] = "isa"; - game[ "attackers" ] = team; - precacheshader( "faction_isa" ); - game[ "entity_headicon_" + team ] = "faction_isa"; - game[ "headicon_" + team ] = "faction_isa"; - level.teamprefix[ team ] = "vox_is"; - level.teampostfix[ team ] = "isa"; - setdvar( "g_TeamName_" + team, &"MPUI_ISA_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "isa" ); - game[ "strings" ][ team + "_win" ] = &"MP_ISA_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_ISA_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_ISA_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_ISA_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_ISA_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_ISA_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_CIA"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_CIA"; - game[ "music" ][ "victory_" + team ] = "VICTORY_CIA"; - game[ "icons" ][ team ] = "faction_isa"; - game[ "voice" ][ team ] = "vox_isa_"; - setdvar( "scr_" + team, "marines" ); - level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_allies_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry"; -} - -init_cd( team ) -{ - game[ team ] = "cd"; - game[ "attackers" ] = team; - precacheshader( "faction_cd" ); - game[ "entity_headicon_" + team ] = "faction_cd"; - game[ "headicon_" + team ] = "faction_cd"; - level.teamprefix[ team ] = "vox_cd"; - level.teampostfix[ team ] = "cda"; - setdvar( "g_TeamName_" + team, &"MPUI_CD_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "cd" ); - game[ "strings" ][ team + "_win" ] = &"MP_CD_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_CD_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_CD_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_CD_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_CD_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_CD_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_TER"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_TER"; - game[ "music" ][ "victory_" + team ] = "VICTORY_TER"; - game[ "icons" ][ team ] = "faction_cd"; - game[ "voice" ][ team ] = "vox_cda_"; - setdvar( "scr_" + team, "ussr" ); - level.heli_vo[ team ][ "hit" ] = "vox_cd2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_axis_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry"; -} diff --git a/Multiplayer Factions/faction_multiteam_wet_mp/mpbody/class_assault_cd_wet.gsc b/Multiplayer Factions/faction_multiteam_wet_mp/mpbody/class_assault_cd_wet.gsc deleted file mode 100644 index 1d3a022..0000000 --- a/Multiplayer Factions/faction_multiteam_wet_mp/mpbody/class_assault_cd_wet.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_cordis_assault_w_fb" ); - precachemodel( "c_mul_mp_cordis_assault_w_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team6" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_cordis_assault_w_fb" ); - self setviewmodel( "c_mul_mp_cordis_assault_w_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_wet_mp/mpbody/class_assault_chn_pla_wet.gsc b/Multiplayer Factions/faction_multiteam_wet_mp/mpbody/class_assault_chn_pla_wet.gsc deleted file mode 100644 index f7fea55..0000000 --- a/Multiplayer Factions/faction_multiteam_wet_mp/mpbody/class_assault_chn_pla_wet.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_chn_mp_pla_assault_w_fb" ); - precachemodel( "c_chn_mp_pla_longsleeve_w_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_chn_mp_pla_assault_w_fb" ); - self setviewmodel( "c_chn_mp_pla_longsleeve_w_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_wet_mp/mpbody/class_assault_isa_wet.gsc b/Multiplayer Factions/faction_multiteam_wet_mp/mpbody/class_assault_isa_wet.gsc deleted file mode 100644 index 70859cc..0000000 --- a/Multiplayer Factions/faction_multiteam_wet_mp/mpbody/class_assault_isa_wet.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_isa_assault_w_fb" ); - precachemodel( "c_usa_mp_isa_assault_w_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team5" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_isa_assault_w_fb" ); - self setviewmodel( "c_usa_mp_isa_assault_w_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_wet_mp/mpbody/class_assault_rus_pmc_wet.gsc b/Multiplayer Factions/faction_multiteam_wet_mp/mpbody/class_assault_rus_pmc_wet.gsc deleted file mode 100644 index b16775a..0000000 --- a/Multiplayer Factions/faction_multiteam_wet_mp/mpbody/class_assault_rus_pmc_wet.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_pmc_assault_w_fb" ); - precachemodel( "c_mul_mp_pmc_longsleeve_w_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team4" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_pmc_assault_w_fb" ); - self setviewmodel( "c_mul_mp_pmc_longsleeve_w_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_wet_mp/mpbody/class_assault_usa_fbi_wet.gsc b/Multiplayer Factions/faction_multiteam_wet_mp/mpbody/class_assault_usa_fbi_wet.gsc deleted file mode 100644 index 3eda7e5..0000000 --- a/Multiplayer Factions/faction_multiteam_wet_mp/mpbody/class_assault_usa_fbi_wet.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_fbi_assault_w_fb" ); - precachemodel( "c_usa_mp_fbi_longsleeve_w_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team3" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_fbi_assault_w_fb" ); - self setviewmodel( "c_usa_mp_fbi_longsleeve_w_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_multiteam_wet_mp/mpbody/class_assault_usa_seals_wet.gsc b/Multiplayer Factions/faction_multiteam_wet_mp/mpbody/class_assault_usa_seals_wet.gsc deleted file mode 100644 index 9759afd..0000000 --- a/Multiplayer Factions/faction_multiteam_wet_mp/mpbody/class_assault_usa_seals_wet.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_seal6_assault_w_fb" ); - precachemodel( "c_usa_mp_seal6_longsleeve_w_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_seal6_assault_w_fb" ); - self setviewmodel( "c_usa_mp_seal6_longsleeve_w_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_pla_mp/maps/mp/teams/_teamset_pla.gsc b/Multiplayer Factions/faction_pla_mp/maps/mp/teams/_teamset_pla.gsc deleted file mode 100644 index 14cc380..0000000 --- a/Multiplayer Factions/faction_pla_mp/maps/mp/teams/_teamset_pla.gsc +++ /dev/null @@ -1,48 +0,0 @@ - -main() -{ - init( "axis" ); - maps/mp/teams/_teamset::customteam_init(); - precache(); -} - -init( team ) -{ - maps/mp/teams/_teamset::init(); - game[ team ] = "pla"; - game[ "defenders" ] = team; - precacheshader( "faction_pla" ); - game[ "entity_headicon_" + team ] = "faction_pla"; - game[ "headicon_" + team ] = "faction_pla"; - level.teamprefix[ team ] = "vox_ch"; - level.teampostfix[ team ] = "pla"; - setdvar( "g_TeamName_" + team, &"MPUI_PLA_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_FactionName_" + team, "chn_pla" ); - game[ "strings" ][ team + "_win" ] = &"MP_PLA_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_PLA_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_PLA_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_PLA_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_PLA_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_PLA_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_PLA"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_PLA"; - game[ "music" ][ "victory_" + team ] = "VICTORY_PLA"; - game[ "icons" ][ team ] = "faction_pla"; - game[ "voice" ][ team ] = "vox_pla_"; - setdvar( "scr_" + team, "ussr" ); - level.heli_vo[ team ][ "hit" ] = "vox_rus_0_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_axis_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry"; -} - -precache() -{ - mpbody/class_assault_chn_pla::precache(); - mpbody/class_lmg_chn_pla::precache(); - mpbody/class_shotgun_chn_pla::precache(); - mpbody/class_smg_chn_pla::precache(); - mpbody/class_sniper_chn_pla::precache(); -} diff --git a/Multiplayer Factions/faction_pla_mp/mpbody/class_assault_chn_pla.gsc b/Multiplayer Factions/faction_pla_mp/mpbody/class_assault_chn_pla.gsc deleted file mode 100644 index e42afea..0000000 --- a/Multiplayer Factions/faction_pla_mp/mpbody/class_assault_chn_pla.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_chn_mp_pla_assault_fb" ); - precachemodel( "c_chn_mp_pla_longsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_chn_mp_pla_assault_fb" ); - self setviewmodel( "c_chn_mp_pla_longsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_pla_mp/mpbody/class_lmg_chn_pla.gsc b/Multiplayer Factions/faction_pla_mp/mpbody/class_lmg_chn_pla.gsc deleted file mode 100644 index 6ac3eed..0000000 --- a/Multiplayer Factions/faction_pla_mp/mpbody/class_lmg_chn_pla.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_chn_mp_pla_lmg_fb" ); - precachemodel( "c_chn_mp_pla_armorsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "axis" ][ "mg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "mg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_chn_mp_pla_lmg_fb" ); - self setviewmodel( "c_chn_mp_pla_armorsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_pla_mp/mpbody/class_shotgun_chn_pla.gsc b/Multiplayer Factions/faction_pla_mp/mpbody/class_shotgun_chn_pla.gsc deleted file mode 100644 index 25ce6e4..0000000 --- a/Multiplayer Factions/faction_pla_mp/mpbody/class_shotgun_chn_pla.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_chn_mp_pla_shotgun_fb" ); - precachemodel( "c_chn_mp_pla_armorsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "axis" ][ "spread" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "spread" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_chn_mp_pla_shotgun_fb" ); - self setviewmodel( "c_chn_mp_pla_armorsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_pla_mp/mpbody/class_smg_chn_pla.gsc b/Multiplayer Factions/faction_pla_mp/mpbody/class_smg_chn_pla.gsc deleted file mode 100644 index cc2d0b5..0000000 --- a/Multiplayer Factions/faction_pla_mp/mpbody/class_smg_chn_pla.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_chn_mp_pla_smg_fb" ); - precachemodel( "c_chn_mp_pla_longsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "axis" ][ "smg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "smg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_chn_mp_pla_smg_fb" ); - self setviewmodel( "c_chn_mp_pla_longsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_pla_mp/mpbody/class_sniper_chn_pla.gsc b/Multiplayer Factions/faction_pla_mp/mpbody/class_sniper_chn_pla.gsc deleted file mode 100644 index aafc33d..0000000 --- a/Multiplayer Factions/faction_pla_mp/mpbody/class_sniper_chn_pla.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_chn_mp_pla_sniper_fb" ); - precachemodel( "c_chn_mp_pla_longsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "axis" ][ "rifle" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "rifle" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_chn_mp_pla_sniper_fb" ); - self setviewmodel( "c_chn_mp_pla_longsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_pla_wet_mp/maps/mp/teams/_teamset_pla_wet.gsc b/Multiplayer Factions/faction_pla_wet_mp/maps/mp/teams/_teamset_pla_wet.gsc deleted file mode 100644 index 31339de..0000000 --- a/Multiplayer Factions/faction_pla_wet_mp/maps/mp/teams/_teamset_pla_wet.gsc +++ /dev/null @@ -1,48 +0,0 @@ - -main() -{ - init( "axis" ); - maps/mp/teams/_teamset::customteam_init(); - precache(); -} - -init( team ) -{ - maps/mp/teams/_teamset::init(); - game[ team ] = "pla"; - game[ "defenders" ] = team; - precacheshader( "faction_pla" ); - game[ "entity_headicon_" + team ] = "faction_pla"; - game[ "headicon_" + team ] = "faction_pla"; - level.teamprefix[ team ] = "vox_ch"; - level.teampostfix[ team ] = "pla"; - setdvar( "g_TeamName_" + team, &"MPUI_PLA_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_FactionName_" + team, "chn_pla" ); - game[ "strings" ][ team + "_win" ] = &"MP_PLA_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_PLA_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_PLA_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_PLA_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_PLA_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_PLA_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_PLA"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_PLA"; - game[ "music" ][ "victory_" + team ] = "VICTORY_PLA"; - game[ "icons" ][ team ] = "faction_pla"; - game[ "voice" ][ team ] = "vox_pla_"; - setdvar( "scr_" + team, "ussr" ); - level.heli_vo[ team ][ "hit" ] = "vox_rus_0_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_axis_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry"; -} - -precache() -{ - mpbody/class_assault_chn_pla_wet::precache(); - mpbody/class_lmg_chn_pla_wet::precache(); - mpbody/class_shotgun_chn_pla_wet::precache(); - mpbody/class_smg_chn_pla_wet::precache(); - mpbody/class_sniper_chn_pla_wet::precache(); -} diff --git a/Multiplayer Factions/faction_pla_wet_mp/mpbody/class_assault_chn_pla_wet.gsc b/Multiplayer Factions/faction_pla_wet_mp/mpbody/class_assault_chn_pla_wet.gsc deleted file mode 100644 index f7fea55..0000000 --- a/Multiplayer Factions/faction_pla_wet_mp/mpbody/class_assault_chn_pla_wet.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_chn_mp_pla_assault_w_fb" ); - precachemodel( "c_chn_mp_pla_longsleeve_w_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_chn_mp_pla_assault_w_fb" ); - self setviewmodel( "c_chn_mp_pla_longsleeve_w_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_pla_wet_mp/mpbody/class_lmg_chn_pla_wet.gsc b/Multiplayer Factions/faction_pla_wet_mp/mpbody/class_lmg_chn_pla_wet.gsc deleted file mode 100644 index 4fb8fb1..0000000 --- a/Multiplayer Factions/faction_pla_wet_mp/mpbody/class_lmg_chn_pla_wet.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_chn_mp_pla_lmg_w_fb" ); - precachemodel( "c_chn_mp_pla_armorsleeve_w_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "axis" ][ "mg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "mg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_chn_mp_pla_lmg_w_fb" ); - self setviewmodel( "c_chn_mp_pla_armorsleeve_w_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_pla_wet_mp/mpbody/class_shotgun_chn_pla_wet.gsc b/Multiplayer Factions/faction_pla_wet_mp/mpbody/class_shotgun_chn_pla_wet.gsc deleted file mode 100644 index 7144177..0000000 --- a/Multiplayer Factions/faction_pla_wet_mp/mpbody/class_shotgun_chn_pla_wet.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_chn_mp_pla_shotgun_w_fb" ); - precachemodel( "c_chn_mp_pla_armorsleeve_w_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "axis" ][ "spread" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "spread" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_chn_mp_pla_shotgun_w_fb" ); - self setviewmodel( "c_chn_mp_pla_armorsleeve_w_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_pla_wet_mp/mpbody/class_smg_chn_pla_wet.gsc b/Multiplayer Factions/faction_pla_wet_mp/mpbody/class_smg_chn_pla_wet.gsc deleted file mode 100644 index b13d34b..0000000 --- a/Multiplayer Factions/faction_pla_wet_mp/mpbody/class_smg_chn_pla_wet.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_chn_mp_pla_smg_w_fb" ); - precachemodel( "c_chn_mp_pla_longsleeve_w_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "axis" ][ "smg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "smg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_chn_mp_pla_smg_w_fb" ); - self setviewmodel( "c_chn_mp_pla_longsleeve_w_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_pla_wet_mp/mpbody/class_sniper_chn_pla_wet.gsc b/Multiplayer Factions/faction_pla_wet_mp/mpbody/class_sniper_chn_pla_wet.gsc deleted file mode 100644 index 49620f3..0000000 --- a/Multiplayer Factions/faction_pla_wet_mp/mpbody/class_sniper_chn_pla_wet.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_chn_mp_pla_sniper_w_fb" ); - precachemodel( "c_chn_mp_pla_longsleeve_w_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "axis" ][ "rifle" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "rifle" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_chn_mp_pla_sniper_w_fb" ); - self setviewmodel( "c_chn_mp_pla_longsleeve_w_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_pmc_mp/maps/mp/teams/_teamset_pmc.gsc b/Multiplayer Factions/faction_pmc_mp/maps/mp/teams/_teamset_pmc.gsc deleted file mode 100644 index 80405c7..0000000 --- a/Multiplayer Factions/faction_pmc_mp/maps/mp/teams/_teamset_pmc.gsc +++ /dev/null @@ -1,48 +0,0 @@ - -main() -{ - init( "axis" ); - maps/mp/teams/_teamset::customteam_init(); - precache(); -} - -init( team ) -{ - maps/mp/teams/_teamset::init(); - game[ team ] = "pmc"; - game[ "defenders" ] = team; - precacheshader( "faction_pmc" ); - game[ "entity_headicon_" + team ] = "faction_pmc"; - game[ "headicon_" + team ] = "faction_pmc"; - level.teamprefix[ team ] = "vox_pm"; - level.teampostfix[ team ] = "pmc"; - setdvar( "g_TeamName_" + team, &"MPUI_PMC_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_FactionName_" + team, "rus_pmc" ); - game[ "strings" ][ team + "_win" ] = &"MP_PMC_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_PMC_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_PMC_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_PMC_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_PMC_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_PMC_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_PMC"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_PMC"; - game[ "music" ][ "victory_" + team ] = "VICTORY_PMC"; - game[ "icons" ][ team ] = "faction_pmc"; - game[ "voice" ][ team ] = "vox_pmc_"; - setdvar( "scr_" + team, "ussr" ); - level.heli_vo[ team ][ "hit" ] = "vox_rus_0_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_axis_2"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_2_carry"; - game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry"; -} - -precache() -{ - mpbody/class_assault_rus_pmc::precache(); - mpbody/class_lmg_rus_pmc::precache(); - mpbody/class_shotgun_rus_pmc::precache(); - mpbody/class_smg_rus_pmc::precache(); - mpbody/class_sniper_rus_pmc::precache(); -} diff --git a/Multiplayer Factions/faction_pmc_mp/mpbody/class_assault_rus_pmc.gsc b/Multiplayer Factions/faction_pmc_mp/mpbody/class_assault_rus_pmc.gsc deleted file mode 100644 index a702e9d..0000000 --- a/Multiplayer Factions/faction_pmc_mp/mpbody/class_assault_rus_pmc.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_pmc_assault_fb" ); - precachemodel( "c_mul_mp_pmc_longsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team4" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_pmc_assault_fb" ); - self setviewmodel( "c_mul_mp_pmc_longsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_pmc_mp/mpbody/class_lmg_rus_pmc.gsc b/Multiplayer Factions/faction_pmc_mp/mpbody/class_lmg_rus_pmc.gsc deleted file mode 100644 index 1874b56..0000000 --- a/Multiplayer Factions/faction_pmc_mp/mpbody/class_lmg_rus_pmc.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_pmc_lmg_fb" ); - precachemodel( "c_mul_mp_pmc_longsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team4" ][ "mg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "mg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_pmc_lmg_fb" ); - self setviewmodel( "c_mul_mp_pmc_longsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_pmc_mp/mpbody/class_shotgun_rus_pmc.gsc b/Multiplayer Factions/faction_pmc_mp/mpbody/class_shotgun_rus_pmc.gsc deleted file mode 100644 index cdc2b38..0000000 --- a/Multiplayer Factions/faction_pmc_mp/mpbody/class_shotgun_rus_pmc.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_pmc_shotgun_fb" ); - precachemodel( "c_mul_mp_pmc_shortsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team4" ][ "spread" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "spread" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_pmc_shotgun_fb" ); - self setviewmodel( "c_mul_mp_pmc_shortsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_pmc_mp/mpbody/class_smg_rus_pmc.gsc b/Multiplayer Factions/faction_pmc_mp/mpbody/class_smg_rus_pmc.gsc deleted file mode 100644 index f5fa6e7..0000000 --- a/Multiplayer Factions/faction_pmc_mp/mpbody/class_smg_rus_pmc.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_pmc_smg_fb" ); - precachemodel( "c_mul_mp_pmc_shortsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team4" ][ "smg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "smg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_pmc_smg_fb" ); - self setviewmodel( "c_mul_mp_pmc_shortsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_pmc_mp/mpbody/class_sniper_rus_pmc.gsc b/Multiplayer Factions/faction_pmc_mp/mpbody/class_sniper_rus_pmc.gsc deleted file mode 100644 index 0f29f83..0000000 --- a/Multiplayer Factions/faction_pmc_mp/mpbody/class_sniper_rus_pmc.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_pmc_sniper_fb" ); - precachemodel( "c_mul_mp_pmc_longsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team4" ][ "rifle" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "rifle" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_pmc_sniper_fb" ); - self setviewmodel( "c_mul_mp_pmc_longsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_pmc_snow_mp/maps/mp/teams/_teamset_pmc_snow.gsc b/Multiplayer Factions/faction_pmc_snow_mp/maps/mp/teams/_teamset_pmc_snow.gsc deleted file mode 100644 index f6d53c8..0000000 --- a/Multiplayer Factions/faction_pmc_snow_mp/maps/mp/teams/_teamset_pmc_snow.gsc +++ /dev/null @@ -1,48 +0,0 @@ - -main() -{ - init( "axis" ); - maps/mp/teams/_teamset::customteam_init(); - precache(); -} - -init( team ) -{ - maps/mp/teams/_teamset::init(); - game[ team ] = "pmc"; - game[ "defenders" ] = team; - precacheshader( "faction_pmc" ); - game[ "entity_headicon_" + team ] = "faction_pmc"; - game[ "headicon_" + team ] = "faction_pmc"; - level.teamprefix[ team ] = "vox_pm"; - level.teampostfix[ team ] = "pmc"; - setdvar( "g_TeamName_" + team, &"MPUI_PMC_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" ); - setdvar( "g_FactionName_" + team, "rus_pmc" ); - game[ "strings" ][ team + "_win" ] = &"MP_PMC_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_PMC_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_PMC_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_PMC_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_PMC_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_PMC_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_PMC"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_PMC"; - game[ "music" ][ "victory_" + team ] = "VICTORY_PMC"; - game[ "icons" ][ team ] = "faction_pmc"; - game[ "voice" ][ team ] = "vox_pmc_"; - setdvar( "scr_" + team, "ussr" ); - level.heli_vo[ team ][ "hit" ] = "vox_rus_0_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_axis_2"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_2_carry"; - game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry"; -} - -precache() -{ - mpbody/class_assault_rus_pmc_snow::precache(); - mpbody/class_lmg_rus_pmc_snow::precache(); - mpbody/class_shotgun_rus_pmc_snow::precache(); - mpbody/class_smg_rus_pmc_snow::precache(); - mpbody/class_sniper_rus_pmc_snow::precache(); -} diff --git a/Multiplayer Factions/faction_pmc_snow_mp/mpbody/class_assault_rus_pmc_snow.gsc b/Multiplayer Factions/faction_pmc_snow_mp/mpbody/class_assault_rus_pmc_snow.gsc deleted file mode 100644 index 4be9aec..0000000 --- a/Multiplayer Factions/faction_pmc_snow_mp/mpbody/class_assault_rus_pmc_snow.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_pmc_assault_snw_fb" ); - precachemodel( "c_mul_mp_pmc_assault_snw_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team4" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_pmc_assault_snw_fb" ); - self setviewmodel( "c_mul_mp_pmc_assault_snw_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_pmc_snow_mp/mpbody/class_lmg_rus_pmc_snow.gsc b/Multiplayer Factions/faction_pmc_snow_mp/mpbody/class_lmg_rus_pmc_snow.gsc deleted file mode 100644 index b97aba6..0000000 --- a/Multiplayer Factions/faction_pmc_snow_mp/mpbody/class_lmg_rus_pmc_snow.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_pmc_lmg_snw_fb" ); - precachemodel( "c_mul_mp_pmc_longsleeve_snw_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team4" ][ "mg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "mg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_pmc_lmg_snw_fb" ); - self setviewmodel( "c_mul_mp_pmc_longsleeve_snw_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_pmc_snow_mp/mpbody/class_shotgun_rus_pmc_snow.gsc b/Multiplayer Factions/faction_pmc_snow_mp/mpbody/class_shotgun_rus_pmc_snow.gsc deleted file mode 100644 index 5e3c609..0000000 --- a/Multiplayer Factions/faction_pmc_snow_mp/mpbody/class_shotgun_rus_pmc_snow.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_pmc_shotgun_snw_fb" ); - precachemodel( "c_mul_mp_pmc_shortsleeve_snw_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team4" ][ "spread" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "spread" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_pmc_shotgun_snw_fb" ); - self setviewmodel( "c_mul_mp_pmc_shortsleeve_snw_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_pmc_snow_mp/mpbody/class_smg_rus_pmc_snow.gsc b/Multiplayer Factions/faction_pmc_snow_mp/mpbody/class_smg_rus_pmc_snow.gsc deleted file mode 100644 index 19e1ee9..0000000 --- a/Multiplayer Factions/faction_pmc_snow_mp/mpbody/class_smg_rus_pmc_snow.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_pmc_smg_snw_fb" ); - precachemodel( "c_mul_mp_pmc_shortsleeve_snw_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team4" ][ "smg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "smg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_pmc_smg_snw_fb" ); - self setviewmodel( "c_mul_mp_pmc_shortsleeve_snw_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_pmc_snow_mp/mpbody/class_sniper_rus_pmc_snow.gsc b/Multiplayer Factions/faction_pmc_snow_mp/mpbody/class_sniper_rus_pmc_snow.gsc deleted file mode 100644 index 152d39e..0000000 --- a/Multiplayer Factions/faction_pmc_snow_mp/mpbody/class_sniper_rus_pmc_snow.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_mul_mp_pmc_sniper_snw_fb" ); - precachemodel( "c_mul_mp_pmc_longsleeve_snw_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "team4" ][ "rifle" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "axis" ][ "rifle" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_mul_mp_pmc_sniper_snw_fb" ); - self setviewmodel( "c_mul_mp_pmc_longsleeve_snw_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_seals_mp/maps/mp/teams/_teamset_seals.gsc b/Multiplayer Factions/faction_seals_mp/maps/mp/teams/_teamset_seals.gsc deleted file mode 100644 index ee5bf1b..0000000 --- a/Multiplayer Factions/faction_seals_mp/maps/mp/teams/_teamset_seals.gsc +++ /dev/null @@ -1,48 +0,0 @@ - -main() -{ - init( "allies" ); - maps/mp/teams/_teamset::customteam_init(); - precache(); -} - -init( team ) -{ - maps/mp/teams/_teamset::init(); - game[ team ] = "seals"; - game[ "attackers" ] = team; - precacheshader( "faction_seals" ); - game[ "entity_headicon_" + team ] = "faction_seals"; - game[ "headicon_" + team ] = "faction_seals"; - level.teamprefix[ team ] = "vox_st"; - level.teampostfix[ team ] = "st6"; - setdvar( "g_TeamName_" + team, &"MPUI_SEALS_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "usa_seals" ); - game[ "strings" ][ team + "_win" ] = &"MP_SEALS_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_SEALS_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_SEALS_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_SEALS_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_SEALS_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_SEALS_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_ST6"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_ST6"; - game[ "music" ][ "victory_" + team ] = "VICTORY_ST6"; - game[ "icons" ][ team ] = "faction_seals"; - game[ "voice" ][ team ] = "vox_st6_"; - setdvar( "scr_" + team, "marines" ); - level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_allies_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry"; -} - -precache() -{ - mpbody/class_assault_usa_seals::precache(); - mpbody/class_lmg_usa_seals::precache(); - mpbody/class_shotgun_usa_seals::precache(); - mpbody/class_smg_usa_seals::precache(); - mpbody/class_sniper_usa_seals::precache(); -} diff --git a/Multiplayer Factions/faction_seals_mp/mpbody/class_assault_usa_seals.gsc b/Multiplayer Factions/faction_seals_mp/mpbody/class_assault_usa_seals.gsc deleted file mode 100644 index 89219e7..0000000 --- a/Multiplayer Factions/faction_seals_mp/mpbody/class_assault_usa_seals.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_seal6_assault_fb" ); - precachemodel( "c_usa_mp_seal6_longsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_seal6_assault_fb" ); - self setviewmodel( "c_usa_mp_seal6_longsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_seals_mp/mpbody/class_lmg_usa_seals.gsc b/Multiplayer Factions/faction_seals_mp/mpbody/class_lmg_usa_seals.gsc deleted file mode 100644 index 2a65ca0..0000000 --- a/Multiplayer Factions/faction_seals_mp/mpbody/class_lmg_usa_seals.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_seal6_lmg_fb" ); - precachemodel( "c_usa_mp_seal6_longsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "allies" ][ "mg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "mg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_seal6_lmg_fb" ); - self setviewmodel( "c_usa_mp_seal6_longsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_seals_mp/mpbody/class_shotgun_usa_seals.gsc b/Multiplayer Factions/faction_seals_mp/mpbody/class_shotgun_usa_seals.gsc deleted file mode 100644 index b402a97..0000000 --- a/Multiplayer Factions/faction_seals_mp/mpbody/class_shotgun_usa_seals.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_seal6_shotgun_fb" ); - precachemodel( "c_usa_mp_seal6_shortsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "allies" ][ "spread" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "spread" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_seal6_shotgun_fb" ); - self setviewmodel( "c_usa_mp_seal6_shortsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_seals_mp/mpbody/class_smg_usa_seals.gsc b/Multiplayer Factions/faction_seals_mp/mpbody/class_smg_usa_seals.gsc deleted file mode 100644 index f20866b..0000000 --- a/Multiplayer Factions/faction_seals_mp/mpbody/class_smg_usa_seals.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_seal6_smg_fb" ); - precachemodel( "c_usa_mp_seal6_shortsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "allies" ][ "smg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "smg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_seal6_smg_fb" ); - self setviewmodel( "c_usa_mp_seal6_shortsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_seals_mp/mpbody/class_sniper_usa_seals.gsc b/Multiplayer Factions/faction_seals_mp/mpbody/class_sniper_usa_seals.gsc deleted file mode 100644 index 3965805..0000000 --- a/Multiplayer Factions/faction_seals_mp/mpbody/class_sniper_usa_seals.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_seal6_sniper_fb" ); - precachemodel( "c_usa_mp_seal6_longsleeve_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "allies" ][ "rifle" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "rifle" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_seal6_sniper_fb" ); - self setviewmodel( "c_usa_mp_seal6_longsleeve_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_seals_snow_mp/maps/mp/teams/_teamset_seals_snow.gsc b/Multiplayer Factions/faction_seals_snow_mp/maps/mp/teams/_teamset_seals_snow.gsc deleted file mode 100644 index 1842b5d..0000000 --- a/Multiplayer Factions/faction_seals_snow_mp/maps/mp/teams/_teamset_seals_snow.gsc +++ /dev/null @@ -1,48 +0,0 @@ - -main() -{ - init( "allies" ); - maps/mp/teams/_teamset::customteam_init(); - precache(); -} - -init( team ) -{ - maps/mp/teams/_teamset::init(); - game[ team ] = "seals"; - game[ "attackers" ] = team; - precacheshader( "faction_seals" ); - game[ "entity_headicon_" + team ] = "faction_seals"; - game[ "headicon_" + team ] = "faction_seals"; - level.teamprefix[ team ] = "vox_st"; - level.teampostfix[ team ] = "st6"; - setdvar( "g_TeamName_" + team, &"MPUI_SEALS_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "usa_seals" ); - game[ "strings" ][ team + "_win" ] = &"MP_SEALS_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_SEALS_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_SEALS_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_SEALS_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_SEALS_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_SEALS_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_ST6"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_ST6"; - game[ "music" ][ "victory_" + team ] = "VICTORY_ST6"; - game[ "icons" ][ team ] = "faction_seals"; - game[ "voice" ][ team ] = "vox_st6_"; - setdvar( "scr_" + team, "marines" ); - level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_allies_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry"; -} - -precache() -{ - mpbody/class_assault_usa_seals_snow::precache(); - mpbody/class_lmg_usa_seals_snow::precache(); - mpbody/class_shotgun_usa_seals_snow::precache(); - mpbody/class_smg_usa_seals_snow::precache(); - mpbody/class_sniper_usa_seals_snow::precache(); -} diff --git a/Multiplayer Factions/faction_seals_snow_mp/mpbody/class_assault_usa_seals_snow.gsc b/Multiplayer Factions/faction_seals_snow_mp/mpbody/class_assault_usa_seals_snow.gsc deleted file mode 100644 index dd0cde5..0000000 --- a/Multiplayer Factions/faction_seals_snow_mp/mpbody/class_assault_usa_seals_snow.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_seal6_assault_snw_fb" ); - precachemodel( "c_usa_mp_seal6_assault_snw_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_seal6_assault_snw_fb" ); - self setviewmodel( "c_usa_mp_seal6_assault_snw_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_seals_snow_mp/mpbody/class_lmg_usa_seals_snow.gsc b/Multiplayer Factions/faction_seals_snow_mp/mpbody/class_lmg_usa_seals_snow.gsc deleted file mode 100644 index 1e89d82..0000000 --- a/Multiplayer Factions/faction_seals_snow_mp/mpbody/class_lmg_usa_seals_snow.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_seal6_lmg_snw_fb" ); - precachemodel( "c_usa_mp_seal6_longsleeve_snw_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "allies" ][ "mg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "mg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_seal6_lmg_snw_fb" ); - self setviewmodel( "c_usa_mp_seal6_longsleeve_snw_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_seals_snow_mp/mpbody/class_shotgun_usa_seals_snow.gsc b/Multiplayer Factions/faction_seals_snow_mp/mpbody/class_shotgun_usa_seals_snow.gsc deleted file mode 100644 index 668d7f3..0000000 --- a/Multiplayer Factions/faction_seals_snow_mp/mpbody/class_shotgun_usa_seals_snow.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_seal6_shotgun_snw_fb" ); - precachemodel( "c_usa_mp_seal6_shortsleeve_snw_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "allies" ][ "spread" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "spread" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_seal6_shotgun_snw_fb" ); - self setviewmodel( "c_usa_mp_seal6_shortsleeve_snw_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_seals_snow_mp/mpbody/class_smg_usa_seals_snow.gsc b/Multiplayer Factions/faction_seals_snow_mp/mpbody/class_smg_usa_seals_snow.gsc deleted file mode 100644 index 60caf45..0000000 --- a/Multiplayer Factions/faction_seals_snow_mp/mpbody/class_smg_usa_seals_snow.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_seal6_smg_snw_fb" ); - precachemodel( "c_usa_mp_seal6_shortsleeve_snw_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "allies" ][ "smg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "smg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_seal6_smg_snw_fb" ); - self setviewmodel( "c_usa_mp_seal6_shortsleeve_snw_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_seals_snow_mp/mpbody/class_sniper_usa_seals_snow.gsc b/Multiplayer Factions/faction_seals_snow_mp/mpbody/class_sniper_usa_seals_snow.gsc deleted file mode 100644 index 92ac44e..0000000 --- a/Multiplayer Factions/faction_seals_snow_mp/mpbody/class_sniper_usa_seals_snow.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_seal6_sniper_snw_fb" ); - precachemodel( "c_usa_mp_seal6_longsleeve_snw_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "allies" ][ "rifle" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "rifle" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_seal6_sniper_snw_fb" ); - self setviewmodel( "c_usa_mp_seal6_longsleeve_snw_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_seals_wet_mp/maps/mp/teams/_teamset_seals_wet.gsc b/Multiplayer Factions/faction_seals_wet_mp/maps/mp/teams/_teamset_seals_wet.gsc deleted file mode 100644 index 11bb526..0000000 --- a/Multiplayer Factions/faction_seals_wet_mp/maps/mp/teams/_teamset_seals_wet.gsc +++ /dev/null @@ -1,48 +0,0 @@ - -main() -{ - init( "allies" ); - maps/mp/teams/_teamset::customteam_init(); - precache(); -} - -init( team ) -{ - maps/mp/teams/_teamset::init(); - game[ team ] = "seals"; - game[ "attackers" ] = team; - precacheshader( "faction_seals" ); - game[ "entity_headicon_" + team ] = "faction_seals"; - game[ "headicon_" + team ] = "faction_seals"; - level.teamprefix[ team ] = "vox_st"; - level.teampostfix[ team ] = "st6"; - setdvar( "g_TeamName_" + team, &"MPUI_SEALS_SHORT" ); - setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" ); - setdvar( "g_FactionName_" + team, "usa_seals" ); - game[ "strings" ][ team + "_win" ] = &"MP_SEALS_WIN_MATCH"; - game[ "strings" ][ team + "_win_round" ] = &"MP_SEALS_WIN_ROUND"; - game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_SEALS_MISSION_ACCOMPLISHED"; - game[ "strings" ][ team + "_eliminated" ] = &"MP_SEALS_ELIMINATED"; - game[ "strings" ][ team + "_forfeited" ] = &"MP_SEALS_FORFEITED"; - game[ "strings" ][ team + "_name" ] = &"MP_SEALS_NAME"; - game[ "music" ][ "spawn_" + team ] = "SPAWN_ST6"; - game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_ST6"; - game[ "music" ][ "victory_" + team ] = "VICTORY_ST6"; - game[ "icons" ][ team ] = "faction_seals"; - game[ "voice" ][ team ] = "vox_st6_"; - setdvar( "scr_" + team, "marines" ); - level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit"; - game[ "flagmodels" ][ team ] = "mp_flag_allies_1"; - game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry"; - game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry"; -} - -precache() -{ - mpbody/class_assault_usa_seals_wet::precache(); - mpbody/class_lmg_usa_seals_wet::precache(); - mpbody/class_shotgun_usa_seals_wet::precache(); - mpbody/class_smg_usa_seals_wet::precache(); - mpbody/class_sniper_usa_seals_wet::precache(); -} diff --git a/Multiplayer Factions/faction_seals_wet_mp/mpbody/class_assault_usa_seals_wet.gsc b/Multiplayer Factions/faction_seals_wet_mp/mpbody/class_assault_usa_seals_wet.gsc deleted file mode 100644 index 9759afd..0000000 --- a/Multiplayer Factions/faction_seals_wet_mp/mpbody/class_assault_usa_seals_wet.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_seal6_assault_w_fb" ); - precachemodel( "c_usa_mp_seal6_longsleeve_w_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_seal6_assault_w_fb" ); - self setviewmodel( "c_usa_mp_seal6_longsleeve_w_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_seals_wet_mp/mpbody/class_lmg_usa_seals_wet.gsc b/Multiplayer Factions/faction_seals_wet_mp/mpbody/class_lmg_usa_seals_wet.gsc deleted file mode 100644 index 3bd5708..0000000 --- a/Multiplayer Factions/faction_seals_wet_mp/mpbody/class_lmg_usa_seals_wet.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_seal6_lmg_w_fb" ); - precachemodel( "c_usa_mp_seal6_longsleeve_w_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "allies" ][ "mg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "mg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_seal6_lmg_w_fb" ); - self setviewmodel( "c_usa_mp_seal6_longsleeve_w_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_seals_wet_mp/mpbody/class_shotgun_usa_seals_wet.gsc b/Multiplayer Factions/faction_seals_wet_mp/mpbody/class_shotgun_usa_seals_wet.gsc deleted file mode 100644 index 6683aeb..0000000 --- a/Multiplayer Factions/faction_seals_wet_mp/mpbody/class_shotgun_usa_seals_wet.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_seal6_shotgun_w_fb" ); - precachemodel( "c_usa_mp_seal6_shortsleeve_w_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "allies" ][ "spread" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "spread" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_seal6_shotgun_w_fb" ); - self setviewmodel( "c_usa_mp_seal6_shortsleeve_w_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_seals_wet_mp/mpbody/class_smg_usa_seals_wet.gsc b/Multiplayer Factions/faction_seals_wet_mp/mpbody/class_smg_usa_seals_wet.gsc deleted file mode 100644 index 2404405..0000000 --- a/Multiplayer Factions/faction_seals_wet_mp/mpbody/class_smg_usa_seals_wet.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_seal6_smg_w_fb" ); - precachemodel( "c_usa_mp_seal6_shortsleeve_w_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "allies" ][ "smg" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "smg" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_seal6_smg_w_fb" ); - self setviewmodel( "c_usa_mp_seal6_shortsleeve_w_viewhands" ); - heads = []; -} diff --git a/Multiplayer Factions/faction_seals_wet_mp/mpbody/class_sniper_usa_seals_wet.gsc b/Multiplayer Factions/faction_seals_wet_mp/mpbody/class_sniper_usa_seals_wet.gsc deleted file mode 100644 index e5ad576..0000000 --- a/Multiplayer Factions/faction_seals_wet_mp/mpbody/class_sniper_usa_seals_wet.gsc +++ /dev/null @@ -1,22 +0,0 @@ -#include common_scripts/utility; - -precache() -{ - precachemodel( "c_usa_mp_seal6_sniper_w_fb" ); - precachemodel( "c_usa_mp_seal6_longsleeve_w_viewhands" ); - if ( level.multiteam ) - { - game[ "set_player_model" ][ "allies" ][ "rifle" ] = ::set_player_model; - } - else - { - game[ "set_player_model" ][ "allies" ][ "rifle" ] = ::set_player_model; - } -} - -set_player_model() -{ - self setmodel( "c_usa_mp_seal6_sniper_w_fb" ); - self setviewmodel( "c_usa_mp_seal6_longsleeve_w_viewhands" ); - heads = []; -} diff --git a/Multiplayer Maps/mp_bridge/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_bridge/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_bridge/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_bridge/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_bridge/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_bridge/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_bridge/maps/mp/createfx/mp_bridge_fx.gsc b/Multiplayer Maps/mp_bridge/maps/mp/createfx/mp_bridge_fx.gsc deleted file mode 100644 index c130f65..0000000 --- a/Multiplayer Maps/mp_bridge/maps/mp/createfx/mp_bridge_fx.gsc +++ /dev/null @@ -1,1405 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_fireball" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3287,39, -429,974, 52,406 ); - ent.v[ "angles" ] = ( 270, 0, -85 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 297,214, 303,426, -8,24041 ); - ent.v[ "angles" ] = ( 357, 104, 24 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -526,87, 509,596, 71,0189 ); - ent.v[ "angles" ] = ( 353,541, 132,992, -7,0747 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -220,636, -41,6506, -41,0029 ); - ent.v[ "angles" ] = ( 45,7726, 71,9174, -7,24831 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1197,56, -866,805, 36,9715 ); - ent.v[ "angles" ] = ( 357,706, 101,412, -3,90359 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -987,52, -908,542, 43,7629 ); - ent.v[ "angles" ] = ( 0, 132,332, -4,52645 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1474,17, -507,839, -65,2753 ); - ent.v[ "angles" ] = ( 0, 132,332, -4,52645 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1196,99, -858,897, 23,4491 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 304,82, 299,989, 0 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 69 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1308,46, -578,147, -24,0032 ); - ent.v[ "angles" ] = ( 338, 36, 0 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1471,72, -502,291, -62,1438 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 165 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1303,12, -583,675, -26,2774 ); - ent.v[ "angles" ] = ( 357,877, 104,406, -3,99843 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -219,227, 61,4696, -15,2712 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 115 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1070,78, 362,231, 2,21348 ); - ent.v[ "angles" ] = ( 359, 125, 0 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3,01666, 315,447, 8,38729 ); - ent.v[ "angles" ] = ( 347,049, 106,934, 0,317125 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -969,86, -858,697, 0,124999 ); - ent.v[ "angles" ] = ( 359,066, 104, 0,358452 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -861,534, -546,84, 3,125 ); - ent.v[ "angles" ] = ( 359,086, 101, 0,406833 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1447,27, -380,31, -47,8503 ); - ent.v[ "angles" ] = ( 359,066, 104, 0,358452 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2090,03, -332,301, -126,659 ); - ent.v[ "angles" ] = ( 359, 125, 0 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2244,25, -594,758, -118,482 ); - ent.v[ "angles" ] = ( 359,066, 104, 0,358452 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3009,68, -684,535, -67,9775 ); - ent.v[ "angles" ] = ( 359,384, 73, 0,788152 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1611,11, -622,403, -102,751 ); - ent.v[ "angles" ] = ( 359,191, 89, 0,58791 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -304,087, -504,391, 4,39694 ); - ent.v[ "angles" ] = ( 359,066, 104, 0,358452 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -43,9016, -285,469, -2,34247 ); - ent.v[ "angles" ] = ( 5,00119, 71,7019, -1,59772 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2355,43, -248,676, -133,492 ); - ent.v[ "angles" ] = ( 359,515, 64, 0,874684 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1300,86, 580,398, -141 ); - ent.v[ "angles" ] = ( 359,117, 97, 0,469575 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1347,43, 312,283, -128 ); - ent.v[ "angles" ] = ( 359,117, 97, 0,469575 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -697,177, 570,062, -128 ); - ent.v[ "angles" ] = ( 359,117, 97, 0,469575 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -267,935, 556,26, -127,875 ); - ent.v[ "angles" ] = ( 359,117, 97, 0,469575 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -399,711, 195,098, -75,5111 ); - ent.v[ "angles" ] = ( 359,117, 97, 0,469575 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -111,534, 802,34, -128 ); - ent.v[ "angles" ] = ( 359,171, 91, 0,5593 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3253,26, -370,641, 171,844 ); - ent.v[ "angles" ] = ( 287, 93, -180 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_bridge_sun" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 250971, -124193, 41985 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 248,305, -59,5536, -20,8347 ); - ent.v[ "angles" ] = ( 2, 0, -16 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 256,103, -60,4754, -17,7327 ); - ent.v[ "angles" ] = ( 44,7805, 72,0951, -7,12204 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 337,308, 2,14762, -20,2256 ); - ent.v[ "angles" ] = ( 288, 90, -90 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1349,71, 458,856, -29,1047 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 34 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1285, 593,824, -21,5363 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 296 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2066,8, 491,843, -33,5513 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 341 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_lg_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1942,81, 259,657, -10,8562 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 84 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_lg_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 228,809, -52,7176, -33,984 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_lg_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 239,317, 94,7007, -43,4998 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 257 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_lg_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 142,048, 22,8797, -50,4053 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 352 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 274,624, -37,7175, -39,5964 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 140 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_lg_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 353,59, 52,0483, -49,5538 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_lg_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -278,552, 17,7715, -44,6642 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 335 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_lg_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -118,956, 9,00296, -48,3488 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 198 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -179,061, -62,165, -48,4152 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 79 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -235,95, -35,2447, -42,6025 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 30 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_spark_light_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -201,674, -23,6963, -74,732 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 344 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_spark_light02_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 233,879, -3,67637, -74,9915 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 357 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -173,005, -71,5927, -27,5974 ); - ent.v[ "angles" ] = ( 1, 0, -17 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -124,648, -131,764, -83,875 ); - ent.v[ "angles" ] = ( 45,7726, 71,9174, -7,24831 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 338,363, -49,3833, -74,2608 ); - ent.v[ "angles" ] = ( 45,7726, 71,9174, -7,24831 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -190,088, 202,991, -7,79737 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 94 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -183,412, 155,586, 16,1349 ); - ent.v[ "angles" ] = ( 23, 128, 0 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -76,6828, -92,7573, -13,0739 ); - ent.v[ "angles" ] = ( 4,52346, 84,067, -16,0903 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -763,712, 35,9396, 97,125 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -923,31, -103,103, 100,619 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1230,9, -40,5745, 100,447 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1267,99, -319,467, -1 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1349,08, -298,166, -4 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1283,6, -289,399, -14,9277 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1381,88, -308,94, -4,9277 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1742,99, -428,07, -12,2136 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1644,6, -408,567, -16,2136 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1624,5, -463,854, -9,2859 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1711,6, -462,246, -11,2859 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2063,59, -566,517, -7,1942 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2032,2, -600,693, -6,2665 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1956,61, -584,143, -10,2665 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1965,2, -547,014, -11,1942 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1994,21, -296,235, -11,4639 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1962,82, -330,411, -10,5361 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1887,23, -313,861, -14,5361 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1895,82, -276,732, -15,4639 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1716,45, -279,037, -19,4639 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1677,22, -335,058, -20,5361 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1609,63, -318,542, -13,5361 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1618,22, -281,413, -19,4639 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1332,45, -725,071, -4,3389 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1420,95, -747,604, 4,6611 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1380,53, -780,996, -0,4111 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1231,64, -571,961, -15,4111 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1226,92, -635,447, -13 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2283,97, -313,634, -12,4639 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2192,27, -292,598, -8,4639 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2251,29, -271,294, -10,5361 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2334,83, -265,579, -14,4639 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1827,5, -472,81, -5,0017 ); - ent.v[ "angles" ] = ( 42,9744, 92,6924, 91,4886 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1938,5, -478,296, 7,99099 ); - ent.v[ "angles" ] = ( 42,9573, 91,3259, -91,4429 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1551,59, -602,519, -18,0082 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2632,27, -448,319, -17,1985 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2533,88, -428,816, -21,1985 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2525,29, -465,945, -20,2707 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2600,88, -482,495, -16,2707 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2635,98, -297,465, -15,4639 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2537,59, -277,962, -19,4639 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2529, -315,091, -18,5361 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2604,59, -331,641, -14,5361 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2647,61, -577,59, -15,7812 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2549,22, -558,087, -19,7812 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2540,63, -595,216, -18,8534 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2616,22, -611,766, -14,8534 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_03" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2064,8, -838,755, -40,9997 ); - ent.v[ "angles" ] = ( 19,7953, 157,841, -95,6378 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_03" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2392,28, -833,753, -44,1786 ); - ent.v[ "angles" ] = ( 19,7953, 157,841, -95,6378 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_03" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1752,42, -824,018, -44,1274 ); - ent.v[ "angles" ] = ( 19,7953, 157,841, -95,6378 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_03" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1434,22, -824,166, -41,7858 ); - ent.v[ "angles" ] = ( 19,7953, 157,841, -95,6378 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_03" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1108,45, -827,684, -21,0838 ); - ent.v[ "angles" ] = ( 19,7953, 157,841, -95,6378 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -991,361, 691,786, -31,8675 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 271 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_ash" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 276,916, -259,891, 0,124998 ); - ent.v[ "angles" ] = ( 351, 94, 0 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_ash" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -263,859, -294,055, -15,5924 ); - ent.v[ "angles" ] = ( 344, 94, 0 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -183,823, 209,21, -3,60733 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 113 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 17947, 27125,8, 2826,47 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 18817, 27334, 2822,81 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -7976,36, 19568, 2818,82 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -8826,64, 19288,2, 2821,47 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -8131,16, 20476,1, 2825,94 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -8392,81, 21361,9, 2822,99 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 17645, 27990,5, 2835,74 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 17395,6, 28972,5, 2840,41 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_bridge_vista_glare_red" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -22295,7, -2205,94, 4374,55 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_sparks_loop_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1257,06, 416,376, -8,7138 ); - ent.v[ "angles" ] = ( 35,4891, 104,923, -6,48424 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_under_smoke" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1638,82, 129,433, -230,885 ); - ent.v[ "angles" ] = ( 354, 88, 0 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_under_smoke" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1940,44, 135,966, -221,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1541,54, -222,874, -11,1 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 261 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1826,58, -233,414, -5,10508 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 261 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2568,44, -227,074, -5,64081 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 261 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_under_smoke_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1081,41, 510,679, 61,8525 ); - ent.v[ "angles" ] = ( 356, 89,4836, 0,893179 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_sparks_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -284,623, -1,69012, -136,477 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 350 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_sparks_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 143,901, 0,758762, -136,231 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 350 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1612,87, -598,284, -132 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1318,19, -819,029, -129 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 946,278, -823,533, -127,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 757,6, -880,753, -139,708 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 115 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 150,162, -835,564, -127,75 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 160,81, -1159,38, -160,937 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 117 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 639,384, -589,062, -127,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 304,459, -594,409, -127,002 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 118,98, -591,849, -142,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 986,751, -534,93, -116,925 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 50 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1934,03, -585,504, -121,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 86 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2222,37, -552,321, -121,292 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 86 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2488, -585,132, -135,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 50 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2243,15, -358,748, -129 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 85 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2326,44, -126,125, -135,875 ); - ent.v[ "angles" ] = ( 336,984, 102,426, -6,99643 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2257,69, 134,852, 0,125 ); - ent.v[ "angles" ] = ( 357, 85, 0 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2009,15, 287,077, 0,125 ); - ent.v[ "angles" ] = ( 357, 85, 0 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1531,47, 235,675, 2,20929 ); - ent.v[ "angles" ] = ( 357, 85, 0 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1449,47, 583,703, 12,6064 ); - ent.v[ "angles" ] = ( 357,016, 78,9917, 0,313907 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2370,99, 221,205, -124,784 ); - ent.v[ "angles" ] = ( 359,792, 47, 0,978463 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 449,1, -816,805, -112,44 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 115 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3207,87, -430,162, 14,5372 ); - ent.v[ "angles" ] = ( 32,7509, 63,2253, 3,90106 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3207,07, -385,791, 33,125 ); - ent.v[ "angles" ] = ( 347,294, 79,8492, 0,725055 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2788,5, 551,45, 1,5968 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 163 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2794,03, 362,049, 8,69101 ); - ent.v[ "angles" ] = ( 15,7726, 112,072, 0 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3045,52, -485,839, -66,7537 ); - ent.v[ "angles" ] = ( 359,384, 73, 0,788152 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -915,663, 661,254, 8,44913 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -919,114, 678,627, 24,2735 ); - ent.v[ "angles" ] = ( 32,7509, 63,2253, 3,90106 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1285,13, 461,515, 9,52951 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1292,33, 469,535, 25,3539 ); - ent.v[ "angles" ] = ( 32,7509, 63,2253, 3,90106 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1245,98, 447,062, -7,91256 ); - ent.v[ "angles" ] = ( 23,6846, 78,9379, 12,3128 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1272,42, 646,383, -150,665 ); - ent.v[ "angles" ] = ( 348, 94, 0 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1244,27, 540,578, -155,457 ); - ent.v[ "angles" ] = ( 0,817454, 112,983, 2,84399 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1215,64, 675,684, -149,936 ); - ent.v[ "angles" ] = ( 0,817454, 112,983, 2,84399 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1091,26, 634,096, -149,28 ); - ent.v[ "angles" ] = ( 1,78209, 92, 2,3626 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1070,85, 520,465, -138,303 ); - ent.v[ "angles" ] = ( 17,5045, 71,4214, 1,64168 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3106,83, -432,057, -10,5019 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 357 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3102,8, -538,623, -7,49289 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 357 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2894,81, -287,074, -84,4665 ); - ent.v[ "angles" ] = ( 0,48477, 6,00488, 0,874828 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1171,12, 329,396, 9,44715 ); - ent.v[ "angles" ] = ( 31,8635, 73,9768, -5,94769 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1171,19, 320,607, 3,61259 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 113 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_under_smoke" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1792,9, 575,419, -213,677 ); - ent.v[ "angles" ] = ( 25, 88, 0 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_under_smoke" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2289,22, 527,772, -195,875 ); - ent.v[ "angles" ] = ( 25, 88, 0 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -109,972, 887,062, -136,875 ); - ent.v[ "angles" ] = ( 359,171, 91, 0,5593 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_under_smoke" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -110,792, 362,814, -182,875 ); - ent.v[ "angles" ] = ( 353, 88, 0 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_under_smoke_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2716, 459,402, -27,0083 ); - ent.v[ "angles" ] = ( 357, 90, 0 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -746,211, 121,545, 57,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 266 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -963,024, -62,8485, 50,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 749,654, -151,681, 60,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 707,766, 54,496, 53,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1257,11, 63,5891, 61,4086 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 182 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_windy_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1399,63, -685,843, -68,2654 ); - ent.v[ "angles" ] = ( 360, 262, 18 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1493,15, -699,789, -114,64 ); - ent.v[ "angles" ] = ( 43,6904, 79,2656, 0,821074 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_under_smoke" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1346,59, -725,543, -198,873 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2229,46, -43,5459, -139,875 ); - ent.v[ "angles" ] = ( 359,054, 106, 0,325543 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -216,749, 64,906, -11,0174 ); - ent.v[ "angles" ] = ( 31, 94, 0 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 332,155, 5,81922, -20,1137 ); - ent.v[ "angles" ] = ( 37, 94, 0 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 148,372, 130,075, -20,4819 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 98 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 147,364, 126,496, -19,8173 ); - ent.v[ "angles" ] = ( 32, 94, 0 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 55,9197, -131,945, -14,9653 ); - ent.v[ "angles" ] = ( 359,406, 66,7938, -16,6876 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -161,551, -76,5783, -15,5597 ); - ent.v[ "angles" ] = ( 31, 94, 0 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 42,0953, -116,968, -18,6199 ); - ent.v[ "angles" ] = ( 359,066, 104, 0,358452 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1968,65, 367,964, -139,419 ); - ent.v[ "angles" ] = ( 31, 94, 0 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1967,14, 370,761, -142,457 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 80 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1619,97, 567,933, -141,466 ); - ent.v[ "angles" ] = ( 31, 94, 0 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1620,76, 569,262, -146,503 ); - ent.v[ "angles" ] = ( 356,939, 80,3856, 90,5438 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1622,45, 559,691, -149,088 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 84 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2063,7, 415,821, -14,1888 ); - ent.v[ "angles" ] = ( 42,9573, 91,3259, -83,4429 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1899,59, 370,071, -1,71566 ); - ent.v[ "angles" ] = ( 42,9573, 91,3255, 79,5569 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2031,29, 393,986, -1,58296 ); - ent.v[ "angles" ] = ( 42,9743, 92,6922, -76,5116 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1874,21, 390,696, -5,19353 ); - ent.v[ "angles" ] = ( 42,9573, 91,325, 92,5567 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1111,82, 400,254, -13,3927 ); - ent.v[ "angles" ] = ( 42,9573, 91,325, 92,5567 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1241,31, 423,467, -1,50169 ); - ent.v[ "angles" ] = ( 42,9573, 91,325, 92,5567 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1249,41, 433,599, 3,85648 ); - ent.v[ "angles" ] = ( 42,9573, 91,325, 92,5567 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1249,12, 537,084, -156,992 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 103 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1912,96, 332,354, -91,9484 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1378,9, 351,127, -90,0603 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1353,57, 626,263, -102,965 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1680,05, 333,52, -87,4397 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2049,01, 303,002, -81,0112 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2272,69, 176,125, -100,051 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2277,97, -143,508, -93,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1041,2, 412,293, -64,6322 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 64 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -667,407, 458,397, -80 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -380,84, 491,519, -78,4981 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -116,624, 510,917, -84 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1006,47, -848,422, -84 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 749,498, -814,598, -72,0009 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1296,07, -837,271, -80 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1372,63, -594,537, -93 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1610,02, -624,65, -82,0047 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1927,89, -632,142, -75,7304 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2247,13, -542,43, -80,4307 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2248,79, -313,347, -89 ); - ent.v[ "angles" ] = ( 354, 88, 0 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1565,62, -302,052, -11,93 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1275,59, -730,21, -9 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1052,18, -797,13, 2,86112 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1092,6, -763,738, 1,93333 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1004,66, -723,214, -1,06668 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 947,235, -740,344, -11,7278 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 977,507, -642,478, -2,06506 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1017,93, -609,086, -2,99285 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 929,428, -586,553, -5,99286 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 872,565, -585,692, -16,654 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 875,331, -836,064, -44 ); - ent.v[ "angles" ] = ( 42,9573, 91,3255, 104,557 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 676,082, -825,64, -34,9157 ); - ent.v[ "angles" ] = ( 42,9573, 91,3255, 104,557 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1217,69, -834,916, -39,7072 ); - ent.v[ "angles" ] = ( 42,9573, 91,3255, 104,557 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1814,69, -566,735, -47,4894 ); - ent.v[ "angles" ] = ( 42,9744, 92,6924, 91,4886 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2452,57, -561,735, -44,7251 ); - ent.v[ "angles" ] = ( 42,9744, 92,6924, 91,4886 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1775,47, -571,487, -47,6838 ); - ent.v[ "angles" ] = ( 42,9573, 91,3259, -91,4429 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -683,269, -69,6538, 11,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -841,069, 92,2863, 8,35446 ); - ent.v[ "angles" ] = ( 359, 229, 0 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1013,16, -84,296, 54,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 25 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1263,97, -71,182, 54,125 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1264,83, -198,095, 8,125 ); - ent.v[ "angles" ] = ( 359,577, 60, 0,906646 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 234,077, -663,898, 13,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_blowing_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -742,184, -939,085, 0,125006 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_cougar_vehicle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -194,73, -195,79, -10,52 ); - ent.v[ "angles" ] = ( 358,323, 155,966, 4,60057 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_cougar_vehicle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 523,2, 568,8, 0 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 163,8 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3175,7, -413,789, 15,7215 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3183,23, -420,654, 43,175 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3175,36, -415,694, 0,124999 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -166,77, -58,2551, -50,4136 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_fire_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 254,499, -57,506, -44,5132 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -380,459, 703,401, -21,4474 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -667,161, 703,967, -21,5752 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -126,611, 704,248, -21,6291 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_bridge_rectangle_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -127,95, 407,707, -42,1471 ); - ent.v[ "angles" ] = ( 31, 90, 0 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_bridge_rectangle_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -383,837, 406,283, -42,0965 ); - ent.v[ "angles" ] = ( 31, 90, 0 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_bridge_rectangle_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -670,658, 406,34, -42,0374 ); - ent.v[ "angles" ] = ( 31, 90, 0 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_bridge_rectangle_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 184,418, 962,497, -25,9691 ); - ent.v[ "angles" ] = ( 43, 180, 0 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_under_smoke" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -658,134, 366,129, -196,821 ); - ent.v[ "angles" ] = ( 353, 88, 0 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_god_ray_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1007,15, -466,265, -10,875 ); - ent.v[ "angles" ] = ( 47, 90, 180 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1091,05, 854,894, 23,9116 ); - ent.v[ "angles" ] = ( 341, 78, 0 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2698,07, 700,865, 13,6722 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 163 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_smoke_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2745,19, 708,526, 42,3206 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 163 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_sparks_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1709,46, 484,034, -30,9105 ); - ent.v[ "angles" ] = ( 58, 350, 0 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2194,52, -72,3029, -13,5641 ); - ent.v[ "angles" ] = ( 90, 0, 180 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_bridge_sparks_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2122,96, 96,2786, -23,3226 ); - ent.v[ "angles" ] = ( 31,9967, 179,907, -178,265 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 775,796, 7,37119, 113,66 ); - ent.v[ "angles" ] = ( 90, 0, 180 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 655,05, 71,7911, 113,661 ); - ent.v[ "angles" ] = ( 90, 0, 180 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 916,724, 108,33, 113,662 ); - ent.v[ "angles" ] = ( 90, 0, 180 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 920,176, -54,2146, 113,661 ); - ent.v[ "angles" ] = ( 90, 0, 180 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1034,01, 69,0176, 113,652 ); - ent.v[ "angles" ] = ( 90, 0, 180 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1258,08, 66,3518, 113,653 ); - ent.v[ "angles" ] = ( 90, 0, 180 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_cmd_vehicle_cab" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1773,08, 459,611, -3,10805 ); - ent.v[ "angles" ] = ( 359,505, 186,6, 0 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_cmd_vehicle_trailer" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1769,79, 469,925, -3,08127 ); - ent.v[ "angles" ] = ( 359,435, 222,803, -0,139886 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2421,68, 105,218, -24,0471 ); - ent.v[ "angles" ] = ( 29, 360, -180 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -397,723, 1155,06, -29,3603 ); - ent.v[ "angles" ] = ( 51, 90, 0 ); - ent.v[ "delay" ] = -96; -} diff --git a/Multiplayer Maps/mp_bridge/maps/mp/mp_bridge.gsc b/Multiplayer Maps/mp_bridge/maps/mp/mp_bridge.gsc deleted file mode 100644 index f53feeb..0000000 --- a/Multiplayer Maps/mp_bridge/maps/mp/mp_bridge.gsc +++ /dev/null @@ -1,202 +0,0 @@ -#include maps/mp/gametypes/_deathicons; -#include maps/mp/gametypes/_spawning; -#include maps/mp/_compass; -#include common_scripts/utility; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_bridge_fx::main(); - precachemodel( "collision_physics_128x128x10" ); - precachemodel( "collision_missile_128x128x10" ); - precachemodel( "collision_physics_64x64x10" ); - precachemodel( "collision_missile_32x32x128" ); - precachemodel( "collision_clip_32x32x10" ); - precachemodel( "p6_bri_construction_tarp" ); - maps/mp/_load::main(); - maps/mp/mp_bridge_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_bridge" ); - setdvar( "compassmaxrange", "2100" ); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - spawncollision( "collision_physics_128x128x10", "collider", ( -1190, -876, -76 ), ( 342, 2,63, -90 ) ); - barricade1 = spawn( "script_model", ( 850,5, -812,5, 0 ) ); - barricade1.angles = vectorScale( ( 0, 0, 1 ), 90 ); - barricade1 setmodel( "p6_bri_construction_tarp" ); - spawncollision( "collision_missile_128x128x10", "collider", ( -2182, -185,5, -142 ), vectorScale( ( 0, 0, 1 ), 90 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -2310, -185,5, -142 ), vectorScale( ( 0, 0, 1 ), 90 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -2438, -185,5, -142 ), vectorScale( ( 0, 0, 1 ), 90 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -2182, -57,5, -142 ), vectorScale( ( 0, 0, 1 ), 90 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -2310, -57,5, -142 ), vectorScale( ( 0, 0, 1 ), 90 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -2438, -57,5, -142 ), vectorScale( ( 0, 0, 1 ), 90 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -2366,5, 91, -142 ), vectorScale( ( 0, 0, 1 ), 90 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -1401,5, 759,5, -158,5 ), vectorScale( ( 0, 0, 1 ), 92,40023 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -1309, 726,5, -158,5 ), ( 2,4, 359,9, -91,70473 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -1401,5, 634, -154,5 ), vectorScale( ( 0, 0, 1 ), 92,40023 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -1373,5, 634, -154,5 ), vectorScale( ( 0, 0, 1 ), 92,40023 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -1401,5, 559,5, -154,5 ), vectorScale( ( 0, 0, 1 ), 92,40023 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -1422, 375,5, -141,5 ), vectorScale( ( 0, 0, 1 ), 92,40023 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -1322,5, 438, -146 ), vectorScale( ( 0, 0, 1 ), 92,40023 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -1304,5, 438, -146 ), vectorScale( ( 0, 0, 1 ), 92,40023 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -1322,5, 378,5, -144 ), vectorScale( ( 0, 0, 1 ), 92,40023 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -1230, 396, -144 ), vectorScale( ( 0, 0, 1 ), 92,40023 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -1357, 248, -139 ), vectorScale( ( 0, 0, 1 ), 92,40023 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -1230, 285, -139 ), vectorScale( ( 0, 0, 1 ), 92,40023 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -1230, 248, -139 ), vectorScale( ( 0, 0, 1 ), 92,40023 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( 1370, -697, -134 ), vectorScale( ( 0, 0, 1 ), 90 ) ); - spawncollision( "collision_physics_64x64x10", "collider", ( 2432, -44, 30,5 ), ( 0, 270, -90 ) ); - spawncollision( "collision_physics_64x64x10", "collider", ( 2113,5, -44, 30,5 ), ( 0, 270, -90 ) ); - spawncollision( "collision_missile_32x32x128", "collider", ( -2292, -174, -7,5 ), vectorScale( ( 0, 0, 1 ), 270 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -2219,5, -184,5, 37 ), vectorScale( ( 0, 0, 1 ), 2,9 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -2197,5, -184,5, 33 ), vectorScale( ( 0, 0, 1 ), 23,9 ) ); - spawncollision( "collision_clip_32x32x10", "collider", ( 1923,5, 553,5, 43,5 ), ( 1,265, 43,3, -90 ) ); - maps/mp/gametypes/_spawning::level_use_unified_spawning( 1 ); - registerclientfield( "scriptmover", "police_car_lights", 1, 1, "int" ); - level thread destructible_lights(); - setdvar( "r_lightGridEnableTweaks", 1 ); - setdvar( "r_lightGridIntensity", 2 ); - setdvar( "r_lightGridContrast", 0 ); - level.ragdoll_override = ::ragdoll_override; - level.overrideplayerdeathwatchtimer = ::leveloverridetime; - level.useintermissionpointsonwavespawn = ::useintermissionpointsonwavespawn; - level thread pathing_fix(); -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2400", reset_dvars ); - ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1000", reset_dvars ); -} - -destructible_lights() -{ - wait 0,05; - destructibles = getentarray( "destructible", "targetname" ); - _a125 = destructibles; - _k125 = getFirstArrayKey( _a125 ); - while ( isDefined( _k125 ) ) - { - destructible = _a125[ _k125 ]; - if ( destructible.destructibledef == "veh_t6_dlc_police_car_destructible" ) - { - destructible thread destructible_think( "police_car_lights" ); - destructible setclientfield( "police_car_lights", 1 ); - } - _k125 = getNextArrayKey( _a125, _k125 ); - } -} - -destructible_think( clientfield ) -{ - self waittill_any( "death", "destructible_base_piece_death" ); - self setclientfield( clientfield, 0 ); -} - -ragdoll_override( idamage, smeansofdeath, sweapon, shitloc, vdir, vattackerorigin, deathanimduration, einflictor, ragdoll_jib, body ) -{ - if ( smeansofdeath == "MOD_FALLING" ) - { - deathanim = body getcorpseanim(); - startfrac = deathanimduration / 1000; - if ( animhasnotetrack( deathanim, "start_ragdoll" ) ) - { - times = getnotetracktimes( deathanim, "start_ragdoll" ); - if ( isDefined( times ) ) - { - startfrac = times[ 0 ]; - } - } - self.body = body; - if ( !isDefined( self.switching_teams ) ) - { - thread maps/mp/gametypes/_deathicons::adddeathicon( body, self, self.team, 5 ); - } - self thread water_spash(); - return 1; - } - return 0; -} - -water_spash() -{ - self endon( "disconnect" ); - self endon( "spawned_player" ); - self endon( "joined_team" ); - self endon( "joined_spectators" ); - trace = groundtrace( self.origin, self.origin - vectorScale( ( 0, 0, 1 ), 2048 ), 0, self.body ); - if ( trace[ "surfacetype" ] == "water" ) - { - while ( self.origin[ 2 ] > ( trace[ "position" ][ 2 ] + 5 ) ) - { - wait 0,05; - } - bone = self gettagorigin( "j_spinelower" ); - origin = ( bone[ 0 ], bone[ 1 ], trace[ "position" ][ 2 ] + 2,5 ); - self playsound( "mpl_splash_death" ); - playfx( level._effect[ "water_splash" ], origin ); - } -} - -leveloverridetime( defaulttime ) -{ - if ( self isinwater() ) - { - return 1; - } - return defaulttime; -} - -useintermissionpointsonwavespawn() -{ - return self isinwater(); -} - -isinwater() -{ - triggers = getentarray( "trigger_hurt", "classname" ); - _a212 = triggers; - _k212 = getFirstArrayKey( _a212 ); - while ( isDefined( _k212 ) ) - { - trigger = _a212[ _k212 ]; - if ( trigger.origin[ 2 ] > level.mapcenter[ 2 ] ) - { - } - else - { - if ( self istouching( trigger ) ) - { - return 1; - } - } - _k212 = getNextArrayKey( _a212, _k212 ); - } - return 0; -} - -pathing_fix() -{ - wait 1; - nodes = getallnodes(); - disconnect_node( nodes[ 96 ] ); - disconnect_node( nodes[ 600 ] ); -} - -disconnect_node( node ) -{ - ent = spawn( "script_model", node.origin, 1 ); - ent setmodel( level.deployedshieldmodel ); - ent hide(); - ent disconnectpaths(); - ent.origin -= vectorScale( ( 0, 0, 1 ), 64 ); -} diff --git a/Multiplayer Maps/mp_bridge/maps/mp/mp_bridge_amb.gsc b/Multiplayer Maps/mp_bridge/maps/mp/mp_bridge_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_bridge/maps/mp/mp_bridge_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_bridge/maps/mp/mp_bridge_fx.gsc b/Multiplayer Maps/mp_bridge/maps/mp/mp_bridge_fx.gsc deleted file mode 100644 index df05057..0000000 --- a/Multiplayer Maps/mp_bridge/maps/mp/mp_bridge_fx.gsc +++ /dev/null @@ -1,87 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); -#using_animtree( "fxanim_props_dlc3" ); - -main() -{ - precache_fxanim_props(); - precache_fxanim_props_dlc3(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_bridge_fx::main(); -} - -precache_scripted_fx() -{ - level._effect[ "water_splash" ] = loadfx( "bio/player/fx_player_water_splash_mp" ); -} - -precache_createfx_fx() -{ - level._effect[ "fx_mp_carrier_smoke_center" ] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_center" ); - level._effect[ "fx_mp_bridge_smoke_md" ] = loadfx( "maps/mp_maps/fx_mp_bridge_smoke_md" ); - level._effect[ "fx_mp_bridge_smoke_sm" ] = loadfx( "maps/mp_maps/fx_mp_bridge_smoke_sm" ); - level._effect[ "fx_mp_bridge_smoke_area" ] = loadfx( "maps/mp_maps/fx_mp_bridge_smoke_area" ); - level._effect[ "fx_mp_bridge_smoke_vista" ] = loadfx( "maps/mp_maps/fx_mp_bridge_smoke_vista" ); - level._effect[ "fx_mp_bridge_under_smoke" ] = loadfx( "maps/mp_maps/fx_mp_bridge_under_smoke" ); - level._effect[ "fx_mp_bridge_under_smoke_lg" ] = loadfx( "maps/mp_maps/fx_mp_bridge_under_smoke_lg" ); - level._effect[ "fx_mp_bridge_fire_med" ] = loadfx( "maps/mp_maps/fx_mp_bridge_fire_med" ); - level._effect[ "fx_mp_bridge_fire_sm" ] = loadfx( "maps/mp_maps/fx_mp_bridge_fire_sm" ); - level._effect[ "fx_mp_bridge_fire_fireball" ] = loadfx( "maps/mp_maps/fx_mp_bridge_fire_fireball" ); - level._effect[ "fx_mp_elec_spark_burst_xsm_thin_runner" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin_runner" ); - level._effect[ "fx_mp_bridge_spark_light_runner" ] = loadfx( "maps/mp_maps/fx_mp_bridge_spark_light_runner" ); - level._effect[ "fx_mp_bridge_spark_light02_runner" ] = loadfx( "maps/mp_maps/fx_mp_bridge_spark_light02_runner" ); - level._effect[ "fx_mp_bridge_spark_light" ] = loadfx( "maps/mp_maps/fx_mp_bridge_spark_light" ); - level._effect[ "fx_mp_bridge_spark_loop" ] = loadfx( "maps/mp_maps/fx_mp_bridge_spark_loop" ); - level._effect[ "fx_mp_bridge_sparks_loop_sm" ] = loadfx( "maps/mp_maps/fx_mp_bridge_sparks_loop_sm" ); - level._effect[ "fx_mp_bridge_sparks_sm_runner" ] = loadfx( "maps/mp_maps/fx_mp_bridge_sparks_sm_runner" ); - level._effect[ "fx_vertigo_rectangle_light01" ] = loadfx( "light/fx_vertigo_rectangle_light01" ); - level._effect[ "fx_mp_bridge_god_ray_01" ] = loadfx( "maps/mp_maps/fx_mp_bridge_god_ray_01" ); - level._effect[ "fx_mp_bridge_god_ray_02" ] = loadfx( "maps/mp_maps/fx_mp_bridge_god_ray_02" ); - level._effect[ "fx_mp_bridge_god_ray_03" ] = loadfx( "maps/mp_maps/fx_mp_bridge_god_ray_03" ); - level._effect[ "fx_bridge_street_light" ] = loadfx( "light/fx_bridge_street_light" ); - level._effect[ "fx_vertigo_vista_glare01" ] = loadfx( "light/fx_vertigo_vista_glare01" ); - level._effect[ "fx_vertigo_vista_glare02" ] = loadfx( "light/fx_vertigo_vista_glare02" ); - level._effect[ "fx_bridge_vista_glare_red" ] = loadfx( "light/fx_bridge_vista_glare_red" ); - level._effect[ "fx_mp_light_cougar_vehicle" ] = loadfx( "maps/mp_maps/fx_mp_light_cougar_vehicle" ); - level._effect[ "fx_mp_light_cmd_vehicle_cab" ] = loadfx( "maps/mp_maps/fx_mp_light_cmd_vehicle_cab" ); - level._effect[ "fx_mp_light_cmd_vehicle_trailer" ] = loadfx( "maps/mp_maps/fx_mp_light_cmd_vehicle_trailer" ); - level._effect[ "fx_bridge_rectangle_light" ] = loadfx( "light/fx_bridge_rectangle_light" ); - level._effect[ "fx_dust_crumble_lg_runner" ] = loadfx( "dirt/fx_dust_crumble_lg_runner" ); - level._effect[ "fx_dust_crumble_windy_runner" ] = loadfx( "dirt/fx_dust_crumble_windy_runner" ); - level._effect[ "fx_mp_bridge_blowing_ash" ] = loadfx( "maps/mp_maps/fx_mp_bridge_blowing_ash" ); - level._effect[ "fx_mp_bridge_blowing_dust" ] = loadfx( "maps/mp_maps/fx_mp_bridge_blowing_dust" ); - level._effect[ "fx_mp_light_dust_motes_md" ] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); - level._effect[ "fx_mp_castaway_air_dust_blow" ] = loadfx( "maps/mp_maps/fx_mp_castaway_air_dust_blow" ); - level._effect[ "fx_mp_bridge_air_dust_blow" ] = loadfx( "maps/mp_maps/fx_mp_bridge_air_dust_blow" ); - level._effect[ "fx_paper_interior_short" ] = loadfx( "debris/fx_paper_interior_short" ); - level._effect[ "fx_lf_mp_bridge_sun" ] = loadfx( "lens_flares/fx_lf_mp_bridge_sun" ); - level._effect[ "fx_mp_elec_spark_burst_xsm_thin" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin" ); - level._effect[ "fx_mp_light_police_car" ] = loadfx( "maps/mp_maps/fx_mp_light_police_car" ); -} - -precache_fxanim_props() -{ - level.scr_anim = []; - level.scr_anim[ "fxanim_props" ] = []; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_01" ] = %fxanim_gp_seagull_circle_01_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_02" ] = %fxanim_gp_seagull_circle_02_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_03" ] = %fxanim_gp_seagull_circle_03_anim; - level.scr_anim[ "fxanim_props" ][ "wirespark_long" ] = %fxanim_gp_wirespark_long_anim; - level.scr_anim[ "fxanim_props" ][ "wirespark_med" ] = %fxanim_gp_wirespark_med_anim; -} - -precache_fxanim_props_dlc3() -{ - level.scr_anim[ "fxanim_props_dlc3" ] = []; - level.scr_anim[ "fxanim_props_dlc3" ][ "wires_01" ] = %fxanim_mp_bridge_wires_01_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "wires_02" ] = %fxanim_mp_bridge_wires_02_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "wires_03" ] = %fxanim_mp_bridge_wires_03_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "truck_parts" ] = %viewmodel_fxanim_mp_bridge_truck_parts_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "truck_wires" ] = %fxanim_mp_bridge_truck_wires_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "control_wires" ] = %fxanim_mp_bridge_control_wires_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "wires_billboard" ] = %fxanim_mp_bridge_wires_billboard_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "wires_generator" ] = %fxanim_mp_bridge_wires_generator_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "wires_road_hole" ] = %fxanim_mp_bridge_wires_road_hole_anim; -} diff --git a/Multiplayer Maps/mp_carrier/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_carrier/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_carrier/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_carrier/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_carrier/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_carrier/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_carrier/maps/mp/createart/mp_carrier_art.gsc b/Multiplayer Maps/mp_carrier/maps/mp/createart/mp_carrier_art.gsc deleted file mode 100644 index cc71997..0000000 --- a/Multiplayer Maps/mp_carrier/maps/mp/createart/mp_carrier_art.gsc +++ /dev/null @@ -1,25 +0,0 @@ - -main() -{ - level.tweakfile = 1; - setdvar( "scr_fog_exp_halfplane", "3759.28" ); - setdvar( "scr_fog_exp_halfheight", "243.735" ); - setdvar( "scr_fog_nearplane", "601.593" ); - setdvar( "scr_fog_red", "0.806694" ); - setdvar( "scr_fog_green", "0.962521" ); - setdvar( "scr_fog_blue", "0.9624" ); - setdvar( "scr_fog_baseheight", "-475.268" ); - setdvar( "visionstore_glowTweakEnable", "0" ); - setdvar( "visionstore_glowTweakRadius0", "5" ); - setdvar( "visionstore_glowTweakRadius1", "" ); - setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); - setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); - setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); - setdvar( "visionstore_glowTweakBloomIntensity1", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); - visionsetnaked( "mp_carrier", 1 ); - setdvar( "r_lightGridEnableTweaks", 1 ); - setdvar( "r_lightGridIntensity", 1 ); - setdvar( "r_lightGridContrast", 0 ); -} diff --git a/Multiplayer Maps/mp_carrier/maps/mp/createfx/mp_carrier_fx.gsc b/Multiplayer Maps/mp_carrier/maps/mp/createfx/mp_carrier_fx.gsc deleted file mode 100644 index f02ae64..0000000 --- a/Multiplayer Maps/mp_carrier/maps/mp/createfx/mp_carrier_fx.gsc +++ /dev/null @@ -1,885 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_vista_wake01" ); - ent.v[ "origin" ] = ( -58,2015, -18360,2, -714,482 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_vista_wake01" ); - ent.v[ "origin" ] = ( -10700,7, 16079,5, -669,519 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_med" ); - ent.v[ "origin" ] = ( -21482,5, -2505,56, -694,797 ); - ent.v[ "angles" ] = ( 357, 180, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_med" ); - ent.v[ "origin" ] = ( -10481,6, 20165,4, -710,126 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_vista_wake01" ); - ent.v[ "origin" ] = ( -9126,13, -13552,4, -715,212 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_vista_wake01" ); - ent.v[ "origin" ] = ( 8665,18, 13595,2, -700,893 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_embers" ); - ent.v[ "origin" ] = ( -3854,6, 79,8424, 183,125 ); - ent.v[ "angles" ] = ( 272, 90, -111 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_center_sm" ); - ent.v[ "origin" ] = ( -1319,65, -363,628, 64,3916 ); - ent.v[ "angles" ] = ( 302,901, 135,003, -145,086 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_white" ); - ent.v[ "origin" ] = ( -513,153, 1362,69, -324,875 ); - ent.v[ "angles" ] = ( 272,603, 130,638, -139,606 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_white" ); - ent.v[ "origin" ] = ( 782,881, -1511,68, -455,222 ); - ent.v[ "angles" ] = ( 276,155, 62,3059, -53,7455 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_burning_vista" ); - ent.v[ "origin" ] = ( -15694,8, 16261,5, -290,759 ); - ent.v[ "angles" ] = ( 275,026, 184,097, -4,82657 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_sm" ); - ent.v[ "origin" ] = ( 6505,5, 13349,9, -328,171 ); - ent.v[ "angles" ] = ( 271,414, 42, 134,991 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_sm" ); - ent.v[ "origin" ] = ( -12455,3, -13247, -470,402 ); - ent.v[ "angles" ] = ( 273, 87, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_signal_lights" ); - ent.v[ "origin" ] = ( -5473,25, 905,82, 209,125 ); - ent.v[ "angles" ] = ( 270, 7,12502, -84,1249 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_center" ); - ent.v[ "origin" ] = ( -3977,28, 46,9893, 55,2842 ); - ent.v[ "angles" ] = ( 280,413, 148,311, -150 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_center" ); - ent.v[ "origin" ] = ( -4941,86, -87,4292, 56,2784 ); - ent.v[ "angles" ] = ( 288,143, 211,092, 145,879 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_lg" ); - ent.v[ "origin" ] = ( -3969,86, 78,2687, 74,125 ); - ent.v[ "angles" ] = ( 278,062, 262,855, 97,0749 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_lg" ); - ent.v[ "origin" ] = ( -5021,34, -113,987, 68 ); - ent.v[ "angles" ] = ( 293,034, 343,215, 18,1473 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_whisp" ); - ent.v[ "origin" ] = ( -4937,9, 17,0403, 30,7431 ); - ent.v[ "angles" ] = ( 273, 90, 87 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_med" ); - ent.v[ "origin" ] = ( -5060,28, 146,711, 29,8151 ); - ent.v[ "angles" ] = ( 297,457, 339,072, -1,6175 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); - ent.v[ "origin" ] = ( -5367,53, 133,109, 34,8895 ); - ent.v[ "angles" ] = ( 288,292, 349,876, 9,59762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); - ent.v[ "origin" ] = ( -5390,14, 63,707, 32,0963 ); - ent.v[ "angles" ] = ( 288,292, 349,876, 9,59762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_sm" ); - ent.v[ "origin" ] = ( -5409,74, 68,626, 32 ); - ent.v[ "angles" ] = ( 283,892, 191,934, 179,103 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_sm" ); - ent.v[ "origin" ] = ( -5377,72, 140,05, 35,7386 ); - ent.v[ "angles" ] = ( 284,984, 176,097, -172,506 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_sm" ); - ent.v[ "origin" ] = ( -5076,63, -71,1425, 75,5114 ); - ent.v[ "angles" ] = ( 320,933, 100,085, -125,612 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); - ent.v[ "origin" ] = ( -5080,25, -59,0195, 78,5789 ); - ent.v[ "angles" ] = ( 288,292, 349,876, 9,59762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_med" ); - ent.v[ "origin" ] = ( -4091,42, 131,545, 50,4025 ); - ent.v[ "angles" ] = ( 276,611, 296,668, 45,7822 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_whisp" ); - ent.v[ "origin" ] = ( -4030,94, 131,781, 44,125 ); - ent.v[ "angles" ] = ( 273, 90, 79 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_whisp" ); - ent.v[ "origin" ] = ( -4445, -195,563, 30,3438 ); - ent.v[ "angles" ] = ( 275,972, 84,4913, 71,4936 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); - ent.v[ "origin" ] = ( -4603,88, -155,65, 30,9479 ); - ent.v[ "angles" ] = ( 288,292, 349,876, 9,59762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_sm" ); - ent.v[ "origin" ] = ( -4598,65, 261,54, 53,6646 ); - ent.v[ "angles" ] = ( 272,126, 137,547, -170,002 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_whisp" ); - ent.v[ "origin" ] = ( -4281,06, 44,5, 44,125 ); - ent.v[ "angles" ] = ( 273, 90, 79 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_whisp" ); - ent.v[ "origin" ] = ( -4609,3, 278,458, 48,332 ); - ent.v[ "angles" ] = ( 273, 90, 87 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_med" ); - ent.v[ "origin" ] = ( -4428,7, -211,233, 36 ); - ent.v[ "angles" ] = ( 274,224, 167,837, 168,144 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_sm" ); - ent.v[ "origin" ] = ( -4453,47, -192,678, 35 ); - ent.v[ "angles" ] = ( 298,931, 143,841, -170,31 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_spark_bounce_runner" ); - ent.v[ "origin" ] = ( -4785,97, 42,2405, 115,005 ); - ent.v[ "angles" ] = ( 64,8322, 222,596, 82,9304 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_spark_bounce_runner" ); - ent.v[ "origin" ] = ( -4806,01, -18,3941, 132,944 ); - ent.v[ "angles" ] = ( 40,9317, 51,6052, -86,0274 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); - ent.v[ "origin" ] = ( -4606,44, 274,965, 59,9653 ); - ent.v[ "angles" ] = ( 280,318, 298,276, 54,5878 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); - ent.v[ "origin" ] = ( -5128,75, -82,0912, 41,6681 ); - ent.v[ "angles" ] = ( 288,292, 349,876, 9,59762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_lg" ); - ent.v[ "origin" ] = ( -4929,69, -96,3975, 63 ); - ent.v[ "angles" ] = ( 293,034, 343,215, 18,1473 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_white" ); - ent.v[ "origin" ] = ( -3959,06, 1892,55, -305,286 ); - ent.v[ "angles" ] = ( 272,236, 54,426, -57,4434 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_white" ); - ent.v[ "origin" ] = ( -3317,06, -2486,78, -148,666 ); - ent.v[ "angles" ] = ( 272,236, 54,426, -57,4434 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_whisp" ); - ent.v[ "origin" ] = ( -4011,45, -38,307, 44,125 ); - ent.v[ "angles" ] = ( 271,008, 95,957, 93,0456 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_embers" ); - ent.v[ "origin" ] = ( -3868,3, 1,7955, 179,57 ); - ent.v[ "angles" ] = ( 270, 0, 14 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_embers" ); - ent.v[ "origin" ] = ( -5019,26, -69,3119, 183,125 ); - ent.v[ "angles" ] = ( 270, 0, -12 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_embers" ); - ent.v[ "origin" ] = ( -4976,18, -169,25, 197,125 ); - ent.v[ "angles" ] = ( 270, 359,987, 2,01273 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_side" ); - ent.v[ "origin" ] = ( -8535,18, -13083,5, -776,479 ); - ent.v[ "angles" ] = ( 6, 160, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_side" ); - ent.v[ "origin" ] = ( 162,964, -17807,9, -763,41 ); - ent.v[ "angles" ] = ( 2,99634, 159,996, -0,157169 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_side" ); - ent.v[ "origin" ] = ( -10291,5, 15930,1, -780,849 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 205 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_side" ); - ent.v[ "origin" ] = ( 8435,41, 13172,4, -832,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 200 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); - ent.v[ "origin" ] = ( -4281,19, 91,9115, 61,2291 ); - ent.v[ "angles" ] = ( 356,963, 131,232, 1,89006 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_sm" ); - ent.v[ "origin" ] = ( -4280,21, 94,8366, 49,8955 ); - ent.v[ "angles" ] = ( 276,977, 176,134, 159,98 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); - ent.v[ "origin" ] = ( -5077,41, -71,4887, 77 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 61 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); - ent.v[ "origin" ] = ( -4591,18, 226,715, 66 ); - ent.v[ "angles" ] = ( 332, 356, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_sprinkle_water" ); - ent.v[ "origin" ] = ( -4120,79, -1860,87, 14,125 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_sprinkle_water" ); - ent.v[ "origin" ] = ( -4720,88, -1708,38, 3,875 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_wall_water_bottom" ); - ent.v[ "origin" ] = ( -4710,57, -1712,12, -75,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_wall_water_bottom" ); - ent.v[ "origin" ] = ( -4727,65, -1696,49, -75,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_splash_detail" ); - ent.v[ "origin" ] = ( -4105,71, -1846,54, -75,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_splash_detail" ); - ent.v[ "origin" ] = ( -4135,09, -1856,9, -75,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_splash_detail" ); - ent.v[ "origin" ] = ( -4709,19, -1716,29, -75,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_splash_detail" ); - ent.v[ "origin" ] = ( -4732,58, -1689,17, -75,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_xsm" ); - ent.v[ "origin" ] = ( -13732,3, 15785,8, -30,112 ); - ent.v[ "angles" ] = ( 274, 8, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_xsm" ); - ent.v[ "origin" ] = ( -10752,1, -13197, -318,155 ); - ent.v[ "angles" ] = ( 283, 345, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_lg" ); - ent.v[ "origin" ] = ( -1371,09, -357,367, 46,3916 ); - ent.v[ "angles" ] = ( 336,341, 174,239, 4,35777 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_lg" ); - ent.v[ "origin" ] = ( -2200,05, 405,969, 15,125 ); - ent.v[ "angles" ] = ( 278, 270, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_med" ); - ent.v[ "origin" ] = ( -2228,46, 398,769, 54,8563 ); - ent.v[ "angles" ] = ( 290,215, 354,817, 5,71139 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_med" ); - ent.v[ "origin" ] = ( -2463,6, 789,889, 53,125 ); - ent.v[ "angles" ] = ( 290,215, 354,817, 10,7115 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_whisp" ); - ent.v[ "origin" ] = ( -2094,03, 538,268, 51,125 ); - ent.v[ "angles" ] = ( 275,972, 84,4895, 99,4953 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_sm" ); - ent.v[ "origin" ] = ( -2465,97, 773,06, 44,125 ); - ent.v[ "angles" ] = ( 284,008, 149,965, -149,654 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_med" ); - ent.v[ "origin" ] = ( -2365,74, 785,716, 93,523 ); - ent.v[ "angles" ] = ( 290,215, 354,817, 10,7115 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_whisp" ); - ent.v[ "origin" ] = ( -2455,27, 745,334, 59,7645 ); - ent.v[ "angles" ] = ( 275,972, 84,4895, 99,4953 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); - ent.v[ "origin" ] = ( -3973,7, -1130,53, 1381,58 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); - ent.v[ "origin" ] = ( -3972,11, -1898,07, 1381,59 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); - ent.v[ "origin" ] = ( -4835,98, -1513,69, 827,88 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_sm" ); - ent.v[ "origin" ] = ( -3447,69, -1683,97, -23,875 ); - ent.v[ "angles" ] = ( 271, 256,006, 76,9945 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_sm" ); - ent.v[ "origin" ] = ( -4020,17, -1905,87, -19,2877 ); - ent.v[ "angles" ] = ( 270, 0, -21 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_sm" ); - ent.v[ "origin" ] = ( -4236,28, -1904,52, -15,7601 ); - ent.v[ "angles" ] = ( 270, 358,457, -19,4571 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_sm" ); - ent.v[ "origin" ] = ( -4459,57, -1908, -18,5915 ); - ent.v[ "angles" ] = ( 270, 357,973, -20,9727 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_sm" ); - ent.v[ "origin" ] = ( -4675,08, -1908,77, -18,4708 ); - ent.v[ "angles" ] = ( 270, 358,457, -22,4571 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_sm" ); - ent.v[ "origin" ] = ( -4556,52, -1970,96, -23,8727 ); - ent.v[ "angles" ] = ( 276, 76, -76 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_med" ); - ent.v[ "origin" ] = ( -2702,43, 1868,7, -120,875 ); - ent.v[ "angles" ] = ( 273, 274, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); - ent.v[ "origin" ] = ( -3427,92, -81,8574, 21,9565 ); - ent.v[ "angles" ] = ( 317,146, 175,806, 2,41347 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); - ent.v[ "origin" ] = ( -3422,85, -69,953, 31,0785 ); - ent.v[ "angles" ] = ( 288,292, 349,876, 9,59762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); - ent.v[ "origin" ] = ( -2969,28, -62,7099, 177,277 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_whisp" ); - ent.v[ "origin" ] = ( -2234,61, 191,542, 33,2623 ); - ent.v[ "angles" ] = ( 275,972, 84,4895, 99,4953 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_med" ); - ent.v[ "origin" ] = ( -2254,46, 191,494, 30,2707 ); - ent.v[ "angles" ] = ( 274,68, 313,059, 51,9166 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_carrier_hose_water" ); - ent.v[ "origin" ] = ( -5944,17, 176,554, 46,125 ); - ent.v[ "angles" ] = ( 270, 0, -178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( -5352,85, 1117,35, 93,125 ); - ent.v[ "angles" ] = ( 327,422, 149,504, 72,9211 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -5517,17, 949,536, 92,125 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -4846,19, 926,685, 110,143 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 176 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -4266,9, -1344,87, 102,125 ); - ent.v[ "angles" ] = ( 25,0027, 269,016, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); - ent.v[ "origin" ] = ( -4292,1, -369,65, 44,125 ); - ent.v[ "angles" ] = ( 288,292, 349,876, 9,59762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_spark_bounce_runner" ); - ent.v[ "origin" ] = ( -6044,17, -971,258, 142,232 ); - ent.v[ "angles" ] = ( 64,8322, 222,596, 82,9304 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); - ent.v[ "origin" ] = ( -5063,26, 861,135, 159,591 ); - ent.v[ "angles" ] = ( 90, 3,96799, -176,032 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); - ent.v[ "origin" ] = ( -5061,54, 925,1, 158,584 ); - ent.v[ "angles" ] = ( 90, 3,96799, -176,032 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); - ent.v[ "origin" ] = ( -5061,25, 986,927, 158,588 ); - ent.v[ "angles" ] = ( 90, 3,96799, -176,032 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); - ent.v[ "origin" ] = ( -5150,78, 988,019, 158,252 ); - ent.v[ "angles" ] = ( 90, 3,96799, -176,032 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); - ent.v[ "origin" ] = ( -5151,44, 860,562, 159,255 ); - ent.v[ "angles" ] = ( 90, 3,96799, -176,032 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); - ent.v[ "origin" ] = ( -5148,66, 927,492, 158,247 ); - ent.v[ "angles" ] = ( 90, 3,96799, -176,032 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); - ent.v[ "origin" ] = ( -5234,71, 985,008, 159,256 ); - ent.v[ "angles" ] = ( 90, 3,96799, -176,032 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); - ent.v[ "origin" ] = ( -5232,74, 861,248, 159,259 ); - ent.v[ "angles" ] = ( 90, 3,96799, -176,032 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); - ent.v[ "origin" ] = ( -5231,04, 926,214, 159,251 ); - ent.v[ "angles" ] = ( 90, 3,96799, -176,032 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); - ent.v[ "origin" ] = ( -5311,23, 986,513, 159,253 ); - ent.v[ "angles" ] = ( 90, 3,96799, -176,032 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); - ent.v[ "origin" ] = ( -5310,36, 862,11, 159,256 ); - ent.v[ "angles" ] = ( 90, 3,96799, -176,032 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_carrier_tube_light_sq" ); - ent.v[ "origin" ] = ( -5311,74, 925,849, 159,248 ); - ent.v[ "angles" ] = ( 90, 3,96799, -176,032 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); - ent.v[ "origin" ] = ( -2990,27, -1425,42, -23,5496 ); - ent.v[ "angles" ] = ( 345,698, 169,704, 7,42529 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); - ent.v[ "origin" ] = ( -2990,66, -1431,45, -25,7327 ); - ent.v[ "angles" ] = ( 288,484, 346,765, 27,5501 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); - ent.v[ "origin" ] = ( -3008,45, -1519,56, -58,1315 ); - ent.v[ "angles" ] = ( 284,555, 358,91, 27,2706 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); - ent.v[ "origin" ] = ( -2200,53, 181,707, 10,1593 ); - ent.v[ "angles" ] = ( 317,146, 175,806, 2,41347 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_sm" ); - ent.v[ "origin" ] = ( -2228,89, 187,158, 5,48325 ); - ent.v[ "angles" ] = ( 345, 173, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( -2893,2, -45,4313, 148,287 ); - ent.v[ "angles" ] = ( 358,281, 50,0353, -179,306 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( -2974,98, 15,7562, 149,692 ); - ent.v[ "angles" ] = ( 358,281, 50,0353, -179,306 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); - ent.v[ "origin" ] = ( -2968,33, 14,4817, 147,436 ); - ent.v[ "angles" ] = ( 274,028, 270,507, 14,9761 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); - ent.v[ "origin" ] = ( -2892,41, -53,2338, 149,018 ); - ent.v[ "angles" ] = ( 274,028, 270,507, 14,9761 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); - ent.v[ "origin" ] = ( -2557,05, 726,475, 109,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); - ent.v[ "origin" ] = ( -1865,89, 31,8837, 48,125 ); - ent.v[ "angles" ] = ( 294, 0, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); - ent.v[ "origin" ] = ( -2719,39, -628,071, 115,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); - ent.v[ "origin" ] = ( -3654,59, -1058,95, 89,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); - ent.v[ "origin" ] = ( -3624,6, -557,147, 80,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); - ent.v[ "origin" ] = ( -4939,88, -470,674, 64,125 ); - ent.v[ "angles" ] = ( 272, 270,003, 70,9956 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); - ent.v[ "origin" ] = ( -5515,04, -558,374, 99,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); - ent.v[ "origin" ] = ( -5346,74, 428,328, 100,767 ); - ent.v[ "angles" ] = ( 273,082, 143,357, -154,327 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); - ent.v[ "origin" ] = ( -5810,05, 342,903, 88,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); - ent.v[ "origin" ] = ( -5736,39, -359,219, 61,0693 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); - ent.v[ "origin" ] = ( -5616,28, 692,708, 94,2869 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); - ent.v[ "origin" ] = ( -3296,67, 547,707, 119,245 ); - ent.v[ "angles" ] = ( 270, 356,906, 36,094 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_med" ); - ent.v[ "origin" ] = ( -4274,38, 119,286, 44,125 ); - ent.v[ "angles" ] = ( 281,169, 309,125, 13,1377 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); - ent.v[ "origin" ] = ( -5288,9, -147,045, 93,125 ); - ent.v[ "angles" ] = ( 271,104, 287,171, 70,8336 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_med" ); - ent.v[ "origin" ] = ( -5202,3, 218,401, 45,9961 ); - ent.v[ "angles" ] = ( 274,176, 288,61, 38,9491 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); - ent.v[ "origin" ] = ( -4136,17, -659,741, 69,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); - ent.v[ "origin" ] = ( -2952,7, 30,9951, 70,9518 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); - ent.v[ "origin" ] = ( -4381,43, -1054,36, 65,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_sm" ); - ent.v[ "origin" ] = ( -4878,93, 60,5723, 33 ); - ent.v[ "angles" ] = ( 286,386, 156,261, 177,678 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); - ent.v[ "origin" ] = ( -4880,41, 72,9994, 43,8322 ); - ent.v[ "angles" ] = ( 288,292, 347,876, 9,5976 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_sm" ); - ent.v[ "origin" ] = ( -3953,09, -104,214, 44,125 ); - ent.v[ "angles" ] = ( 276,567, 39,3156, -67,3963 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_sm" ); - ent.v[ "origin" ] = ( -3939,66, -107,473, 48,9528 ); - ent.v[ "angles" ] = ( 315,281, 349,535, 1,14706 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_sm" ); - ent.v[ "origin" ] = ( -3459,76, -1670,08, -21,875 ); - ent.v[ "angles" ] = ( 271, 256,006, 76,9945 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_med" ); - ent.v[ "origin" ] = ( -2673,19, 1344,67, -290,875 ); - ent.v[ "angles" ] = ( 275,644, 321,987, 39,8366 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_xlg" ); - ent.v[ "origin" ] = ( -6531,17, 1097,36, -283,067 ); - ent.v[ "angles" ] = ( 275,981, 184,506, -175,494 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_xlg" ); - ent.v[ "origin" ] = ( -6582,02, -1250,14, -278,134 ); - ent.v[ "angles" ] = ( 272,184, 107,998, -126,968 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_mist" ); - ent.v[ "origin" ] = ( -8588,57, -12766,9, -561,241 ); - ent.v[ "angles" ] = ( 270, 0,205568, -0,205568 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_mist" ); - ent.v[ "origin" ] = ( -14091,9, -13489,7, -452,354 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_mist" ); - ent.v[ "origin" ] = ( -6462,06, -17808,7, -435,959 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_mist" ); - ent.v[ "origin" ] = ( 11,2148, -16553,5, -273,229 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_mist" ); - ent.v[ "origin" ] = ( -21214,4, -2214, -630,674 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_mist" ); - ent.v[ "origin" ] = ( -10149,3, 15391,4, -421,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_mist" ); - ent.v[ "origin" ] = ( -18681,2, 15370,4, -106,849 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_mist" ); - ent.v[ "origin" ] = ( 8291,97, 12459,5, -448,972 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_mist" ); - ent.v[ "origin" ] = ( 3323,2, 13603,8, -484,159 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_mist" ); - ent.v[ "origin" ] = ( -9888,85, 19843,6, -638,009 ); - ent.v[ "angles" ] = ( 279, 4, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_carrier_sun1" ); - ent.v[ "origin" ] = ( 38623,1, 90590,2, 8650,31 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_med" ); - ent.v[ "origin" ] = ( -4564,92, -1544,95, -450,125 ); - ent.v[ "angles" ] = ( 271,157, 149,399, -144,41 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_med" ); - ent.v[ "origin" ] = ( -5265,77, 1602,43, -346,726 ); - ent.v[ "angles" ] = ( 288,437, 267,003, 93,1525 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_xsm" ); - ent.v[ "origin" ] = ( 4387,92, 13115,7, -544,612 ); - ent.v[ "angles" ] = ( 274, 188, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_xsm" ); - ent.v[ "origin" ] = ( -12050,2, 15687,4, -393,525 ); - ent.v[ "angles" ] = ( 300,846, 79,0048, 111,848 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_xsm" ); - ent.v[ "origin" ] = ( -753,66, -18091,5, -395,443 ); - ent.v[ "angles" ] = ( 277, 345, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_burning_vista_xsm" ); - ent.v[ "origin" ] = ( -1519,06, -17954,7, -575,988 ); - ent.v[ "angles" ] = ( 283, 345, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_white" ); - ent.v[ "origin" ] = ( -1081,07, -1444,35, -443,202 ); - ent.v[ "angles" ] = ( 273,103, 190,141, 175,406 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_white" ); - ent.v[ "origin" ] = ( -3253,04, 1420,7, -509,43 ); - ent.v[ "angles" ] = ( 272,994, 322,174, 37,7963 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_white_med" ); - ent.v[ "origin" ] = ( -6055,61, -1461,02, -262,926 ); - ent.v[ "angles" ] = ( 271,157, 149,394, -169,406 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_med" ); - ent.v[ "origin" ] = ( -1293,77, -285,233, 60,3013 ); - ent.v[ "angles" ] = ( 290,215, 354,817, 5,71139 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_area" ); - ent.v[ "origin" ] = ( -1819,96, -281,825, 80,125 ); - ent.v[ "angles" ] = ( 270, 359,818, -0,818171 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_lg" ); - ent.v[ "origin" ] = ( -1373,5, -313,755, 45,125 ); - ent.v[ "angles" ] = ( 280,383, 227,744, 115,753 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fire_sprinkler_gush_splash_sm" ); - ent.v[ "origin" ] = ( -4720,53, -1707,86, -75,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fire_sprinkler_gush_splash_sm" ); - ent.v[ "origin" ] = ( -4116,44, -1857,15, -75,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_side" ); - ent.v[ "origin" ] = ( -522,152, 899,132, -728,155 ); - ent.v[ "angles" ] = ( 357,444, 176,534, 24,7667 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_side" ); - ent.v[ "origin" ] = ( -1604,54, 905,903, -748,42 ); - ent.v[ "angles" ] = ( 357,444, 176,534, 24,7667 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_side" ); - ent.v[ "origin" ] = ( 541,632, -1017,3, -716 ); - ent.v[ "angles" ] = ( 3,22013, 186,887, -6,00497 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_side" ); - ent.v[ "origin" ] = ( -540,782, -1112,97, -714 ); - ent.v[ "angles" ] = ( 2,99797, 174,365, -16,2623 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_side" ); - ent.v[ "origin" ] = ( -1469,87, -1083,49, -738,966 ); - ent.v[ "angles" ] = ( 2,83823, 176,778, -15,2345 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_smoke_fire_lg" ); - ent.v[ "origin" ] = ( -4942,81, -69,6983, 79,0716 ); - ent.v[ "angles" ] = ( 278,528, 290,839, 72,1579 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_vista_wake_side" ); - ent.v[ "origin" ] = ( -485,978, -17870,5, -765,265 ); - ent.v[ "angles" ] = ( 2,99634, 159,996, -0,157169 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_carrier_hazard_light" ); - ent.v[ "origin" ] = ( -2310,63, -376,682, 94,4275 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_carrier_hazard_light" ); - ent.v[ "origin" ] = ( -2309,65, -246,131, 94,9715 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_carrier_hazard_light" ); - ent.v[ "origin" ] = ( -2309,75, 320,981, 94,0247 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; -} diff --git a/Multiplayer Maps/mp_carrier/maps/mp/mp_carrier.gsc b/Multiplayer Maps/mp_carrier/maps/mp/mp_carrier.gsc deleted file mode 100644 index fe82c8d..0000000 --- a/Multiplayer Maps/mp_carrier/maps/mp/mp_carrier.gsc +++ /dev/null @@ -1,105 +0,0 @@ -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - level.overrideplayerdeathwatchtimer = ::leveloverridetime; - level.useintermissionpointsonwavespawn = ::useintermissionpointsonwavespawn; - maps/mp/mp_carrier_fx::main(); - maps/mp/_load::main(); - maps/mp/mp_carrier_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_carrier" ); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - level thread water_trigger_init(); -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2600", reset_dvars ); -} - -water_trigger_init() -{ - wait 3; - triggers = getentarray( "trigger_hurt", "classname" ); - _a53 = triggers; - _k53 = getFirstArrayKey( _a53 ); - while ( isDefined( _k53 ) ) - { - trigger = _a53[ _k53 ]; - if ( trigger.origin[ 2 ] > level.mapcenter[ 2 ] ) - { - } - else - { - trigger thread water_trigger_think(); - } - _k53 = getNextArrayKey( _a53, _k53 ); - } -} - -water_trigger_think() -{ - for ( ;; ) - { - self waittill( "trigger", entity ); - if ( isplayer( entity ) ) - { - trace = worldtrace( entity.origin + vectorScale( ( 0, 0, 1 ), 30 ), entity.origin - vectorScale( ( 0, 0, 1 ), 256 ) ); - if ( trace[ "surfacetype" ] == "none" ) - { - entity playsound( "mpl_splash_death" ); - playfx( level._effect[ "water_splash" ], entity.origin + vectorScale( ( 0, 0, 1 ), 40 ) ); - } - } - } -} - -leveloverridetime( defaulttime ) -{ - if ( self isinwater() ) - { - return 0,4; - } - return defaulttime; -} - -useintermissionpointsonwavespawn() -{ - return self isinwater(); -} - -isinwater() -{ - triggers = getentarray( "trigger_hurt", "classname" ); - _a101 = triggers; - _k101 = getFirstArrayKey( _a101 ); - while ( isDefined( _k101 ) ) - { - trigger = _a101[ _k101 ]; - if ( trigger.origin[ 2 ] > level.mapcenter[ 2 ] ) - { - } - else - { - if ( self istouching( trigger ) ) - { - trace = worldtrace( self.origin + vectorScale( ( 0, 0, 1 ), 30 ), self.origin - vectorScale( ( 0, 0, 1 ), 256 ) ); - return trace[ "surfacetype" ] == "none"; - } - } - _k101 = getNextArrayKey( _a101, _k101 ); - } - return 0; -} diff --git a/Multiplayer Maps/mp_carrier/maps/mp/mp_carrier_amb.gsc b/Multiplayer Maps/mp_carrier/maps/mp/mp_carrier_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_carrier/maps/mp/mp_carrier_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_carrier/maps/mp/mp_carrier_fx.gsc b/Multiplayer Maps/mp_carrier/maps/mp/mp_carrier_fx.gsc deleted file mode 100644 index 87b3a8f..0000000 --- a/Multiplayer Maps/mp_carrier/maps/mp/mp_carrier_fx.gsc +++ /dev/null @@ -1,72 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); - -precache_util_fx() -{ -} - -precache_scripted_fx() -{ - level._effect[ "water_splash" ] = loadfx( "bio/player/fx_player_water_splash_mp" ); -} - -precache_createfx_fx() -{ - level._effect[ "fx_mp_light_dust_motes_md" ] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); - level._effect[ "fx_mp_elec_spark_burst_xsm_thin_runner" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin_runner" ); - level._effect[ "fx_mp_carrier_spark_bounce_runner" ] = loadfx( "maps/mp_maps/fx_mp_carrier_spark_bounce_runner" ); - level._effect[ "fx_mp_smk_plume_lg_blk" ] = loadfx( "maps/mp_maps/fx_mp_smk_plume_lg_blk" ); - level._effect[ "fx_mp_smk_plume_lg_blk_carrier" ] = loadfx( "maps/mp_maps/fx_mp_smk_plume_lg_blk_carrier" ); - level._effect[ "fx_mp_carrier_smoke_sm" ] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_sm" ); - level._effect[ "fx_mp_carrier_smoke_med" ] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_med" ); - level._effect[ "fx_mp_carrier_smoke_lg" ] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_lg" ); - level._effect[ "fx_mp_carrier_embers" ] = loadfx( "maps/mp_maps/fx_mp_carrier_embers" ); - level._effect[ "fx_mp_carrier_smoke_xlg" ] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_xlg" ); - level._effect[ "fx_mp_carrier_smoke_area" ] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_area" ); - level._effect[ "fx_mp_carrier_smoke_white" ] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_white" ); - level._effect[ "fx_mp_carrier_burning_vista" ] = loadfx( "maps/mp_maps/fx_mp_carrier_burning_vista" ); - level._effect[ "fx_mp_carrier_burning_vista_sm" ] = loadfx( "maps/mp_maps/fx_mp_carrier_burning_vista_sm" ); - level._effect[ "fx_mp_carrier_burning_vista_xsm" ] = loadfx( "maps/mp_maps/fx_mp_carrier_burning_vista_xsm" ); - level._effect[ "fx_mp_carrier_burning_vista_mist" ] = loadfx( "maps/mp_maps/fx_mp_carrier_burning_vista_mist" ); - level._effect[ "fx_mp_carrier_smoke_whisp" ] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_whisp" ); - level._effect[ "fx_mp_carrier_smoke_center" ] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_center" ); - level._effect[ "fx_mp_carrier_smoke_center_sm" ] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_center_sm" ); - level._effect[ "fx_mp_carrier_smoke_white_sm" ] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_white_sm" ); - level._effect[ "fx_mp_carrier_smoke_white_med" ] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_white_med" ); - level._effect[ "fx_mp_fumes_vent_xsm_int" ] = loadfx( "maps/mp_maps/fx_mp_fumes_vent_xsm_int" ); - level._effect[ "fx_mp_carrier_smoke_white_xlg" ] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_white_xlg" ); - level._effect[ "fx_mp_carrier_smoke_fire_sm" ] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_fire_sm" ); - level._effect[ "fx_mp_carrier_smoke_fire_med" ] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_fire_med" ); - level._effect[ "fx_mp_carrier_smoke_fire_lg" ] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_fire_lg" ); - level._effect[ "fx_mp_carrier_vista_wake01" ] = loadfx( "maps/mp_maps/fx_mp_carrier_vista_wake01" ); - level._effect[ "fx_mp_carrier_vista_wake_med" ] = loadfx( "maps/mp_maps/fx_mp_carrier_vista_wake_med" ); - level._effect[ "fx_mp_carrier_vista_wake_side" ] = loadfx( "maps/mp_maps/fx_mp_carrier_vista_wake_side" ); - level._effect[ "fx_mp_slums_sprinkle_water" ] = loadfx( "maps/mp_maps/fx_mp_slums_sprinkle_water" ); - level._effect[ "fx_wall_water_bottom" ] = loadfx( "water/fx_wall_water_bottom" ); - level._effect[ "fx_water_splash_detail" ] = loadfx( "water/fx_water_splash_detail" ); - level._effect[ "fx_carrier_hose_water" ] = loadfx( "water/fx_carrier_hose_water" ); - level._effect[ "fx_water_fire_sprinkler_gush_splash_sm" ] = loadfx( "water/fx_water_fire_sprinkler_gush_splash_sm" ); - level._effect[ "fx_mp_carrier_signal_lights" ] = loadfx( "maps/mp_maps/fx_mp_carrier_signal_lights" ); - level._effect[ "fx_window_god_ray" ] = loadfx( "light/fx_window_god_ray" ); - level._effect[ "fx_light_beacon_red_blink_fst" ] = loadfx( "light/fx_light_beacon_red_blink_fst_sm" ); - level._effect[ "fx_carrier_tube_light_sq" ] = loadfx( "light/fx_carrier_tube_light_sq" ); - level._effect[ "fx_carrier_hazard_light" ] = loadfx( "light/fx_carrier_hazard_light" ); - level._effect[ "fx_lf_mp_carrier_sun1" ] = loadfx( "lens_flares/fx_lf_mp_carrier_sun1" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "towing_crane" ] = %fxanim_mp_carrier_towing_crane_anim; - level.scr_anim[ "fxanim_props" ][ "sparking_wires_med" ] = %fxanim_gp_wirespark_med_anim; -} - -main() -{ - precache_util_fx(); - precache_createfx_fx(); - precache_scripted_fx(); - precache_fxanim_props(); - maps/mp/createfx/mp_carrier_fx::main(); - maps/mp/createart/mp_carrier_art::main(); -} diff --git a/Multiplayer Maps/mp_castaway/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_castaway/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_castaway/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_castaway/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_castaway/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_castaway/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_castaway/maps/mp/createfx/mp_castaway_fx.gsc b/Multiplayer Maps/mp_castaway/maps/mp/createfx/mp_castaway_fx.gsc deleted file mode 100644 index fd6499f..0000000 --- a/Multiplayer Maps/mp_castaway/maps/mp/createfx/mp_castaway_fx.gsc +++ /dev/null @@ -1,1605 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2309,11, 658,607, 55,2184 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 139 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2272,99, 607,501, 55,2496 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 184 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2296,89, 524,59, 53,2357 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 247 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 683,492, 2632,41, 50,1331 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 2 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 652,088, 2707,02, 50,0117 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 35 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 614,457, 2759,75, 50,3346 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 40 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 560,507, 2810,95, 48,8594 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 68 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 479,506, 2807,22, 51,5955 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 80 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 444,544, 2838,1, 50,824 ); - ent.v[ "angles" ] = ( 0,515095, 51, 0,857321 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1200,17, -938,649, 45 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 112 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1270,16, -997,653, 48,7685 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 201 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1211,3, -1085,04, 50,4368 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 238 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1114,59, -1044,34, 47,3283 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 348 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1140,62, -964,823, 49,4685 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 47 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 178,984, -1295,63, 49 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 232 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 252,374, -1322,76, 53 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 280 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 679,633, -1398,22, 48,2879 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 212 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 718,309, -1423,61, 49,0928 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 263 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2447,31, 615,365, 48,3262 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 615,983, 644,331, 161,413 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_dark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1384,3, 234,944, 149,107 ); - ent.v[ "angles" ] = ( 353, 186, 0 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_dark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1358,43, 75,9958, 140,416 ); - ent.v[ "angles" ] = ( 353, 186, 0 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_dark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1304,63, 126,641, 155,685 ); - ent.v[ "angles" ] = ( 353, 186, 0 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_dark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1080,89, 57,8276, 199,926 ); - ent.v[ "angles" ] = ( 353, 186, 0 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_dark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 929,338, 170,667, 246,904 ); - ent.v[ "angles" ] = ( 350,735, 208,306, -3,77909 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_dark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 898,177, 17,1387, 248,148 ); - ent.v[ "angles" ] = ( 0,121878, 95,0073, 6,99893 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_dark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 408,851, 338,904, 118,73 ); - ent.v[ "angles" ] = ( 358,192, 110,893, 6,76373 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_dark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 117,157, 779,618, 65,4429 ); - ent.v[ "angles" ] = ( 353, 186, 0 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_dark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 419,306, 386,397, 46,3514 ); - ent.v[ "angles" ] = ( 353,01, 182,978, 0,368177 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 483,953, -1992,45, 54 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 15 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 454,158, -1889,45, 53 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 12 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 422,344, -1826,58, 52 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 24 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 350,834, -1785,55, 50 ); - ent.v[ "angles" ] = ( 358,502, 51,9515, 3,71014 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 294,91, -1804,61, 50 ); - ent.v[ "angles" ] = ( 356,469, 148,058, -1,88022 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 281,548, -1874,87, 51 ); - ent.v[ "angles" ] = ( 358,062, 181,059, -3,49978 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 285,764, -1941,87, 50 ); - ent.v[ "angles" ] = ( 359,513, 203,016, -3,97025 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 311,079, -2018,78, 50 ); - ent.v[ "angles" ] = ( 359,237, 199,026, -3,92671 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 332,755, -2094,82, 50 ); - ent.v[ "angles" ] = ( 359,652, 205,012, -3,9848 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 510,576, -2065,47, 57 ); - ent.v[ "angles" ] = ( 1,23519, 12,0409, 3,80544 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_fire_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 903,136, 649,689, 683,568 ); - ent.v[ "angles" ] = ( 305,237, 85,0031, -101,997 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_area_white" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 697,361, 505,702, 78,7322 ); - ent.v[ "angles" ] = ( 283, 180, 180 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 459,608, 400,383, 37,9355 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_area_white" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 459,42, 71,9871, 93,4523 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1477,47, -609,772, 84,0656 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 345,448, 2841,06, 49,9863 ); - ent.v[ "angles" ] = ( 359,758, 95,9965, 0,97045 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 261,543, 2798,68, 48,7692 ); - ent.v[ "angles" ] = ( 359,234, 131,994, -0,357036 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 192,976, 2734,03, 50,509 ); - ent.v[ "angles" ] = ( 359,234, 131,994, -0,357036 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 154,584, 2654,46, 49,7827 ); - ent.v[ "angles" ] = ( 359,684, 174,993, -0,783479 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1117,63, 2781,93, 45,016 ); - ent.v[ "angles" ] = ( 359,156, 103,991, 0 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1172,89, 2741,97, 46,7767 ); - ent.v[ "angles" ] = ( 0,527199, 162,982, -0,700591 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1174,03, 2672,8, 43,0072 ); - ent.v[ "angles" ] = ( 0,597542, 168,982, -0,641649 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1184,68, 2607,73, 44,1291 ); - ent.v[ "angles" ] = ( 0,527199, 162,982, -0,700591 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1213,17, 2530,47, 43,6948 ); - ent.v[ "angles" ] = ( 0,690559, 177,982, -0,540274 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 725,925, -216,535, 122,866 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1137,86, -768,984, 110,756 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 525,403, 743,275, 61,7535 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 514,801, 956,026, 67,7127 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -836,681, 1281,28, 280,915 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 283,776, 1827,24, 217,074 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -100,279, 1284,75, 144,805 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1041,7, 321,277, 263,484 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1160,74, 639,345, 235,517 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1301,81, 878,466, 275,84 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1170,13, 1194,03, 241,53 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 838,773, 1587,88, 239,274 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1187,61, 1678,82, 238,115 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1584,97, 1668,01, 51,4792 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 111 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1633,07, 1733,07, 52,9506 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 156 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1672,07, 1802,49, 50,5894 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 145 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1725,54, 1835,75, 48,6745 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 101 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1776,39, 1809,99, 49,0012 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 57 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1816,72, 1773,24, 46,2076 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 19 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1852,81, 1735,57, 43,2828 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 35 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1859,23, 1694,72, 47,3971 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1826,63, 1645,81, 46,147 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 322 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1793,66, 1574,6, 51,2513 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 335 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1751,58, 1520,38, 49,7867 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 308 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1711,8, 1453,04, 51,327 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 322 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_god_ray_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -74,8562, -510,961, 387,453 ); - ent.v[ "angles" ] = ( 42,5524, 297,699, 79,7769 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_god_ray_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -117,168, -452,747, 387,378 ); - ent.v[ "angles" ] = ( 45,8322, 299,768, 81,4295 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_god_ray_lg_02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -418,075, 1331,5, 422,592 ); - ent.v[ "angles" ] = ( 8,16497, 318,371, 92,6577 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_god_ray_lg_02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -491,755, 1267,15, 348,38 ); - ent.v[ "angles" ] = ( 8,16497, 318,371, 92,6577 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_god_ray_lg_r" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -467,022, -520,02, 290,269 ); - ent.v[ "angles" ] = ( 42,786, 310,926, -148,287 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -579,984, 1367,04, 293,438 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 305 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -82,7526, -529,294, 274,845 ); - ent.v[ "angles" ] = ( 40,9649, 305,354, -1,01489 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -97,8313, -574,901, 312,97 ); - ent.v[ "angles" ] = ( 40,9654, 305,377, -1,99895 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_castaway_sun" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -56272,1, 107451, 79521,1 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_cave_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 54,1245, -734,099, 268,991 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_cave_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 22,9793, -776,739, 265,759 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1710,32, 651,483, 50,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_area_white" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1648,56, 135,829, 81,21 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1054,4, 1289,39, 211,954 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 11 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1118,29, 613,617, 193,518 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 11 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -775,772, 216,542, 177,267 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 11 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -136,925, 115,584, 62,116 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 11 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 159,333, 1744,39, 135,427 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 11 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1170,86, 1627,08, 95,7976 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 11 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1409,94, 1224,27, 89,4698 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 11 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 315,539, 2201,44, 80,9044 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 11 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 886,006, 2096,7, 66,5365 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 11 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 50,0848, 2068,83, 109,332 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 11 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -807,146, 1831,56, 143,896 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 11 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1050,72, -840,773, 72,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 11 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 422,058, 1278,75, 71,3407 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 11 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1812,58, 1785,9, 50,125 ); - ent.v[ "angles" ] = ( 271,424, 340,025, 11,9623 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1865,22, 1720,12, 52,2316 ); - ent.v[ "angles" ] = ( 271,424, 340,029, 95,9585 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 991,153, -1175,54, 58,3031 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 11 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_vista_mist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4331,99, 762,78, 134,357 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 354 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_vista_mist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4418,72, 2131,36, 146,511 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 354 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_vista_mist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2514,2, -4640,24, 115,631 ); - ent.v[ "angles" ] = ( 359,234, 64, 0,643204 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4283,13, 2017,94, 49,6744 ); - ent.v[ "angles" ] = ( 270,431, 286,973, -104,935 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4175,98, 1753,47, 56,1265 ); - ent.v[ "angles" ] = ( 272,589, 88,4222, 92,6185 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2517,09, 2208,19, 49,7463 ); - ent.v[ "angles" ] = ( 273,144, 225,996, 2,03693 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3027,37, 614,118, 49,2681 ); - ent.v[ "angles" ] = ( 270,431, 287,096, -55,0586 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2355,81, -3277,15, 60,1393 ); - ent.v[ "angles" ] = ( 272,883, 5,44351, -164,431 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3552,49, -2941,4, 51,0849 ); - ent.v[ "angles" ] = ( 272,883, 5,44328, -101,43 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 670,956, 2563,2, 47,8433 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 2 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 980,204, 2518,46, 53,9728 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 22 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 938,81, 2541,44, 48,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 77 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 880,878, 2554,81, 48,2297 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 98 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3175, -728,283, 57,6881 ); - ent.v[ "angles" ] = ( 274,181, 349,567, -88,5148 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_vista_mist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2725,72, -530,151, 65,4903 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 30 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_vista_mist02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4547,33, -1513,11, 201,485 ); - ent.v[ "angles" ] = ( 359,134, 17, -0,500026 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3817,9, -143,819, 50,0749 ); - ent.v[ "angles" ] = ( 270,431, 287,145, -50,1074 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_rock_splash01_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3119,82, 1755,6, 50,975 ); - ent.v[ "angles" ] = ( 273,144, 225,997, -30,964 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1963,71, 2617,47, 50,125 ); - ent.v[ "angles" ] = ( 359,51, 339,982, 0,727229 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1936,18, 2736,76, 49,125 ); - ent.v[ "angles" ] = ( 359,437, 345,982, 0,672048 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1926,81, 2979,34, 49,2804 ); - ent.v[ "angles" ] = ( 359,51, 339,982, 0,727229 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1804,89, 3301,43, 52,8538 ); - ent.v[ "angles" ] = ( 359,51, 339,982, 0,727229 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1938,55, 3563,25, 52,379 ); - ent.v[ "angles" ] = ( 359,391, 349,982, 0,631129 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2088,25, 2088,35, 54,3652 ); - ent.v[ "angles" ] = ( 359,51, 339,982, 0,727229 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2059,35, 2246,16, 51,8481 ); - ent.v[ "angles" ] = ( 359,309, 73,9886, -0,539343 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2383,93, 1928,65, 52,0728 ); - ent.v[ "angles" ] = ( 359,123, 35,9855, 0 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2252,66, 1992,58, 51,9542 ); - ent.v[ "angles" ] = ( 0,609476, 261,989, 0,630286 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2772,8, 579,394, 49,5426 ); - ent.v[ "angles" ] = ( 359,139, 24,9843, 0,167899 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2740,71, 719,049, 51,2474 ); - ent.v[ "angles" ] = ( 359,281, 70,9886, -0,502435 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2640,21, 485,421, 50,125 ); - ent.v[ "angles" ] = ( 359,3, 358,982, 0,528118 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2657,59, 273,709, 54,5476 ); - ent.v[ "angles" ] = ( 359,282, 0,982195, 0,503365 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2069,53, -286,611, 47,7132 ); - ent.v[ "angles" ] = ( 358,27, 45,9926, -0,651979 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_vista_mist02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3051,52, -3756,48, 90,985 ); - ent.v[ "angles" ] = ( 359,707, 59,9986, -0,957575 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1583,22, 1546,36, 59,8251 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1615,71, 917,809, 57,5445 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1444,29, 326,517, 61,6153 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1308,58, -254,807, 56,5357 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 37,348, -811,309, 68 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -265,716, -459,817, 89,6134 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 68,6026, -510,946, 69,8698 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1332,65, 486,003, 140,383 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1222,12, -554,443, 46,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 133 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1274,49, -625,496, 50,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 133 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1205,02, -674,093, 53,2369 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 212 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1138,75, -743,154, 45,79 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 297 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1556,04, -653,317, 45,1044 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 16 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -540,755, 1332,93, 240,053 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -421,004, 1862,47, 145,818 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 11 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 34,3818, -1064,4, 69,3073 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -124,506, -53,8282, 85,3477 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 672,816, 2009,48, 156,599 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 264,245, 2341,58, 84,092 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 293,076, 2008,2, 120,677 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 644,024, 2506,68, 246,802 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1844,73, 1295,98, 48,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 202 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1864,94, 1231,61, 50,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 202 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1897,02, 1179,02, 50,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 223 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1963,6, 1115,58, 49,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 237 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1994,46, 1048,3, 50,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 223 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_mist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1221,34, 718,416, 256,468 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -685,64, -361,793, 114,682 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 11 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -898,057, 1352,82, 266,194 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 250 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 843,007, 2156,72, 131,335 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 169 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1143,45, 314,325, 254,818 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 52 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1372,73, 704,764, 185,365 ); - ent.v[ "angles" ] = ( 7,8362, 75,8857, -1,60495 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1289,6, -268,921, 184,556 ); - ent.v[ "angles" ] = ( 353, 103, 0 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1359,07, -763,425, 157,154 ); - ent.v[ "angles" ] = ( 3,0027, 101,013, 0 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1202,26, -889,747, 117,217 ); - ent.v[ "angles" ] = ( 358,396, 169,204, 1,18583 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 675,987, -619,385, 89,358 ); - ent.v[ "angles" ] = ( 358,259, 134,273, 1,16002 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -476,405, -496,256, 166,411 ); - ent.v[ "angles" ] = ( 5,02932, 327,214, 4,87513 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -629,191, -182,071, 193,012 ); - ent.v[ "angles" ] = ( 349,912, 108,923, 0,69036 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1095,31, 1047,42, 259,667 ); - ent.v[ "angles" ] = ( 359,813, 75,1664, 3,27994 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -638,842, 1453,98, 292,847 ); - ent.v[ "angles" ] = ( 350,729, 318,194, 0 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 166,719, 1529,27, 177,87 ); - ent.v[ "angles" ] = ( 8,79165, 317,407, 3,95414 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 37,1285, 1416,17, 195,027 ); - ent.v[ "angles" ] = ( 2,44562, 260,037, -2,73182 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 574,74, 235,379, 166,746 ); - ent.v[ "angles" ] = ( 7,84506, 94,5444, -4,28343 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -60,0989, 321,93, 116,073 ); - ent.v[ "angles" ] = ( 2,63238, 78,3364, 3,42619 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -147,278, 153,523, 127,703 ); - ent.v[ "angles" ] = ( 348,838, 165,987, 1,72505 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1318,25, 1379,81, 146,382 ); - ent.v[ "angles" ] = ( 358,313, 139,682, 6,84143 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -23,8215, 1976,21, 184,377 ); - ent.v[ "angles" ] = ( 2,4379, 174,24, 7,14616 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -564,44, 2073,1, 163,818 ); - ent.v[ "angles" ] = ( 351,289, 260,576, 5,01022 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1085,09, 1607,01, 154,424 ); - ent.v[ "angles" ] = ( 1,35144, 148,083, 6,39748 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_area_white" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 26,4004, 819,807, 56,9765 ); - ent.v[ "angles" ] = ( 282, 180, 180 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_area_white" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 277,47, 475,201, 145,352 ); - ent.v[ "angles" ] = ( 282, 180, 180 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1605,55, -811,994, 497,718 ); - ent.v[ "angles" ] = ( 327,627, 101,061, 25,6804 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_area_white" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1649,46, -269,168, 64,7911 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_area_white" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1175,08, -157,254, 165,817 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_area_white" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1322,77, 399,876, 136,252 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1737,81, 39,7418, 67,3698 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1021,88, -1452,84, 46,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 266 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1071,46, -1442,36, 47,3262 ); - ent.v[ "angles" ] = ( 0, 320, -1 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1676,72, -930,024, 49,0604 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 212 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1692,53, -919,158, 48,125 ); - ent.v[ "angles" ] = ( 359,513, 12,9703, 7,98311 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1633,76, -852,426, 47,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 209 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1667,86, -859,828, 46,006 ); - ent.v[ "angles" ] = ( 359,513, 12,9703, 7,98311 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2149,55, 55,7322, 46,9984 ); - ent.v[ "angles" ] = ( 357,638, 192,29, -4,06977 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2208,14, 44,9981, 46,3903 ); - ent.v[ "angles" ] = ( 4,04907, 339,249, 6,90291 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2089,79, -47,3551, 42,6614 ); - ent.v[ "angles" ] = ( 354,805, 156,274, -1,6893 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2107,24, -55,0931, 46,125 ); - ent.v[ "angles" ] = ( 4,75181, 323,238, -0,3888 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2230,3, -238,416, 45,2701 ); - ent.v[ "angles" ] = ( 358,275, 177,123, 2,18927 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2290,49, -344,137, 48,125 ); - ent.v[ "angles" ] = ( 356,075, 185,175, 0,559793 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2461,16, 27,2183, 50,125 ); - ent.v[ "angles" ] = ( 357,232, 186,143, 3,77498 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2032,55, -438,654, 46,5852 ); - ent.v[ "angles" ] = ( 356,279, 109,157, 2,98296 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2046,15, -492,046, 48,341 ); - ent.v[ "angles" ] = ( 3,96658, 294,162, 0,352762 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1698,24, -555,11, 43,7283 ); - ent.v[ "angles" ] = ( 355,199, 356,609, -1,73468 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1769,16, 1052,96, 43,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 97 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1781,79, 1020,35, 47,349 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 281 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1912,35, 749,293, 48,5828 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 198 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1938,87, 740,911, 46,028 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 9 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_case_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1964,2, 214,067, 83,8798 ); - ent.v[ "angles" ] = ( 357,5, 13,0028, 0 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2574,17, -296,451, 118,125 ); - ent.v[ "angles" ] = ( 352,689, 182,975, -1,78804 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_oil_slick" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2577,72, -178,835, 50,4495 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_oil_slick" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3223,19, -258,061, 50,7101 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 335 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2595,33, -321,244, 50,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_leaf_debris" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 314,213, -653,71, 408,651 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 105 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_leaf_debris" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -366,252, -279,695, 471,791 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 123 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_leaf_debris" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -706,855, 742,915, 524,258 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 123 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_leaf_debris" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -549,139, 1179,75, 606,192 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 123 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_leaf_debris" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -371,368, 1517,9, 740,172 ); - ent.v[ "angles" ] = ( 16, 123, 0 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_leaf_debris" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 435,937, 2301,62, 476,874 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 123 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_leaf_debris" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1021,81, 2627,13, 306,963 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 123 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_leaf_debris" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 806,351, 1194,83, 444,228 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 186 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_leaf_debris" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 744,553, 1215,07, 405,218 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 174 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 238,687, 1704,33, 142,445 ); - ent.v[ "angles" ] = ( 359, 171, 0 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -15,391, 1565,59, 145,964 ); - ent.v[ "angles" ] = ( 0,939825, 331, -0,342114 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -367,136, 2096,07, 110,942 ); - ent.v[ "angles" ] = ( 359,066, 150, 0,358453 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1255,13, 800,127, 192,665 ); - ent.v[ "angles" ] = ( 0,956449, 333,994, -0,292432 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -910,904, 157,83, 190,127 ); - ent.v[ "angles" ] = ( 0,866139, 21, 0,500124 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 169,499, 57,7871, 31,9389 ); - ent.v[ "angles" ] = ( 354,501, 231,076, -0,870136 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 643,582, -278,676, 68,6005 ); - ent.v[ "angles" ] = ( 359, 171, 0 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1100,65, 293,445, 200,434 ); - ent.v[ "angles" ] = ( 0,848171, 23,0071, 0,530028 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1399,24, 847,12, 111,835 ); - ent.v[ "angles" ] = ( 0,71944, 35,0075, 0,694792 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1171,49, 1508,18, 102,993 ); - ent.v[ "angles" ] = ( 359,593, 105, 0,913701 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1046,55, 2070,23, 72,8744 ); - ent.v[ "angles" ] = ( 359,066, 150, 0,358453 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 192,797, 631,766, 51,5905 ); - ent.v[ "angles" ] = ( 359,293, 216,007, -0,707151 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 658,266, 578,374, 59,5491 ); - ent.v[ "angles" ] = ( 359,003, 166,001, 0 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 223,59, 1017,97, 79,7395 ); - ent.v[ "angles" ] = ( 359,879, 249,002, -0,989253 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -714,883, 365,172, 189,552 ); - ent.v[ "angles" ] = ( 359,844, 247,003, -0,984433 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -650,443, 2481,78, 68,7245 ); - ent.v[ "angles" ] = ( 0,785374, 24,0074, 0,613706 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 649,077, -816,789, 104,771 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 628,067, -821,498, 77,6018 ); - ent.v[ "angles" ] = ( 0,731455, 34,0075, 0,682129 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_oil_slick" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4506,97, 613,694, 50,521 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 94 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_oil_slick" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4677,73, 1584,5, 50,6497 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 28 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_air_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 456,549, -367,336, 60,8297 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 11 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_fire_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 622,357, 383,587, 367,488 ); - ent.v[ "angles" ] = ( 22, 125, 0 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 945,815, 221,19, 389,016 ); - ent.v[ "angles" ] = ( 335, 173, 0 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_spark_bounce_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 973,544, 123,743, 345,518 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_spark_bounce_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1074,53, 48,7958, 301,559 ); - ent.v[ "angles" ] = ( 270, 0, 168 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 562,035, 333,608, 306,298 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 130 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1540,41, -717,016, 206,544 ); - ent.v[ "angles" ] = ( 292, 129, -180 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_area_white" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 614,773, 2,37351, 140,966 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 289,563, 280,174, 254,439 ); - ent.v[ "angles" ] = ( 335, 173, 0 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_fire_geo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 809,077, 649,277, 571,571 ); - ent.v[ "angles" ] = ( 336,351, 343,514, -5,51342 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_wing_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 844,331, 602,781, 584,35 ); - ent.v[ "angles" ] = ( 3,54735, 138,447, -38,0217 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_wing_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 895,564, 638,798, 606,144 ); - ent.v[ "angles" ] = ( 330,022, 100,868, -5,28882 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 763,184, 549,24, 541,905 ); - ent.v[ "angles" ] = ( 335, 173, 0 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_fire_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 721,982, 317,193, 328,821 ); - ent.v[ "angles" ] = ( 65,8061, 116,887, 13,0833 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 775,675, 404,245, 275,493 ); - ent.v[ "angles" ] = ( 282, 180, 180 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 718,213, 317,547, 330,973 ); - ent.v[ "angles" ] = ( 30,979, 94,667, -1,20133 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 817,258, 656,163, 518,532 ); - ent.v[ "angles" ] = ( 20,8712, 82,8833, 70,6872 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_case_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1975,26, 216,495, 84,4666 ); - ent.v[ "angles" ] = ( 357,5, 13,0028, 0 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_case_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1986,06, 219,124, 84,9937 ); - ent.v[ "angles" ] = ( 357,5, 13,0028, 0 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_case_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1997,03, 221,369, 85,742 ); - ent.v[ "angles" ] = ( 357,5, 13,0028, 0 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_case_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2008,09, 224,006, 86,1653 ); - ent.v[ "angles" ] = ( 357,5, 13,0028, 0 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_case_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1734,11, 1026,56, 77,7137 ); - ent.v[ "angles" ] = ( 355,746, 13,0267, -0,406129 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_case_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1745,13, 1028,99, 78,7474 ); - ent.v[ "angles" ] = ( 355,746, 13,0267, -0,406129 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_case_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1755,91, 1031,62, 79,7136 ); - ent.v[ "angles" ] = ( 355,746, 13,0267, -0,406129 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_case_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1766,85, 1033,86, 80,8061 ); - ent.v[ "angles" ] = ( 355,746, 13,0267, -0,406129 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_case_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1777,9, 1036,5, 81,6768 ); - ent.v[ "angles" ] = ( 355,746, 13,0267, -0,406129 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 882,603, 106,26, 277,833 ); - ent.v[ "angles" ] = ( 10, 162, 0 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3011,39, -58,7442, 57,9464 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 725,92, 314,638, 278,164 ); - ent.v[ "angles" ] = ( 351,812, 355,293, -50,1739 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_fire_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 726,984, 313,314, 336,555 ); - ent.v[ "angles" ] = ( 270, 0,149457, -0,149446 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_crate_smoke01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2693,46, -297,146, 75,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_crate_smoke02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3099,2, -91,7459, 53,125 ); - ent.v[ "angles" ] = ( 271, 89,9983, 90,0017 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3078,1, -54,123, 53,125 ); - ent.v[ "angles" ] = ( 352,526, 175,918, -0,878975 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1615,84, -883,632, 218,378 ); - ent.v[ "angles" ] = ( 29,4765, 253,686, 77,7512 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1516,16, -649,656, 160,702 ); - ent.v[ "angles" ] = ( 7,09684, 226,314, 73,0255 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_tunnel" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1003,37, 69,7438, 331,074 ); - ent.v[ "angles" ] = ( 19,9873, 166,128, 0,727747 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 398,995, 126,994, 70,4241 ); - ent.v[ "angles" ] = ( 347,339, 346,67, 26,9729 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 550,884, 82,2239, 113,698 ); - ent.v[ "angles" ] = ( 347,339, 346,67, 26,9729 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 630,746, 269,288, 125,675 ); - ent.v[ "angles" ] = ( 345,129, 344,341, -38,499 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_spark_lite_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 580,19, 181,503, 247,392 ); - ent.v[ "angles" ] = ( 71,0171, 347,997, 6,33576 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_elec_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 580,439, 182,457, 250,489 ); - ent.v[ "angles" ] = ( 37, 171, 0 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_dark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1488,2, 669,906, 90,2442 ); - ent.v[ "angles" ] = ( 353, 186, 0 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_wing_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 812,629, 627,89, 553,533 ); - ent.v[ "angles" ] = ( 351,857, 123,431, -37,413 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_fire_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1627,62, -810,653, 165,283 ); - ent.v[ "angles" ] = ( 356,263, 115,595, 35,0689 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1398,74, 63,0482, 260,166 ); - ent.v[ "angles" ] = ( 50,9031, 162,76, 16,6978 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_spark_lite_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1388,12, 253,376, 159,581 ); - ent.v[ "angles" ] = ( 337,622, 149,92, 7,45446 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_fire_geo2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1608,56, -804,815, 117,896 ); - ent.v[ "angles" ] = ( 279,867, 282,937, -81,0539 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_fire_geo2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1653,53, -925,349, 261,106 ); - ent.v[ "angles" ] = ( 275,865, 309,6, -104,784 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_wing_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1657,65, -911,035, 301,159 ); - ent.v[ "angles" ] = ( 294,971, 88,7115, -67,751 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_wing02_smoke" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1668,31, -902,987, 346,094 ); - ent.v[ "angles" ] = ( 323,815, 72,2649, -43,3432 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_fire_dlite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 353,223, 239,318, 111 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_fire_dlite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1617,86, -776,196, 121,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1645,96, -883,578, 103,125 ); - ent.v[ "angles" ] = ( 334,112, 152,202, 77,6777 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_fire_only_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 721,202, 317,821, 268,065 ); - ent.v[ "angles" ] = ( 352, 180, 180 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 859,665, 33,1026, 292,615 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 71 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1077,61, 73,2924, 305,191 ); - ent.v[ "angles" ] = ( 358, 352, 0 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 330,109, 225,233, 222,364 ); - ent.v[ "angles" ] = ( 24,3835, 3,69784, -54,0505 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -245,273, 481,307, 317,562 ); - ent.v[ "angles" ] = ( 342,909, 59,1376, 5,73361 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -521,874, 810,496, 516,415 ); - ent.v[ "angles" ] = ( 342,909, 59,1376, 5,73361 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -318,097, 849,494, 403,923 ); - ent.v[ "angles" ] = ( 357,727, 24,9655, 14,0332 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -354,891, 1133,95, 577,005 ); - ent.v[ "angles" ] = ( 10,0753, 356,012, 13,3962 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -345,574, 783,929, 402,468 ); - ent.v[ "angles" ] = ( 9,70932, 24,265, 16,6651 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_fire_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 338,456, 295,858, 101,714 ); - ent.v[ "angles" ] = ( 35, 309, 0 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_fire_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 362,308, 322,893, 104,366 ); - ent.v[ "angles" ] = ( 35, 309, 0 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_fire_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 386,935, 317,799, 109,218 ); - ent.v[ "angles" ] = ( 35, 309, 0 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_fire_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 348,293, 309,392, 101,893 ); - ent.v[ "angles" ] = ( 35, 309, 0 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_fire_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 324,774, 291,899, 100,042 ); - ent.v[ "angles" ] = ( 35, 309, 0 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 714,98, 27,7596, 174,521 ); - ent.v[ "angles" ] = ( 347,339, 346,67, 26,9729 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 148,69, 420,161, 116,878 ); - ent.v[ "angles" ] = ( 28, 168, 0 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_castaway_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 212,423, 446,098, 130,426 ); - ent.v[ "angles" ] = ( 22, 76, 0 ); - ent.v[ "delay" ] = -92; -} diff --git a/Multiplayer Maps/mp_castaway/maps/mp/mp_castaway.gsc b/Multiplayer Maps/mp_castaway/maps/mp/mp_castaway.gsc deleted file mode 100644 index b5bc9f8..0000000 --- a/Multiplayer Maps/mp_castaway/maps/mp/mp_castaway.gsc +++ /dev/null @@ -1,56 +0,0 @@ -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_castaway_fx::main(); - precachemodel( "collision_physics_64x64x10" ); - precachemodel( "collision_clip_64x64x10" ); - precachemodel( "collision_physics_128x128x10" ); - precachemodel( "p6_cas_rock_medium_02_trimmed" ); - maps/mp/_load::main(); - maps/mp/mp_castaway_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_castaway" ); - setdvar( "compassmaxrange", "2100" ); - setdvar( "bg_dog_swim_enabled", 1 ); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - spawncollision( "collision_physics_64x64x10", "collider", ( -1181, 1602, 242 ), ( 9,8, 270, 106 ) ); - spawncollision( "collision_physics_64x64x10", "collider", ( -1181, 1635, 242 ), ( 9,81, 270, 106 ) ); - spawncollision( "collision_physics_64x64x10", "collider", ( -1174, 1602, 197 ), ( 360, 270, 90 ) ); - spawncollision( "collision_physics_64x64x10", "collider", ( -1174, 1635, 197 ), ( 360, 270, 90 ) ); - spawncollision( "collision_physics_64x64x10", "collider", ( -329, 656, 123 ), ( 359,424, 286,385, 127,196 ) ); - spawncollision( "collision_physics_64x64x10", "collider", ( -342, 699, 124 ), ( 354,888, 295,033, 125,723 ) ); - spawncollision( "collision_physics_64x64x10", "collider", ( -707, 2358, 145 ), vectorScale( ( 0, 1, 0 ), 90 ) ); - spawncollision( "collision_clip_64x64x10", "collider", ( 407,5, 518, 103 ), vectorScale( ( 0, 1, 0 ), 270 ) ); - spawncollision( "collision_clip_64x64x10", "collider", ( 381, 552, 103 ), ( 270, 65,4, 6,57 ) ); - spawncollision( "collision_clip_64x64x10", "collider", ( 343, 559, 103 ), ( 270, 112,8, 0 ) ); - spawncollision( "collision_clip_64x64x10", "collider", ( 370,5, 526, 128,5 ), vectorScale( ( 0, 1, 0 ), 66,2 ) ); - spawncollision( "collision_clip_64x64x10", "collider", ( 357, 525, 129,5 ), vectorScale( ( 0, 1, 0 ), 23 ) ); - rock1 = spawn( "script_model", ( 373,607, 484,974, 42,6 ) ); - rock1.angles = ( 350,899, 243,975, 4,02471 ); - rock1 setmodel( "p6_cas_rock_medium_02_trimmed" ); - spawncollision( "collision_physics_64x64x10", "collider", ( 479,5, 270, 75 ), ( 346,453, 344,758, 4,31137 ) ); - spawncollision( "collision_physics_64x64x10", "collider", ( 477,5, 270, 76 ), ( 349,833, 342,352, 15,9726 ) ); - spawncollision( "collision_physics_128x128x10", "collider", ( 1503, 186, 121 ), ( 16,2357, 331,376, -70,4431 ) ); - spawncollision( "collision_physics_128x128x10", "collider", ( 1571, 147, 97 ), ( 16,2357, 331,376, -70,4431 ) ); - level.levelkothdisable = []; - level.levelkothdisable[ level.levelkothdisable.size ] = spawn( "trigger_radius", ( 281,5, 443,5, 161 ), 0, 50, 50 ); -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2200", reset_dvars ); - ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1000", reset_dvars ); - ss.hq_objective_influencer_radius = 3000; -} diff --git a/Multiplayer Maps/mp_castaway/maps/mp/mp_castaway_amb.gsc b/Multiplayer Maps/mp_castaway/maps/mp/mp_castaway_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_castaway/maps/mp/mp_castaway_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_castaway/maps/mp/mp_castaway_fx.gsc b/Multiplayer Maps/mp_castaway/maps/mp/mp_castaway_fx.gsc deleted file mode 100644 index 9397466..0000000 --- a/Multiplayer Maps/mp_castaway/maps/mp/mp_castaway_fx.gsc +++ /dev/null @@ -1,101 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); -#using_animtree( "fxanim_props_dlc3" ); - -main() -{ - precache_fxanim_props(); - precache_fxanim_props_dlc3(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_castaway_fx::main(); -} - -precache_scripted_fx() -{ - level._effect[ "water_splash_sm" ] = loadfx( "bio/player/fx_player_water_splash_mp_sm" ); -} - -precache_createfx_fx() -{ - level._effect[ "fx_mp_castaway_crate_fire" ] = loadfx( "maps/mp_maps/fx_mp_castaway_crate_fire" ); - level._effect[ "fx_mp_castaway_oil_slick" ] = loadfx( "maps/mp_maps/fx_mp_castaway_oil_slick" ); - level._effect[ "fx_mp_castaway_splash_md" ] = loadfx( "maps/mp_maps/fx_mp_castaway_splash_md" ); - level._effect[ "fx_mp_castaway_rock_splash01_runner" ] = loadfx( "maps/mp_maps/fx_mp_castaway_rock_splash01_runner" ); - level._effect[ "fx_mp_castaway_cave_drip" ] = loadfx( "maps/mp_maps/fx_mp_castaway_cave_drip" ); - level._effect[ "fx_xtreme_water_hit_mp_castaway" ] = loadfx( "impacts/fx_xtreme_water_hit_mp_castaway" ); - level._effect[ "fx_mp_slums_dark_smoke_sm" ] = loadfx( "maps/mp_maps/fx_mp_slums_dark_smoke_sm" ); - level._effect[ "fx_mp_castaway_fire_md" ] = loadfx( "maps/mp_maps/fx_mp_castaway_fire_md" ); - level._effect[ "fx_mp_castaway_fire_sm" ] = loadfx( "maps/mp_maps/fx_mp_castaway_fire_sm" ); - level._effect[ "fx_mp_castaway_fire_lg" ] = loadfx( "maps/mp_maps/fx_mp_castaway_fire_lg" ); - level._effect[ "fx_smk_smolder_gray_slow_dark" ] = loadfx( "smoke/fx_smk_smolder_gray_slow_dark" ); - level._effect[ "fx_mp_studio_smoke_area" ] = loadfx( "maps/mp_maps/fx_mp_studio_smoke_area" ); - level._effect[ "fx_mp_castaway_smoke_area" ] = loadfx( "maps/mp_maps/fx_mp_castaway_smoke_area" ); - level._effect[ "fx_mp_castaway_wing_fire" ] = loadfx( "maps/mp_maps/fx_mp_castaway_wing_fire" ); - level._effect[ "fx_mp_castaway_fire_geo" ] = loadfx( "maps/mp_maps/fx_mp_castaway_fire_geo" ); - level._effect[ "fx_mp_castaway_fire_geo2" ] = loadfx( "maps/mp_maps/fx_mp_castaway_fire_geo2" ); - level._effect[ "fx_mp_castaway_crate_smoke01" ] = loadfx( "maps/mp_maps/fx_mp_castaway_crate_smoke01" ); - level._effect[ "fx_mp_castaway_crate_smoke02" ] = loadfx( "maps/mp_maps/fx_mp_castaway_crate_smoke02" ); - level._effect[ "fx_mp_castaway_smoke_sm" ] = loadfx( "maps/mp_maps/fx_mp_castaway_smoke_sm" ); - level._effect[ "fx_mp_castaway_smoke_tunnel" ] = loadfx( "maps/mp_maps/fx_mp_castaway_smoke_tunnel" ); - level._effect[ "fx_mp_castaway_elec_fire" ] = loadfx( "maps/mp_maps/fx_mp_castaway_elec_fire" ); - level._effect[ "fx_mp_castaway_smoke_area_white" ] = loadfx( "maps/mp_maps/fx_mp_castaway_smoke_area_white" ); - level._effect[ "fx_mp_castaway_wing02_smoke" ] = loadfx( "maps/mp_maps/fx_mp_castaway_wing02_smoke" ); - level._effect[ "fx_mp_castaway_fire_only_sm" ] = loadfx( "maps/mp_maps/fx_mp_castaway_fire_only_sm" ); - level._effect[ "fx_mp_castaway_smoke_blow" ] = loadfx( "maps/mp_maps/fx_mp_castaway_smoke_blow" ); - level._effect[ "fx_mp_castaway_fire_drip" ] = loadfx( "maps/mp_maps/fx_mp_castaway_fire_drip" ); - level._effect[ "fx_insects_swarm_lg_light" ] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); - level._effect[ "fx_insects_flies_dragonflies" ] = loadfx( "bio/insects/fx_insects_flies_dragonflies" ); - level._effect[ "fx_insects_butterfly_flutter" ] = loadfx( "bio/insects/fx_insects_butterfly_flutter" ); - level._effect[ "fx_mp_castaway_fire_int" ] = loadfx( "maps/mp_maps/fx_mp_castaway_fire_int" ); - level._effect[ "fx_mp_castaway_god_ray_lg" ] = loadfx( "maps/mp_maps/fx_mp_castaway_god_ray_lg" ); - level._effect[ "fx_mp_castaway_god_ray_lg_r" ] = loadfx( "maps/mp_maps/fx_mp_castaway_god_ray_lg_r" ); - level._effect[ "fx_mp_castaway_god_ray_lg_02" ] = loadfx( "maps/mp_maps/fx_mp_castaway_god_ray_lg_02" ); - level._effect[ "fx_mp_castaway_fire_dlite" ] = loadfx( "maps/mp_maps/fx_mp_castaway_fire_dlite" ); - level._effect[ "fx_mp_castaway_fire_dlite02" ] = loadfx( "maps/mp_maps/fx_mp_castaway_fire_dlite02" ); - level._effect[ "fx_mp_castaway_case_lite" ] = loadfx( "maps/mp_maps/fx_mp_castaway_case_lite" ); - level._effect[ "fx_mp_light_dust_motes_md" ] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); - level._effect[ "fx_mp_castaway_air_dust" ] = loadfx( "maps/mp_maps/fx_mp_castaway_air_dust" ); - level._effect[ "fx_mp_castaway_air_mist" ] = loadfx( "maps/mp_maps/fx_mp_castaway_air_mist" ); - level._effect[ "fx_mp_castaway_air_dust_blow" ] = loadfx( "maps/mp_maps/fx_mp_castaway_air_dust_blow" ); - level._effect[ "fx_mp_castaway_leaf_debris" ] = loadfx( "maps/mp_maps/fx_mp_castaway_leaf_debris" ); - level._effect[ "fx_mp_castaway_vista_mist" ] = loadfx( "maps/mp_maps/fx_mp_castaway_vista_mist" ); - level._effect[ "fx_mp_castaway_vista_mist02" ] = loadfx( "maps/mp_maps/fx_mp_castaway_vista_mist02" ); - level._effect[ "fx_mp_carrier_spark_bounce_runner" ] = loadfx( "maps/mp_maps/fx_mp_carrier_spark_bounce_runner" ); - level._effect[ "fx_mp_elec_spark_burst_xsm_thin_runner" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin_runner" ); - level._effect[ "fx_mp_castaway_spark_lite_runner" ] = loadfx( "maps/mp_maps/fx_mp_castaway_spark_lite_runner" ); - level._effect[ "fx_lf_mp_castaway_sun" ] = loadfx( "lens_flares/fx_lf_mp_castaway_sun" ); -} - -precache_fxanim_props() -{ - level.scr_anim = []; - level.scr_anim[ "fxanim_props" ] = []; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_01" ] = %fxanim_gp_seagull_circle_01_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_02" ] = %fxanim_gp_seagull_circle_02_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_03" ] = %fxanim_gp_seagull_circle_03_anim; - level.scr_anim[ "fxanim_props" ][ "river_debris_barrel" ] = %fxanim_angola_river_debris_barrel_anim; - level.scr_anim[ "fxanim_props" ][ "shark_fins" ] = %fxanim_mp_stu_shark_fins_anim; -} - -precache_fxanim_props_dlc3() -{ - level.scr_anim[ "fxanim_props_dlc3" ] = []; - level.scr_anim[ "fxanim_props_dlc3" ][ "speed_boat" ] = %viewmodel_fxanim_mp_cast_speed_boat_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "zodiac_boats" ] = %viewmodel_fxanim_mp_cast_zodiac_boats_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "palm_tree_float" ] = %viewmodel_fxanim_mp_cast_palm_tree_float_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "fish_grp_01" ] = %fxanim_mp_cast_fish_grp_01_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "floating_boxes" ] = %fxanim_mp_cast_floating_boxes_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "raft_ropes" ] = %fxanim_mp_cast_raft_ropes_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "floating_seaweed" ] = %fxanim_mp_cast_seaweed_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "floating_boxes_fx" ] = %fxanim_mp_cast_floating_boxes_fx_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "crab_blue_01_01" ] = %fxanim_mp_cast_crab_blue_01_01_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "crab_blue_01_02" ] = %fxanim_mp_cast_crab_blue_01_02_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "crab_blue_02_01" ] = %fxanim_mp_cast_crab_blue_02_01_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "crab_blue_02_02" ] = %fxanim_mp_cast_crab_blue_02_02_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "crab_blue_03_01" ] = %fxanim_mp_cast_crab_blue_03_01_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "crab_blue_03_02" ] = %fxanim_mp_cast_crab_blue_03_02_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "hammock" ] = %fxanim_mp_cast_hammock_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "vine_cluster" ] = %fxanim_gp_vine_cluster_anim; -} diff --git a/Multiplayer Maps/mp_concert/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_concert/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_concert/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_concert/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_concert/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_concert/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_concert/maps/mp/createfx/mp_concert_fx.gsc b/Multiplayer Maps/mp_concert/maps/mp/createfx/mp_concert_fx.gsc deleted file mode 100644 index c4e6770..0000000 --- a/Multiplayer Maps/mp_concert/maps/mp/createfx/mp_concert_fx.gsc +++ /dev/null @@ -1,1240 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createloopeffect( "fx_pigeon_panic_flight_med" ); - ent.v[ "origin" ] = ( -1349,51, 3293,57, 401,947 ); - ent.v[ "angles" ] = ( 345, 36, 0 ); - ent.v[ "type" ] = "loopfx"; - ent.v[ "delay" ] = 15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md_xslw" ); - ent.v[ "origin" ] = ( -898,217, 114,965, -63,4905 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 134 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md_xslw" ); - ent.v[ "origin" ] = ( -1935,19, 144,112, -68,8491 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 84 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md_xslw" ); - ent.v[ "origin" ] = ( -943,246, 661,499, -64 ); - ent.v[ "angles" ] = ( 359,067, 96, -0,35803 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_red" ); - ent.v[ "origin" ] = ( 226,178, 959,617, 448,072 ); - ent.v[ "angles" ] = ( 53,6561, 215,248, -150,351 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_red" ); - ent.v[ "origin" ] = ( -102,867, 1037,12, 438,545 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 81 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_red" ); - ent.v[ "origin" ] = ( -244,747, 962,45, 453,965 ); - ent.v[ "angles" ] = ( 56,1299, 332,501, -29,2417 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_purple" ); - ent.v[ "origin" ] = ( 28,5034, 1068,91, 438,319 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 75 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_purple" ); - ent.v[ "origin" ] = ( -122,511, 1051,59, 438,814 ); - ent.v[ "angles" ] = ( 72,5492, 77,1467, 76,5485 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_purple" ); - ent.v[ "origin" ] = ( 135,081, 1020,73, 438,951 ); - ent.v[ "angles" ] = ( 70,7408, 249,832, -111,661 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_blue" ); - ent.v[ "origin" ] = ( -196,034, 996,132, 456,007 ); - ent.v[ "angles" ] = ( 45,2742, 347,156, -9,20152 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_blue" ); - ent.v[ "origin" ] = ( 93,325, 1033,02, 460,204 ); - ent.v[ "angles" ] = ( 64,0992, 230,2, 14,6467 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_blue" ); - ent.v[ "origin" ] = ( -50,9279, 1068,33, 438,34 ); - ent.v[ "angles" ] = ( 62,4253, 328,492, -28,5179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_blue" ); - ent.v[ "origin" ] = ( 270,198, 943,826, 440,327 ); - ent.v[ "angles" ] = ( 22,1841, 218,096, 13,7881 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_blue" ); - ent.v[ "origin" ] = ( 382,499, 1013,47, 228 ); - ent.v[ "angles" ] = ( 335,422, 136,481, 22,3923 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_blue" ); - ent.v[ "origin" ] = ( 376,196, 940,998, 226,125 ); - ent.v[ "angles" ] = ( 325,854, 143,528, 19,2049 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_blue" ); - ent.v[ "origin" ] = ( 373,942, 871,326, 226,125 ); - ent.v[ "angles" ] = ( 322,141, 161,291, -3,25927 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_blue" ); - ent.v[ "origin" ] = ( -385,981, 1016,74, 228 ); - ent.v[ "angles" ] = ( 333,28, 42,0694, -30,0419 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_blue" ); - ent.v[ "origin" ] = ( -385,862, 947,273, 227,425 ); - ent.v[ "angles" ] = ( 331,495, 29,8018, -22,313 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_blue" ); - ent.v[ "origin" ] = ( -388,713, 875,995, 225,725 ); - ent.v[ "angles" ] = ( 319,226, 6,46376, -5,27376 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_blue" ); - ent.v[ "origin" ] = ( -288,754, 725,154, 231,821 ); - ent.v[ "angles" ] = ( 311,886, 18,6557, -18,6134 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md_xslw" ); - ent.v[ "origin" ] = ( -2169,73, 268,128, -58 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_blue" ); - ent.v[ "origin" ] = ( -247,451, 687,737, 228,506 ); - ent.v[ "angles" ] = ( 304,274, 31,0757, -28,4085 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_red_static" ); - ent.v[ "origin" ] = ( 104,946, 629,17, 313,6 ); - ent.v[ "angles" ] = ( 324,696, 105,959, 27,117 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_red_static" ); - ent.v[ "origin" ] = ( -114,225, 628,368, 315 ); - ent.v[ "angles" ] = ( 329,497, 75,3379, 5,86822 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_blue_static" ); - ent.v[ "origin" ] = ( 132,338, 635,198, 337,149 ); - ent.v[ "angles" ] = ( 334,021, 16,7312, -7,68143 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_blue_static" ); - ent.v[ "origin" ] = ( -133,435, 623,897, 336 ); - ent.v[ "angles" ] = ( 337,181, 165,402, 2,96132 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_blue" ); - ent.v[ "origin" ] = ( 277,498, 724,9, 230,926 ); - ent.v[ "angles" ] = ( 303,359, 162,87, 4,62987 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_can_light_blue" ); - ent.v[ "origin" ] = ( 245,173, 686,562, 229,167 ); - ent.v[ "angles" ] = ( 300,568, 156,516, -5,53957 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); - ent.v[ "origin" ] = ( 341,825, 3346,31, 841,6 ); - ent.v[ "angles" ] = ( 25,7968, 292,527, -171,827 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); - ent.v[ "origin" ] = ( 581,824, 3301,88, 846,233 ); - ent.v[ "angles" ] = ( 25,0505, 247,816, -178,142 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); - ent.v[ "origin" ] = ( 125,915, 3379,94, 837,668 ); - ent.v[ "angles" ] = ( 35,6227, 267,612, -175,96 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); - ent.v[ "origin" ] = ( -198,117, 3371,76, 841,42 ); - ent.v[ "angles" ] = ( 20,7763, 244,643, -179,732 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); - ent.v[ "origin" ] = ( -426,269, 3348,57, 838,398 ); - ent.v[ "angles" ] = ( 33,2519, 280,54, -179,082 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); - ent.v[ "origin" ] = ( -715,339, 3277,37, 840,672 ); - ent.v[ "angles" ] = ( 38,9751, 297,917, -174,776 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); - ent.v[ "origin" ] = ( -1185,1, 3058,42, 850,224 ); - ent.v[ "angles" ] = ( 40,1107, 338,227, 178,436 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_stadium_lg" ); - ent.v[ "origin" ] = ( -937,583, 3177,55, 840,959 ); - ent.v[ "angles" ] = ( 25,4236, 328,98, 179,275 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_vend_machine_sm_orange" ); - ent.v[ "origin" ] = ( -1133,98, 2326,99, 72,8739 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 311 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_vend_machine_sm_blue" ); - ent.v[ "origin" ] = ( -1101,35, 2351,52, 72,8739 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 309 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_vend_machine_sm_blue" ); - ent.v[ "origin" ] = ( -1593,45, 1727,43, 72,7615 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 336 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_vend_machine_sm_orange" ); - ent.v[ "origin" ] = ( -1610,29, 1690,88, 73,1204 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 338 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_vend_machine_sm_orange" ); - ent.v[ "origin" ] = ( 919,399, 2612,68, 71,4912 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 153 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_vend_machine_sm_orange" ); - ent.v[ "origin" ] = ( 890,027, 2555,77, 70,5969 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 153 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_vend_machine_sm_blue" ); - ent.v[ "origin" ] = ( 904,523, 2583,87, 70,775 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 153 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_bath_hygiene_box_glow" ); - ent.v[ "origin" ] = ( 1300,71, 2509,78, 75,1152 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 51 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_bath_hygiene_box_glow" ); - ent.v[ "origin" ] = ( 1325,55, 2489,65, 76,0037 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 51 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_patio_flame_lamp_heat" ); - ent.v[ "origin" ] = ( 1800,69, 290,215, 85,0224 ); - ent.v[ "angles" ] = ( 270, 0,162772, 178,837 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_patio_flame_lamp_heat" ); - ent.v[ "origin" ] = ( 1612,38, -90,3902, 84,6835 ); - ent.v[ "angles" ] = ( 270, 0, -91 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_patio_flame_lamp_heat" ); - ent.v[ "origin" ] = ( 1887,94, -88,0555, 88,0549 ); - ent.v[ "angles" ] = ( 270, 0, -91 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_patio_flame_lamp_heat" ); - ent.v[ "origin" ] = ( 1156,94, 91,5999, 88,3432 ); - ent.v[ "angles" ] = ( 270, 0,162772, 178,837 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( 1020,6, -49,4309, -23,3453 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 100 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_leaves_falling_red" ); - ent.v[ "origin" ] = ( -2565,25, 809,052, 271,777 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 69 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_leaves_falling_red" ); - ent.v[ "origin" ] = ( -1384,17, 9,54169, 299,013 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 105 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_leaves_falling_orange" ); - ent.v[ "origin" ] = ( -1427,58, -293,833, 234,852 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 112 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_leaves_falling_red" ); - ent.v[ "origin" ] = ( -1320, -66,6965, 232,855 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 68 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_leaves_falling_orange" ); - ent.v[ "origin" ] = ( -2554,68, 1642,96, 300,736 ); - ent.v[ "angles" ] = ( 350, 69, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( -1847,22, 220,991, -64,5093 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( -1478,77, 234,774, -59,0955 ); - ent.v[ "angles" ] = ( 0,671664, 125,998, -0,746423 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( -1246,9, 162,695, -61,687 ); - ent.v[ "angles" ] = ( 358,051, 139,997, 0,562438 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( -2122,86, 509,215, -62,1621 ); - ent.v[ "angles" ] = ( 358,317, 114,093, -1,69736 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( -1317,29, -250,222, -71,875 ); - ent.v[ "angles" ] = ( 359,993, 174,005, -0,209221 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1840,21, 1143,27, 205,318 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 281 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1712,1, 1144,93, 227,351 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 276,5 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1583,81, 1144,35, 240,12 ); - ent.v[ "angles" ] = ( 270, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1456,06, 1143,63, 244,2 ); - ent.v[ "angles" ] = ( 270, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1456,72, 975,162, 244,3 ); - ent.v[ "angles" ] = ( 270, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1456,92, 815,969, 244,4 ); - ent.v[ "angles" ] = ( 270, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1584,95, 815,243, 239,208 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 275 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1712,68, 815,754, 227,255 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 276 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1840,16, 816,277, 205,934 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 281 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1839,22, 975,293, 206,287 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 281 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1711,76, 976,348, 226,465 ); - ent.v[ "angles" ] = ( 277,5, 0, 4 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1584,08, 975,739, 239,11 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 275 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1471,53, 655,493, 244,123 ); - ent.v[ "angles" ] = ( 270, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1455,94, 496,228, 244,223 ); - ent.v[ "angles" ] = ( 270, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1598,85, 655,584, 239,218 ); - ent.v[ "angles" ] = ( 271, 0, -6 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1584,49, 496,314, 238,237 ); - ent.v[ "angles" ] = ( 271, 0, -6 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1712,06, 496,298, 226,178 ); - ent.v[ "angles" ] = ( 278,995, 354,662, -0,668452 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1726,69, 654,404, 226,243 ); - ent.v[ "angles" ] = ( 278,995, 354,662, -0,668452 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( 927,798, -394,828, -21,4837 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 94 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( -68,2444, -524,337, -61,9811 ); - ent.v[ "angles" ] = ( 359,2, 94, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( -673,489, -488,407, -61,2224 ); - ent.v[ "angles" ] = ( 358, 94, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( -908,163, -12,3734, -61,9838 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 116 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -1313,93, 1546,51, 128,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -1278,01, 1627,62, 129,4 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -1228,57, 1718,44, 129,4 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -1163,06, 1813,75, 129,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -1087,3, 1907,09, 129 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -1004,91, 1995,94, 129 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -920,186, 2069,7, 129,3 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_track_light" ); - ent.v[ "origin" ] = ( 414,082, 1948,13, 129,745 ); - ent.v[ "angles" ] = ( 32,5734, 119,859, 16,481 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_track_light" ); - ent.v[ "origin" ] = ( 435,322, 1939,09, 129,614 ); - ent.v[ "angles" ] = ( 40,5569, 71,1905, -11,6191 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_track_light" ); - ent.v[ "origin" ] = ( 454,017, 1929,44, 129,595 ); - ent.v[ "angles" ] = ( 47,6973, 52,1184, -22,5697 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_fluorescent_overhead_bright" ); - ent.v[ "origin" ] = ( 415,946, 2171,76, 136,875 ); - ent.v[ "angles" ] = ( 90, 180, -157 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_fluorescent_overhead_bright" ); - ent.v[ "origin" ] = ( 532,648, 2118,55, 136,875 ); - ent.v[ "angles" ] = ( 90, 180, -157 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( -1971,73, -358,639, -71,875 ); - ent.v[ "angles" ] = ( 359,817, 115,005, -0,101827 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( -2257,32, -421,283, -71,875 ); - ent.v[ "angles" ] = ( 359,821, 72,0047, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( -2123,45, 164,139, -66,0718 ); - ent.v[ "angles" ] = ( 358, 88, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( -1009,56, 740,799, -61,5655 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 68 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_sprinkler_drip_physics" ); - ent.v[ "origin" ] = ( 638,996, 1767,82, -36,7845 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 282 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_sprinkler_drip_physics" ); - ent.v[ "origin" ] = ( -1220,27, 1714,29, 128,46 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_neon_open_sign" ); - ent.v[ "origin" ] = ( -1439,33, 2217,11, 112,888 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 320 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign_glow_yellowish" ); - ent.v[ "origin" ] = ( -985,482, 2298,16, 144,153 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 218 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign_glow_yellowish" ); - ent.v[ "origin" ] = ( -1529,56, 1592,28, 144,013 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 69 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign_glow_yellowish" ); - ent.v[ "origin" ] = ( 1448,06, 419,174, 140,541 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 96 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign_glow_yellowish" ); - ent.v[ "origin" ] = ( 1497,66, 1236,43, 140,07 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign_glow" ); - ent.v[ "origin" ] = ( 1616,52, 2169,05, 130,338 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 131 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign_glow" ); - ent.v[ "origin" ] = ( 1035, 2735,99, 131,535 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 330 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_hand_dryer_glow" ); - ent.v[ "origin" ] = ( 1274,88, 2323,22, 80,9101 ); - ent.v[ "angles" ] = ( 330, 52, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_hand_dryer_glow" ); - ent.v[ "origin" ] = ( 1299,92, 2302,92, 80,9368 ); - ent.v[ "angles" ] = ( 330, 52, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_hand_dryer_glow" ); - ent.v[ "origin" ] = ( 1528,01, 2119,58, 81,379 ); - ent.v[ "angles" ] = ( 330, 52, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_hand_dryer_glow" ); - ent.v[ "origin" ] = ( 1502,97, 2139,88, 81,3522 ); - ent.v[ "angles" ] = ( 330, 52, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_bathroom_monitor_glow" ); - ent.v[ "origin" ] = ( 1535,31, 2552,02, 96,9927 ); - ent.v[ "angles" ] = ( 348, 232, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_bathroom_monitor_glow" ); - ent.v[ "origin" ] = ( 1591,47, 2506,38, 96,4801 ); - ent.v[ "angles" ] = ( 348, 232, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_bathroom_monitor_glow" ); - ent.v[ "origin" ] = ( 1647,33, 2461,11, 96,3226 ); - ent.v[ "angles" ] = ( 348, 232, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_bathroom_monitor_glow" ); - ent.v[ "origin" ] = ( 1703,45, 2415,78, 96,6997 ); - ent.v[ "angles" ] = ( 348, 232, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_bathroom_monitor_glow" ); - ent.v[ "origin" ] = ( 1759,38, 2370,45, 96,5913 ); - ent.v[ "angles" ] = ( 348, 232, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_track_light" ); - ent.v[ "origin" ] = ( 1518,02, 2384,72, 124,864 ); - ent.v[ "angles" ] = ( 40, 94, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_track_light" ); - ent.v[ "origin" ] = ( 1541,95, 2366,98, 124,806 ); - ent.v[ "angles" ] = ( 33,5876, 50,8703, -6,19034 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_track_light" ); - ent.v[ "origin" ] = ( 1562,74, 2348,43, 125,055 ); - ent.v[ "angles" ] = ( 31,7214, 11,4415, -3,24704 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( 2260,15, 1627,25, 24 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 118 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( 2076,11, 1482,05, 24 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 97 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( 1942,86, 1457,43, 24 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 187 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( 1881,36, 1819,78, 24 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 132 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); - ent.v[ "origin" ] = ( -1485,69, 1646,44, 166,227 ); - ent.v[ "angles" ] = ( 86,7275, 153,841, 176,177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); - ent.v[ "origin" ] = ( -1313,56, 1702,64, 142,449 ); - ent.v[ "angles" ] = ( 86,7274, 153,841, -176,823 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); - ent.v[ "origin" ] = ( -1601,79, 1701,06, 180,42 ); - ent.v[ "angles" ] = ( 86,7274, 153,842, 179,177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); - ent.v[ "origin" ] = ( -1467,81, 1933,32, 179,5 ); - ent.v[ "angles" ] = ( 86,7274, 153,841, -172,823 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); - ent.v[ "origin" ] = ( -1362,45, 1866,78, 164,32 ); - ent.v[ "angles" ] = ( 88,6878, 164,707, -161,035 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); - ent.v[ "origin" ] = ( -1051,48, 2042,75, 142,222 ); - ent.v[ "angles" ] = ( 86,7274, 153,841, -160,823 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); - ent.v[ "origin" ] = ( -1227,57, 2041,63, 167,312 ); - ent.v[ "angles" ] = ( 86,7274, 153,841, -164,823 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); - ent.v[ "origin" ] = ( -1334,29, 2108,83, 180,264 ); - ent.v[ "angles" ] = ( 86,7274, 153,841, -163,823 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); - ent.v[ "origin" ] = ( -1155,85, 2296,8, 180,727 ); - ent.v[ "angles" ] = ( 86,9256, 136,057, -177,581 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); - ent.v[ "origin" ] = ( -1065,66, 2206,19, 165,435 ); - ent.v[ "angles" ] = ( 89,0626, 305,69, -7,95183 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_track_light" ); - ent.v[ "origin" ] = ( -1204,97, 2316,67, 157,531 ); - ent.v[ "angles" ] = ( 20,4373, 280,11, -4,93528 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_track_light" ); - ent.v[ "origin" ] = ( -1188,33, 2331,68, 157,328 ); - ent.v[ "angles" ] = ( 28,4413, 309,469, -4,11697 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_track_light" ); - ent.v[ "origin" ] = ( -1172,66, 2345,06, 157,79 ); - ent.v[ "angles" ] = ( 25,8376, 342,076, 5,31963 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_track_light" ); - ent.v[ "origin" ] = ( -1594,59, 1808,22, 157,955 ); - ent.v[ "angles" ] = ( 23,3245, 9,46662, 9,60153 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_track_light" ); - ent.v[ "origin" ] = ( -1614,91, 1770,33, 157,684 ); - ent.v[ "angles" ] = ( 20,6662, 293,305, -3,8135 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_track_light" ); - ent.v[ "origin" ] = ( -1604,43, 1789,55, 156,921 ); - ent.v[ "angles" ] = ( 28,4412, 319,469, -4,11695 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed" ); - ent.v[ "origin" ] = ( 1186,45, 2751,39, 136,945 ); - ent.v[ "angles" ] = ( 86,7387, 62,9516, -166,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed" ); - ent.v[ "origin" ] = ( 1384,88, 2591,56, 138,375 ); - ent.v[ "angles" ] = ( 88,6042, 82,4164, -147,099 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed" ); - ent.v[ "origin" ] = ( 1586,41, 2429,23, 139,375 ); - ent.v[ "angles" ] = ( 88,8774, 187,046, -42,4822 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed" ); - ent.v[ "origin" ] = ( 1465,85, 2266,87, 136,375 ); - ent.v[ "angles" ] = ( 89,0517, 199,162, -32,3586 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed" ); - ent.v[ "origin" ] = ( 1359,8, 2514,99, 136,375 ); - ent.v[ "angles" ] = ( 89,0517, 199,162, -32,3586 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed" ); - ent.v[ "origin" ] = ( 1258,69, 2601,13, 138,375 ); - ent.v[ "angles" ] = ( 89,0517, 199,162, -32,3586 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed" ); - ent.v[ "origin" ] = ( 1093,41, 2676,11, 136,775 ); - ent.v[ "angles" ] = ( 89,0516, 199,162, 58,6408 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); - ent.v[ "origin" ] = ( 1151,07, 2615,28, 136,775 ); - ent.v[ "angles" ] = ( 89,0516, 199,162, 58,6408 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ceiling_recessed_short" ); - ent.v[ "origin" ] = ( 1391,95, 2415,95, 137,575 ); - ent.v[ "angles" ] = ( 89,0516, 199,162, 58,6408 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_sprinkler_drip_physics" ); - ent.v[ "origin" ] = ( 1525,74, 2382,47, 49,6964 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_sprinkler_drip_physics" ); - ent.v[ "origin" ] = ( 1696,66, 2408,8, 45,3473 ); - ent.v[ "angles" ] = ( 89, 180, -57 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( -2051,52, 1062,76, 24 ); - ent.v[ "angles" ] = ( 359,567, 71,0595, -0,508649 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); - ent.v[ "origin" ] = ( 1598,24, -28,9399, 0,125 ); - ent.v[ "angles" ] = ( 341,589, 125,471, 108,652 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_concert_sun" ); - ent.v[ "origin" ] = ( -123326, 16214, 24084 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1401,48, 518,774, 157,875 ); - ent.v[ "angles" ] = ( 270, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1401,22, 654,584, 157,175 ); - ent.v[ "angles" ] = ( 270, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( 1158,39, 1969,04, 166,428 ); - ent.v[ "angles" ] = ( 90, 0, 49 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( 1052,3, 2081,28, 166,382 ); - ent.v[ "angles" ] = ( 90, 0, 43 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( 933,055, 2183,92, 166,375 ); - ent.v[ "angles" ] = ( 90, 0, 36 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( 1026,63, 2313,69, 178,071 ); - ent.v[ "angles" ] = ( 90, 0, 36 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( 1160,05, 2200,94, 177,45 ); - ent.v[ "angles" ] = ( 90, 0, 44 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( 1282,81, 2072,3, 178,445 ); - ent.v[ "angles" ] = ( 90, 0, 47 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( 594,147, 2380,49, 165,473 ); - ent.v[ "angles" ] = ( 90, 180, -157 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( 695,924, 2511,93, 177,562 ); - ent.v[ "angles" ] = ( 90, 180, -157 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ray_sun_md_spread_1s" ); - ent.v[ "origin" ] = ( 631,339, 2367,65, 27 ); - ent.v[ "angles" ] = ( 328,934, 168,707, -77,4483 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ray_sun_md_1s" ); - ent.v[ "origin" ] = ( 598,337, 2351,86, 49 ); - ent.v[ "angles" ] = ( 329,859, 182,49, -91,6652 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); - ent.v[ "origin" ] = ( 830,122, 2224,34, -29 ); - ent.v[ "angles" ] = ( 343,195, 134,207, 100,062 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ray_sun_md_short_1s" ); - ent.v[ "origin" ] = ( 549,608, 2323,99, 29 ); - ent.v[ "angles" ] = ( 327,281, 180,329, -83,6047 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ray_sun_md_wide_1s" ); - ent.v[ "origin" ] = ( 2039,82, 1198,2, 33,125 ); - ent.v[ "angles" ] = ( 335,277, 157,123, -55,0407 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); - ent.v[ "origin" ] = ( 1715,98, 77,9118, -18,875 ); - ent.v[ "angles" ] = ( 337,834, 151,778, 136,172 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( 394,151, 201,36, 114,81 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( 396,866, 108,737, 114,626 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( 266,427, 108,836, 114,695 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( 266,979, 201,657, 114,163 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ray_sun_md_short_1s" ); - ent.v[ "origin" ] = ( 23,5171, 1029,3, -57 ); - ent.v[ "angles" ] = ( 341,776, 185,65, -90,7827 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( 8,75947, 109,346, 114,496 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( 139,199, 109,247, 114,127 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( 9,31147, 202,167, 113,964 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( 136,484, 201,87, 114,311 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( -366,449, 12,2591, 113,936 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( -490,844, 11,6303, 114,457 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( -490,519, -85,3038, 114,478 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( -367,962, -85,0923, 114,459 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); - ent.v[ "origin" ] = ( -701,47, 948,397, -118 ); - ent.v[ "angles" ] = ( 330,435, 162,335, -80,0646 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); - ent.v[ "origin" ] = ( -666,823, 945,4, -38 ); - ent.v[ "angles" ] = ( 330,435, 162,335, -107,065 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); - ent.v[ "origin" ] = ( -1296,1, 1434,01, -94 ); - ent.v[ "angles" ] = ( 330,435, 162,335, 90,9353 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); - ent.v[ "origin" ] = ( -1668,91, 1468,81, 81 ); - ent.v[ "angles" ] = ( 6,76034, 30,1075, 1,82019 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); - ent.v[ "origin" ] = ( -1005,7, 505,867, -39 ); - ent.v[ "angles" ] = ( 359,536, 36,0461, -0,491171 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_linger_lit" ); - ent.v[ "origin" ] = ( -967,662, 530,119, -37,0119 ); - ent.v[ "angles" ] = ( 1,93877, 151,124, 3,67815 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); - ent.v[ "origin" ] = ( -692,796, 478,937, -123,564 ); - ent.v[ "angles" ] = ( 338,905, 169,305, 83,6134 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ray_sun_md_wide_1s" ); - ent.v[ "origin" ] = ( -533,778, 236,463, -113,875 ); - ent.v[ "angles" ] = ( 326,062, 175,535, 29,4534 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_dust_motes_xsm_short" ); - ent.v[ "origin" ] = ( -698,578, 244,436, -36,9706 ); - ent.v[ "angles" ] = ( 306,462, 170,025, 18,105 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_dust_motes_xsm_short" ); - ent.v[ "origin" ] = ( -411,823, 423,772, 53,3709 ); - ent.v[ "angles" ] = ( 329,795, 165,243, 19,3202 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ray_sun_md_spread_1s" ); - ent.v[ "origin" ] = ( -381,716, 439,186, 0 ); - ent.v[ "angles" ] = ( 330,346, 159,396, -123,487 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ray_sun_md_spread_1s" ); - ent.v[ "origin" ] = ( -398,133, 374,117, -3,04389 ); - ent.v[ "angles" ] = ( 328,633, 154,645, -135,435 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ray_sun_md_short_1s" ); - ent.v[ "origin" ] = ( -438,938, 478,051, 60,8636 ); - ent.v[ "angles" ] = ( 331,363, 166,986, -126,031 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_smk_field_md" ); - ent.v[ "origin" ] = ( 61,6318, 2580,51, 76 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_smk_field_md" ); - ent.v[ "origin" ] = ( -481,2, 2496,29, 81 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_smk_field_md" ); - ent.v[ "origin" ] = ( 1046,07, 1905,4, 54 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 103 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_linger_lit" ); - ent.v[ "origin" ] = ( -412,616, 2536,8, 44 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 78 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); - ent.v[ "origin" ] = ( -1201,6, -286,67, -25,875 ); - ent.v[ "angles" ] = ( 355,892, 140,796, 1,67287 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); - ent.v[ "origin" ] = ( -1636,01, -193,472, 9,125 ); - ent.v[ "angles" ] = ( 358,206, 96,7923, 1,05661 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); - ent.v[ "origin" ] = ( -2149,42, 508,981, 1,47507 ); - ent.v[ "angles" ] = ( 338,088, 160,576, 86,975 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); - ent.v[ "origin" ] = ( -2246,31, 538,827, -75,4825 ); - ent.v[ "angles" ] = ( 336,091, 160,691, 85,9302 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_dust_motes_xsm_short" ); - ent.v[ "origin" ] = ( -205,55, 672,252, 60 ); - ent.v[ "angles" ] = ( 314,884, 310,617, 143,299 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_dust_motes_xsm_short" ); - ent.v[ "origin" ] = ( -325,491, 380,432, 19,125 ); - ent.v[ "angles" ] = ( 308,258, 132,621, 21,6228 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); - ent.v[ "origin" ] = ( -64,8068, 1131,3, -54,0058 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_smk_field_md" ); - ent.v[ "origin" ] = ( 195,287, 1558,04, -58 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_smk_field_md" ); - ent.v[ "origin" ] = ( -285,1, 1529, -58 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_smk_field_md" ); - ent.v[ "origin" ] = ( -765,279, 1221,25, -49 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_smk_field_md" ); - ent.v[ "origin" ] = ( -311,368, -460,534, -38,9531 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ray_sun_lg_spread_1s" ); - ent.v[ "origin" ] = ( -892,485, -325,185, -152,805 ); - ent.v[ "angles" ] = ( 329,267, 170,449, 103,906 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); - ent.v[ "origin" ] = ( 174,972, 367,875, -40,2769 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 97 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_light_ray_sun_md_wide_1s" ); - ent.v[ "origin" ] = ( 1006,87, 2178,07, 44 ); - ent.v[ "angles" ] = ( 330,877, 171,735, 124,957 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); - ent.v[ "origin" ] = ( 992,676, 2055,13, 79 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 70 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_linger_lit" ); - ent.v[ "origin" ] = ( 1041,64, 2091,38, 57 ); - ent.v[ "angles" ] = ( 3,89792, 91,0306, 0,90132 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); - ent.v[ "origin" ] = ( 1468,05, 24,2235, 57,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 104 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_linger_lit" ); - ent.v[ "origin" ] = ( 1448,46, -4,94705, 65,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 107 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_linger_lit" ); - ent.v[ "origin" ] = ( 1361,27, 147,256, 33,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 107 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); - ent.v[ "origin" ] = ( 1225,76, 137,601, 54,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 125 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); - ent.v[ "origin" ] = ( 293,812, -647,991, -25,9943 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 112 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_fountain_middle" ); - ent.v[ "origin" ] = ( 2561,43, 2105,29, 9 ); - ent.v[ "angles" ] = ( 270, 0, -50 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -10; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_fountain_sides" ); - ent.v[ "origin" ] = ( 2345,44, 2327,04, 10,5205 ); - ent.v[ "angles" ] = ( 270, 1,68468, -21,6846 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -14; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_fountain_sides" ); - ent.v[ "origin" ] = ( 2619, 1791,64, 11,6013 ); - ent.v[ "angles" ] = ( 270, 0, -67 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -14; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( 404,329, -7,8116, -64,3441 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 133 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( -518,291, 1059,17, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 97 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( -232,748, 1050,48, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 97 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_fountain_middle" ); - ent.v[ "origin" ] = ( 2470,7, 2231,16, 11,3533 ); - ent.v[ "angles" ] = ( 270, 0, -50 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -6; - ent = maps/mp/_utility::createoneshoteffect( "fx_concert_fountain_middle" ); - ent.v[ "origin" ] = ( 2612,39, 1956,03, 11,2229 ); - ent.v[ "angles" ] = ( 270, 0, -50 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -6; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_fireplace_md2" ); - ent.v[ "origin" ] = ( 1678,51, 169,766, 67,1178 ); - ent.v[ "angles" ] = ( 271, 180, 81 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1761,27, 1215,55, 159,247 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 276,5 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1808,53, 1216,58, 159,25 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 276,5 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1856,37, 1216,15, 159,248 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 276,5 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( -963,89, 1681,53, 85,5611 ); - ent.v[ "angles" ] = ( 72,0012, 141,169, 177,161 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign_glow_yellowish" ); - ent.v[ "origin" ] = ( 191,353, 685,718, 1,3389 ); - ent.v[ "angles" ] = ( 317,37, 59,8108, -5,50809 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign_glow_yellowish" ); - ent.v[ "origin" ] = ( -37,5779, 574,312, 1,07672 ); - ent.v[ "angles" ] = ( 340,454, 244,649, 7,83269 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( -2380,42, 882,398, -37,6809 ); - ent.v[ "angles" ] = ( 351,32, 114,302, -1,71628 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_ground_windy" ); - ent.v[ "origin" ] = ( -2667,92, 11,7197, -95,359 ); - ent.v[ "angles" ] = ( 355,534, 86,1613, 2,57025 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1158,77, 2875,69, 139,875 ); - ent.v[ "angles" ] = ( 270, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1210,7, 2832,73, 139,875 ); - ent.v[ "angles" ] = ( 270, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1263,23, 2790,23, 139,875 ); - ent.v[ "angles" ] = ( 270, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1315,51, 2747,73, 139,875 ); - ent.v[ "angles" ] = ( 270, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1368,9, 2706,13, 139,875 ); - ent.v[ "angles" ] = ( 270, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1423,78, 2664,28, 138,875 ); - ent.v[ "angles" ] = ( 270, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( 1476,78, 2622,88, 138,875 ); - ent.v[ "angles" ] = ( 270, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_motes_blowing_sm" ); - ent.v[ "origin" ] = ( 125,307, 590,666, -70,1511 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 137 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_vend_machine_sm_orange" ); - ent.v[ "origin" ] = ( -1067,43, 2379,17, 73,2374 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 306 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; -} diff --git a/Multiplayer Maps/mp_concert/maps/mp/mp_concert.gsc b/Multiplayer Maps/mp_concert/maps/mp/mp_concert.gsc deleted file mode 100644 index a500023..0000000 --- a/Multiplayer Maps/mp_concert/maps/mp/mp_concert.gsc +++ /dev/null @@ -1,136 +0,0 @@ -#include maps/mp/gametypes/_spawning; -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - level.overrideplayerdeathwatchtimer = ::leveloverridetime; - level.useintermissionpointsonwavespawn = ::useintermissionpointsonwavespawn; - maps/mp/mp_concert_fx::main(); - maps/mp/_load::main(); - maps/mp/mp_concert_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_concert" ); - setdvar( "compassmaxrange", "2100" ); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - maps/mp/gametypes/_spawning::level_use_unified_spawning( 1 ); - level.remotemotarviewup = 18; - level thread water_trigger_init(); -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2300", reset_dvars ); -} - -water_trigger_init() -{ - wait 3; - triggers = getentarray( "trigger_hurt", "classname" ); - _a61 = triggers; - _k61 = getFirstArrayKey( _a61 ); - while ( isDefined( _k61 ) ) - { - trigger = _a61[ _k61 ]; - if ( trigger.origin[ 2 ] > level.mapcenter[ 2 ] ) - { - } - else - { - trigger thread water_trigger_think(); - } - _k61 = getNextArrayKey( _a61, _k61 ); - } - triggers = getentarray( "water_killbrush", "targetname" ); - _a73 = triggers; - _k73 = getFirstArrayKey( _a73 ); - while ( isDefined( _k73 ) ) - { - trigger = _a73[ _k73 ]; - trigger thread player_splash_think(); - _k73 = getNextArrayKey( _a73, _k73 ); - } -} - -player_splash_think() -{ - for ( ;; ) - { - self waittill( "trigger", entity ); - if ( isplayer( entity ) && isalive( entity ) ) - { - self thread trigger_thread( entity, ::player_water_fx ); - } - } -} - -player_water_fx( player, endon_condition ) -{ - maxs = self.origin + self getmaxs(); - if ( maxs[ 2 ] > 60 ) - { - maxs += vectorScale( ( 0, 0, 1 ), 10 ); - } - origin = ( player.origin[ 0 ], player.origin[ 1 ], maxs[ 2 ] ); - playfx( level._effect[ "water_splash_sm" ], origin ); -} - -water_trigger_think() -{ - for ( ;; ) - { - self waittill( "trigger", entity ); - if ( isplayer( entity ) ) - { - entity playsound( "mpl_splash_death" ); - playfx( level._effect[ "water_splash" ], entity.origin + vectorScale( ( 0, 0, 1 ), 40 ) ); - } - } -} - -leveloverridetime( defaulttime ) -{ - if ( self isinwater() ) - { - return 0,4; - } - return defaulttime; -} - -useintermissionpointsonwavespawn() -{ - return self isinwater(); -} - -isinwater() -{ - triggers = getentarray( "trigger_hurt", "classname" ); - _a138 = triggers; - _k138 = getFirstArrayKey( _a138 ); - while ( isDefined( _k138 ) ) - { - trigger = _a138[ _k138 ]; - if ( trigger.origin[ 2 ] > level.mapcenter[ 2 ] ) - { - } - else - { - if ( self istouching( trigger ) ) - { - return 1; - } - } - _k138 = getNextArrayKey( _a138, _k138 ); - } - return 0; -} diff --git a/Multiplayer Maps/mp_concert/maps/mp/mp_concert_amb.gsc b/Multiplayer Maps/mp_concert/maps/mp/mp_concert_amb.gsc deleted file mode 100644 index ca29353..0000000 --- a/Multiplayer Maps/mp_concert/maps/mp/mp_concert_amb.gsc +++ /dev/null @@ -1,24 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ - level thread instruments_init(); -} - -instruments_init() -{ - inst_trigs = getentarray( "snd_instrument", "targetname" ); - array_thread( inst_trigs, ::play_instrument ); -} - -play_instrument() -{ - while ( 1 ) - { - self waittill( "damage" ); - self playsound( self.script_noteworthy ); - wait 0,1; - } -} diff --git a/Multiplayer Maps/mp_concert/maps/mp/mp_concert_fx.gsc b/Multiplayer Maps/mp_concert/maps/mp/mp_concert_fx.gsc deleted file mode 100644 index 39a1785..0000000 --- a/Multiplayer Maps/mp_concert/maps/mp/mp_concert_fx.gsc +++ /dev/null @@ -1,95 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); -#using_animtree( "fxanim_props_dlc" ); - -main() -{ - precache_fxanim_props(); - precache_fxanim_props_dlc(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_concert_fx::main(); -} - -precache_scripted_fx() -{ - level._effect[ "water_splash" ] = loadfx( "bio/player/fx_player_water_splash_mp" ); -} - -precache_createfx_fx() -{ - level._effect[ "fx_lf_mp_concert_sun" ] = loadfx( "lens_flares/fx_lf_mp_concert_sun" ); - level._effect[ "fx_pigeon_panic_flight_med" ] = loadfx( "bio/animals/fx_pigeon_panic_flight_med" ); - level._effect[ "fx_leaves_ground_wind" ] = loadfx( "foliage/fx_leaves_ground_wind" ); - level._effect[ "fx_sand_gust_ground_sm" ] = loadfx( "dirt/fx_sand_gust_ground_sm" ); - level._effect[ "fx_sand_gust_ground_md_xslw" ] = loadfx( "dirt/fx_sand_gust_ground_md_xslw" ); - level._effect[ "fx_concert_leaves_falling_red" ] = loadfx( "foliage/fx_concert_leaves_falling_red" ); - level._effect[ "fx_concert_leaves_falling_orange" ] = loadfx( "foliage/fx_concert_leaves_falling_orange" ); - level._effect[ "fx_leaves_ground_windy" ] = loadfx( "foliage/fx_leaves_ground_windy" ); - level._effect[ "fx_patio_flame_lamp_heat" ] = loadfx( "props/fx_patio_flame_lamp_heat" ); - level._effect[ "fx_water_sprinkler_drip_physics" ] = loadfx( "water/fx_water_sprinkler_drip_physics" ); - level._effect[ "fx_fire_fireplace_md2" ] = loadfx( "fire/fx_fire_fireplace_md2" ); - level._effect[ "fx_smk_linger_lit" ] = loadfx( "smoke/fx_concert_smk_linger_lit" ); - level._effect[ "fx_concert_smk_field_md" ] = loadfx( "smoke/fx_concert_smk_field_md" ); - level._effect[ "fx_light_floodlight_sqr_cool_xlg" ] = loadfx( "light/fx_light_floodlight_sqr_cool_xlg" ); - level._effect[ "fx_light_buoy_red_blink" ] = loadfx( "light/fx_light_buoy_red_blink" ); - level._effect[ "fx_light_floodlight_stadium_lg" ] = loadfx( "light/fx_light_floodlight_stadium_lg" ); - level._effect[ "fx_light_stagelight_wht" ] = loadfx( "light/fx_light_stagelight_wht" ); - level._effect[ "fx_concert_can_light_blue" ] = loadfx( "light/fx_concert_can_light_blue" ); - level._effect[ "fx_concert_can_light_blue_static" ] = loadfx( "light/fx_concert_can_light_blue_static" ); - level._effect[ "fx_concert_can_light_purple" ] = loadfx( "light/fx_concert_can_light_purple" ); - level._effect[ "fx_concert_can_light_red" ] = loadfx( "light/fx_concert_can_light_red" ); - level._effect[ "fx_concert_can_light_red_static" ] = loadfx( "light/fx_concert_can_light_red_static" ); - level._effect[ "fx_light_spotlight_md_cool" ] = loadfx( "light/fx_light_spotlight_md_cool" ); - level._effect[ "fx_light_baracade_yellow" ] = loadfx( "light/fx_light_baracade_yellow" ); - level._effect[ "fx_light_fluorescent_overhead_bright" ] = loadfx( "light/fx_light_fluorescent_overhead_bright" ); - level._effect[ "fx_light_flourescent_ceiling_panel_2" ] = loadfx( "light/fx_light_flourescent_ceiling_panel_2" ); - level._effect[ "fx_track_light" ] = loadfx( "light/fx_track_light" ); - level._effect[ "fx_light_button_yellow_on" ] = loadfx( "light/fx_light_button_yellow_on" ); - level._effect[ "fx_light_vend_machine_sm_orange" ] = loadfx( "light/fx_light_vend_machine_sm_orange" ); - level._effect[ "fx_light_vend_machine_sm_blue" ] = loadfx( "light/fx_light_vend_machine_sm_blue" ); - level._effect[ "fx_concert_bathroom_monitor_glow" ] = loadfx( "light/fx_concert_bathroom_monitor_glow" ); - level._effect[ "fx_concert_bath_hygiene_box_glow" ] = loadfx( "light/fx_concert_bath_hygiene_box_glow" ); - level._effect[ "fx_concert_hand_dryer_glow" ] = loadfx( "light/fx_concert_hand_dryer_glow" ); - level._effect[ "fx_light_com_utility_cool" ] = loadfx( "light/fx_light_com_utility_cool" ); - level._effect[ "fx_light_exit_sign_glow" ] = loadfx( "light/fx_light_exit_sign_glow" ); - level._effect[ "fx_light_recessed_cool" ] = loadfx( "light/fx_light_recessed_cool" ); - level._effect[ "fx_light_recessed_wrm" ] = loadfx( "light/fx_light_recessed_wrm" ); - level._effect[ "fx_light_hanging_modern" ] = loadfx( "light/fx_light_hanging_modern" ); - level._effect[ "fx_light_neon_open_sign" ] = loadfx( "light/fx_light_neon_open_sign" ); - level._effect[ "fx_concert_light_ceiling_recessed_short" ] = loadfx( "light/fx_concert_light_ceiling_recessed_short" ); - level._effect[ "fx_concert_light_ceiling_recessed" ] = loadfx( "light/fx_concert_light_ceiling_recessed" ); - level._effect[ "fx_light_exit_sign_glow_yellowish" ] = loadfx( "light/fx_light_exit_sign_glow_yellowish" ); - level._effect[ "fx_light_flour_glow_v_shape_cool" ] = loadfx( "light/fx_light_flour_glow_v_shape_cool" ); - level._effect[ "fx_light_flour_glow_v_shape_cool_sm" ] = loadfx( "light/fx_light_flour_glow_v_shape_cool_sm" ); - level._effect[ "fx_concert_light_ray_sun_lg_spread_1s" ] = loadfx( "light/fx_concert_light_ray_sun_lg_spread_1s" ); - level._effect[ "fx_concert_light_ray_sun_md_1s" ] = loadfx( "light/fx_concert_light_ray_sun_md_1s" ); - level._effect[ "fx_concert_light_ray_sun_md_short_1s" ] = loadfx( "light/fx_concert_light_ray_sun_md_short_1s" ); - level._effect[ "fx_concert_light_ray_sun_md_spread_1s" ] = loadfx( "light/fx_concert_light_ray_sun_md_spread_1s" ); - level._effect[ "fx_concert_light_ray_sun_md_wide_1s" ] = loadfx( "light/fx_concert_light_ray_sun_md_wide_1s" ); - level._effect[ "fx_concert_light_ray_sun_window_1s" ] = loadfx( "light/fx_concert_light_ray_sun_window_1s" ); - level._effect[ "fx_light_dust_motes_xsm_short" ] = loadfx( "light/fx_concert_dust_motes_xsm_short" ); - level._effect[ "fx_light_dust_motes_sm" ] = loadfx( "light/fx_light_dust_motes_sm" ); - level._effect[ "fx_dust_motes_blowing_sm" ] = loadfx( "debris/fx_dust_motes_blowing_sm" ); - level._effect[ "fx_concert_fountain_sides" ] = loadfx( "water/fx_concert_fountain_sides" ); - level._effect[ "fx_concert_fountain_middle" ] = loadfx( "water/fx_concert_fountain_middle" ); - level._effect[ "fx_insects_butterfly_flutter_radial2" ] = loadfx( "bio/insects/fx_insects_butterfly_flutter_radial2" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "seagull_circle_01" ] = %fxanim_gp_seagull_circle_01_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_02" ] = %fxanim_gp_seagull_circle_02_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_03" ] = %fxanim_gp_seagull_circle_03_anim; - level.scr_anim[ "fxanim_props" ][ "london_eye" ] = %fxanim_mp_con_london_eye_anim; -} - -precache_fxanim_props_dlc() -{ - level.scr_anim[ "fxanim_props_dlc" ][ "wires_stage_rear" ] = %fxanim_mp_con_wires_stage_rear_anim; - level.scr_anim[ "fxanim_props_dlc" ][ "wires_stage_scaffold" ] = %fxanim_mp_con_wires_stage_scaffold_anim; - level.scr_anim[ "fxanim_props_dlc" ][ "wires_seats_scaffold" ] = %fxanim_mp_con_wires_seats_scaffold_anim; - level.scr_anim[ "fxanim_props_dlc" ][ "river_boats" ] = %fxanim_mp_con_boat_link_anim; - level.scr_anim[ "fxanim_props_dlc" ][ "wires_stage_right" ] = %fxanim_mp_con_wires_stage_right_anim; -} diff --git a/Multiplayer Maps/mp_dig/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_dig/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_dig/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_dig/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_dig/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_dig/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_dig/maps/mp/createfx/mp_dig_fx.gsc b/Multiplayer Maps/mp_dig/maps/mp/createfx/mp_dig_fx.gsc deleted file mode 100644 index 7e48de3..0000000 --- a/Multiplayer Maps/mp_dig/maps/mp/createfx/mp_dig_fx.gsc +++ /dev/null @@ -1,1730 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -975,73, -682,379, 51,1027 ); - ent.v[ "angles" ] = ( 270,883, 173,792, -175,177 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -442,653, -1235,4, 64,2364 ); - ent.v[ "angles" ] = ( 270,13, 34,2431, -35,4556 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 121,313, -686,781, 49,5086 ); - ent.v[ "angles" ] = ( 270,13, 34,2431, -35,4556 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 129,259, 340,491, 52,1854 ); - ent.v[ "angles" ] = ( 270,13, 34,2431, -35,4556 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -291,945, 1067,71, 48,3673 ); - ent.v[ "angles" ] = ( 270,13, 34,2431, -35,4556 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -654,739, 1262,91, 96,0455 ); - ent.v[ "angles" ] = ( 271,081, 83,1622, -84,3737 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 771,471, -959,553, 41,3816 ); - ent.v[ "angles" ] = ( 270,13, 34,2431, -35,4556 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -150,143, -1124,88, 48,2339 ); - ent.v[ "angles" ] = ( 273,25, 68,7368, -70,2869 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -984,748, 313,495, 51,0594 ); - ent.v[ "angles" ] = ( 270,13, 34,2431, -35,4556 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1308,08, 636,018, 41,0502 ); - ent.v[ "angles" ] = ( 270,13, 34,2431, -35,4556 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1308,91, 299,631, 46,7513 ); - ent.v[ "angles" ] = ( 357,949, 269,471, -0,139436 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1453,27, -1389,48, 71,947 ); - ent.v[ "angles" ] = ( 270,13, 34,2431, -35,4556 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -455,187, 296,714, 4,60001 ); - ent.v[ "angles" ] = ( 270,13, 34,2417, -29,4542 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2008,97, -168,12, 310,786 ); - ent.v[ "angles" ] = ( 87,7569, 199,254, 17,5658 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1069,13, 86,0965, 267,875 ); - ent.v[ "angles" ] = ( 88,9043, 323,553, 144,846 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1167,5, -391,909, 46,391 ); - ent.v[ "angles" ] = ( 358,953, 269,383, 0,866636 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1385,91, -386,256, 48,1052 ); - ent.v[ "angles" ] = ( 359,949, 269,501, 0,860007 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1358,06, 127,957, 48,4917 ); - ent.v[ "angles" ] = ( 359,948, 269,536, 0,859066 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1675,14, 130,724, 81 ); - ent.v[ "angles" ] = ( 358,991, 262,521, 0 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1667,36, -224,431, 80,4604 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 0,859211 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -981,79, -915,064, 48,2275 ); - ent.v[ "angles" ] = ( 359,938, 266,623, -0,137793 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -303,34, -415,977, 50,7424 ); - ent.v[ "angles" ] = ( 0,765307, 259,487, -0,975561 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -764,705, -882,303, 46,4442 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 0,859211 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -444,67, -92,0192, 45,5844 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -712,43, 626,698, 47,3168 ); - ent.v[ "angles" ] = ( 359,948, 269,519, -0,140769 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -944,994, 757,274, 47,77 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 0,859211 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -115,052, 402,837, 48,9847 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -125,63, 151,183, 46,4389 ); - ent.v[ "angles" ] = ( 0,130779, 227,595, -1,17077 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 582,65, 542,296, 46,0211 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 425,887, 263,578, 49,2162 ); - ent.v[ "angles" ] = ( 358,948, 269,521, -0,140792 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 530,395, -65,4206, 45,0844 ); - ent.v[ "angles" ] = ( 358,948, 269,521, -0,140788 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 198,044, -351,214, 45,5127 ); - ent.v[ "angles" ] = ( 1,94424, 269,671, 2,86038 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 171,534, 27,1388, 49,854 ); - ent.v[ "angles" ] = ( 358,948, 269,521, -2,14079 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1103,69, 823,073, 123 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 1,85921 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1018,38, 325,428, 120,796 ); - ent.v[ "angles" ] = ( 357,919, 271,507, -1,17763 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 949,245, -86,4016, 120 ); - ent.v[ "angles" ] = ( 359,887, 266,572, -1,13692 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1018,23, -335,311, 122,491 ); - ent.v[ "angles" ] = ( 358,948, 269,521, -0,140792 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 977,613, -1074,53, 121 ); - ent.v[ "angles" ] = ( 358,948, 269,521, -0,140792 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 91,8562, -1289,38, 57,745 ); - ent.v[ "angles" ] = ( 359,945, 269,52, -0,107685 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1209,94, -1480,36, 72,3 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1647,7, -1512,51, 75,9932 ); - ent.v[ "angles" ] = ( 358,948, 269,521, -1,14079 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1465, -1152,35, 50,6657 ); - ent.v[ "angles" ] = ( 358,153, 267,511, 0,897194 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1471,32, -748,424, 40,6138 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1760, -764,091, 83 ); - ent.v[ "angles" ] = ( 0, 267,556, 1,89389 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1646,32, -472,952, 78,4257 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 0,859211 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1107,6, 54,0699, 37,6219 ); - ent.v[ "angles" ] = ( 359,801, 272,531, 0,747811 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1267,56, -714,212, 46,3197 ); - ent.v[ "angles" ] = ( 357,949, 269,471, 2,86057 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1253,58, -895,33, 44,3465 ); - ent.v[ "angles" ] = ( 0,945345, 269,621, 1,85912 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1020,8, -1206,86, 49,8449 ); - ent.v[ "angles" ] = ( 270,13, 34,2431, -35,4556 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -224,186, -431,846, 51,4973 ); - ent.v[ "angles" ] = ( 358,659, 299,542, 1,94962 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -975,899, 1193,7, 37,5132 ); - ent.v[ "angles" ] = ( 357,98, 267,47, -2,06838 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1269,92, 1286,3, 40,8719 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1475,66, 1192,44, 72,625 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1699,99, 1455,44, 33,0763 ); - ent.v[ "angles" ] = ( 270,13, 34,2431, -35,4556 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1073,47, 1221,27, 40,937 ); - ent.v[ "angles" ] = ( 270,13, 34,2431, -35,4556 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 923,303, 163,749, 328,984 ); - ent.v[ "angles" ] = ( 88,9042, 323,554, 141,847 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 915,939, -29,2198, 302,891 ); - ent.v[ "angles" ] = ( 88,9042, 323,553, 142,846 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 913,955, -440,54, 245,281 ); - ent.v[ "angles" ] = ( 88,9042, 323,553, 142,846 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1116,28, 339,866, 282,891 ); - ent.v[ "angles" ] = ( 88,9042, 323,553, 142,846 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 568,512, -472,726, 220,998 ); - ent.v[ "angles" ] = ( 88,9042, 323,553, 142,846 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -864,392, -1125,99, 185,998 ); - ent.v[ "angles" ] = ( 88,9042, 323,553, 142,846 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -150,687, 710,23, 46,6714 ); - ent.v[ "angles" ] = ( 359,947, 269,623, 1,85701 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1469,65, -908,833, 42,673 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1511,61, 402,533, 81 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1707,32, 516,114, 83 ); - ent.v[ "angles" ] = ( 359,252, 263,528, 1,95341 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1755,23, -42,2177, 82 ); - ent.v[ "angles" ] = ( 359,408, 260,532, 0 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1470,57, 861,328, 88,625 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1225,04, 890,366, 90,125 ); - ent.v[ "angles" ] = ( 270,13, 34,2431, -35,4556 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -128,653, -828,434, 46,159 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -12097,5, 1256,43, -536,39 ); - ent.v[ "angles" ] = ( 359,888, 267,789, -2,10462 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -8767,93, -4166,24, -1331,77 ); - ent.v[ "angles" ] = ( 2,99625, 270,677, -2,11048 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -6951,2, -7860,92, -334,799 ); - ent.v[ "angles" ] = ( 359,888, 267,789, -2,10462 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3569,52, -10851,6, 334,967 ); - ent.v[ "angles" ] = ( 359,888, 267,789, -2,10462 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -442,389, -638,749, 2,40001 ); - ent.v[ "angles" ] = ( 270,13, 34,2431, -35,4556 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -18121,5, -7663,97, -863,272 ); - ent.v[ "angles" ] = ( 359,888, 267,789, -2,10462 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1777,02, 331,411, 82 ); - ent.v[ "angles" ] = ( 270,13, 34,2431, -35,4556 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1712,06, -941,167, 80 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1691,64, -391,157, 77,996 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1669,09, -29,8378, 88,225 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1739,31, 510,762, 80 ); - ent.v[ "angles" ] = ( 358,948, 269,521, -0,14079 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -727,853, -974,935, 41,5098 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1109,1, -925,888, 40,2306 ); - ent.v[ "angles" ] = ( 359,947, 269,571, 2,85873 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -90,9172, -943,541, 43,1525 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 541,239, -671,262, 47,9328 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 709, -141,581, 81,8557 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1028,07, -776,791, 120,465 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1027,42, 579,538, 135,1 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 603,89, 567,279, 46,7686 ); - ent.v[ "angles" ] = ( 358,948, 269,521, -0,14079 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 450,735, 361,061, 45,8586 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -744,916, 653,466, 46,999 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1109,28, 567,716, 46,0958 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1240,78, 109,233, 45,5401 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1401,13, 265,756, 80,5352 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -931,289, 1173,87, 36,9994 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1441,9, 1533,16, 30,7975 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1217,39, 1374,92, 32,3827 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1632,42, 1876,16, 104 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -137,432, 600,148, 51,6498 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 393,219, -380,601, 42,4149 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1271,31, -452,637, 47,8861 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1100,93, 250,476, 157,061 ); - ent.v[ "angles" ] = ( 88,9045, 323,551, 102,845 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -710,217, 656,387, 92,0435 ); - ent.v[ "angles" ] = ( 357,802, 272,47, 2,74941 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -133,639, 689,767, 105,909 ); - ent.v[ "angles" ] = ( 355,953, 269,337, 0,868661 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 458,637, 419,364, 106,269 ); - ent.v[ "angles" ] = ( 357,953, 269,367, 0,867047 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1036,83, 731,826, 200 ); - ent.v[ "angles" ] = ( 356,951, 269,421, -0,137209 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1031,53, -699,946, 169 ); - ent.v[ "angles" ] = ( 359,947, 269,571, 0,858728 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 81,4832, -844,086, 132,785 ); - ent.v[ "angles" ] = ( 354,953, 269,321, 2,86987 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1675,49, -265,352, 131,125 ); - ent.v[ "angles" ] = ( 354,953, 269,321, 2,86987 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1100,16, -60,6596, 100,96 ); - ent.v[ "angles" ] = ( 355,11, 266,314, 3,13037 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 675,183, 710,305, 128,792 ); - ent.v[ "angles" ] = ( 354,953, 269,321, 2,86987 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1237,52, -1440,27, 166,125 ); - ent.v[ "angles" ] = ( 357,949, 269,472, -3,13944 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -381,467, -329,471, 120,739 ); - ent.v[ "angles" ] = ( 354,953, 269,321, -1,13013 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -693,051, -694,344, 115,509 ); - ent.v[ "angles" ] = ( 354,953, 269,321, 2,86987 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4102,85, -1085,76, 288,98 ); - ent.v[ "angles" ] = ( 359,888, 267,789, -2,10462 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1116,78, -619,99, 313,501 ); - ent.v[ "angles" ] = ( 88,9041, 323,555, 145,848 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 915,666, -263,719, 323,486 ); - ent.v[ "angles" ] = ( 88,9042, 323,553, 142,846 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 125,188, 217,013, 153,71 ); - ent.v[ "angles" ] = ( 88,9044, 323,551, 105,844 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -716,807, 840,367, 47,6264 ); - ent.v[ "angles" ] = ( 270,13, 34,2431, -35,4556 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 831,69, 117,031, -33,2341 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 820,294, -65,3089, -36,8615 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 832,56, -269,661, -34,5599 ); - ent.v[ "angles" ] = ( 358,948, 269,521, -1,14079 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 818,498, -109,025, -38,5274 ); - ent.v[ "angles" ] = ( 270,13, 34,2431, -35,4556 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_dig_sun1" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -778139, -2182370, 1005360 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1323,21, -357,37, 118,457 ); - ent.v[ "angles" ] = ( 354,901, 266,31, -0,863788 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 669,13, -587,953, 92,4911 ); - ent.v[ "angles" ] = ( 359,947, 269,571, 2,85874 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1675,16, -1388,57, 116 ); - ent.v[ "angles" ] = ( 357,953, 269,367, 0,867048 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1661,14, 495,875, 136,125 ); - ent.v[ "angles" ] = ( 355,464, 260,304, 0,624617 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -429,544, -52,0209, 150,475 ); - ent.v[ "angles" ] = ( 88,9045, 323,551, 102,845 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 343,584, 702,894, 159,215 ); - ent.v[ "angles" ] = ( 88,9045, 323,551, 102,845 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1262,1, -1061,89, 152,575 ); - ent.v[ "angles" ] = ( 88,9045, 323,551, 102,845 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 134,492, -537,847, 144,595 ); - ent.v[ "angles" ] = ( 88,9045, 323,551, 102,845 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_godray" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -653,831, -1789,85, 240,524 ); - ent.v[ "angles" ] = ( 19,6942, 77,2253, 80,3946 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 543,913, -1129,57, 261,248 ); - ent.v[ "angles" ] = ( 87,8034, 195,382, -73,3072 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 778,685, -1139,08, 268,117 ); - ent.v[ "angles" ] = ( 88,9044, 323,555, 53,8487 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 857,281, -1182,28, 121 ); - ent.v[ "angles" ] = ( 358,801, 182,493, 1,20042 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 836,518, -242,665, 54,0575 ); - ent.v[ "angles" ] = ( 88,9045, 323,551, 102,845 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 837,238, -8,02314, 56,6063 ); - ent.v[ "angles" ] = ( 88,9045, 323,551, 102,845 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 724,74, -143,945, 47,875 ); - ent.v[ "angles" ] = ( 88,9045, 323,551, 102,845 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1126,91, -166,919, 357,385 ); - ent.v[ "angles" ] = ( 88,9045, 323,551, 102,845 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1175,88, -479,894, 349,311 ); - ent.v[ "angles" ] = ( 88,9045, 323,551, 102,845 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1113,42, -83,2409, 335,375 ); - ent.v[ "angles" ] = ( 88,9045, 323,551, 102,845 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1089,74, -594,583, 151,575 ); - ent.v[ "angles" ] = ( 88,9045, 323,551, 102,845 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -162,782, 1517,97, 280,856 ); - ent.v[ "angles" ] = ( 88,9045, 323,551, 102,845 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1149,51, 721,408, 204,167 ); - ent.v[ "angles" ] = ( 87,9176, 317,422, 96,7181 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -255,126, 866,64, 166,274 ); - ent.v[ "angles" ] = ( 87,9176, 317,422, 96,7181 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -63,0658, 915,085, 205,502 ); - ent.v[ "angles" ] = ( 87,287, 270,346, 49,6781 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 666,956, 460,414, 111,737 ); - ent.v[ "angles" ] = ( 89,5803, 354,513, 135,775 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 54,7197, -1593,84, 231,446 ); - ent.v[ "angles" ] = ( 89,5803, 354,513, 136,774 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1260,73, 1587,88, 137,292 ); - ent.v[ "angles" ] = ( 88,2757, 228,508, 9,77534 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -431,035, 1056,25, 167,487 ); - ent.v[ "angles" ] = ( 89,2419, 241,45, 22,714 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -958,992, 497,061, 132,004 ); - ent.v[ "angles" ] = ( 89,2419, 241,449, 22,7132 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -971,242, -1755,72, 249,997 ); - ent.v[ "angles" ] = ( 87,6807, 31,4895, 172,747 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_flood_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -38,7034, -1621,39, 84,7233 ); - ent.v[ "angles" ] = ( 339,971, 268,587, 0 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1,90754, 898,943, 256,875 ); - ent.v[ "angles" ] = ( 88,2757, 228,508, 9,77534 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1441,62, 963,417, 216,875 ); - ent.v[ "angles" ] = ( 88,2756, 228,508, 134,776 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1498,6, 722,401, 214,875 ); - ent.v[ "angles" ] = ( 88,2756, 228,508, 42,7757 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1147,27, 836,246, 205,875 ); - ent.v[ "angles" ] = ( 88,2757, 228,508, 9,77534 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -607,801, -432,14, 49,5 ); - ent.v[ "angles" ] = ( 357,838, 294,507, 1,14724 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -700,377, 423,074, 43,498 ); - ent.v[ "angles" ] = ( 357,099, 321,524, 0,931568 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -363,255, 549,215, 48,4972 ); - ent.v[ "angles" ] = ( 359,465, 251,531, 0 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -143,952, 1012,57, 155,425 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -518,783, 738,786, 183,035 ); - ent.v[ "angles" ] = ( 0,412715, 241,558, 1,0184 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1661,03, 585,476, 196 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1652,04, -51,402, 195,331 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1654,67, -656,996, 177,377 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1659,15, -1273,91, 175,998 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 85,4724, -889,655, 137,183 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 999,48, -345,859, 206 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 0,859211 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1062,8, 841,45, 219,278 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 629,767, 690,701, 156,481 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 460,46, 391,275, 153,13 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 360,776, 43,45, 149,764 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -143,863, -649,091, 153,709 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -414,27, -464,434, 105,02 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_birds" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1883,91, -6707,73, -1902,99 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_birds" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2134,69, 6130,38, -1397,21 ); - ent.v[ "angles" ] = ( 344,774, 280,496, 5,89231 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -817,262, 1597,98, 320,641 ); - ent.v[ "angles" ] = ( 88,9045, 323,551, 102,845 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1045,73, 1597,97, 319,932 ); - ent.v[ "angles" ] = ( 88,9045, 323,551, 102,845 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 47,0497, -1422,71, 129,296 ); - ent.v[ "angles" ] = ( 358,948, 269,521, -0,14079 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -653,318, -1477,99, 169,972 ); - ent.v[ "angles" ] = ( 358,948, 269,521, 2,85921 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 649,691, -608,587, 136,677 ); - ent.v[ "angles" ] = ( 359,948, 269,536, 0,859066 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -850,343, 878,057, 120,551 ); - ent.v[ "angles" ] = ( 359,073, 275,521, -1,24449 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_mote" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -436,727, 510,041, 106,495 ); - ent.v[ "angles" ] = ( 1,05096, 274,478, -1,22816 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 94,3003, -885,913, 54,0664 ); - ent.v[ "angles" ] = ( 358,772, 270,589, -1,64526 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 425,107, -356,602, 45,5697 ); - ent.v[ "angles" ] = ( 358,476, 273,461, -1,33844 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 725,922, -15,7982, 94 ); - ent.v[ "angles" ] = ( 359,895, 266,534, 18,6991 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 645,512, -65,1457, 69,4701 ); - ent.v[ "angles" ] = ( 359,268, 265,266, 18,6996 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 75,7466, 732,118, 45,9536 ); - ent.v[ "angles" ] = ( 0,946264, 269,447, -2,14072 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 792,792, 521,818, 45,5704 ); - ent.v[ "angles" ] = ( 358,948, 269,521, -1,14079 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 648,168, 813,298, 51,7547 ); - ent.v[ "angles" ] = ( 358,734, 257,521, -0,897129 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 934,35, 847,926, 85,8486 ); - ent.v[ "angles" ] = ( 1,54767, 266,846, 31,9675 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -91,6783, -72,5055, 166,449 ); - ent.v[ "angles" ] = ( 359,46, 259,533, 2,9983 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -680,881, -322,319, 165,462 ); - ent.v[ "angles" ] = ( 1,09127, 290,635, 0,451672 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -247,309, -303,674, 163,697 ); - ent.v[ "angles" ] = ( 1,84825, 257,637, -0,458686 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1285,1, -1310,03, 190,252 ); - ent.v[ "angles" ] = ( 1,181, 268,631, 0 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -611,207, -1471,89, 176,07 ); - ent.v[ "angles" ] = ( 1,09127, 290,635, 0,451672 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -549,428, 1552,88, 231,447 ); - ent.v[ "angles" ] = ( 1,11342, 287,634, 0,393934 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1707,48, 741,902, 214,38 ); - ent.v[ "angles" ] = ( 10,091, 290,707, 3,45868 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -557,063, -111,396, 163,761 ); - ent.v[ "angles" ] = ( 359,745, 321,533, -0,476057 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 958,125, 74,4883, 263,291 ); - ent.v[ "angles" ] = ( 88,9043, 323,553, 144,846 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1364,68, -76,8785, 47,3894 ); - ent.v[ "angles" ] = ( 359,952, 270,466, -0,175114 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1074,96, -1447,93, 217,732 ); - ent.v[ "angles" ] = ( 351,896, 266,302, -0,931192 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -81,2507, -1451,58, 175,088 ); - ent.v[ "angles" ] = ( 358,871, 310,609, 0,797744 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -963,608, -838,785, 184,791 ); - ent.v[ "angles" ] = ( 1,17098, 275,632, 0,153807 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -437,997, -1016,67, 168,033 ); - ent.v[ "angles" ] = ( 1,17098, 275,632, 0,153807 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -926,055, -561,612, 159,214 ); - ent.v[ "angles" ] = ( 1,1061, 247,626, -0,414009 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -847,896, -471,799, 162,992 ); - ent.v[ "angles" ] = ( 0,508757, 332,636, 1,06585 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 900,209, 639,011, 235,326 ); - ent.v[ "angles" ] = ( 1,17088, 260,63, -0,154546 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 478,409, 699,351, 171,698 ); - ent.v[ "angles" ] = ( 0,702775, 321,637, 0,949207 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -661,673, 1163,88, 194,785 ); - ent.v[ "angles" ] = ( 1,18062, 266,631, 0 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 85,5207, 461,021, 142,501 ); - ent.v[ "angles" ] = ( 1,18062, 266,631, -2,0313 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 227,509, 698,279, 152,342 ); - ent.v[ "angles" ] = ( 1,14039, 251,628, -0,305606 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 586,755, 903,875, 161,163 ); - ent.v[ "angles" ] = ( 1,17742, 272,632, 0 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -883,915, 194,031, 165,5 ); - ent.v[ "angles" ] = ( 359,813, 354,661, 0 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1827,71, 1674,85, 139,561 ); - ent.v[ "angles" ] = ( 2,64617, 335,639, -0,955142 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1842,24, 228,424, 190,943 ); - ent.v[ "angles" ] = ( 0,735804, 280,643, -2,71529 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2022,71, 142,335, 273,779 ); - ent.v[ "angles" ] = ( 2,59258, 332,636, -1,09231 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1438,32, -283,568, 140,871 ); - ent.v[ "angles" ] = ( 358,851, 269,41, 0,634039 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1036,47, -483,024, 158,574 ); - ent.v[ "angles" ] = ( 359,497, 187,342, 8,15861 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1107,15, 377,637, 137,291 ); - ent.v[ "angles" ] = ( 3,63692, 322,033, -1,89879 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 0,806075, 198,02, 167,9 ); - ent.v[ "angles" ] = ( 359,741, 183,63, 2,8839 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1108,73, 956,181, 194,268 ); - ent.v[ "angles" ] = ( 1,92927, 287,316, -0,347119 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1491,47, 1049,1, 213,516 ); - ent.v[ "angles" ] = ( 10,0616, 290,487, -1,70858 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2021,66, -418,366, 258,403 ); - ent.v[ "angles" ] = ( 7,04448, 343,978, -3,21619 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1883,88, -882,392, 149,33 ); - ent.v[ "angles" ] = ( 359,792, 314,423, -2,31977 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -829,753, -1471,98, 173,135 ); - ent.v[ "angles" ] = ( 354,278, 269,322, -1,12202 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1376,66, -61,512, 171,625 ); - ent.v[ "angles" ] = ( 358,839, 267,487, -1,09878 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1332,8, 58,874, 228,047 ); - ent.v[ "angles" ] = ( 358,731, 261,486, -0,971446 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1452,51, -92,7596, 313,78 ); - ent.v[ "angles" ] = ( 0,544976, 205,626, -1,04779 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1122,77, -316,76, 243,233 ); - ent.v[ "angles" ] = ( 0,413229, 198,627, -1,10639 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1219,04, 503,105, 249,642 ); - ent.v[ "angles" ] = ( 0,295325, 192,629, -1,14351 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1669,12, -1210,67, 80 ); - ent.v[ "angles" ] = ( 358,89, 266,521, -1,08417 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2001,38, -287,672, 287,781 ); - ent.v[ "angles" ] = ( 2,59258, 332,636, -1,09231 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 360,513, 590,086, 43,9797 ); - ent.v[ "angles" ] = ( 0,502629, 284,474, 0,918724 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -780,043, -55,2936, 238,556 ); - ent.v[ "angles" ] = ( 0,945547, 269,621, 2,85912 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -84,3017, -13,1354, 259,847 ); - ent.v[ "angles" ] = ( 0,945547, 269,621, 2,85912 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -818,997, -64,3306, 163,757 ); - ent.v[ "angles" ] = ( 358,963, 268,521, 0,87744 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -340,637, 1415,26, 98,2628 ); - ent.v[ "angles" ] = ( 358,948, 269,521, -2,14079 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -607,594, 1445,38, 97,2966 ); - ent.v[ "angles" ] = ( 358,948, 269,521, -2,14079 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1796,13, 215,671, 129 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 280 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1555,5, 461,776, 147,516 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 276 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1220,86, 362,402, 99,7544 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -446,422, 253,146, 73,2718 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 266 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -213,107, 412,098, 75,2223 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 227 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -385,082, 251,864, 47,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 266 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -699,216, -715,091, 85,9836 ); - ent.v[ "angles" ] = ( 359, 260,017, -1 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 167,585, -791,978, 124,497 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 261 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -897,901, -895,305, 91 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 273 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 684,925, -793,659, 145,478 ); - ent.v[ "angles" ] = ( 357,775, 245,029, -0,707484 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 584,827, -828,038, 41,6965 ); - ent.v[ "angles" ] = ( 1,71852, 268,325, -5,28397 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 302,475, -247,251, 85,7498 ); - ent.v[ "angles" ] = ( 359,072, 264,018, -1,06732 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 92,3654, -208,68, 101,001 ); - ent.v[ "angles" ] = ( 359,754, 295,012, -1,39269 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1078,87, 545,001, 164,504 ); - ent.v[ "angles" ] = ( 359,072, 264,018, -1,06732 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1056,77, -249,934, 163,863 ); - ent.v[ "angles" ] = ( 359,072, 264,018, -1,06732 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 956,673, -32,5662, 164,959 ); - ent.v[ "angles" ] = ( 359,086, 274,019, -0,161166 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 249,666, -596,808, 148,796 ); - ent.v[ "angles" ] = ( 359,072, 264,018, -1,06732 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 683,971, 486,11, 161,286 ); - ent.v[ "angles" ] = ( 359,072, 264,018, 0,932685 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -224,668, 848,046, 92,9363 ); - ent.v[ "angles" ] = ( 359,072, 264,018, 0,932685 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -377,868, 1427,86, 143,875 ); - ent.v[ "angles" ] = ( 359,025, 267,018, 0,88285 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1195,32, 1214,04, 86,7745 ); - ent.v[ "angles" ] = ( 359,072, 264,018, 0,932685 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1574,97, 1523,24, 74,625 ); - ent.v[ "angles" ] = ( 359,058, 266,018, -0,100112 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1500,7, 1592,14, 76,9619 ); - ent.v[ "angles" ] = ( 358,862, 279,019, 0,660769 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1793,15, -566,822, 131 ); - ent.v[ "angles" ] = ( 359,922, 274,032, 0,809581 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1716,18, -1098,13, 123,5 ); - ent.v[ "angles" ] = ( 358,965, 271,018, 0,812661 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1462,64, -631,445, 99,9975 ); - ent.v[ "angles" ] = ( 359,923, 274,032, 0,809605 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 188,737, -1117,3, 153,943 ); - ent.v[ "angles" ] = ( 0,176856, 256,034, 0,793804 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1774,75, 1527,49, 71,625 ); - ent.v[ "angles" ] = ( 359,156, 287,02, -0,431177 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -764,655, 1141,59, 87,9259 ); - ent.v[ "angles" ] = ( 359,058, 266,018, -0,100112 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1239,63, -73,4638, 160,742 ); - ent.v[ "angles" ] = ( 357,949, 266,804, 25,922 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1459,88, -281,93, 316,143 ); - ent.v[ "angles" ] = ( 0,544976, 205,626, -1,04779 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 823,542, 313,234, 52,0039 ); - ent.v[ "angles" ] = ( 359,072, 264,018, 0,932685 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 830,694, 227,968, 14,4987 ); - ent.v[ "angles" ] = ( 19,932, 271,818, -0,463749 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1035,84, -797,458, 162,958 ); - ent.v[ "angles" ] = ( 359,054, 263,018, -1,05096 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -69,6524, 899,951, 96,897 ); - ent.v[ "angles" ] = ( 359, 260,018, -1 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1138,29, 671,473, 83,5 ); - ent.v[ "angles" ] = ( 359,11, 266,018, -1,09904 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1035,15, 783,365, 64,4414 ); - ent.v[ "angles" ] = ( 359,169, 269,017, -1,14411 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1847,65, 670,064, 126,339 ); - ent.v[ "angles" ] = ( 359,601, 293,014, -0,388734 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -905,637, 473,749, 83 ); - ent.v[ "angles" ] = ( 357,263, 321,092, -0,897471 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -702,686, 170,007, 90,5329 ); - ent.v[ "angles" ] = ( 358,352, 326,077, -1,13201 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -989,89, -352,779, 100,273 ); - ent.v[ "angles" ] = ( 358,686, 240,042, 2,56371 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -949,251, -812,154, 180,768 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 279 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_gas_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1380,25, 610,338, 182,788 ); - ent.v[ "angles" ] = ( 359,375, 19,951, 8,97843 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_gas_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1108,34, 230,326, 160,706 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 268 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 8758,18, -2601,51, 1789,17 ); - ent.v[ "angles" ] = ( 358,945, 240,805, -1,8246 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1777,36, -5350,6, 244,209 ); - ent.v[ "angles" ] = ( 358,702, 232,807, -1,65996 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1860,58, -5040,41, 57,0436 ); - ent.v[ "angles" ] = ( 359,778, 264,792, -2,09578 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3650,01, 2824,46, 343,516 ); - ent.v[ "angles" ] = ( 2,70279, 262,684, -2,08911 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 5223,45, 3715,88, 1175,8 ); - ent.v[ "angles" ] = ( 4,05135, 238,826, 4,86698 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3037,07, 5817,13, 1213 ); - ent.v[ "angles" ] = ( 358,316, 217,806, -1,26734 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1680,86, 2881,89, 111,145 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 221 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3002,88, 2118,22, -9,59973 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 237 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3479,83, -186,319, -269,401 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 268 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -6203,93, 1556,99, -66,1765 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 268 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -15649, -1649,3, -1111 ); - ent.v[ "angles" ] = ( 359,888, 267,789, -2,10462 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1426,06, -2082,68, 27,4772 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 212 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1044,48, 2369,78, 305,75 ); - ent.v[ "angles" ] = ( 360, 317, -3 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -9343,47, -2046,97, -1305,17 ); - ent.v[ "angles" ] = ( 3,44027, 285,694, -1,26256 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4950,48, -927,538, -319,972 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 268 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust_close" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4000,32, -4003,76, 63,2383 ); - ent.v[ "angles" ] = ( 7, 289, 0 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_vista_dust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 9576,57, -8049,61, 1798,74 ); - ent.v[ "angles" ] = ( 358,589, 228,808, -1,56547 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -132,897, 1020,79, 48,591 ); - ent.v[ "angles" ] = ( 0, 266,575, 2,90993 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1267,21, -1107,79, 37,4418 ); - ent.v[ "angles" ] = ( 352,827, 272,212, 2,09263 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1207,49, -73,5797, 39,7421 ); - ent.v[ "angles" ] = ( 271,109, 2,68804, -3,90122 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 147,253, -1602,43, 75 ); - ent.v[ "angles" ] = ( 271,109, 2,68804, -3,90122 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -877,604, -1665, 72 ); - ent.v[ "angles" ] = ( 271,109, 2,68804, -3,90122 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1729,02, -1693,4, 73,9989 ); - ent.v[ "angles" ] = ( 271,109, 2,68804, -3,90122 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1768,6, -420,735, 80,4995 ); - ent.v[ "angles" ] = ( 271,109, 2,68804, -3,90122 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -809,158, 195,222, 48,2225 ); - ent.v[ "angles" ] = ( 271,109, 2,68804, -3,90122 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -194,057, 295,056, 127,152 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 266 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1334,78, 1486,89, 130,006 ); - ent.v[ "angles" ] = ( 356,963, 293,476, -1,22082 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2024,96, -256,793, 301,886 ); - ent.v[ "angles" ] = ( 88,6934, 211,131, 30,4356 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 18,8065, 873,257, 56,4626 ); - ent.v[ "angles" ] = ( 2,94584, 269,721, -0,140539 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1365,13, 1549,66, 30,8293 ); - ent.v[ "angles" ] = ( 0,944308, 266,469, 0 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_floor_swirl_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 374,262, 818,93, 56,3473 ); - ent.v[ "angles" ] = ( 270,13, 34,2431, -35,4556 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 6,3894, -673,185, 97,5047 ); - ent.v[ "angles" ] = ( 358,74, 242,015, -0,64204 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -9,49943, -632,315, 131,625 ); - ent.v[ "angles" ] = ( 358,74, 242,015, -0,64204 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -878,104, -711,226, 95,2438 ); - ent.v[ "angles" ] = ( 359,358, 278,016, -1,26004 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -846,985, -646,685, 115,913 ); - ent.v[ "angles" ] = ( 358,751, 187,002, 0,664114 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -323,034, -128,45, 164,125 ); - ent.v[ "angles" ] = ( 358,634, 230,013, -0,365972 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -319,125, -214,761, 164,922 ); - ent.v[ "angles" ] = ( 358,617, 227,012, -0,293967 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -557,213, -161,625, 171,036 ); - ent.v[ "angles" ] = ( 359,926, 302,01, -1,41222 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -878,347, 346,759, 96,1744 ); - ent.v[ "angles" ] = ( 357,589, 336,104, -1,57558 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1403,9, 408,837, 83,5629 ); - ent.v[ "angles" ] = ( 357,22, 318,089, -0,752899 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1014,59, -369,348, 71,6979 ); - ent.v[ "angles" ] = ( 359,394, 225,057, -0,183771 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1583,7, -684,076, 80 ); - ent.v[ "angles" ] = ( 359,479, 334,037, -0,386453 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1108,27, -1026,02, 91 ); - ent.v[ "angles" ] = ( 359,385, 316,036, -0,206509 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1809,69, -1509,75, 128,469 ); - ent.v[ "angles" ] = ( 358,52, 322,024, 0,82962 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1529,5, -1519,1, 117,215 ); - ent.v[ "angles" ] = ( 0,930588, 228,046, 0,418486 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -319,891, -1143,88, 89,2982 ); - ent.v[ "angles" ] = ( 359,502, 199,017, -0,210622 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -548,541, -401,24, 48,4856 ); - ent.v[ "angles" ] = ( 359,103, 277,026, -0,530978 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -688,887, -590,416, 48,1295 ); - ent.v[ "angles" ] = ( 359,504, 308,026, -0,917323 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -199,19, -698,89, 49,1078 ); - ent.v[ "angles" ] = ( 359,254, 202,017, -0,269819 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 9,95442, 443,757, 128,125 ); - ent.v[ "angles" ] = ( 359,504, 308,026, -0,917323 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 7,38482, 327,405, 97,125 ); - ent.v[ "angles" ] = ( 359,504, 308,026, -0,917323 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 195,711, -1324,31, 144,091 ); - ent.v[ "angles" ] = ( 359,449, 257,013, 0 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -870,122, 963,313, 84,6703 ); - ent.v[ "angles" ] = ( 359,169, 269,017, -1,14411 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -725,204, 817,853, 48,6131 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 299 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1032,52, 75,7198, 175,878 ); - ent.v[ "angles" ] = ( 359,958, 272,414, -0,139393 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1071,17, -892,618, 120 ); - ent.v[ "angles" ] = ( 358,948, 269,521, -0,140792 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_pill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 682,348, 487,427, 155,49 ); - ent.v[ "angles" ] = ( 88,9042, 323,553, 142,846 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -509,583, -1615,77, 117,2 ); - ent.v[ "angles" ] = ( 0,930588, 228,046, 0,418486 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -742,329, -1525,19, 72 ); - ent.v[ "angles" ] = ( 359,945, 269,52, -0,107685 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -53,5563, -1520,48, 73 ); - ent.v[ "angles" ] = ( 359,945, 269,52, -0,107685 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -439,636, -1518,94, 72 ); - ent.v[ "angles" ] = ( 359,945, 269,52, -0,107685 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dig_dust_fall_3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -155,602, 1176,58, 226,688 ); - ent.v[ "angles" ] = ( 88,6728, 321,83, 103,094 ); - ent.v[ "delay" ] = -82; -} diff --git a/Multiplayer Maps/mp_dig/maps/mp/mp_dig.gsc b/Multiplayer Maps/mp_dig/maps/mp/mp_dig.gsc deleted file mode 100644 index 02b6e98..0000000 --- a/Multiplayer Maps/mp_dig/maps/mp/mp_dig.gsc +++ /dev/null @@ -1,52 +0,0 @@ -#include maps/mp/gametypes/_spawning; -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_dig_fx::main(); - precachemodel( "collision_clip_wall_32x32x10" ); - precachemodel( "p6_dig_brick_03" ); - maps/mp/_load::main(); - maps/mp/mp_dig_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_dig" ); - setdvar( "compassmaxrange", "2100" ); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - brick1 = spawn( "script_model", ( -5,6285, 604,473, 39,05 ) ); - brick1.angles = ( 359,199, 90,0129, -0,822672 ); - brick2 = spawn( "script_model", ( -12,63, 604,47, 39,05 ) ); - brick2.angles = ( 359,199, 90,0129, -0,822672 ); - brick3 = spawn( "script_model", ( -5,63, 614,97, 39,05 ) ); - brick3.angles = ( 359,199, 90,0129, -0,822672 ); - brick4 = spawn( "script_model", ( -12,63, 614,97, 39,05 ) ); - brick4.angles = ( 359,199, 90,0129, -0,822672 ); - brick5 = spawn( "script_model", ( -5,63, 629,47, 39,55 ) ); - brick5.angles = ( 359,199, 90,0129, -0,822672 ); - brick6 = spawn( "script_model", ( -12,63, 629,47, 39,55 ) ); - brick6.angles = ( 359,199, 90,0129, -0,822672 ); - brick1 setmodel( "p6_dig_brick_03" ); - brick2 setmodel( "p6_dig_brick_03" ); - brick3 setmodel( "p6_dig_brick_03" ); - brick4 setmodel( "p6_dig_brick_03" ); - brick5 setmodel( "p6_dig_brick_03" ); - brick6 setmodel( "p6_dig_brick_03" ); - spawncollision( "collision_clip_wall_32x32x10", "collider", ( -1404, -1126, 46,5 ), vectorScale( ( 0, 1, 0 ), 90 ) ); - maps/mp/gametypes/_spawning::level_use_unified_spawning( 1 ); -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2300", reset_dvars ); - ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1000", reset_dvars ); -} diff --git a/Multiplayer Maps/mp_dig/maps/mp/mp_dig_amb.gsc b/Multiplayer Maps/mp_dig/maps/mp/mp_dig_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_dig/maps/mp/mp_dig_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_dig/maps/mp/mp_dig_fx.gsc b/Multiplayer Maps/mp_dig/maps/mp/mp_dig_fx.gsc deleted file mode 100644 index 3c0d169..0000000 --- a/Multiplayer Maps/mp_dig/maps/mp/mp_dig_fx.gsc +++ /dev/null @@ -1,59 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); -#using_animtree( "fxanim_props_dlc4" ); - -main() -{ - precache_fxanim_props(); - precache_fxanim_props_dlc4(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_dig_fx::main(); -} - -precache_scripted_fx() -{ -} - -precache_createfx_fx() -{ - level._effect[ "fx_lf_mp_dig_sun1" ] = loadfx( "lens_flares/fx_lf_mp_dig_sun1" ); - level._effect[ "fx_mp_dig_floor_swirl_sm" ] = loadfx( "maps/mp_maps/fx_mp_dig_floor_swirl_sm" ); - level._effect[ "fx_mp_dig_floor_swirl_lg" ] = loadfx( "maps/mp_maps/fx_mp_dig_floor_swirl_lg" ); - level._effect[ "fx_mp_dig_dust" ] = loadfx( "maps/mp_maps/fx_mp_dig_dust" ); - level._effect[ "fx_mp_dig_dust_fall" ] = loadfx( "maps/mp_maps/fx_mp_dig_dust_fall" ); - level._effect[ "fx_mp_dig_dust_fall_2" ] = loadfx( "maps/mp_maps/fx_mp_dig_dust_fall_2" ); - level._effect[ "fx_mp_dig_dust_fall_3" ] = loadfx( "maps/mp_maps/fx_mp_dig_dust_fall_3" ); - level._effect[ "fx_mp_dig_dust_floor" ] = loadfx( "maps/mp_maps/fx_mp_dig_dust_floor" ); - level._effect[ "fx_mp_dig_dust_floor_fall" ] = loadfx( "maps/mp_maps/fx_mp_dig_dust_floor_fall" ); - level._effect[ "fx_mp_dig_dust_fall_pill" ] = loadfx( "maps/mp_maps/fx_mp_dig_dust_fall_pill" ); - level._effect[ "fx_mp_dig_vista_dust" ] = loadfx( "maps/mp_maps/fx_mp_dig_vista_dust" ); - level._effect[ "fx_mp_dig_vista_dust_sm" ] = loadfx( "maps/mp_maps/fx_mp_dig_vista_dust_sm" ); - level._effect[ "fx_mp_dig_vista_dust_close" ] = loadfx( "maps/mp_maps/fx_mp_dig_vista_dust_close" ); - level._effect[ "fx_mp_dig_heat_distort" ] = loadfx( "maps/mp_maps/fx_mp_dig_heat_distort" ); - level._effect[ "fx_mp_dig_dust_lg" ] = loadfx( "maps/mp_maps/fx_mp_dig_dust_lg" ); - level._effect[ "fx_mp_dig_vista_birds" ] = loadfx( "maps/mp_maps/fx_mp_dig_vista_birds" ); - level._effect[ "fx_mp_dig_godray" ] = loadfx( "maps/mp_maps/fx_mp_dig_godray" ); - level._effect[ "fx_mp_dig_godray_wide" ] = loadfx( "maps/mp_maps/fx_mp_dig_godray_wide" ); - level._effect[ "fx_mp_dig_flood_light" ] = loadfx( "maps/mp_maps/fx_mp_dig_flood_light" ); - level._effect[ "fx_mp_dig_dust_mote" ] = loadfx( "maps/mp_maps/fx_mp_dig_dust_mote" ); - level._effect[ "fx_mp_dig_gas_drip" ] = loadfx( "maps/mp_maps/fx_mp_dig_gas_drip" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "roaches" ] = %fxanim_gp_roaches_anim; -} - -precache_fxanim_props_dlc4() -{ - level.scr_anim[ "fxanim_props_dlc4" ][ "wires_yellow_01" ] = %fxanim_mp_dig_wires_yellow_01_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "wires_yellow_02" ] = %fxanim_mp_dig_wires_yellow_02_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "wires_yellow_03" ] = %fxanim_mp_dig_wires_yellow_03_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "ropes_01" ] = %fxanim_mp_dig_ropes_01_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "fuel_pipe" ] = %fxanim_mp_dig_fuel_pipe_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "wires_yellow_04" ] = %fxanim_mp_dig_wires_yellow_04_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "wires_yellow_05" ] = %fxanim_mp_dig_wires_yellow_05_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "wires_yellow_06" ] = %fxanim_mp_dig_wires_yellow_06_anim; -} diff --git a/Multiplayer Maps/mp_dockside/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_dockside/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_dockside/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_dockside/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_dockside/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_dockside/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_dockside/maps/mp/animscripts/traverse/ladder_down.gsc b/Multiplayer Maps/mp_dockside/maps/mp/animscripts/traverse/ladder_down.gsc deleted file mode 100644 index 5c4ed06..0000000 --- a/Multiplayer Maps/mp_dockside/maps/mp/animscripts/traverse/ladder_down.gsc +++ /dev/null @@ -1,8 +0,0 @@ -#include maps/mp/animscripts/traverse/shared; - -main() -{ -/# - assert( 0, "Not supposed to be used in MP" ); -#/ -} diff --git a/Multiplayer Maps/mp_dockside/maps/mp/animscripts/traverse/ladder_up.gsc b/Multiplayer Maps/mp_dockside/maps/mp/animscripts/traverse/ladder_up.gsc deleted file mode 100644 index 5c4ed06..0000000 --- a/Multiplayer Maps/mp_dockside/maps/mp/animscripts/traverse/ladder_up.gsc +++ /dev/null @@ -1,8 +0,0 @@ -#include maps/mp/animscripts/traverse/shared; - -main() -{ -/# - assert( 0, "Not supposed to be used in MP" ); -#/ -} diff --git a/Multiplayer Maps/mp_dockside/maps/mp/animscripts/traverse/mantle_over_96.gsc b/Multiplayer Maps/mp_dockside/maps/mp/animscripts/traverse/mantle_over_96.gsc deleted file mode 100644 index 5c4ed06..0000000 --- a/Multiplayer Maps/mp_dockside/maps/mp/animscripts/traverse/mantle_over_96.gsc +++ /dev/null @@ -1,8 +0,0 @@ -#include maps/mp/animscripts/traverse/shared; - -main() -{ -/# - assert( 0, "Not supposed to be used in MP" ); -#/ -} diff --git a/Multiplayer Maps/mp_dockside/maps/mp/createart/mp_dockside_art.gsc b/Multiplayer Maps/mp_dockside/maps/mp/createart/mp_dockside_art.gsc deleted file mode 100644 index 20068a2..0000000 --- a/Multiplayer Maps/mp_dockside/maps/mp/createart/mp_dockside_art.gsc +++ /dev/null @@ -1,41 +0,0 @@ - -main() -{ - level.tweakfile = 1; - setdvar( "scr_fog_exp_halfplane", "3759.28" ); - setdvar( "scr_fog_exp_halfheight", "243.735" ); - setdvar( "scr_fog_nearplane", "601.593" ); - setdvar( "scr_fog_red", "0.806694" ); - setdvar( "scr_fog_green", "0.962521" ); - setdvar( "scr_fog_blue", "0.9624" ); - setdvar( "scr_fog_baseheight", "-475.268" ); - setdvar( "visionstore_glowTweakEnable", "0" ); - setdvar( "visionstore_glowTweakRadius0", "5" ); - setdvar( "visionstore_glowTweakRadius1", "" ); - setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); - setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); - setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); - setdvar( "visionstore_glowTweakBloomIntensity1", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); - start_dist = 501,064; - half_dist = 5397,69; - half_height = 765,766; - base_height = 3,88835; - fog_r = 0,721569; - fog_g = 0,803922; - fog_b = 0,929412; - fog_scale = 2,76409; - sun_col_r = 1; - sun_col_g = 1; - sun_col_b = 1; - sun_dir_x = 0,41452; - sun_dir_y = 0,909807; - sun_dir_z = 0,0206221; - sun_start_ang = 0; - sun_stop_ang = 104,831; - time = 0; - max_fog_opacity = 0,91391; - setvolfog( start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale, sun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, sun_stop_ang, time, max_fog_opacity ); - visionsetnaked( "mp_dockside", 0 ); -} diff --git a/Multiplayer Maps/mp_dockside/maps/mp/createfx/mp_dockside_fx.gsc b/Multiplayer Maps/mp_dockside/maps/mp/createfx/mp_dockside_fx.gsc deleted file mode 100644 index 67fe8d0..0000000 --- a/Multiplayer Maps/mp_dockside/maps/mp/createfx/mp_dockside_fx.gsc +++ /dev/null @@ -1,1926 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_xlg" ); - ent.v[ "origin" ] = ( -1196,31, 2393,9, -58 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( -1392,19, 2727,22, -68 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( -317,102, 3210,62, -76 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( -1812,71, 2051,63, -66 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( -1347,49, 1812,61, -67,7311 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( -856,07, 3419,19, -70 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( -1451,53, 3397,2, -67 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( -1403,35, 1248,77, -60 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( -1501,3, 809,035, -61,3792 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( -943,4, 1872,01, -68 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( -502,979, -1358,92, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 10 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( -128,841, -1475,65, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 10 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_xlg" ); - ent.v[ "origin" ] = ( -1113,42, 1495,64, 490,065 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 32 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( -1202,77, 1624,12, 569,508 ); - ent.v[ "angles" ] = ( 21,8842, 353,537, -116,313 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); - ent.v[ "origin" ] = ( -1196,97, 1669,24, 573,787 ); - ent.v[ "angles" ] = ( 22,8361, 350,276, -69,5269 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -1186,17, 1711,59, 570,53 ); - ent.v[ "angles" ] = ( 20,7275, 347,127, 134,356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( -1165,3, 1795,59, 570,857 ); - ent.v[ "angles" ] = ( 20,6211, 344,991, 42,6715 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -1178,68, 1752,83, 572,612 ); - ent.v[ "angles" ] = ( 22,6177, 344,865, -3,37474 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( -1151,1, 1839,58, 566,652 ); - ent.v[ "angles" ] = ( 22,2412, 339,474, 114,741 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( -1136,24, 1879,54, 568,856 ); - ent.v[ "angles" ] = ( 22,0453, 337,327, 39,002 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); - ent.v[ "origin" ] = ( -1120,03, 1922,3, 570,717 ); - ent.v[ "angles" ] = ( 22,5096, 334,963, 36,0883 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -1095,56, 1959,49, 572,078 ); - ent.v[ "angles" ] = ( 22,5096, 334,963, 21,0883 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -1076,98, 1997,38, 567,94 ); - ent.v[ "angles" ] = ( 22,3351, 329,141, 86,813 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -1055,33, 2034,7, 573,634 ); - ent.v[ "angles" ] = ( 23,9179, 327,423, 18,1561 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( -1032,53, 2069,64, 569,864 ); - ent.v[ "angles" ] = ( 24,226, 326,381, 17,7311 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( -1004,58, 2104,9, 572,731 ); - ent.v[ "angles" ] = ( 24,527, 325,334, 17,2989 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); - ent.v[ "origin" ] = ( -383,448, 2484,96, 568,869 ); - ent.v[ "angles" ] = ( 24,226, 280,381, 17,731 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -425,076, 2471,21, 572,639 ); - ent.v[ "angles" ] = ( 23,9179, 281,423, 18,156 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -466,903, 2460,57, 565,945 ); - ent.v[ "angles" ] = ( 22,3351, 283,141, 86,813 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( -509,838, 2446,41, 568,083 ); - ent.v[ "angles" ] = ( 22,5096, 288,963, 21,0884 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -630,911, 2404,43, 565,657 ); - ent.v[ "angles" ] = ( 22,2411, 293,474, 114,742 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( -592,766, 2421,1, 568,861 ); - ent.v[ "angles" ] = ( 22,8209, 292,01, 39,2624 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); - ent.v[ "origin" ] = ( -550,703, 2439,03, 569,722 ); - ent.v[ "angles" ] = ( 22,5095, 288,963, 36,0883 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -670,502, 2384,66, 569,862 ); - ent.v[ "angles" ] = ( 20,621, 298,991, 42,6714 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( -710,558, 2364,58, 571,617 ); - ent.v[ "angles" ] = ( 22,6177, 298,865, -3,3747 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( -747,834, 2341,21, 569,536 ); - ent.v[ "angles" ] = ( 20,7275, 301,127, 134,356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -784,594, 2317,79, 572,792 ); - ent.v[ "angles" ] = ( 22,836, 304,276, -69,5267 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); - ent.v[ "origin" ] = ( -819,878, 2292,5, 567,513 ); - ent.v[ "angles" ] = ( 21,8842, 307,537, -116,313 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 401,444, 2292,79, 573,226 ); - ent.v[ "angles" ] = ( 24,2259, 236,381, 17,7311 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); - ent.v[ "origin" ] = ( 366,185, 2319,33, 567,359 ); - ent.v[ "angles" ] = ( 24,226, 236,381, 17,7311 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 330,49, 2342,78, 571,129 ); - ent.v[ "angles" ] = ( 23,9179, 237,423, 70,156 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 290,711, 2366,15, 566,435 ); - ent.v[ "angles" ] = ( 22,3351, 239,141, 86,8129 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( 252,817, 2384,73, 570,573 ); - ent.v[ "angles" ] = ( 22,5096, 244,963, 21,0884 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( 131,137, 2441,19, 565,147 ); - ent.v[ "angles" ] = ( 22,2411, 249,474, 114,742 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( 172,872, 2425,41, 567,351 ); - ent.v[ "angles" ] = ( 22,0452, 247,327, 39,0018 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); - ent.v[ "origin" ] = ( 215,629, 2409,2, 569,212 ); - ent.v[ "angles" ] = ( 22,5095, 244,963, 36,0883 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( 88,922, 2454,47, 569,352 ); - ent.v[ "angles" ] = ( 20,621, 254,991, 42,6713 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 49,0408, 2467,01, 571,107 ); - ent.v[ "angles" ] = ( 22,6177, 254,865, -3,37468 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 4,98394, 2477,33, 569,025 ); - ent.v[ "angles" ] = ( 20,7275, 257,127, 134,356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( -37,4259, 2486,14, 572,282 ); - ent.v[ "angles" ] = ( 22,836, 260,276, -69,5267 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -82,552, 2491,94, 567,003 ); - ent.v[ "angles" ] = ( 21,8842, 263,537, -116,313 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 778,018, 1627,01, 573,828 ); - ent.v[ "angles" ] = ( 24,5269, 189,334, 17,299 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); - ent.v[ "origin" ] = ( 772,22, 1671,78, 568,961 ); - ent.v[ "angles" ] = ( 24,226, 190,381, 17,7311 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( 764,253, 1713,74, 567,731 ); - ent.v[ "angles" ] = ( 23,9178, 191,423, 18,156 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( 753,902, 1755,63, 568,037 ); - ent.v[ "angles" ] = ( 22,335, 193,141, 86,8128 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 740,948, 1795,79, 571,175 ); - ent.v[ "angles" ] = ( 22,5096, 198,963, 21,0884 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( 697,035, 1922,54, 566,749 ); - ent.v[ "angles" ] = ( 22,2411, 203,475, 114,742 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( 714,673, 1881,56, 568,953 ); - ent.v[ "angles" ] = ( 22,0452, 201,327, 39,0017 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 732,007, 1842,46, 573,814 ); - ent.v[ "angles" ] = ( 22,5095, 198,963, 36,0883 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 677,262, 1962,14, 570,954 ); - ent.v[ "angles" ] = ( 20,621, 208,991, 42,6713 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 655,823, 2002,03, 571,709 ); - ent.v[ "angles" ] = ( 22,6177, 208,865, -3,37461 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( 635,399, 2038,4, 570,628 ); - ent.v[ "angles" ] = ( 20,7274, 211,127, 134,356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( 612,274, 2075,02, 573,884 ); - ent.v[ "angles" ] = ( 22,836, 214,276, -69,5265 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 585,13, 2107,27, 568,605 ); - ent.v[ "angles" ] = ( 21,8841, 217,537, -116,313 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 587,926, 886,6, 571,956 ); - ent.v[ "angles" ] = ( 24,5268, 145,334, 17,2989 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 615,459, 923,626, 570,09 ); - ent.v[ "angles" ] = ( 24,226, 146,381, 17,7311 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( 638,877, 959,346, 574,859 ); - ent.v[ "angles" ] = ( 23,9178, 147,423, 18,156 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( 661,828, 996,999, 565,166 ); - ent.v[ "angles" ] = ( 22,335, 149,141, 86,8128 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( 680,991, 1035,84, 567,303 ); - ent.v[ "angles" ] = ( 22,5095, 154,963, 21,0884 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); - ent.v[ "origin" ] = ( 735,571, 1156,24, 567,878 ); - ent.v[ "angles" ] = ( 22,2411, 159,475, 114,742 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 721,069, 1117,22, 570,082 ); - ent.v[ "angles" ] = ( 20,7781, 158,989, 39,6085 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 748,85, 1198,45, 568,083 ); - ent.v[ "angles" ] = ( 20,621, 164,991, 42,6713 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( 762,231, 1241,22, 573,838 ); - ent.v[ "angles" ] = ( 22,6176, 164,865, -3,37463 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( 771,711, 1282,39, 571,756 ); - ent.v[ "angles" ] = ( 20,7274, 167,127, 134,356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 777,815, 1326,23, 572,013 ); - ent.v[ "angles" ] = ( 22,836, 170,276, -69,5266 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( 787,204, 1370,39, 569,734 ); - ent.v[ "angles" ] = ( 21,884, 173,537, -116,313 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -78,6389, 506,104, 573,822 ); - ent.v[ "angles" ] = ( 24,5268, 99,3342, 17,2989 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -32,8782, 512,019, 568,955 ); - ent.v[ "angles" ] = ( 24,2259, 100,381, 17,731 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 9,08425, 519,986, 571,725 ); - ent.v[ "angles" ] = ( 23,9178, 101,423, 18,1559 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 53,954, 530,635, 567,031 ); - ent.v[ "angles" ] = ( 22,335, 103,141, 86,8127 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( 97,6821, 545,773, 568,169 ); - ent.v[ "angles" ] = ( 22,5095, 108,963, 21,0883 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 217,887, 587,204, 568,743 ); - ent.v[ "angles" ] = ( 22,241, 113,474, 114,742 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( 176,018, 569,098, 568,947 ); - ent.v[ "angles" ] = ( 22,0451, 111,327, 39,0015 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( 137,545, 552,907, 571,808 ); - ent.v[ "angles" ] = ( 22,5095, 108,963, 36,0882 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( 257,478, 606,977, 570,948 ); - ent.v[ "angles" ] = ( 20,621, 118,991, 42,6713 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); - ent.v[ "origin" ] = ( 295,805, 628,004, 572,703 ); - ent.v[ "angles" ] = ( 22,6176, 118,865, -3,37466 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 331,949, 651,248, 569,622 ); - ent.v[ "angles" ] = ( 20,7274, 121,127, 134,356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 371,982, 673,14, 573,878 ); - ent.v[ "angles" ] = ( 22,8359, 124,276, -69,5266 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( 406,854, 699,14, 568,599 ); - ent.v[ "angles" ] = ( 21,884, 127,537, -116,313 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( -819,273, 699,451, 573,722 ); - ent.v[ "angles" ] = ( 24,5268, 55,3342, 17,2988 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( -782,246, 671,917, 568,855 ); - ent.v[ "angles" ] = ( 24,2259, 56,3813, 17,731 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -746,526, 648,499, 573,625 ); - ent.v[ "angles" ] = ( 23,9178, 57,4231, 18,1559 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); - ent.v[ "origin" ] = ( -709,207, 626,849, 567,932 ); - ent.v[ "angles" ] = ( 22,335, 59,1408, 86,8126 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -668,036, 605,971, 569,069 ); - ent.v[ "angles" ] = ( 22,5095, 64,9632, 21,0883 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -549,633, 551,805, 566,644 ); - ent.v[ "angles" ] = ( 22,241, 69,4745, 114,742 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -590,273, 568,17, 566,848 ); - ent.v[ "angles" ] = ( 22,045, 67,3267, 39,0015 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); - ent.v[ "origin" ] = ( -634,126, 583,801, 570,709 ); - ent.v[ "angles" ] = ( 22,5095, 64,9632, 36,0882 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( -508,114, 539,581, 566,849 ); - ent.v[ "angles" ] = ( 20,621, 74,9912, 42,6713 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( -464,456, 525,712, 574,604 ); - ent.v[ "angles" ] = ( 22,6176, 74,865, -3,37468 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -423,479, 515,665, 570,522 ); - ent.v[ "angles" ] = ( 20,7274, 77,1267, 134,356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -381,07, 506,858, 573,779 ); - ent.v[ "angles" ] = ( 22,836, 80,2762, -69,5266 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -335,944, 501,058, 568,5 ); - ent.v[ "angles" ] = ( 21,884, 83,5368, -116,313 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -1199,14, 1366,08, 570,377 ); - ent.v[ "angles" ] = ( 24,5268, 9,33421, 17,2988 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( -1197,13, 1320,59, 570,51 ); - ent.v[ "angles" ] = ( 23,273, 10,0498, 76,5974 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -1183,46, 1277,11, 571,28 ); - ent.v[ "angles" ] = ( 23,9178, 11,4231, 18,1559 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -1173,41, 1239,21, 568,587 ); - ent.v[ "angles" ] = ( 22,335, 13,1408, 86,8125 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -1160,27, 1198,06, 569,724 ); - ent.v[ "angles" ] = ( 22,5095, 18,9633, 21,0883 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -1116,54, 1072,29, 567,298 ); - ent.v[ "angles" ] = ( 22,241, 23,4745, 114,742 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( -1132,99, 1110,53, 569,502 ); - ent.v[ "angles" ] = ( 22,045, 21,3267, 70,0014 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( -1152,22, 1155,3, 571,363 ); - ent.v[ "angles" ] = ( 22,5095, 18,9631, -118,912 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -1096,77, 1032,7, 571,504 ); - ent.v[ "angles" ] = ( 20,621, 28,9912, 42,6713 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_dim" ); - ent.v[ "origin" ] = ( -1076,69, 992,648, 573,259 ); - ent.v[ "angles" ] = ( 22,6176, 28,8649, -3,37469 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw" ); - ent.v[ "origin" ] = ( -1054,9, 956,443, 571,177 ); - ent.v[ "angles" ] = ( 20,7274, 31,1267, 134,356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( -1032,33, 920,65, 574,433 ); - ent.v[ "angles" ] = ( 22,836, 34,2762, -69,5266 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( -1001,13, 883,661, 568,154 ); - ent.v[ "angles" ] = ( 21,884, 37,5368, -120,313 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_xlg" ); - ent.v[ "origin" ] = ( -847,394, 2137,64, 489,622 ); - ent.v[ "angles" ] = ( 33,0554, 317,415, 0,853006 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_xlg" ); - ent.v[ "origin" ] = ( -208,764, 590,058, 489,779 ); - ent.v[ "angles" ] = ( 33, 90, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_xlg" ); - ent.v[ "origin" ] = ( -849,126, 855,53, 489,355 ); - ent.v[ "angles" ] = ( 32, 45, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_xlg" ); - ent.v[ "origin" ] = ( -209,68, 2402,38, 489,14 ); - ent.v[ "angles" ] = ( 31, 272, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_xlg" ); - ent.v[ "origin" ] = ( 435,405, 2136,45, 487,917 ); - ent.v[ "angles" ] = ( 33, 225, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_xlg" ); - ent.v[ "origin" ] = ( 698,671, 1493,53, 488,689 ); - ent.v[ "angles" ] = ( 34, 180, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_xlg" ); - ent.v[ "origin" ] = ( 433,218, 855,982, 487,856 ); - ent.v[ "angles" ] = ( 33, 134, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( 657,203, -268,636, 372,511 ); - ent.v[ "angles" ] = ( 82, 180, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( 720,705, -333,589, 374,931 ); - ent.v[ "angles" ] = ( 82, 270, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( 783,719, -270,39, 372,949 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 81 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( 721,163, -206,596, 374,979 ); - ent.v[ "angles" ] = ( 82, 90, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_xlg" ); - ent.v[ "origin" ] = ( 711,273, -261,805, -34,9065 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_xlg" ); - ent.v[ "origin" ] = ( -1247,72, -275,608, -65 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 920,707, 3153,72, -67,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 354 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 1001,56, 2154,67, -94 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_sm" ); - ent.v[ "origin" ] = ( 518,367, 782,125, 1029,08 ); - ent.v[ "angles" ] = ( 274, 269,002, 89,9984 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_sm" ); - ent.v[ "origin" ] = ( -923,581, 769,005, 1027,52 ); - ent.v[ "angles" ] = ( 272, 269,007, 89,9931 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_sm" ); - ent.v[ "origin" ] = ( -937,245, 2209,03, 1027,9 ); - ent.v[ "angles" ] = ( 274, 269,002, 89,9984 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_sm" ); - ent.v[ "origin" ] = ( 504,156, 2225,33, 1030,66 ); - ent.v[ "angles" ] = ( 274, 269,002, 89,9984 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_red_md" ); - ent.v[ "origin" ] = ( -1053,81, 594,818, 586,314 ); - ent.v[ "angles" ] = ( 34, 45, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_red_md" ); - ent.v[ "origin" ] = ( -1109,4, 651,148, 587,036 ); - ent.v[ "angles" ] = ( 34, 45, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_red_slw_md" ); - ent.v[ "origin" ] = ( -999,924, 656,052, 418,186 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_red_md" ); - ent.v[ "origin" ] = ( -1109,96, 2342,51, 586,228 ); - ent.v[ "angles" ] = ( 35, 315, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_red_md" ); - ent.v[ "origin" ] = ( -1054,25, 2398,07, 586,383 ); - ent.v[ "angles" ] = ( 35, 315, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_red_md" ); - ent.v[ "origin" ] = ( 638,506, 2397,49, 577,727 ); - ent.v[ "angles" ] = ( 38,9929, 222,713, -0,809685 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_red_md" ); - ent.v[ "origin" ] = ( 694,081, 2342,03, 586,592 ); - ent.v[ "angles" ] = ( 38,9929, 222,713, -0,809685 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_red_md" ); - ent.v[ "origin" ] = ( 693,879, 649,554, 586,359 ); - ent.v[ "angles" ] = ( 34, 136, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_red_md" ); - ent.v[ "origin" ] = ( 638,392, 594,139, 586,436 ); - ent.v[ "angles" ] = ( 34, 136, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_red_slw_md" ); - ent.v[ "origin" ] = ( -998,339, 2312,53, 374,125 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_red_slw_md" ); - ent.v[ "origin" ] = ( 603,147, 2326,46, 387,125 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_red_slw_md" ); - ent.v[ "origin" ] = ( 627,347, 664,624, 426,125 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_spotlight_cool_lg" ); - ent.v[ "origin" ] = ( -235,826, 2195,56, 437,125 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_spotlight_cool_lg" ); - ent.v[ "origin" ] = ( -843,196, 1061,05, 424 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_spotlight_cool_lg" ); - ent.v[ "origin" ] = ( -826,93, 1909,9, 422,877 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_spotlight_cool_lg" ); - ent.v[ "origin" ] = ( 431,613, 1757,29, 413,098 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_spotlight_cool_lg" ); - ent.v[ "origin" ] = ( 30,6163, 865,449, 431,439 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 288,13, 1627,16, -99,0382 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 330,328, 890,242, -67,875 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( -96,48, 1416,18, -98,875 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 699,762, 381,274, -68 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 184,843, -133,136, -22 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( -1716,89, -25,0355, -63,9433 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( -422,001, -864,637, -68 ); - ent.v[ "angles" ] = ( 0, 4, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( -342,466, 2490,04, 573,474 ); - ent.v[ "angles" ] = ( 22,616, 278,69, 17,0413 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_lg" ); - ent.v[ "origin" ] = ( 701,395, 1076,2, 572,538 ); - ent.v[ "angles" ] = ( 22,5095, 154,963, 34,0882 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 135,617, 2769,89, -83,4701 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); - ent.v[ "origin" ] = ( 489,001, 4166,83, 303,96 ); - ent.v[ "angles" ] = ( 270,361, 56,6429, 33,1621 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); - ent.v[ "origin" ] = ( 487,281, 4211,37, 304,973 ); - ent.v[ "angles" ] = ( 270,361, 56,6429, 33,1621 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); - ent.v[ "origin" ] = ( 961,518, 4166,37, 304,975 ); - ent.v[ "angles" ] = ( 270,361, 56,6429, 33,1621 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); - ent.v[ "origin" ] = ( 959,798, 4210,92, 305,988 ); - ent.v[ "angles" ] = ( 270,361, 56,6429, 33,1621 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); - ent.v[ "origin" ] = ( 1440,42, 4162,7, 306,965 ); - ent.v[ "angles" ] = ( 270,361, 56,6429, 33,1621 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); - ent.v[ "origin" ] = ( 1438,7, 4207,24, 307,978 ); - ent.v[ "angles" ] = ( 270,361, 56,6429, 33,1621 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); - ent.v[ "origin" ] = ( 1441,3, 5022,68, 304,971 ); - ent.v[ "angles" ] = ( 270,361, 56,6429, 33,1621 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); - ent.v[ "origin" ] = ( 1439,58, 5067,22, 305,984 ); - ent.v[ "angles" ] = ( 270,361, 56,6429, 33,1621 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); - ent.v[ "origin" ] = ( 963,77, 5029,13, 305,982 ); - ent.v[ "angles" ] = ( 270,361, 56,6429, 33,1621 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); - ent.v[ "origin" ] = ( 962,05, 5073,68, 306,995 ); - ent.v[ "angles" ] = ( 270,361, 56,6429, 33,1621 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); - ent.v[ "origin" ] = ( 484,601, 5026,98, 304,969 ); - ent.v[ "angles" ] = ( 270,361, 56,6429, 33,1621 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); - ent.v[ "origin" ] = ( 482,881, 5071,53, 305,982 ); - ent.v[ "angles" ] = ( 270,361, 56,6429, 33,1621 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); - ent.v[ "origin" ] = ( 965,362, 4181,98, -42,875 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); - ent.v[ "origin" ] = ( 1445,05, 4196,62, -47,7932 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); - ent.v[ "origin" ] = ( 501,531, 4205,47, -53,875 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); - ent.v[ "origin" ] = ( 965,173, 5044,51, -51,5937 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); - ent.v[ "origin" ] = ( 1448,05, 5045,2, -43,3537 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); - ent.v[ "origin" ] = ( 497,463, 5054,02, -45,4584 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 1144,89, 4631,49, -75,875 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 624,269, 4627,73, -75,875 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); - ent.v[ "origin" ] = ( 327,546, 5241,17, 259,969 ); - ent.v[ "angles" ] = ( 270,361, 146,654, 33,151 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); - ent.v[ "origin" ] = ( 283,004, 5239,46, 259,982 ); - ent.v[ "angles" ] = ( 270,361, 146,654, 33,151 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); - ent.v[ "origin" ] = ( -186,377, 5247,94, 253,971 ); - ent.v[ "angles" ] = ( 270,361, 146,654, 33,151 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); - ent.v[ "origin" ] = ( -230,919, 5246,22, 254,984 ); - ent.v[ "angles" ] = ( 270,361, 146,654, 33,151 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( 712,801, 187,057, 23,6697 ); - ent.v[ "angles" ] = ( 286, 315, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( 799,233, 189,931, 24,2237 ); - ent.v[ "angles" ] = ( 290, 224, -10 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( -1128,95, 188,415, 23,1149 ); - ent.v[ "angles" ] = ( 286,272, 217,765, -10,3437 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( -1214,12, 190,058, 23,5743 ); - ent.v[ "angles" ] = ( 288, 294, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( -1516,21, 575,703, 23,6455 ); - ent.v[ "angles" ] = ( 287,029, 220,627, 3,38233 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( -1515,08, 490,491, 22,3967 ); - ent.v[ "angles" ] = ( 288, 135, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( -1516,63, 2415,88, 23,3788 ); - ent.v[ "angles" ] = ( 285,022, 130,119, 93,8562 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( -1515,43, 2501,1, 24,0062 ); - ent.v[ "angles" ] = ( 284,312, 219,223, -11,8548 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( -1214,05, 2801,86, 23,6049 ); - ent.v[ "angles" ] = ( 288,027, 39,233, -3,07457 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( -1127,82, 2802,74, 24,4448 ); - ent.v[ "angles" ] = ( 291, 136, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( 1098,06, 576,058, 24,0008 ); - ent.v[ "angles" ] = ( 290, 314, -10 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( 1098,99, 490,925, 23,4468 ); - ent.v[ "angles" ] = ( 286, 45, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( 1099,48, 2502,21, 25,2732 ); - ent.v[ "angles" ] = ( 290, 314, -10 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( 1098,76, 2415,95, 24,7192 ); - ent.v[ "angles" ] = ( 286, 45, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( 711,778, 2801,74, 23,7588 ); - ent.v[ "angles" ] = ( 290, 48, -10 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( 796,818, 2804,61, 23,2048 ); - ent.v[ "angles" ] = ( 286, 139, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); - ent.v[ "origin" ] = ( -989,577, 4136,14, 193,02 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); - ent.v[ "origin" ] = ( -1386,97, 4133,27, 192,994 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); - ent.v[ "origin" ] = ( -1783,6, 4132,88, 193,078 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); - ent.v[ "origin" ] = ( -585,927, 4538,58, 193,017 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); - ent.v[ "origin" ] = ( -587,061, 4934,51, 192,821 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); - ent.v[ "origin" ] = ( -589,031, 5330,63, 193,223 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); - ent.v[ "origin" ] = ( 1124,87, 1947,62, 186,875 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); - ent.v[ "origin" ] = ( 1221,75, 1949,18, 187,875 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); - ent.v[ "origin" ] = ( 1316,51, 1809,37, 184,875 ); - ent.v[ "angles" ] = ( 88,5858, 45,0032, 44,9944 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); - ent.v[ "origin" ] = ( 1221,66, 1810,25, 184,875 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); - ent.v[ "origin" ] = ( 1125,41, 1808,29, 183,875 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); - ent.v[ "origin" ] = ( 1005,2, 1946,42, 186,875 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); - ent.v[ "origin" ] = ( 909,21, 1945,53, 187,875 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); - ent.v[ "origin" ] = ( 812,952, 1945,77, 188,875 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); - ent.v[ "origin" ] = ( 718,132, 1946,42, 187,875 ); - ent.v[ "angles" ] = ( 88,5858, 225,005, -135,004 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); - ent.v[ "origin" ] = ( -4971,84, 3250,3, 1781,75 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); - ent.v[ "origin" ] = ( -5413,76, 3271,35, 1783,84 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); - ent.v[ "origin" ] = ( -5021,75, 1975,9, 2036,01 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); - ent.v[ "origin" ] = ( -5453,25, 1977,28, 2037,28 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); - ent.v[ "origin" ] = ( -161,96, 3497,47, -46 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); - ent.v[ "origin" ] = ( -203,248, 3537,53, 301,983 ); - ent.v[ "angles" ] = ( 270,361, 148,656, 33,1491 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_dbl_oval_street_wrm" ); - ent.v[ "origin" ] = ( -158,793, 3540,8, 300,97 ); - ent.v[ "angles" ] = ( 270,361, 148,656, 33,1491 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( 623,1, 1866,99, 187,875 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( 621,453, 1772,64, 186,875 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( 621,137, 1676,61, 187,875 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( 622,111, 1339,74, 186,875 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( 621,906, 1244,42, 186,875 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( 622,025, 1147,75, 186,875 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_yellow" ); - ent.v[ "origin" ] = ( 623,767, 1051,07, 186,875 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 1940,38, 5312,95, -87,1833 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 1812,24, 4740,63, -68,0085 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 1864,09, 4252,85, -64,875 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); - ent.v[ "origin" ] = ( 2336,02, 4532,84, -67,875 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); - ent.v[ "origin" ] = ( 2326, 3147,16, -66,875 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_pipe_md" ); - ent.v[ "origin" ] = ( 391,517, 3346,46, -34,2983 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_pipe_md" ); - ent.v[ "origin" ] = ( 442,87, 3171,7, 102,733 ); - ent.v[ "angles" ] = ( 6, 270,995, -0,105097 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( 875,986, 1190,52, 62,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 193 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 522,242, 3158,98, 101,707 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_wrm_dbl_md" ); - ent.v[ "origin" ] = ( 546,232, 3237,18, 69,3488 ); - ent.v[ "angles" ] = ( 270, 0, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_wrm_dbl_md" ); - ent.v[ "origin" ] = ( 870,223, 1212,2, 20,8481 ); - ent.v[ "angles" ] = ( 270, 0, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 1163,91, -52,8334, -62 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 68,4461, 3960,75, -76 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( -1255,43, 924,871, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 54 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( -1219,57, 471,547, -67 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 291 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( -494,754, 96,894, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 113 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( -113,811, -963,833, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 25 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( 201,508, -590,635, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 196 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( 407,257, 35,9362, -20 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 7 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( 362,036, -134,284, -20,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 237 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( 776,155, 601,597, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 211 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( 1008,73, 618,736, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 114 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( 1000,96, 2584,14, -67,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 244 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( -397,282, 3543,68, -34,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 115 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( -531,878, 3684,01, -35,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 298 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( -1007,22, 3495,58, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 357 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( 779,277, -257,199, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 45 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( -1110,31, 672,304, -55,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 280 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( -982,131, 2516,85, -74 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( -886,575, 2884,5, -70,0427 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 52 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( -1334,43, -289,85, 374,343 ); - ent.v[ "angles" ] = ( 82, 180, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( -1270,47, -227,81, 374,811 ); - ent.v[ "angles" ] = ( 82, 90, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( -1207,92, -291,604, 373,781 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 81 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( -1270,93, -354,802, 374,763 ); - ent.v[ "angles" ] = ( 82, 270, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( 895,044, 1857,07, -97,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 294 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( 1071,47, 1817,2, -97,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 164 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( 843,086, 1381,56, -97,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 346 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_pipe_roof_lg" ); - ent.v[ "origin" ] = ( 4501,78, 7413,04, 1927,14 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_pipe_roof_lg" ); - ent.v[ "origin" ] = ( 6260,38, 7570,06, 1913,19 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( -125,078, 780,255, -65 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_spotlight_sm_cool" ); - ent.v[ "origin" ] = ( 1315,93, 1948,99, 185,875 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); - ent.v[ "origin" ] = ( -4966,11, 3679,84, 966,278 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); - ent.v[ "origin" ] = ( -5500,58, 3680,94, 968,368 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_dockside_sun1" ); - ent.v[ "origin" ] = ( -11746,2, -36458,7, 12001,6 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_white_static" ); - ent.v[ "origin" ] = ( -925,644, 2223,33, 1000,05 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_white_static" ); - ent.v[ "origin" ] = ( 516,945, 2211,21, 1000,45 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_white_static" ); - ent.v[ "origin" ] = ( -939,476, 779,961, 999,573 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_white_static" ); - ent.v[ "origin" ] = ( 504,803, 768,376, 1000,34 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_green_static" ); - ent.v[ "origin" ] = ( -3395,36, 4909,93, 630,355 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_green_static" ); - ent.v[ "origin" ] = ( -3387,86, 5090,35, 632,565 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_green_static" ); - ent.v[ "origin" ] = ( -3391,27, 5271,22, 632,031 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_green_static" ); - ent.v[ "origin" ] = ( -3396,79, 5452,17, 632,539 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_green_static" ); - ent.v[ "origin" ] = ( -3396,49, 5630,97, 629,682 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_green_static" ); - ent.v[ "origin" ] = ( -3817,4, 5637,1, 632,27 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_green_static" ); - ent.v[ "origin" ] = ( -3820,24, 5455,5, 637,128 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_green_static" ); - ent.v[ "origin" ] = ( -3817,21, 5274,74, 632,62 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_green_static" ); - ent.v[ "origin" ] = ( -3816,92, 5093,35, 635,153 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_green_static" ); - ent.v[ "origin" ] = ( -3819,63, 4912,76, 631,943 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); - ent.v[ "origin" ] = ( -2991,28, 3023,03, 284,902 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); - ent.v[ "origin" ] = ( -4515,23, 3017,3, 277,482 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); - ent.v[ "origin" ] = ( -3751,42, 3024,34, 285,461 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( -1321,73, 430,243, -68 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 136,264, -1311,71, -114,266 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 10 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( -1032,16, -1377,82, -67,3127 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 10 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 1339,95, 148,534, -63,0499 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 10 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 1349,04, -415,785, -99,3848 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 10 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 886,759, 2696,88, -67,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 354 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 483,095, 2668,57, -81,2681 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 354 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 294,378, 1961,82, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 354 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( -398,28, 1756,36, -93,5527 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( -1238,89, 2389,27, 372,212 ); - ent.v[ "angles" ] = ( 82, 180, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( -1174,8, 2327,25, 373,633 ); - ent.v[ "angles" ] = ( 81, 270, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( -1112,56, 2391,5, 372,651 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 81 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( -1174,57, 2456,3, 373,681 ); - ent.v[ "angles" ] = ( 82, 90, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( 991,116, 1525,73, -97,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 195 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); - ent.v[ "origin" ] = ( 665,838, 1975,22, 570,487 ); - ent.v[ "angles" ] = ( 20,621, 208,991, 2,6713 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); - ent.v[ "origin" ] = ( 19,6306, 2470,73, 569,924 ); - ent.v[ "angles" ] = ( 20,7275, 257,127, 179,356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); - ent.v[ "origin" ] = ( 708,308, 1098,73, 566,596 ); - ent.v[ "angles" ] = ( 22,5095, 154,963, 4,08816 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); - ent.v[ "origin" ] = ( 314,154, 2346,74, 573,259 ); - ent.v[ "angles" ] = ( 20,3603, 247,522, -178,021 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); - ent.v[ "origin" ] = ( -725,299, 2346,83, 567,03 ); - ent.v[ "angles" ] = ( 22,6177, 298,865, -0,374699 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); - ent.v[ "origin" ] = ( -1143,93, 1856,34, 568,304 ); - ent.v[ "angles" ] = ( 22,2771, 340,554, 178,15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); - ent.v[ "origin" ] = ( 42,3137, 524,267, 565,598 ); - ent.v[ "angles" ] = ( 21,3355, 103,107, 1,79994 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); - ent.v[ "origin" ] = ( 356,595, 663,473, 568,415 ); - ent.v[ "angles" ] = ( 20,7274, 121,126, 177,356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); - ent.v[ "origin" ] = ( -451,7, 533,035, 568,485 ); - ent.v[ "angles" ] = ( 23,6173, 74,8388, -1,38497 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); - ent.v[ "origin" ] = ( -1143,25, 1130,4, 571,421 ); - ent.v[ "angles" ] = ( 22,045, 21,3267, -179,999 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_rnd_cool_glw_add" ); - ent.v[ "origin" ] = ( -1013,76, 2087,99, 568,857 ); - ent.v[ "angles" ] = ( 24,2705, 324,188, -1,16975 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 1022,23, 761,633, -68 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); - ent.v[ "origin" ] = ( -6680,89, 3677,54, 969,725 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -14,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); - ent.v[ "origin" ] = ( -6146,42, 3676,44, 967,635 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -14,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); - ent.v[ "origin" ] = ( -6152,15, 3246,9, 1783,11 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -14,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); - ent.v[ "origin" ] = ( -6594,07, 3267,95, 1785,2 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -14,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); - ent.v[ "origin" ] = ( -6202,06, 1972,5, 2037,37 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -14,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); - ent.v[ "origin" ] = ( -6633,56, 1973,88, 2038,64 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -14,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); - ent.v[ "origin" ] = ( -210,766, 7415,62, 257,964 ); - ent.v[ "angles" ] = ( 89,639, 33,3501, -146,845 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); - ent.v[ "origin" ] = ( 301,306, 7421,98, 254,979 ); - ent.v[ "angles" ] = ( 89,639, 33,3501, -146,845 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); - ent.v[ "origin" ] = ( -233,549, 5246,54, -85,875 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_lg" ); - ent.v[ "origin" ] = ( 283,745, 5245,8, -79,875 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_light_flourescent_ceiling_panel" ); - ent.v[ "origin" ] = ( 1200,01, 1394,21, 189,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flourescent_ceiling_panel" ); - ent.v[ "origin" ] = ( 861,946, 1345,03, 189,875 ); - ent.v[ "angles" ] = ( 89,9651, 89,9915, 178,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); - ent.v[ "origin" ] = ( -7863,79, 3686,07, 971,216 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -14; - ent = maps/mp/_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); - ent.v[ "origin" ] = ( -7329,32, 3684,97, 969,126 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -14; - ent = maps/mp/_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); - ent.v[ "origin" ] = ( -7776,97, 3276,48, 1786,69 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -14; - ent = maps/mp/_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); - ent.v[ "origin" ] = ( -7335,05, 3255,43, 1784,6 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -14; - ent = maps/mp/_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); - ent.v[ "origin" ] = ( -7816,46, 1982,41, 2040,13 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -14; - ent = maps/mp/_utility::createoneshoteffect( "fx_la2_light_beacon_red_blink" ); - ent.v[ "origin" ] = ( -7384,96, 1981,03, 2038,86 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -14; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 430,003, -1219,77, -141,265 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 10 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); - ent.v[ "origin" ] = ( 3949,61, 1016,28, 276,485 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); - ent.v[ "origin" ] = ( 5553,59, 1179,68, 267,402 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); - ent.v[ "origin" ] = ( 2540,14, 1173,91, 286,472 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); - ent.v[ "origin" ] = ( 2353,73, 1962,99, 286,476 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); - ent.v[ "origin" ] = ( 2356,84, 3151,28, 284,388 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); - ent.v[ "origin" ] = ( 2346,68, 4532,12, 276,47 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_bridge_accent_vista" ); - ent.v[ "origin" ] = ( -12718,5, -1189,61, -26,9752 ); - ent.v[ "angles" ] = ( 305,012, 103,257, 1,4279 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 17,6232, 4607,21, -66 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( 1677,06, -163,032, -142,73 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 10 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( -1158,61, -228,973, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 129 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( -1182,1, -239,807, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 329 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( -440,237, 147,977, 373,718 ); - ent.v[ "angles" ] = ( 82, 90, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( -504,197, 85,937, 373,249 ); - ent.v[ "angles" ] = ( 82, 180, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( -440,695, 20,9839, 373,67 ); - ent.v[ "angles" ] = ( 82, 270, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( -377,681, 84,183, 373,688 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 81 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_xlg" ); - ent.v[ "origin" ] = ( -438,079, 71,8697, -67 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_bridge_accent_vista" ); - ent.v[ "origin" ] = ( -12603, -1881,62, 12,7116 ); - ent.v[ "angles" ] = ( 319,001, 285,138, 178,914 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_bridge_accent_vista" ); - ent.v[ "origin" ] = ( -12610, -8307,93, 29,8517 ); - ent.v[ "angles" ] = ( 319,001, 285,138, 178,914 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_bridge_accent_vista" ); - ent.v[ "origin" ] = ( -12732, -7581,47, -19,8351 ); - ent.v[ "angles" ] = ( 305,012, 103,257, 1,4279 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_bridge_accent_vista" ); - ent.v[ "origin" ] = ( -12595,5, -14704,3, 27,9472 ); - ent.v[ "angles" ] = ( 319,001, 285,138, 178,914 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_bridge_accent_vista" ); - ent.v[ "origin" ] = ( -12717,5, -13977,8, -21,7396 ); - ent.v[ "angles" ] = ( 305,012, 103,257, 1,4279 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_bridge_accent_vista" ); - ent.v[ "origin" ] = ( -12668,3, 4444,37, 37,4362 ); - ent.v[ "angles" ] = ( 319,001, 285,138, 178,914 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); - ent.v[ "origin" ] = ( -214,553, 6293,06, 263,477 ); - ent.v[ "angles" ] = ( 89,639, 33,3501, -146,845 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_vista_lg" ); - ent.v[ "origin" ] = ( 304,836, 6295,48, 263,465 ); - ent.v[ "angles" ] = ( 89,639, 33,3501, -146,845 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( -17,8422, -663,502, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 339 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( 229,096, -758,193, 373,901 ); - ent.v[ "angles" ] = ( 82, 270, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( 165,594, -693,24, 371,481 ); - ent.v[ "angles" ] = ( 82, 180, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( 292,11, -694,995, 371,919 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 81 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( 229,554, -631,201, 373,949 ); - ent.v[ "angles" ] = ( 81, 90, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_xlg" ); - ent.v[ "origin" ] = ( 231,992, -712,323, -37 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( -285,562, -704,659, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 296 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( -501,458, 62,6035, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 218 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( 994,85, -42,6779, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 322 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( 1227,8, 1194,16, -57,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 194 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( 710,785, 3211,23, -67,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 296 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_sm_md" ); - ent.v[ "origin" ] = ( -1930,68, 2829,1, -53,1636 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_bridge_accent_vista" ); - ent.v[ "origin" ] = ( -12704,2, -20397,6, 66,2259 ); - ent.v[ "angles" ] = ( 305,012, 103,257, 1,4279 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( 1030,74, 1025,95, -97,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 101 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( 1044,27, 3214,15, 371,673 ); - ent.v[ "angles" ] = ( 82, 270, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( 1044,73, 3341,14, 372,721 ); - ent.v[ "angles" ] = ( 82, 90, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( 1107,29, 3277,35, 369,691 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 81 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "origin" ] = ( 980,771, 3279,1, 373,253 ); - ent.v[ "angles" ] = ( 82, 180, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_lit_overhead_wrm_xlg" ); - ent.v[ "origin" ] = ( 1056,81, 3282,64, -43,1649 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( 805,401, 1035,3, 63,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 82 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_slw_flat" ); - ent.v[ "origin" ] = ( -1367,26, 1275,32, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 17 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 415,432, 3138,61, 101,427 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 840,362, 1692,12, 32,4214 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 1046,82, 1180,38, 33,4896 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; -} diff --git a/Multiplayer Maps/mp_dockside/maps/mp/mp_dockside.gsc b/Multiplayer Maps/mp_dockside/maps/mp/mp_dockside.gsc deleted file mode 100644 index 3d3cdce..0000000 --- a/Multiplayer Maps/mp_dockside/maps/mp/mp_dockside.gsc +++ /dev/null @@ -1,188 +0,0 @@ -#include maps/mp/mp_dockside_crane; -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_dockside_fx::main(); - maps/mp/_load::main(); - maps/mp/mp_dockside_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_dockside" ); - level.overrideplayerdeathwatchtimer = ::leveloverridetime; - level.useintermissionpointsonwavespawn = ::useintermissionpointsonwavespawn; - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - setdvar( "sm_sunsamplesizenear", 0,39 ); - setdvar( "sm_sunshadowsmall", 1 ); - if ( getgametypesetting( "allowMapScripting" ) ) - { - level maps/mp/mp_dockside_crane::init(); - } - else - { - crate_triggers = getentarray( "crate_kill_trigger", "targetname" ); - i = 0; - while ( i < crate_triggers.size ) - { - crate_triggers[ i ] delete(); - i++; - } - } - setheliheightpatchenabled( "war_mode_heli_height_lock", 0 ); - level thread water_trigger_init(); - rts_remove(); -/# - level thread devgui_dockside(); - execdevgui( "devgui_mp_dockside" ); -#/ -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2700", reset_dvars ); -} - -water_trigger_init() -{ - wait 3; - triggers = getentarray( "trigger_hurt", "classname" ); - _a80 = triggers; - _k80 = getFirstArrayKey( _a80 ); - while ( isDefined( _k80 ) ) - { - trigger = _a80[ _k80 ]; - if ( trigger.origin[ 2 ] > level.mapcenter[ 2 ] ) - { - } - else - { - trigger thread water_trigger_think(); - } - _k80 = getNextArrayKey( _a80, _k80 ); - } -} - -water_trigger_think() -{ - for ( ;; ) - { - self waittill( "trigger", entity ); - if ( isplayer( entity ) ) - { - entity playsound( "mpl_splash_death" ); - playfx( level._effect[ "water_splash" ], entity.origin + vectorScale( ( 0, 0, 1 ), 40 ) ); - } - } -} - -leveloverridetime( defaulttime ) -{ - if ( self isinwater() ) - { - return 0,4; - } - return defaulttime; -} - -useintermissionpointsonwavespawn() -{ - return self isinwater(); -} - -isinwater() -{ - triggers = getentarray( "trigger_hurt", "classname" ); - _a126 = triggers; - _k126 = getFirstArrayKey( _a126 ); - while ( isDefined( _k126 ) ) - { - trigger = _a126[ _k126 ]; - if ( trigger.origin[ 2 ] > level.mapcenter[ 2 ] ) - { - } - else - { - if ( self istouching( trigger ) ) - { - return 1; - } - } - _k126 = getNextArrayKey( _a126, _k126 ); - } - return 0; -} - -rts_remove() -{ - removes = getentarray( "rts_only", "targetname" ); - _a145 = removes; - _k145 = getFirstArrayKey( _a145 ); - while ( isDefined( _k145 ) ) - { - remove = _a145[ _k145 ]; - if ( isDefined( remove ) ) - { - remove delete(); - } - _k145 = getNextArrayKey( _a145, _k145 ); - } -} - -devgui_dockside() -{ -/# - setdvar( "devgui_notify", "" ); - for ( ;; ) - { - wait 0,5; - devgui_string = getDvar( "devgui_notify" ); - switch( devgui_string ) - { - case "": - break; - case "crane_print_dvars": - crane_print_dvars(); - break; - default: - } - if ( getDvar( "devgui_notify" ) != "" ) - { - setdvar( "devgui_notify", "" ); - } -#/ - } - } -} - -crane_print_dvars() -{ -/# - dvars = []; - dvars[ dvars.size ] = "scr_crane_claw_move_time"; - dvars[ dvars.size ] = "scr_crane_crate_lower_time"; - dvars[ dvars.size ] = "scr_crane_crate_raise_time"; - dvars[ dvars.size ] = "scr_crane_arm_y_move_time"; - dvars[ dvars.size ] = "scr_crane_arm_z_move_time"; - dvars[ dvars.size ] = "scr_crane_claw_drop_speed"; - dvars[ dvars.size ] = "scr_crane_claw_drop_time_min"; - _a199 = dvars; - _k199 = getFirstArrayKey( _a199 ); - while ( isDefined( _k199 ) ) - { - dvar = _a199[ _k199 ]; - print( dvar + ": " ); - println( getDvar( dvar ) ); - _k199 = getNextArrayKey( _a199, _k199 ); -#/ - } -} diff --git a/Multiplayer Maps/mp_dockside/maps/mp/mp_dockside_amb.gsc b/Multiplayer Maps/mp_dockside/maps/mp/mp_dockside_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_dockside/maps/mp/mp_dockside_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_dockside/maps/mp/mp_dockside_crane.gsc b/Multiplayer Maps/mp_dockside/maps/mp/mp_dockside_crane.gsc deleted file mode 100644 index dd984d1..0000000 --- a/Multiplayer Maps/mp_dockside/maps/mp/mp_dockside_crane.gsc +++ /dev/null @@ -1,770 +0,0 @@ -#include maps/mp/killstreaks/_supplydrop; -#include maps/mp/gametypes/_gameobjects; -#include maps/mp/gametypes/ctf; -#include maps/mp/gametypes/_weaponobjects; -#include maps/mp/killstreaks/_rcbomb; -#include maps/mp/_tacticalinsertion; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - precachemodel( "p6_dockside_container_lrg_white" ); - crane_dvar_init(); - level.crate_models = []; - level.crate_models[ 0 ] = "p6_dockside_container_lrg_red"; - level.crate_models[ 1 ] = "p6_dockside_container_lrg_blue"; - level.crate_models[ 2 ] = "p6_dockside_container_lrg_white"; - level.crate_models[ 3 ] = "p6_dockside_container_lrg_orange"; - claw = getent( "claw_base", "targetname" ); - claw.z_upper = claw.origin[ 2 ]; - claw thread sound_wires_move(); - arms_y = getentarray( "claw_arm_y", "targetname" ); - arms_z = getentarray( "claw_arm_z", "targetname" ); - claw.arms = arraycombine( arms_y, arms_z, 1, 0 ); - _a32 = arms_z; - _k32 = getFirstArrayKey( _a32 ); - while ( isDefined( _k32 ) ) - { - arm_z = _a32[ _k32 ]; - arm_y = getclosest( arm_z.origin, arms_y ); - arm_z.parent = arm_y; - _k32 = getNextArrayKey( _a32, _k32 ); - } - _a39 = arms_y; - _k39 = getFirstArrayKey( _a39 ); - while ( isDefined( _k39 ) ) - { - arm_y = _a39[ _k39 ]; - arm_y.parent = claw; - _k39 = getNextArrayKey( _a39, _k39 ); - } - claw claw_link_arms( "claw_arm_y" ); - claw claw_link_arms( "claw_arm_z" ); - crates = getentarray( "crate", "targetname" ); - array_thread( crates, ::sound_pit_move ); - crate_data = []; - i = 0; - while ( i < crates.size ) - { - crates[ i ] disconnectpaths(); - data = spawnstruct(); - data.origin = crates[ i ].origin; - data.angles = crates[ i ].angles; - crate_data[ i ] = data; - i++; - } - rail = getent( "crane_rail", "targetname" ); - rail thread sound_ring_move(); - rail.roller = getent( "crane_roller", "targetname" ); - rail.roller.wheel = getent( "crane_wheel", "targetname" ); - claw.wires = getentarray( "crane_wire", "targetname" ); - claw.z_wire_max = rail.roller.wheel.origin[ 2 ] - 50; - _a73 = claw.wires; - _k73 = getFirstArrayKey( _a73 ); - while ( isDefined( _k73 ) ) - { - wire = _a73[ _k73 ]; - wire linkto( claw ); - if ( wire.origin[ 2 ] > claw.z_wire_max ) - { - wire ghost(); - } - _k73 = getNextArrayKey( _a73, _k73 ); - } - placements = getentarray( "crate_placement", "targetname" ); - _a85 = placements; - _k85 = getFirstArrayKey( _a85 ); - while ( isDefined( _k85 ) ) - { - placement = _a85[ _k85 ]; - placement.angles += vectorScale( ( 0, 0, 1 ), 90 ); - crates[ crates.size ] = spawn( "script_model", placement.origin ); - _k85 = getNextArrayKey( _a85, _k85 ); - } - triggers = getentarray( "crate_kill_trigger", "targetname" ); - _a93 = crates; - _k93 = getFirstArrayKey( _a93 ); - while ( isDefined( _k93 ) ) - { - crate = _a93[ _k93 ]; - crate.kill_trigger = getclosest( crate.origin, triggers ); - crate.kill_trigger.origin = crate.origin - vectorScale( ( 0, 0, 1 ), 5 ); - crate.kill_trigger enablelinkto(); - crate.kill_trigger linkto( crate ); - if ( crate.model != "" ) - { - crate.kill_trigger.active = 1; - } - else - { - crate.kill_trigger.active = 0; - } - _k93 = getNextArrayKey( _a93, _k93 ); - } - trigger = getclosest( claw.origin, triggers ); - trigger enablelinkto(); - trigger linkto( claw ); - trigger.active = 1; - placements = array_randomize( placements ); - level thread crane_think( claw, rail, crates, crate_data, placements ); -} - -crane_dvar_init() -{ - set_dvar_float_if_unset( "scr_crane_claw_move_time", "5" ); - set_dvar_float_if_unset( "scr_crane_crate_lower_time", "5" ); - set_dvar_float_if_unset( "scr_crane_crate_raise_time", "5" ); - set_dvar_float_if_unset( "scr_crane_arm_y_move_time", "3" ); - set_dvar_float_if_unset( "scr_crane_arm_z_move_time", "3" ); - set_dvar_float_if_unset( "scr_crane_claw_drop_speed", "25" ); - set_dvar_float_if_unset( "scr_crane_claw_drop_time_min", "5" ); -} - -wire_render() -{ - self endon( "movedone" ); - for ( ;; ) - { - wait 0,05; - _a139 = self.wires; - _k139 = getFirstArrayKey( _a139 ); - while ( isDefined( _k139 ) ) - { - wire = _a139[ _k139 ]; - if ( wire.origin[ 2 ] > self.z_wire_max ) - { - wire ghost(); - } - else - { - wire show(); - } - _k139 = getNextArrayKey( _a139, _k139 ); - } - } -} - -crane_think( claw, rail, crates, crate_data, placements ) -{ - wait 1; - claw arms_open(); - for ( ;; ) - { - i = 0; - while ( i < ( crates.size - placements.size ) ) - { - crate = getclosest( crate_data[ i ].origin, crates ); - rail crane_move( claw, crate_data[ i ], -318 ); - level notify( "wires_move" ); - claw claw_crate_grab( crate, 318 ); - lower = 1; - target = ( i + 1 ) % ( crates.size - placements.size ); - target_crate = getclosest( crate_data[ target ].origin, crates ); - while ( cointoss() ) - { - placement_index = 0; - while ( placement_index < placements.size ) - { - placement = placements[ placement_index ]; - if ( !isDefined( placement.crate ) ) - { - lower = 0; - break; - } - else - { - placement_index++; - } - } - } - if ( !lower ) - { - z_dist = crate.origin[ 2 ] - placement.origin[ 2 ] - 33; - rail crane_move( claw, placement, z_dist * -1 ); - level notify( "wires_move" ); - placement.crate = crate; - } - else - { - rail crane_move( claw, crate_data[ target ], -181 ); - level notify( "wires_move" ); - } - claw claw_crate_move( crate ); - if ( lower ) - { - crate crate_lower( target_crate, crate_data[ target ] ); - } - crate = target_crate; - target = ( i + 2 ) % ( crates.size - placements.size ); - target_crate = getclosest( crate_data[ target ].origin, crates ); - if ( !lower ) - { - crate = crates[ 3 + placement_index ]; - crate.origin = target_crate.origin - vectorScale( ( 0, 0, 1 ), 137 ); - crate.angles = target_crate.angles; - wait 0,25; - claw waittill( "movedone" ); - } - crate crate_raise( target_crate, crate_data[ target ] ); - rail crane_move( claw, crate_data[ target ], -181 ); - level notify( "wires_move" ); - claw claw_crate_grab( target_crate, 181 ); - crate = target_crate; - target = ( i + 3 ) % ( crates.size - placements.size ); - rail crane_move( claw, crate_data[ target ], -318 ); - level notify( "wires_move" ); - claw claw_crate_drop( crate, crate_data[ target ] ); - i++; - } - } -} - -crane_move( claw, desired, z_dist ) -{ - self.roller linkto( self ); - self.roller.wheel linkto( self.roller ); - claw linkto( self.roller.wheel ); - goal = ( desired.origin[ 0 ], desired.origin[ 1 ], self.origin[ 2 ] ); - dir = vectornormalize( goal - self.origin ); - angles = vectorToAngle( dir ); - angles = ( self.angles[ 0 ], angles[ 1 ] + 90, self.angles[ 2 ] ); - yawdiff = absangleclamp360( self.angles[ 1 ] - angles[ 1 ] ); - time = yawdiff / 25; - self rotateto( angles, time, time * 0,35, time * 0,45 ); - self thread physics_move(); - level notify( "wires_stop" ); - level notify( "ring_move" ); - self waittill( "rotatedone" ); - self.roller unlink(); - goal = ( desired.origin[ 0 ], desired.origin[ 1 ], self.roller.origin[ 2 ] ); - diff = distance2d( goal, self.roller.origin ); - speed = getDvarFloat( #"C39D2ABF" ); - time = diff / speed; - if ( time < getDvarFloat( #"F60036C0" ) ) - { - time = getDvarFloat( #"F60036C0" ); - } - self.roller moveto( goal, time, time * 0,25, time * 0,25 ); - self.roller thread physics_move(); - goal = ( desired.origin[ 0 ], desired.origin[ 1 ], self.roller.wheel.origin[ 2 ] ); - self.roller.wheel unlink(); - self.roller.wheel moveto( goal, time, time * 0,25, time * 0,25 ); - self.roller.wheel rotateto( desired.angles + vectorScale( ( 0, 0, 1 ), 90 ), time, time * 0,25, time * 0,25 ); - claw.z_initial = claw.origin[ 2 ]; - claw unlink(); - claw rotateto( desired.angles, time, time * 0,25, time * 0,25 ); - claw.goal = ( goal[ 0 ], goal[ 1 ], claw.origin[ 2 ] + z_dist ); - claw.time = time; - claw moveto( claw.goal, time, time * 0,25, time * 0,25 ); - level notify( "ring_stop" ); -} - -physics_move() -{ - self endon( "rotatedone" ); - self endon( "movedone" ); - for ( ;; ) - { - wait 0,05; - crates = getentarray( "care_package", "script_noteworthy" ); - _a318 = crates; - _k318 = getFirstArrayKey( _a318 ); - while ( isDefined( _k318 ) ) - { - crate = _a318[ _k318 ]; - if ( crate istouching( self ) ) - { - crate physicslaunch( crate.origin, ( 0, 0, 1 ) ); - } - _k318 = getNextArrayKey( _a318, _k318 ); - } - } -} - -claw_crate_grab( crate, z_dist ) -{ - self thread wire_render(); - self waittill( "movedone" ); - level notify( "wires_stop" ); - self playsound( "amb_crane_arms_b" ); - self claw_z_arms( -33 ); - self playsound( "amb_crane_arms" ); - self arms_close( crate ); - crate movez( 33, getDvarFloat( #"92CC26F1" ) ); - self claw_z_arms( 33 ); - crate linkto( self ); - self movez( z_dist, getDvarFloat( #"33ED9F5F" ) ); - self thread wire_render(); - level notify( "wires_move" ); - self waittill( "movedone" ); - self playsound( "amb_crane_arms" ); -} - -sound_wires_move() -{ - while ( 1 ) - { - level waittill( "wires_move" ); - self playsound( "amb_crane_wire_start" ); - self playloopsound( "amb_crane_wire_lp" ); - level waittill( "wires_stop" ); - self playsound( "amb_crane_wire_end" ); - wait 0,1; - self stoploopsound( 0,2 ); - } -} - -sound_ring_move() -{ - while ( 1 ) - { - level waittill( "ring_move" ); - self playsound( "amb_crane_ring_start" ); - self playloopsound( "amb_crane_ring_lp" ); - level waittill( "ring_stop" ); - self playsound( "amb_crane_ring_end" ); - wait 0,1; - self stoploopsound( 0,2 ); - } -} - -sound_pit_move() -{ - while ( 1 ) - { - level waittill( "pit_move" ); - self playsound( "amb_crane_pit_start" ); - self playloopsound( "amb_crane_pit_lp" ); - level waittill( "pit_stop" ); - self playsound( "amb_crane_pit_end" ); - self stoploopsound( 0,2 ); - wait 0,2; - } -} - -claw_crate_move( crate, claw ) -{ - self thread wire_render(); - self waittill( "movedone" ); - crate unlink(); - self playsound( "amb_crane_arms_b" ); - level notify( "wires_stop" ); - crate movez( -33, getDvarFloat( #"92CC26F1" ) ); - self claw_z_arms( -33 ); - self playsound( "amb_crane_arms_b" ); - playfxontag( level._effect[ "crane_dust" ], crate, "tag_origin" ); - crate playsound( "amb_crate_drop" ); - self arms_open(); - level notify( "wires_move" ); - self claw_z_arms( 33 ); - z_dist = self.z_initial - self.origin[ 2 ]; - self movez( z_dist, getDvarFloat( #"33ED9F5F" ) ); - self thread wire_render(); -} - -claw_crate_drop( target, data ) -{ - target thread crate_drop_think( self ); - self thread wire_render(); - self waittill( "claw_movedone" ); - target unlink(); - level notify( "wires_stop" ); - self playsound( "amb_crane_arms_b" ); - target movez( -33, getDvarFloat( #"92CC26F1" ) ); - self claw_z_arms( -33 ); - playfxontag( level._effect[ "crane_dust" ], target, "tag_origin" ); - self playsound( "amb_crate_drop" ); - target notify( "claw_done" ); - self playsound( "amb_crane_arms" ); - self arms_open(); - level notify( "wires_move" ); - target.origin = data.origin; - self claw_z_arms( 33 ); - self playsound( "amb_crane_arms" ); - self movez( 318, getDvarFloat( #"33ED9F5F" ) ); - self thread wire_render(); - self waittill( "movedone" ); -} - -crate_lower( lower, data ) -{ - z_dist = abs( self.origin[ 2 ] - lower.origin[ 2 ] ); - self movez( z_dist * -1, getDvarFloat( #"CFA0F999" ) ); - lower movez( z_dist * -1, getDvarFloat( #"CFA0F999" ) ); - level notify( "pit_move" ); - lower waittill( "movedone" ); - level notify( "pit_stop" ); - lower ghost(); - self.origin = data.origin; - wait 0,25; -} - -crate_raise( upper, data ) -{ - self crate_set_random_model( upper ); - self.kill_trigger.active = 1; - self.origin = ( data.origin[ 0 ], data.origin[ 1 ], self.origin[ 2 ] ); - self.angles = data.angles; - wait 0,2; - self show(); - z_dist = abs( upper.origin[ 2 ] - self.origin[ 2 ] ); - self movez( z_dist, getDvarFloat( #"B4D4D064" ) ); - upper movez( z_dist, getDvarFloat( #"B4D4D064" ) ); - level notify( "wires_stop" ); - level notify( "pit_move" ); - upper thread raise_think(); -} - -raise_think() -{ - self waittill( "movedone" ); - level notify( "pit_stop" ); -} - -crate_set_random_model( other ) -{ - models = array_randomize( level.crate_models ); - _a513 = models; - _k513 = getFirstArrayKey( _a513 ); - while ( isDefined( _k513 ) ) - { - model = _a513[ _k513 ]; - if ( model == other.model ) - { - } - else - { - self setmodel( model ); - return; - } - _k513 = getNextArrayKey( _a513, _k513 ); - } -} - -arms_open() -{ - self claw_move_arms( -15 ); - self playsound( "amb_crane_arms" ); -} - -arms_close( crate ) -{ - self claw_move_arms( 15, crate ); - self playsound( "amb_crane_arms" ); -} - -claw_link_arms( name ) -{ - _a541 = self.arms; - _k541 = getFirstArrayKey( _a541 ); - while ( isDefined( _k541 ) ) - { - arm = _a541[ _k541 ]; - if ( arm.targetname == name ) - { - arm linkto( arm.parent ); - } - _k541 = getNextArrayKey( _a541, _k541 ); - } -} - -claw_unlink_arms( name ) -{ - _a552 = self.arms; - _k552 = getFirstArrayKey( _a552 ); - while ( isDefined( _k552 ) ) - { - arm = _a552[ _k552 ]; - if ( arm.targetname == name ) - { - arm unlink(); - } - _k552 = getNextArrayKey( _a552, _k552 ); - } -} - -claw_move_arms( dist, crate ) -{ - claw_unlink_arms( "claw_arm_y" ); - arms = []; - _a566 = self.arms; - _k566 = getFirstArrayKey( _a566 ); - while ( isDefined( _k566 ) ) - { - arm = _a566[ _k566 ]; - if ( arm.targetname == "claw_arm_y" ) - { - arms[ arms.size ] = arm; - forward = anglesToForward( arm.angles ); - arm.goal = arm.origin + vectorScale( forward, dist ); - arm moveto( arm.goal, getDvarFloat( #"0D6F71B0" ) ); - } - _k566 = getNextArrayKey( _a566, _k566 ); - } - if ( dist > 0 ) - { - wait ( getDvarFloat( #"0D6F71B0" ) / 2 ); - _a583 = self.arms; - _k583 = getFirstArrayKey( _a583 ); - while ( isDefined( _k583 ) ) - { - arm = _a583[ _k583 ]; - if ( arm.targetname == "claw_arm_y" ) - { - arm moveto( arm.goal, 0,1 ); - self playsound( "amb_crane_arms_b" ); - } - _k583 = getNextArrayKey( _a583, _k583 ); - } - wait 0,05; - playfxontag( level._effect[ "crane_spark" ], crate, "tag_origin" ); - self playsound( "amb_arms_latch" ); - } -/# - assert( arms.size == 4 ); -#/ - waittill_multiple_ents( arms[ 0 ], "movedone", arms[ 1 ], "movedone", arms[ 2 ], "movedone", arms[ 3 ], "movedone" ); - self claw_link_arms( "claw_arm_y" ); -} - -claw_z_arms( z ) -{ - claw_unlink_arms( "claw_arm_z" ); - arms = []; - _a609 = self.arms; - _k609 = getFirstArrayKey( _a609 ); - while ( isDefined( _k609 ) ) - { - arm = _a609[ _k609 ]; - if ( arm.targetname == "claw_arm_z" ) - { - arms[ arms.size ] = arm; - arm movez( z, getDvarFloat( #"92CC26F1" ) ); - } - _k609 = getNextArrayKey( _a609, _k609 ); - } -/# - assert( arms.size == 4 ); -#/ - waittill_multiple_ents( arms[ 0 ], "movedone", arms[ 1 ], "movedone", arms[ 2 ], "movedone", arms[ 3 ], "movedone" ); - self claw_link_arms( "claw_arm_z" ); -} - -crate_drop_think( claw ) -{ - self endon( "claw_done" ); - claw thread claw_drop_think(); - corpse_delay = 0; - for ( ;; ) - { - wait 0,2; - entities = getdamageableentarray( self.origin, 200 ); - _a637 = entities; - _k637 = getFirstArrayKey( _a637 ); - while ( isDefined( _k637 ) ) - { - entity = _a637[ _k637 ]; - if ( !entity istouching( self.kill_trigger ) ) - { - } - else if ( isDefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" ) - { - entity maps/mp/_tacticalinsertion::destroy_tactical_insertion(); - } - else - { - if ( !isalive( entity ) ) - { - break; - } - else if ( isDefined( entity.targetname ) ) - { - if ( entity.targetname == "talon" ) - { - entity notify( "death" ); - break; - } - else if ( entity.targetname == "rcbomb" ) - { - entity maps/mp/killstreaks/_rcbomb::rcbomb_force_explode(); - break; - } - else if ( entity.targetname == "riotshield_mp" ) - { - entity dodamage( 1, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - break; - } - } - else if ( isDefined( entity.helitype ) && entity.helitype == "qrdrone" ) - { - watcher = entity.owner maps/mp/gametypes/_weaponobjects::getweaponobjectwatcher( "qrdrone" ); - watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate( entity, 0, undefined ); - break; - } - else - { - if ( entity.classname == "grenade" ) - { - if ( !isDefined( entity.name ) ) - { - break; - } - else if ( !isDefined( entity.owner ) ) - { - break; - } - else if ( entity.name == "proximity_grenade_mp" ) - { - watcher = entity.owner getwatcherforweapon( entity.name ); - watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate( entity, 0, undefined, "script_mover_mp" ); - break; - } - else if ( !isweaponequipment( entity.name ) ) - { - break; - } - else watcher = entity.owner getwatcherforweapon( entity.name ); - if ( !isDefined( watcher ) ) - { - break; - } - else watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate( entity, 0, undefined, "script_mover_mp" ); - break; - } - else if ( entity.classname == "auto_turret" ) - { - if ( !isDefined( entity.damagedtodeath ) || !entity.damagedtodeath ) - { - entity domaxdamage( self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - } - break; - } - else - { - entity dodamage( entity.health * 2, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - if ( isplayer( entity ) ) - { - claw thread claw_drop_pause(); - corpse_delay = getTime() + 3000; - } - } - } - } - _k637 = getNextArrayKey( _a637, _k637 ); - } - self destroy_supply_crates(); - if ( getTime() > corpse_delay ) - { - self destroy_corpses(); - } - if ( level.gametype == "ctf" ) - { - _a743 = level.flags; - _k743 = getFirstArrayKey( _a743 ); - while ( isDefined( _k743 ) ) - { - flag = _a743[ _k743 ]; - if ( flag.visuals[ 0 ] istouching( self.kill_trigger ) ) - { - flag maps/mp/gametypes/ctf::returnflag(); - } - _k743 = getNextArrayKey( _a743, _k743 ); - } - } - else if ( level.gametype == "sd" && !level.multibomb ) - { - if ( level.sdbomb.visuals[ 0 ] istouching( self.kill_trigger ) ) - { - level.sdbomb maps/mp/gametypes/_gameobjects::returnhome(); - } - } - } -} - -claw_drop_think() -{ - self endon( "claw_pause" ); - self waittill( "movedone" ); - self notify( "claw_movedone" ); -} - -claw_drop_pause() -{ - self notify( "claw_pause" ); - self endon( "claw_pause" ); - z_diff = abs( self.goal[ 2 ] - self.origin[ 2 ] ); - frac = z_diff / 318; - time = self.time * frac; - if ( time <= 0 ) - { - return; - } - self moveto( self.origin, 0,01 ); - wait 3; - self thread claw_drop_think(); - self moveto( self.goal, time ); -} - -destroy_supply_crates() -{ - crates = getentarray( "care_package", "script_noteworthy" ); - _a797 = crates; - _k797 = getFirstArrayKey( _a797 ); - while ( isDefined( _k797 ) ) - { - crate = _a797[ _k797 ]; - if ( distancesquared( crate.origin, self.origin ) < 40000 ) - { - if ( crate istouching( self ) ) - { - playfx( level._supply_drop_explosion_fx, crate.origin ); - playsoundatposition( "wpn_grenade_explode", crate.origin ); - wait 0,1; - crate maps/mp/killstreaks/_supplydrop::cratedelete(); - } - } - _k797 = getNextArrayKey( _a797, _k797 ); - } -} - -destroy_corpses() -{ - corpses = getcorpsearray(); - i = 0; - while ( i < corpses.size ) - { - if ( distancesquared( corpses[ i ].origin, self.origin ) < 40000 ) - { - corpses[ i ] delete(); - } - i++; - } -} - -getwatcherforweapon( weapname ) -{ - if ( !isDefined( self ) ) - { - return undefined; - } - if ( !isplayer( self ) ) - { - return undefined; - } - i = 0; - while ( i < self.weaponobjectwatcherarray.size ) - { - if ( self.weaponobjectwatcherarray[ i ].weapon != weapname ) - { - i++; - continue; - } - else - { - return self.weaponobjectwatcherarray[ i ]; - } - i++; - } - return undefined; -} diff --git a/Multiplayer Maps/mp_dockside/maps/mp/mp_dockside_fx.gsc b/Multiplayer Maps/mp_dockside/maps/mp/mp_dockside_fx.gsc deleted file mode 100644 index 19a8419..0000000 --- a/Multiplayer Maps/mp_dockside/maps/mp/mp_dockside_fx.gsc +++ /dev/null @@ -1,70 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); - -precache_util_fx() -{ -} - -precache_scripted_fx() -{ - level._effect[ "crane_spark" ] = loadfx( "maps/mp_maps/fx_mp_container_lrg_spark_runner" ); - level._effect[ "crane_dust" ] = loadfx( "maps/mp_maps/fx_mp_container_lrg_dust_kickup" ); - level._effect[ "water_splash" ] = loadfx( "bio/player/fx_player_water_splash_mp" ); -} - -precache_createfx_fx() -{ - level._effect[ "fx_light_flour_dbl_oval_street_wrm" ] = loadfx( "light/fx_light_flour_dbl_oval_street_wrm" ); - level._effect[ "fx_light_floodlight_sqr_wrm" ] = loadfx( "light/fx_light_floodlight_sqr_wrm" ); - level._effect[ "fx_light_floodlight_sqr_cool_xlg" ] = loadfx( "light/fx_light_floodlight_sqr_cool_xlg" ); - level._effect[ "fx_light_floodlight_rnd_cool_glw_add" ] = loadfx( "light/fx_light_floodlight_rnd_cool_glw_add" ); - level._effect[ "fx_light_floodlight_rnd_cool_glw" ] = loadfx( "light/fx_light_floodlight_rnd_cool_glw" ); - level._effect[ "fx_light_floodlight_rnd_cool_glw_dim" ] = loadfx( "light/fx_light_floodlight_rnd_cool_glw_dim" ); - level._effect[ "fx_light_floodlight_rnd_cool_glw_lg" ] = loadfx( "light/fx_light_floodlight_rnd_cool_glw_lg" ); - level._effect[ "fx_light_floodlight_rnd_red_md" ] = loadfx( "light/fx_light_floodlight_rnd_red_md" ); - level._effect[ "fx_la2_light_beacon_red_blink" ] = loadfx( "light/fx_light_beacon_red_blink_fst" ); - level._effect[ "fx_light_beacon_red_blink_sm" ] = loadfx( "light/fx_light_beacon_red_blink_fst_sm" ); - level._effect[ "fx_light_spotlight_sm_cool" ] = loadfx( "light/fx_light_spotlight_sm_cool" ); - level._effect[ "fx_light_spotlight_sm_yellow" ] = loadfx( "light/fx_light_spotlight_sm_yellow" ); - level._effect[ "fx_light_flour_glow_wrm_dbl_md" ] = loadfx( "light/fx_light_flour_glow_wrm_dbl_md" ); - level._effect[ "fx_light_floodlight_sqr_wrm_vista_lg" ] = loadfx( "light/fx_light_floodlight_sqr_wrm_vista_lg" ); - level._effect[ "fx_light_beacon_white_static" ] = loadfx( "light/fx_light_beacon_white_static" ); - level._effect[ "fx_light_beacon_green_static" ] = loadfx( "light/fx_light_beacon_green_static" ); - level._effect[ "fx_light_buoy_red_blink" ] = loadfx( "light/fx_light_buoy_red_blink" ); - level._effect[ "fx_light_flourescent_ceiling_panel" ] = loadfx( "light/fx_light_flourescent_ceiling_panel" ); - level._effect[ "fx_light_bridge_accent_vista" ] = loadfx( "light/fx_light_bridge_accent_vista" ); - level._effect[ "fx_light_container_yellow" ] = loadfx( "light/fx_light_container_yellow" ); - level._effect[ "fx_fog_lit_spotlight_cool_lg" ] = loadfx( "fog/fx_fog_lit_spotlight_cool_lg" ); - level._effect[ "fx_fog_lit_overhead_wrm_lg" ] = loadfx( "fog/fx_fog_lit_overhead_wrm_lg" ); - level._effect[ "fx_fog_lit_overhead_wrm_xlg" ] = loadfx( "fog/fx_fog_lit_overhead_wrm_xlg" ); - level._effect[ "fx_fog_street_cool_slw_sm_md" ] = loadfx( "fog/fx_fog_street_cool_slw_md" ); - level._effect[ "fx_fog_street_red_slw_md" ] = loadfx( "fog/fx_fog_street_red_slw_md" ); - level._effect[ "fx_fog_street_red_slw_md" ] = loadfx( "fog/fx_fog_street_red_slw_md" ); - level._effect[ "fx_paper_interior_short_slw_flat" ] = loadfx( "debris/fx_paper_interior_short_slw_flat" ); - level._effect[ "fx_mp_steam_pipe_md" ] = loadfx( "maps/mp_maps/fx_mp_steam_pipe_md" ); - level._effect[ "fx_mp_steam_pipe_roof_lg" ] = loadfx( "maps/mp_maps/fx_mp_steam_pipe_roof_lg" ); - level._effect[ "fx_mp_water_drip_light_long" ] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); - level._effect[ "fx_mp_water_drip_light_shrt" ] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_shrt" ); - level._effect[ "fx_lf_dockside_sun1" ] = loadfx( "lens_flares/fx_lf_dockside_sun1" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "buoy_fast" ] = %fxanim_gp_buoy_fast_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_01" ] = %fxanim_gp_seagull_circle_01_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_02" ] = %fxanim_gp_seagull_circle_02_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_03" ] = %fxanim_gp_seagull_circle_03_anim; - level.scr_anim[ "fxanim_props" ][ "roofvent_rotate" ] = %fxanim_gp_roofvent_anim; - level.scr_anim[ "fxanim_props" ][ "wire_coil_large" ] = %fxanim_gp_wire_coil_lrg_anim; - level.scr_anim[ "fxanim_props" ][ "crane_wires" ] = %fxanim_mp_dockside_crane_wires_anim; -} - -main() -{ - precache_util_fx(); - precache_createfx_fx(); - precache_scripted_fx(); - maps/mp/createfx/mp_dockside_fx::main(); - maps/mp/createart/mp_dockside_art::main(); -} diff --git a/Multiplayer Maps/mp_downhill/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_downhill/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_downhill/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_downhill/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_downhill/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_downhill/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_downhill/maps/mp/createfx/mp_downhill_fx.gsc b/Multiplayer Maps/mp_downhill/maps/mp/createfx/mp_downhill_fx.gsc deleted file mode 100644 index e7b2297..0000000 --- a/Multiplayer Maps/mp_downhill/maps/mp/createfx/mp_downhill_fx.gsc +++ /dev/null @@ -1,1210 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_fall_lrg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 133,375, -5,34215, 877,533 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_fall_lrg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1998,94, 2158,12, 1077,11 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_fall_lrg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -449,442, -2203,93, 700,03 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_fall_lrg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -426,364, 2274,74, 1349,82 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_fall_lrg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -223,697, 4703,82, 1933,47 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_fall_lrg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1936,73, -2114,57, 719,902 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_fall_lrg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4163,83, 123,975, 1025,13 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_downhill_sun1" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 867779, 561100, 331556 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 193,997, -136,364, 1051,86 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -478,055, 1074,51, 1160,29 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 454,421, 1651,06, 1191,99 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -325,464, -429,28, 1131,98 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -415,925, -1053, 1132,11 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -764,707, 140,646, 1177,78 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 435,931, -803,126, 1017,33 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -230,454, 1943,47, 1307,57 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 406,352, 2828,09, 1257,33 ); - ent.v[ "angles" ] = ( 357,96, 27,1585, 0,985233 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 923,453, -493,063, 864 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1141,63, 310,36, 872,932 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 849,591, 850,551, 969,446 ); - ent.v[ "angles" ] = ( 1,05687, 21,2262, 1,50624 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 386,753, 1344,88, 1040,31 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 551,468, 1845,34, 1076,4 ); - ent.v[ "angles" ] = ( 4,53429, 3,33529, 1,7347 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 15,1171, 1835,55, 1135,13 ); - ent.v[ "angles" ] = ( 346,543, 2,78417, 1,7781 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1616,47, 2052,04, 1076,67 ); - ent.v[ "angles" ] = ( 8,76031, 339,212, -0,675696 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1837,61, 1425,88, 955,218 ); - ent.v[ "angles" ] = ( 359,327, 321,144, 2,93372 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 49,3217, 1240,81, 1054,23 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -418,751, -1875,78, 998,104 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 139,027, -2070,9, 1000,7 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1354,87, -2409,72, 981,762 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 654,999, -1126,52, 919,776 ); - ent.v[ "angles" ] = ( 359,637, 332,169, 2,23605 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 923,692, 794,697, 1173,83 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 218,937, 2053,55, 1389,35 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1453,59, 1210,07, 1250,16 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 815,324, 2920,84, 1306,66 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1508,76, -1228,44, 979 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2464,62, 852,563, 1240,45 ); - ent.v[ "angles" ] = ( 1,63363, 271,221, 2,43436 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1980,06, 1025,63, 1099,67 ); - ent.v[ "angles" ] = ( 1,67585, 270,221, -2,59451 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2187,71, 1024,32, 1094,62 ); - ent.v[ "angles" ] = ( 0,827282, 269,15, 0,223167 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_sparkle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2202,12, 1306,39, 1128 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_sparkle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1856,86, 1328,48, 1102,72 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_sparkle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 638,644, 1888,75, 1252,77 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_sparkle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -16,2058, 1282,03, 1264,72 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_sparkle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -336,402, 933,058, 1242,15 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_sparkle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2154,45, -3084,66, 1329,49 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_sparkle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1559,57, -3149,43, 1357,83 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_sparkle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1669,24, -2420,26, 1125,03 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_sparkle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1937,83, -1923,31, 1172,31 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_sparkle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 746,937, 197,116, 1113,17 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_sparkle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 374,949, -54,9061, 1187,47 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_sparkle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -80,1495, 1741,7, 1496,77 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_sparkle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 436,211, 1352,59, 1214,04 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_sparkle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -452,059, 374,623, 1401,57 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 171,224, 2663,16, 1311,71 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1427,18, 1926,9, 1307,18 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1765,79, 848,236, 1240,48 ); - ent.v[ "angles" ] = ( 1,67585, 270,221, 2,40549 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1193,18, 1621,68, 1206,21 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1130,34, 1954,21, 1107,66 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2125,7, -1979,06, 1167,55 ); - ent.v[ "angles" ] = ( 1,67585, 270,221, 2,40549 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2226,35, -1740,68, 1073,91 ); - ent.v[ "angles" ] = ( 2,37483, 179,15, -1,71904 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 987,444, 1312,97, 1227,95 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_fog_vista_wide" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -5255,33, -977,547, 3438,55 ); - ent.v[ "angles" ] = ( 6,33399, 10,3685, 1,54754 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_fog_vista_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 38,2037, 6632,99, 3021,47 ); - ent.v[ "angles" ] = ( 359,872, 326,174, 2,2617 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_fog_vista_wide" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3369,01, -761,123, 281,148 ); - ent.v[ "angles" ] = ( 354,878, 9,98566, 4,46215 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_fog_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2936,15, 9999,98, 5087,96 ); - ent.v[ "angles" ] = ( 358,095, 20,155, 1,22655 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_fog_vista_wide" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4576,26, 3783,29, 3303,55 ); - ent.v[ "angles" ] = ( 358,31, 11,1532, 1,50948 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_fog_vista_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -631,043, -5101,02, 2196,66 ); - ent.v[ "angles" ] = ( 358,537, 3,15321, 1,72991 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_fog_vista_wide" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3965,18, -6361,25, 3574,31 ); - ent.v[ "angles" ] = ( 358,629, 0,153771, 1,80424 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_tree_trunk" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -323,432, 316,851, 1182,98 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -900,942, -411,588, 1109,9 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 511,839, -2223,83, 997,526 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 430,311, 2097,83, 1270,62 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -337,188, 2261,88, 1258,11 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1827,39, 2592,9, 1297,61 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2567,47, 741,202, 1254,07 ); - ent.v[ "angles" ] = ( 2,46154, 182,152, -1,59238 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2611,3, 396,492, 1287,17 ); - ent.v[ "angles" ] = ( 2,34448, 178,15, -1,76024 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2635,4, -652,197, 1262,17 ); - ent.v[ "angles" ] = ( 2,72011, 193,16, -1,09324 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 409,056, 55,5577, 1003,42 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_fall_lrg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 296,31, 515,057, 1134,22 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 356,211, -1761,38, 1068,6 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1216,24, -2442,25, 1166,56 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1511,44, -1629,14, 1093,09 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1309,88, 1535,08, 1060,65 ); - ent.v[ "angles" ] = ( 11,1797, 318,619, 2,30121 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 466,668, 460,941, 938,123 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_in" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1419,23, -364,171, 948,125 ); - ent.v[ "angles" ] = ( 358,661, 359,155, 1,82765 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_in" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1426,08, 6,67645, 948,125 ); - ent.v[ "angles" ] = ( 358,598, 1,15425, 1,77983 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_in" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -166,698, -1034,34, 1002,19 ); - ent.v[ "angles" ] = ( 359,37, 338,164, 0,186178 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_in" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 96,4079, 1006,08, 1063,36 ); - ent.v[ "angles" ] = ( 359,508, 313,163, 0,43495 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_in" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 885,626, 2832,35, 1120,04 ); - ent.v[ "angles" ] = ( 359,359, 342,164, 0,141807 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_in" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1891,53, 926,751, 980,125 ); - ent.v[ "angles" ] = ( 359,344, 357,165, 0 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 487,703, -1876,89, 985,229 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 834,764, -2235,15, 998,155 ); - ent.v[ "angles" ] = ( 359,143, 345,16, 2,09711 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1792,89, -1261,08, 979 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_in" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2130,1, 889,507, 980,125 ); - ent.v[ "angles" ] = ( 359,344, 357,165, 0 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1522,83, 1353,26, 957,942 ); - ent.v[ "angles" ] = ( 11,3082, 342,697, 2,54679 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 581,958, 2436,96, 1116,75 ); - ent.v[ "angles" ] = ( 4,19798, 312,177, -2,43931 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -78,6568, 2329,14, 1133,45 ); - ent.v[ "angles" ] = ( 2,64915, 39,3607, 4,06897 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -470,108, 679,654, 1047,88 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -622,366, 72,4226, 1041,11 ); - ent.v[ "angles" ] = ( 1,53569, 3,24449, 1,7299 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -368,044, -760,344, 1003 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -420,306, -1367,64, 1013,5 ); - ent.v[ "angles" ] = ( 357,758, 61,1823, -0,324509 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -182,288, -1756,27, 990,025 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -315,44, -2228,77, 1068,15 ); - ent.v[ "angles" ] = ( 0,577335, 308,187, 2,1906 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 940,706, 1,28605, 864 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 872,031, 2018,07, 1102,33 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 614,674, 1229,82, 999,067 ); - ent.v[ "angles" ] = ( 359,254, 342,162, 2,13906 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1010,95, -2726,94, 1080,63 ); - ent.v[ "angles" ] = ( 358,537, 3,15393, 1,72984 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1816,96, -2047, 963,769 ); - ent.v[ "angles" ] = ( 1,2465, 12,2182, 1,01012 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2177,3, -1551,91, 943,888 ); - ent.v[ "angles" ] = ( 358,014, 24,1571, 1,09067 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1025,07, -1006,48, 1043,29 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 706,18, -929,546, 1017,17 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 503,834, -486,672, 1038,16 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 521,162, 228,735, 999,126 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 302,551, 481,838, 1105,92 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 610,011, 792,877, 1097,72 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 863,729, 431,026, 1109,34 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 636,94, 1114,79, 1159,23 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -88,0855, 1460,74, 1230,48 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -634,428, 637,099, 1214,09 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -391,113, 463,396, 1147,96 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -886,303, 1,38922, 1125,59 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -544,257, -760,221, 1118,25 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1173,86, 1156,29, 1203,78 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1655,82, 1467,16, 1105,7 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2089,68, 1406, 1092,32 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1645,25, 968,65, 1126,79 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1323,78, 1287,47, 1124,46 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_cab" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1363,4, 2188,74, 1260,3 ); - ent.v[ "angles" ] = ( 356,538, 3,09346, 1,73243 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 276,732, 2380,02, 1369,72 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -354,282, 2148,51, 1467,1 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -381,992, 1274,87, 1299,48 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -708,297, -2091,71, 1181,89 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -596,686, -1194,15, 1164,64 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -157,242, 1030,1, 1117,93 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1059,42, 675,513, 1064,58 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1018,67, -746,573, 953,209 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1020,55, -1217,3, 889,763 ); - ent.v[ "angles" ] = ( 359,637, 332,169, 2,23605 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 693,863, -1551,61, 927,084 ); - ent.v[ "angles" ] = ( 3,73787, 47,2118, 0,542629 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 44,0911, -2411,15, 1039,43 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_fireplace" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1066,96, 2517,95, 1149,5 ); - ent.v[ "angles" ] = ( 0,133474, 251,257, -3,87103 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2312,39, 399,054, 1115,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2200,55, 399,141, 1115,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2096,03, 399,254, 1115,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1974,95, 399,414, 1115,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1851,77, 399,771, 1115,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1852,5, 463,5, 1115,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1974,82, 462,981, 1115,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2094,88, 462,975, 1115,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2200,66, 463,016, 1115,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2312,19, 462,762, 1115,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2303,93, -781,302, 1115,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2305,45, -904,668, 1115,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2192,33, -903,989, 1115,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2097,81, -883,571, 1115,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2011,76, -883,877, 1115,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2191,82, -781,484, 1115,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2089,85, -783,01, 1115,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2011,65, -782,511, 1115,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1978,49, -839,11, 1115,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 278,092, -1101,68, 1152,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 161,825, -1297,6, 1152,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 92,0782, -1476,99, 1152,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 443,609, -1333,61, 1152,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 488,087, -1220,59, 1152,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 368,551, -1172,89, 1152,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 326,685, -1277,27, 1152,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -116,315, -1391,98, 1152,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -43,9783, -1213,74, 1152,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 39,7999, -1005,56, 1152,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_fog_int_3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1790,77, -205,07, 948,125 ); - ent.v[ "angles" ] = ( 271,08, 262,778, 88,0555 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_fog_int_3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2177,36, -174,114, 948,125 ); - ent.v[ "angles" ] = ( 271,08, 262,776, 98,058 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_fog_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2101,41, -1221,15, 979 ); - ent.v[ "angles" ] = ( 271,08, 262,779, 148,055 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_fog_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2084,5, 658,438, 980,125 ); - ent.v[ "angles" ] = ( 271,08, 262,784, -26,9509 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_fog_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 408,348, -1251,89, 1001,13 ); - ent.v[ "angles" ] = ( 271,08, 262,817, -67,9835 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_fog_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 86,268, -1267,83, 1001,13 ); - ent.v[ "angles" ] = ( 271,08, 262,822, 85,0124 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_fog_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1143, 2586,38, 1121,13 ); - ent.v[ "angles" ] = ( 271,08, 262,821, 70,0133 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1508,71, 2249,91, 1238,1 ); - ent.v[ "angles" ] = ( 1,80913, 163,149, -2,30697 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1578,75, 2460,43, 1238,3 ); - ent.v[ "angles" ] = ( 1,80913, 163,149, -2,30697 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_fog_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 26,8042, 2451,76, 1157,3 ); - ent.v[ "angles" ] = ( 271,08, 262,781, 115,052 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_fog_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -322,301, 1087,85, 1053,43 ); - ent.v[ "angles" ] = ( 271,08, 262,781, 115,052 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_fog_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 777,519, -1280,39, 911,202 ); - ent.v[ "angles" ] = ( 271,08, 262,781, 115,052 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2625,78, -943,44, 1244,06 ); - ent.v[ "angles" ] = ( 2,72011, 193,16, -1,09324 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_sparkle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 398,75, -2443,2, 1290,53 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_sparkle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1069,39, -2753,15, 1235,67 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_sparkle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 848,941, -1354,51, 1104,33 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_sparkle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -278,664, -750,49, 1192 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_sparkle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -515,328, 191,997, 1231,45 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_sparkle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1777,41, 2059,88, 1267,29 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_sparkle" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -574,991, -226,423, 1215,86 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_fall_lrg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1149,09, -3494,59, 1048,33 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_fall_lrg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3808,74, -229,33, 491,322 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_fall_lrg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3410,68, -857,913, 666,425 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_fall_lrg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3118,8, 830,037, 739,166 ); - ent.v[ "angles" ] = ( 3,61633, 0,304357, 1,38836 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_chimney_smk" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 973,97, 2289,52, 1430,13 ); - ent.v[ "angles" ] = ( 3,84463, 346,276, 0,471081 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_chimney_smk" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 982,429, 2312,26, 1427,13 ); - ent.v[ "angles" ] = ( 3,83583, 347,279, 0,538205 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_cab" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1627,19, 2617,83, 1248,27 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1072,49, 1658,17, 1291,28 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_indoor_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1561,29, -1227,59, 980,125 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_indoor_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1866,9, 988,567, 986,784 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_in" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1646,47, -359,951, 948,125 ); - ent.v[ "angles" ] = ( 358,661, 359,155, 1,82765 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust_in" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1674,35, 11,2574, 948,125 ); - ent.v[ "angles" ] = ( 358,661, 359,155, 1,82765 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1406,38, -359,648, 908,236 ); - ent.v[ "angles" ] = ( 8,33318, 179,839, -1,27273 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1406,38, -239,787, 908,002 ); - ent.v[ "angles" ] = ( 8,33318, 179,839, -1,27273 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1406,38, -119,613, 908,238 ); - ent.v[ "angles" ] = ( 8,33318, 179,839, -1,27273 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1406,38, 0,412315, 907,838 ); - ent.v[ "angles" ] = ( 8,33318, 179,839, -1,27273 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1574,79, -180,783, 1119,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_gust_window" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 473,997, -1072,84, 1048,57 ); - ent.v[ "angles" ] = ( 0,218968, 245,166, 0,619146 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_gust_window" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1355,33, -175,545, 1037,8 ); - ent.v[ "angles" ] = ( 359,351, 3,16585, 0 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1678,3, -180,314, 1119,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2015,64, 264,619, 1180,21 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1888,97, 136,73, 1188,11 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2143,68, 136,317, 1188,13 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2272,55, 265,331, 1180,15 ); - ent.v[ "angles" ] = ( 89,8489, 208,295, 118,462 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1887,87, -566,393, 1184,05 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2143,85, -566,255, 1184,12 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2015,53, -439,599, 1192,13 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2270,44, -439,761, 1192,17 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_exhaust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 358,026, -1990,64, 1095,12 ); - ent.v[ "angles" ] = ( 321,283, 270,331, 175,143 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_tractor_lights_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 347,43, -1927,12, 1094,76 ); - ent.v[ "angles" ] = ( 2,22721, 83,0522, -85,0494 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2105,72, 710,106, 1111,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2042,17, 709,166, 1111,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2043, 616,468, 1111,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2105,56, 617,483, 1111,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1995,95, 813,341, 1099,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2239,02, 610,7, 1099,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1062,85, 2800,7, 1383,2 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_fog_vista_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3134,86, 5575,85, 1549,71 ); - ent.v[ "angles" ] = ( 359,637, 332,169, 2,23601 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1342,11, 2359,19, 1228,64 ); - ent.v[ "angles" ] = ( 24,6264, 348,684, -95,1904 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1109, 2435,82, 1228,51 ); - ent.v[ "angles" ] = ( 23,5964, 258,043, -86,9467 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1225,53, 2782,71, 1348,42 ); - ent.v[ "angles" ] = ( 23,7446, 76,4452, -89,157 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1241,31, 2637,99, 1354,94 ); - ent.v[ "angles" ] = ( 27,8118, 342,937, -91,1599 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1406,7, 2714,78, 1356,6 ); - ent.v[ "angles" ] = ( 19,8132, 343,109, -91,0903 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2139,45, 510,474, 1099,88 ); - ent.v[ "angles" ] = ( 89,8489, 208,281, 117,448 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1500,73, 1779,02, 1191,03 ); - ent.v[ "angles" ] = ( 358,537, 3,15394, 1,72984 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1140,7, -1375,47, 1073,94 ); - ent.v[ "angles" ] = ( 357,96, 27,1585, 0,985233 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_snow_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1233,53, -1472,97, 1194,58 ); - ent.v[ "angles" ] = ( 357,96, 27,1585, 0,985233 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_fog_vista_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 6996,67, -6729,04, 2128 ); - ent.v[ "angles" ] = ( 357,896, 31,1598, 0,840536 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_tractor_lights_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 337,479, -1925,65, 1094,93 ); - ent.v[ "angles" ] = ( 2,22721, 83,0522, -85,0494 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_tractor_lights_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 327,318, -1924,57, 1095,58 ); - ent.v[ "angles" ] = ( 2,22721, 83,0522, -87,0494 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_tractor_lights" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 303,17, -1912,78, 1029,25 ); - ent.v[ "angles" ] = ( 30,3378, 105,823, -79,3862 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_tractor_lights" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 363,658, -1920,33, 1024,77 ); - ent.v[ "angles" ] = ( 34,2894, 64,0893, -90,15 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_downhill_exhaust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 301,073, -1984,63, 1099,41 ); - ent.v[ "angles" ] = ( 321,283, 270,331, 175,143 ); - ent.v[ "delay" ] = -68; -} diff --git a/Multiplayer Maps/mp_downhill/maps/mp/mp_downhill.gsc b/Multiplayer Maps/mp_downhill/maps/mp/mp_downhill.gsc deleted file mode 100644 index 2b61c24..0000000 --- a/Multiplayer Maps/mp_downhill/maps/mp/mp_downhill.gsc +++ /dev/null @@ -1,52 +0,0 @@ -#include maps/mp/gametypes/_spawning; -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_downhill_fx::main(); - precachemodel( "collision_physics_64x64x64" ); - precachemodel( "collision_clip_32x32x32" ); - precachemodel( "collision_clip_64x64x64" ); - precachemodel( "collision_physics_cylinder_32x128" ); - precachemodel( "collision_missile_32x32x128" ); - precachemodel( "collision_clip_64x64x64" ); - maps/mp/_load::main(); - maps/mp/mp_downhill_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_downhill" ); - setdvar( "compassmaxrange", "2100" ); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - spawncollision( "collision_physics_64x64x64", "collider", ( 969,01, -2355,43, 1014,87 ), ( 2,23119, 12,5057, -9,9556 ) ); - spawncollision( "collision_physics_64x64x64", "collider", ( 954,068, -2352,16, 1001,08 ), ( 3,17067, 17,931, -9,69974 ) ); - spawncollision( "collision_physics_64x64x64", "collider", ( 942,933, -2359,71, 1031,9 ), ( 3,17067, 17,931, -9,69974 ) ); - spawncollision( "collision_physics_cylinder_32x128", "collider", ( 368, -1378, 1015 ), vectorScale( ( 0, 0, 0 ), 24,9 ) ); - spawncollision( "collision_clip_64x64x64", "collider", ( 1268,5, -2518, 1062 ), vectorScale( ( 0, 0, 0 ), 349 ) ); - spawncollision( "collision_clip_64x64x64", "collider", ( 1122,5, 583,5, 959,5 ), vectorScale( ( 0, 0, 0 ), 41,2 ) ); - spawncollision( "collision_clip_32x32x32", "collider", ( 1895, -1428,5, 948 ), ( 0, 0, 0 ) ); - spawncollision( "collision_missile_32x32x128", "collider", ( 2431,5, -174, 1209,5 ), ( 0, 318,4, 90 ) ); - spawncollision( "collision_clip_64x64x64", "collider", ( 318, 1509, 1105 ), ( 0, 34,4, 90 ) ); - precachemodel( "fxanim_mp_downhill_cable_car_mod" ); - maps/mp/gametypes/_spawning::level_use_unified_spawning( 1 ); - level.cablecarlightsfx = loadfx( "maps/mp_maps/fx_mp_downhill_cablecar_lights" ); - level thread maps/mp/mp_downhill_cablecar::main(); - level.remotemotarviewleft = 40; - level.remotemotarviewright = 40; - level.remotemotarviewup = 15; - level.remotemotarviewdown = 65; -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2600", reset_dvars ); -} diff --git a/Multiplayer Maps/mp_downhill/maps/mp/mp_downhill_amb.gsc b/Multiplayer Maps/mp_downhill/maps/mp/mp_downhill_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_downhill/maps/mp/mp_downhill_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_downhill/maps/mp/mp_downhill_cablecar.gsc b/Multiplayer Maps/mp_downhill/maps/mp/mp_downhill_cablecar.gsc deleted file mode 100644 index bfe5d16..0000000 --- a/Multiplayer Maps/mp_downhill/maps/mp/mp_downhill_cablecar.gsc +++ /dev/null @@ -1,791 +0,0 @@ -#include maps/mp/killstreaks/_supplydrop; -#include maps/mp/gametypes/_gameobjects; -#include maps/mp/gametypes/ctf; -#include maps/mp/gametypes/_weaponobjects; -#include maps/mp/killstreaks/_rcbomb; -#include maps/mp/_tacticalinsertion; -#include maps/mp/gametypes/_hostmigration; -#include maps/mp/_events; -#include maps/mp/killstreaks/_airsupport; -#include common_scripts/utility; -#include maps/mp/_utility; - -main() -{ - level.cablecartrack = []; - level.trackdistancestops = []; - level.distancetofirstrotate = 0; - precacheitem( "gondola_mp" ); - level.gondolasounds = []; - level.gondolasounds[ "tower_start" ] = "veh_cable_car_roller_cross"; - level.gondolasounds[ "rollers_start" ] = "veh_cable_car_start"; - level.gondolasounds[ "slow_down" ] = "veh_cable_car_stop"; - level.gondolaloopsounds = []; - level.gondolaloopsounds[ "start" ] = "veh_cable_car_move_loop"; - level.gondolaloopsounds[ "rollers_start" ] = "veh_cable_car_move_loop"; - level.gondolaloopsounds[ "rollers_end" ] = ""; - tracklength = createcablecarpath(); -/# - assert( level.trackdistancestops.size == 2 ); -#/ - if ( level.trackdistancestops.size == 2 ) - { - velocity = getdvarfloatdefault( "scr_cable_car_velocity", 100 ); - bottomoftracklength = level.trackdistancestops[ 1 ] - level.trackdistancestops[ 0 ]; - topoftracklength = tracklength - bottomoftracklength; -/# - assert( topoftracklength < bottomoftracklength ); -#/ - extratrackrequired = bottomoftracklength - topoftracklength; - extratimerequired = extratrackrequired / velocity; - level.cablecartrack[ level.cablecartrack.size - 1 ].movetime = extratimerequired; - level.cablecartrack[ level.cablecartrack.size - 1 ].rotate = 1; - tracklength = bottomoftracklength * 2; - } - else - { - return; - } - cablecars = getentarray( "cablecar", "targetname" ); - cablecarkilltrigger = getentarray( "cable_car_kill_trigger", "targetname" ); -/# - assert( isDefined( cablecars ) ); -#/ -/# - assert( isDefined( cablecarkilltrigger ) ); -#/ - level.cablecardefaultangle = cablecars[ 0 ].angles; - distancebetweencars = tracklength / cablecars.size; - if ( getgametypesetting( "allowMapScripting" ) ) - { - currentdistanceforcar = 0; - } - else - { - currentdistanceforcar = distancebetweencars * 0,8; - } - i = 0; - while ( i < cablecars.size ) - { - cablecar = cablecars[ i ]; - cablecar thread waitthenplayfx( 0,1, level.cablecarlightsfx, "tag_origin" ); - cablecar.killtrigger = getclosest( cablecar.origin, cablecarkilltrigger ); -/# - assert( isDefined( cablecar.killtrigger ) ); -#/ - cablecar.killtrigger enablelinkto(); - cablecar.killtrigger linkto( cablecar ); - cablecar setpointontrack( currentdistanceforcar, tracklength ); - currentdistanceforcar += distancebetweencars; -/# - debug_star( cablecar.origin, 120000, ( 0, 0, 1 ) ); -#/ - grip = spawn( "script_model", cablecar.origin ); - if ( cablecar.nextnodeindex >= ( level.cablecartrack.size - 1 ) ) - { - grip.angles = vectorToAngle( level.cablecartrack[ cablecar.nextnodeindex - 1 ].origin - level.cablecartrack[ cablecar.nextnodeindex ].origin ); - } - else - { - if ( is_true( level.cablecartrack[ cablecar.nextnodeindex ].pause ) ) - { - carnode = level.cablecartrack[ cablecar.nextnodeindex + 2 ]; - } - else - { - carnode = level.cablecartrack[ cablecar.nextnodeindex ]; - } - grip.angles = vectorToAngle( carnode.origin - cablecar.origin ); - } - grip.origin -= ( 0, cos( grip.angles[ 1 ] ) * -12, 8 ); - grip setmodel( "dh_cable_car_top_piece" ); - cablecar.grip = grip; - if ( getgametypesetting( "allowMapScripting" ) ) - { - level thread cablecarrun( cablecar ); - i++; - continue; - } - else - { - cablecar.origin += ( 0, cos( cablecar.angles[ 1 ] ) * -15, -66,6 ); - cablecar disconnectpaths(); - } - i++; - } -} - -waitthenplayfx( time, fxnum, tag ) -{ - self endon( "death" ); - wait time; - for ( ;; ) - { - playfxontag( fxnum, self, tag ); - level waittill( "host_migration_end" ); - } -} - -setpointontrack( distancealongtrack, tracklength ) -{ - pointontrack = level.cablecartrack[ 0 ].origin; - while ( distancealongtrack > tracklength ) - { - distancealongtrack = tracklength * -1; - } - remainingdistance = distancealongtrack; - i = 0; - while ( i < level.cablecartrack.size ) - { - cablecartracknode = level.cablecartrack[ i ]; - currentnodeisstop = is_true( cablecartracknode.pause ); - if ( currentnodeisstop ) - { - velocity = getdvarfloatdefault( "scr_cable_car_velocity", 100 ); - remainingdistance -= 3 * velocity; - if ( remainingdistance <= 0 ) - { - pointontrack = cablecartracknode.origin; - self.nextnodeindex = i; - self.needtopauseatstart = remainingdistance / velocity; - break; - } - } - else nextnodeisstop = 0; - if ( level.cablecartrack.size > ( i + 1 ) ) - { - nextnodeisstop = is_true( level.cablecartrack[ i + 1 ].pause ); - } - currentnodeisstop = 0; - if ( is_true( cablecartracknode.pause ) ) - { - currentnodeisstop = 1; - } - distance = cablecartracknode.stepdistance; - if ( nextnodeisstop || currentnodeisstop ) - { - distance *= 2; - } - if ( !isDefined( distance ) ) - { - pointontrack = cablecartracknode.origin; - self.nextnodeindex = i; - break; - } - else if ( remainingdistance < distance ) - { - if ( distance > 0 ) - { - ratio = remainingdistance / distance; - pointontrack = getpointonline( cablecartracknode.origin, level.cablecartrack[ i + 1 ].origin, ratio ); - } - self.nextnodeindex = i; - break; - } - else - { - remainingdistance -= distance; - i++; - } - } - self.angles = level.cablecardefaultangle; - if ( distancealongtrack < level.distancetofirstrotate ) - { - self.angles += vectorScale( ( 0, 0, 1 ), 180 ); - } - self.origin = pointontrack; -} - -createcablecarpath( cablecar ) -{ - currentnode = getent( "cable_down_start", "targetname" ); - startorigin = currentnode.origin; - velocity = getdvarfloatdefault( "scr_cable_car_velocity", 100 ); - tracklength = 0; - previousnode = undefined; - movetime = -1; - while ( isDefined( currentnode ) ) - { - cablecarnodestruct = spawnstruct(); - cablecarnodestruct.origin = currentnode.origin; - level.cablecartrack[ level.cablecartrack.size ] = cablecarnodestruct; - if ( isDefined( currentnode.target ) ) - { - nextnode = getent( currentnode.target, "targetname" ); - } - if ( !isDefined( nextnode ) ) - { - break; - } - else - { - stepdistance = distance( currentnode.origin, nextnode.origin ); - cablecarnodestruct.stepdistance = stepdistance; - movetime = stepdistance / velocity; -/# - assert( movetime > 0 ); -#/ - pauseratio = 1; - if ( isDefined( nextnode.script_noteworthy ) && nextnode.script_noteworthy == "stop" ) - { - pauseratio *= 2; - } - if ( isDefined( currentnode.script_noteworthy ) ) - { - if ( currentnode.script_noteworthy == "stop" ) - { - cablecarnodestruct.pause = 1; - tracklength += velocity * 3; - level.trackdistancestops[ level.trackdistancestops.size ] = tracklength; - pauseratio *= 2; - break; - } - else if ( currentnode.script_noteworthy == "rotate" ) - { - cablecarnodestruct.rotate = 1; - break; - } - else if ( currentnode.script_noteworthy == "forceorigin" ) - { - cablecarnodestruct.forceorigin = 1; - break; - } - else - { - if ( isDefined( level.gondolasounds[ currentnode.script_noteworthy ] ) ) - { - cablecarnodestruct.playsound = level.gondolasounds[ currentnode.script_noteworthy ]; - } - if ( isDefined( level.gondolaloopsounds[ currentnode.script_noteworthy ] ) ) - { - cablecarnodestruct.playloopsound = level.gondolaloopsounds[ currentnode.script_noteworthy ]; - } - } - } - tracklength += stepdistance * pauseratio; - if ( is_true( cablecarnodestruct.rotate ) ) - { - level.distancetofirstrotate = tracklength; - } - cablecarnodestruct.movetime = movetime; - previousnode = currentnode; - currentnode = nextnode; - nextnode = undefined; - } - } - return tracklength; -} - -watchpronetouch() -{ - for ( ;; ) - { - self waittill( "touch", entity ); - if ( isplayer( entity ) ) - { - if ( entity.origin[ 2 ] < 940 ) - { - if ( entity getstance() == "prone" ) - { - entity dodamage( entity.health * 2, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_HIT_BY_OBJECT", 0, "gondola_mp" ); - } - } - } - } -} - -cablecarrun( cablecar ) -{ - nextnodeindex = cablecar.nextnodeindex; - cablecar thread watchpronetouch(); - cablecar thread cablecar_move_think( cablecar.killtrigger, 1 ); - cablecar thread cablecar_ai_watch(); - cablecar.ismoving = 1; - grip = cablecar.grip; - firstmove = 1; - cablecar.hidden = 0; - grip.forceangles = 0; - if ( isDefined( cablecar.needtopauseatstart ) ) - { - if ( cablecar.needtopauseatstart > 0 ) - { - wait cablecar.needtopauseatstart; - } - } - for ( ;; ) - { - i = nextnodeindex; - while ( i < level.cablecartrack.size ) - { - nextnode = level.cablecartrack[ i + 1 ]; - if ( !isDefined( nextnode ) ) - { - nextnode = level.cablecartrack[ 0 ]; - } - currentnode = level.cablecartrack[ i ]; - acceltime = 0; - deceltime = 0; - currentmovetime = currentnode.movetime; - if ( isDefined( nextnode.pause ) || isDefined( currentnode ) && isDefined( currentnode.pause ) ) - { - currentmovetime *= 2; - if ( isDefined( nextnode.pause ) ) - { - deceltime = currentmovetime - 0,1; - } - if ( isDefined( currentnode ) && isDefined( currentnode.pause ) ) - { - acceltime = currentmovetime - 0,1; - } - } -/# - debug_star( nextnode.origin, ( 0, 0, 1 ), 1000 ); -#/ - if ( isDefined( currentnode ) ) - { - if ( isDefined( currentnode.playsound ) ) - { - cablecar playsound( currentnode.playsound ); - } - if ( isDefined( currentnode.playloopsound ) ) - { - cablecar stoploopsound(); - cablecar playsound( "veh_cable_car_leave" ); - if ( currentnode.playloopsound != "" ) - { - cablecar playloopsound( currentnode.playloopsound ); - } - } - } - if ( isDefined( currentnode.rotate ) ) - { - cablecar hide(); - grip hide(); - cablecar.hidden = 1; - cablecar.origin += vectorScale( ( 0, 0, 1 ), 1000 ); - if ( cablecar.angles[ 1 ] > 360 ) - { - cablecar.angles -= vectorScale( ( 0, 0, 1 ), 180 ); - break; - } - else - { - cablecar.angles += vectorScale( ( 0, 0, 1 ), 180 ); - } - } - if ( isDefined( currentnode ) && isDefined( nextnode ) ) - { - angles = vectorToAngle( currentnode.origin - nextnode.origin ); - grip.nextangles = angles; - if ( grip.forceangles == 1 ) - { - grip.forceangles = 0; - grip.angles = grip.nextangles; - break; - } - else - { - grip rotateto( grip.nextangles, 0,9 ); - } - } - if ( firstmove == 1 ) - { - firstmovedistance = distance( cablecar.origin, nextnode.origin ); - velocity = getdvarfloatdefault( "scr_cable_car_velocity", 100 ); - timetomove = firstmovedistance / velocity; - if ( timetomove > 0 ) - { - cablecar moveto( nextnode.origin + ( 0, cos( cablecar.angles[ 1 ] ) * -15, -66,6 ), timetomove ); - grip moveto( nextnode.origin - ( 0, cos( cablecar.angles[ 1 ] ) * -12, 8 ), timetomove ); - wait timetomove; - } - } - else - { - heightoffset = -66,6; - if ( is_true( cablecar.hidden ) ) - { - heightoffset += -1000; - } - if ( deceltime > 0 ) - { - cablecar thread prettyslowdown( currentmovetime - deceltime ); - } - grip thread hostmigrationawaremoveto( nextnode.origin - ( 0, cos( cablecar.angles[ 1 ] ) * -12, 8 ), currentmovetime, acceltime, deceltime, currentmovetime - 0,05 ); - cablecar hostmigrationawaremoveto( nextnode.origin + ( 0, cos( cablecar.angles[ 1 ] ) * -15, heightoffset ), currentmovetime, acceltime, deceltime, currentmovetime - 0,05 ); - } - if ( cablecar.hidden == 1 ) - { - cablecar.hidden = 0; - if ( is_true( cablecar.hidden ) ) - { - cablecar.origin -= vectorScale( ( 0, 0, 1 ), 1000 ); - } - cablecar show(); - grip show(); - grip.forceangles = 1; - } - firstmove = 0; - if ( isDefined( nextnode.pause ) ) - { - cablecar.ismoving = 0; - grip thread hostmigrationawaremoveto( nextnode.origin - ( 0, cos( cablecar.angles[ 1 ] ) * -12, 8 ), 300, 0, 0, 3 ); - cablecar hostmigrationawaremoveto( nextnode.origin + ( 0, cos( cablecar.angles[ 1 ] ) * -15, -66,6 ), 300, 0, 0, 3 ); - cablecar notify( "started_moving" ); - cablecar thread prettyspeedup(); - cablecar.ismoving = 1; - } - if ( isDefined( nextnode.forceorigin ) ) - { - cablecar.origin = nextnode.origin + ( 0, cos( cablecar.angles[ 1 ] ) * -15, -66,6 ); - grip.origin = nextnode.origin - ( 0, cos( cablecar.angles[ 1 ] ) * -12, 8 ); - } - i++; - } - nextnodeindex = 0; - } -} - -hostmigrationawaremoveto( origin, movetime, acceltime, deceltime, waittime ) -{ - starttime = getTime(); - self moveto( origin, movetime, acceltime, deceltime ); - waitcompleted = self waitendonmigration( waittime ); - if ( !isDefined( waitcompleted ) ) - { - endtime = getTime(); - maps/mp/gametypes/_hostmigration::waittillhostmigrationdone(); - mstimedifference = ( starttime + ( waittime * 1000 ) ) - endtime; - if ( mstimedifference > 500 ) - { - wait ( mstimedifference / 1000 ); - } - } -} - -waitendonmigration( time ) -{ - level endon( "host_migration_begin" ); - wait time; - return 1; -} - -prettyslowdown( waittime ) -{ - if ( waittime > 0 ) - { - wait waittime; - } - self stoploopsound(); - self playsound( level.gondolasounds[ "slow_down" ] ); - originalangle = self.angles; - swingtime = getdvarfloatdefault( "scr_cable_swing_time", 1,5 ); - swingbacktime = getdvarfloatdefault( "scr_cable_swing_back_time", 1,5 ); - swingangle = getdvarfloatdefault( "scr_cable_swing_angle", 2 ); - self rotateto( ( originalangle[ 0 ] + swingangle, originalangle[ 1 ], originalangle[ 2 ] ), swingtime, swingtime / 2, swingtime / 2 ); - self waittill( "rotatedone" ); - self rotateto( ( originalangle[ 0 ], originalangle[ 1 ], originalangle[ 2 ] ), swingbacktime, swingbacktime / 2, swingbacktime / 2 ); - self waittill( "rotatedone" ); -} - -prettyspeedup() -{ - self stoploopsound(); - self playsound( level.gondolasounds[ "rollers_start" ] ); - self playloopsound( level.gondolaloopsounds[ "start" ] ); - originalangle = self.angles; - swingtime = getdvarfloatdefault( "scr_cable_swing_time_up", 1 ); - swingbacktime = getdvarfloatdefault( "scr_cable_swing_back_time_up", 1,5 ); - swingangle = getdvarfloatdefault( "scr_cable_swing_angle_up", 2 ); - self rotateto( ( originalangle[ 0 ] - swingangle, originalangle[ 1 ], originalangle[ 2 ] ), swingtime, swingtime / 2, swingtime / 2 ); - self waittill( "rotatedone" ); - self rotateto( ( originalangle[ 0 ], originalangle[ 1 ], originalangle[ 2 ] ), swingbacktime, swingbacktime / 2, swingbacktime / 2 ); - self waittill( "rotatedone" ); -} - -cablecar_ai_watch() -{ - self endon( "death" ); - self endon( "delete" ); - for ( ;; ) - { - wait 1; - while ( isDefined( self.nodes ) ) - { - i = 0; - while ( i < self.nodes.size ) - { - node = self.nodes[ i ]; - _a574 = level.teams; - _k574 = getFirstArrayKey( _a574 ); - while ( isDefined( _k574 ) ) - { - team = _a574[ _k574 ]; - node setdangerous( team, 0 ); - _k574 = getNextArrayKey( _a574, _k574 ); - } - i++; - } - } - dir = vectornormalize( anglesToForward( self.angles ) ); - dangerorigin = self.origin - ( dir * 196 ); - nodes = getnodesinradius( dangerorigin, 256, 0, 196 ); - i = 0; - while ( i < nodes.size ) - { - node = nodes[ i ]; - _a587 = level.teams; - _k587 = getFirstArrayKey( _a587 ); - while ( isDefined( _k587 ) ) - { - team = _a587[ _k587 ]; - node setdangerous( team, 1 ); - _k587 = getNextArrayKey( _a587, _k587 ); - } - i++; - } - if ( nodes.size > 0 ) - { - self.nodes = nodes; - continue; - } - else - { - self.nodes = undefined; - } - } -} - -cablecar_move_think( kill_trigger, checkmoving ) -{ - self endon( "death" ); - self endon( "delete" ); - self.disablefinalkillcam = 1; - destroycorpses = 0; - for ( ;; ) - { - wait 0,05; - pixbeginevent( "cablecar_move_think" ); - if ( checkmoving ) - { - if ( self.ismoving == 0 ) - { - self waittill( "started_moving" ); - } - } - entities = getdamageableentarray( self.origin, 200 ); - _a626 = entities; - _k626 = getFirstArrayKey( _a626 ); - while ( isDefined( _k626 ) ) - { - entity = _a626[ _k626 ]; - if ( isDefined( entity.targetname ) && entity.targetname == "cablecar" ) - { - } - else - { - if ( !entity istouching( kill_trigger ) ) - { - break; - } - else if ( isDefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" ) - { - entity maps/mp/_tacticalinsertion::destroy_tactical_insertion(); - break; - } - else - { - if ( !isalive( entity ) ) - { - break; - } - else if ( isDefined( entity.targetname ) ) - { - if ( entity.targetname == "talon" ) - { - entity notify( "death" ); - break; - } - else if ( entity.targetname == "rcbomb" ) - { - entity maps/mp/killstreaks/_rcbomb::rcbomb_force_explode(); - break; - } - else if ( entity.targetname == "riotshield_mp" ) - { - entity dodamage( 1, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_HIT_BY_OBJECT", 0, "gondola_mp" ); - break; - } - } - else if ( isDefined( entity.helitype ) && entity.helitype == "qrdrone" ) - { - watcher = entity.owner maps/mp/gametypes/_weaponobjects::getweaponobjectwatcher( "qrdrone" ); - watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate( entity, 0, undefined ); - break; - } - else - { - if ( entity.classname == "grenade" ) - { - if ( !isDefined( entity.name ) ) - { - break; - } - else if ( !isDefined( entity.owner ) ) - { - break; - } - else if ( entity.name == "proximity_grenade_mp" ) - { - watcher = entity.owner getwatcherforweapon( entity.name ); - watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate( entity, 0, undefined, "script_mover_mp" ); - break; - } - else if ( !isweaponequipment( entity.name ) ) - { - break; - } - else watcher = entity.owner getwatcherforweapon( entity.name ); - if ( !isDefined( watcher ) ) - { - break; - } - else watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate( entity, 0, undefined, "script_mover_mp" ); - break; - } - else if ( entity.classname == "remote_drone" ) - { - break; - } - else if ( entity.classname == "auto_turret" ) - { - if ( isDefined( entity.carried ) && entity.carried == 1 ) - { - break; - } - else - { - if ( !isDefined( entity.damagedtodeath ) || !entity.damagedtodeath ) - { - entity domaxdamage( self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - } - break; - } - else - { - if ( isplayer( entity ) ) - { - if ( entity getstance() == "prone" ) - { - if ( entity isonground() == 0 ) - { - destroycorpses = 1; - } - } - entity dodamage( entity.health * 2, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_HIT_BY_OBJECT", 0, "gondola_mp" ); - break; - } - else - { - entity dodamage( entity.health * 2, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - } - } - } - } - } - } - _k626 = getNextArrayKey( _a626, _k626 ); - } - if ( destroycorpses == 1 ) - { - destroycorpses = 0; - self destroy_corpses(); - } - self destroy_supply_crates(); - if ( level.gametype == "ctf" ) - { - _a755 = level.flags; - _k755 = getFirstArrayKey( _a755 ); - while ( isDefined( _k755 ) ) - { - flag = _a755[ _k755 ]; - if ( flag.curorigin != flag.trigger.baseorigin && flag.visuals[ 0 ] istouching( kill_trigger ) ) - { - flag maps/mp/gametypes/ctf::returnflag(); - } - _k755 = getNextArrayKey( _a755, _k755 ); - } - } - else if ( level.gametype == "sd" && !level.multibomb ) - { - if ( level.sdbomb.visuals[ 0 ] istouching( kill_trigger ) ) - { - level.sdbomb maps/mp/gametypes/_gameobjects::returnhome(); - } - } - pixendevent(); - } -} - -getwatcherforweapon( weapname ) -{ - if ( !isDefined( self ) ) - { - return undefined; - } - if ( !isplayer( self ) ) - { - return undefined; - } - i = 0; - while ( i < self.weaponobjectwatcherarray.size ) - { - if ( self.weaponobjectwatcherarray[ i ].weapon != weapname ) - { - i++; - continue; - } - else - { - return self.weaponobjectwatcherarray[ i ]; - } - i++; - } - return undefined; -} - -destroy_supply_crates() -{ - crates = getentarray( "care_package", "script_noteworthy" ); - _a807 = crates; - _k807 = getFirstArrayKey( _a807 ); - while ( isDefined( _k807 ) ) - { - crate = _a807[ _k807 ]; - if ( distancesquared( crate.origin, self.origin ) < 40000 ) - { - if ( crate istouching( self ) ) - { - playfx( level._supply_drop_explosion_fx, crate.origin ); - playsoundatposition( "wpn_grenade_explode", crate.origin ); - wait 0,1; - crate maps/mp/killstreaks/_supplydrop::cratedelete(); - } - } - _k807 = getNextArrayKey( _a807, _k807 ); - } -} - -destroy_corpses() -{ - corpses = getcorpsearray(); - i = 0; - while ( i < corpses.size ) - { - if ( distancesquared( corpses[ i ].origin, self.origin ) < 40000 ) - { - corpses[ i ] delete(); - } - i++; - } -} diff --git a/Multiplayer Maps/mp_downhill/maps/mp/mp_downhill_fx.gsc b/Multiplayer Maps/mp_downhill/maps/mp/mp_downhill_fx.gsc deleted file mode 100644 index 63a6ac9..0000000 --- a/Multiplayer Maps/mp_downhill/maps/mp/mp_downhill_fx.gsc +++ /dev/null @@ -1,54 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); - -main() -{ - precache_fxanim_props(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_downhill_fx::main(); -} - -precache_scripted_fx() -{ -} - -precache_createfx_fx() -{ - level._effect[ "fx_lf_mp_downhill_sun1" ] = loadfx( "lens_flares/fx_lf_mp_downhill_sun1" ); - level._effect[ "fx_mp_downhill_snow_fall_lrg" ] = loadfx( "maps/mp_maps/fx_mp_downhill_snow_fall_lrg" ); - level._effect[ "fx_mp_downhill_snow_indoor_lg" ] = loadfx( "maps/mp_maps/fx_mp_downhill_snow_indoor_lg" ); - level._effect[ "fx_mp_downhill_snow_gust" ] = loadfx( "maps/mp_maps/fx_mp_downhill_snow_gust" ); - level._effect[ "fx_mp_downhill_snow_gust_floor" ] = loadfx( "maps/mp_maps/fx_mp_downhill_snow_gust_floor" ); - level._effect[ "fx_mp_downhill_snow_gust_cab" ] = loadfx( "maps/mp_maps/fx_mp_downhill_snow_gust_cab" ); - level._effect[ "fx_mp_downhill_snow_gust_in" ] = loadfx( "maps/mp_maps/fx_mp_downhill_snow_gust_in" ); - level._effect[ "fx_mp_downhill_snow_tree" ] = loadfx( "maps/mp_maps/fx_mp_downhill_snow_tree" ); - level._effect[ "fx_mp_downhill_snow_tree_trunk" ] = loadfx( "maps/mp_maps/fx_mp_downhill_snow_tree_trunk" ); - level._effect[ "fx_mp_downhill_water_drips" ] = loadfx( "maps/mp_maps/fx_mp_downhill_water_drips" ); - level._effect[ "fx_mp_downhill_sparkle" ] = loadfx( "maps/mp_maps/fx_mp_downhill_sparkle" ); - level._effect[ "fx_mp_downhill_fog_vista" ] = loadfx( "maps/mp_maps/fx_mp_downhill_fog_vista" ); - level._effect[ "fx_mp_downhill_fog_vista_wide" ] = loadfx( "maps/mp_maps/fx_mp_downhill_fog_vista_wide" ); - level._effect[ "fx_mp_downhill_fog_vista_light" ] = loadfx( "maps/mp_maps/fx_mp_downhill_fog_vista_light" ); - level._effect[ "fx_mp_downhill_fireplace" ] = loadfx( "maps/mp_maps/fx_mp_downhill_fireplace" ); - level._effect[ "fx_mp_downhill_light_sml" ] = loadfx( "maps/mp_maps/fx_mp_downhill_light_sml" ); - level._effect[ "fx_mp_downhill_fog_int" ] = loadfx( "maps/mp_maps/fx_mp_downhill_fog_int" ); - level._effect[ "fx_mp_downhill_fog_int_3" ] = loadfx( "maps/mp_maps/fx_mp_downhill_fog_int_3" ); - level._effect[ "fx_mp_downhill_chimney_smk" ] = loadfx( "maps/mp_maps/fx_mp_downhill_chimney_smk" ); - level._effect[ "fx_mp_downhill_light_lg" ] = loadfx( "maps/mp_maps/fx_mp_downhill_light_lg" ); - level._effect[ "fx_mp_downhill_gust_window" ] = loadfx( "maps/mp_maps/fx_mp_downhill_gust_window" ); - level._effect[ "fx_mp_downhill_exhaust" ] = loadfx( "maps/mp_maps/fx_mp_downhill_exhaust" ); - level._effect[ "fx_mp_downhill_tractor_lights" ] = loadfx( "maps/mp_maps/fx_mp_downhill_tractor_lights" ); - level._effect[ "fx_mp_downhill_tractor_lights_sm" ] = loadfx( "maps/mp_maps/fx_mp_downhill_tractor_lights_sm" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "wirespark_med" ] = %fxanim_gp_wirespark_med_anim; - level.scr_anim[ "fxanim_props" ][ "teardrop_flag" ] = %fxanim_gp_teardrop_flag_loop_anim; - level.scr_anim[ "fxanim_props" ][ "windsock" ] = %fxanim_gp_windsock_anim; - level.scr_anim[ "fxanim_props" ][ "quad_chair" ] = %viewmodel_fxanim_mp_downhill_quad_chair_loop_anim; - level.scr_anim[ "fxanim_props" ][ "xmas_lights" ] = %fxanim_gp_xmas_lights_anim; - level.scr_anim[ "fxanim_props" ][ "standing_skiis" ] = %fxanim_mp_downhill_standing_skiis_loop_anim; - level.scr_anim[ "fxanim_props" ][ "standing_skiis_02" ] = %fxanim_mp_downhill_standing_skiis_loop_02_anim; -} diff --git a/Multiplayer Maps/mp_drone/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_drone/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_drone/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_drone/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_drone/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_drone/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_drone/maps/mp/createart/mp_drone_art.gsc b/Multiplayer Maps/mp_drone/maps/mp/createart/mp_drone_art.gsc deleted file mode 100644 index d8fc802..0000000 --- a/Multiplayer Maps/mp_drone/maps/mp/createart/mp_drone_art.gsc +++ /dev/null @@ -1,25 +0,0 @@ - -main() -{ - level.tweakfile = 1; - setdvar( "scr_fog_exp_halfplane", "3759.28" ); - setdvar( "scr_fog_exp_halfheight", "243.735" ); - setdvar( "scr_fog_nearplane", "601.593" ); - setdvar( "scr_fog_red", "0.806694" ); - setdvar( "scr_fog_green", "0.962521" ); - setdvar( "scr_fog_blue", "0.9624" ); - setdvar( "scr_fog_baseheight", "-475.268" ); - setdvar( "visionstore_glowTweakEnable", "0" ); - setdvar( "visionstore_glowTweakRadius0", "5" ); - setdvar( "visionstore_glowTweakRadius1", "" ); - setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); - setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); - setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); - setdvar( "visionstore_glowTweakBloomIntensity1", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); - visionsetnaked( "mp_drone", 1 ); - setdvar( "r_lightGridEnableTweaks", 1 ); - setdvar( "r_lightGridIntensity", 1 ); - setdvar( "r_lightGridContrast", 0 ); -} diff --git a/Multiplayer Maps/mp_drone/maps/mp/createfx/mp_drone_fx.gsc b/Multiplayer Maps/mp_drone/maps/mp/createfx/mp_drone_fx.gsc deleted file mode 100644 index b38a12f..0000000 --- a/Multiplayer Maps/mp_drone/maps/mp/createfx/mp_drone_fx.gsc +++ /dev/null @@ -1,2375 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); - ent.v[ "origin" ] = ( 936,438, -2,6611, 660,016 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); - ent.v[ "origin" ] = ( 1576,16, 1062,87, 566,274 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); - ent.v[ "origin" ] = ( 1364,58, 3231,84, 876,975 ); - ent.v[ "angles" ] = ( 298, 270, 80 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); - ent.v[ "origin" ] = ( 1264,63, 2234,28, 626,041 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); - ent.v[ "origin" ] = ( -75,2249, 2832,58, 732,129 ); - ent.v[ "angles" ] = ( 277,7, 320,203, 41,0979 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_hvac_steam_md" ); - ent.v[ "origin" ] = ( -120,827, 314,976, 77 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam" ); - ent.v[ "origin" ] = ( -1748,31, 492,452, 590,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 4 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam" ); - ent.v[ "origin" ] = ( -1722,62, 300,426, 590,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 4 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam" ); - ent.v[ "origin" ] = ( -1707,88, 81,193, 588,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 4 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam" ); - ent.v[ "origin" ] = ( -1719,61, -114,235, 586,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 4 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( -621,085, -811,156, 247,628 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 200,984, -825,445, 95,0018 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( -88,0372, -1140,5, 105 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_hvac_steam_md" ); - ent.v[ "origin" ] = ( -124,628, 215,759, 76 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_hvac_steam_md" ); - ent.v[ "origin" ] = ( -1378,86, -1845,46, 364,596 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_hvac_steam_md" ); - ent.v[ "origin" ] = ( 238,365, 2005,43, 452,125 ); - ent.v[ "angles" ] = ( 2, 179,964, 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = 14,33; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 1167,35, 2885,71, 356,443 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 1026,42, 2757,99, 287,41 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 892,973, 3020,42, 374,985 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 331,855, 2952,62, 398,803 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -439,986, 2903,38, 375,882 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 272 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -212,347, 2820,35, 375,646 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 168,041, 2807,25, 384,028 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -99,0851, 2545,89, 219,093 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 786,317, 2626,1, 287,2 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 1086,38, 2456,84, 311,791 ); - ent.v[ "angles" ] = ( 288, 270, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 1404,22, 1679,23, 100,893 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 1366,4, 1275,45, 98,609 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 1069,28, 1100,08, 95,3746 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 1443,34, 952,134, 84,514 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 1084,44, 621,997, 107,667 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 837,47, -215,239, 89,8274 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 628,449, -326,045, 69,42 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 984,61, 962,721, 106,203 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 671,179, 1676,49, 168,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 292,574, 2176,81, 227,701 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 43,5211, 2115,94, 187,833 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 162,877, -824,592, -39,9999 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( -40,4221, -974,386, -40 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 942,157, 3179,8, 354,051 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 1216,36, 2985,81, 316,41 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 165,524, 2936,85, 341,609 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 1135,3, 1214,31, 52,6228 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 269,25, -641,443, -46 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( -69,4102, -1219,08, -40 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( -255,296, -1518,57, -9,75282 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 273,049, 1495,92, 115,005 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( -688,697, -592,297, -31,4556 ); - ent.v[ "angles" ] = ( 273,163, 341,584, 18,4425 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -281,909, 1533,35, 161,491 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 329,743, 1481,06, 168,389 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -267,701, 1124,94, 180,258 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -660,08, -1691,72, 84,4303 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -352,785, -1541,7, 59,1158 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( -389,985, -1061,99, 16,625 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( -369,875, 465,705, 212,526 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 54,4449, -871,147, 102 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_dockside_sun1" ); - ent.v[ "origin" ] = ( -30123,6, -97927,8, 52705,6 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_md" ); - ent.v[ "origin" ] = ( 810,467, 2996,84, 404,111 ); - ent.v[ "angles" ] = ( 88, 270, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_md" ); - ent.v[ "origin" ] = ( 1474,57, 1323,38, 169,253 ); - ent.v[ "angles" ] = ( 74,8702, 277,421, -82,3157 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_md" ); - ent.v[ "origin" ] = ( -581,299, 2614,92, 231,156 ); - ent.v[ "angles" ] = ( 16,9291, 335,75, 90,2583 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -1159,65, -1199,87, 98,8739 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 1012,18, 3264,64, 379,602 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 1137,33, 3388,99, 379,152 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_md" ); - ent.v[ "origin" ] = ( 929,839, -179,398, 100,186 ); - ent.v[ "angles" ] = ( 74,8702, 277,421, -82,3157 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 856,788, 2333,85, 259,687 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -709,457, 2393,01, 222,766 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -537,272, 2158,15, 201,425 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( -203,026, 1234,09, 201,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( -193,172, 1392,02, 203,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -188,745, 2184,17, 170,27 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( -2465,88, -1493,51, 80,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( -1933,92, -1983,78, 65 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( -1253,42, -1430,2, 78,2332 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_md" ); - ent.v[ "origin" ] = ( -1021,39, -2169,52, 78 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 1208,59, 3181,33, 656,054 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 1357,76, 3469,78, 856,617 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 918,708, 3521,55, 537 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 1157,79, 2436,14, 567,6 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 94,9131, 910,115, 240,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 91 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_sm" ); - ent.v[ "origin" ] = ( -110,435, -1027,16, 20 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_cool_ground" ); - ent.v[ "origin" ] = ( -679,49, -381,524, 73,5888 ); - ent.v[ "angles" ] = ( 22,3234, 296,509, 96,2364 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_cool_ground" ); - ent.v[ "origin" ] = ( 986,019, 3510,31, 299,076 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 751,287, 235,978, 66,7407 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 595,931, 458,623, 70,6824 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_cool_ground" ); - ent.v[ "origin" ] = ( 258,914, -420,17, 87 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_md" ); - ent.v[ "origin" ] = ( 1359,69, 2254,33, 274,057 ); - ent.v[ "angles" ] = ( 88, 270, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_cool_slw_md" ); - ent.v[ "origin" ] = ( -501,592, 1924,29, 167,25 ); - ent.v[ "angles" ] = ( 14,5458, 37,6824, -93,0128 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 112,923, -930,589, 14,5377 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -62,7229, -1036,85, 15 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 183,942, -798,378, -5,9982 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_sm" ); - ent.v[ "origin" ] = ( -63,2585, -1040,96, 7 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_red_button_flash" ); - ent.v[ "origin" ] = ( -1066,95, -717,465, 304,065 ); - ent.v[ "angles" ] = ( 90, 344,864, 74,8637 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud" ); - ent.v[ "origin" ] = ( 1038,51, 5096,17, 535,6 ); - ent.v[ "angles" ] = ( 358,797, 165,491, -4,97454 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud" ); - ent.v[ "origin" ] = ( 2895,63, 2452,31, 1249,44 ); - ent.v[ "angles" ] = ( 355,147, 101,372, -18,0588 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud" ); - ent.v[ "origin" ] = ( 2750,27, 433,283, 1075,13 ); - ent.v[ "angles" ] = ( 2,69095, 78,7488, -11,2181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud" ); - ent.v[ "origin" ] = ( -379,52, 4019,43, 832,58 ); - ent.v[ "angles" ] = ( 359,91, 180,661, -35,2304 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_drone" ); - ent.v[ "origin" ] = ( 985,224, 3013,91, 307,517 ); - ent.v[ "angles" ] = ( 314,223, 207,013, 164,712 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_drone" ); - ent.v[ "origin" ] = ( -267,905, 2599,46, 211,263 ); - ent.v[ "angles" ] = ( 327,889, 225,861, 151,596 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_cool_ground" ); - ent.v[ "origin" ] = ( 182,228, -202,018, 98,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_cool_ground" ); - ent.v[ "origin" ] = ( 47,9025, -1660,82, 190 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light" ); - ent.v[ "origin" ] = ( 296,229, -584,168, 116,212 ); - ent.v[ "angles" ] = ( 18, 90, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_02" ); - ent.v[ "origin" ] = ( 795,571, -1035,49, 406,993 ); - ent.v[ "angles" ] = ( 90, 22,5361, 112,536 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -951,827, 1111,64, 312,742 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -455,056, -407,494, 240,668 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -363,63, 59,9479, 211,875 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -170,645, 694,161, 409,218 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( -8,12653, 2556,85, 170,687 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 1027,93, 2150,25, 210,548 ); - ent.v[ "angles" ] = ( 270, 8,74616, -76,7461 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 1463,13, 1383,41, 105,641 ); - ent.v[ "angles" ] = ( 270, 8,74616, -76,7461 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 1531,32, 969,233, 165,095 ); - ent.v[ "angles" ] = ( 270, 8,74616, -76,7461 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 1399,83, 737,859, 80,812 ); - ent.v[ "angles" ] = ( 270, 8,74616, -76,7461 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 998,477, 1466, 60,3866 ); - ent.v[ "angles" ] = ( 270, 8,74616, -76,7461 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 917,195, -300,343, 45,699 ); - ent.v[ "angles" ] = ( 270, 8,74616, -76,7461 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( -144,907, 1110,06, 113 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = 15; - ent = maps/mp/_utility::createoneshoteffect( "fx_blue_light_flash" ); - ent.v[ "origin" ] = ( -410,128, -1378,22, 246,225 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_blue_light_flash" ); - ent.v[ "origin" ] = ( -445,276, -1340,9, 246,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_blue_light_flash" ); - ent.v[ "origin" ] = ( -446,794, -910,811, 246,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_hvac_steam_md" ); - ent.v[ "origin" ] = ( -88,3861, -569,169, 164 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_hvac_steam_md" ); - ent.v[ "origin" ] = ( -241,005, -572,039, 162 ); - ent.v[ "angles" ] = ( 270, 317,82, 42,1801 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud" ); - ent.v[ "origin" ] = ( 2626,25, -915,518, 1098,13 ); - ent.v[ "angles" ] = ( 353,326, 77,7307, -10,7992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud" ); - ent.v[ "origin" ] = ( -2009,5, 3711,1, 1273,66 ); - ent.v[ "angles" ] = ( 345,806, 236,473, -33,1638 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_hvac_steam_md" ); - ent.v[ "origin" ] = ( 455,961, 1432,85, 180,481 ); - ent.v[ "angles" ] = ( 360, 180, 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_drone_interior_steam" ); - ent.v[ "origin" ] = ( 743,509, -1106,1, 406,125 ); - ent.v[ "angles" ] = ( 44, 90, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_drone_interior_steam" ); - ent.v[ "origin" ] = ( 983,192, -1113,26, 409,282 ); - ent.v[ "angles" ] = ( 25, 90, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 312,372, -1045,85, 255,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -117,875, 926,303, 445,15 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 135,226, 934,289, 382,872 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 127,912, 1358,65, 433,532 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 196,399, 1405,13, 289,44 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 543, 1489,62, 242,926 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 715,455, 1488,13, 245,379 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 180,354, 821,355, 256,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -120,999, 908,161, 239,458 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 295,524, -543,985, 381,949 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 1250,25, 2990,51, 717,439 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 541,356, 2930,26, 658,93 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 388,62, 2946,18, 642,458 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -1141,79, -805,362, 407,125 ); - ent.v[ "angles" ] = ( 271, 270,034, 1,96582 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -1872,27, -1062,45, 288,726 ); - ent.v[ "angles" ] = ( 271, 270,034, 1,96582 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -2351,54, -1041,53, 386,588 ); - ent.v[ "angles" ] = ( 271, 270,034, 1,96582 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 173,628, -1099,77, 352,573 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -1453,68, -1649,88, 288,301 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -186,552, -1384,11, 200,671 ); - ent.v[ "angles" ] = ( 271, 270,034, 1,96582 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -872,114, 1368,8, 312,82 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -873,069, 1111,28, 312,606 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_sm" ); - ent.v[ "origin" ] = ( -962,185, 1381,91, 210,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_sm" ); - ent.v[ "origin" ] = ( -869,748, 1384,6, 214,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_sm" ); - ent.v[ "origin" ] = ( -881,925, 1199,53, 211,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_drone_interior_steam" ); - ent.v[ "origin" ] = ( -909,713, 1295,16, 322,125 ); - ent.v[ "angles" ] = ( 81,2173, 10,8219, -163,631 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1089,45, 856,28, 242,851 ); - ent.v[ "angles" ] = ( 90, 335,053, 63,0534 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1077,15, 855,461, 242,899 ); - ent.v[ "angles" ] = ( 90, 335,053, 63,0534 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1091,1, 932,185, 243,851 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1075,83, 933,024, 243,899 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1216,03, 934,751, 243,851 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1201,85, 934,303, 243,899 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1215,18, 853,927, 242,851 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1201,5, 852,116, 242,899 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1472,5, 853,894, 242,851 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1459,25, 853,221, 242,899 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1472,84, 933,865, 243,851 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1460,58, 933,391, 243,899 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_drone_interior_steam" ); - ent.v[ "origin" ] = ( -1255,09, 891,965, 254,875 ); - ent.v[ "angles" ] = ( 84,7532, 287,105, -160,732 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_pc_panel_heli" ); - ent.v[ "origin" ] = ( -106,876, -963,107, 291,72 ); - ent.v[ "angles" ] = ( 270, 2,663, -59,663 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_pc_panel_heli" ); - ent.v[ "origin" ] = ( -99,8857, -953,949, 292,839 ); - ent.v[ "angles" ] = ( 0,982226, 314, 0,190924 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_red_light_flash" ); - ent.v[ "origin" ] = ( -68,1748, -998,306, 315,877 ); - ent.v[ "angles" ] = ( 292, 311, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_red_light_flash" ); - ent.v[ "origin" ] = ( -102,632, -958,564, 267,823 ); - ent.v[ "angles" ] = ( 70,9676, 127,919, -2,06949 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_pc_panel_heli" ); - ent.v[ "origin" ] = ( -211,357, -915,039, 271,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_pc_panel_heli" ); - ent.v[ "origin" ] = ( -171,842, -915,727, 271,106 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_pc_panel_heli" ); - ent.v[ "origin" ] = ( -1341,07, 1494,98, 223,68 ); - ent.v[ "angles" ] = ( 0, 90, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_sm" ); - ent.v[ "origin" ] = ( -1450,12, 934,889, 197,89 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_sm" ); - ent.v[ "origin" ] = ( -1445,62, 854,937, 199,464 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -588,447, 363,689, 334,125 ); - ent.v[ "angles" ] = ( 358, 270, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -577,538, 98,5362, 337,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_pipe_md" ); - ent.v[ "origin" ] = ( 514,313, 1737,05, 183,941 ); - ent.v[ "angles" ] = ( 356,237, 354,329, 13,1112 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_pc_panel_heli" ); - ent.v[ "origin" ] = ( 840,379, 931,497, 199,505 ); - ent.v[ "angles" ] = ( 90, 5,37647, -84,6235 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_pc_panel_heli" ); - ent.v[ "origin" ] = ( 840,094, 986,568, 163,298 ); - ent.v[ "angles" ] = ( 90, 5,37647, -84,6235 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_pc_panel_heli" ); - ent.v[ "origin" ] = ( 840,274, 872,125, 163,532 ); - ent.v[ "angles" ] = ( 90, 5,37647, -84,6235 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_pc_panel_heli" ); - ent.v[ "origin" ] = ( 840,347, 909,422, 138,801 ); - ent.v[ "angles" ] = ( 90, 5,37647, -84,6235 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_pc_panel_heli" ); - ent.v[ "origin" ] = ( 840,692, 1018,43, 155,828 ); - ent.v[ "angles" ] = ( 90, 5,37647, -84,6235 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_pc_panel_heli" ); - ent.v[ "origin" ] = ( 504,147, 854,314, 203,839 ); - ent.v[ "angles" ] = ( 360, 270, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_pc_panel_heli" ); - ent.v[ "origin" ] = ( 503,59, 915,612, 165,927 ); - ent.v[ "angles" ] = ( 90, 303,785, 33,7846 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_pc_panel_heli" ); - ent.v[ "origin" ] = ( 503,256, 993,559, 139,897 ); - ent.v[ "angles" ] = ( 90, 303,785, 33,7846 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_pc_panel_heli" ); - ent.v[ "origin" ] = ( 503,976, 825,379, 163,447 ); - ent.v[ "angles" ] = ( 90, 303,785, 33,7846 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_pc_panel_heli" ); - ent.v[ "origin" ] = ( 503,579, 1027,38, 165,556 ); - ent.v[ "angles" ] = ( 90, 303,785, 33,7846 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "origin" ] = ( -144,882, -976,606, 55,1214 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "origin" ] = ( -72,7487, -790,111, 55,6851 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "origin" ] = ( 93,5639, -1032,85, 55,4228 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "origin" ] = ( 81,6291, -716,454, 54,9085 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 135 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); - ent.v[ "origin" ] = ( 8445,78, 958,823, 2149,85 ); - ent.v[ "angles" ] = ( 352,952, 114,495, -4,16587 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); - ent.v[ "origin" ] = ( 1254,54, -14270,6, 2243,52 ); - ent.v[ "angles" ] = ( 2,85125, 355,893, -2,20701 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud" ); - ent.v[ "origin" ] = ( -881,677, -5322,52, 988,223 ); - ent.v[ "angles" ] = ( 354,9, 350,148, 6,12797 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud" ); - ent.v[ "origin" ] = ( -442,949, -4356,99, 181,056 ); - ent.v[ "angles" ] = ( 359,137, 357,637, 5,97365 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); - ent.v[ "origin" ] = ( -3719,41, -6052,14, 2,67401 ); - ent.v[ "angles" ] = ( 1,07069, 320,916, -3,44259 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); - ent.v[ "origin" ] = ( -13253,2, -3694,15, 686,953 ); - ent.v[ "angles" ] = ( 357,698, 264,004, -2,77475 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); - ent.v[ "origin" ] = ( 6668,92, -2797,05, 1506,1 ); - ent.v[ "angles" ] = ( 351,784, 73,6003, -14,7163 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); - ent.v[ "origin" ] = ( 5876,86, 4782,68, 2355,99 ); - ent.v[ "angles" ] = ( 359,409, 143,109, -24,2684 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); - ent.v[ "origin" ] = ( -2045,8, 9335,17, 2539,13 ); - ent.v[ "angles" ] = ( 358,641, 176,831, -20,9591 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); - ent.v[ "origin" ] = ( -5789,17, -5598,86, -163,943 ); - ent.v[ "angles" ] = ( 359,208, 290,973, -3,51671 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); - ent.v[ "origin" ] = ( 4655,55, -7769,33, 430,5 ); - ent.v[ "angles" ] = ( 0,337525, 53,9827, -9,32073 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 129,424, 258,73, 237,501 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 315,32, -230,312, 243,753 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 204,931, -400,728, 365,862 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); - ent.v[ "origin" ] = ( 1978,2, -7432,89, 80,51 ); - ent.v[ "angles" ] = ( 0,337525, 53,9827, -9,32073 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); - ent.v[ "origin" ] = ( -5377,6, 8554,05, 2315 ); - ent.v[ "angles" ] = ( 1,00764, 230,546, -14,7827 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); - ent.v[ "origin" ] = ( -3235,45, -9347,85, 639,106 ); - ent.v[ "angles" ] = ( 2,85125, 355,893, -2,20701 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( -661,517, -2184,93, 187,236 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( -456,644, -1950,35, 235,93 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); - ent.v[ "origin" ] = ( -726,787, 372,143, 433,015 ); - ent.v[ "angles" ] = ( 90, 359,66, -0,340199 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); - ent.v[ "origin" ] = ( -597,895, 429,579, 433,998 ); - ent.v[ "angles" ] = ( 88, 359,998, 179,998 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); - ent.v[ "origin" ] = ( -854,533, 372,085, 433,992 ); - ent.v[ "angles" ] = ( 90, 359,66, -0,340199 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); - ent.v[ "origin" ] = ( -983,071, 368,003, 433,001 ); - ent.v[ "angles" ] = ( 90, 359,66, -0,340199 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); - ent.v[ "origin" ] = ( -984,857, -49,7102, 431,508 ); - ent.v[ "angles" ] = ( 90, 359,66, -0,340199 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); - ent.v[ "origin" ] = ( -856,609, -50,5221, 432,502 ); - ent.v[ "angles" ] = ( 90, 359,66, -0,340199 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); - ent.v[ "origin" ] = ( -728,253, -48,6357, 432,504 ); - ent.v[ "angles" ] = ( 90, 359,66, -0,340199 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); - ent.v[ "origin" ] = ( -599,712, -48,5372, 432,5 ); - ent.v[ "angles" ] = ( 90, 359,66, -0,340199 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( -830,456, 194,635, 184,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( -1132,19, 194,944, 96,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( -1180,67, 894,292, 106,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( -911,741, 1768,21, 138,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( -1271,18, 1419,71, 158,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_hvac_steam_md" ); - ent.v[ "origin" ] = ( 219,151, 616,294, 374,517 ); - ent.v[ "angles" ] = ( 2, 179,964, 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = 14,33; - ent = maps/mp/_utility::createoneshoteffect( "fx_blue_light_flash" ); - ent.v[ "origin" ] = ( -915,636, -386,854, 419,125 ); - ent.v[ "angles" ] = ( 360, 180, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_blue_light_flash" ); - ent.v[ "origin" ] = ( -915,21, -463,176, 417,926 ); - ent.v[ "angles" ] = ( 360, 180, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_blue_light_flash" ); - ent.v[ "origin" ] = ( -788,358, -463,829, 418,928 ); - ent.v[ "angles" ] = ( 359, 0, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_blue_light_flash" ); - ent.v[ "origin" ] = ( -786,844, -385,015, 418,922 ); - ent.v[ "angles" ] = ( 359, 0, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_drone_interior_steam" ); - ent.v[ "origin" ] = ( -791,683, -424,114, 436,875 ); - ent.v[ "angles" ] = ( 331,01, 355,552, 175,795 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_blue_light_flash" ); - ent.v[ "origin" ] = ( -2962,86, -168,376, 239,125 ); - ent.v[ "angles" ] = ( 90, 3,96799, -176,032 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_blue_light_flash" ); - ent.v[ "origin" ] = ( -2894,13, 611,254, 236,125 ); - ent.v[ "angles" ] = ( 90, 3,96799, -176,032 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_yellow" ); - ent.v[ "origin" ] = ( -547,259, 803,78, 417,681 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_yellow" ); - ent.v[ "origin" ] = ( -668,379, 808,104, 417,668 ); - ent.v[ "angles" ] = ( 90, 351,756, 171,756 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_yellow" ); - ent.v[ "origin" ] = ( -786,674, 804,643, 417,754 ); - ent.v[ "angles" ] = ( 90, 351,756, 171,756 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_yellow" ); - ent.v[ "origin" ] = ( -908,996, 803,995, 417,771 ); - ent.v[ "angles" ] = ( 90, 351,756, 171,756 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); - ent.v[ "origin" ] = ( 1987,28, 7081,2, 1214,18 ); - ent.v[ "angles" ] = ( 355,425, 167,348, -18,467 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -43,3369, -784,125, 1,99582 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -884,958, 1674,59, 259,69 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -454,995, -953,707, 197,141 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -450,125, -1215,63, 203,761 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -117,876, 661,942, 444,521 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 165,658, 1396,33, 420,678 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -40,1639, 935,789, 241,837 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -451,895, -527,453, 243,232 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); - ent.v[ "origin" ] = ( 454,881, 2830,52, 771,77 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); - ent.v[ "origin" ] = ( 1400,95, 2056,99, 598,402 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); - ent.v[ "origin" ] = ( 841,906, 1,72622, 676,081 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_falling_mangrove_lg_dark" ); - ent.v[ "origin" ] = ( 689,201, 3590,49, 1074,97 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 135,99, 3,5803, 245,314 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -1254,88, -1838,53, 287,22 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -1254,88, -2109,35, 286,939 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -677,85, -838,797, 196,603 ); - ent.v[ "angles" ] = ( 271, 270,034, 1,96582 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 574,721, -537,327, 351,63 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 889,648, -473,876, 369,575 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 550,125, 182,958, 245,884 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 503,078, -104,937, 250,466 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 506,105, -374,441, 251,652 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 664,315, 717,955, 370,84 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 271 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( -46,5185, -998,717, 96,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( -60,7794, -1226,01, 103,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -904,953, 1599,53, 205,125 ); - ent.v[ "angles" ] = ( 359,582, 275,986, 3,97881 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -906,186, 906,694, 158,125 ); - ent.v[ "angles" ] = ( 0,864256, 183,097, -1,57232 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -1301,26, -549,577, 154,125 ); - ent.v[ "angles" ] = ( 4, 181,003, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -1866, -902,506, 181,125 ); - ent.v[ "angles" ] = ( 4,03909, 90,7342, -3,59119 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -559,245, 964,368, 331,125 ); - ent.v[ "angles" ] = ( 359,582, 275,986, 3,97881 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -930,002, 933,654, 327,125 ); - ent.v[ "angles" ] = ( 359,582, 275,986, 3,97881 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -623,971, -438,744, 330,125 ); - ent.v[ "angles" ] = ( 0,990275, 183,995, 0,278846 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1021,67, -1041,28, 306,125 ); - ent.v[ "angles" ] = ( 0,995139, 177,004, -0,209229 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 236,535, -1049,11, 294,125 ); - ent.v[ "angles" ] = ( 2,02093, 5,97057, -0,418091 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 755,44, -795,417, 311,125 ); - ent.v[ "angles" ] = ( 3,99512, 176,993, -0,209707 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 561,06, 1463,5, 173,125 ); - ent.v[ "angles" ] = ( 2,30191, 295,197, 2,55832 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -621,524, 1863,79, 189,25 ); - ent.v[ "angles" ] = ( 0,682676, 202,968, -0,43804 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -1470,28, 877,346, 136,125 ); - ent.v[ "angles" ] = ( 1,6415, 268,119, 0,72425 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -1459,77, -488,147, 131,125 ); - ent.v[ "angles" ] = ( 358,358, 88,1195, -0,724284 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_ring_console_runner" ); - ent.v[ "origin" ] = ( 730,148, -801,732, 275,307 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_ring_console_runner" ); - ent.v[ "origin" ] = ( 723,6, -751,447, 275,971 ); - ent.v[ "angles" ] = ( 270, 1,02303, 168,977 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -6; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_drone" ); - ent.v[ "origin" ] = ( 593,267, 2985,65, 282,35 ); - ent.v[ "angles" ] = ( 314,223, 207,013, 164,712 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "origin" ] = ( -2461,5, -2325,44, 1363,93 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "origin" ] = ( -2413,14, -2325,3, 1075,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "origin" ] = ( -2993,38, -2327,89, 1075,99 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "origin" ] = ( -2940,83, -2321,29, 1366,18 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -687,439, -1392,45, 92,4524 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -873,388, -1569,18, 107,33 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -1024,86, -1229,66, 83,407 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); - ent.v[ "origin" ] = ( -6284,61, 10620,2, 4105,17 ); - ent.v[ "angles" ] = ( 1,00764, 230,546, -14,7827 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); - ent.v[ "origin" ] = ( 3107,53, 12415,2, 3433,09 ); - ent.v[ "angles" ] = ( 359,361, 176,513, -17,9065 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "origin" ] = ( -2713,62, -481,406, 2158,91 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_blue_light_flash" ); - ent.v[ "origin" ] = ( 184,522, -943,573, 465,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "origin" ] = ( -2681,76, -513,98, 1659,86 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "origin" ] = ( -2686,94, -5971,79, 1159,37 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "origin" ] = ( -3254,8, -5969,08, 1155 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "origin" ] = ( -3204,28, -5968,16, 1441,38 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "origin" ] = ( -2734,42, -5971,58, 1441,93 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_red_button_flash" ); - ent.v[ "origin" ] = ( -1022,9, 720,225, 300,173 ); - ent.v[ "angles" ] = ( 359, 180, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_ring_console_runner" ); - ent.v[ "origin" ] = ( -1019,7, 700,575, 301,161 ); - ent.v[ "angles" ] = ( 270, 359,851, 0,149435 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -7; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 125,875, 237,939, 239,24 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_wall_water_ground" ); - ent.v[ "origin" ] = ( -163,926, 958,558, 114,726 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_wall_water_ground" ); - ent.v[ "origin" ] = ( -163,704, 639,642, 113,797 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_wall_water_ground" ); - ent.v[ "origin" ] = ( -766,908, -786,082, -23,6831 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_wall_water_ground" ); - ent.v[ "origin" ] = ( 202,334, -494,846, -29,897 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_hvac_steam_md" ); - ent.v[ "origin" ] = ( -2016,27, -1050,73, 67 ); - ent.v[ "angles" ] = ( 326, 267, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -978,614, -625,191, 410,046 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -949,153, -625,427, 410,878 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1007,35, -624,938, 410,85 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -853,005, -625,187, 410,836 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -823,602, -625,134, 410,999 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -881,906, -624,554, 410,861 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( -721,986, -322,659, 448,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( -600,388, -321,699, 448,389 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( -597,396, -516,086, 448,429 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( -723,185, -516,122, 448,441 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( -983,077, -321,208, 448,474 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( -981,561, -515,324, 448,466 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_wall_water_ground" ); - ent.v[ "origin" ] = ( 954,967, 759,387, 59,0158 ); - ent.v[ "angles" ] = ( 275, 0, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 1154,67, -239,638, 267,525 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 963,38, 116,635, 173,138 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 496,346, 2737,08, 298,94 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 456,052, 2205,88, 185,731 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 1121,3, 2751,93, 294,687 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( -1488,9, -1596,99, 112 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 861,716, 932,432, 328,489 ); - ent.v[ "angles" ] = ( 4, 178,997, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 611,028, 795,51, 158,806 ); - ent.v[ "angles" ] = ( 358,633, 70,045, -3,75949 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -59,5565, -1193,75, 25,8188 ); - ent.v[ "angles" ] = ( 0, 90,9979, -4 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "origin" ] = ( -3755,95, -9603,46, 1571,11 ); - ent.v[ "angles" ] = ( 270, 0,421275, 1,57871 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "origin" ] = ( -3286,26, -9590,47, 1571,66 ); - ent.v[ "angles" ] = ( 270, 0,421275, 1,57871 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "origin" ] = ( -3238,8, -9589,03, 1289,1 ); - ent.v[ "angles" ] = ( 270, 0,421275, 1,57871 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "origin" ] = ( -3806,41, -9606,13, 1284,73 ); - ent.v[ "angles" ] = ( 270, 0,421275, 1,57871 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -389,543, -968,941, 45,43 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -409,87, -1192,24, 77,6814 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "origin" ] = ( -2915,85, 582,787, 256,524 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "origin" ] = ( -2960,76, -135,903, 259,909 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_drone2" ); - ent.v[ "origin" ] = ( -1477,26, 440,517, 89,4437 ); - ent.v[ "angles" ] = ( 308, 270, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -872,236, 1241,7, 312,473 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -951,889, 1242,73, 313,431 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -953,056, 1368,28, 312,412 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -951,243, 1496,61, 312,439 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -951,362, 1624,56, 313,447 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -872,966, 1496,88, 312,52 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -872,338, 1624,35, 312,54 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_pc_panel_heli" ); - ent.v[ "origin" ] = ( -1340,84, 1479,48, 163,788 ); - ent.v[ "angles" ] = ( 270, 309,768, -39,768 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_pc_panel_heli" ); - ent.v[ "origin" ] = ( -1007,96, 1308,56, 169,669 ); - ent.v[ "angles" ] = ( 0, 90, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_ring_console_runner" ); - ent.v[ "origin" ] = ( -1020,76, 667,062, 301,169 ); - ent.v[ "angles" ] = ( 270, 0,255783, -177,256 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_red_button_flash" ); - ent.v[ "origin" ] = ( -1016,96, 669,05, 300,371 ); - ent.v[ "angles" ] = ( 0, 179, -89,8826 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam" ); - ent.v[ "origin" ] = ( -1822,66, -1035,77, 353,86 ); - ent.v[ "angles" ] = ( 353,017, 265,97, 0,490713 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam" ); - ent.v[ "origin" ] = ( -1929,89, -1022,11, 359,408 ); - ent.v[ "angles" ] = ( 353,017, 265,97, 0,490713 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -952,002, 1481,48, 312,577 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -872,617, 1480,68, 313,451 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -875,283, 1609,12, 311,013 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -952,024, 1610,95, 313,525 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -872,928, 1352,16, 313,001 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -872,054, 1223,13, 313,13 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -952,927, 1352,59, 312,212 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -874,153, 1098,93, 312,002 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -952,295, 1098,67, 313,014 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1074,48, 1471,09, 282,029 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1059,8, 1471,35, 282,107 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1059,17, 1392,64, 282,038 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1076,86, 1392,31, 282,96 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1187,14, 1394,76, 281,465 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1204,82, 1394,43, 282,387 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1314,01, 1392,53, 281,541 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1330,39, 1393,16, 281,463 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1313,21, 1473,16, 282,542 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1330,89, 1472,83, 283,464 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1185,12, 1471,61, 282,54 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1202,8, 1471,29, 282,462 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -952,029, 1225,24, 313,999 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1331,01, 853,498, 242,032 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1345,19, 853,946, 242,984 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1329,88, 934,157, 242,527 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1344,06, 934,606, 242,479 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -948,181, 933,051, 242,523 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -962,284, 933,495, 243,475 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -819,362, 933,69, 242,527 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -833,543, 934,138, 242,479 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -819,8, 854,203, 242,03 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -833,981, 854,651, 242,982 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -948,683, 854,554, 242,025 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -962,117, 854,527, 241,977 ); - ent.v[ "angles" ] = ( 90, 2, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); - ent.v[ "origin" ] = ( -6810,74, -2265,67, -1022,36 ); - ent.v[ "angles" ] = ( 357,698, 264,004, -2,77475 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud" ); - ent.v[ "origin" ] = ( -2991,83, -3206,12, 153,808 ); - ent.v[ "angles" ] = ( 356,909, 333,223, 7,3457 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( 263,835, 927,725, 403,213 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( 263,658, 1010,4, 402,739 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_drone_interior_steam" ); - ent.v[ "origin" ] = ( 623,76, -1103,02, 404,754 ); - ent.v[ "angles" ] = ( 45, 90, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_drone_interior_steam" ); - ent.v[ "origin" ] = ( -912,102, 1170,65, 310,491 ); - ent.v[ "angles" ] = ( 60,002, 179,893, 179,998 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_drone_interior_steam" ); - ent.v[ "origin" ] = ( -1131,35, 1435,54, 288,503 ); - ent.v[ "angles" ] = ( 79,644, 99,761, -172,7 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( 733,578, 946,591, 240,928 ); - ent.v[ "angles" ] = ( 90, 0, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( 734,355, 889,922, 241,904 ); - ent.v[ "angles" ] = ( 90, 0, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( 605,725, 888,408, 242,922 ); - ent.v[ "angles" ] = ( 90, 0, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( 606,575, 949,938, 241,919 ); - ent.v[ "angles" ] = ( 90, 0, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 638,731, -535,378, 22,6499 ); - ent.v[ "angles" ] = ( 270, 8,74616, -76,7461 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_hvac_steam_md" ); - ent.v[ "origin" ] = ( 209,196, -127,299, 191,188 ); - ent.v[ "angles" ] = ( 359, 270, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_skinny" ); - ent.v[ "origin" ] = ( 678,362, 1171,87, 216,125 ); - ent.v[ "angles" ] = ( 90, 22,5361, 112,536 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_skinny" ); - ent.v[ "origin" ] = ( 415,825, 832,303, 366,397 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_drone_rapid" ); - ent.v[ "origin" ] = ( -649,15, 836,622, 304,125 ); - ent.v[ "angles" ] = ( 270, 0, -179,075 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_drone_rapid" ); - ent.v[ "origin" ] = ( -649,2, 836,448, 331,749 ); - ent.v[ "angles" ] = ( 270, 0, -179,075 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_drone_rapid" ); - ent.v[ "origin" ] = ( -649,2, 809,854, 331,58 ); - ent.v[ "angles" ] = ( 270, 0, -179,075 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_drone_rapid" ); - ent.v[ "origin" ] = ( -649,199, 849,558, 341,199 ); - ent.v[ "angles" ] = ( 270, 0, -179,075 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_drone_rapid" ); - ent.v[ "origin" ] = ( -649,198, 823,159, 341,093 ); - ent.v[ "angles" ] = ( 270, 0, -179,075 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_drone_rapid" ); - ent.v[ "origin" ] = ( -649,194, 810,015, 304,436 ); - ent.v[ "angles" ] = ( 270, 0, -179,075 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( -1287,83, 905,122, 393,987 ); - ent.v[ "angles" ] = ( 90, 0, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( -1136,99, 901,405, 393,648 ); - ent.v[ "angles" ] = ( 90, 0, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_ring_console_runner" ); - ent.v[ "origin" ] = ( -563,921, -396,323, 302,507 ); - ent.v[ "angles" ] = ( 270, 1,02303, 168,977 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_ring_console_runner" ); - ent.v[ "origin" ] = ( -566,368, -443,58, 301,843 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud" ); - ent.v[ "origin" ] = ( -990,768, 5498,91, 1464,19 ); - ent.v[ "angles" ] = ( 358,797, 165,491, -4,97454 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); - ent.v[ "origin" ] = ( -1859,18, -730,723, 232,806 ); - ent.v[ "angles" ] = ( 90, 359,66, -0,340199 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); - ent.v[ "origin" ] = ( -1353,12, -542,779, 232,406 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue_4" ); - ent.v[ "origin" ] = ( -1604,83, -541,29, 232,631 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "origin" ] = ( -1859,57, -857,978, 232,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "origin" ] = ( -1861,98, -924,381, 230,928 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista_lg" ); - ent.v[ "origin" ] = ( 9644,56, 7823,23, 6680,54 ); - ent.v[ "angles" ] = ( 359,234, 123,905, -28,9793 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista_lg" ); - ent.v[ "origin" ] = ( -13542,6, 16523,3, 9830,55 ); - ent.v[ "angles" ] = ( 1,71905, 218,249, -20,9778 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista_lg" ); - ent.v[ "origin" ] = ( 276,66, 16767,7, 5623,09 ); - ent.v[ "angles" ] = ( 356,208, 178,737, -11,4733 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 297,245, -565,136, 97,0805 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 299,902, -701,637, 23,9968 ); - ent.v[ "angles" ] = ( 0,209195, 92,9928, -3,99514 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 1013,72, 4127,44, 293,127 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 708,264, 3949,28, 393,346 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista_lg" ); - ent.v[ "origin" ] = ( 9232, -2215,96, 2746,91 ); - ent.v[ "angles" ] = ( 337,685, 77,4872, -18,9982 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -1354,08, -2307,16, 110 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud" ); - ent.v[ "origin" ] = ( -6931,43, -2303,66, 214,174 ); - ent.v[ "angles" ] = ( 0,706331, 305,471, 7,93499 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 1148,24, 4659,96, 319,632 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_drone_interior_steam" ); - ent.v[ "origin" ] = ( 743,524, -956,336, 409,645 ); - ent.v[ "angles" ] = ( 37,9905, 261,041, -5,39119 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 766,946, -1247,2, 304,182 ); - ent.v[ "angles" ] = ( 7,05027, 168,986, -0,201279 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 962,284, -868,168, 261,124 ); - ent.v[ "angles" ] = ( 24,7563, 93,1528, 1,67565 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 1743,82, 617,397, 251,999 ); - ent.v[ "angles" ] = ( 270, 8,74616, -76,7461 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -364,257, 247,23, 219,875 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 433,7, 660,709, 247,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 613,776, 692,465, 371,516 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( -506,822, 1883,44, 265,412 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 21 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( -569,787, 1950,94, 266,577 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 22 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -1614,5, -1804,88, 285,875 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud" ); - ent.v[ "origin" ] = ( 993,073, 5394,7, 1032,47 ); - ent.v[ "angles" ] = ( 358,797, 165,491, -4,97454 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud" ); - ent.v[ "origin" ] = ( 2871,98, 1828,48, 870,813 ); - ent.v[ "angles" ] = ( 6,02783, 104,149, -4,99374 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( 270,381, 1168,16, 355,939 ); - ent.v[ "angles" ] = ( 65,8451, 277,213, 96,0144 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( 371,39, 1294,56, 296,049 ); - ent.v[ "angles" ] = ( 58, 180, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 934,538, 4930,19, 312,547 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( -1284,92, 1115,69, 364,842 ); - ent.v[ "angles" ] = ( 76, 270, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_red_light_flash" ); - ent.v[ "origin" ] = ( -31,8417, -1041,87, 263,384 ); - ent.v[ "angles" ] = ( 292, 311, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_red_light_flash" ); - ent.v[ "origin" ] = ( -34,8275, -1040,35, 254,663 ); - ent.v[ "angles" ] = ( 292, 311, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( -154,832, -1934,51, 205,635 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 788,487, 6140,1, 366,7 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 884,408, 5981,83, 300,174 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign" ); - ent.v[ "origin" ] = ( -1454,73, -406,791, 230,183 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign" ); - ent.v[ "origin" ] = ( -1452,6, 799,826, 229,652 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 263 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign" ); - ent.v[ "origin" ] = ( -923,087, 1667,74, 279,368 ); - ent.v[ "angles" ] = ( 292, 311, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign" ); - ent.v[ "origin" ] = ( -1324,26, -2110,99, 277,613 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign" ); - ent.v[ "origin" ] = ( -1679,73, -1985,27, 230,319 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign" ); - ent.v[ "origin" ] = ( -1288,41, 1280,36, 278,775 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign" ); - ent.v[ "origin" ] = ( 178,528, 911,348, 398,839 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( 553,305, -923,114, 355,431 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 91 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( 582,745, -1133,63, 355,113 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 91 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( 937,727, -1134,12, 355,187 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 91 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( 457,015, -1042,54, 357,848 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( 457,027, -1021,6, 357,565 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( 553,538, -937,267, 355,595 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( 444,023, -1042,3, 357,302 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( 445,596, -1019,4, 357,585 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( 889,882, -496,404, 188,74 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 269 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( -1056,34, -512,798, 379,994 ); - ent.v[ "angles" ] = ( 1, 180, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( -1043,11, -513,929, 378,79 ); - ent.v[ "angles" ] = ( 359, 359,997, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( -623,879, -234,962, 378,38 ); - ent.v[ "angles" ] = ( 359,983, 89,0033, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( -601,586, 617,154, 379,417 ); - ent.v[ "angles" ] = ( 0, 265, 0,996355 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( -600,64, 630,638, 379,253 ); - ent.v[ "angles" ] = ( 359,983, 89,0033, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( -416,764, 801,349, 378,66 ); - ent.v[ "angles" ] = ( 1, 179,003, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( -403,384, 798,815, 378,893 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( -1043,08, 885,957, 381,826 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( -1043,07, 909,282, 381,768 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( -1057,74, 885,405, 381,289 ); - ent.v[ "angles" ] = ( 359, 176,004, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( -1056,11, 908,672, 381,347 ); - ent.v[ "angles" ] = ( 359, 176,004, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( -822,494, 810,855, 210,5 ); - ent.v[ "angles" ] = ( 359,983, 89,0033, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( -1197,75, -543,729, 211,5 ); - ent.v[ "angles" ] = ( 1, 179,003, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( -1984,17, -544,368, 211,844 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1371,39, -1683,92, 291,931 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1435,02, -1682,49, 291,95 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_ceiling_circle_light_glare" ); - ent.v[ "origin" ] = ( -1499,81, -1683,35, 291,906 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( -1360,18, 981,172, 211,351 ); - ent.v[ "angles" ] = ( 359,983, 271,003, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "origin" ] = ( -1152,56, 981,151, 211,215 ); - ent.v[ "angles" ] = ( 359,983, 271,003, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; -} diff --git a/Multiplayer Maps/mp_drone/maps/mp/mp_drone.gsc b/Multiplayer Maps/mp_drone/maps/mp/mp_drone.gsc deleted file mode 100644 index 1563c63..0000000 --- a/Multiplayer Maps/mp_drone/maps/mp/mp_drone.gsc +++ /dev/null @@ -1,70 +0,0 @@ -#include maps/mp/mp_drone_doors; -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - precachemodel( "fxanim_gp_robot_arm_welder_server_side_mod" ); - level.levelspawndvars = ::levelspawndvars; - welders = []; - welders[ welders.size ] = ( -1339,51, 76,04, 136,11 ); - welders[ welders.size ] = ( -1339,51, -171,9, 136,11 ); - welders[ welders.size ] = ( -1339,51, 559,04, 136,12 ); - welders[ welders.size ] = ( -1339,51, 312,01, 136,12 ); - maps/mp/mp_drone_fx::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_drone" ); - maps/mp/_load::main(); - maps/mp/mp_drone_amb::main(); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - if ( getgametypesetting( "allowMapScripting" ) ) - { - level maps/mp/mp_drone_doors::init(); - } - level.remotemotarviewleft = 35; - level.remotemotarviewright = 35; - level.remotemotarviewup = 18; - setheliheightpatchenabled( "war_mode_heli_height_lock", 0 ); - geo_changes(); - _a54 = welders; - _k54 = getFirstArrayKey( _a54 ); - while ( isDefined( _k54 ) ) - { - welder = _a54[ _k54 ]; - collision = spawn( "script_model", welder ); - collision setmodel( "fxanim_gp_robot_arm_welder_server_side_mod" ); - _k54 = getNextArrayKey( _a54, _k54 ); - } -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2600", reset_dvars ); -} - -geo_changes() -{ - rts_floor = getent( "overwatch_floor", "targetname" ); - if ( isDefined( rts_floor ) ) - { - rts_floor delete(); - } - removes = getentarray( "rts_only", "targetname" ); - _a77 = removes; - _k77 = getFirstArrayKey( _a77 ); - while ( isDefined( _k77 ) ) - { - removal = _a77[ _k77 ]; - removal delete(); - _k77 = getNextArrayKey( _a77, _k77 ); - } -} diff --git a/Multiplayer Maps/mp_drone/maps/mp/mp_drone_amb.gsc b/Multiplayer Maps/mp_drone/maps/mp/mp_drone_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_drone/maps/mp/mp_drone_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_drone/maps/mp/mp_drone_doors.gsc b/Multiplayer Maps/mp_drone/maps/mp/mp_drone_doors.gsc deleted file mode 100644 index 4011adf..0000000 --- a/Multiplayer Maps/mp_drone/maps/mp/mp_drone_doors.gsc +++ /dev/null @@ -1,250 +0,0 @@ -#include maps/mp/_tacticalinsertion; -#include maps/mp/gametypes/_weaponobjects; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - triggers = getentarray( "trigger_multiple", "classname" ); - i = 0; - while ( i < 4 ) - { - door = getent( "drone_door" + i, "targetname" ); - if ( !isDefined( door ) ) - { - i++; - continue; - } - else - { - right = anglesToForward( door.angles ); - right = vectorScale( right, 116 ); - door.opened = 1; - door.origin_opened = door.origin; - door.force_open_time = 0; - if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "flip" ) - { - door.origin_closed = door.origin + right; - } - else - { - door.origin_closed = door.origin - right; - } - door.mins = door getmins(); - door.maxs = door getmaxs(); - door setcandamage( 1 ); - door allowbottargetting( 0 ); - door.triggers = []; - _a49 = triggers; - _k49 = getFirstArrayKey( _a49 ); - while ( isDefined( _k49 ) ) - { - trigger = _a49[ _k49 ]; - if ( isDefined( trigger.target ) ) - { - if ( trigger.target == door.targetname ) - { - trigger.mins = trigger getmins(); - trigger.maxs = trigger getmaxs(); - door.triggers[ door.triggers.size ] = trigger; - } - } - _k49 = getNextArrayKey( _a49, _k49 ); - } - door thread door_damage_think(); - door thread door_think( i ); - } - i++; - } -} - -door_think( index ) -{ - wait ( 0,05 * index ); - self door_close(); - for ( ;; ) - { - wait 0,25; - if ( self door_should_open() ) - { - self door_open(); - } - else - { - self door_close(); - } - self movement_process(); - } -} - -door_should_open() -{ - if ( getTime() < self.force_open_time ) - { - return 1; - } - _a97 = self.triggers; - _k97 = getFirstArrayKey( _a97 ); - while ( isDefined( _k97 ) ) - { - trigger = _a97[ _k97 ]; - if ( trigger trigger_is_occupied() ) - { - return 1; - } - _k97 = getNextArrayKey( _a97, _k97 ); - } - return 0; -} - -door_open() -{ - if ( self.opened ) - { - return; - } - dist = distance( self.origin_opened, self.origin ); - frac = dist / 116; - time = clamp( frac * 0,5, 0,1, 0,5 ); - self moveto( self.origin_opened, time ); - self playsound( "mpl_drone_door_open" ); - self.opened = 1; -} - -door_close() -{ - if ( !self.opened ) - { - return; - } - dist = distance( self.origin_closed, self.origin ); - frac = dist / 116; - time = clamp( frac * 0,5, 0,1, 0,5 ); - self moveto( self.origin_closed, time ); - self playsound( "mpl_drone_door_close" ); - self.opened = 0; -} - -movement_process() -{ - moving = 0; - if ( self.opened ) - { - if ( distancesquared( self.origin, self.origin_opened ) > 0,001 ) - { - moving = 1; - } - } - else - { - if ( distancesquared( self.origin, self.origin_closed ) > 0,001 ) - { - moving = 1; - } - } - while ( moving ) - { - entities = gettouchingvolume( self.origin, self.mins, self.maxs ); - _a165 = entities; - _k165 = getFirstArrayKey( _a165 ); - while ( isDefined( _k165 ) ) - { - entity = _a165[ _k165 ]; - if ( isDefined( entity.classname ) && entity.classname == "grenade" ) - { - if ( !isDefined( entity.name ) ) - { - } - else if ( !isDefined( entity.owner ) ) - { - } - else watcher = entity.owner getwatcherforweapon( entity.name ); - if ( !isDefined( watcher ) ) - { - } - else watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate( entity, 0, undefined ); - } - if ( self.opened ) - { - } - else if ( isDefined( entity.classname ) && entity.classname == "auto_turret" ) - { - if ( !isDefined( entity.damagedtodeath ) || !entity.damagedtodeath ) - { - entity domaxdamage( self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - } - } - else - { - if ( isDefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" ) - { - entity maps/mp/_tacticalinsertion::destroy_tactical_insertion(); - } - } - _k165 = getNextArrayKey( _a165, _k165 ); - } - } -} - -trigger_is_occupied() -{ - entities = gettouchingvolume( self.origin, self.mins, self.maxs ); - _a221 = entities; - _k221 = getFirstArrayKey( _a221 ); - while ( isDefined( _k221 ) ) - { - entity = _a221[ _k221 ]; - if ( isalive( entity ) ) - { - if ( !isplayer( entity ) || isai( entity ) && isvehicle( entity ) ) - { - return 1; - } - } - _k221 = getNextArrayKey( _a221, _k221 ); - } - return 0; -} - -getwatcherforweapon( weapname ) -{ - if ( !isDefined( self ) ) - { - return undefined; - } - if ( !isplayer( self ) ) - { - return undefined; - } - i = 0; - while ( i < self.weaponobjectwatcherarray.size ) - { - if ( self.weaponobjectwatcherarray[ i ].weapon != weapname ) - { - i++; - continue; - } - else - { - return self.weaponobjectwatcherarray[ i ]; - } - i++; - } - return undefined; -} - -door_damage_think() -{ - self.maxhealth = 99999; - self.health = self.maxhealth; - for ( ;; ) - { - self waittill( "damage", damage, attacker, dir, point, mod, model, tag, part, weapon, flags ); - self.maxhealth = 99999; - self.health = self.maxhealth; - if ( mod == "MOD_PISTOL_BULLET" || mod == "MOD_RIFLE_BULLET" ) - { - self.force_open_time = getTime() + 1500; - } - } -} diff --git a/Multiplayer Maps/mp_drone/maps/mp/mp_drone_fx.gsc b/Multiplayer Maps/mp_drone/maps/mp/mp_drone_fx.gsc deleted file mode 100644 index 1bafbc6..0000000 --- a/Multiplayer Maps/mp_drone/maps/mp/mp_drone_fx.gsc +++ /dev/null @@ -1,97 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); - -precache_util_fx() -{ -} - -precache_scripted_fx() -{ - level._effect[ "fx_mp_drone_robot_sparks" ] = loadfx( "maps/mp_maps/fx_mp_drone_robot_sparks" ); -} - -precache_createfx_fx() -{ - level._effect[ "fx_leaves_falling_mangrove_lg_dark" ] = loadfx( "env/foliage/fx_leaves_falling_mangrove_lg_dark" ); - level._effect[ "fx_mp_vent_steam" ] = loadfx( "maps/mp_maps/fx_mp_vent_steam" ); - level._effect[ "fx_hvac_steam_md" ] = loadfx( "smoke/fx_hvac_steam_md" ); - level._effect[ "fx_mp_water_drip_light_shrt" ] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_shrt" ); - level._effect[ "fx_fog_street_cool_slw_md" ] = loadfx( "fog/fx_fog_street_cool_slw_md" ); - level._effect[ "fx_light_emrgncy_floodlight" ] = loadfx( "light/fx_light_emrgncy_floodlight" ); - level._effect[ "fx_insects_swarm_dark_lg" ] = loadfx( "bio/insects/fx_insects_swarm_dark_lg" ); - level._effect[ "fx_mp_fog_low" ] = loadfx( "maps/mp_maps/fx_mp_fog_low" ); - level._effect[ "fx_insects_swarm_md_light" ] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); - level._effect[ "fx_lf_dockside_sun1" ] = loadfx( "lens_flares/fx_lf_mp_drone_sun1" ); - level._effect[ "fx_light_floodlight_rnd_cool_glw_dim" ] = loadfx( "light/fx_light_floodlight_rnd_cool_glw_dim" ); - level._effect[ "fx_mp_steam_pipe_md" ] = loadfx( "maps/mp_maps/fx_mp_steam_pipe_md" ); - level._effect[ "fx_mp_light_dust_motes_md" ] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); - level._effect[ "fx_mp_light_dust_motes_sm" ] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_sm" ); - level._effect[ "fx_mp_fog_cool_ground" ] = loadfx( "maps/mp_maps/fx_mp_fog_cool_ground" ); - level._effect[ "fx_red_button_flash" ] = loadfx( "light/fx_red_button_flash" ); - level._effect[ "fx_mp_distant_cloud" ] = loadfx( "maps/mp_maps/fx_mp_distant_cloud_lowmem" ); - level._effect[ "fx_light_god_ray_mp_drone" ] = loadfx( "env/light/fx_light_god_ray_mp_drone" ); - level._effect[ "fx_mp_fumes_vent_xsm_int" ] = loadfx( "maps/mp_maps/fx_mp_fumes_vent_xsm_int" ); - level._effect[ "fx_ceiling_circle_light_glare" ] = loadfx( "light/fx_ceiling_circle_light_glare" ); - level._effect[ "fx_drone_rectangle_light" ] = loadfx( "light/fx_drone_rectangle_light" ); - level._effect[ "fx_drone_rectangle_light_02" ] = loadfx( "light/fx_drone_rectangle_light_02" ); - level._effect[ "fx_mp_water_drip_light_long" ] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); - level._effect[ "fx_pc_panel_lights_runner" ] = loadfx( "props/fx_pc_panel_lights_runner" ); - level._effect[ "fx_drone_red_ring_console" ] = loadfx( "light/fx_drone_red_ring_console" ); - level._effect[ "fx_blue_light_flash" ] = loadfx( "light/fx_blue_light_flash" ); - level._effect[ "fx_window_god_ray" ] = loadfx( "light/fx_window_god_ray" ); - level._effect[ "fx_mp_drone_interior_steam" ] = loadfx( "maps/mp_maps/fx_mp_drone_interior_steam" ); - level._effect[ "fx_pc_panel_heli" ] = loadfx( "props/fx_pc_panel_heli" ); - level._effect[ "fx_red_light_flash" ] = loadfx( "light/fx_red_light_flash" ); - level._effect[ "fx_drone_rectangle_light_blue" ] = loadfx( "light/fx_drone_rectangle_light_blue" ); - level._effect[ "fx_mp_distant_cloud_vista" ] = loadfx( "maps/mp_maps/fx_mp_distant_cloud_vista_lowmem" ); - level._effect[ "fx_drone_rectangle_light_blue_4" ] = loadfx( "light/fx_drone_rectangle_light_blue_4" ); - level._effect[ "fx_drone_rectangle_light_yellow" ] = loadfx( "light/fx_drone_rectangle_light_yellow" ); - level._effect[ "fx_ceiling_circle_light_led" ] = loadfx( "light/fx_ceiling_circle_light_led" ); - level._effect[ "fx_drone_red_ring_console_runner" ] = loadfx( "light/fx_drone_red_ring_console_runner" ); - level._effect[ "fx_light_beacon_red_blink_fst" ] = loadfx( "light/fx_light_beacon_red_blink_fst" ); - level._effect[ "fx_wall_water_ground" ] = loadfx( "water/fx_wall_water_ground" ); - level._effect[ "fx_drone_rectangle_light_03" ] = loadfx( "light/fx_drone_rectangle_light_03" ); - level._effect[ "fx_drone_red_blink" ] = loadfx( "light/fx_drone_red_blink" ); - level._effect[ "fx_light_god_ray_mp_drone2" ] = loadfx( "env/light/fx_light_god_ray_mp_drone2" ); - level._effect[ "fx_drone_rectangle_light_skinny" ] = loadfx( "light/fx_drone_rectangle_light_skinny" ); - level._effect[ "fx_mp_drone_rapid" ] = loadfx( "maps/mp_maps/fx_mp_drone_rapid" ); - level._effect[ "fx_mp_distant_cloud_vista_lg" ] = loadfx( "maps/mp_maps/fx_mp_distant_cloud_vista_lg_lowmem" ); - level._effect[ "fx_light_exit_sign" ] = loadfx( "light/fx_light_exit_sign_glow" ); - level._effect[ "fx_drone_light_yellow" ] = loadfx( "light/fx_drone_light_yellow" ); -} - -main() -{ - precache_fxanim_props(); - precache_util_fx(); - precache_createfx_fx(); - precache_scripted_fx(); - maps/mp/createfx/mp_drone_fx::main(); - maps/mp/createart/mp_drone_art::main(); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "vines_aquilaria" ] = %fxanim_gp_vines_aquilaria_anim; - level.scr_anim[ "fxanim_props" ][ "vines_strangler_fig" ] = %fxanim_gp_vines_strangler_fig_anim; - level.scr_anim[ "fxanim_props" ][ "drone_factory" ] = %fxanim_mp_drone_factory_link_anim; - level.scr_anim[ "fxanim_props" ][ "drone_welder1" ] = %fxanim_mp_drone_factory_welder_01_anim; - level.scr_anim[ "fxanim_props" ][ "drone_welder2" ] = %fxanim_mp_drone_factory_welder_02_anim; - level.scr_anim[ "fxanim_props" ][ "drone_welder3" ] = %fxanim_mp_drone_factory_welder_03_anim; - level.scr_anim[ "fxanim_props" ][ "drone_welder4" ] = %fxanim_mp_drone_factory_welder_04_anim; - level.scr_anim[ "fxanim_props" ][ "drone_suction1" ] = %fxanim_mp_drone_factory_suction_01_anim; - level.scr_anim[ "fxanim_props" ][ "drone_suction2" ] = %fxanim_mp_drone_factory_suction_02_anim; - level.scr_anim[ "fxanim_props" ][ "drone_suction3" ] = %fxanim_mp_drone_factory_suction_03_anim; - level.scr_anim[ "fxanim_props" ][ "drone_suction4" ] = %fxanim_mp_drone_factory_suction_04_anim; - level.scr_anim[ "fxanim_props" ][ "drone_factory_off" ] = %fxanim_mp_drone_factory_link_off_anim; - level.scr_anim[ "fxanim_props" ][ "drone_welder1_off" ] = %fxanim_mp_drone_factory_welder_01_off_anim; - level.scr_anim[ "fxanim_props" ][ "drone_welder2_off" ] = %fxanim_mp_drone_factory_welder_02_off_anim; - level.scr_anim[ "fxanim_props" ][ "drone_welder3_off" ] = %fxanim_mp_drone_factory_welder_03_off_anim; - level.scr_anim[ "fxanim_props" ][ "drone_welder4_off" ] = %fxanim_mp_drone_factory_welder_04_off_anim; - level.scr_anim[ "fxanim_props" ][ "drone_suction1_off" ] = %fxanim_mp_drone_factory_suction_01_off_anim; - level.scr_anim[ "fxanim_props" ][ "drone_suction2_off" ] = %fxanim_mp_drone_factory_suction_02_off_anim; - level.scr_anim[ "fxanim_props" ][ "drone_suction3_off" ] = %fxanim_mp_drone_factory_suction_03_off_anim; - level.scr_anim[ "fxanim_props" ][ "drone_suction4_off" ] = %fxanim_mp_drone_factory_suction_04_off_anim; - level.scr_anim[ "fxanim_props" ][ "vines_strangler_fig_alt" ] = %fxanim_gp_vines_strangler_fig_alt_anim; -} diff --git a/Multiplayer Maps/mp_express/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_express/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_express/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_express/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_express/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_express/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_express/maps/mp/_events.gsc b/Multiplayer Maps/mp_express/maps/mp/_events.gsc deleted file mode 100644 index 9f7ac09..0000000 --- a/Multiplayer Maps/mp_express/maps/mp/_events.gsc +++ /dev/null @@ -1,114 +0,0 @@ -#include maps/mp/gametypes/_globallogic_utils; -#include maps/mp/_utility; - -add_timed_event( seconds, notify_string, client_notify_string ) -{ -/# - assert( seconds >= 0 ); -#/ - if ( level.timelimit > 0 ) - { - level thread timed_event_monitor( seconds, notify_string, client_notify_string ); - } -} - -timed_event_monitor( seconds, notify_string, client_notify_string ) -{ - for ( ;; ) - { - wait 0,5; - if ( !isDefined( level.starttime ) ) - { - continue; - } - else - { - millisecs_remaining = maps/mp/gametypes/_globallogic_utils::gettimeremaining(); - seconds_remaining = millisecs_remaining / 1000; - if ( seconds_remaining <= seconds ) - { - event_notify( notify_string, client_notify_string ); - return; - } - } - } -} - -add_score_event( score, notify_string, client_notify_string ) -{ -/# - assert( score >= 0 ); -#/ - if ( level.scorelimit > 0 ) - { - if ( level.teambased ) - { - level thread score_team_event_monitor( score, notify_string, client_notify_string ); - return; - } - else - { - level thread score_event_monitor( score, notify_string, client_notify_string ); - } - } -} - -any_team_reach_score( score ) -{ - _a63 = level.teams; - _k63 = getFirstArrayKey( _a63 ); - while ( isDefined( _k63 ) ) - { - team = _a63[ _k63 ]; - if ( game[ "teamScores" ][ team ] >= score ) - { - return 1; - } - _k63 = getNextArrayKey( _a63, _k63 ); - } - return 0; -} - -score_team_event_monitor( score, notify_string, client_notify_string ) -{ - for ( ;; ) - { - wait 0,5; - if ( any_team_reach_score( score ) ) - { - event_notify( notify_string, client_notify_string ); - return; - } - } -} - -score_event_monitor( score, notify_string, client_notify_string ) -{ - for ( ;; ) - { - wait 0,5; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( isDefined( players[ i ].score ) && players[ i ].score >= score ) - { - event_notify( notify_string, client_notify_string ); - return; - } - i++; - } - } -} - -event_notify( notify_string, client_notify_string ) -{ - if ( isDefined( notify_string ) ) - { - level notify( notify_string ); - } - if ( isDefined( client_notify_string ) ) - { - clientnotify( client_notify_string ); - } -} diff --git a/Multiplayer Maps/mp_express/maps/mp/createart/mp_express_art.gsc b/Multiplayer Maps/mp_express/maps/mp/createart/mp_express_art.gsc deleted file mode 100644 index 923e6c1..0000000 --- a/Multiplayer Maps/mp_express/maps/mp/createart/mp_express_art.gsc +++ /dev/null @@ -1,25 +0,0 @@ - -main() -{ - level.tweakfile = 1; - setdvar( "scr_fog_exp_halfplane", "3759.28" ); - setdvar( "scr_fog_exp_halfheight", "243.735" ); - setdvar( "scr_fog_nearplane", "601.593" ); - setdvar( "scr_fog_red", "0.806694" ); - setdvar( "scr_fog_green", "0.962521" ); - setdvar( "scr_fog_blue", "0.9624" ); - setdvar( "scr_fog_baseheight", "-475.268" ); - setdvar( "visionstore_glowTweakEnable", "0" ); - setdvar( "visionstore_glowTweakRadius0", "5" ); - setdvar( "visionstore_glowTweakRadius1", "" ); - setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); - setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); - setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); - setdvar( "visionstore_glowTweakBloomIntensity1", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); - visionsetnaked( "mp_express", 1 ); - setdvar( "r_lightGridEnableTweaks", 1 ); - setdvar( "r_lightGridIntensity", 1 ); - setdvar( "r_lightGridContrast", 0 ); -} diff --git a/Multiplayer Maps/mp_express/maps/mp/createfx/mp_express_fx.gsc b/Multiplayer Maps/mp_express/maps/mp/createfx/mp_express_fx.gsc deleted file mode 100644 index 7d2d1bf..0000000 --- a/Multiplayer Maps/mp_express/maps/mp/createfx/mp_express_fx.gsc +++ /dev/null @@ -1,1832 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( 904,187, -2120,3, -35,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 132 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 672,285, -213,159, 71,125 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 653,108, 199,932, 71,125 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 225,28, 50,8324, 37 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 85 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 240,648, -293,811, 46,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 105 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 688,709, -925,867, 35 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 118 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 585,66, -1065,81, 51 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 118 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1033,78, -1877,63, 36,0076 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 118 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1489,26, -1249,97, -51,3096 ); - ent.v[ "angles" ] = ( 338, 224, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1737,87, -915,959, -78,2687 ); - ent.v[ "angles" ] = ( 352,104, 243,1, 1,97313 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1548,32, -407,51, -38 ); - ent.v[ "angles" ] = ( 354,932, 89,9463, 1,83965 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1539,08, 431,675, -54 ); - ent.v[ "angles" ] = ( 352,685, 260,482, -2,7063 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1432,99, 1304,17, -7,92948 ); - ent.v[ "angles" ] = ( 351,296, 139,321, -0,649479 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1741,47, 931,778, -74,1646 ); - ent.v[ "angles" ] = ( 354,651, 117,059, -0,668359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 730,237, 1397,04, 44 ); - ent.v[ "angles" ] = ( 0,841039, 53,9364, 0,470194 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 986,61, 1741,43, 44 ); - ent.v[ "angles" ] = ( 0,841039, 53,9364, 0,470194 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1235,97, 2016,5, -0,999996 ); - ent.v[ "angles" ] = ( 0,841039, 53,9364, 0,470194 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1856,5, 302,507, -64 ); - ent.v[ "angles" ] = ( 0,434334, 87,9362, 0,860104 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1855, -555,538, -66 ); - ent.v[ "angles" ] = ( 0,434334, 87,9362, 0,860104 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 2095,27, -333,514, -68 ); - ent.v[ "angles" ] = ( 0,434334, 87,9362, 0,860104 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 2081,85, 493,494, -65 ); - ent.v[ "angles" ] = ( 359,611, 270,936, -0,881651 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 77,2361, -1468,28, 179,125 ); - ent.v[ "angles" ] = ( 0,948312, 34,9346, 0,170738 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -1074,33, -92,7252, 7,125 ); - ent.v[ "angles" ] = ( 356,611, 270,982, -0,883175 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -1131,8, 367,006, 3,125 ); - ent.v[ "angles" ] = ( 0,860073, 357,93, -0,434595 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 104,491, 1461,15, 183,125 ); - ent.v[ "angles" ] = ( 0,513489, 326,93, -0,815337 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 475,278, 1206,18, 178,125 ); - ent.v[ "angles" ] = ( 0,499212, 325,93, 0,175851 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_express" ); - ent.v[ "origin" ] = ( 371,122, 146,88, -21,875 ); - ent.v[ "angles" ] = ( 318,06, 174,658, -176,258 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); - ent.v[ "origin" ] = ( 2609,36, -338,302, -269,108 ); - ent.v[ "angles" ] = ( 323,854, 177,669, -1,62255 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( -128,196, 1616,93, 189,125 ); - ent.v[ "angles" ] = ( 23,16, 147,24, 0,592267 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( 121,642, -1308,79, 190,125 ); - ent.v[ "angles" ] = ( 0, 36, -37 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( 990,407, -2000,66, -56,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 130 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 377,47, -99,5366, 29,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 85 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( -98,5626, -1599,25, 181,125 ); - ent.v[ "angles" ] = ( 18, 215, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust_side" ); - ent.v[ "origin" ] = ( 769,788, -1747,88, -58,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 216 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust_side" ); - ent.v[ "origin" ] = ( 1073,37, -2096,74, -58,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 225 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust_side" ); - ent.v[ "origin" ] = ( 502,51, -1356,86, -58,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 210 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1003; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust_side" ); - ent.v[ "origin" ] = ( 273,601, -936,508, -58,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 205 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1004; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust_side" ); - ent.v[ "origin" ] = ( 92,7792, -491,237, -58,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 199 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1005; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust_side" ); - ent.v[ "origin" ] = ( 17,9442, -35,5184, -58,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 184 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1006; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust_side" ); - ent.v[ "origin" ] = ( 84,1599, 435,962, -58,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 164 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1007; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust_side" ); - ent.v[ "origin" ] = ( 245,547, 869,105, -58,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 157 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1008; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust_side" ); - ent.v[ "origin" ] = ( 456,781, 1276,61, -58,5 ); - ent.v[ "angles" ] = ( 0, 151, -1 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1009; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust_side" ); - ent.v[ "origin" ] = ( 717,311, 1677,81, -57,7634 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 143 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1010; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust_side" ); - ent.v[ "origin" ] = ( 1037,08, 2051,59, -58,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 135 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1011; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust" ); - ent.v[ "origin" ] = ( 1087,85, -2111,04, -58,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 314 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust" ); - ent.v[ "origin" ] = ( 791,486, -1771,69, -58,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 307 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust" ); - ent.v[ "origin" ] = ( 517,452, -1381,03, -58,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 299 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2003; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust" ); - ent.v[ "origin" ] = ( 287,219, -957,808, -58,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 294 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2004; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust" ); - ent.v[ "origin" ] = ( 119,349, -535,167, -58,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 287 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2005; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust" ); - ent.v[ "origin" ] = ( 18,978, -56,9463, -58,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 274 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2006; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust" ); - ent.v[ "origin" ] = ( 72,5543, 413,993, -58,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 256 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2007; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust" ); - ent.v[ "origin" ] = ( 232,631, 844,638, -58,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 246 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2008; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust" ); - ent.v[ "origin" ] = ( 446,137, 1250,02, -58,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 243 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2009; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust" ); - ent.v[ "origin" ] = ( 700,319, 1647,44, -58,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 240 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2010; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust" ); - ent.v[ "origin" ] = ( 1022,76, 2035,7, -58,5 ); - ent.v[ "angles" ] = ( 359, 224,996, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2011; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 1710,93, 684,362, 306,361 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 1710,24, 864,104, 298,348 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 2030,79, 685,667, 307,942 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 2030,28, 866,089, 296,456 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 2349,18, 866,885, 297,632 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 2667,47, 864,907, 298,658 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 2989,25, 865,028, 297,195 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 3308,27, 866,458, 283,293 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 1709,26, -866,213, 298,409 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 1709,27, -685,866, 308,778 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 2028,73, -867,224, 299,535 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 2029,89, -685,353, 309,661 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 2348,3, -865,907, 299,481 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 2669,24, -865,818, 299,669 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 2987,5, -866,468, 299,32 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 3310,8, -865,273, 285,616 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 1398,88, -110,09, 305,238 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 1399,77, 110,015, 306,435 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 1400,2, 330,367, 305,939 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 1398,17, -331,185, 306,176 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 1399,7, -514,48, 304,041 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 1398,77, -686,186, 300,364 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 1398,49, -864,665, 289,739 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 1399,87, 513,153, 306,682 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 1400,7, 685,682, 297,438 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 1398,36, 864,426, 290,249 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 2989,6, 330,444, 313 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 2989,74, 110,677, 313 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 2989,3, -114,313, 314 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 2988,87, -332,26, 313 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 3313,88, -515,219, 296,624 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 3312,54, -330,643, 298,118 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 3314,78, -111,315, 298,429 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 3308,06, 111,38, 295,528 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 3309,16, 332,984, 298,53 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_big" ); - ent.v[ "origin" ] = ( 3304,14, 517,499, 297,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); - ent.v[ "origin" ] = ( 640,993, 238,484, 184 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); - ent.v[ "origin" ] = ( 504,093, 238,665, 184 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); - ent.v[ "origin" ] = ( 776,463, 238,78, 184 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); - ent.v[ "origin" ] = ( 913,004, 237,345, 184,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); - ent.v[ "origin" ] = ( 1048,33, 238,616, 184,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); - ent.v[ "origin" ] = ( 1184,4, 238,699, 186 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( 227,961, -261,015, -15,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 47 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 481,22, 1387,52, -13,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 50 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 957,548, 1968,64, -56,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 50 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 21,4283, 38,2671, -31,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 83 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 97,0849, -534,371, -14,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 102 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 258,013, -1227,7, 3 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 114 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 1179, -2344,59, -20,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 137 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -17,3512, -1478,04, 26 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 112 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -390,35, 456,912, 27 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 82 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -434,381, 1013,16, 31 ); - ent.v[ "angles" ] = ( 0, 76, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -419,201, -1136,47, 5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 103 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 655,635, -1685,19, -16,3986 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 137 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 707,182, -2201,65, 8,00002 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 127 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -3,71047, 1822,32, 35,9369 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 34 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 368,932, 1710,05, -22,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 49 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 81,0399, 701,163, -13,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 67 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( 696,127, 1354,24, -10 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 29 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( -333,014, -1244,49, -38 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 107 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( -608,577, 771,195, -37 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 61 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 563,5, 2011,01, -22 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 49 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( 518,991, 2232,65, -55,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 21 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( 1000,55, -2782,06, -53 ); - ent.v[ "angles" ] = ( 0, 89, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( -1040,64, -231,569, 54,125 ); - ent.v[ "angles" ] = ( 23,1981, 127,207, 9,65068 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( 153,867, -1297,16, 188,125 ); - ent.v[ "angles" ] = ( 0,75463, 245,254, 68,3993 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( -1160,28, 289,832, 34,125 ); - ent.v[ "angles" ] = ( 337,304, 71,365, -37,1935 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( -1163,12, -434,502, 70,125 ); - ent.v[ "angles" ] = ( 24,666, 231,513, 32,5726 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( -1119,1, -301,723, 64,125 ); - ent.v[ "angles" ] = ( 40,003, 176,672, 1,28912 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -1127,08, -378,759, 5,125 ); - ent.v[ "angles" ] = ( 0,643226, 356,938, -0,442156 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( -1173,37, 423,165, 63,125 ); - ent.v[ "angles" ] = ( 31,6849, 140,827, -26,2148 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( -1162,68, -276,343, 52,125 ); - ent.v[ "angles" ] = ( 37,3658, 239,257, 29,1336 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_fog_water" ); - ent.v[ "origin" ] = ( -3604,39, -464,775, -312,279 ); - ent.v[ "angles" ] = ( 358,161, 267,005, 0,152562 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_fog_water" ); - ent.v[ "origin" ] = ( -3467,55, 2409,66, -240,302 ); - ent.v[ "angles" ] = ( 358,367, 243,996, 0,859104 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_fog_water" ); - ent.v[ "origin" ] = ( -4307,54, -3735,9, -493,182 ); - ent.v[ "angles" ] = ( 358,39, 301,021, -0,902071 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -261,463, -1226,32, 65,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -253,027, -1041,17, 53,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); - ent.v[ "origin" ] = ( 641,362, -101,817, 185,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); - ent.v[ "origin" ] = ( 776,611, -103,612, 184,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); - ent.v[ "origin" ] = ( 912,786, -102,691, 185,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); - ent.v[ "origin" ] = ( 1048,72, -102,385, 185,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); - ent.v[ "origin" ] = ( 1184,36, -103,566, 184,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( 290,308, -1437,65, 4,87629 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 30 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( 136,327, -1176,32, 4,643 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 30 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( 102,393, -1108,43, 4,21081 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 23 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( -53,2016, -733,819, 4,13237 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 23 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( -79,322, -663,618, 4,59664 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 14 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( -175,213, -270,254, 4,7733 ); - ent.v[ "angles" ] = ( 356, 14, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( -184,92, -195,587, 4,24279 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( -184,117, 211,009, 4,53329 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( -175,937, 286,796, 4,5513 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 345 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( -69,3966, 676,847, 4,16217 ); - ent.v[ "angles" ] = ( 357, 345, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( -45,5513, 749,242, 4,1686 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 337 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( 109,75, 1123,94, 4,30387 ); - ent.v[ "angles" ] = ( 357, 337, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( 143,193, 1191,77, 4,00254 ); - ent.v[ "angles" ] = ( 357,022, 329,991, 0,365935 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( 294,656, 1455,37, 4,98705 ); - ent.v[ "angles" ] = ( 357,022, 329,991, 0,365935 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( -300,573, -301,651, 4,94043 ); - ent.v[ "angles" ] = ( 4, 194, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( -203,825, -694,522, 4,52649 ); - ent.v[ "angles" ] = ( 355, 194, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( -171,709, -783,183, 4,14116 ); - ent.v[ "angles" ] = ( 3,96161, 202,019, 0,557685 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( -17,1667, -1156,99, 4,09987 ); - ent.v[ "angles" ] = ( 0,951456, 202,989, 0,625416 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( 26,1881, -1241,24, 3,62246 ); - ent.v[ "angles" ] = ( 356,869, 208,924, 0,791536 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( -300,033, 319,534, 4,98442 ); - ent.v[ "angles" ] = ( 358,346, 163,906, 2,77418 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( -194,02, 709,725, 4,02974 ); - ent.v[ "angles" ] = ( 358,346, 163,906, 2,77418 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( -164,703, 798,41, 4,86106 ); - ent.v[ "angles" ] = ( 358,346, 163,906, 2,77418 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( -9,7507, 1172,74, 4,31705 ); - ent.v[ "angles" ] = ( 358,696, 156,912, 2,95495 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( 32,116, 1255,5, 4,57541 ); - ent.v[ "angles" ] = ( 358,905, 152,917, 3,03862 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust_side" ); - ent.v[ "origin" ] = ( 829,544, -1658,73, -6,99999 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 36 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust_side" ); - ent.v[ "origin" ] = ( 1138,93, -1988,61, -21,4837 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 34 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust_side" ); - ent.v[ "origin" ] = ( 744,385, 1521,01, -16 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 326 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1010; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust_side2" ); - ent.v[ "origin" ] = ( 96,533, -325,943, -24,8184 ); - ent.v[ "angles" ] = ( 344,927, 2,59774, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1005; - ent = maps/mp/_utility::createexploder( "fx_mp_express_train_dust_side2" ); - ent.v[ "origin" ] = ( 72,3679, 59,1355, -18,7997 ); - ent.v[ "angles" ] = ( 344,927, 2,59774, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1006; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 321,841, -335,237, 116,827 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 302,996, -418,976, 116,437 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 280,851, -426,961, 116,467 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 367,523, -321,819, 116,487 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 324,799, -480,676, 116,288 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 303,406, -487,594, 116,459 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 448,491, -592,578, 116,231 ); - ent.v[ "angles" ] = ( 90, 0, -109 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 497,751, -714,566, 116,64 ); - ent.v[ "angles" ] = ( 90, 0, -112 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 472,131, -654,851, 116,52 ); - ent.v[ "angles" ] = ( 90, 180, 71 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 420,888, -512,917, 116,513 ); - ent.v[ "angles" ] = ( 90, 180, 71 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 522,794, -772,595, 115,436 ); - ent.v[ "angles" ] = ( 90, 356,424, -116,576 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 548,732, -830,549, 116,398 ); - ent.v[ "angles" ] = ( 90, 0, -115 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 572,448, -881,352, 116,7 ); - ent.v[ "angles" ] = ( 90, 0, -116 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 608,264, -956,985, 116,223 ); - ent.v[ "angles" ] = ( 90, 0, -117 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 639,5, -1012,87, 115,526 ); - ent.v[ "angles" ] = ( 90, 0, -118 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 673,834, -1072,71, 116,448 ); - ent.v[ "angles" ] = ( 90, 0, -119 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 702,529, -1131,45, 116,528 ); - ent.v[ "angles" ] = ( 90, 0, -120 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 729,194, -1191,58, 116,239 ); - ent.v[ "angles" ] = ( 90, 0, -121 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 833,442, -1359,8, 116,487 ); - ent.v[ "angles" ] = ( 90, 0, -121 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 869,018, -1410,07, 116,526 ); - ent.v[ "angles" ] = ( 90, 0, -123 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 911,295, -1464,28, 116,699 ); - ent.v[ "angles" ] = ( 90, 0, -124 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 951,238, -1516,28, 116,059 ); - ent.v[ "angles" ] = ( 90, 354,289, -131,711 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 751,261, -1231,1, 115,826 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 683,737, -1273,96, 116,576 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 665,447, -1284,32, 116,446 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 793,754, -1303,05, 116,56 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 724,165, -1344,47, 116,62 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 707,857, -1356,69, 116,716 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 423,83, 509,915, 116,072 ); - ent.v[ "angles" ] = ( 90, 180, 109 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 449,814, 588,752, 116,023 ); - ent.v[ "angles" ] = ( 90, 0, -70 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 476,756, 648,723, 116,216 ); - ent.v[ "angles" ] = ( 90, 180, 111 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 497,694, 711,005, 115,296 ); - ent.v[ "angles" ] = ( 90, 0, -68 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 522,956, 770,785, 115,92 ); - ent.v[ "angles" ] = ( 90, 180, 114 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 546,263, 829,552, 115,207 ); - ent.v[ "angles" ] = ( 90, 0, -65 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 573,589, 879,456, 116,203 ); - ent.v[ "angles" ] = ( 90, 0, -65 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 612,652, 954,341, 116,202 ); - ent.v[ "angles" ] = ( 90, 0, -61 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 639,234, 1011,42, 115,917 ); - ent.v[ "angles" ] = ( 90, 0, -64 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 669,696, 1071,27, 116,259 ); - ent.v[ "angles" ] = ( 90, 0, -62 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 701,67, 1129,17, 115,208 ); - ent.v[ "angles" ] = ( 90, 0, -62 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 733,587, 1191,12, 116,088 ); - ent.v[ "angles" ] = ( 90, 0, -62 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 825,314, 1364,26, 115,917 ); - ent.v[ "angles" ] = ( 90, 0, -58 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 864,208, 1414,96, 115,785 ); - ent.v[ "angles" ] = ( 90, 0, -57 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 899,919, 1466,14, 115,487 ); - ent.v[ "angles" ] = ( 90, 0, -54 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_5" ); - ent.v[ "origin" ] = ( 941,677, 1519,63, 115,287 ); - ent.v[ "angles" ] = ( 90, 180, 127 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 318,453, 330,175, 116,692 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 368,513, 320,402, 116,706 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 400,859, 390,454, 116,527 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 378,052, 399,519, 115,45 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 310,648, 420,936, 116,607 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 289,797, 428,453, 116,005 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 421,898, 446,089, 116,656 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 399,327, 454,697, 116,508 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 325,82, 481,623, 116,486 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 304,357, 486,917, 116,088 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 672,015, 1298,09, 115,205 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 690,486, 1289,09, 116,705 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 763,236, 1245,22, 116,495 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 803,491, 1319,2, 116,661 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 864,41, 1282,24, 115,779 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 732,189, 1364,03, 116,706 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 712,576, 1376,36, 115,208 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 403,536, -452,892, 116,743 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 426,259, -446,395, 116,495 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 384,944, -392,286, 116,7 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( 404,758, -386,695, 116,711 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( -901,354, -468,762, 91,2858 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( -1008,32, -468,396, 90,9271 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( -901,909, -259,425, 90,9863 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( -1008,43, -258,058, 90,9379 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( -848,715, -365,584, 120,117 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( -953,693, -365,871, 119,957 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( -1049,42, -370,366, 117,001 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( -1008,01, 476,723, 91,9487 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( -901,299, 476,522, 91,9177 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( -1008,18, 265,401, 90,9992 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( -900,81, 265,054, 91,8765 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( -849,857, 368,743, 118,922 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( -953,152, 368,135, 118,007 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_hall_light_one" ); - ent.v[ "origin" ] = ( -1056,79, 368,777, 118,924 ); - ent.v[ "angles" ] = ( 90, 53,5508, 128,551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_train_side_light" ); - ent.v[ "origin" ] = ( 179,523, -1503,2, 4,35467 ); - ent.v[ "angles" ] = ( 356,856, 209,925, 0,736721 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_ceiling_light_small" ); - ent.v[ "origin" ] = ( 504,787, -102,438, 184 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( 102,171, 1339,63, 189,125 ); - ent.v[ "angles" ] = ( 1,87872, 316,291, 64,0532 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( 173,443, 1293,26, 188,125 ); - ent.v[ "angles" ] = ( 18,1743, 135,86, -59,5429 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 931,368, 2582,1, -31 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_low" ); - ent.v[ "origin" ] = ( 885,886, -2508,28, -58 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 685,596, -2336,12, -56,3496 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_express_sun1" ); - ent.v[ "origin" ] = ( -193528, 3894,04, 95755,8 ); - ent.v[ "angles" ] = ( 316,36, 196,247, 7,90639 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( -282,609, -337,792, 38,2029 ); - ent.v[ "angles" ] = ( 358,436, 255,798, 68,9546 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( -276,036, 372,584, 45,2063 ); - ent.v[ "angles" ] = ( 359,697, 75,08, -59,9623 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( -121,294, 882,099, 48,2033 ); - ent.v[ "angles" ] = ( 358,437, 255,798, 55,9545 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( -124,927, -852,162, 50,2006 ); - ent.v[ "angles" ] = ( 2,10251, 108,765, -52,2021 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( -599,577, 215,274, 175,16 ); - ent.v[ "angles" ] = ( 360, 90, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( -643,794, 215,271, 177,81 ); - ent.v[ "angles" ] = ( 360, 90, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( -1023,14, 186,754, 123,598 ); - ent.v[ "angles" ] = ( 9, 270, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( -1067,38, 186,729, 119,984 ); - ent.v[ "angles" ] = ( 9, 270, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -130,857, 1077,79, 20,3183 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 82 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( -1023,3, -186,739, 122,755 ); - ent.v[ "angles" ] = ( 360, 90, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( -1063,64, -186,737, 121,896 ); - ent.v[ "angles" ] = ( 360, 90, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1688,08, -865,547, -80,875 ); - ent.v[ "angles" ] = ( 356,347, 80,4128, -1,85498 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1740,23, 844,492, -86,875 ); - ent.v[ "angles" ] = ( 357,27, 270,333, 1,15472 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( -1051,18, 205,888, 65,9191 ); - ent.v[ "angles" ] = ( 1,14623, 178,3, -28,3207 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_slums" ); - ent.v[ "origin" ] = ( -381,614, 889,597, 44 ); - ent.v[ "angles" ] = ( 321, 155, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_slums" ); - ent.v[ "origin" ] = ( -270,759, 1189,07, 12,125 ); - ent.v[ "angles" ] = ( 321, 155, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_slums" ); - ent.v[ "origin" ] = ( 209,25, 1816,83, 68 ); - ent.v[ "angles" ] = ( 321,28, 140,864, 5,89672 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_slums" ); - ent.v[ "origin" ] = ( -281,885, -932,34, 46 ); - ent.v[ "angles" ] = ( 323,967, 186,381, -1,02081 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_slums" ); - ent.v[ "origin" ] = ( -224,825, -1199,61, -4,1069 ); - ent.v[ "angles" ] = ( 323,967, 186,381, -1,02081 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_slums" ); - ent.v[ "origin" ] = ( 277,828, -1986,83, 105,651 ); - ent.v[ "angles" ] = ( 323,967, 186,381, -1,02081 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( 57,2083, -1060,42, 45,2003 ); - ent.v[ "angles" ] = ( 34,589, 339,642, -27,7829 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( -194,668, 59,6114, 51,3126 ); - ent.v[ "angles" ] = ( 338,767, 251,389, -44,8256 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( -196,644, -31,345, 55,2059 ); - ent.v[ "angles" ] = ( 333,251, 245,042, -42,24 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( -199,892, -38,2818, 54,2061 ); - ent.v[ "angles" ] = ( 31,3247, 58,9794, 39,2928 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( -196,479, 45,6401, 50,1972 ); - ent.v[ "angles" ] = ( 39,0908, 43,1795, 29,9922 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -255,854, -145,431, 33,1945 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 85 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 17,7745, -1083,87, 24,2003 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 110 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -100,48, 776,088, 40,1935 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 69 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 1579,77, 2305,33, -32,6681 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 1626,15, 2299,32, -8,50859 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 1724,93, 2173,69, -19,3444 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 1719,93, -2168,03, -20,3786 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 1610,04, -2279,19, -3,2757 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -197,608, -1208,27, 44,4412 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -350,993, 1065,77, 41,5727 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -172,332, 1214,72, 32,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 1557,48, 2284,43, -35,3048 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 1768,44, -2170,23, -37,3464 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 1722,7, -2268, 71,9732 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -59,3688, -467,715, -54,3219 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 86 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -38,3634, 744,013, -53,1034 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 41 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_police_car" ); - ent.v[ "origin" ] = ( -1565,89, 2432,24, -286 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 214,8 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_police_car" ); - ent.v[ "origin" ] = ( -1566,52, 1095,24, -285,438 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 214,6 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_police_car" ); - ent.v[ "origin" ] = ( -1221,29, 655,636, -286 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 33 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_police_car" ); - ent.v[ "origin" ] = ( -1256,54, -697,131, -286 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 151,6 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_police_car" ); - ent.v[ "origin" ] = ( 3786,58, -811,18, -280 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 170,4 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_flood_light" ); - ent.v[ "origin" ] = ( 1744,17, 2285,01, 81,7873 ); - ent.v[ "angles" ] = ( 1,03533, 249,93, -0,334176 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_flood_light_beam" ); - ent.v[ "origin" ] = ( 1742,27, 2281,49, 79,6697 ); - ent.v[ "angles" ] = ( 21,2134, 287,881, -5,96969 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_flood_light" ); - ent.v[ "origin" ] = ( 1736,27, 2295,67, 82,3763 ); - ent.v[ "angles" ] = ( 0,356206, 196,93, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_flood_light_beam" ); - ent.v[ "origin" ] = ( 1730,24, 2292,12, 82,3454 ); - ent.v[ "angles" ] = ( 28,8562, 147,929, -172,609 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_flood_light" ); - ent.v[ "origin" ] = ( 1728,84, -2285,57, 80,6648 ); - ent.v[ "angles" ] = ( 1,03535, 169,93, -0,334179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_flood_light_beam" ); - ent.v[ "origin" ] = ( 1720,86, -2280,98, 78,5471 ); - ent.v[ "angles" ] = ( 17,8977, 205,073, -6,83147 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_flood_light" ); - ent.v[ "origin" ] = ( 1738,62, -2276,69, 81,2538 ); - ent.v[ "angles" ] = ( 0,356214, 116,93, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_express_flood_light_beam" ); - ent.v[ "origin" ] = ( 1734,07, -2271,37, 78,2229 ); - ent.v[ "angles" ] = ( 15,9537, 66,2045, -173,271 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 1724,81, 2280,89, 72,8578 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( -1109,03, 320,483, 74,125 ); - ent.v[ "angles" ] = ( 40,003, 176,672, 1,28912 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_vista_smoke01" ); - ent.v[ "origin" ] = ( -41399,3, -234,981, 9526,94 ); - ent.v[ "angles" ] = ( 292,951, 26,6725, 20,2475 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_vista_smoke01" ); - ent.v[ "origin" ] = ( -35552, 17195,8, 10659,4 ); - ent.v[ "angles" ] = ( 284,622, 35,7853, 23,223 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_vista_smoke01" ); - ent.v[ "origin" ] = ( -37362,6, 13541,6, 6977,84 ); - ent.v[ "angles" ] = ( 274, 89,9949, 26,004 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_vista_smoke01" ); - ent.v[ "origin" ] = ( -39960,2, 1625,92, 7604,65 ); - ent.v[ "angles" ] = ( 299,51, 52,1825, 52,2727 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_vista_fire01" ); - ent.v[ "origin" ] = ( -41302,4, -209,357, 9305,93 ); - ent.v[ "angles" ] = ( 0, 357, 19 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_vista_fire01" ); - ent.v[ "origin" ] = ( -41506,9, 1540,31, 7070,19 ); - ent.v[ "angles" ] = ( 3,48203, 332,944, -13,8901 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_vista_fire01" ); - ent.v[ "origin" ] = ( -37845,4, 13601,6, 6883,59 ); - ent.v[ "angles" ] = ( 13,1745, 25,7166, 20,3595 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_vista_fire01" ); - ent.v[ "origin" ] = ( -37253,6, 17549,5, 10688,4 ); - ent.v[ "angles" ] = ( 4,39891, 33,1717, 43,9386 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -756,344, 3,62298, 126,625 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_express" ); - ent.v[ "origin" ] = ( 419,38, 227,445, -10,875 ); - ent.v[ "angles" ] = ( 320,056, 174,828, -176,369 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_express" ); - ent.v[ "origin" ] = ( 349,346, 56,1756, -15,875 ); - ent.v[ "angles" ] = ( 318,06, 174,658, -176,258 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_express" ); - ent.v[ "origin" ] = ( 392,553, -67,2389, -15,875 ); - ent.v[ "angles" ] = ( 317,951, 182,732, 178,335 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_express" ); - ent.v[ "origin" ] = ( 355,788, -159,05, -9,875 ); - ent.v[ "angles" ] = ( 319,93, 181,442, -178,8 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_express" ); - ent.v[ "origin" ] = ( 413,869, -248,048, -15,875 ); - ent.v[ "angles" ] = ( 312,22, 175,581, -173,868 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_vista_fire01" ); - ent.v[ "origin" ] = ( -41148,2, 1405,53, 10249,3 ); - ent.v[ "angles" ] = ( 3, 331, -14 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_vista_smoke01" ); - ent.v[ "origin" ] = ( -21655,4, -8472, 1199,19 ); - ent.v[ "angles" ] = ( 320,314, 79,9974, 30,4147 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_vista_smoke01" ); - ent.v[ "origin" ] = ( -39643,5, 1732,45, 10848 ); - ent.v[ "angles" ] = ( 293,003, 5,68765, 94,4744 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( 1431,7, -2081,46, -57,6439 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 136 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( 1041,92, -1442,63, -16 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 182 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( 373,369, 586,013, -16 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 346 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( 1597,37, 2260,26, -56,4586 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 241 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( 139,696, 1348,45, 128,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 46 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( 705,478, 1000,37, 128,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 115 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( 1212,28, 238,896, -15,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 213 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( 1203,74, -232,88, -15,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 156 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( 674,339, -1132,51, 128,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 187 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( 147,871, -1354,05, 128,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 12 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( -593,865, -782,896, -40 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( -587,496, 794,383, -40 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 31 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( 54,3967, 1988,72, -15,8586 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 42 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( 864,499, -70,0208, -15,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 158 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( 871,996, 38,428, -15,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 343 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); - ent.v[ "origin" ] = ( 2596,41, -147,93, -280 ); - ent.v[ "angles" ] = ( 323,312, 176,372, 2,16989 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); - ent.v[ "origin" ] = ( 2588,56, 122,561, -280 ); - ent.v[ "angles" ] = ( 323,854, 177,669, 1,37747 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); - ent.v[ "origin" ] = ( 2569,79, 320,658, -280 ); - ent.v[ "angles" ] = ( 323,854, 177,669, 0,377455 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); - ent.v[ "origin" ] = ( 3096,49, -363,051, -271,831 ); - ent.v[ "angles" ] = ( 323,854, 177,669, -1,62255 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); - ent.v[ "origin" ] = ( 3083,54, -172,68, -282,723 ); - ent.v[ "angles" ] = ( 323,312, 176,372, 2,16989 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); - ent.v[ "origin" ] = ( 3075,68, 97,8114, -282,723 ); - ent.v[ "angles" ] = ( 323,854, 177,669, 1,37747 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); - ent.v[ "origin" ] = ( 3056,92, 295,908, -282,723 ); - ent.v[ "angles" ] = ( 323,854, 177,669, 0,377455 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); - ent.v[ "origin" ] = ( 3528,21, -332,792, -250,831 ); - ent.v[ "angles" ] = ( 323,854, 177,669, -1,62255 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); - ent.v[ "origin" ] = ( 3515,26, -142,421, -261,723 ); - ent.v[ "angles" ] = ( 323,312, 176,372, 2,16989 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); - ent.v[ "origin" ] = ( 3507,4, 128,07, -261,723 ); - ent.v[ "angles" ] = ( 323,854, 177,669, 1,37747 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_express2" ); - ent.v[ "origin" ] = ( 3488,64, 326,167, -261,723 ); - ent.v[ "angles" ] = ( 323,854, 177,669, 0,377455 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 781,585, 837,429, 161,125 ); - ent.v[ "angles" ] = ( 8,44865, 292,982, 0,50436 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 772,838, -920,961, 181,292 ); - ent.v[ "angles" ] = ( 13,7035, 67,9494, -0,334405 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( -456,646, -37,3364, 78,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 226 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( -701,479, 149,945, 78,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 271 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( -875,325, 286,317, -39,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 62 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 1002,73, -2661,38, -62,3477 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 664,442, 2312,15, -62,3567 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 995,138, 2656,53, -55,3534 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; -} diff --git a/Multiplayer Maps/mp_express/maps/mp/mp_express.gsc b/Multiplayer Maps/mp_express/maps/mp/mp_express.gsc deleted file mode 100644 index e926040..0000000 --- a/Multiplayer Maps/mp_express/maps/mp/mp_express.gsc +++ /dev/null @@ -1,65 +0,0 @@ -#include maps/mp/mp_express_train; -#include maps/mp/_compass; -#include common_scripts/utility; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_express_fx::main(); - maps/mp/_load::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_express" ); - maps/mp/mp_express_amb::main(); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - registerclientfield( "vehicle", "train_moving", 1, 1, "int" ); - registerclientfield( "scriptmover", "train_moving", 1, 1, "int" ); - if ( getgametypesetting( "allowMapScripting" ) ) - { - maps/mp/mp_express_train::init(); - } -/# - level thread devgui_express(); - execdevgui( "devgui_mp_express" ); -#/ -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "1900", reset_dvars ); -} - -devgui_express() -{ -/# - setdvar( "devgui_notify", "" ); - for ( ;; ) - { - wait 0,5; - devgui_string = getDvar( "devgui_notify" ); - switch( devgui_string ) - { - case "": - break; - case "train_start": - level notify( "train_start" ); - break; - default: - } - if ( getDvar( "devgui_notify" ) != "" ) - { - setdvar( "devgui_notify", "" ); - } -#/ - } - } -} diff --git a/Multiplayer Maps/mp_express/maps/mp/mp_express_amb.gsc b/Multiplayer Maps/mp_express/maps/mp/mp_express_amb.gsc deleted file mode 100644 index b4b1b37..0000000 --- a/Multiplayer Maps/mp_express/maps/mp/mp_express_amb.gsc +++ /dev/null @@ -1,16 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; -#include common_scripts/utility; - -main() -{ - array_thread( getentarray( "advertisement", "targetname" ), ::advertisements ); -} - -advertisements() -{ - self playloopsound( "amb_" + self.script_noteworthy + "_ad" ); - self waittill( "damage" ); - self stoploopsound(); - self playloopsound( "amb_" + self.script_noteworthy + "_damaged_ad" ); -} diff --git a/Multiplayer Maps/mp_express/maps/mp/mp_express_fx.gsc b/Multiplayer Maps/mp_express/maps/mp/mp_express_fx.gsc deleted file mode 100644 index 22908b1..0000000 --- a/Multiplayer Maps/mp_express/maps/mp/mp_express_fx.gsc +++ /dev/null @@ -1,58 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); - -main() -{ - precache_fxanim_props(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_express_fx::main(); - maps/mp/createart/mp_express_art::main(); -} - -precache_scripted_fx() -{ - level._effect[ "fx_mp_debris_papers" ] = loadfx( "maps/mp_maps/fx_mp_debris_papers" ); - level._effect[ "fx_paper_interior_short" ] = loadfx( "debris/fx_paper_interior_short" ); - level._effect[ "fx_mp_light_dust_motes_md" ] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); - level._effect[ "fx_mp_fog_low" ] = loadfx( "maps/mp_maps/fx_mp_fog_low" ); - level._effect[ "fx_mp_express_train_blow_dust" ] = loadfx( "maps/mp_maps/fx_mp_express_train_blow_dust" ); - level._effect[ "fx_mp_express_fog_water" ] = loadfx( "maps/mp_maps/fx_mp_express_fog_water" ); - level._effect[ "fx_mp_fumes_vent_xsm_int" ] = loadfx( "maps/mp_maps/fx_mp_fumes_vent_xsm_int" ); - level._effect[ "fx_mp_vent_heat_distort" ] = loadfx( "maps/mp_maps/fx_mp_vent_heat_distort" ); - level._effect[ "fx_insects_swarm_dark_lg" ] = loadfx( "bio/insects/fx_insects_swarm_dark_lg" ); - level._effect[ "fx_mp_debris_papers_narrow" ] = loadfx( "maps/mp_maps/fx_mp_debris_papers_narrow" ); - level._effect[ "fx_insects_swarm_lg_light" ] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); - level._effect[ "fx_insects_swarm_md_light" ] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); - level._effect[ "fx_mp_express_train_dust_side2" ] = loadfx( "maps/mp_maps/fx_mp_express_train_dust_side2" ); - level._effect[ "fx_mp_express_train_dust" ] = loadfx( "maps/mp_maps/fx_mp_express_train_dust" ); - level._effect[ "fx_mp_express_train_dust_side" ] = loadfx( "maps/mp_maps/fx_mp_express_train_dust_side" ); - level._effect[ "fx_lf_mp_express_sun1" ] = loadfx( "lens_flares/fx_lf_mp_express_sun1" ); - level._effect[ "fx_light_god_ray_mp_express" ] = loadfx( "env/light/fx_light_god_ray_mp_express" ); - level._effect[ "fx_light_god_ray_mp_express2" ] = loadfx( "env/light/fx_light_god_ray_mp_express2" ); - level._effect[ "fx_window_god_ray" ] = loadfx( "light/fx_window_god_ray" ); - level._effect[ "fx_express_ceiling_light_big" ] = loadfx( "light/fx_express_ceiling_light_big" ); - level._effect[ "fx_express_ceiling_light_small" ] = loadfx( "light/fx_express_ceiling_light_small" ); - level._effect[ "fx_window_god_ray_sm" ] = loadfx( "light/fx_window_god_ray_sm" ); - level._effect[ "fx_express_train_side_light" ] = loadfx( "light/fx_express_train_side_light" ); - level._effect[ "fx_express_hall_light_one" ] = loadfx( "light/fx_express_hall_light_one" ); - level._effect[ "fx_express_hall_light_5" ] = loadfx( "light/fx_express_hall_light_5" ); - level._effect[ "fx_light_god_ray_mp_slums" ] = loadfx( "env/light/fx_light_god_ray_mp_slums" ); - level._effect[ "fx_express_ceiling_light_xsm" ] = loadfx( "light/fx_express_ceiling_light_xsm" ); - level._effect[ "fx_mp_light_police_car" ] = loadfx( "maps/mp_maps/fx_mp_light_police_car" ); - level._effect[ "fx_drone_rectangle_light_03" ] = loadfx( "light/fx_drone_rectangle_light_03" ); - level._effect[ "fx_express_flood_light" ] = loadfx( "light/fx_express_flood_light" ); - level._effect[ "fx_express_flood_light_beam" ] = loadfx( "light/fx_express_flood_light_beam" ); - level._effect[ "fx_mp_express_vista_smoke01" ] = loadfx( "maps/mp_maps/fx_mp_express_vista_smoke01" ); - level._effect[ "fx_mp_express_vista_fire01" ] = loadfx( "maps/mp_maps/fx_mp_express_vista_fire01" ); -} - -precache_createfx_fx() -{ -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "banner_side_thin" ] = %fxanim_mp_express_banner_side_thin_anim; -} diff --git a/Multiplayer Maps/mp_express/maps/mp/mp_express_train.gsc b/Multiplayer Maps/mp_express/maps/mp/mp_express_train.gsc deleted file mode 100644 index b067d63..0000000 --- a/Multiplayer Maps/mp_express/maps/mp/mp_express_train.gsc +++ /dev/null @@ -1,651 +0,0 @@ -#include maps/mp/killstreaks/_supplydrop; -#include maps/mp/gametypes/_gameobjects; -#include maps/mp/gametypes/ctf; -#include maps/mp/gametypes/_weaponobjects; -#include maps/mp/killstreaks/_rcbomb; -#include maps/mp/_tacticalinsertion; -#include maps/mp/_events; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - precachevehicle( "express_train_engine_mp" ); - precachemodel( "p6_bullet_train_car_phys" ); - precachemodel( "p6_bullet_train_engine_rev" ); - precacheshader( "compass_train_carriage" ); - precachestring( &"traincar" ); - precachestring( &"trainengine" ); - gates = getentarray( "train_gate_rail", "targetname" ); - brushes = getentarray( "train_gate_rail_brush", "targetname" ); - triggers = getentarray( "train_gate_kill_trigger", "targetname" ); - traintriggers = getentarray( "train_kill_trigger", "targetname" ); - _a22 = brushes; - _k22 = getFirstArrayKey( _a22 ); - while ( isDefined( _k22 ) ) - { - brush = _a22[ _k22 ]; - brush disconnectpaths(); - _k22 = getNextArrayKey( _a22, _k22 ); - } - waittime = 0,05; - _a28 = gates; - _k28 = getFirstArrayKey( _a28 ); - while ( isDefined( _k28 ) ) - { - gate = _a28[ _k28 ]; - gate.waittime = waittime; - waittime += 0,05; - gate.og_origin = gate.origin; - brush = getclosest( gate.origin, brushes ); - brush linkto( gate ); - gate.kill_trigger = getclosest( gate.origin, triggers ); - if ( isDefined( gate.kill_trigger ) ) - { - gate.kill_trigger enablelinkto(); - gate.kill_trigger linkto( gate ); - } - _k28 = getNextArrayKey( _a28, _k28 ); - } - start = getvehiclenode( "train_start", "targetname" ); - endgates = getentarray( "train_gate_rail_end", "targetname" ); - entrygate = getclosest( start.origin, endgates ); - i = 0; - while ( i < endgates.size ) - { - if ( endgates[ i ] == entrygate ) - { - i++; - continue; - } - else - { - exitgate = endgates[ i ]; - break; - } - i++; - } - cars = []; - cars[ 0 ] = spawnvehicle( "p6_bullet_train_engine_phys", "train", "express_train_engine_mp", start.origin, ( 0, 0, 1 ) ); - cars[ 0 ] ghost(); - cars[ 0 ] setcheapflag( 1 ); - _a64 = traintriggers; - _k64 = getFirstArrayKey( _a64 ); - while ( isDefined( _k64 ) ) - { - traintrigger = _a64[ _k64 ]; - cars[ 0 ].trainkilltrigger = traintrigger; - traintrigger.origin = start.origin; - traintrigger enablelinkto(); - traintrigger linkto( cars[ 0 ] ); - _k64 = getNextArrayKey( _a64, _k64 ); - } - i = 1; - while ( i < 20 ) - { - cars[ i ] = spawn( "script_model", start.origin ); - cars[ i ] setmodel( "p6_bullet_train_car_phys" ); - cars[ i ] ghost(); - cars[ i ] setcheapflag( 1 ); - i++; - } - cars[ 20 ] = spawn( "script_model", start.origin ); - cars[ 20 ] setmodel( "p6_bullet_train_engine_rev" ); - cars[ 20 ] ghost(); - cars[ 20 ] setcheapflag( 1 ); - if ( level.timelimit ) - { - seconds = level.timelimit * 60; - add_timed_event( int( seconds * 0,25 ), "train_start" ); - add_timed_event( int( seconds * 0,75 ), "train_start" ); - } - else - { - if ( level.scorelimit ) - { - add_score_event( int( level.scorelimit * 0,25 ), "train_start" ); - add_score_event( int( level.scorelimit * 0,75 ), "train_start" ); - } - } - level thread train_think( gates, entrygate, exitgate, cars, start ); -} - -showaftertime( time ) -{ - wait time; - self show(); -} - -train_think( gates, entrygate, exitgate, cars, start ) -{ - level endon( "game_ended" ); - for ( ;; ) - { - level waittill( "train_start" ); - entrygate gate_move( -172 ); - traintiming = getdvarfloatdefault( "scr_express_trainTiming", 4 ); - exitgate thread waitthenmove( traintiming, -172 ); - array_func( gates, ::gate_move, -172 ); - _a121 = gates; - _k121 = getFirstArrayKey( _a121 ); - while ( isDefined( _k121 ) ) - { - gate = _a121[ _k121 ]; - gate playloopsound( "amb_train_incomming_beep" ); - gate playsound( "amb_gate_move" ); - _k121 = getNextArrayKey( _a121, _k121 ); - } - gatedownwait = getdvarintdefault( "scr_express_gateDownWait", 2 ); - wait gatedownwait; - _a129 = gates; - _k129 = getFirstArrayKey( _a129 ); - while ( isDefined( _k129 ) ) - { - gate = _a129[ _k129 ]; - gate stoploopsound( 2 ); - _k129 = getNextArrayKey( _a129, _k129 ); - } - wait 2; - cars[ 0 ] attachpath( start ); - if ( isDefined( cars[ 0 ].trainkilltrigger ) ) - { - cars[ 0 ] thread train_move_think( cars[ 0 ].trainkilltrigger ); - } - cars[ 0 ] startpath(); - cars[ 0 ] showaftertime( 0,2 ); - cars[ 0 ] thread record_positions(); - cars[ 0 ] thread watch_end(); - cars[ 0 ] playloopsound( "amb_train_lp" ); - cars[ 0 ] setclientfield( "train_moving", 1 ); - next = "_b"; - i = 1; - while ( i < cars.size ) - { - if ( i == 1 ) - { - wait 0,4; - } - else - { - wait 0,35; - } - if ( i >= 3 && ( i % 3 ) == 0 ) - { - cars[ i ] playloopsound( "amb_train_lp" + next ); - switch( next ) - { - case "_b": - next = "_c"; - break; - break; - case "_c": - next = "_d"; - break; - break; - case "_d": - next = ""; - break; - break; - default: - next = "_b"; - break; - break; - } - } - cars[ i ] thread watch_player_touch(); - if ( i == ( cars.size - 1 ) ) - { - cars[ i ] thread car_move(); - i++; - continue; - } - else - { - cars[ i ] thread car_move(); - } - i++; - } - traintiming = getdvarfloatdefault( "scr_express_trainTiming2", 2 ); - entrygate thread waitthenmove( traintiming ); - gateupwait = getdvarfloatdefault( "scr_express_gateUpWait", 6,5 ); - wait gateupwait; - exitgate gate_move(); - array_func( gates, ::gate_move ); - _a205 = gates; - _k205 = getFirstArrayKey( _a205 ); - while ( isDefined( _k205 ) ) - { - gate = _a205[ _k205 ]; - gate playsound( "amb_gate_move" ); - _k205 = getNextArrayKey( _a205, _k205 ); - } - wait 6; - } -} - -waitthenmove( time, distance ) -{ - wait time; - self gate_move( distance ); -} - -record_positions() -{ - self endon( "reached_end_node" ); - if ( isDefined( level.train_positions ) ) - { - return; - } - level.train_positions = []; - level.train_angles = []; - for ( ;; ) - { - level.train_positions[ level.train_positions.size ] = self.origin; - level.train_angles[ level.train_angles.size ] = self.angles; - wait 0,05; - } -} - -watch_player_touch() -{ - self endon( "end_of_track" ); - self endon( "delete" ); - self endon( "death" ); - for ( ;; ) - { - self waittill( "touch", entity ); - if ( isplayer( entity ) ) - { - entity dodamage( entity.health * 2, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - } - } -} - -watch_end() -{ - self waittill( "reached_end_node" ); - self ghost(); - self setclientfield( "train_moving", 0 ); - self stoploopsound( 0,2 ); - self playsound( "amb_train_end" ); -} - -car_move() -{ - self setclientfield( "train_moving", 1 ); - i = 0; - while ( i < level.train_positions.size ) - { - self.origin = level.train_positions[ i ]; - self.angles = level.train_angles[ i ]; - wait 0,05; - if ( i == 4 ) - { - self show(); - } - i++; - } - self notify( "end_of_track" ); - self ghost(); - self setclientfield( "train_moving", 0 ); - self stoploopsound( 0,2 ); - self playsound( "amb_train_end" ); -} - -gate_rotate( yaw ) -{ - self rotateyaw( yaw, 5 ); -} - -gate_move( z_dist ) -{ - if ( isDefined( self.kill_trigger ) ) - { - self thread gate_move_think( isDefined( z_dist ) ); - } - if ( !isDefined( z_dist ) ) - { - self moveto( self.og_origin, 5 ); - } - else - { - self.og_origin = self.origin; - self movez( z_dist, 5 ); - } -} - -train_move_think( kill_trigger ) -{ - self endon( "movedone" ); - for ( ;; ) - { - wait 0,05; - pixbeginevent( "train_move_think" ); - entities = getdamageableentarray( self.origin, 200 ); - _a327 = entities; - _k327 = getFirstArrayKey( _a327 ); - while ( isDefined( _k327 ) ) - { - entity = _a327[ _k327 ]; - if ( isDefined( entity.targetname ) && entity.targetname == "train" ) - { - } - else - { - if ( isplayer( entity ) ) - { - break; - } - else if ( !entity istouching( kill_trigger ) ) - { - break; - } - else if ( isDefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" ) - { - entity maps/mp/_tacticalinsertion::destroy_tactical_insertion(); - break; - } - else - { - if ( !isalive( entity ) ) - { - break; - } - else if ( isDefined( entity.targetname ) ) - { - if ( entity.targetname == "talon" ) - { - entity notify( "death" ); - break; - } - else if ( entity.targetname == "rcbomb" ) - { - entity maps/mp/killstreaks/_rcbomb::rcbomb_force_explode(); - break; - } - else if ( entity.targetname == "riotshield_mp" ) - { - entity dodamage( 1, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - break; - } - } - else if ( isDefined( entity.helitype ) && entity.helitype == "qrdrone" ) - { - watcher = entity.owner maps/mp/gametypes/_weaponobjects::getweaponobjectwatcher( "qrdrone" ); - watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate( entity, 0, undefined ); - break; - } - else - { - if ( entity.classname == "grenade" ) - { - if ( !isDefined( entity.name ) ) - { - break; - } - else if ( !isDefined( entity.owner ) ) - { - break; - } - else if ( entity.name == "proximity_grenade_mp" ) - { - watcher = entity.owner getwatcherforweapon( entity.name ); - watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate( entity, 0, undefined, "script_mover_mp" ); - break; - } - else if ( !isweaponequipment( entity.name ) ) - { - break; - } - else watcher = entity.owner getwatcherforweapon( entity.name ); - if ( !isDefined( watcher ) ) - { - break; - } - else watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate( entity, 0, undefined, "script_mover_mp" ); - break; - } - else if ( entity.classname == "auto_turret" ) - { - if ( !isDefined( entity.damagedtodeath ) || !entity.damagedtodeath ) - { - entity domaxdamage( self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - } - break; - } - else - { - entity dodamage( entity.health * 2, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - } - } - } - } - _k327 = getNextArrayKey( _a327, _k327 ); - } - self destroy_supply_crates(); - if ( level.gametype == "ctf" ) - { - _a434 = level.flags; - _k434 = getFirstArrayKey( _a434 ); - while ( isDefined( _k434 ) ) - { - flag = _a434[ _k434 ]; - if ( flag.curorigin != flag.trigger.baseorigin && flag.visuals[ 0 ] istouching( kill_trigger ) ) - { - flag maps/mp/gametypes/ctf::returnflag(); - } - _k434 = getNextArrayKey( _a434, _k434 ); - } - } - else if ( level.gametype == "sd" && !level.multibomb ) - { - if ( level.sdbomb.visuals[ 0 ] istouching( kill_trigger ) ) - { - level.sdbomb maps/mp/gametypes/_gameobjects::returnhome(); - } - } - pixendevent(); - } -} - -gate_move_think( ignoreplayers ) -{ - self endon( "movedone" ); - corpse_delay = 0; - if ( isDefined( self.waittime ) ) - { - wait self.waittime; - } - for ( ;; ) - { - wait 0,4; - pixbeginevent( "gate_move_think" ); - entities = getdamageableentarray( self.origin, 100 ); - _a473 = entities; - _k473 = getFirstArrayKey( _a473 ); - while ( isDefined( _k473 ) ) - { - entity = _a473[ _k473 ]; - if ( ignoreplayers == 1 && isplayer( entity ) ) - { - } - else - { - if ( !entity istouching( self.kill_trigger ) ) - { - break; - } - else if ( isDefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" ) - { - entity maps/mp/_tacticalinsertion::destroy_tactical_insertion(); - break; - } - else - { - if ( !isalive( entity ) ) - { - break; - } - else if ( isDefined( entity.targetname ) ) - { - if ( entity.targetname == "talon" ) - { - entity notify( "death" ); - break; - } - else if ( entity.targetname == "rcbomb" ) - { - entity maps/mp/killstreaks/_rcbomb::rcbomb_force_explode(); - break; - } - else if ( entity.targetname == "riotshield_mp" ) - { - entity dodamage( 1, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - break; - } - } - else if ( isDefined( entity.helitype ) && entity.helitype == "qrdrone" ) - { - watcher = entity.owner maps/mp/gametypes/_weaponobjects::getweaponobjectwatcher( "qrdrone" ); - watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate( entity, 0, undefined ); - break; - } - else - { - if ( entity.classname == "grenade" ) - { - if ( !isDefined( entity.name ) ) - { - break; - } - else if ( !isDefined( entity.owner ) ) - { - break; - } - else if ( entity.name == "proximity_grenade_mp" ) - { - watcher = entity.owner getwatcherforweapon( entity.name ); - watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate( entity, 0, undefined, "script_mover_mp" ); - break; - } - else if ( !isweaponequipment( entity.name ) ) - { - break; - } - else watcher = entity.owner getwatcherforweapon( entity.name ); - if ( !isDefined( watcher ) ) - { - break; - } - else watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate( entity, 0, undefined, "script_mover_mp" ); - break; - } - else if ( entity.classname == "auto_turret" ) - { - if ( !isDefined( entity.damagedtodeath ) || !entity.damagedtodeath ) - { - entity domaxdamage( self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - } - break; - } - else - { - entity dodamage( entity.health * 2, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - } - } - } - } - _k473 = getNextArrayKey( _a473, _k473 ); - } - self destroy_supply_crates(); - if ( getTime() > corpse_delay ) - { - self destroy_corpses(); - } - if ( level.gametype == "ctf" ) - { - _a578 = level.flags; - _k578 = getFirstArrayKey( _a578 ); - while ( isDefined( _k578 ) ) - { - flag = _a578[ _k578 ]; - if ( flag.visuals[ 0 ] istouching( self.kill_trigger ) ) - { - flag maps/mp/gametypes/ctf::returnflag(); - } - _k578 = getNextArrayKey( _a578, _k578 ); - } - } - else if ( level.gametype == "sd" && !level.multibomb ) - { - if ( level.sdbomb.visuals[ 0 ] istouching( self.kill_trigger ) ) - { - level.sdbomb maps/mp/gametypes/_gameobjects::returnhome(); - } - } - pixendevent(); - } -} - -getwatcherforweapon( weapname ) -{ - if ( !isDefined( self ) ) - { - return undefined; - } - if ( !isplayer( self ) ) - { - return undefined; - } - i = 0; - while ( i < self.weaponobjectwatcherarray.size ) - { - if ( self.weaponobjectwatcherarray[ i ].weapon != weapname ) - { - i++; - continue; - } - else - { - return self.weaponobjectwatcherarray[ i ]; - } - i++; - } - return undefined; -} - -destroy_supply_crates() -{ - crates = getentarray( "care_package", "script_noteworthy" ); - _a628 = crates; - _k628 = getFirstArrayKey( _a628 ); - while ( isDefined( _k628 ) ) - { - crate = _a628[ _k628 ]; - if ( distancesquared( crate.origin, self.origin ) < 10000 ) - { - if ( crate istouching( self ) ) - { - playfx( level._supply_drop_explosion_fx, crate.origin ); - playsoundatposition( "wpn_grenade_explode", crate.origin ); - wait 0,1; - crate maps/mp/killstreaks/_supplydrop::cratedelete(); - } - } - _k628 = getNextArrayKey( _a628, _k628 ); - } -} - -destroy_corpses() -{ - corpses = getcorpsearray(); - i = 0; - while ( i < corpses.size ) - { - if ( distancesquared( corpses[ i ].origin, self.origin ) < 10000 ) - { - corpses[ i ] delete(); - } - i++; - } -} diff --git a/Multiplayer Maps/mp_frostbite/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_frostbite/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_frostbite/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_frostbite/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_frostbite/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_frostbite/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_frostbite/maps/mp/createfx/mp_frostbite_fx.gsc b/Multiplayer Maps/mp_frostbite/maps/mp/createfx/mp_frostbite_fx.gsc deleted file mode 100644 index bca61e4..0000000 --- a/Multiplayer Maps/mp_frostbite/maps/mp/createfx/mp_frostbite_fx.gsc +++ /dev/null @@ -1,2860 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -410,489, 345,821, 558,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 93 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -431,489, 871,849, 214,527 ); - ent.v[ "angles" ] = ( 347, 90, 0 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1246,37, 304,34, 189,397 ); - ent.v[ "angles" ] = ( 347, 90, 0 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1050,76, 314,52, 206,873 ); - ent.v[ "angles" ] = ( 347, 90, 0 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1115,24, 1032,81, 101,825 ); - ent.v[ "angles" ] = ( 347,877, 111,503, -4,72963 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1053,44, 1180,17, 108,399 ); - ent.v[ "angles" ] = ( 359,172, 123,419, -7,22717 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 983,494, 1598,5, 61,6371 ); - ent.v[ "angles" ] = ( 349,65, 127,717, -7,91001 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 818,352, 1591,27, 63,3892 ); - ent.v[ "angles" ] = ( 349,65, 127,717, -7,91001 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 678,869, 1602,85, 71,7692 ); - ent.v[ "angles" ] = ( 349,65, 127,717, -7,91001 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1584,13, 678,159, 124,486 ); - ent.v[ "angles" ] = ( 349,65, 127,717, -7,91001 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1800,8, 688,808, 126,639 ); - ent.v[ "angles" ] = ( 349,65, 127,717, -7,91001 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1301,85, 709,648, 130,766 ); - ent.v[ "angles" ] = ( 349,65, 127,717, -7,91001 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1350,78, 545,744, 132,122 ); - ent.v[ "angles" ] = ( 339,112, 104,574, 0,26208 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1606,44, 547,41, 125,742 ); - ent.v[ "angles" ] = ( 339,112, 104,574, 0,26208 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1859,05, 541,8, 121,616 ); - ent.v[ "angles" ] = ( 339,112, 104,574, 0,26208 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1711,23, -248,152, 119,149 ); - ent.v[ "angles" ] = ( 349,65, 127,717, -7,91001 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1585,66, -343,091, 141,168 ); - ent.v[ "angles" ] = ( 349,65, 127,717, -7,91001 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1578,81, -489,108, 144,886 ); - ent.v[ "angles" ] = ( 350,001, 93,0331, -0,996706 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2048,52, -531,028, 25,1159 ); - ent.v[ "angles" ] = ( 356,994, 87,982, 0 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 956,886, -106,427, 69,6195 ); - ent.v[ "angles" ] = ( 349,65, 127,717, -7,91001 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -193,875, -20,1535, 63,7605 ); - ent.v[ "angles" ] = ( 335,303, 102,934, -2,95054 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 147,72, 54,2082, 64,3255 ); - ent.v[ "angles" ] = ( 333,719, 118,933, -3,79815 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -572,565, -440,487, 64,125 ); - ent.v[ "angles" ] = ( 348,422, 98,22, 2,98695 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1606,71, 880,84, 110,08 ); - ent.v[ "angles" ] = ( 349,65, 127,717, -7,91001 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1415,67, 794,614, -7,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 112 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 896,915, 789,888, 56,1301 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 847,485, 1042,18, 0,742375 ); - ent.v[ "angles" ] = ( 354, 109, 0 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 964,191, 1168,55, 2,37129 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 110 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 438,593, 1612,08, 76,2332 ); - ent.v[ "angles" ] = ( 345, 142, 0 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 6,27805, 1143,96, -39,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 55 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -586,372, 1120,37, -7,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 76 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1161,95, 733,162, 65,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 76 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1318,87, 503,012, 64,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 41 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1639,08, 355,24, 64,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 41 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1622,95, 72,4744, 64,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 41 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1820,12, -253,217, 64,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 54 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1475,96, -443,467, 56,125 ); - ent.v[ "angles" ] = ( 355, 47, 0 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1409,93, -618,197, 64,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 62 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1426,87, -917,553, 0,125003 ); - ent.v[ "angles" ] = ( 345,084, 85,7899, 1,60435 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -105,279, -1188,07, 48,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 47 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 471,92, -815,453, -40,3381 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 119 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1447,43, -315,122, 48,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 100 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1452,07, -513,203, 21,0218 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1455,23, -192,242, 5,13793 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 86 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1726,22, -186,785, 4,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 80 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1761,9, 102,847, 5,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 80 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2169,18, 113,584, 18,125 ); - ent.v[ "angles" ] = ( 351, 108, 0 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2124,46, 523,848, 4,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 94 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2221,31, 848,326, 11,5135 ); - ent.v[ "angles" ] = ( 353, 116, 0 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1454,74, 241,055, -3,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 61 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1335,88, 376,854, 13,4588 ); - ent.v[ "angles" ] = ( 346, 40, 0 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1984,88, 283,926, -3,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 61 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1832,77, 735,174, -7,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 95 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1470,94, 598,016, 1,31151 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1014,62, 297,766, 47,9473 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 25 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 765,571, 287,984, 56,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 31 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 825,692, 23,3701, 66,1783 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 100 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 667,626, -187,924, 70,0544 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 100 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 404,235, -178,886, 66,3638 ); - ent.v[ "angles" ] = ( 351,138, 89,8779, 1,57542 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -198,611, -85,379, 62,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 73 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -373,343, -98,6424, 69,8701 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 64 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -553,452, -168,865, 75,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 55 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1507,88, 255,227, 64,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 101 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1194,86, -576,922, 64,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 73 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 813,295, 871,923, 354,766 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 760,55, 988,125, 363,46 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 517,585, 1024,08, 362,876 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 434,362, 907,079, 359,725 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 438,788, 846,343, 358,271 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_chunk_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 813,539, 862,23, 354,23 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_chunk_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 429,893, 862,586, 358,027 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 10,2365, 1441,62, -39,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 55 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -7,47807, 951,592, -39,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 55 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 221,355, 900,579, -39,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 121 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -94,9166, 646,579, -39,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 55 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -567,915, 776,265, 301,943 ); - ent.v[ "angles" ] = ( 347, 90, 0 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 136,442, -1097,94, 48,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 47 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 762,275, -491,978, 49,6536 ); - ent.v[ "angles" ] = ( 350,945, 85,6623, 4,26175 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1040,67, -958,227, 61,7022 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 56 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2488,57, 233,782, 8,37213 ); - ent.v[ "angles" ] = ( 349,111, 105,623, -0,113745 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2594, 587,095, 103,614 ); - ent.v[ "angles" ] = ( 339,112, 104,574, 0,262091 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2434,62, 500,223, 58,4831 ); - ent.v[ "angles" ] = ( 339,112, 104,574, 0,26208 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1353, -540,598, 71,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1947,27, -515,917, 64,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 60 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1601,17, 292,119, 64,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 52 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1779,07, -130,077, 64,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 50 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -887,939, -571,526, 65,256 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 67 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1527,44, -1146,04, 3,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 67 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -148,638, -1125,93, 48,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 52 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 197,25, -1129,5, 48,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 61 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 805,686, -935,813, 48,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 61 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 646,383, -763,118, 50 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 82 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1126,07, -941,536, 48 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 54 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1358,37, -193,483, 16,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 82 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1676,54, 15,1295, 7,125 ); - ent.v[ "angles" ] = ( 360, 51, 3 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1098,81, 257,341, 47,4326 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 54 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2084,11, 130,564, 7,50085 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 108 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1474,77, 631,001, 0,37949 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1187,07, 849,917, -7,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 847,56, 967,599, -7,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 84 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 825,005, 1380,25, -7,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 84 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 30,2135, 1304,47, -39,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 63 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 15,5181, 835,403, -39,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 63 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -104,706, 952,34, 24,125 ); - ent.v[ "angles" ] = ( 0, 85, 1 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -480,859, 1329,24, -7,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 64 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -592,442, 879,355, -7,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 67 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -420,421, 1398,45, -7,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 61 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -197,19, 1456,79, 29,2276 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 61 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -470,375, 1514,91, 51,4339 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 61 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 583,758, 1005,74, 474,885 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 93 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1602,64, -353,816, 62,125 ); - ent.v[ "angles" ] = ( 359, 81, 0 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1714,87, -507,254, 62,1776 ); - ent.v[ "angles" ] = ( 359,015, 71, 0,173688 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1551,09, 151,876, 64,125 ); - ent.v[ "angles" ] = ( 359,015, 71, 0,173688 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1187,68, 452,858, 67,125 ); - ent.v[ "angles" ] = ( 359,007, 74, 0,121898 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -538,22, 974,872, -7,87501 ); - ent.v[ "angles" ] = ( 359,007, 74, 0,121898 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -451,847, 1356,68, -7,875 ); - ent.v[ "angles" ] = ( 359,073, 59, 0,37468 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 58,556, 1288,42, -39,875 ); - ent.v[ "angles" ] = ( 359, 80, 0 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -29,3202, 808,395, -39,875 ); - ent.v[ "angles" ] = ( 359,018, 70, 0,190945 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 364,882, 792,158, 48,125 ); - ent.v[ "angles" ] = ( 341,026, 94,0735, 1,76206 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 230,171, 318,859, -36,875 ); - ent.v[ "angles" ] = ( 359,054, 100, -0,325766 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -81,1179, 222,964, -39,875 ); - ent.v[ "angles" ] = ( 359, 82, 0 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 88,5941, -462,377, -39,875 ); - ent.v[ "angles" ] = ( 359,015, 89, -0,173688 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 353,471, -575,646, -39,7823 ); - ent.v[ "angles" ] = ( 359,161, 114,003, -0,545049 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -628,694, -610,456, 64,125 ); - ent.v[ "angles" ] = ( 359, 82, 0 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -937,376, -563,239, 64,125 ); - ent.v[ "angles" ] = ( 359,086, 57, 0,406987 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1470,85, -687,672, 64,125 ); - ent.v[ "angles" ] = ( 359,007, 74, 0,121938 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1372,22, -1214,14, 0,124999 ); - ent.v[ "angles" ] = ( 359,048, 63, 0,309198 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -453,814, -118,852, 59,125 ); - ent.v[ "angles" ] = ( 359,412, 27, 0,809476 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -97,3538, -189,934, 64,125 ); - ent.v[ "angles" ] = ( 359,161, 48, 0,544968 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 317,258, -173,916, 64,125 ); - ent.v[ "angles" ] = ( 359,161, 48, 0,544968 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 646,727, -141,862, 64 ); - ent.v[ "angles" ] = ( 359,001, 85, 0 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 641,548, 250,853, 56,125 ); - ent.v[ "angles" ] = ( 359,384, 29, 0,788518 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1384,2, 51,6946, 27,9466 ); - ent.v[ "angles" ] = ( 359,005, 87,0031, -0,104551 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1728,83, 166,996, 8,125 ); - ent.v[ "angles" ] = ( 359, 81,0023, 0 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2134,42, 182,169, 2,68919 ); - ent.v[ "angles" ] = ( 359, 81,0023, 0 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2165,07, 625,896, -2,55444 ); - ent.v[ "angles" ] = ( 359,117, 109,006, -0,46958 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1541,58, 735,416, -7,10956 ); - ent.v[ "angles" ] = ( 359,125, 110,006, -0,484919 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 934,406, 975,899, -1,875 ); - ent.v[ "angles" ] = ( 353,117, 97,9854, 0,648274 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 908,049, 1063,64, -4,64194 ); - ent.v[ "angles" ] = ( 359,044, 98,0044, -0,292465 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 388,586, 1320,35, -39,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 118 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 391,156, 1366,37, -39,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 136 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1756,81, -177,91, 4,125 ); - ent.v[ "angles" ] = ( 359,005, 87,0032, -0,104552 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1386,7, -803,411, 48,125 ); - ent.v[ "angles" ] = ( 359,015, 91,0037, -0,173688 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2036,4, -808,217, 24,125 ); - ent.v[ "angles" ] = ( 359,015, 91,0037, -0,173688 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1486,42, -693,82, 118,933 ); - ent.v[ "angles" ] = ( 347,512, 106,398, -3,64098 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 753,573, -895,272, 51,711 ); - ent.v[ "angles" ] = ( 359,101, 55, 0,438408 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2176,62, 540,504, 1,125 ); - ent.v[ "angles" ] = ( 359,004, 76, 0 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -738,915, -241,185, 56,125 ); - ent.v[ "angles" ] = ( 359,101, 55, 0,438683 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1138,44, 846,245, 64,125 ); - ent.v[ "angles" ] = ( 359,775, 4, 0,974791 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -916,03, 873,045, 48,125 ); - ent.v[ "angles" ] = ( 359,758, 5, 0,970716 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -348,138, 1108,5, 29,8072 ); - ent.v[ "angles" ] = ( 359,007, 74, 0,121898 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -151,757, 986,9, -7,875 ); - ent.v[ "angles" ] = ( 359,072, 59, 0,374769 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 606,41, 1306,83, -7,875 ); - ent.v[ "angles" ] = ( 359,223, 120,004, -0,629463 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1373,09, -540,03, 37,6918 ); - ent.v[ "angles" ] = ( 359, 81,0021, 0 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1357,6, -170,922, 6,88836 ); - ent.v[ "angles" ] = ( 359,015, 91,0037, -0,173688 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 985,956, 236,273, 60,1623 ); - ent.v[ "angles" ] = ( 359,117, 53, 0,470148 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -118,412, -1152,74, 48,125 ); - ent.v[ "angles" ] = ( 359,152, 49, 0,529983 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -38,1773, -946,719, 48,125 ); - ent.v[ "angles" ] = ( 359,152, 49, 0,529983 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1185,74, -1134,3, 0,125002 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 107 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1617,67, -830,019, 24,125 ); - ent.v[ "angles" ] = ( 359,441, 25, 0,829067 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1180,23, 161,84, 46,5162 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 50 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1246,97, -680,621, 131,315 ); - ent.v[ "angles" ] = ( 350, 57, 0 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1081,1, -672,172, 123,234 ); - ent.v[ "angles" ] = ( 345,511, 117,938, -6,63063 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 721,319, -761,369, 48 ); - ent.v[ "angles" ] = ( 359,101, 55, 0,438408 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1791,16, -494,816, 147,983 ); - ent.v[ "angles" ] = ( 350,001, 93,0331, -0,996706 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1673,27, -477,141, 133,197 ); - ent.v[ "angles" ] = ( 359,015, 91,0037, -0,173688 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2603,76, 361,873, -8,00089 ); - ent.v[ "angles" ] = ( 351,664, 120,67, -3,42382 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2853,56, 226,871, 95,125 ); - ent.v[ "angles" ] = ( 359,018, 93,004, -0,190853 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2521,49, 515,579, 74,125 ); - ent.v[ "angles" ] = ( 359, 82,0024, 0 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_steam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1468,42, 890,959, -12 ); - ent.v[ "angles" ] = ( 351, 96, 0 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 939,064, 1458,78, 2,52471 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2134,51, 1029,12, -6,0777 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2057,36, 718,072, -5,64542 ); - ent.v[ "angles" ] = ( 353,039, 109,955, 0,735323 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2181,79, 810,03, -6,10637 ); - ent.v[ "angles" ] = ( 356,021, 115,015, -0,418838 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1858,92, -24,7925, 4,125 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1530,15, -647,42, 29,9542 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2039,27, -604,254, 24 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 879,474, -602,926, 53,0785 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 22,4628, -829,813, 47,425 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1268,55, -834,513, 6,64585 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1431,55, -1152,96, 0,124998 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1457,25, 62,5908, 64,125 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1663,89, 533,331, 64,125 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1133,82, 829,261, 64,125 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -564,761, 887,933, -7,875 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -443,449, 1479,25, -3,93508 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 360,297, 860,369, -7,875 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 386,249, 774,188, 2,12499 ); - ent.v[ "angles" ] = ( 351, 100, 0 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_frostbite_sun" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 41470,8, 81474,9, 43760 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -119,515, 714,995, 234,125 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -121,215, 498,973, 235,875 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 0,945453, 152,573, 44,4503 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 88,3126, 150,984, 50,2095 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 176,908, 151,647, 44,69 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 175,22, -231,261, 44,9506 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 107,641, -231,622, 49,9984 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 5,23104, -231,641, 45,0699 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 473,388, -848,948, 39,2421 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 353,452, -907,799, 38,0944 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1680,42, -120,351, 70,1039 ); - ent.v[ "angles" ] = ( 358, 82,9831, 0,965522 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 176,805, -183,083, 83,2543 ); - ent.v[ "angles" ] = ( 359,021, 93,0025, -0,208115 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -184,008, -165,872, 74,1696 ); - ent.v[ "angles" ] = ( 348,681, 96,7193, 2,30019 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1695,96, 938,254, 145,382 ); - ent.v[ "angles" ] = ( 349,65, 127,717, -7,91001 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -109,235, 922,993, -15,7688 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -47,8003, 995,466, -17,8811 ); - ent.v[ "angles" ] = ( 270, 0, -180 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -53,9125, 1100,05, -18,4345 ); - ent.v[ "angles" ] = ( 270, 0, -180 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -56,3575, 1143,1, -17,7955 ); - ent.v[ "angles" ] = ( 270, 0, -180 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -51,8492, 964,058, -17,6728 ); - ent.v[ "angles" ] = ( 270, 0, -180 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 904,312, 364,054, 212,564 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 97,8298, 688,346, -39,875 ); - ent.v[ "angles" ] = ( 359,038, 97, -0,275805 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -613,823, -163,819, 230,402 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1438,62, -553,801, 225,401 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1780,81, 365,135, -4,54347 ); - ent.v[ "angles" ] = ( 335,842, 63,1266, -9,91443 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 303,815, 1584,29, 11,125 ); - ent.v[ "angles" ] = ( 359,066, 102,002, -0,358535 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 79,9812, 1587,66, 15,125 ); - ent.v[ "angles" ] = ( 359,087, 105,003, -0,406902 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -131,016, 1575,53, 20,125 ); - ent.v[ "angles" ] = ( 359,066, 102,002, -0,358535 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -337,805, 1590,17, 28,125 ); - ent.v[ "angles" ] = ( 359,066, 102,002, -0,358535 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -462,52, 1829,52, 7,125 ); - ent.v[ "angles" ] = ( 359,086, 56,9967, 0,406767 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -454,152, 1767,29, 0,406441 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 41 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 452,453, 1743,78, 81,7499 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 146 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1019,15, -157,945, 306,375 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1291,63, 120,656, 222,375 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1063,27, 120,605, 225,187 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 863,798, -182,834, 305,521 ); - ent.v[ "angles" ] = ( 270, 359,905, 0 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1335,07, -424,906, 309,375 ); - ent.v[ "angles" ] = ( 270, 359,905, 0 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1336,77, 4,01327, 310,375 ); - ent.v[ "angles" ] = ( 270, 359,905, 0 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1544,59, -826,478, 31,2257 ); - ent.v[ "angles" ] = ( 350,001, 93,0331, -0,996706 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1246,73, -919,276, 54,3458 ); - ent.v[ "angles" ] = ( 350,315, 71,718, 2,6881 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 677,951, -908,931, 50 ); - ent.v[ "angles" ] = ( 354,116, 76,9159, 1,80844 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -509,049, 1078,32, -7,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 81 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -570,664, 889,785, -7,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 71 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -530,672, 1213,73, -7,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 71 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -431,572, 1414,29, -7,99274 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 46 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 835,712, 471,239, 479,875 ); - ent.v[ "angles" ] = ( 270, 0, 179,901 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 719,826, 416,339, 65,811 ); - ent.v[ "angles" ] = ( 356,372, 177,167, 0,406507 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1017,68, 772,637, 51,125 ); - ent.v[ "angles" ] = ( 359,594, 267,193, -3,62858 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1029,78, 476,913, 64,125 ); - ent.v[ "angles" ] = ( 354,602, 13,1157, 0,454655 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -634,827, 180,489, 64 ); - ent.v[ "angles" ] = ( 358,409, 93,2084, 0,757363 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2194,49, -312,139, 74,3089 ); - ent.v[ "angles" ] = ( 353,466, 89,1312, 0,871874 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1715,12, 398,506, 79,125 ); - ent.v[ "angles" ] = ( 354,824, 163,312, -0,529949 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -536,661, -571,927, 73,314 ); - ent.v[ "angles" ] = ( 356,558, 36,0075, -0,249026 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2212,07, -88,4093, 167,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2211,75, -32,2866, 167,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2211,91, -144,432, 167,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2212,01, -212,255, 167,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2211,77, 35,9239, 167,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2348,19, -211,986, 167,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2347,86, -143,895, 167,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2347,94, -87,5297, 167,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2348, -31,8133, 167,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2348,25, 36,2742, 167,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_steam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1545,38, -153,517, 55,2496 ); - ent.v[ "angles" ] = ( 351, 96, 0 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 319,632, 1197,52, 55,5851 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 110 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 738,551, 1299,39, 303,967 ); - ent.v[ "angles" ] = ( 22, 102, 0 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 560,327, 1662,16, 336,292 ); - ent.v[ "angles" ] = ( 22, 102, 0 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 737,605, 1294,06, 422,5 ); - ent.v[ "angles" ] = ( 27, 102, 0 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 550,529, 1666,92, 248,605 ); - ent.v[ "angles" ] = ( 27, 102, 0 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1379,36, 1149,97, 281,679 ); - ent.v[ "angles" ] = ( 20, 102, 0 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1378,42, 1144,64, 400,212 ); - ent.v[ "angles" ] = ( 26, 102, 0 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2454,68, 947,644, 288,593 ); - ent.v[ "angles" ] = ( 21, 102, 0 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2466,08, 822,952, 477,126 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 102 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2343,11, 956,299, 557,35 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 102 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1557,37, 47,3453, 306,023 ); - ent.v[ "angles" ] = ( 25, 102, 0 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1666,6, -434,781, 331,211 ); - ent.v[ "angles" ] = ( 25, 102, 0 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1720,85, 622,439, 334,574 ); - ent.v[ "angles" ] = ( 25, 102, 0 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2098,39, -790,417, 416,859 ); - ent.v[ "angles" ] = ( 19,7257, 141,742, 15,6757 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2483,7, -654,214, 467,06 ); - ent.v[ "angles" ] = ( 344,255, 114,673, 6,95148 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 446,458, 2020,81, 80,702 ); - ent.v[ "angles" ] = ( 0,809128, 138, 0,58791 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -583,849, 2010,61, 227,343 ); - ent.v[ "angles" ] = ( 0,615642, 49,9945, -0,788041 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -492,857, 1615,97, 143,168 ); - ent.v[ "angles" ] = ( 338,472, 40,3506, -0,949152 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1127,08, 702,297, 415,212 ); - ent.v[ "angles" ] = ( 0,987837, 93, -0,156472 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -609,056, 794,417, 355,914 ); - ent.v[ "angles" ] = ( 0,987837, 93, -0,156472 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -930,989, 592,953, 406,04 ); - ent.v[ "angles" ] = ( 0,987837, 93, -0,156472 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 757,411, -276,072, 310,351 ); - ent.v[ "angles" ] = ( 346,956, 92,134, -0,534579 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1981,87, 76,7472, 163,875 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1779,69, -210,987, 42,8888 ); - ent.v[ "angles" ] = ( 349,994, 87,9819, 0 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1846,66, -235,209, 124,026 ); - ent.v[ "angles" ] = ( 349,994, 87,9819, 0 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1274,78, 485,401, 65,0418 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 35 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1475,35, 415,719, 64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 37 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1641,93, 337,837, 65,9317 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 53 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_swirl_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1164,76, 545,027, 64,2798 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 952,394, -255,476, 439,441 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 93 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1295,5, 120,776, 319,345 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1036,88, -12,5229, 322,325 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 182 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 992,091, -473,273, 319,836 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1339,32, -301,811, 322,722 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -153,875, 315,849, 319,69 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -696,893, 798,455, 336,682 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -987,525, 551,876, 335,086 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -981,479, 449,099, 334,525 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -825,558, 153,875, 303,339 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 629,055, -473,713, 296,451 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1186,38, -993,517, 376,161 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1447,81, -993,863, 376,046 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_chunk_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 623,649, -231,069, 295,529 ); - ent.v[ "angles" ] = ( 90, 0, 179 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2965,28, 32,1701, 67 ); - ent.v[ "angles" ] = ( 0,998781, 98,9983, 0 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2909,21, 374,637, -2,36977 ); - ent.v[ "angles" ] = ( 342,985, 111,944, 0,181592 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2211,08, -753,5, 170,351 ); - ent.v[ "angles" ] = ( 359,002, 78, 0 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1684,52, 525,223, 64,6333 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 38 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1543,51, 515,486, 64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 22 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -179,607, 1001,79, -7,39586 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 72 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -70,9618, -202,45, 64,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 50 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 89,7697, -206,78, 65,8984 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 50 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -268,2, -54,6696, 61,7318 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 51 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2004,59, -456,457, 60 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 23 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1988,81, -524,631, 69,4282 ); - ent.v[ "angles" ] = ( 349,97, 83,8935, 0,595943 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1734,62, -495,639, 63,6133 ); - ent.v[ "angles" ] = ( 349,97, 83,8935, 0,595943 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2012,05, -523,307, 67,9184 ); - ent.v[ "angles" ] = ( 359,015, 71, 0,173688 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1324,67, -525,669, 68,0264 ); - ent.v[ "angles" ] = ( 359,015, 71, 0,173688 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -837,909, -212,76, 77,0417 ); - ent.v[ "angles" ] = ( 359,018, 70, 0,190854 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -827,306, -151,857, 71,5522 ); - ent.v[ "angles" ] = ( 359,212, 55,2079, 1,5764 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -470,121, -54,566, 60,2087 ); - ent.v[ "angles" ] = ( 353,383, 49,0361, 1,6611 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -741,985, -8,33043, 74,9382 ); - ent.v[ "angles" ] = ( 359,13, 58,2071, 1,53299 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1174,47, 223,719, 42,7213 ); - ent.v[ "angles" ] = ( 359,117, 53, 0,470148 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2069,54, 196,152, 6,95731 ); - ent.v[ "angles" ] = ( 347,512, 106,398, -3,64098 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2151,72, 350,151, -8,66062 ); - ent.v[ "angles" ] = ( 344,098, 94,1367, -0,306592 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2330,17, 357,681, 0,251548 ); - ent.v[ "angles" ] = ( 340,204, 119,783, -9,56968 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -628,145, 583,744, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -612,221, 584,037, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -676,405, 584,157, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -692,108, 583,929, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -740,287, 584,083, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -756,268, 584,176, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -804,318, 583,911, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -564,085, 584,13, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -804,068, 471,876, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -756,04, 472,073, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -740,036, 472,031, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -691,735, 472,299, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -676,083, 472,249, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -627,783, 472,244, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -612,054, 472,152, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -563,875, 472,303, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -588,083, 496,533, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -588,57, 559,911, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -652,028, 559,725, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -652,167, 495,684, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -716,395, 559,682, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -715,931, 495,709, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -779,788, 559,962, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -780,142, 495,953, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -918,872, 561,926, 191,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -919,193, 521,906, 191,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -919,142, 481,791, 191,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -756,105, 716,763, 159,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -724,218, 716,756, 159,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -691,938, 716,676, 159,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -556,311, 716,537, 159,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -523,992, 716,617, 159,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -492,089, 716,643, 159,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -673,686, 352,048, 191,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -633,822, 351,97, 191,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -593,718, 351,878, 191,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -572,118, 256,433, 187,575 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -608,279, 256,786, 187,575 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -671,999, 256,31, 187,575 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -708,757, 256,097, 187,575 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -985,622, 522,284, 195,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -985,995, 490,197, 195,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -985,807, 554,107, 195,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -147,746, 349,428, 77,4991 ); - ent.v[ "angles" ] = ( 270, 359,901, -179,901 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -130,365, 718,736, 94,0113 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -69,7436, 1086,44, 99,875 ); - ent.v[ "angles" ] = ( 270, 359,901, -179,901 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1277,93, 668,74, 210,771 ); - ent.v[ "angles" ] = ( 270, 3,81407, 87,1858 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -491,229, 813,631, 201,062 ); - ent.v[ "angles" ] = ( 270, 359,684, 5,31557 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -69,8698, 1414,98, 99,875 ); - ent.v[ "angles" ] = ( 270, 359,901, -179,901 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -70,0592, 1553,68, 99,875 ); - ent.v[ "angles" ] = ( 270, 359,901, -179,901 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -58,3877, 1529,13, -14,899 ); - ent.v[ "angles" ] = ( 270, 0, -180 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -58,9324, 1485,83, -15,538 ); - ent.v[ "angles" ] = ( 270, 0, -180 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -59,8564, 1437,14, -16,5071 ); - ent.v[ "angles" ] = ( 270, 0, -180 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 413,391, -882,922, 43,487 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -78,5497, 595,372, 312,502 ); - ent.v[ "angles" ] = ( 353,758, 58,0399, 0 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1621,32, -601,125, 32,5399 ); - ent.v[ "angles" ] = ( 359,792, 3,00146, 0,978294 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 440,55, 82,2872, 227,902 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1078,18, 1067,26, 198,452 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1519,31, 715,491, 290,503 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2240,96, -505,341, 225,006 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 189,387, 574,554, -39,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 148,949, -176,413, -39,875 ); - ent.v[ "angles" ] = ( 359,054, 100, -0,325766 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 59,6543, 7,3049, -39,875 ); - ent.v[ "angles" ] = ( 359,054, 100, -0,325766 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 191,521, 176,221, -39,875 ); - ent.v[ "angles" ] = ( 359,012, 90, -0,15653 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 646,83, 1177,61, -7,40227 ); - ent.v[ "angles" ] = ( 359,044, 98,0044, -0,292465 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 893,525, 1336,91, -4,45304 ); - ent.v[ "angles" ] = ( 359,546, 144,005, -0,891078 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 493,85, 1045,75, -3,60695 ); - ent.v[ "angles" ] = ( 359,546, 144,005, -0,891078 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 724,871, 926,826, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 680,885, 978,213, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 617,398, 989,344, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 519,396, 989,226, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 467,53, 970,443, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 467,879, 846,393, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 467,446, 584,399, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 520,44, 538,792, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 652,975, 539,156, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 776,723, 538,757, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 776,689, 636,819, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare_flr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 724,557, 670,356, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 707,93, 950,34, 125,294 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 762,63, -453,732, 54,2509 ); - ent.v[ "angles" ] = ( 359,012, 90,0021, -0,15661 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 726,064, -500,123, 56,6932 ); - ent.v[ "angles" ] = ( 350,087, 77,8026, 1,65161 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 820,792, -353,297, 63,0578 ); - ent.v[ "angles" ] = ( 350,484, 106,216, -3,24047 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 726,256, -246,003, 69,0802 ); - ent.v[ "angles" ] = ( 350,036, 79,8322, 1,30142 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 763,402, -434,982, 105,967 ); - ent.v[ "angles" ] = ( 0,984956, 92, -0,17369 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 120,788, -320,239, -39,875 ); - ent.v[ "angles" ] = ( 0,984956, 92, -0,173691 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -22,2062, 577,305, -35,875 ); - ent.v[ "angles" ] = ( 0,839808, 69, -0,545426 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 409,424, -906,023, -31,875 ); - ent.v[ "angles" ] = ( 0,891133, 129, 0,454096 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1381,93, -369,306, 61,0835 ); - ent.v[ "angles" ] = ( 359,775, 4,0015, 0,975713 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1075,51, -370,446, 62,5436 ); - ent.v[ "angles" ] = ( 359,707, 8, 0,957625 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1985,65, -885,882, 64,2012 ); - ent.v[ "angles" ] = ( 353,575, 88,6049, 2,01385 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1984,01, -1212,78, 0,125 ); - ent.v[ "angles" ] = ( 353,575, 88,6049, 2,01385 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1904,67, -1075,63, 0,125004 ); - ent.v[ "angles" ] = ( 355,84, 347,233, -2,75015 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1370,94, -1269,43, 3,54739 ); - ent.v[ "angles" ] = ( 358,746, 29,1856, -4,82541 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1114,85, -1074,67, 16,125 ); - ent.v[ "angles" ] = ( 356,735, 12,9681, 1,11715 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1117,14, -1019,28, 16,125 ); - ent.v[ "angles" ] = ( 357,038, 0,954152, 1,77207 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -381,085, -1062,64, 56,125 ); - ent.v[ "angles" ] = ( 2,08232, 158,95, 0,247645 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -357,283, -1033,74, 49,7454 ); - ent.v[ "angles" ] = ( 356,082, 158,924, 0,248061 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -596,978, -1773,58, 151,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 12 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 121,665, -1911,25, 126,952 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 12 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3071,03, 58,8564, 88,9139 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 95 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2837,56, -398,468, 181,837 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 80 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3206,13, 601,127, 119,138 ); - ent.v[ "angles" ] = ( 359,054, 75,9962, 0,325583 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2880,34, 1222,72, 74,7587 ); - ent.v[ "angles" ] = ( 359,109, 122, -0,454113 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2873,16, 1021,29, 131,727 ); - ent.v[ "angles" ] = ( 359,305, 141, -0,719251 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2340,5, 1580,05, 140,024 ); - ent.v[ "angles" ] = ( 359,305, 141, -0,719251 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1754,42, 1484,63, 137,346 ); - ent.v[ "angles" ] = ( 359,268, 138, -0,681895 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1361,96, 2043,41, 145,807 ); - ent.v[ "angles" ] = ( 359,577, 160, -0,906323 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 591,842, 2041,84, 105,95 ); - ent.v[ "angles" ] = ( 358,347, 139,009, -0,33636 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -400,232, 1990,04, 13,6441 ); - ent.v[ "angles" ] = ( 359,956, 39,0038, 1,68644 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 69,9684, 2107,88, 1,28343 ); - ent.v[ "angles" ] = ( 358,593, 93,9933, 0,931464 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1428,53, 887,863, 219,72 ); - ent.v[ "angles" ] = ( 358,318, 132,007, -0,132113 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2953,45, -863,059, 101,125 ); - ent.v[ "angles" ] = ( 358,593, 93,9938, 0,931424 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2826,46, -347,518, 119,125 ); - ent.v[ "angles" ] = ( 358,593, 93,9938, 0,931424 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2688,62, -669,493, 92,125 ); - ent.v[ "angles" ] = ( 359,571, 88,8153, 2,00125 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2367,93, -1707,65, 35,2581 ); - ent.v[ "angles" ] = ( 1,33836, 345,017, 1,02694 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1639,5, -1843,9, 67,2 ); - ent.v[ "angles" ] = ( 1,33836, 345,017, 1,02694 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1093,47, -1985,6, 76,7438 ); - ent.v[ "angles" ] = ( 1,33836, 345,017, 1,02694 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1139,65, 840,667, -4,43884 ); - ent.v[ "angles" ] = ( 359,515, 142,006, -0,874715 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 896,325, 837,169, -3,2757 ); - ent.v[ "angles" ] = ( 359,005, 87,0029, -0,104607 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1454,57, 752,979, -2,9017 ); - ent.v[ "angles" ] = ( 359,026, 94, -0,22497 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 774,531, 1284,86, 34,9642 ); - ent.v[ "angles" ] = ( 359,642, 96,4544, 2,15746 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 450,141, 923,149, 104,737 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -172,875, 844,878, 114,97 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 186 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -638,788, 284,317, 101,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 85 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -990,711, 486,784, 92,1028 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 15 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -497,464, -529,336, 106,2 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 21 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2187, -217,43, 85,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1781,36, 421,173, 90,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 177 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -322,625, 841,645, 200,125 ); - ent.v[ "angles" ] = ( 340,029, 98,8078, 1,09128 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2230,5, -410,027, 60 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1961,81, -413,822, 60,012 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2409,31, -406,356, 60,1158 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1567,3, 15,8327, 73,6424 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1129,25, -380,019, 60,1486 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 39,7269, 54,7206, 64 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 618,787, -38,2608, 54,5498 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2087, 299,791, -11,9931 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2283,6, 313,643, -11,5676 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2486,87, 324,088, -11,9918 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 756,071, -344,468, 59,3139 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 93 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 782,81, -683,56, 64,1483 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2023,91, -572,185, 25,3241 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 458,531, -931,23, 46,125 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 273,137, -1036,51, 46,125 ); - ent.v[ "angles" ] = ( 359,293, 36, 0,707153 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 72,4933, -831,49, 48,125 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 592,736, -1963,96, 157,856 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 12 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2014,75, 843,229, -3,65592 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 105 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1719,02, 1026,22, -5,80841 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 177 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1133,39, 903,992, -0,307993 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 141 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1814,78, -105,902, 5,03904 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 141 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_window" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1954,54, -33,1109, 71,2383 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 360 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -546,664, 893,999, -2,65976 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2089,88, -462,942, 115,954 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -352,048, 527,365, 168,275 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2159,74, -175,033, 203,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2184,14, -175,025, 203,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2208,24, -175,084, 203,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2275,08, -74,1907, 202,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2275,3, -10,3107, 202,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2275,32, 53,7201, 202,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2275,67, 118,469, 202,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2147,16, 118,471, 202,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2211,41, 118,283, 202,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2083,1, 118,329, 202,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2019,25, 118,314, 202,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1955,12, 118,402, 202,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1890,93, 118,367, 202,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1080,96, 570,823, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 951,14, 570,963, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1080,88, 669,162, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_circle_light_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 950,7, 669,02, 215,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 973,998, 515,875, 353,876 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ice_fall_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1137,16, 681,198, 346,875 ); - ent.v[ "angles" ] = ( 270, 359,664, -1,66394 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 957,381, -682,211, 208,401 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1477,76, -841,114, 13,3145 ); - ent.v[ "angles" ] = ( 332, 77,9739, 0 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1667,83, 37,5091, 69,7823 ); - ent.v[ "angles" ] = ( 358,198, 72,9795, 1,29793 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1078,24, 848,467, 65,0004 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 15 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_flurries_fine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -564,389, 918,585, -5,75974 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 60 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 327,339, 968,668, -7,79999 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 66 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_ground_blow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -77,0725, -8,0472, 64,822 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 41 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2346,28, -50,0406, 299,822 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 99 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1984,92, -47,1318, 295,911 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 94 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1186,38, 90,2745, 363,951 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 94 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 898,6, -223,106, 384,704 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 94 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 478,244, -254,185, 346,325 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 94 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -487,69, -715,612, 445,474 ); - ent.v[ "angles" ] = ( 350,735, 71,6936, 3,77909 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1019,49, -702,781, 424,311 ); - ent.v[ "angles" ] = ( 350,735, 71,6936, 3,77909 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1127,56, 175,511, 353,106 ); - ent.v[ "angles" ] = ( 356,722, 72,089, 3,73584 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -976,165, 573,195, 396,454 ); - ent.v[ "angles" ] = ( 352,731, 71,8263, 3,75999 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1305,64, 1084,22, 457,041 ); - ent.v[ "angles" ] = ( 351,821, 100,073, -0,113968 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1083,43, 1045,53, 459,697 ); - ent.v[ "angles" ] = ( 353,324, 63,7885, 4,73728 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 546,363, 925,207, 472,706 ); - ent.v[ "angles" ] = ( 356,254, 81,044, 2,24349 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 764,777, 900,444, 414,889 ); - ent.v[ "angles" ] = ( 356,254, 81,044, 2,24349 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1004,61, 618,336, 491,023 ); - ent.v[ "angles" ] = ( 356,254, 81,044, 2,24349 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1370,55, -1018,57, 395,701 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 94 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 765,705, -1116,99, 411,094 ); - ent.v[ "angles" ] = ( 349, 94, 0 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -761,592, -721,762, 430,575 ); - ent.v[ "angles" ] = ( 350,735, 71,6936, 3,77909 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 346,625, -538,651, -40 ); - ent.v[ "angles" ] = ( 0,669214, 150, 0,743289 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 229,388, 425,756, -40 ); - ent.v[ "angles" ] = ( 356,979, 113,989, 0,208445 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -271,429, 230,294, 430,9 ); - ent.v[ "angles" ] = ( 350,735, 71,6936, 3,77909 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 492,792, 830,757, 420,728 ); - ent.v[ "angles" ] = ( 350,002, 92,9843, 0,176406 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1104,47, -469,625, 319,067 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 492,326, -477,801, 254,576 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 759,308, -993,975, 376,341 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 621,908, -232,911, 297,082 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 408,424, -232,051, 294,804 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 958,807, -155,43, 313,846 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1097,8, -695,668, 410,537 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_lamp_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -966,635, -1277,67, 123,016 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_lamp_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -874,747, -1275,83, 122,786 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_lamp_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -780,595, -1275,62, 122,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2019,23, -143,623, 190,087 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -964,516, 2063,36, 754,845 ); - ent.v[ "angles" ] = ( 344, 91, 0 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -966,646, 3773,95, 1013,88 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2063,53, -97,3347, 130,145 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3009,12, 89,5479, 17,1676 ); - ent.v[ "angles" ] = ( 354, 99, 0 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2881,71, -215,273, 80,9792 ); - ent.v[ "angles" ] = ( 354, 99, 0 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 867,734, 3940,13, 760,844 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 5420,96, 638,022, 980,886 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3671,47, -208,346, 752,855 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_exit_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1032,59, -1043,08, 118,925 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_exit_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2185,19, -135,838, 194,875 ); - ent.v[ "angles" ] = ( 271, 89,9982, -89,9982 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_exit_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1896,46, 211,696, 194,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_exit_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -947,225, 521,461, 181,877 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_exit_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -632,545, 316,589, 182,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_exit_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -444,214, -524,532, 206,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -218,013, 711,447, 394,724 ); - ent.v[ "angles" ] = ( 352,029, 56,5772, 6,05717 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1933,92, 1233,09, 82,9831 ); - ent.v[ "angles" ] = ( 0,881862, 127, 0,468935 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_tree" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1554,76, 1285,67, 84,6922 ); - ent.v[ "angles" ] = ( 0,828014, 133, 0,558549 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_lamp_post" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2012,3, -1229,33, 161,096 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_frostbite_exit_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 620,022, 416,273, 206,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1974,48, -634,144, 370,125 ); - ent.v[ "angles" ] = ( 350,735, 71,6936, 3,77909 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1744,28, -687,254, 724,304 ); - ent.v[ "angles" ] = ( 350,735, 71,6936, 3,77909 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_roof" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2877,44, 458,058, 69,5576 ); - ent.v[ "angles" ] = ( 0,260202, 82,0952, 1,75137 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2122,01, 353,132, 6,10629 ); - ent.v[ "angles" ] = ( 351,351, 91,8108, 2,49977 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_snow_gust_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1797,96, -530,791, 70,1667 ); - ent.v[ "angles" ] = ( 350,517, 81,92, -17,3009 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk_dark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 410,348, 618,049, 471,859 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 92 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk_dark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1975,16, -195,772, 517,209 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 92 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1573,18, -592,849, 239,055 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1574,87, -594,383, 397,334 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow_flick" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1574,36, -593,841, 290,021 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1574,24, -593,745, 448,135 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1573,57, -593,07, 499,804 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1563,42, -606,468, 236,928 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 314 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow_flick" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1563,08, -606,578, 291,924 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 314 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1563,39, -606,898, 344,134 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 314 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1563,58, -607,089, 396,288 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 314 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1563,31, -606,816, 448,477 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 314 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1563,09, -606,594, 500,449 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 314 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_sign_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1573,9, -593,399, 344,739 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk_dark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -980,858, 2468,4, 923,585 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 92 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk_dark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -859,474, 4174,92, 978,359 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 92 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_frostbite_chimney_smk_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1090,74, 3282,06, 950,929 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -76; -} diff --git a/Multiplayer Maps/mp_frostbite/maps/mp/mp_frostbite.gsc b/Multiplayer Maps/mp_frostbite/maps/mp/mp_frostbite.gsc deleted file mode 100644 index b5f224d..0000000 --- a/Multiplayer Maps/mp_frostbite/maps/mp/mp_frostbite.gsc +++ /dev/null @@ -1,168 +0,0 @@ -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - level thread spawnkilltrigger(); - maps/mp/mp_frostbite_fx::main(); - precachemodel( "dh_facilities_sign_08" ); - precachemodel( "p6_fro_concrete_planter" ); - precachemodel( "p6_fro_bookstore_window_trm" ); - precachemodel( "collision_clip_256x256x10" ); - precachemodel( "collision_clip_64x64x10" ); - precachemodel( "collision_physics_256x256x10" ); - precachemodel( "collision_clip_32x32x32" ); - precachemodel( "collision_clip_128x128x10" ); - precachemodel( "collision_clip_wall_32x32x10" ); - precachemodel( "collision_clip_wall_64x64x10" ); - precachemodel( "collision_mp_frost_kitchen_weap" ); - maps/mp/_load::main(); - maps/mp/mp_frostbite_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_frostbite" ); - prop1 = spawn( "script_model", ( -972, 559, 182 ) ); - prop1.angles = vectorScale( ( 0, 0, 1 ), 90 ); - prop2 = spawn( "script_model", ( -973, 521, 182 ) ); - prop2.angles = vectorScale( ( 0, 0, 1 ), 90 ); - prop3 = spawn( "script_model", ( -972, 485, 182 ) ); - prop3.angles = vectorScale( ( 0, 0, 1 ), 90 ); - prop4 = spawn( "script_model", ( -966, 558, 182 ) ); - prop4.angles = vectorScale( ( 0, 0, 1 ), 270 ); - prop5 = spawn( "script_model", ( -965, 522, 182 ) ); - prop5.angles = vectorScale( ( 0, 0, 1 ), 270 ); - prop6 = spawn( "script_model", ( -966, 484, 182 ) ); - prop6.angles = vectorScale( ( 0, 0, 1 ), 270 ); - prop1 setmodel( "dh_facilities_sign_08" ); - prop2 setmodel( "dh_facilities_sign_08" ); - prop3 setmodel( "dh_facilities_sign_08" ); - prop4 setmodel( "dh_facilities_sign_08" ); - prop5 setmodel( "dh_facilities_sign_08" ); - prop6 setmodel( "dh_facilities_sign_08" ); - planter1 = spawn( "script_model", ( -1609, -827,405, 131,751 ) ); - planter1.angles = ( 359,846, 90,58, 89,9993 ); - planter2 = spawn( "script_model", ( -1609, -827,41, 81,75 ) ); - planter2.angles = ( 359,846, 90,58, 89,9993 ); - planter1 setmodel( "p6_fro_concrete_planter" ); - planter2 setmodel( "p6_fro_concrete_planter" ); - brick1 = spawn( "script_model", ( 1129, 703, 95,75 ) ); - brick1.angles = ( 90, 180, -90 ); - brick2 = spawn( "script_model", ( 1127,75, 712, 95,75 ) ); - brick2.angles = ( 90, 180, -90 ); - brick3 = spawn( "script_model", ( 1129, 703, 47,75 ) ); - brick3.angles = ( 90, 180, -90 ); - brick4 = spawn( "script_model", ( 1127,75, 712, 47,75 ) ); - brick4.angles = ( 90, 180, -90 ); - brick5 = spawn( "script_model", ( 1129, 694, 95,75 ) ); - brick5.angles = ( 90, 180, -90 ); - brick6 = spawn( "script_model", ( 1129, 694, 47,75 ) ); - brick6.angles = ( 90, 180, -90 ); - brick7 = spawn( "script_model", ( 1129, 685, 95,75 ) ); - brick7.angles = ( 90, 180, -90 ); - brick8 = spawn( "script_model", ( 1129, 685, 47,75 ) ); - brick8.angles = ( 90, 180, -90 ); - brick1 setmodel( "p6_fro_bookstore_window_trm" ); - brick2 setmodel( "p6_fro_bookstore_window_trm" ); - brick3 setmodel( "p6_fro_bookstore_window_trm" ); - brick4 setmodel( "p6_fro_bookstore_window_trm" ); - brick5 setmodel( "p6_fro_bookstore_window_trm" ); - brick6 setmodel( "p6_fro_bookstore_window_trm" ); - brick7 setmodel( "p6_fro_bookstore_window_trm" ); - brick8 setmodel( "p6_fro_bookstore_window_trm" ); - spawncollision( "collision_clip_256x256x10", "collider", ( 145, -1295,5, 115,5 ), vectorScale( ( 0, 0, 1 ), 88,9 ) ); - spawncollision( "collision_clip_256x256x10", "collider", ( 28, -1295,5, 115,5 ), vectorScale( ( 0, 0, 1 ), 88,9 ) ); - spawncollision( "collision_clip_256x256x10", "collider", ( 252,5, -1251,5, 114 ), ( 0, 45,1, -88,9 ) ); - spawncollision( "collision_clip_64x64x10", "collider", ( 448, 1577, -10,5 ), vectorScale( ( 0, 0, 1 ), 277 ) ); - spawncollision( "collision_physics_256x256x10", "collider", ( 1199, 89, 67,5 ), vectorScale( ( 0, 0, 1 ), 90 ) ); - spawncollision( "collision_clip_32x32x32", "collider", ( 84,5, 361,75, 66,5 ), ( 359,904, 8,05247, 11,9159 ) ); - spawncollision( "collision_clip_32x32x32", "collider", ( 80, 390, 69,5 ), vectorScale( ( 0, 0, 1 ), 9,19998 ) ); - spawncollision( "collision_clip_32x32x32", "collider", ( 75,5, 418, 66,75 ), ( 1,00357, 9,19998, -11 ) ); - spawncollision( "collision_clip_128x128x10", "collider", ( 244,75, -860, -45 ), vectorScale( ( 0, 0, 1 ), 27 ) ); - spawncollision( "collision_clip_wall_32x32x10", "collider", ( 958,5, 716,5, 130 ), vectorScale( ( 0, 0, 1 ), 5,6 ) ); - spawncollision( "collision_clip_wall_64x64x10", "collider", ( -1126, -909, 44,5 ), vectorScale( ( 0, 0, 1 ), 105,6 ) ); - spawncollision( "collision_clip_wall_64x64x10", "collider", ( -1130, -789,5, 44,5 ), vectorScale( ( 0, 0, 1 ), 83,9 ) ); - spawncollision( "collision_clip_wall_64x64x10", "collider", ( -1130, -789,5, 107 ), vectorScale( ( 0, 0, 1 ), 83,9 ) ); - spawncollision( "collision_clip_wall_64x64x10", "collider", ( -1126, -909, 106 ), vectorScale( ( 0, 0, 1 ), 105,6 ) ); - spawncollision( "collision_clip_wall_64x64x10", "collider", ( -1130, -789,5, 164,5 ), vectorScale( ( 0, 0, 1 ), 83,9 ) ); - spawncollision( "collision_mp_frost_kitchen_weap", "collider", ( 1994, -281,5, 16 ), ( 0, 0, 1 ) ); - setdvar( "compassmaxrange", "2100" ); - visionsetnaked( "mp_frostbite", 1 ); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - level.onplayerkilledextraunthreadedcbs[ level.onplayerkilledextraunthreadedcbs.size ] = ::on_player_killed; - level.overrideplayerdeathwatchtimer = ::leveloverridetime; - level glass_node_fix(); -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2250", reset_dvars ); - ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1000", reset_dvars ); -} - -on_player_killed( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) -{ - if ( isDefined( smeansofdeath ) && smeansofdeath == "MOD_TRIGGER_HURT" ) - { - depth = self depthinwater(); - if ( depth > 0 ) - { - origin = self.origin + ( 0, 0, depth + 5 ); - self playsound( "mpl_splash_death" ); - playfx( level._effect[ "water_splash" ], origin ); - } - } -} - -leveloverridetime( defaulttime ) -{ - if ( self.body depthinwater() > 0 ) - { - return 0,4; - } - return defaulttime; -} - -glass_node_fix() -{ - nodes = getallnodes(); - level thread glass_node_think( nodes[ 459 ] ); - level thread glass_node_think( nodes[ 454 ] ); -} - -glass_node_think( node ) -{ - wait 0,25; - ent = spawn( "script_model", node.origin, 1 ); - ent setmodel( level.deployedshieldmodel ); - ent hide(); - ent disconnectpaths(); - ent.origin -= vectorScale( ( 0, 0, 1 ), 64 ); - for ( ;; ) - { - level waittill( "glass_smash", origin ); - if ( distancesquared( origin, node.origin ) < 65536 ) - { - ent delete(); - return; - } - } -} - -spawnkilltrigger() -{ - trigger = spawn( "trigger_radius", ( 536, -1304, -104 ), 0, 256, 128 ); - while ( 1 ) - { - trigger waittill( "trigger", player ); - player dodamage( player.health * 2, trigger.origin, trigger, trigger, "none", "MOD_SUICIDE", 0, "lava_mp" ); - } -} diff --git a/Multiplayer Maps/mp_frostbite/maps/mp/mp_frostbite_amb.gsc b/Multiplayer Maps/mp_frostbite/maps/mp/mp_frostbite_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_frostbite/maps/mp/mp_frostbite_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_frostbite/maps/mp/mp_frostbite_fx.gsc b/Multiplayer Maps/mp_frostbite/maps/mp/mp_frostbite_fx.gsc deleted file mode 100644 index cb229eb..0000000 --- a/Multiplayer Maps/mp_frostbite/maps/mp/mp_frostbite_fx.gsc +++ /dev/null @@ -1,71 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); -#using_animtree( "fxanim_props_dlc4" ); - -main() -{ - precache_fxanim_props(); - precache_fxanim_props_dlc4(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_frostbite_fx::main(); -} - -precache_scripted_fx() -{ - level._effect[ "water_splash" ] = loadfx( "bio/player/fx_player_water_splash_mp_frost" ); -} - -precache_createfx_fx() -{ - level._effect[ "fx_lf_mp_frostbite_sun" ] = loadfx( "lens_flares/fx_lf_mp_frostbite_sun" ); - level._effect[ "fx_mp_frostbite_snow_ledge_runner" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_ledge_runner" ); - level._effect[ "fx_mp_frostbite_snow_chunk_runner" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_chunk_runner" ); - level._effect[ "fx_mp_frostbite_snow_gust_runner" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_gust_runner" ); - level._effect[ "fx_mp_frostbite_snow_fog" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_fog" ); - level._effect[ "fx_mp_frostbite_snow_flurries" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_flurries" ); - level._effect[ "fx_mp_frostbite_snow_flurries_fine" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_flurries_fine" ); - level._effect[ "fx_mp_frostbite_snow_flurries_window" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_flurries_window" ); - level._effect[ "fx_mp_frostbite_snow_flurries_vista" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_flurries_vista" ); - level._effect[ "fx_mp_frostbite_snow_gust_sm_runner" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_gust_sm_runner" ); - level._effect[ "fx_mp_frostbite_snow_swirl_runner" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_swirl_runner" ); - level._effect[ "fx_mp_frostbite_ground_blow" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_ground_blow" ); - level._effect[ "fx_mp_frostbite_snow_gust_tree" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_gust_tree" ); - level._effect[ "fx_mp_frostbite_snow_gust_roof" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_snow_gust_roof" ); - level._effect[ "fx_mp_frostbite_ice_fall_runner" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_ice_fall_runner" ); - level._effect[ "fx_mp_frostbite_ice_fall_sm_runner" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_ice_fall_sm_runner" ); - level._effect[ "fx_mp_frostbite_lamp_post" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_lamp_post" ); - level._effect[ "fx_frostbite_circle_light_glare" ] = loadfx( "light/fx_frostbite_circle_light_glare" ); - level._effect[ "fx_frostbite_circle_light_glare_flr" ] = loadfx( "light/fx_frostbite_circle_light_glare_flr" ); - level._effect[ "fx_mp_frostbite_lamp_int" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_lamp_int" ); - level._effect[ "fx_frostbite_exit_sign" ] = loadfx( "light/fx_frostbite_exit_sign" ); - level._effect[ "fx_mp_frostbite_sign_glow" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_sign_glow" ); - level._effect[ "fx_mp_frostbite_sign_glow_flick" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_sign_glow_flick" ); - level._effect[ "fx_light_track_omni" ] = loadfx( "light/fx_light_track_omni" ); - level._effect[ "fx_mp_frostbite_chimney_smk" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_chimney_smk" ); - level._effect[ "fx_mp_frostbite_chimney_smk_dark" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_chimney_smk_dark" ); - level._effect[ "fx_mp_frostbite_chimney_smk_vista" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_chimney_smk_vista" ); - level._effect[ "fx_mp_frostbite_steam" ] = loadfx( "maps/mp_maps/fx_mp_frostbite_steam" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "laundry" ] = %fxanim_gp_dryer_loop_anim; - level.scr_anim[ "fxanim_props" ][ "dock_chain" ] = %fxanim_mp_ver_stair_chain_sign_anim; -} - -precache_fxanim_props_dlc4() -{ - level.scr_anim[ "fxanim_props_dlc4" ][ "pennants_01" ] = %fxanim_mp_frost_pennants_01_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "pennants_02" ] = %fxanim_mp_frost_pennants_02_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "candy_sign" ] = %fxanim_mp_frost_candy_sign_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "crane01" ] = %fxanim_mp_frostbite_crane_01_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "crane02" ] = %fxanim_mp_frostbite_crane_02_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "crane03" ] = %fxanim_mp_frostbite_crane_03_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "crane04" ] = %fxanim_mp_frostbite_crane_04_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "crane05" ] = %fxanim_mp_frostbite_crane_05_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "river_ice" ] = %fxanim_mp_frost_ice_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "river_ice2" ] = %fxanim_mp_frost_ice_02_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "gate" ] = %fxanim_mp_frost_gate_anim; -} diff --git a/Multiplayer Maps/mp_hijacked/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_hijacked/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_hijacked/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_hijacked/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_hijacked/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_hijacked/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_hijacked/maps/mp/createart/mp_hijacked_art.gsc b/Multiplayer Maps/mp_hijacked/maps/mp/createart/mp_hijacked_art.gsc deleted file mode 100644 index ad15f3d..0000000 --- a/Multiplayer Maps/mp_hijacked/maps/mp/createart/mp_hijacked_art.gsc +++ /dev/null @@ -1,18 +0,0 @@ - -main() -{ - level.tweakfile = 1; - setdvar( "visionstore_glowTweakEnable", "0" ); - setdvar( "visionstore_glowTweakRadius0", "5" ); - setdvar( "visionstore_glowTweakRadius1", "" ); - setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); - setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); - setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); - setdvar( "visionstore_glowTweakBloomIntensity1", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); - visionsetnaked( "mp_hijacked", 1 ); - setdvar( "r_lightGridEnableTweaks", 1 ); - setdvar( "r_lightGridIntensity", 1 ); - setdvar( "r_lightGridContrast", 0 ); -} diff --git a/Multiplayer Maps/mp_hijacked/maps/mp/createfx/mp_hijacked_fx.gsc b/Multiplayer Maps/mp_hijacked/maps/mp/createfx/mp_hijacked_fx.gsc deleted file mode 100644 index f2fb4fa..0000000 --- a/Multiplayer Maps/mp_hijacked/maps/mp/createfx/mp_hijacked_fx.gsc +++ /dev/null @@ -1,1125 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hijacked_jacuzzi_surface" ); - ent.v[ "origin" ] = ( -90,1606, 407,945, 78,25 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hijacked_jacuzzi_steam" ); - ent.v[ "origin" ] = ( -92,9653, 422,779, 63,25 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 269 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hijacked_jacuzzi_steam" ); - ent.v[ "origin" ] = ( -2614,9, -20,3813, -95,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 269 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hijacked_jacuzzi_steam" ); - ent.v[ "origin" ] = ( -2759,45, 58,6316, -104,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 269 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_hijacked_sun1" ); - ent.v[ "origin" ] = ( 54061,7, 41344,5, 11412 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( 573,76, 144,561, 590,63 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( 575,94, -142,117, 589,247 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_shower_dribble" ); - ent.v[ "origin" ] = ( -179,646, 7,25836, 122,875 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( -465,908, 138,082, -64,465 ); - ent.v[ "angles" ] = ( 9, 182, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( -468,137, 68,1617, -60,7915 ); - ent.v[ "angles" ] = ( 12, 182, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( -103,006, 72,8002, -62,7217 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 9 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( -106,924, 136,317, -61,3858 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 12 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( 249,077, 167,536, 2,53726 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( 253,728, 264,641, 2,55747 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( 250,685, 53,8219, 2,39799 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( 248,311, -54,6842, 2,48961 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( 513,258, 281,236, 10,9304 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( -696,048, -89,0073, -57,8954 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( 118,751, 292,842, 2,43011 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( -18,5375, 141,529, -35,5661 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( -18,518, 77,4566, -34,5459 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( 117,807, -103,555, 1,44659 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( -34,3314, -102,545, 1,5224 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 446,336, -28,4747, 139,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 377,337, -182,483, 139,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 490,328, 3,23551, 139,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 446,01, -182,985, 139,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 376,631, -27,1527, 139,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 758,531, 3,59217, 139,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 759,759, 99,8241, 139,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 620,425, 53,7003, 139,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 490,33, 98,9914, 139,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 376,754, -357,466, 139,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 446,882, -357,271, 139,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1187,12, -122,312, 35,6413 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1186,13, -47,936, 35,1503 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1186,13, 49,0877, 34,0694 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1186,13, 131,298, 35,2899 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1186,13, 223,104, 35,8791 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1817,29, -289,908, 32,2346 ); - ent.v[ "angles" ] = ( 359,642, 111, 0,934186 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1696,05, -333,653, 32,5811 ); - ent.v[ "angles" ] = ( 359,642, 111, 0,934186 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1582,26, -423,005, 32,352 ); - ent.v[ "angles" ] = ( 359,066, 201,006, -0,358378 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1604,22, -483,334, 32,7958 ); - ent.v[ "angles" ] = ( 359,066, 201,006, -0,358378 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1751,84, -487,875, 33,1293 ); - ent.v[ "angles" ] = ( 0,342038, 290, -0,93969 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1872,43, -443,984, 33,0916 ); - ent.v[ "angles" ] = ( 0,342038, 290, -0,93969 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1942,16, -267,088, 32,6749 ); - ent.v[ "angles" ] = ( 0,358317, 69,0062, 0,933602 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1983,03, -380,555, 32,9846 ); - ent.v[ "angles" ] = ( 0,838674, 327, -0,544645 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( -570,107, 142,98, -35,5373 ); - ent.v[ "angles" ] = ( 88, 90, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( -571,625, 78,8251, -34,5465 ); - ent.v[ "angles" ] = ( 88, 90, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( -564,348, -102,706, 2,48068 ); - ent.v[ "angles" ] = ( 88, 90, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( -419,713, -103,868, 2,49886 ); - ent.v[ "angles" ] = ( 88, 90, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( -565,811, 292,94, 2,40515 ); - ent.v[ "angles" ] = ( 88, 90, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( -423,956, 293,601, 2,51992 ); - ent.v[ "angles" ] = ( 88, 90, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( 577,031, 281,144, 10,9113 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( 640,278, 281,298, 10,9397 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( 706,447, 281,368, 10,9698 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( -756,471, -89,2182, -56,0133 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( -821,903, -89,4519, -56,978 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( -882,412, -89,3507, -56,9891 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( -989,636, 16,0656, -55,0216 ); - ent.v[ "angles" ] = ( 88,6103, 136,011, -134,995 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( -989,634, 79,6021, -56,0087 ); - ent.v[ "angles" ] = ( 88,6103, 136,011, -134,995 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool_sm" ); - ent.v[ "origin" ] = ( -1095,11, 185,499, -56,0051 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_candle" ); - ent.v[ "origin" ] = ( -901,551, -187,907, 76,25 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_candle" ); - ent.v[ "origin" ] = ( -1400,1, -87,1361, 137,241 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_candle" ); - ent.v[ "origin" ] = ( -1322,14, -87,9463, 150,799 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_candle" ); - ent.v[ "origin" ] = ( -1303,17, -87,0827, 150,289 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_candle" ); - ent.v[ "origin" ] = ( -1381,12, -87,2421, 162,007 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_candle" ); - ent.v[ "origin" ] = ( -1328,09, -86,0462, 174,384 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_candle" ); - ent.v[ "origin" ] = ( -994,381, -252,893, 71,7775 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1126,48, -381,899, 35,9584 ); - ent.v[ "angles" ] = ( 0, 270, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1200,14, -382,218, 36,8903 ); - ent.v[ "angles" ] = ( 0, 270, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 641,813, -380,196, 35,4826 ); - ent.v[ "angles" ] = ( 0, 270, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 429,163, -380,125, 35,4553 ); - ent.v[ "angles" ] = ( 0, 270, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1197,07, 380,125, 35,0122 ); - ent.v[ "angles" ] = ( 0, 90,0032, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 785,838, 380,125, 34,5463 ); - ent.v[ "angles" ] = ( 0, 90,0032, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 736,895, 380,125, 34,8262 ); - ent.v[ "angles" ] = ( 0, 90,0032, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 604,161, 380,125, 34,9135 ); - ent.v[ "angles" ] = ( 0, 90,0032, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 552,431, 380,074, 34,3145 ); - ent.v[ "angles" ] = ( 0, 90,0032, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1691,75, 334,55, 33,1672 ); - ent.v[ "angles" ] = ( 359,642, 249,007, -0,933731 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1811,76, 288,482, 32,6657 ); - ent.v[ "angles" ] = ( 359,642, 249,007, -0,933731 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1937,39, 264,144, 32,4951 ); - ent.v[ "angles" ] = ( 0,275624, 286, -0,961268 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1980,37, 375,74, 33,2224 ); - ent.v[ "angles" ] = ( 0,874606, 29,0074, 0,484845 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1872,41, 441,024, 32,7692 ); - ent.v[ "angles" ] = ( 0,358351, 69,0066, 0,933587 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1750,96, 487,491, 33,2152 ); - ent.v[ "angles" ] = ( 0,358351, 69,0066, 0,933587 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1606,62, 495,855, 33,2961 ); - ent.v[ "angles" ] = ( 359,06, 160,001, 0,342072 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 1583,03, 434,408, 33,1925 ); - ent.v[ "angles" ] = ( 359,06, 160,001, 0,342072 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -815,355, -408,166, 40,8107 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -815,41, -319,905, 40,9866 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -815,433, -229,21, 41,1303 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -765,875, 65,5175, 33,4091 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -765,875, 160,831, 31,7225 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -765,875, 309,588, 33,5642 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -688,691, 347,301, 40,4182 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -688,847, 436,865, 40,1937 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -864,829, -443,716, 40,9711 ); - ent.v[ "angles" ] = ( 0, 270, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -945,951, -443,718, 8,40014 ); - ent.v[ "angles" ] = ( 0, 270, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -1022,13, -380,125, -30,4432 ); - ent.v[ "angles" ] = ( 0, 270, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -1384,84, -380,013, -29,4748 ); - ent.v[ "angles" ] = ( 0, 270, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -1471,65, -443,713, -19,6586 ); - ent.v[ "angles" ] = ( 0, 270, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -1410,8, -414,607, -20,735 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -1516,16, -407,42, -19,4231 ); - ent.v[ "angles" ] = ( 359, 180,004, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -1515,75, 417,051, -20,281 ); - ent.v[ "angles" ] = ( 359, 180,004, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -975,564, 380,125, -32,9078 ); - ent.v[ "angles" ] = ( 0, 90,0032, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -1216,8, 380,125, -31,3572 ); - ent.v[ "angles" ] = ( 0, 90,0032, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -1319,46, 380,125, -30,7559 ); - ent.v[ "angles" ] = ( 0, 90,0032, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -1466,67, 460,727, -20,6871 ); - ent.v[ "angles" ] = ( 0, 90,0032, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -946,329, 422,841, -20,0038 ); - ent.v[ "angles" ] = ( 359, 180,004, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -825,988, 460,74, 40,8308 ); - ent.v[ "angles" ] = ( 0, 90,0032, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -718,748, 460,508, 40,6256 ); - ent.v[ "angles" ] = ( 0, 90,0032, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -1626,13, 239,382, -32,4148 ); - ent.v[ "angles" ] = ( 359, 180,004, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -1626,13, 81,7721, -29,5249 ); - ent.v[ "angles" ] = ( 359, 180,004, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -1626,13, -91,6108, -30,4321 ); - ent.v[ "angles" ] = ( 359, 180,004, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( -1626,13, -248,435, -30,3627 ); - ent.v[ "angles" ] = ( 359, 180,004, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_shower_dribble_splsh" ); - ent.v[ "origin" ] = ( -177,097, 6,37252, 13 ); - ent.v[ "angles" ] = ( 270, 0, 91 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_sm" ); - ent.v[ "origin" ] = ( -200,111, 289,863, 43,125 ); - ent.v[ "angles" ] = ( 357,001, 268,003, -0,104803 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( -34,3951, 292,516, 2,41037 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "origin" ] = ( -256,192, 292,688, 2,39031 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 538,859, 61,8095, 283,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 538,648, -47,9137, 283,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 538,2, -155,784, 283,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 764,317, 109,847, 273,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 866,193, 83,1137, 273,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 867,596, 60,2214, 273,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 867,094, 34,388, 273,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 866,284, 8,7123, 273,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 866,546, -18,2473, 273,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 867,679, -42,9575, 273,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 866,797, -69,3849, 273,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 889,049, -123,277, 273,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 888,088, -212,317, 273,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 980,837, 161,725, 283,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1033,73, 124,848, 283,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1071,68, 83,8391, 283,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1091,16, 47,3708, 283,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1099,24, 11,8642, 283,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1100,05, -13,1719, 283,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1090,06, -48,5755, 283,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1070,73, -84,269, 283,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1033,9, -122,884, 283,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 977,734, -158,304, 283,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 973,899, 0, 283,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1021,04, 0,304002, 283,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1070,15, 0, 283,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1088,26, -313,302, 147,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1050,56, -314,54, 147,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1012,32, -314,039, 147,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1088,38, -140,576, 147,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1026,52, -139,238, 147,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 960,154, -140,634, 147,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 959,825, -33,4129, 147,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1052,86, -32,6805, 147,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1087,59, -13,8603, 147,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1123,2, -12,9115, 147,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1012,61, 104,865, 147,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1051,96, 105,646, 147,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1087,86, 104,489, 147,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 868,913, 350,593, 147,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1011,85, 349,628, 145,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1014,04, 188,655, 147,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 869,275, 190,384, 147,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -1454,85, 98,4955, 75,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -1355,53, 99,1895, 75,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -1254,55, 98,2117, 75,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -1254,02, -81,9806, 75,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -1356,24, -81,7505, 75,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -1454,68, -82,3886, 75,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -1568,28, -72,1987, 75,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -1570,08, 51,0223, 75,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -1568,25, -202,529, 75,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -1453,59, -177,412, 83,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -1454,58, 14,9142, 83,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -1253,8, 15,5092, 83,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -1322,88, 246,12, 67,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -1163,39, 246,638, 67,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -1164,17, 146,156, 67,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -1163,07, 352,566, 67,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -1477,64, 352,222, 67,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -1478,12, 245,472, 67,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -1477,61, 146,043, 67,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -814,761, -40,3514, 155,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -885,047, -39,1045, 155,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -813,578, 83,7546, 155,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -883,924, 84,7102, 155,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -960,938, 83,5231, 155,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -959,67, 215,766, 155,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -884,208, 216,164, 155,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -813,736, 216,564, 155,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -874,55, -120,464, 291,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -874,63, -39,8893, 291,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -993,46, -40,1239, 291,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -993,862, 65,9499, 291,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -874,332, 65,7785, 291,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -874,009, 146,622, 291,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -990,379, -313,807, 287,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( -1041,24, -314,682, 287,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( 740,937, -41,9317, 156,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 319 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( 550,424, -148,593, 156,125 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( 545,7, 30,6528, 156,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 289 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_thin_sm" ); - ent.v[ "origin" ] = ( -563,406, -46,8539, -136,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_thin_sm" ); - ent.v[ "origin" ] = ( -288,194, 184,573, -126,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_thin_sm" ); - ent.v[ "origin" ] = ( 42,5135, 29,7155, -124,536 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); - ent.v[ "origin" ] = ( 496,434, 282,036, -66,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); - ent.v[ "origin" ] = ( -34,7909, 323,486, 79,796 ); - ent.v[ "angles" ] = ( 270, 0, 34 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); - ent.v[ "origin" ] = ( -141,692, 326,389, 79 ); - ent.v[ "angles" ] = ( 270, 3,75173, -37,7517 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); - ent.v[ "origin" ] = ( 13,2024, 447,661, 79,2264 ); - ent.v[ "angles" ] = ( 270, 358,409, 110,591 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); - ent.v[ "origin" ] = ( -189,924, 444,388, 79,6899 ); - ent.v[ "angles" ] = ( 270, 3,17983, -112,18 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); - ent.v[ "origin" ] = ( -141,367, 506,563, 79,2371 ); - ent.v[ "angles" ] = ( 270, 357,955, -151,955 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); - ent.v[ "origin" ] = ( -36,8957, 508,739, 79 ); - ent.v[ "angles" ] = ( 270, 8,1301, 134,87 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); - ent.v[ "origin" ] = ( 701,505, 282,93, -58,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); - ent.v[ "origin" ] = ( 264,006, 280,999, -76,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); - ent.v[ "origin" ] = ( 255,944, 49,5022, -57,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); - ent.v[ "origin" ] = ( -199,942, 0, -121,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); - ent.v[ "origin" ] = ( -352,475, 9,23384, -93,5284 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); - ent.v[ "origin" ] = ( -556,845, 196,738, -125,333 ); - ent.v[ "angles" ] = ( 270, 358,551, 1,44936 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); - ent.v[ "origin" ] = ( -831,253, -90,8585, -129,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); - ent.v[ "origin" ] = ( -981,041, 30,9881, -133,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); - ent.v[ "origin" ] = ( -1089,81, 189,329, -129,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); - ent.v[ "origin" ] = ( 169,922, 200,423, -74,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); - ent.v[ "origin" ] = ( 29,7705, 225,651, -134,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); - ent.v[ "origin" ] = ( -58,4583, -24,3011, -59,3958 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); - ent.v[ "origin" ] = ( -386,601, 251,434, -40,2712 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); - ent.v[ "origin" ] = ( -539,588, -7,86453, -48,6544 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); - ent.v[ "origin" ] = ( -257,295, 226,934, -45,323 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fog_thin_xsm" ); - ent.v[ "origin" ] = ( -581,662, 224,229, -54,7916 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; -} diff --git a/Multiplayer Maps/mp_hijacked/maps/mp/mp_hijacked.gsc b/Multiplayer Maps/mp_hijacked/maps/mp/mp_hijacked.gsc deleted file mode 100644 index f83d3e1..0000000 --- a/Multiplayer Maps/mp_hijacked/maps/mp/mp_hijacked.gsc +++ /dev/null @@ -1,127 +0,0 @@ -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - level.overrideplayerdeathwatchtimer = ::leveloverridetime; - level.useintermissionpointsonwavespawn = ::useintermissionpointsonwavespawn; - maps/mp/mp_hijacked_fx::main(); - maps/mp/_load::main(); - maps/mp/mp_hijacked_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_hijacked" ); - level thread water_trigger_init(); -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "1600", reset_dvars ); - ss.dead_friend_influencer_radius = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_radius", "1300", reset_dvars ); - ss.dead_friend_influencer_timeout_seconds = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_timeout_seconds", "8", reset_dvars ); - ss.dead_friend_influencer_count = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_count", "7", reset_dvars ); - ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1200", reset_dvars ); - ss.koth_objective_influencer_inner_radius = 1400; -} - -water_trigger_init() -{ - wait 3; - triggers = getentarray( "trigger_hurt", "classname" ); - _a43 = triggers; - _k43 = getFirstArrayKey( _a43 ); - while ( isDefined( _k43 ) ) - { - trigger = _a43[ _k43 ]; - if ( trigger.origin[ 2 ] > level.mapcenter[ 2 ] ) - { - } - else - { - trigger thread water_trigger_think(); - } - _k43 = getNextArrayKey( _a43, _k43 ); - } - triggers = getentarray( "water_killbrush", "targetname" ); - _a55 = triggers; - _k55 = getFirstArrayKey( _a55 ); - while ( isDefined( _k55 ) ) - { - trigger = _a55[ _k55 ]; - trigger thread player_splash_think(); - _k55 = getNextArrayKey( _a55, _k55 ); - } -} - -player_splash_think() -{ - for ( ;; ) - { - self waittill( "trigger", entity ); - if ( isplayer( entity ) && isalive( entity ) ) - { - self thread trigger_thread( entity, ::player_water_fx ); - } - } -} - -player_water_fx( player, endon_condition ) -{ - maxs = self.origin + self getmaxs(); - if ( maxs[ 2 ] > 60 ) - { - maxs += vectorScale( ( 0, 0, 1 ), 10 ); - } - origin = ( player.origin[ 0 ], player.origin[ 1 ], maxs[ 2 ] ); - playfx( level._effect[ "water_splash_sm" ], origin ); -} - -water_trigger_think() -{ - for ( ;; ) - { - self waittill( "trigger", entity ); - if ( isplayer( entity ) ) - { - entity playsound( "mpl_splash_death" ); - playfx( level._effect[ "water_splash" ], entity.origin + vectorScale( ( 0, 0, 1 ), 40 ) ); - } - } -} - -leveloverridetime( defaulttime ) -{ - if ( self isinwater() ) - { - return 0,4; - } - return defaulttime; -} - -useintermissionpointsonwavespawn() -{ - return self isinwater(); -} - -isinwater() -{ - triggers = getentarray( "trigger_hurt", "classname" ); - _a120 = triggers; - _k120 = getFirstArrayKey( _a120 ); - while ( isDefined( _k120 ) ) - { - trigger = _a120[ _k120 ]; - if ( trigger.origin[ 2 ] > level.mapcenter[ 2 ] ) - { - } - else - { - if ( self istouching( trigger ) ) - { - return 1; - } - } - _k120 = getNextArrayKey( _a120, _k120 ); - } - return 0; -} diff --git a/Multiplayer Maps/mp_hijacked/maps/mp/mp_hijacked_amb.gsc b/Multiplayer Maps/mp_hijacked/maps/mp/mp_hijacked_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_hijacked/maps/mp/mp_hijacked_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_hijacked/maps/mp/mp_hijacked_fx.gsc b/Multiplayer Maps/mp_hijacked/maps/mp/mp_hijacked_fx.gsc deleted file mode 100644 index 4b6d970..0000000 --- a/Multiplayer Maps/mp_hijacked/maps/mp/mp_hijacked_fx.gsc +++ /dev/null @@ -1,48 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); - -precache_scripted_fx() -{ - level._effect[ "water_splash" ] = loadfx( "bio/player/fx_player_water_splash_mp" ); - level._effect[ "water_splash_sm" ] = loadfx( "bio/player/fx_player_water_splash_mp_sm" ); -} - -precache_createfx_fx() -{ - level._effect[ "fx_fire_candle" ] = loadfx( "fire/fx_fire_candle" ); - level._effect[ "fx_mp_hijacked_jacuzzi_surface" ] = loadfx( "maps/mp_maps/fx_mp_hijacked_jacuzzi_surface" ); - level._effect[ "fx_mp_hijacked_jacuzzi_steam" ] = loadfx( "maps/mp_maps/fx_mp_hijacked_jacuzzi_steam" ); - level._effect[ "fx_raid_hot_tub_sm" ] = loadfx( "water/fx_raid_hot_tub_sm" ); - level._effect[ "fx_mp_vent_heat_distort" ] = loadfx( "maps/mp_maps/fx_mp_vent_heat_distort" ); - level._effect[ "fx_mp_vent_steam_sm" ] = loadfx( "maps/mp_maps/fx_mp_vent_steam_sm" ); - level._effect[ "fx_water_shower_dribble_splsh" ] = loadfx( "water/fx_water_shower_dribble_splsh" ); - level._effect[ "fx_water_shower_dribble" ] = loadfx( "water/fx_water_shower_dribble" ); - level._effect[ "fx_light_beacon_red_blink_fst_sm" ] = loadfx( "light/fx_light_beacon_red_blink_fst_sm" ); - level._effect[ "fx_light_flour_glow_v_shape_cool" ] = loadfx( "light/fx_light_flour_glow_v_shape_cool" ); - level._effect[ "fx_light_flour_glow_v_shape_cool_sm" ] = loadfx( "light/fx_light_flour_glow_v_shape_cool_sm" ); - level._effect[ "fx_light_recessed_cool_sm" ] = loadfx( "light/fx_light_recessed_cool_sm" ); - level._effect[ "fx_light_recessed_cool_sm_soft" ] = loadfx( "light/fx_light_recessed_cool_sm_soft" ); - level._effect[ "fx_lf_mp_hijacked_sun1" ] = loadfx( "lens_flares/fx_lf_mp_hijacked_sun1" ); - level._effect[ "fx_paper_interior_short" ] = loadfx( "debris/fx_paper_interior_short" ); - level._effect[ "fx_mp_fog_thin_sm" ] = loadfx( "maps/mp_maps/fx_mp_fog_thin_sm" ); - level._effect[ "fx_mp_fog_thin_xsm" ] = loadfx( "maps/mp_maps/fx_mp_fog_thin_xsm" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "dryer" ] = %fxanim_gp_dryer_loop_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_01" ] = %fxanim_gp_seagull_circle_01_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_02" ] = %fxanim_gp_seagull_circle_02_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_03" ] = %fxanim_gp_seagull_circle_03_anim; - level.scr_anim[ "fxanim_props" ][ "umbrella_01" ] = %fxanim_gp_umbrella_01_anim; -} - -main() -{ - precache_fxanim_props(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_hijacked_fx::main(); - maps/mp/createart/mp_hijacked_art::main(); -} diff --git a/Multiplayer Maps/mp_hydro/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_hydro/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_hydro/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_hydro/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_hydro/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_hydro/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_hydro/maps/mp/_events.gsc b/Multiplayer Maps/mp_hydro/maps/mp/_events.gsc deleted file mode 100644 index 9f7ac09..0000000 --- a/Multiplayer Maps/mp_hydro/maps/mp/_events.gsc +++ /dev/null @@ -1,114 +0,0 @@ -#include maps/mp/gametypes/_globallogic_utils; -#include maps/mp/_utility; - -add_timed_event( seconds, notify_string, client_notify_string ) -{ -/# - assert( seconds >= 0 ); -#/ - if ( level.timelimit > 0 ) - { - level thread timed_event_monitor( seconds, notify_string, client_notify_string ); - } -} - -timed_event_monitor( seconds, notify_string, client_notify_string ) -{ - for ( ;; ) - { - wait 0,5; - if ( !isDefined( level.starttime ) ) - { - continue; - } - else - { - millisecs_remaining = maps/mp/gametypes/_globallogic_utils::gettimeremaining(); - seconds_remaining = millisecs_remaining / 1000; - if ( seconds_remaining <= seconds ) - { - event_notify( notify_string, client_notify_string ); - return; - } - } - } -} - -add_score_event( score, notify_string, client_notify_string ) -{ -/# - assert( score >= 0 ); -#/ - if ( level.scorelimit > 0 ) - { - if ( level.teambased ) - { - level thread score_team_event_monitor( score, notify_string, client_notify_string ); - return; - } - else - { - level thread score_event_monitor( score, notify_string, client_notify_string ); - } - } -} - -any_team_reach_score( score ) -{ - _a63 = level.teams; - _k63 = getFirstArrayKey( _a63 ); - while ( isDefined( _k63 ) ) - { - team = _a63[ _k63 ]; - if ( game[ "teamScores" ][ team ] >= score ) - { - return 1; - } - _k63 = getNextArrayKey( _a63, _k63 ); - } - return 0; -} - -score_team_event_monitor( score, notify_string, client_notify_string ) -{ - for ( ;; ) - { - wait 0,5; - if ( any_team_reach_score( score ) ) - { - event_notify( notify_string, client_notify_string ); - return; - } - } -} - -score_event_monitor( score, notify_string, client_notify_string ) -{ - for ( ;; ) - { - wait 0,5; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( isDefined( players[ i ].score ) && players[ i ].score >= score ) - { - event_notify( notify_string, client_notify_string ); - return; - } - i++; - } - } -} - -event_notify( notify_string, client_notify_string ) -{ - if ( isDefined( notify_string ) ) - { - level notify( notify_string ); - } - if ( isDefined( client_notify_string ) ) - { - clientnotify( client_notify_string ); - } -} diff --git a/Multiplayer Maps/mp_hydro/maps/mp/createfx/mp_hydro_fx.gsc b/Multiplayer Maps/mp_hydro/maps/mp/createfx/mp_hydro_fx.gsc deleted file mode 100644 index d26f0a0..0000000 --- a/Multiplayer Maps/mp_hydro/maps/mp/createfx/mp_hydro_fx.gsc +++ /dev/null @@ -1,1925 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2052,82, -2671,41, 1529,39 ); - ent.v[ "angles" ] = ( 11, 94, 0 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2128,64, -2679,26, 1532,27 ); - ent.v[ "angles" ] = ( 10,917, 86,8702, -1,35704 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1998,89, -2675,41, 1533,77 ); - ent.v[ "angles" ] = ( 11, 94, 0 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1935,84, -2698,56, 1543,51 ); - ent.v[ "angles" ] = ( 10,9847, 97,0559, 0,582839 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2276,34, -2689,46, 1515,56 ); - ent.v[ "angles" ] = ( 11, 90, 0 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2198,01, -2682,66, 1509,3 ); - ent.v[ "angles" ] = ( 10,939, 96,1114, 1,16396 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2342, -2669,86, 1511,18 ); - ent.v[ "angles" ] = ( 11, 90, 0 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2412,65, -2700,9, 1528,06 ); - ent.v[ "angles" ] = ( 10,9729, 85,9253, -0,776853 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2329,16, -2729,37, 1550,41 ); - ent.v[ "angles" ] = ( 10,917, 93,1296, 1,35701 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2261,95, -2727,11, 1550,67 ); - ent.v[ "angles" ] = ( 11, 86, 0 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2198,11, -2720,78, 1546,29 ); - ent.v[ "angles" ] = ( 11, 86, 0 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2135,49, -2714,65, 1563,17 ); - ent.v[ "angles" ] = ( 10,9847, 82,9439, -0,582858 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2062,63, -2681,49, 1508,37 ); - ent.v[ "angles" ] = ( 10,9576, 93,093, 0,970567 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1992,35, -2681,47, 1514,63 ); - ent.v[ "angles" ] = ( 11, 88, 0 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1929,37, -2678,8, 1510,25 ); - ent.v[ "angles" ] = ( 11, 88, 0 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1873,52, -2678,1, 1527,13 ); - ent.v[ "angles" ] = ( 10,9983, 86,9813, -0,194372 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_side" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2065,54, -2396,96, 1358,82 ); - ent.v[ "angles" ] = ( 62,9828, 89,4676, -0,313342 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_side" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2312,69, -2543,77, 1356,26 ); - ent.v[ "angles" ] = ( 56,9854, 87,6956, -4,61113 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_side" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2233,31, -2524,85, 1323,56 ); - ent.v[ "angles" ] = ( 55,974, 91,3205, 1,27719 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_side" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1967,88, -2511,56, 1304 ); - ent.v[ "angles" ] = ( 55,9646, 87,7551, -1,81747 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 466,24, -1445,26, 297,358 ); - ent.v[ "angles" ] = ( 359,255, 117,854, 2,05426 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -165,424, -1170,38, 211,878 ); - ent.v[ "angles" ] = ( 0,344091, 88,8737, 2,15786 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -579,509, -1488,69, 197,625 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 81 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1784,87, -1019,17, 248,562 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_hydro_sun1" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -252361, 399620, 250915 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1527,16, -1245,25, 250,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1626,52, -1182,75, 259,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2358,09, -1050,8, 239 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2308,35, -749,921, 259,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2285,1, -1218,5, 262,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2300,22, -816,447, 262,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1399,57, -161,103, 250,125 ); - ent.v[ "angles" ] = ( 24,5906, 92,3963, 0,617105 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 465,891, -73,493, 259,125 ); - ent.v[ "angles" ] = ( 355,592, 92,0962, 0,562776 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1272,36, -65,8394, 251,125 ); - ent.v[ "angles" ] = ( 17,5909, 92,3174, 0,588632 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1441,17, -335,006, 247,125 ); - ent.v[ "angles" ] = ( 0,372095, 359,142, -1,62169 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1165,74, -1326,99, 267,125 ); - ent.v[ "angles" ] = ( 359,449, 181,139, 0,601526 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_bottom" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1786,68, 891,308, -1093,88 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_bottom" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 151,115, 568,117, -1090,88 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_bottom" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -197,861, 569,815, -1093,88 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 95,0532, -1138,23, 205,859 ); - ent.v[ "angles" ] = ( 0,344091, 88,8737, 2,15786 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 101,247, -1528,84, 216,606 ); - ent.v[ "angles" ] = ( 0,344091, 88,8737, 2,15786 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -171,956, -1550,65, 219,594 ); - ent.v[ "angles" ] = ( 0,344091, 88,8737, 2,15786 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_side_b" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1992,57, 252,088, 54,3273 ); - ent.v[ "angles" ] = ( 57, 96, 0 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_side_b" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1932,7, 254,438, 33,0202 ); - ent.v[ "angles" ] = ( 59, 93, 0 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_bottom" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1721,7, 893,816, -1094,88 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 91 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1855,24, -1794,71, 100 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 87 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2162,79, -1805,66, 102 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 97 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2196,57, -1600,59, 97 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 103 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2024,71, -1045,98, 94,0515 ); - ent.v[ "angles" ] = ( 0, 0, 0 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2035,64, -1092,62, 98,7927 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 91 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_corner2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1795,81, -422,584, 85,3393 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 103 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2129,53, -897,87, 99,8196 ); - ent.v[ "angles" ] = ( 0, 0, 0 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_river_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2302,38, -2404,83, 974,115 ); - ent.v[ "angles" ] = ( 356,021, 90,9852, 0,418848 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast01" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -115,691, -862,168, 216,125 ); - ent.v[ "angles" ] = ( 357, 113, 0 ); - ent.v[ "delay" ] = 0,9; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast01" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 49,1121, -864,56, 214,204 ); - ent.v[ "angles" ] = ( 353,358, 64,8608, 1,62771 ); - ent.v[ "delay" ] = 0,9; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast01" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -45,0877, -361,985, 158,61 ); - ent.v[ "angles" ] = ( 295,157, 82,8883, 2,33001 ); - ent.v[ "delay" ] = 1,5; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast01" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 242,276, -339,837, 161,504 ); - ent.v[ "angles" ] = ( 320,23, 90,6643, -3,21933 ); - ent.v[ "delay" ] = 1,5; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast01" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -308,234, -356,983, 149,158 ); - ent.v[ "angles" ] = ( 320,23, 90,6643, -3,21933 ); - ent.v[ "delay" ] = 1,5; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast02" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -392,9, -656,784, 189,687 ); - ent.v[ "angles" ] = ( 321, 88, 0 ); - ent.v[ "delay" ] = 1,3; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast02" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -374,391, -533,755, 187,28 ); - ent.v[ "angles" ] = ( 321, 88, 0 ); - ent.v[ "delay" ] = 1,4; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast02" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -389,932, -396,36, 188,808 ); - ent.v[ "angles" ] = ( 321, 88, 0 ); - ent.v[ "delay" ] = 1,5; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast02" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 326,135, -359,082, 182,243 ); - ent.v[ "angles" ] = ( 321, 88, 0 ); - ent.v[ "delay" ] = 1,5; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast02" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 328,674, -504,435, 180,255 ); - ent.v[ "angles" ] = ( 321, 88, 0 ); - ent.v[ "delay" ] = 1,4; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast02" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 328,472, -648,633, 181,622 ); - ent.v[ "angles" ] = ( 321, 88, 0 ); - ent.v[ "delay" ] = 1,3; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -411,256, -509,809, 216,125 ); - ent.v[ "angles" ] = ( 270, 0, 41 ); - ent.v[ "delay" ] = 1,3; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -411,454, -452,358, 217,125 ); - ent.v[ "angles" ] = ( 270, 0, 38 ); - ent.v[ "delay" ] = 1,4; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -412,111, -387,558, 217,125 ); - ent.v[ "angles" ] = ( 270, 0, 41 ); - ent.v[ "delay" ] = 1,5; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -409,556, -343,526, 217,125 ); - ent.v[ "angles" ] = ( 270, 0, 41 ); - ent.v[ "delay" ] = 1,6; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 350,58, -448,946, 218,125 ); - ent.v[ "angles" ] = ( 270, 3,75173, -36,7517 ); - ent.v[ "delay" ] = 1,4; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 350,778, -506,397, 216,125 ); - ent.v[ "angles" ] = ( 270, 0, -35 ); - ent.v[ "delay" ] = 1,3; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 349,923, -384,146, 218,125 ); - ent.v[ "angles" ] = ( 270, 0, -35 ); - ent.v[ "delay" ] = 1,5; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 352,478, -340,114, 218,125 ); - ent.v[ "angles" ] = ( 270, 3,94519, -35,9451 ); - ent.v[ "delay" ] = 1,6; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast01" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -160,754, -742,163, 229,08 ); - ent.v[ "angles" ] = ( 0,986304, 97,0012, 0,243874 ); - ent.v[ "delay" ] = 1,1; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast01" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 98,7076, -759,976, 222,667 ); - ent.v[ "angles" ] = ( 357,016, 83,9916, 0,313913 ); - ent.v[ "delay" ] = 1,1; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast01" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -260,946, -767,161, 217,731 ); - ent.v[ "angles" ] = ( 351,218, 99,8639, -4,09223 ); - ent.v[ "delay" ] = 1,1; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast01" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 216,33, -787,167, 223,01 ); - ent.v[ "angles" ] = ( 350,446, 75,8534, 3,64031 ); - ent.v[ "delay" ] = 1,1; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_light_warning" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -214,648, -799,411, 276,875 ); - ent.v[ "angles" ] = ( 89, 180, 180 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_light_warning_blnk" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -215,156, -799,288, 276,875 ); - ent.v[ "angles" ] = ( 89, 180, 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1005; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_light_warning_blnk" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 155,16, -800,139, 276,875 ); - ent.v[ "angles" ] = ( 89, 180, 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1005; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_light_warning" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 155,668, -800,262, 276,875 ); - ent.v[ "angles" ] = ( 89, 180, 180 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_light_warning_blnk" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 327,634, -2034,5, 298,571 ); - ent.v[ "angles" ] = ( 89, 180, 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1005; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_light_warning" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 328,141, -2034,62, 298,571 ); - ent.v[ "angles" ] = ( 89, 180, 180 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_light_warning_blnk" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -407,341, -2035,22, 297,568 ); - ent.v[ "angles" ] = ( 89, 180, 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1005; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_light_warning" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -406,833, -2035,35, 297,568 ); - ent.v[ "angles" ] = ( 89, 180, 180 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_light_warning_blnk" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -32,3667, -1824,43, 299,875 ); - ent.v[ "angles" ] = ( 89, 180, 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1005; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_light_warning" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -31,8587, -1824,55, 299,875 ); - ent.v[ "angles" ] = ( 89, 180, 180 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_light_warning_blnk" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -356,508, -205,177, 286,419 ); - ent.v[ "angles" ] = ( 328,022, 272,359, -1,24934 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1005; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_light_warning" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -357,091, -205,404, 286,291 ); - ent.v[ "angles" ] = ( 328,022, 272,359, -1,24934 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_light_warning_blnk" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 282,887, -204,253, 287,226 ); - ent.v[ "angles" ] = ( 326,023, 272,413, -1,34857 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1005; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_light_warning" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 282,995, -203,762, 287,08 ); - ent.v[ "angles" ] = ( 326,023, 272,413, -1,34857 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_mist_tail" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -216,782, -607,271, 235,581 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 88 ); - ent.v[ "delay" ] = 2; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_mist_tail" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 151,145, -617,3, 236 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 88 ); - ent.v[ "delay" ] = 2; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast_end" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 133,029, -262,021, 178,44 ); - ent.v[ "angles" ] = ( 351, 91, 0 ); - ent.v[ "delay" ] = 1,6; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast_end" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -185,263, -272,333, 178,621 ); - ent.v[ "angles" ] = ( 345, 91, 0 ); - ent.v[ "delay" ] = 1,6; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_side_b" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -184,765, -126,231, 134,327 ); - ent.v[ "angles" ] = ( 60, 90, 0 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_side_b" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 127,468, -125,157, 143,721 ); - ent.v[ "angles" ] = ( 60, 90, 0 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2097,75, -831,716, 92,6086 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 91 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1972,71, -856,795, 95,7947 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 91 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast01" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -392,908, -2200,43, 215,404 ); - ent.v[ "angles" ] = ( 356,806, 109,298, 0,12213 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast01" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -309,16, -2207,5, 213,918 ); - ent.v[ "angles" ] = ( 355,159, 82,914, 1,22113 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast02" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -538,46, -2155,97, 196,893 ); - ent.v[ "angles" ] = ( 323,094, 155,324, 14,084 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast02" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -542,078, -2098,88, 197,934 ); - ent.v[ "angles" ] = ( 323,094, 155,324, 14,084 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast02" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -545,256, -2028,61, 200,089 ); - ent.v[ "angles" ] = ( 323,094, 155,324, 14,084 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -607,024, -2132,9, 219,125 ); - ent.v[ "angles" ] = ( 271,414, 98,003, -44,9957 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -608,403, -2075,7, 219,125 ); - ent.v[ "angles" ] = ( 270, 0, 56 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -610,299, -2014,77, 219,125 ); - ent.v[ "angles" ] = ( 270, 0, 59 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 554,313, -2133,65, 217,467 ); - ent.v[ "angles" ] = ( 270, 358,363, -59,363 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_water_spill" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 555,163, -2015,48, 217,467 ); - ent.v[ "angles" ] = ( 271,414, 276,018, 26,9912 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast02" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 487,343, -2011,03, 201,235 ); - ent.v[ "angles" ] = ( 321,316, 6,32823, -6,49901 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast02" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 488,717, -2077,21, 202,276 ); - ent.v[ "angles" ] = ( 323,904, 22,3859, -16,2928 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast02" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 489,394, -2151,54, 198,431 ); - ent.v[ "angles" ] = ( 324,798, 25,9103, -17,3473 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_river_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1964,77, -2398,3, 979,494 ); - ent.v[ "angles" ] = ( 356,021, 90,9852, 0,418848 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_river_top_b" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2031,28, -2393,34, 976,36 ); - ent.v[ "angles" ] = ( 356, 90, 0 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_big" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2207,85, -1932,77, 1001 ); - ent.v[ "angles" ] = ( 67, 94, 0 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast01" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 248,47, -2224,99, 210,799 ); - ent.v[ "angles" ] = ( 347,91, 94,7895, 1,10778 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast01" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 332,683, -2207, 217,663 ); - ent.v[ "angles" ] = ( 345,36, 77,7145, 0,44837 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_spray" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2162,7, -1933,88, 941,002 ); - ent.v[ "angles" ] = ( 11,4915, 87,2649, 1,66119 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_drip_splash" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2157,44, -1111,23, 209 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_drip_splash" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2098,92, -1088,26, 209,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_spray" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2103,76, -2041,85, 990,382 ); - ent.v[ "angles" ] = ( 3,37256, 91,0378, 1,87155 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1178,03, -1032,46, 263 ); - ent.v[ "angles" ] = ( 359,449, 181,139, 0,601526 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_bottom" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2013,31, 890,053, -1090,88 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1914,68, -610,823, 90,8482 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 67 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1880,64, -397,514, 89,124 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 104 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2020,74, -80,3449, 86,776 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 78 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1161,21, -2219,73, 330,268 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1097,44, -2221,31, 329,845 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -231,32, -1570,65, 277,64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 43 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -231,265, -1431,1, 277,757 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 43 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -231,342, -1275,48, 277,59 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 43 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -231,309, -1136,3, 277,667 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 43 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -231,312, -980,228, 277,643 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 43 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -230,82, -1730,54, 278,643 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 43 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -342,763, -1889,68, 278,767 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 43 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -264,412, -1811,45, 277,797 ); - ent.v[ "angles" ] = ( 46, 270, 0 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 246,183, -1811,18, 277,622 ); - ent.v[ "angles" ] = ( 46, 270, 0 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 278,68, -1888,67, 278,801 ); - ent.v[ "angles" ] = ( 45, 180, 0 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 166,846, -1731,29, 278,588 ); - ent.v[ "angles" ] = ( 45, 180, 0 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 166,368, -1570,14, 278,921 ); - ent.v[ "angles" ] = ( 45, 180, 0 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 166,815, -1431,28, 278,65 ); - ent.v[ "angles" ] = ( 45, 180, 0 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 166,739, -1275,23, 278,779 ); - ent.v[ "angles" ] = ( 45, 180, 0 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 166,813, -1135,03, 278,657 ); - ent.v[ "angles" ] = ( 45, 180, 0 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 166,74, -979,315, 278,772 ); - ent.v[ "angles" ] = ( 45, 180, 0 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -112,854, -978,802, 277,81 ); - ent.v[ "angles" ] = ( 45, 180, 0 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -112,919, -1135,25, 278,835 ); - ent.v[ "angles" ] = ( 45, 180, 0 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -112,732, -1274,63, 278,766 ); - ent.v[ "angles" ] = ( 45, 180, 0 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -112,64, -1430,58, 278,547 ); - ent.v[ "angles" ] = ( 45, 180, 0 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -112,711, -1569,39, 278,708 ); - ent.v[ "angles" ] = ( 45, 180, 0 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -33,5506, -1696,19, 278,672 ); - ent.v[ "angles" ] = ( 46, 270, 0 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 49,6113, -1570,22, 279,923 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 43 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 49,2977, -1431,29, 279,794 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 43 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 49,3865, -1275,57, 279,823 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 43 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 49,3544, -1136,11, 279,807 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 43 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 49,9966, -979,138, 279,508 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 43 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 182,611, -1485,19, 435,067 ); - ent.v[ "angles" ] = ( 0, 0, 0 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_water_pipe" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1773,05, -420,129, 264,578 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_water_pipe" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1709,45, -438,354, 266,46 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast01" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 14,8926, -1546,23, 188,995 ); - ent.v[ "angles" ] = ( 2,19847, 65,1081, 1,43134 ); - ent.v[ "delay" ] = 0,5; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast01" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -81,7838, -1546,74, 183,465 ); - ent.v[ "angles" ] = ( 358,861, 107,079, 1,79503 ); - ent.v[ "delay" ] = 0,5; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -425,05, -2177,78, 278,735 ); - ent.v[ "angles" ] = ( 43,0721, 88,7345, -1,13359 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 266,952, -2177,82, 278,664 ); - ent.v[ "angles" ] = ( 43,0721, 88,7345, -1,13359 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 361,152, -2177,94, 278,395 ); - ent.v[ "angles" ] = ( 43,0721, 88,7345, -1,13359 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast01_spill" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -386,188, -2190,85, 210,57 ); - ent.v[ "angles" ] = ( 355,058, 88,9346, 0,707331 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_flood_blast01_spill" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 337,096, -2187,49, 208,808 ); - ent.v[ "angles" ] = ( 355,011, 94,9572, 0,1855 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3590,43, 2554,86, 782,503 ); - ent.v[ "angles" ] = ( 270, 7,71059, 82,2893 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3778,6, 2554,59, 783,062 ); - ent.v[ "angles" ] = ( 270, 7,71059, 82,2893 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3531,08, 1036,72, 782,533 ); - ent.v[ "angles" ] = ( 270, 0,935656, -44,9356 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3663,91, 893,345, 782,53 ); - ent.v[ "angles" ] = ( 270, 0,935656, -44,9356 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2557,32, 280,579, 782,916 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2556,95, 91,2935, 782,309 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1166,46, -1346,86, 324,539 ); - ent.v[ "angles" ] = ( 43,0721, 88,7345, -1,13359 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1223,03, -1346,82, 324,554 ); - ent.v[ "angles" ] = ( 43,0721, 88,7345, -1,13359 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1102,43, -977,076, 324,506 ); - ent.v[ "angles" ] = ( 46, 270, 0 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1159,67, -977,072, 324,498 ); - ent.v[ "angles" ] = ( 46, 270, 0 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1221,24, -977,027, 324,37 ); - ent.v[ "angles" ] = ( 46, 270, 0 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1164,51, -977,078, 324,517 ); - ent.v[ "angles" ] = ( 46, 270, 0 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1102,49, -1346,86, 324,535 ); - ent.v[ "angles" ] = ( 43,0721, 88,7345, -1,13359 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1159,28, -1347,02, 324,265 ); - ent.v[ "angles" ] = ( 43,0721, 88,7345, -1,13359 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -858,543, -685,375, 331,351 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 795,354, -685,377, 331,278 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1175,51, -1988,16, 448,107 ); - ent.v[ "angles" ] = ( 40,0899, 298,827, 112,661 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_spark_bounce_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1313,75, -563,076, 428 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_carrier_spark_bounce_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1584,04, -145,958, 402,055 ); - ent.v[ "angles" ] = ( 354, 0, 1 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2026,38, -914,425, 108,525 ); - ent.v[ "angles" ] = ( 0, 0, 0 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1898,96, -462,226, 87,2239 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 13 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2058,9, -490,204, 91,016 ); - ent.v[ "angles" ] = ( 0, 0, 0 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_corner2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1733,47, -441,988, 87,4946 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 80 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1760,61, -218,768, 86,0852 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 86 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1813,8, -357,981, 88,7497 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 76 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1898,29, -752,978, 92,5347 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 104 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1965,87, -217,876, 87,6689 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 89 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1193,49, -1598,6, 458,892 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1151,18, -1890,76, 445,465 ); - ent.v[ "angles" ] = ( 28,7087, 293,974, -63,9909 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -761,044, -1983, 447,302 ); - ent.v[ "angles" ] = ( 49,9351, 305,521, 118,249 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -941,731, -1993,28, 448,463 ); - ent.v[ "angles" ] = ( 56,1551, 299,64, 114,481 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1631,7, -627,746, 263,989 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 69 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1572,26, -643,986, 257,223 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_side_b" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1786,75, 289,149, -35,9182 ); - ent.v[ "angles" ] = ( 57, 96, 0 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_side_b" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1731,66, 309,789, -63,2046 ); - ent.v[ "angles" ] = ( 59, 93, 0 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_bottom" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1953,89, 914,666, -1088,88 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 91 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2118,36, -1494,5, 216,817 ); - ent.v[ "angles" ] = ( 325, 81, 0 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1228,44, -1336,03, 260 ); - ent.v[ "angles" ] = ( 0,663961, 13,139, -0,473831 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1262,03, -1041,72, 268 ); - ent.v[ "angles" ] = ( 0,663961, 13,139, -0,473831 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -31,7349, -493,683, 208,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -243,987, -1056,39, 307 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -595,417, -1151,62, 271,92 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 161,59, -1030,86, 308 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 579,632, -1184,81, 265,689 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2013,41, -754,307, 91,7958 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 89 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1966,16, -523,137, 90,5133 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 89 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_river_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2045,27, -573,982, 90,6243 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 86 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_river_top_b" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2238,35, -2395,33, 992,096 ); - ent.v[ "angles" ] = ( 356, 90, 0 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2075,28, -1508,54, 173 ); - ent.v[ "angles" ] = ( 325, 81, 0 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_splash_edge" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -369,975, -485,596, 222,454 ); - ent.v[ "angles" ] = ( 0, 0, 0 ); - ent.v[ "delay" ] = 1,3; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_splash_edge" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 308,799, -502,748, 219,842 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 2 ); - ent.v[ "delay" ] = 1,3; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1726,93, -1330,76, 207,412 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2675,57, -892,195, 208,398 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2240,97, -454,214, 208,397 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_drip_splash" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2146,62, -1098,63, 208 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_drip_splash" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2204,18, -1111,86, 208 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_hydro_tube_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 612,585, -405,044, 370,427 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_hydro_tube_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 611,52, -232,791, 370,365 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_hydro_tube_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1026,78, -233,827, 338,456 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -627,625, -2549,36, 330,112 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 180 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 36,6848, -1363,15, 433,484 ); - ent.v[ "angles" ] = ( 90, 0, -180 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -99,2721, -1363,84, 433,497 ); - ent.v[ "angles" ] = ( 90, 0, -180 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1506,4, 6537,77, -1707,4 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -110,955, 6425,6, -1708,61 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1648,25, 6513,32, -1601,85 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -755,422, -2210,77, 355,505 ); - ent.v[ "angles" ] = ( 43,0721, 88,7345, -1,13359 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -990,859, -2210,49, 355,781 ); - ent.v[ "angles" ] = ( 43,0721, 88,7345, -1,13359 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1160,49, -2210,69, 355,674 ); - ent.v[ "angles" ] = ( 43,0721, 88,7345, -1,13359 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1324,89, -2210,81, 355,395 ); - ent.v[ "angles" ] = ( 43,0721, 88,7345, -1,13359 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 697,706, -2210,69, 355,645 ); - ent.v[ "angles" ] = ( 43,0721, 88,7345, -1,13359 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 934,094, -2210,73, 355,574 ); - ent.v[ "angles" ] = ( 43,0721, 88,7345, -1,13359 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1095,97, -2210,71, 355,615 ); - ent.v[ "angles" ] = ( 43,0721, 88,7345, -1,13359 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1266,26, -2210,73, 355,57 ); - ent.v[ "angles" ] = ( 43,0721, 88,7345, -1,13359 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1129,97, -1598,62, 459,151 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -818,794, 4644,14, -1102,88 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 92 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -494,498, 4642,28, -1097,56 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 92 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -179,776, 4631,22, -1098,74 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 92 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 210,565, 4640,95, -1098,38 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 92 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 530,588, 4606,62, -1097,53 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 92 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 847,021, 4569,71, -1096,77 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 92 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1169,26, 4575,48, -1097,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 92 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1490,5, 4568,88, -1089,24 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 92 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1808,96, 4557,56, -1097,55 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 92 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2123,02, 4566,43, -1089,41 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 92 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2447,17, 4560,09, -1095,19 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 92 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2092,44, 4648,44, -1095,74 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 92 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2416,74, 4650,31, -1101,06 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 92 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1775,94, 4639,8, -1096,92 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 92 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1455,34, 4626, -1096,56 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 92 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1137,36, 4612,66, -1095,71 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 92 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_big" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2097,83, -2070,16, 879,83 ); - ent.v[ "angles" ] = ( 60, 94, 0 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_hvac_steam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1139,88, -824,86, 507,588 ); - ent.v[ "angles" ] = ( 271, 89,9983, -179,998 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_hvac_steam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1078,68, -840,045, 512,588 ); - ent.v[ "angles" ] = ( 271, 89,9983, -179,998 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 388,105, -1287,29, 294,53 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -446,469, -1259,1, 295,287 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_xlrg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1831,52, 942,271, -896,811 ); - ent.v[ "angles" ] = ( 342, 94, 0 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_xlrg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1886,32, 976,355, -885,117 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 88 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_xlrg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 117,786, 632,247, -795,534 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 88 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_xlrg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -152,096, 631,545, -802,303 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 88 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_xlrg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3719,54, -113,025, 305,403 ); - ent.v[ "angles" ] = ( 7,17566, 49,5615, -6,9832 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_big2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4414,34, -581,72, 1075,19 ); - ent.v[ "angles" ] = ( 69,5146, 41,4026, -2,31795 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_big2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4398,49, -595,333, 1033,61 ); - ent.v[ "angles" ] = ( 59,6776, 134,947, 0,447249 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_xlrg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3731,79, -136,636, 381,986 ); - ent.v[ "angles" ] = ( 6,80137, 141,437, 7,34813 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_big" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 188,664, -2420,59, 1359,28 ); - ent.v[ "angles" ] = ( 67, 94, 0 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam_big" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -270,973, -2491,22, 1402,88 ); - ent.v[ "angles" ] = ( 67, 94, 0 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -895,288, -1886,13, 442,363 ); - ent.v[ "angles" ] = ( 28,7087, 293,974, -63,9909 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -769,576, -1962,03, 493,174 ); - ent.v[ "angles" ] = ( 28,7087, 293,974, -63,9909 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -940,206, -1957,09, 489,871 ); - ent.v[ "angles" ] = ( 28,7087, 293,974, -63,9909 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1104,88, -1953,88, 487,722 ); - ent.v[ "angles" ] = ( 28,7087, 293,974, -63,9909 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1147,49, -2035,41, 542,3 ); - ent.v[ "angles" ] = ( 28,7087, 293,974, -63,9909 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -975,02, -2029,6, 538,41 ); - ent.v[ "angles" ] = ( 28,7087, 293,974, -63,9909 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -809,417, -2026,56, 536,377 ); - ent.v[ "angles" ] = ( 28,7087, 293,974, -63,9909 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1106,69, -2116,2, 596,382 ); - ent.v[ "angles" ] = ( 28,7087, 293,974, -63,9909 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -850,023, -2112,99, 594,235 ); - ent.v[ "angles" ] = ( 28,7087, 293,974, -63,9909 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 970,745, -1988,04, 509,452 ); - ent.v[ "angles" ] = ( 28,7087, 293,974, -63,9909 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1139,39, -1997,84, 516,014 ); - ent.v[ "angles" ] = ( 28,7087, 293,974, -63,9909 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1016,15, -1928,18, 469,385 ); - ent.v[ "angles" ] = ( 28,7087, 293,974, -63,9909 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1182,59, -1929,43, 470,215 ); - ent.v[ "angles" ] = ( 28,7087, 293,974, -63,9909 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1013,57, -2090,6, 578,113 ); - ent.v[ "angles" ] = ( 28,7087, 293,974, -63,9909 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1186,74, -2085,46, 574,673 ); - ent.v[ "angles" ] = ( 28,7087, 293,974, -63,9909 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1941,3, -939,942, 109,079 ); - ent.v[ "angles" ] = ( 0, 0, 0 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2058,17, -971,553, 108,239 ); - ent.v[ "angles" ] = ( 0, 0, 0 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1876,73, -943,336, 107,028 ); - ent.v[ "angles" ] = ( 0, 0, 0 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1777,02, 11537,5, -979,88 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1137,53, 11487, -1007,91 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 211,173, 11552,3, -961,54 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -496,111, 11501,4, -995,7 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 854,694, 11612, -986,82 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2129,98, 11633,4, -995,78 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1496,67, 11584,3, -1012,94 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2151,06, -580,885, 87,5826 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 86 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2085,95, -580,363, 86,5911 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 95 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1194,13, -1524,94, 466,635 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1144,59, -1522,29, 466,582 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1996,43, -986,693, 90,3395 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2073,9, -986,414, 89,3378 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2011,42, -975,625, 90,1791 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1933,06, -981,509, 90,1401 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 778,852, -188,641, 363,812 ); - ent.v[ "angles" ] = ( 46, 270, 0 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 652,786, -188,265, 363,575 ); - ent.v[ "angles" ] = ( 46, 270, 0 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -659,127, -188,247, 363,552 ); - ent.v[ "angles" ] = ( 46, 270, 0 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -720,189, -188,412, 363,732 ); - ent.v[ "angles" ] = ( 46, 270, 0 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -783,297, -188,119, 363,266 ); - ent.v[ "angles" ] = ( 46, 270, 0 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -844,539, -188,557, 363,788 ); - ent.v[ "angles" ] = ( 46, 270, 0 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -907,553, -188,297, 363,64 ); - ent.v[ "angles" ] = ( 46, 270, 0 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 196,213, -1779,2, 199,125 ); - ent.v[ "angles" ] = ( 0,344091, 88,8737, 2,15786 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 304,422, -2054,55, 208,125 ); - ent.v[ "angles" ] = ( 0,344091, 88,8737, 2,15786 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -263,879, -1802,53, 204,125 ); - ent.v[ "angles" ] = ( 0,344091, 88,8737, 2,15786 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -254,012, -1994,83, 205,125 ); - ent.v[ "angles" ] = ( 0,344091, 88,8737, 2,15786 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -379,435, -2038,39, 224,579 ); - ent.v[ "angles" ] = ( 0,344091, 88,8737, 2,15786 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam2_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 173,415, -1907,23, 211,125 ); - ent.v[ "angles" ] = ( 0,344091, 88,8737, 2,15786 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -331,952, -2177,79, 278,705 ); - ent.v[ "angles" ] = ( 43,0721, 88,7345, -1,13359 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -388,918, -1923,71, 271,096 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -280,028, -1726,48, 271,093 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 231,21, -1726,62, 271,094 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare_green2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 320,759, -1923,87, 272,092 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_hydro_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -30,1824, -1579,32, 309,125 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_steam_behind_glass2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 779,03, -2532,73, 183,806 ); - ent.v[ "angles" ] = ( 295,839, 139,671, -144,856 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_steam_behind_glass1" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1020,87, -2557,2, 221,763 ); - ent.v[ "angles" ] = ( 336, 88,9793, -0,942621 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_steam_behind_glass2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1072,77, -2517,25, 190,005 ); - ent.v[ "angles" ] = ( 291,776, 32,4804, -42,5563 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_steam_behind_glass1" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 881,23, -2660,54, 241,661 ); - ent.v[ "angles" ] = ( 336, 88,9793, -0,942621 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_steam_behind_glass1" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -978,173, -2568,53, 250,768 ); - ent.v[ "angles" ] = ( 336,179, 94,4455, -2,15952 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_steam_behind_glass2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1201,39, -2531,02, 180,913 ); - ent.v[ "angles" ] = ( 291,17, 167,755, -170,712 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_steam_behind_glass2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -979,148, -2519,8, 208,843 ); - ent.v[ "angles" ] = ( 307,343, 2,5724, -8,60869 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_steam_behind_glass1" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1195,29, -2683,66, 251,995 ); - ent.v[ "angles" ] = ( 336,179, 94,4455, -2,15952 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 0,151123, -1587,44, 442,789 ); - ent.v[ "angles" ] = ( 43,0721, 88,7345, -1,13359 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -123,081, -1587,82, 442,394 ); - ent.v[ "angles" ] = ( 43,0721, 88,7345, -1,13359 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 122,44, -1587,9, 442,212 ); - ent.v[ "angles" ] = ( 43,0721, 88,7345, -1,13359 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -223,631, -1543,76, 442,708 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 43 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 161,536, -1357,21, 442,74 ); - ent.v[ "angles" ] = ( 45, 180, 0 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 24,6861, -1201,88, 442,912 ); - ent.v[ "angles" ] = ( 46, 270, 0 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_tunnel_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -100,39, -1201,2, 442,438 ); - ent.v[ "angles" ] = ( 46, 270, 0 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 170,602, -1485,09, 435,117 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 180 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fan_light_shaft_anim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -532,995, -2072,46, 343,882 ); - ent.v[ "angles" ] = ( 86,6199, 6,51528, 90,9333 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fan_light_shaft_anim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 466,932, -2071,99, 344,881 ); - ent.v[ "angles" ] = ( 86,6199, 6,51528, 90,9333 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2417,8, 11582,2, -996,88 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_steam3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1998,76, -585,349, 114,366 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1797,08, -436,714, 92,6481 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 14 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1991,6, -581,31, 103,341 ); - ent.v[ "angles" ] = ( 2,18255, 3,90224, 1,46031 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2071,43, -222,302, 101,03 ); - ent.v[ "angles" ] = ( 3,18223, 3,92776, 1,4615 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2138,59, -262,778, 98,3231 ); - ent.v[ "angles" ] = ( 3,37162, 354,915, 0,945253 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_strip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1934,04, -580,823, 104,675 ); - ent.v[ "angles" ] = ( 3,18223, 3,92776, 1,4615 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_corner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1829,18, -211,296, 86,0448 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2104,86, 11695, -963,247 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1464,07, 11650,3, -946,247 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -824,585, 11599,9, -974,277 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -183,165, 11614,2, -962,067 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 524,119, 11665,1, -955,907 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1167,64, 11724,8, -993,187 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_dam_water_top_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1791,62, 11697,1, -1009,31 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3377,75, 3713,56, 779,958 ); - ent.v[ "angles" ] = ( 270, 7,71059, 82,2893 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_red_blink" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3571,35, 3718,45, 780,517 ); - ent.v[ "angles" ] = ( 270, 7,71059, 82,2893 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_light_warning_blnk_sm" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -32,3471, -1623,88, 312,233 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1005; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_hydro_light_warning_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -32,3471, -1623,88, 312,233 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 90 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_hydro_tube_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 612,112, -565,014, 370,42 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_hydro_tube_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1026,83, -361,781, 338,476 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_hydro_tube_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1028,39, -569,425, 338,553 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1158,21, -647,371, 442,898 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1158,55, -871,536, 466,552 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1223,68, -869,977, 466,543 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1224,29, -648,488, 442,431 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_hydro_tube_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1036,21, -252,793, 338,364 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_hydro_tube_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -674,316, -539,396, 370,552 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_hydro_tube_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1074,26, -588,583, 338,418 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_hatch_spray" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -26,2665, -1572,47, 256,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 0, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_killstreak_spillway_2" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1900, -488, 110 ); - ent.v[ "angles" ] = ( 0, 0, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_killstreak_spillway_1" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -1970, -500, 135 ); - ent.v[ "angles" ] = ( 0, 0, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_mp_hydro_killstreak_spillway_mid" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -30, -935, 220 ); - ent.v[ "angles" ] = ( 0, 0, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; -} diff --git a/Multiplayer Maps/mp_hydro/maps/mp/mp_hydro.gsc b/Multiplayer Maps/mp_hydro/maps/mp/mp_hydro.gsc deleted file mode 100644 index 180b51e..0000000 --- a/Multiplayer Maps/mp_hydro/maps/mp/mp_hydro.gsc +++ /dev/null @@ -1,472 +0,0 @@ -#include maps/mp/gametypes/_gameobjects; -#include maps/mp/gametypes/ctf; -#include maps/mp/gametypes/_weaponobjects; -#include maps/mp/killstreaks/_rcbomb; -#include maps/mp/_tacticalinsertion; -#include maps/mp/_compass; -#include maps/mp/_events; -#include common_scripts/utility; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - precacheitem( "hydro_water_mp" ); - maps/mp/mp_hydro_fx::main(); - precachemodel( "collision_physics_256x256x10" ); - precachemodel( "collision_missile_128x128x10" ); - precachemodel( "collision_physics_64x64x64" ); - maps/mp/_load::main(); - maps/mp/mp_hydro_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_hydro" ); - maps/mp/mp_hydro_amb::main(); -/# - execdevgui( "devgui_mp_hydro" ); -#/ - registerclientfield( "world", "pre_wave", 1, 1, "int" ); - registerclientfield( "world", "big_wave", 1, 1, "int" ); - setdvar( "compassmaxrange", "2300" ); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - spawncollision( "collision_physics_256x256x10", "collider", ( 3695, 340, 84 ), ( 0, 44,8, -90 ) ); - spawncollision( "collision_physics_256x256x10", "collider", ( 3449, 82, 84 ), ( 0, 44,8, -90 ) ); - spawncollision( "collision_physics_64x64x64", "collider", ( 577,5, -1835, 309,5 ), ( 0, 0, 1 ) ); - spawncollision( "collision_physics_64x64x64", "collider", ( 577,5, -1786,5, 339,5 ), ( 0, 0, 1 ) ); - spawncollision( "collision_physics_64x64x64", "collider", ( -641,5, -1834,5, 309,5 ), ( 0, 0, 1 ) ); - spawncollision( "collision_physics_64x64x64", "collider", ( -641,5, -1786, 339,5 ), ( 0, 0, 1 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -521,5, -2106, 325 ), vectorScale( ( 0, 0, 1 ), 90 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -521,5, -2041, 325 ), vectorScale( ( 0, 0, 1 ), 90 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( 471,5, -2106, 325 ), vectorScale( ( 0, 0, 1 ), 90 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( 471,5, -2041, 325 ), vectorScale( ( 0, 0, 1 ), 90 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( 1432, -1912, 376,5 ), vectorScale( ( 0, 0, 1 ), 90 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( 1516,5, -1912, 376,5 ), vectorScale( ( 0, 0, 1 ), 90 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -1490, -1916,5, 376,5 ), vectorScale( ( 0, 0, 1 ), 90 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -1574,5, -1916,5, 376,5 ), vectorScale( ( 0, 0, 1 ), 90 ) ); - level.waterrushfx = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_wall" ); - level.waterambientfxmiddlefront = loadfx( "maps/mp_maps/fx_mp_hydro_flood_splash_middle_front" ); - level.waterambientfxmiddleback = loadfx( "maps/mp_maps/fx_mp_hydro_flood_splash_middle_back" ); - level.waterambientfxleftfront = loadfx( "maps/mp_maps/fx_mp_hydro_flood_splash_right" ); - level.waterambientfxleftmiddle = loadfx( "maps/mp_maps/fx_mp_hydro_flood_splash_left_mid" ); - level.waterambientfxleftback = loadfx( "maps/mp_maps/fx_mp_hydro_flood_splash_left_back" ); - level.waterambientfxrightfront = loadfx( "maps/mp_maps/fx_mp_hydro_flood_splash_left" ); - level.waterambientfxrightmiddle = loadfx( "maps/mp_maps/fx_mp_hydro_flood_splash_right_mid" ); - level.waterambientfxrightback = loadfx( "maps/mp_maps/fx_mp_hydro_flood_splash_right_back" ); - level.waterambientfxboxfront = loadfx( "maps/mp_maps/fx_mp_hydro_flood_splash_box" ); - level.waterambientfxboxback = loadfx( "maps/mp_maps/fx_mp_hydro_flood_splash_box_back" ); - setdvar( "tu6_player_shallowWaterHeight", "10.5" ); - visionsetnaked( "mp_hydro", 1 ); - level thread removeobjectsondemovertime(); - set_dvar_if_unset( "scr_hydro_water_rush", 1 ); - if ( getgametypesetting( "allowMapScripting" ) ) - { - level.overrideplayerdeathwatchtimer = ::leveloverridetime; - initwatertriggers(); - } -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2400", reset_dvars ); -} - -leveloverridetime( defaulttime ) -{ - if ( isDefined( self.lastattacker ) && isDefined( self.lastattacker.targetname ) && self.lastattacker.targetname == "water_kill_trigger" ) - { - return 0,4; - } - return defaulttime; -} - -initwatertriggers() -{ - water_kill_triggers = getentarray( "water_kill_trigger", "targetname" ); - water_mover = spawn( "script_model", ( 0, 0, 1 ) ); - water_mover setmodel( "tag_origin" ); - water_ambient_mover = spawn( "script_model", ( 0, 0, 1 ) ); - water_ambient_mover setmodel( "tag_origin" ); - water_ambient_front_pillar = spawn( "script_model", ( -31, -888, 202 ) ); - water_ambient_front_pillar setmodel( "tag_origin" ); - water_ambient_front_pillar.angles = vectorScale( ( 0, 0, 1 ), 90 ); - water_ambient_front_pillar linkto( water_ambient_mover ); - water_ambient_back_pillar = spawn( "script_model", ( -32, -1535, 202 ) ); - water_ambient_back_pillar setmodel( "tag_origin" ); - water_ambient_back_pillar.angles = vectorScale( ( 0, 0, 1 ), 90 ); - water_ambient_back_pillar linkto( water_ambient_mover ); - water_ambient_front_block = spawn( "script_model", ( -32, -331, 193 ) ); - water_ambient_front_block setmodel( "tag_origin" ); - water_ambient_front_block.angles = vectorScale( ( 0, 0, 1 ), 90 ); - water_ambient_front_block linkto( water_ambient_mover ); - water_ambient_back_block = spawn( "script_model", ( -32, -1800, 199 ) ); - water_ambient_back_block setmodel( "tag_origin" ); - water_ambient_back_block.angles = vectorScale( ( 0, 0, 1 ), 90 ); - water_ambient_back_block linkto( water_ambient_mover ); - water_ambient_back_right = spawn( "script_model", ( -467, -1975, 190 ) ); - water_ambient_back_right setmodel( "tag_origin" ); - water_ambient_back_right.angles = vectorScale( ( 0, 0, 1 ), 90 ); - water_ambient_back_right linkto( water_ambient_mover ); - water_ambient_back_left = spawn( "script_model", ( 404, -1975, 190 ) ); - water_ambient_back_left setmodel( "tag_origin" ); - water_ambient_back_left.angles = vectorScale( ( 0, 0, 1 ), 90 ); - water_ambient_back_left linkto( water_ambient_mover ); - water_ambient_middle_right = spawn( "script_model", ( -274, -1680, 185 ) ); - water_ambient_middle_right setmodel( "tag_origin" ); - water_ambient_middle_right.angles = vectorScale( ( 0, 0, 1 ), 90 ); - water_ambient_middle_right linkto( water_ambient_mover ); - water_ambient_middle_left = spawn( "script_model", ( 215, -1680, 185 ) ); - water_ambient_middle_left setmodel( "tag_origin" ); - water_ambient_middle_left.angles = vectorScale( ( 0, 0, 1 ), 90 ); - water_ambient_middle_left linkto( water_ambient_mover ); - water_ambient_front_right = spawn( "script_model", ( -333, -302, 185 ) ); - water_ambient_front_right setmodel( "tag_origin" ); - water_ambient_front_right.angles = vectorScale( ( 0, 0, 1 ), 90 ); - water_ambient_front_right linkto( water_ambient_mover ); - water_ambient_front_left = spawn( "script_model", ( 265, -302, 185 ) ); - water_ambient_front_left setmodel( "tag_origin" ); - water_ambient_front_left.angles = vectorScale( ( 0, 0, 1 ), 90 ); - water_ambient_front_left linkto( water_ambient_mover ); - water_pa_1 = spawn( "script_model", ( 1667, -1364, 684 ) ); - water_pa_1 setmodel( "tag_origin" ); - water_pa_2 = spawn( "script_model", ( -1806, -1375, 783 ) ); - water_pa_2 setmodel( "tag_origin" ); - water_pa_3 = spawn( "script_model", ( -100, -1375, 783 ) ); - water_pa_3 setmodel( "tag_origin" ); - wait 0,1; - water_kill_triggers[ 0 ] enablelinkto(); - water_kill_triggers[ 0 ] linkto( water_mover ); - water_kill_triggers[ 1 ] enablelinkto(); - water_kill_triggers[ 1 ] linkto( water_mover ); - playfxontag( level.waterambientfxmiddlefront, water_ambient_front_pillar, "tag_origin" ); - playfxontag( level.waterambientfxmiddleback, water_ambient_back_pillar, "tag_origin" ); - playfxontag( level.waterambientfxboxfront, water_ambient_front_block, "tag_origin" ); - playfxontag( level.waterambientfxboxback, water_ambient_back_block, "tag_origin" ); - playfxontag( level.waterambientfxrightback, water_ambient_back_right, "tag_origin" ); - playfxontag( level.waterambientfxleftback, water_ambient_back_left, "tag_origin" ); - playfxontag( level.waterambientfxrightmiddle, water_ambient_middle_right, "tag_origin" ); - playfxontag( level.waterambientfxleftmiddle, water_ambient_middle_left, "tag_origin" ); - playfxontag( level.waterambientfxrightfront, water_ambient_front_right, "tag_origin" ); - playfxontag( level.waterambientfxleftfront, water_ambient_front_left, "tag_origin" ); - setdvar( "R_WaterWaveBase", 0 ); - if ( level.timelimit ) - { - seconds = level.timelimit * 60; - add_timed_event( int( seconds * 0,25 ), "hydro_water_rush" ); - add_timed_event( int( seconds * 0,75 ), "hydro_water_rush" ); - } - else - { - if ( level.scorelimit ) - { - add_score_event( int( level.scorelimit * 0,25 ), "hydro_water_rush" ); - add_score_event( int( level.scorelimit * 0,75 ), "hydro_water_rush" ); - } - } - self thread watchwatertrigger( water_mover, water_kill_triggers, water_pa_1, water_pa_2, water_pa_3, water_ambient_back_pillar, water_ambient_front_block, water_ambient_mover ); - self thread waterkilltriggerthink( water_kill_triggers ); - wait 5; - setdvar( "R_WaterWaveBase", 0 ); -} - -watchwatertrigger( water_mover, water_kill_triggers, water_pa_1, water_pa_2, water_pa_3, water_ambient_back, water_ambient_box, water_ambient_mover ) -{ - thread watchdevnotify(); - for ( ;; ) - { - level waittill_any( "hydro_water_rush", "dev_water_rush" ); - setclientfield( "pre_wave", 1 ); - water_ambient_back playloopsound( "amb_train_incomming_beep" ); - water_ambient_box playloopsound( "amb_train_incoming_beep" ); - water_pa_1 playsound( "evt_pa_atten" ); - water_pa_2 playsound( "evt_pa_atten" ); - water_pa_3 playsound( "evt_pa_atten" ); - wait 2; - water_pa_1 playsound( "evt_pa_online" ); - water_pa_2 playsound( "evt_pa_online" ); - water_pa_3 playsound( "evt_pa_online" ); - water_fx1 = spawn( "script_model", water_kill_triggers[ 0 ].origin + vectorScale( ( 0, 0, 1 ), 1000 ) ); - water_fx1 setmodel( "tag_origin" ); - water_fx1.angles = vectorScale( ( 0, 0, 1 ), 90 ); - water_fx2 = spawn( "script_model", water_kill_triggers[ 1 ].origin + vectorScale( ( 0, 0, 1 ), 1000 ) ); - water_fx2 setmodel( "tag_origin" ); - water_fx2.angles = vectorScale( ( 0, 0, 1 ), 90 ); - exploder( 1005 ); - wait 3; - water_pa_1 playsound( "evt_pa_online" ); - water_pa_2 playsound( "evt_pa_online" ); - water_pa_3 playsound( "evt_pa_online" ); - wait 1; - playfxontag( level.waterrushfx, water_fx1, "tag_origin" ); - playfxontag( level.waterrushfx, water_fx2, "tag_origin" ); - water_fx1 playloopsound( "evt_water_wave" ); - water_fx2 playloopsound( "evt_water_wave" ); - water_mover.origin = ( 0, 0, 1 ); - setclientfield( "big_wave", 1 ); - water_mover moveto( vectorScale( ( 0, 0, 1 ), 2100 ), 2,5 ); - water_ambient_mover moveto( vectorScale( ( 0, 0, 1 ), 20 ), 2,5 ); - level thread waterfxloopstarter( water_fx1, water_fx2, 5 ); - thread play_exploder(); - waterlevel = -24; - wait 2; - water_pa_1 playsound( "evt_pa_warn" ); - water_pa_2 playsound( "evt_pa_warn" ); - water_pa_3 playsound( "evt_pa_warn" ); - wait 3; - water_pa_1 playsound( "evt_pa_offline" ); - water_pa_2 playsound( "evt_pa_offline" ); - water_pa_3 playsound( "evt_pa_offline" ); - wait 1; - water_mover moveto( vectorScale( ( 0, 0, 1 ), 4100 ), 2,5 ); - water_ambient_mover moveto( ( 0, 0, 1 ), 2,5 ); - water_fx1 stoploopsound( 2 ); - water_fx2 stoploopsound( 2 ); - setclientfield( "pre_wave", 0 ); - wait 1,5; - water_pa_1 playsound( "evt_pa_access" ); - water_pa_2 playsound( "evt_pa_access" ); - water_pa_3 playsound( "evt_pa_access" ); - wait 1; - water_ambient_box stoploopsound( 1 ); - water_ambient_back stoploopsound( 1 ); - stop_exploder( 1005 ); - setdvar( "R_WaterWaveAmplitude", "0 0 0 0" ); - water_mover.origin = vectorScale( ( 0, 0, 1 ), 500 ); - wait 2; - water_fx1 delete(); - water_fx2 delete(); - water_mover.origin = ( 0, 0, 1 ); - setclientfield( "big_wave", 0 ); - wait 5; - } -} - -play_exploder() -{ - wait 0,2; - exploder( 1002 ); - wait 0,5; - exploder( 1001 ); -} - -watchdevnotify() -{ - startvalue = getDvar( #"1CC516F5" ); - for ( ;; ) - { - should_water_rush = getDvar( #"1CC516F5" ); - if ( should_water_rush != startvalue ) - { - level notify( "dev_water_rush" ); - startvalue = should_water_rush; - } - wait 0,2; - } -} - -waterfxloopstarter( fx1, fx2, looptime ) -{ - level thread waterfxloop( fx1, fx2 ); -} - -waterfxloop( fx1, fx2 ) -{ - start1 = fx1.origin; - start2 = fx2.origin; - fx1 moveto( fx1.origin + vectorScale( ( 0, 0, 1 ), 2200 ), 2,67 ); - fx2 moveto( fx2.origin + vectorScale( ( 0, 0, 1 ), 2200 ), 2,67 ); - wait 2,67; - fx1 moveto( fx1.origin + ( 0, 600, -1000 ), 2,5 ); - fx2 moveto( fx2.origin + ( 0, 600, -1000 ), 2,5 ); - wait 3; - fx1.origin = start1; - fx2.origin = start2; -} - -waterkilltriggerthink( triggers ) -{ - for ( ;; ) - { - wait 0,1; - entities = getdamageableentarray( triggers[ 0 ].origin, 2000 ); - _a390 = entities; - _k390 = getFirstArrayKey( _a390 ); - while ( isDefined( _k390 ) ) - { - entity = _a390[ _k390 ]; - triggertouched = 0; - if ( !entity istouching( triggers[ 0 ] ) ) - { - triggertouched = 1; - if ( !entity istouching( triggers[ 1 ] ) ) - { - } - } - else if ( isDefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" ) - { - entity maps/mp/_tacticalinsertion::destroy_tactical_insertion(); - } - else - { - if ( !isalive( entity ) ) - { - break; - } - else if ( isDefined( entity.targetname ) ) - { - if ( entity.targetname == "talon" ) - { - entity notify( "death" ); - break; - } - else if ( entity.targetname == "rcbomb" ) - { - entity maps/mp/killstreaks/_rcbomb::rcbomb_force_explode(); - break; - } - else if ( entity.targetname == "riotshield_mp" ) - { - entity dodamage( 1, triggers[ triggertouched ].origin + ( 0, 0, 1 ), triggers[ triggertouched ], triggers[ triggertouched ], 0, "MOD_CRUSH" ); - break; - } - } - else if ( isDefined( entity.helitype ) && entity.helitype == "qrdrone" ) - { - watcher = entity.owner maps/mp/gametypes/_weaponobjects::getweaponobjectwatcher( "qrdrone" ); - watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate( entity, 0, undefined ); - break; - } - else - { - if ( entity.classname == "grenade" ) - { - if ( !isDefined( entity.name ) ) - { - break; - } - else if ( !isDefined( entity.owner ) ) - { - break; - } - else if ( entity.name == "proximity_grenade_mp" ) - { - watcher = entity.owner getwatcherforweapon( entity.name ); - watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate( entity, 0, undefined, "script_mover_mp" ); - break; - } - else if ( !isweaponequipment( entity.name ) ) - { - break; - } - else watcher = entity.owner getwatcherforweapon( entity.name ); - if ( !isDefined( watcher ) ) - { - break; - } - else watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate( entity, 0, undefined, "script_mover_mp" ); - break; - } - else if ( entity.classname == "auto_turret" ) - { - if ( !isDefined( entity.damagedtodeath ) || !entity.damagedtodeath ) - { - entity domaxdamage( triggers[ triggertouched ].origin + ( 0, 0, 1 ), triggers[ triggertouched ], triggers[ triggertouched ], 0, "MOD_CRUSH" ); - } - break; - } - else - { - if ( isplayer( entity ) ) - { - entity dodamage( entity.health * 2, triggers[ triggertouched ].origin + ( 0, 0, 1 ), triggers[ triggertouched ], triggers[ triggertouched ], 0, "MOD_HIT_BY_OBJECT", 0, "hydro_water_mp" ); - } - else - { - entity dodamage( entity.health * 2, triggers[ triggertouched ].origin + ( 0, 0, 1 ), triggers[ triggertouched ], triggers[ triggertouched ], 0, "MOD_CRUSH" ); - } - if ( isplayer( entity ) ) - { - entity playlocalsound( "mpl_splash_death" ); - } - } - } - } - _k390 = getNextArrayKey( _a390, _k390 ); - } - if ( level.gametype == "ctf" ) - { - _a502 = level.flags; - _k502 = getFirstArrayKey( _a502 ); - while ( isDefined( _k502 ) ) - { - flag = _a502[ _k502 ]; - if ( flag.visuals[ 0 ] istouching( triggers[ 0 ] ) || flag.visuals[ 0 ] istouching( triggers[ 1 ] ) ) - { - flag maps/mp/gametypes/ctf::returnflag(); - } - _k502 = getNextArrayKey( _a502, _k502 ); - } - } - else if ( level.gametype == "sd" && !level.multibomb ) - { - if ( level.sdbomb.visuals[ 0 ] istouching( triggers[ 0 ] ) || level.sdbomb.visuals[ 0 ] istouching( triggers[ 1 ] ) ) - { - level.sdbomb maps/mp/gametypes/_gameobjects::returnhome(); - } - } - } -} - -getwatcherforweapon( weapname ) -{ - if ( !isDefined( self ) ) - { - return undefined; - } - if ( !isplayer( self ) ) - { - return undefined; - } - i = 0; - while ( i < self.weaponobjectwatcherarray.size ) - { - if ( self.weaponobjectwatcherarray[ i ].weapon != weapname ) - { - i++; - continue; - } - else - { - return self.weaponobjectwatcherarray[ i ]; - } - i++; - } - return undefined; -} - -removeobjectsondemovertime() -{ - while ( level.gametype == "dem" ) - { - while ( isDefined( game[ "overtime_round" ] ) ) - { - objects = getentarray( "delete_dem_overtime", "script_noteworthy" ); - while ( isDefined( objects ) ) - { - i = 0; - while ( i < objects.size ) - { - objects[ i ] delete(); - i++; - } - } - } - } -} diff --git a/Multiplayer Maps/mp_hydro/maps/mp/mp_hydro_amb.gsc b/Multiplayer Maps/mp_hydro/maps/mp/mp_hydro_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_hydro/maps/mp/mp_hydro_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_hydro/maps/mp/mp_hydro_fx.gsc b/Multiplayer Maps/mp_hydro/maps/mp/mp_hydro_fx.gsc deleted file mode 100644 index 7326ce7..0000000 --- a/Multiplayer Maps/mp_hydro/maps/mp/mp_hydro_fx.gsc +++ /dev/null @@ -1,91 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); - -main() -{ - precache_fxanim_props(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_hydro_fx::main(); -} - -precache_scripted_fx() -{ -} - -precache_createfx_fx() -{ - level._effect[ "fx_mp_hydro_dam_water_bottom" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_bottom" ); - level._effect[ "fx_mp_hydro_dam_water_top" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_top" ); - level._effect[ "fx_mp_hydro_dam_water_top_side" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_top_side" ); - level._effect[ "fx_mp_hydro_dam_water_top_side_b" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_top_side_b" ); - level._effect[ "fx_mp_hydro_dam_water_top_b" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_top_b" ); - level._effect[ "fx_mp_hydro_dam_water_spray" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_spray" ); - level._effect[ "fx_mp_hydro_dam_water_drip_splash" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_drip_splash" ); - level._effect[ "fx_mp_hydro_dam_water_strip" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_strip" ); - level._effect[ "fx_mp_hydro_dam_water_strip2" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_strip2" ); - level._effect[ "fx_mp_hydro_dam_water_corner" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_corner" ); - level._effect[ "fx_mp_hydro_dam_water_corner2" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_corner2" ); - level._effect[ "fx_mp_hydro_dam_water_wall" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_wall" ); - level._effect[ "fx_mp_hydro_dam_river_top" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_river_top" ); - level._effect[ "fx_mp_hydro_dam_river_top_b" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_river_top_b" ); - level._effect[ "fx_mp_hydro_dam_river_flat" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_river_flat" ); - level._effect[ "fx_mp_hydro_dam_river_flat2" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_river_flat2" ); - level._effect[ "fx_mp_hydro_flood_blast01_spill" ] = loadfx( "maps/mp_maps/fx_mp_hydro_flood_blast01_spill" ); - level._effect[ "fx_mp_hydro_flood_blast01" ] = loadfx( "maps/mp_maps/fx_mp_hydro_flood_blast01" ); - level._effect[ "fx_mp_hydro_flood_blast02" ] = loadfx( "maps/mp_maps/fx_mp_hydro_flood_blast02" ); - level._effect[ "fx_mp_hydro_flood_water_spill" ] = loadfx( "maps/mp_maps/fx_mp_hydro_flood_water_spill" ); - level._effect[ "fx_mp_hydro_flood_mist_tail" ] = loadfx( "maps/mp_maps/fx_mp_hydro_flood_mist_tail" ); - level._effect[ "fx_mp_hydro_flood_blast_end" ] = loadfx( "maps/mp_maps/fx_mp_hydro_flood_blast_end" ); - level._effect[ "fx_mp_hydro_hatch_spray" ] = loadfx( "maps/mp_maps/fx_mp_hydro_hatch_spray" ); - level._effect[ "fx_mp_hydro_splash_edge" ] = loadfx( "maps/mp_maps/fx_mp_hydro_splash_edge" ); - level._effect[ "fx_mp_hydro_water_pipe" ] = loadfx( "maps/mp_maps/fx_mp_hydro_water_pipe" ); - level._effect[ "fx_mp_hydro_dam_water_vista" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_vista" ); - level._effect[ "fx_mp_hydro_dam_water_top_vista" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_water_top_vista" ); - level._effect[ "fx_mp_hydro_dam_steam" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam" ); - level._effect[ "fx_mp_hydro_dam_steam2" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam2" ); - level._effect[ "fx_mp_hydro_dam_steam2_green" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam2_green" ); - level._effect[ "fx_mp_hydro_dam_steam3" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam3" ); - level._effect[ "fx_mp_hydro_dam_steam_big" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam_big" ); - level._effect[ "fx_mp_hydro_dam_steam_big2" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam_big2" ); - level._effect[ "fx_mp_hydro_dam_steam_xlrg" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam_xlrg" ); - level._effect[ "fx_mp_hydro_dam_steam_vista" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_steam_vista" ); - level._effect[ "fx_mp_vent_heat_distort" ] = loadfx( "maps/mp_maps/fx_mp_vent_heat_distort" ); - level._effect[ "fx_fog_street_sm_area_low" ] = loadfx( "fog/fx_fog_street_sm_area_low" ); - level._effect[ "fx_mp_hydro_hvac_steam" ] = loadfx( "maps/mp_maps/fx_mp_hydro_hvac_steam" ); - level._effect[ "fx_mp_hydro_steam_behind_glass1" ] = loadfx( "maps/mp_maps/fx_mp_hydro_steam_behind_glass1" ); - level._effect[ "fx_mp_hydro_steam_behind_glass2" ] = loadfx( "maps/mp_maps/fx_mp_hydro_steam_behind_glass2" ); - level._effect[ "fx_mp_hydro_light_warning" ] = loadfx( "maps/mp_maps/fx_mp_hydro_light_warning" ); - level._effect[ "fx_mp_hydro_light_warning_blnk" ] = loadfx( "maps/mp_maps/fx_mp_hydro_light_warning_blnk" ); - level._effect[ "fx_mp_hydro_light_warning_sm" ] = loadfx( "maps/mp_maps/fx_mp_hydro_light_warning_sm" ); - level._effect[ "fx_mp_hydro_light_warning_blnk_sm" ] = loadfx( "maps/mp_maps/fx_mp_hydro_light_warning_blnk_sm" ); - level._effect[ "fx_drone_light_yellow" ] = loadfx( "light/fx_drone_light_yellow" ); - level._effect[ "fx_drone_red_blink" ] = loadfx( "light/fx_drone_red_blink" ); - level._effect[ "fx_mp_hydro_dam_tunnel_glare" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_tunnel_glare" ); - level._effect[ "fx_mp_hydro_dam_tunnel_glare_green" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_tunnel_glare_green" ); - level._effect[ "fx_mp_hydro_dam_tunnel_glare_green2" ] = loadfx( "maps/mp_maps/fx_mp_hydro_dam_tunnel_glare_green2" ); - level._effect[ "fx_light_god_ray_mp_hydro" ] = loadfx( "env/light/fx_light_god_ray_mp_hydro" ); - level._effect[ "fx_light_god_ray_mp_hydro_sm" ] = loadfx( "env/light/fx_light_god_ray_mp_hydro_sm" ); - level._effect[ "fx_village_tube_light" ] = loadfx( "light/fx_village_tube_light" ); - level._effect[ "fx_hydro_tube_light" ] = loadfx( "light/fx_hydro_tube_light" ); - level._effect[ "fx_mp_fan_light_shaft_anim" ] = loadfx( "light/fx_mp_fan_light_shaft_anim" ); - level._effect[ "fx_mp_light_dust_motes_md" ] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); - level._effect[ "fx_mp_carrier_spark_bounce_runner" ] = loadfx( "maps/mp_maps/fx_mp_carrier_spark_bounce_runner" ); - level._effect[ "fx_lf_mp_hydro_sun1" ] = loadfx( "lens_flares/fx_lf_mp_hydro_sun1" ); - level._effect[ "fx_mp_hydro_killstreak_spillway_1" ] = loadfx( "maps/mp_maps/fx_mp_hydro_killstreak_spillway_1" ); - level._effect[ "fx_mp_hydro_killstreak_spillway_2" ] = loadfx( "maps/mp_maps/fx_mp_hydro_killstreak_spillway_2" ); - level._effect[ "fx_mp_hydro_killstreak_spillway_mid" ] = loadfx( "maps/mp_maps/fx_mp_hydro_killstreak_spillway_mid" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "wirespark_med" ] = %fxanim_gp_wirespark_med_anim; - level.scr_anim[ "fxanim_props" ][ "wires_long" ] = %fxanim_mp_hydro_wires_long_anim; - level.scr_anim[ "fxanim_props" ][ "wires_med" ] = %fxanim_mp_hydro_wires_med_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_01" ] = %fxanim_gp_seagull_circle_01_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_02" ] = %fxanim_gp_seagull_circle_02_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_03" ] = %fxanim_gp_seagull_circle_03_anim; - level.scr_anim[ "fxanim_props" ][ "wires_med_02" ] = %fxanim_mp_hydro_wires_med_02_anim; - level.scr_anim[ "fxanim_props" ][ "wires_long_02" ] = %fxanim_mp_hydro_wires_long_02_anim; -} diff --git a/Multiplayer Maps/mp_la/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_la/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_la/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_la/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_la/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_la/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_la/maps/mp/createart/mp_la_art.gsc b/Multiplayer Maps/mp_la/maps/mp/createart/mp_la_art.gsc deleted file mode 100644 index 1c5518c..0000000 --- a/Multiplayer Maps/mp_la/maps/mp/createart/mp_la_art.gsc +++ /dev/null @@ -1,41 +0,0 @@ - -main() -{ - level.tweakfile = 1; - setdvar( "scr_fog_exp_halfplane", "3759.28" ); - setdvar( "scr_fog_exp_halfheight", "243.735" ); - setdvar( "scr_fog_nearplane", "601.593" ); - setdvar( "scr_fog_red", "0.806694" ); - setdvar( "scr_fog_green", "0.962521" ); - setdvar( "scr_fog_blue", "0.9624" ); - setdvar( "scr_fog_baseheight", "-475.268" ); - setdvar( "visionstore_glowTweakEnable", "0" ); - setdvar( "visionstore_glowTweakRadius0", "5" ); - setdvar( "visionstore_glowTweakRadius1", "" ); - setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); - setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); - setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); - setdvar( "visionstore_glowTweakBloomIntensity1", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); - start_dist = 740,262; - half_dist = 4113,21; - half_height = 1651,45; - base_height = -80,5565; - fog_r = 0,372549; - fog_g = 0,454902; - fog_b = 0,447059; - fog_scale = 7,39106; - sun_col_r = 1; - sun_col_g = 0,686275; - sun_col_b = 0,337255; - sun_dir_x = -0,196011; - sun_dir_y = 0,785122; - sun_dir_z = 0,587506; - sun_start_ang = 0; - sun_stop_ang = 61,3208; - time = 0; - max_fog_opacity = 1; - setvolfog( start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale, sun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, sun_stop_ang, time, max_fog_opacity ); - visionsetnaked( "mp_la", 0 ); -} diff --git a/Multiplayer Maps/mp_la/maps/mp/createfx/mp_la_fx.gsc b/Multiplayer Maps/mp_la/maps/mp/createfx/mp_la_fx.gsc deleted file mode 100644 index df0f887..0000000 --- a/Multiplayer Maps/mp_la/maps/mp/createfx/mp_la_fx.gsc +++ /dev/null @@ -1,1939 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_ash_falling_lg" ); - ent.v[ "origin" ] = ( -952,321, 2394,96, -174,98 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 198 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_ash_falling_lg" ); - ent.v[ "origin" ] = ( -551,998, 947,768, -207 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 198 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_ash_falling_lg" ); - ent.v[ "origin" ] = ( -1162,16, 2278,29, -185,039 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 198 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_lg" ); - ent.v[ "origin" ] = ( -21,5547, 2116,09, 200,793 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_plume_lg_blk" ); - ent.v[ "origin" ] = ( -8,12979, 2117,18, 323,406 ); - ent.v[ "angles" ] = ( 25,9496, 177,702, 0,355472 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_md" ); - ent.v[ "origin" ] = ( -1848,63, 1255,72, -60,2276 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_md" ); - ent.v[ "origin" ] = ( -1356,31, 3118,37, 24,8662 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_plume_md_blk" ); - ent.v[ "origin" ] = ( -1364,56, 3119,96, 106,711 ); - ent.v[ "angles" ] = ( 6,6665, 170,618, -3,36161 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_plume_md_blk" ); - ent.v[ "origin" ] = ( -1837,14, 1254,46, 26,5401 ); - ent.v[ "angles" ] = ( 13,7633, 180,033, -1,82928 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 82,5291, -265,777, -189,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 147 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -490,99, -116,469, -195,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -1702,53, 5325,4, -198,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 215 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -1644,35, 3832,26, -169,287 ); - ent.v[ "angles" ] = ( 9,87748, 172,948, 0,679485 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_area" ); - ent.v[ "origin" ] = ( -977,869, 2905,91, -103,475 ); - ent.v[ "angles" ] = ( 357,961, 180,165, 8,52735 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_area" ); - ent.v[ "origin" ] = ( -957,79, 2091,25, -154,235 ); - ent.v[ "angles" ] = ( 0,271509, 179,794, 18,4468 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_area" ); - ent.v[ "origin" ] = ( -20,6569, 594,042, -223,878 ); - ent.v[ "angles" ] = ( 1,52444, 171,834, -4,21439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -2493,1, 3583,39, -192,362 ); - ent.v[ "angles" ] = ( 5,9521, 140,997, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_area" ); - ent.v[ "origin" ] = ( -1751,84, 2172,33, -168,27 ); - ent.v[ "angles" ] = ( 351,992, 181,052, 1,55738 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -917,12, 3153,23, -129,147 ); - ent.v[ "angles" ] = ( 1,10482, 181,514, 8,03658 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_burning_fall_slow" ); - ent.v[ "origin" ] = ( -113,622, 2094,77, 800,242 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_area" ); - ent.v[ "origin" ] = ( -1443,98, 2231,3, -207,78 ); - ent.v[ "angles" ] = ( 350,972, 201,276, -1,52216 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -2152,87, 1436,24, -189,736 ); - ent.v[ "angles" ] = ( 5,99598, 179,985, -0,105187 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -427,027, 2241,41, 22,6633 ); - ent.v[ "angles" ] = ( 6, 177,027, 0,210445 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -298,626, 1746,64, 89,7532 ); - ent.v[ "angles" ] = ( 0, 177,005, 0,209294 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -681,807, 3416,2, -94,0107 ); - ent.v[ "angles" ] = ( 18,8818, 189,111, 23,3384 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -607,591, 3513,76, -147,001 ); - ent.v[ "angles" ] = ( 359,345, 182,362, 37,3852 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -878,35, 3415,77, -176,125 ); - ent.v[ "angles" ] = ( 4,94373, 187,157, 17,7141 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -754,333, 1655,38, -58,7808 ); - ent.v[ "angles" ] = ( 28,8715, 170,427, -7,89556 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -1257,06, 3832,83, -201,04 ); - ent.v[ "angles" ] = ( 359,135, 176,132, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -2100,43, 3487,49, -188,882 ); - ent.v[ "angles" ] = ( 1,00656, 174,738, -2,10143 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_lg" ); - ent.v[ "origin" ] = ( -1824,78, 2720,45, 121,789 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_rain_splash_area_100_hvy_lp" ); - ent.v[ "origin" ] = ( 587,892, 2577,51, -278,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fire_sprinkler_splash" ); - ent.v[ "origin" ] = ( -223,954, 2507,96, -238,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fire_sprinkler" ); - ent.v[ "origin" ] = ( 37,7566, 2057,65, -28,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fire_sprinkler_splash" ); - ent.v[ "origin" ] = ( 100,917, 2061,84, -277,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -681,893, 4113,65, -104,086 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 77 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -424,216, 4609,9, -116,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 267 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -920,503, 1270,78, -158,913 ); - ent.v[ "angles" ] = ( 2,00501, 174,719, -1,04957 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_ash_falling_lg" ); - ent.v[ "origin" ] = ( 93,4205, 2232,31, 270,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 198 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_lg" ); - ent.v[ "origin" ] = ( 69,0571, 2795,37, 192,124 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 182 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_ash_falling_lg" ); - ent.v[ "origin" ] = ( -2557,9, 2600,64, -206,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fire_sprinkler" ); - ent.v[ "origin" ] = ( -213,506, 2538,61, -30,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fire_sprinkler_sputter" ); - ent.v[ "origin" ] = ( 492,198, 2556,16, -26,125 ); - ent.v[ "angles" ] = ( 88,5858, 45,0046, 44,9959 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -10; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fire_sprinkler_gush" ); - ent.v[ "origin" ] = ( 469,309, 2201,06, -13,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -10; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fire_sprinkler_gush_splash" ); - ent.v[ "origin" ] = ( 475,92, 2201,93, -278,875 ); - ent.v[ "angles" ] = ( 270, 359,851, 0,149435 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -10; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_md" ); - ent.v[ "origin" ] = ( -377,239, 1409,38, 2,04714 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 419,391, 2124,07, -26,125 ); - ent.v[ "angles" ] = ( 360, 90, -3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 488,229, 2108,87, -26,125 ); - ent.v[ "angles" ] = ( 359,858, 68,9773, -0,158489 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 449,315, 2379,55, -27,125 ); - ent.v[ "angles" ] = ( 6,18744, 93,7027, 3,40991 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -198,048, 1928,65, -29,125 ); - ent.v[ "angles" ] = ( 357,604, 37,0378, -1,80648 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 157,297, 2252,51, -49,0022 ); - ent.v[ "angles" ] = ( 0,156988, 92,9959, -2,99635 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 73,1006, 2319,56, -50,5905 ); - ent.v[ "angles" ] = ( 0,156988, 92,9959, -2,99635 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -242,943, 2269,81, -26,125 ); - ent.v[ "angles" ] = ( 357, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -55,2939, 2563,7, -29,125 ); - ent.v[ "angles" ] = ( 359,645, 12,0885, 1,48682 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 273,875, 2018,67, -24,8778 ); - ent.v[ "angles" ] = ( 0,982266, 180,965, 1,01606 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 193,51, 1896,65, -27,3232 ); - ent.v[ "angles" ] = ( 1,01712, 178,965, 0,981151 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_plume_md_blk" ); - ent.v[ "origin" ] = ( -379,818, 1411,63, 69,3466 ); - ent.v[ "angles" ] = ( 12,7831, 180,391, -18,5892 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -1582,56, 4123,51, -121,441 ); - ent.v[ "angles" ] = ( 33,6953, 167,93, -18,4065 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -733,486, -782,764, -205,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 355 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fire_sprinkler_splash" ); - ent.v[ "origin" ] = ( -296,187, 2519,92, -240,205 ); - ent.v[ "angles" ] = ( 272, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fire_sprinkler_splash" ); - ent.v[ "origin" ] = ( -134,577, 2548,49, -238,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 489,963, 2601,26, -26,125 ); - ent.v[ "angles" ] = ( 0,790916, 190,964, 1,17117 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 562,202, 2436,96, -29,125 ); - ent.v[ "angles" ] = ( 358,587, 314,957, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_rain_splash_area_100_hvy_lp" ); - ent.v[ "origin" ] = ( 453,183, 2580,19, -278,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( -481,855, 3228,03, 5,01965 ); - ent.v[ "angles" ] = ( 359,055, 266,948, 1,05104 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fire_sprinkler_splash" ); - ent.v[ "origin" ] = ( -19,4529, 2060,43, -251 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); - ent.v[ "origin" ] = ( -1282,19, 2086,09, 157,476 ); - ent.v[ "angles" ] = ( 33,791, 18,4808, -35,3513 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_flare_la" ); - ent.v[ "origin" ] = ( -1382,62, 2348,83, -191,915 ); - ent.v[ "angles" ] = ( 350,752, 222,903, -6,20005 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_flare_la" ); - ent.v[ "origin" ] = ( -1899,34, 2051,36, -116,911 ); - ent.v[ "angles" ] = ( 341,715, 337,678, -18,0684 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_flare_la" ); - ent.v[ "origin" ] = ( -1649,47, 2311,68, -153,521 ); - ent.v[ "angles" ] = ( 349,228, 34,2927, 24,7891 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -758,206, 5337,65, -220 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -57,9301, 4440,03, -113,486 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -106,441, 3299,46, -148,509 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -861,118, 5187,94, -221 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -1436,56, 5268,6, -217 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -1313,09, 4476,06, -224,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -1601,94, 5581,6, -150,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -1975,62, 5227,79, -159,602 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( 241,246, 1484,96, -222,286 ); - ent.v[ "angles" ] = ( 4,09965, 181,053, 6,02415 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fire_sprinkler_gush_splash" ); - ent.v[ "origin" ] = ( -661,137, 3097,2, -9,875 ); - ent.v[ "angles" ] = ( 270, 359,851, 0,149435 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -10; - ent = maps/mp/_utility::createoneshoteffect( "fx_dest_fire_hydrant_burst" ); - ent.v[ "origin" ] = ( -669,722, 3060,94, -31,875 ); - ent.v[ "angles" ] = ( 0, 255, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -2144,51, 2817,71, -181,458 ); - ent.v[ "angles" ] = ( 1,19116, 166,741, -2,25932 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -126,487, 2628,74, 52,5623 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -702,531, 2871,47, 54,2262 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 357 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_emrgncy_floodlight" ); - ent.v[ "origin" ] = ( -306,941, 24,5859, -132,51 ); - ent.v[ "angles" ] = ( 19,6379, 301,388, 0,24249 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_emrgncy_floodlight" ); - ent.v[ "origin" ] = ( -323,799, 25,3594, -133,387 ); - ent.v[ "angles" ] = ( 16,2831, 236,015, -1,55665 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -458,724, 2226,06, -84,4114 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 357 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( -1793,12, -7,28734, -59,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 120 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( -1998,14, 31,7489, -59,875 ); - ent.v[ "angles" ] = ( 359,594, 47,993, 0,913571 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_plume_lg_blk_distant" ); - ent.v[ "origin" ] = ( -4429,44, -6906,03, 4302,8 ); - ent.v[ "angles" ] = ( 333,719, 199,276, -11,3577 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_flare_la" ); - ent.v[ "origin" ] = ( -1543,57, 2094,57, -177,029 ); - ent.v[ "angles" ] = ( 345,817, 165,128, 21,7408 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); - ent.v[ "origin" ] = ( -3530,83, 1579,7, 123,04 ); - ent.v[ "angles" ] = ( 341,039, 185,289, -30,0587 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); - ent.v[ "origin" ] = ( -2991,63, 2485,01, 132,518 ); - ent.v[ "angles" ] = ( 0, 208,999, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); - ent.v[ "origin" ] = ( -3286,09, 3356,75, 7,61793 ); - ent.v[ "angles" ] = ( 354,045, 185,835, 21,1856 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); - ent.v[ "origin" ] = ( -4092,03, 3373,53, 94,0726 ); - ent.v[ "angles" ] = ( 359,642, 188, 20,0663 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); - ent.v[ "origin" ] = ( -4223,02, 1249,5, 124,499 ); - ent.v[ "angles" ] = ( 359,546, 182, -0,891203 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_light_gray_white_ribbon_sm" ); - ent.v[ "origin" ] = ( -29,6098, 2763,39, -252,412 ); - ent.v[ "angles" ] = ( 278, 270, 90 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_light_gray_white_ribbon_sm" ); - ent.v[ "origin" ] = ( 23,6997, 2766,9, -246,414 ); - ent.v[ "angles" ] = ( 278, 270, 106 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_light_gray_white_ribbon_sm" ); - ent.v[ "origin" ] = ( -8,50069, 2812,41, -249,407 ); - ent.v[ "angles" ] = ( 283, 90, -90 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_light_gray_white_ribbon_sm" ); - ent.v[ "origin" ] = ( 28,4305, 2813,22, -246,412 ); - ent.v[ "angles" ] = ( 283, 90, -90 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_light_flourescent_glow_cool" ); - ent.v[ "origin" ] = ( -553,458, -801,702, -120,875 ); - ent.v[ "angles" ] = ( 270,701, 75,3337, 14,6585 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_ash_falling_door" ); - ent.v[ "origin" ] = ( -107,14, 345,002, -195,257 ); - ent.v[ "angles" ] = ( 9,36825, 266,933, 3,03084 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -691,855, -440,721, -214,875 ); - ent.v[ "angles" ] = ( 270, 338,501, -8,5005 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -548,694, -20,3628, -210,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -747,067, -24,2708, -212,932 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( -1813,07, -2,45015, -194,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 123 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( -1914,29, 223,856, -194,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 272 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); - ent.v[ "origin" ] = ( -2347,85, -2228,46, -312,696 ); - ent.v[ "angles" ] = ( 359,642, 188, -0,933735 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); - ent.v[ "origin" ] = ( -788,002, -2878,67, -82,0541 ); - ent.v[ "angles" ] = ( 359,485, 178, -0,85739 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); - ent.v[ "origin" ] = ( 2054,44, 1044, -170,875 ); - ent.v[ "angles" ] = ( 1,37819, 178,007, -1,75516 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -381,602, -213,112, 44,875 ); - ent.v[ "angles" ] = ( 19,5172, 269,525, 0,148691 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fountian_pool_md" ); - ent.v[ "origin" ] = ( 448,854, 4317,18, -202,827 ); - ent.v[ "angles" ] = ( 270, 358,386, -27,3864 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 57,4833, 3714,52, -198,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 244 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); - ent.v[ "origin" ] = ( -3793,85, 5441,35, -199,875 ); - ent.v[ "angles" ] = ( 359,642, 188, -0,933735 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); - ent.v[ "origin" ] = ( -3788,33, 4039,54, -133,981 ); - ent.v[ "angles" ] = ( 359,642, 188, -0,933735 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( -560,288, -944,824, -120,958 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( -204,682, -837,057, -120,926 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( -560,677, 3156,42, 128,701 ); - ent.v[ "angles" ] = ( 1,01712, 178,965, 0,981151 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_lg" ); - ent.v[ "origin" ] = ( -2516,33, 1142,14, 242,428 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 66 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_lg" ); - ent.v[ "origin" ] = ( -2558,76, 434,15, 213,164 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 30 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_lg" ); - ent.v[ "origin" ] = ( -2535,16, 759,506, 206,086 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 268 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_lg" ); - ent.v[ "origin" ] = ( -2147,61, 2028,91, 107,554 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 234 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_lg" ); - ent.v[ "origin" ] = ( -1455,96, 2058,52, 246,206 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 272 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_lg" ); - ent.v[ "origin" ] = ( -1471,76, 2549,09, 237,716 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 273 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -201,915, 4471,13, -122,955 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -1844,64, 4291,11, 3,6067 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -1829,28, 4911,67, 3,75691 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flourescent_glow_cool" ); - ent.v[ "origin" ] = ( -128,262, -80,6205, 80,0935 ); - ent.v[ "angles" ] = ( 270,701, 75,3337, 14,6585 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -401,059, 4457,58, -33 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -366,534, 4420,78, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -345,405, 4382,83, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -326,063, 4345,85, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -244,81, 4344,14, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -258,982, 4296,32, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -160,93, 4296,09, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -162,334, 4355,52, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -210,639, 4391,3, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -255,064, 4423,96, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -291,251, 4467,05, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -309,964, 4512,78, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -297,463, 4558,23, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -256,831, 4566,36, -33 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -221,419, 4545,77, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -189,11, 4516,36, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -158,388, 4475,72, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -444,485, 4479,27, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -490,899, 4467,93, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -510,82, 4426,87, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -502,745, 4380,94, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -459,711, 4343,6, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -425,378, 4297,82, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -522,624, 4296,56, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -587,394, 4345,56, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -573,405, 4391,81, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -305,216, 4246,76, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -365,346, 4195,06, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -434,275, 4161,35, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -327,702, 4298,08, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -619,104, 4297,34, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -722,191, 4296,69, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -699,16, 4344,57, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -790,27, 4344,85, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -790,003, 4444,52, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -738,074, 4479,7, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -789,117, 4560,69, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -668,712, 4405,69, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -643,537, 4593,21, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -598,161, 4557,94, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -553,533, 4554,58, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -530,401, 4518,56, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -548,52, 4480,4, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -595,049, 4475,73, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -623,483, 4512,43, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -396,769, 4227,64, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -791,701, 4316,5, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -727,454, 4231,99, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -661,026, 4184,61, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -587,057, 4153,64, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -572,573, 4194,51, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_wrm" ); - ent.v[ "origin" ] = ( -654,867, 4234,18, -32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -1497,98, 4598,29, -25,7954 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_lg_runner" ); - ent.v[ "origin" ] = ( -763,335, 3248,52, 313,923 ); - ent.v[ "angles" ] = ( 17,459, 135,647, 7,72393 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -1630,92, -789,04, -200,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -690,497, 78,4437, -188,875 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_lg" ); - ent.v[ "origin" ] = ( -467,85, 2570,12, 611,892 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fire_sprinkler_splash" ); - ent.v[ "origin" ] = ( 446,936, 4303,71, -229,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fire_sprinkler_splash" ); - ent.v[ "origin" ] = ( 392,169, 4351,69, -201 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 84,6875, 5249,64, -230 ); - ent.v[ "angles" ] = ( 271, 89,9982, -89,9982 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_lg" ); - ent.v[ "origin" ] = ( -2498,83, 4487,04, 226,208 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 336 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_lg" ); - ent.v[ "origin" ] = ( -2600,69, 4352,41, 215,575 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 357 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_crumble_lg" ); - ent.v[ "origin" ] = ( -2451,62, 3410, 199,183 ); - ent.v[ "angles" ] = ( 3, 292, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -453,767, 3414,8, -149,903 ); - ent.v[ "angles" ] = ( 340,815, 166,909, 30,4122 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_ash_falling_door" ); - ent.v[ "origin" ] = ( -303,612, 317,759, 16,6338 ); - ent.v[ "angles" ] = ( 359, 273, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_ash_falling_door" ); - ent.v[ "origin" ] = ( -1040,58, -67,0286, 23,3413 ); - ent.v[ "angles" ] = ( 355,641, 358,979, -0,157766 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); - ent.v[ "origin" ] = ( -3124,18, 22,5527, -136,875 ); - ent.v[ "angles" ] = ( 359,485, 178, 0,142588 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); - ent.v[ "origin" ] = ( -3196,09, -1062,99, -130,378 ); - ent.v[ "angles" ] = ( 359,08, 142, -0,391087 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_ash_falling_door" ); - ent.v[ "origin" ] = ( 74,4852, 326,737, -199,391 ); - ent.v[ "angles" ] = ( 8,93236, 265,914, 0,894206 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( -683,751, -474,796, -259,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 288 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_ash_falling_door" ); - ent.v[ "origin" ] = ( -692,254, 2304,82, -143,647 ); - ent.v[ "angles" ] = ( 8,84828, 0,802157, 0,467443 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -431,557, 4521,24, -112,749 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -843,415, -796,511, -110,912 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -151,565, 42,0966, -130,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 162,445, 101,941, -133,156 ); - ent.v[ "angles" ] = ( 359, 180,003, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -383,103, 5437,04, -263 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 200 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fountian_pool_md" ); - ent.v[ "origin" ] = ( 448,343, 4171,92, -202,875 ); - ent.v[ "angles" ] = ( 270, 0, -44 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fountian_pool_md" ); - ent.v[ "origin" ] = ( 448,835, 4480,81, -202,308 ); - ent.v[ "angles" ] = ( 270, 0,365009, -6,365 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fire_sprinkler_splash" ); - ent.v[ "origin" ] = ( 384,685, 4502,37, -201 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fire_sprinkler_splash" ); - ent.v[ "origin" ] = ( 408,437, 4217,42, -201 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm" ); - ent.v[ "origin" ] = ( -374,635, 2400,43, 46,7278 ); - ent.v[ "angles" ] = ( 290,851, 170,338, -0,749529 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm" ); - ent.v[ "origin" ] = ( -393,074, 2499,3, 50,0956 ); - ent.v[ "angles" ] = ( 282, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -460,588, -128,834, -193,262 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_bldg_int_dist_xlg" ); - ent.v[ "origin" ] = ( -4813,42, 12642,5, 7366,9 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 292 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( -2390,05, 5007,86, -207 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 255 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( -2250, 4400,25, -207 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 255 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 624,49, 3426,27, -198,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 364,573, 5699,16, -306,042 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 200 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 56,7123, 4973,03, -263 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 132 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( -930,972, 5312,98, -263 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -530,398, 3931,38, -199 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 188 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -2669,46, 4257,86, -198,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 279 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -2362,9, 3152,38, -194,684 ); - ent.v[ "angles" ] = ( 358,011, 261,997, 0,209168 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( 389,891, 918,819, -207 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( 797,209, 1274,76, -204,483 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( 832,563, 754,542, -206,967 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( 892,053, 1008,39, -206,885 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -671,383, 484,81, -198,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 184 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -743,871, 815,658, -207 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 174 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -19,0976, 696,666, -202,561 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -1157,44, 502,042, -198,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -1514,25, 805,303, -207 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( -1144,85, -752,532, -267,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( -2065,04, 953,533, -206,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( -1173,11, -1402,76, -267,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 176 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -192,247, -894,717, -267,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 189 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 87,7333, 508,832, -226,74 ); - ent.v[ "angles" ] = ( 7,6167, 253,408, 0,552475 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -125,625, 245,623, -267,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -682,618, -731,131, -267,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 191 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -1333,62, 274,528, -216,758 ); - ent.v[ "angles" ] = ( 10, 256, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -1833, 3929,33, -199 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 215 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( -558,042, -31,3918, -259,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 226 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( -746,888, -40,7304, -259,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 219 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( -1206,89, -91,4872, -267,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 211 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -1896,81, 540,97, -195,424 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 169 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( -2089,28, -722,887, -198,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 182 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -2052,8, -413,834, -210,534 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( -1626,31, -836,936, -267,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 20 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( -359,543, 2649,98, -9,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 159 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( -505,886, 2853,5, -9,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 68 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( -519,741, 2924,95, -9,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_lg_runner" ); - ent.v[ "origin" ] = ( 74,5107, 1615,29, 884,918 ); - ent.v[ "angles" ] = ( 56,0059, 142,126, -22,7039 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_plume_lg_blk" ); - ent.v[ "origin" ] = ( -1778,3, 2713,74, 184,307 ); - ent.v[ "angles" ] = ( 19,9861, 176,915, 2,08109 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_ash_falling_lg" ); - ent.v[ "origin" ] = ( -457,037, 3604,29, -198,076 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 168 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -1680,73, 4743,53, -22,3659 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_haze_linger_xlg" ); - ent.v[ "origin" ] = ( -1101,26, 6330,33, -163,944 ); - ent.v[ "angles" ] = ( 359,546, 182, -0,891203 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_ash_falling_door" ); - ent.v[ "origin" ] = ( -604,34, 3267,18, 67,1462 ); - ent.v[ "angles" ] = ( 359, 273, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_ash_falling_door" ); - ent.v[ "origin" ] = ( -611,061, 2492,91, 48,3769 ); - ent.v[ "angles" ] = ( 1, 92,0031, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_ash_falling_door" ); - ent.v[ "origin" ] = ( -1282,22, 2290,4, -154,676 ); - ent.v[ "angles" ] = ( 356,948, 182,951, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_ash_falling_door" ); - ent.v[ "origin" ] = ( -1970,06, 338,094, 8,03494 ); - ent.v[ "angles" ] = ( 1,99756, 269,999, -0,104725 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -663,516, 4199,55, -127,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -827,341, 334,584, -157,523 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -1064,45, 2311,45, -188,769 ); - ent.v[ "angles" ] = ( 1,95067, 188,736, -1,6488 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -485,553, 1797,67, -0,10499 ); - ent.v[ "angles" ] = ( 3, 177,016, 0,209573 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_area" ); - ent.v[ "origin" ] = ( 289,685, 926,395, -207 ); - ent.v[ "angles" ] = ( 1,52444, 171,834, -0,214389 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_area" ); - ent.v[ "origin" ] = ( 499,431, 1287,88, -207 ); - ent.v[ "angles" ] = ( 1,52444, 171,834, 1,78561 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -529,657, 1239,59, -117,693 ); - ent.v[ "angles" ] = ( 9,16775, 182,587, -30,0951 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -2324,92, 2704,14, -197,297 ); - ent.v[ "angles" ] = ( 358,193, 166,859, -2,25995 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -2477,11, 3916,02, -213 ); - ent.v[ "angles" ] = ( 359,956, 192,995, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_area" ); - ent.v[ "origin" ] = ( -2090,17, 4004,24, -209 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 188,997 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -395,672, 465,25, -177,762 ); - ent.v[ "angles" ] = ( 1,33407, 167,74, 0,74726 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -1926,98, 417,678, -173,728 ); - ent.v[ "angles" ] = ( 4,13914, 168,805, 20,7981 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -2411,83, 1372,46, -205,673 ); - ent.v[ "angles" ] = ( 348,996, 180,016, -0,106588 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line" ); - ent.v[ "origin" ] = ( -1344,9, 1846,08, -49,4547 ); - ent.v[ "angles" ] = ( 344,839, 154,475, -1,08413 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -870,589, 4230,12, -175,664 ); - ent.v[ "angles" ] = ( 6,58558, 185,273, -12,7318 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -1663,37, 3609,93, -94,8212 ); - ent.v[ "angles" ] = ( 6,07375, 187,722, 36,4789 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -1162,65, 2939,78, -84,0657 ); - ent.v[ "angles" ] = ( 349,895, 199,313, -0,702711 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -964,464, 1784,85, -102,752 ); - ent.v[ "angles" ] = ( 357,757, 171,475, -2,41307 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -129,27, 1178,77, -213,474 ); - ent.v[ "angles" ] = ( 356,896, 197,395, 3,71682 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( 197,61, 1626,39, -239,849 ); - ent.v[ "angles" ] = ( 1,59471, 128,99, 4,03132 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -1133,11, 1055,38, -181,292 ); - ent.v[ "angles" ] = ( 7,68519, 210,011, -14,5325 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -1496,56, 989,544, -175,811 ); - ent.v[ "angles" ] = ( 4,40019, 161,69, -31,266 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_area" ); - ent.v[ "origin" ] = ( -949,43, 2526,07, -167,221 ); - ent.v[ "angles" ] = ( 3,61145, 171,978, -26,7966 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -1320,27, 2854,55, -54,1219 ); - ent.v[ "angles" ] = ( 349,895, 199,313, -0,702711 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -1361,67, 2396,29, 23,307 ); - ent.v[ "angles" ] = ( 358,746, 183,201, -0,360224 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -1375,72, 2160,55, 34,5731 ); - ent.v[ "angles" ] = ( 358,715, 177,2, -0,227151 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -1401,06, 3673,71, -176,441 ); - ent.v[ "angles" ] = ( 340,523, 162,054, 2,27733 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -699,771, 2453,26, -172,382 ); - ent.v[ "angles" ] = ( 1,70115, 173,954, -28,1331 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -693,815, 2095,84, -155,414 ); - ent.v[ "angles" ] = ( 2,87078, 179,189, 27,7732 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -593,797, 2046,66, 5,23829 ); - ent.v[ "angles" ] = ( 2,99634, 183,004, -12,8428 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -568,443, 2420,89, -7,77816 ); - ent.v[ "angles" ] = ( 3,65897, 185,935, -12,6727 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -1955,08, 3764,29, -209 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 207 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -2250,65, 2028,86, -174,985 ); - ent.v[ "angles" ] = ( 17,3057, 182,748, -13,2567 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -2537,15, 2016,41, -212,367 ); - ent.v[ "angles" ] = ( 358,178, 188,884, -9,52063 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -2143,81, 1708,54, -182,184 ); - ent.v[ "angles" ] = ( 13,0955, 186,883, -12,7702 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -2355,15, 1695,04, -206,983 ); - ent.v[ "angles" ] = ( 4,31203, 188,87, -0,468583 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -2600,72, 2239,11, -201,275 ); - ent.v[ "angles" ] = ( 4,31207, 188,87, -12,4686 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -2510,21, 1040,65, -212,939 ); - ent.v[ "angles" ] = ( 359,43, 189,949, -12,4333 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -2588,63, 1294,3, -172,83 ); - ent.v[ "angles" ] = ( 333,731, 178,565, -10,7184 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -778,505, 1046,77, -198,082 ); - ent.v[ "angles" ] = ( 357,031, 212,759, -14,4189 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -2124,71, 1993,61, -133,941 ); - ent.v[ "angles" ] = ( 8,32616, 213,983, -0,973063 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -1905,08, 2197,17, -141,248 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 159 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -2237,73, 2304,63, -163,723 ); - ent.v[ "angles" ] = ( 22,3356, 166,273, -0,79912 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -2093,52, 3221,22, -204,71 ); - ent.v[ "angles" ] = ( 360, 175, 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -2236,85, 3283,24, -219,902 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 165 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_area" ); - ent.v[ "origin" ] = ( -1838,37, 4040,13, -199 ); - ent.v[ "angles" ] = ( 0, 173,997, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -1615,52, 3932,52, -152,145 ); - ent.v[ "angles" ] = ( 21, 171, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -1478,15, 4128,5, -118,027 ); - ent.v[ "angles" ] = ( 350,011, 174,588, -20,614 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_smolder_rubble_line_sm" ); - ent.v[ "origin" ] = ( -1263,36, 4221,16, -257,875 ); - ent.v[ "angles" ] = ( 325,298, 215,525, -8,8776 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_la_sun1" ); - ent.v[ "origin" ] = ( -3652,57, 35635,9, 26492 ); - ent.v[ "angles" ] = ( 285, 90, -68 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); - ent.v[ "origin" ] = ( -1181,49, 5042,49, -261,955 ); - ent.v[ "angles" ] = ( 355, 100, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); - ent.v[ "origin" ] = ( -1303,1, 4950,23, -262,125 ); - ent.v[ "angles" ] = ( 357, 160, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -208,151, 3588,25, -150,774 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); - ent.v[ "origin" ] = ( -1248,93, 5017,84, -262,153 ); - ent.v[ "angles" ] = ( 353,296, 122,013, 2,13843 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); - ent.v[ "origin" ] = ( -1109,89, 5031,68, -264,009 ); - ent.v[ "angles" ] = ( 351,815, 70,7762, 2,06796 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); - ent.v[ "origin" ] = ( -1308,18, 4863,49, -262,01 ); - ent.v[ "angles" ] = ( 353,799, 196,005, 0,540364 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); - ent.v[ "origin" ] = ( -1048,16, 4985,52, -262,043 ); - ent.v[ "angles" ] = ( 350,5, 39,9179, 0,607186 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); - ent.v[ "origin" ] = ( -1013,95, 4917,75, -261,689 ); - ent.v[ "angles" ] = ( 352,203, 6,62802, 0,794539 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); - ent.v[ "origin" ] = ( -1024,53, 4843,52, -261,098 ); - ent.v[ "angles" ] = ( 353,586, 341,451, -0,962938 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); - ent.v[ "origin" ] = ( -1271,45, 4792,13, -261,008 ); - ent.v[ "angles" ] = ( 354,908, 228,158, -0,888594 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); - ent.v[ "origin" ] = ( -1209,02, 4752,88, -261,202 ); - ent.v[ "angles" ] = ( 353,922, 256,238, -0,179304 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); - ent.v[ "origin" ] = ( -1066,2, 4780,05, -261,341 ); - ent.v[ "angles" ] = ( 356,664, 311,377, 1,91272 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_splash_mist_fountain" ); - ent.v[ "origin" ] = ( -1136,27, 4744,76, -261,155 ); - ent.v[ "angles" ] = ( 354,342, 280,368, 0,13846 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_firetruck" ); - ent.v[ "origin" ] = ( -2568,7, 685,6, -207 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269,6 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_plume_md_blk_distant" ); - ent.v[ "origin" ] = ( -9689,1, 5424,9, 2557,81 ); - ent.v[ "angles" ] = ( 6,27876, 285,319, -1,24729 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_bldg_ext_dist_falling_debris" ); - ent.v[ "origin" ] = ( -9623,87, 5388,72, 2544,54 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_bldg_int_dist_xlg" ); - ent.v[ "origin" ] = ( -9771,97, 5388,11, 2166,23 ); - ent.v[ "angles" ] = ( 0, 355, -4 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_bldg_int_dist_xlg" ); - ent.v[ "origin" ] = ( -4851,88, -895,618, 1122,79 ); - ent.v[ "angles" ] = ( 0, 355, -4 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_bldg_int_dist_xlg" ); - ent.v[ "origin" ] = ( -4115,58, -6560,9, 4016,83 ); - ent.v[ "angles" ] = ( 3,27622, 49,9342, -2,29716 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_bldg_int_dist_xlg" ); - ent.v[ "origin" ] = ( -5191,22, -6183,18, 5934,13 ); - ent.v[ "angles" ] = ( 4, 86,0023, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_bldg_ext_dist_falling_debris" ); - ent.v[ "origin" ] = ( -3789,11, -5559,43, 3888,22 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 47 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_bldg_int_dist_xlg" ); - ent.v[ "origin" ] = ( -5998,29, 7707,82, 795,268 ); - ent.v[ "angles" ] = ( 356,346, 289,052, -1,62934 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_light_flourescent_ceiling_panel" ); - ent.v[ "origin" ] = ( -233,732, 2628,09, 131,475 ); - ent.v[ "angles" ] = ( 89,9651, 87,9915, 178,992 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3002; - ent = maps/mp/_utility::createexploder( "fx_light_outdoor_wall" ); - ent.v[ "origin" ] = ( 287,981, 1705,02, -82,1401 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3003; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_pent_lamp_desk" ); - ent.v[ "origin" ] = ( -674,533, 2778,55, 33,3667 ); - ent.v[ "angles" ] = ( 63,6855, 339,664, -16,8023 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_pent_lamp_desk" ); - ent.v[ "origin" ] = ( -684,725, 2943,07, 33,125 ); - ent.v[ "angles" ] = ( 60, 36, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_plume_detail_blk" ); - ent.v[ "origin" ] = ( -371,722, 2402,06, 62,4251 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 175 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_sm_runner" ); - ent.v[ "origin" ] = ( 138,599, 2941,03, -53,0575 ); - ent.v[ "angles" ] = ( 58,194, 327,501, -11,2124 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_ash_falling_door" ); - ent.v[ "origin" ] = ( 37,6359, 517,715, -93,162 ); - ent.v[ "angles" ] = ( 39,9277, 266,515, 1,15198 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_light_outdoor_wall" ); - ent.v[ "origin" ] = ( 673,909, 1705, -82,2921 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3003; - ent = maps/mp/_utility::createexploder( "fx_light_outdoor_wall" ); - ent.v[ "origin" ] = ( -451,951, 1885,67, -83,2023 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3001; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_plume_detail_blk" ); - ent.v[ "origin" ] = ( -397,592, 2486,77, 64,4336 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 190 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm" ); - ent.v[ "origin" ] = ( -1873,8, 1215,32, -166,061 ); - ent.v[ "angles" ] = ( 290,851, 170,338, -0,749529 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_plume_detail_blk" ); - ent.v[ "origin" ] = ( -1870,49, 1219,93, -147,364 ); - ent.v[ "angles" ] = ( 360, 175, -16 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool" ); - ent.v[ "origin" ] = ( 7,3392, 2653,22, -27,4032 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( -341,818, -892,832, -137,358 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( -479,281, -893,118, -137,364 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( -620,288, -893,344, -136,622 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( -884,636, -893,028, -137,025 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( -342,588, -1373,44, -136,721 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( -480,67, -1373,52, -137,356 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( -595,581, -1372,76, -137,354 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( -722,606, -1373,44, -137,367 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( -838,612, -1374,6, -137,196 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( -722,372, -1565,15, -136,766 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_red" ); - ent.v[ "origin" ] = ( -838,132, -1565,03, -137,111 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_red" ); - ent.v[ "origin" ] = ( -596,917, -1565,59, -136,134 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_red" ); - ent.v[ "origin" ] = ( -480,061, -1565,45, -136,445 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_red" ); - ent.v[ "origin" ] = ( -341,63, -1564,57, -136,759 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_red" ); - ent.v[ "origin" ] = ( -771,058, -893,535, -136,195 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_red" ); - ent.v[ "origin" ] = ( -740,818, 67,4211, 62,7712 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_red" ); - ent.v[ "origin" ] = ( 41,4271, -124,344, 62,421 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_red" ); - ent.v[ "origin" ] = ( 370,505, -124,113, 62,3464 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_red" ); - ent.v[ "origin" ] = ( 507,182, 67,3318, 63,6387 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_red" ); - ent.v[ "origin" ] = ( 373,911, 68,5682, 63,1458 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( -856,212, 67,3872, 63,4107 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( -621,832, 67,8153, 63,089 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( -494,262, 67,4517, 63,6499 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( -374,945, 66,7372, 62,6954 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( -265,981, 66,8669, 62,7713 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( -142,113, 67,2712, 62,7598 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( -8,12886, 67,0104, 63,8761 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( -189,275, -124,95, 64,0678 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( -70,4325, -125,437, 62,2695 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( 153,795, -125,095, 63,8372 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( 269,424, -126,852, 62,2402 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( 629,683, 67,4643, 62,0338 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( 242,321, 67,9498, 62,6577 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_green" ); - ent.v[ "origin" ] = ( 115,197, 67,3116, 63,0846 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 58,5516, -99,0717, 22,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -1007,9, -71,7925, 30,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -355,078, -476,457, -93,4562 ); - ent.v[ "angles" ] = ( 15, 179, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( -28,3065, -223,546, -267,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 260 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( -1223,73, -1607,3, -264,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 233 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -2090,31, -174,806, -155,441 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -1694,67, 102,1, -136,652 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 176 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -2098,87, 94,0168, 3,30144 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; -} diff --git a/Multiplayer Maps/mp_la/maps/mp/mp_la.gsc b/Multiplayer Maps/mp_la/maps/mp/mp_la.gsc deleted file mode 100644 index 572ee06..0000000 --- a/Multiplayer Maps/mp_la/maps/mp/mp_la.gsc +++ /dev/null @@ -1,72 +0,0 @@ -#include maps/mp/_compass; -#include common_scripts/utility; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_la_fx::main(); - if ( gamemodeismode( level.gamemode_wager_match ) ) - { - maps/mp/_compass::setupminimap( "compass_map_mp_la_wager" ); - } - else - { - maps/mp/_compass::setupminimap( "compass_map_mp_la" ); - } - maps/mp/_load::main(); - maps/mp/mp_la_amb::main(); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - registerclientfield( "scriptmover", "police_car_lights", 1, 1, "int" ); - registerclientfield( "scriptmover", "ambulance_lights", 1, 1, "int" ); - level thread destructible_lights(); - level.remotemotarviewleft = 45; - level.remotemotarviewright = 45; -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2600", reset_dvars ); -} - -destructible_lights() -{ - wait 0,05; - destructibles = getentarray( "destructible", "targetname" ); - _a66 = destructibles; - _k66 = getFirstArrayKey( _a66 ); - while ( isDefined( _k66 ) ) - { - destructible = _a66[ _k66 ]; - if ( destructible.destructibledef == "veh_t6_police_car_destructible_mp" ) - { - destructible thread destructible_think( "police_car_lights" ); - destructible setclientfield( "police_car_lights", 1 ); - } - else - { - if ( destructible.destructibledef == "veh_iw_civ_ambulance_destructible" ) - { - destructible thread destructible_think( "ambulance_lights" ); - destructible setclientfield( "ambulance_lights", 1 ); - } - } - _k66 = getNextArrayKey( _a66, _k66 ); - } -} - -destructible_think( clientfield ) -{ - self waittill_any( "death", "destructible_base_piece_death" ); - self setclientfield( clientfield, 0 ); -} diff --git a/Multiplayer Maps/mp_la/maps/mp/mp_la_amb.gsc b/Multiplayer Maps/mp_la/maps/mp/mp_la_amb.gsc deleted file mode 100644 index b4b1b37..0000000 --- a/Multiplayer Maps/mp_la/maps/mp/mp_la_amb.gsc +++ /dev/null @@ -1,16 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; -#include common_scripts/utility; - -main() -{ - array_thread( getentarray( "advertisement", "targetname" ), ::advertisements ); -} - -advertisements() -{ - self playloopsound( "amb_" + self.script_noteworthy + "_ad" ); - self waittill( "damage" ); - self stoploopsound(); - self playloopsound( "amb_" + self.script_noteworthy + "_damaged_ad" ); -} diff --git a/Multiplayer Maps/mp_la/maps/mp/mp_la_fx.gsc b/Multiplayer Maps/mp_la/maps/mp/mp_la_fx.gsc deleted file mode 100644 index 36a30f0..0000000 --- a/Multiplayer Maps/mp_la/maps/mp/mp_la_fx.gsc +++ /dev/null @@ -1,92 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); - -precache_util_fx() -{ -} - -precache_scripted_fx() -{ - level._effect[ "fx_light_police_car" ] = loadfx( "maps/mp_maps/fx_mp_light_police_car" ); -} - -precache_createfx_fx() -{ - level._effect[ "fx_water_fire_sprinkler" ] = loadfx( "water/fx_water_fire_sprinkler" ); - level._effect[ "fx_water_fire_sprinkler_splash" ] = loadfx( "water/fx_water_fire_sprinkler_splash" ); - level._effect[ "fx_water_fire_sprinkler_sputter" ] = loadfx( "water/fx_water_fire_sprinkler_sputter" ); - level._effect[ "fx_water_fire_sprinkler_gush" ] = loadfx( "water/fx_water_fire_sprinkler_gush" ); - level._effect[ "fx_water_fire_sprinkler_gush_splash" ] = loadfx( "water/fx_water_fire_sprinkler_gush_splash" ); - level._effect[ "fx_water_fountian_pool_md" ] = loadfx( "water/fx_water_fountain_pool_md" ); - level._effect[ "fx_mp_water_splash_mist_fountain" ] = loadfx( "maps/mp_maps/fx_mp_water_splash_mist_fountain" ); - level._effect[ "fx_mp_water_drip_light_long" ] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); - level._effect[ "fx_mp_water_drip_light_shrt" ] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_shrt" ); - level._effect[ "fx_insects_swarm_md_light" ] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); - level._effect[ "fx_insects_swarm_lg_light" ] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); - level._effect[ "fx_mp_debris_papers" ] = loadfx( "maps/mp_maps/fx_mp_debris_papers" ); - level._effect[ "fx_mp_debris_papers_narrow" ] = loadfx( "maps/mp_maps/fx_mp_debris_papers_narrow" ); - level._effect[ "fx_paper_interior_short" ] = loadfx( "debris/fx_paper_interior_short" ); - level._effect[ "fx_paper_burning_fall_slow" ] = loadfx( "debris/fx_paper_burning_fall_slow" ); - level._effect[ "fx_mp_light_dust_motes_md" ] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); - level._effect[ "fx_dust_crumble_lg" ] = loadfx( "dirt/fx_dust_crumble_lg_runner" ); - level._effect[ "fx_mp_fire_md" ] = loadfx( "maps/mp_maps/fx_mp_fire_md" ); - level._effect[ "fx_fire_bldg_ext_dist_falling_debris" ] = loadfx( "fire/fx_fire_bldg_ext_dist_falling_debris" ); - level._effect[ "fx_fire_lg" ] = loadfx( "env/fire/fx_fire_lg" ); - level._effect[ "fx_fire_sm" ] = loadfx( "env/fire/fx_fire_sm" ); - level._effect[ "fx_fire_bldg_int_dist_xlg" ] = loadfx( "fire/fx_fire_bldg_int_dist_xlg" ); - level._effect[ "fx_mp_fire_ash_falling_lg" ] = loadfx( "maps/mp_maps/fx_mp_fire_ash_falling_lg" ); - level._effect[ "fx_mp_fire_ash_falling_door" ] = loadfx( "maps/mp_maps/fx_mp_fire_ash_falling_door" ); - level._effect[ "fx_mp_ash_falling_lg" ] = loadfx( "maps/mp_maps/fx_mp_ash_falling_lg" ); - level._effect[ "fx_mp_smk_haze_linger_xlg" ] = loadfx( "maps/mp_maps/fx_mp_smk_haze_linger_xlg" ); - level._effect[ "fx_mp_smk_plume_detail_blk" ] = loadfx( "maps/mp_maps/fx_mp_smk_plume_detail_blk" ); - level._effect[ "fx_mp_smk_plume_md_blk" ] = loadfx( "maps/mp_maps/fx_mp_smk_plume_md_blk" ); - level._effect[ "fx_mp_smk_plume_lg_blk" ] = loadfx( "maps/mp_maps/fx_mp_smk_plume_lg_blk" ); - level._effect[ "fx_mp_smk_smolder_rubble_area" ] = loadfx( "maps/mp_maps/fx_mp_smk_smolder_rubble_area" ); - level._effect[ "fx_mp_smk_smolder_rubble_line" ] = loadfx( "maps/mp_maps/fx_mp_smk_smolder_rubble_line" ); - level._effect[ "fx_mp_smk_smolder_rubble_line_sm" ] = loadfx( "maps/mp_maps/fx_mp_smk_smolder_rubble_line_sm" ); - level._effect[ "fx_mp_smk_plume_lg_blk_distant" ] = loadfx( "maps/mp_maps/fx_mp_smk_plume_lg_blk_distant" ); - level._effect[ "fx_mp_smk_plume_md_blk_distant" ] = loadfx( "maps/mp_maps/fx_mp_smk_plume_md_blk_distant" ); - level._effect[ "fx_mp_elec_spark_burst_xsm_thin" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin" ); - level._effect[ "fx_mp_elec_spark_burst_sm_runner" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_sm_runner" ); - level._effect[ "fx_mp_elec_spark_burst_xsm_thin_runner" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin_runner" ); - level._effect[ "fx_mp_elec_spark_burst_md_runner" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_md_runner" ); - level._effect[ "fx_mp_elec_spark_burst_lg_runner" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_lg_runner" ); - level._effect[ "fx_light_emrgncy_floodlight" ] = loadfx( "light/fx_light_emrgncy_floodlight" ); - level._effect[ "fx_light_recessed_wrm" ] = loadfx( "light/fx_light_recessed_wrm" ); - level._effect[ "fx_light_ambulance_red" ] = loadfx( "env/light/fx_light_ambulance_red" ); - level._effect[ "fx_mp_light_flare_la" ] = loadfx( "maps/mp_maps/fx_mp_light_flare_la" ); - level._effect[ "fx_light_flourescent_glow_cool" ] = loadfx( "light/fx_light_flourescent_glow_cool" ); - level._effect[ "fx_light_gray_white_ribbon_sm" ] = loadfx( "light/fx_light_gray_white_ribbon_sm" ); - level._effect[ "fx_mp_light_police_car" ] = loadfx( "maps/mp_maps/fx_mp_light_police_car" ); - level._effect[ "fx_mp_light_ambulance" ] = loadfx( "maps/mp_maps/fx_mp_light_ambulance" ); - level._effect[ "fx_mp_light_firetruck" ] = loadfx( "maps/mp_maps/fx_mp_light_firetruck" ); - level._effect[ "fx_light_flourescent_ceiling_panel" ] = loadfx( "light/fx_light_flourescent_ceiling_panel" ); - level._effect[ "fx_light_pent_lamp_desk" ] = loadfx( "light/fx_light_pent_lamp_desk" ); - level._effect[ "fx_light_outdoor_wall" ] = loadfx( "light/fx_light_outdoor_wall" ); - level._effect[ "fx_light_recessed_cool" ] = loadfx( "light/fx_light_recessed_cool" ); - level._effect[ "fx_light_garage_parking_green" ] = loadfx( "light/fx_light_garage_parking_green" ); - level._effect[ "fx_light_garage_parking_red" ] = loadfx( "light/fx_light_garage_parking_red" ); - level._effect[ "fx_lf_mp_la_sun1" ] = loadfx( "lens_flares/fx_lf_mp_la_sun1" ); - level._effect[ "fx_dest_fire_hydrant_burst" ] = loadfx( "maps/mp_maps/fx_mp_fire_hydrant_burst" ); - level._effect[ "fx_rain_splash_area_100_hvy_lp" ] = loadfx( "weather/fx_rain_splash_area_100_hvy_lp" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "clearance_pipe" ] = %fxanim_gp_garage_clearance_pipe_anim; - level.scr_anim[ "fxanim_props" ][ "elevator_doors" ] = %fxanim_mp_la_elevator_doors_anim; - level.scr_anim[ "fxanim_props" ][ "sparking_wires_med" ] = %fxanim_gp_wirespark_med_anim; - level.scr_anim[ "fxanim_props" ][ "sparking_wires_long" ] = %fxanim_gp_wirespark_long_anim; - level.scr_anim[ "fxanim_props" ][ "hanging_wires" ] = %fxanim_mp_la_hanging_wires_anim; -} - -main() -{ - precache_util_fx(); - precache_createfx_fx(); - precache_scripted_fx(); - precache_fxanim_props(); - maps/mp/createfx/mp_la_fx::main(); - maps/mp/createart/mp_la_art::main(); -} diff --git a/Multiplayer Maps/mp_magma/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_magma/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_magma/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_magma/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_magma/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_magma/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_magma/maps/mp/createfx/mp_magma_fx.gsc b/Multiplayer Maps/mp_magma/maps/mp/createfx/mp_magma_fx.gsc deleted file mode 100644 index b17d52f..0000000 --- a/Multiplayer Maps/mp_magma/maps/mp/createfx/mp_magma_fx.gsc +++ /dev/null @@ -1,2515 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -83,2882, 801,451, -390,872 ); - ent.v[ "angles" ] = ( 355,135, 89,1011, -1,34582 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_ember_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1624,42, 650,628, -633 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_ember_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 794,536, 500,637, -504 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_ember_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3028,16, -806,528, -883 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_ember_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 726,22, -1443,45, -712,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_ember_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1583,59, -1650,88, -941,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_ember_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3811,31, -873,052, -540 ); - ent.v[ "angles" ] = ( 270, 0, -1 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_volcano_smoke" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -64,2282, 11164,4, 3188,97 ); - ent.v[ "angles" ] = ( 345,054, 80,2724, -13,97 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1177,98, 246,814, -478,065 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1268,26, 461,678, -475,091 ); - ent.v[ "angles" ] = ( 5,52931, 258,943, 0,782471 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1070,16, 323,492, -471,174 ); - ent.v[ "angles" ] = ( 358,924, 266,03, -0,674775 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1183,29, 174,587, -476,72 ); - ent.v[ "angles" ] = ( 0,963578, 269,97, -0,47042 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1261,58, -204,029, -494,919 ); - ent.v[ "angles" ] = ( 1,67731, 222,964, -2,4882 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1367,47, 131,479, -491,021 ); - ent.v[ "angles" ] = ( 1,09957, 217,947, 0,516985 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -946,519, 615,787, -437,115 ); - ent.v[ "angles" ] = ( 2,11217, 230,398, 0,997092 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -632,791, 719,894, -407,448 ); - ent.v[ "angles" ] = ( 357,999, 246, 0 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -305,517, 708,333, -395,259 ); - ent.v[ "angles" ] = ( 0,998781, 246, 0 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 149,535, 851,394, -397,767 ); - ent.v[ "angles" ] = ( 3,73616, 276,049, 1,32327 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -43,1799, 647,125, -396,629 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 285 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -395,437, 881,646, -393,302 ); - ent.v[ "angles" ] = ( 0,531561, 252, 1,05351 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -809,093, -193,678, -497,643 ); - ent.v[ "angles" ] = ( 6, 300, 0 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -992,403, -160,495, -491,895 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 293 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1119,76, -307,973, -494,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 228 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1132,08, 576,886, -462,039 ); - ent.v[ "angles" ] = ( 356,001, 255,993, 0,104973 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -625,015, 931,451, -403,941 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 261 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2363,13, -738,011, -420,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 282 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1626,32, -650,634, -288,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 264 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1565,7, -582,743, -378 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 249 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1658,71, -1257,92, -484,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 268 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1093,95, 113,141, -312,424 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 243 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1639,78, -1292,24, -512 ); - ent.v[ "angles" ] = ( 360, 273, 0 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2153,26, -1154,39, -419,875 ); - ent.v[ "angles" ] = ( 1, 282, 0 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2580,15, 141,23, -229,024 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 242 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3184,77, -260,96, -407 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 268 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_magma_volcano" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -390,698, 8310,66, 4936,46 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_magma_sun1" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -209748, -508218, 366879 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ball_falling_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 13558, -2187,5, -394,559 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 267 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ball_falling_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -7783,27, 2626,57, -566,854 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 267 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ball_falling_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -10250,3, -1290,51, -504 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 267 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ball_falling_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -987,249, -8351,25, -844,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 267 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ball_falling_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 10978,2, -5330,36, -258,87 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 267 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ball_falling_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4576,06, -6048,44, -563,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 267 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ball_falling_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2686,84, -8054,87, -768,875 ); - ent.v[ "angles" ] = ( 357, 259, 0 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -62,089, -664,62, -655,806 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 229 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_ember_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -351,415, -3439,8, -702 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_fire_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1939,01, -473,465, -178,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 271 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_fire_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1821,72, -136,48, -204,202 ); - ent.v[ "angles" ] = ( 357, 266, 0 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1688,22, -812,028, -504 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 259 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2547,99, -1269,55, -591,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 280 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -670,492, -354,903, -504 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 248 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -181,153, -720,634, -658,928 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 47 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 273,998, -557,349, -594,992 ); - ent.v[ "angles" ] = ( 12,3588, 179,608, -2,79387 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -12,912, -242,671, -551,814 ); - ent.v[ "angles" ] = ( 5,0234, 283,797, 0 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_steam_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4202,01, 5170,7, 1513,43 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 250 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_plume_md_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -6642,86, -2056,78, -473,243 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 263 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_steam_ocean_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 525,434, -5248,86, -819,334 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 312 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_steam_ocean" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 159,289, -5492,31, -805,08 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 279 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_steam_ocean_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1291,38, -5625,02, -789,521 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 238 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1135,62, -2128,65, -477,875 ); - ent.v[ "angles" ] = ( 359, 265, 0 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -28,9387, -1858,45, -427,343 ); - ent.v[ "angles" ] = ( 357,037, 286,012, -0,469781 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 776,174, -2172, -487,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 268 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2088,64, -2022,94, -426,047 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 268 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 26,5999, -540,173, -430,123 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 241 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 391,497, -853,697, -396 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 229 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -628,151, -1911,96, -413,607 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 268 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1584,71, -1000,62, -575,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 275 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2033,05, -685,937, -599,795 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 272 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1546,91, -1487,96, -676 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 274 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2378,62, -934,667, -599,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 265 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1553,74, -738,518, -574,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1308,66, -104,126, -451,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 271 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -277,486, -255,843, -504 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 247 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1594,97, -546,112, -496 ); - ent.v[ "angles" ] = ( 360, 266, 0 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 623,76, -743,645, -511,411 ); - ent.v[ "angles" ] = ( 1,98053, 274,722, -8,00481 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1857,15, 331,99, -444 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 261 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2001,86, -26,1502, -466,258 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 275 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2062,57, -255,085, -527,429 ); - ent.v[ "angles" ] = ( 13, 272, 0 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1725,7, -581,344, -420,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 272 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2507,12, -615,797, -278,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 275 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -204,667, -557,553, -636,955 ); - ent.v[ "angles" ] = ( 356,819, 225,857, -0,323835 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 77,4551, -792,528, -639,13 ); - ent.v[ "angles" ] = ( 0,687726, 237,302, -0,492771 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1519,82, -343,38, -491,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 271 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -903,84, -125,267, -494,215 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 338 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 343,479, -1508,19, -499,054 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 281,95, -1507,91, -499,374 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1414,51, -1510,23, -550,417 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1092,46, 469,538, -467,213 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 267 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1260,08, 378,752, -483,674 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 261 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1007,73, -134,546, -490,136 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 276 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1050,3, 146,914, -471,723 ); - ent.v[ "angles" ] = ( 0,998172, 275, 0 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1209,85, -0,161606, -484,718 ); - ent.v[ "angles" ] = ( 0,857287, 258, 0,515153 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1419,29, -300,263, -496 ); - ent.v[ "angles" ] = ( 1, 227, 0 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -471,282, 888,208, -396,619 ); - ent.v[ "angles" ] = ( 0,933716, 248, 0,358453 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -35,7145, 603,847, -403,149 ); - ent.v[ "angles" ] = ( 6,55863, 283,087, 0,834612 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 405,413, 765,877, -419,005 ); - ent.v[ "angles" ] = ( 3,43238, 289,035, -2,58516 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -786,345, -221,253, -502,128 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 300 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -980,752, -454,861, -501,896 ); - ent.v[ "angles" ] = ( 2, 251, 0 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -953,482, -1514,72, -373,712 ); - ent.v[ "angles" ] = ( 270, 0, 89 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -847,265, -1514,75, -373,706 ); - ent.v[ "angles" ] = ( 270, 0, 89 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1058,33, -1514,61, -373,724 ); - ent.v[ "angles" ] = ( 270, 0, 89 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -846,64, -1148,29, -373,724 ); - ent.v[ "angles" ] = ( 270, 0, 89 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -952,722, -1148,18, -373,682 ); - ent.v[ "angles" ] = ( 270, 0, 89 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1057,5, -1148,36, -373,732 ); - ent.v[ "angles" ] = ( 270, 0, 89 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_steam_fish" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1342,09, -1547,44, -549,146 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_steam_fish" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1403,08, -1534,48, -547,041 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_steam_fish" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -953,1, -1079,6, -527,057 ); - ent.v[ "angles" ] = ( 271, 89,9971, -89,999 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_steam_fish" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1299,76, -1247,39, -518,76 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_steam_fish" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1048,79, -1692,2, -541,098 ); - ent.v[ "angles" ] = ( 279,055, 186,288, 173,633 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_volcano_erupt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -868,665, 8556,45, 4538,65 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 87 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_steam_vent_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -851,028, -1374,21, -383,83 ); - ent.v[ "angles" ] = ( 359, 180, 0 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_steam_vent_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -850,177, -1477,52, -384,553 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_steam_vent_w" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1480,06, -1162,62, -320,721 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 177 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_steam_vent_w" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1483,24, -1493,63, -321,415 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 177 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_steam_fish" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1175,61, -1248,18, -521,413 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_steam_fish" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1218,31, -1580,35, -517,999 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1426,91, -1508,83, -550,157 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1198,69, -1514,56, -373,704 ); - ent.v[ "angles" ] = ( 270, 0, 89 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1290,11, -1514,33, -373,626 ); - ent.v[ "angles" ] = ( 270, 0, 89 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1381,75, -1514,6, -373,723 ); - ent.v[ "angles" ] = ( 270, 0, 89 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1399,58, -1148,34, -373,743 ); - ent.v[ "angles" ] = ( 270, 0, 89 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1294,8, -1148,04, -373,638 ); - ent.v[ "angles" ] = ( 270, 0, 89 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1188,54, -1148,01, -373,624 ); - ent.v[ "angles" ] = ( 270, 0, 89 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2687,11, -1956,9, -722,342 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2312,42, -2096,91, -653,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1147,76, 1135,48, -432,177 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1487,59, 1549,79, -342,033 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1782,25, 2418,36, -146,873 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3515,57, -1678,29, -675,173 ); - ent.v[ "angles" ] = ( 12, 260, 0 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3446,62, -964,906, -599,976 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3148,46, 235,601, -511,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1920,87, 3045,36, -17,8145 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 926,445, 560,822, -457,741 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 827,565, 627,967, -457,907 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -449,789, -1315,25, -762,553 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -129,784, -1443,23, -758,525 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -322,36, -1780,13, -752,254 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -306,81, -1021,26, -696,554 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 293 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -252,656, -1334,15, -705,429 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 308 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -42,532, -2876,59, -837,704 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 275 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 43,1153, -4787,95, -859,222 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -393,676, -4750,93, -854,995 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -106,799, -645,335, -693 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3326,45, -1222,39, -581,004 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 262 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2391,88, 344,043, -426,474 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 262 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 999,657, 1930,6, 216,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 225 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -175,467, -4017,95, -875,632 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 138,366, -3492,77, -853,797 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -155,186, -3308,28, -872,807 ); - ent.v[ "angles" ] = ( 6, 260, 0 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1365,06, -2685,88, -736,577 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1677,66, -1903,5, -647,844 ); - ent.v[ "angles" ] = ( 0, 328, -6 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1535,94, -2011,76, -646,706 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 328 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -10,5987, -1050,49, -659,177 ); - ent.v[ "angles" ] = ( 359,087, 252, -0,406351 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_200_dist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 626,782, 1313,29, 894,745 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 237 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_200_dist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 571,012, 1321,98, 545,487 ); - ent.v[ "angles" ] = ( 0, 237, -2 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_200_dist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 549,976, 1449,53, 546,313 ); - ent.v[ "angles" ] = ( 357, 150, 0 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3263,7, 1269,66, -277,084 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3296,05, -714,717, -564,755 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3595,73, -1488,77, -622,813 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3383,08, -1119,2, -585,563 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 262 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 6168,84, -1809,36, -458,875 ); - ent.v[ "angles" ] = ( 27,9944, 284,524, 3,50026 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 174,299, -225,389, -363,043 ); - ent.v[ "angles" ] = ( 72,745, 213,838, -0,713803 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 253,496, -340,313, -478,058 ); - ent.v[ "angles" ] = ( 78,9029, 152,106, -83,7438 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2267,31, -1739,81, -630,602 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2191,13, -1706,69, -658,053 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2627,24, 1863,67, -9,01601 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 263 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4041,85, -1560,45, -436,756 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 262 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 5229,01, 1477,58, -218,491 ); - ent.v[ "angles" ] = ( 35, 263, 0 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_fire_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -158,465, 1237,44, -94,6902 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 238 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_fire_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 688,029, 1464,79, 889,097 ); - ent.v[ "angles" ] = ( 359,912, 216,018, -0,725346 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_fire_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1897,73, 1574,44, -89,4524 ); - ent.v[ "angles" ] = ( 354,003, 242,756, -0,31543 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_fire_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1541,36, 883,749, -33,2916 ); - ent.v[ "angles" ] = ( 2,81935, 250,025, 1,02705 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_fire_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -398,79, -1465,43, -674,205 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 264 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_fire_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2112,83, -1663,76, -596,385 ); - ent.v[ "angles" ] = ( 7,98038, 287,039, 0,56169 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 437,567, -1873,38, -446,514 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1399,43, 428,828, -373,067 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_steam_fish" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -924,608, -1232,27, -517,035 ); - ent.v[ "angles" ] = ( 271, 89,9971, -89,999 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 29,2199, -699,909, -504 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 254 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_fire_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 364,608, -397,04, -256,014 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 236 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_fire_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 361,931, -435,377, -370,525 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 228 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -5,65167, -219,994, -221,041 ); - ent.v[ "angles" ] = ( 16, 210, 0 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -450,82, -945,502, -636,147 ); - ent.v[ "angles" ] = ( 0, 347, 3 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -460,414, -989,039, -642,695 ); - ent.v[ "angles" ] = ( 359,083, 300,945, 5,02909 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -43,1443, -1459,02, -663,314 ); - ent.v[ "angles" ] = ( 359,016, 269,936, 8,93483 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -659,126, -1260,07, -647,64 ); - ent.v[ "angles" ] = ( 353,092, 300,679, 1,04314 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -248,148, -1696,78, -443,463 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 268 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3394,17, -1700,07, -531,374 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 268 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1309,99, -1273,78, -276,978 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 268 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -580,558, -693,833, -157,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 268 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -205,887, -1918,17, -686,439 ); - ent.v[ "angles" ] = ( 0, 89, -6 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_200_dist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -219,594, -1945,69, -691,204 ); - ent.v[ "angles" ] = ( 1,04473, 92,0848, -1,31476 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -596,288, -585,213, -434,562 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 269 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -867,403, -700,257, -440,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 269 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 482,401, -1244,46, -536,737 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 269 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 785,046, -1242,65, -534,764 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 269 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 452,625, -2031,86, -517,281 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 92 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1360,91, -1423,83, -597,115 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 248,368, -2015,94, -532,536 ); - ent.v[ "angles" ] = ( 13, 180, 0 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -702,31, -2017,12, -521,112 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 17 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2105,33, -484,65, -442,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 51 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -212,972, 408,505, -336,698 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 272 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -482,482, 357,575, -421,684 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 272 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -929,882, 23,623, -448,253 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2509,77, -566,31, -445,87 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 272 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2793,82, -584,125, -395,603 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 272 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -180,49, -488,8, -592,712 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 308 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 299,403, -1503,08, -613,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 351 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1435,36, -1489,24, -666,045 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 188 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -938,523, -1799,56, -556,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 76 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1463,44, -1397,77, -550 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 326 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2116,42, -554,917, -476,346 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 57 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1733,76, -279,229, -487,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 203 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -947,251, 55,4396, -495,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 347 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -84,0107, 416,238, -384 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 233 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -923,006, -632,686, -487,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 305 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -457,397, -648,445, -461,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 211 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_ember_door" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 597,301, -665,134, -504,611 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 128 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_steam_ocean_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -258,094, -5693,38, -875,866 ); - ent.v[ "angles" ] = ( 21, 274, 0 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_volcano_smoke" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -571,159, 12446,6, 4332,14 ); - ent.v[ "angles" ] = ( 355,189, 104,113, -5,96228 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_volcano_smoke" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1754,37, 13869, 4442,37 ); - ent.v[ "angles" ] = ( 338,547, 67,1298, -33,7248 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4397,92, 5104,39, 1097,25 ); - ent.v[ "angles" ] = ( 9,00167, 330,549, 7,43622 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 72,9087, -1135,59, -660,497 ); - ent.v[ "angles" ] = ( 359,134, 258, -0,499562 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 166,821, -1410,68, -654,333 ); - ent.v[ "angles" ] = ( 0, 192, 2 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 133,139, -1581,91, -648,414 ); - ent.v[ "angles" ] = ( 356, 91, -2 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -510,942, -1198,11, -648,953 ); - ent.v[ "angles" ] = ( 356,329, 326,27, -3,27294 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -681,728, -1603,48, -675,759 ); - ent.v[ "angles" ] = ( 357,046, 325,014, -0,521401 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_lava_edge_fire_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 173,991, -353,474, -615,482 ); - ent.v[ "angles" ] = ( 354, 223, 0 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_fire_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2336, -2533,12, -760,701 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 238 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_fire_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 5942,61, -1775,52, -498,482 ); - ent.v[ "angles" ] = ( 3, 277, 0 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2591,95, -1802,4, -678,335 ); - ent.v[ "angles" ] = ( 358,592, 241,033, -2,64979 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2879,19, -2074,01, -725,926 ); - ent.v[ "angles" ] = ( 358,592, 241,033, -2,64979 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3075,23, -1850,81, -639,241 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 202,751, -3035,47, -878,827 ); - ent.v[ "angles" ] = ( 9, 260, 0 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 574,858, -3119,23, -832,56 ); - ent.v[ "angles" ] = ( 6, 260, 0 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 845,539, -2959,6, -813,282 ); - ent.v[ "angles" ] = ( 6, 260, 0 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1675,37, -2592,73, -723,145 ); - ent.v[ "angles" ] = ( 17,1843, 316,436, 22,4512 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 364,907, -4164,38, -862,932 ); - ent.v[ "angles" ] = ( 2, 260, 0 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3537,3, -656,398, -279,864 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 268 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_fire_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -342,087, 1789,12, 116,807 ); - ent.v[ "angles" ] = ( 0,286742, 246,016, -0,671972 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -729,705, -1652,52, -354,82 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -729,195, -1555,99, -353,662 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -730,135, -1464,69, -354,388 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1206,89, -916,401, -5,66857 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1303,35, -916,76, -5,94865 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1396,74, -916,347, -5,62549 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1108,07, -2000,75, -443,228 ); - ent.v[ "angles" ] = ( 28,1384, 331,016, -7,40568 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -273,184, -1949,66, -520,737 ); - ent.v[ "angles" ] = ( 26,8109, 38,3048, 15,2998 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -252,017, -1951,97, -513,047 ); - ent.v[ "angles" ] = ( 14,8323, 126,468, 20,475 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3144,49, -589,201, -493,532 ); - ent.v[ "angles" ] = ( 1, 260, 0 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3251,34, -738,626, -494,296 ); - ent.v[ "angles" ] = ( 356,335, 258,947, 1,53826 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_whisp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3206,21, -422,99, -494,564 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 269 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3145,22, -383,906, -504 ); - ent.v[ "angles" ] = ( 355,034, 277,982, 0,259813 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2481,1, 144,246, -445 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 262 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -534,773, 5,85307, -259,5 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -610,545, 6,14791, -259,5 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -694,125, 6,34257, -259,5 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -441,788, 6,29503, -259,5 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -357,362, 6,27576, -259,5 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -273,452, 6,07206, -259,5 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -188,502, 6,43592, -259,5 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -188,879, 200,677, -259,5 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -273,718, 201,307, -259,5 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -357,628, 201,51, -259,5 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -527,008, 201,54, -276,707 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -610,811, 201,383, -259,5 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -189,335, 95,1667, -260,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -358,306, 94,0127, -260,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -526,459, 94,3918, -259,722 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -611,488, 93,8849, -260,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -611,721, 293,946, -259,5 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -525,581, 294,389, -259,699 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -273,933, 293,785, -259,5 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -79,6575, 173,643, -260,5 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -79,6937, 299,404, -260,5 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -282,377, 144,229, -277,898 ); - ent.v[ "angles" ] = ( 24,7885, 318,138, -3,92266 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -282,139, 144,141, -277,383 ); - ent.v[ "angles" ] = ( 24,7885, 318,138, -3,92266 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -654,165, 143,714, -277,077 ); - ent.v[ "angles" ] = ( 22,9457, 238,342, 1,55561 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -654,54, 142,937, -277,349 ); - ent.v[ "angles" ] = ( 22,9457, 238,342, 1,55561 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -271,192, 385,044, -257,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -271,352, 451,177, -257,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -317,419, 412,098, -257,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -205,112, 385,016, -257,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -204,935, 450,245, -257,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -748,667, 354,28, -392,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -531,184, 447,733, -392,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -386,144, 446,41, -392,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -256,798, 445,252, -392 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -798,462, 62,0562, -361,253 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -795,685, -19,4361, -362,244 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2081,25, -431,153, -361,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2055,35, -335,396, -362,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1949,85, -427,721, -361,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_steam_ocean_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 728,408, -4974,25, -808,065 ); - ent.v[ "angles" ] = ( 354, 315, 0 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_steam_ocean" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -707,647, -5568,82, -825 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 258 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1887,96, -273,873, -361,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_fire_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 526,073, 1376, 559,353 ); - ent.v[ "angles" ] = ( 8,80175, 210,855, -1,88606 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_steam_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4567,99, 5553,14, 1111,64 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 229 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_vista_lt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1785,37, 6369,42, 2052,35 ); - ent.v[ "angles" ] = ( 324, 254, 0 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky_wall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 472,658, -1126,88, -448,771 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 238 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -932,462, -2184,43, -563,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 262 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1446,43, -2531,72, -563,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 238 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky_wall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -251,884, 488,125, -329,798 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 238 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1518,29, -1884,86, -457,249 ); - ent.v[ "angles" ] = ( 3, 238, 0 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky_wall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1730,92, 0,125, -418,379 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 238 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ball_falling_sky" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2039,06, -766,883, -600 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 280 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1334,07, 331,11, -352,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1334,56, 429,438, -352,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1334,27, 553,43, -352,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2490,79, -944,664, -353,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2546,12, -944,788, -353,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2545,8, -826,642, -351,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2490,89, -826,293, -351,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2491,02, -718,156, -351,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2545,91, -718,14, -351,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2546,13, -615,941, -351,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2491,2, -615,749, -351,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1258,03, 3913,21, -878,606 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 172 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1955,7, 5060,76, 365,438 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 183 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_volcano_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -120,551, 8473,12, 3730,76 ); - ent.v[ "angles" ] = ( 355,214, 204,962, -14,7418 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2351,81, -600,506, -457,635 ); - ent.v[ "angles" ] = ( 2,73081, 248,942, -0,785321 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2513,14, -449,068, -422,431 ); - ent.v[ "angles" ] = ( 3,73071, 248,928, -0,786096 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2934,64, -726,397, -446,517 ); - ent.v[ "angles" ] = ( 0,583671, 238,969, -0,899506 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2736,95, -868,426, -577,448 ); - ent.v[ "angles" ] = ( 354,732, 249,051, -0,787759 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2205,11, -1884,75, -623,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3291,92, -1846,96, -636,368 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -69,4731, -138,357, -509,714 ); - ent.v[ "angles" ] = ( 9,01093, 286,835, 0,476183 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 425,82, -500,836, -531,924 ); - ent.v[ "angles" ] = ( 9,36229, 179,756, -2,76595 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -550,928, -1080,29, -617,327 ); - ent.v[ "angles" ] = ( 356, 294, 0 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -665,057, -1483,38, -634,255 ); - ent.v[ "angles" ] = ( 356, 294, 0 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3113,2, -990,711, -569,239 ); - ent.v[ "angles" ] = ( 354,78, 252,064, -1,06315 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3161,25, -1228,02, -567,583 ); - ent.v[ "angles" ] = ( 354,78, 252,064, -1,06315 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3166,2, -1395,26, -569,021 ); - ent.v[ "angles" ] = ( 354,78, 252,064, -1,06315 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2097,81, 346,452, -423,884 ); - ent.v[ "angles" ] = ( 355,78, 252,045, -1,06162 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2178,41, 181,666, -430,018 ); - ent.v[ "angles" ] = ( 357,697, 246,012, -0,508411 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 237,999, 771,534, -409,114 ); - ent.v[ "angles" ] = ( 3,60661, 281,058, 1,64419 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 478,09, 504,762, -441,122 ); - ent.v[ "angles" ] = ( 359,728, 303,081, -0,124006 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 498,995, 719,129, -434,701 ); - ent.v[ "angles" ] = ( 356,759, 309,097, -0,465887 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 905,025, -1264,46, -411,117 ); - ent.v[ "angles" ] = ( 82, 180, -180 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 904,85, -1509,59, -409,088 ); - ent.v[ "angles" ] = ( 82, 180, -180 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1083,83, -1504,63, -438,737 ); - ent.v[ "angles" ] = ( 82, 180, -180 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1195,38, -1504,59, -455,66 ); - ent.v[ "angles" ] = ( 82, 180, -180 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1296,01, -1504,89, -470,762 ); - ent.v[ "angles" ] = ( 82, 180, -180 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1084,29, -1263,8, -438,95 ); - ent.v[ "angles" ] = ( 82, 180, -180 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1195,52, -1263,72, -454,831 ); - ent.v[ "angles" ] = ( 82, 180, -180 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1294,99, -1263,09, -470,744 ); - ent.v[ "angles" ] = ( 82, 180, -180 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1487,49, -1377,48, -452,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1487,46, -1440,59, -452,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1487,76, -1533,32, -452,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1487,87, -1595,44, -452,125 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 529,268, -1663,98, -585,048 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 528,894, -1676,88, -577,257 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 529,006, -1688,88, -569,112 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 529,188, -1652,88, -593,181 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 529,16, -1640,88, -600,997 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 529,207, -1628,88, -609,278 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 434,935, -1628,88, -609,085 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 435,047, -1640,88, -601,011 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 434,869, -1652,88, -592,904 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 434,984, -1664,88, -584,941 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 435,076, -1676,88, -576,957 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 434,987, -1688,88, -568,943 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 348,866, -1628,88, -609,156 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 349,208, -1640,88, -601,103 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 349,155, -1652,88, -593,057 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 348,661, -1664,88, -585,058 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 348,646, -1676,88, -576,924 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 348,72, -1688,88, -568,961 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 548,175, -1872,13, -555,215 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 632,829, -1920,13, -555,364 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 353,181, -1872,13, -555,167 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_stair_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 303,633, -1872,13, -555,23 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_light_bench_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 680,953, -1421,09, -514,469 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1001,22, -823,12, -556,84 ); - ent.v[ "angles" ] = ( 0, 275, -8 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 734,981, -908,96, -527,261 ); - ent.v[ "angles" ] = ( 0, 275, -8 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_low" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2179,69, -719,383, -504 ); - ent.v[ "angles" ] = ( 359,166, 269,058, -7,95673 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -945,669, -628,929, -380,753 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -904,886, -588,938, -381,753 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -121,796, 451,579, -281 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -84,3061, 413,031, -282,088 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1418,67, -1390,51, -473,856 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1002,64, -1762,93, -496,312 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 92 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 495,858, 675,658, -336 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 306 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1067,58, 272,011, -357 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 159 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 477,989, -1822,9, -450,625 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 393,218, -1822,99, -450,625 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1159,47, -1923,26, -329,518 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 268 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_smk_smolder_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2996,84, -1559,9, -510,442 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 268 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_purple" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1917,22, -204,805, -360,124 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2311,48, -1492,13, -452,745 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2311,03, -1429,41, -452,747 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2311,53, -1337,37, -452,748 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2311,16, -1275,3, -452,751 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_purple" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2189,63, -387,395, -379,254 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_purple" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2189,16, -274,331, -380,219 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_purple" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1832,25, -453,288, -364,201 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 868,928, -1658,59, -505,217 ); - ent.v[ "angles" ] = ( 36, 133, 0 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 902,351, -1625,04, -505,082 ); - ent.v[ "angles" ] = ( 36, 133, 0 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 936,622, -1590,8, -505,116 ); - ent.v[ "angles" ] = ( 36, 133, 0 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 921,014, -1575,25, -493,5 ); - ent.v[ "angles" ] = ( 87, 133, 0 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 887,005, -1609,09, -493,5 ); - ent.v[ "angles" ] = ( 87, 133, 0 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 852,448, -1643,12, -493,5 ); - ent.v[ "angles" ] = ( 87, 133, 0 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 652,664, -1247,04, -505,338 ); - ent.v[ "angles" ] = ( 37,9817, 269,473, 1,07224 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 716,919, -1246,88, -505,172 ); - ent.v[ "angles" ] = ( 37,9817, 269,473, 1,07224 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 781,075, -1246,9, -505,143 ); - ent.v[ "angles" ] = ( 37,9817, 269,473, 1,07224 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 653,205, -1269,27, -493,5 ); - ent.v[ "angles" ] = ( 88,6805, 308,641, 39,8353 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 717,018, -1269,17, -493,5 ); - ent.v[ "angles" ] = ( 88,6805, 308,641, 39,8353 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_light_recessed_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 780,881, -1268,91, -493,5 ); - ent.v[ "angles" ] = ( 88,6805, 308,641, 39,8353 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 797,308, 140,714, -277,709 ); - ent.v[ "angles" ] = ( 25,1892, 54,8851, 91,622 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 399,345, 419,386, -277,668 ); - ent.v[ "angles" ] = ( 25,1892, 54,8851, 91,622 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 691,604, 710,022, -277,341 ); - ent.v[ "angles" ] = ( 24, 235, 90 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1091,06, 430,268, -277,604 ); - ent.v[ "angles" ] = ( 24, 235, 90 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 636,547, 231,149, -332,02 ); - ent.v[ "angles" ] = ( 359,975, 55,1034, 91,425 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1401, -1323,83, -373,677 ); - ent.v[ "angles" ] = ( 270, 0, 89 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1295,36, -1323,34, -373,58 ); - ent.v[ "angles" ] = ( 270, 0, 89 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1190,94, -1323,39, -373,658 ); - ent.v[ "angles" ] = ( 270, 0, 89 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1059,58, -1323,44, -373,678 ); - ent.v[ "angles" ] = ( 270, 0, 89 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -953,73, -1323,76, -373,666 ); - ent.v[ "angles" ] = ( 270, 0, 89 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -848,474, -1324,44, -373,66 ); - ent.v[ "angles" ] = ( 270, 0, 89 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 619,348, -1938,51, -457,498 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 339,88, -1891,01, -433,067 ); - ent.v[ "angles" ] = ( 89, 270,001, -89,9989 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 686,176, -1938,96, -457,078 ); - ent.v[ "angles" ] = ( 89, 270,001, -89,9989 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 549,157, -1891,1, -433,069 ); - ent.v[ "angles" ] = ( 89, 270,001, -89,9989 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2261,22, -1066,16, -194,278 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2262,34, -1323,3, -192,139 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2260,8, -1577,67, -191,197 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1580,34, -222,843, -296,217 ); - ent.v[ "angles" ] = ( 283, 180, 180 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_streetlight_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2581,38, -487,787, -392,977 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 290 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_steam_vent_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2832,3, -1609,96, -382,623 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 82 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1218,17, -1092,32, -503,622 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_vending_machine_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1262,69, -1092,69, -519,761 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -255,66, -101,332, -432,744 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_vending_machine_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -300,179, -100,961, -448,882 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -158,842, -2216,4, -501,74 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_vending_machine_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -113,201, -2218,63, -515,77 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -317,577, -2215,4, -500,872 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1026,43, -1570,98, -605,728 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 46 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_vending_machine_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1175,3, -1111,01, -535,555 ); - ent.v[ "angles" ] = ( 0,1, 179,7, 0 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_vending_machine_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2570,42, -1548,69, -545,563 ); - ent.v[ "angles" ] = ( 359,997, 87,6996, 0 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2643,47, -1548,45, -529,867 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_toilet_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 893,05, -1461,17, -462,625 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_toilet_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 888,609, -1460,96, -461,897 ); - ent.v[ "angles" ] = ( 1,03627, 180,016, -90,9988 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_track_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1699,18, -18,1179, -355,246 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 360 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_track_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1721,15, -77,528, -352,249 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 360 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_track_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1930,53, -572,014, -367,493 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_track_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1871,13, -593,979, -370,49 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_track_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1074,34, -1232,78, -532,755 ); - ent.v[ "angles" ] = ( 3, 270, 0 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_track_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1129,64, -1231,78, -538,404 ); - ent.v[ "angles" ] = ( 4, 270, 0 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_track_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1191,3, -1234,61, -533,125 ); - ent.v[ "angles" ] = ( 4, 270, 0 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_track_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1129,79, -1228,98, -534,188 ); - ent.v[ "angles" ] = ( 4, 270, 0 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2544,58, -898,699, -282,916 ); - ent.v[ "angles" ] = ( 21,1594, 183,554, -33,5578 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ash_int" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2136,45, -627,396, -397,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 272 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1444,39, -78,3522, -384,191 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_vending_machine_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1444,7, -159,235, -402,968 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 182 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_track_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2342,2, -738,922, -496,764 ); - ent.v[ "angles" ] = ( 3, 270, 0 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_track_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2349,33, -711,544, -492,772 ); - ent.v[ "angles" ] = ( 3, 270, 0 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_track_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1609,01, 422,195, -346,768 ); - ent.v[ "angles" ] = ( 3, 270, 0 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_track_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1601,88, 394,817, -350,759 ); - ent.v[ "angles" ] = ( 3, 270, 0 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1270,66, -1570,35, -502,582 ); - ent.v[ "angles" ] = ( 270, 0, 179 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1230,86, -1570,82, -502,616 ); - ent.v[ "angles" ] = ( 270, 0, 179 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1190,87, -1571,22, -502,616 ); - ent.v[ "angles" ] = ( 270, 0, 179 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1151,05, -1571,77, -502,532 ); - ent.v[ "angles" ] = ( 270, 0, 179 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1110,99, -1570,03, -502,574 ); - ent.v[ "angles" ] = ( 270, 0, 179 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_distort_geo_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 377,908, -3726,57, -855,875 ); - ent.v[ "angles" ] = ( 6, 260, 0 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 698,904, -1126,88, -421,133 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 734,628, -1126,88, -451,54 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 792,364, -1067,78, -525,52 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 276 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 785,801, -1092,59, -524,76 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 276 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 170,519, -847,689, -504 ); - ent.v[ "angles" ] = ( 270, 0,149457, -0,149446 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 155,006, -870,964, -504 ); - ent.v[ "angles" ] = ( 270, 0,149457, -0,149446 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -383,779, -328,064, -504 ); - ent.v[ "angles" ] = ( 270, 0,149457, -0,149446 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -254,699, -534,128, -496 ); - ent.v[ "angles" ] = ( 270, 0,149457, -0,149446 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -276,346, -552,186, -496 ); - ent.v[ "angles" ] = ( 270, 0,149457, -0,149446 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_vending_machine_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2481,91, -760,599, -530,059 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2113,51, -729,266, -600 ); - ent.v[ "angles" ] = ( 270,007, 298,722, 61,4347 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2181,1, -1466,16, -591,875 ); - ent.v[ "angles" ] = ( 270,007, 298,722, 61,4347 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2159,9, -1486,1, -591,875 ); - ent.v[ "angles" ] = ( 270,007, 298,722, 61,4347 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2863,36, -1345,01, -591,875 ); - ent.v[ "angles" ] = ( 270,007, 298,722, 61,4347 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2457,01, -903,995, -592 ); - ent.v[ "angles" ] = ( 270,007, 298,722, 61,4347 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2023,99, -1015,43, -592 ); - ent.v[ "angles" ] = ( 270,007, 298,722, 61,4347 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2022,57, -985,488, -592 ); - ent.v[ "angles" ] = ( 270,007, 298,722, 61,4347 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -231,986, -261,663, -504 ); - ent.v[ "angles" ] = ( 270,007, 298,722, 61,4347 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 116,416, 603,494, -416,801 ); - ent.v[ "angles" ] = ( 270,007, 298,722, 61,4347 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 96,4017, 584,729, -417,975 ); - ent.v[ "angles" ] = ( 270,007, 298,722, 61,4347 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2244,72, -981,41, -496 ); - ent.v[ "angles" ] = ( 270,007, 298,722, 61,4347 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -561,645, -2287,94, -563,875 ); - ent.v[ "angles" ] = ( 270,007, 298,722, 61,4347 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 432,644, -2222,81, -563,875 ); - ent.v[ "angles" ] = ( 270,007, 298,722, 61,4347 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1027,61, -2383,18, -563,875 ); - ent.v[ "angles" ] = ( 270,007, 298,722, 61,4347 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2013,83, -173,206, -504,754 ); - ent.v[ "angles" ] = ( 270,007, 298,722, 61,4347 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2038,67, -110,76, -486,358 ); - ent.v[ "angles" ] = ( 270,007, 298,722, 61,4347 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2268,9, -992,821, -496 ); - ent.v[ "angles" ] = ( 270,007, 298,722, 61,4347 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1351,97, -399,49, -403,237 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1358,33, -399,875, -450,106 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -755,381, -530,828, -302,55 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -668,686, -531,203, -389,889 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 457,045, -2244,9, -553,902 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 129,4 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -394,461, -795,355, -483,498 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -379,176, -712,155, -627,745 ); - ent.v[ "angles" ] = ( 270, 0,149457, -0,149446 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 233,463, -1668,95, -615,494 ); - ent.v[ "angles" ] = ( 270, 0,149457, -0,149446 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 227,263, -1650,32, -616,036 ); - ent.v[ "angles" ] = ( 270, 0,149457, -0,149446 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_grnd_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1146,86, -945,565, -496 ); - ent.v[ "angles" ] = ( 270, 0,149457, -0,149446 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_splat_wall_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1234,59, -1008,19, -476,18 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ball_falling_tunnel" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 864,236, 573,493, -203,77 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_magma_ball_falling_tunnel" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 781,09, 602,449, -168,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -63; -} diff --git a/Multiplayer Maps/mp_magma/maps/mp/mp_magma.gsc b/Multiplayer Maps/mp_magma/maps/mp/mp_magma.gsc deleted file mode 100644 index c5a92c3..0000000 --- a/Multiplayer Maps/mp_magma/maps/mp/mp_magma.gsc +++ /dev/null @@ -1,283 +0,0 @@ -#include maps/mp/gametypes/_weaponobjects; -#include maps/mp/gametypes/_spawning; -#include maps/mp/_compass; -#include common_scripts/utility; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - level.overrideplayerdeathwatchtimer = ::leveloverridetime; - level thread spawnkilltrigger(); - maps/mp/mp_magma_fx::main(); - precachemodel( "collision_clip_64x64x10" ); - precachemodel( "collision_physics_64x64x10" ); - precachemodel( "collision_physics_256x256x10" ); - precachemodel( "collision_physics_128x128x10" ); - precachemodel( "collision_physics_64x64x10" ); - precachemodel( "p6_mag_k_rail_barrier" ); - precachemodel( "p6_mag_rocks_medium_02" ); - maps/mp/_load::main(); - maps/mp/mp_magma_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_magma" ); - setdvar( "compassmaxrange", "2100" ); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - barrier1 = spawn( "script_model", ( 235,49, 907,91, -395,97 ) ); - barrier1.angles = ( 2,96968, 263,594, -1,33952 ); - barrier2 = spawn( "script_model", ( 245,37, 837,028, -401,885 ) ); - barrier2.angles = ( 6,5989, 268,994, -0,115603 ); - barrier1 setmodel( "p6_mag_k_rail_barrier" ); - barrier2 setmodel( "p6_mag_k_rail_barrier" ); - rock1 = spawn( "script_model", ( 271,92, 893,99, -494 ) ); - rock1.angles = vectorScale( ( 1, 0, 0 ), 132 ); - rock2 = spawn( "script_model", ( 393,42, 895,49, -494 ) ); - rock2.angles = vectorScale( ( 1, 0, 0 ), 132 ); - rock3 = spawn( "script_model", ( 477,92, 882,49, -509 ) ); - rock3.angles = vectorScale( ( 1, 0, 0 ), 132 ); - rock1 setmodel( "p6_mag_rocks_medium_02" ); - rock2 setmodel( "p6_mag_rocks_medium_02" ); - rock3 setmodel( "p6_mag_rocks_medium_02" ); - spawncollision( "collision_clip_64x64x10", "collider", ( 234, 907, -391,5 ), ( 356,785, 83,5728, -83,5116 ) ); - spawncollision( "collision_clip_64x64x10", "collider", ( 243,5, 835,5, -399 ), ( 353,903, 88,8464, -83,1852 ) ); - spawncollision( "collision_clip_64x64x10", "collider", ( 254, 902,5, -395 ), ( 0,42985, 353,514, 3,77564 ) ); - spawncollision( "collision_clip_64x64x10", "collider", ( 264, 835,5, -401,5 ), ( 0,0466956, 359,602, 6,69984 ) ); - spawncollision( "collision_clip_64x64x10", "collider", ( 247,5, 831,5, -363 ), ( 353,903, 88,8464, -83,1852 ) ); - spawncollision( "collision_clip_64x64x10", "collider", ( 237,5, 904,5, -357,5 ), ( 356,785, 83,5728, -83,5116 ) ); - spawncollision( "collision_physics_64x64x10", "collider", ( 234, 907, -391,5 ), ( 356,785, 83,5728, -83,5116 ) ); - spawncollision( "collision_physics_64x64x10", "collider", ( 243,5, 835,5, -399 ), ( 353,903, 88,8464, -83,1852 ) ); - spawncollision( "collision_physics_256x256x10", "collider", ( -459, 357,5, -578,5 ), ( 270, 183,902, 86,0983 ) ); - spawncollision( "collision_physics_128x128x10", "collider", ( -267, 233,5, -514 ), vectorScale( ( 1, 0, 0 ), 270 ) ); - spawncollision( "collision_physics_128x128x10", "collider", ( -669,5, 216, -514 ), vectorScale( ( 1, 0, 0 ), 270 ) ); - spawncollision( "collision_physics_64x64x10", "collider", ( -748, 95, -483,5 ), ( 270, 270,2, 1,43 ) ); - level.levelkillbrushes = []; - maps/mp/gametypes/_spawning::level_use_unified_spawning( 1 ); - level.remotemotarviewup = 20; - registerclientfield( "scriptmover", "police_car_lights", 1, 1, "int" ); - precacheitem( "lava_mp" ); - level thread destructible_lights(); - level.overrideweaponfunc = ::overrideweaponfunc; - level.deleteonkillbrushoverride = ::deleteonkillbrushoverride; - level thread lava_trigger_init(); - level.onplayerkilledextraunthreadedcbs[ level.onplayerkilledextraunthreadedcbs.size ] = ::checkcorpseinlava; -} - -lava_trigger_init() -{ - wait 3; - killbrushes = getentarray( "trigger_hurt", "classname" ); - i = 0; - while ( i < killbrushes.size ) - { - if ( isDefined( killbrushes[ i ].script_noteworthy ) && killbrushes[ i ].script_noteworthy == "lava" ) - { - level.levelkillbrushes[ level.levelkillbrushes.size ] = killbrushes[ i ]; - } - i++; - } -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2600", reset_dvars ); -} - -overrideweaponfunc( sweapon, script_noteworthy ) -{ - if ( isDefined( script_noteworthy ) && script_noteworthy == "lava" ) - { - sweapon = "lava_mp"; - } - return sweapon; -} - -destructible_lights() -{ - wait 0,05; - destructibles = getentarray( "destructible", "targetname" ); - _a150 = destructibles; - _k150 = getFirstArrayKey( _a150 ); - while ( isDefined( _k150 ) ) - { - destructible = _a150[ _k150 ]; - if ( destructible.destructibledef == "veh_t6_dlc_police_car_jp_destructible" ) - { - destructible thread destructible_think( "police_car_lights" ); - destructible setclientfield( "police_car_lights", 1 ); - } - _k150 = getNextArrayKey( _a150, _k150 ); - } -} - -destructible_think( clientfield ) -{ - self waittill_any( "death", "destructible_base_piece_death" ); - self setclientfield( clientfield, 0 ); -} - -checkcorpseinlava( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) -{ - if ( !isDefined( einflictor ) || !isDefined( einflictor.script_noteworthy ) ) - { - return; - } - if ( einflictor.script_noteworthy != "lava" ) - { - return; - } - if ( !isDefined( self.body ) ) - { - return; - } - playfxontag( level._effect[ "fx_fire_torso" ], self.body, "J_Spine4" ); - playfxontag( level._effect[ "fx_fire_arm_left" ], self.body, "J_Elbow_LE" ); - playfxontag( level._effect[ "fx_fire_arm_right" ], self.body, "J_Elbow_RI" ); - playfxontag( level._effect[ "fx_fire_leg_left" ], self.body, "J_Hip_LE" ); - playfxontag( level._effect[ "fx_fire_leg_right" ], self.body, "J_Hip_RI" ); -} - -leveloverridetime( defaulttime ) -{ - if ( self isinlava() ) - { - return getdvarfloatdefault( "scr_lavaPlayerDeathWatchTime", 0,5 ); - } - return defaulttime; -} - -isinlava() -{ - if ( !isDefined( self.lastattacker ) || !isDefined( self.lastattacker.script_noteworthy ) ) - { - return 0; - } - if ( self.lastattacker.script_noteworthy != "lava" ) - { - return 0; - } - return 1; -} - -testkillbrushonstationary( lavaarray, killbrusharray, player, watcher ) -{ - player endon( "disconnect" ); - self endon( "death" ); - self waittill( "stationary" ); - wait 0,1; - i = 0; - while ( i < lavaarray.size ) - { - if ( self istouching( lavaarray[ i ] ) ) - { - playfx( level._effect[ "fx_fire_torso" ], self.origin ); - watcher maps/mp/gametypes/_weaponobjects::waitanddetonate( self, 0, undefined, "lava_mp" ); - return; - } - i++; - } - i = 0; - while ( i < killbrusharray.size ) - { - if ( self istouching( killbrusharray[ i ] ) ) - { - if ( self.origin[ 2 ] > player.origin[ 2 ] ) - { - return; - } - else - { - if ( isDefined( self ) ) - { - self delete(); - } - return; - } - i++; - } - } -} - -deleteonkillbrushoverride( player, watcher ) -{ - player endon( "disconnect" ); - self endon( "death" ); - self endon( "stationary" ); - trigger_hurtarray = getentarray( "trigger_hurt", "classname" ); - lavaarray = []; - killbrusharray = []; - i = 0; - while ( i < trigger_hurtarray.size ) - { - if ( isDefined( trigger_hurtarray[ i ].script_noteworthy ) && trigger_hurtarray[ i ].script_noteworthy == "lava" ) - { - lavaarray[ lavaarray.size ] = trigger_hurtarray[ i ]; - i++; - continue; - } - else - { - killbrusharray[ killbrusharray.size ] = trigger_hurtarray[ i ]; - } - i++; - } - if ( lavaarray.size < 1 ) - { - return; - } - self thread testkillbrushonstationary( lavaarray, killbrusharray, player, watcher ); - while ( 1 ) - { - i = 0; - while ( i < lavaarray.size ) - { - if ( self istouching( lavaarray[ i ] ) ) - { - wait 0,05; - playfx( level._effect[ "fx_fire_torso" ], self.origin ); - watcher maps/mp/gametypes/_weaponobjects::waitanddetonate( self, 0, undefined, "lava_mp" ); - return; - } - i++; - } - i = 0; - while ( i < killbrusharray.size ) - { - if ( self istouching( killbrusharray[ i ] ) ) - { - if ( self.origin[ 2 ] > player.origin[ 2 ] ) - { - break; - } - else - { - if ( isDefined( self ) ) - { - self delete(); - } - return; - } - i++; - } - } - wait 0,1; - } -} - -spawnkilltrigger() -{ - trigger = spawn( "trigger_radius", ( 2132, -1692, -708 ), 0, 250, 100 ); - while ( 1 ) - { - trigger waittill( "trigger", player ); - player dodamage( player.health * 2, trigger.origin, trigger, trigger, "none", "MOD_SUICIDE", 0, "lava_mp" ); - } -} diff --git a/Multiplayer Maps/mp_magma/maps/mp/mp_magma_amb.gsc b/Multiplayer Maps/mp_magma/maps/mp/mp_magma_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_magma/maps/mp/mp_magma_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_magma/maps/mp/mp_magma_fx.gsc b/Multiplayer Maps/mp_magma/maps/mp/mp_magma_fx.gsc deleted file mode 100644 index dcca403..0000000 --- a/Multiplayer Maps/mp_magma/maps/mp/mp_magma_fx.gsc +++ /dev/null @@ -1,103 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); -#using_animtree( "fxanim_props_dlc" ); - -main() -{ - precache_fxanim_props(); - precache_fxanim_props_dlc(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_magma_fx::main(); -} - -precache_scripted_fx() -{ -} - -precache_createfx_fx() -{ - level._effect[ "fx_mp_magma_ash_ember_lg" ] = loadfx( "maps/mp_maps/fx_mp_magma_ash_ember_lg" ); - level._effect[ "fx_mp_magma_ash_ember_detail" ] = loadfx( "maps/mp_maps/fx_mp_magma_ash_ember_detail" ); - level._effect[ "fx_mp_magma_ash_ember_door" ] = loadfx( "maps/mp_maps/fx_mp_magma_ash_ember_door" ); - level._effect[ "fx_mp_magma_ash_int" ] = loadfx( "maps/mp_maps/fx_mp_magma_ash_int" ); - level._effect[ "fx_mp_magma_ash_ground" ] = loadfx( "maps/mp_maps/fx_mp_magma_ash_ground" ); - level._effect[ "fx_mp_magma_lava_edge_fire_100" ] = loadfx( "maps/mp_maps/fx_mp_magma_lava_edge_fire_100" ); - level._effect[ "fx_mp_magma_lava_edge_fire_200_dist" ] = loadfx( "maps/mp_maps/fx_mp_magma_lava_edge_fire_200_dist" ); - level._effect[ "fx_mp_magma_lava_edge_fire_50" ] = loadfx( "maps/mp_maps/fx_mp_magma_lava_edge_fire_50" ); - level._effect[ "fx_mp_magma_ball_falling_sky" ] = loadfx( "maps/mp_maps/fx_mp_magma_ball_falling_sky" ); - level._effect[ "fx_mp_magma_ball_falling_sky_wall" ] = loadfx( "maps/mp_maps/fx_mp_magma_ball_falling_sky_wall" ); - level._effect[ "fx_mp_magma_ball_falling_tunnel" ] = loadfx( "maps/mp_maps/fx_mp_magma_ball_falling_tunnel" ); - level._effect[ "fx_mp_magma_ball_falling_vista" ] = loadfx( "maps/mp_maps/fx_mp_magma_ball_falling_vista" ); - level._effect[ "fx_mp_magma_splat_wall_fire" ] = loadfx( "maps/mp_maps/fx_mp_magma_splat_wall_fire" ); - level._effect[ "fx_mp_magma_splat_grnd_fire" ] = loadfx( "maps/mp_maps/fx_mp_magma_splat_grnd_fire" ); - level._effect[ "fx_mp_magma_volcano_smoke" ] = loadfx( "maps/mp_maps/fx_mp_magma_volcano_smoke" ); - level._effect[ "fx_mp_magma_volcano_erupt" ] = loadfx( "maps/mp_maps/fx_mp_magma_volcano_erupt" ); - level._effect[ "fx_mp_magma_distort_geo_lg" ] = loadfx( "maps/mp_maps/fx_mp_magma_distort_geo_lg" ); - level._effect[ "fx_mp_magma_distort_geo_md" ] = loadfx( "maps/mp_maps/fx_mp_magma_distort_geo_md" ); - level._effect[ "fx_mp_magma_distort_geo_sm" ] = loadfx( "maps/mp_maps/fx_mp_magma_distort_geo_sm" ); - level._effect[ "fx_mp_magma_fire_med" ] = loadfx( "maps/mp_maps/fx_mp_magma_fire_med" ); - level._effect[ "fx_mp_magma_fire_lg" ] = loadfx( "maps/mp_maps/fx_mp_magma_fire_lg" ); - level._effect[ "fx_mp_magma_fire_xlg" ] = loadfx( "maps/mp_maps/fx_mp_magma_fire_xlg" ); - level._effect[ "fx_mp_elec_spark_burst_xsm_thin" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin" ); - level._effect[ "fx_mp_elec_spark_burst_xsm_thin_runner" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin_runner" ); - level._effect[ "fx_mp_elec_spark_burst_md_runner" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_md_runner" ); - level._effect[ "fx_mp_magma_smk_whisp" ] = loadfx( "maps/mp_maps/fx_mp_magma_smk_whisp" ); - level._effect[ "fx_mp_magma_smk_smolder" ] = loadfx( "maps/mp_maps/fx_mp_magma_smk_smolder" ); - level._effect[ "fx_mp_magma_smk_smolder_med" ] = loadfx( "maps/mp_maps/fx_mp_magma_smk_smolder_med" ); - level._effect[ "fx_mp_magma_smk_smolder_low" ] = loadfx( "maps/mp_maps/fx_mp_magma_smk_smolder_low" ); - level._effect[ "fx_mp_magma_smk_plume_md_vista" ] = loadfx( "maps/mp_maps/fx_mp_magma_smk_plume_md_vista" ); - level._effect[ "fx_mp_magma_smk_smolder_vista" ] = loadfx( "maps/mp_maps/fx_mp_magma_smk_smolder_vista" ); - level._effect[ "fx_mp_magma_smk_smolder_vista_lt" ] = loadfx( "maps/mp_maps/fx_mp_magma_smk_smolder_vista_lt" ); - level._effect[ "fx_mp_magma_steam_ocean" ] = loadfx( "maps/mp_maps/fx_mp_magma_steam_ocean" ); - level._effect[ "fx_mp_magma_steam_ocean_cool" ] = loadfx( "maps/mp_maps/fx_mp_magma_steam_ocean_cool" ); - level._effect[ "fx_mp_magma_steam_ocean_md" ] = loadfx( "maps/mp_maps/fx_mp_magma_steam_ocean_md" ); - level._effect[ "fx_mp_magma_smk_steam_vista" ] = loadfx( "maps/mp_maps/fx_mp_magma_smk_steam_vista" ); - level._effect[ "fx_mp_magma_steam_fish" ] = loadfx( "maps/mp_maps/fx_mp_magma_steam_fish" ); - level._effect[ "fx_mp_magma_steam_vent_w" ] = loadfx( "maps/mp_maps/fx_mp_magma_steam_vent_w" ); - level._effect[ "fx_mp_magma_steam_vent_int" ] = loadfx( "maps/mp_maps/fx_mp_magma_steam_vent_int" ); - level._effect[ "fx_mp_magma_smk_volcano_sm" ] = loadfx( "maps/mp_maps/fx_mp_magma_smk_volcano_sm" ); - level._effect[ "fx_lf_mp_magma_sun1" ] = loadfx( "lens_flares/fx_lf_mp_magma_sun1" ); - level._effect[ "fx_lf_mp_magma_volcano" ] = loadfx( "lens_flares/fx_lf_mp_magma_volcano" ); - level._effect[ "fx_mp_distant_cloud_vista_lg" ] = loadfx( "maps/mp_maps/fx_mp_magma_volcano_fog" ); - level._effect[ "fx_drone_light_yellow" ] = loadfx( "light/fx_drone_light_yellow" ); - level._effect[ "fx_light_mag_ceiling_light" ] = loadfx( "light/fx_light_mag_ceiling_light" ); - level._effect[ "fx_light_recessed_cool_sm_soft" ] = loadfx( "light/fx_light_recessed_cool_sm_soft" ); - level._effect[ "fx_light_streetlight_glow_cool" ] = loadfx( "light/fx_light_streetlight_glow_cool" ); - level._effect[ "fx_mp_light_police_car_japan" ] = loadfx( "maps/mp_maps/fx_mp_light_police_car_japan" ); - level._effect[ "fx_light_stair_blue" ] = loadfx( "light/fx_light_stair_blue" ); - level._effect[ "fx_mp_magma_light_bench_blue" ] = loadfx( "maps/mp_maps/fx_mp_magma_light_bench_blue" ); - level._effect[ "fx_light_recessed_purple" ] = loadfx( "light/fx_light_recessed_purple" ); - level._effect[ "fx_mp_magma_light_recessed_flat" ] = loadfx( "maps/mp_maps/fx_mp_magma_light_recessed_flat" ); - level._effect[ "fx_light_flour_glow_v_shape_cool" ] = loadfx( "light/fx_light_flour_glow_v_shape_cool" ); - level._effect[ "fx_mp_magma_vending_machine_lg" ] = loadfx( "maps/mp_maps/fx_mp_magma_vending_machine_lg" ); - level._effect[ "fx_mp_magma_vending_machine_med" ] = loadfx( "maps/mp_maps/fx_mp_magma_vending_machine_med" ); - level._effect[ "fx_mp_magma_toilet_sign" ] = loadfx( "maps/mp_maps/fx_mp_magma_toilet_sign" ); - level._effect[ "fx_mp_magma_track_light" ] = loadfx( "maps/mp_maps/fx_mp_magma_track_light" ); - level._effect[ "fx_fire_torso" ] = loadfx( "fire/fx_fire_ai_torso_magma" ); - level._effect[ "fx_fire_arm_left" ] = loadfx( "fire/fx_fire_ai_arm_left_magma" ); - level._effect[ "fx_fire_arm_right" ] = loadfx( "fire/fx_fire_ai_arm_right_magma" ); - level._effect[ "fx_fire_leg_left" ] = loadfx( "fire/fx_fire_ai_leg_left_magma" ); - level._effect[ "fx_fire_leg_right" ] = loadfx( "fire/fx_fire_ai_leg_right_magma" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "sparking_wires_med" ] = %fxanim_gp_wirespark_med_anim; - level.scr_anim[ "fxanim_props" ][ "sparking_wires_long" ] = %fxanim_gp_wirespark_long_anim; - level.scr_anim[ "fxanim_props" ][ "japan_sign_square" ] = %fxanim_mp_magma_japan_sign_square_anim; - level.scr_anim[ "fxanim_props" ][ "squid_sign_eyes_01" ] = %fxanim_mp_magma_squid_sign_eyes_01_anim; - level.scr_anim[ "fxanim_props" ][ "squid_sign_eyes_02" ] = %fxanim_mp_magma_squid_sign_eyes_02_anim; - level.scr_anim[ "fxanim_props" ][ "japan_sign_fish" ] = %fxanim_mp_magma_japan_sign_fish_anim; -} - -precache_fxanim_props_dlc() -{ - level.scr_anim[ "fxanim_props_dlc" ][ "hanging_lantern_01" ] = %fxanim_mp_magma_hanging_lantern_01_anim; - level.scr_anim[ "fxanim_props_dlc" ][ "hanging_lantern_02" ] = %fxanim_mp_magma_hanging_lantern_02_anim; - level.scr_anim[ "fxanim_props_dlc" ][ "train_wire_01" ] = %fxanim_mp_magma_train_wire_01_anim; - level.scr_anim[ "fxanim_props_dlc" ][ "train_wire_02" ] = %fxanim_mp_magma_train_wire_02_anim; - level.scr_anim[ "fxanim_props_dlc" ][ "train_wire_03" ] = %fxanim_mp_magma_train_wire_03_anim; - level.scr_anim[ "fxanim_props_dlc" ][ "sushi_conveyor" ] = %fxanim_mp_magma_sushi_conveyor_anim; -} diff --git a/Multiplayer Maps/mp_meltdown/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_meltdown/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_meltdown/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_meltdown/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_meltdown/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_meltdown/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_meltdown/maps/mp/createart/mp_meltdown_art.gsc b/Multiplayer Maps/mp_meltdown/maps/mp/createart/mp_meltdown_art.gsc deleted file mode 100644 index b49b70d..0000000 --- a/Multiplayer Maps/mp_meltdown/maps/mp/createart/mp_meltdown_art.gsc +++ /dev/null @@ -1,18 +0,0 @@ - -main() -{ - level.tweakfile = 1; - setdvar( "visionstore_glowTweakEnable", "0" ); - setdvar( "visionstore_glowTweakRadius0", "5" ); - setdvar( "visionstore_glowTweakRadius1", "" ); - setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); - setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); - setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); - setdvar( "visionstore_glowTweakBloomIntensity1", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); - visionsetnaked( "mp_meltdown", 1 ); - setdvar( "r_lightGridEnableTweaks", 1 ); - setdvar( "r_lightGridIntensity", 1 ); - setdvar( "r_lightGridContrast", 0 ); -} diff --git a/Multiplayer Maps/mp_meltdown/maps/mp/createfx/mp_meltdown_fx.gsc b/Multiplayer Maps/mp_meltdown/maps/mp/createfx/mp_meltdown_fx.gsc deleted file mode 100644 index 483a215..0000000 --- a/Multiplayer Maps/mp_meltdown/maps/mp/createfx/mp_meltdown_fx.gsc +++ /dev/null @@ -1,2589 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower" ); - ent.v[ "origin" ] = ( -238,789, 1703,29, 390,252 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); - ent.v[ "origin" ] = ( 1510,04, 4090,67, -140 ); - ent.v[ "angles" ] = ( 2,84124, 163,841, -0,400075 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 1450,14, 4421,73, -138,744 ); - ent.v[ "angles" ] = ( 357,96, 178,986, 0,275462 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_meltdown_sun1" ); - ent.v[ "origin" ] = ( 9906,81, -26068,5, 6893,41 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower" ); - ent.v[ "origin" ] = ( -64,1019, 1658,64, 1523,65 ); - ent.v[ "angles" ] = ( 356, 176, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); - ent.v[ "origin" ] = ( -28,178, 2362,37, 202,125 ); - ent.v[ "angles" ] = ( 13,9832, 248,09, 0,642511 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); - ent.v[ "origin" ] = ( -215,89, 2393,49, 197,125 ); - ent.v[ "angles" ] = ( 16,0367, 266,441, -0,475019 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); - ent.v[ "origin" ] = ( 440,583, 1906,32, 195,125 ); - ent.v[ "angles" ] = ( 15,4495, 204,378, 4,31785 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); - ent.v[ "origin" ] = ( 334,9, 2096,3, 201,125 ); - ent.v[ "angles" ] = ( 11,5226, 215,972, 1,56318 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); - ent.v[ "origin" ] = ( 149,167, 2275,99, 203 ); - ent.v[ "angles" ] = ( 10,9861, 236,944, -0,530442 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); - ent.v[ "origin" ] = ( -437,23, 2367,23, 191,125 ); - ent.v[ "angles" ] = ( 12,0831, 287,847, -1,11472 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); - ent.v[ "origin" ] = ( 439,715, 1472,3, 192,125 ); - ent.v[ "angles" ] = ( 14,9925, 161,068, 0,430335 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); - ent.v[ "origin" ] = ( 368,633, 1340,01, 195,125 ); - ent.v[ "angles" ] = ( 16,5638, 145,376, -4,13018 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); - ent.v[ "origin" ] = ( -652,51, 2263,27, 202 ); - ent.v[ "angles" ] = ( 11,1192, 305,063, 0,422903 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); - ent.v[ "origin" ] = ( 220,939, 1160,41, 196 ); - ent.v[ "angles" ] = ( 15,9893, 131,08, 0,608138 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); - ent.v[ "origin" ] = ( 79,9473, 1068,62, 187 ); - ent.v[ "angles" ] = ( 16,0195, 115,029, 0,701384 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); - ent.v[ "origin" ] = ( -78,513, 1015,27, 187,125 ); - ent.v[ "angles" ] = ( 14,0173, 101, -0,982402 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); - ent.v[ "origin" ] = ( -263,352, 992,556, 192,125 ); - ent.v[ "angles" ] = ( 14,9981, 87,9662, -0,215232 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); - ent.v[ "origin" ] = ( -440,524, 1026,24, 193,125 ); - ent.v[ "angles" ] = ( 12,9678, 70,1048, 0,922636 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); - ent.v[ "origin" ] = ( -761,948, 1230,87, 199 ); - ent.v[ "angles" ] = ( 10,9932, 41,9725, -0,107821 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); - ent.v[ "origin" ] = ( -778,574, 2148,34, 199 ); - ent.v[ "angles" ] = ( 11,9986, 319,979, -0,159912 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); - ent.v[ "origin" ] = ( -881,06, 1970,77, 195 ); - ent.v[ "angles" ] = ( 10,8461, 339,182, 1,75937 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); - ent.v[ "origin" ] = ( -937,289, 1724,15, 193 ); - ent.v[ "angles" ] = ( 12,998, 358,974, -0,23086 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); - ent.v[ "origin" ] = ( -860,88, 1367,33, 199 ); - ent.v[ "angles" ] = ( 14,979, 27,1056, 0,803426 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_pipe_spill_ocean" ); - ent.v[ "origin" ] = ( 2258,74, 1595,08, -166,13 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_pipe_spill_ocean" ); - ent.v[ "origin" ] = ( 2256,42, 1694,89, -163,962 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_pipe_spill_ocean" ); - ent.v[ "origin" ] = ( 2255,17, 1798,41, -166,797 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 2 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_surface_heat_md" ); - ent.v[ "origin" ] = ( 2068,62, 2628,85, 42,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_surface_heat_lg" ); - ent.v[ "origin" ] = ( -200,453, 4382,97, -217 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_surface_heat_lg" ); - ent.v[ "origin" ] = ( -112,559, 4173,8, -223 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_surface_heat_lg" ); - ent.v[ "origin" ] = ( -241,977, 4006,1, -228 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_md" ); - ent.v[ "origin" ] = ( 2852,13, 1444,52, -252,163 ); - ent.v[ "angles" ] = ( 359, 2, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -12,6; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_md" ); - ent.v[ "origin" ] = ( 2852,13, 1927,81, -254,316 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 360 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -14,4; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_md" ); - ent.v[ "origin" ] = ( 2852,13, 967,481, -253,435 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 2 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -13,33; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_md" ); - ent.v[ "origin" ] = ( 2852,13, 2461,63, -254,337 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 360 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_surface_heat_md" ); - ent.v[ "origin" ] = ( 1728,78, 2631,02, 45,125 ); - ent.v[ "angles" ] = ( 271,457, 10,4739, 21,476 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_surface_heat_lg" ); - ent.v[ "origin" ] = ( 2635,72, 1956,53, -239,533 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 272 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_surface_heat_lg" ); - ent.v[ "origin" ] = ( 2630,46, 1431,73, -234,334 ); - ent.v[ "angles" ] = ( 271,005, 89,5161, -89,4293 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_surface_heat_md" ); - ent.v[ "origin" ] = ( 1736,89, 752,427, 50,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_surface_heat_md" ); - ent.v[ "origin" ] = ( 2064,18, 755,876, 45,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower" ); - ent.v[ "origin" ] = ( -146,025, -2951,02, 1681 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 193 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_md" ); - ent.v[ "origin" ] = ( 2852,13, 1185,88, -252,701 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 360 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -14,4; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_md" ); - ent.v[ "origin" ] = ( 2852,13, 2201,12, -254,324 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 357 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -13,33; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_md" ); - ent.v[ "origin" ] = ( 2852,13, 1684,99, -254,501 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 360 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_md" ); - ent.v[ "origin" ] = ( 2521,78, 2884,14, -256,464 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 46 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = 11,11; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 173,963, 122,428, -35,0915 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 173,048, 321,12, -15,2158 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 175,276, 329,018, 12,6183 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_tunnel" ); - ent.v[ "origin" ] = ( 1460,75, 773,153, 141,259 ); - ent.v[ "angles" ] = ( 284, 359, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_tunnel" ); - ent.v[ "origin" ] = ( 1506,27, 2534,3, 152,469 ); - ent.v[ "angles" ] = ( 273,487, 345,606, 9,43205 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 1330,05, 2974,69, 92,4215 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 1353,48, 3006,71, 107,217 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_int_top" ); - ent.v[ "origin" ] = ( -273,966, 1669,58, 432 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_tunnel_lng" ); - ent.v[ "origin" ] = ( 1536,64, 2541,52, 227,89 ); - ent.v[ "angles" ] = ( 300,447, 354,612, 1,91846 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_tunnel_lng" ); - ent.v[ "origin" ] = ( 1515,01, 754,879, 254,526 ); - ent.v[ "angles" ] = ( 295,408, 355,104, 3,89016 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_md" ); - ent.v[ "origin" ] = ( 2540,89, 526,966, -252,871 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 313 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -13,33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_tunnel_lng" ); - ent.v[ "origin" ] = ( -247,439, 3228,58, -86,1382 ); - ent.v[ "angles" ] = ( 322,147, 1,08707, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_md" ); - ent.v[ "origin" ] = ( 2703,33, 2702,6, -254,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 44 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -13,33; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_md" ); - ent.v[ "origin" ] = ( 2248,2, 3157,73, -254,552 ); - ent.v[ "angles" ] = ( 359,269, 45, -1,68214 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -12,6; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 62,444, 317,355, 2,12501 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 1163,29, 328,425, 1,60033 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 1160,36, 3061,59, 8,01865 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_md" ); - ent.v[ "origin" ] = ( 2338,62, 324,698, -254,098 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 315 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -14,4; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_md" ); - ent.v[ "origin" ] = ( 2715,29, 701,367, -252,68 ); - ent.v[ "angles" ] = ( 359,331, 314, 0,743289 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -12,6; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_md" ); - ent.v[ "origin" ] = ( 1780,44, -791,725, -251,274 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 331 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -14,4; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_md" ); - ent.v[ "origin" ] = ( 1579,28, -1301,22, -254,706 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 321 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -13,33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 492,648, 4328,35, 139,016 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 554,563, 4339,13, 138,994 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 843,435, 4366,28, -140 ); - ent.v[ "angles" ] = ( 356,953, 184,993, -0,107418 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -251,936, 3846,3, -21,234 ); - ent.v[ "angles" ] = ( 0,998782, 26, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 8,43061, 4507,15, -66,4063 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 280 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -42,9076, 3884,86, -88,3416 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 72 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_reactor_glw_blue" ); - ent.v[ "origin" ] = ( -125,609, 4204,55, -62,2267 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_reactor_glw_blue" ); - ent.v[ "origin" ] = ( -296,751, 4026,51, -65,2027 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 273 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( 458,255, 414,337, 41,283 ); - ent.v[ "angles" ] = ( 12, 89, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_pak_tower_fire_flareup" ); - ent.v[ "origin" ] = ( -2522,37, -1420,66, 1135,59 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_white_ribbon_sm" ); - ent.v[ "origin" ] = ( -116,505, 2281,07, -56,0053 ); - ent.v[ "angles" ] = ( 302,701, 119,927, -111,036 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_white_ribbon_sm" ); - ent.v[ "origin" ] = ( -113,542, 2273,42, -56,9997 ); - ent.v[ "angles" ] = ( 280,286, 298,824, 60,7822 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_pipe_md" ); - ent.v[ "origin" ] = ( 1358,75, 861,347, -67 ); - ent.v[ "angles" ] = ( 273, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_pipe_md" ); - ent.v[ "origin" ] = ( 2168,52, 453,584, -136,875 ); - ent.v[ "angles" ] = ( 275,657, 127,587, 120,513 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_pipe_md" ); - ent.v[ "origin" ] = ( 2158,68, 2968,16, -135,875 ); - ent.v[ "angles" ] = ( 276,082, 260,573, 99,4797 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 48,4325, 3085,08, -18,1431 ); - ent.v[ "angles" ] = ( 17,9745, 183,154, 0,974222 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); - ent.v[ "origin" ] = ( 2209,23, 1151,27, -118 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); - ent.v[ "origin" ] = ( 2204,03, 1312,2, -118 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); - ent.v[ "origin" ] = ( 2204,42, 2080,28, -115 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); - ent.v[ "origin" ] = ( 2203,74, 2239,66, -116 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); - ent.v[ "origin" ] = ( 2204,03, 2400,8, -115 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); - ent.v[ "origin" ] = ( 2205,96, 989,217, -115 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); - ent.v[ "origin" ] = ( 2206,18, 1473,58, -115 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 46,2152, 3123,58, -19,095 ); - ent.v[ "angles" ] = ( 17,9546, 175,795, -1,29841 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 47,4133, 3123,03, 21,7425 ); - ent.v[ "angles" ] = ( 332,042, 176,603, 1,594 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 50,6105, 3084,51, 21,4462 ); - ent.v[ "angles" ] = ( 332,042, 183,397, -1,59399 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 46,7455, 3410,03, 21,8109 ); - ent.v[ "angles" ] = ( 332,042, 176,603, 1,594 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 50,3758, 3373,47, 23,5146 ); - ent.v[ "angles" ] = ( 332,042, 183,397, -1,59399 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 46,2486, 3412,54, -19,0266 ); - ent.v[ "angles" ] = ( 17,9745, 176,846, -0,97422 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 48,1859, 3372,04, -18,0747 ); - ent.v[ "angles" ] = ( 17,9745, 183,154, 0,974222 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 1613,72, 1,84919, -145,7 ); - ent.v[ "angles" ] = ( 271, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); - ent.v[ "origin" ] = ( 2360,54, 1759,73, -119,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 185 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); - ent.v[ "origin" ] = ( 2346,11, 1625,25, -119,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 173 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_windy" ); - ent.v[ "origin" ] = ( 1095,33, 1796,66, 441,374 ); - ent.v[ "angles" ] = ( 23,2062, 209,072, -1,51774 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_blocker" ); - ent.v[ "origin" ] = ( -628,106, 1115,63, 179 ); - ent.v[ "angles" ] = ( 12,8372, 56,7672, -2,06839 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_windy" ); - ent.v[ "origin" ] = ( 122,955, -3,2102, 305,555 ); - ent.v[ "angles" ] = ( 293,693, 179,684, -179,129 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); - ent.v[ "origin" ] = ( -594,228, 2172,06, 148 ); - ent.v[ "angles" ] = ( 43,071, 31,2458, 0,785727 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); - ent.v[ "origin" ] = ( 343,986, 1832,83, 102 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 288 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); - ent.v[ "origin" ] = ( 282,813, 1971,61, 123 ); - ent.v[ "angles" ] = ( 21,8738, 303,504, 2,07444 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); - ent.v[ "origin" ] = ( 347,617, 1562,74, 104 ); - ent.v[ "angles" ] = ( 1, 73, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); - ent.v[ "origin" ] = ( 276,882, 1397,63, 113 ); - ent.v[ "angles" ] = ( 10,9848, 58,9476, -0,791467 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); - ent.v[ "origin" ] = ( 305,728, 1467,02, 154 ); - ent.v[ "angles" ] = ( 76, 63, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); - ent.v[ "origin" ] = ( 307,705, 1920,67, 158 ); - ent.v[ "angles" ] = ( 78, 302, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); - ent.v[ "origin" ] = ( -304,354, 979,006, -10,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 264 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); - ent.v[ "origin" ] = ( -605,276, 1223,17, 159 ); - ent.v[ "angles" ] = ( 43,8189, 324,02, -2,11248 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); - ent.v[ "origin" ] = ( 38,9152, 1166,13, 150 ); - ent.v[ "angles" ] = ( 58,0104, 206,507, 4,57478 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); - ent.v[ "origin" ] = ( -37,2901, 2252,24, 154 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); - ent.v[ "origin" ] = ( 46,3434, 2215,2, 112 ); - ent.v[ "angles" ] = ( 0,998781, 329, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); - ent.v[ "origin" ] = ( -361,707, 2274,12, 178 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); - ent.v[ "origin" ] = ( -281,915, 2283,1, 166 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); - ent.v[ "origin" ] = ( -256,86, 1096,86, 155 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); - ent.v[ "origin" ] = ( -523,549, 1163,93, 156 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_pak_tower_fire_flareup" ); - ent.v[ "origin" ] = ( -1966,49, -394,654, 755,994 ); - ent.v[ "angles" ] = ( 270, 0, 6 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_pak_tower_fire_flareup" ); - ent.v[ "origin" ] = ( -2030,98, -89,1915, 754,989 ); - ent.v[ "angles" ] = ( 270, 0, -1,04873 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_pak_tower_fire_flareup" ); - ent.v[ "origin" ] = ( -66,9895, 5287,92, 820,994 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_pak_tower_fire_flareup" ); - ent.v[ "origin" ] = ( -65,7024, 5639,93, 817,016 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_pak_tower_fire_flareup" ); - ent.v[ "origin" ] = ( -1206,65, 3831,67, 754,996 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_pak_tower_fire_flareup" ); - ent.v[ "origin" ] = ( -1207,57, 4169,89, 755,992 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_pak_tower_fire_flareup" ); - ent.v[ "origin" ] = ( -1624,74, 4167,85, 756,012 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); - ent.v[ "origin" ] = ( 1033,32, 5418,75, -251,375 ); - ent.v[ "angles" ] = ( 343,217, 173,295, -4,39633 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 967,025, 4994,57, -198,161 ); - ent.v[ "angles" ] = ( 342,986, 178,849, 1,30263 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); - ent.v[ "origin" ] = ( 956,206, 6636,01, -85,6845 ); - ent.v[ "angles" ] = ( 344,935, 188,795, -8,67367 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flourescent_ceiling_panel_2" ); - ent.v[ "origin" ] = ( 626,278, 108,84, 63,75 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flourescent_ceiling_panel_2" ); - ent.v[ "origin" ] = ( 434,189, 502,997, 63,75 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flourescent_ceiling_panel_2" ); - ent.v[ "origin" ] = ( 657,843, 503,237, 63,75 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 285,769, -284,931, -62,6031 ); - ent.v[ "angles" ] = ( 271, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_md" ); - ent.v[ "origin" ] = ( 1907,88, 3900,13, -254,966 ); - ent.v[ "angles" ] = ( 1,41962, 8,94978, -0,931264 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_md" ); - ent.v[ "origin" ] = ( 1919,06, 4451,61, -273 ); - ent.v[ "angles" ] = ( 358,331, 313,975, 0,760531 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 802,238, 419,058, 164,796 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 372,526, 390,3, 149,796 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 611,184, 301,29, -16,0289 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 94 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 593,03, 247,997, -12,1327 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createexploder( "fx_light_flourescent_ceiling_panel" ); - ent.v[ "origin" ] = ( 302,103, 422,394, 198,75 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); - ent.v[ "origin" ] = ( 1653,11, 1959,95, 140,181 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 36 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); - ent.v[ "origin" ] = ( 1652,1, 2116,06, 76,9224 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 42 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); - ent.v[ "origin" ] = ( 1654,61, 2114,5, 202,007 ); - ent.v[ "angles" ] = ( 38,9934, 358,715, -0,756238 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); - ent.v[ "origin" ] = ( 1652,84, 2270,97, 139,844 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 36 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_lg" ); - ent.v[ "origin" ] = ( 2855,12, 1822,92, -254,283 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 360 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_lg" ); - ent.v[ "origin" ] = ( 2858,07, 2331,92, -255,29 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 360 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_lg" ); - ent.v[ "origin" ] = ( 2852,13, 1309,28, -254,586 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 360 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_lg" ); - ent.v[ "origin" ] = ( 2797,12, 783,196, -252,406 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 315 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_lg" ); - ent.v[ "origin" ] = ( 2230,1, -1758,09, -256 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 12 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_lg" ); - ent.v[ "origin" ] = ( 1822,7, -1101,26, -253,681 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 331 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_lg" ); - ent.v[ "origin" ] = ( 945,444, -1419,34, -256 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_lg" ); - ent.v[ "origin" ] = ( 904,072, -1468, -256,186 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 329 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_lg" ); - ent.v[ "origin" ] = ( 948,886, -1829,04, -254,054 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 323 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_lg" ); - ent.v[ "origin" ] = ( 1791,95, -760,125, -251,117 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 331 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_lg" ); - ent.v[ "origin" ] = ( 2586,65, 4774,31, -256 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 337 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_lg" ); - ent.v[ "origin" ] = ( 1848,42, 4244,04, -291,932 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 353 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_lg" ); - ent.v[ "origin" ] = ( 1142,96, 5000,99, -256 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_lg" ); - ent.v[ "origin" ] = ( 2615,41, 4881,06, -257,046 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 337 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_md" ); - ent.v[ "origin" ] = ( 2431,49, 2974,44, -255,827 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 41 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_door" ); - ent.v[ "origin" ] = ( 904,328, 4556,19, -137 ); - ent.v[ "angles" ] = ( 355,961, 188, -0,214773 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_door" ); - ent.v[ "origin" ] = ( 1355,33, 3801,4, -143 ); - ent.v[ "angles" ] = ( 357,839, 153,239, -1,71538 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_surface_heat_lg" ); - ent.v[ "origin" ] = ( 2682,94, 1708,44, -237,968 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 272 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 598,449, -745,307, -106,792 ); - ent.v[ "angles" ] = ( 359,68, 177,559, -14,0369 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -413,412, 568,263, -31,8336 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -258,783, 2187,77, 1647,49 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -220,862, 1201,96, 1649,09 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -733,75, 1674,27, 1649,28 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -221,534, 1160,39, 2261,35 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( 294,041, 1716,36, 2262,66 ); - ent.v[ "angles" ] = ( 270, 356,858, 3,14196 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -261,404, 2231,8, 2264,93 ); - ent.v[ "angles" ] = ( 270, 356,858, 3,14196 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -776,706, 1674,22, 2263,39 ); - ent.v[ "angles" ] = ( 270, 356,858, 3,14196 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -382,417, -2439,74, 1609,47 ); - ent.v[ "angles" ] = ( 270, 356,858, 3,14196 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( 132,321, -2912,44, 1606,8 ); - ent.v[ "angles" ] = ( 270, 356,858, 3,14196 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -856,343, -2954,65, 1609,55 ); - ent.v[ "angles" ] = ( 270, 356,858, 3,14196 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -385,128, -2397,32, 2222,61 ); - ent.v[ "angles" ] = ( 270, 356,858, 3,14196 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( 172,388, -2912,71, 2221,63 ); - ent.v[ "angles" ] = ( 270, 356,858, 3,14196 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -342,398, -3469,5, 2223,69 ); - ent.v[ "angles" ] = ( 270, 356,858, 3,14196 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -899,259, -2954,06, 2221,3 ); - ent.v[ "angles" ] = ( 270, 356,858, 3,14196 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -3376,09, 1368,94, 1372,42 ); - ent.v[ "angles" ] = ( 270, 356,858, 3,14196 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -3382,22, 1449,79, 1369,04 ); - ent.v[ "angles" ] = ( 270, 356,858, 3,14196 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -3369,01, 2046,71, 1371,93 ); - ent.v[ "angles" ] = ( 270, 356,858, 3,14196 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -3375,15, 2127,56, 1370,55 ); - ent.v[ "angles" ] = ( 270, 356,858, 3,14196 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -5392,77, 1897,97, 1387,32 ); - ent.v[ "angles" ] = ( 270, 356,858, 3,14196 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -5398,9, 1978,82, 1385,94 ); - ent.v[ "angles" ] = ( 270, 356,858, 3,14196 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -5385,64, 2578,22, 1387,95 ); - ent.v[ "angles" ] = ( 270, 356,858, 3,14196 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -5391,77, 2659,07, 1386,57 ); - ent.v[ "angles" ] = ( 270, 356,858, 3,14196 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -8664,25, 4067,45, 2780,68 ); - ent.v[ "angles" ] = ( 270, 6, -36 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -8629,13, 4140,53, 2779,31 ); - ent.v[ "angles" ] = ( 270, 6, -36 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -8962,56, 3457,44, 2781,74 ); - ent.v[ "angles" ] = ( 270, 6, -36 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -8927,45, 3530,52, 2780,37 ); - ent.v[ "angles" ] = ( 270, 6, -36 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -14253,8, 8722,18, 3019,15 ); - ent.v[ "angles" ] = ( 270, 358,987, -44,9871 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -14199,9, 8782,76, 3017,78 ); - ent.v[ "angles" ] = ( 270, 358,987, -44,9871 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -14687, 8186,61, 3021,05 ); - ent.v[ "angles" ] = ( 270, 358,987, -44,9871 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -14633,1, 8247,19, 3019,68 ); - ent.v[ "angles" ] = ( 270, 358,987, -44,9871 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -17050,5, 11070,7, 5193,99 ); - ent.v[ "angles" ] = ( 270, 5,83284, -21,8328 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -17034,1, 11150,1, 5192,61 ); - ent.v[ "angles" ] = ( 270, 5,83284, -21,8328 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -16908,4, 11744,8, 5194,22 ); - ent.v[ "angles" ] = ( 270, 5,83284, -21,8328 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -16892, 11824,2, 5192,85 ); - ent.v[ "angles" ] = ( 270, 5,83284, -21,8328 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -18807,4, 13264,3, 5848,29 ); - ent.v[ "angles" ] = ( 270, 0,210089, -16,2101 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -18791,5, 13342,2, 5846,91 ); - ent.v[ "angles" ] = ( 270, 0,210089, -16,2101 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -18932, 12677, 5848,67 ); - ent.v[ "angles" ] = ( 270, 0,210089, -16,2101 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -18943, 12605,4, 5848,05 ); - ent.v[ "angles" ] = ( 270, 0,210089, -16,2101 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( 255,157, 1714,3, 1648,62 ); - ent.v[ "angles" ] = ( 270, 0,210089, -16,2101 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_lg" ); - ent.v[ "origin" ] = ( 2495,56, -2161,46, -202,527 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 317 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 301,905, 583,844, 119,513 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 235,125, 39,5175, 109,522 ); - ent.v[ "angles" ] = ( 15, 359, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 682,204, -810,708, -120,801 ); - ent.v[ "angles" ] = ( 281,042, 264,966, 95,3417 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 1310,82, 2254,2, 40 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 1230,34, 2221,4, 34 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 1284,24, 2062,03, 41,75 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 1358,59, 2043,55, 38,75 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 1363,36, 2137,91, 40 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 1138,79, 2146,31, 37 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 976,226, 1609,79, -23,7989 ); - ent.v[ "angles" ] = ( 345,002, 180,035, -0,267937 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 978,062, 1784,1, -31,8308 ); - ent.v[ "angles" ] = ( 342,045, 174,795, 1,29841 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 1244,56, 1410,91, 155,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 1246,82, 1385,41, 155,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 1380,96, 1334,25, 165,805 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 1411,17, 1259,32, 168,97 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 1180,59, 1150,99, 175,107 ); - ent.v[ "angles" ] = ( 360, 270, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 1269,76, 1169,44, 172,381 ); - ent.v[ "angles" ] = ( 360, 270, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 1259,92, 1148,36, 173,74 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 1386,93, 1132,01, 174,639 ); - ent.v[ "angles" ] = ( 360, 270, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 615,146, 3146,84, 133,575 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 267 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 397,977, 2928,55, -18,2847 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 630,564, 3479,88, -5,07309 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 353,523, 3479,88, -12,0482 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 355,127, 2795,88, 122,608 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 1080,94, -499,194, -65,6055 ); - ent.v[ "angles" ] = ( 271, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_smoke" ); - ent.v[ "origin" ] = ( 786,057, 1832,72, -64,5984 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_smoke" ); - ent.v[ "origin" ] = ( 912,885, 1709,01, -70,6813 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_smoke" ); - ent.v[ "origin" ] = ( 783,76, 1549,92, -74 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_smoke" ); - ent.v[ "origin" ] = ( 1355,86, 2038,66, 55,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_door" ); - ent.v[ "origin" ] = ( 1676,42, 3954,45, -136 ); - ent.v[ "angles" ] = ( 355,598, 174,308, -1,37921 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_door" ); - ent.v[ "origin" ] = ( 1672,36, 4262,44, -136 ); - ent.v[ "angles" ] = ( 355,598, 174,308, -1,37921 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_wave_break_lg" ); - ent.v[ "origin" ] = ( 930,409, -2402,01, -266,954 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 350 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -181,14, -546,381, 7,51834 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 357 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 148,284, -1035,87, -66,3374 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 147,573, -444,587, -54,984 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 135,61, -678,836, 9,00472 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 167,83, -688,309, 11,0114 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_pipe_md" ); - ent.v[ "origin" ] = ( -234,22, 4430,22, -138 ); - ent.v[ "angles" ] = ( 356, 250, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -96,3175, -1068,69, -60,0817 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 83 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -1630,82, 3082,7, 1191,56 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -1748,52, 2944,24, 1193,61 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -223,43, 4153,4, 1191,59 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( -359,856, 4271,67, 1190,11 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); - ent.v[ "origin" ] = ( -2030,64, -90,0045, 751,999 ); - ent.v[ "angles" ] = ( 270, 0, -1,04873 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); - ent.v[ "origin" ] = ( -1961,2, -394,981, 752,995 ); - ent.v[ "angles" ] = ( 270, 0, -1,04873 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); - ent.v[ "origin" ] = ( -2518,63, -1424,74, 1135,59 ); - ent.v[ "angles" ] = ( 270, 0, -1,04873 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); - ent.v[ "origin" ] = ( -1200,41, 3827,36, 754,992 ); - ent.v[ "angles" ] = ( 270, 0, -1,04873 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); - ent.v[ "origin" ] = ( -1209,11, 4178,67, 752,996 ); - ent.v[ "angles" ] = ( 270, 0, -1,04873 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); - ent.v[ "origin" ] = ( -1614,69, 4160,64, 751,993 ); - ent.v[ "angles" ] = ( 270, 0, -1,04873 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); - ent.v[ "origin" ] = ( -63,1761, 5283,47, 823,987 ); - ent.v[ "angles" ] = ( 270, 0, -1,04873 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fire_tower_flareup_amb" ); - ent.v[ "origin" ] = ( -62,4625, 5629,45, 827,004 ); - ent.v[ "angles" ] = ( 270, 0, -1,04873 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); - ent.v[ "origin" ] = ( -507,734, 2225,69, 160,177 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "origin" ] = ( 758,973, -9,47859, 375,484 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 644,61, -471,975, -72 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 174 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 591,416, -897,14, -143,089 ); - ent.v[ "angles" ] = ( 359,68, 177,559, -8,03697 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 985,664, -752,8, -135,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 226 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 1012,12, 16,115, -73 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 237 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 830,071, -318,7, -72 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 192 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 1258,43, 436,039, -72 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 1042,31, 550,025, -72 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 151 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 704,828, 863,625, -72 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 267,112, 943,005, -72 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 212 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 42,6443, 582,215, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 222 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( -32,5658, 798,267, -72 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 188 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 1974,4, 614,669, -135,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 1901,83, 167,6, -135,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 167 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 1744,92, -276,104, -135,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 183 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 1636,32, -507,592, -135,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 1361,51, -651,467, -135,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 184 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 1303,66, -1032,85, -135,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 183 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 37,5944, -216,892, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 2047,69, 2958,23, -135,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 192 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 2073,05, 3197,92, -135,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 174 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 1789,56, 3089,11, -136,875 ); - ent.v[ "angles" ] = ( 359, 176, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 1790,29, 3726,06, -135,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 564,93, 4233,33, -129,715 ); - ent.v[ "angles" ] = ( 0,22494, 177,026, 13,9981 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 565,547, 4077,68, -92,0285 ); - ent.v[ "angles" ] = ( 0,22494, 177,026, 13,9981 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 1114,87, 3399,59, -74 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 155 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( -20,8164, -79,1724, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 141 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 1607,48, -748,065, -135,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 1969,64, 2748,34, -137,875 ); - ent.v[ "angles" ] = ( 359, 174, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 1051,04, 3057,55, -72 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 1011,96, 2732, -72 ); - ent.v[ "angles" ] = ( 359, 214, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 946,525, 1830,26, 56,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 171 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 926,424, 1544,23, 56,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 192 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 1127,7, 1698,44, 56,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 182 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 712,302, 1810,06, 56,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 174 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 739,189, 1557,63, 56,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); - ent.v[ "origin" ] = ( 998,01, 1202,28, -28,7682 ); - ent.v[ "angles" ] = ( 343,039, 188,191, -19,8711 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); - ent.v[ "origin" ] = ( 695,873, 1297,28, 0,403737 ); - ent.v[ "angles" ] = ( 346,805, 186,796, -19,508 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); - ent.v[ "origin" ] = ( 1000,2, 2193,69, -29,8839 ); - ent.v[ "angles" ] = ( 344,143, 175,477, 17,6421 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); - ent.v[ "origin" ] = ( 696,221, 2207,74, -28,6999 ); - ent.v[ "angles" ] = ( 346,05, 176,102, 17,4815 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 886,939, 3738,72, -73 ); - ent.v[ "angles" ] = ( 359,054, 183, -1,05096 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 724,335, 2487,38, -72 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 175 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 84,3099, 2508,05, -72 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 144 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( -156,639, 2723,24, -73 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 203,962, 3667,24, -65 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 202 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 5,6836, 2701,68, -75 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 183 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 619,41, 3906,89, -73 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 365,039, 677,169, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 165 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 579,99, -1230,18, -143,322 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 991,17, -974,482, -136,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 215 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_red" ); - ent.v[ "origin" ] = ( 784,399, 1793,23, 42,088 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_garage_parking_red" ); - ent.v[ "origin" ] = ( 793,055, 1587,47, 42,7344 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -309,579, 2465,72, 56,7041 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 96 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); - ent.v[ "origin" ] = ( 1292,03, 2439,45, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); - ent.v[ "origin" ] = ( 1263,48, -393,252, -135,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); - ent.v[ "origin" ] = ( 1723,84, 912,907, -111,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); - ent.v[ "origin" ] = ( 1650,06, 597,297, -135,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); - ent.v[ "origin" ] = ( 1297,95, 704,378, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); - ent.v[ "origin" ] = ( 1285,67, 966,865, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); - ent.v[ "origin" ] = ( 1304,77, 2683,11, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 1099,79, 3891,11, -63,6043 ); - ent.v[ "angles" ] = ( 271, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( -431,998, 2887,33, -61,3418 ); - ent.v[ "angles" ] = ( 271, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); - ent.v[ "origin" ] = ( 1160,2, 3326,74, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); - ent.v[ "origin" ] = ( 1178,16, 75,2075, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); - ent.v[ "origin" ] = ( 806,555, -768,155, -135,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); - ent.v[ "origin" ] = ( 1714,07, 2458,33, -111,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_swirl_sm_gray_runner" ); - ent.v[ "origin" ] = ( 1689,37, 2783,74, -135,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createexploder( "fx_light_flourescent_ceiling_panel" ); - ent.v[ "origin" ] = ( 337,627, 2958,35, 218,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -392,836, 2232,72, -53,5544 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 16 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -418,629, 2225,84, -37,1378 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 19 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -444,78, 2216,05, -21,133 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 21 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -470,448, 2204,66, -5,18853 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 25 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -495,055, 2193,68, 11,944 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 27 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -520,725, 2179,21, 27,287 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 30 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -544,308, 2164,97, 43,6084 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 33 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -415,404, 2313,01, -53,5861 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 16 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -445,571, 2303,76, -37,1427 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 19 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -475,071, 2293,91, -21,3383 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 22 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -504,726, 2280,79, -5,39598 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 25 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -532,622, 2266,46, 11,4135 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 27 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -562,179, 2250,49, 27,1724 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 30 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -590,045, 2233,93, 43,397 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 33 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -575,44, 2107,32, 120,486 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 218 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -578,235, 1286,51, 120,38 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 140 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( 4,25729, 2165,8, 119,477 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 332 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( 5,9098, 1225,69, 119,504 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 28 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( 381,959, 3500,25, 50,7754 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 96 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( 574,335, 3500,18, 50,6501 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 96 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -588,975, 1160,37, 43,8079 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 328 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -543,702, 1229,46, 43,813 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 326 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -561,56, 1143,04, 27,5869 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 331 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -532,975, 1127,7, 11,3637 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 333 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -504,153, 1113,53, -5,74658 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 336 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -474,654, 1100,6, -21,627 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 339 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -445,134, 1089,9, -37,8186 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 341 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -414,916, 1081,22, -53,8621 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 344 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -392,365, 1160,54, -53,7965 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 344 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -418,128, 1168,66, -37,3554 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 341 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -444,31, 1177,31, -21,2478 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 339 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -470,106, 1188,01, -5,62566 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 336 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -495,947, 1200,82, 11,5769 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 332 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -519,802, 1214,13, 27,2616 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 329 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -12,2361, 1198,32, 114,226 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 289 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( 1270,12, 3712,27, 4,09926 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( 261,827, -500,631, -118,289 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( 261,875, -619,5, -118,429 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( 261,875, -744,036, -118,209 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( 261,845, -864,272, -118,369 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( 38,1894, -968,449, -118,972 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( 38,125, -843,974, -118,37 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( 38,125, -716,021, -118,284 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( 38,125, -588,216, -118,307 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -177,875, -480,953, -46,3274 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -121,108, -531,875, -46,2871 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( 204,838, -433,124, -118,206 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( 92,6293, -433,124, -118,335 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 685,08, -1584,64, -136 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 691,715, -1851,81, -136 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 565,265, -1610, -144 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 450,379, -1786,14, -144 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); - ent.v[ "origin" ] = ( -127,874, 2085,74, 52 ); - ent.v[ "angles" ] = ( 270, 0, -12 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); - ent.v[ "origin" ] = ( 62,1835, 1955,89, 52 ); - ent.v[ "angles" ] = ( 270, 2,04541, -44,0452 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); - ent.v[ "origin" ] = ( 156,455, 1754,86, 52 ); - ent.v[ "angles" ] = ( 270, 0, -83 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); - ent.v[ "origin" ] = ( 110,528, 1513,59, 52 ); - ent.v[ "angles" ] = ( 270, 356,634, -116,633 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); - ent.v[ "origin" ] = ( -26,0349, 1352,2, 52 ); - ent.v[ "angles" ] = ( 270, 0, -147 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); - ent.v[ "origin" ] = ( -251,151, 1307,7, 52 ); - ent.v[ "angles" ] = ( 270, 0, 176 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); - ent.v[ "origin" ] = ( -370,46, 2080,32, 52 ); - ent.v[ "angles" ] = ( 270, 0, -162 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); - ent.v[ "origin" ] = ( -555,858, 1956,93, 52 ); - ent.v[ "angles" ] = ( 270, 0, -123 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); - ent.v[ "origin" ] = ( -638,55, 1752,3, 52 ); - ent.v[ "angles" ] = ( 270, 356,82, -95,8201 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); - ent.v[ "origin" ] = ( -622,411, 1541,89, 52 ); - ent.v[ "angles" ] = ( 270, 3,01279, -74,0128 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); - ent.v[ "origin" ] = ( -494,614, 1369,74, 52 ); - ent.v[ "angles" ] = ( 270, 0, -41 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); - ent.v[ "origin" ] = ( -254,464, 1896,4, 52 ); - ent.v[ "angles" ] = ( 270, 3,01279, -74,0128 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); - ent.v[ "origin" ] = ( -37,1649, 1794,69, 52 ); - ent.v[ "angles" ] = ( 270, 3,01279, -74,0128 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); - ent.v[ "origin" ] = ( -141,764, 1539,79, 52 ); - ent.v[ "angles" ] = ( 270, 3,01279, -74,0128 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); - ent.v[ "origin" ] = ( -258,127, 1728,27, 52 ); - ent.v[ "angles" ] = ( 270, 3,01279, -74,0128 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); - ent.v[ "origin" ] = ( -493,17, 1762,39, 52 ); - ent.v[ "angles" ] = ( 270, 3,01279, -74,0128 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_rain_cooling_tower_splsh_200" ); - ent.v[ "origin" ] = ( -368,487, 1533,22, 52 ); - ent.v[ "angles" ] = ( 270, 3,01279, -74,0128 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 1977,98, 366,526, -135,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 176 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_dust_gray_street_low" ); - ent.v[ "origin" ] = ( 1464,51, -889,135, -135,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 186 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_md" ); - ent.v[ "origin" ] = ( -586,923, 1895,59, 114 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_md" ); - ent.v[ "origin" ] = ( 12,161, 1428,43, 137 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_md" ); - ent.v[ "origin" ] = ( -35,3065, 1986,37, 126 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_md" ); - ent.v[ "origin" ] = ( -246,795, 1728,38, 122 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_md" ); - ent.v[ "origin" ] = ( -612,306, 1452,68, 136 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_sm" ); - ent.v[ "origin" ] = ( -317,229, 2513,04, -21 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_sm" ); - ent.v[ "origin" ] = ( -296,412, 891,759, -31 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_sm" ); - ent.v[ "origin" ] = ( -245,199, 1286,94, 131 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_sm" ); - ent.v[ "origin" ] = ( -327,195, 2103,62, 119 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_sm" ); - ent.v[ "origin" ] = ( 506,353, 1695,17, 161 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( 534,871, 1681,48, 100,529 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_sm" ); - ent.v[ "origin" ] = ( 293,471, 1676,48, 194 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( -657,957, 2097,38, 93 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( -611,401, 1250,63, 85 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( 138,519, 2063,32, 106 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( 125,064, 1331,07, 100,534 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( -296,854, 1081,47, -9,73779 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( -296,274, 2329,6, -16,8466 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( -474,897, 2248,37, 33,3115 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( -619,981, 2157,09, 163,496 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( -421,943, 2258,39, 152,995 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( -212,626, 2289,77, 150,788 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( -5,42307, 2240,35, 102 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( -312,504, 2560,61, -58 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_md" ); - ent.v[ "origin" ] = ( -884,266, 1674,01, 65 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( -51,6081, 2247,67, 159 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( 252,823, 1391,73, 154,02 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( 254,558, 1981,93, 156 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( 23,0116, 1163,25, 93 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( -11,0243, 1151,77, 147,87 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( -461,387, 1144,32, 39,4494 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( -302,044, 853,825, -56,8727 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createexploder( "fx_light_flourescent_ceiling_panel" ); - ent.v[ "origin" ] = ( 337,668, 2899,52, 218,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_light_flourescent_ceiling_panel" ); - ent.v[ "origin" ] = ( 302,264, 478,068, 198,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -387,346, 1313,75, 213,748 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 185 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -131,287, 1312,74, 213,778 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 185 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -643,327, 1568,19, 213,577 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 185 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -387,359, 1568,09, 213,608 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 185 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -131,384, 1569,09, 213,863 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 185 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( 124,835, 1568,17, 212,634 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 185 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -643,294, 1824,85, 213,486 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 185 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -387,312, 1824,95, 213,401 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 185 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -131,294, 1823,67, 213,298 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 185 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( 124,655, 1824,71, 213,457 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 185 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -387,337, 2080,5, 213,691 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 185 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -131,268, 2080,18, 213,265 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 185 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -348,716, 1311,97, 213,357 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -92,7097, 1311,74, 213,298 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( 163,371, 1568,28, 213,722 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -92,7388, 1569,08, 213,158 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -348,777, 1567,77, 213,012 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -604,806, 1568,54, 212,862 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( 163,318, 1823,49, 213,499 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -92,6991, 1825,02, 213,447 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -348,672, 1824,18, 213,305 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -604,725, 1823,71, 213,342 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -92,6829, 2080,23, 213,458 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_m_p6_ext_wall_sml" ); - ent.v[ "origin" ] = ( -348,7, 2080,17, 213,221 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flourescent_ceiling_panel_2" ); - ent.v[ "origin" ] = ( 441,882, 412,978, 262,75 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flourescent_ceiling_panel_2" ); - ent.v[ "origin" ] = ( 442,301, 539,491, 263,75 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flourescent_ceiling_panel_2" ); - ent.v[ "origin" ] = ( 729,979, 413,208, 263,75 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flourescent_ceiling_panel_2" ); - ent.v[ "origin" ] = ( 730,475, 540,783, 263,75 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_door" ); - ent.v[ "origin" ] = ( -389,632, 1117,59, 154,528 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_md" ); - ent.v[ "origin" ] = ( 498,304, 3156,75, 165,162 ); - ent.v[ "angles" ] = ( 270, 357,879, 93,121 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_md" ); - ent.v[ "origin" ] = ( 370,552, 3155,73, 165,162 ); - ent.v[ "angles" ] = ( 270, 357,879, 93,121 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_md" ); - ent.v[ "origin" ] = ( 370,2, 3316,78, 165,161 ); - ent.v[ "angles" ] = ( 270, 357,879, 93,121 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_md" ); - ent.v[ "origin" ] = ( 498,256, 3316,51, 165,161 ); - ent.v[ "angles" ] = ( 270, 357,879, 93,121 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_md" ); - ent.v[ "origin" ] = ( 628,524, 3316,75, 164,157 ); - ent.v[ "angles" ] = ( 270, 357,879, 93,121 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_md" ); - ent.v[ "origin" ] = ( 697,352, 3188,03, 165,153 ); - ent.v[ "angles" ] = ( 270, 357,879, 93,121 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 580,749, 3439,96, 95,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 644,765, 3441,41, 95,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 708,357, 3440,7, 95,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 515,904, 3440,59, 95,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 452,164, 3440,98, 95,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 388,406, 3440,29, 95,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 323,834, 3440,15, 95,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 324,482, 3384,12, 95,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 388,033, 3384,03, 95,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 452,921, 3384,28, 95,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 516,798, 3383,45, 95,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 580,312, 3384,78, 95,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 644,848, 3384,15, 95,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 708,885, 3384,72, 95,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 691,215, 2995,59, 63,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 691,496, 3058,03, 63,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 691,75, 3122,56, 63,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 451,883, 3059,23, 63,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 515,291, 3057,53, 63,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 579,466, 3059,96, 63,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 451,335, 2995,26, 63,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 515,382, 2995,34, 63,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm" ); - ent.v[ "origin" ] = ( 579,961, 2995,2, 63,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm_sm" ); - ent.v[ "origin" ] = ( 1095,23, 1960,3, 64,125 ); - ent.v[ "angles" ] = ( 338, 46, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); - ent.v[ "origin" ] = ( 1219,82, -3358,2, -225,966 ); - ent.v[ "angles" ] = ( 340,226, 173,539, -4,47296 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 1014,35, -2854,36, -255,925 ); - ent.v[ "angles" ] = ( 327,963, 181,99, -0,407737 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); - ent.v[ "origin" ] = ( 859,47, -3279,31, -105,188 ); - ent.v[ "angles" ] = ( 356,181, 172,305, -4,21809 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( -771,867, -1087,62, -33,9863 ); - ent.v[ "angles" ] = ( 348,908, 218,428, -17,0545 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( -817,333, -1822,73, -34 ); - ent.v[ "angles" ] = ( 345,931, 218,807, -7,13726 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( -1116,02, 1795,57, 39 ); - ent.v[ "angles" ] = ( 355,615, 238,525, 1,20706 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); - ent.v[ "origin" ] = ( -1118,98, 2590,52, -16 ); - ent.v[ "angles" ] = ( 351,764, 220,755, -0,304766 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); - ent.v[ "origin" ] = ( -944,947, 4077,54, 53,4589 ); - ent.v[ "angles" ] = ( 3,33533, 259,147, -17,0191 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( 658,361, 216,263, -63,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 227 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( 651,54, 532,81, 72,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 242 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( 470,363, 491,088, 72,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 331 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( 712,61, 3052,12, 72,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 249 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "origin" ] = ( 492,822, 2899,12, 72,125 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "origin" ] = ( 1234,88, 2010,09, 49 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_smoke" ); - ent.v[ "origin" ] = ( 1127,46, 2234,77, 55,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_smoke" ); - ent.v[ "origin" ] = ( 1134,16, 2003,34, 55,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_smoke" ); - ent.v[ "origin" ] = ( 1379,54, 2273,12, 55,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( 1334,13, 1376,44, 65,125 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( 1164, 1386,85, 83 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( 1354,51, 1168,48, 81,125 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_cooling_tower_thck_xsm" ); - ent.v[ "origin" ] = ( 1228,09, 1136,18, 70 ); - ent.v[ "angles" ] = ( 270, 4,2937, -4,29471 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_md" ); - ent.v[ "origin" ] = ( 1243,18, 1267,06, 171,158 ); - ent.v[ "angles" ] = ( 270, 357,879, 93,121 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( 258,569, 1469,85, 114,504 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 334 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( 262,837, 1917,35, 114,221 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 22 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -9,18739, 2193,57, 114,655 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 63 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -568,462, 2135,15, 114,072 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 126 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_outdoor_wall03_white" ); - ent.v[ "origin" ] = ( -561,284, 1252,87, 114,373 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 228 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_white_ribbon_sm" ); - ent.v[ "origin" ] = ( -112,213, 1115,25, -56,5153 ); - ent.v[ "angles" ] = ( 302,701, 119,927, -111,036 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_white_ribbon_sm" ); - ent.v[ "origin" ] = ( -109,25, 1107,61, -57,5097 ); - ent.v[ "angles" ] = ( 280,286, 298,824, 60,7822 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; -} diff --git a/Multiplayer Maps/mp_meltdown/maps/mp/mp_meltdown.gsc b/Multiplayer Maps/mp_meltdown/maps/mp/mp_meltdown.gsc deleted file mode 100644 index a77c0f6..0000000 --- a/Multiplayer Maps/mp_meltdown/maps/mp/mp_meltdown.gsc +++ /dev/null @@ -1,17 +0,0 @@ -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_meltdown_fx::main(); - maps/mp/_load::main(); - maps/mp/mp_meltdown_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_meltdown" ); -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2100", reset_dvars ); -} diff --git a/Multiplayer Maps/mp_meltdown/maps/mp/mp_meltdown_amb.gsc b/Multiplayer Maps/mp_meltdown/maps/mp/mp_meltdown_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_meltdown/maps/mp/mp_meltdown_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_meltdown/maps/mp/mp_meltdown_fx.gsc b/Multiplayer Maps/mp_meltdown/maps/mp/mp_meltdown_fx.gsc deleted file mode 100644 index bcf7334..0000000 --- a/Multiplayer Maps/mp_meltdown/maps/mp/mp_meltdown_fx.gsc +++ /dev/null @@ -1,69 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - precache_fxanim_props(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_meltdown_fx::main(); - maps/mp/createart/mp_meltdown_art::main(); -} - -precache_scripted_fx() -{ -} - -precache_createfx_fx() -{ - level._effect[ "fx_mp_fumes_vent_xsm_int" ] = loadfx( "maps/mp_maps/fx_mp_fumes_vent_xsm_int" ); - level._effect[ "fx_mp_steam_pipe_md" ] = loadfx( "maps/mp_maps/fx_mp_steam_pipe_md" ); - level._effect[ "fx_mp_vent_heat_distort" ] = loadfx( "maps/mp_maps/fx_mp_vent_heat_distort" ); - level._effect[ "fx_mp_vent_steam_line" ] = loadfx( "maps/mp_maps/fx_mp_vent_steam_line" ); - level._effect[ "fx_mp_vent_steam_windy" ] = loadfx( "maps/mp_maps/fx_mp_vent_steam_windy" ); - level._effect[ "fx_mp_vent_steam_windy_lg" ] = loadfx( "maps/mp_maps/fx_mp_vent_steam_windy_lg" ); - level._effect[ "fx_mp_steam_smoke" ] = loadfx( "maps/mp_maps/fx_mp_steam_smoke" ); - level._effect[ "fx_mp_water_rain_cooling_tower" ] = loadfx( "maps/mp_maps/fx_mp_water_rain_cooling_tower" ); - level._effect[ "fx_mp_water_rain_cooling_tower_splsh_200" ] = loadfx( "maps/mp_maps/fx_mp_water_rain_cooling_tower_splsh_200" ); - level._effect[ "fx_mp_water_drip_light_long" ] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); - level._effect[ "fx_mp_steam_cooling_tower" ] = loadfx( "maps/mp_maps/fx_mp_steam_cooling_tower" ); - level._effect[ "fx_mp_steam_cooling_tower_blocker" ] = loadfx( "maps/mp_maps/fx_mp_steam_cooling_tower_blocker" ); - level._effect[ "fx_mp_steam_cooling_tower_door" ] = loadfx( "maps/mp_maps/fx_mp_steam_cooling_tower_door" ); - level._effect[ "fx_mp_steam_cooling_tower_int_top" ] = loadfx( "maps/mp_maps/fx_mp_steam_cooling_tower_int_top" ); - level._effect[ "fx_mp_steam_cooling_tower_thck_sm" ] = loadfx( "maps/mp_maps/fx_mp_steam_cooling_tower_thck_sm" ); - level._effect[ "fx_mp_steam_cooling_tower_thck_md" ] = loadfx( "maps/mp_maps/fx_mp_steam_cooling_tower_thck_md" ); - level._effect[ "fx_mp_steam_cooling_tower_thck_xsm" ] = loadfx( "maps/mp_maps/fx_mp_steam_cooling_tower_thck_xsm" ); - level._effect[ "fx_water_pipe_spill_ocean" ] = loadfx( "water/fx_water_pipe_spill_ocean" ); - level._effect[ "fx_water_surface_heat_lg" ] = loadfx( "water/fx_water_surface_heat_lg" ); - level._effect[ "fx_water_surface_heat_md" ] = loadfx( "water/fx_water_surface_heat_md" ); - level._effect[ "fx_mp_steam_tunnel" ] = loadfx( "maps/mp_maps/fx_mp_steam_tunnel" ); - level._effect[ "fx_mp_steam_tunnel_lng" ] = loadfx( "maps/mp_maps/fx_mp_steam_tunnel_lng" ); - level._effect[ "fx_water_wave_break_md" ] = loadfx( "water/fx_water_wave_break_md" ); - level._effect[ "fx_water_wave_break_lg" ] = loadfx( "water/fx_water_wave_break_lg" ); - level._effect[ "fx_insects_swarm_lg_light" ] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); - level._effect[ "fx_paper_interior_short" ] = loadfx( "debris/fx_paper_interior_short" ); - level._effect[ "fx_mp_light_dust_motes_md" ] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); - level._effect[ "fx_light_gray_white_ribbon_sm" ] = loadfx( "light/fx_light_gray_white_ribbon_sm" ); - level._effect[ "fx_light_flourescent_ceiling_panel_2" ] = loadfx( "light/fx_light_flourescent_ceiling_panel_2" ); - level._effect[ "fx_light_reactor_glw_blue" ] = loadfx( "light/fx_light_reactor_glw_blue" ); - level._effect[ "fx_light_beacon_red_blink_fst_sm" ] = loadfx( "light/fx_light_beacon_red_blink_fst_sm" ); - level._effect[ "fx_light_garage_parking_red" ] = loadfx( "light/fx_light_emergency_red" ); - level._effect[ "fx_light_m_p6_ext_wall_sml" ] = loadfx( "light/fx_light_m_p6_ext_wall_sml" ); - level._effect[ "fx_light_outdoor_wall03_white" ] = loadfx( "light/fx_light_outdoor_wall03_white" ); - level._effect[ "fx_light_flourescent_ceiling_panel" ] = loadfx( "light/fx_light_flourescent_ceiling_panel_soft" ); - level._effect[ "fx_light_recessed_cool_sm" ] = loadfx( "light/fx_light_recessed_cool_sm_soft" ); - level._effect[ "fx_light_floodlight_sqr_wrm_sm" ] = loadfx( "light/fx_light_floodlight_sqr_wrm_sm" ); - level._effect[ "fx_light_flour_glow_cool_dbl_md" ] = loadfx( "light/fx_light_flour_glow_cool_dbl_md" ); - level._effect[ "fx_lf_mp_meltdown_sun1" ] = loadfx( "lens_flares/fx_lf_mp_meltdown_sun1" ); - level._effect[ "fx_sand_gust_ground_sm" ] = loadfx( "dirt/fx_sand_gust_ground_sm_slw" ); - level._effect[ "fx_sand_gust_ground_md" ] = loadfx( "dirt/fx_sand_gust_ground_md_slw" ); - level._effect[ "fx_sand_gust_door" ] = loadfx( "dirt/fx_sand_gust_door_slw" ); - level._effect[ "fx_sand_blowing_lg_vista" ] = loadfx( "dirt/fx_sand_blowing_lg_vista" ); - level._effect[ "fx_dust_gray_street_low" ] = loadfx( "dirt/fx_dust_gray_street_low" ); - level._effect[ "fx_dust_swirl_sm_gray_runner" ] = loadfx( "dirt/fx_dust_swirl_sm_gray_runner" ); - level._effect[ "fx_pak_tower_fire_flareup" ] = loadfx( "maps/mp_maps/fx_mp_fire_tower_flareup" ); - level._effect[ "fx_mp_fire_tower_flareup_amb" ] = loadfx( "maps/mp_maps/fx_mp_fire_tower_flareup_amb" ); -} - -precache_fxanim_props() -{ -} diff --git a/Multiplayer Maps/mp_meltdown/maps/mp/mp_meltdown_lift.gsc b/Multiplayer Maps/mp_meltdown/maps/mp/mp_meltdown_lift.gsc deleted file mode 100644 index 55bc152..0000000 --- a/Multiplayer Maps/mp_meltdown/maps/mp/mp_meltdown_lift.gsc +++ /dev/null @@ -1,218 +0,0 @@ -#include maps/mp/killstreaks/_supplydrop; -#include maps/mp/_tacticalinsertion; -#include maps/mp/gametypes/_weaponobjects; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - precachestring( &"MP_LIFT_OPERATE" ); - precachestring( &"MP_LIFT_COOLDOWN" ); - trigger = getent( "lift_trigger", "targetname" ); - platform = getent( "lift_platform", "targetname" ); - if ( !isDefined( trigger ) || !isDefined( platform ) ) - { - return; - } - trigger enablelinkto(); - trigger linkto( platform ); - part = getent( "lift_part", "targetname" ); - if ( isDefined( part ) ) - { - part linkto( platform ); - } - level thread lift_think( trigger, platform ); -} - -lift_think( trigger, platform ) -{ - level waittill( "prematch_over" ); - location = 0; - for ( ;; ) - { - trigger sethintstring( &"MP_LIFT_OPERATE" ); - trigger waittill( "trigger" ); - trigger sethintstring( &"MP_LIFT_COOLDOWN" ); - if ( location == 0 ) - { - goal = platform.origin + vectorScale( ( 0, 0, 1 ), 128 ); - location = 1; - } - else - { - goal = platform.origin - vectorScale( ( 0, 0, 1 ), 128 ); - location = 0; - } - platform thread lift_move_think( goal ); - platform waittill( "movedone" ); - if ( location == 1 ) - { - trigger thread lift_auto_lower_think(); - } - wait 10; - } -} - -lift_move_think( goal ) -{ - self endon( "movedone" ); - timer = 5; - self moveto( goal, 5 ); - while ( timer >= 0 ) - { - self destroy_equipment(); - self destroy_tactical_insertions(); - self destroy_supply_crates(); - self destroy_corpses(); - self destroy_stuck_weapons(); - wait 0,5; - timer -= 0,5; - } -} - -lift_auto_lower_think() -{ - self endon( "trigger" ); - wait 30; - self notify( "trigger" ); -} - -destroy_equipment() -{ - grenades = getentarray( "grenade", "classname" ); - i = 0; - while ( i < grenades.size ) - { - item = grenades[ i ]; - if ( !isDefined( item.name ) ) - { - i++; - continue; - } - else if ( !isDefined( item.owner ) ) - { - i++; - continue; - } - else if ( !isweaponequipment( item.name ) ) - { - i++; - continue; - } - else if ( !item istouching( self ) ) - { - i++; - continue; - } - else watcher = item.owner getwatcherforweapon( item.name ); - if ( !isDefined( watcher ) ) - { - i++; - continue; - } - else - { - watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate( item, 0, undefined ); - } - i++; - } -} - -destroy_tactical_insertions() -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - if ( !isDefined( player.tacticalinsertion ) ) - { - i++; - continue; - } - else - { - if ( player.tacticalinsertion istouching( self ) ) - { - player.tacticalinsertion maps/mp/_tacticalinsertion::destroy_tactical_insertion(); - } - } - i++; - } -} - -destroy_supply_crates() -{ - crates = getentarray( "care_package", "script_noteworthy" ); - i = 0; - while ( i < crates.size ) - { - crate = crates[ i ]; - if ( crate istouching( self ) ) - { - playfx( level._supply_drop_explosion_fx, crate.origin ); - playsoundatposition( "wpn_grenade_explode", crate.origin ); - wait 0,1; - crate maps/mp/killstreaks/_supplydrop::cratedelete(); - } - i++; - } -} - -destroy_corpses() -{ - corpses = getcorpsearray(); - i = 0; - while ( i < corpses.size ) - { - if ( distance2dsquared( corpses[ i ].origin, self.origin ) < 1048576 ) - { - corpses[ i ] delete(); - } - i++; - } -} - -destroy_stuck_weapons() -{ - weapons = getentarray( "sticky_weapon", "targetname" ); - origin = self getpointinbounds( 0, 0, -0,6 ); - z_cutoff = origin[ 2 ]; - i = 0; - while ( i < weapons.size ) - { - weapon = weapons[ i ]; - if ( weapon istouching( self ) && weapon.origin[ 2 ] > z_cutoff ) - { - weapon delete(); - } - i++; - } -} - -getwatcherforweapon( weapname ) -{ - if ( !isDefined( self ) ) - { - return undefined; - } - if ( !isplayer( self ) ) - { - return undefined; - } - i = 0; - while ( i < self.weaponobjectwatcherarray.size ) - { - if ( self.weaponobjectwatcherarray[ i ].weapon != weapname ) - { - i++; - continue; - } - else - { - return self.weaponobjectwatcherarray[ i ]; - } - i++; - } - return undefined; -} diff --git a/Multiplayer Maps/mp_mirage/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_mirage/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_mirage/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_mirage/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_mirage/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_mirage/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_mirage/maps/mp/createfx/mp_mirage_fx.gsc b/Multiplayer Maps/mp_mirage/maps/mp/createfx/mp_mirage_fx.gsc deleted file mode 100644 index 7324ce9..0000000 --- a/Multiplayer Maps/mp_mirage/maps/mp/createfx/mp_mirage_fx.gsc +++ /dev/null @@ -1,1700 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1091,16, 21,5789, -15,3096 ); - ent.v[ "angles" ] = ( 10, 180, 0 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -596,184, 114,64, 3,71116 ); - ent.v[ "angles" ] = ( 360, 180, 0 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1593,32, 244,803, -50,4112 ); - ent.v[ "angles" ] = ( 5, 180, 0 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1950,07, 665,598, -82,5685 ); - ent.v[ "angles" ] = ( 360, 180, 0 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1751,17, 1241,41, -47,7047 ); - ent.v[ "angles" ] = ( 360, 180, 0 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2036,56, 1437,56, -47,8889 ); - ent.v[ "angles" ] = ( 360, 180, 0 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1751,14, 1633,92, -6,7206 ); - ent.v[ "angles" ] = ( 12, 180, -13 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 240,209, 263,864, 0 ); - ent.v[ "angles" ] = ( 360, 180, 0 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -202,286, 312,01, 0 ); - ent.v[ "angles" ] = ( 360, 180, 0 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 636,783, 124,097, 0 ); - ent.v[ "angles" ] = ( 360, 180, 0 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1060,99, 386,494, -1 ); - ent.v[ "angles" ] = ( 360, 180, 0 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1316,42, 769,33, 4,3183 ); - ent.v[ "angles" ] = ( 360, 180, 0 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2520,85, 1109,48, 0,8895 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2908,66, 1101,73, 12,9798 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1794,22, 1550,08, 23,4582 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1363,96, 1594,85, 26,6079 ); - ent.v[ "angles" ] = ( 355,019, 180,437, -5,01824 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1109,69, 1382,94, 66,1692 ); - ent.v[ "angles" ] = ( 348,877, 201,141, -0,926659 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1586,02, 2240,7, 23,7261 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1181,25, 2527,9, 23,5668 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 774,856, 2669,9, 21,1304 ); - ent.v[ "angles" ] = ( 360, 180, 0 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -244,403, 2633,43, 27,2288 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -384,346, 2871,67, 27,4893 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -890,474, 2723,1, 24,9618 ); - ent.v[ "angles" ] = ( 360, 226, 0 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -681,631, 2494,51, 27,9246 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1241,15, 2027,04, 23,1111 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 231 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1623,84, 1579,48, 9,8956 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2623,63, 1135,37, 1,80512 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2123,18, 714,577, -5,50962 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2140,89, 1337,15, 20,8598 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1621,68, 709,732, -1,74518 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1482,18, 2079,48, 8,59846 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1482,91, 2574, 9,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 982,087, 2386,41, 11,4889 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 985,358, 2883,88, 9 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 497,569, 2741,65, 9 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -0,212731, 2741,96, 8 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -499,272, 2742,62, 8 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1010,08, 2583,29, 9 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1125,28, 707,128, -9,15419 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1154,78, 1214,82, 4,1803 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1126,95, 208,184, -3,74612 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 629,447, 125,845, -1 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 134,253, 122,355, -1 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -362,289, 121,904, 1 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -860,037, 128,301, 0,27426 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1359,23, 143,143, -41,1538 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1345,57, -356,737, -4,84829 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -845,29, -371,657, -3,57959 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -345,802, -363,995, -4,91145 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 155,889, -377,427, -4,52922 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 648,367, -370,228, -1,98896 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1858,9, 574,538, -77,0829 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1861,21, 76,1131, -70,0314 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1788,39, 1076,32, -89 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1289,62, 641,011, 23 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2354,68, 1079, -89 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2366,02, 579,598, -71,2848 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1802,43, 1578,19, -90,8889 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2301,12, 1578,09, -58,8877 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2785,92, 1404,29, -48,0723 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2363,7, 78,6753, -15,1506 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -500,453, 3247,06, 188,796 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4,03281, 3249,2, 172,289 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 499,666, 3243,33, 151,402 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2623,41, 1630,85, 52,7547 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3121,62, 1631,09, 173,887 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3127,95, 1131,07, 109,869 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3128,48, 630,281, 248,113 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1645,51, 1139,82, 242,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1155,63, -284,016, 61,87 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1652,66, -238,498, 150,253 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 506,859, 2140,17, 250 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2,91546, 2139,29, 247,032 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -493,73, 2135,46, 248,27 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1687,69, 1771,83, 298,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2290,58, 883,217, -88 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sun" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 417385, 809545, 411621 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -348,049, 2129,28, 27,2144 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -110,656, 2048,5, 27,3012 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 695,738, 2032,04, 23 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 563,011, 2327,7, 23 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 371,671, 2540,56, -40,854 ); - ent.v[ "angles" ] = ( 10, 217, 0 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -56,7814, 2450,61, -80,539 ); - ent.v[ "angles" ] = ( 345, 180, -24 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 420,208, 2853,79, 28,7489 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 673,677, 2918,76, 27 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1165,8, 2207,69, 21,4538 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 835,442, 2241,02, 24,6877 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 245 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 184,195, 2059,95, 27 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -603,306, 2881,29, 27 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1364,2, 1828,73, 39,26 ); - ent.v[ "angles" ] = ( 330, 180, 0 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1216,27, 1185,94, 74,1245 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1192,6, 946,894, 43,782 ); - ent.v[ "angles" ] = ( 0, 180, -18 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 175,402, 114,579, 3,89228 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 794,586, -25,4861, 4,27233 ); - ent.v[ "angles" ] = ( 0, 180, 14 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1220,07, 258,77, -1,57812 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2313,86, 559,111, 71,2447 ); - ent.v[ "angles" ] = ( 19,1717, 186,948, 13,5715 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2813,63, 1576,62, 58,4678 ); - ent.v[ "angles" ] = ( 4,97532, 179,686, -9,02184 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 894,861, 164,044, -7,73769 ); - ent.v[ "angles" ] = ( 350, 180, 0 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2703,86, 910,23, -41,3147 ); - ent.v[ "angles" ] = ( 320, 180, 11 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2578,19, 1551,26, 2,45107 ); - ent.v[ "angles" ] = ( 330, 180, -17 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2617,19, 1373,04, -35,1011 ); - ent.v[ "angles" ] = ( 330, 180, -11 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2390,42, 1282,34, -48,8889 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1991,37, 1781,42, 12,7667 ); - ent.v[ "angles" ] = ( 360, 180, -33 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 281,687, 1790,51, 539,968 ); - ent.v[ "angles" ] = ( 2,15829, 160,339, 17,8744 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 226,805, 1646,86, 590,497 ); - ent.v[ "angles" ] = ( 2,15829, 160,339, 17,8744 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -289,968, 1813,6, 530,813 ); - ent.v[ "angles" ] = ( 9,42481, 17,7219, -18,4054 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -232,37, 1660,01, 584,575 ); - ent.v[ "angles" ] = ( 9,42481, 17,7219, -18,4054 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1780,38, 1846,46, 320,825 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1355,77, 2101,54, 174,706 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1180,17, 2320,05, 174,012 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1025,8, 2430,29, 177,621 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1258,01, 2210,83, 177,59 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1722,18, 2252,54, 178,483 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2226,12, 1404,17, 175,828 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2454,68, 1586,02, 41,2666 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1379,05, 24,0002, 256,347 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2340,12, 1248,51, 94,4229 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2307,98, 1055,63, 93,9229 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1356,08, 2224,22, 223,428 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2181,91, -435,558, -26,2728 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2179,59, -936,481, 29,8614 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1677,1, -939,043, -25,0194 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1161,46, -1371,89, 40,1637 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -661,182, -1386,81, 41,4324 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -161,693, -1379,15, 40,1006 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 339,998, -1392,58, 40,4828 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 832,476, -1385,38, 43,0231 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1339,74, -1299,17, 106,882 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 372,146, 3856,57, 194,194 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 865,817, 3994,84, 218,772 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2910,28, 1550,47, 502,189 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2412,54, 1395,99, 251,979 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3560,59, 2005,79, 520,399 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3528,06, 657,5, 507,518 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2950, 942,555, 499,898 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1326,73, 2696,19, 260,389 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 846,058, 3007,01, 455,296 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 406,235, 2970,29, 373,637 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -954,391, 2117,66, 464,657 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1319,15, 517,609, 418,382 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -373,75, -52,6996, 493,678 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1335,18, 511,224, 206,787 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2242,69, 1735,49, 492,427 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1770,77, 293,89, 485,163 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2238,27, 635,589, 598,577 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1088,16, -237,124, 622,593 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -569,882, -230,191, 415,49 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 748,337, -439,471, 398,695 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 425,36, -203,352, 378,44 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 973,066, -162,95, 457,354 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1212,22, -213,581, 450,991 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3276,44, 1747,69, 229,887 ); - ent.v[ "angles" ] = ( 14,7791, 179,055, -18,1938 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3294,57, 910,166, 217,861 ); - ent.v[ "angles" ] = ( 16,7316, 182,356, 12,4879 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2922,74, 724,105, 198,562 ); - ent.v[ "angles" ] = ( 16,7316, 182,356, 40,4879 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 364,541, 3395,57, 41,5051 ); - ent.v[ "angles" ] = ( 358, 180, 0 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3104,14, 1640,3, 161,936 ); - ent.v[ "angles" ] = ( 10,9758, 180,326, -12,9102 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2635,76, 487,084, 196,835 ); - ent.v[ "angles" ] = ( 18,8055, 191,758, 22,7033 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2578,34, 187,633, 179,509 ); - ent.v[ "angles" ] = ( 20, 180, 0 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_dist_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 9922,66, 21899, 3600,31 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_dist_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -27600,3, 10659, 3749,9 ); - ent.v[ "angles" ] = ( 350,782, 193,211, -4,29339 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_dist_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 24368,4, -9748,88, 4609,06 ); - ent.v[ "angles" ] = ( 5, 180, 0 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_dist_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 25589,7, -3953,42, 5765,74 ); - ent.v[ "angles" ] = ( 5, 180, 0 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_dist_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 28085,9, 3334,54, 4868,93 ); - ent.v[ "angles" ] = ( 5, 180, 0 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_dist_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 19922,4, -15798,9, 3135,1 ); - ent.v[ "angles" ] = ( 5, 180, 0 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_dist_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 24723,8, 10135,8, 2319,61 ); - ent.v[ "angles" ] = ( 5, 180, 0 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_dist_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 17123,1, 16349,4, 2098,76 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1945,27, 1206,2, 271,73 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 826,329, 1238,07, 115,897 ); - ent.v[ "angles" ] = ( 5,72727, 160,904, -1,63441 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 649,534, 1398,28, 100,353 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 145 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1641,56, 1767,3, 43,2977 ); - ent.v[ "angles" ] = ( 11,7062, 172,267, -17,7939 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1365,73, 1815,19, 24,9879 ); - ent.v[ "angles" ] = ( 352, 180, 0 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1229,12, 976,699, 24 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -532,217, 173,497, 0,33713 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 206 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm_far" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1378, 1247, 24,1111 ); - ent.v[ "angles" ] = ( 5, 180, 0 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_md_dist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -909,386, 1254,69, 800,431 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 0, 1752,88, 27,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 8,21924, 1358,98, -39,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -221,909, 1460,25, -39,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 226,225, 1484,59, 63,6606 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1977,97, 2075, 36,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2225,8, 1631,59, 36,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1950,65, 186,472, 6,84163 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1508,45, 24,8757, 1,67484 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -884,779, 2176,01, 180,526 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1867,29, 2149,89, 24,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1170,48, 1419,85, 454,96 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2070,9, 402,547, 126,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1519,89, 10,0991, 118,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2311,02, 1550,94, 182,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2223,21, 1550,9, 182,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2134,84, 1551,06, 182,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2135,85, 1742,85, 182,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2224,22, 1742,7, 182,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2312,03, 1742,73, 182,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2135,94, 1647,44, 183,448 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2312,12, 1647,31, 183,448 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2388,07, 1774,99, 162,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2387,74, 1683,12, 162,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2019,74, 1760,27, 162,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2070,94, 1950,87, 182,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1967,5, 1951,76, 182,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1863,13, 1952,07, 182,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2072,41, 2207,05, 182,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1968,03, 2206,93, 182,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1863,66, 2207,25, 182,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2071,4, 2079,41, 182,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1863,84, 2078,62, 182,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2115,29, 2147,13, 170,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1819,93, 1985,75, 170,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1819,8, 2072, 170,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1818,63, 2202,83, 170,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1825,05, 1832,09, 138,246 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1888,77, 1831,99, 138,252 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1953,06, 1832,22, 138,251 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -614,031, 1253,47, 256,257 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -615,356, 1347,3, 256,252 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -615,255, 1440,95, 256,25 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -795,543, 1442,09, 256,243 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -796,641, 1348,38, 256,245 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -797,313, 1254,45, 256,25 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -799,677, 1553,73, 230,249 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -703,951, 1553,24, 229,253 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -608,215, 1553,34, 230,252 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 656,562, 1547, 187,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 705,216, 1547,4, 188,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 753,445, 1547,2, 188,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1613,67, 1535,77, 17,5144 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2092,7, 1339,74, 18,9001 ); - ent.v[ "angles" ] = ( 356,685, 165,763, 11,4656 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1722, 1808,95, 178,388 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2668,47, 2152,08, 155,252 ); - ent.v[ "angles" ] = ( 20,7116, 177,949, -13,5616 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2703,5, 2516,54, 162,2 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dust_xlg_fast" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 248,016, 1701,75, 568,556 ); - ent.v[ "angles" ] = ( 0, 160,109, 16,9886 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dust_xlg_fast" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 50,1204, 1703,15, 529,166 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_shower_dribble" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -834,148, 2990,31, 120,355 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_shower_dribble_splsh" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -834,711, 2987,93, 26,2107 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_shower_dribble" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -970,285, 2853,68, 119,688 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_shower_dribble_splsh" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -968,541, 2853,7, 25,5433 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_shower_dribble" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -924,863, 2899,44, 119,547 ); - ent.v[ "angles" ] = ( 89, 180, -180 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_shower_dribble_splsh" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -920,339, 2891,14, 25,9565 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dust_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 11,3677, 1618,27, 374,937 ); - ent.v[ "angles" ] = ( 40, 270, 90 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2175,81, 954,268, 19,5051 ); - ent.v[ "angles" ] = ( 342, 180, -10 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2030,93, 708,931, 2,98323 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1614,16, 644,316, 14,3407 ); - ent.v[ "angles" ] = ( 0, 180, 11 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -977,887, 2424,62, 27,579 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 603,051, 1997,34, 471,974 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 109,131, 2039,98, 300,305 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 456,487, 1997,09, 472,36 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -250,935, 1998,33, 471,362 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distortion_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 614,392, -1908,18, 0,778503 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distortion_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2228,95, -1517,94, -102,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distortion_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 683,936, 3969,65, 185,814 ); - ent.v[ "angles" ] = ( 270, 0, -180 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_md_dist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -705,043, 905,671, 605,985 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_md_dist" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -910,118, 1470,7, 796,54 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2639,45, 1309,46, 430,593 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1618,48, 1712,38, 243,618 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 325,064, 3924,93, 471,421 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 903,79, 4201,08, 542,233 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 586,44, 4636,06, 433,914 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3501,44, 659,554, 382,335 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1653,44, 893,845, 273,388 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1802,35, 561,124, 251,033 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1407,7, 1130,36, 272,622 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_int_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2229,13, 336,441, 51,7138 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_int_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2228,96, 225,435, 52,1552 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_int_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2227,96, 114,408, 65,6977 ); - ent.v[ "angles" ] = ( 360, 180, 0 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_int_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2232,27, -17,0891, 66,0932 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_fall_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2241,25, 362,757, 254,298 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1477,85, 169,142, 117,875 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1029,78, 1884,33, 279,075 ); - ent.v[ "angles" ] = ( 19, 360, 0 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1045,66, 1813,18, 280,075 ); - ent.v[ "angles" ] = ( 19, 360, 0 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1024,83, 1782,77, 280,075 ); - ent.v[ "angles" ] = ( 19, 360, 0 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1002,67, 1752,08, 280,075 ); - ent.v[ "angles" ] = ( 19, 360, 0 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1018,65, 1681,44, 280,075 ); - ent.v[ "angles" ] = ( 19, 360, 0 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -198,845, 482,294, 172,276 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1,11494, 481,152, 174,279 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 196,77, 481,294, 174,277 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_int_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -726,043, 2206,27, 174,921 ); - ent.v[ "angles" ] = ( 355, 180, 0 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_godray_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -716,878, 2210,33, 261,129 ); - ent.v[ "angles" ] = ( 43,5496, 198,082, 12,678 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_godray_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -45,8602, 1480,96, 268,061 ); - ent.v[ "angles" ] = ( 42,8213, 247,927, -15,4103 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_godray_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 73,1952, 1578,19, 238,74 ); - ent.v[ "angles" ] = ( 42,8213, 247,927, -15,4103 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_godray_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -213,454, 1555,1, 242,305 ); - ent.v[ "angles" ] = ( 42,8213, 247,927, -15,4103 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_godray_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2027,63, 183,937, 50,6113 ); - ent.v[ "angles" ] = ( 10, 185, 0 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_godray_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2025,95, 85,9741, 41,9854 ); - ent.v[ "angles" ] = ( 10, 192, 0 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_godray_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2038,06, -57,1976, 60,9706 ); - ent.v[ "angles" ] = ( 7, 197, 0 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_godray_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2027,27, 349,371, 25,897 ); - ent.v[ "angles" ] = ( 12, 164, 0 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_godray_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1798,41, 2165,83, 131,125 ); - ent.v[ "angles" ] = ( 35, 270, 0 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_godray_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1911,09, 2162,95, 135,452 ); - ent.v[ "angles" ] = ( 35, 270, 0 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_godray_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1715,29, 2161,09, 127,314 ); - ent.v[ "angles" ] = ( 35, 270, 0 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_godray_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1985,12, 2159,55, 130,548 ); - ent.v[ "angles" ] = ( 35, 270, 0 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 897,696, 4788,78, 578,073 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1714,79, 3812,23, 825,609 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1944,33, 3229,31, 621,89 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3488,29, 2622,54, 870,884 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 553,282, 3521,04, 567,992 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 400,069, 4161,27, 568,934 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 28,7965, 3061,74, 560,321 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distortion_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4110,31, 1859,71, -88,1768 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3509,14, 1835,98, 426,776 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_foliage_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1207,08, -1749,98, 806,649 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distortion_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3431,97, 2520,41, 294,293 ); - ent.v[ "angles" ] = ( 270, 0, -180 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1615,16, 3056,38, 199,884 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 134 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1631,36, 2704,26, 34,2679 ); - ent.v[ "angles" ] = ( 0, 180, -13 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1604,32, 132,018, 118,25 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1702,35, 112,9, 118,251 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -970,92, 2583,59, 167,442 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -929,168, 2593,17, 166,942 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -879,67, 2609,55, 166,438 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -514,969, 2911,64, 166,949 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -522,627, 2869,33, 166,933 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -542,725, 2829,3, 166,94 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -733,218, 2041,9, 302,249 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -731,652, 2278,22, 302,255 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1047,2, 2278,07, 302,251 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1016,29, 2044,48, 302,251 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -605,784, 1062,47, 289,259 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -604,939, 1768,64, 230,251 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -807,27, 1778,34, 230,251 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -507,609, 1669,29, 257,615 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -507,491, 1862,43, 257,875 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -370,069, 1211,38, 256,252 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -262,063, 1104,4, 256,253 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 280,665, 1099,93, 252,252 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 394,115, 1215,31, 252,255 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 514,388, 1854,96, 256,875 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 513,58, 1670,96, 257,624 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 712,761, 1178,95, 238,247 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 654,314, 1244,8, 246,875 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 746,779, 1245, 246,875 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 602,326, 1268,39, 237,253 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 613,946, 1510,23, 238,244 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 803,638, 1514,41, 238,252 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 748,242, 1448,84, 246,875 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 653,598, 1448,92, 246,875 ); - ent.v[ "angles" ] = ( 90, 4,49091, 4,49089 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_int_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -674,363, 1173,12, 2,65046 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_dust_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -741,161, 1038,45, 5,69958 ); - ent.v[ "angles" ] = ( 45, 90, 0 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_int_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -672,64, 1301,44, -40,5766 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -131,132, 3260,68, 60,9493 ); - ent.v[ "angles" ] = ( 354, 180, 0 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1460,74, 3053,21, 56,1114 ); - ent.v[ "angles" ] = ( 4, 180, 0 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1198,32, 3257,22, 78,7027 ); - ent.v[ "angles" ] = ( 1, 180, 0 ); - ent.v[ "delay" ] = -67; -} diff --git a/Multiplayer Maps/mp_mirage/maps/mp/mp_mirage.gsc b/Multiplayer Maps/mp_mirage/maps/mp/mp_mirage.gsc deleted file mode 100644 index 31f2535..0000000 --- a/Multiplayer Maps/mp_mirage/maps/mp/mp_mirage.gsc +++ /dev/null @@ -1,39 +0,0 @@ -#include maps/mp/gametypes/_spawning; -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_mirage_fx::main(); - precachemodel( "collision_physics_256x256x10" ); - precachemodel( "collision_physics_cylinder_32x128" ); - precachemodel( "collision_clip_128x128x10" ); - precachemodel( "collision_clip_256x256x10" ); - maps/mp/_load::main(); - maps/mp/mp_mirage_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_mirage" ); - setdvar( "compassmaxrange", "2400" ); - visionsetnaked( "mp_mirage", 1 ); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - spawncollision( "collision_physics_256x256x10", "collider", ( 58,5, 3360, 53,5 ), vectorScale( ( 0, 0, -1 ), 352,9 ) ); - spawncollision( "collision_physics_cylinder_32x128", "collider", ( 3029, 1571,5, 129,5 ), vectorScale( ( 0, 0, -1 ), 8,3 ) ); - spawncollision( "collision_physics_cylinder_32x128", "collider", ( -1341, 517,5, -35,5 ), ( 354,7, 0, -0,6 ) ); - spawncollision( "collision_clip_256x256x10", "collider", ( 1744, 482, 16 ), ( 270, 183,902, 86,0983 ) ); - maps/mp/gametypes/_spawning::level_use_unified_spawning( 1 ); -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2500", reset_dvars ); -} diff --git a/Multiplayer Maps/mp_mirage/maps/mp/mp_mirage_amb.gsc b/Multiplayer Maps/mp_mirage/maps/mp/mp_mirage_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_mirage/maps/mp/mp_mirage_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_mirage/maps/mp/mp_mirage_fx.gsc b/Multiplayer Maps/mp_mirage/maps/mp/mp_mirage_fx.gsc deleted file mode 100644 index b0d4b44..0000000 --- a/Multiplayer Maps/mp_mirage/maps/mp/mp_mirage_fx.gsc +++ /dev/null @@ -1,51 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); - -main() -{ - precache_fxanim_props(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_mirage_fx::main(); -} - -precache_scripted_fx() -{ -} - -precache_createfx_fx() -{ - level._effect[ "fx_mp_distortion_md" ] = loadfx( "maps/mp_maps/fx_mp_mirage_distortion_md" ); - level._effect[ "fx_mp_distortion_lg" ] = loadfx( "maps/mp_maps/fx_mp_mirage_distortion_lg" ); - level._effect[ "fx_mp_sand_gust_int_sm" ] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_gust_int_sm" ); - level._effect[ "fx_mp_dust_lg" ] = loadfx( "maps/mp_maps/fx_mp_mirage_dust_lg" ); - level._effect[ "fx_mp_dust_xlg" ] = loadfx( "maps/mp_maps/fx_mp_mirage_dust_xlg" ); - level._effect[ "fx_mp_dust_xlg_fast" ] = loadfx( "maps/mp_maps/fx_mp_mirage_dust_xlg_fast" ); - level._effect[ "fx_mp_foliage_gust" ] = loadfx( "maps/mp_maps/fx_mp_mirage_foliage_gust" ); - level._effect[ "fx_mp_sand_dist_md" ] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_dist_md" ); - level._effect[ "fx_mp_sand_fall_md" ] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_fall_md" ); - level._effect[ "fx_mp_sand_fall_md_dist" ] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_fall_md_dist" ); - level._effect[ "fx_mp_sand_fall_sm" ] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_fall_sm" ); - level._effect[ "fx_mp_sand_gust_md" ] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_gust_md" ); - level._effect[ "fx_mp_sand_gust_sm" ] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_gust_sm" ); - level._effect[ "fx_mp_sand_gust_sm_far" ] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_gust_sm_far" ); - level._effect[ "fx_mp_godray_md" ] = loadfx( "maps/mp_maps/fx_mp_mirage_godray_md" ); - level._effect[ "fx_mp_godray_lg" ] = loadfx( "maps/mp_maps/fx_mp_mirage_godray_lg" ); - level._effect[ "fx_mp_godray_sm" ] = loadfx( "maps/mp_maps/fx_mp_mirage_godray_sm" ); - level._effect[ "fx_mp_sand_wind" ] = loadfx( "maps/mp_maps/fx_mp_mirage_sand_wind" ); - level._effect[ "fx_mp_light_sm" ] = loadfx( "maps/mp_maps/fx_mp_mirage_light_sm" ); - level._effect[ "fx_mp_sun" ] = loadfx( "lens_flares/fx_lf_mp_mirage_sun1" ); - level._effect[ "fx_water_shower_dribble_splsh" ] = loadfx( "water/fx_water_shower_dribble_sm_splsh" ); - level._effect[ "fx_water_shower_dribble" ] = loadfx( "water/fx_water_shower_dribble_sm" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "lantern_lrg" ] = %fxanim_mp_mirage_lantern_lrg_anim; - level.scr_anim[ "fxanim_props" ][ "lantern_sm" ] = %fxanim_mp_mirage_lantern_sm_anim; - level.scr_anim[ "fxanim_props" ][ "lamp" ] = %fxanim_mp_mirage_lamp_anim; - level.scr_anim[ "fxanim_props" ][ "ruined_lanterns" ] = %fxanim_mp_mirage_lanterns_ruined_anim; - level.scr_anim[ "fxanim_props" ][ "lanterns_string" ] = %fxanim_mp_mirage_lanterns_string_anim; - level.scr_anim[ "fxanim_props" ][ "lantern_lrg_02" ] = %fxanim_mp_mirage_lantern_lrg_02_anim; -} diff --git a/Multiplayer Maps/mp_nightclub/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_nightclub/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_nightclub/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_nightclub/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_nightclub/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_nightclub/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_nightclub/maps/mp/createart/mp_nightclub_art.gsc b/Multiplayer Maps/mp_nightclub/maps/mp/createart/mp_nightclub_art.gsc deleted file mode 100644 index 4f5c879..0000000 --- a/Multiplayer Maps/mp_nightclub/maps/mp/createart/mp_nightclub_art.gsc +++ /dev/null @@ -1,18 +0,0 @@ - -main() -{ - level.tweakfile = 1; - setdvar( "visionstore_glowTweakEnable", "0" ); - setdvar( "visionstore_glowTweakRadius0", "5" ); - setdvar( "visionstore_glowTweakRadius1", "" ); - setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); - setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); - setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); - setdvar( "visionstore_glowTweakBloomIntensity1", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); - visionsetnaked( "mp_nightclub", 1 ); - setdvar( "r_lightGridEnableTweaks", 1 ); - setdvar( "r_lightGridIntensity", 1,4 ); - setdvar( "r_lightGridContrast", 0 ); -} diff --git a/Multiplayer Maps/mp_nightclub/maps/mp/createfx/mp_nightclub_fx.gsc b/Multiplayer Maps/mp_nightclub/maps/mp/createfx/mp_nightclub_fx.gsc deleted file mode 100644 index e465cf5..0000000 --- a/Multiplayer Maps/mp_nightclub/maps/mp/createfx/mp_nightclub_fx.gsc +++ /dev/null @@ -1,2760 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_mist" ); - ent.v[ "origin" ] = ( -16947,6, 1036,3, 89,6801 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 227 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); - ent.v[ "origin" ] = ( -17262,3, 1779,14, -38 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 313 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); - ent.v[ "origin" ] = ( -16883,4, 871,543, -52 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 62 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); - ent.v[ "origin" ] = ( -16262,8, 1545,59, -54,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 97 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); - ent.v[ "origin" ] = ( -16319,4, 1314,85, -88 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 187 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); - ent.v[ "origin" ] = ( -17523,1, 502,205, -94,25 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 245 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_laser_blue_static" ); - ent.v[ "origin" ] = ( -17162,9, 986,408, 35,3084 ); - ent.v[ "angles" ] = ( 25,3967, 238,24, -12,2032 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_laser_blue_static" ); - ent.v[ "origin" ] = ( -16577,3, 1511,27, 53 ); - ent.v[ "angles" ] = ( 32, 266, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_vista_fog" ); - ent.v[ "origin" ] = ( -21294,7, 1734,81, -22,118 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_vista_fog" ); - ent.v[ "origin" ] = ( -19943,4, 4984,73, -110,446 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 310 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_vista_fog" ); - ent.v[ "origin" ] = ( -16010,3, 5875,07, -119,96 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 263 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_mp_firefly" ); - ent.v[ "origin" ] = ( -19077, 2023,36, 18,8227 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_mp_firefly" ); - ent.v[ "origin" ] = ( -18865,1, 2204,92, -20,3623 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_mp_firefly" ); - ent.v[ "origin" ] = ( -17797, 3449,98, -2 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_mp_firefly" ); - ent.v[ "origin" ] = ( -17547,5, 3567,87, -29,7848 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_mp_firefly" ); - ent.v[ "origin" ] = ( -16962,7, 3358,8, -185,957 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_mp_firefly" ); - ent.v[ "origin" ] = ( -16854, 3636,33, -181,583 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_mp_firefly" ); - ent.v[ "origin" ] = ( -15367,2, 3106,44, -119,687 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_mp_firefly" ); - ent.v[ "origin" ] = ( -17299,4, 3195,65, -178,935 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); - ent.v[ "origin" ] = ( -17160,3, 846,72, -65 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 266 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_laser_blue_static" ); - ent.v[ "origin" ] = ( -16526, 1526,26, 53 ); - ent.v[ "angles" ] = ( 44, 315, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_laser_blue_static" ); - ent.v[ "origin" ] = ( -16627, 1531,34, 54 ); - ent.v[ "angles" ] = ( 34, 240, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_laser_blue_static" ); - ent.v[ "origin" ] = ( -17037,7, 1126,07, 51,6667 ); - ent.v[ "angles" ] = ( 44, 53, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_laser_blue_static" ); - ent.v[ "origin" ] = ( -17028,7, 1025,4, 52,6667 ); - ent.v[ "angles" ] = ( 34, 338, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_laser_blue_static" ); - ent.v[ "origin" ] = ( -17015,8, 1077,37, 51,6667 ); - ent.v[ "angles" ] = ( 32, 4, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -17399,1, 1913,95, -22 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -17474,5, 1900,59, -11 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 186 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -19005, 1418,12, -156,044 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -18907, 1889,69, -155,089 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -19257,7, 580,886, -156 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -18673,7, 175,113, -156 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -18331,2, -393,151, -151 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -18274,1, 518,358, -164 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -17992,6, 1052,65, -140,458 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -18056,3, 1630,21, -136,444 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -17108,9, 2558,04, -144,433 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -16485,7, 2532,69, -146,685 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -16006,1, 2782,28, -150 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -17089,2, 3147,85, -137,72 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -16806,4, 3707,12, -110 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -17306,5, 3610,04, -118,32 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -16153, 3797,9, -154 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -15763,7, 3285,28, -147 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -15222,1, 3282,63, -141 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -15201,5, 2894,57, -162 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -17829,2, 2100,57, -39 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); - ent.v[ "origin" ] = ( -16151,7, 1914,14, -106 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 16 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); - ent.v[ "origin" ] = ( -15879,9, 1996,82, -113 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 185 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -16215, 2394,37, -147 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -15608, 3021,46, -153 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -15954, 3648,28, -114,376 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -17574,9, 3233,16, -104,62 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -18140,8, 3260,51, -98 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -18695,5, 3002,41, -88 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -18808,1, 2487, -125 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -18614,3, 2168,01, -108 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -18599,6, 1549,89, -138 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -19307,3, 1118,48, -156 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -18903,4, 388,731, -156 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -18793,9, -371,33, -147 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -17439,2, 2223,27, -43 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -16877,8, 2751,34, -142,832 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_mp_firefly" ); - ent.v[ "origin" ] = ( -17393,1, 3738,54, -83 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -18667, 588,432, -135,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 93 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -18827,2, 1051,51, -136,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 315 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -18512,2, 2292,24, -78,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 20 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -17800,7, 2949,98, -77,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 223 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_vista_fog" ); - ent.v[ "origin" ] = ( -21481,1, -1457,28, -14,7847 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 39 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_vista_spotlight01" ); - ent.v[ "origin" ] = ( -22297,8, 10396,7, -305,651 ); - ent.v[ "angles" ] = ( 287,114, 217,488, -83,1891 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_vista_spotlight02" ); - ent.v[ "origin" ] = ( -29544,2, 8247,57, -22,902 ); - ent.v[ "angles" ] = ( 270, 0, 62 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_vista_spotlight02" ); - ent.v[ "origin" ] = ( -12042,3, -2031,22, 334,424 ); - ent.v[ "angles" ] = ( 270, 0, 62 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_red_flash" ); - ent.v[ "origin" ] = ( -34125,3, 10603,4, 9766,02 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_red_flash" ); - ent.v[ "origin" ] = ( -8502,25, -5002,56, 9745,09 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_tank_bubbles" ); - ent.v[ "origin" ] = ( -17960,6, 263,018, -109,182 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_tank_bubbles" ); - ent.v[ "origin" ] = ( -18026,1, 214,757, -112,281 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_tank_bubbles" ); - ent.v[ "origin" ] = ( -18004,3, 182,681, -113,41 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_tank_bubbles" ); - ent.v[ "origin" ] = ( -17936,5, 245,174, -114,934 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_mp_firefly" ); - ent.v[ "origin" ] = ( -18758,3, 1832,34, -164,052 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_mp_firefly" ); - ent.v[ "origin" ] = ( -19191,4, 1905,53, -96,4394 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_mp_firefly" ); - ent.v[ "origin" ] = ( -19136,8, 1329,54, -179,032 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_mp_firefly" ); - ent.v[ "origin" ] = ( -18546,8, -52,4395, -152,106 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_mp_firefly" ); - ent.v[ "origin" ] = ( -18820,8, -1085,93, -355,127 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_mp_firefly" ); - ent.v[ "origin" ] = ( -18586,9, -1347,54, -357,228 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_nightclub_bar_light" ); - ent.v[ "origin" ] = ( -15549,5, 2381,68, -12,9216 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_nightclub_bar_light" ); - ent.v[ "origin" ] = ( -15583,3, 2321,16, -12,6912 ); - ent.v[ "angles" ] = ( 88, 87, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_nightclub_bar_light" ); - ent.v[ "origin" ] = ( -15535,5, 2443,75, -17,2216 ); - ent.v[ "angles" ] = ( 90, 0, 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_nightclub_bar_light" ); - ent.v[ "origin" ] = ( -15627,9, 2275,31, -12,4283 ); - ent.v[ "angles" ] = ( 90, 12,1698, 16,1698 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_nightclub_bar_light" ); - ent.v[ "origin" ] = ( -15686,3, 2236,1, -14,7572 ); - ent.v[ "angles" ] = ( 90, 0, 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -15538,2, 2524,28, -59,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 242 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -15737,3, 2651,26, -86 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 242 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -18028,9, 225,724, -82,7716 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_tank_bubbles" ); - ent.v[ "origin" ] = ( -18007,1, 229,824, -117,014 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -18683, 914,973, -2,875 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_area_fog" ); - ent.v[ "origin" ] = ( -16424,5, 3186,35, -30,875 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_mp_firefly" ); - ent.v[ "origin" ] = ( -18615,2, -184,097, -151,801 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_fireworks_runner" ); - ent.v[ "origin" ] = ( -32592,4, 3269,81, 4907,84 ); - ent.v[ "angles" ] = ( 293,048, 249,116, 168,917 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_fireworks_runner" ); - ent.v[ "origin" ] = ( -25786,4, 13211,2, 4123,72 ); - ent.v[ "angles" ] = ( 289,651, 26,3177, -112,438 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_vista_spotlight01" ); - ent.v[ "origin" ] = ( -28164,3, 1257,98, -303,876 ); - ent.v[ "angles" ] = ( 297,184, 248,043, -54,6899 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "origin" ] = ( -15286,9, 2476,05, -22,34 ); - ent.v[ "angles" ] = ( 90, 3,96799, -176,032 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "origin" ] = ( -15333,9, 2303,12, -21,3415 ); - ent.v[ "angles" ] = ( 90, 3,96799, -176,032 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "origin" ] = ( -15286,3, 2131,5, -21,337 ); - ent.v[ "angles" ] = ( 90, 3,96799, -176,032 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "origin" ] = ( -15407,4, 2014,32, -21,3334 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "origin" ] = ( -15640,6, 2010,58, -21,3374 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_fireworks_runner_02" ); - ent.v[ "origin" ] = ( -22292,4, 10417,8, -311,375 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_fireworks_runner_02" ); - ent.v[ "origin" ] = ( -28227,9, 1247,11, -311,375 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_nightclub_sun1" ); - ent.v[ "origin" ] = ( 117342, 198059, 132299 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -18539,1, 1430,9, 6,96914 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -18631,4, 1346,95, 7,64295 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -18632,5, 1197,5, 7,04885 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -18699,9, 1142,45, 6,41418 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -19156,5, 1967,21, -59,0252 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -18809,9, 2190,39, -60,1828 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); - ent.v[ "origin" ] = ( -18986,8, 2014,05, -135,861 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); - ent.v[ "origin" ] = ( -19206,6, 1983,36, -110,516 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); - ent.v[ "origin" ] = ( -19278,6, 1861,33, -111,037 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); - ent.v[ "origin" ] = ( -19123,5, 2021,03, 18,4326 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); - ent.v[ "origin" ] = ( -18883,9, 2220,76, 19 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); - ent.v[ "origin" ] = ( -18528, 1709,57, -110,651 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); - ent.v[ "origin" ] = ( -18586,5, 1929,8, -110,117 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -18883,1, 1142,5, 4,85368 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -19118,2, 1142,5, 6,36984 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -19205,5, 1044,12, 6,59046 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -19205,5, 861,448, 6,57288 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -19103,4, 709,899, 6,79024 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -18817, 611,713, 6,28608 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -18685,1, 503,253, 6,46426 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -18755,2, 2488,95, -23,1875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -18616,8, 2627,33, -23,5142 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -18590,2, 2954,62, -22,9736 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -18456,8, 3088,54, -22,519 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -18127,7, 3115,15, -23,8596 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -17990,7, 3253,95, -22,2686 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -16930,7, 3061,88, 6,85486 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -16770,5, 3128,49, 6,77435 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -16644,5, 3285,5, 6,43802 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -16643,5, 3610,15, 7,80851 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -16565,9, 3702,26, 6,1482 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -16361,6, 3702,37, 6,44853 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -16214,7, 3603,04, 7,2351 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -16118,6, 3318,27, 6,87422 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -17690,1, 3308,49, -61,21 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -17527,2, 3726,89, -60,1496 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -17323,1, 3819,52, -68,7982 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); - ent.v[ "origin" ] = ( -17513, 3489,78, -134,842 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); - ent.v[ "origin" ] = ( -17186,8, 3821,95, -157,874 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); - ent.v[ "origin" ] = ( -16647, 3619,2, -157,85 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); - ent.v[ "origin" ] = ( -15513,8, 2867,51, -56,7778 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); - ent.v[ "origin" ] = ( -15650,7, 2869,7, -55,8548 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); - ent.v[ "origin" ] = ( -15778,4, 2867,69, -55,9985 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); - ent.v[ "origin" ] = ( -15821,7, 2769,45, -55,8483 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); - ent.v[ "origin" ] = ( -15875,1, 2654,94, -56,0558 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); - ent.v[ "origin" ] = ( -15947,9, 2554, -55,821 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); - ent.v[ "origin" ] = ( -16043,3, 2466,53, -56,055 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); - ent.v[ "origin" ] = ( -15484,6, 2840,4, -55,8791 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); - ent.v[ "origin" ] = ( -16025,4, 2234,5, -40,1548 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); - ent.v[ "origin" ] = ( -15725,7, 2234,76, -39,4667 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); - ent.v[ "origin" ] = ( -15553,6, 2649,15, -40,1164 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -18091,8, 784,759, 5,92132 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -17114,4, 2869,88, -62,0578 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -16942,4, 2837,63, 5,42827 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); - ent.v[ "origin" ] = ( -17433,3, 3083,36, -110,897 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); - ent.v[ "origin" ] = ( -17212,4, 3024,81, -110,851 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_fire" ); - ent.v[ "origin" ] = ( -15783,2, 2417,59, -104,645 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 68 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -17201,9, 2952,87, -41,0503 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_club_ring_smk" ); - ent.v[ "origin" ] = ( -16617,9, 1115,89, 296 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -18121,5, -256,709, -91,4095 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -17808,4, -256,952, -92,8995 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -17641, -25,4045, -35,4541 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -17641,9, 141,276, -35,4757 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); - ent.v[ "origin" ] = ( -17585,9, 2186,94, 7,467 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); - ent.v[ "origin" ] = ( -17599,2, 2088,22, 5,46751 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); - ent.v[ "origin" ] = ( -17692,5, 2086,3, 5,442 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare03" ); - ent.v[ "origin" ] = ( -17942,9, 2165,33, 14,1474 ); - ent.v[ "angles" ] = ( 270, 0, -44 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare03" ); - ent.v[ "origin" ] = ( -17670, 2436,79, 14,8706 ); - ent.v[ "angles" ] = ( 270, 0, -44 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare04" ); - ent.v[ "origin" ] = ( -18101,7, 398,803, -61,7354 ); - ent.v[ "angles" ] = ( 270, 3,57633, 118,424 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare04" ); - ent.v[ "origin" ] = ( -18348,7, 290,444, -61,8678 ); - ent.v[ "angles" ] = ( 271, 175, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare04" ); - ent.v[ "origin" ] = ( -17803,2, 604,815, -61,3059 ); - ent.v[ "angles" ] = ( 271, 175, -84 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare04" ); - ent.v[ "origin" ] = ( -18362,3, 275,207, -61,8617 ); - ent.v[ "angles" ] = ( 271, 175, 5 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare04" ); - ent.v[ "origin" ] = ( -18362,3, 7,89001, -61,8155 ); - ent.v[ "angles" ] = ( 271, 175, 5 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare04" ); - ent.v[ "origin" ] = ( -18344,4, -10,2493, -61,4767 ); - ent.v[ "angles" ] = ( 271, 175, 98 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare04" ); - ent.v[ "origin" ] = ( -18199, -10,233, -60,4744 ); - ent.v[ "angles" ] = ( 271, 175, 98 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -19258, 1806,65, -76,0612 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -19331,7, 1678,53, -76,2787 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_fire" ); - ent.v[ "origin" ] = ( -15758,2, 2478,69, -104,643 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 250 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_fire" ); - ent.v[ "origin" ] = ( -15690,3, 2547,99, -104,642 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 222 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_fire" ); - ent.v[ "origin" ] = ( -15741,1, 2505,77, -104,644 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 40 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_fire" ); - ent.v[ "origin" ] = ( -15671,1, 2536,86, -104,638 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 250 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_fire" ); - ent.v[ "origin" ] = ( -15696, 2475,76, -104,64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 68 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_fire" ); - ent.v[ "origin" ] = ( -15714,5, 2450,5, -104,646 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 222 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_fire" ); - ent.v[ "origin" ] = ( -15765,2, 2408,27, -104,648 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 40 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16979,6, 3837,11, -192 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16833,1, 3849,84, -192 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16671, 3860,11, -192 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16524,5, 3870,21, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16373, 3881,74, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16215,6, 3886,85, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16067,6, 3888,5, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -15921,3, 3890,71, -192 ); - ent.v[ "angles" ] = ( 270, 0,149457, -0,149446 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -15785,7, 3494,92, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -15682,1, 3494,8, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -15577,6, 3495,38, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -15474,9, 3495,77, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -15330,3, 3495,16, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -15225,9, 3494,86, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -14998, 3450,57, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -14918,8, 3374,3, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -14867,1, 3272,31, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -14867,3, 2905,73, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -14918, 2803,93, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -14998,2, 2728,26, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -15943,1, 3543,59, -191,007 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16088, 3546,58, -191,013 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16233,2, 2732,54, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16333,1, 2762,77, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16433, 2792,22, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16532,1, 2822,37, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16631,6, 2851,58, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18692,6, -224,822, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -19398,7, 490,279, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -19394,3, 633,836, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -19384,9, 945,683, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -19372,3, 1091,78, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -19351,2, 1405,56, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -19339,3, 1551,15, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -19178,5, 1374,07, -189,292 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -19027,2, 1419,26, -190,248 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18848,1, 1404,12, -191,938 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18940,5, 1495,18, -189,407 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -19233,1, 1585,31, -191,2 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -19080, 1707,21, -190,564 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -19104,4, 1853,98, -189,149 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18956,7, 1912,3, -176,854 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18879,1, 2049,5, -161,058 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18733,3, 2099,4, -148,18 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18804,7, 1919,73, -167,606 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18770,9, 1797,74, -178,863 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18674,7, 1723,43, -187,592 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18567,7, 1633,69, -192,182 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18678,1, 1596,16, -191,125 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18381,1, 605,766, -75,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18196,9, 688,089, -72,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18173,4, 789,474, -72,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18252,4, 888,003, -72,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18329,6, 1130,58, -72,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18328,7, 1259,24, -72,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18329,2, 1369,39, -72,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17695,3, 1789,71, 73,2575 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17695,5, 1911,71, 73,2585 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17697,4, 2018,45, 73,2498 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17525,4, 2189,46, 73,2493 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17403,8, 2190,28, 73,2591 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17297,8, 2191,66, 73,254 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16470, 3430,39, -82,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16531,9, 3430,77, -82,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16594,2, 3431,09, -82,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16345,3, 2816,02, -80,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16411,4, 2834,39, -80,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16514,4, 2863,42, -80,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16578, 2884,56, -80,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16860, 2818,45, -72,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16715,5, 2818,2, -72,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16560,5, 2818,03, -72,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16381,2, 2745,94, -72,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16308,8, 2653,26, -72,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16181,3, 2699,06, -72,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16105,7, 2885,53, -72,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17431,8, 1865,1, 32 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17398,1, 1832,64, 32 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17337,1, 1893,98, 32 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17370, 1928,38, 32 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17176,6, 1848,56, 110 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17302,5, 1798,91, 110 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17353, 1673,46, 112 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17302,7, 1549,67, 111 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17178,7, 1497,54, 111 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17053,7, 1551,36, 110 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16997,8, 1678,95, 110 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17053,2, 1798,37, 111 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17911,5, 2248,04, 16,4376 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17877,2, 2281,76, 16,4387 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17844,2, 2315,4, 16,4343 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17809,2, 2350,37, 16,4386 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17775,4, 2385,19, 16,4386 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17741,1, 2418,92, 16,4406 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18173,8, 2592,38, -2 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18135,3, 2630,18, -2 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18096,6, 2668, -2 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17910,4, 2627,62, 47,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17834,1, 2703,35, 47,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17757,9, 2780,26, 47,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17682,3, 2857,09, 47,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18131,8, 2433,14, 47,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18312, 842,426, -80,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18332, 911,121, -80,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18197,1, 1960,08, 46,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18175,7, 1991,31, 46,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18157,3, 2022,63, 46,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18131,3, 2048,88, 45,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18106,4, 2073,47, 46,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18080,5, 2099,79, 46,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18055,1, 2125,06, 46,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18023,9, 2145,04, 46,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17992,4, 2164,96, 47,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17666,4, 2490,59, 47,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17646,5, 2521,89, 46,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17626,6, 2553,5, 46,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17601,1, 2578,74, 46,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17575,9, 2604,1, 46,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17550,4, 2629,21, 46,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17524,4, 2655,89, 46,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17493,4, 2675,55, 46,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17462,2, 2694,79, 47,875 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -16321,8, 954,617, 39,875 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -16458,3, 816,316, 39,875 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -16319,8, 677,462, 40,875 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -16182,4, 815,312, 39,875 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_cool" ); - ent.v[ "origin" ] = ( -17272,3, 855,064, 31 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_cool" ); - ent.v[ "origin" ] = ( -17201,4, 815,615, 31 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_cool" ); - ent.v[ "origin" ] = ( -17130,4, 798,371, 31 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_cool" ); - ent.v[ "origin" ] = ( -17066,7, 802,249, 30 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_cool" ); - ent.v[ "origin" ] = ( -16993,5, 833,443, 30 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -16356,4, 1766,76, 31 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -16322,1, 1705,53, 31 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -16304,5, 1635,05, 30 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -16307,5, 1558,84, 30 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -16337,4, 1489,52, 30 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -16186,6, 1875,69, 39,2978 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -16063,2, 1823,98, 38,295 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -15956,6, 1810,64, 37,3021 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -15855,5, 1852,9, 38,304 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -15775,7, 1929,53, 37,2979 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -15867,5, 2072,97, 37,3007 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -15999,5, 1940,69, 38,298 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -15930,9, 2010,16, 38,2959 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -15493,8, 2512,82, 31,875 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -15493,9, 2450,18, 31,875 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -15511,5, 2391,6, 31,875 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -15537,1, 2331,58, 31,875 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -15579,2, 2284,38, 30,875 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -15633,7, 2241,27, 31,875 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_warm" ); - ent.v[ "origin" ] = ( -15689,6, 2209,53, 31,875 ); - ent.v[ "angles" ] = ( 88,5859, 314,991, 135,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); - ent.v[ "origin" ] = ( -18154,9, 2467,98, 8,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 226 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); - ent.v[ "origin" ] = ( -17972,9, 2650,11, 8,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 226 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -15718,2, 3570,62, -39,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -15717,8, 3698,52, -38,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -15718,3, 3826,68, -39,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -15591,9, 3570,6, -39,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -15461,4, 3569,99, -39,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -15590,1, 3698,49, -39,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -15589,3, 3826,24, -39,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -15461,4, 3826,43, -39,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -15461,6, 3698,44, -39,125 ); - ent.v[ "angles" ] = ( 89, 0, -179,992 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -15625,2, 2040,68, -95 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -15311,7, 2580,88, -108 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 268 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -17726, -174,557, -117,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -17524,4, 208,04, -84,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flood_light" ); - ent.v[ "origin" ] = ( -19360,7, -88,6989, -98,9068 ); - ent.v[ "angles" ] = ( 37,6805, 45,4659, -92,9504 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flood_light" ); - ent.v[ "origin" ] = ( -19345,3, -101,805, -100,665 ); - ent.v[ "angles" ] = ( 33,7943, 34,7068, 68,3069 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flood_light" ); - ent.v[ "origin" ] = ( -19340,6, -96,5053, -77,6845 ); - ent.v[ "angles" ] = ( 16,7776, 48,6563, -79,8364 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); - ent.v[ "origin" ] = ( -18103,3, -173,657, -17,3201 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); - ent.v[ "origin" ] = ( -17943,4, -173,271, -15,3252 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); - ent.v[ "origin" ] = ( -17697,5, -174,193, -17,3258 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); - ent.v[ "origin" ] = ( -17553,7, -97,1301, -17,3229 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); - ent.v[ "origin" ] = ( -17549,9, -16,4068, -17,3227 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); - ent.v[ "origin" ] = ( -17551, 144,281, -17,3241 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); - ent.v[ "origin" ] = ( -17861,8, -173,744, -17,3317 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16436,6, 1321,9, 248,251 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16551,1, 1376,36, 249 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16676, 1341,99, 249 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16768,1, 1275,34, 249 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16834,4, 1183,19, 249 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16868,2, 1058,45, 249 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16821,4, 923,479, 248,252 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16692,2, 884,987, 249 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16567,4, 917,162, 249 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16475,5, 984,51, 249 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16409,6, 1076,31, 249 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16376, 1200,89, 249 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16206,1, 1031,8, 199 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16272,9, 996,463, 199 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16349,6, 947,451, 199 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16413, 897,28, 199 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16461, 832,284, 199 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16499,4, 770,442, 199 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16535,3, 703,829, 199 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -19307,3, -52,3023, -140,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 47 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_laser_blue_static" ); - ent.v[ "origin" ] = ( -17133,4, 983,978, 36,7995 ); - ent.v[ "angles" ] = ( 36,1065, 291,347, -7,10015 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18116,8, 2879,16, -1,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18090,7, 2905,58, -1,53871 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18064,9, 2930,82, -1,7265 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -17955,7, 3039,98, -0,87473 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -17982,2, 3015,41, -0,68694 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18006,9, 2989,02, -0,27324 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18065,8, 2930,99, -40,3684 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18090,4, 2905,28, -40,1806 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18115,5, 2879,17, -40,7669 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18008,7, 2989,56, -39,1838 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -17981,8, 3015,13, -39,5975 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -17956,7, 3041,06, -38,7853 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18116,9, 2879,97, -78,3747 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18091,1, 2905,72, -78,7885 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18064,8, 2931,38, -78,9762 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18008,5, 2990,13, -78,412 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -17981,6, 3015,7, -78,8257 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -17956,5, 3041,63, -78,0135 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18004, 2390,3, 14,875 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18025,5, 2411,16, 14,875 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -17893,5, 2501,39, 14,875 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -17914,2, 2522, 14,875 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18028,3, 2318,98, -17,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18051,6, 2295,42, -17,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18077,1, 2269,84, -17,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18211,3, 2135,38, -17,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18234,5, 2112,4, -17,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18260,2, 2086,56, -17,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16450,9, 3347,7, -76,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16451,4, 3288,39, -76,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16592,9, 3217,93, -76,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16529,7, 3217,22, -76,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16417,3, 3176,47, -76,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16352,8, 3176,63, -76,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16290,4, 3176,92, -76,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16228,5, 3176,94, -76,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16162,6, 3176,67, -76,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16465,8, 3103,25, -75,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16465,8, 3039,48, -75,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16417,6, 2968,56, -76,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16353,9, 2968,77, -76,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16225,7, 2968,13, -76,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16161,9, 2968,67, -76,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16118,2, 3039,32, -75,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16118,7, 3103,6, -75,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16290,1, 2968,49, -76,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16226,6, 2826,92, -76,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16289,6, 2844,91, -76,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16353,6, 2862,24, -75,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16417,4, 2882,58, -75,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -19003,7, 2415,18, -144 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18964,6, 2497,52, -144 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18802, 2659,61, -144 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18763,7, 2915,78, -144 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18720, 3050,94, -144 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18412, 3262, -144 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18150,8, 3314,24, -144 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17980,7, 3482,97, -144 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17918,5, 3500,77, -144 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18997,6, -275,912, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18998,4, -171,879, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18998,5, -379,943, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18953,3, -505,236, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18877,3, -584,013, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18775,7, -636,315, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18666, -659,119, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18517,3, -660,453, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18408,9, -636,482, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18306,2, -585,026, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18229,7, -505,354, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18190,1, -343,978, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18607, -219,183, -157 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18653, -217,389, -157 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18672,3, -151,646, -158 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16860, 638,489, 198,253 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16938,5, 718,482, 198,255 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -17018, 796,892, 198,259 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_laser_roller" ); - ent.v[ "origin" ] = ( -16825,1, 1322,15, 197 ); - ent.v[ "angles" ] = ( 54,952, 308,876, -4,48132 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_laser_disco" ); - ent.v[ "origin" ] = ( -16228,6, 1318,6, 190,705 ); - ent.v[ "angles" ] = ( 15,3541, 194,789, -1,1569 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_laser_disco" ); - ent.v[ "origin" ] = ( -16825,1, 715,555, 192,716 ); - ent.v[ "angles" ] = ( 17,2967, 70,4187, -0,791652 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); - ent.v[ "origin" ] = ( -14562,1, 3170,65, -156,083 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); - ent.v[ "origin" ] = ( -14561,8, 3007,41, -156,09 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); - ent.v[ "origin" ] = ( -14736,8, 3007,53, -156,065 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare" ); - ent.v[ "origin" ] = ( -14737,3, 3171,15, -156,053 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18295,2, -752,789, -192 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16144, 1353,09, 198,254 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16224,3, 1431,04, 198,252 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare02" ); - ent.v[ "origin" ] = ( -16304,1, 1510,57, 198,256 ); - ent.v[ "angles" ] = ( 90, 2,69214, -177,308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16913,5, 3062,13, -193 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16911,8, 2956,81, -193 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18787,6, 581,452, -96,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18787,8, 604,217, -97,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18788,2, 628,634, -96,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18788,6, 644,919, -96,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18788,4, 668,32, -96,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18788, 692,106, -96,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18788,3, 708,776, -95,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18788,5, 732,598, -96,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18788,4, 756,3, -96,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_mp_firefly" ); - ent.v[ "origin" ] = ( -19037,9, 1394,8, -195 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_nightclub_moon" ); - ent.v[ "origin" ] = ( 200148, 316107, 208956 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17806, 1142,62, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17789,5, 1080,04, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17775,8, 1018,76, -190 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -17762,5, 954,757, -190 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -18354,8, 1436,93, 6,34749 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -18142, 926,503, 5,18384 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -19123,3, 2255,54, -48,9937 ); - ent.v[ "angles" ] = ( 273,605, 236,287, 123,659 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -17815, 3565,73, -60,9021 ); - ent.v[ "angles" ] = ( 273,605, 236,287, 123,659 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -17666,8, 3714,34, -60,5045 ); - ent.v[ "angles" ] = ( 273,605, 236,287, 123,659 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare02" ); - ent.v[ "origin" ] = ( -18512,9, 1699,86, -70,6367 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -16094,7, 3697,1, -191,217 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -15938,8, 3696,11, -191,364 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_mist_sm" ); - ent.v[ "origin" ] = ( -16673,3, 1321,25, -52 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 215 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); - ent.v[ "origin" ] = ( -18248,1, 2149,78, -14,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 44 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_cyl_glare05" ); - ent.v[ "origin" ] = ( -18114,1, 2288,51, -13,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 44 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -16095,4, 3050,53, -132,751 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 172 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -15386,6, 3708,2, -119,051 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -19210,6, 274,906, -136,981 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 265 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -16588, 3356,79, -146,875 ); - ent.v[ "angles" ] = ( 0, 336, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); - ent.v[ "origin" ] = ( -17740,5, 179,522, -7,65209 ); - ent.v[ "angles" ] = ( 273, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); - ent.v[ "origin" ] = ( -17765,7, 143,731, -8,43552 ); - ent.v[ "angles" ] = ( 273, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); - ent.v[ "origin" ] = ( -17795,8, 108,716, -7,52192 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); - ent.v[ "origin" ] = ( -17835,1, 75,7021, -8,1626 ); - ent.v[ "angles" ] = ( 273, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); - ent.v[ "origin" ] = ( -17878,4, 51,7002, -7,48641 ); - ent.v[ "angles" ] = ( 273, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_sph_glare01" ); - ent.v[ "origin" ] = ( -17921,9, 37,6316, -8,00315 ); - ent.v[ "angles" ] = ( 273, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18693,6, -28,1875, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18503,2, -232,295, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18499,8, -35,2069, -190 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18535,4, -99,5975, -157 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( -18565,4, -57,538, -156 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -19049,8, 441,558, -190 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -19049,8, 581,598, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -19200,4, 578,639, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -19200,8, 441,334, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18748,3, 320,281, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18747,5, 259,329, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18659,2, 257,714, -190 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18659,1, 318,068, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18181,1, 1210,52, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18003,8, 1211,65, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18004,1, 1342,17, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18181, 1338,88, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16843, 2678,97, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16717,1, 2678,78, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16717,4, 2500,21, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -16844,5, 2500,12, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -15830,1, 3162,02, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -15829,7, 3237,58, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -15750,2, 3237,06, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -15749,7, 3162,65, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -15471,7, 3189,43, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -15472,5, 3000,2, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -15274, 3000,3, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -15274,5, 3190,49, -191 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18349,1, 666,265, -95,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18369,9, 654,226, -95,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18389,8, 641,23, -95,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18410,3, 628,778, -95,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18430, 615,24, -95,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18450,4, 602,715, -95,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18471,7, 589,625, -96,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18491,4, 576,86, -96,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare_sm" ); - ent.v[ "origin" ] = ( -18512, 564,174, -96,125 ); - ent.v[ "angles" ] = ( 90, 188,803, 8,80348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; -} diff --git a/Multiplayer Maps/mp_nightclub/maps/mp/mp_nightclub.gsc b/Multiplayer Maps/mp_nightclub/maps/mp/mp_nightclub.gsc deleted file mode 100644 index c879196..0000000 --- a/Multiplayer Maps/mp_nightclub/maps/mp/mp_nightclub.gsc +++ /dev/null @@ -1,27 +0,0 @@ -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_nightclub_fx::main(); - maps/mp/_load::main(); - maps/mp/mp_nightclub_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_nightclub" ); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2200", reset_dvars ); -} diff --git a/Multiplayer Maps/mp_nightclub/maps/mp/mp_nightclub_amb.gsc b/Multiplayer Maps/mp_nightclub/maps/mp/mp_nightclub_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_nightclub/maps/mp/mp_nightclub_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_nightclub/maps/mp/mp_nightclub_fx.gsc b/Multiplayer Maps/mp_nightclub/maps/mp/mp_nightclub_fx.gsc deleted file mode 100644 index 3752d3e..0000000 --- a/Multiplayer Maps/mp_nightclub/maps/mp/mp_nightclub_fx.gsc +++ /dev/null @@ -1,73 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); - -precache_util_fx() -{ -} - -precache_scripted_fx() -{ -} - -precache_createfx_fx() -{ - level._effect[ "fx_mp_light_dust_motes_md" ] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); - level._effect[ "fx_mp_light_laser_blue_fxanim" ] = loadfx( "maps/mp_maps/fx_mp_light_laser_bluee_fxanim" ); - level._effect[ "fx_mp_nightclub_tank_bubbles" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_tank_bubbles" ); - level._effect[ "fx_mp_nightclub_fire" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_fire" ); - level._effect[ "fx_insects_mp_firefly" ] = loadfx( "bio/insects/fx_insects_mp_firefly" ); - level._effect[ "fx_mp_nightclub_laser_roller" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_laser_roller" ); - level._effect[ "fx_mp_nightclub_laser_disco" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_laser_disco" ); - level._effect[ "fx_mp_light_laser_blue_static" ] = loadfx( "maps/mp_maps/fx_mp_light_laser_blue_static" ); - level._effect[ "fx_mp_nightclub_vista_spotlight01" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_vista_spotlight01" ); - level._effect[ "fx_mp_nightclub_vista_spotlight02" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_vista_spotlight02" ); - level._effect[ "fx_mp_nightclub_red_flash" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_red_flash" ); - level._effect[ "fx_nightclub_bar_light" ] = loadfx( "light/fx_nightclub_bar_light" ); - level._effect[ "fx_village_tube_light" ] = loadfx( "light/fx_village_tube_light" ); - level._effect[ "fx_mp_nightclub_cyl_glare" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_cyl_glare" ); - level._effect[ "fx_mp_nightclub_cyl_glare02" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_cyl_glare02" ); - level._effect[ "fx_mp_nightclub_cyl_glare03" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_cyl_glare03" ); - level._effect[ "fx_mp_nightclub_cyl_glare04" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_cyl_glare04" ); - level._effect[ "fx_mp_nightclub_cyl_glare05" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_cyl_glare05" ); - level._effect[ "fx_mp_nightclub_flr_glare" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_flr_glare" ); - level._effect[ "fx_mp_nightclub_flr_glare_cool" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_flr_glare_cool" ); - level._effect[ "fx_mp_nightclub_flr_glare_warm" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_flr_glare_warm" ); - level._effect[ "fx_mp_nightclub_flr_glare_sm" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_flr_glare_sm" ); - level._effect[ "fx_mp_nightclub_flr_glare02" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_flr_glare02" ); - level._effect[ "fx_mp_nightclub_sph_glare01" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_sph_glare01" ); - level._effect[ "fx_mp_nightclub_flood_light" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_flood_light" ); - level._effect[ "fx_mp_nightclub_fireworks_runner" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_fireworks_runner" ); - level._effect[ "fx_mp_nightclub_fireworks_runner_02" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_fireworks_runner_02" ); - level._effect[ "fx_mp_nightclub_mist" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_mist" ); - level._effect[ "fx_mp_nightclub_mist_sm" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_mist_sm" ); - level._effect[ "fx_mp_nightclub_vista_fog" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_vista_fog" ); - level._effect[ "fx_mp_nightclub_area_fog" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_area_fog" ); - level._effect[ "fx_mp_nightclub_club_ring_smk" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_club_ring_smk" ); - level._effect[ "fx_lf_mp_nightclub_sun1" ] = loadfx( "lens_flares/fx_lf_mp_nightclub_sun1" ); - level._effect[ "fx_lf_mp_nightclub_moon" ] = loadfx( "lens_flares/fx_lf_mp_nightclub_moon" ); - level._effect[ "fx_mp_nightclub_spotlight" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_spotlight" ); - level._effect[ "fx_mp_light_laser_blue_fxanim" ] = loadfx( "maps/mp_maps/fx_mp_light_laser_blue_fxanim" ); -} - -main() -{ - precache_fxanim_props(); - precache_util_fx(); - precache_createfx_fx(); - precache_scripted_fx(); - maps/mp/createfx/mp_nightclub_fx::main(); - maps/mp/createart/mp_nightclub_art::main(); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "shopping_lights_short" ] = %fxanim_gp_shopping_lights_short_anim; - level.scr_anim[ "fxanim_props" ][ "shopping_lights_long" ] = %fxanim_gp_shopping_lights_long_anim; - level.scr_anim[ "fxanim_props" ][ "skylight" ] = %fxanim_gp_skylight_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_01" ] = %fxanim_gp_seagull_circle_01_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_02" ] = %fxanim_gp_seagull_circle_02_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_03" ] = %fxanim_gp_seagull_circle_03_anim; - level.scr_anim[ "fxanim_props" ][ "roofvent" ] = %fxanim_gp_roofvent_anim; - level.scr_anim[ "fxanim_props" ][ "solar_system" ] = %fxanim_karma_solar_system_anim; -} diff --git a/Multiplayer Maps/mp_nuketown_2020/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_nuketown_2020/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_nuketown_2020/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_nuketown_2020/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_nuketown_2020/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_nuketown_2020/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_nuketown_2020/maps/mp/_events.gsc b/Multiplayer Maps/mp_nuketown_2020/maps/mp/_events.gsc deleted file mode 100644 index 9f7ac09..0000000 --- a/Multiplayer Maps/mp_nuketown_2020/maps/mp/_events.gsc +++ /dev/null @@ -1,114 +0,0 @@ -#include maps/mp/gametypes/_globallogic_utils; -#include maps/mp/_utility; - -add_timed_event( seconds, notify_string, client_notify_string ) -{ -/# - assert( seconds >= 0 ); -#/ - if ( level.timelimit > 0 ) - { - level thread timed_event_monitor( seconds, notify_string, client_notify_string ); - } -} - -timed_event_monitor( seconds, notify_string, client_notify_string ) -{ - for ( ;; ) - { - wait 0,5; - if ( !isDefined( level.starttime ) ) - { - continue; - } - else - { - millisecs_remaining = maps/mp/gametypes/_globallogic_utils::gettimeremaining(); - seconds_remaining = millisecs_remaining / 1000; - if ( seconds_remaining <= seconds ) - { - event_notify( notify_string, client_notify_string ); - return; - } - } - } -} - -add_score_event( score, notify_string, client_notify_string ) -{ -/# - assert( score >= 0 ); -#/ - if ( level.scorelimit > 0 ) - { - if ( level.teambased ) - { - level thread score_team_event_monitor( score, notify_string, client_notify_string ); - return; - } - else - { - level thread score_event_monitor( score, notify_string, client_notify_string ); - } - } -} - -any_team_reach_score( score ) -{ - _a63 = level.teams; - _k63 = getFirstArrayKey( _a63 ); - while ( isDefined( _k63 ) ) - { - team = _a63[ _k63 ]; - if ( game[ "teamScores" ][ team ] >= score ) - { - return 1; - } - _k63 = getNextArrayKey( _a63, _k63 ); - } - return 0; -} - -score_team_event_monitor( score, notify_string, client_notify_string ) -{ - for ( ;; ) - { - wait 0,5; - if ( any_team_reach_score( score ) ) - { - event_notify( notify_string, client_notify_string ); - return; - } - } -} - -score_event_monitor( score, notify_string, client_notify_string ) -{ - for ( ;; ) - { - wait 0,5; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( isDefined( players[ i ].score ) && players[ i ].score >= score ) - { - event_notify( notify_string, client_notify_string ); - return; - } - i++; - } - } -} - -event_notify( notify_string, client_notify_string ) -{ - if ( isDefined( notify_string ) ) - { - level notify( notify_string ); - } - if ( isDefined( client_notify_string ) ) - { - clientnotify( client_notify_string ); - } -} diff --git a/Multiplayer Maps/mp_nuketown_2020/maps/mp/createart/mp_nuketown_2020_art.gsc b/Multiplayer Maps/mp_nuketown_2020/maps/mp/createart/mp_nuketown_2020_art.gsc deleted file mode 100644 index c6e19b0..0000000 --- a/Multiplayer Maps/mp_nuketown_2020/maps/mp/createart/mp_nuketown_2020_art.gsc +++ /dev/null @@ -1,6 +0,0 @@ - -main() -{ - level.tweakfile = 1; - visionsetnaked( "mp_nuketown_2020", 1 ); -} diff --git a/Multiplayer Maps/mp_nuketown_2020/maps/mp/createfx/mp_nuketown_2020_fx.gsc b/Multiplayer Maps/mp_nuketown_2020/maps/mp/createfx/mp_nuketown_2020_fx.gsc deleted file mode 100644 index 655fe48..0000000 --- a/Multiplayer Maps/mp_nuketown_2020/maps/mp/createfx/mp_nuketown_2020_fx.gsc +++ /dev/null @@ -1,708 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); - ent.v[ "origin" ] = ( 493,501, 688,64, -56,4796 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); - ent.v[ "origin" ] = ( 553,122, 717,293, -55,6752 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); - ent.v[ "origin" ] = ( -2060,08, 418,913, -22,7122 ); - ent.v[ "angles" ] = ( 296,723, 343,848, 85,683 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); - ent.v[ "origin" ] = ( -2055,91, 417,203, -36,6966 ); - ent.v[ "angles" ] = ( 296,723, 343,848, 85,683 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); - ent.v[ "origin" ] = ( -2064,28, 419,257, -7,556 ); - ent.v[ "angles" ] = ( 296,723, 343,848, 85,683 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); - ent.v[ "origin" ] = ( -2046,87, 466,933, -7,1742 ); - ent.v[ "angles" ] = ( 296,723, 343,848, 85,683 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); - ent.v[ "origin" ] = ( -2043,38, 463,457, -22,9327 ); - ent.v[ "angles" ] = ( 296,723, 343,848, 85,683 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); - ent.v[ "origin" ] = ( -2039,36, 461,972, -36,5077 ); - ent.v[ "angles" ] = ( 296,723, 343,848, 85,683 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); - ent.v[ "origin" ] = ( -2110,04, 265,92, -36,9367 ); - ent.v[ "angles" ] = ( 303,047, 341,706, 85,7265 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); - ent.v[ "origin" ] = ( -2114,09, 267,185, -22,5504 ); - ent.v[ "angles" ] = ( 303,047, 341,706, 85,7265 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); - ent.v[ "origin" ] = ( -2118,41, 268,561, -7,0307 ); - ent.v[ "angles" ] = ( 303,047, 341,706, 85,7265 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); - ent.v[ "origin" ] = ( -2102,2, 316,877, -7,9691 ); - ent.v[ "angles" ] = ( 298,064, 342,497, 85,0622 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); - ent.v[ "origin" ] = ( -2097,43, 314,416, -22,1389 ); - ent.v[ "angles" ] = ( 303,047, 341,706, 85,7265 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); - ent.v[ "origin" ] = ( -2093,61, 311,726, -36,8962 ); - ent.v[ "angles" ] = ( 303,047, 341,706, 85,7265 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); - ent.v[ "origin" ] = ( -2003,36, 563,173, -36,3606 ); - ent.v[ "angles" ] = ( 296,723, 343,848, 85,683 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); - ent.v[ "origin" ] = ( -2007,67, 564,257, -22,3762 ); - ent.v[ "angles" ] = ( 296,723, 343,848, 85,683 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); - ent.v[ "origin" ] = ( -2012,94, 564,872, -7,22 ); - ent.v[ "angles" ] = ( 296,723, 343,848, 85,683 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); - ent.v[ "origin" ] = ( -1994,78, 612,118, -7,8383 ); - ent.v[ "angles" ] = ( 296,723, 343,848, 85,683 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); - ent.v[ "origin" ] = ( -1990,43, 610,573, -22,5967 ); - ent.v[ "angles" ] = ( 296,723, 343,848, 85,683 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_plant_sprinkler" ); - ent.v[ "origin" ] = ( -1986,23, 608,854, -36,1717 ); - ent.v[ "angles" ] = ( 296,723, 343,848, 85,683 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_vent_steam" ); - ent.v[ "origin" ] = ( -590,984, 651,252, 45,8036 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 73 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_vent_steam" ); - ent.v[ "origin" ] = ( -517,369, 623,43, 43,1913 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 73 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_vent_steam" ); - ent.v[ "origin" ] = ( 1222,24, 999,817, 0,444401 ); - ent.v[ "angles" ] = ( 277,858, 101,672, -82,4167 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_heat_distort" ); - ent.v[ "origin" ] = ( 1371,28, 534,62, -15,125 ); - ent.v[ "angles" ] = ( 270, 339,444, -144,444 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_nuketown_sun1" ); - ent.v[ "origin" ] = ( -86418,6, -82436, 90428 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_stove_heat" ); - ent.v[ "origin" ] = ( -861,853, 707,552, -17 ); - ent.v[ "angles" ] = ( 270, 0, 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createexploder( "fx_mp_nuked_final_explosion" ); - ent.v[ "origin" ] = ( 82,2885, -5689,28, -65,1652 ); - ent.v[ "angles" ] = ( 270, 359,801, -178,8 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( -971,468, 370,708, 19 ); - ent.v[ "angles" ] = ( 25,0018, 163,301, -45,745 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( 583,21, 149,644, 8,125 ); - ent.v[ "angles" ] = ( 20,9339, 247,089, 7,30503 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( 544,954, 117,983, 151 ); - ent.v[ "angles" ] = ( 20,2711, 277,544, 58,6272 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( -1008,95, 146,692, 19,046 ); - ent.v[ "angles" ] = ( 42,2934, 281,468, 51,7248 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_heat_distort" ); - ent.v[ "origin" ] = ( 1330,31, 524,15, -14,875 ); - ent.v[ "angles" ] = ( 270, 0, -165 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_fireplace" ); - ent.v[ "origin" ] = ( 687,918, 361,078, -32,0234 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 25 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 1100,37, 342,591, 16,375 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 1085,27, 398,116, 17,375 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 1070,8, 452,269, 17,375 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( -893,265, 723,423, 17,375 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( -867,006, 714,345, 17,375 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( -840,568, 704,946, 17,375 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( -993,165, 598,335, 17,375 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( -1002,93, 571,719, 17,375 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( -1034,54, 495,038, 17,375 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( -1044,24, 468,817, 17,375 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 1143,85, 133,487, 17,375 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 1114,64, 125,655, 17,375 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 1085,88, 117,938, 17,375 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 1042,07, 110,181, 204 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 601,908, 25,4699, 198,34 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 567,591, 78,5851, 198,327 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 548,501, 135,171, 198,349 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 534,676, 198,12, 198,316 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 532,397, 263,242, 198,359 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 1004,62, 578,178, 80,1036 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 943,24, 561,665, 80,1011 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 881,669, 544,379, 80,1048 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 820,117, 528,243, 80,1071 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 909,679, 684,87, 80,0904 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 971,676, 701,663, 80,0924 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 847,847, 668,169, 80,0885 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 786,641, 651,667, 80,0919 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 724,747, 634,881, 80,0951 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( -792,537, 581,067, 45,1466 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( -792,537, 581,067, 45,1466 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createexploder( "fx_mp_nuked_final_dust" ); - ent.v[ "origin" ] = ( 28,8272, -5318,94, -61,8423 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 89 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_bubbles_runner" ); - ent.v[ "origin" ] = ( -1035,36, 481,202, -19,9983 ); - ent.v[ "angles" ] = ( 288,8, 340,536, -89,9554 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); - ent.v[ "origin" ] = ( 1095,53, 349,102, -9,36477 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); - ent.v[ "origin" ] = ( 870,083, 331,253, 24,0551 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); - ent.v[ "origin" ] = ( 1073,29, 132,668, 5,88701 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); - ent.v[ "origin" ] = ( 1086,05, 423,008, 2,59207 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); - ent.v[ "origin" ] = ( 1144,04, 159,474, -15,1653 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); - ent.v[ "origin" ] = ( 924,595, 370,527, -23,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); - ent.v[ "origin" ] = ( -914,925, 709,626, 5,64814 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); - ent.v[ "origin" ] = ( -808,226, 676,734, 23,3482 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); - ent.v[ "origin" ] = ( -800,818, 568,511, 41,1779 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); - ent.v[ "origin" ] = ( -1027,81, 504,999, -4,67077 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); - ent.v[ "origin" ] = ( -979,122, 607,775, 16,9038 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_sparkles_runner" ); - ent.v[ "origin" ] = ( -1026,99, 420,6, 21,5222 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( 606,258, 81,2441, 5,12501 ); - ent.v[ "angles" ] = ( 349,318, 112,235, -8,16458 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); - ent.v[ "origin" ] = ( -1603,17, 570,872, 14,0831 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 315 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); - ent.v[ "origin" ] = ( -1612,36, 580,681, -1,52756 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 336 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); - ent.v[ "origin" ] = ( -1154,5, -134,539, 19,5187 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 284 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); - ent.v[ "origin" ] = ( -1205,61, -132,548, 21,3148 ); - ent.v[ "angles" ] = ( 341,108, 10,061, -6,342 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); - ent.v[ "origin" ] = ( -802,663, -256,017, 19,4146 ); - ent.v[ "angles" ] = ( 0,362506, 317,022, -4,10696 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); - ent.v[ "origin" ] = ( 856,838, -192,904, 20,5036 ); - ent.v[ "angles" ] = ( 1, 307, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); - ent.v[ "origin" ] = ( 1460,39, -30,5036, 16,1233 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 8 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); - ent.v[ "origin" ] = ( 1618,55, 602,118, -5,43916 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 8 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); - ent.v[ "origin" ] = ( 1619,13, 606,212, -23,7476 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 8 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); - ent.v[ "origin" ] = ( -507,503, 934,97, -4,4827 ); - ent.v[ "angles" ] = ( 0,998782, 229, -4,05234 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); - ent.v[ "origin" ] = ( -1719,1, 119,659, 21,9169 ); - ent.v[ "angles" ] = ( 1, 332, -7 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_bubbles_runner" ); - ent.v[ "origin" ] = ( 1101,89, 324,85, -17,8269 ); - ent.v[ "angles" ] = ( 293,762, 199,738, -89,7583 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_nuke_stove_heat" ); - ent.v[ "origin" ] = ( 1108, 128,733, -17 ); - ent.v[ "angles" ] = ( 270, 0, 14 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_sound_rings" ); - ent.v[ "origin" ] = ( -941,838, 72,1988, 49,7176 ); - ent.v[ "angles" ] = ( 39,5764, 67,876, 0,16167 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_sound_rings" ); - ent.v[ "origin" ] = ( -854,511, 42,9079, 47,8699 ); - ent.v[ "angles" ] = ( 39,5764, 67,876, 0,16167 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_sound_rings" ); - ent.v[ "origin" ] = ( -912,717, 151,319, 48,7044 ); - ent.v[ "angles" ] = ( 39,215, 246,81, -1,0278 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_sound_rings" ); - ent.v[ "origin" ] = ( -824,893, 120,459, 50,4256 ); - ent.v[ "angles" ] = ( 39,215, 246,81, -1,0278 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); - ent.v[ "origin" ] = ( -391,12, -240,192, -4,1877 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); - ent.v[ "origin" ] = ( 402,799, -352,161, 4,56145 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); - ent.v[ "origin" ] = ( 1052,9, -138,837, 37,0968 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); - ent.v[ "origin" ] = ( 1518,77, 61,6228, 29,8273 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); - ent.v[ "origin" ] = ( 1681,75, 857,584, 18,1054 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); - ent.v[ "origin" ] = ( 657,07, 918,281, -8,7821 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); - ent.v[ "origin" ] = ( -497,042, 932,756, -12,3271 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); - ent.v[ "origin" ] = ( -2044,86, 144,7, 34,5532 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); - ent.v[ "origin" ] = ( -1106,94, -157,424, 46,9122 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); - ent.v[ "origin" ] = ( -2079,79, 462,182, 61,9822 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); - ent.v[ "origin" ] = ( 465,128, 706,506, -46,2148 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); - ent.v[ "origin" ] = ( -1712,21, 35,5331, 34,0838 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_rainbow_sm" ); - ent.v[ "origin" ] = ( -776,992, 587,551, 125,249 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 240 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); - ent.v[ "origin" ] = ( 439,767, -833,327, 29,1982 ); - ent.v[ "angles" ] = ( 7,06192, 36,9899, -0,88057 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 501,213, 230,902, 69,95 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 513,865, 184,074, 69,9421 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 525,611, 138,217, 69,9473 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 538,156, 90,2157, 69,9334 ); - ent.v[ "angles" ] = ( 90, 20,9967, 5,9967 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 550,482, 45,262, 69,9277 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 938,833, 141,365, 204 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( -610,851, 435,785, 57,7037 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( -611,227, 435,372, 57,8882 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 835,134, 162,725, 27,7533 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 820,419, 157,038, 19,499 ); - ent.v[ "angles" ] = ( 90, 0, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_softer" ); - ent.v[ "origin" ] = ( 804,838, 155,672, 27,0415 ); - ent.v[ "angles" ] = ( 89, 15, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_sandbox" ); - ent.v[ "origin" ] = ( 1422,01, 901,524, -57,7152 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 28 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_sandbox" ); - ent.v[ "origin" ] = ( 1399,76, 1014,83, -57,0013 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 37 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_butterfly" ); - ent.v[ "origin" ] = ( 479,252, -820,36, 0,715872 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 353 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createexploder( "fx_mp_nuked_display_glass_break" ); - ent.v[ "origin" ] = ( 32,133, -421,767, -34,7027 ); - ent.v[ "angles" ] = ( 341,003, 92,0149, -0,109475 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1005; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_white" ); - ent.v[ "origin" ] = ( -339,721, -577,902, 7,75219 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_steam_sm" ); - ent.v[ "origin" ] = ( -600,707, -174,85, 15,4798 ); - ent.v[ "angles" ] = ( 54,783, 165,264, 5,21839 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_steam_sm" ); - ent.v[ "origin" ] = ( -619,212, -220,045, 14,9067 ); - ent.v[ "angles" ] = ( 54,783, 165,264, 5,21839 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_steam_sm" ); - ent.v[ "origin" ] = ( -636,35, -264,746, 15,7747 ); - ent.v[ "angles" ] = ( 54,783, 165,264, 5,21839 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_steam_sm" ); - ent.v[ "origin" ] = ( -504,167, -212,012, 16,725 ); - ent.v[ "angles" ] = ( 56,1189, 337,177, -4,89594 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_steam_sm" ); - ent.v[ "origin" ] = ( -518,997, -254,737, 16,8657 ); - ent.v[ "angles" ] = ( 56,1189, 337,177, -4,89594 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_steam_sm" ); - ent.v[ "origin" ] = ( -535,222, -300,106, 17,2411 ); - ent.v[ "angles" ] = ( 56,1189, 337,177, -4,89594 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_steam_sm" ); - ent.v[ "origin" ] = ( 493,406, -201,825, 13,125 ); - ent.v[ "angles" ] = ( 54,783, 165,264, 5,21839 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_steam_sm" ); - ent.v[ "origin" ] = ( 505,301, -247,565, 12,8816 ); - ent.v[ "angles" ] = ( 54,783, 165,264, 5,21839 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_steam_sm" ); - ent.v[ "origin" ] = ( 517,989, -292,23, 13,3148 ); - ent.v[ "angles" ] = ( 54,783, 165,264, 5,21839 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_steam_sm_fast" ); - ent.v[ "origin" ] = ( 540,431, -189,633, 39,6473 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_steam_sm_fast" ); - ent.v[ "origin" ] = ( 554,105, -235,759, 38,6344 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_steam_sm_fast" ); - ent.v[ "origin" ] = ( 567,649, -281,173, 38,6313 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_steam_sm_fast" ); - ent.v[ "origin" ] = ( -554,58, -193,108, 40,9604 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_steam_sm_fast" ); - ent.v[ "origin" ] = ( -570,823, -237,107, 40,9644 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nuke_steam_sm_fast" ); - ent.v[ "origin" ] = ( -587,73, -280,752, 40,9542 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; -} diff --git a/Multiplayer Maps/mp_nuketown_2020/maps/mp/mp_nuketown_2020.gsc b/Multiplayer Maps/mp_nuketown_2020/maps/mp/mp_nuketown_2020.gsc deleted file mode 100644 index 7988994..0000000 --- a/Multiplayer Maps/mp_nuketown_2020/maps/mp/mp_nuketown_2020.gsc +++ /dev/null @@ -1,418 +0,0 @@ -#include maps/mp/killstreaks/_killstreaks; -#include maps/mp/gametypes/_globallogic_defaults; -#include maps/mp/_compass; -#include maps/mp/_events; -#include common_scripts/utility; -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_nuketown_2020_fx::main(); - maps/mp/_load::main(); - maps/mp/mp_nuketown_2020_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_nuketown_2020" ); - level.onspawnintermission = ::nuked_intermission; - setdvar( "compassmaxrange", "2100" ); - precacheitem( "vcs_controller_mp" ); - precachemenu( "vcs" ); - precachemodel( "nt_sign_population" ); - precachemodel( "nt_sign_population_vcs" ); - precachestring( &"MPUI_USE_VCS_HINT" ); - level.const_fx_exploder_nuke = 1001; - level.headless_mannequin_count = 0; - level.destructible_callbacks[ "headless" ] = ::mannequin_headless; - level thread nuked_population_sign_think(); - level.disableoutrovisionset = 1; - destructible_car_anims = []; - destructible_car_anims[ "car1" ] = %fxanim_mp_nuked2025_car01_anim; - destructible_car_anims[ "car2" ] = %fxanim_mp_nuked2025_car02_anim; - destructible_car_anims[ "displayGlass" ] = %fxanim_mp_nuked2025_display_glass_anim; - level thread nuked_mannequin_init(); - level thread nuked_powerlevel_think(); - level thread nuked_bomb_drop_think(); -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "1600", reset_dvars ); - ss.dead_friend_influencer_radius = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_radius", "1300", reset_dvars ); - ss.dead_friend_influencer_timeout_seconds = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_timeout_seconds", "8", reset_dvars ); - ss.dead_friend_influencer_count = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_count", "7", reset_dvars ); - ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1000", reset_dvars ); - ss.koth_objective_influencer_inner_radius = 1000; -} - -move_spawn_point( targetname, start_point, new_point ) -{ - spawn_points = getentarray( targetname, "classname" ); - i = 0; - while ( i < spawn_points.size ) - { - if ( distancesquared( spawn_points[ i ].origin, start_point ) < 1 ) - { - spawn_points[ i ].origin = new_point; - return; - } - i++; - } -} - -nuked_mannequin_init() -{ - destructibles = getentarray( "destructible", "targetname" ); - mannequins = nuked_mannequin_filter( destructibles ); - level.mannequin_count = mannequins.size; - if ( mannequins.size <= 0 ) - { - return; - } - camerastart = getstruct( "endgame_camera_start", "targetname" ); - level.endgamemannequin = getclosest( camerastart.origin, mannequins ); - remove_count = mannequins.size - 25; - remove_count = clamp( remove_count, 0, remove_count ); - mannequins = array_randomize( mannequins ); - i = 0; - while ( i < remove_count ) - { -/# - assert( isDefined( mannequins[ i ].target ) ); -#/ - if ( level.endgamemannequin == mannequins[ i ] ) - { - i++; - continue; - } - else - { - collision = getent( mannequins[ i ].target, "targetname" ); -/# - assert( isDefined( collision ) ); -#/ - collision delete(); - mannequins[ i ] delete(); - level.mannequin_count--; - - } - i++; - } - level waittill( "prematch_over" ); - level.mannequin_time = getTime(); -} - -nuked_mannequin_filter( destructibles ) -{ - mannequins = []; - i = 0; - while ( i < destructibles.size ) - { - destructible = destructibles[ i ]; - if ( issubstr( destructible.destructibledef, "male" ) ) - { - mannequins[ mannequins.size ] = destructible; - } - i++; - } - return mannequins; -} - -mannequin_headless( notifytype, attacker ) -{ - if ( getTime() < ( level.mannequin_time + ( getdvarintdefault( "vcs_timelimit", 120 ) * 1000 ) ) ) - { - level.headless_mannequin_count++; - if ( level.headless_mannequin_count == level.mannequin_count ) - { - level thread do_vcs(); - } - } -} - -nuked_intermission() -{ - maps/mp/gametypes/_globallogic_defaults::default_onspawnintermission(); - if ( waslastround() ) - { - level notify( "nuke_detonation" ); - level thread nuke_detonation(); - } -} - -nuke_detonation() -{ - level notify( "bomb_drop_pre" ); - clientnotify( "bomb_drop_pre" ); - bomb_loc = getent( "bomb_loc", "targetname" ); - bomb_loc playsound( "amb_end_nuke_2d" ); - destructibles = getentarray( "destructible", "targetname" ); - i = 0; - while ( i < destructibles.size ) - { - if ( getsubstr( destructibles[ i ].destructibledef, 0, 4 ) == "veh_" ) - { - destructibles[ i ] hide(); - } - i++; - } - displaysign = getent( "nuke_display_glass_server", "targetname" ); -/# - assert( isDefined( displaysign ) ); -#/ - displaysign hide(); - bombwaitpretime = getdvarfloatdefault( "scr_nuke_car_pre", 0,5 ); - wait bombwaitpretime; - exploder( level.const_fx_exploder_nuke ); - bomb_loc = getent( "bomb_loc", "targetname" ); - bomb_loc playsound( "amb_end_nuke" ); - level notify( "bomb_drop" ); - clientnotify( "bomb_drop" ); - bombwaittime = getdvarfloatdefault( "scr_nuke_car_flip", 3,25 ); - wait bombwaittime; - clientnotify( "nuke_car_flip" ); - location = level.endgamemannequin.origin + ( 0, -20, 50 ); - radiusdamage( location, 128, 128, 128 ); - physicsexplosionsphere( location, 128, 128, 1 ); - mannequinwaittime = getdvarfloatdefault( "scr_nuke_mannequin_flip", 0,25 ); - wait mannequinwaittime; - level.endgamemannequin rotateto( level.endgamemannequin.angles + vectorScale( ( 0, 1, 0 ), 90 ), 0,7 ); - level.endgamemannequin moveto( level.endgamemannequin.origin + vectorScale( ( 0, 1, 0 ), 90 ), 1 ); -} - -nuked_bomb_drop_think() -{ - camerastart = getstruct( "endgame_camera_start", "targetname" ); - cameraend = getstruct( camerastart.target, "targetname" ); - bomb_loc = getent( "bomb_loc", "targetname" ); - cam_move_time = set_dvar_float_if_unset( "scr_cam_move_time", "4.0" ); - bomb_explode_delay = set_dvar_float_if_unset( "scr_bomb_explode_delay", "2.75" ); - env_destroy_delay = set_dvar_float_if_unset( "scr_env_destroy_delay", "0.5" ); - for ( ;; ) - { - camera = spawn( "script_model", camerastart.origin ); - camera.angles = camerastart.angles; - camera setmodel( "tag_origin" ); - level waittill( "bomb_drop_pre" ); - level notify( "fxanim_dome_explode_start" ); - i = 0; - while ( i < get_players().size ) - { - player = get_players()[ i ]; - player camerasetposition( camera ); - player camerasetlookat(); - player cameraactivate( 1 ); - player setdepthoffield( 0, 128, 7000, 10000, 6, 1,8 ); - i++; - } - camera moveto( cameraend.origin, cam_move_time, 0, 0 ); - camera rotateto( cameraend.angles, cam_move_time, 0, 0 ); - bombwaittime = getdvarfloatdefault( "mp_nuketown_2020_bombwait", 3 ); - wait bombwaittime; - wait env_destroy_delay; - cameraforward = anglesToForward( cameraend.angles ); - physicsexplosionsphere( bomb_loc.origin, 128, 128, 1 ); - radiusdamage( bomb_loc.origin, 128, 128, 128 ); - } -} - -nuked_population_sign_think() -{ - tens_model = getent( "counter_tens", "targetname" ); - ones_model = getent( "counter_ones", "targetname" ); - step = 36; - ones = 0; - tens = 0; - tens_model rotateroll( step, 0,05 ); - ones_model rotateroll( step, 0,05 ); - for ( ;; ) - { - wait 1; - for ( ;; ) - { - num_players = get_players().size; - dial = ones + ( tens * 10 ); - if ( num_players < dial ) - { - ones--; - - time = set_dvar_float_if_unset( "scr_dial_rotate_time", "0.5" ); - if ( ones < 0 ) - { - ones = 9; - tens_model rotateroll( 0 - step, time ); - tens--; - - } - ones_model rotateroll( 0 - step, time ); - ones_model waittill( "rotatedone" ); - continue; - } - else if ( num_players > dial ) - { - ones++; - time = set_dvar_float_if_unset( "scr_dial_rotate_time", "0.5" ); - if ( ones > 9 ) - { - ones = 0; - tens_model rotateroll( step, time ); - tens++; - } - ones_model rotateroll( step, time ); - ones_model waittill( "rotatedone" ); - continue; - } - else - { - } - } - } -} - -do_vcs() -{ - if ( getdvarintdefault( "disable_vcs", 0 ) ) - { - return; - } - if ( !getgametypesetting( "allowMapScripting" ) ) - { - return; - } - if ( !level.onlinegame || !sessionmodeisprivate() ) - { - return; - } - if ( level.wiiu ) - { - return; - } - targettag = getent( "player_tv_position", "targetname" ); - level.vcs_trigger = spawn( "trigger_radius_use", targettag.origin, 0, 64, 64 ); - level.vcs_trigger setcursorhint( "HINT_NOICON" ); - level.vcs_trigger sethintstring( &"MPUI_USE_VCS_HINT" ); - level.vcs_trigger triggerignoreteam(); - screen = getent( "nuketown_tv", "targetname" ); - screen setmodel( "nt_sign_population_vcs" ); - while ( 1 ) - { - level.vcs_trigger waittill( "trigger", player ); - if ( player isusingremote() || !isalive( player ) ) - { - continue; - } - prevweapon = player getcurrentweapon(); - if ( prevweapon == "none" || maps/mp/killstreaks/_killstreaks::iskillstreakweapon( prevweapon ) ) - { - continue; - } - level.vcs_trigger setinvisibletoall(); - player giveweapon( "vcs_controller_mp" ); - player switchtoweapon( "vcs_controller_mp" ); - player setstance( "stand" ); - placementtag = spawn( "script_model", player.origin ); - placementtag.angles = player.angles; - player playerlinktoabsolute( placementtag ); - placementtag moveto( targettag.origin, 0,5, 0,05, 0,05 ); - placementtag rotateto( targettag.angles, 0,5, 0,05, 0,05 ); - player enableinvulnerability(); - player openmenu( "vcs" ); - player wait_till_done_playing_vcs(); - if ( !level.gameended ) - { - if ( isDefined( player ) ) - { - player disableinvulnerability(); - player unlink(); - player takeweapon( "vcs_controller_mp" ); - player switchtoweapon( prevweapon ); - } - level.vcs_trigger setvisibletoall(); - } - } -} - -wait_till_done_playing_vcs() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "menuresponse", menu, response ); - return; - } -} - -nuked_powerlevel_think() -{ - pin_model = getent( "nuketown_sign_needle", "targetname" ); - pin_model thread pin_think(); -} - -pin_think() -{ - self endon( "death" ); - self endon( "entityshutdown" ); - self endon( "delete" ); - startangle = 128; - normalangle = 65 + randomfloatrange( -30, 15 ); - yellowangle = -35 + randomfloatrange( -5, 5 ); - redangle = -95 + randomfloatrange( -10, 10 ); - endangle = -138; - self.angles = ( startangle, self.angles[ 1 ], self.angles[ 2 ] ); - waittillframeend; - if ( islastround() || isoneround() ) - { - if ( level.timelimit ) - { - add_timed_event( 10, "near_end_game" ); - self pin_move( yellowangle, level.timelimit * 60 ); - } - else - { - if ( level.scorelimit ) - { - add_score_event( int( level.scorelimit * 0,9 ), "near_end_game" ); - self pin_move( normalangle, 300 ); - } - } - notifystr = level waittill_any_return( "near_end_game", "game_ended" ); - if ( notifystr == "near_end_game" ) - { - self pin_check_rotation( 0, 3 ); - self pin_move( redangle, 10 ); - level waittill( "game_ended" ); - } - self pin_check_rotation( 0, 2 ); - self pin_move( redangle, 2 ); - } - else - { - if ( level.timelimit ) - { - self pin_move( normalangle, level.timelimit * 60 ); - } - else - { - self pin_move( normalangle, 300 ); - } - } - level waittill( "nuke_detonation" ); - self pin_check_rotation( 0, 0,05 ); - self pin_move( endangle, 0,1 ); -} - -pin_move( angle, time ) -{ - angles = ( angle, self.angles[ 1 ], self.angles[ 2 ] ); - self rotateto( angles, time ); -} - -pin_check_rotation( angle, time ) -{ - if ( self.angles[ 0 ] > angle ) - { - self pin_move( angle, time ); - self waittill( "rotatedone" ); - } -} diff --git a/Multiplayer Maps/mp_nuketown_2020/maps/mp/mp_nuketown_2020_amb.gsc b/Multiplayer Maps/mp_nuketown_2020/maps/mp/mp_nuketown_2020_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_nuketown_2020/maps/mp/mp_nuketown_2020_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_nuketown_2020/maps/mp/mp_nuketown_2020_fx.gsc b/Multiplayer Maps/mp_nuketown_2020/maps/mp/mp_nuketown_2020_fx.gsc deleted file mode 100644 index 658a79b..0000000 --- a/Multiplayer Maps/mp_nuketown_2020/maps/mp/mp_nuketown_2020_fx.gsc +++ /dev/null @@ -1,54 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); - -main() -{ - precache_createfx_fx(); - precache_fxanim_props(); - maps/mp/createfx/mp_nuketown_2020_fx::main(); - maps/mp/createart/mp_nuketown_2020_art::main(); -} - -precache_createfx_fx() -{ - level._effect[ "fx_water_fire_sprinkler_thin" ] = loadfx( "water/fx_water_fire_sprinkler_thin" ); - level._effect[ "fx_nuke_plant_sprinkler" ] = loadfx( "water/fx_nuke_plant_sprinkler" ); - level._effect[ "fx_nuke_car_wash_sprinkler" ] = loadfx( "water/fx_nuke_car_wash_sprinkler" ); - level._effect[ "fx_window_god_ray_sm" ] = loadfx( "light/fx_window_god_ray_sm" ); - level._effect[ "fx_window_god_ray" ] = loadfx( "light/fx_window_god_ray" ); - level._effect[ "fx_light_recessed_cool_sm_soft" ] = loadfx( "light/fx_light_recessed_cool_sm_soft" ); - level._effect[ "fx_light_recessed_cool_sm_softer" ] = loadfx( "light/fx_light_recessed_cool_sm_softer" ); - level._effect[ "fx_red_button_flash" ] = loadfx( "light/fx_red_button_flash" ); - level._effect[ "fx_mp_water_drip_light_shrt" ] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_shrt" ); - level._effect[ "fx_mp_water_drip_light_long" ] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); - level._effect[ "fx_mp_nuked_final_dust" ] = loadfx( "maps/mp_maps/fx_mp_nuked_final_dust" ); - level._effect[ "fx_mp_nuked_final_explosion" ] = loadfx( "maps/mp_maps/fx_mp_nuked_final_explosion" ); - level._effect[ "fx_nuke_car_wash_mist" ] = loadfx( "smoke/fx_nuke_car_wash_mist" ); - level._effect[ "fx_nuke_vent_steam" ] = loadfx( "smoke/fx_nuke_vent_steam" ); - level._effect[ "fx_nuke_heat_distort" ] = loadfx( "smoke/fx_nuke_heat_distort" ); - level._effect[ "fx_nuke_stove_heat" ] = loadfx( "smoke/fx_nuke_stove_heat" ); - level._effect[ "fx_lf_mp_nuketown_sun1" ] = loadfx( "lens_flares/fx_lf_mp_nuketown_sun1" ); - level._effect[ "fx_mp_nuke_fireplace" ] = loadfx( "maps/mp_maps/fx_mp_nuke_fireplace" ); - level._effect[ "fx_mp_nuke_butterfly" ] = loadfx( "maps/mp_maps/fx_mp_nuke_butterfly" ); - level._effect[ "fx_insects_swarm_lg_light" ] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); - level._effect[ "fx_insects_swarm_lg_white" ] = loadfx( "bio/insects/fx_insects_swarm_lg_white" ); - level._effect[ "fx_mp_nuke_ufo_fly" ] = loadfx( "maps/mp_maps/fx_mp_nuke_ufo_fly" ); - level._effect[ "fx_mp_nuke_bubbles_runner" ] = loadfx( "maps/mp_maps/fx_mp_nuke_bubbles_runner" ); - level._effect[ "fx_mp_nuke_sparkles_runner" ] = loadfx( "maps/mp_maps/fx_mp_nuke_sparkles_runner" ); - level._effect[ "fx_mp_nuke_sound_rings" ] = loadfx( "maps/mp_maps/fx_mp_nuke_sound_rings" ); - level._effect[ "fx_mp_nuke_rainbow_sm" ] = loadfx( "maps/mp_maps/fx_mp_nuke_rainbow_sm" ); - level._effect[ "fx_mp_nuke_sandbox" ] = loadfx( "maps/mp_maps/fx_mp_nuke_sandbox" ); - level._effect[ "fx_mp_nuked_display_glass_break" ] = loadfx( "maps/mp_maps/fx_mp_nuked_display_glass_break" ); - level._effect[ "fx_mp_nuke_steam_sm" ] = loadfx( "maps/mp_maps/fx_mp_nuke_steam_sm" ); - level._effect[ "fx_mp_nuke_steam_sm_fast" ] = loadfx( "maps/mp_maps/fx_mp_nuke_steam_sm_fast" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "hose" ] = %fxanim_mp_nuked2025_hose_anim; - level.scr_anim[ "fxanim_props" ][ "sprinkler" ] = %fxanim_mp_nuked2025_sprinkler_anim; - level.scr_anim[ "fxanim_props" ][ "dome" ] = %fxanim_mp_nuked2025_dome_anim; - level.scr_anim[ "fxanim_props" ][ "gate_sign" ] = %fxanim_mp_nuked2025_gate_sign_anim; - level.scr_anim[ "fxanim_props" ][ "carwash_hoses" ] = %fxanim_mp_nuked2025_carwash_hoses_anim; -} diff --git a/Multiplayer Maps/mp_overflow/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_overflow/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_overflow/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_overflow/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_overflow/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_overflow/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_overflow/maps/mp/createart/mp_overflow_art.gsc b/Multiplayer Maps/mp_overflow/maps/mp/createart/mp_overflow_art.gsc deleted file mode 100644 index 5b94e52..0000000 --- a/Multiplayer Maps/mp_overflow/maps/mp/createart/mp_overflow_art.gsc +++ /dev/null @@ -1,25 +0,0 @@ - -main() -{ - level.tweakfile = 1; - setdvar( "scr_fog_exp_halfplane", "3759.28" ); - setdvar( "scr_fog_exp_halfheight", "243.735" ); - setdvar( "scr_fog_nearplane", "601.593" ); - setdvar( "scr_fog_red", "0.806694" ); - setdvar( "scr_fog_green", "0.962521" ); - setdvar( "scr_fog_blue", "0.9624" ); - setdvar( "scr_fog_baseheight", "-475.268" ); - setdvar( "visionstore_glowTweakEnable", "0" ); - setdvar( "visionstore_glowTweakRadius0", "5" ); - setdvar( "visionstore_glowTweakRadius1", "" ); - setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); - setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); - setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); - setdvar( "visionstore_glowTweakBloomIntensity1", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); - visionsetnaked( "mp_overflow", 0 ); - setdvar( "r_lightGridEnableTweaks", 1 ); - setdvar( "r_lightGridIntensity", 1,64 ); - setdvar( "r_lightGridContrast", 0,21 ); -} diff --git a/Multiplayer Maps/mp_overflow/maps/mp/createfx/mp_overflow_fx.gsc b/Multiplayer Maps/mp_overflow/maps/mp/createfx/mp_overflow_fx.gsc deleted file mode 100644 index 53bc9f8..0000000 --- a/Multiplayer Maps/mp_overflow/maps/mp/createfx/mp_overflow_fx.gsc +++ /dev/null @@ -1,975 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( -1761,49, 750,929, 127,471 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 268 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_car_floating_river" ); - ent.v[ "origin" ] = ( -3275,25, -2324,1, -144 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 86 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -200; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 1366,83, -1223,55, 116,743 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 926,319, -1353,03, 157,634 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 1061,99, -1215,45, 162,401 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 731,12, -1324,45, 159,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 1316,45, -1322,9, 210,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 1299,46, -1004,78, 109,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 1410,84, -896,463, 110,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 1436,62, -1063,77, 127,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 701,026, -949,396, 61 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 1264,76, -1285,06, 59,2605 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -1503,94, 1272,59, 63,067 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 284 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -66,6014, 965,41, 49,0598 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 284 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_md_area" ); - ent.v[ "origin" ] = ( -2082,71, 279,391, -15,9111 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_md_area" ); - ent.v[ "origin" ] = ( -1915,39, -230,614, 1,0775 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_md_area" ); - ent.v[ "origin" ] = ( -2079,88, -780,976, -132 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_md_area" ); - ent.v[ "origin" ] = ( -1406,53, -770,4, -18,1476 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_md_area" ); - ent.v[ "origin" ] = ( -426,31, -1368,17, -38,6984 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -417,39, -1589,6, -40 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -1156,88, -1011,35, -40 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -1441,99, -1018,84, -44,8633 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -1072,74, -1448,99, -72,8503 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( 831,688, -1334,41, 2,48272 ); - ent.v[ "angles" ] = ( 270, 0, 28 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( 1068,55, -1367,53, -4,9795 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_md_area" ); - ent.v[ "origin" ] = ( -1118,4, 1991,82, -8 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_md_area" ); - ent.v[ "origin" ] = ( -902,299, 1741,03, -8 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_md_area" ); - ent.v[ "origin" ] = ( -523,022, 1589,02, -6,05806 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_md_area" ); - ent.v[ "origin" ] = ( -479,108, 1355,92, -7,22028 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -1162,15, 727,704, 7,09781 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_md_area" ); - ent.v[ "origin" ] = ( -2237,79, -47,5467, -24,1656 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_md_area" ); - ent.v[ "origin" ] = ( -876,172, 1977,13, -8 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_md_area" ); - ent.v[ "origin" ] = ( -224,844, -55,3371, -19,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -16,8662, -238,099, -8,00001 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -628,009, 697,417, -13,2926 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -548,862, 185,006, -18,8134 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -301,946, 580,292, 35,0141 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( 125,885, -13,5468, 49,2809 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_md_area" ); - ent.v[ "origin" ] = ( 1107,44, -511,039, -8 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_md_area" ); - ent.v[ "origin" ] = ( 1522,32, -475,751, -8 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_md_area" ); - ent.v[ "origin" ] = ( 1835,39, -588,083, -8 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_md_area" ); - ent.v[ "origin" ] = ( 1912,72, -931,626, -2 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( 409,665, -448,353, -6,74574 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( 613,536, -589,676, 6,98202 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_sm_runner_oflow" ); - ent.v[ "origin" ] = ( 1010,84, -1397,33, 177,569 ); - ent.v[ "angles" ] = ( 23,8603, 39,9946, 18,745 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = 2,44; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -480,09, -11,4621, 0 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner_oflow" ); - ent.v[ "origin" ] = ( -283,508, -1391,37, 268,717 ); - ent.v[ "angles" ] = ( 17,9408, 145,177, 9,14282 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = 4,2; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner_oflow" ); - ent.v[ "origin" ] = ( -99,2519, -1517,85, 284,553 ); - ent.v[ "angles" ] = ( 26,2572, 308,833, 23,334 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = 3,44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_sm_runner_oflow" ); - ent.v[ "origin" ] = ( -164,92, -1373,38, 190,885 ); - ent.v[ "angles" ] = ( 3,64226, 48,6546, 22,1653 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = 2,88; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -1265,89, -719,679, 41,8711 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 50,1386, -1171,14, 117,178 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_md_area" ); - ent.v[ "origin" ] = ( -1395,9, 2327,98, -8 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_md_area" ); - ent.v[ "origin" ] = ( 2415,13, -1321,27, 8 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 531,422, -1240,56, 109,606 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( 1067,89, -1585,95, -8 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( 2095,93, -584,791, 0,485807 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_lantern_dec_red" ); - ent.v[ "origin" ] = ( 704,821, -915,196, 111,973 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_black_slow" ); - ent.v[ "origin" ] = ( 141,92, -464,734, 15,8908 ); - ent.v[ "angles" ] = ( 324,496, 343,059, 19,2294 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_black_slow" ); - ent.v[ "origin" ] = ( -666,8, 1696,56, 38,5757 ); - ent.v[ "angles" ] = ( 339,007, 323,897, 0,335757 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); - ent.v[ "origin" ] = ( 274,77, -993,367, 253,181 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -2055,82, -7,81759, 56,921 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -159,118, 1285,97, 59,6602 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 332,54, -1755,32, 35,3767 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_roaches_short" ); - ent.v[ "origin" ] = ( 1244,85, -1100,28, -3,45147 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 294 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_roaches_short" ); - ent.v[ "origin" ] = ( 1315,76, -1003,09, -6,44468 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 7 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_roaches_short" ); - ent.v[ "origin" ] = ( 281,561, -1047,88, 131,505 ); - ent.v[ "angles" ] = ( 293,003, 359,865, -88,7769 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_roaches_short" ); - ent.v[ "origin" ] = ( 401,026, -1047,88, 215,816 ); - ent.v[ "angles" ] = ( 65,9905, 179,918, 88,8249 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); - ent.v[ "origin" ] = ( 203,166, -999,101, 254,204 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_black_slow" ); - ent.v[ "origin" ] = ( -2221,17, -352,926, -2,56788 ); - ent.v[ "angles" ] = ( 323,127, 2,83165, 3,41667 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_pop_runner" ); - ent.v[ "origin" ] = ( -258,888, -1360,36, 145,707 ); - ent.v[ "angles" ] = ( 271, 81, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_pop_runner" ); - ent.v[ "origin" ] = ( -95,8447, -1397,92, 230,65 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 340 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_black_slow" ); - ent.v[ "origin" ] = ( -1713,24, 463,615, 58,4818 ); - ent.v[ "angles" ] = ( 328,572, 266,776, 5,88032 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( 451,883, -214,525, 41,6211 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( 635,105, -334,629, -7,70327 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -59,6377, -1696,1, -38,5661 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -1534,6, -1309,97, -96,9736 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -1691,7, -274,356, 39,6039 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -1458,36, -540,131, 28,3024 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -1713,34, 305,025, 35,5602 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -1326,3, 1137,55, 0 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -343,224, 873,519, 0 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -221,84, 1387,69, 0 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -1228,27, 548,87, 37,3086 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -870,918, -1616,31, -57,3837 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -1721,05, 592,513, 17,8249 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_pop_runner" ); - ent.v[ "origin" ] = ( 2062,53, -1184,57, 71,3509 ); - ent.v[ "angles" ] = ( 291,133, 89,9216, 31,2217 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -312,415, 207,516, -19,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 546,809, -1173,87, 171,523 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 7,4539, -1445,54, 36,6345 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sun_flare_overflow" ); - ent.v[ "origin" ] = ( -46433,1, 22855,7, 39136 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 323,511, -1786,75, 42,1831 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 2180,03, -460,499, 57,439 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -332,373, 1134,76, 0 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_pop_runner" ); - ent.v[ "origin" ] = ( -640,177, -1290,7, 147,491 ); - ent.v[ "angles" ] = ( 270,999, 350,967, 89,9804 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( 5,63925, 141,777, -5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( 102,726, -1676,11, -39,29 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_md_area" ); - ent.v[ "origin" ] = ( -1893,37, -1174,76, -129 ); - ent.v[ "angles" ] = ( 270, 176,042, -173,042 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -1975,68, -947,405, -132 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -1491,67, 731,914, 76,7699 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 284 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 341,717, 1591,11, 130,27 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 284 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 411,795, 1581,2, 128,326 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 284 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 576,52, 578,855, 125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 284 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 696,096, 454,547, 159,33 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 284 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createloopeffect( "fx_mp_elec_spark_burst_xsm_thin" ); - ent.v[ "origin" ] = ( -14,5798, -720,885, 208,457 ); - ent.v[ "angles" ] = ( 40,7911, 317,585, 28,9301 ); - ent.v[ "type" ] = "loopfx"; - ent.v[ "delay" ] = 2,66; - ent = maps/mp/_utility::createoneshoteffect( "fx_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 457,359, 726,909, 64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 94 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 895,449, 378,367, 64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 1646,17, 310,682, 64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 281 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 401,9, 1364,22, 64,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 284 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 210,467, 1356,11, 67,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 176 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 317,7, -1242,57, 41,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 708,734, -1195,39, 58,1272 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -2089,62, -666,822, -50,9244 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -1984,14, -940,224, -59 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -1316,99, 900,873, 0 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -414,119, 668,642, 17,1461 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -1566,21, 1182,45, 54 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 284 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -1379,98, -1019,24, 12,0793 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 284 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); - ent.v[ "origin" ] = ( -1612,48, 777,553, 368,9 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); - ent.v[ "origin" ] = ( -1052,88, 1078,5, 493,891 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); - ent.v[ "origin" ] = ( -1481,74, 2020,21, 377,685 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -2043,62, -1352,36, -132 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_gas_pipe_md" ); - ent.v[ "origin" ] = ( -1387,51, -1338,69, -54,2344 ); - ent.v[ "angles" ] = ( 16,3733, 215,378, 1,64252 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_pipe_md" ); - ent.v[ "origin" ] = ( -1381,72, 1277,88, 18,7317 ); - ent.v[ "angles" ] = ( 278,891, 259,971, -174,596 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 624,539, -687,744, 46,3582 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 1049,77, -250,702, 54,2236 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 1393,68, 231,309, 119,686 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 320,349, -295,735, 72,1301 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -2317,62, -687,495, -132,446 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( -1818,84, -440,783, 1,35371 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_roaches_short" ); - ent.v[ "origin" ] = ( 385,109, -944,125, 135,329 ); - ent.v[ "angles" ] = ( 294,002, 359,96, 90,1356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_roaches_short" ); - ent.v[ "origin" ] = ( 237,846, -1047,88, 215,609 ); - ent.v[ "angles" ] = ( 76,9898, 178,921, 87,8758 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_roaches_short" ); - ent.v[ "origin" ] = ( 77,7459, -935,875, 160,569 ); - ent.v[ "angles" ] = ( 281,009, 358,533, -87,4961 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_roaches_short" ); - ent.v[ "origin" ] = ( 784,764, -988,179, 122,548 ); - ent.v[ "angles" ] = ( 89, 180, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_roaches_short" ); - ent.v[ "origin" ] = ( 784,875, -864,688, 117,027 ); - ent.v[ "angles" ] = ( 58,9855, 268,336, 88,0591 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_roaches_short" ); - ent.v[ "origin" ] = ( 783,549, -991,576, 25,208 ); - ent.v[ "angles" ] = ( 302,013, 88,4002, -88,1132 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_roaches_short" ); - ent.v[ "origin" ] = ( 355,497, -1048,09, 144,746 ); - ent.v[ "angles" ] = ( 329, 0,703705, -89,4423 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -2342,9, 476,596, 16,573 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 284 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_roaches_short" ); - ent.v[ "origin" ] = ( 1391,27, -1038,06, -6,98319 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_roaches_short" ); - ent.v[ "origin" ] = ( 420,542, -944,125, 200,713 ); - ent.v[ "angles" ] = ( 48,9973, 180,021, -90,0839 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_roaches_short" ); - ent.v[ "origin" ] = ( 304,26, -944,125, 220,288 ); - ent.v[ "angles" ] = ( 76,0025, 0,305261, 90,2278 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_roaches_short" ); - ent.v[ "origin" ] = ( 61,223, -909,392, 129,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 36 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_roaches_short" ); - ent.v[ "origin" ] = ( 304,485, -778,755, 128,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 193 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_roaches_short" ); - ent.v[ "origin" ] = ( 304,637, -941,671, 129,302 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 234 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_detail" ); - ent.v[ "origin" ] = ( -1504,5, -1376,62, -92,2689 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 272 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm" ); - ent.v[ "origin" ] = ( -1519,6, -1374,82, -63,2638 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 272 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_black_slow" ); - ent.v[ "origin" ] = ( -1522,65, -1364,38, -50,572 ); - ent.v[ "angles" ] = ( 323,127, 2,83165, 3,41667 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_lg_runner_oflow" ); - ent.v[ "origin" ] = ( -59,8228, 246,781, 487,915 ); - ent.v[ "angles" ] = ( 39,6118, 247,793, -16,4119 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner_oflow" ); - ent.v[ "origin" ] = ( 1505,91, -703,472, 370,883 ); - ent.v[ "angles" ] = ( 19, 20, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner_oflow" ); - ent.v[ "origin" ] = ( 1441,86, -644,158, 411,784 ); - ent.v[ "angles" ] = ( 358,014, 125,163, 18,3405 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -12,33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_gas_pipe_md" ); - ent.v[ "origin" ] = ( -1264,16, 1124,34, 36,096 ); - ent.v[ "angles" ] = ( 280,735, 43,2572, 171,51 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 1694,54, 372,777, 110 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_pipe_md" ); - ent.v[ "origin" ] = ( -194,429, 1587,51, 78,9634 ); - ent.v[ "angles" ] = ( 0, 315, 87 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_gas_pipe_md" ); - ent.v[ "origin" ] = ( 262,156, 1801,74, 89,6183 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 224 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); - ent.v[ "origin" ] = ( 269,944, 283,632, 258,951 ); - ent.v[ "angles" ] = ( 270, 357,537, -42,5371 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); - ent.v[ "origin" ] = ( 430,893, 122,407, 257,082 ); - ent.v[ "angles" ] = ( 270, 357,537, -42,5371 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); - ent.v[ "origin" ] = ( 466,63, 1853,76, 407,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_com_utility_cool" ); - ent.v[ "origin" ] = ( -401,203, -584,134, 113,233 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_com_utility_cool" ); - ent.v[ "origin" ] = ( -636,419, -698,195, 118,815 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -169,691, -634,368, 68,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -827,659, -664,326, 172,125 ); - ent.v[ "angles" ] = ( 89, 0, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -569,476, -263,486, 68,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 288 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -659,328, -848,59, 54,7092 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 77 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_pop_runner" ); - ent.v[ "origin" ] = ( 257,031, -1143,64, 165,979 ); - ent.v[ "angles" ] = ( 270,999, 350,967, 89,9804 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner_oflow" ); - ent.v[ "origin" ] = ( -751,752, -1333,3, 406,69 ); - ent.v[ "angles" ] = ( 7,34028, 186,943, 18,7287 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = 4,2; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( 120,801, -1939,07, 30,6178 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( -282,766, -1662,54, 69,0009 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( -752,659, -1579,63, 95,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( -601,838, -1289,84, 99,9877 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 357 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( -616,406, -1425,38, 94,3228 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_river_muddy_slw_lg" ); - ent.v[ "origin" ] = ( -2783, -1654,88, -142 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 94 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_plume_lg_blk_distant" ); - ent.v[ "origin" ] = ( -8008,33, -1388,13, 289,25 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 102 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_plume_lg_blk_distant" ); - ent.v[ "origin" ] = ( -6085,92, 7723,71, 217,061 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 66 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_plume_lg_blk_distant" ); - ent.v[ "origin" ] = ( -6456,7, -6681,35, 342,016 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 114 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_plume_lg_blk_distant" ); - ent.v[ "origin" ] = ( 6119,84, 486,473, -30,3497 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 143 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_river_muddy_slw_lg" ); - ent.v[ "origin" ] = ( -3471,06, 131,857, -143 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_plume_md_blk_distant" ); - ent.v[ "origin" ] = ( -8716,04, 2683,01, 59,2097 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 102 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_river_muddy_slw_lg" ); - ent.v[ "origin" ] = ( -4100,46, 1646,38, -143 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 64 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_river_muddy_slw_lg" ); - ent.v[ "origin" ] = ( -1276,37, 3897,28, -141 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 4 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_river_muddy_slw_lg" ); - ent.v[ "origin" ] = ( -763,516, 3997,48, -141 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 4 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); - ent.v[ "origin" ] = ( 492,132, 375,722, 221,882 ); - ent.v[ "angles" ] = ( 270, 357,537, -42,5371 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); - ent.v[ "origin" ] = ( 581,149, 465,246, 192,882 ); - ent.v[ "angles" ] = ( 270, 357,537, -42,5371 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); - ent.v[ "origin" ] = ( 111,822, 1177,74, 99,7472 ); - ent.v[ "angles" ] = ( 287, 90, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -112,287, 1148,92, 15,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 90,6879, 1105,79, 49,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -160,586, 1778,97, 111,772 ); - ent.v[ "angles" ] = ( 273, 270, 89,999 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -82,4727, 1847,82, 114,167 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -232,594, 2106,35, 122,874 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 309 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_lg_runner_oflow" ); - ent.v[ "origin" ] = ( 2413,08, -1589,83, 359,129 ); - ent.v[ "angles" ] = ( 38,4911, 100,029, 4,1444 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_street_sm_area" ); - ent.v[ "origin" ] = ( 2414,13, -296,602, 32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 2361,36, -386,205, 70,7388 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 1070,69, 365,727, 64 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 786,425, 456,36, 64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 139 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_plume_md_blk_distant" ); - ent.v[ "origin" ] = ( 5276,33, -3354,63, 902,325 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 114 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 2149,69, -308,689, 123,043 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 117 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; -} diff --git a/Multiplayer Maps/mp_overflow/maps/mp/mp_overflow.gsc b/Multiplayer Maps/mp_overflow/maps/mp/mp_overflow.gsc deleted file mode 100644 index c206af3..0000000 --- a/Multiplayer Maps/mp_overflow/maps/mp/mp_overflow.gsc +++ /dev/null @@ -1,102 +0,0 @@ -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_overflow_fx::main(); - maps/mp/_load::main(); - maps/mp/mp_overflow_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_overflow" ); - level.overrideplayerdeathwatchtimer = ::leveloverridetime; - level.useintermissionpointsonwavespawn = ::useintermissionpointsonwavespawn; - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - setheliheightpatchenabled( "war_mode_heli_height_lock", 0 ); - level thread water_trigger_init(); - level.remotemotarviewup = 13; -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2300", reset_dvars ); -} - -water_trigger_init() -{ - wait 3; - triggers = getentarray( "trigger_hurt", "classname" ); - _a52 = triggers; - _k52 = getFirstArrayKey( _a52 ); - while ( isDefined( _k52 ) ) - { - trigger = _a52[ _k52 ]; - if ( trigger.origin[ 2 ] > level.mapcenter[ 2 ] ) - { - } - else - { - trigger thread water_trigger_think(); - } - _k52 = getNextArrayKey( _a52, _k52 ); - } -} - -water_trigger_think() -{ - for ( ;; ) - { - self waittill( "trigger", entity ); - if ( isplayer( entity ) ) - { - entity playsound( "mpl_splash_death" ); - playfx( level._effect[ "water_splash" ], entity.origin + vectorScale( ( 0, 0, 1 ), 10 ) ); - } - } -} - -leveloverridetime( defaulttime ) -{ - if ( self isinwater() ) - { - return 0,4; - } - return defaulttime; -} - -useintermissionpointsonwavespawn() -{ - return self isinwater(); -} - -isinwater() -{ - triggers = getentarray( "trigger_hurt", "classname" ); - _a98 = triggers; - _k98 = getFirstArrayKey( _a98 ); - while ( isDefined( _k98 ) ) - { - trigger = _a98[ _k98 ]; - if ( trigger.origin[ 2 ] > level.mapcenter[ 2 ] ) - { - } - else - { - if ( self istouching( trigger ) ) - { - return 1; - } - } - _k98 = getNextArrayKey( _a98, _k98 ); - } - return 0; -} diff --git a/Multiplayer Maps/mp_overflow/maps/mp/mp_overflow_amb.gsc b/Multiplayer Maps/mp_overflow/maps/mp/mp_overflow_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_overflow/maps/mp/mp_overflow_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_overflow/maps/mp/mp_overflow_fx.gsc b/Multiplayer Maps/mp_overflow/maps/mp/mp_overflow_fx.gsc deleted file mode 100644 index 89ad68b..0000000 --- a/Multiplayer Maps/mp_overflow/maps/mp/mp_overflow_fx.gsc +++ /dev/null @@ -1,64 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); - -main() -{ - precache_fxanim_props(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_overflow_fx::main(); - maps/mp/createart/mp_overflow_art::main(); -} - -precache_scripted_fx() -{ - level._effect[ "water_splash" ] = loadfx( "bio/player/fx_player_water_splash_mp" ); -} - -precache_createfx_fx() -{ - level._effect[ "fx_mp_light_dust_motes_md" ] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); - level._effect[ "fx_light_flour_glow_cool_sngl_shrt" ] = loadfx( "light/fx_light_flour_glow_cool_sngl_shrt" ); - level._effect[ "fx_light_lantern_dec_red" ] = loadfx( "light/fx_light_lantern_dec_red" ); - level._effect[ "fx_light_com_utility_cool" ] = loadfx( "light/fx_light_com_utility_cool" ); - level._effect[ "fx_mp_sun_flare_overflow" ] = loadfx( "lens_flares/fx_lf_mp_overflow_sun1" ); - level._effect[ "fx_mp_water_drip_light_long" ] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); - level._effect[ "fx_mp_water_drip_light_shrt" ] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_shrt" ); - level._effect[ "fx_water_river_muddy_slw_lg" ] = loadfx( "water/fx_water_river_muddy_slw_lg" ); - level._effect[ "fx_insects_roaches_short" ] = loadfx( "bio/insects/fx_insects_roaches_short" ); - level._effect[ "fx_insects_swarm_md_light" ] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); - level._effect[ "fx_insects_swarm_lg_light" ] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); - level._effect[ "fx_debris_papers_narrow" ] = loadfx( "env/debris/fx_debris_papers_narrow" ); - level._effect[ "fx_smk_smolder_black_slow" ] = loadfx( "smoke/fx_smk_smolder_black_slow" ); - level._effect[ "fx_smk_tin_hat_sm" ] = loadfx( "smoke/fx_smk_tin_hat_sm" ); - level._effect[ "fx_mp_smk_plume_lg_blk_distant" ] = loadfx( "maps/mp_maps/fx_mp_smk_plume_md_blk_distant_wispy" ); - level._effect[ "fx_mp_smk_plume_md_blk_distant" ] = loadfx( "maps/mp_maps/fx_mp_smk_plume_sm_blk_distant_wispy" ); - level._effect[ "fx_fire_sm" ] = loadfx( "env/fire/fx_fire_sm" ); - level._effect[ "fx_fire_detail" ] = loadfx( "env/fire/fx_fire_detail_sm_nodlight" ); - level._effect[ "fx_fog_street_md_area" ] = loadfx( "fog/fx_fog_street_md_area" ); - level._effect[ "fx_fog_street_sm_area" ] = loadfx( "fog/fx_fog_street_sm_area" ); - level._effect[ "fx_mp_elec_spark_burst_sm_oflow" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_sm_oflow" ); - level._effect[ "fx_mp_elec_spark_burst_sm_runner_oflow" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_sm_runner_oflow" ); - level._effect[ "fx_mp_elec_spark_burst_xsm_thin" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin" ); - level._effect[ "fx_mp_elec_spark_burst_xsm_thin_runner" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin_runner" ); - level._effect[ "fx_mp_elec_spark_burst_md_oflow" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_md_oflow" ); - level._effect[ "fx_mp_elec_spark_burst_md_runner_oflow" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_md_runner_oflow" ); - level._effect[ "fx_mp_elec_spark_burst_lg_oflow" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_lg_oflow" ); - level._effect[ "fx_mp_elec_spark_burst_lg_runner_oflow" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_lg_runner_oflow" ); - level._effect[ "fx_mp_elec_spark_pop_runner" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_pop_runner" ); - level._effect[ "fx_mp_debris_car_floating_river" ] = loadfx( "maps/mp_maps/fx_mp_debris_car_floating_river" ); - level._effect[ "fx_mp_steam_gas_pipe_md" ] = loadfx( "maps/mp_maps/fx_mp_steam_gas_pipe_md" ); - level._effect[ "fx_mp_steam_pipe_md" ] = loadfx( "maps/mp_maps/fx_mp_steam_pipe_md" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "canopy04" ] = %fxanim_yemen_cloth_canopy04_anim; - level.scr_anim[ "fxanim_props" ][ "canopy04_lrg" ] = %fxanim_yemen_cloth_canopy04_lrg_anim; - level.scr_anim[ "fxanim_props" ][ "canopy07_lrg" ] = %fxanim_yemen_cloth_canopy07_lrg_anim; - level.scr_anim[ "fxanim_props" ][ "canopy08" ] = %fxanim_yemen_cloth_canopy08_anim; - level.scr_anim[ "fxanim_props" ][ "canopy08_lrg" ] = %fxanim_yemen_cloth_canopy08_lrg_anim; - level.scr_anim[ "fxanim_props" ][ "awning_store" ] = %fxanim_gp_awning_store_mideast_anim; - level.scr_anim[ "fxanim_props" ][ "wire_light" ] = %fxanim_mp_overflow_wire_light_anim; -} diff --git a/Multiplayer Maps/mp_paintball/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_paintball/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_paintball/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_paintball/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_paintball/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_paintball/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_paintball/maps/mp/createfx/mp_paintball_fx.gsc b/Multiplayer Maps/mp_paintball/maps/mp/createfx/mp_paintball_fx.gsc deleted file mode 100644 index 40536cb..0000000 --- a/Multiplayer Maps/mp_paintball/maps/mp/createfx/mp_paintball_fx.gsc +++ /dev/null @@ -1,1505 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 853,916, 167,409, 288,125 ); - ent.v[ "angles" ] = ( 38,8159, 207,967, 49,447 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 835,604, 217,563, 269,156 ); - ent.v[ "angles" ] = ( 38,8159, 207,967, 49,447 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 931,293, 197,565, 305,875 ); - ent.v[ "angles" ] = ( 38,8159, 207,967, 49,447 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 993,701, 167,532, 313,901 ); - ent.v[ "angles" ] = ( 38,816, 207,967, 170,447 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1015,32, 179,95, 309,418 ); - ent.v[ "angles" ] = ( 38,816, 207,967, 170,447 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 55,4715, 1265,72, -1,047 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -291,529, 1728,68, 12,2948 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -945,343, 1521,39, 3,24538 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -469,866, 792,899, 6 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 101,69, -33,0674, -0,300524 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 475,972, -1992,85, -5,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -111,691, -2233,34, -5,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -464,368, -1816,14, 0,125007 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 498,27, 1204,66, 0 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 168,332, 770,189, -5,09031 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_lg_lng_wide_ln" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -943,48, -264,946, 453,357 ); - ent.v[ "angles" ] = ( 32,1322, 209,082, -83,3389 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_lg_lng_wide_ln" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -939,83, -13,1875, 452,875 ); - ent.v[ "angles" ] = ( 31,3491, 206,621, -84,7206 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1241,27, -1507,4, 155,28 ); - ent.v[ "angles" ] = ( 32,6311, 210, 37,8647 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1241,23, -1491,73, 155,047 ); - ent.v[ "angles" ] = ( 32,7278, 208,818, 95,227 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1240,58, -1475,4, 154,047 ); - ent.v[ "angles" ] = ( 32,6312, 210, 9,86474 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1422,65, -1491,18, 148,28 ); - ent.v[ "angles" ] = ( 32,6311, 210, 37,8647 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1422,96, -1458,62, 148,047 ); - ent.v[ "angles" ] = ( 32,6312, 210, 9,86474 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1422,62, -1475,51, 148,047 ); - ent.v[ "angles" ] = ( 32,7278, 208,818, 95,227 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1061,06, -1502,77, 151,28 ); - ent.v[ "angles" ] = ( 32,6311, 210, 37,8647 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1061,38, -1470,21, 151,047 ); - ent.v[ "angles" ] = ( 32,6312, 210, 9,86474 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1061,03, -1487,1, 151,047 ); - ent.v[ "angles" ] = ( 32,7278, 208,818, 95,227 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -862,985, -1502,39, 150,28 ); - ent.v[ "angles" ] = ( 32,6311, 210, 37,8647 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -866,956, -1478,05, 150,047 ); - ent.v[ "angles" ] = ( 32,6311, 210, 5,8648 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -862,95, -1486,72, 150,047 ); - ent.v[ "angles" ] = ( 32,7278, 208,818, 95,227 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -667,625, -1504,23, 151,28 ); - ent.v[ "angles" ] = ( 32,6311, 210, 37,8647 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -667,408, -1474,62, 151,047 ); - ent.v[ "angles" ] = ( 32,6312, 210, 9,86474 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -667,06, -1491,51, 151,047 ); - ent.v[ "angles" ] = ( 32,7278, 208,818, 95,227 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -679,99, -1700,09, 154,28 ); - ent.v[ "angles" ] = ( 32,6311, 210, 37,8647 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -679,955, -1684,42, 154,047 ); - ent.v[ "angles" ] = ( 32,7278, 208,818, 95,227 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -859,14, -1689,87, 157,242 ); - ent.v[ "angles" ] = ( 32,6311, 210, 37,8647 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -859,105, -1674,2, 157,008 ); - ent.v[ "angles" ] = ( 32,7278, 208,818, 95,227 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1062,25, -1686,62, 151,242 ); - ent.v[ "angles" ] = ( 32,6311, 210, 37,8647 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1062,21, -1670,95, 151,008 ); - ent.v[ "angles" ] = ( 32,7278, 208,818, 95,227 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1227,05, -1685,47, 151,242 ); - ent.v[ "angles" ] = ( 32,6311, 210, 37,8647 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1227,01, -1669,81, 151,008 ); - ent.v[ "angles" ] = ( 32,7278, 208,818, 95,227 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1436,02, -1692,94, 141,242 ); - ent.v[ "angles" ] = ( 32,6311, 210, 37,8647 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1435,98, -1677,27, 141,008 ); - ent.v[ "angles" ] = ( 32,7278, 208,818, 95,227 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -627,227, -187,197, 273,139 ); - ent.v[ "angles" ] = ( 35,1269, 211,47, 175 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -629,589, -442,371, 268,018 ); - ent.v[ "angles" ] = ( 35,1269, 211,47, 175 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -626,913, 63,8482, 277,419 ); - ent.v[ "angles" ] = ( 35,1269, 211,47, 175 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -619,598, -691,534, 271,625 ); - ent.v[ "angles" ] = ( 35,1269, 211,47, 175 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -619,9, 320,243, 269,725 ); - ent.v[ "angles" ] = ( 35,1269, 211,47, 175 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -644,557, -38,1687, 256,892 ); - ent.v[ "angles" ] = ( 35,1269, 211,47, -62 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -628,461, -294,941, 254,376 ); - ent.v[ "angles" ] = ( 35,1269, 211,47, -62 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -639,372, -552,237, 258,15 ); - ent.v[ "angles" ] = ( 35,1269, 211,47, -62 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -639,873, -803,488, 249,125 ); - ent.v[ "angles" ] = ( 35,1269, 211,47, -62 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -640,368, 219,354, 272,015 ); - ent.v[ "angles" ] = ( 35,1269, 211,47, -62 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -925,381, 966,789, 150,244 ); - ent.v[ "angles" ] = ( 32,6312, 210, 9,86474 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -955,646, 1024,99, 151,083 ); - ent.v[ "angles" ] = ( 32,6312, 210, 9,86474 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1621,58, -1521,9, 145,28 ); - ent.v[ "angles" ] = ( 32,6311, 210, 37,8647 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1621,55, -1506,23, 145,047 ); - ent.v[ "angles" ] = ( 32,7278, 208,818, 95,227 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1621,89, -1489,34, 145,047 ); - ent.v[ "angles" ] = ( 32,6312, 210, 9,86474 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1616,45, -1697,12, 139,28 ); - ent.v[ "angles" ] = ( 32,6311, 210, 37,8647 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_wide" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1616,42, -1681,45, 139,047 ); - ent.v[ "angles" ] = ( 32,7278, 208,818, 95,227 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1616,76, -1664,56, 139,047 ); - ent.v[ "angles" ] = ( 32,6312, 210, 9,86474 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -625,719, 477,332, 160,125 ); - ent.v[ "angles" ] = ( 38,8159, 207,967, -136,553 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -555,126, 421,471, 138,125 ); - ent.v[ "angles" ] = ( 38,8159, 207,967, 49,447 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -784,732, 518,297, 149,125 ); - ent.v[ "angles" ] = ( 38,8159, 207,967, 49,447 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1010,03, 408,508, 138,125 ); - ent.v[ "angles" ] = ( 38,8159, 207,967, 49,447 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -254,38, -1115,53, 21,7813 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 263,481, -1161,17, 55,722 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 526,881, -505,724, 11,3183 ); - ent.v[ "angles" ] = ( 272, 180, 180 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 531,171, -48,0607, 59,1306 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 285,709, 308,13, 38,603 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1032,26, 703,104, 59,9999 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -716,446, -1606,04, 49,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 182 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1340,4, -1752,37, 65,455 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 92 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1279,69, -985,676, 60,726 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 271 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 433,301, 914,848, 116,203 ); - ent.v[ "angles" ] = ( 33,5541, 208,203, 7,04142 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 372,095, -621,87, 92,111 ); - ent.v[ "angles" ] = ( 31,7444, 207,985, 14,6234 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 383,682, 245,065, 214,726 ); - ent.v[ "angles" ] = ( 40,0748, 210,956, -6,76123 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -629,544, 1022,31, 172,295 ); - ent.v[ "angles" ] = ( 31,6923, 207,979, -37,3813 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -150,576, 1076,74, 64,642 ); - ent.v[ "angles" ] = ( 33,4779, 209,399, 0,701882 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 405,132, 300,341, 230,851 ); - ent.v[ "angles" ] = ( 33,7439, 197,547, 164,966 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 742,76, -1203,44, 301,118 ); - ent.v[ "angles" ] = ( 49,8551, 199,993, 5,24075 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 975,237, -499,207, 482,937 ); - ent.v[ "angles" ] = ( 34,722, 197,799, -167,892 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 964,307, -661,867, 479,652 ); - ent.v[ "angles" ] = ( 34,722, 197,799, -167,892 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 100,859, -1250,95, 111,289 ); - ent.v[ "angles" ] = ( 38,074, 210,572, -178,762 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 9,69452, -1697,95, 144,471 ); - ent.v[ "angles" ] = ( 29,7706, 233,925, 160,249 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_tree_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -781,083, 788,052, 205,275 ); - ent.v[ "angles" ] = ( 30,4388, 218,388, 11,0068 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_tree_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -771,748, 842,786, 174,082 ); - ent.v[ "angles" ] = ( 30,4388, 218,388, 21,0068 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_tree_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -799,88, 804,998, 188,504 ); - ent.v[ "angles" ] = ( 30,4388, 218,388, -16,9932 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -250,611, 207,339, 107,696 ); - ent.v[ "angles" ] = ( 44,786, 213,051, 92,3306 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_tree_md_lng_thin" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -939,89, 723,277, 330 ); - ent.v[ "angles" ] = ( 30,4388, 218,388, 11,0068 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -218,988, -921,311, 120,205 ); - ent.v[ "angles" ] = ( 31,3816, 213,838, 5,68925 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1200,65, -1897,35, 22 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1162,38, -2577,76, 6 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 501,843, -2759,91, 0 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1018,91, -2212,19, 22 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -524,24, -2924,84, 12 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1774,18, 739,939, 11,3555 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1549,6, 2023,86, 27,8375 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -456,397, 2368,44, -23,6198 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1178,73, 2436,94, -35,039 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 247,88, -1555,73, 62,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 989,976, -530,107, 351,917 ); - ent.v[ "angles" ] = ( 37,543, 206,109, -15,4443 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 974,31, -618,38, 466,667 ); - ent.v[ "angles" ] = ( 41,3902, 204,69, -16,3467 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -417,718, -904,594, -8,48339 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 476,497, -518,376, 6,14845 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 129,27, -585,421, -1,83791 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -115,056, 265,543, 0 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 242,373, 309,047, 1,07738 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -53,0083, -849,952, 8,38134 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 155,382, -2578,03, 0,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 591,752, -1040,98, 152,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 583,635, 438,457, 146,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 910,521, -271,777, 141,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 191,592, 1758,77, 10 ); - ent.v[ "angles" ] = ( 271, 180, 180 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 552,886, -1548,95, 200,534 ); - ent.v[ "angles" ] = ( 35,1491, 210,089, 155,916 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 380,266, -61,6555, 20,9007 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -403,308, 413,784, 9,59585 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1119,82, 854,265, 8,51057 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -697,331, 1407,15, -7,21867 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 951,304, -235,513, 306,875 ); - ent.v[ "angles" ] = ( 36,6426, 217,197, 14,2879 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 978,66, 192,493, 291,944 ); - ent.v[ "angles" ] = ( 38,816, 207,967, 170,447 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 786,513, 275,931, 266,135 ); - ent.v[ "angles" ] = ( 38,816, 207,967, 35,447 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1047, 197,378, 256,757 ); - ent.v[ "angles" ] = ( 38,816, 207,967, 35,447 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1010,04, -955,837, 374,468 ); - ent.v[ "angles" ] = ( 38,816, 207,967, 35,447 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1011,72, -925,499, 384,229 ); - ent.v[ "angles" ] = ( 38,816, 207,967, 35,447 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 991,491, -721,681, 357,63 ); - ent.v[ "angles" ] = ( 37,7135, 208,727, 6,04668 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -639,866, 558,088, 158,262 ); - ent.v[ "angles" ] = ( 38,816, 207,967, 35,447 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -874,697, 407,986, 150,875 ); - ent.v[ "angles" ] = ( 38,816, 207,967, 35,447 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -951,398, 403,491, 148,875 ); - ent.v[ "angles" ] = ( 38,816, 207,967, 35,447 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -998,303, 584,186, 178,448 ); - ent.v[ "angles" ] = ( 38,816, 207,967, 35,447 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -834,493, 849,534, 196,54 ); - ent.v[ "angles" ] = ( 38,816, 207,967, 35,447 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -847,664, 767,126, 280,06 ); - ent.v[ "angles" ] = ( 38,816, 207,967, 35,447 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 382,519, 260,178, 232,875 ); - ent.v[ "angles" ] = ( 43,74, 208,36, 68,2065 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -926,265, -2742,17, 30 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_smk_truck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 414,332, -1731,1, 45,4522 ); - ent.v[ "angles" ] = ( 8,10356, 345,246, 1,22482 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_smk_truck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 432,433, -1649,75, 56,5407 ); - ent.v[ "angles" ] = ( 6,27825, 59,0912, 0,74828 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -651,756, -556,564, 293,73 ); - ent.v[ "angles" ] = ( 51,3804, 200,828, -85,0573 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -656,227, -311,202, 294,451 ); - ent.v[ "angles" ] = ( 51,3804, 200,828, -85,0573 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -656,262, -53,4414, 294,771 ); - ent.v[ "angles" ] = ( 51,3804, 200,828, -85,0573 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -658,057, 190,085, 299,978 ); - ent.v[ "angles" ] = ( 51,3804, 200,828, -85,0573 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -663,787, -809,432, 298,547 ); - ent.v[ "angles" ] = ( 51,3804, 200,828, -85,0573 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_smk_truck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -259,268, -2011,91, 51,6704 ); - ent.v[ "angles" ] = ( 1,09209, 177,503, -7,04331 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 107,667, -1816,88, 3,12502 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -637,971, 1119,35, 154,101 ); - ent.v[ "angles" ] = ( 31,6923, 207,979, -43,3813 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -652,574, 1564,88, 105,607 ); - ent.v[ "angles" ] = ( 37,4554, 209,587, 90,3651 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -895,284, 1204,48, 214,281 ); - ent.v[ "angles" ] = ( 40,0782, 199,24, -14,4415 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -378,197, -1272,52, -4,91957 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 67,2094, 852,374, 93,562 ); - ent.v[ "angles" ] = ( 27,3522, 238,813, -162,138 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -114,438, 499,383, 72,6539 ); - ent.v[ "angles" ] = ( 27,3521, 238,812, -161,138 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 375,377, 1483,1, 81,5643 ); - ent.v[ "angles" ] = ( 27,3521, 238,812, -161,138 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 371,022, 1136,43, 101,809 ); - ent.v[ "angles" ] = ( 32,6311, 210, -53,1348 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 366,667, 1132,32, 92,5703 ); - ent.v[ "angles" ] = ( 32,6311, 210, -53,1348 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 380,573, 1119,1, 52,39 ); - ent.v[ "angles" ] = ( 32,6311, 210, -53,1348 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 489,886, 1466,07, 74,5667 ); - ent.v[ "angles" ] = ( 32,6311, 210, 1,86537 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 501,321, 1474,88, 68,8798 ); - ent.v[ "angles" ] = ( 32,6311, 210, 1,86537 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -490,489, 1508,21, 222,34 ); - ent.v[ "angles" ] = ( 37,4555, 209,587, 66,3646 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -915,905, 1178,48, 201,917 ); - ent.v[ "angles" ] = ( 40,0782, 199,24, 178,559 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -941,156, 921,213, 43,998 ); - ent.v[ "angles" ] = ( 31,6633, 216,326, -173,33 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -429,512, 1002,86, 89,6468 ); - ent.v[ "angles" ] = ( 31,7741, 215,158, -173,944 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -178,757, 1388,08, 157,946 ); - ent.v[ "angles" ] = ( 31,6633, 216,326, -173,33 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 118,577, -359,983, 61,0809 ); - ent.v[ "angles" ] = ( 31,6633, 216,326, -173,33 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1048,11, 312,186, 215,231 ); - ent.v[ "angles" ] = ( 35,1268, 211,47, -123 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_lng_wd_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 157,22, 583,191, 172,797 ); - ent.v[ "angles" ] = ( 33,9524, 203,416, 4,38036 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_smk_truck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 323,251, -3455,93, 2,6891 ); - ent.v[ "angles" ] = ( 17,3589, 13,7113, 7,32843 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_smk_truck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 277,271, -3424,63, 19,8052 ); - ent.v[ "angles" ] = ( 7,99734, 137,989, -0,105292 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_smk_truck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -208,996, -1973,54, 62,1643 ); - ent.v[ "angles" ] = ( 11,3532, 27,8458, -2,62534 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 980,969, -598,063, 360,761 ); - ent.v[ "angles" ] = ( 37,7137, 208,727, -126,953 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -19,0417, -3324,88, 31,827 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -944,878, -3087,09, 18 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1623,86, -2282,52, 32,3783 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1351,13, -2571,08, 53 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_falling_pine_nowind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -842,38, 766,974, 218,54 ); - ent.v[ "angles" ] = ( 357, 339, 0 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_falling_pine_nowind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -685,063, 786,549, 249 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 269 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_leaves_falling_pine_nowind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1324,09, 120,252, 261,276 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 81 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -49,3284, -1052,68, 95,6226 ); - ent.v[ "angles" ] = ( 31,0338, 210,142, 11,7272 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -138,358, -986,313, 95,3433 ); - ent.v[ "angles" ] = ( 32,5559, 212,947, -170,83 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -99,9566, -1014,91, 95,2054 ); - ent.v[ "angles" ] = ( 31,0338, 210,142, 11,7272 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -17,8136, -1072,15, 95,6869 ); - ent.v[ "angles" ] = ( 31,0338, 210,142, 11,7272 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 282,196, 680,996, 50,2171 ); - ent.v[ "angles" ] = ( 271,41, 314,763, 45,1243 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 637,925, -192,734, 134,693 ); - ent.v[ "angles" ] = ( 41, 180, 0 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 609,158, -768,878, 113,543 ); - ent.v[ "angles" ] = ( 41, 180, 0 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 485,66, -932,921, 113,684 ); - ent.v[ "angles" ] = ( 43, 90, 0 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 791,282, 364,184, 311,721 ); - ent.v[ "angles" ] = ( 38,8161, 207,967, 177,447 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 787,182, 367,261, 301,053 ); - ent.v[ "angles" ] = ( 38,8161, 207,967, 177,447 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 933,74, 195,593, 298,941 ); - ent.v[ "angles" ] = ( 38,816, 207,967, 170,447 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 980,31, -302,056, 294,449 ); - ent.v[ "angles" ] = ( 38,816, 207,967, 170,447 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 969,308, -425,153, 301,225 ); - ent.v[ "angles" ] = ( 38,816, 207,967, 170,447 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 907,835, -339,172, 283,875 ); - ent.v[ "angles" ] = ( 38,8159, 207,967, 49,447 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1049,2, 527,18, 169,125 ); - ent.v[ "angles" ] = ( 36,3528, 205,807, 34,1293 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1076,85, 430,755, 158,125 ); - ent.v[ "angles" ] = ( 38,8159, 207,967, 49,447 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 787,181, 1062,51, 319,921 ); - ent.v[ "angles" ] = ( 31,6921, 207,979, -3,38119 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 783,928, 1013, 297,336 ); - ent.v[ "angles" ] = ( 31,6921, 207,979, -3,38119 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 779,37, 969,046, 303,044 ); - ent.v[ "angles" ] = ( 31,6921, 207,979, -3,38119 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 781,392, 930,053, 309,675 ); - ent.v[ "angles" ] = ( 31,6921, 207,979, -3,38119 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -148,038, 858,137, 135,692 ); - ent.v[ "angles" ] = ( 31,6919, 207,979, 164,619 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -158,696, 958,748, 137,46 ); - ent.v[ "angles" ] = ( 31,6919, 207,979, 164,619 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -247,777, 1443,58, 234,082 ); - ent.v[ "angles" ] = ( 31,6919, 207,979, 164,619 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -240,685, 1440,93, 256,229 ); - ent.v[ "angles" ] = ( 31,6919, 207,979, 164,619 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -238,632, 1445,67, 232,366 ); - ent.v[ "angles" ] = ( 31,6919, 207,979, 164,619 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_lite_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -346,035, -574,066, 188,733 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_lite_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -345,688, -321,647, 191,631 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_lite_wind" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -346,115, -75,1953, 187,874 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1179,96, -1314,62, 127,875 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1370,7, -1317,09, 127,875 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1371,17, -1700,59, 116 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1179,22, -1701,16, 116 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -987,427, -1700,91, 127,875 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -987,166, -1507,44, 127,875 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -795,706, -1507,04, 127,875 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -794,945, -1699,91, 127,875 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -687,867, -1315,95, 127,875 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -816,761, -1317,05, 127,875 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -520,761, 270,759, 127,875 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -327,485, 273,217, 127,875 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -518,671, 77,9819, 127,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -328,127, 79,0751, 127,875 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -768,53, -63,2378, 270,778 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 693,118, 959,827, 238 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 182,904, -156,946, 116,617 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 264,276, 272,863, 108,457 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -765,508, -318,599, 271,188 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -765,663, -574,933, 271,191 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -767,305, -832,541, 271,178 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -764,961, 193,323, 271,178 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1408,6, -833,346, 271,182 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1407,19, -575,874, 271,182 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1408,56, -319,679, 271,194 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1408,49, -63,7209, 271,177 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_vent_ceiling_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1407,45, 192,251, 271,174 ); - ent.v[ "angles" ] = ( 88, 180, -180 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_md_xlng_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -542,184, 1525,21, 233,101 ); - ent.v[ "angles" ] = ( 37,4555, 209,587, 66,3646 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1040,33, 502,334, 160,125 ); - ent.v[ "angles" ] = ( 38,8159, 207,967, 49,447 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -854,085, 463,55, 146,125 ); - ent.v[ "angles" ] = ( 38,8159, 207,967, 127,447 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -675,838, 517,929, 173,125 ); - ent.v[ "angles" ] = ( 38,8159, 207,967, 127,447 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -708,341, 431,103, 162,875 ); - ent.v[ "angles" ] = ( 38,816, 207,967, -72,553 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -616,97, 492,367, 176,134 ); - ent.v[ "angles" ] = ( 38,816, 207,967, -72,553 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 546,42, -198,717, 44,0967 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 830,342, 1218,7, 271,002 ); - ent.v[ "angles" ] = ( 31,6921, 207,979, -3,38119 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 831,063, 1442,47, 267,876 ); - ent.v[ "angles" ] = ( 31,6921, 207,979, -3,38119 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -853,677, 865,61, 271,714 ); - ent.v[ "angles" ] = ( 38,816, 207,967, 35,447 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_camo_net_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -775,059, 731,217, 255,456 ); - ent.v[ "angles" ] = ( 38,816, 207,967, 35,447 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1169,01, 222,294, 113,582 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1168,09, -157,784, 202,32 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -809,053, -280,603, 150,167 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1173,67, -490,371, 184,947 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -900,101, -757,671, 135,902 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1089,96, -539,078, 64,9642 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1095,56, -139,361, 74,1519 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_gray" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1326,27, -1103,59, 15,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_sun_lg_lng_wide_ln" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -947,777, -511,714, 449,719 ); - ent.v[ "angles" ] = ( 32,1322, 209,082, -83,3389 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_paintball_sun1" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 226863, 123066, 149556 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_smk_truck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 191,348, -2750,22, 6,6123 ); - ent.v[ "angles" ] = ( 10, 39, 0 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_smk_truck_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 135,304, -2740,66, 5,61442 ); - ent.v[ "angles" ] = ( 8,93908, 147,486, 0,985817 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1050,16, -164,059, 220,926 ); - ent.v[ "angles" ] = ( 31,6919, 207,979, 1,61892 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1059,45, -196,574, 226,329 ); - ent.v[ "angles" ] = ( 31,6919, 207,979, 1,61892 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1073,12, -170,085, 208,913 ); - ent.v[ "angles" ] = ( 31,6919, 207,979, 1,61892 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1059,68, -341,59, 217,249 ); - ent.v[ "angles" ] = ( 31,6919, 207,979, 1,61892 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1070,24, -345,177, 222,634 ); - ent.v[ "angles" ] = ( 31,6919, 207,979, 1,61892 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1062,87, -341,465, 199,866 ); - ent.v[ "angles" ] = ( 31,6919, 207,979, 1,61892 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1067,6, -207,208, 235,069 ); - ent.v[ "angles" ] = ( 31, 198, 0 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_pntbll_light_ray_shop_md_lng_dim" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1041,51, -389,538, 208,449 ); - ent.v[ "angles" ] = ( 31,6919, 207,979, 1,61892 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 717,398, -1801,87, 54,6422 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -915,192, 526,495, 80,3322 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -800,266, 491,575, 80,2705 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 184,345, 1722,99, 46 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 594,4, 1262,37, 23 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 539,724, 1091,04, 25 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 531,824, -834,257, 41,8037 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 533,071, -545,16, 0,339389 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pntbll_steam_thck_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 306,758, -1014,34, 15,1415 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_police_car" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1022,49, -2902,1, -6 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 140 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_police_car" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1545,98, -2838,56, -6 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 5,00001 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_police_car" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2372,88, -2183,73, -6 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 40 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_police_car" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2368,88, -1973,73, -6 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 40 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_police_car" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -726,19, -3445,99, -6 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 110 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_police_car" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -477,99, -2921,81, -6 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 20 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_police_car" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 268,36, -3510,83, 50,59 ); - ent.v[ "angles" ] = ( 13,9999, 47,606, -179,951 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_police_car" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 103,34, -2802,73, -6 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 28,9 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_track_omni" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -351,812, 254,061, 121,194 ); - ent.v[ "angles" ] = ( 17, 89, 0 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_track_omni" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -403,855, 253,161, 120,747 ); - ent.v[ "angles" ] = ( 34, 87, 0 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_track_omni" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -455,94, 254,449, 121,693 ); - ent.v[ "angles" ] = ( 14,4775, 101,496, -3,96715 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_track_omni" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -512,009, 254,746, 122,279 ); - ent.v[ "angles" ] = ( 19,026, 90,8802, -4,45222 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_track_omni" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -588,509, 117,018, 122,319 ); - ent.v[ "angles" ] = ( 21, 202, 0 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_track_omni" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -588,365, 173,301, 122,022 ); - ent.v[ "angles" ] = ( 22,5176, 179,206, -7,99152 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_track_omni" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -587,131, 224,059, 120,92 ); - ent.v[ "angles" ] = ( 37,35, 176,612, -9,2972 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_track_omni" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -587,932, 277,191, 121,403 ); - ent.v[ "angles" ] = ( 33,4, 177,385, -8,84919 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_track_omni" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -552,266, 32,4679, 121,566 ); - ent.v[ "angles" ] = ( 20,8105, 262,48, 22,2274 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_track_omni" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -500,162, 33,4249, 120,904 ); - ent.v[ "angles" ] = ( 18,4435, 268,334, 24,1958 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_track_omni" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -447,916, 32,3667, 121,571 ); - ent.v[ "angles" ] = ( 23,7793, 280,793, 29,4047 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_track_omni" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -391,868, 32,0162, 122,247 ); - ent.v[ "angles" ] = ( 26,6135, 274,947, 26,9134 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -763,463, -1008,66, 145,997 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -956,447, -1103,86, 145,959 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -835,265, -1306,81, 125,989 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -666,835, -1306,65, 126,928 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -666,912, -1306,67, 126,922 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -835,446, -1306,9, 126,962 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -763,12, -1011,6, 145,979 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -957,231, -1103,37, 146,975 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_track_omni" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1127,06, -1008,05, 142,124 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 15 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_track_omni" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1127,32, -1064,03, 141,654 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 25 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_track_omni" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1128,54, -1115,89, 140,792 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 48 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_track_omni" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1127,56, -1168,18, 141,413 ); - ent.v[ "angles" ] = ( 25,9836, 357,775, -0,940139 ); - ent.v[ "delay" ] = -85; -} diff --git a/Multiplayer Maps/mp_paintball/maps/mp/mp_paintball.gsc b/Multiplayer Maps/mp_paintball/maps/mp/mp_paintball.gsc deleted file mode 100644 index a29b31c..0000000 --- a/Multiplayer Maps/mp_paintball/maps/mp/mp_paintball.gsc +++ /dev/null @@ -1,111 +0,0 @@ -#include maps/mp/gametypes/_spawning; -#include maps/mp/_compass; -#include common_scripts/utility; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_paintball_fx::main(); - precachemodel( "collision_physics_cylinder_32x128" ); - precachemodel( "collision_physics_64x64x10" ); - precachemodel( "collision_physics_32x32x10" ); - precachemodel( "p6_pai_fence_pole" ); - maps/mp/_load::main(); - maps/mp/mp_paintball_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_paintball" ); - setdvar( "compassmaxrange", "2100" ); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - spawncollision( "collision_physics_cylinder_32x128", "collider", ( 1071,5, -1998,5, 373,5 ), ( 0, 0, 1 ) ); - spawncollision( "collision_physics_cylinder_32x128", "collider", ( 1071,5, -1998,5, 262 ), ( 0, 0, 1 ) ); - spawncollision( "collision_physics_cylinder_32x128", "collider", ( 1071,5, -1998,5, 150 ), ( 0, 0, 1 ) ); - spawncollision( "collision_physics_cylinder_32x128", "collider", ( 1071,5, -1998,5, 37,5 ), ( 0, 0, 1 ) ); - spawncollision( "collision_physics_cylinder_32x128", "collider", ( -1446,5, 524,5, 401,5 ), ( 0, 0, 1 ) ); - spawncollision( "collision_physics_cylinder_32x128", "collider", ( -1446,5, 524,5, 290 ), ( 0, 0, 1 ) ); - spawncollision( "collision_physics_cylinder_32x128", "collider", ( -1446,5, 524,5, 178 ), ( 0, 0, 1 ) ); - spawncollision( "collision_physics_cylinder_32x128", "collider", ( -1446,5, 524,5, 65,5 ), ( 0, 0, 1 ) ); - spawncollision( "collision_physics_cylinder_32x128", "collider", ( -1303,5, 1611,5, 394,5 ), ( 0, 0, 1 ) ); - spawncollision( "collision_physics_cylinder_32x128", "collider", ( -1303,5, 1611,5, 283 ), ( 0, 0, 1 ) ); - spawncollision( "collision_physics_cylinder_32x128", "collider", ( -1303,5, 1611,5, 171 ), ( 0, 0, 1 ) ); - spawncollision( "collision_physics_cylinder_32x128", "collider", ( -1303,5, 1611,5, 58,5 ), ( 0, 0, 1 ) ); - spawncollision( "collision_physics_64x64x10", "collider", ( -104,5, -1176,5, 9 ), ( 9,93, 310, 79,786 ) ); - spawncollision( "collision_physics_32x32x10", "collider", ( -105, -1166,5, 38 ), ( 317,842, 319,39, 76,1599 ) ); - spawncollision( "collision_physics_32x32x10", "collider", ( -96,5, -1173, 38,5 ), ( 310,109, 322,353, 74,0248 ) ); - spawncollision( "collision_physics_32x32x10", "collider", ( -93, -1180,5, 38,5 ), ( 310,109, 322,353, 74,0248 ) ); - pole1 = spawn( "script_model", ( 385, 572,5, -39 ) ); - pole1.angles = vectorScale( ( 0, 0, 1 ), 282,6 ); - pole1 setmodel( "p6_pai_fence_pole" ); - maps/mp/gametypes/_spawning::level_use_unified_spawning( 1 ); - registerclientfield( "scriptmover", "police_car_lights", 1, 1, "int" ); - level thread destructible_lights(); - level.remotemotarviewleft = 35; - level.remotemotarviewright = 35; - level.remotemotarviewup = 18; - level thread glass_node_think(); -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2200", reset_dvars ); - ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1200", reset_dvars ); -} - -destructible_lights() -{ - wait 0,05; - destructibles = getentarray( "destructible", "targetname" ); - _a98 = destructibles; - _k98 = getFirstArrayKey( _a98 ); - while ( isDefined( _k98 ) ) - { - destructible = _a98[ _k98 ]; - if ( destructible.destructibledef == "veh_t6_police_car_destructible_mp" ) - { - destructible thread destructible_think( "police_car_lights" ); - destructible setclientfield( "police_car_lights", 1 ); - } - _k98 = getNextArrayKey( _a98, _k98 ); - } -} - -destructible_think( clientfield ) -{ - self waittill_any( "death", "destructible_base_piece_death" ); - self setclientfield( clientfield, 0 ); -} - -glass_node_think() -{ - wait 1; - glass_origin = ( -980,028, -959,375, 60,1195 ); - node_origin = ( -981,75, -934,5, 16 ); - node = getnearestnode( node_origin ); - while ( isDefined( node ) && node.type == "Begin" ) - { - ent = spawn( "script_model", node.origin, 1 ); - ent setmodel( level.deployedshieldmodel ); - ent hide(); - ent disconnectpaths(); - ent.origin -= vectorScale( ( 0, 0, 1 ), 64 ); - for ( ;; ) - { - level waittill( "glass_smash", origin ); - if ( distancesquared( origin, glass_origin ) < 16384 ) - { - ent.origin += vectorScale( ( 0, 0, 1 ), 64 ); - ent delete(); - return; - } - } - } -} diff --git a/Multiplayer Maps/mp_paintball/maps/mp/mp_paintball_amb.gsc b/Multiplayer Maps/mp_paintball/maps/mp/mp_paintball_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_paintball/maps/mp/mp_paintball_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_paintball/maps/mp/mp_paintball_fx.gsc b/Multiplayer Maps/mp_paintball/maps/mp/mp_paintball_fx.gsc deleted file mode 100644 index 8745773..0000000 --- a/Multiplayer Maps/mp_paintball/maps/mp/mp_paintball_fx.gsc +++ /dev/null @@ -1,78 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); -#using_animtree( "fxanim_props_dlc3" ); - -main() -{ - precache_fxanim_props(); - precache_fxanim_props_dlc3(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_paintball_fx::main(); -} - -precache_scripted_fx() -{ -} - -precache_createfx_fx() -{ - level._effect[ "fx_pntbll_light_ray_sun_wide_wndw" ] = loadfx( "light/fx_pntbll_light_ray_sun_wide_wndw" ); - level._effect[ "fx_pntbll_light_ray_sun_md_lng" ] = loadfx( "light/fx_pntbll_light_ray_sun_md_lng" ); - level._effect[ "fx_pntbll_light_ray_sun_md_lng_1s" ] = loadfx( "light/fx_pntbll_light_ray_sun_md_lng_1s" ); - level._effect[ "fx_pntbll_light_ray_sun_md_xlng_1s" ] = loadfx( "light/fx_pntbll_light_ray_sun_md_xlng_1s" ); - level._effect[ "fx_pntbll_light_ray_sun_md_lng_wd_1s" ] = loadfx( "light/fx_pntbll_light_ray_sun_md_lng_wd_1s" ); - level._effect[ "fx_pntbll_light_ray_sun_md_lng_wd" ] = loadfx( "light/fx_pntbll_light_ray_sun_md_lng_wd" ); - level._effect[ "fx_pntbll_light_ray_sun_lg_lng_wide" ] = loadfx( "light/fx_pntbll_light_ray_sun_lg_lng_wide" ); - level._effect[ "fx_pntbll_light_ray_sun_lg_lng_wide_ln" ] = loadfx( "light/fx_pntbll_light_ray_sun_lg_lng_wide_ln" ); - level._effect[ "fx_pntbll_light_ray_sun_md_lng_bright" ] = loadfx( "light/fx_pntbll_light_ray_sun_md_lng_bright" ); - level._effect[ "fx_pntbll_light_ray_tree_md_lng" ] = loadfx( "light/fx_pntbll_light_ray_tree_md_lng" ); - level._effect[ "fx_pntbll_light_ray_tree_md_lng_thin" ] = loadfx( "light/fx_pntbll_light_ray_tree_md_lng_thin" ); - level._effect[ "fx_pntbll_light_ray_tree_md_xlng_thin" ] = loadfx( "light/fx_pntbll_light_ray_tree_md_xlng_thin" ); - level._effect[ "fx_pntbll_light_ray_camo_net_md" ] = loadfx( "light/fx_pntbll_light_ray_camo_net_md" ); - level._effect[ "fx_pntbll_light_ray_camo_net_lng_dim" ] = loadfx( "light/fx_pntbll_light_ray_camo_net_lng_dim" ); - level._effect[ "fx_pntbll_light_ray_shop_md_lng_thin" ] = loadfx( "light/fx_pntbll_light_ray_shop_md_lng_thin" ); - level._effect[ "fx_pntbll_light_ray_shop_md_lng_dim" ] = loadfx( "light/fx_pntbll_light_ray_shop_md_lng_dim" ); - level._effect[ "fx_pntbll_light_ray_shop_md_lng_wide" ] = loadfx( "light/fx_pntbll_light_ray_shop_md_lng_wide" ); - level._effect[ "fx_light_flour_glow_yellow" ] = loadfx( "light/fx_light_flour_glow_yellow" ); - level._effect[ "fx_mp_light_dust_motes_md" ] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); - level._effect[ "fx_light_dust_motes_xsm_short" ] = loadfx( "light/fx_concert_dust_motes_xsm_short" ); - level._effect[ "fx_light_dust_motes_sm" ] = loadfx( "light/fx_light_dust_motes_sm" ); - level._effect[ "fx_dust_motes_blowing_sm" ] = loadfx( "debris/fx_dust_motes_blowing_sm" ); - level._effect[ "fx_insects_swarm_md_light" ] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); - level._effect[ "fx_insects_swarm_lg_light" ] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); - level._effect[ "fx_mp_pntbll_steam_thck_md" ] = loadfx( "maps/mp_maps/fx_mp_pntbll_steam_thck_md" ); - level._effect[ "fx_mp_pntbll_steam_thck_sm" ] = loadfx( "maps/mp_maps/fx_mp_pntbll_steam_thck_sm" ); - level._effect[ "fx_mp_pntbll_steam_thck_xsm" ] = loadfx( "maps/mp_maps/fx_mp_pntbll_steam_thck_xsm" ); - level._effect[ "fx_mp_pntbll_steam_thck_gray" ] = loadfx( "maps/mp_maps/fx_mp_pntbll_steam_thck_gray" ); - level._effect[ "fx_mp_steam_vent_ceiling" ] = loadfx( "maps/mp_maps/fx_mp_steam_vent_ceiling" ); - level._effect[ "fx_mp_steam_vent_ceiling_lg" ] = loadfx( "maps/mp_maps/fx_mp_steam_vent_ceiling_lg" ); - level._effect[ "fx_mp_vent_steam_lite_wind" ] = loadfx( "maps/mp_maps/fx_mp_vent_steam_lite_wind" ); - level._effect[ "fx_mp_pntbll_smk_truck_md" ] = loadfx( "maps/mp_maps/fx_mp_pntbll_smk_truck_md" ); - level._effect[ "fx_mp_pntbll_smk_truck_sm" ] = loadfx( "maps/mp_maps/fx_mp_pntbll_smk_truck_sm" ); - level._effect[ "fx_leaves_falling_pine_nowind" ] = loadfx( "foliage/fx_leaves_falling_pine_nowind" ); - level._effect[ "fx_mp_light_police_car" ] = loadfx( "maps/mp_maps/fx_mp_light_police_car" ); - level._effect[ "fx_light_stadium_flood" ] = loadfx( "light/fx_light_stadium_flood" ); - level._effect[ "fx_light_stadium_flood_flckr" ] = loadfx( "light/fx_light_stadium_flood_flckr" ); - level._effect[ "fx_light_recessed_cool_sm_soft" ] = loadfx( "light/fx_light_recessed_cool_sm_soft" ); - level._effect[ "fx_light_track_omni" ] = loadfx( "light/fx_light_track_omni" ); - level._effect[ "fx_mp_pntbll_paint_drips" ] = loadfx( "maps/mp_maps/fx_mp_pntbll_paint_drips" ); - level._effect[ "fx_lf_mp_paintball_sun1" ] = loadfx( "lens_flares/fx_lf_mp_paintball_sun1" ); - level._effect[ "fx_mp_light_police_car" ] = loadfx( "maps/mp_maps/fx_mp_light_police_car" ); -} - -precache_fxanim_props() -{ - level.scr_anim = []; - level.scr_anim[ "fxanim_props" ] = []; -} - -precache_fxanim_props_dlc3() -{ - level.scr_anim[ "fxanim_props_dlc3" ][ "wires_01" ] = %fxanim_mp_paint_wires_01_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "wires_02" ] = %fxanim_mp_paint_wires_02_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "shop_banners" ] = %fxanim_paint_shop_banner_01_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "shop_banners_wall" ] = %fxanim_paint_shop_banner_02_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "wires_03" ] = %fxanim_mp_paint_wires_03_anim; -} diff --git a/Multiplayer Maps/mp_pod/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_pod/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_pod/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_pod/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_pod/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_pod/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_pod/maps/mp/createfx/mp_pod_fx.gsc b/Multiplayer Maps/mp_pod/maps/mp/createfx/mp_pod_fx.gsc deleted file mode 100644 index 07996de..0000000 --- a/Multiplayer Maps/mp_pod/maps/mp/createfx/mp_pod_fx.gsc +++ /dev/null @@ -1,1430 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fireflies_mp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1226,76, -971,781, 242 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fireflies_mp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1419,88, -501,289, 269,512 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fireflies_mp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 451,737, 117,997, 243,766 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fireflies_mp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -493,889, 1388,92, 485,136 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fireflies_mp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1180,41, 1275,41, 480,65 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -71,0005, -3215,34, 384 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 82 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1135,75, -989,957, 226 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 311,101, 375,438, 266,486 ); - ent.v[ "angles" ] = ( 348,017, 110,067, -0,637349 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1218,49, 1514,58, 492 ); - ent.v[ "angles" ] = ( 0,749496, 3,01092, 1,85562 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1108,03, 543,943, 404,591 ); - ent.v[ "angles" ] = ( 1, 138, 0 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -555,427, 522,075, 396,375 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 157 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 193,061, -565,74, 312,484 ); - ent.v[ "angles" ] = ( 359, 122, 0 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -23,7125, -2639,98, 383,263 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 82 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -714,798, -2057,47, 385,485 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 53 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1489,15, 1038,92, 477,336 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 119 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1767,78, 1486,54, 476 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 104 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -794,909, 1567,21, 432,785 ); - ent.v[ "angles" ] = ( 1,20835, 329,016, -0,829924 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -530,794, 1031,93, 417,091 ); - ent.v[ "angles" ] = ( 2,18886, 338,017, -1,54593 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 390,071, -2196,56, 378,14 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 72 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -424,345, -174,793, 340,248 ); - ent.v[ "angles" ] = ( 1, 91, 0 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1302,3, -888,747, 242 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 221 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 599,595, -147,909, 255,92 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 4 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 381,011, 254,308, 247,044 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 52 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 384,265, 835,494, 312,264 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 274 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -505,729, 1664,08, 487,204 ); - ent.v[ "angles" ] = ( 359, 231, 0 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1311,2, 1333,55, 484 ); - ent.v[ "angles" ] = ( 0,707204, 5,99248, -0,707242 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -226,51, 752,548, 403,484 ); - ent.v[ "angles" ] = ( 357,191, 129,946, 0,982957 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 778,955, -272,959, 438,331 ); - ent.v[ "angles" ] = ( 0, 66, 1 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 180,728, -1144,3, 300,436 ); - ent.v[ "angles" ] = ( 0,918725, 64,1467, 2,66656 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1793,64, -167,128, 360,125 ); - ent.v[ "angles" ] = ( 359,251, 46,9885, 1,85474 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -929,658, 409,406, 446,882 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -932,932, -1389,66, 452,259 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -943,596, 1370,28, 529 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1330,71, -333,409, 246,283 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 94 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1441,99, -1326,19, 295,396 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 116 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 835,927, -1432,59, 300,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 43 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 326,513, -1871,4, 375,301 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 43 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -255,537, -2265,77, 390,305 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 117 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1421,8, -466,548, 452,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 43 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -772,525, 940,723, 411,179 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2692,49, -759,168, 375 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 116 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1757,72, 347,748, 315,993 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 126 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3152,64, -259,096, 492,929 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 116 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 378,526, 2161,94, 592,01 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 315 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2432,44, 353,349, 245,766 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 131 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -646,382, -3409,68, 328,329 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 100 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -115,13, -4535,93, 360,871 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 61 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 869,729, -3419,34, 281,051 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 71 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1129,01, -2307,45, 473,803 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 65 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1893,54, -1638,46, 246,812 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 75 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2153,02, -740,272, 197,823 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 75 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -812,965, -2962, 92,8236 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 120 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1754,96, -2700,14, 132,284 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 101 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2597,97, 1050,47, 111,061 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 105 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1212,61, 2337,14, 463,807 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 341 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 708,806, 1287,9, 465,625 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 345 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1368,98, 2185,74, 873,658 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 156 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1989,69, -568,475, 262 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -143,425, 3051,55, 518,887 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 116 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -930,569, 3169, 470,929 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 350 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2519,26, 1524,79, 226,836 ); - ent.v[ "angles" ] = ( 0, 96, 1 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2077,68, 2536,77, 493,205 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 338 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1213,61, -1153,03, 412,263 ); - ent.v[ "angles" ] = ( 1,53228, 6,01764, 1,28563 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2162,71, 511,684, 355,628 ); - ent.v[ "angles" ] = ( 0,719429, 54, 0,694802 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2031,5, 1221,73, 496,1 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 54 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -532,862, -531,82, 243,639 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 192 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -943,247, -554,146, 207,382 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 19 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -722,988, -288,497, 205,704 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 340 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2095,95, 880,209, 420,376 ); - ent.v[ "angles" ] = ( 355,761, 39,8424, 4,25103 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2089,01, 1,37489, 347,185 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 52 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -218,633, 512,527, 407,404 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1144,42, -142,489, 293,644 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 324,655, 67,6518, 353,75 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 431,622, 164,633, 284,519 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1147,22, 335,384, 429,336 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 271 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -603,073, 261,882, 479,747 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -861,765, 145,118, 446,332 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 304,88, -1794,7, 409,378 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 360 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1006,48, -186,034, 448,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1304,34, 126,079, 293,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 803,876, -144,25, 249,721 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 169 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 963,466, -731,866, 240 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 100 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2715,75, 1428,94, 673,057 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1698,98, -1092,66, 48,3447 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 85 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2319,19, 620,92, 30 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 75 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -619,699, -286,862, 113,705 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 304 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -207,221, 108,913, 405,778 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3852,96, 547,224, 674,231 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1317,58, -3090,34, 447,926 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 83 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1522,8, -4506,55, 449,851 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 83 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 218,093, -4134,46, 197,488 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 83 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -224,277, -4116,03, 232,138 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 104 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 694,296, -4196,7, 214,493 ); - ent.v[ "angles" ] = ( 14,979, 90,8944, -0,80343 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -618,011, -499,246, 61 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -175,28, -246,959, 344,487 ); - ent.v[ "angles" ] = ( 351,198, 124,855, 1,88608 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -115,955, 339,648, 407,05 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 116 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 64,7574, 1237,37, 458,272 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 122 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1119,32, 2555,25, 891,613 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 315 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1644,84, -1443,57, 330 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 73 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 385,201, -1084,07, 327,366 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -419,237, -1591,78, 401,419 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -606,739, -1663,17, 716,738 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 18 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -558,364, 512,538, 738,683 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 18 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1302,73, 2046,75, 786,158 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 357 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 693,483, 1207,65, 737,382 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 336 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2112,69, -413,329, 616,817 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 106 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -108,984, -850,984, 392,053 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -233,417, -919,94, 383,126 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -249,144, -786,257, 388,965 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fireflies_mp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -195,85, -848,004, 351,799 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -57,2, -713,36, 448,576 ); - ent.v[ "angles" ] = ( 90, 0, -135,3 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3,7085, -847,484, 446,878 ); - ent.v[ "angles" ] = ( 90, 180, 89,7001 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -62,5544, -982,449, 447,222 ); - ent.v[ "angles" ] = ( 90, 333,435, -71,8648 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -226,815, -1640,51, 500,793 ); - ent.v[ "angles" ] = ( 90, 0, 179,7 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -362,136, -1697,25, 500,333 ); - ent.v[ "angles" ] = ( 90, 0, 135 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -420,498, -1828,47, 500,365 ); - ent.v[ "angles" ] = ( 90, 180, -90 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -363,555, -1965,86, 500,461 ); - ent.v[ "angles" ] = ( 90, 180, -135 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -231,758, -2023,49, 500,15 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -93,9819, -1968,79, 500,641 ); - ent.v[ "angles" ] = ( 90, 0, -45,4 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -537,503, 191,582, 519,53 ); - ent.v[ "angles" ] = ( 90, 180, 89,9 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -595,317, 327,708, 520,42 ); - ent.v[ "angles" ] = ( 90, 0, -135,1 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -865,553, 324,85, 519,772 ); - ent.v[ "angles" ] = ( 90, 0, 134,9 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1236,63, -1439,24, 518,982 ); - ent.v[ "angles" ] = ( 90, 0, 134,9 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -967,183, -1436,57, 519,53 ); - ent.v[ "angles" ] = ( 90, 0, -135,9 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -910,496, -1573,12, 520,158 ); - ent.v[ "angles" ] = ( 90, 7,12502, -82,875 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 501,392, -2429,01, 510,882 ); - ent.v[ "angles" ] = ( 90, 0, 179,4 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 366,539, -2484,48, 512,101 ); - ent.v[ "angles" ] = ( 90, 180, -45,8 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 310,498, -2621,31, 512,686 ); - ent.v[ "angles" ] = ( 90, 0, 89,7 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 367,253, -2755,45, 512,263 ); - ent.v[ "angles" ] = ( 90, 0, 44,6998 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_pod_sun" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -94218, 41320, 97879,4 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4,5578, -847,255, 393,357 ); - ent.v[ "angles" ] = ( 90, 180, 89,7001 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -56,7957, -713,514, 393,484 ); - ent.v[ "angles" ] = ( 90, 0, -135,3 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -324,875, -718,732, 447,045 ); - ent.v[ "angles" ] = ( 90, 0, -45,2999 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -62,6559, -982,396, 395,403 ); - ent.v[ "angles" ] = ( 90, 333,435, -71,8648 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -379,354, -844,443, 448,08 ); - ent.v[ "angles" ] = ( 90, 180, 89,7001 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -67,403, -971,812, 449,662 ); - ent.v[ "angles" ] = ( 90, 0, 134,7 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -67,025, -717,539, 450,566 ); - ent.v[ "angles" ] = ( 90, 0, 45,1999 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -116,844, -732,226, 471,999 ); - ent.v[ "angles" ] = ( 0, 136, -2 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -110,167, -964,37, 476,001 ); - ent.v[ "angles" ] = ( 0, 136, -2 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -276,255, -892,915, 472,875 ); - ent.v[ "angles" ] = ( 0, 136, -2 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -961,764, -1441,76, 466,855 ); - ent.v[ "angles" ] = ( 90, 0, -135,9 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -909,488, -1572,81, 465,803 ); - ent.v[ "angles" ] = ( 90, 7,12502, -82,875 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1231,82, -1432,99, 457,8 ); - ent.v[ "angles" ] = ( 90, 0, 134,9 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -862,402, 329,431, 467,423 ); - ent.v[ "angles" ] = ( 90, 0, 134,9 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -593,448, 327,146, 467,77 ); - ent.v[ "angles" ] = ( 90, 0, -135,1 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -537,594, 190,261, 466,265 ); - ent.v[ "angles" ] = ( 90, 180, 89,9 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -13,08, -841,886, 447,644 ); - ent.v[ "angles" ] = ( 90, 0, 88,7 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -671,735, -1452,93, 407,471 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 484,845, -2221,58, 387,412 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 493,695, -1709,16, 468,865 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 742,839, -1752,04, 386,533 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 684,763, -1372,99, 437,405 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 855,735, -1137,79, 332,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 880,741, -785,637, 250 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1125,49, -148,525, 271,853 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 796,326, -117,532, 247,723 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 585,81, 629,491, 296,022 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 52 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_flies_dragonflies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 678,622, 286,452, 260,159 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 52 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 898,204, -35,593, 319,237 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 940,69, 151,682, 285,772 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1299,22, -106,578, 296,384 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 940,25, -1081,21, 294 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 478,145, -2215,22, 387,254 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -637,105, -1670,92, 460,736 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -324,751, -1242,28, 389,048 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -889,086, -752,901, 458,656 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1642,78, 284,604, 448,521 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1052,42, 739,097, 471,89 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -835,749, 1020,36, 469,025 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -359,855, 924,162, 428,443 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -389,653, 1273,33, 454,797 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -745,921, 1582,95, 472,558 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -85,3774, 815,576, 399,827 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1117,97, 1777,7, 530,223 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -781,707, 135,138, 551,875 ); - ent.v[ "angles" ] = ( 1,43887, 270,018, 1,38938 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -616,882, 203,704, 551,875 ); - ent.v[ "angles" ] = ( 1,43887, 270,018, 1,38938 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1177,08, -1573,61, 550,875 ); - ent.v[ "angles" ] = ( 1,43887, 270,018, 1,38938 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1078,67, -1442,69, 550,875 ); - ent.v[ "angles" ] = ( 1,43887, 270,018, 1,38938 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 185,115, -1386,15, 385,562 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 585,667, -499,697, 459,089 ); - ent.v[ "angles" ] = ( 0, 136, -2 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 528,278, -517,8, 466,055 ); - ent.v[ "angles" ] = ( 0, 136, -2 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -121,366, 510,427, 579,13 ); - ent.v[ "angles" ] = ( 2, 225, 0 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1437,35, -959,386, 318,471 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1376,62, -1212,96, 330,88 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -229,138, -1640,49, 442,943 ); - ent.v[ "angles" ] = ( 90, 0, 179,7 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -364,477, -1698,27, 446,177 ); - ent.v[ "angles" ] = ( 90, 0, 135 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -419,608, -1830,77, 447,047 ); - ent.v[ "angles" ] = ( 90, 180, -90 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -367,52, -1963,01, 445,653 ); - ent.v[ "angles" ] = ( 90, 180, -135 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -231,904, -2023,61, 444,986 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -94,8223, -1969,51, 446,785 ); - ent.v[ "angles" ] = ( 90, 0, -45,4 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -36,807, -1835,21, 497,328 ); - ent.v[ "angles" ] = ( 90, 0, -90,3999 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -36,4869, -1832,02, 444,518 ); - ent.v[ "angles" ] = ( 90, 0, -90,3999 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -600,111, 320,301, 522,771 ); - ent.v[ "angles" ] = ( 90, 0, -135,1 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -601,165, 320,94, 519,325 ); - ent.v[ "angles" ] = ( 90, 0, 45 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -545,638, 194,63, 521,671 ); - ent.v[ "angles" ] = ( 90, 180, -90,1 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -858,296, 318,701, 522,551 ); - ent.v[ "angles" ] = ( 90, 0, -45,5999 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_glass_drop_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -855,148, 62,0831, 520,976 ); - ent.v[ "angles" ] = ( 90, 4,76364, -130,236 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -789,547, 316,146, 441,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 290 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -628,523, 301,407, 426,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 245 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 589,817, -573,24, 328,18 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 78 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 501,177, -363,615, 329,482 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 333 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1010,69, -1673,16, 418,264 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 99 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 80,248, 754,344, 361,407 ); - ent.v[ "angles" ] = ( 6, 344, 0 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 358,623, 710,229, 320,845 ); - ent.v[ "angles" ] = ( 342,014, 159,886, 0,439226 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 26,8153, -2822,9, 423,996 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -689,693, -1921,21, 388,645 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -973,589, -1500,11, 443,491 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 371,779, -1889,65, 679,358 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -109,818, -1926,96, 692 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -375,706, -1912,02, 692 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -231,786, -1628,93, 692 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 546,031, -1615,52, 678,754 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 214,801, -1482,93, 676,349 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -461,181, -1221,92, 539,465 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -389,868, -1230,64, 536,733 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1193,6, -834,125, 562,809 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1091,43, -717,875, 571,465 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1430,13, -334,457, 567,884 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1430,13, -413,411, 576,943 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1628,1, -172,153, 576,795 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1665,15, -61,875, 578,326 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1686,65, -721,875, 641,751 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -777,308, -2406,36, 535,786 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 415,074, -2419,36, 729,301 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 290,929, -2530,34, 730,934 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 296,043, -2714,21, 730,879 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 427,008, -2822,36, 728,907 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 864,082, -408,114, 579,424 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 577,316, -31,0007, 527,389 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 532,892, -87,9131, 541,986 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -255,081, 983,53, 799,184 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -422,347, 984,819, 798,88 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1182,13, 1284,51, 765,045 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -914,987, 1414,33, 795,677 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -902,981, 976,77, 790,569 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1012,52, 1417,48, 756,971 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -430,28, 1407,94, 777,131 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -147,765, 508,216, 629 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -193,184, 348,634, 629 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1275,67, 400,846, 578,17 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -538,601, -2469,88, 671,914 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 810,209, -591,445, 581,873 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 218,78, -141,81, 577,032 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 153,95, -76,1435, 589,773 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 310,598, -321,507, 580,554 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -602,675, -899,521, 499,723 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -758,965, -847,294, 498,835 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -844,277, -694,496, 423,038 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -971,929, -570,116, 422,651 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1157,35, -371,829, 415,307 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1160,61, -526,336, 414,504 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1186,71, 75,9713, 704,016 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1181,12, 68,9562, 576,126 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -821,779, -2569,21, 498,206 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -703,335, -2540,54, 519,213 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -648,911, -1274,56, 503,025 ); - ent.v[ "angles" ] = ( 0, 136, -2 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -821,205, -1276,11, 501,343 ); - ent.v[ "angles" ] = ( 0, 136, -2 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1045,18, -2842,39, 537,559 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 950,78, -2749,47, 536,74 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 269,096, -1883,85, 811,077 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 426,751, -1862,72, 811,048 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -225,008, -2685,03, 577,589 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -329,146, -2465,74, 570,06 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -219,779, -2576,79, 568,973 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -941,45, -1842,78, 571,449 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1127, -658,899, 380,365 ); - ent.v[ "angles" ] = ( 0, 66, 1 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1248,41, -366,389, 378,606 ); - ent.v[ "angles" ] = ( 0, 66, 1 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1004,72, 226,751, 396,945 ); - ent.v[ "angles" ] = ( 0, 66, 1 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 796,164, 495,222, 376,434 ); - ent.v[ "angles" ] = ( 0, 66, 1 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 211,266, 652,103, 472,895 ); - ent.v[ "angles" ] = ( 0, 66, 1 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -684,915, 405,47, 535,046 ); - ent.v[ "angles" ] = ( 0, 66, 1 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -56,7255, -683,297, 461,051 ); - ent.v[ "angles" ] = ( 0, 66, 1 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -67,9285, -1010,08, 462,892 ); - ent.v[ "angles" ] = ( 0, 66, 1 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -149,189, -1056,54, 461,062 ); - ent.v[ "angles" ] = ( 0, 66, 1 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -886,288, -1581,54, 534,044 ); - ent.v[ "angles" ] = ( 0, 66, 1 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -953,331, -1421,8, 534,049 ); - ent.v[ "angles" ] = ( 0, 66, 1 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -988,449, -1755,56, 536,133 ); - ent.v[ "angles" ] = ( 0, 66, 1 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -377,369, -1680,41, 515,052 ); - ent.v[ "angles" ] = ( 0, 66, 1 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -375,154, -1986,11, 515,052 ); - ent.v[ "angles" ] = ( 0, 66, 1 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -223,123, -2045,63, 505,033 ); - ent.v[ "angles" ] = ( 0, 66, 1 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 403,094, 53,7913, 240,816 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 169 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -152,339, -1220,45, 335,777 ); - ent.v[ "angles" ] = ( 7, 31, 0 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1138,71, -80,3042, 266,042 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 172 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_fog_drift_slow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1722,82, 229,222, 418,093 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 43 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_pod_water_drips" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 647,477, -2460,39, 728,65 ); - ent.v[ "angles" ] = ( 270, 0, 40 ); - ent.v[ "delay" ] = -93; -} diff --git a/Multiplayer Maps/mp_pod/maps/mp/mp_pod.gsc b/Multiplayer Maps/mp_pod/maps/mp/mp_pod.gsc deleted file mode 100644 index e04b2c6..0000000 --- a/Multiplayer Maps/mp_pod/maps/mp/mp_pod.gsc +++ /dev/null @@ -1,72 +0,0 @@ -#include maps/mp/gametypes/_spawning; -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_pod_fx::main(); - precachemodel( "p_rus_door_white_frame_double" ); - precachemodel( "p6_pak_old_plywood" ); - precachemodel( "collision_clip_wall_32x32x10" ); - precachemodel( "collision_physics_wall_32x32x10" ); - precachemodel( "collision_physics_wall_128x128x10" ); - precachemodel( "collision_physics_wall_256x256x10" ); - precachemodel( "collision_physics_256x256x10" ); - precachemodel( "collision_missile_128x128x10" ); - precachemodel( "collision_clip_wall_64x64x10" ); - precachemodel( "collision_physics_256x256x256" ); - maps/mp/_load::main(); - maps/mp/mp_pod_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_pod" ); - prop1 = spawn( "script_model", ( 517,264, -627,226, 323 ) ); - prop1.angles = vectorScale( ( 0, 1, 0 ), 116,6 ); - prop1 setmodel( "p_rus_door_white_frame_double" ); - prop2 = spawn( "script_model", ( 62,1517, -1647,78, 481,602 ) ); - prop2.angles = vectorScale( ( 0, 1, 0 ), 35,2 ); - prop2 setmodel( "p6_pak_old_plywood" ); - prop3 = spawn( "script_model", ( 25,9997, -1673,49, 479,903 ) ); - prop3.angles = vectorScale( ( 0, 1, 0 ), 35,2 ); - prop3 setmodel( "p6_pak_old_plywood" ); - spawncollision( "collision_clip_wall_32x32x10", "collider", ( -1725, 2300, 514 ), ( 0, 1, 0 ) ); - spawncollision( "collision_clip_wall_32x32x10", "collider", ( -473, -2482, 412 ), vectorScale( ( 0, 1, 0 ), 14 ) ); - spawncollision( "collision_physics_wall_32x32x10", "collider", ( -473, -2482, 412 ), vectorScale( ( 0, 1, 0 ), 14 ) ); - spawncollision( "collision_physics_wall_128x128x10", "collider", ( -87, -1470,5, 751,5 ), vectorScale( ( 0, 1, 0 ), 34,2 ) ); - spawncollision( "collision_physics_256x256x10", "collider", ( 1287,5, -2468, 315 ), vectorScale( ( 0, 1, 0 ), 18,1 ) ); - spawncollision( "collision_physics_256x256x10", "collider", ( 1047,5, -2468, 315 ), vectorScale( ( 0, 1, 0 ), 18,1 ) ); - spawncollision( "collision_physics_256x256x10", "collider", ( 1047,5, -2627,5, 165,5 ), vectorScale( ( 0, 1, 0 ), 64,1 ) ); - spawncollision( "collision_missile_128x128x10", "collider", ( -911,5, -653, 496 ), ( 273, 45,0999, 90 ) ); - spawncollision( "collision_clip_wall_64x64x10", "collider", ( 1356, 50, 358 ), ( 5,64745, 114,9, 6 ) ); - spawncollision( "collision_clip_wall_64x64x10", "collider", ( 1364, 32, 349 ), ( 1,3883, 292,6, -4 ) ); - spawncollision( "collision_clip_wall_64x64x10", "collider", ( 1423, -127, 349 ), ( 1,3883, 285,8, -4 ) ); - spawncollision( "collision_physics_256x256x256", "collider", ( 1218, -2232, 244 ), vectorScale( ( 0, 1, 0 ), 30 ) ); - setdvar( "compassmaxrange", "2100" ); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - maps/mp/gametypes/_spawning::level_use_unified_spawning( 1 ); - level thread killstreak_init(); -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2400", reset_dvars ); - ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1000", reset_dvars ); -} - -killstreak_init() -{ - while ( !isDefined( level.missile_swarm_flyheight ) ) - { - wait 1; - } - level.missile_swarm_flyheight = 6000; -} diff --git a/Multiplayer Maps/mp_pod/maps/mp/mp_pod_amb.gsc b/Multiplayer Maps/mp_pod/maps/mp/mp_pod_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_pod/maps/mp/mp_pod_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_pod/maps/mp/mp_pod_fx.gsc b/Multiplayer Maps/mp_pod/maps/mp/mp_pod_fx.gsc deleted file mode 100644 index e62ae09..0000000 --- a/Multiplayer Maps/mp_pod/maps/mp/mp_pod_fx.gsc +++ /dev/null @@ -1,76 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); -#using_animtree( "fxanim_props_dlc4" ); - -main() -{ - precache_fxanim_props(); - precache_fxanim_props_dlc4(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_pod_fx::main(); -} - -precache_scripted_fx() -{ -} - -precache_createfx_fx() -{ - level._effect[ "fx_mp_pod_glass_drop_trail" ] = loadfx( "maps/mp_maps/fx_mp_pod_glass_drop_trail" ); - level._effect[ "fx_mp_pod_glass_drop_runner" ] = loadfx( "maps/mp_maps/fx_mp_pod_glass_drop_runner" ); - level._effect[ "fx_mp_pod_water_spill" ] = loadfx( "maps/mp_maps/fx_mp_pod_water_spill" ); - level._effect[ "fx_mp_pod_water_spill_02" ] = loadfx( "maps/mp_maps/fx_mp_pod_water_spill_02" ); - level._effect[ "fx_mp_pod_water_spill_splash" ] = loadfx( "maps/mp_maps/fx_mp_pod_water_spill_splash" ); - level._effect[ "fx_mp_water_drip_light_shrt" ] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_shrt" ); - level._effect[ "fx_mp_water_drip_light_long" ] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); - level._effect[ "fx_mp_pod_water_drips" ] = loadfx( "maps/mp_maps/fx_mp_pod_water_drips" ); - level._effect[ "fx_fog_drift_slow" ] = loadfx( "fog/fx_fog_drift_slow" ); - level._effect[ "fx_fog_drift_slow_md" ] = loadfx( "fog/fx_fog_drift_slow_md" ); - level._effect[ "fx_fog_drift_slow_sm" ] = loadfx( "fog/fx_fog_drift_slow_sm" ); - level._effect[ "fx_fog_drift_slow_vista" ] = loadfx( "fog/fx_fog_drift_slow_vista" ); - level._effect[ "fx_insects_swarm_md_light" ] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); - level._effect[ "fx_insects_swarm_lg_light" ] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); - level._effect[ "fx_insects_fireflies_mp" ] = loadfx( "bio/insects/fx_insects_fireflies_mp" ); - level._effect[ "fx_insects_flies_dragonflies" ] = loadfx( "bio/insects/fx_insects_flies_dragonflies" ); - level._effect[ "fx_insects_roaches" ] = loadfx( "bio/insects/fx_insects_roaches" ); - level._effect[ "fx_insects_roaches_fast" ] = loadfx( "bio/insects/fx_insects_roaches_fast" ); - level._effect[ "fx_insects_roaches_short" ] = loadfx( "bio/insects/fx_insects_roaches_short" ); - level._effect[ "fx_mp_light_dust_motes_md" ] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); - level._effect[ "fx_lf_mp_pod_sun" ] = loadfx( "lens_flares/fx_lf_mp_pod_sun" ); -} - -precache_fxanim_props() -{ - level.scr_anim = []; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_01" ] = %fxanim_gp_seagull_circle_01_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_02" ] = %fxanim_gp_seagull_circle_02_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_03" ] = %fxanim_gp_seagull_circle_03_anim; - level.scr_anim[ "fxanim_props" ][ "sheet_med" ] = %fxanim_gp_cloth_sheet_med_anim; -} - -precache_fxanim_props_dlc4() -{ - level.scr_anim[ "fxanim_props_dlc4" ][ "wire_01" ] = %fxanim_mp_pod_wire_01_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "wire_02" ] = %fxanim_mp_pod_wire_02_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "wire_03" ] = %fxanim_mp_pod_wire_03_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "wire_04" ] = %fxanim_mp_pod_wire_04_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "wire_05" ] = %fxanim_mp_pod_wire_05_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "wire_06" ] = %fxanim_mp_pod_wire_06_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "wire_07" ] = %fxanim_mp_pod_wire_07_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "wire_08" ] = %fxanim_mp_pod_wire_08_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "wire_09" ] = %fxanim_mp_pod_wire_09_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "shirt03" ] = %fxanim_gp_shirts03_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "vine_clump_01" ] = %fxanim_mp_pod_vine_clump_01_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "vine_clump_02" ] = %fxanim_mp_pod_vine_clump_02_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "vine_clump_long" ] = %fxanim_mp_pod_vine_clump_long_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "vine_med_leafy" ] = %fxanim_mp_pod_vine_med_leafy_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "vine_med_bare" ] = %fxanim_mp_pod_vine_med_bare_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "vine_long_leafy" ] = %fxanim_mp_pod_vine_long_leafy_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "vine_long_bare" ] = %fxanim_mp_pod_vine_long_bare_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "bushy_clump_01" ] = %fxanim_mp_pod_bushy_clump_01_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "bushy_clump_02" ] = %fxanim_mp_pod_bushy_clump_02_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "vine_loops_pod" ] = %fxanim_mp_pod_vine_loops_pod_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "pool_wires" ] = %fxanim_mp_pod_pool_wires_anim; -} diff --git a/Multiplayer Maps/mp_raid/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_raid/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_raid/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_raid/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_raid/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_raid/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_raid/maps/mp/createart/mp_raid_art.gsc b/Multiplayer Maps/mp_raid/maps/mp/createart/mp_raid_art.gsc deleted file mode 100644 index 08536db..0000000 --- a/Multiplayer Maps/mp_raid/maps/mp/createart/mp_raid_art.gsc +++ /dev/null @@ -1,25 +0,0 @@ - -main() -{ - level.tweakfile = 1; - setdvar( "scr_fog_exp_halfplane", "3759.28" ); - setdvar( "scr_fog_exp_halfheight", "243.735" ); - setdvar( "scr_fog_nearplane", "601.593" ); - setdvar( "scr_fog_red", "0.806694" ); - setdvar( "scr_fog_green", "0.962521" ); - setdvar( "scr_fog_blue", "0.9624" ); - setdvar( "scr_fog_baseheight", "-475.268" ); - setdvar( "visionstore_glowTweakEnable", "0" ); - setdvar( "visionstore_glowTweakRadius0", "5" ); - setdvar( "visionstore_glowTweakRadius1", "" ); - setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); - setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); - setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); - setdvar( "visionstore_glowTweakBloomIntensity1", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); - visionsetnaked( "mp_raid", 1 ); - setdvar( "r_lightGridEnableTweaks", 1 ); - setdvar( "r_lightGridIntensity", 1 ); - setdvar( "r_lightGridContrast", 0 ); -} diff --git a/Multiplayer Maps/mp_raid/maps/mp/createfx/mp_raid_fx.gsc b/Multiplayer Maps/mp_raid/maps/mp/createfx/mp_raid_fx.gsc deleted file mode 100644 index f70347a..0000000 --- a/Multiplayer Maps/mp_raid/maps/mp/createfx/mp_raid_fx.gsc +++ /dev/null @@ -1,1305 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_vista_smoke01" ); - ent.v[ "origin" ] = ( -335,014, 38495,6, 415,011 ); - ent.v[ "angles" ] = ( 273, 270, 74,9951 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_vista_smoke01" ); - ent.v[ "origin" ] = ( 385,599, 38027,9, 220,015 ); - ent.v[ "angles" ] = ( 284,073, 333,327, 12 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_vista_smoke01" ); - ent.v[ "origin" ] = ( 5380,19, 36603,4, 811,309 ); - ent.v[ "angles" ] = ( 274,468, 51,6975, -66,5686 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_vista_smoke01" ); - ent.v[ "origin" ] = ( 4341,51, 36784,6, -529,778 ); - ent.v[ "angles" ] = ( 274,759, 307,533, 37,5384 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_vista_fire01" ); - ent.v[ "origin" ] = ( 116,356, 38955,9, -78,9206 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_vista_fire01" ); - ent.v[ "origin" ] = ( -458,839, 38669,5, 446,002 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_vista_fire01" ); - ent.v[ "origin" ] = ( 4262,06, 37479,3, -514,372 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_vista_fire01" ); - ent.v[ "origin" ] = ( 5389,04, 37565,8, 681,796 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_vista_smoke01" ); - ent.v[ "origin" ] = ( -2033,43, 16362,4, -2305,97 ); - ent.v[ "angles" ] = ( 282,124, 331,347, 13,9276 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_vista_fire01" ); - ent.v[ "origin" ] = ( -2055,39, 16765,4, -2494,9 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_vista_fire01" ); - ent.v[ "origin" ] = ( 9126,21, 22911,5, -2575,16 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_vista_smoke01" ); - ent.v[ "origin" ] = ( 9041,08, 22750,7, -2293,29 ); - ent.v[ "angles" ] = ( 275,277, 165,602, -179,473 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_vista_smoke01" ); - ent.v[ "origin" ] = ( -702,686, 28318,9, -2988,36 ); - ent.v[ "angles" ] = ( 273,724, 346,869, -0,744865 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1570,2, 3268,31, 182,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 264 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1458,32, 1837,96, 283,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 2840,29, 2492,75, 229,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 4457,68, 3364,81, 183,125 ); - ent.v[ "angles" ] = ( 48, 269, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 2864,19, 4444,88, 218,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 272 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1057,49, 3476,24, 222,721 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 4472,9, 3429,78, 81,125 ); - ent.v[ "angles" ] = ( 0, 272, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 2773,22, 4168,94, 68,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 24 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1839,08, 2982,57, 157,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 357 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 2618,07, 3025,36, 160,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 176 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 2249,3, 3280,52, 174,125 ); - ent.v[ "angles" ] = ( 359, 92, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 2042,28, 2969,79, 132,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 2417,61, 2988,05, 132,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 2555,94, 4345,28, 42 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 2035,52, 4437,81, 41 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 267,176, 2543,58, 215,324 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 662,252, 4602,45, 82,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 2256,39, 2170,38, 177,921 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 2227,1, 1483,85, 170,554 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 2548,51, 1674,13, 148,375 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 669,767, 2659,14, 158,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 933,04, 4241,18, 49,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 2470,71, 4065,26, 54,8949 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); - ent.v[ "origin" ] = ( 2675,31, 2365,71, 193,283 ); - ent.v[ "angles" ] = ( 341,825, 253,03, -113,609 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); - ent.v[ "origin" ] = ( 1636,66, 2338,39, 197,022 ); - ent.v[ "angles" ] = ( 337,645, 321,61, -96,6763 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); - ent.v[ "origin" ] = ( 87,1887, 2638,91, 166,092 ); - ent.v[ "angles" ] = ( 339,409, 331,009, 10,0087 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); - ent.v[ "origin" ] = ( -252,816, 3026,72, 116,125 ); - ent.v[ "angles" ] = ( 333,165, 20,0037, -109,479 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -83,165, 3138,7, 129,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 444,242, 3244,06, 133,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 783,778, 3266,36, 127,117 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 306,112, 2824,61, 187,802 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 410,621, 2412,94, 199,438 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 103,452, 2576,1, 214,352 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 1809,97, 2300,93, 152,472 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 2253,82, 2973,42, 121,358 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 4019,31, 2644,56, 81,3365 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 1485,76, 3789,41, 108,642 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); - ent.v[ "origin" ] = ( 1583,43, 3784,13, 92,0721 ); - ent.v[ "angles" ] = ( 340,973, 148,423, -142,194 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 2130,71, 1911,84, 116,229 ); - ent.v[ "angles" ] = ( 270, 359,684, 7,31557 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 2163,69, 1451,98, 94,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 2556,04, 2819,89, 59 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 1938,94, 3148,42, 59 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( 2741,53, 2792,23, 147,099 ); - ent.v[ "angles" ] = ( 21,708, 139,467, 177,77 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( 3476,35, 3047,28, 85,1716 ); - ent.v[ "angles" ] = ( 26,5851, 127,603, 179,095 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( 1396,98, 3614,54, 124,111 ); - ent.v[ "angles" ] = ( 16,5285, 61,7306, 179,079 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( 1384,32, 3618,21, 124,939 ); - ent.v[ "angles" ] = ( 17,2037, 115,706, -174,299 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( 2743,99, 2782,21, 146,665 ); - ent.v[ "angles" ] = ( 31,433, 230,02, -155,467 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( 3484,51, 3046,16, 82,2246 ); - ent.v[ "angles" ] = ( 28,8046, 20,5274, 149,312 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( 1477,99, 2228,48, 251,91 ); - ent.v[ "angles" ] = ( 31,4086, 308,503, 0,947976 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( 1480,2, 2236,83, 251,82 ); - ent.v[ "angles" ] = ( 32,1257, 50,5291, -9,14066 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( 1273,02, 1889,25, 187,277 ); - ent.v[ "angles" ] = ( 31,5844, 127,511, 179,05 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( 1282,52, 1888,05, 187,7 ); - ent.v[ "angles" ] = ( 23,2899, 32,8863, 145,556 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 242,026, 3553,63, 131,257 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 695,195, 3094,85, 190,647 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 1274,79, 2006,62, 219,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 2730,94, 2101,33, 178 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 3054,51, 2972,42, 163,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 3845,61, 3052,19, 66 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 521,991, 3847,83, 47,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 118,379, 3142,13, 154,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 654,403, 3159,72, 164 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 707,174, 2169,13, 234,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 947,036, 1543,42, 223,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 1884,75, 4039,39, 47 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 3828,62, 3977,96, 63 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); - ent.v[ "origin" ] = ( -3879,38, 4818,65, 1887,61 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); - ent.v[ "origin" ] = ( -3877,93, 4819,26, 1639,77 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); - ent.v[ "origin" ] = ( 8690,76, 5171,73, 2008,09 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); - ent.v[ "origin" ] = ( 8690,49, 5170,3, 1762,4 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_spot_light" ); - ent.v[ "origin" ] = ( 4673,12, 2616,92, 194,58 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 965,586, 2120,53, 273,757 ); - ent.v[ "angles" ] = ( 270, 359,684, 7,31557 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_raid" ); - ent.v[ "origin" ] = ( 4432,48, 3212,44, 29,125 ); - ent.v[ "angles" ] = ( 300, 112, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_raid" ); - ent.v[ "origin" ] = ( 1568,72, 3097,72, 104,125 ); - ent.v[ "angles" ] = ( 301, 112, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 472,677, 3543,45, 210,105 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 2841,97, 3220,63, 214,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 281 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_raid" ); - ent.v[ "origin" ] = ( 1544,25, 2895,5, 97,125 ); - ent.v[ "angles" ] = ( 300, 112, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); - ent.v[ "origin" ] = ( 2146,67, 4179,49, 23 ); - ent.v[ "angles" ] = ( 270, 354,56, -71,5595 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); - ent.v[ "origin" ] = ( 2157,44, 4232,38, 23 ); - ent.v[ "angles" ] = ( 270, 357,138, -121,138 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); - ent.v[ "origin" ] = ( 2144,8, 4215,62, 23 ); - ent.v[ "angles" ] = ( 270, 4,39871, -112,399 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); - ent.v[ "origin" ] = ( 2174,13, 4143,68, 23 ); - ent.v[ "angles" ] = ( 270, 0, -39 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); - ent.v[ "origin" ] = ( 2157,75, 4159,17, 23 ); - ent.v[ "angles" ] = ( 270, 357,663, -49,6627 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); - ent.v[ "origin" ] = ( 2335,08, 4212,65, 23 ); - ent.v[ "angles" ] = ( 270, 357,797, 101,203 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); - ent.v[ "origin" ] = ( 2335,46, 4179,08, 23 ); - ent.v[ "angles" ] = ( 270, 6,00901, 63,991 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); - ent.v[ "origin" ] = ( 2324,58, 4158,48, 23 ); - ent.v[ "angles" ] = ( 270, 2,5448, 45,4551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); - ent.v[ "origin" ] = ( 2324,37, 4233,47, 23 ); - ent.v[ "angles" ] = ( 270, 1,78991, 122,21 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); - ent.v[ "origin" ] = ( 2308,8, 4247,75, 23 ); - ent.v[ "angles" ] = ( 270, 352,875, 143,125 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_hot_tub_lg" ); - ent.v[ "origin" ] = ( 2169,65, 4198,67, 23 ); - ent.v[ "angles" ] = ( 270, 0, -92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); - ent.v[ "origin" ] = ( 2174,86, 4249,38, 23 ); - ent.v[ "angles" ] = ( 270, 0, -133 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_hot_tub_sm" ); - ent.v[ "origin" ] = ( 2308,81, 4143,78, 23 ); - ent.v[ "angles" ] = ( 270, 0, 37 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_hot_tub_lg" ); - ent.v[ "origin" ] = ( 2312,64, 4195,25, 23 ); - ent.v[ "angles" ] = ( 270, 0, 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 1058,62, 2318,52, 198,125 ); - ent.v[ "angles" ] = ( 270, 359,684, 7,31557 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 862,2, 3581, 136,34 ); - ent.v[ "angles" ] = ( 270, 359,684, 7,31557 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 1006,62, 3760,8, 138,024 ); - ent.v[ "angles" ] = ( 270, 359,684, 7,31557 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_raid_sun1" ); - ent.v[ "origin" ] = ( -59885,7, 82819,7, 38855 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_spot_light" ); - ent.v[ "origin" ] = ( 4672,32, 2744,75, 194,496 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_spot_light" ); - ent.v[ "origin" ] = ( 4670,92, 2873,66, 194,709 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_spot_light" ); - ent.v[ "origin" ] = ( 4673,6, 3000,55, 193,443 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_spot_light" ); - ent.v[ "origin" ] = ( 4674,44, 3128,55, 194,45 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_spot_light" ); - ent.v[ "origin" ] = ( 4673,27, 3257,52, 194,669 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_spot_light" ); - ent.v[ "origin" ] = ( 4673,47, 3384,18, 193,374 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_spot_light" ); - ent.v[ "origin" ] = ( 4672,08, 3511,71, 193,483 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( 3573,59, 3281,82, 48,7316 ); - ent.v[ "angles" ] = ( 347,036, 10,4759, 152,014 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_fumes_vent_xsm_int" ); - ent.v[ "origin" ] = ( 3775,89, 3476,12, 47,4129 ); - ent.v[ "angles" ] = ( 348,404, 250,521, 5,65722 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4173,32, 3557,12, 207,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4173,06, 3087,33, 207,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4173,66, 2974,91, 207,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4173,85, 2863,77, 207,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4173,75, 2751,49, 207,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4174,05, 2638,94, 207,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4173,77, 2528,19, 207,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4350,43, 3086,69, 207,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4350,16, 2976,39, 207,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4349,73, 2863,83, 207,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4350,24, 2751,48, 207,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4350,21, 2639,29, 207,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4349,9, 2528,07, 207,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4528,31, 2527,97, 207,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4528,33, 2640,91, 207,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4527,73, 2752,88, 207,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4528,54, 2864,9, 207,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4527,59, 2976,2, 207,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4527,96, 3087,72, 207,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4528,22, 3575,97, 207,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 3455,01, 2566,52, 159,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 3311,11, 2566,21, 159,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 3311,71, 2368,27, 159,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 3311,94, 2170,06, 159,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 3456,08, 2171,55, 159,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 3456,76, 2369,99, 159,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 3388,08, 2406,08, 74 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 3777,36, 2338,37, 159,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 3904,21, 2337,48, 159,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4033,09, 2338,31, 159,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4023,42, 2515,77, 180,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 4023,98, 2475,35, 180,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_spot_light_picture" ); - ent.v[ "origin" ] = ( 2998,04, 2615,71, 219,091 ); - ent.v[ "angles" ] = ( 89, 359,994, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_spot_light_picture" ); - ent.v[ "origin" ] = ( 2995,96, 2667,16, 220,756 ); - ent.v[ "angles" ] = ( 89, 359,994, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_spot_light_picture" ); - ent.v[ "origin" ] = ( 2996,11, 2719,36, 219,681 ); - ent.v[ "angles" ] = ( 89, 359,994, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_spot_light_picture" ); - ent.v[ "origin" ] = ( 2996,12, 2771,35, 218,942 ); - ent.v[ "angles" ] = ( 89, 359,994, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_spot_light_picture" ); - ent.v[ "origin" ] = ( 2984,31, 2343,12, 234,796 ); - ent.v[ "angles" ] = ( 89, 359,994, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_spot_light_picture" ); - ent.v[ "origin" ] = ( 2931,17, 2342,05, 234,867 ); - ent.v[ "angles" ] = ( 89, 359,994, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_spot_light_picture" ); - ent.v[ "origin" ] = ( 2880,13, 2343,2, 233,887 ); - ent.v[ "angles" ] = ( 89, 359,994, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_spot_light_picture" ); - ent.v[ "origin" ] = ( 2758,9, 2393,12, 234,991 ); - ent.v[ "angles" ] = ( 89, 359,994, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_spot_light" ); - ent.v[ "origin" ] = ( 2905,52, 2707,55, 258,875 ); - ent.v[ "angles" ] = ( 90, 0, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist" ); - ent.v[ "origin" ] = ( 1635,52, 4393,23, 40,9837 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 1417,74, 3343,87, 244,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 1345,17, 3343,86, 244,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 1095,11, 3404,98, 244,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 1095,36, 3553,4, 244,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 1444,98, 3549,91, 244,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1485,68, 1819,49, 356,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1422,08, 1819,86, 356,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1422,32, 1757,04, 356,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1485,79, 1756,85, 356,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1486,93, 1693,35, 356,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1421,9, 1693,06, 356,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1422,03, 1631,29, 356,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1486,17, 1630,41, 356,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1422,61, 1544,35, 356,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1485,01, 1544,56, 356,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1486,94, 1480,97, 356,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1422,97, 1479,91, 356,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1343,03, 1544,72, 356,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1344,49, 1480,37, 356,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1279,76, 1544,85, 356,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1279,7, 1479,63, 356,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 3148,26, 2146,19, 327,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 3148,31, 2189,5, 327,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 3148,23, 2233,2, 327,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 3631,35, 3256,47, 168 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 3685,02, 3281,8, 168 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 3733,82, 3320,03, 168 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 3773,57, 3367, 168 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 3801,08, 3420,76, 168 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 3804,35, 3652,71, 168 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 3775,95, 3705,73, 168 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 3735,49, 3751,35, 168 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 3688,88, 3790,17, 168 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 3632,56, 3817,05, 168 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( 2170,28, 848,559, 110 ); - ent.v[ "angles" ] = ( 313,957, 279,447, 0,749994 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( 2313,58, 873,095, 112,254 ); - ent.v[ "angles" ] = ( 313,957, 279,447, 0,749994 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( 2253,39, 858,688, 115,831 ); - ent.v[ "angles" ] = ( 313,957, 279,447, 0,749994 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( 2213,63, 838,199, 155,075 ); - ent.v[ "angles" ] = ( 346,567, 285,443, 7,64939 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( 2209,36, 787,938, 125,494 ); - ent.v[ "angles" ] = ( 313,957, 279,447, 0,749994 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_fire_lg" ); - ent.v[ "origin" ] = ( 2286,19, 708,541, 117,316 ); - ent.v[ "angles" ] = ( 294, 179,999, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_fire_sm" ); - ent.v[ "origin" ] = ( 2151,25, 809,904, 143,179 ); - ent.v[ "angles" ] = ( 291,203, 187,763, 171,68 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke" ); - ent.v[ "origin" ] = ( 2338,18, 707,495, 110,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 278 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( 2261,84, 868,519, 119,843 ); - ent.v[ "angles" ] = ( 313,957, 279,447, 0,749994 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); - ent.v[ "origin" ] = ( 2132,15, 1608,04, 78 ); - ent.v[ "angles" ] = ( 270, 0, 36 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); - ent.v[ "origin" ] = ( 2086,79, 1716,23, 77 ); - ent.v[ "angles" ] = ( 273, 133, -143 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); - ent.v[ "origin" ] = ( 2131,11, 1825,06, 77 ); - ent.v[ "angles" ] = ( 275,582, 111,477, -166,531 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); - ent.v[ "origin" ] = ( 2240,62, 1869,87, 77 ); - ent.v[ "angles" ] = ( 273, 133, 139 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); - ent.v[ "origin" ] = ( 2348,97, 1823,61, 77 ); - ent.v[ "angles" ] = ( 273, 133, 95 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); - ent.v[ "origin" ] = ( 2393,28, 1715,72, 77 ); - ent.v[ "angles" ] = ( 273, 133, 47 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); - ent.v[ "origin" ] = ( 2347,62, 1607,82, 77 ); - ent.v[ "angles" ] = ( 273, 133, -8 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); - ent.v[ "origin" ] = ( 2239,34, 1564,15, 77 ); - ent.v[ "angles" ] = ( 273,144, 214,224, -132,142 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_car_smoke" ); - ent.v[ "origin" ] = ( 2313,97, 636,449, 110,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); - ent.v[ "origin" ] = ( 3606,32, 3329,83, 35 ); - ent.v[ "angles" ] = ( 288, 314, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); - ent.v[ "origin" ] = ( 3640,36, 3374,19, 31,0136 ); - ent.v[ "angles" ] = ( 288, 314, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); - ent.v[ "origin" ] = ( 3684,35, 3418,17, 30,2504 ); - ent.v[ "angles" ] = ( 288, 314, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); - ent.v[ "origin" ] = ( 3728,42, 3462,24, 30,6379 ); - ent.v[ "angles" ] = ( 288, 314, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); - ent.v[ "origin" ] = ( 3711,12, 3626,14, 31,3475 ); - ent.v[ "angles" ] = ( 283, 45, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); - ent.v[ "origin" ] = ( 3661,48, 3682,14, 31 ); - ent.v[ "angles" ] = ( 283, 45, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_raid_mist_water" ); - ent.v[ "origin" ] = ( 3610,37, 3737,47, 32 ); - ent.v[ "angles" ] = ( 283, 45, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_fire_lg" ); - ent.v[ "origin" ] = ( 2212,83, 826,272, 121,344 ); - ent.v[ "angles" ] = ( 276, 179,999, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( 2203,52, 849,188, 160,515 ); - ent.v[ "angles" ] = ( 288,384, 8,82536, -63,2924 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 1264,14, 1388,21, 181,378 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 3582,84, 3240,6, 44,4691 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 9 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 3817,86, 3466,07, 43,9789 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 259 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 3816,57, 3606,79, 48,9979 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 101 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 3581,82, 3831,04, 48,9828 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 350 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 1184,24, 3543,86, 248,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 1280,03, 3544,18, 248,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 1374,75, 3542,83, 248,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 1277,81, 3417,67, 248,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 1182,26, 3419,44, 248,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_nightclub_flr_glare" ); - ent.v[ "origin" ] = ( 1374,08, 3417,39, 248,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_spot_light" ); - ent.v[ "origin" ] = ( 3265,41, 2388, 58,0346 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_spot_light" ); - ent.v[ "origin" ] = ( 3267,62, 2152,43, 58,8597 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_raid_spot_light" ); - ent.v[ "origin" ] = ( 3497,83, 2153,25, 57,6806 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1370,72, 1631,4, 318,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1367,81, 1694,47, 318,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1369,29, 1756,91, 319,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1368,01, 1818,1, 318,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_fire_lg" ); - ent.v[ "origin" ] = ( 2321,64, 823,737, 117,638 ); - ent.v[ "angles" ] = ( 293,967, 176,932, 176,933 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1392,31, 3296,93, 270,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1276,45, 3296,77, 271,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1276,12, 3187,83, 270,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1391,68, 3187,09, 271,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1392,6, 3067,08, 271,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1329,26, 3066,71, 271,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1309,97, 3033,47, 270,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1310,65, 2963,19, 270,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1329,6, 2932,58, 271,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1393, 2930,5, 271,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1566,79, 2850,57, 270,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1472,7, 2850,46, 270,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1393,09, 2850,51, 270,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1277,19, 2850,46, 271,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1197,66, 2828,79, 270,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1197,09, 2914,07, 270,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1037,95, 2914,38, 270,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1038,28, 2829,86, 270,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1613,13, 3023,21, 270,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1611,61, 3102,04, 270,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1611,62, 3183,2, 270,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "origin" ] = ( 1611,23, 3250,95, 270,875 ); - ent.v[ "angles" ] = ( 90, 360, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; -} diff --git a/Multiplayer Maps/mp_raid/maps/mp/mp_raid.gsc b/Multiplayer Maps/mp_raid/maps/mp/mp_raid.gsc deleted file mode 100644 index cc3dc25..0000000 --- a/Multiplayer Maps/mp_raid/maps/mp/mp_raid.gsc +++ /dev/null @@ -1,54 +0,0 @@ -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_raid_fx::main(); - maps/mp/_load::main(); - maps/mp/mp_raid_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_raid" ); - level thread water_trigger_init(); -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "1870", reset_dvars ); -} - -water_trigger_init() -{ - triggers = getentarray( "water_killbrush", "targetname" ); - _a31 = triggers; - _k31 = getFirstArrayKey( _a31 ); - while ( isDefined( _k31 ) ) - { - trigger = _a31[ _k31 ]; - trigger thread player_splash_think(); - _k31 = getNextArrayKey( _a31, _k31 ); - } -} - -player_splash_think() -{ - for ( ;; ) - { - self waittill( "trigger", entity ); - if ( isplayer( entity ) && isalive( entity ) ) - { - self thread trigger_thread( entity, ::player_water_fx ); - } - } -} - -player_water_fx( player, endon_condition ) -{ - maxs = self.origin + self getmaxs(); - if ( maxs[ 2 ] < 0 ) - { - maxs += vectorScale( ( 0, 0, 1 ), 5 ); - } - origin = ( player.origin[ 0 ], player.origin[ 1 ], maxs[ 2 ] ); - playfx( level._effect[ "water_splash_sm" ], origin ); -} diff --git a/Multiplayer Maps/mp_raid/maps/mp/mp_raid_amb.gsc b/Multiplayer Maps/mp_raid/maps/mp/mp_raid_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_raid/maps/mp/mp_raid_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_raid/maps/mp/mp_raid_fx.gsc b/Multiplayer Maps/mp_raid/maps/mp/mp_raid_fx.gsc deleted file mode 100644 index ac6444b..0000000 --- a/Multiplayer Maps/mp_raid/maps/mp/mp_raid_fx.gsc +++ /dev/null @@ -1,50 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); - -main() -{ - precache_fxanim_props(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_raid_fx::main(); - maps/mp/createart/mp_raid_art::main(); -} - -precache_scripted_fx() -{ - level._effect[ "water_splash_sm" ] = loadfx( "bio/player/fx_player_water_splash_mp_sm" ); -} - -precache_createfx_fx() -{ - level._effect[ "fx_mp_light_dust_motes_md" ] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); - level._effect[ "fx_mp_raid_mist" ] = loadfx( "maps/mp_maps/fx_mp_raid_mist" ); - level._effect[ "fx_insects_swarm_lg_light" ] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); - level._effect[ "fx_insects_butterfly_flutter" ] = loadfx( "bio/insects/fx_insects_butterfly_flutter" ); - level._effect[ "fx_mp_fumes_vent_xsm_int" ] = loadfx( "maps/mp_maps/fx_mp_fumes_vent_xsm_int" ); - level._effect[ "fx_mp_raid_mist_water" ] = loadfx( "maps/mp_maps/fx_mp_raid_mist_water" ); - level._effect[ "fx_paper_interior_short" ] = loadfx( "debris/fx_paper_interior_short" ); - level._effect[ "fx_mp_raid_vista_smoke01" ] = loadfx( "maps/mp_maps/fx_mp_raid_vista_smoke01" ); - level._effect[ "fx_mp_raid_vista_fire01" ] = loadfx( "maps/mp_maps/fx_mp_raid_vista_fire01" ); - level._effect[ "fx_mp_slums_dark_smoke_sm" ] = loadfx( "maps/mp_maps/fx_mp_slums_dark_smoke_sm" ); - level._effect[ "fx_mp_slums_fire_sm" ] = loadfx( "maps/mp_maps/fx_mp_slums_fire_sm" ); - level._effect[ "fx_mp_slums_fire_lg" ] = loadfx( "maps/mp_maps/fx_mp_slums_fire_lg" ); - level._effect[ "fx_mp_slums_dark_smoke" ] = loadfx( "maps/mp_maps/fx_mp_slums_dark_smoke" ); - level._effect[ "fx_mp_village_car_smoke" ] = loadfx( "maps/mp_maps/fx_mp_village_car_smoke" ); - level._effect[ "fx_raid_hot_tub_sm" ] = loadfx( "water/fx_raid_hot_tub_sm" ); - level._effect[ "fx_raid_hot_tub_lg" ] = loadfx( "water/fx_raid_hot_tub_lg" ); - level._effect[ "fx_light_beacon_red_blink_fst" ] = loadfx( "light/fx_light_beacon_red_blink_fst" ); - level._effect[ "fx_light_god_ray_mp_raid" ] = loadfx( "env/light/fx_light_god_ray_mp_raid" ); - level._effect[ "fx_raid_spot_light" ] = loadfx( "light/fx_raid_spot_light" ); - level._effect[ "fx_mp_nightclub_flr_glare" ] = loadfx( "maps/mp_maps/fx_mp_nightclub_flr_glare" ); - level._effect[ "fx_raid_spot_light_picture" ] = loadfx( "light/fx_raid_spot_light_picture" ); - level._effect[ "fx_light_recessed_cool_sm_soft" ] = loadfx( "light/fx_light_recessed_cool_sm_soft" ); - level._effect[ "fx_lf_mp_raid_sun1" ] = loadfx( "lens_flares/fx_lf_mp_raid_sun1" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "umbrella" ] = %fxanim_gp_umbrella_01_anim; - level.scr_anim[ "fxanim_props" ][ "dryer_loop" ] = %fxanim_gp_dryer_loop_anim; -} diff --git a/Multiplayer Maps/mp_skate/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_skate/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_skate/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_skate/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_skate/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_skate/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_skate/maps/mp/createfx/mp_skate_fx.gsc b/Multiplayer Maps/mp_skate/maps/mp/createfx/mp_skate_fx.gsc deleted file mode 100644 index b8ac13b..0000000 --- a/Multiplayer Maps/mp_skate/maps/mp/createfx/mp_skate_fx.gsc +++ /dev/null @@ -1,960 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -206,672, 791,965, 164,125 ); - ent.v[ "angles" ] = ( 1, 269,997, 0 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2053,8, -43,695, 164,125 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2270,56, -96,2856, 164,125 ); - ent.v[ "angles" ] = ( 0,998782, 272,997, 0 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 576,598, 540,472, 164,125 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -80,8352, 584,464, 164,125 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1684,21, -406,001, 250,125 ); - ent.v[ "angles" ] = ( 1, 269,997, 0 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -381,94, -1599,8, 216,125 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1429,05, -784,271, 135,125 ); - ent.v[ "angles" ] = ( 1, 270,997, 0 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1599,65, -107,089, 164,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 267,997 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1193,21, -1297,63, 136,125 ); - ent.v[ "angles" ] = ( 0,998782, 266,997, 0 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 508,57, -1221,64, 136,125 ); - ent.v[ "angles" ] = ( 1, 269,997, 0 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 62,9516, -1270,87, 184,125 ); - ent.v[ "angles" ] = ( 359, 269,997, 0 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1961,83, -828,267, 248,125 ); - ent.v[ "angles" ] = ( 1, 269,997, 0 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -171,566, 388,264, 219,829 ); - ent.v[ "angles" ] = ( 1, 269,997, 0 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_seaguls" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3562,07, 3901,73, 25,339 ); - ent.v[ "angles" ] = ( 1,98193, 178,961, -1,03536 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_seaguls" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -862,444, 3993,28, 112,759 ); - ent.v[ "angles" ] = ( 1,98193, 178,961, -1,03536 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_seaguls" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1396,64, 4056,87, 148,768 ); - ent.v[ "angles" ] = ( 1,98193, 178,961, -1,03536 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_seaguls" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -6676,94, 2261,01, -17,496 ); - ent.v[ "angles" ] = ( 1,98193, 178,961, -1,03536 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 59,0294, 846,673, 213,926 ); - ent.v[ "angles" ] = ( 1, 269,997, 0 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 902,131, 888,74, 205,746 ); - ent.v[ "angles" ] = ( 1, 269,997, 0 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2071,18, -57,5638, 164 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 287,997 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1460,01, -1097,78, 136,125 ); - ent.v[ "angles" ] = ( 0,906439, 244,994, -0,422714 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -489,494, 173,128, 164 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -351,398, 734,361, 164 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1008,93, 480,972, 164,125 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1989,25, -402,344, 164,125 ); - ent.v[ "angles" ] = ( 0,998782, 266,997, 0 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1539,57, -1286,25, 256,125 ); - ent.v[ "angles" ] = ( 1, 269,997, 0 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1139,04, 166,352, 164,125 ); - ent.v[ "angles" ] = ( 0,994673, 263,996, -0,104551 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_swirl_tube" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 936,926, 718,65, 165,507 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 359 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_swirl_tube" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1432,98, 417,074, 169 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 359 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_swirl_tube" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2047,69, 305,064, 168,193 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 269 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_arc_ramp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1820,03, -1169,6, 164,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 219 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_arc_ramp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2579,88, -368,749, 166,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 179 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_arc_ramp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1399,3, -1615,39, 138,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 240 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_arc_ramp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1202,72, -1271,48, 136,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 45 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_arc_ramp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1137,9, 257,75, 166,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 137 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_arc_ramp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 983,217, -1705,19, 136,02 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_arc_ramp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2797,6, -297,135, 167,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 231 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_arc_ramp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2821,9, -191,008, 160,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 267 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1905,09, -799,867, 164,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 260,997 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1988,4, -519,642, 256,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270,997 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1560,31, -769,427, 256,125 ); - ent.v[ "angles" ] = ( 1, 269,997, 0 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1938,12, -536,754, 250,125 ); - ent.v[ "angles" ] = ( 359, 269,997, 0 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -890,813, -1586,67, 256,125 ); - ent.v[ "angles" ] = ( 0,220358, 273,026, -1,34401 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_skate_sun1" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -694774, 416806, 1009240 ); - ent.v[ "angles" ] = ( 1, 269,997, 0 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_arc_ramp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2187,82, -906,476, 168,043 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 863,314, 582,275, 164,125 ); - ent.v[ "angles" ] = ( 0,998782, 266,997, 0 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -810,17, 220,77, 164,125 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2276,83, -515,025, 248,125 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -258,444, 834,248, 164,125 ); - ent.v[ "angles" ] = ( 0,994673, 263,996, -0,104551 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -464,759, 633,858, 164,125 ); - ent.v[ "angles" ] = ( 0,994673, 263,996, -0,104551 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1416,18, -2099,24, 761,252 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1057,55, -1999,04, 667,403 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -644,763, -1933,24, 759,526 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -85,2617, -1966,6, 791,736 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1225,43, -981,035, 444,647 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1194,33, -812,42, 464,226 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2359,28, 168,284, 556,456 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2713,81, 176,24, 554,473 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -453,053, 1075,66, 604,107 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -573,053, 990,681, 634,994 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1542,71, 272,598, 634,013 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1355,53, 225,847, 572,936 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1694,89, 212,019, 642,524 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_paper_tree_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1887,51, 15,3983, 678,106 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1066,21, -634,358, 404,74 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1066,06, -559,569, 404,735 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1066,53, -484,936, 404,787 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1002,52, -486,686, 404,774 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1002,55, -559,665, 404,751 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1001,82, -633,688, 404,738 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -938,829, -633,718, 404,761 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -842,616, -634,285, 404,745 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -842,187, -560,05, 404,726 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -842,404, -486,349, 404,742 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -746,373, -485,842, 404,731 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -745,87, -633,641, 404,734 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -746,45, -559,687, 404,746 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -52,5196, -353,897, 396,75 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 107,534, -353,834, 396,735 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 267,635, -354,316, 396,77 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 427,583, -353,758, 396,741 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 587,876, -353,651, 396,732 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 747,584, -353,991, 396,739 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -52,0333, -483,212, 396,784 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -211,225, -481,931, 396,768 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -212,283, -609,602, 396,751 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -52,1382, -609,549, 396,737 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 116,991, -609,8, 396,786 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 108,006, -483,093, 396,778 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 108,5, -789,858, 402,74 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 268,678, -789,733, 402,732 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 427,782, -789,681, 402,74 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 587,546, -789,705, 402,745 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 748,481, -788,981, 402,785 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -937,421, -558,97, 404,793 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -937,582, -485,813, 404,737 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sq" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -315,257, -307,062, 407,775 ); - ent.v[ "angles" ] = ( 89, 89,998, -180 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sq" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -186,537, -305,446, 407,775 ); - ent.v[ "angles" ] = ( 89, 89,998, -180 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sq_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 710,711, -253,927, 297,775 ); - ent.v[ "angles" ] = ( 89, 89,998, -180 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sq_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 774,344, -250,777, 298,775 ); - ent.v[ "angles" ] = ( 89, 89,998, -180 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_godray_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -971,346, -887,58, 439,675 ); - ent.v[ "angles" ] = ( 45,6192, 321,078, 129,794 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_godray_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -465,693, -590,745, 429,875 ); - ent.v[ "angles" ] = ( 89, 89,998, -180 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_godray_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -467,529, -451,884, 429,875 ); - ent.v[ "angles" ] = ( 89, 89,998, -180 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_godray_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -470,464, -317,062, 429,875 ); - ent.v[ "angles" ] = ( 89, 89,998, -180 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1204,73, -887,71, 340,125 ); - ent.v[ "angles" ] = ( 0, 359,997, -1 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1079,14, -548,138, 346 ); - ent.v[ "angles" ] = ( 0, 359,997, -1 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -443,187, -277,867, 328,156 ); - ent.v[ "angles" ] = ( 1, 270,997, 0 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 787,875, -616,608, 241,504 ); - ent.v[ "angles" ] = ( 0, 178, 1 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 395,063, -778,421, 227,497 ); - ent.v[ "angles" ] = ( 1, 269,997, 0 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1848,58, -1545,43, 375,875 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1849,36, -1670,85, 375,875 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1716,15, -1779,75, 375,875 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sq_3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1995,54, -1512,73, 401,175 ); - ent.v[ "angles" ] = ( 43,6595, 322,337, 62,6682 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1952,07, -1422,77, 300,125 ); - ent.v[ "angles" ] = ( 359, 271,997, 0 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1587,15, -1852,59, 298,125 ); - ent.v[ "angles" ] = ( 0, 179,997, 1 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sq_3" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2005,13, -1688,16, 405,175 ); - ent.v[ "angles" ] = ( 39,1217, 319,541, 60,7125 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_godray_lg_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 583,52, -609,755, 428,557 ); - ent.v[ "angles" ] = ( 51,5932, 323,433, 136,976 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_godray_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -734,895, -888,446, 423,775 ); - ent.v[ "angles" ] = ( 58,858, 331,357, 140,615 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sq_4" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1937,78, -1837, 421,375 ); - ent.v[ "angles" ] = ( 39,1217, 319,541, 60,7125 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sq_4" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1749,87, -1839,67, 413,375 ); - ent.v[ "angles" ] = ( 39,1217, 319,541, 60,7125 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_godray_lg_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 266,572, -617,806, 427,875 ); - ent.v[ "angles" ] = ( 51,5932, 323,433, 136,976 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2805,77, -443,645, 250,125 ); - ent.v[ "angles" ] = ( 1, 269,997, 0 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3065,46, -422,518, 250,125 ); - ent.v[ "angles" ] = ( 1, 269,997, 0 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3448,81, -500,516, 250,125 ); - ent.v[ "angles" ] = ( 1, 269,997, 0 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2857,62, -423,1, 250,125 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3251,74, -404,065, 250,125 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_sand_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1125,44, 792,669, 161,148 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_sand_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1048,26, 1627,98, 130 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -90,0779, 1191,85, 160 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 229,246, 1202,5, 155,893 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 547,407, 1278,27, 147,325 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_sand_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 89,8637, 1754,01, 147,787 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_sand_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -655,635, 1750,8, 146,159 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_sand_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1382,01, 2018,33, 122,14 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_sand_gust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1524,68, 998,233, 142,886 ); - ent.v[ "angles" ] = ( 360, 269,997, 0 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_toilet_water" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2213,29, -1772,63, 256,125 ); - ent.v[ "angles" ] = ( 270,035, 358,055, -90,0577 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -154,127, 906,933, 204,657 ); - ent.v[ "angles" ] = ( 1, 269,997, 0 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2112,51, -1764,81, 277,125 ); - ent.v[ "angles" ] = ( 1, 269,997, 0 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sq_4" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -508,97, -506,96, 431,798 ); - ent.v[ "angles" ] = ( 39,1217, 319,541, 60,7125 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sq_4" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -488,73, -267,467, 446,875 ); - ent.v[ "angles" ] = ( 39,1217, 319,541, 60,7125 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_arc_ramp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 473,157, -1638,97, 141,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 132 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_arc_ramp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1532,16, 179,911, 168 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 312 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_arc_ramp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 74,0794, 223,228, 48,1639 ); - ent.v[ "angles" ] = ( 0, 90, 4 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_arc_ramp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 332,097, 239,007, 45 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 271 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -378,891, -694,41, 342,635 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 91 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 256, -647,765, 256,02 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_arc_ramp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1446,49, -847,94, 138,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 271 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_arc_ramp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1392,94, -790,177, 139,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1036,99, 54,9113, 386,743 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 966,192, 54,4502, 386,749 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sq" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1105,19, 55,2792, 355,523 ); - ent.v[ "angles" ] = ( 46, 176, 0 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sq" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -883,011, -238,186, 401,961 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -472,346, -943,438, 348,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 177 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -310,282, -603,774, 292,193 ); - ent.v[ "angles" ] = ( 0, 358,996, 1 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -319,667, -306,077, 301,125 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1198,28, -999,605, 325,933 ); - ent.v[ "angles" ] = ( 1, 269,997, 0 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -444,272, -1007,21, 328,463 ); - ent.v[ "angles" ] = ( 1, 269,997, 0 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1286,84, 175,232, 204,002 ); - ent.v[ "angles" ] = ( 1, 269,997, 0 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -997,889, -217,299, 327,688 ); - ent.v[ "angles" ] = ( 1, 269,997, 0 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sq" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 462,559, -872,949, 297,875 ); - ent.v[ "angles" ] = ( 89, 89,998, -180 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sq" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 462,245, -969,577, 297,875 ); - ent.v[ "angles" ] = ( 89, 89,998, -180 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 928,616, -448,561, 343,875 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 927,757, -384,065, 343,875 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 928,481, -319,961, 343,875 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 928,592, -256,074, 343,875 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2122,23, -1819,42, 375,875 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2122,04, -1569,09, 375,875 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1689,12, -1578,84, 240,125 ); - ent.v[ "angles" ] = ( 359,001, 266,997, 0 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 181,132, -1701,32, 290,584 ); - ent.v[ "angles" ] = ( 353,219, 273,112, -1,31069 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1791,68, -913,456, 255,125 ); - ent.v[ "angles" ] = ( 1, 267,01, 0,775123 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -432,054, 860,857, 163,125 ); - ent.v[ "angles" ] = ( 0, 265,996, -0,207937 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -762,608, 641,574, 164,125 ); - ent.v[ "angles" ] = ( 0, 273,994, -0,342054 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1584,33, -1132,52, 258,125 ); - ent.v[ "angles" ] = ( 1, 266,992, -0,225029 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -113,097, -1887,78, 298,113 ); - ent.v[ "angles" ] = ( 357, 254, 0 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1624,38, 45,5252, 234,125 ); - ent.v[ "angles" ] = ( 0, 277,994, -0,35791 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -212,386, -1574,7, 199,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 268 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 46,5117, -1765,86, 297,094 ); - ent.v[ "angles" ] = ( 356, 254, 0 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1923,47, -476,697, 250,125 ); - ent.v[ "angles" ] = ( 1,93186, 272,023, 0,772496 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1880,05, -1829,36, 311,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1932,59, -1568,29, 312,067 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2021,9, -1675,13, 332,432 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_sand_gust_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1462,3, -769,967, 269,125 ); - ent.v[ "angles" ] = ( 2, 266,988, -0,225131 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sq_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 746,591, -522,948, 373,15 ); - ent.v[ "angles" ] = ( 90, 335,101, 65,1042 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sq_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 747,993, -661,899, 374,157 ); - ent.v[ "angles" ] = ( 90, 335,101, 65,1042 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sq_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 108,296, -669,949, 374,159 ); - ent.v[ "angles" ] = ( 90, 335,101, 65,1042 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sq_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -115,177, -668,703, 374,152 ); - ent.v[ "angles" ] = ( 90, 335,101, 65,1042 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sq_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -115,452, -522,264, 374,162 ); - ent.v[ "angles" ] = ( 90, 335,101, 65,1042 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sq_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 107,706, -521,447, 374,159 ); - ent.v[ "angles" ] = ( 90, 335,101, 65,1042 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 757,596, -481,557, 396,751 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_skate_light_sml" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 747,538, -609,668, 396,748 ); - ent.v[ "angles" ] = ( 90, 304,575, 34,5781 ); - ent.v[ "delay" ] = -23; -} diff --git a/Multiplayer Maps/mp_skate/maps/mp/mp_skate.gsc b/Multiplayer Maps/mp_skate/maps/mp/mp_skate.gsc deleted file mode 100644 index 9596551..0000000 --- a/Multiplayer Maps/mp_skate/maps/mp/mp_skate.gsc +++ /dev/null @@ -1,47 +0,0 @@ -#include maps/mp/gametypes/_spawning; -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_skate_fx::main(); - maps/mp/_load::main(); - maps/mp/mp_skate_amb::main(); - precachemodel( "collision_physics_cylinder_32x128" ); - precachemodel( "collision_clip_wall_128x128x10" ); - precachemodel( "collision_physics_clip_64x64x10" ); - precachemodel( "paris_construction_scaffold_piece_01" ); - maps/mp/_compass::setupminimap( "compass_map_mp_skate" ); - visionsetnaked( "mp_skate", 1 ); - setdvar( "compassmaxrange", "2100" ); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - spawncollision( "collision_physics_cylinder_32x128", "collider", ( -1045, -418,5, 292 ), vectorScale( ( 0, 1, 0 ), 359,8 ) ); - spawncollision( "collision_physics_cylinder_32x128", "collider", ( -720, -628, 292 ), vectorScale( ( 0, 1, 0 ), 355,6 ) ); - spawncollision( "collision_clip_wall_128x128x10", "collider", ( -2250,5, -837,5, 422,5 ), ( 0, 1, 0 ) ); - spawncollision( "collision_clip_wall_128x128x10", "collider", ( -2333, -837,5, 422,5 ), ( 0, 1, 0 ) ); - spawncollision( "collision_physics_64x64x10", "collider", ( -663,5, -1975,5, 314 ), ( 0, 1, 0 ) ); - pipe1 = spawn( "script_model", ( -1368, -1541, 257 ) ); - pipe1.angles = vectorScale( ( 0, 1, 0 ), 90 ); - pipe1 setmodel( "paris_construction_scaffold_piece_01" ); - maps/mp/gametypes/_spawning::level_use_unified_spawning( 1 ); - level.remotemotarviewleft = 40; - level.remotemotarviewright = 40; - level.remotemotarviewup = 20; - level.remotemotarviewdown = 65; -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2300", reset_dvars ); -} diff --git a/Multiplayer Maps/mp_skate/maps/mp/mp_skate_amb.gsc b/Multiplayer Maps/mp_skate/maps/mp/mp_skate_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_skate/maps/mp/mp_skate_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_skate/maps/mp/mp_skate_fx.gsc b/Multiplayer Maps/mp_skate/maps/mp/mp_skate_fx.gsc deleted file mode 100644 index 6262235..0000000 --- a/Multiplayer Maps/mp_skate/maps/mp/mp_skate_fx.gsc +++ /dev/null @@ -1,52 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); - -main() -{ - precache_fxanim_props(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_skate_fx::main(); -} - -precache_scripted_fx() -{ -} - -precache_createfx_fx() -{ - level._effect[ "fx_lf_mp_skate_sun1" ] = loadfx( "lens_flares/fx_lf_mp_skate_sun1" ); - level._effect[ "fx_mp_debris_papers" ] = loadfx( "maps/mp_maps/fx_mp_debris_papers" ); - level._effect[ "fx_mp_skate_dust" ] = loadfx( "maps/mp_maps/fx_mp_skate_dust" ); - level._effect[ "fx_mp_skate_flies" ] = loadfx( "maps/mp_maps/fx_mp_skate_flies" ); - level._effect[ "fx_insects_swarm_lg_light" ] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); - level._effect[ "fx_mp_skate_seaguls" ] = loadfx( "maps/mp_maps/fx_mp_skate_seaguls" ); - level._effect[ "fx_mp_skate_paper_devil" ] = loadfx( "maps/mp_maps/fx_mp_skate_paper_devil" ); - level._effect[ "fx_mp_skate_paper_tree_gust" ] = loadfx( "maps/mp_maps/fx_mp_skate_paper_tree_gust" ); - level._effect[ "fx_mp_skate_light_sml" ] = loadfx( "maps/mp_maps/fx_mp_skate_light_sml" ); - level._effect[ "fx_mp_skate_light_sq" ] = loadfx( "maps/mp_maps/fx_mp_skate_light_sq" ); - level._effect[ "fx_mp_skate_light_sq_2" ] = loadfx( "maps/mp_maps/fx_mp_skate_light_sq_2" ); - level._effect[ "fx_mp_skate_light_sq_3" ] = loadfx( "maps/mp_maps/fx_mp_skate_light_sq_3" ); - level._effect[ "fx_mp_skate_light_sq_4" ] = loadfx( "maps/mp_maps/fx_mp_skate_light_sq_4" ); - level._effect[ "fx_mp_skate_godray_lg" ] = loadfx( "maps/mp_maps/fx_mp_skate_godray_lg" ); - level._effect[ "fx_mp_skate_godray_lg_2" ] = loadfx( "maps/mp_maps/fx_mp_skate_godray_lg_2" ); - level._effect[ "fx_mp_skate_godray_md" ] = loadfx( "maps/mp_maps/fx_mp_skate_godray_md" ); - level._effect[ "fx_mp_light_dust_motes_md" ] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); - level._effect[ "fx_mp_skate_sand_gust" ] = loadfx( "maps/mp_maps/fx_mp_skate_sand_gust" ); - level._effect[ "fx_mp_skate_sand_gust_sm" ] = loadfx( "maps/mp_maps/fx_mp_skate_sand_gust_sm" ); - level._effect[ "fx_mp_skate_toilet_water" ] = loadfx( "maps/mp_maps/fx_mp_skate_toilet_water" ); - level._effect[ "fx_paper_swirl_tube" ] = loadfx( "debris/fx_paper_swirl_tube" ); - level._effect[ "fx_paper_arc_ramp" ] = loadfx( "debris/fx_paper_arc_ramp" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "air_dancer" ] = %fxanim_mp_skate_air_dancer_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_01" ] = %fxanim_gp_seagull_circle_01_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_02" ] = %fxanim_gp_seagull_circle_02_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_03" ] = %fxanim_gp_seagull_circle_03_anim; - level.scr_anim[ "fxanim_props" ][ "ferris_wheel_spin" ] = %fxanim_mp_skate_ferris_wheel_spin_anim; - level.scr_anim[ "fxanim_props" ][ "banner_01" ] = %fxanim_mp_skate_banner_01_anim; - level.scr_anim[ "fxanim_props" ][ "teardrop_flag" ] = %fxanim_gp_teardrop_flag_loop_anim; -} diff --git a/Multiplayer Maps/mp_slums/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_slums/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_slums/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_slums/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_slums/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_slums/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_slums/maps/mp/createart/mp_slums_art.gsc b/Multiplayer Maps/mp_slums/maps/mp/createart/mp_slums_art.gsc deleted file mode 100644 index d6254fc..0000000 --- a/Multiplayer Maps/mp_slums/maps/mp/createart/mp_slums_art.gsc +++ /dev/null @@ -1,18 +0,0 @@ - -main() -{ - level.tweakfile = 1; - setdvar( "visionstore_glowTweakEnable", "0" ); - setdvar( "visionstore_glowTweakRadius0", "5" ); - setdvar( "visionstore_glowTweakRadius1", "" ); - setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); - setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); - setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); - setdvar( "visionstore_glowTweakBloomIntensity1", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); - visionsetnaked( "mp_slums", 0 ); - setdvar( "r_lightGridEnableTweaks", 1 ); - setdvar( "r_lightGridIntensity", 1 ); - setdvar( "r_lightGridContrast", 0 ); -} diff --git a/Multiplayer Maps/mp_slums/maps/mp/createfx/mp_slums_fx.gsc b/Multiplayer Maps/mp_slums/maps/mp/createfx/mp_slums_fx.gsc deleted file mode 100644 index 3882073..0000000 --- a/Multiplayer Maps/mp_slums/maps/mp/createfx/mp_slums_fx.gsc +++ /dev/null @@ -1,1030 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "origin" ] = ( -249,136, -855,816, 577,536 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( 465,266, 1998,53, 576 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 189 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 465,781, 2024,23, 609 ); - ent.v[ "angles" ] = ( 0, 212, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 118,27, 1901,9, 607 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 231 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -487,65, 1013,92, 564,147 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 254 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 447,828, 1661,07, 670,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 238 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 1156,43, 88,4098, 627,011 ); - ent.v[ "angles" ] = ( 0, 188, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -369,269, -457,055, 593,777 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 196 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( 1257,24, -1055,25, 552 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 165 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 1193,1, -422,824, 604,538 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 186 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 1620,1, 280,059, 610 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 204 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 1231,25, -1535,76, 564,267 ); - ent.v[ "angles" ] = ( 0, 180, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 814,655, -1700,05, 493,677 ); - ent.v[ "angles" ] = ( 357,037, 260,988, 0,469819 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( 904,792, -3351,33, 462 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 124 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 63,2546, -2730,9, 449 ); - ent.v[ "angles" ] = ( 0,313483, 174,008, 2,98405 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 852,984, -3226,58, 450 ); - ent.v[ "angles" ] = ( 358,662, 153,859, 3,63692 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 367,72, -1515,4, 576 ); - ent.v[ "angles" ] = ( 0, 180, 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 413,342, -1638,04, 552 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 163 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "origin" ] = ( 840,497, -1586,2, 513,235 ); - ent.v[ "angles" ] = ( 336,083, 174,208, 13,3107 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "origin" ] = ( 383,867, -2727,93, 471,531 ); - ent.v[ "angles" ] = ( 336,083, 174,208, 13,3107 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "origin" ] = ( -226,231, -2618,3, 468,216 ); - ent.v[ "angles" ] = ( 336,083, 174,208, 13,3107 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke" ); - ent.v[ "origin" ] = ( 1468,22, -1524,01, 505,439 ); - ent.v[ "angles" ] = ( 279,824, 328,913, 7,17169 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke" ); - ent.v[ "origin" ] = ( 1808,5, -45,308, 599 ); - ent.v[ "angles" ] = ( 280,441, 357,415, -1,90431 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke" ); - ent.v[ "origin" ] = ( -1122,61, 1202,27, 576,057 ); - ent.v[ "angles" ] = ( 310,694, 7,82296, -0,158126 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke" ); - ent.v[ "origin" ] = ( 1330,87, 1805,57, 576,327 ); - ent.v[ "angles" ] = ( 296,906, 85,0686, -85,9113 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 994,578, -1127,72, 595 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 675,252, -1128,26, 599 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 344,002, -879,174, 608,982 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -335,945, -2227,9, 532,443 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -268,588, -2309,35, 504,763 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -72,2735, -2483,57, 508 ); - ent.v[ "angles" ] = ( 295, 181, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -450,835, -2411,9, 490,914 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -558,81, -1976,25, 517,153 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -149,851, -1995,69, 492 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 417,446, -2934,3, 510,994 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( -1057,89, -374,858, 583,346 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 355,771, -1000,56, 543 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_leaves" ); - ent.v[ "origin" ] = ( -155,401, -171,078, 775 ); - ent.v[ "angles" ] = ( 271, 163, -73 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_leaves" ); - ent.v[ "origin" ] = ( 238,923, -37,4944, 792 ); - ent.v[ "angles" ] = ( 287,102, 158,295, -94,0742 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_leaves" ); - ent.v[ "origin" ] = ( 1212,77, -163,885, 834,399 ); - ent.v[ "angles" ] = ( 286,195, 138,464, -80,1276 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_leaves" ); - ent.v[ "origin" ] = ( 1453,76, -420,619, 851 ); - ent.v[ "angles" ] = ( 271, 163, -73 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_leaves" ); - ent.v[ "origin" ] = ( 1464,98, -1125,69, 805 ); - ent.v[ "angles" ] = ( 271, 163, -73 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "origin" ] = ( -406,35, -585,207, 552,613 ); - ent.v[ "angles" ] = ( 274, 270, 25 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 395,276, 1158,87, 638,65 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 182 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 220,658, 130,059, 598 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 188 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "origin" ] = ( -273,444, -813,508, 573,981 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 382,28, -260,432, 609,683 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 820,348, -1135,94, 580 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 155,578, -1256,22, 613 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -308,26, -2463,07, 506 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 543,549, -3401,81, 514,374 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -223,19, -2816,17, 510,909 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -648,813, -2473,37, 481 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -212,88, -1977,89, 495,096 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -317,05, -1100,11, 597,572 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -825,658, 218,259, 586,324 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -801,533, 666,124, 596,753 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -898,253, 1448,99, 645,579 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -698,392, 758,429, 635,088 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); - ent.v[ "origin" ] = ( -799,391, -186,421, 889,125 ); - ent.v[ "angles" ] = ( 273, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); - ent.v[ "origin" ] = ( -796,912, 63,3163, 901,515 ); - ent.v[ "angles" ] = ( 271, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); - ent.v[ "origin" ] = ( -690,391, -757,657, 890,888 ); - ent.v[ "angles" ] = ( 270, 358,685, 1,31464 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); - ent.v[ "origin" ] = ( 1355,94, -1573,12, 962,79 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); - ent.v[ "origin" ] = ( 1353,97, -1571,1, 968,789 ); - ent.v[ "angles" ] = ( 6,6847, 102,812, -0,531975 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); - ent.v[ "origin" ] = ( -433,279, 30,8972, 1029,8 ); - ent.v[ "angles" ] = ( 43,0794, 113,754, 14,5109 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_leaves" ); - ent.v[ "origin" ] = ( 1425,87, -1048,51, 760,649 ); - ent.v[ "angles" ] = ( 289,198, 146,699, -81,271 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); - ent.v[ "origin" ] = ( 680,682, -862,471, 592,694 ); - ent.v[ "angles" ] = ( 349,273, 332,5, -6,82402 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); - ent.v[ "origin" ] = ( 467,543, -1138,91, 622 ); - ent.v[ "angles" ] = ( 357, 111, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); - ent.v[ "origin" ] = ( 577,511, -227,768, 601 ); - ent.v[ "angles" ] = ( 357, 295, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); - ent.v[ "origin" ] = ( 4,6388, -1210,95, 627 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 37 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); - ent.v[ "origin" ] = ( -1161,52, 1008,91, 919,008 ); - ent.v[ "angles" ] = ( 272, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 1243,82, -1660,02, 548,228 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_vista_smoke" ); - ent.v[ "origin" ] = ( -621,875, -5380,24, 876,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_sprinkle_water" ); - ent.v[ "origin" ] = ( -773,034, 1640,41, 718,875 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_splash_detail" ); - ent.v[ "origin" ] = ( -771,502, 1647,34, 592,337 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_splash_detail" ); - ent.v[ "origin" ] = ( -779,789, 1626,08, 593,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_splash_detail" ); - ent.v[ "origin" ] = ( -486,017, -691,068, 551,283 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_splash_detail" ); - ent.v[ "origin" ] = ( -451,241, -687,673, 552,495 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_sprinkle_water" ); - ent.v[ "origin" ] = ( -467,677, -689,812, 689,033 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 294,573, -1115,65, 594,843 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -534,641, -1309,83, 607,994 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( -1091,07, -615,063, 539,242 ); - ent.v[ "angles" ] = ( 6,5365, 334,891, -6,4085 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( -1087,59, -512,146, 545,441 ); - ent.v[ "angles" ] = ( 6,5365, 334,891, -6,4085 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( -1100,09, -631,07, 545,286 ); - ent.v[ "angles" ] = ( 7,16937, 340,901, 23,3092 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( 756,021, -1568,17, 496 ); - ent.v[ "angles" ] = ( 339,569, 260,459, 37,8245 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( 890,405, -1493,62, 496 ); - ent.v[ "angles" ] = ( 339,569, 260,459, 37,8245 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( 805,15, -1617,87, 498,527 ); - ent.v[ "angles" ] = ( 7,67748, 299,488, 21,1493 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( 422,165, -2736,92, 448 ); - ent.v[ "angles" ] = ( 9,10744, 258,552, -4,25539 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( 258,235, -2743,73, 448 ); - ent.v[ "angles" ] = ( 10,6652, 267,399, 29,324 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( 298,053, -2672,83, 448 ); - ent.v[ "angles" ] = ( 336,672, 274,973, 9,87578 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( -174,186, -2602,68, 453,171 ); - ent.v[ "angles" ] = ( 6,44468, 102,056, 33,3416 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( 573,655, 144,609, 575 ); - ent.v[ "angles" ] = ( 339,384, 341,64, -37,8244 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_pipe_water_ground" ); - ent.v[ "origin" ] = ( -609,875, 1752,37, 593,025 ); - ent.v[ "angles" ] = ( 270, 0, -179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( 517,208, 139,357, 593 ); - ent.v[ "angles" ] = ( 330,186, 333,887, -8,88146 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 325,279, -1517,28, 612,428 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 352,937, -1682,32, 607,287 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 904,383, -3400,03, 511 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -706,317, 108,196, 595,29 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -896,853, 818,549, 581,999 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 273 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 819,409, -715,655, 669,347 ); - ent.v[ "angles" ] = ( 0, 179, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( 570,933, 903,671, 682,125 ); - ent.v[ "angles" ] = ( 13,4463, 164,456, 14,2581 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( 1091,99, -1697,88, 612,125 ); - ent.v[ "angles" ] = ( 21,7749, 98,6191, 0,218312 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( 1046,56, -1699,97, 612,125 ); - ent.v[ "angles" ] = ( 21,7749, 98,6191, 0,218312 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( 1054,92, -1689,01, 612,125 ); - ent.v[ "angles" ] = ( 359,461, 6,6804, -21,7696 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( -577,855, -1518,53, 655 ); - ent.v[ "angles" ] = ( 21,7749, 98,6191, 0,218312 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( -617,034, -1522,15, 657 ); - ent.v[ "angles" ] = ( 21,7749, 98,6191, 0,218312 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( -689,729, -3181,92, 637,457 ); - ent.v[ "angles" ] = ( 309,82, 261,617, -1,34511 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_fire_sm" ); - ent.v[ "origin" ] = ( -231,18, -2617,83, 467,701 ); - ent.v[ "angles" ] = ( 288,334, 253,225, 112,074 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( -232,756, -2626,43, 471,116 ); - ent.v[ "angles" ] = ( 28,5817, 289,094, 9,61949 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_fire_sm" ); - ent.v[ "origin" ] = ( 1275,41, -1668,1, 505,386 ); - ent.v[ "angles" ] = ( 277,839, 154,121, -150,075 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_fire_sm" ); - ent.v[ "origin" ] = ( 1259,45, -1663,67, 504,009 ); - ent.v[ "angles" ] = ( 277,839, 154,121, -150,075 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( 1259,37, -1664,85, 509,538 ); - ent.v[ "angles" ] = ( 339,569, 260,459, 37,8245 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( 1277,53, -1668,25, 503,716 ); - ent.v[ "angles" ] = ( 339,569, 260,459, 37,8245 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_fire_sm" ); - ent.v[ "origin" ] = ( 567,277, 150,251, 570,514 ); - ent.v[ "angles" ] = ( 286,522, 114,537, -138,305 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_fire_sm" ); - ent.v[ "origin" ] = ( -1096,57, -519,634, 543,024 ); - ent.v[ "angles" ] = ( 294,944, 333,252, 26,6578 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke" ); - ent.v[ "origin" ] = ( -2170,65, -781,139, 587,679 ); - ent.v[ "angles" ] = ( 303,202, 101,231, -116,688 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 1530,65, -758,395, 618,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 186 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_fire_lg" ); - ent.v[ "origin" ] = ( 1429,72, -1509,42, 519,556 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); - ent.v[ "origin" ] = ( 1625,76, 128,506, 1048,9 ); - ent.v[ "angles" ] = ( 8,73666, 189,715, -127,142 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); - ent.v[ "origin" ] = ( 1634,52, 126,897, 1036,2 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_fire_lg" ); - ent.v[ "origin" ] = ( -1109,8, -607,005, 544,777 ); - ent.v[ "angles" ] = ( 276,285, 15,571, -16,9603 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_fire_distant" ); - ent.v[ "origin" ] = ( -2241,5, -792,427, 513,146 ); - ent.v[ "angles" ] = ( 354,781, 86,6078, 11,1304 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_fire_distant" ); - ent.v[ "origin" ] = ( -2215,89, -3187,99, 450,309 ); - ent.v[ "angles" ] = ( 280,506, 156,362, 101,335 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_fire_distant" ); - ent.v[ "origin" ] = ( 1502,31, -3044,83, 456 ); - ent.v[ "angles" ] = ( 280,506, 156,363, -68,6656 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_fire_distant" ); - ent.v[ "origin" ] = ( -1841,49, 1344,22, 589,248 ); - ent.v[ "angles" ] = ( 280,506, 156,363, -68,6656 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_fire_distant" ); - ent.v[ "origin" ] = ( 1707,9, 2207,51, 579 ); - ent.v[ "angles" ] = ( 280,506, 156,363, -68,6656 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -1014,92, 625,071, 583,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_fire_distant" ); - ent.v[ "origin" ] = ( -366,956, 2456,48, 627,511 ); - ent.v[ "angles" ] = ( 280,506, 156,363, -68,6656 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_embers" ); - ent.v[ "origin" ] = ( -1171,67, 1235,39, 577,61 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_fire_lg" ); - ent.v[ "origin" ] = ( -1127,9, 1219,65, 606,683 ); - ent.v[ "angles" ] = ( 276,285, 15,571, -16,9603 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_embers" ); - ent.v[ "origin" ] = ( 1738,58, 2098,89, 599 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_embers" ); - ent.v[ "origin" ] = ( 1865,73, -49,4312, 599 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_embers" ); - ent.v[ "origin" ] = ( 1450,64, -1522,83, 543,426 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "origin" ] = ( -220,002, -830,659, 552,486 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( 793,626, -361,674, 558 ); - ent.v[ "angles" ] = ( 356,591, 327,205, 22,8033 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_fire_distant" ); - ent.v[ "origin" ] = ( -1666,03, -2387,15, 430,411 ); - ent.v[ "angles" ] = ( 281,958, 95,5086, -29,1018 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( 557,212, 629,073, 687,125 ); - ent.v[ "angles" ] = ( 42,0012, 193,021, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( 551,54, 652,945, 680,125 ); - ent.v[ "angles" ] = ( 26,9544, 267,226, 26,8022 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -603,546, -1046,59, 604,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 101 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -339,741, -944,891, 616,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 101 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 927,252, 375,411, 630,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 120 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 639,417, 621,634, 627,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 101 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -755,14, 1619,51, 641,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1299,98, -1853,96, 565,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 184 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1036,08, -2769,44, 530,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 101 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 713,327, -857,275, 610,002 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 680,888, -552,694, 593,979 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_dark_lg" ); - ent.v[ "origin" ] = ( 382,759, -486,13, 604,008 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 1037,2, 2053,76, 597 ); - ent.v[ "angles" ] = ( 359,642, 191, -0,933737 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_fire_distant" ); - ent.v[ "origin" ] = ( 2343,25, 705,848, 549,353 ); - ent.v[ "angles" ] = ( 0,488145, 345,522, 50,8411 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 1097,87, 1078,23, 639,102 ); - ent.v[ "angles" ] = ( 270, 0, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 1172,77, 855,816, 614,471 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( -327,432, 1351,39, 576 ); - ent.v[ "angles" ] = ( 16,5768, 1,24074, 17,9215 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -379,064, -586,639, 580 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -113,546, 136,467, 588 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 134,845, 2,65759, 594 ); - ent.v[ "angles" ] = ( 270, 0, 2,90451 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_slums_sun1" ); - ent.v[ "origin" ] = ( -52513,5, 36299,2, 18243 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( -1096,81, -602,4, 581,951 ); - ent.v[ "angles" ] = ( 38,7356, 347,197, -2,72317 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( -1102,28, -627,4, 578,111 ); - ent.v[ "angles" ] = ( 33,0446, 280,811, -5,14528 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -871,979, -2830,09, 503,166 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -420,106, 327,428, 595,658 ); - ent.v[ "angles" ] = ( 0,104537, 276, 1,99467 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 548,003, 279,082, 642,484 ); - ent.v[ "angles" ] = ( 270, 0, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 787,562, -2414,41, 464 ); - ent.v[ "angles" ] = ( 357,037, 260,989, 0,469818 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 437,672, 245,592, 612 ); - ent.v[ "angles" ] = ( 2,99305, 94,0061, 0,20947 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_leaves" ); - ent.v[ "origin" ] = ( 1398,18, -438,871, 791 ); - ent.v[ "angles" ] = ( 271, 163, -73 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_leaves" ); - ent.v[ "origin" ] = ( 1028,92, -3035,26, 683,021 ); - ent.v[ "angles" ] = ( 271, 163, -73 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_leaves" ); - ent.v[ "origin" ] = ( 1059,79, -3063,87, 670,037 ); - ent.v[ "angles" ] = ( 271, 163, -73 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_leaves" ); - ent.v[ "origin" ] = ( 1057,26, -3278,09, 676,031 ); - ent.v[ "angles" ] = ( 271, 163, -73 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_leaves" ); - ent.v[ "origin" ] = ( -1197,57, -2622, 672 ); - ent.v[ "angles" ] = ( 271, 163, -35 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_leaves" ); - ent.v[ "origin" ] = ( 297,888, -132,326, 748,125 ); - ent.v[ "angles" ] = ( 271, 163, -26 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_leaves" ); - ent.v[ "origin" ] = ( -998,041, 1424,76, 783,087 ); - ent.v[ "angles" ] = ( 276,978, 151,84, 72,1485 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); - ent.v[ "origin" ] = ( 302,841, -833,125, 588,995 ); - ent.v[ "angles" ] = ( 343,881, 232,044, 11,9529 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); - ent.v[ "origin" ] = ( 438,672, -466,224, 590,998 ); - ent.v[ "angles" ] = ( 354,204, 168,079, -1,55845 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_leaves" ); - ent.v[ "origin" ] = ( 1178,86, 1120,29, 817,571 ); - ent.v[ "angles" ] = ( 283,959, 178,821, -88,7878 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_leaves" ); - ent.v[ "origin" ] = ( 863,989, 1242,15, 809,472 ); - ent.v[ "angles" ] = ( 291,649, 270,721, -77,0853 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_leaves" ); - ent.v[ "origin" ] = ( 1272,18, 1133,09, 888,682 ); - ent.v[ "angles" ] = ( 283,959, 178,821, -88,7878 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -518,169, 1425,43, 578 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 218 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -640,889, 103,133, 533,695 ); - ent.v[ "angles" ] = ( 0,104537, 276, 1,99467 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 265,024, -486,663, 546 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 1213,68, -1013,49, 588 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_leaves" ); - ent.v[ "origin" ] = ( -79,6434, -249,857, 752,095 ); - ent.v[ "angles" ] = ( 273,296, 218,595, -8,2038 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_leaves" ); - ent.v[ "origin" ] = ( 1217,1, -258,363, 805,326 ); - ent.v[ "angles" ] = ( 271, 163, -29 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_leaves" ); - ent.v[ "origin" ] = ( -406,794, 946,959, 801,745 ); - ent.v[ "angles" ] = ( 283,323, 196,447, -96,5895 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_leaves" ); - ent.v[ "origin" ] = ( -411,854, 964,125, 758,863 ); - ent.v[ "angles" ] = ( 283,323, 196,447, -141,59 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_leaves" ); - ent.v[ "origin" ] = ( 1018,94, -3190,14, 669,691 ); - ent.v[ "angles" ] = ( 271, 163, -91 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( 1142,23, -409,063, 552 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 186 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 400,226, -1046,04, 552 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 159 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 378,42, -364,824, 552 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 203 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( 1242,87, -1522,52, 504 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 175 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -268,662, -1416,48, 552,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 163 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -505,713, -232,965, 543,438 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 228 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( -236,324, 1372,56, 576 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 228 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "origin" ] = ( 1084,53, 177,122, 581 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 200 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 456,554, 650,371, 575,954 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 117 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 251,977, 1001,05, 575,209 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 144 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -317,066, 59,5064, 552 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 265 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 88,8449, 1944,49, 576 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 243 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 692,53, -2278,9, 448 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 273 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "origin" ] = ( 858,873, 519,901, 715,875 ); - ent.v[ "angles" ] = ( 90, 45,7819, 124,782 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "origin" ] = ( 797,766, 504,151, 715,875 ); - ent.v[ "angles" ] = ( 90, 45,7819, 124,782 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "origin" ] = ( 792,916, 846,693, 709,66 ); - ent.v[ "angles" ] = ( 90, 0, -14 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "origin" ] = ( -645,246, -1005,58, 689,875 ); - ent.v[ "angles" ] = ( 90, 355,083, -20,9166 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fire_sprinkler_gush_splash_sm" ); - ent.v[ "origin" ] = ( -469,252, -688,576, 553,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_fire_sprinkler_gush_splash_sm" ); - ent.v[ "origin" ] = ( -775,723, 1642,17, 593,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_wall_water_bottom" ); - ent.v[ "origin" ] = ( -776,311, 1640,43, 593,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; -} diff --git a/Multiplayer Maps/mp_slums/maps/mp/mp_slums.gsc b/Multiplayer Maps/mp_slums/maps/mp/mp_slums.gsc deleted file mode 100644 index 7bd20eb..0000000 --- a/Multiplayer Maps/mp_slums/maps/mp/mp_slums.gsc +++ /dev/null @@ -1,32 +0,0 @@ -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_slums_fx::main(); - maps/mp/_load::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_slums" ); - maps/mp/mp_slums_amb::main(); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - level.remotemotarviewleft = 30; - level.remotemotarviewright = 30; - level.remotemotarviewup = 10; - level.remotemotarviewdown = 25; -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2500", reset_dvars ); - ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1400", reset_dvars ); -} diff --git a/Multiplayer Maps/mp_slums/maps/mp/mp_slums_amb.gsc b/Multiplayer Maps/mp_slums/maps/mp/mp_slums_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_slums/maps/mp/mp_slums_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_slums/maps/mp/mp_slums_fx.gsc b/Multiplayer Maps/mp_slums/maps/mp/mp_slums_fx.gsc deleted file mode 100644 index 492f09a..0000000 --- a/Multiplayer Maps/mp_slums/maps/mp/mp_slums_fx.gsc +++ /dev/null @@ -1,56 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); - -main() -{ - precache_fxanim_props(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_slums_fx::main(); -} - -precache_scripted_fx() -{ -} - -precache_createfx_fx() -{ - level._effect[ "fx_mp_debris_papers" ] = loadfx( "maps/mp_maps/fx_mp_debris_papers" ); - level._effect[ "fx_mp_debris_papers_narrow" ] = loadfx( "maps/mp_maps/fx_mp_debris_papers_narrow" ); - level._effect[ "fx_mp_express_train_blow_dust" ] = loadfx( "maps/mp_maps/fx_mp_express_train_blow_dust" ); - level._effect[ "fx_insects_swarm_dark_lg" ] = loadfx( "bio/insects/fx_insects_swarm_dark_lg" ); - level._effect[ "fx_mp_slums_leaves" ] = loadfx( "maps/mp_maps/fx_mp_slums_leaves" ); - level._effect[ "fx_insects_swarm_lg_light" ] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); - level._effect[ "fx_mp_elec_spark_burst_md_runner" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_md_runner" ); - level._effect[ "fx_insects_butterfly_flutter" ] = loadfx( "bio/insects/fx_insects_butterfly_flutter" ); - level._effect[ "fx_mp_light_dust_motes_md" ] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); - level._effect[ "fx_mp_slums_fire_sm" ] = loadfx( "maps/mp_maps/fx_mp_slums_fire_sm" ); - level._effect[ "fx_mp_slums_fire_lg" ] = loadfx( "maps/mp_maps/fx_mp_slums_fire_lg" ); - level._effect[ "fx_mp_slums_fire_distant" ] = loadfx( "maps/mp_maps/fx_mp_slums_fire_distant" ); - level._effect[ "fx_mp_slums_embers" ] = loadfx( "maps/mp_maps/fx_mp_slums_embers" ); - level._effect[ "fx_hvac_steam_md" ] = loadfx( "smoke/fx_hvac_steam_md" ); - level._effect[ "fx_smk_smolder_gray_slow_shrt" ] = loadfx( "smoke/fx_smk_smolder_gray_slow_shrt" ); - level._effect[ "fx_mp_slums_dark_smoke" ] = loadfx( "maps/mp_maps/fx_mp_slums_dark_smoke" ); - level._effect[ "fx_smk_tin_hat_sm" ] = loadfx( "smoke/fx_smk_tin_hat_sm" ); - level._effect[ "fx_mp_slums_vista_smoke" ] = loadfx( "maps/mp_maps/fx_mp_slums_vista_smoke" ); - level._effect[ "fx_mp_slums_vista_smoke_low" ] = loadfx( "maps/mp_maps/fx_mp_slums_vista_smoke_low" ); - level._effect[ "fx_mp_slums_dark_smoke_sm" ] = loadfx( "maps/mp_maps/fx_mp_slums_dark_smoke_sm" ); - level._effect[ "fx_window_god_ray_sm" ] = loadfx( "light/fx_window_god_ray_sm" ); - level._effect[ "fx_window_god_ray" ] = loadfx( "light/fx_window_god_ray" ); - level._effect[ "fx_village_tube_light" ] = loadfx( "light/fx_village_tube_light" ); - level._effect[ "fx_mp_slums_sprinkle_water" ] = loadfx( "maps/mp_maps/fx_mp_slums_sprinkle_water" ); - level._effect[ "fx_wall_water_bottom" ] = loadfx( "water/fx_wall_water_bottom" ); - level._effect[ "fx_water_splash_detail" ] = loadfx( "water/fx_water_splash_detail" ); - level._effect[ "fx_pipe_water_ground" ] = loadfx( "water/fx_pipe_water_ground" ); - level._effect[ "fx_water_fire_sprinkler_gush_splash_sm" ] = loadfx( "water/fx_water_fire_sprinkler_gush_splash_sm" ); - level._effect[ "fx_lf_mp_slums_sun1" ] = loadfx( "lens_flares/fx_lf_mp_slums_sun1" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "control_wire_sm" ] = %fxanim_gp_control_wire_sm_anim; - level.scr_anim[ "fxanim_props" ][ "roofvent" ] = %fxanim_gp_roofvent_anim; - level.scr_anim[ "fxanim_props" ][ "rope_coil" ] = %fxanim_gp_rope_coil_anim; - level.scr_anim[ "fxanim_props" ][ "dryer_loop" ] = %fxanim_gp_dryer_loop_anim; -} diff --git a/Multiplayer Maps/mp_socotra/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_socotra/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_socotra/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_socotra/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_socotra/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_socotra/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_socotra/maps/mp/createart/mp_socotra_art.gsc b/Multiplayer Maps/mp_socotra/maps/mp/createart/mp_socotra_art.gsc deleted file mode 100644 index 8352f83..0000000 --- a/Multiplayer Maps/mp_socotra/maps/mp/createart/mp_socotra_art.gsc +++ /dev/null @@ -1,25 +0,0 @@ - -main() -{ - level.tweakfile = 1; - setdvar( "scr_fog_exp_halfplane", "3759.28" ); - setdvar( "scr_fog_exp_halfheight", "243.735" ); - setdvar( "scr_fog_nearplane", "601.593" ); - setdvar( "scr_fog_red", "0.806694" ); - setdvar( "scr_fog_green", "0.962521" ); - setdvar( "scr_fog_blue", "0.9624" ); - setdvar( "scr_fog_baseheight", "-475.268" ); - setdvar( "visionstore_glowTweakEnable", "0" ); - setdvar( "visionstore_glowTweakRadius0", "5" ); - setdvar( "visionstore_glowTweakRadius1", "" ); - setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); - setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); - setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); - setdvar( "visionstore_glowTweakBloomIntensity1", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); - visionsetnaked( "mp_socotra", 0 ); - setdvar( "r_lightGridEnableTweaks", 1 ); - setdvar( "r_lightGridIntensity", 1 ); - setdvar( "r_lightGridContrast", 0 ); -} diff --git a/Multiplayer Maps/mp_socotra/maps/mp/createfx/mp_socotra_fx.gsc b/Multiplayer Maps/mp_socotra/maps/mp/createfx/mp_socotra_fx.gsc deleted file mode 100644 index ec0d322..0000000 --- a/Multiplayer Maps/mp_socotra/maps/mp/createfx/mp_socotra_fx.gsc +++ /dev/null @@ -1,1730 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -428,667, 1020,38, 227,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( -299,283, -1657,69, 211 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 116 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smk_plume_md_blk" ); - ent.v[ "origin" ] = ( -684,98, -2470,29, 271,493 ); - ent.v[ "angles" ] = ( 13,1475, 136,766, -14,1714 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( -919,616, -1164,18, 199,961 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 123 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_md" ); - ent.v[ "origin" ] = ( -1113,35, -989,305, 202,779 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 75 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( -1118,63, -605,538, 199,424 ); - ent.v[ "angles" ] = ( 359, 148, 4 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( -1292,58, -437,347, 208 ); - ent.v[ "angles" ] = ( 358, 79, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( -1080,2, -21,7796, 199,386 ); - ent.v[ "angles" ] = ( 360, 100, -5 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( -821,967, 276,546, 135,901 ); - ent.v[ "angles" ] = ( 6, 64, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_windy_heavy_md" ); - ent.v[ "origin" ] = ( 2287,92, 574,404, 208 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 162,951 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( 1948,58, 398,333, 215,353 ); - ent.v[ "angles" ] = ( 4,06298, 162,951, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( 2128,62, 309,126, 222,428 ); - ent.v[ "angles" ] = ( 359,063, 162,951, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( 1676, 1504,57, 285,333 ); - ent.v[ "angles" ] = ( 359,063, 162,951, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( 1577,41, 1108,61, 208,397 ); - ent.v[ "angles" ] = ( 359,063, 162,951, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( 1609,37, -537,299, 104 ); - ent.v[ "angles" ] = ( 1,06456, 152,953, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_md" ); - ent.v[ "origin" ] = ( 1413,76, -1118,39, 113 ); - ent.v[ "angles" ] = ( 1,86574, 124,938, -0,888848 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( 1261,97, -572,017, 104 ); - ent.v[ "angles" ] = ( 0,74629, 94,9473, 1,14286 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( 1550,7, 1585,04, 226,624 ); - ent.v[ "angles" ] = ( 359,063, 162,951, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 493,669, -312,98, 107,225 ); - ent.v[ "angles" ] = ( 354,639, 128,607, 9,96805 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 376,001, -576,508, 115 ); - ent.v[ "angles" ] = ( 0,23689, 84,1525, 1,3566 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -14,7859, -976,204, 132,466 ); - ent.v[ "angles" ] = ( 358,783, 156,142, 0,644598 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -331,998, -1281,27, 181,291 ); - ent.v[ "angles" ] = ( 6,44461, 75,2916, -0,688908 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_debris_papers_narrow" ); - ent.v[ "origin" ] = ( -534,17, -2031,74, 206 ); - ent.v[ "angles" ] = ( 358, 90, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_debris_papers" ); - ent.v[ "origin" ] = ( -472,675, -1623,29, 205 ); - ent.v[ "angles" ] = ( 359, 74,9825, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( -613,956, -1514,2, 211,983 ); - ent.v[ "angles" ] = ( 1, 122, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( -901,652, -637,395, 175,959 ); - ent.v[ "angles" ] = ( 5,76759, 46,0834, 1,65956 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( -696,847, -401,109, 151,056 ); - ent.v[ "angles" ] = ( 5,89547, 82,9891, 0,366278 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( -664,27, -168,367, 129,555 ); - ent.v[ "angles" ] = ( 5,01985, 75,126, 0,959562 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 864,562, 2067,46, 364,905 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 903,675, 2122,7, 355,458 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 738,132, 2006,89, 356,521 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 846,644, 2359,7, 359,182 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 999,565, 1939,78, 363,225 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 769,001, 2309,17, 360,381 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 764,505, 1969,73, 358,987 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( 1596,5, -392,904, 104 ); - ent.v[ "angles" ] = ( 0,311249, 79,95, -1,01768 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( 1247,44, -377,946, 105 ); - ent.v[ "angles" ] = ( 1,74609, 94,9673, 1,1433 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_swirl_sm_runner" ); - ent.v[ "origin" ] = ( -283,752, -527,138, 216,125 ); - ent.v[ "angles" ] = ( 270,979, 223,667, 54,1511 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( 8,88122, 58,394, 114,507 ); - ent.v[ "angles" ] = ( 358,503, 169,732, -0,475275 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( 302,535, -823,243, 131,256 ); - ent.v[ "angles" ] = ( 1,95937, 58,7663, -0,148735 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( 673,43, 665,231, 66,9461 ); - ent.v[ "angles" ] = ( 351,734, 154,516, -1,28083 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( 485,741, 1766,49, 286 ); - ent.v[ "angles" ] = ( 359,917, 214,666, -2,5138 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( 2122,56, 444,018, 217,298 ); - ent.v[ "angles" ] = ( 2,73693, 122,034, 1,63656 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( 1482,08, 1286,01, 205,233 ); - ent.v[ "angles" ] = ( 354,189, 116,634, 1,82825 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( 1131,79, 1650,59, 279,69 ); - ent.v[ "angles" ] = ( 358,829, 168,683, -2,35321 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_sml" ); - ent.v[ "origin" ] = ( 2298,92, 452,79, 238,662 ); - ent.v[ "angles" ] = ( 358,9, 133,021, -0,617255 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge" ); - ent.v[ "origin" ] = ( 2264,17, 295,53, 327,398 ); - ent.v[ "angles" ] = ( 0,165289, 131,407, -4,86239 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_md" ); - ent.v[ "origin" ] = ( 2002,27, 219,609, 267,522 ); - ent.v[ "angles" ] = ( 1,28624, 96,0756, 1,62549 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_sml" ); - ent.v[ "origin" ] = ( 2385,88, 749,519, 271,76 ); - ent.v[ "angles" ] = ( 357,164, 159,775, 0,7788 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_swirl_sm_runner" ); - ent.v[ "origin" ] = ( -153,71, 703,091, 118,378 ); - ent.v[ "angles" ] = ( 271,131, 58,3991, 112,726 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_swirl_sm_runner" ); - ent.v[ "origin" ] = ( 655,296, -622,333, 122,125 ); - ent.v[ "angles" ] = ( 271,099, 5,13488, 6,98167 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_wide_distant" ); - ent.v[ "origin" ] = ( 430,306, -53,1272, 114,945 ); - ent.v[ "angles" ] = ( 0,793186, 125,188, 4,24615 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( 1243,82, -1022,43, 103,227 ); - ent.v[ "angles" ] = ( 357,344, 87,7779, 2,21321 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_wide_distant" ); - ent.v[ "origin" ] = ( 1007,59, -1244,43, 96,343 ); - ent.v[ "angles" ] = ( 1, 117, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_sml" ); - ent.v[ "origin" ] = ( 896,394, -1562,37, 185,756 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 114 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_sml" ); - ent.v[ "origin" ] = ( 862,716, -1415,86, 136,038 ); - ent.v[ "angles" ] = ( 358, 98, 12 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( 542,182, -1589,99, 107,357 ); - ent.v[ "angles" ] = ( 0,483277, 89,9489, -0,948553 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( -235,547, -1313,64, 187,995 ); - ent.v[ "angles" ] = ( 7,45735, 104,689, 4,5107 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_windy_heavy_sm_slow" ); - ent.v[ "origin" ] = ( -191,268, -1058,69, 140,715 ); - ent.v[ "angles" ] = ( 3,01636, 116,686, 6,97532 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( -273,233, -876,34, 146,396 ); - ent.v[ "angles" ] = ( 0,379013, 117,015, 1,25579 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( -1012,98, -962,73, 206,9 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 113 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( -29,9021, -1773,79, 435,866 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 130 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_sml" ); - ent.v[ "origin" ] = ( 250,474, -144,697, 148,615 ); - ent.v[ "angles" ] = ( 358,932, 116,562, -0,477644 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_md" ); - ent.v[ "origin" ] = ( 1498,19, 818,139, 356,028 ); - ent.v[ "angles" ] = ( 3,53969, 166,051, -2,0746 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_wide_distant" ); - ent.v[ "origin" ] = ( 1391,2, 521,116, 397,125 ); - ent.v[ "angles" ] = ( 1,51758, 172,901, -1,37094 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( -438,382, -589,383, 147,291 ); - ent.v[ "angles" ] = ( 358,454, 149,921, -0,622784 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( -730,827, -584,895, 163,689 ); - ent.v[ "angles" ] = ( 0,994673, 77, -0,104552 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( 214,052, 877,131, 111,236 ); - ent.v[ "angles" ] = ( 354,286, 147,464, 3,01364 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( -7,15416, 1176,39, 173,275 ); - ent.v[ "angles" ] = ( 346,045, 84,263, 0,27686 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( 710,736, 1701,52, 282 ); - ent.v[ "angles" ] = ( 351,476, 120,732, -0,395834 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( 607,241, 2348,43, 289 ); - ent.v[ "angles" ] = ( 345,782, 127,287, 2,25374 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge" ); - ent.v[ "origin" ] = ( 1624,93, 1640,97, 336,129 ); - ent.v[ "angles" ] = ( 3,25051, 190,388, -19,8542 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge" ); - ent.v[ "origin" ] = ( 1847,51, 1462,08, 341,83 ); - ent.v[ "angles" ] = ( 0,321654, 188,733, -28,9518 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_swirl_sm_runner" ); - ent.v[ "origin" ] = ( 1988,79, -758,457, 144,125 ); - ent.v[ "angles" ] = ( 270, 356,82, 121,18 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_md" ); - ent.v[ "origin" ] = ( 715,418, 1120,62, 348,736 ); - ent.v[ "angles" ] = ( 2,9289, 160,966, 0,889903 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_sml" ); - ent.v[ "origin" ] = ( 650,098, 940,689, 201,22 ); - ent.v[ "angles" ] = ( 347,148, 142,304, -10,5408 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_swirl_sm_runner" ); - ent.v[ "origin" ] = ( 644,365, 1235,2, 236,125 ); - ent.v[ "angles" ] = ( 270, 0, 87 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 676,651, -188,09, 64,8804 ); - ent.v[ "angles" ] = ( 347,747, 127,37, 10,1578 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 836,866, 12,3742, 30 ); - ent.v[ "angles" ] = ( 355,963, 91,9184, 3,35687 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_md" ); - ent.v[ "origin" ] = ( 708,484, -199,705, 62,7395 ); - ent.v[ "angles" ] = ( 5,02986, 107,371, 8,75006 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_swirl_sm_runner" ); - ent.v[ "origin" ] = ( 1210,12, -146,126, 78 ); - ent.v[ "angles" ] = ( 270, 0, 105 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_swirl_sm_runner" ); - ent.v[ "origin" ] = ( -112,135, 1598,35, 254,375 ); - ent.v[ "angles" ] = ( 281,628, 239,905, -91,2958 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( 1050,06, -350,187, 310,031 ); - ent.v[ "angles" ] = ( 12,6728, 136,308, -1,02616 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_sml" ); - ent.v[ "origin" ] = ( 1256,35, -1199,55, 131,209 ); - ent.v[ "angles" ] = ( 356,802, 103,969, 1,78147 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_md" ); - ent.v[ "origin" ] = ( -57,98, -1767,6, 419,574 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 131 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( -533,581, -2168,42, 204 ); - ent.v[ "angles" ] = ( 0, 89, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( -12,5957, -2022,8, 135,678 ); - ent.v[ "angles" ] = ( 353, 39, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge" ); - ent.v[ "origin" ] = ( 413,439, -1782,14, 115,644 ); - ent.v[ "angles" ] = ( 353,521, 121,957, -3,00394 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_wide_distant" ); - ent.v[ "origin" ] = ( 424,984, -987,308, 382,288 ); - ent.v[ "angles" ] = ( 351,483, 141,527, -7,95857 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( 457,247, -1013,04, 391,53 ); - ent.v[ "angles" ] = ( 9,82644, 130,124, -1,83855 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_sml" ); - ent.v[ "origin" ] = ( -518,603, -749,194, 246,612 ); - ent.v[ "angles" ] = ( 0,713854, 105,764, 2,01348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_wide_distant" ); - ent.v[ "origin" ] = ( -963,41, -176,684, 392,302 ); - ent.v[ "angles" ] = ( 3, 126, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_md" ); - ent.v[ "origin" ] = ( -730,808, 102,319, 324,469 ); - ent.v[ "angles" ] = ( 0,937058, 123,048, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_wide_distant" ); - ent.v[ "origin" ] = ( -1003,7, 687,996, 271,049 ); - ent.v[ "angles" ] = ( 354,678, 167,044, 8,34405 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( -723,079, 59,7503, 328,999 ); - ent.v[ "angles" ] = ( 0, 115, -4 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_md" ); - ent.v[ "origin" ] = ( -1096,73, -299,022, 338,408 ); - ent.v[ "angles" ] = ( 1,18061, 121,63, -3,3697 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_md" ); - ent.v[ "origin" ] = ( -1408,71, -314,012, 319,907 ); - ent.v[ "angles" ] = ( 2,23243, 62,896, 23,7886 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_md" ); - ent.v[ "origin" ] = ( -1343,26, -636,583, 314,666 ); - ent.v[ "angles" ] = ( 358,677, 92,1731, -4,06551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( 644,996, -229,812, 123,402 ); - ent.v[ "angles" ] = ( 356,623, 136,626, -2,09549 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_swirl_sm_runner" ); - ent.v[ "origin" ] = ( 1778,22, 636,784, 208 ); - ent.v[ "angles" ] = ( 270, 356,634, 141,366 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_md" ); - ent.v[ "origin" ] = ( 1913,52, 1674,94, 434,511 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 192 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( 528,24, 2717,08, 319 ); - ent.v[ "angles" ] = ( 347,783, 180,45, -4,70543 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_md" ); - ent.v[ "origin" ] = ( 168,472, 1352,82, 543,125 ); - ent.v[ "angles" ] = ( 1,83386, 152,89, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_wide_distant" ); - ent.v[ "origin" ] = ( 607,987, 1533,49, 539,125 ); - ent.v[ "angles" ] = ( 357,855, 90,9659, -1,72969 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_md" ); - ent.v[ "origin" ] = ( 330,375, 1488,81, 539,125 ); - ent.v[ "angles" ] = ( 1,83386, 152,89, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_md" ); - ent.v[ "origin" ] = ( 1541,01, 958,029, 273,631 ); - ent.v[ "angles" ] = ( 0,509164, 123,987, -0,103306 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( 2365,2, 588,265, 208,897 ); - ent.v[ "angles" ] = ( 2,37443, 133,039, 2,12878 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( 1901,24, 930,968, 197,422 ); - ent.v[ "angles" ] = ( 2,55089, 128,038, 0,913741 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1207,88, 1251,03, 357,449 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1082,67, 774,131, 354,138 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -501,058, 1260,23, 224,565 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_md" ); - ent.v[ "origin" ] = ( -1040,08, 95,0819, 182,463 ); - ent.v[ "angles" ] = ( 0,403872, 103,933, 0,841211 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_md" ); - ent.v[ "origin" ] = ( -842,099, 14,7438, 312,837 ); - ent.v[ "angles" ] = ( 0,251666, 113,932, 1,89856 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( 856,004, 189,103, -158,307 ); - ent.v[ "angles" ] = ( 358,297, 186,626, -2,00872 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( 497,619, 148,666, -217,398 ); - ent.v[ "angles" ] = ( 357,9, 205,58, -0,908693 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_swirl_sm_runner" ); - ent.v[ "origin" ] = ( 1084,12, 582,391, 40,3607 ); - ent.v[ "angles" ] = ( 271,691, 32,1267, 113,903 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_swirl_sm_runner" ); - ent.v[ "origin" ] = ( 1189,24, 442,334, 39,624 ); - ent.v[ "angles" ] = ( 271,691, 32,1267, 113,903 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_md" ); - ent.v[ "origin" ] = ( -1491,64, -423,987, 345,897 ); - ent.v[ "angles" ] = ( 0, 83, 10 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( -533,823, -1831,14, 204 ); - ent.v[ "angles" ] = ( 0, 81, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -478,125, -943,409, 354,478 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 438,499, -1414,15, 335,006 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 380,657, -1712,88, 313,985 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_sml" ); - ent.v[ "origin" ] = ( 919,828, -1233,76, 128,252 ); - ent.v[ "angles" ] = ( 2, 98, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_sml" ); - ent.v[ "origin" ] = ( 1073,67, -1135,86, 121,826 ); - ent.v[ "angles" ] = ( 2, 98, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_sml" ); - ent.v[ "origin" ] = ( 818,841, -1281,75, 130,119 ); - ent.v[ "angles" ] = ( 2, 98, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 231,681, -892,675, 123,747 ); - ent.v[ "angles" ] = ( 2,03768, 45,1736, 0,905698 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 379,228, -114,312, 124,517 ); - ent.v[ "angles" ] = ( 6,63058, 143,138, 6,94948 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 489,236, -6,16093, 104,378 ); - ent.v[ "angles" ] = ( 18,778, 117,737, 5,77029 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -104,444, -679,758, 285,325 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 64,423, -290,784, 276,711 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 271 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_debris_papers_narrow" ); - ent.v[ "origin" ] = ( 802,242, 32,3345, 30,7429 ); - ent.v[ "angles" ] = ( 0,23689, 84,1525, 1,3566 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 832,125, 1263,28, 336,682 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_seagulls_circle_swarm" ); - ent.v[ "origin" ] = ( 2622,06, -4378,09, -799,945 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 196 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_seagulls_circle_below" ); - ent.v[ "origin" ] = ( 4206,07, -698,541, -258,309 ); - ent.v[ "angles" ] = ( 2, 180, 177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_seagulls_circle_below" ); - ent.v[ "origin" ] = ( 2320,77, -2465,39, -277,373 ); - ent.v[ "angles" ] = ( 2, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_long" ); - ent.v[ "origin" ] = ( 193,48, -1603,02, 262,443 ); - ent.v[ "angles" ] = ( 0, 273, -11 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 315,457, -1454,86, 255,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 297 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 310,031, -1502,66, 254,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 246 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_drip_light_shrt" ); - ent.v[ "origin" ] = ( 53,6141, -1603,33, 319,961 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 327 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_fuel_sm" ); - ent.v[ "origin" ] = ( -654,418, -2476,15, 218,599 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 144 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); - ent.v[ "origin" ] = ( -516,391, -1716,12, 204 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 81 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); - ent.v[ "origin" ] = ( -346,704, -1173,06, 167,742 ); - ent.v[ "angles" ] = ( 3, 42, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); - ent.v[ "origin" ] = ( 387,38, -476,34, 115 ); - ent.v[ "angles" ] = ( 2,71912, 67,0301, 1,26899 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); - ent.v[ "origin" ] = ( 660,712, -129,057, 57,873 ); - ent.v[ "angles" ] = ( 3,85335, 60,0393, 0,928899 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); - ent.v[ "origin" ] = ( 672,427, 682,916, 57,109 ); - ent.v[ "angles" ] = ( 354,468, 158,143, -0,44383 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); - ent.v[ "origin" ] = ( 2294,65, 640,427, 209,085 ); - ent.v[ "angles" ] = ( 359,435, 152,108, -0,174735 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); - ent.v[ "origin" ] = ( 2162,65, 525,436, 208,13 ); - ent.v[ "angles" ] = ( 359,646, 188,109, 0,52679 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); - ent.v[ "origin" ] = ( 2010,26, 893,875, 204 ); - ent.v[ "angles" ] = ( 0,228463, 133,111, 0,592133 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); - ent.v[ "origin" ] = ( 1711,88, 1183,94, 204 ); - ent.v[ "angles" ] = ( 0,19716, 136,111, 0,603278 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); - ent.v[ "origin" ] = ( 1410,3, 1480,1, 211,59 ); - ent.v[ "angles" ] = ( 349,894, 131,905, -0,588894 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); - ent.v[ "origin" ] = ( 1114,49, 1697,94, 281,048 ); - ent.v[ "angles" ] = ( 359,927, 175,498, -0,382703 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); - ent.v[ "origin" ] = ( 643,875, 1736,29, 279 ); - ent.v[ "angles" ] = ( 0, 186,498, -0,389533 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); - ent.v[ "origin" ] = ( 285,347, 1706,97, 273,918 ); - ent.v[ "angles" ] = ( 0,202075, 217,498, -0,333024 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); - ent.v[ "origin" ] = ( 360,172, 834,124, 101,096 ); - ent.v[ "angles" ] = ( 357,544, 164,117, 1,9823 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); - ent.v[ "origin" ] = ( -1054,08, -987,404, 198,574 ); - ent.v[ "angles" ] = ( 358,511, 93,0131, 4,28793 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); - ent.v[ "origin" ] = ( -1274,63, -596,182, 205,534 ); - ent.v[ "angles" ] = ( 1,50271, 93,2374, 4,28795 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); - ent.v[ "origin" ] = ( -1304,1, -541,903, 233,78 ); - ent.v[ "angles" ] = ( 354,522, 92,7128, 4,30619 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -740,805, 1164,36, 357,972 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -739,695, 1177,4, 369,241 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -740,633, 1214,96, 385,644 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -739,833, 1208,95, 362,392 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -739,833, 1207,94, 354,186 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -739,833, 1203,48, 405,82 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -741,214, 1190,81, 385,091 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -739,833, 1197,64, 391,757 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -739,543, 1183,13, 401,289 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -739,833, 1205,23, 426,036 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -738,181, 1214,46, 414,48 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -739,833, 1178,11, 392,785 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -739,833, 1172,79, 417,426 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -750,503, 1193,89, 438,609 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -742,294, 1070,12, 372,871 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -741,183, 1083,16, 366,14 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -742,122, 1120,72, 391,543 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -741,322, 1114,7, 372,291 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -741,322, 1113,69, 360,085 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -741,322, 1109,23, 411,719 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -742,703, 1096,56, 382,99 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -741,322, 1103,39, 397,656 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -741,032, 1088,88, 407,188 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -741,322, 1110,98, 437,935 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -739,67, 1120,22, 420,378 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -741,322, 1083,86, 398,684 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -741,322, 1078,54, 423,325 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_warm_sm" ); - ent.v[ "origin" ] = ( -751,992, 1099,65, 444,508 ); - ent.v[ "angles" ] = ( 33,9941, 61,2062, 0,674439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_cigarette_room_amb" ); - ent.v[ "origin" ] = ( -435,24, 1055,74, 330,914 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( 568,632, 1978,33, 288 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 273 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( 1110,4, 1672,47, 288 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 168 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( 1776,48, 1028,71, 213 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 126 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( 915,645, 515,697, 57,6754 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( 439,258, 795,985, 99,6238 ); - ent.v[ "angles" ] = ( 8, 338, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( 14,7404, 500,338, 125,978 ); - ent.v[ "angles" ] = ( 358,071, 81,8688, -0,234714 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( -251,773, 138,033, 73,4858 ); - ent.v[ "angles" ] = ( 359,369, 3,85458, -0,16143 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( -813,864, -533,271, 168,258 ); - ent.v[ "angles" ] = ( 5,31381, 18,8909, -0,226672 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( -407,932, -1419,24, 227,317 ); - ent.v[ "angles" ] = ( 2,03436, 58,0035, 0,34443 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( -456,855, -1535,95, 213 ); - ent.v[ "angles" ] = ( 2,94029, 140,104, 2,06521 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( -28,2685, -924,07, 140,076 ); - ent.v[ "angles" ] = ( 1,42287, 1,9788, -2,49435 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( 1301,64, -1044,03, 111,326 ); - ent.v[ "angles" ] = ( 2,74164, 44,9893, -0,853829 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( 1271,54, -788,359, 112,948 ); - ent.v[ "angles" ] = ( 2,54176, 90,0386, -0,663714 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( 853,086, -1357,3, 113,713 ); - ent.v[ "angles" ] = ( 359,88, 12,056, -1,62417 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( 1884,41, 854,873, 213 ); - ent.v[ "angles" ] = ( 358,436, 270,048, -0,544642 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( 2144,21, 572,547, 213 ); - ent.v[ "angles" ] = ( 358,867, 204,029, 0,207109 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm" ); - ent.v[ "origin" ] = ( 1895,1, 884,776, 204 ); - ent.v[ "angles" ] = ( 358,867, 204,029, -0,792892 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm" ); - ent.v[ "origin" ] = ( 2117,48, 552,453, 204 ); - ent.v[ "angles" ] = ( 358,867, 204,029, -0,792892 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm" ); - ent.v[ "origin" ] = ( 1007,92, 1723,79, 285 ); - ent.v[ "angles" ] = ( 358,867, 204,029, -0,792892 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm" ); - ent.v[ "origin" ] = ( 623,778, 1715,64, 279 ); - ent.v[ "angles" ] = ( 358,867, 204,029, -0,792892 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm" ); - ent.v[ "origin" ] = ( 833,656, 2043,51, 325,125 ); - ent.v[ "angles" ] = ( 358,867, 204,029, -0,792892 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm" ); - ent.v[ "origin" ] = ( 956,695, 2138,91, 328,125 ); - ent.v[ "angles" ] = ( 358,867, 204,029, -0,792892 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm" ); - ent.v[ "origin" ] = ( 487,208, 2163,69, 291,647 ); - ent.v[ "angles" ] = ( 358,867, 204,029, -0,792892 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm" ); - ent.v[ "origin" ] = ( 642,222, 2087,73, 299 ); - ent.v[ "angles" ] = ( 358,867, 204,029, -0,792892 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm" ); - ent.v[ "origin" ] = ( 1085,06, 1360,13, 225,013 ); - ent.v[ "angles" ] = ( 358,867, 204,029, -0,792892 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm" ); - ent.v[ "origin" ] = ( 1020,14, 1254,59, 289,25 ); - ent.v[ "angles" ] = ( 358,867, 204,029, -0,792892 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_roaches_short" ); - ent.v[ "origin" ] = ( 857,167, 1312,18, 283,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 339 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_roaches_short" ); - ent.v[ "origin" ] = ( 1110,35, 1269,43, 283,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 185 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_roaches_short" ); - ent.v[ "origin" ] = ( 1107,11, 1264,1, 418,875 ); - ent.v[ "angles" ] = ( 0, 168, -91 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_roaches_short" ); - ent.v[ "origin" ] = ( 928,332, 1151,45, 418,875 ); - ent.v[ "angles" ] = ( 0,587759, 44,9158, -92,7655 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm" ); - ent.v[ "origin" ] = ( 930,59, 1285,83, 283,25 ); - ent.v[ "angles" ] = ( 358,867, 204,029, -0,792892 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_static_prnt" ); - ent.v[ "origin" ] = ( -1134,84, -893,278, 230,488 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 299 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_static_prnt" ); - ent.v[ "origin" ] = ( 1494,94, -967,977, 133,481 ); - ent.v[ "angles" ] = ( 313,693, 176,165, -6,43306 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); - ent.v[ "origin" ] = ( 1503,98, -1073,77, 111,084 ); - ent.v[ "angles" ] = ( 354, 181, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_flutter" ); - ent.v[ "origin" ] = ( 1188,36, -853,235, 104,965 ); - ent.v[ "angles" ] = ( 349,399, 353,438, 7,41377 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_static_prnt" ); - ent.v[ "origin" ] = ( 1410,33, -365,597, 130,493 ); - ent.v[ "angles" ] = ( 327,984, 226,948, -38,9286 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_purple" ); - ent.v[ "origin" ] = ( 1591,55, 294,975, 260,561 ); - ent.v[ "angles" ] = ( 8,96774, 48,9338, -0,633866 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_pink" ); - ent.v[ "origin" ] = ( 1572,61, 303,454, 271,805 ); - ent.v[ "angles" ] = ( 5,96792, 48,967, -0,629531 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_purple" ); - ent.v[ "origin" ] = ( 1578,28, 298,739, 303,798 ); - ent.v[ "angles" ] = ( 353,969, 49,0986, -0,629603 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_pink" ); - ent.v[ "origin" ] = ( 1591,27, 300,873, 289,89 ); - ent.v[ "angles" ] = ( 353,936, 43,065, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_purple" ); - ent.v[ "origin" ] = ( 1591,02, 296,169, 298,529 ); - ent.v[ "angles" ] = ( 357,027, 53,0651, -1,04599 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_purple" ); - ent.v[ "origin" ] = ( 1583,38, 296,169, 285,967 ); - ent.v[ "angles" ] = ( 0, 53,0103, -1,04458 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_purple" ); - ent.v[ "origin" ] = ( 1600,84, 296,169, 281,766 ); - ent.v[ "angles" ] = ( 2,026, 52,9738, -1,04524 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_blue" ); - ent.v[ "origin" ] = ( 1579,03, 296,023, 278,541 ); - ent.v[ "angles" ] = ( 5,0255, 52,9189, -1,04861 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_blue" ); - ent.v[ "origin" ] = ( 1598,67, 296,023, 284,048 ); - ent.v[ "angles" ] = ( 5,90469, 46,8837, -1,2573 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_blue" ); - ent.v[ "origin" ] = ( 1587,55, 296,023, 314,258 ); - ent.v[ "angles" ] = ( 349,028, 53,2133, -1,06403 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_blue" ); - ent.v[ "origin" ] = ( 1570,19, 291,793, 262,931 ); - ent.v[ "angles" ] = ( 11,0245, 52,8072, -1,06422 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 964,812, 1184,6, 337,278 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 900,721, 1178,92, 322,852 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 1106,38, 1290,85, 330,415 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 1116,07, 1218,73, 330,927 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 1563,72, 571,713, 261,162 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 1525,18, 343,339, 257,63 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 1490,34, 338,676, 252,827 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 1652,67, 394,473, 256,724 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 1066,8, 1444,87, 342,913 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm" ); - ent.v[ "origin" ] = ( 1007,2, 1528,61, 292,716 ); - ent.v[ "angles" ] = ( 358,867, 204,029, -0,792892 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_seagulls_circle_below" ); - ent.v[ "origin" ] = ( 5151,47, 110,746, 287,963 ); - ent.v[ "angles" ] = ( 2, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_seagulls_circle_below" ); - ent.v[ "origin" ] = ( 700,43, -3082,15, -384,497 ); - ent.v[ "angles" ] = ( 2, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( 141,362, 1638,12, 273,058 ); - ent.v[ "angles" ] = ( 7,81536, 242,167, -1,50751 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( -87,8483, 259,648, 99,037 ); - ent.v[ "angles" ] = ( 8, 224, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( -851,192, -1199,62, 208,51 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 318 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_md" ); - ent.v[ "origin" ] = ( 1363,1, -654,17, 175,159 ); - ent.v[ "angles" ] = ( 356,262, 129,95, 1,16999 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_md" ); - ent.v[ "origin" ] = ( 1427,19, -666,059, 239,234 ); - ent.v[ "angles" ] = ( 356,262, 129,95, 1,16999 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_md" ); - ent.v[ "origin" ] = ( 1503,68, -1015,03, 197,776 ); - ent.v[ "angles" ] = ( 357,204, 132,973, 1,0238 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_md" ); - ent.v[ "origin" ] = ( 1240,3, -303,689, 104 ); - ent.v[ "angles" ] = ( 357,398, 98,9209, -2,071 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_sml" ); - ent.v[ "origin" ] = ( 1758,24, 342,945, 255,308 ); - ent.v[ "angles" ] = ( 359,965, 62,0042, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( -18,6295, 1248,16, 181,784 ); - ent.v[ "angles" ] = ( 15,986, 268,284, -2,61464 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( 206,858, 843,558, 124,375 ); - ent.v[ "angles" ] = ( 2, 332, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( 304,593, 884,716, 122,632 ); - ent.v[ "angles" ] = ( 5, 332, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( 805,009, 516,556, 50,4845 ); - ent.v[ "angles" ] = ( 1,43876, 287,983, -1,38981 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm" ); - ent.v[ "origin" ] = ( 1011,04, 1548,22, 283 ); - ent.v[ "angles" ] = ( 358,867, 204,029, -0,792892 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm" ); - ent.v[ "origin" ] = ( 978,594, 1845,3, 322,884 ); - ent.v[ "angles" ] = ( 358,867, 204,029, -0,792892 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_butterfly_static_prnt" ); - ent.v[ "origin" ] = ( 88,6087, -1868,49, 203,885 ); - ent.v[ "angles" ] = ( 6,03354, 271,314, -35,1252 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1879,49, -244,125, 295,202 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1800,97, -682,559, 297,873 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 93 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( 1793,72, -835,498, 110 ); - ent.v[ "angles" ] = ( 359,354, 161,886, -0,882607 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_md" ); - ent.v[ "origin" ] = ( 1482,63, 1069,3, 204,398 ); - ent.v[ "angles" ] = ( 1,86574, 124,938, -0,888848 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_md" ); - ent.v[ "origin" ] = ( 1337,51, 1570,16, 235,242 ); - ent.v[ "angles" ] = ( 351,789, 147,64, -0,173719 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( -1230,93, -52,771, 74,876 ); - ent.v[ "angles" ] = ( 41,9836, 129,151, 9,69062 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( -1101,04, 301,61, 81,6412 ); - ent.v[ "angles" ] = ( 354,438, 121,931, 7,22208 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -479,455, 1156,87, 212,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm" ); - ent.v[ "origin" ] = ( -474,464, 1105,36, 185,125 ); - ent.v[ "angles" ] = ( 358,867, 204,029, -0,792892 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( -403,648, 116,011, 84,7432 ); - ent.v[ "angles" ] = ( 356,466, 197,97, -0,30639 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( -301,636, -1427,11, 204,4 ); - ent.v[ "angles" ] = ( 6, 116, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( -77,2682, -969,96, 152,072 ); - ent.v[ "angles" ] = ( 1,67574, 7,97567, -1,33206 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( -241,353, -875,267, 172,512 ); - ent.v[ "angles" ] = ( 1,13469, 129,036, -2,36212 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm" ); - ent.v[ "origin" ] = ( 1085,16, 495,734, 56,8909 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm" ); - ent.v[ "origin" ] = ( 1004,92, 922,4, 296,125 ); - ent.v[ "angles" ] = ( 358,867, 204,029, -0,792892 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 369,113, 2121,6, 323,372 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 627,41, 1614,24, 334,312 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 744,232, 1616,26, 336,336 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm" ); - ent.v[ "origin" ] = ( 721,963, -126,523, 64,4678 ); - ent.v[ "angles" ] = ( 358,867, 204,029, -0,792892 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm" ); - ent.v[ "origin" ] = ( 1832,51, -442,99, 240,125 ); - ent.v[ "angles" ] = ( 358,867, 204,029, -0,792892 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm" ); - ent.v[ "origin" ] = ( 324,501, -1412,22, 264,125 ); - ent.v[ "angles" ] = ( 358,867, 204,029, -0,792892 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_faucet_on" ); - ent.v[ "origin" ] = ( 1935,99, 695,071, 242,023 ); - ent.v[ "angles" ] = ( 83, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_faucet_splash" ); - ent.v[ "origin" ] = ( 1929,33, 696,249, 204,239 ); - ent.v[ "angles" ] = ( 273, 1, 89 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( -776,643, 379,363, 125,799 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 64 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( -714,771, 514,557, 115 ); - ent.v[ "angles" ] = ( 354, 74, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( -6,46447, 364,925, 164,844 ); - ent.v[ "angles" ] = ( 358,071, 81,8687, -1,23472 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( -680,417, -523,191, 143,789 ); - ent.v[ "angles" ] = ( 0,369069, 3,88662, 1,838 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_seagulls_circle_below" ); - ent.v[ "origin" ] = ( 4672,62, -198,619, 1247,15 ); - ent.v[ "angles" ] = ( 2, 180, 177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_seagulls_circle_below" ); - ent.v[ "origin" ] = ( 1922,04, -3536,46, 1170,22 ); - ent.v[ "angles" ] = ( 1,15591, 165,017, 176,585 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_seagulls_circle_below" ); - ent.v[ "origin" ] = ( -1102,22, -4538,26, 1047,8 ); - ent.v[ "angles" ] = ( 2, 180, 177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_seagulls_circle_below" ); - ent.v[ "origin" ] = ( -4172,67, -1879,29, 1088,26 ); - ent.v[ "angles" ] = ( 2, 180, 177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "origin" ] = ( 533,246, 305,745, 161,23 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 71 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( -878,101, -235,076, 329,121 ); - ent.v[ "angles" ] = ( 0, 115, -4 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "origin" ] = ( 545,875, 286,287, 163,76 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 254 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_blue_ribbon" ); - ent.v[ "origin" ] = ( 74,5502, -445,167, 208,5 ); - ent.v[ "angles" ] = ( 305,86, 17,0497, -96,3044 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_blue_ribbon" ); - ent.v[ "origin" ] = ( 69,7567, -492,776, 205,5 ); - ent.v[ "angles" ] = ( 300,341, 345,752, -85,0169 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_blue_ribbon" ); - ent.v[ "origin" ] = ( -31,3304, -549,847, 208,5 ); - ent.v[ "angles" ] = ( 299,559, 230,559, 94,0593 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_blue_ribbon" ); - ent.v[ "origin" ] = ( 6,02181, -540,682, 208,5 ); - ent.v[ "angles" ] = ( 299,083, 255,419, 100,622 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_seagulls_circle_below" ); - ent.v[ "origin" ] = ( -2879,38, 1547,04, 1079,23 ); - ent.v[ "angles" ] = ( 2, 180, 177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 732, 2127,86, 349,619 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 865,589, 2205,97, 366,338 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 1032,85, 2029, 372,667 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_fly_swarm_lng" ); - ent.v[ "origin" ] = ( 1329,42, -1118,49, 105,281 ); - ent.v[ "angles" ] = ( 359,572, 204,044, 2,5911 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( 1100,3, -1329,92, -293,425 ); - ent.v[ "angles" ] = ( 0,788114, 133, -0,615798 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_stain_glss_pink" ); - ent.v[ "origin" ] = ( 1594,57, 304,802, 306,428 ); - ent.v[ "angles" ] = ( 347,969, 49,1658, -0,640177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -226,441, 614,918, 173,918 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 271 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 666,446, 390,311, 209,082 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 173,692, 553,872, 210,921 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 2 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1559,99, 607,556, 290,68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 267 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -432,632, 887,769, 388,807 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -659,863, 1264,31, 328,627 ); - ent.v[ "angles" ] = ( 14,9977, 269,965, -0,267933 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( -1117,73, 15,1349, -317,279 ); - ent.v[ "angles" ] = ( 1,48609, 133,63, 1,71703 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "origin" ] = ( 2156,08, 890,474, 239,741 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 143 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "origin" ] = ( 2012,1, 924,563, 228,909 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 171 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "origin" ] = ( 440,904, -472,458, 139,958 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 122 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "origin" ] = ( 470,403, -610,971, 162,06 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 124 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_fireplace_md" ); - ent.v[ "origin" ] = ( 1987,12, -258,44, 252,658 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_wide_distant_thin" ); - ent.v[ "origin" ] = ( 119,687, 380,612, 134,812 ); - ent.v[ "angles" ] = ( 358,764, 173,999, -1,86329 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_wide_distant_thin" ); - ent.v[ "origin" ] = ( -43,8084, 8,52594, 101,195 ); - ent.v[ "angles" ] = ( 357,629, 138,987, -3,03409 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( -156,146, -1069,57, 168,804 ); - ent.v[ "angles" ] = ( 6, 116, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sand_kickup_thin" ); - ent.v[ "origin" ] = ( 237,141, -922,686, 153,971 ); - ent.v[ "angles" ] = ( 359,108, 74,025, 1,49298 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_socotra_flicker_light" ); - ent.v[ "origin" ] = ( -695,177, -787,753, 338,235 ); - ent.v[ "angles" ] = ( 359,895, 267,003, -2,99818 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "origin" ] = ( -690,172, -790,339, 362,369 ); - ent.v[ "angles" ] = ( 81, 74, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sparks_bounce_socotra" ); - ent.v[ "origin" ] = ( -709,882, -748,195, 358,126 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( -233,708, 323,416, 227,125 ); - ent.v[ "angles" ] = ( 8,91874, 271,853, 17,1653 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -229,885, 350,939, 169,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 93 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( -594,031, 884,4, 235,125 ); - ent.v[ "angles" ] = ( 6,30834, 161,512, -78,7069 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( -652,328, 889,87, 229,125 ); - ent.v[ "angles" ] = ( 2,53584, 327,814, 80,936 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( 70,7891, 1431,43, 363,554 ); - ent.v[ "angles" ] = ( 35,9848, 216,144, -21,2539 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( -21,0226, 1447,7, 369,293 ); - ent.v[ "angles" ] = ( 39,6913, 267,27, 11,4673 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 55,9814, 1464,14, 300,951 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 93 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( -593,003, -2204,35, 329 ); - ent.v[ "angles" ] = ( 41, 267, 14 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( -495,957, -2195,21, 331 ); - ent.v[ "angles" ] = ( 41, 267, 14 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_wide_distant_thin" ); - ent.v[ "origin" ] = ( 1926,97, 563,822, 205 ); - ent.v[ "angles" ] = ( 358,764, 173,999, -1,86329 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_wide_distant_thin" ); - ent.v[ "origin" ] = ( 859,618, 533,827, 32,8482 ); - ent.v[ "angles" ] = ( 357,794, 126,986, -0,366646 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge" ); - ent.v[ "origin" ] = ( 1061,13, -1228,45, 91,7016 ); - ent.v[ "angles" ] = ( 356,865, 127,791, -3,65074 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_wide_distant_thin" ); - ent.v[ "origin" ] = ( 62,6718, 216,636, 118,859 ); - ent.v[ "angles" ] = ( 358,495, 153,971, -3,54378 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_wide_distant_thin" ); - ent.v[ "origin" ] = ( 680,441, 78,4259, 24,6143 ); - ent.v[ "angles" ] = ( 356,362, 124,047, -0,505892 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_sun_flare_socotra" ); - ent.v[ "origin" ] = ( -6746,94, -19551,1, 9526,35 ); - ent.v[ "angles" ] = ( 314,686, 143,193, -125,925 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( -1630,71, 339,54, -80 ); - ent.v[ "angles" ] = ( 356,894, 44,49, -2,05213 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_md" ); - ent.v[ "origin" ] = ( 38,5778, 593,921, 119,296 ); - ent.v[ "angles" ] = ( 356,042, 88,5716, -1,64698 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_sml" ); - ent.v[ "origin" ] = ( 986,849, -130,034, 77,4107 ); - ent.v[ "angles" ] = ( 357,364, 177,077, 0,459794 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_md" ); - ent.v[ "origin" ] = ( 1394,73, 969,905, 194,986 ); - ent.v[ "angles" ] = ( 359,131, 250,057, -0,896664 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_md" ); - ent.v[ "origin" ] = ( 2023,85, 1220,5, 288,725 ); - ent.v[ "angles" ] = ( 358,942, 172,044, 0,663439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_ledge_md" ); - ent.v[ "origin" ] = ( 2226,05, 1050,06, 350,851 ); - ent.v[ "angles" ] = ( 358,942, 172,044, 0,663439 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; -} diff --git a/Multiplayer Maps/mp_socotra/maps/mp/mp_socotra.gsc b/Multiplayer Maps/mp_socotra/maps/mp/mp_socotra.gsc deleted file mode 100644 index d8914bb..0000000 --- a/Multiplayer Maps/mp_socotra/maps/mp/mp_socotra.gsc +++ /dev/null @@ -1,40 +0,0 @@ -#include maps/mp/gametypes/_spawning; -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_socotra_fx::main(); - maps/mp/_load::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_socotra" ); - maps/mp/mp_socotra_amb::main(); - setheliheightpatchenabled( "war_mode_heli_height_lock", 0 ); - maps/mp/gametypes/_spawning::level_use_unified_spawning( 1 ); - rts_remove(); - level.remotemotarviewleft = 30; - level.remotemotarviewright = 30; - level.remotemotarviewup = 18; -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2000", reset_dvars ); -} - -rts_remove() -{ - rtsfloors = getentarray( "overwatch_floor", "targetname" ); - _a38 = rtsfloors; - _k38 = getFirstArrayKey( _a38 ); - while ( isDefined( _k38 ) ) - { - rtsfloor = _a38[ _k38 ]; - if ( isDefined( rtsfloor ) ) - { - rtsfloor delete(); - } - _k38 = getNextArrayKey( _a38, _k38 ); - } -} diff --git a/Multiplayer Maps/mp_socotra/maps/mp/mp_socotra_amb.gsc b/Multiplayer Maps/mp_socotra/maps/mp/mp_socotra_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_socotra/maps/mp/mp_socotra_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_socotra/maps/mp/mp_socotra_fx.gsc b/Multiplayer Maps/mp_socotra/maps/mp/mp_socotra_fx.gsc deleted file mode 100644 index ea173d8..0000000 --- a/Multiplayer Maps/mp_socotra/maps/mp/mp_socotra_fx.gsc +++ /dev/null @@ -1,84 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); - -precache_util_fx() -{ -} - -precache_scripted_fx() -{ -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "rope_toggle" ] = %fxanim_gp_rope_toggle_anim; - level.scr_anim[ "fxanim_props" ][ "ropes_hang" ] = %fxanim_gp_ropes_hang_01_anim; - level.scr_anim[ "fxanim_props" ][ "rope_arch" ] = %fxanim_mp_socotra_rope_arch_anim; - level.scr_anim[ "fxanim_props" ][ "wire_coil" ] = %fxanim_gp_wire_coil_01_anim; - level.scr_anim[ "fxanim_props" ][ "wirespark_long" ] = %fxanim_gp_wirespark_long_anim; - level.scr_anim[ "fxanim_props" ][ "wirespark_med" ] = %fxanim_gp_wirespark_med_anim; - level.scr_anim[ "fxanim_props" ][ "yemen_pent_long" ] = %fxanim_gp_flag_yemen_pent_long_anim; - level.scr_anim[ "fxanim_props" ][ "roaches" ] = %fxanim_gp_roaches_anim; - level.scr_anim[ "fxanim_props" ][ "cloth_sheet_med" ] = %fxanim_gp_cloth_sheet_med_anim; - level.scr_anim[ "fxanim_props" ][ "rope_coil" ] = %fxanim_gp_rope_coil_anim; -} - -precache_createfx_fx() -{ - level._effect[ "fx_mp_light_dust_motes_md" ] = loadfx( "maps/mp_maps/fx_mp_sand_dust_motes" ); - level._effect[ "fx_light_gray_stain_glss_pink" ] = loadfx( "light/fx_light_gray_stain_glss_pink" ); - level._effect[ "fx_light_gray_stain_glss_blue" ] = loadfx( "light/fx_light_gray_stain_glss_blue" ); - level._effect[ "fx_light_gray_stain_glss_purple" ] = loadfx( "light/fx_light_gray_stain_glss_purple" ); - level._effect[ "fx_light_gray_stain_glss_warm_sm" ] = loadfx( "light/fx_light_gray_stain_glss_warm_sm" ); - level._effect[ "fx_mp_sun_flare_socotra" ] = loadfx( "maps/mp_maps/fx_mp_sun_flare_socotra" ); - level._effect[ "fx_light_gray_blue_ribbon" ] = loadfx( "light/fx_light_gray_blue_ribbon" ); - level._effect[ "fx_insects_butterfly_flutter" ] = loadfx( "bio/insects/fx_insects_butterfly_flutter" ); - level._effect[ "fx_insects_butterfly_static_prnt" ] = loadfx( "bio/insects/fx_insects_butterfly_static_prnt" ); - level._effect[ "fx_insects_roaches_short" ] = loadfx( "bio/insects/fx_insects_roaches_short" ); - level._effect[ "fx_insects_fly_swarm_lng" ] = loadfx( "bio/insects/fx_insects_fly_swarm_lng" ); - level._effect[ "fx_insects_fly_swarm" ] = loadfx( "bio/insects/fx_insects_fly_swarm" ); - level._effect[ "fx_insects_swarm_md_light" ] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); - level._effect[ "fx_seagulls_circle_below" ] = loadfx( "bio/animals/fx_seagulls_circle_below" ); - level._effect[ "fx_seagulls_circle_swarm" ] = loadfx( "bio/animals/fx_seagulls_circle_swarm" ); - level._effect[ "fx_leaves_falling_lite_sm" ] = loadfx( "foliage/fx_leaves_falling_lite_sm" ); - level._effect[ "fx_debris_papers" ] = loadfx( "env/debris/fx_debris_papers" ); - level._effect[ "fx_debris_papers_narrow" ] = loadfx( "env/debris/fx_debris_papers_narrow" ); - level._effect[ "fx_mp_smk_plume_sm_blk" ] = loadfx( "maps/mp_maps/fx_mp_smk_plume_sm_blk" ); - level._effect[ "fx_mp_smk_plume_md_blk" ] = loadfx( "maps/mp_maps/fx_mp_socotra_smk_plume_blck" ); - level._effect[ "fx_smk_cigarette_room_amb" ] = loadfx( "smoke/fx_smk_cigarette_room_amb" ); - level._effect[ "fx_smk_smolder_gray_slow_shrt" ] = loadfx( "smoke/fx_smk_smolder_gray_slow_shrt" ); - level._effect[ "fx_fire_fuel_sm" ] = loadfx( "fire/fx_fire_fuel_sm" ); - level._effect[ "fx_mp_water_drip_light_long" ] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_long" ); - level._effect[ "fx_mp_water_drip_light_shrt" ] = loadfx( "maps/mp_maps/fx_mp_water_drip_light_shrt" ); - level._effect[ "fx_water_faucet_on" ] = loadfx( "water/fx_water_faucet_on" ); - level._effect[ "fx_water_faucet_splash" ] = loadfx( "water/fx_water_faucet_splash" ); - level._effect[ "fx_mp_sand_kickup_md" ] = loadfx( "maps/mp_maps/fx_mp_sand_kickup_md" ); - level._effect[ "fx_mp_sand_kickup_thin" ] = loadfx( "maps/mp_maps/fx_mp_sand_kickup_thin" ); - level._effect[ "fx_mp_sand_windy_heavy_sm_slow" ] = loadfx( "maps/mp_maps/fx_mp_sand_windy_heavy_sm_slow" ); - level._effect[ "fx_sand_ledge" ] = loadfx( "dirt/fx_sand_ledge" ); - level._effect[ "fx_sand_ledge_sml" ] = loadfx( "dirt/fx_sand_ledge_sml" ); - level._effect[ "fx_sand_ledge_md" ] = loadfx( "dirt/fx_sand_ledge_md" ); - level._effect[ "fx_sand_ledge_wide_distant" ] = loadfx( "dirt/fx_sand_ledge_wide_distant" ); - level._effect[ "fx_sand_windy_heavy_md" ] = loadfx( "dirt/fx_sand_windy_heavy_md" ); - level._effect[ "fx_sand_swirl_sm_runner" ] = loadfx( "dirt/fx_sand_swirl_sm_runner" ); - level._effect[ "fx_sand_moving_in_air_md" ] = loadfx( "dirt/fx_sand_moving_in_air_md" ); - level._effect[ "fx_sand_moving_in_air_pcloud" ] = loadfx( "dirt/fx_sand_moving_in_air_pcloud" ); - level._effect[ "fx_mp_elec_spark_burst_xsm_thin" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin" ); - level._effect[ "fx_fire_fireplace_md" ] = loadfx( "fire/fx_fire_fireplace_md" ); - level._effect[ "fx_sand_ledge_wide_distant_thin" ] = loadfx( "dirt/fx_sand_ledge_wide_distant_thin" ); - level._effect[ "fx_mp_socotra_flicker_light" ] = loadfx( "maps/mp_maps/fx_mp_socotra_flicker_light" ); - level._effect[ "fx_sparks_bounce_socotra" ] = loadfx( "electrical/fx_sparks_bounce_socotra" ); - level._effect[ "fx_window_god_ray" ] = loadfx( "light/fx_window_god_ray" ); - level._effect[ "fx_mp_sun_flare_socotra" ] = loadfx( "lens_flares/fx_lf_mp_socotra_sun1" ); -} - -main() -{ - precache_util_fx(); - precache_createfx_fx(); - precache_scripted_fx(); - precache_fxanim_props(); - maps/mp/createfx/mp_socotra_fx::main(); - maps/mp/createart/mp_socotra_art::main(); -} diff --git a/Multiplayer Maps/mp_studio/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_studio/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_studio/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_studio/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_studio/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_studio/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_studio/maps/mp/createfx/mp_studio_fx.gsc b/Multiplayer Maps/mp_studio/maps/mp/createfx/mp_studio_fx.gsc deleted file mode 100644 index 94956a5..0000000 --- a/Multiplayer Maps/mp_studio/maps/mp/createfx/mp_studio_fx.gsc +++ /dev/null @@ -1,1255 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -419,168, 1077,59, 4,7879 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -785,297, 1380,25, -18,085 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 67 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -811,384, 1230,81, -47,236 ); - ent.v[ "angles" ] = ( 345,335, 52,5894, 3,18865 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 428,936, -465,795, -122,995 ); - ent.v[ "angles" ] = ( 355,806, 198,58, 2,40333 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 372,677, -811,2, -124,239 ); - ent.v[ "angles" ] = ( 351,361, 152,691, 1,22483 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 271,098, -547,557, -112,09 ); - ent.v[ "angles" ] = ( 359, 184, 0 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 652,183, -14,9878, -67,2135 ); - ent.v[ "angles" ] = ( 359,018, 195, -0,190854 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1686,03, 1079,32, -60 ); - ent.v[ "angles" ] = ( 353,704, 158,272, -4,94521 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1485,75, 829,45, -65,4603 ); - ent.v[ "angles" ] = ( 346,838, 187,509, -7,50258 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1851,56, 1162,9, 8,29118 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1324,87, 581,65, -73,357 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 143 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1068,34, 344,956, -97,7356 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 143 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 556,429, 71,8617, -81,5154 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 143 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 409,78, -467,84, -94,7611 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 143 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1449,72, 2170,98, -39,9823 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 342 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1488,93, 2291,52, -36,3985 ); - ent.v[ "angles" ] = ( 27, 360, 3 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 458,226, 2671,17, -48 ); - ent.v[ "angles" ] = ( 349,174, 8,08485, 82,4906 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 372,225, 2598,58, -49,5248 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 554,083, 2626,09, -48 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 679,353, 2603,86, -50,5174 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 561,342, 2567,66, -52,8807 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -147,746, 2346,75, -59,5581 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -203,38, 2393,13, -52,0751 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 341,955, 2621,21, -52 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 341 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_debris_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 459,483, 2739,2, 200,836 ); - ent.v[ "angles" ] = ( 30,9528, 293,499, 1,80116 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -512,269, 2436,49, -54,8269 ); - ent.v[ "angles" ] = ( 290,668, 274,677, 89,1924 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -118,479, 2557,07, -50,0739 ); - ent.v[ "angles" ] = ( 290,668, 274,677, 89,1924 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -643,664, 2218,07, -4,0618 ); - ent.v[ "angles" ] = ( 0,464774, 57,3871, -2,10586 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_sci_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 627,826, 2686,87, 273,555 ); - ent.v[ "angles" ] = ( 9,97538, 297,938, -0,704698 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_toy_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -689,13, 19,5314, -125,37 ); - ent.v[ "angles" ] = ( 359, 310, 0 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_toy_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -542,577, -3,85301, -126,906 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_toy_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -775,348, -168,671, -126,875 ); - ent.v[ "angles" ] = ( 12, 360, -13 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_toy_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -697,089, -391,881, -127,556 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_toy_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -609,744, -372,3, -126,518 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 348 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_toy_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -803,265, -199,911, -89,9242 ); - ent.v[ "angles" ] = ( 12, 360, -13 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -793,77, -200,077, -61,6809 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -803,257, -199,41, -85,0372 ); - ent.v[ "angles" ] = ( 8,25951, 338,06, -32,0767 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -802,103, -212,83, -43,3678 ); - ent.v[ "angles" ] = ( 8,25951, 338,06, -32,0767 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1135,05, 621,062, 127,974 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 79 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -790,84, 593,596, 129,578 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1469,48, 680,631, 132,341 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 79 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -692,435, 711,327, 13,3726 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 103 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1167,18, 731,292, 38,3317 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 65 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -684,129, 1148,08, -2,11566 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 72 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_moving_in_air_pcloud" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -578,878, 1630,4, -2,58031 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 77 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -865,916, 840,612, -60 ); - ent.v[ "angles" ] = ( 349, 67, 0 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1361,09, 880,965, -60,2991 ); - ent.v[ "angles" ] = ( 344,062, 41,0805, 4,81067 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -484,115, 698,256, 124,771 ); - ent.v[ "angles" ] = ( 10, 84, 0 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -543,921, -2,38376, -130,689 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 348 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -774,796, -168,235, -122,694 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1255,22, 540,549, -36,5148 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 147 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1273,35, 290,621, -81,4672 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 143 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1106,1, 74,146, -80,7151 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 143 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog_ground" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1041,15, 143,258, -124 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 201 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog_ground" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1244,81, 542,923, -126 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 255 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog_background" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1354,14, 113,741, -12,3206 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog_background" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1490,26, 339,428, -37,9775 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_torch" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 391,908, 1092,57, 276,293 ); - ent.v[ "angles" ] = ( 74,9508, 150,486, -1,34998 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_torch" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 905,572, 1212,03, 243,963 ); - ent.v[ "angles" ] = ( 340, 67, 0 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 848,799, 312,775, 6,8703 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 303 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 937,984, 350,049, 0,800499 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 143 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_sci_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 323,75, 2679,06, 228,147 ); - ent.v[ "angles" ] = ( 1,75725, 234,021, -9,33929 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_ufo_smoke" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 403,479, 2713,06, 193,781 ); - ent.v[ "angles" ] = ( 359,208, 274,358, 3,02421 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_ufo_smoke" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 523,244, 2681,61, 238,884 ); - ent.v[ "angles" ] = ( 359,208, 274,358, 3,02421 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_sci_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -332,342, 2705,27, 156,457 ); - ent.v[ "angles" ] = ( 311,522, 270,988, -11,2056 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_sci_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -237,287, 2689,93, 175,177 ); - ent.v[ "angles" ] = ( 311,522, 270,988, -11,2056 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_sci_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 463,966, 2685,8, 139,64 ); - ent.v[ "angles" ] = ( 300,579, 271,452, -0,337176 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_sci_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 531,638, 2693,88, 144,83 ); - ent.v[ "angles" ] = ( 300,579, 271,452, -0,337176 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_sci_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 585,933, 2691,81, 144,965 ); - ent.v[ "angles" ] = ( 300,579, 271,452, -0,337176 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -257,462, 2780,8, 118,891 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -399,398, 2822,33, 174,014 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_torch" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 551,515, 1109,32, 326,621 ); - ent.v[ "angles" ] = ( 75,8612, 45,7869, -39,9325 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_ground" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -709,94, -215,475, -118,834 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_ground" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -691,003, 78,2237, -121,875 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_ground" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -703,517, -348,103, -119,875 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 535,913, 2763,83, 207,956 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_sci_fire_burst_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 403,059, 2686,61, 219,662 ); - ent.v[ "angles" ] = ( 11, 276, 0 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -851,147, 885,891, -71,1348 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 70 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -314,439, 1470,67, -58,5135 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 55 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -446,494, 1682,59, -58,856 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 101 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1390,44, 783,137, -7,40077 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 34 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -644,927, 803,374, -26,7342 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 65 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1210,28, 744,201, -64,2686 ); - ent.v[ "angles" ] = ( 346,002, 65,9706, 0,196647 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1194,17, 813,831, -62,8241 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 70 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -239,529, 1238,38, -32,1725 ); - ent.v[ "angles" ] = ( 355,134, 75,9827, -1,71667 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 623,534, 1651,12, -17,768 ); - ent.v[ "angles" ] = ( 319,61, 77,8521, -7,74391 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 816,593, 1541,12, 122,125 ); - ent.v[ "angles" ] = ( 290,195, 89,1061, -17,2951 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 894,485, 1213,47, 236,577 ); - ent.v[ "angles" ] = ( 284,571, 96,2015, -24,0754 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 425,234, 1162,01, 334,224 ); - ent.v[ "angles" ] = ( 316,979, 94,2527, 18,0529 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 274,178, 1428,36, -44 ); - ent.v[ "angles" ] = ( 329, 51, 0 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 753,763, 1211,65, -42,875 ); - ent.v[ "angles" ] = ( 301,844, 82,3785, -11,2166 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_area" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 512,833, 1265,8, -42,9028 ); - ent.v[ "angles" ] = ( 301,844, 82,3785, -11,2166 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_water_splash_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 41,9622, -1381,64, -127,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_cannon_splash_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -71,266, -944,427, -127,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog_background" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 514,399, 453,553, 105,629 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_rolling_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 553,339, 382,479, 5,47084 ); - ent.v[ "angles" ] = ( 3,97865, 322,985, -0,418867 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_rolling_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 317,715, 351,608, 10,1889 ); - ent.v[ "angles" ] = ( 353,952, 337,912, 0,628813 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1190,31, 318,399, -37,1449 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1036,54, 157,642, -64,7168 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 186 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog_machine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 836,789, 165,325, -117,056 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 314 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog_machine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 997,473, 262,393, -119,676 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 314 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog_machine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1079,41, 329,947, -122,352 ); - ent.v[ "angles" ] = ( 359, 336, 0 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog_machine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1268,16, 285,853, -122,389 ); - ent.v[ "angles" ] = ( 359, 155,087, 0,994677 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog_machine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1188,08, 171,667, -120,523 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 145 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog_machine" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 635,872, 103,248, -108,448 ); - ent.v[ "angles" ] = ( 1,94438, 294,661, 0,765812 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 502,281, -982,172, -47 ); - ent.v[ "angles" ] = ( 359,642, 253, -0,933881 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -591,101, -1353,82, -79,5931 ); - ent.v[ "angles" ] = ( 344,517, 73,4634, 4,20901 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 379,533, -657,754, -122,304 ); - ent.v[ "angles" ] = ( 346,341, 167,961, -1,08881 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog_ground" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1172,16, 284,384, -126,8 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 236 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_water_splash_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -487,374, -1462,38, -127,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1188,46, 1605,07, 91,125 ); - ent.v[ "angles" ] = ( 46,1181, 260,218, -78,7375 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 967,866, 1010,69, 83,125 ); - ent.v[ "angles" ] = ( 52,0158, 291,037, -103,033 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1313,31, 1602,17, 26,125 ); - ent.v[ "angles" ] = ( 42,7436, 255,04, -81,5432 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -198,722, -74,3946, 43 ); - ent.v[ "angles" ] = ( 56,2214, 261,044, -76,1716 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -336,9, -179,679, 29,125 ); - ent.v[ "angles" ] = ( 53,5724, 274,199, -65,3909 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -170,015, -303,164, 34,125 ); - ent.v[ "angles" ] = ( 56,2214, 261,044, -76,1716 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -221,969, 62,8027, 41,125 ); - ent.v[ "angles" ] = ( 49,5137, 273,032, -66,2701 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -405,711, 949,874, 26 ); - ent.v[ "angles" ] = ( 36,3383, 276,516, -85,7276 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -269,703, 52,5723, -62 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 265 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -71,36, 4,94275, -56,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 265 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2,75577, 1407,62, 156,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 256 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1310, 1544,43, -4,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 183 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1011,07, 914,597, 16,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 99 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 519,241, 1130,37, 272,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 241 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -889,183, 1951,46, -0,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 255 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1032,94, 1248,76, -5,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 75 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -115,039, 968,801, 7,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 85 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -716,27, 586,687, -24,4169 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 274 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_ufo_engine_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 421,831, 2621,14, 254,433 ); - ent.v[ "angles" ] = ( 69,9541, 311,008, 24,8581 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_ufo_engine_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 481,154, 2599, 274,361 ); - ent.v[ "angles" ] = ( 69,2382, 313,006, 46,6788 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_ufo_engine_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 541,076, 2627,28, 281,524 ); - ent.v[ "angles" ] = ( 69,9541, 311,008, 32,8582 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_ufo_engine_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 565,47, 2687,3, 271,318 ); - ent.v[ "angles" ] = ( 69,9541, 311,008, 30,8581 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_ufo_engine_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 397,134, 2678,27, 233,188 ); - ent.v[ "angles" ] = ( 69,9541, 311,008, 9,85815 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_ufo_engine_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 422,385, 2738,37, 223,155 ); - ent.v[ "angles" ] = ( 69,9541, 311,008, 20,8582 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_ufo_engine_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 482,007, 2765,06, 230,044 ); - ent.v[ "angles" ] = ( 69,9541, 311,008, 35,8583 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_ufo_light_flash_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 481,86, 2682,38, 247,188 ); - ent.v[ "angles" ] = ( 69,9541, 311,008, 30,8581 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_ufo_electric_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 527,056, 2639,22, 167,925 ); - ent.v[ "angles" ] = ( 55,2138, 315,354, 24,3534 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_ufo_forcefield" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 464,213, 2703,16, 327,459 ); - ent.v[ "angles" ] = ( 347,358, 3,33799, -15,2356 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_ufo_electric_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 307,651, 2687,88, 326,305 ); - ent.v[ "angles" ] = ( 333,97, 183,123, -60,549 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_ufo_electric_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 639,875, 2686,78, 366,318 ); - ent.v[ "angles" ] = ( 323,299, 13,4548, 70,2931 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_ufo_electric_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 448,215, 2637,88, 167,676 ); - ent.v[ "angles" ] = ( 58,4077, 225,61, -49,9951 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -98,6132, -163,694, 30,125 ); - ent.v[ "angles" ] = ( 56,2214, 261,044, -76,1716 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_electric_fence" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1292,82, 252,067, -0,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 148 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_electric_fence" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1154,68, 65,9045, 12,7311 ); - ent.v[ "angles" ] = ( 1, 126, -1 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_electric_fence" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1318,34, 324,426, 38,9517 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 157 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_spark_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1179,97, 85,1171, 12,8549 ); - ent.v[ "angles" ] = ( 55,9308, 131,044, 141,56 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_spark_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1276,06, 226,214, -0,3836 ); - ent.v[ "angles" ] = ( 55,9308, 131,044, 141,56 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_spark_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1181,21, 96,4925, 27,762 ); - ent.v[ "angles" ] = ( 55,9308, 131,044, 141,56 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_electric_fence" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1376,49, 548,482, 27,915 ); - ent.v[ "angles" ] = ( 2,99634, 168,004, 0,157163 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 67,489, -787,72, -92,4579 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 59,7321, -809,906, -93,4565 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 68,5933, -801,293, -93,4587 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 69,5039, -771,286, -93,4575 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_area_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 855,177, 1140,38, 116,989 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_area_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 813,079, 1073,07, 91,4545 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_area_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 860,166, 1541,18, 183,264 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_area_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 820,13, 1564,09, 133,283 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_sconce_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1158,98, 1598,76, 34,0837 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_sconce_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1101,39, 1752,06, 33,1063 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_sconce_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1037,23, 1928,72, 32,2759 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_sconce_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1262,81, 1308,79, 32,264 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_lamp_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -939,374, 1381,65, 39,7875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_sconce_glare2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -890,686, 1279,31, 33,2206 ); - ent.v[ "angles" ] = ( 270,4, 89,9839, -89,9838 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_sconce_glare2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -838,68, 1422,59, 33,2744 ); - ent.v[ "angles" ] = ( 270,4, 89,9839, -89,9838 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_sconce_glare2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -728,855, 1727,28, 33,294 ); - ent.v[ "angles" ] = ( 270,4, 89,9836, -88,9835 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_sconce_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -836,162, 311,69, -88,8722 ); - ent.v[ "angles" ] = ( 281, 90, -90 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_gold_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 59,8496, -792,982, -94,4596 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_gold_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -785,735, -692,449, -22,1113 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_gold_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -788,543, -833,75, -47,7833 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_single_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -7,20171, 1443,34, 220,099 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_single_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -83,5025, 1090,09, 204,824 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_flood_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 245,593, -253,426, -62,4976 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 114 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow_shrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -600,636, 2272,15, -48,3718 ); - ent.v[ "angles" ] = ( 290,668, 274,677, 89,1924 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2205,64, 1298, 9,21009 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2423,39, 1285,76, 29,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1746,6, 1135,07, -56,6561 ); - ent.v[ "angles" ] = ( 338,744, 93,2091, 6,98505 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1852,81, 1996,8, -3,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_studio_sun1" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 10841,5, 66858,9, 96616,2 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -687,122, 1825,54, 65,0531 ); - ent.v[ "angles" ] = ( 39, 162, 0 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -718,082, 1724,43, 63,6571 ); - ent.v[ "angles" ] = ( 39, 162, 0 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -830,907, 1414,44, 62,561 ); - ent.v[ "angles" ] = ( 39, 162, 0 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -866,961, 1323,08, 62,5687 ); - ent.v[ "angles" ] = ( 39, 162, 0 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -905,444, 1209,66, 64,8412 ); - ent.v[ "angles" ] = ( 39, 162, 0 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -347,563, 827,099, 86,003 ); - ent.v[ "angles" ] = ( 70,9722, 270,973, -49,8717 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -484,324, 853,761, 83,0062 ); - ent.v[ "angles" ] = ( 69,4359, 281,771, -78,0432 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 824,801, 1738,65, 51,0657 ); - ent.v[ "angles" ] = ( 30, 308, 0 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_saloon_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -769,428, 1562,52, 58,875 ); - ent.v[ "angles" ] = ( 43, 158,307, 179,235 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -32,0345, 30,6323, 22,875 ); - ent.v[ "angles" ] = ( 56,2214, 261,044, -76,1716 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -308,841, -6,63428, 19,875 ); - ent.v[ "angles" ] = ( 56,2214, 261,044, -76,1716 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_saloon_glare_sq" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -901,167, 1213,3, 59,9585 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_saloon_glare_sq" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -863,82, 1307,43, 59,7489 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_saloon_glare_sq" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -822,942, 1416,42, 59,0963 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_saloon_glare_sq" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -670,448, 1835,08, 60,3287 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_saloon_glare_sq" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -707,478, 1745,17, 60,0388 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_torch" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 824,841, 1562,82, 131,934 ); - ent.v[ "angles" ] = ( 340, 67, 0 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_torch" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 882,248, 1524,09, 165,618 ); - ent.v[ "angles" ] = ( 340, 67, 0 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_electric_fence" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1471,07, 750,101, 65,4021 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 147 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_electric_fence" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1599,09, 942,99, 80,8204 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 141 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_electric_fence" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1765,22, 1104,75, 65,8096 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 119 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_gold_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -726,994, -761,421, -108,039 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -721,537, -784,228, -108,039 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -719,456, -765,715, -108,038 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -730,445, -745,949, -108,04 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_gold_sparkle_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -718,139, -733,919, -108,038 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 410,79, -554,778, 28,0345 ); - ent.v[ "angles" ] = ( 39, 262, 0 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 405,376, -567,497, 8,19697 ); - ent.v[ "angles" ] = ( 39, 270, 0 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 399,918, -567,545, 10,8062 ); - ent.v[ "angles" ] = ( 39, 270, 0 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1264,27, 185,224, -44,9065 ); - ent.v[ "angles" ] = ( 286,86, 192,632, -134,323 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 992,692, -385,271, 133,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1040,69, -402,387, -2,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 189 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1237,23, 138,681, -60,0913 ); - ent.v[ "angles" ] = ( 300,14, 53,9746, 174,671 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 686,532, 206,38, -98,2946 ); - ent.v[ "angles" ] = ( 274,242, 320,125, -87,8804 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fog_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1238,11, 140,235, -64,0766 ); - ent.v[ "angles" ] = ( 312,037, 226,395, 3,99303 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_saloon_glare_sq" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -731,539, 1665,89, 61,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -179,772, -198,805, 51,875 ); - ent.v[ "angles" ] = ( 56,2214, 261,044, -76,1716 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -107,18, -302,61, 34,875 ); - ent.v[ "angles" ] = ( 56,2214, 261,044, -76,1716 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -250,476, -308,096, 18,875 ); - ent.v[ "angles" ] = ( 56,2214, 261,044, -76,1716 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -306,751, 104,863, 24,1561 ); - ent.v[ "angles" ] = ( 56,2214, 261,044, -76,1716 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_ground" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -684,468, -67,9217, -120,875 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_ground" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -584,193, 30,6769, -123 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_smoke_ground" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -597,6, -433,891, -121,875 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_toy_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -743,634, 75,652, -129,401 ); - ent.v[ "angles" ] = ( 359, 310, 0 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_tube_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1000,36, -186,555, 158,871 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 551,425, 1620,86, 12,202 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 64 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_tube_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -46,4167, 966,638, 82,6585 ); - ent.v[ "angles" ] = ( 89, 0, 15 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_tube_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 22,9989, 1261,39, 83,7595 ); - ent.v[ "angles" ] = ( 89, 0, 15 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_tube_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 71,7504, 1424,09, 83,6555 ); - ent.v[ "angles" ] = ( 89, 360, 15 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_fence_god_ray" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -370,821, 894,577, 86,0089 ); - ent.v[ "angles" ] = ( 66,3877, 309,805, 162,006 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -193,243, 1258,19, 157,125 ); - ent.v[ "angles" ] = ( 14,2643, 294,85, -4,73233 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -176,393, 1262,88, 142,125 ); - ent.v[ "angles" ] = ( 14,2643, 294,85, -4,73233 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_lantern_cave" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -836,878, 344,257, -82,7785 ); - ent.v[ "angles" ] = ( 345,011, 351,907, -80,062 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_lantern_cave" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -839,215, 356,728, -81,1982 ); - ent.v[ "angles" ] = ( 343,974, 9,89278, -85,4343 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -212,912, 143,392, 1,33438 ); - ent.v[ "angles" ] = ( 56,2214, 261,044, -76,1716 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -148,791, 141,034, 3,67727 ); - ent.v[ "angles" ] = ( 56,2214, 261,044, -76,1716 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_studio" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -55,8977, -98,3554, 36,1655 ); - ent.v[ "angles" ] = ( 56,2214, 261,044, -76,1716 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_lamp_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -936,325, 1130,6, 60,231 ); - ent.v[ "angles" ] = ( 270,1, 270,018, 89,9824 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_lamp_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -652,628, 1909,25, 58,7255 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_red_blink" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 498,48, 2050,04, 107,248 ); - ent.v[ "angles" ] = ( 270, 359,992, 0 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_red_blink" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 438,785, 2026,6, 107,319 ); - ent.v[ "angles" ] = ( 270, 359,992, 0 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 413,526, 2157,43, 58,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 203 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -220,156, 1917,63, 48,125 ); - ent.v[ "angles" ] = ( 0, 22, 1 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1721,89, 1222,08, -18 ); - ent.v[ "angles" ] = ( 355, 75, 0 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_dust_ledge_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1799,67, 1278,58, -52,4704 ); - ent.v[ "angles" ] = ( 355,989, 75,9862, 0,156968 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1919,89, 1271,08, -46,6587 ); - ent.v[ "angles" ] = ( 347,356, 102,632, 2,38988 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_studio_sq_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1831,91, 2232,28, 87,1508 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_studio_sq_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1831,93, 2007,62, 87,3595 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_studio_sq_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1831,42, 2455,72, 87,7513 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_studio_sq_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1960,32, 2231,48, 87,7575 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_studio_sq_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2088,08, 2230,96, 87,5544 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_studio_tube_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -195,981, 1150,52, 76,2635 ); - ent.v[ "angles" ] = ( 89, 0, 15 ); - ent.v[ "delay" ] = -75; -} diff --git a/Multiplayer Maps/mp_studio/maps/mp/mp_studio.gsc b/Multiplayer Maps/mp_studio/maps/mp/mp_studio.gsc deleted file mode 100644 index 703e8cc..0000000 --- a/Multiplayer Maps/mp_studio/maps/mp/mp_studio.gsc +++ /dev/null @@ -1,392 +0,0 @@ -#include maps/mp/_tacticalinsertion; -#include maps/mp/gametypes/_weaponobjects; -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_studio_fx::main(); - maps/mp/_load::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_studio" ); - maps/mp/mp_studio_amb::main(); - setdvar( "compassmaxrange", "2100" ); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - level.destructible_callbacks[ "remove_streamers" ] = ::death_streamer_think; - alleytrigger = getent( "alleyTrigger", "targetname" ); - windowtrigger = getent( "triggerwindowTarget", "targetname" ); - target7 = getent( "trailerTarget_Window", "targetname" ); - target8 = getent( "alleyTarget_Cover", "targetname" ); - target9 = getent( "alleyTarget_Path", "targetname" ); - targetlight1_off = getent( "steelBuildingTargetLight1_off", "targetname" ); - targetlight1_on = getent( "steelBuildingTargetLight1_on", "targetname" ); - targetlight2_off = getent( "steelBuildingTargetLight2_off", "targetname" ); - targetlight2_on = getent( "steelBuildingTargetLight2_on", "targetname" ); - level.const_fx_exploder_red_light_1 = 1001; - level.const_fx_exploder_red_light_2 = 1002; - speaker1 = getent( "loudspeaker1", "targetname" ); - speaker2 = getent( "loudspeaker2", "targetname" ); - targetlight1_on hide(); - targetlight2_on hide(); - target8 setcandamage( 1 ); - target9 setcandamage( 1 ); - target8 thread damagetarget( 2 ); - target9 thread damagetarget( 2 ); - target7 thread movetarget( 7, ( 57, 23, 0 ), 3 ); - target8 thread movetarget( 1, 240, 10 ); - target9 thread movetarget( 1, 130, 8,6 ); - alleytrigger thread triggercheck( target9 ); - windowtrigger thread triggercheck( target7 ); -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "1900", reset_dvars ); -} - -triggercheck( target ) -{ - self endon( "game_ended" ); - while ( 1 ) - { - self waittill( "trigger", player ); - distance = distance( target.origin, self.origin ); - while ( distance <= 90 ) - { - target notify( "targetStopMoving" ); - while ( isDefined( player ) && player istouching( self ) && distance <= 90 ) - { - if ( distancesquared( target.origin, target.railpoints[ 0 ] ) < distancesquared( player.origin, target.railpoints[ 0 ] ) ) - { - target.preferrednextpos = 0; - } - else - { - target.preferrednextpos = 1; - } - wait 0,25; - } - } - } -} - -damagetarget( dir ) -{ - self endon( "game_ended" ); - while ( 1 ) - { - self waittill( "damage", damage, attacker, direction ); - switch( dir ) - { - case 1: - self rotateroll( self.angles[ 1 ] + 90, 0,1 ); - wait 0,2; - self rotateroll( self.angles[ 1 ] - 90, 0,1 ); - wait 0,2; - self playsound( "amb_target_flip" ); - break; - continue; - case 2: - rotation = 1; - if ( isDefined( attacker ) && isplayer( attacker ) ) - { - yaw = get2dyaw( attacker.origin, self.origin ); - if ( attacker.angles[ 1 ] > yaw ) - { - rotation = -1; - } - } - self rotateyaw( self.angles[ 2 ] + ( 180 * rotation ), 0,3 ); - self playsound( "amb_target_twirl" ); - self waittill( "rotatedone" ); - break; - continue; - case 3: - self rotatepitch( self.angles[ 1 ] + 90, 0,1 ); - wait 0,2; - self rotatepitch( self.angles[ 1 ] - 90, 0,1 ); - wait 0,2; - self playsound( "amb_target_flip" ); - break; - continue; - case 4: - self rotateroll( self.angles[ 1 ] - 90, 0,1 ); - wait 0,2; - self rotateroll( self.angles[ 1 ] + 90, 0,1 ); - wait 0,2; - self playsound( "amb_target_flip" ); - break; - continue; - case 5: - self rotatepitch( self.angles[ 1 ] - 90, 0,1 ); - wait 0,2; - self rotatepitch( self.angles[ 1 ] + 90, 0,1 ); - wait 0,2; - self playsound( "amb_target_flip" ); - break; - continue; - } - } -} - -damagetargetlights( light_on, light_off, speaker, alias, exploderhandle ) -{ - self endon( "game_ended" ); - while ( 1 ) - { - self waittill( "damage" ); - speaker playsound( alias ); - exploder( exploderhandle ); - light_off hide(); - light_on show(); - wait 0,5; - exploder_stop( exploderhandle ); - light_off show(); - light_on hide(); - } -} - -movetarget( dir, dis, speed ) -{ - self endon( "game_ended" ); - keepmoving = 1; - self thread movement_process(); - startpos = self.origin; - farpos = self.origin; - sound = spawn( "script_origin", self.origin ); - sound linkto( self ); - sound playloopsound( "amb_target_chain" ); - switch( dir ) - { - case 1: - farpos = self.origin + ( 0, dis, 0 ); - break; - case 2: - farpos = self.origin - ( 0, dis, 0 ); - break; - case 3: - farpos = self.origin + ( dis, 0, 0 ); - break; - case 4: - farpos = self.origin - ( dis, 0, 0 ); - break; - case 5: - farpos = self.origin + ( 0, 0, dis ); - break; - case 6: - farpos = self.origin - ( 0, 0, dis ); - break; - case 7: - farpos = self.origin - dis; - break; - } - self.railpoints = []; - self.railpoints[ 0 ] = startpos; - self.railpoints[ 1 ] = farpos; - self.preferrednextpos = 1; - self.playertrigger = 0; - while ( 1 ) - { - nextpos = self.railpoints[ self.preferrednextpos ]; - if ( self.preferrednextpos == 0 ) - { - self.preferrednextpos = 1; - } - else - { - self.preferrednextpos = 0; - } - self moveto( nextpos, speed ); - self waittill_either( "movedone", "targetStopMoving" ); - self playsound( "amb_target_stop" ); - } -} - -rotatetarget( dir, deg, speed, pausetime ) -{ - self endon( "game_ended" ); - while ( 1 ) - { - switch( dir ) - { - case 1: - self rotateyaw( self.angles[ 2 ] + deg, speed ); - self playsound( "amb_target_rotate" ); - wait pausetime; - self rotateyaw( self.angles[ 2 ] - deg, speed ); - self playsound( "amb_target_rotate" ); - wait pausetime; - break; - continue; - case 2: - self rotateyaw( self.angles[ 2 ] - deg, speed ); - self playsound( "amb_target_rotate" ); - wait pausetime; - self rotateyaw( self.angles[ 2 ] + deg, speed ); - self playsound( "amb_target_rotate" ); - wait pausetime; - break; - continue; - case 3: - self rotateroll( self.angles[ 0 ] + deg, speed ); - self playsound( "amb_target_rotate" ); - wait pausetime; - self rotateroll( self.angles[ 0 ] - deg, speed ); - self playsound( "amb_target_rotate" ); - wait pausetime; - break; - continue; - case 4: - self rotateroll( self.angles[ 0 ] - deg, speed ); - self playsound( "amb_target_rotate" ); - wait pausetime; - self rotateroll( self.angles[ 0 ] + deg, speed ); - self playsound( "amb_target_rotate" ); - wait pausetime; - break; - continue; - case 5: - self rotateroll( self.angles[ 1 ] + deg, speed ); - self playsound( "amb_target_rotate" ); - wait pausetime; - self rotateroll( self.angles[ 1 ] - deg, speed ); - self playsound( "amb_target_rotate" ); - wait pausetime; - break; - continue; - case 6: - self rotatepitch( self.angles[ 1 ] - deg, speed ); - wait pausetime; - self rotatepitch( self.angles[ 1 ] + deg, speed ); - wait pausetime; - break; - continue; - case 7: - self rotateto( ( self.angles[ 0 ] + 90, self.angles[ 1 ] - 90, self.angles[ 2 ] + 45 ), speed ); - wait pausetime; - self rotateto( ( self.angles[ 0 ] - 90, self.angles[ 1 ] + 90, self.angles[ 2 ] - 45 ), speed ); - wait pausetime; - } - } -} - -movement_process() -{ - for ( ;; ) - { - entities = getdamageableentarray( self.origin, 50 ); - _a352 = entities; - _k352 = getFirstArrayKey( _a352 ); - while ( isDefined( _k352 ) ) - { - entity = _a352[ _k352 ]; - if ( isDefined( entity.targetname ) || entity.targetname == "alleyTarget_Cover" && entity.targetname == "alleyTarget_Path" ) - { - } - else - { - if ( isplayer( entity ) ) - { - break; - } - else if ( !entity istouching( self ) ) - { - break; - } - else if ( isDefined( entity.classname ) && entity.classname == "grenade" ) - { - if ( !isDefined( entity.name ) ) - { - break; - } - else if ( !isDefined( entity.owner ) ) - { - break; - } - else if ( entity.name == "satchel_charge_mp" ) - { - if ( entity.origin[ 2 ] > ( self.origin[ 2 ] + 5 ) ) - { - break; - } - } - else watcher = entity.owner getwatcherforweapon( entity.name ); - if ( !isDefined( watcher ) ) - { - break; - } - else watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate( entity, 0, undefined ); - } - if ( isDefined( entity.targetname ) ) - { - if ( entity.targetname == "riotshield_mp" ) - { - entity dodamage( 1, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - break; - } - } - else - { - if ( isDefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" ) - { - entity thread maps/mp/_tacticalinsertion::fizzle(); - } - } - } - _k352 = getNextArrayKey( _a352, _k352 ); - } - wait 0,25; - } -} - -getwatcherforweapon( weapname ) -{ - if ( !isDefined( self ) ) - { - return undefined; - } - if ( !isplayer( self ) ) - { - return undefined; - } - i = 0; - while ( i < self.weaponobjectwatcherarray.size ) - { - if ( self.weaponobjectwatcherarray[ i ].weapon != weapname ) - { - i++; - continue; - } - else - { - return self.weaponobjectwatcherarray[ i ]; - } - i++; - } - return undefined; -} - -death_streamer_think( notifytype, attacker ) -{ - streamers = getentarray( "airconditioner_streamer", "targetname" ); - i = 0; - while ( i < streamers.size ) - { - streamer = streamers[ i ]; - if ( distancesquared( streamer.origin, self.origin ) < 2500 ) - { - streamer delete(); - } - i++; - } -} diff --git a/Multiplayer Maps/mp_studio/maps/mp/mp_studio_amb.gsc b/Multiplayer Maps/mp_studio/maps/mp/mp_studio_amb.gsc deleted file mode 100644 index 782a35c..0000000 --- a/Multiplayer Maps/mp_studio/maps/mp/mp_studio_amb.gsc +++ /dev/null @@ -1,37 +0,0 @@ - -main() -{ - destructibles = getentarray( "destructible", "targetname" ); - _a5 = destructibles; - _k5 = getFirstArrayKey( _a5 ); - while ( isDefined( _k5 ) ) - { - dest = _a5[ _k5 ]; - if ( dest.destructibledef == "veh_t6_dlc_electric_cart_destructible" ) - { - dest thread cart_fire_think(); - dest thread cart_death_think(); - } - _k5 = getNextArrayKey( _a5, _k5 ); - } -} - -cart_fire_think() -{ - self endon( "car_dead" ); - for ( ;; ) - { - self waittill( "broken", event ); - if ( event == "destructible_car_fire" ) - { - self playloopsound( "amb_fire_med" ); - return; - } - } -} - -cart_death_think() -{ - self waittill( "car_dead" ); - self playsound( "exp_barrel" ); -} diff --git a/Multiplayer Maps/mp_studio/maps/mp/mp_studio_fx.gsc b/Multiplayer Maps/mp_studio/maps/mp/mp_studio_fx.gsc deleted file mode 100644 index 019f88c..0000000 --- a/Multiplayer Maps/mp_studio/maps/mp/mp_studio_fx.gsc +++ /dev/null @@ -1,109 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); -#using_animtree( "fxanim_props_dlc" ); - -main() -{ - precache_fxanim_props(); - precache_fxanim_props_dlc(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_studio_fx::main(); -} - -precache_scripted_fx() -{ -} - -precache_createfx_fx() -{ - level._effect[ "fx_mp_express_train_blow_dust" ] = loadfx( "maps/mp_maps/fx_mp_express_train_blow_dust" ); - level._effect[ "fx_mp_village_grass" ] = loadfx( "maps/mp_maps/fx_mp_village_grass" ); - level._effect[ "fx_insects_swarm_lg_light" ] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); - level._effect[ "fx_mp_debris_papers" ] = loadfx( "maps/mp_maps/fx_mp_debris_papers" ); - level._effect[ "fx_mp_studio_dust_ledge_runner" ] = loadfx( "maps/mp_maps/fx_mp_studio_dust_ledge_runner" ); - level._effect[ "fx_sand_moving_in_air_pcloud" ] = loadfx( "dirt/fx_sand_moving_in_air_pcloud" ); - level._effect[ "fx_mp_light_dust_motes_md" ] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); - level._effect[ "fx_mp_studio_fog" ] = loadfx( "maps/mp_maps/fx_mp_studio_fog" ); - level._effect[ "fx_mp_studio_fog_ground" ] = loadfx( "maps/mp_maps/fx_mp_studio_fog_ground" ); - level._effect[ "fx_mp_studio_fog_background" ] = loadfx( "maps/mp_maps/fx_mp_studio_fog_background" ); - level._effect[ "fx_mp_studio_rolling_fog" ] = loadfx( "maps/mp_maps/fx_mp_studio_rolling_fog" ); - level._effect[ "fx_mp_studio_fog_machine" ] = loadfx( "maps/mp_maps/fx_mp_studio_fog_machine" ); - level._effect[ "fx_mp_studio_fog_sm" ] = loadfx( "maps/mp_maps/fx_mp_studio_fog_sm" ); - level._effect[ "fx_mp_slums_dark_smoke_sm" ] = loadfx( "maps/mp_maps/fx_mp_slums_dark_smoke_sm" ); - level._effect[ "fx_smk_smolder_gray_slow_shrt" ] = loadfx( "smoke/fx_smk_smolder_gray_slow_shrt" ); - level._effect[ "fx_smk_smolder_gray_slow_dark" ] = loadfx( "smoke/fx_smk_smolder_gray_slow_dark" ); - level._effect[ "fx_mp_studio_ufo_fire" ] = loadfx( "maps/mp_maps/fx_mp_studio_ufo_fire" ); - level._effect[ "fx_mp_studio_ufo_smoke" ] = loadfx( "maps/mp_maps/fx_mp_studio_ufo_smoke" ); - level._effect[ "fx_mp_studio_fire_md" ] = loadfx( "maps/mp_maps/fx_mp_studio_fire_md" ); - level._effect[ "fx_mp_studio_smoke_vista" ] = loadfx( "maps/mp_maps/fx_mp_studio_smoke_vista" ); - level._effect[ "fx_mp_studio_smoke_ground" ] = loadfx( "maps/mp_maps/fx_mp_studio_smoke_ground" ); - level._effect[ "fx_mp_studio_smoke_area" ] = loadfx( "maps/mp_maps/fx_mp_studio_smoke_area" ); - level._effect[ "fx_mp_studio_smoke_area_sm" ] = loadfx( "maps/mp_maps/fx_mp_studio_smoke_area_sm" ); - level._effect[ "fx_mp_studio_toy_fire" ] = loadfx( "maps/mp_maps/fx_mp_studio_toy_fire" ); - level._effect[ "fx_mp_studio_torch" ] = loadfx( "maps/mp_maps/fx_mp_studio_torch" ); - level._effect[ "fx_mp_studio_sci_fire_burst_runner" ] = loadfx( "maps/mp_maps/fx_mp_studio_sci_fire_burst_runner" ); - level._effect[ "fx_mp_studio_muzzle_tank_sm" ] = loadfx( "maps/mp_maps/fx_mp_studio_muzzle_tank_sm" ); - level._effect[ "fx_mp_studio_sci_fire" ] = loadfx( "maps/mp_maps/fx_mp_studio_sci_fire" ); - level._effect[ "fx_mp_studio_ufo_electric_runner" ] = loadfx( "maps/mp_maps/fx_mp_studio_ufo_electric_runner" ); - level._effect[ "fx_mp_studio_electric_fence" ] = loadfx( "maps/mp_maps/fx_mp_studio_electric_fence" ); - level._effect[ "fx_mp_studio_spark_sm_runner" ] = loadfx( "maps/mp_maps/fx_mp_studio_spark_sm_runner" ); - level._effect[ "fx_mp_studio_water_dock_splash" ] = loadfx( "maps/mp_maps/fx_mp_studio_water_dock_splash" ); - level._effect[ "fx_mp_studio_water_splash_runner" ] = loadfx( "maps/mp_maps/fx_mp_studio_water_splash_runner" ); - level._effect[ "fx_mp_studio_cannon_splash_runner" ] = loadfx( "maps/mp_maps/fx_mp_studio_cannon_splash_runner" ); - level._effect[ "fx_mp_studio_robot_laser" ] = loadfx( "maps/mp_maps/fx_mp_studio_robot_laser" ); - level._effect[ "fx_light_god_ray_mp_studio" ] = loadfx( "env/light/fx_light_god_ray_mp_studio" ); - level._effect[ "fx_mp_studio_ufo_light_flash" ] = loadfx( "maps/mp_maps/fx_mp_studio_ufo_light_flash" ); - level._effect[ "fx_mp_studio_ufo_light_flash_lg" ] = loadfx( "maps/mp_maps/fx_mp_studio_ufo_light_flash_lg" ); - level._effect[ "fx_mp_studio_fence_god_ray" ] = loadfx( "maps/mp_maps/fx_mp_studio_fence_god_ray" ); - level._effect[ "fx_mp_studio_sconce_glare" ] = loadfx( "maps/mp_maps/fx_mp_studio_sconce_glare" ); - level._effect[ "fx_mp_studio_sconce_glare2" ] = loadfx( "maps/mp_maps/fx_mp_studio_sconce_glare2" ); - level._effect[ "fx_mp_studio_lamp_glare" ] = loadfx( "maps/mp_maps/fx_mp_studio_lamp_glare" ); - level._effect[ "fx_mp_studio_flood_light" ] = loadfx( "maps/mp_maps/fx_mp_studio_flood_light" ); - level._effect[ "fx_mp_studio_tube_glare" ] = loadfx( "maps/mp_maps/fx_mp_studio_tube_glare" ); - level._effect[ "fx_mp_studio_lantern_cave" ] = loadfx( "maps/mp_maps/fx_mp_studio_lantern_cave" ); - level._effect[ "fx_mp_studio_red_blink" ] = loadfx( "maps/mp_maps/fx_mp_studio_red_blink" ); - level._effect[ "fx_studio_sq_glare" ] = loadfx( "light/fx_studio_sq_glare" ); - level._effect[ "fx_mp_village_single_glare" ] = loadfx( "maps/mp_maps/fx_mp_village_single_glare" ); - level._effect[ "fx_mp_studio_gold_sparkle_runner" ] = loadfx( "maps/mp_maps/fx_mp_studio_gold_sparkle_runner" ); - level._effect[ "fx_mp_studio_gold_glow" ] = loadfx( "maps/mp_maps/fx_mp_studio_gold_glow" ); - level._effect[ "fx_mp_studio_ufo_engine_runner" ] = loadfx( "maps/mp_maps/fx_mp_studio_ufo_engine_runner" ); - level._effect[ "fx_mp_studio_ufo_forcefield" ] = loadfx( "maps/mp_maps/fx_mp_studio_ufo_forcefield" ); - level._effect[ "fx_mp_studio_saloon_glare" ] = loadfx( "maps/mp_maps/fx_mp_studio_saloon_glare" ); - level._effect[ "fx_mp_studio_saloon_glare_sq" ] = loadfx( "maps/mp_maps/fx_mp_studio_saloon_glare_sq" ); - level._effect[ "fx_lf_mp_studio_sun1" ] = loadfx( "lens_flares/fx_lf_mp_studio_sun1" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "roofvent" ] = %fxanim_gp_roofvent_anim; - level.scr_anim[ "fxanim_props" ][ "roofvent_slow" ] = %fxanim_gp_roofvent_slow_anim; - level.scr_anim[ "fxanim_props" ][ "dino_eggs" ] = %fxanim_mp_stu_dino_eggs_anim; - level.scr_anim[ "fxanim_props" ][ "noose" ] = %fxanim_mp_stu_noose_anim; - level.scr_anim[ "fxanim_props" ][ "t_rex_barn" ] = %fxanim_mp_stu_t_rex_barn_anim; - level.scr_anim[ "fxanim_props" ][ "t_rex_fence_01" ] = %fxanim_mp_stu_t_rex_fence_01_anim; - level.scr_anim[ "fxanim_props" ][ "t_rex_fence_02" ] = %fxanim_mp_stu_t_rex_fence_02_anim; - level.scr_anim[ "fxanim_props" ][ "t_rex_fence_03" ] = %fxanim_mp_stu_t_rex_fence_03_anim; - level.scr_anim[ "fxanim_props" ][ "robot_spider_01" ] = %fxanim_mp_stu_robot_01_anim; - level.scr_anim[ "fxanim_props" ][ "robot_spider_02" ] = %fxanim_mp_stu_robot_02_anim; - level.scr_anim[ "fxanim_props" ][ "robot_spider_03" ] = %fxanim_mp_stu_robot_03_anim; - level.scr_anim[ "fxanim_props" ][ "shark_fins" ] = %fxanim_mp_stu_shark_fins_anim; - level.scr_anim[ "fxanim_props" ][ "pirate_boats" ] = %fxanim_mp_stu_pirate_boats_anim; - level.scr_anim[ "fxanim_props" ][ "brontosaurus_chew_anim" ] = %fxanim_mp_stu_brontosaurus_chew_anim; - level.scr_anim[ "fxanim_props" ][ "brontosaurus_look_around" ] = %fxanim_mp_stu_brontosaurus_look_around_anim; - level.scr_anim[ "fxanim_props" ][ "robot_scanning" ] = %fxanim_mp_stu_robot_scanning; - level.scr_anim[ "fxanim_props" ][ "t_rex_stand_01" ] = %fxanim_mp_stu_t_rex_stand_01_anim; - level.scr_anim[ "fxanim_props" ][ "t_rex_stand_02" ] = %fxanim_mp_stu_t_rex_stand_02_anim; - level.scr_anim[ "fxanim_props" ][ "t_rex_stand_03" ] = %fxanim_mp_stu_t_rex_stand_03_anim; - level.scr_anim[ "fxanim_props" ][ "captain_01" ] = %fxanim_mp_stu_pirate_captain_01_anim; - level.scr_anim[ "fxanim_props" ][ "captain_02" ] = %fxanim_mp_stu_pirate_captain_02_anim; - level.scr_anim[ "fxanim_props" ][ "oarsmen_01" ] = %fxanim_mp_stu_pirate_oarsmen_01_anim; - level.scr_anim[ "fxanim_props" ][ "oarsmen_02" ] = %fxanim_mp_stu_pirate_oarsmen_02_anim; - level.scr_anim[ "fxanim_props" ][ "captain_jailed" ] = %fxanim_mp_stu_pirate_jailed_captain_anim; - level.scr_anim[ "fxanim_props" ][ "oarsmen_jailed" ] = %fxanim_mp_stu_pirate_jailed_oarsmen_anim; -} - -precache_fxanim_props_dlc() -{ -} diff --git a/Multiplayer Maps/mp_takeoff/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_takeoff/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_takeoff/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_takeoff/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_takeoff/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_takeoff/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_takeoff/maps/mp/createfx/mp_takeoff_fx.gsc b/Multiplayer Maps/mp_takeoff/maps/mp/createfx/mp_takeoff_fx.gsc deleted file mode 100644 index 078c2ec..0000000 --- a/Multiplayer Maps/mp_takeoff/maps/mp/createfx/mp_takeoff_fx.gsc +++ /dev/null @@ -1,3763 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 983,286, 2910,81, 143,273 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1432,95, 2199,07, 143,367 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 516,53, 1937,87, 9,2 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 638,762, 1936,02, 9,2 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 715,407, 1868,34, 9,2 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 437,546, 1867,38, 9,2 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 716,687, 1721,05, 9,2 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 643,651, 1648,22, 9,2 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 508,004, 1648,71, 9,2 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_water_fountain_pool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 434,98, 1725,83, 9,2 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -648,755, 92,4447, 131,847 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -520,29, 88,8781, 131,849 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -776,327, 88,686, 131,848 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -904,882, 90,2834, 131,952 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -519,447, -34,2767, 131,851 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -648,274, -35,097, 131,85 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -776,23, -33,2154, 131,838 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -904,334, -35,1092, 131,949 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1113,23, 1485,44, 150,001 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -268,701, 3137,87, 149,824 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 226 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -658,216, 3233,51, 149,737 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 316 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_tv_glow_blue_flckr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -666,528, -166,834, 127,102 ); - ent.v[ "angles" ] = ( 11, 90, 0 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_tv_glow_blue_flckr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -947,046, -166,757, 127,406 ); - ent.v[ "angles" ] = ( 11, 90, 0 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_tv_glow_blue_flckr" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -974,523, 74,081, 126,104 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 12 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createexploder( "fx_mp_tak_shuttle_thruster_smk_grnd" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -4203,15, 2484,17, -697 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1274,53, 1550,32, 341,859 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1118,68, 1549,85, 343,033 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -964,467, 1549,77, 342,676 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -807,474, 1550,47, 342,551 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -652,937, 1551,13, 343,008 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -514,133, 1689,14, 342,813 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -370,846, 1832,96, 343,015 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -192,802, 2012,65, 150 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -90,701, 2109,31, 342,559 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 49,4031, 2253,96, 341,674 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 50,0295, 2493,5, 342,768 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 53,7982, 2734,09, 342,956 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -76,6451, 2863,17, 342,752 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -202,801, 2990,97, 342,686 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -330,71, 3117,95, 342,98 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -458,642, 3245,43, 342,437 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1471,33, 1941,59, 370 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1280,62, 1940,2, 370 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1087,5, 1941,78, 370 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -882,108, 1944,29, 370 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -748,217, 2080,12, 370 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -611,627, 2263,44, 370 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -600,638, 2492,16, 370 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -599,449, 2699,52, 370 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -735,423, 2868,6, 370 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -871,764, 3003,13, 370 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1086,72, 3044,26, 370 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1278,05, 3045,15, 370 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1471,16, 3045,03, 370 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -103,254, 2105,74, 150 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -9,05183, 2201,33, 150 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 32,0324, 2336,98, 150 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 29,9413, 2472,52, 150 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 31,069, 2600,87, 150 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_rnd_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -230,584, 1971,09, 341,786 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -272,42, 315,875, 35,2283 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 273 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -544,444, 315,875, 37,4136 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 273 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_tak_steam_loading_dock" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -937,289, 3990,75, -447,667 ); - ent.v[ "angles" ] = ( 271, 180, -180 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_heat_distort" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 151,146, 318,68, 36,1864 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1302,14, 958,538, 83,5725 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1073,44, 380,135, 70,409 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1160,71, 174,23, 75,3968 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 803,083, 800,152, 180,576 ); - ent.v[ "angles" ] = ( 18,997, 270,058, 0,344304 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1652,46, 2130,97, 254,498 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1662,24, 2286,18, 217,879 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 119,43, 3945,7, 104,156 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -613,325, 3201,74, 115,722 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 313 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 7,7182, 2734,55, 223,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 272 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1171,91, 2764,99, 51,8487 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1154,72, 2493,14, 59,5368 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1298,97, 2195,32, 66,6985 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1316,53, 1673,02, 96,6959 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 356 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -826,993, 1705,17, 102 ); - ent.v[ "angles" ] = ( 359,895, 35, 0,994674 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -497,358, 2071,53, 108 ); - ent.v[ "angles" ] = ( 359,724, 45, 0,961412 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -485,146, 2728,7, 113 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 313 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 14,3494, 2605,83, 92,2667 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 268 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -771,889, 2777,05, 89,2267 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 273 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -814,044, 2181,69, 74,6889 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 220 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -991,875, -36,6636, 50,4565 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1684,55, 2342,92, 32,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 214 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1131,28, 2863,43, 32,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 235 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1671,72, 2334,25, 32,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 111 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1221,77, 2170,12, 140,508 ); - ent.v[ "angles" ] = ( 318,404, 90,0132, -0,402941 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1613,84, 2057,86, 140,525 ); - ent.v[ "angles" ] = ( 316,404, 90,0327, -0,416093 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1245,63, 2170,15, 276,561 ); - ent.v[ "angles" ] = ( 318,404, 90,0129, -0,402866 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1350,77, 2169,99, 276,689 ); - ent.v[ "angles" ] = ( 317,404, 90,0224, -0,409253 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1874,07, 2056,45, 140,253 ); - ent.v[ "angles" ] = ( 316,404, 90,0327, -0,416109 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1601,34, 2464,26, 145,379 ); - ent.v[ "angles" ] = ( 88,6999, 90, 90 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1496,25, 2318,41, 145,393 ); - ent.v[ "angles" ] = ( 89,6998, 90, 180 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1368,44, 2317,01, 145,415 ); - ent.v[ "angles" ] = ( 89,6998, 90, 180 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1016,59, 2670,06, 146,314 ); - ent.v[ "angles" ] = ( 89,6999, 179,933, -90,0694 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1111,94, 2892,41, 146,467 ); - ent.v[ "angles" ] = ( 89,8999, 90, 180 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1242,91, 2320,22, 278,141 ); - ent.v[ "angles" ] = ( 88,6999, 90, 90 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1714,59, 2361,24, 258,465 ); - ent.v[ "angles" ] = ( 316,404, 90,0327, -0,416109 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1744,81, 2123,62, 258,856 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 328 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -653,524, 1132,6, 87,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 690,566, -261,614, 96,1049 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1121,82, 1795,84, 85,6525 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_sign_glow_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1539,62, 2449,89, 142,208 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_sign_glow_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1544,48, 2450,13, 142,534 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_sign_glow_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1213,83, 2585,17, 141,868 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_sign_glow_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1217,39, 2581,89, 142,425 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 315 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 175,404, 3927,2, 217,875 ); - ent.v[ "angles" ] = ( 270,807, 29,7371, 60,0036 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 422,709, 3842,63, 212,875 ); - ent.v[ "angles" ] = ( 270,807, 29,7371, 60,0036 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 419,344, 3874,97, 215,875 ); - ent.v[ "angles" ] = ( 270,807, 29,7371, 60,0036 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -797,568, 669,764, -0,500001 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 737,88, 2476,7, 45,9528 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 775,629, 2414,95, 2,65451 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 775,545, 2391,05, -13,078 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 776,413, 2367,01, -29,1524 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 855,92, 2366,99, -29,2167 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 855,913, 2390,98, -13,2231 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 855,876, 2415,02, 2,86906 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 855,866, 2439,04, 18,8905 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 737,922, 2591,77, 45,8145 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 932,833, 2481,86, 45,965 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 542,071, 2592,38, 45,7944 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 541,982, 2477,57, 46,36 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 776,042, 2439, 18,8111 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 504,153, 2367,07, -29,0153 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 504,122, 2415,04, 2,91993 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 504,044, 2439,01, 18,8256 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 423,734, 2367,02, -29,1636 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 424,22, 2415,05, 2,93267 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 424,076, 2438,98, 18,7634 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 989,767, 1889,31, -24,4579 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1016,12, 1630,12, -24,057 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 957,507, 1668,03, -24,2906 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 957,499, 1812,11, -23,6634 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 958,077, 1300,67, -24,1765 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 958,075, 1140,73, -24,198 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1019,53, 1345,85, -23,9984 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1391,78, 2099,01, 27,143 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1472, 2099,07, 27,0083 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1471,54, 2074,99, 10,7802 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1392,1, 2075,03, 10,8867 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1095,06, 2040,36, -12,9766 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1071,02, 2040,25, -29,1561 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1095,07, 1960,54, -13,0282 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1071,04, 1960,63, -29,0773 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1095,08, 1548,06, -12,9934 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1071,05, 1547,95, -29,0742 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1095,08, 1436,51, -12,9819 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1070,96, 1436,56, -29,3406 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 432,881, 1275,59, -22,2206 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 44 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 335,496, 1373, -22,2644 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 44 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 184,017, 1354,71, -22,1986 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 44 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 73,5534, 1465,16, -22,1953 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 44 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 423,921, 1202,83, -21,8863 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 315 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 262,535, 1363,63, -22,13 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 134 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 109,96, 1152,18, 45,55 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 571,76, 2366,15, -22 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 708,578, 2366,1, -21,9233 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 360,652, 2280,9, -21,0619 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 314 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -84,2352, 3038,97, 35,8816 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 314 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -81,1992, 3099,76, 36,0374 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 45 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -144,735, 3100,04, 35,8417 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 134 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1121,93, 1672,24, 15,8461 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1121,91, 1839,47, 15,8827 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1122,03, 1300,31, 15,5516 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1121,91, 1138,94, 16,077 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1032,28, 819,028, 26,8803 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1032,55, 795,051, 11,0715 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1112,06, 819,069, 26,9837 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1111,83, 795,05, 11,0518 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 857,367, 571,055, 10,944 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 856,751, 595,075, 26,9887 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 857,369, 619,029, 42,8863 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 857,357, 667,036, 74,9126 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 857,858, 691,063, 90,9648 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 857,418, 739,069, 122,995 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 792,122, 571,023, 10,9047 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 791,755, 594,997, 27,2133 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 791,823, 619,06, 43,0249 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 792,043, 667,042, 74,9312 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 792,084, 691,041, 91,0554 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 791,797, 739,05, 122,949 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1172,61, 2452,09, 42,7919 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1107,72, 2452,13, 43,0581 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1108,28, 2428,13, 58,8672 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1108,31, 2404,13, 75,0598 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1107,82, 2380,13, 90,7716 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1172,27, 2428,13, 58,979 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1172,02, 2404,13, 74,8982 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1172,81, 2379,97, 90,6866 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1211,88, 2339,57, 106,643 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1211,88, 2275,89, 106,652 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1235,88, 2275,77, 123,073 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1259,88, 2276,07, 139,058 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1283,88, 2275,93, 154,531 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1235,88, 2339,87, 122,968 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1259,88, 2339,87, 138,789 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1283,88, 2339,95, 154,964 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1079,88, 533,315, 165,875 ); - ent.v[ "angles" ] = ( 90, 180, 0 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1080,04, 579,854, 171,875 ); - ent.v[ "angles" ] = ( 90, 180, 0 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_sqr_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1207,29, 956,834, 175,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -51,3421, 1484,16, 18,939 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 45 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -34,3044, 1500,89, 3,0771 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 45 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -16,927, 1517,24, -13,0426 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 45 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -0,176095, 1534,49, -29,0559 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 45 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -89,5913, 1624,58, -29,088 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 45 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -106,645, 1606,97, -13,0749 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 45 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -123,29, 1589,81, 3,00089 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 45 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -140,137, 1572,93, 18,9672 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 45 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 584,363, 952,959, 18,9122 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 583,988, 976,968, 2,91464 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 583,988, 1000,95, -13,0733 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 584,489, 1024,96, -28,9313 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 488,049, 1024,94, -29,0188 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 488,011, 1000,92, -12,9862 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 487,806, 976,929, 3,03751 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 487,927, 952,935, 19,0334 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -196,219, 1595,26, 48,7045 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 315 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -641,931, 1237,99, 7,7812 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -657,878, 1369,34, 39,9439 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -641,901, 1012,52, 7,86399 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -641,951, 728,998, 11,7347 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -641,942, 604,127, 11,7988 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -641,99, 480,622, 11,6406 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -641,902, 356,435, 11,8995 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -604,472, 318,136, 11,9742 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -467,119, 318,073, 11,84 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -331,73, 318,123, 12,0064 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -195,636, 318,018, 11,6762 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -45,1334, 318,114, 11,9143 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 75,8681, 318,051, 11,735 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 195,059, 318,112, 12,0508 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 328,451, 909,492, 46,6491 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 199,855, 910,106, 45,9135 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -56,322, 910,094, 45,8658 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 71,5744, 910,109, 45,6172 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 81,4755, 1291,78, 45,7823 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 225 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -9,66185, 1383,02, 45,9526 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 225 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 72,0178, 1049,94, 45,7625 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -55,6394, 1049,89, 45,9148 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -105,906, 979,873, 45,8574 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -329,152, 1577,68, 48,1444 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 225 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -410,167, 1658,74, 47,9093 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 225 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -312,973, 1282,57, 35,7262 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -312,954, 1357,76, 36,3683 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -412,784, 1364,14, 35,8633 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -412,787, 1276,23, 36,1016 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -357,89, 1382,93, 36,0084 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 417,883, 887,503, 45,9123 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 928,036, 2366,03, -24,2746 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -604,97, 923,851, 26,8855 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -604,923, 812,002, 27,0028 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -628,923, 812,315, 11,0009 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -628,996, 923,686, 11,153 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 332,003, 355,003, 26,8363 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 444,581, 355,039, 26,9293 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 443,718, 331,027, 10,8707 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 331,915, 330,952, 10,6477 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 129,896, -447,594, 19,0958 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 2 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 129,97, -329,357, 18,7411 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 2 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 702,003, -256,255, 18,6353 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 702,053, -444,759, 19,261 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -482,258, 1778,29, 43,2626 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 224 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -465,101, 1795,08, 59,2269 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 224 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -448,917, 1812,84, 75,2041 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 224 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -432,141, 1829,99, 91,2494 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 224 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -414,617, 1846,41, 107,159 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 224 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -397,226, 1862,97, 123,104 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 224 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -380,478, 1880,13, 139,3 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 224 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -363,445, 1897,03, 155,051 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 224 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -426,012, 1722,04, 43,0612 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 224 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -409,041, 1739,01, 59,1723 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 224 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -392,029, 1755,95, 75,2505 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 224 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -374,943, 1772,81, 91,0044 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 224 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -358,167, 1789,97, 107,291 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 224 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -341,255, 1806,99, 123,295 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 224 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -324,174, 1823,81, 139,474 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 224 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -307,375, 1840,97, 155,207 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 224 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -128,75, 2973,71, 43,231 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -111,605, 2956,91, 59,1906 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -94,5312, 2940,05, 75,2042 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -77,6862, 2922,95, 91,2482 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -60,6402, 2906,07, 107,052 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -43,7912, 2888,97, 123,032 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -26,8833, 2871,97, 139,635 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -10,0032, 2854,91, 155,109 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -185,219, 2917,24, 43,1477 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -167,903, 2900,62, 59,2746 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -151,138, 2883,44, 75,1347 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -133,987, 2866,65, 91,0165 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -117,207, 2849,49, 107,104 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -99,903, 2832,86, 123,088 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -83,0559, 2815,8, 139,57 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -66,0691, 2798,85, 155,211 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 471,726, 1675,9, 9,75 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 222 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 485,445, 1912,63, 9,75 ); - ent.v[ "angles" ] = ( 354,204, 147,079, -1,55845 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 666,393, 1700,92, 9,75 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 240 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -65,8765, -288,37, 19,0651 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -65,8591, -450,205, 19,0412 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_pulse" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 862,534, -199,185, 27,2791 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_pulse" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 96,0406, -230,91, 28,2451 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -874,524, 821,716, 7,79738 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -874,599, 901,875, 7,98359 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -1121,42, 901,689, 7,92185 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -1121,4, 822,056, 8,01758 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -919,938, 949,504, 7,70692 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -1072,29, 949,432, 8,07931 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -358,513, 1257,05, 35,9739 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -1296,49, 1331,04, 26,8928 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -1296,41, 1307,05, 11,0698 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -1175,95, 1331,03, 26,8884 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -1175,91, 1307,07, 10,9683 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -1056,07, 1331,05, 27,0573 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -1055,85, 1307,05, 10,9262 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -935,446, 1331,02, 26,8583 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -936,704, 1307,03, 10,8885 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -816,392, 1331,04, 27,0997 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -815,798, 1307,07, 10,9746 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -696,457, 1331,08, 27,0036 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -696,196, 1307,05, 11,0719 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -761,187, 4839,2, 172,242 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -927,999, 5222,38, 173,2 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -761,58, 5607,91, 172,293 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -376,747, 5774,4, 172,692 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -278,937, 4681,38, 171,573 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -475,324, 4681,4, 173,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 10,3508, 4837,39, 171,425 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 175,219, 5222,42, 172,187 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 8,72153, 5607,88, 172,437 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1453,14, 3289,36, 946 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1193,21, 2632,27, 906,26 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 711,688, 429,426, 1046,13 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -623,974, -159,865, 476,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1385,32, 2324,46, 968,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -746,909, 1701,39, 932 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -684,101, 984,58, -0,500004 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1200,64, 580,56, -0,499997 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1198,34, 718,857, -0,499991 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 991,139, -111,185, 6 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 709,233, 1908,43, 9,75 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 217 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 646,962, 2755,67, 27,5 ); - ent.v[ "angles" ] = ( 354, 183, 0 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -800,256, 510,016, -0,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 184 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1301,72, 250,611, -0,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 399,61, 3609,42, 32,5 ); - ent.v[ "angles" ] = ( 359, 179, 0 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -81,1495, 4320,76, 32,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 184 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1016,96, 3075,33, 38,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1760,87, 1774,31, 0 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 184 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1737,64, 1252,34, 0 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 184 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1743,15, 615,582, 3 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 184 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 164,619, -579,537, 0 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 184 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1299,71, 968,25, -0,499998 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1300,51, 1144,84, -0,500003 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -683,831, 1117,54, -0,499997 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 398,043, 888,465, 45,7374 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 661,864, -625,489, -11 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 184 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 239,886, -704,53, -11 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 184 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1677,22, -68,5633, -11 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1234,19, -48,4095, -11 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 184 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1694,63, 1192,36, -0,999999 ); - ent.v[ "angles" ] = ( 0, 172, -1 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1066,68, 3282,2, 29,1427 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1988,2, 1513,88, -0,999997 ); - ent.v[ "angles" ] = ( 356,996, 178,012, -0,157153 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1970,02, 799,371, -41,0728 ); - ent.v[ "angles" ] = ( 350,996, 178,029, -0,158891 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 381,014, 4961,92, 44,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -1287,68, 3198,4, -28,203 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -1219,17, 3198,39, -27,7394 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -1414,83, 2974,37, -27,7554 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -1483,16, 2974,43, -27,8981 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -1548,37, 2974,39, -27,7688 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_glow_cool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1337,04, 3087,22, 63,9211 ); - ent.v[ "angles" ] = ( 326, 180, 0 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_glow_cool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1464,72, 2022,63, 71,534 ); - ent.v[ "angles" ] = ( 321, 270, 0 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 142,296, 643,942, 32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -86,9443, 673,226, 29 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -446,986, 3,93933, 117,73 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 90,0745, -294,115, 123,422 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 6,40982, -417,262, 128,783 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 273,822, 2405,29, 213,798 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 28,2924, 209,641, -3 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 184 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 226,668, 2547,57, 32,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 186 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -59,1336, 4222,76, 32,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -79,787, 4091,04, 32,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 184 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 752,394, 3596,74, 29,125 ); - ent.v[ "angles" ] = ( 359, 179, 0 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 753,327, 3452,5, 29,125 ); - ent.v[ "angles" ] = ( 359, 179, 0 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 746,71, -405,051, 123,151 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 847,36, -272,165, 123,151 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_tak_steam_hvac" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1048,48, 1271,84, 117,81 ); - ent.v[ "angles" ] = ( 357, 168, 0 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_tak_steam_hvac" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 299,916, 1308,73, 90,8595 ); - ent.v[ "angles" ] = ( 356,608, 132,937, 0,122398 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_tak_steam_hvac" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 172,647, 994,751, 207,315 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 186 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 273,36, 3604,84, 32,5 ); - ent.v[ "angles" ] = ( 359, 179, 0 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_takeoff_sun1" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 86319,8, 184830, 129198 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 424,119, 3943,38, 202,939 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 381,624, 3943,18, 202,948 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 465,718, 3943,23, 202,928 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 465,84, 3776,95, 202,905 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 424,038, 3777,14, 202,902 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 382,137, 3777,18, 202,92 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 319,696, 4027,9, 166,936 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 359,63, 4028,19, 166,948 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 399,952, 4028,02, 166,895 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 439,816, 4028,19, 166,921 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 479,553, 4027,95, 166,946 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 519,759, 4027,95, 166,911 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 230,838, 3907,97, 202,898 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 230,938, 3948,08, 202,897 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 120,813, 3947,71, 202,941 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 121,014, 3908,11, 202,892 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1151,9, 461,667, 158,933 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1084,04, 461,659, 158,929 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1017,85, 461,753, 158,93 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1018,41, 649,811, 158,944 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1083,59, 650,206, 158,951 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1151,75, 650,008, 158,916 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 865,456, 479,486, 151,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 783,057, 479,824, 151,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 865,459, 421,815, 151,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 783,213, 421,592, 151,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1075,83, 848,391, 174,958 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1010,04, 847,859, 174,908 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1009,96, 991,953, 174,891 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1075,77, 991,966, 174,921 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1158,05, 859,994, 150,332 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1261,87, 860,067, 150,34 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1349,73, 860,07, 150,365 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1261,86, 1047,46, 150,399 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1157,79, 1047,5, 150,397 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1051,65, 1048,22, 150,382 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1130,16, 936,207, 166,916 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1129,89, 976,273, 166,922 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1278,03, 975,903, 166,895 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1277,94, 936,127, 166,901 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1349,53, 1047,96, 150,392 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 576,125, 959,955, 286,332 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 575,706, 879,748, 286,379 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 575,846, 798,449, 286,387 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 576,02, 722,32, 286,37 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 576,09, 639,972, 286,328 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 576,179, 562,047, 286,347 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 576,228, 562,634, 422,427 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 575,934, 639,626, 422,382 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 575,884, 721,974, 422,339 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 575,957, 797,894, 422,338 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 575,716, 879,939, 422,361 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 575,772, 959,691, 422,379 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1474,17, 1289,18, 151,014 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1474,54, 1204,81, 150,954 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1650,85, 1204,74, 150,921 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1651,28, 1288,67, 150,949 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 62,3962, 4348,73, 313,622 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 62,2957, 3771,75, 313,857 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 675,772, 863,407, 723,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -778,598, -127,715, 99,005 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -764,966, -126,217, 97,0285 ); - ent.v[ "angles" ] = ( 67, 180, -180 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -794,06, -126,758, 97,2618 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 62 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -779,735, -140,756, 97,2735 ); - ent.v[ "angles" ] = ( 64, 90, 0 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -779,573, -113,357, 97,4315 ); - ent.v[ "angles" ] = ( 63, 271, 0 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -898,581, -126,843, 98,663 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 62 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -884,094, -113,441, 98,8328 ); - ent.v[ "angles" ] = ( 63, 271, 0 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -883,119, -127,799, 100,406 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -884,256, -140,84, 98,6748 ); - ent.v[ "angles" ] = ( 64, 90, 0 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -869,487, -126,301, 98,4298 ); - ent.v[ "angles" ] = ( 67, 180, -180 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -368,434, 1355,93, 134,387 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -368,529, 1304,26, 134,41 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -909,869, 2933,34, -45,0905 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 221 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -888,329, 2957,39, -29,2049 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 221 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -866,258, 2980,95, -13,3263 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 221 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -843,931, 3004,18, 2,89832 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 221 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -821,874, 3027,75, 18,7913 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 221 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -865,306, 2878,96, -45,0933 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 221 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -840,549, 2899,23, -29,2758 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 221 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -815,79, 2919,5, -13,3795 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 221 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -791,259, 2940,06, 2,85001 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 221 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -766,301, 2960,09, 18,7407 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 221 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -822,691, 2264,91, -45,2797 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -791,177, 2259,3, -29,1206 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -759,688, 2253,58, -13,238 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -728,193, 2247,94, 2,77205 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -696,679, 2242,41, 18,6863 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -807,335, 2351,05, -45,1735 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -775,843, 2345,4, -29,31 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -744,335, 2339,81, -13,5038 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -712,883, 2333,88, 2,95604 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -681,271, 2328,9, 18,7888 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1246,2, 1998,99, -45,4696 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1246,45, 1966,98, -30,3683 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1246,36, 1934,98, -13,2638 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1246,43, 1902,98, 2,81664 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1246,24, 1870,98, 18,7651 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1325,64, 1870,99, 18,8021 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1325,8, 1902,99, 2,77237 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1325,95, 1934,99, -13,3164 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1325,86, 1966,98, -29,3535 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_stair_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1325,98, 1998,99, -45,5077 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 628,333, 334,603, 59,5787 ); - ent.v[ "angles" ] = ( 334,512, 105,255, -8,17945 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 527,916, 336,229, 59,1082 ); - ent.v[ "angles" ] = ( 332,926, 59,1992, 12,1763 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1047,35, 806,342, -15,875 ); - ent.v[ "angles" ] = ( 317, 273, 0 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -960,556, 830,882, -37,7672 ); - ent.v[ "angles" ] = ( 308,01, 271,725, -1,08843 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 653,557, 877,909, 271,374 ); - ent.v[ "angles" ] = ( 319, 180, 180 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_glow_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -159,628, 2550,31, 292,629 ); - ent.v[ "angles" ] = ( 58,6954, 359,606, -89,814 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_glow_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -155,687, 2431,48, 294,46 ); - ent.v[ "angles" ] = ( 60,0946, 359,816, -89,7315 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_glow_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1150,88, 1962,62, 212,343 ); - ent.v[ "angles" ] = ( 90, 0, -90,4 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_flour_glow_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1150,59, 3018,88, 212,332 ); - ent.v[ "angles" ] = ( 90, 0, -90,4 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_modern_sconce" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1070,93, 17,3912, 144,377 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_modern_sconce" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1261,45, 166,907, 144,076 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_modern_sconce" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 728,324, 15,9815, 143,643 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_modern_sconce" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 821,524, 313,055, 148,414 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_modern_sconce" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1260,35, 561,024, 124,251 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 101 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_modern_sconce" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 953,039, 817,397, 130,096 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 101 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_modern_sconce" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 952,959, 1046,36, 130,139 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 101 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 603,882, 768,966, 44,1204 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 587,008, 719,567, 43,834 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 586,979, 559,646, 43,737 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 513,034, 496,762, 43,8888 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 513,037, 374,251, 43,9159 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 695,553, 1634,04, -19,8938 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 307 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 734,405, 1672,63, -21,9928 ); - ent.v[ "angles" ] = ( 360, 322, -180 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 419,353, 1671,36, -20,7047 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 217 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 456,661, 1632,58, -21,8037 ); - ent.v[ "angles" ] = ( 0, 231, -180 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 732,729, 1913,98, -20,5855 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 38 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 696,37, 1950,15, -20,6845 ); - ent.v[ "angles" ] = ( 0, 51, -180 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 457,625, 1951,12, -19,4472 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 128 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_blue_pulse_curve" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 416,54, 1909,79, -20,5462 ); - ent.v[ "angles" ] = ( 360, 142, -180 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3630,8, 2316,3, 118,388 ); - ent.v[ "angles" ] = ( 87, 180, -180 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3637,9, 2416,64, 133,734 ); - ent.v[ "angles" ] = ( 87, 180, -180 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3798,32, 2488,05, 88 ); - ent.v[ "angles" ] = ( 87, 180, -180 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3630,95, 2661,26, 134,723 ); - ent.v[ "angles" ] = ( 87, 180, -180 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3648,16, 2579,75, 132 ); - ent.v[ "angles" ] = ( 87, 180, -180 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_tak_shuttle_frame_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3921,22, 3187,7, 423,648 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 2 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_tak_shuttle_frame_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3920,27, 3187,11, 935,695 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 2 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_tak_shuttle_frame_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3920,85, 3187,05, 1450,43 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 2 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_tak_shuttle_frame_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3925, 3187,79, 1962,55 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 2 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam_w" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3728,67, 1859,17, -145,008 ); - ent.v[ "angles" ] = ( 8, 206, 0 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam_w" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3635,65, 3113,8, -99,577 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 154 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_spotlight" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1020,28, 3043,88, 198,93 ); - ent.v[ "angles" ] = ( 23,903, 238,53, -2,22219 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_spotlight" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1050,85, 1917,98, 198,766 ); - ent.v[ "angles" ] = ( 19, 104, 0 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_wall_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1173,59, 1835,3, 187,012 ); - ent.v[ "angles" ] = ( 45,9894, 269,397, 1,24654 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_wall_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -767,364, 3022,42, 195,834 ); - ent.v[ "angles" ] = ( 55, 39, 0 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1640,79, 1673,45, 32,1748 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1480,46, 1673,44, 32,1118 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1430,55, 1639,88, 31,847 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1430,54, 1367,17, 31,8153 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1224,99, 1134,97, 2,86676 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1224,67, 1113,02, 18,732 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1304,58, 1112,93, 18,9678 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1304,58, 1134,99, 3,14237 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 638,59, 817,475, 63,9314 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 638,581, 945,569, 63,9124 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 638,604, 1057,28, -8,0104 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 596,465, 6,55402, 13,8712 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 689,171, -1,88044, 32,4838 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 913,339, -1,87295, 32,3582 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 533,993, 321,006, 12,1779 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 621,583, 321,072, 11,9689 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 672,793, 1089,43, -8,07374 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 912,952, 1089,42, -8,09043 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 597,295, 17,4297, 13,9255 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1169,38, 1089,39, 40,0032 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1697,54, 1521,2, 31,6123 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1697,41, 1360,26, 32,0627 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1697,43, 1128,86, 32,0431 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1697,99, 975,735, 13,6263 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1697,9, 829,795, 13,8588 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1281,47, 592,892, 32,1985 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1281,43, 336,155, 32,1496 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1281,46, 49,4862, 32,1446 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1649,09, 1078,58, 31,9207 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1456,8, 1078,6, 31,976 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1519,11, 798,059, 13,7796 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1664,56, 798,056, 13,7821 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1665,63, 1009,91, 13,8624 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1522,02, 1009,92, 13,8339 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1486,07, 978,77, 13,8024 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1486,07, 831,541, 13,8139 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1671,73, 1193,41, 32,0709 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1457,79, 1193,45, 31,8305 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 638,587, 65,0128, 32,0535 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 638,534, 296,444, 32,1816 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_tak_shuttle_thruster_steam_w" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4297,09, 2076,79, -86,4624 ); - ent.v[ "angles" ] = ( 339,001, 222,048, -7,18342 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -510,773, 3298,08, 32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 241 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -10,1306, 2497, 32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 279 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 62,5652, 2626,85, 32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 46,4937, 2276,87, 32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 227 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -305,802, 2032,39, 32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 169 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -837,933, 1493,27, 32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 68 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -859,011, 1476,01, 32,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 96 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1150,83, 964,907, 0,125004 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 159 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1154,2, 932,522, 0,124999 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -627,997, -95,0112, 0,124999 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 143 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -166,466, 103,361, 0,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 162 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1264,8, 992,268, 32,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 222 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1258,27, 994,823, 32,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 156 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 952,542, 619,736, 0,124996 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 310 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 714,211, 99,0093, 0,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 46 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 943,322, 109,799, 0,124999 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 161 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -294,714, 1082,19, 32,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 225 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1698,79, 1841,52, 0,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 189 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1692,43, 1877,86, 0,124997 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 168 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 658,848, 2661,56, 32,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 158 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 629,085, 2654, 32,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 167 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 518,661, 3510,54, 32,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 168 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_exterior_short_sm_fst" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -207,531, 793,291, 32,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 162 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1361,74, 1813,37, 143,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 166 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1153,17, 1423,92, 100,245 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 187 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 864,537, 3032,53, 119,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 208 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -619,301, 5562,1, 115,301 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 182 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 171,604, 755,813, 136,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 173 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 624,657, -207,926, 81,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 173 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2945,29, 1737,31, -102,881 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 173 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2759,13, 1216,56, -58,7997 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 173 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2917,57, 1492,47, -326,273 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 173 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2565,47, 702,299, -259,373 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 183 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2171,8, 3831,34, -315,863 ); - ent.v[ "angles" ] = ( 347,163, 194,233, -2,06839 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1954,82, 4907,56, -478,092 ); - ent.v[ "angles" ] = ( 357,456, 205,035, -1,59106 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2346,22, 2960,37, -567,725 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 173 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1988,48, 1920,49, -5,04919 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1931,01, 3116,27, -21,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2224,94, -579,193, -468,523 ); - ent.v[ "angles" ] = ( 351,102, 188,102, -0,785699 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -189,799, -634,757, -525,232 ); - ent.v[ "angles" ] = ( 354,032, 179,033, -0,629524 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 527,666, 1774,13, 99,1583 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 222 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vent_steam_line_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 452,17, -227,665, 0,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 724,945, 847,713, 154,942 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 724,947, 912,609, 154,94 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 748,926, 913,241, 139,011 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 748,963, 847,764, 138,903 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 857,691, 715,031, 106,914 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 792,029, 715,047, 106,92 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 791,936, 643,056, 58,9436 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 857,277, 643,026, 58,8678 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 503,931, 2391,05, -13,0811 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue_stair" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 424,05, 2391,06, -12,9671 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2002; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -592,125, 1207,71, 114,394 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 172 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_tak_steam_hvac" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 241,412, 1142,85, 269,079 ); - ent.v[ "angles" ] = ( 357,185, 168,987, -1,89627 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -451,879, 2755,46, 32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 238 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -563,421, 2578,01, 32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 307 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1320,27, 1711,23, 32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 26 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -822,372, 1921,7, 32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 331 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_wall_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1311,53, 2672,75, 159,445 ); - ent.v[ "angles" ] = ( 56,9567, 224,576, 2,54828 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_wall_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -923,639, 1895,27, 186,96 ); - ent.v[ "angles" ] = ( 61,0597, 296,595, 0,136797 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -781,676, 3005,14, 98 ); - ent.v[ "angles" ] = ( 6, 228, 0 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1259,22, 1887,77, 87 ); - ent.v[ "angles" ] = ( 14,979, 87,8943, -0,80343 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1238,04, 3158,22, 215,126 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1134,03, 3154,06, 215,1 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1038,13, 3125,91, 215,12 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -950,262, 3094,03, 215,118 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -870,234, 3049,7, 215,127 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -801,808, 2982,05, 215,122 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -753,974, 2898,15, 215,113 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -725,644, 2821,96, 215,128 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -706,028, 2733,44, 215,148 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -697,899, 2641,97, 215,109 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -689,368, 2541,93, 215,151 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -686,227, 2437,93, 215,128 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -693,586, 2338,09, 215,145 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -713,92, 2237,89, 215,108 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -765,482, 2145,81, 215,141 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -837,98, 2054,13, 215,11 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -946,049, 1978,34, 215,128 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1077,59, 1917,81, 215,141 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1217,85, 1890,04, 215,105 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_upl_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1803,92, 2287,73, 280,207 ); - ent.v[ "angles" ] = ( 89,4613, 158,17, -111,832 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 780,432, 3145,51, 46,6706 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 972,405, 3145,5, 46,775 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createexploder( "fx_tak_light_blue" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 659,913, 3689,5, 46,8525 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2001; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_steam_amb_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -132,209, 4762,87, 290,801 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 186 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_tak_steam_hvac" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 214,543, 3134,04, 194,557 ); - ent.v[ "angles" ] = ( 357, 168, 0 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 963,288, 937,543, 151,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -567,787, 2121,14, 205,091 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -568,3, 2265,36, 205,097 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -360,016, 2265,37, 205,083 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -360,054, 2409,07, 205,113 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -464,079, 2409,51, 205,085 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -568,324, 2409,53, 205,112 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -567,731, 2856,69, 205,126 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -567,911, 2697,52, 205,077 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -463,919, 2697,29, 205,076 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -359,705, 2697,6, 205,087 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -359,952, 2569,49, 205,077 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -464,03, 2569,28, 205,081 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -567,591, 2569,18, 205,091 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1237,63, 3157,03, 215,203 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1217,34, 1890,9, 215,172 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1078,51, 1918,02, 215,146 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -946,246, 1978,07, 215,131 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -838,025, 2054,32, 215,116 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -766,197, 2146,19, 215,111 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -714,141, 2238,07, 215,116 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -693,975, 2338,32, 215,117 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -686,745, 2438,16, 215,17 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -689,828, 2542,63, 215,165 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -697,525, 2641,64, 215,16 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -706,664, 2734,36, 215,146 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -726,149, 2821,76, 215,122 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -754,147, 2897,64, 215,137 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -802,209, 2981,43, 215,157 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -870,177, 3049,94, 215,112 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -950,342, 3093,78, 215,15 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1037,98, 3125,61, 215,136 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1134,85, 3153,46, 215,18 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1438,3, 2317,09, 159,125 ); - ent.v[ "angles" ] = ( 90, 351,822, -98,1783 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1610,96, 2494,98, 151,875 ); - ent.v[ "angles" ] = ( 90, 351,822, -98,1783 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1007,68, 2678,46, 151,875 ); - ent.v[ "angles" ] = ( 90, 351,822, -98,1783 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1112,74, 2889,84, 146,587 ); - ent.v[ "angles" ] = ( 90, 351,822, -98,1783 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1239,49, 2313,33, 280,347 ); - ent.v[ "angles" ] = ( 90, 351,822, -98,1783 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -707,732, 1466,49, 134,076 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -771,867, 1466,58, 134,07 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -835,617, 1466,68, 134,085 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -900,001, 1466,36, 134,095 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool_sm_soft" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -963,95, 1466,25, 134,093 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_modern_sconce" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1233,38, 334,426, 123,691 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 101 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_tak_light_sign_glow_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1430,55, 2115,51, 134,592 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "delay" ] = -64; -} diff --git a/Multiplayer Maps/mp_takeoff/maps/mp/mp_takeoff.gsc b/Multiplayer Maps/mp_takeoff/maps/mp/mp_takeoff.gsc deleted file mode 100644 index 064f859..0000000 --- a/Multiplayer Maps/mp_takeoff/maps/mp/mp_takeoff.gsc +++ /dev/null @@ -1,353 +0,0 @@ -#include maps/mp/gametypes/_spawning; -#include maps/mp/_compass; -#include common_scripts/utility; -#include maps/mp/_events; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - level.overrideplayerdeathwatchtimer = ::leveloverridetime; - level.useintermissionpointsonwavespawn = ::useintermissionpointsonwavespawn; - maps/mp/mp_takeoff_fx::main(); - precachemodel( "collision_nosight_wall_64x64x10" ); - precachemodel( "collision_clip_wall_128x128x10" ); - precachemodel( "collision_mp_takeoff_solar_weap" ); - maps/mp/_load::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_takeoff" ); - setdvar( "compassmaxrange", "2100" ); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -915, 790, 212 ), ( 0, 0, 1 ) ); - spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -979, 790, 212 ), ( 0, 0, 1 ) ); - spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -1043, 790, 212 ), ( 0, 0, 1 ) ); - spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -1083, 790, 212 ), ( 0, 0, 1 ) ); - spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -915, 790, 148 ), ( 0, 0, 1 ) ); - spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -979, 790, 148 ), ( 0, 0, 1 ) ); - spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -1043, 790, 148 ), ( 0, 0, 1 ) ); - spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -1083, 790, 148 ), ( 0, 0, 1 ) ); - spawncollision( "collision_clip_wall_128x128x10", "collider", ( 136, 2511, 245,5 ), vectorScale( ( 0, 0, 1 ), 90 ) ); - spawncollision( "collision_mp_takeoff_solar_weap", "collider", ( 580, 3239,5, 32,5 ), ( 0, 0, 1 ) ); - maps/mp/gametypes/_spawning::level_use_unified_spawning( 1 ); - level thread dog_jump_think(); - level.disableoutrovisionset = 1; - level.mptakeoffrocket = getent( "takeoff_rocket", "targetname" ); -/# - assert( isDefined( level.mptakeoffrocket ), "Unable to find entity with targetname: 'takeoff_rocket'" ); -#/ - level.endgamefunction = ::takeoff_end_game; - level.preendgamefunction = ::takeoff_pre_end_game; - level thread setuprocketcamera(); -/# - execdevgui( "devgui_mp_takeoff" ); - level thread watchdevnotify(); - level thread devgui_endgame(); -#/ -} - -dog_jump_think() -{ - origin = ( 209, 3819, 91 ); - trigger = spawn( "trigger_box", origin, getaitriggerflags(), 64, 32, 64 ); - trigger setexcludeteamfortrigger( "none" ); - for ( ;; ) - { - trigger waittill( "trigger", entity ); - if ( isai( entity ) ) - { - glassradiusdamage( origin, 64, 5001, 5000 ); - trigger delete(); - return; - } - } -} - -setuprocketcamera() -{ - wait 0,1; - getrocketcamera(); -} - -getrocketcamera() -{ - camerastruct = getstruct( "endgame_first_camera", "targetname" ); -/# - assert( isDefined( camerastruct ), "Unable to find entity with targetname: 'endgame_first_camera'" ); -#/ - if ( !isDefined( level.rocketcamera ) ) - { - level.rocketcamera = spawn( "script_model", camerastruct.origin ); - level.rocketcamera setmodel( "tag_origin" ); - } - else - { - level.rocketcamera.origin = camerastruct.origin; - } - level.rocketcamera.angles = camerastruct.angles; - return level.rocketcamera; -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2300", reset_dvars ); -} - -watchdevnotify() -{ -/# - startvalue = 0; - setdvarint( "scr_takeoff_rocket", startvalue ); - for ( ;; ) - { - takeoff_rocket = getDvarInt( #"12AE1013" ); - if ( takeoff_rocket != startvalue ) - { - level notify( "dev_takeoff_rocket" ); - startvalue = takeoff_rocket; - } - wait 0,2; -#/ - } -} - -devgui_endgame() -{ -/# - rocket = level.mptakeoffrocket; - assert( isDefined( rocket ), "Unable to find entity with targetname: 'takeoff_rocket'" ); - rocketorigin = rocket.origin; - rocketangles = rocket.angles; - rocketmodel = rocket.model; - for ( ;; ) - { - level waittill( "dev_takeoff_rocket" ); - visionsetnaked( "blackout", 0,1 ); - thread takeoff_pre_end_game(); - wait 1; - visionsetnaked( "mp_takeoff", 0,1 ); - thread takeoff_end_game(); - wait 4,5; - level notify( "debug_end_takeoff" ); - wait 1; - visionsetnaked( "mp_takeoff", 0,1 ); - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - player cameraactivate( 0 ); - i++; - } - stop_exploder( 1001 ); - rocket delete(); - rocket = spawn( "script_model", rocketorigin ); - rocket.angles = rocketangles; - rocket setmodel( rocketmodel ); - level.mptakeoffrocket = rocket; -#/ - } -} - -water_trigger_init() -{ - wait 3; - triggers = getentarray( "trigger_hurt", "classname" ); - _a206 = triggers; - _k206 = getFirstArrayKey( _a206 ); - while ( isDefined( _k206 ) ) - { - trigger = _a206[ _k206 ]; - if ( trigger.origin[ 2 ] > level.mapcenter[ 2 ] ) - { - } - else - { - trigger thread water_trigger_think(); - } - _k206 = getNextArrayKey( _a206, _k206 ); - } - triggers = getentarray( "water_killbrush", "targetname" ); - _a218 = triggers; - _k218 = getFirstArrayKey( _a218 ); - while ( isDefined( _k218 ) ) - { - trigger = _a218[ _k218 ]; - trigger thread player_splash_think(); - _k218 = getNextArrayKey( _a218, _k218 ); - } -} - -player_splash_think() -{ - for ( ;; ) - { - self waittill( "trigger", entity ); - if ( isplayer( entity ) && isalive( entity ) ) - { - self thread trigger_thread( entity, ::player_water_fx ); - } - } -} - -player_water_fx( player, endon_condition ) -{ - maxs = self.origin + self getmaxs(); - if ( maxs[ 2 ] > 60 ) - { - maxs += vectorScale( ( 0, 0, 1 ), 10 ); - } - origin = ( player.origin[ 0 ], player.origin[ 1 ], maxs[ 2 ] ); - playfx( level._effect[ "water_splash_sm" ], origin ); -} - -water_trigger_think() -{ - for ( ;; ) - { - self waittill( "trigger", entity ); - if ( isplayer( entity ) ) - { - entity playsound( "mpl_splash_death" ); - playfx( level._effect[ "water_splash" ], entity.origin + vectorScale( ( 0, 0, 1 ), 40 ) ); - } - } -} - -leveloverridetime( defaulttime ) -{ - if ( self isinwater() ) - { - return 0,4; - } - return defaulttime; -} - -useintermissionpointsonwavespawn() -{ - return self isinwater(); -} - -isinwater() -{ - triggers = getentarray( "trigger_hurt", "classname" ); - _a283 = triggers; - _k283 = getFirstArrayKey( _a283 ); - while ( isDefined( _k283 ) ) - { - trigger = _a283[ _k283 ]; - if ( trigger.origin[ 2 ] > level.mapcenter[ 2 ] ) - { - } - else - { - if ( self istouching( trigger ) ) - { - return 1; - } - } - _k283 = getNextArrayKey( _a283, _k283 ); - } - return 0; -} - -takeoff_pre_end_game( timetillendgame, debug ) -{ - if ( !isDefined( debug ) ) - { - level waittill( "play_final_killcam" ); - wait 10; - } - rocket = level.mptakeoffrocket; -/# - assert( isDefined( rocket ), "Unable to find entity with targetname: 'takeoff_rocket'" ); -#/ - rocket rocket_thrusters_initialize(); -} - -takeoff_end_game() -{ -/# - level endon( "debug_end_takeoff" ); -#/ - level.rocket_camera = 0; - rocket = level.mptakeoffrocket; - rocket playsound( "evt_shuttle_launch" ); -/# - assert( isDefined( rocket ), "Unable to find entity with targetname: 'takeoff_rocket'" ); -#/ - rocket rocket_thrusters_initialize(); - cameraone = getrocketcamera(); - cameraone thread vibrateaftertime( getdvarfloatdefault( "mp_takeoff_shakewait", 0,5 ) ); - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - player camerasetposition( cameraone ); - player camerasetlookat(); - player cameraactivate( 1 ); - player setdepthoffield( 0, 0, 512, 512, 4, 0 ); - i++; - } - level.rocket_camera = 1; - rocket thread rocket_move(); - wait 4; - visionsetnaked( "blackout", getdvarfloatdefault( "mp_takeoff_fade_black", 0,5 ) ); -} - -rocket_thrusters_initialize() -{ - if ( !isDefined( self.thrustersinited ) ) - { - self.thrustersinited = 1; - exploder( 1001 ); - playfxontag( level._effect[ "fx_mp_tak_shuttle_thruster_lg" ], self, "tag_fx" ); - playfxontag( level._effect[ "fx_mp_tak_shuttle_thruster_sm" ], self, "tag_fx5" ); - playfxontag( level._effect[ "fx_mp_tak_shuttle_thruster_md" ], self, "tag_fx6" ); - playfxontag( level._effect[ "fx_mp_tak_shuttle_thruster_sm" ], self, "tag_fx7" ); - } -} - -rocket_move() -{ - origin = self.origin; - heightincrease = getdvarintdefault( "mp_takeoff_rocket_start_height", 0 ); - self.origin += ( 0, 0, heightincrease ); - movetime = getdvarintdefault( "mp_takeoff_moveTime", 17 ); - moveaccelratio = getdvarfloatdefault( "mp_takeoff_moveAccel", 1 ); - self moveto( self.origin + vectorScale( ( 0, 0, 1 ), 50000 ), movetime, movetime * moveaccelratio ); - self waittill( "movedone" ); - origin = self.origin; -} - -vibrateaftertime( waittime ) -{ - self endon( "death" ); -/# - level endon( "debug_end_takeoff" ); -#/ - wait waittime; - pitchvibrateamplitude = getdvarfloatdefault( "mp_takeoff_start", 0,1 ); - vibrateamplitude = getdvarfloatdefault( "mp_takeoff_a_start", 0,1 ); - vibratetime = 0,05; - originalangles = self.angles; - for ( ;; ) - { - angles0 = ( originalangles[ 0 ] - pitchvibrateamplitude, originalangles[ 1 ], originalangles[ 2 ] - vibrateamplitude ); - angles1 = ( originalangles[ 0 ] + pitchvibrateamplitude, originalangles[ 1 ], originalangles[ 2 ] + vibrateamplitude ); - self rotateto( angles0, vibratetime ); - self waittill( "rotatedone" ); - self rotateto( angles1, vibratetime ); - self waittill( "rotatedone" ); - vibrateamplitude *= getdvarfloatdefault( "mp_takeoff_amp_vredux", 1,12 ); - pitchvibrateamplitude = 0 - pitchvibrateamplitude; - pitchvibrateamplitude *= getdvarfloatdefault( "mp_takeoff_amp_predux", 1,11 ); - } -} diff --git a/Multiplayer Maps/mp_takeoff/maps/mp/mp_takeoff_amb.gsc b/Multiplayer Maps/mp_takeoff/maps/mp/mp_takeoff_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_takeoff/maps/mp/mp_takeoff_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_takeoff/maps/mp/mp_takeoff_fx.gsc b/Multiplayer Maps/mp_takeoff/maps/mp/mp_takeoff_fx.gsc deleted file mode 100644 index 8ea1560..0000000 --- a/Multiplayer Maps/mp_takeoff/maps/mp/mp_takeoff_fx.gsc +++ /dev/null @@ -1,95 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); -#using_animtree( "fxanim_props_dlc4" ); - -main() -{ - maps/mp/createfx/mp_takeoff_fx::main(); - precache_fxanim_props(); - precache_fxanim_props_dlc4(); - precache_scripted_fx(); - precache_createfx_fx(); -} - -precache_scripted_fx() -{ -} - -precache_createfx_fx() -{ - level._effect[ "fx_light_exit_sign" ] = loadfx( "light/fx_light_exit_sign_glow" ); - level._effect[ "fx_light_flour_glow_cool" ] = loadfx( "light/fx_tak_light_flour_glow_cool" ); - level._effect[ "fx_tak_light_flour_glow_cool_sm" ] = loadfx( "light/fx_tak_light_flour_glow_cool_sm" ); - level._effect[ "fx_light_upl_flour_glow_v_shape_cool" ] = loadfx( "light/fx_light_upl_flour_glow_v_shape_cool" ); - level._effect[ "fx_light_recessed_blue" ] = loadfx( "light/fx_light_recessed_blue" ); - level._effect[ "fx_light_recessed_cool_sm_soft" ] = loadfx( "light/fx_light_recessed_cool_sm_soft" ); - level._effect[ "fx_mp_tak_glow_blue" ] = loadfx( "maps/mp_maps/fx_mp_tak_glow_blue" ); - level._effect[ "fx_mp_tak_glow_orange" ] = loadfx( "maps/mp_maps/fx_mp_tak_glow_orange" ); - level._effect[ "fx_mp_tak_glow_yellow" ] = loadfx( "maps/mp_maps/fx_mp_tak_glow_yellow" ); - level._effect[ "fx_mp_tak_glow_red" ] = loadfx( "maps/mp_maps/fx_mp_tak_glow_red" ); - level._effect[ "fx_tak_light_flour_glow_ceiling" ] = loadfx( "light/fx_tak_light_flour_glow_ceiling" ); - level._effect[ "fx_tak_light_flour_sqr_lg" ] = loadfx( "light/fx_tak_light_flour_sqr_lg" ); - level._effect[ "fx_tak_light_flour_rnd_lg" ] = loadfx( "light/fx_tak_light_flour_rnd_lg" ); - level._effect[ "fx_tak_light_tv_glow_blue" ] = loadfx( "light/fx_tak_light_tv_glow_blue" ); - level._effect[ "fx_tak_light_tv_glow_blue_flckr" ] = loadfx( "light/fx_tak_light_tv_glow_blue_flckr" ); - level._effect[ "fx_drone_light_yellow" ] = loadfx( "light/fx_drone_light_yellow" ); - level._effect[ "fx_tak_light_sign_glow_blue" ] = loadfx( "light/fx_tak_light_sign_glow_blue" ); - level._effect[ "fx_tak_light_blue_stair" ] = loadfx( "light/fx_tak_light_blue_stair" ); - level._effect[ "fx_tak_light_blue_stair_sm" ] = loadfx( "light/fx_tak_light_blue_stair_sm" ); - level._effect[ "fx_tak_light_blue" ] = loadfx( "light/fx_tak_light_blue" ); - level._effect[ "fx_tak_light_blue_pulse" ] = loadfx( "light/fx_tak_light_blue_pulse" ); - level._effect[ "fx_tak_light_blue_pulse_curve" ] = loadfx( "light/fx_tak_light_blue_pulse_curve" ); - level._effect[ "fx_light_beacon_yellow" ] = loadfx( "light/fx_light_beacon_yellow" ); - level._effect[ "fx_light_beacon_red_blink_fst_sm" ] = loadfx( "light/fx_light_beacon_red_blink_fst_sm" ); - level._effect[ "fx_tak_light_modern_sconce" ] = loadfx( "light/fx_tak_light_modern_sconce" ); - level._effect[ "fx_tak_light_spotlight" ] = loadfx( "light/fx_tak_light_spotlight" ); - level._effect[ "fx_tak_light_wall_ext" ] = loadfx( "light/fx_tak_light_wall_ext" ); - level._effect[ "fx_mp_light_dust_motes_md" ] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); - level._effect[ "fx_mp_tak_dust_ground" ] = loadfx( "maps/mp_maps/fx_mp_tak_dust_ground" ); - level._effect[ "fx_tak_water_fountain_pool_sm" ] = loadfx( "water/fx_tak_water_fountain_pool_sm" ); - level._effect[ "fx_paper_interior_short_sm" ] = loadfx( "debris/fx_paper_interior_short_sm" ); - level._effect[ "fx_paper_exterior_short_sm_fst" ] = loadfx( "debris/fx_paper_exterior_short_sm_fst" ); - level._effect[ "fx_insects_swarm_md_light" ] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); - level._effect[ "fx_mp_vent_heat_distort" ] = loadfx( "maps/mp_maps/fx_mp_vent_heat_distort" ); - level._effect[ "fx_mp_tak_steam_loading_dock" ] = loadfx( "maps/mp_maps/fx_mp_tak_steam_loading_dock" ); - level._effect[ "fx_mp_vent_steam_line" ] = loadfx( "maps/mp_maps/fx_mp_vent_steam_line" ); - level._effect[ "fx_mp_vent_steam_line_sm" ] = loadfx( "maps/mp_maps/fx_mp_vent_steam_line_sm" ); - level._effect[ "fx_mp_vent_steam_line_lg" ] = loadfx( "maps/mp_maps/fx_mp_vent_steam_line_lg" ); - level._effect[ "fx_mp_steam_amb_xlg" ] = loadfx( "maps/mp_maps/fx_mp_steam_amb_xlg" ); - level._effect[ "fx_mp_tak_steam_hvac" ] = loadfx( "maps/mp_maps/fx_mp_tak_steam_hvac" ); - level._effect[ "fx_lf_mp_overflow_sun1" ] = loadfx( "lens_flares/fx_lf_mp_overflow_sun1" ); - level._effect[ "fx_lf_mp_takeoff_sun1" ] = loadfx( "lens_flares/fx_lf_mp_takeoff_sun1" ); - level._effect[ "fx_mp_tak_shuttle_thruster_lg" ] = loadfx( "maps/mp_maps/fx_mp_tak_shuttle_thruster_lg" ); - level._effect[ "fx_mp_tak_shuttle_thruster_md" ] = loadfx( "maps/mp_maps/fx_mp_tak_shuttle_thruster_md" ); - level._effect[ "fx_mp_tak_shuttle_thruster_sm" ] = loadfx( "maps/mp_maps/fx_mp_tak_shuttle_thruster_sm" ); - level._effect[ "fx_mp_tak_shuttle_thruster_smk_grnd" ] = loadfx( "maps/mp_maps/fx_mp_tak_shuttle_thruster_smk_grnd" ); - level._effect[ "fx_mp_tak_shuttle_thruster_steam" ] = loadfx( "maps/mp_maps/fx_mp_tak_shuttle_thruster_steam" ); - level._effect[ "fx_mp_tak_shuttle_thruster_steam_w" ] = loadfx( "maps/mp_maps/fx_mp_tak_shuttle_thruster_steam_w" ); - level._effect[ "fx_mp_tak_shuttle_frame_light" ] = loadfx( "maps/mp_maps/fx_mp_tak_shuttle_frame_light" ); - level._effect[ "fx_mp_tak_steam_nozzle" ] = loadfx( "maps/mp_maps/fx_mp_tak_steam_nozzle" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "seagull_circle_01" ] = %fxanim_gp_seagull_circle_01_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_02" ] = %fxanim_gp_seagull_circle_02_anim; - level.scr_anim[ "fxanim_props" ][ "seagull_circle_03" ] = %fxanim_gp_seagull_circle_03_anim; - level.scr_anim[ "fxanim_props" ][ "windsock" ] = %fxanim_gp_windsock_anim; -} - -precache_fxanim_props_dlc4() -{ - level.scr_anim[ "fxanim_props_dlc4" ][ "decont_blasters" ] = %fxanim_mp_takeoff_decont_blasters_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "scaffold_wires_01" ] = %fxanim_mp_takeoff_scaffold_wires_01_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "crane_hooks" ] = %fxanim_mp_takeoff_crane_hooks_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "rattling_sign" ] = %fxanim_mp_takeoff_rattling_sign_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "radar01" ] = %fxanim_mp_takeoff_satellite_dish_01_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "radar02" ] = %fxanim_mp_takeoff_satellite_dish_02_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "radar03" ] = %fxanim_mp_takeoff_satellite_dish_03_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "radar04" ] = %fxanim_mp_takeoff_satellite_dish_04_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "radar05" ] = %fxanim_mp_takeoff_satellite_dish_05_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "banners" ] = %fxanim_mp_takeoff_banner_01_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "planets" ] = %fxanim_mp_takeoff_planets_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "banners_lrg" ] = %fxanim_mp_takeoff_banner_lrg_anim; -} diff --git a/Multiplayer Maps/mp_turbine/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_turbine/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_turbine/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_turbine/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_turbine/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_turbine/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_turbine/maps/mp/createart/mp_turbine_art.gsc b/Multiplayer Maps/mp_turbine/maps/mp/createart/mp_turbine_art.gsc deleted file mode 100644 index 4062e15..0000000 --- a/Multiplayer Maps/mp_turbine/maps/mp/createart/mp_turbine_art.gsc +++ /dev/null @@ -1,41 +0,0 @@ - -main() -{ - level.tweakfile = 1; - setdvar( "scr_fog_exp_halfplane", "3759.28" ); - setdvar( "scr_fog_exp_halfheight", "243.735" ); - setdvar( "scr_fog_nearplane", "601.593" ); - setdvar( "scr_fog_red", "0.806694" ); - setdvar( "scr_fog_green", "0.962521" ); - setdvar( "scr_fog_blue", "0.9624" ); - setdvar( "scr_fog_baseheight", "-475.268" ); - setdvar( "visionstore_glowTweakEnable", "0" ); - setdvar( "visionstore_glowTweakRadius0", "5" ); - setdvar( "visionstore_glowTweakRadius1", "" ); - setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); - setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); - setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); - setdvar( "visionstore_glowTweakBloomIntensity1", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); - start_dist = 1866,79; - half_dist = 3885,26; - half_height = 678,638; - base_height = 701,862; - fog_r = 0,52549; - fog_g = 0,258824; - fog_b = 0,117647; - fog_scale = 5,56828; - sun_col_r = 1; - sun_col_g = 1; - sun_col_b = 1; - sun_dir_x = -0,252383; - sun_dir_y = 0,230826; - sun_dir_z = 0,939693; - sun_start_ang = 0; - sun_stop_ang = 104,831; - time = 0; - max_fog_opacity = 0,921463; - setvolfog( start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale, sun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, sun_stop_ang, time, max_fog_opacity ); - visionsetnaked( "mp_turbine", 0 ); -} diff --git a/Multiplayer Maps/mp_turbine/maps/mp/createfx/mp_turbine_fx.gsc b/Multiplayer Maps/mp_turbine/maps/mp/createfx/mp_turbine_fx.gsc deleted file mode 100644 index 266a45e..0000000 --- a/Multiplayer Maps/mp_turbine/maps/mp/createfx/mp_turbine_fx.gsc +++ /dev/null @@ -1,1150 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_lg" ); - ent.v[ "origin" ] = ( -1406,93, 3142,59, 297,121 ); - ent.v[ "angles" ] = ( 3,199, 2,89313, -1,67808 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_lg" ); - ent.v[ "origin" ] = ( 694,313, 3884,36, -197,426 ); - ent.v[ "angles" ] = ( 350,85, 286,023, 2,62714 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); - ent.v[ "origin" ] = ( 862,108, 1186,49, 58,4705 ); - ent.v[ "angles" ] = ( 352,049, 249,11, 2,04621 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); - ent.v[ "origin" ] = ( -1061,35, 1247,45, 404,65 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 325 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -1365,35, 1572,96, 440,85 ); - ent.v[ "angles" ] = ( 357,905, 347, 0,501119 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_lg" ); - ent.v[ "origin" ] = ( -452,741, -289,627, 279,825 ); - ent.v[ "angles" ] = ( 4,73876, 313,002, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_lg" ); - ent.v[ "origin" ] = ( -295,966, -1209,25, 165,459 ); - ent.v[ "angles" ] = ( 359,505, 327,837, 0,949091 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( -902,648, -1952,23, 134,726 ); - ent.v[ "angles" ] = ( 356,138, 353,803, 0,637275 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_lg" ); - ent.v[ "origin" ] = ( 583,137, 5121,51, -277,77 ); - ent.v[ "angles" ] = ( 0,373405, 276,843, 1,98135 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); - ent.v[ "origin" ] = ( -631,986, 4760,2, 676,648 ); - ent.v[ "angles" ] = ( 5,19152, 308,8, -4,90136 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); - ent.v[ "origin" ] = ( -696,815, 3879,16, 584,648 ); - ent.v[ "angles" ] = ( 0,354917, 339,065, -1,2632 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); - ent.v[ "origin" ] = ( -483,116, 2041,97, 687,352 ); - ent.v[ "angles" ] = ( 358,18, 337,067, -0,704263 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); - ent.v[ "origin" ] = ( -611,764, 684,761, 691,902 ); - ent.v[ "angles" ] = ( 1,54352, 354,3, -2,40647 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); - ent.v[ "origin" ] = ( -408,605, 97,2704, 628,06 ); - ent.v[ "angles" ] = ( 6,862, 306,178, 1,11665 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); - ent.v[ "origin" ] = ( 1223,3, 845,474, 468,491 ); - ent.v[ "angles" ] = ( 357,821, 293,039, 0,224171 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md_lng" ); - ent.v[ "origin" ] = ( 1129,52, 62,0926, 628,811 ); - ent.v[ "angles" ] = ( 16, 295, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); - ent.v[ "origin" ] = ( 288,574, 1918,46, 222,648 ); - ent.v[ "angles" ] = ( 350,42, 319,396, -4,28809 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); - ent.v[ "origin" ] = ( -624,243, 5178,65, 960,096 ); - ent.v[ "angles" ] = ( 8,969, 317,957, -0,13832 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); - ent.v[ "origin" ] = ( 1704,68, 754,97, 444,426 ); - ent.v[ "angles" ] = ( 358,389, 337,971, -0,745886 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); - ent.v[ "origin" ] = ( 1453,59, 3593,12, 303,806 ); - ent.v[ "angles" ] = ( 0,258878, 316, -3,03393 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); - ent.v[ "origin" ] = ( -1268,56, 1893,84, 562,844 ); - ent.v[ "angles" ] = ( 1, 336, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); - ent.v[ "origin" ] = ( -1163,74, 2334,46, 577,898 ); - ent.v[ "angles" ] = ( 358,873, 338,927, -0,728582 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_edge_md" ); - ent.v[ "origin" ] = ( -556,151, 1033,24, 409,384 ); - ent.v[ "angles" ] = ( 356,012, 346,999, -0,104143 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( -928,736, -1432,33, 168,393 ); - ent.v[ "angles" ] = ( 359,318, 339,836, 0,825526 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); - ent.v[ "origin" ] = ( 77,0866, 2485,17, 299,642 ); - ent.v[ "angles" ] = ( 2,99589, 342,843, -3,00365 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg" ); - ent.v[ "origin" ] = ( -1466,07, 3172,14, 165 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 352 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_md" ); - ent.v[ "origin" ] = ( -1119,18, 1237,86, 378,199 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 345 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg" ); - ent.v[ "origin" ] = ( 891,74, 3012,06, -81,939 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 286 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg" ); - ent.v[ "origin" ] = ( 582,339, 5560,47, -168,019 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 274 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_swirl_lg_pipe" ); - ent.v[ "origin" ] = ( 898,253, 2355,64, 13,9226 ); - ent.v[ "angles" ] = ( 353,007, 258,022, -0,315824 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_swirl_lg_pipe" ); - ent.v[ "origin" ] = ( 657,024, 1492,34, 122,829 ); - ent.v[ "angles" ] = ( 341,835, 228,312, 1,77078 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_swirl_lg_pipe" ); - ent.v[ "origin" ] = ( -747,031, -301,723, 407,955 ); - ent.v[ "angles" ] = ( 14,6823, 296,035, 7,1564 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_swirl_sm_pipe" ); - ent.v[ "origin" ] = ( 603,333, 4425,56, -208,672 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 279 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_sm" ); - ent.v[ "origin" ] = ( -1432,82, 1566,2, 424,351 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_sm" ); - ent.v[ "origin" ] = ( -891,049, 960,815, 452,129 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 269 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_sm" ); - ent.v[ "origin" ] = ( -904,236, 596,015, 369,058 ); - ent.v[ "angles" ] = ( 6, 252, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_md" ); - ent.v[ "origin" ] = ( -951,789, 2715,96, 410,876 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 271 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg" ); - ent.v[ "origin" ] = ( 270,257, 4517,7, -217,082 ); - ent.v[ "angles" ] = ( 346, 246, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_md" ); - ent.v[ "origin" ] = ( 691,356, 3771,76, -109,39 ); - ent.v[ "angles" ] = ( 356, 282, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_md" ); - ent.v[ "origin" ] = ( -60,6774, 2037,37, 226,398 ); - ent.v[ "angles" ] = ( 359, 267, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_md" ); - ent.v[ "origin" ] = ( 476,955, 2480,05, 4,5545 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 257 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_md" ); - ent.v[ "origin" ] = ( 994,47, 1536,96, 12,0209 ); - ent.v[ "angles" ] = ( 354,007, 248,984, 0,315192 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_md" ); - ent.v[ "origin" ] = ( 563,019, 538,721, 204,526 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 243 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_md" ); - ent.v[ "origin" ] = ( 1505,02, 1033,18, 286,484 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg" ); - ent.v[ "origin" ] = ( -710,605, -1214,89, 147,245 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 319 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_md" ); - ent.v[ "origin" ] = ( 186,316, -576,102, 208,532 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 274 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); - ent.v[ "origin" ] = ( 747,206, -402,197, 662,219 ); - ent.v[ "angles" ] = ( 2,70496, 252,206, -2,5795 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); - ent.v[ "origin" ] = ( 798,039, -996,082, 534,492 ); - ent.v[ "angles" ] = ( 359,222, 246,005, -2,0119 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_sm" ); - ent.v[ "origin" ] = ( 1077,12, 4209,58, -117,659 ); - ent.v[ "angles" ] = ( 341, 324, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); - ent.v[ "origin" ] = ( 1422,01, 3353,93, 311,228 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 267 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); - ent.v[ "origin" ] = ( 290,243, 3514,05, 124,09 ); - ent.v[ "angles" ] = ( 359,48, 274,72, 2,88561 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); - ent.v[ "origin" ] = ( -709,655, 98,7326, 629,163 ); - ent.v[ "angles" ] = ( 3,25413, 213,059, 1,12483 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); - ent.v[ "origin" ] = ( -1181,97, 593,034, 637,965 ); - ent.v[ "angles" ] = ( 2,7712, 237,997, -0,145344 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md_lng" ); - ent.v[ "origin" ] = ( 1223,19, 4333,18, 172,3 ); - ent.v[ "angles" ] = ( 9,48348, 257,808, -1,28711 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); - ent.v[ "origin" ] = ( -182,631, 5330,66, 531,998 ); - ent.v[ "angles" ] = ( 5,82793, 312,395, -0,566427 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( -3182,82, 4803, -264,381 ); - ent.v[ "angles" ] = ( 349,052, 328,114, -0,905957 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -1584,36, 765,031, 333,865 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 288 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 543,265, -836,044, 325,543 ); - ent.v[ "angles" ] = ( 28,5249, 212,902, 4,00985 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 1632,56, 337,572, 259,391 ); - ent.v[ "angles" ] = ( 3,24263, 230,166, -0,809293 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 1450,28, 920,954, 275,006 ); - ent.v[ "angles" ] = ( 3,33384, 251,994, 4,20092 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 1728,84, 1765,33, 167,179 ); - ent.v[ "angles" ] = ( 357,746, 288,527, -3,10413 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 1526,29, 1443,57, 220,48 ); - ent.v[ "angles" ] = ( 2,15021, 344,778, -1,62638 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 1346,71, 1294,18, 243,9 ); - ent.v[ "angles" ] = ( 357,643, 308,917, 0,301857 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 1777,85, 1007,09, 268,742 ); - ent.v[ "angles" ] = ( 356,172, 285,895, 0,293392 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 1030,43, -576,162, 339,524 ); - ent.v[ "angles" ] = ( 353,557, 273,802, -0,680109 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 215,396, -496,881, 232,321 ); - ent.v[ "angles" ] = ( 10,4225, 288,799, 17,7869 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 1028,23, -510,248, 353,483 ); - ent.v[ "angles" ] = ( 349,971, 208,328, -1,50807 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 1689,23, 3332,65, 161 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 294 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); - ent.v[ "origin" ] = ( 1109,59, 2698,12, -156,358 ); - ent.v[ "angles" ] = ( 353,56, 289,597, 5,18696 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); - ent.v[ "origin" ] = ( 1216,84, 2143,6, -84,5535 ); - ent.v[ "angles" ] = ( 349,469, 258,235, 0,239357 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); - ent.v[ "origin" ] = ( 1233,65, 1706,03, 1,47629 ); - ent.v[ "angles" ] = ( 356,907, 243,409, 1,31402 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); - ent.v[ "origin" ] = ( 665,807, 2893,54, -117,775 ); - ent.v[ "angles" ] = ( 355,333, 237,1, -2,65095 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); - ent.v[ "origin" ] = ( -124,23, 1346,62, 241,419 ); - ent.v[ "angles" ] = ( 352,984, 265,323, 2,18371 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_md" ); - ent.v[ "origin" ] = ( -223,36, 1107,29, 295,599 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 272 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_md" ); - ent.v[ "origin" ] = ( -164,955, -895,34, 238,101 ); - ent.v[ "angles" ] = ( 4, 281, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_md" ); - ent.v[ "origin" ] = ( 348,49, 4977,43, -240,79 ); - ent.v[ "angles" ] = ( 351,05, 234,926, 0,948469 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_md" ); - ent.v[ "origin" ] = ( -1320,12, 3809,01, 259,867 ); - ent.v[ "angles" ] = ( 356,06, 291,024, -0,695781 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_md" ); - ent.v[ "origin" ] = ( -71,2607, 30,6365, 313,505 ); - ent.v[ "angles" ] = ( 4, 271, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_sm" ); - ent.v[ "origin" ] = ( 1433,18, 2329,32, 113,125 ); - ent.v[ "angles" ] = ( 4,96089, 307,978, -0,329197 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_sm" ); - ent.v[ "origin" ] = ( 1138,84, 3202,16, 177,569 ); - ent.v[ "angles" ] = ( 357,408, 357,226, 2,68068 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_sm" ); - ent.v[ "origin" ] = ( 1691,35, 1820,16, 183,599 ); - ent.v[ "angles" ] = ( 359,672, 308,267, -3,69506 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_sm" ); - ent.v[ "origin" ] = ( 1860,51, 847,635, 329,508 ); - ent.v[ "angles" ] = ( 358,47, 259,669, -1,60795 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); - ent.v[ "origin" ] = ( 508,665, 271,964, 204,993 ); - ent.v[ "angles" ] = ( 351,292, 231,873, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -319,246, 818,947, 278,848 ); - ent.v[ "angles" ] = ( 2,03285, 284,245, -1,56861 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 62,9951, 686,778, 277,497 ); - ent.v[ "angles" ] = ( 357,251, 247,31, -0,796102 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -111,33, 364,894, 283,781 ); - ent.v[ "angles" ] = ( 354, 269,332, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 357,04, 1861,44, -22,5386 ); - ent.v[ "angles" ] = ( 331,827, 237,315, -16,1332 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 430,697, 2282,46, -45,8848 ); - ent.v[ "angles" ] = ( 11,7238, 272,207, -9,03757 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 83,5348, 3368,37, -7,50717 ); - ent.v[ "angles" ] = ( 15,5965, 353,462, -3,73034 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); - ent.v[ "origin" ] = ( 367,498, 4322,44, -198,948 ); - ent.v[ "angles" ] = ( 352,549, 245,527, -1,26226 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); - ent.v[ "origin" ] = ( 750,257, 4895,05, -248,716 ); - ent.v[ "angles" ] = ( 354,044, 274,732, 4,22172 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_md" ); - ent.v[ "origin" ] = ( 167,674, 3910,4, -81,8178 ); - ent.v[ "angles" ] = ( 335,174, 216,894, 4,2963 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -327,893, 2822,05, 214,486 ); - ent.v[ "angles" ] = ( 357,224, 299,445, -1,83224 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -16,2284, 2226,72, 198,412 ); - ent.v[ "angles" ] = ( 359,035, 251,383, 0,326779 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -124,034, 1764,67, 223,108 ); - ent.v[ "angles" ] = ( 355,984, 265,381, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 134,6, 1610,63, 136,689 ); - ent.v[ "angles" ] = ( 338,939, 209,105, -7,72014 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -904,039, 943,147, 404,487 ); - ent.v[ "angles" ] = ( 13,0126, 279,177, -1,01497 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -933,062, 477,095, 340,013 ); - ent.v[ "angles" ] = ( 10,5988, 245,32, 0,289334 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -912,959, 2441,2, 395,645 ); - ent.v[ "angles" ] = ( 352,99, 272,37, 1,40524 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); - ent.v[ "origin" ] = ( 316,517, -2046,73, 155,902 ); - ent.v[ "angles" ] = ( 307,278, 316,232, 1,60742 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_swirl_debris_pipe" ); - ent.v[ "origin" ] = ( 883,406, 2330,73, -84,2394 ); - ent.v[ "angles" ] = ( 353,062, 258,978, 1,36671 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_swirl_debris_pipe" ); - ent.v[ "origin" ] = ( 626,428, 1442,38, 27,1133 ); - ent.v[ "angles" ] = ( 340,168, 227,051, 1,76222 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); - ent.v[ "origin" ] = ( -1299,72, 1213,72, 584,78 ); - ent.v[ "angles" ] = ( 359,573, 352,577, 0,723254 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md_lng" ); - ent.v[ "origin" ] = ( -1061,38, 735,035, 640,674 ); - ent.v[ "angles" ] = ( 3,64941, 27,952, -2,55961 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md_lng" ); - ent.v[ "origin" ] = ( -1418,74, 1782,05, 563,118 ); - ent.v[ "angles" ] = ( 2,54877, 236,92, -1,62888 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); - ent.v[ "origin" ] = ( -673,314, 4306,65, 606,599 ); - ent.v[ "angles" ] = ( 5,00534, 336,913, -0,352102 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 1197,18, -337,014, 314,967 ); - ent.v[ "angles" ] = ( 354,762, 231,59, -1,18114 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); - ent.v[ "origin" ] = ( 903,164, -2184,91, 522,862 ); - ent.v[ "angles" ] = ( 332,336, 322,034, 1,59212 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -1029,77, -35,9784, 300,06 ); - ent.v[ "angles" ] = ( 1,43943, 309,283, -2,4544 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md_lng" ); - ent.v[ "origin" ] = ( 1565,92, 4039,46, 210,112 ); - ent.v[ "angles" ] = ( 5,25584, 240,93, -0,274937 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 1185,17, 539,721, 253,469 ); - ent.v[ "angles" ] = ( 358,534, 319,036, 2,27968 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 1188, -51,0568, 285,631 ); - ent.v[ "angles" ] = ( 358,865, 258,48, -3,42533 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 1087,26, -793,815, 358,571 ); - ent.v[ "angles" ] = ( 355,909, 262,679, -0,713538 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md_lng" ); - ent.v[ "origin" ] = ( 1077,88, 952,251, 463,789 ); - ent.v[ "angles" ] = ( 4,85968, 219,823, -2,88763 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); - ent.v[ "origin" ] = ( 953,331, -561,401, 630,357 ); - ent.v[ "angles" ] = ( 2,96603, 250,576, 2,567 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); - ent.v[ "origin" ] = ( 1859,09, 1215,24, 408,668 ); - ent.v[ "angles" ] = ( 359,508, 234,396, 1,74307 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); - ent.v[ "origin" ] = ( 55,7173, 2857,45, 210,442 ); - ent.v[ "angles" ] = ( 4,87442, 339,762, -2,37214 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md_lng" ); - ent.v[ "origin" ] = ( 1060,3, 4635,09, 36,8409 ); - ent.v[ "angles" ] = ( 356,058, 221,958, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); - ent.v[ "origin" ] = ( 1166,64, 5035,67, 146,327 ); - ent.v[ "angles" ] = ( 0,994242, 214,035, 0,872628 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -1211,34, 1583,81, 408,938 ); - ent.v[ "angles" ] = ( 356,796, 30,0557, -1,87885 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -722,946, -189,859, 291,512 ); - ent.v[ "angles" ] = ( 5,19372, 343,01, -2,07585 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); - ent.v[ "origin" ] = ( -605,424, -48,5298, 613,776 ); - ent.v[ "angles" ] = ( 15,2903, 262,743, -0,991539 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -160,668, 2486,05, 224,837 ); - ent.v[ "angles" ] = ( 0,22338, 299,402, -0,83127 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 1765,67, 493,103, 276,285 ); - ent.v[ "angles" ] = ( 354,872, 228,535, 0,863738 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 955,179, 3379,24, -143,467 ); - ent.v[ "angles" ] = ( 359,82, 291,805, 5,33257 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -543,302, -748,233, 174,419 ); - ent.v[ "angles" ] = ( 7,89651, 290,097, -0,970216 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 971,571, 573,164, 181,306 ); - ent.v[ "angles" ] = ( 1,54568, 213,548, 12,9273 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_door" ); - ent.v[ "origin" ] = ( 1850,89, 2986,61, 162,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_door" ); - ent.v[ "origin" ] = ( 534,975, 963,656, 148,785 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 344 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); - ent.v[ "origin" ] = ( -590,07, 1409,57, 3895,8 ); - ent.v[ "angles" ] = ( 358,002, 356,999, 90,1046 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); - ent.v[ "origin" ] = ( -1372,07, -646,927, 2254,94 ); - ent.v[ "angles" ] = ( 359, 358,036, 92,0687 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); - ent.v[ "origin" ] = ( -3368,62, 4495,3, 2149,2 ); - ent.v[ "angles" ] = ( 358,052, 358, 89,07 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); - ent.v[ "origin" ] = ( -6039,58, -1936,81, 1058,61 ); - ent.v[ "angles" ] = ( 358, 358, 90,0696 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); - ent.v[ "origin" ] = ( -2097,19, 1027,28, 77,539 ); - ent.v[ "angles" ] = ( 308,643, 351,708, -0,551175 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); - ent.v[ "origin" ] = ( -2229,93, 1774,39, 34,718 ); - ent.v[ "angles" ] = ( 313,479, 340,444, -3,88965 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); - ent.v[ "origin" ] = ( -2160,24, 2535,25, 52,594 ); - ent.v[ "angles" ] = ( 305,077, 319,115, -3,96055 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); - ent.v[ "origin" ] = ( -1953,09, 3125,38, -43,654 ); - ent.v[ "angles" ] = ( 315,319, 311,099, 0,545793 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); - ent.v[ "origin" ] = ( -1811,25, 10,7626, 117,601 ); - ent.v[ "angles" ] = ( 328,577, 5,01471, 2,21768 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); - ent.v[ "origin" ] = ( -951,567, -1402,14, -13,0464 ); - ent.v[ "angles" ] = ( 332,167, 321,788, -3,18111 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); - ent.v[ "origin" ] = ( -881,541, -2334,83, 10,4008 ); - ent.v[ "angles" ] = ( 316,325, 325,115, -44,0278 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( -2409,68, -2524,98, -718,561 ); - ent.v[ "angles" ] = ( 326,286, 353,382, 3,55199 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -1332,51, 311,914, 328,725 ); - ent.v[ "angles" ] = ( 1,67149, 310,389, 3,0899 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( -4312,84, 2115,62, -1135,36 ); - ent.v[ "angles" ] = ( 330, 350, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( -3908,19, 4060,75, -939,362 ); - ent.v[ "angles" ] = ( 334,174, 356,653, -3,3286 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( -4084,99, 1621,01, -834,717 ); - ent.v[ "angles" ] = ( 330, 350, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( -2513,38, -1356,8, -759,779 ); - ent.v[ "angles" ] = ( 337,223, 359,328, -15,7628 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( -3142,39, -1971,26, -883,386 ); - ent.v[ "angles" ] = ( 353, 350, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -1617,47, 1684,63, 337,628 ); - ent.v[ "angles" ] = ( 1,04831, 269,045, 2,36302 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -1647,66, 2301,74, 324,983 ); - ent.v[ "angles" ] = ( 358,972, 256,979, 0,44455 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -1673,17, 1264,65, 331,072 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 267 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -339,947, 3562,02, 126,633 ); - ent.v[ "angles" ] = ( 351,091, 232,11, -1,05292 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -55,274, 4582,7, -94,3652 ); - ent.v[ "angles" ] = ( 334,74, 201,39, -1,39556 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 524,811, 5541,03, -203,814 ); - ent.v[ "angles" ] = ( 352,351, 271,846, -46,5437 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); - ent.v[ "origin" ] = ( 1538,12, -1077,51, 698,234 ); - ent.v[ "angles" ] = ( 339,027, 311,561, 6,44771 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); - ent.v[ "origin" ] = ( 1157,6, -1624,21, 651,21 ); - ent.v[ "angles" ] = ( 342,344, 329,511, -2,44014 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -750,024, 2962,74, 257,199 ); - ent.v[ "angles" ] = ( 8,28079, 0,40539, -25,905 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg" ); - ent.v[ "origin" ] = ( 846,748, 2422,28, 237,875 ); - ent.v[ "angles" ] = ( 354, 241, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_md" ); - ent.v[ "origin" ] = ( 417,109, 954,571, 537,512 ); - ent.v[ "angles" ] = ( 5,28426, 245,016, 2,6592 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 154,477, 4722,76, -218,505 ); - ent.v[ "angles" ] = ( 336,482, 221,079, -9,59356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -655,181, -338,352, 273,602 ); - ent.v[ "angles" ] = ( 10,5588, 279,873, -2,87696 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_edge_md" ); - ent.v[ "origin" ] = ( -67,8391, -528,105, 331,844 ); - ent.v[ "angles" ] = ( 1,04778, 338,345, 29,656 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); - ent.v[ "origin" ] = ( 1524,38, 1651,94, 376,213 ); - ent.v[ "angles" ] = ( 3, 302, -3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg" ); - ent.v[ "origin" ] = ( 1714,09, 1591,07, 378,887 ); - ent.v[ "angles" ] = ( 359,603, 273,18, -2,81221 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( -1771,76, 2989,17, 311,681 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 266 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg" ); - ent.v[ "origin" ] = ( -1990,25, 1063,03, 356,134 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 305 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_sm" ); - ent.v[ "origin" ] = ( -680,892, -309,436, 307,394 ); - ent.v[ "angles" ] = ( 11,9834, 287,059, 3,32174 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_sm" ); - ent.v[ "origin" ] = ( 1304,52, 33,8905, 312,819 ); - ent.v[ "angles" ] = ( 356,535, 244,297, -1,32621 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_sm" ); - ent.v[ "origin" ] = ( 1011,51, -528,143, 374,803 ); - ent.v[ "angles" ] = ( 359,46, 270,22, -2,84866 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_sm" ); - ent.v[ "origin" ] = ( 1022,63, -514,032, 364,441 ); - ent.v[ "angles" ] = ( 355,313, 204,327, -14,8672 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_door" ); - ent.v[ "origin" ] = ( 922,682, -1124,83, 388,288 ); - ent.v[ "angles" ] = ( 357,017, 190,986, 0,217805 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_door" ); - ent.v[ "origin" ] = ( 615,388, -1144,95, 383,405 ); - ent.v[ "angles" ] = ( 359,291, 299,856, 0,674965 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_sm" ); - ent.v[ "origin" ] = ( 1481,23, 3845,26, 39,2438 ); - ent.v[ "angles" ] = ( 343,137, 295,681, 8,88461 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_sm" ); - ent.v[ "origin" ] = ( -809,971, -194,794, 306,185 ); - ent.v[ "angles" ] = ( 6,83035, 345,622, 1,38671 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_sm" ); - ent.v[ "origin" ] = ( -165,392, 79,3756, 336,951 ); - ent.v[ "angles" ] = ( 0,901464, 251,242, -1,76529 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_sm" ); - ent.v[ "origin" ] = ( 1005,92, 618,549, 180,287 ); - ent.v[ "angles" ] = ( 0,759633, 216,525, 1,47704 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_sm" ); - ent.v[ "origin" ] = ( -57,3561, 2517,21, 290,704 ); - ent.v[ "angles" ] = ( 8,00806, 276,994, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_sm" ); - ent.v[ "origin" ] = ( 489,339, 2648,44, -51,6272 ); - ent.v[ "angles" ] = ( 345,482, 233,234, 1,09263 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( -3826,2, 2772,7, -1118,32 ); - ent.v[ "angles" ] = ( 330,02, 347,691, 1,15431 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_shrt" ); - ent.v[ "origin" ] = ( 1754,99, 2519,99, 305,875 ); - ent.v[ "angles" ] = ( 270, 76,8444, -30,8444 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_door" ); - ent.v[ "origin" ] = ( 1392,75, 2151,22, 3,16943 ); - ent.v[ "angles" ] = ( 337,23, 6,69176, -2,24398 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_door" ); - ent.v[ "origin" ] = ( 1787,43, 2193,51, 30 ); - ent.v[ "angles" ] = ( 358, 44, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_door" ); - ent.v[ "origin" ] = ( 1914,54, 1812,28, 162,155 ); - ent.v[ "angles" ] = ( 359, 76, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); - ent.v[ "origin" ] = ( -537,296, 345,119, 674,374 ); - ent.v[ "angles" ] = ( 2,77689, 353,123, 1,38902 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_edge_md" ); - ent.v[ "origin" ] = ( -459,019, 1015,95, 339,523 ); - ent.v[ "angles" ] = ( 356,012, 343,991, 0,105049 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_door" ); - ent.v[ "origin" ] = ( 854,095, 2456,99, -110,479 ); - ent.v[ "angles" ] = ( 343,062, 277,297, -3,37125 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 1665,03, 1255,46, 222,378 ); - ent.v[ "angles" ] = ( 352,637, 262,829, 0,156695 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); - ent.v[ "origin" ] = ( 936,244, 3811,16, 35,1558 ); - ent.v[ "angles" ] = ( 12,9656, 208,561, 3,91753 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); - ent.v[ "origin" ] = ( 1214,31, 3935,27, 122,169 ); - ent.v[ "angles" ] = ( 0,241001, 28,4359, -0,116949 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall_md" ); - ent.v[ "origin" ] = ( 1784,61, 3600,66, 303,572 ); - ent.v[ "angles" ] = ( 0,909339, 210,216, 3,08126 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_door" ); - ent.v[ "origin" ] = ( 800,532, -1358,27, 385,492 ); - ent.v[ "angles" ] = ( 352,679, 49,6001, 2,98446 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_door" ); - ent.v[ "origin" ] = ( 1584,38, 597,151, 392,45 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 259 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( 1395,95, 4714,79, 398,945 ); - ent.v[ "angles" ] = ( 354,075, 303,537, 9,59351 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( 2488,28, 3744,28, 689,949 ); - ent.v[ "angles" ] = ( 354,075, 303,537, 9,59351 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); - ent.v[ "origin" ] = ( 2161,8, 3162,21, 357,595 ); - ent.v[ "angles" ] = ( 354,075, 303,537, 9,59348 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( 2219,05, 1944,76, 495,746 ); - ent.v[ "angles" ] = ( 354,075, 303,537, 0,593492 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( 2230,27, 1269,62, 571,55 ); - ent.v[ "angles" ] = ( 354,549, 285,454, 2,40076 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( 2128,16, 742,859, 510,444 ); - ent.v[ "angles" ] = ( 348,554, 285,198, 2,43842 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_edge_md" ); - ent.v[ "origin" ] = ( 377,23, -721,381, 325,883 ); - ent.v[ "angles" ] = ( 312,675, 332,421, 24,5171 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_sm" ); - ent.v[ "origin" ] = ( 597,794, -1104,02, 429,105 ); - ent.v[ "angles" ] = ( 3,62999, 315,089, -2,40076 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 1017,49, -1161,6, 370,77 ); - ent.v[ "angles" ] = ( 356,101, 232,605, 1,43087 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( 1220,08, 2467,62, -129,983 ); - ent.v[ "angles" ] = ( 356,077, 282,644, 6,72534 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_edge_md" ); - ent.v[ "origin" ] = ( 419,987, -141,665, 409,727 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 214 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -166,7, 80,6192, 330,945 ); - ent.v[ "angles" ] = ( 357,131, 257,281, 0,251018 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( -2049,43, -1949,75, -545,314 ); - ent.v[ "angles" ] = ( 334,141, 356,871, -0,747941 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( -2862,43, -513,632, -518,882 ); - ent.v[ "angles" ] = ( 339,776, 356,207, -5,21178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( -3720,78, 3398,31, -1041,49 ); - ent.v[ "angles" ] = ( 334,174, 356,653, -3,3286 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( -3589,52, 370,865, -470,538 ); - ent.v[ "angles" ] = ( 337,785, 356,403, -5,28281 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( -4705,81, 843,088, -891,159 ); - ent.v[ "angles" ] = ( 337,785, 356,403, -5,28281 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista_shrt" ); - ent.v[ "origin" ] = ( -1638,64, 3645,8, -151,782 ); - ent.v[ "angles" ] = ( 315,319, 311,099, 0,545793 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg" ); - ent.v[ "origin" ] = ( -1503,99, 3225,7, 379,144 ); - ent.v[ "angles" ] = ( 356,561, 263,443, 0,803355 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); - ent.v[ "origin" ] = ( -1458,27, 4320,31, 563,779 ); - ent.v[ "angles" ] = ( 2,5728, 263,023, 1,04024 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_door" ); - ent.v[ "origin" ] = ( -808,679, 2751,36, 391,125 ); - ent.v[ "angles" ] = ( 359, 214, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_ground_sm" ); - ent.v[ "origin" ] = ( -860,591, 1707,07, 415,062 ); - ent.v[ "angles" ] = ( 359,199, 311,006, 2,45768 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_fall" ); - ent.v[ "origin" ] = ( -295,101, 4907,56, 467,116 ); - ent.v[ "angles" ] = ( 5,96933, 317,912, 0,855779 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_blowing_lg_vista" ); - ent.v[ "origin" ] = ( 1153,05, 5350,95, 235,29 ); - ent.v[ "angles" ] = ( 349,262, 315,056, 7,91743 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_shrt" ); - ent.v[ "origin" ] = ( 2150,68, 2342,27, 304,875 ); - ent.v[ "angles" ] = ( 270, 0, -9 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_shrt" ); - ent.v[ "origin" ] = ( 2075,51, 2009,18, 307,875 ); - ent.v[ "angles" ] = ( 270, 356,634, 93,3664 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool_dbl_shrt" ); - ent.v[ "origin" ] = ( 2161,57, 2537,25, 136,875 ); - ent.v[ "angles" ] = ( 270, 1,84761, 43,1524 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); - ent.v[ "origin" ] = ( 4277,04, -2840,86, 4747,97 ); - ent.v[ "angles" ] = ( 358, 358, 90,0696 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); - ent.v[ "origin" ] = ( -1312,81, -4708,91, 3280,53 ); - ent.v[ "angles" ] = ( 358,002, 356,999, 92,1045 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); - ent.v[ "origin" ] = ( 3111,08, 6638, 3278,44 ); - ent.v[ "angles" ] = ( 358,052, 358, 89,07 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); - ent.v[ "origin" ] = ( 2096,3, 12553, 3102,72 ); - ent.v[ "angles" ] = ( 358,052, 358, 89,07 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); - ent.v[ "origin" ] = ( -437,189, 20165,9, 2272,85 ); - ent.v[ "angles" ] = ( 358,052, 358, 89,07 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); - ent.v[ "origin" ] = ( -14126,7, 6210,72, -2760,33 ); - ent.v[ "angles" ] = ( 358,052, 358, 89,07 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); - ent.v[ "origin" ] = ( -17910,8, 9899,93, -2760,71 ); - ent.v[ "angles" ] = ( 358,052, 358, 89,07 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); - ent.v[ "origin" ] = ( -14170,9, 476,198, -2762,81 ); - ent.v[ "angles" ] = ( 358,052, 358, 89,07 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_wind_turbine" ); - ent.v[ "origin" ] = ( -18720,7, -3704,99, -1752,84 ); - ent.v[ "angles" ] = ( 358,052, 358, 89,07 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_turbine_sun1" ); - ent.v[ "origin" ] = ( -565,631, 56070,4, 24146,6 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_sand_gust_cliff_edge_md" ); - ent.v[ "origin" ] = ( 44,2128, 2107,05, 182,558 ); - ent.v[ "angles" ] = ( 0, 342, -7 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; -} diff --git a/Multiplayer Maps/mp_turbine/maps/mp/mp_turbine.gsc b/Multiplayer Maps/mp_turbine/maps/mp/mp_turbine.gsc deleted file mode 100644 index ca5d218..0000000 --- a/Multiplayer Maps/mp_turbine/maps/mp/mp_turbine.gsc +++ /dev/null @@ -1,51 +0,0 @@ -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_turbine_fx::main(); - maps/mp/_load::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_turbine" ); - maps/mp/mp_turbine_amb::main(); - if ( !level.console ) - { - precachemodel( "collision_clip_32x32x32" ); - spawncollision( "collision_clip_32x32x32", "collider", ( -1400, 550, 360 ), ( 0, 0, 0 ) ); - } - level.remotemotarviewleft = 50; - level.remotemotarviewright = 50; -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2600", reset_dvars ); - ss.koth_objective_influencer_inner_radius = 2400; -} - -turbine_spin_init() -{ - level endon( "game_ended" ); - turbine1 = getent( "turbine_blades", "targetname" ); - turbine1 thread rotate_blades( 4 ); - turbine2 = getent( "turbine_blades2", "targetname" ); - turbine2 thread rotate_blades( 3 ); - turbine3 = getent( "turbine_blades3", "targetname" ); - turbine3 thread rotate_blades( 6 ); - turbine4 = getent( "turbine_blades4", "targetname" ); - turbine4 thread rotate_blades( 3 ); - turbine6 = getent( "turbine_blades6", "targetname" ); - turbine6 thread rotate_blades( 4 ); -} - -rotate_blades( time ) -{ - self endon( "game_ended" ); - revolutions = 1000; - while ( 1 ) - { - self rotateroll( 360 * revolutions, time * revolutions ); - self waittill( "rotatedone" ); - } -} diff --git a/Multiplayer Maps/mp_turbine/maps/mp/mp_turbine_amb.gsc b/Multiplayer Maps/mp_turbine/maps/mp/mp_turbine_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_turbine/maps/mp/mp_turbine_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_turbine/maps/mp/mp_turbine_fx.gsc b/Multiplayer Maps/mp_turbine/maps/mp/mp_turbine_fx.gsc deleted file mode 100644 index 6c4c348..0000000 --- a/Multiplayer Maps/mp_turbine/maps/mp/mp_turbine_fx.gsc +++ /dev/null @@ -1,50 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); - -main() -{ - precache_fxanim_props(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_turbine_fx::main(); - maps/mp/createart/mp_turbine_art::main(); -} - -precache_scripted_fx() -{ -} - -precache_createfx_fx() -{ - level._effect[ "fx_sand_blowing_lg" ] = loadfx( "dirt/fx_sand_blowing_lg" ); - level._effect[ "fx_sand_blowing_md" ] = loadfx( "dirt/fx_sand_blowing_md" ); - level._effect[ "fx_sand_blowing_sm" ] = loadfx( "dirt/fx_sand_blowing_sm" ); - level._effect[ "fx_sand_gust_ground_lg" ] = loadfx( "dirt/fx_sand_gust_ground_lg" ); - level._effect[ "fx_sand_gust_ground_sm" ] = loadfx( "dirt/fx_sand_gust_ground_sm" ); - level._effect[ "fx_sand_gust_ground_md" ] = loadfx( "dirt/fx_sand_gust_ground_md" ); - level._effect[ "fx_sand_gust_door" ] = loadfx( "dirt/fx_sand_gust_door" ); - level._effect[ "fx_sand_blowing_lg_vista" ] = loadfx( "dirt/fx_sand_blowing_lg_vista" ); - level._effect[ "fx_sand_blowing_lg_vista_shrt" ] = loadfx( "dirt/fx_sand_blowing_lg_vista_shrt" ); - level._effect[ "fx_sand_gust_cliff_fall" ] = loadfx( "dirt/fx_sand_gust_cliff_fall" ); - level._effect[ "fx_sand_gust_cliff_fall_md" ] = loadfx( "dirt/fx_sand_gust_cliff_fall_md" ); - level._effect[ "fx_sand_gust_cliff_fall_md_lng" ] = loadfx( "dirt/fx_sand_gust_cliff_fall_md_lng" ); - level._effect[ "fx_sand_gust_cliff_edge_md" ] = loadfx( "dirt/fx_sand_gust_cliff_edge_md" ); - level._effect[ "fx_sand_swirl_lg_pipe" ] = loadfx( "dirt/fx_sand_swirl_lg_pipe" ); - level._effect[ "fx_sand_swirl_sm_pipe" ] = loadfx( "dirt/fx_sand_swirl_sm_pipe" ); - level._effect[ "fx_sand_swirl_debris_pipe" ] = loadfx( "dirt/fx_sand_swirl_debris_pipe" ); - level._effect[ "fx_mp_light_wind_turbine" ] = loadfx( "maps/mp_maps/fx_mp_light_wind_turbine" ); - level._effect[ "fx_light_floodlight_sqr_cool" ] = loadfx( "light/fx_light_floodlight_sqr_cool" ); - level._effect[ "fx_light_flour_glow_cool_dbl_shrt" ] = loadfx( "light/fx_light_flour_glow_cool_dbl_shrt" ); - level._effect[ "fx_mp_sun_flare_turbine_streak" ] = loadfx( "maps/mp_maps/fx_mp_sun_flare_turbine_streak" ); - level._effect[ "fx_mp_sun_flare_turbine" ] = loadfx( "maps/mp_maps/fx_mp_sun_flare_turbine" ); - level._effect[ "fx_lf_mp_turbine_sun1" ] = loadfx( "lens_flares/fx_lf_mp_turbine_sun1" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "wires_01" ] = %fxanim_mp_turbine_wires_01_anim; - level.scr_anim[ "fxanim_props" ][ "wires_02" ] = %fxanim_mp_turbine_wires_02_anim; - level.scr_anim[ "fxanim_props" ][ "wires_03" ] = %fxanim_mp_turbine_wires_03_anim; - level.scr_anim[ "fxanim_props" ][ "bridge_cables" ] = %fxanim_mp_turbine_bridge_cables_anim; -} diff --git a/Multiplayer Maps/mp_uplink/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_uplink/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_uplink/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_uplink/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_uplink/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_uplink/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_uplink/maps/mp/createfx/mp_uplink_fx.gsc b/Multiplayer Maps/mp_uplink/maps/mp/createfx/mp_uplink_fx.gsc deleted file mode 100644 index b39792a..0000000 --- a/Multiplayer Maps/mp_uplink/maps/mp/createfx/mp_uplink_fx.gsc +++ /dev/null @@ -1,4328 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_os" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3087,23, 1201,53, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_os" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 4112,75, -1202,05, 335,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_os" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3063,42, -3473,09, 352 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_os" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1724,52, -1103,73, 178,979 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3087,23, 1201,53, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 4112,75, -1202,05, 335,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3063,42, -3473,09, 352 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1724,52, -1103,73, 178,979 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3235,78, 1891,73, 288,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3524,17, 1282,11, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3187,27, 1200,69, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2469,29, 1260,57, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2818,94, 1134,75, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3583,66, 986,25, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3345,38, 981,247, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3074,21, 932,518, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2783,32, 899,299, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2352,24, 1035,47, 320 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2554,78, 874,469, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2918,6, 1955, 288,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2617,7, 1846,38, 288,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2495,7, 1673,11, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2497,06, 1558,67, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3092,52, 1379,85, 335,125 ); - ent.v[ "angles" ] = ( 296, 270, 90 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3167,84, 1378,01, 334,261 ); - ent.v[ "angles" ] = ( 296, 270, 90 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3239,42, 1381,56, 335,931 ); - ent.v[ "angles" ] = ( 296, 270, 90 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2817,1, 1787,71, 352,125 ); - ent.v[ "angles" ] = ( 270, 356,32, 3,68219 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3377,37, 1666,21, 296,815 ); - ent.v[ "angles" ] = ( 277, 90, -90 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3375,89, 1553,32, 310,961 ); - ent.v[ "angles" ] = ( 277, 90, -90 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3856,19, 948,704, 304,323 ); - ent.v[ "angles" ] = ( 278,062, 352,869, 7,13089 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3888,42, 790,33, 298,946 ); - ent.v[ "angles" ] = ( 279,483, 341,714, 18,5216 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3875,64, 694,651, 296,096 ); - ent.v[ "angles" ] = ( 279,039, 6,61275, -6,06275 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3889,02, 609,307, 297,574 ); - ent.v[ "angles" ] = ( 275,993, 0,156288, 0,157217 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3710,8, 375,639, 290,961 ); - ent.v[ "angles" ] = ( 271, 270,005, 89,9947 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3860,81, 467,664, 295 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 272 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3708,93, 162,401, 282,648 ); - ent.v[ "angles" ] = ( 271, 179,989, 179,976 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3679,6, -19,0127, 290,334 ); - ent.v[ "angles" ] = ( 273,6, 56,1405, -56,4022 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3029,78, 685,631, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3069,58, 506,669, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3115,37, 291,434, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2945,86, -26,6236, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3550,88, -259,095, 320 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2943,28, -255,755, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3123,25, -256,32, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3313,52, -241,425, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3136,04, -109,121, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3099,39, 138,382, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3017,19, 186,914, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3098,63, -4,73839, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2612,01, -20,6763, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2758,39, 76,3419, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2753,33, -16,836, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3789,31, -263,511, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3847,64, -446,28, 319,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3852,47, -536,307, 319,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3849,31, -633,662, 319,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3939,55, -626,792, 319,125 ); - ent.v[ "angles" ] = ( 270, 353,157, 59,8427 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4023,38, -801,844, 319,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4014,17, -940,094, 319,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3972,33, -712,302, 319,125 ); - ent.v[ "angles" ] = ( 270, 5,71059, 83,2893 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4005,35, -1034,7, 319,125 ); - ent.v[ "angles" ] = ( 270, 5,71059, 83,2893 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3453,43, -327,662, 456,125 ); - ent.v[ "angles" ] = ( 270, 5,71059, 83,2893 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3373,04, -327,588, 456,125 ); - ent.v[ "angles" ] = ( 270, 5,71059, 83,2893 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3799,55, -813,546, 456,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3790,38, -982,76, 456,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3718,98, -1358,11, 456,125 ); - ent.v[ "angles" ] = ( 270, 5,71059, 83,2893 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3719,62, -1267,33, 456,125 ); - ent.v[ "angles" ] = ( 270, 5,71059, 83,2893 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3719,93, -1176,53, 456,125 ); - ent.v[ "angles" ] = ( 270, 5,71059, 83,2893 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3719,77, -702,075, 456,125 ); - ent.v[ "angles" ] = ( 270, 5,71059, 83,2893 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3721,31, -524,952, 456,125 ); - ent.v[ "angles" ] = ( 270, 5,71059, 83,2893 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3720,06, -433,124, 456,125 ); - ent.v[ "angles" ] = ( 270, 5,71059, 83,2893 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4014,53, -1126,9, 314,625 ); - ent.v[ "angles" ] = ( 270, 5,71059, 83,2893 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4014,43, -1181,33, 314,625 ); - ent.v[ "angles" ] = ( 270, 5,71059, 83,2893 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4015,93, -1237,73, 314,625 ); - ent.v[ "angles" ] = ( 270, 5,71059, 83,2893 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4011,77, -1280,73, 314,625 ); - ent.v[ "angles" ] = ( 270, 5,71059, 83,2893 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4014,11, -1333,41, 314,625 ); - ent.v[ "angles" ] = ( 270, 5,71059, 83,2893 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4013,85, -1388,29, 314,625 ); - ent.v[ "angles" ] = ( 270, 5,71059, 83,2893 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3911,11, -1573,07, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3555,62, -1591,67, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3737,09, -1613,83, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3707,3, -1855,38, 367,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3706,79, -1986,15, 367,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3708,63, -2067,76, 367,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3682,24, -2179,69, 367,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3635,2, -2319,23, 367,625 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3708,5, -1918,45, 367,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3410,64, -1923,07, 456,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3065,06, -1640,67, 456,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2735,89, -2267,72, 456,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3079,12, -2235,35, 456,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2726,96, -1711,74, 457,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3140,36, -1850,68, 456,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3223,68, -2026,12, 456,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3261,83, -1861,82, 456,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2664,01, -2014,14, 456,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3292,53, -2411,98, 456,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3123,35, -2499,15, 456,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3719,45, -613,46, 456,125 ); - ent.v[ "angles" ] = ( 270, 5,71059, 83,2893 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3720,73, -1088,77, 456,125 ); - ent.v[ "angles" ] = ( 270, 5,71059, 83,2893 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3122,62, -2673,1, 456 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3286,09, -2624,23, 456,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3301,87, -2927,35, 416,687 ); - ent.v[ "angles" ] = ( 283,296, 288,275, 82,0096 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_400" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2843,71, -3257,66, 353 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3168,83, -3357,95, 352,7 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_300" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3539,02, -3387,06, 352 ); - ent.v[ "angles" ] = ( 270, 345,714, 59,2841 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3387,14, -3161,83, 364,238 ); - ent.v[ "angles" ] = ( 276, 310, 71 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3006,54, -2975,48, 371,784 ); - ent.v[ "angles" ] = ( 280,813, 261,713, -98,8559 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2804,61, -2857,58, 373,235 ); - ent.v[ "angles" ] = ( 280,627, 200,394, -38,2626 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2445,5, -2833,93, 351,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2450,68, -2731,92, 351,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2446,17, -2620,92, 351,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2449,01, -2502,86, 351,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2446,2, -2391,78, 351,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2560,28, -2833,6, 353,177 ); - ent.v[ "angles" ] = ( 270, 359,951, 0 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2658, -2838,55, 354,2 ); - ent.v[ "angles" ] = ( 272,234, 204,524, 153,564 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3109,89, -3148,96, 353,792 ); - ent.v[ "angles" ] = ( 271,951, 252,322, 133,786 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2411,7, -2233,17, 391,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2336,62, -2235,99, 391,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2166,1, -77,9054, 199,079 ); - ent.v[ "angles" ] = ( 283, 138, -92 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2260,05, -191,682, 259,305 ); - ent.v[ "angles" ] = ( 276,585, 116,5, -87,5666 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1613,97, -868,628, 87,849 ); - ent.v[ "angles" ] = ( 271, 270,002, 89,9982 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1573,17, -961,668, 89,6629 ); - ent.v[ "angles" ] = ( 274,467, 26,3489, -26,5931 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1572,37, -1065,19, 97,0635 ); - ent.v[ "angles" ] = ( 277,262, 74,0182, -73,8785 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1646,34, -953,694, 93,1614 ); - ent.v[ "angles" ] = ( 277,072, 134,737, -135,113 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1654,62, -786,629, 89,1833 ); - ent.v[ "angles" ] = ( 271, 270,002, 89,9982 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1492,99, -876,047, 89,8954 ); - ent.v[ "angles" ] = ( 291,023, 357,397, 2,78851 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1577,92, -801,562, 88,5811 ); - ent.v[ "angles" ] = ( 272,236, 296,57, 63,4299 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1594,79, -1156,01, 110,308 ); - ent.v[ "angles" ] = ( 279,047, 80,4123, -66,2089 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1669,24, -1111,69, 104,485 ); - ent.v[ "angles" ] = ( 276,686, 124,846, -110,168 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1671,54, -1225,24, 123,552 ); - ent.v[ "angles" ] = ( 281,4, 96,0336, -81,5713 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1887,8, -131,782, 124,961 ); - ent.v[ "angles" ] = ( 274,471, 243,413, 135,516 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1735,74, -501,35, 99,6427 ); - ent.v[ "angles" ] = ( 274,299, 272,897, 106,15 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1713,27, -663,278, 90,5723 ); - ent.v[ "angles" ] = ( 276,082, 189,428, 170,52 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1688,98, -339,767, 115,081 ); - ent.v[ "angles" ] = ( 275, 323,161, 36,8734 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1732,64, -262,963, 123,818 ); - ent.v[ "angles" ] = ( 273,446, 302,674, 26,1758 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1772,54, -187,08, 126,675 ); - ent.v[ "angles" ] = ( 279,815, 301,542, 20,1458 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1768,61, -309,726, 115,019 ); - ent.v[ "angles" ] = ( 279,497, 213,441, 125,974 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1818,88, -234,87, 122,392 ); - ent.v[ "angles" ] = ( 271,433, 58,9327, -78,6734 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2015,95, 2,04534, 135,971 ); - ent.v[ "angles" ] = ( 275,733, 156,224, -175,946 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1893,44, -486,273, 99,9823 ); - ent.v[ "angles" ] = ( 271,766, 147,015, -166,751 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1531,69, -1250,91, 177,847 ); - ent.v[ "angles" ] = ( 324,024, 38,4498, -58,9118 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1560,63, -1388,53, 207,619 ); - ent.v[ "angles" ] = ( 312,557, 5,68326, 43,4902 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2132,23, 658,324, 189,843 ); - ent.v[ "angles" ] = ( 286,425, 278,352, 73,8569 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2121,61, 604,716, 177,43 ); - ent.v[ "angles" ] = ( 280,768, 259,842, 91,8343 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2115,3, 553,615, 167,628 ); - ent.v[ "angles" ] = ( 277,79, 266,523, 85,2121 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2114,16, 523,587, 153,082 ); - ent.v[ "angles" ] = ( 277,79, 266,523, 85,2121 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2107,01, 476,656, 143,141 ); - ent.v[ "angles" ] = ( 279,043, 292,771, 59,2362 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2088,2, 422,676, 132,894 ); - ent.v[ "angles" ] = ( 282,365, 313,242, 39,1052 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2088,69, 374,004, 130,359 ); - ent.v[ "angles" ] = ( 274,338, 97,58, -107,369 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2092,69, 298,894, 126,662 ); - ent.v[ "angles" ] = ( 275,73, 263,353, 77,2518 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2070,19, 212, 128,976 ); - ent.v[ "angles" ] = ( 273,303, 73,1266, -83,4922 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1981,57, 261,369, 111,934 ); - ent.v[ "angles" ] = ( 293,945, 356,158, -8,97631 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2128,6, 785,538, 222,722 ); - ent.v[ "angles" ] = ( 293,894, 247,964, 148,586 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2151,39, 874,1, 271,302 ); - ent.v[ "angles" ] = ( 294,448, 233,341, -168,06 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2132,79, 708,153, 198,57 ); - ent.v[ "angles" ] = ( 279,771, 259,658, 91,9464 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2078,66, 843,37, 240,044 ); - ent.v[ "angles" ] = ( 296,12, 252,133, 99,7416 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2007,14, 841,782, 235,83 ); - ent.v[ "angles" ] = ( 295,764, 329,357, 49,3951 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2011,36, 969,641, 281,783 ); - ent.v[ "angles" ] = ( 302,965, 311,179, 31,7985 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2157,38, 991,644, 306,45 ); - ent.v[ "angles" ] = ( 285,024, 223,462, 118,112 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2201,35, 934,941, 301,709 ); - ent.v[ "angles" ] = ( 287,112, 209,113, -172,022 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2092,12, 1005,95, 296,818 ); - ent.v[ "angles" ] = ( 282,532, 241,259, 110,079 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2002,73, -231,271, 125,873 ); - ent.v[ "angles" ] = ( 275,603, 286,402, 54,6416 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2057,06, -290,869, 113,887 ); - ent.v[ "angles" ] = ( 275,603, 286,404, 55,6402 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1992,59, -369,705, 110,684 ); - ent.v[ "angles" ] = ( 286,817, 299,003, 97,0871 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1937,7, -422,648, 102,641 ); - ent.v[ "angles" ] = ( 284,835, 298,04, 98,014 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2068,15, -395,119, 110,55 ); - ent.v[ "angles" ] = ( 279,235, 151,714, -115,962 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2118,42, -345,922, 117,847 ); - ent.v[ "angles" ] = ( 280,369, 185,592, -148,356 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2018,44, -479,374, 114,535 ); - ent.v[ "angles" ] = ( 280,345, 120,334, -84,7543 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1655,09, -436,894, 106,234 ); - ent.v[ "angles" ] = ( 278,748, 311,623, 124,8 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1809,41, -392,022, 111,942 ); - ent.v[ "angles" ] = ( 282,864, 242,751, -111,826 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1710,15, -1388,27, 172,457 ); - ent.v[ "angles" ] = ( 289,11, 119,335, -99,0903 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1683,8, -1669,83, 221,487 ); - ent.v[ "angles" ] = ( 302,566, 55,4783, -24,1213 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1626,37, -1570,24, 193,731 ); - ent.v[ "angles" ] = ( 301,446, 50,2248, -19,6654 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1852,57, -1683,38, 274,033 ); - ent.v[ "angles" ] = ( 287,995, 130,87, -80,1598 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_200" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2032,19, -1784,49, 335,841 ); - ent.v[ "angles" ] = ( 286,307, 166,537, -78,0757 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2210,71, -1743,75, 392,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2216,58, -1793,65, 391,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2207,87, -1836,18, 392,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2168,25, -1711,42, 384,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2166,38, -1767,27, 384,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2171,22, -1827,9, 384,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2173,55, -1872,45, 384,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2105,82, -1728,07, 365,321 ); - ent.v[ "angles" ] = ( 300, 180, 180 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2112,01, -1899,42, 363,152 ); - ent.v[ "angles" ] = ( 297,358, 199,842, 162,932 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2115,42, -1801,51, 369,679 ); - ent.v[ "angles" ] = ( 299,062, 180,022, -179,326 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2186,3, -1929,14, 372,242 ); - ent.v[ "angles" ] = ( 281,294, 252,423, 112,833 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1760,69, -1566,57, 248,219 ); - ent.v[ "angles" ] = ( 330,763, 40,4594, -18,9409 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1804,06, -1551,37, 234,26 ); - ent.v[ "angles" ] = ( 288,518, 149,089, -116,897 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2235,76, -2212,58, 371,46 ); - ent.v[ "angles" ] = ( 285,102, 167,067, -130,782 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2214,18, -2149,35, 362,599 ); - ent.v[ "angles" ] = ( 287,79, 185,28, 174,928 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2217,25, -2079,91, 364,633 ); - ent.v[ "angles" ] = ( 285,784, 174,869, -175,659 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2209,48, -2031,73, 362,52 ); - ent.v[ "angles" ] = ( 286,738, 199,827, 160,352 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2154,13, -1963,72, 364,575 ); - ent.v[ "angles" ] = ( 285,8, 201,062, 159,166 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3210,67, 795,412, 569,936 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3233,64, 147,105, 562,289 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2288,2, 828,515, 456,209 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2241,42, 341,138, 530,181 ); - ent.v[ "angles" ] = ( 14, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2261,71, 550,367, 532,696 ); - ent.v[ "angles" ] = ( 8, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2108,32, -739,403, 468,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2096,29, -1059,55, 470,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2229,16, 101,232, 282,088 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1562,68, -649,563, 165,623 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1491,8, -1340, 242,044 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2507, -2470,8, 601,272 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3330,63, -1625,15, 562,022 ); - ent.v[ "angles" ] = ( 359, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3746,36, 1416,94, 570,771 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 186 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3886,46, 482,37, 302,573 ); - ent.v[ "angles" ] = ( 359, 216, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3812,7, -146,868, 403,947 ); - ent.v[ "angles" ] = ( 357, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3453,04, -2618,88, 627,36 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3683,74, -2963,74, 567,143 ); - ent.v[ "angles" ] = ( 0, 182,998, -1 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2550,15, -2995,04, 456,625 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3001,02, -2667,14, 619,226 ); - ent.v[ "angles" ] = ( 341, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2841,15, -2021,7, 590,125 ); - ent.v[ "angles" ] = ( 358, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3298,04, 1520,3, 507,686 ); - ent.v[ "angles" ] = ( 356, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2504,68, -216,337, 508,125 ); - ent.v[ "angles" ] = ( 358, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1919,92, -803,211, 265,391 ); - ent.v[ "angles" ] = ( 0,994673, 174, -0,104553 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1899,29, -1356,46, 337,359 ); - ent.v[ "angles" ] = ( 360, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_lightning_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 21039,8, -40047,4, 18228,9 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 131 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 7001; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_lightning_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -13763,7, -58199,1, 16443,7 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 84 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 7002; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_lightning_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -31130,8, 44879,9, 18839,3 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 307 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 7003; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_lightning_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -58515, 907,609, 42269,4 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 18 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 7004; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3652,63, -1041,24, 518,392 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5005; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3652,63, -1182,69, 520,432 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5006; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3652,63, -750,81, 517,562 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5004; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3652,63, -605,924, 517,272 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5003; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2815,15, 584,929, 596,125 ); - ent.v[ "angles" ] = ( 90, 0, -1 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2818,54, 326,218, 596,125 ); - ent.v[ "angles" ] = ( 90, 0, 1 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5002; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2823,95, 585,55, 596,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6001; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2818,25, 328,157, 596,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3151,31, -771,116, 758,154 ); - ent.v[ "angles" ] = ( 283, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5007; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3152,57, -893,313, 758,434 ); - ent.v[ "angles" ] = ( 283, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5008; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3150,76, -1018,36, 757,994 ); - ent.v[ "angles" ] = ( 283, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5009; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2981,49, -770,546, 720,819 ); - ent.v[ "angles" ] = ( 283, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5010; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2981,55, -899,381, 720,832 ); - ent.v[ "angles" ] = ( 283, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5011; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2986,09, -1019,8, 721,831 ); - ent.v[ "angles" ] = ( 283, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5012; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2800,49, -772,68, 681,024 ); - ent.v[ "angles" ] = ( 283, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5013; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2804,65, -895,649, 681,939 ); - ent.v[ "angles" ] = ( 283, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5014; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2806,05, -1017,29, 682,245 ); - ent.v[ "angles" ] = ( 283, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5015; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2622,56, -775,869, 641,903 ); - ent.v[ "angles" ] = ( 283, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5016; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2625,82, -894,455, 642,62 ); - ent.v[ "angles" ] = ( 283, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5017; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2620,73, -1018,28, 641,502 ); - ent.v[ "angles" ] = ( 283, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5018; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2300,61, -1027,73, 590,125 ); - ent.v[ "angles" ] = ( 270, 21,1127, 158,887 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5019; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2298,93, -1182,6, 590,125 ); - ent.v[ "angles" ] = ( 270, 21,1127, 158,887 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5020; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2201, -458,865, 518,277 ); - ent.v[ "angles" ] = ( 334, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5021; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2200,15, -761,454, 516,57 ); - ent.v[ "angles" ] = ( 334, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5022; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2198,94, -894,747, 514,15 ); - ent.v[ "angles" ] = ( 334, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5023; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2198,53, -1030,06, 513,336 ); - ent.v[ "angles" ] = ( 334, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5024; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2200,73, -1184,52, 517,736 ); - ent.v[ "angles" ] = ( 334, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5025; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2199,64, -1326,53, 515,56 ); - ent.v[ "angles" ] = ( 334, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5026; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2170, -475,943, 380,123 ); - ent.v[ "angles" ] = ( 360, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5027; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2042,04, -854,669, 380,014 ); - ent.v[ "angles" ] = ( 360, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5028; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2042,04, -935,608, 380,211 ); - ent.v[ "angles" ] = ( 360, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5028; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_window_rain1_splash" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2170, -1309,49, 380,031 ); - ent.v[ "angles" ] = ( 360, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5029; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_window_gust" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3727,25, -1167,66, 545,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6006; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_window_gust" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3726,61, -1036,29, 544,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6005; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_window_gust" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3722,78, -760,999, 544,088 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6004; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_window_gust" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3723,43, -601,983, 544,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6003; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3155,96, -1018,32, 759,096 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6009; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3167,06, -894,453, 761,624 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6008; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3169,1, -772,392, 762,131 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6007; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2977,96, -772,326, 720,036 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6010; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2978,77, -897,002, 720,221 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6011; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2979,64, -1014,98, 720,386 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6012; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2808,89, -1015,73, 682,833 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6015; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2808,67, -892,727, 682,838 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6014; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2811,45, -774,519, 683,433 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6013; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2631,9, -777,514, 643,957 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6016; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2631,86, -899,159, 643,948 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6017; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2628,45, -1021,75, 643,198 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6018; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2305,53, -1027,74, 588,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6019; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_window_roof_med" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2304,22, -1175,28, 588,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6020; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2827,57, 323,755, 320 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2792,78, 302,703, 320 ); - ent.v[ "angles" ] = ( 270, 1,4321, 132,568 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2807,34, 607,117, 320 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2772,56, 586,064, 320 ); - ent.v[ "angles" ] = ( 270, 1,4321, 132,568 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3125,05, -772,312, 320,125 ); - ent.v[ "angles" ] = ( 270, 1,4321, 132,568 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6007; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3129,18, -904,968, 320,125 ); - ent.v[ "angles" ] = ( 270, 1,4321, 132,568 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6008; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3118,34, -1041,52, 320,125 ); - ent.v[ "angles" ] = ( 270, 1,4321, 132,568 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6009; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2952,53, -758,719, 320,125 ); - ent.v[ "angles" ] = ( 270, 1,4321, 132,568 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6010; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2950,78, -899,116, 320,125 ); - ent.v[ "angles" ] = ( 270, 1,4321, 132,568 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6011; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2945,69, -1056,01, 320,125 ); - ent.v[ "angles" ] = ( 270, 1,4321, 132,568 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6012; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2807,33, -753,84, 320,125 ); - ent.v[ "angles" ] = ( 270, 1,4321, 132,568 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6013; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2847,38, -880,752, 320,125 ); - ent.v[ "angles" ] = ( 270, 1,4321, 132,568 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6014; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2803,71, -1050,76, 320,125 ); - ent.v[ "angles" ] = ( 270, 1,4321, 132,568 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6015; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2611,65, -784,761, 320,125 ); - ent.v[ "angles" ] = ( 270, 1,4321, 132,568 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6016; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2578,19, -915,489, 320,125 ); - ent.v[ "angles" ] = ( 270, 1,4321, 132,568 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6017; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2600,02, -1047,13, 320,125 ); - ent.v[ "angles" ] = ( 270, 1,4321, 132,568 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6018; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2288,24, -1178,19, 320,125 ); - ent.v[ "angles" ] = ( 270, 7,12502, 113,875 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6020; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2294,41, -1042,77, 320,125 ); - ent.v[ "angles" ] = ( 270, 7,12502, 113,875 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6019; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3588,44, -1184,34, 457,125 ); - ent.v[ "angles" ] = ( 270, 359,851, 179,149 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6006; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3598,33, -1043,36, 456,125 ); - ent.v[ "angles" ] = ( 270, 359,851, 179,149 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6005; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3603,47, -765,402, 456,125 ); - ent.v[ "angles" ] = ( 270, 359,851, 179,149 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6004; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3595,91, -607,819, 456,125 ); - ent.v[ "angles" ] = ( 270, 359,851, 179,149 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 6003; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3446,51, 1265,7, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3288,33, 1013,08, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2553,1, 1210,46, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2293,53, 1010,91, 319,806 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2732,3, 1867,09, 288,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 184 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3181,28, 1898,16, 288,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3372,71, -245,821, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 167 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3078,48, 62,8625, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 186 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 4046,05, -899,27, 319 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3953,91, -1635,27, 319 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3746,81, -1588,63, 320 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3446,92, -1904,83, 456,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3160,87, -1653,54, 456 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3173,61, -2256,4, 456 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2999,53, -2532,03, 620,261 ); - ent.v[ "angles" ] = ( 338, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2786,09, -2647,43, 633,113 ); - ent.v[ "angles" ] = ( 3, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2784,32, -2512,32, 633,513 ); - ent.v[ "angles" ] = ( 360, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2641,83, 1504,47, 563,642 ); - ent.v[ "angles" ] = ( 356, 180, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2440,64, 1227,82, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 349 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2870,7, 681,959, 623,992 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2874,59, 225,487, 623,995 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2741,77, -241,466, 508,001 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3498,66, -309,091, 460,219 ); - ent.v[ "angles" ] = ( 357, 358, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3677,5, -493,221, 685,248 ); - ent.v[ "angles" ] = ( 356,002, 357,995, 0,139827 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3656,42, -736,87, 688,767 ); - ent.v[ "angles" ] = ( 356,002, 357,995, 0,139827 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3663,41, -1323,71, 686,084 ); - ent.v[ "angles" ] = ( 356,002, 357,995, 0,139827 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3667,51, -1040,32, 682,723 ); - ent.v[ "angles" ] = ( 356,002, 357,995, 0,139827 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3868,62, -801,021, 457,125 ); - ent.v[ "angles" ] = ( 357, 358, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3868,49, -988,623, 460,125 ); - ent.v[ "angles" ] = ( 354, 358, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3625,4, -1628,77, 320 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3872,03, -1524,73, 320 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3678,5, -287,467, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3482,64, -1867,04, 456,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3352,4, -2356,24, 456 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3003,48, -2299,03, 456 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2590,87, -2269,11, 457,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2655,66, -1649,01, 456 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2901,48, -1681,08, 456 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3102,71, -1915,32, 456 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3456,13, -2170,92, 598,262 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3010,28, -1960,8, 591,954 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2925,41, -2483,73, 641,835 ); - ent.v[ "angles" ] = ( 351, 358, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2879,08, -2727,84, 633,593 ); - ent.v[ "angles" ] = ( 350,006, 0, -0,352578 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2862,04, -3293,85, 353 ); - ent.v[ "angles" ] = ( 0, 359,97, -0,347226 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2763,53, -2895,95, 361,441 ); - ent.v[ "angles" ] = ( 347,006, 0, -0,356352 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3180,76, -2887,53, 438,385 ); - ent.v[ "angles" ] = ( 355,968, 192,344, -9,44461 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3249,73, -3057,78, 391,704 ); - ent.v[ "angles" ] = ( 354,707, 202,739, -10,0294 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2491,13, -2050,51, 710,203 ); - ent.v[ "angles" ] = ( 357,006, 359,988, -0,347701 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2487,9, -1804,57, 706,202 ); - ent.v[ "angles" ] = ( 354,006, 0, -0,349134 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2260,4, -201,449, 262,592 ); - ent.v[ "angles" ] = ( 359,989, 171,004, -0,208784 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2160,55, -82,9182, 197,975 ); - ent.v[ "angles" ] = ( 356,993, 171,003, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3866,21, 1353,18, 563,345 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1886,41, -1720,6, 291,672 ); - ent.v[ "angles" ] = ( 345,215, 330,096, 0,110719 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1996,19, -1901,78, 323,575 ); - ent.v[ "angles" ] = ( 344,09, 351,76, 1,71682 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1466,62, -1386,24, 262,573 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1559,7, -672,363, 158,596 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2105,41, 560,552, 162,845 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2091,28, 350,864, 129,82 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2106,43, 602,916, 175,598 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2091,49, 354,395, 129,804 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2897,99, 1401,18, 576,357 ); - ent.v[ "angles" ] = ( 356, 358, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3307, 1464,03, 514,125 ); - ent.v[ "angles" ] = ( 359, 358, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_sun1" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -226800, -189884, 52587,9 ); - ent.v[ "angles" ] = ( 270, 357,138, 86,8624 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_pipe_gutter_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2965,98, 173,107, 323,125 ); - ent.v[ "angles" ] = ( 273,143, 342,78, -75,8207 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_pipe_gutter_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3082,87, 1761,98, 289,243 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_pipe_gutter_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3512,1, -347,475, 322,029 ); - ent.v[ "angles" ] = ( 271,414, 134,994, -135,002 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_pipe_gutter_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3111,31, 802,297, 321,125 ); - ent.v[ "angles" ] = ( 270, 0,190965, -0,190966 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_pipe_gutter_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2672,68, 801,287, 321,737 ); - ent.v[ "angles" ] = ( 273,013, 3,31781, -8,31019 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_pipe_gutter_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2579,83, -2178,28, 457,473 ); - ent.v[ "angles" ] = ( 271,035, 179,961, 90,0203 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3289,36, -5042,63, 1165,68 ); - ent.v[ "angles" ] = ( 360, 5, -2 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2610,55, 75,2607, 430,081 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 271 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2714,17, 815,818, 435,938 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2544,72, 1336,9, 500,634 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 224 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3314,69, 865,11, 518,104 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3511,42, 953,866, 520,042 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3780,82, 853,044, 539,584 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3694,58, 846,783, 629,209 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2833,24, 806,486, 517 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2523,96, 813,021, 587,368 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy_lng" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2201,89, 573,124, 511,436 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy_lng" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2200,94, 345,845, 509,457 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2456,86, -2517,19, 571,507 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3029,04, -2697,65, 580,23 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2596,93, -2120,95, 628,675 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2602,11, -1894,12, 627,461 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2833,59, 104,144, 516,747 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 271 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2487,06, 96,0294, 587,434 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 271 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3708,88, 503,941, 536,4 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 271 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_pipe_gutter_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2539,21, 1526,71, 324,371 ); - ent.v[ "angles" ] = ( 274,01, 174,034, -86,01 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2974,1, 659,42, 515,983 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2974,97, 208,728, 517,813 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3741,04, -1165,87, 664,186 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3738,96, -784,9, 661,706 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3738,97, -479,192, 665,19 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3648,14, 1539,94, 318 ); - ent.v[ "angles" ] = ( 270, 356,479, -50,4785 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3779,86, 1606,83, 318 ); - ent.v[ "angles" ] = ( 270, 357,274, -84,2737 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3895,99, 1589,47, 318 ); - ent.v[ "angles" ] = ( 270, 355,236, -111,236 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3988,26, 1515,23, 318 ); - ent.v[ "angles" ] = ( 270, 2,38594, -149,386 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4023,11, 1373,69, 318 ); - ent.v[ "angles" ] = ( 270, 0, 165 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3968,89, 1249,47, 318 ); - ent.v[ "angles" ] = ( 270, 0, 131 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3845,36, 1178,36, 318 ); - ent.v[ "angles" ] = ( 270, 358,091, 107,909 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3180,26, 1412,88, 490,111 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 271 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3208,49, 1742,55, 486,425 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3028,84, -2481,21, 579,955 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2599,58, -1726,28, 627,684 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_md_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3511,31, -318,887, 450,941 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3738,85, -1335,56, 662,027 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_lg_hvy" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2172,25, -2081,71, 681,754 ); - ent.v[ "angles" ] = ( 357, 179, 0 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_waterfall01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1838,81, 471,932, -170,716 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_waterfall02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2782,82, 450,194, 281,481 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3415,61, -433,509, 561,724 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2781,73, -223,881, 439,554 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3017,24, -1394,9, 563,634 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3632,96, -893,265, 575,628 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3520,39, -1374,8, 441,174 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3888,8, -896,447, 440,999 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2624,4, 150,528, 437,838 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2751,65, 762,975, 438,071 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2987,72, -2551,74, 564,396 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2656,23, -2458,26, 564,505 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3416,4, -536,09, 580,947 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3415,99, -584,489, 580,943 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3416,63, -632,75, 580,941 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3415,71, -680,362, 580,943 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3415,59, -728,113, 580,953 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3415,99, -776,38, 580,955 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3415,23, -824,431, 580,955 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3415,56, -968,144, 580,943 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3415,96, -1015,96, 580,952 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3415,84, -1063,94, 580,952 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3415,67, -1112,11, 580,944 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3416,31, -1160,46, 580,953 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3415,21, -1208, 580,942 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3415,29, -1256,1, 580,941 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3560,36, -536,039, 580,956 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3559,88, -583,886, 580,956 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3559,6, -632,116, 580,952 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3559,13, -680,421, 580,95 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3560, -728,238, 580,949 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3559,53, -776,009, 580,945 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3560,38, -823,971, 580,944 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3488,03, -463,266, 580,954 ); - ent.v[ "angles" ] = ( 89, 269,001, -1,99844 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3487,84, -1327,34, 580,951 ); - ent.v[ "angles" ] = ( 89, 269,001, -1,99844 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3344,3, -1327,99, 580,957 ); - ent.v[ "angles" ] = ( 89, 269,001, -1,99844 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3295,31, -1328,12, 580,955 ); - ent.v[ "angles" ] = ( 89, 269,001, -1,99844 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3247,91, -1328, 580,941 ); - ent.v[ "angles" ] = ( 89, 269,001, -1,99844 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3199,75, -1328,33, 580,943 ); - ent.v[ "angles" ] = ( 89, 269,001, -1,99844 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3152,13, -1327,91, 580,945 ); - ent.v[ "angles" ] = ( 89, 269,001, -1,99844 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2864,04, -1328,12, 580,946 ); - ent.v[ "angles" ] = ( 89, 269,001, -1,99844 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2912,21, -1327,8, 580,958 ); - ent.v[ "angles" ] = ( 89, 269,001, -1,99844 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2960,02, -1328,16, 580,94 ); - ent.v[ "angles" ] = ( 89, 269,001, -1,99844 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3008,39, -1327,95, 580,949 ); - ent.v[ "angles" ] = ( 89, 269,001, -1,99844 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3055,99, -1328,06, 580,952 ); - ent.v[ "angles" ] = ( 89, 269,001, -1,99844 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3103,77, -1328,04, 580,941 ); - ent.v[ "angles" ] = ( 89, 269,001, -1,99844 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3618,15, -966,04, 445,95 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3617,09, -1109,75, 445,96 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3617,81, -1158,28, 445,949 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3617,51, -1205,93, 445,94 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3616,61, -1254,04, 445,95 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3737,07, -893,996, 445,947 ); - ent.v[ "angles" ] = ( 89, 269,001, -1,99844 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3689,14, -894,096, 445,955 ); - ent.v[ "angles" ] = ( 89, 269,001, -1,99844 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_water_pipe_gutter_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3440,57, -1437,51, 320,125 ); - ent.v[ "angles" ] = ( 270, 0, -179 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2057,54, 890,7, 952,498 ); - ent.v[ "angles" ] = ( 270, 0, 1 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1907,61, -311,076, 1493,03 ); - ent.v[ "angles" ] = ( 270, 0, 1 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2361,04, 312,741, 500,362 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3193,93, 394,877, 454,961 ); - ent.v[ "angles" ] = ( 41, 180, -180 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2590,07, 1374,54, 463,373 ); - ent.v[ "angles" ] = ( 48, 225, 0 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2644,48, 1318,85, 464,697 ); - ent.v[ "angles" ] = ( 52, 225, 0 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3326,65, 845,763, 446,961 ); - ent.v[ "angles" ] = ( 42,9959, 90,2672, 0,489776 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3660,94, -458,65, 568,145 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 42 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3661,15, -1341,74, 567,816 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 42 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3520,72, -1424,37, 432,098 ); - ent.v[ "angles" ] = ( 41, 271, 0 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3461,96, -1094,02, 416,264 ); - ent.v[ "angles" ] = ( 43, 271, 0 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3151,95, 1468,03, 484,625 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3152,25, 1584,34, 484,625 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3153,03, 1683,81, 484,625 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3329,69, 1676,98, 484,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3328,03, 1565,2, 483,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3329,39, 1479,34, 483,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2960,56, 1683,07, 483,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2959,44, 1467,28, 483,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2960,23, 1568,43, 483,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2823,39, -225,612, 432,118 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 43 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2949,01, 1533,92, 461,267 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 42 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2351,88, 608,315, 273,373 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2351,88, 455,895, 273,806 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2351,88, 303,208, 274,522 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2354,88, 600,976, 499,639 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2354,88, 505,95, 501,692 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2354,88, 404,029, 501,749 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2354,88, 310,087, 501,633 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2357,13, 309,969, 499,584 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2357,13, 405,538, 501,118 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2357,13, 508,354, 501,64 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2357,13, 600,27, 500,057 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2784,96, 1740,32, 471,764 ); - ent.v[ "angles" ] = ( 43, 90, 0 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3919,8, -894,684, 432,555 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 42 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3794,66, -1218,66, 431,818 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 42 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2302,97, -371,047, 429,001 ); - ent.v[ "angles" ] = ( 42,6, 90, 0 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2753,74, 795,268, 441,295 ); - ent.v[ "angles" ] = ( 16, 90, 0 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3326,49, 855,314, 454,848 ); - ent.v[ "angles" ] = ( 16, 90, 0 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2562,42, 1327,05, 435,508 ); - ent.v[ "angles" ] = ( 30, 226, 0 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2607,56, 1273,2, 420,677 ); - ent.v[ "angles" ] = ( 30, 226, 0 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2782,23, 1751,44, 482,413 ); - ent.v[ "angles" ] = ( 19, 90, 0 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2309,29, -358,84, 433,584 ); - ent.v[ "angles" ] = ( 16, 90, 1 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3790,87, -535,481, 436,573 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 42 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3582,67, -2141,47, 476,36 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 42 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3711,34, 514,207, 447,481 ); - ent.v[ "angles" ] = ( 43, 270, 0 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2519,26, -2406,24, 597,177 ); - ent.v[ "angles" ] = ( 11,9976, 89,9281, 0 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3544,36, -3507,43, 449,929 ); - ent.v[ "angles" ] = ( 3,01821, 59,571, -1,81287 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3553,52, -3500,25, 476,533 ); - ent.v[ "angles" ] = ( 354,023, 59,8561, -1,82026 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3511,38, -1436,38, 440,787 ); - ent.v[ "angles" ] = ( 9, 270, 0 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3800,4, -1216,48, 438,561 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 19 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3931,09, -888,366, 439,714 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 19 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3805,88, -533,379, 446,894 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 19 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3704,72, 493,377, 448,333 ); - ent.v[ "angles" ] = ( 21, 270, 0 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3177,56, 392,591, 465,691 ); - ent.v[ "angles" ] = ( 20,9699, 182,213, 1,15094 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2835,92, -224,335, 439,901 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 21 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3407,11, -368,089, 568,58 ); - ent.v[ "angles" ] = ( 43,9, 90,1386, 0,120855 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2990,87, -3629,94, 552,665 ); - ent.v[ "angles" ] = ( 23,9966, 91,0931, 0,392252 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3593,98, -2141,16, 482,712 ); - ent.v[ "angles" ] = ( 18,973, 3,17252, 1,0324 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_window_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2824,75, 772,625, 503,709 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_window_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2549,72, 772,518, 502,413 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_window_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2940,63, 645,311, 503,195 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_window_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2940,99, 241,255, 501,32 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_window_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2820,88, 138,39, 503,01 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_window_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2544,78, 138,375, 503,609 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_window_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2940,34, 364,312, 500,931 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2948,04, -1440,63, 572,801 ); - ent.v[ "angles" ] = ( 18,997, 271,058, 0,344309 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2941,81, -1423,3, 567,642 ); - ent.v[ "angles" ] = ( 42, 270, -1 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_fst" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2405,75, 573,203, 71,1382 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 222 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3661,97, -894,547, 564,731 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 39,9 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_window_ray_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2826,26, 772,625, 505,195 ); - ent.v[ "angles" ] = ( 26,9647, 87,6397, -1,42039 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_window_ray_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2551,86, 772,625, 505,559 ); - ent.v[ "angles" ] = ( 27,9847, 88,7434, -0,937363 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_window_ray_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2940,63, 647,096, 506,251 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 24 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_window_ray_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2940,63, 297,078, 500,199 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 24 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_window_ray_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2824,44, 138,375, 503,259 ); - ent.v[ "angles" ] = ( 25, 268, 0 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_window_ray_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2545,44, 137,779, 500,514 ); - ent.v[ "angles" ] = ( 26, 268, 0 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2391,66, 611,776, 103,031 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 218 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_fst" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2396,57, 253,641, 76,3186 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_bttm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2235,5, 374,268, -110,141 ); - ent.v[ "angles" ] = ( 357, 168, 0 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_fst" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1306,79, 568,701, -676,571 ); - ent.v[ "angles" ] = ( 344,867, 134,648, 9,63852 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_fst" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1301,05, 579,184, -666,672 ); - ent.v[ "angles" ] = ( 344,835, 214,428, -0,969892 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2902,42, 264,533, 543,875 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2902,38, 360,376, 543,875 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2902,38, 456,675, 543,875 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2902,21, 648,517, 543,875 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2880,29, 734,71, 543,875 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2879,96, 174,158, 543,875 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2783,01, 733,56, 543,875 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2688,09, 733,84, 543,875 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2591,59, 733,826, 543,875 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2495,45, 733,606, 543,875 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2495,34, 173,999, 543,875 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2590,97, 173,697, 543,875 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2784,74, 174,146, 543,875 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3537,28, -3526,41, 442,718 ); - ent.v[ "angles" ] = ( 38,3295, 47,781, 7,65557 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3523,3, -3514,35, 442,871 ); - ent.v[ "angles" ] = ( 39,0145, 57,0682, 13,484 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3543,61, -3519,54, 465,513 ); - ent.v[ "angles" ] = ( 18,4776, 52,0136, 11,0123 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2517,22, -2421,74, 586,074 ); - ent.v[ "angles" ] = ( 10, 95, 0 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2701,04, -2778,22, 584,774 ); - ent.v[ "angles" ] = ( 13,9913, 269,061, 0,498551 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2516,71, -2778,17, 585,529 ); - ent.v[ "angles" ] = ( 13,9913, 269,061, 0,498551 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2984,72, -3641,05, 550,556 ); - ent.v[ "angles" ] = ( 42,87, 89,5384, -3,7218 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1872,9, -228,446, 314,628 ); - ent.v[ "angles" ] = ( 14,9977, 114,965, -0,267934 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1738,99, -303,484, 315,212 ); - ent.v[ "angles" ] = ( 15,9976, 114,96, -0,26924 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1793,12, -417,802, 315,731 ); - ent.v[ "angles" ] = ( 14,9977, 296,035, 0,267942 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1929,44, -339,026, 315,253 ); - ent.v[ "angles" ] = ( 14,9977, 296,035, 0,267942 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2943,06, -1812,14, 898,594 ); - ent.v[ "angles" ] = ( 82, 269, 0 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2944,74, -1682,84, 898,483 ); - ent.v[ "angles" ] = ( 84, 89, 180 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3007,78, -1748,38, 898,422 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 81 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_wrm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2880,25, -1745,33, 898,433 ); - ent.v[ "angles" ] = ( 85, 180, -180 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1874,11, -215,119, 323,655 ); - ent.v[ "angles" ] = ( 15, 116, 0 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1746,59, -291,645, 328,851 ); - ent.v[ "angles" ] = ( 15, 116, 0 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1798,97, -429,447, 325,798 ); - ent.v[ "angles" ] = ( 15, 279, 0 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1934,31, -354,322, 328,017 ); - ent.v[ "angles" ] = ( 11,4846, 294,293, 3,91956 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2750,86, 784,498, 432,981 ); - ent.v[ "angles" ] = ( 40,5918, 91,3119, 0,940854 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2878,58, -1743,57, 901,234 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2944,42, -1811,47, 898,517 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3009,25, -1747,08, 898,626 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2946,59, -1680,37, 898,393 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2488,4, -2474,09, 570,393 ); - ent.v[ "angles" ] = ( 31,951, 178,536, -1,12694 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2487,37, -2728,05, 571,976 ); - ent.v[ "angles" ] = ( 40,7852, 180,079, 0,196099 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3140,54, -1068,69, 778,076 ); - ent.v[ "angles" ] = ( 32,949, 66,5757, -41,0534 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2960,64, -1073,55, 750,639 ); - ent.v[ "angles" ] = ( 32,949, 66,5757, -41,0534 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2787,47, -1082,96, 718,765 ); - ent.v[ "angles" ] = ( 32,949, 66,5757, -41,0534 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2572,65, -1044,42, 664,627 ); - ent.v[ "angles" ] = ( 33,1569, 63,0048, 2,99854 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3149,58, -911,372, 773,073 ); - ent.v[ "angles" ] = ( 32,949, 66,5757, -41,0534 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2969,56, -938,68, 754,46 ); - ent.v[ "angles" ] = ( 32,949, 66,5757, -41,0534 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2786,79, -931,982, 709,494 ); - ent.v[ "angles" ] = ( 32,949, 66,5757, -41,0534 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2800,86, -809,553, 710,896 ); - ent.v[ "angles" ] = ( 32,949, 66,5757, -41,0534 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2599,22, -954,256, 686,9 ); - ent.v[ "angles" ] = ( 33,1479, 56,4605, 19,7349 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2010,45, -910,178, 394,208 ); - ent.v[ "angles" ] = ( 20,0221, 38,5956, -173,608 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2168,04, -942,698, 504,532 ); - ent.v[ "angles" ] = ( 20,0221, 38,5956, -163,608 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2173,29, -795,487, 520,607 ); - ent.v[ "angles" ] = ( 20,0221, 38,5956, -160,608 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_lg_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2168,17, -1077,79, 543,967 ); - ent.v[ "angles" ] = ( 20,0221, 38,5956, -160,608 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_lg_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2194,26, -1210,9, 556,544 ); - ent.v[ "angles" ] = ( 20,0221, 38,5956, 169,392 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_lg_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2200,12, -1334,96, 523,961 ); - ent.v[ "angles" ] = ( 20,0221, 38,5956, -160,608 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2189,32, -891,1, 492,362 ); - ent.v[ "angles" ] = ( 20,0221, 38,5956, 8,39143 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2193,02, -762,365, 499,763 ); - ent.v[ "angles" ] = ( 20,0221, 38,5956, 8,39143 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_lg_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2177,44, -1021,97, 523,211 ); - ent.v[ "angles" ] = ( 20,022, 38,5956, -1,60847 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_lg_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2164,83, -1185,87, 521,831 ); - ent.v[ "angles" ] = ( 20,022, 38,5956, -1,60847 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_lg_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2184,51, -1323,61, 518,717 ); - ent.v[ "angles" ] = ( 20,022, 38,5956, -1,60847 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3477,63, 744,377, 511,35 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3661,63, 744,133, 511,323 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3672,01, 571,437, 511,303 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3316,68, 743,289, 511,398 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3327,38, 565,932, 516,325 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3477,01, 571,949, 511,312 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2612,1, -1061,28, 655,885 ); - ent.v[ "angles" ] = ( 31,0783, 65,7405, -162,496 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2619,65, -910,818, 655,989 ); - ent.v[ "angles" ] = ( 31,0784, 65,7407, -159,496 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2786,84, -1077,98, 708,262 ); - ent.v[ "angles" ] = ( 31,0784, 65,7407, -159,496 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2823,01, -955,32, 700,916 ); - ent.v[ "angles" ] = ( 31,0784, 65,7407, -159,496 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2979,26, -1046,74, 723,032 ); - ent.v[ "angles" ] = ( 31,0783, 65,7406, -155,496 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3004,75, -943,689, 753,719 ); - ent.v[ "angles" ] = ( 31,0783, 65,7406, -155,496 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_upl_light_ray_sun_window_1s" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3134,99, -1055,34, 762,436 ); - ent.v[ "angles" ] = ( 31,0783, 65,7405, -144,496 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2801,38, 1489,6, 523,002 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2800,69, 1520,69, 522,973 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2717,94, 1506,33, 486,462 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3358,52, -969,8, 569,052 ); - ent.v[ "angles" ] = ( 11,099, 1,01578, 0,115354 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3229,48, 1066,06, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3263,01, -234,375, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3457,47, -3326,07, 358,594 ); - ent.v[ "angles" ] = ( 359, 165, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2946,91, -3904,54, 722,786 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3558,05, -3930,7, 1058,46 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3612,05, -2744, 651,99 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2067,08, -1478,53, 441,206 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1903,98, -430,666, 104,366 ); - ent.v[ "angles" ] = ( 356, 170, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2165,39, 1104,85, 329,093 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_distant_cloud_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3544,4, -4948,18, 1251,61 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 6 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_generator_grays" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2688,72, 455,641, 442,073 ); - ent.v[ "angles" ] = ( 90, 54,5764, -65,4236 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_generator_grays" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2688,43, 455,536, 441,807 ); - ent.v[ "angles" ] = ( 90, 0, -67 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1895,9, 565,687, -167,766 ); - ent.v[ "angles" ] = ( 353, 174, 0 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1244,07, 576,876, -693,697 ); - ent.v[ "angles" ] = ( 352,001, 156,99, 0,140534 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2035,49, 402,351, -157,643 ); - ent.v[ "angles" ] = ( 353, 174, 0 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1698,96, 605,132, -332,233 ); - ent.v[ "angles" ] = ( 353,608, 198,16, -4,85904 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_waterfall_splash_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1854,55, 364,939, -163,948 ); - ent.v[ "angles" ] = ( 12,2948, 156,405, -3,17996 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3146,53, -1254,28, 754,635 ); - ent.v[ "angles" ] = ( 356,034, 180,014, -0,259465 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3335,71, -1736,28, 491,454 ); - ent.v[ "angles" ] = ( 359,034, 180, -0,258879 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2282,31, 19,375, 371,727 ); - ent.v[ "angles" ] = ( 359, 165, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 4092,12, 25,6861, 227,641 ); - ent.v[ "angles" ] = ( 299,012, 166,991, -1,483 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 4014,55, 1070,04, 147,36 ); - ent.v[ "angles" ] = ( 293,795, 181,757, 2,51828 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 4034,02, -1979,78, 161,189 ); - ent.v[ "angles" ] = ( 320,41, 195,549, 1,61723 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3930,39, -1243,23, 38,6635 ); - ent.v[ "angles" ] = ( 283, 177, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3066,92, 1500,46, 562,823 ); - ent.v[ "angles" ] = ( 340,888, 181,296, -5,4186 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3800,89, 1023,33, 307,845 ); - ent.v[ "angles" ] = ( 356,292, 165,145, -2,06136 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3327,88, -2180,56, 659,855 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2730,34, 1019,05, 320,125 ); - ent.v[ "angles" ] = ( 358,024, 7,0048, -0,313043 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2666,99, 13,2197, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3840,36, -886,492, 469,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3652,03, -1884,81, 367 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3584,13, -2329,73, 367,602 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2729,35, -2605,48, 674,223 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2939,2, -1258,96, 713,811 ); - ent.v[ "angles" ] = ( 340, 358, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1844,41, -2066,98, 130,677 ); - ent.v[ "angles" ] = ( 305,479, 33,6167, -5,24349 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1488,43, -85,7405, -94,2962 ); - ent.v[ "angles" ] = ( 305,096, 324,366, 24,4648 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2148,81, 1365,86, 174 ); - ent.v[ "angles" ] = ( 311,723, 301,631, 4,35761 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3479,9, 69,7155, 577,992 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3393,92, -2166,14, 640,596 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 354 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2898,54, -3727,83, 653,125 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2599,13, -3497,7, 438,397 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3273,14, -3189,64, 371,75 ); - ent.v[ "angles" ] = ( 0, 359,97, -0,347226 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3250,31, -3669,57, 421 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 6 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_lg_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1200,31, -797,216, -118,451 ); - ent.v[ "angles" ] = ( 303,009, 1,71394, -1,07919 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2687,87, 174,395, 543,875 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os_vista" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 638,634, 961,201, 168,752 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os_vista" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 5679,35, 993,631, 155,872 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os_vista" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 735,897, -3419,67, 220,894 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os_vista" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -26,8205, -1383,48, 242,054 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os_vista" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2891,21, 3493,35, 248 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os_vista" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 5009,29, -3159,64, 321,414 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_neg_os_vista" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 6261,82, -1324,44, 236,601 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_os_vista" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 638,634, 961,201, 168,752 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_os_vista" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 5679,35, 993,631, 155,872 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_os_vista" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 735,897, -3419,67, 220,894 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_os_vista" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -26,8205, -1383,48, 242,054 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_os_vista" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2891,21, 3493,35, 248 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_os_vista" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 5009,29, -3159,64, 321,414 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_uplink_rain_med_fast_os_vista" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 6261,82, -1324,44, 236,601 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3233,67, 1272,61, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 4 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md_neg" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3628,61, 1076,71, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 358 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_upl_rain_gust_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2860,24, 1062,4, 320,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3017,58, -2551,49, 567,224 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 42 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3028,01, -2556,53, 580,353 ); - ent.v[ "angles" ] = ( 18,973, 3,17252, 1,0324 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1747,69, -371,353, 315,133 ); - ent.v[ "angles" ] = ( 15, 215, 0 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2567,28, -2114,59, 576,162 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2740,27, -1165,56, 562,277 ); - ent.v[ "angles" ] = ( 90, 6,82842, -83,1716 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2612,3, -1166,33, 562,446 ); - ent.v[ "angles" ] = ( 90, 6,82842, -83,1716 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2483,58, -1168,2, 562,438 ); - ent.v[ "angles" ] = ( 90, 6,82842, -83,1716 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2867,96, -1167,72, 562,468 ); - ent.v[ "angles" ] = ( 90, 6,82842, -83,1716 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2994,64, -1166,52, 562,419 ); - ent.v[ "angles" ] = ( 90, 6,82842, -83,1716 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3124,06, -1164,4, 562,41 ); - ent.v[ "angles" ] = ( 90, 6,82842, -83,1716 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2450,1, -963,719, 561,481 ); - ent.v[ "angles" ] = ( 90, 180, 178 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2449,89, -835,767, 561,508 ); - ent.v[ "angles" ] = ( 90, 0, -1 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2739,31, -628,267, 561,481 ); - ent.v[ "angles" ] = ( 90, 6,82842, -83,1716 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2611,53, -626,74, 561,429 ); - ent.v[ "angles" ] = ( 90, 6,82842, -83,1716 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2482,33, -625,875, 561,467 ); - ent.v[ "angles" ] = ( 90, 6,82842, -83,1716 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3292,49, -1327,71, 448,875 ); - ent.v[ "angles" ] = ( 90, 180, -179 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3774,4, -372,242, 433,634 ); - ent.v[ "angles" ] = ( 16, 95, 0 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3775,66, -355,62, 448,144 ); - ent.v[ "angles" ] = ( 11,9976, 89,9281, -1 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3414,04, -355,076, 577,001 ); - ent.v[ "angles" ] = ( 11,9976, 89,9281, -1 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3330,07, 847,411, 448,407 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2750,21, 784,602, 432,931 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3193,35, 394,038, 455,554 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2701,39, -2421,88, 585,312 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2518,01, -2421,92, 585,018 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2699,54, -2778,23, 586,122 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2943,67, -1433,41, 566,958 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1793,24, -417,901, 316,191 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1876,85, -226,804, 315,052 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2647,23, 1318,38, 463,205 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3714,34, 513,339, 448,347 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2823,92, -225,783, 431,642 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3408,79, -362,614, 567,01 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3588,14, -2144,4, 474,095 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2784,65, 1751,88, 469,64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2588,01, 1376,51, 463,901 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3470,19, -126,583, 433,483 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3920,17, -896,397, 431,918 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3520,14, -1425,21, 433,069 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3017,15, -2552,36, 566,764 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1926,76, -339,881, 313,908 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1740,11, -302,663, 316,446 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2566,61, -1984,25, 576,152 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2565,88, -1882,2, 576,158 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2567,25, -1779,98, 576,159 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3673,68, -1342,69, 567,442 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3661,37, -455,664, 567,63 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3661,91, -894,117, 564,75 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2326, -2170,21, 536,667 ); - ent.v[ "angles" ] = ( 0, 90, 90 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3773,65, -370,826, 434,251 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3738,4, 1461,08, 515,92 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3738,59, 1320,72, 516,327 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3878,09, 1320,41, 516,584 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_red_blink_fst_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3879,14, 1460,53, 516,166 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2497,65, -1565,42, 555,583 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2835,73, 785,691, 596,712 ); - ent.v[ "angles" ] = ( 89, 269,001, -179,999 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3365,49, 1465,38, 485,456 ); - ent.v[ "angles" ] = ( 82,0703, 1,06083, 0 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3364,25, 1576,03, 485,581 ); - ent.v[ "angles" ] = ( 82,0703, 1,06083, 0 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3365,54, 1687,88, 485,464 ); - ent.v[ "angles" ] = ( 80,0701, 1,06083, 0 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2947,53, 1323,95, 465,596 ); - ent.v[ "angles" ] = ( 86,0703, 1,06093, 0 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3216,15, -624,56, 562,515 ); - ent.v[ "angles" ] = ( 90, 6,82842, -83,1716 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3087,43, -627,051, 562,442 ); - ent.v[ "angles" ] = ( 90, 6,82842, -83,1716 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2959,56, -628,339, 562,419 ); - ent.v[ "angles" ] = ( 90, 6,82842, -83,1716 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_water_roof_spill_splash_xshrt" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3769,85, 859,714, 312,33 ); - ent.v[ "angles" ] = ( 0, 94, 3 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3326,86, 413,644, 514,384 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_blue" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3327,34, 221,83, 514,415 ); - ent.v[ "angles" ] = ( 90, 182,261, 172,261 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3802,06, -1217,94, 431,603 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3799,41, -535,69, 435,268 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3535,59, -3515,08, 440,302 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3549,54, -3522,36, 465,993 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2984,68, -3638,38, 550,642 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2979,9, 489,025, 584,433 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3192,67, -0,733948, 495,467 ); - ent.v[ "angles" ] = ( 87, 359, 180 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3314,4, -123,48, 486,63 ); - ent.v[ "angles" ] = ( 88, 271, 0 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2508,79, -1403,91, 559,435 ); - ent.v[ "angles" ] = ( 86,9221, 285,568, -166,707 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2459,33, -388,164, 434,112 ); - ent.v[ "angles" ] = ( 89, 88,9989, 179,999 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2463,35, -388,286, 564,318 ); - ent.v[ "angles" ] = ( 89, 88,9989, 179,999 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2657,51, -387,155, 564,093 ); - ent.v[ "angles" ] = ( 89, 88,9989, 179,999 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2795,29, -580,639, 564,116 ); - ent.v[ "angles" ] = ( 89, 88,9989, 179,999 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2274,68, -388,055, 564,066 ); - ent.v[ "angles" ] = ( 89, 88,9989, 179,999 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3324,31, -1073,95, 545,179 ); - ent.v[ "angles" ] = ( 90, 0, 180 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3326,28, -879,715, 546,352 ); - ent.v[ "angles" ] = ( 89, 180, 0 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2731,64, -470,318, 421,55 ); - ent.v[ "angles" ] = ( 89, 89,0067, -90,9904 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2689,24, 813,23, 584,131 ); - ent.v[ "angles" ] = ( 89, 269,001, -179,999 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2540,74, 786,614, 597,017 ); - ent.v[ "angles" ] = ( 89, 269, -180 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2557,83, 1649,72, 464,661 ); - ent.v[ "angles" ] = ( 90, 0, 180 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3042,32, -1328,95, 448,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2848,63, -1329,33, 448,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2690,67, 99,9502, 583,895 ); - ent.v[ "angles" ] = ( 90, 303,785, 33,7846 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2835,79, 126,446, 597,654 ); - ent.v[ "angles" ] = ( 90, 303,785, 33,7846 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2539,37, 126,216, 596,738 ); - ent.v[ "angles" ] = ( 90, 303,785, 33,7846 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3009,78, 2657,43, 236,582 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -1; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3296,22, 2813,38, 236,641 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -3; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3464,34, 3198,94, 236,907 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -1; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3296,97, 3583,83, 235,657 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -3; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2812,71, 2657,35, 236,368 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -1; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2527,11, 2813,08, 237,006 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -3; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2359,99, 3198,51, 235,603 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -1; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2525,95, 3583,82, 235,208 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -2; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3843,6, 712,485, 431,667 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1780,67, -1500,64, 215,981 ); - ent.v[ "angles" ] = ( 287,701, 143,213, -111,277 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_splash_50" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2184,77, -2010,49, 368,128 ); - ent.v[ "angles" ] = ( 286,738, 199,827, 160,352 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2415,14, -2032,5, 586,446 ); - ent.v[ "angles" ] = ( 90, 180, -90 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2320,32, -2030,8, 586,517 ); - ent.v[ "angles" ] = ( 90, 180, -90 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2319,48, -1839,7, 586,533 ); - ent.v[ "angles" ] = ( 90, 180, -90 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2415,42, -1840,7, 586,568 ); - ent.v[ "angles" ] = ( 90, 180, -90 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_beacon_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2911,94, 3750,4, 235,324 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -3; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2766,4, -1522,78, 555,981 ); - ent.v[ "angles" ] = ( 89, 0, 90 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2900,13, -710,16, 583,42 ); - ent.v[ "angles" ] = ( 89, 88,9989, 179,999 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2263,95, -1405,44, 562,252 ); - ent.v[ "angles" ] = ( 88,7786, 307,686, -142,601 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2860,67, 1419,32, 505,692 ); - ent.v[ "angles" ] = ( 90, 6,82842, -83,1716 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2717,54, 1371,51, 506,439 ); - ent.v[ "angles" ] = ( 90, 0, -1 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2713,89, 1660,05, 506,501 ); - ent.v[ "angles" ] = ( 90, 0, -1 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2859,86, 1609,59, 506,493 ); - ent.v[ "angles" ] = ( 90, 6,82842, -83,1716 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3710,94, 842,765, 441,59 ); - ent.v[ "angles" ] = ( 89, 269,001, -179,999 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_waterfall_vista" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4816,73, 1666,45, -1332,04 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2719,81, -200,111, 442,41 ); - ent.v[ "angles" ] = ( 90, 0, -1 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2591,82, -199,66, 442,372 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2587,52, -327,324, 442,388 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2719,44, -327,046, 442,393 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_yellow_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3590,45, 0,530397, 498,463 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 42 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_uplink_anamorphic" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3597,12, 0,783489, 496,05 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_rain_lit_corona" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3594,73, 1,78948, 498,904 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 19 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2120,85, -992,157, 448,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2119,18, -799,892, 448,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_yllw_ribbon" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3716,42, -1149,08, 316 ); - ent.v[ "angles" ] = ( 283,198, 268,636, 87,3101 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_yllw_ribbon" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3717,97, -1165,89, 317 ); - ent.v[ "angles" ] = ( 307,034, 304,402, 84,0626 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_blue_ribbon" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2516,83, 177,232, 444,875 ); - ent.v[ "angles" ] = ( 59,9688, 23,6611, 142,454 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_blue_ribbon" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2501,88, 163,664, 444,875 ); - ent.v[ "angles" ] = ( 81,3319, 292,048, -137,69 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_gray_blue_ribbon" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2481,79, 174,633, 444,875 ); - ent.v[ "angles" ] = ( 72,1109, 107,254, -136,205 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3336,12, -3690,73, 441,488 ); - ent.v[ "angles" ] = ( 30,3973, 254,117, -5,36284 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3352,13, -3695,58, 439 ); - ent.v[ "angles" ] = ( 23,6594, 258,087, -3,89569 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_recessed_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3330,07, -3698,78, 465 ); - ent.v[ "angles" ] = ( 17,6727, 258,514, -3,74476 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_v_shape_cool" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2726,34, -2609,72, 573,865 ); - ent.v[ "angles" ] = ( 90, 0, -1 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2227,58, -385,139, 437,403 ); - ent.v[ "angles" ] = ( 89, 88,9987, 177,999 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2817,56, -1404,78, 559,692 ); - ent.v[ "angles" ] = ( 86,9221, 285,568, -166,707 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3104,21, -1405,86, 556,982 ); - ent.v[ "angles" ] = ( 86,9221, 285,569, -165,706 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3592,37, -1406,25, 555,203 ); - ent.v[ "angles" ] = ( 88,3686, 219,881, 128,611 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3339,6, -619,213, 557,677 ); - ent.v[ "angles" ] = ( 89, 180, -179 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3339,22, -1143,37, 559,54 ); - ent.v[ "angles" ] = ( 89, 180, -179 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3027,63, -1226,82, 563,208 ); - ent.v[ "angles" ] = ( 86,9221, 285,572, 15,2971 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2370,34, -627,876, 556,139 ); - ent.v[ "angles" ] = ( 89, 89,001, 89,0103 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3325,9, -691,829, 546,293 ); - ent.v[ "angles" ] = ( 89, 180, 0 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_floodlight_sqr_cool_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3098,57, -1427,3, 578,914 ); - ent.v[ "angles" ] = ( 89, 0, 90 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_upl_floodlight_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2443,42, -1683,2, 560,04 ); - ent.v[ "angles" ] = ( 89, 88,9989, 179,999 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2784,87, 1717,74, 475,695 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_exit_sign" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2630,37, 1366,49, 475,987 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "delay" ] = -21; -} diff --git a/Multiplayer Maps/mp_uplink/maps/mp/mp_uplink.gsc b/Multiplayer Maps/mp_uplink/maps/mp/mp_uplink.gsc deleted file mode 100644 index 5a16718..0000000 --- a/Multiplayer Maps/mp_uplink/maps/mp/mp_uplink.gsc +++ /dev/null @@ -1,93 +0,0 @@ -#include maps/mp/gametypes/_spawning; -#include maps/mp/_compass; -#include maps/mp/gametypes/_globallogic_utils; -#include maps/mp/_utility; -#include common_scripts/utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_uplink_fx::main(); - precachemodel( "collision_physics_128x128x10" ); - precachemodel( "collision_physics_256x256x10" ); - precachemodel( "collision_physics_64x64x10" ); - precachemodel( "collision_physics_32x32x10" ); - maps/mp/_load::main(); - maps/mp/mp_uplink_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_uplink" ); - setdvar( "compassmaxrange", "2100" ); - registerclientfield( "world", "trigger_lightning", 1, 1, "int" ); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - spawncollision( "collision_physics_128x128x10", "collider", ( 1661, 345,5, 298,5 ), ( 0, 1, 0 ) ); - spawncollision( "collision_physics_128x128x10", "collider", ( 1661, 345,5, 313,5 ), ( 0, 1, 0 ) ); - spawncollision( "collision_physics_256x256x10", "collider", ( 3257, -3,5, 872,5 ), ( 360, 270, 90 ) ); - spawncollision( "collision_physics_256x256x10", "collider", ( 3394, -136,5, 872,5 ), ( 270, 183,902, 86,0983 ) ); - spawncollision( "collision_physics_256x256x10", "collider", ( 3270,5, -3,5, 872,5 ), ( 360, 270, 90 ) ); - spawncollision( "collision_physics_256x256x10", "collider", ( 3394, 129,5, 872,5 ), ( 270, 183,902, 86,0983 ) ); - spawncollision( "collision_physics_256x256x10", "collider", ( 3399,5, 1, 990 ), ( 1,12, 270, 180 ) ); - spawncollision( "collision_physics_128x128x10", "collider", ( 2343,5, 865,5, 320,5 ), vectorScale( ( 0, 1, 0 ), 332,7 ) ); - spawncollision( "collision_physics_64x64x10", "collider", ( 2291, 904, 316 ), ( 355,461, 27,1924, -2,32818 ) ); - spawncollision( "collision_physics_32x32x10", "collider", ( 3049,5, -3452, 339 ), ( 78,6193, 281,502, -105,573 ) ); - maps/mp/gametypes/_spawning::level_use_unified_spawning( 1 ); - level.remotemotarviewdown = 50; - level thread gondola_sway(); - glasses = getstructarray( "glass_shatter_on_spawn", "targetname" ); - i = 0; - while ( i < glasses.size ) - { - radiusdamage( glasses[ i ].origin, 64, 101, 100 ); - i++; - } -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2350", reset_dvars ); - ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1000", reset_dvars ); -} - -gondola_sway() -{ - gondola_cab = getent( "gondola_cab", "targetname" ); - gondola_cab setmovingplatformenabled( 1 ); - while ( 1 ) - { - randomswingangle = randomfloatrange( 0,25, 0,5 ); - randomswingtime = randomfloatrange( 2,5, 4 ); - gondola_cab rotateto( ( randomswingangle * 0,5, randomswingangle * 0,6, randomswingangle * 0,8 ), randomswingtime, randomswingtime * 0,3, randomswingtime * 0,3 ); - gondola_cab playsound( "amb_gondola_swing" ); - wait randomswingtime; - gondola_cab rotateto( ( ( randomswingangle * 0,5 ) * -1, ( randomswingangle * -1 ) * 0,6, ( randomswingangle * 0,8 ) * -1 ), randomswingtime, randomswingtime * 0,3, randomswingtime * 0,3 ); - gondola_cab playsound( "amb_gondola_swing_back" ); - wait randomswingtime; - gondola_cab destroy_corpses(); - } -} - -destroy_corpses() -{ - time = getTime(); - corpses = getcorpsearray(); - i = 0; - while ( i < corpses.size ) - { - if ( ( corpses[ i ].birthtime + 3000 ) < time ) - { - if ( distance2dsquared( corpses[ i ].origin, self.origin ) < 10000 ) - { - corpses[ i ] delete(); - } - } - i++; - } -} diff --git a/Multiplayer Maps/mp_uplink/maps/mp/mp_uplink_amb.gsc b/Multiplayer Maps/mp_uplink/maps/mp/mp_uplink_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_uplink/maps/mp/mp_uplink_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_uplink/maps/mp/mp_uplink_fx.gsc b/Multiplayer Maps/mp_uplink/maps/mp/mp_uplink_fx.gsc deleted file mode 100644 index 581cb6b..0000000 --- a/Multiplayer Maps/mp_uplink/maps/mp/mp_uplink_fx.gsc +++ /dev/null @@ -1,106 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); -#using_animtree( "fxanim_props_dlc3" ); - -main() -{ - precache_fxanim_props(); - precache_fxanim_props_dlc3(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_uplink_fx::main(); -} - -precache_scripted_fx() -{ -} - -precache_createfx_fx() -{ - level._effect[ "fx_mp_uplink_rain_med_fast_os" ] = loadfx( "weather/fx_mp_uplink_rain_med_fast_os" ); - level._effect[ "fx_mp_uplink_rain_med_fast_os_vista" ] = loadfx( "weather/fx_mp_uplink_rain_med_fast_os_vista" ); - level._effect[ "fx_mp_uplink_rain_med_fast_neg_os" ] = loadfx( "weather/fx_mp_uplink_rain_med_fast_neg_os" ); - level._effect[ "fx_mp_uplink_rain_med_fast_neg_os_vista" ] = loadfx( "weather/fx_mp_uplink_rain_med_fast_neg_os_vista" ); - level._effect[ "fx_mp_upl_rain_gust_md" ] = loadfx( "maps/mp_maps/fx_mp_upl_rain_gust_md" ); - level._effect[ "fx_mp_upl_rain_gust_lg" ] = loadfx( "maps/mp_maps/fx_mp_upl_rain_gust_lg" ); - level._effect[ "fx_mp_upl_rain_gust_lg_neg" ] = loadfx( "maps/mp_maps/fx_mp_upl_rain_gust_lg" ); - level._effect[ "fx_mp_upl_rain_gust_md_neg" ] = loadfx( "maps/mp_maps/fx_mp_upl_rain_gust_md_neg" ); - level._effect[ "fx_mp_upl_rain_splash_50" ] = loadfx( "maps/mp_maps/fx_mp_upl_rain_splash_50" ); - level._effect[ "fx_mp_upl_rain_splash_100" ] = loadfx( "maps/mp_maps/fx_mp_upl_rain_splash_100" ); - level._effect[ "fx_mp_upl_rain_splash_200" ] = loadfx( "maps/mp_maps/fx_mp_upl_rain_splash_200" ); - level._effect[ "fx_mp_upl_rain_splash_300" ] = loadfx( "maps/mp_maps/fx_mp_upl_rain_splash_300" ); - level._effect[ "fx_mp_upl_rain_splash_400" ] = loadfx( "maps/mp_maps/fx_mp_upl_rain_splash_400" ); - level._effect[ "fx_water_pipe_gutter_md" ] = loadfx( "water/fx_water_pipe_gutter_md" ); - level._effect[ "fx_mp_water_roof_spill_lg_hvy" ] = loadfx( "maps/mp_maps/fx_mp_water_roof_spill_lg_hvy" ); - level._effect[ "fx_mp_water_roof_spill_lg_hvy_lng" ] = loadfx( "maps/mp_maps/fx_mp_water_roof_spill_lg_hvy_lng" ); - level._effect[ "fx_mp_water_roof_spill_md_hvy" ] = loadfx( "maps/mp_maps/fx_mp_water_roof_spill_md_hvy" ); - level._effect[ "fx_mp_water_roof_spill_splash_shrt" ] = loadfx( "maps/mp_maps/fx_mp_water_roof_spill_splash_shrt" ); - level._effect[ "fx_mp_water_roof_spill_splash_xshrt" ] = loadfx( "maps/mp_maps/fx_mp_water_roof_spill_splash_xshrt" ); - level._effect[ "fx_mp_fog_cool_ground" ] = loadfx( "maps/mp_maps/fx_mp_fog_cool_ground" ); - level._effect[ "fx_mp_distant_cloud_vista" ] = loadfx( "maps/mp_maps/fx_mp_upl_distant_cloud_vista" ); - level._effect[ "fx_mp_uplink_lightning_lg" ] = loadfx( "weather/fx_mp_uplink_lightning_lg" ); - level._effect[ "fx_mp_upl_window_rain1_splash" ] = loadfx( "maps/mp_maps/fx_mp_upl_window_rain1_splash" ); - level._effect[ "fx_mp_uplink_rain_window_roof_med" ] = loadfx( "weather/fx_mp_uplink_rain_window_roof_med" ); - level._effect[ "fx_mp_uplink_rain_window_gust" ] = loadfx( "weather/fx_mp_uplink_rain_window_gust" ); - level._effect[ "fx_mp_upl_cloud_geo" ] = loadfx( "maps/mp_maps/fx_mp_upl_cloud_geo" ); - level._effect[ "fx_lf_mp_uplink_sun1" ] = loadfx( "lens_flares/fx_lf_mp_uplink_sun1" ); - level._effect[ "fx_lf_mp_uplink_anamorphic" ] = loadfx( "lens_flares/fx_lf_mp_uplink_anamorphic" ); - level._effect[ "fx_lf_mp_uplink_anamorphic2" ] = loadfx( "lens_flares/fx_lf_mp_uplink_anamorphic2" ); - level._effect[ "fx_mp_upl_rain_lit_corona" ] = loadfx( "maps/mp_maps/fx_mp_upl_rain_lit_corona" ); - level._effect[ "fx_drone_rectangle_light" ] = loadfx( "light/fx_light_flour_glow_yellow" ); - level._effect[ "fx_light_flour_glow_yellow_sm" ] = loadfx( "light/fx_light_flour_glow_yellow_sm" ); - level._effect[ "fx_light_flour_glow_yellow_xsm" ] = loadfx( "light/fx_light_flour_glow_yellow_xsm" ); - level._effect[ "fx_drone_rectangle_light_03" ] = loadfx( "light/fx_drone_rectangle_light_03" ); - level._effect[ "fx_drone_rectangle_light_blue" ] = loadfx( "maps/mp_maps/fx_mp_upl_rectangle_light_blue" ); - level._effect[ "fx_light_beacon_yellow" ] = loadfx( "light/fx_light_beacon_yellow" ); - level._effect[ "fx_light_beacon_red_blink_fst" ] = loadfx( "light/fx_light_beacon_red_blink_fst" ); - level._effect[ "fx_light_beacon_red_blink_fst_sm" ] = loadfx( "light/fx_light_beacon_red_blink_fst_sm" ); - level._effect[ "fx_light_exit_sign" ] = loadfx( "light/fx_light_exit_sign_gLow" ); - level._effect[ "fx_light_recessed_cool" ] = loadfx( "maps/mp_maps/fx_mp_upl_light_recessed_cool" ); - level._effect[ "fx_light_recessed_blue" ] = loadfx( "light/fx_light_recessed_blue" ); - level._effect[ "fx_light_window_glow" ] = loadfx( "light/fx_light_window_glow" ); - level._effect[ "fx_mp_upl_window_ray_cool" ] = loadfx( "maps/mp_maps/fx_mp_upl_window_ray_cool" ); - level._effect[ "fx_light_floodlight_sqr_wrm" ] = loadfx( "maps/mp_maps/fx_mp_upl_floodlight_sqr_warm" ); - level._effect[ "fx_light_floodlight_sqr_cool" ] = loadfx( "maps/mp_maps/fx_mp_upl_floodlight_sqr_cool" ); - level._effect[ "fx_light_floodlight_sqr_cool_thin" ] = loadfx( "maps/mp_maps/fx_mp_upl_floodlight_sqr_cool_thin" ); - level._effect[ "fx_light_floodlight_sqr_cool_sm" ] = loadfx( "maps/mp_maps/fx_mp_upl_floodlight_sqr_cool_sm" ); - level._effect[ "fx_light_floodlight_sqr_cool_md" ] = loadfx( "maps/mp_maps/fx_mp_upl_floodlight_sqr_cool_md" ); - level._effect[ "fx_mp_upl_floodlight_yellow" ] = loadfx( "maps/mp_maps/fx_mp_upl_floodlight_yellow" ); - level._effect[ "fx_upl_light_ray_sun_window_1s" ] = loadfx( "light/fx_upl_light_ray_sun_window_1s" ); - level._effect[ "fx_upl_light_ray_sun_window_lg_1s" ] = loadfx( "light/fx_upl_light_ray_sun_window_lg_1s" ); - level._effect[ "fx_mp_upl_generator_grays" ] = loadfx( "maps/mp_maps/fx_mp_upl_generator_grays" ); - level._effect[ "fx_light_flour_glow_v_shape_cool_sm" ] = loadfx( "light/fx_light_flour_glow_v_shape_cool_sm" ); - level._effect[ "fx_light_flour_glow_v_shape_cool" ] = loadfx( "light/fx_light_upl_flour_glow_v_shape_cool" ); - level._effect[ "fx_light_gray_yllw_ribbon" ] = loadfx( "light/fx_light_gray_yllw_ribbon" ); - level._effect[ "fx_light_gray_blue_ribbon" ] = loadfx( "light/fx_light_gray_blue_ribbon" ); - level._effect[ "fx_mp_upl_waterfall01" ] = loadfx( "maps/mp_maps/fx_mp_upl_waterfall01" ); - level._effect[ "fx_mp_upl_waterfall02" ] = loadfx( "maps/mp_maps/fx_mp_upl_waterfall02" ); - level._effect[ "fx_mp_upl_waterfall_splash_bttm" ] = loadfx( "maps/mp_maps/fx_mp_upl_waterfall_splash_bttm" ); - level._effect[ "fx_mp_upl_waterfall_splash_fst" ] = loadfx( "maps/mp_maps/fx_mp_upl_waterfall_splash_fst" ); - level._effect[ "fx_mp_upl_waterfall_splash_md" ] = loadfx( "maps/mp_maps/fx_mp_upl_waterfall_splash_md" ); - level._effect[ "fx_mp_upl_waterfall_vista" ] = loadfx( "maps/mp_maps/fx_mp_upl_waterfall_vista" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "ant_rooftop" ] = %fxanim_gp_antenna_rooftop_anim; -} - -precache_fxanim_props_dlc3() -{ - level.scr_anim[ "fxanim_props_dlc3" ][ "uplink_gate" ] = %fxanim_mp_uplink_gate_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "uplink_gate_b" ] = %fxanim_mp_uplink_gate_b_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "cliff_sign" ] = %fxanim_mp_uplink_cliff_sign_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "radar01" ] = %fxanim_mp_uplink_vista_radar01_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "radar02" ] = %fxanim_mp_uplink_vista_radar02_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "radar03" ] = %fxanim_mp_uplink_vista_radar03_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "radar04" ] = %fxanim_mp_uplink_vista_radar04_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "radar05" ] = %fxanim_mp_uplink_vista_radar05_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "sat_dish2" ] = %fxanim_gp_satellite_dish2_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "ant_rooftop2_small" ] = %fxanim_gp_antenna_rooftop2_small_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "fence01" ] = %fxanim_mp_uplink_fence01_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "fence02" ] = %fxanim_mp_uplink_fence02_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "vines_01" ] = %fxanim_mp_uplink_vines_01_anim; - level.scr_anim[ "fxanim_props_dlc3" ][ "vines_02" ] = %fxanim_mp_uplink_vines_02_anim; -} diff --git a/Multiplayer Maps/mp_vertigo/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_vertigo/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_vertigo/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_vertigo/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_vertigo/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_vertigo/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_vertigo/maps/mp/createart/mp_vertigo_art.gsc b/Multiplayer Maps/mp_vertigo/maps/mp/createart/mp_vertigo_art.gsc deleted file mode 100644 index 65c28e0..0000000 --- a/Multiplayer Maps/mp_vertigo/maps/mp/createart/mp_vertigo_art.gsc +++ /dev/null @@ -1,41 +0,0 @@ - -main() -{ - level.tweakfile = 1; - setdvar( "scr_fog_exp_halfplane", "3759.28" ); - setdvar( "scr_fog_exp_halfheight", "243.735" ); - setdvar( "scr_fog_nearplane", "601.593" ); - setdvar( "scr_fog_red", "0.806694" ); - setdvar( "scr_fog_green", "0.962521" ); - setdvar( "scr_fog_blue", "0.9624" ); - setdvar( "scr_fog_baseheight", "-475.268" ); - setdvar( "visionstore_glowTweakEnable", "0" ); - setdvar( "visionstore_glowTweakRadius0", "5" ); - setdvar( "visionstore_glowTweakRadius1", "" ); - setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); - setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); - setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); - setdvar( "visionstore_glowTweakBloomIntensity1", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); - start_dist = 11424,9; - half_dist = 16020; - half_height = 1164; - base_height = -2675; - fog_r = 0,372549; - fog_g = 0,454902; - fog_b = 0,447059; - fog_scale = 1; - sun_col_r = 1; - sun_col_g = 0,686275; - sun_col_b = 0,337255; - sun_dir_x = -0,196011; - sun_dir_y = 0,785122; - sun_dir_z = 0,587506; - sun_start_ang = 0; - sun_stop_ang = 61,3208; - time = 0; - max_fog_opacity = 0,962; - setvolfog( start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale, sun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, sun_stop_ang, time, max_fog_opacity ); - visionsetnaked( "mp_la", 0 ); -} diff --git a/Multiplayer Maps/mp_vertigo/maps/mp/createfx/mp_vertigo_fx.gsc b/Multiplayer Maps/mp_vertigo/maps/mp/createfx/mp_vertigo_fx.gsc deleted file mode 100644 index 9ded7ca..0000000 --- a/Multiplayer Maps/mp_vertigo/maps/mp/createfx/mp_vertigo_fx.gsc +++ /dev/null @@ -1,2649 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_tube_cloud" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 139,088, -197,21, -1090,66 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_engine_exhaust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2116,6, 257,579, 189,246 ); - ent.v[ "angles" ] = ( 90, 0, -153 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_engine_exhaust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2387,62, -304,607, 189,2 ); - ent.v[ "angles" ] = ( 90, 0, -177 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 383,971, -692,532, 349,989 ); - ent.v[ "angles" ] = ( 346,078, 179,818, 1,49289 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 383,224, -2341,53, -71,7422 ); - ent.v[ "angles" ] = ( 348,687, 242,656, -16,6018 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 682,909, 2308,98, -71,875 ); - ent.v[ "angles" ] = ( 348,733, 161,589, 1,15808 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 255,875, 2252,37, 130,641 ); - ent.v[ "angles" ] = ( 28, 182, 0 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 388,63, 1764,81, 147,138 ); - ent.v[ "angles" ] = ( 28, 182, 0 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 539,673, 2134,39, 109,463 ); - ent.v[ "angles" ] = ( 28, 182, 0 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 734,582, 1954,95, 72,125 ); - ent.v[ "angles" ] = ( 356, 182, 0 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1012,06, 1670,04, 81,125 ); - ent.v[ "angles" ] = ( 355,089, 167,956, 0,728233 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1365,49, 1324,73, 74,125 ); - ent.v[ "angles" ] = ( 350,773, 166,351, -1,67269 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1026,65, 1995,24, 72,125 ); - ent.v[ "angles" ] = ( 354, 181,791, 1 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 350,492, 2723, -13,875 ); - ent.v[ "angles" ] = ( 352, 182, 0 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 359,875, 1470,73, 196,767 ); - ent.v[ "angles" ] = ( 28, 182, 0 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -38,8576, 2086,44, 43 ); - ent.v[ "angles" ] = ( 348, 182, 0 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1321,85, 206,888, 124,125 ); - ent.v[ "angles" ] = ( 0,96607, 197, 0,258881 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1313,21, -237,616, 127,125 ); - ent.v[ "angles" ] = ( 354,921, 206,978, 0 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1332,27, -657,416, 117,125 ); - ent.v[ "angles" ] = ( 347,217, 207,286, -1,9486 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 664,279, -1262,18, 0,125004 ); - ent.v[ "angles" ] = ( 348, 182, 0 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 410,713, -1369,66, 31,125 ); - ent.v[ "angles" ] = ( 1, 182, 0 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 462,54, -2115,38, 2,125 ); - ent.v[ "angles" ] = ( 348,995, 187,978, 0,106493 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -318,446, -1572,76, -2,875 ); - ent.v[ "angles" ] = ( 0,913676, 157,996, -0,406835 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -615,344, -1420,88, 20,125 ); - ent.v[ "angles" ] = ( 0,933716, 160,996, -0,358456 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -906,191, -553,71, 23,125 ); - ent.v[ "angles" ] = ( 0,933716, 160,996, -0,358456 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1273,94, -438,487, 36 ); - ent.v[ "angles" ] = ( 1,05676, 140, 2,31437 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -938,567, 534,347, 52,125 ); - ent.v[ "angles" ] = ( 0,913537, 206,002, 0,406772 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -785,622, 733,686, 8,125 ); - ent.v[ "angles" ] = ( 0, 194,995, 0,58329 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1312,7, 502,122, 36 ); - ent.v[ "angles" ] = ( 351,891, 208,931, 0,458623 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_vertigo_sun1" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -74189,3, -104308, 60968,7 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1132,96, 866,058, 8 ); - ent.v[ "angles" ] = ( 356,901, 218,993, -0,298072 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_hvac_steam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 479,779, 1198,28, 263 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_hvac_steam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 470,203, 1348,06, 251 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -381,454, 701,188, 346,125 ); - ent.v[ "angles" ] = ( 0, 189,973, -0,609694 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 286,132, 1294,43, 285,426 ); - ent.v[ "angles" ] = ( 346, 186, 0 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -864,222, 486,128, 333,193 ); - ent.v[ "angles" ] = ( 0, 191,97, -0,609241 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1810,16, 143,205, 123 ); - ent.v[ "angles" ] = ( 348,665, 186,49, 3,58956 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1819,15, -5,93272, 123 ); - ent.v[ "angles" ] = ( 348,665, 186,49, 3,58956 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1854,17, -214,174, 123 ); - ent.v[ "angles" ] = ( 348,665, 186,49, 3,58956 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_hvac_steam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 699,495, -611,343, 343 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_hvac_steam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 692,04, -753,007, 344 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -108,889, -789,21, 380,423 ); - ent.v[ "angles" ] = ( 359,59, 169,448, 4,05614 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1496,66, -147,763, -422,176 ); - ent.v[ "angles" ] = ( 306, 180, 180 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -749,541, 871,793, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 222 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1238,29, 803,232, 8 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 245 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1329,29, 554,237, 8 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 228 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1196,37, 403,889, 8 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 196 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -996,39, 535,179, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 195 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1344,26, 198,479, 8 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 219 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1519,23, 392,059, 8 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 232 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1484,54, 616,615, 29 ); - ent.v[ "angles" ] = ( 351,953, 220,041, -1,10739 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -808,7, -995,611, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 116 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -811,49, -783,811, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 116 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -965,573, -550,956, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 147 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -823,113, -1086,01, 28,125 ); - ent.v[ "angles" ] = ( 353,303, 102,035, 0,350131 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1069,79, -837,07, 8 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 154 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1223,64, -681,98, 8 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 112 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1251,23, -461,442, 8 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 123 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1391,81, -608,475, 8 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 117 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1531,57, -401,499, 8 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 113 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1346,11, -193,437, 8 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 117 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -904,515, -447,715, 338,345 ); - ent.v[ "angles" ] = ( 1,8007, 173,947, -0,788855 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1127,29, -911,202, 21 ); - ent.v[ "angles" ] = ( 353,441, 117,136, -1,40291 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1423,88, -705,278, 26 ); - ent.v[ "angles" ] = ( 353,303, 102,035, 0,350131 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1525,49, -580,443, 26 ); - ent.v[ "angles" ] = ( 353,976, 131,211, -2,95299 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -524,691, -1454,61, -14,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 157 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -755,647, -1410,35, -14,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 161 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -252,028, -1504, -15,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 173 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 20,7631, -1446,83, -15,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 193 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 268,159, -1432,7, 2,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 185 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 584,314, -1249,13, 2,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 212 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 352,552, -2103, -15,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 190 ); - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1261,56, -514,406, 24 ); - ent.v[ "angles" ] = ( 355,379, 138,189, -0,662342 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 42,1688, -2157,57, -38,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 165 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 29,6573, -2361,63, -39,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 181 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -51,0343, -2053,51, -39,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 160 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -547,346, -2367,91, -15,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 176 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -829,511, -2388,75, -14,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 172 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -791,389, -2217,15, -15,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 175 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -819,013, -2074,44, -15,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 178 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -376,224, -2440,92, -29,875 ); - ent.v[ "angles" ] = ( 347,983, 168,315, 2,02679 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 58,6174, -2513,36, -35,0498 ); - ent.v[ "angles" ] = ( 347,983, 168,315, 2,02679 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1138,18, -654,639, 104,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 228 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1325,12, -582,159, 104,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 206 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1353,16, -277,399, 104,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 206 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1181,88, -253,866, 104,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 203 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1384,77, -489,427, 111,125 ); - ent.v[ "angles" ] = ( 348,982, 199,856, 1,00443 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1352,9, 1078,52, 77,9802 ); - ent.v[ "angles" ] = ( 348,76, 156,314, 1,96767 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1195,41, 1072,81, 72,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 150 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1177,14, 1269,39, 72,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 140 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1021,45, 1110,85, 72,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 130 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1036,72, 1548,7, 72,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 140 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 854,725, 1660,87, 72,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 140 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1036,13, 1939,57, 72,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 159 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 998,407, 2088,38, 72,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 168 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 867,215, 2016,76, 72,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 185 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -65,4101, 1911,44, 8,12498 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 159 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 457,73, 2082,63, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 178 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 456,679, 1895,15, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 162 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 236,465, 2098,45, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 163 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -70,0854, 2167,19, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 217 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -204,676, 2059,53, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 210 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -380,955, 1962,13, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 215 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -512,594, 1881,23, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 223 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 483,054, 1998,27, 8,125 ); - ent.v[ "angles" ] = ( 357,968, 179,4, -1,40884 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 275,949, 1758,43, 18,125 ); - ent.v[ "angles" ] = ( 356,869, 207,474, -2,2006 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -36,7725, 1867,95, 8,125 ); - ent.v[ "angles" ] = ( 356,718, 141,358, 1,96938 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -200,347, 1292,04, 26,125 ); - ent.v[ "angles" ] = ( 356,288, 186,444, -0,931219 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 173,615, 1344,49, 26,125 ); - ent.v[ "angles" ] = ( 356,406, 192,455, -1,31456 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 11,1581, 1656,28, 19,125 ); - ent.v[ "angles" ] = ( 358,034, 231,471, -3,28361 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -442,443, 1228,04, 14,125 ); - ent.v[ "angles" ] = ( 357,03, 211,477, -2,41371 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 271,864, 1536,48, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 235 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 41,2617, 1755,28, 8,12499 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 224 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -81,2866, 1412,98, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 224 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -377,841, 1260,05, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 212 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -531,233, 1159,78, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 208 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -511,794, 1693,49, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 261 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -466,151, 1894,2, 24,125 ); - ent.v[ "angles" ] = ( 354,94, 217,695, 0,752233 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1152,88, -854,066, -68,5767 ); - ent.v[ "angles" ] = ( 354,886, 229,214, -4,78672 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1364,43, -775,2, 83,0182 ); - ent.v[ "angles" ] = ( 344,838, 214,713, -3,39837 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 761,395, -1830,95, -14,875 ); - ent.v[ "angles" ] = ( 354,886, 229,214, -4,78672 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1500,93, 160,562, -392,879 ); - ent.v[ "angles" ] = ( 284,923, 195,69, -15,4778 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1386,85, -0,40712, 104,125 ); - ent.v[ "angles" ] = ( 344,921, 206,978, 0 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1299,44, 240,533, 104,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 176 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1149,11, 258,088, 104,125 ); - ent.v[ "angles" ] = ( 0, 203, 1 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1058,65, 242,355, 104,125 ); - ent.v[ "angles" ] = ( 352,993, 226,945, 0,315841 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1025,44, -306,635, 104,125 ); - ent.v[ "angles" ] = ( 351, 120, 0 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1410,34, 1397,92, 64,456 ); - ent.v[ "angles" ] = ( 356,003, 116,027, 0,30977 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1104,01, 2185,4, 34,628 ); - ent.v[ "angles" ] = ( 360, 117, 0 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -61,6901, -2529,28, -35,036 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 160 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -620,515, 1071,99, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 223 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -786,342, 942,03, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 213 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 161,709, 475,711, 253,315 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 414,705, 475,51, 253,512 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -128,84, 476,21, 253,019 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 166,246, -477,193, 257,013 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 419,242, -477,394, 253,111 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -124,303, -476,695, 253,317 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 403,564, 227,519, -28,5444 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 493,012, 227,148, -28,4856 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 402,841, 239,038, -20,5703 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 493,275, 239,146, -20,4755 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 492,853, 251,146, -12,5319 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 403,165, 250,941, -12,1948 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 402,717, 262,938, -4,20705 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 493,237, 263,159, -4,49432 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 402,988, 274,96, 3,72217 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 492,728, 275,093, 3,63967 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -411,512, 227,769, 3,57521 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -411,064, 215,772, -4,41254 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -411,388, 203,869, -12,788 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -410,648, 191,85, -20,7621 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -306,816, 191,918, -20,7033 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -306,974, 215,916, -4,74964 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -306,553, 203,916, -12,6932 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -306,6, 227,729, 3,28794 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -410,065, -227,751, 3,25096 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -409,681, -215,738, -4,78662 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -410,102, -203,738, -12,7302 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -409,839, -191,74, -20,7403 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -305,744, -227,642, 3,53823 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -306,192, -215,645, -4,44952 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -305,868, -203,742, -12,825 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -306,616, -191,924, -20,7991 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 403,816, -227,766, -28,6694 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 403,974, -251,764, -12,7157 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 403,553, -239,764, -20,6593 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 403,59, -263,777, -4,6781 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 404,099, -275,711, 3,45589 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 492,242, -275,675, 3,53839 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 492,065, -251,656, -12,3786 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 492,513, -263,653, -4,39083 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 492,389, -239,753, -20,7541 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 491,769, -227,139, -28,7282 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2082,61, -1,01203, 26,9824 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -150,194, 632,125, 125,662 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 485,992, -616,359, 126,075 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 693,681, 299,8, -28,4497 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 639,292, 299,774, -28,41 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 638,743, 323,778, -12,2831 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 638,473, 347,778, 3,68284 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 638,639, 371,835, 19,535 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 638,657, 395,833, 35,4332 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 692,673, 323,766, -12,3056 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 692,959, 347,825, 3,5542 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 692,97, 371,825, 19,4223 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 692,737, 395,796, 35,3611 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 638,444, 419,799, 51,3686 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 692,431, 419,777, 51,6694 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 692,598, 443,775, 67,6715 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 638,265, 443,77, 67,7783 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 638,156, 467,834, 83,4719 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 692,908, 467,784, 83,6632 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 692,631, 491,84, 99,5161 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_step_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 638,857, 491,813, 99,405 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -167,653, 841,118, 161,486 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 120,435, 840,829, 161,519 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 963,427, 932,405, 226,97 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 963,566, 828,126, 226,99 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 963,515, 700,186, 226,946 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 963,216, 579,167, 226,938 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1067,72, 579,378, 226,982 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1195,92, 579,024, 226,959 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1315,83, 579,121, 227,008 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 773,168, 931,6, 226,93 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 772,333, 827,754, 226,934 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 772,128, 699,719, 226,917 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 772,17, 579,753, 226,913 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 772,335, 459,918, 226,925 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 773,061, 340,964, 226,932 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 900,534, 341,812, 226,904 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1020,29, 340,464, 226,957 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1148,39, 340,17, 226,938 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1252,56, 340,682, 227 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1137,22, 329,999, 222,614 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1167,26, 591,005, 222,041 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1134,73, 319,875, 221,855 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 484,221, -907,598, 138,928 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 396,173, -907,707, 138,921 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 314,338, -907,49, 138,962 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 228,535, -907,985, 138,952 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 228,136, -824,176, 138,901 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 228,389, -720,292, 138,936 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 228,342, -630,07, 138,922 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 307,67, -628,383, 138,941 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 396,018, -627,999, 138,87 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 477,511, -628,4, 138,963 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 562,819, -627,973, 138,933 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 563,755, -719,835, 138,903 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 563,851, -816,061, 138,893 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 564,186, -907,832, 138,902 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 763,629, -260,158, 110,257 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 666,206, -260,229, 110,19 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 666,371, -517,457, 110,245 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 763,225, -516,866, 110,182 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 895,875, 959,012, 222,433 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 896,137, 968,985, 221,969 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1221,59, 1193,39, -32,3915 ); - ent.v[ "angles" ] = ( 353,172, 210,076, -5,06534 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1914,29, 475,083, -98,5827 ); - ent.v[ "angles" ] = ( 356,863, 226,856, -6,28727 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1907,93, -523,041, -101,72 ); - ent.v[ "angles" ] = ( 354,75, 130,559, 5,69202 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1751,52, -318,157, -73,924 ); - ent.v[ "angles" ] = ( 354,494, 119,12, -1,62881 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1736,65, 324,336, -77,8728 ); - ent.v[ "angles" ] = ( 3,07512, 224,911, -4,85074 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1451,19, -743,178, 8 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 112 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1415,04, 710,398, 8 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 235 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 132,032, 1326,79, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 198 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_light_yellow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1170,25, 600,996, 221,456 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 858,106, 1119,56, 72,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -60,0527, 1622,76, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 111,503, 1259,6, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -841,676, 696,682, 8,12501 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -857,078, -839,934, 8,12499 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -813,156, -1390,77, -15,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -360,583, -1532,07, -15,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -299,273, -1961,18, -39,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -64,2093, -2215,95, -38,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 258,71, -1393,37, 2,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1063,44, -652,588, 104,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 913,612, 1625,07, 72,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -486,997, -0,34445, 131,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -486,258, 65,9312, 131,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -487,054, -65,6625, 131,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 55,6919, 553,974, 143,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 87,4143, 554,415, 143,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 119,298, 554,324, 143,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 151,278, 554,342, 143,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 183,427, 554,225, 143,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 55,4838, 445,547, 147,675 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 0,221552, 446,094, 147,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -64,1532, 446,451, 147,775 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -120,541, 444,114, 147,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -120,279, 514,237, 147,975 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -62,2018, 514,628, 147,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 0,885532, 514,311, 148,075 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 56,3233, 514,524, 147,775 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -36,2142, -538,871, 143,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -12,4754, -538,573, 143,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 11,7402, -538,678, 143,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 55,2983, -445,035, 147,375 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -0,633395, -445,515, 147,575 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -64,7383, -445,413, 147,475 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -120,461, -445,296, 147,375 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 55,1512, -514,847, 147,575 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -0,716966, -515,157, 147,575 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -64,0745, -514,529, 147,275 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -121,025, -514,744, 147,475 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 243,696, -539,428, 143,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 275,842, -539,417, 143,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 307,835, -539,438, 143,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 339,771, -539,372, 143,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 371,585, -539,575, 143,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 439,913, -514,518, 147,488 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 384,045, -514,828, 147,488 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 320,687, -514,2, 147,188 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 263,737, -514,415, 147,388 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 264,301, -444,968, 147,288 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 320,024, -445,085, 147,388 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 384,129, -445,187, 147,488 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 440,06, -444,706, 147,288 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 439,61, 445,411, 147,387 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 383,742, 445,101, 147,387 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 320,384, 445,73, 147,087 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 263,434, 445,515, 147,287 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 263,998, 514,962, 147,187 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 319,721, 514,845, 147,287 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 383,825, 514,743, 147,387 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 439,757, 515,224, 147,187 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1131,99, -1162,94, -35,0664 ); - ent.v[ "angles" ] = ( 352,41, 166,72, 1,50995 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1019,32, -2462,65, -165,875 ); - ent.v[ "angles" ] = ( 348,921, 153,033, 5,10368 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1087,36, -2073,48, -164,875 ); - ent.v[ "angles" ] = ( 347,82, 176,495, 0,309443 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1019,34, -2130,27, -164,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 175 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1002,59, -2414,97, -164,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 161 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -839,085, -2526,31, -165,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 175 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -618,858, -2535,85, -165,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 175 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1056,89, -1422,37, -164,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 175 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1075,03, -1422,39, -165,875 ); - ent.v[ "angles" ] = ( 347,82, 176,495, 0,309443 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1137,08, -1725,78, -165,875 ); - ent.v[ "angles" ] = ( 347,82, 176,495, 0,309443 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 82,7181, 716,205, 130,414 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_mag_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -127,984, 715,832, 130,285 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -86,7862, 800,508, 269,592 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -23,1172, 800,587, 269,581 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 40,8077, 800,617, 269,566 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 104,999, 800,361, 269,578 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 168,631, 800,134, 269,516 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -151,392, 800,161, 269,5 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -215,677, 799,702, 269,484 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1166,22, 1228,2, 72,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 8,88535, 2738,81, -25,875 ); - ent.v[ "angles" ] = ( 352, 182, 0 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 249,542, 2439,57, -23,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 173 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 288,154, 2647,37, -23,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 191 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 286,908, 2807,39, -23,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 187 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 83,4179, 2835,79, -23,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 173 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -69,8988, 2749,31, -23,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 167 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -45,3872, 2416,13, -23,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 164 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 75,4267, 2483,04, -23,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 164 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_dirt_swirl" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 21,5958, 2403,97, -23,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -592,784, 2,75473, 143,495 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -634,921, 2,44208, 143,457 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1265,11, -262,639, 258 ); - ent.v[ "angles" ] = ( 14,5514, 170,533, 4,19063 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_fountain2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 908,787, 1379,48, 141,626 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_fountain2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 859,033, 1379,95, 141,624 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_fountain2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 859,441, 1430,14, 141,621 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_fountain2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 908,674, 1429,57, 141,626 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -550,842, 1,93084, 143,418 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_cloud_vista01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4176,68, -1558,32, -265,88 ); - ent.v[ "angles" ] = ( 356,218, 90,936, 15,4889 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_cloud_vista01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4123,72, 2820,82, -160,92 ); - ent.v[ "angles" ] = ( 3,80286, 94,5069, 16,5068 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -203,562, -311,435, 452,875 ); - ent.v[ "angles" ] = ( 31, 47, 0 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 267,231, -701,351, 169,875 ); - ent.v[ "angles" ] = ( 39,9927, 358,695, -0,839002 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 407,841, -705,041, 171,999 ); - ent.v[ "angles" ] = ( 39,9927, 358,695, -0,839002 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_landing_light_vertigo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1731,03, -98,9847, 160,834 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_landing_light_vertigo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1730,95, 98,0763, 161,032 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_landing_light_vertigo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1887,13, 385,512, 160,689 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_landing_light_vertigo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2272,02, 552,056, 160,752 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_landing_light_vertigo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2657,71, 385,377, 160,602 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_landing_light_vertigo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2825,86, -0,414622, 160,702 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_landing_light_vertigo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2657,37, -385,33, 160,739 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_landing_light_vertigo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2271,75, -552,032, 160,614 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_landing_light_vertigo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1886,41, -385,326, 160,75 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_landing_light_vertigo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 800,335, -1150,44, 49,4157 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_landing_light_vertigo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1038,38, -911,995, 146,931 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_landing_light_vertigo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1380,42, -740,291, 146,835 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 326,222, -883,306, 56,9769 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 66 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 469,581, -564,856, 53,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 94 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -90,72, -458,701, 47,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 359 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 422,238, 585,337, 56,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -127,314, 472,814, 57,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -329,886, -191,875, 60,3687 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 88 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 664,013, 557,267, 180,125 ); - ent.v[ "angles" ] = ( 22,9984, 270,059, 0,188646 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 875,494, 939,356, 167,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 264 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -172,074, 694,08, 78,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 38 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1041,95, -5,36076, 44,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 497,014, -1401,67, 2,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 184 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 699,705, -1112,65, 2,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 227 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_landing_light_vertigo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -579,589, -1555,87, 174,901 ); - ent.v[ "angles" ] = ( 270,1, 89,9824, -89,9824 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_landing_light_vertigo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -423,362, -1712,07, 174,395 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_hvac_steam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -732,81, -1729, 170,305 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 279 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_landing_light_vertigo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 23,9426, -2007,99, 124,917 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 386,703, -1523,1, 85,3447 ); - ent.v[ "angles" ] = ( 36, 90, 0 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 584,358, -1637,63, 85,5607 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 44 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -226,04, 2168,42, 108,122 ); - ent.v[ "angles" ] = ( 42, 270, 0 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -641,169, -1541,63, 85,34 ); - ent.v[ "angles" ] = ( 45, 90, 0 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 250,309, -2019,86, 93,6452 ); - ent.v[ "angles" ] = ( 42, 270, 0 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med_dark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -137,563, -2445,94, -39,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 176 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med_dark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 194,49, -2120,83, -15,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 176 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med_dark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -84,0866, -2048,9, -38,875 ); - ent.v[ "angles" ] = ( 354,008, 179,017, -0,315168 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med_dark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -556,644, -2377,1, -15,875 ); - ent.v[ "angles" ] = ( 2, 176, 0 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med_dark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 95,3456, -1425,73, 0,124997 ); - ent.v[ "angles" ] = ( 356, 176,996, 0 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med_dark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 610,68, -1909,84, -15,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 221 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med_dark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 107,509, 2652,71, -24,875 ); - ent.v[ "angles" ] = ( 355, 177, 0 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_leaves" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 70,2246, 1966,59, 236,093 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -868,654, 935,581, 8,125 ); - ent.v[ "angles" ] = ( 359,939, 204,995, 0,58151 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 926,906, 93,2134, -30,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 181 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 919,822, 0,470383, -31,675 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1000; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_ground_dust" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 910,76, -81,669, -30,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 181 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 809,796, -82,3613, -31,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 185 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 805,749, 81,2526, -31,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 176 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 939,436, 9,13624, 22,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 181 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1000; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 936,147, 106,635, 25,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 181 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 946,549, -102,599, 22,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 181 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 648,747, -63,0647, -8,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 181 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1000; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 653,365, 83,0813, -8,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 181 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1000; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -537,313, 102,399, 149,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -707,767, 131,302, 149,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -537,69, -73,0583, 149,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -706,103, -129,935, 149,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1375,61, 989,379, 82,125 ); - ent.v[ "angles" ] = ( 359,066, 148, -0,35845 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1199,92, 283,929, 145,125 ); - ent.v[ "angles" ] = ( 359,06, 146,999, -0,342117 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1039,47, 1054,02, 82,9967 ); - ent.v[ "angles" ] = ( 342,07, 209,015, 1,94891 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 732,851, 2360,24, -71,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 173 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 552,6, 2375,11, -71,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 173 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 958,315, 2224,68, -16,6024 ); - ent.v[ "angles" ] = ( 2,74195, 155,824, -4,37488 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 389,484, 2408,95, -71,875 ); - ent.v[ "angles" ] = ( 323,84, 185,566, -5,90976 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -642,125, 859,219, 150,697 ); - ent.v[ "angles" ] = ( 28,3977, 183,831, -2,77951 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -821,479, 1014,5, 137,195 ); - ent.v[ "angles" ] = ( 18,4505, 252,99, 10,3824 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 405,84, -1081,51, 17,125 ); - ent.v[ "angles" ] = ( 354,531, 117,179, 0,385648 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 526,185, -1171,74, 10,125 ); - ent.v[ "angles" ] = ( 357,54, 156,217, 0,607548 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 79,9893, -2228,97, -25,8254 ); - ent.v[ "angles" ] = ( 343,583, 186,444, -0,980469 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -187,233, -2320,71, -39,875 ); - ent.v[ "angles" ] = ( 343,583, 186,444, -0,980469 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1115,59, 1039,79, 15,5127 ); - ent.v[ "angles" ] = ( 352,146, 239,242, 6,57324 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -660,494, -1348,97, 6,125 ); - ent.v[ "angles" ] = ( 356,459, 157,895, -6,48668 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -403,679, -1659,3, 0,124992 ); - ent.v[ "angles" ] = ( 348,422, 130,713, -4,92561 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 74,5673, -1506, 0,125 ); - ent.v[ "angles" ] = ( 348,315, 188,387, -11,7419 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -335,937, -1665,94, -14,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 139 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1167,88, -149,835, 71,125 ); - ent.v[ "angles" ] = ( 11,899, 140,524, -6,36916 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1181,91, 156,689, 71,7639 ); - ent.v[ "angles" ] = ( 10,5463, 207,968, 8,43506 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 272,377, 156,772, 294,446 ); - ent.v[ "angles" ] = ( 20,4738, 168,143, -0,190327 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 280,783, -157,498, 304,554 ); - ent.v[ "angles" ] = ( 20,062, 201,383, 12,4488 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_wind_cloud_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 359,501, 2,97124, 374,064 ); - ent.v[ "angles" ] = ( 3,85253, 177,929, -0,592478 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1316,42, 1532,06, 9,45738 ); - ent.v[ "angles" ] = ( 13,7406, 138,541, 2,39633 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_window_exploder" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 832,702, 2420,86, -63,875 ); - ent.v[ "angles" ] = ( 352,486, 184,368, -2,59096 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_window_exploder_sm" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1087,41, 1790,99, -15,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 181 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1004; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1154,04, 1781,46, -71,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1004; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_window_exploder_sm" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1089,45, 1722,5, -16,375 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 181 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1005; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_window_exploder_sm" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1090,77, 1658,11, -13,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 181 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1006; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1153,31, 1716,83, -70,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 177 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1005; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1147,73, 1655,14, -70,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1006; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 460,062, -5,77599, 241,875 ); - ent.v[ "angles" ] = ( 70,985, 357,368, -1,97359 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 602,999, 2,65791, 247,875 ); - ent.v[ "angles" ] = ( 73,9827, 356,995, -2,33009 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 550,875, -834,571, 151,889 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 179 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 249,171, -832,189, 144,875 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1169,75, 428,055, 241,997 ); - ent.v[ "angles" ] = ( 35, 359,064, -178,965 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 993,56, 489,823, 247,855 ); - ent.v[ "angles" ] = ( 32, 359, -179 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 830,228, 490,995, 261,875 ); - ent.v[ "angles" ] = ( 37, 359, 180 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 894,313, 367,333, 232,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 93 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1068,96, 363,937, 232,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 93 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1242,24, 367,463, 232,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 93 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 98,2005, 951,081, 210,713 ); - ent.v[ "angles" ] = ( 45,9909, 271,035, -178,561 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -111,793, 938,676, 216,647 ); - ent.v[ "angles" ] = ( 45,9909, 271,035, -178,561 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_god_ray_mp_vertigo_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -23,9163, 940,398, 216,935 ); - ent.v[ "angles" ] = ( 45,9909, 271,035, -178,561 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_dirt_swirl" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 878,19, 1654,11, -71,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1005; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_wind_med" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1049,99, 1721,41, -71,875 ); - ent.v[ "angles" ] = ( 353,499, 159,441, 1,40194 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_window_exploder_sm" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1064,93, 2083,99, -4,45833 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 181 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1007; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_window_exploder_sm" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1066,97, 2015,5, -4,95833 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 181 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1008; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_window_exploder_sm" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1068,29, 1951,11, -2,45833 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 181 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1009; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1062,04, 1944,34, -71,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1009; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1064,31, 2008,03, -71,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 177 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1008; - ent = maps/mp/_utility::createexploder( "fx_mp_vertigo_ground_dust_lite" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1065,07, 2083,63, -71,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1007; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 416,036, -993,68, 124,603 ); - ent.v[ "angles" ] = ( 37, 180, 0 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 531,298, 417,494, 111,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 531,907, 469,291, 111,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 531,294, 520,883, 111,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1157,37, 11,9901, 56,9112 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 351 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -997,433, -117,621, 20,6506 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1036,17, -115,582, 20,5776 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 83 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1073,82, -110,394, 20,6955 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 73 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -960,17, -115,855, 20,7174 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 94 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -921,688, -110,503, 20,7792 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 102 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1074,04, 110,256, 20,7069 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 283 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1035,62, 115,503, 20,8145 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 271 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -998,143, 117,164, 20,6784 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -959,506, 115,432, 20,7077 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 261 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_scanner_glare" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -921,932, 109,942, 20,7696 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 250 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4960, -14193,7, 1559,32 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4945,9, -14767,3, 1557,57 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 5559,13, -14165,1, 1558,79 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 5250,75, -14450,8, 3634,11 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3796,34, 1023,36, 3187,05 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4441,48, -265,302, 4685,88 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -17579,9, -8675,96, -1260,8 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -17935,2, -6071,58, 95,2771 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 5536,33, 24316,3, 901,667 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -12759,3, 8842,79, 1076,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_cloud_vista02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 14660,5, -1574,92, -3077,22 ); - ent.v[ "angles" ] = ( 272,996, 272, -80 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_cloud_vista02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -12533,4, 2949,43, -3652,95 ); - ent.v[ "angles" ] = ( 272,996, 272, -102 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_cloud_vista02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -8026,13, 17166,5, -3406,23 ); - ent.v[ "angles" ] = ( 275,107, 73,0283, 61,0151 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 248,515, -578,392, 110,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 301,871, -578,087, 110,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 352,932, -576,978, 110,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 584,976, -433,18, 111,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 585,555, -484,838, 111,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 585,231, -536,431, 111,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 702,856, 1117,16, 199,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 699,4, 1309,12, 178,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 705,887, 1437,78, 135,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 701,718, 1221,89, 178,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 702,928, 1512,3, 157,375 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_vertigo_ceiling_light" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 704,998, 1627,89, 135,875 ); - ent.v[ "angles" ] = ( 90, 359,935, -1,06532 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -648,854, 804,452, 143,772 ); - ent.v[ "angles" ] = ( 42, 180, 0 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light_skinny" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -885,009, 1162,61, 113,108 ); - ent.v[ "angles" ] = ( 40,7, 90, 0 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -700,175, 1310,6, 137 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -795,727, 1315,04, 135 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -890,214, 1315,26, 137 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -697,896, 1441,97, 137 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -795,668, 1439,3, 137 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -892,328, 1441,47, 137 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -892, 1566,8, 137 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -795,344, 1568,09, 137 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -698,9, 1567,67, 137 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -702,955, -2137,27, -47,4609 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -702,795, -2260,32, -47,4965 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -891,843, -2398,4, -47,4919 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -914,01, -2258,67, -47,5889 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -914,119, -2144,49, -47,6094 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 12598,5, 12054,5, -3256,24 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 21165,2, 13485,9, 794,341 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -14485,4, 4189,54, -2414,1 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -916,875, 1303,61, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 61 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_paper_interior_short" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -706,259, 1544,53, 8,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 243 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3701,46, -24961, -3912,72 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -5469,52, -23030,6, -1608,99 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_vista_glare02" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -12338,3, 8835,45, 247,365 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -922,059, -1734,65, 106,431 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -921,365, -1859,69, 106,374 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -813,061, -1859,79, 106,463 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_vertigo_rectangle_light01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -787,081, -1605,17, 106,596 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "delay" ] = -44; -} diff --git a/Multiplayer Maps/mp_vertigo/maps/mp/mp_vertigo.gsc b/Multiplayer Maps/mp_vertigo/maps/mp/mp_vertigo.gsc deleted file mode 100644 index a2fcbd6..0000000 --- a/Multiplayer Maps/mp_vertigo/maps/mp/mp_vertigo.gsc +++ /dev/null @@ -1,178 +0,0 @@ -#include maps/mp/gametypes/_deathicons; -#include maps/mp/mp_vertigo_doors; -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - level.ragdoll_override = ::ragdoll_override; - maps/mp/mp_vertigo_fx::main(); - maps/mp/_load::main(); - maps/mp/mp_vertigo_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_vertigo" ); - setdvar( "compassmaxrange", "2100" ); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; - level thread waitforglassbreak(); - if ( getgametypesetting( "allowMapScripting" ) ) - { - level maps/mp/mp_vertigo_doors::init(); - } -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2400", reset_dvars ); - ss.hq_objective_influencer_inner_radius = set_dvar_float_if_unset( "scr_spawn_hq_objective_influencer_inner_radius", "1400", reset_dvars ); -} - -waitforglassbreak() -{ - if ( glassexploderssetupcorrectly( 1000, 3 ) == 0 ) - { - return; - } - if ( glassexploderssetupcorrectly( 1004, 3 ) == 0 ) - { - return; - } - if ( glassexploderssetupcorrectly( 1007, 3 ) == 0 ) - { - return; - } - for ( ;; ) - { - level waittill( "glass_smash", origin ); - playglassexploder( origin, 1000, 3 ); - playglassexploder( origin, 1004, 3 ); - playglassexploder( origin, 1007, 3 ); - } -} - -playglassexploder( origin, exploderbase, explodercount ) -{ - distancesq = distancesquared( origin, level.createfxexploders[ exploderbase ][ 0 ].v[ "origin" ] ); - if ( distancesq > 21000 ) - { - return; - } - nearestpane = exploderbase; - if ( distancesq > 5000 ) - { - nearestpane = -1; - distancesq = 5000; - } - nearestpanedistsq = distancesq; - glassexploderindex = 1; - while ( glassexploderindex < explodercount ) - { - glassexploder = glassexploderindex + exploderbase; - currentdistsq = distancesquared( origin, level.createfxexploders[ glassexploder ][ 0 ].v[ "origin" ] ); - if ( currentdistsq < nearestpanedistsq ) - { - nearestpane = glassexploder; - nearestpanedistsq = currentdistsq; - } - glassexploderindex++; - } - if ( nearestpane != -1 ) - { - exploder( nearestpane ); - level thread window_smash_wind_sound( origin ); - } -} - -window_smash_wind_sound( origin ) -{ - wind_ent = spawn( "script_origin", origin ); - wind_ent playloopsound( "evt_window_wind", 1 ); - level waittill( "game_ended" ); - wind_ent stoploopsound( 0,5 ); - wind_ent delete(); -} - -glassexploderssetupcorrectly( exploderbase, explodercount ) -{ - glassexploderindex = 0; - while ( glassexploderindex < explodercount ) - { - glassexploder = glassexploderindex + exploderbase; - if ( !isDefined( level.createfxexploders[ glassexploder ] ) ) - { -/# - assertmsg( "Glass exploder " + glassexploder + " is undefined" ); -#/ - return 0; - } - if ( isDefined( level.createfxexploders[ glassexploder ][ 0 ] ) || !isDefined( level.createfxexploders[ glassexploder ][ 0 ].v ) && !isDefined( level.createfxexploders[ glassexploder ][ 0 ].v[ "origin" ] ) ) - { -/# - assertmsg( "Glass exploder " + glassexploder + " is undefined" ); -#/ - return 0; - } - glassexploderindex++; - } - return 1; -} - -ragdoll_override( idamage, smeansofdeath, sweapon, shitloc, vdir, vattackerorigin, deathanimduration, einflictor, ragdoll_jib, body ) -{ - if ( smeansofdeath == "MOD_FALLING" ) - { - deathanim = body getcorpseanim(); - startfrac = deathanimduration / 1000; - if ( animhasnotetrack( deathanim, "start_ragdoll" ) ) - { - times = getnotetracktimes( deathanim, "start_ragdoll" ); - if ( isDefined( times ) ) - { - startfrac = times[ 0 ]; - } - } - self.body = body; - if ( !isDefined( self.switching_teams ) ) - { - thread maps/mp/gametypes/_deathicons::adddeathicon( body, self, self.team, 5 ); - } - thread startragdollonground( startfrac ); - return 1; - } - return 0; -} - -startragdollonground( deathanimduration ) -{ - timer = 0; - while ( timer < deathanimduration ) - { - if ( !isDefined( self ) || !isDefined( self.body ) ) - { - return; - } - if ( self isonground() ) - { - break; - } - else - { - wait 0,05; - timer += 0,05; - } - } - if ( !isDefined( self ) || !isDefined( self.body ) ) - { - return; - } - self.body startragdoll(); -} diff --git a/Multiplayer Maps/mp_vertigo/maps/mp/mp_vertigo_amb.gsc b/Multiplayer Maps/mp_vertigo/maps/mp/mp_vertigo_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_vertigo/maps/mp/mp_vertigo_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_vertigo/maps/mp/mp_vertigo_doors.gsc b/Multiplayer Maps/mp_vertigo/maps/mp/mp_vertigo_doors.gsc deleted file mode 100644 index 01aa7bc..0000000 --- a/Multiplayer Maps/mp_vertigo/maps/mp/mp_vertigo_doors.gsc +++ /dev/null @@ -1,326 +0,0 @@ -#include maps/mp/_tacticalinsertion; -#include maps/mp/gametypes/_weaponobjects; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - triggers = getentarray( "trigger_multiple", "classname" ); - i = 0; - while ( i < 2 ) - { - door = getent( "vertigo_door" + i, "targetname" ); - o = ( i + 1 ) % 2; - otherdoor = getent( "vertigo_door" + o, "targetname" ); - if ( !isDefined( door ) ) - { - i++; - continue; - } - else right = anglesToForward( door.angles ); - right = vectorScale( right, 54 ); - door.opened = 1; - door.origin_opened = door.origin; - door.force_open_time = 0; - if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "flip" ) - { - door.origin_closed = door.origin - right; - } - else - { - door.origin_closed = door.origin + right; - } - door.origin = door.origin_closed; - pointa = door getpointinbounds( 1, 1, 1 ); - pointb = door getpointinbounds( -1, -1, -1 ); - door.mins = getminpoint( pointa, pointb ) - door.origin; - door.maxs = getmaxpoint( pointa, pointb ) - door.origin; - door setcandamage( 1 ); - door allowbottargetting( 0 ); - door.triggers = []; - _a57 = triggers; - _k57 = getFirstArrayKey( _a57 ); - while ( isDefined( _k57 ) ) - { - trigger = _a57[ _k57 ]; - if ( isDefined( trigger.target ) ) - { - if ( trigger.target == door.targetname ) - { - trigger.mins = trigger getmins(); - trigger.maxs = trigger getmaxs(); - door.triggers[ door.triggers.size ] = trigger; - } - } - _k57 = getNextArrayKey( _a57, _k57 ); - } - door thread door_damage_think( otherdoor ); - if ( i > 0 ) - { - door thread door_notify_think( i ); - i++; - continue; - } - else - { - door thread door_think( i ); - } - i++; - } -} - -getminpoint( pointa, pointb ) -{ - point = []; - point[ 0 ] = pointa[ 0 ]; - point[ 1 ] = pointa[ 1 ]; - point[ 2 ] = pointa[ 2 ]; - i = 0; - while ( i < 3 ) - { - if ( point[ i ] > pointb[ i ] ) - { - point[ i ] = pointb[ i ]; - } - i++; - } - return ( point[ 0 ], point[ 1 ], point[ 2 ] ); -} - -getmaxpoint( pointa, pointb ) -{ - point = []; - point[ 0 ] = pointa[ 0 ]; - point[ 1 ] = pointa[ 1 ]; - point[ 2 ] = pointa[ 2 ]; - i = 0; - while ( i < 3 ) - { - if ( point[ i ] < pointb[ i ] ) - { - point[ i ] = pointb[ i ]; - } - i++; - } - return ( point[ 0 ], point[ 1 ], point[ 2 ] ); -} - -door_think( index ) -{ - wait ( 0,05 * index ); - self door_close(); - for ( ;; ) - { - wait 0,25; - if ( self door_should_open() ) - { - level notify( "dooropen" ); - self door_open(); - } - else - { - level notify( "doorclose" ); - self door_close(); - } - self movement_process(); - } -} - -door_notify_think( index ) -{ - wait ( 0,05 * index ); - self door_close(); - for ( ;; ) - { - event = level waittill_any_return( "dooropen", "doorclose" ); - if ( !isDefined( event ) ) - { - continue; - } - else - { - if ( event == "dooropen" ) - { - self door_open(); - } - else - { - self door_close(); - } - self movement_process(); - } - } -} - -door_should_open() -{ - if ( getTime() < self.force_open_time ) - { - return 1; - } - _a170 = self.triggers; - _k170 = getFirstArrayKey( _a170 ); - while ( isDefined( _k170 ) ) - { - trigger = _a170[ _k170 ]; - if ( trigger trigger_is_occupied() ) - { - return 1; - } - _k170 = getNextArrayKey( _a170, _k170 ); - } - return 0; -} - -door_open() -{ - if ( self.opened ) - { - return; - } - dist = distance( self.origin_opened, self.origin ); - frac = dist / 54; - time = clamp( frac * 0,3, 0,1, 0,3 ); - self moveto( self.origin_opened, time ); - self playsound( "mpl_drone_door_open" ); - self.opened = 1; -} - -door_close() -{ - if ( !self.opened ) - { - return; - } - dist = distance( self.origin_closed, self.origin ); - frac = dist / 54; - time = clamp( frac * 0,3, 0,1, 0,3 ); - self moveto( self.origin_closed, time ); - self playsound( "mpl_drone_door_close" ); - self.opened = 0; -} - -movement_process() -{ - moving = 0; - if ( self.opened ) - { - if ( distancesquared( self.origin, self.origin_opened ) > 0,001 ) - { - moving = 1; - } - } - else - { - if ( distancesquared( self.origin, self.origin_closed ) > 0,001 ) - { - moving = 1; - } - } - while ( moving ) - { - entities = gettouchingvolume( self.origin, self.mins, self.maxs ); - _a238 = entities; - _k238 = getFirstArrayKey( _a238 ); - while ( isDefined( _k238 ) ) - { - entity = _a238[ _k238 ]; - if ( isDefined( entity.classname ) && entity.classname == "grenade" ) - { - if ( !isDefined( entity.name ) ) - { - } - else if ( !isDefined( entity.owner ) ) - { - } - else watcher = entity.owner getwatcherforweapon( entity.name ); - if ( !isDefined( watcher ) ) - { - } - else watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate( entity, 0, undefined ); - } - if ( self.opened ) - { - } - else if ( isDefined( entity.classname ) && entity.classname == "auto_turret" ) - { - if ( !isDefined( entity.damagedtodeath ) || !entity.damagedtodeath ) - { - entity domaxdamage( self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" ); - } - } - else - { - if ( isDefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" ) - { - entity maps/mp/_tacticalinsertion::destroy_tactical_insertion(); - } - } - _k238 = getNextArrayKey( _a238, _k238 ); - } - } -} - -trigger_is_occupied() -{ - entities = gettouchingvolume( self.origin, self.mins, self.maxs ); - _a294 = entities; - _k294 = getFirstArrayKey( _a294 ); - while ( isDefined( _k294 ) ) - { - entity = _a294[ _k294 ]; - if ( isalive( entity ) ) - { - if ( !isplayer( entity ) || isai( entity ) && isvehicle( entity ) ) - { - return 1; - } - } - _k294 = getNextArrayKey( _a294, _k294 ); - } - return 0; -} - -getwatcherforweapon( weapname ) -{ - if ( !isDefined( self ) ) - { - return undefined; - } - if ( !isplayer( self ) ) - { - return undefined; - } - i = 0; - while ( i < self.weaponobjectwatcherarray.size ) - { - if ( self.weaponobjectwatcherarray[ i ].weapon != weapname ) - { - i++; - continue; - } - else - { - return self.weaponobjectwatcherarray[ i ]; - } - i++; - } - return undefined; -} - -door_damage_think( otherdoor ) -{ - self.maxhealth = 99999; - self.health = self.maxhealth; - for ( ;; ) - { - self waittill( "damage", damage, attacker, dir, point, mod, model, tag, part, weapon, flags ); - self.maxhealth = 99999; - self.health = self.maxhealth; - if ( mod == "MOD_PISTOL_BULLET" || mod == "MOD_RIFLE_BULLET" ) - { - self.force_open_time = getTime() + 1500; - otherdoor.force_open_time = getTime() + 1500; - } - } -} diff --git a/Multiplayer Maps/mp_vertigo/maps/mp/mp_vertigo_fx.gsc b/Multiplayer Maps/mp_vertigo/maps/mp/mp_vertigo_fx.gsc deleted file mode 100644 index bcb6525..0000000 --- a/Multiplayer Maps/mp_vertigo/maps/mp/mp_vertigo_fx.gsc +++ /dev/null @@ -1,78 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); -#using_animtree( "fxanim_props_dlc" ); - -main() -{ - precache_fxanim_props(); - precache_fxanim_props_dlc(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_vertigo_fx::main(); - maps/mp/createart/mp_vertigo_art::main(); -} - -precache_scripted_fx() -{ -} - -precache_createfx_fx() -{ - level._effect[ "fx_mp_vertigo_tube_cloud" ] = loadfx( "maps/mp_maps/fx_mp_vertigo_tube_cloud" ); - level._effect[ "fx_mp_vertigo_engine_exhaust" ] = loadfx( "maps/mp_maps/fx_mp_vertigo_engine_exhaust" ); - level._effect[ "fx_mp_vertigo_hvac_steam" ] = loadfx( "maps/mp_maps/fx_mp_vertigo_hvac_steam" ); - level._effect[ "fx_mp_vertigo_wind_cloud_med" ] = loadfx( "maps/mp_maps/fx_mp_vertigo_wind_cloud_med" ); - level._effect[ "fx_mp_vertigo_wind_med" ] = loadfx( "maps/mp_maps/fx_mp_vertigo_wind_med" ); - level._effect[ "fx_mp_vertigo_wind_med_dark" ] = loadfx( "maps/mp_maps/fx_mp_vertigo_wind_med_dark" ); - level._effect[ "fx_mp_vertigo_ground_dust" ] = loadfx( "maps/mp_maps/fx_mp_vertigo_ground_dust" ); - level._effect[ "fx_mp_vertigo_ground_dust_lite" ] = loadfx( "maps/mp_maps/fx_mp_vertigo_ground_dust_lite" ); - level._effect[ "fx_mp_vertigo_dirt_swirl" ] = loadfx( "maps/mp_maps/fx_mp_vertigo_dirt_swirl" ); - level._effect[ "fx_mp_vertigo_cloud_vista01" ] = loadfx( "maps/mp_maps/fx_mp_vertigo_cloud_vista01" ); - level._effect[ "fx_mp_vertigo_cloud_vista02" ] = loadfx( "maps/mp_maps/fx_mp_vertigo_cloud_vista02" ); - level._effect[ "fx_mp_vertigo_window_exploder" ] = loadfx( "maps/mp_maps/fx_mp_vertigo_window_exploder" ); - level._effect[ "fx_mp_vertigo_window_exploder_sm" ] = loadfx( "maps/mp_maps/fx_mp_vertigo_window_exploder_sm" ); - level._effect[ "fx_mp_light_dust_motes_md" ] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); - level._effect[ "fx_mp_vertigo_leaves" ] = loadfx( "maps/mp_maps/fx_mp_vertigo_leaves" ); - level._effect[ "fx_paper_interior_short" ] = loadfx( "debris/fx_paper_interior_short" ); - level._effect[ "fx_mp_vertigo_fountain" ] = loadfx( "maps/mp_maps/fx_mp_vertigo_fountain" ); - level._effect[ "fx_mp_vertigo_fountain2" ] = loadfx( "maps/mp_maps/fx_mp_vertigo_fountain2" ); - level._effect[ "fx_drone_red_blink" ] = loadfx( "light/fx_drone_red_blink" ); - level._effect[ "fx_vertigo_rectangle_light_skinny" ] = loadfx( "light/fx_vertigo_rectangle_light_skinny" ); - level._effect[ "fx_drone_light_yellow" ] = loadfx( "light/fx_drone_light_yellow" ); - level._effect[ "fx_vertigo_step_light" ] = loadfx( "light/fx_vertigo_step_light" ); - level._effect[ "fx_vertigo_step_light_sm" ] = loadfx( "light/fx_vertigo_step_light_sm" ); - level._effect[ "fx_mp_vertigo_pillar_lights" ] = loadfx( "maps/mp_maps/fx_mp_vertigo_pillar_lights" ); - level._effect[ "fx_mp_vertigo_ceiling_light" ] = loadfx( "maps/mp_maps/fx_mp_vertigo_ceiling_light" ); - level._effect[ "fx_mp_vertigo_ceiling_light_sm" ] = loadfx( "maps/mp_maps/fx_mp_vertigo_ceiling_light_sm" ); - level._effect[ "fx_light_god_ray_mp_vertigo" ] = loadfx( "env/light/fx_light_god_ray_mp_vertigo" ); - level._effect[ "fx_light_god_ray_mp_vertigo_sm" ] = loadfx( "env/light/fx_light_god_ray_mp_vertigo_sm" ); - level._effect[ "fx_light_mag_ceiling_light" ] = loadfx( "light/fx_light_mag_ceiling_light" ); - level._effect[ "fx_landing_light_vertigo" ] = loadfx( "light/fx_landing_light_vertigo" ); - level._effect[ "fx_mp_vertigo_scanner_glare" ] = loadfx( "maps/mp_maps/fx_mp_vertigo_scanner_glare" ); - level._effect[ "fx_vertigo_vista_glare01" ] = loadfx( "light/fx_vertigo_vista_glare01" ); - level._effect[ "fx_vertigo_vista_glare02" ] = loadfx( "light/fx_vertigo_vista_glare02" ); - level._effect[ "fx_vertigo_rectangle_light01" ] = loadfx( "light/fx_vertigo_rectangle_light01" ); - level._effect[ "fx_lf_mp_vertigo_sun1" ] = loadfx( "lens_flares/fx_lf_mp_vertigo_sun1" ); - level._effect[ "fx_insects_swarm_lg_light" ] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "wirespark_med" ] = %fxanim_gp_wirespark_med_anim; - level.scr_anim[ "fxanim_props" ][ "stair_chain" ] = %fxanim_mp_ver_stair_chain_sign_anim; - level.scr_anim[ "fxanim_props" ][ "roofvent_modern" ] = %fxanim_gp_roofvent_slow_anim; - level.scr_anim[ "fxanim_props" ][ "cell_antenna" ] = %fxanim_gp_cell_antenna_anim; - level.scr_anim[ "fxanim_props" ][ "antenna_rooftop" ] = %fxanim_gp_antenna_rooftop_anim; - level.scr_anim[ "fxanim_props" ][ "deck_antenna" ] = %fxanim_gp_deck_antenna_anim; - level.scr_anim[ "fxanim_props" ][ "ant_rooftop_small" ] = %fxanim_gp_antenna_rooftop_small_anim; - level.scr_anim[ "fxanim_props" ][ "sat_dish" ] = %fxanim_gp_satellite_dish_anim; - level.scr_anim[ "fxanim_props" ][ "com_tower" ] = %fxanim_gp_communication_tower_anim; -} - -precache_fxanim_props_dlc() -{ - level.scr_anim[ "fxanim_props_dlc" ][ "hook" ] = %fxanim_mp_ver_hook_anim; - level.scr_anim[ "fxanim_props_dlc" ][ "blinds_impact" ] = %fxanim_gp_blinds_long_impact_anim; - level.scr_anim[ "fxanim_props_dlc" ][ "blinds_idle" ] = %fxanim_gp_blinds_long_idle_anim; -} diff --git a/Multiplayer Maps/mp_village/aitype/enemy_dog_mp.gsc b/Multiplayer Maps/mp_village/aitype/enemy_dog_mp.gsc deleted file mode 100644 index 17b711f..0000000 --- a/Multiplayer Maps/mp_village/aitype/enemy_dog_mp.gsc +++ /dev/null @@ -1,42 +0,0 @@ - -main() -{ - self.accuracy = 1; - self.animstatedef = ""; - self.animtree = "dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "dog"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/character_mp_german_shepherd::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - character/character_mp_german_shepherd::precache(); -} diff --git a/Multiplayer Maps/mp_village/character/character_mp_german_shepherd.gsc b/Multiplayer Maps/mp_village/character/character_mp_german_shepherd.gsc deleted file mode 100644 index 00a4879..0000000 --- a/Multiplayer Maps/mp_village/character/character_mp_german_shepherd.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "german_shepherd" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "german_shepherd" ); -} diff --git a/Multiplayer Maps/mp_village/maps/mp/createart/mp_village_art.gsc b/Multiplayer Maps/mp_village/maps/mp/createart/mp_village_art.gsc deleted file mode 100644 index b12e7ac..0000000 --- a/Multiplayer Maps/mp_village/maps/mp/createart/mp_village_art.gsc +++ /dev/null @@ -1,18 +0,0 @@ - -main() -{ - level.tweakfile = 1; - setdvar( "visionstore_glowTweakEnable", "0" ); - setdvar( "visionstore_glowTweakRadius0", "5" ); - setdvar( "visionstore_glowTweakRadius1", "" ); - setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); - setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); - setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); - setdvar( "visionstore_glowTweakBloomIntensity1", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); - visionsetnaked( "mp_village", 1 ); - setdvar( "r_lightGridEnableTweaks", 1 ); - setdvar( "r_lightGridIntensity", 1 ); - setdvar( "r_lightGridContrast", 0 ); -} diff --git a/Multiplayer Maps/mp_village/maps/mp/createfx/mp_village_fx.gsc b/Multiplayer Maps/mp_village/maps/mp/createfx/mp_village_fx.gsc deleted file mode 100644 index 6e72d8c..0000000 --- a/Multiplayer Maps/mp_village/maps/mp/createfx/mp_village_fx.gsc +++ /dev/null @@ -1,1030 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -1813,99, -1057,09, 105,081 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 267 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_smoke_tower" ); - ent.v[ "origin" ] = ( -191,62, 296,453, 414,336 ); - ent.v[ "angles" ] = ( 291,776, 308,388, 1,73155 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); - ent.v[ "origin" ] = ( -210,571, 316,289, 356,25 ); - ent.v[ "angles" ] = ( 282, 304, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); - ent.v[ "origin" ] = ( -230,998, 235,91, 433,022 ); - ent.v[ "angles" ] = ( 282, 304, -17 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); - ent.v[ "origin" ] = ( -147,721, 335,748, 400,938 ); - ent.v[ "angles" ] = ( 274, 304, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); - ent.v[ "origin" ] = ( -244,801, 271,62, 570,051 ); - ent.v[ "angles" ] = ( 282,163, 294,467, 20,3233 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_smoke_med" ); - ent.v[ "origin" ] = ( -248,784, 275,206, 594,056 ); - ent.v[ "angles" ] = ( 298,271, 319,756, -1,84345 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_smoke_med" ); - ent.v[ "origin" ] = ( -217,965, 251,159, 512,247 ); - ent.v[ "angles" ] = ( 286,281, 321,123, -3,11529 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -558,044, -759,024, 30 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 111 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -1346,47, -2216,44, 48,1873 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 111 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -1371,65, -1164,77, 53 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 126 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -1556,65, -2526,23, 68,055 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 118 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -1330,26, -1845,9, 63 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 114 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -1785,33, -765,98, 71 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 96 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -1619,11, -313,069, 54 ); - ent.v[ "angles" ] = ( 0, 111, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -1090,24, 183,883, 63 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 102 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -413,984, 196,57, 68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 128 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 337,617, 502,419, 53,3354 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 146 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 887,008, 1175,17, 48,401 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 125 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 968,22, 1644,06, 35,7693 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 141 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 1239,62, 921,875, 22,625 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 128 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 1791,78, 52,5281, 41,662 ); - ent.v[ "angles" ] = ( 0, 134, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 1975,07, -361,061, 62,7907 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 128 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 1958,69, -674,701, 89,5614 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 128 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 197,522, -1232,76, 18,2266 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 134 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 779,89, -1271,39, 68,979 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 199,043, -1775,94, 41,6918 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 152 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( -378,84, 407,307, 1,45424 ); - ent.v[ "angles" ] = ( 358,798, 355,184, -1,78151 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_fire_sm" ); - ent.v[ "origin" ] = ( -364,485, 405,894, 3,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( -352,909, 403,105, -3,8992 ); - ent.v[ "angles" ] = ( 346,02, 0,747598, -3,09166 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1180,88, 988,778, 63 ); - ent.v[ "angles" ] = ( 359, 131, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1124,68, 1267,53, 59 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 162 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 32,072, -423,24, 61,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 352 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 235,832, -265,525, 207,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 265 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -483,932, -1081,38, 76,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 287 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -1163,42, -1382,08, 63,5 ); - ent.v[ "angles" ] = ( 0, 315, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -1165,87, -1113,05, 193,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 331 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "origin" ] = ( -1822,56, -1542,7, 145,182 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "origin" ] = ( -1755,26, -1242,48, 74,125 ); - ent.v[ "angles" ] = ( 359,708, 75, -0,956315 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -1781,29, -1479,9, 25 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_smoke_xsm" ); - ent.v[ "origin" ] = ( -651,754, 509,066, 119,508 ); - ent.v[ "angles" ] = ( 359,307, 95,0041, 89,9016 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_smoke_xsm" ); - ent.v[ "origin" ] = ( -1169,88, -748,4, 80,3306 ); - ent.v[ "angles" ] = ( 2,92213, 94,0682, 76,0184 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "origin" ] = ( -1819,67, -98,3161, 66,71 ); - ent.v[ "angles" ] = ( 359,61, 69, -0,920557 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "origin" ] = ( -1875,49, -4,31169, 40,1502 ); - ent.v[ "angles" ] = ( 359,553, 73, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -1836,25, -238,945, 74,5251 ); - ent.v[ "angles" ] = ( 0,207931, 99, 0,978301 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -1600,68, 627,364, 57,5066 ); - ent.v[ "angles" ] = ( 0,207931, 99, 0,978301 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( -501,126, 1307,26, 64 ); - ent.v[ "angles" ] = ( 359,212, 162,995, 0,61552 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( -115,218, 368,125, 442,786 ); - ent.v[ "angles" ] = ( 311,574, 10,8533, -27,6896 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 1410,44, -576,939, 38,7539 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 137 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_smoke_xsm" ); - ent.v[ "origin" ] = ( -2090,97, -2277,18, 77,6188 ); - ent.v[ "angles" ] = ( 1,49495, 165,949, 71,2984 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 1082,09, 2083,07, 29,4473 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 141 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_papers" ); - ent.v[ "origin" ] = ( -651,623, 1051,25, 16 ); - ent.v[ "angles" ] = ( 354, 148, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_papers" ); - ent.v[ "origin" ] = ( 780,66, -605,108, 10 ); - ent.v[ "angles" ] = ( 355, 100, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_papers" ); - ent.v[ "origin" ] = ( -1798,52, -1729,65, 7,99999 ); - ent.v[ "angles" ] = ( 350,001, 21,9847, 0,158839 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_dust_sm" ); - ent.v[ "origin" ] = ( 884,348, 675,346, 19,2016 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 117 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_dust_sm" ); - ent.v[ "origin" ] = ( 1345,5, 588,924, 18,4655 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 107 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_dust_sm" ); - ent.v[ "origin" ] = ( 1775,24, -7,4167, 35,6556 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 142 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_dust_sm" ); - ent.v[ "origin" ] = ( 1384,49, -1358,68, 21,0023 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 127 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_dust_sm" ); - ent.v[ "origin" ] = ( 513,1, -1248,82, 28,5544 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 124 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_dust_sm" ); - ent.v[ "origin" ] = ( -253,587, -1731,46, -12,4567 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 127 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_dust_sm" ); - ent.v[ "origin" ] = ( -1794,98, -1507,68, 107,064 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 87 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_dust_sm" ); - ent.v[ "origin" ] = ( -1772,46, -1218,43, 60,7191 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 87 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_dust_sm" ); - ent.v[ "origin" ] = ( 174,843, -389,479, 253,125 ); - ent.v[ "angles" ] = ( 27, 358, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_dust_ceiling" ); - ent.v[ "origin" ] = ( 1185,28, 132,521, 228,36 ); - ent.v[ "angles" ] = ( 358,071, 2,03485, -2,06856 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 936,636, 177,256, 190,125 ); - ent.v[ "angles" ] = ( 23,996, 0, 0,44519 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 925,107, 19,4493, 178,469 ); - ent.v[ "angles" ] = ( 24, 359, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 1339,55, 279,875, 184,595 ); - ent.v[ "angles" ] = ( 31,1604, 278,623, 4,91071 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smoke_vista" ); - ent.v[ "origin" ] = ( -2099,1, 1048,5, 28,4734 ); - ent.v[ "angles" ] = ( 5, 121, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_smoke_vista" ); - ent.v[ "origin" ] = ( -770,419, -4674,93, 23,078 ); - ent.v[ "angles" ] = ( 296,659, 125,262, -162,638 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( 912,848, 26,5797, 221,029 ); - ent.v[ "angles" ] = ( 8,72117, 235,36, 52,9501 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( 900,848, 174,059, 240,62 ); - ent.v[ "angles" ] = ( 359,703, 222,057, 51,825 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( 913,006, 259,51, 230,232 ); - ent.v[ "angles" ] = ( 353,981, 216,367, 52,1394 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( 1376,1, 268,679, 219,875 ); - ent.v[ "angles" ] = ( 32,293, 32,3817, -44,3969 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( 1284,71, 285,308, 240,087 ); - ent.v[ "angles" ] = ( 22,669, 20,8383, -49,897 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( 973,84, 692,361, 246,125 ); - ent.v[ "angles" ] = ( 32,4936, 193,226, 30,4891 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( 908,378, 1303,28, 159,172 ); - ent.v[ "angles" ] = ( 25,6135, 109,745, -22,2253 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( 918,094, 178,839, 230,125 ); - ent.v[ "angles" ] = ( 40,1079, 155,323, 5,99661 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( 913,077, 90,231, 229,452 ); - ent.v[ "angles" ] = ( 40,1079, 155,323, 5,99661 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -299,297, -807,207, 58,106 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -1873,37, -651,692, 57,739 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 1662,52, 402,372, 59,9872 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 1319,87, 921,454, 53,2581 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); - ent.v[ "origin" ] = ( 942,983, 341,61, 425,739 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); - ent.v[ "origin" ] = ( 291,429, -593,014, 407,06 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); - ent.v[ "origin" ] = ( -822,937, -1175,59, 430,223 ); - ent.v[ "angles" ] = ( 277,613, 203,088, 165,729 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_tin_hat_sm" ); - ent.v[ "origin" ] = ( -986,871, -342,934, 269,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( -358,229, 1461,05, 100,125 ); - ent.v[ "angles" ] = ( 15,9336, 175,648, 15,162 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 228,178, 1011,59, 204,125 ); - ent.v[ "angles" ] = ( 0, 179, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -297,788, 922,356, 204,125 ); - ent.v[ "angles" ] = ( 1, 87,9966, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -276,759, 1281,41, 210,125 ); - ent.v[ "angles" ] = ( 0,875146, 59,993, 0,514866 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 214,797, 1232,47, 63,125 ); - ent.v[ "angles" ] = ( 359,252, 166,985, 0,686445 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -349,762, 1449,72, 63,125 ); - ent.v[ "angles" ] = ( 0,631591, 337,985, -0,795021 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( 781,374, -808,218, 134,125 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( 783,156, -714,052, 135,875 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( 784,744, -906,287, 135,875 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( 975,973, -713,423, 134,875 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( 980,667, -808,839, 135,875 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_drone_rectangle_light_03" ); - ent.v[ "origin" ] = ( 977,268, -968,699, 135,875 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "origin" ] = ( -76,4057, 1204,65, 131,875 ); - ent.v[ "angles" ] = ( 90, 1,09202, 91,092 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( 1400,8, 279,875, 354,18 ); - ent.v[ "angles" ] = ( 18,8097, 17,4381, -51,1021 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( 1306,53, 286, 233,551 ); - ent.v[ "angles" ] = ( 9,11614, 176,045, 52,9863 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( 898, 114,4, 246,618 ); - ent.v[ "angles" ] = ( 1,86742, 78,6708, -41,0302 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( 1294, 286, 358,222 ); - ent.v[ "angles" ] = ( 18,8097, 17,4381, -51,1021 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( 952,644, 685,316, 211,125 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( -1156,81, -1210,64, 231,125 ); - ent.v[ "angles" ] = ( 21,378, 181,56, 24,8377 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( -1171,42, -1194,04, 209,125 ); - ent.v[ "angles" ] = ( 338,969, 248,779, 56,8713 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_mp_village_sun1" ); - ent.v[ "origin" ] = ( -38009,8, 47714,5, 28695,4 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( 945,914, 1190,32, 152 ); - ent.v[ "angles" ] = ( 25,2608, 174,294, 23,0988 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( 942,484, 1141,01, 155,207 ); - ent.v[ "angles" ] = ( 25,8009, 173,551, 25,769 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( 939,005, 1098,78, 157,686 ); - ent.v[ "angles" ] = ( 24,8771, 160,285, 22,7013 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( 935,66, 1055,82, 159,812 ); - ent.v[ "angles" ] = ( 21,5704, 162,094, 18,5521 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( 920,113, 1210,65, 164,104 ); - ent.v[ "angles" ] = ( 8,9977, 234,539, 60,9576 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( 920,44, 1302,62, 168 ); - ent.v[ "angles" ] = ( 47, 179, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( 926,183, 1118,53, 157,164 ); - ent.v[ "angles" ] = ( 19,4211, 228,395, 59,4418 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "origin" ] = ( -549,859, -1253,8, 135,159 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "origin" ] = ( -549,077, -1164,38, 135,205 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_rectangle_light_01" ); - ent.v[ "origin" ] = ( -960,26, -1375,54, 134,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -1848,66, -1397,18, 92,8647 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -1230,53, -1841,74, 46 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -807,588, -1606,77, 36,5376 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -340,739, -1793,53, 29,9801 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 53,9012, -1650,58, 3,15843 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 461,622, -1132,94, 59,5028 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 252,204, -928,109, 45,0477 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( 472,348, 1482,87, 53 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -1759,4, 35,3998, 48,7831 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "origin" ] = ( 600,239, -1214,29, 33,5164 ); - ent.v[ "angles" ] = ( 351,709, 137,106, -0,714527 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "origin" ] = ( 113,833, -1703,52, 13,8842 ); - ent.v[ "angles" ] = ( 351,829, 143,167, -1,58309 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "origin" ] = ( -405,78, -1822,65, 34,8997 ); - ent.v[ "angles" ] = ( 351,829, 143,167, -1,58309 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "origin" ] = ( -1242,57, -1887,42, 36 ); - ent.v[ "angles" ] = ( 351,829, 143,167, -1,58309 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_grass" ); - ent.v[ "origin" ] = ( -1819,15, -967,84, 62,6134 ); - ent.v[ "angles" ] = ( 353,645, 91,755, 5,38352 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); - ent.v[ "origin" ] = ( -2076,22, 1091,22, 4,05616 ); - ent.v[ "angles" ] = ( 283,397, 277,182, 26,1863 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); - ent.v[ "origin" ] = ( -817,744, -4709,2, 1 ); - ent.v[ "angles" ] = ( 282, 304, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); - ent.v[ "origin" ] = ( -805,943, -4686,76, -12 ); - ent.v[ "angles" ] = ( 282, 304, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_vista_dust" ); - ent.v[ "origin" ] = ( 813,546, 2758,29, 128 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 156 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_vista_dust" ); - ent.v[ "origin" ] = ( 1723,89, 2220,71, 179,746 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 156 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_vista_dust" ); - ent.v[ "origin" ] = ( 63,9353, 2214,58, 119,624 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 156 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_vista_dust" ); - ent.v[ "origin" ] = ( -2608,83, 593,16, 156,903 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 106 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_vista_dust" ); - ent.v[ "origin" ] = ( 1307,28, -1948,94, 93,1001 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 156 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_vista_dust" ); - ent.v[ "origin" ] = ( -209,649, -2376,22, 130,134 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 156 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_vista_dust" ); - ent.v[ "origin" ] = ( -1246,72, -2891,95, 93,3384 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 190 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_vista_dust" ); - ent.v[ "origin" ] = ( -2359,62, -2768,92, 126,88 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 135 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_express_train_blow_dust" ); - ent.v[ "origin" ] = ( 912,7, 76,0871, 67,9724 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 146 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); - ent.v[ "origin" ] = ( -2124,18, 1052,12, 12,5861 ); - ent.v[ "angles" ] = ( 284,961, 266,703, 60,3493 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); - ent.v[ "origin" ] = ( -2098,48, -2364,86, 7,8243 ); - ent.v[ "angles" ] = ( 326,356, 10,272, -18,1131 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_md_runner" ); - ent.v[ "origin" ] = ( -1797,63, -1819,84, 358,971 ); - ent.v[ "angles" ] = ( 54,1716, 331,969, -34,4583 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( -2093,66, -2367,55, -3,59778 ); - ent.v[ "angles" ] = ( 346,967, 359,667, -18,8306 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_single_glare" ); - ent.v[ "origin" ] = ( -232,778, 1421,11, 252,875 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "origin" ] = ( 414,294, -151,083, 137,512 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_tube_light" ); - ent.v[ "origin" ] = ( 414,61, 34,1189, 138,393 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_barrel_fire" ); - ent.v[ "origin" ] = ( -200,968, -1135,08, 32,5375 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_smoke_fire_med" ); - ent.v[ "origin" ] = ( -744,447, -4687,3, -6,99999 ); - ent.v[ "angles" ] = ( 282, 304, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_village_rectangle_light_01" ); - ent.v[ "origin" ] = ( -344,857, -1255,08, 166,875 ); - ent.v[ "angles" ] = ( 90, 180, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 897,152, 143,133, 257,051 ); - ent.v[ "angles" ] = ( 14,6493, 219,838, 57,9798 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 898,876, 141,162, 236,842 ); - ent.v[ "angles" ] = ( 15,703, 221,6, 58,441 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 898,665, 141,467, 215,101 ); - ent.v[ "angles" ] = ( 16,7424, 223,379, 58,9382 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 897,683, 137,658, 195,015 ); - ent.v[ "angles" ] = ( 16,7424, 223,379, 58,9382 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 897,561, 36,6521, 193,65 ); - ent.v[ "angles" ] = ( 12,5037, 216,365, 57,1641 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 898,543, 40,4613, 213,736 ); - ent.v[ "angles" ] = ( 14,6493, 219,838, 57,9798 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 898,754, 40,1557, 235,477 ); - ent.v[ "angles" ] = ( 15,703, 221,6, 58,441 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 897,03, 42,1269, 255,686 ); - ent.v[ "angles" ] = ( 14,1175, 218,964, 57,7626 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 898,242, 239,73, 196,02 ); - ent.v[ "angles" ] = ( 14,2521, 221,329, 57,4713 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 899,224, 243,54, 216,106 ); - ent.v[ "angles" ] = ( 12,4374, 220,042, 58,2885 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 899,435, 243,234, 237,847 ); - ent.v[ "angles" ] = ( 11,9601, 215,506, 56,9821 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 897,711, 245,205, 258,056 ); - ent.v[ "angles" ] = ( 13,0445, 217,228, 57,3548 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 1356,57, 279,182, 254,086 ); - ent.v[ "angles" ] = ( 349,552, 50,6812, -60,8956 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 1356,21, 279,19, 232,922 ); - ent.v[ "angles" ] = ( 355,023, 41,0474, -59,5981 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 1353,9, 279,184, 212,182 ); - ent.v[ "angles" ] = ( 355,023, 41,0474, -59,5981 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 1352,74, 286,508, 194,909 ); - ent.v[ "angles" ] = ( 13,6987, 62,8947, -60,7796 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -323,464, -466,393, 44 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -142,017, -73,3138, 44 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -171,254, -619,333, 51 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_lg_light" ); - ent.v[ "origin" ] = ( -31,754, -301,623, 36 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_hole_god_ray" ); - ent.v[ "origin" ] = ( 1005,18, 1318,32, 178,504 ); - ent.v[ "angles" ] = ( 27,9938, 332,352, -22,222 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_hole_god_ray" ); - ent.v[ "origin" ] = ( 1090,45, 1297,82, 170,996 ); - ent.v[ "angles" ] = ( 30,4315, 327,456, -25,5511 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_hole_god_ray" ); - ent.v[ "origin" ] = ( 1136,72, 1294,88, 160,954 ); - ent.v[ "angles" ] = ( 30,4948, 327,476, -26,1648 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_hole_god_ray" ); - ent.v[ "origin" ] = ( 1195,15, 1226,48, 159,977 ); - ent.v[ "angles" ] = ( 29,9515, 331,597, -23,9325 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_statue_water" ); - ent.v[ "origin" ] = ( -156,217, 36,656, 60,3238 ); - ent.v[ "angles" ] = ( 270, 359,97, 179,03 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( -1017,28, -1058,86, 220,773 ); - ent.v[ "angles" ] = ( 6,87046, 45,9913, -50,977 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( -290,411, 913,023, 222,125 ); - ent.v[ "angles" ] = ( 17,4239, 184,067, -76,3969 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( -144,233, 900,932, 220,125 ); - ent.v[ "angles" ] = ( 39,6414, 190,921, -73,0574 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( -302,441, 915,411, 263,125 ); - ent.v[ "angles" ] = ( 18, 273, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray" ); - ent.v[ "origin" ] = ( -140,095, 906,855, 219,125 ); - ent.v[ "angles" ] = ( 42,705, 347,652, 72,2191 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_light_dust_motes_md" ); - ent.v[ "origin" ] = ( -353,056, 1020,95, 206,515 ); - ent.v[ "angles" ] = ( 359,93, 355,997, -0,997716 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 897,999, 177,858, 197,966 ); - ent.v[ "angles" ] = ( 11,267, 57,2399, -57,898 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 897,989, 178,457, 217,576 ); - ent.v[ "angles" ] = ( 11,267, 57,2399, -57,898 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 897,994, 178,381, 237,001 ); - ent.v[ "angles" ] = ( 11,267, 57,2399, -57,898 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 897,984, 178,876, 256,689 ); - ent.v[ "angles" ] = ( 11,267, 57,2399, -57,898 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 898,004, 79,6484, 261,293 ); - ent.v[ "angles" ] = ( 11,267, 57,2399, -57,898 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 898,014, 79,1534, 241,604 ); - ent.v[ "angles" ] = ( 11,267, 57,2399, -57,898 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 898,009, 79,2299, 222,18 ); - ent.v[ "angles" ] = ( 11,267, 57,2399, -57,898 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_village" ); - ent.v[ "origin" ] = ( 898,02, 78,6311, 202,57 ); - ent.v[ "angles" ] = ( 11,267, 57,2399, -57,898 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( 136,857, -339,268, 236,125 ); - ent.v[ "angles" ] = ( 1,02272, 217,865, 59,1694 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( 141,63, -351,598, 249,125 ); - ent.v[ "angles" ] = ( 36,1769, 187,871, 24,4501 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( 135,422, -410,54, 262,373 ); - ent.v[ "angles" ] = ( 28,3807, 204,441, 33,3643 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_smoke_xsm" ); - ent.v[ "origin" ] = ( -1540,86, -710,073, 61,2767 ); - ent.v[ "angles" ] = ( 352,402, 207,901, 90,8231 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_smoke_xsm" ); - ent.v[ "origin" ] = ( -1529,09, -705,57, 62,0473 ); - ent.v[ "angles" ] = ( 352,402, 207,901, 89,8231 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_smoke_xsm" ); - ent.v[ "origin" ] = ( -892,788, 623,037, 71,6458 ); - ent.v[ "angles" ] = ( 352,402, 139,9, 90,8233 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_smoke_xsm" ); - ent.v[ "origin" ] = ( -884,204, 613,814, 72,4164 ); - ent.v[ "angles" ] = ( 352,402, 139,9, 89,8233 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( -945,821, 641,789, 28,4432 ); - ent.v[ "angles" ] = ( 288,722, 291,032, 18,3503 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( -1028,82, 580,346, 30,5602 ); - ent.v[ "angles" ] = ( 288,722, 291,032, 18,3503 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( -1575,09, -768,375, 24,1325 ); - ent.v[ "angles" ] = ( 288,722, 9,03239, 18,3503 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_slums_dark_smoke_sm" ); - ent.v[ "origin" ] = ( -1532,25, -862,331, 26,2496 ); - ent.v[ "angles" ] = ( 288,722, 9,03239, 18,3503 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_window_god_ray_sm" ); - ent.v[ "origin" ] = ( 133,112, -445,545, 230,906 ); - ent.v[ "angles" ] = ( 40,1869, 82,7384, -56,261 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_village_single_glare" ); - ent.v[ "origin" ] = ( -72,9229, 1563,44, 252,712 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; -} diff --git a/Multiplayer Maps/mp_village/maps/mp/mp_village.gsc b/Multiplayer Maps/mp_village/maps/mp/mp_village.gsc deleted file mode 100644 index 2b3247d..0000000 --- a/Multiplayer Maps/mp_village/maps/mp/mp_village.gsc +++ /dev/null @@ -1,27 +0,0 @@ -#include maps/mp/_compass; -#include maps/mp/_utility; - -main() -{ - level.levelspawndvars = ::levelspawndvars; - maps/mp/mp_village_fx::main(); - maps/mp/_load::main(); - maps/mp/mp_village_amb::main(); - maps/mp/_compass::setupminimap( "compass_map_mp_village" ); - game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E"; - game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A"; - game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B"; - game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C"; - game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D"; - game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E"; -} - -levelspawndvars( reset_dvars ) -{ - ss = level.spawnsystem; - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2600", reset_dvars ); -} diff --git a/Multiplayer Maps/mp_village/maps/mp/mp_village_amb.gsc b/Multiplayer Maps/mp_village/maps/mp/mp_village_amb.gsc deleted file mode 100644 index df33b64..0000000 --- a/Multiplayer Maps/mp_village/maps/mp/mp_village_amb.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/_ambientpackage; -#include maps/mp/_utility; - -main() -{ -} diff --git a/Multiplayer Maps/mp_village/maps/mp/mp_village_fx.gsc b/Multiplayer Maps/mp_village/maps/mp/mp_village_fx.gsc deleted file mode 100644 index d8ecbac..0000000 --- a/Multiplayer Maps/mp_village/maps/mp/mp_village_fx.gsc +++ /dev/null @@ -1,59 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); - -main() -{ - precache_fxanim_props(); - precache_scripted_fx(); - precache_createfx_fx(); - maps/mp/createfx/mp_village_fx::main(); - maps/mp/createart/mp_village_art::main(); -} - -precache_scripted_fx() -{ -} - -precache_createfx_fx() -{ - level._effect[ "fx_mp_light_dust_motes_md" ] = loadfx( "maps/mp_maps/fx_mp_light_dust_motes_md" ); - level._effect[ "fx_mp_express_train_blow_dust" ] = loadfx( "maps/mp_maps/fx_mp_express_train_blow_dust" ); - level._effect[ "fx_mp_village_grass" ] = loadfx( "maps/mp_maps/fx_mp_village_grass" ); - level._effect[ "fx_mp_village_papers" ] = loadfx( "maps/mp_maps/fx_mp_village_papers" ); - level._effect[ "fx_mp_village_dust_sm" ] = loadfx( "maps/mp_maps/fx_mp_village_dust_sm" ); - level._effect[ "fx_mp_village_dust_ceiling" ] = loadfx( "maps/mp_maps/fx_mp_village_dust_ceiling" ); - level._effect[ "fx_insects_swarm_lg_light" ] = loadfx( "bio/insects/fx_insects_swarm_lg_light" ); - level._effect[ "fx_mp_elec_spark_burst_md_runner" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_md_runner" ); - level._effect[ "fx_mp_village_vista_dust" ] = loadfx( "maps/mp_maps/fx_mp_village_vista_dust" ); - level._effect[ "fx_mp_village_smoke_fire_lg" ] = loadfx( "maps/mp_maps/fx_mp_village_smoke_fire_lg" ); - level._effect[ "fx_mp_carrier_smoke_fire_sm" ] = loadfx( "maps/mp_maps/fx_mp_carrier_smoke_fire_sm" ); - level._effect[ "fx_mp_village_smoke_fire_med" ] = loadfx( "maps/mp_maps/fx_mp_village_smoke_fire_med" ); - level._effect[ "fx_mp_slums_fire_sm" ] = loadfx( "maps/mp_maps/fx_mp_slums_fire_sm" ); - level._effect[ "fx_mp_village_barrel_fire" ] = loadfx( "maps/mp_maps/fx_mp_village_barrel_fire" ); - level._effect[ "fx_mp_slums_dark_smoke_sm" ] = loadfx( "maps/mp_maps/fx_mp_slums_dark_smoke_sm" ); - level._effect[ "fx_mp_village_smoke_tower" ] = loadfx( "maps/mp_maps/fx_mp_village_smoke_tower" ); - level._effect[ "fx_mp_village_smoke_med" ] = loadfx( "maps/mp_maps/fx_mp_village_smoke_med" ); - level._effect[ "fx_mp_village_smoke_xsm" ] = loadfx( "maps/mp_maps/fx_mp_village_smoke_xsm" ); - level._effect[ "fx_mp_smoke_vista" ] = loadfx( "maps/mp_maps/fx_mp_smoke_vista" ); - level._effect[ "fx_smk_tin_hat_sm" ] = loadfx( "smoke/fx_smk_tin_hat_sm" ); - level._effect[ "fx_window_god_ray" ] = loadfx( "light/fx_window_god_ray" ); - level._effect[ "fx_window_god_ray_village" ] = loadfx( "light/fx_window_god_ray_village" ); - level._effect[ "fx_window_god_ray_sm" ] = loadfx( "light/fx_window_god_ray_sm" ); - level._effect[ "fx_drone_rectangle_light_03" ] = loadfx( "light/fx_drone_rectangle_light_03" ); - level._effect[ "fx_village_tube_light" ] = loadfx( "light/fx_village_tube_light" ); - level._effect[ "fx_village_tube_light_sq" ] = loadfx( "light/fx_village_tube_light_sq" ); - level._effect[ "fx_village_rectangle_light_01" ] = loadfx( "light/fx_village_rectangle_light_01" ); - level._effect[ "fx_mp_village_single_glare" ] = loadfx( "maps/mp_maps/fx_mp_village_single_glare" ); - level._effect[ "fx_mp_village_hole_god_ray" ] = loadfx( "maps/mp_maps/fx_mp_village_hole_god_ray" ); - level._effect[ "fx_mp_village_statue_water" ] = loadfx( "maps/mp_maps/fx_mp_village_statue_water" ); - level._effect[ "fx_lf_mp_village_sun1" ] = loadfx( "lens_flares/fx_lf_mp_village_sun1" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "sparking_wires_med" ] = %fxanim_gp_wirespark_med_anim; - level.scr_anim[ "fxanim_props" ][ "windsock" ] = %fxanim_gp_windsock_anim; - level.scr_anim[ "fxanim_props" ][ "wire_coil_01" ] = %fxanim_gp_wire_coil_01_anim; - level.scr_anim[ "fxanim_props" ][ "sign_sway_lrg" ] = %fxanim_gp_sign_sway_lrg_anim; -} diff --git a/ZM/Core/codescripts/character.gsc b/ZM/Core/codescripts/character.gsc new file mode 100644 index 0000000..03ce884 --- /dev/null +++ b/ZM/Core/codescripts/character.gsc @@ -0,0 +1,200 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +setmodelfromarray( a ) +{ + self setmodel( a[randomint( a.size )] ); +} + +precachemodelarray( a ) +{ + for ( i = 0; i < a.size; i++ ) + precachemodel( a[i] ); +} + +randomelement( a ) +{ + return a[randomint( a.size )]; +} + +attachfromarray( a ) +{ + self attach( randomelement( a ), "", 1 ); +} + +new() +{ + self detachall(); + oldgunhand = self.anim_gunhand; + + if ( !isdefined( oldgunhand ) ) + return; + + self.anim_gunhand = "none"; + self [[ anim.putguninhand ]]( oldgunhand ); +} + +save() +{ + info["gunHand"] = self.anim_gunhand; + info["gunInHand"] = self.anim_guninhand; + info["model"] = self.model; + info["hatModel"] = self.hatmodel; + info["gearModel"] = self.gearmodel; + + if ( isdefined( self.name ) ) + { + info["name"] = self.name; +/# + println( "Save: Guy has name ", self.name ); +#/ + } + else + { +/# + println( "save: Guy had no name!" ); +#/ + } + + attachsize = self getattachsize(); + + for ( i = 0; i < attachsize; i++ ) + { + info["attach"][i]["model"] = self getattachmodelname( i ); + info["attach"][i]["tag"] = self getattachtagname( i ); + } + + return info; +} + +load( info ) +{ + self detachall(); + self.anim_gunhand = info["gunHand"]; + self.anim_guninhand = info["gunInHand"]; + self setmodel( info["model"] ); + self.hatmodel = info["hatModel"]; + self.gearmodel = info["gearModel"]; + + if ( isdefined( info["name"] ) ) + { + self.name = info["name"]; +/# + println( "Load: Guy has name ", self.name ); +#/ + } + else + { +/# + println( "Load: Guy had no name!" ); +#/ + } + + attachinfo = info["attach"]; + attachsize = attachinfo.size; + + for ( i = 0; i < attachsize; i++ ) + self attach( attachinfo[i]["model"], attachinfo[i]["tag"] ); +} + +precache( info ) +{ + if ( isdefined( info["name"] ) ) + { +/# + println( "Precache: Guy has name ", info["name"] ); +#/ + } + else + { +/# + println( "Precache: Guy had no name!" ); +#/ + } + + precachemodel( info["model"] ); + attachinfo = info["attach"]; + attachsize = attachinfo.size; + + for ( i = 0; i < attachsize; i++ ) + precachemodel( attachinfo[i]["model"] ); +} + +get_random_character( amount ) +{ + self_info = strtok( self.classname, "_" ); + + if ( self_info.size <= 2 ) + return randomint( amount ); + + group = "auto"; + index = undefined; + prefix = self_info[2]; + + if ( isdefined( self.script_char_index ) ) + index = self.script_char_index; + + if ( isdefined( self.script_char_group ) ) + { + type = "grouped"; + group = "group_" + self.script_char_group; + } + + if ( !isdefined( level.character_index_cache ) ) + level.character_index_cache = []; + + if ( !isdefined( level.character_index_cache[prefix] ) ) + level.character_index_cache[prefix] = []; + + if ( !isdefined( level.character_index_cache[prefix][group] ) ) + initialize_character_group( prefix, group, amount ); + + if ( !isdefined( index ) ) + { + index = get_least_used_index( prefix, group ); + + if ( !isdefined( index ) ) + index = randomint( 5000 ); + } + + while ( index >= amount ) + index -= amount; + + level.character_index_cache[prefix][group][index]++; + return index; +} + +get_least_used_index( prefix, group ) +{ + lowest_indices = []; + lowest_use = level.character_index_cache[prefix][group][0]; + lowest_indices[0] = 0; + + for ( i = 1; i < level.character_index_cache[prefix][group].size; i++ ) + { + if ( level.character_index_cache[prefix][group][i] > lowest_use ) + continue; + + if ( level.character_index_cache[prefix][group][i] < lowest_use ) + { + lowest_indices = []; + lowest_use = level.character_index_cache[prefix][group][i]; + } + + lowest_indices[lowest_indices.size] = i; + } + + assert( lowest_indices.size, "Tried to spawn a character but the lowest indices didn't exist" ); + return random( lowest_indices ); +} + +initialize_character_group( prefix, group, amount ) +{ + for ( i = 0; i < amount; i++ ) + level.character_index_cache[prefix][group][i] = 0; +} + +random( array ) +{ + return array[randomint( array.size )]; +} diff --git a/ZM/Core/codescripts/character_mp.gsc b/ZM/Core/codescripts/character_mp.gsc new file mode 100644 index 0000000..6086847 --- /dev/null +++ b/ZM/Core/codescripts/character_mp.gsc @@ -0,0 +1,19 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; + +setmodelfromarray( a ) +{ + self setmodel( a[randomint( a.size )] ); +} + +precachemodelarray( a ) +{ + for ( i = 0; i < a.size; i++ ) + precachemodel( a[i] ); +} + +attachfromarray( a ) +{ + self attach( codescripts\character::randomelement( a ), "", 1 ); +} diff --git a/ZM/Core/codescripts/delete.csc b/ZM/Core/codescripts/delete.csc new file mode 100644 index 0000000..087c3e5 --- /dev/null +++ b/ZM/Core/codescripts/delete.csc @@ -0,0 +1,24 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + assert( isdefined( self ) ); + wait 0; + + if ( isdefined( self ) ) + { +/# + if ( isdefined( self.classname ) ) + { + if ( self.classname == "trigger_once" || self.classname == "trigger_radius" || self.classname == "trigger_multiple" ) + { + println( "" ); + println( "*** trigger debug: delete.gsc is deleting trigger with ent#: " + self getentitynumber() + " at origin: " + self.origin ); + println( "" ); + } + } +#/ + self delete(); + } +} diff --git a/ZM/Core/codescripts/delete.gsc b/ZM/Core/codescripts/delete.gsc new file mode 100644 index 0000000..087c3e5 --- /dev/null +++ b/ZM/Core/codescripts/delete.gsc @@ -0,0 +1,24 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + assert( isdefined( self ) ); + wait 0; + + if ( isdefined( self ) ) + { +/# + if ( isdefined( self.classname ) ) + { + if ( self.classname == "trigger_once" || self.classname == "trigger_radius" || self.classname == "trigger_multiple" ) + { + println( "" ); + println( "*** trigger debug: delete.gsc is deleting trigger with ent#: " + self getentitynumber() + " at origin: " + self.origin ); + println( "" ); + } + } +#/ + self delete(); + } +} diff --git a/ZM/Core/codescripts/struct.csc b/ZM/Core/codescripts/struct.csc new file mode 100644 index 0000000..25ce402 --- /dev/null +++ b/ZM/Core/codescripts/struct.csc @@ -0,0 +1,25 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +initstructs() +{ + level.struct = []; +} + +createstruct() +{ + struct = spawnstruct(); + level.struct[level.struct.size] = struct; + return struct; +} + +findstruct( position ) +{ + for ( i = 0; i < level.struct.size; i++ ) + { + if ( distancesquared( level.struct[i].origin, position ) < 1 ) + return level.struct[i]; + } + + return undefined; +} diff --git a/ZM/Core/codescripts/struct.gsc b/ZM/Core/codescripts/struct.gsc new file mode 100644 index 0000000..d9c0839 --- /dev/null +++ b/ZM/Core/codescripts/struct.gsc @@ -0,0 +1,29 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +initstructs() +{ + level.struct = []; +} + +createstruct() +{ + struct = spawnstruct(); + level.struct[level.struct.size] = struct; + return struct; +} + +findstruct( position ) +{ + foreach ( key, _ in level.struct_class_names ) + { + foreach ( val, s_array in level.struct_class_names[key] ) + { + foreach ( struct in s_array ) + { + if ( distancesquared( struct.origin, position ) < 1 ) + return struct; + } + } + } +} diff --git a/ZM/Core/common_scripts/utility.gsc b/ZM/Core/common_scripts/utility.gsc new file mode 100644 index 0000000..c1f3762 --- /dev/null +++ b/ZM/Core/common_scripts/utility.gsc @@ -0,0 +1,1640 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +init_session_mode_flags() +{ + level.gamemode_public_match = 0; + level.gamemode_private_match = 1; + level.gamemode_local_splitscreen = 2; + level.gamemode_wager_match = 3; + level.gamemode_theater = 5; + level.gamemode_league_match = 6; + level.gamemode_rts = 7; + level.language = getdvar( "language" ); +} + +empty( a, b, c, d, e ) +{ + +} + +add_to_array( array, item, allow_dupes ) +{ + if ( !isdefined( item ) ) + return array; + + if ( !isdefined( allow_dupes ) ) + allow_dupes = 1; + + if ( !isdefined( array ) ) + array[0] = item; + else if ( allow_dupes || !isinarray( array, item ) ) + array[array.size] = item; + + return array; +} + +array_copy( array ) +{ + a_copy = []; + + foreach ( elem in array ) + a_copy[a_copy.size] = elem; + + return a_copy; +} + +array_delete( array, is_struct ) +{ + foreach ( ent in array ) + { + if ( isdefined( is_struct ) && is_struct ) + { + ent structdelete(); + ent = undefined; + continue; + } + + if ( isdefined( ent ) ) + ent delete(); + } +} + +array_randomize( array ) +{ + for ( i = 0; i < array.size; i++ ) + { + j = randomint( array.size ); + temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + + return array; +} + +array_reverse( array ) +{ + array2 = []; + + for ( i = array.size - 1; i >= 0; i-- ) + array2[array2.size] = array[i]; + + return array2; +} + +array_exclude( array, arrayexclude ) +{ + newarray = array; + + if ( isarray( arrayexclude ) ) + { + for ( i = 0; i < arrayexclude.size; i++ ) + arrayremovevalue( newarray, arrayexclude[i] ); + } + else + arrayremovevalue( newarray, arrayexclude ); + + return newarray; +} + +array_notify( ents, notifier ) +{ + for ( i = 0; i < ents.size; i++ ) + ents[i] notify( notifier ); +} + +array_wait( array, msg, timeout ) +{ + keys = getarraykeys( array ); + structs = []; + + for ( i = 0; i < keys.size; i++ ) + { + key = keys[i]; + structs[key] = spawnstruct(); + structs[key]._array_wait = 1; + structs[key] thread array_waitlogic1( array[key], msg, timeout ); + } + + for ( i = 0; i < keys.size; i++ ) + { + key = keys[i]; + + if ( isdefined( array[key] ) && structs[key]._array_wait ) + structs[key] waittill( "_array_wait" ); + } +} + +array_wait_any( array, msg, timeout ) +{ + if ( array.size == 0 ) + return undefined; + + keys = getarraykeys( array ); + structs = []; + internal_msg = msg + "array_wait"; + + for ( i = 0; i < keys.size; i++ ) + { + key = keys[i]; + structs[key] = spawnstruct(); + structs[key]._array_wait = 1; + structs[key] thread array_waitlogic3( array[key], msg, internal_msg, timeout ); + } + + level waittill( internal_msg, ent ); + + return ent; +} + +array_waitlogic1( ent, msg, timeout ) +{ + self array_waitlogic2( ent, msg, timeout ); + self._array_wait = 0; + self notify( "_array_wait" ); +} + +array_waitlogic2( ent, msg, timeout ) +{ + ent endon( msg ); + ent endon( "death" ); + + if ( isdefined( timeout ) ) + wait( timeout ); + else + ent waittill( msg ); +} + +array_waitlogic3( ent, msg, internal_msg, timeout ) +{ + if ( msg != "death" ) + ent endon( "death" ); + + level endon( internal_msg ); + self array_waitlogic2( ent, msg, timeout ); + level notify( internal_msg, ent ); +} + +array_check_for_dupes( array, single ) +{ + for ( i = 0; i < array.size; i++ ) + { + if ( array[i] == single ) + return false; + } + + return true; +} + +array_swap( array, index1, index2 ) +{ + assert( index1 < array.size, "index1 to swap out of range" ); + assert( index2 < array.size, "index2 to swap out of range" ); + temp = array[index1]; + array[index1] = array[index2]; + array[index2] = temp; + return array; +} + +array_average( array ) +{ + assert( isarray( array ) ); + assert( array.size > 0 ); + total = 0; + + for ( i = 0; i < array.size; i++ ) + total += array[i]; + + return total / array.size; +} + +array_std_deviation( array, mean ) +{ + assert( isarray( array ) ); + assert( array.size > 0 ); + tmp = []; + + for ( i = 0; i < array.size; i++ ) + tmp[i] = ( array[i] - mean ) * ( array[i] - mean ); + + total = 0; + + for ( i = 0; i < tmp.size; i++ ) + total += tmp[i]; + + return sqrt( total / array.size ); +} + +random_normal_distribution( mean, std_deviation, lower_bound, upper_bound ) +{ + x1 = 0; + x2 = 0; + w = 1; + y1 = 0; + + while ( w >= 1 ) + { + x1 = 2 * randomfloatrange( 0, 1 ) - 1; + x2 = 2 * randomfloatrange( 0, 1 ) - 1; + w = x1 * x1 + x2 * x2; + } + + w = sqrt( -2.0 * log( w ) / w ); + y1 = x1 * w; + number = mean + y1 * std_deviation; + + if ( isdefined( lower_bound ) && number < lower_bound ) + number = lower_bound; + + if ( isdefined( upper_bound ) && number > upper_bound ) + number = upper_bound; + + return number; +} + +random( array ) +{ + keys = getarraykeys( array ); + return array[keys[randomint( keys.size )]]; +} + +get_players( str_team ) +{ + if ( isdefined( str_team ) ) + return getplayers( str_team ); + else + return getplayers(); +} + +is_prefix( msg, prefix ) +{ + if ( prefix.size > msg.size ) + return false; + + for ( i = 0; i < prefix.size; i++ ) + { + if ( msg[i] != prefix[i] ) + return false; + } + + return true; +} + +is_suffix( msg, suffix ) +{ + if ( suffix.size > msg.size ) + return false; + + for ( i = 0; i < suffix.size; i++ ) + { + if ( msg[msg.size - 1 - i] != suffix[suffix.size - 1 - i] ) + return false; + } + + return true; +} + +vector_compare( vec1, vec2 ) +{ + return abs( vec1[0] - vec2[0] ) < 0.001 && abs( vec1[1] - vec2[1] ) < 0.001 && abs( vec1[2] - vec2[2] ) < 0.001; +} + +draw_debug_line( start, end, timer ) +{ +/# + for ( i = 0; i < timer * 20; i++ ) + { + line( start, end, ( 1, 1, 0.5 ) ); + wait 0.05; + } +#/ +} + +waittillend( msg ) +{ + self waittillmatch( msg, "end" ); +} + +random_vector( max_length ) +{ + return ( randomfloatrange( -1 * max_length, max_length ), randomfloatrange( -1 * max_length, max_length ), randomfloatrange( -1 * max_length, max_length ) ); +} + +angle_dif( oldangle, newangle ) +{ + outvalue = ( oldangle - newangle ) % 360; + + if ( outvalue < 0 ) + outvalue += 360; + + if ( outvalue > 180 ) + outvalue = ( outvalue - 360 ) * -1; + + return outvalue; +} + +sign( x ) +{ + if ( x >= 0 ) + return 1; + + return -1; +} + +track( spot_to_track ) +{ + if ( isdefined( self.current_target ) ) + { + if ( spot_to_track == self.current_target ) + return; + } + + self.current_target = spot_to_track; +} + +clear_exception( type ) +{ + assert( isdefined( self.exception[type] ) ); + self.exception[type] = anim.defaultexception; +} + +set_exception( type, func ) +{ + assert( isdefined( self.exception[type] ) ); + self.exception[type] = func; +} + +set_all_exceptions( exceptionfunc ) +{ + keys = getarraykeys( self.exception ); + + for ( i = 0; i < keys.size; i++ ) + self.exception[keys[i]] = exceptionfunc; +} + +cointoss() +{ + return randomint( 100 ) >= 50; +} + +waittill_string( msg, ent ) +{ + if ( msg != "death" ) + self endon( "death" ); + + ent endon( "die" ); + + self waittill( msg ); + + ent notify( "returned", msg ); +} + +waittill_multiple( string1, string2, string3, string4, string5 ) +{ + self endon( "death" ); + ent = spawnstruct(); + ent.threads = 0; + + if ( isdefined( string1 ) ) + { + self thread waittill_string( string1, ent ); + ent.threads++; + } + + if ( isdefined( string2 ) ) + { + self thread waittill_string( string2, ent ); + ent.threads++; + } + + if ( isdefined( string3 ) ) + { + self thread waittill_string( string3, ent ); + ent.threads++; + } + + if ( isdefined( string4 ) ) + { + self thread waittill_string( string4, ent ); + ent.threads++; + } + + if ( isdefined( string5 ) ) + { + self thread waittill_string( string5, ent ); + ent.threads++; + } + + while ( ent.threads ) + { + ent waittill( "returned" ); + + ent.threads--; + } + + ent notify( "die" ); +} + +waittill_multiple_ents( ent1, string1, ent2, string2, ent3, string3, ent4, string4 ) +{ + self endon( "death" ); + ent = spawnstruct(); + ent.threads = 0; + + if ( isdefined( ent1 ) ) + { + assert( isdefined( string1 ) ); + ent1 thread waittill_string( string1, ent ); + ent.threads++; + } + + if ( isdefined( ent2 ) ) + { + assert( isdefined( string2 ) ); + ent2 thread waittill_string( string2, ent ); + ent.threads++; + } + + if ( isdefined( ent3 ) ) + { + assert( isdefined( string3 ) ); + ent3 thread waittill_string( string3, ent ); + ent.threads++; + } + + if ( isdefined( ent4 ) ) + { + assert( isdefined( string4 ) ); + ent4 thread waittill_string( string4, ent ); + ent.threads++; + } + + while ( ent.threads ) + { + ent waittill( "returned" ); + + ent.threads--; + } + + ent notify( "die" ); +} + +waittill_any_return( string1, string2, string3, string4, string5, string6, string7 ) +{ + if ( ( !isdefined( string1 ) || string1 != "death" ) && ( !isdefined( string2 ) || string2 != "death" ) && ( !isdefined( string3 ) || string3 != "death" ) && ( !isdefined( string4 ) || string4 != "death" ) && ( !isdefined( string5 ) || string5 != "death" ) && ( !isdefined( string6 ) || string6 != "death" ) && ( !isdefined( string7 ) || string7 != "death" ) ) + self endon( "death" ); + + ent = spawnstruct(); + + if ( isdefined( string1 ) ) + self thread waittill_string( string1, ent ); + + if ( isdefined( string2 ) ) + self thread waittill_string( string2, ent ); + + if ( isdefined( string3 ) ) + self thread waittill_string( string3, ent ); + + if ( isdefined( string4 ) ) + self thread waittill_string( string4, ent ); + + if ( isdefined( string5 ) ) + self thread waittill_string( string5, ent ); + + if ( isdefined( string6 ) ) + self thread waittill_string( string6, ent ); + + if ( isdefined( string7 ) ) + self thread waittill_string( string7, ent ); + + ent waittill( "returned", msg ); + + ent notify( "die" ); + return msg; +} + +waittill_any_array_return( a_notifies ) +{ + if ( isinarray( a_notifies, "death" ) ) + self endon( "death" ); + + s_tracker = spawnstruct(); + + foreach ( str_notify in a_notifies ) + { + if ( isdefined( str_notify ) ) + self thread waittill_string( str_notify, s_tracker ); + } + + s_tracker waittill( "returned", msg ); + + s_tracker notify( "die" ); + return msg; +} + +waittill_any( str_notify1, str_notify2, str_notify3, str_notify4, str_notify5 ) +{ + assert( isdefined( str_notify1 ) ); + waittill_any_array( array( str_notify1, str_notify2, str_notify3, str_notify4, str_notify5 ) ); +} + +waittill_any_array( a_notifies ) +{ + assert( isdefined( a_notifies[0] ), "At least the first element has to be defined for waittill_any_array." ); + + for ( i = 1; i < a_notifies.size; i++ ) + { + if ( isdefined( a_notifies[i] ) ) + self endon( a_notifies[i] ); + } + + self waittill( a_notifies[0] ); +} + +waittill_any_timeout( n_timeout, string1, string2, string3, string4, string5 ) +{ + if ( ( !isdefined( string1 ) || string1 != "death" ) && ( !isdefined( string2 ) || string2 != "death" ) && ( !isdefined( string3 ) || string3 != "death" ) && ( !isdefined( string4 ) || string4 != "death" ) && ( !isdefined( string5 ) || string5 != "death" ) ) + self endon( "death" ); + + ent = spawnstruct(); + + if ( isdefined( string1 ) ) + self thread waittill_string( string1, ent ); + + if ( isdefined( string2 ) ) + self thread waittill_string( string2, ent ); + + if ( isdefined( string3 ) ) + self thread waittill_string( string3, ent ); + + if ( isdefined( string4 ) ) + self thread waittill_string( string4, ent ); + + if ( isdefined( string5 ) ) + self thread waittill_string( string5, ent ); + + ent thread _timeout( n_timeout ); + + ent waittill( "returned", msg ); + + ent notify( "die" ); + return msg; +} + +_timeout( delay ) +{ + self endon( "die" ); + wait( delay ); + self notify( "returned", "timeout" ); +} + +waittill_any_ents( ent1, string1, ent2, string2, ent3, string3, ent4, string4, ent5, string5, ent6, string6, ent7, string7 ) +{ + assert( isdefined( ent1 ) ); + assert( isdefined( string1 ) ); + + if ( isdefined( ent2 ) && isdefined( string2 ) ) + ent2 endon( string2 ); + + if ( isdefined( ent3 ) && isdefined( string3 ) ) + ent3 endon( string3 ); + + if ( isdefined( ent4 ) && isdefined( string4 ) ) + ent4 endon( string4 ); + + if ( isdefined( ent5 ) && isdefined( string5 ) ) + ent5 endon( string5 ); + + if ( isdefined( ent6 ) && isdefined( string6 ) ) + ent6 endon( string6 ); + + if ( isdefined( ent7 ) && isdefined( string7 ) ) + ent7 endon( string7 ); + + ent1 waittill( string1 ); +} + +waittill_any_ents_two( ent1, string1, ent2, string2 ) +{ + assert( isdefined( ent1 ) ); + assert( isdefined( string1 ) ); + + if ( isdefined( ent2 ) && isdefined( string2 ) ) + ent2 endon( string2 ); + + ent1 waittill( string1 ); +} + +waittill_flag_exists( msg ) +{ + while ( !flag_exists( msg ) ) + { + waittillframeend; + + if ( flag_exists( msg ) ) + break; + + wait 0.05; + } +} + +isflashed() +{ + if ( !isdefined( self.flashendtime ) ) + return 0; + + return gettime() < self.flashendtime; +} + +isstunned() +{ + if ( !isdefined( self.flashendtime ) ) + return 0; + + return gettime() < self.flashendtime; +} + +flag( flagname ) +{ + assert( isdefined( flagname ), "Tried to check flag but the flag was not defined." ); + assert( isdefined( level.flag[flagname] ), "Tried to check flag " + flagname + " but the flag was not initialized." ); + + if ( !level.flag[flagname] ) + return false; + + return true; +} + +flag_delete( flagname ) +{ + if ( isdefined( level.flag[flagname] ) ) + level.flag[flagname] = undefined; + else + { +/# + println( "flag_delete() called on flag that does not exist: " + flagname ); +#/ + } +} + +flag_init( flagname, val, b_is_trigger = 0 ) +{ + if ( !isdefined( level.flag ) ) + level.flag = []; + + if ( !isdefined( level.sp_stat_tracking_func ) ) + level.sp_stat_tracking_func = ::empty; + + if ( !isdefined( level.first_frame ) ) + assert( !isdefined( level.flag[flagname] ), "Attempt to reinitialize existing flag: " + flagname ); + + if ( isdefined( val ) && val ) + level.flag[flagname] = 1; + else + level.flag[flagname] = 0; + + if ( b_is_trigger ) + { + if ( !isdefined( level.trigger_flags ) ) + { + init_trigger_flags(); + level.trigger_flags[flagname] = []; + } + else if ( !isdefined( level.trigger_flags[flagname] ) ) + level.trigger_flags[flagname] = []; + } + + if ( is_suffix( flagname, "aa_" ) ) + thread [[ level.sp_stat_tracking_func ]]( flagname ); +} + +flag_set( flagname ) +{ + assert( isdefined( level.flag[flagname] ), "Attempt to set a flag before calling flag_init: " + flagname ); + level.flag[flagname] = 1; + level notify( flagname ); + set_trigger_flag_permissions( flagname ); +} + +flag_set_for_time( n_time, str_flag ) +{ + level notify( "set_flag_for_time:" + str_flag ); + flag_set( str_flag ); + level endon( "set_flag_for_time:" + str_flag ); + wait( n_time ); + flag_clear( str_flag ); +} + +flag_toggle( flagname ) +{ + if ( flag( flagname ) ) + flag_clear( flagname ); + else + flag_set( flagname ); +} + +flag_wait( flagname ) +{ + level waittill_flag_exists( flagname ); + + while ( !level.flag[flagname] ) + level waittill( flagname ); +} + +flag_wait_any( str_flag1, str_flag2, str_flag3, str_flag4, str_flag5 ) +{ + level flag_wait_any_array( array( str_flag1, str_flag2, str_flag3, str_flag4, str_flag5 ) ); +} + +flag_wait_any_array( a_flags ) +{ + while ( true ) + { + for ( i = 0; i < a_flags.size; i++ ) + { + if ( flag( a_flags[i] ) ) + return a_flags[i]; + } + + level waittill_any_array( a_flags ); + } +} + +flag_clear( flagname ) +{ + assert( isdefined( level.flag[flagname] ), "Attempt to set a flag before calling flag_init: " + flagname ); + + if ( level.flag[flagname] ) + { + level.flag[flagname] = 0; + level notify( flagname ); + set_trigger_flag_permissions( flagname ); + } +} + +flag_waitopen( flagname ) +{ + while ( level.flag[flagname] ) + level waittill( flagname ); +} + +flag_waitopen_array( a_flags ) +{ + foreach ( str_flag in a_flags ) + { + if ( flag( str_flag ) ) + { + flag_waitopen( str_flag ); + continue; + } + } +} + +flag_exists( flagname ) +{ + if ( self == level ) + { + if ( !isdefined( level.flag ) ) + return false; + + if ( isdefined( level.flag[flagname] ) ) + return true; + } + else + { + if ( !isdefined( self.ent_flag ) ) + return false; + + if ( isdefined( self.ent_flag[flagname] ) ) + return true; + } + + return false; +} + +script_gen_dump_addline( string = "nowrite", signature ) +{ + if ( !isdefined( level._loadstarted ) ) + { + if ( !isdefined( level.script_gen_dump_preload ) ) + level.script_gen_dump_preload = []; + + struct = spawnstruct(); + struct.string = string; + struct.signature = signature; + level.script_gen_dump_preload[level.script_gen_dump_preload.size] = struct; + return; + } + + if ( !isdefined( level.script_gen_dump[signature] ) ) + level.script_gen_dump_reasons[level.script_gen_dump_reasons.size] = "Added: " + string; + + level.script_gen_dump[signature] = string; + level.script_gen_dump2[signature] = string; +} + +array_func( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ) +{ + if ( !isdefined( entities ) ) + return; + + if ( isarray( entities ) ) + { + if ( entities.size ) + { + keys = getarraykeys( entities ); + + for ( i = 0; i < keys.size; i++ ) + single_func( entities[keys[i]], func, arg1, arg2, arg3, arg4, arg5, arg6 ); + } + } + else + single_func( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ); +} + +single_func( entity = level, func, arg1, arg2, arg3, arg4, arg5, arg6 ) +{ + if ( isdefined( arg6 ) ) + return entity [[ func ]]( arg1, arg2, arg3, arg4, arg5, arg6 ); + else if ( isdefined( arg5 ) ) + return entity [[ func ]]( arg1, arg2, arg3, arg4, arg5 ); + else if ( isdefined( arg4 ) ) + return entity [[ func ]]( arg1, arg2, arg3, arg4 ); + else if ( isdefined( arg3 ) ) + return entity [[ func ]]( arg1, arg2, arg3 ); + else if ( isdefined( arg2 ) ) + return entity [[ func ]]( arg1, arg2 ); + else if ( isdefined( arg1 ) ) + return entity [[ func ]]( arg1 ); + else + return entity [[ func ]](); +} + +new_func( func, arg1, arg2, arg3, arg4, arg5, arg6 ) +{ + s_func = spawnstruct(); + s_func.func = func; + s_func.arg1 = arg1; + s_func.arg2 = arg2; + s_func.arg3 = arg3; + s_func.arg4 = arg4; + s_func.arg5 = arg5; + s_func.arg6 = arg6; + return s_func; +} + +call_func( s_func ) +{ + return single_func( self, s_func.func, s_func.arg1, s_func.arg2, s_func.arg3, s_func.arg4, s_func.arg5, s_func.arg6 ); +} + +array_thread( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ) +{ + assert( isdefined( entities ), "Undefined entity array passed to common_scriptsutility::array_thread" ); + assert( isdefined( func ), "Undefined function passed to common_scriptsutility::array_thread" ); + + if ( isarray( entities ) ) + { + if ( isdefined( arg6 ) ) + { + foreach ( ent in entities ) + ent thread [[ func ]]( arg1, arg2, arg3, arg4, arg5, arg6 ); + } + else if ( isdefined( arg5 ) ) + { + foreach ( ent in entities ) + ent thread [[ func ]]( arg1, arg2, arg3, arg4, arg5 ); + } + else if ( isdefined( arg4 ) ) + { + foreach ( ent in entities ) + ent thread [[ func ]]( arg1, arg2, arg3, arg4 ); + } + else if ( isdefined( arg3 ) ) + { + foreach ( ent in entities ) + ent thread [[ func ]]( arg1, arg2, arg3 ); + } + else if ( isdefined( arg2 ) ) + { + foreach ( ent in entities ) + ent thread [[ func ]]( arg1, arg2 ); + } + else if ( isdefined( arg1 ) ) + { + foreach ( ent in entities ) + ent thread [[ func ]]( arg1 ); + } + else + { + foreach ( ent in entities ) + ent thread [[ func ]](); + } + } + else + single_thread( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ); +} + +array_ent_thread( entities, func, arg1, arg2, arg3, arg4, arg5 ) +{ + assert( isdefined( entities ), "Undefined entity array passed to common_scriptsutility::array_ent_thread" ); + assert( isdefined( func ), "Undefined function passed to common_scriptsutility::array_ent_thread" ); + + if ( isarray( entities ) ) + { + if ( entities.size ) + { + keys = getarraykeys( entities ); + + for ( i = 0; i < keys.size; i++ ) + single_thread( self, func, entities[keys[i]], arg1, arg2, arg3, arg4, arg5 ); + } + } + else + single_thread( self, func, entities, arg1, arg2, arg3, arg4, arg5 ); +} + +single_thread( entity, func, arg1, arg2, arg3, arg4, arg5, arg6 ) +{ + assert( isdefined( entity ), "Undefined entity passed to common_scriptsutility::single_thread()" ); + + if ( isdefined( arg6 ) ) + entity thread [[ func ]]( arg1, arg2, arg3, arg4, arg5, arg6 ); + else if ( isdefined( arg5 ) ) + entity thread [[ func ]]( arg1, arg2, arg3, arg4, arg5 ); + else if ( isdefined( arg4 ) ) + entity thread [[ func ]]( arg1, arg2, arg3, arg4 ); + else if ( isdefined( arg3 ) ) + entity thread [[ func ]]( arg1, arg2, arg3 ); + else if ( isdefined( arg2 ) ) + entity thread [[ func ]]( arg1, arg2 ); + else if ( isdefined( arg1 ) ) + entity thread [[ func ]]( arg1 ); + else + entity thread [[ func ]](); +} + +remove_undefined_from_array( array ) +{ + newarray = []; + + for ( i = 0; i < array.size; i++ ) + { + if ( !isdefined( array[i] ) ) + continue; + + newarray[newarray.size] = array[i]; + } + + return newarray; +} + +trigger_on( name, type ) +{ + if ( isdefined( name ) ) + { + if ( !isdefined( type ) ) + type = "targetname"; + + ents = getentarray( name, type ); + array_thread( ents, ::trigger_on_proc ); + } + else + self trigger_on_proc(); +} + +trigger_on_proc() +{ + if ( isdefined( self.realorigin ) ) + self.origin = self.realorigin; + + self.trigger_off = undefined; +} + +trigger_off( name, type ) +{ + if ( isdefined( name ) ) + { + if ( !isdefined( type ) ) + type = "targetname"; + + ents = getentarray( name, type ); + array_thread( ents, ::trigger_off_proc ); + } + else + self trigger_off_proc(); +} + +trigger_off_proc() +{ + if ( !isdefined( self.trigger_off ) || !self.trigger_off ) + { + self.realorigin = self.origin; + self.origin += vectorscale( ( 0, 0, -1 ), 10000.0 ); + self.trigger_off = 1; + } +} + +trigger_wait( str_name, str_key = "targetname", e_entity ) +{ + if ( isdefined( str_name ) ) + { + triggers = getentarray( str_name, str_key ); + assert( triggers.size > 0, "trigger not found: " + str_name + " key: " + str_key ); + + if ( triggers.size == 1 ) + { + trigger_hit = triggers[0]; + trigger_hit _trigger_wait( e_entity ); + } + else + { + s_tracker = spawnstruct(); + array_thread( triggers, ::_trigger_wait_think, s_tracker, e_entity ); + + s_tracker waittill( "trigger", e_other, trigger_hit ); + + trigger_hit.who = e_other; + } + + level notify( str_name, trigger_hit.who ); + return trigger_hit; + } + else + return _trigger_wait( e_entity ); +} + +_trigger_wait( e_entity ) +{ + do + { + if ( is_look_trigger( self ) ) + { + self waittill( "trigger_look", e_other ); + + continue; + } + + self waittill( "trigger", e_other ); + } + while ( isdefined( e_entity ) && e_other != e_entity ); + + self.who = e_other; + return self; +} + +_trigger_wait_think( s_tracker, e_entity ) +{ + self endon( "death" ); + s_tracker endon( "trigger" ); + e_other = _trigger_wait( e_entity ); + s_tracker notify( "trigger", e_other, self ); +} + +trigger_use( str_name, str_key = "targetname", ent = get_players()[0], b_assert = 1 ) +{ + if ( isdefined( str_name ) ) + { + e_trig = getent( str_name, str_key ); + + if ( !isdefined( e_trig ) ) + { + if ( b_assert ) + { +/# + assertmsg( "trigger not found: " + str_name + " key: " + str_key ); +#/ + } + + return; + } + } + else + { + e_trig = self; + str_name = self.targetname; + } + + e_trig useby( ent ); + level notify( str_name, ent ); + + if ( is_look_trigger( e_trig ) ) + e_trig notify( "trigger_look" ); + + return e_trig; +} + +set_trigger_flag_permissions( msg ) +{ + if ( !isdefined( level.trigger_flags ) || !isdefined( level.trigger_flags[msg] ) ) + return; + + level.trigger_flags[msg] = remove_undefined_from_array( level.trigger_flags[msg] ); + array_thread( level.trigger_flags[msg], ::update_trigger_based_on_flags ); +} + +update_trigger_based_on_flags() +{ + true_on = 1; + + if ( isdefined( self.script_flag_true ) ) + { + true_on = 0; + tokens = create_flags_and_return_tokens( self.script_flag_true ); + + for ( i = 0; i < tokens.size; i++ ) + { + if ( flag( tokens[i] ) ) + { + true_on = 1; + break; + } + } + } + + false_on = 1; + + if ( isdefined( self.script_flag_false ) ) + { + tokens = create_flags_and_return_tokens( self.script_flag_false ); + + for ( i = 0; i < tokens.size; i++ ) + { + if ( flag( tokens[i] ) ) + { + false_on = 0; + break; + } + } + } + + [[ level.trigger_func[true_on && false_on] ]](); +} + +create_flags_and_return_tokens( flags ) +{ + tokens = strtok( flags, " " ); + + for ( i = 0; i < tokens.size; i++ ) + { + if ( !isdefined( level.flag[tokens[i]] ) ) + flag_init( tokens[i], undefined, 1 ); + } + + return tokens; +} + +init_trigger_flags() +{ + level.trigger_flags = []; + level.trigger_func[1] = ::trigger_on; + level.trigger_func[0] = ::trigger_off; +} + +is_look_trigger( trig ) +{ + return isdefined( trig ) ? trig has_spawnflag( 256 ) && !( !isdefined( trig.classname ) && !isdefined( "trigger_damage" ) || isdefined( trig.classname ) && isdefined( "trigger_damage" ) && trig.classname == "trigger_damage" ) : 0; +} + +is_trigger_once( trig ) +{ + return isdefined( trig ) ? trig has_spawnflag( 1024 ) || !isdefined( self.classname ) && !isdefined( "trigger_once" ) || isdefined( self.classname ) && isdefined( "trigger_once" ) && self.classname == "trigger_once" : 0; +} + +getstruct( name, type = "targetname" ) +{ + assert( isdefined( level.struct_class_names ), "Tried to getstruct before the structs were init" ); + array = level.struct_class_names[type][name]; + + if ( !isdefined( array ) ) + return undefined; + + if ( array.size > 1 ) + { +/# + assertmsg( "getstruct used for more than one struct of type " + type + " called " + name + "." ); +#/ + return undefined; + } + + return array[0]; +} + +getstructarray( name, type = "targetname" ) +{ + assert( isdefined( level.struct_class_names ), "Tried to getstruct before the structs were init" ); + array = level.struct_class_names[type][name]; + + if ( !isdefined( array ) ) + return []; + + return array; +} + +structdelete() +{ + if ( isdefined( self.target ) && isdefined( level.struct_class_names["target"][self.target] ) ) + level.struct_class_names["target"][self.target] = undefined; + + if ( isdefined( self.targetname ) && isdefined( level.struct_class_names["targetname"][self.targetname] ) ) + level.struct_class_names["targetname"][self.targetname] = undefined; + + if ( isdefined( self.script_noteworthy ) && isdefined( level.struct_class_names["script_noteworthy"][self.script_noteworthy] ) ) + level.struct_class_names["script_noteworthy"][self.script_noteworthy] = undefined; + + if ( isdefined( self.script_linkname ) && isdefined( level.struct_class_names["script_linkname"][self.script_linkname] ) ) + level.struct_class_names["script_linkname"][self.script_linkname] = undefined; +} + +struct_class_init() +{ + assert( !isdefined( level.struct_class_names ), "level.struct_class_names is being initialized in the wrong place! It shouldn't be initialized yet." ); + level.struct_class_names = []; + level.struct_class_names["target"] = []; + level.struct_class_names["targetname"] = []; + level.struct_class_names["script_noteworthy"] = []; + level.struct_class_names["script_linkname"] = []; + level.struct_class_names["script_unitrigger_type"] = []; + + foreach ( s_struct in level.struct ) + { + if ( isdefined( s_struct.targetname ) ) + { + if ( !isdefined( level.struct_class_names["targetname"][s_struct.targetname] ) ) + level.struct_class_names["targetname"][s_struct.targetname] = []; + + size = level.struct_class_names["targetname"][s_struct.targetname].size; + level.struct_class_names["targetname"][s_struct.targetname][size] = s_struct; + } + + if ( isdefined( s_struct.target ) ) + { + if ( !isdefined( level.struct_class_names["target"][s_struct.target] ) ) + level.struct_class_names["target"][s_struct.target] = []; + + size = level.struct_class_names["target"][s_struct.target].size; + level.struct_class_names["target"][s_struct.target][size] = s_struct; + } + + if ( isdefined( s_struct.script_noteworthy ) ) + { + if ( !isdefined( level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy] ) ) + level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy] = []; + + size = level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy].size; + level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy][size] = s_struct; + } + + if ( isdefined( s_struct.script_linkname ) ) + { + assert( !isdefined( level.struct_class_names["script_linkname"][s_struct.script_linkname] ), "Two structs have the same linkname" ); + level.struct_class_names["script_linkname"][s_struct.script_linkname][0] = s_struct; + } + + if ( isdefined( s_struct.script_unitrigger_type ) ) + { + if ( !isdefined( level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type] ) ) + level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type] = []; + + size = level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type].size; + level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type][size] = s_struct; + } + } +} + +fileprint_start( file ) +{ +/# + filename = file; + file = openfile( filename, "write" ); + level.fileprint = file; + level.fileprintlinecount = 0; + level.fileprint_filename = filename; +#/ +} + +fileprint_map_start( file ) +{ +/# + file = "map_source/" + file + ".map"; + fileprint_start( file ); + level.fileprint_mapentcount = 0; + fileprint_map_header( 1 ); +#/ +} + +fileprint_chk( file, str ) +{ +/# + level.fileprintlinecount++; + + if ( level.fileprintlinecount > 400 ) + { + wait 0.05; + level.fileprintlinecount++; + level.fileprintlinecount = 0; + } + + fprintln( file, str ); +#/ +} + +fileprint_map_header( binclude_blank_worldspawn = 0 ) +{ + assert( isdefined( level.fileprint ) ); +/# + fileprint_chk( level.fileprint, "iwmap 4" ); + fileprint_chk( level.fileprint, "\"000_Global\" flags active" ); + fileprint_chk( level.fileprint, "\"The Map\" flags" ); + + if ( !binclude_blank_worldspawn ) + return; + + fileprint_map_entity_start(); + fileprint_map_keypairprint( "classname", "worldspawn" ); + fileprint_map_entity_end(); +#/ +} + +fileprint_map_keypairprint( key1, key2 ) +{ +/# + assert( isdefined( level.fileprint ) ); + fileprint_chk( level.fileprint, "\"" + key1 + "\" \"" + key2 + "\"" ); +#/ +} + +fileprint_map_entity_start() +{ +/# + assert( !isdefined( level.fileprint_entitystart ) ); + level.fileprint_entitystart = 1; + assert( isdefined( level.fileprint ) ); + fileprint_chk( level.fileprint, "// entity " + level.fileprint_mapentcount ); + fileprint_chk( level.fileprint, "{" ); + level.fileprint_mapentcount++; +#/ +} + +fileprint_map_entity_end() +{ +/# + assert( isdefined( level.fileprint_entitystart ) ); + assert( isdefined( level.fileprint ) ); + level.fileprint_entitystart = undefined; + fileprint_chk( level.fileprint, "}" ); +#/ +} + +fileprint_end() +{ +/# + assert( !isdefined( level.fileprint_entitystart ) ); + saved = closefile( level.fileprint ); + + if ( saved != 1 ) + { + println( "-----------------------------------" ); + println( " " ); + println( "file write failure" ); + println( "file with name: " + level.fileprint_filename ); + println( "make sure you checkout the file you are trying to save" ); + println( "note: USE P4 Search to find the file and check that one out" ); + println( " Do not checkin files in from the xenonoutput folder, " ); + println( " this is junctioned to the proper directory where you need to go" ); + println( "junctions looks like this" ); + println( " " ); + println( "..\\xenonOutput\\scriptdata\\createfx ..\\share\\raw\\maps\\createfx" ); + println( "..\\xenonOutput\\scriptdata\\createart ..\\share\\raw\\maps\\createart" ); + println( "..\\xenonOutput\\scriptdata\\vision ..\\share\\raw\\vision" ); + println( "..\\xenonOutput\\scriptdata\\scriptgen ..\\share\\raw\\maps\\scriptgen" ); + println( "..\\xenonOutput\\scriptdata\\zone_source ..\\xenon\\zone_source" ); + println( "..\\xenonOutput\\accuracy ..\\share\\raw\\accuracy" ); + println( "..\\xenonOutput\\scriptdata\\map_source ..\\map_source\\xenon_export" ); + println( " " ); + println( "-----------------------------------" ); + println( "File not saved( see console.log for info ) " ); + } + + level.fileprint = undefined; + level.fileprint_filename = undefined; +#/ +} + +fileprint_radiant_vec( vector ) +{ +/# + string = "" + vector[0] + " " + vector[1] + " " + vector[2] + ""; + return string; +#/ +} + +is_mature() +{ + if ( level.onlinegame ) + return 1; + + return getlocalprofileint( "cg_mature" ); +} + +is_german_build() +{ + if ( level.language == "german" ) + return true; + + return false; +} + +is_gib_restricted_build() +{ + if ( getdvar( "language" ) == "japanese" ) + return true; + + return false; +} + +is_true( check ) +{ + return isdefined( check ) && check; +} + +is_false( check ) +{ + return isdefined( check ) && !check; +} + +has_spawnflag( spawnflags ) +{ + if ( isdefined( self.spawnflags ) ) + return ( self.spawnflags & spawnflags ) == spawnflags; + + return 0; +} + +clamp( val, val_min, val_max ) +{ + if ( val < val_min ) + val = val_min; + else if ( val > val_max ) + val = val_max; + + return val; +} + +linear_map( num, min_a, max_a, min_b, max_b ) +{ + return clamp( ( num - min_a ) / ( max_a - min_a ) * ( max_b - min_b ) + min_b, min_b, max_b ); +} + +lag( desired, curr, k, dt ) +{ + r = 0.0; + + if ( k * dt >= 1.0 || k <= 0.0 ) + r = desired; + else + { + err = desired - curr; + r = curr + k * err * dt; + } + + return r; +} + +death_notify_wrapper( attacker, damagetype ) +{ + level notify( "face", "death", self ); + self notify( "death", attacker, damagetype ); +} + +damage_notify_wrapper( damage, attacker, direction_vec, point, type, modelname, tagname, partname, idflags ) +{ + level notify( "face", "damage", self ); + self notify( "damage", damage, attacker, direction_vec, point, type, modelname, tagname, partname, idflags ); +} + +explode_notify_wrapper() +{ + level notify( "face", "explode", self ); + self notify( "explode" ); +} + +alert_notify_wrapper() +{ + level notify( "face", "alert", self ); + self notify( "alert" ); +} + +shoot_notify_wrapper() +{ + level notify( "face", "shoot", self ); + self notify( "shoot" ); +} + +melee_notify_wrapper() +{ + level notify( "face", "melee", self ); + self notify( "melee" ); +} + +isusabilityenabled() +{ + return !self.disabledusability; +} + +_disableusability() +{ + self.disabledusability++; + self disableusability(); +} + +_enableusability() +{ + self.disabledusability--; + assert( self.disabledusability >= 0 ); + + if ( !self.disabledusability ) + self enableusability(); +} + +resetusability() +{ + self.disabledusability = 0; + self enableusability(); +} + +_disableweapon() +{ + if ( !isdefined( self.disabledweapon ) ) + self.disabledweapon = 0; + + self.disabledweapon++; + self disableweapons(); +} + +_enableweapon() +{ + self.disabledweapon--; + assert( self.disabledweapon >= 0 ); + + if ( !self.disabledweapon ) + self enableweapons(); +} + +isweaponenabled() +{ + return !self.disabledweapon; +} + +delay_thread( timer, func, param1, param2, param3, param4, param5, param6 ) +{ + self thread _delay_thread_proc( func, timer, param1, param2, param3, param4, param5, param6 ); +} + +_delay_thread_proc( func, timer, param1, param2, param3, param4, param5, param6 ) +{ + self endon( "death" ); + self endon( "disconnect" ); + wait( timer ); + single_thread( self, func, param1, param2, param3, param4, param5, param6 ); +} + +delay_notify( str_notify, n_delay, str_endon ) +{ + assert( isdefined( str_notify ) ); + assert( isdefined( n_delay ) ); + self thread _delay_notify_proc( str_notify, n_delay, str_endon ); +} + +_delay_notify_proc( str_notify, n_delay, str_endon ) +{ + self endon( "death" ); + + if ( isdefined( str_endon ) ) + self endon( str_endon ); + + if ( n_delay > 0 ) + wait( n_delay ); + + self notify( str_notify ); +} + +notify_delay_with_ender( snotifystring, fdelay, ender ) +{ + if ( isdefined( ender ) ) + level endon( ender ); + + assert( isdefined( self ) ); + assert( isdefined( snotifystring ) ); + assert( isdefined( fdelay ) ); + self endon( "death" ); + + if ( fdelay > 0 ) + wait( fdelay ); + + if ( !isdefined( self ) ) + return; + + self notify( snotifystring ); +} diff --git a/ZM/Core/maps/mp/_art.gsc b/ZM/Core/maps/mp/_art.gsc new file mode 100644 index 0000000..41f00e2 --- /dev/null +++ b/ZM/Core/maps/mp/_art.gsc @@ -0,0 +1,473 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; + +main() +{ +/# + if ( getdvar( "scr_art_tweak" ) == "" || getdvar( "scr_art_tweak" ) == "0" ) + setdvar( "scr_art_tweak", 0 ); + + if ( getdvar( "scr_dof_enable" ) == "" ) + setdvar( "scr_dof_enable", "1" ); + + if ( getdvar( "scr_cinematic_autofocus" ) == "" ) + setdvar( "scr_cinematic_autofocus", "1" ); + + if ( getdvar( "scr_art_visionfile" ) == "" && isdefined( level.script ) ) + setdvar( "scr_art_visionfile", level.script ); + + if ( getdvar( "debug_reflection" ) == "" ) + setdvar( "debug_reflection", "0" ); + + if ( getdvar( "debug_reflection_matte" ) == "" ) + setdvar( "debug_reflection_matte", "0" ); + + if ( getdvar( "debug_color_pallete" ) == "" ) + setdvar( "debug_color_pallete", "0" ); + + precachemodel( "test_sphere_lambert" ); + precachemodel( "test_macbeth_chart" ); + precachemodel( "test_macbeth_chart_unlit" ); + precachemodel( "test_sphere_silver" ); + level thread debug_reflection(); + level thread debug_reflection_matte(); + level thread debug_color_pallete(); +#/ + if ( !isdefined( level.dofdefault ) ) + { + level.dofdefault["nearStart"] = 0; + level.dofdefault["nearEnd"] = 1; + level.dofdefault["farStart"] = 8000; + level.dofdefault["farEnd"] = 10000; + level.dofdefault["nearBlur"] = 6; + level.dofdefault["farBlur"] = 0; + } + + level.curdof = ( level.dofdefault["farStart"] - level.dofdefault["nearEnd"] ) / 2; +/# + thread tweakart(); +#/ + if ( !isdefined( level.script ) ) + level.script = tolower( getdvar( "mapname" ) ); +} + +artfxprintln( file, string ) +{ +/# + if ( file == -1 ) + return; + + fprintln( file, string ); +#/ +} + +strtok_loc( string, par1 ) +{ + stringlist = []; + indexstring = ""; + + for ( i = 0; i < string.size; i++ ) + { + if ( string[i] == " " ) + { + stringlist[stringlist.size] = indexstring; + indexstring = ""; + continue; + } + + indexstring += string[i]; + } + + if ( indexstring.size ) + stringlist[stringlist.size] = indexstring; + + return stringlist; +} + +setfogsliders() +{ + fogall = strtok_loc( getdvar( "g_fogColorReadOnly" ), " " ); + red = fogall[0]; + green = fogall[1]; + blue = fogall[2]; + halfplane = getdvar( "g_fogHalfDistReadOnly" ); + nearplane = getdvar( "g_fogStartDistReadOnly" ); + + if ( !isdefined( red ) || !isdefined( green ) || !isdefined( blue ) || !isdefined( halfplane ) ) + { + red = 1; + green = 1; + blue = 1; + halfplane = 10000001; + nearplane = 10000000; + } + + setdvar( "scr_fog_exp_halfplane", halfplane ); + setdvar( "scr_fog_nearplane", nearplane ); + setdvar( "scr_fog_color", red + " " + green + " " + blue ); +} + +tweakart() +{ +/# + if ( !isdefined( level.tweakfile ) ) + level.tweakfile = 0; + + if ( getdvar( "scr_fog_baseheight" ) == "" ) + { + setdvar( "scr_fog_exp_halfplane", "500" ); + setdvar( "scr_fog_exp_halfheight", "500" ); + setdvar( "scr_fog_nearplane", "0" ); + setdvar( "scr_fog_baseheight", "0" ); + } + + setdvar( "scr_fog_fraction", "1.0" ); + setdvar( "scr_art_dump", "0" ); + setdvar( "scr_art_sun_fog_dir_set", "0" ); + setdvar( "scr_dof_nearStart", level.dofdefault["nearStart"] ); + setdvar( "scr_dof_nearEnd", level.dofdefault["nearEnd"] ); + setdvar( "scr_dof_farStart", level.dofdefault["farStart"] ); + setdvar( "scr_dof_farEnd", level.dofdefault["farEnd"] ); + setdvar( "scr_dof_nearBlur", level.dofdefault["nearBlur"] ); + setdvar( "scr_dof_farBlur", level.dofdefault["farBlur"] ); + file = undefined; + filename = undefined; + tweak_toggle = 1; + + for (;;) + { + while ( getdvarint( "scr_art_tweak" ) == 0 ) + { + tweak_toggle = 1; + wait 0.05; + } + + if ( tweak_toggle ) + { + tweak_toggle = 0; + fogsettings = getfogsettings(); + setdvar( "scr_fog_nearplane", fogsettings[0] ); + setdvar( "scr_fog_exp_halfplane", fogsettings[1] ); + setdvar( "scr_fog_exp_halfheight", fogsettings[3] ); + setdvar( "scr_fog_baseheight", fogsettings[2] ); + setdvar( "scr_fog_color", fogsettings[4] + " " + fogsettings[5] + " " + fogsettings[6] ); + setdvar( "scr_fog_color_scale", fogsettings[7] ); + setdvar( "scr_sun_fog_color", fogsettings[8] + " " + fogsettings[9] + " " + fogsettings[10] ); + level.fogsundir = []; + level.fogsundir[0] = fogsettings[11]; + level.fogsundir[1] = fogsettings[12]; + level.fogsundir[2] = fogsettings[13]; + setdvar( "scr_sun_fog_start_angle", fogsettings[14] ); + setdvar( "scr_sun_fog_end_angle", fogsettings[15] ); + setdvar( "scr_fog_max_opacity", fogsettings[16] ); + } + + level.fogexphalfplane = getdvarfloat( "scr_fog_exp_halfplane" ); + level.fogexphalfheight = getdvarfloat( "scr_fog_exp_halfheight" ); + level.fognearplane = getdvarfloat( "scr_fog_nearplane" ); + level.fogbaseheight = getdvarfloat( "scr_fog_baseheight" ); + level.fogcolorred = getdvarcolorred( "scr_fog_color" ); + level.fogcolorgreen = getdvarcolorgreen( "scr_fog_color" ); + level.fogcolorblue = getdvarcolorblue( "scr_fog_color" ); + level.fogcolorscale = getdvarfloat( "scr_fog_color_scale" ); + level.sunfogcolorred = getdvarcolorred( "scr_sun_fog_color" ); + level.sunfogcolorgreen = getdvarcolorgreen( "scr_sun_fog_color" ); + level.sunfogcolorblue = getdvarcolorblue( "scr_sun_fog_color" ); + level.sunstartangle = getdvarfloat( "scr_sun_fog_start_angle" ); + level.sunendangle = getdvarfloat( "scr_sun_fog_end_angle" ); + level.fogmaxopacity = getdvarfloat( "scr_fog_max_opacity" ); + + if ( getdvarint( "scr_art_sun_fog_dir_set" ) ) + { + setdvar( "scr_art_sun_fog_dir_set", "0" ); + println( "Setting sun fog direction to facing of player" ); + players = get_players(); + dir = vectornormalize( anglestoforward( players[0] getplayerangles() ) ); + level.fogsundir = []; + level.fogsundir[0] = dir[0]; + level.fogsundir[1] = dir[1]; + level.fogsundir[2] = dir[2]; + } + + fovslidercheck(); + dumpsettings(); + + if ( !getdvarint( _hash_DBBD8F3B ) ) + { + if ( !isdefined( level.fogsundir ) ) + { + level.fogsundir = []; + level.fogsundir[0] = 1; + level.fogsundir[1] = 0; + level.fogsundir[2] = 0; + } + + setvolfog( level.fognearplane, level.fogexphalfplane, level.fogexphalfheight, level.fogbaseheight, level.fogcolorred, level.fogcolorgreen, level.fogcolorblue, level.fogcolorscale, level.sunfogcolorred, level.sunfogcolorgreen, level.sunfogcolorblue, level.fogsundir[0], level.fogsundir[1], level.fogsundir[2], level.sunstartangle, level.sunendangle, 0, level.fogmaxopacity ); + } + else + setexpfog( 100000000, 100000001, 0, 0, 0, 0 ); + + wait 0.1; + } +#/ +} + +fovslidercheck() +{ + if ( level.dofdefault["nearStart"] >= level.dofdefault["nearEnd"] ) + { + level.dofdefault["nearStart"] = level.dofdefault["nearEnd"] - 1; + setdvar( "scr_dof_nearStart", level.dofdefault["nearStart"] ); + } + + if ( level.dofdefault["nearEnd"] <= level.dofdefault["nearStart"] ) + { + level.dofdefault["nearEnd"] = level.dofdefault["nearStart"] + 1; + setdvar( "scr_dof_nearEnd", level.dofdefault["nearEnd"] ); + } + + if ( level.dofdefault["farStart"] >= level.dofdefault["farEnd"] ) + { + level.dofdefault["farStart"] = level.dofdefault["farEnd"] - 1; + setdvar( "scr_dof_farStart", level.dofdefault["farStart"] ); + } + + if ( level.dofdefault["farEnd"] <= level.dofdefault["farStart"] ) + { + level.dofdefault["farEnd"] = level.dofdefault["farStart"] + 1; + setdvar( "scr_dof_farEnd", level.dofdefault["farEnd"] ); + } + + if ( level.dofdefault["farBlur"] >= level.dofdefault["nearBlur"] ) + { + level.dofdefault["farBlur"] = level.dofdefault["nearBlur"] - 0.1; + setdvar( "scr_dof_farBlur", level.dofdefault["farBlur"] ); + } + + if ( level.dofdefault["farStart"] <= level.dofdefault["nearEnd"] ) + { + level.dofdefault["farStart"] = level.dofdefault["nearEnd"] + 1; + setdvar( "scr_dof_farStart", level.dofdefault["farStart"] ); + } +} + +dumpsettings() +{ +/# + if ( getdvar( "scr_art_dump" ) != "0" ) + { + println( "\\tstart_dist = " + level.fognearplane + ";" ); + println( "\\thalf_dist = " + level.fogexphalfplane + ";" ); + println( "\\thalf_height = " + level.fogexphalfheight + ";" ); + println( "\\tbase_height = " + level.fogbaseheight + ";" ); + println( "\\tfog_r = " + level.fogcolorred + ";" ); + println( "\\tfog_g = " + level.fogcolorgreen + ";" ); + println( "\\tfog_b = " + level.fogcolorblue + ";" ); + println( "\\tfog_scale = " + level.fogcolorscale + ";" ); + println( "\\tsun_col_r = " + level.sunfogcolorred + ";" ); + println( "\\tsun_col_g = " + level.sunfogcolorgreen + ";" ); + println( "\\tsun_col_b = " + level.sunfogcolorblue + ";" ); + println( "\\tsun_dir_x = " + level.fogsundir[0] + ";" ); + println( "\\tsun_dir_y = " + level.fogsundir[1] + ";" ); + println( "\\tsun_dir_z = " + level.fogsundir[2] + ";" ); + println( "\\tsun_start_ang = " + level.sunstartangle + ";" ); + println( "\\tsun_stop_ang = " + level.sunendangle + ";" ); + println( "\\ttime = 0;" ); + println( "\\tmax_fog_opacity = " + level.fogmaxopacity + ";" ); + println( "" ); + println( "\\tsetVolFog(start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale," ); + println( "\\t\\tsun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, " ); + println( "\\t\\tsun_stop_ang, time, max_fog_opacity);" ); + setdvar( "scr_art_dump", "0" ); + } +#/ +} + +debug_reflection() +{ +/# + level.debug_reflection = 0; + + while ( true ) + { + wait 0.1; + + if ( getdvar( "debug_reflection" ) == "2" && level.debug_reflection != 2 || getdvar( "debug_reflection" ) == "3" && level.debug_reflection != 3 ) + { + remove_reflection_objects(); + + if ( getdvar( "debug_reflection" ) == "2" ) + { + create_reflection_objects(); + level.debug_reflection = 2; + } + else + { + create_reflection_objects(); + create_reflection_object(); + level.debug_reflection = 3; + } + } + else if ( getdvar( "debug_reflection" ) == "1" && level.debug_reflection != 1 ) + { + setdvar( "debug_reflection_matte", "0" ); + setdvar( "debug_color_pallete", "0" ); + remove_reflection_objects(); + create_reflection_object(); + level.debug_reflection = 1; + } + else if ( getdvar( "debug_reflection" ) == "0" && level.debug_reflection != 0 ) + { + remove_reflection_objects(); + level.debug_reflection = 0; + } + } +#/ +} + +remove_reflection_objects() +{ +/# + if ( ( level.debug_reflection == 2 || level.debug_reflection == 3 ) && isdefined( level.debug_reflection_objects ) ) + { + for ( i = 0; i < level.debug_reflection_objects.size; i++ ) + level.debug_reflection_objects[i] delete(); + + level.debug_reflection_objects = undefined; + } + + if ( level.debug_reflection == 1 || level.debug_reflection == 3 || level.debug_reflection_matte == 1 || level.debug_color_pallete == 1 || level.debug_color_pallete == 2 ) + { + if ( isdefined( level.debug_reflectionobject ) ) + level.debug_reflectionobject delete(); + } +#/ +} + +create_reflection_objects() +{ +/# + reflection_locs = getreflectionlocs(); + + for ( i = 0; i < reflection_locs.size; i++ ) + { + level.debug_reflection_objects[i] = spawn( "script_model", reflection_locs[i] ); + level.debug_reflection_objects[i] setmodel( "test_sphere_silver" ); + } +#/ +} + +create_reflection_object( model = "test_sphere_silver" ) +{ +/# + if ( isdefined( level.debug_reflectionobject ) ) + level.debug_reflectionobject delete(); + + players = get_players(); + player = players[0]; + level.debug_reflectionobject = spawn( "script_model", player geteye() + vectorscale( anglestoforward( player.angles ), 100 ) ); + level.debug_reflectionobject setmodel( model ); + level.debug_reflectionobject.origin = player geteye() + vectorscale( anglestoforward( player getplayerangles() ), 100 ); + level.debug_reflectionobject linkto( player ); + thread debug_reflection_buttons(); +#/ +} + +debug_reflection_buttons() +{ +/# + level notify( "new_reflection_button_running" ); + level endon( "new_reflection_button_running" ); + level.debug_reflectionobject endon( "death" ); + offset = 100; + lastoffset = offset; + + while ( getdvar( "debug_reflection" ) == "1" || getdvar( "debug_reflection" ) == "3" || getdvar( "debug_reflection_matte" ) == "1" || getdvar( "debug_color_pallete" ) == "1" || getdvar( "debug_color_pallete" ) == "2" ) + { + players = get_players(); + + if ( players[0] buttonpressed( "BUTTON_X" ) ) + offset += 50; + + if ( players[0] buttonpressed( "BUTTON_Y" ) ) + offset -= 50; + + if ( offset > 1000 ) + offset = 1000; + + if ( offset < 64 ) + offset = 64; + + level.debug_reflectionobject unlink(); + level.debug_reflectionobject.origin = players[0] geteye() + vectorscale( anglestoforward( players[0] getplayerangles() ), offset ); + temp_angles = vectortoangles( players[0].origin - level.debug_reflectionobject.origin ); + level.debug_reflectionobject.angles = ( 0, temp_angles[1], 0 ); + lastoffset = offset; + line( level.debug_reflectionobject.origin, getreflectionorigin( level.debug_reflectionobject.origin ), ( 1, 0, 0 ), 1, 1 ); + wait 0.05; + + if ( isdefined( level.debug_reflectionobject ) ) + level.debug_reflectionobject linkto( players[0] ); + } +#/ +} + +debug_reflection_matte() +{ +/# + level.debug_reflection_matte = 0; + + while ( true ) + { + wait 0.1; + + if ( getdvar( "debug_reflection_matte" ) == "1" && level.debug_reflection_matte != 1 ) + { + setdvar( "debug_reflection", "0" ); + setdvar( "debug_color_pallete", "0" ); + remove_reflection_objects(); + create_reflection_object( "test_sphere_lambert" ); + level.debug_reflection_matte = 1; + } + else if ( getdvar( "debug_reflection_matte" ) == "0" && level.debug_reflection_matte != 0 ) + { + remove_reflection_objects(); + level.debug_reflection_matte = 0; + } + } +#/ +} + +debug_color_pallete() +{ +/# + level.debug_color_pallete = 0; + + while ( true ) + { + wait 0.1; + + if ( getdvar( "debug_color_pallete" ) == "1" && level.debug_color_pallete != 1 ) + { + setdvar( "debug_reflection", "0" ); + setdvar( "debug_reflection_matte", "0" ); + remove_reflection_objects(); + create_reflection_object( "test_macbeth_chart" ); + level.debug_color_pallete = 1; + } + else if ( getdvar( "debug_color_pallete" ) == "2" && level.debug_color_pallete != 2 ) + { + remove_reflection_objects(); + create_reflection_object( "test_macbeth_chart_unlit" ); + level.debug_color_pallete = 2; + } + else if ( getdvar( "debug_color_pallete" ) == "0" && level.debug_color_pallete != 0 ) + { + remove_reflection_objects(); + level.debug_color_pallete = 0; + } + } +#/ +} diff --git a/ZM/Core/maps/mp/_audio.gsc b/ZM/Core/maps/mp/_audio.gsc new file mode 100644 index 0000000..039e1ac --- /dev/null +++ b/ZM/Core/maps/mp/_audio.gsc @@ -0,0 +1,139 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; + +init() +{ + +} + +wait_until_first_player() +{ + players = get_players(); + + if ( !isdefined( players[0] ) ) + level waittill( "first_player_ready" ); + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] thread monitor_player_sprint(); +} + +stand_think( trig ) +{ + killtext = "kill_stand_think" + trig getentitynumber(); + self endon( "disconnect" ); + self endon( "death" ); + self endon( killtext ); + + while ( true ) + { + if ( self.player_is_moving ) + trig playsound( trig.script_label ); + + wait 1; + } +} + +monitor_player_sprint() +{ + self endon( "disconnect" ); + self thread monitor_player_movement(); + + for ( self._is_sprinting = 0; 1; self._is_sprinting = 0 ) + { + self waittill( "sprint_begin" ); + + self._is_sprinting = 1; + + self waittill( "sprint_end" ); + } +} + +monitor_player_movement() +{ + self endon( "disconnect" ); + + while ( true ) + { + org_1 = self.origin; + wait 1.0; + org_2 = self.origin; + distancemoved = distancesquared( org_1, org_2 ); + + if ( distancemoved > 4096 ) + self.player_is_moving = 1; + else + self.player_is_moving = 0; + } +} + +thread_enter_exit_sound( trig ) +{ + self endon( "death" ); + self endon( "disconnect" ); + trig.touchingplayers[self getentitynumber()] = 1; + + if ( isdefined( trig.script_sound ) && trig.script_activated && self._is_sprinting ) + self playsound( trig.script_sound ); + + self thread stand_think( trig ); + + while ( self istouching( trig ) ) + wait 0.1; + + self notify( "kill_stand_think" + trig getentitynumber() ); + self playsound( trig.script_noteworthy ); + trig.touchingplayers[self getentitynumber()] = 0; +} + +thread_step_trigger() +{ + if ( !isdefined( self.script_activated ) ) + self.script_activated = 1; + + if ( !isdefined( self.touchingplayers ) ) + { + self.touchingplayers = []; + + for ( i = 0; i < 4; i++ ) + self.touchingplayers[i] = 0; + } + + while ( true ) + { + self waittill( "trigger", who ); + + if ( self.touchingplayers[who getentitynumber()] == 0 ) + who thread thread_enter_exit_sound( self ); + } +} + +disable_bump_trigger( triggername ) +{ + triggers = getentarray( "audio_bump_trigger", "targetname" ); + + if ( isdefined( triggers ) ) + { + for ( i = 0; i < triggers.size; i++ ) + { + if ( isdefined( triggers[i].script_label ) && triggers[i].script_label == triggername ) + triggers[i].script_activated = 0; + } + } +} + +get_player_index_number( player ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] == player ) + return i; + } + + return 1; +} diff --git a/ZM/Core/maps/mp/_ballistic_knife.gsc b/ZM/Core/maps/mp/_ballistic_knife.gsc new file mode 100644 index 0000000..e9eca74 --- /dev/null +++ b/ZM/Core/maps/mp/_ballistic_knife.gsc @@ -0,0 +1,262 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\_challenges; + +init() +{ + precachemodel( "t6_wpn_ballistic_knife_projectile" ); + precachemodel( "t6_wpn_ballistic_knife_blade_retrieve" ); +} + +onspawn( watcher, player ) +{ + player endon( "death" ); + player endon( "disconnect" ); + level endon( "game_ended" ); + + self waittill( "stationary", endpos, normal, angles, attacker, prey, bone ); + + isfriendly = 0; + + if ( isdefined( endpos ) ) + { + retrievable_model = spawn( "script_model", endpos ); + retrievable_model setmodel( "t6_wpn_ballistic_knife_projectile" ); + retrievable_model setteam( player.team ); + retrievable_model setowner( player ); + retrievable_model.owner = player; + retrievable_model.angles = angles; + retrievable_model.name = watcher.weapon; + retrievable_model.targetname = "sticky_weapon"; + + if ( isdefined( prey ) ) + { + if ( level.teambased && isplayer( prey ) && player.team == prey.team ) + isfriendly = 1; + else if ( level.teambased && isai( prey ) && player.team == prey.aiteam ) + isfriendly = 1; + + if ( !isfriendly ) + { + if ( isalive( prey ) ) + retrievable_model droptoground( retrievable_model.origin, 80 ); + else + retrievable_model linkto( prey, bone ); + } + else if ( isfriendly ) + { + retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) ); + normal = ( 0, 0, 1 ); + } + } + + watcher.objectarray[watcher.objectarray.size] = retrievable_model; + + if ( isfriendly ) + retrievable_model waittill( "stationary" ); + + retrievable_model thread dropknivestoground(); + + if ( isfriendly ) + player notify( "ballistic_knife_stationary", retrievable_model, normal ); + else + player notify( "ballistic_knife_stationary", retrievable_model, normal, prey ); + + retrievable_model thread wait_to_show_glowing_model( prey ); + } +} + +wait_to_show_glowing_model( prey ) +{ + level endon( "game_ended" ); + self endon( "death" ); + glowing_retrievable_model = spawn( "script_model", self.origin ); + self.glowing_model = glowing_retrievable_model; + glowing_retrievable_model.angles = self.angles; + glowing_retrievable_model linkto( self ); + + if ( isdefined( prey ) && !isalive( prey ) ) + wait 2; + + glowing_retrievable_model setmodel( "t6_wpn_ballistic_knife_blade_retrieve" ); +} + +watch_shutdown() +{ + pickuptrigger = self.pickuptrigger; + glowing_model = self.glowing_model; + + self waittill( "death" ); + + if ( isdefined( pickuptrigger ) ) + pickuptrigger delete(); + + if ( isdefined( glowing_model ) ) + glowing_model delete(); +} + +onspawnretrievetrigger( watcher, player ) +{ + player endon( "death" ); + player endon( "disconnect" ); + level endon( "game_ended" ); + + player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey ); + + if ( !isdefined( retrievable_model ) ) + return; + + vec_scale = 10; + trigger_pos = []; + + if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) ) + { + trigger_pos[0] = prey.origin[0]; + trigger_pos[1] = prey.origin[1]; + trigger_pos[2] = prey.origin[2] + vec_scale; + } + else + { + trigger_pos[0] = retrievable_model.origin[0] + vec_scale * normal[0]; + trigger_pos[1] = retrievable_model.origin[1] + vec_scale * normal[1]; + trigger_pos[2] = retrievable_model.origin[2] + vec_scale * normal[2]; + } + + trigger_pos[2] -= 50.0; + pickup_trigger = spawn( "trigger_radius", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ), 0, 50, 100 ); + pickup_trigger.owner = player; + retrievable_model.pickuptrigger = pickup_trigger; + pickup_trigger enablelinkto(); + + if ( isdefined( prey ) ) + pickup_trigger linkto( prey ); + else + pickup_trigger linkto( retrievable_model ); + + retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.pickupsoundplayer, watcher.pickupsound ); + retrievable_model thread watch_shutdown(); +} + +watch_use_trigger( trigger, model, callback, playersoundonuse, npcsoundonuse ) +{ + self endon( "death" ); + self endon( "delete" ); + level endon( "game_ended" ); + max_ammo = weaponmaxammo( "knife_ballistic_mp" ) + 1; + + while ( true ) + { + trigger waittill( "trigger", player ); + + if ( !isalive( player ) ) + continue; + + if ( !player isonground() ) + continue; + + if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam ) + continue; + + if ( isdefined( trigger.claimedby ) && player != trigger.claimedby ) + continue; + + if ( !player hasweapon( "knife_ballistic_mp" ) ) + continue; + + ammo_stock = player getweaponammostock( "knife_ballistic_mp" ); + ammo_clip = player getweaponammoclip( "knife_ballistic_mp" ); + current_weapon = player getcurrentweapon(); + total_ammo = ammo_stock + ammo_clip; + hasreloaded = 1; + + if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == "knife_ballistic_mp" ) + hasreloaded = 0; + + if ( total_ammo >= max_ammo || !hasreloaded ) + continue; + + if ( isdefined( playersoundonuse ) ) + player playlocalsound( playersoundonuse ); + + if ( isdefined( npcsoundonuse ) ) + player playsound( npcsoundonuse ); + + self thread [[ callback ]]( player ); + break; + } +} + +pick_up( player ) +{ + self destroy_ent(); + current_weapon = player getcurrentweapon(); + player maps\mp\_challenges::pickedupballisticknife(); + + if ( current_weapon != "knife_ballistic_mp" ) + { + clip_ammo = player getweaponammoclip( "knife_ballistic_mp" ); + + if ( !clip_ammo ) + player setweaponammoclip( "knife_ballistic_mp", 1 ); + else + { + new_ammo_stock = player getweaponammostock( "knife_ballistic_mp" ) + 1; + player setweaponammostock( "knife_ballistic_mp", new_ammo_stock ); + } + } + else + { + new_ammo_stock = player getweaponammostock( "knife_ballistic_mp" ) + 1; + player setweaponammostock( "knife_ballistic_mp", new_ammo_stock ); + } +} + +destroy_ent() +{ + if ( isdefined( self ) ) + { + pickuptrigger = self.pickuptrigger; + + if ( isdefined( pickuptrigger ) ) + pickuptrigger delete(); + + if ( isdefined( self.glowing_model ) ) + self.glowing_model delete(); + + self delete(); + } +} + +dropknivestoground() +{ + self endon( "death" ); + + for (;;) + { + level waittill( "drop_objects_to_ground", origin, radius ); + + self droptoground( origin, radius ); + } +} + +droptoground( origin, radius ) +{ + if ( distancesquared( origin, self.origin ) < radius * radius ) + { + self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) ); + self thread updateretrievetrigger(); + } +} + +updateretrievetrigger() +{ + self endon( "death" ); + + self waittill( "stationary" ); + + trigger = self.pickuptrigger; + trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 ); + trigger linkto( self ); +} diff --git a/ZM/Core/maps/mp/_bb.gsc b/ZM/Core/maps/mp/_bb.gsc new file mode 100644 index 0000000..7e6832f --- /dev/null +++ b/ZM/Core/maps/mp/_bb.gsc @@ -0,0 +1,89 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; + +init() +{ + level thread onplayerconnect(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connected", player ); + + player thread onplayerspawned(); + player thread onplayerdeath(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + self._bbdata = []; + + for (;;) + { + self waittill( "spawned_player" ); + + self._bbdata["score"] = 0; + self._bbdata["momentum"] = 0; + self._bbdata["spawntime"] = gettime(); + self._bbdata["shots"] = 0; + self._bbdata["hits"] = 0; + } +} + +onplayerdisconnect() +{ + for (;;) + { + self waittill( "disconnect" ); + + self commitspawndata(); + break; + } +} + +onplayerdeath() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "death" ); + + self commitspawndata(); + } +} + +commitspawndata() +{ + assert( isdefined( self._bbdata ) ); + + if ( !isdefined( self._bbdata ) ) + return; + + bbprint( "mpplayerlives", "gametime %d spawnid %d lifescore %d lifemomentum %d lifetime %d name %s", gettime(), getplayerspawnid( self ), self._bbdata["score"], self._bbdata["momentum"], gettime() - self._bbdata["spawntime"], self.name ); +} + +commitweapondata( spawnid, currentweapon, time0 ) +{ + assert( isdefined( self._bbdata ) ); + + if ( !isdefined( self._bbdata ) ) + return; + + time1 = gettime(); + bbprint( "mpweapons", "spawnid %d name %s duration %d shots %d hits %d", spawnid, currentweapon, time1 - time0, self._bbdata["shots"], self._bbdata["hits"] ); + self._bbdata["shots"] = 0; + self._bbdata["hits"] = 0; +} + +bbaddtostat( statname, delta ) +{ + if ( isdefined( self._bbdata ) && isdefined( self._bbdata[statname] ) ) + self._bbdata[statname] += delta; +} diff --git a/ZM/Core/maps/mp/_busing.gsc b/ZM/Core/maps/mp/_busing.gsc new file mode 100644 index 0000000..6928e30 --- /dev/null +++ b/ZM/Core/maps/mp/_busing.gsc @@ -0,0 +1,18 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +businit() +{ + assert( level.clientscripts ); + level.busstate = ""; + registerclientsys( "busCmd" ); +} + +setbusstate( state ) +{ + if ( level.busstate != state ) + setclientsysstate( "busCmd", state ); + + level.busstate = state; +} diff --git a/ZM/Core/maps/mp/_challenges.gsc b/ZM/Core/maps/mp/_challenges.gsc new file mode 100644 index 0000000..e5ca8f3 --- /dev/null +++ b/ZM/Core/maps/mp/_challenges.gsc @@ -0,0 +1,1876 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; + +init() +{ + if ( !isdefined( level.challengescallbacks ) ) + level.challengescallbacks = []; + + waittillframeend; + + if ( canprocesschallenges() ) + { + registerchallengescallback( "playerKilled", ::challengekills ); + registerchallengescallback( "gameEnd", ::challengegameend ); + registerchallengescallback( "roundEnd", ::challengeroundend ); + } + + level thread onplayerconnect(); + + foreach ( team in level.teams ) + initteamchallenges( team ); +} + +addflyswatterstat( weapon, aircraft ) +{ + if ( !isdefined( self.pers["flyswattercount"] ) ) + self.pers["flyswattercount"] = 0; + + self addweaponstat( weapon, "destroyed_aircraft", 1 ); + self.pers["flyswattercount"]++; + + if ( self.pers["flyswattercount"] == 5 ) + self addweaponstat( weapon, "destroyed_5_aircraft", 1 ); + + if ( isdefined( aircraft ) && isdefined( aircraft.birthtime ) ) + { + if ( gettime() - aircraft.birthtime < 20000 ) + self addweaponstat( weapon, "destroyed_aircraft_under20s", 1 ); + } + + if ( !isdefined( self.destroyedaircrafttime ) ) + self.destroyedaircrafttime = []; + + if ( isdefined( self.destroyedaircrafttime[weapon] ) && gettime() - self.destroyedaircrafttime[weapon] < 10000 ) + { + self addweaponstat( weapon, "destroyed_2aircraft_quickly", 1 ); + self.destroyedaircrafttime[weapon] = undefined; + } + else + self.destroyedaircrafttime[weapon] = gettime(); +} + +canprocesschallenges() +{ +/# + if ( getdvarintdefault( "scr_debug_challenges", 0 ) ) + return true; +#/ + if ( level.rankedmatch || level.wagermatch ) + return true; + + return false; +} + +initteamchallenges( team ) +{ + if ( !isdefined( game["challenge"] ) ) + game["challenge"] = []; + + if ( !isdefined( game["challenge"][team] ) ) + { + game["challenge"][team] = []; + game["challenge"][team]["plantedBomb"] = 0; + game["challenge"][team]["destroyedBombSite"] = 0; + game["challenge"][team]["capturedFlag"] = 0; + } + + game["challenge"][team]["allAlive"] = 1; +} + +registerchallengescallback( callback, func ) +{ + if ( !isdefined( level.challengescallbacks[callback] ) ) + level.challengescallbacks[callback] = []; + + level.challengescallbacks[callback][level.challengescallbacks[callback].size] = func; +} + +dochallengecallback( callback, data ) +{ + if ( !isdefined( level.challengescallbacks ) ) + return; + + if ( !isdefined( level.challengescallbacks[callback] ) ) + return; + + if ( isdefined( data ) ) + { + for ( i = 0; i < level.challengescallbacks[callback].size; i++ ) + thread [[ level.challengescallbacks[callback][i] ]]( data ); + } + else + { + for ( i = 0; i < level.challengescallbacks[callback].size; i++ ) + thread [[ level.challengescallbacks[callback][i] ]](); + } +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connected", player ); + + player thread initchallengedata(); + player thread spawnwatcher(); + player thread monitorreloads(); + } +} + +monitorreloads() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "reload" ); + + currentweapon = self getcurrentweapon(); + + if ( currentweapon == "none" ) + continue; + + time = gettime(); + self.lastreloadtime = time; + + if ( currentweapon == "crossbow_mp" ) + self.crossbowclipkillcount = 0; + + if ( weaponhasattachment( currentweapon, "dualclip" ) ) + self thread reloadthenkill( currentweapon ); + } +} + +reloadthenkill( reloadweapon ) +{ + self endon( "disconnect" ); + self endon( "death" ); + self endon( "reloadThenKillTimedOut" ); + self notify( "reloadThenKillStart" ); + self endon( "reloadThenKillStart" ); + self thread reloadthenkilltimeout( 5 ); + + for (;;) + { + self waittill( "killed_enemy_player", time, weapon ); + + if ( reloadweapon == weapon ) + self addplayerstat( "reload_then_kill_dualclip", 1 ); + } +} + +reloadthenkilltimeout( time ) +{ + self endon( "disconnect" ); + self endon( "death" ); + self endon( "reloadThenKillStart" ); + wait( time ); + self notify( "reloadThenKillTimedOut" ); +} + +initchallengedata() +{ + self.pers["bulletStreak"] = 0; + self.pers["lastBulletKillTime"] = 0; + self.pers["stickExplosiveKill"] = 0; + self.pers["carepackagesCalled"] = 0; + self.explosiveinfo = []; +} + +isdamagefromplayercontrolledaitank( eattacker, einflictor, sweapon ) +{ + if ( sweapon == "ai_tank_drone_gun_mp" ) + { + if ( isdefined( eattacker ) && isdefined( eattacker.remoteweapon ) && isdefined( einflictor ) ) + { + if ( isdefined( einflictor.controlled ) && einflictor.controlled == 1 ) + { + if ( eattacker.remoteweapon == einflictor ) + return true; + } + } + } + else if ( sweapon == "ai_tank_drone_rocket_mp" ) + { + if ( isdefined( einflictor ) && !isdefined( einflictor.from_ai ) ) + return true; + } + + return false; +} + +isdamagefromplayercontrolledsentry( eattacker, einflictor, sweapon ) +{ + if ( sweapon == "auto_gun_turret_mp" ) + { + if ( isdefined( eattacker ) && isdefined( eattacker.remoteweapon ) && isdefined( einflictor ) ) + { + if ( eattacker.remoteweapon == einflictor ) + { + if ( isdefined( einflictor.controlled ) && einflictor.controlled == 1 ) + return true; + } + } + } + + return false; +} + +challengekills( data, time ) +{ + victim = data.victim; + player = data.attacker; + attacker = data.attacker; + time = data.time; + victim = data.victim; + weapon = data.sweapon; + time = data.time; + inflictor = data.einflictor; + meansofdeath = data.smeansofdeath; + wasplanting = data.wasplanting; + wasdefusing = data.wasdefusing; + lastweaponbeforetoss = data.lastweaponbeforetoss; + ownerweaponatlaunch = data.ownerweaponatlaunch; + + if ( !isdefined( data.sweapon ) ) + return; + + if ( !isdefined( player ) || !isplayer( player ) ) + return; + + weaponclass = getweaponclass( weapon ); + game["challenge"][victim.team]["allAlive"] = 0; + + if ( level.teambased ) + { + if ( player.team == victim.team ) + return; + } + else if ( player == victim ) + return; + + if ( isdamagefromplayercontrolledaitank( player, inflictor, weapon ) == 1 ) + player addplayerstat( "kill_with_remote_control_ai_tank", 1 ); + + if ( weapon == "auto_gun_turret_mp" ) + { + if ( isdefined( inflictor ) ) + { + if ( !isdefined( inflictor.killcount ) ) + inflictor.killcount = 0; + + inflictor.killcount++; + + if ( inflictor.killcount >= 5 ) + { + inflictor.killcount = 0; + player addplayerstat( "killstreak_5_with_sentry_gun", 1 ); + } + } + + if ( isdamagefromplayercontrolledsentry( player, inflictor, weapon ) == 1 ) + player addplayerstat( "kill_with_remote_control_sentry_gun", 1 ); + } + + if ( weapon == "minigun_mp" || weapon == "inventory_minigun_mp" ) + { + player.deathmachinekills++; + + if ( player.deathmachinekills >= 5 ) + { + player.deathmachinekills = 0; + player addplayerstat( "killstreak_5_with_death_machine", 1 ); + } + } + + if ( data.waslockingon == 1 && weapon == "chopper_minigun_mp" ) + player addplayerstat( "kill_enemy_locking_on_with_chopper_gunner", 1 ); + + if ( isdefined( level.iskillstreakweapon ) ) + { + if ( [[ level.iskillstreakweapon ]]( data.sweapon ) ) + return; + } + + attacker notify( "killed_enemy_player", time, weapon ); + + if ( isdefined( player.primaryloadoutweapon ) && weapon == player.primaryloadoutweapon || isdefined( player.primaryloadoutaltweapon ) && weapon == player.primaryloadoutaltweapon ) + { + if ( player isbonuscardactive( 0, player.class_num ) ) + { + player addbonuscardstat( 0, "kills", 1, player.class_num ); + player addplayerstat( "kill_with_loadout_weapon_with_3_attachments", 1 ); + } + + if ( isdefined( player.secondaryweaponkill ) && player.secondaryweaponkill == 1 ) + { + player.primaryweaponkill = 0; + player.secondaryweaponkill = 0; + + if ( player isbonuscardactive( 2, player.class_num ) ) + { + player addbonuscardstat( 2, "kills", 1, player.class_num ); + player addplayerstat( "kill_with_both_primary_weapons", 1 ); + } + } + else + player.primaryweaponkill = 1; + } + else if ( isdefined( player.secondaryloadoutweapon ) && weapon == player.secondaryloadoutweapon || isdefined( player.secondaryloadoutaltweapon ) && weapon == player.secondaryloadoutaltweapon ) + { + if ( player isbonuscardactive( 1, player.class_num ) ) + player addbonuscardstat( 1, "kills", 1, player.class_num ); + + if ( isdefined( player.primaryweaponkill ) && player.primaryweaponkill == 1 ) + { + player.primaryweaponkill = 0; + player.secondaryweaponkill = 0; + + if ( player isbonuscardactive( 2, player.class_num ) ) + { + player addbonuscardstat( 2, "kills", 1, player.class_num ); + player addplayerstat( "kill_with_both_primary_weapons", 1 ); + } + } + else + player.secondaryweaponkill = 1; + } + + if ( player isbonuscardactive( 5, player.class_num ) || player isbonuscardactive( 4, player.class_num ) || player isbonuscardactive( 3, player.class_num ) ) + player addplayerstat( "kill_with_2_perks_same_category", 1 ); + + baseweaponname = getreffromitemindex( getbaseweaponitemindex( weapon ) ) + "_mp"; + + if ( isdefined( player.weaponkills[baseweaponname] ) ) + { + player.weaponkills[baseweaponname]++; + + if ( player.weaponkills[baseweaponname] == 5 ) + player addweaponstat( baseweaponname, "killstreak_5", 1 ); + + if ( player.weaponkills[baseweaponname] == 10 ) + player addweaponstat( baseweaponname, "killstreak_10", 1 ); + } + else + player.weaponkills[baseweaponname] = 1; + + attachmentname = player getweaponoptic( weapon ); + + if ( isdefined( attachmentname ) && attachmentname != "" ) + { + if ( isdefined( player.attachmentkills[attachmentname] ) ) + { + player.attachmentkills[attachmentname]++; + + if ( player.attachmentkills[attachmentname] == 5 ) + player addweaponstat( weapon, "killstreak_5_attachment", 1 ); + } + else + player.attachmentkills[attachmentname] = 1; + } + + assert( isdefined( player.activecounteruavs ) ); + assert( isdefined( player.activeuavs ) ); + assert( isdefined( player.activesatellites ) ); + + if ( player.activeuavs > 0 ) + player addplayerstat( "kill_while_uav_active", 1 ); + + if ( player.activecounteruavs > 0 ) + player addplayerstat( "kill_while_cuav_active", 1 ); + + if ( player.activesatellites > 0 ) + player addplayerstat( "kill_while_satellite_active", 1 ); + + if ( isdefined( attacker.tacticalinsertiontime ) && attacker.tacticalinsertiontime + 5000 > time ) + { + player addplayerstat( "kill_after_tac_insert", 1 ); + player addweaponstat( "tactical_insertion_mp", "CombatRecordStat", 1 ); + } + + if ( isdefined( victim.tacticalinsertiontime ) && victim.tacticalinsertiontime + 5000 > time ) + player addweaponstat( "tactical_insertion_mp", "headshots", 1 ); + + if ( isdefined( level.isplayertrackedfunc ) ) + { + if ( attacker [[ level.isplayertrackedfunc ]]( victim, time ) ) + { + attacker addplayerstat( "kill_enemy_revealed_by_sensor", 1 ); + attacker addweaponstat( "sensor_grenade_mp", "CombatRecordStat", 1 ); + } + } + + if ( level.teambased ) + { + activeempowner = level.empowners[player.team]; + + if ( isdefined( activeempowner ) ) + { + if ( activeempowner == player ) + player addplayerstat( "kill_while_emp_active", 1 ); + } + } + else if ( isdefined( level.empplayer ) ) + { + if ( level.empplayer == player ) + player addplayerstat( "kill_while_emp_active", 1 ); + } + + if ( isdefined( player.flakjacketclaymore[victim.clientid] ) && player.flakjacketclaymore[victim.clientid] == 1 ) + player addplayerstat( "survive_claymore_kill_planter_flak_jacket_equipped", 1 ); + + if ( isdefined( player.dogsactive ) ) + { + if ( weapon != "dog_bite_mp" ) + { + player.dogsactivekillstreak++; + + if ( player.dogsactivekillstreak > 5 ) + player addplayerstat( "killstreak_5_dogs", 1 ); + } + } + + isstunned = 0; + + if ( victim maps\mp\_utility::isflashbanged() ) + { + if ( isdefined( victim.lastflashedby ) && victim.lastflashedby == player ) + { + player addplayerstat( "kill_flashed_enemy", 1 ); + player addweaponstat( "flash_grenade_mp", "CombatRecordStat", 1 ); + } + + isstunned = 1; + } + + if ( isdefined( victim.concussionendtime ) && victim.concussionendtime > gettime() ) + { + if ( isdefined( victim.lastconcussedby ) && victim.lastconcussedby == player ) + { + player addplayerstat( "kill_concussed_enemy", 1 ); + player addweaponstat( "concussion_grenade_mp", "CombatRecordStat", 1 ); + } + + isstunned = 1; + } + + if ( isdefined( player.laststunnedby ) ) + { + if ( player.laststunnedby == victim && player.laststunnedtime + 5000 > time ) + player addplayerstat( "kill_enemy_who_shocked_you", 1 ); + } + + if ( isdefined( victim.laststunnedby ) && victim.laststunnedtime + 5000 > time ) + { + isstunned = 1; + + if ( victim.laststunnedby == player ) + { + player addplayerstat( "kill_shocked_enemy", 1 ); + player addweaponstat( "proximity_grenade_mp", "CombatRecordStat", 1 ); + + if ( data.smeansofdeath == "MOD_MELEE" ) + player addplayerstat( "shock_enemy_then_stab_them", 1 ); + } + } + + if ( player.mantletime + 5000 > time ) + player addplayerstat( "mantle_then_kill", 1 ); + + if ( isdefined( player.tookweaponfrom ) && isdefined( player.tookweaponfrom[weapon] ) && isdefined( player.tookweaponfrom[weapon].previousowner ) ) + { + if ( level.teambased ) + { + if ( player.tookweaponfrom[weapon].previousowner.team != player.team ) + { + player.pickedupweaponkills[weapon]++; + player addplayerstat( "kill_enemy_with_picked_up_weapon", 1 ); + } + } + else + { + player.pickedupweaponkills[weapon]++; + player addplayerstat( "kill_enemy_with_picked_up_weapon", 1 ); + } + + if ( player.pickedupweaponkills[weapon] >= 5 ) + { + player.pickedupweaponkills[weapon] = 0; + player addplayerstat( "killstreak_5_picked_up_weapon", 1 ); + } + } + + if ( isdefined( victim.explosiveinfo["originalOwnerKill"] ) && victim.explosiveinfo["originalOwnerKill"] == 1 ) + { + if ( victim.explosiveinfo["damageExplosiveKill"] == 1 ) + player addplayerstat( "kill_enemy_shoot_their_explosive", 1 ); + } + + if ( data.attackerstance == "crouch" ) + player addplayerstat( "kill_enemy_while_crouched", 1 ); + else if ( data.attackerstance == "prone" ) + player addplayerstat( "kill_enemy_while_prone", 1 ); + + if ( data.victimstance == "prone" ) + player addplayerstat( "kill_prone_enemy", 1 ); + + if ( data.smeansofdeath == "MOD_HEAD_SHOT" || data.smeansofdeath == "MOD_PISTOL_BULLET" || data.smeansofdeath == "MOD_RIFLE_BULLET" ) + player genericbulletkill( data, victim, weapon ); + + if ( level.teambased ) + { + if ( !isdefined( player.pers["kill_every_enemy"] ) && ( level.playercount[victim.pers["team"]] > 3 && player.pers["killed_players"].size >= level.playercount[victim.pers["team"]] ) ) + { + player addplayerstat( "kill_every_enemy", 1 ); + player.pers["kill_every_enemy"] = 1; + } + } + + switch ( weaponclass ) + { + case "weapon_pistol": + if ( data.smeansofdeath == "MOD_HEAD_SHOT" ) + { + player.pers["pistolHeadshot"]++; + + if ( player.pers["pistolHeadshot"] >= 10 ) + { + player.pers["pistolHeadshot"] = 0; + player addplayerstat( "pistolHeadshot_10_onegame", 1 ); + } + } + + break; + case "weapon_assault": + if ( data.smeansofdeath == "MOD_HEAD_SHOT" ) + { + player.pers["assaultRifleHeadshot"]++; + + if ( player.pers["assaultRifleHeadshot"] >= 5 ) + { + player.pers["assaultRifleHeadshot"] = 0; + player addplayerstat( "headshot_assault_5_onegame", 1 ); + } + } + + break; + case "weapon_smg": + case "weapon_lmg": + break; + case "weapon_sniper": + if ( isdefined( victim.firsttimedamaged ) && victim.firsttimedamaged == time ) + { + player addplayerstat( "kill_enemy_one_bullet_sniper", 1 ); + player addweaponstat( weapon, "kill_enemy_one_bullet_sniper", 1 ); + + if ( !isdefined( player.pers["one_shot_sniper_kills"] ) ) + player.pers["one_shot_sniper_kills"] = 0; + + player.pers["one_shot_sniper_kills"]++; + + if ( player.pers["one_shot_sniper_kills"] == 10 ) + player addplayerstat( "kill_10_enemy_one_bullet_sniper_onegame", 1 ); + } + + break; + case "weapon_cqb": + if ( isdefined( victim.firsttimedamaged ) && victim.firsttimedamaged == time ) + { + player addplayerstat( "kill_enemy_one_bullet_shotgun", 1 ); + player addweaponstat( weapon, "kill_enemy_one_bullet_shotgun", 1 ); + + if ( !isdefined( player.pers["one_shot_shotgun_kills"] ) ) + player.pers["one_shot_shotgun_kills"] = 0; + + player.pers["one_shot_shotgun_kills"]++; + + if ( player.pers["one_shot_shotgun_kills"] == 10 ) + player addplayerstat( "kill_10_enemy_one_bullet_shotgun_onegame", 1 ); + } + + break; + } + + if ( data.smeansofdeath == "MOD_MELEE" ) + { + if ( weaponhasattachment( weapon, "tacknife" ) ) + { + player addplayerstat( "kill_enemy_with_tacknife", 1 ); + player bladekill(); + } + else if ( weapon == "knife_ballistic_mp" ) + { + player bladekill(); + player addweaponstat( weapon, "ballistic_knife_melee", 1 ); + } + else if ( weapon == "knife_held_mp" || weapon == "knife_mp" ) + player bladekill(); + else if ( weapon == "riotshield_mp" ) + { + if ( victim.lastfiretime + 3000 > time ) + player addweaponstat( weapon, "shield_melee_while_enemy_shooting", 1 ); + } + } + else + { + if ( data.smeansofdeath == "MOD_IMPACT" && baseweaponname == "crossbow_mp" ) + { + if ( weaponhasattachment( weapon, "stackfire" ) ) + player addplayerstat( "KILL_CROSSBOW_STACKFIRE", 1 ); + } + else if ( isdefined( ownerweaponatlaunch ) ) + { + if ( weaponhasattachment( ownerweaponatlaunch, "stackfire" ) ) + player addplayerstat( "KILL_CROSSBOW_STACKFIRE", 1 ); + } + + if ( weapon == "knife_ballistic_mp" ) + { + player bladekill(); + + if ( isdefined( player.retreivedblades ) && player.retreivedblades > 0 ) + { + player.retreivedblades--; + player addweaponstat( weapon, "kill_retrieved_blade", 1 ); + } + } + } + + lethalgrenadekill = 0; + + switch ( weapon ) + { + case "bouncingbetty_mp": + lethalgrenadekill = 1; + player notify( "lethalGrenadeKill" ); + break; + case "hatchet_mp": + player bladekill(); + lethalgrenadekill = 1; + player notify( "lethalGrenadeKill" ); + + if ( isdefined( lastweaponbeforetoss ) ) + { + if ( lastweaponbeforetoss == level.riotshield_name ) + { + player addweaponstat( level.riotshield_name, "hatchet_kill_with_shield_equiped", 1 ); + player addplayerstat( "hatchet_kill_with_shield_equiped", 1 ); + } + } + + break; + case "claymore_mp": + lethalgrenadekill = 1; + player notify( "lethalGrenadeKill" ); + player addplayerstat( "kill_with_claymore", 1 ); + + if ( data.washacked ) + player addplayerstat( "kill_with_hacked_claymore", 1 ); + + break; + case "satchel_charge_mp": + lethalgrenadekill = 1; + player notify( "lethalGrenadeKill" ); + player addplayerstat( "kill_with_c4", 1 ); + break; + case "destructible_car_mp": + player addplayerstat( "kill_enemy_withcar", 1 ); + + if ( isdefined( inflictor.destroyingweapon ) ) + player addweaponstat( inflictor.destroyingweapon, "kills_from_cars", 1 ); + + break; + case "sticky_grenade_mp": + lethalgrenadekill = 1; + player notify( "lethalGrenadeKill" ); + + if ( isdefined( victim.explosiveinfo["stuckToPlayer"] ) && victim.explosiveinfo["stuckToPlayer"] == victim ) + { + attacker.pers["stickExplosiveKill"]++; + + if ( attacker.pers["stickExplosiveKill"] >= 5 ) + { + attacker.pers["stickExplosiveKill"] = 0; + player addplayerstat( "stick_explosive_kill_5_onegame", 1 ); + } + } + + break; + case "frag_grenade_mp": + lethalgrenadekill = 1; + player notify( "lethalGrenadeKill" ); + + if ( isdefined( data.victim.explosiveinfo["cookedKill"] ) && data.victim.explosiveinfo["cookedKill"] == 1 ) + player addplayerstat( "kill_with_cooked_grenade", 1 ); + + if ( isdefined( data.victim.explosiveinfo["throwbackKill"] ) && data.victim.explosiveinfo["throwbackKill"] == 1 ) + player addplayerstat( "kill_with_tossed_back_lethal", 1 ); + + break; + case "explosive_bolt_mp": + case "crossbow_mp": + if ( !isdefined( player.crossbowclipkillcount ) ) + player.crossbowclipkillcount = 0; + + player.crossbowclipkillcount++; + + if ( player.crossbowclipkillcount >= weaponclipsize( "crossbow_mp" ) ) + { + player.crossbowclipkillcount = 0; + player addweaponstat( "crossbow_mp", "crossbow_kill_clip", 1 ); + } + + break; + } + + if ( lethalgrenadekill ) + { + if ( player isbonuscardactive( 6, player.class_num ) ) + { + player addbonuscardstat( 6, "kills", 1, player.class_num ); + + if ( !isdefined( player.pers["dangerCloseKills"] ) ) + player.pers["dangerCloseKills"] = 0; + + player.pers["dangerCloseKills"]++; + + if ( player.pers["dangerCloseKills"] == 5 ) + player addplayerstat( "kill_with_dual_lethal_grenades", 1 ); + } + } + + player perkkills( victim, isstunned, time ); +} + +perkkills( victim, isstunned, time ) +{ + player = self; + + if ( player hasperk( "specialty_movefaster" ) ) + player addplayerstat( "perk_movefaster_kills", 1 ); + + if ( player hasperk( "specialty_noname" ) ) + player addplayerstat( "perk_noname_kills", 1 ); + + if ( player hasperk( "specialty_quieter" ) ) + player addplayerstat( "perk_quieter_kills", 1 ); + + if ( player hasperk( "specialty_longersprint" ) ) + { + if ( isdefined( player.lastsprinttime ) && gettime() - player.lastsprinttime < 2500 ) + player addplayerstat( "perk_longersprint", 1 ); + } + + if ( player hasperk( "specialty_fastmantle" ) ) + { + if ( isdefined( player.lastsprinttime ) && gettime() - player.lastsprinttime < 2500 && player playerads() >= 1 ) + player addplayerstat( "perk_fastmantle_kills", 1 ); + } + + if ( player hasperk( "specialty_loudenemies" ) ) + player addplayerstat( "perk_loudenemies_kills", 1 ); + + if ( isstunned == 1 && player hasperk( "specialty_stunprotection" ) ) + player addplayerstat( "perk_protection_stun_kills", 1 ); + + assert( isdefined( victim.activecounteruavs ) ); + activeemp = 0; + + if ( level.teambased ) + { + foreach ( team in level.teams ) + { + if ( team == player.team ) + continue; + + if ( isdefined( level.empowners[team] ) ) + { + activeemp = 1; + break; + } + } + } + else if ( isdefined( level.empplayer ) ) + { + if ( level.empplayer != player ) + activeemp = 1; + } + + activecuav = 0; + + if ( level.teambased ) + { + foreach ( team in level.teams ) + { + if ( team == player.team ) + continue; + + if ( level.activecounteruavs[team] > 0 ) + { + activecuav = 1; + break; + } + } + } + else + { + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] != player ) + { + if ( isdefined( level.activecounteruavs[players[i].entnum] ) && level.activecounteruavs[players[i].entnum] > 0 ) + { + activecuav = 1; + break; + } + } + } + } + + if ( activecuav == 1 || activeemp == 1 ) + { + if ( player hasperk( "specialty_immunecounteruav" ) ) + player addplayerstat( "perk_immune_cuav_kills", 1 ); + } + + activeuavvictim = 0; + + if ( level.teambased ) + { + if ( level.activeuavs[victim.team] > 0 ) + activeuavvictim = 1; + } + else + activeuavvictim = isdefined( level.activeuavs[victim.entnum] ) && level.activeuavs[victim.entnum] > 0; + + if ( activeuavvictim == 1 ) + { + if ( player hasperk( "specialty_gpsjammer" ) ) + player addplayerstat( "perk_gpsjammer_immune_kills", 1 ); + } + + if ( player.lastweaponchange + 5000 > time ) + { + if ( player hasperk( "specialty_fastweaponswitch" ) ) + player addplayerstat( "perk_fastweaponswitch_kill_after_swap", 1 ); + } + + if ( player.scavenged == 1 ) + { + if ( player hasperk( "specialty_scavenger" ) ) + player addplayerstat( "perk_scavenger_kills_after_resupply", 1 ); + } +} + +flakjacketprotected( weapon, attacker ) +{ + if ( weapon == "claymore_mp" ) + self.flakjacketclaymore[attacker.clientid] = 1; + + self addplayerstat( "perk_flak_survive", 1 ); +} + +earnedkillstreak() +{ + if ( self hasperk( "specialty_earnmoremomentum" ) ) + self addplayerstat( "perk_earnmoremomentum_earn_streak", 1 ); +} + +genericbulletkill( data, victim, weapon ) +{ + player = self; + time = data.time; + + if ( player.pers["lastBulletKillTime"] == time ) + player.pers["bulletStreak"]++; + else + player.pers["bulletStreak"] = 1; + + player.pers["lastBulletKillTime"] = time; + + if ( data.victim.idflagstime == time ) + { + if ( data.victim.idflags & level.idflags_penetration ) + { + player addplayerstat( "kill_enemy_through_wall", 1 ); + + if ( isdefined( weapon ) && weaponhasattachment( weapon, "fmj" ) ) + player addplayerstat( "kill_enemy_through_wall_with_fmj", 1 ); + } + } +} + +ishighestscoringplayer( player ) +{ + if ( !isdefined( player.score ) || player.score < 1 ) + return false; + + players = level.players; + + if ( level.teambased ) + team = player.pers["team"]; + else + team = "all"; + + highscore = player.score; + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i].score ) ) + continue; + + if ( players[i] == player ) + continue; + + if ( players[i].score < 1 ) + continue; + + if ( team != "all" && players[i].pers["team"] != team ) + continue; + + if ( players[i].score >= highscore ) + return false; + } + + return true; +} + +spawnwatcher() +{ + self endon( "disconnect" ); + self.pers["stickExplosiveKill"] = 0; + self.pers["pistolHeadshot"] = 0; + self.pers["assaultRifleHeadshot"] = 0; + self.pers["killNemesis"] = 0; + + while ( true ) + { + self waittill( "spawned_player" ); + + self.pers["longshotsPerLife"] = 0; + self.flakjacketclaymore = []; + self.weaponkills = []; + self.attachmentkills = []; + self.retreivedblades = 0; + self.lastreloadtime = 0; + self.crossbowclipkillcount = 0; + self thread watchfordtp(); + self thread watchformantle(); + self thread monitor_player_sprint(); + } +} + +pickedupballisticknife() +{ + self.retreivedblades++; +} + +watchfordtp() +{ + self endon( "disconnect" ); + self endon( "death" ); + + for ( self.dtptime = 0; 1; self.dtptime = gettime() + 4000 ) + self waittill( "dtp_end" ); +} + +watchformantle() +{ + self endon( "disconnect" ); + self endon( "death" ); + + for ( self.mantletime = 0; 1; self.mantletime = mantleendtime ) + self waittill( "mantle_start", mantleendtime ); +} + +disarmedhackedcarepackage() +{ + self addplayerstat( "disarm_hacked_carepackage", 1 ); +} + +destroyed_car() +{ + if ( !isdefined( self ) || !isplayer( self ) ) + return; + + self addplayerstat( "destroy_car", 1 ); +} + +killednemesis() +{ + self.pers["killNemesis"]++; + + if ( self.pers["killNemesis"] >= 5 ) + { + self.pers["killNemesis"] = 0; + self addplayerstat( "kill_nemesis", 1 ); + } +} + +killwhiledamagingwithhpm() +{ + self addplayerstat( "kill_while_damaging_with_microwave_turret", 1 ); +} + +longdistancehatchetkill() +{ + self addplayerstat( "long_distance_hatchet_kill", 1 ); +} + +blockedsatellite() +{ + self addplayerstat( "activate_cuav_while_enemy_satelite_active", 1 ); +} + +longdistancekill() +{ + self.pers["longshotsPerLife"]++; + + if ( self.pers["longshotsPerLife"] >= 3 ) + { + self.pers["longshotsPerLife"] = 0; + self addplayerstat( "longshot_3_onelife", 1 ); + } +} + +challengeroundend( data ) +{ + player = data.player; + winner = data.winner; + + if ( endedearly( winner ) ) + return; + + if ( level.teambased ) + { + winnerscore = game["teamScores"][winner]; + loserscore = getlosersteamscores( winner ); + } + + switch ( level.gametype ) + { + case "sd": + if ( player.team == winner ) + { + if ( game["challenge"][winner]["allAlive"] ) + player addgametypestat( "round_win_no_deaths", 1 ); + + if ( isdefined( player.lastmansddefeat3enemies ) ) + player addgametypestat( "last_man_defeat_3_enemies", 1 ); + } + + break; + default: + break; + } +} + +roundend( winner ) +{ + wait 0.05; + data = spawnstruct(); + data.time = gettime(); + + if ( level.teambased ) + { + if ( isdefined( winner ) && isdefined( level.teams[winner] ) ) + data.winner = winner; + } + else if ( isdefined( winner ) ) + data.winner = winner; + + for ( index = 0; index < level.placement["all"].size; index++ ) + { + data.player = level.placement["all"][index]; + data.place = index; + dochallengecallback( "roundEnd", data ); + } +} + +gameend( winner ) +{ + wait 0.05; + data = spawnstruct(); + data.time = gettime(); + + if ( level.teambased ) + { + if ( isdefined( winner ) && isdefined( level.teams[winner] ) ) + data.winner = winner; + } + else if ( isdefined( winner ) && isplayer( winner ) ) + data.winner = winner; + + for ( index = 0; index < level.placement["all"].size; index++ ) + { + data.player = level.placement["all"][index]; + data.place = index; + dochallengecallback( "gameEnd", data ); + } +} + +getfinalkill( player ) +{ + if ( isplayer( player ) ) + player addplayerstat( "get_final_kill", 1 ); +} + +destroyrcbomb( weaponname ) +{ + self destroyscorestreak( weaponname ); + + if ( weaponname == "hatchet_mp" ) + self addplayerstat( "destroy_rcbomb_with_hatchet", 1 ); +} + +capturedcrate() +{ + if ( isdefined( self.lastrescuedby ) && isdefined( self.lastrescuedtime ) ) + { + if ( self.lastrescuedtime + 5000 > gettime() ) + self.lastrescuedby addplayerstat( "defend_teammate_who_captured_package", 1 ); + } +} + +destroyscorestreak( weaponname ) +{ + if ( isdefined( weaponname ) && weaponname == "qrdrone_turret_mp" ) + self addplayerstat( "destroy_score_streak_with_qrdrone", 1 ); +} + +capturedobjective( capturetime ) +{ + if ( isdefined( self.smokegrenadetime ) && isdefined( self.smokegrenadeposition ) ) + { + if ( self.smokegrenadetime + 14000 > capturetime ) + { + distsq = distancesquared( self.smokegrenadeposition, self.origin ); + + if ( distsq < 57600 ) + { + self addplayerstat( "capture_objective_in_smoke", 1 ); + self addweaponstat( "willy_pete_mp", "CombatRecordStat", 1 ); + } + else + { + + } + } + } +} + +hackedordestroyedequipment() +{ + if ( self hasperk( "specialty_showenemyequipment" ) ) + self addplayerstat( "perk_hacker_destroy", 1 ); +} + +destroyedequipment( weaponname ) +{ + if ( isdefined( weaponname ) && weaponname == "emp_grenade_mp" ) + { + self addplayerstat( "destroy_equipment_with_emp_grenade", 1 ); + self addweaponstat( "emp_grenade_mp", "combatRecordStat", 1 ); + } + + self addplayerstat( "destroy_equipment", 1 ); + self hackedordestroyedequipment(); +} + +destroyedtacticalinsert() +{ + if ( !isdefined( self.pers["tacticalInsertsDestroyed"] ) ) + self.pers["tacticalInsertsDestroyed"] = 0; + + self.pers["tacticalInsertsDestroyed"]++; + + if ( self.pers["tacticalInsertsDestroyed"] >= 5 ) + { + self.pers["tacticalInsertsDestroyed"] = 0; + self addplayerstat( "destroy_5_tactical_inserts", 1 ); + } +} + +bladekill() +{ + if ( !isdefined( self.pers["bladeKills"] ) ) + self.pers["bladeKills"] = 0; + + self.pers["bladeKills"]++; + + if ( self.pers["bladeKills"] >= 15 ) + { + self.pers["bladeKills"] = 0; + self addplayerstat( "kill_15_with_blade", 1 ); + } +} + +destroyedexplosive( weaponname ) +{ + self destroyedequipment( weaponname ); + self addplayerstat( "destroy_explosive", 1 ); +} + +assisted() +{ + self addplayerstat( "assist", 1 ); +} + +earnedmicrowaveassistscore( score ) +{ + self addplayerstat( "assist_score_microwave_turret", score ); + self addplayerstat( "assist_score_killstreak", score ); +} + +earnedcuavassistscore( score ) +{ + self addplayerstat( "assist_score_cuav", score ); + self addplayerstat( "assist_score_killstreak", score ); + self addweaponstat( "counteruav_mp", "assists", 1 ); +} + +earneduavassistscore( score ) +{ + self addplayerstat( "assist_score_uav", score ); + self addplayerstat( "assist_score_killstreak", score ); + self addweaponstat( "radar_mp", "assists", 1 ); +} + +earnedsatelliteassistscore( score ) +{ + self addplayerstat( "assist_score_satellite", score ); + self addplayerstat( "assist_score_killstreak", score ); + self addweaponstat( "radardirection_mp", "assists", 1 ); +} + +earnedempassistscore( score ) +{ + self addplayerstat( "assist_score_emp", score ); + self addplayerstat( "assist_score_killstreak", score ); + self addweaponstat( "emp_mp", "assists", 1 ); +} + +teamcompletedchallenge( team, challenge ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].team ) && players[i].team == team ) + players[i] addgametypestat( challenge, 1 ); + } +} + +endedearly( winner ) +{ + if ( level.hostforcedend ) + return true; + + if ( !isdefined( winner ) ) + return true; + + if ( level.teambased ) + { + if ( winner == "tie" ) + return true; + } + + return false; +} + +getlosersteamscores( winner ) +{ + teamscores = 0; + + foreach ( team in level.teams ) + { + if ( team == winner ) + continue; + + teamscores += game["teamScores"][team]; + } + + return teamscores; +} + +didloserfailchallenge( winner, challenge ) +{ + foreach ( team in level.teams ) + { + if ( team == winner ) + continue; + + if ( game["challenge"][team][challenge] ) + return false; + } + + return true; +} + +challengegameend( data ) +{ + player = data.player; + winner = data.winner; + + if ( isdefined( level.scoreeventgameendcallback ) ) + [[ level.scoreeventgameendcallback ]]( data ); + + if ( endedearly( winner ) ) + return; + + if ( level.teambased ) + { + winnerscore = game["teamScores"][winner]; + loserscore = getlosersteamscores( winner ); + } + + switch ( level.gametype ) + { + case "tdm": + if ( player.team == winner ) + { + if ( winnerscore >= loserscore + 20 ) + player addgametypestat( "CRUSH", 1 ); + } + + mostkillsleastdeaths = 1; + + for ( index = 0; index < level.placement["all"].size; index++ ) + { + if ( level.placement["all"][index].deaths < player.deaths ) + mostkillsleastdeaths = 0; + + if ( level.placement["all"][index].kills > player.kills ) + mostkillsleastdeaths = 0; + } + + if ( mostkillsleastdeaths && player.kills > 0 && level.placement["all"].size > 3 ) + player addgametypestat( "most_kills_least_deaths", 1 ); + + break; + case "dm": + if ( player == winner ) + { + if ( level.placement["all"].size >= 2 ) + { + secondplace = level.placement["all"][1]; + + if ( player.kills >= secondplace.kills + 7 ) + player addgametypestat( "CRUSH", 1 ); + } + } + + break; + case "ctf": + if ( player.team == winner ) + { + if ( loserscore == 0 ) + player addgametypestat( "SHUT_OUT", 1 ); + } + + break; + case "dom": + if ( player.team == winner ) + { + if ( winnerscore >= loserscore + 70 ) + player addgametypestat( "CRUSH", 1 ); + } + + break; + case "hq": + if ( player.team == winner && winnerscore > 0 ) + { + if ( winnerscore >= loserscore + 70 ) + player addgametypestat( "CRUSH", 1 ); + } + + break; + case "koth": + if ( player.team == winner && winnerscore > 0 ) + { + if ( winnerscore >= loserscore + 70 ) + player addgametypestat( "CRUSH", 1 ); + } + + if ( player.team == winner && winnerscore > 0 ) + { + if ( winnerscore >= loserscore + 110 ) + player addgametypestat( "ANNIHILATION", 1 ); + } + + break; + case "dem": + if ( player.team == game["defenders"] && player.team == winner ) + { + if ( loserscore == 0 ) + player addgametypestat( "SHUT_OUT", 1 ); + } + + break; + case "sd": + if ( player.team == winner ) + { + if ( loserscore <= 1 ) + player addgametypestat( "CRUSH", 1 ); + } + default: + break; + } +} + +multikill( killcount, weapon ) +{ + if ( killcount >= 3 && isdefined( self.lastkillwheninjured ) ) + { + if ( self.lastkillwheninjured + 5000 > gettime() ) + self addplayerstat( "multikill_3_near_death", 1 ); + } +} + +domattackermultikill( killcount ) +{ + self addgametypestat( "kill_2_enemies_capturing_your_objective", 1 ); +} + +totaldomination( team ) +{ + teamcompletedchallenge( team, "control_3_points_3_minutes" ); +} + +holdflagentirematch( team, label ) +{ + switch ( label ) + { + case "_a": + event = "hold_a_entire_match"; + break; + case "_b": + event = "hold_b_entire_match"; + break; + case "_c": + event = "hold_c_entire_match"; + break; + default: + return; + } + + teamcompletedchallenge( team, event ); +} + +capturedbfirstminute() +{ + self addgametypestat( "capture_b_first_minute", 1 ); +} + +controlzoneentirely( team ) +{ + teamcompletedchallenge( team, "control_zone_entirely" ); +} + +multi_lmg_smg_kill() +{ + self addplayerstat( "multikill_3_lmg_or_smg_hip_fire", 1 ); +} + +killedzoneattacker( weapon ) +{ + if ( weapon == "planemortar_mp" || weapon == "remote_missile_missile_mp" || weapon == "remote_missile_bomblet_mp" ) + self thread updatezonemultikills(); +} + +killeddog() +{ + origin = self.origin; + + if ( level.teambased ) + { + teammates = get_team_alive_players_s( self.team ); + + foreach ( player in teammates.a ) + { + if ( player == self ) + continue; + + distsq = distancesquared( origin, player.origin ); + + if ( distsq < 57600 ) + { + self addplayerstat( "killed_dog_close_to_teammate", 1 ); + break; + } + } + } +} + +updatezonemultikills() +{ + self endon( "disconnect" ); + level endon( "game_ended" ); + self notify( "updateRecentZoneKills" ); + self endon( "updateRecentZoneKills" ); + + if ( !isdefined( self.recentzonekillcount ) ) + self.recentzonekillcount = 0; + + self.recentzonekillcount++; + wait 4.0; + + if ( self.recentzonekillcount > 1 ) + self addplayerstat( "multikill_2_zone_attackers", 1 ); + + self.recentzonekillcount = 0; +} + +multi_rcbomb_kill() +{ + self addplayerstat( "muiltikill_2_with_rcbomb", 1 ); +} + +multi_remotemissile_kill() +{ + self addplayerstat( "multikill_3_remote_missile", 1 ); +} + +multi_mgl_kill() +{ + self addplayerstat( "multikill_3_with_mgl", 1 ); +} + +immediatecapture() +{ + self addgametypestat( "immediate_capture", 1 ); +} + +killedlastcontester() +{ + self addgametypestat( "contest_then_capture", 1 ); +} + +bothbombsdetonatewithintime() +{ + self addgametypestat( "both_bombs_detonate_10_seconds", 1 ); +} + +fullclipnomisses( weaponclass, weapon ) +{ + +} + +destroyedturret( weaponname ) +{ + self destroyscorestreak( weaponname ); + self addplayerstat( "destroy_turret", 1 ); +} + +calledincarepackage() +{ + self.pers["carepackagesCalled"]++; + + if ( self.pers["carepackagesCalled"] >= 3 ) + { + self addplayerstat( "call_in_3_care_packages", 1 ); + self.pers["carepackagesCalled"] = 0; + } +} + +destroyedhelicopter( attacker, weapon, damagetype, playercontrolled ) +{ + attacker destroyscorestreak( weapon ); + + if ( damagetype == "MOD_RIFLE_BULLET" || damagetype == "MOD_PISTOL_BULLET" ) + attacker addplayerstat( "destroyed_helicopter_with_bullet", 1 ); +} + +destroyedqrdrone( damagetype, weapon ) +{ + self destroyscorestreak( weapon ); + self addplayerstat( "destroy_qrdrone", 1 ); + + if ( damagetype == "MOD_RIFLE_BULLET" || damagetype == "MOD_PISTOL_BULLET" ) + self addplayerstat( "destroyed_qrdrone_with_bullet", 1 ); + + self destroyedplayercontrolledaircraft(); +} + +destroyedplayercontrolledaircraft() +{ + if ( self hasperk( "specialty_noname" ) ) + self addplayerstat( "destroy_helicopter", 1 ); +} + +destroyedaircraft( attacker, weapon ) +{ + attacker destroyscorestreak( weapon ); + + if ( isdefined( weapon ) ) + { + if ( weapon == "emp_mp" || weapon == "killstreak_emp_mp" ) + attacker addplayerstat( "destroy_aircraft_with_emp", 1 ); + else if ( weapon == "missile_drone_projectile_mp" || weapon == "missile_drone_mp" ) + attacker addplayerstat( "destroy_aircraft_with_missile_drone", 1 ); + } + + if ( attacker hasperk( "specialty_nottargetedbyairsupport" ) ) + attacker addplayerstat( "perk_nottargetedbyairsupport_destroy_aircraft", 1 ); + + attacker addplayerstat( "destroy_aircraft", 1 ); +} + +killstreakten() +{ + primary = self getloadoutitem( self.class_num, "primary" ); + + if ( primary != 0 ) + return; + + secondary = self getloadoutitem( self.class_num, "secondary" ); + + if ( secondary != 0 ) + return; + + primarygrenade = self getloadoutitem( self.class_num, "primarygrenade" ); + + if ( primarygrenade != 0 ) + return; + + specialgrenade = self getloadoutitem( self.class_num, "specialgrenade" ); + + if ( specialgrenade != 0 ) + return; + + for ( numspecialties = 0; numspecialties < level.maxspecialties; numspecialties++ ) + { + perk = self getloadoutitem( self.class_num, "specialty" + ( numspecialties + 1 ) ); + + if ( perk != 0 ) + return; + } + + self addplayerstat( "killstreak_10_no_weapons_perks", 1 ); +} + +scavengedgrenade() +{ + self endon( "disconnect" ); + self endon( "death" ); + self notify( "scavengedGrenade" ); + self endon( "scavengedGrenade" ); + + for (;;) + { + self waittill( "lethalGrenadeKill" ); + + self addplayerstat( "kill_with_resupplied_lethal_grenade", 1 ); + } +} + +stunnedtankwithempgrenade( attacker ) +{ + attacker addplayerstat( "stun_aitank_wIth_emp_grenade", 1 ); +} + +playerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, shitloc, attackerstance ) +{ +/# + print( level.gametype ); +#/ + self.anglesondeath = self getplayerangles(); + + if ( isdefined( attacker ) ) + attacker.anglesonkill = attacker getplayerangles(); + + if ( !isdefined( sweapon ) ) + sweapon = "none"; + + self endon( "disconnect" ); + data = spawnstruct(); + data.victim = self; + data.victimstance = self getstance(); + data.einflictor = einflictor; + data.attacker = attacker; + data.attackerstance = attackerstance; + data.idamage = idamage; + data.smeansofdeath = smeansofdeath; + data.sweapon = sweapon; + data.shitloc = shitloc; + data.time = gettime(); + + if ( isdefined( einflictor ) && isdefined( einflictor.lastweaponbeforetoss ) ) + data.lastweaponbeforetoss = einflictor.lastweaponbeforetoss; + + if ( isdefined( einflictor ) && isdefined( einflictor.ownerweaponatlaunch ) ) + data.ownerweaponatlaunch = einflictor.ownerweaponatlaunch; + + waslockingon = 0; + + if ( isdefined( einflictor.locking_on ) ) + waslockingon |= einflictor.locking_on; + + if ( isdefined( einflictor.locked_on ) ) + waslockingon |= einflictor.locked_on; + + waslockingon &= 1 << data.victim.entnum; + + if ( waslockingon != 0 ) + data.waslockingon = 1; + else + data.waslockingon = 0; + + data.washacked = einflictor maps\mp\_utility::ishacked(); + data.wasplanting = data.victim.isplanting; + + if ( !isdefined( data.wasplanting ) ) + data.wasplanting = 0; + + data.wasdefusing = data.victim.isdefusing; + + if ( !isdefined( data.wasdefusing ) ) + data.wasdefusing = 0; + + data.victimweapon = data.victim.currentweapon; + data.victimonground = data.victim isonground(); + + if ( isplayer( attacker ) ) + { + data.attackeronground = data.attacker isonground(); + + if ( !isdefined( data.attackerstance ) ) + data.attackerstance = data.attacker getstance(); + } + else + { + data.attackeronground = 0; + data.attackerstance = "stand"; + } + + waitandprocessplayerkilledcallback( data ); + data.attacker notify( "playerKilledChallengesProcessed" ); +} + +waittillslowprocessallowed() +{ + while ( level.lastslowprocessframe == gettime() ) + wait 0.05; + + level.lastslowprocessframe = gettime(); +} + +doscoreeventcallback( callback, data ) +{ + if ( !isdefined( level.scoreeventcallbacks ) ) + return; + + if ( !isdefined( level.scoreeventcallbacks[callback] ) ) + return; + + if ( isdefined( data ) ) + { + for ( i = 0; i < level.scoreeventcallbacks[callback].size; i++ ) + thread [[ level.scoreeventcallbacks[callback][i] ]]( data ); + } + else + { + for ( i = 0; i < level.scoreeventcallbacks[callback].size; i++ ) + thread [[ level.scoreeventcallbacks[callback][i] ]](); + } +} + +waitandprocessplayerkilledcallback( data ) +{ + if ( isdefined( data.attacker ) ) + data.attacker endon( "disconnect" ); + + wait 0.05; + waittillslowprocessallowed(); + level thread dochallengecallback( "playerKilled", data ); + level thread doscoreeventcallback( "playerKilled", data ); +} + +weaponisknife( weapon ) +{ + if ( weapon == "knife_held_mp" || weapon == "knife_mp" || weapon == "knife_ballistic_mp" ) + return true; + + return false; +} + +eventreceived( eventname ) +{ + self endon( "disconnect" ); + waittillslowprocessallowed(); + + switch ( level.gametype ) + { + case "tdm": + if ( eventname == "killstreak_10" ) + self addgametypestat( "killstreak_10", 1 ); + else if ( eventname == "killstreak_15" ) + self addgametypestat( "killstreak_15", 1 ); + else if ( eventname == "killstreak_20" ) + self addgametypestat( "killstreak_20", 1 ); + else if ( eventname == "multikill_3" ) + self addgametypestat( "multikill_3", 1 ); + else if ( eventname == "kill_enemy_who_killed_teammate" ) + self addgametypestat( "kill_enemy_who_killed_teammate", 1 ); + else if ( eventname == "kill_enemy_injuring_teammate" ) + self addgametypestat( "kill_enemy_injuring_teammate", 1 ); + + break; + case "dm": + if ( eventname == "killstreak_10" ) + self addgametypestat( "killstreak_10", 1 ); + else if ( eventname == "killstreak_15" ) + self addgametypestat( "killstreak_15", 1 ); + else if ( eventname == "killstreak_20" ) + self addgametypestat( "killstreak_20", 1 ); + else if ( eventname == "killstreak_30" ) + self addgametypestat( "killstreak_30", 1 ); + + break; + case "sd": + if ( eventname == "defused_bomb_last_man_alive" ) + self addgametypestat( "defused_bomb_last_man_alive", 1 ); + else if ( eventname == "elimination_and_last_player_alive" ) + self addgametypestat( "elimination_and_last_player_alive", 1 ); + else if ( eventname == "killed_bomb_planter" ) + self addgametypestat( "killed_bomb_planter", 1 ); + else if ( eventname == "killed_bomb_defuser" ) + self addgametypestat( "killed_bomb_defuser", 1 ); + + break; + case "ctf": + if ( eventname == "kill_flag_carrier" ) + self addgametypestat( "kill_flag_carrier", 1 ); + else if ( eventname == "defend_flag_carrier" ) + self addgametypestat( "defend_flag_carrier", 1 ); + + break; + case "dem": + if ( eventname == "killed_bomb_planter" ) + self addgametypestat( "killed_bomb_planter", 1 ); + else if ( eventname == "killed_bomb_defuser" ) + self addgametypestat( "killed_bomb_defuser", 1 ); + + break; + default: + break; + } +} + +monitor_player_sprint() +{ + self endon( "disconnect" ); + self endon( "death" ); + + for ( self.lastsprinttime = undefined; 1; self.lastsprinttime = gettime() ) + { + self waittill( "sprint_begin" ); + + self waittill( "sprint_end" ); + } +} diff --git a/ZM/Core/maps/mp/_compass.gsc b/ZM/Core/maps/mp/_compass.gsc new file mode 100644 index 0000000..d2e8842 --- /dev/null +++ b/ZM/Core/maps/mp/_compass.gsc @@ -0,0 +1,76 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +setupminimap( material ) +{ + requiredmapaspectratio = getdvarfloat( "scr_RequiredMapAspectratio" ); + corners = getentarray( "minimap_corner", "targetname" ); + + if ( corners.size != 2 ) + { +/# + println( "^1Error: There are not exactly two \"minimap_corner\" entities in the map. Could not set up minimap." ); +#/ + return; + } + + corner0 = ( corners[0].origin[0], corners[0].origin[1], 0 ); + corner1 = ( corners[1].origin[0], corners[1].origin[1], 0 ); + cornerdiff = corner1 - corner0; + north = ( cos( getnorthyaw() ), sin( getnorthyaw() ), 0 ); + west = ( 0 - north[1], north[0], 0 ); + + if ( vectordot( cornerdiff, west ) > 0 ) + { + if ( vectordot( cornerdiff, north ) > 0 ) + { + northwest = corner1; + southeast = corner0; + } + else + { + side = vecscale( north, vectordot( cornerdiff, north ) ); + northwest = corner1 - side; + southeast = corner0 + side; + } + } + else if ( vectordot( cornerdiff, north ) > 0 ) + { + side = vecscale( north, vectordot( cornerdiff, north ) ); + northwest = corner0 + side; + southeast = corner1 - side; + } + else + { + northwest = corner0; + southeast = corner1; + } + + if ( requiredmapaspectratio > 0 ) + { + northportion = vectordot( northwest - southeast, north ); + westportion = vectordot( northwest - southeast, west ); + mapaspectratio = westportion / northportion; + + if ( mapaspectratio < requiredmapaspectratio ) + { + incr = requiredmapaspectratio / mapaspectratio; + addvec = vecscale( west, westportion * ( incr - 1 ) * 0.5 ); + } + else + { + incr = mapaspectratio / requiredmapaspectratio; + addvec = vecscale( north, northportion * ( incr - 1 ) * 0.5 ); + } + + northwest += addvec; + southeast -= addvec; + } + + setminimap( material, northwest[0], northwest[1], southeast[0], southeast[1] ); +} + +vecscale( vec, scalar ) +{ + return ( vec[0] * scalar, vec[1] * scalar, vec[2] * scalar ); +} diff --git a/ZM/Core/maps/mp/_createfx.gsc b/ZM/Core/maps/mp/_createfx.gsc new file mode 100644 index 0000000..4353be1 --- /dev/null +++ b/ZM/Core/maps/mp/_createfx.gsc @@ -0,0 +1,2944 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\_createfxmenu; +#include maps\mp\_createfxundo; +#include maps\mp\_fx; +#include maps\mp\_script_gen; + +createfx() +{ +/# + println( "^2Running CreateFX 2.0" ); +#/ + if ( ismp() ) + { + init_mp_paths(); + level.timelimitoverride = 1; + } + else + init_sp_paths(); + + precachemodel( "fx_axis_createfx" ); + precacheshader( "black" ); + + if ( getdvar( "createfx_scaleid" ) == "" ) + setdvar( "createfx_scaleid", "0.5" ); + + if ( getdvar( "createfx_print_frames" ) == "" ) + setdvar( "createfx_print_frames", "3" ); + + if ( getdvar( "createfx_drawaxis" ) == "" ) + setdvar( "createfx_drawaxis", "1" ); + + if ( getdvar( "createfx_drawaxis_range" ) == "" ) + setdvar( "createfx_drawaxis_range", "2000" ); + + if ( getdvar( "createfx_autosave_time" ) == "" ) + setdvar( "createfx_autosave_time", "300" ); + + if ( getdvar( "createfx_oneshot_min_delay" ) == "" ) + setdvar( "createfx_oneshot_min_delay", "-100" ); + + if ( getdvar( "createfx_oneshot_max_delay" ) == "" ) + setdvar( "createfx_oneshot_max_delay", "-15" ); + + flag_init( "createfx_saving" ); + + if ( !isdefined( level.createfx ) ) + level.createfx = []; + + if ( !isdefined( level.cfx_uniqueid ) ) + level.cfx_uniqueid = 0; + + level.cfx_last_action = "none"; + + if ( !ismp() ) + level thread [[ level.cfx_func_run_gump_func ]](); + + if ( isdefined( level.createfx_callback_thread ) ) + level thread [[ level.createfx_callback_thread ]](); + + if ( ismp() ) + { + level.callbackplayerdisconnect = ::empty; + level.callbackplayerdamage = ::damage_void; + level.callbackplayerkilled = ::empty; + level.callbackplayerconnect = ::callback_playerconnect; + + while ( !isdefined( level.player ) ) + wait 0.05; + + thread createfxdelay(); + } + + level.is_camera_on = 0; + thread createfxlogic(); + + level waittill( "eternity" ); +} + +fx_init() +{ + if ( ismp() ) + init_client_mp_variables(); + else + init_client_sp_variables(); + + level.exploderfunction = level.cfx_exploder_before; + waittillframeend; + waittillframeend; + level.exploderfunction = level.cfx_exploder_after; + level.non_fx_ents = 0; + + if ( level.createfx_enabled ) + { + triggers = getentarray( "trigger_multiple", "classname" ); + + for ( i = 0; i < triggers.size; i++ ) + triggers[i] delete(); + + triggers = getentarray( "trigger_once", "classname" ); + + for ( i = 0; i < triggers.size; i++ ) + triggers[i] delete(); + + triggers = getentarray( "trigger_box", "classname" ); + + for ( i = 0; i < triggers.size; i++ ) + triggers[i] delete(); + + triggers = getentarray( "trigger_radius", "classname" ); + + for ( i = 0; i < triggers.size; i++ ) + triggers[i] delete(); + + triggers = getentarray( "trigger_lookat", "classname" ); + + for ( i = 0; i < triggers.size; i++ ) + triggers[i] delete(); + + triggers = getentarray( "trigger_damage", "classname" ); + + for ( i = 0; i < triggers.size; i++ ) + triggers[i] delete(); + + sm = getentarray( "spawn_manager", "classname" ); + + for ( i = 0; i < sm.size; i++ ) + sm[i] delete(); + + delete_spawns(); + + if ( !ismp() ) + { + delete_arrays_in_sp(); +/# + println( "We're not in MP!" ); +#/ + } + } + + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + ent set_forward_and_up_vectors(); + + if ( level.clientscripts ) + { + if ( !level.createfx_enabled ) + continue; + } + + if ( isdefined( ent.model ) ) + level.non_fx_ents++; + + if ( ent.v["type"] == "loopfx" ) + ent thread [[ level.cfx_func_loopfx ]](); + + if ( ent.v["type"] == "oneshotfx" ) + ent thread [[ level.cfx_func_oneshotfx ]](); + + if ( ent.v["type"] == "soundfx" ) + ent thread [[ level.cfx_func_soundfx ]](); + } +} + +add_effect( name, effect ) +{ + if ( !isdefined( level._effect ) ) + level._effect = []; + + level._effect[name] = loadfx( effect ); +} + +createeffect( type, fxid ) +{ + ent = undefined; + + if ( !isdefined( level.createfx_enabled ) ) + level.createfx_enabled = getdvar( "createfx" ) != ""; + + if ( !isdefined( level.createfxent ) ) + level.createfxent = []; + + if ( level.createfx_enabled ) + { + if ( !isdefined( level.cfx_uniqueid ) ) + level.cfx_uniqueid = 0; + + ent = spawnstruct(); + ent.uniqueid = level.cfx_uniqueid; + level.cfx_uniqueid++; + } + else if ( type == "exploder" ) + ent = spawnstruct(); + else + { + if ( !isdefined( level._fake_createfx_struct ) ) + level._fake_createfx_struct = spawnstruct(); + + ent = level._fake_createfx_struct; + } + + level.createfxent[level.createfxent.size] = ent; + ent.v = []; + ent.v["type"] = type; + ent.v["fxid"] = fxid; + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["origin"] = ( 0, 0, 0 ); + ent.drawn = 1; + return ent; +} + +createloopsound() +{ + ent = spawnstruct(); + + if ( !isdefined( level.createfxent ) ) + level.createfxent = []; + + level.createfxent[level.createfxent.size] = ent; + ent.v = []; + ent.v["type"] = "soundfx"; + ent.v["fxid"] = "No FX"; + ent.v["soundalias"] = "nil"; + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["origin"] = ( 0, 0, 0 ); + ent.drawn = 1; + return ent; +} + +set_forward_and_up_vectors() +{ + self.v["up"] = anglestoup( self.v["angles"] ); + self.v["forward"] = anglestoforward( self.v["angles"] ); +} + +createfxlogic() +{ + waittillframeend; + menu_init(); + + if ( !ismp() ) + { + players = get_players(); + + if ( !isdefined( players ) || players.size == 0 ) + level waittill( "first_player_ready" ); + } +/# + adddebugcommand( "noclip" ); +#/ + if ( !isdefined( level._effect ) ) + level._effect = []; + + if ( getdvar( "createfx_map" ) == "" ) + setdvar( "createfx_map", level.script ); + else if ( getdvar( "createfx_map" ) == level.script ) + { + if ( !ismp() ) + { + playerpos = []; + playerpos[0] = getdvarint( _hash_274F266C ); + playerpos[1] = getdvarint( _hash_274F266D ); + playerpos[2] = getdvarint( _hash_274F266E ); + player = get_players()[0]; + player setorigin( ( playerpos[0], playerpos[1], playerpos[2] ) ); + } + } +/# + filename = level.cfx_server_scriptdata + level.script + "_fx.gsc"; + file = openfile( filename, "append" ); + level.write_error = ""; + + if ( file == -1 ) + level.write_error = filename; + else + closefile( file ); +#/ + level.createfxhudelements = []; + level.createfx_hudelements = 100; + stroffsetx = []; + stroffsety = []; + stroffsetx[0] = 0; + stroffsety[0] = 0; + stroffsetx[1] = 1; + stroffsety[1] = 1; + stroffsetx[2] = -2; + stroffsety[2] = 1; + setdvar( "fx", "nil" ); + crosshair = newdebughudelem(); + crosshair.location = 0; + crosshair.alignx = "center"; + crosshair.aligny = "middle"; + crosshair.foreground = 1; + crosshair.fontscale = 2; + crosshair.sort = 20; + crosshair.alpha = 1; + crosshair.x = 320; + crosshair.y = 233; + crosshair settext( "." ); + center_text_init(); + level.cleartextmarker = newdebughudelem(); + level.cleartextmarker.alpha = 0; + level.cleartextmarker settext( "marker" ); + + for ( i = 0; i < level.createfx_hudelements; i++ ) + { + newstrarray = []; + + for ( p = 0; p < 2; p++ ) + { + newstr = newhudelem(); + newstr.alignx = "left"; + newstr.location = 0; + newstr.foreground = 1; + newstr.fontscale = 1.1; + newstr.sort = 20 - p; + newstr.alpha = 1; + newstr.x = 0 + stroffsetx[p]; + newstr.y = 60 + stroffsety[p] + i * 15; + + if ( p > 0 ) + newstr.color = ( 0, 0, 0 ); + + newstrarray[newstrarray.size] = newstr; + } + + level.createfxhudelements[i] = newstrarray; + } + + level.selectedmove_up = 0; + level.selectedmove_forward = 0; + level.selectedmove_right = 0; + level.selectedrotate_pitch = 0; + level.selectedrotate_roll = 0; + level.selectedrotate_yaw = 0; + level.selected_fx = []; + level.selected_fx_ents = []; + level.createfx_lockedlist = []; + level.createfx_lockedlist["escape"] = 1; + level.createfx_lockedlist["BUTTON_LSHLDR"] = 1; + level.createfx_lockedlist["BUTTON_RSHLDR"] = 1; + level.createfx_lockedlist["mouse1"] = 1; + level.createfx_lockedlist["ctrl"] = 1; + level.createfx_draw_enabled = 1; + level.buttonisheld = []; + axismode = 0; + colors = []; + colors["loopfx"]["selected"] = ( 1.0, 1.0, 0.2 ); + colors["loopfx"]["highlighted"] = ( 0.4, 0.95, 1.0 ); + colors["loopfx"]["default"] = ( 0.3, 0.5, 1.0 ); + colors["oneshotfx"]["selected"] = ( 1.0, 1.0, 0.2 ); + colors["oneshotfx"]["highlighted"] = ( 0.33, 0.97, 1.0 ); + colors["oneshotfx"]["default"] = ( 0.1, 0.73, 0.73 ); + colors["exploder"]["selected"] = ( 1.0, 1.0, 0.2 ); + colors["exploder"]["highlighted"] = ( 1.0, 0.1, 0.1 ); + colors["exploder"]["default"] = ( 1.0, 0.1, 0.1 ); + colors["rainfx"]["selected"] = ( 1.0, 1.0, 0.2 ); + colors["rainfx"]["highlighted"] = ( 0.95, 0.4, 0.95 ); + colors["rainfx"]["default"] = ( 0.78, 0.0, 0.73 ); + colors["soundfx"]["selected"] = ( 1.0, 1.0, 0.2 ); + colors["soundfx"]["highlighted"] = ( 0.5, 1.0, 0.75 ); + colors["soundfx"]["default"] = ( 0.2, 0.9, 0.2 ); + lasthighlightedent = undefined; + level.fx_rotating = 0; + setmenu( "none" ); + level.createfx_selecting = 0; + level.createfx_last_player_origin = ( 0, 0, 0 ); + level.createfx_last_player_forward = ( 0, 0, 0 ); + level.createfx_last_view_change_test = 0; + player = get_players()[0]; + black = newdebughudelem(); + black.x = -120; + black.y = 200; + black.foreground = 0; + black setshader( "black", 250, 160 ); + black.alpha = 0; + level.createfx_inputlocked = 0; + help_on_last_frame = 0; + + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + ent post_entity_creation_function(); + } + + thread draw_distance(); + lastselectentity = undefined; + thread createfx_autosave(); + + if ( !ismp() ) + make_sp_player_invulnerable( player ); + + for (;;) + { + player = get_players()[0]; + changedselectedents = 0; + right = anglestoright( player getplayerangles() ); + forward = anglestoforward( player getplayerangles() ); + up = anglestoup( player getplayerangles() ); + dot = 0.85; + placeent_vector = vectorscale( forward, 750 ); + level.createfxcursor = bullettrace( player geteye(), player geteye() + placeent_vector, 0, undefined ); + highlightedent = undefined; + level.buttonclick = []; + level.button_is_kb = []; + process_button_held_and_clicked(); + ctrlheld = button_is_held( "ctrl", "BUTTON_LSHLDR" ); + shiftheld = button_is_held( "shift" ); + functionheld = button_is_held( "f" ); + leftclick = button_is_clicked( "mouse1", "BUTTON_A" ); + leftheld = button_is_held( "mouse1", "BUTTON_A" ); + create_fx_menu(); + + if ( button_is_clicked( "BUTTON_X" ) || shiftheld && button_is_clicked( "x" ) ) + axismode = !axismode; + + if ( button_is_clicked( "F2" ) || functionheld && button_is_clicked( "2" ) ) + toggle_createfx_drawing(); + + if ( button_is_clicked( "F3" ) || functionheld && button_is_clicked( "3" ) ) + print_ambient_fx_inventory(); + + if ( button_is_clicked( "F5" ) || functionheld && button_is_clicked( "5" ) ) + createfx_save(); + + if ( button_is_clicked( "ins", "i" ) ) + insert_effect(); + + if ( button_is_clicked( "c" ) ) + { + if ( level.is_camera_on == 0 ) + { +/# + adddebugcommand( "noclip" ); +#/ + level thread handle_camera(); + level.is_camera_on = 1; + } + else if ( level.is_camera_on == 1 ) + { +/# + adddebugcommand( "noclip" ); +#/ + level notify( "new_camera" ); + level.is_camera_on = 0; + axismode = 0; + } + } + + if ( button_is_held( "BUTTON_RTRIG" ) && level.is_camera_on ) + axismode = 1; + else if ( !button_is_held( "BUTTON_RTRIG" ) && level.is_camera_on ) + axismode = 0; + + if ( button_is_clicked( "del" ) || !shiftheld && button_is_clicked( "d" ) ) + delete_pressed(); + + if ( button_is_clicked( "end" ) || shiftheld && button_is_clicked( "d" ) ) + { + drop_selection_to_ground(); + changedselectedents = 1; + } + + if ( button_is_clicked( "s" ) ) + { + setmenu( "select_by_property" ); + wait 0.05; + } + + if ( isdefined( level.cfx_selected_prop ) ) + { + if ( ctrlheld ) + select_ents_by_property( level.cfx_selected_prop, 1 ); + else + select_ents_by_property( level.cfx_selected_prop ); + + level.cfx_selected_prop = undefined; + } + + if ( button_is_clicked( "j" ) ) + { + setmenu( "jump_to_effect" ); + draw_effects_list( "Select effect to jump to:" ); + } + + if ( button_is_clicked( "escape" ) ) + clear_settable_fx(); + + if ( button_is_clicked( "space" ) && !shiftheld ) + set_off_exploders(); + + if ( button_is_clicked( "space" ) && shiftheld ) + turn_off_exploders(); + + if ( button_is_clicked( "tab", "BUTTON_RSHLDR" ) ) + { + move_selection_to_cursor(); + changedselectedents = 1; + } + + if ( button_is_clicked( "z" ) ) + { + if ( shiftheld ) + { + + } + else + undo(); + } + + if ( button_is_held( "q", "F1" ) ) + { + help_on_last_frame = 1; + show_help(); + wait 0.05; + continue; + } + else if ( help_on_last_frame == 1 ) + { + clear_fx_hudelements(); + help_on_last_frame = 0; + } + + if ( button_is_clicked( "BUTTON_LSTICK" ) && !ctrlheld ) + copy_ents(); + + if ( button_is_clicked( "BUTTON_RSTICK" ) ) + { + if ( ctrlheld ) + paste_ents_onto_ents(); + else + paste_ents(); + } + + if ( isdefined( level.selected_fx_option_index ) ) + menu_fx_option_set(); + + if ( button_is_held( "BUTTON_RTRIG" ) && button_is_held( "BUTTON_LTRIG" ) ) + { + move_player_around_map_fast(); + wait 0.25; + continue; + } + + if ( menu( "none" ) ) + { + if ( button_is_clicked( "rightarrow" ) ) + move_player_to_next_same_effect( 1, lastselectentity ); + else if ( button_is_clicked( "leftarrow" ) ) + move_player_to_next_same_effect( 0, lastselectentity ); + } + + if ( level.write_error != "" ) + { + level notify( "write_error" ); + thread write_error_msg( level.write_error ); + level.write_error = ""; + } + + highlightedent = level.fx_highlightedent; + + if ( leftclick || gettime() - level.createfx_last_view_change_test > 250 ) + { + if ( leftclick || vector_changed( level.createfx_last_player_origin, player.origin ) || dot_changed( level.createfx_last_player_forward, forward ) ) + { + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + + if ( !ent.drawn ) + continue; + + difference = vectornormalize( ent.v["origin"] - player.origin + vectorscale( ( 0, 0, 1 ), 55.0 ) ); + newdot = vectordot( forward, difference ); + + if ( newdot < dot ) + continue; + + if ( newdot == dot ) + { + if ( ent_is_selected( ent ) ) + continue; + } + + dot = newdot; + highlightedent = ent; + highlightedent.last_fx_index = i; + } + + level.fx_highlightedent = highlightedent; + level.createfx_last_player_origin = player.origin; + level.createfx_last_player_forward = forward; + } + + level.createfx_last_view_change_test = gettime(); + } + + if ( isdefined( highlightedent ) ) + { + if ( isdefined( lasthighlightedent ) ) + { + if ( lasthighlightedent != highlightedent ) + { + if ( !ent_is_selected( lasthighlightedent ) ) + lasthighlightedent thread entity_highlight_disable(); + + if ( !ent_is_selected( highlightedent ) ) + highlightedent thread entity_highlight_enable(); + } + } + else if ( !ent_is_selected( highlightedent ) ) + highlightedent thread entity_highlight_enable(); + } + + manipulate_createfx_ents( highlightedent, leftclick, leftheld, ctrlheld, colors, right ); + + if ( axismode && level.selected_fx_ents.size > 0 ) + { + thread process_fx_rotater(); + + if ( button_is_clicked( "enter", "r" ) ) + reset_axis_of_selected_ents(); + + if ( button_is_clicked( "v" ) ) + copy_angles_of_selected_ents(); + + if ( getdvarint( "createfx_drawaxis" ) == 1 ) + { + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + level.selected_fx_ents[i] draw_axis(); + } + + if ( level.selectedrotate_pitch != 0 || level.selectedrotate_yaw != 0 || level.selectedrotate_roll != 0 ) + changedselectedents = 1; + + wait 0.05; + } + else + { + stop_drawing_axis_models(); + selectedmove_vector = get_selected_move_vector(); + + if ( distancesquared( ( 0, 0, 0 ), selectedmove_vector ) > 0 ) + { + changedselectedents = 1; + + if ( level.cfx_last_action != "translate" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "translate"; + } + } + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + + if ( isdefined( ent.model ) ) + continue; + + ent.v["origin"] += selectedmove_vector; + } + + wait 0.05; + } + + if ( changedselectedents ) + update_selected_entities(); + + lasthighlightedent = highlightedent; + + if ( last_selected_entity_has_changed( lastselectentity ) ) + { + level.effect_list_offset = 0; + clear_settable_fx(); + setmenu( "none" ); + } + + if ( level.selected_fx_ents.size ) + { + lastselectentity = level.selected_fx_ents[level.selected_fx_ents.size - 1]; + continue; + } + + lastselectentity = undefined; + } +} + +toggle_createfx_drawing() +{ + level.createfx_draw_enabled = !level.createfx_draw_enabled; +} + +manipulate_createfx_ents( highlightedent, leftclick, leftheld, ctrlheld, colors, right ) +{ + if ( !level.createfx_draw_enabled ) + { + clear_fx_hudelements(); + return; + } + + scale = getdvarfloat( "createfx_scaleid" ); + print_frames = getdvarint( "createfx_print_frames" ); + + if ( !isdefined( level.createfx_manipulate_offset ) ) + level.createfx_manipulate_offset = 0; + + offset = level.createfx_manipulate_offset; + level.createfx_manipulate_offset = ( level.createfx_manipulate_offset + 1 ) % print_frames; + + for ( i = offset; i < level.createfxent.size; i += print_frames ) + { + ent = level.createfxent[i]; + + if ( !ent.drawn ) + continue; + + if ( isdefined( highlightedent ) && ent == highlightedent ) + continue; + else + { + colorindex = "default"; + + if ( index_is_selected( i ) ) + colorindex = "selected"; +/# + print3d( ent.v["origin"], ".", colors[ent.v["type"]][colorindex], 1, scale, print_frames ); +#/ + if ( ent.textalpha > 0 ) + { + printright = vectorscale( right, ent.v["fxid"].size * -2.93 * scale ); + printup = ( 0, 0, 15 * scale ); +/# + print3d( ent.v["origin"] + printright + printup, ent.v["fxid"], colors[ent.v["type"]][colorindex], ent.textalpha, scale, print_frames ); +#/ + } + } + } + + if ( isdefined( highlightedent ) ) + { + if ( !entities_are_selected() ) + display_fx_info( highlightedent ); + + if ( leftclick ) + { + entwasselected = index_is_selected( highlightedent.last_fx_index ); + level.createfx_selecting = !entwasselected; + + if ( !ctrlheld ) + { + selectedsize = level.selected_fx_ents.size; + clear_entity_selection(); + + if ( entwasselected && selectedsize == 1 ) + select_entity( highlightedent.last_fx_index, highlightedent ); + } + + toggle_entity_selection( highlightedent.last_fx_index, highlightedent ); + } + else if ( leftheld ) + { + if ( ctrlheld ) + { + if ( level.createfx_selecting ) + select_entity( highlightedent.last_fx_index, highlightedent ); + + if ( !level.createfx_selecting ) + deselect_entity( highlightedent.last_fx_index, highlightedent ); + } + } + + colorindex = "highlighted"; + + if ( index_is_selected( highlightedent.last_fx_index ) ) + colorindex = "selected"; +/# + print3d( highlightedent.v["origin"], ".", colors[highlightedent.v["type"]][colorindex], 1, scale, 1 ); +#/ + if ( highlightedent.textalpha > 0 ) + { + printright = vectorscale( right, highlightedent.v["fxid"].size * -2.93 * scale ); + printup = ( 0, 0, 15 * scale ); +/# + print3d( highlightedent.v["origin"] + printright + printup, highlightedent.v["fxid"], colors[highlightedent.v["type"]][colorindex], highlightedent.textalpha, scale, 1 ); +#/ + } + } +} + +clear_settable_fx() +{ + level.createfx_inputlocked = 0; + setdvar( "fx", "nil" ); + level.selected_fx_option_index = undefined; + reset_fx_hud_colors(); +} + +reset_fx_hud_colors() +{ + for ( i = 0; i < level.createfx_hudelements; i++ ) + level.createfxhudelements[i][0].color = ( 1, 1, 1 ); +} + +button_is_held( name, name2 ) +{ + if ( isdefined( name2 ) ) + { + if ( isdefined( level.buttonisheld[name2] ) ) + return 1; + } + + return isdefined( level.buttonisheld[name] ); +} + +button_is_clicked( name, name2 ) +{ + if ( isdefined( name2 ) ) + { + if ( isdefined( level.buttonclick[name2] ) ) + return 1; + } + + return isdefined( level.buttonclick[name] ); +} + +toggle_entity_selection( index, ent ) +{ + if ( isdefined( level.selected_fx[index] ) ) + deselect_entity( index, ent ); + else + select_entity( index, ent ); +} + +select_entity( index, ent, skip_undo ) +{ + if ( isdefined( level.selected_fx[index] ) ) + return; + + ent.last_fx_index = index; + + if ( !isdefined( skip_undo ) && level.cfx_last_action != "none" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "none"; + } + + clear_settable_fx(); + level notify( "new_ent_selection" ); + ent thread entity_highlight_enable(); + level.selected_fx[index] = 1; + level.selected_fx_ents[level.selected_fx_ents.size] = ent; +} + +ent_is_highlighted( ent ) +{ + if ( !isdefined( level.fx_highlightedent ) ) + return 0; + + return ent == level.fx_highlightedent; +} + +deselect_entity( index, ent ) +{ + if ( !isdefined( level.selected_fx[index] ) ) + return; + + if ( level.cfx_last_action != "none" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "none"; + } + + clear_settable_fx(); + level notify( "new_ent_selection" ); + level.selected_fx[index] = undefined; + + if ( !ent_is_highlighted( ent ) ) + ent thread entity_highlight_disable(); + + newarray = []; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + if ( level.selected_fx_ents[i] != ent ) + newarray[newarray.size] = level.selected_fx_ents[i]; + } + + level.selected_fx_ents = newarray; +} + +index_is_selected( index ) +{ + return isdefined( level.selected_fx[index] ); +} + +ent_is_selected( ent ) +{ + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + if ( level.selected_fx_ents[i] == ent ) + return true; + } + + return false; +} + +clear_entity_selection( skip_undo ) +{ + if ( !isdefined( skip_undo ) && level.cfx_last_action != "none" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "none"; + } + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + if ( !ent_is_highlighted( level.selected_fx_ents[i] ) ) + level.selected_fx_ents[i] thread entity_highlight_disable(); + } + + level.selected_fx = []; + level.selected_fx_ents = []; +} + +draw_axis() +{ + if ( isdefined( self.draw_axis_model ) ) + return; + + self.draw_axis_model = spawn_axis_model( self.v["origin"], self.v["angles"] ); + level thread draw_axis_think( self ); + + if ( !isdefined( level.draw_axis_models ) ) + level.draw_axis_models = []; + + level.draw_axis_models[level.draw_axis_models.size] = self.draw_axis_model; +} + +spawn_axis_model( origin, angles ) +{ + model = spawn( "script_model", origin ); + model setmodel( "fx_axis_createfx" ); + model.angles = angles; + return model; +} + +draw_axis_think( axis_parent ) +{ + axis_model = axis_parent.draw_axis_model; + axis_model endon( "death" ); + player = get_players()[0]; + range = getdvarint( "createfx_drawaxis_range" ); + i = 0; + + while ( true ) + { + if ( !isdefined( axis_parent ) ) + break; + + if ( distancesquared( axis_model.origin, player.origin ) > range * range ) + { + if ( isdefined( axis_model ) ) + { + axis_model delete(); + arrayremovevalue( level.draw_axis_models, undefined ); + } + } + else if ( !isdefined( axis_model ) ) + { + axis_model = spawn_axis_model( axis_parent.v["origin"], axis_parent.v["angles"] ); + axis_parent.draw_axis_model = axis_model; + level.draw_axis_models[level.draw_axis_models.size] = axis_model; + } + + axis_model.origin = axis_parent.v["origin"]; + axis_model.angles = axis_parent.v["angles"]; + wait 0.1; + i++; + + if ( i >= 10 ) + { + range = getdvarint( "createfx_drawaxis_range" ); + i = 0; + } + } + + if ( isdefined( axis_model ) ) + axis_model delete(); +} + +stop_drawing_axis_models() +{ + if ( isdefined( level.draw_axis_models ) ) + { + for ( i = 0; i < level.draw_axis_models.size; i++ ) + { + if ( isdefined( level.draw_axis_models[i] ) ) + level.draw_axis_models[i] delete(); + } + + arrayremovevalue( level.draw_axis_models, undefined ); + } +} + +clear_fx_hudelements() +{ + level.cfx_center_text[level.cfx_center_text_max - 1] clearalltextafterhudelem(); + + for ( i = 0; i < level.createfx_hudelements; i++ ) + { + for ( p = 0; p < 2; p++ ) + level.createfxhudelements[i][p] settext( "" ); + } + + level.fxhudelements = 0; +} + +set_fx_hudelement( text ) +{ + if ( ismp() && !isdefined( level.createfx_delay_done ) ) + return; + + if ( level.fxhudelements < level.createfx_hudelements ) + { + for ( p = 0; p < 2; p++ ) + level.createfxhudelements[level.fxhudelements][p] settext( text ); + + level.fxhudelements++; + } +} + +buttondown( button, button2 ) +{ + return buttonpressed_internal( button ) || buttonpressed_internal( button2 ); +} + +buttonpressed_internal( button ) +{ + if ( !isdefined( button ) ) + return 0; + + if ( kb_locked( button ) ) + return 0; + + player = get_players()[0]; + return player buttonpressed( button ); +} + +get_selected_move_vector() +{ + player = get_players()[0]; + yaw = player getplayerangles()[1]; + angles = ( 0, yaw, 0 ); + right = anglestoright( angles ); + forward = anglestoforward( angles ); + up = anglestoup( angles ); + ctrlheld = button_is_held( "ctrl", "BUTTON_LSHLDR" ); + + if ( buttondown( "kp_uparrow", "DPAD_UP" ) ) + { + if ( level.selectedmove_forward < 0 ) + level.selectedmove_forward = 0; + + if ( ctrlheld ) + { + level.selectedmove_forward = 0.1; + wait 0.05; + } + else + level.selectedmove_forward += 1; + } + else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) ) + { + if ( level.selectedmove_forward > 0 ) + level.selectedmove_forward = 0; + + if ( ctrlheld ) + { + level.selectedmove_forward = -1 * 0.1; + wait 0.05; + } + else + level.selectedmove_forward -= 1; + } + else + level.selectedmove_forward = 0; + + if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) ) + { + if ( level.selectedmove_right < 0 ) + level.selectedmove_right = 0; + + if ( ctrlheld ) + { + level.selectedmove_right = 0.1; + wait 0.05; + } + else + level.selectedmove_right += 1; + } + else if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) ) + { + if ( level.selectedmove_right > 0 ) + level.selectedmove_right = 0; + + if ( ctrlheld ) + { + level.selectedmove_right = -1 * 0.1; + wait 0.05; + } + else + level.selectedmove_right -= 1; + } + else + level.selectedmove_right = 0; + + if ( buttondown( "BUTTON_Y" ) ) + { + if ( level.selectedmove_up < 0 ) + level.selectedmove_up = 0; + + if ( ctrlheld ) + { + level.selectedmove_up = 0.1; + wait 0.05; + } + else + level.selectedmove_up += 1; + } + else if ( buttondown( "BUTTON_B" ) ) + { + if ( level.selectedmove_up > 0 ) + level.selectedmove_up = 0; + + if ( ctrlheld ) + { + level.selectedmove_up = -1 * 0.1; + wait 0.05; + } + else + level.selectedmove_up -= 1; + } + else + level.selectedmove_up = 0; + + vector = ( 0, 0, 0 ); + vector += vectorscale( forward, level.selectedmove_forward ); + vector += vectorscale( right, level.selectedmove_right ); + vector += vectorscale( up, level.selectedmove_up ); + return vector; +} + +process_button_held_and_clicked() +{ + add_button( "mouse1" ); + add_kb_button( "shift" ); + add_kb_button( "ctrl" ); + add_button( "BUTTON_RSHLDR" ); + add_button( "BUTTON_LSHLDR" ); + add_button( "BUTTON_RSTICK" ); + add_button( "BUTTON_LSTICK" ); + add_button( "BUTTON_A" ); + add_button( "BUTTON_B" ); + add_button( "BUTTON_X" ); + add_button( "BUTTON_Y" ); + add_button( "DPAD_UP" ); + add_button( "DPAD_LEFT" ); + add_button( "DPAD_RIGHT" ); + add_button( "DPAD_DOWN" ); + add_kb_button( "escape" ); + add_button( "BUTTON_RTRIG" ); + add_button( "BUTTON_LTRIG" ); + add_kb_button( "a" ); + add_button( "F1" ); + add_button( "F5" ); + add_button( "F2" ); + add_kb_button( "c" ); + add_kb_button( "d" ); + add_kb_button( "f" ); + add_kb_button( "h" ); + add_kb_button( "i" ); + add_kb_button( "j" ); + add_kb_button( "k" ); + add_kb_button( "l" ); + add_kb_button( "m" ); + add_kb_button( "p" ); + add_kb_button( "q" ); + add_kb_button( "r" ); + add_kb_button( "s" ); + add_kb_button( "v" ); + add_kb_button( "x" ); + add_kb_button( "z" ); + add_button( "del" ); + add_kb_button( "end" ); + add_kb_button( "tab" ); + add_kb_button( "ins" ); + add_kb_button( "add" ); + add_kb_button( "space" ); + add_kb_button( "enter" ); + add_kb_button( "leftarrow" ); + add_kb_button( "rightarrow" ); + add_kb_button( "1" ); + add_kb_button( "2" ); + add_kb_button( "3" ); + add_kb_button( "4" ); + add_kb_button( "5" ); + add_kb_button( "6" ); + add_kb_button( "7" ); + add_kb_button( "8" ); + add_kb_button( "9" ); + add_kb_button( "0" ); + add_kb_button( "~" ); +} + +locked( name ) +{ + if ( isdefined( level.createfx_lockedlist[name] ) ) + return 0; + + return kb_locked( name ); +} + +kb_locked( name ) +{ + return level.createfx_inputlocked && isdefined( level.button_is_kb[name] ); +} + +add_button( name ) +{ + player = get_players()[0]; + + if ( locked( name ) ) + return; + + if ( !isdefined( level.buttonisheld[name] ) ) + { + if ( player buttonpressed( name ) ) + { + level.buttonisheld[name] = 1; + level.buttonclick[name] = 1; + } + } + else if ( !player buttonpressed( name ) ) + level.buttonisheld[name] = undefined; +} + +add_kb_button( name ) +{ + level.button_is_kb[name] = 1; + add_button( name ); +} + +set_anglemod_move_vector() +{ +/# + ctrlheld = button_is_held( "ctrl", "BUTTON_LSHLDR" ); + players = get_players(); + + if ( level.is_camera_on == 1 ) + { + newmovement = players[0] getnormalizedmovement(); + dolly_movement = players[0] getnormalizedcameramovement(); + + if ( newmovement[1] <= -0.3 ) + level.selectedrotate_yaw -= 1; + else if ( newmovement[1] >= 0.3 ) + level.selectedrotate_yaw += 1; + else if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) ) + { + if ( level.selectedrotate_yaw < 0 ) + level.selectedrotate_yaw = 0; + + level.selectedrotate_yaw += 0.1; + } + else if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) ) + { + if ( level.selectedrotate_yaw > 0 ) + level.selectedrotate_yaw = 0; + + level.selectedrotate_yaw -= 0.1; + } + else + level.selectedrotate_yaw = 0; + + if ( dolly_movement[0] <= -0.2 ) + level.selectedrotate_pitch += 1; + else if ( dolly_movement[0] >= 0.2 ) + level.selectedrotate_pitch -= 1; + else if ( buttondown( "kp_uparrow", "DPAD_UP" ) ) + { + if ( level.selectedrotate_pitch < 0 ) + level.selectedrotate_pitch = 0; + + level.selectedrotate_pitch += 0.1; + } + else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) ) + { + if ( level.selectedrotate_pitch > 0 ) + level.selectedrotate_pitch = 0; + + level.selectedrotate_pitch -= 0.1; + } + else + level.selectedrotate_pitch = 0; + + if ( buttondown( "BUTTON_Y" ) ) + { + if ( level.selectedrotate_roll < 0 ) + level.selectedrotate_roll = 0; + + level.selectedrotate_roll += 0.1; + } + else if ( buttondown( "BUTTON_B" ) ) + { + if ( level.selectedrotate_roll > 0 ) + level.selectedrotate_roll = 0; + + level.selectedrotate_roll -= 0.1; + } + else + level.selectedrotate_roll = 0; + } + else + { + if ( buttondown( "kp_uparrow", "DPAD_UP" ) ) + { + if ( level.selectedrotate_pitch < 0 ) + level.selectedrotate_pitch = 0; + + if ( ctrlheld ) + { + level.selectedrotate_pitch = 0.1; + wait 0.05; + } + else + level.selectedrotate_pitch += 1; + } + else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) ) + { + if ( level.selectedrotate_pitch > 0 ) + level.selectedrotate_pitch = 0; + + if ( ctrlheld ) + { + level.selectedrotate_pitch = -1 * 0.1; + wait 0.05; + } + else + level.selectedrotate_pitch -= 1; + } + else + level.selectedrotate_pitch = 0; + + if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) ) + { + if ( level.selectedrotate_yaw < 0 ) + level.selectedrotate_yaw = 0; + + if ( ctrlheld ) + { + level.selectedrotate_yaw = 0.1; + wait 0.05; + } + else + level.selectedrotate_yaw += 1; + } + else if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) ) + { + if ( level.selectedrotate_yaw > 0 ) + level.selectedrotate_yaw = 0; + + if ( ctrlheld ) + { + level.selectedrotate_yaw = -1 * 0.1; + wait 0.05; + } + else + level.selectedrotate_yaw -= 1; + } + else + level.selectedrotate_yaw = 0; + + if ( buttondown( "BUTTON_Y" ) ) + { + if ( level.selectedrotate_roll < 0 ) + level.selectedrotate_roll = 0; + + if ( ctrlheld ) + { + level.selectedrotate_roll = 0.1; + wait 0.05; + } + else + level.selectedrotate_roll += 1; + } + else if ( buttondown( "BUTTON_B" ) ) + { + if ( level.selectedrotate_roll > 0 ) + level.selectedrotate_roll = 0; + + if ( ctrlheld ) + { + level.selectedrotate_roll = -1 * 0.1; + wait 0.05; + } + else + level.selectedrotate_roll -= 1; + } + else + level.selectedrotate_roll = 0; + } +#/ +} + +cfxprintln( file, string ) +{ +/# + if ( file == -1 ) + return; + + fprintln( file, string ); +#/ +} + +update_save_bar( number ) +{ + level notify( "saving_start" ); + level endon( "saving_start" ); + level.current_saving_number = 0; + + while ( level.current_saving_number < level.createfxent.size ) + { + center_text_clear(); + center_text_add( "Saving Createfx to File" ); + center_text_add( "Saving effect " + level.current_saving_number + "/" + level.createfxent.size ); + center_text_add( "Do not reset Xenon until saving is complete." ); + wait 0.05; + center_text_clear(); + } + + center_text_add( "Saving Complete." ); + center_text_add( level.createfxent.size + " effects saved to files." ); +} + +generate_fx_log( type, autosave ) +{ +/# + autosave = isdefined( autosave ); + + if ( type == "server" ) + { + if ( !autosave ) + filename = level.cfx_server_scriptdata + level.script + "_fx.gsc"; + else + filename = level.cfx_server_scriptdata + "backup.gsc"; + + call_loop = level.cfx_server_loop; + call_oneshot = level.cfx_server_oneshot; + call_exploder = level.cfx_server_exploder; + call_loopsound = level.cfx_server_loopsound; + } + else if ( type == "client" ) + { + if ( !autosave ) + filename = level.cfx_client_scriptdata + level.script + "_fx.csc"; + else + filename = level.cfx_client_scriptdata + "backup.csc"; + + call_loop = level.cfx_client_loop; + call_oneshot = level.cfx_client_oneshot; + call_exploder = level.cfx_client_exploder; + call_loopsound = level.cfx_client_loopsound; + } + else + { + println( "^1Error: Improper type in generate_fx_log()" ); + return; + } + + file = openfile( filename, "write" ); + + if ( file == -1 ) + { + level.write_error = filename; + + if ( type == "server" ) + return 1; + else if ( type == "client" ) + return 2; + else + return 3; + } + else + { + cfxprintln( file, "//_createfx generated. Do not touch!!" ); + cfxprintln( file, "main()" ); + cfxprintln( file, "{" ); + + for ( p = 0; p < level.createfxent.size; p++ ) + { + ent = level.createfxent[p]; + origin = []; + angles = []; + + for ( i = 0; i < 3; i++ ) + { + origin[i] = ent.v["origin"][i]; + angles[i] = ent.v["angles"][i]; + + if ( origin[i] < 0.1 && origin[i] > 0.1 * -1 ) + origin[i] = 0; + + if ( angles[i] < 0.1 && angles[i] > 0.1 * -1 ) + angles[i] = 0; + } + + ent.v["origin"] = ( origin[0], origin[1], origin[2] ); + ent.v["angles"] = ( angles[0], angles[1], angles[2] ); + } + + if ( !autosave ) + println( " *** CREATING EFFECT, COPY THESE LINES TO ", level.script, "_fx.gsc *** " ); + + cfxprintln( file, "// CreateFX entities placed: " + level.createfxent.size - level.non_fx_ents ); + breather = 0; + + if ( autosave ) + breather_pause = 1; + else + breather_pause = 5; + + for ( i = 0; i < level.createfxent.size; i++ ) + { + e = level.createfxent[i]; + assert( isdefined( e.v["type"] ), "effect at origin " + e.v["origin"] + " has no type" ); + + if ( isdefined( e.model ) ) + continue; + + if ( e.v["fxid"] == "No FX" ) + continue; + + output_name = "\\t"; + output_props = "\\t"; + ent_type = e.v["type"]; + + if ( ent_type == "loopfx" ) + output_name += ( "ent = " + call_loop + "( \"" + e.v["fxid"] + "\" );" ); + + if ( ent_type == "oneshotfx" ) + output_name += ( "ent = " + call_oneshot + "( \"" + e.v["fxid"] + "\" );" ); + + if ( ent_type == "exploder" ) + output_name += ( "ent = " + call_exploder + "( \"" + e.v["fxid"] + "\" );" ); + + if ( ent_type == "soundfx" ) + output_name += ( "ent = " + call_loopsound + "();" ); + + output_props += get_fx_options( e ); + cfxprintln( file, output_name ); + cfxprintln( file, output_props ); + cfxprintln( file, "\\t" ); + breather++; + + if ( breather >= breather_pause ) + { + wait 0.05; + breather = 0; + } + } + + if ( level.bscriptgened ) + { + script_gen_dump_addline( level.cfx_server_scriptgendump, level.script + "_fx" ); + [[ level.cfx_func_script_gen_dump ]](); + } + + cfxprintln( file, "}" ); + saved = closefile( file ); + assert( saved == 1, "File not saved (see above message?): " + filename ); + println( "CreateFX entities placed: " + level.createfxent.size - level.non_fx_ents ); + return 0; + } +#/ +} + +get_fx_options( ent ) +{ + output_props = ""; + + for ( i = 0; i < level.createfx_options.size; i++ ) + { + option = level.createfx_options[i]; + + if ( !isdefined( ent.v[option["name"]] ) ) + continue; + + if ( !mask( option["mask"], ent.v["type"] ) ) + continue; + + if ( option["type"] == "string" ) + { + if ( option["name"] == "fxid" ) + continue; + + output_props += ( "ent.v[ \"" + option["name"] + "\" ] = \"" + ent.v[option["name"]] + "\"; " ); + continue; + } + + output_props += ( "ent.v[ \"" + option["name"] + "\" ] = " + ent.v[option["name"]] + "; " ); + } + + return output_props; +} + +entity_highlight_disable() +{ + self notify( "highlight change" ); + self endon( "highlight change" ); + + for (;;) + { + self.textalpha -= 0.05; + + if ( self.textalpha < 0.4 ) + break; + + wait 0.05; + } + + self.textalpha = 0.4; +} + +entity_highlight_enable() +{ + self notify( "highlight change" ); + self endon( "highlight change" ); + + for (;;) + { + self.textalpha += 0.05; + + if ( self.textalpha > 1 ) + break; + + wait 0.05; + } + + self.textalpha = 1; +} + +get_center_of_array( array ) +{ + center = ( 0, 0, 0 ); + + for ( i = 0; i < array.size; i++ ) + center = ( center[0] + array[i].v["origin"][0], center[1] + array[i].v["origin"][1], center[2] + array[i].v["origin"][2] ); + + return ( center[0] / array.size, center[1] / array.size, center[2] / array.size ); +} + +rotation_is_occuring() +{ + if ( level.selectedrotate_roll != 0 ) + return 1; + + if ( level.selectedrotate_pitch != 0 ) + return 1; + + return level.selectedrotate_yaw != 0; +} + +process_fx_rotater() +{ + if ( level.fx_rotating ) + return; + + set_anglemod_move_vector(); + + if ( !rotation_is_occuring() ) + return; + + level.fx_rotating = 1; + + if ( level.cfx_last_action != "rotate" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "rotate"; + } + + if ( level.selected_fx_ents.size > 1 ) + { + center = get_center_of_array( level.selected_fx_ents ); + org = spawn( "script_origin", center ); + org.v["angles"] = level.selected_fx_ents[0].v["angles"]; + org.v["origin"] = center; + rotater = []; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + rotater[i] = spawn( "script_origin", level.selected_fx_ents[i].v["origin"] ); + rotater[i].angles = level.selected_fx_ents[i].v["angles"]; + rotater[i] linkto( org ); + } + + rotate_over_time( org, rotater ); + org delete(); + + for ( i = 0; i < rotater.size; i++ ) + rotater[i] delete(); + } + else if ( level.selected_fx_ents.size == 1 ) + { + ent = level.selected_fx_ents[0]; + rotater = spawn( "script_origin", ( 0, 0, 0 ) ); + rotater.angles = ent.v["angles"]; + + if ( level.selectedrotate_pitch != 0 ) + rotater devaddpitch( level.selectedrotate_pitch ); + else if ( level.selectedrotate_yaw != 0 ) + rotater devaddyaw( level.selectedrotate_yaw ); + else + rotater devaddroll( level.selectedrotate_roll ); + + ent.v["angles"] = rotater.angles; + rotater delete(); + wait 0.05; + } + + level.fx_rotating = 0; +} + +rotate_over_time( org, rotater ) +{ + level endon( "new_ent_selection" ); + + for ( p = 0; p < 2; p++ ) + { + if ( level.selectedrotate_pitch != 0 ) + org devaddpitch( level.selectedrotate_pitch ); + else if ( level.selectedrotate_yaw != 0 ) + org devaddyaw( level.selectedrotate_yaw ); + else + org devaddroll( level.selectedrotate_roll ); + + wait 0.05; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + + if ( isdefined( ent.model ) ) + continue; + + ent.v["origin"] = rotater[i].origin; + ent.v["angles"] = rotater[i].angles; + } + } +} + +delete_pressed() +{ + if ( level.createfx_inputlocked ) + { + remove_selected_option(); + return; + } + + delete_selection(); +} + +remove_selected_option() +{ + if ( !isdefined( level.selected_fx_option_index ) ) + return; + + name = level.createfx_options[level.selected_fx_option_index]["name"]; + + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + + if ( !ent_is_selected( ent ) ) + continue; + + ent remove_option( name ); + } + + update_selected_entities(); + clear_settable_fx(); +} + +remove_option( name ) +{ + self.v[name] = undefined; +} + +delete_selection() +{ + newarray = []; + + if ( level.selected_fx_ents.size < 1 ) + return; + + store_undo_state( "delete", level.selected_fx_ents ); + level.cfx_last_action = "none"; + + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + + if ( ent_is_selected( ent ) ) + { + if ( isdefined( ent.looper ) ) + ent.looper delete(); + + level.fx_highlightedent = undefined; + ent notify( "stop_loop" ); + continue; + } + + newarray[newarray.size] = ent; + } + + level.createfxent = newarray; + level.selected_fx = []; + level.selected_fx_ents = []; + clear_fx_hudelements(); +} + +move_selection_to_cursor( skip_undo ) +{ + origin = level.createfxcursor["position"]; + + if ( level.selected_fx_ents.size <= 0 ) + return; + + if ( !isdefined( skip_undo ) && level.cfx_last_action != "move_to_cursor" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "move_to_cursor"; + } + + center = get_center_of_array( level.selected_fx_ents ); + difference = center - origin; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + + if ( isdefined( ent.model ) ) + continue; + + ent.v["origin"] -= difference; + } +} + +insert_effect() +{ + setmenu( "creation" ); + level.effect_list_offset = 0; + clear_fx_hudelements(); + set_fx_hudelement( "Pick effect type to create:" ); + set_fx_hudelement( "1. One Shot fx" ); + set_fx_hudelement( "2. Looping fx" ); + set_fx_hudelement( "3. Exploder" ); + set_fx_hudelement( "4. Looping sound" ); + set_fx_hudelement( "(c) Cancel" ); + set_fx_hudelement( "(x) Exit" ); +} + +show_help() +{ + clear_fx_hudelements(); + set_fx_hudelement( "Help:" ); + set_fx_hudelement( "I Insert effect" ); + set_fx_hudelement( "Shift + D Delete selected effects" ); + set_fx_hudelement( "F + 5 Save" ); + set_fx_hudelement( "A button Toggle the selection of the current effect" ); + set_fx_hudelement( "X button Toggle effect rotation mode" ); + set_fx_hudelement( "Y button Move selected effects up or rotate X axis" ); + set_fx_hudelement( "B button Move selected effects down or rotate X axis" ); + set_fx_hudelement( "D-pad Up/Down Move selected effects Forward/Backward or rotate Y axis" ); + set_fx_hudelement( "D-pad Left/Right Move selected effects Left/Right or rotate Z axis" ); + set_fx_hudelement( "R Shoulder Move selected effects to the cursor" ); + set_fx_hudelement( "L Shoulder Hold to select multiple effects" ); + set_fx_hudelement( "Right Arrow Next page in options menu" ); + set_fx_hudelement( "Left Arrow Previous page in options menu" ); + set_fx_hudelement( "A Add option to the selected effects" ); + set_fx_hudelement( "X Exit effect options menu" ); + set_fx_hudelement( "Shift + D Drop selected effects to the ground" ); + set_fx_hudelement( "R Reset the rotation of the selected effects" ); + set_fx_hudelement( "L Stick Copy effects" ); + set_fx_hudelement( "R Stick Paste effects" ); + set_fx_hudelement( "V Copy the angles from the most recently selected fx onto all selected fx." ); + set_fx_hudelement( "F + 2 Toggle CreateFX dot and menu drawing" ); + set_fx_hudelement( "U UFO" ); + set_fx_hudelement( "N Noclip" ); + set_fx_hudelement( "R Trig + L Trig Jump forward 8000 units" ); + set_fx_hudelement( "T Toggle Timescale FAST" ); + set_fx_hudelement( "Y Toggle Timescale SLOW" ); + set_fx_hudelement( "H Toggle FX Visibility" ); + set_fx_hudelement( "W Toggle effect wireframe" ); + set_fx_hudelement( "P Toggle FX Profile" ); +} + +center_text_init() +{ + level.cfx_center_text = []; + level.cfx_center_text_index = 0; + level.cfx_center_text_max = 3; + new_array = []; + + for ( p = 0; p < level.cfx_center_text_max; p++ ) + { + center_hud = newdebughudelem(); + center_hud settext( " " ); + center_hud.horzalign = "center"; + center_hud.vertalign = "middle"; + center_hud.alignx = "center"; + center_hud.aligny = "middle"; + center_hud.foreground = 1; + center_hud.fontscale = 1.1; + center_hud.sort = 21; + center_hud.alpha = 1; + center_hud.color = ( 1, 0, 0 ); + center_hud.y = p * 25; + new_array[p] = center_hud; + } + + level.cfx_center_text = new_array; +} + +center_text_add( text ) +{ + if ( isdefined( text ) && isdefined( level.cfx_center_text ) ) + { + level.cfx_center_text[level.cfx_center_text_index] settext( text ); + level.cfx_center_text_index++; + + if ( level.cfx_center_text_index >= level.cfx_center_text_max ) + level.cfx_center_text_index = level.cfx_center_text_max - 1; + } +} + +center_text_clear() +{ + for ( p = 0; p < level.cfx_center_text_max; p++ ) + level.cfx_center_text[p] settext( " " ); + + level.cfx_center_text_index = 0; +} + +write_error_msg( filename ) +{ + level notify( "write_error" ); + level endon( "write_error" ); + + if ( isdefined( filename ) ) + { + center_text_clear(); + center_text_add( "File " + filename + " is not writeable." ); + center_text_add( "If it's checked out, restart your computer!" ); + center_text_add( "Hold the A Button to dismiss." ); + + for (;;) + { + player = get_players()[0]; + + if ( player buttonpressed( "BUTTON_A" ) ) + { + center_text_clear(); + level.write_error = ""; + break; + } + + wait 0.25; + } + } +} + +select_last_entity( skip_undo ) +{ + select_entity( level.createfxent.size - 1, level.createfxent[level.createfxent.size - 1], skip_undo ); +} + +post_entity_creation_function() +{ + self.textalpha = 0; + self.drawn = 1; +} + +copy_ents() +{ + if ( level.selected_fx_ents.size <= 0 ) + return; + + array = []; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + newent = spawnstruct(); + newent.v = ent.v; + newent post_entity_creation_function(); + array[array.size] = newent; + } + + level.stored_ents = array; +} + +paste_ents() +{ + delay_min = getdvarint( "createfx_oneshot_min_delay" ); + delay_max = getdvarint( "createfx_oneshot_max_delay" ); + + if ( delay_min > delay_max ) + { + temp = delay_min; + delay_min = delay_max; + delay_max = temp; + } + + if ( !isdefined( level.stored_ents ) ) + return; + + clear_entity_selection(); + + if ( level.cfx_last_action != "none" ) + store_undo_state( "edit", level.selected_fx_ents ); + + level.cfx_last_action = "none"; + + for ( i = 0; i < level.stored_ents.size; i++ ) + { + level.stored_ents[i].uniqueid = level.cfx_uniqueid; + level.cfx_uniqueid++; + + if ( level.stored_ents[i].v["type"] == "oneshotfx" ) + level.stored_ents[i].v["delay"] = randomintrange( delay_min, delay_max ); + + add_and_select_entity( level.stored_ents[i], "skip_undo" ); + } + + move_selection_to_cursor( "skip_undo" ); + update_selected_entities(); + store_undo_state( "add", level.stored_ents ); + level.stored_ents = []; + copy_ents(); +} + +paste_ents_onto_ents() +{ + if ( !isdefined( level.stored_ents ) || !isdefined( level.selected_fx_ents ) ) + return; + + if ( level.stored_ents.size < 1 || level.selected_fx_ents.size < 1 ) + return; + + if ( level.stored_ents.size != level.selected_fx_ents.size ) + { +/# + println( "^2CreateFX: Number of source ents must match the number of destination ents for Paste Into to work." ); +#/ + return; + } + + if ( level.cfx_last_action != "none" ) + store_undo_state( "edit", level.selected_fx_ents ); + + level.cfx_last_action = "none"; + selected_ents_temp = level.selected_fx_ents; + + for ( i = 0; i < level.stored_ents.size; i++ ) + { + source_ent = level.stored_ents[i]; + target_ent = level.selected_fx_ents[i]; + source_ent.uniqueid = level.cfx_uniqueid; + level.cfx_uniqueid++; + source_ent.v["angles"] = target_ent.v["angles"]; + source_ent.v["origin"] = target_ent.v["origin"]; + add_and_select_entity( source_ent, "skip_undo" ); + } + + for ( i = 0; i < selected_ents_temp.size; i++ ) + deselect_entity( selected_ents_temp[i].last_fx_index, selected_ents_temp[i] ); + + update_selected_entities(); + store_undo_state( "add", level.stored_ents ); + level.stored_ents = []; + copy_ents(); +} + +add_and_select_entity( ent, skip_undo ) +{ + level.createfxent[level.createfxent.size] = ent; + select_last_entity( skip_undo ); +} + +stop_fx_looper() +{ + if ( isdefined( self.looper ) ) + self.looper delete(); + + self [[ level.cfx_func_stop_loopsound ]](); +} + +restart_fx_looper() +{ + stop_fx_looper(); + self set_forward_and_up_vectors(); + + if ( self.v["type"] == "loopfx" ) + self [[ level.cfx_func_create_looper ]](); + + if ( self.v["type"] == "oneshotfx" ) + self [[ level.cfx_func_create_triggerfx ]](); + + if ( self.v["type"] == "soundfx" ) + self [[ level.cfx_func_create_loopsound ]](); +} + +update_selected_entities() +{ + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + ent restart_fx_looper(); + } +} + +copy_angles_of_selected_ents() +{ + level notify( "new_ent_selection" ); + + if ( level.cfx_last_action != "copy_angles" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "copy_angles"; + } + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + ent.v["angles"] = level.selected_fx_ents[level.selected_fx_ents.size - 1].v["angles"]; + ent set_forward_and_up_vectors(); + } + + update_selected_entities(); +} + +reset_axis_of_selected_ents() +{ + level notify( "new_ent_selection" ); + + if ( level.cfx_last_action != "reset_axis" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "reset_axis"; + } + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + ent.v["angles"] = ( 0, 0, 0 ); + ent set_forward_and_up_vectors(); + } + + update_selected_entities(); +} + +last_selected_entity_has_changed( lastselectentity ) +{ + if ( isdefined( lastselectentity ) ) + { + if ( !entities_are_selected() ) + return 1; + } + else + return entities_are_selected(); + + return lastselectentity != level.selected_fx_ents[level.selected_fx_ents.size - 1]; +} + +createfx_showorigin( id, org, delay, org2, type, exploder, id2, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout ) +{ + +} + +drop_selection_to_ground() +{ + if ( level.cfx_last_action != "drop_to_ground" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "drop_to_ground"; + } + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + trace = bullettrace( ent.v["origin"], ent.v["origin"] + vectorscale( ( 0, 0, -1 ), 2048.0 ), 0, undefined ); + ent.v["origin"] = trace["position"]; + } +} + +set_off_exploders() +{ + level notify( "createfx_exploder_reset" ); + exploders = []; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + + if ( isdefined( ent.v["exploder"] ) ) + exploders[ent.v["exploder"]] = 1; + } + + keys = getarraykeys( exploders ); + + for ( i = 0; i < keys.size; i++ ) + exploder( keys[i] ); +} + +turn_off_exploders() +{ + level notify( "createfx_exploder_reset" ); + exploders = []; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + + if ( isdefined( ent.v["exploder"] ) ) + exploders[ent.v["exploder"]] = 1; + } + + keys = getarraykeys( exploders ); + + for ( i = 0; i < keys.size; i++ ) + stop_exploder( keys[i] ); +} + +draw_distance() +{ + count = 0; + last_pos = ( 0, 0, 0 ); + + if ( getdvarint( "createfx_drawdist" ) == 0 ) + setdvar( "createfx_drawdist", "1500" ); + + player = get_players()[0]; + + for (;;) + { + maxdist = getdvarint( "createfx_drawdist" ); + maxdistsqr = maxdist * maxdist; +/# + if ( flag( "createfx_saving" ) ) + println( "Waiting for createfx to save..." ); +#/ + flag_waitopen( "createfx_saving" ); + + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + + if ( ent_is_selected( ent ) ) + ent.drawn = 1; + else + ent.drawn = distancesquared( player.origin, ent.v["origin"] ) <= maxdistsqr; + + count++; + + if ( count > 50 ) + { + count = 0; + wait 0.05; + } + } + + wait 0.1; + + while ( distancesquared( player.origin, last_pos ) < 2500 ) + wait 0.1; + + last_pos = player.origin; + } +} + +createfx_save( autosave ) +{ + flag_waitopen( "createfx_saving" ); + flag_set( "createfx_saving" ); + resettimeout(); + + if ( isdefined( autosave ) ) + savemode = "AUTOSAVE"; + else + savemode = "USER SAVE"; + + type = "server"; + old_time = gettime(); +/# + println( "\\n^3#### CREATEFX SERVER " + savemode + " BEGIN ####" ); +#/ + file_error = generate_fx_log( type, autosave ); +/# + println( "^3#### CREATEFX SERVER " + savemode + " END (Time: " + ( gettime() - old_time ) * 0.001 + " seconds)####" ); +#/ + if ( file_error ) + { +/# + println( "^3#### CREATEFX " + savemode + " CANCELLED ####" ); +#/ + createfx_emergency_backup(); + } + else + { + if ( level.clientscripts && !isdefined( autosave ) ) + { + old_time = gettime(); +/# + println( "\\n^3#### CREATEFX CLIENT " + savemode + " BEGIN ####" ); +#/ + file_error = generate_fx_log( "client" ); +/# + println( "^3#### CREATEFX CLIENT " + savemode + " END (Time: " + ( gettime() - old_time ) * 0.001 + " seconds)####" ); +#/ + if ( file_error ) + { +/# + iprintln( "CreateFX clientscript file is not writeable! Aborting save." ); +#/ +/# + println( "^3#### CREATEFX " + savemode + " CANCELLED ####" ); +#/ + return; + } + } + + flag_clear( "createfx_saving" ); + } +} + +createfx_autosave() +{ + for (;;) + { + wait_time = getdvarint( "createfx_autosave_time" ); + + if ( wait_time < 120 || isstring( wait_time ) ) + wait_time = 120; + + wait( wait_time ); + + if ( !flag( "createfx_saving" ) ) + createfx_save( 1 ); + } +} + +createfx_emergency_backup() +{ +/# + println( "^5#### CREATEFX EMERGENCY BACKUP BEGIN ####" ); +#/ + file_error = generate_fx_log( "server", 1 ); + + if ( file_error ) + { +/# + iprintln( "Error saving to backup.gsc. All is lost!" ); +#/ + } + else + { +/# + println( "^5#### CREATEFX EMERGENCY BACKUP END ####" ); +#/ + } + + flag_clear( "createfx_saving" ); +} + +move_player_around_map_fast() +{ + player = get_players()[0]; + direction = player getplayerangles(); + direction_vec = anglestoforward( direction ); + eye = player geteye(); + trace = bullettrace( eye, eye + vectorscale( direction_vec, 20000 ), 0, undefined ); + dist = distance( eye, trace["position"] ); + position = eye + vectorscale( direction_vec, dist - 64 ); + player setorigin( position ); +} + +move_player_to_next_same_effect( forward_search, lastselectentity ) +{ + player = get_players()[0]; + direction = player getplayerangles(); + direction_vec = anglestoforward( direction ); + + if ( !isdefined( forward_search ) ) + forward_search = 1; + + ent = level.selected_fx_ents[level.selected_fx_ents.size - 1]; + start_index = 0; + + if ( level.selected_fx_ents.size <= 0 ) + { + if ( forward_search ) + ent = level.cfx_next_ent; + else + ent = level.cfx_previous_ent; + + if ( isdefined( ent ) ) + { + index = get_ent_index( ent ); + + if ( index >= 0 ) + { + select_entity( index, ent ); + position = ent.v["origin"] - vectorscale( direction_vec, 175 ); + player setorigin( position ); + level.cfx_previous_ent = ent; + level.cfx_next_ent = get_next_ent_with_same_id( index, ent.v["fxid"] ); + } + else if ( forward_search ) + level.cfx_next_ent = undefined; + else + level.cfx_previous_ent = undefined; + } + + return; + } + + if ( level.selected_fx_ents.size == 1 ) + { + for ( i = 0; i < level.createfxent.size; i++ ) + { + if ( isdefined( level.selected_fx[i] ) ) + { + start_index = i; + deselect_entity( i, ent ); + break; + } + } + + if ( forward_search ) + { + level.cfx_previous_ent = ent; + ent = get_next_ent_with_same_id( i, ent.v["fxid"] ); + select_entity( level.ent_found_index, ent ); + position = ent.v["origin"] - vectorscale( direction_vec, 175 ); + player setorigin( position ); + level.cfx_next_ent = get_next_ent_with_same_id( level.ent_found_index, ent.v["fxid"] ); + return; + } + else + { + level.cfx_next_ent = ent; + ent = get_previous_ent_with_same_id( i, ent.v["fxid"] ); + select_entity( level.ent_found_index, ent ); + position = ent.v["origin"] - vectorscale( direction_vec, 175 ); + player setorigin( position ); + level.cfx_previous_ent = get_previous_ent_with_same_id( level.ent_found_index, ent.v["fxid"] ); + return; + } + } + else + { + if ( isdefined( level.last_ent_moved_to ) && !last_selected_entity_has_changed( lastselectentity ) ) + ent = level.last_ent_moved_to; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + if ( ent == level.selected_fx_ents[i] ) + break; + } + + if ( forward_search ) + { + if ( i < level.selected_fx_ents.size - 1 ) + { + i++; + ent = level.selected_fx_ents[i]; + } + else + ent = level.selected_fx_ents[0]; + } + else if ( i > 0 ) + ent = level.selected_fx_ents[i - 1]; + else + ent = level.selected_fx_ents[level.selected_fx_ents.size - 1]; + + level.last_ent_moved_to = ent; + position = ent.v["origin"] - vectorscale( direction_vec, 175 ); + player setorigin( position ); + } +} + +get_next_ent_with_same_id( index, ent_id ) +{ + for ( i = index + 1; i < level.createfxent.size; i++ ) + { + if ( ent_id == level.createfxent[i].v["fxid"] ) + { + level.ent_found_index = i; + return level.createfxent[i]; + } + } + + for ( i = 0; i < index; i++ ) + { + if ( ent_id == level.createfxent[i].v["fxid"] ) + { + level.ent_found_index = i; + return level.createfxent[i]; + } + } + + level.ent_found_index = index; + return level.createfxent[index]; +} + +get_previous_ent_with_same_id( index, ent_id ) +{ + for ( i = index - 1; i > 0; i-- ) + { + if ( ent_id == level.createfxent[i].v["fxid"] ) + { + level.ent_found_index = i; + return level.createfxent[i]; + } + } + + for ( i = level.createfxent.size - 1; i > index; i-- ) + { + if ( ent_id == level.createfxent[i].v["fxid"] ) + { + level.ent_found_index = i; + return level.createfxent[i]; + } + } + + level.ent_found_index = index; + return level.createfxent[index]; +} + +get_ent_index( ent ) +{ + for ( i = 0; i < level.createfxent.size; i++ ) + { + if ( ent == level.createfxent[i] ) + return i; + } + + return -1; +} + +select_ents_by_property( property, add_to_selection ) +{ + ent = level.selected_fx_ents[level.selected_fx_ents.size - 1]; + prop_to_match = ent.v[property]; + + if ( !isdefined( add_to_selection ) ) + clear_entity_selection(); + + for ( i = 0; i < level.createfxent.size; i++ ) + { + if ( isdefined( level.createfxent[i].v[property] ) ) + { + if ( level.createfxent[i].v[property] == prop_to_match ) + select_entity( i, level.createfxent[i] ); + } + } +} + +print_ambient_fx_inventory() +{ +/# + fx_list = get_level_ambient_fx(); + ent_list = []; + fx_list_count = []; + println( "\\n\\n^2INVENTORY OF AMBIENT EFFECTS: " ); + + for ( i = 0; i < level.createfxent.size; i++ ) + ent_list[i] = level.createfxent[i].v["fxid"]; + + for ( i = 0; i < fx_list.size; i++ ) + { + count = 0; + + for ( j = 0; j < ent_list.size; j++ ) + { + if ( fx_list[i] == ent_list[j] ) + { + count++; + ent_list[j] = ""; + } + } + + fx_list_count[i] = count; + } + + for ( i = 0; i < fx_list_count.size - 1; i++ ) + { + for ( j = i + 1; j < fx_list_count.size; j++ ) + { + if ( fx_list_count[j] < fx_list_count[i] ) + { + temp_count = fx_list_count[i]; + temp_id = fx_list[i]; + fx_list_count[i] = fx_list_count[j]; + fx_list[i] = fx_list[j]; + fx_list_count[j] = temp_count; + fx_list[j] = temp_id; + } + } + } + + for ( i = 0; i < fx_list_count.size; i++ ) + { + switch ( fx_list_count[i] ) + { + case 0: + print( "^1" ); + break; + case 1: + print( "^3" ); + break; + default: + break; + } + + print( fx_list_count[i] + "\\t" + fx_list[i] + "\\n" ); + } + + print( "\\n" ); +#/ +} + +vector_changed( old, new ) +{ + if ( distancesquared( old, new ) >= 1 ) + return true; + + return false; +} + +dot_changed( old, new ) +{ + dot = vectordot( old, new ); + + if ( dot < 1 ) + return true; + + return false; +} + +damage_void( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) +{ + +} + +handle_camera() +{ +/# + level notify( "new_camera" ); + level endon( "new_camera" ); + movement = ( 0, 0, 0 ); + + if ( !isdefined( level.camera ) ) + { + level.camera = spawn( "script_origin", ( 0, 0, 0 ) ); + level.camera setmodel( "tag_origin" ); + } + + players = get_players(); + players[0] playerlinktodelta( level.camera, "tag_origin", 1, 0, 0, 0, 0, 1 ); + players[0] disableweapons(); + level.camera_snapto = 1; + level.stick_camera = 1; + level.camera_prev_snapto = 0; + level.cameravec = ( 90, 150, 20 ); + model = undefined; + n_y_vector = 0; + n_x_vector = 0; + zoom_level = 300; + b_changes_x = 0; + b_changes_z = 0; + b_changes_y = 0; + test_string = ""; + + while ( true ) + { + if ( level.camera_snapto > 0 ) + { + if ( level.stick_camera ) + { + originoffset = vectorscale( level.cameravec, -1 ); + temp_offset = originoffset + vectorscale( ( 0, 0, -1 ), 60.0 ); + anglesoffset = vectortoangles( temp_offset ); + + if ( level.camera_prev_snapto == level.camera_snapto ) + { + players = get_players(); + newmovement = players[0] getnormalizedmovement(); + dolly_movement = players[0] getnormalizedcameramovement(); + + if ( button_is_held( "BUTTON_LTRIG" ) || button_is_held( "BUTTON_RTRIG" ) ) + { + + } + else + { + if ( newmovement[1] <= -0.4 ) + { + n_y_vector += -0.2; + b_changes_y = 1; + } + else if ( newmovement[1] >= 0.4 ) + { + n_y_vector += 0.2; + b_changes_y = 1; + } + else + b_changes_y = 0; + + if ( newmovement[0] <= -0.4 ) + { + n_x_vector += -0.4; + b_changes_x = 1; + } + else if ( newmovement[0] >= 0.4 ) + { + n_x_vector += 0.4; + b_changes_x = 1; + } + else + b_changes_x = 0; + + if ( dolly_movement[0] <= -0.4 ) + { + zoom_level += 30; + b_changes_z = 1; + } + else if ( dolly_movement[0] >= 0.4 ) + { + zoom_level += -30; + b_changes_z = 1; + } + else + b_changes_z = 0; + + if ( b_changes_z || b_changes_x || b_changes_y ) + { + newmovement = ( n_x_vector, n_y_vector, newmovement[2] ); + movement = ( 0, 0, 0 ); + movement = vectorscale( movement, 0.8 ) + vectorscale( newmovement, 1 - 0.8 ); + tilt = max( 0, 10 + movement[0] * 160 ); + level.cameravec = ( cos( movement[1] * 180 ) * zoom_level, sin( movement[1] * 180 ) * zoom_level, tilt ); + iprintln( level.cameravec[0] + " " + level.cameravec[1] + " " + level.cameravec[2] ); + } + } + } + else + level.camera_prev_snapto = level.camera_snapto; + + if ( isdefined( level.current_select_ent ) ) + { + originoffset = vectorscale( level.cameravec, -1 ); + temp_offset = originoffset + vectorscale( ( 0, 0, -1 ), 60.0 ); + anglesoffset = vectortoangles( temp_offset ); + + if ( !isdefined( model ) ) + { + model = spawn( "script_origin", level.current_select_ent.v["origin"] ); + model setmodel( "tag_origin" ); + } + + if ( model.origin != level.current_select_ent.v["origin"] ) + model.origin = level.current_select_ent.v["origin"]; + + level.camera linkto( model, "tag_origin", level.cameravec, anglesoffset ); + } + else + { + wait 0.05; + continue; + } + } + else + level.camera unlink(); + } + + wait 0.05; + } +#/ +} + +camera_hud_toggle( text ) +{ + if ( isdefined( level.camera_hud ) ) + level.camera_hud destroy(); + + level.camera_hud = newdebughudelem(); + level.camera_hud settext( text ); + level.camera_hud.horzalign = "left"; + level.camera_hud.vertalign = "bottom"; + level.camera_hud.alignx = "left"; + level.camera_hud.aligny = "bottom"; + level.camera_hud.foreground = 1; + level.camera_hud.fontscale = 1.1; + level.camera_hud.sort = 21; + level.camera_hud.alpha = 1; + level.camera_hud.color = ( 1, 1, 1 ); +} + +init_sp_paths() +{ + +} + +make_sp_player_invulnerable( player ) +{ + +} + +delete_arrays_in_sp() +{ + +} + +used_in_animation( sp ) +{ + +} + +init_client_sp_variables() +{ + +} + +init_mp_paths() +{ + level.cfx_server_scriptdata = "mpcreatefx/"; + level.cfx_client_scriptdata = "mpclientcreatefx/"; + level.cfx_server_loop = "maps\\mp\\_utility::createLoopEffect"; + level.cfx_server_oneshot = "maps\\mp\\_utility::createOneshotEffect"; + level.cfx_server_exploder = "maps\\mp\\_utility::createExploder"; + level.cfx_server_loopsound = "maps\\mp\\_createfx::createLoopSound"; + level.cfx_server_scriptgendump = "maps\\mp\\createfx\\" + level.script + "_fx::main();"; + level.cfx_client_loop = "clientscripts\\mp\\_fx::createLoopEffect"; + level.cfx_client_oneshot = "clientscripts\\mp\\_fx::createOneshotEffect"; + level.cfx_client_exploder = "clientscripts\\mp\\_fx::createExploder"; + level.cfx_client_loopsound = "clientscripts\\mp\\_fx::createLoopSound"; + level.cfx_client_scriptgendump = "clientscripts\\mp\\_createfx\\" + level.script + "_fx::main();"; + level.cfx_func_run_gump_func = ::empty; + level.cfx_func_loopfx = maps\mp\_fx::loopfxthread; + level.cfx_func_oneshotfx = maps\mp\_fx::oneshotfxthread; + level.cfx_func_soundfx = maps\mp\_fx::create_loopsound; + level.cfx_func_script_gen_dump = maps\mp\_script_gen::script_gen_dump; + level.cfx_func_stop_loopsound = maps\mp\_fx::stop_loopsound; + level.cfx_func_create_looper = maps\mp\_fx::create_looper; + level.cfx_func_create_triggerfx = maps\mp\_fx::create_triggerfx; + level.cfx_func_create_loopsound = maps\mp\_fx::create_loopsound; +} + +callback_playerconnect() +{ + self waittill( "begin" ); + + if ( !isdefined( level.hasspawned ) ) + { + spawnpoints = getentarray( "mp_global_intermission", "classname" ); + + if ( !spawnpoints.size ) + spawnpoints = getentarray( "info_player_start", "classname" ); + + assert( spawnpoints.size ); + spawnpoint = spawnpoints[0]; + self.sessionteam = "none"; + self.sessionstate = "playing"; + + if ( !level.teambased ) + self.ffateam = "none"; + + self spawn( spawnpoint.origin, spawnpoint.angles ); + level.player = self; + level.hasspawned = 1; + } + else + kick( self.name ); +} + +delete_spawns() +{ + spawn_classes = []; + spawn_classes[spawn_classes.size] = "mp_dm_spawn"; + spawn_classes[spawn_classes.size] = "mp_tdm_spawn"; + spawn_classes[spawn_classes.size] = "mp_dom_spawn"; + spawn_classes[spawn_classes.size] = "mp_dom_spawn_axis_start"; + spawn_classes[spawn_classes.size] = "mp_dom_spawn_allies_start"; + spawn_classes[spawn_classes.size] = "mp_res_spawn_allies"; + spawn_classes[spawn_classes.size] = "mp_res_spawn_axis"; + spawn_classes[spawn_classes.size] = "mp_res_spawn_axis_start"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_attacker"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_attacker_a"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_attacker_b"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_attacker_c"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_attacker_start"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_attackerOT_start"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_defender"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_defender_a"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_defender_b"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_defender_c"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_defender_start"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_defenderOT_start"; + + foreach ( class in spawn_classes ) + { + spawns = getentarray( class, "classname" ); + + foreach ( spawn in spawns ) + spawn delete(); + } +} + +createfxdelay() +{ + wait 10; + level.createfx_delay_done = 1; +} + +init_client_mp_variables() +{ + level.cfx_exploder_before = maps\mp\_utility::exploder_before_load; + level.cfx_exploder_after = maps\mp\_utility::exploder_after_load; +} diff --git a/ZM/Core/maps/mp/_createfxmenu.gsc b/ZM/Core/maps/mp/_createfxmenu.gsc new file mode 100644 index 0000000..2e27bec --- /dev/null +++ b/ZM/Core/maps/mp/_createfxmenu.gsc @@ -0,0 +1,941 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\_createfx; +#include maps\mp\_createfxundo; + +menu( name ) +{ +/# + return level.create_fx_menu == name; +#/ +} + +setmenu( name ) +{ +/# + level.create_fx_menu = name; +#/ +} + +create_fx_menu() +{ +/# + if ( button_is_clicked( "escape", "x" ) ) + { + exit_menu(); + return; + } + + if ( menu( "creation" ) ) + { + if ( button_is_clicked( "1" ) ) + { + setmenu( "create_oneshot" ); + draw_effects_list(); + return; + } + + if ( button_is_clicked( "2" ) ) + { + setmenu( "create_loopfx" ); + draw_effects_list(); + return; + } + + if ( button_is_clicked( "3" ) ) + { + setmenu( "create_exploder" ); + draw_effects_list(); + return; + } + + if ( button_is_clicked( "4" ) ) + { + setmenu( "create_loopsound" ); + ent = createloopsound(); + finish_creating_entity( ent ); + setmenu( "none" ); + return; + } + } + + if ( menu( "create_oneshot" ) || menu( "create_loopfx" ) || menu( "create_exploder" ) || menu( "change_fxid" ) ) + { + if ( button_is_clicked( "rightarrow" ) ) + { + increment_list_offset(); + draw_effects_list(); + } + + if ( button_is_clicked( "leftarrow" ) ) + { + decrement_list_offset(); + draw_effects_list(); + } + + menu_fx_creation(); + } + else if ( menu( "none" ) ) + { + menu_change_selected_fx(); + + if ( entities_are_selected() ) + { + display_fx_info( get_last_selected_entity() ); + + if ( button_is_clicked( "a" ) ) + { + clear_settable_fx(); + setmenu( "add_options" ); + } + } + } + else if ( menu( "add_options" ) ) + { + if ( !entities_are_selected() ) + { + clear_fx_hudelements(); + setmenu( "none" ); + return; + } + + display_fx_add_options( get_last_selected_entity() ); + + if ( button_is_clicked( "rightarrow" ) ) + increment_list_offset(); + + if ( button_is_clicked( "leftarrow" ) ) + decrement_list_offset(); + } + else if ( menu( "jump_to_effect" ) ) + { + if ( button_is_clicked( "rightarrow" ) ) + { + increment_list_offset(); + draw_effects_list( "Select effect to jump to:" ); + } + + if ( button_is_clicked( "leftarrow" ) ) + { + decrement_list_offset(); + draw_effects_list( "Select effect to jump to:" ); + } + + jump_to_effect(); + } + else if ( menu( "select_by_property" ) ) + { + menu_selection(); + + if ( button_is_clicked( "rightarrow" ) ) + increment_list_offset(); + + if ( button_is_clicked( "leftarrow" ) ) + decrement_list_offset(); + } + else if ( menu( "change_type" ) ) + { + if ( !entities_are_selected() ) + { + clear_fx_hudelements(); + setmenu( "none" ); + return; + } + else + menu_fx_type(); + } +#/ +} + +exit_menu() +{ +/# + clear_fx_hudelements(); + clear_entity_selection(); + update_selected_entities(); + setmenu( "none" ); +#/ +} + +get_last_selected_entity() +{ +/# + return level.selected_fx_ents[level.selected_fx_ents.size - 1]; +#/ +} + +menu_fx_creation() +{ +/# + count = 0; + picked_fx = undefined; + keys = get_level_ambient_fx(); + + for ( i = level.effect_list_offset; i < keys.size; i++ ) + { + count += 1; + button_to_check = count; + + if ( button_to_check == 10 ) + button_to_check = 0; + + if ( button_is_clicked( button_to_check + "" ) && !button_is_held( "f" ) ) + { + picked_fx = keys[i]; + break; + } + + if ( count > level.effect_list_offset_max ) + break; + } + + if ( !isdefined( picked_fx ) ) + return; + + if ( menu( "change_fxid" ) ) + { + apply_option_to_selected_fx( get_option( "fxid" ), picked_fx ); + level.effect_list_offset = 0; + clear_fx_hudelements(); + setmenu( "none" ); + return; + } + + ent = undefined; + + if ( menu( "create_loopfx" ) ) + ent = createloopeffect( picked_fx ); + + if ( menu( "create_oneshot" ) ) + { + ent = createoneshoteffect( picked_fx ); + delay_min = getdvarint( "createfx_oneshot_min_delay" ); + delay_max = getdvarint( "createfx_oneshot_max_delay" ); + + if ( delay_min > delay_max ) + { + temp = delay_min; + delay_min = delay_max; + delay_max = temp; + } + + ent.v["delay"] = randomintrange( delay_min, delay_max ); + } + + if ( menu( "create_exploder" ) ) + ent = createexploder( picked_fx ); + + finish_creating_entity( ent ); + + if ( level.cfx_last_action != "none" ) + store_undo_state( "edit", level.selected_fx_ents ); + + store_undo_state( "add", level.createfxent[level.createfxent.size - 1] ); + level.cfx_last_action = "none"; + setmenu( "none" ); +#/ +} + +finish_creating_entity( ent ) +{ +/# + ent.v["angles"] = vectortoangles( ent.v["origin"] + vectorscale( ( 0, 0, 1 ), 100.0 ) - ent.v["origin"] ); + assert( isdefined( ent ) ); + ent post_entity_creation_function(); + clear_entity_selection(); + select_last_entity( "skip_undo" ); + move_selection_to_cursor( "skip_undo" ); + update_selected_entities(); +#/ +} + +change_effect_to_oneshot( ent ) +{ +/# + if ( ent.v["type"] == "oneshotfx" ) + return; + + if ( ent.v["type"] == "exploder" ) + { + ent.v["exploder"] = undefined; + ent.v["exploder_type"] = undefined; + ent.v["soundalias"] = undefined; + } + + if ( !isdefined( ent.v["delay"] ) || ent.v["delay"] == 0 ) + { + delay_min = getdvarint( "createfx_oneshot_min_delay" ); + delay_max = getdvarint( "createfx_oneshot_max_delay" ); + + if ( delay_min > delay_max ) + { + temp = delay_min; + delay_min = delay_max; + delay_max = temp; + } + + ent.v["delay"] = randomintrange( delay_min, delay_max ); + } + + ent.v["type"] = "oneshotfx"; +#/ +} + +change_effect_to_loop( ent ) +{ +/# + if ( ent.v["type"] == "loopfx" ) + return; + + if ( ent.v["type"] == "exploder" ) + { + ent.v["exploder"] = undefined; + ent.v["exploder_type"] = undefined; + ent.v["soundalias"] = undefined; + } + + if ( !isdefined( ent.v["delay"] ) || ent.v["delay"] <= 0 ) + ent.v["delay"] = 1; + + ent.v["type"] = "loopfx"; +#/ +} + +change_effect_to_exploder( ent ) +{ +/# + if ( ent.v["type"] == "exploder" ) + return; + + ent.v["type"] = "exploder"; + + if ( !isdefined( ent.v["delay"] ) || ent.v["delay"] < 0 ) + ent.v["delay"] = 0; + + ent.v["exploder"] = 1; + ent.v["exploder_type"] = "normal"; +#/ +} + +change_ent_type( newtype ) +{ +/# + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "ent_type"; + + if ( newtype == "oneshotfx" ) + { + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + change_effect_to_oneshot( level.selected_fx_ents[i] ); + } + else if ( newtype == "loopfx" ) + { + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + change_effect_to_loop( level.selected_fx_ents[i] ); + } + else if ( newtype == "exploder" ) + { + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + change_effect_to_exploder( level.selected_fx_ents[i] ); + } +#/ +} + +menu_init() +{ +/# + level.createfx_options = []; + addoption( "string", "type", "Type", "oneshotfx", "fx" ); + addoption( "string", "fxid", "Name", "nil", "fx" ); + addoption( "vector", "origin", "Origin", ( 0, 0, 0 ), "fx" ); + addoption( "vector", "angles", "Angles", ( 0, 0, 0 ), "fx" ); + addoption( "float", "delay", "Repeat rate/start delay", 0.5, "fx" ); + addoption( "int", "repeat", "Number of times to repeat", 5, "exploder" ); + addoption( "float", "primlightfrac", "Primary light fraction", 1.0, "fx" ); + addoption( "int", "lightoriginoffs", "Light origin offset", 64, "fx" ); + addoption( "float", "delay_min", "Minimum time between repeats", 1, "exploder" ); + addoption( "float", "delay_max", "Maximum time between repeats", 2, "exploder" ); + addoption( "float", "fire_range", "Fire damage range", 0, "fx" ); + addoption( "string", "firefx", "2nd FX id", "nil", "exploder" ); + addoption( "float", "firefxdelay", "2nd FX id repeat rate", 0.5, "exploder" ); + addoption( "float", "firefxtimeout", "2nd FX timeout", 5, "exploder" ); + addoption( "string", "firefxsound", "2nd FX soundalias", "nil", "exploder" ); + addoption( "string", "ender", "Level notify for ending 2nd FX", "nil", "exploder" ); + addoption( "string", "rumble", "Rumble", "nil", "exploder" ); + addoption( "float", "damage", "Radius damage", 150, "exploder" ); + addoption( "float", "damage_radius", "Radius of radius damage", 250, "exploder" ); + addoption( "int", "exploder", "Exploder", 1, "exploder" ); + addoption( "string", "earthquake", "Earthquake", "nil", "exploder" ); + addoption( "string", "soundalias", "Soundalias", "nil", "all" ); + addoption( "int", "stoppable", "Can be stopped from script", "1", "all" ); + level.effect_list_offset = 0; + level.effect_list_offset_max = 9; + level.createfxmasks = []; + level.createfxmasks["all"] = []; + level.createfxmasks["all"]["exploder"] = 1; + level.createfxmasks["all"]["oneshotfx"] = 1; + level.createfxmasks["all"]["loopfx"] = 1; + level.createfxmasks["all"]["soundfx"] = 1; + level.createfxmasks["fx"] = []; + level.createfxmasks["fx"]["exploder"] = 1; + level.createfxmasks["fx"]["oneshotfx"] = 1; + level.createfxmasks["fx"]["loopfx"] = 1; + level.createfxmasks["exploder"] = []; + level.createfxmasks["exploder"]["exploder"] = 1; + level.createfxmasks["loopfx"] = []; + level.createfxmasks["loopfx"]["loopfx"] = 1; + level.createfxmasks["oneshotfx"] = []; + level.createfxmasks["oneshotfx"]["oneshotfx"] = 1; + level.createfxmasks["soundfx"] = []; + level.createfxmasks["soundfx"]["soundalias"] = 1; +#/ +} + +get_last_selected_ent() +{ +/# + return level.selected_fx_ents[level.selected_fx_ents.size - 1]; +#/ +} + +entities_are_selected() +{ +/# + return level.selected_fx_ents.size > 0; +#/ +} + +menu_change_selected_fx() +{ +/# + if ( !level.selected_fx_ents.size ) + return; + + count = 0; + drawncount = 0; + ent = get_last_selected_ent(); + + for ( i = 0; i < level.createfx_options.size; i++ ) + { + option = level.createfx_options[i]; + + if ( !isdefined( ent.v[option["name"]] ) ) + continue; + + count++; + + if ( count < level.effect_list_offset ) + continue; + + drawncount++; + button_to_check = drawncount; + + if ( button_to_check == 10 ) + button_to_check = 0; + + if ( button_is_clicked( button_to_check + "" ) && !button_is_held( "f" ) ) + { + prepare_option_for_change( option, drawncount ); + break; + } + + if ( drawncount > level.effect_list_offset_max ) + break; + } +#/ +} + +prepare_option_for_change( option, drawncount ) +{ +/# + if ( option["name"] == "fxid" ) + { + setmenu( "change_fxid" ); + draw_effects_list(); + return; + } + + if ( option["name"] == "type" ) + { + setmenu( "change_type" ); + return; + } + + level.createfx_inputlocked = 1; + set_option_index( option["name"] ); + setdvar( "fx", "nil" ); + level.createfxhudelements[drawncount + 1][0].color = ( 1, 1, 0 ); +#/ +} + +menu_fx_option_set() +{ +/# + if ( getdvar( "fx" ) == "nil" ) + return; + + option = get_selected_option(); + setting = undefined; + + if ( option["type"] == "string" ) + setting = getdvar( "fx" ); + + if ( option["type"] == "int" ) + setting = getdvarint( "fx" ); + + if ( option["type"] == "float" ) + setting = getdvarfloat( "fx" ); + + if ( option["type"] == "vector" ) + { + setting = getdvar( "fx" ); + temparray = strtok( setting, " " ); + + if ( temparray.size == 3 ) + setting = ( float( temparray[0] ), float( temparray[1] ), float( temparray[2] ) ); + else + { + clear_settable_fx(); + return; + } + } + + apply_option_to_selected_fx( option, setting ); +#/ +} + +menu_fx_type() +{ +/# + clear_fx_hudelements(); + set_fx_hudelement( "Change effect type to:" ); + set_fx_hudelement( " (1) Oneshot" ); + set_fx_hudelement( " (2) Looped" ); + set_fx_hudelement( " (3) Exploder" ); + set_fx_hudelement( "(x) Exit >" ); + + if ( button_is_clicked( "1" ) && !button_is_held( "f" ) ) + { + change_ent_type( "oneshotfx" ); + setmenu( "none" ); + } + else if ( button_is_clicked( "2" ) && !button_is_held( "f" ) ) + { + change_ent_type( "loopfx" ); + setmenu( "none" ); + } + else if ( button_is_clicked( "3" ) && !button_is_held( "f" ) ) + { + change_ent_type( "exploder" ); + setmenu( "none" ); + } + + if ( menu( "none" ) ) + update_selected_entities(); +#/ +} + +menu_selection() +{ +/# + clear_fx_hudelements(); + set_fx_hudelement( "Select all by property:" ); + drawncount = 0; + option_number = 0; + ent = level.selected_fx_ents[level.selected_fx_ents.size - 1]; + + if ( level.selected_fx_ents.size < 1 ) + set_fx_hudelement( "No ent is selected." ); + else + { + for ( i = level.effect_list_offset; i < level.createfx_options.size; i++ ) + { + if ( drawncount > level.effect_list_offset_max ) + break; + + if ( drawncount > ent.v.size ) + break; + + prop_name = level.createfx_options[i]["name"]; + option_number = drawncount + 1; + + if ( isdefined( ent.v[prop_name] ) ) + { + if ( button_is_clicked( option_number + "" ) && !button_is_held( "f" ) ) + { + level.cfx_selected_prop = prop_name; + menunone(); + level.effect_list_offset = 0; + return; + } + + prop_desc = level.createfx_options[i]["description"]; + set_fx_hudelement( option_number + ". " + prop_desc + ": " + ent.v[prop_name] ); + drawncount++; + continue; + } + } + } + + if ( drawncount > level.effect_list_offset_max ) + { + pages = ceil( ent.v.size / level.effect_list_offset_max ); + current_page = level.effect_list_offset / level.effect_list_offset_max + 1; + set_fx_hudelement( "(<-) Page " + current_page + " of " + pages + " (->)" ); + } + + set_fx_hudelement( "(x) Exit >" ); +#/ +} + +apply_option_to_selected_fx( option, setting ) +{ +/# + if ( level.cfx_last_action != option["name"] ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = option["name"]; + } + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + + if ( mask( option["mask"], ent.v["type"] ) ) + ent.v[option["name"]] = setting; + } + + update_selected_entities(); + clear_settable_fx(); +#/ +} + +set_option_index( name ) +{ +/# + for ( i = 0; i < level.createfx_options.size; i++ ) + { + if ( level.createfx_options[i]["name"] != name ) + continue; + + level.selected_fx_option_index = i; + return; + } +#/ +} + +get_selected_option() +{ +/# + return level.createfx_options[level.selected_fx_option_index]; +#/ +} + +mask( type, name ) +{ +/# + return isdefined( level.createfxmasks[type][name] ); +#/ +} + +addoption( type, name, description, defaultsetting, mask ) +{ +/# + option = []; + option["type"] = type; + option["name"] = name; + option["description"] = description; + option["default"] = defaultsetting; + option["mask"] = mask; + level.createfx_options[level.createfx_options.size] = option; +#/ +} + +get_option( name ) +{ +/# + for ( i = 0; i < level.createfx_options.size; i++ ) + { + if ( level.createfx_options[i]["name"] == name ) + return level.createfx_options[i]; + } +#/ +} + +display_fx_info( ent ) +{ +/# + if ( !menu( "none" ) ) + return; + + clear_fx_hudelements(); + + if ( !level.createfx_draw_enabled ) + return; + + set_fx_hudelement( "Selected: " + level.selected_fx_ents.size + " Distance: " + get_distance_from_ent( ent ) ); + level.createfxhudelements[0][0].color = ( 1, 1, 0 ); + set_fx_hudelement( "Name: " + ent.v["fxid"] ); + + if ( entities_are_selected() ) + { + count = 0; + drawncount = 0; + + for ( i = 0; i < level.createfx_options.size; i++ ) + { + option = level.createfx_options[i]; + + if ( !isdefined( ent.v[option["name"]] ) ) + continue; + + count++; + + if ( count < level.effect_list_offset ) + continue; + + drawncount++; + set_fx_hudelement( drawncount + ". " + option["description"] + ": " + ent.v[option["name"]] ); + + if ( drawncount > level.effect_list_offset_max ) + { + more = 1; + break; + } + } + + if ( count > level.effect_list_offset_max ) + { + pages = ceil( level.createfx_options.size / level.effect_list_offset_max ); + current_page = level.effect_list_offset / level.effect_list_offset_max + 1; + set_fx_hudelement( "(<-) Page " + current_page + " of " + pages + " (->)" ); + } + + set_fx_hudelement( "(a) Add >" ); + set_fx_hudelement( "(x) Exit >" ); + } + else + { + set_fx_hudelement( "Origin: " + ent.v["origin"] ); + set_fx_hudelement( "Angles: " + ent.v["angles"] ); + } +#/ +} + +display_fx_add_options( ent ) +{ +/# + assert( menu( "add_options" ) ); + assert( entities_are_selected() ); + clear_fx_hudelements(); + set_fx_hudelement( "Selected: " + level.selected_fx_ents.size + " Distance: " + get_distance_from_ent( ent ) ); + level.createfxhudelements[0][0].color = ( 1, 1, 0 ); + set_fx_hudelement( "Name: " + ent.v["fxid"] ); + set_fx_hudelement( "Origin: " + ent.v["origin"] ); + set_fx_hudelement( "Angles: " + ent.v["angles"] ); + count = 0; + drawncount = 0; + + if ( level.effect_list_offset >= level.createfx_options.size ) + level.effect_list_offset = 0; + + for ( i = 0; i < level.createfx_options.size; i++ ) + { + option = level.createfx_options[i]; + + if ( isdefined( ent.v[option["name"]] ) ) + continue; + + if ( !mask( option["mask"], ent.v["type"] ) ) + continue; + + count++; + + if ( count < level.effect_list_offset ) + continue; + + if ( drawncount >= level.effect_list_offset_max ) + continue; + + drawncount++; + button_to_check = drawncount; + + if ( button_to_check == 10 ) + button_to_check = 0; + + if ( button_is_clicked( button_to_check + "" ) && !button_is_held( "f" ) ) + { + add_option_to_selected_entities( option ); + menunone(); + return; + } + + set_fx_hudelement( button_to_check + ". " + option["description"] ); + } + + if ( count > level.effect_list_offset_max ) + { + pages = ceil( level.createfx_options.size / level.effect_list_offset_max ); + current_page = level.effect_list_offset / level.effect_list_offset_max + 1; + set_fx_hudelement( "(<-) Page " + current_page + " of " + pages + " (->)" ); + } + + set_fx_hudelement( "(x) Exit >" ); +#/ +} + +add_option_to_selected_entities( option ) +{ +/# + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + + if ( mask( option["mask"], ent.v["type"] ) ) + ent.v[option["name"]] = option["default"]; + } +#/ +} + +menunone() +{ +/# + level.effect_list_offset = 0; + clear_fx_hudelements(); + setmenu( "none" ); +#/ +} + +draw_effects_list( title ) +{ +/# + clear_fx_hudelements(); + + if ( !isdefined( title ) ) + title = "Pick an effect:"; + + set_fx_hudelement( title ); + count = 0; + more = 0; + keys = get_level_ambient_fx(); + + if ( level.effect_list_offset >= keys.size ) + level.effect_list_offset = 0; + else if ( level.effect_list_offset < 0 ) + level.effect_list_offset = int( floor( keys.size / level.effect_list_offset_max ) * level.effect_list_offset_max ); + + for ( i = level.effect_list_offset; i < keys.size; i++ ) + { + count += 1; + set_fx_hudelement( count + ". " + keys[i] ); + + if ( count >= level.effect_list_offset_max ) + { + more = 1; + break; + } + } + + if ( keys.size > level.effect_list_offset_max ) + { + pages = ceil( keys.size / level.effect_list_offset_max ); + current_page = level.effect_list_offset / level.effect_list_offset_max + 1; + set_fx_hudelement( "(<-) Page " + current_page + " of " + pages + " (->)" ); + } +#/ +} + +increment_list_offset() +{ +/# + level.effect_list_offset += level.effect_list_offset_max; +#/ +} + +decrement_list_offset() +{ +/# + level.effect_list_offset -= level.effect_list_offset_max; +#/ +} + +jump_to_effect() +{ +/# + count = 0; + picked_fxid = undefined; + keys = get_level_ambient_fx(); + + for ( i = level.effect_list_offset; i < keys.size; i++ ) + { + count += 1; + button_to_check = count; + + if ( button_to_check == 10 ) + button_to_check = 0; + + if ( button_is_clicked( button_to_check + "" ) && !button_is_held( "f" ) ) + { + picked_fxid = keys[i]; + break; + } + + if ( count > level.effect_list_offset_max ) + break; + } + + if ( !isdefined( picked_fxid ) ) + return; + + clear_entity_selection(); + ent = get_next_ent_with_same_id( -1, picked_fxid ); + + if ( isdefined( ent ) ) + { + level.cfx_next_ent = ent; + move_player_to_next_same_effect( 1 ); + } + else + iprintln( "Effect " + picked_fxid + " has not been placed." ); + + level.effect_list_offset = 0; + clear_fx_hudelements(); + setmenu( "none" ); +#/ +} + +get_level_ambient_fx() +{ +/# + if ( !isdefined( level._effect_keys ) ) + { + keys = getarraykeys( level._effect ); + level._effect_keys = []; + k = 0; + + for ( i = 0; i < keys.size; i++ ) + { + if ( issubstr( keys[i], "fx_" ) ) + { + level._effect_keys[k] = keys[i]; + k++; + } + } + + if ( level._effect_keys.size == 0 ) + level._effect_keys = keys; + } + + return level._effect_keys; +#/ +} + +get_distance_from_ent( ent ) +{ +/# + player = get_players()[0]; + return distance( player geteye(), ent.v["origin"] ); +#/ +} diff --git a/ZM/Core/maps/mp/_createfxundo.gsc b/ZM/Core/maps/mp/_createfxundo.gsc new file mode 100644 index 0000000..3ef987b --- /dev/null +++ b/ZM/Core/maps/mp/_createfxundo.gsc @@ -0,0 +1,508 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\_createfx; +#include maps\mp\_createfxmenu; + +store_undo_state( change_type, ents ) +{ + if ( !isdefined( level.cfx_undo_states ) ) + { + level.cfx_undo_states = []; + level.cfx_redo_states = []; + level.cfx_limbo_state = spawnstruct(); + level.cfx_max_states = 10; + } + + if ( !isarray( ents ) ) + ents = array( ents ); + + temp_array = []; + + for ( i = 0; i < ents.size; i++ ) + temp_array[i] = copy_fx_ent( ents[i] ); + + state = spawnstruct(); + state.operation = change_type; + state.last_action = level.cfx_last_action; + state.ent_array = temp_array; + + if ( level.cfx_undo_states.size >= level.cfx_max_states ) + level.cfx_undo_states = array_drop( level.cfx_undo_states ); + + level.cfx_undo_states[level.cfx_undo_states.size] = state; + level.cfx_redo_states = []; + level.cfx_limbo_state = undefined; + debug_print_latest_state( "undo" ); +} + +undo() +{ + if ( !isdefined( level.createfxent ) || !isdefined( level.cfx_undo_states ) || level.cfx_undo_states.size < 1 ) + return; + + revert_state = level.cfx_undo_states[level.cfx_undo_states.size - 1]; + + if ( level.cfx_last_action != "none" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + move_undo_state_to_redo(); + clear_entity_selection( "skip_undo" ); + apply_state_change( "undo", revert_state ); + move_undo_state_to_limbo(); + level.cfx_last_action = "none"; + } + else + { + clear_entity_selection( "skip_undo" ); + + if ( revert_state.operation != "edit" ) + { + apply_state_change( "undo", revert_state ); + move_undo_state_to_redo(); + level.cfx_last_action = "none"; + } + else if ( isdefined( level.cfx_limbo_state ) ) + { + move_limbo_state_to_redo(); + apply_state_change( "undo", revert_state ); + move_undo_state_to_limbo(); + level.cfx_last_action = "none"; + } + else + { + if ( level.cfx_undo_states.size > 1 ) + { + move_undo_state_to_redo(); + revert_state = level.cfx_undo_states[level.cfx_undo_states.size - 1]; + } + + apply_state_change( "undo", revert_state ); + move_undo_state_to_limbo(); + } + } +} + +apply_state_change( type, revert_state ) +{ + if ( type == "undo" ) + { +/# + println( "^2CreateFX: Undo operation" ); +#/ + if ( revert_state.operation == "edit" ) + undo_edit( revert_state.ent_array ); + else if ( revert_state.operation == "add" ) + undo_add( revert_state.ent_array ); + else if ( revert_state.operation == "delete" ) + undo_delete( revert_state.ent_array ); + } + else + { +/# + println( "^2CreateFX: Redo operation" ); +#/ + if ( revert_state.operation == "edit" ) + undo_edit( revert_state.ent_array ); + else if ( revert_state.operation == "add" ) + undo_delete( revert_state.ent_array ); + else if ( revert_state.operation == "delete" ) + undo_add( revert_state.ent_array ); + } +} + +move_undo_state_to_redo() +{ + if ( level.cfx_redo_states.size >= level.cfx_max_states ) + level.cfx_redo_states = array_drop( level.cfx_redo_states ); + + level.cfx_redo_states[level.cfx_redo_states.size] = level.cfx_undo_states[level.cfx_undo_states.size - 1]; + level.cfx_undo_states = array_pop( level.cfx_undo_states ); + debug_print_latest_state( "undo" ); + debug_print_latest_state( "redo" ); +} + +move_redo_state_to_undo() +{ + if ( level.cfx_undo_states.size >= level.cfx_max_states ) + level.cfx_undo_states = array_drop( level.cfx_undo_states ); + + level.cfx_undo_states[level.cfx_undo_states.size] = level.cfx_redo_states[level.cfx_redo_states.size - 1]; + level.cfx_redo_states = array_pop( level.cfx_redo_states ); + debug_print_latest_state( "undo" ); + debug_print_latest_state( "redo" ); +} + +move_undo_state_to_limbo() +{ + level.cfx_limbo_state = level.cfx_undo_states[level.cfx_undo_states.size - 1]; + level.cfx_undo_states = array_pop( level.cfx_undo_states ); + debug_print_latest_state( "undo" ); + debug_print_latest_state( "limbo" ); +} + +move_redo_state_to_limbo() +{ + level.cfx_limbo_state = level.cfx_redo_states[level.cfx_redo_states.size - 1]; + level.cfx_redo_states = array_pop( level.cfx_redo_states ); + debug_print_latest_state( "redo" ); + debug_print_latest_state( "limbo" ); +} + +move_limbo_state_to_undo() +{ + if ( level.cfx_undo_states.size >= level.cfx_max_states ) + level.cfx_undo_states = array_drop( level.cfx_undo_states ); + + level.cfx_undo_states[level.cfx_undo_states.size] = level.cfx_limbo_state; + level.cfx_limbo_state = undefined; + debug_print_latest_state( "undo" ); + debug_print_latest_state( "limbo" ); +} + +move_limbo_state_to_redo() +{ + if ( level.cfx_redo_states.size >= level.cfx_max_states ) + level.cfx_redo_states = array_drop( level.cfx_redo_states ); + + level.cfx_redo_states[level.cfx_redo_states.size] = level.cfx_limbo_state; + level.cfx_limbo_state = undefined; + debug_print_latest_state( "redo" ); +} + +undo_edit( ent_array ) +{ + ent_array = reorder_ent_array_by_uniqueid( ent_array ); +/# + println( "^3CreateFX: Undoing edit" ); + debug_print_ent_array( ent_array, "ent_array[]" ); + debug_print_ent_array( level.createfxent, "level.createFXent[]" ); +#/ + last_id = ent_array[ent_array.size - 1].uniqueid; + + if ( last_id > level.createfxent.size - 1 ) + last_id = level.createfxent.size - 1; + + j = ent_array.size - 1; + source_ent = ent_array[j]; + + for ( i = last_id; i >= 0; i-- ) + { + target_ent = level.createfxent[i]; + + if ( source_ent.uniqueid == target_ent.uniqueid ) + { + copy_values_between_fx_ents( source_ent, target_ent ); + select_entity( i, target_ent, "skip_undo" ); + j--; + + if ( j < 0 ) + break; + + source_ent = ent_array[j]; + } + } + + update_selected_entities(); +/# + println( "^1CreateFX: Finished edit" ); + debug_print_ent_array( level.createfxent, "level.createFXent[]" ); +#/ +} + +undo_add( ent_array ) +{ + ent_array = reorder_ent_array_by_uniqueid( ent_array ); +/# + println( "^3createfx: Undoing add." ); + debug_print_ent_array( ent_array, "ent_array[]" ); + debug_print_ent_array( level.createfxent, "level.createFXent[]" ); +#/ + last_id = ent_array[ent_array.size - 1].uniqueid; + + if ( last_id > level.createfxent.size - 1 ) + last_id = level.createfxent.size - 1; + + j = ent_array.size - 1; + source_ent = ent_array[j]; + + for ( i = last_id; i >= 0; i-- ) + { + target_ent = level.createfxent[i]; + + if ( source_ent.uniqueid == target_ent.uniqueid ) + { + if ( isdefined( target_ent.looper ) ) + target_ent.looper delete(); + + target_ent notify( "stop_loop" ); + level.createfxent[i] = undefined; + j--; + + if ( j < 0 ) + break; + + source_ent = ent_array[j]; + } + } +/# + debug_print_ent_array( level.createfxent, "level.createFXent[]" ); + println( "createfx: Starting array_remove_undefined()" ); +#/ + arrayremovevalue( level.createfxent, undefined ); +/# + println( "^1CreateFX: Finished undo add." ); + debug_print_ent_array( level.createfxent, "level.createFXent[]" ); +#/ + clear_fx_hudelements(); +} + +undo_delete( ent_array ) +{ +/# + println( "^3CreateFX: Undoing delete" ); + debug_print_ent_array( ent_array, "ent_array in undo_delete()" ); + debug_print_ent_array( level.createfxent, "level.createFXent[]" ); +#/ + ent_array = reorder_ent_array_by_uniqueid( ent_array ); + + if ( level.createfxent.size == 0 ) + { + for ( i = 0; i < ent_array.size; i++ ) + level.createfxent[i] = copy_fx_ent( ent_array[i] ); + } + else + { + temp_array = []; + i = 0; + + for ( j = 0; j < level.createfxent.size; j++ ) + { + target_ent = level.createfxent[j]; + + if ( i >= ent_array.size ) + { + temp_array[temp_array.size] = target_ent; + continue; + } + + source_ent = ent_array[i]; + + if ( target_ent.uniqueid < source_ent.uniqueid ) + { + temp_array[temp_array.size] = target_ent; + continue; + } + + temp_array[temp_array.size] = copy_fx_ent( source_ent ); + j--; + i++; + } + + while ( i < ent_array.size ) + { + temp_array[temp_array.size] = ent_array[i]; + i++; + } + + level.createfxent = temp_array; + } +/# + println( "^1Createfx: Finished undoing delete, pre-selection" ); + debug_print_ent_array( level.createfxent, "level.createFXent[]" ); +#/ + last_id = ent_array[ent_array.size - 1].uniqueid; + + if ( last_id > level.createfxent.size - 1 ) + last_id = level.createfxent.size - 1; + + j = ent_array.size - 1; + source_ent = ent_array[j]; + + for ( i = last_id; i >= 0; i-- ) + { + target_ent = level.createfxent[i]; + + if ( source_ent.uniqueid == target_ent.uniqueid ) + { + target_ent post_entity_creation_function(); + select_entity( i, target_ent, "skip_undo" ); + j--; + + if ( j < 0 ) + break; + + source_ent = ent_array[j]; + } + } + + update_selected_entities(); +} + +redo() +{ + if ( !isdefined( level.createfxent ) || !isdefined( level.cfx_redo_states ) || level.cfx_redo_states.size < 1 ) + return; + + clear_entity_selection( "skip_undo" ); + + if ( isdefined( level.cfx_limbo_state ) ) + { + move_limbo_state_to_undo(); + move_redo_state_to_limbo(); + apply_state_change( "redo", level.cfx_limbo_state ); + } + else + { + revert_state = level.cfx_redo_states[level.cfx_redo_states.size - 1]; + apply_state_change( "redo", revert_state ); + + if ( revert_state.operation == "edit" ) + move_redo_state_to_limbo(); + else + move_redo_state_to_undo(); + } + + level.cfx_last_action = "none"; +} + +reorder_ent_array_by_uniqueid( ent_array ) +{ + if ( ent_array.size <= 1 ) + return ent_array; + + array_size = ent_array.size; + + for ( i = 0; i < array_size - 1; i++ ) + { + for ( j = i + 1; j < array_size; j++ ) + { + if ( ent_array[i].uniqueid > ent_array[j].uniqueid ) + { + temp_ent = ent_array[i]; + ent_array[i] = ent_array[j]; + ent_array[j] = temp_ent; + } + } + } + + return ent_array; +} + +copy_fx_ent( ent ) +{ + temp_ent = spawnstruct(); + temp_ent.drawn = ent.drawn; + temp_ent.drawn_axis_model = ent.drawn_axis_model; + temp_ent.last_fx_index = ent.last_fx_index; + temp_ent.textalpha = ent.textalpha; + temp_ent.uniqueid = ent.uniqueid; + temp_ent.v = ent.v; + return temp_ent; +} + +copy_values_between_fx_ents( source, dest ) +{ + dest.drawn = source.drawn; + dest.drawn_axis_model = source.drawn_axis_model; + dest.last_fx_index = source.last_fx_index; + dest.textalpha = source.textalpha; + dest.v = source.v; + return dest; +} + +array_pop( array ) +{ + array_size = array.size - 1; + temp_array = []; + + if ( array_size <= 0 ) + return temp_array; + + for ( i = 0; i < array_size; i++ ) + temp_array[i] = array[i]; + + array = temp_array; + return array; +} + +array_drop( array ) +{ + if ( array.size > 0 ) + { + temp_array = []; + + for ( i = 1; i < array.size; i++ ) + temp_array[i - 1] = array[i]; + + array = temp_array; + } + + return array; +} + +debug_print_ent_array( array, name ) +{ +/# + if ( isdefined( name ) ) + println( "Printing out " + name ); + else + println( "Printing out some array" ); + + for ( i = 0; i < array.size; i++ ) + { + if ( !isdefined( array[i] ) ) + { + println( "" + i + ": deleted effect" ); + continue; + } + + println( "" + i + ": uniqueid: " + array[i].uniqueid + " fxid: " + array[i].v["fxid"] ); + } +#/ +} + +debug_print_latest_state( type ) +{ +/# + println( "^3Saving " + type + " state" ); + + if ( type == "undo" ) + { + if ( !isdefined( level.cfx_undo_states[level.cfx_undo_states.size - 1] ) ) + { + println( "There are no undo states." ); + return; + } + + state = level.cfx_undo_states[level.cfx_undo_states.size - 1]; + size = level.cfx_undo_states.size - 1; + } + else if ( type == "redo" ) + { + if ( !isdefined( level.cfx_redo_states[level.cfx_redo_states.size - 1] ) ) + { + println( "There are no redo states." ); + return; + } + + state = level.cfx_redo_states[level.cfx_redo_states.size - 1]; + size = level.cfx_redo_states.size - 1; + } + else + { + if ( !isdefined( level.cfx_limbo_state ) ) + { + println( "There is no limbo state." ); + return; + } + + state = level.cfx_limbo_state; + size = 0; + } + + println( "State " + size + " - " + state.operation + ": " + state.last_action ); + debug_print_ent_array( state.ent_array, "save state ent_array" ); +#/ +} diff --git a/ZM/Core/maps/mp/_demo.gsc b/ZM/Core/maps/mp/_demo.gsc new file mode 100644 index 0000000..554e430 --- /dev/null +++ b/ZM/Core/maps/mp/_demo.gsc @@ -0,0 +1,90 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +init() +{ + level.bookmark["kill"] = 0; + level.bookmark["event"] = 1; + level.bookmark["zm_round_end"] = 2; + level.bookmark["zm_player_downed"] = 3; + level.bookmark["zm_player_revived"] = 4; + level.bookmark["zm_player_bledout"] = 5; + level.bookmark["zm_player_use_magicbox"] = 6; + level.bookmark["score_event"] = 7; + level.bookmark["medal"] = 8; + level.bookmark["round_result"] = 9; + level.bookmark["game_result"] = 10; + level.bookmark["zm_powerup_dropped"] = 11; + level.bookmark["zm_player_powerup_grabbed"] = 12; + level.bookmark["zm_player_perk"] = 13; + level.bookmark["zm_power"] = 14; + level.bookmark["zm_player_door"] = 15; + level.bookmark["zm_player_buildable_placed"] = 16; + level.bookmark["zm_player_use_packapunch"] = 17; + level.bookmark["zm_player_rampage"] = 18; + level.bookmark["zm_player_grenade_special"] = 19; + level.bookmark["zm_player_grenade_multiattack"] = 20; + level.bookmark["zm_player_meat_stink"] = 21; + level.bookmark["zm_player_grabbed_magicbox"] = 22; + level.bookmark["zm_player_grabbed_packapunch"] = 23; + level.bookmark["zm_player_grenade_special_long"] = 24; +} + +bookmark( type, time, clientent1, clientent2, eventpriority, inflictorent, overrideentitycamera, actorent ) +{ + assert( isdefined( level.bookmark[type] ), "Unable to find a bookmark type for type - " + type ); + client1 = 255; + client2 = 255; + inflictorentnum = -1; + inflictorenttype = 0; + inflictorbirthtime = 0; + actorentnum = undefined; + scoreeventpriority = 0; + + if ( isdefined( clientent1 ) ) + client1 = clientent1 getentitynumber(); + + if ( isdefined( clientent2 ) ) + client2 = clientent2 getentitynumber(); + + if ( isdefined( eventpriority ) ) + scoreeventpriority = eventpriority; + + if ( isdefined( inflictorent ) ) + { + inflictorentnum = inflictorent getentitynumber(); + inflictorenttype = inflictorent getentitytype(); + + if ( isdefined( inflictorent.birthtime ) ) + inflictorbirthtime = inflictorent.birthtime; + } + + if ( !isdefined( overrideentitycamera ) ) + overrideentitycamera = 0; + + if ( isdefined( actorent ) ) + actorentnum = actorent getentitynumber(); + + adddemobookmark( level.bookmark[type], time, client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum ); +} + +gameresultbookmark( type, winningteamindex, losingteamindex ) +{ + assert( isdefined( level.bookmark[type] ), "Unable to find a bookmark type for type - " + type ); + client1 = 255; + client2 = 255; + scoreeventpriority = 0; + inflictorentnum = -1; + inflictorenttype = 0; + inflictorbirthtime = 0; + overrideentitycamera = 0; + actorentnum = undefined; + + if ( isdefined( winningteamindex ) ) + client1 = winningteamindex; + + if ( isdefined( losingteamindex ) ) + client2 = losingteamindex; + + adddemobookmark( level.bookmark[type], gettime(), client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum ); +} diff --git a/ZM/Core/maps/mp/_fx.gsc b/ZM/Core/maps/mp/_fx.gsc new file mode 100644 index 0000000..127dc2e --- /dev/null +++ b/ZM/Core/maps/mp/_fx.gsc @@ -0,0 +1,453 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\_createfx; + +print_org( fxcommand, fxid, fxpos, waittime ) +{ +/# + if ( getdvar( _hash_F49A52C ) == "1" ) + { + println( "{" ); + println( "\"origin\" \"" + fxpos[0] + " " + fxpos[1] + " " + fxpos[2] + "\"" ); + println( "\"classname\" \"script_model\"" ); + println( "\"model\" \"fx\"" ); + println( "\"script_fxcommand\" \"" + fxcommand + "\"" ); + println( "\"script_fxid\" \"" + fxid + "\"" ); + println( "\"script_delay\" \"" + waittime + "\"" ); + println( "}" ); + } +#/ +} + +oneshotfx( fxid, fxpos, waittime, fxpos2 ) +{ + +} + +oneshotfxthread() +{ + wait 0.05; + + if ( self.v["delay"] > 0 ) + wait( self.v["delay"] ); + + create_triggerfx(); +} + +create_triggerfx() +{ + self.looper = spawnfx_wrapper( self.v["fxid"], self.v["origin"], self.v["forward"], self.v["up"] ); + triggerfx( self.looper, self.v["delay"] ); + create_loopsound(); +} + +exploderfx( num, fxid, fxpos, waittime, fxpos2, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout, exploder_group ) +{ + if ( 1 ) + { + ent = createexploder( fxid ); + ent.v["origin"] = fxpos; + ent.v["angles"] = ( 0, 0, 0 ); + + if ( isdefined( fxpos2 ) ) + ent.v["angles"] = vectortoangles( fxpos2 - fxpos ); + + ent.v["delay"] = waittime; + ent.v["exploder"] = num; + return; + } + + fx = spawn( "script_origin", ( 0, 0, 0 ) ); + fx.origin = fxpos; + fx.angles = vectortoangles( fxpos2 - fxpos ); + fx.script_exploder = num; + fx.script_fxid = fxid; + fx.script_delay = waittime; + fx.script_firefx = firefx; + fx.script_firefxdelay = firefxdelay; + fx.script_firefxsound = firefxsound; + fx.script_sound = fxsound; + fx.script_earthquake = fxquake; + fx.script_damage = fxdamage; + fx.script_radius = damage_radius; + fx.script_soundalias = soundalias; + fx.script_firefxtimeout = firefxtimeout; + fx.script_repeat = repeat; + fx.script_delay_min = delay_min; + fx.script_delay_max = delay_max; + fx.script_exploder_group = exploder_group; + forward = anglestoforward( fx.angles ); + forward = vectorscale( forward, 150 ); + fx.targetpos = fxpos + forward; + + if ( !isdefined( level._script_exploders ) ) + level._script_exploders = []; + + level._script_exploders[level._script_exploders.size] = fx; + maps\mp\_createfx::createfx_showorigin( fxid, fxpos, waittime, fxpos2, "exploderfx", fx, undefined, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout ); +} + +loopfx( fxid, fxpos, waittime, fxpos2, fxstart, fxstop, timeout ) +{ +/# + println( "Loopfx is deprecated!" ); +#/ + ent = createloopeffect( fxid ); + ent.v["origin"] = fxpos; + ent.v["angles"] = ( 0, 0, 0 ); + + if ( isdefined( fxpos2 ) ) + ent.v["angles"] = vectortoangles( fxpos2 - fxpos ); + + ent.v["delay"] = waittime; +} + +create_looper() +{ + self.looper = playloopedfx( level._effect[self.v["fxid"]], self.v["delay"], self.v["origin"], 0, self.v["forward"], self.v["up"] ); + create_loopsound(); +} + +create_loopsound() +{ + self notify( "stop_loop" ); + + if ( isdefined( self.v["soundalias"] ) && self.v["soundalias"] != "nil" ) + { + if ( isdefined( self.looper ) ) + self.looper thread maps\mp\_utility::loop_fx_sound( self.v["soundalias"], self.v["origin"], "death" ); + else + thread maps\mp\_utility::loop_fx_sound( self.v["soundalias"], self.v["origin"], "stop_loop" ); + } +} + +stop_loopsound() +{ + self notify( "stop_loop" ); +} + +loopfxthread() +{ + wait 0.05; + + if ( isdefined( self.fxstart ) ) + level waittill( "start fx" + self.fxstart ); + + while ( true ) + { + create_looper(); + + if ( isdefined( self.timeout ) ) + thread loopfxstop( self.timeout ); + + if ( isdefined( self.fxstop ) ) + level waittill( "stop fx" + self.fxstop ); + else + return; + + if ( isdefined( self.looper ) ) + self.looper delete(); + + if ( isdefined( self.fxstart ) ) + level waittill( "start fx" + self.fxstart ); + else + return; + } +} + +loopfxchangeid( ent ) +{ + self endon( "death" ); + + ent waittill( "effect id changed", change ); +} + +loopfxchangeorg( ent ) +{ + self endon( "death" ); + + for (;;) + { + ent waittill( "effect org changed", change ); + + self.origin = change; + } +} + +loopfxchangedelay( ent ) +{ + self endon( "death" ); + + ent waittill( "effect delay changed", change ); +} + +loopfxdeletion( ent ) +{ + self endon( "death" ); + + ent waittill( "effect deleted" ); + + self delete(); +} + +loopfxstop( timeout ) +{ + self endon( "death" ); + wait( timeout ); + self.looper delete(); +} + +loopsound( sound, pos, waittime ) +{ + level thread loopsoundthread( sound, pos, waittime ); +} + +loopsoundthread( sound, pos, waittime ) +{ + org = spawn( "script_origin", pos ); + org.origin = pos; + org playloopsound( sound ); +} + +gunfireloopfx( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) +{ + thread gunfireloopfxthread( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ); +} + +gunfireloopfxthread( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) +{ + level endon( "stop all gunfireloopfx" ); + wait 0.05; + + if ( betweensetsmax < betweensetsmin ) + { + temp = betweensetsmax; + betweensetsmax = betweensetsmin; + betweensetsmin = temp; + } + + betweensetsbase = betweensetsmin; + betweensetsrange = betweensetsmax - betweensetsmin; + + if ( shotdelaymax < shotdelaymin ) + { + temp = shotdelaymax; + shotdelaymax = shotdelaymin; + shotdelaymin = temp; + } + + shotdelaybase = shotdelaymin; + shotdelayrange = shotdelaymax - shotdelaymin; + + if ( shotsmax < shotsmin ) + { + temp = shotsmax; + shotsmax = shotsmin; + shotsmin = temp; + } + + shotsbase = shotsmin; + shotsrange = shotsmax - shotsmin; + fxent = spawnfx( level._effect[fxid], fxpos ); + + for (;;) + { + shotnum = shotsbase + randomint( shotsrange ); + + for ( i = 0; i < shotnum; i++ ) + { + triggerfx( fxent ); + wait( shotdelaybase + randomfloat( shotdelayrange ) ); + } + + wait( betweensetsbase + randomfloat( betweensetsrange ) ); + } +} + +gunfireloopfxvec( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) +{ + thread gunfireloopfxvecthread( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ); +} + +gunfireloopfxvecthread( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) +{ + level endon( "stop all gunfireloopfx" ); + wait 0.05; + + if ( betweensetsmax < betweensetsmin ) + { + temp = betweensetsmax; + betweensetsmax = betweensetsmin; + betweensetsmin = temp; + } + + betweensetsbase = betweensetsmin; + betweensetsrange = betweensetsmax - betweensetsmin; + + if ( shotdelaymax < shotdelaymin ) + { + temp = shotdelaymax; + shotdelaymax = shotdelaymin; + shotdelaymin = temp; + } + + shotdelaybase = shotdelaymin; + shotdelayrange = shotdelaymax - shotdelaymin; + + if ( shotsmax < shotsmin ) + { + temp = shotsmax; + shotsmax = shotsmin; + shotsmin = temp; + } + + shotsbase = shotsmin; + shotsrange = shotsmax - shotsmin; + fxpos2 = vectornormalize( fxpos2 - fxpos ); + fxent = spawnfx( level._effect[fxid], fxpos, fxpos2 ); + + for (;;) + { + shotnum = shotsbase + randomint( shotsrange ); + + for ( i = 0; i < int( shotnum / level.fxfireloopmod ); i++ ) + { + triggerfx( fxent ); + delay = ( shotdelaybase + randomfloat( shotdelayrange ) ) * level.fxfireloopmod; + + if ( delay < 0.05 ) + delay = 0.05; + + wait( delay ); + } + + wait( shotdelaybase + randomfloat( shotdelayrange ) ); + wait( betweensetsbase + randomfloat( betweensetsrange ) ); + } +} + +setfireloopmod( value ) +{ + level.fxfireloopmod = 1 / value; +} + +setup_fx() +{ + if ( !isdefined( self.script_fxid ) || !isdefined( self.script_fxcommand ) || !isdefined( self.script_delay ) ) + return; + + org = undefined; + + if ( isdefined( self.target ) ) + { + ent = getent( self.target, "targetname" ); + + if ( isdefined( ent ) ) + org = ent.origin; + } + + fxstart = undefined; + + if ( isdefined( self.script_fxstart ) ) + fxstart = self.script_fxstart; + + fxstop = undefined; + + if ( isdefined( self.script_fxstop ) ) + fxstop = self.script_fxstop; + + if ( self.script_fxcommand == "OneShotfx" ) + oneshotfx( self.script_fxid, self.origin, self.script_delay, org ); + + if ( self.script_fxcommand == "loopfx" ) + loopfx( self.script_fxid, self.origin, self.script_delay, org, fxstart, fxstop ); + + if ( self.script_fxcommand == "loopsound" ) + loopsound( self.script_fxid, self.origin, self.script_delay ); + + self delete(); +} + +script_print_fx() +{ +/# + if ( !isdefined( self.script_fxid ) || !isdefined( self.script_fxcommand ) || !isdefined( self.script_delay ) ) + { + println( "Effect at origin ", self.origin, " doesn't have script_fxid/script_fxcommand/script_delay" ); + self delete(); + return; + } + + if ( isdefined( self.target ) ) + org = getent( self.target, "targetname" ).origin; + else + org = "undefined"; + + if ( self.script_fxcommand == "OneShotfx" ) + println( "mapsmp_fx::OneShotfx(\"" + self.script_fxid + "\", " + self.origin + ", " + self.script_delay + ", " + org + ");" ); + + if ( self.script_fxcommand == "loopfx" ) + println( "mapsmp_fx::LoopFx(\"" + self.script_fxid + "\", " + self.origin + ", " + self.script_delay + ", " + org + ");" ); + + if ( self.script_fxcommand == "loopsound" ) + println( "mapsmp_fx::LoopSound(\"" + self.script_fxid + "\", " + self.origin + ", " + self.script_delay + ", " + org + ");" ); +#/ +} + +script_playfx( id, pos, pos2 ) +{ + if ( !id ) + return; + + if ( isdefined( pos2 ) ) + playfx( id, pos, pos2 ); + else + playfx( id, pos ); +} + +script_playfxontag( id, ent, tag ) +{ + if ( !id ) + return; + + playfxontag( id, ent, tag ); +} + +grenadeexplosionfx( pos ) +{ + playfx( level._effect["mechanical explosion"], pos ); + earthquake( 0.15, 0.5, pos, 250 ); +} + +soundfx( fxid, fxpos, endonnotify ) +{ + org = spawn( "script_origin", ( 0, 0, 0 ) ); + org.origin = fxpos; + org playloopsound( fxid ); + + if ( isdefined( endonnotify ) ) + org thread soundfxdelete( endonnotify ); +} + +soundfxdelete( endonnotify ) +{ + level waittill( endonnotify ); + + self delete(); +} + +blenddelete( blend ) +{ + self waittill( "death" ); + + blend delete(); +} + +spawnfx_wrapper( fx_id, origin, forward, up ) +{ + assert( isdefined( level._effect[fx_id] ), "Missing level._effect[\"" + fx_id + "\"]. You did not setup the fx before calling it in createFx." ); + fx_object = spawnfx( level._effect[fx_id], origin, forward, up ); + return fx_object; +} diff --git a/ZM/Core/maps/mp/_fxanim.gsc b/ZM/Core/maps/mp/_fxanim.gsc new file mode 100644 index 0000000..73937d3 --- /dev/null +++ b/ZM/Core/maps/mp/_fxanim.gsc @@ -0,0 +1,8 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +init() +{ + level.scr_anim = []; + level.scr_anim["fxanim_props"] = []; +} diff --git a/ZM/Core/maps/mp/_global_fx.gsc b/ZM/Core/maps/mp/_global_fx.gsc new file mode 100644 index 0000000..5b002ac --- /dev/null +++ b/ZM/Core/maps/mp/_global_fx.gsc @@ -0,0 +1,53 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; + +main() +{ + randomstartdelay = randomfloatrange( -20, -15 ); + global_fx( "barrel_fireFX_origin", "global_barrel_fire", "fire/firelp_barrel_pm", randomstartdelay, "fire_barrel_small" ); + global_fx( "ch_streetlight_02_FX_origin", "ch_streetlight_02_FX", "misc/lighthaze", randomstartdelay ); + global_fx( "me_streetlight_01_FX_origin", "me_streetlight_01_FX", "misc/lighthaze_bog_a", randomstartdelay ); + global_fx( "ch_street_light_01_on", "lamp_glow_FX", "misc/light_glow_white", randomstartdelay ); + global_fx( "highway_lamp_post", "ch_streetlight_02_FX", "misc/lighthaze_villassault", randomstartdelay ); + global_fx( "cs_cargoship_spotlight_on_FX_origin", "cs_cargoship_spotlight_on_FX", "misc/lighthaze", randomstartdelay ); + global_fx( "me_dumpster_fire_FX_origin", "me_dumpster_fire_FX", "fire/firelp_med_pm_nodistort", randomstartdelay, "fire_dumpster_medium" ); + global_fx( "com_tires_burning01_FX_origin", "com_tires_burning01_FX", "fire/tire_fire_med", randomstartdelay ); + global_fx( "icbm_powerlinetower_FX_origin", "icbm_powerlinetower_FX", "misc/power_tower_light_red_blink", randomstartdelay ); +} + +global_fx( targetname, fxname, fxfile, delay, soundalias ) +{ + ents = getstructarray( targetname, "targetname" ); + + if ( !isdefined( ents ) ) + return; + + if ( ents.size <= 0 ) + return; + + for ( i = 0; i < ents.size; i++ ) + ents[i] global_fx_create( fxname, fxfile, delay, soundalias ); +} + +global_fx_create( fxname, fxfile, delay, soundalias ) +{ + if ( !isdefined( level._effect ) ) + level._effect = []; + + if ( !isdefined( level._effect[fxname] ) ) + level._effect[fxname] = loadfx( fxfile ); + + if ( !isdefined( self.angles ) ) + self.angles = ( 0, 0, 0 ); + + ent = createoneshoteffect( fxname ); + ent.v["origin"] = self.origin; + ent.v["angles"] = self.angles; + ent.v["fxid"] = fxname; + ent.v["delay"] = delay; + + if ( isdefined( soundalias ) ) + ent.v["soundalias"] = soundalias; +} diff --git a/ZM/Core/maps/mp/_interactive_objects.gsc b/ZM/Core/maps/mp/_interactive_objects.gsc new file mode 100644 index 0000000..148d9d5 --- /dev/null +++ b/ZM/Core/maps/mp/_interactive_objects.gsc @@ -0,0 +1,387 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; + +init() +{ + level.barrelexplodingthisframe = 0; + qbarrels = 0; + all_barrels = []; + barrels = getentarray( "explodable_barrel", "targetname" ); + + if ( isdefined( barrels ) && barrels.size > 0 ) + { + qbarrels = 1; + + for ( i = 0; i < barrels.size; i++ ) + all_barrels[all_barrels.size] = barrels[i]; + } + + barrels = getentarray( "explodable_barrel", "script_noteworthy" ); + + if ( isdefined( barrels ) && barrels.size > 0 ) + { + qbarrels = 1; + + for ( i = 0; i < barrels.size; i++ ) + all_barrels[all_barrels.size] = barrels[i]; + } + + if ( qbarrels ) + { + precachemodel( "global_explosive_barrel" ); + level.barrelburn = 100; + level.barrelhealth = 250; + level.barrelingsound = "exp_redbarrel_ignition"; + level.barrelexpsound = "exp_redbarrel"; + level.breakables_fx["barrel"]["burn_start"] = loadfx( "destructibles/fx_barrel_ignite" ); + level.breakables_fx["barrel"]["burn"] = loadfx( "destructibles/fx_barrel_fire_top" ); + level.breakables_fx["barrel"]["explode"] = loadfx( "destructibles/fx_dest_barrelexp" ); + array_thread( all_barrels, ::explodable_barrel_think ); + } + + qcrates = 0; + all_crates = []; + crates = getentarray( "flammable_crate", "targetname" ); + + if ( isdefined( crates ) && crates.size > 0 ) + { + qcrates = 1; + + for ( i = 0; i < crates.size; i++ ) + all_crates[all_crates.size] = crates[i]; + } + + crates = getentarray( "flammable_crate", "script_noteworthy" ); + + if ( isdefined( crates ) && crates.size > 0 ) + { + qcrates = 1; + + for ( i = 0; i < crates.size; i++ ) + all_crates[all_crates.size] = crates[i]; + } + + if ( qcrates ) + { + precachemodel( "global_flammable_crate_jap_piece01_d" ); + level.crateburn = 100; + level.cratehealth = 200; + level.breakables_fx["ammo_crate"]["burn_start"] = loadfx( "destructibles/fx_ammobox_ignite" ); + level.breakables_fx["ammo_crate"]["burn"] = loadfx( "destructibles/fx_ammobox_fire_top" ); + level.breakables_fx["ammo_crate"]["explode"] = loadfx( "destructibles/fx_ammoboxExp" ); + level.crateignsound = "Ignition_ammocrate"; + level.crateexpsound = "Explo_ammocrate"; + array_thread( all_crates, ::flammable_crate_think ); + } + + if ( !qbarrels && !qcrates ) + return; +} + +explodable_barrel_think() +{ + if ( self.classname != "script_model" ) + return; + + self endon( "exploding" ); + self breakable_clip(); + self.health = level.barrelhealth; + self setcandamage( 1 ); + self.targetname = "explodable_barrel"; + + if ( sessionmodeiszombiesgame() ) + self.removeexplodable = 1; + + for (;;) + { + self waittill( "damage", amount, attacker, direction_vec, p, type ); +/# + println( "BARRELDAMAGE: " + type ); +#/ + if ( type == "MOD_MELEE" || type == "MOD_IMPACT" ) + continue; + + if ( isdefined( self.script_requires_player ) && self.script_requires_player && !isplayer( attacker ) ) + continue; + + if ( isdefined( self.script_selfisattacker ) && self.script_selfisattacker ) + self.damageowner = self; + else + self.damageowner = attacker; + + self.health -= amount; + + if ( self.health <= level.barrelburn ) + self thread explodable_barrel_burn(); + } +} + +explodable_barrel_burn() +{ + count = 0; + startedfx = 0; + up = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) ); + worldup = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) ); + dot = vectordot( up, worldup ); + offset1 = ( 0, 0, 0 ); + offset2 = up * vectorscale( ( 0, 0, 1 ), 44.0 ); + + if ( dot < 0.5 ) + { + offset1 = up * vectorscale( ( 0, 0, 1 ), 22.0 ) - vectorscale( ( 0, 0, 1 ), 30.0 ); + offset2 = up * vectorscale( ( 0, 0, 1 ), 22.0 ) + vectorscale( ( 0, 0, 1 ), 14.0 ); + } + + while ( self.health > 0 ) + { + if ( !startedfx ) + { + playfx( level.breakables_fx["barrel"]["burn_start"], self.origin + offset1 ); + level thread play_sound_in_space( level.barrelingsound, self.origin ); + startedfx = 1; + } + + if ( count > 20 ) + count = 0; + + playfx( level.breakables_fx["barrel"]["burn"], self.origin + offset2 ); + self playloopsound( "barrel_fuse" ); + + if ( count == 0 ) + self.health -= 10 + randomint( 10 ); + + count++; + wait 0.05; + } + + level notify( "explosion_started" ); + self thread explodable_barrel_explode(); +} + +explodable_barrel_explode() +{ + self notify( "exploding" ); + self death_notify_wrapper(); + up = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) ); + worldup = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) ); + dot = vectordot( up, worldup ); + offset = ( 0, 0, 0 ); + + if ( dot < 0.5 ) + { + start = self.origin + vectorscale( up, 22 ); + trace = physicstrace( start, start + vectorscale( ( 0, 0, -1 ), 64.0 ) ); + end = trace["position"]; + offset = end - self.origin; + } + + offset += vectorscale( ( 0, 0, 1 ), 4.0 ); + mindamage = 1; + maxdamage = 250; + blastradius = 250; + level thread play_sound_in_space( level.barrelexpsound, self.origin ); + playfx( level.breakables_fx["barrel"]["explode"], self.origin + offset ); + physicsexplosionsphere( self.origin + offset, 100, 80, 1, maxdamage, mindamage ); + level.barrelexplodingthisframe = 1; + + if ( isdefined( self.remove ) ) + self.remove delete(); + + if ( isdefined( self.radius ) ) + blastradius = self.radius; + + self radiusdamage( self.origin + vectorscale( ( 0, 0, 1 ), 56.0 ), blastradius, maxdamage, mindamage, self.damageowner ); + attacker = undefined; + + if ( isdefined( self.damageowner ) ) + attacker = self.damageowner; + + level.lastexplodingbarrel["time"] = gettime(); + level.lastexplodingbarrel["origin"] = self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ); + + if ( isdefined( self.removeexplodable ) ) + self hide(); + else + self setmodel( "global_explosive_barrel" ); + + if ( dot < 0.5 ) + { + start = self.origin + vectorscale( up, 22 ); + trace = physicstrace( start, start + vectorscale( ( 0, 0, -1 ), 64.0 ) ); + pos = trace["position"]; + self.origin = pos; + self.angles += vectorscale( ( 0, 0, 1 ), 90.0 ); + } + + wait 0.05; + level.barrelexplodingthisframe = 0; +} + +flammable_crate_think() +{ + if ( self.classname != "script_model" ) + return; + + self endon( "exploding" ); + self breakable_clip(); + self.health = level.cratehealth; + self setcandamage( 1 ); + + for (;;) + { + self waittill( "damage", amount, attacker, direction_vec, p, type ); + + if ( isdefined( self.script_requires_player ) && self.script_requires_player && !isplayer( attacker ) ) + continue; + + if ( isdefined( self.script_selfisattacker ) && self.script_selfisattacker ) + self.damageowner = self; + else + self.damageowner = attacker; + + if ( level.barrelexplodingthisframe ) + wait( randomfloat( 1 ) ); + + self.health -= amount; + + if ( self.health <= level.crateburn ) + self thread flammable_crate_burn(); + } +} + +flammable_crate_burn() +{ + count = 0; + startedfx = 0; + up = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) ); + worldup = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) ); + dot = vectordot( up, worldup ); + offset1 = ( 0, 0, 0 ); + offset2 = up * vectorscale( ( 0, 0, 1 ), 44.0 ); + + if ( dot < 0.5 ) + { + offset1 = up * vectorscale( ( 0, 0, 1 ), 22.0 ) - vectorscale( ( 0, 0, 1 ), 30.0 ); + offset2 = up * vectorscale( ( 0, 0, 1 ), 22.0 ) + vectorscale( ( 0, 0, 1 ), 14.0 ); + } + + while ( self.health > 0 ) + { + if ( !startedfx ) + { + playfx( level.breakables_fx["ammo_crate"]["burn_start"], self.origin ); + level thread play_sound_in_space( level.crateignsound, self.origin ); + startedfx = 1; + } + + if ( count > 20 ) + count = 0; + + playfx( level.breakables_fx["ammo_crate"]["burn"], self.origin ); + + if ( count == 0 ) + self.health -= 10 + randomint( 10 ); + + count++; + wait 0.05; + } + + self thread flammable_crate_explode(); +} + +flammable_crate_explode() +{ + self notify( "exploding" ); + self death_notify_wrapper(); + up = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) ); + worldup = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) ); + dot = vectordot( up, worldup ); + offset = ( 0, 0, 0 ); + + if ( dot < 0.5 ) + { + start = self.origin + vectorscale( up, 22 ); + trace = physicstrace( start, start + vectorscale( ( 0, 0, -1 ), 64.0 ) ); + end = trace["position"]; + offset = end - self.origin; + } + + offset += vectorscale( ( 0, 0, 1 ), 4.0 ); + mindamage = 1; + maxdamage = 250; + blastradius = 250; + level thread play_sound_in_space( level.crateexpsound, self.origin ); + playfx( level.breakables_fx["ammo_crate"]["explode"], self.origin ); + physicsexplosionsphere( self.origin + offset, 100, 80, 1, maxdamage, mindamage ); + level.barrelexplodingthisframe = 1; + + if ( isdefined( self.remove ) ) + self.remove delete(); + + if ( isdefined( self.radius ) ) + blastradius = self.radius; + + attacker = undefined; + + if ( isdefined( self.damageowner ) ) + attacker = self.damageowner; + + self radiusdamage( self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), blastradius, maxdamage, mindamage, attacker ); + self setmodel( "global_flammable_crate_jap_piece01_d" ); + + if ( dot < 0.5 ) + { + start = self.origin + vectorscale( up, 22 ); + trace = physicstrace( start, start + vectorscale( ( 0, 0, -1 ), 64.0 ) ); + pos = trace["position"]; + self.origin = pos; + self.angles += vectorscale( ( 0, 0, 1 ), 90.0 ); + } + + wait 0.05; + level.barrelexplodingthisframe = 0; +} + +breakable_clip() +{ + if ( isdefined( self.target ) ) + { + targ = getent( self.target, "targetname" ); + + if ( targ.classname == "script_brushmodel" ) + { + self.remove = targ; + return; + } + } + + if ( isdefined( level.breakables_clip ) && level.breakables_clip.size > 0 ) + self.remove = getclosestent( self.origin, level.breakables_clip ); + + if ( isdefined( self.remove ) ) + arrayremovevalue( level.breakables_clip, self.remove ); +} + +getclosestent( org, array ) +{ + if ( array.size < 1 ) + return; + + dist = 256; + ent = undefined; + + for ( i = 0; i < array.size; i++ ) + { + newdist = distance( array[i] getorigin(), org ); + + if ( newdist >= dist ) + continue; + + dist = newdist; + ent = array[i]; + } + + return ent; +} diff --git a/ZM/Core/maps/mp/_music.gsc b/ZM/Core/maps/mp/_music.gsc new file mode 100644 index 0000000..74125f2 --- /dev/null +++ b/ZM/Core/maps/mp/_music.gsc @@ -0,0 +1,26 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +music_init() +{ + assert( level.clientscripts ); + level.musicstate = ""; + registerclientsys( "musicCmd" ); +} + +setmusicstate( state, player ) +{ + if ( isdefined( level.musicstate ) ) + { + if ( isdefined( player ) ) + { + setclientsysstate( "musicCmd", state, player ); + return; + } + else if ( level.musicstate != state ) + setclientsysstate( "musicCmd", state ); + } + + level.musicstate = state; +} diff --git a/ZM/Core/maps/mp/_script_gen.gsc b/ZM/Core/maps/mp/_script_gen.gsc new file mode 100644 index 0000000..ea90c13 --- /dev/null +++ b/ZM/Core/maps/mp/_script_gen.gsc @@ -0,0 +1,290 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\_script_gen; + +script_gen_dump_checksaved() +{ + signatures = getarraykeys( level.script_gen_dump ); + + for ( i = 0; i < signatures.size; i++ ) + { + if ( !isdefined( level.script_gen_dump2[signatures[i]] ) ) + { + level.script_gen_dump[signatures[i]] = undefined; + level.script_gen_dump_reasons[level.script_gen_dump_reasons.size] = "Signature unmatched( removed feature ): " + signatures[i]; + } + } +} + +script_gen_dump() +{ +/# + script_gen_dump_checksaved(); + + if ( !level.script_gen_dump_reasons.size ) + { + flag_set( "scriptgen_done" ); + return; + } + + firstrun = 0; + + if ( level.bscriptgened ) + { + println( " " ); + println( " " ); + println( " " ); + println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); + println( "^3Dumping scriptgen dump for these reasons" ); + println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); + + for ( i = 0; i < level.script_gen_dump_reasons.size; i++ ) + { + if ( issubstr( level.script_gen_dump_reasons[i], "nowrite" ) ) + { + substr = getsubstr( level.script_gen_dump_reasons[i], 15 ); + println( i + ". ) " + substr ); + } + else + println( i + ". ) " + level.script_gen_dump_reasons[i] ); + + if ( level.script_gen_dump_reasons[i] == "First run" ) + firstrun = 1; + } + + println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); + println( " " ); + + if ( firstrun ) + { + println( "for First Run make sure you delete all of the vehicle precache script calls, createart calls, createfx calls( most commonly placed in maps\\" + level.script + "_fx.gsc ) " ); + println( " " ); + println( "replace:" ); + println( "maps\\_load::main( 1 );" ); + println( " " ); + println( "with( don't forget to add this file to P4 ):" ); + println( "maps\\scriptgen\\" + level.script + "_scriptgen::main();" ); + println( " " ); + } + + println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); + println( " " ); + println( "^2 / \\ / \\ / \\" ); + println( "^2scroll up" ); + println( "^2 / \\ / \\ / \\" ); + println( " " ); + } + else + return; + + filename = "scriptgen/" + level.script + "_scriptgen.gsc"; + csvfilename = "zone_source/" + level.script + ".csv"; + + if ( level.bscriptgened ) + file = openfile( filename, "write" ); + else + file = 0; + + assert( file != -1, "File not writeable( check it and and restart the map ): " + filename ); + script_gen_dumpprintln( file, "// script generated script do not write your own script here it will go away if you do." ); + script_gen_dumpprintln( file, "main()" ); + script_gen_dumpprintln( file, "{" ); + script_gen_dumpprintln( file, "" ); + script_gen_dumpprintln( file, "\\tlevel.script_gen_dump = [];" ); + script_gen_dumpprintln( file, "" ); + signatures = getarraykeys( level.script_gen_dump ); + + for ( i = 0; i < signatures.size; i++ ) + { + if ( !issubstr( level.script_gen_dump[signatures[i]], "nowrite" ) ) + script_gen_dumpprintln( file, "\\t" + level.script_gen_dump[signatures[i]] ); + } + + for ( i = 0; i < signatures.size; i++ ) + { + if ( !issubstr( level.script_gen_dump[signatures[i]], "nowrite" ) ) + { + script_gen_dumpprintln( file, "\\tlevel.script_gen_dump[ " + "\"" + signatures[i] + "\"" + " ] = " + "\"" + signatures[i] + "\"" + ";" ); + continue; + } + + script_gen_dumpprintln( file, "\\tlevel.script_gen_dump[ " + "\"" + signatures[i] + "\"" + " ] = " + "\"nowrite\"" + ";" ); + } + + script_gen_dumpprintln( file, "" ); + keys1 = undefined; + keys2 = undefined; + + if ( isdefined( level.sg_precacheanims ) ) + keys1 = getarraykeys( level.sg_precacheanims ); + + if ( isdefined( keys1 ) ) + { + for ( i = 0; i < keys1.size; i++ ) + script_gen_dumpprintln( file, "\\tanim_precach_" + keys1[i] + "();" ); + } + + script_gen_dumpprintln( file, "\\tmaps\\_load::main( 1, " + level.bcsvgened + ", 1 );" ); + script_gen_dumpprintln( file, "}" ); + script_gen_dumpprintln( file, "" ); + + if ( isdefined( level.sg_precacheanims ) ) + keys1 = getarraykeys( level.sg_precacheanims ); + + if ( isdefined( keys1 ) ) + { + for ( i = 0; i < keys1.size; i++ ) + { + script_gen_dumpprintln( file, "#using_animtree( \"" + keys1[i] + "\" );" ); + script_gen_dumpprintln( file, "anim_precach_" + keys1[i] + "()" ); + script_gen_dumpprintln( file, "{" ); + script_gen_dumpprintln( file, "\\tlevel.sg_animtree[ \"" + keys1[i] + "\" ] = #animtree;" ); + keys2 = getarraykeys( level.sg_precacheanims[keys1[i]] ); + + if ( isdefined( keys2 ) ) + { + for ( j = 0; j < keys2.size; j++ ) + script_gen_dumpprintln( file, "\\tlevel.sg_anim[ \"" + keys2[j] + "\" ] = %" + keys2[j] + ";" ); + } + + script_gen_dumpprintln( file, "}" ); + script_gen_dumpprintln( file, "" ); + } + } + + if ( level.bscriptgened ) + saved = closefile( file ); + else + saved = 1; + + if ( level.bcsvgened ) + csvfile = openfile( csvfilename, "write" ); + else + csvfile = 0; + + assert( csvfile != -1, "File not writeable( check it and and restart the map ): " + csvfilename ); + signatures = getarraykeys( level.script_gen_dump ); + + for ( i = 0; i < signatures.size; i++ ) + script_gen_csvdumpprintln( csvfile, signatures[i] ); + + if ( level.bcsvgened ) + csvfilesaved = closefile( csvfile ); + else + csvfilesaved = 1; + + assert( csvfilesaved == 1, "csv not saved( see above message? ): " + csvfilename ); + assert( saved == 1, "map not saved( see above message? ): " + filename ); +#/ + assert( !level.bscriptgened, "SCRIPTGEN generated: follow instructions listed above this error in the console" ); + + if ( level.bscriptgened ) + { +/# + assertmsg( "SCRIPTGEN updated: Rebuild fast file and run map again" ); +#/ + } + + flag_set( "scriptgen_done" ); +} + +script_gen_csvdumpprintln( file, signature ) +{ + prefix = undefined; + writtenprefix = undefined; + path = ""; + extension = ""; + + if ( issubstr( signature, "ignore" ) ) + prefix = "ignore"; + else if ( issubstr( signature, "col_map_sp" ) ) + prefix = "col_map_sp"; + else if ( issubstr( signature, "gfx_map" ) ) + prefix = "gfx_map"; + else if ( issubstr( signature, "rawfile" ) ) + prefix = "rawfile"; + else if ( issubstr( signature, "sound" ) ) + prefix = "sound"; + else if ( issubstr( signature, "xmodel" ) ) + prefix = "xmodel"; + else if ( issubstr( signature, "xanim" ) ) + prefix = "xanim"; + else if ( issubstr( signature, "item" ) ) + { + prefix = "item"; + writtenprefix = "weapon"; + path = "sp/"; + } + else if ( issubstr( signature, "fx" ) ) + prefix = "fx"; + else if ( issubstr( signature, "menu" ) ) + { + prefix = "menu"; + writtenprefix = "menufile"; + path = "ui / scriptmenus/"; + extension = ".menu"; + } + else if ( issubstr( signature, "rumble" ) ) + { + prefix = "rumble"; + writtenprefix = "rawfile"; + path = "rumble/"; + } + else if ( issubstr( signature, "shader" ) ) + { + prefix = "shader"; + writtenprefix = "material"; + } + else if ( issubstr( signature, "shock" ) ) + { + prefix = "shock"; + writtenprefix = "rawfile"; + extension = ".shock"; + path = "shock/"; + } + else if ( issubstr( signature, "string" ) ) + { + prefix = "string"; +/# + assertmsg( "string not yet supported by scriptgen" ); +#/ + } + else if ( issubstr( signature, "turret" ) ) + { + prefix = "turret"; + writtenprefix = "weapon"; + path = "sp/"; + } + else if ( issubstr( signature, "vehicle" ) ) + { + prefix = "vehicle"; + writtenprefix = "rawfile"; + path = "vehicles/"; + } + + if ( !isdefined( prefix ) ) + return; + + if ( !isdefined( writtenprefix ) ) + string = prefix + ", " + getsubstr( signature, prefix.size + 1, signature.size ); + else + string = writtenprefix + ", " + path + getsubstr( signature, prefix.size + 1, signature.size ) + extension; +/# + if ( file == -1 || !level.bcsvgened ) + println( string ); + else + fprintln( file, string ); +#/ +} + +script_gen_dumpprintln( file, string ) +{ +/# + if ( file == -1 || !level.bscriptgened ) + println( string ); + else + fprintln( file, string ); +#/ +} diff --git a/ZM/Core/maps/mp/_serverfaceanim_mp.gsc b/ZM/Core/maps/mp/_serverfaceanim_mp.gsc new file mode 100644 index 0000000..57936ef --- /dev/null +++ b/ZM/Core/maps/mp/_serverfaceanim_mp.gsc @@ -0,0 +1,61 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; + +init() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread onplayerspawned(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread init_serverfaceanim(); + } +} + +init_serverfaceanim() +{ + self.do_face_anims = 1; + + if ( !isdefined( level.face_event_handler ) ) + { + level.face_event_handler = spawnstruct(); + level.face_event_handler.events = []; + level.face_event_handler.events["death"] = "face_death"; + level.face_event_handler.events["grenade danger"] = "face_alert"; + level.face_event_handler.events["bulletwhizby"] = "face_alert"; + level.face_event_handler.events["projectile_impact"] = "face_alert"; + level.face_event_handler.events["explode"] = "face_alert"; + level.face_event_handler.events["alert"] = "face_alert"; + level.face_event_handler.events["shoot"] = "face_shoot_single"; + level.face_event_handler.events["melee"] = "face_melee"; + level.face_event_handler.events["damage"] = "face_pain"; + level thread wait_for_face_event(); + } +} + +wait_for_face_event() +{ + while ( true ) + { + level waittill( "face", face_notify, ent ); + + if ( isdefined( ent ) && isdefined( ent.do_face_anims ) && ent.do_face_anims ) + { + if ( isdefined( level.face_event_handler.events[face_notify] ) ) + ent sendfaceevent( level.face_event_handler.events[face_notify] ); + } + } +} diff --git a/ZM/Core/maps/mp/_sticky_grenade.gsc b/ZM/Core/maps/mp/_sticky_grenade.gsc new file mode 100644 index 0000000..86ae4c3 --- /dev/null +++ b/ZM/Core/maps/mp/_sticky_grenade.gsc @@ -0,0 +1,15 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; + +init() +{ + loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" ); + loadfx( "weapon/crossbow/fx_trail_crossbow_blink_red_os" ); +} + +watch_bolt_detonation( owner ) +{ + +} diff --git a/ZM/Core/maps/mp/_utility.gsc b/ZM/Core/maps/mp/_utility.gsc new file mode 100644 index 0000000..2068656 --- /dev/null +++ b/ZM/Core/maps/mp/_utility.gsc @@ -0,0 +1,2671 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\_createfx; +#include maps\mp\_utility; + +addcallback( event, func ) +{ + assert( isdefined( event ), "Trying to set a callback on an undefined event." ); + + if ( !isdefined( level._callbacks ) || !isdefined( level._callbacks[event] ) ) + level._callbacks[event] = []; + + level._callbacks[event] = add_to_array( level._callbacks[event], func, 0 ); +} + +callback( event ) +{ + if ( isdefined( level._callbacks ) && isdefined( level._callbacks[event] ) ) + { + for ( i = 0; i < level._callbacks[event].size; i++ ) + { + callback = level._callbacks[event][i]; + + if ( isdefined( callback ) ) + self thread [[ callback ]](); + } + } +} + +onfinalizeinitialization_callback( func ) +{ + addcallback( "on_finalize_initialization", func ); +} + +triggeroff() +{ + if ( !isdefined( self.realorigin ) ) + self.realorigin = self.origin; + + if ( self.origin == self.realorigin ) + self.origin += vectorscale( ( 0, 0, -1 ), 10000.0 ); +} + +triggeron() +{ + if ( isdefined( self.realorigin ) ) + self.origin = self.realorigin; +} + +error( msg ) +{ +/# + println( "^c*ERROR* ", msg ); + wait 0.05; + + if ( getdvar( _hash_F49A52C ) != "1" ) + { +/# + assertmsg( "This is a forced error - attach the log file" ); +#/ + } +#/ +} + +warning( msg ) +{ +/# + println( "^1WARNING: " + msg ); +#/ +} + +spawn_array_struct() +{ + s = spawnstruct(); + s.a = []; + return s; +} + +within_fov( start_origin, start_angles, end_origin, fov ) +{ + normal = vectornormalize( end_origin - start_origin ); + forward = anglestoforward( start_angles ); + dot = vectordot( forward, normal ); + return dot >= fov; +} + +append_array_struct( dst_s, src_s ) +{ + for ( i = 0; i < src_s.a.size; i++ ) + dst_s.a[dst_s.a.size] = src_s.a[i]; +} + +exploder( num ) +{ + [[ level.exploderfunction ]]( num ); +} + +exploder_stop( num ) +{ + stop_exploder( num ); +} + +exploder_sound() +{ + if ( isdefined( self.script_delay ) ) + wait( self.script_delay ); + + self playsound( level.scr_sound[self.script_sound] ); +} + +cannon_effect() +{ + if ( isdefined( self.v["repeat"] ) ) + { + for ( i = 0; i < self.v["repeat"]; i++ ) + { + playfx( level._effect[self.v["fxid"]], self.v["origin"], self.v["forward"], self.v["up"] ); + self exploder_delay(); + } + + return; + } + + self exploder_delay(); + + if ( isdefined( self.looper ) ) + self.looper delete(); + + self.looper = spawnfx( getfx( self.v["fxid"] ), self.v["origin"], self.v["forward"], self.v["up"] ); + triggerfx( self.looper ); + exploder_playsound(); +} + +exploder_delay() +{ + if ( !isdefined( self.v["delay"] ) ) + self.v["delay"] = 0; + + min_delay = self.v["delay"]; + max_delay = self.v["delay"] + 0.001; + + if ( isdefined( self.v["delay_min"] ) ) + min_delay = self.v["delay_min"]; + + if ( isdefined( self.v["delay_max"] ) ) + max_delay = self.v["delay_max"]; + + if ( min_delay > 0 ) + wait( randomfloatrange( min_delay, max_delay ) ); +} + +exploder_playsound() +{ + if ( !isdefined( self.v["soundalias"] ) || self.v["soundalias"] == "nil" ) + return; + + play_sound_in_space( self.v["soundalias"], self.v["origin"] ); +} + +brush_delete() +{ + num = self.v["exploder"]; + + if ( isdefined( self.v["delay"] ) ) + wait( self.v["delay"] ); + else + wait 0.05; + + if ( !isdefined( self.model ) ) + return; + + assert( isdefined( self.model ) ); + + if ( level.createfx_enabled ) + { + if ( isdefined( self.exploded ) ) + return; + + self.exploded = 1; + self.model hide(); + self.model notsolid(); + wait 3; + self.exploded = undefined; + self.model show(); + self.model solid(); + return; + } + + if ( !isdefined( self.v["fxid"] ) || self.v["fxid"] == "No FX" ) + self.v["exploder"] = undefined; + + waittillframeend; + self.model delete(); +} + +brush_show() +{ + if ( isdefined( self.v["delay"] ) ) + wait( self.v["delay"] ); + + assert( isdefined( self.model ) ); + self.model show(); + self.model solid(); + + if ( level.createfx_enabled ) + { + if ( isdefined( self.exploded ) ) + return; + + self.exploded = 1; + wait 3; + self.exploded = undefined; + self.model hide(); + self.model notsolid(); + } +} + +brush_throw() +{ + if ( isdefined( self.v["delay"] ) ) + wait( self.v["delay"] ); + + ent = undefined; + + if ( isdefined( self.v["target"] ) ) + ent = getent( self.v["target"], "targetname" ); + + if ( !isdefined( ent ) ) + { + self.model delete(); + return; + } + + self.model show(); + startorg = self.v["origin"]; + startang = self.v["angles"]; + org = ent.origin; + temp_vec = org - self.v["origin"]; + x = temp_vec[0]; + y = temp_vec[1]; + z = temp_vec[2]; + self.model rotatevelocity( ( x, y, z ), 12 ); + self.model movegravity( ( x, y, z ), 12 ); + + if ( level.createfx_enabled ) + { + if ( isdefined( self.exploded ) ) + return; + + self.exploded = 1; + wait 3; + self.exploded = undefined; + self.v["origin"] = startorg; + self.v["angles"] = startang; + self.model hide(); + return; + } + + self.v["exploder"] = undefined; + wait 6; + self.model delete(); +} + +getplant() +{ + start = self.origin + vectorscale( ( 0, 0, 1 ), 10.0 ); + range = 11; + forward = anglestoforward( self.angles ); + forward = vectorscale( forward, range ); + traceorigins[0] = start + forward; + traceorigins[1] = start; + trace = bullettrace( traceorigins[0], traceorigins[0] + vectorscale( ( 0, 0, -1 ), 18.0 ), 0, undefined ); + + if ( trace["fraction"] < 1 ) + { + temp = spawnstruct(); + temp.origin = trace["position"]; + temp.angles = orienttonormal( trace["normal"] ); + return temp; + } + + trace = bullettrace( traceorigins[1], traceorigins[1] + vectorscale( ( 0, 0, -1 ), 18.0 ), 0, undefined ); + + if ( trace["fraction"] < 1 ) + { + temp = spawnstruct(); + temp.origin = trace["position"]; + temp.angles = orienttonormal( trace["normal"] ); + return temp; + } + + traceorigins[2] = start + vectorscale( ( 1, 1, 0 ), 16.0 ); + traceorigins[3] = start + vectorscale( ( 1, -1, 0 ), 16.0 ); + traceorigins[4] = start + vectorscale( ( -1, -1, 0 ), 16.0 ); + traceorigins[5] = start + vectorscale( ( -1, 1, 0 ), 16.0 ); + besttracefraction = undefined; + besttraceposition = undefined; + + for ( i = 0; i < traceorigins.size; i++ ) + { + trace = bullettrace( traceorigins[i], traceorigins[i] + vectorscale( ( 0, 0, -1 ), 1000.0 ), 0, undefined ); + + if ( !isdefined( besttracefraction ) || trace["fraction"] < besttracefraction ) + { + besttracefraction = trace["fraction"]; + besttraceposition = trace["position"]; + } + } + + if ( besttracefraction == 1 ) + besttraceposition = self.origin; + + temp = spawnstruct(); + temp.origin = besttraceposition; + temp.angles = orienttonormal( trace["normal"] ); + return temp; +} + +orienttonormal( normal ) +{ + hor_normal = ( normal[0], normal[1], 0 ); + hor_length = length( hor_normal ); + + if ( !hor_length ) + return ( 0, 0, 0 ); + + hor_dir = vectornormalize( hor_normal ); + neg_height = normal[2] * -1; + tangent = ( hor_dir[0] * neg_height, hor_dir[1] * neg_height, hor_length ); + plant_angle = vectortoangles( tangent ); + return plant_angle; +} + +array_levelthread( ents, process, var, excluders ) +{ + exclude = []; + + for ( i = 0; i < ents.size; i++ ) + exclude[i] = 0; + + if ( isdefined( excluders ) ) + { + for ( i = 0; i < ents.size; i++ ) + { + for ( p = 0; p < excluders.size; p++ ) + { + if ( ents[i] == excluders[p] ) + exclude[i] = 1; + } + } + } + + for ( i = 0; i < ents.size; i++ ) + { + if ( !exclude[i] ) + { + if ( isdefined( var ) ) + { + level thread [[ process ]]( ents[i], var ); + continue; + } + + level thread [[ process ]]( ents[i] ); + } + } +} + +deleteplacedentity( entity ) +{ + entities = getentarray( entity, "classname" ); + + for ( i = 0; i < entities.size; i++ ) + entities[i] delete(); +} + +playsoundonplayers( sound, team ) +{ + assert( isdefined( level.players ) ); + + if ( level.splitscreen ) + { + if ( isdefined( level.players[0] ) ) + level.players[0] playlocalsound( sound ); + } + else if ( isdefined( team ) ) + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + player playlocalsound( sound ); + } + } + else + { + for ( i = 0; i < level.players.size; i++ ) + level.players[i] playlocalsound( sound ); + } +} + +get_player_height() +{ + return 70.0; +} + +isbulletimpactmod( smeansofdeath ) +{ + return issubstr( smeansofdeath, "BULLET" ) || smeansofdeath == "MOD_HEAD_SHOT"; +} + +get_team_alive_players_s( teamname ) +{ + teamplayers_s = spawn_array_struct(); + + if ( isdefined( teamname ) && isdefined( level.aliveplayers ) && isdefined( level.aliveplayers[teamname] ) ) + { + for ( i = 0; i < level.aliveplayers[teamname].size; i++ ) + teamplayers_s.a[teamplayers_s.a.size] = level.aliveplayers[teamname][i]; + } + + return teamplayers_s; +} + +get_all_alive_players_s() +{ + allplayers_s = spawn_array_struct(); + + if ( isdefined( level.aliveplayers ) ) + { + keys = getarraykeys( level.aliveplayers ); + + for ( i = 0; i < keys.size; i++ ) + { + team = keys[i]; + + for ( j = 0; j < level.aliveplayers[team].size; j++ ) + allplayers_s.a[allplayers_s.a.size] = level.aliveplayers[team][j]; + } + } + + return allplayers_s; +} + +waitrespawnbutton() +{ + self endon( "disconnect" ); + self endon( "end_respawn" ); + + while ( self usebuttonpressed() != 1 ) + wait 0.05; +} + +setlowermessage( text, time, combinemessageandtimer ) +{ + if ( !isdefined( self.lowermessage ) ) + return; + + if ( isdefined( self.lowermessageoverride ) && text != &"" ) + { + text = self.lowermessageoverride; + time = undefined; + } + + self notify( "lower_message_set" ); + self.lowermessage settext( text ); + + if ( isdefined( time ) && time > 0 ) + { + if ( !isdefined( combinemessageandtimer ) || !combinemessageandtimer ) + self.lowertimer.label = &""; + else + { + self.lowermessage settext( "" ); + self.lowertimer.label = text; + } + + self.lowertimer settimer( time ); + } + else + { + self.lowertimer settext( "" ); + self.lowertimer.label = &""; + } + + if ( self issplitscreen() ) + self.lowermessage.fontscale = 1.4; + + self.lowermessage fadeovertime( 0.05 ); + self.lowermessage.alpha = 1; + self.lowertimer fadeovertime( 0.05 ); + self.lowertimer.alpha = 1; +} + +setlowermessagevalue( text, value, combinemessage ) +{ + if ( !isdefined( self.lowermessage ) ) + return; + + if ( isdefined( self.lowermessageoverride ) && text != &"" ) + { + text = self.lowermessageoverride; + time = undefined; + } + + self notify( "lower_message_set" ); + + if ( !isdefined( combinemessage ) || !combinemessage ) + self.lowermessage settext( text ); + else + self.lowermessage settext( "" ); + + if ( isdefined( value ) && value > 0 ) + { + if ( !isdefined( combinemessage ) || !combinemessage ) + self.lowertimer.label = &""; + else + self.lowertimer.label = text; + + self.lowertimer setvalue( value ); + } + else + { + self.lowertimer settext( "" ); + self.lowertimer.label = &""; + } + + if ( self issplitscreen() ) + self.lowermessage.fontscale = 1.4; + + self.lowermessage fadeovertime( 0.05 ); + self.lowermessage.alpha = 1; + self.lowertimer fadeovertime( 0.05 ); + self.lowertimer.alpha = 1; +} + +clearlowermessage( fadetime ) +{ + if ( !isdefined( self.lowermessage ) ) + return; + + self notify( "lower_message_set" ); + + if ( !isdefined( fadetime ) || fadetime == 0 ) + setlowermessage( &"" ); + else + { + self endon( "disconnect" ); + self endon( "lower_message_set" ); + self.lowermessage fadeovertime( fadetime ); + self.lowermessage.alpha = 0; + self.lowertimer fadeovertime( fadetime ); + self.lowertimer.alpha = 0; + wait( fadetime ); + self setlowermessage( "" ); + } +} + +printonteam( text, team ) +{ + assert( isdefined( level.players ) ); + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + player iprintln( text ); + } +} + +printboldonteam( text, team ) +{ + assert( isdefined( level.players ) ); + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + player iprintlnbold( text ); + } +} + +printboldonteamarg( text, team, arg ) +{ + assert( isdefined( level.players ) ); + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + player iprintlnbold( text, arg ); + } +} + +printonteamarg( text, team, arg ) +{ + +} + +printonplayers( text, team ) +{ + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( team ) ) + { + if ( isdefined( players[i].pers["team"] ) && players[i].pers["team"] == team ) + players[i] iprintln( text ); + + continue; + } + + players[i] iprintln( text ); + } +} + +printandsoundoneveryone( team, enemyteam, printfriendly, printenemy, soundfriendly, soundenemy, printarg ) +{ + shoulddosounds = isdefined( soundfriendly ); + shoulddoenemysounds = 0; + + if ( isdefined( soundenemy ) ) + { + assert( shoulddosounds ); + shoulddoenemysounds = 1; + } + + if ( !isdefined( printarg ) ) + printarg = ""; + + if ( level.splitscreen || !shoulddosounds ) + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + + if ( isdefined( playerteam ) ) + { + if ( playerteam == team && isdefined( printfriendly ) && printfriendly != &"" ) + { + player iprintln( printfriendly, printarg ); + continue; + } + + if ( isdefined( printenemy ) && printenemy != &"" ) + { + if ( isdefined( enemyteam ) && playerteam == enemyteam ) + { + player iprintln( printenemy, printarg ); + continue; + } + + if ( !isdefined( enemyteam ) && playerteam != team ) + player iprintln( printenemy, printarg ); + } + } + } + + if ( shoulddosounds ) + { + assert( level.splitscreen ); + level.players[0] playlocalsound( soundfriendly ); + } + } + else + { + assert( shoulddosounds ); + + if ( shoulddoenemysounds ) + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + + if ( isdefined( playerteam ) ) + { + if ( playerteam == team ) + { + if ( isdefined( printfriendly ) && printfriendly != &"" ) + player iprintln( printfriendly, printarg ); + + player playlocalsound( soundfriendly ); + continue; + } + + if ( isdefined( enemyteam ) && playerteam == enemyteam || !isdefined( enemyteam ) && playerteam != team ) + { + if ( isdefined( printenemy ) && printenemy != &"" ) + player iprintln( printenemy, printarg ); + + player playlocalsound( soundenemy ); + } + } + } + } + else + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + + if ( isdefined( playerteam ) ) + { + if ( playerteam == team ) + { + if ( isdefined( printfriendly ) && printfriendly != &"" ) + player iprintln( printfriendly, printarg ); + + player playlocalsound( soundfriendly ); + continue; + } + + if ( isdefined( printenemy ) && printenemy != &"" ) + { + if ( isdefined( enemyteam ) && playerteam == enemyteam ) + { + player iprintln( printenemy, printarg ); + continue; + } + + if ( !isdefined( enemyteam ) && playerteam != team ) + player iprintln( printenemy, printarg ); + } + } + } + } + } +} + +_playlocalsound( soundalias ) +{ + if ( level.splitscreen && !self ishost() ) + return; + + self playlocalsound( soundalias ); +} + +dvarintvalue( dvar, defval, minval, maxval ) +{ + dvar = "scr_" + level.gametype + "_" + dvar; + + if ( getdvar( dvar ) == "" ) + { + setdvar( dvar, defval ); + return defval; + } + + value = getdvarint( dvar ); + + if ( value > maxval ) + value = maxval; + else if ( value < minval ) + value = minval; + else + return value; + + setdvar( dvar, value ); + return value; +} + +dvarfloatvalue( dvar, defval, minval, maxval ) +{ + dvar = "scr_" + level.gametype + "_" + dvar; + + if ( getdvar( dvar ) == "" ) + { + setdvar( dvar, defval ); + return defval; + } + + value = getdvarfloat( dvar ); + + if ( value > maxval ) + value = maxval; + else if ( value < minval ) + value = minval; + else + return value; + + setdvar( dvar, value ); + return value; +} + +play_sound_on_tag( alias, tag ) +{ + if ( isdefined( tag ) ) + { + org = spawn( "script_origin", self gettagorigin( tag ) ); + org linkto( self, tag, ( 0, 0, 0 ), ( 0, 0, 0 ) ); + } + else + { + org = spawn( "script_origin", ( 0, 0, 0 ) ); + org.origin = self.origin; + org.angles = self.angles; + org linkto( self ); + } + + org playsound( alias ); + wait 5.0; + org delete(); +} + +createloopeffect( fxid ) +{ + ent = maps\mp\_createfx::createeffect( "loopfx", fxid ); + ent.v["delay"] = 0.5; + return ent; +} + +createoneshoteffect( fxid ) +{ + ent = maps\mp\_createfx::createeffect( "oneshotfx", fxid ); + ent.v["delay"] = -15; + return ent; +} + +loop_fx_sound( alias, origin, ender, timeout ) +{ + org = spawn( "script_origin", ( 0, 0, 0 ) ); + + if ( isdefined( ender ) ) + { + thread loop_sound_delete( ender, org ); + self endon( ender ); + } + + org.origin = origin; + org playloopsound( alias ); + + if ( !isdefined( timeout ) ) + return; + + wait( timeout ); +} + +exploder_damage() +{ + if ( isdefined( self.v["delay"] ) ) + delay = self.v["delay"]; + else + delay = 0; + + if ( isdefined( self.v["damage_radius"] ) ) + radius = self.v["damage_radius"]; + else + radius = 128; + + damage = self.v["damage"]; + origin = self.v["origin"]; + wait( delay ); + radiusdamage( origin, radius, damage, damage ); +} + +exploder_before_load( num ) +{ + waittillframeend; + waittillframeend; + activate_exploder( num ); +} + +exploder_after_load( num ) +{ + activate_exploder( num ); +} + +getexploderid( ent ) +{ + if ( !isdefined( level._exploder_ids ) ) + { + level._exploder_ids = []; + level._exploder_id = 1; + } + + if ( !isdefined( level._exploder_ids[ent.v["exploder"]] ) ) + { + level._exploder_ids[ent.v["exploder"]] = level._exploder_id; + level._exploder_id++; + } + + return level._exploder_ids[ent.v["exploder"]]; +} + +activate_exploder_on_clients( num ) +{ + if ( !isdefined( level._exploder_ids[num] ) ) + return; + + if ( !isdefined( level._client_exploders[num] ) ) + level._client_exploders[num] = 1; + + if ( !isdefined( level._client_exploder_ids[num] ) ) + level._client_exploder_ids[num] = 1; + + activateclientexploder( level._exploder_ids[num] ); +} + +delete_exploder_on_clients( num ) +{ + if ( !isdefined( level._exploder_ids[num] ) ) + return; + + if ( !isdefined( level._client_exploders[num] ) ) + return; + + level._client_exploders[num] = undefined; + level._client_exploder_ids[num] = undefined; + deactivateclientexploder( level._exploder_ids[num] ); +} + +activate_individual_exploder() +{ + level notify( "exploder" + self.v["exploder"] ); + + if ( level.createfx_enabled || !level.clientscripts || !isdefined( level._exploder_ids[int( self.v["exploder"] )] ) || isdefined( self.v["exploder_server"] ) ) + { +/# + println( "Exploder " + self.v["exploder"] + " created on server." ); +#/ + if ( isdefined( self.v["firefx"] ) ) + self thread fire_effect(); + + if ( isdefined( self.v["fxid"] ) && self.v["fxid"] != "No FX" ) + self thread cannon_effect(); + else if ( isdefined( self.v["soundalias"] ) ) + self thread sound_effect(); + } + + if ( isdefined( self.v["trailfx"] ) ) + self thread trail_effect(); + + if ( isdefined( self.v["damage"] ) ) + self thread exploder_damage(); + + if ( self.v["exploder_type"] == "exploder" ) + self thread brush_show(); + else if ( self.v["exploder_type"] == "exploderchunk" || self.v["exploder_type"] == "exploderchunk visible" ) + self thread brush_throw(); + else + self thread brush_delete(); +} + +trail_effect() +{ + self exploder_delay(); + + if ( !isdefined( self.v["trailfxtag"] ) ) + self.v["trailfxtag"] = "tag_origin"; + + temp_ent = undefined; + + if ( self.v["trailfxtag"] == "tag_origin" ) + playfxontag( level._effect[self.v["trailfx"]], self.model, self.v["trailfxtag"] ); + else + { + temp_ent = spawn( "script_model", self.model.origin ); + temp_ent setmodel( "tag_origin" ); + temp_ent linkto( self.model, self.v["trailfxtag"] ); + playfxontag( level._effect[self.v["trailfx"]], temp_ent, "tag_origin" ); + } + + if ( isdefined( self.v["trailfxsound"] ) ) + { + if ( !isdefined( temp_ent ) ) + self.model playloopsound( self.v["trailfxsound"] ); + else + temp_ent playloopsound( self.v["trailfxsound"] ); + } + + if ( isdefined( self.v["ender"] ) && isdefined( temp_ent ) ) + level thread trail_effect_ender( temp_ent, self.v["ender"] ); + + if ( !isdefined( self.v["trailfxtimeout"] ) ) + return; + + wait( self.v["trailfxtimeout"] ); + + if ( isdefined( temp_ent ) ) + temp_ent delete(); +} + +trail_effect_ender( ent, ender ) +{ + ent endon( "death" ); + + self waittill( ender ); + + ent delete(); +} + +activate_exploder( num ) +{ + num = int( num ); +/# + if ( level.createfx_enabled ) + { + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + + if ( !isdefined( ent ) ) + continue; + + if ( ent.v["type"] != "exploder" ) + continue; + + if ( !isdefined( ent.v["exploder"] ) ) + continue; + + if ( ent.v["exploder"] != num ) + continue; + + if ( isdefined( ent.v["exploder_server"] ) ) + client_send = 0; + + ent activate_individual_exploder(); + } + + return; + } +#/ + client_send = 1; + + if ( isdefined( level.createfxexploders[num] ) ) + { + for ( i = 0; i < level.createfxexploders[num].size; i++ ) + { + if ( client_send && isdefined( level.createfxexploders[num][i].v["exploder_server"] ) ) + client_send = 0; + + level.createfxexploders[num][i] activate_individual_exploder(); + } + } + + if ( level.clientscripts ) + { + if ( !level.createfx_enabled && client_send == 1 ) + activate_exploder_on_clients( num ); + } +} + +stop_exploder( num ) +{ + num = int( num ); + + if ( level.clientscripts ) + { + if ( !level.createfx_enabled ) + delete_exploder_on_clients( num ); + } + + if ( isdefined( level.createfxexploders[num] ) ) + { + for ( i = 0; i < level.createfxexploders[num].size; i++ ) + { + if ( !isdefined( level.createfxexploders[num][i].looper ) ) + continue; + + level.createfxexploders[num][i].looper delete(); + } + } +} + +sound_effect() +{ + self effect_soundalias(); +} + +effect_soundalias() +{ + if ( !isdefined( self.v["delay"] ) ) + self.v["delay"] = 0; + + origin = self.v["origin"]; + alias = self.v["soundalias"]; + wait( self.v["delay"] ); + play_sound_in_space( alias, origin ); +} + +play_sound_in_space( alias, origin, master ) +{ + org = spawn( "script_origin", ( 0, 0, 1 ) ); + + if ( !isdefined( origin ) ) + origin = self.origin; + + org.origin = origin; + + if ( isdefined( master ) && master ) + org playsoundasmaster( alias ); + else + org playsound( alias ); + + wait 10.0; + org delete(); +} + +loop_sound_in_space( alias, origin, ender ) +{ + org = spawn( "script_origin", ( 0, 0, 1 ) ); + + if ( !isdefined( origin ) ) + origin = self.origin; + + org.origin = origin; + org playloopsound( alias ); + + level waittill( ender ); + + org stoploopsound(); + wait 0.1; + org delete(); +} + +fire_effect() +{ + if ( !isdefined( self.v["delay"] ) ) + self.v["delay"] = 0; + + delay = self.v["delay"]; + + if ( isdefined( self.v["delay_min"] ) && isdefined( self.v["delay_max"] ) ) + delay = self.v["delay_min"] + randomfloat( self.v["delay_max"] - self.v["delay_min"] ); + + forward = self.v["forward"]; + up = self.v["up"]; + org = undefined; + firefxsound = self.v["firefxsound"]; + origin = self.v["origin"]; + firefx = self.v["firefx"]; + ender = self.v["ender"]; + + if ( !isdefined( ender ) ) + ender = "createfx_effectStopper"; + + timeout = self.v["firefxtimeout"]; + firefxdelay = 0.5; + + if ( isdefined( self.v["firefxdelay"] ) ) + firefxdelay = self.v["firefxdelay"]; + + wait( delay ); + + if ( isdefined( firefxsound ) ) + level thread loop_fx_sound( firefxsound, origin, ender, timeout ); + + playfx( level._effect[firefx], self.v["origin"], forward, up ); +} + +loop_sound_delete( ender, ent ) +{ + ent endon( "death" ); + + self waittill( ender ); + + ent delete(); +} + +createexploder( fxid ) +{ + ent = maps\mp\_createfx::createeffect( "exploder", fxid ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1; + ent.v["exploder_type"] = "normal"; + return ent; +} + +getotherteam( team ) +{ + if ( team == "allies" ) + return "axis"; + else if ( team == "axis" ) + return "allies"; + else + return "allies"; +/# + assertmsg( "getOtherTeam: invalid team " + team ); +#/ +} + +getteammask( team ) +{ + if ( !level.teambased || !isdefined( team ) || !isdefined( level.spawnsystem.ispawn_teammask[team] ) ) + return level.spawnsystem.ispawn_teammask_free; + + return level.spawnsystem.ispawn_teammask[team]; +} + +getotherteamsmask( skip_team ) +{ + mask = 0; + + foreach ( team in level.teams ) + { + if ( team == skip_team ) + continue; + + mask |= getteammask( team ); + } + + return mask; +} + +wait_endon( waittime, endonstring, endonstring2, endonstring3, endonstring4 ) +{ + self endon( endonstring ); + + if ( isdefined( endonstring2 ) ) + self endon( endonstring2 ); + + if ( isdefined( endonstring3 ) ) + self endon( endonstring3 ); + + if ( isdefined( endonstring4 ) ) + self endon( endonstring4 ); + + wait( waittime ); + return 1; +} + +ismg( weapon ) +{ + return issubstr( weapon, "_bipod_" ); +} + +plot_points( plotpoints, r, g, b, timer ) +{ +/# + lastpoint = plotpoints[0]; + + if ( !isdefined( r ) ) + r = 1; + + if ( !isdefined( g ) ) + g = 1; + + if ( !isdefined( b ) ) + b = 1; + + if ( !isdefined( timer ) ) + timer = 0.05; + + for ( i = 1; i < plotpoints.size; i++ ) + { + line( lastpoint, plotpoints[i], ( r, g, b ), 1, timer ); + lastpoint = plotpoints[i]; + } +#/ +} + +player_flag_wait( msg ) +{ + while ( !self.flag[msg] ) + self waittill( msg ); +} + +player_flag_wait_either( flag1, flag2 ) +{ + for (;;) + { + if ( flag( flag1 ) ) + return; + + if ( flag( flag2 ) ) + return; + + self waittill_either( flag1, flag2 ); + } +} + +player_flag_waitopen( msg ) +{ + while ( self.flag[msg] ) + self waittill( msg ); +} + +player_flag_init( message, trigger ) +{ + if ( !isdefined( self.flag ) ) + { + self.flag = []; + self.flags_lock = []; + } + + assert( !isdefined( self.flag[message] ), "Attempt to reinitialize existing message: " + message ); + self.flag[message] = 0; +/# + self.flags_lock[message] = 0; +#/ +} + +player_flag_set_delayed( message, delay ) +{ + wait( delay ); + player_flag_set( message ); +} + +player_flag_set( message ) +{ +/# + assert( isdefined( self.flag[message] ), "Attempt to set a flag before calling flag_init: " + message ); + assert( self.flag[message] == self.flags_lock[message] ); + self.flags_lock[message] = 1; +#/ + self.flag[message] = 1; + self notify( message ); +} + +player_flag_clear( message ) +{ +/# + assert( isdefined( self.flag[message] ), "Attempt to set a flag before calling flag_init: " + message ); + assert( self.flag[message] == self.flags_lock[message] ); + self.flags_lock[message] = 0; +#/ + self.flag[message] = 0; + self notify( message ); +} + +player_flag( message ) +{ + assert( isdefined( message ), "Tried to check flag but the flag was not defined." ); + + if ( !self.flag[message] ) + return false; + + return true; +} + +registerclientsys( ssysname ) +{ + if ( !isdefined( level._clientsys ) ) + level._clientsys = []; + + if ( level._clientsys.size >= 32 ) + { +/# + error( "Max num client systems exceeded." ); +#/ + return; + } + + if ( isdefined( level._clientsys[ssysname] ) ) + { +/# + error( "Attempt to re-register client system : " + ssysname ); +#/ + return; + } + else + { + level._clientsys[ssysname] = spawnstruct(); + level._clientsys[ssysname].sysid = clientsysregister( ssysname ); + } +} + +setclientsysstate( ssysname, ssysstate, player ) +{ + if ( !isdefined( level._clientsys ) ) + { +/# + error( "setClientSysState called before registration of any systems." ); +#/ + return; + } + + if ( !isdefined( level._clientsys[ssysname] ) ) + { +/# + error( "setClientSysState called on unregistered system " + ssysname ); +#/ + return; + } + + if ( isdefined( player ) ) + player clientsyssetstate( level._clientsys[ssysname].sysid, ssysstate ); + else + { + clientsyssetstate( level._clientsys[ssysname].sysid, ssysstate ); + level._clientsys[ssysname].sysstate = ssysstate; + } +} + +getclientsysstate( ssysname ) +{ + if ( !isdefined( level._clientsys ) ) + { +/# + error( "Cannot getClientSysState before registering any client systems." ); +#/ + return ""; + } + + if ( !isdefined( level._clientsys[ssysname] ) ) + { +/# + error( "Client system " + ssysname + " cannot return state, as it is unregistered." ); +#/ + return ""; + } + + if ( isdefined( level._clientsys[ssysname].sysstate ) ) + return level._clientsys[ssysname].sysstate; + + return ""; +} + +clientnotify( event ) +{ + if ( level.clientscripts ) + { + if ( isplayer( self ) ) + maps\mp\_utility::setclientsysstate( "levelNotify", event, self ); + else + maps\mp\_utility::setclientsysstate( "levelNotify", event ); + } +} + +alphabet_compare( a, b ) +{ + list = []; + val = 1; + list["0"] = val; + val++; + list["1"] = val; + val++; + list["2"] = val; + val++; + list["3"] = val; + val++; + list["4"] = val; + val++; + list["5"] = val; + val++; + list["6"] = val; + val++; + list["7"] = val; + val++; + list["8"] = val; + val++; + list["9"] = val; + val++; + list["_"] = val; + val++; + list["a"] = val; + val++; + list["b"] = val; + val++; + list["c"] = val; + val++; + list["d"] = val; + val++; + list["e"] = val; + val++; + list["f"] = val; + val++; + list["g"] = val; + val++; + list["h"] = val; + val++; + list["i"] = val; + val++; + list["j"] = val; + val++; + list["k"] = val; + val++; + list["l"] = val; + val++; + list["m"] = val; + val++; + list["n"] = val; + val++; + list["o"] = val; + val++; + list["p"] = val; + val++; + list["q"] = val; + val++; + list["r"] = val; + val++; + list["s"] = val; + val++; + list["t"] = val; + val++; + list["u"] = val; + val++; + list["v"] = val; + val++; + list["w"] = val; + val++; + list["x"] = val; + val++; + list["y"] = val; + val++; + list["z"] = val; + val++; + a = tolower( a ); + b = tolower( b ); + val1 = 0; + + if ( isdefined( list[a] ) ) + val1 = list[a]; + + val2 = 0; + + if ( isdefined( list[b] ) ) + val2 = list[b]; + + if ( val1 > val2 ) + return "1st"; + + if ( val1 < val2 ) + return "2nd"; + + return "same"; +} + +is_later_in_alphabet( string1, string2 ) +{ + count = string1.size; + + if ( count >= string2.size ) + count = string2.size; + + for ( i = 0; i < count; i++ ) + { + val = alphabet_compare( string1[i], string2[i] ); + + if ( val == "1st" ) + return 1; + + if ( val == "2nd" ) + return 0; + } + + return string1.size > string2.size; +} + +alphabetize( array ) +{ + if ( array.size <= 1 ) + return array; + + count = 0; + + for (;;) + { + changed = 0; + + for ( i = 0; i < array.size - 1; i++ ) + { + if ( is_later_in_alphabet( array[i], array[i + 1] ) ) + { + val = array[i]; + array[i] = array[i + 1]; + array[i + 1] = val; + changed = 1; + count++; + + if ( count >= 9 ) + { + count = 0; + wait 0.05; + } + } + } + + if ( !changed ) + return array; + } + + return array; +} + +get_players() +{ + players = getplayers(); + return players; +} + +getfx( fx ) +{ + assert( isdefined( level._effect[fx] ), "Fx " + fx + " is not defined in level._effect." ); + return level._effect[fx]; +} + +struct_arrayspawn() +{ + struct = spawnstruct(); + struct.array = []; + struct.lastindex = 0; + return struct; +} + +structarray_add( struct, object ) +{ + assert( !isdefined( object.struct_array_index ) ); + struct.array[struct.lastindex] = object; + object.struct_array_index = struct.lastindex; + struct.lastindex++; +} + +structarray_remove( struct, object ) +{ + structarray_swaptolast( struct, object ); + struct.array[struct.lastindex - 1] = undefined; + struct.lastindex--; +} + +structarray_swaptolast( struct, object ) +{ + struct structarray_swap( struct.array[struct.lastindex - 1], object ); +} + +structarray_shuffle( struct, shuffle ) +{ + for ( i = 0; i < shuffle; i++ ) + struct structarray_swap( struct.array[i], struct.array[randomint( struct.lastindex )] ); +} + +structarray_swap( object1, object2 ) +{ + index1 = object1.struct_array_index; + index2 = object2.struct_array_index; + self.array[index2] = object1; + self.array[index1] = object2; + self.array[index1].struct_array_index = index1; + self.array[index2].struct_array_index = index2; +} + +waittill_either( msg1, msg2 ) +{ + self endon( msg1 ); + + self waittill( msg2 ); +} + +combinearrays( array1, array2 ) +{ + assert( isdefined( array1 ) || isdefined( array2 ) ); + + if ( !isdefined( array1 ) && isdefined( array2 ) ) + return array2; + + if ( !isdefined( array2 ) && isdefined( array1 ) ) + return array1; + + foreach ( elem in array2 ) + array1[array1.size] = elem; + + return array1; +} + +getclosest( org, array, dist ) +{ + return comparesizes( org, array, dist, ::closerfunc ); +} + +getclosestfx( org, fxarray, dist ) +{ + return comparesizesfx( org, fxarray, dist, ::closerfunc ); +} + +getfarthest( org, array, dist ) +{ + return comparesizes( org, array, dist, ::fartherfunc ); +} + +comparesizesfx( org, array, dist, comparefunc ) +{ + if ( !array.size ) + return undefined; + + if ( isdefined( dist ) ) + { + distsqr = dist * dist; + struct = undefined; + keys = getarraykeys( array ); + + for ( i = 0; i < keys.size; i++ ) + { + newdistsqr = distancesquared( array[keys[i]].v["origin"], org ); + + if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) + continue; + + distsqr = newdistsqr; + struct = array[keys[i]]; + } + + return struct; + } + + keys = getarraykeys( array ); + struct = array[keys[0]]; + distsqr = distancesquared( struct.v["origin"], org ); + + for ( i = 1; i < keys.size; i++ ) + { + newdistsqr = distancesquared( array[keys[i]].v["origin"], org ); + + if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) + continue; + + distsqr = newdistsqr; + struct = array[keys[i]]; + } + + return struct; +} + +comparesizes( org, array, dist, comparefunc ) +{ + if ( !array.size ) + return undefined; + + if ( isdefined( dist ) ) + { + distsqr = dist * dist; + ent = undefined; + keys = getarraykeys( array ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( !isdefined( array[keys[i]] ) ) + continue; + + newdistsqr = distancesquared( array[keys[i]].origin, org ); + + if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) + continue; + + distsqr = newdistsqr; + ent = array[keys[i]]; + } + + return ent; + } + + keys = getarraykeys( array ); + ent = array[keys[0]]; + distsqr = distancesquared( ent.origin, org ); + + for ( i = 1; i < keys.size; i++ ) + { + if ( !isdefined( array[keys[i]] ) ) + continue; + + newdistsqr = distancesquared( array[keys[i]].origin, org ); + + if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) + continue; + + distsqr = newdistsqr; + ent = array[keys[i]]; + } + + return ent; +} + +closerfunc( dist1, dist2 ) +{ + return dist1 >= dist2; +} + +fartherfunc( dist1, dist2 ) +{ + return dist1 <= dist2; +} + +get_array_of_closest( org, array, excluders = [], max = array.size, maxdist ) +{ + maxdists2rd = undefined; + + if ( isdefined( maxdist ) ) + maxdists2rd = maxdist * maxdist; + + dist = []; + index = []; + + for ( i = 0; i < array.size; i++ ) + { + if ( !isdefined( array[i] ) ) + continue; + + excluded = 0; + + for ( p = 0; p < excluders.size; p++ ) + { + if ( array[i] != excluders[p] ) + continue; + + excluded = 1; + break; + } + + if ( excluded ) + continue; + + length = distancesquared( org, array[i].origin ); + + if ( isdefined( maxdists2rd ) && maxdists2rd < length ) + continue; + + dist[dist.size] = length; + index[index.size] = i; + } + + for (;;) + { + change = 0; + + for ( i = 0; i < dist.size - 1; i++ ) + { + if ( dist[i] <= dist[i + 1] ) + continue; + + change = 1; + temp = dist[i]; + dist[i] = dist[i + 1]; + dist[i + 1] = temp; + temp = index[i]; + index[i] = index[i + 1]; + index[i + 1] = temp; + } + + if ( !change ) + break; + } + + newarray = []; + + if ( max > dist.size ) + max = dist.size; + + for ( i = 0; i < max; i++ ) + newarray[i] = array[index[i]]; + + return newarray; +} + +set_dvar_if_unset( dvar, value, reset = 0 ) +{ + if ( reset || getdvar( dvar ) == "" ) + { + setdvar( dvar, value ); + return value; + } + + return getdvar( dvar ); +} + +set_dvar_float_if_unset( dvar, value, reset = 0 ) +{ + if ( reset || getdvar( dvar ) == "" ) + setdvar( dvar, value ); + + return getdvarfloat( dvar ); +} + +set_dvar_int_if_unset( dvar, value, reset = 0 ) +{ + if ( reset || getdvar( dvar ) == "" ) + { + setdvar( dvar, value ); + return int( value ); + } + + return getdvarint( dvar ); +} + +drawcylinder( pos, rad, height, duration, stop_notify ) +{ +/# + if ( !isdefined( duration ) ) + duration = 0; + + level thread drawcylinder_think( pos, rad, height, duration, stop_notify ); +#/ +} + +drawcylinder_think( pos, rad, height, seconds, stop_notify ) +{ +/# + if ( isdefined( stop_notify ) ) + level endon( stop_notify ); + + stop_time = gettime() + seconds * 1000; + currad = rad; + curheight = height; + + for (;;) + { + if ( seconds > 0 && stop_time <= gettime() ) + return; + + for ( r = 0; r < 20; r++ ) + { + theta = r / 20 * 360; + theta2 = ( r + 1 ) / 20 * 360; + line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, 0 ) ); + line( pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, curheight ) ); + line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ) ); + } + + wait 0.05; + } +#/ +} + +is_bot() +{ + return isplayer( self ) && isdefined( self.pers["isBot"] ) && self.pers["isBot"] != 0; +} + +add_trigger_to_ent( ent ) +{ + if ( !isdefined( ent._triggers ) ) + ent._triggers = []; + + ent._triggers[self getentitynumber()] = 1; +} + +remove_trigger_from_ent( ent ) +{ + if ( !isdefined( ent ) ) + return; + + if ( !isdefined( ent._triggers ) ) + return; + + if ( !isdefined( ent._triggers[self getentitynumber()] ) ) + return; + + ent._triggers[self getentitynumber()] = 0; +} + +ent_already_in_trigger( trig ) +{ + if ( !isdefined( self._triggers ) ) + return false; + + if ( !isdefined( self._triggers[trig getentitynumber()] ) ) + return false; + + if ( !self._triggers[trig getentitynumber()] ) + return false; + + return true; +} + +trigger_thread_death_monitor( ent, ender ) +{ + ent waittill( "death" ); + + self endon( ender ); + self remove_trigger_from_ent( ent ); +} + +trigger_thread( ent, on_enter_payload, on_exit_payload ) +{ + ent endon( "entityshutdown" ); + ent endon( "death" ); + + if ( ent ent_already_in_trigger( self ) ) + return; + + self add_trigger_to_ent( ent ); + ender = "end_trig_death_monitor" + self getentitynumber() + " " + ent getentitynumber(); + self thread trigger_thread_death_monitor( ent, ender ); + endon_condition = "leave_trigger_" + self getentitynumber(); + + if ( isdefined( on_enter_payload ) ) + self thread [[ on_enter_payload ]]( ent, endon_condition ); + + while ( isdefined( ent ) && ent istouching( self ) ) + wait 0.01; + + ent notify( endon_condition ); + + if ( isdefined( ent ) && isdefined( on_exit_payload ) ) + self thread [[ on_exit_payload ]]( ent ); + + if ( isdefined( ent ) ) + self remove_trigger_from_ent( ent ); + + self notify( ender ); +} + +isoneround() +{ + if ( level.roundlimit == 1 ) + return true; + + return false; +} + +isfirstround() +{ + if ( level.roundlimit > 1 && game["roundsplayed"] == 0 ) + return true; + + return false; +} + +islastround() +{ + if ( level.roundlimit > 1 && game["roundsplayed"] >= level.roundlimit - 1 ) + return true; + + return false; +} + +waslastround() +{ + if ( level.forcedend ) + return true; + + if ( isdefined( level.shouldplayovertimeround ) ) + { + if ( [[ level.shouldplayovertimeround ]]() ) + { + level.nextroundisovertime = 1; + return false; + } + else if ( isdefined( game["overtime_round"] ) ) + return true; + } + + if ( hitroundlimit() || hitscorelimit() || hitroundwinlimit() ) + return true; + + return false; +} + +hitroundlimit() +{ + if ( level.roundlimit <= 0 ) + return 0; + + return getroundsplayed() >= level.roundlimit; +} + +anyteamhitroundwinlimit() +{ + foreach ( team in level.teams ) + { + if ( getroundswon( team ) >= level.roundwinlimit ) + return true; + } + + return false; +} + +anyteamhitroundlimitwithdraws() +{ + tie_wins = game["roundswon"]["tie"]; + + foreach ( team in level.teams ) + { + if ( getroundswon( team ) + tie_wins >= level.roundwinlimit ) + return true; + } + + return false; +} + +getroundwinlimitwinningteam() +{ + max_wins = 0; + winning_team = undefined; + + foreach ( team in level.teams ) + { + wins = getroundswon( team ); + + if ( !isdefined( winning_team ) ) + { + max_wins = wins; + winning_team = team; + continue; + } + + if ( wins == max_wins ) + { + winning_team = "tie"; + continue; + } + + if ( wins > max_wins ) + { + max_wins = wins; + winning_team = team; + } + } + + return winning_team; +} + +hitroundwinlimit() +{ + if ( !isdefined( level.roundwinlimit ) || level.roundwinlimit <= 0 ) + return false; + + if ( anyteamhitroundwinlimit() ) + return true; + + if ( anyteamhitroundlimitwithdraws() ) + { + if ( getroundwinlimitwinningteam() != "tie" ) + return true; + } + + return false; +} + +anyteamhitscorelimit() +{ + foreach ( team in level.teams ) + { + if ( game["teamScores"][team] >= level.scorelimit ) + return true; + } + + return false; +} + +hitscorelimit() +{ + if ( isscoreroundbased() ) + return false; + + if ( level.scorelimit <= 0 ) + return false; + + if ( level.teambased ) + { + if ( anyteamhitscorelimit() ) + return true; + } + else + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pointstowin ) && player.pointstowin >= level.scorelimit ) + return true; + } + } + + return false; +} + +getroundswon( team ) +{ + return game["roundswon"][team]; +} + +getotherteamsroundswon( skip_team ) +{ + roundswon = 0; + + foreach ( team in level.teams ) + { + if ( team == skip_team ) + continue; + + roundswon += game["roundswon"][team]; + } + + return roundswon; +} + +getroundsplayed() +{ + return game["roundsplayed"]; +} + +isscoreroundbased() +{ + return level.scoreroundbased; +} + +isroundbased() +{ + if ( level.roundlimit != 1 && level.roundwinlimit != 1 ) + return true; + + return false; +} + +waittillnotmoving() +{ + if ( self ishacked() ) + { + wait 0.05; + return; + } + + if ( self.classname == "grenade" ) + self waittill( "stationary" ); + else + { + for ( prevorigin = self.origin; 1; prevorigin = self.origin ) + { + wait 0.15; + + if ( self.origin == prevorigin ) + break; + } + } +} + +mayapplyscreeneffect() +{ + assert( isdefined( self ) ); + assert( isplayer( self ) ); + return !isdefined( self.viewlockedentity ); +} + +getdvarfloatdefault( dvarname, defaultvalue ) +{ + value = getdvar( dvarname ); + + if ( value != "" ) + return float( value ); + + return defaultvalue; +} + +getdvarintdefault( dvarname, defaultvalue ) +{ + value = getdvar( dvarname ); + + if ( value != "" ) + return int( value ); + + return defaultvalue; +} + +closestpointonline( point, linestart, lineend ) +{ + linemagsqrd = lengthsquared( lineend - linestart ); + t = ( ( point[0] - linestart[0] ) * ( lineend[0] - linestart[0] ) + ( point[1] - linestart[1] ) * ( lineend[1] - linestart[1] ) + ( point[2] - linestart[2] ) * ( lineend[2] - linestart[2] ) ) / linemagsqrd; + + if ( t < 0.0 ) + return linestart; + else if ( t > 1.0 ) + return lineend; + + start_x = linestart[0] + t * ( lineend[0] - linestart[0] ); + start_y = linestart[1] + t * ( lineend[1] - linestart[1] ); + start_z = linestart[2] + t * ( lineend[2] - linestart[2] ); + return ( start_x, start_y, start_z ); +} + +isstrstart( string1, substr ) +{ + return getsubstr( string1, 0, substr.size ) == substr; +} + +spread_array_thread( entities, process, var1, var2, var3 ) +{ + keys = getarraykeys( entities ); + + if ( isdefined( var3 ) ) + { + for ( i = 0; i < keys.size; i++ ) + { + entities[keys[i]] thread [[ process ]]( var1, var2, var3 ); + wait 0.1; + } + + return; + } + + if ( isdefined( var2 ) ) + { + for ( i = 0; i < keys.size; i++ ) + { + entities[keys[i]] thread [[ process ]]( var1, var2 ); + wait 0.1; + } + + return; + } + + if ( isdefined( var1 ) ) + { + for ( i = 0; i < keys.size; i++ ) + { + entities[keys[i]] thread [[ process ]]( var1 ); + wait 0.1; + } + + return; + } + + for ( i = 0; i < keys.size; i++ ) + { + entities[keys[i]] thread [[ process ]](); + wait 0.1; + } +} + +freeze_player_controls( boolean ) +{ + assert( isdefined( boolean ), "'freeze_player_controls()' has not been passed an argument properly." ); + + if ( boolean && isdefined( self ) ) + self freezecontrols( boolean ); + else if ( !boolean && isdefined( self ) && !level.gameended ) + self freezecontrols( boolean ); +} + +gethostplayer() +{ + players = get_players(); + + for ( index = 0; index < players.size; index++ ) + { + if ( players[index] ishost() ) + return players[index]; + } +} + +gethostplayerforbots() +{ + players = get_players(); + + for ( index = 0; index < players.size; index++ ) + { + if ( players[index] ishostforbots() ) + return players[index]; + } +} + +ispregame() +{ + return isdefined( level.pregame ) && level.pregame; +} + +iskillstreaksenabled() +{ + return isdefined( level.killstreaksenabled ) && level.killstreaksenabled; +} + +isrankenabled() +{ + return isdefined( level.rankenabled ) && level.rankenabled; +} + +playsmokesound( position, duration, startsound, stopsound, loopsound ) +{ + smokesound = spawn( "script_origin", ( 0, 0, 1 ) ); + smokesound.origin = position; + smokesound playsound( startsound ); + smokesound playloopsound( loopsound ); + + if ( duration > 0.5 ) + wait( duration - 0.5 ); + + thread playsoundinspace( stopsound, position ); + smokesound stoploopsound( 0.5 ); + wait 0.5; + smokesound delete(); +} + +playsoundinspace( alias, origin, master ) +{ + org = spawn( "script_origin", ( 0, 0, 1 ) ); + + if ( !isdefined( origin ) ) + origin = self.origin; + + org.origin = origin; + + if ( isdefined( master ) && master ) + org playsoundasmaster( alias ); + else + org playsound( alias ); + + wait 10.0; + org delete(); +} + +get2dyaw( start, end ) +{ + yaw = 0; + vector = ( end[0] - start[0], end[1] - start[1], 0 ); + return vectoangles( vector ); +} + +vectoangles( vector ) +{ + yaw = 0; + vecx = vector[0]; + vecy = vector[1]; + + if ( vecx == 0 && vecy == 0 ) + return 0; + + if ( vecy < 0.001 && vecy > -0.001 ) + vecy = 0.001; + + yaw = atan( vecx / vecy ); + + if ( vecy < 0 ) + yaw += 180; + + return 90 - yaw; +} + +deleteaftertime( time ) +{ + assert( isdefined( self ) ); + assert( isdefined( time ) ); + assert( time >= 0.05 ); + self thread deleteaftertimethread( time ); +} + +deleteaftertimethread( time ) +{ + self endon( "death" ); + wait( time ); + self delete(); +} + +setusingremote( remotename ) +{ + if ( isdefined( self.carryicon ) ) + self.carryicon.alpha = 0; + + assert( !self isusingremote() ); + self.usingremote = remotename; + self disableoffhandweapons(); + self notify( "using_remote" ); +} + +getremotename() +{ + assert( self isusingremote() ); + return self.usingremote; +} + +isusingremote() +{ + return isdefined( self.usingremote ); +} + +getlastweapon() +{ + last_weapon = undefined; + + if ( self hasweapon( self.lastnonkillstreakweapon ) ) + last_weapon = self.lastnonkillstreakweapon; + else if ( self hasweapon( self.lastdroppableweapon ) ) + last_weapon = self.lastdroppableweapon; + + assert( isdefined( last_weapon ) ); + return last_weapon; +} + +freezecontrolswrapper( frozen ) +{ + if ( isdefined( level.hostmigrationtimer ) ) + { + self freeze_player_controls( 1 ); + return; + } + + self freeze_player_controls( frozen ); +} + +setobjectivetext( team, text ) +{ + game["strings"]["objective_" + team] = text; + precachestring( text ); +} + +setobjectivescoretext( team, text ) +{ + game["strings"]["objective_score_" + team] = text; + precachestring( text ); +} + +setobjectivehinttext( team, text ) +{ + game["strings"]["objective_hint_" + team] = text; + precachestring( text ); +} + +getobjectivetext( team ) +{ + return game["strings"]["objective_" + team]; +} + +getobjectivescoretext( team ) +{ + return game["strings"]["objective_score_" + team]; +} + +getobjectivehinttext( team ) +{ + return game["strings"]["objective_hint_" + team]; +} + +registerroundswitch( minvalue, maxvalue ) +{ + level.roundswitch = clamp( getgametypesetting( "roundSwitch" ), minvalue, maxvalue ); + level.roundswitchmin = minvalue; + level.roundswitchmax = maxvalue; +} + +registerroundlimit( minvalue, maxvalue ) +{ + level.roundlimit = clamp( getgametypesetting( "roundLimit" ), minvalue, maxvalue ); + level.roundlimitmin = minvalue; + level.roundlimitmax = maxvalue; +} + +registerroundwinlimit( minvalue, maxvalue ) +{ + level.roundwinlimit = clamp( getgametypesetting( "roundWinLimit" ), minvalue, maxvalue ); + level.roundwinlimitmin = minvalue; + level.roundwinlimitmax = maxvalue; +} + +registerscorelimit( minvalue, maxvalue ) +{ + level.scorelimit = clamp( getgametypesetting( "scoreLimit" ), minvalue, maxvalue ); + level.scorelimitmin = minvalue; + level.scorelimitmax = maxvalue; + setdvar( "ui_scorelimit", level.scorelimit ); +} + +registertimelimit( minvalue, maxvalue ) +{ + level.timelimit = clamp( getgametypesetting( "timeLimit" ), minvalue, maxvalue ); + level.timelimitmin = minvalue; + level.timelimitmax = maxvalue; + setdvar( "ui_timelimit", level.timelimit ); +} + +registernumlives( minvalue, maxvalue ) +{ + level.numlives = clamp( getgametypesetting( "playerNumLives" ), minvalue, maxvalue ); + level.numlivesmin = minvalue; + level.numlivesmax = maxvalue; +} + +getplayerfromclientnum( clientnum ) +{ + if ( clientnum < 0 ) + return undefined; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( level.players[i] getentitynumber() == clientnum ) + return level.players[i]; + } + + return undefined; +} + +setclientfield( field_name, value ) +{ + if ( self == level ) + codesetworldclientfield( field_name, value ); + else + codesetclientfield( self, field_name, value ); +} + +setclientfieldtoplayer( field_name, value ) +{ + codesetplayerstateclientfield( self, field_name, value ); +} + +getclientfield( field_name ) +{ + if ( self == level ) + return codegetworldclientfield( field_name ); + else + return codegetclientfield( self, field_name ); +} + +getclientfieldtoplayer( field_name ) +{ + return codegetplayerstateclientfield( self, field_name ); +} + +isenemyplayer( player ) +{ + assert( isdefined( player ) ); + + if ( !isplayer( player ) ) + return false; + + if ( level.teambased ) + { + if ( player.team == self.team ) + return false; + } + else if ( player == self ) + return false; + + return true; +} + +getweaponclass( weapon ) +{ + assert( isdefined( weapon ) ); + + if ( !isdefined( weapon ) ) + return undefined; + + if ( !isdefined( level.weaponclassarray ) ) + level.weaponclassarray = []; + + if ( isdefined( level.weaponclassarray[weapon] ) ) + return level.weaponclassarray[weapon]; + + baseweaponindex = getbaseweaponitemindex( weapon ) + 1; + weaponclass = tablelookupcolumnforrow( "mp/statstable.csv", baseweaponindex, 2 ); + level.weaponclassarray[weapon] = weaponclass; + return weaponclass; +} + +ispressbuild() +{ + buildtype = getdvar( _hash_19B966D7 ); + + if ( isdefined( buildtype ) && buildtype == "press" ) + return true; + + return false; +} + +isflashbanged() +{ + return isdefined( self.flashendtime ) && gettime() < self.flashendtime; +} + +ishacked() +{ + return isdefined( self.hacked ) && self.hacked; +} + +domaxdamage( origin, attacker, inflictor, headshot, mod ) +{ + if ( isdefined( self.damagedtodeath ) && self.damagedtodeath ) + return; + + if ( isdefined( self.maxhealth ) ) + damage = self.maxhealth + 1; + else + damage = self.health + 1; + + self.damagedtodeath = 1; + self dodamage( damage, origin, attacker, inflictor, headshot, mod ); +} diff --git a/ZM/Core/maps/mp/_visionset_mgr.gsc b/ZM/Core/maps/mp/_visionset_mgr.gsc new file mode 100644 index 0000000..faf2f69 --- /dev/null +++ b/ZM/Core/maps/mp/_visionset_mgr.gsc @@ -0,0 +1,445 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; + +init() +{ + if ( level.createfx_enabled ) + return; + + level.vsmgr_initializing = 1; + level.vsmgr_default_info_name = "none"; + level.vsmgr = []; + level thread register_type( "visionset" ); + level thread register_type( "overlay" ); + onfinalizeinitialization_callback( ::finalize_clientfields ); + level thread monitor(); + level thread onplayerconnect(); +} + +vsmgr_register_info( type, name, version, priority, lerp_step_count, activate_per_player, lerp_thread, ref_count_lerp_thread ) +{ + if ( level.createfx_enabled ) + return; + + assert( level.vsmgr_initializing, "All info registration in the visionset_mgr system must occur during the first frame while the system is initializing" ); + lower_name = tolower( name ); + validate_info( type, lower_name, priority ); + add_sorted_name_key( type, lower_name ); + add_sorted_priority_key( type, lower_name, priority ); + level.vsmgr[type].info[lower_name] = spawnstruct(); + level.vsmgr[type].info[lower_name] add_info( type, lower_name, version, priority, lerp_step_count, activate_per_player, lerp_thread, ref_count_lerp_thread ); + + if ( level.vsmgr[type].highest_version < version ) + level.vsmgr[type].highest_version = version; +} + +vsmgr_activate( type, name, player, opt_param_1, opt_param_2 ) +{ + if ( level.vsmgr[type].info[name].state.activate_per_player ) + { + activate_per_player( type, name, player, opt_param_1, opt_param_2 ); + return; + } + + state = level.vsmgr[type].info[name].state; + + if ( state.ref_count_lerp_thread ) + { + state.ref_count++; + + if ( 1 < state.ref_count ) + return; + } + + if ( isdefined( state.lerp_thread ) ) + state thread lerp_thread_wrapper( state.lerp_thread, opt_param_1, opt_param_2 ); + else + { + players = getplayers(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + state vsmgr_set_state_active( players[player_index], 1 ); + } +} + +vsmgr_deactivate( type, name, player ) +{ + if ( level.vsmgr[type].info[name].state.activate_per_player ) + { + deactivate_per_player( type, name, player ); + return; + } + + state = level.vsmgr[type].info[name].state; + + if ( state.ref_count_lerp_thread ) + { + state.ref_count--; + + if ( 0 < state.ref_count ) + return; + } + + state notify( "deactivate" ); + players = getplayers(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + state vsmgr_set_state_inactive( players[player_index] ); +} + +vsmgr_set_state_active( player, lerp ) +{ + player_entnum = player getentitynumber(); + + if ( !isdefined( self.players[player_entnum] ) ) + return; + + self.players[player_entnum].active = 1; + self.players[player_entnum].lerp = lerp; +} + +vsmgr_set_state_inactive( player ) +{ + player_entnum = player getentitynumber(); + + if ( !isdefined( self.players[player_entnum] ) ) + return; + + self.players[player_entnum].active = 0; + self.players[player_entnum].lerp = 0; +} + +vsmgr_timeout_lerp_thread( timeout, opt_param_2 ) +{ + players = getplayers(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + self vsmgr_set_state_active( players[player_index], 1 ); + + wait( timeout ); + vsmgr_deactivate( self.type, self.name ); +} + +vsmgr_timeout_lerp_thread_per_player( player, timeout, opt_param_2 ) +{ + self vsmgr_set_state_active( player, 1 ); + wait( timeout ); + deactivate_per_player( self.type, self.name, player ); +} + +vsmgr_duration_lerp_thread( duration, max_duration ) +{ + start_time = gettime(); + end_time = start_time + int( duration * 1000 ); + + if ( isdefined( max_duration ) ) + start_time = end_time - int( max_duration * 1000 ); + + while ( true ) + { + lerp = calc_remaining_duration_lerp( start_time, end_time ); + + if ( 0 >= lerp ) + break; + + players = getplayers(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + self vsmgr_set_state_active( players[player_index], lerp ); + + wait 0.05; + } + + vsmgr_deactivate( self.type, self.name ); +} + +vsmgr_duration_lerp_thread_per_player( player, duration, max_duration ) +{ + start_time = gettime(); + end_time = start_time + int( duration * 1000 ); + + if ( isdefined( max_duration ) ) + start_time = end_time - int( max_duration * 1000 ); + + while ( true ) + { + lerp = calc_remaining_duration_lerp( start_time, end_time ); + + if ( 0 >= lerp ) + break; + + self vsmgr_set_state_active( player, lerp ); + wait 0.05; + } + + deactivate_per_player( self.type, self.name, player ); +} + +register_type( type ) +{ + level.vsmgr[type] = spawnstruct(); + level.vsmgr[type].type = type; + level.vsmgr[type].in_use = 0; + level.vsmgr[type].highest_version = 0; + level.vsmgr[type].cf_slot_name = type + "_slot"; + level.vsmgr[type].cf_lerp_name = type + "_lerp"; + level.vsmgr[type].info = []; + level.vsmgr[type].sorted_name_keys = []; + level.vsmgr[type].sorted_prio_keys = []; + vsmgr_register_info( type, level.vsmgr_default_info_name, 1, 0, 1, 0, undefined ); +} + +finalize_clientfields() +{ + typekeys = getarraykeys( level.vsmgr ); + + for ( type_index = 0; type_index < typekeys.size; type_index++ ) + level.vsmgr[typekeys[type_index]] thread finalize_type_clientfields(); + + level.vsmgr_initializing = 0; +} + +finalize_type_clientfields() +{ + if ( 1 >= self.info.size ) + return; + + self.in_use = 1; + self.cf_slot_bit_count = getminbitcountfornum( self.info.size - 1 ); + self.cf_lerp_bit_count = self.info[self.sorted_name_keys[0]].lerp_bit_count; + + for ( i = 0; i < self.sorted_name_keys.size; i++ ) + { + self.info[self.sorted_name_keys[i]].slot_index = i; + + if ( self.info[self.sorted_name_keys[i]].lerp_bit_count > self.cf_lerp_bit_count ) + self.cf_lerp_bit_count = self.info[self.sorted_name_keys[i]].lerp_bit_count; + } + + registerclientfield( "toplayer", self.cf_slot_name, self.highest_version, self.cf_slot_bit_count, "int" ); + + if ( 1 < self.cf_lerp_bit_count ) + registerclientfield( "toplayer", self.cf_lerp_name, self.highest_version, self.cf_lerp_bit_count, "float" ); +} + +validate_info( type, name, priority ) +{ + keys = getarraykeys( level.vsmgr ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( type == keys[i] ) + break; + } + + assert( i < keys.size, "In visionset_mgr, type '" + type + "'is unknown" ); + keys = getarraykeys( level.vsmgr[type].info ); + + for ( i = 0; i < keys.size; i++ ) + { + assert( level.vsmgr[type].info[keys[i]].name != name, "In visionset_mgr of type '" + type + "': name '" + name + "' has previously been registered" ); + assert( level.vsmgr[type].info[keys[i]].priority != priority, "In visionset_mgr of type '" + type + "': priority '" + priority + "' requested for name '" + name + "' has previously been registered under name '" + level.vsmgr[type].info[keys[i]].name + "'" ); + } +} + +add_sorted_name_key( type, name ) +{ + for ( i = 0; i < level.vsmgr[type].sorted_name_keys.size; i++ ) + { + if ( name < level.vsmgr[type].sorted_name_keys[i] ) + break; + } + + arrayinsert( level.vsmgr[type].sorted_name_keys, name, i ); +} + +add_sorted_priority_key( type, name, priority ) +{ + for ( i = 0; i < level.vsmgr[type].sorted_prio_keys.size; i++ ) + { + if ( priority > level.vsmgr[type].info[level.vsmgr[type].sorted_prio_keys[i]].priority ) + break; + } + + arrayinsert( level.vsmgr[type].sorted_prio_keys, name, i ); +} + +add_info( type, name, version, priority, lerp_step_count, activate_per_player, lerp_thread, ref_count_lerp_thread ) +{ + self.type = type; + self.name = name; + self.version = version; + self.priority = priority; + self.lerp_step_count = lerp_step_count; + self.lerp_bit_count = getminbitcountfornum( lerp_step_count ); + + if ( !isdefined( ref_count_lerp_thread ) ) + ref_count_lerp_thread = 0; + + self.state = spawnstruct(); + self.state.type = type; + self.state.name = name; + self.state.activate_per_player = activate_per_player; + self.state.lerp_thread = lerp_thread; + self.state.ref_count_lerp_thread = ref_count_lerp_thread; + self.state.players = []; + + if ( ref_count_lerp_thread && !activate_per_player ) + self.state.ref_count = 0; +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connected", player ); + + player thread on_player_connect(); + } +} + +on_player_connect() +{ + self._player_entnum = self getentitynumber(); + typekeys = getarraykeys( level.vsmgr ); + + for ( type_index = 0; type_index < typekeys.size; type_index++ ) + { + type = typekeys[type_index]; + + if ( !level.vsmgr[type].in_use ) + continue; + + for ( name_index = 0; name_index < level.vsmgr[type].sorted_name_keys.size; name_index++ ) + { + name_key = level.vsmgr[type].sorted_name_keys[name_index]; + level.vsmgr[type].info[name_key].state.players[self._player_entnum] = spawnstruct(); + level.vsmgr[type].info[name_key].state.players[self._player_entnum].active = 0; + level.vsmgr[type].info[name_key].state.players[self._player_entnum].lerp = 0; + + if ( level.vsmgr[type].info[name_key].state.ref_count_lerp_thread && level.vsmgr[type].info[name_key].state.activate_per_player ) + level.vsmgr[type].info[name_key].state.players[self._player_entnum].ref_count = 0; + } + + level.vsmgr[type].info[level.vsmgr_default_info_name].state vsmgr_set_state_active( self, 1 ); + } +} + +monitor() +{ + while ( level.vsmgr_initializing ) + wait 0.05; + + typekeys = getarraykeys( level.vsmgr ); + + while ( true ) + { + wait 0.05; + waittillframeend; + players = get_players(); + + for ( type_index = 0; type_index < typekeys.size; type_index++ ) + { + type = typekeys[type_index]; + + if ( !level.vsmgr[type].in_use ) + continue; + + for ( player_index = 0; player_index < players.size; player_index++ ) + { +/# + if ( is_true( players[player_index].pers["isBot"] ) ) + continue; +#/ + update_clientfields( players[player_index], level.vsmgr[type] ); + } + } + } +} + +get_first_active_name( type_struct ) +{ + size = type_struct.sorted_prio_keys.size; + + for ( prio_index = 0; prio_index < size; prio_index++ ) + { + prio_key = type_struct.sorted_prio_keys[prio_index]; + + if ( type_struct.info[prio_key].state.players[self._player_entnum].active ) + return prio_key; + } + + return level.vsmgr_default_info_name; +} + +update_clientfields( player, type_struct ) +{ + name = player get_first_active_name( type_struct ); + player setclientfieldtoplayer( type_struct.cf_slot_name, type_struct.info[name].slot_index ); + + if ( 1 < type_struct.cf_lerp_bit_count ) + player setclientfieldtoplayer( type_struct.cf_lerp_name, type_struct.info[name].state.players[player._player_entnum].lerp ); +} + +lerp_thread_wrapper( func, opt_param_1, opt_param_2 ) +{ + self notify( "deactivate" ); + self endon( "deactivate" ); + self [[ func ]]( opt_param_1, opt_param_2 ); +} + +lerp_thread_per_player_wrapper( func, player, opt_param_1, opt_param_2 ) +{ + player_entnum = player getentitynumber(); + self notify( "deactivate" ); + self endon( "deactivate" ); + self.players[player_entnum] notify( "deactivate" ); + self.players[player_entnum] endon( "deactivate" ); + player endon( "disconnect" ); + self [[ func ]]( player, opt_param_1, opt_param_2 ); +} + +activate_per_player( type, name, player, opt_param_1, opt_param_2 ) +{ + player_entnum = player getentitynumber(); + state = level.vsmgr[type].info[name].state; + + if ( state.ref_count_lerp_thread ) + { + state.players[player_entnum].ref_count++; + + if ( 1 < state.players[player_entnum].ref_count ) + return; + } + + if ( isdefined( state.lerp_thread ) ) + state thread lerp_thread_per_player_wrapper( state.lerp_thread, player, opt_param_1, opt_param_2 ); + else + state vsmgr_set_state_active( player, 1 ); +} + +deactivate_per_player( type, name, player ) +{ + player_entnum = player getentitynumber(); + state = level.vsmgr[type].info[name].state; + + if ( state.ref_count_lerp_thread ) + { + state.players[player_entnum].ref_count--; + + if ( 0 < state.players[player_entnum].ref_count ) + return; + } + + state vsmgr_set_state_inactive( player ); + state notify( "deactivate" ); +} + +calc_remaining_duration_lerp( start_time, end_time ) +{ + now = gettime(); + frac = float( end_time - now ) / float( end_time - start_time ); + return clamp( frac, 0, 1 ); +} diff --git a/ZM/Core/maps/mp/animscripts/dog_combat.gsc b/ZM/Core/maps/mp/animscripts/dog_combat.gsc new file mode 100644 index 0000000..4c21caa --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/dog_combat.gsc @@ -0,0 +1,105 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\utility; + +main() +{ + debug_anim_print( "dog_combat::main() " ); + self endon( "killanimscript" ); + self setaimanimweights( 0, 0 ); +/# + if ( !debug_allow_combat() ) + { + combatidle(); + return; + } +#/ + if ( isdefined( level.hostmigrationtimer ) ) + { + combatidle(); + return; + } + + assert( isdefined( self.enemy ) ); + + if ( !isalive( self.enemy ) ) + { + combatidle(); + return; + } + + if ( isplayer( self.enemy ) ) + self meleebiteattackplayer( self.enemy ); +} + +combatidle() +{ + self set_orient_mode( "face enemy" ); + self animmode( "zonly_physics", 0 ); + idleanims = []; + idleanims[0] = "combat_attackidle"; + idleanims[1] = "combat_attackidle_bark"; + idleanims[2] = "combat_attackidle_growl"; + idleanim = random( idleanims ); + debug_anim_print( "dog_combat::combatIdle() - Setting " + idleanim ); + self setanimstate( idleanim ); + self maps\mp\animscripts\shared::donotetracks( "done" ); + debug_anim_print( "dog_combat::combatIdle() - " + idleanim + " notify done." ); +} + +meleebiteattackplayer( player ) +{ + self set_orient_mode( "face enemy" ); + self animmode( "gravity", 0 ); + self.safetochangescript = 0; + + if ( use_low_attack() ) + { + self animmode( "angle deltas", 0 ); + self setanimstate( "combat_attack_player_close_range" ); + wait 0.35; + + if ( isplayer( self.enemy ) && self.enemy getstance() == "prone" ) + self meleewithoffset( vectorscale( ( 0, 0, -1 ), 9.0 ) ); + else + self melee(); + + self maps\mp\animscripts\shared::donotetracksfortime( 1.2, "done" ); + self animmode( "gravity", 0 ); + } + else + { + attack_time = 1.2 + randomfloat( 0.4 ); + debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_run_attack" ); + self setanimstate( "combat_attack_run" ); + self maps\mp\animscripts\shared::donotetracksfortime( attack_time, "done", ::handlemeleebiteattacknotetracks, player ); + debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - combat_attack_run notify done." ); + } + + self.safetochangescript = 1; + self animmode( "none", 0 ); +} + +handlemeleebiteattacknotetracks( note, player ) +{ + if ( note == "dog_melee" ) + self melee( anglestoforward( self.angles ) ); +} + +use_low_attack() +{ + if ( isplayer( self.enemy ) ) + { + if ( self.enemy getstance() == "prone" ) + { + attack_height = self.origin[2] + 16; + + if ( self.enemy.origin[2] < attack_height ) + return true; + } + } + + return false; +} diff --git a/ZM/Core/maps/mp/animscripts/dog_death.gsc b/ZM/Core/maps/mp/animscripts/dog_death.gsc new file mode 100644 index 0000000..72c998c --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/dog_death.gsc @@ -0,0 +1,32 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\shared; + +main() +{ + debug_anim_print( "dog_death::main()" ); + self setaimanimweights( 0, 0 ); + self endon( "killanimscript" ); + + if ( isdefined( self.a.nodeath ) ) + { + assert( self.a.nodeath, "Nodeath needs to be set to true or undefined." ); + wait 3; + return; + } + + self unlink(); + + if ( isdefined( self.enemy ) && isdefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self ) + self.enemy.syncedmeleetarget = undefined; + + death_anim = "death_" + getanimdirection( self.damageyaw ); +/# + println( death_anim ); +#/ + self animmode( "gravity", 0 ); + debug_anim_print( "dog_death::main() - Setting " + death_anim ); + self setanimstate( death_anim ); + self maps\mp\animscripts\shared::donotetracks( "done" ); +} diff --git a/ZM/Core/maps/mp/animscripts/dog_flashed.gsc b/ZM/Core/maps/mp/animscripts/dog_flashed.gsc new file mode 100644 index 0000000..ed89182 --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/dog_flashed.gsc @@ -0,0 +1,28 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\shared; + +main() +{ + self endon( "killanimscript" ); + self endon( "stop_flashbang_effect" ); + wait( randomfloatrange( 0, 0.4 ) ); + duration = self startflashbanged() * 0.001; + self setanimstate( "flashed" ); + self maps\mp\animscripts\shared::donotetracks( "done" ); + self setflashbanged( 0 ); + self.flashed = 0; + self notify( "stop_flashbang_effect" ); +} + +startflashbanged() +{ + if ( isdefined( self.flashduration ) ) + duration = self.flashduration; + else + duration = self getflashbangedstrength() * 1000; + + self.flashendtime = gettime() + duration; + self notify( "flashed" ); + return duration; +} diff --git a/ZM/Core/maps/mp/animscripts/dog_init.gsc b/ZM/Core/maps/mp/animscripts/dog_init.gsc new file mode 100644 index 0000000..26af7b0 --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/dog_init.gsc @@ -0,0 +1,64 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\dog_move; +#include maps\mp\animscripts\dog_combat; + +main() +{ + level.dog_debug_orient = 0; + level.dog_debug_anims = 0; + level.dog_debug_anims_ent = 0; + level.dog_debug_turns = 0; + debug_anim_print( "dog_init::main() " ); + maps\mp\animscripts\dog_move::setup_sound_variables(); + anim_get_dvar_int( "debug_dog_sound", "0" ); + anim_get_dvar_int( "debug_dog_notetracks", "0" ); + anim_get_dvar_int( "dog_force_walk", 0 ); + anim_get_dvar_int( "dog_force_run", 0 ); + self.ignoresuppression = 1; + self.chatinitialized = 0; + self.nododgemove = 1; + level.dogrunturnspeed = 20; + level.dogrunpainspeed = 20; + self.meleeattackdist = 0; + self thread setmeleeattackdist(); + self.a = spawnstruct(); + self.a.pose = "stand"; + self.a.nextstandinghitdying = 0; + self.a.movement = "run"; + set_anim_playback_rate(); + self.suppressionthreshold = 1; + self.disablearrivals = 0; + level.dogstoppingdistsq = 3416.82; + self.stopanimdistsq = level.dogstoppingdistsq; + self.pathenemyfightdist = 512; + self settalktospecies( "dog" ); + level.lastdogmeleeplayertime = 0; + level.dogmeleeplayercounter = 0; + + if ( !isdefined( level.dog_hits_before_kill ) ) + level.dog_hits_before_kill = 1; +} + +set_anim_playback_rate() +{ + self.animplaybackrate = 0.9 + randomfloat( 0.2 ); + self.moveplaybackrate = 1; +} + +setmeleeattackdist() +{ + self endon( "death" ); + + while ( true ) + { + self.meleeattackdist = 0; + + if ( self maps\mp\animscripts\dog_combat::use_low_attack() ) + self.meleeattackdist = 64; + + wait 1; + } +} diff --git a/ZM/Core/maps/mp/animscripts/dog_jump.gsc b/ZM/Core/maps/mp/animscripts/dog_jump.gsc new file mode 100644 index 0000000..80dd040 --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/dog_jump.gsc @@ -0,0 +1,15 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\shared; + +main() +{ + self endon( "killanimscript" ); + debug_anim_print( "dog_jump::main()" ); + self setaimanimweights( 0, 0 ); + self.safetochangescript = 0; + self setanimstate( "traverse_wallhop" ); + maps\mp\animscripts\shared::donotetracks( "done" ); + self.safetochangescript = 1; +} diff --git a/ZM/Core/maps/mp/animscripts/dog_move.gsc b/ZM/Core/maps/mp/animscripts/dog_move.gsc new file mode 100644 index 0000000..cddef29 --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/dog_move.gsc @@ -0,0 +1,173 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\dog_stop; + +setup_sound_variables() +{ + level.dog_sounds["far"] = spawnstruct(); + level.dog_sounds["close"] = spawnstruct(); + level.dog_sounds["close"].minrange = 0; + level.dog_sounds["close"].maxrange = 500; + level.dog_sounds["close"].sound = "aml_dog_bark_close"; + level.dog_sounds["close"].soundlengthplaceholder = 0.2; + level.dog_sounds["close"].aftersoundwaitmin = 0.1; + level.dog_sounds["close"].aftersoundwaitmax = 0.3; + level.dog_sounds["close"].minrangesqr = level.dog_sounds["close"].minrange * level.dog_sounds["close"].minrange; + level.dog_sounds["close"].maxrangesqr = level.dog_sounds["close"].maxrange * level.dog_sounds["close"].maxrange; + level.dog_sounds["far"].minrange = 500; + level.dog_sounds["far"].maxrange = 0; + level.dog_sounds["far"].sound = "aml_dog_bark"; + level.dog_sounds["far"].soundlengthplaceholder = 0.2; + level.dog_sounds["far"].aftersoundwaitmin = 0.1; + level.dog_sounds["far"].aftersoundwaitmax = 0.3; + level.dog_sounds["far"].minrangesqr = level.dog_sounds["far"].minrange * level.dog_sounds["far"].minrange; + level.dog_sounds["far"].maxrangesqr = level.dog_sounds["far"].maxrange * level.dog_sounds["far"].maxrange; +} + +main() +{ + self endon( "killanimscript" ); + debug_anim_print( "dog_move::main()" ); + self setaimanimweights( 0, 0 ); + do_movement = 1; +/# + if ( !debug_allow_movement() ) + do_movement = 0; +#/ + if ( isdefined( level.hostmigrationtimer ) ) + do_movement = 0; + + if ( !isdefined( self.traversecomplete ) && !isdefined( self.skipstartmove ) && self.a.movement == "run" && do_movement ) + { + self startmove(); + blendtime = 0; + } + else + blendtime = 0.2; + + self.traversecomplete = undefined; + self.skipstartmove = undefined; + + if ( do_movement ) + { + if ( shouldrun() ) + { + debug_anim_print( "dog_move::main() - Setting move_run" ); + self setanimstate( "move_run" ); + maps\mp\animscripts\shared::donotetracksfortime( 0.1, "done" ); + debug_anim_print( "dog_move::main() - move_run wait 0.1 done " ); + } + else + { + debug_anim_print( "dog_move::main() - Setting move_start " ); + self setanimstate( "move_walk" ); + maps\mp\animscripts\shared::donotetracksfortime( 0.1, "done" ); + } + } + + self thread maps\mp\animscripts\dog_stop::lookattarget( "normal" ); + + while ( true ) + { + self moveloop(); + + if ( self.a.movement == "run" ) + { + if ( self.disablearrivals == 0 ) + self thread stopmove(); + + self waittill( "run" ); + } + } +} + +moveloop() +{ + self endon( "killanimscript" ); + self endon( "stop_soon" ); + + while ( true ) + { + do_movement = 1; +/# + if ( !debug_allow_movement() ) + do_movement = 0; +#/ + if ( isdefined( level.hostmigrationtimer ) ) + do_movement = 0; + + if ( !do_movement ) + { + self setaimanimweights( 0, 0 ); + self setanimstate( "stop_idle" ); + maps\mp\animscripts\shared::donotetracks( "done" ); + continue; + } + + if ( self.disablearrivals ) + self.stopanimdistsq = 0; + else + self.stopanimdistsq = level.dogstoppingdistsq; + + if ( shouldrun() ) + { + debug_anim_print( "dog_move::moveLoop() - Setting move_run" ); + self setanimstate( "move_run" ); + maps\mp\animscripts\shared::donotetracksfortime( 0.2, "done" ); + debug_anim_print( "dog_move::moveLoop() - move_run wait 0.2 done " ); + } + else + { + debug_anim_print( "dog_move::moveLoop() - Setting move_walk " ); + self setanimstate( "move_walk" ); + maps\mp\animscripts\shared::donotetracksfortime( 0.2, "done" ); + debug_anim_print( "dog_move::moveLoop() - move_walk wait 0.2 done " ); + } + } +} + +startmove() +{ + debug_anim_print( "dog_move::startMove() - Setting move_start " ); + self setanimstate( "move_start" ); + maps\mp\animscripts\shared::donotetracks( "done" ); + debug_anim_print( "dog_move::startMove() - move_start notify done." ); + self animmode( "none", 0 ); + self set_orient_mode( "face motion" ); +} + +stopmove() +{ + self endon( "killanimscript" ); + self endon( "run" ); + debug_anim_print( "dog_move::stopMove() - Setting move_stop" ); + self setanimstate( "move_stop" ); + maps\mp\animscripts\shared::donotetracks( "done" ); + debug_anim_print( "dog_move::stopMove() - move_stop notify done." ); +} + +shouldrun() +{ +/# + if ( getdvarint( _hash_DFB12081 ) != 0 ) + return true; + else if ( getdvarint( _hash_D5D7999B ) != 0 ) + return false; +#/ + if ( isdefined( self.enemy ) ) + return true; + + if ( self.lookaheaddist <= 90 ) + return false; + + angles = vectortoangles( self.lookaheaddir ); + yaw_desired = absangleclamp180( angles[1] ); + yaw = absangleclamp180( self.angles[1] ); + + if ( abs( yaw_desired - yaw ) >= 8 ) + return false; + + return true; +} diff --git a/ZM/Core/maps/mp/animscripts/dog_pain.gsc b/ZM/Core/maps/mp/animscripts/dog_pain.gsc new file mode 100644 index 0000000..2b6fc2f --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/dog_pain.gsc @@ -0,0 +1,28 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\shared; + +main() +{ + debug_anim_print( "dog_pain::main() " ); + self endon( "killanimscript" ); + self setaimanimweights( 0, 0 ); + + if ( isdefined( self.enemy ) && isdefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self ) + { + self unlink(); + self.enemy.syncedmeleetarget = undefined; + } + + speed = length( self getvelocity() ); + pain_anim = getanimdirection( self.damageyaw ); + + if ( speed > level.dogrunpainspeed ) + pain_anim = "pain_run_" + pain_anim; + else + pain_anim = "pain_" + pain_anim; + + self setanimstate( pain_anim ); + self maps\mp\animscripts\shared::donotetracksfortime( 0.2, "done" ); +} diff --git a/ZM/Core/maps/mp/animscripts/dog_stop.gsc b/ZM/Core/maps/mp/animscripts/dog_stop.gsc new file mode 100644 index 0000000..389cfed --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/dog_stop.gsc @@ -0,0 +1,127 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\utility; + +main() +{ + debug_anim_print( "dog_stop::main()" ); + self endon( "killanimscript" ); + self setaimanimweights( 0, 0 ); + self thread lookattarget( "attackIdle" ); + + while ( true ) + { + if ( shouldattackidle() ) + { + self randomattackidle(); + maps\mp\animscripts\shared::donotetracks( "done" ); + } + else + { + self set_orient_mode( "face current" ); + debug_anim_print( "dog_stop::main() - Setting stop_idle" ); + self notify( "stop tracking" ); + self setaimanimweights( 0, 0 ); + self setanimstate( "stop_idle" ); + maps\mp\animscripts\shared::donotetracks( "done" ); + self thread lookattarget( "attackIdle" ); + } + + debug_anim_print( "dog_stop::main() - stop idle loop notify done." ); + } +} + +isfacingenemy( tolerancecosangle ) +{ + assert( isdefined( self.enemy ) ); + vectoenemy = self.enemy.origin - self.origin; + disttoenemy = length( vectoenemy ); + + if ( disttoenemy < 1 ) + return 1; + + forward = anglestoforward( self.angles ); + val1 = forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1]; + val2 = ( forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1] ) / disttoenemy; + return ( forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1] ) / disttoenemy > tolerancecosangle; +} + +randomattackidle() +{ + if ( isfacingenemy( -0.5 ) ) + self set_orient_mode( "face current" ); + else + self set_orient_mode( "face enemy" ); + + if ( should_growl() ) + { + debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl" ); + self setanimstate( "stop_attackidle_growl" ); + return; + } + + idlechance = 33; + barkchance = 66; + + if ( isdefined( self.mode ) ) + { + if ( self.mode == "growl" ) + { + idlechance = 15; + barkchance = 30; + } + else if ( self.mode == "bark" ) + { + idlechance = 15; + barkchance = 85; + } + } + + rand = randomint( 100 ); + + if ( rand < idlechance ) + { + debug_anim_print( "dog_stop::main() - Setting stop_attackidle" ); + self setanimstate( "stop_attackidle" ); + } + else if ( rand < barkchance ) + { + debug_anim_print( "dog_stop::main() - Setting stop_attackidle_bark " ); + self setanimstate( "stop_attackidle_bark" ); + } + else + { + debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl " ); + self setanimstate( "stop_attackidle_growl" ); + } +} + +shouldattackidle() +{ + return isdefined( self.enemy ) && isalive( self.enemy ) && distancesquared( self.origin, self.enemy.origin ) < 1000000; +} + +should_growl() +{ + if ( isdefined( self.script_growl ) ) + return 1; + + if ( !isalive( self.enemy ) ) + return 1; + + return !self cansee( self.enemy ); +} + +lookattarget( lookposeset ) +{ + self endon( "killanimscript" ); + self endon( "stop tracking" ); + debug_anim_print( "dog_stop::lookAtTarget() - Starting look at " + lookposeset ); + self.rightaimlimit = 90; + self.leftaimlimit = -90; + self.upaimlimit = 45; + self.downaimlimit = -45; + self maps\mp\animscripts\shared::setanimaimweight( 1, 0.2 ); + self maps\mp\animscripts\shared::trackloop(); +} diff --git a/ZM/Core/maps/mp/animscripts/dog_turn.gsc b/ZM/Core/maps/mp/animscripts/dog_turn.gsc new file mode 100644 index 0000000..2c9f1a3 --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/dog_turn.gsc @@ -0,0 +1,123 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\shared; + +main() +{ + self endon( "killanimscript" ); + debug_turn_print( "dog_turn::main()" ); + self setaimanimweights( 0, 0 ); + self.safetochangescript = 0; + deltayaw = self getdeltaturnyaw(); + + if ( need_to_turn_around( deltayaw ) ) + turn_180( deltayaw ); + else + turn_90( deltayaw ); + + move_out_of_turn(); + self.skipstartmove = 1; + self.safetochangescript = 1; +} + +need_to_turn_around( deltayaw ) +{ + angle = getdvarfloat( "dog_turn180_angle" ); + + if ( deltayaw >= angle || deltayaw <= -1 * angle ) + { + debug_turn_print( "dog_turn::need_to_turn_around(): " + deltayaw + " YES" ); + return true; + } + + debug_turn_print( "dog_turn::need_to_turn_around(): " + deltayaw + " NO" ); + return false; +} + +do_turn_anim( stopped_anim, run_anim, wait_time, run_wait_time ) +{ + speed = length( self getvelocity() ); + do_anim = stopped_anim; + + if ( level.dogrunturnspeed < speed ) + { + do_anim = run_anim; + wait_time = run_wait_time; + } + + debug_turn_print( "dog_turn::do_turn_anim() - Setting " + do_anim ); + self setanimstate( do_anim ); + maps\mp\animscripts\shared::donotetracksfortime( run_wait_time, "done" ); + debug_turn_print( "dog_turn::do_turn_anim() - done with " + do_anim + " wait time " + run_wait_time ); +} + +turn_left() +{ + self do_turn_anim( "move_turn_left", "move_run_turn_left", 0.5, 0.5 ); +} + +turn_right() +{ + self do_turn_anim( "move_turn_right", "move_run_turn_right", 0.5, 0.5 ); +} + +turn_180_left() +{ + self do_turn_anim( "move_turn_around_left", "move_run_turn_around_left", 0.5, 0.7 ); +} + +turn_180_right() +{ + self do_turn_anim( "move_turn_around_right", "move_run_turn_around_right", 0.5, 0.7 ); +} + +move_out_of_turn() +{ + if ( self.a.movement == "run" ) + { + debug_turn_print( "dog_turn::move_out_of_turn() - Setting move_run" ); + self setanimstate( "move_run" ); + maps\mp\animscripts\shared::donotetracksfortime( 0.1, "done" ); + debug_turn_print( "dog_turn::move_out_of_turn() - move_run wait 0.1 done " ); + } + else + { + debug_turn_print( "dog_turn::move_out_of_turn() - Setting move_start " ); + self setanimstate( "move_walk" ); + } +} + +turn_90( deltayaw ) +{ + self animmode( "zonly_physics", 0 ); + debug_turn_print( "dog_turn::turn_90() deltaYaw: " + deltayaw ); + + if ( deltayaw > 0 ) + { + debug_turn_print( "dog_turn::turn_90() left", 1 ); + self turn_left(); + } + else + { + debug_turn_print( "dog_turn::turn_90() right", 1 ); + self turn_right(); + } +} + +turn_180( deltayaw ) +{ + self animmode( "zonly_physics", 0 ); + debug_turn_print( "dog_turn::turn_180() deltaYaw: " + deltayaw ); + + if ( deltayaw > 0 ) + { + debug_turn_print( "dog_turn::turn_180() left", 1 ); + self turn_180_left(); + } + else + { + debug_turn_print( "dog_turn::turn_180() right", 1 ); + self turn_180_right(); + } +} diff --git a/ZM/Core/maps/mp/animscripts/shared.gsc b/ZM/Core/maps/mp/animscripts/shared.gsc new file mode 100644 index 0000000..a625d05 --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/shared.gsc @@ -0,0 +1,279 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\animscripts\utility; +#include maps\mp\_utility; + +handledogsoundnotetracks( note ) +{ + if ( note == "sound_dogstep_run_default" ) + return true; + + prefix = getsubstr( note, 0, 5 ); + + if ( prefix != "sound" ) + return false; + + return true; +} + +growling() +{ + return isdefined( self.script_growl ); +} + +handlenotetrack( note, flagname, customfunction, var1 ) +{ +/# + if ( getdvarint( _hash_6EBEB982 ) ) + println( "dog notetrack: " + flagname + " " + note + " " + gettime() ); +#/ + if ( isai( self ) && self.type == "dog" ) + { + if ( handledogsoundnotetracks( note ) ) + return; + } + + switch ( note ) + { + case "undefined": + case "finish": + case "end": + return note; + default: + if ( isdefined( customfunction ) ) + { + if ( !isdefined( var1 ) ) + return [[ customfunction ]]( note ); + else + return [[ customfunction ]]( note, var1 ); + } + + break; + } +} + +donotetracks( flagname, customfunction, var1 ) +{ + for (;;) + { + self waittill( flagname, note ); + + if ( !isdefined( note ) ) + note = "undefined"; + + val = self handlenotetrack( note, flagname, customfunction, var1 ); + + if ( isdefined( val ) ) + return val; + } +} + +donotetracksforeverproc( notetracksfunc, flagname, killstring, customfunction, var1 ) +{ + if ( isdefined( killstring ) ) + self endon( killstring ); + + self endon( "killanimscript" ); + + for (;;) + { + time = gettime(); + returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 ); + timetaken = gettime() - time; + + if ( timetaken < 0.05 ) + { + time = gettime(); + returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 ); + timetaken = gettime() - time; + + if ( timetaken < 0.05 ) + { +/# + println( gettime() + " mapsmpanimscriptsshared::DoNoteTracksForever is trying to cause an infinite loop on anim " + flagname + ", returned " + returnednote + "." ); +#/ + wait( 0.05 - timetaken ); + } + } + } +} + +donotetracksforever( flagname, killstring, customfunction, var1 ) +{ + donotetracksforeverproc( ::donotetracks, flagname, killstring, customfunction, var1 ); +} + +donotetracksfortimeproc( donotetracksforeverfunc, time, flagname, customfunction, ent, var1 ) +{ + ent endon( "stop_notetracks" ); + [[ donotetracksforeverfunc ]]( flagname, undefined, customfunction, var1 ); +} + +donotetracksfortime( time, flagname, customfunction, var1 ) +{ + ent = spawnstruct(); + ent thread donotetracksfortimeendnotify( time ); + donotetracksfortimeproc( ::donotetracksforever, time, flagname, customfunction, ent, var1 ); +} + +donotetracksfortimeendnotify( time ) +{ + wait( time ); + self notify( "stop_notetracks" ); +} + +trackloop() +{ + players = get_players(); + deltachangeperframe = 5; + aimblendtime = 0.05; + prevyawdelta = 0; + prevpitchdelta = 0; + maxyawdeltachange = 5; + maxpitchdeltachange = 5; + pitchadd = 0; + yawadd = 0; + + if ( self.type == "dog" || self.type == "zombie" || self.type == "zombie_dog" ) + { + domaxanglecheck = 0; + self.shootent = self.enemy; + } + else + { + domaxanglecheck = 1; + + if ( self.a.script == "cover_crouch" && isdefined( self.a.covermode ) && self.a.covermode == "lean" ) + pitchadd = -1 * anim.covercrouchleanpitch; + + if ( ( self.a.script == "cover_left" || self.a.script == "cover_right" ) && isdefined( self.a.cornermode ) && self.a.cornermode == "lean" ) + yawadd = self.covernode.angles[1] - self.angles[1]; + } + + yawdelta = 0; + pitchdelta = 0; + firstframe = 1; + + for (;;) + { + incranimaimweight(); + selfshootatpos = ( self.origin[0], self.origin[1], self geteye()[2] ); + shootpos = undefined; + + if ( isdefined( self.enemy ) ) + shootpos = self.enemy getshootatpos(); + + if ( !isdefined( shootpos ) ) + { + yawdelta = 0; + pitchdelta = 0; + } + else + { + vectortoshootpos = shootpos - selfshootatpos; + anglestoshootpos = vectortoangles( vectortoshootpos ); + pitchdelta = 360 - anglestoshootpos[0]; + pitchdelta = angleclamp180( pitchdelta + pitchadd ); + yawdelta = self.angles[1] - anglestoshootpos[1]; + yawdelta = angleclamp180( yawdelta + yawadd ); + } + + if ( domaxanglecheck && ( abs( yawdelta ) > 60 || abs( pitchdelta ) > 60 ) ) + { + yawdelta = 0; + pitchdelta = 0; + } + else + { + if ( yawdelta > self.rightaimlimit ) + yawdelta = self.rightaimlimit; + else if ( yawdelta < self.leftaimlimit ) + yawdelta = self.leftaimlimit; + + if ( pitchdelta > self.upaimlimit ) + pitchdelta = self.upaimlimit; + else if ( pitchdelta < self.downaimlimit ) + pitchdelta = self.downaimlimit; + } + + if ( firstframe ) + firstframe = 0; + else + { + yawdeltachange = yawdelta - prevyawdelta; + + if ( abs( yawdeltachange ) > maxyawdeltachange ) + yawdelta = prevyawdelta + maxyawdeltachange * sign( yawdeltachange ); + + pitchdeltachange = pitchdelta - prevpitchdelta; + + if ( abs( pitchdeltachange ) > maxpitchdeltachange ) + pitchdelta = prevpitchdelta + maxpitchdeltachange * sign( pitchdeltachange ); + } + + prevyawdelta = yawdelta; + prevpitchdelta = pitchdelta; + updown = 0; + leftright = 0; + + if ( yawdelta > 0 ) + { + assert( yawdelta <= self.rightaimlimit ); + weight = yawdelta / self.rightaimlimit * self.a.aimweight; + leftright = weight; + } + else if ( yawdelta < 0 ) + { + assert( yawdelta >= self.leftaimlimit ); + weight = yawdelta / self.leftaimlimit * self.a.aimweight; + leftright = -1 * weight; + } + + if ( pitchdelta > 0 ) + { + assert( pitchdelta <= self.upaimlimit ); + weight = pitchdelta / self.upaimlimit * self.a.aimweight; + updown = weight; + } + else if ( pitchdelta < 0 ) + { + assert( pitchdelta >= self.downaimlimit ); + weight = pitchdelta / self.downaimlimit * self.a.aimweight; + updown = -1 * weight; + } + + self setaimanimweights( updown, leftright ); + wait 0.05; + } +} + +setanimaimweight( goalweight, goaltime ) +{ + if ( !isdefined( goaltime ) || goaltime <= 0 ) + { + self.a.aimweight = goalweight; + self.a.aimweight_start = goalweight; + self.a.aimweight_end = goalweight; + self.a.aimweight_transframes = 0; + } + else + { + self.a.aimweight = goalweight; + self.a.aimweight_start = self.a.aimweight; + self.a.aimweight_end = goalweight; + self.a.aimweight_transframes = int( goaltime * 20 ); + } + + self.a.aimweight_t = 0; +} + +incranimaimweight() +{ + if ( self.a.aimweight_t < self.a.aimweight_transframes ) + { + self.a.aimweight_t++; + t = 1.0 * self.a.aimweight_t / self.a.aimweight_transframes; + self.a.aimweight = self.a.aimweight_start * ( 1 - t ) + self.a.aimweight_end * t; + } +} diff --git a/ZM/Core/maps/mp/animscripts/traverse/shared.gsc b/ZM/Core/maps/mp/animscripts/traverse/shared.gsc new file mode 100644 index 0000000..aab758b --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/traverse/shared.gsc @@ -0,0 +1,195 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\utility; +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\animscripts\shared; + +init_traverse() +{ + point = getent( self.target, "targetname" ); + + if ( isdefined( point ) ) + { + self.traverse_height = point.origin[2]; + point delete(); + } + else + { + point = getstruct( self.target, "targetname" ); + + if ( isdefined( point ) ) + self.traverse_height = point.origin[2]; + } +} + +teleportthread( verticaloffset ) +{ + self endon( "killanimscript" ); + self notify( "endTeleportThread" ); + self endon( "endTeleportThread" ); + reps = 5; + offset = ( 0, 0, verticaloffset / reps ); + + for ( i = 0; i < reps; i++ ) + { + self teleport( self.origin + offset ); + wait 0.05; + } +} + +teleportthreadex( verticaloffset, delay, frames ) +{ + self endon( "killanimscript" ); + self notify( "endTeleportThread" ); + self endon( "endTeleportThread" ); + + if ( verticaloffset == 0 ) + return; + + wait( delay ); + amount = verticaloffset / frames; + + if ( amount > 10.0 ) + amount = 10.0; + else if ( amount < -10.0 ) + amount = -10.0; + + offset = ( 0, 0, amount ); + + for ( i = 0; i < frames; i++ ) + { + self teleport( self.origin + offset ); + wait 0.05; + } +} + +dog_wall_and_window_hop( traversename, height ) +{ + self endon( "killanimscript" ); + self traversemode( "nogravity" ); + self traversemode( "noclip" ); + startnode = self getnegotiationstartnode(); + assert( isdefined( startnode ) ); + self orientmode( "face angle", startnode.angles[1] ); + + if ( isdefined( startnode.traverse_height ) ) + { + realheight = startnode.traverse_height - startnode.origin[2]; + self thread teleportthread( realheight - height ); + } + else if ( height != 36.0 ) + self thread teleportthreadex( height - 36.0, 0.2, 7 ); + + debug_anim_print( "traverse::dog_wall_and_window_hop() - Setting " + traversename ); + self setanimstate( traversename ); + maps\mp\animscripts\shared::donotetracksfortime( 1.0, "done" ); + debug_anim_print( "traverse::dog_wall_and_window_hop() - " + traversename ); + self.traversecomplete = 1; +} + +dog_jump_down( height, frames, time ) +{ + self endon( "killanimscript" ); + self traversemode( "noclip" ); + + if ( !isdefined( time ) ) + time = 0.3; + + startnode = self getnegotiationstartnode(); + assert( isdefined( startnode ) ); + self orientmode( "face angle", startnode.angles[1] ); + + if ( isdefined( startnode.traverse_height ) ) + { + realheight = startnode.traverse_height - startnode.origin[2]; + self thread teleportthread( realheight - height ); + } + else if ( height != 40.0 ) + self thread teleportthreadex( height - 40.0, 0.1, frames ); + + debug_anim_print( "traverse::dog_jump_down() - Setting traverse_jump_down_40" ); + self setanimstate( "traverse_jump_down_40" ); + maps\mp\animscripts\shared::donotetracksfortime( time, "done" ); + debug_anim_print( "traverse::dog_jump_down() - traverse_jump_down_40 " ); + self traversemode( "gravity" ); + self.traversecomplete = 1; +} + +dog_jump_down_far( height, frames, time ) +{ + self endon( "killanimscript" ); + self traversemode( "noclip" ); + + if ( !isdefined( time ) ) + time = 0.3; + + startnode = self getnegotiationstartnode(); + assert( isdefined( startnode ) ); + self orientmode( "face angle", startnode.angles[1] ); + + if ( isdefined( startnode.traverse_height ) ) + { + realheight = startnode.traverse_height - startnode.origin[2]; + self thread teleportthread( realheight - height ); + } + else if ( height != 80.0 ) + self thread teleportthreadex( 80.0 - height, 0.1, frames ); + + debug_anim_print( "traverse::dog_jump_down() - Setting traverse_jump_down_80" ); + self setanimstate( "traverse_jump_down_80" ); + maps\mp\animscripts\shared::donotetracksfortime( time, "done" ); + debug_anim_print( "traverse::dog_jump_down() - traverse_jump_down_80 " ); + self traversemode( "gravity" ); + self.traversecomplete = 1; +} + +dog_jump_up( height, frames ) +{ + self endon( "killanimscript" ); + self traversemode( "noclip" ); + startnode = self getnegotiationstartnode(); + assert( isdefined( startnode ) ); + self orientmode( "face angle", startnode.angles[1] ); + + if ( isdefined( startnode.traverse_height ) ) + { + realheight = startnode.traverse_height - startnode.origin[2]; + self thread teleportthread( realheight - height ); + } + else if ( height != 40.0 ) + self thread teleportthreadex( height - 40.0, 0.2, frames ); + + debug_anim_print( "traverse::dog_jump_up() - Setting traverse_jump_up_40" ); + self setanimstate( "traverse_jump_up_40" ); + maps\mp\animscripts\shared::donotetracksfortime( 0.5, "done" ); + debug_anim_print( "traverse::dog_jump_up() - traverse_jump_up_40 " ); + self traversemode( "gravity" ); + self.traversecomplete = 1; +} + +dog_jump_up_high( height, frames ) +{ + assert( self.type == "dog", "Only dogs can do this traverse currently." ); + self endon( "killanimscript" ); + self traversemode( "nogravity" ); + self traversemode( "noclip" ); + startnode = self getnegotiationstartnode(); + assert( isdefined( startnode ) ); + self orientmode( "face angle", startnode.angles[1] ); + + if ( isdefined( startnode.traverse_height ) ) + { + realheight = startnode.traverse_height - startnode.origin[2]; + self thread teleportthreadex( height - 80, 0.2, frames ); + } + else if ( height != 80.0 ) + self thread teleportthreadex( height - 80.0, 0.2, frames ); + + debug_anim_print( "traverse::dog_jump_up_80() - Setting traverse_jump_up_80" ); + self setanimstate( "traverse_jump_up_80" ); + maps\mp\animscripts\shared::donotetracksfortime( 0.6, "done" ); + debug_anim_print( "traverse::dog_jump_up_80() - traverse_jump_up_80 " ); + self traversemode( "gravity" ); + self.traversecomplete = 1; +} diff --git a/ZM/Core/maps/mp/animscripts/traverse/zm_mantle_over_40.gsc b/ZM/Core/maps/mp/animscripts/traverse/zm_mantle_over_40.gsc new file mode 100644 index 0000000..3a37df9 --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/traverse/zm_mantle_over_40.gsc @@ -0,0 +1,49 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + traversestate = "zm_traverse_barrier"; + traversealias = "barrier_walk"; + + if ( self.has_legs ) + { + switch ( self.zombie_move_speed ) + { + case "walk_slide": + case "walk": + case "low_gravity_walk": + traversealias = "barrier_walk"; + break; + case "run_slide": + case "run": + case "low_gravity_run": + traversealias = "barrier_run"; + break; + case "super_sprint": + case "sprint_slide": + case "sprint": + case "low_gravity_sprint": + traversealias = "barrier_sprint"; + break; + default: + if ( isdefined( level.zm_mantle_over_40_move_speed_override ) ) + traversealias = self [[ level.zm_mantle_over_40_move_speed_override ]](); + else + { +/# + assertmsg( "Zombie '" + self.classname + "' move speed of '" + self.zombie_move_speed + "' is not supported for mantle_over_40." ); +#/ + } + } + } + else + { + traversestate = "zm_traverse_barrier_crawl"; + traversealias = "barrier_crawl"; + } + + self dotraverse( traversestate, traversealias ); +} diff --git a/ZM/Core/maps/mp/animscripts/traverse/zm_shared.gsc b/ZM/Core/maps/mp/animscripts/traverse/zm_shared.gsc new file mode 100644 index 0000000..ee4f15e --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/traverse/zm_shared.gsc @@ -0,0 +1,141 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\utility; +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\animscripts\zm_run; + +init_traverse() +{ + point = getent( self.target, "targetname" ); + + if ( isdefined( point ) ) + { + self.traverse_height = point.origin[2]; + point delete(); + } + else + { + point = getstruct( self.target, "targetname" ); + + if ( isdefined( point ) ) + self.traverse_height = point.origin[2]; + } +} + +teleportthread( verticaloffset ) +{ + self endon( "killanimscript" ); + self notify( "endTeleportThread" ); + self endon( "endTeleportThread" ); + reps = 5; + offset = ( 0, 0, verticaloffset / reps ); + + for ( i = 0; i < reps; i++ ) + { + self teleport( self.origin + offset ); + wait 0.05; + } +} + +teleportthreadex( verticaloffset, delay, frames ) +{ + self endon( "killanimscript" ); + self notify( "endTeleportThread" ); + self endon( "endTeleportThread" ); + + if ( verticaloffset == 0 ) + return; + + wait( delay ); + amount = verticaloffset / frames; + + if ( amount > 10.0 ) + amount = 10.0; + else if ( amount < -10.0 ) + amount = -10.0; + + offset = ( 0, 0, amount ); + + for ( i = 0; i < frames; i++ ) + { + self teleport( self.origin + offset ); + wait 0.05; + } +} + +handletraversealignment() +{ + self traversemode( "nogravity" ); + self traversemode( "noclip" ); + + if ( isdefined( self.traverseheight ) && isdefined( self.traversestartnode.traverse_height ) ) + { + currentheight = self.traversestartnode.traverse_height - self.traversestartz; + self thread teleportthread( currentheight - self.traverseheight ); + } +} + +dosimpletraverse( traversealias, no_powerups, traversestate = "zm_traverse" ) +{ + if ( isdefined( level.ignore_traverse ) ) + { + if ( self [[ level.ignore_traverse ]]() ) + return; + } + + if ( isdefined( level.zm_traversal_override ) ) + traversealias = self [[ level.zm_traversal_override ]]( traversealias ); + + if ( !self.has_legs ) + { + traversestate += "_crawl"; + traversealias += "_crawl"; + } + + self dotraverse( traversestate, traversealias, no_powerups ); +} + +dotraverse( traversestate, traversealias, no_powerups ) +{ + self endon( "killanimscript" ); + self traversemode( "nogravity" ); + self traversemode( "noclip" ); + old_powerups = 0; + + if ( isdefined( no_powerups ) && no_powerups ) + { + old_powerups = self.no_powerups; + self.no_powerups = 1; + } + + self.is_traversing = 1; + self notify( "zombie_start_traverse" ); + self.traversestartnode = self getnegotiationstartnode(); + assert( isdefined( self.traversestartnode ) ); + self orientmode( "face angle", self.traversestartnode.angles[1] ); + self.traversestartz = self.origin[2]; + + if ( isdefined( self.pre_traverse ) ) + self [[ self.pre_traverse ]](); + + self setanimstatefromasd( traversestate, traversealias ); + self maps\mp\animscripts\zm_shared::donotetracks( "traverse_anim" ); + self traversemode( "gravity" ); + self.a.nodeath = 0; + + if ( isdefined( self.post_traverse ) ) + self [[ self.post_traverse ]](); + + self maps\mp\animscripts\zm_run::needsupdate(); + + if ( !self.isdog ) + self maps\mp\animscripts\zm_run::moverun(); + + self.is_traversing = 0; + self notify( "zombie_end_traverse" ); + + if ( isdefined( no_powerups ) && no_powerups ) + self.no_powerups = old_powerups; +} diff --git a/ZM/Core/maps/mp/animscripts/utility.gsc b/ZM/Core/maps/mp/animscripts/utility.gsc new file mode 100644 index 0000000..2ad6122 --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/utility.gsc @@ -0,0 +1,135 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +anim_get_dvar_int( dvar, def ) +{ + return int( anim_get_dvar( dvar, def ) ); +} + +anim_get_dvar( dvar, def ) +{ + if ( getdvar( dvar ) != "" ) + return getdvarfloat( dvar ); + else + { + setdvar( dvar, def ); + return def; + } +} + +set_orient_mode( mode, val1 ) +{ +/# + if ( level.dog_debug_orient == self getentnum() ) + { + if ( isdefined( val1 ) ) + println( "DOG: Setting orient mode: " + mode + " " + val1 + " " + gettime() ); + else + println( "DOG: Setting orient mode: " + mode + " " + gettime() ); + } +#/ + if ( isdefined( val1 ) ) + self orientmode( mode, val1 ); + else + self orientmode( mode ); +} + +debug_anim_print( text ) +{ +/# + if ( level.dog_debug_anims ) + println( text + " " + gettime() ); + + if ( level.dog_debug_anims_ent == self getentnum() ) + println( text + " " + gettime() ); +#/ +} + +debug_turn_print( text, line ) +{ +/# + if ( level.dog_debug_turns == self getentnum() ) + { + duration = 200; + currentyawcolor = ( 1, 1, 1 ); + lookaheadyawcolor = ( 1, 0, 0 ); + desiredyawcolor = ( 1, 1, 0 ); + currentyaw = angleclamp180( self.angles[1] ); + desiredyaw = angleclamp180( self.desiredangle ); + lookaheaddir = self.lookaheaddir; + lookaheadangles = vectortoangles( lookaheaddir ); + lookaheadyaw = angleclamp180( lookaheadangles[1] ); + println( text + " " + gettime() + " cur: " + currentyaw + " look: " + lookaheadyaw + " desired: " + desiredyaw ); + } +#/ +} + +debug_allow_movement() +{ +/# + return anim_get_dvar_int( "debug_dog_allow_movement", "1" ); +#/ + return 1; +} + +debug_allow_combat() +{ +/# + return anim_get_dvar_int( "debug_dog_allow_combat", "1" ); +#/ + return 1; +} + +current_yaw_line_debug( duration ) +{ +/# + currentyawcolor = []; + currentyawcolor[0] = ( 0, 0, 1 ); + currentyawcolor[1] = ( 1, 0, 1 ); + current_color_index = 0; + start_time = gettime(); + + if ( !isdefined( level.lastdebugheight ) ) + level.lastdebugheight = 15; + + while ( gettime() - start_time < 1000 ) + { + pos1 = ( self.origin[0], self.origin[1], self.origin[2] + level.lastdebugheight ); + pos2 = pos1 + vectorscale( anglestoforward( self.angles ), ( current_color_index + 1 ) * 10 ); + line( pos1, pos2, currentyawcolor[current_color_index], 0.3, 1, duration ); + current_color_index = ( current_color_index + 1 ) % currentyawcolor.size; + wait 0.05; + } + + if ( level.lastdebugheight == 15 ) + level.lastdebugheight = 30; + else + level.lastdebugheight = 15; +#/ +} + +getanimdirection( damageyaw ) +{ + if ( damageyaw > 135 || damageyaw <= -135 ) + return "front"; + else if ( damageyaw > 45 && damageyaw <= 135 ) + return "right"; + else if ( damageyaw > -45 && damageyaw <= 45 ) + return "back"; + else + return "left"; + + return "front"; +} + +setfootstepeffect( name, fx ) +{ + assert( isdefined( name ), "Need to define the footstep surface type." ); + assert( isdefined( fx ), "Need to define the mud footstep effect." ); + + if ( !isdefined( anim.optionalstepeffects ) ) + anim.optionalstepeffects = []; + + anim.optionalstepeffects[anim.optionalstepeffects.size] = name; + level._effect["step_" + name] = fx; +} diff --git a/ZM/Core/maps/mp/animscripts/zm_combat.gsc b/ZM/Core/maps/mp/animscripts/zm_combat.gsc new file mode 100644 index 0000000..b1c5934 --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_combat.gsc @@ -0,0 +1,64 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\animscripts\zm_melee; + +main() +{ + self endon( "killanimscript" ); + self endon( "melee" ); + maps\mp\animscripts\zm_utility::initialize( "zombie_combat" ); + self animmode( "zonly_physics", 0 ); + + if ( isdefined( self.combat_animmode ) ) + self [[ self.combat_animmode ]](); + + self orientmode( "face angle", self.angles[1] ); + + for (;;) + { + if ( trymelee() ) + return; + + exposedwait(); + } +} + +exposedwait() +{ + if ( !isdefined( self.can_always_see ) && ( !isdefined( self.enemy ) || !self cansee( self.enemy ) ) ) + { + self endon( "enemy" ); + wait( 0.2 + randomfloat( 0.1 ) ); + } + else if ( !isdefined( self.enemy ) ) + { + self endon( "enemy" ); + wait( 0.2 + randomfloat( 0.1 ) ); + } + else + wait 0.05; +} + +trymelee() +{ + if ( isdefined( self.cant_melee ) && self.cant_melee ) + return false; + + if ( !isdefined( self.enemy ) ) + return false; + + if ( distancesquared( self.origin, self.enemy.origin ) > 262144 ) + return false; + + canmelee = maps\mp\animscripts\zm_melee::canmeleedesperate(); + + if ( !canmelee ) + return false; + + self thread maps\mp\animscripts\zm_melee::meleecombat(); + return true; +} diff --git a/ZM/Core/maps/mp/animscripts/zm_death.gsc b/ZM/Core/maps/mp/animscripts/zm_death.gsc new file mode 100644 index 0000000..e6c07d5 --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_death.gsc @@ -0,0 +1,406 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\_utility; +#include maps\mp\animscripts\zm_shared; + +main() +{ + debug_anim_print( "zm_death::main()" ); + self setaimanimweights( 0, 0 ); + self endon( "killanimscript" ); + + if ( isdefined( self.deathfunction ) ) + { + successful_death = self [[ self.deathfunction ]](); + + if ( !isdefined( successful_death ) || successful_death ) + return; + } + + if ( isdefined( self.a.nodeath ) && self.a.nodeath == 1 ) + { + assert( self.a.nodeath, "Nodeath needs to be set to true or undefined." ); + wait 3; + return; + } + + self unlink(); + + if ( isdefined( self.anchor ) ) + self.anchor delete(); + + if ( isdefined( self.enemy ) && isdefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self ) + self.enemy.syncedmeleetarget = undefined; + + self thread do_gib(); + + if ( isdefined( self.a.gib_ref ) && ( self.a.gib_ref == "no_legs" || self.a.gib_ref == "right_leg" || self.a.gib_ref == "left_leg" ) ) + self.has_legs = 0; + + if ( !isdefined( self.deathanim ) ) + { + self.deathanim = "zm_death"; + self.deathanim_substate = undefined; + } + + self.deathanim = append_missing_legs_suffix( self.deathanim ); + self animmode( "gravity" ); + self setanimstatefromasd( self.deathanim, self.deathanim_substate ); + + if ( !self getanimhasnotetrackfromasd( "start_ragdoll" ) ) + self thread waitforragdoll( self getanimlengthfromasd() * 0.35 ); + + if ( isdefined( self.skip_death_notetracks ) && self.skip_death_notetracks ) + self waittillmatch( "death_anim", "end" ); + else + self maps\mp\animscripts\zm_shared::donotetracks( "death_anim", self.handle_death_notetracks ); +} + +waitforragdoll( time ) +{ + wait( time ); + do_ragdoll = 1; + + if ( isdefined( self.nodeathragdoll ) && self.nodeathragdoll ) + do_ragdoll = 0; + + if ( isdefined( self ) && do_ragdoll ) + self startragdoll(); +} + +on_fire_timeout() +{ + self endon( "death" ); + wait 12; + + if ( isdefined( self ) && isalive( self ) ) + { + self.is_on_fire = 0; + self notify( "stop_flame_damage" ); + } +} + +flame_death_fx() +{ + self endon( "death" ); + + if ( isdefined( self.is_on_fire ) && self.is_on_fire ) + return; + + self.is_on_fire = 1; + self thread on_fire_timeout(); + + if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_torso"] ) ) + { + if ( !self.isdog ) + playfxontag( level._effect["character_fire_death_torso"], self, "J_SpineLower" ); + } + else + { +/# + println( "^3ANIMSCRIPT WARNING: You are missing level._effect[\"character_fire_death_torso\"], please set it in your levelname_fx.gsc. Use \"env/fire/fx_fire_player_torso\"" ); +#/ + } + + if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_sm"] ) ) + { + wait 1; + tagarray = []; + tagarray[0] = "J_Elbow_LE"; + tagarray[1] = "J_Elbow_RI"; + tagarray[2] = "J_Knee_RI"; + tagarray[3] = "J_Knee_LE"; + tagarray = randomize_array( tagarray ); + playfxontag( level._effect["character_fire_death_sm"], self, tagarray[0] ); + wait 1; + tagarray[0] = "J_Wrist_RI"; + tagarray[1] = "J_Wrist_LE"; + + if ( !isdefined( self.a ) || !isdefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" ) + { + tagarray[2] = "J_Ankle_RI"; + tagarray[3] = "J_Ankle_LE"; + } + + tagarray = randomize_array( tagarray ); + playfxontag( level._effect["character_fire_death_sm"], self, tagarray[0] ); + playfxontag( level._effect["character_fire_death_sm"], self, tagarray[1] ); + } + else + { +/# + println( "^3ANIMSCRIPT WARNING: You are missing level._effect[\"character_fire_death_sm\"], please set it in your levelname_fx.gsc. Use \"env/fire/fx_fire_zombie_md\"" ); +#/ + } +} + +randomize_array( array ) +{ + for ( i = 0; i < array.size; i++ ) + { + j = randomint( array.size ); + temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + + return array; +} + +get_tag_for_damage_location() +{ + tag = "J_SpineLower"; + + if ( self.damagelocation == "helmet" ) + tag = "j_head"; + else if ( self.damagelocation == "head" ) + tag = "j_head"; + else if ( self.damagelocation == "neck" ) + tag = "j_neck"; + else if ( self.damagelocation == "torso_upper" ) + tag = "j_spineupper"; + else if ( self.damagelocation == "torso_lower" ) + tag = "j_spinelower"; + else if ( self.damagelocation == "right_arm_upper" ) + tag = "j_elbow_ri"; + else if ( self.damagelocation == "left_arm_upper" ) + tag = "j_elbow_le"; + else if ( self.damagelocation == "right_arm_lower" ) + tag = "j_wrist_ri"; + else if ( self.damagelocation == "left_arm_lower" ) + tag = "j_wrist_le"; + + return tag; +} + +set_last_gib_time() +{ + anim notify( "stop_last_gib_time" ); + anim endon( "stop_last_gib_time" ); + wait 0.05; + anim.lastgibtime = gettime(); + anim.totalgibs = randomintrange( anim.mingibs, anim.maxgibs ); +} + +get_gib_ref( direction ) +{ + if ( isdefined( self.a.gib_ref ) ) + return; + + if ( self.damagetaken < 165 ) + return; + + if ( gettime() > anim.lastgibtime + anim.gibdelay && anim.totalgibs > 0 ) + { + anim.totalgibs--; + anim thread set_last_gib_time(); + refs = []; + + switch ( direction ) + { + case "right": + refs[refs.size] = "left_arm"; + refs[refs.size] = "left_leg"; + gib_ref = get_random( refs ); + break; + case "left": + refs[refs.size] = "right_arm"; + refs[refs.size] = "right_leg"; + gib_ref = get_random( refs ); + break; + case "forward": + refs[refs.size] = "right_arm"; + refs[refs.size] = "left_arm"; + refs[refs.size] = "right_leg"; + refs[refs.size] = "left_leg"; + refs[refs.size] = "guts"; + refs[refs.size] = "no_legs"; + gib_ref = get_random( refs ); + break; + case "back": + refs[refs.size] = "right_arm"; + refs[refs.size] = "left_arm"; + refs[refs.size] = "right_leg"; + refs[refs.size] = "left_leg"; + refs[refs.size] = "no_legs"; + gib_ref = get_random( refs ); + break; + default: + refs[refs.size] = "right_arm"; + refs[refs.size] = "left_arm"; + refs[refs.size] = "right_leg"; + refs[refs.size] = "left_leg"; + refs[refs.size] = "no_legs"; + refs[refs.size] = "guts"; + gib_ref = get_random( refs ); + break; + } + + self.a.gib_ref = gib_ref; + } + else + self.a.gib_ref = undefined; +} + +get_random( array ) +{ + return array[randomint( array.size )]; +} + +do_gib() +{ + if ( !is_mature() ) + return; + + if ( !isdefined( self.a.gib_ref ) ) + return; + + if ( isdefined( self.is_on_fire ) && self.is_on_fire ) + return; + + if ( self is_zombie_gibbed() ) + return; + + self set_zombie_gibbed(); + gib_ref = self.a.gib_ref; + limb_data = get_limb_data( gib_ref ); + + if ( !isdefined( limb_data ) ) + { +/# + println( "^3animscriptszm_death.gsc - limb_data is not setup for gib_ref on model: " + self.model + " and gib_ref of: " + self.a.gib_ref ); +#/ + return; + } + + if ( !( isdefined( self.dont_throw_gib ) && self.dont_throw_gib ) ) + self thread throw_gib( limb_data["spawn_tags_array"] ); + + if ( gib_ref == "head" ) + { + self.hat_gibbed = 1; + self.head_gibbed = 1; + size = self getattachsize(); + + for ( i = 0; i < size; i++ ) + { + model = self getattachmodelname( i ); + + if ( issubstr( model, "head" ) ) + { + if ( isdefined( self.hatmodel ) ) + self detach( self.hatmodel, "" ); + + self detach( model, "" ); + + if ( isdefined( self.torsodmg5 ) ) + self attach( self.torsodmg5, "", 1 ); + + break; + } + } + } + else + { + self setmodel( limb_data["body_model"] ); + self attach( limb_data["legs_model"] ); + } +} + +precache_gib_fx() +{ + anim._effect["animscript_gib_fx"] = loadfx( "weapon/bullet/fx_flesh_gib_fatal_01" ); + anim._effect["animscript_gibtrail_fx"] = loadfx( "trail/fx_trail_blood_streak" ); + anim._effect["death_neckgrab_spurt"] = loadfx( "impacts/fx_flesh_hit_neck_fatal" ); +} + +get_limb_data( gib_ref ) +{ + temp_array = []; + + if ( "right_arm" == gib_ref && isdefined( self.torsodmg2 ) && isdefined( self.legdmg1 ) && isdefined( self.gibspawn1 ) && isdefined( self.gibspawntag1 ) ) + { + temp_array["right_arm"]["body_model"] = self.torsodmg2; + temp_array["right_arm"]["legs_model"] = self.legdmg1; + temp_array["right_arm"]["spawn_tags_array"] = []; + temp_array["right_arm"]["spawn_tags_array"][0] = level._zombie_gib_piece_index_right_arm; + } + + if ( "left_arm" == gib_ref && isdefined( self.torsodmg3 ) && isdefined( self.legdmg1 ) && isdefined( self.gibspawn2 ) && isdefined( self.gibspawntag2 ) ) + { + temp_array["left_arm"]["body_model"] = self.torsodmg3; + temp_array["left_arm"]["legs_model"] = self.legdmg1; + temp_array["left_arm"]["spawn_tags_array"] = []; + temp_array["left_arm"]["spawn_tags_array"][0] = level._zombie_gib_piece_index_left_arm; + } + + if ( "right_leg" == gib_ref && isdefined( self.torsodmg1 ) && isdefined( self.legdmg2 ) && isdefined( self.gibspawn3 ) && isdefined( self.gibspawntag3 ) ) + { + temp_array["right_leg"]["body_model"] = self.torsodmg1; + temp_array["right_leg"]["legs_model"] = self.legdmg2; + temp_array["right_leg"]["spawn_tags_array"] = []; + temp_array["right_leg"]["spawn_tags_array"][0] = level._zombie_gib_piece_index_right_leg; + } + + if ( "left_leg" == gib_ref && isdefined( self.torsodmg1 ) && isdefined( self.legdmg3 ) && isdefined( self.gibspawn4 ) && isdefined( self.gibspawntag4 ) ) + { + temp_array["left_leg"]["body_model"] = self.torsodmg1; + temp_array["left_leg"]["legs_model"] = self.legdmg3; + temp_array["left_leg"]["spawn_tags_array"] = []; + temp_array["left_leg"]["spawn_tags_array"][0] = level._zombie_gib_piece_index_left_leg; + } + + if ( "no_legs" == gib_ref && isdefined( self.torsodmg1 ) && isdefined( self.legdmg4 ) && isdefined( self.gibspawn4 ) && isdefined( self.gibspawn3 ) && isdefined( self.gibspawntag3 ) && isdefined( self.gibspawntag4 ) ) + { + temp_array["no_legs"]["body_model"] = self.torsodmg1; + temp_array["no_legs"]["legs_model"] = self.legdmg4; + temp_array["no_legs"]["spawn_tags_array"] = []; + temp_array["no_legs"]["spawn_tags_array"][0] = level._zombie_gib_piece_index_right_leg; + temp_array["no_legs"]["spawn_tags_array"][1] = level._zombie_gib_piece_index_left_leg; + } + + if ( "guts" == gib_ref && isdefined( self.torsodmg4 ) && isdefined( self.legdmg1 ) ) + { + temp_array["guts"]["body_model"] = self.torsodmg4; + temp_array["guts"]["legs_model"] = self.legdmg1; + temp_array["guts"]["spawn_tags_array"] = []; + temp_array["guts"]["spawn_tags_array"][0] = level._zombie_gib_piece_index_guts; + + if ( isdefined( self.gibspawn2 ) && isdefined( self.gibspawntag2 ) ) + temp_array["guts"]["spawn_tags_array"][1] = level._zombie_gib_piece_index_left_arm; + } + + if ( "head" == gib_ref && isdefined( self.torsodmg5 ) && isdefined( self.legdmg1 ) ) + { + temp_array["head"]["body_model"] = self.torsodmg5; + temp_array["head"]["legs_model"] = self.legdmg1; + temp_array["head"]["spawn_tags_array"] = []; + temp_array["head"]["spawn_tags_array"][0] = level._zombie_gib_piece_index_head; + + if ( !( isdefined( self.hat_gibbed ) && self.hat_gibbed ) && isdefined( self.gibspawn5 ) && isdefined( self.gibspawntag5 ) ) + temp_array["head"]["spawn_tags_array"][1] = level._zombie_gib_piece_index_hat; + } + + if ( isdefined( temp_array[gib_ref] ) ) + return temp_array[gib_ref]; + else + return undefined; +} + +throw_gib( limb_tags_array ) +{ + if ( isdefined( limb_tags_array ) ) + { + if ( isdefined( level.track_gibs ) ) + level [[ level.track_gibs ]]( self, limb_tags_array ); + + if ( isdefined( self.launch_gib_up ) ) + self gib( "up", limb_tags_array ); + else + self gib( "normal", limb_tags_array ); + } +} diff --git a/ZM/Core/maps/mp/animscripts/zm_dog_combat.gsc b/ZM/Core/maps/mp/animscripts/zm_dog_combat.gsc new file mode 100644 index 0000000..0f0ad6f --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_dog_combat.gsc @@ -0,0 +1,492 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\animscripts\dog_stop; + +main() +{ + debug_anim_print( "dog_combat::main() " ); + self endon( "killanimscript" ); + self setaimanimweights( 0, 0 ); +/# + if ( !debug_allow_combat() ) + { + combatidle(); + return; + } +#/ + if ( isdefined( level.hostmigrationtimer ) ) + { + combatidle(); + return; + } + + assert( isdefined( self.enemy ) ); + + if ( !isalive( self.enemy ) ) + { + combatidle(); + return; + } + + if ( isplayer( self.enemy ) ) + self meleebiteattackplayer( self.enemy ); +} + +combatidle() +{ + self set_orient_mode( "face enemy" ); + self animmode( "zonly_physics" ); + idleanim = "zm_combat_attackidle"; + debug_anim_print( "dog_combat::combatIdle() - Setting " + idleanim ); + self setanimstatefromasd( idleanim ); + maps\mp\animscripts\zm_shared::donotetracks( "attack_combat" ); + debug_anim_print( "dog_combat::combatIdle() - " + idleanim + " notify done." ); +} + +shouldwaitincombatidle() +{ + if ( isdefined( level.hostmigrationtimer ) ) + return 1; + + assert( isdefined( self.enemy ) && isalive( self.enemy ) ); + return isdefined( self.enemy.dogattackallowtime ) && gettime() < self.enemy.dogattackallowtime; +} + +setnextdogattackallowtime( time ) +{ + self.dogattackallowtime = gettime() + time; +} + +meleebiteattackplayer( player ) +{ + self animmode( "gravity", 0 ); + self.safetochangescript = 0; + prepareattackplayer( player ); + attack_time = 1.2 + randomfloat( 0.4 ); + debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_run_attack" ); + self setanimstatefromasd( "zm_combat_attackidle" ); + maps\mp\animscripts\zm_shared::donotetracksfortime( attack_time, "attack_combat", ::handlemeleebiteattacknotetracks, player ); + debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - combat_attack_run notify done." ); + self.safetochangescript = 1; + self animmode( "none", 0 ); +} + +meleebiteattackplayer2( player ) +{ + attackrangebuffer = 30; + + for (;;) + { + if ( !isalive( self.enemy ) ) + break; + + meleerange = self.meleeattackdist + attackrangebuffer; + + if ( isdefined( player.syncedmeleetarget ) && player.syncedmeleetarget != self ) + { + if ( checkendcombat( meleerange ) ) + break; + else + { + combatidle(); + continue; + } + } + + if ( self shouldwaitincombatidle() ) + { + combatidle(); + continue; + } + + self set_orient_mode( "face enemy" ); + self animmode( "gravity" ); + self.safetochangescript = 0; +/# + if ( getdvarint( _hash_7B06BF0D ) ) + iprintln( "dog " + self getentnum() + " attack player " + gettime() ); +#/ + player setnextdogattackallowtime( 200 ); + + if ( dog_cant_kill_in_one_hit( player ) ) + { + level.lastdogmeleeplayertime = gettime(); + level.dogmeleeplayercounter++; + + if ( use_low_attack() ) + { + self animmode( "angle deltas" ); + self setanimstatefromasd( "zm_combat_attack_player_close_range" ); + domeleeafterwait( 0.1 ); + maps\mp\animscripts\zm_shared::donotetracksfortime( 1.4, "attack_combat" ); + self animmode( "gravity" ); + } + else + { + attack_time = 1.2 + randomfloat( 0.4 ); + debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_run_attack" ); + self setanimstatefromasd( "zm_combat_attackidle" ); + domeleeafterwait( 0.1 ); + maps\mp\animscripts\zm_shared::donotetracksfortime( attack_time, "attack_combat", ::handlemeleebiteattacknotetracks, player ); + debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - combat_attack_run notify done." ); + } + } + else + { + self thread dog_melee_death( player ); + player.attacked_by_dog = 1; + self thread clear_player_attacked_by_dog_on_death( player ); + debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_attack_player" ); + self setanimstate( "combat_attack_player" ); + self maps\mp\animscripts\shared::donotetracks( "done", ::handlemeleefinishattacknotetracks, player ); + debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - combat_attack_player notify done." ); + self notify( "dog_no_longer_melee_able" ); + self setcandamage( 1 ); + self unlink(); + } + + self.safetochangescript = 1; + + if ( checkendcombat( meleerange ) ) + break; + } + + self.safetochangescript = 1; + self animmode( "none" ); +} + +domeleeafterwait( time ) +{ + self endon( "death" ); + wait( time ); + hitent = self melee(); + + if ( isdefined( hitent ) ) + { + if ( isplayer( hitent ) ) + hitent shellshock( "dog_bite", 1 ); + } +} + +handlemeleebiteattacknotetracks2( note, player ) +{ + if ( note == "dog_melee" ) + self melee( anglestoforward( self.angles ) ); +} + +handlemeleebiteattacknotetracks( note, player ) +{ + switch ( note ) + { + case "dog_melee": + if ( !isdefined( level.dogmeleebiteattacktime ) ) + { + level.dogmeleebiteattacktime = gettime() - level.dogmeleebiteattacktimestart; + level.dogmeleebiteattacktime += 50; + } + + hitent = self melee( anglestoforward( self.angles ) ); + + if ( isdefined( hitent ) ) + { + if ( isplayer( hitent ) ) + hitent shellshock( "dog_bite", 1 ); + } + else if ( isdefined( level.dog_melee_miss ) ) + self [[ level.dog_melee_miss ]]( player ); + + break; + case "stop_tracking": + melee_time = 200; + + if ( !isdefined( level.dogmeleebiteattacktime ) ) + level.dogmeleebiteattacktimestart = gettime(); + else + melee_time = level.dogmeleebiteattacktime; + + self thread orienttoplayerdeadreckoning( player, melee_time ); + break; + } +} + +handlemeleefinishattacknotetracks( note, player ) +{ + switch ( note ) + { + case "dog_melee": + if ( !isdefined( level.dogmeleefinishattacktime ) ) + { + level.dogmeleefinishattacktime = gettime() - level.dogmeleefinishattacktimestart; + level.dogmeleefinishattacktime += 50; + } + + hitent = self melee( anglestoforward( self.angles ) ); + + if ( isdefined( hitent ) && isalive( player ) ) + { + if ( hitent == player ) + break; + } + else + { + attackmiss(); + return 1; + } + + break; + case "dog_early": + self notify( "dog_early_notetrack" ); + debug_anim_print( "dog_combat::handleMeleeFinishAttackNoteTracks() - Setting combat_attack_player_early" ); + self setanimstate( "combat_attack_player_early" ); + break; + case "dog_lunge": + thread set_melee_timer( player ); + debug_anim_print( "dog_combat::handleMeleeFinishAttackNoteTracks() - Setting combat_attack_player_lunge" ); + self setanimstate( "combat_attack_player_lunge" ); + break; + case "dogbite_damage": + self thread killplayer( player ); + break; + case "stop_tracking": + melee_time = 200; + + if ( !isdefined( level.dogmeleefinishattacktime ) ) + level.dogmeleefinishattacktimestart = gettime(); + else + melee_time = level.dogmeleefinishattacktime; + + self thread orienttoplayerdeadreckoning( player, melee_time ); + break; + } +} + +orienttoplayerdeadreckoning( player, time_till_bite ) +{ + enemy_attack_current_origin = player.origin; + enemy_attack_current_time = gettime(); + enemy_motion_time_delta = enemy_attack_current_time - self.enemy_attack_start_time; + enemy_motion_direction = enemy_attack_current_origin - self.enemy_attack_start_origin; + + if ( enemy_motion_time_delta == 0 ) + enemy_predicted_position = player.origin; + else + { + enemy_velocity = enemy_motion_direction / enemy_motion_time_delta; + enemy_predicted_position = player.origin + enemy_velocity * time_till_bite; + } + + self set_orient_mode( "face point", enemy_predicted_position ); +} + +checkendcombat( meleerange ) +{ + if ( !isdefined( self.enemy ) ) + return 0; + + disttotargetsq = distancesquared( self.origin, self.enemy.origin ); + return disttotargetsq > meleerange * meleerange; +} + +use_low_attack( player ) +{ + height_diff = self.enemy_attack_start_origin[2] - self.origin[2]; + low_enough = 30.0; + + if ( height_diff < low_enough && self.enemy_attack_start_stance == "prone" ) + return true; + + melee_origin = ( self.origin[0], self.origin[1], self.origin[2] + 65 ); + enemy_origin = ( self.enemy.origin[0], self.enemy.origin[1], self.enemy.origin[2] + 32 ); + + if ( !bullettracepassed( melee_origin, enemy_origin, 0, self ) ) + return true; + + return false; +} + +prepareattackplayer( player ) +{ + level.dog_death_quote = &"SCRIPT_PLATFORM_DOG_DEATH_DO_NOTHING"; + distancetotarget = distance( self.origin, self.enemy.origin ); + targetheight = abs( self.enemy.origin[2] - self.origin[2] ); + self.enemy_attack_start_distance = distancetotarget; + self.enemy_attack_start_origin = player.origin; + self.enemy_attack_start_time = gettime(); + self.enemy_attack_start_stance = player getstance(); +} + +attackteleportthread( offset ) +{ + self endon( "death" ); + self endon( "killanimscript" ); + reps = 5; + increment = ( offset[0] / reps, offset[1] / reps, offset[2] / reps ); + + for ( i = 0; i < reps; i++ ) + { + self teleport( self.origin + increment ); + wait 0.05; + } +} + +player_attacked() +{ + return isalive( self ) && self meleebuttonpressed(); +} + +set_melee_timer( player ) +{ + wait 0.15; + self.melee_able_timer = gettime(); +} + +clear_player_attacked_by_dog_on_death( player ) +{ + self waittill( "death" ); + + player.attacked_by_dog = undefined; +} + +dog_cant_kill_in_one_hit( player ) +{ + return 1; + + if ( isdefined( player.dogs_dont_instant_kill ) ) + { + assert( player.dogs_dont_instant_kill, "Dont set player.dogs_dont_instant_kill to false, set to undefined" ); + return 1; + } + + if ( gettime() - level.lastdogmeleeplayertime > 8000 ) + level.dogmeleeplayercounter = 0; + + return level.dogmeleeplayercounter < level.dog_hits_before_kill && player.health > 25; +} + +dog_melee_death( player ) +{ + self endon( "killanimscript" ); + self endon( "dog_no_longer_melee_able" ); + pressed = 0; + press_time = anim.dog_presstime; + + self waittill( "dog_early_notetrack" ); + + while ( player player_attacked() ) + wait 0.05; + + for (;;) + { + if ( !pressed ) + { + if ( player player_attacked() ) + { + pressed = 1; + + if ( isdefined( self.melee_able_timer ) && isalive( player ) ) + { + if ( gettime() - self.melee_able_timer <= press_time ) + { + player.player_view.custom_dog_save = "neck_snap"; + self notify( "melee_stop" ); + debug_anim_print( "dog_combat::dog_melee_death() - Setting combat_player_neck_snap" ); + self setanimstate( "combat_player_neck_snap" ); + + self waittillmatch( "done", "dog_death" ); + + debug_anim_print( "dog_combat::dog_melee_death() - combat_player_neck_snap notify done." ); + self playsound( "aml_dog_neckbreak" ); + self setcandamage( 1 ); + self.a.nodeath = 1; + dif = player.origin - self.origin; + dif = ( dif[0], dif[1], 0 ); + self dodamage( self.health + 503, self geteye() - dif, player ); + self notify( "killanimscript" ); + } + else + { + debug_anim_print( "dog_combat::dog_melee_death() - Setting combat_player_neck_snap" ); + self setanimstate( "combat_attack_player" ); + level.dog_death_quote = &"SCRIPT_PLATFORM_DOG_DEATH_TOO_LATE"; + } + + return; + } + + level.dog_death_quote = &"SCRIPT_PLATFORM_DOG_DEATH_TOO_SOON"; + debug_anim_print( "dog_combat::dog_melee_death() - Setting combat_player_neck_miss" ); + self setanimstate( "combat_player_neck_miss" ); + return; + } + } + else if ( !player player_attacked() ) + pressed = 0; + + wait 0.05; + } +} + +attackmiss() +{ + if ( isdefined( self.enemy ) ) + { + forward = anglestoforward( self.angles ); + dirtoenemy = self.enemy.origin - self.origin + vectorscale( forward, 50 ); + + if ( vectordot( dirtoenemy, forward ) > 0 ) + { + debug_anim_print( "dog_combat::attackMiss() - Setting combat_attack_miss" ); + self setanimstate( "combat_attack_miss" ); + self thread maps\mp\animscripts\dog_stop::lookattarget( "normal" ); + } + else + { + self.skipstartmove = 1; + self thread attackmisstracktargetthread(); + + if ( dirtoenemy[0] * forward[1] - dirtoenemy[1] * forward[0] > 0 ) + { + debug_anim_print( "dog_combat::attackMiss() - Setting combat_attack_miss_right" ); + self setanimstate( "combat_attack_miss_right" ); + } + else + { + debug_anim_print( "dog_combat::attackMiss() - Setting combat_attack_miss_left" ); + self setanimstate( "combat_attack_miss_left" ); + } + } + } + else + { + debug_anim_print( "dog_combat::attackMiss() - Setting combat_attack_miss" ); + self setanimstate( "combat_attack_miss" ); + } + + self maps\mp\animscripts\shared::donotetracks( "done" ); + debug_anim_print( "dog_combat::attackMiss() - attackMiss notify done." ); + self notify( "stop tracking" ); + debug_anim_print( "dog_combat::attackMiss() - Stopped tracking" ); +} + +attackmisstracktargetthread() +{ + self endon( "killanimscript" ); + wait 0.6; + self set_orient_mode( "face enemy" ); +} + +killplayer( player ) +{ + self endon( "pvd_melee_interrupted" ); + player.specialdeath = 1; + player setcandamage( 1 ); + wait 1; + damage = player.health + 1; + + if ( !isalive( player ) ) + return; +} diff --git a/ZM/Core/maps/mp/animscripts/zm_dog_death.gsc b/ZM/Core/maps/mp/animscripts/zm_dog_death.gsc new file mode 100644 index 0000000..39036e8 --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_dog_death.gsc @@ -0,0 +1,32 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\zm_shared; + +main() +{ + debug_anim_print( "dog_death::main()" ); + self setaimanimweights( 0, 0 ); + self endon( "killanimscript" ); + + if ( isdefined( self.a.nodeath ) ) + { + assert( self.a.nodeath, "Nodeath needs to be set to true or undefined." ); + wait 3; + return; + } + + self unlink(); + + if ( isdefined( self.enemy ) && isdefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self ) + self.enemy.syncedmeleetarget = undefined; + + death_anim = "death_" + getanimdirection( self.damageyaw ); +/# + println( death_anim ); +#/ + self animmode( "gravity" ); + debug_anim_print( "dog_death::main() - Setting " + death_anim ); + self setanimstatefromasd( death_anim ); + maps\mp\animscripts\zm_shared::donotetracks( "dead_dog" ); +} diff --git a/ZM/Core/maps/mp/animscripts/zm_dog_flashed.gsc b/ZM/Core/maps/mp/animscripts/zm_dog_flashed.gsc new file mode 100644 index 0000000..0b904a3 --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_dog_flashed.gsc @@ -0,0 +1,8 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self endon( "killanimscript" ); + self endon( "stop_flashbang_effect" ); +} diff --git a/ZM/Core/maps/mp/animscripts/zm_dog_init.gsc b/ZM/Core/maps/mp/animscripts/zm_dog_init.gsc new file mode 100644 index 0000000..28ba909 --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_dog_init.gsc @@ -0,0 +1,59 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\dog_move; + +main() +{ + level.dog_debug_orient = 0; + level.dog_debug_anims = 0; + level.dog_debug_anims_ent = 0; + level.dog_debug_turns = 0; + debug_anim_print( "dog_init::main() " ); + maps\mp\animscripts\dog_move::setup_sound_variables(); + anim_get_dvar_int( "debug_dog_sound", "0" ); + anim_get_dvar_int( "debug_dog_notetracks", "0" ); + self.ignoresuppression = 1; + self.chatinitialized = 0; + self.nododgemove = 1; + level.dogattackplayerdist = 102; + level.dogattackplayercloserangedist = 102; + level.dogrunturnspeed = 20; + level.dogrunpainspeed = 20; + self.meleeattackdist = 0; + self thread setmeleeattackdist(); + self.a = spawnstruct(); + self.a.pose = "stand"; + self.a.nextstandinghitdying = 0; + self.a.movement = "walk"; + self.suppressionthreshold = 1; + self.disablearrivals = 0; + level.dogstoppingdistsq = 3416.82; + self.stopanimdistsq = level.dogstoppingdistsq; + self.pathenemyfightdist = 512; + self settalktospecies( "zombiedog" ); + level.lastdogmeleeplayertime = 0; + level.dogmeleeplayercounter = 0; + + if ( !isdefined( level.dog_hits_before_kill ) ) + level.dog_hits_before_kill = 1; +} + +setmeleeattackdist() +{ + self endon( "death" ); + + while ( true ) + { + if ( isdefined( self.enemy ) ) + { + if ( isplayer( self.enemy ) ) + self.meleeattackdist = 64; + else + self.meleeattackdist = 102; + } + + wait 1; + } +} diff --git a/ZM/Core/maps/mp/animscripts/zm_dog_jump.gsc b/ZM/Core/maps/mp/animscripts/zm_dog_jump.gsc new file mode 100644 index 0000000..e990e6a --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_dog_jump.gsc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\zm_shared; + +main() +{ + self endon( "killanimscript" ); + debug_anim_print( "dog_jump::main()" ); + self setaimanimweights( 0, 0 ); + self.safetochangescript = 0; + self setanimstatefromasd( "zm_traverse_wallhop" ); + maps\mp\animscripts\zm_shared::donotetracks( "traverse_wallhop" ); + self.safetochangescript = 1; +} diff --git a/ZM/Core/maps/mp/animscripts/zm_dog_move.gsc b/ZM/Core/maps/mp/animscripts/zm_dog_move.gsc new file mode 100644 index 0000000..2600803 --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_dog_move.gsc @@ -0,0 +1,247 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\animscripts\dog_stop; +#include maps\mp\animscripts\zm_utility; + +setup_sound_variables() +{ + level.dog_sounds["far"] = spawnstruct(); + level.dog_sounds["close"] = spawnstruct(); + level.dog_sounds["close"].minrange = 0; + level.dog_sounds["close"].maxrange = 500; + level.dog_sounds["close"].sound = "aml_dog_bark_close"; + level.dog_sounds["close"].soundlengthplaceholder = 0.2; + level.dog_sounds["close"].aftersoundwaitmin = 0.1; + level.dog_sounds["close"].aftersoundwaitmax = 0.3; + level.dog_sounds["close"].minrangesqr = level.dog_sounds["close"].minrange * level.dog_sounds["close"].minrange; + level.dog_sounds["close"].maxrangesqr = level.dog_sounds["close"].maxrange * level.dog_sounds["close"].maxrange; + level.dog_sounds["far"].minrange = 500; + level.dog_sounds["far"].maxrange = 0; + level.dog_sounds["far"].sound = "aml_dog_bark"; + level.dog_sounds["far"].soundlengthplaceholder = 0.2; + level.dog_sounds["far"].aftersoundwaitmin = 0.1; + level.dog_sounds["far"].aftersoundwaitmax = 0.3; + level.dog_sounds["far"].minrangesqr = level.dog_sounds["far"].minrange * level.dog_sounds["far"].minrange; + level.dog_sounds["far"].maxrangesqr = level.dog_sounds["far"].maxrange * level.dog_sounds["far"].maxrange; +} + +main() +{ + self endon( "killanimscript" ); + debug_anim_print( "dog_move::main()" ); + self setaimanimweights( 0, 0 ); + do_movement = 1; +/# + if ( !debug_allow_movement() ) + do_movement = 0; +#/ + if ( isdefined( level.hostmigrationtimer ) ) + do_movement = 0; + + if ( !isdefined( self.traversecomplete ) && !isdefined( self.skipstartmove ) && self.a.movement == "run" && do_movement ) + { + self startmove(); + blendtime = 0; + } + else + blendtime = 0.2; + + self.traversecomplete = undefined; + self.skipstartmove = undefined; + + if ( do_movement ) + { + if ( self.a.movement == "run" ) + { + debug_anim_print( "dog_move::main() - Setting move_run" ); + self setanimstatefromasd( "zm_move_run" ); + maps\mp\animscripts\zm_shared::donotetracksfortime( 0.1, "move_run" ); + debug_anim_print( "dog_move::main() - move_run wait 0.1 done " ); + } + else + { + debug_anim_print( "dog_move::main() - Setting move_start " ); + self setanimstatefromasd( "zm_move_walk" ); + maps\mp\animscripts\zm_shared::donotetracks( "move_walk" ); + } + } + + self thread maps\mp\animscripts\dog_stop::lookattarget( "normal" ); + + while ( true ) + { + self moveloop(); + + if ( self.a.movement == "run" ) + { + if ( self.disablearrivals == 0 ) + self thread stopmove(); + + self waittill( "run" ); + } + } +} + +moveloop() +{ + self endon( "killanimscript" ); + self endon( "stop_soon" ); + + while ( true ) + { + do_movement = 1; +/# + if ( !debug_allow_movement() ) + do_movement = 0; +#/ + if ( isdefined( level.hostmigrationtimer ) ) + do_movement = 0; + + if ( !do_movement ) + { + self setaimanimweights( 0, 0 ); + self setanimstatefromasd( "zm_stop_idle" ); + maps\mp\animscripts\zm_shared::donotetracks( "stop_idle" ); + continue; + } + + if ( self.disablearrivals ) + self.stopanimdistsq = 0; + else + self.stopanimdistsq = level.dogstoppingdistsq; + + if ( self.a.movement == "run" ) + { + debug_anim_print( "dog_move::moveLoop() - Setting move_run" ); + self setanimstatefromasd( "zm_move_run" ); + maps\mp\animscripts\zm_shared::donotetracksfortime( 0.2, "move_run" ); + debug_anim_print( "dog_move::moveLoop() - move_run wait 0.2 done " ); + } + else + { + assert( self.a.movement == "walk" ); + debug_anim_print( "dog_move::moveLoop() - Setting move_walk " ); + self setanimstatefromasd( "zm_move_walk" ); + maps\mp\animscripts\zm_shared::donotetracksfortime( 0.1, "move_walk" ); + + if ( self need_to_run() ) + { + self.a.movement = "run"; + self notify( "dog_running" ); + } + + debug_anim_print( "dog_move::moveLoop() - move_walk wait 0.2 done " ); + } + } +} + +startmovetracklookahead() +{ + self endon( "killanimscript" ); + + for ( i = 0; i < 2; i++ ) + { + lookaheadangle = vectortoangles( self.lookaheaddir ); + self set_orient_mode( "face angle", lookaheadangle ); + } +} + +startmove() +{ + debug_anim_print( "dog_move::startMove() - Setting move_start " ); + self setanimstatefromasd( "zm_move_start" ); + maps\mp\animscripts\zm_shared::donotetracks( "move_start" ); + debug_anim_print( "dog_move::startMove() - move_start notify done." ); + self animmode( "none" ); + self set_orient_mode( "face motion" ); +} + +stopmove() +{ + self endon( "killanimscript" ); + self endon( "run" ); + debug_anim_print( "dog_move::stopMove() - Setting move_stop" ); + self setanimstatefromasd( "zm_move_stop" ); + maps\mp\animscripts\zm_shared::donotetracks( "move_stop" ); + debug_anim_print( "dog_move::stopMove() - move_stop notify done." ); +} + +getenemydistancesqr() +{ + if ( isdefined( self.enemy ) ) + return distancesquared( self.origin, self.enemy.origin ); + + return 100000000; +} + +getsoundkey( distancesqr ) +{ + keys = getarraykeys( level.dog_sounds ); + + for ( i = 0; i < keys.size; i++ ) + { + sound_set = level.dog_sounds[keys[i]]; + + if ( sound_set.minrangesqr > distancesqr ) + continue; + + if ( sound_set.maxrangesqr && sound_set.maxrangesqr < distancesqr ) + continue; + + return keys[i]; + } + + return keys[keys.size - 1]; +} + +need_to_run() +{ + run_dist_squared = 147456; + + if ( getdvar( _hash_C7E63BA4 ) != "" ) + { + dist = getdvarint( _hash_C7E63BA4 ); + run_dist_squared = dist * dist; + } + + run_yaw = 20; + run_pitch = 30; + run_height = 64; + + if ( self.a.movement != "walk" ) + return false; + + if ( self.health < self.maxhealth ) + return true; + + if ( !isdefined( self.enemy ) || !isalive( self.enemy ) ) + return false; + + if ( !self cansee( self.enemy ) ) + return false; + + dist = distancesquared( self.origin, self.enemy.origin ); + + if ( dist > run_dist_squared ) + return false; + + height = self.origin[2] - self.enemy.origin[2]; + + if ( abs( height ) > run_height ) + return false; + + yaw = self maps\mp\animscripts\zm_utility::absyawtoenemy(); + + if ( yaw > run_yaw ) + return false; + + pitch = angleclamp180( vectortoangles( self.origin - self.enemy.origin )[0] ); + + if ( abs( pitch ) > run_pitch ) + return false; + + return true; +} diff --git a/ZM/Core/maps/mp/animscripts/zm_dog_pain.gsc b/ZM/Core/maps/mp/animscripts/zm_dog_pain.gsc new file mode 100644 index 0000000..3c3b7e8 --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_dog_pain.gsc @@ -0,0 +1,10 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\utility; + +main() +{ + debug_anim_print( "dog_pain::main() " ); + self endon( "killanimscript" ); + self setaimanimweights( 0, 0 ); +} diff --git a/ZM/Core/maps/mp/animscripts/zm_dog_stop.gsc b/ZM/Core/maps/mp/animscripts/zm_dog_stop.gsc new file mode 100644 index 0000000..99f2d2f --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_dog_stop.gsc @@ -0,0 +1,143 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\zm_shared; + +main() +{ + debug_anim_print( "dog_stop::main()" ); + self endon( "killanimscript" ); + self setaimanimweights( 0, 0 ); + self thread lookattarget( "attackIdle" ); + + while ( true ) + { + if ( shouldattackidle() ) + { + self randomattackidle(); + maps\mp\animscripts\zm_shared::donotetracks( "attack_idle", ::dogidlenotetracks ); + } + else + { + self set_orient_mode( "face current" ); + debug_anim_print( "dog_stop::main() - Setting stop_idle" ); + self notify( "stop tracking" ); + self setaimanimweights( 0, 0 ); + self setanimstatefromasd( "zm_stop_idle" ); + maps\mp\animscripts\zm_shared::donotetracksfortime( 0.2, "stop_idle", ::dogidlenotetracks ); + self thread lookattarget( "attackIdle" ); + } + + debug_anim_print( "dog_stop::main() - stop idle loop notify done." ); + } +} + +dogidlenotetracks( note ) +{ + if ( note == "breathe_fire" ) + { + if ( isdefined( level._effect["dog_breath"] ) ) + { + self.breath_fx = spawn( "script_model", self gettagorigin( "TAG_MOUTH_FX" ) ); + self.breath_fx.angles = self gettagangles( "TAG_MOUTH_FX" ); + self.breath_fx setmodel( "tag_origin" ); + self.breath_fx linkto( self, "TAG_MOUTH_FX" ); + playfxontag( level._effect["dog_breath"], self.breath_fx, "tag_origin" ); + } + } +} + +isfacingenemy( tolerancecosangle ) +{ + assert( isdefined( self.enemy ) ); + vectoenemy = self.enemy.origin - self.origin; + disttoenemy = length( vectoenemy ); + + if ( disttoenemy < 1 ) + return 1; + + forward = anglestoforward( self.angles ); + val1 = forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1]; + val2 = ( forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1] ) / disttoenemy; + return ( forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1] ) / disttoenemy > tolerancecosangle; +} + +randomattackidle() +{ + if ( isfacingenemy( -0.5 ) ) + self set_orient_mode( "face current" ); + else + self set_orient_mode( "face enemy" ); + + if ( should_growl() ) + { + debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl" ); + self setanimstatefromasd( "zm_stop_attackidle_growl" ); + return; + } + + idlechance = 33; + barkchance = 66; + + if ( isdefined( self.mode ) ) + { + if ( self.mode == "growl" ) + { + idlechance = 15; + barkchance = 30; + } + else if ( self.mode == "bark" ) + { + idlechance = 15; + barkchance = 85; + } + } + + rand = randomint( 100 ); + + if ( rand < idlechance ) + { + debug_anim_print( "dog_stop::main() - Setting stop_attackidle" ); + self setanimstatefromasd( "zm_stop_attackidle" ); + } + else if ( rand < barkchance ) + { + debug_anim_print( "dog_stop::main() - Setting stop_attackidle_bark " ); + self setanimstatefromasd( "zm_stop_attackidle_bark" ); + } + else + { + debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl " ); + self setanimstatefromasd( "zm_stop_attackidle_growl" ); + } +} + +shouldattackidle() +{ + return isdefined( self.enemy ) && isalive( self.enemy ) && distancesquared( self.origin, self.enemy.origin ) < 1000000; +} + +should_growl() +{ + if ( isdefined( self.script_growl ) ) + return 1; + + if ( !isalive( self.enemy ) ) + return 1; + + return !self cansee( self.enemy ); +} + +lookattarget( lookposeset ) +{ + self endon( "killanimscript" ); + self endon( "stop tracking" ); + debug_anim_print( "dog_stop::lookAtTarget() - Starting look at " + lookposeset ); + self.rightaimlimit = 90; + self.leftaimlimit = -90; + self.upaimlimit = 45; + self.downaimlimit = -45; + self maps\mp\animscripts\shared::setanimaimweight( 1, 0.2 ); + self maps\mp\animscripts\shared::trackloop(); +} diff --git a/ZM/Core/maps/mp/animscripts/zm_dog_turn.gsc b/ZM/Core/maps/mp/animscripts/zm_dog_turn.gsc new file mode 100644 index 0000000..f45b5d1 --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_dog_turn.gsc @@ -0,0 +1,138 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\zm_shared; + +main() +{ + self endon( "killanimscript" ); + debug_anim_print( "dog_turn::main()" ); + self setaimanimweights( 0, 0 ); + self.safetochangescript = 0; + deltayaw = self getdeltaturnyaw(); + + if ( need_to_turn_around( deltayaw ) ) + turn_180( deltayaw ); + else + turn_90( deltayaw ); + + move_out_of_turn(); + self.skipstartmove = 1; + self.safetochangescript = 1; +} + +need_to_turn_around( deltayaw ) +{ + angle = getdvarfloat( "dog_turn180_angle" ); + + if ( deltayaw > angle || deltayaw < -1 * angle ) + { + debug_turn_print( "need_to_turn_around: " + deltayaw + " YES" ); + return true; + } + + debug_turn_print( "need_to_turn_around: " + deltayaw + " NO" ); + return false; +} + +do_turn_anim( stopped_anim, run_anim, wait_time, run_wait_time ) +{ + speed = length( self getvelocity() ); + do_anim = stopped_anim; + + if ( level.dogrunturnspeed < speed ) + { + do_anim = run_anim; + wait_time = run_wait_time; + } + + debug_anim_print( "dog_move::do_turn_anim() - Setting " + do_anim ); + self setanimstatefromasd( do_anim ); + maps\mp\animscripts\zm_shared::donotetracksfortime( run_wait_time, "move_turn" ); + debug_anim_print( "dog_move::turn_around_right() - done with " + do_anim + " wait time " + run_wait_time ); +} + +turn_left() +{ + self do_turn_anim( "move_turn_left", "move_run_turn_left", 0.5, 0.5 ); +} + +turn_right() +{ + self do_turn_anim( "move_turn_right", "move_run_turn_right", 0.5, 0.5 ); +} + +turn_180_left() +{ + self do_turn_anim( "move_turn_around_left", "move_run_turn_around_left", 0.5, 0.7 ); +} + +turn_180_right() +{ + self do_turn_anim( "move_turn_around_right", "move_run_turn_around_right", 0.5, 0.7 ); +} + +move_out_of_turn() +{ + if ( self.a.movement == "run" ) + { + debug_anim_print( "dog_move::move_out_of_turn() - Setting move_run" ); + self setanimstatefromasd( "zm_move_run" ); + maps\mp\animscripts\zm_shared::donotetracksfortime( 0.1, "move_run" ); + debug_anim_print( "dog_move::move_out_of_turn() - move_run wait 0.1 done " ); + } + else + { + debug_anim_print( "dog_move::move_out_of_turn() - Setting move_start " ); + self setanimstatefromasd( "zm_move_walk" ); + maps\mp\animscripts\zm_shared::donotetracks( "move_walk" ); + } +} + +turn_90( deltayaw ) +{ + self animmode( "zonly_physics" ); + debug_turn_print( "turn_90 deltaYaw: " + deltayaw ); + + if ( deltayaw > getdvarfloat( "dog_turn90_angle" ) ) + { + debug_turn_print( "turn_90 left", 1 ); + self turn_left(); + } + else + { + debug_turn_print( "turn_90 right", 1 ); + self turn_right(); + } +} + +turn_180( deltayaw ) +{ + self animmode( "zonly_physics" ); + debug_turn_print( "turn_180 deltaYaw: " + deltayaw ); + + if ( deltayaw > 177 || deltayaw < -177 ) + { + if ( randomint( 2 ) == 0 ) + { + debug_turn_print( "turn_around random right", 1 ); + self turn_180_right(); + } + else + { + debug_turn_print( "turn_around random left", 1 ); + self turn_180_left(); + } + } + else if ( deltayaw > getdvarfloat( "dog_turn180_angle" ) ) + { + debug_turn_print( "turn_around left", 1 ); + self turn_180_left(); + } + else + { + debug_turn_print( "turn_around right", 1 ); + self turn_180_right(); + } +} diff --git a/ZM/Core/maps/mp/animscripts/zm_flashed.gsc b/ZM/Core/maps/mp/animscripts/zm_flashed.gsc new file mode 100644 index 0000000..719610b --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_flashed.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\shared; + +main() +{ + +} diff --git a/ZM/Core/maps/mp/animscripts/zm_init.gsc b/ZM/Core/maps/mp/animscripts/zm_init.gsc new file mode 100644 index 0000000..eab3e4e --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_init.gsc @@ -0,0 +1,165 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\animscripts\zm_init; +#include maps\mp\animscripts\zm_shared; + +main() +{ + self.a = spawnstruct(); + self.team = level.zombie_team; + firstinit(); + self.a.pose = "stand"; + self.a.movement = "stop"; + self.a.state = "stop"; + self.a.special = "none"; + self.a.combatendtime = gettime(); + self.a.script = "init"; + self.a.alertness = "casual"; + self.a.lastenemytime = gettime(); + self.a.forced_cover = "none"; + self.a.desired_script = "none"; + self.a.current_script = "none"; + self.a.lookangle = 0; + self.a.paintime = 0; + self.a.nextgrenadetrytime = 0; + self.walk = 0; + self.sprint = 0; + self.a.runblendtime = 0.2; + self.a.flamepaintime = 0; + self.a.postscriptfunc = undefined; + self.a.stance = "stand"; + self._animactive = 0; + self thread deathnotify(); + self.baseaccuracy = self.accuracy; + + if ( !isdefined( self.script_accuracy ) ) + self.script_accuracy = 1; + + self.a.misstime = 0; + self.a.yawtransition = "none"; + self.a.nodeath = 0; + self.a.misstime = 0; + self.a.misstimedebounce = 0; + self.a.disablepain = 0; + self.accuracystationarymod = 1; + self.chatinitialized = 0; + self.sightpostime = 0; + self.sightposleft = 1; + self.precombatrunenabled = 1; + self.is_zombie = 1; + self.a.crouchpain = 0; + self.a.nextstandinghitdying = 0; + + if ( !isdefined( self.script_forcegrenade ) ) + self.script_forcegrenade = 0; +/# + self.a.lastdebugprint = ""; +#/ + self.lastenemysighttime = 0; + self.combattime = 0; + self.coveridleselecttime = -696969; + self.old = spawnstruct(); + self.reacquire_state = 0; + self.a.allow_shooting = 0; +} + +donothing() +{ + +} + +empty( one, two, three, whatever ) +{ + +} + +clearenemy() +{ + self notify( "stop waiting for enemy to die" ); + self endon( "stop waiting for enemy to die" ); + + self.sightenemy waittill( "death" ); + + self.sightpos = undefined; + self.sighttime = 0; + self.sightenemy = undefined; +} + +deathnotify() +{ + self waittill( "death", other ); + + self notify( anim.scriptchange ); +} + +firstinit() +{ + if ( isdefined( anim.notfirsttime ) ) + return; + + anim.notfirsttime = 1; + anim.usefacialanims = 0; + + if ( !isdefined( anim.dog_health ) ) + anim.dog_health = 1; + + if ( !isdefined( anim.dog_presstime ) ) + anim.dog_presstime = 350; + + if ( !isdefined( anim.dog_hits_before_kill ) ) + anim.dog_hits_before_kill = 1; + + level.nextgrenadedrop = randomint( 3 ); + level.lastplayersighted = 100; + anim.defaultexception = maps\mp\animscripts\zm_init::empty; + setdvar( "scr_expDeathMayMoveCheck", "on" ); + anim.lastsidestepanim = 0; + anim.meleerange = 64; + anim.meleerangesq = anim.meleerange * anim.meleerange; + anim.standrangesq = 262144; + anim.chargerangesq = 40000; + anim.chargelongrangesq = 262144; + anim.aivsaimeleerangesq = 160000; + anim.combatmemorytimeconst = 10000; + anim.combatmemorytimerand = 6000; + anim.scriptchange = "script_change"; + anim.lastgibtime = 0; + anim.gibdelay = 3000; + anim.mingibs = 2; + anim.maxgibs = 4; + anim.totalgibs = randomintrange( anim.mingibs, anim.maxgibs ); + anim.corner_straight_yaw_limit = 36; + + if ( !isdefined( anim.optionalstepeffectfunction ) ) + { + anim.optionalstepeffects = []; + anim.optionalstepeffectfunction = ::empty; + } + + anim.notetracks = []; + maps\mp\animscripts\zm_shared::registernotetracks(); + + if ( !isdefined( level.flag ) ) + { + level.flag = []; + level.flags_lock = []; + } + + level.painai = undefined; + anim.maymovecheckenabled = 1; + anim.badplaces = []; + anim.badplaceint = 0; + anim.covercrouchleanpitch = -55; + anim.lastcarexplosiontime = -100000; +} + +onplayerconnect() +{ + player = self; + firstinit(); + player.invul = 0; +} diff --git a/ZM/Core/maps/mp/animscripts/zm_jump.gsc b/ZM/Core/maps/mp/animscripts/zm_jump.gsc new file mode 100644 index 0000000..719610b --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_jump.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\shared; + +main() +{ + +} diff --git a/ZM/Core/maps/mp/animscripts/zm_melee.gsc b/ZM/Core/maps/mp/animscripts/zm_melee.gsc new file mode 100644 index 0000000..64352fe --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_melee.gsc @@ -0,0 +1,269 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\animscripts\zm_combat; + +meleecombat() +{ + self endon( "end_melee" ); + self endon( "killanimscript" ); + assert( canmeleeanyrange() ); + self orientmode( "face enemy" ); + + if ( is_true( self.sliding_on_goo ) ) + self animmode( "slide" ); + else + self animmode( "zonly_physics" ); + + for (;;) + { + if ( isdefined( self.marked_for_death ) ) + return; + + if ( isdefined( self.enemy ) ) + { + angles = vectortoangles( self.enemy.origin - self.origin ); + self orientmode( "face angle", angles[1] ); + } + + if ( isdefined( self.zmb_vocals_attack ) ) + self playsound( self.zmb_vocals_attack ); + + if ( isdefined( self.nochangeduringmelee ) && self.nochangeduringmelee ) + self.safetochangescript = 0; + + if ( isdefined( self.is_inert ) && self.is_inert ) + return; + + set_zombie_melee_anim_state( self ); + + if ( isdefined( self.melee_anim_func ) ) + self thread [[ self.melee_anim_func ]](); + + while ( true ) + { + self waittill( "melee_anim", note ); + + if ( note == "end" ) + break; + else if ( note == "fire" ) + { + if ( !isdefined( self.enemy ) ) + break; + + if ( isdefined( self.dont_die_on_me ) && self.dont_die_on_me ) + break; + + self.enemy notify( "melee_swipe", self ); + oldhealth = self.enemy.health; + self melee(); + + if ( !isdefined( self.enemy ) ) + break; + + if ( self.enemy.health >= oldhealth ) + { + if ( isdefined( self.melee_miss_func ) ) + self [[ self.melee_miss_func ]](); + else if ( isdefined( level.melee_miss_func ) ) + self [[ level.melee_miss_func ]](); + } +/# + if ( getdvarint( _hash_7F11F572 ) ) + { + if ( self.enemy.health < oldhealth ) + { + zombie_eye = self geteye(); + player_eye = self.enemy geteye(); + trace = bullettrace( zombie_eye, player_eye, 1, self ); + hitpos = trace["position"]; + dist = distance( zombie_eye, hitpos ); + iprintln( "melee HIT " + dist ); + } + } +#/ + } + else if ( note == "stop" ) + { + if ( !cancontinuetomelee() ) + break; + } + } + + if ( is_true( self.sliding_on_goo ) ) + self orientmode( "face enemy" ); + else + self orientmode( "face default" ); + + if ( isdefined( self.nochangeduringmelee ) && self.nochangeduringmelee || is_true( self.sliding_on_goo ) ) + { + if ( isdefined( self.enemy ) ) + { + dist_sq = distancesquared( self.origin, self.enemy.origin ); + + if ( dist_sq > self.meleeattackdist * self.meleeattackdist ) + { + self.safetochangescript = 1; + wait 0.1; + break; + } + } + else + { + self.safetochangescript = 1; + wait 0.1; + break; + } + } + } + + if ( is_true( self.sliding_on_goo ) ) + self animmode( "slide" ); + else + self animmode( "none" ); + + self thread maps\mp\animscripts\zm_combat::main(); +} + +cancontinuetomelee() +{ + return canmeleeinternal( "already started" ); +} + +canmeleeanyrange() +{ + return canmeleeinternal( "any range" ); +} + +canmeleedesperate() +{ + return canmeleeinternal( "long range" ); +} + +canmelee() +{ + return canmeleeinternal( "normal" ); +} + +canmeleeinternal( state ) +{ + if ( !issentient( self.enemy ) ) + return false; + + if ( !isalive( self.enemy ) ) + return false; + + if ( isdefined( self.disablemelee ) ) + { + assert( self.disablemelee ); + return false; + } + + yaw = abs( getyawtoenemy() ); + + if ( yaw > 60 && state != "already started" || yaw > 110 ) + return false; + + enemypoint = self.enemy getorigin(); + vectoenemy = enemypoint - self.origin; + self.enemydistancesq = lengthsquared( vectoenemy ); + + if ( self.enemydistancesq <= anim.meleerangesq ) + { + if ( !ismeleepathclear( vectoenemy, enemypoint ) ) + return false; + + return true; + } + + if ( state != "any range" ) + { + chargerangesq = anim.chargerangesq; + + if ( state == "long range" ) + chargerangesq = anim.chargelongrangesq; + + if ( self.enemydistancesq > chargerangesq ) + return false; + } + + if ( state == "already started" ) + return false; + + if ( isdefined( self.check_melee_path ) && self.check_melee_path ) + { + if ( !ismeleepathclear( vectoenemy, enemypoint ) ) + { + self notify( "melee_path_blocked" ); + return false; + } + } + + if ( isdefined( level.can_melee ) ) + { + if ( !self [[ level.can_melee ]]() ) + return false; + } + + return true; +} + +ismeleepathclear( vectoenemy, enemypoint ) +{ + dirtoenemy = vectornormalize( ( vectoenemy[0], vectoenemy[1], 0 ) ); + meleepoint = enemypoint - ( dirtoenemy[0] * 28, dirtoenemy[1] * 28, 0 ); + + if ( !self isingoal( meleepoint ) ) + return false; + + if ( self maymovetopoint( meleepoint ) ) + return true; + + trace1 = bullettrace( self.origin + vectorscale( ( 0, 0, 1 ), 20.0 ), meleepoint + vectorscale( ( 0, 0, 1 ), 20.0 ), 1, self ); + trace2 = bullettrace( self.origin + vectorscale( ( 0, 0, 1 ), 72.0 ), meleepoint + vectorscale( ( 0, 0, 1 ), 72.0 ), 1, self ); + + if ( isdefined( trace1["fraction"] ) && trace1["fraction"] == 1 && isdefined( trace2["fraction"] ) && trace2["fraction"] == 1 ) + return true; + + if ( isdefined( trace1["entity"] ) && trace1["entity"] == self.enemy && isdefined( trace2["entity"] ) && trace2["entity"] == self.enemy ) + return true; + + if ( isdefined( level.zombie_melee_in_water ) && level.zombie_melee_in_water ) + { + if ( isdefined( trace1["surfacetype"] ) && trace1["surfacetype"] == "water" && isdefined( trace2["fraction"] ) && trace2["fraction"] == 1 ) + return true; + } + + return false; +} + +set_zombie_melee_anim_state( zombie ) +{ + if ( isdefined( level.melee_anim_state ) ) + melee_anim_state = self [[ level.melee_anim_state ]](); + + if ( !isdefined( melee_anim_state ) ) + { + if ( !zombie.has_legs && zombie.a.gib_ref == "no_legs" ) + melee_anim_state = "zm_stumpy_melee"; + else + { + switch ( zombie.zombie_move_speed ) + { + case "walk": + melee_anim_state = append_missing_legs_suffix( "zm_walk_melee" ); + break; + case "sprint": + case "run": + default: + melee_anim_state = append_missing_legs_suffix( "zm_run_melee" ); + break; + } + } + } + + zombie setanimstatefromasd( melee_anim_state ); +} diff --git a/ZM/Core/maps/mp/animscripts/zm_move.gsc b/ZM/Core/maps/mp/animscripts/zm_move.gsc new file mode 100644 index 0000000..69433f3 --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_move.gsc @@ -0,0 +1,255 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\animscripts\zm_run; +#include maps\mp\animscripts\zm_shared; + +main() +{ + self endon( "killanimscript" ); + self setaimanimweights( 0, 0 ); + previousscript = self.a.script; + maps\mp\animscripts\zm_utility::initialize( "zombie_move" ); + movemainloop(); +} + +movemainloop() +{ + self endon( "killanimscript" ); + self endon( "stop_soon" ); + self.needs_run_update = 1; + self notify( "needs_run_update" ); + self sidestepinit(); + self thread trysidestepthread(); + + for (;;) + { + self maps\mp\animscripts\zm_run::moverun(); + + if ( isdefined( self.zombie_can_sidestep ) && self.zombie_can_sidestep ) + self trysidestep(); + } +} + +sidestepinit() +{ + self.a.steppeddir = 0; + self.a.lastsidesteptime = gettime(); +} + +trysidestepthread() +{ + self endon( "death" ); + self notify( "new_trySideStepThread" ); + self endon( "new_trySideStepThread" ); + + if ( !isdefined( self.zombie_can_sidestep ) ) + return false; + + if ( isdefined( self.zombie_can_sidestep ) && !self.zombie_can_sidestep ) + return false; + + while ( true ) + { + self trysidestep(); + wait 0.05; + } +} + +trysidestep() +{ + if ( isdefined( self.shouldsidestepfunc ) ) + self.sidesteptype = self [[ self.shouldsidestepfunc ]](); + else + self.sidesteptype = shouldsidestep(); + + if ( self.sidesteptype == "none" ) + { + if ( isdefined( self.zombie_can_forwardstep ) && self.zombie_can_forwardstep ) + self.sidesteptype = shouldforwardstep(); + } + + if ( self.sidesteptype == "none" ) + return false; + + self.desiredstepdir = getdesiredsidestepdir( self.sidesteptype ); + self.asd_name = "zm_" + self.sidesteptype + "_" + self.desiredstepdir; + self.substate_index = self getanimsubstatefromasd( self.asd_name ); + self.stepanim = self getanimfromasd( self.asd_name, self.substate_index ); + + if ( !self checkroomforanim( self.stepanim ) ) + return false; + + self.allowpain = 0; + self animcustom( ::dosidestep ); + + self waittill( "sidestep_done" ); + + self.allowpain = 1; +} + +getdesiredsidestepdir( sidesteptype ) +{ + if ( sidesteptype == "roll" || sidesteptype == "phase" ) + { + self.desiredstepdir = "forward"; + return self.desiredstepdir; + } + + assert( sidesteptype == "step", "Unsupported SideStepType" ); + randomroll = randomfloat( 1 ); + + if ( self.a.steppeddir < 0 ) + self.desiredstepdir = "right"; + else if ( self.a.steppeddir > 0 ) + self.desiredstepdir = "left"; + else if ( randomroll < 0.5 ) + self.desiredstepdir = "right"; + else + self.desiredstepdir = "left"; + + return self.desiredstepdir; +} + +checkroomforanim( stepanim ) +{ + if ( !self maymovefrompointtopoint( self.origin, getanimendpos( stepanim ) ) ) + return false; + + return true; +} + +shouldsidestep() +{ + if ( cansidestep() && isplayer( self.enemy ) && self.enemy islookingat( self ) ) + { + if ( self.zombie_move_speed != "sprint" || randomfloat( 1 ) < 0.7 ) + return "step"; + else + return "roll"; + } + + return "none"; +} + +cansidestep() +{ + if ( !isdefined( self.zombie_can_sidestep ) || !self.zombie_can_sidestep ) + return false; + + if ( gettime() - self.a.lastsidesteptime < 2000 ) + return false; + + if ( !isdefined( self.enemy ) ) + return false; + + if ( self.a.pose != "stand" ) + return false; + + distsqfromenemy = distancesquared( self.origin, self.enemy.origin ); + + if ( distsqfromenemy < 4096 ) + return false; + + if ( distsqfromenemy > 1000000 ) + return false; + + if ( !isdefined( self.pathgoalpos ) || distancesquared( self.origin, self.pathgoalpos ) < 4096 ) + return false; + + if ( abs( self getmotionangle() ) > 15 ) + return false; + + yaw = getyawtoorigin( self.enemy.origin ); + + if ( abs( yaw ) > 45 ) + return false; + + return true; +} + +shouldforwardstep() +{ + if ( canforwardstep() && isplayer( self.enemy ) ) + return "phase"; + + return "none"; +} + +canforwardstep() +{ + if ( isdefined( self.a.lastsidesteptime ) && gettime() - self.a.lastsidesteptime < 2000 ) + return false; + + if ( !isdefined( self.enemy ) ) + return false; + + if ( self.a.pose != "stand" ) + return false; + + distsqfromenemy = distancesquared( self.origin, self.enemy.origin ); + + if ( distsqfromenemy < 14400 ) + return false; + + if ( distsqfromenemy > 5760000 ) + return false; + + if ( !isdefined( self.pathgoalpos ) || distancesquared( self.origin, self.pathgoalpos ) < 4096 ) + return false; + + if ( abs( self getmotionangle() ) > 15 ) + return false; + + yaw = getyawtoorigin( self.enemy.origin ); + + if ( abs( yaw ) > 45 ) + return false; + + return true; +} + +dosidestep() +{ + self endon( "death" ); + self endon( "killanimscript" ); + self playsidestepanim( self.stepanim, self.sidesteptype ); + + if ( self.desiredstepdir == "left" ) + self.a.steppeddir--; + else + self.a.steppeddir++; + + self.a.lastsidesteptime = gettime(); + self notify( "sidestep_done" ); +} + +playsidestepanim( stepanim, sidesteptype ) +{ + self animmode( "gravity", 0 ); + self orientmode( "face angle", self.angles[1] ); + runblendouttime = 0.2; + + if ( isdefined( self.sidestepfunc ) ) + self thread [[ self.sidestepfunc ]]( "step_anim", stepanim ); + + self setanimstatefromasd( self.asd_name, self.substate_index ); + maps\mp\animscripts\zm_shared::donotetracks( "step_anim" ); + + if ( isalive( self ) ) + self thread facelookaheadforabit(); +} + +facelookaheadforabit() +{ + self endon( "death" ); + self endon( "killanimscript" ); + lookaheadangles = vectortoangles( self.lookaheaddir ); + self orientmode( "face angle", lookaheadangles[1] ); + wait 0.2; + self animmode( "normal", 0 ); + self orientmode( "face default" ); +} diff --git a/ZM/Core/maps/mp/animscripts/zm_pain.gsc b/ZM/Core/maps/mp/animscripts/zm_pain.gsc new file mode 100644 index 0000000..9d2fdb1 --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_pain.gsc @@ -0,0 +1,21 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\zm_utility; + +main() +{ + self setflashbanged( 0 ); + + if ( isdefined( self.longdeathstarting ) ) + { + self waittill( "killanimscript" ); + + return; + } + + if ( self.a.disablepain ) + return; +} diff --git a/ZM/Core/maps/mp/animscripts/zm_run.gsc b/ZM/Core/maps/mp/animscripts/zm_run.gsc new file mode 100644 index 0000000..1c9ff5c --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_run.gsc @@ -0,0 +1,61 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\animscripts\zm_shared; + +moverun() +{ + self endon( "death" ); + + if ( isdefined( self.needs_run_update ) && !self.needs_run_update ) + self waittill( "needs_run_update" ); + + if ( isdefined( self.is_inert ) && self.is_inert ) + { + wait 0.1; + return; + } + + self setaimanimweights( 0, 0 ); + self setanimstatefromspeed(); + maps\mp\animscripts\zm_shared::donotetracksfortime( 0.05, "move_anim" ); + self.needs_run_update = 0; +} + +setanimstatefromspeed() +{ + animstate = self append_missing_legs_suffix( "zm_move_" + self.zombie_move_speed ); + + if ( isdefined( self.a.gib_ref ) && self.a.gib_ref == "no_legs" ) + animstate = "zm_move_stumpy"; + + if ( isdefined( self.preserve_asd_substates ) && self.preserve_asd_substates && animstate == self getanimstatefromasd() ) + { + substate = self getanimsubstatefromasd(); + self setanimstatefromasd( animstate, substate ); + } + else + self setanimstatefromasd( animstate ); + + if ( isdefined( self.setanimstatefromspeed ) ) + self [[ self.setanimstatefromspeed ]]( animstate, substate ); +} + +needsupdate() +{ + self.needs_run_update = 1; + self notify( "needs_run_update" ); +} + +needsdelayedupdate() +{ + self endon( "death" ); + + while ( isdefined( self.needs_run_update ) && self.needs_run_update ) + wait 0.1; + + self.needs_run_update = 1; + self notify( "needs_run_update" ); +} diff --git a/ZM/Core/maps/mp/animscripts/zm_scripted.gsc b/ZM/Core/maps/mp/animscripts/zm_scripted.gsc new file mode 100644 index 0000000..13b6f89 --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_scripted.gsc @@ -0,0 +1,39 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self endon( "death" ); + self notify( "killanimscript" ); + self endon( "end_sequence" ); + + if ( !isdefined( self.codescripted["animState"] ) ) + return; + + self startscriptedanim( self.codescripted["origin"], self.codescripted["angles"], self.codescripted["animState"], self.codescripted["animSubState"], self.codescripted["AnimMode"] ); + self.a.script = "scripted"; + self.codescripted = undefined; + + if ( isdefined( self.deathstring_passed ) ) + self.deathstring = self.deathstring_passed; + + self waittill( "killanimscript" ); +} + +init( origin, angles, animstate, animsubstate, animmode ) +{ + self.codescripted["origin"] = origin; + self.codescripted["angles"] = angles; + self.codescripted["animState"] = animstate; + self.codescripted["animSubState"] = animsubstate; + + if ( isdefined( animmode ) ) + self.codescripted["AnimMode"] = animmode; + else + self.codescripted["AnimMode"] = "normal"; +} + +end_script() +{ + +} diff --git a/ZM/Core/maps/mp/animscripts/zm_shared.gsc b/ZM/Core/maps/mp/animscripts/zm_shared.gsc new file mode 100644 index 0000000..dc1754d --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_shared.gsc @@ -0,0 +1,455 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\zm_utility; + +deleteatlimit() +{ + wait 30.0; + self delete(); +} + +lookatentity( looktargetentity, lookduration, lookspeed, eyesonly, interruptothers ) +{ + +} + +lookatposition( looktargetpos, lookduration, lookspeed, eyesonly, interruptothers ) +{ + assert( isai( self ), "Can only call this function on an AI character" ); + assert( self.a.targetlookinitilized == 1, "LookAtPosition called on AI that lookThread was not called on" ); + assert( lookspeed == "casual" || lookspeed == "alert", "lookSpeed must be casual or alert" ); + + if ( !isdefined( interruptothers ) || interruptothers == "interrupt others" || gettime() > self.a.lookendtime ) + { + self.a.looktargetpos = looktargetpos; + self.a.lookendtime = gettime() + lookduration * 1000; + + if ( lookspeed == "casual" ) + self.a.looktargetspeed = 800; + else + self.a.looktargetspeed = 1600; + + if ( isdefined( eyesonly ) && eyesonly == "eyes only" ) + self notify( "eyes look now" ); + else + self notify( "look now" ); + } +} + +lookatanimations( leftanim, rightanim ) +{ + self.a.lookanimationleft = leftanim; + self.a.lookanimationright = rightanim; +} + +handledogsoundnotetracks( note ) +{ + if ( note == "sound_dogstep_run_default" || note == "dogstep_rf" || note == "dogstep_lf" ) + { + self playsound( "fly_dog_step_run_default" ); + return true; + } + + prefix = getsubstr( note, 0, 5 ); + + if ( prefix != "sound" ) + return false; + + alias = "aml" + getsubstr( note, 5 ); + + if ( isalive( self ) ) + self thread play_sound_on_tag_endon_death( alias, "tag_eye" ); + else + self thread play_sound_in_space( alias, self gettagorigin( "tag_eye" ) ); + + return true; +} + +growling() +{ + return isdefined( self.script_growl ); +} + +registernotetracks() +{ + anim.notetracks["anim_pose = \"stand\""] = ::notetrackposestand; + anim.notetracks["anim_pose = \"crouch\""] = ::notetrackposecrouch; + anim.notetracks["anim_movement = \"stop\""] = ::notetrackmovementstop; + anim.notetracks["anim_movement = \"walk\""] = ::notetrackmovementwalk; + anim.notetracks["anim_movement = \"run\""] = ::notetrackmovementrun; + anim.notetracks["anim_alertness = causal"] = ::notetrackalertnesscasual; + anim.notetracks["anim_alertness = alert"] = ::notetrackalertnessalert; + anim.notetracks["gravity on"] = ::notetrackgravity; + anim.notetracks["gravity off"] = ::notetrackgravity; + anim.notetracks["gravity code"] = ::notetrackgravity; + anim.notetracks["bodyfall large"] = ::notetrackbodyfall; + anim.notetracks["bodyfall small"] = ::notetrackbodyfall; + anim.notetracks["footstep"] = ::notetrackfootstep; + anim.notetracks["step"] = ::notetrackfootstep; + anim.notetracks["footstep_right_large"] = ::notetrackfootstep; + anim.notetracks["footstep_right_small"] = ::notetrackfootstep; + anim.notetracks["footstep_left_large"] = ::notetrackfootstep; + anim.notetracks["footstep_left_small"] = ::notetrackfootstep; + anim.notetracks["footscrape"] = ::notetrackfootscrape; + anim.notetracks["land"] = ::notetrackland; + anim.notetracks["start_ragdoll"] = ::notetrackstartragdoll; +} + +notetrackstopanim( note, flagname ) +{ + +} + +notetrackstartragdoll( note, flagname ) +{ + if ( isdefined( self.noragdoll ) ) + return; + + self unlink(); + self startragdoll(); +} + +notetrackmovementstop( note, flagname ) +{ + if ( issentient( self ) ) + self.a.movement = "stop"; +} + +notetrackmovementwalk( note, flagname ) +{ + if ( issentient( self ) ) + self.a.movement = "walk"; +} + +notetrackmovementrun( note, flagname ) +{ + if ( issentient( self ) ) + self.a.movement = "run"; +} + +notetrackalertnesscasual( note, flagname ) +{ + if ( issentient( self ) ) + self.a.alertness = "casual"; +} + +notetrackalertnessalert( note, flagname ) +{ + if ( issentient( self ) ) + self.a.alertness = "alert"; +} + +notetrackposestand( note, flagname ) +{ + self.a.pose = "stand"; + self notify( "entered_pose" + "stand" ); +} + +notetrackposecrouch( note, flagname ) +{ + self.a.pose = "crouch"; + self notify( "entered_pose" + "crouch" ); + + if ( self.a.crouchpain ) + { + self.a.crouchpain = 0; + self.health = 150; + } +} + +notetrackgravity( note, flagname ) +{ + if ( issubstr( note, "on" ) ) + self animmode( "gravity" ); + else if ( issubstr( note, "off" ) ) + { + self animmode( "nogravity" ); + self.nogravity = 1; + } + else if ( issubstr( note, "code" ) ) + { + self animmode( "none" ); + self.nogravity = undefined; + } +} + +notetrackbodyfall( note, flagname ) +{ + if ( isdefined( self.groundtype ) ) + groundtype = self.groundtype; + else + groundtype = "dirt"; + + if ( issubstr( note, "large" ) ) + self playsound( "fly_bodyfall_large_" + groundtype ); + else if ( issubstr( note, "small" ) ) + self playsound( "fly_bodyfall_small_" + groundtype ); +} + +notetrackfootstep( note, flagname ) +{ + if ( issubstr( note, "left" ) ) + playfootstep( "J_Ball_LE" ); + else + playfootstep( "J_BALL_RI" ); + + if ( !level.clientscripts ) + self playsound( "fly_gear_run" ); +} + +notetrackfootscrape( note, flagname ) +{ + if ( isdefined( self.groundtype ) ) + groundtype = self.groundtype; + else + groundtype = "dirt"; + + self playsound( "fly_step_scrape_" + groundtype ); +} + +notetrackland( note, flagname ) +{ + if ( isdefined( self.groundtype ) ) + groundtype = self.groundtype; + else + groundtype = "dirt"; + + self playsound( "fly_land_npc_" + groundtype ); +} + +handlenotetrack( note, flagname, customfunction, var1 ) +{ + if ( isai( self ) && self.isdog ) + { + if ( handledogsoundnotetracks( note ) ) + return; + } + else + { + notetrackfunc = anim.notetracks[note]; + + if ( isdefined( notetrackfunc ) ) + return [[ notetrackfunc ]]( note, flagname ); + } + + switch ( note ) + { + case "undefined": + case "finish": + case "end": + if ( isai( self ) && self.a.pose == "back" ) + { + + } + + return note; + case "swish small": + self thread play_sound_in_space( "fly_gear_enemy", self gettagorigin( "TAG_WEAPON_RIGHT" ) ); + break; + case "swish large": + self thread play_sound_in_space( "fly_gear_enemy_large", self gettagorigin( "TAG_WEAPON_RIGHT" ) ); + break; + case "no death": + self.a.nodeath = 1; + break; + case "no pain": + self.allowpain = 0; + break; + case "allow pain": + self.allowpain = 1; + break; + case "anim_melee = right": + case "anim_melee = \"right\"": + self.a.meleestate = "right"; + break; + case "anim_melee = left": + case "anim_melee = \"left\"": + self.a.meleestate = "left"; + break; + case "swap taghelmet to tagleft": + if ( isdefined( self.hatmodel ) ) + { + if ( isdefined( self.helmetsidemodel ) ) + { + self detach( self.helmetsidemodel, "TAG_HELMETSIDE" ); + self.helmetsidemodel = undefined; + } + + self detach( self.hatmodel, "" ); + self attach( self.hatmodel, "TAG_WEAPON_LEFT" ); + self.hatmodel = undefined; + } + + break; + default: + if ( isdefined( customfunction ) ) + { + if ( !isdefined( var1 ) ) + return [[ customfunction ]]( note ); + else + return [[ customfunction ]]( note, var1 ); + } + + break; + } +} + +donotetracks( flagname, customfunction, var1 ) +{ + for (;;) + { + self waittill( flagname, note ); + + if ( !isdefined( note ) ) + note = "undefined"; + + val = self handlenotetrack( note, flagname, customfunction, var1 ); + + if ( isdefined( val ) ) + return val; + } +} + +donotetracksforeverproc( notetracksfunc, flagname, killstring, customfunction, var1 ) +{ + if ( isdefined( killstring ) ) + self endon( killstring ); + + self endon( "killanimscript" ); + + for (;;) + { + time = gettime(); + returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 ); + timetaken = gettime() - time; + + if ( timetaken < 0.05 ) + { + time = gettime(); + returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 ); + timetaken = gettime() - time; + + if ( timetaken < 0.05 ) + { +/# + println( gettime() + " mapsmpanimscriptsshared::DoNoteTracksForever is trying to cause an infinite loop on anim " + flagname + ", returned " + returnednote + "." ); +#/ + wait( 0.05 - timetaken ); + } + } + } +} + +donotetracksforever( flagname, killstring, customfunction, var1 ) +{ + donotetracksforeverproc( ::donotetracks, flagname, killstring, customfunction, var1 ); +} + +donotetracksfortimeproc( donotetracksforeverfunc, time, flagname, customfunction, ent, var1 ) +{ + ent endon( "stop_notetracks" ); + [[ donotetracksforeverfunc ]]( flagname, undefined, customfunction, var1 ); +} + +donotetracksfortime( time, flagname, customfunction, var1 ) +{ + ent = spawnstruct(); + ent thread donotetracksfortimeendnotify( time ); + donotetracksfortimeproc( ::donotetracksforever, time, flagname, customfunction, ent, var1 ); +} + +donotetracksfortimeendnotify( time ) +{ + wait( time ); + self notify( "stop_notetracks" ); +} + +playfootstep( foot ) +{ + if ( !level.clientscripts ) + { + if ( !isai( self ) ) + { + self playsound( "fly_step_run_dirt" ); + return; + } + } + + groundtype = undefined; + + if ( !isdefined( self.groundtype ) ) + { + if ( !isdefined( self.lastgroundtype ) ) + { + if ( !level.clientscripts ) + self playsound( "fly_step_run_dirt" ); + + return; + } + + groundtype = self.lastgroundtype; + } + else + { + groundtype = self.groundtype; + self.lastgroundtype = self.groundtype; + } + + if ( !level.clientscripts ) + self playsound( "fly_step_run_" + groundtype ); + + [[ anim.optionalstepeffectfunction ]]( foot, groundtype ); +} + +playfootstepeffect( foot, groundtype ) +{ + if ( level.clientscripts ) + return; + + for ( i = 0; i < anim.optionalstepeffects.size; i++ ) + { + if ( isdefined( self.fire_footsteps ) && self.fire_footsteps ) + groundtype = "fire"; + + if ( groundtype != anim.optionalstepeffects[i] ) + continue; + + org = self gettagorigin( foot ); + playfx( level._effect["step_" + anim.optionalstepeffects[i]], org, org + vectorscale( ( 0, 0, 1 ), 100.0 ) ); + return; + } +} + +movetooriginovertime( origin, time ) +{ + self endon( "killanimscript" ); + + if ( distancesquared( self.origin, origin ) > 256 && !self maymovetopoint( origin ) ) + { +/# + println( "^1Warning: AI starting behavior for node at " + origin + " but could not move to that point." ); +#/ + return; + } + + self.keepclaimednodeingoal = 1; + offset = self.origin - origin; + frames = int( time * 20 ); + offsetreduction = vectorscale( offset, 1.0 / frames ); + + for ( i = 0; i < frames; i++ ) + { + offset -= offsetreduction; + self teleport( origin + offset ); + wait 0.05; + } + + self.keepclaimednodeingoal = 0; +} + +returntrue() +{ + return 1; +} diff --git a/ZM/Core/maps/mp/animscripts/zm_stop.gsc b/ZM/Core/maps/mp/animscripts/zm_stop.gsc new file mode 100644 index 0000000..1026550 --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_stop.gsc @@ -0,0 +1,27 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\animscripts\zm_shared; + +main() +{ + self endon( "killanimscript" ); + + for (;;) + { + if ( isdefined( level.ignore_stop_func ) ) + { + if ( self [[ level.ignore_stop_func ]]() ) + return; + } + + if ( !self hasanimstatefromasd( "zm_idle" ) ) + return; + + animstate = maps\mp\animscripts\zm_utility::append_missing_legs_suffix( "zm_idle" ); + self setanimstatefromasd( animstate ); + maps\mp\animscripts\zm_shared::donotetracks( "idle_anim" ); + } +} diff --git a/ZM/Core/maps/mp/animscripts/zm_turn.gsc b/ZM/Core/maps/mp/animscripts/zm_turn.gsc new file mode 100644 index 0000000..719610b --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_turn.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\shared; + +main() +{ + +} diff --git a/ZM/Core/maps/mp/animscripts/zm_utility.gsc b/ZM/Core/maps/mp/animscripts/zm_utility.gsc new file mode 100644 index 0000000..c14f587 --- /dev/null +++ b/ZM/Core/maps/mp/animscripts/zm_utility.gsc @@ -0,0 +1,1086 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\shared; +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\_utility; + +append_missing_legs_suffix( animstate ) +{ + if ( isdefined( self.has_legs ) && !self.has_legs && self hasanimstatefromasd( animstate + "_crawl" ) ) + return animstate + "_crawl"; + + return animstate; +} + +initanimtree( animscript ) +{ + if ( animscript != "pain" && animscript != "death" ) + self.a.special = "none"; + + assert( isdefined( animscript ), "Animscript not specified in initAnimTree" ); + self.a.script = animscript; +} + +updateanimpose() +{ + assert( self.a.movement == "stop" || self.a.movement == "walk" || self.a.movement == "run", "UpdateAnimPose " + self.a.pose + " " + self.a.movement ); + self.desired_anim_pose = undefined; +} + +initialize( animscript ) +{ + if ( isdefined( self.longdeathstarting ) ) + { + if ( animscript != "pain" && animscript != "death" ) + self dodamage( self.health + 100, self.origin ); + + if ( animscript != "pain" ) + { + self.longdeathstarting = undefined; + self notify( "kill_long_death" ); + } + } + + if ( isdefined( self.a.mayonlydie ) && animscript != "death" ) + self dodamage( self.health + 100, self.origin ); + + if ( isdefined( self.a.postscriptfunc ) ) + { + scriptfunc = self.a.postscriptfunc; + self.a.postscriptfunc = undefined; + [[ scriptfunc ]]( animscript ); + } + + if ( animscript != "death" ) + self.a.nodeath = 0; + + self.isholdinggrenade = undefined; + self.covernode = undefined; + self.changingcoverpos = 0; + self.a.scriptstarttime = gettime(); + self.a.atconcealmentnode = 0; + + if ( isdefined( self.node ) && ( self.node.type == "Conceal Crouch" || self.node.type == "Conceal Stand" ) ) + self.a.atconcealmentnode = 1; + + initanimtree( animscript ); + updateanimpose(); +} + +getnodeyawtoorigin( pos ) +{ + if ( isdefined( self.node ) ) + yaw = self.node.angles[1] - getyaw( pos ); + else + yaw = self.angles[1] - getyaw( pos ); + + yaw = angleclamp180( yaw ); + return yaw; +} + +getnodeyawtoenemy() +{ + pos = undefined; + + if ( isvalidenemy( self.enemy ) ) + pos = self.enemy.origin; + else + { + if ( isdefined( self.node ) ) + forward = anglestoforward( self.node.angles ); + else + forward = anglestoforward( self.angles ); + + forward = vectorscale( forward, 150 ); + pos = self.origin + forward; + } + + if ( isdefined( self.node ) ) + yaw = self.node.angles[1] - getyaw( pos ); + else + yaw = self.angles[1] - getyaw( pos ); + + yaw = angleclamp180( yaw ); + return yaw; +} + +getcovernodeyawtoenemy() +{ + pos = undefined; + + if ( isvalidenemy( self.enemy ) ) + pos = self.enemy.origin; + else + { + forward = anglestoforward( self.covernode.angles + self.animarray["angle_step_out"][self.a.cornermode] ); + forward = vectorscale( forward, 150 ); + pos = self.origin + forward; + } + + yaw = self.covernode.angles[1] + self.animarray["angle_step_out"][self.a.cornermode] - getyaw( pos ); + yaw = angleclamp180( yaw ); + return yaw; +} + +getyawtospot( spot ) +{ + pos = spot; + yaw = self.angles[1] - getyaw( pos ); + yaw = angleclamp180( yaw ); + return yaw; +} + +getyawtoenemy() +{ + pos = undefined; + + if ( isvalidenemy( self.enemy ) ) + pos = self.enemy.origin; + else + { + forward = anglestoforward( self.angles ); + forward = vectorscale( forward, 150 ); + pos = self.origin + forward; + } + + yaw = self.angles[1] - getyaw( pos ); + yaw = angleclamp180( yaw ); + return yaw; +} + +getyaw( org ) +{ + angles = vectortoangles( org - self.origin ); + return angles[1]; +} + +getyaw2d( org ) +{ + angles = vectortoangles( ( org[0], org[1], 0 ) - ( self.origin[0], self.origin[1], 0 ) ); + return angles[1]; +} + +absyawtoenemy() +{ + assert( isvalidenemy( self.enemy ) ); + yaw = self.angles[1] - getyaw( self.enemy.origin ); + yaw = angleclamp180( yaw ); + + if ( yaw < 0 ) + yaw = -1 * yaw; + + return yaw; +} + +absyawtoenemy2d() +{ + assert( isvalidenemy( self.enemy ) ); + yaw = self.angles[1] - getyaw2d( self.enemy.origin ); + yaw = angleclamp180( yaw ); + + if ( yaw < 0 ) + yaw = -1 * yaw; + + return yaw; +} + +absyawtoorigin( org ) +{ + yaw = self.angles[1] - getyaw( org ); + yaw = angleclamp180( yaw ); + + if ( yaw < 0 ) + yaw = -1 * yaw; + + return yaw; +} + +absyawtoangles( angles ) +{ + yaw = self.angles[1] - angles; + yaw = angleclamp180( yaw ); + + if ( yaw < 0 ) + yaw = -1 * yaw; + + return yaw; +} + +getyawfromorigin( org, start ) +{ + angles = vectortoangles( org - start ); + return angles[1]; +} + +getyawtotag( tag, org ) +{ + yaw = self gettagangles( tag )[1] - getyawfromorigin( org, self gettagorigin( tag ) ); + yaw = angleclamp180( yaw ); + return yaw; +} + +getyawtoorigin( org ) +{ + yaw = self.angles[1] - getyaw( org ); + yaw = angleclamp180( yaw ); + return yaw; +} + +geteyeyawtoorigin( org ) +{ + yaw = self gettagangles( "TAG_EYE" )[1] - getyaw( org ); + yaw = angleclamp180( yaw ); + return yaw; +} + +getcovernodeyawtoorigin( org ) +{ + yaw = self.covernode.angles[1] + self.animarray["angle_step_out"][self.a.cornermode] - getyaw( org ); + yaw = angleclamp180( yaw ); + return yaw; +} + +isstanceallowedwrapper( stance ) +{ + if ( isdefined( self.covernode ) ) + return self.covernode doesnodeallowstance( stance ); + + return self isstanceallowed( stance ); +} + +getclaimednode() +{ + mynode = self.node; + + if ( isdefined( mynode ) && ( self nearnode( mynode ) || isdefined( self.covernode ) && mynode == self.covernode ) ) + return mynode; + + return undefined; +} + +getnodetype() +{ + mynode = getclaimednode(); + + if ( isdefined( mynode ) ) + return mynode.type; + + return "none"; +} + +getnodedirection() +{ + mynode = getclaimednode(); + + if ( isdefined( mynode ) ) + return mynode.angles[1]; + + return self.desiredangle; +} + +getnodeforward() +{ + mynode = getclaimednode(); + + if ( isdefined( mynode ) ) + return anglestoforward( mynode.angles ); + + return anglestoforward( self.angles ); +} + +getnodeorigin() +{ + mynode = getclaimednode(); + + if ( isdefined( mynode ) ) + return mynode.origin; + + return self.origin; +} + +safemod( a, b ) +{ + result = int( a ) % b; + result += b; + return result % b; +} + +angleclamp( angle ) +{ + anglefrac = angle / 360.0; + angle = ( anglefrac - floor( anglefrac ) ) * 360.0; + return angle; +} + +quadrantanimweights( yaw ) +{ + forwardweight = ( 90 - abs( yaw ) ) / 90; + leftweight = ( 90 - absangleclamp180( abs( yaw - 90 ) ) ) / 90; + result["front"] = 0; + result["right"] = 0; + result["back"] = 0; + result["left"] = 0; + + if ( isdefined( self.alwaysrunforward ) ) + { + assert( self.alwaysrunforward ); + result["front"] = 1; + return result; + } + + useleans = getdvarint( "ai_useLeanRunAnimations" ); + + if ( forwardweight > 0 ) + { + result["front"] = forwardweight; + + if ( leftweight > 0 ) + result["left"] = leftweight; + else + result["right"] = -1 * leftweight; + } + else if ( useleans ) + { + result["back"] = -1 * forwardweight; + + if ( leftweight > 0 ) + result["left"] = leftweight; + else + result["right"] = -1 * leftweight; + } + else + { + backweight = -1 * forwardweight; + + if ( leftweight > backweight ) + result["left"] = 1; + else if ( leftweight < forwardweight ) + result["right"] = 1; + else + result["back"] = 1; + } + + return result; +} + +getquadrant( angle ) +{ + angle = angleclamp( angle ); + + if ( angle < 45 || angle > 315 ) + quadrant = "front"; + else if ( angle < 135 ) + quadrant = "left"; + else if ( angle < 225 ) + quadrant = "back"; + else + quadrant = "right"; + + return quadrant; +} + +isinset( input, set ) +{ + for ( i = set.size - 1; i >= 0; i-- ) + { + if ( input == set[i] ) + return true; + } + + return false; +} + +notifyaftertime( notifystring, killmestring, time ) +{ + self endon( "death" ); + self endon( killmestring ); + wait( time ); + self notify( notifystring ); +} + +drawstringtime( msg, org, color, timer ) +{ +/# + maxtime = timer * 20; + + for ( i = 0; i < maxtime; i++ ) + { + print3d( org, msg, color, 1, 1 ); + wait 0.05; + } +#/ +} + +showlastenemysightpos( string ) +{ +/# + self notify( "got known enemy2" ); + self endon( "got known enemy2" ); + self endon( "death" ); + + if ( !isvalidenemy( self.enemy ) ) + return; + + if ( self.enemy.team == "allies" ) + color = ( 0.4, 0.7, 1 ); + else + color = ( 1, 0.7, 0.4 ); + + while ( true ) + { + wait 0.05; + + if ( !isdefined( self.lastenemysightpos ) ) + continue; + + print3d( self.lastenemysightpos, string, color, 1, 2.15 ); + } +#/ +} + +debugtimeout() +{ + wait 5; + self notify( "timeout" ); +} + +debugposinternal( org, string, size ) +{ +/# + self endon( "death" ); + self notify( "stop debug " + org ); + self endon( "stop debug " + org ); + ent = spawnstruct(); + ent thread debugtimeout(); + ent endon( "timeout" ); + + if ( self.enemy.team == "allies" ) + color = ( 0.4, 0.7, 1 ); + else + color = ( 1, 0.7, 0.4 ); + + while ( true ) + { + wait 0.05; + print3d( org, string, color, 1, size ); + } +#/ +} + +debugpos( org, string ) +{ + thread debugposinternal( org, string, 2.15 ); +} + +debugpossize( org, string, size ) +{ + thread debugposinternal( org, string, size ); +} + +showdebugproc( frompoint, topoint, color, printtime ) +{ +/# + self endon( "death" ); + timer = printtime * 20; + + for ( i = 0; i < timer; i += 1 ) + { + wait 0.05; + line( frompoint, topoint, color ); + } +#/ +} + +showdebugline( frompoint, topoint, color, printtime ) +{ + self thread showdebugproc( frompoint, topoint + vectorscale( ( 0, 0, -1 ), 5.0 ), color, printtime ); +} + +getnodeoffset( node ) +{ + if ( isdefined( node.offset ) ) + return node.offset; + + cover_left_crouch_offset = ( -26, 0.4, 36 ); + cover_left_stand_offset = ( -32, 7, 63 ); + cover_right_crouch_offset = ( 43.5, 11, 36 ); + cover_right_stand_offset = ( 36, 8.3, 63 ); + cover_crouch_offset = ( 3.5, -12.5, 45 ); + cover_stand_offset = ( -3.7, -22, 63 ); + cornernode = 0; + nodeoffset = ( 0, 0, 0 ); + right = anglestoright( node.angles ); + forward = anglestoforward( node.angles ); + + switch ( node.type ) + { + case "Cover Left Wide": + case "Cover Left": + if ( node isnodedontstand() && !node isnodedontcrouch() ) + nodeoffset = calculatenodeoffset( right, forward, cover_left_crouch_offset ); + else + nodeoffset = calculatenodeoffset( right, forward, cover_left_stand_offset ); + + break; + case "Cover Right Wide": + case "Cover Right": + if ( node isnodedontstand() && !node isnodedontcrouch() ) + nodeoffset = calculatenodeoffset( right, forward, cover_right_crouch_offset ); + else + nodeoffset = calculatenodeoffset( right, forward, cover_right_stand_offset ); + + break; + case "Turret": + case "Cover Stand": + case "Conceal Stand": + nodeoffset = calculatenodeoffset( right, forward, cover_stand_offset ); + break; + case "Cover Crouch Window": + case "Cover Crouch": + case "Conceal Crouch": + nodeoffset = calculatenodeoffset( right, forward, cover_crouch_offset ); + break; + } + + node.offset = nodeoffset; + return node.offset; +} + +calculatenodeoffset( right, forward, baseoffset ) +{ + return vectorscale( right, baseoffset[0] ) + vectorscale( forward, baseoffset[1] ) + ( 0, 0, baseoffset[2] ); +} + +checkpitchvisibility( frompoint, topoint, atnode ) +{ + pitch = angleclamp180( vectortoangles( topoint - frompoint )[0] ); + + if ( abs( pitch ) > 45 ) + { + if ( isdefined( atnode ) && atnode.type != "Cover Crouch" && atnode.type != "Conceal Crouch" ) + return false; + + if ( pitch > 45 || pitch < anim.covercrouchleanpitch - 45 ) + return false; + } + + return true; +} + +showlines( start, end, end2 ) +{ +/# + for (;;) + { + line( start, end, ( 1, 0, 0 ), 1 ); + wait 0.05; + line( start, end2, ( 0, 0, 1 ), 1 ); + wait 0.05; + } +#/ +} + +anim_array( animarray, animweights ) +{ + total_anims = animarray.size; + idleanim = randomint( total_anims ); + assert( total_anims ); + assert( animarray.size == animweights.size ); + + if ( total_anims == 1 ) + return animarray[0]; + + weights = 0; + total_weight = 0; + + for ( i = 0; i < total_anims; i++ ) + total_weight += animweights[i]; + + anim_play = randomfloat( total_weight ); + current_weight = 0; + + for ( i = 0; i < total_anims; i++ ) + { + current_weight += animweights[i]; + + if ( anim_play >= current_weight ) + continue; + + idleanim = i; + break; + } + + return animarray[idleanim]; +} + +notforcedcover() +{ + return self.a.forced_cover == "none" || self.a.forced_cover == "Show"; +} + +forcedcover( msg ) +{ + return isdefined( self.a.forced_cover ) && self.a.forced_cover == msg; +} + +print3dtime( timer, org, msg, color, alpha, scale ) +{ +/# + newtime = timer / 0.05; + + for ( i = 0; i < newtime; i++ ) + { + print3d( org, msg, color, alpha, scale ); + wait 0.05; + } +#/ +} + +print3drise( org, msg, color, alpha, scale ) +{ +/# + newtime = 100.0; + up = 0; + org = org; + + for ( i = 0; i < newtime; i++ ) + { + up += 0.5; + print3d( org + ( 0, 0, up ), msg, color, alpha, scale ); + wait 0.05; + } +#/ +} + +crossproduct( vec1, vec2 ) +{ + return vec1[0] * vec2[1] - vec1[1] * vec2[0] > 0; +} + +scriptchange() +{ + self.a.current_script = "none"; + self notify( anim.scriptchange ); +} + +delayedscriptchange() +{ + wait 0.05; + scriptchange(); +} + +getgrenademodel() +{ + return getweaponmodel( self.grenadeweapon ); +} + +sawenemymove( timer = 500 ) +{ + return gettime() - self.personalsighttime < timer; +} + +canthrowgrenade() +{ + if ( !self.grenadeammo ) + return 0; + + if ( self.script_forcegrenade ) + return 1; + + return isplayer( self.enemy ); +} + +random_weight( array ) +{ + idleanim = randomint( array.size ); + + if ( array.size > 1 ) + { + anim_weight = 0; + + for ( i = 0; i < array.size; i++ ) + anim_weight += array[i]; + + anim_play = randomfloat( anim_weight ); + anim_weight = 0; + + for ( i = 0; i < array.size; i++ ) + { + anim_weight += array[i]; + + if ( anim_play < anim_weight ) + { + idleanim = i; + break; + } + } + } + + return idleanim; +} + +setfootstepeffect( name, fx ) +{ + assert( isdefined( name ), "Need to define the footstep surface type." ); + assert( isdefined( fx ), "Need to define the mud footstep effect." ); + + if ( !isdefined( anim.optionalstepeffects ) ) + anim.optionalstepeffects = []; + + anim.optionalstepeffects[anim.optionalstepeffects.size] = name; + level._effect["step_" + name] = fx; + anim.optionalstepeffectfunction = maps\mp\animscripts\zm_shared::playfootstepeffect; +} + +persistentdebugline( start, end ) +{ +/# + self endon( "death" ); + level notify( "newdebugline" ); + level endon( "newdebugline" ); + + for (;;) + { + line( start, end, ( 0.3, 1, 0 ), 1 ); + wait 0.05; + } +#/ +} + +isnodedontstand() +{ + return ( self.spawnflags & 4 ) == 4; +} + +isnodedontcrouch() +{ + return ( self.spawnflags & 8 ) == 8; +} + +doesnodeallowstance( stance ) +{ + if ( stance == "stand" ) + return !self isnodedontstand(); + else + { + assert( stance == "crouch" ); + return !self isnodedontcrouch(); + } +} + +animarray( animname ) +{ + assert( isdefined( self.a.array ) ); +/# + if ( !isdefined( self.a.array[animname] ) ) + { + dumpanimarray(); + assert( isdefined( self.a.array[animname] ), "self.a.array[ \"" + animname + "\" ] is undefined" ); + } +#/ + return self.a.array[animname]; +} + +animarrayanyexist( animname ) +{ + assert( isdefined( self.a.array ) ); +/# + if ( !isdefined( self.a.array[animname] ) ) + { + dumpanimarray(); + assert( isdefined( self.a.array[animname] ), "self.a.array[ \"" + animname + "\" ] is undefined" ); + } +#/ + return self.a.array[animname].size > 0; +} + +animarraypickrandom( animname ) +{ + assert( isdefined( self.a.array ) ); +/# + if ( !isdefined( self.a.array[animname] ) ) + { + dumpanimarray(); + assert( isdefined( self.a.array[animname] ), "self.a.array[ \"" + animname + "\" ] is undefined" ); + } +#/ + assert( self.a.array[animname].size > 0 ); + + if ( self.a.array[animname].size > 1 ) + index = randomint( self.a.array[animname].size ); + else + index = 0; + + return self.a.array[animname][index]; +} + +dumpanimarray() +{ +/# + println( "self.a.array:" ); + keys = getarraykeys( self.a.array ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( isarray( self.a.array[keys[i]] ) ) + { + println( " array[ \"" + keys[i] + "\" ] = {array of size " + self.a.array[keys[i]].size + "}" ); + continue; + } + + println( " array[ \"" + keys[i] + "\" ] = ", self.a.array[keys[i]] ); + } +#/ +} + +getanimendpos( theanim ) +{ + movedelta = getmovedelta( theanim, 0, 1 ); + return self localtoworldcoords( movedelta ); +} + +isvalidenemy( enemy ) +{ + if ( !isdefined( enemy ) ) + return false; + + return true; +} + +damagelocationisany( a, b, c, d, e, f, g, h, i, j, k, ovr ) +{ + if ( !isdefined( a ) ) + return false; + + if ( self.damagelocation == a ) + return true; + + if ( !isdefined( b ) ) + return false; + + if ( self.damagelocation == b ) + return true; + + if ( !isdefined( c ) ) + return false; + + if ( self.damagelocation == c ) + return true; + + if ( !isdefined( d ) ) + return false; + + if ( self.damagelocation == d ) + return true; + + if ( !isdefined( e ) ) + return false; + + if ( self.damagelocation == e ) + return true; + + if ( !isdefined( f ) ) + return false; + + if ( self.damagelocation == f ) + return true; + + if ( !isdefined( g ) ) + return false; + + if ( self.damagelocation == g ) + return true; + + if ( !isdefined( h ) ) + return false; + + if ( self.damagelocation == h ) + return true; + + if ( !isdefined( i ) ) + return false; + + if ( self.damagelocation == i ) + return true; + + if ( !isdefined( j ) ) + return false; + + if ( self.damagelocation == j ) + return true; + + if ( !isdefined( k ) ) + return false; + + if ( self.damagelocation == k ) + return true; + + assert( !isdefined( ovr ) ); + return false; +} + +ragdolldeath( moveanim ) +{ + self endon( "killanimscript" ); + lastorg = self.origin; + movevec = ( 0, 0, 0 ); + + for (;;) + { + wait 0.05; + force = distance( self.origin, lastorg ); + lastorg = self.origin; + + if ( self.health == 1 ) + { + self.a.nodeath = 1; + self startragdoll(); + wait 0.05; + physicsexplosionsphere( lastorg, 600, 0, force * 0.1 ); + self notify( "killanimscript" ); + return; + } + } +} + +iscqbwalking() +{ + return isdefined( self.cqbwalking ) && self.cqbwalking; +} + +squared( value ) +{ + return value * value; +} + +randomizeidleset() +{ + self.a.idleset = randomint( 2 ); +} + +getrandomintfromseed( intseed, intmax ) +{ + assert( intmax > 0 ); + index = intseed % anim.randominttablesize; + return anim.randominttable[index] % intmax; +} + +is_banzai() +{ + return isdefined( self.banzai ) && self.banzai; +} + +is_heavy_machine_gun() +{ + return isdefined( self.heavy_machine_gunner ) && self.heavy_machine_gunner; +} + +is_zombie() +{ + if ( isdefined( self.is_zombie ) && self.is_zombie ) + return true; + + return false; +} + +is_civilian() +{ + if ( isdefined( self.is_civilian ) && self.is_civilian ) + return true; + + return false; +} + +is_zombie_gibbed() +{ + return self is_zombie() && self.gibbed; +} + +set_zombie_gibbed() +{ + if ( self is_zombie() ) + self.gibbed = 1; +} + +is_skeleton( skeleton ) +{ + if ( skeleton == "base" && issubstr( get_skeleton(), "scaled" ) ) + return 1; + + return get_skeleton() == skeleton; +} + +get_skeleton() +{ + if ( isdefined( self.skeleton ) ) + return self.skeleton; + else + return "base"; +} + +debug_anim_print( text ) +{ +/# + if ( isdefined( level.dog_debug_anims ) && level.dog_debug_anims ) + println( text + " " + gettime() ); + + if ( isdefined( level.dog_debug_anims_ent ) && level.dog_debug_anims_ent == self getentnum() ) + println( text + " " + gettime() ); +#/ +} + +debug_turn_print( text, line ) +{ +/# + if ( isdefined( level.dog_debug_turns ) && level.dog_debug_turns == self getentnum() ) + { + duration = 200; + currentyawcolor = ( 1, 1, 1 ); + lookaheadyawcolor = ( 1, 0, 0 ); + desiredyawcolor = ( 1, 1, 0 ); + currentyaw = angleclamp180( self.angles[1] ); + desiredyaw = angleclamp180( self.desiredangle ); + lookaheaddir = self.lookaheaddir; + lookaheadangles = vectortoangles( lookaheaddir ); + lookaheadyaw = angleclamp180( lookaheadangles[1] ); + println( text + " " + gettime() + " cur: " + currentyaw + " look: " + lookaheadyaw + " desired: " + desiredyaw ); + } +#/ +} + +play_sound_on_tag_endon_death( alias, tag ) +{ + maps\mp\_utility::play_sound_on_tag( alias, tag ); +} + +play_sound_in_space( alias, origin, master ) +{ + org = spawn( "script_origin", ( 0, 0, 1 ) ); + + if ( !isdefined( origin ) ) + origin = self.origin; + + org.origin = origin; + + if ( isdefined( master ) && master ) + org playsoundasmaster( alias ); + else + org playsound( alias ); + + if ( isdefined( org ) ) + org delete(); +} + +wait_network_frame() +{ + if ( numremoteclients() ) + { + snapshot_ids = getsnapshotindexarray(); + + for ( acked = undefined; !isdefined( acked ); acked = snapshotacknowledged( snapshot_ids ) ) + level waittill( "snapacknowledged" ); + } + else + wait 0.1; +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_callbacksetup.gsc b/ZM/Core/maps/mp/gametypes_zm/_callbacksetup.gsc new file mode 100644 index 0000000..66a5537 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_callbacksetup.gsc @@ -0,0 +1,215 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_audio; +#include maps\mp\gametypes_zm\_globallogic; +#include maps\mp\gametypes_zm\_globallogic_player; +#include maps\mp\gametypes_zm\_globallogic_actor; +#include maps\mp\gametypes_zm\_hostmigration; + +codecallback_startgametype() +{ + if ( !isdefined( level.gametypestarted ) || !level.gametypestarted ) + { + [[ level.callbackstartgametype ]](); + level.gametypestarted = 1; + } +} + +codecallback_finalizeinitialization() +{ + maps\mp\_utility::callback( "on_finalize_initialization" ); +} + +codecallback_playerconnect() +{ + self endon( "disconnect" ); + self thread maps\mp\_audio::monitor_player_sprint(); + [[ level.callbackplayerconnect ]](); +} + +codecallback_playerdisconnect() +{ + self notify( "disconnect" ); + client_num = self getentitynumber(); + [[ level.callbackplayerdisconnect ]](); +} + +codecallback_hostmigration() +{ +/# + println( "****CodeCallback_HostMigration****" ); +#/ + [[ level.callbackhostmigration ]](); +} + +codecallback_hostmigrationsave() +{ +/# + println( "****CodeCallback_HostMigrationSave****" ); +#/ + [[ level.callbackhostmigrationsave ]](); +} + +codecallback_prehostmigrationsave() +{ +/# + println( "****CodeCallback_PreHostMigrationSave****" ); +#/ + [[ level.callbackprehostmigrationsave ]](); +} + +codecallback_playermigrated() +{ +/# + println( "****CodeCallback_PlayerMigrated****" ); +#/ + [[ level.callbackplayermigrated ]](); +} + +codecallback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) +{ + self endon( "disconnect" ); + [[ level.callbackplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ); +} + +codecallback_playerkilled( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ) +{ + self endon( "disconnect" ); + [[ level.callbackplayerkilled ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ); +} + +codecallback_playerlaststand( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ) +{ + self endon( "disconnect" ); + [[ level.callbackplayerlaststand ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ); +} + +codecallback_playermelee( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit ) +{ + self endon( "disconnect" ); + [[ level.callbackplayermelee ]]( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit ); +} + +codecallback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) +{ + [[ level.callbackactordamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ); +} + +codecallback_actorkilled( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset ) +{ + [[ level.callbackactorkilled ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset ); +} + +codecallback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, damagefromunderneath, modelindex, partname ) +{ + [[ level.callbackvehicledamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, damagefromunderneath, modelindex, partname ); +} + +codecallback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, timeoffset ) +{ + +} + +codecallback_faceeventnotify( notify_msg, ent ) +{ + if ( isdefined( ent ) && isdefined( ent.do_face_anims ) && ent.do_face_anims ) + { + if ( isdefined( level.face_event_handler ) && isdefined( level.face_event_handler.events[notify_msg] ) ) + ent sendfaceevent( level.face_event_handler.events[notify_msg] ); + } +} + +codecallback_menuresponse( action, arg ) +{ + if ( !isdefined( level.menuresponsequeue ) ) + { + level.menuresponsequeue = []; + level thread menuresponsequeuepump(); + } + + index = level.menuresponsequeue.size; + level.menuresponsequeue[index] = spawnstruct(); + level.menuresponsequeue[index].action = action; + level.menuresponsequeue[index].arg = arg; + level.menuresponsequeue[index].ent = self; + level notify( "menuresponse_queue" ); +} + +menuresponsequeuepump() +{ + while ( true ) + { + level waittill( "menuresponse_queue" ); + + do + { + level.menuresponsequeue[0].ent notify( "menuresponse", level.menuresponsequeue[0].action, level.menuresponsequeue[0].arg ); + arrayremoveindex( level.menuresponsequeue, 0, 0 ); + wait 0.05; + } + while ( level.menuresponsequeue.size > 0 ); + } +} + +setupcallbacks() +{ + setdefaultcallbacks(); + level.idflags_radius = 1; + level.idflags_no_armor = 2; + level.idflags_no_knockback = 4; + level.idflags_penetration = 8; + level.idflags_destructible_entity = 16; + level.idflags_shield_explosive_impact = 32; + level.idflags_shield_explosive_impact_huge = 64; + level.idflags_shield_explosive_splash = 128; + level.idflags_no_team_protection = 256; + level.idflags_no_protection = 512; + level.idflags_passthru = 1024; +} + +setdefaultcallbacks() +{ + level.callbackstartgametype = maps\mp\gametypes_zm\_globallogic::callback_startgametype; + level.callbackplayerconnect = maps\mp\gametypes_zm\_globallogic_player::callback_playerconnect; + level.callbackplayerdisconnect = maps\mp\gametypes_zm\_globallogic_player::callback_playerdisconnect; + level.callbackplayerdamage = maps\mp\gametypes_zm\_globallogic_player::callback_playerdamage; + level.callbackplayerkilled = maps\mp\gametypes_zm\_globallogic_player::callback_playerkilled; + level.callbackplayermelee = maps\mp\gametypes_zm\_globallogic_player::callback_playermelee; + level.callbackplayerlaststand = maps\mp\gametypes_zm\_globallogic_player::callback_playerlaststand; + level.callbackactordamage = maps\mp\gametypes_zm\_globallogic_actor::callback_actordamage; + level.callbackactorkilled = maps\mp\gametypes_zm\_globallogic_actor::callback_actorkilled; + level.callbackplayermigrated = maps\mp\gametypes_zm\_globallogic_player::callback_playermigrated; + level.callbackhostmigration = maps\mp\gametypes_zm\_hostmigration::callback_hostmigration; + level.callbackhostmigrationsave = maps\mp\gametypes_zm\_hostmigration::callback_hostmigrationsave; + level.callbackprehostmigrationsave = maps\mp\gametypes_zm\_hostmigration::callback_prehostmigrationsave; +} + +abortlevel() +{ +/# + println( "ERROR: Aborting level - gametype is not supported" ); +#/ + level.callbackstartgametype = ::callbackvoid; + level.callbackplayerconnect = ::callbackvoid; + level.callbackplayerdisconnect = ::callbackvoid; + level.callbackplayerdamage = ::callbackvoid; + level.callbackplayerkilled = ::callbackvoid; + level.callbackplayermelee = ::callbackvoid; + level.callbackplayerlaststand = ::callbackvoid; + level.callbackactordamage = ::callbackvoid; + level.callbackactorkilled = ::callbackvoid; + level.callbackvehicledamage = ::callbackvoid; + setdvar( "g_gametype", "dm" ); + exitlevel( 0 ); +} + +codecallback_glasssmash( pos, dir ) +{ + level notify( "glass_smash", pos, dir ); +} + +callbackvoid() +{ + +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_clientids.gsc b/ZM/Core/maps/mp/gametypes_zm/_clientids.gsc new file mode 100644 index 0000000..7611d6b --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_clientids.gsc @@ -0,0 +1,19 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +init() +{ + level.clientid = 0; + level thread onplayerconnect(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player.clientid = level.clientid; + level.clientid++; + } +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_damagefeedback.gsc b/ZM/Core/maps/mp/gametypes_zm/_damagefeedback.gsc new file mode 100644 index 0000000..0b61988 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_damagefeedback.gsc @@ -0,0 +1,166 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +init() +{ + precacheshader( "damage_feedback" ); + precacheshader( "damage_feedback_flak" ); + precacheshader( "damage_feedback_tac" ); + level thread onplayerconnect(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player.hud_damagefeedback = newdamageindicatorhudelem( player ); + player.hud_damagefeedback.horzalign = "center"; + player.hud_damagefeedback.vertalign = "middle"; + player.hud_damagefeedback.x = -12; + player.hud_damagefeedback.y = -12; + player.hud_damagefeedback.alpha = 0; + player.hud_damagefeedback.archived = 1; + player.hud_damagefeedback setshader( "damage_feedback", 24, 48 ); + player.hitsoundtracker = 1; + } +} + +updatedamagefeedback( mod, inflictor, perkfeedback ) +{ + if ( !isplayer( self ) || sessionmodeiszombiesgame() ) + return; + + if ( isdefined( mod ) && mod != "MOD_CRUSH" && mod != "MOD_GRENADE_SPLASH" && mod != "MOD_HIT_BY_OBJECT" ) + { + if ( isdefined( inflictor ) && isdefined( inflictor.soundmod ) ) + { + switch ( inflictor.soundmod ) + { + case "player": + self thread playhitsound( mod, "mpl_hit_alert" ); + break; + case "heli": + self thread playhitsound( mod, "mpl_hit_alert_air" ); + break; + case "hpm": + self thread playhitsound( mod, "mpl_hit_alert_hpm" ); + break; + case "taser_spike": + self thread playhitsound( mod, "mpl_hit_alert_taser_spike" ); + break; + case "straferun": + case "dog": + break; + case "default_loud": + self thread playhitsound( mod, "mpl_hit_heli_gunner" ); + break; + default: + self thread playhitsound( mod, "mpl_hit_alert_low" ); + break; + } + } + else + self thread playhitsound( mod, "mpl_hit_alert_low" ); + } + + if ( isdefined( perkfeedback ) ) + { + switch ( perkfeedback ) + { + case "flakjacket": + self.hud_damagefeedback setshader( "damage_feedback_flak", 24, 48 ); + break; + case "tacticalMask": + self.hud_damagefeedback setshader( "damage_feedback_tac", 24, 48 ); + break; + } + } + else + self.hud_damagefeedback setshader( "damage_feedback", 24, 48 ); + + self.hud_damagefeedback.alpha = 1; + self.hud_damagefeedback fadeovertime( 1 ); + self.hud_damagefeedback.alpha = 0; +} + +playhitsound( mod, alert ) +{ + self endon( "disconnect" ); + + if ( self.hitsoundtracker ) + { + self.hitsoundtracker = 0; + self playlocalsound( alert ); + wait 0.05; + self.hitsoundtracker = 1; + } +} + +updatespecialdamagefeedback( hitent ) +{ + if ( !isplayer( self ) ) + return; + + if ( !isdefined( hitent ) ) + return; + + if ( !isplayer( hitent ) ) + return; + + wait 0.05; + + if ( !isdefined( self.directionalhitarray ) ) + { + self.directionalhitarray = []; + hitentnum = hitent getentitynumber(); + self.directionalhitarray[hitentnum] = 1; + self thread sendhitspecialeventatframeend( hitent ); + } + else + { + hitentnum = hitent getentitynumber(); + self.directionalhitarray[hitentnum] = 1; + } +} + +sendhitspecialeventatframeend( hitent ) +{ + self endon( "disconnect" ); + waittillframeend; + enemyshit = 0; + value = 1; + entbitarray0 = 0; + + for ( i = 0; i < 32; i++ ) + { + if ( isdefined( self.directionalhitarray[i] ) && self.directionalhitarray[i] != 0 ) + { + entbitarray0 += value; + enemyshit++; + } + + value *= 2; + } + + entbitarray1 = 0; + + for ( i = 33; i < 64; i++ ) + { + if ( isdefined( self.directionalhitarray[i] ) && self.directionalhitarray[i] != 0 ) + { + entbitarray1 += value; + enemyshit++; + } + + value *= 2; + } + + if ( enemyshit ) + self directionalhitindicator( entbitarray0, entbitarray1 ); + + self.directionalhitarray = undefined; + entbitarray0 = 0; + entbitarray1 = 0; +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_dev.gsc b/ZM/Core/maps/mp/gametypes_zm/_dev.gsc new file mode 100644 index 0000000..0dee973 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_dev.gsc @@ -0,0 +1,90 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; + +init() +{ +/# + for (;;) + { + updatedevsettingszm(); + wait 0.5; + } +#/ +} + +updatedevsettingszm() +{ +/# + if ( level.players.size > 0 ) + { + if ( getdvar( "r_streamDumpDistance" ) == "3" ) + { + if ( !isdefined( level.streamdumpteamindex ) ) + level.streamdumpteamindex = 0; + else + level.streamdumpteamindex++; + + numpoints = 0; + spawnpoints = []; + location = level.scr_zm_map_start_location; + + if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) ) + location = level.default_start_location; + + match_string = level.scr_zm_ui_gametype + "_" + location; + + if ( level.streamdumpteamindex < level.teams.size ) + { + structs = getstructarray( "initial_spawn", "script_noteworthy" ); + + if ( isdefined( structs ) ) + { + foreach ( struct in structs ) + { + if ( isdefined( struct.script_string ) ) + { + tokens = strtok( struct.script_string, " " ); + + foreach ( token in tokens ) + { + if ( token == match_string ) + spawnpoints[spawnpoints.size] = struct; + } + } + } + } + + if ( !isdefined( spawnpoints ) || spawnpoints.size == 0 ) + spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); + + if ( isdefined( spawnpoints ) ) + numpoints = spawnpoints.size; + } + + if ( numpoints == 0 ) + { + setdvar( "r_streamDumpDistance", "0" ); + level.streamdumpteamindex = -1; + } + else + { + averageorigin = ( 0, 0, 0 ); + averageangles = ( 0, 0, 0 ); + + foreach ( spawnpoint in spawnpoints ) + { + averageorigin += spawnpoint.origin / numpoints; + averageangles += spawnpoint.angles / numpoints; + } + + level.players[0] setplayerangles( averageangles ); + level.players[0] setorigin( averageorigin ); + wait 0.05; + setdvar( "r_streamDumpDistance", "2" ); + } + } + } +#/ +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_gameobjects.gsc b/ZM/Core/maps/mp/gametypes_zm/_gameobjects.gsc new file mode 100644 index 0000000..a5d4059 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_gameobjects.gsc @@ -0,0 +1,2374 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\gametypes_zm\_weapons; +#include maps\mp\gametypes_zm\_hostmigration; +#include maps\mp\gametypes_zm\_tweakables; + +main( allowed ) +{ + level.vehiclesenabled = getgametypesetting( "vehiclesEnabled" ); + level.vehiclestimed = getgametypesetting( "vehiclesTimed" ); + level.objectivepingdelay = getgametypesetting( "objectivePingTime" ); + level.nonteambasedteam = "allies"; +/# + if ( level.script == "mp_vehicle_test" ) + level.vehiclesenabled = 1; +#/ + if ( level.vehiclesenabled ) + { + allowed[allowed.size] = "vehicle"; + filter_script_vehicles_from_vehicle_descriptors( allowed ); + } + + entities = getentarray(); + + for ( entity_index = entities.size - 1; entity_index >= 0; entity_index-- ) + { + entity = entities[entity_index]; + + if ( !entity_is_allowed( entity, allowed ) ) + entity delete(); + } +} + +entity_is_allowed( entity, allowed_game_modes ) +{ + if ( isdefined( level.createfx_enabled ) && level.createfx_enabled ) + return 1; + + allowed = 1; + + if ( isdefined( entity.script_gameobjectname ) && entity.script_gameobjectname != "[all_modes]" ) + { + allowed = 0; + gameobjectnames = strtok( entity.script_gameobjectname, " " ); + + for ( i = 0; i < allowed_game_modes.size && !allowed; i++ ) + { + for ( j = 0; j < gameobjectnames.size && !allowed; j++ ) + allowed = gameobjectnames[j] == allowed_game_modes[i]; + } + } + + return allowed; +} + +location_is_allowed( entity, location ) +{ + allowed = 1; + location_list = undefined; + + if ( isdefined( entity.script_noteworthy ) ) + location_list = entity.script_noteworthy; + + if ( isdefined( entity.script_location ) ) + location_list = entity.script_location; + + if ( isdefined( location_list ) ) + { + if ( location_list == "[all_modes]" ) + allowed = 1; + else + { + allowed = 0; + gameobjectlocations = strtok( location_list, " " ); + + for ( j = 0; j < gameobjectlocations.size; j++ ) + { + if ( gameobjectlocations[j] == location ) + { + allowed = 1; + break; + } + } + } + } + + return allowed; +} + +filter_script_vehicles_from_vehicle_descriptors( allowed_game_modes ) +{ + vehicle_descriptors = getentarray( "vehicle_descriptor", "targetname" ); + script_vehicles = getentarray( "script_vehicle", "classname" ); + vehicles_to_remove = []; + + for ( descriptor_index = 0; descriptor_index < vehicle_descriptors.size; descriptor_index++ ) + { + descriptor = vehicle_descriptors[descriptor_index]; + closest_distance_sq = 1000000000000.0; + closest_vehicle = undefined; + + for ( vehicle_index = 0; vehicle_index < script_vehicles.size; vehicle_index++ ) + { + vehicle = script_vehicles[vehicle_index]; + dsquared = distancesquared( vehicle getorigin(), descriptor getorigin() ); + + if ( dsquared < closest_distance_sq ) + { + closest_distance_sq = dsquared; + closest_vehicle = vehicle; + } + } + + if ( isdefined( closest_vehicle ) ) + { + if ( !entity_is_allowed( descriptor, allowed_game_modes ) ) + vehicles_to_remove[vehicles_to_remove.size] = closest_vehicle; + } + } + + for ( vehicle_index = 0; vehicle_index < vehicles_to_remove.size; vehicle_index++ ) + vehicles_to_remove[vehicle_index] delete(); +} + +init() +{ + level.numgametypereservedobjectives = 0; + level.releasedobjectives = []; + + if ( !sessionmodeiszombiesgame() ) + { + precacheitem( "briefcase_bomb_mp" ); + precacheitem( "briefcase_bomb_defuse_mp" ); + } + + level thread onplayerconnect(); +} + +onplayerconnect() +{ + level endon( "game_ended" ); + + for (;;) + { + level waittill( "connecting", player ); + + player thread onplayerspawned(); + player thread ondisconnect(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + level endon( "game_ended" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread ondeath(); + self.touchtriggers = []; + self.carryobject = undefined; + self.claimtrigger = undefined; + self.canpickupobject = 1; + self.disabledweapon = 0; + self.killedinuse = undefined; + } +} + +ondeath() +{ + level endon( "game_ended" ); + self endon( "spawned_player" ); + + self waittill( "death" ); + + if ( isdefined( self.carryobject ) ) + self.carryobject thread setdropped(); +} + +ondisconnect() +{ + level endon( "game_ended" ); + + self waittill( "disconnect" ); + + if ( isdefined( self.carryobject ) ) + self.carryobject thread setdropped(); +} + +createcarryobject( ownerteam, trigger, visuals, offset, objectivename ) +{ + carryobject = spawnstruct(); + carryobject.type = "carryObject"; + carryobject.curorigin = trigger.origin; + carryobject.ownerteam = ownerteam; + carryobject.entnum = trigger getentitynumber(); + + if ( issubstr( trigger.classname, "use" ) ) + carryobject.triggertype = "use"; + else + carryobject.triggertype = "proximity"; + + trigger.baseorigin = trigger.origin; + carryobject.trigger = trigger; + carryobject.useweapon = undefined; + + if ( !isdefined( offset ) ) + offset = ( 0, 0, 0 ); + + carryobject.offset3d = offset; + carryobject.newstyle = 0; + + if ( isdefined( objectivename ) ) + carryobject.newstyle = 1; + else + objectivename = &""; + + for ( index = 0; index < visuals.size; index++ ) + { + visuals[index].baseorigin = visuals[index].origin; + visuals[index].baseangles = visuals[index].angles; + } + + carryobject.visuals = visuals; + carryobject.compassicons = []; + carryobject.objid = []; + + if ( !carryobject.newstyle ) + { + foreach ( team in level.teams ) + carryobject.objid[team] = getnextobjid(); + } + + carryobject.objidpingfriendly = 0; + carryobject.objidpingenemy = 0; + level.objidstart += 2; + carryobject.objectiveid = getnextobjid(); + objective_add( carryobject.objectiveid, "invisible", carryobject.curorigin, objectivename ); + carryobject.carrier = undefined; + carryobject.isresetting = 0; + carryobject.interactteam = "none"; + carryobject.allowweapons = 0; + carryobject.visiblecarriermodel = undefined; + carryobject.worldicons = []; + carryobject.carriervisible = 0; + carryobject.visibleteam = "none"; + carryobject.worldiswaypoint = []; + carryobject.carryicon = undefined; + carryobject.ondrop = undefined; + carryobject.onpickup = undefined; + carryobject.onreset = undefined; + + if ( carryobject.triggertype == "use" ) + carryobject thread carryobjectusethink(); + else + carryobject thread carryobjectproxthink(); + + carryobject thread updatecarryobjectorigin(); + carryobject thread updatecarryobjectobjectiveorigin(); + return carryobject; +} + +carryobjectusethink() +{ + level endon( "game_ended" ); + self.trigger endon( "destroyed" ); + + while ( true ) + { + self.trigger waittill( "trigger", player ); + + if ( self.isresetting ) + continue; + + if ( !isalive( player ) ) + continue; + + if ( isdefined( player.laststand ) && player.laststand ) + continue; + + if ( !self caninteractwith( player ) ) + continue; + + if ( !player.canpickupobject ) + continue; + + if ( player.throwinggrenade ) + continue; + + if ( isdefined( self.carrier ) ) + continue; + + if ( player isinvehicle() ) + continue; + + if ( player isweaponviewonlylinked() ) + continue; + + if ( !player istouching( self.trigger ) ) + continue; + + self setpickedup( player ); + } +} + +carryobjectproxthink() +{ + level endon( "game_ended" ); + self.trigger endon( "destroyed" ); + + while ( true ) + { + self.trigger waittill( "trigger", player ); + + if ( self.isresetting ) + continue; + + if ( !isalive( player ) ) + continue; + + if ( isdefined( player.laststand ) && player.laststand ) + continue; + + if ( !self caninteractwith( player ) ) + continue; + + if ( !player.canpickupobject ) + continue; + + if ( player.throwinggrenade ) + continue; + + if ( isdefined( self.carrier ) ) + continue; + + if ( player isinvehicle() ) + continue; + + if ( player isweaponviewonlylinked() ) + continue; + + if ( !player istouching( self.trigger ) ) + continue; + + self setpickedup( player ); + } +} + +pickupobjectdelay( origin ) +{ + level endon( "game_ended" ); + self endon( "death" ); + self endon( "disconnect" ); + self.canpickupobject = 0; + + for (;;) + { + if ( distancesquared( self.origin, origin ) > 4096 ) + break; + + wait 0.2; + } + + self.canpickupobject = 1; +} + +setpickedup( player ) +{ + if ( isdefined( player.carryobject ) ) + { + if ( isdefined( player.carryobject.swappable ) && player.carryobject.swappable ) + player.carryobject thread setdropped(); + else + { + if ( isdefined( self.onpickupfailed ) ) + self [[ self.onpickupfailed ]]( player ); + + return; + } + } + + player giveobject( self ); + self setcarrier( player ); + + for ( index = 0; index < self.visuals.size; index++ ) + self.visuals[index] thread hideobject(); + + self.trigger.origin += vectorscale( ( 0, 0, 1 ), 10000.0 ); + self notify( "pickup_object" ); + + if ( isdefined( self.onpickup ) ) + self [[ self.onpickup ]]( player ); + + self updatecompassicons(); + self updateworldicons(); + self updateobjective(); +} + +hideobject() +{ + radius = 32; + origin = self.origin; + grenades = getentarray( "grenade", "classname" ); + radiussq = radius * radius; + linkedgrenades = []; + linkedgrenadesindex = 0; + self hide(); + + for ( i = 0; i < grenades.size; i++ ) + { + if ( distancesquared( origin, grenades[i].origin ) < radiussq ) + { + if ( grenades[i] islinkedto( self ) ) + { + linkedgrenades[linkedgrenadesindex] = grenades[i]; + linkedgrenades[linkedgrenadesindex] unlink(); + linkedgrenadesindex++; + } + } + } + + self.origin += vectorscale( ( 0, 0, 1 ), 10000.0 ); + waittillframeend; + + for ( i = 0; i < linkedgrenadesindex; i++ ) + linkedgrenades[i] launch( vectorscale( ( 1, 1, 1 ), 5.0 ) ); +} + +updatecarryobjectorigin() +{ + level endon( "game_ended" ); + self.trigger endon( "destroyed" ); + + if ( self.newstyle ) + return; + + objpingdelay = level.objectivepingdelay; + + for (;;) + { + if ( isdefined( self.carrier ) && level.teambased ) + { + self.curorigin = self.carrier.origin + vectorscale( ( 0, 0, 1 ), 75.0 ); + + if ( ( self.visibleteam == "friendly" || self.visibleteam == "any" ) && self.objidpingfriendly ) + { + foreach ( team in level.teams ) + { + if ( self isfriendlyteam( team ) ) + { + if ( self.objpoints[team].isshown ) + { + self.objpoints[team].alpha = self.objpoints[team].basealpha; + self.objpoints[team] fadeovertime( objpingdelay + 1.0 ); + self.objpoints[team].alpha = 0; + } + + objective_position( self.objid[team], self.curorigin ); + } + } + } + + if ( ( self.visibleteam == "enemy" || self.visibleteam == "any" ) && self.objidpingenemy ) + { + if ( !self isfriendlyteam( team ) ) + { + if ( self.objpoints[team].isshown ) + { + self.objpoints[team].alpha = self.objpoints[team].basealpha; + self.objpoints[team] fadeovertime( objpingdelay + 1.0 ); + self.objpoints[team].alpha = 0; + } + + objective_position( self.objid[team], self.curorigin ); + } + } + + self wait_endon( objpingdelay, "dropped", "reset" ); + continue; + } + + if ( isdefined( self.carrier ) ) + { + self.curorigin = self.carrier.origin + vectorscale( ( 0, 0, 1 ), 75.0 ); + wait 0.05; + continue; + } + + wait 0.05; + } +} + +updatecarryobjectobjectiveorigin() +{ + level endon( "game_ended" ); + self.trigger endon( "destroyed" ); + + if ( !self.newstyle ) + return; + + objpingdelay = level.objectivepingdelay; + + for (;;) + { + if ( isdefined( self.carrier ) ) + { + self.curorigin = self.carrier.origin; + objective_position( self.objectiveid, self.curorigin ); + self wait_endon( objpingdelay, "dropped", "reset" ); + continue; + } + + objective_position( self.objectiveid, self.curorigin ); + wait 0.05; + } +} + +giveobject( object ) +{ + assert( !isdefined( self.carryobject ) ); + self.carryobject = object; + self thread trackcarrier(); + + if ( !object.allowweapons ) + { + self _disableweapon(); + self thread manualdropthink(); + } + + self.disallowvehicleusage = 1; + + if ( isdefined( object.visiblecarriermodel ) ) + self maps\mp\gametypes_zm\_weapons::forcestowedweaponupdate(); + + if ( !object.newstyle ) + { + if ( isdefined( object.carryicon ) ) + { + if ( self issplitscreen() ) + { + self.carryicon = createicon( object.carryicon, 35, 35 ); + self.carryicon.x = -130; + self.carryicon.y = -90; + self.carryicon.horzalign = "right"; + self.carryicon.vertalign = "bottom"; + } + else + { + self.carryicon = createicon( object.carryicon, 50, 50 ); + + if ( !object.allowweapons ) + self.carryicon setpoint( "CENTER", "CENTER", 0, 60 ); + else + { + self.carryicon.x = 130; + self.carryicon.y = -60; + self.carryicon.horzalign = "user_left"; + self.carryicon.vertalign = "user_bottom"; + } + } + + self.carryicon.alpha = 0.75; + self.carryicon.hidewhileremotecontrolling = 1; + self.carryicon.hidewheninkillcam = 1; + } + } +} + +returnhome() +{ + self.isresetting = 1; + self notify( "reset" ); + + for ( index = 0; index < self.visuals.size; index++ ) + { + self.visuals[index].origin = self.visuals[index].baseorigin; + self.visuals[index].angles = self.visuals[index].baseangles; + self.visuals[index] show(); + } + + self.trigger.origin = self.trigger.baseorigin; + self.curorigin = self.trigger.origin; + + if ( isdefined( self.onreset ) ) + self [[ self.onreset ]](); + + self clearcarrier(); + updateworldicons(); + updatecompassicons(); + updateobjective(); + self.isresetting = 0; +} + +isobjectawayfromhome() +{ + if ( isdefined( self.carrier ) ) + return true; + + if ( distancesquared( self.trigger.origin, self.trigger.baseorigin ) > 4 ) + return true; + + return false; +} + +setposition( origin, angles ) +{ + self.isresetting = 1; + + for ( index = 0; index < self.visuals.size; index++ ) + { + visual = self.visuals[index]; + visual.origin = origin; + visual.angles = angles; + visual show(); + } + + self.trigger.origin = origin; + self.curorigin = self.trigger.origin; + self clearcarrier(); + updateworldicons(); + updatecompassicons(); + updateobjective(); + self.isresetting = 0; +} + +onplayerlaststand() +{ + if ( isdefined( self.carryobject ) ) + self.carryobject thread setdropped(); +} + +setdropped() +{ + self.isresetting = 1; + self notify( "dropped" ); + startorigin = ( 0, 0, 0 ); + endorigin = ( 0, 0, 0 ); + body = undefined; + + if ( isdefined( self.carrier ) && self.carrier.team != "spectator" ) + { + startorigin = self.carrier.origin + vectorscale( ( 0, 0, 1 ), 20.0 ); + endorigin = self.carrier.origin - vectorscale( ( 0, 0, 1 ), 2000.0 ); + body = self.carrier.body; + self.visuals[0].origin = self.carrier.origin; + } + else + { + startorigin = self.safeorigin + vectorscale( ( 0, 0, 1 ), 20.0 ); + endorigin = self.safeorigin - vectorscale( ( 0, 0, 1 ), 20.0 ); + } + + trace = playerphysicstrace( startorigin, endorigin ); + angletrace = bullettrace( startorigin, endorigin, 0, body ); + droppingplayer = self.carrier; + + if ( isdefined( trace ) ) + { + tempangle = randomfloat( 360 ); + droporigin = trace; + + if ( angletrace["fraction"] < 1 && distance( angletrace["position"], trace ) < 10.0 ) + { + forward = ( cos( tempangle ), sin( tempangle ), 0 ); + forward = vectornormalize( forward - vectorscale( angletrace["normal"], vectordot( forward, angletrace["normal"] ) ) ); + dropangles = vectortoangles( forward ); + } + else + dropangles = ( 0, tempangle, 0 ); + + for ( index = 0; index < self.visuals.size; index++ ) + { + self.visuals[index].origin = droporigin; + self.visuals[index].angles = dropangles; + self.visuals[index] show(); + } + + self.trigger.origin = droporigin; + self.curorigin = self.trigger.origin; + self thread pickuptimeout( trace[2], startorigin[2] ); + } + else + { + for ( index = 0; index < self.visuals.size; index++ ) + { + self.visuals[index].origin = self.visuals[index].baseorigin; + self.visuals[index].angles = self.visuals[index].baseangles; + self.visuals[index] show(); + } + + self.trigger.origin = self.trigger.baseorigin; + self.curorigin = self.trigger.baseorigin; + } + + if ( isdefined( self.ondrop ) ) + self [[ self.ondrop ]]( droppingplayer ); + + self clearcarrier(); + self updatecompassicons(); + self updateworldicons(); + self updateobjective(); + self.isresetting = 0; +} + +setcarrier( carrier ) +{ + self.carrier = carrier; + objective_setplayerusing( self.objectiveid, carrier ); + self thread updatevisibilityaccordingtoradar(); +} + +clearcarrier() +{ + if ( !isdefined( self.carrier ) ) + return; + + self.carrier takeobject( self ); + objective_clearplayerusing( self.objectiveid, self.carrier ); + self.carrier = undefined; + self notify( "carrier_cleared" ); +} + +shouldbereset( minz, maxz ) +{ + minetriggers = getentarray( "minefield", "targetname" ); + hurttriggers = getentarray( "trigger_hurt", "classname" ); + elevators = getentarray( "script_elevator", "targetname" ); + + for ( index = 0; index < minetriggers.size; index++ ) + { + if ( self.visuals[0] istouchingswept( minetriggers[index], minz, maxz ) ) + return true; + } + + for ( index = 0; index < hurttriggers.size; index++ ) + { + if ( self.visuals[0] istouchingswept( hurttriggers[index], minz, maxz ) ) + return true; + } + + for ( index = 0; index < elevators.size; index++ ) + { + assert( isdefined( elevators[index].occupy_volume ) ); + + if ( self.visuals[0] istouchingswept( elevators[index].occupy_volume, minz, maxz ) ) + return true; + } + + return false; +} + +pickuptimeout( minz, maxz ) +{ + self endon( "pickup_object" ); + self endon( "stop_pickup_timeout" ); + wait 0.05; + + if ( self shouldbereset( minz, maxz ) ) + { + self returnhome(); + return; + } + + if ( isdefined( self.autoresettime ) ) + { + wait( self.autoresettime ); + + if ( !isdefined( self.carrier ) ) + self returnhome(); + } +} + +takeobject( object ) +{ + if ( isdefined( self.carryicon ) ) + self.carryicon destroyelem(); + + if ( isdefined( object.visiblecarriermodel ) ) + self maps\mp\gametypes_zm\_weapons::detach_all_weapons(); + + self.carryobject = undefined; + + if ( !isalive( self ) ) + return; + + self notify( "drop_object" ); + self.disallowvehicleusage = 0; + + if ( object.triggertype == "proximity" ) + self thread pickupobjectdelay( object.trigger.origin ); + + if ( isdefined( object.visiblecarriermodel ) ) + self maps\mp\gametypes_zm\_weapons::forcestowedweaponupdate(); + + if ( !object.allowweapons ) + self _enableweapon(); +} + +trackcarrier() +{ + level endon( "game_ended" ); + self endon( "disconnect" ); + self endon( "death" ); + self endon( "drop_object" ); + + while ( isdefined( self.carryobject ) && isalive( self ) ) + { + if ( self isonground() ) + { + trace = bullettrace( self.origin + vectorscale( ( 0, 0, 1 ), 20.0 ), self.origin - vectorscale( ( 0, 0, 1 ), 20.0 ), 0, undefined ); + + if ( trace["fraction"] < 1 ) + self.carryobject.safeorigin = trace["position"]; + } + + wait 0.05; + } +} + +manualdropthink() +{ + level endon( "game_ended" ); + self endon( "disconnect" ); + self endon( "death" ); + self endon( "drop_object" ); + + for (;;) + { + while ( self attackbuttonpressed() || self fragbuttonpressed() || self secondaryoffhandbuttonpressed() || self meleebuttonpressed() ) + wait 0.05; + + while ( !self attackbuttonpressed() && !self fragbuttonpressed() && !self secondaryoffhandbuttonpressed() && !self meleebuttonpressed() ) + wait 0.05; + + if ( isdefined( self.carryobject ) && !self usebuttonpressed() ) + self.carryobject thread setdropped(); + } +} + +createuseobject( ownerteam, trigger, visuals, offset, objectivename ) +{ + useobject = spawnstruct(); + useobject.type = "useObject"; + useobject.curorigin = trigger.origin; + useobject.ownerteam = ownerteam; + useobject.entnum = trigger getentitynumber(); + useobject.keyobject = undefined; + + if ( issubstr( trigger.classname, "use" ) ) + useobject.triggertype = "use"; + else + useobject.triggertype = "proximity"; + + useobject.trigger = trigger; + + for ( index = 0; index < visuals.size; index++ ) + { + visuals[index].baseorigin = visuals[index].origin; + visuals[index].baseangles = visuals[index].angles; + } + + useobject.visuals = visuals; + + if ( !isdefined( offset ) ) + offset = ( 0, 0, 0 ); + + useobject.offset3d = offset; + useobject.newstyle = 0; + + if ( isdefined( objectivename ) ) + useobject.newstyle = 1; + else + objectivename = &""; + + useobject.compassicons = []; + useobject.objid = []; + + if ( !useobject.newstyle ) + { + foreach ( team in level.teams ) + useobject.objid[team] = getnextobjid(); + + if ( level.teambased ) + { + foreach ( team in level.teams ) + { + objective_add( useobject.objid[team], "invisible", useobject.curorigin ); + objective_team( useobject.objid[team], team ); + } + } + else + objective_add( useobject.objid[level.nonteambasedteam], "invisible", useobject.curorigin ); + } + + useobject.objectiveid = getnextobjid(); + objective_add( useobject.objectiveid, "invisible", useobject.curorigin, objectivename ); + useobject.interactteam = "none"; + useobject.worldicons = []; + useobject.visibleteam = "none"; + useobject.worldiswaypoint = []; + useobject.onuse = undefined; + useobject.oncantuse = undefined; + useobject.usetext = "default"; + useobject.usetime = 10000; + useobject clearprogress(); + useobject.decayprogress = 0; + + if ( useobject.triggertype == "proximity" ) + { + useobject.numtouching["neutral"] = 0; + useobject.numtouching["none"] = 0; + useobject.touchlist["neutral"] = []; + useobject.touchlist["none"] = []; + + foreach ( team in level.teams ) + { + useobject.numtouching[team] = 0; + useobject.touchlist[team] = []; + } + + useobject.userate = 0; + useobject.claimteam = "none"; + useobject.claimplayer = undefined; + useobject.lastclaimteam = "none"; + useobject.lastclaimtime = 0; + useobject.claimgraceperiod = 1.0; + useobject.mustmaintainclaim = 0; + useobject.cancontestclaim = 0; + useobject thread useobjectproxthink(); + } + else + { + useobject.userate = 1; + useobject thread useobjectusethink(); + } + + return useobject; +} + +setkeyobject( object ) +{ + if ( !isdefined( object ) ) + { + self.keyobject = undefined; + return; + } + + if ( !isdefined( self.keyobject ) ) + self.keyobject = []; + + self.keyobject[self.keyobject.size] = object; +} + +haskeyobject( use ) +{ + for ( x = 0; x < use.keyobject.size; x++ ) + { + if ( isdefined( self.carryobject ) && isdefined( use.keyobject[x] ) && self.carryobject == use.keyobject[x] ) + return true; + } + + return false; +} + +useobjectusethink() +{ + level endon( "game_ended" ); + self.trigger endon( "destroyed" ); + + while ( true ) + { + self.trigger waittill( "trigger", player ); + + if ( !isalive( player ) ) + continue; + + if ( !self caninteractwith( player ) ) + continue; + + if ( !player isonground() ) + continue; + + if ( player isinvehicle() ) + continue; + + if ( isdefined( self.keyobject ) && ( !isdefined( player.carryobject ) || !player haskeyobject( self ) ) ) + { + if ( isdefined( self.oncantuse ) ) + self [[ self.oncantuse ]]( player ); + + continue; + } + + result = 1; + + if ( self.usetime > 0 ) + { + if ( isdefined( self.onbeginuse ) ) + self [[ self.onbeginuse ]]( player ); + + team = player.pers["team"]; + result = self useholdthink( player ); + + if ( isdefined( self.onenduse ) ) + self [[ self.onenduse ]]( team, player, result ); + } + + if ( !result ) + continue; + + if ( isdefined( self.onuse ) ) + self [[ self.onuse ]]( player ); + } +} + +getearliestclaimplayer() +{ + assert( self.claimteam != "none" ); + team = self.claimteam; + earliestplayer = self.claimplayer; + + if ( self.touchlist[team].size > 0 ) + { + earliesttime = undefined; + players = getarraykeys( self.touchlist[team] ); + + for ( index = 0; index < players.size; index++ ) + { + touchdata = self.touchlist[team][players[index]]; + + if ( !isdefined( earliesttime ) || touchdata.starttime < earliesttime ) + { + earliestplayer = touchdata.player; + earliesttime = touchdata.starttime; + } + } + } + + return earliestplayer; +} + +useobjectproxthink() +{ + level endon( "game_ended" ); + self.trigger endon( "destroyed" ); + self thread proxtriggerthink(); + + while ( true ) + { + if ( self.usetime && self.curprogress >= self.usetime ) + { + self clearprogress(); + creditplayer = getearliestclaimplayer(); + + if ( isdefined( self.onenduse ) ) + self [[ self.onenduse ]]( self getclaimteam(), creditplayer, isdefined( creditplayer ) ); + + if ( isdefined( creditplayer ) && isdefined( self.onuse ) ) + self [[ self.onuse ]]( creditplayer ); + + self setclaimteam( "none" ); + self.claimplayer = undefined; + } + + if ( self.claimteam != "none" ) + { + if ( self useobjectlockedforteam( self.claimteam ) ) + { + if ( isdefined( self.onenduse ) ) + self [[ self.onenduse ]]( self getclaimteam(), self.claimplayer, 0 ); + + self setclaimteam( "none" ); + self.claimplayer = undefined; + self clearprogress(); + } + else if ( self.usetime ) + { + if ( self.decayprogress && !self.numtouching[self.claimteam] ) + { + if ( isdefined( self.claimplayer ) ) + { + if ( isdefined( self.onenduse ) ) + self [[ self.onenduse ]]( self getclaimteam(), self.claimplayer, 0 ); + + self.claimplayer = undefined; + } + + decayscale = 0; + + if ( self.decaytime ) + decayscale = self.usetime / self.decaytime; + + self.curprogress -= 50 * self.userate * decayscale; + + if ( self.curprogress <= 0 ) + self clearprogress(); + + self updatecurrentprogress(); + + if ( isdefined( self.onuseupdate ) ) + self [[ self.onuseupdate ]]( self getclaimteam(), self.curprogress / self.usetime, 50 * self.userate * decayscale / self.usetime ); + + if ( self.curprogress == 0 ) + self setclaimteam( "none" ); + } + else if ( !self.numtouching[self.claimteam] ) + { + if ( isdefined( self.onenduse ) ) + self [[ self.onenduse ]]( self getclaimteam(), self.claimplayer, 0 ); + + self setclaimteam( "none" ); + self.claimplayer = undefined; + } + else + { + self.curprogress += 50 * self.userate; + self updatecurrentprogress(); + + if ( isdefined( self.onuseupdate ) ) + self [[ self.onuseupdate ]]( self getclaimteam(), self.curprogress / self.usetime, 50 * self.userate / self.usetime ); + } + } + else if ( !self.mustmaintainclaim ) + { + if ( isdefined( self.onuse ) ) + self [[ self.onuse ]]( self.claimplayer ); + + if ( !self.mustmaintainclaim ) + { + self setclaimteam( "none" ); + self.claimplayer = undefined; + } + } + else if ( !self.numtouching[self.claimteam] ) + { + if ( isdefined( self.onunoccupied ) ) + self [[ self.onunoccupied ]](); + + self setclaimteam( "none" ); + self.claimplayer = undefined; + } + else if ( self.cancontestclaim ) + { + numother = getnumtouchingexceptteam( self.claimteam ); + + if ( numother > 0 ) + { + if ( isdefined( self.oncontested ) ) + self [[ self.oncontested ]](); + + self setclaimteam( "none" ); + self.claimplayer = undefined; + } + } + } + else if ( self.curprogress > 0 && gettime() - self.lastclaimtime > self.claimgraceperiod * 1000 ) + self clearprogress(); + + wait 0.05; + maps\mp\gametypes_zm\_hostmigration::waittillhostmigrationdone(); + } +} + +useobjectlockedforteam( team ) +{ + if ( isdefined( self.teamlock ) && isdefined( level.teams[team] ) ) + return self.teamlock[team]; + + return 0; +} + +canclaim( player ) +{ + if ( self.cancontestclaim ) + { + numother = getnumtouchingexceptteam( player.pers["team"] ); + + if ( numother != 0 ) + return false; + } + + if ( !isdefined( self.keyobject ) || isdefined( player.carryobject ) && player haskeyobject( self ) ) + return true; + + return false; +} + +proxtriggerthink() +{ + level endon( "game_ended" ); + self.trigger endon( "destroyed" ); + entitynumber = self.entnum; + + while ( true ) + { + self.trigger waittill( "trigger", player ); + + if ( !isalive( player ) || self useobjectlockedforteam( player.pers["team"] ) ) + continue; + + if ( player isinvehicle() ) + continue; + + if ( player isweaponviewonlylinked() ) + continue; + + if ( self caninteractwith( player ) && self.claimteam == "none" ) + { + if ( self canclaim( player ) ) + { + setclaimteam( player.pers["team"] ); + self.claimplayer = player; + + if ( self.usetime && isdefined( self.onbeginuse ) ) + self [[ self.onbeginuse ]]( self.claimplayer ); + } + else if ( isdefined( self.oncantuse ) ) + self [[ self.oncantuse ]]( player ); + } + + if ( isalive( player ) && !isdefined( player.touchtriggers[entitynumber] ) ) + player thread triggertouchthink( self ); + } +} + +clearprogress() +{ + self.curprogress = 0; + self updatecurrentprogress(); + + if ( isdefined( self.onuseclear ) ) + self [[ self.onuseclear ]](); +} + +setclaimteam( newteam ) +{ + assert( newteam != self.claimteam ); + + if ( self.claimteam == "none" && gettime() - self.lastclaimtime > self.claimgraceperiod * 1000 ) + self clearprogress(); + else if ( newteam != "none" && newteam != self.lastclaimteam ) + self clearprogress(); + + self.lastclaimteam = self.claimteam; + self.lastclaimtime = gettime(); + self.claimteam = newteam; + self updateuserate(); +} + +getclaimteam() +{ + return self.claimteam; +} + +continuetriggertouchthink( team, object ) +{ + if ( !isalive( self ) ) + return false; + + if ( self useobjectlockedforteam( team ) ) + return false; + + if ( self isinvehicle() ) + return false; + + if ( !self istouching( object.trigger ) ) + return false; + + return true; +} + +triggertouchthink( object ) +{ + team = self.pers["team"]; + score = 1; + object.numtouching[team] += score; + + if ( object.usetime ) + object updateuserate(); + + touchname = "player" + self.clientid; + struct = spawnstruct(); + struct.player = self; + struct.starttime = gettime(); + object.touchlist[team][touchname] = struct; + objective_setplayerusing( object.objectiveid, self ); + self.touchtriggers[object.entnum] = object.trigger; + + if ( isdefined( object.ontouchuse ) ) + object [[ object.ontouchuse ]]( self ); + + while ( self continuetriggertouchthink( team, object ) ) + { + if ( object.usetime ) + self updateproxbar( object, 0 ); + + wait 0.05; + } + + if ( isdefined( self ) ) + { + if ( object.usetime ) + self updateproxbar( object, 1 ); + + self.touchtriggers[object.entnum] = undefined; + objective_clearplayerusing( object.objectiveid, self ); + } + + if ( level.gameended ) + return; + + object.touchlist[team][touchname] = undefined; + object.numtouching[team] -= score; + + if ( object.numtouching[team] < 1 ) + object.numtouching[team] = 0; + + if ( object.usetime ) + { + if ( object.numtouching[team] <= 0 && object.curprogress >= object.usetime ) + { + object.curprogress = object.usetime - 1; + object updatecurrentprogress(); + } + } + + if ( isdefined( self ) && isdefined( object.onendtouchuse ) ) + object [[ object.onendtouchuse ]]( self ); + + object updateuserate(); +} + +updateproxbar( object, forceremove ) +{ + if ( object.newstyle ) + return; + + if ( !forceremove && object.decayprogress ) + { + if ( !object caninteractwith( self ) ) + { + if ( isdefined( self.proxbar ) ) + self.proxbar hideelem(); + + if ( isdefined( self.proxbartext ) ) + self.proxbartext hideelem(); + + return; + } + else + { + if ( !isdefined( self.proxbar ) ) + { + self.proxbar = createprimaryprogressbar(); + self.proxbar.lastuserate = -1; + } + + if ( self.pers["team"] == object.claimteam ) + { + if ( self.proxbar.bar.color != ( 1, 1, 1 ) ) + { + self.proxbar.bar.color = ( 1, 1, 1 ); + self.proxbar.lastuserate = -1; + } + } + else if ( self.proxbar.bar.color != ( 1, 0, 0 ) ) + { + self.proxbar.bar.color = ( 1, 0, 0 ); + self.proxbar.lastuserate = -1; + } + } + } + else if ( forceremove || !object caninteractwith( self ) || self.pers["team"] != object.claimteam ) + { + if ( isdefined( self.proxbar ) ) + self.proxbar hideelem(); + + if ( isdefined( self.proxbartext ) ) + self.proxbartext hideelem(); + + return; + } + + if ( !isdefined( self.proxbar ) ) + { + self.proxbar = self createprimaryprogressbar(); + self.proxbar.lastuserate = -1; + self.proxbar.lasthostmigrationstate = 0; + } + + if ( self.proxbar.hidden ) + { + self.proxbar showelem(); + self.proxbar.lastuserate = -1; + self.proxbar.lasthostmigrationstate = 0; + } + + if ( !isdefined( self.proxbartext ) ) + { + self.proxbartext = self createprimaryprogressbartext(); + self.proxbartext settext( object.usetext ); + } + + if ( self.proxbartext.hidden ) + { + self.proxbartext showelem(); + self.proxbartext settext( object.usetext ); + } + + if ( self.proxbar.lastuserate != object.userate || self.proxbar.lasthostmigrationstate != isdefined( level.hostmigrationtimer ) ) + { + if ( object.curprogress > object.usetime ) + object.curprogress = object.usetime; + + if ( object.decayprogress && self.pers["team"] != object.claimteam ) + { + if ( object.curprogress > 0 ) + { + progress = object.curprogress / object.usetime; + rate = 1000 / object.usetime * ( object.userate * -1 ); + + if ( isdefined( level.hostmigrationtimer ) ) + rate = 0; + + self.proxbar updatebar( progress, rate ); + } + } + else + { + progress = object.curprogress / object.usetime; + rate = 1000 / object.usetime * object.userate; + + if ( isdefined( level.hostmigrationtimer ) ) + rate = 0; + + self.proxbar updatebar( progress, rate ); + } + + self.proxbar.lasthostmigrationstate = isdefined( level.hostmigrationtimer ); + self.proxbar.lastuserate = object.userate; + } +} + +getnumtouchingexceptteam( ignoreteam ) +{ + numtouching = 0; + + foreach ( team in level.teams ) + { + if ( ignoreteam == team ) + continue; + + numtouching += self.numtouching[team]; + } + + return numtouching; +} + +updateuserate() +{ + numclaimants = self.numtouching[self.claimteam]; + numother = 0; + numother = getnumtouchingexceptteam( self.claimteam ); + self.userate = 0; + + if ( self.decayprogress ) + { + if ( numclaimants && !numother ) + self.userate = numclaimants; + else if ( !numclaimants && numother ) + self.userate = numother; + else if ( !numclaimants && !numother ) + self.userate = 0; + } + else if ( numclaimants && !numother ) + self.userate = numclaimants; + + if ( isdefined( self.onupdateuserate ) ) + self [[ self.onupdateuserate ]](); +} + +useholdthink( player ) +{ + player notify( "use_hold" ); + + if ( !( isdefined( self.dontlinkplayertotrigger ) && self.dontlinkplayertotrigger ) ) + { + player playerlinkto( self.trigger ); + player playerlinkedoffsetenable(); + } + + player clientclaimtrigger( self.trigger ); + player.claimtrigger = self.trigger; + useweapon = self.useweapon; + lastweapon = player getcurrentweapon(); + + if ( isdefined( useweapon ) ) + { + assert( isdefined( lastweapon ) ); + + if ( lastweapon == useweapon ) + { + assert( isdefined( player.lastnonuseweapon ) ); + lastweapon = player.lastnonuseweapon; + } + + assert( lastweapon != useweapon ); + player.lastnonuseweapon = lastweapon; + player giveweapon( useweapon ); + player setweaponammostock( useweapon, 0 ); + player setweaponammoclip( useweapon, 0 ); + player switchtoweapon( useweapon ); + } + else + player _disableweapon(); + + self clearprogress(); + self.inuse = 1; + self.userate = 0; + objective_setplayerusing( self.objectiveid, player ); + player thread personalusebar( self ); + result = useholdthinkloop( player, lastweapon ); + + if ( isdefined( player ) ) + { + objective_clearplayerusing( self.objectiveid, player ); + self clearprogress(); + + if ( isdefined( player.attachedusemodel ) ) + { + player detach( player.attachedusemodel, "tag_inhand" ); + player.attachedusemodel = undefined; + } + + player notify( "done_using" ); + } + + if ( isdefined( useweapon ) && isdefined( player ) ) + player thread takeuseweapon( useweapon ); + + if ( isdefined( result ) && result ) + return true; + + if ( isdefined( player ) ) + { + player.claimtrigger = undefined; + + if ( isdefined( useweapon ) ) + { + ammo = player getweaponammoclip( lastweapon ); + + if ( lastweapon != "none" && !( isweaponequipment( lastweapon ) && player getweaponammoclip( lastweapon ) == 0 ) ) + player switchtoweapon( lastweapon ); + else + player takeweapon( useweapon ); + } + else if ( isalive( player ) ) + player _enableweapon(); + + if ( !( isdefined( self.dontlinkplayertotrigger ) && self.dontlinkplayertotrigger ) ) + player unlink(); + + if ( !isalive( player ) ) + player.killedinuse = 1; + } + + self.inuse = 0; + + if ( self.trigger.classname == "trigger_radius_use" ) + player clientreleasetrigger( self.trigger ); + else + self.trigger releaseclaimedtrigger(); + + return false; +} + +takeuseweapon( useweapon ) +{ + self endon( "use_hold" ); + self endon( "death" ); + self endon( "disconnect" ); + level endon( "game_ended" ); + + while ( self getcurrentweapon() == useweapon && !self.throwinggrenade ) + wait 0.05; + + self takeweapon( useweapon ); +} + +continueholdthinkloop( player, waitforweapon, timedout, usetime ) +{ + maxwaittime = 1.5; + + if ( !isalive( player ) ) + return false; + + if ( isdefined( player.laststand ) && player.laststand ) + return false; + + if ( self.curprogress >= usetime ) + return false; + + if ( !player usebuttonpressed() ) + return false; + + if ( player.throwinggrenade ) + return false; + + if ( player meleebuttonpressed() ) + return false; + + if ( player isinvehicle() ) + return false; + + if ( player isremotecontrolling() ) + return false; + + if ( player isweaponviewonlylinked() ) + return false; + + if ( !player istouching( self.trigger ) ) + return false; + + if ( !self.userate && !waitforweapon ) + return false; + + if ( waitforweapon && timedout > maxwaittime ) + return false; + + return true; +} + +updatecurrentprogress() +{ + if ( self.usetime ) + { + progress = float( self.curprogress ) / self.usetime; + objective_setprogress( self.objectiveid, clamp( progress, 0, 1 ) ); + } +} + +useholdthinkloop( player, lastweapon ) +{ + level endon( "game_ended" ); + self endon( "disabled" ); + useweapon = self.useweapon; + waitforweapon = 1; + timedout = 0; + usetime = self.usetime; + + while ( self continueholdthinkloop( player, waitforweapon, timedout, usetime ) ) + { + timedout += 0.05; + + if ( !isdefined( useweapon ) || player getcurrentweapon() == useweapon ) + { + self.curprogress += 50 * self.userate; + self updatecurrentprogress(); + self.userate = 1; + waitforweapon = 0; + } + else + self.userate = 0; + + if ( self.curprogress >= usetime ) + { + self.inuse = 0; + player clientreleasetrigger( self.trigger ); + player.claimtrigger = undefined; + + if ( isdefined( useweapon ) ) + { + player setweaponammostock( useweapon, 1 ); + player setweaponammoclip( useweapon, 1 ); + + if ( lastweapon != "none" && !( isweaponequipment( lastweapon ) && player getweaponammoclip( lastweapon ) == 0 ) ) + player switchtoweapon( lastweapon ); + else + player takeweapon( useweapon ); + } + else + player _enableweapon(); + + if ( !( isdefined( self.dontlinkplayertotrigger ) && self.dontlinkplayertotrigger ) ) + player unlink(); + + wait 0.05; + return isalive( player ); + } + + wait 0.05; + maps\mp\gametypes_zm\_hostmigration::waittillhostmigrationdone(); + } + + return 0; +} + +personalusebar( object ) +{ + self endon( "disconnect" ); + + if ( object.newstyle ) + return; + + if ( isdefined( self.usebar ) ) + return; + + self.usebar = self createprimaryprogressbar(); + self.usebartext = self createprimaryprogressbartext(); + self.usebartext settext( object.usetext ); + usetime = object.usetime; + lastrate = -1; + lasthostmigrationstate = isdefined( level.hostmigrationtimer ); + + while ( isalive( self ) && object.inuse && !level.gameended ) + { + if ( lastrate != object.userate || lasthostmigrationstate != isdefined( level.hostmigrationtimer ) ) + { + if ( object.curprogress > usetime ) + object.curprogress = usetime; + + if ( object.decayprogress && self.pers["team"] != object.claimteam ) + { + if ( object.curprogress > 0 ) + { + progress = object.curprogress / usetime; + rate = 1000 / usetime * ( object.userate * -1 ); + + if ( isdefined( level.hostmigrationtimer ) ) + rate = 0; + + self.proxbar updatebar( progress, rate ); + } + } + else + { + progress = object.curprogress / usetime; + rate = 1000 / usetime * object.userate; + + if ( isdefined( level.hostmigrationtimer ) ) + rate = 0; + + self.usebar updatebar( progress, rate ); + } + + if ( !object.userate ) + { + self.usebar hideelem(); + self.usebartext hideelem(); + } + else + { + self.usebar showelem(); + self.usebartext showelem(); + } + } + + lastrate = object.userate; + lasthostmigrationstate = isdefined( level.hostmigrationtimer ); + wait 0.05; + } + + self.usebar destroyelem(); + self.usebartext destroyelem(); +} + +updatetrigger() +{ + if ( self.triggertype != "use" ) + return; + + if ( self.interactteam == "none" ) + self.trigger.origin -= vectorscale( ( 0, 0, 1 ), 50000.0 ); + else if ( self.interactteam == "any" || !level.teambased ) + { + self.trigger.origin = self.curorigin; + self.trigger setteamfortrigger( "none" ); + } + else if ( self.interactteam == "friendly" ) + { + self.trigger.origin = self.curorigin; + + if ( isdefined( level.teams[self.ownerteam] ) ) + self.trigger setteamfortrigger( self.ownerteam ); + else + self.trigger.origin -= vectorscale( ( 0, 0, 1 ), 50000.0 ); + } + else if ( self.interactteam == "enemy" ) + { + self.trigger.origin = self.curorigin; + self.trigger setexcludeteamfortrigger( self.ownerteam ); + } +} + +updateobjective() +{ + if ( !self.newstyle ) + return; + + objective_team( self.objectiveid, self.ownerteam ); + + if ( self.visibleteam == "any" ) + { + objective_state( self.objectiveid, "active" ); + objective_visibleteams( self.objectiveid, level.spawnsystem.ispawn_teammask["all"] ); + } + else if ( self.visibleteam == "friendly" ) + { + objective_state( self.objectiveid, "active" ); + objective_visibleteams( self.objectiveid, level.spawnsystem.ispawn_teammask[self.ownerteam] ); + } + else if ( self.visibleteam == "enemy" ) + { + objective_state( self.objectiveid, "active" ); + objective_visibleteams( self.objectiveid, level.spawnsystem.ispawn_teammask["all"] & ~level.spawnsystem.ispawn_teammask[self.ownerteam] ); + } + else + { + objective_state( self.objectiveid, "invisible" ); + objective_visibleteams( self.objectiveid, 0 ); + } + + if ( self.type == "carryObject" ) + { + if ( isalive( self.carrier ) ) + objective_onentity( self.objectiveid, self.carrier ); + else + objective_clearentity( self.objectiveid ); + } +} + +updateworldicons() +{ + if ( self.visibleteam == "any" ) + { + updateworldicon( "friendly", 1 ); + updateworldicon( "enemy", 1 ); + } + else if ( self.visibleteam == "friendly" ) + { + updateworldicon( "friendly", 1 ); + updateworldicon( "enemy", 0 ); + } + else if ( self.visibleteam == "enemy" ) + { + updateworldicon( "friendly", 0 ); + updateworldicon( "enemy", 1 ); + } + else + { + updateworldicon( "friendly", 0 ); + updateworldicon( "enemy", 0 ); + } +} + +updateworldicon( relativeteam, showicon ) +{ + +} + +updatecompassicons() +{ + if ( self.visibleteam == "any" ) + { + updatecompassicon( "friendly", 1 ); + updatecompassicon( "enemy", 1 ); + } + else if ( self.visibleteam == "friendly" ) + { + updatecompassicon( "friendly", 1 ); + updatecompassicon( "enemy", 0 ); + } + else if ( self.visibleteam == "enemy" ) + { + updatecompassicon( "friendly", 0 ); + updatecompassicon( "enemy", 1 ); + } + else + { + updatecompassicon( "friendly", 0 ); + updatecompassicon( "enemy", 0 ); + } +} + +updatecompassicon( relativeteam, showicon ) +{ + if ( self.newstyle ) + return; + + updateteams = getupdateteams( relativeteam ); + + for ( index = 0; index < updateteams.size; index++ ) + { + showiconthisteam = showicon; + + if ( !showiconthisteam && shouldshowcompassduetoradar( updateteams[index] ) ) + showiconthisteam = 1; + + if ( level.teambased ) + objid = self.objid[updateteams[index]]; + else + objid = self.objid[level.nonteambasedteam]; + + if ( !isdefined( self.compassicons[relativeteam] ) || !showiconthisteam ) + { + objective_state( objid, "invisible" ); + continue; + } + + objective_icon( objid, self.compassicons[relativeteam] ); + objective_state( objid, "active" ); + + if ( self.type == "carryObject" ) + { + if ( isalive( self.carrier ) && !shouldpingobject( relativeteam ) ) + { + objective_onentity( objid, self.carrier ); + continue; + } + + objective_position( objid, self.curorigin ); + } + } +} + +shouldpingobject( relativeteam ) +{ + if ( relativeteam == "friendly" && self.objidpingfriendly ) + return true; + else if ( relativeteam == "enemy" && self.objidpingenemy ) + return true; + + return false; +} + +getupdateteams( relativeteam ) +{ + updateteams = []; + + if ( level.teambased ) + { + if ( relativeteam == "friendly" ) + { + foreach ( team in level.teams ) + { + if ( self isfriendlyteam( team ) ) + updateteams[updateteams.size] = team; + } + } + else if ( relativeteam == "enemy" ) + { + foreach ( team in level.teams ) + { + if ( !self isfriendlyteam( team ) ) + updateteams[updateteams.size] = team; + } + } + } + else if ( relativeteam == "friendly" ) + updateteams[updateteams.size] = level.nonteambasedteam; + else + updateteams[updateteams.size] = "axis"; + + return updateteams; +} + +shouldshowcompassduetoradar( team ) +{ + showcompass = 0; + return showcompass; +} + +updatevisibilityaccordingtoradar() +{ + self endon( "death" ); + self endon( "carrier_cleared" ); + + while ( true ) + { + level waittill( "radar_status_change" ); + + self updatecompassicons(); + } +} + +setownerteam( team ) +{ + self.ownerteam = team; + self updatetrigger(); + self updatecompassicons(); + self updateworldicons(); + self updateobjective(); +} + +getownerteam() +{ + return self.ownerteam; +} + +setdecaytime( time ) +{ + self.decaytime = int( time * 1000 ); +} + +setusetime( time ) +{ + self.usetime = int( time * 1000 ); +} + +setusetext( text ) +{ + self.usetext = text; +} + +setusehinttext( text ) +{ + self.trigger sethintstring( text ); +} + +allowcarry( relativeteam ) +{ + self.interactteam = relativeteam; +} + +allowuse( relativeteam ) +{ + self.interactteam = relativeteam; + updatetrigger(); +} + +setvisibleteam( relativeteam ) +{ + self.visibleteam = relativeteam; + + if ( !maps\mp\gametypes_zm\_tweakables::gettweakablevalue( "hud", "showobjicons" ) ) + self.visibleteam = "none"; + + updatecompassicons(); + updateworldicons(); + updateobjective(); +} + +setmodelvisibility( visibility ) +{ + if ( visibility ) + { + for ( index = 0; index < self.visuals.size; index++ ) + { + self.visuals[index] show(); + + if ( self.visuals[index].classname == "script_brushmodel" || self.visuals[index].classname == "script_model" ) + self.visuals[index] thread makesolid(); + } + } + else + { + for ( index = 0; index < self.visuals.size; index++ ) + { + self.visuals[index] hide(); + + if ( self.visuals[index].classname == "script_brushmodel" || self.visuals[index].classname == "script_model" ) + { + self.visuals[index] notify( "changing_solidness" ); + self.visuals[index] notsolid(); + } + } + } +} + +makesolid() +{ + self endon( "death" ); + self notify( "changing_solidness" ); + self endon( "changing_solidness" ); + + while ( true ) + { + for ( i = 0; i < level.players.size; i++ ) + { + if ( level.players[i] istouching( self ) ) + break; + } + + if ( i == level.players.size ) + { + self solid(); + break; + } + + wait 0.05; + } +} + +setcarriervisible( relativeteam ) +{ + self.carriervisible = relativeteam; +} + +setcanuse( relativeteam ) +{ + self.useteam = relativeteam; +} + +set2dicon( relativeteam, shader ) +{ + self.compassicons[relativeteam] = shader; + updatecompassicons(); +} + +set3dicon( relativeteam, shader ) +{ + self.worldicons[relativeteam] = shader; + updateworldicons(); +} + +set3duseicon( relativeteam, shader ) +{ + self.worlduseicons[relativeteam] = shader; +} + +set3diswaypoint( relativeteam, waypoint ) +{ + self.worldiswaypoint[relativeteam] = waypoint; +} + +setcarryicon( shader ) +{ + self.carryicon = shader; +} + +setvisiblecarriermodel( visiblemodel ) +{ + self.visiblecarriermodel = visiblemodel; +} + +getvisiblecarriermodel() +{ + return self.visiblecarriermodel; +} + +destroyobject( deletetrigger, forcehide = 1 ) +{ + self disableobject( forcehide ); + + foreach ( visual in self.visuals ) + { + visual hide(); + visual delete(); + } + + self.trigger notify( "destroyed" ); + + if ( isdefined( deletetrigger ) && deletetrigger ) + self.trigger delete(); + else + self.trigger triggeron(); +} + +disableobject( forcehide ) +{ + self notify( "disabled" ); + + if ( self.type == "carryObject" || isdefined( forcehide ) && forcehide ) + { + if ( isdefined( self.carrier ) ) + self.carrier takeobject( self ); + + for ( index = 0; index < self.visuals.size; index++ ) + self.visuals[index] hide(); + } + + self.trigger triggeroff(); + self setvisibleteam( "none" ); +} + +enableobject( forceshow ) +{ + if ( self.type == "carryObject" || isdefined( forceshow ) && forceshow ) + { + for ( index = 0; index < self.visuals.size; index++ ) + self.visuals[index] show(); + } + + self.trigger triggeron(); + self setvisibleteam( "any" ); +} + +getrelativeteam( team ) +{ + if ( self.ownerteam == "any" ) + return "friendly"; + + if ( team == self.ownerteam ) + return "friendly"; + else if ( team == getenemyteam( self.ownerteam ) ) + return "enemy"; + else + return "neutral"; +} + +isfriendlyteam( team ) +{ + if ( !level.teambased ) + return true; + + if ( self.ownerteam == "any" ) + return true; + + if ( self.ownerteam == team ) + return true; + + return false; +} + +caninteractwith( player ) +{ + team = player.pers["team"]; + + switch ( self.interactteam ) + { + case "none": + return false; + case "any": + return true; + case "friendly": + if ( level.teambased ) + { + if ( team == self.ownerteam ) + return true; + else + return false; + } + else if ( player == self.ownerteam ) + return true; + else + return false; + case "enemy": + if ( level.teambased ) + { + if ( team != self.ownerteam ) + return true; + else if ( isdefined( self.decayprogress ) && self.decayprogress && self.curprogress > 0 ) + return true; + else + return false; + } + else if ( player != self.ownerteam ) + return true; + else + return false; + default: + assert( 0, "invalid interactTeam" ); + return false; + } +} + +isteam( team ) +{ + if ( team == "neutral" ) + return true; + + if ( isdefined( level.teams[team] ) ) + return true; + + if ( team == "any" ) + return true; + + if ( team == "none" ) + return true; + + return false; +} + +isrelativeteam( relativeteam ) +{ + if ( relativeteam == "friendly" ) + return true; + + if ( relativeteam == "enemy" ) + return true; + + if ( relativeteam == "any" ) + return true; + + if ( relativeteam == "none" ) + return true; + + return false; +} + +getenemyteam( team ) +{ + if ( team == "neutral" ) + return "none"; + else if ( team == "allies" ) + return "axis"; + else + return "allies"; +} + +getnextobjid() +{ + nextid = 0; + + if ( level.releasedobjectives.size > 0 ) + { + nextid = level.releasedobjectives[level.releasedobjectives.size - 1]; + level.releasedobjectives[level.releasedobjectives.size - 1] = undefined; + } + else + { + nextid = level.numgametypereservedobjectives; + level.numgametypereservedobjectives++; + } + + assert( nextid < 32, "Ran out of objective IDs" ); + return nextid; +} + +releaseobjid( objid ) +{ + assert( objid < level.numgametypereservedobjectives ); + + for ( i = 0; i < level.releasedobjectives.size; i++ ) + { + if ( objid == level.releasedobjectives[i] && objid == 31 ) + return; + + assert( objid != level.releasedobjectives[i] ); + } + + level.releasedobjectives[level.releasedobjectives.size] = objid; +} + +getlabel() +{ + label = self.trigger.script_label; + + if ( !isdefined( label ) ) + { + label = ""; + return label; + } + + if ( label[0] != "_" ) + return "_" + label; + + return label; +} + +mustmaintainclaim( enabled ) +{ + self.mustmaintainclaim = enabled; +} + +cancontestclaim( enabled ) +{ + self.cancontestclaim = enabled; +} + +setflags( flags ) +{ + objective_setgamemodeflags( self.objectiveid, flags ); +} + +getflags( flags ) +{ + return objective_getgamemodeflags( self.objectiveid ); +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_globalentities.gsc b/ZM/Core/maps/mp/gametypes_zm/_globalentities.gsc new file mode 100644 index 0000000..df94d58 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_globalentities.gsc @@ -0,0 +1,3 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + diff --git a/ZM/Core/maps/mp/gametypes_zm/_globallogic.gsc b/ZM/Core/maps/mp/gametypes_zm/_globallogic.gsc new file mode 100644 index 0000000..de23f4c --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_globallogic.gsc @@ -0,0 +1,2305 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\_busing; +#include common_scripts\utility; +#include maps\mp\gametypes_zm\_tweakables; +#include maps\mp\gametypes_zm\_globallogic_ui; +#include maps\mp\gametypes_zm\_globallogic_audio; +#include maps\mp\gametypes_zm\_globallogic_spawn; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\gametypes_zm\_globallogic_defaults; +#include maps\mp\gametypes_zm\_hud_message; +#include maps\mp\gametypes_zm\_globallogic_utils; +#include maps\mp\_demo; +#include maps\mp\gametypes_zm\_globallogic_player; +#include maps\mp\gametypes_zm\_weapons; +#include maps\mp\_music; +#include maps\mp\_challenges; +#include maps\mp\gametypes_zm\_hud; +#include maps\mp\gametypes_zm\_serversettings; +#include maps\mp\gametypes_zm\_clientids; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\gametypes_zm\_scoreboard; +#include maps\mp\gametypes_zm\_shellshock; +#include maps\mp\gametypes_zm\_spectating; +#include maps\mp\gametypes_zm\_gameobjects; +#include maps\mp\gametypes_zm\_spawnlogic; +#include maps\mp\gametypes_zm\_dev; +#include maps\mp\gametypes_zm\_hostmigration; +#include maps\mp\gametypes_zm\_globallogic; + +init() +{ + if ( !isdefined( level.tweakablesinitialized ) ) + maps\mp\gametypes_zm\_tweakables::init(); + + init_session_mode_flags(); + level.splitscreen = issplitscreen(); + level.xenon = getdvar( "xenonGame" ) == "true"; + level.ps3 = getdvar( "ps3Game" ) == "true"; + level.wiiu = getdvar( "wiiuGame" ) == "true"; + level.onlinegame = sessionmodeisonlinegame(); + level.systemlink = sessionmodeissystemlink(); + level.console = level.xenon || level.ps3 || level.wiiu; + level.rankedmatch = gamemodeisusingxp() && !ispregame(); + level.leaguematch = gamemodeismode( level.gamemode_league_match ); + level.wagermatch = 0; + level.contractsenabled = !getgametypesetting( "disableContracts" ); + level.contractsenabled = 0; +/# + if ( getdvarint( "scr_forcerankedmatch" ) == 1 ) + level.rankedmatch = 1; +#/ + level.script = tolower( getdvar( "mapname" ) ); + level.gametype = tolower( getdvar( "g_gametype" ) ); + level.teambased = 0; + level.teamcount = getgametypesetting( "teamCount" ); + level.multiteam = level.teamcount > 2; + + if ( sessionmodeiszombiesgame() ) + { + level.zombie_team_index = level.teamcount + 1; + + if ( 2 == level.zombie_team_index ) + level.zombie_team = "axis"; + else + level.zombie_team = "team" + level.zombie_team_index; + } + + level.teams = []; + level.teamindex = []; + teamcount = level.teamcount; + level.teams["allies"] = "allies"; + level.teams["axis"] = "axis"; + level.teamindex["neutral"] = 0; + level.teamindex["allies"] = 1; + level.teamindex["axis"] = 2; + + for ( teamindex = 3; teamindex <= teamcount; teamindex++ ) + { + level.teams["team" + teamindex] = "team" + teamindex; + level.teamindex["team" + teamindex] = teamindex; + } + + level.overrideteamscore = 0; + level.overrideplayerscore = 0; + level.displayhalftimetext = 0; + level.displayroundendtext = 1; + level.endgameonscorelimit = 1; + level.endgameontimelimit = 1; + level.scoreroundbased = 0; + level.resetplayerscoreeveryround = 0; + level.gameforfeited = 0; + level.forceautoassign = 0; + level.halftimetype = "halftime"; + level.halftimesubcaption = &"MP_SWITCHING_SIDES_CAPS"; + level.laststatustime = 0; + level.waswinning = []; + level.lastslowprocessframe = 0; + level.placement = []; + + foreach ( team in level.teams ) + level.placement[team] = []; + + level.placement["all"] = []; + level.postroundtime = 7.0; + level.inovertime = 0; + level.defaultoffenseradius = 560; + level.dropteam = getdvarint( "sv_maxclients" ); + level.infinalkillcam = 0; + maps\mp\gametypes_zm\_globallogic_ui::init(); + registerdvars(); + level.oldschool = getdvarint( "scr_oldschool" ) == 1; + + if ( level.oldschool ) + { + logstring( "game mode: oldschool" ); + setdvar( "jump_height", 64 ); + setdvar( "jump_slowdownEnable", 0 ); + setdvar( "bg_fallDamageMinHeight", 256 ); + setdvar( "bg_fallDamageMaxHeight", 512 ); + setdvar( "player_clipSizeMultiplier", 2.0 ); + } + + precachemodel( "tag_origin" ); + precacherumble( "dtp_rumble" ); + precacherumble( "slide_rumble" ); + precachestatusicon( "hud_status_dead" ); + precachestatusicon( "hud_status_connecting" ); + precache_mp_leaderboards(); + + if ( !isdefined( game["tiebreaker"] ) ) + game["tiebreaker"] = 0; + + maps\mp\gametypes_zm\_globallogic_audio::registerdialoggroup( "item_destroyed", 1 ); + maps\mp\gametypes_zm\_globallogic_audio::registerdialoggroup( "introboost", 1 ); + maps\mp\gametypes_zm\_globallogic_audio::registerdialoggroup( "status", 1 ); +} + +registerdvars() +{ + if ( getdvar( "scr_oldschool" ) == "" ) + setdvar( "scr_oldschool", "0" ); + + makedvarserverinfo( "scr_oldschool" ); + + if ( getdvar( "ui_guncycle" ) == "" ) + setdvar( "ui_guncycle", 0 ); + + makedvarserverinfo( "ui_guncycle" ); + + if ( getdvar( "ui_weapon_tiers" ) == "" ) + setdvar( "ui_weapon_tiers", 0 ); + + makedvarserverinfo( "ui_weapon_tiers" ); + setdvar( "ui_text_endreason", "" ); + makedvarserverinfo( "ui_text_endreason", "" ); + setmatchflag( "bomb_timer", 0 ); + setmatchflag( "enable_popups", 1 ); + setmatchflag( "pregame", ispregame() ); + + if ( getdvar( "scr_vehicle_damage_scalar" ) == "" ) + setdvar( "scr_vehicle_damage_scalar", "1" ); + + level.vehicledamagescalar = getdvarfloat( "scr_vehicle_damage_scalar" ); + level.fire_audio_repeat_duration = getdvarint( _hash_917E4521 ); + level.fire_audio_random_max_duration = getdvarint( _hash_C2DCBC26 ); +} + +blank( arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10 ) +{ + +} + +setupcallbacks() +{ + level.spawnplayer = maps\mp\gametypes_zm\_globallogic_spawn::spawnplayer; + level.spawnplayerprediction = maps\mp\gametypes_zm\_globallogic_spawn::spawnplayerprediction; + level.spawnclient = maps\mp\gametypes_zm\_globallogic_spawn::spawnclient; + level.spawnspectator = maps\mp\gametypes_zm\_globallogic_spawn::spawnspectator; + level.spawnintermission = maps\mp\gametypes_zm\_globallogic_spawn::spawnintermission; + level.onplayerscore = maps\mp\gametypes_zm\_globallogic_score::default_onplayerscore; + level.onteamscore = maps\mp\gametypes_zm\_globallogic_score::default_onteamscore; + level.wavespawntimer = ::wavespawntimer; + level.spawnmessage = maps\mp\gametypes_zm\_globallogic_spawn::default_spawnmessage; + level.onspawnplayer = ::blank; + level.onspawnplayerunified = ::blank; + level.onspawnspectator = maps\mp\gametypes_zm\_globallogic_defaults::default_onspawnspectator; + level.onspawnintermission = maps\mp\gametypes_zm\_globallogic_defaults::default_onspawnintermission; + level.onrespawndelay = ::blank; + level.onforfeit = maps\mp\gametypes_zm\_globallogic_defaults::default_onforfeit; + level.ontimelimit = maps\mp\gametypes_zm\_globallogic_defaults::default_ontimelimit; + level.onscorelimit = maps\mp\gametypes_zm\_globallogic_defaults::default_onscorelimit; + level.onalivecountchange = maps\mp\gametypes_zm\_globallogic_defaults::default_onalivecountchange; + level.ondeadevent = maps\mp\gametypes_zm\_globallogic_defaults::default_ondeadevent; + level.ononeleftevent = maps\mp\gametypes_zm\_globallogic_defaults::default_ononeleftevent; + level.giveteamscore = maps\mp\gametypes_zm\_globallogic_score::giveteamscore; + level.onlastteamaliveevent = undefined; + level.gettimelimit = maps\mp\gametypes_zm\_globallogic_defaults::default_gettimelimit; + level.getteamkillpenalty = ::blank; + level.getteamkillscore = ::blank; + level.iskillboosting = maps\mp\gametypes_zm\_globallogic_score::default_iskillboosting; + level._setteamscore = maps\mp\gametypes_zm\_globallogic_score::_setteamscore; + level._setplayerscore = maps\mp\gametypes_zm\_globallogic_score::_setplayerscore; + level._getteamscore = maps\mp\gametypes_zm\_globallogic_score::_getteamscore; + level._getplayerscore = maps\mp\gametypes_zm\_globallogic_score::_getplayerscore; + level.onprecachegametype = ::blank; + level.onstartgametype = ::blank; + level.onplayerconnect = ::blank; + level.onplayerdisconnect = ::blank; + level.onplayerdamage = ::blank; + level.onplayerkilled = ::blank; + level.onplayerkilledextraunthreadedcbs = []; + level.onteamoutcomenotify = maps\mp\gametypes_zm\_hud_message::teamoutcomenotify; + level.onoutcomenotify = maps\mp\gametypes_zm\_hud_message::outcomenotify; + level.onteamwageroutcomenotify = maps\mp\gametypes_zm\_hud_message::teamwageroutcomenotify; + level.onwageroutcomenotify = maps\mp\gametypes_zm\_hud_message::wageroutcomenotify; + level.setmatchscorehudelemforteam = maps\mp\gametypes_zm\_hud_message::setmatchscorehudelemforteam; + level.onendgame = ::blank; + level.onroundendgame = maps\mp\gametypes_zm\_globallogic_defaults::default_onroundendgame; + level.onmedalawarded = ::blank; + maps\mp\gametypes_zm\_globallogic_ui::setupcallbacks(); +} + +precache_mp_leaderboards() +{ + if ( sessionmodeiszombiesgame() ) + return; + + if ( !level.rankedmatch ) + return; + + mapname = getdvar( "mapname" ); + globalleaderboards = "LB_MP_GB_XPPRESTIGE LB_MP_GB_TOTALXP_AT LB_MP_GB_TOTALXP_LT LB_MP_GB_WINS_AT LB_MP_GB_WINS_LT LB_MP_GB_KILLS_AT LB_MP_GB_KILLS_LT LB_MP_GB_ACCURACY_AT LB_MP_GB_ACCURACY_LT"; + gamemodeleaderboard = " LB_MP_GM_" + level.gametype; + + if ( getdvarint( _hash_46E18E53 ) ) + gamemodeleaderboard += "_HC"; + + mapleaderboard = " LB_MP_MAP_" + getsubstr( mapname, 3, mapname.size ); + precacheleaderboards( globalleaderboards + gamemodeleaderboard + mapleaderboard ); +} + +compareteambygamestat( gamestat, teama, teamb, previous_winner_score ) +{ + winner = undefined; + + if ( teama == "tie" ) + { + winner = "tie"; + + if ( previous_winner_score < game[gamestat][teamb] ) + winner = teamb; + } + else if ( game[gamestat][teama] == game[gamestat][teamb] ) + winner = "tie"; + else if ( game[gamestat][teamb] > game[gamestat][teama] ) + winner = teamb; + else + winner = teama; + + return winner; +} + +determineteamwinnerbygamestat( gamestat ) +{ + teamkeys = getarraykeys( level.teams ); + winner = teamkeys[0]; + previous_winner_score = game[gamestat][winner]; + + for ( teamindex = 1; teamindex < teamkeys.size; teamindex++ ) + { + winner = compareteambygamestat( gamestat, winner, teamkeys[teamindex], previous_winner_score ); + + if ( winner != "tie" ) + previous_winner_score = game[gamestat][winner]; + } + + return winner; +} + +compareteambyteamscore( teama, teamb, previous_winner_score ) +{ + winner = undefined; + teambscore = [[ level._getteamscore ]]( teamb ); + + if ( teama == "tie" ) + { + winner = "tie"; + + if ( previous_winner_score < teambscore ) + winner = teamb; + + return winner; + } + + teamascore = [[ level._getteamscore ]]( teama ); + + if ( teambscore == teamascore ) + winner = "tie"; + else if ( teambscore > teamascore ) + winner = teamb; + else + winner = teama; + + return winner; +} + +determineteamwinnerbyteamscore() +{ + teamkeys = getarraykeys( level.teams ); + winner = teamkeys[0]; + previous_winner_score = [[ level._getteamscore ]]( winner ); + + for ( teamindex = 1; teamindex < teamkeys.size; teamindex++ ) + { + winner = compareteambyteamscore( winner, teamkeys[teamindex], previous_winner_score ); + + if ( winner != "tie" ) + previous_winner_score = [[ level._getteamscore ]]( winner ); + } + + return winner; +} + +forceend( hostsucks ) +{ + if ( !isdefined( hostsucks ) ) + hostsucks = 0; + + if ( level.hostforcedend || level.forcedend ) + return; + + winner = undefined; + + if ( level.teambased ) + { + winner = determineteamwinnerbygamestat( "teamScores" ); + maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "host ended game", winner ); + } + else + { + winner = maps\mp\gametypes_zm\_globallogic_score::gethighestscoringplayer(); + + if ( isdefined( winner ) ) + logstring( "host ended game, win: " + winner.name ); + else + logstring( "host ended game, tie" ); + } + + level.forcedend = 1; + level.hostforcedend = 1; + + if ( hostsucks ) + endstring = &"MP_HOST_SUCKS"; + else if ( level.splitscreen ) + endstring = &"MP_ENDED_GAME"; + else + endstring = &"MP_HOST_ENDED_GAME"; + + setmatchflag( "disableIngameMenu", 1 ); + makedvarserverinfo( "ui_text_endreason", endstring ); + setdvar( "ui_text_endreason", endstring ); + thread endgame( winner, endstring ); +} + +killserverpc() +{ + if ( level.hostforcedend || level.forcedend ) + return; + + winner = undefined; + + if ( level.teambased ) + { + winner = determineteamwinnerbygamestat( "teamScores" ); + maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "host ended game", winner ); + } + else + { + winner = maps\mp\gametypes_zm\_globallogic_score::gethighestscoringplayer(); + + if ( isdefined( winner ) ) + logstring( "host ended game, win: " + winner.name ); + else + logstring( "host ended game, tie" ); + } + + level.forcedend = 1; + level.hostforcedend = 1; + level.killserver = 1; + endstring = &"MP_HOST_ENDED_GAME"; +/# + println( "kill server; ending game\\n" ); +#/ + thread endgame( winner, endstring ); +} + +someoneoneachteam() +{ + foreach ( team in level.teams ) + { + if ( level.playercount[team] == 0 ) + return false; + } + + return true; +} + +checkifteamforfeits( team ) +{ + if ( !level.everexisted[team] ) + return false; + + if ( level.playercount[team] < 1 && totalplayercount() > 0 ) + return true; + + return false; +} + +checkforanyteamforfeit() +{ + foreach ( team in level.teams ) + { + if ( checkifteamforfeits( team ) ) + { + thread [[ level.onforfeit ]]( team ); + return true; + } + } + + return false; +} + +dospawnqueueupdates() +{ + foreach ( team in level.teams ) + { + if ( level.spawnqueuemodified[team] ) + [[ level.onalivecountchange ]]( team ); + } +} + +isteamalldead( team ) +{ + return level.everexisted[team] && !level.alivecount[team] && !level.playerlives[team]; +} + +areallteamsdead() +{ + foreach ( team in level.teams ) + { + if ( !isteamalldead( team ) ) + return false; + } + + return true; +} + +alldeadteamcount() +{ + count = 0; + + foreach ( team in level.teams ) + { + if ( isteamalldead( team ) ) + count++; + } + + return count; +} + +dodeadeventupdates() +{ + if ( level.teambased ) + { + if ( areallteamsdead() ) + { + [[ level.ondeadevent ]]( "all" ); + return true; + } + + if ( isdefined( level.onlastteamaliveevent ) ) + { + if ( alldeadteamcount() == level.teams.size - 1 ) + { + foreach ( team in level.teams ) + { + if ( !isteamalldead( team ) ) + { + [[ level.onlastteamaliveevent ]]( team ); + return true; + } + } + } + } + else + { + foreach ( team in level.teams ) + { + if ( isteamalldead( team ) ) + { + [[ level.ondeadevent ]]( team ); + return true; + } + } + } + } + else if ( totalalivecount() == 0 && totalplayerlives() == 0 && level.maxplayercount > 1 ) + { + [[ level.ondeadevent ]]( "all" ); + return true; + } + + return false; +} + +isonlyoneleftaliveonteam( team ) +{ + return level.lastalivecount[team] > 1 && level.alivecount[team] == 1 && level.playerlives[team] == 1; +} + +doonelefteventupdates() +{ + if ( level.teambased ) + { + foreach ( team in level.teams ) + { + if ( isonlyoneleftaliveonteam( team ) ) + { + [[ level.ononeleftevent ]]( team ); + return true; + } + } + } + else if ( totalalivecount() == 1 && totalplayerlives() == 1 && level.maxplayercount > 1 ) + { + [[ level.ononeleftevent ]]( "all" ); + return true; + } + + return false; +} + +updategameevents() +{ +/# + if ( getdvarint( "scr_hostmigrationtest" ) == 1 ) + return; +#/ + if ( ( level.rankedmatch || level.wagermatch || level.leaguematch ) && !level.ingraceperiod ) + { + if ( level.teambased ) + { + if ( !level.gameforfeited ) + { + if ( game["state"] == "playing" && checkforanyteamforfeit() ) + return; + } + else if ( someoneoneachteam() ) + { + level.gameforfeited = 0; + level notify( "abort forfeit" ); + } + } + else if ( !level.gameforfeited ) + { + if ( totalplayercount() == 1 && level.maxplayercount > 1 ) + { + thread [[ level.onforfeit ]](); + return; + } + } + else if ( totalplayercount() > 1 ) + { + level.gameforfeited = 0; + level notify( "abort forfeit" ); + } + } + + if ( !level.playerqueuedrespawn && !level.numlives && !level.inovertime ) + return; + + if ( level.ingraceperiod ) + return; + + if ( level.playerqueuedrespawn ) + dospawnqueueupdates(); + + if ( dodeadeventupdates() ) + return; + + if ( doonelefteventupdates() ) + return; +} + +matchstarttimer() +{ + visionsetnaked( "mpIntro", 0 ); + matchstarttext = createserverfontstring( "objective", 1.5 ); + matchstarttext setpoint( "CENTER", "CENTER", 0, -40 ); + matchstarttext.sort = 1001; + matchstarttext settext( game["strings"]["waiting_for_teams"] ); + matchstarttext.foreground = 0; + matchstarttext.hidewheninmenu = 1; + waitforplayers(); + matchstarttext settext( game["strings"]["match_starting_in"] ); + matchstarttimer = createserverfontstring( "objective", 2.2 ); + matchstarttimer setpoint( "CENTER", "CENTER", 0, 0 ); + matchstarttimer.sort = 1001; + matchstarttimer.color = ( 1, 1, 0 ); + matchstarttimer.foreground = 0; + matchstarttimer.hidewheninmenu = 1; + counttime = int( level.prematchperiod ); + + if ( counttime >= 2 ) + { + while ( counttime > 0 && !level.gameended ) + { + matchstarttimer setvalue( counttime ); + + if ( counttime == 2 ) + visionsetnaked( getdvar( "mapname" ), 3.0 ); + + counttime--; + wait 1.0; + } + } + else + visionsetnaked( getdvar( "mapname" ), 1.0 ); + + matchstarttimer destroyelem(); + matchstarttext destroyelem(); +} + +matchstarttimerskip() +{ + if ( !ispregame() ) + visionsetnaked( getdvar( "mapname" ), 0 ); + else + visionsetnaked( "mpIntro", 0 ); +} + +notifyteamwavespawn( team, time ) +{ + if ( time - level.lastwave[team] > level.wavedelay[team] * 1000 ) + { + level notify( "wave_respawn_" + team ); + level.lastwave[team] = time; + level.waveplayerspawnindex[team] = 0; + } +} + +wavespawntimer() +{ + level endon( "game_ended" ); + + while ( game["state"] == "playing" ) + { + time = gettime(); + + foreach ( team in level.teams ) + notifyteamwavespawn( team, time ); + + wait 0.05; + } +} + +hostidledout() +{ + hostplayer = gethostplayer(); +/# + if ( getdvarint( "scr_writeConfigStrings" ) == 1 || getdvarint( "scr_hostmigrationtest" ) == 1 ) + return false; +#/ + if ( isdefined( hostplayer ) && !hostplayer.hasspawned && !isdefined( hostplayer.selectedclass ) ) + return true; + + return false; +} + +incrementmatchcompletionstat( gamemode, playedorhosted, stat ) +{ + self adddstat( "gameHistory", gamemode, "modeHistory", playedorhosted, stat, 1 ); +} + +setmatchcompletionstat( gamemode, playedorhosted, stat ) +{ + self setdstat( "gameHistory", gamemode, "modeHistory", playedorhosted, stat, 1 ); +} + +getcurrentgamemode() +{ + return "publicmatch"; +} + +displayroundend( winner, endreasontext ) +{ + if ( level.displayroundendtext ) + { + if ( winner == "tie" ) + maps\mp\_demo::gameresultbookmark( "round_result", level.teamindex["neutral"], level.teamindex["neutral"] ); + else + maps\mp\_demo::gameresultbookmark( "round_result", level.teamindex[winner], level.teamindex["neutral"] ); + + setmatchflag( "cg_drawSpectatorMessages", 0 ); + players = level.players; + + for ( index = 0; index < players.size; index++ ) + { + player = players[index]; + + if ( !isdefined( player.pers["team"] ) ) + { + player [[ level.spawnintermission ]]( 1 ); + player closemenu(); + player closeingamemenu(); + continue; + } + + if ( level.wagermatch ) + { + if ( level.teambased ) + player thread [[ level.onteamwageroutcomenotify ]]( winner, 1, endreasontext ); + else + player thread [[ level.onwageroutcomenotify ]]( winner, endreasontext ); + } + else if ( level.teambased ) + { + player thread [[ level.onteamoutcomenotify ]]( winner, 1, endreasontext ); + player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "ROUND_END" ); + } + else + { + player thread [[ level.onoutcomenotify ]]( winner, 1, endreasontext ); + player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "ROUND_END" ); + } + + player setclientuivisibilityflag( "hud_visible", 0 ); + player setclientuivisibilityflag( "g_compassShowEnemies", 0 ); + } + } + + if ( waslastround() ) + roundendwait( level.roundenddelay, 0 ); + else + { + thread maps\mp\gametypes_zm\_globallogic_audio::announceroundwinner( winner, level.roundenddelay / 4 ); + roundendwait( level.roundenddelay, 1 ); + } +} + +displayroundswitch( winner, endreasontext ) +{ + switchtype = level.halftimetype; + + if ( switchtype == "halftime" ) + { + if ( isdefined( level.nextroundisovertime ) && level.nextroundisovertime ) + switchtype = "overtime"; + else if ( level.roundlimit ) + { + if ( game["roundsplayed"] * 2 == level.roundlimit ) + switchtype = "halftime"; + else + switchtype = "intermission"; + } + else if ( level.scorelimit ) + { + if ( game["roundsplayed"] == level.scorelimit - 1 ) + switchtype = "halftime"; + else + switchtype = "intermission"; + } + else + switchtype = "intermission"; + } + + leaderdialog = maps\mp\gametypes_zm\_globallogic_audio::getroundswitchdialog( switchtype ); + setmatchtalkflag( "EveryoneHearsEveryone", 1 ); + players = level.players; + + for ( index = 0; index < players.size; index++ ) + { + player = players[index]; + + if ( !isdefined( player.pers["team"] ) ) + { + player [[ level.spawnintermission ]]( 1 ); + player closemenu(); + player closeingamemenu(); + continue; + } + + player maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( leaderdialog ); + player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "ROUND_SWITCH" ); + + if ( level.wagermatch ) + player thread [[ level.onteamwageroutcomenotify ]]( switchtype, 1, level.halftimesubcaption ); + else + player thread [[ level.onteamoutcomenotify ]]( switchtype, 0, level.halftimesubcaption ); + + player setclientuivisibilityflag( "hud_visible", 0 ); + } + + roundendwait( level.halftimeroundenddelay, 0 ); +} + +displaygameend( winner, endreasontext ) +{ + setmatchtalkflag( "EveryoneHearsEveryone", 1 ); + setmatchflag( "cg_drawSpectatorMessages", 0 ); + + if ( winner == "tie" ) + maps\mp\_demo::gameresultbookmark( "game_result", level.teamindex["neutral"], level.teamindex["neutral"] ); + else + maps\mp\_demo::gameresultbookmark( "game_result", level.teamindex[winner], level.teamindex["neutral"] ); + + players = level.players; + + for ( index = 0; index < players.size; index++ ) + { + player = players[index]; + + if ( !isdefined( player.pers["team"] ) ) + { + player [[ level.spawnintermission ]]( 1 ); + player closemenu(); + player closeingamemenu(); + continue; + } + + if ( level.wagermatch ) + { + if ( level.teambased ) + player thread [[ level.onteamwageroutcomenotify ]]( winner, 0, endreasontext ); + else + player thread [[ level.onwageroutcomenotify ]]( winner, endreasontext ); + } + else if ( level.teambased ) + player thread [[ level.onteamoutcomenotify ]]( winner, 0, endreasontext ); + else + { + player thread [[ level.onoutcomenotify ]]( winner, 0, endreasontext ); + + if ( isdefined( winner ) && player == winner ) + player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "VICTORY" ); + else if ( !level.splitscreen ) + player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "LOSE" ); + } + + player setclientuivisibilityflag( "hud_visible", 0 ); + player setclientuivisibilityflag( "g_compassShowEnemies", 0 ); + } + + if ( level.teambased ) + { + thread maps\mp\gametypes_zm\_globallogic_audio::announcegamewinner( winner, level.postroundtime / 2 ); + players = level.players; + + for ( index = 0; index < players.size; index++ ) + { + player = players[index]; + team = player.pers["team"]; + + if ( level.splitscreen ) + { + if ( winner == "tie" ) + player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "DRAW" ); + else if ( winner == team ) + player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "VICTORY" ); + else + player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "LOSE" ); + + continue; + } + + if ( winner == "tie" ) + { + player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "DRAW" ); + continue; + } + + if ( winner == team ) + { + player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "VICTORY" ); + continue; + } + + player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "LOSE" ); + } + } + + bbprint( "session_epilogs", "reason %s", endreasontext ); + bbprint( "mpmatchfacts", "gametime %d winner %s killstreakcount %d", gettime(), winner, level.killstreak_counter ); + roundendwait( level.postroundtime, 1 ); +} + +getendreasontext() +{ + if ( hitroundlimit() || hitroundwinlimit() ) + return game["strings"]["round_limit_reached"]; + else if ( hitscorelimit() ) + return game["strings"]["score_limit_reached"]; + + if ( level.forcedend ) + { + if ( level.hostforcedend ) + return &"MP_HOST_ENDED_GAME"; + else + return &"MP_ENDED_GAME"; + } + + return game["strings"]["time_limit_reached"]; +} + +resetoutcomeforallplayers() +{ + players = level.players; + + for ( index = 0; index < players.size; index++ ) + { + player = players[index]; + player notify( "reset_outcome" ); + } +} + +startnextround( winner, endreasontext ) +{ + if ( !isoneround() ) + { + displayroundend( winner, endreasontext ); + maps\mp\gametypes_zm\_globallogic_utils::executepostroundevents(); + + if ( !waslastround() ) + { + if ( checkroundswitch() ) + displayroundswitch( winner, endreasontext ); + + if ( isdefined( level.nextroundisovertime ) && level.nextroundisovertime ) + { + if ( !isdefined( game["overtime_round"] ) ) + game["overtime_round"] = 1; + else + game["overtime_round"]++; + } + + setmatchtalkflag( "DeadChatWithDead", level.voip.deadchatwithdead ); + setmatchtalkflag( "DeadChatWithTeam", level.voip.deadchatwithteam ); + setmatchtalkflag( "DeadHearTeamLiving", level.voip.deadhearteamliving ); + setmatchtalkflag( "DeadHearAllLiving", level.voip.deadhearallliving ); + setmatchtalkflag( "EveryoneHearsEveryone", level.voip.everyonehearseveryone ); + setmatchtalkflag( "DeadHearKiller", level.voip.deadhearkiller ); + setmatchtalkflag( "KillersHearVictim", level.voip.killershearvictim ); + game["state"] = "playing"; + level.allowbattlechatter = getgametypesetting( "allowBattleChatter" ); + map_restart( 1 ); + return true; + } + } + + return false; +} + +settopplayerstats() +{ + if ( level.rankedmatch || level.wagermatch ) + { + placement = level.placement["all"]; + topthreeplayers = min( 3, placement.size ); + + for ( index = 0; index < topthreeplayers; index++ ) + { + if ( level.placement["all"][index].score ) + { + if ( !index ) + { + level.placement["all"][index] addplayerstatwithgametype( "TOPPLAYER", 1 ); + level.placement["all"][index] notify( "topplayer" ); + } + else + level.placement["all"][index] notify( "nottopplayer" ); + + level.placement["all"][index] addplayerstatwithgametype( "TOP3", 1 ); + level.placement["all"][index] notify( "top3" ); + } + } + + for ( index = 3; index < placement.size; index++ ) + { + level.placement["all"][index] notify( "nottop3" ); + level.placement["all"][index] notify( "nottopplayer" ); + } + + if ( level.teambased ) + { + foreach ( team in level.teams ) + settopteamstats( team ); + } + } +} + +settopteamstats( team ) +{ + placementteam = level.placement[team]; + topthreeteamplayers = min( 3, placementteam.size ); + + if ( placementteam.size < 5 ) + return; + + for ( index = 0; index < topthreeteamplayers; index++ ) + { + if ( placementteam[index].score ) + placementteam[index] addplayerstatwithgametype( "TOP3TEAM", 1 ); + } +} + +getgamelength() +{ + if ( !level.timelimit || level.forcedend ) + { + gamelength = maps\mp\gametypes_zm\_globallogic_utils::gettimepassed() / 1000; + gamelength = min( gamelength, 1200 ); + } + else + gamelength = level.timelimit * 60; + + return gamelength; +} + +gamehistoryplayerquit() +{ + if ( !gamemodeismode( level.gamemode_public_match ) ) + return; + + teamscoreratio = 0; + self gamehistoryfinishmatch( 3, 0, 0, 0, 0, teamscoreratio ); + + if ( isdefined( self.pers["matchesPlayedStatsTracked"] ) ) + { + gamemode = getcurrentgamemode(); + self incrementmatchcompletionstat( gamemode, "played", "quit" ); + + if ( isdefined( self.pers["matchesHostedStatsTracked"] ) ) + { + self incrementmatchcompletionstat( gamemode, "hosted", "quit" ); + self.pers["matchesHostedStatsTracked"] = undefined; + } + + self.pers["matchesPlayedStatsTracked"] = undefined; + } + + uploadstats( self ); + wait 1; +} + +endgame( winner, endreasontext ) +{ + if ( game["state"] == "postgame" || level.gameended ) + return; + + if ( isdefined( level.onendgame ) ) + [[ level.onendgame ]]( winner ); + + if ( !level.wagermatch ) + setmatchflag( "enable_popups", 0 ); + + if ( !isdefined( level.disableoutrovisionset ) || level.disableoutrovisionset == 0 ) + { + if ( sessionmodeiszombiesgame() && level.forcedend ) + visionsetnaked( "zombie_last_stand", 2.0 ); + else + visionsetnaked( "mpOutro", 2.0 ); + } + + setmatchflag( "cg_drawSpectatorMessages", 0 ); + setmatchflag( "game_ended", 1 ); + game["state"] = "postgame"; + level.gameendtime = gettime(); + level.gameended = 1; + setdvar( "g_gameEnded", 1 ); + level.ingraceperiod = 0; + level notify( "game_ended" ); + level.allowbattlechatter = 0; + maps\mp\gametypes_zm\_globallogic_audio::flushdialog(); + + if ( !isdefined( game["overtime_round"] ) || waslastround() ) + { + game["roundsplayed"]++; + game["roundwinner"][game["roundsplayed"]] = winner; + + if ( level.teambased ) + game["roundswon"][winner]++; + } + + if ( isdefined( winner ) && isdefined( level.teams[winner] ) ) + level.finalkillcam_winner = winner; + else + level.finalkillcam_winner = "none"; + + setgameendtime( 0 ); + updateplacement(); + updaterankedmatch( winner ); + players = level.players; + newtime = gettime(); + gamelength = getgamelength(); + setmatchtalkflag( "EveryoneHearsEveryone", 1 ); + bbgameover = 0; + + if ( isoneround() || waslastround() ) + { + bbgameover = 1; + + if ( level.teambased ) + { + if ( winner == "tie" ) + recordgameresult( "draw" ); + else + recordgameresult( winner ); + } + else if ( !isdefined( winner ) ) + recordgameresult( "draw" ); + else + recordgameresult( winner.team ); + } + + for ( index = 0; index < players.size; index++ ) + { + player = players[index]; + player maps\mp\gametypes_zm\_globallogic_player::freezeplayerforroundend(); + player thread roundenddof( 4.0 ); + player maps\mp\gametypes_zm\_globallogic_ui::freegameplayhudelems(); + player maps\mp\gametypes_zm\_weapons::updateweapontimings( newtime ); + player bbplayermatchend( gamelength, endreasontext, bbgameover ); + + if ( ispregame() ) + continue; + + if ( ( level.rankedmatch || level.wagermatch || level.leaguematch ) && !player issplitscreen() ) + { + if ( isdefined( player.setpromotion ) ) + { + player setdstat( "AfterActionReportStats", "lobbyPopup", "promotion" ); + continue; + } + + player setdstat( "AfterActionReportStats", "lobbyPopup", "summary" ); + } + } + + maps\mp\_music::setmusicstate( "SILENT" ); + + if ( !level.infinalkillcam ) + { + + } + + thread maps\mp\_challenges::roundend( winner ); + + if ( startnextround( winner, endreasontext ) ) + return; + + if ( !isoneround() ) + { + if ( isdefined( level.onroundendgame ) ) + winner = [[ level.onroundendgame ]]( winner ); + + endreasontext = getendreasontext(); + } + + skillupdate( winner, level.teambased ); + recordleaguewinner( winner ); + settopplayerstats(); + thread maps\mp\_challenges::gameend( winner ); + + if ( isdefined( winner ) && ( !isdefined( level.skipgameend ) || !level.skipgameend ) ) + displaygameend( winner, endreasontext ); + + if ( isoneround() ) + maps\mp\gametypes_zm\_globallogic_utils::executepostroundevents(); + + level.intermission = 1; + setmatchtalkflag( "EveryoneHearsEveryone", 1 ); + players = level.players; + + for ( index = 0; index < players.size; index++ ) + { + player = players[index]; + recordplayerstats( player, "presentAtEnd", 1 ); + player closemenu(); + player closeingamemenu(); + player notify( "reset_outcome" ); + player thread [[ level.spawnintermission ]](); + player setclientuivisibilityflag( "hud_visible", 1 ); + } + + level notify( "sfade" ); + logstring( "game ended" ); + + if ( !isdefined( level.skipgameend ) || !level.skipgameend ) + wait 5.0; + + exitlevel( 0 ); +} + +bbplayermatchend( gamelength, endreasonstring, gameover ) +{ + playerrank = getplacementforplayer( self ); + totaltimeplayed = 0; + + if ( isdefined( self.timeplayed ) && isdefined( self.timeplayed["total"] ) ) + { + totaltimeplayed = self.timeplayed["total"]; + + if ( totaltimeplayed > gamelength ) + totaltimeplayed = gamelength; + } + + xuid = self getxuid(); + bbprint( "mpplayermatchfacts", "score %d momentum %d endreason %s sessionrank %d playtime %d xuid %s gameover %d team %s", self.pers["score"], self.pers["momentum"], endreasonstring, playerrank, totaltimeplayed, xuid, gameover, self.pers["team"] ); +} + +roundendwait( defaultdelay, matchbonus ) +{ + notifiesdone = 0; + + while ( !notifiesdone ) + { + players = level.players; + notifiesdone = 1; + + for ( index = 0; index < players.size; index++ ) + { + if ( !isdefined( players[index].doingnotify ) || !players[index].doingnotify ) + continue; + + notifiesdone = 0; + } + + wait 0.5; + } + + if ( !matchbonus ) + { + wait( defaultdelay ); + level notify( "round_end_done" ); + return; + } + + wait( defaultdelay / 2 ); + level notify( "give_match_bonus" ); + wait( defaultdelay / 2 ); + notifiesdone = 0; + + while ( !notifiesdone ) + { + players = level.players; + notifiesdone = 1; + + for ( index = 0; index < players.size; index++ ) + { + if ( !isdefined( players[index].doingnotify ) || !players[index].doingnotify ) + continue; + + notifiesdone = 0; + } + + wait 0.5; + } + + level notify( "round_end_done" ); +} + +roundenddof( time ) +{ + self setdepthoffield( 0, 128, 512, 4000, 6, 1.8 ); +} + +checktimelimit() +{ + if ( isdefined( level.timelimitoverride ) && level.timelimitoverride ) + return; + + if ( game["state"] != "playing" ) + { + setgameendtime( 0 ); + return; + } + + if ( level.timelimit <= 0 ) + { + setgameendtime( 0 ); + return; + } + + if ( level.inprematchperiod ) + { + setgameendtime( 0 ); + return; + } + + if ( level.timerstopped ) + { + setgameendtime( 0 ); + return; + } + + if ( !isdefined( level.starttime ) ) + return; + + timeleft = maps\mp\gametypes_zm\_globallogic_utils::gettimeremaining(); + setgameendtime( gettime() + int( timeleft ) ); + + if ( timeleft > 0 ) + return; + + [[ level.ontimelimit ]](); +} + +allteamsunderscorelimit() +{ + foreach ( team in level.teams ) + { + if ( game["teamScores"][team] >= level.scorelimit ) + return false; + } + + return true; +} + +checkscorelimit() +{ + if ( game["state"] != "playing" ) + return false; + + if ( level.scorelimit <= 0 ) + return false; + + if ( level.teambased ) + { + if ( allteamsunderscorelimit() ) + return false; + } + else + { + if ( !isplayer( self ) ) + return false; + + if ( self.score < level.scorelimit ) + return false; + } + + [[ level.onscorelimit ]](); +} + +updategametypedvars() +{ + level endon( "game_ended" ); + + while ( game["state"] == "playing" ) + { + roundlimit = clamp( getgametypesetting( "roundLimit" ), level.roundlimitmin, level.roundlimitmax ); + + if ( roundlimit != level.roundlimit ) + { + level.roundlimit = roundlimit; + level notify( "update_roundlimit" ); + } + + timelimit = [[ level.gettimelimit ]](); + + if ( timelimit != level.timelimit ) + { + level.timelimit = timelimit; + setdvar( "ui_timelimit", level.timelimit ); + level notify( "update_timelimit" ); + } + + thread checktimelimit(); + scorelimit = clamp( getgametypesetting( "scoreLimit" ), level.scorelimitmin, level.scorelimitmax ); + + if ( scorelimit != level.scorelimit ) + { + level.scorelimit = scorelimit; + setdvar( "ui_scorelimit", level.scorelimit ); + level notify( "update_scorelimit" ); + } + + thread checkscorelimit(); + + if ( isdefined( level.starttime ) ) + { + if ( maps\mp\gametypes_zm\_globallogic_utils::gettimeremaining() < 3000 ) + { + wait 0.1; + continue; + } + } + + wait 1; + } +} + +removedisconnectedplayerfromplacement() +{ + offset = 0; + numplayers = level.placement["all"].size; + found = 0; + + for ( i = 0; i < numplayers; i++ ) + { + if ( level.placement["all"][i] == self ) + found = 1; + + if ( found ) + level.placement["all"][i] = level.placement["all"][i + 1]; + } + + if ( !found ) + return; + + level.placement["all"][numplayers - 1] = undefined; + assert( level.placement["all"].size == numplayers - 1 ); +/# + maps\mp\gametypes_zm\_globallogic_utils::assertproperplacement(); +#/ + updateteamplacement(); + + if ( level.teambased ) + return; + + numplayers = level.placement["all"].size; + + for ( i = 0; i < numplayers; i++ ) + { + player = level.placement["all"][i]; + player notify( "update_outcome" ); + } +} + +updateplacement() +{ + if ( !level.players.size ) + return; + + level.placement["all"] = []; + + for ( index = 0; index < level.players.size; index++ ) + { + if ( isdefined( level.teams[level.players[index].team] ) ) + level.placement["all"][level.placement["all"].size] = level.players[index]; + } + + placementall = level.placement["all"]; + + for ( i = 1; i < placementall.size; i++ ) + { + player = placementall[i]; + playerscore = player.score; + + for ( j = i - 1; j >= 0 && ( playerscore > placementall[j].score || playerscore == placementall[j].score && player.deaths < placementall[j].deaths ); j-- ) + placementall[j + 1] = placementall[j]; + + placementall[j + 1] = player; + } + + level.placement["all"] = placementall; +/# + maps\mp\gametypes_zm\_globallogic_utils::assertproperplacement(); +#/ + updateteamplacement(); +} + +updateteamplacement() +{ + foreach ( team in level.teams ) + placement[team] = []; + + placement["spectator"] = []; + + if ( !level.teambased ) + return; + + placementall = level.placement["all"]; + placementallsize = placementall.size; + + for ( i = 0; i < placementallsize; i++ ) + { + player = placementall[i]; + + if ( isdefined( player ) ) + { + team = player.pers["team"]; + placement[team][placement[team].size] = player; + } + } + + foreach ( team in level.teams ) + level.placement[team] = placement[team]; +} + +getplacementforplayer( player ) +{ + updateplacement(); + playerrank = -1; + placement = level.placement["all"]; + + for ( placementindex = 0; placementindex < placement.size; placementindex++ ) + { + if ( level.placement["all"][placementindex] == player ) + { + playerrank = placementindex + 1; + break; + } + } + + return playerrank; +} + +sortdeadplayers( team ) +{ + if ( !level.playerqueuedrespawn ) + return; + + for ( i = 1; i < level.deadplayers[team].size; i++ ) + { + player = level.deadplayers[team][i]; + + for ( j = i - 1; j >= 0 && player.deathtime < level.deadplayers[team][j].deathtime; j-- ) + level.deadplayers[team][j + 1] = level.deadplayers[team][j]; + + level.deadplayers[team][j + 1] = player; + } + + for ( i = 0; i < level.deadplayers[team].size; i++ ) + { + if ( level.deadplayers[team][i].spawnqueueindex != i ) + level.spawnqueuemodified[team] = 1; + + level.deadplayers[team][i].spawnqueueindex = i; + } +} + +totalalivecount() +{ + count = 0; + + foreach ( team in level.teams ) + count += level.alivecount[team]; + + return count; +} + +totalplayerlives() +{ + count = 0; + + foreach ( team in level.teams ) + count += level.playerlives[team]; + + return count; +} + +totalplayercount() +{ + count = 0; + + foreach ( team in level.teams ) + count += level.playercount[team]; + + return count; +} + +initteamvariables( team ) +{ + if ( !isdefined( level.alivecount ) ) + level.alivecount = []; + + level.alivecount[team] = 0; + level.lastalivecount[team] = 0; + level.everexisted[team] = 0; + level.wavedelay[team] = 0; + level.lastwave[team] = 0; + level.waveplayerspawnindex[team] = 0; + resetteamvariables( team ); +} + +resetteamvariables( team ) +{ + level.playercount[team] = 0; + level.botscount[team] = 0; + level.lastalivecount[team] = level.alivecount[team]; + level.alivecount[team] = 0; + level.playerlives[team] = 0; + level.aliveplayers[team] = []; + level.deadplayers[team] = []; + level.squads[team] = []; + level.spawnqueuemodified[team] = 0; +} + +updateteamstatus() +{ + level notify( "updating_team_status" ); + level endon( "updating_team_status" ); + level endon( "game_ended" ); + waittillframeend; + wait 0; + + if ( game["state"] == "postgame" ) + return; + + resettimeout(); + + foreach ( team in level.teams ) + resetteamvariables( team ); + + level.activeplayers = []; + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( !isdefined( player ) && level.splitscreen ) + continue; + + team = player.team; + class = player.class; + + if ( team != "spectator" && ( isdefined( class ) && class != "" ) ) + { + level.playercount[team]++; + + if ( isdefined( player.pers["isBot"] ) ) + level.botscount[team]++; + + if ( player.sessionstate == "playing" ) + { + level.alivecount[team]++; + level.playerlives[team]++; + player.spawnqueueindex = -1; + + if ( isalive( player ) ) + { + level.aliveplayers[team][level.aliveplayers[team].size] = player; + level.activeplayers[level.activeplayers.size] = player; + } + else + level.deadplayers[team][level.deadplayers[team].size] = player; + + continue; + } + + level.deadplayers[team][level.deadplayers[team].size] = player; + + if ( player maps\mp\gametypes_zm\_globallogic_spawn::mayspawn() ) + level.playerlives[team]++; + } + } + + totalalive = totalalivecount(); + + if ( totalalive > level.maxplayercount ) + level.maxplayercount = totalalive; + + foreach ( team in level.teams ) + { + if ( level.alivecount[team] ) + level.everexisted[team] = 1; + + sortdeadplayers( team ); + } + + level updategameevents(); +} + +checkteamscorelimitsoon( team ) +{ + assert( isdefined( team ) ); + + if ( level.scorelimit <= 0 ) + return; + + if ( !level.teambased ) + return; + + if ( maps\mp\gametypes_zm\_globallogic_utils::gettimepassed() < 60000 ) + return; + + timeleft = maps\mp\gametypes_zm\_globallogic_utils::getestimatedtimeuntilscorelimit( team ); + + if ( timeleft < 1 ) + level notify( "match_ending_soon", "score" ); +} + +checkplayerscorelimitsoon() +{ + assert( isplayer( self ) ); + + if ( level.scorelimit <= 0 ) + return; + + if ( level.teambased ) + return; + + if ( maps\mp\gametypes_zm\_globallogic_utils::gettimepassed() < 60000 ) + return; + + timeleft = maps\mp\gametypes_zm\_globallogic_utils::getestimatedtimeuntilscorelimit( undefined ); + + if ( timeleft < 1 ) + level notify( "match_ending_soon", "score" ); +} + +timelimitclock() +{ + level endon( "game_ended" ); + wait 0.05; + clockobject = spawn( "script_origin", ( 0, 0, 0 ) ); + + while ( game["state"] == "playing" ) + { + if ( !level.timerstopped && level.timelimit ) + { + timeleft = maps\mp\gametypes_zm\_globallogic_utils::gettimeremaining() / 1000; + timeleftint = int( timeleft + 0.5 ); + + if ( timeleftint == 601 ) + clientnotify( "notify_10" ); + + if ( timeleftint == 301 ) + clientnotify( "notify_5" ); + + if ( timeleftint == 60 ) + clientnotify( "notify_1" ); + + if ( timeleftint == 12 ) + clientnotify( "notify_count" ); + + if ( timeleftint >= 40 && timeleftint <= 60 ) + level notify( "match_ending_soon", "time" ); + + if ( timeleftint >= 30 && timeleftint <= 40 ) + level notify( "match_ending_pretty_soon", "time" ); + + if ( timeleftint <= 32 ) + level notify( "match_ending_vox" ); + + if ( timeleftint <= 10 || timeleftint <= 30 && timeleftint % 2 == 0 ) + { + level notify( "match_ending_very_soon", "time" ); + + if ( timeleftint == 0 ) + break; + + clockobject playsound( "mpl_ui_timer_countdown" ); + } + + if ( timeleft - floor( timeleft ) >= 0.05 ) + wait( timeleft - floor( timeleft ) ); + } + + wait 1.0; + } +} + +timelimitclock_intermission( waittime ) +{ + setgameendtime( gettime() + int( waittime * 1000 ) ); + clockobject = spawn( "script_origin", ( 0, 0, 0 ) ); + + if ( waittime >= 10.0 ) + wait( waittime - 10.0 ); + + for (;;) + { + clockobject playsound( "mpl_ui_timer_countdown" ); + wait 1.0; + } +} + +startgame() +{ + thread maps\mp\gametypes_zm\_globallogic_utils::gametimer(); + level.timerstopped = 0; + setmatchtalkflag( "DeadChatWithDead", level.voip.deadchatwithdead ); + setmatchtalkflag( "DeadChatWithTeam", level.voip.deadchatwithteam ); + setmatchtalkflag( "DeadHearTeamLiving", level.voip.deadhearteamliving ); + setmatchtalkflag( "DeadHearAllLiving", level.voip.deadhearallliving ); + setmatchtalkflag( "EveryoneHearsEveryone", level.voip.everyonehearseveryone ); + setmatchtalkflag( "DeadHearKiller", level.voip.deadhearkiller ); + setmatchtalkflag( "KillersHearVictim", level.voip.killershearvictim ); + prematchperiod(); + level notify( "prematch_over" ); + thread timelimitclock(); + thread graceperiod(); + thread watchmatchendingsoon(); + thread maps\mp\gametypes_zm\_globallogic_audio::musiccontroller(); + recordmatchbegin(); +} + +waitforplayers() +{ + +} + +prematchperiod() +{ + setmatchflag( "hud_hardcore", level.hardcoremode ); + level endon( "game_ended" ); + + if ( level.prematchperiod > 0 ) + { + thread matchstarttimer(); + waitforplayers(); + wait( level.prematchperiod ); + } + else + { + matchstarttimerskip(); + wait 0.05; + } + + level.inprematchperiod = 0; + + for ( index = 0; index < level.players.size; index++ ) + { + level.players[index] freeze_player_controls( 0 ); + level.players[index] enableweapons(); + } + + if ( game["state"] != "playing" ) + return; +} + +graceperiod() +{ + level endon( "game_ended" ); + + if ( isdefined( level.graceperiodfunc ) ) + [[ level.graceperiodfunc ]](); + else + wait( level.graceperiod ); + + level notify( "grace_period_ending" ); + wait 0.05; + level.ingraceperiod = 0; + + if ( game["state"] != "playing" ) + return; + + if ( level.numlives ) + { + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( !player.hasspawned && player.sessionteam != "spectator" && !isalive( player ) ) + player.statusicon = "hud_status_dead"; + } + } + + level thread updateteamstatus(); +} + +watchmatchendingsoon() +{ + setdvar( "xblive_matchEndingSoon", 0 ); + + level waittill( "match_ending_soon", reason ); + + setdvar( "xblive_matchEndingSoon", 1 ); +} + +assertteamvariables() +{ + if ( !level.createfx_enabled && !sessionmodeiszombiesgame() ) + { + foreach ( team in level.teams ) + { + assert( isdefined( game["strings"][team + "_win"] ) ); + assert( isdefined( game["strings"][team + "_win_round"] ) ); + assert( isdefined( game["strings"][team + "_mission_accomplished"] ) ); + assert( isdefined( game["strings"][team + "_eliminated"] ) ); + assert( isdefined( game["strings"][team + "_forfeited"] ) ); + assert( isdefined( game["strings"][team + "_name"] ) ); + assert( isdefined( game["music"]["spawn_" + team] ) ); + assert( isdefined( game["music"]["victory_" + team] ) ); + assert( isdefined( game["icons"][team] ) ); + assert( isdefined( game["voice"][team] ) ); + } + } +} + +anyteamhaswavedelay() +{ + foreach ( team in level.teams ) + { + if ( level.wavedelay[team] ) + return true; + } + + return false; +} + +callback_startgametype() +{ + level.prematchperiod = 0; + level.intermission = 0; + setmatchflag( "cg_drawSpectatorMessages", 1 ); + setmatchflag( "game_ended", 0 ); + + if ( !isdefined( game["gamestarted"] ) ) + { + if ( !isdefined( game["allies"] ) ) + game["allies"] = "seals"; + + if ( !isdefined( game["axis"] ) ) + game["axis"] = "pmc"; + + if ( !isdefined( game["attackers"] ) ) + game["attackers"] = "allies"; + + if ( !isdefined( game["defenders"] ) ) + game["defenders"] = "axis"; + + assert( game["attackers"] != game["defenders"] ); + + foreach ( team in level.teams ) + { + if ( !isdefined( game[team] ) ) + game[team] = "pmc"; + } + + if ( !isdefined( game["state"] ) ) + game["state"] = "playing"; + + precacherumble( "damage_heavy" ); + precacherumble( "damage_light" ); + precacheshader( "white" ); + precacheshader( "black" ); + makedvarserverinfo( "scr_allies", "marines" ); + makedvarserverinfo( "scr_axis", "nva" ); + makedvarserverinfo( "cg_thirdPersonAngle", 354 ); + setdvar( "cg_thirdPersonAngle", 354 ); + game["strings"]["press_to_spawn"] = &"PLATFORM_PRESS_TO_SPAWN"; + + if ( level.teambased ) + { + game["strings"]["waiting_for_teams"] = &"MP_WAITING_FOR_TEAMS"; + game["strings"]["opponent_forfeiting_in"] = &"MP_OPPONENT_FORFEITING_IN"; + } + else + { + game["strings"]["waiting_for_teams"] = &"MP_WAITING_FOR_PLAYERS"; + game["strings"]["opponent_forfeiting_in"] = &"MP_OPPONENT_FORFEITING_IN"; + } + + game["strings"]["match_starting_in"] = &"MP_MATCH_STARTING_IN"; + game["strings"]["spawn_next_round"] = &"MP_SPAWN_NEXT_ROUND"; + game["strings"]["waiting_to_spawn"] = &"MP_WAITING_TO_SPAWN"; + game["strings"]["waiting_to_spawn_ss"] = &"MP_WAITING_TO_SPAWN_SS"; + game["strings"]["you_will_spawn"] = &"MP_YOU_WILL_RESPAWN"; + game["strings"]["match_starting"] = &"MP_MATCH_STARTING"; + game["strings"]["change_class"] = &"MP_CHANGE_CLASS_NEXT_SPAWN"; + game["strings"]["last_stand"] = &"MPUI_LAST_STAND"; + game["strings"]["cowards_way"] = &"PLATFORM_COWARDS_WAY_OUT"; + game["strings"]["tie"] = &"MP_MATCH_TIE"; + game["strings"]["round_draw"] = &"MP_ROUND_DRAW"; + game["strings"]["enemies_eliminated"] = &"MP_ENEMIES_ELIMINATED"; + game["strings"]["score_limit_reached"] = &"MP_SCORE_LIMIT_REACHED"; + game["strings"]["round_limit_reached"] = &"MP_ROUND_LIMIT_REACHED"; + game["strings"]["time_limit_reached"] = &"MP_TIME_LIMIT_REACHED"; + game["strings"]["players_forfeited"] = &"MP_PLAYERS_FORFEITED"; + assertteamvariables(); + [[ level.onprecachegametype ]](); + game["gamestarted"] = 1; + game["totalKills"] = 0; + + foreach ( team in level.teams ) + { + game["teamScores"][team] = 0; + game["totalKillsTeam"][team] = 0; + } + + if ( !level.splitscreen && !ispregame() ) + level.prematchperiod = getgametypesetting( "prematchperiod" ); + + if ( getdvarint( "xblive_clanmatch" ) != 0 ) + { + foreach ( team in level.teams ) + game["icons"][team] = "composite_emblem_team_axis"; + + game["icons"]["allies"] = "composite_emblem_team_allies"; + game["icons"]["axis"] = "composite_emblem_team_axis"; + } + } + + if ( !isdefined( game["timepassed"] ) ) + game["timepassed"] = 0; + + if ( !isdefined( game["roundsplayed"] ) ) + game["roundsplayed"] = 0; + + setroundsplayed( game["roundsplayed"] ); + + if ( !isdefined( game["roundwinner"] ) ) + game["roundwinner"] = []; + + if ( !isdefined( game["roundswon"] ) ) + game["roundswon"] = []; + + if ( !isdefined( game["roundswon"]["tie"] ) ) + game["roundswon"]["tie"] = 0; + + foreach ( team in level.teams ) + { + if ( !isdefined( game["roundswon"][team] ) ) + game["roundswon"][team] = 0; + + level.teamspawnpoints[team] = []; + level.spawn_point_team_class_names[team] = []; + } + + level.skipvote = 0; + level.gameended = 0; + setdvar( "g_gameEnded", 0 ); + level.objidstart = 0; + level.forcedend = 0; + level.hostforcedend = 0; + level.hardcoremode = getgametypesetting( "hardcoreMode" ); + + if ( level.hardcoremode ) + { + logstring( "game mode: hardcore" ); + + if ( !isdefined( level.friendlyfiredelaytime ) ) + level.friendlyfiredelaytime = 0; + } + + if ( getdvar( "scr_max_rank" ) == "" ) + setdvar( "scr_max_rank", "0" ); + + level.rankcap = getdvarint( "scr_max_rank" ); + + if ( getdvar( "scr_min_prestige" ) == "" ) + setdvar( "scr_min_prestige", "0" ); + + level.minprestige = getdvarint( "scr_min_prestige" ); + level.usestartspawns = 1; + level.roundscorecarry = getgametypesetting( "roundscorecarry" ); + level.allowhitmarkers = getgametypesetting( "allowhitmarkers" ); + level.playerqueuedrespawn = getgametypesetting( "playerQueuedRespawn" ); + level.playerforcerespawn = getgametypesetting( "playerForceRespawn" ); + level.perksenabled = getgametypesetting( "perksEnabled" ); + level.disableattachments = getgametypesetting( "disableAttachments" ); + level.disabletacinsert = getgametypesetting( "disableTacInsert" ); + level.disablecac = getgametypesetting( "disableCAC" ); + level.disableweapondrop = getgametypesetting( "disableweapondrop" ); + level.onlyheadshots = getgametypesetting( "onlyHeadshots" ); + level.minimumallowedteamkills = getgametypesetting( "teamKillPunishCount" ) - 1; + level.teamkillreducedpenalty = getgametypesetting( "teamKillReducedPenalty" ); + level.teamkillpointloss = getgametypesetting( "teamKillPointLoss" ); + level.teamkillspawndelay = getgametypesetting( "teamKillSpawnDelay" ); + level.deathpointloss = getgametypesetting( "deathPointLoss" ); + level.leaderbonus = getgametypesetting( "leaderBonus" ); + level.forceradar = getgametypesetting( "forceRadar" ); + level.playersprinttime = getgametypesetting( "playerSprintTime" ); + level.bulletdamagescalar = getgametypesetting( "bulletDamageScalar" ); + level.playermaxhealth = getgametypesetting( "playerMaxHealth" ); + level.playerhealthregentime = getgametypesetting( "playerHealthRegenTime" ); + level.playerrespawndelay = getgametypesetting( "playerRespawnDelay" ); + level.playerobjectiveheldrespawndelay = getgametypesetting( "playerObjectiveHeldRespawnDelay" ); + level.waverespawndelay = getgametypesetting( "waveRespawnDelay" ); + level.spectatetype = getgametypesetting( "spectateType" ); + level.voip = spawnstruct(); + level.voip.deadchatwithdead = getgametypesetting( "voipDeadChatWithDead" ); + level.voip.deadchatwithteam = getgametypesetting( "voipDeadChatWithTeam" ); + level.voip.deadhearallliving = getgametypesetting( "voipDeadHearAllLiving" ); + level.voip.deadhearteamliving = getgametypesetting( "voipDeadHearTeamLiving" ); + level.voip.everyonehearseveryone = getgametypesetting( "voipEveryoneHearsEveryone" ); + level.voip.deadhearkiller = getgametypesetting( "voipDeadHearKiller" ); + level.voip.killershearvictim = getgametypesetting( "voipKillersHearVictim" ); + + if ( getdvar( "r_reflectionProbeGenerate" ) == "1" ) + level waittill( "eternity" ); + + if ( sessionmodeiszombiesgame() ) + { + level.prematchperiod = 0; + level.persistentdatainfo = []; + level.maxrecentstats = 10; + level.maxhitlocations = 19; + level.globalshotsfired = 0; + thread maps\mp\gametypes_zm\_hud::init(); + thread maps\mp\gametypes_zm\_serversettings::init(); + thread maps\mp\gametypes_zm\_clientids::init(); + thread maps\mp\gametypes_zm\_weaponobjects::init(); + thread maps\mp\gametypes_zm\_scoreboard::init(); + thread maps\mp\gametypes_zm\_shellshock::init(); + thread maps\mp\gametypes_zm\_spectating::init(); + thread maps\mp\gametypes_zm\_gameobjects::init(); + thread maps\mp\gametypes_zm\_spawnlogic::init(); + thread maps\mp\gametypes_zm\_globallogic_audio::init(); + } + + thread maps\mp\gametypes_zm\_hud_message::init(); + stringnames = getarraykeys( game["strings"] ); + + for ( index = 0; index < stringnames.size; index++ ) + precachestring( game["strings"][stringnames[index]] ); + + foreach ( team in level.teams ) + initteamvariables( team ); + + level.maxplayercount = 0; + level.activeplayers = []; + level.allowannouncer = getgametypesetting( "allowAnnouncer" ); + + if ( !isdefined( level.timelimit ) ) + registertimelimit( 1, 1440 ); + + if ( !isdefined( level.scorelimit ) ) + registerscorelimit( 1, 500 ); + + if ( !isdefined( level.roundlimit ) ) + registerroundlimit( 0, 10 ); + + if ( !isdefined( level.roundwinlimit ) ) + registerroundwinlimit( 0, 10 ); + + makedvarserverinfo( "ui_scorelimit" ); + makedvarserverinfo( "ui_timelimit" ); + makedvarserverinfo( "ui_allow_classchange", getdvar( "ui_allow_classchange" ) ); + wavedelay = level.waverespawndelay; + + if ( wavedelay && !ispregame() ) + { + foreach ( team in level.teams ) + { + level.wavedelay[team] = wavedelay; + level.lastwave[team] = 0; + } + + level thread [[ level.wavespawntimer ]](); + } + + level.inprematchperiod = 1; + + if ( level.prematchperiod > 2.0 ) + level.prematchperiod += randomfloat( 4 ) - 2; + + if ( level.numlives || anyteamhaswavedelay() || level.playerqueuedrespawn ) + level.graceperiod = 15; + else + level.graceperiod = 5; + + level.ingraceperiod = 1; + level.roundenddelay = 5; + level.halftimeroundenddelay = 3; + maps\mp\gametypes_zm\_globallogic_score::updateallteamscores(); + level.killstreaksenabled = 1; + + if ( getdvar( "scr_game_rankenabled" ) == "" ) + setdvar( "scr_game_rankenabled", 1 ); + + level.rankenabled = getdvarint( "scr_game_rankenabled" ); + + if ( getdvar( "scr_game_medalsenabled" ) == "" ) + setdvar( "scr_game_medalsenabled", 1 ); + + level.medalsenabled = getdvarint( "scr_game_medalsenabled" ); + + if ( level.hardcoremode && level.rankedmatch && getdvar( "scr_game_friendlyFireDelay" ) == "" ) + setdvar( "scr_game_friendlyFireDelay", 1 ); + + level.friendlyfiredelay = getdvarint( "scr_game_friendlyFireDelay" ); + + if ( getdvar( "createfx" ) == "" ) + [[ level.onstartgametype ]](); + + if ( getdvarint( _hash_826EB3B9 ) == 1 ) + level.killstreaksenabled = 0; +/# + thread maps\mp\gametypes_zm\_dev::init(); +#/ +/# + println( "Globallogic Callback_StartGametype() isPregame() = " + ispregame() + "\\n" ); +#/ + thread startgame(); + level thread updategametypedvars(); +/# + if ( getdvarint( "scr_writeConfigStrings" ) == 1 ) + { + level.skipgameend = 1; + level.roundlimit = 1; + wait 1; + thread forceend( 0 ); + } + + if ( getdvarint( "scr_hostmigrationtest" ) == 1 ) + thread forcedebughostmigration(); +#/ +} + +forcedebughostmigration() +{ +/# + while ( true ) + { + maps\mp\gametypes_zm\_hostmigration::waittillhostmigrationdone(); + wait 60; + starthostmigration(); + maps\mp\gametypes_zm\_hostmigration::waittillhostmigrationdone(); + } +#/ +} + +registerfriendlyfiredelay( dvarstring, defaultvalue, minvalue, maxvalue ) +{ + dvarstring = "scr_" + dvarstring + "_friendlyFireDelayTime"; + + if ( getdvar( dvarstring ) == "" ) + setdvar( dvarstring, defaultvalue ); + + if ( getdvarint( dvarstring ) > maxvalue ) + setdvar( dvarstring, maxvalue ); + else if ( getdvarint( dvarstring ) < minvalue ) + setdvar( dvarstring, minvalue ); + + level.friendlyfiredelaytime = getdvarint( dvarstring ); +} + +checkroundswitch() +{ + if ( !isdefined( level.roundswitch ) || !level.roundswitch ) + return false; + + if ( !isdefined( level.onroundswitch ) ) + return false; + + assert( game["roundsplayed"] > 0 ); + + if ( game["roundsplayed"] % level.roundswitch == 0 ) + { + [[ level.onroundswitch ]](); + return true; + } + + return false; +} + +listenforgameend() +{ + self waittill( "host_sucks_end_game" ); + + level.skipvote = 1; + + if ( !level.gameended ) + level thread maps\mp\gametypes_zm\_globallogic::forceend( 1 ); +} + +getkillstreaks( player ) +{ + for ( killstreaknum = 0; killstreaknum < level.maxkillstreaks; killstreaknum++ ) + killstreak[killstreaknum] = "killstreak_null"; + + if ( isplayer( player ) && !level.oldschool && level.disablecac != 1 && ( !isdefined( player.pers["isBot"] ) && isdefined( player.killstreak ) ) ) + { + currentkillstreak = 0; + + for ( killstreaknum = 0; killstreaknum < level.maxkillstreaks; killstreaknum++ ) + { + if ( isdefined( player.killstreak[killstreaknum] ) ) + { + killstreak[currentkillstreak] = player.killstreak[killstreaknum]; + currentkillstreak++; + } + } + } + + return killstreak; +} + +updaterankedmatch( winner ) +{ + if ( level.rankedmatch ) + { + if ( hostidledout() ) + { + level.hostforcedend = 1; + logstring( "host idled out" ); + endlobby(); + } + } + + if ( !level.wagermatch && !sessionmodeiszombiesgame() ) + { + maps\mp\gametypes_zm\_globallogic_score::updatematchbonusscores( winner ); + maps\mp\gametypes_zm\_globallogic_score::updatewinlossstats( winner ); + } +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_globallogic_actor.gsc b/ZM/Core/maps/mp/gametypes_zm/_globallogic_actor.gsc new file mode 100644 index 0000000..b035cc6 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_globallogic_actor.gsc @@ -0,0 +1,174 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_globallogic_player; +#include maps\mp\gametypes_zm\_globallogic_utils; +#include maps\mp\gametypes_zm\_weapons; +#include maps\mp\gametypes_zm\_damagefeedback; +#include maps\mp\_challenges; + +callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + if ( game["state"] == "postgame" ) + return; + + if ( self.aiteam == "spectator" ) + return; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat ) + return; + + self.idflags = idflags; + self.idflagstime = gettime(); + eattacker = maps\mp\gametypes_zm\_globallogic_player::figureoutattacker( eattacker ); + + if ( !isdefined( vdir ) ) + idflags |= level.idflags_no_knockback; + + friendly = 0; + + if ( self.health == self.maxhealth || !isdefined( self.attackers ) ) + { + self.attackers = []; + self.attackerdata = []; + self.attackerdamage = []; + } + + if ( maps\mp\gametypes_zm\_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) ) + smeansofdeath = "MOD_HEAD_SHOT"; + + if ( level.onlyheadshots ) + { + if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) + return; + else if ( smeansofdeath == "MOD_HEAD_SHOT" ) + idamage = 150; + } + + if ( sweapon == "none" && isdefined( einflictor ) ) + { + if ( isdefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) + sweapon = "explodable_barrel_mp"; + else if ( isdefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) + sweapon = "destructible_car_mp"; + } + + if ( !( idflags & level.idflags_no_protection ) ) + { + if ( isplayer( eattacker ) ) + eattacker.pers["participation"]++; + + prevhealthratio = self.health / self.maxhealth; + + if ( level.teambased && isplayer( eattacker ) && self != eattacker && self.aiteam == eattacker.pers["team"] ) + { + if ( level.friendlyfire == 0 ) + return; + else if ( level.friendlyfire == 1 ) + { + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + } + else if ( level.friendlyfire == 2 ) + return; + else if ( level.friendlyfire == 3 ) + { + idamage = int( idamage * 0.5 ); + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + } + + friendly = 1; + } + else + { + if ( isdefined( eattacker ) && isdefined( self.script_owner ) && eattacker == self.script_owner && !level.hardcoremode ) + return; + + if ( isdefined( eattacker ) && isdefined( self.script_owner ) && isdefined( eattacker.script_owner ) && eattacker.script_owner == self.script_owner ) + return; + + if ( idamage < 1 ) + idamage = 1; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( sweapon ) && !issubstr( smeansofdeath, "MOD_MELEE" ) ) + eattacker thread maps\mp\gametypes_zm\_weapons::checkhit( sweapon ); + + if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isdefined( einflictor ) && isdefined( einflictor.iscooked ) ) + self.wascooked = gettime(); + else + self.wascooked = undefined; + + self.lastdamagewasfromenemy = isdefined( eattacker ) && eattacker != self; + self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + } + + if ( isdefined( eattacker ) && eattacker != self ) + { + if ( sweapon != "artillery_mp" && ( !isdefined( einflictor ) || !isai( einflictor ) ) ) + { + if ( idamage > 0 ) + eattacker thread maps\mp\gametypes_zm\_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor ); + } + } + } +/# + if ( getdvarint( "g_debugDamage" ) ) + println( "actor:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + shitloc + ";" + boneindex + "\\n" ); +#/ + if ( 1 ) + { + lpselfnum = self getentitynumber(); + lpselfteam = self.aiteam; + lpattackerteam = ""; + + if ( isplayer( eattacker ) ) + { + lpattacknum = eattacker getentitynumber(); + lpattackguid = eattacker getguid(); + lpattackname = eattacker.name; + lpattackerteam = eattacker.pers["team"]; + } + else + { + lpattacknum = -1; + lpattackguid = ""; + lpattackname = ""; + lpattackerteam = "world"; + } + + logprint( "AD;" + lpselfnum + ";" + lpselfteam + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\\n" ); + } +} + +callback_actorkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) +{ + if ( game["state"] == "postgame" ) + return; + + if ( isai( attacker ) && isdefined( attacker.script_owner ) ) + { + if ( attacker.script_owner.team != self.aiteam ) + attacker = attacker.script_owner; + } + + if ( attacker.classname == "script_vehicle" && isdefined( attacker.owner ) ) + attacker = attacker.owner; + + if ( isdefined( attacker ) && isplayer( attacker ) ) + { + if ( !level.teambased || self.aiteam != attacker.pers["team"] ) + { + level.globalkillstreaksdestroyed++; + attacker addweaponstat( "dogs_mp", "destroyed", 1 ); + attacker maps\mp\_challenges::killeddog(); + } + } +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_globallogic_audio.gsc b/ZM/Core/maps/mp/gametypes_zm/_globallogic_audio.gsc new file mode 100644 index 0000000..372aef7 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_globallogic_audio.gsc @@ -0,0 +1,904 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_globallogic_utils; +#include maps\mp\gametypes_zm\_globallogic_audio; +#include maps\mp\_music; + +init() +{ + game["music"]["defeat"] = "mus_defeat"; + game["music"]["victory_spectator"] = "mus_defeat"; + game["music"]["winning"] = "mus_time_running_out_winning"; + game["music"]["losing"] = "mus_time_running_out_losing"; + game["music"]["match_end"] = "mus_match_end"; + game["music"]["victory_tie"] = "mus_defeat"; + game["music"]["suspense"] = []; + game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_01"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_02"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_03"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_04"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_05"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_06"; + game["dialog"]["mission_success"] = "mission_success"; + game["dialog"]["mission_failure"] = "mission_fail"; + game["dialog"]["mission_draw"] = "draw"; + game["dialog"]["round_success"] = "encourage_win"; + game["dialog"]["round_failure"] = "encourage_lost"; + game["dialog"]["round_draw"] = "draw"; + game["dialog"]["timesup"] = "timesup"; + game["dialog"]["winning"] = "winning"; + game["dialog"]["losing"] = "losing"; + game["dialog"]["min_draw"] = "min_draw"; + game["dialog"]["lead_lost"] = "lead_lost"; + game["dialog"]["lead_tied"] = "tied"; + game["dialog"]["lead_taken"] = "lead_taken"; + game["dialog"]["last_alive"] = "lastalive"; + game["dialog"]["boost"] = "generic_boost"; + + if ( !isdefined( game["dialog"]["offense_obj"] ) ) + game["dialog"]["offense_obj"] = "generic_boost"; + + if ( !isdefined( game["dialog"]["defense_obj"] ) ) + game["dialog"]["defense_obj"] = "generic_boost"; + + game["dialog"]["hardcore"] = "hardcore"; + game["dialog"]["oldschool"] = "oldschool"; + game["dialog"]["highspeed"] = "highspeed"; + game["dialog"]["tactical"] = "tactical"; + game["dialog"]["challenge"] = "challengecomplete"; + game["dialog"]["promotion"] = "promotion"; + game["dialog"]["bomb_acquired"] = "sd_bomb_taken"; + game["dialog"]["bomb_taken"] = "sd_bomb_taken_taken"; + game["dialog"]["bomb_lost"] = "sd_bomb_drop"; + game["dialog"]["bomb_defused"] = "sd_bomb_defused"; + game["dialog"]["bomb_planted"] = "sd_bomb_planted"; + game["dialog"]["obj_taken"] = "securedobj"; + game["dialog"]["obj_lost"] = "lostobj"; + game["dialog"]["obj_defend"] = "defend_start"; + game["dialog"]["obj_destroy"] = "destroy_start"; + game["dialog"]["obj_capture"] = "capture_obj"; + game["dialog"]["objs_capture"] = "capture_objs"; + game["dialog"]["hq_located"] = "hq_located"; + game["dialog"]["hq_enemy_captured"] = "hq_capture"; + game["dialog"]["hq_enemy_destroyed"] = "hq_defend"; + game["dialog"]["hq_secured"] = "hq_secured"; + game["dialog"]["hq_offline"] = "hq_offline"; + game["dialog"]["hq_online"] = "hq_online"; + game["dialog"]["koth_located"] = "koth_located"; + game["dialog"]["koth_captured"] = "koth_captured"; + game["dialog"]["koth_lost"] = "koth_lost"; + game["dialog"]["koth_secured"] = "koth_secured"; + game["dialog"]["koth_contested"] = "koth_contest"; + game["dialog"]["koth_offline"] = "koth_offline"; + game["dialog"]["koth_online"] = "koth_online"; + game["dialog"]["move_to_new"] = "new_positions"; + game["dialog"]["attack"] = "attack"; + game["dialog"]["defend"] = "defend"; + game["dialog"]["offense"] = "offense"; + game["dialog"]["defense"] = "defense"; + game["dialog"]["halftime"] = "halftime"; + game["dialog"]["overtime"] = "overtime"; + game["dialog"]["side_switch"] = "switchingsides"; + game["dialog"]["flag_taken"] = "ourflag"; + game["dialog"]["flag_dropped"] = "ourflag_drop"; + game["dialog"]["flag_returned"] = "ourflag_return"; + game["dialog"]["flag_captured"] = "ourflag_capt"; + game["dialog"]["enemy_flag_taken"] = "enemyflag"; + game["dialog"]["enemy_flag_dropped"] = "enemyflag_drop"; + game["dialog"]["enemy_flag_returned"] = "enemyflag_return"; + game["dialog"]["enemy_flag_captured"] = "enemyflag_capt"; + game["dialog"]["securing_a"] = "dom_securing_a"; + game["dialog"]["securing_b"] = "dom_securing_b"; + game["dialog"]["securing_c"] = "dom_securing_c"; + game["dialog"]["securing_d"] = "dom_securing_d"; + game["dialog"]["securing_e"] = "dom_securing_e"; + game["dialog"]["securing_f"] = "dom_securing_f"; + game["dialog"]["secured_a"] = "dom_secured_a"; + game["dialog"]["secured_b"] = "dom_secured_b"; + game["dialog"]["secured_c"] = "dom_secured_c"; + game["dialog"]["secured_d"] = "dom_secured_d"; + game["dialog"]["secured_e"] = "dom_secured_e"; + game["dialog"]["secured_f"] = "dom_secured_f"; + game["dialog"]["losing_a"] = "dom_losing_a"; + game["dialog"]["losing_b"] = "dom_losing_b"; + game["dialog"]["losing_c"] = "dom_losing_c"; + game["dialog"]["losing_d"] = "dom_losing_d"; + game["dialog"]["losing_e"] = "dom_losing_e"; + game["dialog"]["losing_f"] = "dom_losing_f"; + game["dialog"]["lost_a"] = "dom_lost_a"; + game["dialog"]["lost_b"] = "dom_lost_b"; + game["dialog"]["lost_c"] = "dom_lost_c"; + game["dialog"]["lost_d"] = "dom_lost_d"; + game["dialog"]["lost_e"] = "dom_lost_e"; + game["dialog"]["lost_f"] = "dom_lost_f"; + game["dialog"]["secure_flag"] = "secure_flag"; + game["dialog"]["securing_flag"] = "securing_flag"; + game["dialog"]["losing_flag"] = "losing_flag"; + game["dialog"]["lost_flag"] = "lost_flag"; + game["dialog"]["oneflag_enemy"] = "oneflag_enemy"; + game["dialog"]["oneflag_friendly"] = "oneflag_friendly"; + game["dialog"]["lost_all"] = "dom_lock_theytake"; + game["dialog"]["secure_all"] = "dom_lock_wetake"; + game["dialog"]["squad_move"] = "squad_move"; + game["dialog"]["squad_30sec"] = "squad_30sec"; + game["dialog"]["squad_winning"] = "squad_onemin_vic"; + game["dialog"]["squad_losing"] = "squad_onemin_loss"; + game["dialog"]["squad_down"] = "squad_down"; + game["dialog"]["squad_bomb"] = "squad_bomb"; + game["dialog"]["squad_plant"] = "squad_plant"; + game["dialog"]["squad_take"] = "squad_takeobj"; + game["dialog"]["kicked"] = "player_kicked"; + game["dialog"]["sentry_destroyed"] = "dest_sentry"; + game["dialog"]["sentry_hacked"] = "kls_turret_hacked"; + game["dialog"]["microwave_destroyed"] = "dest_microwave"; + game["dialog"]["microwave_hacked"] = "kls_microwave_hacked"; + game["dialog"]["sam_destroyed"] = "dest_sam"; + game["dialog"]["tact_destroyed"] = "dest_tact"; + game["dialog"]["equipment_destroyed"] = "dest_equip"; + game["dialog"]["hacked_equip"] = "hacked_equip"; + game["dialog"]["uav_destroyed"] = "kls_u2_destroyed"; + game["dialog"]["cuav_destroyed"] = "kls_cu2_destroyed"; + level.dialoggroups = []; + level thread post_match_snapshot_watcher(); +} + +registerdialoggroup( group, skipifcurrentlyplayinggroup ) +{ + if ( !isdefined( level.dialoggroups ) ) + level.dialoggroups = []; + else if ( isdefined( level.dialoggroup[group] ) ) + { + error( "registerDialogGroup: Dialog group " + group + " already registered." ); + return; + } + + level.dialoggroup[group] = spawnstruct(); + level.dialoggroup[group].group = group; + level.dialoggroup[group].skipifcurrentlyplayinggroup = skipifcurrentlyplayinggroup; + level.dialoggroup[group].currentcount = 0; +} + +sndstartmusicsystem() +{ + self endon( "disconnect" ); + + if ( game["state"] == "postgame" ) + return; + + if ( game["state"] == "pregame" ) + { +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - music state is undefined Waiting 15 seconds to set music state" ); +#/ + wait 30; + + if ( !isdefined( level.nextmusicstate ) ) + { + self.pers["music"].currentstate = "UNDERSCORE"; + self thread suspensemusic(); + } + } + + if ( !isdefined( level.nextmusicstate ) ) + { +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - music state is undefined Waiting 15 seconds to set music state" ); +#/ + self.pers["music"].currentstate = "UNDERSCORE"; + self thread suspensemusic(); + } +} + +suspensemusicforplayer() +{ + self endon( "disconnect" ); + self thread set_music_on_player( "UNDERSCORE", 0 ); +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Setting Music State Random Underscore " + self.pers["music"].returnstate + " On player " + self getentitynumber() ); +#/ +} + +suspensemusic( random ) +{ + level endon( "game_ended" ); + level endon( "match_ending_soon" ); + self endon( "disconnect" ); +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Starting random underscore" ); +#/ + while ( true ) + { + wait( randomintrange( 25, 60 ) ); +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Checking for random underscore" ); +#/ + if ( !isdefined( self.pers["music"].inque ) ) + self.pers["music"].inque = 0; + + if ( self.pers["music"].inque ) + { +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Inque no random underscore" ); +#/ + continue; + } + + if ( !isdefined( self.pers["music"].currentstate ) ) + self.pers["music"].currentstate = "SILENT"; + + if ( randomint( 100 ) < self.underscorechance && self.pers["music"].currentstate != "ACTION" && self.pers["music"].currentstate != "TIME_OUT" ) + { + self thread suspensemusicforplayer(); + self.underscorechance -= 20; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Starting random underscore" ); +#/ + } + } +} + +leaderdialogforotherteams( dialog, skip_team, squad_dialog ) +{ + foreach ( team in level.teams ) + { + if ( team != skip_team ) + leaderdialog( dialog, team, undefined, undefined, squad_dialog ); + } +} + +announceroundwinner( winner, delay ) +{ + if ( delay > 0 ) + wait( delay ); + + if ( !isdefined( winner ) || isplayer( winner ) ) + return; + + if ( isdefined( level.teams[winner] ) ) + { + leaderdialog( "round_success", winner ); + leaderdialogforotherteams( "round_failure", winner ); + } + else + { + foreach ( team in level.teams ) + thread playsoundonplayers( "mus_round_draw" + "_" + level.teampostfix[team] ); + + leaderdialog( "round_draw" ); + } +} + +announcegamewinner( winner, delay ) +{ + if ( delay > 0 ) + wait( delay ); + + if ( !isdefined( winner ) || isplayer( winner ) ) + return; + + if ( isdefined( level.teams[winner] ) ) + { + leaderdialog( "mission_success", winner ); + leaderdialogforotherteams( "mission_failure", winner ); + } + else + leaderdialog( "mission_draw" ); +} + +doflameaudio() +{ + self endon( "disconnect" ); + waittillframeend; + + if ( !isdefined( self.lastflamehurtaudio ) ) + self.lastflamehurtaudio = 0; + + currenttime = gettime(); + + if ( self.lastflamehurtaudio + level.fire_audio_repeat_duration + randomint( level.fire_audio_random_max_duration ) < currenttime ) + { + self playlocalsound( "vox_pain_small" ); + self.lastflamehurtaudio = currenttime; + } +} + +leaderdialog( dialog, team, group, excludelist, squaddialog ) +{ + assert( isdefined( level.players ) ); + + if ( level.splitscreen ) + return; + + if ( level.wagermatch ) + return; + + if ( !isdefined( team ) ) + { + dialogs = []; + + foreach ( team in level.teams ) + dialogs[team] = dialog; + + leaderdialogallteams( dialogs, group, excludelist ); + return; + } + + if ( level.splitscreen ) + { + if ( level.players.size ) + level.players[0] leaderdialogonplayer( dialog, group ); + + return; + } + + if ( isdefined( excludelist ) ) + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team && !maps\mp\gametypes_zm\_globallogic_utils::isexcluded( player, excludelist ) ) + player leaderdialogonplayer( dialog, group ); + } + } + else + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + player leaderdialogonplayer( dialog, group ); + } + } +} + +leaderdialogallteams( dialogs, group, excludelist ) +{ + assert( isdefined( level.players ) ); + + if ( level.splitscreen ) + return; + + if ( level.splitscreen ) + { + if ( level.players.size ) + level.players[0] leaderdialogonplayer( dialogs[level.players[0].team], group ); + + return; + } + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + team = player.pers["team"]; + + if ( !isdefined( team ) ) + continue; + + if ( !isdefined( dialogs[team] ) ) + continue; + + if ( isdefined( excludelist ) && maps\mp\gametypes_zm\_globallogic_utils::isexcluded( player, excludelist ) ) + continue; + + player leaderdialogonplayer( dialogs[team], group ); + } +} + +flushdialog() +{ + foreach ( player in level.players ) + player flushdialogonplayer(); +} + +flushdialogonplayer() +{ + self.leaderdialoggroups = []; + self.leaderdialogqueue = []; + self.leaderdialogactive = 0; + self.currentleaderdialoggroup = ""; +} + +flushgroupdialog( group ) +{ + foreach ( player in level.players ) + player flushgroupdialogonplayer( group ); +} + +flushgroupdialogonplayer( group ) +{ + self.leaderdialoggroups[group] = undefined; + + foreach ( key, dialog in self.leaderdialogqueue ) + { + if ( dialog == group ) + self.leaderdialogqueue[key] = undefined; + } +} + +addgroupdialogtoplayer( dialog, group ) +{ + if ( !isdefined( level.dialoggroup[group] ) ) + { + error( "leaderDialogOnPlayer: Dialog group " + group + " is not registered" ); + return 0; + } + + addtoqueue = 0; + + if ( !isdefined( self.leaderdialoggroups[group] ) ) + addtoqueue = 1; + + if ( !level.dialoggroup[group].skipifcurrentlyplayinggroup ) + { + if ( self.currentleaderdialog == dialog && self.currentleaderdialogtime + 2000 > gettime() ) + { + self.leaderdialoggroups[group] = undefined; + + foreach ( key, leader_dialog in self.leaderdialogqueue ) + { + if ( leader_dialog == group ) + { + for ( i = key + 1; i < self.leaderdialogqueue.size; i++ ) + self.leaderdialogqueue[i - 1] = self.leaderdialogqueue[i]; + + self.leaderdialogqueue[i - 1] = undefined; + break; + } + } + + return 0; + } + } + else if ( self.currentleaderdialoggroup == group ) + return 0; + + self.leaderdialoggroups[group] = dialog; + return addtoqueue; +} + +testdialogqueue( group ) +{ +/# + count = 0; + + foreach ( temp in self.leaderdialogqueue ) + { + if ( temp == group ) + count++; + } + + if ( count > 1 ) + shit = 0; +#/ +} + +leaderdialogonplayer( dialog, group ) +{ + team = self.pers["team"]; + + if ( level.splitscreen ) + return; + + if ( !isdefined( team ) ) + return; + + if ( !isdefined( level.teams[team] ) ) + return; + + if ( isdefined( group ) ) + { + if ( !addgroupdialogtoplayer( dialog, group ) ) + { + self testdialogqueue( group ); + return; + } + + dialog = group; + } + + if ( !self.leaderdialogactive ) + self thread playleaderdialogonplayer( dialog ); + else + self.leaderdialogqueue[self.leaderdialogqueue.size] = dialog; +} + +waitforsound( sound, extratime = 0.1 ) +{ + time = soundgetplaybacktime( sound ); + + if ( time < 0 ) + wait( 3.0 + extratime ); + else + wait( time * 0.001 + extratime ); +} + +playleaderdialogonplayer( dialog ) +{ + if ( isdefined( level.allowannouncer ) && !level.allowannouncer ) + return; + + team = self.pers["team"]; + self endon( "disconnect" ); + self.leaderdialogactive = 1; + + if ( isdefined( self.leaderdialoggroups[dialog] ) ) + { + group = dialog; + dialog = self.leaderdialoggroups[group]; + self.leaderdialoggroups[group] = undefined; + self.currentleaderdialoggroup = group; + self testdialogqueue( group ); + } + + if ( level.wagermatch || !isdefined( game["voice"] ) ) + faction = "vox_wm_"; + else + faction = game["voice"][team]; + + sound_name = faction + game["dialog"][dialog]; + + if ( level.allowannouncer ) + { + self playlocalsound( sound_name ); + self.currentleaderdialog = dialog; + self.currentleaderdialogtime = gettime(); + } + + waitforsound( sound_name ); + self.leaderdialogactive = 0; + self.currentleaderdialoggroup = ""; + self.currentleaderdialog = ""; + + if ( self.leaderdialogqueue.size > 0 ) + { + nextdialog = self.leaderdialogqueue[0]; + + for ( i = 1; i < self.leaderdialogqueue.size; i++ ) + self.leaderdialogqueue[i - 1] = self.leaderdialogqueue[i]; + + self.leaderdialogqueue[i - 1] = undefined; + + if ( isdefined( self.leaderdialoggroups[dialog] ) ) + self testdialogqueue( dialog ); + + self thread playleaderdialogonplayer( nextdialog ); + } +} + +isteamwinning( checkteam ) +{ + score = game["teamScores"][checkteam]; + + foreach ( team in level.teams ) + { + if ( team != checkteam ) + { + if ( game["teamScores"][team] >= score ) + return false; + } + } + + return true; +} + +announceteamiswinning() +{ + foreach ( team in level.teams ) + { + if ( isteamwinning( team ) ) + { + leaderdialog( "winning", team, undefined, undefined, "squad_winning" ); + leaderdialogforotherteams( "losing", team, "squad_losing" ); + return true; + } + } + + return false; +} + +musiccontroller() +{ + level endon( "game_ended" ); + level thread musictimesout(); + + level waittill( "match_ending_soon" ); + + if ( islastround() || isoneround() ) + { + if ( !level.splitscreen ) + { + if ( level.teambased ) + { + if ( !announceteamiswinning() ) + leaderdialog( "min_draw" ); + } + + level waittill( "match_ending_very_soon" ); + + foreach ( team in level.teams ) + leaderdialog( "timesup", team, undefined, undefined, "squad_30sec" ); + } + } + else + { + level waittill( "match_ending_vox" ); + + leaderdialog( "timesup" ); + } +} + +musictimesout() +{ + level endon( "game_ended" ); + + level waittill( "match_ending_very_soon" ); + + thread maps\mp\gametypes_zm\_globallogic_audio::set_music_on_team( "TIME_OUT", "both", 1, 0 ); +} + +actionmusicset() +{ + level endon( "game_ended" ); + level.playingactionmusic = 1; + wait 45; + level.playingactionmusic = 0; +} + +play_2d_on_team( alias, team ) +{ + assert( isdefined( level.players ) ); + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + player playlocalsound( alias ); + } +} + +set_music_on_team( state, team, save_state, return_state, wait_time ) +{ + if ( sessionmodeiszombiesgame() ) + return; + + assert( isdefined( level.players ) ); + + if ( !isdefined( team ) ) + { + team = "both"; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - team undefined: Setting to both" ); +#/ + } + + if ( !isdefined( save_state ) ) + { + save_sate = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - save_sate undefined: Setting to false" ); +#/ + } + + if ( !isdefined( return_state ) ) + { + return_state = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Music System - return_state undefined: Setting to false" ); +#/ + } + + if ( !isdefined( wait_time ) ) + { + wait_time = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - wait_time undefined: Setting to 0" ); +#/ + } + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( team == "both" ) + { + player thread set_music_on_player( state, save_state, return_state, wait_time ); + continue; + } + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + { + player thread set_music_on_player( state, save_state, return_state, wait_time ); +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Setting Music State " + state + " On player " + player getentitynumber() ); +#/ + } + } +} + +set_music_on_player( state, save_state, return_state, wait_time ) +{ + self endon( "disconnect" ); + + if ( sessionmodeiszombiesgame() ) + return; + + assert( isplayer( self ) ); + + if ( !isdefined( save_state ) ) + { + save_state = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Music System - save_sate undefined: Setting to false" ); +#/ + } + + if ( !isdefined( return_state ) ) + { + return_state = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Music System - return_state undefined: Setting to false" ); +#/ + } + + if ( !isdefined( wait_time ) ) + { + wait_time = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - wait_time undefined: Setting to 0" ); +#/ + } + + if ( !isdefined( state ) ) + { + state = "UNDERSCORE"; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - state undefined: Setting to UNDERSCORE" ); +#/ + } + + maps\mp\_music::setmusicstate( state, self ); + + if ( isdefined( self.pers["music"].currentstate ) && save_state ) + { + self.pers["music"].returnstate = state; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Saving Music State " + self.pers["music"].returnstate + " On " + self getentitynumber() ); +#/ + } + + self.pers["music"].previousstate = self.pers["music"].currentstate; + self.pers["music"].currentstate = state; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Setting Music State " + state + " On player " + self getentitynumber() ); +#/ + if ( isdefined( self.pers["music"].returnstate ) && return_state ) + { +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Starting Return State " + self.pers["music"].returnstate + " On " + self getentitynumber() ); +#/ + self set_next_music_state( self.pers["music"].returnstate, wait_time ); + } +} + +return_music_state_player( wait_time ) +{ + if ( !isdefined( wait_time ) ) + { + wait_time = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - wait_time undefined: Setting to 0" ); +#/ + } + + self set_next_music_state( self.pers["music"].returnstate, wait_time ); +} + +return_music_state_team( team, wait_time ) +{ + if ( !isdefined( wait_time ) ) + { + wait_time = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - wait_time undefined: Setting to 0" ); +#/ + } + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( team == "both" ) + { + player thread set_next_music_state( self.pers["music"].returnstate, wait_time ); + continue; + } + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + { + player thread set_next_music_state( self.pers["music"].returnstate, wait_time ); +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Setting Music State " + self.pers["music"].returnstate + " On player " + player getentitynumber() ); +#/ + } + } +} + +set_next_music_state( nextstate, wait_time ) +{ + self endon( "disconnect" ); + self.pers["music"].nextstate = nextstate; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Setting next Music State " + self.pers["music"].nextstate + " On " + self getentitynumber() ); +#/ + if ( !isdefined( self.pers["music"].inque ) ) + self.pers["music"].inque = 0; + + if ( self.pers["music"].inque ) + { + return; +/# + println( "Music System - Music state in que" ); +#/ + } + else + { + self.pers["music"].inque = 1; + + if ( wait_time ) + wait( wait_time ); + + self set_music_on_player( self.pers["music"].nextstate, 0 ); + self.pers["music"].inque = 0; + } +} + +getroundswitchdialog( switchtype ) +{ + switch ( switchtype ) + { + case "halftime": + return "halftime"; + case "overtime": + return "overtime"; + default: + return "side_switch"; + } +} + +post_match_snapshot_watcher() +{ + level waittill( "game_ended" ); + + level clientnotify( "pm" ); + + level waittill( "sfade" ); + + level clientnotify( "pmf" ); +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_globallogic_defaults.gsc b/ZM/Core/maps/mp/gametypes_zm/_globallogic_defaults.gsc new file mode 100644 index 0000000..1c3f658 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_globallogic_defaults.gsc @@ -0,0 +1,214 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_globallogic_utils; +#include maps\mp\gametypes_zm\_globallogic; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\gametypes_zm\_globallogic_audio; +#include maps\mp\gametypes_zm\_spawnlogic; + +getwinningteamfromloser( losing_team ) +{ + if ( level.multiteam ) + return "tie"; + else if ( losing_team == "axis" ) + return "allies"; + + return "axis"; +} + +default_onforfeit( team ) +{ + level.gameforfeited = 1; + level notify( "forfeit in progress" ); + level endon( "forfeit in progress" ); + level endon( "abort forfeit" ); + forfeit_delay = 20.0; + announcement( game["strings"]["opponent_forfeiting_in"], forfeit_delay, 0 ); + wait 10.0; + announcement( game["strings"]["opponent_forfeiting_in"], 10.0, 0 ); + wait 10.0; + endreason = &""; + + if ( !isdefined( team ) ) + { + setdvar( "ui_text_endreason", game["strings"]["players_forfeited"] ); + endreason = game["strings"]["players_forfeited"]; + winner = level.players[0]; + } + else if ( isdefined( level.teams[team] ) ) + { + endreason = game["strings"][team + "_forfeited"]; + setdvar( "ui_text_endreason", endreason ); + winner = getwinningteamfromloser( team ); + } + else + { + assert( isdefined( team ), "Forfeited team is not defined" ); + assert( 0, "Forfeited team " + team + " is not allies or axis" ); + winner = "tie"; + } + + level.forcedend = 1; + + if ( isplayer( winner ) ) + logstring( "forfeit, win: " + winner getxuid() + "(" + winner.name + ")" ); + else + maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "forfeit", winner ); + + thread maps\mp\gametypes_zm\_globallogic::endgame( winner, endreason ); +} + +default_ondeadevent( team ) +{ + if ( isdefined( level.teams[team] ) ) + { + eliminatedstring = game["strings"][team + "_eliminated"]; + iprintln( eliminatedstring ); + makedvarserverinfo( "ui_text_endreason", eliminatedstring ); + setdvar( "ui_text_endreason", eliminatedstring ); + winner = getwinningteamfromloser( team ); + maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "team eliminated", winner ); + thread maps\mp\gametypes_zm\_globallogic::endgame( winner, eliminatedstring ); + } + else + { + makedvarserverinfo( "ui_text_endreason", game["strings"]["tie"] ); + setdvar( "ui_text_endreason", game["strings"]["tie"] ); + maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "tie" ); + + if ( level.teambased ) + thread maps\mp\gametypes_zm\_globallogic::endgame( "tie", game["strings"]["tie"] ); + else + thread maps\mp\gametypes_zm\_globallogic::endgame( undefined, game["strings"]["tie"] ); + } +} + +default_onalivecountchange( team ) +{ + +} + +default_onroundendgame( winner ) +{ + return winner; +} + +default_ononeleftevent( team ) +{ + if ( !level.teambased ) + { + winner = maps\mp\gametypes_zm\_globallogic_score::gethighestscoringplayer(); + + if ( isdefined( winner ) ) + logstring( "last one alive, win: " + winner.name ); + else + logstring( "last one alive, win: unknown" ); + + thread maps\mp\gametypes_zm\_globallogic::endgame( winner, &"MP_ENEMIES_ELIMINATED" ); + } + else + { + for ( index = 0; index < level.players.size; index++ ) + { + player = level.players[index]; + + if ( !isalive( player ) ) + continue; + + if ( !isdefined( player.pers["team"] ) || player.pers["team"] != team ) + continue; + + player maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "sudden_death" ); + } + } +} + +default_ontimelimit() +{ + winner = undefined; + + if ( level.teambased ) + { + winner = maps\mp\gametypes_zm\_globallogic::determineteamwinnerbygamestat( "teamScores" ); + maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "time limit", winner ); + } + else + { + winner = maps\mp\gametypes_zm\_globallogic_score::gethighestscoringplayer(); + + if ( isdefined( winner ) ) + logstring( "time limit, win: " + winner.name ); + else + logstring( "time limit, tie" ); + } + + makedvarserverinfo( "ui_text_endreason", game["strings"]["time_limit_reached"] ); + setdvar( "ui_text_endreason", game["strings"]["time_limit_reached"] ); + thread maps\mp\gametypes_zm\_globallogic::endgame( winner, game["strings"]["time_limit_reached"] ); +} + +default_onscorelimit() +{ + if ( !level.endgameonscorelimit ) + return false; + + winner = undefined; + + if ( level.teambased ) + { + winner = maps\mp\gametypes_zm\_globallogic::determineteamwinnerbygamestat( "teamScores" ); + maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "scorelimit", winner ); + } + else + { + winner = maps\mp\gametypes_zm\_globallogic_score::gethighestscoringplayer(); + + if ( isdefined( winner ) ) + logstring( "scorelimit, win: " + winner.name ); + else + logstring( "scorelimit, tie" ); + } + + makedvarserverinfo( "ui_text_endreason", game["strings"]["score_limit_reached"] ); + setdvar( "ui_text_endreason", game["strings"]["score_limit_reached"] ); + thread maps\mp\gametypes_zm\_globallogic::endgame( winner, game["strings"]["score_limit_reached"] ); + return true; +} + +default_onspawnspectator( origin, angles ) +{ + if ( isdefined( origin ) && isdefined( angles ) ) + { + self spawn( origin, angles ); + return; + } + + spawnpointname = "mp_global_intermission"; + spawnpoints = getentarray( spawnpointname, "classname" ); + assert( spawnpoints.size, "There are no mp_global_intermission spawn points in the map. There must be at least one." ); + spawnpoint = maps\mp\gametypes_zm\_spawnlogic::getspawnpoint_random( spawnpoints ); + self spawn( spawnpoint.origin, spawnpoint.angles ); +} + +default_onspawnintermission() +{ + spawnpointname = "mp_global_intermission"; + spawnpoints = getentarray( spawnpointname, "classname" ); + spawnpoint = spawnpoints[0]; + + if ( isdefined( spawnpoint ) ) + self spawn( spawnpoint.origin, spawnpoint.angles ); + else + { +/# + maps\mp\_utility::error( "NO " + spawnpointname + " SPAWNPOINTS IN MAP" ); +#/ + } +} + +default_gettimelimit() +{ + return clamp( getgametypesetting( "timeLimit" ), level.timelimitmin, level.timelimitmax ); +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_globallogic_player.gsc b/ZM/Core/maps/mp/gametypes_zm/_globallogic_player.gsc new file mode 100644 index 0000000..c412e1a --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_globallogic_player.gsc @@ -0,0 +1,2115 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\gametypes_zm\_globallogic; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\gametypes_zm\_hostmigration; +#include maps\mp\gametypes_zm\_globallogic_ui; +#include maps\mp\gametypes_zm\_globallogic_spawn; +#include maps\mp\gametypes_zm\_spectating; +#include maps\mp\gametypes_zm\_globallogic_utils; +#include maps\mp\gametypes_zm\_spawning; +#include maps\mp\gametypes_zm\_hud_message; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\_demo; +#include maps\mp\gametypes_zm\_weapons; +#include maps\mp\gametypes_zm\_spawnlogic; +#include maps\mp\_challenges; +#include maps\mp\gametypes_zm\_tweakables; +#include maps\mp\gametypes_zm\_globallogic_audio; + +freezeplayerforroundend() +{ + self clearlowermessage(); + self closemenu(); + self closeingamemenu(); + self freeze_player_controls( 1 ); + + if ( !sessionmodeiszombiesgame() ) + currentweapon = self getcurrentweapon(); +} + +callback_playerconnect() +{ + thread notifyconnecting(); + self.statusicon = "hud_status_connecting"; + + self waittill( "begin" ); + + if ( isdefined( level.reset_clientdvars ) ) + self [[ level.reset_clientdvars ]](); + + waittillframeend; + self.statusicon = ""; + self.guid = self getguid(); + profilelog_begintiming( 4, "ship" ); + level notify( "connected", self ); + + if ( self ishost() ) + self thread maps\mp\gametypes_zm\_globallogic::listenforgameend(); + + if ( !level.splitscreen && !isdefined( self.pers["score"] ) ) + iprintln( &"MP_CONNECTED", self ); + + if ( !isdefined( self.pers["score"] ) ) + self thread maps\mp\zombies\_zm_stats::adjustrecentstats(); + + if ( gamemodeismode( level.gamemode_public_match ) && !isdefined( self.pers["matchesPlayedStatsTracked"] ) ) + { + gamemode = maps\mp\gametypes_zm\_globallogic::getcurrentgamemode(); + self maps\mp\gametypes_zm\_globallogic::incrementmatchcompletionstat( gamemode, "played", "started" ); + + if ( !isdefined( self.pers["matchesHostedStatsTracked"] ) && self islocaltohost() ) + { + self maps\mp\gametypes_zm\_globallogic::incrementmatchcompletionstat( gamemode, "hosted", "started" ); + self.pers["matchesHostedStatsTracked"] = 1; + } + + self.pers["matchesPlayedStatsTracked"] = 1; + self thread maps\mp\zombies\_zm_stats::uploadstatssoon(); + } + + lpselfnum = self getentitynumber(); + lpguid = self getguid(); + logprint( "J;" + lpguid + ";" + lpselfnum + ";" + self.name + "\\n" ); + bbprint( "mpjoins", "name %s client %s", self.name, lpselfnum ); + + if ( !sessionmodeiszombiesgame() ) + self setclientuivisibilityflag( "hud_visible", 1 ); + + if ( level.forceradar == 1 ) + { + self.pers["hasRadar"] = 1; + self.hasspyplane = 1; + level.activeuavs[self getentitynumber()] = 1; + } + + if ( level.forceradar == 2 ) + self setclientuivisibilityflag( "g_compassShowEnemies", level.forceradar ); + else + self setclientuivisibilityflag( "g_compassShowEnemies", 0 ); + + self setclientplayersprinttime( level.playersprinttime ); + self setclientnumlives( level.numlives ); + makedvarserverinfo( "cg_drawTalk", 1 ); + + if ( level.hardcoremode ) + self setclientdrawtalk( 3 ); + + if ( sessionmodeiszombiesgame() ) + self [[ level.player_stats_init ]](); + else + { + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "score" ); + + if ( level.resetplayerscoreeveryround ) + self.pers["score"] = 0; + + self.score = self.pers["score"]; + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "momentum", 0 ); + self.momentum = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "momentum" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "suicides" ); + self.suicides = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "suicides" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "headshots" ); + self.headshots = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "headshots" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "challenges" ); + self.challenges = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "challenges" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "kills" ); + self.kills = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "kills" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "deaths" ); + self.deaths = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "deaths" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "assists" ); + self.assists = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "assists" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "defends", 0 ); + self.defends = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "defends" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "offends", 0 ); + self.offends = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "offends" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "plants", 0 ); + self.plants = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "plants" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "defuses", 0 ); + self.defuses = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "defuses" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "returns", 0 ); + self.returns = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "returns" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "captures", 0 ); + self.captures = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "captures" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "destructions", 0 ); + self.destructions = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "destructions" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "backstabs", 0 ); + self.backstabs = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "backstabs" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "longshots", 0 ); + self.longshots = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "longshots" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "survived", 0 ); + self.survived = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "survived" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "stabs", 0 ); + self.stabs = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "stabs" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomahawks", 0 ); + self.tomahawks = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "tomahawks" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "humiliated", 0 ); + self.humiliated = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "humiliated" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "x2score", 0 ); + self.x2score = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "x2score" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "agrkills", 0 ); + self.x2score = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "agrkills" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "hacks", 0 ); + self.x2score = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "hacks" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sessionbans", 0 ); + self.sessionbans = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "sessionbans" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "gametypeban", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "time_played_total", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "time_played_alive", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "teamkills", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "teamkills_nostats", 0 ); + self.teamkillpunish = 0; + + if ( level.minimumallowedteamkills >= 0 && self.pers["teamkills_nostats"] > level.minimumallowedteamkills ) + self thread reduceteamkillsovertime(); + } + + if ( getdvar( "r_reflectionProbeGenerate" ) == "1" ) + level waittill( "eternity" ); + + self.killedplayerscurrent = []; + + if ( !isdefined( self.pers["best_kill_streak"] ) ) + { + self.pers["killed_players"] = []; + self.pers["killed_by"] = []; + self.pers["nemesis_tracking"] = []; + self.pers["artillery_kills"] = 0; + self.pers["dog_kills"] = 0; + self.pers["nemesis_name"] = ""; + self.pers["nemesis_rank"] = 0; + self.pers["nemesis_rankIcon"] = 0; + self.pers["nemesis_xp"] = 0; + self.pers["nemesis_xuid"] = ""; + self.pers["best_kill_streak"] = 0; + } + + if ( !isdefined( self.pers["music"] ) ) + { + self.pers["music"] = spawnstruct(); + self.pers["music"].spawn = 0; + self.pers["music"].inque = 0; + self.pers["music"].currentstate = "SILENT"; + self.pers["music"].previousstate = "SILENT"; + self.pers["music"].nextstate = "UNDERSCORE"; + self.pers["music"].returnstate = "UNDERSCORE"; + } + + self.leaderdialogqueue = []; + self.leaderdialogactive = 0; + self.leaderdialoggroups = []; + self.currentleaderdialoggroup = ""; + self.currentleaderdialog = ""; + self.currentleaderdialogtime = 0; + + if ( !isdefined( self.pers["cur_kill_streak"] ) ) + self.pers["cur_kill_streak"] = 0; + + if ( !isdefined( self.pers["cur_total_kill_streak"] ) ) + { + self.pers["cur_total_kill_streak"] = 0; + self setplayercurrentstreak( 0 ); + } + + if ( !isdefined( self.pers["totalKillstreakCount"] ) ) + self.pers["totalKillstreakCount"] = 0; + + if ( !isdefined( self.pers["killstreaksEarnedThisKillstreak"] ) ) + self.pers["killstreaksEarnedThisKillstreak"] = 0; + + if ( isdefined( level.usingscorestreaks ) && level.usingscorestreaks && !isdefined( self.pers["killstreak_quantity"] ) ) + self.pers["killstreak_quantity"] = []; + + if ( isdefined( level.usingscorestreaks ) && level.usingscorestreaks && !isdefined( self.pers["held_killstreak_ammo_count"] ) ) + self.pers["held_killstreak_ammo_count"] = []; + + self.lastkilltime = 0; + self.cur_death_streak = 0; + self disabledeathstreak(); + self.death_streak = 0; + self.kill_streak = 0; + self.gametype_kill_streak = 0; + self.spawnqueueindex = -1; + self.deathtime = 0; + self.lastgrenadesuicidetime = -1; + self.teamkillsthisround = 0; + + if ( !isdefined( level.livesdonotreset ) || !level.livesdonotreset || !isdefined( self.pers["lives"] ) ) + self.pers["lives"] = level.numlives; + + if ( !level.teambased ) + self.pers["team"] = undefined; + + self.hasspawned = 0; + self.waitingtospawn = 0; + self.wantsafespawn = 0; + self.deathcount = 0; + self.wasaliveatmatchstart = 0; + level.players[level.players.size] = self; + + if ( level.splitscreen ) + setdvar( "splitscreen_playerNum", level.players.size ); + + if ( game["state"] == "postgame" ) + { + self.pers["needteam"] = 1; + self.pers["team"] = "spectator"; + self.team = "spectator"; + self setclientuivisibilityflag( "hud_visible", 0 ); + self [[ level.spawnintermission ]](); + self closemenu(); + self closeingamemenu(); + profilelog_endtiming( 4, "gs=" + game["state"] + " zom=" + sessionmodeiszombiesgame() ); + return; + } + + if ( level.scr_zm_ui_gametype_group == "zencounter" ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "losses" ); + self updatestatratio( "wlratio", "wins", "losses" ); + + if ( gamemodeismode( level.gamemode_public_match ) ) + self maps\mp\zombies\_zm_stats::add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "losses", 1 ); + } + else if ( level.scr_zm_ui_gametype_group == "zsurvival" ) + { + if ( is_true( level.should_use_cia ) ) + self luinotifyevent( &"hud_update_survival_team", 1, 2 ); + } + + level endon( "game_ended" ); + + if ( isdefined( level.hostmigrationtimer ) ) + self thread maps\mp\gametypes_zm\_hostmigration::hostmigrationtimerthink(); + + if ( level.oldschool ) + { + self.pers["class"] = undefined; + self.class = self.pers["class"]; + } + + if ( isdefined( self.pers["team"] ) ) + self.team = self.pers["team"]; + + if ( isdefined( self.pers["class"] ) ) + self.class = self.pers["class"]; + + if ( !isdefined( self.pers["team"] ) || isdefined( self.pers["needteam"] ) ) + { + self.pers["needteam"] = undefined; + self.pers["team"] = "spectator"; + self.team = "spectator"; + self.sessionstate = "dead"; + self maps\mp\gametypes_zm\_globallogic_ui::updateobjectivetext(); + [[ level.spawnspectator ]](); + + if ( level.rankedmatch ) + { + [[ level.autoassign ]]( 0 ); + self thread maps\mp\gametypes_zm\_globallogic_spawn::kickifdontspawn(); + } + else + [[ level.autoassign ]]( 0 ); + + if ( self.pers["team"] == "spectator" ) + { + self.sessionteam = "spectator"; + + if ( !level.teambased ) + self.ffateam = "spectator"; + + self thread spectate_player_watcher(); + } + + if ( level.teambased ) + { + self.sessionteam = self.pers["team"]; + + if ( !isalive( self ) ) + self.statusicon = "hud_status_dead"; + + self thread maps\mp\gametypes_zm\_spectating::setspectatepermissions(); + } + } + else if ( self.pers["team"] == "spectator" ) + { + self setclientscriptmainmenu( game["menu_class"] ); + [[ level.spawnspectator ]](); + self.sessionteam = "spectator"; + self.sessionstate = "spectator"; + + if ( !level.teambased ) + self.ffateam = "spectator"; + + self thread spectate_player_watcher(); + } + else + { + self.sessionteam = self.pers["team"]; + self.sessionstate = "dead"; + + if ( !level.teambased ) + self.ffateam = self.pers["team"]; + + self maps\mp\gametypes_zm\_globallogic_ui::updateobjectivetext(); + [[ level.spawnspectator ]](); + + if ( maps\mp\gametypes_zm\_globallogic_utils::isvalidclass( self.pers["class"] ) ) + self thread [[ level.spawnclient ]](); + else + self maps\mp\gametypes_zm\_globallogic_ui::showmainmenuforteam(); + + self thread maps\mp\gametypes_zm\_spectating::setspectatepermissions(); + } + + if ( self.sessionteam != "spectator" ) + self thread maps\mp\gametypes_zm\_spawning::onspawnplayer_unified( 1 ); + + profilelog_endtiming( 4, "gs=" + game["state"] + " zom=" + sessionmodeiszombiesgame() ); + + if ( isdefined( self.pers["isBot"] ) ) + return; +} + +spectate_player_watcher() +{ + self endon( "disconnect" ); + self.watchingactiveclient = 1; + self.waitingforplayerstext = undefined; + + while ( true ) + { + if ( self.pers["team"] != "spectator" || level.gameended ) + { + self maps\mp\gametypes_zm\_hud_message::clearshoutcasterwaitingmessage(); +/# + println( " Unfreeze controls 1" ); +#/ + self freezecontrols( 0 ); + self.watchingactiveclient = 0; + break; + } + else + { + if ( !level.splitscreen && !level.hardcoremode && getdvarint( "scr_showperksonspawn" ) == 1 && game["state"] != "postgame" && !isdefined( self.perkhudelem ) ) + { + if ( level.perksenabled == 1 ) + self maps\mp\gametypes_zm\_hud_util::showperks(); + + self thread maps\mp\gametypes_zm\_globallogic_ui::hideloadoutaftertime( 0 ); + } + + count = 0; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( level.players[i].team != "spectator" ) + { + count++; + break; + } + } + + if ( count > 0 ) + { + if ( !self.watchingactiveclient ) + { + self maps\mp\gametypes_zm\_hud_message::clearshoutcasterwaitingmessage(); + self freezecontrols( 0 ); +/# + println( " Unfreeze controls 2" ); +#/ + } + + self.watchingactiveclient = 1; + } + else + { + if ( self.watchingactiveclient ) + { + [[ level.onspawnspectator ]](); + self freezecontrols( 1 ); + self maps\mp\gametypes_zm\_hud_message::setshoutcasterwaitingmessage(); + } + + self.watchingactiveclient = 0; + } + + wait 0.5; + } + } +} + +callback_playermigrated() +{ +/# + println( "Player " + self.name + " finished migrating at time " + gettime() ); +#/ + if ( isdefined( self.connected ) && self.connected ) + self maps\mp\gametypes_zm\_globallogic_ui::updateobjectivetext(); + + self thread inform_clientvm_of_migration(); + level.hostmigrationreturnedplayercount++; + + if ( level.hostmigrationreturnedplayercount >= level.players.size * 2 / 3 ) + { +/# + println( "2/3 of players have finished migrating" ); +#/ + level notify( "hostmigration_enoughplayers" ); + } +} + +inform_clientvm_of_migration() +{ + self endon( "disconnect" ); + wait 1.0; + self clientnotify( "hmo" ); +/# + println( "SERVER : Sent HMO to client " + self getentitynumber() ); +#/ +} + +callback_playerdisconnect() +{ + profilelog_begintiming( 5, "ship" ); + + if ( game["state"] != "postgame" && !level.gameended ) + { + gamelength = maps\mp\gametypes_zm\_globallogic::getgamelength(); + self maps\mp\gametypes_zm\_globallogic::bbplayermatchend( gamelength, "MP_PLAYER_DISCONNECT", 0 ); + } + + self removeplayerondisconnect(); + + if ( level.splitscreen ) + { + players = level.players; + + if ( players.size <= 1 ) + level thread maps\mp\gametypes_zm\_globallogic::forceend(); + + setdvar( "splitscreen_playerNum", players.size ); + } + + if ( isdefined( self.score ) && isdefined( self.pers["team"] ) ) + { + self logstring( "team: score " + self.pers["team"] + ":" + self.score ); + level.dropteam += 1; + } + + [[ level.onplayerdisconnect ]](); + lpselfnum = self getentitynumber(); + lpguid = self getguid(); + logprint( "Q;" + lpguid + ";" + lpselfnum + ";" + self.name + "\\n" ); + + for ( entry = 0; entry < level.players.size; entry++ ) + { + if ( level.players[entry] == self ) + { + while ( entry < level.players.size - 1 ) + { + level.players[entry] = level.players[entry + 1]; + entry++; + } + + level.players[entry] = undefined; + break; + } + } + + for ( entry = 0; entry < level.players.size; entry++ ) + { + if ( isdefined( level.players[entry].pers["killed_players"][self.name] ) ) + level.players[entry].pers["killed_players"][self.name] = undefined; + + if ( isdefined( level.players[entry].killedplayerscurrent[self.name] ) ) + level.players[entry].killedplayerscurrent[self.name] = undefined; + + if ( isdefined( level.players[entry].pers["killed_by"][self.name] ) ) + level.players[entry].pers["killed_by"][self.name] = undefined; + + if ( isdefined( level.players[entry].pers["nemesis_tracking"][self.name] ) ) + level.players[entry].pers["nemesis_tracking"][self.name] = undefined; + + if ( level.players[entry].pers["nemesis_name"] == self.name ) + level.players[entry] choosenextbestnemesis(); + } + + if ( level.gameended ) + self maps\mp\gametypes_zm\_globallogic::removedisconnectedplayerfromplacement(); + + level thread maps\mp\gametypes_zm\_globallogic::updateteamstatus(); + profilelog_endtiming( 5, "gs=" + game["state"] + " zom=" + sessionmodeiszombiesgame() ); +} + +callback_playermelee( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit ) +{ + hit = 1; + + if ( level.teambased && self.team == eattacker.team ) + { + if ( level.friendlyfire == 0 ) + hit = 0; + } + + self finishmeleehit( eattacker, sweapon, vorigin, vdir, boneindex, shieldhit, hit ); +} + +choosenextbestnemesis() +{ + nemesisarray = self.pers["nemesis_tracking"]; + nemesisarraykeys = getarraykeys( nemesisarray ); + nemesisamount = 0; + nemesisname = ""; + + if ( nemesisarraykeys.size > 0 ) + { + for ( i = 0; i < nemesisarraykeys.size; i++ ) + { + nemesisarraykey = nemesisarraykeys[i]; + + if ( nemesisarray[nemesisarraykey] > nemesisamount ) + { + nemesisname = nemesisarraykey; + nemesisamount = nemesisarray[nemesisarraykey]; + } + } + } + + self.pers["nemesis_name"] = nemesisname; + + if ( nemesisname != "" ) + { + for ( playerindex = 0; playerindex < level.players.size; playerindex++ ) + { + if ( level.players[playerindex].name == nemesisname ) + { + nemesisplayer = level.players[playerindex]; + self.pers["nemesis_rank"] = nemesisplayer.pers["rank"]; + self.pers["nemesis_rankIcon"] = nemesisplayer.pers["rankxp"]; + self.pers["nemesis_xp"] = nemesisplayer.pers["prestige"]; + self.pers["nemesis_xuid"] = nemesisplayer getxuid( 1 ); + break; + } + } + } + else + self.pers["nemesis_xuid"] = ""; +} + +removeplayerondisconnect() +{ + for ( entry = 0; entry < level.players.size; entry++ ) + { + if ( level.players[entry] == self ) + { + while ( entry < level.players.size - 1 ) + { + level.players[entry] = level.players[entry + 1]; + entry++; + } + + level.players[entry] = undefined; + break; + } + } +} + +custom_gamemodes_modified_damage( victim, eattacker, idamage, smeansofdeath, sweapon, einflictor, shitloc ) +{ + if ( level.onlinegame && !sessionmodeisprivate() ) + return idamage; + + if ( isdefined( eattacker ) && isdefined( eattacker.damagemodifier ) ) + idamage *= eattacker.damagemodifier; + + if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) + idamage = int( idamage * level.bulletdamagescalar ); + + return idamage; +} + +figureoutattacker( eattacker ) +{ + if ( isdefined( eattacker ) ) + { + if ( isai( eattacker ) && isdefined( eattacker.script_owner ) ) + { + team = self.team; + + if ( isai( self ) && isdefined( self.aiteam ) ) + team = self.aiteam; + + if ( eattacker.script_owner.team != team ) + eattacker = eattacker.script_owner; + } + + if ( eattacker.classname == "script_vehicle" && isdefined( eattacker.owner ) ) + eattacker = eattacker.owner; + else if ( eattacker.classname == "auto_turret" && isdefined( eattacker.owner ) ) + eattacker = eattacker.owner; + } + + return eattacker; +} + +figureoutweapon( sweapon, einflictor ) +{ + if ( sweapon == "none" && isdefined( einflictor ) ) + { + if ( isdefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) + sweapon = "explodable_barrel_mp"; + else if ( isdefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) + sweapon = "destructible_car_mp"; + } + + return sweapon; +} + +isplayerimmunetokillstreak( eattacker, sweapon ) +{ + if ( level.hardcoremode ) + return false; + + if ( !isdefined( eattacker ) ) + return false; + + if ( self != eattacker ) + return false; + + if ( sweapon != "straferun_gun_mp" && sweapon != "straferun_rockets_mp" ) + return false; + + return true; +} + +callback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + profilelog_begintiming( 6, "ship" ); + + if ( game["state"] == "postgame" ) + return; + + if ( self.sessionteam == "spectator" ) + return; + + if ( isdefined( self.candocombat ) && !self.candocombat ) + return; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat ) + return; + + if ( isdefined( level.hostmigrationtimer ) ) + return; + + if ( ( sweapon == "ai_tank_drone_gun_mp" || sweapon == "ai_tank_drone_rocket_mp" ) && !level.hardcoremode ) + { + if ( isdefined( eattacker ) && eattacker == self ) + { + if ( isdefined( einflictor ) && isdefined( einflictor.from_ai ) ) + return; + } + + if ( isdefined( eattacker ) && isdefined( eattacker.owner ) && eattacker.owner == self ) + return; + } + + if ( sweapon == "emp_grenade_mp" ) + self notify( "emp_grenaded", eattacker ); + + idamage = custom_gamemodes_modified_damage( self, eattacker, idamage, smeansofdeath, sweapon, einflictor, shitloc ); + idamage = int( idamage ); + self.idflags = idflags; + self.idflagstime = gettime(); + eattacker = figureoutattacker( eattacker ); + pixbeginevent( "PlayerDamage flags/tweaks" ); + + if ( !isdefined( vdir ) ) + idflags |= level.idflags_no_knockback; + + friendly = 0; + + if ( self.health != self.maxhealth ) + self notify( "snd_pain_player" ); + + if ( isdefined( einflictor ) && isdefined( einflictor.script_noteworthy ) && einflictor.script_noteworthy == "ragdoll_now" ) + smeansofdeath = "MOD_FALLING"; + + if ( maps\mp\gametypes_zm\_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) && isplayer( eattacker ) ) + smeansofdeath = "MOD_HEAD_SHOT"; + + if ( level.onplayerdamage != maps\mp\gametypes_zm\_globallogic::blank ) + { + modifieddamage = [[ level.onplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); + + if ( isdefined( modifieddamage ) ) + { + if ( modifieddamage <= 0 ) + return; + + idamage = modifieddamage; + } + } + + if ( level.onlyheadshots ) + { + if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) + return; + else if ( smeansofdeath == "MOD_HEAD_SHOT" ) + idamage = 150; + } + + if ( isdefined( eattacker ) && isplayer( eattacker ) && self.team != eattacker.team ) + self.lastattackweapon = sweapon; + + sweapon = figureoutweapon( sweapon, einflictor ); + pixendevent(); + attackerishittingteammate = isplayer( eattacker ) && self isenemyplayer( eattacker ) == 0; + + if ( shitloc == "riotshield" ) + { + if ( attackerishittingteammate && level.friendlyfire == 0 ) + return; + + if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" && !attackerishittingteammate ) + { + previous_shield_damage = self.shielddamageblocked; + self.shielddamageblocked += idamage; + + if ( isplayer( eattacker ) ) + { + eattacker.lastattackedshieldplayer = self; + eattacker.lastattackedshieldtime = gettime(); + } + + if ( self.shielddamageblocked % 400 < previous_shield_damage % 400 ) + { + score_event = "shield_blocked_damage"; + + if ( self.shielddamageblocked > 2000 ) + score_event = "shield_blocked_damage_reduced"; + } + } + + if ( idflags & level.idflags_shield_explosive_impact ) + { + shitloc = "none"; + + if ( !( idflags & level.idflags_shield_explosive_impact_huge ) ) + idamage *= 0.0; + } + else if ( idflags & level.idflags_shield_explosive_splash ) + { + if ( isdefined( einflictor ) && isdefined( einflictor.stucktoplayer ) && einflictor.stucktoplayer == self ) + idamage = 101; + + shitloc = "none"; + } + else + return; + } + + if ( isdefined( eattacker ) && eattacker != self && !friendly ) + level.usestartspawns = 0; + + pixbeginevent( "PlayerDamage log" ); +/# + if ( getdvarint( "g_debugDamage" ) ) + println( "client:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); +#/ + if ( self.sessionstate != "dead" ) + { + lpselfnum = self getentitynumber(); + lpselfname = self.name; + lpselfteam = self.team; + lpselfguid = self getguid(); + lpattackerteam = ""; + lpattackerorigin = ( 0, 0, 0 ); + + if ( isplayer( eattacker ) ) + { + lpattacknum = eattacker getentitynumber(); + lpattackguid = eattacker getguid(); + lpattackname = eattacker.name; + lpattackerteam = eattacker.team; + lpattackerorigin = eattacker.origin; + bbprint( "mpattacks", "gametime %d attackerspawnid %d attackerweapon %s attackerx %d attackery %d attackerz %d victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", gettime(), getplayerspawnid( eattacker ), sweapon, lpattackerorigin, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 0 ); + } + else + { + lpattacknum = -1; + lpattackguid = ""; + lpattackname = ""; + lpattackerteam = "world"; + bbprint( "mpattacks", "gametime %d attackerweapon %s victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", gettime(), sweapon, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 0 ); + } + + logprint( "D;" + lpselfguid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\\n" ); + } + + pixendevent(); + profilelog_endtiming( 6, "gs=" + game["state"] + " zom=" + sessionmodeiszombiesgame() ); +} + +resetattackerlist() +{ + self.attackers = []; + self.attackerdata = []; + self.attackerdamage = []; + self.firsttimedamaged = 0; +} + +dodamagefeedback( sweapon, einflictor, idamage, smeansofdeath ) +{ + if ( !isdefined( sweapon ) ) + return false; + + if ( level.allowhitmarkers == 0 ) + return false; + + if ( level.allowhitmarkers == 1 ) + { + if ( isdefined( smeansofdeath ) && isdefined( idamage ) ) + { + if ( istacticalhitmarker( sweapon, smeansofdeath, idamage ) ) + return false; + } + } + + return true; +} + +istacticalhitmarker( sweapon, smeansofdeath, idamage ) +{ + if ( isgrenade( sweapon ) ) + { + if ( sweapon == "willy_pete_mp" ) + { + if ( smeansofdeath == "MOD_GRENADE_SPLASH" ) + return true; + } + else if ( idamage == 1 ) + return true; + } + + return false; +} + +doperkfeedback( player, sweapon, smeansofdeath, einflictor ) +{ + perkfeedback = undefined; + return perkfeedback; +} + +isaikillstreakdamage( sweapon, einflictor ) +{ + switch ( sweapon ) + { + case "ai_tank_drone_rocket_mp": + return isdefined( einflictor.firedbyai ); + case "missile_swarm_projectile_mp": + return 1; + case "planemortar_mp": + return 1; + case "chopper_minigun_mp": + return 1; + case "straferun_rockets_mp": + return 1; + case "littlebird_guard_minigun_mp": + return 1; + case "cobra_20mm_comlink_mp": + return 1; + } + + return 0; +} + +finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + pixbeginevent( "finishPlayerDamageWrapper" ); + + if ( !level.console && idflags & level.idflags_penetration && isplayer( eattacker ) ) + { +/# + println( "penetrated:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); +#/ + eattacker addplayerstat( "penetration_shots", 1 ); + } + + self finishplayerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + + if ( getdvar( "scr_csmode" ) != "" ) + self shellshock( "damage_mp", 0.2 ); + + self damageshellshockandrumble( eattacker, einflictor, sweapon, smeansofdeath, idamage ); + pixendevent(); +} + +allowedassistweapon( weapon ) +{ + return 1; +} + +callback_playerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + profilelog_begintiming( 7, "ship" ); + self endon( "spawned" ); + self notify( "killed_player" ); + + if ( self.sessionteam == "spectator" ) + return; + + if ( game["state"] == "postgame" ) + return; + + self needsrevive( 0 ); + + if ( isdefined( self.burning ) && self.burning == 1 ) + self setburn( 0 ); + + self.suicide = 0; + + if ( isdefined( level.takelivesondeath ) && level.takelivesondeath == 1 ) + { + if ( self.pers["lives"] ) + { + self.pers["lives"]--; + + if ( self.pers["lives"] == 0 ) + { + level notify( "player_eliminated" ); + self notify( "player_eliminated" ); + } + } + } + + self thread flushgroupdialogonplayer( "item_destroyed" ); + sweapon = updateweapon( einflictor, sweapon ); + pixbeginevent( "PlayerKilled pre constants" ); + wasinlaststand = 0; + deathtimeoffset = 0; + lastweaponbeforedroppingintolaststand = undefined; + attackerstance = undefined; + self.laststandthislife = undefined; + self.vattackerorigin = undefined; + + if ( isdefined( self.uselaststandparams ) ) + { + self.uselaststandparams = undefined; + assert( isdefined( self.laststandparams ) ); + + if ( !level.teambased || !isdefined( attacker ) || !isplayer( attacker ) || attacker.team != self.team || attacker == self ) + { + einflictor = self.laststandparams.einflictor; + attacker = self.laststandparams.attacker; + attackerstance = self.laststandparams.attackerstance; + idamage = self.laststandparams.idamage; + smeansofdeath = self.laststandparams.smeansofdeath; + sweapon = self.laststandparams.sweapon; + vdir = self.laststandparams.vdir; + shitloc = self.laststandparams.shitloc; + self.vattackerorigin = self.laststandparams.vattackerorigin; + deathtimeoffset = ( gettime() - self.laststandparams.laststandstarttime ) / 1000; + + if ( isdefined( self.previousprimary ) ) + { + wasinlaststand = 1; + lastweaponbeforedroppingintolaststand = self.previousprimary; + } + } + + self.laststandparams = undefined; + } + + bestplayer = undefined; + bestplayermeansofdeath = undefined; + obituarymeansofdeath = undefined; + bestplayerweapon = undefined; + obituaryweapon = undefined; + + if ( ( !isdefined( attacker ) || attacker.classname == "trigger_hurt" || attacker.classname == "worldspawn" || isdefined( attacker.ismagicbullet ) && attacker.ismagicbullet == 1 || attacker == self ) && isdefined( self.attackers ) ) + { + if ( !isdefined( bestplayer ) ) + { + for ( i = 0; i < self.attackers.size; i++ ) + { + player = self.attackers[i]; + + if ( !isdefined( player ) ) + continue; + + if ( !isdefined( self.attackerdamage[player.clientid] ) || !isdefined( self.attackerdamage[player.clientid].damage ) ) + continue; + + if ( player == self || level.teambased && player.team == self.team ) + continue; + + if ( self.attackerdamage[player.clientid].lasttimedamaged + 2500 < gettime() ) + continue; + + if ( !allowedassistweapon( self.attackerdamage[player.clientid].weapon ) ) + continue; + + if ( self.attackerdamage[player.clientid].damage > 1 && !isdefined( bestplayer ) ) + { + bestplayer = player; + bestplayermeansofdeath = self.attackerdamage[player.clientid].meansofdeath; + bestplayerweapon = self.attackerdamage[player.clientid].weapon; + continue; + } + + if ( isdefined( bestplayer ) && self.attackerdamage[player.clientid].damage > self.attackerdamage[bestplayer.clientid].damage ) + { + bestplayer = player; + bestplayermeansofdeath = self.attackerdamage[player.clientid].meansofdeath; + bestplayerweapon = self.attackerdamage[player.clientid].weapon; + } + } + } + + if ( isdefined( bestplayer ) ) + self recordkillmodifier( "assistedsuicide" ); + } + + if ( isdefined( bestplayer ) ) + { + attacker = bestplayer; + obituarymeansofdeath = bestplayermeansofdeath; + obituaryweapon = bestplayerweapon; + } + + if ( isplayer( attacker ) ) + attacker.damagedplayers[self.clientid] = undefined; + + if ( maps\mp\gametypes_zm\_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) && isplayer( attacker ) ) + { + attacker playlocalsound( "prj_bullet_impact_headshot_helmet_nodie_2d" ); + smeansofdeath = "MOD_HEAD_SHOT"; + } + + self.deathtime = gettime(); + attacker = updateattacker( attacker, sweapon ); + einflictor = updateinflictor( einflictor ); + smeansofdeath = updatemeansofdeath( sweapon, smeansofdeath ); + + if ( isdefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped == 1 ) + { + self detachshieldmodel( level.carriedshieldmodel, "tag_weapon_left" ); + self.hasriotshield = 0; + self.hasriotshieldequipped = 0; + } + + self thread updateglobalbotkilledcounter(); + + if ( isplayer( attacker ) && attacker != self && ( !level.teambased || level.teambased && self.team != attacker.team ) ) + { + self addweaponstat( sweapon, "deaths", 1 ); + + if ( wasinlaststand && isdefined( lastweaponbeforedroppingintolaststand ) ) + weaponname = lastweaponbeforedroppingintolaststand; + else + weaponname = self.lastdroppableweapon; + + if ( isdefined( weaponname ) && ( issubstr( weaponname, "gl_" ) || issubstr( weaponname, "mk_" ) || issubstr( weaponname, "ft_" ) ) ) + weaponname = self.currentweapon; + + if ( isdefined( weaponname ) ) + self addweaponstat( weaponname, "deathsDuringUse", 1 ); + + if ( smeansofdeath != "MOD_FALLING" ) + attacker addweaponstat( sweapon, "kills", 1 ); + + if ( smeansofdeath == "MOD_HEAD_SHOT" ) + attacker addweaponstat( sweapon, "headshots", 1 ); + } + + if ( !isdefined( obituarymeansofdeath ) ) + obituarymeansofdeath = smeansofdeath; + + if ( !isdefined( obituaryweapon ) ) + obituaryweapon = sweapon; + + if ( !isplayer( attacker ) || self isenemyplayer( attacker ) == 0 ) + { + level notify( "reset_obituary_count" ); + level.lastobituaryplayercount = 0; + level.lastobituaryplayer = undefined; + } + else + { + if ( isdefined( level.lastobituaryplayer ) && level.lastobituaryplayer == attacker ) + level.lastobituaryplayercount++; + else + { + level notify( "reset_obituary_count" ); + level.lastobituaryplayer = attacker; + level.lastobituaryplayercount = 1; + } + + if ( level.lastobituaryplayercount >= 4 ) + { + level notify( "reset_obituary_count" ); + level.lastobituaryplayercount = 0; + level.lastobituaryplayer = undefined; + } + } + + overrideentitycamera = 0; + + if ( level.teambased && isdefined( attacker.pers ) && self.team == attacker.team && obituarymeansofdeath == "MOD_GRENADE" && level.friendlyfire == 0 ) + { + obituary( self, self, obituaryweapon, obituarymeansofdeath ); + maps\mp\_demo::bookmark( "kill", gettime(), self, self, 0, einflictor, overrideentitycamera ); + } + else + { + obituary( self, attacker, obituaryweapon, obituarymeansofdeath ); + maps\mp\_demo::bookmark( "kill", gettime(), self, attacker, 0, einflictor, overrideentitycamera ); + } + + if ( !level.ingraceperiod ) + { + self maps\mp\gametypes_zm\_weapons::dropscavengerfordeath( attacker ); + self maps\mp\gametypes_zm\_weapons::dropweaponfordeath( attacker ); + self maps\mp\gametypes_zm\_weapons::dropoffhand(); + } + + maps\mp\gametypes_zm\_spawnlogic::deathoccured( self, attacker ); + self.sessionstate = "dead"; + self.statusicon = "hud_status_dead"; + self.pers["weapon"] = undefined; + self.killedplayerscurrent = []; + self.deathcount++; +/# + println( "players(" + self.clientid + ") death count ++: " + self.deathcount ); +#/ + if ( !isdefined( self.switching_teams ) ) + { + if ( isplayer( attacker ) && level.teambased && attacker != self && self.team == attacker.team ) + { + self.pers["cur_kill_streak"] = 0; + self.pers["cur_total_kill_streak"] = 0; + self.pers["totalKillstreakCount"] = 0; + self.pers["killstreaksEarnedThisKillstreak"] = 0; + self setplayercurrentstreak( 0 ); + } + else + { + self maps\mp\gametypes_zm\_globallogic_score::incpersstat( "deaths", 1, 1, 1 ); + self.deaths = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "deaths" ); + self updatestatratio( "kdratio", "kills", "deaths" ); + + if ( self.pers["cur_kill_streak"] > self.pers["best_kill_streak"] ) + self.pers["best_kill_streak"] = self.pers["cur_kill_streak"]; + + self.pers["kill_streak_before_death"] = self.pers["cur_kill_streak"]; + self.pers["cur_kill_streak"] = 0; + self.pers["cur_total_kill_streak"] = 0; + self.pers["totalKillstreakCount"] = 0; + self.pers["killstreaksEarnedThisKillstreak"] = 0; + self setplayercurrentstreak( 0 ); + self.cur_death_streak++; + + if ( self.cur_death_streak > self.death_streak ) + { + if ( level.rankedmatch ) + self setdstat( "HighestStats", "death_streak", self.cur_death_streak ); + + self.death_streak = self.cur_death_streak; + } + + if ( self.cur_death_streak >= getdvarint( "perk_deathStreakCountRequired" ) ) + self enabledeathstreak(); + } + } + else + { + self.pers["totalKillstreakCount"] = 0; + self.pers["killstreaksEarnedThisKillstreak"] = 0; + } + + lpselfnum = self getentitynumber(); + lpselfname = self.name; + lpattackguid = ""; + lpattackname = ""; + lpselfteam = self.team; + lpselfguid = self getguid(); + lpattackteam = ""; + lpattackorigin = ( 0, 0, 0 ); + lpattacknum = -1; + awardassists = 0; + pixendevent(); + self resetplayermomentumondeath(); + + if ( isplayer( attacker ) ) + { + lpattackguid = attacker getguid(); + lpattackname = attacker.name; + lpattackteam = attacker.team; + lpattackorigin = attacker.origin; + + if ( attacker == self ) + { + dokillcam = 0; + self maps\mp\gametypes_zm\_globallogic_score::incpersstat( "suicides", 1 ); + self.suicides = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "suicides" ); + + if ( smeansofdeath == "MOD_SUICIDE" && shitloc == "none" && self.throwinggrenade ) + self.lastgrenadesuicidetime = gettime(); + + awardassists = 1; + self.suicide = 1; + + if ( isdefined( self.friendlydamage ) ) + { + self iprintln( &"MP_FRIENDLY_FIRE_WILL_NOT" ); + + if ( level.teamkillpointloss ) + { + scoresub = self [[ level.getteamkillscore ]]( einflictor, attacker, smeansofdeath, sweapon ); + maps\mp\gametypes_zm\_globallogic_score::_setplayerscore( attacker, maps\mp\gametypes_zm\_globallogic_score::_getplayerscore( attacker ) - scoresub ); + } + } + } + else + { + pixbeginevent( "PlayerKilled attacker" ); + lpattacknum = attacker getentitynumber(); + dokillcam = 1; + + if ( level.teambased && self.team == attacker.team && smeansofdeath == "MOD_GRENADE" && level.friendlyfire == 0 ) + { + + } + else if ( level.teambased && self.team == attacker.team ) + { + if ( !ignoreteamkills( sweapon, smeansofdeath ) ) + { + teamkill_penalty = self [[ level.getteamkillpenalty ]]( einflictor, attacker, smeansofdeath, sweapon ); + attacker maps\mp\gametypes_zm\_globallogic_score::incpersstat( "teamkills_nostats", teamkill_penalty, 0 ); + attacker maps\mp\gametypes_zm\_globallogic_score::incpersstat( "teamkills", 1 ); + attacker.teamkillsthisround++; + + if ( level.teamkillpointloss ) + { + scoresub = self [[ level.getteamkillscore ]]( einflictor, attacker, smeansofdeath, sweapon ); + maps\mp\gametypes_zm\_globallogic_score::_setplayerscore( attacker, maps\mp\gametypes_zm\_globallogic_score::_getplayerscore( attacker ) - scoresub ); + } + + if ( maps\mp\gametypes_zm\_globallogic_utils::gettimepassed() < 5000 ) + teamkilldelay = 1; + else if ( attacker.pers["teamkills_nostats"] > 1 && maps\mp\gametypes_zm\_globallogic_utils::gettimepassed() < 8000 + attacker.pers["teamkills_nostats"] * 1000 ) + teamkilldelay = 1; + else + teamkilldelay = attacker teamkilldelay(); + + if ( teamkilldelay > 0 ) + { + attacker.teamkillpunish = 1; + attacker suicide(); + + if ( attacker shouldteamkillkick( teamkilldelay ) ) + attacker teamkillkick(); + + attacker thread reduceteamkillsovertime(); + } + } + } + else + { + maps\mp\gametypes_zm\_globallogic_score::inctotalkills( attacker.team ); + attacker thread maps\mp\gametypes_zm\_globallogic_score::givekillstats( smeansofdeath, sweapon, self ); + + if ( isalive( attacker ) ) + { + pixbeginevent( "killstreak" ); + + if ( !isdefined( einflictor ) || !isdefined( einflictor.requireddeathcount ) || attacker.deathcount == einflictor.requireddeathcount ) + { + shouldgivekillstreak = 0; + attacker.pers["cur_total_kill_streak"]++; + attacker setplayercurrentstreak( attacker.pers["cur_total_kill_streak"] ); + + if ( isdefined( level.killstreaks ) && shouldgivekillstreak ) + { + attacker.pers["cur_kill_streak"]++; + + if ( attacker.pers["cur_kill_streak"] >= 3 ) + { + if ( attacker.pers["cur_kill_streak"] <= 30 ) + { + + } + else + { + + } + } + } + } + + pixendevent(); + } + + if ( attacker.pers["cur_kill_streak"] > attacker.kill_streak ) + { + if ( level.rankedmatch ) + attacker setdstat( "HighestStats", "kill_streak", attacker.pers["totalKillstreakCount"] ); + + attacker.kill_streak = attacker.pers["cur_kill_streak"]; + } + + killstreak = undefined; + + if ( isdefined( killstreak ) ) + { + + } + else if ( smeansofdeath == "MOD_HEAD_SHOT" ) + { + + } + else if ( smeansofdeath == "MOD_MELEE" ) + { + if ( sweapon == "riotshield_mp" ) + { + + } + else + { + + } + } + + attacker thread maps\mp\gametypes_zm\_globallogic_score::trackattackerkill( self.name, self.pers["rank"], self.pers["rankxp"], self.pers["prestige"], self getxuid( 1 ) ); + attackername = attacker.name; + self thread maps\mp\gametypes_zm\_globallogic_score::trackattackeedeath( attackername, attacker.pers["rank"], attacker.pers["rankxp"], attacker.pers["prestige"], attacker getxuid( 1 ) ); + attacker thread maps\mp\gametypes_zm\_globallogic_score::inckillstreaktracker( sweapon ); + + if ( level.teambased && attacker.team != "spectator" ) + { + if ( isai( attacker ) ) + maps\mp\gametypes_zm\_globallogic_score::giveteamscore( "kill", attacker.aiteam, attacker, self ); + else + maps\mp\gametypes_zm\_globallogic_score::giveteamscore( "kill", attacker.team, attacker, self ); + } + + scoresub = level.deathpointloss; + + if ( scoresub != 0 ) + maps\mp\gametypes_zm\_globallogic_score::_setplayerscore( self, maps\mp\gametypes_zm\_globallogic_score::_getplayerscore( self ) - scoresub ); + + level thread playkillbattlechatter( attacker, sweapon, self ); + + if ( level.teambased ) + awardassists = 1; + } + + pixendevent(); + } + } + else if ( isdefined( attacker ) && ( attacker.classname == "trigger_hurt" || attacker.classname == "worldspawn" ) ) + { + dokillcam = 0; + lpattacknum = -1; + lpattackguid = ""; + lpattackname = ""; + lpattackteam = "world"; + self maps\mp\gametypes_zm\_globallogic_score::incpersstat( "suicides", 1 ); + self.suicides = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "suicides" ); + awardassists = 1; + } + else + { + dokillcam = 0; + lpattacknum = -1; + lpattackguid = ""; + lpattackname = ""; + lpattackteam = "world"; + + if ( isdefined( einflictor ) && isdefined( einflictor.killcament ) ) + { + dokillcam = 1; + lpattacknum = self getentitynumber(); + } + + if ( isdefined( attacker ) && isdefined( attacker.team ) && isdefined( level.teams[attacker.team] ) ) + { + if ( attacker.team != self.team ) + { + if ( level.teambased ) + maps\mp\gametypes_zm\_globallogic_score::giveteamscore( "kill", attacker.team, attacker, self ); + } + } + + awardassists = 1; + } + + if ( sessionmodeiszombiesgame() ) + awardassists = 0; + + if ( awardassists ) + { + pixbeginevent( "PlayerKilled assists" ); + + if ( isdefined( self.attackers ) ) + { + for ( j = 0; j < self.attackers.size; j++ ) + { + player = self.attackers[j]; + + if ( !isdefined( player ) ) + continue; + + if ( player == attacker ) + continue; + + if ( player.team != lpattackteam ) + continue; + + damage_done = self.attackerdamage[player.clientid].damage; + player thread maps\mp\gametypes_zm\_globallogic_score::processassist( self, damage_done, self.attackerdamage[player.clientid].weapon ); + } + } + + if ( isdefined( self.lastattackedshieldplayer ) && isdefined( self.lastattackedshieldtime ) && self.lastattackedshieldplayer != attacker ) + { + if ( gettime() - self.lastattackedshieldtime < 4000 ) + self.lastattackedshieldplayer thread maps\mp\gametypes_zm\_globallogic_score::processshieldassist( self ); + } + + pixendevent(); + } + + pixbeginevent( "PlayerKilled post constants" ); + self.lastattacker = attacker; + self.lastdeathpos = self.origin; + + if ( isdefined( attacker ) && isplayer( attacker ) && attacker != self && ( !level.teambased || attacker.team != self.team ) ) + self thread maps\mp\_challenges::playerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, shitloc, attackerstance ); + else + self notify( "playerKilledChallengesProcessed" ); + + if ( isdefined( self.attackers ) ) + self.attackers = []; + + if ( isplayer( attacker ) ) + bbprint( "mpattacks", "gametime %d attackerspawnid %d attackerweapon %s attackerx %d attackery %d attackerz %d victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", gettime(), getplayerspawnid( attacker ), sweapon, lpattackorigin, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 1 ); + else + bbprint( "mpattacks", "gametime %d attackerweapon %s victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", gettime(), sweapon, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 1 ); + + logprint( "K;" + lpselfguid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\\n" ); + attackerstring = "none"; + + if ( isplayer( attacker ) ) + attackerstring = attacker getxuid() + "(" + lpattackname + ")"; + + self logstring( "d " + smeansofdeath + "(" + sweapon + ") a:" + attackerstring + " d:" + idamage + " l:" + shitloc + " @ " + int( self.origin[0] ) + " " + int( self.origin[1] ) + " " + int( self.origin[2] ) ); + level thread maps\mp\gametypes_zm\_globallogic::updateteamstatus(); + killcamentity = self getkillcamentity( attacker, einflictor, sweapon ); + killcamentityindex = -1; + killcamentitystarttime = 0; + + if ( isdefined( killcamentity ) ) + { + killcamentityindex = killcamentity getentitynumber(); + + if ( isdefined( killcamentity.starttime ) ) + killcamentitystarttime = killcamentity.starttime; + else + killcamentitystarttime = killcamentity.birthtime; + + if ( !isdefined( killcamentitystarttime ) ) + killcamentitystarttime = 0; + } + + if ( isdefined( self.killstreak_waitamount ) && self.killstreak_waitamount > 0 ) + dokillcam = 0; + + self maps\mp\gametypes_zm\_weapons::detachcarryobjectmodel(); + died_in_vehicle = 0; + + if ( isdefined( self.diedonvehicle ) ) + died_in_vehicle = self.diedonvehicle; + + pixendevent(); + pixbeginevent( "PlayerKilled body and gibbing" ); + + if ( !died_in_vehicle ) + { + vattackerorigin = undefined; + + if ( isdefined( attacker ) ) + vattackerorigin = attacker.origin; + + ragdoll_now = 0; + + if ( isdefined( self.usingvehicle ) && self.usingvehicle && isdefined( self.vehicleposition ) && self.vehicleposition == 1 ) + ragdoll_now = 1; + + body = self cloneplayer( deathanimduration ); + self createdeadbody( idamage, smeansofdeath, sweapon, shitloc, vdir, vattackerorigin, deathanimduration, einflictor, ragdoll_now, body ); + } + + pixendevent(); + thread maps\mp\gametypes_zm\_globallogic_spawn::spawnqueuedclient( self.team, attacker ); + self.switching_teams = undefined; + self.joining_team = undefined; + self.leaving_team = undefined; + self thread [[ level.onplayerkilled ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); + + for ( icb = 0; icb < level.onplayerkilledextraunthreadedcbs.size; icb++ ) + self [[ level.onplayerkilledextraunthreadedcbs[icb] ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); + + self.wantsafespawn = 0; + perks = []; + killstreaks = maps\mp\gametypes_zm\_globallogic::getkillstreaks( attacker ); + + if ( !isdefined( self.killstreak_waitamount ) ) + self thread [[ level.spawnplayerprediction ]](); + + profilelog_endtiming( 7, "gs=" + game["state"] + " zom=" + sessionmodeiszombiesgame() ); + wait 0.25; + weaponclass = getweaponclass( sweapon ); + self.cancelkillcam = 0; + defaultplayerdeathwatchtime = 1.75; + + if ( isdefined( level.overrideplayerdeathwatchtimer ) ) + defaultplayerdeathwatchtime = [[ level.overrideplayerdeathwatchtimer ]]( defaultplayerdeathwatchtime ); + + maps\mp\gametypes_zm\_globallogic_utils::waitfortimeornotifies( defaultplayerdeathwatchtime ); + self notify( "death_delay_finished" ); +/# + if ( getdvarint( _hash_C1849218 ) != 0 ) + { + dokillcam = 1; + + if ( lpattacknum < 0 ) + lpattacknum = self getentitynumber(); + } +#/ + if ( game["state"] != "playing" ) + return; + + self.respawntimerstarttime = gettime(); + + if ( !self.cancelkillcam && dokillcam && level.killcam ) + { + livesleft = !( level.numlives && !self.pers["lives"] ); + timeuntilspawn = maps\mp\gametypes_zm\_globallogic_spawn::timeuntilspawn( 1 ); + willrespawnimmediately = livesleft && timeuntilspawn <= 0 && !level.playerqueuedrespawn; + } + + if ( game["state"] != "playing" ) + { + self.sessionstate = "dead"; + self.spectatorclient = -1; + self.killcamtargetentity = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + return; + } + + waittillkillstreakdone(); + + if ( maps\mp\gametypes_zm\_globallogic_utils::isvalidclass( self.class ) ) + { + timepassed = undefined; + + if ( isdefined( self.respawntimerstarttime ) ) + timepassed = ( gettime() - self.respawntimerstarttime ) / 1000; + + self thread [[ level.spawnclient ]]( timepassed ); + self.respawntimerstarttime = undefined; + } +} + +updateglobalbotkilledcounter() +{ + if ( isdefined( self.pers["isBot"] ) ) + level.globallarryskilled++; +} + +waittillkillstreakdone() +{ + if ( isdefined( self.killstreak_waitamount ) ) + { + starttime = gettime(); + waittime = self.killstreak_waitamount * 1000; + + while ( gettime() < starttime + waittime && isdefined( self.killstreak_waitamount ) ) + wait 0.1; + + wait 2.0; + self.killstreak_waitamount = undefined; + } +} + +teamkillkick() +{ + self maps\mp\gametypes_zm\_globallogic_score::incpersstat( "sessionbans", 1 ); + self endon( "disconnect" ); + waittillframeend; + playlistbanquantum = maps\mp\gametypes_zm\_tweakables::gettweakablevalue( "team", "teamkillerplaylistbanquantum" ); + playlistbanpenalty = maps\mp\gametypes_zm\_tweakables::gettweakablevalue( "team", "teamkillerplaylistbanpenalty" ); + + if ( playlistbanquantum > 0 && playlistbanpenalty > 0 ) + { + timeplayedtotal = self getdstat( "playerstatslist", "time_played_total", "StatValue" ); + minutesplayed = timeplayedtotal / 60; + freebees = 2; + banallowance = int( floor( minutesplayed / playlistbanquantum ) ) + freebees; + + if ( self.sessionbans > banallowance ) + self setdstat( "playerstatslist", "gametypeban", "StatValue", timeplayedtotal + playlistbanpenalty * 60 ); + } + + if ( self is_bot() ) + level notify( "bot_kicked", self.team ); + + ban( self getentitynumber() ); + maps\mp\gametypes_zm\_globallogic_audio::leaderdialog( "kicked" ); +} + +teamkilldelay() +{ + teamkills = self.pers["teamkills_nostats"]; + + if ( level.minimumallowedteamkills < 0 || teamkills <= level.minimumallowedteamkills ) + return 0; + + exceeded = teamkills - level.minimumallowedteamkills; + return level.teamkillspawndelay * exceeded; +} + +shouldteamkillkick( teamkilldelay ) +{ + if ( teamkilldelay && level.minimumallowedteamkills >= 0 ) + { + if ( maps\mp\gametypes_zm\_globallogic_utils::gettimepassed() >= 5000 ) + return true; + + if ( self.pers["teamkills_nostats"] > 1 ) + return true; + } + + return false; +} + +reduceteamkillsovertime() +{ + timeperoneteamkillreduction = 20.0; + reductionpersecond = 1.0 / timeperoneteamkillreduction; + + while ( true ) + { + if ( isalive( self ) ) + { + self.pers["teamkills_nostats"] -= reductionpersecond; + + if ( self.pers["teamkills_nostats"] < level.minimumallowedteamkills ) + { + self.pers["teamkills_nostats"] = level.minimumallowedteamkills; + break; + } + } + + wait 1; + } +} + +ignoreteamkills( sweapon, smeansofdeath ) +{ + if ( sessionmodeiszombiesgame() ) + return true; + + if ( smeansofdeath == "MOD_MELEE" ) + return false; + + if ( sweapon == "briefcase_bomb_mp" ) + return true; + + if ( sweapon == "supplydrop_mp" ) + return true; + + return false; +} + +callback_playerlaststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + +} + +damageshellshockandrumble( eattacker, einflictor, sweapon, smeansofdeath, idamage ) +{ + self thread maps\mp\gametypes_zm\_weapons::onweapondamage( eattacker, einflictor, sweapon, smeansofdeath, idamage ); + self playrumbleonentity( "damage_heavy" ); +} + +createdeadbody( idamage, smeansofdeath, sweapon, shitloc, vdir, vattackerorigin, deathanimduration, einflictor, ragdoll_jib, body ) +{ + if ( smeansofdeath == "MOD_HIT_BY_OBJECT" && self getstance() == "prone" ) + { + self.body = body; + return; + } + + if ( isdefined( level.ragdoll_override ) && self [[ level.ragdoll_override ]]() ) + return; + + if ( ragdoll_jib || self isonladder() || self ismantling() || smeansofdeath == "MOD_CRUSH" || smeansofdeath == "MOD_HIT_BY_OBJECT" ) + body startragdoll(); + + if ( !self isonground() ) + { + if ( getdvarint( "scr_disable_air_death_ragdoll" ) == 0 ) + body startragdoll(); + } + + if ( self is_explosive_ragdoll( sweapon, einflictor ) ) + body start_explosive_ragdoll( vdir, sweapon ); + + thread delaystartragdoll( body, shitloc, vdir, sweapon, einflictor, smeansofdeath ); + self.body = body; +} + +is_explosive_ragdoll( weapon, inflictor ) +{ + if ( !isdefined( weapon ) ) + return false; + + if ( weapon == "destructible_car_mp" || weapon == "explodable_barrel_mp" ) + return true; + + if ( weapon == "sticky_grenade_mp" || weapon == "explosive_bolt_mp" ) + { + if ( isdefined( inflictor ) && isdefined( inflictor.stucktoplayer ) ) + { + if ( inflictor.stucktoplayer == self ) + return true; + } + } + + return false; +} + +start_explosive_ragdoll( dir, weapon ) +{ + if ( !isdefined( self ) ) + return; + + x = randomintrange( 50, 100 ); + y = randomintrange( 50, 100 ); + z = randomintrange( 10, 20 ); + + if ( isdefined( weapon ) && ( weapon == "sticky_grenade_mp" || weapon == "explosive_bolt_mp" ) ) + { + if ( isdefined( dir ) && lengthsquared( dir ) > 0 ) + { + x = dir[0] * x; + y = dir[1] * y; + } + } + else + { + if ( cointoss() ) + x *= -1; + + if ( cointoss() ) + y *= -1; + } + + self startragdoll(); + self launchragdoll( ( x, y, z ) ); +} + +notifyconnecting() +{ + waittillframeend; + + if ( isdefined( self ) ) + level notify( "connecting", self ); +} + +delaystartragdoll( ent, shitloc, vdir, sweapon, einflictor, smeansofdeath ) +{ + if ( isdefined( ent ) ) + { + deathanim = ent getcorpseanim(); + + if ( animhasnotetrack( deathanim, "ignore_ragdoll" ) ) + return; + } + + if ( level.oldschool ) + { + if ( !isdefined( vdir ) ) + vdir = ( 0, 0, 0 ); + + explosionpos = ent.origin + ( 0, 0, maps\mp\gametypes_zm\_globallogic_utils::gethitlocheight( shitloc ) ); + explosionpos -= vdir * 20; + explosionradius = 40; + explosionforce = 0.75; + + if ( smeansofdeath == "MOD_IMPACT" || smeansofdeath == "MOD_EXPLOSIVE" || issubstr( smeansofdeath, "MOD_GRENADE" ) || issubstr( smeansofdeath, "MOD_PROJECTILE" ) || shitloc == "head" || shitloc == "helmet" ) + explosionforce = 2.5; + + ent startragdoll( 1 ); + wait 0.05; + + if ( !isdefined( ent ) ) + return; + + physicsexplosionsphere( explosionpos, explosionradius, explosionradius / 2, explosionforce ); + return; + } + + wait 0.2; + + if ( !isdefined( ent ) ) + return; + + if ( ent isragdoll() ) + return; + + deathanim = ent getcorpseanim(); + startfrac = 0.35; + + if ( animhasnotetrack( deathanim, "start_ragdoll" ) ) + { + times = getnotetracktimes( deathanim, "start_ragdoll" ); + + if ( isdefined( times ) ) + startfrac = times[0]; + } + + waittime = startfrac * getanimlength( deathanim ); + wait( waittime ); + + if ( isdefined( ent ) ) + ent startragdoll( 1 ); +} + +trackattackerdamage( eattacker, idamage, smeansofdeath, sweapon ) +{ + assert( isplayer( eattacker ) ); + + if ( self.attackerdata.size == 0 ) + self.firsttimedamaged = gettime(); + + if ( !isdefined( self.attackerdata[eattacker.clientid] ) ) + { + self.attackerdamage[eattacker.clientid] = spawnstruct(); + self.attackerdamage[eattacker.clientid].damage = idamage; + self.attackerdamage[eattacker.clientid].meansofdeath = smeansofdeath; + self.attackerdamage[eattacker.clientid].weapon = sweapon; + self.attackerdamage[eattacker.clientid].time = gettime(); + self.attackers[self.attackers.size] = eattacker; + self.attackerdata[eattacker.clientid] = 0; + } + else + { + self.attackerdamage[eattacker.clientid].damage += idamage; + self.attackerdamage[eattacker.clientid].meansofdeath = smeansofdeath; + self.attackerdamage[eattacker.clientid].weapon = sweapon; + + if ( !isdefined( self.attackerdamage[eattacker.clientid].time ) ) + self.attackerdamage[eattacker.clientid].time = gettime(); + } + + self.attackerdamage[eattacker.clientid].lasttimedamaged = gettime(); + + if ( maps\mp\gametypes_zm\_weapons::isprimaryweapon( sweapon ) ) + self.attackerdata[eattacker.clientid] = 1; +} + +giveinflictorownerassist( eattacker, einflictor, idamage, smeansofdeath, sweapon ) +{ + if ( !isdefined( einflictor ) ) + return; + + if ( !isdefined( einflictor.owner ) ) + return; + + if ( !isdefined( einflictor.ownergetsassist ) ) + return; + + if ( !einflictor.ownergetsassist ) + return; + + assert( isplayer( einflictor.owner ) ); + self trackattackerdamage( einflictor.owner, idamage, smeansofdeath, sweapon ); +} + +updatemeansofdeath( sweapon, smeansofdeath ) +{ + switch ( sweapon ) + { + case "knife_ballistic_mp": + case "crossbow_mp": + if ( smeansofdeath != "MOD_HEAD_SHOT" && smeansofdeath != "MOD_MELEE" ) + smeansofdeath = "MOD_PISTOL_BULLET"; + + break; + case "dog_bite_mp": + smeansofdeath = "MOD_PISTOL_BULLET"; + break; + case "destructible_car_mp": + smeansofdeath = "MOD_EXPLOSIVE"; + break; + case "explodable_barrel_mp": + smeansofdeath = "MOD_EXPLOSIVE"; + break; + } + + return smeansofdeath; +} + +updateattacker( attacker, weapon ) +{ + if ( isai( attacker ) && isdefined( attacker.script_owner ) ) + { + if ( !level.teambased || attacker.script_owner.team != self.team ) + attacker = attacker.script_owner; + } + + if ( attacker.classname == "script_vehicle" && isdefined( attacker.owner ) ) + { + attacker notify( "killed", self ); + attacker = attacker.owner; + } + + if ( isai( attacker ) ) + attacker notify( "killed", self ); + + if ( isdefined( self.capturinglastflag ) && self.capturinglastflag == 1 ) + attacker.lastcapkiller = 1; + + if ( isdefined( attacker ) && isdefined( weapon ) && weapon == "planemortar_mp" ) + { + if ( !isdefined( attacker.planemortarbda ) ) + attacker.planemortarbda = 0; + + attacker.planemortarbda++; + } + + return attacker; +} + +updateinflictor( einflictor ) +{ + if ( isdefined( einflictor ) && einflictor.classname == "script_vehicle" ) + { + einflictor notify( "killed", self ); + + if ( isdefined( einflictor.bda ) ) + einflictor.bda++; + } + + return einflictor; +} + +updateweapon( einflictor, sweapon ) +{ + if ( sweapon == "none" && isdefined( einflictor ) ) + { + if ( isdefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) + sweapon = "explodable_barrel_mp"; + else if ( isdefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) + sweapon = "destructible_car_mp"; + } + + return sweapon; +} + +getclosestkillcamentity( attacker, killcamentities, depth = 0 ) +{ + closestkillcament = undefined; + closestkillcamentindex = undefined; + closestkillcamentdist = undefined; + origin = undefined; + + foreach ( killcamentindex, killcament in killcamentities ) + { + if ( killcament == attacker ) + continue; + + origin = killcament.origin; + + if ( isdefined( killcament.offsetpoint ) ) + origin += killcament.offsetpoint; + + dist = distancesquared( self.origin, origin ); + + if ( !isdefined( closestkillcament ) || dist < closestkillcamentdist ) + { + closestkillcament = killcament; + closestkillcamentdist = dist; + closestkillcamentindex = killcamentindex; + } + } + + if ( depth < 3 && isdefined( closestkillcament ) ) + { + if ( !bullettracepassed( closestkillcament.origin, self.origin, 0, self ) ) + { + killcamentities[closestkillcamentindex] = undefined; + betterkillcament = getclosestkillcamentity( attacker, killcamentities, depth + 1 ); + + if ( isdefined( betterkillcament ) ) + closestkillcament = betterkillcament; + } + } + + return closestkillcament; +} + +getkillcamentity( attacker, einflictor, sweapon ) +{ + if ( !isdefined( einflictor ) ) + return undefined; + + if ( einflictor == attacker ) + { + if ( !isdefined( einflictor.ismagicbullet ) ) + return undefined; + + if ( isdefined( einflictor.ismagicbullet ) && !einflictor.ismagicbullet ) + return undefined; + } + else if ( isdefined( level.levelspecifickillcam ) ) + { + levelspecifickillcament = self [[ level.levelspecifickillcam ]](); + + if ( isdefined( levelspecifickillcament ) ) + return levelspecifickillcament; + } + + if ( sweapon == "m220_tow_mp" ) + return undefined; + + if ( isdefined( einflictor.killcament ) ) + { + if ( einflictor.killcament == attacker ) + return undefined; + + return einflictor.killcament; + } + else if ( isdefined( einflictor.killcamentities ) ) + return getclosestkillcamentity( attacker, einflictor.killcamentities ); + + if ( isdefined( einflictor.script_gameobjectname ) && einflictor.script_gameobjectname == "bombzone" ) + return einflictor.killcament; + + return einflictor; +} + +playkillbattlechatter( attacker, sweapon, victim ) +{ + +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_globallogic_score.gsc b/ZM/Core/maps/mp/gametypes_zm/_globallogic_score.gsc new file mode 100644 index 0000000..a6fcf15 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_globallogic_score.gsc @@ -0,0 +1,785 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\_bb; +#include maps\mp\gametypes_zm\_globallogic; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\gametypes_zm\_globallogic_audio; +#include maps\mp\_challenges; +#include maps\mp\gametypes_zm\_globallogic_utils; + +updatematchbonusscores( winner ) +{ + +} + +givematchbonus( scoretype, score ) +{ + +} + +doskillupdate( winner ) +{ + skillupdate( winner, level.teambased ); +} + +gethighestscoringplayer() +{ + players = level.players; + winner = undefined; + tie = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i].score ) ) + continue; + + if ( players[i].score < 1 ) + continue; + + if ( !isdefined( winner ) || players[i].score > winner.score ) + { + winner = players[i]; + tie = 0; + continue; + } + + if ( players[i].score == winner.score ) + tie = 1; + } + + if ( tie || !isdefined( winner ) ) + return undefined; + else + return winner; +} + +resetscorechain() +{ + self notify( "reset_score_chain" ); + self.scorechain = 0; + self.rankupdatetotal = 0; +} + +scorechaintimer() +{ + self notify( "score_chain_timer" ); + self endon( "reset_score_chain" ); + self endon( "score_chain_timer" ); + self endon( "death" ); + self endon( "disconnect" ); + wait 20; + self thread resetscorechain(); +} + +roundtonearestfive( score ) +{ + rounding = score % 5; + + if ( rounding <= 2 ) + return score - rounding; + else + return score + 5 - rounding; +} + +giveplayermomentumnotification( score, label, descvalue, countstowardrampage ) +{ + rampagebonus = 0; + + if ( isdefined( level.usingrampage ) && level.usingrampage ) + { + if ( countstowardrampage ) + { + if ( !isdefined( self.scorechain ) ) + self.scorechain = 0; + + self.scorechain++; + self thread scorechaintimer(); + } + + if ( isdefined( self.scorechain ) && self.scorechain >= 999 ) + rampagebonus = roundtonearestfive( int( score * level.rampagebonusscale + 0.5 ) ); + } + + if ( score != 0 ) + self luinotifyevent( &"score_event", 3, label, score, rampagebonus ); + + score += rampagebonus; + + if ( score > 0 && self hasperk( "specialty_earnmoremomentum" ) ) + score = roundtonearestfive( int( score * getdvarfloat( "perk_killstreakMomentumMultiplier" ) + 0.5 ) ); + + _setplayermomentum( self, self.pers["momentum"] + score ); +} + +resetplayermomentumondeath() +{ + if ( isdefined( level.usingscorestreaks ) && level.usingscorestreaks ) + { + _setplayermomentum( self, 0 ); + self thread resetscorechain(); + } +} + +giveplayermomentum( event, player, victim, weapon, descvalue ) +{ + +} + +giveplayerscore( event, player, victim, weapon, descvalue ) +{ + scorediff = 0; + momentum = player.pers["momentum"]; + giveplayermomentum( event, player, victim, weapon, descvalue ); + newmomentum = player.pers["momentum"]; + + if ( level.overrideplayerscore ) + return 0; + + pixbeginevent( "level.onPlayerScore" ); + score = player.pers["score"]; + [[ level.onplayerscore ]]( event, player, victim ); + newscore = player.pers["score"]; + pixendevent(); + bbprint( "mpplayerscore", "spawnid %d gametime %d type %s player %s delta %d deltamomentum %d team %s", getplayerspawnid( player ), gettime(), event, player.name, newscore - score, newmomentum - momentum, player.team ); + player maps\mp\_bb::bbaddtostat( "score", newscore - score ); + + if ( score == newscore ) + return 0; + + pixbeginevent( "givePlayerScore" ); + recordplayerstats( player, "score", newscore ); + scorediff = newscore - score; + player addplayerstatwithgametype( "score", scorediff ); + + if ( isdefined( player.pers["lastHighestScore"] ) && newscore > player.pers["lastHighestScore"] ) + player setdstat( "HighestStats", "highest_score", newscore ); + + pixendevent(); + return scorediff; +} + +default_onplayerscore( event, player, victim ) +{ + +} + +_setplayerscore( player, score ) +{ + +} + +_getplayerscore( player ) +{ + return player.pers["score"]; +} + +_setplayermomentum( player, momentum ) +{ + momentum = clamp( momentum, 0, 2000 ); + oldmomentum = player.pers["momentum"]; + + if ( momentum == oldmomentum ) + return; + + player maps\mp\_bb::bbaddtostat( "momentum", momentum - oldmomentum ); + + if ( momentum > oldmomentum ) + { + highestmomentumcost = 0; + numkillstreaks = player.killstreak.size; + killstreaktypearray = []; + } + + player.pers["momentum"] = momentum; + player.momentum = player.pers["momentum"]; +} + +_giveplayerkillstreakinternal( player, momentum, oldmomentum, killstreaktypearray ) +{ + +} + +setplayermomentumdebug() +{ +/# + setdvar( "sv_momentumPercent", 0.0 ); + + while ( true ) + { + wait 1; + momentumpercent = getdvarfloatdefault( "sv_momentumPercent", 0.0 ); + + if ( momentumpercent != 0.0 ) + { + player = gethostplayer(); + + if ( !isdefined( player ) ) + return; + + if ( isdefined( player.killstreak ) ) + _setplayermomentum( player, int( 2000 * momentumpercent / 100 ) ); + } + } +#/ +} + +giveteamscore( event, team, player, victim ) +{ + if ( level.overrideteamscore ) + return; + + pixbeginevent( "level.onTeamScore" ); + teamscore = game["teamScores"][team]; + [[ level.onteamscore ]]( event, team ); + pixendevent(); + newscore = game["teamScores"][team]; + bbprint( "mpteamscores", "gametime %d event %s team %d diff %d score %d", gettime(), event, team, newscore - teamscore, newscore ); + + if ( teamscore == newscore ) + return; + + updateteamscores( team ); + thread maps\mp\gametypes_zm\_globallogic::checkscorelimit(); +} + +giveteamscoreforobjective( team, score ) +{ + teamscore = game["teamScores"][team]; + onteamscore( score, team ); + newscore = game["teamScores"][team]; + bbprint( "mpteamobjscores", "gametime %d team %d diff %d score %d", gettime(), team, newscore - teamscore, newscore ); + + if ( teamscore == newscore ) + return; + + updateteamscores( team ); + thread maps\mp\gametypes_zm\_globallogic::checkscorelimit(); +} + +_setteamscore( team, teamscore ) +{ + if ( teamscore == game["teamScores"][team] ) + return; + + game["teamScores"][team] = teamscore; + updateteamscores( team ); + thread maps\mp\gametypes_zm\_globallogic::checkscorelimit(); +} + +resetteamscores() +{ + if ( !isdefined( level.roundscorecarry ) || level.roundscorecarry == 0 || maps\mp\_utility::isfirstround() ) + { + foreach ( team in level.teams ) + game["teamScores"][team] = 0; + } + + maps\mp\gametypes_zm\_globallogic_score::updateallteamscores(); +} + +resetallscores() +{ + resetteamscores(); + resetplayerscores(); +} + +resetplayerscores() +{ + players = level.players; + winner = undefined; + tie = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].pers["score"] ) ) + _setplayerscore( players[i], 0 ); + } +} + +updateteamscores( team ) +{ + setteamscore( team, game["teamScores"][team] ); + level thread maps\mp\gametypes_zm\_globallogic::checkteamscorelimitsoon( team ); +} + +updateallteamscores() +{ + foreach ( team in level.teams ) + updateteamscores( team ); +} + +_getteamscore( team ) +{ + return game["teamScores"][team]; +} + +gethighestteamscoreteam() +{ + score = 0; + winning_teams = []; + + foreach ( team in level.teams ) + { + team_score = game["teamScores"][team]; + + if ( team_score > score ) + { + score = team_score; + winning_teams = []; + } + + if ( team_score == score ) + winning_teams[team] = team; + } + + return winning_teams; +} + +areteamarraysequal( teamsa, teamsb ) +{ + if ( teamsa.size != teamsb.size ) + return false; + + foreach ( team in teamsa ) + { + if ( !isdefined( teamsb[team] ) ) + return false; + } + + return true; +} + +onteamscore( score, team ) +{ + game["teamScores"][team] += score; + + if ( level.scorelimit && game["teamScores"][team] > level.scorelimit ) + game["teamScores"][team] = level.scorelimit; + + if ( level.splitscreen ) + return; + + if ( level.scorelimit == 1 ) + return; + + iswinning = gethighestteamscoreteam(); + + if ( iswinning.size == 0 ) + return; + + if ( gettime() - level.laststatustime < 5000 ) + return; + + if ( areteamarraysequal( iswinning, level.waswinning ) ) + return; + + level.laststatustime = gettime(); + + if ( iswinning.size == 1 ) + { + foreach ( team in iswinning ) + { + if ( isdefined( level.waswinning[team] ) ) + { + if ( level.waswinning.size == 1 ) + continue; + } + + maps\mp\gametypes_zm\_globallogic_audio::leaderdialog( "lead_taken", team, "status" ); + } + } + + if ( level.waswinning.size == 1 ) + { + foreach ( team in level.waswinning ) + { + if ( isdefined( iswinning[team] ) ) + { + if ( iswinning.size == 1 ) + continue; + + if ( level.waswinning.size > 1 ) + continue; + } + + maps\mp\gametypes_zm\_globallogic_audio::leaderdialog( "lead_lost", team, "status" ); + } + } + + level.waswinning = iswinning; +} + +default_onteamscore( event, team ) +{ + +} + +initpersstat( dataname, record_stats, init_to_stat_value ) +{ + if ( !isdefined( self.pers[dataname] ) ) + self.pers[dataname] = 0; + + if ( !isdefined( record_stats ) || record_stats == 1 ) + recordplayerstats( self, dataname, int( self.pers[dataname] ) ); + + if ( isdefined( init_to_stat_value ) && init_to_stat_value == 1 ) + self.pers[dataname] = self getdstat( "PlayerStatsList", dataname, "StatValue" ); +} + +getpersstat( dataname ) +{ + return self.pers[dataname]; +} + +incpersstat( dataname, increment, record_stats, includegametype ) +{ + pixbeginevent( "incPersStat" ); + self.pers[dataname] += increment; + + if ( isdefined( includegametype ) && includegametype ) + self addplayerstatwithgametype( dataname, increment ); + else + self addplayerstat( dataname, increment ); + + if ( !isdefined( record_stats ) || record_stats == 1 ) + self thread threadedrecordplayerstats( dataname ); + + pixendevent(); +} + +threadedrecordplayerstats( dataname ) +{ + self endon( "disconnect" ); + waittillframeend; + recordplayerstats( self, dataname, self.pers[dataname] ); +} + +updatewinstats( winner ) +{ + +} + +updatelossstats( loser ) +{ + loser addplayerstatwithgametype( "losses", 1 ); + loser updatestatratio( "wlratio", "wins", "losses" ); + loser notify( "loss" ); +} + +updatetiestats( loser ) +{ + loser addplayerstatwithgametype( "losses", -1 ); + loser addplayerstatwithgametype( "ties", 1 ); + loser updatestatratio( "wlratio", "wins", "losses" ); + loser setdstat( "playerstatslist", "cur_win_streak", "StatValue", 0 ); + loser notify( "tie" ); +} + +updatewinlossstats( winner ) +{ + if ( !waslastround() && !level.hostforcedend ) + return; + + players = level.players; + + if ( !isdefined( winner ) || isdefined( winner ) && !isplayer( winner ) && winner == "tie" ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i].pers["team"] ) ) + continue; + + if ( level.hostforcedend && players[i] ishost() ) + continue; + + updatetiestats( players[i] ); + } + } + else if ( isplayer( winner ) ) + { + if ( level.hostforcedend && winner ishost() ) + return; + + updatewinstats( winner ); + } + else + { + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i].pers["team"] ) ) + continue; + + if ( level.hostforcedend && players[i] ishost() ) + continue; + + if ( winner == "tie" ) + { + updatetiestats( players[i] ); + continue; + } + + if ( players[i].pers["team"] == winner ) + { + updatewinstats( players[i] ); + continue; + } + + players[i] setdstat( "playerstatslist", "cur_win_streak", "StatValue", 0 ); + } + } +} + +backupandclearwinstreaks() +{ + +} + +restorewinstreaks( winner ) +{ + +} + +inckillstreaktracker( sweapon ) +{ + self endon( "disconnect" ); + waittillframeend; + + if ( sweapon == "artillery_mp" ) + self.pers["artillery_kills"]++; + + if ( sweapon == "dog_bite_mp" ) + self.pers["dog_kills"]++; +} + +trackattackerkill( name, rank, xp, prestige, xuid ) +{ + self endon( "disconnect" ); + attacker = self; + waittillframeend; + pixbeginevent( "trackAttackerKill" ); + + if ( !isdefined( attacker.pers["killed_players"][name] ) ) + attacker.pers["killed_players"][name] = 0; + + if ( !isdefined( attacker.killedplayerscurrent[name] ) ) + attacker.killedplayerscurrent[name] = 0; + + if ( !isdefined( attacker.pers["nemesis_tracking"][name] ) ) + attacker.pers["nemesis_tracking"][name] = 0; + + attacker.pers["killed_players"][name]++; + attacker.killedplayerscurrent[name]++; + attacker.pers["nemesis_tracking"][name] += 1.0; + + if ( attacker.pers["nemesis_name"] == name ) + attacker maps\mp\_challenges::killednemesis(); + + if ( attacker.pers["nemesis_name"] == "" || attacker.pers["nemesis_tracking"][name] > attacker.pers["nemesis_tracking"][attacker.pers["nemesis_name"]] ) + { + attacker.pers["nemesis_name"] = name; + attacker.pers["nemesis_rank"] = rank; + attacker.pers["nemesis_rankIcon"] = prestige; + attacker.pers["nemesis_xp"] = xp; + attacker.pers["nemesis_xuid"] = xuid; + } + else if ( isdefined( attacker.pers["nemesis_name"] ) && attacker.pers["nemesis_name"] == name ) + { + attacker.pers["nemesis_rank"] = rank; + attacker.pers["nemesis_xp"] = xp; + } + + pixendevent(); +} + +trackattackeedeath( attackername, rank, xp, prestige, xuid ) +{ + self endon( "disconnect" ); + waittillframeend; + pixbeginevent( "trackAttackeeDeath" ); + + if ( !isdefined( self.pers["killed_by"][attackername] ) ) + self.pers["killed_by"][attackername] = 0; + + self.pers["killed_by"][attackername]++; + + if ( !isdefined( self.pers["nemesis_tracking"][attackername] ) ) + self.pers["nemesis_tracking"][attackername] = 0; + + self.pers["nemesis_tracking"][attackername] += 1.5; + + if ( self.pers["nemesis_name"] == "" || self.pers["nemesis_tracking"][attackername] > self.pers["nemesis_tracking"][self.pers["nemesis_name"]] ) + { + self.pers["nemesis_name"] = attackername; + self.pers["nemesis_rank"] = rank; + self.pers["nemesis_rankIcon"] = prestige; + self.pers["nemesis_xp"] = xp; + self.pers["nemesis_xuid"] = xuid; + } + else if ( isdefined( self.pers["nemesis_name"] ) && self.pers["nemesis_name"] == attackername ) + { + self.pers["nemesis_rank"] = rank; + self.pers["nemesis_xp"] = xp; + } + + if ( self.pers["nemesis_name"] == attackername && self.pers["nemesis_tracking"][attackername] >= 2 ) + self setclientuivisibilityflag( "killcam_nemesis", 1 ); + else + self setclientuivisibilityflag( "killcam_nemesis", 0 ); + + pixendevent(); +} + +default_iskillboosting() +{ + return 0; +} + +givekillstats( smeansofdeath, sweapon, evictim ) +{ + self endon( "disconnect" ); + waittillframeend; + + if ( level.rankedmatch && self [[ level.iskillboosting ]]() ) + { +/# + self iprintlnbold( "GAMETYPE DEBUG: NOT GIVING YOU OFFENSIVE CREDIT AS BOOSTING PREVENTION" ); +#/ + return; + } + + pixbeginevent( "giveKillStats" ); + self maps\mp\gametypes_zm\_globallogic_score::incpersstat( "kills", 1, 1, 1 ); + self.kills = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "kills" ); + self updatestatratio( "kdratio", "kills", "deaths" ); + attacker = self; + + if ( smeansofdeath == "MOD_HEAD_SHOT" ) + { + attacker thread incpersstat( "headshots", 1, 1, 0 ); + attacker.headshots = attacker.pers["headshots"]; + evictim recordkillmodifier( "headshot" ); + } + + pixendevent(); +} + +inctotalkills( team ) +{ + if ( level.teambased && isdefined( level.teams[team] ) ) + game["totalKillsTeam"][team]++; + + game["totalKills"]++; +} + +setinflictorstat( einflictor, eattacker, sweapon ) +{ + if ( !isdefined( eattacker ) ) + return; + + if ( !isdefined( einflictor ) ) + { + eattacker addweaponstat( sweapon, "hits", 1 ); + return; + } + + if ( !isdefined( einflictor.playeraffectedarray ) ) + einflictor.playeraffectedarray = []; + + foundnewplayer = 1; + + for ( i = 0; i < einflictor.playeraffectedarray.size; i++ ) + { + if ( einflictor.playeraffectedarray[i] == self ) + { + foundnewplayer = 0; + break; + } + } + + if ( foundnewplayer ) + { + einflictor.playeraffectedarray[einflictor.playeraffectedarray.size] = self; + + if ( sweapon == "concussion_grenade_mp" || sweapon == "tabun_gas_mp" ) + eattacker addweaponstat( sweapon, "used", 1 ); + + eattacker addweaponstat( sweapon, "hits", 1 ); + } +} + +processshieldassist( killedplayer ) +{ + self endon( "disconnect" ); + killedplayer endon( "disconnect" ); + wait 0.05; + maps\mp\gametypes_zm\_globallogic_utils::waittillslowprocessallowed(); + + if ( !isdefined( level.teams[self.pers["team"]] ) ) + return; + + if ( self.pers["team"] == killedplayer.pers["team"] ) + return; + + if ( !level.teambased ) + return; + + self maps\mp\gametypes_zm\_globallogic_score::incpersstat( "assists", 1, 1, 1 ); + self.assists = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "assists" ); +} + +processassist( killedplayer, damagedone, weapon ) +{ + self endon( "disconnect" ); + killedplayer endon( "disconnect" ); + wait 0.05; + maps\mp\gametypes_zm\_globallogic_utils::waittillslowprocessallowed(); + + if ( !isdefined( level.teams[self.pers["team"]] ) ) + return; + + if ( self.pers["team"] == killedplayer.pers["team"] ) + return; + + if ( !level.teambased ) + return; + + assist_level = "assist"; + assist_level_value = int( ceil( damagedone / 25 ) ); + + if ( assist_level_value < 1 ) + assist_level_value = 1; + else if ( assist_level_value > 3 ) + assist_level_value = 3; + + assist_level = assist_level + "_" + assist_level_value * 25; + self maps\mp\gametypes_zm\_globallogic_score::incpersstat( "assists", 1, 1, 1 ); + self.assists = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "assists" ); + + switch ( weapon ) + { + case "concussion_grenade_mp": + assist_level = "assist_concussion"; + break; + case "flash_grenade_mp": + assist_level = "assist_flash"; + break; + case "emp_grenade_mp": + assist_level = "assist_emp"; + break; + case "proximity_grenade_mp": + case "proximity_grenade_aoe_mp": + assist_level = "assist_proximity"; + break; + } + + self maps\mp\_challenges::assisted(); +} + +xpratethread() +{ +/# + +#/ +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_globallogic_spawn.gsc b/ZM/Core/maps/mp/gametypes_zm/_globallogic_spawn.gsc new file mode 100644 index 0000000..95cbb36 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_globallogic_spawn.gsc @@ -0,0 +1,878 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_globallogic_player; +#include maps\mp\gametypes_zm\_spawning; +#include maps\mp\gametypes_zm\_globallogic_audio; +#include maps\mp\gametypes_zm\_globallogic_utils; +#include maps\mp\gametypes_zm\_globallogic; +#include maps\mp\gametypes_zm\_hud_message; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\gametypes_zm\_globallogic_ui; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\gametypes_zm\_spectating; +#include maps\mp\gametypes_zm\_hostmigration; +#include maps\mp\gametypes_zm\_globallogic_defaults; +#include maps\mp\gametypes_zm\_spawnlogic; + +timeuntilspawn( includeteamkilldelay ) +{ + if ( level.ingraceperiod && !self.hasspawned ) + return 0; + + respawndelay = 0; + + if ( self.hasspawned ) + { + result = self [[ level.onrespawndelay ]](); + + if ( isdefined( result ) ) + respawndelay = result; + else + respawndelay = level.playerrespawndelay; + + if ( includeteamkilldelay && ( isdefined( self.teamkillpunish ) && self.teamkillpunish ) ) + respawndelay += maps\mp\gametypes_zm\_globallogic_player::teamkilldelay(); + } + + wavebased = level.waverespawndelay > 0; + + if ( wavebased ) + return self timeuntilwavespawn( respawndelay ); + + return respawndelay; +} + +allteamshaveexisted() +{ + foreach ( team in level.teams ) + { + if ( !level.everexisted[team] ) + return false; + } + + return true; +} + +mayspawn() +{ + if ( isdefined( level.mayspawn ) && !self [[ level.mayspawn ]]() ) + return false; + + if ( level.inovertime ) + return false; + + if ( level.playerqueuedrespawn && !isdefined( self.allowqueuespawn ) && !level.ingraceperiod && !level.usestartspawns ) + return false; + + if ( level.numlives ) + { + if ( level.teambased ) + gamehasstarted = allteamshaveexisted(); + else + gamehasstarted = level.maxplayercount > 1 || !isoneround() && !isfirstround(); + + if ( !self.pers["lives"] && gamehasstarted ) + return false; + else if ( gamehasstarted ) + { + if ( !level.ingraceperiod && !self.hasspawned && !level.wagermatch ) + return false; + } + } + + return true; +} + +timeuntilwavespawn( minimumwait ) +{ + earliestspawntime = gettime() + minimumwait * 1000; + lastwavetime = level.lastwave[self.pers["team"]]; + wavedelay = level.wavedelay[self.pers["team"]] * 1000; + + if ( wavedelay == 0 ) + return 0; + + numwavespassedearliestspawntime = ( earliestspawntime - lastwavetime ) / wavedelay; + numwaves = ceil( numwavespassedearliestspawntime ); + timeofspawn = lastwavetime + numwaves * wavedelay; + + if ( isdefined( self.wavespawnindex ) ) + timeofspawn += 50 * self.wavespawnindex; + + return ( timeofspawn - gettime() ) / 1000; +} + +stoppoisoningandflareonspawn() +{ + self endon( "disconnect" ); + self.inpoisonarea = 0; + self.inburnarea = 0; + self.inflarevisionarea = 0; + self.ingroundnapalm = 0; +} + +spawnplayerprediction() +{ + self endon( "disconnect" ); + self endon( "end_respawn" ); + self endon( "game_ended" ); + self endon( "joined_spectators" ); + self endon( "spawned" ); + + while ( true ) + { + wait 0.5; + + if ( isdefined( level.onspawnplayerunified ) && getdvarint( _hash_CF6EEB8B ) == 0 ) + maps\mp\gametypes_zm\_spawning::onspawnplayer_unified( 1 ); + else + self [[ level.onspawnplayer ]]( 1 ); + } +} + +giveloadoutlevelspecific( team, class ) +{ + pixbeginevent( "giveLoadoutLevelSpecific" ); + + if ( isdefined( level.givecustomcharacters ) ) + self [[ level.givecustomcharacters ]](); + + if ( isdefined( level.givecustomloadout ) ) + self [[ level.givecustomloadout ]](); + + pixendevent(); +} + +spawnplayer() +{ + pixbeginevent( "spawnPlayer_preUTS" ); + self endon( "disconnect" ); + self endon( "joined_spectators" ); + self notify( "spawned" ); + level notify( "player_spawned" ); + self notify( "end_respawn" ); + self setspawnvariables(); + + if ( !self.hasspawned ) + { + self.underscorechance = 70; + self thread maps\mp\gametypes_zm\_globallogic_audio::sndstartmusicsystem(); + } + + if ( level.teambased ) + self.sessionteam = self.team; + else + { + self.sessionteam = "none"; + self.ffateam = self.team; + } + + hadspawned = self.hasspawned; + self.sessionstate = "playing"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.statusicon = ""; + self.damagedplayers = []; + + if ( getdvarint( "scr_csmode" ) > 0 ) + self.maxhealth = getdvarint( "scr_csmode" ); + else + self.maxhealth = level.playermaxhealth; + + self.health = self.maxhealth; + self.friendlydamage = undefined; + self.hasspawned = 1; + self.spawntime = gettime(); + self.afk = 0; + + if ( self.pers["lives"] && ( !isdefined( level.takelivesondeath ) || level.takelivesondeath == 0 ) ) + { + self.pers["lives"]--; + + if ( self.pers["lives"] == 0 ) + { + level notify( "player_eliminated" ); + self notify( "player_eliminated" ); + } + } + + self.laststand = undefined; + self.revivingteammate = 0; + self.burning = undefined; + self.nextkillstreakfree = undefined; + self.activeuavs = 0; + self.activecounteruavs = 0; + self.activesatellites = 0; + self.deathmachinekills = 0; + self.disabledweapon = 0; + self resetusability(); + self maps\mp\gametypes_zm\_globallogic_player::resetattackerlist(); + self.diedonvehicle = undefined; + + if ( !self.wasaliveatmatchstart ) + { + if ( level.ingraceperiod || maps\mp\gametypes_zm\_globallogic_utils::gettimepassed() < 20000 ) + self.wasaliveatmatchstart = 1; + } + + self setdepthoffield( 0, 0, 512, 512, 4, 0 ); + self resetfov(); + pixbeginevent( "onSpawnPlayer" ); + + if ( isdefined( level.onspawnplayerunified ) && getdvarint( _hash_CF6EEB8B ) == 0 ) + self [[ level.onspawnplayerunified ]](); + else + self [[ level.onspawnplayer ]]( 0 ); + + if ( isdefined( level.playerspawnedcb ) ) + self [[ level.playerspawnedcb ]](); + + pixendevent(); + pixendevent(); + level thread maps\mp\gametypes_zm\_globallogic::updateteamstatus(); + pixbeginevent( "spawnPlayer_postUTS" ); + self thread stoppoisoningandflareonspawn(); + self stopburning(); + assert( maps\mp\gametypes_zm\_globallogic_utils::isvalidclass( self.class ) ); + self giveloadoutlevelspecific( self.team, self.class ); + + if ( level.inprematchperiod ) + { + self freeze_player_controls( 1 ); + team = self.pers["team"]; + + if ( isdefined( self.pers["music"].spawn ) && self.pers["music"].spawn == 0 ) + { + if ( level.wagermatch ) + music = "SPAWN_WAGER"; + else + music = game["music"]["spawn_" + team]; + + self thread maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( music, 0, 0 ); + self.pers["music"].spawn = 1; + } + + if ( level.splitscreen ) + { + if ( isdefined( level.playedstartingmusic ) ) + music = undefined; + else + level.playedstartingmusic = 1; + } + + if ( !isdefined( level.disableprematchmessages ) || level.disableprematchmessages == 0 ) + { + thread maps\mp\gametypes_zm\_hud_message::showinitialfactionpopup( team ); + hintmessage = getobjectivehinttext( self.pers["team"] ); + + if ( isdefined( hintmessage ) ) + self thread maps\mp\gametypes_zm\_hud_message::hintmessage( hintmessage ); + + if ( isdefined( game["dialog"]["gametype"] ) && ( !level.splitscreen || self == level.players[0] ) ) + { + if ( !isdefined( level.infinalfight ) || !level.infinalfight ) + { + if ( level.hardcoremode ) + self maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "gametype_hardcore" ); + else + self maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "gametype" ); + } + } + + if ( team == game["attackers"] ) + self maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "offense_obj", "introboost" ); + else + self maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "defense_obj", "introboost" ); + } + } + else + { + self freeze_player_controls( 0 ); + self enableweapons(); + + if ( !hadspawned && game["state"] == "playing" ) + { + pixbeginevent( "sound" ); + team = self.team; + + if ( isdefined( self.pers["music"].spawn ) && self.pers["music"].spawn == 0 ) + { + self thread maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "SPAWN_SHORT", 0, 0 ); + self.pers["music"].spawn = 1; + } + + if ( level.splitscreen ) + { + if ( isdefined( level.playedstartingmusic ) ) + music = undefined; + else + level.playedstartingmusic = 1; + } + + if ( !isdefined( level.disableprematchmessages ) || level.disableprematchmessages == 0 ) + { + thread maps\mp\gametypes_zm\_hud_message::showinitialfactionpopup( team ); + hintmessage = getobjectivehinttext( self.pers["team"] ); + + if ( isdefined( hintmessage ) ) + self thread maps\mp\gametypes_zm\_hud_message::hintmessage( hintmessage ); + + if ( isdefined( game["dialog"]["gametype"] ) && ( !level.splitscreen || self == level.players[0] ) ) + { + if ( !isdefined( level.infinalfight ) || !level.infinalfight ) + { + if ( level.hardcoremode ) + self maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "gametype_hardcore" ); + else + self maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "gametype" ); + } + } + + if ( team == game["attackers"] ) + self maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "offense_obj", "introboost" ); + else + self maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "defense_obj", "introboost" ); + } + + pixendevent(); + } + } + + if ( getdvar( "scr_showperksonspawn" ) == "" ) + setdvar( "scr_showperksonspawn", "0" ); + + if ( level.hardcoremode ) + setdvar( "scr_showperksonspawn", "0" ); + + if ( !level.splitscreen && getdvarint( "scr_showperksonspawn" ) == 1 && game["state"] != "postgame" ) + { + pixbeginevent( "showperksonspawn" ); + + if ( level.perksenabled == 1 ) + self maps\mp\gametypes_zm\_hud_util::showperks(); + + self thread maps\mp\gametypes_zm\_globallogic_ui::hideloadoutaftertime( 3.0 ); + self thread maps\mp\gametypes_zm\_globallogic_ui::hideloadoutondeath(); + pixendevent(); + } + + if ( isdefined( self.pers["momentum"] ) ) + self.momentum = self.pers["momentum"]; + + pixendevent(); + waittillframeend; + self notify( "spawned_player" ); + self logstring( "S " + self.origin[0] + " " + self.origin[1] + " " + self.origin[2] ); + setdvar( "scr_selecting_location", "" ); +/# + if ( getdvarint( _hash_F8D00F60 ) > 0 ) + self thread maps\mp\gametypes_zm\_globallogic_score::xpratethread(); +#/ + self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); + + if ( game["state"] == "postgame" ) + { + assert( !level.intermission ); + self maps\mp\gametypes_zm\_globallogic_player::freezeplayerforroundend(); + } +} + +spawnspectator( origin, angles ) +{ + self notify( "spawned" ); + self notify( "end_respawn" ); + in_spawnspectator( origin, angles ); +} + +respawn_asspectator( origin, angles ) +{ + in_spawnspectator( origin, angles ); +} + +in_spawnspectator( origin, angles ) +{ + pixmarker( "BEGIN: in_spawnSpectator" ); + self setspawnvariables(); + + if ( self.pers["team"] == "spectator" ) + self clearlowermessage(); + + self.sessionstate = "spectator"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + + if ( self.pers["team"] == "spectator" ) + self.statusicon = ""; + else + self.statusicon = "hud_status_dead"; + + maps\mp\gametypes_zm\_spectating::setspectatepermissionsformachine(); + [[ level.onspawnspectator ]]( origin, angles ); + + if ( level.teambased && !level.splitscreen ) + self thread spectatorthirdpersonness(); + + level thread maps\mp\gametypes_zm\_globallogic::updateteamstatus(); + pixmarker( "END: in_spawnSpectator" ); +} + +spectatorthirdpersonness() +{ + self endon( "disconnect" ); + self endon( "spawned" ); + self notify( "spectator_thirdperson_thread" ); + self endon( "spectator_thirdperson_thread" ); + self.spectatingthirdperson = 0; +} + +forcespawn( time ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "spawned" ); + + if ( !isdefined( time ) ) + time = 60; + + wait( time ); + + if ( self.hasspawned ) + return; + + if ( self.pers["team"] == "spectator" ) + return; + + if ( !maps\mp\gametypes_zm\_globallogic_utils::isvalidclass( self.pers["class"] ) ) + { + self.pers["class"] = "CLASS_CUSTOM1"; + self.class = self.pers["class"]; + } + + self maps\mp\gametypes_zm\_globallogic_ui::closemenus(); + self thread [[ level.spawnclient ]](); +} + +kickifdontspawn() +{ +/# + if ( getdvarint( "scr_hostmigrationtest" ) == 1 ) + return; +#/ + if ( self ishost() ) + return; + + self kickifidontspawninternal(); +} + +kickifidontspawninternal() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "spawned" ); + waittime = 90; + + if ( getdvar( _hash_4257CF5C ) != "" ) + waittime = getdvarfloat( _hash_4257CF5C ); + + mintime = 45; + + if ( getdvar( _hash_DF057E0 ) != "" ) + mintime = getdvarfloat( _hash_DF057E0 ); + + starttime = gettime(); + kickwait( waittime ); + timepassed = ( gettime() - starttime ) / 1000; + + if ( timepassed < waittime - 0.1 && timepassed < mintime ) + return; + + if ( self.hasspawned ) + return; + + if ( sessionmodeisprivate() ) + return; + + if ( self.pers["team"] == "spectator" ) + return; + + kick( self getentitynumber() ); +} + +kickwait( waittime ) +{ + level endon( "game_ended" ); + maps\mp\gametypes_zm\_hostmigration::waitlongdurationwithhostmigrationpause( waittime ); +} + +spawninterroundintermission() +{ + self notify( "spawned" ); + self notify( "end_respawn" ); + self setspawnvariables(); + self clearlowermessage(); + self freeze_player_controls( 0 ); + self.sessionstate = "spectator"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + self maps\mp\gametypes_zm\_globallogic_defaults::default_onspawnintermission(); + self setorigin( self.origin ); + self setplayerangles( self.angles ); + self setdepthoffield( 0, 128, 512, 4000, 6, 1.8 ); +} + +spawnintermission( usedefaultcallback ) +{ + self notify( "spawned" ); + self notify( "end_respawn" ); + self endon( "disconnect" ); + self setspawnvariables(); + self clearlowermessage(); + self freeze_player_controls( 0 ); + + if ( level.rankedmatch && waslastround() ) + { + if ( self.postgamemilestones || self.postgamecontracts || self.postgamepromotion ) + { + if ( self.postgamepromotion ) + self playlocalsound( "mus_level_up" ); + else if ( self.postgamecontracts ) + self playlocalsound( "mus_challenge_complete" ); + else if ( self.postgamemilestones ) + self playlocalsound( "mus_contract_complete" ); + + self closeingamemenu(); + self openmenu( game["menu_endgameupdate"] ); + waittime = 4.0; + + while ( waittime ) + { + wait 0.25; + waittime -= 0.25; + self openmenu( game["menu_endgameupdate"] ); + } + + self closemenu(); + } + } + + self.sessionstate = "intermission"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + + if ( isdefined( usedefaultcallback ) && usedefaultcallback ) + maps\mp\gametypes_zm\_globallogic_defaults::default_onspawnintermission(); + else + [[ level.onspawnintermission ]](); + + self setdepthoffield( 0, 128, 512, 4000, 6, 1.8 ); +} + +spawnqueuedclientonteam( team ) +{ + player_to_spawn = undefined; + + for ( i = 0; i < level.deadplayers[team].size; i++ ) + { + player = level.deadplayers[team][i]; + + if ( player.waitingtospawn ) + continue; + + player_to_spawn = player; + break; + } + + if ( isdefined( player_to_spawn ) ) + { + player_to_spawn.allowqueuespawn = 1; + player_to_spawn maps\mp\gametypes_zm\_globallogic_ui::closemenus(); + player_to_spawn thread [[ level.spawnclient ]](); + } +} + +spawnqueuedclient( dead_player_team, killer ) +{ + if ( !level.playerqueuedrespawn ) + return; + + maps\mp\gametypes_zm\_globallogic_utils::waittillslowprocessallowed(); + spawn_team = undefined; + + if ( isdefined( killer ) && isdefined( killer.team ) && isdefined( level.teams[killer.team] ) ) + spawn_team = killer.team; + + if ( isdefined( spawn_team ) ) + { + spawnqueuedclientonteam( spawn_team ); + return; + } + + foreach ( team in level.teams ) + { + if ( team == dead_player_team ) + continue; + + spawnqueuedclientonteam( team ); + } +} + +allteamsnearscorelimit() +{ + if ( !level.teambased ) + return false; + + if ( level.scorelimit <= 1 ) + return false; + + foreach ( team in level.teams ) + { + if ( !( game["teamScores"][team] >= level.scorelimit - 1 ) ) + return false; + } + + return true; +} + +shouldshowrespawnmessage() +{ + if ( waslastround() ) + return false; + + if ( isoneround() ) + return false; + + if ( isdefined( level.livesdonotreset ) && level.livesdonotreset ) + return false; + + if ( allteamsnearscorelimit() ) + return false; + + return true; +} + +default_spawnmessage() +{ + setlowermessage( game["strings"]["spawn_next_round"] ); + self thread maps\mp\gametypes_zm\_globallogic_ui::removespawnmessageshortly( 3 ); +} + +showspawnmessage() +{ + if ( shouldshowrespawnmessage() ) + self thread [[ level.spawnmessage ]](); +} + +spawnclient( timealreadypassed ) +{ + pixbeginevent( "spawnClient" ); + assert( isdefined( self.team ) ); + assert( maps\mp\gametypes_zm\_globallogic_utils::isvalidclass( self.class ) ); + + if ( !self mayspawn() ) + { + currentorigin = self.origin; + currentangles = self.angles; + self showspawnmessage(); + self thread [[ level.spawnspectator ]]( currentorigin + vectorscale( ( 0, 0, 1 ), 60.0 ), currentangles ); + pixendevent(); + return; + } + + if ( self.waitingtospawn ) + { + pixendevent(); + return; + } + + self.waitingtospawn = 1; + self.allowqueuespawn = undefined; + self waitandspawnclient( timealreadypassed ); + + if ( isdefined( self ) ) + self.waitingtospawn = 0; + + pixendevent(); +} + +waitandspawnclient( timealreadypassed ) +{ + self endon( "disconnect" ); + self endon( "end_respawn" ); + level endon( "game_ended" ); + + if ( !isdefined( timealreadypassed ) ) + timealreadypassed = 0; + + spawnedasspectator = 0; + + if ( isdefined( self.teamkillpunish ) && self.teamkillpunish ) + { + teamkilldelay = maps\mp\gametypes_zm\_globallogic_player::teamkilldelay(); + + if ( teamkilldelay > timealreadypassed ) + { + teamkilldelay -= timealreadypassed; + timealreadypassed = 0; + } + else + { + timealreadypassed -= teamkilldelay; + teamkilldelay = 0; + } + + if ( teamkilldelay > 0 ) + { + setlowermessage( &"MP_FRIENDLY_FIRE_WILL_NOT", teamkilldelay ); + self thread respawn_asspectator( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), self.angles ); + spawnedasspectator = 1; + wait( teamkilldelay ); + } + + self.teamkillpunish = 0; + } + + if ( !isdefined( self.wavespawnindex ) && isdefined( level.waveplayerspawnindex[self.team] ) ) + { + self.wavespawnindex = level.waveplayerspawnindex[self.team]; + level.waveplayerspawnindex[self.team]++; + } + + timeuntilspawn = timeuntilspawn( 0 ); + + if ( timeuntilspawn > timealreadypassed ) + { + timeuntilspawn -= timealreadypassed; + timealreadypassed = 0; + } + else + { + timealreadypassed -= timeuntilspawn; + timeuntilspawn = 0; + } + + if ( timeuntilspawn > 0 ) + { + if ( level.playerqueuedrespawn ) + setlowermessage( game["strings"]["you_will_spawn"], timeuntilspawn ); + else if ( self issplitscreen() ) + setlowermessage( game["strings"]["waiting_to_spawn_ss"], timeuntilspawn, 1 ); + else + setlowermessage( game["strings"]["waiting_to_spawn"], timeuntilspawn ); + + if ( !spawnedasspectator ) + { + spawnorigin = self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ); + spawnangles = self.angles; + + if ( isdefined( level.useintermissionpointsonwavespawn ) && [[ level.useintermissionpointsonwavespawn ]]() == 1 ) + { + spawnpoint = maps\mp\gametypes_zm\_spawnlogic::getrandomintermissionpoint(); + + if ( isdefined( spawnpoint ) ) + { + spawnorigin = spawnpoint.origin; + spawnangles = spawnpoint.angles; + } + } + + self thread respawn_asspectator( spawnorigin, spawnangles ); + } + + spawnedasspectator = 1; + self maps\mp\gametypes_zm\_globallogic_utils::waitfortimeornotify( timeuntilspawn, "force_spawn" ); + self notify( "stop_wait_safe_spawn_button" ); + } + + wavebased = level.waverespawndelay > 0; + + if ( !level.playerforcerespawn && self.hasspawned && !wavebased && !self.wantsafespawn && !level.playerqueuedrespawn ) + { + setlowermessage( game["strings"]["press_to_spawn"] ); + + if ( !spawnedasspectator ) + self thread respawn_asspectator( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), self.angles ); + + spawnedasspectator = 1; + self waitrespawnorsafespawnbutton(); + } + + self.waitingtospawn = 0; + self clearlowermessage(); + self.wavespawnindex = undefined; + self.respawntimerstarttime = undefined; + self thread [[ level.spawnplayer ]](); +} + +waitrespawnorsafespawnbutton() +{ + self endon( "disconnect" ); + self endon( "end_respawn" ); + + while ( true ) + { + if ( self usebuttonpressed() ) + break; + + wait 0.05; + } +} + +waitinspawnqueue() +{ + self endon( "disconnect" ); + self endon( "end_respawn" ); + + if ( !level.ingraceperiod && !level.usestartspawns ) + { + currentorigin = self.origin; + currentangles = self.angles; + self thread [[ level.spawnspectator ]]( currentorigin + vectorscale( ( 0, 0, 1 ), 60.0 ), currentangles ); + + self waittill( "queue_respawn" ); + } +} + +setthirdperson( value ) +{ + if ( !level.console ) + return; + + if ( !isdefined( self.spectatingthirdperson ) || value != self.spectatingthirdperson ) + { + self.spectatingthirdperson = value; + + if ( value ) + { + self setclientthirdperson( 1 ); + self setdepthoffield( 0, 128, 512, 4000, 6, 1.8 ); + } + else + { + self setclientthirdperson( 0 ); + self setdepthoffield( 0, 0, 512, 4000, 4, 0 ); + } + + self resetfov(); + } +} + +setspawnvariables() +{ + resettimeout(); + self stopshellshock(); + self stoprumble( "damage_heavy" ); +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_globallogic_ui.gsc b/ZM/Core/maps/mp/gametypes_zm/_globallogic_ui.gsc new file mode 100644 index 0000000..0e9b460 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_globallogic_ui.gsc @@ -0,0 +1,490 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\gametypes_zm\_globallogic; +#include maps\mp\gametypes_zm\_spectating; +#include maps\mp\gametypes_zm\_globallogic_player; + +init() +{ + precachestring( &"MP_HALFTIME" ); + precachestring( &"MP_OVERTIME" ); + precachestring( &"MP_ROUNDEND" ); + precachestring( &"MP_INTERMISSION" ); + precachestring( &"MP_SWITCHING_SIDES_CAPS" ); + precachestring( &"MP_FRIENDLY_FIRE_WILL_NOT" ); + precachestring( &"MP_RAMPAGE" ); + precachestring( &"medal_received" ); + precachestring( &"killstreak_received" ); + precachestring( &"prox_grenade_notify" ); + precachestring( &"player_callout" ); + precachestring( &"score_event" ); + precachestring( &"rank_up" ); + precachestring( &"gun_level_complete" ); + precachestring( &"challenge_complete" ); + + if ( sessionmodeiszombiesgame() ) + precachestring( &"hud_update_survival_team" ); + + if ( level.splitscreen ) + precachestring( &"MP_ENDED_GAME" ); + else + precachestring( &"MP_HOST_ENDED_GAME" ); +} + +setupcallbacks() +{ + level.autoassign = ::menuautoassign; + level.spectator = ::menuspectator; + level.class = ::menuclass; + level.teammenu = ::menuteam; +} + +hideloadoutaftertime( delay ) +{ + self endon( "disconnect" ); + self endon( "perks_hidden" ); + wait( delay ); + self thread hideallperks( 0.4 ); + self notify( "perks_hidden" ); +} + +hideloadoutondeath() +{ + self endon( "disconnect" ); + self endon( "perks_hidden" ); + + self waittill( "death" ); + + self hideallperks(); + self notify( "perks_hidden" ); +} + +hideloadoutonkill() +{ + self endon( "disconnect" ); + self endon( "death" ); + self endon( "perks_hidden" ); + + self waittill( "killed_player" ); + + self hideallperks(); + self notify( "perks_hidden" ); +} + +freegameplayhudelems() +{ + if ( isdefined( self.perkicon ) ) + { + for ( numspecialties = 0; numspecialties < level.maxspecialties; numspecialties++ ) + { + if ( isdefined( self.perkicon[numspecialties] ) ) + { + self.perkicon[numspecialties] destroyelem(); + self.perkname[numspecialties] destroyelem(); + } + } + } + + if ( isdefined( self.perkhudelem ) ) + self.perkhudelem destroyelem(); + + if ( isdefined( self.killstreakicon ) ) + { + if ( isdefined( self.killstreakicon[0] ) ) + self.killstreakicon[0] destroyelem(); + + if ( isdefined( self.killstreakicon[1] ) ) + self.killstreakicon[1] destroyelem(); + + if ( isdefined( self.killstreakicon[2] ) ) + self.killstreakicon[2] destroyelem(); + + if ( isdefined( self.killstreakicon[3] ) ) + self.killstreakicon[3] destroyelem(); + + if ( isdefined( self.killstreakicon[4] ) ) + self.killstreakicon[4] destroyelem(); + } + + self notify( "perks_hidden" ); + + if ( isdefined( self.lowermessage ) ) + self.lowermessage destroyelem(); + + if ( isdefined( self.lowertimer ) ) + self.lowertimer destroyelem(); + + if ( isdefined( self.proxbar ) ) + self.proxbar destroyelem(); + + if ( isdefined( self.proxbartext ) ) + self.proxbartext destroyelem(); + + if ( isdefined( self.carryicon ) ) + self.carryicon destroyelem(); +} + +teamplayercountsequal( playercounts ) +{ + count = undefined; + + foreach ( team in level.teams ) + { + if ( !isdefined( count ) ) + { + count = playercounts[team]; + continue; + } + + if ( count != playercounts[team] ) + return false; + } + + return true; +} + +teamwithlowestplayercount( playercounts, ignore_team ) +{ + count = 9999; + lowest_team = undefined; + + foreach ( team in level.teams ) + { + if ( count > playercounts[team] ) + { + count = playercounts[team]; + lowest_team = team; + } + } + + return lowest_team; +} + +menuautoassign( comingfrommenu ) +{ + teamkeys = getarraykeys( level.teams ); + assignment = teamkeys[randomint( teamkeys.size )]; + self closemenus(); + + if ( isdefined( level.forceallallies ) && level.forceallallies ) + assignment = "allies"; + else if ( level.teambased ) + { + if ( getdvarint( "party_autoteams" ) == 1 ) + { + if ( level.allow_teamchange == "1" && ( self.hasspawned || comingfrommenu ) ) + assignment = ""; + else + { + team = getassignedteam( self ); + + switch ( team ) + { + case 1: + assignment = teamkeys[1]; + break; + case 2: + assignment = teamkeys[0]; + break; + case 3: + assignment = teamkeys[2]; + break; + case 4: + if ( !isdefined( level.forceautoassign ) || !level.forceautoassign ) + { + self setclientscriptmainmenu( game["menu_class"] ); + return; + } + default: + assignment = ""; + + if ( isdefined( level.teams[team] ) ) + assignment = team; + else if ( team == "spectator" && !level.forceautoassign ) + { + self setclientscriptmainmenu( game["menu_class"] ); + return; + } + } + } + } + + if ( assignment == "" || getdvarint( "party_autoteams" ) == 0 ) + { + if ( sessionmodeiszombiesgame() ) + assignment = "allies"; + } + + if ( assignment == self.pers["team"] && ( self.sessionstate == "playing" || self.sessionstate == "dead" ) ) + { + self beginclasschoice(); + return; + } + } + else if ( getdvarint( "party_autoteams" ) == 1 ) + { + if ( level.allow_teamchange != "1" || !self.hasspawned && !comingfrommenu ) + { + team = getassignedteam( self ); + + if ( isdefined( level.teams[team] ) ) + assignment = team; + else if ( team == "spectator" && !level.forceautoassign ) + { + self setclientscriptmainmenu( game["menu_class"] ); + return; + } + } + } + + if ( assignment != self.pers["team"] && ( self.sessionstate == "playing" || self.sessionstate == "dead" ) ) + { + self.switching_teams = 1; + self.joining_team = assignment; + self.leaving_team = self.pers["team"]; + self suicide(); + } + + self.pers["team"] = assignment; + self.team = assignment; + self.pers["class"] = undefined; + self.class = undefined; + self.pers["weapon"] = undefined; + self.pers["savedmodel"] = undefined; + self updateobjectivetext(); + + if ( level.teambased ) + self.sessionteam = assignment; + else + { + self.sessionteam = "none"; + self.ffateam = assignment; + } + + if ( !isalive( self ) ) + self.statusicon = "hud_status_dead"; + + self notify( "joined_team" ); + level notify( "joined_team" ); + self notify( "end_respawn" ); + self beginclasschoice(); + self setclientscriptmainmenu( game["menu_class"] ); +} + +teamscoresequal() +{ + score = undefined; + + foreach ( team in level.teams ) + { + if ( !isdefined( score ) ) + { + score = getteamscore( team ); + continue; + } + + if ( score != getteamscore( team ) ) + return false; + } + + return true; +} + +teamwithlowestscore() +{ + score = 99999999; + lowest_team = undefined; + + foreach ( team in level.teams ) + { + if ( score > getteamscore( team ) ) + lowest_team = team; + } + + return lowest_team; +} + +pickteamfromscores( teams ) +{ + assignment = "allies"; + + if ( teamscoresequal() ) + assignment = teams[randomint( teams.size )]; + else + assignment = teamwithlowestscore(); + + return assignment; +} + +getsplitscreenteam() +{ + for ( index = 0; index < level.players.size; index++ ) + { + if ( !isdefined( level.players[index] ) ) + continue; + + if ( level.players[index] == self ) + continue; + + if ( !self isplayeronsamemachine( level.players[index] ) ) + continue; + + team = level.players[index].sessionteam; + + if ( team != "spectator" ) + return team; + } + + return ""; +} + +updateobjectivetext() +{ + if ( sessionmodeiszombiesgame() || self.pers["team"] == "spectator" ) + { + self setclientcgobjectivetext( "" ); + return; + } + + if ( level.scorelimit > 0 ) + self setclientcgobjectivetext( getobjectivescoretext( self.pers["team"] ) ); + else + self setclientcgobjectivetext( getobjectivetext( self.pers["team"] ) ); +} + +closemenus() +{ + self closemenu(); + self closeingamemenu(); +} + +beginclasschoice( forcenewchoice ) +{ + assert( isdefined( level.teams[self.pers["team"]] ) ); + team = self.pers["team"]; + + if ( level.disablecac == 1 ) + { + self.pers["class"] = level.defaultclass; + self.class = level.defaultclass; + + if ( self.sessionstate != "playing" && game["state"] == "playing" ) + self thread [[ level.spawnclient ]](); + + level thread maps\mp\gametypes_zm\_globallogic::updateteamstatus(); + self thread maps\mp\gametypes_zm\_spectating::setspectatepermissionsformachine(); + return; + } + + if ( level.wagermatch ) + self openmenu( game["menu_changeclass_wager"] ); + else if ( getdvarint( "barebones_class_mode" ) ) + self openmenu( game["menu_changeclass_barebones"] ); + else + self openmenu( game["menu_changeclass_" + team] ); +} + +showmainmenuforteam() +{ + assert( isdefined( level.teams[self.pers["team"]] ) ); + team = self.pers["team"]; + + if ( level.wagermatch ) + self openmenu( game["menu_changeclass_wager"] ); + else + self openmenu( game["menu_changeclass_" + team] ); +} + +menuteam( team ) +{ + self closemenus(); + + if ( !level.console && level.allow_teamchange == "0" && ( isdefined( self.hasdonecombat ) && self.hasdonecombat ) ) + return; + + if ( self.pers["team"] != team ) + { + if ( level.ingraceperiod && ( !isdefined( self.hasdonecombat ) || !self.hasdonecombat ) ) + self.hasspawned = 0; + + if ( self.sessionstate == "playing" ) + { + self.switching_teams = 1; + self.joining_team = team; + self.leaving_team = self.pers["team"]; + self suicide(); + } + + self.pers["team"] = team; + self.team = team; + self.pers["class"] = undefined; + self.class = undefined; + self.pers["weapon"] = undefined; + self.pers["savedmodel"] = undefined; + self updateobjectivetext(); + + if ( level.teambased ) + self.sessionteam = team; + else + { + self.sessionteam = "none"; + self.ffateam = team; + } + + self setclientscriptmainmenu( game["menu_class"] ); + self notify( "joined_team" ); + level notify( "joined_team" ); + self notify( "end_respawn" ); + } + + self beginclasschoice(); +} + +menuspectator() +{ + self closemenus(); + + if ( self.pers["team"] != "spectator" ) + { + if ( isalive( self ) ) + { + self.switching_teams = 1; + self.joining_team = "spectator"; + self.leaving_team = self.pers["team"]; + self suicide(); + } + + self.pers["team"] = "spectator"; + self.team = "spectator"; + self.pers["class"] = undefined; + self.class = undefined; + self.pers["weapon"] = undefined; + self.pers["savedmodel"] = undefined; + self updateobjectivetext(); + self.sessionteam = "spectator"; + + if ( !level.teambased ) + self.ffateam = "spectator"; + + [[ level.spawnspectator ]](); + self thread maps\mp\gametypes_zm\_globallogic_player::spectate_player_watcher(); + self setclientscriptmainmenu( game["menu_class"] ); + self notify( "joined_spectators" ); + } +} + +menuclass( response ) +{ + self closemenus(); +} + +removespawnmessageshortly( delay ) +{ + self endon( "disconnect" ); + waittillframeend; + self endon( "end_respawn" ); + wait( delay ); + self clearlowermessage( 2.0 ); +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_globallogic_utils.gsc b/ZM/Core/maps/mp/gametypes_zm/_globallogic_utils.gsc new file mode 100644 index 0000000..bef7d8d --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_globallogic_utils.gsc @@ -0,0 +1,425 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_message; +#include maps\mp\gametypes_zm\_hostmigration; +#include maps\mp\gametypes_zm\_globallogic_score; + +waittillslowprocessallowed() +{ + while ( level.lastslowprocessframe == gettime() ) + wait 0.05; + + level.lastslowprocessframe = gettime(); +} + +testmenu() +{ + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + wait 10.0; + notifydata = spawnstruct(); + notifydata.titletext = &"MP_CHALLENGE_COMPLETED"; + notifydata.notifytext = "wheee"; + notifydata.sound = "mp_challenge_complete"; + self thread maps\mp\gametypes_zm\_hud_message::notifymessage( notifydata ); + } +} + +testshock() +{ + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + wait 3.0; + numshots = randomint( 6 ); + + for ( i = 0; i < numshots; i++ ) + { + iprintlnbold( numshots ); + self shellshock( "frag_grenade_mp", 0.2 ); + wait 0.1; + } + } +} + +testhps() +{ + self endon( "death" ); + self endon( "disconnect" ); + hps = []; + hps[hps.size] = "radar_mp"; + hps[hps.size] = "artillery_mp"; + hps[hps.size] = "dogs_mp"; + + for (;;) + { + hp = "radar_mp"; + wait 20.0; + } +} + +timeuntilroundend() +{ + if ( level.gameended ) + { + timepassed = ( gettime() - level.gameendtime ) / 1000; + timeremaining = level.postroundtime - timepassed; + + if ( timeremaining < 0 ) + return 0; + + return timeremaining; + } + + if ( level.inovertime ) + return undefined; + + if ( level.timelimit <= 0 ) + return undefined; + + if ( !isdefined( level.starttime ) ) + return undefined; + + timepassed = ( gettimepassed() - level.starttime ) / 1000; + timeremaining = level.timelimit * 60 - timepassed; + return timeremaining + level.postroundtime; +} + +gettimeremaining() +{ + return level.timelimit * 60 * 1000 - gettimepassed(); +} + +registerpostroundevent( eventfunc ) +{ + if ( !isdefined( level.postroundevents ) ) + level.postroundevents = []; + + level.postroundevents[level.postroundevents.size] = eventfunc; +} + +executepostroundevents() +{ + if ( !isdefined( level.postroundevents ) ) + return; + + for ( i = 0; i < level.postroundevents.size; i++ ) + [[ level.postroundevents[i] ]](); +} + +getvalueinrange( value, minvalue, maxvalue ) +{ + if ( value > maxvalue ) + return maxvalue; + else if ( value < minvalue ) + return minvalue; + else + return value; +} + +assertproperplacement() +{ +/# + numplayers = level.placement["all"].size; + + for ( i = 0; i < numplayers - 1; i++ ) + { + if ( isdefined( level.placement["all"][i] ) && isdefined( level.placement["all"][i + 1] ) ) + { + if ( level.placement["all"][i].score < level.placement["all"][i + 1].score ) + { + println( "^1Placement array:" ); + + for ( i = 0; i < numplayers; i++ ) + { + player = level.placement["all"][i]; + println( "^1" + i + ". " + player.name + ": " + player.score ); + } +/# + assertmsg( "Placement array was not properly sorted" ); +#/ + break; + } + } + } +#/ +} + +isvalidclass( class ) +{ + if ( level.oldschool || sessionmodeiszombiesgame() ) + { + assert( !isdefined( class ) ); + return 1; + } + + return isdefined( class ) && class != ""; +} + +playtickingsound( gametype_tick_sound ) +{ + self endon( "death" ); + self endon( "stop_ticking" ); + level endon( "game_ended" ); + time = level.bombtimer; + + while ( true ) + { + self playsound( gametype_tick_sound ); + + if ( time > 10 ) + { + time -= 1; + wait 1; + } + else if ( time > 4 ) + { + time -= 0.5; + wait 0.5; + } + else if ( time > 1 ) + { + time -= 0.4; + wait 0.4; + } + else + { + time -= 0.3; + wait 0.3; + } + + maps\mp\gametypes_zm\_hostmigration::waittillhostmigrationdone(); + } +} + +stoptickingsound() +{ + self notify( "stop_ticking" ); +} + +gametimer() +{ + level endon( "game_ended" ); + + level waittill( "prematch_over" ); + + level.starttime = gettime(); + level.discardtime = 0; + + if ( isdefined( game["roundMillisecondsAlreadyPassed"] ) ) + { + level.starttime -= game["roundMillisecondsAlreadyPassed"]; + game["roundMillisecondsAlreadyPassed"] = undefined; + } + + prevtime = gettime(); + + while ( game["state"] == "playing" ) + { + if ( !level.timerstopped ) + game["timepassed"] += gettime() - prevtime; + + prevtime = gettime(); + wait 1.0; + } +} + +gettimepassed() +{ + if ( !isdefined( level.starttime ) ) + return 0; + + if ( level.timerstopped ) + return level.timerpausetime - level.starttime - level.discardtime; + else + return gettime() - level.starttime - level.discardtime; +} + +pausetimer() +{ + if ( level.timerstopped ) + return; + + level.timerstopped = 1; + level.timerpausetime = gettime(); +} + +resumetimer() +{ + if ( !level.timerstopped ) + return; + + level.timerstopped = 0; + level.discardtime += gettime() - level.timerpausetime; +} + +getscoreremaining( team ) +{ + assert( isplayer( self ) || isdefined( team ) ); + scorelimit = level.scorelimit; + + if ( isplayer( self ) ) + return scorelimit - maps\mp\gametypes_zm\_globallogic_score::_getplayerscore( self ); + else + return scorelimit - getteamscore( team ); +} + +getscoreperminute( team ) +{ + assert( isplayer( self ) || isdefined( team ) ); + scorelimit = level.scorelimit; + timelimit = level.timelimit; + minutespassed = gettimepassed() / 60000 + 0.0001; + + if ( isplayer( self ) ) + return maps\mp\gametypes_zm\_globallogic_score::_getplayerscore( self ) / minutespassed; + else + return getteamscore( team ) / minutespassed; +} + +getestimatedtimeuntilscorelimit( team ) +{ + assert( isplayer( self ) || isdefined( team ) ); + scoreperminute = self getscoreperminute( team ); + scoreremaining = self getscoreremaining( team ); + + if ( !scoreperminute ) + return 999999; + + return scoreremaining / scoreperminute; +} + +rumbler() +{ + self endon( "disconnect" ); + + while ( true ) + { + wait 0.1; + self playrumbleonentity( "damage_heavy" ); + } +} + +waitfortimeornotify( time, notifyname ) +{ + self endon( notifyname ); + wait( time ); +} + +waitfortimeornotifynoartillery( time, notifyname ) +{ + self endon( notifyname ); + wait( time ); + + while ( isdefined( level.artilleryinprogress ) ) + { + assert( level.artilleryinprogress ); + wait 0.25; + } +} + +isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) +{ + if ( shitloc != "head" && shitloc != "helmet" ) + return false; + + switch ( smeansofdeath ) + { + case "MOD_MELEE": + case "MOD_BAYONET": + return false; + case "MOD_IMPACT": + if ( sweapon != "knife_ballistic_mp" ) + return false; + } + + return true; +} + +gethitlocheight( shitloc ) +{ + switch ( shitloc ) + { + case "neck": + case "helmet": + case "head": + return 60; + case "torso_upper": + case "right_hand": + case "right_arm_upper": + case "right_arm_lower": + case "left_hand": + case "left_arm_upper": + case "left_arm_lower": + case "gun": + return 48; + case "torso_lower": + return 40; + case "right_leg_upper": + case "left_leg_upper": + return 32; + case "right_leg_lower": + case "left_leg_lower": + return 10; + case "right_foot": + case "left_foot": + return 5; + } + + return 48; +} + +debugline( start, end ) +{ +/# + for ( i = 0; i < 50; i++ ) + { + line( start, end ); + wait 0.05; + } +#/ +} + +isexcluded( entity, entitylist ) +{ + for ( index = 0; index < entitylist.size; index++ ) + { + if ( entity == entitylist[index] ) + return true; + } + + return false; +} + +waitfortimeornotifies( desireddelay ) +{ + startedwaiting = gettime(); + waitedtime = ( gettime() - startedwaiting ) / 1000; + + if ( waitedtime < desireddelay ) + { + wait( desireddelay - waitedtime ); + return desireddelay; + } + else + return waitedtime; +} + +logteamwinstring( wintype, winner ) +{ + log_string = wintype; + + if ( isdefined( winner ) ) + log_string = log_string + ", win: " + winner; + + foreach ( team in level.teams ) + log_string = log_string + ", " + team + ": " + game["teamScores"][team]; + + logstring( log_string ); +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_globallogic_vehicle.gsc b/ZM/Core/maps/mp/gametypes_zm/_globallogic_vehicle.gsc new file mode 100644 index 0000000..9c72f62 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_globallogic_vehicle.gsc @@ -0,0 +1,381 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_weapons; +#include maps\mp\gametypes_zm\_globallogic_player; +#include maps\mp\gametypes_zm\_damagefeedback; + +callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname ) +{ + self.idflags = idflags; + self.idflagstime = gettime(); + + if ( game["state"] == "postgame" ) + return; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat ) + return; + + if ( !isdefined( vdir ) ) + idflags |= level.idflags_no_knockback; + + friendly = 0; + + if ( isdefined( self.maxhealth ) && self.health == self.maxhealth || !isdefined( self.attackers ) ) + { + self.attackers = []; + self.attackerdata = []; + self.attackerdamage = []; + } + + if ( sweapon == "none" && isdefined( einflictor ) ) + { + if ( isdefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) + sweapon = "explodable_barrel_mp"; + else if ( isdefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) + sweapon = "destructible_car_mp"; + } + + if ( !( idflags & level.idflags_no_protection ) ) + { + if ( self isvehicleimmunetodamage( idflags, smeansofdeath, sweapon ) ) + return; + + if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) + { + + } + else if ( smeansofdeath == "MOD_PROJECTILE" || smeansofdeath == "MOD_GRENADE" ) + { + idamage *= getvehicleprojectilescalar( sweapon ); + idamage = int( idamage ); + + if ( idamage == 0 ) + return; + } + else if ( smeansofdeath == "MOD_GRENADE_SPLASH" ) + { + idamage *= getvehicleunderneathsplashscalar( sweapon ); + idamage = int( idamage ); + + if ( idamage == 0 ) + return; + } + + idamage *= level.vehicledamagescalar; + idamage = int( idamage ); + + if ( isplayer( eattacker ) ) + eattacker.pers["participation"]++; + + prevhealthratio = self.health / self.maxhealth; + + if ( isdefined( self.owner ) && isplayer( self.owner ) ) + team = self.owner.pers["team"]; + + if ( level.teambased && isplayer( eattacker ) && team == eattacker.pers["team"] ) + { + if ( level.friendlyfire == 0 ) + { + if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) + return; + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 1 ); + } + else if ( level.friendlyfire == 1 ) + { + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); + } + else if ( level.friendlyfire == 2 ) + { + if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) + return; + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 1 ); + } + else if ( level.friendlyfire == 3 ) + { + idamage = int( idamage * 0.5 ); + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); + } + + friendly = 1; + } + else + { + if ( !level.teambased && isdefined( self.targetname ) && self.targetname == "rcbomb" ) + { + + } + else if ( isdefined( self.owner ) && isdefined( eattacker ) && self.owner == eattacker ) + return; + + if ( idamage < 1 ) + idamage = 1; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( sweapon ) ) + eattacker thread maps\mp\gametypes_zm\_weapons::checkhit( sweapon ); + + if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isdefined( einflictor.iscooked ) ) + self.wascooked = gettime(); + else + self.wascooked = undefined; + + attacker_seat = undefined; + + if ( isdefined( eattacker ) ) + attacker_seat = self getoccupantseat( eattacker ); + + self.lastdamagewasfromenemy = isdefined( eattacker ) && !isdefined( attacker_seat ); + self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); + + if ( level.gametype == "hack" && sweapon != "emp_grenade_mp" ) + idamage = 0; + } + + if ( isdefined( eattacker ) && eattacker != self ) + { + if ( maps\mp\gametypes_zm\_globallogic_player::dodamagefeedback( sweapon, einflictor ) ) + { + if ( idamage > 0 ) + eattacker thread maps\mp\gametypes_zm\_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor ); + } + } + } +/# + if ( getdvarint( "g_debugDamage" ) ) + println( "actor:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); +#/ + if ( 1 ) + { + lpselfnum = self getentitynumber(); + lpselfteam = ""; + lpattackerteam = ""; + + if ( isplayer( eattacker ) ) + { + lpattacknum = eattacker getentitynumber(); + lpattackguid = eattacker getguid(); + lpattackname = eattacker.name; + lpattackerteam = eattacker.pers["team"]; + } + else + { + lpattacknum = -1; + lpattackguid = ""; + lpattackname = ""; + lpattackerteam = "world"; + } + + logprint( "VD;" + lpselfnum + ";" + lpselfteam + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\\n" ); + } +} + +callback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ) +{ + idamage = 0; + finnerdamage = 0; + fouterdamage = 0; + self.idflags = idflags; + self.idflagstime = gettime(); + + if ( game["state"] == "postgame" ) + return; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat ) + return; + + friendly = 0; + + if ( !( idflags & level.idflags_no_protection ) ) + { + if ( self isvehicleimmunetodamage( idflags, smeansofdeath, sweapon ) ) + return; + + if ( smeansofdeath == "MOD_PROJECTILE_SPLASH" || smeansofdeath == "MOD_GRENADE_SPLASH" || smeansofdeath == "MOD_EXPLOSIVE" ) + { + scalar = getvehicleprojectilesplashscalar( sweapon ); + idamage = int( idamage * scalar ); + finnerdamage *= scalar; + fouterdamage *= scalar; + + if ( finnerdamage == 0 ) + return; + + if ( idamage < 1 ) + idamage = 1; + } + + occupant_team = undefined; + + if ( level.teambased && isplayer( eattacker ) && occupant_team == eattacker.pers["team"] ) + { + if ( level.friendlyfire == 0 ) + { + if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) + return; + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); + } + else if ( level.friendlyfire == 1 ) + { + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); + } + else if ( level.friendlyfire == 2 ) + { + if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) + return; + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); + } + else if ( level.friendlyfire == 3 ) + { + idamage = int( idamage * 0.5 ); + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); + } + + friendly = 1; + } + else + { + if ( idamage < 1 ) + idamage = 1; + + self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); + } + } +} + +vehiclecrush() +{ + self endon( "disconnect" ); + + if ( isdefined( level._effect ) && isdefined( level._effect["tanksquish"] ) ) + playfx( level._effect["tanksquish"], self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ) ); + + self playsound( "chr_crunch" ); +} + +getvehicleprojectilescalar( sweapon ) +{ + if ( sweapon == "satchel_charge_mp" ) + scale = 1; + else if ( sweapon == "sticky_grenade_mp" ) + scale = 1; + else if ( sweapon == "claymore_mp" ) + scale = 1; + else if ( sweapon == "remote_missile_missile_mp" ) + scale = 10.0; + else if ( sweapon == "remote_mortar_missile_mp" ) + scale = 10.0; + else if ( sweapon == "smaw_mp" ) + scale = 0.2; + else if ( sweapon == "fhj18_mp" ) + scale = 0.2; + else if ( issubstr( sweapon, "gl_" ) ) + scale = 1; + else if ( issubstr( sweapon, "turret_mp" ) ) + scale = 1; + else if ( issubstr( sweapon, "grenade" ) ) + scale = 1; + else + scale = 1; + + return scale; +} + +getvehicleprojectilesplashscalar( sweapon ) +{ + if ( sweapon == "satchel_charge_mp" ) + scale = 1; + else if ( sweapon == "sticky_grenade_mp" ) + scale = 1; + else if ( sweapon == "claymore_mp" ) + scale = 1; + else if ( sweapon == "remote_missile_missile_mp" ) + scale = 10.0; + else if ( sweapon == "remote_mortar_missile_mp" ) + scale = 4.0; + else if ( sweapon == "chopper_minigun_mp" ) + scale = 0.5; + else if ( issubstr( sweapon, "gl_" ) ) + scale = 0.5; + else if ( issubstr( sweapon, "turrent_mp" ) ) + scale = 0.1; + else if ( issubstr( sweapon, "grenade" ) ) + scale = 1; + else + scale = 1; + + return scale; +} + +getvehicleunderneathsplashscalar( sweapon ) +{ + if ( sweapon == "satchel_charge_mp" ) + { + scale = 10.0; + scale *= 3.0; + } + else + scale = 1.0; + + return scale; +} + +getvehiclebulletdamage( sweapon ) +{ + if ( issubstr( sweapon, "ptrs41_" ) ) + idamage = 25; + else if ( issubstr( sweapon, "gunner" ) ) + idamage = 5; + else if ( issubstr( sweapon, "mg42_bipod" ) || issubstr( sweapon, "30cal_bipod" ) ) + idamage = 5; + else + idamage = 1; + + return idamage; +} + +allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) +{ + if ( isdefined( self.allowfriendlyfiredamageoverride ) ) + return [[ self.allowfriendlyfiredamageoverride ]]( einflictor, eattacker, smeansofdeath, sweapon ); + + vehicle = eattacker getvehicleoccupied(); + return 0; +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_gv_actions.gsc b/ZM/Core/maps/mp/gametypes_zm/_gv_actions.gsc new file mode 100644 index 0000000..125b60c --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_gv_actions.gsc @@ -0,0 +1,873 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\gametypes_zm\_globallogic; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\gametypes_zm\_globallogic_ui; + +initializeactionarray() +{ + level.gametypeactions = []; + level.gametypeactions["GiveAmmo"] = ::dogiveammo; + level.gametypeactions["RemoveAmmo"] = ::doremoveammo; + level.gametypeactions["PlaySound"] = ::doplaysound; + level.gametypeactions["EnableUAV"] = ::doenableuav; + level.gametypeactions["GiveScore"] = ::dogivescore; + level.gametypeactions["RemoveScore"] = ::doremovescore; + level.gametypeactions["SetHeader"] = ::dosetheader; + level.gametypeactions["SetSubHeader"] = ::dosetsubheader; + level.gametypeactions["DisplayMessage"] = ::dodisplaymessage; + level.gametypeactions["GiveHealth"] = ::dogivehealth; + level.gametypeactions["RemoveHealth"] = ::doremovehealth; + level.gametypeactions["SetHealthRegen"] = ::dosethealthregen; + level.gametypeactions["ChangeClass"] = ::dochangeclass; + level.gametypeactions["ChangeTeam"] = ::dochangeteam; + level.gametypeactions["GivePerk"] = ::dogiveperk; + level.gametypeactions["RemovePerk"] = ::doremoveperk; + level.gametypeactions["GiveInvuln"] = ::dogiveinvuln; + level.gametypeactions["RemoveInvuln"] = ::doremoveinvuln; + level.gametypeactions["SetDamageModifier"] = ::dosetdamagemodifier; + level.gametypeactions["GiveKillstreak"] = ::dogivekillstreak; + level.gametypeactions["RemoveKillstreak"] = ::doremovekillstreak; + level.gametypeactions["GiveLives"] = ::dogivelives; + level.gametypeactions["RemoveLives"] = ::doremovelives; + level.gametypeactions["ScaleMoveSpeed"] = ::doscalemovespeed; + level.gametypeactions["ShowOnRadar"] = ::doshowonradar; + level.conditionals = []; + level.conditionals["Equals"] = ::equals; + level.conditionals["=="] = ::equals; + level.conditionals["!="] = ::notequals; + level.conditionals["<"] = ::lessthan; + level.conditionals["<="] = ::lessthanequals; + level.conditionals[">"] = ::greaterthan; + level.conditionals[">="] = ::greaterthanequals; + level.conditionals["InPlace"] = ::inplace; + level.conditionallefthandside = []; + level.conditionallefthandside["PlayersLeft"] = ::playersleft; + level.conditionallefthandside["RoundsPlayed"] = ::roundsplayed; + level.conditionallefthandside["HitBy"] = ::hitby; + level.conditionallefthandside["PlayersClass"] = ::playersclass; + level.conditionallefthandside["VictimsClass"] = ::playersclass; + level.conditionallefthandside["AttackersClass"] = ::attackersclass; + level.conditionallefthandside["PlayersPlace"] = ::playersplace; + level.conditionallefthandside["VictimsPlace"] = ::playersplace; + level.conditionallefthandside["AttackersPlace"] = ::attackersplace; + level.targets = []; + level.targets["Everyone"] = ::gettargeteveryone; + level.targets["PlayersLeft"] = ::gettargetplayersleft; + level.targets["PlayersEliminated"] = ::gettargetplayerseliminated; + level.targets["PlayersTeam"] = ::gettargetplayersteam; + level.targets["VictimsTeam"] = ::gettargetplayersteam; + level.targets["OtherTeam"] = ::gettargetotherteam; + level.targets["AttackersTeam"] = ::gettargetotherteam; + level.targets["PlayersLeftOnPlayersTeam"] = ::gettargetplayersleftonplayersteam; + level.targets["PlayersLeftOnOtherTeam"] = ::gettargetplayersleftonotherteam; + level.targets["PlayersLeftOnVictimsTeam"] = ::gettargetplayersleftonplayersteam; + level.targets["PlayersLeftOnAttackersTeam"] = ::gettargetplayersleftonotherteam; + level.targets["PlayersEliminatedOnPlayersTeam"] = ::gettargetplayerseliminatedonplayersteam; + level.targets["PlayersEliminatedOnOtherTeam"] = ::gettargetplayerseliminatedonotherteam; + level.targets["PlayersEliminatedOnVictimsTeam"] = ::gettargetplayerseliminatedonplayersteam; + level.targets["PlayersEliminatedOnAttackersTeam"] = ::gettargetplayerseliminatedonotherteam; + level.targets["AssistingPlayers"] = ::getassistingplayers; +} + +equals( param1, param2 ) +{ + return param1 == param2; +} + +notequals( param1, param2 ) +{ + return param1 != param2; +} + +lessthan( param1, param2 ) +{ + return param1 < param2; +} + +lessthanequals( param1, param2 ) +{ + return param1 <= param2; +} + +greaterthan( param1, param2 ) +{ + return param1 > param2; +} + +greaterthanequals( param1, param2 ) +{ + return param1 >= param2; +} + +inplace( param1, param2 ) +{ + if ( param1 == param2 ) + return true; + + if ( param2 == "top3" && param1 == "first" ) + return true; + + return false; +} + +playersleft( rule ) +{ + return 0; +} + +roundsplayed( rule ) +{ + return game["roundsplayed"] + 1; +} + +hitby( rule ) +{ + meansofdeath = rule.target["MeansOfDeath"]; + weapon = rule.target["Weapon"]; + + if ( !isdefined( meansofdeath ) || !isdefined( weapon ) ) + return undefined; + + switch ( weapon ) + { + case "knife_ballistic_mp": + return "knife"; + } + + switch ( meansofdeath ) + { + case "MOD_RIFLE_BULLET": + case "MOD_PISTOL_BULLET": + return "bullet"; + case "MOD_MELEE": + case "MOD_BAYONET": + return "knife"; + case "MOD_HEAD_SHOT": + return "headshot"; + case "MOD_PROJECTILE_SPLASH": + case "MOD_PROJECTILE": + case "MOD_GRENADE_SPLASH": + case "MOD_GRENADE": + case "MOD_EXPLOSIVE": + return "explosive"; + } + + return undefined; +} + +getplayersclass( player ) +{ + return player.pers["class"]; +} + +playersclass( rule ) +{ + player = rule.target["Player"]; + return getplayersclass( player ); +} + +attackersclass( rule ) +{ + player = rule.target["Attacker"]; + return getplayersclass( player ); +} + +getplayersplace( player ) +{ + maps\mp\gametypes_zm\_globallogic::updateplacement(); + + if ( !isdefined( level.placement["all"] ) ) + return; + + for ( place = 0; place < level.placement["all"].size; place++ ) + { + if ( level.placement["all"][place] == player ) + break; + } + + place++; + + if ( place == 1 ) + return "first"; + else if ( place <= 3 ) + return "top3"; + else if ( place == level.placement["all"].size ) + return "last"; + + return "middle"; +} + +playersplace( rule ) +{ + player = rule.target["Player"]; + return getplayersplace( player ); +} + +attackersplace( rule ) +{ + player = rule.target["Attacker"]; + return getplayersplace( player ); +} + +gettargeteveryone( rule ) +{ + return level.players; +} + +gettargetplayersleft( rule ) +{ + return 0; +} + +gettargetplayerseliminated( rule ) +{ + return 0; +} + +gettargetplayersteam( rule ) +{ + player = rule.target["Player"]; + + if ( !isdefined( player ) ) + return []; + + return getplayersonteam( level.players, player.pers["team"] ); +} + +gettargetotherteam( rule ) +{ + player = rule.target["Player"]; + + if ( !isdefined( player ) ) + return []; + + return getplayersonteam( level.players, getotherteam( player.pers["team"] ) ); +} + +gettargetplayersleftonplayersteam( rule ) +{ + return []; +} + +gettargetplayersleftonotherteam( rule ) +{ + return []; +} + +gettargetplayerseliminatedonplayersteam( rule ) +{ + return []; +} + +gettargetplayerseliminatedonotherteam( rule ) +{ + return []; +} + +getassistingplayers( rule ) +{ + assisters = []; + attacker = rule.target["Attacker"]; + + if ( !isdefined( rule.target["Assisters"] ) || !isdefined( attacker ) ) + return assisters; + + for ( j = 0; j < rule.target["Assisters"].size; j++ ) + { + player = rule.target["Assisters"][j]; + + if ( !isdefined( player ) ) + continue; + + if ( player == attacker ) + continue; + + assisters[assisters.size] = player; + } + + return assisters; +} + +executegametypeeventrule( rule ) +{ + if ( !aregametypeeventruleconditionalsmet( rule ) ) + return; + + if ( !isdefined( level.gametypeactions[rule.action] ) ) + { +/# + error( "GAMETYPE VARIANTS - unknown action: " + rule.action + "!" ); +#/ + return; + } + + thread internalexecuterule( rule ); +} + +internalexecuterule( rule ) +{ + +} + +aregametypeeventruleconditionalsmet( rule ) +{ + if ( !isdefined( rule.conditionals ) || rule.conditionals.size == 0 ) + return 1; + + combinedresult = 1; + + if ( rule.conditionaleval == "OR" ) + combinedresult = 0; + + for ( i = 0; i < rule.conditionals.size; i++ ) + { + conditionalresult = evaluategametypeeventruleconditional( rule, rule.conditionals[i] ); + + switch ( rule.conditionaleval ) + { + case "AND": + combinedresult = combinedresult && conditionalresult; + break; + case "OR": + combinedresult = combinedresult || conditionalresult; + break; + } + + if ( rule.conditionaleval == "AND" && !combinedresult ) + break; + + if ( rule.conditionaleval == "OR" && combinedresult ) + break; + } + + return combinedresult; +} + +evaluategametypeeventruleconditional( rule, conditional ) +{ + if ( !isdefined( conditional.lhs ) || !isdefined( conditional.operand ) || !isdefined( conditional.rhs ) ) + return 0; + + if ( !isdefined( level.conditionallefthandside[conditional.lhs] ) ) + return 0; + + lhsvalue = [[ level.conditionallefthandside[conditional.lhs] ]]( rule ); + + if ( !isdefined( lhsvalue ) || !isdefined( level.conditionals[conditional.operand] ) ) + return 0; + + return [[ level.conditionals[conditional.operand] ]]( lhsvalue, conditional.rhs ); +} + +getplayersonteam( players, team ) +{ + playersonteam = []; + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( player.pers["team"] == team ) + playersonteam[playersonteam.size] = player; + } + + return playersonteam; +} + +gettargetsforgametypeeventrule( rule ) +{ + targets = []; + + if ( !isdefined( rule.targetname ) ) + return targets; + + if ( isdefined( rule.target[rule.targetname] ) ) + targets[targets.size] = rule.target[rule.targetname]; + else if ( isdefined( level.targets[rule.targetname] ) ) + targets = [[ level.targets[rule.targetname] ]]( rule ); + + return targets; +} + +doesrulehavevalidparam( rule ) +{ + return isdefined( rule.params ) && isarray( rule.params ) && rule.params.size > 0; +} + +sortplayersbylivesdescending( players ) +{ + if ( !isdefined( players ) ) + return undefined; + + swapped = 1; + + for ( n = players.size; swapped; n-- ) + { + swapped = 0; + + for ( i = 0; i < n - 1; i++ ) + { + if ( players[i].pers["lives"] < players[i + 1].pers["lives"] ) + { + temp = players[i]; + players[i] = players[i + 1]; + players[i + 1] = temp; + swapped = 1; + } + } + } + + return players; +} + +giveammo( players, amount ) +{ + for ( i = 0; i < players.size; i++ ) + { + wait 0.5; + player = players[i]; + currentweapon = player getcurrentweapon(); + clipammo = player getweaponammoclip( currentweapon ); + player setweaponammoclip( currentweapon, clipammo + amount ); + } +} + +dogiveammo( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + targets = gettargetsforgametypeeventrule( rule ); + giveammo( targets, rule.params[0] ); +} + +doremoveammo( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + targets = gettargetsforgametypeeventrule( rule ); + giveammo( targets, 0 - rule.params[0] ); +} + +doplaysound( rule ) +{ + if ( doesrulehavevalidparam( rule ) ) + playsoundonplayers( rule.params[0] ); +} + +doenableuav( rule ) +{ + targets = gettargetsforgametypeeventrule( rule ); + + for ( targetindex = 0; targetindex < targets.size; targetindex++ ) + { + targets[targetindex].pers["hasRadar"] = 1; + targets[targetindex].hasspyplane = 1; + } +} + +givescore( players, amount ) +{ + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + score = maps\mp\gametypes_zm\_globallogic_score::_getplayerscore( player ); + maps\mp\gametypes_zm\_globallogic_score::_setplayerscore( player, score + amount ); + } +} + +dogivescore( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + targets = gettargetsforgametypeeventrule( rule ); + givescore( targets, rule.params[0] ); +} + +doremovescore( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + targets = gettargetsforgametypeeventrule( rule ); + givescore( targets, 0 - rule.params[0] ); +} + +dosetheader( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + targets = gettargetsforgametypeeventrule( rule ); + + for ( targetindex = 0; targetindex < targets.size; targetindex++ ) + { + target = targets[targetindex]; + displaytextonhudelem( target, target.customgametypeheader, rule.params[0], rule.params[1], "gv_header", rule.params[2] ); + } +} + +dosetsubheader( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + targets = gettargetsforgametypeeventrule( rule ); + + for ( targetindex = 0; targetindex < targets.size; targetindex++ ) + { + target = targets[targetindex]; + displaytextonhudelem( target, target.customgametypesubheader, rule.params[0], rule.params[1], "gv_subheader", rule.params[2] ); + } +} + +displaytextonhudelem( target, texthudelem, text, secondstodisplay, notifyname, valueparam ) +{ + texthudelem.alpha = 1; + + if ( isdefined( valueparam ) ) + texthudelem settext( text, valueparam ); + else + texthudelem settext( text ); + + if ( !isdefined( secondstodisplay ) || secondstodisplay <= 0 ) + { + target.doingnotify = 0; + target notify( notifyname ); + return; + } + + target thread fadecustomgametypehudelem( texthudelem, secondstodisplay, notifyname ); +} + +fadecustomgametypehudelem( hudelem, seconds, notifyname ) +{ + self endon( "disconnect" ); + self notify( notifyname ); + self endon( notifyname ); + + if ( seconds <= 0 ) + return; + + self.doingnotify = 1; + wait( seconds ); + + while ( hudelem.alpha > 0 ) + { + hudelem.alpha -= 0.05; + + if ( hudelem.alpha < 0 ) + hudelem.alpha = 0; + + wait 0.05; + } + + self.doingnotify = 0; +} + +dodisplaymessage( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + targets = gettargetsforgametypeeventrule( rule ); + + for ( targetindex = 0; targetindex < targets.size; targetindex++ ) + thread announcemessage( targets[targetindex], rule.params[0], 2.0 ); +} + +announcemessage( target, messagetext, time ) +{ + target endon( "disconnect" ); + clientannouncement( target, messagetext, int( time * 1000 ) ); + + if ( time == 0 ) + time = getdvarfloat( _hash_E8C4FC20 ); + + target.doingnotify = 1; + wait( time ); + target.doingnotify = 0; +} + +givehealth( players, amount ) +{ + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + player.health += amount; + } +} + +dogivehealth( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + givehealth( gettargetsforgametypeeventrule( rule ), rule.params[0] ); +} + +doremovehealth( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + givehealth( gettargetsforgametypeeventrule( rule ), 0 - rule.params[0] ); +} + +dosethealthregen( rule ) +{ + targets = gettargetsforgametypeeventrule( rule ); + + for ( targetindex = 0; targetindex < targets.size; targetindex++ ) + { + player = targets[targetindex]; + player.regenrate = rule.params[0]; + } +} + +dochangeclass( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; +} + +dochangeteam( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + team = rule.params[0]; + teamkeys = getarraykeys( level.teams ); + targets = gettargetsforgametypeeventrule( rule ); + + for ( targetindex = 0; targetindex < targets.size; targetindex++ ) + { + target = targets[targetindex]; + + if ( target.pers["team"] == team ) + continue; + + if ( team == "toggle" ) + { + team = teamkeys[randomint( teamkeys.size )]; + + for ( teamindex = 0; teamindex < teamkeys.size; teamindex++ ) + { + if ( target.pers["team"] == teamkeys[teamindex] ) + { + team = teamkeys[( teamindex + 1 ) % teamkeys.size]; + break; + } + } + } + + target.pers["team"] = team; + target.team = team; + + if ( level.teambased ) + target.sessionteam = team; + else + target.sessionteam = "none"; + + target notify( "joined_team" ); + level notify( "joined_team" ); + } +} + +displayperk( player, imagename ) +{ + index = 0; + + if ( isdefined( player.perkicon ) ) + { + index = -1; + + for ( i = 0; i < player.perkicon.size; i++ ) + { + if ( player.perkicon[i].alpha == 0 ) + { + index = i; + break; + } + } + + if ( index == -1 ) + return; + } + + player maps\mp\gametypes_zm\_hud_util::showperk( index, imagename, 10 ); + player thread maps\mp\gametypes_zm\_globallogic_ui::hideloadoutaftertime( 3.0 ); + player thread maps\mp\gametypes_zm\_globallogic_ui::hideloadoutondeath(); +} + +setorunsetperk( players, perks, shouldset ) +{ + if ( level.perksenabled == 0 ) + return; + + if ( perks.size < 2 ) + return; + + hasperkalready = 0; + imagename = perks[perks.size - 1]; + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + for ( perkindex = 0; perkindex < perks.size - 1; perkindex++ ) + { + perk = perks[perkindex]; + + if ( player hasperk( perk ) ) + hasperkalready = 1; + + if ( shouldset ) + { + player setperk( perk ); + continue; + } + + player unsetperk( perk ); + } + + if ( shouldset && !hasperkalready && getdvarint( "scr_showperksonspawn" ) == 1 ) + displayperk( player, imagename ); + } +} + +dogiveperk( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + setorunsetperk( gettargetsforgametypeeventrule( rule ), rule.params, 1 ); +} + +doremoveperk( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + setorunsetperk( gettargetsforgametypeeventrule( rule ), rule.params, 0 ); +} + +giveorremovekillstreak( rule, shouldgive ) +{ + +} + +dogivekillstreak( rule ) +{ + giveorremovekillstreak( rule, 1 ); +} + +doremovekillstreak( rule ) +{ + giveorremovekillstreak( rule, 0 ); +} + +givelives( players, amount ) +{ + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + player.pers["lives"] += amount; + + if ( player.pers["lives"] < 0 ) + player.pers["lives"] = 0; + } +} + +dogivelives( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + givelives( gettargetsforgametypeeventrule( rule ), rule.params[0] ); +} + +doremovelives( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + givelives( gettargetsforgametypeeventrule( rule ), 0 - rule.params[0] ); +} + +giveorremoveinvuln( players, shouldgiveinvuln ) +{ + for ( i = 0; i < players.size; i++ ) + player = players[i]; +} + +dogiveinvuln( rule ) +{ + giveorremoveinvuln( gettargetsforgametypeeventrule( rule ), 1 ); +} + +doremoveinvuln( rule ) +{ + giveorremoveinvuln( gettargetsforgametypeeventrule( rule ), 0 ); +} + +dosetdamagemodifier( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + players = gettargetsforgametypeeventrule( rule ); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + player.damagemodifier = rule.params[0]; + } +} + +doscalemovespeed( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + movespeedscale = rule.params[0]; + targets = gettargetsforgametypeeventrule( rule ); + + for ( targetindex = 0; targetindex < targets.size; targetindex++ ) + { + target = targets[targetindex]; + target.movementspeedmodifier = movespeedscale * target getmovespeedscale(); + + if ( target.movementspeedmodifier < 0.1 ) + target.movementspeedmodifier = 0.1; + else if ( target.movementspeedmodifier > 4.0 ) + target.movementspeedmodifier = 4.0; + + target setmovespeedscale( target.movementspeedmodifier ); + } +} + +doshowonradar( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + targets = gettargetsforgametypeeventrule( rule ); + + for ( targetindex = 0; targetindex < targets.size; targetindex++ ) + { + if ( rule.params[0] == "enable" ) + { + targets[targetindex] setperk( "specialty_showonradar" ); + continue; + } + + targets[targetindex] unsetperk( "specialty_showonradar" ); + } +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_healthoverlay.gsc b/ZM/Core/maps/mp/gametypes_zm/_healthoverlay.gsc new file mode 100644 index 0000000..e3c164f --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_healthoverlay.gsc @@ -0,0 +1,278 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\gametypes_zm\_globallogic_player; + +init() +{ + precacheshader( "overlay_low_health" ); + level.healthoverlaycutoff = 0.55; + regentime = level.playerhealthregentime; + level.playerhealth_regularregendelay = regentime * 1000; + level.healthregendisabled = level.playerhealth_regularregendelay <= 0; + level thread onplayerconnect(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread onplayerspawned(); + player thread onplayerkilled(); + player thread onjoinedteam(); + player thread onjoinedspectators(); + player thread onplayerdisconnect(); + } +} + +onjoinedteam() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "joined_team" ); + + self notify( "end_healthregen" ); + } +} + +onjoinedspectators() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "joined_spectators" ); + + self notify( "end_healthregen" ); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread playerhealthregen(); + } +} + +onplayerkilled() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "killed_player" ); + + self notify( "end_healthregen" ); + } +} + +onplayerdisconnect() +{ + self waittill( "disconnect" ); + + self notify( "end_healthregen" ); +} + +playerhealthregen() +{ + self endon( "end_healthregen" ); + + if ( self.health <= 0 ) + { + assert( !isalive( self ) ); + return; + } + + maxhealth = self.health; + oldhealth = maxhealth; + player = self; + health_add = 0; + regenrate = 0.1; + usetrueregen = 0; + veryhurt = 0; + player.breathingstoptime = -10000; + thread playerbreathingsound( maxhealth * 0.35 ); + thread playerheartbeatsound( maxhealth * 0.35 ); + lastsoundtime_recover = 0; + hurttime = 0; + newhealth = 0; + + for (;;) + { + wait 0.05; + + if ( isdefined( player.regenrate ) ) + { + regenrate = player.regenrate; + usetrueregen = 1; + } + + if ( player.health == maxhealth ) + { + veryhurt = 0; + self.atbrinkofdeath = 0; + continue; + } + + if ( player.health <= 0 ) + return; + + if ( isdefined( player.laststand ) && player.laststand ) + continue; + + wasveryhurt = veryhurt; + ratio = player.health / maxhealth; + + if ( ratio <= level.healthoverlaycutoff ) + { + veryhurt = 1; + self.atbrinkofdeath = 1; + + if ( !wasveryhurt ) + hurttime = gettime(); + } + + if ( player.health >= oldhealth ) + { + regentime = level.playerhealth_regularregendelay; + + if ( player hasperk( "specialty_healthregen" ) ) + regentime = int( regentime / getdvarfloat( "perk_healthRegenMultiplier" ) ); + + if ( gettime() - hurttime < regentime ) + continue; + + if ( level.healthregendisabled ) + continue; + + if ( gettime() - lastsoundtime_recover > regentime ) + { + lastsoundtime_recover = gettime(); + self notify( "snd_breathing_better" ); + } + + if ( veryhurt ) + { + newhealth = ratio; + veryhurttime = 3000; + + if ( player hasperk( "specialty_healthregen" ) ) + veryhurttime = int( veryhurttime / getdvarfloat( "perk_healthRegenMultiplier" ) ); + + if ( gettime() > hurttime + veryhurttime ) + newhealth += regenrate; + } + else if ( usetrueregen ) + newhealth = ratio + regenrate; + else + newhealth = 1; + + if ( newhealth >= 1.0 ) + { + self maps\mp\gametypes_zm\_globallogic_player::resetattackerlist(); + newhealth = 1.0; + } + + if ( newhealth <= 0 ) + return; + + player setnormalhealth( newhealth ); + change = player.health - oldhealth; + + if ( change > 0 ) + player decayplayerdamages( change ); + + oldhealth = player.health; + continue; + } + + oldhealth = player.health; + health_add = 0; + hurttime = gettime(); + player.breathingstoptime = hurttime + 6000; + } +} + +decayplayerdamages( decay ) +{ + if ( !isdefined( self.attackerdamage ) ) + return; + + for ( i = 0; i < self.attackerdamage.size; i++ ) + { + if ( !isdefined( self.attackerdamage[i] ) || !isdefined( self.attackerdamage[i].damage ) ) + continue; + + self.attackerdamage[i].damage -= decay; + + if ( self.attackerdamage[i].damage < 0 ) + self.attackerdamage[i].damage = 0; + } +} + +playerbreathingsound( healthcap ) +{ + self endon( "end_healthregen" ); + wait 2; + player = self; + + for (;;) + { + wait 0.2; + + if ( player.health <= 0 ) + return; + + if ( player.health >= healthcap ) + continue; + + if ( level.healthregendisabled && gettime() > player.breathingstoptime ) + continue; + + player notify( "snd_breathing_hurt" ); + wait 0.784; + wait( 0.1 + randomfloat( 0.8 ) ); + } +} + +playerheartbeatsound( healthcap ) +{ + self endon( "end_healthregen" ); + self.hearbeatwait = 0.2; + wait 2; + player = self; + + for (;;) + { + wait 0.2; + + if ( player.health <= 0 ) + return; + + if ( player.health >= healthcap ) + { + self.hearbeatwait = 0.3; + continue; + } + + if ( level.healthregendisabled && gettime() > player.breathingstoptime ) + { + self.hearbeatwait = 0.3; + continue; + } + + player playlocalsound( "mpl_player_heartbeat" ); + wait( self.hearbeatwait ); + + if ( self.hearbeatwait <= 0.6 ) + self.hearbeatwait += 0.1; + } +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_hostmigration.gsc b/ZM/Core/maps/mp/gametypes_zm/_hostmigration.gsc new file mode 100644 index 0000000..bfbf85b --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_hostmigration.gsc @@ -0,0 +1,518 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_hud; +#include maps\mp\zombies\_zm; + +debug_script_structs() +{ +/# + if ( isdefined( level.struct ) ) + { + println( "*** Num structs " + level.struct.size ); + println( "" ); + + for ( i = 0; i < level.struct.size; i++ ) + { + struct = level.struct[i]; + + if ( isdefined( struct.targetname ) ) + { + println( "---" + i + " : " + struct.targetname ); + continue; + } + + println( "---" + i + " : " + "NONE" ); + } + } + else + println( "*** No structs defined." ); +#/ +} + +updatetimerpausedness() +{ + shouldbestopped = isdefined( level.hostmigrationtimer ); + + if ( !level.timerstopped && shouldbestopped ) + { + level.timerstopped = 1; + level.timerpausetime = gettime(); + } + else if ( level.timerstopped && !shouldbestopped ) + { + level.timerstopped = 0; + level.discardtime += gettime() - level.timerpausetime; + } +} + +callback_hostmigrationsave() +{ + +} + +callback_prehostmigrationsave() +{ + undo_link_changes(); + disablezombies( 1 ); + + if ( is_true( level._hm_should_pause_spawning ) ) + flag_set( "spawn_zombies" ); + + for ( i = 0; i < level.players.size; i++ ) + level.players[i] enableinvulnerability(); +} + +pausetimer() +{ + level.migrationtimerpausetime = gettime(); +} + +resumetimer() +{ + level.discardtime += gettime() - level.migrationtimerpausetime; +} + +locktimer() +{ + level endon( "host_migration_begin" ); + level endon( "host_migration_end" ); + + for (;;) + { + currtime = gettime(); + wait 0.05; + + if ( !level.timerstopped && isdefined( level.discardtime ) ) + level.discardtime += gettime() - currtime; + } +} + +callback_hostmigration() +{ + redo_link_changes(); + setslowmotion( 1, 1, 0 ); + makedvarserverinfo( "ui_guncycle", 0 ); + level.hostmigrationreturnedplayercount = 0; + + if ( level.gameended ) + { +/# + println( "Migration starting at time " + gettime() + ", but game has ended, so no countdown." ); +#/ + return; + } + + sethostmigrationstatus( 1 ); + level notify( "host_migration_begin" ); + + for ( i = 0; i < level.players.size; i++ ) + { + if ( isdefined( level.hostmigration_link_entity_callback ) ) + { + if ( !isdefined( level.players[i]._host_migration_link_entity ) ) + level.players[i]._host_migration_link_entity = level.players[i] [[ level.hostmigration_link_entity_callback ]](); + } + + level.players[i] thread hostmigrationtimerthink(); + } + + if ( isdefined( level.hostmigration_ai_link_entity_callback ) ) + { + zombies = getaiarray( level.zombie_team ); + + if ( isdefined( zombies ) && zombies.size > 0 ) + { + foreach ( zombie in zombies ) + { + if ( !isdefined( zombie._host_migration_link_entity ) ) + zombie._host_migration_link_entity = zombie [[ level.hostmigration_ai_link_entity_callback ]](); + } + } + } + + if ( level.inprematchperiod ) + level waittill( "prematch_over" ); +/# + println( "Migration starting at time " + gettime() ); +#/ + level.hostmigrationtimer = 1; + thread locktimer(); + zombies = getaiarray( level.zombie_team ); + + if ( isdefined( zombies ) && zombies.size > 0 ) + { + foreach ( zombie in zombies ) + { + if ( isdefined( zombie._host_migration_link_entity ) ) + { + ent = spawn( "script_origin", zombie.origin ); + ent.angles = zombie.angles; + zombie linkto( ent ); + ent linkto( zombie._host_migration_link_entity, "tag_origin", zombie._host_migration_link_entity worldtolocalcoords( ent.origin ), ent.angles + zombie._host_migration_link_entity.angles ); + zombie._host_migration_link_helper = ent; + zombie linkto( zombie._host_migration_link_helper ); + } + } + } + + level endon( "host_migration_begin" ); + level._hm_should_pause_spawning = flag( "spawn_zombies" ); + + if ( level._hm_should_pause_spawning ) + flag_clear( "spawn_zombies" ); + + hostmigrationwait(); + + foreach ( player in level.players ) + player thread post_migration_become_vulnerable(); + + zombies = getaiarray( level.zombie_team ); + + if ( isdefined( zombies ) && zombies.size > 0 ) + { + foreach ( zombie in zombies ) + { + if ( isdefined( zombie._host_migration_link_entity ) ) + { + zombie unlink(); + zombie._host_migration_link_helper delete(); + zombie._host_migration_link_helper = undefined; + zombie._host_migration_link_entity = undefined; + } + } + } + + enablezombies( 1 ); + + if ( level._hm_should_pause_spawning ) + flag_set( "spawn_zombies" ); + + level.hostmigrationtimer = undefined; + level._hm_should_pause_spawning = undefined; + sethostmigrationstatus( 0 ); +/# + println( "Migration finished at time " + gettime() ); +#/ + level notify( "host_migration_end" ); +} + +post_migration_become_vulnerable() +{ + self endon( "disconnect" ); + wait 3; + self disableinvulnerability(); +} + +matchstarttimerconsole_internal( counttime, matchstarttimer ) +{ + waittillframeend; + level endon( "match_start_timer_beginning" ); + + while ( counttime > 0 && !level.gameended ) + { + matchstarttimer thread maps\mp\gametypes_zm\_hud::fontpulse( level ); + wait( matchstarttimer.inframes * 0.05 ); + matchstarttimer setvalue( counttime ); + counttime--; + wait( 1 - matchstarttimer.inframes * 0.05 ); + } +} + +matchstarttimerconsole( type, duration ) +{ + level notify( "match_start_timer_beginning" ); + wait 0.05; + matchstarttext = createserverfontstring( "objective", 1.5 ); + matchstarttext setpoint( "CENTER", "CENTER", 0, -40 ); + matchstarttext.sort = 1001; + matchstarttext settext( game["strings"]["waiting_for_teams"] ); + matchstarttext.foreground = 0; + matchstarttext.hidewheninmenu = 1; + matchstarttext settext( game["strings"][type] ); + matchstarttimer = createserverfontstring( "objective", 2.2 ); + matchstarttimer setpoint( "CENTER", "CENTER", 0, 0 ); + matchstarttimer.sort = 1001; + matchstarttimer.color = ( 1, 1, 0 ); + matchstarttimer.foreground = 0; + matchstarttimer.hidewheninmenu = 1; + matchstarttimer maps\mp\gametypes_zm\_hud::fontpulseinit(); + counttime = int( duration ); + + if ( counttime >= 2 ) + matchstarttimerconsole_internal( counttime, matchstarttimer ); + else + { + + } + + matchstarttimer destroyelem(); + matchstarttext destroyelem(); +} + +hostmigrationwait() +{ + level endon( "game_ended" ); + + if ( level.hostmigrationreturnedplayercount < level.players.size * 2 / 3 ) + { + thread matchstarttimerconsole( "waiting_for_teams", 20.0 ); + hostmigrationwaitforplayers(); + } + + thread matchstarttimerconsole( "match_starting_in", 5.0 ); + wait 5; +} + +hostmigrationwaitforplayers() +{ + level endon( "hostmigration_enoughplayers" ); + wait 15; +} + +hostmigrationtimerthink_internal() +{ + level endon( "host_migration_begin" ); + level endon( "host_migration_end" ); + self.hostmigrationcontrolsfrozen = 0; + + while ( !isalive( self ) ) + self waittill( "spawned" ); + + if ( isdefined( self._host_migration_link_entity ) ) + { + ent = spawn( "script_origin", self.origin ); + ent.angles = self.angles; + self linkto( ent ); + ent linkto( self._host_migration_link_entity, "tag_origin", self._host_migration_link_entity worldtolocalcoords( ent.origin ), ent.angles + self._host_migration_link_entity.angles ); + self._host_migration_link_helper = ent; +/# + println( "Linking player to ent " + self._host_migration_link_entity.targetname ); +#/ + } + + self.hostmigrationcontrolsfrozen = 1; + self freezecontrols( 1 ); + + level waittill( "host_migration_end" ); +} + +hostmigrationtimerthink() +{ + self endon( "disconnect" ); + level endon( "host_migration_begin" ); + hostmigrationtimerthink_internal(); + + if ( self.hostmigrationcontrolsfrozen ) + { + self freezecontrols( 0 ); + self.hostmigrationcontrolsfrozen = 0; +/# + println( " Host migration unfreeze controls" ); +#/ + } + + if ( isdefined( self._host_migration_link_entity ) ) + { + self unlink(); + self._host_migration_link_helper delete(); + self._host_migration_link_helper = undefined; + + if ( isdefined( self._host_migration_link_entity._post_host_migration_thread ) ) + self thread [[ self._host_migration_link_entity._post_host_migration_thread ]]( self._host_migration_link_entity ); + + self._host_migration_link_entity = undefined; + } +} + +waittillhostmigrationdone() +{ + if ( !isdefined( level.hostmigrationtimer ) ) + return 0; + + starttime = gettime(); + + level waittill( "host_migration_end" ); + + return gettime() - starttime; +} + +waittillhostmigrationstarts( duration ) +{ + if ( isdefined( level.hostmigrationtimer ) ) + return; + + level endon( "host_migration_begin" ); + wait( duration ); +} + +waitlongdurationwithhostmigrationpause( duration ) +{ + if ( duration == 0 ) + return; + + assert( duration > 0 ); + starttime = gettime(); + endtime = gettime() + duration * 1000; + + while ( gettime() < endtime ) + { + waittillhostmigrationstarts( ( endtime - gettime() ) / 1000 ); + + if ( isdefined( level.hostmigrationtimer ) ) + { + timepassed = waittillhostmigrationdone(); + endtime += timepassed; + } + } + + if ( gettime() != endtime ) + { +/# + println( "SCRIPT WARNING: gettime() = " + gettime() + " NOT EQUAL TO endtime = " + endtime ); +#/ + } + + waittillhostmigrationdone(); + return gettime() - starttime; +} + +waitlongdurationwithgameendtimeupdate( duration ) +{ + if ( duration == 0 ) + return; + + assert( duration > 0 ); + starttime = gettime(); + endtime = gettime() + duration * 1000; + + while ( gettime() < endtime ) + { + waittillhostmigrationstarts( ( endtime - gettime() ) / 1000 ); + + while ( isdefined( level.hostmigrationtimer ) ) + { + endtime += 1000; + setgameendtime( int( endtime ) ); + wait 1; + } + } +/# + if ( gettime() != endtime ) + println( "SCRIPT WARNING: gettime() = " + gettime() + " NOT EQUAL TO endtime = " + endtime ); +#/ + while ( isdefined( level.hostmigrationtimer ) ) + { + endtime += 1000; + setgameendtime( int( endtime ) ); + wait 1; + } + + return gettime() - starttime; +} + +find_alternate_player_place( v_origin, min_radius, max_radius, max_height, ignore_targetted_nodes ) +{ + found_node = undefined; + a_nodes = getnodesinradiussorted( v_origin, max_radius, min_radius, max_height, "pathnodes" ); + + if ( isdefined( a_nodes ) && a_nodes.size > 0 ) + { + a_player_volumes = getentarray( "player_volume", "script_noteworthy" ); + index = a_nodes.size - 1; + + for ( i = index; i >= 0; i-- ) + { + n_node = a_nodes[i]; + + if ( ignore_targetted_nodes == 1 ) + { + if ( isdefined( n_node.target ) ) + continue; + } + + if ( !positionwouldtelefrag( n_node.origin ) ) + { + if ( maps\mp\zombies\_zm_utility::check_point_in_enabled_zone( n_node.origin, 1, a_player_volumes ) ) + { + v_start = ( n_node.origin[0], n_node.origin[1], n_node.origin[2] + 30 ); + v_end = ( n_node.origin[0], n_node.origin[1], n_node.origin[2] - 30 ); + trace = bullettrace( v_start, v_end, 0, undefined ); + + if ( trace["fraction"] < 1 ) + { + override_abort = 0; + + if ( isdefined( level._chugabud_reject_node_override_func ) ) + override_abort = [[ level._chugabud_reject_node_override_func ]]( v_origin, n_node ); + + if ( !override_abort ) + { + found_node = n_node; + break; + } + } + } + } + } + } + + return found_node; +} + +hostmigration_put_player_in_better_place() +{ + spawnpoint = undefined; + spawnpoint = find_alternate_player_place( self.origin, 50, 150, 64, 1 ); + + if ( !isdefined( spawnpoint ) ) + spawnpoint = find_alternate_player_place( self.origin, 150, 400, 64, 1 ); + + if ( !isdefined( spawnpoint ) ) + spawnpoint = find_alternate_player_place( self.origin, 50, 400, 256, 0 ); + + if ( !isdefined( spawnpoint ) ) + spawnpoint = maps\mp\zombies\_zm::check_for_valid_spawn_near_team( self, 1 ); + + if ( !isdefined( spawnpoint ) ) + { + match_string = ""; + location = level.scr_zm_map_start_location; + + if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) ) + location = level.default_start_location; + + match_string = level.scr_zm_ui_gametype + "_" + location; + spawnpoints = []; + structs = getstructarray( "initial_spawn", "script_noteworthy" ); + + if ( isdefined( structs ) ) + { + foreach ( struct in structs ) + { + if ( isdefined( struct.script_string ) ) + { + tokens = strtok( struct.script_string, " " ); + + foreach ( token in tokens ) + { + if ( token == match_string ) + spawnpoints[spawnpoints.size] = struct; + } + } + } + } + + if ( !isdefined( spawnpoints ) || spawnpoints.size == 0 ) + spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); + + assert( isdefined( spawnpoints ), "Could not find initial spawn points!" ); + spawnpoint = maps\mp\zombies\_zm::getfreespawnpoint( spawnpoints, self ); + } + + if ( isdefined( spawnpoint ) ) + self setorigin( spawnpoint.origin ); +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_hud.gsc b/ZM/Core/maps/mp/gametypes_zm/_hud.gsc new file mode 100644 index 0000000..c5a28b7 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_hud.gsc @@ -0,0 +1,157 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +init() +{ + precacheshader( "progress_bar_bg" ); + precacheshader( "progress_bar_fg" ); + precacheshader( "progress_bar_fill" ); + precacheshader( "score_bar_bg" ); + level.uiparent = spawnstruct(); + level.uiparent.horzalign = "left"; + level.uiparent.vertalign = "top"; + level.uiparent.alignx = "left"; + level.uiparent.aligny = "top"; + level.uiparent.x = 0; + level.uiparent.y = 0; + level.uiparent.width = 0; + level.uiparent.height = 0; + level.uiparent.children = []; + level.fontheight = 12; + + foreach ( team in level.teams ) + level.hud[team] = spawnstruct(); + + level.primaryprogressbary = -61; + level.primaryprogressbarx = 0; + level.primaryprogressbarheight = 9; + level.primaryprogressbarwidth = 120; + level.primaryprogressbartexty = -75; + level.primaryprogressbartextx = 0; + level.primaryprogressbarfontsize = 1.4; + level.primaryprogressbarx_ss = 20; + level.primaryprogressbartextx_ss = 20; + level.primaryprogressbary_ss = 30; + level.primaryprogressbartexty_ss = 33; + level.primaryprogressbarheight_ss = 2; + level.secondaryprogressbary = -85; + level.secondaryprogressbarx = 0; + level.secondaryprogressbarheight = 9; + level.secondaryprogressbarwidth = 120; + level.secondaryprogressbartexty = -100; + level.secondaryprogressbartextx = 0; + level.secondaryprogressbarfontsize = 1.4; + level.secondaryprogressbarx_ss = 20; + level.secondaryprogressbartextx_ss = 20; + level.secondaryprogressbary_ss = 15; + level.secondaryprogressbartexty_ss = 0; + level.secondaryprogressbarheight_ss = 2; + level.teamprogressbary = 32; + level.teamprogressbarheight = 14; + level.teamprogressbarwidth = 192; + level.teamprogressbartexty = 8; + level.teamprogressbarfontsize = 1.65; + setdvar( "ui_generic_status_bar", 0 ); + level.lowertextyalign = "BOTTOM"; + level.lowertexty = -42; + level.lowertextfontsize = 1.4; + level.lowertextyalign_ss = "CENTER"; + level.lowertexty_ss = 40; + level.lowertextfontsize_ss = 1.4; +} + +fontpulseinit() +{ + self.basefontscale = self.fontscale; + self.maxfontscale = self.fontscale * 2; + self.inframes = 1.5; + self.outframes = 3; +} + +fontpulse( player ) +{ + self notify( "fontPulse" ); + self endon( "fontPulse" ); + self endon( "death" ); + player endon( "disconnect" ); + player endon( "joined_team" ); + player endon( "joined_spectators" ); + + if ( self.outframes == 0 ) + self.fontscale = 0.01; + else + self.fontscale = self.fontscale; + + if ( self.inframes > 0 ) + { + self changefontscaleovertime( self.inframes * 0.05 ); + self.fontscale = self.maxfontscale; + wait( self.inframes * 0.05 ); + } + else + { + self.fontscale = self.maxfontscale; + self.alpha = 0; + self fadeovertime( self.outframes * 0.05 ); + self.alpha = 1; + } + + if ( self.outframes > 0 ) + { + self changefontscaleovertime( self.outframes * 0.05 ); + self.fontscale = self.basefontscale; + } +} + +fadetoblackforxsec( startwait, blackscreenwait, fadeintime, fadeouttime, shadername, n_sort = 50 ) +{ + wait( startwait ); + + if ( !isdefined( self ) ) + return; + + if ( !isdefined( self.blackscreen ) ) + self.blackscreen = newclienthudelem( self ); + + self.blackscreen.x = 0; + self.blackscreen.y = 0; + self.blackscreen.horzalign = "fullscreen"; + self.blackscreen.vertalign = "fullscreen"; + self.blackscreen.foreground = 0; + self.blackscreen.hidewhendead = 0; + self.blackscreen.hidewheninmenu = 1; + self.blackscreen.sort = n_sort; + + if ( isdefined( shadername ) ) + self.blackscreen setshader( shadername, 640, 480 ); + else + self.blackscreen setshader( "black", 640, 480 ); + + self.blackscreen.alpha = 0; + + if ( fadeintime > 0 ) + self.blackscreen fadeovertime( fadeintime ); + + self.blackscreen.alpha = 1; + wait( fadeintime ); + + if ( !isdefined( self.blackscreen ) ) + return; + + wait( blackscreenwait ); + + if ( !isdefined( self.blackscreen ) ) + return; + + if ( fadeouttime > 0 ) + self.blackscreen fadeovertime( fadeouttime ); + + self.blackscreen.alpha = 0; + wait( fadeouttime ); + + if ( isdefined( self.blackscreen ) ) + { + self.blackscreen destroy(); + self.blackscreen = undefined; + } +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_hud_message.gsc b/ZM/Core/maps/mp/gametypes_zm/_hud_message.gsc new file mode 100644 index 0000000..255f6ba --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_hud_message.gsc @@ -0,0 +1,1253 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\gametypes_zm\_hud_message; +#include maps\mp\_music; +#include maps\mp\gametypes_zm\_globallogic_audio; +#include maps\mp\_utility; + +init() +{ + precachestring( &"MENU_POINTS" ); + precachestring( &"MP_FIRSTPLACE_NAME" ); + precachestring( &"MP_SECONDPLACE_NAME" ); + precachestring( &"MP_THIRDPLACE_NAME" ); + precachestring( &"MP_WAGER_PLACE_NAME" ); + precachestring( &"MP_MATCH_BONUS_IS" ); + precachestring( &"MP_CODPOINTS_MATCH_BONUS_IS" ); + precachestring( &"MP_WAGER_WINNINGS_ARE" ); + precachestring( &"MP_WAGER_SIDEBET_WINNINGS_ARE" ); + precachestring( &"MP_WAGER_IN_THE_MONEY" ); + precachestring( &"faction_popup" ); + game["strings"]["draw"] = &"MP_DRAW_CAPS"; + game["strings"]["round_draw"] = &"MP_ROUND_DRAW_CAPS"; + game["strings"]["round_win"] = &"MP_ROUND_WIN_CAPS"; + game["strings"]["round_loss"] = &"MP_ROUND_LOSS_CAPS"; + game["strings"]["victory"] = &"MP_VICTORY_CAPS"; + game["strings"]["defeat"] = &"MP_DEFEAT_CAPS"; + game["strings"]["game_over"] = &"MP_GAME_OVER_CAPS"; + game["strings"]["halftime"] = &"MP_HALFTIME_CAPS"; + game["strings"]["overtime"] = &"MP_OVERTIME_CAPS"; + game["strings"]["roundend"] = &"MP_ROUNDEND_CAPS"; + game["strings"]["intermission"] = &"MP_INTERMISSION_CAPS"; + game["strings"]["side_switch"] = &"MP_SWITCHING_SIDES_CAPS"; + game["strings"]["match_bonus"] = &"MP_MATCH_BONUS_IS"; + game["strings"]["codpoints_match_bonus"] = &"MP_CODPOINTS_MATCH_BONUS_IS"; + game["strings"]["wager_winnings"] = &"MP_WAGER_WINNINGS_ARE"; + game["strings"]["wager_sidebet_winnings"] = &"MP_WAGER_SIDEBET_WINNINGS_ARE"; + game["strings"]["wager_inthemoney"] = &"MP_WAGER_IN_THE_MONEY_CAPS"; + game["strings"]["wager_loss"] = &"MP_WAGER_LOSS_CAPS"; + game["strings"]["wager_topwinners"] = &"MP_WAGER_TOPWINNERS"; + game["menu_endgameupdate"] = "endgameupdate"; + precachemenu( game["menu_endgameupdate"] ); + level thread onplayerconnect(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread hintmessagedeaththink(); + player thread lowermessagethink(); + player thread initnotifymessage(); + player thread initcustomgametypeheader(); + } +} + +initcustomgametypeheader() +{ + font = "default"; + titlesize = 2.5; + self.customgametypeheader = createfontstring( font, titlesize ); + self.customgametypeheader setpoint( "TOP", undefined, 0, 30 ); + self.customgametypeheader.glowalpha = 1; + self.customgametypeheader.hidewheninmenu = 1; + self.customgametypeheader.archived = 0; + self.customgametypeheader.color = ( 1, 1, 0.6 ); + self.customgametypeheader.alpha = 1; + titlesize = 2.0; + self.customgametypesubheader = createfontstring( font, titlesize ); + self.customgametypesubheader setparent( self.customgametypeheader ); + self.customgametypesubheader setpoint( "TOP", "BOTTOM", 0, 0 ); + self.customgametypesubheader.glowalpha = 1; + self.customgametypesubheader.hidewheninmenu = 1; + self.customgametypesubheader.archived = 0; + self.customgametypesubheader.color = ( 1, 1, 0.6 ); + self.customgametypesubheader.alpha = 1; +} + +hintmessage( hinttext, duration ) +{ + notifydata = spawnstruct(); + notifydata.notifytext = hinttext; + notifydata.duration = duration; + notifymessage( notifydata ); +} + +hintmessageplayers( players, hinttext, duration ) +{ + notifydata = spawnstruct(); + notifydata.notifytext = hinttext; + notifydata.duration = duration; + + for ( i = 0; i < players.size; i++ ) + players[i] notifymessage( notifydata ); +} + +showinitialfactionpopup( team ) +{ + self luinotifyevent( &"faction_popup", 1, game["strings"][team + "_name"] ); + maps\mp\gametypes_zm\_hud_message::oldnotifymessage( undefined, undefined, undefined, undefined ); +} + +initnotifymessage() +{ + if ( !sessionmodeiszombiesgame() ) + { + if ( self issplitscreen() ) + { + titlesize = 2.0; + textsize = 1.4; + iconsize = 24; + font = "extrabig"; + point = "TOP"; + relativepoint = "BOTTOM"; + yoffset = 30; + xoffset = 30; + } + else + { + titlesize = 2.5; + textsize = 1.75; + iconsize = 30; + font = "extrabig"; + point = "TOP"; + relativepoint = "BOTTOM"; + yoffset = 0; + xoffset = 0; + } + } + else if ( self issplitscreen() ) + { + titlesize = 2.0; + textsize = 1.4; + iconsize = 24; + font = "extrabig"; + point = "TOP"; + relativepoint = "BOTTOM"; + yoffset = 30; + xoffset = 30; + } + else + { + titlesize = 2.5; + textsize = 1.75; + iconsize = 30; + font = "extrabig"; + point = "BOTTOM LEFT"; + relativepoint = "TOP"; + yoffset = 0; + xoffset = 0; + } + + self.notifytitle = createfontstring( font, titlesize ); + self.notifytitle setpoint( point, undefined, xoffset, yoffset ); + self.notifytitle.glowalpha = 1; + self.notifytitle.hidewheninmenu = 1; + self.notifytitle.archived = 0; + self.notifytitle.alpha = 0; + self.notifytext = createfontstring( font, textsize ); + self.notifytext setparent( self.notifytitle ); + self.notifytext setpoint( point, relativepoint, 0, 0 ); + self.notifytext.glowalpha = 1; + self.notifytext.hidewheninmenu = 1; + self.notifytext.archived = 0; + self.notifytext.alpha = 0; + self.notifytext2 = createfontstring( font, textsize ); + self.notifytext2 setparent( self.notifytitle ); + self.notifytext2 setpoint( point, relativepoint, 0, 0 ); + self.notifytext2.glowalpha = 1; + self.notifytext2.hidewheninmenu = 1; + self.notifytext2.archived = 0; + self.notifytext2.alpha = 0; + self.notifyicon = createicon( "white", iconsize, iconsize ); + self.notifyicon setparent( self.notifytext2 ); + self.notifyicon setpoint( point, relativepoint, 0, 0 ); + self.notifyicon.hidewheninmenu = 1; + self.notifyicon.archived = 0; + self.notifyicon.alpha = 0; + self.doingnotify = 0; + self.notifyqueue = []; +} + +oldnotifymessage( titletext, notifytext, iconname, glowcolor, sound, duration ) +{ + if ( level.wagermatch && !level.teambased ) + return; + + notifydata = spawnstruct(); + notifydata.titletext = titletext; + notifydata.notifytext = notifytext; + notifydata.iconname = iconname; + notifydata.sound = sound; + notifydata.duration = duration; + self.startmessagenotifyqueue[self.startmessagenotifyqueue.size] = notifydata; + self notify( "received award" ); +} + +notifymessage( notifydata ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self.messagenotifyqueue[self.messagenotifyqueue.size] = notifydata; + self notify( "received award" ); +} + +shownotifymessage( notifydata, duration ) +{ + self endon( "disconnect" ); + self.doingnotify = 1; + waitrequirevisibility( 0 ); + self notify( "notifyMessageBegin", duration ); + self thread resetoncancel(); + + if ( isdefined( notifydata.sound ) ) + self playlocalsound( notifydata.sound ); + + if ( isdefined( notifydata.musicstate ) ) + self maps\mp\_music::setmusicstate( notifydata.music ); + + if ( isdefined( notifydata.leadersound ) ) + self maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( notifydata.leadersound ); + + if ( isdefined( notifydata.glowcolor ) ) + glowcolor = notifydata.glowcolor; + else + glowcolor = ( 0, 0, 0 ); + + if ( isdefined( notifydata.color ) ) + color = notifydata.color; + else + color = ( 1, 1, 1 ); + + anchorelem = self.notifytitle; + + if ( isdefined( notifydata.titletext ) ) + { + if ( isdefined( notifydata.titlelabel ) ) + self.notifytitle.label = notifydata.titlelabel; + else + self.notifytitle.label = &""; + + if ( isdefined( notifydata.titlelabel ) && !isdefined( notifydata.titleisstring ) ) + self.notifytitle setvalue( notifydata.titletext ); + else + self.notifytitle settext( notifydata.titletext ); + + self.notifytitle setcod7decodefx( 200, int( duration * 1000 ), 600 ); + self.notifytitle.glowcolor = glowcolor; + self.notifytitle.color = color; + self.notifytitle.alpha = 1; + } + + if ( isdefined( notifydata.notifytext ) ) + { + if ( isdefined( notifydata.textlabel ) ) + self.notifytext.label = notifydata.textlabel; + else + self.notifytext.label = &""; + + if ( isdefined( notifydata.textlabel ) && !isdefined( notifydata.textisstring ) ) + self.notifytext setvalue( notifydata.notifytext ); + else + self.notifytext settext( notifydata.notifytext ); + + self.notifytext setcod7decodefx( 100, int( duration * 1000 ), 600 ); + self.notifytext.glowcolor = glowcolor; + self.notifytext.color = color; + self.notifytext.alpha = 1; + anchorelem = self.notifytext; + } + + if ( isdefined( notifydata.notifytext2 ) ) + { + if ( self issplitscreen() ) + { + if ( isdefined( notifydata.text2label ) ) + self iprintlnbold( notifydata.text2label, notifydata.notifytext2 ); + else + self iprintlnbold( notifydata.notifytext2 ); + } + else + { + self.notifytext2 setparent( anchorelem ); + + if ( isdefined( notifydata.text2label ) ) + self.notifytext2.label = notifydata.text2label; + else + self.notifytext2.label = &""; + + self.notifytext2 settext( notifydata.notifytext2 ); + self.notifytext2 setpulsefx( 100, int( duration * 1000 ), 1000 ); + self.notifytext2.glowcolor = glowcolor; + self.notifytext2.color = color; + self.notifytext2.alpha = 1; + anchorelem = self.notifytext2; + } + } + + if ( isdefined( notifydata.iconname ) ) + { + iconwidth = 60; + iconheight = 60; + + if ( isdefined( notifydata.iconwidth ) ) + iconwidth = notifydata.iconwidth; + + if ( isdefined( notifydata.iconheight ) ) + iconheight = notifydata.iconheight; + + self.notifyicon setparent( anchorelem ); + self.notifyicon setshader( notifydata.iconname, iconwidth, iconheight ); + self.notifyicon.alpha = 0; + self.notifyicon fadeovertime( 1.0 ); + self.notifyicon.alpha = 1; + waitrequirevisibility( duration ); + self.notifyicon fadeovertime( 0.75 ); + self.notifyicon.alpha = 0; + } + else + waitrequirevisibility( duration ); + + self notify( "notifyMessageDone" ); + self.doingnotify = 0; +} + +waitrequirevisibility( waittime ) +{ + interval = 0.05; + + while ( !self canreadtext() ) + wait( interval ); + + while ( waittime > 0 ) + { + wait( interval ); + + if ( self canreadtext() ) + waittime -= interval; + } +} + +canreadtext() +{ + return 1; +} + +resetondeath() +{ + self endon( "notifyMessageDone" ); + self endon( "disconnect" ); + level endon( "game_ended" ); + + self waittill( "death" ); + + resetnotify(); +} + +resetoncancel() +{ + self notify( "resetOnCancel" ); + self endon( "resetOnCancel" ); + self endon( "notifyMessageDone" ); + self endon( "disconnect" ); + + level waittill( "cancel_notify" ); + + resetnotify(); +} + +resetnotify() +{ + self.notifytitle.alpha = 0; + self.notifytext.alpha = 0; + self.notifyicon.alpha = 0; + self.doingnotify = 0; +} + +hintmessagedeaththink() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "death" ); + + if ( isdefined( self.hintmessage ) ) + self.hintmessage destroyelem(); + } +} + +lowermessagethink() +{ + self endon( "disconnect" ); + self.lowermessage = createfontstring( "default", level.lowertextfontsize ); + self.lowermessage setpoint( "CENTER", level.lowertextyalign, 0, level.lowertexty ); + self.lowermessage settext( "" ); + self.lowermessage.archived = 0; + timerfontsize = 1.5; + + if ( self issplitscreen() ) + timerfontsize = 1.4; + + self.lowertimer = createfontstring( "default", timerfontsize ); + self.lowertimer setparent( self.lowermessage ); + self.lowertimer setpoint( "TOP", "BOTTOM", 0, 0 ); + self.lowertimer settext( "" ); + self.lowertimer.archived = 0; +} + +setmatchscorehudelemforteam( team ) +{ + if ( level.roundscorecarry ) + self setvalue( getteamscore( team ) ); + else + self setvalue( getroundswon( team ) ); +} + +teamoutcomenotify( winner, isround, endreasontext ) +{ + self endon( "disconnect" ); + self notify( "reset_outcome" ); + team = self.pers["team"]; + + if ( isdefined( team ) && team == "spectator" ) + { + for ( i = 0; i < level.players.size; i++ ) + { + if ( self.currentspectatingclient == level.players[i].clientid ) + { + team = level.players[i].pers["team"]; + break; + } + } + } + + if ( !isdefined( team ) || !isdefined( level.teams[team] ) ) + team = "allies"; + + while ( self.doingnotify ) + wait 0.05; + + self endon( "reset_outcome" ); + headerfont = "extrabig"; + font = "default"; + + if ( self issplitscreen() ) + { + titlesize = 2.0; + textsize = 1.5; + iconsize = 30; + spacing = 10; + } + else + { + titlesize = 3.0; + textsize = 2.0; + iconsize = 70; + spacing = 25; + } + + duration = 60000; + outcometitle = createfontstring( headerfont, titlesize ); + outcometitle setpoint( "TOP", undefined, 0, 30 ); + outcometitle.glowalpha = 1; + outcometitle.hidewheninmenu = 0; + outcometitle.archived = 0; + outcometext = createfontstring( font, 2.0 ); + outcometext setparent( outcometitle ); + outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); + outcometext.glowalpha = 1; + outcometext.hidewheninmenu = 0; + outcometext.archived = 0; + + if ( winner == "halftime" ) + { + outcometitle settext( game["strings"]["halftime"] ); + outcometitle.color = ( 1, 1, 1 ); + winner = "allies"; + } + else if ( winner == "intermission" ) + { + outcometitle settext( game["strings"]["intermission"] ); + outcometitle.color = ( 1, 1, 1 ); + winner = "allies"; + } + else if ( winner == "roundend" ) + { + outcometitle settext( game["strings"]["roundend"] ); + outcometitle.color = ( 1, 1, 1 ); + winner = "allies"; + } + else if ( winner == "overtime" ) + { + outcometitle settext( game["strings"]["overtime"] ); + outcometitle.color = ( 1, 1, 1 ); + winner = "allies"; + } + else if ( winner == "tie" ) + { + if ( isround ) + outcometitle settext( game["strings"]["round_draw"] ); + else + outcometitle settext( game["strings"]["draw"] ); + + outcometitle.color = ( 0.29, 0.61, 0.7 ); + winner = "allies"; + } + else if ( isdefined( self.pers["team"] ) && winner == team ) + { + if ( isround ) + outcometitle settext( game["strings"]["round_win"] ); + else + outcometitle settext( game["strings"]["victory"] ); + + outcometitle.color = ( 0.42, 0.68, 0.46 ); + } + else + { + if ( isround ) + outcometitle settext( game["strings"]["round_loss"] ); + else + outcometitle settext( game["strings"]["defeat"] ); + + outcometitle.color = ( 0.73, 0.29, 0.19 ); + } + + outcometext settext( endreasontext ); + outcometitle setcod7decodefx( 200, duration, 600 ); + outcometext setpulsefx( 100, duration, 1000 ); + iconspacing = 100; + currentx = ( level.teamcount - 1 ) * -1 * iconspacing / 2; + teamicons = []; + teamicons[team] = createicon( game["icons"][team], iconsize, iconsize ); + teamicons[team] setparent( outcometext ); + teamicons[team] setpoint( "TOP", "BOTTOM", currentx, spacing ); + teamicons[team].hidewheninmenu = 0; + teamicons[team].archived = 0; + teamicons[team].alpha = 0; + teamicons[team] fadeovertime( 0.5 ); + teamicons[team].alpha = 1; + currentx += iconspacing; + + foreach ( enemyteam in level.teams ) + { + if ( team == enemyteam ) + continue; + + teamicons[enemyteam] = createicon( game["icons"][enemyteam], iconsize, iconsize ); + teamicons[enemyteam] setparent( outcometext ); + teamicons[enemyteam] setpoint( "TOP", "BOTTOM", currentx, spacing ); + teamicons[enemyteam].hidewheninmenu = 0; + teamicons[enemyteam].archived = 0; + teamicons[enemyteam].alpha = 0; + teamicons[enemyteam] fadeovertime( 0.5 ); + teamicons[enemyteam].alpha = 1; + currentx += iconspacing; + } + + teamscores = []; + teamscores[team] = createfontstring( font, titlesize ); + teamscores[team] setparent( teamicons[team] ); + teamscores[team] setpoint( "TOP", "BOTTOM", 0, spacing ); + teamscores[team].glowalpha = 1; + + if ( isround ) + teamscores[team] setvalue( getteamscore( team ) ); + else + teamscores[team] [[ level.setmatchscorehudelemforteam ]]( team ); + + teamscores[team].hidewheninmenu = 0; + teamscores[team].archived = 0; + teamscores[team] setpulsefx( 100, duration, 1000 ); + + foreach ( enemyteam in level.teams ) + { + if ( team == enemyteam ) + continue; + + teamscores[enemyteam] = createfontstring( headerfont, titlesize ); + teamscores[enemyteam] setparent( teamicons[enemyteam] ); + teamscores[enemyteam] setpoint( "TOP", "BOTTOM", 0, spacing ); + teamscores[enemyteam].glowalpha = 1; + + if ( isround ) + teamscores[enemyteam] setvalue( getteamscore( enemyteam ) ); + else + teamscores[enemyteam] [[ level.setmatchscorehudelemforteam ]]( enemyteam ); + + teamscores[enemyteam].hidewheninmenu = 0; + teamscores[enemyteam].archived = 0; + teamscores[enemyteam] setpulsefx( 100, duration, 1000 ); + } + + font = "objective"; + matchbonus = undefined; + + if ( isdefined( self.matchbonus ) ) + { + matchbonus = createfontstring( font, 2.0 ); + matchbonus setparent( outcometext ); + matchbonus setpoint( "TOP", "BOTTOM", 0, iconsize + spacing * 3 + teamscores[team].height ); + matchbonus.glowalpha = 1; + matchbonus.hidewheninmenu = 0; + matchbonus.archived = 0; + matchbonus.label = game["strings"]["match_bonus"]; + matchbonus setvalue( self.matchbonus ); + } + + self thread resetoutcomenotify( teamicons, teamscores, outcometitle, outcometext ); +} + +teamoutcomenotifyzombie( winner, isround, endreasontext ) +{ + self endon( "disconnect" ); + self notify( "reset_outcome" ); + team = self.pers["team"]; + + if ( isdefined( team ) && team == "spectator" ) + { + for ( i = 0; i < level.players.size; i++ ) + { + if ( self.currentspectatingclient == level.players[i].clientid ) + { + team = level.players[i].pers["team"]; + break; + } + } + } + + if ( !isdefined( team ) || !isdefined( level.teams[team] ) ) + team = "allies"; + + while ( self.doingnotify ) + wait 0.05; + + self endon( "reset_outcome" ); + + if ( self issplitscreen() ) + { + titlesize = 2.0; + spacing = 10; + font = "default"; + } + else + { + titlesize = 3.0; + spacing = 50; + font = "objective"; + } + + outcometitle = createfontstring( font, titlesize ); + outcometitle setpoint( "TOP", undefined, 0, spacing ); + outcometitle.glowalpha = 1; + outcometitle.hidewheninmenu = 0; + outcometitle.archived = 0; + outcometitle settext( endreasontext ); + outcometitle setpulsefx( 100, 60000, 1000 ); + self thread resetoutcomenotify( undefined, undefined, outcometitle ); +} + +outcomenotify( winner, isroundend, endreasontext ) +{ + self endon( "disconnect" ); + self notify( "reset_outcome" ); + + while ( self.doingnotify ) + wait 0.05; + + self endon( "reset_outcome" ); + headerfont = "extrabig"; + font = "default"; + + if ( self issplitscreen() ) + { + titlesize = 2.0; + winnersize = 1.5; + othersize = 1.5; + iconsize = 30; + spacing = 10; + } + else + { + titlesize = 3.0; + winnersize = 2.0; + othersize = 1.5; + iconsize = 30; + spacing = 20; + } + + duration = 60000; + players = level.placement["all"]; + outcometitle = createfontstring( headerfont, titlesize ); + outcometitle setpoint( "TOP", undefined, 0, spacing ); + + if ( !maps\mp\_utility::isoneround() && !isroundend ) + outcometitle settext( game["strings"]["game_over"] ); + else if ( isdefined( players[1] ) && players[0].score == players[1].score && players[0].deaths == players[1].deaths && ( self == players[0] || self == players[1] ) ) + outcometitle settext( game["strings"]["tie"] ); + else if ( isdefined( players[2] ) && players[0].score == players[2].score && players[0].deaths == players[2].deaths && self == players[2] ) + outcometitle settext( game["strings"]["tie"] ); + else if ( isdefined( players[0] ) && self == players[0] ) + { + outcometitle settext( game["strings"]["victory"] ); + outcometitle.color = ( 0.42, 0.68, 0.46 ); + } + else + { + outcometitle settext( game["strings"]["defeat"] ); + outcometitle.color = ( 0.73, 0.29, 0.19 ); + } + + outcometitle.glowalpha = 1; + outcometitle.hidewheninmenu = 0; + outcometitle.archived = 0; + outcometitle setcod7decodefx( 200, duration, 600 ); + outcometext = createfontstring( font, 2.0 ); + outcometext setparent( outcometitle ); + outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); + outcometext.glowalpha = 1; + outcometext.hidewheninmenu = 0; + outcometext.archived = 0; + outcometext settext( endreasontext ); + firsttitle = createfontstring( font, winnersize ); + firsttitle setparent( outcometext ); + firsttitle setpoint( "TOP", "BOTTOM", 0, spacing ); + firsttitle.glowalpha = 1; + firsttitle.hidewheninmenu = 0; + firsttitle.archived = 0; + + if ( isdefined( players[0] ) ) + { + firsttitle.label = &"MP_FIRSTPLACE_NAME"; + firsttitle setplayernamestring( players[0] ); + firsttitle setcod7decodefx( 175, duration, 600 ); + } + + secondtitle = createfontstring( font, othersize ); + secondtitle setparent( firsttitle ); + secondtitle setpoint( "TOP", "BOTTOM", 0, spacing ); + secondtitle.glowalpha = 1; + secondtitle.hidewheninmenu = 0; + secondtitle.archived = 0; + + if ( isdefined( players[1] ) ) + { + secondtitle.label = &"MP_SECONDPLACE_NAME"; + secondtitle setplayernamestring( players[1] ); + secondtitle setcod7decodefx( 175, duration, 600 ); + } + + thirdtitle = createfontstring( font, othersize ); + thirdtitle setparent( secondtitle ); + thirdtitle setpoint( "TOP", "BOTTOM", 0, spacing ); + thirdtitle setparent( secondtitle ); + thirdtitle.glowalpha = 1; + thirdtitle.hidewheninmenu = 0; + thirdtitle.archived = 0; + + if ( isdefined( players[2] ) ) + { + thirdtitle.label = &"MP_THIRDPLACE_NAME"; + thirdtitle setplayernamestring( players[2] ); + thirdtitle setcod7decodefx( 175, duration, 600 ); + } + + matchbonus = createfontstring( font, 2.0 ); + matchbonus setparent( thirdtitle ); + matchbonus setpoint( "TOP", "BOTTOM", 0, spacing ); + matchbonus.glowalpha = 1; + matchbonus.hidewheninmenu = 0; + matchbonus.archived = 0; + + if ( isdefined( self.matchbonus ) ) + { + matchbonus.label = game["strings"]["match_bonus"]; + matchbonus setvalue( self.matchbonus ); + } + + self thread updateoutcome( firsttitle, secondtitle, thirdtitle ); + self thread resetoutcomenotify( undefined, undefined, outcometitle, outcometext, firsttitle, secondtitle, thirdtitle, matchbonus ); +} + +wageroutcomenotify( winner, endreasontext ) +{ + self endon( "disconnect" ); + self notify( "reset_outcome" ); + + while ( self.doingnotify ) + wait 0.05; + + setmatchflag( "enable_popups", 0 ); + self endon( "reset_outcome" ); + headerfont = "extrabig"; + font = "objective"; + + if ( self issplitscreen() ) + { + titlesize = 2.0; + winnersize = 1.5; + othersize = 1.5; + iconsize = 30; + spacing = 2; + } + else + { + titlesize = 3.0; + winnersize = 2.0; + othersize = 1.5; + iconsize = 30; + spacing = 20; + } + + halftime = 0; + + if ( isdefined( level.sidebet ) && level.sidebet ) + halftime = 1; + + duration = 60000; + players = level.placement["all"]; + outcometitle = createfontstring( headerfont, titlesize ); + outcometitle setpoint( "TOP", undefined, 0, spacing ); + + if ( halftime ) + { + outcometitle settext( game["strings"]["intermission"] ); + outcometitle.color = ( 1, 1, 0 ); + outcometitle.glowcolor = ( 1, 0, 0 ); + } + else if ( isdefined( level.dontcalcwagerwinnings ) && level.dontcalcwagerwinnings == 1 ) + { + outcometitle settext( game["strings"]["wager_topwinners"] ); + outcometitle.color = ( 0.42, 0.68, 0.46 ); + } + else if ( isdefined( self.wagerwinnings ) && self.wagerwinnings > 0 ) + { + outcometitle settext( game["strings"]["wager_inthemoney"] ); + outcometitle.color = ( 0.42, 0.68, 0.46 ); + } + else + { + outcometitle settext( game["strings"]["wager_loss"] ); + outcometitle.color = ( 0.73, 0.29, 0.19 ); + } + + outcometitle.glowalpha = 1; + outcometitle.hidewheninmenu = 0; + outcometitle.archived = 0; + outcometitle setcod7decodefx( 200, duration, 600 ); + outcometext = createfontstring( font, 2.0 ); + outcometext setparent( outcometitle ); + outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); + outcometext.glowalpha = 1; + outcometext.hidewheninmenu = 0; + outcometext.archived = 0; + outcometext settext( endreasontext ); + playernamehudelems = []; + playercphudelems = []; + numplayers = players.size; + + for ( i = 0; i < numplayers; i++ ) + { + if ( !halftime && isdefined( players[i] ) ) + { + secondtitle = createfontstring( font, othersize ); + + if ( playernamehudelems.size == 0 ) + { + secondtitle setparent( outcometext ); + secondtitle setpoint( "TOP_LEFT", "BOTTOM", -175, spacing * 3 ); + } + else + { + secondtitle setparent( playernamehudelems[playernamehudelems.size - 1] ); + secondtitle setpoint( "TOP_LEFT", "BOTTOM_LEFT", 0, spacing ); + } + + secondtitle.glowalpha = 1; + secondtitle.hidewheninmenu = 0; + secondtitle.archived = 0; + secondtitle.label = &"MP_WAGER_PLACE_NAME"; + secondtitle.playernum = i; + secondtitle setplayernamestring( players[i] ); + playernamehudelems[playernamehudelems.size] = secondtitle; + secondcp = createfontstring( font, othersize ); + secondcp setparent( secondtitle ); + secondcp setpoint( "TOP_RIGHT", "TOP_LEFT", 350, 0 ); + secondcp.glowalpha = 1; + secondcp.hidewheninmenu = 0; + secondcp.archived = 0; + secondcp.label = &"MENU_POINTS"; + secondcp.currentvalue = 0; + + if ( isdefined( players[i].wagerwinnings ) ) + secondcp.targetvalue = players[i].wagerwinnings; + else + secondcp.targetvalue = 0; + + if ( secondcp.targetvalue > 0 ) + secondcp.color = ( 0.42, 0.68, 0.46 ); + + secondcp setvalue( 0 ); + playercphudelems[playercphudelems.size] = secondcp; + } + } + + self thread updatewageroutcome( playernamehudelems, playercphudelems ); + self thread resetwageroutcomenotify( playernamehudelems, playercphudelems, outcometitle, outcometext ); + + if ( halftime ) + return; + + stillupdating = 1; + countupduration = 2; + cpincrement = 9999; + + if ( isdefined( playercphudelems[0] ) ) + { + cpincrement = int( playercphudelems[0].targetvalue / ( countupduration / 0.05 ) ); + + if ( cpincrement < 1 ) + cpincrement = 1; + } + + while ( stillupdating ) + { + stillupdating = 0; + + for ( i = 0; i < playercphudelems.size; i++ ) + { + if ( isdefined( playercphudelems[i] ) && playercphudelems[i].currentvalue < playercphudelems[i].targetvalue ) + { + playercphudelems[i].currentvalue += cpincrement; + + if ( playercphudelems[i].currentvalue > playercphudelems[i].targetvalue ) + playercphudelems[i].currentvalue = playercphudelems[i].targetvalue; + + playercphudelems[i] setvalue( playercphudelems[i].currentvalue ); + stillupdating = 1; + } + } + + wait 0.05; + } +} + +teamwageroutcomenotify( winner, isroundend, endreasontext ) +{ + self endon( "disconnect" ); + self notify( "reset_outcome" ); + team = self.pers["team"]; + + if ( !isdefined( team ) || !isdefined( level.teams[team] ) ) + team = "allies"; + + wait 0.05; + + while ( self.doingnotify ) + wait 0.05; + + self endon( "reset_outcome" ); + headerfont = "extrabig"; + font = "objective"; + + if ( self issplitscreen() ) + { + titlesize = 2.0; + textsize = 1.5; + iconsize = 30; + spacing = 10; + } + else + { + titlesize = 3.0; + textsize = 2.0; + iconsize = 70; + spacing = 15; + } + + halftime = 0; + + if ( isdefined( level.sidebet ) && level.sidebet ) + halftime = 1; + + duration = 60000; + outcometitle = createfontstring( headerfont, titlesize ); + outcometitle setpoint( "TOP", undefined, 0, spacing ); + outcometitle.glowalpha = 1; + outcometitle.hidewheninmenu = 0; + outcometitle.archived = 0; + outcometext = createfontstring( font, 2.0 ); + outcometext setparent( outcometitle ); + outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); + outcometext.glowalpha = 1; + outcometext.hidewheninmenu = 0; + outcometext.archived = 0; + + if ( winner == "tie" ) + { + if ( isroundend ) + outcometitle settext( game["strings"]["round_draw"] ); + else + outcometitle settext( game["strings"]["draw"] ); + + outcometitle.color = ( 1, 1, 1 ); + winner = "allies"; + } + else if ( winner == "overtime" ) + { + outcometitle settext( game["strings"]["overtime"] ); + outcometitle.color = ( 1, 1, 1 ); + } + else if ( isdefined( self.pers["team"] ) && winner == team ) + { + if ( isroundend ) + outcometitle settext( game["strings"]["round_win"] ); + else + outcometitle settext( game["strings"]["victory"] ); + + outcometitle.color = ( 0.42, 0.68, 0.46 ); + } + else + { + if ( isroundend ) + outcometitle settext( game["strings"]["round_loss"] ); + else + outcometitle settext( game["strings"]["defeat"] ); + + outcometitle.color = ( 0.73, 0.29, 0.19 ); + } + + if ( !isdefined( level.dontshowendreason ) || !level.dontshowendreason ) + outcometext settext( endreasontext ); + + outcometitle setpulsefx( 100, duration, 1000 ); + outcometext setpulsefx( 100, duration, 1000 ); + teamicons = []; + teamicons[team] = createicon( game["icons"][team], iconsize, iconsize ); + teamicons[team] setparent( outcometext ); + teamicons[team] setpoint( "TOP", "BOTTOM", -60, spacing ); + teamicons[team].hidewheninmenu = 0; + teamicons[team].archived = 0; + teamicons[team].alpha = 0; + teamicons[team] fadeovertime( 0.5 ); + teamicons[team].alpha = 1; + + foreach ( enemyteam in level.teams ) + { + if ( team == enemyteam ) + continue; + + teamicons[enemyteam] = createicon( game["icons"][enemyteam], iconsize, iconsize ); + teamicons[enemyteam] setparent( outcometext ); + teamicons[enemyteam] setpoint( "TOP", "BOTTOM", 60, spacing ); + teamicons[enemyteam].hidewheninmenu = 0; + teamicons[enemyteam].archived = 0; + teamicons[enemyteam].alpha = 0; + teamicons[enemyteam] fadeovertime( 0.5 ); + teamicons[enemyteam].alpha = 1; + } + + teamscores = []; + teamscores[team] = createfontstring( font, titlesize ); + teamscores[team] setparent( teamicons[team] ); + teamscores[team] setpoint( "TOP", "BOTTOM", 0, spacing ); + teamscores[team].glowalpha = 1; + teamscores[team] setvalue( getteamscore( team ) ); + teamscores[team].hidewheninmenu = 0; + teamscores[team].archived = 0; + teamscores[team] setpulsefx( 100, duration, 1000 ); + + foreach ( enemyteam in level.teams ) + { + if ( team == enemyteam ) + continue; + + teamscores[enemyteam] = createfontstring( font, titlesize ); + teamscores[enemyteam] setparent( teamicons[enemyteam] ); + teamscores[enemyteam] setpoint( "TOP", "BOTTOM", 0, spacing ); + teamscores[enemyteam].glowalpha = 1; + teamscores[enemyteam] setvalue( getteamscore( enemyteam ) ); + teamscores[enemyteam].hidewheninmenu = 0; + teamscores[enemyteam].archived = 0; + teamscores[enemyteam] setpulsefx( 100, duration, 1000 ); + } + + matchbonus = undefined; + sidebetwinnings = undefined; + + if ( !isroundend && !halftime && isdefined( self.wagerwinnings ) ) + { + matchbonus = createfontstring( font, 2.0 ); + matchbonus setparent( outcometext ); + matchbonus setpoint( "TOP", "BOTTOM", 0, iconsize + spacing * 3 + teamscores[team].height ); + matchbonus.glowalpha = 1; + matchbonus.hidewheninmenu = 0; + matchbonus.archived = 0; + matchbonus.label = game["strings"]["wager_winnings"]; + matchbonus setvalue( self.wagerwinnings ); + + if ( isdefined( game["side_bets"] ) && game["side_bets"] ) + { + sidebetwinnings = createfontstring( font, 2.0 ); + sidebetwinnings setparent( matchbonus ); + sidebetwinnings setpoint( "TOP", "BOTTOM", 0, spacing ); + sidebetwinnings.glowalpha = 1; + sidebetwinnings.hidewheninmenu = 0; + sidebetwinnings.archived = 0; + sidebetwinnings.label = game["strings"]["wager_sidebet_winnings"]; + sidebetwinnings setvalue( self.pers["wager_sideBetWinnings"] ); + } + } + + self thread resetoutcomenotify( teamicons, teamscores, outcometitle, outcometext, matchbonus, sidebetwinnings ); +} + +destroyhudelem( hudelem ) +{ + if ( isdefined( hudelem ) ) + hudelem destroyelem(); +} + +resetoutcomenotify( hudelemlist1, hudelemlist2, hudelem3, hudelem4, hudelem5, hudelem6, hudelem7, hudelem8, hudelem9, hudelem10 ) +{ + self endon( "disconnect" ); + + self waittill( "reset_outcome" ); + + destroyhudelem( hudelem3 ); + destroyhudelem( hudelem4 ); + destroyhudelem( hudelem5 ); + destroyhudelem( hudelem6 ); + destroyhudelem( hudelem7 ); + destroyhudelem( hudelem8 ); + destroyhudelem( hudelem9 ); + destroyhudelem( hudelem10 ); + + if ( isdefined( hudelemlist1 ) ) + { + foreach ( elem in hudelemlist1 ) + destroyhudelem( elem ); + } + + if ( isdefined( hudelemlist2 ) ) + { + foreach ( elem in hudelemlist2 ) + destroyhudelem( elem ); + } +} + +resetwageroutcomenotify( playernamehudelems, playercphudelems, outcometitle, outcometext ) +{ + self endon( "disconnect" ); + + self waittill( "reset_outcome" ); + + for ( i = playernamehudelems.size - 1; i >= 0; i-- ) + { + if ( isdefined( playernamehudelems[i] ) ) + playernamehudelems[i] destroy(); + } + + for ( i = playercphudelems.size - 1; i >= 0; i-- ) + { + if ( isdefined( playercphudelems[i] ) ) + playercphudelems[i] destroy(); + } + + if ( isdefined( outcometext ) ) + outcometext destroy(); + + if ( isdefined( outcometitle ) ) + outcometitle destroy(); +} + +updateoutcome( firsttitle, secondtitle, thirdtitle ) +{ + self endon( "disconnect" ); + self endon( "reset_outcome" ); + + while ( true ) + { + self waittill( "update_outcome" ); + + players = level.placement["all"]; + + if ( isdefined( firsttitle ) && isdefined( players[0] ) ) + firsttitle setplayernamestring( players[0] ); + else if ( isdefined( firsttitle ) ) + firsttitle.alpha = 0; + + if ( isdefined( secondtitle ) && isdefined( players[1] ) ) + secondtitle setplayernamestring( players[1] ); + else if ( isdefined( secondtitle ) ) + secondtitle.alpha = 0; + + if ( isdefined( thirdtitle ) && isdefined( players[2] ) ) + thirdtitle setplayernamestring( players[2] ); + else if ( isdefined( thirdtitle ) ) + thirdtitle.alpha = 0; + } +} + +updatewageroutcome( playernamehudelems, playercphudelems ) +{ + self endon( "disconnect" ); + self endon( "reset_outcome" ); + + while ( true ) + { + self waittill( "update_outcome" ); + + players = level.placement["all"]; + + for ( i = 0; i < playernamehudelems.size; i++ ) + { + if ( isdefined( playernamehudelems[i] ) && isdefined( players[playernamehudelems[i].playernum] ) ) + { + playernamehudelems[i] setplayernamestring( players[playernamehudelems[i].playernum] ); + continue; + } + + if ( isdefined( playernamehudelems[i] ) ) + playernamehudelems[i].alpha = 0; + + if ( isdefined( playercphudelems[i] ) ) + playercphudelems[i].alpha = 0; + } + } +} + +setshoutcasterwaitingmessage() +{ + if ( !isdefined( self.waitingforplayerstext ) ) + { + self.waitingforplayerstext = createfontstring( "objective", 2.5 ); + self.waitingforplayerstext setpoint( "CENTER", "CENTER", 0, -80 ); + self.waitingforplayerstext.sort = 1001; + self.waitingforplayerstext settext( &"MP_WAITING_FOR_PLAYERS_SHOUTCASTER" ); + self.waitingforplayerstext.foreground = 0; + self.waitingforplayerstext.hidewheninmenu = 1; + } +} + +clearshoutcasterwaitingmessage() +{ + if ( isdefined( self.waitingforplayerstext ) ) + { + destroyhudelem( self.waitingforplayerstext ); + self.waitingforplayerstext = undefined; + } +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_hud_util.gsc b/ZM/Core/maps/mp/gametypes_zm/_hud_util.gsc new file mode 100644 index 0000000..b216ea7 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_hud_util.gsc @@ -0,0 +1,1042 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +setparent( element ) +{ + if ( isdefined( self.parent ) && self.parent == element ) + return; + + if ( isdefined( self.parent ) ) + self.parent removechild( self ); + + self.parent = element; + self.parent addchild( self ); + + if ( isdefined( self.point ) ) + self setpoint( self.point, self.relativepoint, self.xoffset, self.yoffset ); + else + self setpoint( "TOP" ); +} + +getparent() +{ + return self.parent; +} + +addchild( element ) +{ + element.index = self.children.size; + self.children[self.children.size] = element; +} + +removechild( element ) +{ + element.parent = undefined; + + if ( self.children[self.children.size - 1] != element ) + { + self.children[element.index] = self.children[self.children.size - 1]; + self.children[element.index].index = element.index; + } + + self.children[self.children.size - 1] = undefined; + element.index = undefined; +} + +setpoint( point, relativepoint, xoffset, yoffset, movetime = 0 ) +{ + element = self getparent(); + + if ( movetime ) + self moveovertime( movetime ); + + if ( !isdefined( xoffset ) ) + xoffset = 0; + + self.xoffset = xoffset; + + if ( !isdefined( yoffset ) ) + yoffset = 0; + + self.yoffset = yoffset; + self.point = point; + self.alignx = "center"; + self.aligny = "middle"; + + switch ( point ) + { + case "CENTER": + break; + case "TOP": + self.aligny = "top"; + break; + case "BOTTOM": + self.aligny = "bottom"; + break; + case "LEFT": + self.alignx = "left"; + break; + case "RIGHT": + self.alignx = "right"; + break; + case "TOP_RIGHT": + case "TOPRIGHT": + self.aligny = "top"; + self.alignx = "right"; + break; + case "TOP_LEFT": + case "TOPLEFT": + self.aligny = "top"; + self.alignx = "left"; + break; + case "TOPCENTER": + self.aligny = "top"; + self.alignx = "center"; + break; + case "BOTTOM_RIGHT": + case "BOTTOM RIGHT": + self.aligny = "bottom"; + self.alignx = "right"; + break; + case "BOTTOM_LEFT": + case "BOTTOM LEFT": + self.aligny = "bottom"; + self.alignx = "left"; + break; + default: +/# + println( "^3Warning: unknown point passed to setPoint(): " + point ); +#/ + break; + } + + if ( !isdefined( relativepoint ) ) + relativepoint = point; + + self.relativepoint = relativepoint; + relativex = "center"; + relativey = "middle"; + + switch ( relativepoint ) + { + case "CENTER": + break; + case "TOP": + relativey = "top"; + break; + case "BOTTOM": + relativey = "bottom"; + break; + case "LEFT": + relativex = "left"; + break; + case "RIGHT": + relativex = "right"; + break; + case "TOP_RIGHT": + case "TOPRIGHT": + relativey = "top"; + relativex = "right"; + break; + case "TOP_LEFT": + case "TOPLEFT": + relativey = "top"; + relativex = "left"; + break; + case "TOPCENTER": + relativey = "top"; + relativex = "center"; + break; + case "BOTTOM_RIGHT": + case "BOTTOM RIGHT": + relativey = "bottom"; + relativex = "right"; + break; + case "BOTTOM_LEFT": + case "BOTTOM LEFT": + relativey = "bottom"; + relativex = "left"; + break; + default: +/# + println( "^3Warning: unknown relativePoint passed to setPoint(): " + relativepoint ); +#/ + break; + } + + if ( element == level.uiparent ) + { + self.horzalign = relativex; + self.vertalign = relativey; + } + else + { + self.horzalign = element.horzalign; + self.vertalign = element.vertalign; + } + + if ( relativex == element.alignx ) + { + offsetx = 0; + xfactor = 0; + } + else if ( relativex == "center" || element.alignx == "center" ) + { + offsetx = int( element.width / 2 ); + + if ( relativex == "left" || element.alignx == "right" ) + xfactor = -1; + else + xfactor = 1; + } + else + { + offsetx = element.width; + + if ( relativex == "left" ) + xfactor = -1; + else + xfactor = 1; + } + + self.x = element.x + offsetx * xfactor; + + if ( relativey == element.aligny ) + { + offsety = 0; + yfactor = 0; + } + else if ( relativey == "middle" || element.aligny == "middle" ) + { + offsety = int( element.height / 2 ); + + if ( relativey == "top" || element.aligny == "bottom" ) + yfactor = -1; + else + yfactor = 1; + } + else + { + offsety = element.height; + + if ( relativey == "top" ) + yfactor = -1; + else + yfactor = 1; + } + + self.y = element.y + offsety * yfactor; + self.x += self.xoffset; + self.y += self.yoffset; + + switch ( self.elemtype ) + { + case "bar": + setpointbar( point, relativepoint, xoffset, yoffset ); + self.barframe setparent( self getparent() ); + self.barframe setpoint( point, relativepoint, xoffset, yoffset ); + break; + } + + self updatechildren(); +} + +setpointbar( point, relativepoint, xoffset, yoffset ) +{ + self.bar.horzalign = self.horzalign; + self.bar.vertalign = self.vertalign; + self.bar.alignx = "left"; + self.bar.aligny = self.aligny; + self.bar.y = self.y; + + if ( self.alignx == "left" ) + self.bar.x = self.x; + else if ( self.alignx == "right" ) + self.bar.x = self.x - self.width; + else + self.bar.x = self.x - int( self.width / 2 ); + + if ( self.aligny == "top" ) + self.bar.y = self.y; + else if ( self.aligny == "bottom" ) + self.bar.y = self.y; + + self updatebar( self.bar.frac ); +} + +updatebar( barfrac, rateofchange ) +{ + if ( self.elemtype == "bar" ) + updatebarscale( barfrac, rateofchange ); +} + +updatebarscale( barfrac, rateofchange ) +{ + barwidth = int( self.width * barfrac + 0.5 ); + + if ( !barwidth ) + barwidth = 1; + + self.bar.frac = barfrac; + self.bar setshader( self.bar.shader, barwidth, self.height ); + assert( barwidth <= self.width, "barWidth <= self.width: " + barwidth + " <= " + self.width + " - barFrac was " + barfrac ); + + if ( isdefined( rateofchange ) && barwidth < self.width ) + { + if ( rateofchange > 0 ) + { + assert( ( 1 - barfrac ) / rateofchange > 0, "barFrac: " + barfrac + "rateOfChange: " + rateofchange ); + self.bar scaleovertime( ( 1 - barfrac ) / rateofchange, self.width, self.height ); + } + else if ( rateofchange < 0 ) + { + assert( barfrac / -1 * rateofchange > 0, "barFrac: " + barfrac + "rateOfChange: " + rateofchange ); + self.bar scaleovertime( barfrac / -1 * rateofchange, 1, self.height ); + } + } + + self.bar.rateofchange = rateofchange; + self.bar.lastupdatetime = gettime(); +} + +createfontstring( font, fontscale ) +{ + fontelem = newclienthudelem( self ); + fontelem.elemtype = "font"; + fontelem.font = font; + fontelem.fontscale = fontscale; + fontelem.x = 0; + fontelem.y = 0; + fontelem.width = 0; + fontelem.height = int( level.fontheight * fontscale ); + fontelem.xoffset = 0; + fontelem.yoffset = 0; + fontelem.children = []; + fontelem setparent( level.uiparent ); + fontelem.hidden = 0; + return fontelem; +} + +createserverfontstring( font, fontscale, team ) +{ + if ( isdefined( team ) ) + fontelem = newteamhudelem( team ); + else + fontelem = newhudelem(); + + fontelem.elemtype = "font"; + fontelem.font = font; + fontelem.fontscale = fontscale; + fontelem.x = 0; + fontelem.y = 0; + fontelem.width = 0; + fontelem.height = int( level.fontheight * fontscale ); + fontelem.xoffset = 0; + fontelem.yoffset = 0; + fontelem.children = []; + fontelem setparent( level.uiparent ); + fontelem.hidden = 0; + return fontelem; +} + +createservertimer( font, fontscale, team ) +{ + if ( isdefined( team ) ) + timerelem = newteamhudelem( team ); + else + timerelem = newhudelem(); + + timerelem.elemtype = "timer"; + timerelem.font = font; + timerelem.fontscale = fontscale; + timerelem.x = 0; + timerelem.y = 0; + timerelem.width = 0; + timerelem.height = int( level.fontheight * fontscale ); + timerelem.xoffset = 0; + timerelem.yoffset = 0; + timerelem.children = []; + timerelem setparent( level.uiparent ); + timerelem.hidden = 0; + return timerelem; +} + +createclienttimer( font, fontscale ) +{ + timerelem = newclienthudelem( self ); + timerelem.elemtype = "timer"; + timerelem.font = font; + timerelem.fontscale = fontscale; + timerelem.x = 0; + timerelem.y = 0; + timerelem.width = 0; + timerelem.height = int( level.fontheight * fontscale ); + timerelem.xoffset = 0; + timerelem.yoffset = 0; + timerelem.children = []; + timerelem setparent( level.uiparent ); + timerelem.hidden = 0; + return timerelem; +} + +createicon( shader, width, height ) +{ + iconelem = newclienthudelem( self ); + iconelem.elemtype = "icon"; + iconelem.x = 0; + iconelem.y = 0; + iconelem.width = width; + iconelem.height = height; + iconelem.xoffset = 0; + iconelem.yoffset = 0; + iconelem.children = []; + iconelem setparent( level.uiparent ); + iconelem.hidden = 0; + + if ( isdefined( shader ) ) + iconelem setshader( shader, width, height ); + + return iconelem; +} + +createservericon( shader, width, height, team ) +{ + if ( isdefined( team ) ) + iconelem = newteamhudelem( team ); + else + iconelem = newhudelem(); + + iconelem.elemtype = "icon"; + iconelem.x = 0; + iconelem.y = 0; + iconelem.width = width; + iconelem.height = height; + iconelem.xoffset = 0; + iconelem.yoffset = 0; + iconelem.children = []; + iconelem setparent( level.uiparent ); + iconelem.hidden = 0; + + if ( isdefined( shader ) ) + iconelem setshader( shader, width, height ); + + return iconelem; +} + +createserverbar( color, width, height, flashfrac, team, selected ) +{ + if ( isdefined( team ) ) + barelem = newteamhudelem( team ); + else + barelem = newhudelem(); + + barelem.x = 0; + barelem.y = 0; + barelem.frac = 0; + barelem.color = color; + barelem.sort = -2; + barelem.shader = "progress_bar_fill"; + barelem setshader( "progress_bar_fill", width, height ); + barelem.hidden = 0; + + if ( isdefined( flashfrac ) ) + barelem.flashfrac = flashfrac; + + if ( isdefined( team ) ) + barelemframe = newteamhudelem( team ); + else + barelemframe = newhudelem(); + + barelemframe.elemtype = "icon"; + barelemframe.x = 0; + barelemframe.y = 0; + barelemframe.width = width; + barelemframe.height = height; + barelemframe.xoffset = 0; + barelemframe.yoffset = 0; + barelemframe.bar = barelem; + barelemframe.barframe = barelemframe; + barelemframe.children = []; + barelemframe.sort = -1; + barelemframe.color = ( 1, 1, 1 ); + barelemframe setparent( level.uiparent ); + + if ( isdefined( selected ) ) + barelemframe setshader( "progress_bar_fg_sel", width, height ); + else + barelemframe setshader( "progress_bar_fg", width, height ); + + barelemframe.hidden = 0; + + if ( isdefined( team ) ) + barelembg = newteamhudelem( team ); + else + barelembg = newhudelem(); + + barelembg.elemtype = "bar"; + barelembg.x = 0; + barelembg.y = 0; + barelembg.width = width; + barelembg.height = height; + barelembg.xoffset = 0; + barelembg.yoffset = 0; + barelembg.bar = barelem; + barelembg.barframe = barelemframe; + barelembg.children = []; + barelembg.sort = -3; + barelembg.color = ( 0, 0, 0 ); + barelembg.alpha = 0.5; + barelembg setparent( level.uiparent ); + barelembg setshader( "progress_bar_bg", width, height ); + barelembg.hidden = 0; + return barelembg; +} + +createbar( color, width, height, flashfrac ) +{ + barelem = newclienthudelem( self ); + barelem.x = 0; + barelem.y = 0; + barelem.frac = 0; + barelem.color = color; + barelem.sort = -2; + barelem.shader = "progress_bar_fill"; + barelem setshader( "progress_bar_fill", width, height ); + barelem.hidden = 0; + + if ( isdefined( flashfrac ) ) + barelem.flashfrac = flashfrac; + + barelemframe = newclienthudelem( self ); + barelemframe.elemtype = "icon"; + barelemframe.x = 0; + barelemframe.y = 0; + barelemframe.width = width; + barelemframe.height = height; + barelemframe.xoffset = 0; + barelemframe.yoffset = 0; + barelemframe.bar = barelem; + barelemframe.barframe = barelemframe; + barelemframe.children = []; + barelemframe.sort = -1; + barelemframe.color = ( 1, 1, 1 ); + barelemframe setparent( level.uiparent ); + barelemframe.hidden = 0; + barelembg = newclienthudelem( self ); + barelembg.elemtype = "bar"; + + if ( !self issplitscreen() ) + { + barelembg.x = -2; + barelembg.y = -2; + } + + barelembg.width = width; + barelembg.height = height; + barelembg.xoffset = 0; + barelembg.yoffset = 0; + barelembg.bar = barelem; + barelembg.barframe = barelemframe; + barelembg.children = []; + barelembg.sort = -3; + barelembg.color = ( 0, 0, 0 ); + barelembg.alpha = 0.5; + barelembg setparent( level.uiparent ); + + if ( !self issplitscreen() ) + barelembg setshader( "progress_bar_bg", width + 4, height + 4 ); + else + barelembg setshader( "progress_bar_bg", width + 0, height + 0 ); + + barelembg.hidden = 0; + return barelembg; +} + +getcurrentfraction() +{ + frac = self.bar.frac; + + if ( isdefined( self.bar.rateofchange ) ) + { + frac += ( gettime() - self.bar.lastupdatetime ) * self.bar.rateofchange; + + if ( frac > 1 ) + frac = 1; + + if ( frac < 0 ) + frac = 0; + } + + return frac; +} + +createprimaryprogressbar() +{ + bar = undefined; + + if ( self issplitscreen() ) + { + bar = self createbar( ( 1, 1, 1 ), level.primaryprogressbarwidth, level.primaryprogressbarheight_ss ); + bar setpoint( "TOP", undefined, level.primaryprogressbarx_ss, level.primaryprogressbary_ss ); + } + else + { + bar = self createbar( ( 1, 1, 1 ), level.primaryprogressbarwidth, level.primaryprogressbarheight ); + bar setpoint( "CENTER", undefined, level.primaryprogressbarx, level.primaryprogressbary ); + } + + return bar; +} + +createprimaryprogressbartext() +{ + text = createfontstring( "objective", level.primaryprogressbarfontsize ); + + if ( self issplitscreen() ) + text setpoint( "TOP", undefined, level.primaryprogressbartextx_ss, level.primaryprogressbartexty_ss ); + else + text setpoint( "CENTER", undefined, level.primaryprogressbartextx, level.primaryprogressbartexty ); + + text.sort = -1; + return text; +} + +createsecondaryprogressbar() +{ + secondaryprogressbarheight = getdvarintdefault( "scr_secondaryProgressBarHeight", level.secondaryprogressbarheight ); + secondaryprogressbarx = getdvarintdefault( "scr_secondaryProgressBarX", level.secondaryprogressbarx ); + secondaryprogressbary = getdvarintdefault( "scr_secondaryProgressBarY", level.secondaryprogressbary ); + secondaryprogressbarheight_ss = getdvarintdefault( "scr_secondaryProgressBarHeight", level.secondaryprogressbarheight_ss ); + secondaryprogressbarx_ss = getdvarintdefault( "scr_secondaryProgressBarX", level.secondaryprogressbarx_ss ); + secondaryprogressbary_ss = getdvarintdefault( "scr_secondaryProgressBarY", level.secondaryprogressbary_ss ); + bar = undefined; + + if ( self issplitscreen() ) + { + bar = self createbar( ( 1, 1, 1 ), level.secondaryprogressbarwidth, secondaryprogressbarheight_ss ); + bar setpoint( "TOP", undefined, secondaryprogressbarx_ss, secondaryprogressbary_ss ); + } + else + { + bar = self createbar( ( 1, 1, 1 ), level.secondaryprogressbarwidth, secondaryprogressbarheight ); + bar setpoint( "CENTER", undefined, secondaryprogressbarx, secondaryprogressbary ); + } + + return bar; +} + +createsecondaryprogressbartext() +{ + secondaryprogressbartextx = getdvarintdefault( "scr_btx", level.secondaryprogressbartextx ); + secondaryprogressbartexty = getdvarintdefault( "scr_bty", level.secondaryprogressbartexty ); + secondaryprogressbartextx_ss = getdvarintdefault( "scr_btx", level.secondaryprogressbartextx_ss ); + secondaryprogressbartexty_ss = getdvarintdefault( "scr_bty", level.secondaryprogressbartexty_ss ); + text = createfontstring( "objective", level.primaryprogressbarfontsize ); + + if ( self issplitscreen() ) + text setpoint( "TOP", undefined, secondaryprogressbartextx_ss, secondaryprogressbartexty_ss ); + else + text setpoint( "CENTER", undefined, secondaryprogressbartextx, secondaryprogressbartexty ); + + text.sort = -1; + return text; +} + +createteamprogressbar( team ) +{ + bar = createserverbar( ( 1, 0, 0 ), level.teamprogressbarwidth, level.teamprogressbarheight, undefined, team ); + bar setpoint( "TOP", undefined, 0, level.teamprogressbary ); + return bar; +} + +createteamprogressbartext( team ) +{ + text = createserverfontstring( "default", level.teamprogressbarfontsize, team ); + text setpoint( "TOP", undefined, 0, level.teamprogressbartexty ); + return text; +} + +setflashfrac( flashfrac ) +{ + self.bar.flashfrac = flashfrac; +} + +hideelem() +{ + if ( self.hidden ) + return; + + self.hidden = 1; + + if ( self.alpha != 0 ) + self.alpha = 0; + + if ( self.elemtype == "bar" || self.elemtype == "bar_shader" ) + { + self.bar.hidden = 1; + + if ( self.bar.alpha != 0 ) + self.bar.alpha = 0; + + self.barframe.hidden = 1; + + if ( self.barframe.alpha != 0 ) + self.barframe.alpha = 0; + } +} + +showelem() +{ + if ( !self.hidden ) + return; + + self.hidden = 0; + + if ( self.elemtype == "bar" || self.elemtype == "bar_shader" ) + { + if ( self.alpha != 0.5 ) + self.alpha = 0.5; + + self.bar.hidden = 0; + + if ( self.bar.alpha != 1 ) + self.bar.alpha = 1; + + self.barframe.hidden = 0; + + if ( self.barframe.alpha != 1 ) + self.barframe.alpha = 1; + } + else if ( self.alpha != 1 ) + self.alpha = 1; +} + +flashthread() +{ + self endon( "death" ); + + if ( !self.hidden ) + self.alpha = 1; + + while ( true ) + { + if ( self.frac >= self.flashfrac ) + { + if ( !self.hidden ) + { + self fadeovertime( 0.3 ); + self.alpha = 0.2; + wait 0.35; + self fadeovertime( 0.3 ); + self.alpha = 1; + } + + wait 0.7; + } + else + { + if ( !self.hidden && self.alpha != 1 ) + self.alpha = 1; + + wait 0.05; + } + } +} + +destroyelem() +{ + tempchildren = []; + + for ( index = 0; index < self.children.size; index++ ) + { + if ( isdefined( self.children[index] ) ) + tempchildren[tempchildren.size] = self.children[index]; + } + + for ( index = 0; index < tempchildren.size; index++ ) + tempchildren[index] setparent( self getparent() ); + + if ( self.elemtype == "bar" || self.elemtype == "bar_shader" ) + { + self.bar destroy(); + self.barframe destroy(); + } + + self destroy(); +} + +seticonshader( shader ) +{ + self setshader( shader, self.width, self.height ); +} + +setwidth( width ) +{ + self.width = width; +} + +setheight( height ) +{ + self.height = height; +} + +setsize( width, height ) +{ + self.width = width; + self.height = height; +} + +updatechildren() +{ + for ( index = 0; index < self.children.size; index++ ) + { + child = self.children[index]; + child setpoint( child.point, child.relativepoint, child.xoffset, child.yoffset ); + } +} + +createloadouticon( verindex, horindex, xpos, ypos ) +{ + iconsize = 32; + + if ( level.splitscreen ) + ypos -= 80 + iconsize * ( 3 - verindex ); + else + ypos -= 90 + iconsize * ( 3 - verindex ); + + if ( level.splitscreen ) + xpos -= 5 + iconsize * horindex; + else + xpos -= 10 + iconsize * horindex; + + icon = createicon( "white", iconsize, iconsize ); + icon setpoint( "BOTTOM RIGHT", "BOTTOM RIGHT", xpos, ypos ); + icon.horzalign = "user_right"; + icon.vertalign = "user_bottom"; + icon.archived = 0; + icon.foreground = 0; + return icon; +} + +setloadouticoncoords( verindex, horindex, xpos, ypos ) +{ + iconsize = 32; + + if ( level.splitscreen ) + ypos -= 80 + iconsize * ( 3 - verindex ); + else + ypos -= 90 + iconsize * ( 3 - verindex ); + + if ( level.splitscreen ) + xpos -= 5 + iconsize * horindex; + else + xpos -= 10 + iconsize * horindex; + + self setpoint( "BOTTOM RIGHT", "BOTTOM RIGHT", xpos, ypos ); + self.horzalign = "user_right"; + self.vertalign = "user_bottom"; + self.archived = 0; + self.foreground = 0; + self.alpha = 1; +} + +setloadouttextcoords( xcoord ) +{ + self setpoint( "RIGHT", "LEFT", xcoord, 0 ); +} + +createloadouttext( icon, xcoord ) +{ + text = createfontstring( "small", 1 ); + text setparent( icon ); + text setpoint( "RIGHT", "LEFT", xcoord, 0 ); + text.archived = 0; + text.alignx = "right"; + text.aligny = "middle"; + text.foreground = 0; + return text; +} + +showloadoutattribute( iconelem, icon, alpha, textelem, text ) +{ + iconsize = 32; + iconelem.alpha = alpha; + + if ( alpha ) + iconelem setshader( icon, iconsize, iconsize ); + + if ( isdefined( textelem ) ) + { + textelem.alpha = alpha; + + if ( alpha ) + textelem settext( text ); + } +} + +hideloadoutattribute( iconelem, fadetime, textelem, hidetextonly ) +{ + if ( isdefined( fadetime ) ) + { + if ( !isdefined( hidetextonly ) || !hidetextonly ) + iconelem fadeovertime( fadetime ); + + if ( isdefined( textelem ) ) + textelem fadeovertime( fadetime ); + } + + if ( !isdefined( hidetextonly ) || !hidetextonly ) + iconelem.alpha = 0; + + if ( isdefined( textelem ) ) + textelem.alpha = 0; +} + +showperks() +{ + ypos = 40; + + if ( !isdefined( self.perkhudelem ) ) + self.perkhudelem = createloadouticon( 0, 0, 200, ypos ); + else + self.perkhudelem setloadouticoncoords( 0, 0, 200, ypos ); + + self.perkhudelem setperks( self ); + self.perkhudelem.x = -10; + self.perkhudelem.alpha = 0; + self.perkhudelem fadeovertime( 0.4 ); + self.perkhudelem.alpha = 1; + self.perkhudelem.hidewheninmenu = 1; +} + +showperk( index, perk, ypos ) +{ + assert( game["state"] != "postgame" ); + + if ( !isdefined( self.perkicon ) ) + { + self.perkicon = []; + self.perkname = []; + } + + if ( !isdefined( self.perkicon[index] ) ) + { + assert( !isdefined( self.perkname[index] ) ); + self.perkicon[index] = createloadouticon( index, 0, 200, ypos ); + self.perkname[index] = createloadouttext( self.perkicon[index], 160 ); + } + else + { + self.perkicon[index] setloadouticoncoords( index, 0, 200, ypos ); + self.perkname[index] setloadouttextcoords( 160 ); + } + + if ( perk == "perk_null" || perk == "weapon_null" || perk == "specialty_null" ) + alpha = 0; + else + { + assert( isdefined( level.perknames[perk] ), perk ); + alpha = 1; + } + + showloadoutattribute( self.perkicon[index], perk, alpha, self.perkname[index], level.perknames[perk] ); + self.perkicon[index] moveovertime( 0.3 ); + self.perkicon[index].x = -5; + self.perkicon[index].hidewheninmenu = 1; + self.perkname[index] moveovertime( 0.3 ); + self.perkname[index].x = -40; + self.perkname[index].hidewheninmenu = 1; +} + +hideperks( fadetime ) +{ + if ( level.perksenabled == 1 ) + { + if ( game["state"] == "postgame" ) + { + assert( !isdefined( self.perkhudelem ) ); + return; + } + } + + assert( isdefined( self.perkhudelem ) ); + + if ( isdefined( self.perkhudelem ) ) + hideloadoutattribute( self.perkhudelem, fadetime ); +} + +hideperk( index, fadetime = 0.05, hidetextonly ) +{ + if ( level.perksenabled == 1 ) + { + if ( game["state"] == "postgame" ) + { + if ( isdefined( self.perkicon ) ) + { + assert( !isdefined( self.perkicon[index] ) ); + assert( !isdefined( self.perkname[index] ) ); + } + + return; + } + + assert( isdefined( self.perkicon[index] ) ); + assert( isdefined( self.perkname[index] ) ); + + if ( isdefined( self.perkicon ) && isdefined( self.perkicon[index] ) && isdefined( self.perkname ) && isdefined( self.perkname[index] ) ) + hideloadoutattribute( self.perkicon[index], fadetime, self.perkname[index], hidetextonly ); + } +} + +hideallperks( fadetime, hidetextonly ) +{ + if ( level.perksenabled == 1 ) + hideperks( fadetime ); +} + +showkillstreak( index, killstreak, xpos, ypos ) +{ + assert( game["state"] != "postgame" ); + + if ( !isdefined( self.killstreakicon ) ) + self.killstreakicon = []; + + if ( !isdefined( self.killstreakicon[index] ) ) + self.killstreakicon[index] = createloadouticon( 3, self.killstreak.size - 1 - index, xpos, ypos ); + + if ( killstreak == "killstreak_null" || killstreak == "weapon_null" ) + alpha = 0; + else + { + assert( isdefined( level.killstreakicons[killstreak] ), killstreak ); + alpha = 1; + } + + showloadoutattribute( self.killstreakicon[index], level.killstreakicons[killstreak], alpha ); +} + +hidekillstreak( index, fadetime ) +{ + if ( iskillstreaksenabled() ) + { + if ( game["state"] == "postgame" ) + { + assert( !isdefined( self.killstreakicon[index] ) ); + return; + } + + assert( isdefined( self.killstreakicon[index] ) ); + hideloadoutattribute( self.killstreakicon[index], fadetime ); + } +} + +setgamemodeinfopoint() +{ + self.x = 5; + self.y = 120; + self.horzalign = "user_left"; + self.vertalign = "user_top"; + self.alignx = "left"; + self.aligny = "top"; +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_menus.gsc b/ZM/Core/maps/mp/gametypes_zm/_menus.gsc new file mode 100644 index 0000000..e68c67c --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_menus.gsc @@ -0,0 +1,174 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_globallogic; +#include maps\mp\gametypes_zm\_rank; + +init() +{ + precachestring( &"open_ingame_menu" ); + game["menu_team"] = "team_marinesopfor"; + game["menu_initteam_allies"] = "initteam_marines"; + game["menu_initteam_axis"] = "initteam_opfor"; + game["menu_class"] = "class"; + game["menu_changeclass"] = "changeclass"; + game["menu_changeclass_offline"] = "changeclass"; + game["menu_wager_side_bet"] = "sidebet"; + game["menu_wager_side_bet_player"] = "sidebet_player"; + game["menu_changeclass_wager"] = "changeclass_wager"; + game["menu_changeclass_custom"] = "changeclass_custom"; + game["menu_changeclass_barebones"] = "changeclass_barebones"; + + foreach ( team in level.teams ) + game["menu_changeclass_" + team] = "changeclass"; + + game["menu_controls"] = "ingame_controls"; + game["menu_options"] = "ingame_options"; + game["menu_leavegame"] = "popup_leavegame"; + precachemenu( game["menu_controls"] ); + precachemenu( game["menu_options"] ); + precachemenu( game["menu_leavegame"] ); + precachemenu( "scoreboard" ); + precachemenu( "spectate" ); + precachemenu( game["menu_team"] ); + precachemenu( game["menu_changeclass_allies"] ); + precachemenu( game["menu_initteam_allies"] ); + precachemenu( game["menu_changeclass_axis"] ); + precachemenu( game["menu_class"] ); + precachemenu( game["menu_changeclass"] ); + precachemenu( game["menu_initteam_axis"] ); + precachemenu( game["menu_changeclass_offline"] ); + precachemenu( game["menu_changeclass_wager"] ); + precachemenu( game["menu_changeclass_custom"] ); + precachemenu( game["menu_changeclass_barebones"] ); + precachemenu( game["menu_wager_side_bet"] ); + precachemenu( game["menu_wager_side_bet_player"] ); + precachestring( &"MP_HOST_ENDED_GAME" ); + precachestring( &"MP_HOST_ENDGAME_RESPONSE" ); + level thread onplayerconnect(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread onmenuresponse(); + } +} + +onmenuresponse() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "menuresponse", menu, response ); + + if ( response == "back" ) + { + self closemenu(); + self closeingamemenu(); + + if ( level.console ) + { + if ( menu == game["menu_changeclass"] || menu == game["menu_changeclass_offline"] || menu == game["menu_team"] || menu == game["menu_controls"] ) + { + if ( isdefined( level.teams[self.pers["team"]] ) ) + self openmenu( game["menu_class"] ); + } + } + + continue; + } + + if ( response == "changeteam" && level.allow_teamchange == "1" ) + { + self closemenu(); + self closeingamemenu(); + self openmenu( game["menu_team"] ); + } + + if ( response == "changeclass_marines_splitscreen" ) + self openmenu( "changeclass_marines_splitscreen" ); + + if ( response == "changeclass_opfor_splitscreen" ) + self openmenu( "changeclass_opfor_splitscreen" ); + + if ( response == "endgame" ) + { + if ( self issplitscreen() ) + { + level.skipvote = 1; + + if ( !level.gameended ) + level thread maps\mp\gametypes_zm\_globallogic::forceend(); + } + + continue; + } + + if ( response == "killserverpc" ) + { + level thread maps\mp\gametypes_zm\_globallogic::killserverpc(); + continue; + } + + if ( response == "endround" ) + { + if ( !level.gameended ) + level thread maps\mp\gametypes_zm\_globallogic::forceend(); + else + { + self closemenu(); + self closeingamemenu(); + self iprintln( &"MP_HOST_ENDGAME_RESPONSE" ); + } + + continue; + } + + if ( menu == game["menu_team"] && level.allow_teamchange == "1" ) + { + switch ( response ) + { + case "autoassign": + self [[ level.autoassign ]]( 1 ); + break; + case "spectator": + self [[ level.spectator ]](); + break; + default: + self [[ level.teammenu ]]( response ); + break; + } + + continue; + } + + if ( menu == game["menu_changeclass"] || menu == game["menu_changeclass_offline"] || menu == game["menu_changeclass_wager"] || menu == game["menu_changeclass_custom"] || menu == game["menu_changeclass_barebones"] ) + { + self closemenu(); + self closeingamemenu(); + + if ( level.rankedmatch && issubstr( response, "custom" ) ) + { + if ( self isitemlocked( maps\mp\gametypes_zm\_rank::getitemindex( "feature_cac" ) ) ) + kick( self getentitynumber() ); + } + + self.selectedclass = 1; + self [[ level.class ]]( response ); + continue; + } + + if ( menu == "spectate" ) + { + player = getplayerfromclientnum( int( response ) ); + + if ( isdefined( player ) ) + self setcurrentspectatorclient( player ); + } + } +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_perplayer.gsc b/ZM/Core/maps/mp/gametypes_zm/_perplayer.gsc new file mode 100644 index 0000000..eac9f10 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_perplayer.gsc @@ -0,0 +1,179 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +init( id, playerbegincallback, playerendcallback ) +{ + precacheshader( "objpoint_default" ); + handler = spawnstruct(); + handler.id = id; + handler.playerbegincallback = playerbegincallback; + handler.playerendcallback = playerendcallback; + handler.enabled = 0; + handler.players = []; + thread onplayerconnect( handler ); + level.handlerglobalflagval = 0; + return handler; +} + +enable( handler ) +{ + if ( handler.enabled ) + return; + + handler.enabled = 1; + level.handlerglobalflagval++; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i].handlerflagval = level.handlerglobalflagval; + + players = handler.players; + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].handlerflagval != level.handlerglobalflagval ) + continue; + + if ( players[i].handlers[handler.id].ready ) + players[i] handleplayer( handler ); + } +} + +disable( handler ) +{ + if ( !handler.enabled ) + return; + + handler.enabled = 0; + level.handlerglobalflagval++; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i].handlerflagval = level.handlerglobalflagval; + + players = handler.players; + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].handlerflagval != level.handlerglobalflagval ) + continue; + + if ( players[i].handlers[handler.id].ready ) + players[i] unhandleplayer( handler, 0, 0 ); + } +} + +onplayerconnect( handler ) +{ + for (;;) + { + level waittill( "connecting", player ); + + if ( !isdefined( player.handlers ) ) + player.handlers = []; + + player.handlers[handler.id] = spawnstruct(); + player.handlers[handler.id].ready = 0; + player.handlers[handler.id].handled = 0; + player.handlerflagval = -1; + handler.players[handler.players.size] = player; + player thread onplayerdisconnect( handler ); + player thread onplayerspawned( handler ); + player thread onjoinedteam( handler ); + player thread onjoinedspectators( handler ); + player thread onplayerkilled( handler ); + } +} + +onplayerdisconnect( handler ) +{ + self waittill( "disconnect" ); + + newplayers = []; + + for ( i = 0; i < handler.players.size; i++ ) + { + if ( handler.players[i] != self ) + newplayers[newplayers.size] = handler.players[i]; + } + + handler.players = newplayers; + self thread unhandleplayer( handler, 1, 1 ); +} + +onjoinedteam( handler ) +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "joined_team" ); + + self thread unhandleplayer( handler, 1, 0 ); + } +} + +onjoinedspectators( handler ) +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "joined_spectators" ); + + self thread unhandleplayer( handler, 1, 0 ); + } +} + +onplayerspawned( handler ) +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread handleplayer( handler ); + } +} + +onplayerkilled( handler ) +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "killed_player" ); + + self thread unhandleplayer( handler, 1, 0 ); + } +} + +handleplayer( handler ) +{ + self.handlers[handler.id].ready = 1; + + if ( !handler.enabled ) + return; + + if ( self.handlers[handler.id].handled ) + return; + + self.handlers[handler.id].handled = 1; + self thread [[ handler.playerbegincallback ]](); +} + +unhandleplayer( handler, unsetready, disconnected ) +{ + if ( !disconnected && unsetready ) + self.handlers[handler.id].ready = 0; + + if ( !self.handlers[handler.id].handled ) + return; + + if ( !disconnected ) + self.handlers[handler.id].handled = 0; + + self thread [[ handler.playerendcallback ]]( disconnected ); +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_scoreboard.gsc b/ZM/Core/maps/mp/gametypes_zm/_scoreboard.gsc new file mode 100644 index 0000000..8b412b7 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_scoreboard.gsc @@ -0,0 +1,27 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +init() +{ + setdvar( "g_ScoresColor_Spectator", ".25 .25 .25" ); + setdvar( "g_ScoresColor_Free", ".76 .78 .10" ); + setdvar( "g_teamColor_MyTeam", ".4 .7 .4" ); + setdvar( "g_teamColor_EnemyTeam", "1 .315 0.35" ); + setdvar( "g_teamColor_MyTeamAlt", ".35 1 1" ); + setdvar( "g_teamColor_EnemyTeamAlt", "1 .5 0" ); + setdvar( "g_teamColor_Squad", ".315 0.35 1" ); + + if ( level.createfx_enabled ) + return; + + if ( sessionmodeiszombiesgame() ) + { + setdvar( "g_TeamIcon_Axis", "faction_cia" ); + setdvar( "g_TeamIcon_Allies", "faction_cdc" ); + } + else + { + setdvar( "g_TeamIcon_Axis", game["icons"]["axis"] ); + setdvar( "g_TeamIcon_Allies", game["icons"]["allies"] ); + } +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_serversettings.gsc b/ZM/Core/maps/mp/gametypes_zm/_serversettings.gsc new file mode 100644 index 0000000..ff5002b --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_serversettings.gsc @@ -0,0 +1,191 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +init() +{ + level.hostname = getdvar( "sv_hostname" ); + + if ( level.hostname == "" ) + level.hostname = "CoDHost"; + + setdvar( "sv_hostname", level.hostname ); + setdvar( "ui_hostname", level.hostname ); + makedvarserverinfo( "ui_hostname", "CoDHost" ); + level.motd = getdvar( "scr_motd" ); + + if ( level.motd == "" ) + level.motd = ""; + + setdvar( "scr_motd", level.motd ); + setdvar( "ui_motd", level.motd ); + makedvarserverinfo( "ui_motd", "" ); + level.allowvote = getdvar( "g_allowVote" ); + + if ( level.allowvote == "" ) + level.allowvote = "1"; + + setdvar( "g_allowvote", level.allowvote ); + setdvar( "ui_allowvote", level.allowvote ); + makedvarserverinfo( "ui_allowvote", "1" ); + level.allow_teamchange = "0"; + + if ( sessionmodeisprivate() || !sessionmodeisonlinegame() ) + level.allow_teamchange = "1"; + + setdvar( "ui_allow_teamchange", level.allow_teamchange ); + level.friendlyfire = getgametypesetting( "friendlyfiretype" ); + setdvar( "ui_friendlyfire", level.friendlyfire ); + makedvarserverinfo( "ui_friendlyfire", "0" ); + + if ( getdvar( "scr_mapsize" ) == "" ) + setdvar( "scr_mapsize", "64" ); + else if ( getdvarfloat( "scr_mapsize" ) >= 64 ) + setdvar( "scr_mapsize", "64" ); + else if ( getdvarfloat( "scr_mapsize" ) >= 32 ) + setdvar( "scr_mapsize", "32" ); + else if ( getdvarfloat( "scr_mapsize" ) >= 16 ) + setdvar( "scr_mapsize", "16" ); + else + setdvar( "scr_mapsize", "8" ); + + level.mapsize = getdvarfloat( "scr_mapsize" ); + constraingametype( getdvar( "g_gametype" ) ); + constrainmapsize( level.mapsize ); + + for (;;) + { + updateserversettings(); + wait 5; + } +} + +updateserversettings() +{ + sv_hostname = getdvar( "sv_hostname" ); + + if ( level.hostname != sv_hostname ) + { + level.hostname = sv_hostname; + setdvar( "ui_hostname", level.hostname ); + } + + scr_motd = getdvar( "scr_motd" ); + + if ( level.motd != scr_motd ) + { + level.motd = scr_motd; + setdvar( "ui_motd", level.motd ); + } + + g_allowvote = getdvar( "g_allowVote" ); + + if ( level.allowvote != g_allowvote ) + { + level.allowvote = g_allowvote; + setdvar( "ui_allowvote", level.allowvote ); + } + + scr_friendlyfire = getgametypesetting( "friendlyfiretype" ); + + if ( level.friendlyfire != scr_friendlyfire ) + { + level.friendlyfire = scr_friendlyfire; + setdvar( "ui_friendlyfire", level.friendlyfire ); + } +} + +constraingametype( gametype ) +{ + entities = getentarray(); + + for ( i = 0; i < entities.size; i++ ) + { + entity = entities[i]; + + if ( gametype == "dm" ) + { + if ( isdefined( entity.script_gametype_dm ) && entity.script_gametype_dm != "1" ) + entity delete(); + + continue; + } + + if ( gametype == "tdm" ) + { + if ( isdefined( entity.script_gametype_tdm ) && entity.script_gametype_tdm != "1" ) + entity delete(); + + continue; + } + + if ( gametype == "ctf" ) + { + if ( isdefined( entity.script_gametype_ctf ) && entity.script_gametype_ctf != "1" ) + entity delete(); + + continue; + } + + if ( gametype == "hq" ) + { + if ( isdefined( entity.script_gametype_hq ) && entity.script_gametype_hq != "1" ) + entity delete(); + + continue; + } + + if ( gametype == "sd" ) + { + if ( isdefined( entity.script_gametype_sd ) && entity.script_gametype_sd != "1" ) + entity delete(); + + continue; + } + + if ( gametype == "koth" ) + { + if ( isdefined( entity.script_gametype_koth ) && entity.script_gametype_koth != "1" ) + entity delete(); + } + } +} + +constrainmapsize( mapsize ) +{ + entities = getentarray(); + + for ( i = 0; i < entities.size; i++ ) + { + entity = entities[i]; + + if ( int( mapsize ) == 8 ) + { + if ( isdefined( entity.script_mapsize_08 ) && entity.script_mapsize_08 != "1" ) + entity delete(); + + continue; + } + + if ( int( mapsize ) == 16 ) + { + if ( isdefined( entity.script_mapsize_16 ) && entity.script_mapsize_16 != "1" ) + entity delete(); + + continue; + } + + if ( int( mapsize ) == 32 ) + { + if ( isdefined( entity.script_mapsize_32 ) && entity.script_mapsize_32 != "1" ) + entity delete(); + + continue; + } + + if ( int( mapsize ) == 64 ) + { + if ( isdefined( entity.script_mapsize_64 ) && entity.script_mapsize_64 != "1" ) + entity delete(); + } + } +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_shellshock.gsc b/ZM/Core/maps/mp/gametypes_zm/_shellshock.gsc new file mode 100644 index 0000000..31ded74 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_shellshock.gsc @@ -0,0 +1,56 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; + +init() +{ + precacheshellshock( "frag_grenade_mp" ); + precacheshellshock( "damage_mp" ); + precacherumble( "artillery_rumble" ); + precacherumble( "grenade_rumble" ); +} + +shellshockondamage( cause, damage ) +{ + if ( cause == "MOD_EXPLOSIVE" || cause == "MOD_GRENADE" || cause == "MOD_GRENADE_SPLASH" || cause == "MOD_PROJECTILE" || cause == "MOD_PROJECTILE_SPLASH" ) + { + time = 0; + + if ( damage >= 90 ) + time = 4; + else if ( damage >= 50 ) + time = 3; + else if ( damage >= 25 ) + time = 2; + else if ( damage > 10 ) + time = 2; + + if ( time ) + { + if ( self mayapplyscreeneffect() ) + self shellshock( "frag_grenade_mp", 0.5 ); + } + } +} + +endondeath() +{ + self waittill( "death" ); + + waittillframeend; + self notify( "end_explode" ); +} + +endontimer( timer ) +{ + self endon( "disconnect" ); + wait( timer ); + self notify( "end_on_timer" ); +} + +rcbomb_earthquake( position ) +{ + playrumbleonposition( "grenade_rumble", position ); + earthquake( 0.5, 0.5, self.origin, 512 ); +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_spawning.gsc b/ZM/Core/maps/mp/gametypes_zm/_spawning.gsc new file mode 100644 index 0000000..4c6a62b --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_spawning.gsc @@ -0,0 +1,942 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\gametypes_zm\_spawnlogic; + +init() +{ + if ( !isdefined( level.gamemodespawndvars ) ) + level.gamemodespawndvars = ::default_gamemodespawndvars; + + level init_spawn_system(); + level.recently_deceased = []; + + foreach ( team in level.teams ) + level.recently_deceased[team] = spawn_array_struct(); + + level thread onplayerconnect(); + + if ( getdvar( _hash_AD6C19FE ) == "" ) + level.spawn_visibility_check_max = 20; + else + level.spawn_visibility_check_max = getdvarint( _hash_AD6C19FE ); + + level.spawnprotectiontime = getgametypesetting( "spawnprotectiontime" ); +/# + setdvar( "scr_debug_spawn_player", "" ); + setdvar( "scr_debug_render_spawn_data", "1" ); + setdvar( "scr_debug_render_snapshotmode", "0" ); + setdvar( "scr_spawn_point_test_mode", "0" ); + level.test_spawn_point_index = 0; + setdvar( "scr_debug_render_spawn_text", "1" ); +#/ +} + +default_gamemodespawndvars( reset_dvars ) +{ + +} + +init_spawn_system() +{ + level.spawnsystem = spawnstruct(); + spawnsystem = level.spawnsystem; + level get_player_spawning_dvars( 1 ); + level thread initialize_player_spawning_dvars(); + spawnsystem.einfluencer_shape_sphere = 0; + spawnsystem.einfluencer_shape_cylinder = 1; + spawnsystem.einfluencer_type_normal = 0; + spawnsystem.einfluencer_type_player = 1; + spawnsystem.einfluencer_type_weapon = 2; + spawnsystem.einfluencer_type_dog = 3; + spawnsystem.einfluencer_type_vehicle = 4; + spawnsystem.einfluencer_type_game_mode = 6; + spawnsystem.einfluencer_type_enemy_spawned = 7; + spawnsystem.einfluencer_curve_constant = 0; + spawnsystem.einfluencer_curve_linear = 1; + spawnsystem.einfluencer_curve_steep = 2; + spawnsystem.einfluencer_curve_inverse_linear = 3; + spawnsystem.einfluencer_curve_negative_to_positive = 4; + spawnsystem.ispawn_teammask = []; + spawnsystem.ispawn_teammask_free = 1; + spawnsystem.ispawn_teammask["free"] = spawnsystem.ispawn_teammask_free; + all = spawnsystem.ispawn_teammask_free; + count = 1; + + foreach ( team in level.teams ) + { + spawnsystem.ispawn_teammask[team] = 1 << count; + all |= spawnsystem.ispawn_teammask[team]; + count++; + } + + spawnsystem.ispawn_teammask["all"] = all; +} + +onplayerconnect() +{ + level endon( "game_ended" ); + + for (;;) + { + level waittill( "connecting", player ); + + player setentertime( gettime() ); + player thread onplayerspawned(); + player thread ondisconnect(); + player thread onteamchange(); + player thread ongrenadethrow(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + level endon( "game_ended" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread initialspawnprotection( "specialty_nottargetedbyairsupport", 1 ); + self thread initialspawnprotection( "specialty_nokillstreakreticle", 0 ); + self thread initialspawnprotection( "specialty_nottargettedbysentry", 0 ); + + if ( isdefined( self.pers["hasRadar"] ) && self.pers["hasRadar"] ) + self.hasspyplane = 1; + + self enable_player_influencers( 1 ); + self thread ondeath(); + } +} + +ondeath() +{ + self endon( "disconnect" ); + level endon( "game_ended" ); + + self waittill( "death" ); + + self enable_player_influencers( 0 ); + self create_body_influencers(); +} + +onteamchange() +{ + self endon( "disconnect" ); + level endon( "game_ended" ); + + while ( true ) + { + self waittill( "joined_team" ); + + self player_influencers_set_team(); + wait 0.05; + } +} + +ongrenadethrow() +{ + self endon( "disconnect" ); + level endon( "game_ended" ); + + while ( true ) + { + self waittill( "grenade_fire", grenade, weaponname ); + + level thread create_grenade_influencers( self.pers["team"], weaponname, grenade ); + wait 0.05; + } +} + +ondisconnect() +{ + level endon( "game_ended" ); + + self waittill( "disconnect" ); +} + +get_score_curve_index( curve ) +{ + switch ( curve ) + { + case "linear": + return level.spawnsystem.einfluencer_curve_linear; + case "steep": + return level.spawnsystem.einfluencer_curve_steep; + case "inverse_linear": + return level.spawnsystem.einfluencer_curve_linear; + case "negative_to_positive": + return level.spawnsystem.einfluencer_curve_negative_to_positive; + case "constant": + default: + return level.spawnsystem.einfluencer_curve_constant; + } +} + +get_influencer_type_index( curve ) +{ + +} + +create_player_influencers() +{ + assert( !isdefined( self.influencer_enemy_sphere ) ); + assert( !isdefined( self.influencer_weapon_cylinder ) ); + assert( !level.teambased || !isdefined( self.influencer_friendly_sphere ) ); + assert( !level.teambased || !isdefined( self.influencer_friendly_cylinder ) ); + + if ( !level.teambased ) + { + team_mask = level.spawnsystem.ispawn_teammask_free; + other_team_mask = level.spawnsystem.ispawn_teammask_free; + weapon_team_mask = level.spawnsystem.ispawn_teammask_free; + } + else if ( isdefined( self.pers["team"] ) ) + { + team = self.pers["team"]; + team_mask = getteammask( team ); + other_team_mask = getotherteamsmask( team ); + weapon_team_mask = getotherteamsmask( team ); + } + else + { + team_mask = 0; + other_team_mask = 0; + weapon_team_mask = 0; + } + + if ( level.hardcoremode ) + weapon_team_mask |= team_mask; + + angles = self.angles; + origin = self.origin; + up = ( 0, 0, 1 ); + forward = ( 1, 0, 0 ); + cylinder_forward = up; + cylinder_up = forward; + self.influencer_enemy_sphere = addsphereinfluencer( level.spawnsystem.einfluencer_type_player, origin, level.spawnsystem.enemy_influencer_radius, level.spawnsystem.enemy_influencer_score, other_team_mask, "enemy,r,s", get_score_curve_index( level.spawnsystem.enemy_influencer_score_curve ), 0, self ); + + if ( level.teambased ) + { + cylinder_up = -1.0 * forward; + self.influencer_friendly_sphere = addsphereinfluencer( level.spawnsystem.einfluencer_type_player, origin, level.spawnsystem.friend_weak_influencer_radius, level.spawnsystem.friend_weak_influencer_score, team_mask, "friend_weak,r,s", get_score_curve_index( level.spawnsystem.friend_weak_influencer_score_curve ), 0, self ); + } + + self.spawn_influencers_created = 1; + + if ( !isdefined( self.pers["team"] ) || self.pers["team"] == "spectator" ) + self enable_player_influencers( 0 ); +} + +remove_player_influencers() +{ + if ( level.teambased && isdefined( self.influencer_friendly_sphere ) ) + { + removeinfluencer( self.influencer_friendly_sphere ); + self.influencer_friendly_sphere = undefined; + } + + if ( level.teambased && isdefined( self.influencer_friendly_cylinder ) ) + { + removeinfluencer( self.influencer_friendly_cylinder ); + self.influencer_friendly_cylinder = undefined; + } + + if ( isdefined( self.influencer_enemy_sphere ) ) + { + removeinfluencer( self.influencer_enemy_sphere ); + self.influencer_enemy_sphere = undefined; + } + + if ( isdefined( self.influencer_weapon_cylinder ) ) + { + removeinfluencer( self.influencer_weapon_cylinder ); + self.influencer_weapon_cylinder = undefined; + } +} + +enable_player_influencers( enabled ) +{ + if ( !isdefined( self.spawn_influencers_created ) ) + self create_player_influencers(); + + if ( isdefined( self.influencer_friendly_sphere ) ) + enableinfluencer( self.influencer_friendly_sphere, enabled ); + + if ( isdefined( self.influencer_friendly_cylinder ) ) + enableinfluencer( self.influencer_friendly_cylinder, enabled ); + + if ( isdefined( self.influencer_enemy_sphere ) ) + enableinfluencer( self.influencer_enemy_sphere, enabled ); + + if ( isdefined( self.influencer_weapon_cylinder ) ) + enableinfluencer( self.influencer_weapon_cylinder, enabled ); +} + +player_influencers_set_team() +{ + if ( !level.teambased ) + { + team_mask = level.spawnsystem.ispawn_teammask_free; + other_team_mask = level.spawnsystem.ispawn_teammask_free; + weapon_team_mask = level.spawnsystem.ispawn_teammask_free; + } + else + { + team = self.pers["team"]; + team_mask = getteammask( team ); + other_team_mask = getotherteamsmask( team ); + weapon_team_mask = getotherteamsmask( team ); + } + + if ( level.friendlyfire != 0 && level.teambased ) + weapon_team_mask |= team_mask; + + if ( isdefined( self.influencer_friendly_sphere ) ) + setinfluencerteammask( self.influencer_friendly_sphere, team_mask ); + + if ( isdefined( self.influencer_friendly_cylinder ) ) + setinfluencerteammask( self.influencer_friendly_cylinder, team_mask ); + + if ( isdefined( self.influencer_enemy_sphere ) ) + setinfluencerteammask( self.influencer_enemy_sphere, other_team_mask ); + + if ( isdefined( self.influencer_weapon_cylinder ) ) + setinfluencerteammask( self.influencer_weapon_cylinder, weapon_team_mask ); +} + +create_body_influencers() +{ + if ( level.teambased ) + team_mask = getteammask( self.pers["team"] ); + else + team_mask = level.spawnsystem.ispawn_teammask_free; + + addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.dead_friend_influencer_radius, level.spawnsystem.dead_friend_influencer_score, team_mask, "dead_friend,r,s", get_score_curve_index( level.spawnsystem.dead_friend_influencer_score_curve ), level.spawnsystem.dead_friend_influencer_timeout_seconds ); +} + +create_grenade_influencers( parent_team, weaponname, grenade ) +{ + pixbeginevent( "create_grenade_influencers" ); + + if ( !level.teambased ) + weapon_team_mask = level.spawnsystem.ispawn_teammask_free; + else + { + weapon_team_mask = getotherteamsmask( parent_team ); + + if ( level.friendlyfire ) + weapon_team_mask |= getteammask( parent_team ); + } + + if ( issubstr( weaponname, "napalmblob" ) || issubstr( weaponname, "gl_" ) ) + { + pixendevent(); + return; + } + + timeout = 0; + + if ( weaponname == "tabun_gas_mp" ) + timeout = 7.0; + + if ( isdefined( grenade.origin ) ) + { + if ( weaponname == "claymore_mp" || weaponname == "bouncingbetty_mp" ) + addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, grenade.origin, level.spawnsystem.claymore_influencer_radius, level.spawnsystem.claymore_influencer_score, weapon_team_mask, "claymore,r,s", get_score_curve_index( level.spawnsystem.claymore_influencer_score_curve ), timeout, grenade ); + else + addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, grenade.origin, level.spawnsystem.grenade_influencer_radius, level.spawnsystem.grenade_influencer_score, weapon_team_mask, "grenade,r,s", get_score_curve_index( level.spawnsystem.grenade_influencer_score_curve ), timeout, grenade ); + } + + pixendevent(); +} + +create_napalm_fire_influencers( point, direction, parent_team, duration ) +{ + timeout = duration; + weapon_team_mask = 0; + offset = vectorscale( anglestoforward( direction ), 1100 ); + addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point + 2.0 * offset, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); + addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point + offset, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); + addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); + addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point - offset, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); +} + +create_auto_turret_influencer( point, parent_team, angles ) +{ + if ( !level.teambased ) + weapon_team_mask = level.spawnsystem.ispawn_teammask_free; + else + weapon_team_mask = getotherteamsmask( parent_team ); + + projected_point = point + vectorscale( anglestoforward( angles ), level.spawnsystem.auto_turret_influencer_radius * 0.7 ); + influencerid = addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, projected_point, level.spawnsystem.auto_turret_influencer_radius, level.spawnsystem.auto_turret_influencer_score, weapon_team_mask, "auto_turret,r,s", get_score_curve_index( level.spawnsystem.auto_turret_influencer_score_curve ) ); + return influencerid; +} + +create_dog_influencers() +{ + if ( !level.teambased ) + dog_enemy_team_mask = level.spawnsystem.ispawn_teammask_free; + else + dog_enemy_team_mask = getotherteamsmask( self.aiteam ); + + addsphereinfluencer( level.spawnsystem.einfluencer_type_dog, self.origin, level.spawnsystem.dog_influencer_radius, level.spawnsystem.dog_influencer_score, dog_enemy_team_mask, "dog,r,s", get_score_curve_index( level.spawnsystem.dog_influencer_score_curve ), 0, self ); +} + +create_helicopter_influencers( parent_team ) +{ + if ( !level.teambased ) + team_mask = level.spawnsystem.ispawn_teammask_free; + else + team_mask = getotherteamsmask( parent_team ); + + self.influencer_helicopter_cylinder = addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, ( 0, 0, 0 ), ( 0, 0, 0 ), level.spawnsystem.helicopter_influencer_radius, level.spawnsystem.helicopter_influencer_length, level.spawnsystem.helicopter_influencer_score, team_mask, "helicopter,r,s", get_score_curve_index( level.spawnsystem.helicopter_influencer_score_curve ), 0, self ); +} + +remove_helicopter_influencers() +{ + if ( isdefined( self.influencer_helicopter_cylinder ) ) + removeinfluencer( self.influencer_helicopter_cylinder ); + + self.influencer_helicopter_cylinder = undefined; +} + +create_tvmissile_influencers( parent_team ) +{ + if ( !level.teambased || is_hardcore() ) + team_mask = level.spawnsystem.ispawn_teammask_free; + else + team_mask = getotherteamsmask( parent_team ); + + self.influencer_tvmissile_cylinder = addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, ( 0, 0, 0 ), ( 0, 0, 0 ), level.spawnsystem.tvmissile_influencer_radius, level.spawnsystem.tvmissile_influencer_length, level.spawnsystem.tvmissile_influencer_score, team_mask, "tvmissile,r,s", get_score_curve_index( level.spawnsystem.tvmissile_influencer_score_curve ), 0, self ); +} + +remove_tvmissile_influencers() +{ + if ( isdefined( self.influencer_tvmissile_cylinder ) ) + removeinfluencer( self.influencer_tvmissile_cylinder ); + + self.influencer_tvmissile_cylinder = undefined; +} + +create_artillery_influencers( point, radius ) +{ + weapon_team_mask = 0; + + if ( radius < 0 ) + thisradius = level.spawnsystem.artillery_influencer_radius; + else + thisradius = radius; + + return addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, point + vectorscale( ( 0, 0, -1 ), 2000.0 ), ( 1, 0, 0 ), ( 0, 0, 1 ), thisradius, 5000, level.spawnsystem.artillery_influencer_score, weapon_team_mask, "artillery,s,r", get_score_curve_index( level.spawnsystem.artillery_influencer_score_curve ), 7 ); +} + +create_vehicle_influencers() +{ + weapon_team_mask = 0; + vehicleradius = 144; + cylinderlength = level.spawnsystem.vehicle_influencer_lead_seconds; + up = ( 0, 0, 1 ); + forward = ( 1, 0, 0 ); + cylinder_forward = up; + cylinder_up = forward; + return addcylinderinfluencer( level.spawnsystem.einfluencer_type_vehicle, self.origin, cylinder_forward, cylinder_up, vehicleradius, cylinderlength, level.spawnsystem.vehicle_influencer_score, weapon_team_mask, "vehicle,s", get_score_curve_index( level.spawnsystem.vehicle_influencer_score_curve ), 0, self ); +} + +create_rcbomb_influencers( team ) +{ + if ( !level.teambased ) + other_team_mask = level.spawnsystem.ispawn_teammask_free; + else + other_team_mask = getotherteamsmask( team ); + + return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.rcbomb_influencer_radius, level.spawnsystem.rcbomb_influencer_score, other_team_mask, "rcbomb,r,s", get_score_curve_index( level.spawnsystem.rcbomb_influencer_score_curve ), 0, self ); +} + +create_qrdrone_influencers( team ) +{ + if ( !level.teambased ) + other_team_mask = level.spawnsystem.ispawn_teammask_free; + else + other_team_mask = getotherteamsmask( team ); + + self.influencer_qrdrone_cylinder = addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, ( 0, 0, 0 ), ( 0, 0, 0 ), level.spawnsystem.qrdrone_cylinder_influencer_radius, level.spawnsystem.qrdrone_cylinder_influencer_length, level.spawnsystem.qrdrone_cylinder_influencer_score, other_team_mask, "qrdrone_cyl,r,s", get_score_curve_index( level.spawnsystem.qrdrone_cylinder_influencer_score_curve ), 0, self ); + return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.qrdrone_influencer_radius, level.spawnsystem.qrdrone_influencer_score, other_team_mask, "qrdrone,r,s", get_score_curve_index( level.spawnsystem.qrdrone_influencer_score_curve ), 0, self ); +} + +create_aitank_influencers( team ) +{ + if ( !level.teambased ) + other_team_mask = level.spawnsystem.ispawn_teammask_free; + else + other_team_mask = getotherteamsmask( team ); + + return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.aitank_influencer_radius, level.spawnsystem.aitank_influencer_score, other_team_mask, "aitank,r,s", get_score_curve_index( level.spawnsystem.aitank_influencer_score_curve ), 0, self ); +} + +create_pegasus_influencer( origin, team ) +{ + if ( !level.teambased ) + other_team_mask = level.spawnsystem.ispawn_teammask_free; + else + other_team_mask = getotherteamsmask( team ); + + return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, origin, level.spawnsystem.pegasus_influencer_radius, level.spawnsystem.pegasus_influencer_score, other_team_mask, "pegasus,r,s", get_score_curve_index( level.spawnsystem.pegasus_influencer_score_curve ), 0 ); +} + +create_map_placed_influencers() +{ + staticinfluencerents = getentarray( "mp_uspawn_influencer", "classname" ); + + for ( i = 0; i < staticinfluencerents.size; i++ ) + { + staticinfluencerent = staticinfluencerents[i]; + + if ( isdefined( staticinfluencerent.script_gameobjectname ) && staticinfluencerent.script_gameobjectname == "twar" ) + continue; + + create_map_placed_influencer( staticinfluencerent ); + } +} + +create_map_placed_influencer( influencer_entity, optional_score_override ) +{ + influencer_id = -1; + + if ( isdefined( influencer_entity.script_shape ) && isdefined( influencer_entity.script_score ) && isdefined( influencer_entity.script_score_curve ) ) + { + switch ( influencer_entity.script_shape ) + { + case "sphere": + if ( isdefined( influencer_entity.radius ) ) + { + if ( isdefined( optional_score_override ) ) + score = optional_score_override; + else + score = influencer_entity.script_score; + + influencer_id = addsphereinfluencer( level.spawnsystem.einfluencer_type_game_mode, influencer_entity.origin, influencer_entity.radius, score, getteammask( influencer_entity.script_team ), "*map_defined", get_score_curve_index( influencer_entity.script_score_curve ) ); + } + else + { +/# + assertmsg( "Radiant-placed sphere spawn influencers require 'radius' parameter" ); +#/ + } + + break; + case "cylinder": + if ( isdefined( influencer_entity.radius ) && isdefined( influencer_entity.height ) ) + { + if ( isdefined( optional_score_override ) ) + score = optional_score_override; + else + score = influencer_entity.script_score; + + influencer_id = addcylinderinfluencer( level.spawnsystem.einfluencer_type_game_mode, influencer_entity.origin, anglestoforward( influencer_entity.angles ), anglestoup( influencer_entity.angles ), influencer_entity.radius, influencer_entity.height, score, getteammask( influencer_entity.script_team ), "*map_defined", get_score_curve_index( influencer_entity.script_score_curve ) ); + } + else + { +/# + assertmsg( "Radiant-placed cylinder spawn influencers require 'radius' and 'height' parameters" ); +#/ + } + + break; + default: +/# + assertmsg( "Unsupported script_shape value (\"" + influencer_entity.script_shape + "\") for unified spawning system static influencer. Supported shapes are \"cylinder\" and \"sphere\"." ); +#/ + break; + } + } + else + { +/# + assertmsg( "Radiant-placed spawn influencers require 'script_shape', 'script_score' and 'script_score_curve' parameters" ); +#/ + } + + return influencer_id; +} + +create_enemy_spawned_influencers( origin, team ) +{ + if ( !level.teambased ) + other_team_mask = level.spawnsystem.ispawn_teammask_free; + else + other_team_mask = getotherteamsmask( team ); + + return addsphereinfluencer( level.spawnsystem.einfluencer_type_enemy_spawned, origin, level.spawnsystem.enemy_spawned_influencer_radius, level.spawnsystem.enemy_spawned_influencer_score, other_team_mask, "enemy_spawned,r,s", get_score_curve_index( level.spawnsystem.enemy_spawned_influencer_score_curve ), 7 ); +} + +updateallspawnpoints() +{ + foreach ( team in level.teams ) + gatherspawnentities( team ); + + clearspawnpoints(); + + if ( level.teambased ) + { + foreach ( team in level.teams ) + addspawnpoints( team, level.unified_spawn_points[team].a ); + } + else + { + foreach ( team in level.teams ) + addspawnpoints( "free", level.unified_spawn_points[team].a ); + } + + remove_unused_spawn_entities(); +} + +initialize_player_spawning_dvars() +{ +/# + reset_dvars = 1; + + while ( true ) + { + get_player_spawning_dvars( reset_dvars ); + reset_dvars = 0; + wait 2; + } +#/ +} + +get_player_spawning_dvars( reset_dvars ) +{ + k_player_height = get_player_height(); + player_height_times_10 = "" + 10.0 * k_player_height; + ss = level.spawnsystem; + player_influencer_radius = 15.0 * k_player_height; + player_influencer_score = 150.0; + dog_influencer_radius = 10.0 * k_player_height; + dog_influencer_score = 150.0; + ss.script_based_influencer_system = set_dvar_int_if_unset( "scr_script_based_influencer_system", "0", reset_dvars ); + ss.randomness_range = set_dvar_float_if_unset( "scr_spawn_randomness_range", "10", reset_dvars ); + ss.objective_facing_bonus = set_dvar_float_if_unset( "scr_spawn_objective_facing_bonus", "50", reset_dvars ); + ss.friend_weak_influencer_score = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_score", "10", reset_dvars ); + ss.friend_weak_influencer_score_curve = set_dvar_if_unset( "scr_spawn_friend_weak_influencer_score_curve", "steep", reset_dvars ); + ss.friend_weak_influencer_radius = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_radius", player_height_times_10, reset_dvars ); + ss.enemy_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_score", "-150", reset_dvars ); + ss.enemy_influencer_score_curve = set_dvar_if_unset( "scr_spawn_enemy_influencer_score_curve", "steep", reset_dvars ); + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2600", reset_dvars ); + ss.dead_friend_influencer_timeout_seconds = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_timeout_seconds", "15", reset_dvars ); + ss.dead_friend_influencer_count = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_count", "7", reset_dvars ); + ss.dead_friend_influencer_score = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_score", "-100", reset_dvars ); + ss.dead_friend_influencer_score_curve = set_dvar_if_unset( "scr_spawn_dead_friend_influencer_score_curve", "steep", reset_dvars ); + ss.dead_friend_influencer_radius = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_radius", player_height_times_10, reset_dvars ); + ss.vehicle_influencer_score = set_dvar_float_if_unset( "scr_spawn_vehicle_influencer_score", "-50", reset_dvars ); + ss.vehicle_influencer_score_curve = set_dvar_if_unset( "scr_spawn_vehicle_influencer_score_curve", "linear", reset_dvars ); + ss.vehicle_influencer_lead_seconds = set_dvar_float_if_unset( "scr_spawn_vehicle_influencer_lead_seconds", "3", reset_dvars ); + ss.dog_influencer_score = set_dvar_float_if_unset( "scr_spawn_dog_influencer_score", "-150", reset_dvars ); + ss.dog_influencer_score_curve = set_dvar_if_unset( "scr_spawn_dog_influencer_score_curve", "steep", reset_dvars ); + ss.dog_influencer_radius = set_dvar_float_if_unset( "scr_spawn_dog_influencer_radius", "" + 15.0 * k_player_height, reset_dvars ); + ss.artillery_influencer_score = set_dvar_float_if_unset( "scr_spawn_artillery_influencer_score", "-600", reset_dvars ); + ss.artillery_influencer_score_curve = set_dvar_if_unset( "scr_spawn_artillery_influencer_score_curve", "linear", reset_dvars ); + ss.artillery_influencer_radius = set_dvar_float_if_unset( "scr_spawn_artillery_influencer_radius", "1200", reset_dvars ); + ss.grenade_influencer_score = set_dvar_float_if_unset( "scr_spawn_grenade_influencer_score", "-300", reset_dvars ); + ss.grenade_influencer_score_curve = set_dvar_if_unset( "scr_spawn_grenade_influencer_score_curve", "linear", reset_dvars ); + ss.grenade_influencer_radius = set_dvar_float_if_unset( "scr_spawn_grenade_influencer_radius", "" + 8.0 * k_player_height, reset_dvars ); + ss.grenade_endpoint_influencer_score = set_dvar_float_if_unset( "scr_spawn_grenade_endpoint_influencer_score", "-300", reset_dvars ); + ss.grenade_endpoint_influencer_score_curve = set_dvar_if_unset( "scr_spawn_grenade_endpoint_influencer_score_curve", "linear", reset_dvars ); + ss.grenade_endpoint_influencer_radius = set_dvar_float_if_unset( "scr_spawn_grenade_endpoint_influencer_radius", "" + 8.0 * k_player_height, reset_dvars ); + ss.claymore_influencer_score = set_dvar_float_if_unset( "scr_spawn_claymore_influencer_score", "-150", reset_dvars ); + ss.claymore_influencer_score_curve = set_dvar_if_unset( "scr_spawn_claymore_influencer_score_curve", "steep", reset_dvars ); + ss.claymore_influencer_radius = set_dvar_float_if_unset( "scr_spawn_claymore_influencer_radius", "" + 9.0 * k_player_height, reset_dvars ); + ss.napalm_influencer_score = set_dvar_float_if_unset( "scr_spawn_napalm_influencer_score", "-500", reset_dvars ); + ss.napalm_influencer_score_curve = set_dvar_if_unset( "scr_spawn_napalm_influencer_score_curve", "linear", reset_dvars ); + ss.napalm_influencer_radius = set_dvar_float_if_unset( "scr_spawn_napalm_influencer_radius", "" + 750, reset_dvars ); + ss.auto_turret_influencer_score = set_dvar_float_if_unset( "scr_spawn_auto_turret_influencer_score", "-650", reset_dvars ); + ss.auto_turret_influencer_score_curve = set_dvar_if_unset( "scr_spawn_auto_turret_influencer_score_curve", "linear", reset_dvars ); + ss.auto_turret_influencer_radius = set_dvar_float_if_unset( "scr_spawn_auto_turret_influencer_radius", "" + 1200, reset_dvars ); + ss.rcbomb_influencer_score = set_dvar_float_if_unset( "scr_spawn_rcbomb_influencer_score", "-200", reset_dvars ); + ss.rcbomb_influencer_score_curve = set_dvar_if_unset( "scr_spawn_rcbomb_influencer_score_curve", "steep", reset_dvars ); + ss.rcbomb_influencer_radius = set_dvar_float_if_unset( "scr_spawn_rcbomb_influencer_radius", "" + 25.0 * k_player_height, reset_dvars ); + ss.qrdrone_influencer_score = set_dvar_float_if_unset( "scr_spawn_qrdrone_influencer_score", "-200", reset_dvars ); + ss.qrdrone_influencer_score_curve = set_dvar_if_unset( "scr_spawn_qrdrone_influencer_score_curve", "steep", reset_dvars ); + ss.qrdrone_influencer_radius = set_dvar_float_if_unset( "scr_spawn_qrdrone_influencer_radius", "" + 25.0 * k_player_height, reset_dvars ); + ss.qrdrone_cylinder_influencer_score = set_dvar_float_if_unset( "scr_spawn_qrdrone_cylinder_influencer_score", "-300", reset_dvars ); + ss.qrdrone_cylinder_influencer_score_curve = set_dvar_if_unset( "scr_spawn_qrdrone_cylinder_influencer_score_curve", "linear", reset_dvars ); + ss.qrdrone_cylinder_influencer_radius = set_dvar_float_if_unset( "scr_spawn_qrdrone_cylinder_influencer_radius", 1000, reset_dvars ); + ss.qrdrone_cylinder_influencer_length = set_dvar_float_if_unset( "scr_spawn_qrdrone_cylinder_influencer_length", 2000, reset_dvars ); + ss.aitank_influencer_score = set_dvar_float_if_unset( "scr_spawn_aitank_influencer_score", "-200", reset_dvars ); + ss.aitank_influencer_score_curve = set_dvar_if_unset( "scr_spawn_aitank_influencer_score_curve", "linear", reset_dvars ); + ss.aitank_influencer_radius = set_dvar_float_if_unset( "scr_spawn_aitank_influencer_radius", "" + 25.0 * k_player_height, reset_dvars ); + ss.enemy_spawned_influencer_score_curve = set_dvar_if_unset( "scr_spawn_enemy_spawned_influencer_score_curve", "constant", reset_dvars ); + + if ( level.teambased ) + { + ss.enemy_spawned_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_score", "-200", reset_dvars ); + ss.enemy_spawned_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_radius", "" + 1100, reset_dvars ); + } + else + { + ss.enemy_spawned_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_score", "-100", reset_dvars ); + ss.enemy_spawned_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_radius", "" + 400, reset_dvars ); + } + + ss.helicopter_influencer_score = set_dvar_float_if_unset( "scr_spawn_helicopter_influencer_score", "-500", reset_dvars ); + ss.helicopter_influencer_score_curve = set_dvar_if_unset( "scr_spawn_helicopter_influencer_score_curve", "linear", reset_dvars ); + ss.helicopter_influencer_radius = set_dvar_float_if_unset( "scr_spawn_helicopter_influencer_radius", "" + 2000, reset_dvars ); + ss.helicopter_influencer_length = set_dvar_float_if_unset( "scr_spawn_helicopter_influencer_length", "" + 3500, reset_dvars ); + ss.tvmissile_influencer_score = set_dvar_float_if_unset( "scr_spawn_tvmissile_influencer_score", "-400", reset_dvars ); + ss.tvmissile_influencer_score_curve = set_dvar_if_unset( "scr_spawn_tvmissile_influencer_score_curve", "linear", reset_dvars ); + ss.tvmissile_influencer_radius = set_dvar_float_if_unset( "scr_spawn_tvmissile_influencer_radius", "" + 2000, reset_dvars ); + ss.tvmissile_influencer_length = set_dvar_float_if_unset( "scr_spawn_tvmissile_influencer_length", "" + 3000, reset_dvars ); + ss.pegasus_influencer_score = set_dvar_float_if_unset( "scr_spawn_pegasus_influencer_score", "-250", reset_dvars ); + ss.pegasus_influencer_score_curve = set_dvar_if_unset( "scr_spawn_pegasus_influencer_score_curve", "linear", reset_dvars ); + ss.pegasus_influencer_radius = set_dvar_float_if_unset( "scr_spawn_pegasus_influencer_radius", "" + 20.0 * k_player_height, reset_dvars ); + + if ( !isdefined( ss.unifiedsideswitching ) ) + ss.unifiedsideswitching = 1; + + set_dvar_int_if_unset( "spawnsystem_allow_non_team_spawns", "0", reset_dvars ); + [[ level.gamemodespawndvars ]]( reset_dvars ); + + if ( isdefined( level.levelspawndvars ) ) + [[ level.levelspawndvars ]]( reset_dvars ); + + setspawnpointrandomvariation( ss.randomness_range ); +} + +level_use_unified_spawning( use ) +{ + +} + +onspawnplayer_unified( predictedspawn = 0 ) +{ +/# + if ( getdvarint( "scr_spawn_point_test_mode" ) != 0 ) + { + spawn_point = get_debug_spawnpoint( self ); + self spawn( spawn_point.origin, spawn_point.angles ); + return; + } +#/ + use_new_spawn_system = 0; + initial_spawn = 1; + + if ( isdefined( self.uspawn_already_spawned ) ) + initial_spawn = !self.uspawn_already_spawned; + + if ( level.usestartspawns ) + use_new_spawn_system = 0; + + if ( level.gametype == "sd" ) + use_new_spawn_system = 0; + + set_dvar_if_unset( "scr_spawn_force_unified", "0" ); + [[ level.onspawnplayer ]]( predictedspawn ); + + if ( !predictedspawn ) + self.uspawn_already_spawned = 1; +} + +getspawnpoint( player_entity, predictedspawn = 0 ) +{ + if ( level.teambased ) + { + point_team = player_entity.pers["team"]; + influencer_team = player_entity.pers["team"]; + } + else + { + point_team = "free"; + influencer_team = "free"; + } + + if ( level.teambased && isdefined( game["switchedsides"] ) && game["switchedsides"] && level.spawnsystem.unifiedsideswitching ) + point_team = getotherteam( point_team ); + + best_spawn_entity = get_best_spawnpoint( point_team, influencer_team, player_entity, predictedspawn ); + + if ( !predictedspawn ) + player_entity.last_spawn_origin = best_spawn_entity.origin; + + return best_spawn_entity; +} + +get_debug_spawnpoint( player ) +{ + if ( level.teambased ) + team = player.pers["team"]; + else + team = "free"; + + index = level.test_spawn_point_index; + level.test_spawn_point_index++; + + if ( team == "free" ) + { + spawn_counts = 0; + + foreach ( team in level.teams ) + spawn_counts += level.unified_spawn_points[team].a.size; + + if ( level.test_spawn_point_index >= spawn_counts ) + level.test_spawn_point_index = 0; + + count = 0; + + foreach ( team in level.teams ) + { + size = level.unified_spawn_points[team].a.size; + + if ( level.test_spawn_point_index < count + size ) + return level.unified_spawn_points[team].a[level.test_spawn_point_index - count]; + + count += size; + } + } + else + { + if ( level.test_spawn_point_index >= level.unified_spawn_points[team].a.size ) + level.test_spawn_point_index = 0; + + return level.unified_spawn_points[team].a[level.test_spawn_point_index]; + } +} + +get_best_spawnpoint( point_team, influencer_team, player, predictedspawn ) +{ + if ( level.teambased ) + vis_team_mask = getotherteamsmask( player.pers["team"] ); + else + vis_team_mask = level.spawnsystem.ispawn_teammask_free; + + scored_spawn_points = getsortedspawnpoints( point_team, influencer_team, vis_team_mask, player, predictedspawn ); + assert( scored_spawn_points.size > 0 ); + assert( scored_spawn_points.size == 1 ); + + if ( !predictedspawn ) + bbprint( "mpspawnpointsused", "reason %s x %d y %d z %d", "point used", scored_spawn_points[0].origin ); + + return scored_spawn_points[0]; +} + +gatherspawnentities( player_team ) +{ + if ( !isdefined( level.unified_spawn_points ) ) + level.unified_spawn_points = []; + else if ( isdefined( level.unified_spawn_points[player_team] ) ) + return level.unified_spawn_points[player_team]; + + spawn_entities_s = spawn_array_struct(); + spawn_entities_s.a = getentarray( "mp_uspawn_point", "classname" ); + + if ( !isdefined( spawn_entities_s.a ) ) + spawn_entities_s.a = []; + + legacy_spawn_points = maps\mp\gametypes_zm\_spawnlogic::getteamspawnpoints( player_team ); + + for ( legacy_spawn_index = 0; legacy_spawn_index < legacy_spawn_points.size; legacy_spawn_index++ ) + spawn_entities_s.a[spawn_entities_s.a.size] = legacy_spawn_points[legacy_spawn_index]; + + level.unified_spawn_points[player_team] = spawn_entities_s; + return spawn_entities_s; +} + +is_hardcore() +{ + return isdefined( level.hardcoremode ) && level.hardcoremode; +} + +teams_have_enmity( team1, team2 ) +{ + if ( !isdefined( team1 ) || !isdefined( team2 ) || level.gametype == "dm" ) + return 1; + + return team1 != "neutral" && team2 != "neutral" && team1 != team2; +} + +remove_unused_spawn_entities() +{ + spawn_entity_types = []; + spawn_entity_types[spawn_entity_types.size] = "mp_dm_spawn"; + spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn_allies_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn_axis_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn"; + spawn_entity_types[spawn_entity_types.size] = "mp_ctf_spawn_allies_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_ctf_spawn_axis_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_ctf_spawn_allies"; + spawn_entity_types[spawn_entity_types.size] = "mp_ctf_spawn_axis"; + spawn_entity_types[spawn_entity_types.size] = "mp_dom_spawn_allies_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_dom_spawn_axis_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_dom_spawn"; + spawn_entity_types[spawn_entity_types.size] = "mp_sab_spawn_allies_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_sab_spawn_axis_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_sab_spawn_allies"; + spawn_entity_types[spawn_entity_types.size] = "mp_sab_spawn_axis"; + spawn_entity_types[spawn_entity_types.size] = "mp_sd_spawn_attacker"; + spawn_entity_types[spawn_entity_types.size] = "mp_sd_spawn_defender"; + spawn_entity_types[spawn_entity_types.size] = "mp_twar_spawn_axis_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_twar_spawn_allies_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_twar_spawn"; + + for ( i = 0; i < spawn_entity_types.size; i++ ) + { + if ( spawn_point_class_name_being_used( spawn_entity_types[i] ) ) + continue; + + spawnpoints = maps\mp\gametypes_zm\_spawnlogic::getspawnpointarray( spawn_entity_types[i] ); + delete_all_spawns( spawnpoints ); + } +} + +delete_all_spawns( spawnpoints ) +{ + for ( i = 0; i < spawnpoints.size; i++ ) + spawnpoints[i] delete(); +} + +spawn_point_class_name_being_used( name ) +{ + if ( !isdefined( level.spawn_point_class_names ) ) + return false; + + for ( i = 0; i < level.spawn_point_class_names.size; i++ ) + { + if ( level.spawn_point_class_names[i] == name ) + return true; + } + + return false; +} + +codecallback_updatespawnpoints() +{ + foreach ( team in level.teams ) + maps\mp\gametypes_zm\_spawnlogic::rebuildspawnpoints( team ); + + level.unified_spawn_points = undefined; + updateallspawnpoints(); +} + +initialspawnprotection( specialtyname, spawnmonitorspeed ) +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( !isdefined( level.spawnprotectiontime ) || level.spawnprotectiontime == 0 ) + return; + + if ( specialtyname == "specialty_nottargetedbyairsupport" ) + { + self.specialty_nottargetedbyairsupport = 1; + wait( level.spawnprotectiontime ); + self.specialty_nottargetedbyairsupport = undefined; + } + else if ( !self hasperk( specialtyname ) ) + { + self setperk( specialtyname ); + wait( level.spawnprotectiontime ); + self unsetperk( specialtyname ); + } +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_spawnlogic.gsc b/ZM/Core/maps/mp/gametypes_zm/_spawnlogic.gsc new file mode 100644 index 0000000..2fd8801 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_spawnlogic.gsc @@ -0,0 +1,2157 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_callbacksetup; +#include maps\mp\gametypes_zm\_gameobjects; +#include maps\mp\gametypes_zm\_spawnlogic; + +onplayerconnect() +{ + for (;;) + level waittill( "connected", player ); +} + +findboxcenter( mins, maxs ) +{ + center = ( 0, 0, 0 ); + center = maxs - mins; + center = ( center[0] / 2, center[1] / 2, center[2] / 2 ) + mins; + return center; +} + +expandmins( mins, point ) +{ + if ( mins[0] > point[0] ) + mins = ( point[0], mins[1], mins[2] ); + + if ( mins[1] > point[1] ) + mins = ( mins[0], point[1], mins[2] ); + + if ( mins[2] > point[2] ) + mins = ( mins[0], mins[1], point[2] ); + + return mins; +} + +expandmaxs( maxs, point ) +{ + if ( maxs[0] < point[0] ) + maxs = ( point[0], maxs[1], maxs[2] ); + + if ( maxs[1] < point[1] ) + maxs = ( maxs[0], point[1], maxs[2] ); + + if ( maxs[2] < point[2] ) + maxs = ( maxs[0], maxs[1], point[2] ); + + return maxs; +} + +addspawnpointsinternal( team, spawnpointname ) +{ + oldspawnpoints = []; + + if ( level.teamspawnpoints[team].size ) + oldspawnpoints = level.teamspawnpoints[team]; + + level.teamspawnpoints[team] = getspawnpointarray( spawnpointname ); + + if ( !isdefined( level.spawnpoints ) ) + level.spawnpoints = []; + + for ( index = 0; index < level.teamspawnpoints[team].size; index++ ) + { + spawnpoint = level.teamspawnpoints[team][index]; + + if ( !isdefined( spawnpoint.inited ) ) + { + spawnpoint spawnpointinit(); + level.spawnpoints[level.spawnpoints.size] = spawnpoint; + } + } + + for ( index = 0; index < oldspawnpoints.size; index++ ) + { + origin = oldspawnpoints[index].origin; + level.spawnmins = expandmins( level.spawnmins, origin ); + level.spawnmaxs = expandmaxs( level.spawnmaxs, origin ); + level.teamspawnpoints[team][level.teamspawnpoints[team].size] = oldspawnpoints[index]; + } + + if ( !level.teamspawnpoints[team].size ) + { +/# + println( "^1ERROR: No " + spawnpointname + " spawnpoints found in level!" ); +#/ + maps\mp\gametypes_zm\_callbacksetup::abortlevel(); + wait 1; + return; + } +} + +clearspawnpoints() +{ + foreach ( team in level.teams ) + level.teamspawnpoints[team] = []; + + level.spawnpoints = []; + level.unified_spawn_points = undefined; +} + +addspawnpoints( team, spawnpointname ) +{ + addspawnpointclassname( spawnpointname ); + addspawnpointteamclassname( team, spawnpointname ); + addspawnpointsinternal( team, spawnpointname ); +} + +rebuildspawnpoints( team ) +{ + level.teamspawnpoints[team] = []; + + for ( index = 0; index < level.spawn_point_team_class_names[team].size; index++ ) + addspawnpointsinternal( team, level.spawn_point_team_class_names[team][index] ); +} + +placespawnpoints( spawnpointname ) +{ + addspawnpointclassname( spawnpointname ); + spawnpoints = getspawnpointarray( spawnpointname ); +/# + if ( !isdefined( level.extraspawnpointsused ) ) + level.extraspawnpointsused = []; +#/ + if ( !spawnpoints.size ) + { +/# + println( "^1No " + spawnpointname + " spawnpoints found in level!" ); +#/ + maps\mp\gametypes_zm\_callbacksetup::abortlevel(); + wait 1; + return; + } + + for ( index = 0; index < spawnpoints.size; index++ ) + { + spawnpoints[index] spawnpointinit(); +/# + spawnpoints[index].fakeclassname = spawnpointname; + level.extraspawnpointsused[level.extraspawnpointsused.size] = spawnpoints[index]; +#/ + } +} + +dropspawnpoints( spawnpointname ) +{ + spawnpoints = getspawnpointarray( spawnpointname ); + + if ( !spawnpoints.size ) + { +/# + println( "^1No " + spawnpointname + " spawnpoints found in level!" ); +#/ + return; + } + + for ( index = 0; index < spawnpoints.size; index++ ) + spawnpoints[index] placespawnpoint(); +} + +addspawnpointclassname( spawnpointclassname ) +{ + if ( !isdefined( level.spawn_point_class_names ) ) + level.spawn_point_class_names = []; + + level.spawn_point_class_names[level.spawn_point_class_names.size] = spawnpointclassname; +} + +addspawnpointteamclassname( team, spawnpointclassname ) +{ + level.spawn_point_team_class_names[team][level.spawn_point_team_class_names[team].size] = spawnpointclassname; +} + +getspawnpointarray( classname ) +{ + spawnpoints = getentarray( classname, "classname" ); + + if ( !isdefined( level.extraspawnpoints ) || !isdefined( level.extraspawnpoints[classname] ) ) + return spawnpoints; + + for ( i = 0; i < level.extraspawnpoints[classname].size; i++ ) + spawnpoints[spawnpoints.size] = level.extraspawnpoints[classname][i]; + + return spawnpoints; +} + +spawnpointinit() +{ + spawnpoint = self; + origin = spawnpoint.origin; + + if ( !level.spawnminsmaxsprimed ) + { + level.spawnmins = origin; + level.spawnmaxs = origin; + level.spawnminsmaxsprimed = 1; + } + else + { + level.spawnmins = expandmins( level.spawnmins, origin ); + level.spawnmaxs = expandmaxs( level.spawnmaxs, origin ); + } + + spawnpoint placespawnpoint(); + spawnpoint.forward = anglestoforward( spawnpoint.angles ); + spawnpoint.sighttracepoint = spawnpoint.origin + vectorscale( ( 0, 0, 1 ), 50.0 ); + spawnpoint.inited = 1; +} + +getteamspawnpoints( team ) +{ + return level.teamspawnpoints[team]; +} + +getspawnpoint_final( spawnpoints, useweights ) +{ + bestspawnpoint = undefined; + + if ( !isdefined( spawnpoints ) || spawnpoints.size == 0 ) + return undefined; + + if ( !isdefined( useweights ) ) + useweights = 1; + + if ( useweights ) + { + bestspawnpoint = getbestweightedspawnpoint( spawnpoints ); + thread spawnweightdebug( spawnpoints ); + } + else + { + for ( i = 0; i < spawnpoints.size; i++ ) + { + if ( isdefined( self.lastspawnpoint ) && self.lastspawnpoint == spawnpoints[i] ) + continue; + + if ( positionwouldtelefrag( spawnpoints[i].origin ) ) + continue; + + bestspawnpoint = spawnpoints[i]; + break; + } + + if ( !isdefined( bestspawnpoint ) ) + { + if ( isdefined( self.lastspawnpoint ) && !positionwouldtelefrag( self.lastspawnpoint.origin ) ) + { + for ( i = 0; i < spawnpoints.size; i++ ) + { + if ( spawnpoints[i] == self.lastspawnpoint ) + { + bestspawnpoint = spawnpoints[i]; + break; + } + } + } + } + } + + if ( !isdefined( bestspawnpoint ) ) + { + if ( useweights ) + bestspawnpoint = spawnpoints[randomint( spawnpoints.size )]; + else + bestspawnpoint = spawnpoints[0]; + } + + self finalizespawnpointchoice( bestspawnpoint ); +/# + self storespawndata( spawnpoints, useweights, bestspawnpoint ); +#/ + return bestspawnpoint; +} + +finalizespawnpointchoice( spawnpoint ) +{ + time = gettime(); + self.lastspawnpoint = spawnpoint; + self.lastspawntime = time; + spawnpoint.lastspawnedplayer = self; + spawnpoint.lastspawntime = time; +} + +getbestweightedspawnpoint( spawnpoints ) +{ + maxsighttracedspawnpoints = 3; + + for ( try = 0; try <= maxsighttracedspawnpoints; try++ ) + { + bestspawnpoints = []; + bestweight = undefined; + bestspawnpoint = undefined; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + if ( !isdefined( bestweight ) || spawnpoints[i].weight > bestweight ) + { + if ( positionwouldtelefrag( spawnpoints[i].origin ) ) + continue; + + bestspawnpoints = []; + bestspawnpoints[0] = spawnpoints[i]; + bestweight = spawnpoints[i].weight; + continue; + } + + if ( spawnpoints[i].weight == bestweight ) + { + if ( positionwouldtelefrag( spawnpoints[i].origin ) ) + continue; + + bestspawnpoints[bestspawnpoints.size] = spawnpoints[i]; + } + } + + if ( bestspawnpoints.size == 0 ) + return undefined; + + bestspawnpoint = bestspawnpoints[randomint( bestspawnpoints.size )]; + + if ( try == maxsighttracedspawnpoints ) + return bestspawnpoint; + + if ( isdefined( bestspawnpoint.lastsighttracetime ) && bestspawnpoint.lastsighttracetime == gettime() ) + return bestspawnpoint; + + if ( !lastminutesighttraces( bestspawnpoint ) ) + return bestspawnpoint; + + penalty = getlospenalty(); +/# + if ( level.storespawndata || level.debugspawning ) + bestspawnpoint.spawndata[bestspawnpoint.spawndata.size] = "Last minute sight trace: -" + penalty; +#/ + bestspawnpoint.weight -= penalty; + bestspawnpoint.lastsighttracetime = gettime(); + } +} + +checkbad( spawnpoint ) +{ +/# + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( !isalive( player ) || player.sessionstate != "playing" ) + continue; + + if ( level.teambased && player.team == self.team ) + continue; + + losexists = bullettracepassed( player.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), spawnpoint.sighttracepoint, 0, undefined ); + + if ( losexists ) + thread badspawnline( spawnpoint.sighttracepoint, player.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), self.name, player.name ); + } +#/ +} + +badspawnline( start, end, name1, name2 ) +{ +/# + dist = distance( start, end ); + + for ( i = 0; i < 200; i++ ) + { + line( start, end, ( 1, 0, 0 ) ); + print3d( start, "Bad spawn! " + name1 + ", dist = " + dist ); + print3d( end, name2 ); + wait 0.05; + } +#/ +} + +storespawndata( spawnpoints, useweights, bestspawnpoint ) +{ +/# + if ( !isdefined( level.storespawndata ) || !level.storespawndata ) + return; + + level.storespawndata = getdvarint( "scr_recordspawndata" ); + + if ( !level.storespawndata ) + return; + + if ( !isdefined( level.spawnid ) ) + { + level.spawngameid = randomint( 100 ); + level.spawnid = 0; + } + + if ( bestspawnpoint.classname == "mp_global_intermission" ) + return; + + level.spawnid++; + file = openfile( "spawndata.txt", "append" ); + fprintfields( file, level.spawngameid + "." + level.spawnid + "," + spawnpoints.size + "," + self.name ); + + for ( i = 0; i < spawnpoints.size; i++ ) + { + str = vectostr( spawnpoints[i].origin ) + ","; + + if ( spawnpoints[i] == bestspawnpoint ) + str += "1,"; + else + str += "0,"; + + if ( !useweights ) + str += "0,"; + else + str += ( spawnpoints[i].weight + "," ); + + if ( !isdefined( spawnpoints[i].spawndata ) ) + spawnpoints[i].spawndata = []; + + if ( !isdefined( spawnpoints[i].sightchecks ) ) + spawnpoints[i].sightchecks = []; + + str += ( spawnpoints[i].spawndata.size + "," ); + + for ( j = 0; j < spawnpoints[i].spawndata.size; j++ ) + str += ( spawnpoints[i].spawndata[j] + "," ); + + str += ( spawnpoints[i].sightchecks.size + "," ); + + for ( j = 0; j < spawnpoints[i].sightchecks.size; j++ ) + str += ( spawnpoints[i].sightchecks[j].penalty + "," + vectostr( spawnpoints[i].origin ) + "," ); + + fprintfields( file, str ); + } + + obj = spawnstruct(); + getallalliedandenemyplayers( obj ); + numallies = 0; + numenemies = 0; + str = ""; + + for ( i = 0; i < obj.allies.size; i++ ) + { + if ( obj.allies[i] == self ) + continue; + + numallies++; + str += ( vectostr( obj.allies[i].origin ) + "," ); + } + + for ( i = 0; i < obj.enemies.size; i++ ) + { + numenemies++; + str += ( vectostr( obj.enemies[i].origin ) + "," ); + } + + str = numallies + "," + numenemies + "," + str; + fprintfields( file, str ); + otherdata = []; + + if ( isdefined( level.bombguy ) ) + { + index = otherdata.size; + otherdata[index] = spawnstruct(); + otherdata[index].origin = level.bombguy.origin + vectorscale( ( 0, 0, 1 ), 20.0 ); + otherdata[index].text = "Bomb holder"; + } + else if ( isdefined( level.bombpos ) ) + { + index = otherdata.size; + otherdata[index] = spawnstruct(); + otherdata[index].origin = level.bombpos; + otherdata[index].text = "Bomb"; + } + + if ( isdefined( level.flags ) ) + { + for ( i = 0; i < level.flags.size; i++ ) + { + index = otherdata.size; + otherdata[index] = spawnstruct(); + otherdata[index].origin = level.flags[i].origin; + otherdata[index].text = level.flags[i].useobj maps\mp\gametypes_zm\_gameobjects::getownerteam() + " flag"; + } + } + + str = otherdata.size + ","; + + for ( i = 0; i < otherdata.size; i++ ) + str += ( vectostr( otherdata[i].origin ) + "," + otherdata[i].text + "," ); + + fprintfields( file, str ); + closefile( file ); + thisspawnid = level.spawngameid + "." + level.spawnid; + + if ( isdefined( self.thisspawnid ) ) + { + + } + + self.thisspawnid = thisspawnid; +#/ +} + +readspawndata( desiredid, relativepos ) +{ +/# + file = openfile( "spawndata.txt", "read" ); + + if ( file < 0 ) + return; + + oldspawndata = level.curspawndata; + level.curspawndata = undefined; + prev = undefined; + prevthisplayer = undefined; + lookingfornextthisplayer = 0; + lookingfornext = 0; + + if ( isdefined( relativepos ) && !isdefined( oldspawndata ) ) + return; + + while ( true ) + { + if ( freadln( file ) <= 0 ) + break; + + data = spawnstruct(); + data.id = fgetarg( file, 0 ); + numspawns = int( fgetarg( file, 1 ) ); + + if ( numspawns > 256 ) + break; + + data.playername = fgetarg( file, 2 ); + data.spawnpoints = []; + data.friends = []; + data.enemies = []; + data.otherdata = []; + + for ( i = 0; i < numspawns; i++ ) + { + if ( freadln( file ) <= 0 ) + break; + + spawnpoint = spawnstruct(); + spawnpoint.origin = strtovec( fgetarg( file, 0 ) ); + spawnpoint.winner = int( fgetarg( file, 1 ) ); + spawnpoint.weight = int( fgetarg( file, 2 ) ); + spawnpoint.data = []; + spawnpoint.sightchecks = []; + + if ( i == 0 ) + { + data.minweight = spawnpoint.weight; + data.maxweight = spawnpoint.weight; + } + else + { + if ( spawnpoint.weight < data.minweight ) + data.minweight = spawnpoint.weight; + + if ( spawnpoint.weight > data.maxweight ) + data.maxweight = spawnpoint.weight; + } + + argnum = 4; + numdata = int( fgetarg( file, 3 ) ); + + if ( numdata > 256 ) + break; + + for ( j = 0; j < numdata; j++ ) + { + spawnpoint.data[spawnpoint.data.size] = fgetarg( file, argnum ); + argnum++; + } + + numsightchecks = int( fgetarg( file, argnum ) ); + argnum++; + + if ( numsightchecks > 256 ) + break; + + for ( j = 0; j < numsightchecks; j++ ) + { + index = spawnpoint.sightchecks.size; + spawnpoint.sightchecks[index] = spawnstruct(); + spawnpoint.sightchecks[index].penalty = int( fgetarg( file, argnum ) ); + argnum++; + spawnpoint.sightchecks[index].origin = strtovec( fgetarg( file, argnum ) ); + argnum++; + } + + data.spawnpoints[data.spawnpoints.size] = spawnpoint; + } + + if ( !isdefined( data.minweight ) ) + { + data.minweight = -1; + data.maxweight = 0; + } + + if ( data.minweight == data.maxweight ) + data.minweight -= 1; + + if ( freadln( file ) <= 0 ) + break; + + numfriends = int( fgetarg( file, 0 ) ); + numenemies = int( fgetarg( file, 1 ) ); + + if ( numfriends > 32 || numenemies > 32 ) + break; + + argnum = 2; + + for ( i = 0; i < numfriends; i++ ) + { + data.friends[data.friends.size] = strtovec( fgetarg( file, argnum ) ); + argnum++; + } + + for ( i = 0; i < numenemies; i++ ) + { + data.enemies[data.enemies.size] = strtovec( fgetarg( file, argnum ) ); + argnum++; + } + + if ( freadln( file ) <= 0 ) + break; + + numotherdata = int( fgetarg( file, 0 ) ); + argnum = 1; + + for ( i = 0; i < numotherdata; i++ ) + { + otherdata = spawnstruct(); + otherdata.origin = strtovec( fgetarg( file, argnum ) ); + argnum++; + otherdata.text = fgetarg( file, argnum ); + argnum++; + data.otherdata[data.otherdata.size] = otherdata; + } + + if ( isdefined( relativepos ) ) + { + if ( relativepos == "prevthisplayer" ) + { + if ( data.id == oldspawndata.id ) + { + level.curspawndata = prevthisplayer; + break; + } + } + else if ( relativepos == "prev" ) + { + if ( data.id == oldspawndata.id ) + { + level.curspawndata = prev; + break; + } + } + else if ( relativepos == "nextthisplayer" ) + { + if ( lookingfornextthisplayer ) + { + level.curspawndata = data; + break; + } + else if ( data.id == oldspawndata.id ) + lookingfornextthisplayer = 1; + } + else if ( relativepos == "next" ) + { + if ( lookingfornext ) + { + level.curspawndata = data; + break; + } + else if ( data.id == oldspawndata.id ) + lookingfornext = 1; + } + } + else if ( data.id == desiredid ) + { + level.curspawndata = data; + break; + } + + prev = data; + + if ( isdefined( oldspawndata ) && data.playername == oldspawndata.playername ) + prevthisplayer = data; + } + + closefile( file ); +#/ +} + +drawspawndata() +{ +/# + level notify( "drawing_spawn_data" ); + level endon( "drawing_spawn_data" ); + textoffset = vectorscale( ( 0, 0, -1 ), 12.0 ); + + while ( true ) + { + if ( !isdefined( level.curspawndata ) ) + { + wait 0.5; + continue; + } + + for ( i = 0; i < level.curspawndata.friends.size; i++ ) + print3d( level.curspawndata.friends[i], "=)", ( 0.5, 1, 0.5 ), 1, 5 ); + + for ( i = 0; i < level.curspawndata.enemies.size; i++ ) + print3d( level.curspawndata.enemies[i], "=(", ( 1, 0.5, 0.5 ), 1, 5 ); + + for ( i = 0; i < level.curspawndata.otherdata.size; i++ ) + print3d( level.curspawndata.otherdata[i].origin, level.curspawndata.otherdata[i].text, ( 0.5, 0.75, 1 ), 1, 2 ); + + for ( i = 0; i < level.curspawndata.spawnpoints.size; i++ ) + { + sp = level.curspawndata.spawnpoints[i]; + orig = sp.sighttracepoint; + + if ( sp.winner ) + { + print3d( orig, level.curspawndata.playername + " spawned here", ( 0.5, 0.5, 1 ), 1, 2 ); + orig += textoffset; + } + + amnt = ( sp.weight - level.curspawndata.minweight ) / ( level.curspawndata.maxweight - level.curspawndata.minweight ); + print3d( orig, "Weight: " + sp.weight, ( 1 - amnt, amnt, 0.5 ) ); + orig += textoffset; + + for ( j = 0; j < sp.data.size; j++ ) + { + print3d( orig, sp.data[j], ( 1, 1, 1 ) ); + orig += textoffset; + } + + for ( j = 0; j < sp.sightchecks.size; j++ ) + { + print3d( orig, "Sightchecks: -" + sp.sightchecks[j].penalty, ( 1, 0.5, 0.5 ) ); + orig += textoffset; + } + } + + wait 0.05; + } +#/ +} + +vectostr( vec ) +{ +/# + return int( vec[0] ) + "/" + int( vec[1] ) + "/" + int( vec[2] ); +#/ +} + +strtovec( str ) +{ +/# + parts = strtok( str, "/" ); + + if ( parts.size != 3 ) + return ( 0, 0, 0 ); + + return ( int( parts[0] ), int( parts[1] ), int( parts[2] ) ); +#/ +} + +getspawnpoint_random( spawnpoints ) +{ + if ( !isdefined( spawnpoints ) ) + return undefined; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + j = randomint( spawnpoints.size ); + spawnpoint = spawnpoints[i]; + spawnpoints[i] = spawnpoints[j]; + spawnpoints[j] = spawnpoint; + } + + return getspawnpoint_final( spawnpoints, 0 ); +} + +getallotherplayers() +{ + aliveplayers = []; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( !isdefined( level.players[i] ) ) + continue; + + player = level.players[i]; + + if ( player.sessionstate != "playing" || player == self ) + continue; + + if ( isdefined( level.customalivecheck ) ) + { + if ( ![[ level.customalivecheck ]]( player ) ) + continue; + } + + aliveplayers[aliveplayers.size] = player; + } + + return aliveplayers; +} + +getallalliedandenemyplayers( obj ) +{ + if ( level.teambased ) + { + assert( isdefined( level.teams[self.team] ) ); + obj.allies = []; + obj.enemies = []; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( !isdefined( level.players[i] ) ) + continue; + + player = level.players[i]; + + if ( player.sessionstate != "playing" || player == self ) + continue; + + if ( isdefined( level.customalivecheck ) ) + { + if ( ![[ level.customalivecheck ]]( player ) ) + continue; + } + + if ( player.team == self.team ) + { + obj.allies[obj.allies.size] = player; + continue; + } + + obj.enemies[obj.enemies.size] = player; + } + } + else + { + obj.allies = []; + obj.enemies = level.activeplayers; + } +} + +initweights( spawnpoints ) +{ + for ( i = 0; i < spawnpoints.size; i++ ) + spawnpoints[i].weight = 0; +/# + if ( level.storespawndata || level.debugspawning ) + { + for ( i = 0; i < spawnpoints.size; i++ ) + { + spawnpoints[i].spawndata = []; + spawnpoints[i].sightchecks = []; + } + } +#/ +} + +spawnpointupdate_zm( spawnpoint ) +{ + foreach ( team in level.teams ) + { + spawnpoint.distsum[team] = 0; + spawnpoint.enemydistsum[team] = 0; + } + + players = get_players(); + spawnpoint.numplayersatlastupdate = players.size; + + foreach ( player in players ) + { + if ( !isdefined( player ) ) + continue; + + if ( player.sessionstate != "playing" ) + continue; + + if ( isdefined( level.customalivecheck ) ) + { + if ( ![[ level.customalivecheck ]]( player ) ) + continue; + } + + dist = distance( spawnpoint.origin, player.origin ); + spawnpoint.distsum[player.team] += dist; + + foreach ( team in level.teams ) + { + if ( team != player.team ) + spawnpoint.enemydistsum[team] += dist; + } + } +} + +getspawnpoint_nearteam( spawnpoints, favoredspawnpoints, forceallydistanceweight, forceenemydistanceweight ) +{ + if ( !isdefined( spawnpoints ) ) + return undefined; +/# + if ( getdvar( "scr_spawn_randomly" ) == "" ) + setdvar( "scr_spawn_randomly", "0" ); + + if ( getdvar( "scr_spawn_randomly" ) == "1" ) + return getspawnpoint_random( spawnpoints ); +#/ + if ( getdvarint( "scr_spawnsimple" ) > 0 ) + return getspawnpoint_random( spawnpoints ); + + spawnlogic_begin(); + k_favored_spawn_point_bonus = 25000; + initweights( spawnpoints ); + obj = spawnstruct(); + getallalliedandenemyplayers( obj ); + numplayers = obj.allies.size + obj.enemies.size; + allieddistanceweight = 2; + + if ( isdefined( forceallydistanceweight ) ) + allieddistanceweight = forceallydistanceweight; + + enemydistanceweight = 1; + + if ( isdefined( forceenemydistanceweight ) ) + enemydistanceweight = forceenemydistanceweight; + + myteam = self.team; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + spawnpoint = spawnpoints[i]; + spawnpointupdate_zm( spawnpoint ); + + if ( !isdefined( spawnpoint.numplayersatlastupdate ) ) + spawnpoint.numplayersatlastupdate = 0; + + if ( spawnpoint.numplayersatlastupdate > 0 ) + { + allydistsum = spawnpoint.distsum[myteam]; + enemydistsum = spawnpoint.enemydistsum[myteam]; + spawnpoint.weight = ( enemydistanceweight * enemydistsum - allieddistanceweight * allydistsum ) / spawnpoint.numplayersatlastupdate; +/# + if ( level.storespawndata || level.debugspawning ) + spawnpoint.spawndata[spawnpoint.spawndata.size] = "Base weight: " + int( spawnpoint.weight ) + " = (" + enemydistanceweight + "*" + int( enemydistsum ) + " - " + allieddistanceweight + "*" + int( allydistsum ) + ") / " + spawnpoint.numplayersatlastupdate; +#/ + continue; + } + + spawnpoint.weight = 0; +/# + if ( level.storespawndata || level.debugspawning ) + spawnpoint.spawndata[spawnpoint.spawndata.size] = "Base weight: 0"; +#/ + } + + if ( isdefined( favoredspawnpoints ) ) + { + for ( i = 0; i < favoredspawnpoints.size; i++ ) + { + if ( isdefined( favoredspawnpoints[i].weight ) ) + { + favoredspawnpoints[i].weight += k_favored_spawn_point_bonus; + continue; + } + + favoredspawnpoints[i].weight = k_favored_spawn_point_bonus; + } + } + + avoidsamespawn( spawnpoints ); + avoidspawnreuse( spawnpoints, 1 ); + avoidweapondamage( spawnpoints ); + avoidvisibleenemies( spawnpoints, 1 ); + result = getspawnpoint_final( spawnpoints ); +/# + if ( getdvar( "scr_spawn_showbad" ) == "" ) + setdvar( "scr_spawn_showbad", "0" ); + + if ( getdvar( "scr_spawn_showbad" ) == "1" ) + checkbad( result ); +#/ + return result; +} + +getspawnpoint_dm( spawnpoints ) +{ + if ( !isdefined( spawnpoints ) ) + return undefined; + + spawnlogic_begin(); + initweights( spawnpoints ); + aliveplayers = getallotherplayers(); + idealdist = 1600; + baddist = 1200; + + if ( aliveplayers.size > 0 ) + { + for ( i = 0; i < spawnpoints.size; i++ ) + { + totaldistfromideal = 0; + nearbybadamount = 0; + + for ( j = 0; j < aliveplayers.size; j++ ) + { + dist = distance( spawnpoints[i].origin, aliveplayers[j].origin ); + + if ( dist < baddist ) + nearbybadamount += ( baddist - dist ) / baddist; + + distfromideal = abs( dist - idealdist ); + totaldistfromideal += distfromideal; + } + + avgdistfromideal = totaldistfromideal / aliveplayers.size; + welldistancedamount = ( idealdist - avgdistfromideal ) / idealdist; + spawnpoints[i].weight = welldistancedamount - nearbybadamount * 2 + randomfloat( 0.2 ); + } + } + + avoidsamespawn( spawnpoints ); + avoidspawnreuse( spawnpoints, 0 ); + avoidweapondamage( spawnpoints ); + avoidvisibleenemies( spawnpoints, 0 ); + return getspawnpoint_final( spawnpoints ); +} + +getspawnpoint_turned( spawnpoints, idealdist, baddist, idealdistteam, baddistteam ) +{ + if ( !isdefined( spawnpoints ) ) + return undefined; + + spawnlogic_begin(); + initweights( spawnpoints ); + aliveplayers = getallotherplayers(); + + if ( !isdefined( idealdist ) ) + idealdist = 1600; + + if ( !isdefined( idealdistteam ) ) + idealdistteam = 1200; + + if ( !isdefined( baddist ) ) + baddist = 1200; + + if ( !isdefined( baddistteam ) ) + baddistteam = 600; + + myteam = self.team; + + if ( aliveplayers.size > 0 ) + { + for ( i = 0; i < spawnpoints.size; i++ ) + { + totaldistfromideal = 0; + nearbybadamount = 0; + + for ( j = 0; j < aliveplayers.size; j++ ) + { + dist = distance( spawnpoints[i].origin, aliveplayers[j].origin ); + distfromideal = 0; + + if ( aliveplayers[j].team == myteam ) + { + if ( dist < baddistteam ) + nearbybadamount += ( baddistteam - dist ) / baddistteam; + + distfromideal = abs( dist - idealdistteam ); + } + else + { + if ( dist < baddist ) + nearbybadamount += ( baddist - dist ) / baddist; + + distfromideal = abs( dist - idealdist ); + } + + totaldistfromideal += distfromideal; + } + + avgdistfromideal = totaldistfromideal / aliveplayers.size; + welldistancedamount = ( idealdist - avgdistfromideal ) / idealdist; + spawnpoints[i].weight = welldistancedamount - nearbybadamount * 2 + randomfloat( 0.2 ); + } + } + + avoidsamespawn( spawnpoints ); + avoidspawnreuse( spawnpoints, 0 ); + avoidweapondamage( spawnpoints ); + avoidvisibleenemies( spawnpoints, 0 ); + return getspawnpoint_final( spawnpoints ); +} + +spawnlogic_begin() +{ +/# + level.storespawndata = getdvarint( "scr_recordspawndata" ); + level.debugspawning = getdvarint( "scr_spawnpointdebug" ) > 0; +#/ +} + +init() +{ +/# + if ( getdvar( "scr_recordspawndata" ) == "" ) + setdvar( "scr_recordspawndata", 0 ); + + level.storespawndata = getdvarint( "scr_recordspawndata" ); + + if ( getdvar( "scr_killbots" ) == "" ) + setdvar( "scr_killbots", 0 ); + + if ( getdvar( "scr_killbottimer" ) == "" ) + setdvar( "scr_killbottimer", 0.25 ); + + thread loopbotspawns(); +#/ + level.spawnlogic_deaths = []; + level.spawnlogic_spawnkills = []; + level.players = []; + level.grenades = []; + level.pipebombs = []; + level.spawnmins = ( 0, 0, 0 ); + level.spawnmaxs = ( 0, 0, 0 ); + level.spawnminsmaxsprimed = 0; + + if ( isdefined( level.safespawns ) ) + { + for ( i = 0; i < level.safespawns.size; i++ ) + level.safespawns[i] spawnpointinit(); + } + + if ( getdvar( "scr_spawn_enemyavoiddist" ) == "" ) + setdvar( "scr_spawn_enemyavoiddist", "800" ); + + if ( getdvar( "scr_spawn_enemyavoidweight" ) == "" ) + setdvar( "scr_spawn_enemyavoidweight", "0" ); +/# + if ( getdvar( "scr_spawnsimple" ) == "" ) + setdvar( "scr_spawnsimple", "0" ); + + if ( getdvar( "scr_spawnpointdebug" ) == "" ) + setdvar( "scr_spawnpointdebug", "0" ); + + if ( getdvarint( "scr_spawnpointdebug" ) > 0 ) + { + thread showdeathsdebug(); + thread updatedeathinfodebug(); + thread profiledebug(); + } + + if ( level.storespawndata ) + thread allowspawndatareading(); + + if ( getdvar( "scr_spawnprofile" ) == "" ) + setdvar( "scr_spawnprofile", "0" ); + + thread watchspawnprofile(); + thread spawngraphcheck(); +#/ +} + +watchspawnprofile() +{ +/# + while ( true ) + { + while ( true ) + { + if ( getdvarint( "scr_spawnprofile" ) > 0 ) + break; + + wait 0.05; + } + + thread spawnprofile(); + + while ( true ) + { + if ( getdvarint( "scr_spawnprofile" ) <= 0 ) + break; + + wait 0.05; + } + + level notify( "stop_spawn_profile" ); + } +#/ +} + +spawnprofile() +{ +/# + level endon( "stop_spawn_profile" ); + + while ( true ) + { + if ( level.players.size > 0 && level.spawnpoints.size > 0 ) + { + playernum = randomint( level.players.size ); + player = level.players[playernum]; + attempt = 1; + + while ( !isdefined( player ) && attempt < level.players.size ) + { + playernum = ( playernum + 1 ) % level.players.size; + attempt++; + player = level.players[playernum]; + } + + player getspawnpoint_nearteam( level.spawnpoints ); + } + + wait 0.05; + } +#/ +} + +spawngraphcheck() +{ +/# + while ( true ) + { + if ( getdvarint( _hash_C25B6B47 ) < 1 ) + { + wait 3; + continue; + } + + thread spawngraph(); + return; + } +#/ +} + +spawngraph() +{ +/# + w = 20; + h = 20; + weightscale = 0.1; + fakespawnpoints = []; + corners = getentarray( "minimap_corner", "targetname" ); + + if ( corners.size != 2 ) + { + println( "^1 can't spawn graph: no minimap corners" ); + return; + } + + min = corners[0].origin; + max = corners[0].origin; + + if ( corners[1].origin[0] > max[0] ) + max = ( corners[1].origin[0], max[1], max[2] ); + else + min = ( corners[1].origin[0], min[1], min[2] ); + + if ( corners[1].origin[1] > max[1] ) + max = ( max[0], corners[1].origin[1], max[2] ); + else + min = ( min[0], corners[1].origin[1], min[2] ); + + i = 0; + + for ( y = 0; y < h; y++ ) + { + yamnt = y / ( h - 1 ); + + for ( x = 0; x < w; x++ ) + { + xamnt = x / ( w - 1 ); + fakespawnpoints[i] = spawnstruct(); + fakespawnpoints[i].origin = ( min[0] * xamnt + max[0] * ( 1 - xamnt ), min[1] * yamnt + max[1] * ( 1 - yamnt ), min[2] ); + fakespawnpoints[i].angles = ( 0, 0, 0 ); + fakespawnpoints[i].forward = anglestoforward( fakespawnpoints[i].angles ); + fakespawnpoints[i].sighttracepoint = fakespawnpoints[i].origin; + i++; + } + } + + didweights = 0; + + while ( true ) + { + spawni = 0; + numiters = 5; + + for ( i = 0; i < numiters; i++ ) + { + if ( !level.players.size || !isdefined( level.players[0].team ) || level.players[0].team == "spectator" || !isdefined( level.players[0].class ) ) + break; + + endspawni = spawni + fakespawnpoints.size / numiters; + + if ( i == numiters - 1 ) + endspawni = fakespawnpoints.size; + + while ( spawni < endspawni ) + { + spawnpointupdate( fakespawnpoints[spawni] ); + spawni++; + } + + if ( didweights ) + level.players[0] drawspawngraph( fakespawnpoints, w, h, weightscale ); + + wait 0.05; + } + + if ( !level.players.size || !isdefined( level.players[0].team ) || level.players[0].team == "spectator" || !isdefined( level.players[0].class ) ) + { + wait 1; + continue; + } + + level.players[0] getspawnpoint_nearteam( fakespawnpoints ); + + for ( i = 0; i < fakespawnpoints.size; i++ ) + setupspawngraphpoint( fakespawnpoints[i], weightscale ); + + didweights = 1; + level.players[0] drawspawngraph( fakespawnpoints, w, h, weightscale ); + wait 0.05; + } +#/ +} + +drawspawngraph( fakespawnpoints, w, h, weightscale ) +{ +/# + i = 0; + + for ( y = 0; y < h; y++ ) + { + yamnt = y / ( h - 1 ); + + for ( x = 0; x < w; x++ ) + { + xamnt = x / ( w - 1 ); + + if ( y > 0 ) + spawngraphline( fakespawnpoints[i], fakespawnpoints[i - w], weightscale ); + + if ( x > 0 ) + spawngraphline( fakespawnpoints[i], fakespawnpoints[i - 1], weightscale ); + + i++; + } + } +#/ +} + +setupspawngraphpoint( s1, weightscale ) +{ +/# + s1.visible = 1; + + if ( s1.weight < -1000 / weightscale ) + s1.visible = 0; +#/ +} + +spawngraphline( s1, s2, weightscale ) +{ +/# + if ( !s1.visible || !s2.visible ) + return; + + p1 = s1.origin + ( 0, 0, s1.weight * weightscale + 100 ); + p2 = s2.origin + ( 0, 0, s2.weight * weightscale + 100 ); + line( p1, p2, ( 1, 1, 1 ) ); +#/ +} + +loopbotspawns() +{ +/# + while ( true ) + { + if ( getdvarint( "scr_killbots" ) < 1 ) + { + wait 3; + continue; + } + + if ( !isdefined( level.players ) ) + { + wait 0.05; + continue; + } + + bots = []; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( !isdefined( level.players[i] ) ) + continue; + + if ( level.players[i].sessionstate == "playing" && issubstr( level.players[i].name, "bot" ) ) + bots[bots.size] = level.players[i]; + } + + if ( bots.size > 0 ) + { + if ( getdvarint( "scr_killbots" ) == 1 ) + { + killer = bots[randomint( bots.size )]; + victim = bots[randomint( bots.size )]; + victim thread [[ level.callbackplayerdamage ]]( killer, killer, 1000, 0, "MOD_RIFLE_BULLET", "none", ( 0, 0, 0 ), ( 0, 0, 0 ), "none", 0, 0 ); + } + else + { + numkills = getdvarint( "scr_killbots" ); + lastvictim = undefined; + + for ( index = 0; index < numkills; index++ ) + { + killer = bots[randomint( bots.size )]; + + for ( victim = bots[randomint( bots.size )]; isdefined( lastvictim ) && victim == lastvictim; victim = bots[randomint( bots.size )] ) + { + + } + + victim thread [[ level.callbackplayerdamage ]]( killer, killer, 1000, 0, "MOD_RIFLE_BULLET", "none", ( 0, 0, 0 ), ( 0, 0, 0 ), "none", 0, 0 ); + lastvictim = victim; + } + } + } + + if ( getdvar( "scr_killbottimer" ) != "" ) + wait( getdvarfloat( "scr_killbottimer" ) ); + else + wait 0.05; + } +#/ +} + +allowspawndatareading() +{ +/# + setdvar( "scr_showspawnid", "" ); + prevval = getdvar( "scr_showspawnid" ); + prevrelval = getdvar( "scr_spawnidcycle" ); + readthistime = 0; + + while ( true ) + { + val = getdvar( "scr_showspawnid" ); + relval = undefined; + + if ( !isdefined( val ) || val == prevval ) + { + relval = getdvar( "scr_spawnidcycle" ); + + if ( isdefined( relval ) && relval != "" ) + setdvar( "scr_spawnidcycle", "" ); + else + { + wait 0.5; + continue; + } + } + + prevval = val; + readthistime = 0; + readspawndata( val, relval ); + + if ( !isdefined( level.curspawndata ) ) + println( "No spawn data to draw." ); + else + println( "Drawing spawn ID " + level.curspawndata.id ); + + thread drawspawndata(); + } +#/ +} + +showdeathsdebug() +{ +/# + while ( true ) + { + if ( getdvar( "scr_spawnpointdebug" ) == "0" ) + { + wait 3; + continue; + } + + time = gettime(); + + for ( i = 0; i < level.spawnlogic_deaths.size; i++ ) + { + if ( isdefined( level.spawnlogic_deaths[i].los ) ) + line( level.spawnlogic_deaths[i].org, level.spawnlogic_deaths[i].killorg, ( 1, 0, 0 ) ); + else + line( level.spawnlogic_deaths[i].org, level.spawnlogic_deaths[i].killorg, ( 1, 1, 1 ) ); + + killer = level.spawnlogic_deaths[i].killer; + + if ( isdefined( killer ) && isalive( killer ) ) + line( level.spawnlogic_deaths[i].killorg, killer.origin, ( 0.4, 0.4, 0.8 ) ); + } + + for ( p = 0; p < level.players.size; p++ ) + { + if ( !isdefined( level.players[p] ) ) + continue; + + if ( isdefined( level.players[p].spawnlogic_killdist ) ) + print3d( level.players[p].origin + vectorscale( ( 0, 0, 1 ), 64.0 ), level.players[p].spawnlogic_killdist, ( 1, 1, 1 ) ); + } + + oldspawnkills = level.spawnlogic_spawnkills; + level.spawnlogic_spawnkills = []; + + for ( i = 0; i < oldspawnkills.size; i++ ) + { + spawnkill = oldspawnkills[i]; + + if ( spawnkill.dierwasspawner ) + { + line( spawnkill.spawnpointorigin, spawnkill.dierorigin, ( 0.4, 0.5, 0.4 ) ); + line( spawnkill.dierorigin, spawnkill.killerorigin, ( 0, 1, 1 ) ); + print3d( spawnkill.dierorigin + vectorscale( ( 0, 0, 1 ), 32.0 ), "SPAWNKILLED!", ( 0, 1, 1 ) ); + } + else + { + line( spawnkill.spawnpointorigin, spawnkill.killerorigin, ( 0.4, 0.5, 0.4 ) ); + line( spawnkill.killerorigin, spawnkill.dierorigin, ( 0, 1, 1 ) ); + print3d( spawnkill.dierorigin + vectorscale( ( 0, 0, 1 ), 32.0 ), "SPAWNDIED!", ( 0, 1, 1 ) ); + } + + if ( time - spawnkill.time < 60000 ) + level.spawnlogic_spawnkills[level.spawnlogic_spawnkills.size] = oldspawnkills[i]; + } + + wait 0.05; + } +#/ +} + +updatedeathinfodebug() +{ + while ( true ) + { + if ( getdvar( "scr_spawnpointdebug" ) == "0" ) + { + wait 3; + continue; + } + + updatedeathinfo(); + wait 3; + } +} + +spawnweightdebug( spawnpoints ) +{ + level notify( "stop_spawn_weight_debug" ); + level endon( "stop_spawn_weight_debug" ); +/# + while ( true ) + { + if ( getdvar( "scr_spawnpointdebug" ) == "0" ) + { + wait 3; + continue; + } + + textoffset = vectorscale( ( 0, 0, -1 ), 12.0 ); + + for ( i = 0; i < spawnpoints.size; i++ ) + { + amnt = 1 * ( 1 - spawnpoints[i].weight / -100000 ); + + if ( amnt < 0 ) + amnt = 0; + + if ( amnt > 1 ) + amnt = 1; + + orig = spawnpoints[i].origin + vectorscale( ( 0, 0, 1 ), 80.0 ); + print3d( orig, int( spawnpoints[i].weight ), ( 1, amnt, 0.5 ) ); + orig += textoffset; + + if ( isdefined( spawnpoints[i].spawndata ) ) + { + for ( j = 0; j < spawnpoints[i].spawndata.size; j++ ) + { + print3d( orig, spawnpoints[i].spawndata[j], vectorscale( ( 1, 1, 1 ), 0.5 ) ); + orig += textoffset; + } + } + + if ( isdefined( spawnpoints[i].sightchecks ) ) + { + for ( j = 0; j < spawnpoints[i].sightchecks.size; j++ ) + { + if ( spawnpoints[i].sightchecks[j].penalty == 0 ) + continue; + + print3d( orig, "Sight to enemy: -" + spawnpoints[i].sightchecks[j].penalty, vectorscale( ( 1, 1, 1 ), 0.5 ) ); + orig += textoffset; + } + } + } + + wait 0.05; + } +#/ +} + +profiledebug() +{ + while ( true ) + { + if ( getdvar( _hash_6A99E750 ) != "1" ) + { + wait 3; + continue; + } + + for ( i = 0; i < level.spawnpoints.size; i++ ) + level.spawnpoints[i].weight = randomint( 10000 ); + + if ( level.players.size > 0 ) + level.players[randomint( level.players.size )] getspawnpoint_nearteam( level.spawnpoints ); + + wait 0.05; + } +} + +debugnearbyplayers( players, origin ) +{ +/# + if ( getdvar( "scr_spawnpointdebug" ) == "0" ) + return; + + starttime = gettime(); + + while ( true ) + { + for ( i = 0; i < players.size; i++ ) + line( players[i].origin, origin, ( 0.5, 1, 0.5 ) ); + + if ( gettime() - starttime > 5000 ) + return; + + wait 0.05; + } +#/ +} + +deathoccured( dier, killer ) +{ + +} + +checkforsimilardeaths( deathinfo ) +{ + for ( i = 0; i < level.spawnlogic_deaths.size; i++ ) + { + if ( level.spawnlogic_deaths[i].killer == deathinfo.killer ) + { + dist = distance( level.spawnlogic_deaths[i].org, deathinfo.org ); + + if ( dist > 200 ) + continue; + + dist = distance( level.spawnlogic_deaths[i].killorg, deathinfo.killorg ); + + if ( dist > 200 ) + continue; + + level.spawnlogic_deaths[i].remove = 1; + } + } +} + +updatedeathinfo() +{ + time = gettime(); + + for ( i = 0; i < level.spawnlogic_deaths.size; i++ ) + { + deathinfo = level.spawnlogic_deaths[i]; + + if ( time - deathinfo.time > 90000 || !isdefined( deathinfo.killer ) || !isalive( deathinfo.killer ) || !isdefined( level.teams[deathinfo.killer.team] ) || distance( deathinfo.killer.origin, deathinfo.killorg ) > 400 ) + level.spawnlogic_deaths[i].remove = 1; + } + + oldarray = level.spawnlogic_deaths; + level.spawnlogic_deaths = []; + start = 0; + + if ( oldarray.size - 1024 > 0 ) + start = oldarray.size - 1024; + + for ( i = start; i < oldarray.size; i++ ) + { + if ( !isdefined( oldarray[i].remove ) ) + level.spawnlogic_deaths[level.spawnlogic_deaths.size] = oldarray[i]; + } +} + +ispointvulnerable( playerorigin ) +{ + pos = self.origin + level.bettymodelcenteroffset; + playerpos = playerorigin + vectorscale( ( 0, 0, 1 ), 32.0 ); + distsqrd = distancesquared( pos, playerpos ); + forward = anglestoforward( self.angles ); + + if ( distsqrd < level.bettydetectionradius * level.bettydetectionradius ) + { + playerdir = vectornormalize( playerpos - pos ); + angle = acos( vectordot( playerdir, forward ) ); + + if ( angle < level.bettydetectionconeangle ) + return true; + } + + return false; +} + +avoidweapondamage( spawnpoints ) +{ + if ( getdvar( _hash_FB71FB7 ) == "0" ) + return; + + weapondamagepenalty = 100000; + + if ( getdvar( _hash_76B8F046 ) != "" && getdvar( _hash_76B8F046 ) != "0" ) + weapondamagepenalty = getdvarfloat( _hash_76B8F046 ); + + mingrenadedistsquared = 62500; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + for ( j = 0; j < level.grenades.size; j++ ) + { + if ( !isdefined( level.grenades[j] ) ) + continue; + + if ( distancesquared( spawnpoints[i].origin, level.grenades[j].origin ) < mingrenadedistsquared ) + { + spawnpoints[i].weight -= weapondamagepenalty; +/# + if ( level.storespawndata || level.debugspawning ) + spawnpoints[i].spawndata[spawnpoints[i].spawndata.size] = "Was near grenade: -" + int( weapondamagepenalty ); +#/ + } + } + } +} + +spawnperframeupdate() +{ + spawnpointindex = 0; + + while ( true ) + { + wait 0.05; + + if ( !isdefined( level.spawnpoints ) ) + return; + + spawnpointindex = ( spawnpointindex + 1 ) % level.spawnpoints.size; + spawnpoint = level.spawnpoints[spawnpointindex]; + spawnpointupdate( spawnpoint ); + } +} + +getnonteamsum( skip_team, sums ) +{ + value = 0; + + foreach ( team in level.teams ) + { + if ( team == skip_team ) + continue; + + value += sums[team]; + } + + return value; +} + +getnonteammindist( skip_team, mindists ) +{ + dist = 9999999; + + foreach ( team in level.teams ) + { + if ( team == skip_team ) + continue; + + if ( dist > mindists[team] ) + dist = mindists[team]; + } + + return dist; +} + +spawnpointupdate( spawnpoint ) +{ + if ( level.teambased ) + { + sights = []; + + foreach ( team in level.teams ) + { + spawnpoint.enemysights[team] = 0; + sights[team] = 0; + spawnpoint.nearbyplayers[team] = []; + } + } + else + { + spawnpoint.enemysights = 0; + spawnpoint.nearbyplayers["all"] = []; + } + + spawnpointdir = spawnpoint.forward; + debug = 0; +/# + debug = getdvarint( "scr_spawnpointdebug" ) > 0; +#/ + mindist = []; + distsum = []; + + if ( !level.teambased ) + mindist["all"] = 9999999; + + foreach ( team in level.teams ) + { + spawnpoint.distsum[team] = 0; + spawnpoint.enemydistsum[team] = 0; + spawnpoint.minenemydist[team] = 9999999; + mindist[team] = 9999999; + } + + spawnpoint.numplayersatlastupdate = 0; + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( player.sessionstate != "playing" ) + continue; + + diff = player.origin - spawnpoint.origin; + diff = ( diff[0], diff[1], 0 ); + dist = length( diff ); + team = "all"; + + if ( level.teambased ) + team = player.team; + + if ( dist < 1024 ) + spawnpoint.nearbyplayers[team][spawnpoint.nearbyplayers[team].size] = player; + + if ( dist < mindist[team] ) + mindist[team] = dist; + + distsum[team] += dist; + spawnpoint.numplayersatlastupdate++; + pdir = anglestoforward( player.angles ); + + if ( vectordot( spawnpointdir, diff ) < 0 && vectordot( pdir, diff ) > 0 ) + continue; + + losexists = bullettracepassed( player.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), spawnpoint.sighttracepoint, 0, undefined ); + spawnpoint.lastsighttracetime = gettime(); + + if ( losexists ) + { + if ( level.teambased ) + sights[player.team]++; + else + spawnpoint.enemysights++; +/# + if ( debug ) + line( player.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), spawnpoint.sighttracepoint, ( 0.5, 1, 0.5 ) ); +#/ + } + } + + if ( level.teambased ) + { + foreach ( team in level.teams ) + { + spawnpoint.enemysights[team] = getnonteamsum( team, sights ); + spawnpoint.minenemydist[team] = getnonteammindist( team, mindist ); + spawnpoint.distsum[team] = distsum[team]; + spawnpoint.enemydistsum[team] = getnonteamsum( team, distsum ); + } + } + else + { + spawnpoint.distsum["all"] = distsum["all"]; + spawnpoint.enemydistsum["all"] = distsum["all"]; + spawnpoint.minenemydist["all"] = mindist["all"]; + } +} + +getlospenalty() +{ + if ( getdvar( _hash_CACDB8AA ) != "" && getdvar( _hash_CACDB8AA ) != "0" ) + return getdvarfloat( _hash_CACDB8AA ); + + return 100000; +} + +lastminutesighttraces( spawnpoint ) +{ + if ( !isdefined( spawnpoint.nearbyplayers ) ) + return false; + + closest = undefined; + closestdistsq = undefined; + secondclosest = undefined; + secondclosestdistsq = undefined; + + foreach ( team in spawnpoint.nearbyplayers ) + { + if ( team == self.team ) + continue; + + for ( i = 0; i < spawnpoint.nearbyplayers[team].size; i++ ) + { + player = spawnpoint.nearbyplayers[team][i]; + + if ( !isdefined( player ) ) + continue; + + if ( player.sessionstate != "playing" ) + continue; + + if ( player == self ) + continue; + + distsq = distancesquared( spawnpoint.origin, player.origin ); + + if ( !isdefined( closest ) || distsq < closestdistsq ) + { + secondclosest = closest; + secondclosestdistsq = closestdistsq; + closest = player; + closestdistsq = distsq; + continue; + } + + if ( !isdefined( secondclosest ) || distsq < secondclosestdistsq ) + { + secondclosest = player; + secondclosestdistsq = distsq; + } + } + } + + if ( isdefined( closest ) ) + { + if ( bullettracepassed( closest.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), spawnpoint.sighttracepoint, 0, undefined ) ) + return true; + } + + if ( isdefined( secondclosest ) ) + { + if ( bullettracepassed( secondclosest.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), spawnpoint.sighttracepoint, 0, undefined ) ) + return true; + } + + return false; +} + +avoidvisibleenemies( spawnpoints, teambased ) +{ + if ( getdvar( _hash_FB71FB7 ) == "0" ) + return; + + lospenalty = getlospenalty(); + mindistteam = self.team; + + if ( teambased ) + { + for ( i = 0; i < spawnpoints.size; i++ ) + { + if ( !isdefined( spawnpoints[i].enemysights ) ) + continue; + + penalty = lospenalty * spawnpoints[i].enemysights[self.team]; + spawnpoints[i].weight -= penalty; +/# + if ( level.storespawndata || level.debugspawning ) + { + index = spawnpoints[i].sightchecks.size; + spawnpoints[i].sightchecks[index] = spawnstruct(); + spawnpoints[i].sightchecks[index].penalty = penalty; + } +#/ + } + } + else + { + for ( i = 0; i < spawnpoints.size; i++ ) + { + if ( !isdefined( spawnpoints[i].enemysights ) ) + continue; + + penalty = lospenalty * spawnpoints[i].enemysights; + spawnpoints[i].weight -= penalty; +/# + if ( level.storespawndata || level.debugspawning ) + { + index = spawnpoints[i].sightchecks.size; + spawnpoints[i].sightchecks[index] = spawnstruct(); + spawnpoints[i].sightchecks[index].penalty = penalty; + } +#/ + } + + mindistteam = "all"; + } + + avoidweight = getdvarfloat( "scr_spawn_enemyavoidweight" ); + + if ( avoidweight != 0 ) + { + nearbyenemyouterrange = getdvarfloat( "scr_spawn_enemyavoiddist" ); + nearbyenemyouterrangesq = nearbyenemyouterrange * nearbyenemyouterrange; + nearbyenemypenalty = 1500 * avoidweight; + nearbyenemyminorpenalty = 800 * avoidweight; + lastattackerorigin = vectorscale( ( -1, -1, -1 ), 99999.0 ); + lastdeathpos = vectorscale( ( -1, -1, -1 ), 99999.0 ); + + if ( isalive( self.lastattacker ) ) + lastattackerorigin = self.lastattacker.origin; + + if ( isdefined( self.lastdeathpos ) ) + lastdeathpos = self.lastdeathpos; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + mindist = spawnpoints[i].minenemydist[mindistteam]; + + if ( mindist < nearbyenemyouterrange * 2 ) + { + penalty = nearbyenemyminorpenalty * ( 1 - mindist / nearbyenemyouterrange * 2 ); + + if ( mindist < nearbyenemyouterrange ) + penalty += nearbyenemypenalty * ( 1 - mindist / nearbyenemyouterrange ); + + if ( penalty > 0 ) + { + spawnpoints[i].weight -= penalty; +/# + if ( level.storespawndata || level.debugspawning ) + spawnpoints[i].spawndata[spawnpoints[i].spawndata.size] = "Nearest enemy at " + int( spawnpoints[i].minenemydist[mindistteam] ) + " units: -" + int( penalty ); +#/ + } + } + } + } +} + +avoidspawnreuse( spawnpoints, teambased ) +{ + if ( getdvar( _hash_FB71FB7 ) == "0" ) + return; + + time = gettime(); + maxtime = 10000; + maxdistsq = 1048576; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + spawnpoint = spawnpoints[i]; + + if ( !isdefined( spawnpoint.lastspawnedplayer ) || !isdefined( spawnpoint.lastspawntime ) || !isalive( spawnpoint.lastspawnedplayer ) ) + continue; + + if ( spawnpoint.lastspawnedplayer == self ) + continue; + + if ( teambased && spawnpoint.lastspawnedplayer.team == self.team ) + continue; + + timepassed = time - spawnpoint.lastspawntime; + + if ( timepassed < maxtime ) + { + distsq = distancesquared( spawnpoint.lastspawnedplayer.origin, spawnpoint.origin ); + + if ( distsq < maxdistsq ) + { + worsen = 5000 * ( 1 - distsq / maxdistsq ) * ( 1 - timepassed / maxtime ); + spawnpoint.weight -= worsen; +/# + if ( level.storespawndata || level.debugspawning ) + spawnpoint.spawndata[spawnpoint.spawndata.size] = "Was recently used: -" + worsen; +#/ + } + else + spawnpoint.lastspawnedplayer = undefined; + + continue; + } + + spawnpoint.lastspawnedplayer = undefined; + } +} + +avoidsamespawn( spawnpoints ) +{ + if ( getdvar( _hash_FB71FB7 ) == "0" ) + return; + + if ( !isdefined( self.lastspawnpoint ) ) + return; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + if ( spawnpoints[i] == self.lastspawnpoint ) + { + spawnpoints[i].weight -= 50000; +/# + if ( level.storespawndata || level.debugspawning ) + spawnpoints[i].spawndata[spawnpoints[i].spawndata.size] = "Was last spawnpoint: -50000"; +#/ + break; + } + } +} + +getrandomintermissionpoint() +{ + spawnpoints = getentarray( "mp_global_intermission", "classname" ); + + if ( !spawnpoints.size ) + spawnpoints = getentarray( "info_player_start", "classname" ); + + assert( spawnpoints.size ); + spawnpoint = maps\mp\gametypes_zm\_spawnlogic::getspawnpoint_random( spawnpoints ); + return spawnpoint; +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_spectating.gsc b/ZM/Core/maps/mp/gametypes_zm/_spectating.gsc new file mode 100644 index 0000000..b311728 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_spectating.gsc @@ -0,0 +1,228 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +init() +{ + foreach ( team in level.teams ) + level.spectateoverride[team] = spawnstruct(); + + level thread onplayerconnect(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread onjoinedteam(); + player thread onjoinedspectators(); + player thread onplayerspawned(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self setspectatepermissions(); + } +} + +onjoinedteam() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "joined_team" ); + + self setspectatepermissionsformachine(); + } +} + +onjoinedspectators() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "joined_spectators" ); + + self setspectatepermissionsformachine(); + } +} + +updatespectatesettings() +{ + level endon( "game_ended" ); + + for ( index = 0; index < level.players.size; index++ ) + level.players[index] setspectatepermissions(); +} + +getsplitscreenteam() +{ + for ( index = 0; index < level.players.size; index++ ) + { + if ( !isdefined( level.players[index] ) ) + continue; + + if ( level.players[index] == self ) + continue; + + if ( !self isplayeronsamemachine( level.players[index] ) ) + continue; + + team = level.players[index].sessionteam; + + if ( team != "spectator" ) + return team; + } + + return self.sessionteam; +} + +otherlocalplayerstillalive() +{ + for ( index = 0; index < level.players.size; index++ ) + { + if ( !isdefined( level.players[index] ) ) + continue; + + if ( level.players[index] == self ) + continue; + + if ( !self isplayeronsamemachine( level.players[index] ) ) + continue; + + if ( isalive( level.players[index] ) ) + return true; + } + + return false; +} + +allowspectateallteams( allow ) +{ + foreach ( team in level.teams ) + self allowspectateteam( team, allow ); +} + +allowspectateallteamsexceptteam( skip_team, allow ) +{ + foreach ( team in level.teams ) + { + if ( team == skip_team ) + continue; + + self allowspectateteam( team, allow ); + } +} + +setspectatepermissions() +{ + team = self.sessionteam; + + if ( team == "spectator" ) + { + if ( self issplitscreen() && !level.splitscreen ) + team = getsplitscreenteam(); + + if ( team == "spectator" ) + { + self allowspectateallteams( 1 ); + self allowspectateteam( "freelook", 0 ); + self allowspectateteam( "none", 1 ); + self allowspectateteam( "localplayers", 1 ); + return; + } + } + + spectatetype = level.spectatetype; + + switch ( spectatetype ) + { + case 0: + self allowspectateallteams( 0 ); + self allowspectateteam( "freelook", 0 ); + self allowspectateteam( "none", 1 ); + self allowspectateteam( "localplayers", 0 ); + break; + case 3: + if ( self issplitscreen() && self otherlocalplayerstillalive() ) + { + self allowspectateallteams( 0 ); + self allowspectateteam( "none", 0 ); + self allowspectateteam( "freelook", 0 ); + self allowspectateteam( "localplayers", 1 ); + break; + } + case 1: + if ( !level.teambased ) + { + self allowspectateallteams( 1 ); + self allowspectateteam( "none", 1 ); + self allowspectateteam( "freelook", 0 ); + self allowspectateteam( "localplayers", 1 ); + } + else if ( isdefined( team ) && isdefined( level.teams[team] ) ) + { + self allowspectateteam( team, 1 ); + self allowspectateallteamsexceptteam( team, 0 ); + self allowspectateteam( "freelook", 0 ); + self allowspectateteam( "none", 0 ); + self allowspectateteam( "localplayers", 1 ); + } + else + { + self allowspectateallteams( 0 ); + self allowspectateteam( "freelook", 0 ); + self allowspectateteam( "none", 0 ); + self allowspectateteam( "localplayers", 1 ); + } + + break; + case 2: + self allowspectateallteams( 1 ); + self allowspectateteam( "freelook", 1 ); + self allowspectateteam( "none", 1 ); + self allowspectateteam( "localplayers", 1 ); + break; + } + + if ( isdefined( team ) && isdefined( level.teams[team] ) ) + { + if ( isdefined( level.spectateoverride[team].allowfreespectate ) ) + self allowspectateteam( "freelook", 1 ); + + if ( isdefined( level.spectateoverride[team].allowenemyspectate ) ) + self allowspectateallteamsexceptteam( team, 1 ); + } +} + +setspectatepermissionsformachine() +{ + self setspectatepermissions(); + + if ( !self issplitscreen() ) + return; + + for ( index = 0; index < level.players.size; index++ ) + { + if ( !isdefined( level.players[index] ) ) + continue; + + if ( level.players[index] == self ) + continue; + + if ( !self isplayeronsamemachine( level.players[index] ) ) + continue; + + level.players[index] setspectatepermissions(); + } +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_tweakables.gsc b/ZM/Core/maps/mp/gametypes_zm/_tweakables.gsc new file mode 100644 index 0000000..b36df38 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_tweakables.gsc @@ -0,0 +1,378 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +gettweakabledvarvalue( category, name ) +{ + switch ( category ) + { + case "rule": + dvar = level.rules[name].dvar; + break; + case "game": + dvar = level.gametweaks[name].dvar; + break; + case "team": + dvar = level.teamtweaks[name].dvar; + break; + case "player": + dvar = level.playertweaks[name].dvar; + break; + case "class": + dvar = level.classtweaks[name].dvar; + break; + case "weapon": + dvar = level.weapontweaks[name].dvar; + break; + case "killstreak": + dvar = level.hardpointtweaks[name].dvar; + break; + case "hud": + dvar = level.hudtweaks[name].dvar; + break; + default: + dvar = undefined; + break; + } + + assert( isdefined( dvar ) ); + value = getdvarint( dvar ); + return value; +} + +gettweakabledvar( category, name ) +{ + switch ( category ) + { + case "rule": + value = level.rules[name].dvar; + break; + case "game": + value = level.gametweaks[name].dvar; + break; + case "team": + value = level.teamtweaks[name].dvar; + break; + case "player": + value = level.playertweaks[name].dvar; + break; + case "class": + value = level.classtweaks[name].dvar; + break; + case "weapon": + value = level.weapontweaks[name].dvar; + break; + case "killstreak": + value = level.hardpointtweaks[name].dvar; + break; + case "hud": + value = level.hudtweaks[name].dvar; + break; + default: + value = undefined; + break; + } + + assert( isdefined( value ) ); + return value; +} + +gettweakablevalue( category, name ) +{ + switch ( category ) + { + case "rule": + value = level.rules[name].value; + break; + case "game": + value = level.gametweaks[name].value; + break; + case "team": + value = level.teamtweaks[name].value; + break; + case "player": + value = level.playertweaks[name].value; + break; + case "class": + value = level.classtweaks[name].value; + break; + case "weapon": + value = level.weapontweaks[name].value; + break; + case "killstreak": + value = level.hardpointtweaks[name].value; + break; + case "hud": + value = level.hudtweaks[name].value; + break; + default: + value = undefined; + break; + } + + overridedvar = "scr_" + level.gametype + "_" + category + "_" + name; + + if ( getdvar( overridedvar ) != "" ) + return getdvarint( overridedvar ); + + assert( isdefined( value ) ); + return value; +} + +gettweakablelastvalue( category, name ) +{ + switch ( category ) + { + case "rule": + value = level.rules[name].lastvalue; + break; + case "game": + value = level.gametweaks[name].lastvalue; + break; + case "team": + value = level.teamtweaks[name].lastvalue; + break; + case "player": + value = level.playertweaks[name].lastvalue; + break; + case "class": + value = level.classtweaks[name].lastvalue; + break; + case "weapon": + value = level.weapontweaks[name].lastvalue; + break; + case "killstreak": + value = level.hardpointtweaks[name].lastvalue; + break; + case "hud": + value = level.hudtweaks[name].lastvalue; + break; + default: + value = undefined; + break; + } + + assert( isdefined( value ) ); + return value; +} + +settweakablevalue( category, name, value ) +{ + switch ( category ) + { + case "rule": + dvar = level.rules[name].dvar; + break; + case "game": + dvar = level.gametweaks[name].dvar; + break; + case "team": + dvar = level.teamtweaks[name].dvar; + break; + case "player": + dvar = level.playertweaks[name].dvar; + break; + case "class": + dvar = level.classtweaks[name].dvar; + break; + case "weapon": + dvar = level.weapontweaks[name].dvar; + break; + case "killstreak": + dvar = level.hardpointtweaks[name].dvar; + break; + case "hud": + dvar = level.hudtweaks[name].dvar; + break; + default: + dvar = undefined; + break; + } + + setdvar( dvar, value ); +} + +settweakablelastvalue( category, name, value ) +{ + switch ( category ) + { + case "rule": + level.rules[name].lastvalue = value; + break; + case "game": + level.gametweaks[name].lastvalue = value; + break; + case "team": + level.teamtweaks[name].lastvalue = value; + break; + case "player": + level.playertweaks[name].lastvalue = value; + break; + case "class": + level.classtweaks[name].lastvalue = value; + break; + case "weapon": + level.weapontweaks[name].lastvalue = value; + break; + case "killstreak": + level.hardpointtweaks[name].lastvalue = value; + break; + case "hud": + level.hudtweaks[name].lastvalue = value; + break; + default: + break; + } +} + +registertweakable( category, name, dvar, value ) +{ + if ( isstring( value ) ) + { + if ( getdvar( dvar ) == "" ) + setdvar( dvar, value ); + else + value = getdvar( dvar ); + } + else if ( getdvar( dvar ) == "" ) + setdvar( dvar, value ); + else + value = getdvarint( dvar ); + + switch ( category ) + { + case "rule": + if ( !isdefined( level.rules[name] ) ) + level.rules[name] = spawnstruct(); + + level.rules[name].value = value; + level.rules[name].lastvalue = value; + level.rules[name].dvar = dvar; + break; + case "game": + if ( !isdefined( level.gametweaks[name] ) ) + level.gametweaks[name] = spawnstruct(); + + level.gametweaks[name].value = value; + level.gametweaks[name].lastvalue = value; + level.gametweaks[name].dvar = dvar; + break; + case "team": + if ( !isdefined( level.teamtweaks[name] ) ) + level.teamtweaks[name] = spawnstruct(); + + level.teamtweaks[name].value = value; + level.teamtweaks[name].lastvalue = value; + level.teamtweaks[name].dvar = dvar; + break; + case "player": + if ( !isdefined( level.playertweaks[name] ) ) + level.playertweaks[name] = spawnstruct(); + + level.playertweaks[name].value = value; + level.playertweaks[name].lastvalue = value; + level.playertweaks[name].dvar = dvar; + break; + case "class": + if ( !isdefined( level.classtweaks[name] ) ) + level.classtweaks[name] = spawnstruct(); + + level.classtweaks[name].value = value; + level.classtweaks[name].lastvalue = value; + level.classtweaks[name].dvar = dvar; + break; + case "weapon": + if ( !isdefined( level.weapontweaks[name] ) ) + level.weapontweaks[name] = spawnstruct(); + + level.weapontweaks[name].value = value; + level.weapontweaks[name].lastvalue = value; + level.weapontweaks[name].dvar = dvar; + break; + case "killstreak": + if ( !isdefined( level.hardpointtweaks[name] ) ) + level.hardpointtweaks[name] = spawnstruct(); + + level.hardpointtweaks[name].value = value; + level.hardpointtweaks[name].lastvalue = value; + level.hardpointtweaks[name].dvar = dvar; + break; + case "hud": + if ( !isdefined( level.hudtweaks[name] ) ) + level.hudtweaks[name] = spawnstruct(); + + level.hudtweaks[name].value = value; + level.hudtweaks[name].lastvalue = value; + level.hudtweaks[name].dvar = dvar; + break; + } +} + +init() +{ + level.clienttweakables = []; + level.tweakablesinitialized = 1; + level.rules = []; + level.gametweaks = []; + level.teamtweaks = []; + level.playertweaks = []; + level.classtweaks = []; + level.weapontweaks = []; + level.hardpointtweaks = []; + level.hudtweaks = []; + registertweakable( "game", "arcadescoring", "scr_game_arcadescoring", 0 ); + registertweakable( "game", "difficulty", "scr_game_difficulty", 1 ); + registertweakable( "game", "pinups", "scr_game_pinups", 0 ); + registertweakable( "team", "teamkillerplaylistbanquantum", "scr_team_teamkillerplaylistbanquantum", 0 ); + registertweakable( "team", "teamkillerplaylistbanpenalty", "scr_team_teamkillerplaylistbanpenalty", 0 ); + registertweakable( "player", "allowrevive", "scr_player_allowrevive", 1 ); + registertweakable( "weapon", "allowfrag", "scr_weapon_allowfrags", 1 ); + registertweakable( "weapon", "allowsmoke", "scr_weapon_allowsmoke", 1 ); + registertweakable( "weapon", "allowflash", "scr_weapon_allowflash", 1 ); + registertweakable( "weapon", "allowc4", "scr_weapon_allowc4", 1 ); + registertweakable( "weapon", "allowsatchel", "scr_weapon_allowsatchel", 1 ); + registertweakable( "weapon", "allowbetty", "scr_weapon_allowbetty", 1 ); + registertweakable( "weapon", "allowrpgs", "scr_weapon_allowrpgs", 1 ); + registertweakable( "weapon", "allowmines", "scr_weapon_allowmines", 1 ); + registertweakable( "hud", "showobjicons", "ui_hud_showobjicons", 1 ); + setclienttweakable( "hud", "showobjicons" ); + registertweakable( "killstreak", "allowradar", "scr_hardpoint_allowradar", 1 ); + registertweakable( "killstreak", "allowradardirection", "scr_hardpoint_allowradardirection", 1 ); + registertweakable( "killstreak", "allowcounteruav", "scr_hardpoint_allowcounteruav", 1 ); + registertweakable( "killstreak", "allowdogs", "scr_hardpoint_allowdogs", 1 ); + registertweakable( "killstreak", "allowhelicopter_comlink", "scr_hardpoint_allowhelicopter_comlink", 1 ); + registertweakable( "killstreak", "allowrcbomb", "scr_hardpoint_allowrcbomb", 1 ); + registertweakable( "killstreak", "allowauto_turret", "scr_hardpoint_allowauto_turret", 1 ); + level thread updateuitweakables(); +} + +setclienttweakable( category, name ) +{ + level.clienttweakables[level.clienttweakables.size] = name; +} + +updateuitweakables() +{ + for (;;) + { + for ( index = 0; index < level.clienttweakables.size; index++ ) + { + clienttweakable = level.clienttweakables[index]; + curvalue = gettweakabledvarvalue( "hud", clienttweakable ); + lastvalue = gettweakablelastvalue( "hud", clienttweakable ); + + if ( curvalue != lastvalue ) + { + updateserverdvar( gettweakabledvar( "hud", clienttweakable ), curvalue ); + settweakablelastvalue( "hud", clienttweakable, curvalue ); + } + } + + wait 1.0; + } +} + +updateserverdvar( dvar, value ) +{ + makedvarserverinfo( dvar, value ); +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_weapon_utils.gsc b/ZM/Core/maps/mp/gametypes_zm/_weapon_utils.gsc new file mode 100644 index 0000000..d4dd932 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_weapon_utils.gsc @@ -0,0 +1,111 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; + +isgrenadelauncherweapon( weapon ) +{ + if ( getsubstr( weapon, 0, 3 ) == "gl_" ) + return true; + + switch ( weapon ) + { + case "xm25_mp": + case "china_lake_mp": + return true; + default: + return false; + } +} + +isdumbrocketlauncherweapon( weapon ) +{ + switch ( weapon ) + { + case "rpg_mp": + case "m220_tow_mp": + return true; + default: + return false; + } +} + +isguidedrocketlauncherweapon( weapon ) +{ + switch ( weapon ) + { + case "smaw_mp": + case "m72_law_mp": + case "m202_flash_mp": + case "javelin_mp": + case "fhj18_mp": + return true; + default: + return false; + } +} + +isrocketlauncherweapon( weapon ) +{ + if ( isdumbrocketlauncherweapon( weapon ) ) + return true; + + if ( isguidedrocketlauncherweapon( weapon ) ) + return true; + + return false; +} + +islauncherweapon( weapon ) +{ + if ( isrocketlauncherweapon( weapon ) ) + return true; + + if ( isgrenadelauncherweapon( weapon ) ) + return true; + + return false; +} + +isreducedteamkillweapon( weapon ) +{ + switch ( weapon ) + { + case "planemortar_mp": + return true; + default: + return false; + } +} + +ishackweapon( weapon ) +{ + return 0; +} + +ispistol( weapon ) +{ + return isdefined( level.side_arm_array[weapon] ); +} + +isflashorstunweapon( weapon ) +{ + if ( isdefined( weapon ) ) + { + switch ( weapon ) + { + case "proximity_grenade_mp": + case "proximity_grenade_aoe_mp": + case "flash_grenade_mp": + case "concussion_grenade_mp": + return true; + } + } + + return false; +} + +isflashorstundamage( weapon, meansofdeath ) +{ + return isflashorstunweapon( weapon ) && ( meansofdeath == "MOD_GRENADE_SPLASH" || meansofdeath == "MOD_GAS" ); +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_weaponobjects.gsc b/ZM/Core/maps/mp/gametypes_zm/_weaponobjects.gsc new file mode 100644 index 0000000..55ead3e --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_weaponobjects.gsc @@ -0,0 +1,2199 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\_ballistic_knife; +#include maps\mp\_challenges; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\gametypes_zm\_globallogic_player; +#include maps\mp\gametypes_zm\_damagefeedback; +#include maps\mp\gametypes_zm\_globallogic_audio; + +init() +{ +/# + debug = weapons_get_dvar_int( "scr_weaponobject_debug", "0" ); +#/ + coneangle = weapons_get_dvar_int( "scr_weaponobject_coneangle", "70" ); + mindist = weapons_get_dvar_int( "scr_weaponobject_mindist", "20" ); + graceperiod = weapons_get_dvar( "scr_weaponobject_graceperiod", "0.6" ); + radius = weapons_get_dvar_int( "scr_weaponobject_radius", "192" ); + level thread onplayerconnect(); + level.watcherweapons = []; + level.watcherweapons = getwatcherweapons(); + level.watcherweaponnames = []; + level.watcherweaponnames = getwatchernames( level.watcherweapons ); + level.retrievableweapons = []; + level.retrievableweapons = getretrievableweapons(); + level.retrievableweaponnames = []; + level.retrievableweaponnames = getwatchernames( level.retrievableweapons ); + level.weaponobjects_headicon_offset = []; + level.weaponobjects_headicon_offset["default"] = vectorscale( ( 0, 0, 1 ), 20.0 ); + level.weaponobjectexplodethisframe = 0; + + if ( getdvar( "scr_deleteexplosivesonspawn" ) == "" ) + setdvar( "scr_deleteexplosivesonspawn", 1 ); + + level.deleteexplosivesonspawn = getdvarint( "scr_deleteexplosivesonspawn" ); + + if ( sessionmodeiszombiesgame() ) + return; + + precachestring( &"MP_DEFUSING_EXPLOSIVE" ); + level.claymorefxid = loadfx( "weapon/claymore/fx_claymore_laser" ); + level._equipment_spark_fx = loadfx( "weapon/grenade/fx_spark_disabled_weapon" ); + level._equipment_emp_destroy_fx = loadfx( "weapon/emp/fx_emp_explosion_equip" ); + level._equipment_explode_fx = loadfx( "explosions/fx_exp_equipment" ); + level._equipment_explode_fx_lg = loadfx( "explosions/fx_exp_equipment_lg" ); + level._effect["powerLight"] = loadfx( "weapon/crossbow/fx_trail_crossbow_blink_red_os" ); + setupretrievablehintstrings(); + level.weaponobjects_headicon_offset["acoustic_sensor_mp"] = vectorscale( ( 0, 0, 1 ), 25.0 ); + level.weaponobjects_headicon_offset["sensor_grenade_mp"] = vectorscale( ( 0, 0, 1 ), 25.0 ); + level.weaponobjects_headicon_offset["camera_spike_mp"] = vectorscale( ( 0, 0, 1 ), 35.0 ); + level.weaponobjects_headicon_offset["claymore_mp"] = vectorscale( ( 0, 0, 1 ), 20.0 ); + level.weaponobjects_headicon_offset["bouncingbetty_mp"] = vectorscale( ( 0, 0, 1 ), 20.0 ); + level.weaponobjects_headicon_offset["satchel_charge_mp"] = vectorscale( ( 0, 0, 1 ), 10.0 ); + level.weaponobjects_headicon_offset["scrambler_mp"] = vectorscale( ( 0, 0, 1 ), 20.0 ); + level.weaponobjects_headicon_offset["trophy_system_mp"] = vectorscale( ( 0, 0, 1 ), 20.0 ); + level.weaponobjects_hacker_trigger_width = 32; + level.weaponobjects_hacker_trigger_height = 32; +} + +getwatchernames( weapons ) +{ + names = []; + + foreach ( index, weapon in weapons ) + names[index] = getsubstr( weapon, 0, weapon.size - 3 ); + + return names; +} + +weapons_get_dvar_int( dvar, def ) +{ + return int( weapons_get_dvar( dvar, def ) ); +} + +weapons_get_dvar( dvar, def ) +{ + if ( getdvar( dvar ) != "" ) + return getdvarfloat( dvar ); + else + { + setdvar( dvar, def ); + return def; + } +} + +setupretrievablehintstrings() +{ + createretrievablehint( "hatchet", &"MP_HATCHET_PICKUP" ); + createretrievablehint( "claymore", &"MP_CLAYMORE_PICKUP" ); + createretrievablehint( "bouncingbetty", &"MP_BOUNCINGBETTY_PICKUP" ); + createretrievablehint( "trophy_system", &"MP_TROPHY_SYSTEM_PICKUP" ); + createretrievablehint( "acoustic_sensor", &"MP_ACOUSTIC_SENSOR_PICKUP" ); + createretrievablehint( "camera_spike", &"MP_CAMERA_SPIKE_PICKUP" ); + createretrievablehint( "satchel_charge", &"MP_SATCHEL_CHARGE_PICKUP" ); + createretrievablehint( "scrambler", &"MP_SCRAMBLER_PICKUP" ); + createdestroyhint( "trophy_system", &"MP_TROPHY_SYSTEM_DESTROY" ); + createdestroyhint( "sensor_grenade", &"MP_SENSOR_GRENADE_DESTROY" ); + createhackerhint( "claymore_mp", &"MP_CLAYMORE_HACKING" ); + createhackerhint( "bouncingbetty_mp", &"MP_BOUNCINGBETTY_HACKING" ); + createhackerhint( "trophy_system_mp", &"MP_TROPHY_SYSTEM_HACKING" ); + createhackerhint( "acoustic_sensor_mp", &"MP_ACOUSTIC_SENSOR_HACKING" ); + createhackerhint( "camera_spike_mp", &"MP_CAMERA_SPIKE_HACKING" ); + createhackerhint( "satchel_charge_mp", &"MP_SATCHEL_CHARGE_HACKING" ); + createhackerhint( "scrambler_mp", &"MP_SCRAMBLER_HACKING" ); +} + +onplayerconnect() +{ + if ( isdefined( level._weaponobjects_on_player_connect_override ) ) + { + level thread [[ level._weaponobjects_on_player_connect_override ]](); + return; + } + + for (;;) + { + level waittill( "connecting", player ); + + player.usedweapons = 0; + player.hits = 0; + player thread onplayerspawned(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + pixbeginevent( "onPlayerSpawned" ); + + if ( !isdefined( self.watchersinitialized ) ) + { + self createbasewatchers(); + self setupretrievablewatcher(); + self thread watchweaponobjectusage(); + self.watchersinitialized = 1; + } + + self resetwatchers(); + pixendevent(); + } +} + +resetwatchers() +{ + if ( !isdefined( self.weaponobjectwatcherarray ) ) + return undefined; + + team = self.team; + + foreach ( watcher in self.weaponobjectwatcherarray ) + resetweaponobjectwatcher( watcher, team ); +} + +createbasewatchers() +{ + foreach ( index, weapon in level.watcherweapons ) + self createweaponobjectwatcher( level.watcherweaponnames[index], weapon, self.team ); + + foreach ( index, weapon in level.retrievableweapons ) + self createweaponobjectwatcher( level.retrievableweaponnames[index], weapon, self.team ); +} + +setupretrievablewatcher() +{ + for ( i = 0; i < level.retrievableweapons.size; i++ ) + { + watcher = getweaponobjectwatcherbyweapon( level.retrievableweapons[i] ); + + if ( !isdefined( watcher.onspawnretrievetriggers ) ) + watcher.onspawnretrievetriggers = ::onspawnretrievableweaponobject; + + if ( !isdefined( watcher.ondestroyed ) ) + watcher.ondestroyed = ::ondestroyed; + + if ( !isdefined( watcher.pickup ) ) + watcher.pickup = ::pickup; + } +} + +createballisticknifewatcher() +{ + watcher = self createuseweaponobjectwatcher( "knife_ballistic", "knife_ballistic_mp", self.team ); + watcher.onspawn = maps\mp\_ballistic_knife::onspawn; + watcher.detonate = ::deleteent; + watcher.onspawnretrievetriggers = maps\mp\_ballistic_knife::onspawnretrievetrigger; + watcher.storedifferentobject = 1; +} + +createhatchetwatcher() +{ + watcher = self createuseweaponobjectwatcher( "hatchet", "hatchet_mp", self.team ); + watcher.detonate = ::deleteent; + watcher.onspawn = ::voidonspawn; + watcher.onspawnretrievetriggers = ::onspawnhatchettrigger; +} + +createtactinsertwatcher() +{ + watcher = self createuseweaponobjectwatcher( "tactical_insertion", "tactical_insertion_mp", self.team ); + watcher.playdestroyeddialog = 0; +} + +creatercbombwatcher() +{ + +} + +createqrdronewatcher() +{ + +} + +createplayerhelicopterwatcher() +{ + watcher = self createuseweaponobjectwatcher( "helicopter_player", "helicopter_player_mp", self.team ); + watcher.altdetonate = 1; + watcher.headicon = 0; +} + +createclaymorewatcher() +{ + watcher = self createproximityweaponobjectwatcher( "claymore", "claymore_mp", self.team ); + watcher.watchforfire = 1; + watcher.detonate = ::claymoredetonate; + watcher.activatesound = "wpn_claymore_alert"; + watcher.hackable = 1; + watcher.hackertoolradius = level.claymorehackertoolradius; + watcher.hackertooltimems = level.claymorehackertooltimems; + watcher.reconmodel = "t6_wpn_claymore_world_detect"; + watcher.ownergetsassist = 1; + detectionconeangle = weapons_get_dvar_int( "scr_weaponobject_coneangle" ); + watcher.detectiondot = cos( detectionconeangle ); + watcher.detectionmindist = weapons_get_dvar_int( "scr_weaponobject_mindist" ); + watcher.detectiongraceperiod = weapons_get_dvar( "scr_weaponobject_graceperiod" ); + watcher.detonateradius = weapons_get_dvar_int( "scr_weaponobject_radius" ); + watcher.stun = ::weaponstun; + watcher.stuntime = 5; +} + +waittillnotmoving_and_notstunned() +{ + for ( prevorigin = self.origin; 1; prevorigin = self.origin ) + { + wait 0.15; + + if ( self.origin == prevorigin && !self isstunned() ) + break; + } +} + +voidonspawn( unused0, unused1 ) +{ + +} + +deleteent( attacker, emp ) +{ + self delete(); +} + +clearfxondeath( fx ) +{ + fx endon( "death" ); + self waittill_any( "death", "hacked" ); + fx delete(); +} + +deleteweaponobjectarray() +{ + if ( isdefined( self.objectarray ) ) + { + for ( i = 0; i < self.objectarray.size; i++ ) + { + if ( isdefined( self.objectarray[i] ) ) + self.objectarray[i] delete(); + } + } + + self.objectarray = []; +} + +claymoredetonate( attacker, weaponname ) +{ + from_emp = 0; + + if ( !isdefined( from_emp ) || !from_emp ) + { + if ( isdefined( attacker ) ) + { + if ( level.teambased && attacker.team != self.owner.team || attacker != self.owner ) + attacker maps\mp\_challenges::destroyedexplosive(); + } + } + + maps\mp\gametypes_zm\_weaponobjects::weapondetonate( attacker, weaponname ); +} + +weapondetonate( attacker, weaponname ) +{ + from_emp = 0; + + if ( from_emp ) + { + self delete(); + return; + } + + if ( isdefined( attacker ) ) + self detonate( attacker ); + else if ( isdefined( self.owner ) && isplayer( self.owner ) ) + self detonate( self.owner ); + else + self detonate(); +} + +waitanddetonate( object, delay, attacker, weaponname ) +{ + object endon( "death" ); + object endon( "hacked" ); + from_emp = 0; + + if ( from_emp ) + { + object setclientflag( 15 ); + object setclientflag( 9 ); + object.stun_fx = 1; + + if ( isdefined( object.name ) && object.name == "qrdrone_turret_mp" ) + playfx( level._equipment_emp_destroy_fx, object.origin + ( 0, 0, 0 ), ( 0, randomfloat( 360 ), 0 ) ); + else + playfx( level._equipment_emp_destroy_fx, object.origin + vectorscale( ( 0, 0, 1 ), 5.0 ), ( 0, randomfloat( 360 ), 0 ) ); + + delay = 1.1; + } + + if ( delay ) + wait( delay ); + + if ( isdefined( object.detonated ) && object.detonated == 1 ) + return; + + if ( !isdefined( self.detonate ) ) + return; + + if ( isdefined( attacker ) && isplayer( attacker ) && isdefined( attacker.pers["team"] ) && isdefined( object.owner ) && isdefined( object.owner.pers["team"] ) ) + { + if ( level.teambased ) + { + if ( attacker.pers["team"] != object.owner.pers["team"] ) + attacker notify( "destroyed_explosive" ); + } + else if ( attacker != object.owner ) + attacker notify( "destroyed_explosive" ); + } + + object.detonated = 1; + object [[ self.detonate ]]( attacker, weaponname ); +} + +detonateweaponobjectarray( forcedetonation, weapon ) +{ + undetonated = []; + + if ( isdefined( self.objectarray ) ) + { + for ( i = 0; i < self.objectarray.size; i++ ) + { + if ( isdefined( self.objectarray[i] ) ) + { + if ( self.objectarray[i] isstunned() && forcedetonation == 0 ) + { + undetonated[undetonated.size] = self.objectarray[i]; + continue; + } + + if ( isdefined( weapon ) ) + { + if ( weapon ishacked() && weapon.name != self.objectarray[i].name ) + { + undetonated[undetonated.size] = self.objectarray[i]; + continue; + } + else if ( self.objectarray[i] ishacked() && weapon.name != self.objectarray[i].name ) + { + undetonated[undetonated.size] = self.objectarray[i]; + continue; + } + } + + self thread waitanddetonate( self.objectarray[i], 0.1, undefined, weapon ); + } + } + } + + self.objectarray = undetonated; +} + +addweaponobjecttowatcher( watchername, weapon ) +{ + watcher = getweaponobjectwatcher( watchername ); + assert( isdefined( watcher ), "Weapon object watcher " + watchername + " does not exist" ); + self addweaponobject( watcher, weapon ); +} + +addweaponobject( watcher, weapon ) +{ + if ( !isdefined( watcher.storedifferentobject ) ) + watcher.objectarray[watcher.objectarray.size] = weapon; + + weapon.owner = self; + weapon.detonated = 0; + weapon.name = watcher.weapon; + + if ( isdefined( watcher.ondamage ) ) + weapon thread [[ watcher.ondamage ]]( watcher ); + else + weapon thread weaponobjectdamage( watcher ); + + weapon.ownergetsassist = watcher.ownergetsassist; + + if ( isdefined( watcher.onspawn ) ) + weapon thread [[ watcher.onspawn ]]( watcher, self ); + + if ( isdefined( watcher.onspawnfx ) ) + weapon thread [[ watcher.onspawnfx ]](); + + if ( isdefined( watcher.reconmodel ) ) + weapon thread attachreconmodel( watcher.reconmodel, self ); + + if ( isdefined( watcher.onspawnretrievetriggers ) ) + weapon thread [[ watcher.onspawnretrievetriggers ]]( watcher, self ); + + if ( watcher.hackable ) + weapon thread hackerinit( watcher ); + + if ( isdefined( watcher.stun ) ) + weapon thread watchscramble( watcher ); + + if ( watcher.playdestroyeddialog ) + { + weapon thread playdialogondeath( self ); + weapon thread watchobjectdamage( self ); + } + + if ( watcher.deleteonkillbrush ) + weapon thread deleteonkillbrush( self ); +} + +watchscramble( watcher ) +{ + +} + +deleteweaponobjecthelper( weapon_ent ) +{ + if ( !isdefined( weapon_ent.name ) ) + return; + + watcher = self getweaponobjectwatcherbyweapon( weapon_ent.name ); + + if ( !isdefined( watcher ) ) + return; + + watcher.objectarray = deleteweaponobject( watcher, weapon_ent ); +} + +deleteweaponobject( watcher, weapon_ent ) +{ + temp_objectarray = watcher.objectarray; + watcher.objectarray = []; + j = 0; + + for ( i = 0; i < temp_objectarray.size; i++ ) + { + if ( !isdefined( temp_objectarray[i] ) || temp_objectarray[i] == weapon_ent ) + continue; + + watcher.objectarray[j] = temp_objectarray[i]; + j++; + } + + return watcher.objectarray; +} + +weaponobjectdamage( watcher ) +{ + self endon( "death" ); + self endon( "hacked" ); + self setcandamage( 1 ); + self.maxhealth = 100000; + self.health = self.maxhealth; + attacker = undefined; + + while ( true ) + { + self waittill( "damage", damage, attacker, direction_vec, point, type, modelname, tagname, partname, weaponname, idflags ); + + if ( isdefined( weaponname ) ) + { + switch ( weaponname ) + { + case "proximity_grenade_mp": + case "flash_grenade_mp": + case "concussion_grenade_mp": + if ( watcher.stuntime > 0 ) + self thread stunstart( watcher, watcher.stuntime ); + + if ( level.teambased && self.owner.team != attacker.team ) + { + if ( maps\mp\gametypes_zm\_globallogic_player::dodamagefeedback( weaponname, attacker ) ) + attacker maps\mp\gametypes_zm\_damagefeedback::updatedamagefeedback(); + } + else if ( !level.teambased && self.owner != attacker ) + { + if ( maps\mp\gametypes_zm\_globallogic_player::dodamagefeedback( weaponname, attacker ) ) + attacker maps\mp\gametypes_zm\_damagefeedback::updatedamagefeedback(); + } + + continue; + case "willy_pete_mp": + continue; + case "emp_grenade_mp": + if ( level.teambased && self.owner.team != attacker.team ) + { + if ( maps\mp\gametypes_zm\_globallogic_player::dodamagefeedback( weaponname, attacker ) ) + attacker maps\mp\gametypes_zm\_damagefeedback::updatedamagefeedback(); + } + else if ( !level.teambased && self.owner != attacker ) + { + if ( maps\mp\gametypes_zm\_globallogic_player::dodamagefeedback( weaponname, attacker ) ) + attacker maps\mp\gametypes_zm\_damagefeedback::updatedamagefeedback(); + } + + break; + default: + break; + } + } + + if ( !isplayer( attacker ) && isdefined( attacker.owner ) ) + attacker = attacker.owner; + + if ( level.teambased && isplayer( attacker ) ) + { + if ( !level.hardcoremode && self.owner.team == attacker.pers["team"] && self.owner != attacker ) + continue; + } + + if ( maps\mp\gametypes_zm\_globallogic_player::dodamagefeedback( weaponname, attacker ) ) + attacker maps\mp\gametypes_zm\_damagefeedback::updatedamagefeedback(); + + if ( !isvehicle( self ) && !friendlyfirecheck( self.owner, attacker ) ) + continue; + + break; + } + + if ( level.weaponobjectexplodethisframe ) + wait( 0.1 + randomfloat( 0.4 ) ); + else + wait 0.05; + + if ( !isdefined( self ) ) + return; + + level.weaponobjectexplodethisframe = 1; + thread resetweaponobjectexplodethisframe(); + + if ( isdefined( type ) && ( issubstr( type, "MOD_GRENADE_SPLASH" ) || issubstr( type, "MOD_GRENADE" ) || issubstr( type, "MOD_EXPLOSIVE" ) ) ) + self.waschained = 1; + + if ( isdefined( idflags ) && idflags & level.idflags_penetration ) + self.wasdamagedfrombulletpenetration = 1; + + self.wasdamaged = 1; + watcher thread waitanddetonate( self, 0.0, attacker, weaponname ); +} + +playdialogondeath( owner ) +{ + owner endon( "death" ); + owner endon( "disconnect" ); + self endon( "hacked" ); + + self waittill( "death" ); + + if ( isdefined( self.playdialog ) && self.playdialog ) + owner maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "equipment_destroyed", "item_destroyed" ); +} + +watchobjectdamage( owner ) +{ + owner endon( "death" ); + owner endon( "disconnect" ); + self endon( "hacked" ); + self endon( "death" ); + + while ( true ) + { + self waittill( "damage", damage, attacker ); + + if ( isdefined( attacker ) && isplayer( attacker ) && attacker != owner ) + self.playdialog = 1; + else + self.playdialog = 0; + } +} + +stunstart( watcher, time ) +{ + self endon( "death" ); + + if ( self isstunned() ) + return; + + if ( isdefined( self.camerahead ) ) + self.camerahead setclientflag( 9 ); + + self setclientflag( 9 ); + + if ( isdefined( watcher.stun ) ) + self thread [[ watcher.stun ]](); + + if ( watcher.name == "rcbomb" ) + self.owner freezecontrolswrapper( 1 ); + + if ( isdefined( time ) ) + wait( time ); + else + return; + + if ( watcher.name == "rcbomb" ) + self.owner freezecontrolswrapper( 0 ); + + self stunstop(); +} + +stunstop() +{ + self notify( "not_stunned" ); + + if ( isdefined( self.camerahead ) ) + self.camerahead clearclientflag( 9 ); + + self clearclientflag( 9 ); +} + +weaponstun() +{ + self endon( "death" ); + self endon( "not_stunned" ); + origin = self gettagorigin( "tag_fx" ); + + if ( !isdefined( origin ) ) + origin = self.origin + vectorscale( ( 0, 0, 1 ), 10.0 ); + + self.stun_fx = spawn( "script_model", origin ); + self.stun_fx setmodel( "tag_origin" ); + self thread stunfxthink( self.stun_fx ); + wait 0.1; + playfxontag( level._equipment_spark_fx, self.stun_fx, "tag_origin" ); + self.stun_fx playsound( "dst_disable_spark" ); +} + +stunfxthink( fx ) +{ + fx endon( "death" ); + self waittill_any( "death", "not_stunned" ); + fx delete(); +} + +isstunned() +{ + return isdefined( self.stun_fx ); +} + +resetweaponobjectexplodethisframe() +{ + wait 0.05; + level.weaponobjectexplodethisframe = 0; +} + +getweaponobjectwatcher( name ) +{ + if ( !isdefined( self.weaponobjectwatcherarray ) ) + return undefined; + + for ( watcher = 0; watcher < self.weaponobjectwatcherarray.size; watcher++ ) + { + if ( self.weaponobjectwatcherarray[watcher].name == name ) + return self.weaponobjectwatcherarray[watcher]; + } + + return undefined; +} + +getweaponobjectwatcherbyweapon( weapon ) +{ + if ( !isdefined( self.weaponobjectwatcherarray ) ) + return undefined; + + for ( watcher = 0; watcher < self.weaponobjectwatcherarray.size; watcher++ ) + { + if ( isdefined( self.weaponobjectwatcherarray[watcher].weapon ) && self.weaponobjectwatcherarray[watcher].weapon == weapon ) + return self.weaponobjectwatcherarray[watcher]; + + if ( isdefined( self.weaponobjectwatcherarray[watcher].weapon ) && isdefined( self.weaponobjectwatcherarray[watcher].altweapon ) && self.weaponobjectwatcherarray[watcher].altweapon == weapon ) + return self.weaponobjectwatcherarray[watcher]; + } + + return undefined; +} + +resetweaponobjectwatcher( watcher, ownerteam ) +{ + if ( level.deleteexplosivesonspawn == 1 ) + { + self notify( "weapon_object_destroyed" ); + watcher deleteweaponobjectarray(); + } + + watcher.ownerteam = ownerteam; +} + +createweaponobjectwatcher( name, weapon, ownerteam ) +{ + if ( !isdefined( self.weaponobjectwatcherarray ) ) + self.weaponobjectwatcherarray = []; + + weaponobjectwatcher = getweaponobjectwatcher( name ); + + if ( !isdefined( weaponobjectwatcher ) ) + { + weaponobjectwatcher = spawnstruct(); + self.weaponobjectwatcherarray[self.weaponobjectwatcherarray.size] = weaponobjectwatcher; + weaponobjectwatcher.name = name; + weaponobjectwatcher.type = "use"; + weaponobjectwatcher.weapon = weapon; + weaponobjectwatcher.weaponidx = getweaponindexfromname( weapon ); + weaponobjectwatcher.watchforfire = 0; + weaponobjectwatcher.hackable = 0; + weaponobjectwatcher.altdetonate = 0; + weaponobjectwatcher.detectable = 1; + weaponobjectwatcher.headicon = 1; + weaponobjectwatcher.stuntime = 0; + weaponobjectwatcher.activatesound = undefined; + weaponobjectwatcher.ignoredirection = undefined; + weaponobjectwatcher.immediatedetonation = undefined; + weaponobjectwatcher.deploysound = getweaponfiresound( weaponobjectwatcher.weaponidx ); + weaponobjectwatcher.deploysoundplayer = getweaponfiresoundplayer( weaponobjectwatcher.weaponidx ); + weaponobjectwatcher.pickupsound = getweaponpickupsound( weaponobjectwatcher.weaponidx ); + weaponobjectwatcher.pickupsoundplayer = getweaponpickupsoundplayer( weaponobjectwatcher.weaponidx ); + weaponobjectwatcher.altweapon = undefined; + weaponobjectwatcher.ownergetsassist = 0; + weaponobjectwatcher.playdestroyeddialog = 1; + weaponobjectwatcher.deleteonkillbrush = 1; + weaponobjectwatcher.deleteondifferentobjectspawn = 1; + weaponobjectwatcher.enemydestroy = 0; + weaponobjectwatcher.onspawn = undefined; + weaponobjectwatcher.onspawnfx = undefined; + weaponobjectwatcher.onspawnretrievetriggers = undefined; + weaponobjectwatcher.ondetonated = undefined; + weaponobjectwatcher.detonate = undefined; + weaponobjectwatcher.stun = undefined; + weaponobjectwatcher.ondestroyed = undefined; + + if ( !isdefined( weaponobjectwatcher.objectarray ) ) + weaponobjectwatcher.objectarray = []; + } + + resetweaponobjectwatcher( weaponobjectwatcher, ownerteam ); + return weaponobjectwatcher; +} + +createuseweaponobjectwatcher( name, weapon, ownerteam ) +{ + weaponobjectwatcher = createweaponobjectwatcher( name, weapon, ownerteam ); + weaponobjectwatcher.type = "use"; + weaponobjectwatcher.onspawn = ::onspawnuseweaponobject; + return weaponobjectwatcher; +} + +createproximityweaponobjectwatcher( name, weapon, ownerteam ) +{ + weaponobjectwatcher = createweaponobjectwatcher( name, weapon, ownerteam ); + weaponobjectwatcher.type = "proximity"; + weaponobjectwatcher.onspawn = ::onspawnproximityweaponobject; + detectionconeangle = weapons_get_dvar_int( "scr_weaponobject_coneangle" ); + weaponobjectwatcher.detectiondot = cos( detectionconeangle ); + weaponobjectwatcher.detectionmindist = weapons_get_dvar_int( "scr_weaponobject_mindist" ); + weaponobjectwatcher.detectiongraceperiod = weapons_get_dvar( "scr_weaponobject_graceperiod" ); + weaponobjectwatcher.detonateradius = weapons_get_dvar_int( "scr_weaponobject_radius" ); + return weaponobjectwatcher; +} + +commononspawnuseweaponobject( watcher, owner ) +{ + if ( watcher.detectable ) + { + if ( isdefined( watcher.ismovable ) && watcher.ismovable ) + self thread weaponobjectdetectionmovable( owner.pers["team"] ); + else + self thread weaponobjectdetectiontrigger_wait( owner.pers["team"] ); + + if ( watcher.headicon && level.teambased ) + { + self waittillnotmoving(); + offset = level.weaponobjects_headicon_offset["default"]; + + if ( isdefined( level.weaponobjects_headicon_offset[self.name] ) ) + offset = level.weaponobjects_headicon_offset[self.name]; + } + } +} + +onspawnuseweaponobject( watcher, owner ) +{ + self commononspawnuseweaponobject( watcher, owner ); +} + +onspawnproximityweaponobject( watcher, owner ) +{ + self thread commononspawnuseweaponobject( watcher, owner ); + self thread proximityweaponobjectdetonation( watcher ); +/# + if ( getdvarint( "scr_weaponobject_debug" ) ) + self thread proximityweaponobjectdebug( watcher ); +#/ +} + +watchweaponobjectusage() +{ + self endon( "disconnect" ); + + if ( !isdefined( self.weaponobjectwatcherarray ) ) + self.weaponobjectwatcherarray = []; + + self thread watchweaponobjectspawn(); + self thread watchweaponprojectileobjectspawn(); + self thread watchweaponobjectdetonation(); + self thread watchweaponobjectaltdetonation(); + self thread watchweaponobjectaltdetonate(); + self thread deleteweaponobjectson(); +} + +watchweaponobjectspawn() +{ + self notify( "watchWeaponObjectSpawn" ); + self endon( "watchWeaponObjectSpawn" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "grenade_fire", weapon, weapname ); + + switch ( weapname ) + { + case "tactical_insertion_mp": + case "scrambler_mp": + case "camera_spike_mp": + case "bouncingbetty_mp": + case "acoustic_sensor_mp": + break; + case "trophy_system_mp": + case "sensor_grenade_mp": + case "satchel_charge_mp": + case "proximity_grenade_mp": + case "claymore_mp": + case "bouncingbetty_mp": + for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) + { + if ( self.weaponobjectwatcherarray[i].weapon != weapname ) + continue; + + objectarray_size = self.weaponobjectwatcherarray[i].objectarray.size; + + for ( j = 0; j < objectarray_size; j++ ) + { + if ( !isdefined( self.weaponobjectwatcherarray[i].objectarray[j] ) ) + self.weaponobjectwatcherarray[i].objectarray = deleteweaponobject( self.weaponobjectwatcherarray[i], weapon ); + } + + numallowed = 2; + + if ( weapname == "proximity_grenade_mp" ) + numallowed = weapons_get_dvar_int( "scr_proximityGrenadeMaxInstances" ); + + if ( isdefined( self.weaponobjectwatcherarray[i].detonate ) && self.weaponobjectwatcherarray[i].objectarray.size > numallowed - 1 ) + self.weaponobjectwatcherarray[i] thread waitanddetonate( self.weaponobjectwatcherarray[i].objectarray[0], 0.1, undefined, weapname ); + } + + break; + default: + break; + } + + if ( !self ishacked() ) + { + if ( weapname == "claymore_mp" || weapname == "satchel_charge_mp" || weapname == "bouncingbetty_mp" ) + self addweaponstat( weapname, "used", 1 ); + } + + watcher = getweaponobjectwatcherbyweapon( weapname ); + + if ( isdefined( watcher ) ) + self addweaponobject( watcher, weapon ); + } +} + +watchweaponprojectileobjectspawn() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "missile_fire", weapon, weapname ); + + watcher = getweaponobjectwatcherbyweapon( weapname ); + + if ( isdefined( watcher ) ) + { + self addweaponobject( watcher, weapon ); + objectarray_size = watcher.objectarray.size; + + for ( j = 0; j < objectarray_size; j++ ) + { + if ( !isdefined( watcher.objectarray[j] ) ) + watcher.objectarray = deleteweaponobject( watcher, weapon ); + } + + if ( isdefined( watcher.detonate ) && watcher.objectarray.size > 1 ) + watcher thread waitanddetonate( watcher.objectarray[0], 0.1 ); + } + } +} + +proximityweaponobjectdebug( watcher ) +{ +/# + self waittillnotmoving(); + self thread showcone( acos( watcher.detectiondot ), watcher.detonateradius, ( 1, 0.85, 0 ) ); + self thread showcone( 60, 256, ( 1, 0, 0 ) ); +#/ +} + +vectorcross( v1, v2 ) +{ +/# + return ( v1[1] * v2[2] - v1[2] * v2[1], v1[2] * v2[0] - v1[0] * v2[2], v1[0] * v2[1] - v1[1] * v2[0] ); +#/ +} + +showcone( angle, range, color ) +{ +/# + self endon( "death" ); + start = self.origin; + forward = anglestoforward( self.angles ); + right = vectorcross( forward, ( 0, 0, 1 ) ); + up = vectorcross( forward, right ); + fullforward = forward * range * cos( angle ); + sideamnt = range * sin( angle ); + + while ( true ) + { + prevpoint = ( 0, 0, 0 ); + + for ( i = 0; i <= 20; i++ ) + { + coneangle = i / 20.0 * 360; + point = start + fullforward + sideamnt * ( right * cos( coneangle ) + up * sin( coneangle ) ); + + if ( i > 0 ) + { + line( start, point, color ); + line( prevpoint, point, color ); + } + + prevpoint = point; + } + + wait 0.05; + } +#/ +} + +weaponobjectdetectionmovable( ownerteam ) +{ + self endon( "end_detection" ); + level endon( "game_ended" ); + self endon( "death" ); + self endon( "hacked" ); + + if ( level.oldschool ) + return; + + if ( !level.teambased ) + return; + + self.detectid = "rcBomb" + gettime() + randomint( 1000000 ); + + while ( !level.gameended ) + { + wait 1; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( isai( player ) ) + continue; + + if ( isdefined( self.model_name ) && player hasperk( "specialty_detectexplosive" ) ) + { + switch ( self.model_name ) + { + case "t6_wpn_claymore_world_detect": + case "t6_wpn_c4_world_detect": + break; + default: + continue; + } + } + else + continue; + + if ( player.team == ownerteam ) + continue; + + if ( isdefined( player.bombsquadids[self.detectid] ) ) + continue; + } + } +} + +seticonpos( item, icon, heightincrease ) +{ + icon.x = item.origin[0]; + icon.y = item.origin[1]; + icon.z = item.origin[2] + heightincrease; +} + +weaponobjectdetectiontrigger_wait( ownerteam ) +{ + self endon( "death" ); + self endon( "hacked" ); + waittillnotmoving(); + + if ( level.oldschool ) + return; + + self thread weaponobjectdetectiontrigger( ownerteam ); +} + +weaponobjectdetectiontrigger( ownerteam ) +{ + trigger = spawn( "trigger_radius", self.origin - vectorscale( ( 0, 0, 1 ), 128.0 ), 0, 512, 256 ); + trigger.detectid = "trigger" + gettime() + randomint( 1000000 ); + trigger sethintlowpriority( 1 ); + self waittill_any( "death", "hacked" ); + trigger notify( "end_detection" ); + + if ( isdefined( trigger.bombsquadicon ) ) + trigger.bombsquadicon destroy(); + + trigger delete(); +} + +hackertriggersetvisibility( owner ) +{ + self endon( "death" ); + assert( isplayer( owner ) ); + ownerteam = owner.pers["team"]; + + for (;;) + { + if ( level.teambased ) + { + self setvisibletoallexceptteam( ownerteam ); + self setexcludeteamfortrigger( ownerteam ); + } + else + { + self setvisibletoall(); + self setteamfortrigger( "none" ); + } + + self setinvisibletoplayer( owner ); + level waittill_any( "player_spawned", "joined_team" ); + } +} + +hackernotmoving() +{ + self endon( "death" ); + self waittillnotmoving(); + self notify( "landed" ); +} + +hackerinit( watcher ) +{ + self thread hackernotmoving(); + event = self waittill_any_return( "death", "landed" ); + + if ( event == "death" ) + return; + + triggerorigin = self.origin; + + if ( isdefined( self.name ) && self.name == "satchel_charge_mp" ) + triggerorigin = self gettagorigin( "tag_fx" ); + + self.hackertrigger = spawn( "trigger_radius_use", triggerorigin, level.weaponobjects_hacker_trigger_width, level.weaponobjects_hacker_trigger_height ); +/# + +#/ + self.hackertrigger sethintlowpriority( 1 ); + self.hackertrigger setcursorhint( "HINT_NOICON", self ); + self.hackertrigger setignoreentfortrigger( self ); + self.hackertrigger enablelinkto(); + self.hackertrigger linkto( self ); + + if ( isdefined( level.hackerhints[self.name] ) ) + self.hackertrigger sethintstring( level.hackerhints[self.name].hint ); + else + self.hackertrigger sethintstring( &"MP_GENERIC_HACKING" ); + + self.hackertrigger setperkfortrigger( "specialty_disarmexplosive" ); + self.hackertrigger thread hackertriggersetvisibility( self.owner ); + self thread hackerthink( self.hackertrigger, watcher ); +} + +hackerthink( trigger, watcher ) +{ + self endon( "death" ); + + for (;;) + { + trigger waittill( "trigger", player, instant ); + + if ( !isdefined( instant ) && !trigger hackerresult( player, self.owner ) ) + continue; + + self.owner hackerremoveweapon( self ); + self.owner maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "hacked_equip", "item_destroyed" ); + self.hacked = 1; + self setmissileowner( player ); + self setteam( player.pers["team"] ); + self.owner = player; + + if ( isweaponequipment( self.name ) ) + { + + } + + if ( self.name == "satchel_charge_mp" && isdefined( player.lowermessage ) ) + { + player.lowermessage settext( &"PLATFORM_SATCHEL_CHARGE_DOUBLE_TAP" ); + player.lowermessage.alpha = 1; + player.lowermessage fadeovertime( 2.0 ); + player.lowermessage.alpha = 0; + } + + self notify( "hacked", player ); + level notify( "hacked", self, player ); + + if ( self.name == "camera_spike_mp" && isdefined( self.camerahead ) ) + self.camerahead notify( "hacked", player ); +/# + +#/ + if ( isdefined( watcher.stun ) ) + { + self thread stunstart( watcher, 0.75 ); + wait 0.75; + } + else + wait 0.05; + + if ( isdefined( player ) && player.sessionstate == "playing" ) + player notify( "grenade_fire", self, self.name ); + else + watcher thread waitanddetonate( self, 0.0 ); + + return; + } +} + +ishacked() +{ + return isdefined( self.hacked ) && self.hacked; +} + +hackerunfreezeplayer( player ) +{ + self endon( "hack_done" ); + + self waittill( "death" ); + + if ( isdefined( player ) ) + { + player freeze_player_controls( 0 ); + player enableweapons(); + } +} + +hackerresult( player, owner ) +{ + success = 1; + time = gettime(); + hacktime = getdvarfloat( "perk_disarmExplosiveTime" ); + + if ( !canhack( player, owner, 1 ) ) + return 0; + + self thread hackerunfreezeplayer( player ); + + while ( time + hacktime * 1000 > gettime() ) + { + if ( !canhack( player, owner, 0 ) ) + { + success = 0; + break; + } + + if ( !player usebuttonpressed() ) + { + success = 0; + break; + } + + if ( !isdefined( self ) ) + { + success = 0; + break; + } + + player freeze_player_controls( 1 ); + player disableweapons(); + + if ( !isdefined( self.progressbar ) ) + { + self.progressbar = player createprimaryprogressbar(); + self.progressbar.lastuserate = -1; + self.progressbar showelem(); + self.progressbar updatebar( 0.01, 1 / hacktime ); + self.progresstext = player createprimaryprogressbartext(); + self.progresstext settext( &"MP_HACKING" ); + self.progresstext showelem(); + player playlocalsound( "evt_hacker_hacking" ); + } + + wait 0.05; + } + + if ( isdefined( player ) ) + { + player freeze_player_controls( 0 ); + player enableweapons(); + } + + if ( isdefined( self.progressbar ) ) + { + self.progressbar destroyelem(); + self.progresstext destroyelem(); + } + + if ( isdefined( self ) ) + self notify( "hack_done" ); + + return success; +} + +canhack( player, owner, weapon_check ) +{ + if ( !isdefined( player ) ) + return false; + + if ( !isplayer( player ) ) + return false; + + if ( !isalive( player ) ) + return false; + + if ( !isdefined( owner ) ) + return false; + + if ( owner == player ) + return false; + + if ( level.teambased && player.team == owner.team ) + return false; + + if ( isdefined( player.isdefusing ) && player.isdefusing ) + return false; + + if ( isdefined( player.isplanting ) && player.isplanting ) + return false; + + if ( isdefined( player.proxbar ) && !player.proxbar.hidden ) + return false; + + if ( isdefined( player.revivingteammate ) && player.revivingteammate == 1 ) + return false; + + if ( !player isonground() ) + return false; + + if ( player isinvehicle() ) + return false; + + if ( player isweaponviewonlylinked() ) + return false; + + if ( !player hasperk( "specialty_disarmexplosive" ) ) + return false; + + if ( player isempjammed() ) + return false; + + if ( isdefined( player.laststand ) && player.laststand ) + return false; + + if ( weapon_check ) + { + if ( player isthrowinggrenade() ) + return false; + + if ( player isswitchingweapons() ) + return false; + + if ( player ismeleeing() ) + return false; + + weapon = player getcurrentweapon(); + + if ( !isdefined( weapon ) ) + return false; + + if ( weapon == "none" ) + return false; + + if ( isweaponequipment( weapon ) && player isfiring() ) + return false; + + if ( isweaponspecificuse( weapon ) ) + return false; + } + + return true; +} + +hackerremoveweapon( weapon ) +{ + for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) + { + if ( self.weaponobjectwatcherarray[i].weapon != weapon.name ) + continue; + + objectarray_size = self.weaponobjectwatcherarray[i].objectarray.size; + + for ( j = 0; j < objectarray_size; j++ ) + self.weaponobjectwatcherarray[i].objectarray = deleteweaponobject( self.weaponobjectwatcherarray[i], weapon ); + + return; + } +} + +proximityweaponobjectdetonation( watcher ) +{ + self endon( "death" ); + self endon( "hacked" ); + self waittillnotmoving(); + + if ( isdefined( watcher.activationdelay ) ) + wait( watcher.activationdelay ); + + damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - watcher.detonateradius ), level.aitriggerspawnflags | level.vehicletriggerspawnflags, watcher.detonateradius, watcher.detonateradius * 2 ); + damagearea enablelinkto(); + damagearea linkto( self ); + self thread deleteondeath( damagearea ); + up = anglestoup( self.angles ); + traceorigin = self.origin + up; + + while ( true ) + { + damagearea waittill( "trigger", ent ); + + if ( getdvarint( "scr_weaponobject_debug" ) != 1 ) + { + if ( isdefined( self.owner ) && ent == self.owner ) + continue; + + if ( isdefined( self.owner ) && isvehicle( ent ) && isdefined( ent.owner ) && self.owner == ent.owner ) + continue; + + if ( !friendlyfirecheck( self.owner, ent, 0 ) ) + continue; + } + + if ( lengthsquared( ent getvelocity() ) < 10 && !isdefined( watcher.immediatedetonation ) ) + continue; + + if ( !ent shouldaffectweaponobject( self, watcher ) ) + continue; + + if ( self isstunned() ) + continue; + + if ( isplayer( ent ) && !isalive( ent ) ) + continue; + + if ( ent damageconetrace( traceorigin, self ) > 0 ) + break; + } + + if ( isdefined( watcher.activatesound ) ) + self playsound( watcher.activatesound ); + + if ( isdefined( watcher.activatefx ) ) + self setclientflag( 4 ); + + ent thread deathdodger( watcher.detectiongraceperiod ); + wait( watcher.detectiongraceperiod ); + + if ( isplayer( ent ) && ent hasperk( "specialty_delayexplosive" ) ) + wait( getdvarfloat( "perk_delayExplosiveTime" ) ); + + self.origin = traceorigin; + + if ( isdefined( self.owner ) && isplayer( self.owner ) ) + self [[ watcher.detonate ]]( self.owner ); + else + self [[ watcher.detonate ]](); +} + +shouldaffectweaponobject( object, watcher ) +{ + pos = self.origin + vectorscale( ( 0, 0, 1 ), 32.0 ); + + if ( isdefined( watcher.ignoredirection ) ) + return 1; + + dirtopos = pos - object.origin; + objectforward = anglestoforward( object.angles ); + dist = vectordot( dirtopos, objectforward ); + + if ( dist < watcher.detectionmindist ) + return 0; + + dirtopos = vectornormalize( dirtopos ); + dot = vectordot( dirtopos, objectforward ); + return dot > watcher.detectiondot; +} + +deathdodger( graceperiod ) +{ + self endon( "death" ); + self endon( "disconnect" ); + wait( 0.2 + graceperiod ); + self notify( "death_dodger" ); +} + +deleteondeath( ent ) +{ + self waittill_any( "death", "hacked" ); + wait 0.05; + + if ( isdefined( ent ) ) + ent delete(); +} + +deleteonkillbrush( player ) +{ + player endon( "disconnect" ); + self endon( "death" ); + self endon( "stationary" ); + killbrushes = getentarray( "trigger_hurt", "classname" ); + + while ( true ) + { + for ( i = 0; i < killbrushes.size; i++ ) + { + if ( self istouching( killbrushes[i] ) ) + { + if ( self.origin[2] > player.origin[2] ) + break; + + if ( isdefined( self ) ) + self delete(); + + return; + } + } + + wait 0.1; + } +} + +watchweaponobjectaltdetonation() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "alt_detonate" ); + + if ( !isalive( self ) ) + continue; + + for ( watcher = 0; watcher < self.weaponobjectwatcherarray.size; watcher++ ) + { + if ( self.weaponobjectwatcherarray[watcher].altdetonate ) + self.weaponobjectwatcherarray[watcher] detonateweaponobjectarray( 0 ); + } + } +} + +watchweaponobjectaltdetonate() +{ + self endon( "disconnect" ); + self endon( "detonated" ); + level endon( "game_ended" ); + buttontime = 0; + + for (;;) + { + self waittill( "doubletap_detonate" ); + + if ( !isalive( self ) ) + continue; + + self notify( "alt_detonate" ); + wait 0.05; + } +} + +watchweaponobjectdetonation() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "detonate" ); + + if ( self isusingoffhand() ) + weap = self getcurrentoffhand(); + else + weap = self getcurrentweapon(); + + watcher = getweaponobjectwatcherbyweapon( weap ); + + if ( isdefined( watcher ) ) + watcher detonateweaponobjectarray( 0 ); + } +} + +deleteweaponobjectson() +{ + while ( true ) + { + msg = self waittill_any_return( "disconnect", "joined_team", "joined_spectators", "death" ); + + if ( msg == "death" ) + continue; + + if ( !isdefined( self.weaponobjectwatcherarray ) ) + return; + + watchers = []; + + for ( watcher = 0; watcher < self.weaponobjectwatcherarray.size; watcher++ ) + { + weaponobjectwatcher = spawnstruct(); + watchers[watchers.size] = weaponobjectwatcher; + weaponobjectwatcher.objectarray = []; + + if ( isdefined( self.weaponobjectwatcherarray[watcher].objectarray ) ) + weaponobjectwatcher.objectarray = self.weaponobjectwatcherarray[watcher].objectarray; + } + + wait 0.05; + + for ( watcher = 0; watcher < watchers.size; watcher++ ) + watchers[watcher] deleteweaponobjectarray(); + + if ( msg == "disconnect" ) + return; + } +} + +saydamaged( orig, amount ) +{ +/# + for ( i = 0; i < 60; i++ ) + { + print3d( orig, "damaged! " + amount ); + wait 0.05; + } +#/ +} + +showheadicon( trigger ) +{ + triggerdetectid = trigger.detectid; + useid = -1; + + for ( index = 0; index < 4; index++ ) + { + detectid = self.bombsquadicons[index].detectid; + + if ( detectid == triggerdetectid ) + return; + + if ( detectid == "" ) + useid = index; + } + + if ( useid < 0 ) + return; + + self.bombsquadids[triggerdetectid] = 1; + self.bombsquadicons[useid].x = trigger.origin[0]; + self.bombsquadicons[useid].y = trigger.origin[1]; + self.bombsquadicons[useid].z = trigger.origin[2] + 24 + 128; + self.bombsquadicons[useid] fadeovertime( 0.25 ); + self.bombsquadicons[useid].alpha = 1; + self.bombsquadicons[useid].detectid = trigger.detectid; + + while ( isalive( self ) && isdefined( trigger ) && self istouching( trigger ) ) + wait 0.05; + + if ( !isdefined( self ) ) + return; + + self.bombsquadicons[useid].detectid = ""; + self.bombsquadicons[useid] fadeovertime( 0.25 ); + self.bombsquadicons[useid].alpha = 0; + self.bombsquadids[triggerdetectid] = undefined; +} + +friendlyfirecheck( owner, attacker, forcedfriendlyfirerule ) +{ + if ( !isdefined( owner ) ) + return true; + + if ( !level.teambased ) + return true; + + friendlyfirerule = level.friendlyfire; + + if ( isdefined( forcedfriendlyfirerule ) ) + friendlyfirerule = forcedfriendlyfirerule; + + if ( friendlyfirerule != 0 ) + return true; + + if ( attacker == owner ) + return true; + + if ( isplayer( attacker ) ) + { + if ( !isdefined( attacker.pers["team"] ) ) + return true; + + if ( attacker.pers["team"] != owner.pers["team"] ) + return true; + } + else if ( isai( attacker ) ) + { + if ( attacker.aiteam != owner.pers["team"] ) + return true; + } + else if ( isvehicle( attacker ) ) + { + if ( isdefined( attacker.owner ) && isplayer( attacker.owner ) ) + { + if ( attacker.owner.pers["team"] != owner.pers["team"] ) + return true; + } + } + + return false; +} + +onspawnhatchettrigger( watcher, player ) +{ + self endon( "death" ); + self setowner( player ); + self setteam( player.pers["team"] ); + self.owner = player; + self.oldangles = self.angles; + self waittillnotmoving(); + waittillframeend; + + if ( player.pers["team"] == "spectator" ) + return; + + triggerorigin = self.origin; + triggerparentent = undefined; + + if ( isdefined( self.stucktoplayer ) ) + { + if ( isalive( self.stucktoplayer ) || !isdefined( self.stucktoplayer.body ) ) + { + if ( isalive( self.stucktoplayer ) ) + { + triggerparentent = self; + self unlink(); + self.angles = self.oldangles; + self launch( vectorscale( ( 1, 1, 1 ), 5.0 ) ); + self waittillnotmoving(); + waittillframeend; + } + else + triggerparentent = self.stucktoplayer; + } + else + triggerparentent = self.stucktoplayer.body; + } + + if ( isdefined( triggerparentent ) ) + triggerorigin = triggerparentent.origin + vectorscale( ( 0, 0, 1 ), 10.0 ); + + self.hatchetpickuptrigger = spawn( "trigger_radius", triggerorigin, 0, 50, 50 ); + self.hatchetpickuptrigger enablelinkto(); + self.hatchetpickuptrigger linkto( self ); + + if ( isdefined( triggerparentent ) ) + self.hatchetpickuptrigger linkto( triggerparentent ); + + self thread watchhatchettrigger( self.hatchetpickuptrigger, watcher.pickup, watcher.pickupsoundplayer, watcher.pickupsound ); +/# + thread switch_team( self, watcher.weapon, player ); +#/ + self thread watchshutdown( player ); +} + +watchhatchettrigger( trigger, callback, playersoundonuse, npcsoundonuse ) +{ + self endon( "delete" ); + self endon( "hacked" ); + + while ( true ) + { + trigger waittill( "trigger", player ); + + if ( !isalive( player ) ) + continue; + + if ( !player isonground() ) + continue; + + if ( isdefined( trigger.claimedby ) && player != trigger.claimedby ) + continue; + + if ( !player hasweapon( self.name ) ) + continue; + + curr_ammo = player getweaponammostock( "hatchet_mp" ); + maxammo = weaponmaxammo( "hatchet_mp" ); + + if ( player.grenadetypeprimary == "hatchet_mp" ) + maxammo = player.grenadetypeprimarycount; + else if ( isdefined( player.grenadetypesecondary ) && player.grenadetypesecondary == "hatchet_mp" ) + maxammo = player.grenadetypesecondarycount; + + if ( curr_ammo >= maxammo ) + continue; + + if ( isdefined( playersoundonuse ) ) + player playlocalsound( playersoundonuse ); + + if ( isdefined( npcsoundonuse ) ) + player playsound( npcsoundonuse ); + + self thread [[ callback ]]( player ); + } +} + +onspawnretrievableweaponobject( watcher, player ) +{ + self endon( "death" ); + self endon( "hacked" ); + + if ( ishacked() ) + { + self thread watchshutdown( player ); + return; + } + + self setowner( player ); + self setteam( player.pers["team"] ); + self.owner = player; + self.oldangles = self.angles; + self waittillnotmoving(); + + if ( isdefined( watcher.activationdelay ) ) + wait( watcher.activationdelay ); + + waittillframeend; + + if ( player.pers["team"] == "spectator" ) + return; + + triggerorigin = self.origin; + triggerparentent = undefined; + + if ( isdefined( self.stucktoplayer ) ) + { + if ( isalive( self.stucktoplayer ) || !isdefined( self.stucktoplayer.body ) ) + triggerparentent = self.stucktoplayer; + else + triggerparentent = self.stucktoplayer.body; + } + + if ( isdefined( triggerparentent ) ) + triggerorigin = triggerparentent.origin + vectorscale( ( 0, 0, 1 ), 10.0 ); + else + { + up = anglestoup( self.angles ); + triggerorigin = self.origin + up; + } + + if ( isdefined( watcher.adjusttriggerorigin ) ) + triggerorigin = self [[ watcher.adjusttriggerorigin ]]( triggerorigin ); + + self.pickuptrigger = spawn( "trigger_radius_use", triggerorigin ); + self.pickuptrigger sethintlowpriority( 1 ); + self.pickuptrigger setcursorhint( "HINT_NOICON", self ); + self.pickuptrigger enablelinkto(); + self.pickuptrigger linkto( self ); + self.pickuptrigger setinvisibletoall(); + self.pickuptrigger setvisibletoplayer( player ); + + if ( isdefined( level.retrievehints[watcher.name] ) ) + self.pickuptrigger sethintstring( level.retrievehints[watcher.name].hint ); + else + self.pickuptrigger sethintstring( &"MP_GENERIC_PICKUP" ); + + if ( level.teambased ) + self.pickuptrigger setteamfortrigger( player.pers["team"] ); + else + self.pickuptrigger setteamfortrigger( "none" ); + + if ( isdefined( triggerparentent ) ) + self.pickuptrigger linkto( triggerparentent ); + + if ( watcher.enemydestroy ) + { + self.enemytrigger = spawn( "trigger_radius_use", triggerorigin ); + self.enemytrigger setcursorhint( "HINT_NOICON", self ); + self.enemytrigger enablelinkto(); + self.enemytrigger linkto( self ); + self.enemytrigger setinvisibletoplayer( player ); + + if ( level.teambased ) + { + self.enemytrigger setexcludeteamfortrigger( player.team ); + self.enemytrigger.triggerteamignore = self.team; + } + + if ( isdefined( level.destroyhints[watcher.name] ) ) + self.enemytrigger sethintstring( level.destroyhints[watcher.name].hint ); + else + self.enemytrigger sethintstring( &"MP_GENERIC_DESTROY" ); + + self thread watchusetrigger( self.enemytrigger, watcher.ondestroyed ); + } + + self thread watchusetrigger( self.pickuptrigger, watcher.pickup, watcher.pickupsoundplayer, watcher.pickupsound ); +/# + thread switch_team( self, watcher.weapon, player ); +#/ + if ( isdefined( watcher.pickup_trigger_listener ) ) + self thread [[ watcher.pickup_trigger_listener ]]( self.pickuptrigger, player ); + + self thread watchshutdown( player ); +} + +watch_trigger_visibility( triggers, weap_name ) +{ + self notify( "watchTriggerVisibility" ); + self endon( "watchTriggerVisibility" ); + self endon( "death" ); + self endon( "hacked" ); + max_ammo = weaponmaxammo( weap_name ); + start_ammo = weaponstartammo( weap_name ); + ammo_to_check = 0; + + while ( true ) + { + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] hasweapon( weap_name ) ) + { + ammo_to_check = max_ammo; + + if ( self.owner == players[i] ) + { + curr_ammo = players[i] getweaponammostock( weap_name ) + players[i] getweaponammoclip( weap_name ); + + if ( weap_name == "hatchet_mp" ) + curr_ammo = players[i] getweaponammostock( weap_name ); + + if ( curr_ammo < ammo_to_check ) + { + triggers["owner_pickup"] setvisibletoplayer( players[i] ); + triggers["enemy_pickup"] setinvisibletoplayer( players[i] ); + } + else + { + triggers["owner_pickup"] setinvisibletoplayer( players[i] ); + triggers["enemy_pickup"] setinvisibletoplayer( players[i] ); + } + } + else + { + curr_ammo = players[i] getweaponammostock( weap_name ) + players[i] getweaponammoclip( weap_name ); + + if ( weap_name == "hatchet_mp" ) + curr_ammo = players[i] getweaponammostock( weap_name ); + + if ( curr_ammo < ammo_to_check ) + { + triggers["owner_pickup"] setinvisibletoplayer( players[i] ); + triggers["enemy_pickup"] setvisibletoplayer( players[i] ); + } + else + { + triggers["owner_pickup"] setinvisibletoplayer( players[i] ); + triggers["enemy_pickup"] setinvisibletoplayer( players[i] ); + } + } + + continue; + } + + triggers["owner_pickup"] setinvisibletoplayer( players[i] ); + triggers["enemy_pickup"] setinvisibletoplayer( players[i] ); + } + + wait 0.05; + } +} + +destroyent() +{ + self delete(); +} + +pickup( player ) +{ + if ( self.name != "hatchet_mp" && isdefined( self.owner ) && self.owner != player ) + return; + + self.playdialog = 0; + self destroyent(); + player giveweapon( self.name ); + clip_ammo = player getweaponammoclip( self.name ); + clip_max_ammo = weaponclipsize( self.name ); + + if ( clip_ammo < clip_max_ammo ) + clip_ammo++; + + player setweaponammoclip( self.name, clip_ammo ); +} + +ondestroyed( attacker ) +{ + playfx( level._effect["tacticalInsertionFizzle"], self.origin ); + self playsound( "dst_tac_insert_break" ); + self.owner maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "equipment_destroyed", "item_destroyed" ); + self delete(); +} + +watchshutdown( player ) +{ + self waittill_any( "death", "hacked" ); + pickuptrigger = self.pickuptrigger; + hackertrigger = self.hackertrigger; + hatchetpickuptrigger = self.hatchetpickuptrigger; + enemytrigger = self.enemytrigger; + + if ( isdefined( pickuptrigger ) ) + pickuptrigger delete(); + + if ( isdefined( hackertrigger ) ) + { + if ( isdefined( hackertrigger.progressbar ) ) + { + hackertrigger.progressbar destroyelem(); + hackertrigger.progresstext destroyelem(); + } + + hackertrigger delete(); + } + + if ( isdefined( hatchetpickuptrigger ) ) + hatchetpickuptrigger delete(); + + if ( isdefined( enemytrigger ) ) + enemytrigger delete(); +} + +watchusetrigger( trigger, callback, playersoundonuse, npcsoundonuse ) +{ + self endon( "delete" ); + self endon( "hacked" ); + + while ( true ) + { + trigger waittill( "trigger", player ); + + if ( !isalive( player ) ) + continue; + + if ( !player isonground() ) + continue; + + if ( isdefined( trigger.triggerteam ) && player.pers["team"] != trigger.triggerteam ) + continue; + + if ( isdefined( trigger.triggerteamignore ) && player.team == trigger.triggerteamignore ) + continue; + + if ( isdefined( trigger.claimedby ) && player != trigger.claimedby ) + continue; + + grenade = player.throwinggrenade; + isequipment = isweaponequipment( player getcurrentweapon() ); + + if ( isdefined( isequipment ) && isequipment ) + grenade = 0; + + if ( player usebuttonpressed() && !grenade && !player meleebuttonpressed() ) + { + if ( isdefined( playersoundonuse ) ) + player playlocalsound( playersoundonuse ); + + if ( isdefined( npcsoundonuse ) ) + player playsound( npcsoundonuse ); + + self thread [[ callback ]]( player ); + } + } +} + +createretrievablehint( name, hint ) +{ + retrievehint = spawnstruct(); + retrievehint.name = name; + retrievehint.hint = hint; + level.retrievehints[name] = retrievehint; +} + +createhackerhint( name, hint ) +{ + hackerhint = spawnstruct(); + hackerhint.name = name; + hackerhint.hint = hint; + level.hackerhints[name] = hackerhint; +} + +createdestroyhint( name, hint ) +{ + destroyhint = spawnstruct(); + destroyhint.name = name; + destroyhint.hint = hint; + level.destroyhints[name] = destroyhint; +} + +attachreconmodel( modelname, owner ) +{ + if ( !isdefined( self ) ) + return; + + reconmodel = spawn( "script_model", self.origin ); + reconmodel.angles = self.angles; + reconmodel setmodel( modelname ); + reconmodel.model_name = modelname; + reconmodel linkto( self ); + reconmodel setcontents( 0 ); + reconmodel resetreconmodelvisibility( owner ); + reconmodel thread watchreconmodelfordeath( self ); + reconmodel thread resetreconmodelonevent( "joined_team", owner ); + reconmodel thread resetreconmodelonevent( "player_spawned", owner ); +} + +resetreconmodelvisibility( owner ) +{ + if ( !isdefined( self ) ) + return; + + self setinvisibletoall(); + self setforcenocull(); + + if ( !isdefined( owner ) ) + return; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( !level.players[i] hasperk( "specialty_detectexplosive" ) && !level.players[i] hasperk( "specialty_showenemyequipment" ) ) + continue; + + if ( level.players[i].team == "spectator" ) + continue; + + hasreconmodel = 0; + + if ( level.players[i] hasperk( "specialty_detectexplosive" ) ) + { + switch ( self.model_name ) + { + case "t6_wpn_claymore_world_detect": + case "t6_wpn_c4_world_detect": + hasreconmodel = 1; + break; + default: + break; + } + } + + if ( level.players[i] hasperk( "specialty_showenemyequipment" ) ) + { + switch ( self.model_name ) + { + case "t6_wpn_trophy_system_world_detect": + case "t6_wpn_taser_mine_world_detect": + case "t6_wpn_tac_insert_detect": + case "t6_wpn_motion_sensor_world_detect": + case "t6_wpn_claymore_world_detect": + case "t6_wpn_c4_world_detect": + case "t6_wpn_bouncing_betty_world_detect": + case "t5_weapon_scrambler_world_detect": + hasreconmodel = 1; + break; + default: + break; + } + } + + if ( !hasreconmodel ) + continue; + + isenemy = 1; + + if ( level.teambased ) + { + if ( level.players[i].team == owner.team ) + isenemy = 0; + } + else if ( level.players[i] == owner ) + isenemy = 0; + + if ( isenemy ) + self setvisibletoplayer( level.players[i] ); + } +} + +watchreconmodelfordeath( parentent ) +{ + self endon( "death" ); + parentent waittill_any( "death", "hacked" ); + self delete(); +} + +resetreconmodelonevent( eventname, owner ) +{ + self endon( "death" ); + + for (;;) + { + level waittill( eventname, newowner ); + + if ( isdefined( newowner ) ) + owner = newowner; + + self resetreconmodelvisibility( owner ); + } +} + +switch_team( entity, weapon_name, owner ) +{ +/# + +#/ +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_weapons.gsc b/ZM/Core/maps/mp/gametypes_zm/_weapons.gsc new file mode 100644 index 0000000..8193c80 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_weapons.gsc @@ -0,0 +1,1902 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_weapon_utils; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\_sticky_grenade; +#include maps\mp\_bb; +#include maps\mp\gametypes_zm\_weapons; +#include maps\mp\_challenges; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\gametypes_zm\_globallogic_utils; +#include maps\mp\gametypes_zm\_shellshock; +#include maps\mp\gametypes_zm\_gameobjects; + +init() +{ + precacheitem( "knife_mp" ); + precacheitem( "knife_held_mp" ); + precacheitem( "dogs_mp" ); + precacheitem( "dog_bite_mp" ); + precacheitem( "explosive_bolt_mp" ); + precachemodel( "t6_wpn_claymore_world_detect" ); + precachemodel( "t6_wpn_c4_world_detect" ); + precachemodel( "t5_weapon_scrambler_world_detect" ); + precachemodel( "t6_wpn_tac_insert_detect" ); + precachemodel( "t6_wpn_taser_mine_world_detect" ); + precachemodel( "t6_wpn_motion_sensor_world_detect" ); + precachemodel( "t6_wpn_trophy_system_world_detect" ); + precachemodel( "t6_wpn_bouncing_betty_world_detect" ); + precachemodel( "t5_weapon_camera_head_world" ); + precacheitem( "scavenger_item_mp" ); + precacheitem( "scavenger_item_hack_mp" ); + precacheshader( "hud_scavenger_pickup" ); + precacheshellshock( "default" ); + precacheshellshock( "concussion_grenade_mp" ); + precacheshellshock( "tabun_gas_mp" ); + precacheshellshock( "tabun_gas_nokick_mp" ); + precacheshellshock( "proximity_grenade" ); + precacheshellshock( "proximity_grenade_exit" ); + level.missileentities = []; + level.hackertooltargets = []; + + if ( !isdefined( level.grenadelauncherdudtime ) ) + level.grenadelauncherdudtime = 0; + + if ( !isdefined( level.throwngrenadedudtime ) ) + level.throwngrenadedudtime = 0; + + level thread onplayerconnect(); + maps\mp\gametypes_zm\_weaponobjects::init(); + + if ( !is_false( level._uses_sticky_grenades ) ) + maps\mp\_sticky_grenade::init(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player.usedweapons = 0; + player.lastfiretime = 0; + player.hits = 0; + player scavenger_hud_create(); + player thread onplayerspawned(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self.concussionendtime = 0; + self.hasdonecombat = 0; + self.shielddamageblocked = 0; + self thread watchweaponusage(); + self thread watchgrenadeusage(); + self thread watchmissileusage(); + self thread watchweaponchange(); + self thread watchturretuse(); + self thread watchriotshielduse(); + self thread trackweapon(); + self.droppeddeathweapon = undefined; + self.tookweaponfrom = []; + self.pickedupweaponkills = []; + self thread updatestowedweapon(); + } +} + +watchturretuse() +{ + self endon( "death" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "turretownerchange", turret ); + + self thread watchfortowfire( turret ); + } +} + +watchfortowfire( turret ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "turretownerchange" ); + + while ( true ) + { + self waittill( "turret_tow_fire" ); + + self thread watchmissleunlink( turret ); + + self waittill( "turret_tow_unlink" ); + } +} + +watchmissleunlink( turret ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "turretownerchange" ); + + self waittill( "turret_tow_unlink" ); + + self relinktoturret( turret ); +} + +watchweaponchange() +{ + self endon( "death" ); + self endon( "disconnect" ); + self.lastdroppableweapon = self getcurrentweapon(); + self.hitsthismag = []; + weapon = self getcurrentweapon(); + + if ( isprimaryweapon( weapon ) && !isdefined( self.hitsthismag[weapon] ) ) + self.hitsthismag[weapon] = weaponclipsize( weapon ); + + while ( true ) + { + previous_weapon = self getcurrentweapon(); + + self waittill( "weapon_change", newweapon ); + + if ( maydropweapon( newweapon ) ) + self.lastdroppableweapon = newweapon; + + if ( newweapon != "none" ) + { + if ( ( isprimaryweapon( newweapon ) || issidearm( newweapon ) ) && !isdefined( self.hitsthismag[newweapon] ) ) + self.hitsthismag[newweapon] = weaponclipsize( newweapon ); + } + } +} + +watchriotshielduse() +{ + +} + +updatelastheldweapontimings( newtime ) +{ + if ( isdefined( self.currentweapon ) && isdefined( self.currentweaponstarttime ) ) + { + totaltime = int( ( newtime - self.currentweaponstarttime ) / 1000 ); + + if ( totaltime > 0 ) + { + self addweaponstat( self.currentweapon, "timeUsed", totaltime ); + self.currentweaponstarttime = newtime; + } + } +} + +updateweapontimings( newtime ) +{ + if ( self is_bot() ) + return; + + updatelastheldweapontimings( newtime ); + + if ( !isdefined( self.staticweaponsstarttime ) ) + return; + + totaltime = int( ( newtime - self.staticweaponsstarttime ) / 1000 ); + + if ( totaltime < 0 ) + return; + + self.staticweaponsstarttime = newtime; + + if ( isdefined( self.weapon_array_grenade ) ) + { + for ( i = 0; i < self.weapon_array_grenade.size; i++ ) + self addweaponstat( self.weapon_array_grenade[i], "timeUsed", totaltime ); + } + + if ( isdefined( self.weapon_array_inventory ) ) + { + for ( i = 0; i < self.weapon_array_inventory.size; i++ ) + self addweaponstat( self.weapon_array_inventory[i], "timeUsed", totaltime ); + } + + if ( isdefined( self.killstreak ) ) + { + for ( i = 0; i < self.killstreak.size; i++ ) + { + killstreakweapon = level.menureferenceforkillstreak[self.killstreak[i]]; + + if ( isdefined( killstreakweapon ) ) + self addweaponstat( killstreakweapon, "timeUsed", totaltime ); + } + } + + if ( level.rankedmatch && level.perksenabled ) + { + perksindexarray = []; + specialtys = self.specialty; + + if ( !isdefined( specialtys ) ) + return; + + if ( !isdefined( self.class ) ) + return; + + if ( isdefined( self.class_num ) ) + { + for ( numspecialties = 0; numspecialties < level.maxspecialties; numspecialties++ ) + { + perk = self getloadoutitem( self.class_num, "specialty" + ( numspecialties + 1 ) ); + + if ( perk != 0 ) + perksindexarray[perk] = 1; + } + + perkindexarraykeys = getarraykeys( perksindexarray ); + + for ( i = 0; i < perkindexarraykeys.size; i++ ) + { + if ( perksindexarray[perkindexarraykeys[i]] == 1 ) + self adddstat( "itemStats", perkindexarraykeys[i], "stats", "timeUsed", "statValue", totaltime ); + } + } + } +} + +trackweapon() +{ + currentweapon = self getcurrentweapon(); + currenttime = gettime(); + spawnid = getplayerspawnid( self ); + + while ( true ) + { + event = self waittill_any_return( "weapon_change", "death", "disconnect" ); + newtime = gettime(); + + if ( event == "weapon_change" ) + { + self maps\mp\_bb::commitweapondata( spawnid, currentweapon, currenttime ); + newweapon = self getcurrentweapon(); + + if ( newweapon != "none" && newweapon != currentweapon ) + { + updatelastheldweapontimings( newtime ); + currentweapon = newweapon; + currenttime = newtime; + } + } + else + { + if ( event != "disconnect" ) + { + self maps\mp\_bb::commitweapondata( spawnid, currentweapon, currenttime ); + updateweapontimings( newtime ); + } + + return; + } + } +} + +maydropweapon( weapon ) +{ + if ( level.disableweapondrop == 1 ) + return false; + + if ( weapon == "none" ) + return false; + + if ( ishackweapon( weapon ) ) + return false; + + invtype = weaponinventorytype( weapon ); + + if ( invtype != "primary" ) + return false; + + if ( weapon == "none" ) + return false; + + return true; +} + +dropweaponfordeath( attacker ) +{ + if ( level.disableweapondrop == 1 ) + return; + + weapon = self.lastdroppableweapon; + + if ( isdefined( self.droppeddeathweapon ) ) + return; + + if ( !isdefined( weapon ) ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: not defined" ); +#/ + return; + } + + if ( weapon == "none" ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: weapon == none" ); +#/ + return; + } + + if ( !self hasweapon( weapon ) ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: don't have it anymore (" + weapon + ")" ); +#/ + return; + } + + if ( !self anyammoforweaponmodes( weapon ) ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: no ammo for weapon modes" ); +#/ + return; + } + + if ( !shoulddroplimitedweapon( weapon, self ) ) + return; + + clipammo = self getweaponammoclip( weapon ); + stockammo = self getweaponammostock( weapon ); + clip_and_stock_ammo = clipammo + stockammo; + + if ( !clip_and_stock_ammo ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: no ammo" ); +#/ + return; + } + + stockmax = weaponmaxammo( weapon ); + + if ( stockammo > stockmax ) + stockammo = stockmax; + + item = self dropitem( weapon ); + + if ( !isdefined( item ) ) + { +/# + iprintlnbold( "dropItem: was not able to drop weapon " + weapon ); +#/ + return; + } +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "dropped weapon: " + weapon ); +#/ + droplimitedweapon( weapon, self, item ); + self.droppeddeathweapon = 1; + item itemweaponsetammo( clipammo, stockammo ); + item.owner = self; + item.ownersattacker = attacker; + item thread watchpickup(); + item thread deletepickupafterawhile(); +} + +dropweapontoground( weapon ) +{ + if ( !isdefined( weapon ) ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: not defined" ); +#/ + return; + } + + if ( weapon == "none" ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: weapon == none" ); +#/ + return; + } + + if ( !self hasweapon( weapon ) ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: don't have it anymore (" + weapon + ")" ); +#/ + return; + } + + if ( !self anyammoforweaponmodes( weapon ) ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: no ammo for weapon modes" ); +#/ + switch ( weapon ) + { + case "mp40_blinged_mp": + case "minigun_mp": + case "m32_mp": + case "m220_tow_mp": + case "m202_flash_mp": + self takeweapon( weapon ); + break; + default: + break; + } + + return; + } + + if ( !shoulddroplimitedweapon( weapon, self ) ) + return; + + clipammo = self getweaponammoclip( weapon ); + stockammo = self getweaponammostock( weapon ); + clip_and_stock_ammo = clipammo + stockammo; + + if ( !clip_and_stock_ammo ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: no ammo" ); +#/ + return; + } + + stockmax = weaponmaxammo( weapon ); + + if ( stockammo > stockmax ) + stockammo = stockmax; + + item = self dropitem( weapon ); +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "dropped weapon: " + weapon ); +#/ + droplimitedweapon( weapon, self, item ); + item itemweaponsetammo( clipammo, stockammo ); + item.owner = self; + item thread watchpickup(); + item thread deletepickupafterawhile(); +} + +deletepickupafterawhile() +{ + self endon( "death" ); + wait 60; + + if ( !isdefined( self ) ) + return; + + self delete(); +} + +getitemweaponname() +{ + classname = self.classname; + assert( getsubstr( classname, 0, 7 ) == "weapon_" ); + weapname = getsubstr( classname, 7 ); + return weapname; +} + +watchpickup() +{ + self endon( "death" ); + weapname = self getitemweaponname(); + + while ( true ) + { + self waittill( "trigger", player, droppeditem ); + + if ( isdefined( droppeditem ) ) + break; + } +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "picked up weapon: " + weapname + ", " + isdefined( self.ownersattacker ) ); +#/ + assert( isdefined( player.tookweaponfrom ) ); + assert( isdefined( player.pickedupweaponkills ) ); + droppedweaponname = droppeditem getitemweaponname(); + + if ( isdefined( player.tookweaponfrom[droppedweaponname] ) ) + { + droppeditem.owner = player.tookweaponfrom[droppedweaponname]; + droppeditem.ownersattacker = player; + player.tookweaponfrom[droppedweaponname] = undefined; + } + + droppeditem thread watchpickup(); + + if ( isdefined( self.ownersattacker ) && self.ownersattacker == player ) + { + player.tookweaponfrom[weapname] = self.owner; + player.pickedupweaponkills[weapname] = 0; + } + else + { + player.tookweaponfrom[weapname] = undefined; + player.pickedupweaponkills[weapname] = undefined; + } +} + +itemremoveammofromaltmodes() +{ + origweapname = self getitemweaponname(); + curweapname = weaponaltweaponname( origweapname ); + + for ( altindex = 1; curweapname != "none" && curweapname != origweapname; altindex++ ) + { + self itemweaponsetammo( 0, 0, altindex ); + curweapname = weaponaltweaponname( curweapname ); + } +} + +dropoffhand() +{ + grenadetypes = []; + + for ( index = 0; index < grenadetypes.size; index++ ) + { + if ( !self hasweapon( grenadetypes[index] ) ) + continue; + + count = self getammocount( grenadetypes[index] ); + + if ( !count ) + continue; + + self dropitem( grenadetypes[index] ); + } +} + +watchweaponusage() +{ + self endon( "death" ); + self endon( "disconnect" ); + level endon( "game_ended" ); + self.usedkillstreakweapon = []; + self.usedkillstreakweapon["minigun_mp"] = 0; + self.usedkillstreakweapon["m32_mp"] = 0; + self.usedkillstreakweapon["m202_flash_mp"] = 0; + self.usedkillstreakweapon["m220_tow_mp"] = 0; + self.usedkillstreakweapon["mp40_blinged_mp"] = 0; + self.killstreaktype = []; + self.killstreaktype["minigun_mp"] = "minigun_mp"; + self.killstreaktype["m32_mp"] = "m32_mp"; + self.killstreaktype["m202_flash_mp"] = "m202_flash_mp"; + self.killstreaktype["m220_tow_mp"] = "m220_tow_mp"; + self.killstreaktype["mp40_blinged_mp"] = "mp40_blinged_drop_mp"; + + for (;;) + { + self waittill( "weapon_fired", curweapon ); + + self.lastfiretime = gettime(); + self.hasdonecombat = 1; + + if ( maps\mp\gametypes_zm\_weapons::isprimaryweapon( curweapon ) || maps\mp\gametypes_zm\_weapons::issidearm( curweapon ) ) + { + if ( isdefined( self.hitsthismag[curweapon] ) ) + self thread updatemagshots( curweapon ); + } + + switch ( weaponclass( curweapon ) ) + { + case "rifle": + if ( curweapon == "crossbow_explosive_mp" ) + { + level.globalcrossbowfired++; + self addweaponstat( curweapon, "shots", 1 ); + self thread begingrenadetracking(); + break; + } + case "spread": + case "smg": + case "pistol": + case "mg": + self trackweaponfire( curweapon ); + level.globalshotsfired++; + break; + case "rocketlauncher": + case "grenade": + self addweaponstat( curweapon, "shots", 1 ); + break; + default: + break; + } + } +} + +updatemagshots( weaponname ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "updateMagShots_" + weaponname ); + self.hitsthismag[weaponname]--; + wait 0.05; + self.hitsthismag[weaponname] = weaponclipsize( weaponname ); +} + +checkhitsthismag( weaponname ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self notify( "updateMagShots_" + weaponname ); + waittillframeend; + + if ( isdefined( self.hitsthismag[weaponname] ) && self.hitsthismag[weaponname] == 0 ) + { + if ( !sessionmodeiszombiesgame() ) + { + weaponclass = getweaponclass( weaponname ); + maps\mp\_challenges::fullclipnomisses( weaponclass, weaponname ); + } + + self.hitsthismag[weaponname] = weaponclipsize( weaponname ); + } +} + +trackweaponfire( curweapon ) +{ + shotsfired = 1; + + if ( isdefined( self.laststandparams ) && self.laststandparams.laststandstarttime == gettime() ) + { + self.hits = 0; + return; + } + + pixbeginevent( "trackWeaponFire" ); + + if ( is_true( level.pers_upgrade_sniper ) ) + maps\mp\zombies\_zm_pers_upgrades_functions::pers_sniper_player_fires( curweapon, self.hits ); + + self addweaponstat( curweapon, "shots", shotsfired ); + self addweaponstat( curweapon, "hits", self.hits ); + + if ( isdefined( level.add_client_stat ) ) + { + self [[ level.add_client_stat ]]( "total_shots", shotsfired ); + self [[ level.add_client_stat ]]( "hits", self.hits ); + } + else + { + self addplayerstat( "total_shots", shotsfired ); + self addplayerstat( "hits", self.hits ); + self addplayerstat( "misses", int( max( 0, shotsfired - self.hits ) ) ); + } + + self incrementplayerstat( "total_shots", shotsfired ); + self incrementplayerstat( "hits", self.hits ); + self incrementplayerstat( "misses", int( max( 0, shotsfired - self.hits ) ) ); + self maps\mp\_bb::bbaddtostat( "shots", shotsfired ); + self maps\mp\_bb::bbaddtostat( "hits", self.hits ); + self.hits = 0; + pixendevent(); +} + +checkhit( sweapon ) +{ + switch ( weaponclass( sweapon ) ) + { + case "smg": + case "rifle": + case "pistol": + case "mg": + self.hits++; + break; + case "spread": + case "pistol spread": + self.hits = 1; + break; + default: + break; + } + + waittillframeend; + + if ( isdefined( self.hitsthismag ) && isdefined( self.hitsthismag[sweapon] ) ) + self thread checkhitsthismag( sweapon ); + + if ( sweapon == "bazooka_mp" || isstrstart( sweapon, "t34" ) || isstrstart( sweapon, "panzer" ) ) + self addweaponstat( sweapon, "hits", 1 ); +} + +watchgrenadeusage() +{ + self endon( "death" ); + self endon( "disconnect" ); + self.throwinggrenade = 0; + self.gotpullbacknotify = 0; + self thread beginothergrenadetracking(); + self thread watchforthrowbacks(); + self thread watchforgrenadeduds(); + self thread watchforgrenadelauncherduds(); + + for (;;) + { + self waittill( "grenade_pullback", weaponname ); + + self addweaponstat( weaponname, "shots", 1 ); + self.hasdonecombat = 1; + self.throwinggrenade = 1; + self.gotpullbacknotify = 1; + + if ( weaponname == "satchel_charge_mp" ) + self thread beginsatcheltracking(); + + self thread begingrenadetracking(); + } +} + +watchmissileusage() +{ + self endon( "death" ); + self endon( "disconnect" ); + level endon( "game_ended" ); + + for (;;) + { + self waittill( "missile_fire", missile, weapon_name ); + + self.hasdonecombat = 1; + assert( isdefined( missile ) ); + level.missileentities[level.missileentities.size] = missile; + missile thread watchmissiledeath(); + } +} + +watchmissiledeath() +{ + self waittill( "death" ); + + arrayremovevalue( level.missileentities, self ); +} + +dropweaponstoground( origin, radius ) +{ + weapons = getdroppedweapons(); + + for ( i = 0; i < weapons.size; i++ ) + { + if ( distancesquared( origin, weapons[i].origin ) < radius * radius ) + { + trace = bullettrace( weapons[i].origin, weapons[i].origin + vectorscale( ( 0, 0, -1 ), 2000.0 ), 0, weapons[i] ); + weapons[i].origin = trace["position"]; + } + } +} + +dropgrenadestoground( origin, radius ) +{ + grenades = getentarray( "grenade", "classname" ); + + for ( i = 0; i < grenades.size; i++ ) + { + if ( distancesquared( origin, grenades[i].origin ) < radius * radius ) + grenades[i] launch( vectorscale( ( 1, 1, 1 ), 5.0 ) ); + } +} + +watchgrenadecancel() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "grenade_fire" ); + + self waittill( "weapon_change" ); + + self.throwinggrenade = 0; + self.gotpullbacknotify = 0; +} + +begingrenadetracking() +{ + self endon( "death" ); + self endon( "disconnect" ); + starttime = gettime(); + self thread watchgrenadecancel(); + + self waittill( "grenade_fire", grenade, weaponname ); + + assert( isdefined( grenade ) ); + level.missileentities[level.missileentities.size] = grenade; + grenade thread watchmissiledeath(); + + if ( grenade maps\mp\gametypes_zm\_weaponobjects::ishacked() ) + return; + + bbprint( "mpequipmentuses", "gametime %d spawnid %d weaponname %s", gettime(), getplayerspawnid( self ), weaponname ); + + if ( gettime() - starttime > 1000 ) + grenade.iscooked = 1; + + switch ( weaponname ) + { + case "sticky_grenade_zm": + case "frag_grenade_zm": + self addweaponstat( weaponname, "used", 1 ); + case "explosive_bolt_zm": + grenade.originalowner = self; + break; + } + + if ( weaponname == "sticky_grenade_zm" || weaponname == "frag_grenade_zm" ) + { + grenade setteam( self.pers["team"] ); + grenade setowner( self ); + } + + self.throwinggrenade = 0; +} + +beginothergrenadetracking() +{ + +} + +checkstucktoplayer( deleteonteamchange, awardscoreevent, weaponname ) +{ + self endon( "death" ); + + self waittill( "stuck_to_player", player ); + + if ( isdefined( player ) ) + { + if ( deleteonteamchange ) + self thread stucktoplayerteamchange( player ); + + if ( awardscoreevent && isdefined( self.originalowner ) ) + { + if ( self.originalowner isenemyplayer( player ) ) + { + + } + } + + self.stucktoplayer = player; + } +} + +checkhatchetbounce() +{ + self endon( "stuck_to_player" ); + self endon( "death" ); + + self waittill( "grenade_bounce" ); + + self.bounced = 1; +} + +stucktoplayerteamchange( player ) +{ + self endon( "death" ); + player endon( "disconnect" ); + originalteam = player.pers["team"]; + + while ( true ) + { + player waittill( "joined_team" ); + + if ( player.pers["team"] != originalteam ) + { + self detonate(); + return; + } + } +} + +beginsatcheltracking() +{ + self endon( "death" ); + self endon( "disconnect" ); + self waittill_any( "grenade_fire", "weapon_change" ); + self.throwinggrenade = 0; +} + +watchforthrowbacks() +{ + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "grenade_fire", grenade, weapname ); + + if ( self.gotpullbacknotify ) + { + self.gotpullbacknotify = 0; + continue; + } + + if ( !issubstr( weapname, "frag_" ) ) + continue; + + grenade.threwback = 1; + grenade.originalowner = self; + } +} + +registergrenadelauncherduddvar( dvarstring, defaultvalue, minvalue, maxvalue ) +{ + dvarstring = "scr_" + dvarstring + "_grenadeLauncherDudTime"; + + if ( getdvar( dvarstring ) == "" ) + setdvar( dvarstring, defaultvalue ); + + if ( getdvarint( dvarstring ) > maxvalue ) + setdvar( dvarstring, maxvalue ); + else if ( getdvarint( dvarstring ) < minvalue ) + setdvar( dvarstring, minvalue ); + + level.grenadelauncherdudtimedvar = dvarstring; + level.grenadelauncherdudtimemin = minvalue; + level.grenadelauncherdudtimemax = maxvalue; + level.grenadelauncherdudtime = getdvarint( level.grenadelauncherdudtimedvar ); +} + +registerthrowngrenadeduddvar( dvarstring, defaultvalue, minvalue, maxvalue ) +{ + dvarstring = "scr_" + dvarstring + "_thrownGrenadeDudTime"; + + if ( getdvar( dvarstring ) == "" ) + setdvar( dvarstring, defaultvalue ); + + if ( getdvarint( dvarstring ) > maxvalue ) + setdvar( dvarstring, maxvalue ); + else if ( getdvarint( dvarstring ) < minvalue ) + setdvar( dvarstring, minvalue ); + + level.throwngrenadedudtimedvar = dvarstring; + level.throwngrenadedudtimemin = minvalue; + level.throwngrenadedudtimemax = maxvalue; + level.throwngrenadedudtime = getdvarint( level.throwngrenadedudtimedvar ); +} + +registerkillstreakdelay( dvarstring, defaultvalue, minvalue, maxvalue ) +{ + dvarstring = "scr_" + dvarstring + "_killstreakDelayTime"; + + if ( getdvar( dvarstring ) == "" ) + setdvar( dvarstring, defaultvalue ); + + if ( getdvarint( dvarstring ) > maxvalue ) + setdvar( dvarstring, maxvalue ); + else if ( getdvarint( dvarstring ) < minvalue ) + setdvar( dvarstring, minvalue ); + + level.killstreakrounddelay = getdvarint( dvarstring ); +} + +turngrenadeintoadud( weapname, isthrowngrenade, player ) +{ + if ( level.grenadelauncherdudtime >= maps\mp\gametypes_zm\_globallogic_utils::gettimepassed() / 1000 && !isthrowngrenade ) + { + if ( issubstr( weapname, "gl_" ) || weapname == "china_lake_mp" ) + { + timeleft = int( level.grenadelauncherdudtime - maps\mp\gametypes_zm\_globallogic_utils::gettimepassed() / 1000 ); + + if ( !timeleft ) + timeleft = 1; + + player iprintlnbold( &"MP_LAUNCHER_UNAVAILABLE_FOR_N", " " + timeleft + " ", &"EXE_SECONDS" ); + self makegrenadedud(); + } + } + else if ( level.throwngrenadedudtime >= maps\mp\gametypes_zm\_globallogic_utils::gettimepassed() / 1000 && isthrowngrenade ) + { + if ( weapname == "frag_grenade_mp" || weapname == "sticky_grenade_mp" ) + { + if ( isdefined( player.suicide ) && player.suicide ) + return; + + timeleft = int( level.throwngrenadedudtime - maps\mp\gametypes_zm\_globallogic_utils::gettimepassed() / 1000 ); + + if ( !timeleft ) + timeleft = 1; + + player iprintlnbold( &"MP_GRENADE_UNAVAILABLE_FOR_N", " " + timeleft + " ", &"EXE_SECONDS" ); + self makegrenadedud(); + } + } +} + +watchforgrenadeduds() +{ + self endon( "spawned_player" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "grenade_fire", grenade, weapname ); + + grenade turngrenadeintoadud( weapname, 1, self ); + } +} + +watchforgrenadelauncherduds() +{ + self endon( "spawned_player" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "grenade_launcher_fire", grenade, weapname ); + + grenade turngrenadeintoadud( weapname, 0, self ); + } +} + +getdamageableents( pos, radius, dolos, startradius ) +{ + ents = []; + + if ( !isdefined( dolos ) ) + dolos = 0; + + if ( !isdefined( startradius ) ) + startradius = 0; + + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + if ( !isalive( players[i] ) || players[i].sessionstate != "playing" ) + continue; + + playerpos = players[i].origin + vectorscale( ( 0, 0, 1 ), 32.0 ); + distsq = distancesquared( pos, playerpos ); + + if ( distsq < radius * radius && ( !dolos || weapondamagetracepassed( pos, playerpos, startradius, undefined ) ) ) + { + newent = spawnstruct(); + newent.isplayer = 1; + newent.isadestructable = 0; + newent.isadestructible = 0; + newent.isactor = 0; + newent.entity = players[i]; + newent.damagecenter = playerpos; + ents[ents.size] = newent; + } + } + + grenades = getentarray( "grenade", "classname" ); + + for ( i = 0; i < grenades.size; i++ ) + { + entpos = grenades[i].origin; + distsq = distancesquared( pos, entpos ); + + if ( distsq < radius * radius && ( !dolos || weapondamagetracepassed( pos, entpos, startradius, grenades[i] ) ) ) + { + newent = spawnstruct(); + newent.isplayer = 0; + newent.isadestructable = 0; + newent.isadestructible = 0; + newent.isactor = 0; + newent.entity = grenades[i]; + newent.damagecenter = entpos; + ents[ents.size] = newent; + } + } + + destructibles = getentarray( "destructible", "targetname" ); + + for ( i = 0; i < destructibles.size; i++ ) + { + entpos = destructibles[i].origin; + distsq = distancesquared( pos, entpos ); + + if ( distsq < radius * radius && ( !dolos || weapondamagetracepassed( pos, entpos, startradius, destructibles[i] ) ) ) + { + newent = spawnstruct(); + newent.isplayer = 0; + newent.isadestructable = 0; + newent.isadestructible = 1; + newent.isactor = 0; + newent.entity = destructibles[i]; + newent.damagecenter = entpos; + ents[ents.size] = newent; + } + } + + destructables = getentarray( "destructable", "targetname" ); + + for ( i = 0; i < destructables.size; i++ ) + { + entpos = destructables[i].origin; + distsq = distancesquared( pos, entpos ); + + if ( distsq < radius * radius && ( !dolos || weapondamagetracepassed( pos, entpos, startradius, destructables[i] ) ) ) + { + newent = spawnstruct(); + newent.isplayer = 0; + newent.isadestructable = 1; + newent.isadestructible = 0; + newent.isactor = 0; + newent.entity = destructables[i]; + newent.damagecenter = entpos; + ents[ents.size] = newent; + } + } + + return ents; +} + +weapondamagetracepassed( from, to, startradius, ignore ) +{ + trace = weapondamagetrace( from, to, startradius, ignore ); + return trace["fraction"] == 1; +} + +weapondamagetrace( from, to, startradius, ignore ) +{ + midpos = undefined; + diff = to - from; + + if ( lengthsquared( diff ) < startradius * startradius ) + midpos = to; + + dir = vectornormalize( diff ); + midpos = from + ( dir[0] * startradius, dir[1] * startradius, dir[2] * startradius ); + trace = bullettrace( midpos, to, 0, ignore ); + + if ( getdvarint( _hash_A1C40B1 ) != 0 ) + { + if ( trace["fraction"] == 1 ) + thread debugline( midpos, to, ( 1, 1, 1 ) ); + else + { + thread debugline( midpos, trace["position"], ( 1, 0.9, 0.8 ) ); + thread debugline( trace["position"], to, ( 1, 0.4, 0.3 ) ); + } + } + + return trace; +} + +damageent( einflictor, eattacker, idamage, smeansofdeath, sweapon, damagepos, damagedir ) +{ + if ( self.isplayer ) + { + self.damageorigin = damagepos; + self.entity thread [[ level.callbackplayerdamage ]]( einflictor, eattacker, idamage, 0, smeansofdeath, sweapon, damagepos, damagedir, "none", 0, 0 ); + } + else if ( self.isactor ) + { + self.damageorigin = damagepos; + self.entity thread [[ level.callbackactordamage ]]( einflictor, eattacker, idamage, 0, smeansofdeath, sweapon, damagepos, damagedir, "none", 0, 0 ); + } + else if ( self.isadestructible ) + { + self.damageorigin = damagepos; + self.entity dodamage( idamage, damagepos, eattacker, einflictor, 0, smeansofdeath, 0, sweapon ); + } + else + { + if ( self.isadestructable && ( sweapon == "claymore_mp" || sweapon == "airstrike_mp" ) ) + return; + + self.entity damage_notify_wrapper( idamage, eattacker, ( 0, 0, 0 ), ( 0, 0, 0 ), "mod_explosive", "", "" ); + } +} + +debugline( a, b, color ) +{ +/# + for ( i = 0; i < 600; i++ ) + { + line( a, b, color ); + wait 0.05; + } +#/ +} + +onweapondamage( eattacker, einflictor, sweapon, meansofdeath, damage ) +{ + self endon( "death" ); + self endon( "disconnect" ); + + switch ( sweapon ) + { + case "concussion_grenade_mp": + radius = 512; + + if ( self == eattacker ) + radius *= 0.5; + + scale = 1 - distance( self.origin, einflictor.origin ) / radius; + + if ( scale < 0 ) + scale = 0; + + time = 2 + 4 * scale; + wait 0.05; + + if ( self hasperk( "specialty_stunprotection" ) ) + time *= 0.1; + + self thread playconcussionsound( time ); + + if ( self mayapplyscreeneffect() ) + self shellshock( "concussion_grenade_mp", time, 0 ); + + self.concussionendtime = gettime() + time * 1000; + break; + default: + maps\mp\gametypes_zm\_shellshock::shellshockondamage( meansofdeath, damage ); + break; + } +} + +playconcussionsound( duration ) +{ + self endon( "death" ); + self endon( "disconnect" ); + concussionsound = spawn( "script_origin", ( 0, 0, 1 ) ); + concussionsound.origin = self.origin; + concussionsound linkto( self ); + concussionsound thread deleteentonownerdeath( self ); + concussionsound playsound( "" ); + concussionsound playloopsound( "" ); + + if ( duration > 0.5 ) + wait( duration - 0.5 ); + + concussionsound playsound( "" ); + concussionsound stoploopsound( 0.5 ); + wait 0.5; + concussionsound notify( "delete" ); + concussionsound delete(); +} + +deleteentonownerdeath( owner ) +{ + self endon( "delete" ); + + owner waittill( "death" ); + + self delete(); +} + +monitor_dog_special_grenades() +{ + +} + +isprimaryweapon( weaponname ) +{ + return isdefined( level.primary_weapon_array[weaponname] ); +} + +issidearm( weaponname ) +{ + return isdefined( level.side_arm_array[weaponname] ); +} + +isinventory( weaponname ) +{ + return isdefined( level.inventory_array[weaponname] ); +} + +isgrenade( weaponname ) +{ + return isdefined( level.grenade_array[weaponname] ); +} + +isexplosivebulletweapon( weaponname ) +{ + if ( weaponname == "chopper_minigun_mp" || weaponname == "cobra_20mm_mp" || weaponname == "littlebird_guard_minigun_mp" || weaponname == "cobra_20mm_comlink_mp" ) + return true; + + return false; +} + +getweaponclass_array( current ) +{ + if ( isprimaryweapon( current ) ) + return level.primary_weapon_array; + else if ( issidearm( current ) ) + return level.side_arm_array; + else if ( isgrenade( current ) ) + return level.grenade_array; + else + return level.inventory_array; +} + +updatestowedweapon() +{ + self endon( "spawned" ); + self endon( "killed_player" ); + self endon( "disconnect" ); + self.tag_stowed_back = undefined; + self.tag_stowed_hip = undefined; + team = self.pers["team"]; + class = self.pers["class"]; + + while ( true ) + { + self waittill( "weapon_change", newweapon ); + + self.weapon_array_primary = []; + self.weapon_array_sidearm = []; + self.weapon_array_grenade = []; + self.weapon_array_inventory = []; + weaponslist = self getweaponslist(); + + for ( idx = 0; idx < weaponslist.size; idx++ ) + { + switch ( weaponslist[idx] ) + { + case "zipline_mp": + case "mp40_blinged_mp": + case "minigun_mp": + case "m32_mp": + case "m220_tow_mp": + case "m202_flash_mp": + continue; + default: + break; + } + + if ( isprimaryweapon( weaponslist[idx] ) ) + { + self.weapon_array_primary[self.weapon_array_primary.size] = weaponslist[idx]; + continue; + } + + if ( issidearm( weaponslist[idx] ) ) + { + self.weapon_array_sidearm[self.weapon_array_sidearm.size] = weaponslist[idx]; + continue; + } + + if ( isgrenade( weaponslist[idx] ) ) + { + self.weapon_array_grenade[self.weapon_array_grenade.size] = weaponslist[idx]; + continue; + } + + if ( isinventory( weaponslist[idx] ) ) + { + self.weapon_array_inventory[self.weapon_array_inventory.size] = weaponslist[idx]; + continue; + } + + if ( isweaponprimary( weaponslist[idx] ) ) + self.weapon_array_primary[self.weapon_array_primary.size] = weaponslist[idx]; + } + + detach_all_weapons(); + stow_on_back(); + stow_on_hip(); + } +} + +forcestowedweaponupdate() +{ + detach_all_weapons(); + stow_on_back(); + stow_on_hip(); +} + +detachcarryobjectmodel() +{ + if ( isdefined( self.carryobject ) && isdefined( self.carryobject maps\mp\gametypes_zm\_gameobjects::getvisiblecarriermodel() ) ) + { + if ( isdefined( self.tag_stowed_back ) ) + { + self detach( self.tag_stowed_back, "tag_stowed_back" ); + self.tag_stowed_back = undefined; + } + } +} + +detach_all_weapons() +{ + if ( isdefined( self.tag_stowed_back ) ) + { + clear_weapon = 1; + + if ( isdefined( self.carryobject ) ) + { + carriermodel = self.carryobject maps\mp\gametypes_zm\_gameobjects::getvisiblecarriermodel(); + + if ( isdefined( carriermodel ) && carriermodel == self.tag_stowed_back ) + { + self detach( self.tag_stowed_back, "tag_stowed_back" ); + clear_weapon = 0; + } + } + + if ( clear_weapon ) + self clearstowedweapon(); + + self.tag_stowed_back = undefined; + } + + if ( isdefined( self.tag_stowed_hip ) ) + { + detach_model = getweaponmodel( self.tag_stowed_hip ); + self detach( detach_model, "tag_stowed_hip_rear" ); + self.tag_stowed_hip = undefined; + } +} + +non_stowed_weapon( weapon ) +{ + if ( self hasweapon( "knife_ballistic_mp" ) && weapon != "knife_ballistic_mp" ) + return true; + + if ( self hasweapon( "knife_held_mp" ) && weapon != "knife_held_mp" ) + return true; + + return false; +} + +stow_on_back( current ) +{ + current = self getcurrentweapon(); + self.tag_stowed_back = undefined; + weaponoptions = 0; + index_weapon = ""; + + if ( isdefined( self.carryobject ) && isdefined( self.carryobject maps\mp\gametypes_zm\_gameobjects::getvisiblecarriermodel() ) ) + { + self.tag_stowed_back = self.carryobject maps\mp\gametypes_zm\_gameobjects::getvisiblecarriermodel(); + self attach( self.tag_stowed_back, "tag_stowed_back", 1 ); + return; + } + else if ( non_stowed_weapon( current ) || self.hasriotshield ) + return; + else + { + for ( idx = 0; idx < self.weapon_array_primary.size; idx++ ) + { + temp_index_weapon = self.weapon_array_primary[idx]; + assert( isdefined( temp_index_weapon ), "Primary weapon list corrupted." ); + + if ( temp_index_weapon == current ) + continue; + + if ( current == "none" ) + continue; + + if ( issubstr( current, "gl_" ) || issubstr( temp_index_weapon, "gl_" ) || issubstr( current, "mk_" ) || issubstr( temp_index_weapon, "mk_" ) || issubstr( current, "dualoptic_" ) || issubstr( temp_index_weapon, "dualoptic_" ) || issubstr( current, "ft_" ) || issubstr( temp_index_weapon, "ft_" ) ) + { + index_weapon_tok = strtok( temp_index_weapon, "_" ); + current_tok = strtok( current, "_" ); + + for ( i = 0; i < index_weapon_tok.size; i++ ) + { + if ( !issubstr( current, index_weapon_tok[i] ) || index_weapon_tok.size != current_tok.size ) + { + i = 0; + break; + } + } + + if ( i == index_weapon_tok.size ) + continue; + } + + index_weapon = temp_index_weapon; + assert( isdefined( self.curclass ), "Player missing current class" ); + + if ( issubstr( index_weapon, self.pers["primaryWeapon"] ) && issubstr( self.curclass, "CUSTOM" ) ) + self.tag_stowed_back = getweaponmodel( index_weapon, self getloadoutitem( self.class_num, "primarycamo" ) ); + else + { + stowedmodelindex = getweaponstowedmodel( index_weapon ); + self.tag_stowed_back = getweaponmodel( index_weapon, stowedmodelindex ); + } + + if ( issubstr( self.curclass, "CUSTOM" ) ) + weaponoptions = self calcweaponoptions( self.class_num, 0 ); + } + } + + if ( !isdefined( self.tag_stowed_back ) ) + return; + + self setstowedweapon( index_weapon ); +} + +stow_on_hip() +{ + current = self getcurrentweapon(); + self.tag_stowed_hip = undefined; + + for ( idx = 0; idx < self.weapon_array_inventory.size; idx++ ) + { + if ( self.weapon_array_inventory[idx] == current ) + continue; + + if ( !self getweaponammostock( self.weapon_array_inventory[idx] ) ) + continue; + + self.tag_stowed_hip = self.weapon_array_inventory[idx]; + } + + if ( !isdefined( self.tag_stowed_hip ) ) + return; + + if ( self.tag_stowed_hip == "satchel_charge_mp" || self.tag_stowed_hip == "claymore_mp" || self.tag_stowed_hip == "bouncingbetty_mp" ) + { + self.tag_stowed_hip = undefined; + return; + } + + weapon_model = getweaponmodel( self.tag_stowed_hip ); + self attach( weapon_model, "tag_stowed_hip_rear", 1 ); +} + +stow_inventory( inventories, current ) +{ + if ( isdefined( self.inventory_tag ) ) + { + detach_model = getweaponmodel( self.inventory_tag ); + self detach( detach_model, "tag_stowed_hip_rear" ); + self.inventory_tag = undefined; + } + + if ( !isdefined( inventories[0] ) || self getweaponammostock( inventories[0] ) == 0 ) + return; + + if ( inventories[0] != current ) + { + self.inventory_tag = inventories[0]; + weapon_model = getweaponmodel( self.inventory_tag ); + self attach( weapon_model, "tag_stowed_hip_rear", 1 ); + } +} + +weapons_get_dvar_int( dvar, def ) +{ + return int( weapons_get_dvar( dvar, def ) ); +} + +weapons_get_dvar( dvar, def ) +{ + if ( getdvar( dvar ) != "" ) + return getdvarfloat( dvar ); + else + { + setdvar( dvar, def ); + return def; + } +} + +player_is_driver() +{ + if ( !isalive( self ) ) + return false; + + if ( self isremotecontrolling() ) + return false; + + vehicle = self getvehicleoccupied(); + + if ( isdefined( vehicle ) ) + { + seat = vehicle getoccupantseat( self ); + + if ( isdefined( seat ) && seat == 0 ) + return true; + } + + return false; +} + +loadout_get_class_num() +{ + assert( isplayer( self ) ); + assert( isdefined( self.class ) ); + + if ( isdefined( level.classtoclassnum[self.class] ) ) + return level.classtoclassnum[self.class]; + + class_num = int( self.class[self.class.size - 1] ) - 1; + + if ( -1 == class_num ) + class_num = 9; + + return class_num; +} + +loadout_get_offhand_weapon( stat ) +{ + if ( isdefined( level.givecustomloadout ) ) + return "weapon_null_mp"; + + class_num = self loadout_get_class_num(); + index = 0; + + if ( isdefined( level.tbl_weaponids[index] ) && isdefined( level.tbl_weaponids[index]["reference"] ) ) + return level.tbl_weaponids[index]["reference"] + "_mp"; + + return "weapon_null_mp"; +} + +loadout_get_offhand_count( stat ) +{ + if ( isdefined( level.givecustomloadout ) ) + return 0; + + class_num = self loadout_get_class_num(); + count = 0; + return count; +} + +scavenger_think() +{ + self endon( "death" ); + + self waittill( "scavenger", player ); + + primary_weapons = player getweaponslistprimaries(); + offhand_weapons_and_alts = array_exclude( player getweaponslist( 1 ), primary_weapons ); + arrayremovevalue( offhand_weapons_and_alts, "knife_mp" ); + player playsound( "fly_equipment_pickup_npc" ); + player playlocalsound( "fly_equipment_pickup_plr" ); + player.scavenger_icon.alpha = 1; + player.scavenger_icon fadeovertime( 2.5 ); + player.scavenger_icon.alpha = 0; + scavenger_lethal_proc = 1; + scavenger_tactical_proc = 1; + + if ( !isdefined( player.scavenger_lethal_proc ) ) + { + player.scavenger_lethal_proc = 0; + player.scavenger_tactical_proc = 0; + } + + loadout_primary = player loadout_get_offhand_weapon( "primarygrenade" ); + loadout_primary_count = player loadout_get_offhand_count( "primarygrenadecount" ); + loadout_secondary = player loadout_get_offhand_weapon( "specialgrenade" ); + loadout_secondary_count = player loadout_get_offhand_count( "specialgrenadeCount" ); + + for ( i = 0; i < offhand_weapons_and_alts.size; i++ ) + { + weapon = offhand_weapons_and_alts[i]; + + if ( ishackweapon( weapon ) ) + continue; + + switch ( weapon ) + { + case "sticky_grenade_mp": + case "satchel_charge_mp": + case "hatchet_mp": + case "frag_grenade_mp": + case "claymore_mp": + case "bouncingbetty_mp": + if ( isdefined( player.grenadetypeprimarycount ) && player.grenadetypeprimarycount < 1 ) + break; + + if ( player getweaponammostock( weapon ) != loadout_primary_count ) + { + if ( player.scavenger_lethal_proc < scavenger_lethal_proc ) + { + player.scavenger_lethal_proc++; + break; + } + + player.scavenger_lethal_proc = 0; + player.scavenger_tactical_proc = 0; + } + case "willy_pete_mp": + case "trophy_system_mp": + case "tabun_gas_mp": + case "sensor_grenade_mp": + case "proximity_grenade_mp": + case "pda_hack_mp": + case "nightingale_mp": + case "flash_grenade_mp": + case "emp_grenade_mp": + case "concussion_grenade_mp": + if ( isdefined( player.grenadetypesecondarycount ) && player.grenadetypesecondarycount < 1 ) + break; + + if ( weapon == loadout_secondary && player getweaponammostock( weapon ) != loadout_secondary_count ) + { + if ( player.scavenger_tactical_proc < scavenger_tactical_proc ) + { + player.scavenger_tactical_proc++; + break; + } + + player.scavenger_tactical_proc = 0; + player.scavenger_lethal_proc = 0; + } + + maxammo = weaponmaxammo( weapon ); + stock = player getweaponammostock( weapon ); + + if ( isdefined( level.customloadoutscavenge ) ) + maxammo = self [[ level.customloadoutscavenge ]]( weapon ); + else if ( weapon == loadout_primary ) + maxammo = loadout_primary_count; + else if ( weapon == loadout_secondary ) + maxammo = loadout_secondary_count; + + if ( stock < maxammo ) + { + ammo = stock + 1; + + if ( ammo > maxammo ) + ammo = maxammo; + + player setweaponammostock( weapon, ammo ); + player thread maps\mp\_challenges::scavengedgrenade(); + } + + break; + default: + if ( islauncherweapon( weapon ) ) + { + stock = player getweaponammostock( weapon ); + start = player getfractionstartammo( weapon ); + clip = weaponclipsize( weapon ); + clip *= getdvarfloatdefault( "scavenger_clip_multiplier", 2 ); + clip = int( clip ); + maxammo = weaponmaxammo( weapon ); + + if ( stock < maxammo - clip ) + { + ammo = stock + clip; + player setweaponammostock( weapon, ammo ); + } + else + player setweaponammostock( weapon, maxammo ); + } + + break; + } + } + + for ( i = 0; i < primary_weapons.size; i++ ) + { + weapon = primary_weapons[i]; + + if ( ishackweapon( weapon ) || weapon == "kniferang_mp" ) + continue; + + stock = player getweaponammostock( weapon ); + start = player getfractionstartammo( weapon ); + clip = weaponclipsize( weapon ); + clip *= getdvarfloatdefault( "scavenger_clip_multiplier", 2 ); + clip = int( clip ); + maxammo = weaponmaxammo( weapon ); + + if ( stock < maxammo - clip ) + { + ammo = stock + clip; + player setweaponammostock( weapon, ammo ); + continue; + } + + player setweaponammostock( weapon, maxammo ); + } +} + +scavenger_hud_create() +{ + if ( level.wagermatch ) + return; + + self.scavenger_icon = newclienthudelem( self ); + self.scavenger_icon.horzalign = "center"; + self.scavenger_icon.vertalign = "middle"; + self.scavenger_icon.x = -16; + self.scavenger_icon.y = 16; + self.scavenger_icon.alpha = 0; + width = 32; + height = 16; + + if ( self issplitscreen() ) + { + width = int( width * 0.5 ); + height = int( height * 0.5 ); + self.scavenger_icon.x = -8; + } + + self.scavenger_icon setshader( "hud_scavenger_pickup", width, height ); +} + +dropscavengerfordeath( attacker ) +{ + if ( sessionmodeiszombiesgame() ) + return; + + if ( level.wagermatch ) + return; + + if ( !isdefined( attacker ) ) + return; + + if ( attacker == self ) + return; + + if ( level.gametype == "hack" ) + item = self dropscavengeritem( "scavenger_item_hack_mp" ); + else + item = self dropscavengeritem( "scavenger_item_mp" ); + + item thread scavenger_think(); +} + +addlimitedweapon( weapon_name, owner, num_drops ) +{ + limited_info = spawnstruct(); + limited_info.weapon = weapon_name; + limited_info.drops = num_drops; + owner.limited_info = limited_info; +} + +shoulddroplimitedweapon( weapon_name, owner ) +{ + limited_info = owner.limited_info; + + if ( !isdefined( limited_info ) ) + return true; + + if ( limited_info.weapon != weapon_name ) + return true; + + if ( limited_info.drops <= 0 ) + return false; + + return true; +} + +droplimitedweapon( weapon_name, owner, item ) +{ + limited_info = owner.limited_info; + + if ( !isdefined( limited_info ) ) + return; + + if ( limited_info.weapon != weapon_name ) + return; + + limited_info.drops -= 1; + owner.limited_info = undefined; + item thread limitedpickup( limited_info ); +} + +limitedpickup( limited_info ) +{ + self endon( "death" ); + + self waittill( "trigger", player, item ); + + if ( !isdefined( item ) ) + return; + + player.limited_info = limited_info; +} diff --git a/ZM/Core/maps/mp/gametypes_zm/_zm_gametype.gsc b/ZM/Core/maps/mp/gametypes_zm/_zm_gametype.gsc new file mode 100644 index 0000000..2d71ad0 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/_zm_gametype.gsc @@ -0,0 +1,1938 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_globallogic; +#include maps\mp\gametypes_zm\_callbacksetup; +#include maps\mp\gametypes_zm\_weapons; +#include maps\mp\gametypes_zm\_gameobjects; +#include maps\mp\gametypes_zm\_globallogic_spawn; +#include maps\mp\gametypes_zm\_globallogic_defaults; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\gametypes_zm\_hud_message; +#include maps\mp\gametypes_zm\_globallogic_ui; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\gametypes_zm\_hud; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\gametypes_zm\_spawning; +#include maps\mp\zombies\_zm_blockers; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zombies\_zm_spawner; + +main() +{ + maps\mp\gametypes_zm\_globallogic::init(); + maps\mp\gametypes_zm\_callbacksetup::setupcallbacks(); + globallogic_setupdefault_zombiecallbacks(); + menu_init(); + registerroundlimit( 1, 1 ); + registertimelimit( 0, 0 ); + registerscorelimit( 0, 0 ); + registerroundwinlimit( 0, 0 ); + registernumlives( 1, 1 ); + maps\mp\gametypes_zm\_weapons::registergrenadelauncherduddvar( level.gametype, 10, 0, 1440 ); + maps\mp\gametypes_zm\_weapons::registerthrowngrenadeduddvar( level.gametype, 0, 0, 1440 ); + maps\mp\gametypes_zm\_weapons::registerkillstreakdelay( level.gametype, 0, 0, 1440 ); + maps\mp\gametypes_zm\_globallogic::registerfriendlyfiredelay( level.gametype, 15, 0, 1440 ); + level.takelivesondeath = 1; + level.teambased = 1; + level.disableprematchmessages = 1; + level.disablemomentum = 1; + level.overrideteamscore = 0; + level.overrideplayerscore = 0; + level.displayhalftimetext = 0; + level.displayroundendtext = 0; + level.allowannouncer = 0; + level.endgameonscorelimit = 0; + level.endgameontimelimit = 0; + level.resetplayerscoreeveryround = 1; + level.doprematch = 0; + level.nopersistence = 1; + level.scoreroundbased = 0; + level.forceautoassign = 1; + level.dontshowendreason = 1; + level.forceallallies = 0; + level.allow_teamchange = 0; + setdvar( "scr_disable_team_selection", 1 ); + makedvarserverinfo( "scr_disable_team_selection", 1 ); + setmatchflag( "hud_zombie", 1 ); + setdvar( "scr_disable_weapondrop", 1 ); + setdvar( "scr_xpscale", 0 ); + level.onstartgametype = ::onstartgametype; + level.onspawnplayer = ::blank; + level.onspawnplayerunified = ::onspawnplayerunified; + level.onroundendgame = ::onroundendgame; + level.mayspawn = ::mayspawn; + set_game_var( "ZM_roundLimit", 1 ); + set_game_var( "ZM_scoreLimit", 1 ); + set_game_var( "_team1_num", 0 ); + set_game_var( "_team2_num", 0 ); + map_name = level.script; + mode = getdvar( "ui_gametype" ); + + if ( ( !isdefined( mode ) || mode == "" ) && isdefined( level.default_game_mode ) ) + mode = level.default_game_mode; + + set_gamemode_var_once( "mode", mode ); + set_game_var_once( "side_selection", 1 ); + location = getdvar( "ui_zm_mapstartlocation" ); + + if ( location == "" && isdefined( level.default_start_location ) ) + location = level.default_start_location; + + set_gamemode_var_once( "location", location ); + set_gamemode_var_once( "randomize_mode", getdvarint( "zm_rand_mode" ) ); + set_gamemode_var_once( "randomize_location", getdvarint( "zm_rand_loc" ) ); + set_gamemode_var_once( "team_1_score", 0 ); + set_gamemode_var_once( "team_2_score", 0 ); + set_gamemode_var_once( "current_round", 0 ); + set_gamemode_var_once( "rules_read", 0 ); + set_game_var_once( "switchedsides", 0 ); + gametype = getdvar( "ui_gametype" ); + game["dialog"]["gametype"] = gametype + "_start"; + game["dialog"]["gametype_hardcore"] = gametype + "_start"; + game["dialog"]["offense_obj"] = "generic_boost"; + game["dialog"]["defense_obj"] = "generic_boost"; + set_gamemode_var( "pre_init_zombie_spawn_func", undefined ); + set_gamemode_var( "post_init_zombie_spawn_func", undefined ); + set_gamemode_var( "match_end_notify", undefined ); + set_gamemode_var( "match_end_func", undefined ); + setscoreboardcolumns( "score", "kills", "downs", "revives", "headshots" ); + onplayerconnect_callback( ::onplayerconnect_check_for_hotjoin ); +} + +game_objects_allowed( mode, location ) +{ + allowed[0] = mode; + entities = getentarray(); + + foreach ( entity in entities ) + { + if ( isdefined( entity.script_gameobjectname ) ) + { + isallowed = maps\mp\gametypes_zm\_gameobjects::entity_is_allowed( entity, allowed ); + isvalidlocation = maps\mp\gametypes_zm\_gameobjects::location_is_allowed( entity, location ); + + if ( !isallowed || !isvalidlocation && !is_classic() ) + { + if ( isdefined( entity.spawnflags ) && entity.spawnflags == 1 ) + { + if ( isdefined( entity.classname ) && entity.classname != "trigger_multiple" ) + entity connectpaths(); + } + + entity delete(); + continue; + } + + if ( isdefined( entity.script_vector ) ) + { + entity moveto( entity.origin + entity.script_vector, 0.05 ); + + entity waittill( "movedone" ); + + if ( isdefined( entity.spawnflags ) && entity.spawnflags == 1 ) + entity disconnectpaths(); + + continue; + } + + if ( isdefined( entity.spawnflags ) && entity.spawnflags == 1 ) + { + if ( isdefined( entity.classname ) && entity.classname != "trigger_multiple" ) + entity connectpaths(); + } + } + } +} + +post_init_gametype() +{ + if ( isdefined( level.gamemode_map_postinit ) ) + { + if ( isdefined( level.gamemode_map_postinit[level.scr_zm_ui_gametype] ) ) + [[ level.gamemode_map_postinit[level.scr_zm_ui_gametype] ]](); + } +} + +post_gametype_main( mode ) +{ + set_game_var( "ZM_roundWinLimit", get_game_var( "ZM_roundLimit" ) * 0.5 ); + level.roundlimit = get_game_var( "ZM_roundLimit" ); + + if ( isdefined( level.gamemode_map_preinit ) ) + { + if ( isdefined( level.gamemode_map_preinit[mode] ) ) + [[ level.gamemode_map_preinit[mode] ]](); + } +} + +globallogic_setupdefault_zombiecallbacks() +{ + level.spawnplayer = maps\mp\gametypes_zm\_globallogic_spawn::spawnplayer; + level.spawnplayerprediction = maps\mp\gametypes_zm\_globallogic_spawn::spawnplayerprediction; + level.spawnclient = maps\mp\gametypes_zm\_globallogic_spawn::spawnclient; + level.spawnspectator = maps\mp\gametypes_zm\_globallogic_spawn::spawnspectator; + level.spawnintermission = maps\mp\gametypes_zm\_globallogic_spawn::spawnintermission; + level.onplayerscore = ::blank; + level.onteamscore = ::blank; + level.wavespawntimer = ::wavespawntimer; + level.onspawnplayer = ::blank; + level.onspawnplayerunified = ::blank; + level.onspawnspectator = ::onspawnspectator; + level.onspawnintermission = ::onspawnintermission; + level.onrespawndelay = ::blank; + level.onforfeit = ::blank; + level.ontimelimit = ::blank; + level.onscorelimit = ::blank; + level.ondeadevent = ::ondeadevent; + level.ononeleftevent = ::blank; + level.giveteamscore = ::blank; + level.giveplayerscore = ::blank; + level.gettimelimit = maps\mp\gametypes_zm\_globallogic_defaults::default_gettimelimit; + level.getteamkillpenalty = ::blank; + level.getteamkillscore = ::blank; + level.iskillboosting = ::blank; + level._setteamscore = maps\mp\gametypes_zm\_globallogic_score::_setteamscore; + level._setplayerscore = ::blank; + level._getteamscore = ::blank; + level._getplayerscore = ::blank; + level.onprecachegametype = ::blank; + level.onstartgametype = ::blank; + level.onplayerconnect = ::blank; + level.onplayerdisconnect = ::onplayerdisconnect; + level.onplayerdamage = ::blank; + level.onplayerkilled = ::blank; + level.onplayerkilledextraunthreadedcbs = []; + level.onteamoutcomenotify = maps\mp\gametypes_zm\_hud_message::teamoutcomenotifyzombie; + level.onoutcomenotify = ::blank; + level.onteamwageroutcomenotify = ::blank; + level.onwageroutcomenotify = ::blank; + level.onendgame = ::onendgame; + level.onroundendgame = ::blank; + level.onmedalawarded = ::blank; + level.autoassign = maps\mp\gametypes_zm\_globallogic_ui::menuautoassign; + level.spectator = maps\mp\gametypes_zm\_globallogic_ui::menuspectator; + level.class = maps\mp\gametypes_zm\_globallogic_ui::menuclass; + level.allies = ::menuallieszombies; + level.teammenu = maps\mp\gametypes_zm\_globallogic_ui::menuteam; + level.callbackactorkilled = ::blank; + level.callbackvehicledamage = ::blank; +} + +setup_standard_objects( location ) +{ + structs = getstructarray( "game_mode_object" ); + + foreach ( struct in structs ) + { + if ( isdefined( struct.script_noteworthy ) && struct.script_noteworthy != location ) + continue; + + if ( isdefined( struct.script_string ) ) + { + keep = 0; + tokens = strtok( struct.script_string, " " ); + + foreach ( token in tokens ) + { + if ( token == level.scr_zm_ui_gametype && token != "zstandard" ) + { + keep = 1; + continue; + } + + if ( token == "zstandard" ) + keep = 1; + } + + if ( !keep ) + continue; + } + + barricade = spawn( "script_model", struct.origin ); + barricade.angles = struct.angles; + barricade setmodel( struct.script_parameters ); + } + + objects = getentarray(); + + foreach ( object in objects ) + { + if ( !object is_survival_object() ) + continue; + + if ( isdefined( object.spawnflags ) && object.spawnflags == 1 && object.classname != "trigger_multiple" ) + object connectpaths(); + + object delete(); + } + + if ( isdefined( level._classic_setup_func ) ) + [[ level._classic_setup_func ]](); +} + +is_survival_object() +{ + if ( !isdefined( self.script_parameters ) ) + return 0; + + tokens = strtok( self.script_parameters, " " ); + remove = 0; + + foreach ( token in tokens ) + { + if ( token == "survival_remove" ) + remove = 1; + } + + return remove; +} + +game_module_player_damage_callback( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + self.last_damage_from_zombie_or_player = 0; + + if ( isdefined( eattacker ) ) + { + if ( isplayer( eattacker ) && eattacker == self ) + return; + + if ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie || isplayer( eattacker ) ) + self.last_damage_from_zombie_or_player = 1; + } + + if ( isdefined( self._being_shellshocked ) && self._being_shellshocked || self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + return; + + if ( isplayer( eattacker ) && isdefined( eattacker._encounters_team ) && eattacker._encounters_team != self._encounters_team ) + { + if ( isdefined( self.hasriotshield ) && self.hasriotshield && isdefined( vdir ) ) + { + if ( isdefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped ) + { + if ( self maps\mp\zombies\_zm::player_shield_facing_attacker( vdir, 0.2 ) && isdefined( self.player_shield_apply_damage ) ) + return; + } + else if ( !isdefined( self.riotshieldentity ) ) + { + if ( !self maps\mp\zombies\_zm::player_shield_facing_attacker( vdir, -0.2 ) && isdefined( self.player_shield_apply_damage ) ) + return; + } + } + + if ( isdefined( level._game_module_player_damage_grief_callback ) ) + self [[ level._game_module_player_damage_grief_callback ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); + + if ( isdefined( level._effect["butterflies"] ) ) + { + if ( isdefined( sweapon ) && weapontype( sweapon ) == "grenade" ) + playfx( level._effect["butterflies"], self.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + else + playfx( level._effect["butterflies"], vpoint, vdir ); + } + + self thread do_game_mode_shellshock(); + self playsound( "zmb_player_hit_ding" ); + } +} + +do_game_mode_shellshock() +{ + self endon( "disconnect" ); + self._being_shellshocked = 1; + self shellshock( "grief_stab_zm", 0.75 ); + wait 0.75; + self._being_shellshocked = 0; +} + +add_map_gamemode( mode, preinit_func, precache_func, main_func ) +{ + if ( !isdefined( level.gamemode_map_location_init ) ) + level.gamemode_map_location_init = []; + + if ( !isdefined( level.gamemode_map_location_main ) ) + level.gamemode_map_location_main = []; + + if ( !isdefined( level.gamemode_map_preinit ) ) + level.gamemode_map_preinit = []; + + if ( !isdefined( level.gamemode_map_postinit ) ) + level.gamemode_map_postinit = []; + + if ( !isdefined( level.gamemode_map_precache ) ) + level.gamemode_map_precache = []; + + if ( !isdefined( level.gamemode_map_main ) ) + level.gamemode_map_main = []; + + level.gamemode_map_preinit[mode] = preinit_func; + level.gamemode_map_main[mode] = main_func; + level.gamemode_map_precache[mode] = precache_func; + level.gamemode_map_location_precache[mode] = []; + level.gamemode_map_location_main[mode] = []; +} + +add_map_location_gamemode( mode, location, precache_func, main_func ) +{ + if ( !isdefined( level.gamemode_map_location_precache[mode] ) ) + { +/# + println( "*** ERROR : " + mode + " has not been added to the map using add_map_gamemode." ); +#/ + return; + } + + level.gamemode_map_location_precache[mode][location] = precache_func; + level.gamemode_map_location_main[mode][location] = main_func; +} + +rungametypeprecache( gamemode ) +{ + if ( !isdefined( level.gamemode_map_location_main ) || !isdefined( level.gamemode_map_location_main[gamemode] ) ) + return; + + if ( isdefined( level.gamemode_map_precache ) ) + { + if ( isdefined( level.gamemode_map_precache[gamemode] ) ) + [[ level.gamemode_map_precache[gamemode] ]](); + } + + if ( isdefined( level.gamemode_map_location_precache ) ) + { + if ( isdefined( level.gamemode_map_location_precache[gamemode] ) ) + { + loc = getdvar( "ui_zm_mapstartlocation" ); + + if ( loc == "" && isdefined( level.default_start_location ) ) + loc = level.default_start_location; + + if ( isdefined( level.gamemode_map_location_precache[gamemode][loc] ) ) + [[ level.gamemode_map_location_precache[gamemode][loc] ]](); + } + } + + if ( isdefined( level.precachecustomcharacters ) ) + self [[ level.precachecustomcharacters ]](); +} + +rungametypemain( gamemode, mode_main_func, use_round_logic ) +{ + if ( !isdefined( level.gamemode_map_location_main ) || !isdefined( level.gamemode_map_location_main[gamemode] ) ) + return; + + level thread game_objects_allowed( get_gamemode_var( "mode" ), get_gamemode_var( "location" ) ); + + if ( isdefined( level.gamemode_map_main ) ) + { + if ( isdefined( level.gamemode_map_main[gamemode] ) ) + level thread [[ level.gamemode_map_main[gamemode] ]](); + } + + if ( isdefined( level.gamemode_map_location_main ) ) + { + if ( isdefined( level.gamemode_map_location_main[gamemode] ) ) + { + loc = getdvar( "ui_zm_mapstartlocation" ); + + if ( loc == "" && isdefined( level.default_start_location ) ) + loc = level.default_start_location; + + if ( isdefined( level.gamemode_map_location_main[gamemode][loc] ) ) + level thread [[ level.gamemode_map_location_main[gamemode][loc] ]](); + } + } + + if ( isdefined( mode_main_func ) ) + { + if ( isdefined( use_round_logic ) && use_round_logic ) + level thread round_logic( mode_main_func ); + else + level thread non_round_logic( mode_main_func ); + } + + level thread game_end_func(); +} + +round_logic( mode_logic_func ) +{ + level.skit_vox_override = 1; + + if ( isdefined( level.flag["start_zombie_round_logic"] ) ) + flag_wait( "start_zombie_round_logic" ); + + flag_wait( "start_encounters_match_logic" ); + + if ( !isdefined( game["gamemode_match"]["rounds"] ) ) + game["gamemode_match"]["rounds"] = []; + + set_gamemode_var_once( "current_round", 0 ); + set_gamemode_var_once( "team_1_score", 0 ); + set_gamemode_var_once( "team_2_score", 0 ); + + if ( isdefined( is_encounter() ) && is_encounter() ) + { + [[ level._setteamscore ]]( "allies", get_gamemode_var( "team_2_score" ) ); + [[ level._setteamscore ]]( "axis", get_gamemode_var( "team_1_score" ) ); + } + + flag_set( "pregame" ); + waittillframeend; + level.gameended = 0; + cur_round = get_gamemode_var( "current_round" ); + set_gamemode_var( "current_round", cur_round + 1 ); + game["gamemode_match"]["rounds"][cur_round] = spawnstruct(); + game["gamemode_match"]["rounds"][cur_round].mode = getdvar( "ui_gametype" ); + level thread [[ mode_logic_func ]](); + flag_wait( "start_encounters_match_logic" ); + level.gamestarttime = gettime(); + level.gamelengthtime = undefined; + level notify( "clear_hud_elems" ); + + level waittill( "game_module_ended", winner ); + + game["gamemode_match"]["rounds"][cur_round].winner = winner; + level thread kill_all_zombies(); + level.gameendtime = gettime(); + level.gamelengthtime = level.gameendtime - level.gamestarttime; + level.gameended = 1; + + if ( winner == "A" ) + { + score = get_gamemode_var( "team_1_score" ); + set_gamemode_var( "team_1_score", score + 1 ); + } + else + { + score = get_gamemode_var( "team_2_score" ); + set_gamemode_var( "team_2_score", score + 1 ); + } + + if ( isdefined( is_encounter() ) && is_encounter() ) + { + [[ level._setteamscore ]]( "allies", get_gamemode_var( "team_2_score" ) ); + [[ level._setteamscore ]]( "axis", get_gamemode_var( "team_1_score" ) ); + + if ( get_gamemode_var( "team_1_score" ) == get_gamemode_var( "team_2_score" ) ) + { + level thread maps\mp\zombies\_zm_audio::zmbvoxcrowdonteam( "win" ); + level thread maps\mp\zombies\_zm_audio_announcer::announceroundwinner( "tied" ); + } + else + { + level thread maps\mp\zombies\_zm_audio::zmbvoxcrowdonteam( "win", winner, "lose" ); + level thread maps\mp\zombies\_zm_audio_announcer::announceroundwinner( winner ); + } + } + + level thread delete_corpses(); + level delay_thread( 5, ::revive_laststand_players ); + level notify( "clear_hud_elems" ); + + if ( startnextzmround( winner ) ) + { + level clientnotify( "gme" ); + + while ( true ) + wait 1; + } + + level.match_is_ending = 1; + + if ( isdefined( is_encounter() ) && is_encounter() ) + { + matchwonteam = ""; + + if ( get_gamemode_var( "team_1_score" ) > get_gamemode_var( "team_2_score" ) ) + matchwonteam = "A"; + else + matchwonteam = "B"; + + level thread maps\mp\zombies\_zm_audio::zmbvoxcrowdonteam( "win", matchwonteam, "lose" ); + level thread maps\mp\zombies\_zm_audio_announcer::announcematchwinner( matchwonteam ); + level create_final_score(); + track_encounters_win_stats( matchwonteam ); + } + + maps\mp\zombies\_zm::intermission(); + level.can_revive_game_module = undefined; + level notify( "end_game" ); +} + +end_rounds_early( winner ) +{ + level.forcedend = 1; + cur_round = get_gamemode_var( "current_round" ); + set_gamemode_var( "ZM_roundLimit", cur_round ); + + if ( isdefined( winner ) ) + level notify( "game_module_ended", winner ); + else + level notify( "end_game" ); +} + +checkzmroundswitch() +{ + if ( !isdefined( level.zm_roundswitch ) || !level.zm_roundswitch ) + return false; + + assert( get_gamemode_var( "current_round" ) > 0 ); + return true; + return false; +} + +create_hud_scoreboard( duration, fade ) +{ + level endon( "end_game" ); + level thread module_hud_full_screen_overlay(); + level thread module_hud_team_1_score( duration, fade ); + level thread module_hud_team_2_score( duration, fade ); + level thread module_hud_round_num( duration, fade ); + respawn_spectators_and_freeze_players(); + waittill_any_or_timeout( duration, "clear_hud_elems" ); +} + +respawn_spectators_and_freeze_players() +{ + players = get_players(); + + foreach ( player in players ) + { + if ( player.sessionstate == "spectator" ) + { + if ( isdefined( player.spectate_hud ) ) + player.spectate_hud destroy(); + + player [[ level.spawnplayer ]](); + } + + player freeze_player_controls( 1 ); + } +} + +module_hud_team_1_score( duration, fade ) +{ + level._encounters_score_1 = newhudelem(); + level._encounters_score_1.x = 0; + level._encounters_score_1.y = 260; + level._encounters_score_1.alignx = "center"; + level._encounters_score_1.horzalign = "center"; + level._encounters_score_1.vertalign = "top"; + level._encounters_score_1.font = "default"; + level._encounters_score_1.fontscale = 2.3; + level._encounters_score_1.color = ( 1, 1, 1 ); + level._encounters_score_1.foreground = 1; + level._encounters_score_1 settext( "Team CIA: " + get_gamemode_var( "team_1_score" ) ); + level._encounters_score_1.alpha = 0; + level._encounters_score_1.sort = 11; + level._encounters_score_1 fadeovertime( fade ); + level._encounters_score_1.alpha = 1; + level waittill_any_or_timeout( duration, "clear_hud_elems" ); + level._encounters_score_1 fadeovertime( fade ); + level._encounters_score_1.alpha = 0; + wait( fade ); + level._encounters_score_1 destroy(); +} + +module_hud_team_2_score( duration, fade ) +{ + level._encounters_score_2 = newhudelem(); + level._encounters_score_2.x = 0; + level._encounters_score_2.y = 290; + level._encounters_score_2.alignx = "center"; + level._encounters_score_2.horzalign = "center"; + level._encounters_score_2.vertalign = "top"; + level._encounters_score_2.font = "default"; + level._encounters_score_2.fontscale = 2.3; + level._encounters_score_2.color = ( 1, 1, 1 ); + level._encounters_score_2.foreground = 1; + level._encounters_score_2 settext( "Team CDC: " + get_gamemode_var( "team_2_score" ) ); + level._encounters_score_2.alpha = 0; + level._encounters_score_2.sort = 12; + level._encounters_score_2 fadeovertime( fade ); + level._encounters_score_2.alpha = 1; + level waittill_any_or_timeout( duration, "clear_hud_elems" ); + level._encounters_score_2 fadeovertime( fade ); + level._encounters_score_2.alpha = 0; + wait( fade ); + level._encounters_score_2 destroy(); +} + +module_hud_round_num( duration, fade ) +{ + level._encounters_round_num = newhudelem(); + level._encounters_round_num.x = 0; + level._encounters_round_num.y = 60; + level._encounters_round_num.alignx = "center"; + level._encounters_round_num.horzalign = "center"; + level._encounters_round_num.vertalign = "top"; + level._encounters_round_num.font = "default"; + level._encounters_round_num.fontscale = 2.3; + level._encounters_round_num.color = ( 1, 1, 1 ); + level._encounters_round_num.foreground = 1; + level._encounters_round_num settext( "Round: ^5" + ( get_gamemode_var( "current_round" ) + 1 ) + " / " + get_game_var( "ZM_roundLimit" ) ); + level._encounters_round_num.alpha = 0; + level._encounters_round_num.sort = 13; + level._encounters_round_num fadeovertime( fade ); + level._encounters_round_num.alpha = 1; + level waittill_any_or_timeout( duration, "clear_hud_elems" ); + level._encounters_round_num fadeovertime( fade ); + level._encounters_round_num.alpha = 0; + wait( fade ); + level._encounters_round_num destroy(); +} + +createtimer() +{ + flag_waitopen( "pregame" ); + elem = newhudelem(); + elem.hidewheninmenu = 1; + elem.horzalign = "center"; + elem.vertalign = "top"; + elem.alignx = "center"; + elem.aligny = "middle"; + elem.x = 0; + elem.y = 0; + elem.foreground = 1; + elem.font = "default"; + elem.fontscale = 1.5; + elem.color = ( 1, 1, 1 ); + elem.alpha = 2; + elem thread maps\mp\gametypes_zm\_hud::fontpulseinit(); + + if ( isdefined( level.timercountdown ) && level.timercountdown ) + elem settenthstimer( level.timelimit * 60 ); + else + elem settenthstimerup( 0.1 ); + + level.game_module_timer = elem; + + level waittill( "game_module_ended" ); + + elem destroy(); +} + +revive_laststand_players() +{ + if ( isdefined( level.match_is_ending ) && level.match_is_ending ) + return; + + players = get_players(); + + foreach ( player in players ) + { + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + player thread maps\mp\zombies\_zm_laststand::auto_revive( player ); + } +} + +team_icon_winner( elem ) +{ + og_x = elem.x; + og_y = elem.y; + elem.sort = 1; + elem scaleovertime( 0.75, 150, 150 ); + elem moveovertime( 0.75 ); + elem.horzalign = "center"; + elem.vertalign = "middle"; + elem.x = 0; + elem.y = 0; + elem.alpha = 0.7; + wait 0.75; +} + +delete_corpses() +{ + corpses = getcorpsearray(); + + for ( x = 0; x < corpses.size; x++ ) + corpses[x] delete(); +} + +track_encounters_win_stats( matchwonteam ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i]._encounters_team == matchwonteam ) + { + players[i] maps\mp\zombies\_zm_stats::increment_client_stat( "wins" ); + players[i] maps\mp\zombies\_zm_stats::add_client_stat( "losses", -1 ); + players[i] adddstat( "skill_rating", 1.0 ); + players[i] setdstat( "skill_variance", 1.0 ); + + if ( gamemodeismode( level.gamemode_public_match ) ) + { + players[i] maps\mp\zombies\_zm_stats::add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "wins", 1 ); + players[i] maps\mp\zombies\_zm_stats::add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "losses", -1 ); + } + } + else + { + players[i] setdstat( "skill_rating", 0.0 ); + players[i] setdstat( "skill_variance", 1.0 ); + } + + players[i] updatestatratio( "wlratio", "wins", "losses" ); + } +} + +non_round_logic( mode_logic_func ) +{ + level thread [[ mode_logic_func ]](); +} + +game_end_func() +{ + if ( !isdefined( get_gamemode_var( "match_end_notify" ) ) && !isdefined( get_gamemode_var( "match_end_func" ) ) ) + return; + + level waittill( get_gamemode_var( "match_end_notify" ), winning_team ); + + level thread [[ get_gamemode_var( "match_end_func" ) ]]( winning_team ); +} + +setup_classic_gametype() +{ + ents = getentarray(); + + foreach ( ent in ents ) + { + if ( isdefined( ent.script_parameters ) ) + { + parameters = strtok( ent.script_parameters, " " ); + should_remove = 0; + + foreach ( parm in parameters ) + { + if ( parm == "survival_remove" ) + should_remove = 1; + } + + if ( should_remove ) + ent delete(); + } + } + + structs = getstructarray( "game_mode_object" ); + + foreach ( struct in structs ) + { + if ( !isdefined( struct.script_string ) ) + continue; + + tokens = strtok( struct.script_string, " " ); + spawn_object = 0; + + foreach ( parm in tokens ) + { + if ( parm == "survival" ) + spawn_object = 1; + } + + if ( !spawn_object ) + continue; + + barricade = spawn( "script_model", struct.origin ); + barricade.angles = struct.angles; + barricade setmodel( struct.script_parameters ); + } + + unlink_meat_traversal_nodes(); +} + +zclassic_main() +{ + level thread setup_classic_gametype(); + level thread maps\mp\zombies\_zm::round_start(); +} + +unlink_meat_traversal_nodes() +{ + meat_town_nodes = getnodearray( "meat_town_barrier_traversals", "targetname" ); + meat_tunnel_nodes = getnodearray( "meat_tunnel_barrier_traversals", "targetname" ); + meat_farm_nodes = getnodearray( "meat_farm_barrier_traversals", "targetname" ); + nodes = arraycombine( meat_town_nodes, meat_tunnel_nodes, 1, 0 ); + traversal_nodes = arraycombine( nodes, meat_farm_nodes, 1, 0 ); + + foreach ( node in traversal_nodes ) + { + end_node = getnode( node.target, "targetname" ); + unlink_nodes( node, end_node ); + } +} + +canplayersuicide() +{ + return self hasperk( "specialty_scavenger" ); +} + +onplayerdisconnect() +{ + if ( isdefined( level.game_mode_custom_onplayerdisconnect ) ) + level [[ level.game_mode_custom_onplayerdisconnect ]]( self ); + + level thread maps\mp\zombies\_zm::check_quickrevive_for_hotjoin( 1 ); + self maps\mp\zombies\_zm_laststand::add_weighted_down(); + level maps\mp\zombies\_zm::checkforalldead( self ); +} + +ondeadevent( team ) +{ + thread maps\mp\gametypes_zm\_globallogic::endgame( level.zombie_team, "" ); +} + +onspawnintermission() +{ + spawnpointname = "info_intermission"; + spawnpoints = getentarray( spawnpointname, "classname" ); + + if ( spawnpoints.size < 1 ) + { +/# + println( "NO " + spawnpointname + " SPAWNPOINTS IN MAP" ); +#/ + return; + } + + spawnpoint = spawnpoints[randomint( spawnpoints.size )]; + + if ( isdefined( spawnpoint ) ) + self spawn( spawnpoint.origin, spawnpoint.angles ); +} + +onspawnspectator( origin, angles ) +{ + +} + +mayspawn() +{ + if ( isdefined( level.custommayspawnlogic ) ) + return self [[ level.custommayspawnlogic ]](); + + if ( self.pers["lives"] == 0 ) + { + level notify( "player_eliminated" ); + self notify( "player_eliminated" ); + return 0; + } + + return 1; +} + +onstartgametype() +{ + setclientnamemode( "auto_change" ); + level.displayroundendtext = 0; + maps\mp\gametypes_zm\_spawning::create_map_placed_influencers(); + + if ( !isoneround() ) + { + level.displayroundendtext = 1; + + if ( isscoreroundbased() ) + maps\mp\gametypes_zm\_globallogic_score::resetteamscores(); + } +} + +module_hud_full_screen_overlay() +{ + fadetoblack = newhudelem(); + fadetoblack.x = 0; + fadetoblack.y = 0; + fadetoblack.horzalign = "fullscreen"; + fadetoblack.vertalign = "fullscreen"; + fadetoblack setshader( "black", 640, 480 ); + fadetoblack.color = ( 0, 0, 0 ); + fadetoblack.alpha = 1; + fadetoblack.foreground = 1; + fadetoblack.sort = 0; + + if ( is_encounter() || getdvar( "ui_gametype" ) == "zcleansed" ) + level waittill_any_or_timeout( 25, "start_fullscreen_fade_out" ); + else + level waittill_any_or_timeout( 25, "start_zombie_round_logic" ); + + fadetoblack fadeovertime( 2.0 ); + fadetoblack.alpha = 0; + wait 2.1; + fadetoblack destroy(); +} + +create_final_score() +{ + level endon( "end_game" ); + level thread module_hud_team_winer_score(); + wait 2; +} + +module_hud_team_winer_score() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + players[i] thread create_module_hud_team_winer_score(); + + if ( isdefined( players[i]._team_hud ) && isdefined( players[i]._team_hud["team"] ) ) + players[i] thread team_icon_winner( players[i]._team_hud["team"] ); + + if ( isdefined( level.lock_player_on_team_score ) && level.lock_player_on_team_score ) + { + players[i] freezecontrols( 1 ); + players[i] takeallweapons(); + players[i] setclientuivisibilityflag( "hud_visible", 0 ); + players[i].sessionstate = "spectator"; + players[i].spectatorclient = -1; + players[i].maxhealth = players[i].health; + players[i].shellshocked = 0; + players[i].inwater = 0; + players[i].friendlydamage = undefined; + players[i].hasspawned = 1; + players[i].spawntime = gettime(); + players[i].afk = 0; + players[i] detachall(); + } + } + + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "match_over" ); +} + +create_module_hud_team_winer_score() +{ + self._team_winer_score = newclienthudelem( self ); + self._team_winer_score.x = 0; + self._team_winer_score.y = 70; + self._team_winer_score.alignx = "center"; + self._team_winer_score.horzalign = "center"; + self._team_winer_score.vertalign = "middle"; + self._team_winer_score.font = "default"; + self._team_winer_score.fontscale = 15; + self._team_winer_score.color = ( 0, 1, 0 ); + self._team_winer_score.foreground = 1; + + if ( self._encounters_team == "B" && get_gamemode_var( "team_2_score" ) > get_gamemode_var( "team_1_score" ) ) + self._team_winer_score settext( &"ZOMBIE_MATCH_WON" ); + else if ( self._encounters_team == "B" && get_gamemode_var( "team_2_score" ) < get_gamemode_var( "team_1_score" ) ) + { + self._team_winer_score.color = ( 1, 0, 0 ); + self._team_winer_score settext( &"ZOMBIE_MATCH_LOST" ); + } + + if ( self._encounters_team == "A" && get_gamemode_var( "team_1_score" ) > get_gamemode_var( "team_2_score" ) ) + self._team_winer_score settext( &"ZOMBIE_MATCH_WON" ); + else if ( self._encounters_team == "A" && get_gamemode_var( "team_1_score" ) < get_gamemode_var( "team_2_score" ) ) + { + self._team_winer_score.color = ( 1, 0, 0 ); + self._team_winer_score settext( &"ZOMBIE_MATCH_LOST" ); + } + + self._team_winer_score.alpha = 0; + self._team_winer_score.sort = 12; + self._team_winer_score fadeovertime( 0.25 ); + self._team_winer_score.alpha = 1; + wait 2; + self._team_winer_score fadeovertime( 0.25 ); + self._team_winer_score.alpha = 0; + wait 0.25; + self._team_winer_score destroy(); +} + +displayroundend( round_winner ) +{ + players = get_players(); + + foreach ( player in players ) + { + player thread module_hud_round_end( round_winner ); + + if ( isdefined( player._team_hud ) && isdefined( player._team_hud["team"] ) ) + player thread team_icon_winner( player._team_hud["team"] ); + + player freeze_player_controls( 1 ); + } + + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "round_end" ); + level thread maps\mp\zombies\_zm_audio::zmbvoxcrowdonteam( "clap" ); + level thread play_sound_2d( "zmb_air_horn" ); + wait 2.0; +} + +module_hud_round_end( round_winner ) +{ + self endon( "disconnect" ); + self._team_winner_round = newclienthudelem( self ); + self._team_winner_round.x = 0; + self._team_winner_round.y = 50; + self._team_winner_round.alignx = "center"; + self._team_winner_round.horzalign = "center"; + self._team_winner_round.vertalign = "middle"; + self._team_winner_round.font = "default"; + self._team_winner_round.fontscale = 15; + self._team_winner_round.color = ( 1, 1, 1 ); + self._team_winner_round.foreground = 1; + + if ( self._encounters_team == round_winner ) + { + self._team_winner_round.color = ( 0, 1, 0 ); + self._team_winner_round settext( "YOU WIN" ); + } + else + { + self._team_winner_round.color = ( 1, 0, 0 ); + self._team_winner_round settext( "YOU LOSE" ); + } + + self._team_winner_round.alpha = 0; + self._team_winner_round.sort = 12; + self._team_winner_round fadeovertime( 0.25 ); + self._team_winner_round.alpha = 1; + wait 1.5; + self._team_winner_round fadeovertime( 0.25 ); + self._team_winner_round.alpha = 0; + wait 0.25; + self._team_winner_round destroy(); +} + +displayroundswitch() +{ + level._round_changing_sides = newhudelem(); + level._round_changing_sides.x = 0; + level._round_changing_sides.y = 60; + level._round_changing_sides.alignx = "center"; + level._round_changing_sides.horzalign = "center"; + level._round_changing_sides.vertalign = "middle"; + level._round_changing_sides.font = "default"; + level._round_changing_sides.fontscale = 2.3; + level._round_changing_sides.color = ( 1, 1, 1 ); + level._round_changing_sides.foreground = 1; + level._round_changing_sides.sort = 12; + fadetoblack = newhudelem(); + fadetoblack.x = 0; + fadetoblack.y = 0; + fadetoblack.horzalign = "fullscreen"; + fadetoblack.vertalign = "fullscreen"; + fadetoblack setshader( "black", 640, 480 ); + fadetoblack.color = ( 0, 0, 0 ); + fadetoblack.alpha = 1; + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "side_switch" ); + level._round_changing_sides settext( "CHANGING SIDES" ); + level._round_changing_sides fadeovertime( 0.25 ); + level._round_changing_sides.alpha = 1; + wait 1.0; + fadetoblack fadeovertime( 1.0 ); + level._round_changing_sides fadeovertime( 0.25 ); + level._round_changing_sides.alpha = 0; + fadetoblack.alpha = 0; + wait 0.25; + level._round_changing_sides destroy(); + fadetoblack destroy(); +} + +module_hud_create_team_name() +{ + if ( !is_encounter() ) + return; + + if ( !isdefined( self._team_hud ) ) + self._team_hud = []; + + if ( isdefined( self._team_hud["team"] ) ) + self._team_hud["team"] destroy(); + + elem = newclienthudelem( self ); + elem.hidewheninmenu = 1; + elem.alignx = "center"; + elem.aligny = "middle"; + elem.horzalign = "center"; + elem.vertalign = "middle"; + elem.x = 0; + elem.y = 0; + + if ( isdefined( level.game_module_team_name_override_og_x ) ) + elem.og_x = level.game_module_team_name_override_og_x; + else + elem.og_x = 85; + + elem.og_y = -40; + elem.foreground = 1; + elem.font = "default"; + elem.color = ( 1, 1, 1 ); + elem.sort = 1; + elem.alpha = 0.7; + elem setshader( game["icons"][self.team], 150, 150 ); + self._team_hud["team"] = elem; +} + +nextzmhud( winner ) +{ + displayroundend( winner ); + create_hud_scoreboard( 1.0, 0.25 ); + + if ( checkzmroundswitch() ) + displayroundswitch(); +} + +startnextzmround( winner ) +{ + if ( !isonezmround() ) + { + if ( !waslastzmround() ) + { + nextzmhud( winner ); + setmatchtalkflag( "DeadChatWithDead", level.voip.deadchatwithdead ); + setmatchtalkflag( "DeadChatWithTeam", level.voip.deadchatwithteam ); + setmatchtalkflag( "DeadHearTeamLiving", level.voip.deadhearteamliving ); + setmatchtalkflag( "DeadHearAllLiving", level.voip.deadhearallliving ); + setmatchtalkflag( "EveryoneHearsEveryone", level.voip.everyonehearseveryone ); + setmatchtalkflag( "DeadHearKiller", level.voip.deadhearkiller ); + setmatchtalkflag( "KillersHearVictim", level.voip.killershearvictim ); + game["state"] = "playing"; + level.allowbattlechatter = getgametypesetting( "allowBattleChatter" ); + + if ( isdefined( level.zm_switchsides_on_roundswitch ) && level.zm_switchsides_on_roundswitch ) + set_game_var( "switchedsides", !get_game_var( "switchedsides" ) ); + + map_restart( 1 ); + return true; + } + } + + return false; +} + +start_round() +{ + flag_clear( "start_encounters_match_logic" ); + + if ( !isdefined( level._module_round_hud ) ) + { + level._module_round_hud = newhudelem(); + level._module_round_hud.x = 0; + level._module_round_hud.y = 70; + level._module_round_hud.alignx = "center"; + level._module_round_hud.horzalign = "center"; + level._module_round_hud.vertalign = "middle"; + level._module_round_hud.font = "default"; + level._module_round_hud.fontscale = 2.3; + level._module_round_hud.color = ( 1, 1, 1 ); + level._module_round_hud.foreground = 1; + level._module_round_hud.sort = 0; + } + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] freeze_player_controls( 1 ); + + level._module_round_hud.alpha = 1; + label = &"Next Round Starting In ^2"; + level._module_round_hud.label = label; + level._module_round_hud settimer( 3 ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "countdown" ); + level thread maps\mp\zombies\_zm_audio::zmbvoxcrowdonteam( "clap" ); + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "round_start" ); + level notify( "start_fullscreen_fade_out" ); + wait 2; + level._module_round_hud fadeovertime( 1 ); + level._module_round_hud.alpha = 0; + wait 1; + level thread play_sound_2d( "zmb_air_horn" ); + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + players[i] freeze_player_controls( 0 ); + players[i] sprintuprequired(); + } + + flag_set( "start_encounters_match_logic" ); + flag_clear( "pregame" ); + level._module_round_hud destroy(); +} + +isonezmround() +{ + if ( get_game_var( "ZM_roundLimit" ) == 1 ) + return true; + + return false; +} + +waslastzmround() +{ + if ( isdefined( level.forcedend ) && level.forcedend ) + return true; + + if ( hitzmroundlimit() || hitzmscorelimit() || hitzmroundwinlimit() ) + return true; + + return false; +} + +hitzmroundlimit() +{ + if ( get_game_var( "ZM_roundLimit" ) <= 0 ) + return 0; + + return getzmroundsplayed() >= get_game_var( "ZM_roundLimit" ); +} + +hitzmroundwinlimit() +{ + if ( !isdefined( get_game_var( "ZM_roundWinLimit" ) ) || get_game_var( "ZM_roundWinLimit" ) <= 0 ) + return false; + + if ( get_gamemode_var( "team_1_score" ) >= get_game_var( "ZM_roundWinLimit" ) || get_gamemode_var( "team_2_score" ) >= get_game_var( "ZM_roundWinLimit" ) ) + return true; + + if ( get_gamemode_var( "team_1_score" ) >= get_game_var( "ZM_roundWinLimit" ) || get_gamemode_var( "team_2_score" ) >= get_game_var( "ZM_roundWinLimit" ) ) + { + if ( get_gamemode_var( "team_1_score" ) != get_gamemode_var( "team_2_score" ) ) + return true; + } + + return false; +} + +hitzmscorelimit() +{ + if ( get_game_var( "ZM_scoreLimit" ) <= 0 ) + return false; + + if ( is_encounter() ) + { + if ( get_gamemode_var( "team_1_score" ) >= get_game_var( "ZM_scoreLimit" ) || get_gamemode_var( "team_2_score" ) >= get_game_var( "ZM_scoreLimit" ) ) + return true; + } + + return false; +} + +getzmroundsplayed() +{ + return get_gamemode_var( "current_round" ); +} + +onspawnplayerunified() +{ + onspawnplayer( 0 ); +} + +onspawnplayer( predictedspawn = 0 ) +{ + pixbeginevent( "ZSURVIVAL:onSpawnPlayer" ); + self.usingobj = undefined; + self.is_zombie = 0; + + if ( isdefined( level.custom_spawnplayer ) && ( isdefined( self.player_initialized ) && self.player_initialized ) ) + { + self [[ level.custom_spawnplayer ]](); + return; + } + + if ( isdefined( level.customspawnlogic ) ) + { +/# + println( "ZM >> USE CUSTOM SPAWNING" ); +#/ + spawnpoint = self [[ level.customspawnlogic ]]( predictedspawn ); + + if ( predictedspawn ) + return; + } + else + { +/# + println( "ZM >> USE STANDARD SPAWNING" ); +#/ + if ( flag( "begin_spawning" ) ) + { + spawnpoint = maps\mp\zombies\_zm::check_for_valid_spawn_near_team( self, 1 ); +/# + if ( !isdefined( spawnpoint ) ) + println( "ZM >> WARNING UNABLE TO FIND RESPAWN POINT NEAR TEAM - USING INITIAL SPAWN POINTS" ); +#/ + } + + if ( !isdefined( spawnpoint ) ) + { + match_string = ""; + location = level.scr_zm_map_start_location; + + if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) ) + location = level.default_start_location; + + match_string = level.scr_zm_ui_gametype + "_" + location; + spawnpoints = []; + structs = getstructarray( "initial_spawn", "script_noteworthy" ); + + if ( isdefined( structs ) ) + { + foreach ( struct in structs ) + { + if ( isdefined( struct.script_string ) ) + { + tokens = strtok( struct.script_string, " " ); + + foreach ( token in tokens ) + { + if ( token == match_string ) + spawnpoints[spawnpoints.size] = struct; + } + } + } + } + + if ( !isdefined( spawnpoints ) || spawnpoints.size == 0 ) + spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); + + assert( isdefined( spawnpoints ), "Could not find initial spawn points!" ); + spawnpoint = maps\mp\zombies\_zm::getfreespawnpoint( spawnpoints, self ); + } + + if ( predictedspawn ) + { + self predictspawnpoint( spawnpoint.origin, spawnpoint.angles ); + return; + } + else + self spawn( spawnpoint.origin, spawnpoint.angles, "zsurvival" ); + } + + self.entity_num = self getentitynumber(); + self thread maps\mp\zombies\_zm::onplayerspawned(); + self thread maps\mp\zombies\_zm::player_revive_monitor(); + self freezecontrols( 1 ); + self.spectator_respawn = spawnpoint; + self.score = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "score" ); + self.pers["participation"] = 0; +/# + if ( getdvarint( _hash_FA81816F ) >= 1 ) + self.score = 100000; +#/ + self.score_total = self.score; + self.old_score = self.score; + self.player_initialized = 0; + self.zombification_time = 0; + self.enabletext = 1; + self thread maps\mp\zombies\_zm_blockers::rebuild_barrier_reward_reset(); + + if ( !( isdefined( level.host_ended_game ) && level.host_ended_game ) ) + { + self freeze_player_controls( 0 ); + self enableweapons(); + } + + if ( isdefined( level.game_mode_spawn_player_logic ) ) + { + spawn_in_spectate = [[ level.game_mode_spawn_player_logic ]](); + + if ( spawn_in_spectate ) + self delay_thread( 0.05, maps\mp\zombies\_zm::spawnspectator ); + } + + pixendevent(); +} + +get_player_spawns_for_gametype() +{ + match_string = ""; + location = level.scr_zm_map_start_location; + + if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) ) + location = level.default_start_location; + + match_string = level.scr_zm_ui_gametype + "_" + location; + player_spawns = []; + structs = getstructarray( "player_respawn_point", "targetname" ); + + foreach ( struct in structs ) + { + if ( isdefined( struct.script_string ) ) + { + tokens = strtok( struct.script_string, " " ); + + foreach ( token in tokens ) + { + if ( token == match_string ) + player_spawns[player_spawns.size] = struct; + } + + continue; + } + + player_spawns[player_spawns.size] = struct; + } + + return player_spawns; +} + +onendgame( winningteam ) +{ + +} + +onroundendgame( roundwinner ) +{ + if ( game["roundswon"]["allies"] == game["roundswon"]["axis"] ) + winner = "tie"; + else if ( game["roundswon"]["axis"] > game["roundswon"]["allies"] ) + winner = "axis"; + else + winner = "allies"; + + return winner; +} + +menu_init() +{ + game["menu_team"] = "team_marinesopfor"; + game["menu_changeclass_allies"] = "changeclass"; + game["menu_initteam_allies"] = "initteam_marines"; + game["menu_changeclass_axis"] = "changeclass"; + game["menu_initteam_axis"] = "initteam_opfor"; + game["menu_class"] = "class"; + game["menu_changeclass"] = "changeclass"; + game["menu_changeclass_offline"] = "changeclass"; + game["menu_wager_side_bet"] = "sidebet"; + game["menu_wager_side_bet_player"] = "sidebet_player"; + game["menu_changeclass_wager"] = "changeclass_wager"; + game["menu_changeclass_custom"] = "changeclass_custom"; + game["menu_changeclass_barebones"] = "changeclass_barebones"; + game["menu_controls"] = "ingame_controls"; + game["menu_options"] = "ingame_options"; + game["menu_leavegame"] = "popup_leavegame"; + game["menu_restartgamepopup"] = "restartgamepopup"; + precachemenu( game["menu_controls"] ); + precachemenu( game["menu_options"] ); + precachemenu( game["menu_leavegame"] ); + precachemenu( game["menu_restartgamepopup"] ); + precachemenu( "scoreboard" ); + precachemenu( game["menu_team"] ); + precachemenu( game["menu_changeclass_allies"] ); + precachemenu( game["menu_initteam_allies"] ); + precachemenu( game["menu_changeclass_axis"] ); + precachemenu( game["menu_class"] ); + precachemenu( game["menu_changeclass"] ); + precachemenu( game["menu_initteam_axis"] ); + precachemenu( game["menu_changeclass_offline"] ); + precachemenu( game["menu_changeclass_wager"] ); + precachemenu( game["menu_changeclass_custom"] ); + precachemenu( game["menu_changeclass_barebones"] ); + precachemenu( game["menu_wager_side_bet"] ); + precachemenu( game["menu_wager_side_bet_player"] ); + precachestring( &"MP_HOST_ENDED_GAME" ); + precachestring( &"MP_HOST_ENDGAME_RESPONSE" ); + level thread menu_onplayerconnect(); +} + +menu_onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread menu_onmenuresponse(); + } +} + +menu_onmenuresponse() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "menuresponse", menu, response ); + + if ( response == "back" ) + { + self closemenu(); + self closeingamemenu(); + + if ( level.console ) + { + if ( menu == game["menu_changeclass"] || menu == game["menu_changeclass_offline"] || menu == game["menu_team"] || menu == game["menu_controls"] ) + { + if ( self.pers["team"] == "allies" ) + self openmenu( game["menu_class"] ); + + if ( self.pers["team"] == "axis" ) + self openmenu( game["menu_class"] ); + } + } + + continue; + } + + if ( response == "changeteam" && level.allow_teamchange == "1" ) + { + self closemenu(); + self closeingamemenu(); + self openmenu( game["menu_team"] ); + } + + if ( response == "changeclass_marines" ) + { + self closemenu(); + self closeingamemenu(); + self openmenu( game["menu_changeclass_allies"] ); + continue; + } + + if ( response == "changeclass_opfor" ) + { + self closemenu(); + self closeingamemenu(); + self openmenu( game["menu_changeclass_axis"] ); + continue; + } + + if ( response == "changeclass_wager" ) + { + self closemenu(); + self closeingamemenu(); + self openmenu( game["menu_changeclass_wager"] ); + continue; + } + + if ( response == "changeclass_custom" ) + { + self closemenu(); + self closeingamemenu(); + self openmenu( game["menu_changeclass_custom"] ); + continue; + } + + if ( response == "changeclass_barebones" ) + { + self closemenu(); + self closeingamemenu(); + self openmenu( game["menu_changeclass_barebones"] ); + continue; + } + + if ( response == "changeclass_marines_splitscreen" ) + self openmenu( "changeclass_marines_splitscreen" ); + + if ( response == "changeclass_opfor_splitscreen" ) + self openmenu( "changeclass_opfor_splitscreen" ); + + if ( response == "endgame" ) + { + if ( self issplitscreen() ) + { + level.skipvote = 1; + + if ( !( isdefined( level.gameended ) && level.gameended ) ) + { + self maps\mp\zombies\_zm_laststand::add_weighted_down(); + self maps\mp\zombies\_zm_stats::increment_client_stat( "deaths" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "deaths" ); + self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat(); + level.host_ended_game = 1; + maps\mp\zombies\_zm_game_module::freeze_players( 1 ); + level notify( "end_game" ); + } + } + + continue; + } + + if ( response == "restart_level_zm" ) + { + self maps\mp\zombies\_zm_laststand::add_weighted_down(); + self maps\mp\zombies\_zm_stats::increment_client_stat( "deaths" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "deaths" ); + self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat(); + missionfailed(); + } + + if ( response == "killserverpc" ) + { + level thread maps\mp\gametypes_zm\_globallogic::killserverpc(); + continue; + } + + if ( response == "endround" ) + { + if ( !( isdefined( level.gameended ) && level.gameended ) ) + { + self maps\mp\gametypes_zm\_globallogic::gamehistoryplayerquit(); + self maps\mp\zombies\_zm_laststand::add_weighted_down(); + self closemenu(); + self closeingamemenu(); + level.host_ended_game = 1; + maps\mp\zombies\_zm_game_module::freeze_players( 1 ); + level notify( "end_game" ); + } + else + { + self closemenu(); + self closeingamemenu(); + self iprintln( &"MP_HOST_ENDGAME_RESPONSE" ); + } + + continue; + } + + if ( menu == game["menu_team"] && level.allow_teamchange == "1" ) + { + switch ( response ) + { + case "allies": + self [[ level.allies ]](); + break; + case "axis": + self [[ level.teammenu ]]( response ); + break; + case "autoassign": + self [[ level.autoassign ]]( 1 ); + break; + case "spectator": + self [[ level.spectator ]](); + break; + } + + continue; + } + + if ( menu == game["menu_changeclass"] || menu == game["menu_changeclass_offline"] || menu == game["menu_changeclass_wager"] || menu == game["menu_changeclass_custom"] || menu == game["menu_changeclass_barebones"] ) + { + self closemenu(); + self closeingamemenu(); + + if ( level.rankedmatch && issubstr( response, "custom" ) ) + { + + } + + self.selectedclass = 1; + self [[ level.class ]]( response ); + } + } +} + +menuallieszombies() +{ + self maps\mp\gametypes_zm\_globallogic_ui::closemenus(); + + if ( !level.console && level.allow_teamchange == "0" && ( isdefined( self.hasdonecombat ) && self.hasdonecombat ) ) + return; + + if ( self.pers["team"] != "allies" ) + { + if ( level.ingraceperiod && ( !isdefined( self.hasdonecombat ) || !self.hasdonecombat ) ) + self.hasspawned = 0; + + if ( self.sessionstate == "playing" ) + { + self.switching_teams = 1; + self.joining_team = "allies"; + self.leaving_team = self.pers["team"]; + self suicide(); + } + + self.pers["team"] = "allies"; + self.team = "allies"; + self.pers["class"] = undefined; + self.class = undefined; + self.pers["weapon"] = undefined; + self.pers["savedmodel"] = undefined; + self updateobjectivetext(); + + if ( level.teambased ) + self.sessionteam = "allies"; + else + { + self.sessionteam = "none"; + self.ffateam = "allies"; + } + + self setclientscriptmainmenu( game["menu_class"] ); + self notify( "joined_team" ); + level notify( "joined_team" ); + self notify( "end_respawn" ); + } +} + +custom_spawn_init_func() +{ + array_thread( level.zombie_spawners, ::add_spawn_function, maps\mp\zombies\_zm_spawner::zombie_spawn_init ); + array_thread( level.zombie_spawners, ::add_spawn_function, level._zombies_round_spawn_failsafe ); +} + +kill_all_zombies() +{ + ai = getaiarray( level.zombie_team ); + + foreach ( zombie in ai ) + { + if ( isdefined( zombie ) ) + { + zombie dodamage( zombie.maxhealth * 2, zombie.origin, zombie, zombie, "none", "MOD_SUICIDE" ); + wait 0.05; + } + } +} + +init() +{ + flag_init( "pregame" ); + flag_set( "pregame" ); + level thread onplayerconnect(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connected", player ); + + player thread onplayerspawned(); + + if ( isdefined( level.game_module_onplayerconnect ) ) + player [[ level.game_module_onplayerconnect ]](); + } +} + +onplayerspawned() +{ + level endon( "end_game" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill_either( "spawned_player", "fake_spawned_player" ); + + if ( isdefined( level.match_is_ending ) && level.match_is_ending ) + return; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + self thread maps\mp\zombies\_zm_laststand::auto_revive( self ); + + if ( isdefined( level.custom_player_fake_death_cleanup ) ) + self [[ level.custom_player_fake_death_cleanup ]](); + + self setstance( "stand" ); + self.zmbdialogqueue = []; + self.zmbdialogactive = 0; + self.zmbdialoggroups = []; + self.zmbdialoggroup = ""; + + if ( is_encounter() ) + { + if ( self.team == "axis" ) + { + self.characterindex = 0; + self._encounters_team = "A"; + self._team_name = &"ZOMBIE_RACE_TEAM_1"; + } + else + { + self.characterindex = 1; + self._encounters_team = "B"; + self._team_name = &"ZOMBIE_RACE_TEAM_2"; + } + } + + self takeallweapons(); + + if ( isdefined( level.givecustomcharacters ) ) + self [[ level.givecustomcharacters ]](); + + self giveweapon( "knife_zm" ); + + if ( isdefined( level.onplayerspawned_restore_previous_weapons ) && ( isdefined( level.isresetting_grief ) && level.isresetting_grief ) ) + weapons_restored = self [[ level.onplayerspawned_restore_previous_weapons ]](); + + if ( !( isdefined( weapons_restored ) && weapons_restored ) ) + self give_start_weapon( 1 ); + + weapons_restored = 0; + + if ( isdefined( level._team_loadout ) ) + { + self giveweapon( level._team_loadout ); + self switchtoweapon( level._team_loadout ); + } + + if ( isdefined( level.gamemode_post_spawn_logic ) ) + self [[ level.gamemode_post_spawn_logic ]](); + } +} + +wait_for_players() +{ + level endon( "end_race" ); + + if ( getdvarint( "party_playerCount" ) == 1 ) + { + flag_wait( "start_zombie_round_logic" ); + return; + } + + while ( !flag_exists( "start_zombie_round_logic" ) ) + wait 0.05; + + while ( !flag( "start_zombie_round_logic" ) && isdefined( level._module_connect_hud ) ) + { + level._module_connect_hud.alpha = 0; + level._module_connect_hud.sort = 12; + level._module_connect_hud fadeovertime( 1.0 ); + level._module_connect_hud.alpha = 1; + wait 1.5; + level._module_connect_hud fadeovertime( 1.0 ); + level._module_connect_hud.alpha = 0; + wait 1.5; + } + + if ( isdefined( level._module_connect_hud ) ) + level._module_connect_hud destroy(); +} + +onplayerconnect_check_for_hotjoin() +{ +/# + if ( getdvarint( _hash_EA6D219A ) > 0 ) + return; +#/ + map_logic_exists = level flag_exists( "start_zombie_round_logic" ); + map_logic_started = flag( "start_zombie_round_logic" ); + + if ( map_logic_exists && map_logic_started ) + self thread hide_gump_loading_for_hotjoiners(); +} + +hide_gump_loading_for_hotjoiners() +{ + self endon( "disconnect" ); + self.rebuild_barrier_reward = 1; + self.is_hotjoining = 1; + num = self getsnapshotackindex(); + + while ( num == self getsnapshotackindex() ) + wait 0.25; + + wait 0.5; + self maps\mp\zombies\_zm::spawnspectator(); + self.is_hotjoining = 0; + self.is_hotjoin = 1; + + if ( is_true( level.intermission ) || is_true( level.host_ended_game ) ) + { + setclientsysstate( "levelNotify", "zi", self ); + self setclientthirdperson( 0 ); + self resetfov(); + self.health = 100; + self thread [[ level.custom_intermission ]](); + } +} diff --git a/ZM/Core/maps/mp/gametypes_zm/zclassic.gsc b/ZM/Core/maps/mp/gametypes_zm/zclassic.gsc new file mode 100644 index 0000000..bb3a391 --- /dev/null +++ b/ZM/Core/maps/mp/gametypes_zm/zclassic.gsc @@ -0,0 +1,31 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_stats; + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::main(); + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level._game_module_custom_spawn_init_func = maps\mp\gametypes_zm\_zm_gametype::custom_spawn_init_func; + level._game_module_stat_update_func = maps\mp\zombies\_zm_stats::survival_classic_custom_stat_update; + maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zclassic" ); +} + +onprecachegametype() +{ + level.playersuicideallowed = 1; + level.canplayersuicide = ::canplayersuicide; + level.suicide_weapon = "death_self_zm"; + precacheitem( "death_self_zm" ); + maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zclassic" ); +} + +onstartgametype() +{ + maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zclassic", maps\mp\gametypes_zm\_zm_gametype::zclassic_main ); +} diff --git a/ZM/Core/maps/mp/zombies/_load.gsc b/ZM/Core/maps/mp/zombies/_load.gsc new file mode 100644 index 0000000..ab230de --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_load.gsc @@ -0,0 +1,478 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\_script_gen; +#include maps\mp\_interactive_objects; +#include maps\mp\_audio; +#include maps\mp\_busing; +#include maps\mp\_music; +#include maps\mp\_fxanim; +#include maps\mp\_serverfaceanim_mp; +#include maps\mp\_art; +#include maps\mp\_createfx; +#include maps\mp\_global_fx; +#include maps\mp\_demo; +#include maps\mp\zombies\_load; +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\gametypes_zm\_spawnlogic; + +main( bscriptgened, bcsvgened, bsgenabled ) +{ + if ( !isdefined( level.script_gen_dump_reasons ) ) + level.script_gen_dump_reasons = []; + + if ( !isdefined( bsgenabled ) ) + level.script_gen_dump_reasons[level.script_gen_dump_reasons.size] = "First run"; + + if ( !isdefined( bcsvgened ) ) + bcsvgened = 0; + + level.bcsvgened = bcsvgened; + + if ( !isdefined( bscriptgened ) ) + bscriptgened = 0; + else + bscriptgened = 1; + + level.bscriptgened = bscriptgened; + level._loadstarted = 1; + struct_class_init(); + level.clientscripts = getdvar( "cg_usingClientScripts" ) != ""; + level._client_exploders = []; + level._client_exploder_ids = []; + + if ( !isdefined( level.flag ) ) + { + level.flag = []; + level.flags_lock = []; + } + + if ( !isdefined( level.timeofday ) ) + level.timeofday = "day"; + + flag_init( "scriptgen_done" ); + level.script_gen_dump_reasons = []; + + if ( !isdefined( level.script_gen_dump ) ) + { + level.script_gen_dump = []; + level.script_gen_dump_reasons[0] = "First run"; + } + + if ( !isdefined( level.script_gen_dump2 ) ) + level.script_gen_dump2 = []; + + if ( isdefined( level.createfxent ) && isdefined( level.script ) ) + script_gen_dump_addline( "maps\\mp\\createfx\\" + level.script + "_fx::main();", level.script + "_fx" ); + + if ( isdefined( level.script_gen_dump_preload ) ) + { + for ( i = 0; i < level.script_gen_dump_preload.size; i++ ) + script_gen_dump_addline( level.script_gen_dump_preload[i].string, level.script_gen_dump_preload[i].signature ); + } + + if ( getdvar( "scr_RequiredMapAspectratio" ) == "" ) + setdvar( "scr_RequiredMapAspectratio", "1" ); + + setdvar( "r_waterFogTest", 0 ); + precacherumble( "reload_small" ); + precacherumble( "reload_medium" ); + precacherumble( "reload_large" ); + precacherumble( "reload_clipin" ); + precacherumble( "reload_clipout" ); + precacherumble( "reload_rechamber" ); + precacherumble( "pullout_small" ); + precacherumble( "buzz_high" ); + precacherumble( "riotshield_impact" ); + registerclientsys( "levelNotify" ); + level.aitriggerspawnflags = getaitriggerflags(); + level.vehicletriggerspawnflags = getvehicletriggerflags(); + level.physicstracemaskphysics = 1; + level.physicstracemaskvehicle = 2; + level.physicstracemaskwater = 4; + level.physicstracemaskclip = 8; + level.physicstracecontentsvehicleclip = 16; + level.createfx_enabled = getdvar( "createfx" ) != ""; + level thread start_intro_screen_zm(); + thread maps\mp\_interactive_objects::init(); + maps\mp\_audio::init(); + thread maps\mp\_busing::businit(); + thread maps\mp\_music::music_init(); + thread maps\mp\_fxanim::init(); + thread maps\mp\_serverfaceanim_mp::init(); + + if ( level.createfx_enabled ) + setinitialplayersconnected(); + + visionsetnight( "default_night" ); + setup_traversals(); + maps\mp\_art::main(); + setupexploders(); + parse_structs(); + thread footsteps(); +/# + level thread level_notify_listener(); + level thread client_notify_listener(); +#/ + thread maps\mp\_createfx::fx_init(); + + if ( level.createfx_enabled ) + { + calculate_map_center(); + maps\mp\_createfx::createfx(); + } + + if ( getdvar( "r_reflectionProbeGenerate" ) == "1" ) + { + maps\mp\_global_fx::main(); + + level waittill( "eternity" ); + } + + thread maps\mp\_global_fx::main(); + maps\mp\_demo::init(); + + for ( p = 0; p < 6; p++ ) + { + switch ( p ) + { + case 0: + triggertype = "trigger_multiple"; + break; + case 1: + triggertype = "trigger_once"; + break; + case 2: + triggertype = "trigger_use"; + break; + case 3: + triggertype = "trigger_radius"; + break; + case 4: + triggertype = "trigger_lookat"; + break; + default: + assert( p == 5 ); + triggertype = "trigger_damage"; + break; + } + + triggers = getentarray( triggertype, "classname" ); + + for ( i = 0; i < triggers.size; i++ ) + { + if ( isdefined( triggers[i].script_prefab_exploder ) ) + triggers[i].script_exploder = triggers[i].script_prefab_exploder; + + if ( isdefined( triggers[i].script_exploder ) ) + level thread maps\mp\zombies\_load::exploder_load( triggers[i] ); + } + } +} + +level_notify_listener() +{ + while ( true ) + { + val = getdvar( "level_notify" ); + + if ( val != "" ) + { + level notify( val ); + setdvar( "level_notify", "" ); + } + + wait 0.2; + } +} + +client_notify_listener() +{ + while ( true ) + { + val = getdvar( "client_notify" ); + + if ( val != "" ) + { + clientnotify( val ); + setdvar( "client_notify", "" ); + } + + wait 0.2; + } +} + +footsteps() +{ + if ( is_true( level.fx_exclude_footsteps ) ) + return; + + maps\mp\animscripts\utility::setfootstepeffect( "asphalt", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "brick", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "carpet", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "cloth", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "concrete", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "dirt", loadfx( "bio/player/fx_footstep_sand" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "foliage", loadfx( "bio/player/fx_footstep_sand" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "gravel", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "grass", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "metal", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "mud", loadfx( "bio/player/fx_footstep_mud" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "paper", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "plaster", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "rock", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "sand", loadfx( "bio/player/fx_footstep_sand" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "water", loadfx( "bio/player/fx_footstep_water" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "wood", loadfx( "bio/player/fx_footstep_dust" ) ); +} + +parse_structs() +{ + for ( i = 0; i < level.struct.size; i++ ) + { + if ( isdefined( level.struct[i].targetname ) ) + { + if ( level.struct[i].targetname == "flak_fire_fx" ) + { + level._effect["flak20_fire_fx"] = loadfx( "weapon/tracer/fx_tracer_flak_single_noExp" ); + level._effect["flak38_fire_fx"] = loadfx( "weapon/tracer/fx_tracer_quad_20mm_Flak38_noExp" ); + level._effect["flak_cloudflash_night"] = loadfx( "weapon/flak/fx_flak_cloudflash_night" ); + level._effect["flak_burst_single"] = loadfx( "weapon/flak/fx_flak_single_day_dist" ); + } + + if ( level.struct[i].targetname == "fake_fire_fx" ) + level._effect["distant_muzzleflash"] = loadfx( "weapon/muzzleflashes/heavy" ); + + if ( level.struct[i].targetname == "spotlight_fx" ) + level._effect["spotlight_beam"] = loadfx( "env/light/fx_ray_spotlight_md" ); + } + } +} + +exploder_load( trigger ) +{ + level endon( "killexplodertridgers" + trigger.script_exploder ); + + trigger waittill( "trigger" ); + + if ( isdefined( trigger.script_chance ) && randomfloat( 1 ) > trigger.script_chance ) + { + if ( isdefined( trigger.script_delay ) ) + wait( trigger.script_delay ); + else + wait 4; + + level thread exploder_load( trigger ); + return; + } + + maps\mp\_utility::exploder( trigger.script_exploder ); + level notify( "killexplodertridgers" + trigger.script_exploder ); +} + +setupexploders() +{ + ents = getentarray( "script_brushmodel", "classname" ); + smodels = getentarray( "script_model", "classname" ); + + for ( i = 0; i < smodels.size; i++ ) + ents[ents.size] = smodels[i]; + + for ( i = 0; i < ents.size; i++ ) + { + if ( isdefined( ents[i].script_prefab_exploder ) ) + ents[i].script_exploder = ents[i].script_prefab_exploder; + + if ( isdefined( ents[i].script_exploder ) ) + { + if ( ents[i].model == "fx" && ( !isdefined( ents[i].targetname ) || ents[i].targetname != "exploderchunk" ) ) + { + ents[i] hide(); + continue; + } + + if ( isdefined( ents[i].targetname ) && ents[i].targetname == "exploder" ) + { + ents[i] hide(); + ents[i] notsolid(); + continue; + } + + if ( isdefined( ents[i].targetname ) && ents[i].targetname == "exploderchunk" ) + { + ents[i] hide(); + ents[i] notsolid(); + } + } + } + + script_exploders = []; + potentialexploders = getentarray( "script_brushmodel", "classname" ); + + for ( i = 0; i < potentialexploders.size; i++ ) + { + if ( isdefined( potentialexploders[i].script_prefab_exploder ) ) + potentialexploders[i].script_exploder = potentialexploders[i].script_prefab_exploder; + + if ( isdefined( potentialexploders[i].script_exploder ) ) + script_exploders[script_exploders.size] = potentialexploders[i]; + } + + potentialexploders = getentarray( "script_model", "classname" ); + + for ( i = 0; i < potentialexploders.size; i++ ) + { + if ( isdefined( potentialexploders[i].script_prefab_exploder ) ) + potentialexploders[i].script_exploder = potentialexploders[i].script_prefab_exploder; + + if ( isdefined( potentialexploders[i].script_exploder ) ) + script_exploders[script_exploders.size] = potentialexploders[i]; + } + + potentialexploders = getentarray( "item_health", "classname" ); + + for ( i = 0; i < potentialexploders.size; i++ ) + { + if ( isdefined( potentialexploders[i].script_prefab_exploder ) ) + potentialexploders[i].script_exploder = potentialexploders[i].script_prefab_exploder; + + if ( isdefined( potentialexploders[i].script_exploder ) ) + script_exploders[script_exploders.size] = potentialexploders[i]; + } + + if ( !isdefined( level.createfxent ) ) + level.createfxent = []; + + acceptabletargetnames = []; + acceptabletargetnames["exploderchunk visible"] = 1; + acceptabletargetnames["exploderchunk"] = 1; + acceptabletargetnames["exploder"] = 1; + + for ( i = 0; i < script_exploders.size; i++ ) + { + exploder = script_exploders[i]; + ent = createexploder( exploder.script_fxid ); + ent.v = []; + ent.v["origin"] = exploder.origin; + ent.v["angles"] = exploder.angles; + ent.v["delay"] = exploder.script_delay; + ent.v["firefx"] = exploder.script_firefx; + ent.v["firefxdelay"] = exploder.script_firefxdelay; + ent.v["firefxsound"] = exploder.script_firefxsound; + ent.v["firefxtimeout"] = exploder.script_firefxtimeout; + ent.v["earthquake"] = exploder.script_earthquake; + ent.v["damage"] = exploder.script_damage; + ent.v["damage_radius"] = exploder.script_radius; + ent.v["soundalias"] = exploder.script_soundalias; + ent.v["repeat"] = exploder.script_repeat; + ent.v["delay_min"] = exploder.script_delay_min; + ent.v["delay_max"] = exploder.script_delay_max; + ent.v["target"] = exploder.target; + ent.v["ender"] = exploder.script_ender; + ent.v["type"] = "exploder"; + + if ( !isdefined( exploder.script_fxid ) ) + ent.v["fxid"] = "No FX"; + else + ent.v["fxid"] = exploder.script_fxid; + + ent.v["exploder"] = exploder.script_exploder; + assert( isdefined( exploder.script_exploder ), "Exploder at origin " + exploder.origin + " has no script_exploder" ); + + if ( !isdefined( ent.v["delay"] ) ) + ent.v["delay"] = 0; + + if ( isdefined( exploder.target ) ) + { + org = getent( ent.v["target"], "targetname" ).origin; + ent.v["angles"] = vectortoangles( org - ent.v["origin"] ); + } + + if ( exploder.classname == "script_brushmodel" || isdefined( exploder.model ) ) + { + ent.model = exploder; + ent.model.disconnect_paths = exploder.script_disconnectpaths; + } + + if ( isdefined( exploder.targetname ) && isdefined( acceptabletargetnames[exploder.targetname] ) ) + ent.v["exploder_type"] = exploder.targetname; + else + ent.v["exploder_type"] = "normal"; + + ent maps\mp\_createfx::post_entity_creation_function(); + } + + level.createfxexploders = []; + + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + + if ( ent.v["type"] != "exploder" ) + continue; + + ent.v["exploder_id"] = getexploderid( ent ); + + if ( !isdefined( level.createfxexploders[ent.v["exploder"]] ) ) + level.createfxexploders[ent.v["exploder"]] = []; + + level.createfxexploders[ent.v["exploder"]][level.createfxexploders[ent.v["exploder"]].size] = ent; + } +} + +setup_traversals() +{ + potential_traverse_nodes = getallnodes(); + + for ( i = 0; i < potential_traverse_nodes.size; i++ ) + { + node = potential_traverse_nodes[i]; + + if ( node.type == "Begin" ) + node maps\mp\animscripts\traverse\shared::init_traverse(); + } +} + +calculate_map_center() +{ + if ( !isdefined( level.mapcenter ) ) + { + level.nodesmins = ( 0, 0, 0 ); + level.nodesmaxs = ( 0, 0, 0 ); + level.mapcenter = maps\mp\gametypes_zm\_spawnlogic::findboxcenter( level.nodesmins, level.nodesmaxs ); +/# + println( "map center: ", level.mapcenter ); +#/ + setmapcenter( level.mapcenter ); + } +} + +start_intro_screen_zm() +{ + if ( level.createfx_enabled ) + return; + + if ( !isdefined( level.introscreen ) ) + { + level.introscreen = newhudelem(); + level.introscreen.x = 0; + level.introscreen.y = 0; + level.introscreen.horzalign = "fullscreen"; + level.introscreen.vertalign = "fullscreen"; + level.introscreen.foreground = 0; + level.introscreen setshader( "black", 640, 480 ); + level.introscreen.immunetodemogamehudsettings = 1; + level.introscreen.immunetodemofreecamera = 1; + wait 0.05; + } + + level.introscreen.alpha = 1; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] freezecontrols( 1 ); + + wait 1; +} diff --git a/ZM/Core/maps/mp/zombies/_zm.gsc b/ZM/Core/maps/mp/zombies/_zm.gsc new file mode 100644 index 0000000..9174c38 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm.gsc @@ -0,0 +1,5423 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_ffotd; +#include maps\mp\zombies\_zm; +#include maps\mp\_visionset_mgr; +#include maps\mp\zombies\_zm_devgui; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_blockers; +#include maps\mp\zombies\_zm_bot; +#include maps\mp\zombies\_zm_clone; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_playerhealth; +#include maps\mp\zombies\_zm_power; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_gump; +#include maps\mp\zombies\_zm_timer; +#include maps\mp\zombies\_zm_traps; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_tombstone; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_pers_upgrades; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\_demo; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\zombies\_zm_melee_weapon; +#include maps\mp\zombies\_zm_ai_dogs; +#include maps\mp\zombies\_zm_pers_upgrades_system; +#include maps\mp\gametypes_zm\_weapons; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zombies\_zm_game_module; + +init() +{ + level.player_out_of_playable_area_monitor = 1; + level.player_too_many_weapons_monitor = 1; + level.player_too_many_weapons_monitor_func = ::player_too_many_weapons_monitor; + level.player_too_many_players_check = 1; + level.player_too_many_players_check_func = ::player_too_many_players_check; + level._use_choke_weapon_hints = 1; + level._use_choke_blockers = 1; + level.passed_introscreen = 0; + + if ( !isdefined( level.custom_ai_type ) ) + level.custom_ai_type = []; + + level.custom_ai_spawn_check_funcs = []; + level.spawn_funcs = []; + level.spawn_funcs["allies"] = []; + level.spawn_funcs["axis"] = []; + level.spawn_funcs["team3"] = []; + level thread maps\mp\zombies\_zm_ffotd::main_start(); + level.zombiemode = 1; + level.revivefeature = 0; + level.swimmingfeature = 0; + level.calc_closest_player_using_paths = 0; + level.zombie_melee_in_water = 1; + level.put_timed_out_zombies_back_in_queue = 1; + level.use_alternate_poi_positioning = 1; + level.zmb_laugh_alias = "zmb_laugh_richtofen"; + level.sndannouncerisrich = 1; + level.scr_zm_ui_gametype = getdvar( "ui_gametype" ); + level.scr_zm_ui_gametype_group = getdvar( "ui_zm_gamemodegroup" ); + level.scr_zm_map_start_location = getdvar( "ui_zm_mapstartlocation" ); + level.curr_gametype_affects_rank = 0; + gametype = tolower( getdvar( "g_gametype" ) ); + + if ( "zclassic" == gametype || "zstandard" == gametype ) + level.curr_gametype_affects_rank = 1; + + level.grenade_multiattack_bookmark_count = 1; + level.rampage_bookmark_kill_times_count = 3; + level.rampage_bookmark_kill_times_msec = 6000; + level.rampage_bookmark_kill_times_delay = 6000; + level thread watch_rampage_bookmark(); + + if ( !isdefined( level._zombies_round_spawn_failsafe ) ) + level._zombies_round_spawn_failsafe = maps\mp\zombies\_zm::round_spawn_failsafe; + + level.zombie_visionset = "zombie_neutral"; + + if ( getdvar( _hash_5DF80895 ) == "1" ) + level.zombie_anim_intro = 1; + else + level.zombie_anim_intro = 0; + + precache_shaders(); + precache_models(); + precacherumble( "explosion_generic" ); + precacherumble( "dtp_rumble" ); + precacherumble( "slide_rumble" ); + precache_zombie_leaderboards(); + level._zombie_gib_piece_index_all = 0; + level._zombie_gib_piece_index_right_arm = 1; + level._zombie_gib_piece_index_left_arm = 2; + level._zombie_gib_piece_index_right_leg = 3; + level._zombie_gib_piece_index_left_leg = 4; + level._zombie_gib_piece_index_head = 5; + level._zombie_gib_piece_index_guts = 6; + level._zombie_gib_piece_index_hat = 7; + + if ( !isdefined( level.zombie_ai_limit ) ) + level.zombie_ai_limit = 24; + + if ( !isdefined( level.zombie_actor_limit ) ) + level.zombie_actor_limit = 31; + + maps\mp\_visionset_mgr::init(); + init_dvars(); + init_strings(); + init_levelvars(); + init_sounds(); + init_shellshocks(); + init_flags(); + init_client_flags(); + registerclientfield( "world", "zombie_power_on", 1, 1, "int" ); + + if ( !( isdefined( level._no_navcards ) && level._no_navcards ) ) + { + if ( level.scr_zm_ui_gametype_group == "zclassic" && !level.createfx_enabled ) + { + registerclientfield( "allplayers", "navcard_held", 1, 4, "int" ); + level.navcards = []; + level.navcards[0] = "navcard_held_zm_transit"; + level.navcards[1] = "navcard_held_zm_highrise"; + level.navcards[2] = "navcard_held_zm_buried"; + level thread setup_player_navcard_hud(); + } + } + + register_offhand_weapons_for_level_defaults(); + level thread drive_client_connected_notifies(); +/# + maps\mp\zombies\_zm_devgui::init(); +#/ + maps\mp\zombies\_zm_zonemgr::init(); + maps\mp\zombies\_zm_unitrigger::init(); + maps\mp\zombies\_zm_audio::init(); + maps\mp\zombies\_zm_blockers::init(); + maps\mp\zombies\_zm_bot::init(); + maps\mp\zombies\_zm_clone::init(); + maps\mp\zombies\_zm_buildables::init(); + maps\mp\zombies\_zm_equipment::init(); + maps\mp\zombies\_zm_laststand::init(); + maps\mp\zombies\_zm_magicbox::init(); + maps\mp\zombies\_zm_perks::init(); + maps\mp\zombies\_zm_playerhealth::init(); + maps\mp\zombies\_zm_power::init(); + maps\mp\zombies\_zm_powerups::init(); + maps\mp\zombies\_zm_score::init(); + maps\mp\zombies\_zm_spawner::init(); + maps\mp\zombies\_zm_gump::init(); + maps\mp\zombies\_zm_timer::init(); + maps\mp\zombies\_zm_traps::init(); + maps\mp\zombies\_zm_weapons::init(); + init_function_overrides(); + level thread last_stand_pistol_rank_init(); + level thread maps\mp\zombies\_zm_tombstone::init(); + level thread post_all_players_connected(); + init_utility(); + maps\mp\_utility::registerclientsys( "lsm" ); + maps\mp\zombies\_zm_stats::init(); + initializestattracking(); + + if ( get_players().size <= 1 ) + incrementcounter( "global_solo_games", 1 ); + else if ( level.systemlink ) + incrementcounter( "global_systemlink_games", 1 ); + else if ( getdvarint( "splitscreen_playerCount" ) == get_players().size ) + incrementcounter( "global_splitscreen_games", 1 ); + else + incrementcounter( "global_coop_games", 1 ); + + onplayerconnect_callback( ::zm_on_player_connect ); + maps\mp\zombies\_zm_pers_upgrades::pers_upgrade_init(); + set_demo_intermission_point(); + level thread maps\mp\zombies\_zm_ffotd::main_end(); + level thread track_players_intersection_tracker(); + level thread onallplayersready(); + level thread startunitriggers(); + level thread maps\mp\gametypes_zm\_zm_gametype::post_init_gametype(); +} + +post_main() +{ + level thread init_custom_ai_type(); +} + +startunitriggers() +{ + flag_wait_any( "start_zombie_round_logic", "start_encounters_match_logic" ); + level thread maps\mp\zombies\_zm_unitrigger::main(); +} + +drive_client_connected_notifies() +{ + while ( true ) + { + level waittill( "connected", player ); + + player reset_rampage_bookmark_kill_times(); + player callback( "on_player_connect" ); + } +} + +fade_out_intro_screen_zm( hold_black_time, fade_out_time, destroyed_afterwards ) +{ + if ( !isdefined( level.introscreen ) ) + { + level.introscreen = newhudelem(); + level.introscreen.x = 0; + level.introscreen.y = 0; + level.introscreen.horzalign = "fullscreen"; + level.introscreen.vertalign = "fullscreen"; + level.introscreen.foreground = 0; + level.introscreen setshader( "black", 640, 480 ); + level.introscreen.immunetodemogamehudsettings = 1; + level.introscreen.immunetodemofreecamera = 1; + wait 0.05; + } + + level.introscreen.alpha = 1; + + if ( isdefined( hold_black_time ) ) + wait( hold_black_time ); + else + wait 0.2; + + if ( !isdefined( fade_out_time ) ) + fade_out_time = 1.5; + + level.introscreen fadeovertime( fade_out_time ); + level.introscreen.alpha = 0; + wait 1.6; + level.passed_introscreen = 1; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + players[i] setclientuivisibilityflag( "hud_visible", 1 ); + + if ( !( isdefined( level.host_ended_game ) && level.host_ended_game ) ) + { + if ( isdefined( level.player_movement_suppressed ) ) + { + players[i] freezecontrols( level.player_movement_suppressed ); +/# + println( " Unfreeze controls 4" ); +#/ + continue; + } + + if ( !( isdefined( players[i].hostmigrationcontrolsfrozen ) && players[i].hostmigrationcontrolsfrozen ) ) + { + players[i] freezecontrols( 0 ); +/# + println( " Unfreeze controls 5" ); +#/ + } + } + } + + if ( destroyed_afterwards == 1 ) + level.introscreen destroy(); + + flag_set( "initial_blackscreen_passed" ); +} + +onallplayersready() +{ + timeout = gettime() + 5000; + + while ( getnumexpectedplayers() == 0 && gettime() < timeout ) + wait 0.1; +/# + println( "ZM >> player_count_expected=" + getnumexpectedplayers() ); +#/ + player_count_actual = 0; + + while ( getnumconnectedplayers() < getnumexpectedplayers() || player_count_actual != getnumexpectedplayers() ) + { + players = get_players(); + player_count_actual = 0; + + for ( i = 0; i < players.size; i++ ) + { + players[i] freezecontrols( 1 ); + + if ( players[i].sessionstate == "playing" ) + player_count_actual++; + } +/# + println( "ZM >> Num Connected =" + getnumconnectedplayers() + " Expected : " + getnumexpectedplayers() ); +#/ + wait 0.1; + } + + setinitialplayersconnected(); +/# + println( "ZM >> We have all players - START ZOMBIE LOGIC" ); +#/ + if ( 1 == getnumconnectedplayers() && getdvarint( "scr_zm_enable_bots" ) == 1 ) + { + level thread add_bots(); + flag_set( "initial_players_connected" ); + } + else + { + players = get_players(); + + if ( players.size == 1 ) + { + flag_set( "solo_game" ); + level.solo_lives_given = 0; + + foreach ( player in players ) + player.lives = 0; + + level maps\mp\zombies\_zm::set_default_laststand_pistol( 1 ); + } + + flag_set( "initial_players_connected" ); + + while ( !aretexturesloaded() ) + wait 0.05; + + thread start_zombie_logic_in_x_sec( 3.0 ); + } + + fade_out_intro_screen_zm( 5.0, 1.5, 1 ); +} + +start_zombie_logic_in_x_sec( time_to_wait ) +{ + wait( time_to_wait ); + flag_set( "start_zombie_round_logic" ); +} + +getallotherplayers() +{ + aliveplayers = []; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( !isdefined( level.players[i] ) ) + continue; + + player = level.players[i]; + + if ( player.sessionstate != "playing" || player == self ) + continue; + + aliveplayers[aliveplayers.size] = player; + } + + return aliveplayers; +} + +getfreespawnpoint( spawnpoints, player ) +{ + if ( !isdefined( spawnpoints ) ) + { +/# + iprintlnbold( "ZM >> No free spawn points in map" ); +#/ + return undefined; + } + + if ( !isdefined( game["spawns_randomized"] ) ) + { + game["spawns_randomized"] = 1; + spawnpoints = array_randomize( spawnpoints ); + random_chance = randomint( 100 ); + + if ( random_chance > 50 ) + set_game_var( "side_selection", 1 ); + else + set_game_var( "side_selection", 2 ); + } + + side_selection = get_game_var( "side_selection" ); + + if ( get_game_var( "switchedsides" ) ) + { + if ( side_selection == 2 ) + side_selection = 1; + else if ( side_selection == 1 ) + side_selection = 2; + } + + if ( isdefined( player ) && isdefined( player.team ) ) + { + i = 0; + + while ( isdefined( spawnpoints ) && i < spawnpoints.size ) + { + if ( side_selection == 1 ) + { + if ( player.team != "allies" && ( isdefined( spawnpoints[i].script_int ) && spawnpoints[i].script_int == 1 ) ) + { + arrayremovevalue( spawnpoints, spawnpoints[i] ); + i = 0; + } + else if ( player.team == "allies" && ( isdefined( spawnpoints[i].script_int ) && spawnpoints[i].script_int == 2 ) ) + { + arrayremovevalue( spawnpoints, spawnpoints[i] ); + i = 0; + } + else + i++; + } + else if ( player.team == "allies" && ( isdefined( spawnpoints[i].script_int ) && spawnpoints[i].script_int == 1 ) ) + { + arrayremovevalue( spawnpoints, spawnpoints[i] ); + i = 0; + } + else if ( player.team != "allies" && ( isdefined( spawnpoints[i].script_int ) && spawnpoints[i].script_int == 2 ) ) + { + arrayremovevalue( spawnpoints, spawnpoints[i] ); + i = 0; + } + else + i++; + } + } + + if ( !isdefined( self.playernum ) ) + { + if ( self.team == "allies" ) + { + self.playernum = get_game_var( "_team1_num" ); + set_game_var( "_team1_num", self.playernum + 1 ); + } + else + { + self.playernum = get_game_var( "_team2_num" ); + set_game_var( "_team2_num", self.playernum + 1 ); + } + } + + for ( j = 0; j < spawnpoints.size; j++ ) + { + if ( !isdefined( spawnpoints[j].en_num ) ) + { + for ( m = 0; m < spawnpoints.size; m++ ) + spawnpoints[m].en_num = m; + } + + if ( spawnpoints[j].en_num == self.playernum ) + return spawnpoints[j]; + } + + return spawnpoints[0]; +} + +delete_in_createfx() +{ + exterior_goals = getstructarray( "exterior_goal", "targetname" ); + + for ( i = 0; i < exterior_goals.size; i++ ) + { + if ( !isdefined( exterior_goals[i].target ) ) + continue; + + targets = getentarray( exterior_goals[i].target, "targetname" ); + + for ( j = 0; j < targets.size; j++ ) + targets[j] self_delete(); + } + + if ( isdefined( level.level_createfx_callback_thread ) ) + level thread [[ level.level_createfx_callback_thread ]](); +} + +add_bots() +{ + for ( host = gethostplayer(); !isdefined( host ); host = gethostplayer() ) + wait 0.05; + + wait 4.0; + zbot_spawn(); + setdvar( "bot_AllowMovement", "1" ); + setdvar( "bot_PressAttackBtn", "1" ); + setdvar( "bot_PressMeleeBtn", "1" ); + + while ( get_players().size < 2 ) + wait 0.05; + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + players[i] freezecontrols( 0 ); +/# + println( " Unfreeze controls 6" ); +#/ + } + + level.numberbotsadded = 1; + flag_set( "start_zombie_round_logic" ); +} + +zbot_spawn() +{ + player = gethostplayer(); + spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); + spawnpoint = getfreespawnpoint( spawnpoints ); + bot = addtestclient(); + + if ( !isdefined( bot ) ) + { +/# + println( "Could not add test client" ); +#/ + return; + } + + bot.pers["isBot"] = 1; + bot.equipment_enabled = 0; + yaw = spawnpoint.angles[1]; + bot thread zbot_spawn_think( spawnpoint.origin, yaw ); + return bot; +} + +zbot_spawn_think( origin, yaw ) +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self setorigin( origin ); + angles = ( 0, yaw, 0 ); + self setplayerangles( angles ); + } +} + +post_all_players_connected() +{ + level thread end_game(); + flag_wait( "start_zombie_round_logic" ); +/# + println( "sessions: mapname=", level.script, " gametype zom isserver 1 player_count=", get_players().size ); +#/ + level thread clear_mature_blood(); + level thread round_end_monitor(); + + if ( !level.zombie_anim_intro ) + { + if ( isdefined( level._round_start_func ) ) + level thread [[ level._round_start_func ]](); + } + + level thread players_playing(); + disablegrenadesuicide(); + level.startinvulnerabletime = getdvarint( _hash_4E44E32D ); + + if ( !isdefined( level.music_override ) ) + level.music_override = 0; +} + +init_custom_ai_type() +{ + if ( isdefined( level.custom_ai_type ) ) + { + for ( i = 0; i < level.custom_ai_type.size; i++ ) + [[ level.custom_ai_type[i] ]](); + } +} + +zombiemode_melee_miss() +{ + if ( isdefined( self.enemy.curr_pay_turret ) ) + self.enemy dodamage( getdvarint( "ai_meleeDamage" ), self.origin, self, self, "none", "melee" ); +} + +player_track_ammo_count() +{ + self notify( "stop_ammo_tracking" ); + self endon( "disconnect" ); + self endon( "stop_ammo_tracking" ); + ammolowcount = 0; + ammooutcount = 0; + + while ( true ) + { + wait 0.5; + weap = self getcurrentweapon(); + + if ( !isdefined( weap ) || weap == "none" || !can_track_ammo( weap ) ) + continue; + + if ( self getammocount( weap ) > 5 || self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + ammooutcount = 0; + ammolowcount = 0; + continue; + } + + if ( self getammocount( weap ) > 0 ) + { + if ( ammolowcount < 1 ) + { + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "ammo_low" ); + ammolowcount++; + } + } + else if ( ammooutcount < 1 ) + { + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "ammo_out" ); + ammooutcount++; + } + + wait 20; + } +} + +can_track_ammo( weap ) +{ + if ( !isdefined( weap ) ) + return false; + + switch ( weap ) + { + case "zombie_tazer_flourish": + case "zombie_sickle_flourish": + case "zombie_knuckle_crack": + case "zombie_fists_zm": + case "zombie_builder_zm": + case "zombie_bowie_flourish": + case "time_bomb_zm": + case "time_bomb_detonator_zm": + case "tazer_knuckles_zm": + case "tazer_knuckles_upgraded_zm": + case "slowgun_zm": + case "slowgun_upgraded_zm": + case "screecher_arms_zm": + case "riotshield_zm": + case "none": + case "no_hands_zm": + case "lower_equip_gasmask_zm": + case "humangun_zm": + case "humangun_upgraded_zm": + case "equip_gasmask_zm": + case "equip_dieseldrone_zm": + case "death_throe_zm": + case "chalk_draw_zm": + case "alcatraz_shield_zm": + return false; + default: + if ( is_zombie_perk_bottle( weap ) || is_placeable_mine( weap ) || is_equipment( weap ) || issubstr( weap, "knife_ballistic_" ) || getsubstr( weap, 0, 3 ) == "gl_" || weaponfuellife( weap ) > 0 || weap == level.revive_tool ) + return false; + } + + return true; +} + +spawn_vo() +{ + wait 1; + players = get_players(); + + if ( players.size > 1 ) + { + player = random( players ); + index = maps\mp\zombies\_zm_weapons::get_player_index( player ); + player thread spawn_vo_player( index, players.size ); + } +} + +spawn_vo_player( index, num ) +{ + sound = "plr_" + index + "_vox_" + num + "play"; + self playsoundwithnotify( sound, "sound_done" ); + + self waittill( "sound_done" ); +} + +precache_shaders() +{ + precacheshader( "hud_chalk_1" ); + precacheshader( "hud_chalk_2" ); + precacheshader( "hud_chalk_3" ); + precacheshader( "hud_chalk_4" ); + precacheshader( "hud_chalk_5" ); + precacheshader( "zom_icon_community_pot" ); + precacheshader( "zom_icon_community_pot_strip" ); + precacheshader( "zom_icon_player_life" ); + precacheshader( "waypoint_revive" ); +} + +precache_models() +{ + precachemodel( "p_zom_win_bars_01_vert04_bend_180" ); + precachemodel( "p_zom_win_bars_01_vert01_bend_180" ); + precachemodel( "p_zom_win_bars_01_vert04_bend" ); + precachemodel( "p_zom_win_bars_01_vert01_bend" ); + precachemodel( "p_zom_win_cell_bars_01_vert04_bent" ); + precachemodel( "p_zom_win_cell_bars_01_vert01_bent" ); + precachemodel( "tag_origin" ); + precachemodel( "zombie_z_money_icon" ); + + if ( isdefined( level.precachecustomcharacters ) ) + self [[ level.precachecustomcharacters ]](); +} + +init_shellshocks() +{ + level.player_killed_shellshock = "zombie_death"; + precacheshellshock( level.player_killed_shellshock ); + precacheshellshock( "pain" ); + precacheshellshock( "explosion" ); +} + +init_strings() +{ + precachestring( &"ZOMBIE_WEAPONCOSTAMMO" ); + precachestring( &"ZOMBIE_ROUND" ); + precachestring( &"SCRIPT_PLUS" ); + precachestring( &"ZOMBIE_GAME_OVER" ); + precachestring( &"ZOMBIE_SURVIVED_ROUND" ); + precachestring( &"ZOMBIE_SURVIVED_ROUNDS" ); + precachestring( &"ZOMBIE_SURVIVED_NOMANS" ); + precachestring( &"ZOMBIE_EXTRA_LIFE" ); + add_zombie_hint( "undefined", &"ZOMBIE_UNDEFINED" ); + add_zombie_hint( "default_treasure_chest", &"ZOMBIE_RANDOM_WEAPON_COST" ); + add_zombie_hint( "default_treasure_chest_950", &"ZOMBIE_RANDOM_WEAPON_950" ); + add_zombie_hint( "powerup_fire_sale_cost", &"ZOMBIE_FIRE_SALE_COST" ); + add_zombie_hint( "default_buy_barrier_piece_10", &"ZOMBIE_BUTTON_BUY_BACK_BARRIER_10" ); + add_zombie_hint( "default_buy_barrier_piece_20", &"ZOMBIE_BUTTON_BUY_BACK_BARRIER_20" ); + add_zombie_hint( "default_buy_barrier_piece_50", &"ZOMBIE_BUTTON_BUY_BACK_BARRIER_50" ); + add_zombie_hint( "default_buy_barrier_piece_100", &"ZOMBIE_BUTTON_BUY_BACK_BARRIER_100" ); + add_zombie_hint( "default_reward_barrier_piece", &"ZOMBIE_BUTTON_REWARD_BARRIER" ); + add_zombie_hint( "default_reward_barrier_piece_10", &"ZOMBIE_BUTTON_REWARD_BARRIER_10" ); + add_zombie_hint( "default_reward_barrier_piece_20", &"ZOMBIE_BUTTON_REWARD_BARRIER_20" ); + add_zombie_hint( "default_reward_barrier_piece_30", &"ZOMBIE_BUTTON_REWARD_BARRIER_30" ); + add_zombie_hint( "default_reward_barrier_piece_40", &"ZOMBIE_BUTTON_REWARD_BARRIER_40" ); + add_zombie_hint( "default_reward_barrier_piece_50", &"ZOMBIE_BUTTON_REWARD_BARRIER_50" ); + add_zombie_hint( "default_buy_debris", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_COST" ); + add_zombie_hint( "default_buy_debris_100", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_100" ); + add_zombie_hint( "default_buy_debris_200", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_200" ); + add_zombie_hint( "default_buy_debris_250", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_250" ); + add_zombie_hint( "default_buy_debris_500", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_500" ); + add_zombie_hint( "default_buy_debris_750", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_750" ); + add_zombie_hint( "default_buy_debris_1000", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_1000" ); + add_zombie_hint( "default_buy_debris_1250", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_1250" ); + add_zombie_hint( "default_buy_debris_1500", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_1500" ); + add_zombie_hint( "default_buy_debris_1750", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_1750" ); + add_zombie_hint( "default_buy_debris_2000", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_2000" ); + add_zombie_hint( "default_buy_debris_3000", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_3000" ); + add_zombie_hint( "default_buy_door", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_COST" ); + add_zombie_hint( "default_buy_door_close", &"ZOMBIE_BUTTON_BUY_CLOSE_DOOR" ); + add_zombie_hint( "default_buy_door_100", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_100" ); + add_zombie_hint( "default_buy_door_200", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_200" ); + add_zombie_hint( "default_buy_door_250", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_250" ); + add_zombie_hint( "default_buy_door_500", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_500" ); + add_zombie_hint( "default_buy_door_750", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_750" ); + add_zombie_hint( "default_buy_door_1000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_1000" ); + add_zombie_hint( "default_buy_door_1250", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_1250" ); + add_zombie_hint( "default_buy_door_1500", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_1500" ); + add_zombie_hint( "default_buy_door_1750", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_1750" ); + add_zombie_hint( "default_buy_door_2000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_2000" ); + add_zombie_hint( "default_buy_door_2500", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_2500" ); + add_zombie_hint( "default_buy_door_3000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_3000" ); + add_zombie_hint( "default_buy_door_4000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_4000" ); + add_zombie_hint( "default_buy_door_8000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_8000" ); + add_zombie_hint( "default_buy_door_16000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_16000" ); + add_zombie_hint( "default_buy_area", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_COST" ); + add_zombie_hint( "default_buy_area_100", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_100" ); + add_zombie_hint( "default_buy_area_200", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_200" ); + add_zombie_hint( "default_buy_area_250", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_250" ); + add_zombie_hint( "default_buy_area_500", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_500" ); + add_zombie_hint( "default_buy_area_750", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_750" ); + add_zombie_hint( "default_buy_area_1000", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_1000" ); + add_zombie_hint( "default_buy_area_1250", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_1250" ); + add_zombie_hint( "default_buy_area_1500", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_1500" ); + add_zombie_hint( "default_buy_area_1750", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_1750" ); + add_zombie_hint( "default_buy_area_2000", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_2000" ); +} + +init_sounds() +{ + add_sound( "end_of_round", "mus_zmb_round_over" ); + add_sound( "end_of_game", "mus_zmb_game_over" ); + add_sound( "chalk_one_up", "mus_zmb_chalk" ); + add_sound( "purchase", "zmb_cha_ching" ); + add_sound( "no_purchase", "zmb_no_cha_ching" ); + add_sound( "playerzombie_usebutton_sound", "zmb_zombie_vocals_attack" ); + add_sound( "playerzombie_attackbutton_sound", "zmb_zombie_vocals_attack" ); + add_sound( "playerzombie_adsbutton_sound", "zmb_zombie_vocals_attack" ); + add_sound( "zombie_head_gib", "zmb_zombie_head_gib" ); + add_sound( "rebuild_barrier_piece", "zmb_repair_boards" ); + add_sound( "rebuild_barrier_metal_piece", "zmb_metal_repair" ); + add_sound( "rebuild_barrier_hover", "zmb_boards_float" ); + add_sound( "debris_hover_loop", "zmb_couch_loop" ); + add_sound( "break_barrier_piece", "zmb_break_boards" ); + add_sound( "grab_metal_bar", "zmb_bar_pull" ); + add_sound( "break_metal_bar", "zmb_bar_break" ); + add_sound( "drop_metal_bar", "zmb_bar_drop" ); + add_sound( "blocker_end_move", "zmb_board_slam" ); + add_sound( "barrier_rebuild_slam", "zmb_board_slam" ); + add_sound( "bar_rebuild_slam", "zmb_bar_repair" ); + add_sound( "zmb_rock_fix", "zmb_break_rock_barrier_fix" ); + add_sound( "zmb_vent_fix", "evt_vent_slat_repair" ); + add_sound( "door_slide_open", "zmb_door_slide_open" ); + add_sound( "door_rotate_open", "zmb_door_slide_open" ); + add_sound( "debris_move", "zmb_weap_wall" ); + add_sound( "open_chest", "zmb_lid_open" ); + add_sound( "music_chest", "zmb_music_box" ); + add_sound( "close_chest", "zmb_lid_close" ); + add_sound( "weapon_show", "zmb_weap_wall" ); + add_sound( "break_stone", "break_stone" ); +} + +init_levelvars() +{ + level.is_zombie_level = 1; + level.laststandpistol = "m1911_zm"; + level.default_laststandpistol = "m1911_zm"; + level.default_solo_laststandpistol = "m1911_upgraded_zm"; + level.start_weapon = "m1911_zm"; + level.first_round = 1; + level.start_round = getgametypesetting( "startRound" ); + level.round_number = level.start_round; + level.enable_magic = getgametypesetting( "magic" ); + level.headshots_only = getgametypesetting( "headshotsonly" ); + level.player_starting_points = level.round_number * 500; + level.round_start_time = 0; + level.pro_tips_start_time = 0; + level.intermission = 0; + level.dog_intermission = 0; + level.zombie_total = 0; + level.total_zombies_killed = 0; + level.hudelem_count = 0; + level.zombie_spawn_locations = []; + level.zombie_rise_spawners = []; + level.current_zombie_array = []; + level.current_zombie_count = 0; + level.zombie_total_subtract = 0; + level.destructible_callbacks = []; + level.zombie_vars = []; + + foreach ( team in level.teams ) + level.zombie_vars[team] = []; + + difficulty = 1; + column = int( difficulty ) + 1; + set_zombie_var( "zombie_health_increase", 100, 0, column ); + set_zombie_var( "zombie_health_increase_multiplier", 0.1, 1, column ); + set_zombie_var( "zombie_health_start", 150, 0, column ); + set_zombie_var( "zombie_spawn_delay", 2.0, 1, column ); + set_zombie_var( "zombie_new_runner_interval", 10, 0, column ); + set_zombie_var( "zombie_move_speed_multiplier", 8, 0, column ); + set_zombie_var( "zombie_move_speed_multiplier_easy", 2, 0, column ); + set_zombie_var( "zombie_max_ai", 24, 0, column ); + set_zombie_var( "zombie_ai_per_player", 6, 0, column ); + set_zombie_var( "below_world_check", -1000 ); + set_zombie_var( "spectators_respawn", 1 ); + set_zombie_var( "zombie_use_failsafe", 1 ); + set_zombie_var( "zombie_between_round_time", 10 ); + set_zombie_var( "zombie_intermission_time", 15 ); + set_zombie_var( "game_start_delay", 0, 0, column ); + set_zombie_var( "penalty_no_revive", 0.1, 1, column ); + set_zombie_var( "penalty_died", 0.0, 1, column ); + set_zombie_var( "penalty_downed", 0.05, 1, column ); + set_zombie_var( "starting_lives", 1, 0, column ); + set_zombie_var( "zombie_score_kill_4player", 50 ); + set_zombie_var( "zombie_score_kill_3player", 50 ); + set_zombie_var( "zombie_score_kill_2player", 50 ); + set_zombie_var( "zombie_score_kill_1player", 50 ); + set_zombie_var( "zombie_score_kill_4p_team", 30 ); + set_zombie_var( "zombie_score_kill_3p_team", 35 ); + set_zombie_var( "zombie_score_kill_2p_team", 45 ); + set_zombie_var( "zombie_score_kill_1p_team", 0 ); + set_zombie_var( "zombie_score_damage_normal", 10 ); + set_zombie_var( "zombie_score_damage_light", 10 ); + set_zombie_var( "zombie_score_bonus_melee", 80 ); + set_zombie_var( "zombie_score_bonus_head", 50 ); + set_zombie_var( "zombie_score_bonus_neck", 20 ); + set_zombie_var( "zombie_score_bonus_torso", 10 ); + set_zombie_var( "zombie_score_bonus_burn", 10 ); + set_zombie_var( "zombie_flame_dmg_point_delay", 500 ); + set_zombie_var( "zombify_player", 0 ); + + if ( issplitscreen() ) + set_zombie_var( "zombie_timer_offset", 280 ); + + level thread init_player_levelvars(); + level.gamedifficulty = getgametypesetting( "zmDifficulty" ); + + if ( level.gamedifficulty == 0 ) + level.zombie_move_speed = level.round_number * level.zombie_vars["zombie_move_speed_multiplier_easy"]; + else + level.zombie_move_speed = level.round_number * level.zombie_vars["zombie_move_speed_multiplier"]; + + if ( level.round_number == 1 ) + level.zombie_move_speed = 1; + else + { + for ( i = 1; i <= level.round_number; i++ ) + { + timer = level.zombie_vars["zombie_spawn_delay"]; + + if ( timer > 0.08 ) + { + level.zombie_vars["zombie_spawn_delay"] = timer * 0.95; + continue; + } + + if ( timer < 0.08 ) + level.zombie_vars["zombie_spawn_delay"] = 0.08; + } + } + + level.speed_change_max = 0; + level.speed_change_num = 0; +} + +init_player_levelvars() +{ + flag_wait( "start_zombie_round_logic" ); + difficulty = 1; + column = int( difficulty ) + 1; + + for ( i = 0; i < 8; i++ ) + { + points = 500; + + if ( i > 3 ) + points = 3000; + + points = set_zombie_var( "zombie_score_start_" + ( i + 1 ) + "p", points, 0, column ); + } +} + +init_dvars() +{ + if ( getdvar( "zombie_debug" ) == "" ) + setdvar( "zombie_debug", "0" ); + + if ( getdvar( "scr_zm_enable_bots" ) == "" ) + setdvar( "scr_zm_enable_bots", "0" ); + + if ( getdvar( _hash_FA81816F ) == "" ) + setdvar( "zombie_cheat", "0" ); + + if ( level.script != "zombie_cod5_prototype" ) + setdvar( "magic_chest_movable", "1" ); + + setdvar( "revive_trigger_radius", "75" ); + setdvar( "player_lastStandBleedoutTime", "45" ); + setdvar( "scr_deleteexplosivesonspawn", "0" ); +} + +init_function_overrides() +{ + level.callbackplayerdamage = ::callback_playerdamage; + level.overrideplayerdamage = ::player_damage_override; + level.callbackplayerkilled = ::player_killed_override; + level.playerlaststand_func = ::player_laststand; + level.callbackplayerlaststand = ::callback_playerlaststand; + level.prevent_player_damage = ::player_prevent_damage; + level.callbackactorkilled = ::actor_killed_override; + level.callbackactordamage = ::actor_damage_override_wrapper; + level.custom_introscreen = ::zombie_intro_screen; + level.custom_intermission = ::player_intermission; + level.global_damage_func = maps\mp\zombies\_zm_spawner::zombie_damage; + level.global_damage_func_ads = maps\mp\zombies\_zm_spawner::zombie_damage_ads; + level.reset_clientdvars = ::onplayerconnect_clientdvars; + level.zombie_last_stand = ::last_stand_pistol_swap; + level.zombie_last_stand_pistol_memory = ::last_stand_save_pistol_ammo; + level.zombie_last_stand_ammo_return = ::last_stand_restore_pistol_ammo; + level.player_becomes_zombie = ::zombify_player; + level.validate_enemy_path_length = ::default_validate_enemy_path_length; +} + +callback_playerlaststand( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + self endon( "disconnect" ); + [[ maps\mp\zombies\_zm_laststand::playerlaststand ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); +} + +codecallback_destructibleevent( event, param1, param2, param3 ) +{ + if ( event == "broken" ) + { + notify_type = param1; + attacker = param2; + weapon = param3; + + if ( isdefined( level.destructible_callbacks[notify_type] ) ) + self thread [[ level.destructible_callbacks[notify_type] ]]( notify_type, attacker ); + + self notify( event, notify_type, attacker ); + } + else if ( event == "breakafter" ) + { + piece = param1; + time = param2; + damage = param3; + self thread breakafter( time, damage, piece ); + } +} + +breakafter( time, damage, piece ) +{ + self notify( "breakafter" ); + self endon( "breakafter" ); + wait( time ); + self dodamage( damage, self.origin, undefined, undefined ); +} + +callback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ +/# + println( "ZM Callback_PlayerDamage" + idamage + "\\n" ); +#/ + if ( isdefined( eattacker ) && isplayer( eattacker ) && eattacker.sessionteam == self.sessionteam && !eattacker hasperk( "specialty_noname" ) && !( isdefined( self.is_zombie ) && self.is_zombie ) ) + { + self process_friendly_fire_callbacks( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + + if ( self != eattacker ) + { +/# + println( "Exiting - players can't hurt each other." ); +#/ + return; + } + else if ( smeansofdeath != "MOD_GRENADE_SPLASH" && smeansofdeath != "MOD_GRENADE" && smeansofdeath != "MOD_EXPLOSIVE" && smeansofdeath != "MOD_PROJECTILE" && smeansofdeath != "MOD_PROJECTILE_SPLASH" && smeansofdeath != "MOD_BURNED" && smeansofdeath != "MOD_SUICIDE" ) + { +/# + println( "Exiting - damage type verbotten." ); +#/ + return; + } + } + + if ( isdefined( level.pers_upgrade_insta_kill ) && level.pers_upgrade_insta_kill ) + self maps\mp\zombies\_zm_pers_upgrades_functions::pers_insta_kill_melee_swipe( smeansofdeath, eattacker ); + + if ( isdefined( self.overrideplayerdamage ) ) + idamage = self [[ self.overrideplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); + else if ( isdefined( level.overrideplayerdamage ) ) + idamage = self [[ level.overrideplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); + + assert( isdefined( idamage ), "You must return a value from a damage override function." ); + + if ( isdefined( self.magic_bullet_shield ) && self.magic_bullet_shield ) + { + maxhealth = self.maxhealth; + self.health += idamage; + self.maxhealth = maxhealth; + } + + if ( isdefined( self.divetoprone ) && self.divetoprone == 1 ) + { + if ( smeansofdeath == "MOD_GRENADE_SPLASH" ) + { + dist = distance2d( vpoint, self.origin ); + + if ( dist > 32 ) + { + dot_product = vectordot( anglestoforward( self.angles ), vdir ); + + if ( dot_product > 0 ) + idamage = int( idamage * 0.5 ); + } + } + } +/# + println( "CB PD" ); +#/ + if ( isdefined( level.prevent_player_damage ) ) + { + if ( self [[ level.prevent_player_damage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) ) + return; + } + + idflags |= level.idflags_no_knockback; + + if ( idamage > 0 && shitloc == "riotshield" ) + shitloc = "torso_upper"; +/# + println( "Finishplayerdamage wrapper." ); +#/ + self finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); +} + +finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + self finishplayerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); +} + +register_player_friendly_fire_callback( callback ) +{ + if ( !isdefined( level.player_friendly_fire_callbacks ) ) + level.player_friendly_fire_callbacks = []; + + level.player_friendly_fire_callbacks[level.player_friendly_fire_callbacks.size] = callback; +} + +process_friendly_fire_callbacks( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + if ( isdefined( level.player_friendly_fire_callbacks ) ) + { + foreach ( callback in level.player_friendly_fire_callbacks ) + self [[ callback ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + } +} + +init_flags() +{ + flag_init( "solo_game" ); + flag_init( "start_zombie_round_logic" ); + flag_init( "start_encounters_match_logic" ); + flag_init( "spawn_point_override" ); + flag_init( "power_on" ); + flag_init( "crawler_round" ); + flag_init( "spawn_zombies", 1 ); + flag_init( "dog_round" ); + flag_init( "begin_spawning" ); + flag_init( "end_round_wait" ); + flag_init( "wait_and_revive" ); + flag_init( "instant_revive" ); + flag_init( "initial_blackscreen_passed" ); + flag_init( "initial_players_connected" ); +} + +init_client_flags() +{ + if ( isdefined( level.use_clientside_board_fx ) && level.use_clientside_board_fx ) + { + level._zombie_scriptmover_flag_board_horizontal_fx = 14; + level._zombie_scriptmover_flag_board_vertical_fx = 13; + } + + if ( isdefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) + level._zombie_scriptmover_flag_rock_fx = 12; + + level._zombie_player_flag_cloak_weapon = 14; + + if ( !( isdefined( level.disable_deadshot_clientfield ) && level.disable_deadshot_clientfield ) ) + registerclientfield( "toplayer", "deadshot_perk", 1, 1, "int" ); + + registerclientfield( "actor", "zombie_riser_fx", 1, 1, "int" ); + + if ( !( isdefined( level._no_water_risers ) && level._no_water_risers ) ) + registerclientfield( "actor", "zombie_riser_fx_water", 1, 1, "int" ); + + if ( isdefined( level._foliage_risers ) && level._foliage_risers ) + registerclientfield( "actor", "zombie_riser_fx_foliage", 12000, 1, "int" ); + + if ( isdefined( level.risers_use_low_gravity_fx ) && level.risers_use_low_gravity_fx ) + registerclientfield( "actor", "zombie_riser_fx_lowg", 1, 1, "int" ); +} + +init_fx() +{ + level.createfx_callback_thread = ::delete_in_createfx; + level._effect["wood_chunk_destory"] = loadfx( "impacts/fx_large_woodhit" ); + level._effect["fx_zombie_bar_break"] = loadfx( "maps/zombie/fx_zombie_bar_break" ); + level._effect["fx_zombie_bar_break_lite"] = loadfx( "maps/zombie/fx_zombie_bar_break_lite" ); + + if ( !( isdefined( level.fx_exclude_edge_fog ) && level.fx_exclude_edge_fog ) ) + level._effect["edge_fog"] = loadfx( "maps/zombie/fx_fog_zombie_amb" ); + + level._effect["chest_light"] = loadfx( "maps/zombie/fx_zmb_tranzit_marker_glow" ); + + if ( !( isdefined( level.fx_exclude_default_eye_glow ) && level.fx_exclude_default_eye_glow ) ) + level._effect["eye_glow"] = loadfx( "misc/fx_zombie_eye_single" ); + + level._effect["headshot"] = loadfx( "impacts/fx_flesh_hit" ); + level._effect["headshot_nochunks"] = loadfx( "misc/fx_zombie_bloodsplat" ); + level._effect["bloodspurt"] = loadfx( "misc/fx_zombie_bloodspurt" ); + + if ( !( isdefined( level.fx_exclude_tesla_head_light ) && level.fx_exclude_tesla_head_light ) ) + level._effect["tesla_head_light"] = loadfx( "maps/zombie/fx_zombie_tesla_neck_spurt" ); + + level._effect["zombie_guts_explosion"] = loadfx( "maps/zombie/fx_zmb_tranzit_torso_explo" ); + level._effect["rise_burst_water"] = loadfx( "maps/zombie/fx_mp_zombie_hand_dirt_burst" ); + level._effect["rise_billow_water"] = loadfx( "maps/zombie/fx_mp_zombie_body_dirt_billowing" ); + level._effect["rise_dust_water"] = loadfx( "maps/zombie/fx_mp_zombie_body_dust_falling" ); + level._effect["rise_burst"] = loadfx( "maps/zombie/fx_mp_zombie_hand_dirt_burst" ); + level._effect["rise_billow"] = loadfx( "maps/zombie/fx_mp_zombie_body_dirt_billowing" ); + level._effect["rise_dust"] = loadfx( "maps/zombie/fx_mp_zombie_body_dust_falling" ); + level._effect["fall_burst"] = loadfx( "maps/zombie/fx_mp_zombie_hand_dirt_burst" ); + level._effect["fall_billow"] = loadfx( "maps/zombie/fx_mp_zombie_body_dirt_billowing" ); + level._effect["fall_dust"] = loadfx( "maps/zombie/fx_mp_zombie_body_dust_falling" ); + level._effect["character_fire_death_sm"] = loadfx( "env/fire/fx_fire_zombie_md" ); + level._effect["character_fire_death_torso"] = loadfx( "env/fire/fx_fire_zombie_torso" ); + + if ( !( isdefined( level.fx_exclude_default_explosion ) && level.fx_exclude_default_explosion ) ) + level._effect["def_explosion"] = loadfx( "explosions/fx_default_explosion" ); + + if ( !( isdefined( level._uses_default_wallbuy_fx ) && !level._uses_default_wallbuy_fx ) ) + { + level._effect["870mcs_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_870mcs" ); + level._effect["ak74u_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_ak74u" ); + level._effect["beretta93r_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_berreta93r" ); + level._effect["bowie_knife_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_bowie" ); + level._effect["claymore_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_claymore" ); + level._effect["m14_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_m14" ); + level._effect["m16_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_m16" ); + level._effect["mp5k_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_mp5k" ); + level._effect["rottweil72_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_olympia" ); + } + + if ( !( isdefined( level._uses_sticky_grenades ) && !level._uses_sticky_grenades ) ) + { + if ( !( isdefined( level.disable_fx_zmb_wall_buy_semtex ) && level.disable_fx_zmb_wall_buy_semtex ) ) + level._effect["sticky_grenade_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_semtex" ); + } + + if ( !( isdefined( level._uses_taser_knuckles ) && !level._uses_taser_knuckles ) ) + level._effect["tazer_knuckles_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_taseknuck" ); + + if ( isdefined( level.buildable_wallbuy_weapons ) ) + level._effect["dynamic_wallbuy_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_question" ); + + if ( !( isdefined( level.disable_fx_upgrade_aquired ) && level.disable_fx_upgrade_aquired ) ) + level._effect["upgrade_aquired"] = loadfx( "maps/zombie/fx_zmb_tanzit_upgrade" ); +} + +zombie_intro_screen( string1, string2, string3, string4, string5 ) +{ + flag_wait( "start_zombie_round_logic" ); +} + +players_playing() +{ + players = get_players(); + level.players_playing = players.size; + wait 20; + players = get_players(); + level.players_playing = players.size; +} + +onplayerconnect_clientdvars() +{ + self setclientcompass( 0 ); + self setclientthirdperson( 0 ); + self resetfov(); + self setclientthirdpersonangle( 0 ); + self setclientammocounterhide( 1 ); + self setclientminiscoreboardhide( 1 ); + self setclienthudhardcore( 0 ); + self setclientplayerpushamount( 1 ); + self setdepthoffield( 0, 0, 512, 4000, 4, 0 ); + self setclientaimlockonpitchstrength( 0.0 ); + self maps\mp\zombies\_zm_laststand::player_getup_setup(); +} + +checkforalldead( excluded_player ) +{ + players = get_players(); + count = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( excluded_player ) && excluded_player == players[i] ) + continue; + + if ( !players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( players[i].sessionstate == "spectator" ) ) + count++; + } + + if ( count == 0 && !( isdefined( level.no_end_game_check ) && level.no_end_game_check ) ) + level notify( "end_game" ); +} + +onplayerspawned() +{ + self endon( "disconnect" ); + self notify( "stop_onPlayerSpawned" ); + self endon( "stop_onPlayerSpawned" ); + + for (;;) + { + self waittill( "spawned_player" ); + + if ( !( isdefined( level.host_ended_game ) && level.host_ended_game ) ) + { + self freezecontrols( 0 ); +/# + println( " Unfreeze controls 7" ); +#/ + } + + self.hits = 0; + self init_player_offhand_weapons(); + lethal_grenade = self get_player_lethal_grenade(); + + if ( !self hasweapon( lethal_grenade ) ) + { + self giveweapon( lethal_grenade ); + self setweaponammoclip( lethal_grenade, 0 ); + } + + self recordplayerrevivezombies( self ); +/# + if ( getdvarint( _hash_FA81816F ) >= 1 && getdvarint( _hash_FA81816F ) <= 3 ) + self enableinvulnerability(); +#/ + self setactionslot( 3, "altMode" ); + self playerknockback( 0 ); + self setclientthirdperson( 0 ); + self resetfov(); + self setclientthirdpersonangle( 0 ); + self setdepthoffield( 0, 0, 512, 4000, 4, 0 ); + self cameraactivate( 0 ); + self.num_perks = 0; + self.on_lander_last_stand = undefined; + self setblur( 0, 0.1 ); + self.zmbdialogqueue = []; + self.zmbdialogactive = 0; + self.zmbdialoggroups = []; + self.zmbdialoggroup = ""; + + if ( isdefined( level.player_out_of_playable_area_monitor ) && level.player_out_of_playable_area_monitor ) + self thread player_out_of_playable_area_monitor(); + + if ( isdefined( level.player_too_many_weapons_monitor ) && level.player_too_many_weapons_monitor ) + self thread [[ level.player_too_many_weapons_monitor_func ]](); + + if ( isdefined( level.player_too_many_players_check ) && level.player_too_many_players_check ) + level thread [[ level.player_too_many_players_check_func ]](); + + self.disabled_perks = []; + + if ( isdefined( self.player_initialized ) ) + { + if ( self.player_initialized == 0 ) + { + self.player_initialized = 1; + self giveweapon( self get_player_lethal_grenade() ); + self setweaponammoclip( self get_player_lethal_grenade(), 0 ); + self setclientammocounterhide( 0 ); + self setclientminiscoreboardhide( 0 ); + self.is_drinking = 0; + self thread player_zombie_breadcrumb(); + self thread player_monitor_travel_dist(); + self thread player_monitor_time_played(); + + if ( isdefined( level.custom_player_track_ammo_count ) ) + self thread [[ level.custom_player_track_ammo_count ]](); + else + self thread player_track_ammo_count(); + + self thread shock_onpain(); + self thread player_grenade_watcher(); + self maps\mp\zombies\_zm_laststand::revive_hud_create(); + + if ( isdefined( level.zm_gamemodule_spawn_func ) ) + self thread [[ level.zm_gamemodule_spawn_func ]](); + + self thread player_spawn_protection(); + + if ( !isdefined( self.lives ) ) + self.lives = 0; + } + } + } +} + +player_spawn_protection() +{ + self endon( "disconnect" ); + x = 0; + + while ( x < 60 ) + { + self.ignoreme = 1; + x++; + wait 0.05; + } + + self.ignoreme = 0; +} + +spawn_life_brush( origin, radius, height ) +{ + life_brush = spawn( "trigger_radius", origin, 0, radius, height ); + life_brush.script_noteworthy = "life_brush"; + return life_brush; +} + +in_life_brush() +{ + life_brushes = getentarray( "life_brush", "script_noteworthy" ); + + if ( !isdefined( life_brushes ) ) + return false; + + for ( i = 0; i < life_brushes.size; i++ ) + { + if ( self istouching( life_brushes[i] ) ) + return true; + } + + return false; +} + +spawn_kill_brush( origin, radius, height ) +{ + kill_brush = spawn( "trigger_radius", origin, 0, radius, height ); + kill_brush.script_noteworthy = "kill_brush"; + return kill_brush; +} + +in_kill_brush() +{ + kill_brushes = getentarray( "kill_brush", "script_noteworthy" ); + + if ( !isdefined( kill_brushes ) ) + return false; + + for ( i = 0; i < kill_brushes.size; i++ ) + { + if ( self istouching( kill_brushes[i] ) ) + return true; + } + + return false; +} + +in_enabled_playable_area() +{ + playable_area = getentarray( "player_volume", "script_noteworthy" ); + + if ( !isdefined( playable_area ) ) + return false; + + for ( i = 0; i < playable_area.size; i++ ) + { + if ( maps\mp\zombies\_zm_zonemgr::zone_is_enabled( playable_area[i].targetname ) && self istouching( playable_area[i] ) ) + return true; + } + + return false; +} + +get_player_out_of_playable_area_monitor_wait_time() +{ +/# + if ( isdefined( level.check_kill_thread_every_frame ) && level.check_kill_thread_every_frame ) + return 0.05; +#/ + return 3; +} + +player_out_of_playable_area_monitor() +{ + self notify( "stop_player_out_of_playable_area_monitor" ); + self endon( "stop_player_out_of_playable_area_monitor" ); + self endon( "disconnect" ); + level endon( "end_game" ); + + while ( !isdefined( self.characterindex ) ) + wait 0.05; + + wait( 0.15 * self.characterindex ); + + while ( true ) + { + if ( self.sessionstate == "spectator" ) + { + wait( get_player_out_of_playable_area_monitor_wait_time() ); + continue; + } + + if ( is_true( level.hostmigration_occured ) ) + { + wait( get_player_out_of_playable_area_monitor_wait_time() ); + continue; + } + + if ( !self in_life_brush() && ( self in_kill_brush() || !self in_enabled_playable_area() ) ) + { + if ( !isdefined( level.player_out_of_playable_area_monitor_callback ) || self [[ level.player_out_of_playable_area_monitor_callback ]]() ) + { +/# + if ( isdefined( level.kill_thread_test_mode ) && level.kill_thread_test_mode ) + { + iprintlnbold( "out of playable" ); + wait( get_player_out_of_playable_area_monitor_wait_time() ); + continue; + } + + if ( self isinmovemode( "ufo", "noclip" ) || isdefined( level.disable_kill_thread ) && level.disable_kill_thread || getdvarint( _hash_FA81816F ) > 0 ) + { + wait( get_player_out_of_playable_area_monitor_wait_time() ); + continue; + } +#/ + self maps\mp\zombies\_zm_stats::increment_map_cheat_stat( "cheat_out_of_playable" ); + self maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_out_of_playable", 0 ); + self maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); + self playlocalsound( level.zmb_laugh_alias ); + wait 0.5; + + if ( get_players().size == 1 && flag( "solo_game" ) && ( isdefined( self.waiting_to_revive ) && self.waiting_to_revive ) ) + level notify( "end_game" ); + else + { + self disableinvulnerability(); + self.lives = 0; + self dodamage( self.health + 1000, self.origin ); + self.bleedout_time = 0; + } + } + } + + wait( get_player_out_of_playable_area_monitor_wait_time() ); + } +} + +get_player_too_many_weapons_monitor_wait_time() +{ + return 3; +} + +player_too_many_weapons_monitor_takeaway_simultaneous( primary_weapons_to_take ) +{ + self endon( "player_too_many_weapons_monitor_takeaway_sequence_done" ); + self waittill_any( "player_downed", "replace_weapon_powerup" ); + + for ( i = 0; i < primary_weapons_to_take.size; i++ ) + self takeweapon( primary_weapons_to_take[i] ); + + self maps\mp\zombies\_zm_score::minus_to_player_score( self.score ); + self give_start_weapon( 0 ); + + if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + self decrement_is_drinking(); + else if ( flag( "solo_game" ) ) + self.score_lost_when_downed = 0; + + self notify( "player_too_many_weapons_monitor_takeaway_sequence_done" ); +} + +player_too_many_weapons_monitor_takeaway_sequence( primary_weapons_to_take ) +{ + self thread player_too_many_weapons_monitor_takeaway_simultaneous( primary_weapons_to_take ); + self endon( "player_downed" ); + self endon( "replace_weapon_powerup" ); + self increment_is_drinking(); + score_decrement = round_up_to_ten( int( self.score / ( primary_weapons_to_take.size + 1 ) ) ); + + for ( i = 0; i < primary_weapons_to_take.size; i++ ) + { + self playlocalsound( level.zmb_laugh_alias ); + self switchtoweapon( primary_weapons_to_take[i] ); + self maps\mp\zombies\_zm_score::minus_to_player_score( score_decrement ); + wait 3; + self takeweapon( primary_weapons_to_take[i] ); + } + + self playlocalsound( level.zmb_laugh_alias ); + self maps\mp\zombies\_zm_score::minus_to_player_score( self.score ); + wait 1; + self give_start_weapon( 1 ); + self decrement_is_drinking(); + self notify( "player_too_many_weapons_monitor_takeaway_sequence_done" ); +} + +player_too_many_weapons_monitor() +{ + self notify( "stop_player_too_many_weapons_monitor" ); + self endon( "stop_player_too_many_weapons_monitor" ); + self endon( "disconnect" ); + level endon( "end_game" ); + scalar = self.characterindex; + + if ( !isdefined( scalar ) ) + scalar = self getentitynumber(); + + wait( 0.15 * scalar ); + + while ( true ) + { + if ( self has_powerup_weapon() || self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || self.sessionstate == "spectator" ) + { + wait( get_player_too_many_weapons_monitor_wait_time() ); + continue; + } +/# + if ( getdvarint( _hash_FA81816F ) > 0 ) + { + wait( get_player_too_many_weapons_monitor_wait_time() ); + continue; + } +#/ + weapon_limit = get_player_weapon_limit( self ); + primaryweapons = self getweaponslistprimaries(); + + if ( primaryweapons.size > weapon_limit ) + { + self maps\mp\zombies\_zm_weapons::take_fallback_weapon(); + primaryweapons = self getweaponslistprimaries(); + } + + primary_weapons_to_take = []; + + for ( i = 0; i < primaryweapons.size; i++ ) + { + if ( maps\mp\zombies\_zm_weapons::is_weapon_included( primaryweapons[i] ) || maps\mp\zombies\_zm_weapons::is_weapon_upgraded( primaryweapons[i] ) ) + primary_weapons_to_take[primary_weapons_to_take.size] = primaryweapons[i]; + } + + if ( primary_weapons_to_take.size > weapon_limit ) + { + if ( !isdefined( level.player_too_many_weapons_monitor_callback ) || self [[ level.player_too_many_weapons_monitor_callback ]]( primary_weapons_to_take ) ) + { + self maps\mp\zombies\_zm_stats::increment_map_cheat_stat( "cheat_too_many_weapons" ); + self maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_too_many_weapons", 0 ); + self maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); + self thread player_too_many_weapons_monitor_takeaway_sequence( primary_weapons_to_take ); + + self waittill( "player_too_many_weapons_monitor_takeaway_sequence_done" ); + } + } + + wait( get_player_too_many_weapons_monitor_wait_time() ); + } +} + +player_monitor_travel_dist() +{ + self endon( "disconnect" ); + self notify( "stop_player_monitor_travel_dist" ); + self endon( "stop_player_monitor_travel_dist" ); + + for ( prevpos = self.origin; 1; prevpos = self.origin ) + { + wait 0.1; + self.pers["distance_traveled"] += distance( self.origin, prevpos ); + } +} + +player_monitor_time_played() +{ + self endon( "disconnect" ); + self notify( "stop_player_monitor_time_played" ); + self endon( "stop_player_monitor_time_played" ); + flag_wait( "start_zombie_round_logic" ); + + for (;;) + { + wait 1.0; + maps\mp\zombies\_zm_stats::increment_client_stat( "time_played_total" ); + } +} + +reset_rampage_bookmark_kill_times() +{ + if ( !isdefined( self.rampage_bookmark_kill_times ) ) + { + self.rampage_bookmark_kill_times = []; + self.ignore_rampage_kill_times = 0; + } + + for ( i = 0; i < level.rampage_bookmark_kill_times_count; i++ ) + self.rampage_bookmark_kill_times[i] = 0; +} + +add_rampage_bookmark_kill_time() +{ + now = gettime(); + + if ( now <= self.ignore_rampage_kill_times ) + return; + + oldest_index = 0; + oldest_time = now + 1; + + for ( i = 0; i < level.rampage_bookmark_kill_times_count; i++ ) + { + if ( !self.rampage_bookmark_kill_times[i] ) + { + oldest_index = i; + break; + } + else if ( oldest_time > self.rampage_bookmark_kill_times[i] ) + { + oldest_index = i; + oldest_time = self.rampage_bookmark_kill_times[i]; + } + } + + self.rampage_bookmark_kill_times[oldest_index] = now; +} + +watch_rampage_bookmark() +{ + while ( true ) + { + wait 0.05; + waittillframeend; + now = gettime(); + oldest_allowed = now - level.rampage_bookmark_kill_times_msec; + players = get_players(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + { + player = players[player_index]; +/# + if ( isdefined( player.pers["isBot"] ) && player.pers["isBot"] ) + continue; +#/ + for ( time_index = 0; time_index < level.rampage_bookmark_kill_times_count; time_index++ ) + { + if ( !player.rampage_bookmark_kill_times[time_index] ) + break; + else if ( oldest_allowed > player.rampage_bookmark_kill_times[time_index] ) + { + player.rampage_bookmark_kill_times[time_index] = 0; + break; + } + } + + if ( time_index >= level.rampage_bookmark_kill_times_count ) + { + maps\mp\_demo::bookmark( "zm_player_rampage", gettime(), player ); + player reset_rampage_bookmark_kill_times(); + player.ignore_rampage_kill_times = now + level.rampage_bookmark_kill_times_delay; + } + } + } +} + +player_grenade_multiattack_bookmark_watcher( grenade ) +{ + self endon( "disconnect" ); + waittillframeend; + + if ( !isdefined( grenade ) ) + return; + + inflictorentnum = grenade getentitynumber(); + inflictorenttype = grenade getentitytype(); + inflictorbirthtime = 0; + + if ( isdefined( grenade.birthtime ) ) + inflictorbirthtime = grenade.birthtime; + + ret_val = grenade waittill_any_timeout( 15, "explode" ); + + if ( !isdefined( self ) || isdefined( ret_val ) && "timeout" == ret_val ) + return; + + self.grenade_multiattack_count = 0; + self.grenade_multiattack_ent = undefined; + waittillframeend; + + if ( !isdefined( self ) ) + return; + + count = level.grenade_multiattack_bookmark_count; + + if ( isdefined( grenade.grenade_multiattack_bookmark_count ) && grenade.grenade_multiattack_bookmark_count ) + count = grenade.grenade_multiattack_bookmark_count; + + bookmark_string = "zm_player_grenade_multiattack"; + + if ( isdefined( grenade.use_grenade_special_long_bookmark ) && grenade.use_grenade_special_long_bookmark ) + bookmark_string = "zm_player_grenade_special_long"; + else if ( isdefined( grenade.use_grenade_special_bookmark ) && grenade.use_grenade_special_bookmark ) + bookmark_string = "zm_player_grenade_special"; + + if ( count <= self.grenade_multiattack_count && isdefined( self.grenade_multiattack_ent ) ) + adddemobookmark( level.bookmark[bookmark_string], gettime(), self getentitynumber(), 255, 0, inflictorentnum, inflictorenttype, inflictorbirthtime, 0, self.grenade_multiattack_ent getentitynumber() ); + + self.grenade_multiattack_count = 0; +} + +player_grenade_watcher() +{ + self endon( "disconnect" ); + self notify( "stop_player_grenade_watcher" ); + self endon( "stop_player_grenade_watcher" ); + self.grenade_multiattack_count = 0; + + while ( true ) + { + self waittill( "grenade_fire", grenade, weapname ); + + if ( isdefined( grenade ) && isalive( grenade ) ) + grenade.team = self.team; + + self thread player_grenade_multiattack_bookmark_watcher( grenade ); + + if ( isdefined( level.grenade_watcher ) ) + self [[ level.grenade_watcher ]]( grenade, weapname ); + } +} + +player_prevent_damage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + if ( !isdefined( einflictor ) || !isdefined( eattacker ) ) + return false; + + if ( einflictor == self || eattacker == self ) + return false; + + if ( isdefined( einflictor ) && isdefined( einflictor.team ) ) + { + if ( !( isdefined( einflictor.damage_own_team ) && einflictor.damage_own_team ) ) + { + if ( einflictor.team == self.team ) + return true; + } + } + + return false; +} + +player_revive_monitor() +{ + self endon( "disconnect" ); + self notify( "stop_player_revive_monitor" ); + self endon( "stop_player_revive_monitor" ); + + while ( true ) + { + self waittill( "player_revived", reviver ); + + self playsoundtoplayer( "zmb_character_revived", self ); + + if ( isdefined( level.isresetting_grief ) && level.isresetting_grief ) + continue; + + bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "revived", self.origin ); + + if ( isdefined( reviver ) ) + { + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "revive_up" ); + points = self.score_lost_when_downed; +/# + println( "ZM >> LAST STAND - points = " + points ); +#/ + reviver maps\mp\zombies\_zm_score::player_add_points( "reviver", points ); + self.score_lost_when_downed = 0; + } + } +} + +laststand_giveback_player_perks() +{ + if ( isdefined( self.laststand_perks ) ) + { + lost_perk_index = int( -1 ); + + if ( self.laststand_perks.size > 1 ) + lost_perk_index = randomint( self.laststand_perks.size - 1 ); + + for ( i = 0; i < self.laststand_perks.size; i++ ) + { + if ( self hasperk( self.laststand_perks[i] ) ) + continue; + + if ( i == lost_perk_index ) + continue; + + maps\mp\zombies\_zm_perks::give_perk( self.laststand_perks[i] ); + } + } +} + +remote_revive_watch() +{ + self endon( "death" ); + self endon( "player_revived" ); + keep_checking = 1; + + while ( keep_checking ) + { + self waittill( "remote_revive", reviver ); + + if ( reviver.team == self.team ) + keep_checking = 0; + } + + self maps\mp\zombies\_zm_laststand::remote_revive( reviver ); +} + +remove_deadshot_bottle() +{ + wait 0.05; + + if ( isdefined( self.lastactiveweapon ) && self.lastactiveweapon == "zombie_perk_bottle_deadshot" ) + self.lastactiveweapon = "none"; +} + +take_additionalprimaryweapon() +{ + weapon_to_take = undefined; + + if ( isdefined( self._retain_perks ) && self._retain_perks || isdefined( self._retain_perks_array ) && ( isdefined( self._retain_perks_array["specialty_additionalprimaryweapon"] ) && self._retain_perks_array["specialty_additionalprimaryweapon"] ) ) + return weapon_to_take; + + primary_weapons_that_can_be_taken = []; + primaryweapons = self getweaponslistprimaries(); + + for ( i = 0; i < primaryweapons.size; i++ ) + { + if ( maps\mp\zombies\_zm_weapons::is_weapon_included( primaryweapons[i] ) || maps\mp\zombies\_zm_weapons::is_weapon_upgraded( primaryweapons[i] ) ) + primary_weapons_that_can_be_taken[primary_weapons_that_can_be_taken.size] = primaryweapons[i]; + } + + pwtcbt = primary_weapons_that_can_be_taken.size; + + while ( pwtcbt >= 3 ) + { + weapon_to_take = primary_weapons_that_can_be_taken[pwtcbt - 1]; + pwtcbt--; + + if ( weapon_to_take == self getcurrentweapon() ) + self switchtoweapon( primary_weapons_that_can_be_taken[0] ); + + self takeweapon( weapon_to_take ); + } + + return weapon_to_take; +} + +player_laststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ +/# + println( "ZM >> LAST STAND - player_laststand called" ); +#/ + b_alt_visionset = 0; + self allowjump( 0 ); + currweapon = self getcurrentweapon(); + statweapon = currweapon; + + if ( is_alt_weapon( statweapon ) ) + statweapon = weaponaltweaponname( statweapon ); + + self addweaponstat( statweapon, "deathsDuringUse", 1 ); + + if ( isdefined( self.hasperkspecialtytombstone ) && self.hasperkspecialtytombstone ) + self.laststand_perks = maps\mp\zombies\_zm_tombstone::tombstone_save_perks( self ); + + if ( isdefined( self.pers_upgrades_awarded["perk_lose"] ) && self.pers_upgrades_awarded["perk_lose"] ) + self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_perk_lose_save(); + + players = get_players(); + + if ( players.size == 1 && flag( "solo_game" ) ) + { + if ( self.lives > 0 && self hasperk( "specialty_quickrevive" ) ) + self thread wait_and_revive(); + } + + if ( self hasperk( "specialty_additionalprimaryweapon" ) ) + self.weapon_taken_by_losing_specialty_additionalprimaryweapon = take_additionalprimaryweapon(); + + if ( isdefined( self.hasperkspecialtytombstone ) && self.hasperkspecialtytombstone ) + { + self [[ level.tombstone_laststand_func ]](); + self thread [[ level.tombstone_spawn_func ]](); + self.hasperkspecialtytombstone = undefined; + self notify( "specialty_scavenger_stop" ); + } + + self clear_is_drinking(); + self thread remove_deadshot_bottle(); + self thread remote_revive_watch(); + self maps\mp\zombies\_zm_score::player_downed_penalty(); + self disableoffhandweapons(); + self thread last_stand_grenade_save_and_return(); + + if ( smeansofdeath != "MOD_SUICIDE" && smeansofdeath != "MOD_FALLING" ) + { + if ( !( isdefined( self.intermission ) && self.intermission ) ) + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "revive_down" ); + else if ( isdefined( level.custom_player_death_vo_func ) && !self [[ level.custom_player_death_vo_func ]]() ) + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "exert_death" ); + } + + bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "downed", self.origin ); + + if ( isdefined( level._zombie_minigun_powerup_last_stand_func ) ) + self thread [[ level._zombie_minigun_powerup_last_stand_func ]](); + + if ( isdefined( level._zombie_tesla_powerup_last_stand_func ) ) + self thread [[ level._zombie_tesla_powerup_last_stand_func ]](); + + if ( self hasperk( "specialty_grenadepulldeath" ) ) + { + b_alt_visionset = 1; + + if ( isdefined( level.custom_laststand_func ) ) + self thread [[ level.custom_laststand_func ]](); + } + + if ( isdefined( self.intermission ) && self.intermission ) + { + bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "died", self.origin ); + wait 0.5; + self stopsounds(); + + level waittill( "forever" ); + } + + if ( !b_alt_visionset ) + visionsetlaststand( "zombie_last_stand", 1 ); +} + +failsafe_revive_give_back_weapons( excluded_player ) +{ + for ( i = 0; i < 10; i++ ) + { + wait 0.05; + players = get_players(); + + foreach ( player in players ) + { + if ( player == excluded_player || !isdefined( player.reviveprogressbar ) || player maps\mp\zombies\_zm_laststand::is_reviving_any() ) + continue; +/# + iprintlnbold( "FAILSAFE CLEANING UP REVIVE HUD AND GUN" ); +#/ + player maps\mp\zombies\_zm_laststand::revive_give_back_weapons( "none" ); + + if ( isdefined( player.reviveprogressbar ) ) + player.reviveprogressbar maps\mp\gametypes_zm\_hud_util::destroyelem(); + + if ( isdefined( player.revivetexthud ) ) + player.revivetexthud destroy(); + } + } +} + +spawnspectator() +{ + self endon( "disconnect" ); + self endon( "spawned_spectator" ); + self notify( "spawned" ); + self notify( "end_respawn" ); + + if ( level.intermission ) + return; + + if ( isdefined( level.no_spectator ) && level.no_spectator ) + { + wait 3; + exitlevel(); + } + + self.is_zombie = 1; + level thread failsafe_revive_give_back_weapons( self ); + self notify( "zombified" ); + + if ( isdefined( self.revivetrigger ) ) + { + self.revivetrigger delete(); + self.revivetrigger = undefined; + } + + self.zombification_time = gettime(); + resettimeout(); + self stopshellshock(); + self stoprumble( "damage_heavy" ); + self.sessionstate = "spectator"; + self.spectatorclient = -1; + self.maxhealth = self.health; + self.shellshocked = 0; + self.inwater = 0; + self.friendlydamage = undefined; + self.hasspawned = 1; + self.spawntime = gettime(); + self.afk = 0; +/# + println( "*************************Zombie Spectator***" ); +#/ + self detachall(); + + if ( isdefined( level.custom_spectate_permissions ) ) + self [[ level.custom_spectate_permissions ]](); + else + self setspectatepermissions( 1 ); + + self thread spectator_thread(); + self spawn( self.origin, self.angles ); + self notify( "spawned_spectator" ); +} + +setspectatepermissions( ison ) +{ + self allowspectateteam( "allies", ison && self.team == "allies" ); + self allowspectateteam( "axis", ison && self.team == "axis" ); + self allowspectateteam( "freelook", 0 ); + self allowspectateteam( "none", 0 ); +} + +spectator_thread() +{ + self endon( "disconnect" ); + self endon( "spawned_player" ); +} + +spectator_toggle_3rd_person() +{ + self endon( "disconnect" ); + self endon( "spawned_player" ); + third_person = 1; + self set_third_person( 1 ); +} + +set_third_person( value ) +{ + if ( value ) + { + self setclientthirdperson( 1 ); + self setclientthirdpersonangle( 354 ); + self setdepthoffield( 0, 128, 512, 4000, 6, 1.8 ); + } + else + { + self setclientthirdperson( 0 ); + self setclientthirdpersonangle( 0 ); + self setdepthoffield( 0, 0, 512, 4000, 4, 0 ); + } + + self resetfov(); +} + +last_stand_revive() +{ + level endon( "between_round_over" ); + players = get_players(); + laststand_count = 0; + + foreach ( player in players ) + { + if ( !is_player_valid( player ) ) + laststand_count++; + } + + if ( laststand_count == players.size ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() && players[i].revivetrigger.beingrevived == 0 ) + players[i] maps\mp\zombies\_zm_laststand::auto_revive( players[i] ); + } + } +} + +last_stand_pistol_rank_init() +{ + level.pistol_values = []; + level.pistol_values[level.pistol_values.size] = "m1911_zm"; + level.pistol_values[level.pistol_values.size] = "c96_zm"; + level.pistol_values[level.pistol_values.size] = "cz75_zm"; + level.pistol_values[level.pistol_values.size] = "cz75dw_zm"; + level.pistol_values[level.pistol_values.size] = "kard_zm"; + level.pistol_values[level.pistol_values.size] = "fiveseven_zm"; + level.pistol_values[level.pistol_values.size] = "beretta93r_zm"; + level.pistol_values[level.pistol_values.size] = "beretta93r_extclip_zm"; + level.pistol_values[level.pistol_values.size] = "fivesevendw_zm"; + level.pistol_values[level.pistol_values.size] = "rnma_zm"; + level.pistol_values[level.pistol_values.size] = "python_zm"; + level.pistol_values[level.pistol_values.size] = "judge_zm"; + level.pistol_values[level.pistol_values.size] = "cz75_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "cz75dw_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "kard_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "fiveseven_upgraded_zm"; + level.pistol_value_solo_replace_below = level.pistol_values.size - 1; + level.pistol_values[level.pistol_values.size] = "m1911_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "c96_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "beretta93r_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "beretta93r_extclip_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "fivesevendw_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "rnma_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "python_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "judge_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "ray_gun_zm"; + level.pistol_values[level.pistol_values.size] = "raygun_mark2_zm"; + level.pistol_values[level.pistol_values.size] = "freezegun_zm"; + level.pistol_values[level.pistol_values.size] = "ray_gun_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "raygun_mark2_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "freezegun_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "microwavegundw_zm"; + level.pistol_values[level.pistol_values.size] = "microwavegundw_upgraded_zm"; +} + +last_stand_pistol_swap() +{ + if ( self has_powerup_weapon() ) + self.lastactiveweapon = "none"; + + if ( !self hasweapon( self.laststandpistol ) ) + self giveweapon( self.laststandpistol ); + + ammoclip = weaponclipsize( self.laststandpistol ); + doubleclip = ammoclip * 2; + + if ( isdefined( self._special_solo_pistol_swap ) && self._special_solo_pistol_swap || self.laststandpistol == level.default_solo_laststandpistol && !self.hadpistol ) + { + self._special_solo_pistol_swap = 0; + self.hadpistol = 0; + self setweaponammostock( self.laststandpistol, doubleclip ); + } + else if ( flag( "solo_game" ) && self.laststandpistol == level.default_solo_laststandpistol ) + self setweaponammostock( self.laststandpistol, doubleclip ); + else if ( self.laststandpistol == level.default_laststandpistol ) + self setweaponammostock( self.laststandpistol, doubleclip ); + else if ( self.laststandpistol == "ray_gun_zm" || self.laststandpistol == "ray_gun_upgraded_zm" ) + { + if ( self.stored_weapon_info[self.laststandpistol].total_amt >= ammoclip ) + { + self setweaponammoclip( self.laststandpistol, ammoclip ); + self.stored_weapon_info[self.laststandpistol].given_amt = ammoclip; + } + else + { + self setweaponammoclip( self.laststandpistol, self.stored_weapon_info[self.laststandpistol].total_amt ); + self.stored_weapon_info[self.laststandpistol].given_amt = self.stored_weapon_info[self.laststandpistol].total_amt; + } + + self setweaponammostock( self.laststandpistol, 0 ); + } + else if ( self.stored_weapon_info[self.laststandpistol].stock_amt >= doubleclip ) + { + self setweaponammostock( self.laststandpistol, doubleclip ); + self.stored_weapon_info[self.laststandpistol].given_amt = doubleclip + self.stored_weapon_info[self.laststandpistol].clip_amt + self.stored_weapon_info[self.laststandpistol].left_clip_amt; + } + else + { + self setweaponammostock( self.laststandpistol, self.stored_weapon_info[self.laststandpistol].stock_amt ); + self.stored_weapon_info[self.laststandpistol].given_amt = self.stored_weapon_info[self.laststandpistol].total_amt; + } + + self switchtoweapon( self.laststandpistol ); +} + +last_stand_best_pistol() +{ + pistol_array = []; + current_weapons = self getweaponslistprimaries(); + + for ( i = 0; i < current_weapons.size; i++ ) + { + class = weaponclass( current_weapons[i] ); + + if ( issubstr( current_weapons[i], "knife_ballistic_" ) ) + class = "knife"; + + if ( class == "pistol" || class == "pistolspread" || class == "pistol spread" ) + { + if ( current_weapons[i] != level.default_laststandpistol && !flag( "solo_game" ) || !flag( "solo_game" ) && current_weapons[i] != level.default_solo_laststandpistol ) + { + if ( self getammocount( current_weapons[i] ) <= 0 ) + continue; + } + + pistol_array_index = pistol_array.size; + pistol_array[pistol_array_index] = spawnstruct(); + pistol_array[pistol_array_index].gun = current_weapons[i]; + pistol_array[pistol_array_index].value = 0; + + for ( j = 0; j < level.pistol_values.size; j++ ) + { + if ( level.pistol_values[j] == current_weapons[i] ) + { + pistol_array[pistol_array_index].value = j; + break; + } + } + } + } + + self.laststandpistol = last_stand_compare_pistols( pistol_array ); +} + +last_stand_compare_pistols( struct_array ) +{ + if ( !isarray( struct_array ) || struct_array.size <= 0 ) + { + self.hadpistol = 0; + + if ( isdefined( self.stored_weapon_info ) ) + { + stored_weapon_info = getarraykeys( self.stored_weapon_info ); + + for ( j = 0; j < stored_weapon_info.size; j++ ) + { + if ( stored_weapon_info[j] == level.laststandpistol ) + self.hadpistol = 1; + } + } + + return level.laststandpistol; + } + + highest_score_pistol = struct_array[0]; + + for ( i = 1; i < struct_array.size; i++ ) + { + if ( struct_array[i].value > highest_score_pistol.value ) + highest_score_pistol = struct_array[i]; + } + + if ( flag( "solo_game" ) ) + { + self._special_solo_pistol_swap = 0; + + if ( highest_score_pistol.value <= level.pistol_value_solo_replace_below ) + { + self.hadpistol = 0; + self._special_solo_pistol_swap = 1; + + if ( isdefined( level.force_solo_quick_revive ) && level.force_solo_quick_revive && ( !self hasperk( "specialty_quickrevive" ) && !self hasperk( "specialty_quickrevive" ) ) ) + return highest_score_pistol.gun; + else + return level.laststandpistol; + } + else + return highest_score_pistol.gun; + } + else + return highest_score_pistol.gun; +} + +last_stand_save_pistol_ammo() +{ + weapon_inventory = self getweaponslist( 1 ); + self.stored_weapon_info = []; + + for ( i = 0; i < weapon_inventory.size; i++ ) + { + weapon = weapon_inventory[i]; + class = weaponclass( weapon ); + + if ( issubstr( weapon, "knife_ballistic_" ) ) + class = "knife"; + + if ( class == "pistol" || class == "pistolspread" || class == "pistol spread" ) + { + self.stored_weapon_info[weapon] = spawnstruct(); + self.stored_weapon_info[weapon].clip_amt = self getweaponammoclip( weapon ); + self.stored_weapon_info[weapon].left_clip_amt = 0; + dual_wield_name = weapondualwieldweaponname( weapon ); + + if ( "none" != dual_wield_name ) + self.stored_weapon_info[weapon].left_clip_amt = self getweaponammoclip( dual_wield_name ); + + self.stored_weapon_info[weapon].stock_amt = self getweaponammostock( weapon ); + self.stored_weapon_info[weapon].total_amt = self.stored_weapon_info[weapon].clip_amt + self.stored_weapon_info[weapon].left_clip_amt + self.stored_weapon_info[weapon].stock_amt; + self.stored_weapon_info[weapon].given_amt = 0; + } + } + + self last_stand_best_pistol(); +} + +last_stand_restore_pistol_ammo() +{ + self.weapon_taken_by_losing_specialty_additionalprimaryweapon = undefined; + + if ( !isdefined( self.stored_weapon_info ) ) + return; + + weapon_inventory = self getweaponslist( 1 ); + weapon_to_restore = getarraykeys( self.stored_weapon_info ); + + for ( i = 0; i < weapon_inventory.size; i++ ) + { + weapon = weapon_inventory[i]; + + if ( weapon != self.laststandpistol ) + continue; + + for ( j = 0; j < weapon_to_restore.size; j++ ) + { + check_weapon = weapon_to_restore[j]; + + if ( weapon == check_weapon ) + { + dual_wield_name = weapondualwieldweaponname( weapon_to_restore[j] ); + + if ( weapon != level.default_laststandpistol ) + { + last_clip = self getweaponammoclip( weapon ); + last_left_clip = 0; + + if ( "none" != dual_wield_name ) + last_left_clip = self getweaponammoclip( dual_wield_name ); + + last_stock = self getweaponammostock( weapon ); + last_total = last_clip + last_left_clip + last_stock; + used_amt = self.stored_weapon_info[weapon].given_amt - last_total; + + if ( used_amt >= self.stored_weapon_info[weapon].stock_amt ) + { + used_amt -= self.stored_weapon_info[weapon].stock_amt; + self.stored_weapon_info[weapon].stock_amt = 0; + self.stored_weapon_info[weapon].clip_amt -= used_amt; + + if ( self.stored_weapon_info[weapon].clip_amt < 0 ) + self.stored_weapon_info[weapon].clip_amt = 0; + } + else + { + new_stock_amt = self.stored_weapon_info[weapon].stock_amt - used_amt; + + if ( new_stock_amt < self.stored_weapon_info[weapon].stock_amt ) + self.stored_weapon_info[weapon].stock_amt = new_stock_amt; + } + } + + self setweaponammoclip( weapon_to_restore[j], self.stored_weapon_info[weapon_to_restore[j]].clip_amt ); + + if ( "none" != dual_wield_name ) + self setweaponammoclip( dual_wield_name, self.stored_weapon_info[weapon_to_restore[j]].left_clip_amt ); + + self setweaponammostock( weapon_to_restore[j], self.stored_weapon_info[weapon_to_restore[j]].stock_amt ); + break; + } + } + } +} + +last_stand_take_thrown_grenade() +{ + self endon( "disconnect" ); + self endon( "bled_out" ); + self endon( "player_revived" ); + + self waittill( "grenade_fire", grenade, weaponname ); + + if ( isdefined( self.lsgsar_lethal ) && weaponname == self.lsgsar_lethal ) + self.lsgsar_lethal_nade_amt--; + + if ( isdefined( self.lsgsar_tactical ) && weaponname == self.lsgsar_tactical ) + self.lsgsar_tactical_nade_amt--; +} + +last_stand_grenade_save_and_return() +{ + if ( isdefined( level.isresetting_grief ) && level.isresetting_grief ) + return; + + self endon( "disconnect" ); + self endon( "bled_out" ); + level endon( "between_round_over" ); + self.lsgsar_lethal_nade_amt = 0; + self.lsgsar_has_lethal_nade = 0; + self.lsgsar_tactical_nade_amt = 0; + self.lsgsar_has_tactical_nade = 0; + self.lsgsar_lethal = undefined; + self.lsgsar_tactical = undefined; + + if ( self isthrowinggrenade() ) + self thread last_stand_take_thrown_grenade(); + + weapons_on_player = self getweaponslist( 1 ); + + for ( i = 0; i < weapons_on_player.size; i++ ) + { + if ( self is_player_lethal_grenade( weapons_on_player[i] ) ) + { + self.lsgsar_has_lethal_nade = 1; + self.lsgsar_lethal = self get_player_lethal_grenade(); + self.lsgsar_lethal_nade_amt = self getweaponammoclip( self get_player_lethal_grenade() ); + self setweaponammoclip( self get_player_lethal_grenade(), 0 ); + self takeweapon( self get_player_lethal_grenade() ); + continue; + } + + if ( self is_player_tactical_grenade( weapons_on_player[i] ) ) + { + self.lsgsar_has_tactical_nade = 1; + self.lsgsar_tactical = self get_player_tactical_grenade(); + self.lsgsar_tactical_nade_amt = self getweaponammoclip( self get_player_tactical_grenade() ); + self setweaponammoclip( self get_player_tactical_grenade(), 0 ); + self takeweapon( self get_player_tactical_grenade() ); + } + } + + self waittill( "player_revived" ); + + if ( self.lsgsar_has_lethal_nade ) + { + self set_player_lethal_grenade( self.lsgsar_lethal ); + self giveweapon( self.lsgsar_lethal ); + self setweaponammoclip( self.lsgsar_lethal, self.lsgsar_lethal_nade_amt ); + } + + if ( self.lsgsar_has_tactical_nade ) + { + self set_player_tactical_grenade( self.lsgsar_tactical ); + self giveweapon( self.lsgsar_tactical ); + self setweaponammoclip( self.lsgsar_tactical, self.lsgsar_tactical_nade_amt ); + } + + self.lsgsar_lethal_nade_amt = undefined; + self.lsgsar_has_lethal_nade = undefined; + self.lsgsar_tactical_nade_amt = undefined; + self.lsgsar_has_tactical_nade = undefined; + self.lsgsar_lethal = undefined; + self.lsgsar_tactical = undefined; +} + +spectators_respawn() +{ + level endon( "between_round_over" ); + + if ( !isdefined( level.zombie_vars["spectators_respawn"] ) || !level.zombie_vars["spectators_respawn"] ) + return; + + if ( !isdefined( level.custom_spawnplayer ) ) + level.custom_spawnplayer = ::spectator_respawn; + + while ( true ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].sessionstate == "spectator" && isdefined( players[i].spectator_respawn ) ) + { + players[i] [[ level.spawnplayer ]](); + thread refresh_player_navcard_hud(); + + if ( isdefined( level.script ) && level.round_number > 6 && players[i].score < 1500 ) + { + players[i].old_score = players[i].score; + + if ( isdefined( level.spectator_respawn_custom_score ) ) + players[i] [[ level.spectator_respawn_custom_score ]](); + + players[i].score = 1500; + } + } + } + + wait 1; + } +} + +spectator_respawn() +{ +/# + println( "*************************Respawn Spectator***" ); +#/ + assert( isdefined( self.spectator_respawn ) ); + origin = self.spectator_respawn.origin; + angles = self.spectator_respawn.angles; + self setspectatepermissions( 0 ); + new_origin = undefined; + + if ( isdefined( level.check_valid_spawn_override ) ) + new_origin = [[ level.check_valid_spawn_override ]]( self ); + + if ( !isdefined( new_origin ) ) + new_origin = check_for_valid_spawn_near_team( self, 1 ); + + if ( isdefined( new_origin ) ) + { + if ( !isdefined( new_origin.angles ) ) + angles = ( 0, 0, 0 ); + else + angles = new_origin.angles; + + self spawn( new_origin.origin, angles ); + } + else + self spawn( origin, angles ); + + if ( isdefined( self get_player_placeable_mine() ) ) + { + self takeweapon( self get_player_placeable_mine() ); + self set_player_placeable_mine( undefined ); + } + + self maps\mp\zombies\_zm_equipment::equipment_take(); + self.is_burning = undefined; + self.abilities = []; + self.is_zombie = 0; + self.ignoreme = 0; + setclientsysstate( "lsm", "0", self ); + self reviveplayer(); + self notify( "spawned_player" ); + + if ( isdefined( level._zombiemode_post_respawn_callback ) ) + self thread [[ level._zombiemode_post_respawn_callback ]](); + + self maps\mp\zombies\_zm_score::player_reduce_points( "died" ); + self maps\mp\zombies\_zm_melee_weapon::spectator_respawn_all(); + claymore_triggers = getentarray( "claymore_purchase", "targetname" ); + + for ( i = 0; i < claymore_triggers.size; i++ ) + { + claymore_triggers[i] setvisibletoplayer( self ); + claymore_triggers[i].claymores_triggered = 0; + } + + self thread player_zombie_breadcrumb(); + self thread return_retained_perks(); + return 1; +} + +check_for_valid_spawn_near_team( revivee, return_struct ) +{ + if ( isdefined( level.check_for_valid_spawn_near_team_callback ) ) + { + spawn_location = [[ level.check_for_valid_spawn_near_team_callback ]]( revivee, return_struct ); + return spawn_location; + } + else + { + players = get_players(); + spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); + closest_group = undefined; + closest_distance = 100000000; + backup_group = undefined; + backup_distance = 100000000; + + if ( spawn_points.size == 0 ) + return undefined; + + for ( i = 0; i < players.size; i++ ) + { + if ( is_player_valid( players[i], undefined, 1 ) && players[i] != self ) + { + for ( j = 0; j < spawn_points.size; j++ ) + { + if ( isdefined( spawn_points[j].script_int ) ) + ideal_distance = spawn_points[j].script_int; + else + ideal_distance = 1000; + + if ( spawn_points[j].locked == 0 ) + { + plyr_dist = distancesquared( players[i].origin, spawn_points[j].origin ); + + if ( plyr_dist < ideal_distance * ideal_distance ) + { + if ( plyr_dist < closest_distance ) + { + closest_distance = plyr_dist; + closest_group = j; + } + + continue; + } + + if ( plyr_dist < backup_distance ) + { + backup_group = j; + backup_distance = plyr_dist; + } + } + } + } + + if ( !isdefined( closest_group ) ) + closest_group = backup_group; + + if ( isdefined( closest_group ) ) + { + spawn_location = get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ); + + if ( isdefined( spawn_location ) ) + return spawn_location; + } + } + + return undefined; + } +} + +get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ) +{ + spawn_array = getstructarray( spawn_points[closest_group].target, "targetname" ); + spawn_array = array_randomize( spawn_array ); + + for ( k = 0; k < spawn_array.size; k++ ) + { + if ( isdefined( spawn_array[k].plyr ) && spawn_array[k].plyr == revivee getentitynumber() ) + { + if ( positionwouldtelefrag( spawn_array[k].origin ) ) + { + spawn_array[k].plyr = undefined; + break; + } + else if ( isdefined( return_struct ) && return_struct ) + return spawn_array[k]; + else + return spawn_array[k].origin; + } + } + + for ( k = 0; k < spawn_array.size; k++ ) + { + if ( positionwouldtelefrag( spawn_array[k].origin ) ) + continue; + + if ( !isdefined( spawn_array[k].plyr ) || spawn_array[k].plyr == revivee getentitynumber() ) + { + spawn_array[k].plyr = revivee getentitynumber(); + + if ( isdefined( return_struct ) && return_struct ) + return spawn_array[k]; + else + return spawn_array[k].origin; + } + } + + if ( isdefined( return_struct ) && return_struct ) + return spawn_array[0]; + + return spawn_array[0].origin; +} + +check_for_valid_spawn_near_position( revivee, v_position, return_struct ) +{ + spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); + + if ( spawn_points.size == 0 ) + return undefined; + + closest_group = undefined; + closest_distance = 100000000; + backup_group = undefined; + backup_distance = 100000000; + + for ( i = 0; i < spawn_points.size; i++ ) + { + if ( isdefined( spawn_points[i].script_int ) ) + ideal_distance = spawn_points[i].script_int; + else + ideal_distance = 1000; + + if ( spawn_points[i].locked == 0 ) + { + dist = distancesquared( v_position, spawn_points[i].origin ); + + if ( dist < ideal_distance * ideal_distance ) + { + if ( dist < closest_distance ) + { + closest_distance = dist; + closest_group = i; + } + } + else if ( dist < backup_distance ) + { + backup_group = i; + backup_distance = dist; + } + } + + if ( !isdefined( closest_group ) ) + closest_group = backup_group; + } + + if ( isdefined( closest_group ) ) + { + spawn_location = get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ); + + if ( isdefined( spawn_location ) ) + return spawn_location; + } + + return undefined; +} + +check_for_valid_spawn_within_range( revivee, v_position, return_struct, min_distance, max_distance ) +{ + spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); + + if ( spawn_points.size == 0 ) + return undefined; + + closest_group = undefined; + closest_distance = 100000000; + + for ( i = 0; i < spawn_points.size; i++ ) + { + if ( spawn_points[i].locked == 0 ) + { + dist = distance( v_position, spawn_points[i].origin ); + + if ( dist >= min_distance && dist <= max_distance ) + { + if ( dist < closest_distance ) + { + closest_distance = dist; + closest_group = i; + } + } + } + } + + if ( isdefined( closest_group ) ) + { + spawn_location = get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ); + + if ( isdefined( spawn_location ) ) + return spawn_location; + } + + return undefined; +} + +get_players_on_team( exclude ) +{ + teammates = []; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].spawn_side == self.spawn_side && !isdefined( players[i].revivetrigger ) && players[i] != exclude ) + teammates[teammates.size] = players[i]; + } + + return teammates; +} + +get_safe_breadcrumb_pos( player ) +{ + players = get_players(); + valid_players = []; + min_dist = 22500; + + for ( i = 0; i < players.size; i++ ) + { + if ( !is_player_valid( players[i] ) ) + continue; + + valid_players[valid_players.size] = players[i]; + } + + for ( i = 0; i < valid_players.size; i++ ) + { + count = 0; + + for ( q = 1; q < player.zombie_breadcrumbs.size; q++ ) + { + if ( distancesquared( player.zombie_breadcrumbs[q], valid_players[i].origin ) < min_dist ) + continue; + + count++; + + if ( count == valid_players.size ) + return player.zombie_breadcrumbs[q]; + } + } + + return undefined; +} + +default_max_zombie_func( max_num ) +{ +/# + count = getdvarint( _hash_CF687B54 ); + + if ( count > -1 ) + return count; +#/ + max = max_num; + + if ( level.round_number < 2 ) + max = int( max_num * 0.25 ); + else if ( level.round_number < 3 ) + max = int( max_num * 0.3 ); + else if ( level.round_number < 4 ) + max = int( max_num * 0.5 ); + else if ( level.round_number < 5 ) + max = int( max_num * 0.7 ); + else if ( level.round_number < 6 ) + max = int( max_num * 0.9 ); + + return max; +} + +round_spawning() +{ + level endon( "intermission" ); + level endon( "end_of_round" ); + level endon( "restart_round" ); +/# + level endon( "kill_round" ); +#/ + if ( level.intermission ) + return; +/# + if ( getdvarint( _hash_FA81816F ) == 2 || getdvarint( _hash_FA81816F ) >= 4 ) + return; +#/ + if ( level.zombie_spawn_locations.size < 1 ) + { +/# + assertmsg( "No active spawners in the map. Check to see if the zone is active and if it's pointing to spawners." ); +#/ + return; + } + + ai_calculate_health( level.round_number ); + count = 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i].zombification_time = 0; + + max = level.zombie_vars["zombie_max_ai"]; + multiplier = level.round_number / 5; + + if ( multiplier < 1 ) + multiplier = 1; + + if ( level.round_number >= 10 ) + multiplier *= ( level.round_number * 0.15 ); + + player_num = get_players().size; + + if ( player_num == 1 ) + max += int( 0.5 * level.zombie_vars["zombie_ai_per_player"] * multiplier ); + else + max += int( ( player_num - 1 ) * level.zombie_vars["zombie_ai_per_player"] * multiplier ); + + if ( !isdefined( level.max_zombie_func ) ) + level.max_zombie_func = ::default_max_zombie_func; + + if ( !( isdefined( level.kill_counter_hud ) && level.zombie_total > 0 ) ) + { + level.zombie_total = [[ level.max_zombie_func ]]( max ); + level notify( "zombie_total_set" ); + } + + if ( isdefined( level.zombie_total_set_func ) ) + level thread [[ level.zombie_total_set_func ]](); + + if ( level.round_number < 10 || level.speed_change_max > 0 ) + level thread zombie_speed_up(); + + mixed_spawns = 0; + old_spawn = undefined; + + while ( true ) + { + while ( get_current_zombie_count() >= level.zombie_ai_limit || level.zombie_total <= 0 ) + wait 0.1; + + while ( get_current_actor_count() >= level.zombie_actor_limit ) + { + clear_all_corpses(); + wait 0.1; + } + + flag_wait( "spawn_zombies" ); + + while ( level.zombie_spawn_locations.size <= 0 ) + wait 0.1; + + run_custom_ai_spawn_checks(); + spawn_point = level.zombie_spawn_locations[randomint( level.zombie_spawn_locations.size )]; + + if ( !isdefined( old_spawn ) ) + old_spawn = spawn_point; + else if ( spawn_point == old_spawn ) + spawn_point = level.zombie_spawn_locations[randomint( level.zombie_spawn_locations.size )]; + + old_spawn = spawn_point; + + if ( isdefined( level.mixed_rounds_enabled ) && level.mixed_rounds_enabled == 1 ) + { + spawn_dog = 0; + + if ( level.round_number > 30 ) + { + if ( randomint( 100 ) < 3 ) + spawn_dog = 1; + } + else if ( level.round_number > 25 && mixed_spawns < 3 ) + { + if ( randomint( 100 ) < 2 ) + spawn_dog = 1; + } + else if ( level.round_number > 20 && mixed_spawns < 2 ) + { + if ( randomint( 100 ) < 2 ) + spawn_dog = 1; + } + else if ( level.round_number > 15 && mixed_spawns < 1 ) + { + if ( randomint( 100 ) < 1 ) + spawn_dog = 1; + } + + if ( spawn_dog ) + { + keys = getarraykeys( level.zones ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( level.zones[keys[i]].is_occupied ) + { + akeys = getarraykeys( level.zones[keys[i]].adjacent_zones ); + + for ( k = 0; k < akeys.size; k++ ) + { + if ( level.zones[akeys[k]].is_active && !level.zones[akeys[k]].is_occupied && level.zones[akeys[k]].dog_locations.size > 0 ) + { + maps\mp\zombies\_zm_ai_dogs::special_dog_spawn( undefined, 1 ); + level.zombie_total--; + wait_network_frame(); + } + } + } + } + } + } + + if ( isdefined( level.zombie_spawners ) ) + { + if ( isdefined( level.use_multiple_spawns ) && level.use_multiple_spawns ) + { + if ( isdefined( spawn_point.script_int ) ) + { + if ( isdefined( level.zombie_spawn[spawn_point.script_int] ) && level.zombie_spawn[spawn_point.script_int].size ) + spawner = random( level.zombie_spawn[spawn_point.script_int] ); + else + { +/# + assertmsg( "Wanting to spawn from zombie group " + spawn_point.script_int + "but it doens't exist" ); +#/ + } + } + else if ( isdefined( level.zones[spawn_point.zone_name].script_int ) && level.zones[spawn_point.zone_name].script_int ) + spawner = random( level.zombie_spawn[level.zones[spawn_point.zone_name].script_int] ); + else if ( isdefined( level.spawner_int ) && ( isdefined( level.zombie_spawn[level.spawner_int].size ) && level.zombie_spawn[level.spawner_int].size ) ) + spawner = random( level.zombie_spawn[level.spawner_int] ); + else + spawner = random( level.zombie_spawners ); + } + else + spawner = random( level.zombie_spawners ); + + ai = spawn_zombie( spawner, spawner.targetname, spawn_point ); + } + + if ( isdefined( ai ) ) + { + level.zombie_total--; + ai thread round_spawn_failsafe(); + count++; + } + + wait( level.zombie_vars["zombie_spawn_delay"] ); + wait_network_frame(); + } +} + +run_custom_ai_spawn_checks() +{ + foreach ( str_id, s in level.custom_ai_spawn_check_funcs ) + { + if ( [[ s.func_check ]]() ) + { + a_spawners = [[ s.func_get_spawners ]](); + level.zombie_spawners = arraycombine( level.zombie_spawners, a_spawners, 0, 0 ); + + if ( isdefined( level.use_multiple_spawns ) && level.use_multiple_spawns ) + { + foreach ( sp in a_spawners ) + { + if ( isdefined( sp.script_int ) ) + { + if ( !isdefined( level.zombie_spawn[sp.script_int] ) ) + level.zombie_spawn[sp.script_int] = []; + + if ( !isinarray( level.zombie_spawn[sp.script_int], sp ) ) + level.zombie_spawn[sp.script_int][level.zombie_spawn[sp.script_int].size] = sp; + } + } + } + + if ( isdefined( s.func_get_locations ) ) + { + a_locations = [[ s.func_get_locations ]](); + level.zombie_spawn_locations = arraycombine( level.zombie_spawn_locations, a_locations, 0, 0 ); + } + + continue; + } + + a_spawners = [[ s.func_get_spawners ]](); + + foreach ( sp in a_spawners ) + arrayremovevalue( level.zombie_spawners, sp ); + + if ( isdefined( level.use_multiple_spawns ) && level.use_multiple_spawns ) + { + foreach ( sp in a_spawners ) + { + if ( isdefined( sp.script_int ) && isdefined( level.zombie_spawn[sp.script_int] ) ) + arrayremovevalue( level.zombie_spawn[sp.script_int], sp ); + } + } + + if ( isdefined( s.func_get_locations ) ) + { + a_locations = [[ s.func_get_locations ]](); + + foreach ( s_loc in a_locations ) + arrayremovevalue( level.zombie_spawn_locations, s_loc ); + } + } +} + +register_custom_ai_spawn_check( str_id, func_check, func_get_spawners, func_get_locations ) +{ + if ( !isdefined( level.custom_ai_spawn_check_funcs[str_id] ) ) + level.custom_ai_spawn_check_funcs[str_id] = spawnstruct(); + + level.custom_ai_spawn_check_funcs[str_id].func_check = func_check; + level.custom_ai_spawn_check_funcs[str_id].func_get_spawners = func_get_spawners; + level.custom_ai_spawn_check_funcs[str_id].func_get_locations = func_get_locations; +} + +zombie_speed_up() +{ + if ( level.round_number <= 3 ) + return; + + level endon( "intermission" ); + level endon( "end_of_round" ); + level endon( "restart_round" ); +/# + level endon( "kill_round" ); +#/ + while ( level.zombie_total > 4 ) + wait 2.0; + + for ( num_zombies = get_current_zombie_count(); num_zombies > 3; num_zombies = get_current_zombie_count() ) + wait 2.0; + + for ( zombies = get_round_enemy_array(); zombies.size > 0; zombies = get_round_enemy_array() ) + { + if ( zombies.size == 1 && ( isdefined( zombies[0].has_legs ) && zombies[0].has_legs ) ) + { + if ( isdefined( level.zombie_speed_up ) ) + zombies[0] thread [[ level.zombie_speed_up ]](); + else if ( zombies[0].zombie_move_speed != "sprint" ) + { + zombies[0] set_zombie_run_cycle( "sprint" ); + zombies[0].zombie_move_speed_original = zombies[0].zombie_move_speed; + } + } + + wait 0.5; + } +} + +round_spawning_test() +{ + while ( true ) + { + spawn_point = level.zombie_spawn_locations[randomint( level.zombie_spawn_locations.size )]; + spawner = random( level.zombie_spawners ); + ai = spawn_zombie( spawner, spawner.targetname, spawn_point ); + + ai waittill( "death" ); + + wait 5; + } +} + +round_pause( delay = 30 ) +{ + level.countdown_hud = create_counter_hud(); + level.countdown_hud setvalue( delay ); + level.countdown_hud.color = ( 1, 1, 1 ); + level.countdown_hud.alpha = 1; + level.countdown_hud fadeovertime( 2.0 ); + wait 2.0; + level.countdown_hud.color = vectorscale( ( 1, 0, 0 ), 0.21 ); + level.countdown_hud fadeovertime( 3.0 ); + wait 3; + + while ( delay >= 1 ) + { + wait 1; + delay--; + level.countdown_hud setvalue( delay ); + } + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] playlocalsound( "zmb_perks_packa_ready" ); + + level.countdown_hud fadeovertime( 1.0 ); + level.countdown_hud.color = ( 1, 1, 1 ); + level.countdown_hud.alpha = 0; + wait 1.0; + level.countdown_hud destroy_hud(); +} + +round_start() +{ +/# + println( "ZM >> round_start start" ); +#/ + if ( isdefined( level.round_prestart_func ) ) + [[ level.round_prestart_func ]](); + else + { + n_delay = 2; + + if ( isdefined( level.zombie_round_start_delay ) ) + n_delay = level.zombie_round_start_delay; + + wait( n_delay ); + } + + level.zombie_health = level.zombie_vars["zombie_health_start"]; + + if ( getdvarint( "scr_writeConfigStrings" ) == 1 ) + { + wait 5; + exitlevel(); + return; + } + + if ( level.zombie_vars["game_start_delay"] > 0 ) + round_pause( level.zombie_vars["game_start_delay"] ); + + flag_set( "begin_spawning" ); + + if ( !isdefined( level.round_spawn_func ) ) + level.round_spawn_func = ::round_spawning; +/# + if ( getdvarint( _hash_7688603C ) ) + level.round_spawn_func = ::round_spawning_test; +#/ + if ( !isdefined( level.round_wait_func ) ) + level.round_wait_func = ::round_wait; + + if ( !isdefined( level.round_think_func ) ) + level.round_think_func = ::round_think; + + level thread [[ level.round_think_func ]](); +} + +play_door_dialog() +{ + level endon( "power_on" ); + self endon( "warning_dialog" ); + timer = 0; + + while ( true ) + { + wait 0.05; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + dist = distancesquared( players[i].origin, self.origin ); + + if ( dist > 4900 ) + { + timer = 0; + continue; + } + + while ( dist < 4900 && timer < 3 ) + { + wait 0.5; + timer++; + } + + if ( dist > 4900 && timer >= 3 ) + { + self playsound( "door_deny" ); + players[i] maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "door_deny" ); + wait 3; + self notify( "warning_dialog" ); + } + } + } +} + +wait_until_first_player() +{ + players = get_players(); + + if ( !isdefined( players[0] ) ) + level waittill( "first_player_ready" ); +} + +round_one_up() +{ + level endon( "end_game" ); + + if ( isdefined( level.noroundnumber ) && level.noroundnumber == 1 ) + return; + + if ( !isdefined( level.doground_nomusic ) ) + level.doground_nomusic = 0; + + if ( level.first_round ) + { + intro = 1; + + if ( isdefined( level._custom_intro_vox ) ) + level thread [[ level._custom_intro_vox ]](); + else + level thread play_level_start_vox_delayed(); + } + else + intro = 0; + + if ( level.round_number == 5 || level.round_number == 10 || level.round_number == 20 || level.round_number == 35 || level.round_number == 50 ) + { + players = get_players(); + rand = randomintrange( 0, players.size ); + players[rand] thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "round_" + level.round_number ); + } + + if ( intro ) + { + if ( isdefined( level.host_ended_game ) && level.host_ended_game ) + return; + + wait 6.25; + level notify( "intro_hud_done" ); + wait 2; + } + else + wait 2.5; + + reportmtu( level.round_number ); +} + +round_over() +{ + if ( isdefined( level.noroundnumber ) && level.noroundnumber == 1 ) + return; + + time = level.zombie_vars["zombie_between_round_time"]; + players = getplayers(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + { + if ( !isdefined( players[player_index].pers["previous_distance_traveled"] ) ) + players[player_index].pers["previous_distance_traveled"] = 0; + + distancethisround = int( players[player_index].pers["distance_traveled"] - players[player_index].pers["previous_distance_traveled"] ); + players[player_index].pers["previous_distance_traveled"] = players[player_index].pers["distance_traveled"]; + players[player_index] incrementplayerstat( "distance_traveled", distancethisround ); + + if ( players[player_index].pers["team"] != "spectator" ) + { + zonename = players[player_index] get_current_zone(); + + if ( isdefined( zonename ) ) + players[player_index] recordzombiezone( "endingZone", zonename ); + } + } + + recordzombieroundend(); + wait( time ); +} + +round_think( restart = 0 ) +{ +/# + println( "ZM >> round_think start" ); +#/ + level endon( "end_round_think" ); + + if ( !( isdefined( restart ) && restart ) ) + { + if ( isdefined( level.initial_round_wait_func ) ) + [[ level.initial_round_wait_func ]](); + + if ( !( isdefined( level.host_ended_game ) && level.host_ended_game ) ) + { + players = get_players(); + + foreach ( player in players ) + { + if ( !( isdefined( player.hostmigrationcontrolsfrozen ) && player.hostmigrationcontrolsfrozen ) ) + { + player freezecontrols( 0 ); +/# + println( " Unfreeze controls 8" ); +#/ + } + + player maps\mp\zombies\_zm_stats::set_global_stat( "rounds", level.round_number ); + } + } + } + + setroundsplayed( level.round_number ); + + for (;;) + { + maxreward = 50 * level.round_number; + + if ( maxreward > 500 ) + maxreward = 500; + + level.zombie_vars["rebuild_barrier_cap_per_round"] = maxreward; + level.pro_tips_start_time = gettime(); + level.zombie_last_run_time = gettime(); + + if ( isdefined( level.zombie_round_change_custom ) ) + [[ level.zombie_round_change_custom ]](); + else + { + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "round_start" ); + round_one_up(); + } + + maps\mp\zombies\_zm_powerups::powerup_round_start(); + players = get_players(); + array_thread( players, maps\mp\zombies\_zm_blockers::rebuild_barrier_reward_reset ); + + if ( !( isdefined( level.headshots_only ) && level.headshots_only ) && !restart ) + level thread award_grenades_for_survivors(); + + bbprint( "zombie_rounds", "round %d player_count %d", level.round_number, players.size ); +/# + println( "ZM >> round_think, round=" + level.round_number + ", player_count=" + players.size ); +#/ + level.round_start_time = gettime(); + + while ( level.zombie_spawn_locations.size <= 0 ) + wait 0.1; + + level thread [[ level.round_spawn_func ]](); + level notify( "start_of_round" ); + recordzombieroundstart(); + players = getplayers(); + + for ( index = 0; index < players.size; index++ ) + { + zonename = players[index] get_current_zone(); + + if ( isdefined( zonename ) ) + players[index] recordzombiezone( "startingZone", zonename ); + } + + if ( isdefined( level.round_start_custom_func ) ) + [[ level.round_start_custom_func ]](); + + [[ level.round_wait_func ]](); + level.first_round = 0; + level notify( "end_of_round" ); + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "round_end" ); + uploadstats(); + + if ( isdefined( level.round_end_custom_logic ) ) + [[ level.round_end_custom_logic ]](); + + players = get_players(); + + if ( isdefined( level.no_end_game_check ) && level.no_end_game_check ) + { + level thread last_stand_revive(); + level thread spectators_respawn(); + } + else if ( 1 != players.size ) + level thread spectators_respawn(); + + players = get_players(); + array_thread( players, maps\mp\zombies\_zm_pers_upgrades_system::round_end ); + timer = level.zombie_vars["zombie_spawn_delay"]; + + if ( timer > 0.08 ) + level.zombie_vars["zombie_spawn_delay"] = timer * 0.95; + else if ( timer < 0.08 ) + level.zombie_vars["zombie_spawn_delay"] = 0.08; + + if ( level.gamedifficulty == 0 ) + level.zombie_move_speed = level.round_number * level.zombie_vars["zombie_move_speed_multiplier_easy"]; + else + level.zombie_move_speed = level.round_number * level.zombie_vars["zombie_move_speed_multiplier"]; + + level.round_number++; + + if ( 255 < level.round_number ) + level.round_number = 255; + + setroundsplayed( level.round_number ); + matchutctime = getutc(); + players = get_players(); + + foreach ( player in players ) + { + if ( level.curr_gametype_affects_rank && level.round_number > 3 + level.start_round ) + player maps\mp\zombies\_zm_stats::add_client_stat( "weighted_rounds_played", level.round_number ); + + player maps\mp\zombies\_zm_stats::set_global_stat( "rounds", level.round_number ); + player maps\mp\zombies\_zm_stats::update_playing_utc_time( matchutctime ); + } + + check_quickrevive_for_hotjoin(); + level round_over(); + level notify( "between_round_over" ); + restart = 0; + } +} + +award_grenades_for_survivors() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i].is_zombie ) + { + lethal_grenade = players[i] get_player_lethal_grenade(); + + if ( !players[i] hasweapon( lethal_grenade ) ) + { + players[i] giveweapon( lethal_grenade ); + players[i] setweaponammoclip( lethal_grenade, 0 ); + } + + if ( players[i] getfractionmaxammo( lethal_grenade ) < 0.25 ) + { + players[i] setweaponammoclip( lethal_grenade, 2 ); + continue; + } + + if ( players[i] getfractionmaxammo( lethal_grenade ) < 0.5 ) + { + players[i] setweaponammoclip( lethal_grenade, 3 ); + continue; + } + + players[i] setweaponammoclip( lethal_grenade, 4 ); + } + } +} + +ai_calculate_health( round_number ) +{ + level.zombie_health = level.zombie_vars["zombie_health_start"]; + + for ( i = 2; i <= round_number; i++ ) + { + if ( i >= 10 ) + { + old_health = level.zombie_health; + level.zombie_health += int( level.zombie_health * level.zombie_vars["zombie_health_increase_multiplier"] ); + + if ( level.zombie_health < old_health ) + { + level.zombie_health = old_health; + return; + } + } + else + level.zombie_health = int( level.zombie_health + level.zombie_vars["zombie_health_increase"] ); + } +} + +ai_zombie_health( round_number ) +{ + zombie_health = level.zombie_vars["zombie_health_start"]; + + for ( i = 2; i <= round_number; i++ ) + { + if ( i >= 10 ) + { + old_health = zombie_health; + zombie_health += int( zombie_health * level.zombie_vars["zombie_health_increase_multiplier"] ); + + if ( zombie_health < old_health ) + return old_health; + } + else + zombie_health = int( zombie_health + level.zombie_vars["zombie_health_increase"] ); + } + + return zombie_health; +} + +round_spawn_failsafe_debug() +{ +/# + level notify( "failsafe_debug_stop" ); + level endon( "failsafe_debug_stop" ); + start = gettime(); + level.chunk_time = 0; + + while ( true ) + { + level.failsafe_time = gettime() - start; + + if ( isdefined( self.lastchunk_destroy_time ) ) + level.chunk_time = gettime() - self.lastchunk_destroy_time; + + wait_network_frame(); + } +#/ +} + +round_spawn_failsafe() +{ + self endon( "death" ); + prevorigin = self.origin; + + while ( true ) + { + if ( !level.zombie_vars["zombie_use_failsafe"] ) + return; + + if ( isdefined( self.ignore_round_spawn_failsafe ) && self.ignore_round_spawn_failsafe ) + return; + + wait 30; + + if ( !self.has_legs ) + wait 10.0; + + if ( isdefined( self.is_inert ) && self.is_inert ) + continue; + + if ( isdefined( self.lastchunk_destroy_time ) ) + { + if ( gettime() - self.lastchunk_destroy_time < 8000 ) + continue; + } + + if ( self.origin[2] < level.zombie_vars["below_world_check"] ) + { + if ( isdefined( level.put_timed_out_zombies_back_in_queue ) && level.put_timed_out_zombies_back_in_queue && !flag( "dog_round" ) && !( isdefined( self.isscreecher ) && self.isscreecher ) ) + { + level.zombie_total++; + level.zombie_total_subtract++; + } +/# + +#/ + self dodamage( self.health + 100, ( 0, 0, 0 ) ); + break; + } + + if ( distancesquared( self.origin, prevorigin ) < 576 ) + { + if ( isdefined( level.put_timed_out_zombies_back_in_queue ) && level.put_timed_out_zombies_back_in_queue && !flag( "dog_round" ) ) + { + if ( !self.ignoreall && !( isdefined( self.nuked ) && self.nuked ) && !( isdefined( self.marked_for_death ) && self.marked_for_death ) && !( isdefined( self.isscreecher ) && self.isscreecher ) && ( isdefined( self.has_legs ) && self.has_legs ) ) + { + level.zombie_total++; + level.zombie_total_subtract++; + } + } + + level.zombies_timeout_playspace++; +/# + +#/ + self dodamage( self.health + 100, ( 0, 0, 0 ) ); + break; + } + + prevorigin = self.origin; + } +} + +round_wait() +{ + level endon( "restart_round" ); +/# + if ( getdvarint( _hash_7688603C ) ) + level waittill( "forever" ); +#/ +/# + if ( getdvarint( _hash_FA81816F ) == 2 || getdvarint( _hash_FA81816F ) >= 4 ) + level waittill( "forever" ); +#/ + wait 1; + + if ( flag( "dog_round" ) ) + { + wait 7; + + while ( level.dog_intermission ) + wait 0.5; + + increment_dog_round_stat( "finished" ); + } + else + { + while ( true ) + { + should_wait = 0; + + if ( isdefined( level.is_ghost_round_started ) && [[ level.is_ghost_round_started ]]() ) + should_wait = 1; + else + should_wait = get_current_zombie_count() > 0 || level.zombie_total > 0 || level.intermission; + + if ( !should_wait ) + return; + + if ( flag( "end_round_wait" ) ) + return; + + wait 1.0; + } + } +} + +zombify_player() +{ + self maps\mp\zombies\_zm_score::player_died_penalty(); + bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "died", self.origin ); + self recordplayerdeathzombies(); + + if ( isdefined( level.deathcard_spawn_func ) ) + self [[ level.deathcard_spawn_func ]](); + + if ( !isdefined( level.zombie_vars["zombify_player"] ) || !level.zombie_vars["zombify_player"] ) + { + self thread spawnspectator(); + return; + } + + self.ignoreme = 1; + self.is_zombie = 1; + self.zombification_time = gettime(); + self.team = level.zombie_team; + self notify( "zombified" ); + + if ( isdefined( self.revivetrigger ) ) + self.revivetrigger delete(); + + self.revivetrigger = undefined; + self setmovespeedscale( 0.3 ); + self reviveplayer(); + self takeallweapons(); + self giveweapon( "zombie_melee", 0 ); + self switchtoweapon( "zombie_melee" ); + self disableweaponcycling(); + self disableoffhandweapons(); + setclientsysstate( "zombify", 1, self ); + self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow(); + self thread playerzombie_player_damage(); + self thread playerzombie_soundboard(); +} + +playerzombie_player_damage() +{ + self endon( "death" ); + self endon( "disconnect" ); + self thread playerzombie_infinite_health(); + self.zombiehealth = level.zombie_health; + + while ( true ) + { + self waittill( "damage", amount, attacker, directionvec, point, type ); + + if ( !isdefined( attacker ) || !isplayer( attacker ) ) + { + wait 0.05; + continue; + } + + self.zombiehealth -= amount; + + if ( self.zombiehealth <= 0 ) + { + self thread playerzombie_downed_state(); + + self waittill( "playerzombie_downed_state_done" ); + + self.zombiehealth = level.zombie_health; + } + } +} + +playerzombie_downed_state() +{ + self endon( "death" ); + self endon( "disconnect" ); + downtime = 15; + starttime = gettime(); + endtime = starttime + downtime * 1000; + self thread playerzombie_downed_hud(); + self.playerzombie_soundboard_disable = 1; + self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow_stop(); + self disableweapons(); + self allowstand( 0 ); + self allowcrouch( 0 ); + self allowprone( 1 ); + + while ( gettime() < endtime ) + wait 0.05; + + self.playerzombie_soundboard_disable = 0; + self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow(); + self enableweapons(); + self allowstand( 1 ); + self allowcrouch( 0 ); + self allowprone( 0 ); + self notify( "playerzombie_downed_state_done" ); +} + +playerzombie_downed_hud() +{ + self endon( "death" ); + self endon( "disconnect" ); + text = newclienthudelem( self ); + text.alignx = "center"; + text.aligny = "middle"; + text.horzalign = "user_center"; + text.vertalign = "user_bottom"; + text.foreground = 1; + text.font = "default"; + text.fontscale = 1.8; + text.alpha = 0; + text.color = ( 1, 1, 1 ); + text settext( &"ZOMBIE_PLAYERZOMBIE_DOWNED" ); + text.y = -113; + + if ( self issplitscreen() ) + text.y = -137; + + text fadeovertime( 0.1 ); + text.alpha = 1; + + self waittill( "playerzombie_downed_state_done" ); + + text fadeovertime( 0.1 ); + text.alpha = 0; +} + +playerzombie_infinite_health() +{ + self endon( "death" ); + self endon( "disconnect" ); + bighealth = 100000; + + while ( true ) + { + if ( self.health < bighealth ) + self.health = bighealth; + + wait 0.1; + } +} + +playerzombie_soundboard() +{ + self endon( "death" ); + self endon( "disconnect" ); + self.playerzombie_soundboard_disable = 0; + self.buttonpressed_use = 0; + self.buttonpressed_attack = 0; + self.buttonpressed_ads = 0; + self.usesound_waittime = 3000; + self.usesound_nexttime = gettime(); + usesound = "playerzombie_usebutton_sound"; + self.attacksound_waittime = 3000; + self.attacksound_nexttime = gettime(); + attacksound = "playerzombie_attackbutton_sound"; + self.adssound_waittime = 3000; + self.adssound_nexttime = gettime(); + adssound = "playerzombie_adsbutton_sound"; + self.inputsound_nexttime = gettime(); + + while ( true ) + { + if ( self.playerzombie_soundboard_disable ) + { + wait 0.05; + continue; + } + + if ( self usebuttonpressed() ) + { + if ( self can_do_input( "use" ) ) + { + self thread playerzombie_play_sound( usesound ); + self thread playerzombie_waitfor_buttonrelease( "use" ); + self.usesound_nexttime = gettime() + self.usesound_waittime; + } + } + else if ( self attackbuttonpressed() ) + { + if ( self can_do_input( "attack" ) ) + { + self thread playerzombie_play_sound( attacksound ); + self thread playerzombie_waitfor_buttonrelease( "attack" ); + self.attacksound_nexttime = gettime() + self.attacksound_waittime; + } + } + else if ( self adsbuttonpressed() ) + { + if ( self can_do_input( "ads" ) ) + { + self thread playerzombie_play_sound( adssound ); + self thread playerzombie_waitfor_buttonrelease( "ads" ); + self.adssound_nexttime = gettime() + self.adssound_waittime; + } + } + + wait 0.05; + } +} + +can_do_input( inputtype ) +{ + if ( gettime() < self.inputsound_nexttime ) + return 0; + + cando = 0; + + switch ( inputtype ) + { + case "use": + if ( gettime() >= self.usesound_nexttime && !self.buttonpressed_use ) + cando = 1; + + break; + case "attack": + if ( gettime() >= self.attacksound_nexttime && !self.buttonpressed_attack ) + cando = 1; + + break; + case "ads": + if ( gettime() >= self.usesound_nexttime && !self.buttonpressed_ads ) + cando = 1; + + break; + default: +/# + assertmsg( "can_do_input(): didn't recognize inputType of " + inputtype ); +#/ + break; + } + + return cando; +} + +playerzombie_play_sound( alias ) +{ + self play_sound_on_ent( alias ); +} + +playerzombie_waitfor_buttonrelease( inputtype ) +{ + if ( inputtype != "use" && inputtype != "attack" && inputtype != "ads" ) + { +/# + assertmsg( "playerzombie_waitfor_buttonrelease(): inputType of " + inputtype + " is not recognized." ); +#/ + return; + } + + notifystring = "waitfor_buttonrelease_" + inputtype; + self notify( notifystring ); + self endon( notifystring ); + + if ( inputtype == "use" ) + { + self.buttonpressed_use = 1; + + while ( self usebuttonpressed() ) + wait 0.05; + + self.buttonpressed_use = 0; + } + else if ( inputtype == "attack" ) + { + self.buttonpressed_attack = 1; + + while ( self attackbuttonpressed() ) + wait 0.05; + + self.buttonpressed_attack = 0; + } + else if ( inputtype == "ads" ) + { + self.buttonpressed_ads = 1; + + while ( self adsbuttonpressed() ) + wait 0.05; + + self.buttonpressed_ads = 0; + } +} + +remove_ignore_attacker() +{ + self notify( "new_ignore_attacker" ); + self endon( "new_ignore_attacker" ); + self endon( "disconnect" ); + + if ( !isdefined( level.ignore_enemy_timer ) ) + level.ignore_enemy_timer = 0.4; + + wait( level.ignore_enemy_timer ); + self.ignoreattacker = undefined; +} + +player_shield_facing_attacker( vdir, limit ) +{ + orientation = self getplayerangles(); + forwardvec = anglestoforward( orientation ); + forwardvec2d = ( forwardvec[0], forwardvec[1], 0 ); + unitforwardvec2d = vectornormalize( forwardvec2d ); + tofaceevec = vdir * -1; + tofaceevec2d = ( tofaceevec[0], tofaceevec[1], 0 ); + unittofaceevec2d = vectornormalize( tofaceevec2d ); + dotproduct = vectordot( unitforwardvec2d, unittofaceevec2d ); + return dotproduct > limit; +} + +player_damage_override_cheat( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + player_damage_override( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); + return 0; +} + +player_damage_override( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + if ( isdefined( level._game_module_player_damage_callback ) ) + self [[ level._game_module_player_damage_callback ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); + + idamage = self check_player_damage_callbacks( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); + + if ( isdefined( self.use_adjusted_grenade_damage ) && self.use_adjusted_grenade_damage ) + { + self.use_adjusted_grenade_damage = undefined; + + if ( self.health > idamage ) + return idamage; + } + + if ( !idamage ) + return 0; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + return 0; + + if ( isdefined( einflictor ) ) + { + if ( isdefined( einflictor.water_damage ) && einflictor.water_damage ) + return 0; + } + + if ( isdefined( eattacker ) && ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie || isplayer( eattacker ) ) ) + { + if ( isdefined( self.hasriotshield ) && self.hasriotshield && isdefined( vdir ) ) + { + if ( isdefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped ) + { + if ( self player_shield_facing_attacker( vdir, 0.2 ) && isdefined( self.player_shield_apply_damage ) ) + { + self [[ self.player_shield_apply_damage ]]( 100, 0 ); + return 0; + } + } + else if ( !isdefined( self.riotshieldentity ) ) + { + if ( !self player_shield_facing_attacker( vdir, -0.2 ) && isdefined( self.player_shield_apply_damage ) ) + { + self [[ self.player_shield_apply_damage ]]( 100, 0 ); + return 0; + } + } + } + } + + if ( isdefined( eattacker ) ) + { + if ( isdefined( self.ignoreattacker ) && self.ignoreattacker == eattacker ) + return 0; + + if ( isdefined( self.is_zombie ) && self.is_zombie && ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie ) ) + return 0; + + if ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie ) + { + self.ignoreattacker = eattacker; + self thread remove_ignore_attacker(); + + if ( isdefined( eattacker.custom_damage_func ) ) + idamage = eattacker [[ eattacker.custom_damage_func ]]( self ); + else if ( isdefined( eattacker.meleedamage ) ) + idamage = eattacker.meleedamage; + else + idamage = 50; + } + + eattacker notify( "hit_player" ); + + if ( smeansofdeath != "MOD_FALLING" ) + { + self thread playswipesound( smeansofdeath, eattacker ); + + if ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie || isplayer( eattacker ) ) + self playrumbleonentity( "damage_heavy" ); + + canexert = 1; + + if ( isdefined( level.pers_upgrade_flopper ) && level.pers_upgrade_flopper ) + { + if ( isdefined( self.pers_upgrades_awarded["flopper"] ) && self.pers_upgrades_awarded["flopper"] ) + canexert = smeansofdeath != "MOD_PROJECTILE_SPLASH" && smeansofdeath != "MOD_GRENADE" && smeansofdeath != "MOD_GRENADE_SPLASH"; + } + + if ( isdefined( canexert ) && canexert ) + { + if ( randomintrange( 0, 1 ) == 0 ) + self thread maps\mp\zombies\_zm_audio::playerexert( "hitmed" ); + else + self thread maps\mp\zombies\_zm_audio::playerexert( "hitlrg" ); + } + } + } + + finaldamage = idamage; + + if ( is_placeable_mine( sweapon ) || sweapon == "freezegun_zm" || sweapon == "freezegun_upgraded_zm" ) + return 0; + + if ( isdefined( self.player_damage_override ) ) + self thread [[ self.player_damage_override ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); + + if ( smeansofdeath == "MOD_FALLING" ) + { + if ( self hasperk( "specialty_flakjacket" ) && isdefined( self.divetoprone ) && self.divetoprone == 1 ) + { + if ( isdefined( level.zombiemode_divetonuke_perk_func ) ) + [[ level.zombiemode_divetonuke_perk_func ]]( self, self.origin ); + + return 0; + } + + if ( isdefined( level.pers_upgrade_flopper ) && level.pers_upgrade_flopper ) + { + if ( self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_flopper_damage_check( smeansofdeath, idamage ) ) + return 0; + } + } + + if ( smeansofdeath == "MOD_PROJECTILE" || smeansofdeath == "MOD_PROJECTILE_SPLASH" || smeansofdeath == "MOD_GRENADE" || smeansofdeath == "MOD_GRENADE_SPLASH" ) + { + if ( self hasperk( "specialty_flakjacket" ) ) + return 0; + + if ( isdefined( level.pers_upgrade_flopper ) && level.pers_upgrade_flopper ) + { + if ( isdefined( self.pers_upgrades_awarded["flopper"] ) && self.pers_upgrades_awarded["flopper"] ) + return 0; + } + + if ( self.health > 75 && !( isdefined( self.is_zombie ) && self.is_zombie ) ) + return 75; + } + + if ( idamage < self.health ) + { + if ( isdefined( eattacker ) ) + { + if ( isdefined( level.custom_kill_damaged_vo ) ) + eattacker thread [[ level.custom_kill_damaged_vo ]]( self ); + else + eattacker.sound_damage_player = self; + + if ( isdefined( eattacker.has_legs ) && !eattacker.has_legs ) + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "crawl_hit" ); + else if ( isdefined( eattacker.animname ) && eattacker.animname == "monkey_zombie" ) + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "monkey_hit" ); + } + + return finaldamage; + } + + if ( isdefined( eattacker ) ) + { + if ( isdefined( eattacker.animname ) && eattacker.animname == "zombie_dog" ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "killed_by_zdog" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "killed_by_zdog" ); + } + else if ( isdefined( eattacker.is_avogadro ) && eattacker.is_avogadro ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "killed_by_avogadro", 0 ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "killed_by_avogadro" ); + } + } + + self thread clear_path_timers(); + + if ( level.intermission ) + level waittill( "forever" ); + + if ( level.scr_zm_ui_gametype == "zcleansed" && idamage > 0 ) + { + if ( isdefined( eattacker ) && isplayer( eattacker ) && eattacker.team != self.team && ( !( isdefined( self.laststand ) && self.laststand ) && !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || !isdefined( self.last_player_attacker ) ) ) + { + if ( isdefined( eattacker.maxhealth ) && ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie ) ) + eattacker.health = eattacker.maxhealth; + + if ( isdefined( level.player_kills_player ) ) + self thread [[ level.player_kills_player ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); + } + } + + if ( self.lives > 0 && self hasperk( "specialty_finalstand" ) ) + { + self.lives--; + + if ( isdefined( level.chugabud_laststand_func ) ) + { + self thread [[ level.chugabud_laststand_func ]](); + return 0; + } + } + + players = get_players(); + count = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] == self || players[i].is_zombie || players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() || players[i].sessionstate == "spectator" ) + count++; + } + + if ( count < players.size || isdefined( level._game_module_game_end_check ) && ![[ level._game_module_game_end_check ]]() ) + { + if ( isdefined( self.lives ) && self.lives > 0 && ( isdefined( level.force_solo_quick_revive ) && level.force_solo_quick_revive ) && self hasperk( "specialty_quickrevive" ) ) + self thread wait_and_revive(); + + return finaldamage; + } + + if ( players.size == 1 && flag( "solo_game" ) ) + { + if ( self.lives == 0 || !self hasperk( "specialty_quickrevive" ) ) + self.intermission = 1; + } + + solo_death = players.size == 1 && flag( "solo_game" ) && ( self.lives == 0 || !self hasperk( "specialty_quickrevive" ) ); + non_solo_death = count > 1 || players.size == 1 && !flag( "solo_game" ); + + if ( ( solo_death || non_solo_death ) && !( isdefined( level.no_end_game_check ) && level.no_end_game_check ) ) + { + level notify( "stop_suicide_trigger" ); + self thread maps\mp\zombies\_zm_laststand::playerlaststand( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ); + + if ( !isdefined( vdir ) ) + vdir = ( 1, 0, 0 ); + + self fakedamagefrom( vdir ); + + if ( isdefined( level.custom_player_fake_death ) ) + self thread [[ level.custom_player_fake_death ]]( vdir, smeansofdeath ); + else + self thread player_fake_death(); + } + + if ( count == players.size && !( isdefined( level.no_end_game_check ) && level.no_end_game_check ) ) + { + if ( players.size == 1 && flag( "solo_game" ) ) + { + if ( self.lives == 0 || !self hasperk( "specialty_quickrevive" ) ) + { + self.lives = 0; + level notify( "pre_end_game" ); + wait_network_frame(); + + if ( flag( "dog_round" ) ) + increment_dog_round_stat( "lost" ); + + level notify( "end_game" ); + } + else + return finaldamage; + } + else + { + level notify( "pre_end_game" ); + wait_network_frame(); + + if ( flag( "dog_round" ) ) + increment_dog_round_stat( "lost" ); + + level notify( "end_game" ); + } + + return 0; + } + else + { + surface = "flesh"; + return finaldamage; + } +} + +clear_path_timers() +{ + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( isdefined( zombie.favoriteenemy ) && zombie.favoriteenemy == self ) + zombie.zombie_path_timer = 0; + } +} + +check_player_damage_callbacks( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + if ( !isdefined( level.player_damage_callbacks ) ) + return idamage; + + for ( i = 0; i < level.player_damage_callbacks.size; i++ ) + { + newdamage = self [[ level.player_damage_callbacks[i] ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); + + if ( -1 != newdamage ) + return newdamage; + } + + return idamage; +} + +register_player_damage_callback( func ) +{ + if ( !isdefined( level.player_damage_callbacks ) ) + level.player_damage_callbacks = []; + + level.player_damage_callbacks[level.player_damage_callbacks.size] = func; +} + +wait_and_revive() +{ + flag_set( "wait_and_revive" ); + + if ( isdefined( self.waiting_to_revive ) && self.waiting_to_revive == 1 ) + return; + + if ( isdefined( self.pers_upgrades_awarded["perk_lose"] ) && self.pers_upgrades_awarded["perk_lose"] ) + self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_perk_lose_save(); + + self.waiting_to_revive = 1; + + if ( isdefined( level.exit_level_func ) ) + self thread [[ level.exit_level_func ]](); + else if ( get_players().size == 1 ) + self thread default_exit_level(); + + solo_revive_time = 10.0; + self.revive_hud settext( &"ZOMBIE_REVIVING_SOLO", self ); + self maps\mp\zombies\_zm_laststand::revive_hud_show_n_fade( solo_revive_time ); + flag_wait_or_timeout( "instant_revive", solo_revive_time ); + + if ( flag( "instant_revive" ) ) + self maps\mp\zombies\_zm_laststand::revive_hud_show_n_fade( 1.0 ); + + flag_clear( "wait_and_revive" ); + self maps\mp\zombies\_zm_laststand::auto_revive( self ); + self.lives--; + self.waiting_to_revive = 0; + + if ( isdefined( self.pers_upgrades_awarded["perk_lose"] ) && self.pers_upgrades_awarded["perk_lose"] ) + self thread maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_perk_lose_restore(); +} + +actor_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + if ( !isdefined( self ) || !isdefined( attacker ) ) + return damage; + + if ( weapon == "tazer_knuckles_zm" || weapon == "jetgun_zm" ) + self.knuckles_extinguish_flames = 1; + else if ( weapon != "none" ) + self.knuckles_extinguish_flames = undefined; + + if ( isdefined( attacker.animname ) && attacker.animname == "quad_zombie" ) + { + if ( isdefined( self.animname ) && self.animname == "quad_zombie" ) + return 0; + } + + if ( !isplayer( attacker ) && isdefined( self.non_attacker_func ) ) + { + if ( isdefined( self.non_attack_func_takes_attacker ) && self.non_attack_func_takes_attacker ) + return self [[ self.non_attacker_func ]]( damage, weapon, attacker ); + else + return self [[ self.non_attacker_func ]]( damage, weapon ); + } + + if ( !isplayer( attacker ) && !isplayer( self ) ) + return damage; + + if ( !isdefined( damage ) || !isdefined( meansofdeath ) ) + return damage; + + if ( meansofdeath == "" ) + return damage; + + old_damage = damage; + final_damage = damage; + + if ( isdefined( self.actor_damage_func ) ) + final_damage = [[ self.actor_damage_func ]]( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); +/# + if ( getdvarint( _hash_5ABA6445 ) ) + println( "Perk/> Damage Factor: " + final_damage / old_damage + " - Pre Damage: " + old_damage + " - Post Damage: " + final_damage ); +#/ + if ( attacker.classname == "script_vehicle" && isdefined( attacker.owner ) ) + attacker = attacker.owner; + + if ( isdefined( self.in_water ) && self.in_water ) + { + if ( int( final_damage ) >= self.health ) + self.water_damage = 1; + } + + attacker thread maps\mp\gametypes_zm\_weapons::checkhit( weapon ); + + if ( attacker maps\mp\zombies\_zm_pers_upgrades_functions::pers_mulit_kill_headshot_active() && is_headshot( weapon, shitloc, meansofdeath ) ) + final_damage *= 2; + + if ( isdefined( level.headshots_only ) && level.headshots_only && isdefined( attacker ) && isplayer( attacker ) ) + { + if ( meansofdeath == "MOD_MELEE" && ( shitloc == "head" || shitloc == "helmet" ) ) + return int( final_damage ); + + if ( is_explosive_damage( meansofdeath ) ) + return int( final_damage ); + else if ( !is_headshot( weapon, shitloc, meansofdeath ) ) + return 0; + } + + return int( final_damage ); +} + +actor_damage_override_wrapper( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + damage_override = self actor_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + + if ( damage_override < self.health || !( isdefined( self.dont_die_on_me ) && self.dont_die_on_me ) ) + self finishactordamage( inflictor, attacker, damage_override, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); +} + +actor_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) +{ + if ( game["state"] == "postgame" ) + return; + + if ( isai( attacker ) && isdefined( attacker.script_owner ) ) + { + if ( attacker.script_owner.team != self.aiteam ) + attacker = attacker.script_owner; + } + + if ( attacker.classname == "script_vehicle" && isdefined( attacker.owner ) ) + attacker = attacker.owner; + + if ( isdefined( attacker ) && isplayer( attacker ) ) + { + multiplier = 1; + + if ( is_headshot( sweapon, shitloc, smeansofdeath ) ) + multiplier = 1.5; + + type = undefined; + + if ( isdefined( self.animname ) ) + { + switch ( self.animname ) + { + case "quad_zombie": + type = "quadkill"; + break; + case "ape_zombie": + type = "apekill"; + break; + case "zombie": + type = "zombiekill"; + break; + case "zombie_dog": + type = "dogkill"; + break; + } + } + } + + if ( isdefined( self.is_ziplining ) && self.is_ziplining ) + self.deathanim = undefined; + + if ( isdefined( self.actor_killed_override ) ) + self [[ self.actor_killed_override ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ); +} + +round_end_monitor() +{ + while ( true ) + { + level waittill( "end_of_round" ); + + maps\mp\_demo::bookmark( "zm_round_end", gettime(), undefined, undefined, 1 ); + bbpostdemostreamstatsforround( level.round_number ); + wait 0.05; + } +} + +end_game() +{ + level waittill( "end_game" ); + + check_end_game_intermission_delay(); +/# + println( "end_game TRIGGERED " ); +#/ + clientnotify( "zesn" ); + + if ( isdefined( level.sndgameovermusicoverride ) ) + level thread maps\mp\zombies\_zm_audio::change_zombie_music( level.sndgameovermusicoverride ); + else + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "game_over" ); + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + setclientsysstate( "lsm", "0", players[i] ); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] player_is_in_laststand() ) + { + players[i] recordplayerdeathzombies(); + players[i] maps\mp\zombies\_zm_stats::increment_player_stat( "deaths" ); + players[i] maps\mp\zombies\_zm_stats::increment_client_stat( "deaths" ); + players[i] maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat(); + } + + if ( isdefined( players[i].revivetexthud ) ) + players[i].revivetexthud destroy(); + } + + stopallrumbles(); + level.intermission = 1; + level.zombie_vars["zombie_powerup_insta_kill_time"] = 0; + level.zombie_vars["zombie_powerup_fire_sale_time"] = 0; + level.zombie_vars["zombie_powerup_point_doubler_time"] = 0; + wait 0.1; + game_over = []; + survived = []; + players = get_players(); + setmatchflag( "disableIngameMenu", 1 ); + + foreach ( player in players ) + { + player closemenu(); + player closeingamemenu(); + } + + if ( !isdefined( level._supress_survived_screen ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( level.custom_game_over_hud_elem ) ) + game_over[i] = [[ level.custom_game_over_hud_elem ]]( players[i] ); + else + { + game_over[i] = newclienthudelem( players[i] ); + game_over[i].alignx = "center"; + game_over[i].aligny = "middle"; + game_over[i].horzalign = "center"; + game_over[i].vertalign = "middle"; + game_over[i].y -= 130; + game_over[i].foreground = 1; + game_over[i].fontscale = 3; + game_over[i].alpha = 0; + game_over[i].color = ( 1, 1, 1 ); + game_over[i].hidewheninmenu = 1; + game_over[i] settext( &"ZOMBIE_GAME_OVER" ); + game_over[i] fadeovertime( 1 ); + game_over[i].alpha = 1; + + if ( players[i] issplitscreen() ) + { + game_over[i].fontscale = 2; + game_over[i].y += 40; + } + } + + survived[i] = newclienthudelem( players[i] ); + survived[i].alignx = "center"; + survived[i].aligny = "middle"; + survived[i].horzalign = "center"; + survived[i].vertalign = "middle"; + survived[i].y -= 100; + survived[i].foreground = 1; + survived[i].fontscale = 2; + survived[i].alpha = 0; + survived[i].color = ( 1, 1, 1 ); + survived[i].hidewheninmenu = 1; + + if ( players[i] issplitscreen() ) + { + survived[i].fontscale = 1.5; + survived[i].y += 40; + } + + if ( level.round_number < 2 ) + { + if ( level.script == "zombie_moon" ) + { + if ( !isdefined( level.left_nomans_land ) ) + { + nomanslandtime = level.nml_best_time; + player_survival_time = int( nomanslandtime / 1000 ); + player_survival_time_in_mins = maps\mp\zombies\_zm::to_mins( player_survival_time ); + survived[i] settext( &"ZOMBIE_SURVIVED_NOMANS", player_survival_time_in_mins ); + } + else if ( level.left_nomans_land == 2 ) + survived[i] settext( &"ZOMBIE_SURVIVED_ROUND" ); + } + else + survived[i] settext( &"ZOMBIE_SURVIVED_ROUND" ); + } + else + survived[i] settext( &"ZOMBIE_SURVIVED_ROUNDS", level.round_number ); + + survived[i] fadeovertime( 1 ); + survived[i].alpha = 1; + } + } + + if ( isdefined( level.custom_end_screen ) ) + level [[ level.custom_end_screen ]](); + + for ( i = 0; i < players.size; i++ ) + { + players[i] setclientammocounterhide( 1 ); + players[i] setclientminiscoreboardhide( 1 ); + } + + uploadstats(); + maps\mp\zombies\_zm_stats::update_players_stats_at_match_end( players ); + maps\mp\zombies\_zm_stats::update_global_counters_on_match_end(); + wait 1; + wait 3.95; + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( player.sessionstate ) && player.sessionstate == "spectator" ) + player.sessionstate = "playing"; + } + + wait 0.05; + players = get_players(); + + if ( !isdefined( level._supress_survived_screen ) ) + { + for ( i = 0; i < players.size; i++ ) + { + survived[i] destroy(); + game_over[i] destroy(); + } + } + else + { + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].survived_hud ) ) + players[i].survived_hud destroy(); + + if ( isdefined( players[i].game_over_hud ) ) + players[i].game_over_hud destroy(); + } + } + + intermission(); + wait( level.zombie_vars["zombie_intermission_time"] ); + level notify( "stop_intermission" ); + array_thread( get_players(), ::player_exit_level ); + bbprint( "zombie_epilogs", "rounds %d", level.round_number ); + wait 1.5; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] cameraactivate( 0 ); + + exitlevel( 0 ); + wait 666; +} + +disable_end_game_intermission( delay ) +{ + level.disable_intermission = 1; + wait( delay ); + level.disable_intermission = undefined; +} + +check_end_game_intermission_delay() +{ + if ( isdefined( level.disable_intermission ) ) + { + while ( true ) + { + if ( !isdefined( level.disable_intermission ) ) + break; + + wait 0.01; + } + } +} + +upload_leaderboards() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] uploadleaderboards(); +} + +initializestattracking() +{ + level.global_zombies_killed = 0; + level.zombies_timeout_spawn = 0; + level.zombies_timeout_playspace = 0; + level.zombies_timeout_undamaged = 0; + level.zombie_player_killed_count = 0; + level.zombie_trap_killed_count = 0; + level.zombie_pathing_failed = 0; + level.zombie_breadcrumb_failed = 0; +} + +uploadglobalstatcounters() +{ + incrementcounter( "global_zombies_killed", level.global_zombies_killed ); + incrementcounter( "global_zombies_killed_by_players", level.zombie_player_killed_count ); + incrementcounter( "global_zombies_killed_by_traps", level.zombie_trap_killed_count ); +} + +player_fake_death() +{ + level notify( "fake_death" ); + self notify( "fake_death" ); + self takeallweapons(); + self allowstand( 0 ); + self allowcrouch( 0 ); + self allowprone( 1 ); + self.ignoreme = 1; + self enableinvulnerability(); + wait 1; + self freezecontrols( 1 ); +} + +player_exit_level() +{ + self allowstand( 1 ); + self allowcrouch( 0 ); + self allowprone( 0 ); + + if ( isdefined( self.game_over_bg ) ) + { + self.game_over_bg.foreground = 1; + self.game_over_bg.sort = 100; + self.game_over_bg fadeovertime( 1 ); + self.game_over_bg.alpha = 1; + } +} + +player_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + level waittill( "forever" ); +} + +player_zombie_breadcrumb() +{ + self notify( "stop_player_zombie_breadcrumb" ); + self endon( "stop_player_zombie_breadcrumb" ); + self endon( "disconnect" ); + self endon( "spawned_spectator" ); + level endon( "intermission" ); + self.zombie_breadcrumbs = []; + self.zombie_breadcrumb_distance = 576; + self.zombie_breadcrumb_area_num = 3; + self.zombie_breadcrumb_area_distance = 16; + self store_crumb( self.origin ); + last_crumb = self.origin; + self thread debug_breadcrumbs(); + + while ( true ) + { + wait_time = 0.1; + + if ( self.ignoreme ) + { + wait( wait_time ); + continue; + } + + store_crumb = 1; + airborne = 0; + crumb = self.origin; + + if ( !self isonground() && self isinvehicle() ) + { + trace = bullettrace( self.origin + vectorscale( ( 0, 0, 1 ), 10.0 ), self.origin, 0, undefined ); + crumb = trace["position"]; + } + + if ( !airborne && distancesquared( crumb, last_crumb ) < self.zombie_breadcrumb_distance ) + store_crumb = 0; + + if ( airborne && self isonground() ) + { + store_crumb = 1; + airborne = 0; + } + + if ( isdefined( level.custom_breadcrumb_store_func ) ) + store_crumb = self [[ level.custom_breadcrumb_store_func ]]( store_crumb ); + + if ( isdefined( level.custom_airborne_func ) ) + airborne = self [[ level.custom_airborne_func ]]( airborne ); + + if ( store_crumb ) + { + debug_print( "Player is storing breadcrumb " + crumb ); + + if ( isdefined( self.node ) ) + debug_print( "has closest node " ); + + last_crumb = crumb; + self store_crumb( crumb ); + } + + wait( wait_time ); + } +} + +store_crumb( origin ) +{ + offsets = []; + height_offset = 32; + index = 0; + + for ( j = 1; j <= self.zombie_breadcrumb_area_num; j++ ) + { + offset = j * self.zombie_breadcrumb_area_distance; + offsets[0] = ( origin[0] - offset, origin[1], origin[2] ); + offsets[1] = ( origin[0] + offset, origin[1], origin[2] ); + offsets[2] = ( origin[0], origin[1] - offset, origin[2] ); + offsets[3] = ( origin[0], origin[1] + offset, origin[2] ); + offsets[4] = ( origin[0] - offset, origin[1], origin[2] + height_offset ); + offsets[5] = ( origin[0] + offset, origin[1], origin[2] + height_offset ); + offsets[6] = ( origin[0], origin[1] - offset, origin[2] + height_offset ); + offsets[7] = ( origin[0], origin[1] + offset, origin[2] + height_offset ); + + for ( i = 0; i < offsets.size; i++ ) + { + self.zombie_breadcrumbs[index] = offsets[i]; + index++; + } + } +} + +to_mins( seconds ) +{ + hours = 0; + minutes = 0; + + if ( seconds > 59 ) + { + minutes = int( seconds / 60 ); + seconds = int( seconds * 1000 ) % 60000; + seconds *= 0.001; + + if ( minutes > 59 ) + { + hours = int( minutes / 60 ); + minutes = int( minutes * 1000 ) % 60000; + minutes *= 0.001; + } + } + + if ( hours < 10 ) + hours = "0" + hours; + + if ( minutes < 10 ) + minutes = "0" + minutes; + + seconds = int( seconds ); + + if ( seconds < 10 ) + seconds = "0" + seconds; + + combined = "" + hours + ":" + minutes + ":" + seconds; + return combined; +} + +intermission() +{ + level.intermission = 1; + level notify( "intermission" ); + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + setclientsysstate( "levelNotify", "zi", players[i] ); + players[i] setclientthirdperson( 0 ); + players[i] resetfov(); + players[i].health = 100; + players[i] thread [[ level.custom_intermission ]](); + players[i] stopsounds(); + } + + wait 0.25; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + setclientsysstate( "lsm", "0", players[i] ); + + level thread zombie_game_over_death(); +} + +zombie_game_over_death() +{ + zombies = getaiarray( level.zombie_team ); + + for ( i = 0; i < zombies.size; i++ ) + { + if ( !isalive( zombies[i] ) ) + continue; + + zombies[i] setgoalpos( zombies[i].origin ); + } + + for ( i = 0; i < zombies.size; i++ ) + { + if ( !isalive( zombies[i] ) ) + continue; + + if ( isdefined( zombies[i].ignore_game_over_death ) && zombies[i].ignore_game_over_death ) + continue; + + wait( 0.5 + randomfloat( 2 ) ); + + if ( isdefined( zombies[i] ) ) + { + zombies[i] maps\mp\zombies\_zm_spawner::zombie_head_gib(); + zombies[i] dodamage( zombies[i].health + 666, zombies[i].origin ); + } + } +} + +player_intermission() +{ + self closemenu(); + self closeingamemenu(); + level endon( "stop_intermission" ); + self endon( "disconnect" ); + self endon( "death" ); + self notify( "_zombie_game_over" ); + self.score = self.score_total; + self.sessionstate = "intermission"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + points = getstructarray( "intermission", "targetname" ); + + if ( !isdefined( points ) || points.size == 0 ) + { + points = getentarray( "info_intermission", "classname" ); + + if ( points.size < 1 ) + { +/# + println( "NO info_intermission POINTS IN MAP" ); +#/ + return; + } + } + + self.game_over_bg = newclienthudelem( self ); + self.game_over_bg.horzalign = "fullscreen"; + self.game_over_bg.vertalign = "fullscreen"; + self.game_over_bg setshader( "black", 640, 480 ); + self.game_over_bg.alpha = 1; + org = undefined; + + while ( true ) + { + points = array_randomize( points ); + + for ( i = 0; i < points.size; i++ ) + { + point = points[i]; + + if ( !isdefined( org ) ) + self spawn( point.origin, point.angles ); + + if ( isdefined( points[i].target ) ) + { + if ( !isdefined( org ) ) + { + org = spawn( "script_model", self.origin + vectorscale( ( 0, 0, -1 ), 60.0 ) ); + org setmodel( "tag_origin" ); + } + + org.origin = points[i].origin; + org.angles = points[i].angles; + + for ( j = 0; j < get_players().size; j++ ) + { + player = get_players()[j]; + player camerasetposition( org ); + player camerasetlookat(); + player cameraactivate( 1 ); + } + + speed = 20; + + if ( isdefined( points[i].speed ) ) + speed = points[i].speed; + + target_point = getstruct( points[i].target, "targetname" ); + dist = distance( points[i].origin, target_point.origin ); + time = dist / speed; + q_time = time * 0.25; + + if ( q_time > 1 ) + q_time = 1; + + self.game_over_bg fadeovertime( q_time ); + self.game_over_bg.alpha = 0; + org moveto( target_point.origin, time, q_time, q_time ); + org rotateto( target_point.angles, time, q_time, q_time ); + wait( time - q_time ); + self.game_over_bg fadeovertime( q_time ); + self.game_over_bg.alpha = 1; + wait( q_time ); + continue; + } + + self.game_over_bg fadeovertime( 1 ); + self.game_over_bg.alpha = 0; + wait 5; + self.game_over_bg thread fade_up_over_time( 1 ); + } + } +} + +fade_up_over_time( t ) +{ + self fadeovertime( t ); + self.alpha = 1; +} + +default_exit_level() +{ + zombies = getaiarray( level.zombie_team ); + + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i].ignore_solo_last_stand ) && zombies[i].ignore_solo_last_stand ) + continue; + + if ( isdefined( zombies[i].find_exit_point ) ) + { + zombies[i] thread [[ zombies[i].find_exit_point ]](); + continue; + } + + if ( zombies[i].ignoreme ) + { + zombies[i] thread default_delayed_exit(); + continue; + } + + zombies[i] thread default_find_exit_point(); + } +} + +default_delayed_exit() +{ + self endon( "death" ); + + while ( true ) + { + if ( !flag( "wait_and_revive" ) ) + return; + + if ( !self.ignoreme ) + break; + + wait 0.1; + } + + self thread default_find_exit_point(); +} + +default_find_exit_point() +{ + self endon( "death" ); + player = get_players()[0]; + dist_zombie = 0; + dist_player = 0; + dest = 0; + away = vectornormalize( self.origin - player.origin ); + endpos = self.origin + vectorscale( away, 600 ); + locs = array_randomize( level.enemy_dog_locations ); + + for ( i = 0; i < locs.size; i++ ) + { + dist_zombie = distancesquared( locs[i].origin, endpos ); + dist_player = distancesquared( locs[i].origin, player.origin ); + + if ( dist_zombie < dist_player ) + { + dest = i; + break; + } + } + + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + + if ( isdefined( locs[dest] ) ) + self setgoalpos( locs[dest].origin ); + + while ( true ) + { + b_passed_override = 1; + + if ( isdefined( level.default_find_exit_position_override ) ) + b_passed_override = [[ level.default_find_exit_position_override ]](); + + if ( !flag( "wait_and_revive" ) && b_passed_override ) + break; + + wait 0.1; + } + + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); +} + +play_level_start_vox_delayed() +{ + wait 3; + players = get_players(); + num = randomintrange( 0, players.size ); + players[num] maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "intro" ); +} + +register_sidequest( id, sidequest_stat ) +{ + if ( !isdefined( level.zombie_sidequest_stat ) ) + { + level.zombie_sidequest_previously_completed = []; + level.zombie_sidequest_stat = []; + } + + level.zombie_sidequest_stat[id] = sidequest_stat; + flag_wait( "start_zombie_round_logic" ); + level.zombie_sidequest_previously_completed[id] = 0; + + if ( level.systemlink || getdvarint( "splitscreen_playerCount" ) == get_players().size ) + return; + + if ( isdefined( level.zm_disable_recording_stats ) && level.zm_disable_recording_stats ) + return; + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] maps\mp\zombies\_zm_stats::get_global_stat( level.zombie_sidequest_stat[id] ) ) + { + level.zombie_sidequest_previously_completed[id] = 1; + return; + } + } +} + +is_sidequest_previously_completed( id ) +{ + return isdefined( level.zombie_sidequest_previously_completed[id] ) && level.zombie_sidequest_previously_completed[id]; +} + +set_sidequest_completed( id ) +{ + level notify( "zombie_sidequest_completed", id ); + level.zombie_sidequest_previously_completed[id] = 1; + + if ( level.systemlink ) + return; + + if ( getdvarint( "splitscreen_playerCount" ) == get_players().size ) + return; + + if ( isdefined( level.zm_disable_recording_stats ) && level.zm_disable_recording_stats ) + return; + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( level.zombie_sidequest_stat[id] ) ) + players[i] maps\mp\zombies\_zm_stats::add_global_stat( level.zombie_sidequest_stat[id], 1 ); + } +} + +playswipesound( mod, attacker ) +{ + if ( isdefined( attacker.is_zombie ) && attacker.is_zombie ) + { + self playsoundtoplayer( "evt_player_swiped", self ); + return; + } +} + +precache_zombie_leaderboards() +{ + if ( sessionmodeissystemlink() ) + return; + + globalleaderboards = "LB_ZM_GB_BULLETS_FIRED_AT "; + globalleaderboards += "LB_ZM_GB_BULLETS_HIT_AT "; + globalleaderboards += "LB_ZM_GB_DEATHS_AT "; + globalleaderboards += "LB_ZM_GB_DISTANCE_TRAVELED_AT "; + globalleaderboards += "LB_ZM_GB_DOORS_PURCHASED_AT "; + globalleaderboards += "LB_ZM_GB_DOWNS_AT "; + globalleaderboards += "LB_ZM_GB_GIBS_AT "; + globalleaderboards += "LB_ZM_GB_GRENADE_KILLS_AT "; + globalleaderboards += "LB_ZM_GB_HEADSHOTS_AT "; + globalleaderboards += "LB_ZM_GB_KILLS_AT "; + globalleaderboards += "LB_ZM_GB_PERKS_DRANK_AT "; + globalleaderboards += "LB_ZM_GB_REVIVES_AT "; + + if ( sessionmodeisprivateonlinegame() ) + { + precacheleaderboards( globalleaderboards ); + return; + } + + maplocationname = level.scr_zm_map_start_location; + + if ( ( maplocationname == "default" || maplocationname == "" ) && isdefined( level.default_start_location ) ) + maplocationname = level.default_start_location; + + if ( ( level.scr_zm_ui_gametype_group == "zclassic" || level.scr_zm_ui_gametype_group == "zsurvival" ) && level.scr_zm_ui_gametype != "zcleansed" ) + { + expectedplayernum = getnumexpectedplayers(); + + if ( expectedplayernum == 1 ) + gamemodeleaderboard = "LB_ZM_GM_" + level.scr_zm_ui_gametype + "_" + maplocationname + "_" + expectedplayernum + "PLAYER"; + else + gamemodeleaderboard = "LB_ZM_GM_" + level.scr_zm_ui_gametype + "_" + maplocationname + "_" + expectedplayernum + "PLAYERS"; + } + else + gamemodeleaderboard = "LB_ZM_GM_" + level.scr_zm_ui_gametype + "_" + maplocationname; + + precacheleaderboards( globalleaderboards + gamemodeleaderboard ); +} + +zm_on_player_connect() +{ + if ( level.passed_introscreen ) + self setclientuivisibilityflag( "hud_visible", 1 ); + + thread refresh_player_navcard_hud(); + self thread watchdisconnect(); +} + +zm_on_player_disconnect() +{ + thread refresh_player_navcard_hud(); +} + +watchdisconnect() +{ + self notify( "watchDisconnect" ); + self endon( "watchDisconnect" ); + + self waittill( "disconnect" ); + + zm_on_player_disconnect(); +} + +increment_dog_round_stat( stat ) +{ + players = get_players(); + + foreach ( player in players ) + player maps\mp\zombies\_zm_stats::increment_client_stat( "zdog_rounds_" + stat ); +} + +setup_player_navcard_hud() +{ + flag_wait( "start_zombie_round_logic" ); + thread refresh_player_navcard_hud(); +} + +refresh_player_navcard_hud() +{ + if ( !isdefined( level.navcards ) ) + return; + + players = get_players(); + + foreach ( player in players ) + { + navcard_bits = 0; + + for ( i = 0; i < level.navcards.size; i++ ) + { + hasit = player maps\mp\zombies\_zm_stats::get_global_stat( level.navcards[i] ); + + if ( isdefined( player.navcard_grabbed ) && player.navcard_grabbed == level.navcards[i] ) + hasit = 1; + + if ( hasit ) + navcard_bits += ( 1 << i ); + } + + wait_network_frame(); + player setclientfield( "navcard_held", 0 ); + + if ( navcard_bits > 0 ) + { + wait_network_frame(); + player setclientfield( "navcard_held", navcard_bits ); + } + } +} + +check_quickrevive_for_hotjoin( disconnecting_player ) +{ + solo_mode = 0; + subtract_num = 0; + should_update = 0; + + if ( isdefined( disconnecting_player ) ) + subtract_num = 1; + + players = get_players(); + + if ( players.size - subtract_num == 1 || isdefined( level.force_solo_quick_revive ) && level.force_solo_quick_revive ) + { + solo_mode = 1; + + if ( !flag( "solo_game" ) ) + should_update = 1; + + flag_set( "solo_game" ); + } + else + { + if ( flag( "solo_game" ) ) + should_update = 1; + + flag_clear( "solo_game" ); + } + + level.using_solo_revive = solo_mode; + level.revive_machine_is_solo = solo_mode; + set_default_laststand_pistol( solo_mode ); + + if ( should_update && isdefined( level.quick_revive_machine ) ) + update_quick_revive( solo_mode ); +} + +set_default_laststand_pistol( solo_mode ) +{ + if ( !solo_mode ) + level.laststandpistol = level.default_laststandpistol; + else + level.laststandpistol = level.default_solo_laststandpistol; +} + +update_quick_revive( solo_mode = 0 ) +{ + clip = undefined; + + if ( isdefined( level.quick_revive_machine_clip ) ) + clip = level.quick_revive_machine_clip; + + level.quick_revive_machine thread maps\mp\zombies\_zm_perks::reenable_quickrevive( clip, solo_mode ); +} + +player_too_many_players_check() +{ + max_players = 4; + + if ( level.scr_zm_ui_gametype == "zgrief" || level.scr_zm_ui_gametype == "zmeat" ) + max_players = 8; + + if ( get_players().size > max_players ) + { + maps\mp\zombies\_zm_game_module::freeze_players( 1 ); + level notify( "end_game" ); + } +} diff --git a/ZM/Core/maps/mp/zombies/_zm_ai_basic.gsc b/ZM/Core/maps/mp/zombies/_zm_ai_basic.gsc new file mode 100644 index 0000000..96dcfee --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_ai_basic.gsc @@ -0,0 +1,554 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\animscripts\zm_run; +#include maps\mp\animscripts\zm_shared; + +find_flesh() +{ + self endon( "death" ); + level endon( "intermission" ); + self endon( "stop_find_flesh" ); + + if ( level.intermission ) + return; + + self.ai_state = "find_flesh"; + self.helitarget = 1; + self.ignoreme = 0; + self.nododgemove = 1; + self.ignore_player = []; + self maps\mp\zombies\_zm_spawner::zombie_history( "find flesh -> start" ); + self.goalradius = 32; + + if ( isdefined( self.custom_goalradius_override ) ) + self.goalradius = self.custom_goalradius_override; + + while ( true ) + { + zombie_poi = undefined; + + if ( isdefined( level.zombietheaterteleporterseeklogicfunc ) ) + self [[ level.zombietheaterteleporterseeklogicfunc ]](); + + if ( isdefined( level._poi_override ) ) + zombie_poi = self [[ level._poi_override ]](); + + if ( !isdefined( zombie_poi ) ) + zombie_poi = self get_zombie_point_of_interest( self.origin ); + + players = get_players(); + + if ( !isdefined( self.ignore_player ) || players.size == 1 ) + self.ignore_player = []; + else if ( !isdefined( level._should_skip_ignore_player_logic ) || ![[ level._should_skip_ignore_player_logic ]]() ) + { + i = 0; + + while ( i < self.ignore_player.size ) + { + if ( isdefined( self.ignore_player[i] ) && isdefined( self.ignore_player[i].ignore_counter ) && self.ignore_player[i].ignore_counter > 3 ) + { + self.ignore_player[i].ignore_counter = 0; + self.ignore_player = arrayremovevalue( self.ignore_player, self.ignore_player[i] ); + + if ( !isdefined( self.ignore_player ) ) + self.ignore_player = []; + + i = 0; + continue; + } + + i++; + } + } + + player = get_closest_valid_player( self.origin, self.ignore_player ); + + if ( !isdefined( player ) && !isdefined( zombie_poi ) ) + { + self maps\mp\zombies\_zm_spawner::zombie_history( "find flesh -> can't find player, continue" ); + + if ( isdefined( self.ignore_player ) ) + { + if ( isdefined( level._should_skip_ignore_player_logic ) && [[ level._should_skip_ignore_player_logic ]]() ) + { + wait 1; + continue; + } + + self.ignore_player = []; + } + + wait 1; + continue; + } + + if ( !isdefined( level.check_for_alternate_poi ) || ![[ level.check_for_alternate_poi ]]() ) + { + self.enemyoverride = zombie_poi; + self.favoriteenemy = player; + } + + self thread zombie_pathing(); + + if ( players.size > 1 ) + { + for ( i = 0; i < self.ignore_player.size; i++ ) + { + if ( isdefined( self.ignore_player[i] ) ) + { + if ( !isdefined( self.ignore_player[i].ignore_counter ) ) + { + self.ignore_player[i].ignore_counter = 0; + continue; + } + + self.ignore_player[i].ignore_counter += 1; + } + } + } + + self thread attractors_generated_listener(); + + if ( isdefined( level._zombie_path_timer_override ) ) + self.zombie_path_timer = [[ level._zombie_path_timer_override ]](); + else + self.zombie_path_timer = gettime() + randomfloatrange( 1, 3 ) * 1000; + + while ( gettime() < self.zombie_path_timer ) + wait 0.1; + + self notify( "path_timer_done" ); + self maps\mp\zombies\_zm_spawner::zombie_history( "find flesh -> bottom of loop" ); + debug_print( "Zombie is re-acquiring enemy, ending breadcrumb search" ); + self notify( "zombie_acquire_enemy" ); + } +} + +init_inert_zombies() +{ + level init_inert_substates(); +} + +init_inert_substates() +{ + level.inert_substates = []; + level.inert_substates[level.inert_substates.size] = "inert1"; + level.inert_substates[level.inert_substates.size] = "inert2"; + level.inert_substates[level.inert_substates.size] = "inert3"; + level.inert_substates[level.inert_substates.size] = "inert4"; + level.inert_substates[level.inert_substates.size] = "inert5"; + level.inert_substates[level.inert_substates.size] = "inert6"; + level.inert_substates[level.inert_substates.size] = "inert7"; + level.inert_substates = array_randomize( level.inert_substates ); + level.inert_substate_index = 0; + level.inert_trans_walk = []; + level.inert_trans_walk[level.inert_trans_walk.size] = "inert_2_walk_1"; + level.inert_trans_walk[level.inert_trans_walk.size] = "inert_2_walk_2"; + level.inert_trans_walk[level.inert_trans_walk.size] = "inert_2_walk_3"; + level.inert_trans_walk[level.inert_trans_walk.size] = "inert_2_walk_4"; + level.inert_trans_run = []; + level.inert_trans_run[level.inert_trans_run.size] = "inert_2_run_1"; + level.inert_trans_run[level.inert_trans_run.size] = "inert_2_run_2"; + level.inert_trans_sprint = []; + level.inert_trans_sprint[level.inert_trans_sprint.size] = "inert_2_sprint_1"; + level.inert_trans_sprint[level.inert_trans_sprint.size] = "inert_2_sprint_2"; + level.inert_crawl_substates = []; + level.inert_crawl_substates[level.inert_crawl_substates.size] = "inert1"; + level.inert_crawl_substates[level.inert_crawl_substates.size] = "inert2"; + level.inert_crawl_substates[level.inert_crawl_substates.size] = "inert3"; + level.inert_crawl_substates[level.inert_crawl_substates.size] = "inert4"; + level.inert_crawl_substates[level.inert_crawl_substates.size] = "inert5"; + level.inert_crawl_substates[level.inert_crawl_substates.size] = "inert6"; + level.inert_crawl_substates[level.inert_crawl_substates.size] = "inert7"; + level.inert_crawl_trans_walk = []; + level.inert_crawl_trans_walk[level.inert_crawl_trans_walk.size] = "inert_2_walk_1"; + level.inert_crawl_trans_run = []; + level.inert_crawl_trans_run[level.inert_crawl_trans_run.size] = "inert_2_run_1"; + level.inert_crawl_trans_run[level.inert_crawl_trans_run.size] = "inert_2_run_2"; + level.inert_crawl_trans_sprint = []; + level.inert_crawl_trans_sprint[level.inert_crawl_trans_sprint.size] = "inert_2_sprint_1"; + level.inert_crawl_trans_sprint[level.inert_crawl_trans_sprint.size] = "inert_2_sprint_2"; + level.inert_crawl_substates = array_randomize( level.inert_crawl_substates ); + level.inert_crawl_substate_index = 0; +} + +get_inert_substate() +{ + substate = level.inert_substates[level.inert_substate_index]; + level.inert_substate_index++; + + if ( level.inert_substate_index >= level.inert_substates.size ) + { + level.inert_substates = array_randomize( level.inert_substates ); + level.inert_substate_index = 0; + } + + return substate; +} + +get_inert_crawl_substate() +{ + substate = level.inert_crawl_substates[level.inert_crawl_substate_index]; + level.inert_crawl_substate_index++; + + if ( level.inert_crawl_substate_index >= level.inert_crawl_substates.size ) + { + level.inert_crawl_substates = array_randomize( level.inert_crawl_substates ); + level.inert_crawl_substate_index = 0; + } + + return substate; +} + +start_inert( in_place ) +{ + self endon( "death" ); + + if ( isdefined( self.is_inert ) && self.is_inert ) + { + self maps\mp\zombies\_zm_spawner::zombie_history( "is_inert already set " + gettime() ); + return; + } + + self.is_inert = 1; + self notify( "start_inert" ); + self maps\mp\zombies\_zm_spawner::zombie_eye_glow_stop(); + self maps\mp\zombies\_zm_spawner::zombie_history( "is_inert set " + gettime() ); + self playsound( "zmb_zombie_go_inert" ); + + if ( isdefined( self.barricade_enter ) && self.barricade_enter ) + { + while ( isdefined( self.barricade_enter ) && self.barricade_enter ) + wait 0.1; + } + else if ( isdefined( self.ai_state ) && self.ai_state == "zombie_goto_entrance" ) + { + self notify( "stop_zombie_goto_entrance" ); + self maps\mp\zombies\_zm_spawner::reset_attack_spot(); + } + + if ( isdefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area ) + { + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + } + else + in_place = 1; + + if ( isdefined( self.in_the_ground ) && self.in_the_ground ) + { + self waittill( "risen", find_flesh_struct_string ); + + if ( self maps\mp\zombies\_zm_spawner::should_skip_teardown( find_flesh_struct_string ) ) + { + if ( !( isdefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area ) ) + self waittill( "completed_emerging_into_playable_area" ); + + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + } + } + + if ( isdefined( self.is_traversing ) && self.is_traversing ) + { + while ( self isinscriptedstate() ) + wait 0.1; + } + + if ( isdefined( self.doing_equipment_attack ) && self.doing_equipment_attack ) + self stopanimscripted(); + + if ( isdefined( self.inert_delay ) ) + { + self [[ self.inert_delay ]](); + self maps\mp\zombies\_zm_spawner::zombie_history( "inert_delay done " + gettime() ); + } + + self inert_think( in_place ); +} + +inert_think( in_place ) +{ + self endon( "death" ); + self.ignoreall = 1; + self animmode( "normal" ); + + if ( self.has_legs ) + { + if ( isdefined( in_place ) && in_place ) + { + self setgoalpos( self.origin ); + + if ( randomint( 100 ) > 50 ) + { + self maps\mp\zombies\_zm_spawner::zombie_history( "inert 1 " + gettime() ); + self setanimstatefromasd( "zm_inert", "inert1" ); + } + else + { + self maps\mp\zombies\_zm_spawner::zombie_history( "inert 2 " + gettime() ); + self setanimstatefromasd( "zm_inert", "inert2" ); + } + + self.in_place = 1; + } + else + { + substate = get_inert_substate(); + + if ( isdefined( level.inert_substate_override ) ) + substate = self [[ level.inert_substate_override ]]( substate ); + + self setanimstatefromasd( "zm_inert", substate ); + self maps\mp\zombies\_zm_spawner::zombie_history( "zm_inert ASD " + gettime() ); + + if ( substate == "inert3" || substate == "inert4" || substate == "inert5" || substate == "inert6" ) + self thread inert_watch_goal(); + else + self.in_place = 1; + } + } + else + { + self setanimstatefromasd( "zm_inert_crawl", get_inert_crawl_substate() ); + self maps\mp\zombies\_zm_spawner::zombie_history( "zm_inert_crawl ASD " + gettime() ); + } + + self thread inert_wakeup(); + + self waittill( "stop_zombie_inert" ); + + self maps\mp\zombies\_zm_spawner::zombie_history( "stop_zombie_inert " + gettime() ); + self playsound( "zmb_zombie_end_inert" ); + self inert_transition(); + self maps\mp\zombies\_zm_spawner::zombie_history( "inert transition done" ); + + if ( isdefined( self.ai_state ) && self.ai_state == "zombie_goto_entrance" ) + self thread maps\mp\zombies\_zm_spawner::zombie_goto_entrance( self.first_node ); + + if ( isdefined( self.inert_wakeup_override ) ) + self [[ self.inert_wakeup_override ]](); + else if ( isdefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area ) + { + self.ignoreall = 0; + + if ( isdefined( level.ignore_find_flesh ) && !self [[ level.ignore_find_flesh ]]() ) + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); + } + + self.becoming_inert = undefined; + self.is_inert = undefined; + self.in_place = undefined; + self maps\mp\animscripts\zm_run::needsupdate(); + self maps\mp\zombies\_zm_spawner::zombie_history( "is_inert cleared " + gettime() ); +} + +inert_watch_goal() +{ + self endon( "death" ); + self endon( "stop_zombie_inert" ); + + while ( true ) + { + self waittill( "goal" ); + + locs = array_randomize( level.enemy_dog_locations ); + + foreach ( loc in locs ) + { + dist_sq = distancesquared( self.origin, loc.origin ); + + if ( dist_sq > 90000 ) + { + self setgoalpos( loc.origin ); + continue; + } + } + + if ( locs.size > 0 ) + self setgoalpos( locs[0].origin ); + } +} + +inert_wakeup() +{ + self endon( "death" ); + self endon( "stop_zombie_inert" ); + wait 0.1; + self thread inert_damage(); + self thread inert_bump(); + + while ( true ) + { + current_time = gettime(); + players = get_players(); + + foreach ( player in players ) + { + dist_sq = distancesquared( self.origin, player.origin ); + + if ( dist_sq < 4096 ) + { + self stop_inert(); + return; + } + + if ( dist_sq < 360000 ) + { + if ( player issprinting() ) + { + self stop_inert(); + return; + } + } + + if ( dist_sq < 5760000 ) + { + if ( current_time - player.lastfiretime < 100 ) + { + self stop_inert(); + return; + } + } + } + + wait 0.1; + } +} + +inert_bump() +{ + self endon( "death" ); + self endon( "stop_zombie_inert" ); + + while ( true ) + { + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( zombie == self ) + continue; + + if ( isdefined( zombie.is_inert ) && zombie.is_inert ) + continue; + + if ( isdefined( zombie.becoming_inert ) && zombie.becoming_inert ) + continue; + + dist_sq = distancesquared( self.origin, zombie.origin ); + + if ( dist_sq < 1296 ) + { + self stop_inert(); + return; + } + } + + wait 0.2; + } +} + +inert_damage() +{ + self endon( "death" ); + self endon( "stop_zombie_inert" ); + + while ( true ) + { + self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); + + if ( weaponname == "emp_grenade_zm" ) + continue; + + if ( isdefined( inflictor ) ) + { + if ( isdefined( inflictor._trap_type ) && inflictor._trap_type == "fire" ) + continue; + } + } + + self stop_inert(); +} + +grenade_watcher( grenade ) +{ + grenade waittill( "explode", grenade_origin ); + + zombies = get_array_of_closest( grenade_origin, get_round_enemy_array(), undefined, undefined, 2400 ); + + if ( !isdefined( zombies ) ) + return; + + foreach ( zombie in zombies ) + zombie stop_inert(); +} + +stop_inert() +{ + self notify( "stop_zombie_inert" ); +} + +inert_transition() +{ + self endon( "death" ); + self endon( "stop_zombie_inert_transition" ); + trans_num = 4; + trans_set = level.inert_trans_walk; + animstate = "zm_inert_trans"; + + if ( !self.has_legs ) + { + trans_num = 1; + trans_set = level.inert_crawl_trans_walk; + animstate = "zm_inert_crawl_trans"; + } + + if ( self.zombie_move_speed == "run" ) + { + if ( self.has_legs ) + trans_set = level.inert_trans_run; + else + trans_set = level.inert_crawl_trans_run; + + trans_num = 2; + } + else if ( self.zombie_move_speed == "sprint" ) + { + if ( self.has_legs ) + trans_set = level.inert_trans_sprint; + else + trans_set = level.inert_crawl_trans_sprint; + + trans_num = 2; + } + + self thread inert_eye_glow(); + self setanimstatefromasd( animstate, trans_set[randomint( trans_num )] ); + self maps\mp\zombies\_zm_spawner::zombie_history( "inert_trans_anim " + gettime() ); + maps\mp\animscripts\zm_shared::donotetracks( "inert_trans_anim" ); +} + +inert_eye_glow() +{ + self endon( "death" ); + + while ( true ) + { + self waittill( "inert_trans_anim", note ); + + if ( note == "end" ) + return; + else if ( note == "zmb_awaken" ) + { + self maps\mp\zombies\_zm_spawner::zombie_eye_glow(); + return; + } + } +} diff --git a/ZM/Core/maps/mp/zombies/_zm_ai_dogs.gsc b/ZM/Core/maps/mp/zombies/_zm_ai_dogs.gsc new file mode 100644 index 0000000..4c008e8 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_ai_dogs.gsc @@ -0,0 +1,732 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_net; + +init() +{ + level.dogs_enabled = 1; + level.dog_rounds_enabled = 0; + level.dog_round_count = 1; + level.dog_spawners = []; + level.enemy_dog_spawns = []; + level.enemy_dog_locations = []; + flag_init( "dog_clips" ); + precacherumble( "explosion_generic" ); + precacheshellshock( "dog_bite" ); + + if ( getdvar( _hash_942939D4 ) == "" ) + setdvar( "zombie_dog_animset", "zombie" ); + + if ( getdvar( _hash_CAA5B74F ) == "" ) + setdvar( "scr_dog_health_walk_multiplier", "4.0" ); + + if ( getdvar( _hash_C7E63BA4 ) == "" ) + setdvar( "scr_dog_run_distance", "500" ); + + level.melee_range_sav = getdvar( "ai_meleeRange" ); + level.melee_width_sav = getdvar( "ai_meleeWidth" ); + level.melee_height_sav = getdvar( "ai_meleeHeight" ); + setdvar( "dog_MeleeDamage", "100" ); + set_zombie_var( "dog_fire_trail_percent", 50 ); + level._effect["lightning_dog_spawn"] = loadfx( "maps/zombie/fx_zombie_dog_lightning_buildup" ); + level._effect["dog_eye_glow"] = loadfx( "maps/zombie/fx_zombie_dog_eyes" ); + level._effect["dog_gib"] = loadfx( "maps/zombie/fx_zombie_dog_explosion" ); + level._effect["dog_trail_fire"] = loadfx( "maps/zombie/fx_zombie_dog_fire_trail" ); + level._effect["dog_trail_ash"] = loadfx( "maps/zombie/fx_zombie_dog_ash_trail" ); + dog_spawner_init(); + level thread dog_clip_monitor(); +} + +enable_dog_rounds() +{ + level.dog_rounds_enabled = 1; + + if ( !isdefined( level.dog_round_track_override ) ) + level.dog_round_track_override = ::dog_round_tracker; + + level thread [[ level.dog_round_track_override ]](); +} + +dog_spawner_init() +{ + level.dog_spawners = getentarray( "zombie_dog_spawner", "script_noteworthy" ); + later_dogs = getentarray( "later_round_dog_spawners", "script_noteworthy" ); + level.dog_spawners = arraycombine( level.dog_spawners, later_dogs, 1, 0 ); + + if ( level.dog_spawners.size == 0 ) + return; + + for ( i = 0; i < level.dog_spawners.size; i++ ) + { + if ( maps\mp\zombies\_zm_spawner::is_spawner_targeted_by_blocker( level.dog_spawners[i] ) ) + { + level.dog_spawners[i].is_enabled = 0; + continue; + } + + level.dog_spawners[i].is_enabled = 1; + level.dog_spawners[i].script_forcespawn = 1; + } + + assert( level.dog_spawners.size > 0 ); + level.dog_health = 100; + array_thread( level.dog_spawners, ::add_spawn_function, ::dog_init ); + level.enemy_dog_spawns = getentarray( "zombie_spawner_dog_init", "targetname" ); +} + +dog_round_spawning() +{ + level endon( "intermission" ); + level.dog_targets = getplayers(); + + for ( i = 0; i < level.dog_targets.size; i++ ) + level.dog_targets[i].hunted_by = 0; +/# + level endon( "kill_round" ); + + if ( getdvarint( _hash_FA81816F ) == 2 || getdvarint( _hash_FA81816F ) >= 4 ) + return; +#/ + if ( level.intermission ) + return; + + level.dog_intermission = 1; + level thread dog_round_aftermath(); + players = get_players(); + array_thread( players, ::play_dog_round ); + wait 1; + playsoundatposition( "vox_zmba_event_dogstart_0", ( 0, 0, 0 ) ); + wait 6; + + if ( level.dog_round_count < 3 ) + max = players.size * 6; + else + max = players.size * 8; +/# + if ( getdvar( _hash_4077D7E0 ) != "" ) + max = getdvarint( _hash_4077D7E0 ); +#/ + level.zombie_total = max; + dog_health_increase(); + count = 0; + + while ( count < max ) + { + for ( num_player_valid = get_number_of_valid_players(); get_current_zombie_count() >= num_player_valid * 2; num_player_valid = get_number_of_valid_players() ) + wait 2; + + players = get_players(); + favorite_enemy = get_favorite_enemy(); + + if ( isdefined( level.dog_spawn_func ) ) + { + spawn_loc = [[ level.dog_spawn_func ]]( level.dog_spawners, favorite_enemy ); + ai = spawn_zombie( level.dog_spawners[0] ); + + if ( isdefined( ai ) ) + { + ai.favoriteenemy = favorite_enemy; + spawn_loc thread dog_spawn_fx( ai, spawn_loc ); + level.zombie_total--; + count++; + } + } + else + { + spawn_point = dog_spawn_factory_logic( level.enemy_dog_spawns, favorite_enemy ); + ai = spawn_zombie( level.dog_spawners[0] ); + + if ( isdefined( ai ) ) + { + ai.favoriteenemy = favorite_enemy; + spawn_point thread dog_spawn_fx( ai, spawn_point ); + level.zombie_total--; + count++; + flag_set( "dog_clips" ); + } + } + + waiting_for_next_dog_spawn( count, max ); + } +} + +waiting_for_next_dog_spawn( count, max ) +{ + default_wait = 1.5; + + if ( level.dog_round_count == 1 ) + default_wait = 3; + else if ( level.dog_round_count == 2 ) + default_wait = 2.5; + else if ( level.dog_round_count == 3 ) + default_wait = 2; + else + default_wait = 1.5; + + default_wait -= count / max; + wait( default_wait ); +} + +dog_round_aftermath() +{ + level waittill( "last_dog_down" ); + + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "dog_end" ); + power_up_origin = level.last_dog_origin; + + if ( isdefined( power_up_origin ) ) + level thread maps\mp\zombies\_zm_powerups::specific_powerup_drop( "full_ammo", power_up_origin ); + + wait 2; + clientnotify( "dog_stop" ); + wait 6; + level.dog_intermission = 0; +} + +dog_spawn_fx( ai, ent ) +{ + ai endon( "death" ); + ai setfreecameralockonallowed( 0 ); + playfx( level._effect["lightning_dog_spawn"], ent.origin ); + playsoundatposition( "zmb_hellhound_prespawn", ent.origin ); + wait 1.5; + playsoundatposition( "zmb_hellhound_bolt", ent.origin ); + earthquake( 0.5, 0.75, ent.origin, 1000 ); + playrumbleonposition( "explosion_generic", ent.origin ); + playsoundatposition( "zmb_hellhound_spawn", ent.origin ); + angle = vectortoangles( ai.favoriteenemy.origin - ent.origin ); + angles = ( ai.angles[0], angle[1], ai.angles[2] ); + ai forceteleport( ent.origin, angles ); + assert( isdefined( ai ), "Ent isn't defined." ); + assert( isalive( ai ), "Ent is dead." ); + assert( ai.isdog, "Ent isn't a dog;" ); + assert( is_magic_bullet_shield_enabled( ai ), "Ent doesn't have a magic bullet shield." ); + ai zombie_setup_attack_properties_dog(); + ai stop_magic_bullet_shield(); + wait 0.1; + ai show(); + ai setfreecameralockonallowed( 1 ); + ai.ignoreme = 0; + ai notify( "visible" ); +} + +dog_spawn_sumpf_logic( dog_array, favorite_enemy ) +{ + assert( dog_array.size > 0, "Dog Spawner array is empty." ); + dog_array = array_randomize( dog_array ); + + for ( i = 0; i < dog_array.size; i++ ) + { + if ( isdefined( level.old_dog_spawn ) && level.old_dog_spawn == dog_array[i] ) + continue; + + if ( distancesquared( dog_array[i].origin, favorite_enemy.origin ) > 160000 && distancesquared( dog_array[i].origin, favorite_enemy.origin ) < 640000 ) + { + if ( distancesquared( ( 0, 0, dog_array[i].origin[2] ), ( 0, 0, favorite_enemy.origin[2] ) ) > 10000 ) + continue; + else + { + level.old_dog_spawn = dog_array[i]; + return dog_array[i]; + } + } + } + + return dog_array[0]; +} + +dog_spawn_factory_logic( dog_array, favorite_enemy ) +{ + dog_locs = array_randomize( level.enemy_dog_locations ); + + for ( i = 0; i < dog_locs.size; i++ ) + { + if ( isdefined( level.old_dog_spawn ) && level.old_dog_spawn == dog_locs[i] ) + continue; + + dist_squared = distancesquared( dog_locs[i].origin, favorite_enemy.origin ); + + if ( dist_squared > 160000 && dist_squared < 1000000 ) + { + level.old_dog_spawn = dog_locs[i]; + return dog_locs[i]; + } + } + + return dog_locs[0]; +} + +get_favorite_enemy() +{ + dog_targets = getplayers(); + least_hunted = dog_targets[0]; + + for ( i = 0; i < dog_targets.size; i++ ) + { + if ( !isdefined( dog_targets[i].hunted_by ) ) + dog_targets[i].hunted_by = 0; + + if ( !is_player_valid( dog_targets[i] ) ) + continue; + + if ( !is_player_valid( least_hunted ) ) + least_hunted = dog_targets[i]; + + if ( dog_targets[i].hunted_by < least_hunted.hunted_by ) + least_hunted = dog_targets[i]; + } + + least_hunted.hunted_by += 1; + return least_hunted; +} + +dog_health_increase() +{ + players = getplayers(); + + if ( level.dog_round_count == 1 ) + level.dog_health = 400; + else if ( level.dog_round_count == 2 ) + level.dog_health = 900; + else if ( level.dog_round_count == 3 ) + level.dog_health = 1300; + else if ( level.dog_round_count == 4 ) + level.dog_health = 1600; + + if ( level.dog_health > 1600 ) + level.dog_health = 1600; +} + +dog_round_tracker() +{ + level.dog_round_count = 1; + level.next_dog_round = level.round_number + randomintrange( 4, 7 ); + old_spawn_func = level.round_spawn_func; + old_wait_func = level.round_wait_func; + + while ( true ) + { + level waittill( "between_round_over" ); +/# + if ( getdvarint( _hash_4077D7E0 ) > 0 ) + level.next_dog_round = level.round_number; +#/ + if ( level.round_number == level.next_dog_round ) + { + level.music_round_override = 1; + old_spawn_func = level.round_spawn_func; + old_wait_func = level.round_wait_func; + dog_round_start(); + level.round_spawn_func = ::dog_round_spawning; + level.next_dog_round = level.round_number + randomintrange( 4, 6 ); +/# + get_players()[0] iprintln( "Next dog round: " + level.next_dog_round ); +#/ + } + else if ( flag( "dog_round" ) ) + { + dog_round_stop(); + level.round_spawn_func = old_spawn_func; + level.round_wait_func = old_wait_func; + level.music_round_override = 0; + level.dog_round_count += 1; + } + } +} + +dog_round_start() +{ + flag_set( "dog_round" ); + flag_set( "dog_clips" ); + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "dog_start" ); + + if ( !isdefined( level.doground_nomusic ) ) + level.doground_nomusic = 0; + + level.doground_nomusic = 1; + level notify( "dog_round_starting" ); + clientnotify( "dog_start" ); + + if ( isdefined( level.dog_melee_range ) ) + setdvar( "ai_meleeRange", level.dog_melee_range ); + else + setdvar( "ai_meleeRange", 100 ); +} + +dog_round_stop() +{ + flag_clear( "dog_round" ); + flag_clear( "dog_clips" ); + + if ( !isdefined( level.doground_nomusic ) ) + level.doground_nomusic = 0; + + level.doground_nomusic = 0; + level notify( "dog_round_ending" ); + clientnotify( "dog_stop" ); + setdvar( "ai_meleeRange", level.melee_range_sav ); + setdvar( "ai_meleeWidth", level.melee_width_sav ); + setdvar( "ai_meleeHeight", level.melee_height_sav ); +} + +play_dog_round() +{ + self playlocalsound( "zmb_dog_round_start" ); + variation_count = 5; + wait 4.5; + players = getplayers(); + num = randomintrange( 0, players.size ); + players[num] maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "dog_spawn" ); +} + +dog_init() +{ + self.targetname = "zombie_dog"; + self.script_noteworthy = undefined; + self.animname = "zombie_dog"; + self.ignoreall = 1; + self.ignoreme = 1; + self.allowdeath = 1; + self.allowpain = 0; + self.force_gib = 1; + self.is_zombie = 1; + self.has_legs = 1; + self.gibbed = 0; + self.head_gibbed = 0; + self.default_goalheight = 40; + self.ignore_inert = 1; + self.grenadeawareness = 0; + self.badplaceawareness = 0; + self.ignoresuppression = 1; + self.suppressionthreshold = 1; + self.nododgemove = 1; + self.dontshootwhilemoving = 1; + self.pathenemylookahead = 0; + self.badplaceawareness = 0; + self.chatinitialized = 0; + self.team = level.zombie_team; + health_multiplier = 1.0; + + if ( getdvar( _hash_CAA5B74F ) != "" ) + health_multiplier = getdvarfloat( _hash_CAA5B74F ); + + self.maxhealth = int( level.dog_health * health_multiplier ); + self.health = int( level.dog_health * health_multiplier ); + self.freezegun_damage = 0; + self.zombie_move_speed = "sprint"; + self thread dog_run_think(); + self thread dog_stalk_audio(); + self thread maps\mp\zombies\_zm::round_spawn_failsafe(); + self ghost(); + self thread magic_bullet_shield(); + self dog_fx_eye_glow(); + self dog_fx_trail(); + self thread dog_death(); + level thread maps\mp\zombies\_zm_spawner::zombie_death_event( self ); + self thread maps\mp\zombies\_zm_spawner::enemy_death_detection(); + self.a.disablepain = 1; + self disable_react(); + self clearenemy(); + self cleargoalvolume(); + self.flame_damage_time = 0; + self.meleedamage = 40; + self.thundergun_knockdown_func = ::dog_thundergun_knockdown; + self maps\mp\zombies\_zm_spawner::zombie_history( "zombie_dog_spawn_init -> Spawned = " + self.origin ); + + if ( isdefined( level.achievement_monitor_func ) ) + self [[ level.achievement_monitor_func ]](); +} + +dog_fx_eye_glow() +{ + self.fx_dog_eye = spawn( "script_model", self gettagorigin( "J_EyeBall_LE" ) ); + assert( isdefined( self.fx_dog_eye ) ); + self.fx_dog_eye.angles = self gettagangles( "J_EyeBall_LE" ); + self.fx_dog_eye setmodel( "tag_origin" ); + self.fx_dog_eye linkto( self, "J_EyeBall_LE" ); +} + +dog_fx_trail() +{ + if ( !is_mature() || randomint( 100 ) > level.zombie_vars["dog_fire_trail_percent"] ) + { + self.fx_dog_trail_type = level._effect["dog_trail_ash"]; + self.fx_dog_trail_sound = "zmb_hellhound_loop_breath"; + } + else + { + self.a.nodeath = 1; + self.fx_dog_trail_type = level._effect["dog_trail_fire"]; + self.fx_dog_trail_sound = "zmb_hellhound_loop_fire"; + } + + self.fx_dog_trail = spawn( "script_model", self gettagorigin( "tag_origin" ) ); + assert( isdefined( self.fx_dog_trail ) ); + self.fx_dog_trail.angles = self gettagangles( "tag_origin" ); + self.fx_dog_trail setmodel( "tag_origin" ); + self.fx_dog_trail linkto( self, "tag_origin" ); +} + +dog_death() +{ + self waittill( "death" ); + + if ( get_current_zombie_count() == 0 && level.zombie_total == 0 ) + { + level.last_dog_origin = self.origin; + level notify( "last_dog_down" ); + } + + if ( isplayer( self.attacker ) ) + { + event = "death"; + + if ( issubstr( self.damageweapon, "knife_ballistic_" ) ) + event = "ballistic_knife_death"; + + self.attacker maps\mp\zombies\_zm_score::player_add_points( event, self.damagemod, self.damagelocation, 1 ); + + if ( randomintrange( 0, 100 ) >= 80 ) + self.attacker maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "hellhound" ); + + self.attacker maps\mp\zombies\_zm_stats::increment_client_stat( "zdogs_killed" ); + self.attacker maps\mp\zombies\_zm_stats::increment_player_stat( "zdogs_killed" ); + } + + if ( isdefined( self.attacker ) && isai( self.attacker ) ) + self.attacker notify( "killed", self ); + + self stoploopsound(); + assert( isdefined( self.fx_dog_eye ) ); + self.fx_dog_eye delete(); + assert( isdefined( self.fx_dog_trail ) ); + self.fx_dog_trail delete(); + + if ( isdefined( self.a.nodeath ) ) + { + level thread dog_explode_fx( self.origin ); + self delete(); + } + else + self playsound( "zmb_hellhound_vocals_death" ); +} + +dog_explode_fx( origin ) +{ + playfx( level._effect["dog_gib"], origin ); + playsoundatposition( "zmb_hellhound_explode", origin ); +} + +zombie_setup_attack_properties_dog() +{ + self maps\mp\zombies\_zm_spawner::zombie_history( "zombie_setup_attack_properties()" ); + self thread dog_behind_audio(); + self.ignoreall = 0; + self.pathenemyfightdist = 64; + self.meleeattackdist = 64; + self.disablearrivals = 1; + self.disableexits = 1; +} + +stop_dog_sound_on_death() +{ + self waittill( "death" ); + + self stopsounds(); +} + +dog_behind_audio() +{ + self thread stop_dog_sound_on_death(); + self endon( "death" ); + self waittill_any( "dog_running", "dog_combat" ); + self playsound( "zmb_hellhound_vocals_close" ); + wait 3; + + while ( true ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + dogangle = angleclamp180( vectortoangles( self.origin - players[i].origin )[1] - players[i].angles[1] ); + + if ( isalive( players[i] ) && !isdefined( players[i].revivetrigger ) ) + { + if ( abs( dogangle ) > 90 && distance2d( self.origin, players[i].origin ) > 100 ) + { + self playsound( "zmb_hellhound_vocals_close" ); + wait 3; + } + } + } + + wait 0.75; + } +} + +dog_clip_monitor() +{ + clips_on = 0; + level.dog_clips = getentarray( "dog_clips", "targetname" ); + + while ( true ) + { + for ( i = 0; i < level.dog_clips.size; i++ ) + { + level.dog_clips[i] trigger_off(); + level.dog_clips[i] connectpaths(); + } + + flag_wait( "dog_clips" ); + + if ( isdefined( level.no_dog_clip ) && level.no_dog_clip == 1 ) + return; + + for ( i = 0; i < level.dog_clips.size; i++ ) + { + level.dog_clips[i] trigger_on(); + level.dog_clips[i] disconnectpaths(); + wait_network_frame(); + } + + dog_is_alive = 1; + + while ( dog_is_alive || flag( "dog_round" ) ) + { + dog_is_alive = 0; + dogs = getentarray( "zombie_dog", "targetname" ); + + for ( i = 0; i < dogs.size; i++ ) + { + if ( isalive( dogs[i] ) ) + dog_is_alive = 1; + } + + wait 1; + } + + flag_clear( "dog_clips" ); + wait 1; + } +} + +special_dog_spawn( spawners, num_to_spawn ) +{ + dogs = getaispeciesarray( "all", "zombie_dog" ); + + if ( isdefined( dogs ) && dogs.size >= 9 ) + return false; + + if ( !isdefined( num_to_spawn ) ) + num_to_spawn = 1; + + spawn_point = undefined; + count = 0; + + while ( count < num_to_spawn ) + { + players = get_players(); + favorite_enemy = get_favorite_enemy(); + + if ( isdefined( spawners ) ) + { + spawn_point = spawners[randomint( spawners.size )]; + ai = spawn_zombie( spawn_point ); + + if ( isdefined( ai ) ) + { + ai.favoriteenemy = favorite_enemy; + spawn_point thread dog_spawn_fx( ai ); + count++; + flag_set( "dog_clips" ); + } + } + else if ( isdefined( level.dog_spawn_func ) ) + { + spawn_loc = [[ level.dog_spawn_func ]]( level.dog_spawners, favorite_enemy ); + ai = spawn_zombie( level.dog_spawners[0] ); + + if ( isdefined( ai ) ) + { + ai.favoriteenemy = favorite_enemy; + spawn_loc thread dog_spawn_fx( ai, spawn_loc ); + count++; + flag_set( "dog_clips" ); + } + } + else + { + spawn_point = dog_spawn_factory_logic( level.enemy_dog_spawns, favorite_enemy ); + ai = spawn_zombie( level.dog_spawners[0] ); + + if ( isdefined( ai ) ) + { + ai.favoriteenemy = favorite_enemy; + spawn_point thread dog_spawn_fx( ai, spawn_point ); + count++; + flag_set( "dog_clips" ); + } + } + + waiting_for_next_dog_spawn( count, num_to_spawn ); + } + + return true; +} + +dog_run_think() +{ + self endon( "death" ); + + self waittill( "visible" ); + + if ( self.health > level.dog_health ) + { + self.maxhealth = level.dog_health; + self.health = level.dog_health; + } + + assert( isdefined( self.fx_dog_eye ) ); + maps\mp\zombies\_zm_net::network_safe_play_fx_on_tag( "dog_fx", 2, level._effect["dog_eye_glow"], self.fx_dog_eye, "tag_origin" ); + assert( isdefined( self.fx_dog_trail ) ); + maps\mp\zombies\_zm_net::network_safe_play_fx_on_tag( "dog_fx", 2, self.fx_dog_trail_type, self.fx_dog_trail, "tag_origin" ); + self playloopsound( self.fx_dog_trail_sound ); + + while ( true ) + { + if ( !is_player_valid( self.favoriteenemy ) ) + self.favoriteenemy = get_favorite_enemy(); + + wait 0.2; + } +} + +dog_stalk_audio() +{ + self endon( "death" ); + self endon( "dog_running" ); + self endon( "dog_combat" ); + + while ( true ) + { + self playsound( "zmb_hellhound_vocals_amb" ); + wait( randomfloatrange( 3, 6 ) ); + } +} + +dog_thundergun_knockdown( player, gib ) +{ + self endon( "death" ); + damage = int( self.maxhealth * 0.5 ); + self dodamage( damage, player.origin, player ); +} diff --git a/ZM/Core/maps/mp/zombies/_zm_ai_faller.gsc b/ZM/Core/maps/mp/zombies/_zm_ai_faller.gsc new file mode 100644 index 0000000..dda6c5d --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_ai_faller.gsc @@ -0,0 +1,626 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\zombies\_zm_laststand; + +zombie_faller_delete() +{ + level.zombie_total++; + self maps\mp\zombies\_zm_spawner::reset_attack_spot(); + + if ( isdefined( self.zombie_faller_location ) ) + { + self.zombie_faller_location.is_enabled = 1; + self.zombie_faller_location = undefined; + } + + self delete(); +} + +faller_script_parameters() +{ + if ( isdefined( self.script_parameters ) ) + { + parms = strtok( self.script_parameters, ";" ); + + if ( isdefined( parms ) && parms.size > 0 ) + { + for ( i = 0; i < parms.size; i++ ) + { + if ( parms[i] == "drop_now" ) + self.drop_now = 1; + + if ( parms[i] == "drop_not_occupied" ) + self.drop_not_occupied = 1; + + if ( parms[i] == "emerge_top" ) + self.emerge_top = 1; + + if ( parms[i] == "emerge_bottom" ) + self.emerge_bottom = 1; + } + } + } +} + +setup_deathfunc( func_name ) +{ + self endon( "death" ); + + while ( !( isdefined( self.zombie_init_done ) && self.zombie_init_done ) ) + wait_network_frame(); + + if ( isdefined( func_name ) ) + self.deathfunction = func_name; + else if ( isdefined( level.custom_faller_death ) ) + self.deathfunction = level.custom_faller_death; + else + self.deathfunction = ::zombie_fall_death_func; +} + +do_zombie_fall( spot ) +{ + self endon( "death" ); + self.zombie_faller_location = spot; + self.zombie_faller_location.is_enabled = 0; + self.zombie_faller_location faller_script_parameters(); + + if ( isdefined( self.zombie_faller_location.emerge_bottom ) && self.zombie_faller_location.emerge_bottom || isdefined( self.zombie_faller_location.emerge_top ) && self.zombie_faller_location.emerge_top ) + { + self do_zombie_emerge( spot ); + return; + } + + self thread setup_deathfunc(); + self.no_powerups = 1; + self.in_the_ceiling = 1; + self.anchor = spawn( "script_origin", self.origin ); + self.anchor.angles = self.angles; + self linkto( self.anchor ); + + if ( !isdefined( spot.angles ) ) + spot.angles = ( 0, 0, 0 ); + + anim_org = spot.origin; + anim_ang = spot.angles; + self ghost(); + self.anchor moveto( anim_org, 0.05 ); + + self.anchor waittill( "movedone" ); + + target_org = get_desired_origin(); + + if ( isdefined( target_org ) ) + { + anim_ang = vectortoangles( target_org - self.origin ); + self.anchor rotateto( ( 0, anim_ang[1], 0 ), 0.05 ); + + self.anchor waittill( "rotatedone" ); + } + + self unlink(); + + if ( isdefined( self.anchor ) ) + self.anchor delete(); + + self thread maps\mp\zombies\_zm_spawner::hide_pop(); + self thread zombie_fall_death( spot ); + self thread zombie_fall_fx( spot ); + self thread zombie_faller_death_wait(); + self thread zombie_faller_do_fall(); + self.no_powerups = 0; + self notify( "risen", spot.script_string ); +} + +zombie_faller_do_fall() +{ + self endon( "death" ); + self animscripted( self.origin, self.zombie_faller_location.angles, "zm_faller_emerge" ); + self maps\mp\animscripts\zm_shared::donotetracks( "emerge_anim", ::handle_fall_notetracks, self.zombie_faller_location ); + self.zombie_faller_wait_start = gettime(); + self.zombie_faller_should_drop = 0; + self thread zombie_fall_wait(); + self thread zombie_faller_watch_all_players(); + + while ( !self.zombie_faller_should_drop ) + { + if ( self zombie_fall_should_attack( self.zombie_faller_location ) ) + { + self animscripted( self.origin, self.zombie_faller_location.angles, "zm_faller_attack" ); + self maps\mp\animscripts\zm_shared::donotetracks( "attack_anim", ::handle_fall_notetracks, self.zombie_faller_location ); + + if ( !self zombie_faller_always_drop() && randomfloat( 1 ) > 0.5 ) + self.zombie_faller_should_drop = 1; + } + else if ( self zombie_faller_always_drop() ) + { + self.zombie_faller_should_drop = 1; + break; + } + else if ( gettime() >= self.zombie_faller_wait_start + 20000 ) + { + self.zombie_faller_should_drop = 1; + break; + } + else if ( self zombie_faller_drop_not_occupied() ) + { + self.zombie_faller_should_drop = 1; + break; + } + else + { + self animscripted( self.origin, self.zombie_faller_location.angles, "zm_faller_attack" ); + self maps\mp\animscripts\zm_shared::donotetracks( "attack_anim", ::handle_fall_notetracks, self.zombie_faller_location ); + } + } + + self notify( "falling" ); + spot = self.zombie_faller_location; + self zombie_faller_enable_location(); + self animscripted( self.origin, spot.angles, "zm_faller_fall" ); + self maps\mp\animscripts\zm_shared::donotetracks( "fall_anim", ::handle_fall_notetracks, spot ); + self.deathfunction = maps\mp\zombies\_zm_spawner::zombie_death_animscript; + self notify( "fall_anim_finished" ); + spot notify( "stop_zombie_fall_fx" ); + self stopanimscripted(); + landanimdelta = 15; + ground_pos = groundpos_ignore_water_new( self.origin ); + physdist = self.origin[2] - ground_pos[2] + landanimdelta; + + if ( physdist > 0 ) + { + self animcustom( ::zombie_fall_loop ); + + self waittill( "faller_on_ground" ); + + self animcustom( ::zombie_land ); + + self waittill( "zombie_land_done" ); + } + + self.in_the_ceiling = 0; + self traversemode( "gravity" ); + self.no_powerups = 0; +} + +zombie_fall_loop() +{ + self endon( "death" ); + self setanimstatefromasd( "zm_faller_fall_loop" ); + + while ( true ) + { + ground_pos = groundpos_ignore_water_new( self.origin ); + + if ( self.origin[2] - ground_pos[2] < 20 ) + { + self notify( "faller_on_ground" ); + break; + } + + wait 0.05; + } +} + +zombie_land() +{ + self setanimstatefromasd( "zm_faller_land" ); + maps\mp\animscripts\zm_shared::donotetracks( "land_anim" ); + self notify( "zombie_land_done" ); +} + +zombie_faller_always_drop() +{ + if ( isdefined( self.zombie_faller_location.drop_now ) && self.zombie_faller_location.drop_now ) + return true; + + return false; +} + +zombie_faller_drop_not_occupied() +{ + if ( isdefined( self.zombie_faller_location.drop_not_occupied ) && self.zombie_faller_location.drop_not_occupied ) + { + if ( isdefined( self.zone_name ) && isdefined( level.zones[self.zone_name] ) ) + return !level.zones[self.zone_name].is_occupied; + } + + return 0; +} + +zombie_faller_watch_all_players() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + self thread zombie_faller_watch_player( players[i] ); +} + +zombie_faller_watch_player( player ) +{ + self endon( "falling" ); + self endon( "death" ); + player endon( "disconnect" ); + range = 200; + rangesqr = range * range; + timer = 5000; + inrange = 0; + inrangetime = 0; + closerange = 60; + closerangesqr = closerange * closerange; + dirtoplayerenter = ( 0, 0, 0 ); + incloserange = 0; + + while ( true ) + { + distsqr = distance2dsquared( self.origin, player.origin ); + + if ( distsqr < rangesqr ) + { + if ( inrange ) + { + if ( inrangetime + timer < gettime() ) + { + self.zombie_faller_should_drop = 1; + break; + } + } + else + { + inrange = 1; + inrangetime = gettime(); + } + } + else + inrange = 0; + + if ( distsqr < closerangesqr ) + { + if ( !incloserange ) + { + dirtoplayerenter = player.origin - self.origin; + dirtoplayerenter = ( dirtoplayerenter[0], dirtoplayerenter[1], 0.0 ); + dirtoplayerenter = vectornormalize( dirtoplayerenter ); + } + + incloserange = 1; + } + else + { + if ( incloserange ) + { + dirtoplayerexit = player.origin - self.origin; + dirtoplayerexit = ( dirtoplayerexit[0], dirtoplayerexit[1], 0.0 ); + dirtoplayerexit = vectornormalize( dirtoplayerexit ); + + if ( vectordot( dirtoplayerenter, dirtoplayerexit ) < 0 ) + { + self.zombie_faller_should_drop = 1; + break; + } + } + + incloserange = 0; + } + + wait 0.1; + } +} + +zombie_fall_wait() +{ + self endon( "falling" ); + self endon( "death" ); + + if ( isdefined( self.zone_name ) ) + { + if ( isdefined( level.zones ) && isdefined( level.zones[self.zone_name] ) ) + { + zone = level.zones[self.zone_name]; + + while ( true ) + { + if ( !zone.is_enabled || !zone.is_active ) + { + if ( !self potentially_visible( 2250000 ) ) + { + if ( self.health != level.zombie_health ) + { + self.zombie_faller_should_drop = 1; + break; + } + else + { + self zombie_faller_delete(); + return; + } + } + } + + wait 0.5; + } + } + } +} + +zombie_fall_should_attack( spot ) +{ + victims = zombie_fall_get_vicitims( spot ); + return victims.size > 0; +} + +zombie_fall_get_vicitims( spot ) +{ + ret = []; + players = getplayers(); + checkdist2 = 40.0; + checkdist2 *= checkdist2; + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + continue; + + stance = player getstance(); + + if ( stance == "crouch" || stance == "prone" ) + continue; + + zcheck = self.origin[2] - player.origin[2]; + + if ( zcheck < 0.0 || zcheck > 120.0 ) + continue; + + dist2 = distance2dsquared( player.origin, self.origin ); + + if ( dist2 < checkdist2 ) + ret[ret.size] = player; + } + + return ret; +} + +get_fall_anim( spot ) +{ + return level._zombie_fall_anims[self.animname]["fall"]; +} + +zombie_faller_enable_location() +{ + if ( isdefined( self.zombie_faller_location ) ) + { + self.zombie_faller_location.is_enabled = 1; + self.zombie_faller_location = undefined; + } +} + +zombie_faller_death_wait( endon_notify ) +{ + self endon( "falling" ); + + if ( isdefined( endon_notify ) ) + self endon( endon_notify ); + + self waittill( "death" ); + + self zombie_faller_enable_location(); +} + +zombie_fall_death_func() +{ + self animmode( "noclip" ); + self.deathanim = "zm_faller_emerge_death"; + return self maps\mp\zombies\_zm_spawner::zombie_death_animscript(); +} + +zombie_fall_death( spot ) +{ + self endon( "fall_anim_finished" ); + + while ( self.health > 1 ) + self waittill( "damage", amount, attacker, dir, p, type ); + + self stopanimscripted(); + spot notify( "stop_zombie_fall_fx" ); +} + +_damage_mod_to_damage_type( type ) +{ + toks = strtok( type, "_" ); + + if ( toks.size < 2 ) + return type; + + returnstr = toks[1]; + + for ( i = 2; i < toks.size; i++ ) + returnstr += toks[i]; + + returnstr = tolower( returnstr ); + return returnstr; +} + +zombie_fall_fx( spot ) +{ + spot thread zombie_fall_dust_fx( self ); + spot thread zombie_fall_burst_fx(); + playsoundatposition( "zmb_zombie_spawn", spot.origin ); + self endon( "death" ); + spot endon( "stop_zombie_fall_fx" ); + wait 1; + + if ( self.zombie_move_speed != "sprint" ) + wait 1; +} + +zombie_fall_burst_fx() +{ + self endon( "stop_zombie_fall_fx" ); + self endon( "fall_anim_finished" ); + playfx( level._effect["rise_burst"], self.origin + ( 0, 0, randomintrange( 5, 10 ) ) ); + wait 0.25; + playfx( level._effect["rise_billow"], self.origin + ( randomintrange( -10, 10 ), randomintrange( -10, 10 ), randomintrange( 5, 10 ) ) ); +} + +zombie_fall_dust_fx( zombie ) +{ + dust_tag = "J_SpineUpper"; + self endon( "stop_zombie_fall_dust_fx" ); + self thread stop_zombie_fall_dust_fx( zombie ); + dust_time = 4.5; + dust_interval = 0.3; + + for ( t = 0; t < dust_time; t += dust_interval ) + { + playfxontag( level._effect["rise_dust"], zombie, dust_tag ); + wait( dust_interval ); + } +} + +stop_zombie_fall_dust_fx( zombie ) +{ + zombie waittill( "death" ); + + self notify( "stop_zombie_fall_dust_fx" ); +} + +handle_fall_notetracks( note, spot ) +{ + if ( note == "deathout" ) + self.deathfunction = ::faller_death_ragdoll; + else if ( note == "fire" ) + { + victims = zombie_fall_get_vicitims( spot ); + + for ( i = 0; i < victims.size; i++ ) + { + victims[i] dodamage( self.meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); + self.zombie_faller_should_drop = 1; + } + } +} + +faller_death_ragdoll() +{ + self startragdoll(); + self launchragdoll( ( 0, 0, -1 ) ); + return self maps\mp\zombies\_zm_spawner::zombie_death_animscript(); +} + +in_player_fov( player ) +{ + playerangles = player getplayerangles(); + playerforwardvec = anglestoforward( playerangles ); + playerunitforwardvec = vectornormalize( playerforwardvec ); + banzaipos = self.origin; + playerpos = player getorigin(); + playertobanzaivec = banzaipos - playerpos; + playertobanzaiunitvec = vectornormalize( playertobanzaivec ); + forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec ); + anglefromcenter = acos( forwarddotbanzai ); + playerfov = getdvarfloat( "cg_fov" ); + banzaivsplayerfovbuffer = getdvarfloat( _hash_BCB625CF ); + + if ( banzaivsplayerfovbuffer <= 0 ) + banzaivsplayerfovbuffer = 0.2; + + inplayerfov = anglefromcenter <= playerfov * 0.5 * ( 1 - banzaivsplayerfovbuffer ); + return inplayerfov; +} + +potentially_visible( how_close = 1000000 ) +{ + potentiallyvisible = 0; + players = getplayers(); + + for ( i = 0; i < players.size; i++ ) + { + dist = distancesquared( self.origin, players[i].origin ); + + if ( dist < how_close ) + { + inplayerfov = self in_player_fov( players[i] ); + + if ( inplayerfov ) + { + potentiallyvisible = 1; + break; + } + } + } + + return potentiallyvisible; +} + +do_zombie_emerge( spot ) +{ + self endon( "death" ); + self thread setup_deathfunc( ::faller_death_ragdoll ); + self.no_powerups = 1; + self.in_the_ceiling = 1; + anim_org = spot.origin; + anim_ang = spot.angles; + self thread zombie_emerge_fx( spot ); + self thread zombie_faller_death_wait( "risen" ); + + if ( isdefined( level.custom_faller_entrance_logic ) ) + self thread [[ level.custom_faller_entrance_logic ]](); + + self zombie_faller_emerge( spot ); + self.create_eyes = 1; + wait 0.1; + self notify( "risen", spot.script_string ); + self zombie_faller_enable_location(); +} + +zombie_faller_emerge( spot ) +{ + self endon( "death" ); + + if ( isdefined( self.zombie_faller_location.emerge_bottom ) && self.zombie_faller_location.emerge_bottom ) + self animscripted( self.zombie_faller_location.origin, self.zombie_faller_location.angles, "zombie_riser_elevator_from_floor" ); + else + self animscripted( self.zombie_faller_location.origin, self.zombie_faller_location.angles, "zombie_riser_elevator_from_ceiling" ); + + self maps\mp\animscripts\zm_shared::donotetracks( "rise_anim" ); + self.deathfunction = maps\mp\zombies\_zm_spawner::zombie_death_animscript; + self.in_the_ceiling = 0; + self.no_powerups = 0; +} + +zombie_emerge_fx( spot ) +{ + spot thread zombie_emerge_dust_fx( self ); + playsoundatposition( "zmb_zombie_spawn", spot.origin ); + self endon( "death" ); + spot endon( "stop_zombie_fall_fx" ); + wait 1; +} + +zombie_emerge_dust_fx( zombie ) +{ + dust_tag = "J_SpineUpper"; + self endon( "stop_zombie_fall_dust_fx" ); + self thread stop_zombie_fall_dust_fx( zombie ); + dust_time = 3.5; + dust_interval = 0.5; + + for ( t = 0; t < dust_time; t += dust_interval ) + { + playfxontag( level._effect["rise_dust"], zombie, dust_tag ); + wait( dust_interval ); + } +} + +stop_zombie_emerge_dust_fx( zombie ) +{ + zombie waittill( "death" ); + + self notify( "stop_zombie_fall_dust_fx" ); +} diff --git a/ZM/Core/maps/mp/zombies/_zm_audio.gsc b/ZM/Core/maps/mp/zombies/_zm_audio.gsc new file mode 100644 index 0000000..176a59c --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_audio.gsc @@ -0,0 +1,1401 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\_music; +#include maps\mp\zombies\_zm_spawner; + +init() +{ + registerclientfield( "allplayers", "charindex", 1, 3, "int" ); + registerclientfield( "toplayer", "isspeaking", 1, 1, "int" ); +/# + println( "ZM >> Zombiemode Server Scripts Init (_zm_audio.gsc)" ); +#/ + level.audio_get_mod_type = ::get_mod_type; + level zmbvox(); + level init_music_states(); + level maps\mp\zombies\_zm_audio_announcer::init(); + onplayerconnect_callback( ::init_audio_functions ); +} + +setexertvoice( exert_id ) +{ + self.player_exert_id = exert_id; + self setclientfield( "charindex", self.player_exert_id ); +} + +playerexert( exert ) +{ + if ( isdefined( self.isspeaking ) && self.isspeaking || isdefined( self.isexerting ) && self.isexerting ) + return; + + id = level.exert_sounds[0][exert]; + + if ( isdefined( self.player_exert_id ) ) + { + if ( isarray( level.exert_sounds[self.player_exert_id][exert] ) ) + id = random( level.exert_sounds[self.player_exert_id][exert] ); + else + id = level.exert_sounds[self.player_exert_id][exert]; + } + + self.isexerting = 1; + self thread exert_timer(); + self playsound( id ); +} + +exert_timer() +{ + self endon( "disconnect" ); + wait( randomfloatrange( 1.5, 3 ) ); + self.isexerting = 0; +} + +zmbvox() +{ + level.votimer = []; + level.vox = zmbvoxcreate(); + init_standard_response_chances(); + level.vox zmbvoxadd( "player", "general", "crawl_spawn", "crawler_start", "resp_crawler_start" ); + level.vox zmbvoxadd( "player", "general", "hr_resp_crawler_start", "hr_resp_crawler_start", undefined ); + level.vox zmbvoxadd( "player", "general", "riv_resp_crawler_start", "riv_resp_crawler_start", undefined ); + level.vox zmbvoxadd( "player", "general", "ammo_low", "ammo_low", undefined ); + level.vox zmbvoxadd( "player", "general", "ammo_out", "ammo_out", undefined ); + level.vox zmbvoxadd( "player", "general", "door_deny", "nomoney_generic", undefined ); + level.vox zmbvoxadd( "player", "general", "perk_deny", "nomoney_perk", undefined ); + level.vox zmbvoxadd( "player", "general", "shoot_arm", "kill_limb", undefined ); + level.vox zmbvoxadd( "player", "general", "box_move", "box_move", undefined ); + level.vox zmbvoxadd( "player", "general", "no_money", "nomoney", undefined ); + level.vox zmbvoxadd( "player", "general", "oh_shit", "oh_shit", "resp_surrounded" ); + level.vox zmbvoxadd( "player", "general", "hr_resp_surrounded", "hr_resp_surrounded", undefined ); + level.vox zmbvoxadd( "player", "general", "riv_resp_surrounded", "riv_resp_surrounded", undefined ); + level.vox zmbvoxadd( "player", "general", "revive_down", "revive_down", undefined ); + level.vox zmbvoxadd( "player", "general", "revive_up", "revive_up", undefined ); + level.vox zmbvoxadd( "player", "general", "crawl_hit", "crawler_attack", undefined ); + level.vox zmbvoxadd( "player", "general", "sigh", "sigh", undefined ); + level.vox zmbvoxadd( "player", "general", "round_5", "round_5", undefined ); + level.vox zmbvoxadd( "player", "general", "round_20", "round_20", undefined ); + level.vox zmbvoxadd( "player", "general", "round_10", "round_10", undefined ); + level.vox zmbvoxadd( "player", "general", "round_35", "round_35", undefined ); + level.vox zmbvoxadd( "player", "general", "round_50", "round_50", undefined ); + level.vox zmbvoxadd( "player", "perk", "specialty_armorvest", "perk_jugga", undefined ); + level.vox zmbvoxadd( "player", "perk", "specialty_quickrevive", "perk_revive", undefined ); + level.vox zmbvoxadd( "player", "perk", "specialty_fastreload", "perk_speed", undefined ); + level.vox zmbvoxadd( "player", "perk", "specialty_rof", "perk_doubletap", undefined ); + level.vox zmbvoxadd( "player", "perk", "specialty_longersprint", "perk_stamine", undefined ); + level.vox zmbvoxadd( "player", "perk", "specialty_flakjacket", "perk_phdflopper", undefined ); + level.vox zmbvoxadd( "player", "perk", "specialty_deadshot", "perk_deadshot", undefined ); + level.vox zmbvoxadd( "player", "perk", "specialty_finalstand", "perk_who", undefined ); + level.vox zmbvoxadd( "player", "perk", "specialty_additionalprimaryweapon", "perk_mulekick", undefined ); + level.vox zmbvoxadd( "player", "powerup", "nuke", "powerup_nuke", undefined ); + level.vox zmbvoxadd( "player", "powerup", "insta_kill", "powerup_insta", undefined ); + level.vox zmbvoxadd( "player", "powerup", "full_ammo", "powerup_ammo", undefined ); + level.vox zmbvoxadd( "player", "powerup", "double_points", "powerup_double", undefined ); + level.vox zmbvoxadd( "player", "powerup", "carpenter", "powerup_carp", undefined ); + level.vox zmbvoxadd( "player", "powerup", "firesale", "powerup_firesale", undefined ); + level.vox zmbvoxadd( "player", "powerup", "minigun", "powerup_minigun", undefined ); + level.vox zmbvoxadd( "player", "kill", "melee", "kill_melee", undefined ); + level.vox zmbvoxadd( "player", "kill", "melee_instakill", "kill_insta", undefined ); + level.vox zmbvoxadd( "player", "kill", "weapon_instakill", "kill_insta", undefined ); + level.vox zmbvoxadd( "player", "kill", "closekill", "kill_close", undefined ); + level.vox zmbvoxadd( "player", "kill", "damage", "kill_damaged", undefined ); + level.vox zmbvoxadd( "player", "kill", "streak", "kill_streak", undefined ); + level.vox zmbvoxadd( "player", "kill", "headshot", "kill_headshot", "resp_kill_headshot" ); + level.vox zmbvoxadd( "player", "kill", "hr_resp_kill_headshot", "hr_resp_kill_headshot", undefined ); + level.vox zmbvoxadd( "player", "kill", "riv_resp_kill_headshot", "riv_resp_kill_headshot", undefined ); + level.vox zmbvoxadd( "player", "kill", "explosive", "kill_explo", undefined ); + level.vox zmbvoxadd( "player", "kill", "flame", "kill_flame", undefined ); + level.vox zmbvoxadd( "player", "kill", "raygun", "kill_ray", undefined ); + level.vox zmbvoxadd( "player", "kill", "bullet", "kill_streak", undefined ); + level.vox zmbvoxadd( "player", "kill", "tesla", "kill_tesla", undefined ); + level.vox zmbvoxadd( "player", "kill", "monkey", "kill_monkey", undefined ); + level.vox zmbvoxadd( "player", "kill", "thundergun", "kill_thunder", undefined ); + level.vox zmbvoxadd( "player", "kill", "freeze", "kill_freeze", undefined ); + level.vox zmbvoxadd( "player", "kill", "crawler", "crawler_kill", undefined ); + level.vox zmbvoxadd( "player", "kill", "hellhound", "kill_hellhound", undefined ); + level.vox zmbvoxadd( "player", "kill", "quad", "kill_quad", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "pistol", "wpck_crappy", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "smg", "wpck_smg", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "dualwield", "wpck_dual", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "shotgun", "wpck_shotgun", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "rifle", "wpck_sniper", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "burstrifle", "wpck_mg", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "assault", "wpck_mg", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "sniper", "wpck_sniper", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "mg", "wpck_mg", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "launcher", "wpck_launcher", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "grenade", "wpck_grenade", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "bowie", "wpck_bowie", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "raygun", "wpck_raygun", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "monkey", "wpck_monkey", "resp_wpck_monkey" ); + level.vox zmbvoxadd( "player", "weapon_pickup", "hr_resp_wpck_monkey", "hr_resp_wpck_monkey", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "riv_resp_wpck_monkey", "riv_resp_wpck_monkey", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "crossbow", "wpck_launcher", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "upgrade", "wpck_upgrade", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "favorite", "wpck_favorite", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "favorite_upgrade", "wpck_favorite_upgrade", undefined ); + level.vox zmbvoxadd( "player", "player_death", "player_death", "evt_player_final_hit", undefined ); + level.zmb_vox = []; + level.zmb_vox["prefix"] = "zmb_vocals_"; + level.zmb_vox["zombie"] = []; + level.zmb_vox["zombie"]["ambient"] = "zombie_ambience"; + level.zmb_vox["zombie"]["sprint"] = "zombie_sprint"; + level.zmb_vox["zombie"]["attack"] = "zombie_attack"; + level.zmb_vox["zombie"]["teardown"] = "zombie_teardown"; + level.zmb_vox["zombie"]["taunt"] = "zombie_taunt"; + level.zmb_vox["zombie"]["behind"] = "zombie_behind"; + level.zmb_vox["zombie"]["death"] = "zombie_death"; + level.zmb_vox["zombie"]["crawler"] = "zombie_crawler"; + level.zmb_vox["zombie"]["electrocute"] = "zombie_electrocute"; + level.zmb_vox["quad_zombie"] = []; + level.zmb_vox["quad_zombie"]["ambient"] = "quad_ambience"; + level.zmb_vox["quad_zombie"]["sprint"] = "quad_sprint"; + level.zmb_vox["quad_zombie"]["attack"] = "quad_attack"; + level.zmb_vox["quad_zombie"]["behind"] = "quad_behind"; + level.zmb_vox["quad_zombie"]["death"] = "quad_death"; + level.zmb_vox["thief_zombie"] = []; + level.zmb_vox["thief_zombie"]["ambient"] = "thief_ambience"; + level.zmb_vox["thief_zombie"]["sprint"] = "thief_sprint"; + level.zmb_vox["thief_zombie"]["steal"] = "thief_steal"; + level.zmb_vox["thief_zombie"]["death"] = "thief_death"; + level.zmb_vox["thief_zombie"]["anger"] = "thief_anger"; + level.zmb_vox["boss_zombie"] = []; + level.zmb_vox["boss_zombie"]["ambient"] = "boss_ambience"; + level.zmb_vox["boss_zombie"]["sprint"] = "boss_sprint"; + level.zmb_vox["boss_zombie"]["attack"] = "boss_attack"; + level.zmb_vox["boss_zombie"]["behind"] = "boss_behind"; + level.zmb_vox["boss_zombie"]["death"] = "boss_death"; + level.zmb_vox["leaper_zombie"] = []; + level.zmb_vox["leaper_zombie"]["ambient"] = "leaper_ambience"; + level.zmb_vox["leaper_zombie"]["sprint"] = "leaper_ambience"; + level.zmb_vox["leaper_zombie"]["attack"] = "leaper_attack"; + level.zmb_vox["leaper_zombie"]["behind"] = "leaper_close"; + level.zmb_vox["leaper_zombie"]["death"] = "leaper_death"; + level.zmb_vox["monkey_zombie"] = []; + level.zmb_vox["monkey_zombie"]["ambient"] = "monkey_ambience"; + level.zmb_vox["monkey_zombie"]["sprint"] = "monkey_sprint"; + level.zmb_vox["monkey_zombie"]["attack"] = "monkey_attack"; + level.zmb_vox["monkey_zombie"]["behind"] = "monkey_behind"; + level.zmb_vox["monkey_zombie"]["death"] = "monkey_death"; + level.zmb_vox["capzomb"] = []; + level.zmb_vox["capzomb"]["ambient"] = "capzomb_ambience"; + level.zmb_vox["capzomb"]["sprint"] = "capzomb_sprint"; + level.zmb_vox["capzomb"]["attack"] = "capzomb_attack"; + level.zmb_vox["capzomb"]["teardown"] = "capzomb_ambience"; + level.zmb_vox["capzomb"]["taunt"] = "capzomb_ambience"; + level.zmb_vox["capzomb"]["behind"] = "capzomb_behind"; + level.zmb_vox["capzomb"]["death"] = "capzomb_death"; + level.zmb_vox["capzomb"]["crawler"] = "capzomb_crawler"; + level.zmb_vox["capzomb"]["electrocute"] = "zombie_electrocute"; + + if ( isdefined( level._zmbvoxlevelspecific ) ) + level thread [[ level._zmbvoxlevelspecific ]](); + + if ( isdefined( level._zmbvoxgametypespecific ) ) + level thread [[ level._zmbvoxgametypespecific ]](); + + announcer_ent = spawn( "script_origin", ( 0, 0, 0 ) ); + level.vox zmbvoxinitspeaker( "announcer", "vox_zmba_", announcer_ent ); + level.exert_sounds[0]["burp"] = "evt_belch"; + level.exert_sounds[0]["hitmed"] = "null"; + level.exert_sounds[0]["hitlrg"] = "null"; + + if ( isdefined( level.setupcustomcharacterexerts ) ) + [[ level.setupcustomcharacterexerts ]](); +} + +init_standard_response_chances() +{ + level.response_chances = []; + add_vox_response_chance( "sickle", 40 ); + add_vox_response_chance( "melee", 40 ); + add_vox_response_chance( "melee_instakill", 99 ); + add_vox_response_chance( "weapon_instakill", 10 ); + add_vox_response_chance( "explosive", 60 ); + add_vox_response_chance( "monkey", 60 ); + add_vox_response_chance( "flame", 60 ); + add_vox_response_chance( "raygun", 75 ); + add_vox_response_chance( "headshot", 15 ); + add_vox_response_chance( "crawler", 30 ); + add_vox_response_chance( "quad", 30 ); + add_vox_response_chance( "astro", 99 ); + add_vox_response_chance( "closekill", 15 ); + add_vox_response_chance( "bullet", 1 ); + add_vox_response_chance( "claymore", 99 ); + add_vox_response_chance( "dolls", 99 ); + add_vox_response_chance( "default", 1 ); +} + +init_audio_functions() +{ + self thread zombie_behind_vox(); + self thread player_killstreak_timer(); + + if ( isdefined( level._custom_zombie_oh_shit_vox_func ) ) + self thread [[ level._custom_zombie_oh_shit_vox_func ]](); + else + self thread oh_shit_vox(); +} + +zombie_behind_vox() +{ + self endon( "death_or_disconnect" ); + + if ( !isdefined( level._zbv_vox_last_update_time ) ) + { + level._zbv_vox_last_update_time = 0; + level._audio_zbv_shared_ent_list = get_round_enemy_array(); + } + + while ( true ) + { + wait 1; + t = gettime(); + + if ( t > level._zbv_vox_last_update_time + 1000 ) + { + level._zbv_vox_last_update_time = t; + level._audio_zbv_shared_ent_list = get_round_enemy_array(); + } + + zombs = level._audio_zbv_shared_ent_list; + played_sound = 0; + + for ( i = 0; i < zombs.size; i++ ) + { + if ( !isdefined( zombs[i] ) ) + continue; + + if ( zombs[i].isdog ) + continue; + + dist = 200; + z_dist = 50; + alias = level.vox_behind_zombie; + + if ( isdefined( zombs[i].zombie_move_speed ) ) + { + switch ( zombs[i].zombie_move_speed ) + { + case "walk": + dist = 200; + break; + case "run": + dist = 250; + break; + case "sprint": + dist = 275; + break; + } + } + + if ( distancesquared( zombs[i].origin, self.origin ) < dist * dist ) + { + yaw = self maps\mp\zombies\_zm_utility::getyawtospot( zombs[i].origin ); + z_diff = self.origin[2] - zombs[i].origin[2]; + + if ( ( yaw < -95 || yaw > 95 ) && abs( z_diff ) < 50 ) + { + zombs[i] thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "behind", zombs[i].animname ); + played_sound = 1; + break; + } + } + } + + if ( played_sound ) + wait 5; + } +} + +attack_vox_network_choke() +{ + while ( true ) + { + level._num_attack_vox = 0; + wait_network_frame(); + } +} + +do_zombies_playvocals( alias_type, zombie_type ) +{ +/# + if ( getdvarint( _hash_6C610250 ) > 0 ) + return; +#/ + self endon( "death" ); + + if ( !isdefined( zombie_type ) ) + zombie_type = "zombie"; + + if ( isdefined( self.shrinked ) && self.shrinked ) + return; + + if ( isdefined( self.is_inert ) && self.is_inert ) + return; + + if ( !isdefined( self.talking ) ) + self.talking = 0; + + if ( isdefined( level.script ) && level.script == "zm_tomb" ) + { + if ( isdefined( self.script_int ) && self.script_int >= 2 ) + { + zombie_type = "capzomb"; + self.zmb_vocals_attack = "zmb_vocals_capzomb_attack"; + } + else if ( isdefined( self.sndname ) ) + zombie_type = self.sndname; + } + + if ( !isdefined( level.zmb_vox[zombie_type] ) ) + { +/# + println( "ZM >> AUDIO - ZOMBIE TYPE: " + zombie_type + " has NO aliases set up for it." ); +#/ + return; + } + + if ( !isdefined( level.zmb_vox[zombie_type][alias_type] ) ) + { +/# + println( "ZM >> AUDIO - ZOMBIE TYPE: " + zombie_type + " has NO aliases set up for ALIAS_TYPE: " + alias_type ); +#/ + return; + } + + switch ( alias_type ) + { + case "teardown": + case "sprint": + case "electrocute": + case "death": + case "crawler": + case "behind": + case "attack": + case "ambient": + if ( !sndisnetworksafe() ) + return; + + break; + } + + alias = level.zmb_vox["prefix"] + level.zmb_vox[zombie_type][alias_type]; + + if ( alias_type == "attack" || alias_type == "behind" || alias_type == "death" || alias_type == "anger" || alias_type == "steal" || alias_type == "taunt" || alias_type == "teardown" ) + { + if ( isdefined( level._custom_zombie_audio_func ) ) + self [[ level._custom_zombie_audio_func ]]( alias, alias_type ); + else + self playsound( alias ); + } + else if ( !self.talking ) + { + self.talking = 1; + + if ( self is_last_zombie() ) + alias += "_loud"; + + self playsoundwithnotify( alias, "sounddone" ); + + self waittill( "sounddone" ); + + self.talking = 0; + } +} + +sndisnetworksafe() +{ + if ( !isdefined( level._num_attack_vox ) ) + level thread attack_vox_network_choke(); + + if ( level._num_attack_vox > 4 ) + return false; + + level._num_attack_vox++; + return true; +} + +is_last_zombie() +{ + if ( get_current_zombie_count() <= 1 ) + return true; + + return false; +} + +oh_shit_vox() +{ + self endon( "death_or_disconnect" ); + + while ( true ) + { + wait 1; + players = get_players(); + zombs = get_round_enemy_array(); + + if ( players.size > 1 ) + { + close_zombs = 0; + + for ( i = 0; i < zombs.size; i++ ) + { + if ( isdefined( zombs[i].favoriteenemy ) && zombs[i].favoriteenemy == self || !isdefined( zombs[i].favoriteenemy ) ) + { + if ( distancesquared( zombs[i].origin, self.origin ) < 62500 ) + close_zombs++; + } + } + + if ( close_zombs > 4 ) + { + if ( randomint( 100 ) > 75 && !( isdefined( self.isonbus ) && self.isonbus ) ) + { + self create_and_play_dialog( "general", "oh_shit" ); + wait 4; + } + } + } + } +} + +create_and_play_dialog( category, type, response, force_variant, override ) +{ + waittime = 0.25; + + if ( !isdefined( self.zmbvoxid ) ) + { +/# + if ( getdvarint( _hash_AEB127D ) > 0 ) + iprintln( "DIALOG DEBUGGER: No zmbVoxID setup on this character. Run zmbVoxInitSpeaker on this character in order to play vox" ); +#/ + return; + } + + if ( isdefined( self.dontspeak ) && self.dontspeak ) + return; +/# + if ( getdvarint( _hash_AEB127D ) > 0 ) + self thread dialog_debugger( category, type ); +#/ + isresponse = 0; + alias_suffix = undefined; + index = undefined; + prefix = undefined; + + if ( !isdefined( level.vox.speaker[self.zmbvoxid].alias[category][type] ) ) + return; + + prefix = level.vox.speaker[self.zmbvoxid].prefix; + alias_suffix = level.vox.speaker[self.zmbvoxid].alias[category][type]; + + if ( self is_player() ) + { + if ( self.sessionstate != "playing" ) + return; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && ( type != "revive_down" || type != "revive_up" ) ) + return; + + index = maps\mp\zombies\_zm_weapons::get_player_index( self ); + prefix = prefix + index + "_"; + } + + if ( isdefined( response ) ) + { + if ( isdefined( level.vox.speaker[self.zmbvoxid].response[category][type] ) ) + alias_suffix = response + level.vox.speaker[self.zmbvoxid].response[category][type]; + + isresponse = 1; + } + + sound_to_play = self zmbvoxgetlinevariant( prefix, alias_suffix, force_variant, override ); + + if ( isdefined( sound_to_play ) ) + { + if ( isdefined( level._audio_custom_player_playvox ) ) + self thread [[ level._audio_custom_player_playvox ]]( prefix, index, sound_to_play, waittime, category, type, override ); + else + self thread do_player_or_npc_playvox( prefix, index, sound_to_play, waittime, category, type, override, isresponse ); + } + else + { +/# + if ( getdvarint( _hash_AEB127D ) > 0 ) + iprintln( "DIALOG DEBUGGER: SOUND_TO_PLAY is undefined" ); +#/ + } +} + +do_player_or_npc_playvox( prefix, index, sound_to_play, waittime, category, type, override, isresponse ) +{ + self endon( "death_or_disconnect" ); + + if ( isdefined( level.skit_vox_override ) && level.skit_vox_override && ( isdefined( override ) && !override ) ) + return; + + if ( !isdefined( self.isspeaking ) ) + self.isspeaking = 0; + + if ( isdefined( self.isspeaking ) && self.isspeaking ) + { +/# + println( "DIALOG DEBUGGER: Can't play (" + ( prefix + sound_to_play ) + ") because we are speaking already." ); +#/ + return; + } + + if ( !self arenearbyspeakersactive() || isdefined( self.ignorenearbyspkrs ) && self.ignorenearbyspkrs ) + { + self.speakingline = sound_to_play; + self.isspeaking = 1; + + if ( isplayer( self ) ) + self setclientfieldtoplayer( "isspeaking", 1 ); + + self notify( "speaking", type ); + playbacktime = soundgetplaybacktime( prefix + sound_to_play ); + + if ( !isdefined( playbacktime ) ) + return; + + if ( playbacktime >= 0 ) + playbacktime *= 0.001; + else + playbacktime = 1; + + self playsoundontag( prefix + sound_to_play, "J_Head" ); + wait( playbacktime ); + + if ( isplayer( self ) && !( isdefined( isresponse ) && isresponse ) && isdefined( self.last_vo_played_time ) ) + { + if ( gettime() < self.last_vo_played_time + 5000 ) + waittime = 15; + } + + wait( waittime ); + self notify( "done_speaking" ); + self.isspeaking = 0; + + if ( isplayer( self ) ) + self setclientfieldtoplayer( "isspeaking", 0 ); + + if ( isplayer( self ) ) + self.last_vo_played_time = gettime(); + + if ( isdefined( isresponse ) && isresponse ) + return; + + if ( isdefined( level.vox.speaker[self.zmbvoxid].response ) && isdefined( level.vox.speaker[self.zmbvoxid].response[category] ) && isdefined( level.vox.speaker[self.zmbvoxid].response[category][type] ) ) + { + if ( isdefined( self.isnpc ) && self.isnpc || !flag( "solo_game" ) ) + { + if ( isdefined( level._audio_custom_response_line ) ) + level thread [[ level._audio_custom_response_line ]]( self, index, category, type ); + else + level thread setup_response_line( self, index, category, type ); + } + } + } + else + { +/# + println( "DIALOG DEBUGGER: Can't play (" + ( prefix + sound_to_play ) + ") because someone is nearby speaking already." ); +#/ + } +} + +setup_response_line( player, index, category, type ) +{ + dempsey = 0; + nikolai = 1; + takeo = 2; + richtofen = 3; + + switch ( player.entity_num ) + { + case 0: + level setup_hero_rival( player, nikolai, richtofen, category, type ); + break; + case 1: + level setup_hero_rival( player, richtofen, takeo, category, type ); + break; + case 2: + level setup_hero_rival( player, dempsey, nikolai, category, type ); + break; + case 3: + level setup_hero_rival( player, takeo, dempsey, category, type ); + break; + } +} + +setup_hero_rival( player, hero, rival, category, type ) +{ + players = get_players(); + hero_player = undefined; + rival_player = undefined; + + foreach ( ent in players ) + { + if ( ent.characterindex == hero ) + { + hero_player = ent; + continue; + } + + if ( ent.characterindex == rival ) + rival_player = ent; + } + + if ( isdefined( hero_player ) && isdefined( rival_player ) ) + { + if ( randomint( 100 ) > 50 ) + hero_player = undefined; + else + rival_player = undefined; + } + + if ( isdefined( hero_player ) && distancesquared( player.origin, hero_player.origin ) < 250000 ) + hero_player create_and_play_dialog( category, type, "hr_" ); + else if ( isdefined( rival_player ) && distancesquared( player.origin, rival_player.origin ) < 250000 ) + rival_player create_and_play_dialog( category, type, "riv_" ); +} + +do_announcer_playvox( category, type, team ) +{ + if ( !isdefined( level.vox.speaker["announcer"].alias[category] ) || !isdefined( level.vox.speaker["announcer"].alias[category][type] ) ) + return; + + if ( !isdefined( level.devil_is_speaking ) ) + level.devil_is_speaking = 0; + + prefix = level.vox.speaker["announcer"].prefix; + suffix = level.vox.speaker["announcer"].ent zmbvoxgetlinevariant( prefix, level.vox.speaker["announcer"].alias[category][type] ); + + if ( !isdefined( suffix ) ) + return; + + alias = prefix + suffix; + + if ( level.devil_is_speaking == 0 ) + { + level.devil_is_speaking = 1; + + if ( !isdefined( team ) ) + level.vox.speaker["announcer"].ent playsoundwithnotify( alias, "sounddone" ); + else + level thread zmbvoxannouncertoteam( category, type, team ); + + level.vox.speaker["announcer"].ent waittill( "sounddone" ); + + level.devil_is_speaking = 0; + } +} + +zmbvoxannouncertoteam( category, type, team ) +{ + prefix = level.vox.speaker["announcer"].prefix; + alias_to_team = prefix + level.vox.speaker["announcer"].ent zmbvoxgetlinevariant( prefix, level.vox.speaker["announcer"].alias[category][type] ); + + if ( isdefined( level.vox.speaker["announcer"].response[category][type] ) ) + alias_to_rival = prefix + level.vox.speaker["announcer"].ent zmbvoxgetlinevariant( prefix, level.vox.speaker["announcer"].response[category][type] ); + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i]._encounters_team ) ) + continue; + + if ( players[i]._encounters_team == team ) + { + level.vox.speaker["announcer"].ent playsoundtoplayer( alias_to_team, players[i] ); + continue; + } + + if ( isdefined( alias_to_rival ) ) + level.vox.speaker["announcer"].ent playsoundtoplayer( alias_to_rival, players[i] ); + } + + wait 3; + level.vox.speaker["announcer"].ent notify( "sounddone" ); +} + +player_killstreak_timer() +{ + self endon( "disconnect" ); + self endon( "death" ); + + if ( getdvar( _hash_FB12F109 ) == "" ) + setdvar( "zombie_kills", "7" ); + + if ( getdvar( _hash_D0575D76 ) == "" ) + setdvar( "zombie_kill_timer", "5" ); + + kills = getdvarint( _hash_FB12F109 ); + time = getdvarint( _hash_D0575D76 ); + + if ( !isdefined( self.timerisrunning ) ) + { + self.timerisrunning = 0; + self.killcounter = 0; + } + + while ( true ) + { + self waittill( "zom_kill", zomb ); + + if ( isdefined( zomb._black_hole_bomb_collapse_death ) && zomb._black_hole_bomb_collapse_death == 1 ) + continue; + + if ( isdefined( zomb.microwavegun_death ) && zomb.microwavegun_death ) + continue; + + self.killcounter++; + + if ( self.timerisrunning != 1 ) + { + self.timerisrunning = 1; + self thread timer_actual( kills, time ); + } + } +} + +player_zombie_kill_vox( hit_location, player, mod, zombie ) +{ + weapon = player getcurrentweapon(); + dist = distancesquared( player.origin, zombie.origin ); + + if ( !isdefined( level.zombie_vars[player.team]["zombie_insta_kill"] ) ) + level.zombie_vars[player.team]["zombie_insta_kill"] = 0; + + instakill = level.zombie_vars[player.team]["zombie_insta_kill"]; + death = [[ level.audio_get_mod_type ]]( hit_location, mod, weapon, zombie, instakill, dist, player ); + chance = get_response_chance( death ); + + if ( chance > randomintrange( 1, 100 ) && !( isdefined( player.force_wait_on_kill_line ) && player.force_wait_on_kill_line ) ) + { + player.force_wait_on_kill_line = 1; + player create_and_play_dialog( "kill", death ); + wait 2; + + if ( isdefined( player ) ) + player.force_wait_on_kill_line = 0; + } +} + +get_response_chance( event ) +{ + if ( !isdefined( level.response_chances[event] ) ) + return 0; + + return level.response_chances[event]; +} + +get_mod_type( impact, mod, weapon, zombie, instakill, dist, player ) +{ + close_dist = 4096; + med_dist = 15376; + far_dist = 160000; + + if ( isdefined( zombie._black_hole_bomb_collapse_death ) && zombie._black_hole_bomb_collapse_death == 1 ) + return "default"; + + if ( zombie.animname == "screecher_zombie" && mod == "MOD_MELEE" ) + return "killed_screecher"; + + if ( is_placeable_mine( weapon ) ) + { + if ( !instakill ) + return "claymore"; + else + return "weapon_instakill"; + } + + if ( weapon == "jetgun_zm" || weapon == "jetgun_upgraded_zm" ) + { + if ( instakill ) + return "weapon_instakill"; + else + return "jetgun_kill"; + } + + if ( weapon == "slipgun_zm" || weapon == "slipgun_upgraded_zm" ) + { + if ( instakill ) + return "weapon_instakill"; + else + return "slipgun_kill"; + } + + if ( isdefined( zombie.damageweapon ) && zombie.damageweapon == "cymbal_monkey_zm" ) + { + if ( instakill ) + return "weapon_instakill"; + else + return "monkey"; + } + + if ( is_headshot( weapon, impact, mod ) && dist >= far_dist ) + return "headshot"; + + if ( ( mod == "MOD_MELEE" || mod == "MOD_BAYONET" || mod == "MOD_UNKNOWN" ) && dist < close_dist ) + { + if ( !instakill ) + { + if ( player hasweapon( "sickle_knife_zm" ) ) + return "sickle"; + else + return "melee"; + } + else + return "melee_instakill"; + } + + if ( isdefined( zombie.damageweapon ) && zombie.damageweapon == "zombie_nesting_doll_single" ) + { + if ( !instakill ) + return "dolls"; + else + return "weapon_instakill"; + } + + if ( is_explosive_damage( mod ) && weapon != "ray_gun_zm" && !( isdefined( zombie.is_on_fire ) && zombie.is_on_fire ) ) + { + if ( !instakill ) + return "explosive"; + else + return "weapon_instakill"; + } + + if ( ( issubstr( weapon, "flame" ) || issubstr( weapon, "molotov_" ) || issubstr( weapon, "napalmblob_" ) ) && ( mod == "MOD_BURNED" || mod == "MOD_GRENADE" || mod == "MOD_GRENADE_SPLASH" ) ) + { + if ( !instakill ) + return "flame"; + else + return "weapon_instakill"; + } + + if ( weapon == "ray_gun_zm" && dist > far_dist ) + { + if ( !instakill ) + return "raygun"; + else + return "weapon_instakill"; + } + + if ( !isdefined( impact ) ) + impact = ""; + + if ( mod == "MOD_RIFLE_BULLET" || mod == "MOD_PISTOL_BULLET" ) + { + if ( !instakill ) + return "bullet"; + else + return "weapon_instakill"; + } + + if ( instakill ) + return "default"; + + if ( mod != "MOD_MELEE" && zombie.animname == "quad_zombie" ) + return "quad"; + + if ( mod != "MOD_MELEE" && zombie.animname == "astro_zombie" ) + return "astro"; + + if ( mod != "MOD_MELEE" && !zombie.has_legs ) + return "crawler"; + + if ( mod != "MOD_BURNED" && dist < close_dist ) + return "closekill"; + + return "default"; +} + +timer_actual( kills, time ) +{ + self endon( "disconnect" ); + self endon( "death" ); + timer = gettime() + time * 1000; + + while ( gettime() < timer ) + { + if ( self.killcounter > kills ) + { + self create_and_play_dialog( "kill", "streak" ); + wait 1; + self.killcounter = 0; + timer = -1; + } + + wait 0.1; + } + + wait 10; + self.killcounter = 0; + self.timerisrunning = 0; +} + +perks_a_cola_jingle_timer() +{ + if ( isdefined( level.sndperksacolaloopoverride ) ) + { + self thread [[ level.sndperksacolaloopoverride ]](); + return; + } + + self endon( "death" ); + self thread play_random_broken_sounds(); + + while ( true ) + { + wait( randomfloatrange( 31, 45 ) ); + + if ( randomint( 100 ) < 15 ) + self thread play_jingle_or_stinger( self.script_sound ); + } +} + +play_jingle_or_stinger( perksacola ) +{ + if ( isdefined( level.sndperksacolajingleoverride ) ) + { + self thread [[ level.sndperksacolajingleoverride ]](); + return; + } + + playsoundatposition( "evt_electrical_surge", self.origin ); + + if ( !isdefined( self.jingle_is_playing ) ) + self.jingle_is_playing = 0; + + if ( isdefined( perksacola ) ) + { + if ( self.jingle_is_playing == 0 && level.music_override == 0 ) + { + self.jingle_is_playing = 1; + self playsoundontag( perksacola, "tag_origin", "sound_done" ); + + if ( issubstr( perksacola, "sting" ) ) + wait 10; + else if ( isdefined( self.longjinglewait ) ) + wait 60; + else + wait 30; + + self.jingle_is_playing = 0; + } + } +} + +play_random_broken_sounds() +{ + self endon( "death" ); + level endon( "jingle_playing" ); + + if ( !isdefined( self.script_sound ) ) + self.script_sound = "null"; + + if ( self.script_sound == "mus_perks_revive_jingle" ) + { + while ( true ) + { + wait( randomfloatrange( 7, 18 ) ); + playsoundatposition( "zmb_perks_broken_jingle", self.origin ); + playsoundatposition( "evt_electrical_surge", self.origin ); + } + } + else + { + while ( true ) + { + wait( randomfloatrange( 7, 18 ) ); + playsoundatposition( "evt_electrical_surge", self.origin ); + } + } +} + +perk_vox( perk ) +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( !isdefined( level.vox.speaker["player"].alias["perk"][perk] ) ) + { +/# + iprintlnbold( perk + " has no PLR VOX category set up." ); +#/ + return; + } + + self create_and_play_dialog( "perk", perk ); +} + +dialog_debugger( category, type ) +{ +/# + println( "DIALOG DEBUGGER: " + self.zmbvoxid + " attempting to speak" ); + + if ( !isdefined( level.vox.speaker[self.zmbvoxid].alias[category][type] ) ) + { + iprintlnbold( self.zmbvoxid + " tried to play a line, but no alias exists. Category: " + category + " Type: " + type ); + println( "DIALOG DEBUGGER ERROR: Alias Not Defined For " + category + " " + type ); + } + + if ( !isdefined( level.vox.speaker[self.zmbvoxid].response ) ) + println( "DIALOG DEBUGGER ERROR: Response Alias Not Defined For " + category + " " + type + "_response" ); +#/ +} + +init_music_states() +{ + level.music_override = 0; + level.music_round_override = 0; + level.old_music_state = undefined; + level.zmb_music_states = []; + level thread setupmusicstate( "round_start", "mus_zombie_round_start", 1, 1, 1, "WAVE" ); + level thread setupmusicstate( "round_end", "mus_zombie_round_over", 1, 1, 1, "SILENCE" ); + level thread setupmusicstate( "wave_loop", "WAVE", 0, 1, undefined, undefined ); + level thread setupmusicstate( "game_over", "mus_zombie_game_over", 1, 0, undefined, "SILENCE" ); + level thread setupmusicstate( "dog_start", "mus_zombie_dog_start", 1, 1, undefined, undefined ); + level thread setupmusicstate( "dog_end", "mus_zombie_dog_end", 1, 1, undefined, undefined ); + level thread setupmusicstate( "egg", "EGG", 0, 0, undefined, undefined ); + level thread setupmusicstate( "egg_safe", "EGG_SAFE", 0, 0, undefined, undefined ); + level thread setupmusicstate( "egg_a7x", "EGG_A7X", 0, 0, undefined, undefined ); + level thread setupmusicstate( "sam_reveal", "SAM", 0, 0, undefined, undefined ); + level thread setupmusicstate( "brutus_round_start", "mus_event_brutus_round_start", 1, 1, 0, "WAVE" ); + level thread setupmusicstate( "last_life", "LAST_LIFE", 0, 1, undefined, undefined ); +} + +setupmusicstate( state, alias, is_alias, override, round_override, musicstate ) +{ + if ( !isdefined( level.zmb_music_states[state] ) ) + level.zmb_music_states[state] = spawnstruct(); + + level.zmb_music_states[state].music = alias; + level.zmb_music_states[state].is_alias = is_alias; + level.zmb_music_states[state].override = override; + level.zmb_music_states[state].round_override = round_override; + level.zmb_music_states[state].musicstate = musicstate; +} + +change_zombie_music( state ) +{ + wait 0.05; + m = level.zmb_music_states[state]; + + if ( !isdefined( m ) ) + { +/# + iprintlnbold( "Called change_zombie_music on undefined state: " + state ); +#/ + return; + } + + do_logic = 1; + + if ( !isdefined( level.old_music_state ) ) + do_logic = 0; + + if ( do_logic ) + { + if ( level.old_music_state == m ) + return; + else if ( level.old_music_state.music == "mus_zombie_game_over" ) + return; + } + + if ( !isdefined( m.round_override ) ) + m.round_override = 0; + + if ( m.override == 1 && level.music_override == 1 ) + return; + + if ( m.round_override == 1 && level.music_round_override == 1 ) + return; + + if ( m.is_alias ) + { + if ( isdefined( m.musicstate ) ) + maps\mp\_music::setmusicstate( m.musicstate ); + + play_sound_2d( m.music ); + } + else + maps\mp\_music::setmusicstate( m.music ); + + level.old_music_state = m; +} + +weapon_toggle_vox( alias, weapon ) +{ + self notify( "audio_activated_trigger" ); + self endon( "audio_activated_trigger" ); + prefix = "vox_pa_switcher_"; + sound_to_play = prefix + alias; + type = undefined; + + if ( isdefined( weapon ) ) + { + type = get_weapon_num( weapon ); + + if ( !isdefined( type ) ) + return; + } + + self stopsounds(); + wait 0.05; + + if ( isdefined( type ) ) + { + self playsoundwithnotify( prefix + "weapon_" + type, "sounddone" ); + + self waittill( "sounddone" ); + } + + self playsound( sound_to_play + "_0" ); +} + +get_weapon_num( weapon ) +{ + weapon_num = undefined; + + switch ( weapon ) + { + case "humangun_zm": + weapon_num = 0; + break; + case "sniper_explosive_zm": + weapon_num = 1; + break; + case "tesla_gun_zm": + weapon_num = 2; + break; + } + + return weapon_num; +} + +addasspeakernpc( ignorenearbyspeakers ) +{ + if ( !isdefined( level.npcs ) ) + level.npcs = []; + + if ( isdefined( ignorenearbyspeakers ) && ignorenearbyspeakers ) + self.ignorenearbyspkrs = 1; + else + self.ignorenearbyspkrs = 0; + + self.isnpc = 1; + level.npcs[level.npcs.size] = self; +} + +arenearbyspeakersactive() +{ + radius = 1000; + nearbyspeakeractive = 0; + speakers = get_players(); + + if ( isdefined( level.npcs ) ) + speakers = arraycombine( speakers, level.npcs, 1, 0 ); + + foreach ( person in speakers ) + { + if ( self == person ) + continue; + + if ( person is_player() ) + { + if ( person.sessionstate != "playing" ) + continue; + + if ( person maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + continue; + } + else + { + + } + + if ( isdefined( person.isspeaking ) && person.isspeaking && !( isdefined( person.ignorenearbyspkrs ) && person.ignorenearbyspkrs ) ) + { + if ( distancesquared( self.origin, person.origin ) < radius * radius ) + nearbyspeakeractive = 1; + } + } + + return nearbyspeakeractive; +} + +zmbvoxcreate() +{ + vox = spawnstruct(); + vox.speaker = []; + return vox; +} + +zmbvoxinitspeaker( speaker, prefix, ent ) +{ + ent.zmbvoxid = speaker; + + if ( !isdefined( self.speaker[speaker] ) ) + { + self.speaker[speaker] = spawnstruct(); + self.speaker[speaker].alias = []; + } + + self.speaker[speaker].prefix = prefix; + self.speaker[speaker].ent = ent; +} + +zmbvoxadd( speaker, category, type, alias, response ) +{ + assert( isdefined( speaker ) ); + assert( isdefined( category ) ); + assert( isdefined( type ) ); + assert( isdefined( alias ) ); + + if ( !isdefined( self.speaker[speaker] ) ) + { + self.speaker[speaker] = spawnstruct(); + self.speaker[speaker].alias = []; + } + + if ( !isdefined( self.speaker[speaker].alias[category] ) ) + self.speaker[speaker].alias[category] = []; + + self.speaker[speaker].alias[category][type] = alias; + + if ( isdefined( response ) ) + { + if ( !isdefined( self.speaker[speaker].response ) ) + self.speaker[speaker].response = []; + + if ( !isdefined( self.speaker[speaker].response[category] ) ) + self.speaker[speaker].response[category] = []; + + self.speaker[speaker].response[category][type] = response; + } + + create_vox_timer( type ); +} + +zmbvoxgetlinevariant( prefix, alias_suffix, force_variant, override ) +{ + if ( !isdefined( self.sound_dialog ) ) + { + self.sound_dialog = []; + self.sound_dialog_available = []; + } + + if ( !isdefined( self.sound_dialog[alias_suffix] ) ) + { + num_variants = maps\mp\zombies\_zm_spawner::get_number_variants( prefix + alias_suffix ); + + if ( num_variants <= 0 ) + { +/# + if ( getdvarint( _hash_AEB127D ) > 0 ) + println( "DIALOG DEBUGGER: No variants found for - " + prefix + alias_suffix ); +#/ + return undefined; + } + + for ( i = 0; i < num_variants; i++ ) + self.sound_dialog[alias_suffix][i] = i; + + self.sound_dialog_available[alias_suffix] = []; + } + + if ( self.sound_dialog_available[alias_suffix].size <= 0 ) + { + for ( i = 0; i < self.sound_dialog[alias_suffix].size; i++ ) + self.sound_dialog_available[alias_suffix][i] = self.sound_dialog[alias_suffix][i]; + } + + variation = random( self.sound_dialog_available[alias_suffix] ); + arrayremovevalue( self.sound_dialog_available[alias_suffix], variation ); + + if ( isdefined( force_variant ) ) + variation = force_variant; + + if ( !isdefined( override ) ) + override = 0; + + return alias_suffix + "_" + variation; +} + +zmbvoxcrowdonteam( alias, team, other_alias ) +{ + alias = "vox_crowd_" + alias; + + if ( !isdefined( team ) ) + { + level play_sound_2d( alias ); + return; + } + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i]._encounters_team ) ) + continue; + + if ( players[i]._encounters_team == team ) + { + players[i] playsoundtoplayer( alias, players[i] ); + continue; + } + + if ( isdefined( other_alias ) ) + players[i] playsoundtoplayer( other_alias, players[i] ); + } +} + +playvoxtoplayer( category, type, force_variant ) +{ + if ( self.sessionstate != "playing" ) + return; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + return; + + prefix = level.vox.speaker[self.zmbvoxid].prefix; + alias_suffix = level.vox.speaker[self.zmbvoxid].alias[category][type]; + prefix = prefix + self.characterindex + "_"; + + if ( !isdefined( alias_suffix ) ) + return; + + sound_to_play = self zmbvoxgetlinevariant( prefix, alias_suffix, force_variant ); + + if ( isdefined( sound_to_play ) ) + { + sound = prefix + sound_to_play; + self playsoundtoplayer( sound, self ); + } +} + +sndmusicstingerevent( type, player ) +{ + if ( isdefined( level.sndmusicstingerevent ) ) + [[ level.sndmusicstingerevent ]]( type, player ); +} + +custom_kill_damaged_vo( player ) +{ + self notify( "sound_damage_player_updated" ); + self endon( "death" ); + self endon( "sound_damage_player_updated" ); + self.sound_damage_player = player; + wait 5; + self.sound_damage_player = undefined; +} diff --git a/ZM/Core/maps/mp/zombies/_zm_audio_announcer.gsc b/ZM/Core/maps/mp/zombies/_zm_audio_announcer.gsc new file mode 100644 index 0000000..43d5473 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_audio_announcer.gsc @@ -0,0 +1,443 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_spawner; + +init() +{ + game["zmbdialog"] = []; + game["zmbdialog"]["prefix"] = "vox_zmba"; + createvox( "carpenter", "powerup_carpenter" ); + createvox( "insta_kill", "powerup_instakill" ); + createvox( "double_points", "powerup_doublepoints" ); + createvox( "nuke", "powerup_nuke" ); + createvox( "full_ammo", "powerup_maxammo" ); + createvox( "fire_sale", "powerup_firesale" ); + createvox( "minigun", "powerup_death_machine" ); + createvox( "zombie_blood", "powerup_zombie_blood" ); + createvox( "boxmove", "event_magicbox" ); + createvox( "dogstart", "event_dogstart" ); + thread init_gamemodespecificvox( getdvar( "ui_gametype" ), getdvar( "ui_zm_mapstartlocation" ) ); + level.allowzmbannouncer = 1; +} + +init_gamemodespecificvox( mode, location ) +{ + switch ( mode ) + { + case "zmeat": + init_meatvox( "meat" ); + break; + case "zrace": + init_racevox( "race", location ); + break; + case "zgrief": + init_griefvox( "grief" ); + break; + case "zcleansed": + init_cleansed( location ); + break; + default: + init_gamemodecommonvox(); + break; + } +} + +init_gamemodecommonvox( prefix ) +{ + createvox( "rules", "rules", prefix ); + createvox( "countdown", "intro", prefix ); + createvox( "side_switch", "side_switch", prefix ); + createvox( "round_win", "win_rd", prefix ); + createvox( "round_lose", "lose_rd", prefix ); + createvox( "round_tied", "tied_rd", prefix ); + createvox( "match_win", "win", prefix ); + createvox( "match_lose", "lose", prefix ); + createvox( "match_tied", "tied", prefix ); +} + +init_griefvox( prefix ) +{ + init_gamemodecommonvox( prefix ); + createvox( "1_player_down", "1rivdown", prefix ); + createvox( "2_player_down", "2rivdown", prefix ); + createvox( "3_player_down", "3rivdown", prefix ); + createvox( "4_player_down", "4rivdown", prefix ); + createvox( "grief_restarted", "restart", prefix ); + createvox( "grief_lost", "lose", prefix ); + createvox( "grief_won", "win", prefix ); + createvox( "1_player_left", "1rivup", prefix ); + createvox( "2_player_left", "2rivup", prefix ); + createvox( "3_player_left", "3rivup", prefix ); + createvox( "last_player", "solo", prefix ); +} + +init_cleansed( prefix ) +{ + init_gamemodecommonvox( prefix ); + createvox( "dr_start_single_0", "dr_start_0" ); + createvox( "dr_start_2", "dr_start_1" ); + createvox( "dr_start_3", "dr_start_2" ); + createvox( "dr_cure_found_line", "dr_cure_found" ); + createvox( "dr_monkey_killer", "dr_monkey_0" ); + createvox( "dr_monkey_killee", "dr_monkey_1" ); + createvox( "dr_human_killed", "dr_kill_plr" ); + createvox( "dr_human_killer", "dr_kill_plr_2" ); + createvox( "dr_survival", "dr_plr_survive_0" ); + createvox( "dr_zurvival", "dr_zmb_survive_2" ); + createvox( "dr_countdown0", "dr_plr_survive_1" ); + createvox( "dr_countdown1", "dr_plr_survive_2" ); + createvox( "dr_countdown2", "dr_plr_survive_3" ); + createvox( "dr_ending", "dr_time_0" ); +} + +init_meatvox( prefix ) +{ + init_gamemodecommonvox( prefix ); + createvox( "meat_drop", "drop", prefix ); + createvox( "meat_grab", "grab", prefix ); + createvox( "meat_grab_A", "team_cdc", prefix ); + createvox( "meat_grab_B", "team_cia", prefix ); + createvox( "meat_land", "land", prefix ); + createvox( "meat_hold", "hold", prefix ); + createvox( "meat_revive_1", "revive1", prefix ); + createvox( "meat_revive_2", "revive2", prefix ); + createvox( "meat_revive_3", "revive3", prefix ); + createvox( "meat_ring_splitter", "ring_tripple", prefix ); + createvox( "meat_ring_minigun", "ring_death", prefix ); + createvox( "meat_ring_ammo", "ring_ammo", prefix ); +} + +init_racevox( prefix, location ) +{ + init_gamemodecommonvox( prefix ); + + switch ( location ) + { + case "tunnel": + createvox( "rules", "rules_" + location, prefix ); + createvox( "countdown", "intro_" + location, prefix ); + break; + case "power": + createvox( "rules", "rules_" + location, prefix ); + createvox( "countdown", "intro_" + location, prefix ); + createvox( "lap1", "lap1", prefix ); + createvox( "lap2", "lap2", prefix ); + createvox( "lap_final", "lap_final", prefix ); + break; + case "farm": + createvox( "rules", "rules_" + location, prefix ); + createvox( "countdown", "intro_" + location, prefix ); + createvox( "hoop_area", "hoop_area", prefix ); + createvox( "hoop_miss", "hoop_miss", prefix ); + break; + default: + break; + } + + createvox( "race_room_2_ally", "room2_ally", prefix ); + createvox( "race_room_3_ally", "room3_ally", prefix ); + createvox( "race_room_4_ally", "room4_ally", prefix ); + createvox( "race_room_5_ally", "room5_ally", prefix ); + createvox( "race_room_2_axis", "room2_axis", prefix ); + createvox( "race_room_3_axis", "room3_axis", prefix ); + createvox( "race_room_4_axis", "room4_axis", prefix ); + createvox( "race_room_5_axis", "room5_axis", prefix ); + createvox( "race_ahead_1_ally", "ahead1_ally", prefix ); + createvox( "race_ahead_2_ally", "ahead2_ally", prefix ); + createvox( "race_ahead_3_ally", "ahead3_ally", prefix ); + createvox( "race_ahead_4_ally", "ahead4_ally", prefix ); + createvox( "race_ahead_1_axis", "ahead1_axis", prefix ); + createvox( "race_ahead_2_axis", "ahead2_axis", prefix ); + createvox( "race_ahead_3_axis", "ahead3_axis", prefix ); + createvox( "race_ahead_4_axis", "ahead4_axis", prefix ); + createvox( "race_kill_15", "door15", prefix ); + createvox( "race_kill_10", "door10", prefix ); + createvox( "race_kill_5", "door5", prefix ); + createvox( "race_kill_3", "door3", prefix ); + createvox( "race_kill_1", "door1", prefix ); + createvox( "race_door_open", "door_open", prefix ); + createvox( "race_door_nag", "door_nag", prefix ); + createvox( "race_grief_incoming", "grief_income_ammo", prefix ); + createvox( "race_grief_land", "grief_land", prefix ); + createvox( "race_laststand", "last_stand", prefix ); +} + +createvox( type, alias, gametype ) +{ + if ( !isdefined( gametype ) ) + gametype = ""; + else + gametype += "_"; + + game["zmbdialog"][type] = gametype + alias; +} + +announceroundwinner( winner, delay ) +{ + if ( isdefined( delay ) && delay > 0 ) + wait( delay ); + + if ( !isdefined( winner ) || isplayer( winner ) ) + return; + + if ( winner != "tied" ) + { + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( player._encounters_team ) && player._encounters_team == winner ) + { + winning_team = player.pers["team"]; + break; + } + } + + losing_team = getotherteam( winning_team ); + leaderdialog( "round_win", winning_team, undefined, 1 ); + leaderdialog( "round_lose", losing_team, undefined, 1 ); + } + else + leaderdialog( "round_tied", undefined, undefined, 1 ); +} + +announcematchwinner( winner, delay ) +{ + if ( isdefined( delay ) && delay > 0 ) + wait( delay ); + + if ( !isdefined( winner ) || isplayer( winner ) ) + return; + + if ( winner != "tied" ) + { + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( player._encounters_team ) && player._encounters_team == winner ) + { + winning_team = player.pers["team"]; + break; + } + } + + losing_team = getotherteam( winning_team ); + leaderdialog( "match_win", winning_team, undefined, 1 ); + leaderdialog( "match_lose", losing_team, undefined, 1 ); + } + else + leaderdialog( "match_tied", undefined, undefined, 1 ); +} + +announcegamemoderules() +{ + if ( getdvar( "ui_zm_mapstartlocation" ) == "town" ) + leaderdialog( "rules", undefined, undefined, undefined, 20 ); +} + +leaderdialog( dialog, team, group, queue, waittime ) +{ + assert( isdefined( level.players ) ); + + if ( !isdefined( team ) ) + { + leaderdialogbothteams( dialog, "allies", dialog, "axis", group, queue, waittime ); + return; + } + + if ( level.splitscreen ) + { + if ( level.players.size ) + level.players[0] leaderdialogonplayer( dialog, group, queue, waittime ); + + return; + } + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + player leaderdialogonplayer( dialog, group, queue, waittime ); + } +} + +leaderdialogbothteams( dialog1, team1, dialog2, team2, group, queue, waittime ) +{ + assert( isdefined( level.players ) ); + + if ( level.splitscreen ) + { + if ( level.players.size ) + level.players[0] leaderdialogonplayer( dialog1, group, queue, waittime ); + + return; + } + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + team = player.pers["team"]; + + if ( !isdefined( team ) ) + continue; + + if ( team == team1 ) + { + player leaderdialogonplayer( dialog1, group, queue, waittime ); + continue; + } + + if ( team == team2 ) + player leaderdialogonplayer( dialog2, group, queue, waittime ); + } +} + +leaderdialogonplayer( dialog, group, queue, waittime ) +{ + team = self.pers["team"]; + + if ( !isdefined( team ) ) + return; + + if ( team != "allies" && team != "axis" ) + return; + + if ( isdefined( group ) ) + { + if ( self.zmbdialoggroup == group ) + return; + + hadgroupdialog = isdefined( self.zmbdialoggroups[group] ); + self.zmbdialoggroups[group] = dialog; + dialog = group; + + if ( hadgroupdialog ) + return; + } + + if ( !self.zmbdialogactive ) + self thread playleaderdialogonplayer( dialog, team, waittime ); + else if ( isdefined( queue ) && queue ) + self.zmbdialogqueue[self.zmbdialogqueue.size] = dialog; +} + +playleaderdialogonplayer( dialog, team, waittime ) +{ + self endon( "disconnect" ); + + if ( level.allowzmbannouncer ) + { + if ( !isdefined( game["zmbdialog"][dialog] ) ) + { +/# + if ( getdvarint( _hash_AEB127D ) > 0 ) + println( "DIALOG DEBUGGER: No VOX created for - " + dialog ); +#/ + return; + } + } + + self.zmbdialogactive = 1; + + if ( isdefined( self.zmbdialoggroups[dialog] ) ) + { + group = dialog; + dialog = self.zmbdialoggroups[group]; + self.zmbdialoggroups[group] = undefined; + self.zmbdialoggroup = group; + } + + if ( level.allowzmbannouncer ) + { + alias = game["zmbdialog"]["prefix"] + "_" + game["zmbdialog"][dialog]; + variant = self getleaderdialogvariant( alias ); + + if ( !isdefined( variant ) ) + full_alias = alias; + else + full_alias = alias + "_" + variant; + + self playlocalsound( full_alias ); + } + + if ( isdefined( waittime ) ) + wait( waittime ); + else + wait 4.0; + + self.zmbdialogactive = 0; + self.zmbdialoggroup = ""; + + if ( self.zmbdialogqueue.size > 0 && level.allowzmbannouncer ) + { + nextdialog = self.zmbdialogqueue[0]; + + for ( i = 1; i < self.zmbdialogqueue.size; i++ ) + self.zmbdialogqueue[i - 1] = self.zmbdialogqueue[i]; + + self.zmbdialogqueue[i - 1] = undefined; + self thread playleaderdialogonplayer( nextdialog, team ); + } +} + +getleaderdialogvariant( alias ) +{ + if ( !isdefined( alias ) ) + return; + + if ( !isdefined( level.announcer_dialog ) ) + { + level.announcer_dialog = []; + level.announcer_dialog_available = []; + } + + num_variants = maps\mp\zombies\_zm_spawner::get_number_variants( alias ); + + if ( num_variants <= 0 ) + { +/# + if ( getdvarint( _hash_AEB127D ) > 0 ) + println( "DIALOG DEBUGGER: No variants found for - " + alias ); +#/ + return undefined; + } + + for ( i = 0; i < num_variants; i++ ) + level.announcer_dialog[alias][i] = i; + + level.announcer_dialog_available[alias] = []; + + if ( level.announcer_dialog_available[alias].size <= 0 ) + level.announcer_dialog_available[alias] = level.announcer_dialog[alias]; + + variation = random( level.announcer_dialog_available[alias] ); + level.announcer_dialog_available[alias] = arrayremovevalue( level.announcer_dialog_available[alias], variation ); + return variation; +} + +getroundswitchdialog( switchtype ) +{ + switch ( switchtype ) + { + case "halftime": + return "halftime"; + case "overtime": + return "overtime"; + default: + return "side_switch"; + } +} + +getotherteam( team ) +{ + if ( team == "allies" ) + return "axis"; + else + return "allies"; +} diff --git a/ZM/Core/maps/mp/zombies/_zm_blockers.gsc b/ZM/Core/maps/mp/zombies/_zm_blockers.gsc new file mode 100644 index 0000000..da2f90f --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_blockers.gsc @@ -0,0 +1,2273 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\zombies\_zm_score; +#include maps\mp\_demo; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_unitrigger; + +init() +{ + init_blockers(); + + if ( isdefined( level.quantum_bomb_register_result_func ) ) + [[ level.quantum_bomb_register_result_func ]]( "open_nearest_door", ::quantum_bomb_open_nearest_door_result, 35, ::quantum_bomb_open_nearest_door_validation ); +} + +init_blockers() +{ + level.exterior_goals = getstructarray( "exterior_goal", "targetname" ); + array_thread( level.exterior_goals, ::blocker_init ); + zombie_doors = getentarray( "zombie_door", "targetname" ); + + if ( isdefined( zombie_doors ) ) + { + flag_init( "door_can_close" ); + array_thread( zombie_doors, ::door_init ); + } + + zombie_debris = getentarray( "zombie_debris", "targetname" ); + array_thread( zombie_debris, ::debris_init ); + flag_blockers = getentarray( "flag_blocker", "targetname" ); + array_thread( flag_blockers, ::flag_blocker ); +} + +door_init() +{ + self.type = undefined; + self.purchaser = undefined; + self._door_open = 0; + targets = getentarray( self.target, "targetname" ); + + if ( isdefined( self.script_flag ) && !isdefined( level.flag[self.script_flag] ) ) + { + if ( isdefined( self.script_flag ) ) + { + tokens = strtok( self.script_flag, "," ); + + for ( i = 0; i < tokens.size; i++ ) + flag_init( self.script_flag ); + } + } + + if ( !isdefined( self.script_noteworthy ) ) + self.script_noteworthy = "default"; + + self.doors = []; + + for ( i = 0; i < targets.size; i++ ) + { + targets[i] door_classify( self ); + + if ( !isdefined( targets[i].og_origin ) ) + { + targets[i].og_origin = targets[i].origin; + targets[i].og_angles = targets[i].angles; + } + } + + cost = 1000; + + if ( isdefined( self.zombie_cost ) ) + cost = self.zombie_cost; + + self setcursorhint( "HINT_NOICON" ); + self thread door_think(); + + if ( isdefined( self.script_noteworthy ) ) + { + if ( self.script_noteworthy == "electric_door" || self.script_noteworthy == "electric_buyable_door" ) + { + if ( getdvar( "ui_gametype" ) == "zgrief" ) + { + self setinvisibletoall(); + return; + } + + self sethintstring( &"ZOMBIE_NEED_POWER" ); + + if ( isdefined( level.door_dialog_function ) ) + self thread [[ level.door_dialog_function ]](); + + return; + } + else if ( self.script_noteworthy == "local_electric_door" ) + { + if ( getdvar( "ui_gametype" ) == "zgrief" ) + { + self setinvisibletoall(); + return; + } + + self sethintstring( &"ZOMBIE_NEED_LOCAL_POWER" ); + + if ( isdefined( level.door_dialog_function ) ) + self thread [[ level.door_dialog_function ]](); + + return; + } + else if ( self.script_noteworthy == "kill_counter_door" ) + { + self sethintstring( &"ZOMBIE_DOOR_ACTIVATE_COUNTER", cost ); + return; + } + } + + self set_hint_string( self, "default_buy_door", cost ); +} + +door_classify( parent_trig ) +{ + if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "clip" ) + { + parent_trig.clip = self; + parent_trig.script_string = "clip"; + } + else if ( !isdefined( self.script_string ) ) + { + if ( isdefined( self.script_angles ) ) + self.script_string = "rotate"; + else if ( isdefined( self.script_vector ) ) + self.script_string = "move"; + } + else + { + if ( !isdefined( self.script_string ) ) + self.script_string = ""; + + switch ( self.script_string ) + { + case "anim": + assert( isdefined( self.script_animname ), "Blocker_init: You must specify a script_animname for " + self.targetname ); + assert( isdefined( level.scr_anim[self.script_animname] ), "Blocker_init: You must define a level.scr_anim for script_anim -> " + self.script_animname ); + assert( isdefined( level.blocker_anim_func ), "Blocker_init: You must define a level.blocker_anim_func" ); + break; + case "counter_1s": + parent_trig.counter_1s = self; + return; + case "counter_10s": + parent_trig.counter_10s = self; + return; + case "counter_100s": + parent_trig.counter_100s = self; + return; + case "explosives": + if ( !isdefined( parent_trig.explosives ) ) + parent_trig.explosives = []; + + parent_trig.explosives[parent_trig.explosives.size] = self; + return; + } + } + + if ( self.classname == "script_brushmodel" ) + self disconnectpaths(); + + parent_trig.doors[parent_trig.doors.size] = self; +} + +door_buy() +{ + self waittill( "trigger", who, force ); + + if ( isdefined( level.custom_door_buy_check ) ) + { + if ( !who [[ level.custom_door_buy_check ]]( self ) ) + return false; + } + + if ( getdvarint( _hash_2ECA0C0E ) > 0 || isdefined( force ) && force ) + return true; + + if ( !who usebuttonpressed() ) + return false; + + if ( who in_revive_trigger() ) + return false; + + if ( is_player_valid( who ) ) + { + players = get_players(); + cost = self.zombie_cost; + + if ( who maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) + cost = who maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_double_points_cost( cost ); + + if ( self._door_open == 1 ) + self.purchaser = undefined; + else if ( who.score >= cost ) + { + who maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 ); + maps\mp\_demo::bookmark( "zm_player_door", gettime(), who ); + who maps\mp\zombies\_zm_stats::increment_client_stat( "doors_purchased" ); + who maps\mp\zombies\_zm_stats::increment_player_stat( "doors_purchased" ); + self.purchaser = who; + } + else + { + play_sound_at_pos( "no_purchase", self.doors[0].origin ); + + if ( isdefined( level.custom_generic_deny_vo_func ) ) + who thread [[ level.custom_generic_deny_vo_func ]]( 1 ); + else + who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "door_deny" ); + + return false; + } + } + + if ( isdefined( level._door_open_rumble_func ) ) + who thread [[ level._door_open_rumble_func ]](); + + return true; +} + +door_delay() +{ + if ( isdefined( self.explosives ) ) + { + for ( i = 0; i < self.explosives.size; i++ ) + self.explosives[i] show(); + } + + if ( !isdefined( self.script_int ) ) + self.script_int = 5; + + all_trigs = getentarray( self.target, "target" ); + + for ( i = 0; i < all_trigs.size; i++ ) + all_trigs[i] trigger_off(); + + wait( self.script_int ); + + for ( i = 0; i < self.script_int; i++ ) + { +/# + iprintln( self.script_int - i ); +#/ + wait 1; + } + + if ( isdefined( self.explosives ) ) + { + for ( i = 0; i < self.explosives.size; i++ ) + { + playfx( level._effect["def_explosion"], self.explosives[i].origin, anglestoforward( self.explosives[i].angles ) ); + self.explosives[i] hide(); + } + } +} + +door_activate( time, open = 1, quick, use_blocker_clip_for_pathing ) +{ + if ( !isdefined( time ) ) + { + time = 1; + + if ( isdefined( self.script_transition_time ) ) + time = self.script_transition_time; + } + + if ( isdefined( self.door_moving ) ) + { + if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "clip" || isdefined( self.script_string ) && self.script_string == "clip" ) + { + if ( !is_true( use_blocker_clip_for_pathing ) ) + { + if ( !open ) + return; + } + } + else + return; + } + + self.door_moving = 1; + + if ( open || !( isdefined( quick ) && quick ) ) + self notsolid(); + + if ( self.classname == "script_brushmodel" ) + { + if ( open ) + self connectpaths(); + } + + if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "clip" || isdefined( self.script_string ) && self.script_string == "clip" ) + { + if ( !open ) + { + self delay_thread( time, ::self_disconnectpaths ); + wait 0.1; + self solid(); + } + + return; + } + + if ( isdefined( self.script_sound ) ) + { + if ( open ) + playsoundatposition( self.script_sound, self.origin ); + else + playsoundatposition( self.script_sound + "_close", self.origin ); + } + else + play_sound_at_pos( "door_slide_open", self.origin ); + + scale = 1; + + if ( !open ) + scale = -1; + + switch ( self.script_string ) + { + case "rotate": + if ( isdefined( self.script_angles ) ) + { + rot_angle = self.script_angles; + + if ( !open ) + rot_angle = self.og_angles; + + self rotateto( rot_angle, time, 0, 0 ); + self thread door_solid_thread(); + + if ( !open ) + self thread disconnect_paths_when_done(); + } + + wait( randomfloat( 0.15 ) ); + break; + case "slide_apart": + case "move": + if ( isdefined( self.script_vector ) ) + { + vector = vectorscale( self.script_vector, scale ); + + if ( time >= 0.5 ) + self moveto( self.origin + vector, time, time * 0.25, time * 0.25 ); + else + self moveto( self.origin + vector, time ); + + self thread door_solid_thread(); + + if ( !open ) + self thread disconnect_paths_when_done(); + } + + wait( randomfloat( 0.15 ) ); + break; + case "anim": + self [[ level.blocker_anim_func ]]( self.script_animname ); + self thread door_solid_thread_anim(); + wait( randomfloat( 0.15 ) ); + break; + case "physics": + self thread physics_launch_door( self ); + wait 0.1; + break; + } + + if ( isdefined( self.script_firefx ) ) + playfx( level._effect[self.script_firefx], self.origin ); +} + +kill_trapped_zombies( trigger ) +{ + zombies = getaiarray( level.zombie_team ); + + if ( !isdefined( zombies ) ) + return; + + for ( i = 0; i < zombies.size; i++ ) + { + if ( !isdefined( zombies[i] ) ) + continue; + + if ( zombies[i] istouching( trigger ) ) + { + zombies[i].marked_for_recycle = 1; + zombies[i] dodamage( zombies[i].health + 666, trigger.origin, self ); + wait( randomfloat( 0.15 ) ); + continue; + } + + if ( isdefined( level.custom_trapped_zombies ) ) + { + zombies[i] thread [[ level.custom_trapped_zombies ]](); + wait( randomfloat( 0.15 ) ); + } + } +} + +any_player_touching( trigger ) +{ + foreach ( player in get_players() ) + { + if ( player istouching( trigger ) ) + return true; + + wait 0.01; + } + + return false; +} + +any_player_touching_any( trigger, more_triggers ) +{ + foreach ( player in get_players() ) + { + if ( is_player_valid( player, 0, 1 ) ) + { + if ( isdefined( trigger ) && player istouching( trigger ) ) + return true; + + if ( isdefined( more_triggers ) && more_triggers.size > 0 ) + { + foreach ( trig in more_triggers ) + { + if ( isdefined( trig ) && player istouching( trig ) ) + return true; + } + } + } + } + + return false; +} + +any_zombie_touching_any( trigger, more_triggers ) +{ + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( isdefined( trigger ) && zombie istouching( trigger ) ) + return true; + + if ( isdefined( more_triggers ) && more_triggers.size > 0 ) + { + foreach ( trig in more_triggers ) + { + if ( isdefined( trig ) && zombie istouching( trig ) ) + return true; + } + } + } + + return false; +} + +wait_trigger_clear( trigger, more_triggers, end_on ) +{ + self endon( end_on ); + + while ( any_player_touching_any( trigger, more_triggers ) || any_zombie_touching_any( trigger, more_triggers ) ) + wait 1; +/# + println( "ZM BLOCKER local door trigger clear\\n" ); +#/ + self notify( "trigger_clear" ); +} + +waittill_door_trigger_clear_local_power_off( trigger, all_trigs ) +{ + self endon( "trigger_clear" ); + + while ( true ) + { + if ( isdefined( self.local_power_on ) && self.local_power_on ) + self waittill( "local_power_off" ); +/# + println( "ZM BLOCKER local door power off\\n" ); +#/ + self wait_trigger_clear( trigger, all_trigs, "local_power_on" ); + } +} + +waittill_door_trigger_clear_global_power_off( trigger, all_trigs ) +{ + self endon( "trigger_clear" ); + + while ( true ) + { + if ( isdefined( self.power_on ) && self.power_on ) + self waittill( "power_off" ); +/# + println( "ZM BLOCKER global door power off\\n" ); +#/ + self wait_trigger_clear( trigger, all_trigs, "power_on" ); + } +} + +waittill_door_can_close() +{ + trigger = undefined; + + if ( isdefined( self.door_hold_trigger ) ) + trigger = getent( self.door_hold_trigger, "targetname" ); + + all_trigs = getentarray( self.target, "target" ); + + switch ( self.script_noteworthy ) + { + case "local_electric_door": + if ( isdefined( trigger ) || isdefined( all_trigs ) ) + { + self waittill_door_trigger_clear_local_power_off( trigger, all_trigs ); + self thread kill_trapped_zombies( trigger ); + } + else if ( isdefined( self.local_power_on ) && self.local_power_on ) + self waittill( "local_power_off" ); + + return; + case "electric_door": + if ( isdefined( trigger ) || isdefined( all_trigs ) ) + { + self waittill_door_trigger_clear_global_power_off( trigger, all_trigs ); + + if ( isdefined( trigger ) ) + self thread kill_trapped_zombies( trigger ); + } + else if ( isdefined( self.power_on ) && self.power_on ) + self waittill( "power_off" ); + + return; + } +} + +door_think() +{ + self endon( "kill_door_think" ); + cost = 1000; + + if ( isdefined( self.zombie_cost ) ) + cost = self.zombie_cost; + + self sethintlowpriority( 1 ); + + while ( true ) + { + switch ( self.script_noteworthy ) + { + case "local_electric_door": + if ( !( isdefined( self.local_power_on ) && self.local_power_on ) ) + self waittill( "local_power_on" ); + + if ( !( isdefined( self._door_open ) && self._door_open ) ) + { +/# + println( "ZM BLOCKER local door opened\\n" ); +#/ + self door_opened( cost, 1 ); + + if ( !isdefined( self.power_cost ) ) + self.power_cost = 0; + + self.power_cost += 200; + } + + self sethintstring( "" ); + + if ( isdefined( level.local_doors_stay_open ) && level.local_doors_stay_open ) + return; + + wait 3; + self waittill_door_can_close(); + self door_block(); + + if ( isdefined( self._door_open ) && self._door_open ) + { +/# + println( "ZM BLOCKER local door closed\\n" ); +#/ + self door_opened( cost, 1 ); + } + + self sethintstring( &"ZOMBIE_NEED_LOCAL_POWER" ); + wait 3; + continue; + case "electric_door": + if ( !( isdefined( self.power_on ) && self.power_on ) ) + self waittill( "power_on" ); + + if ( !( isdefined( self._door_open ) && self._door_open ) ) + { +/# + println( "ZM BLOCKER global door opened\\n" ); +#/ + self door_opened( cost, 1 ); + + if ( !isdefined( self.power_cost ) ) + self.power_cost = 0; + + self.power_cost += 200; + } + + self sethintstring( "" ); + + if ( isdefined( level.local_doors_stay_open ) && level.local_doors_stay_open ) + return; + + wait 3; + self waittill_door_can_close(); + self door_block(); + + if ( isdefined( self._door_open ) && self._door_open ) + { +/# + println( "ZM BLOCKER global door closed\\n" ); +#/ + self door_opened( cost, 1 ); + } + + self sethintstring( &"ZOMBIE_NEED_POWER" ); + wait 3; + continue; + case "electric_buyable_door": + flag_wait( "power_on" ); + self set_hint_string( self, "default_buy_door", cost ); + + if ( !self door_buy() ) + continue; + + break; + case "delay_door": + if ( !self door_buy() ) + continue; + + self door_delay(); + break; + default: + if ( isdefined( level._default_door_custom_logic ) ) + { + self [[ level._default_door_custom_logic ]](); + break; + } + + if ( !self door_buy() ) + continue; + + break; + } + + self door_opened( cost ); + + if ( !flag( "door_can_close" ) ) + break; + } +} + +self_and_flag_wait( msg ) +{ + self endon( msg ); + + if ( isdefined( self.power_door_ignore_flag_wait ) && self.power_door_ignore_flag_wait ) + level waittill( "forever" ); + else + flag_wait( msg ); +} + +door_block() +{ + if ( isdefined( self.doors ) ) + { + for ( i = 0; i < self.doors.size; i++ ) + { + if ( isdefined( self.doors[i].script_noteworthy ) && self.doors[i].script_noteworthy == "clip" || isdefined( self.doors[i].script_string ) && self.doors[i].script_string == "clip" ) + self.doors[i] solid(); + } + } +} + +door_opened( cost, quick_close ) +{ + if ( isdefined( self.door_is_moving ) && self.door_is_moving ) + return; + + self.has_been_opened = 1; + all_trigs = getentarray( self.target, "target" ); + self.door_is_moving = 1; + + foreach ( trig in all_trigs ) + { + trig.door_is_moving = 1; + trig trigger_off(); + trig.has_been_opened = 1; + + if ( !isdefined( trig._door_open ) || trig._door_open == 0 ) + { + trig._door_open = 1; + trig notify( "door_opened" ); + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "door_open" ); + } + else + trig._door_open = 0; + + if ( isdefined( trig.script_flag ) && trig._door_open == 1 ) + { + tokens = strtok( trig.script_flag, "," ); + + for ( i = 0; i < tokens.size; i++ ) + flag_set( tokens[i] ); + } + else if ( isdefined( trig.script_flag ) && trig._door_open == 0 ) + { + tokens = strtok( trig.script_flag, "," ); + + for ( i = 0; i < tokens.size; i++ ) + flag_clear( tokens[i] ); + } + + if ( isdefined( quick_close ) && quick_close ) + { + trig set_hint_string( trig, "" ); + continue; + } + + if ( trig._door_open == 1 && flag( "door_can_close" ) ) + { + trig set_hint_string( trig, "default_buy_door_close" ); + continue; + } + + if ( trig._door_open == 0 ) + trig set_hint_string( trig, "default_buy_door", cost ); + } + + level notify( "door_opened" ); + + if ( isdefined( self.doors ) ) + { + is_script_model_door = 0; + have_moving_clip_for_door = 0; + use_blocker_clip_for_pathing = 0; + + foreach ( door in self.doors ) + { + if ( is_true( door.ignore_use_blocker_clip_for_pathing_check ) ) + continue; + + if ( door.classname == "script_model" ) + { + is_script_model_door = 1; + continue; + } + + if ( door.classname == "script_brushmodel" && ( !isdefined( door.script_noteworthy ) || door.script_noteworthy != "clip" ) && ( !isdefined( door.script_string ) || door.script_string != "clip" ) ) + have_moving_clip_for_door = 1; + } + + use_blocker_clip_for_pathing = is_script_model_door && !have_moving_clip_for_door; + + for ( i = 0; i < self.doors.size; i++ ) + self.doors[i] thread door_activate( self.doors[i].script_transition_time, self._door_open, quick_close, use_blocker_clip_for_pathing ); + + if ( self.doors.size ) + play_sound_at_pos( "purchase", self.doors[0].origin ); + } + + level.active_zone_names = maps\mp\zombies\_zm_zonemgr::get_active_zone_names(); + wait 1; + self.door_is_moving = 0; + + foreach ( trig in all_trigs ) + trig.door_is_moving = 0; + + if ( isdefined( quick_close ) && quick_close ) + { + for ( i = 0; i < all_trigs.size; i++ ) + all_trigs[i] trigger_on(); + + return; + } + + if ( flag( "door_can_close" ) ) + { + wait 2.0; + + for ( i = 0; i < all_trigs.size; i++ ) + all_trigs[i] trigger_on(); + } +} + +physics_launch_door( door_trig ) +{ + vec = vectorscale( vectornormalize( self.script_vector ), 10 ); + self rotateroll( 5, 0.05 ); + wait 0.05; + self moveto( self.origin + vec, 0.1 ); + + self waittill( "movedone" ); + + self physicslaunch( self.origin, self.script_vector * 300 ); + wait 60; + self delete(); +} + +door_solid_thread() +{ + self waittill_either( "rotatedone", "movedone" ); + self.door_moving = undefined; + + while ( true ) + { + players = get_players(); + player_touching = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] istouching( self ) ) + { + player_touching = 1; + break; + } + } + + if ( !player_touching ) + { + self solid(); + return; + } + + wait 1; + } +} + +door_solid_thread_anim() +{ + self waittillmatch( "door_anim", "end" ); + + self.door_moving = undefined; + + while ( true ) + { + players = get_players(); + player_touching = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] istouching( self ) ) + { + player_touching = 1; + break; + } + } + + if ( !player_touching ) + { + self solid(); + return; + } + + wait 1; + } +} + +disconnect_paths_when_done() +{ + self waittill_either( "rotatedone", "movedone" ); + self disconnectpaths(); +} + +self_disconnectpaths() +{ + self disconnectpaths(); +} + +debris_init() +{ + cost = 1000; + + if ( isdefined( self.zombie_cost ) ) + cost = self.zombie_cost; + + self set_hint_string( self, "default_buy_debris", cost ); + self setcursorhint( "HINT_NOICON" ); + + if ( isdefined( self.script_flag ) && !isdefined( level.flag[self.script_flag] ) ) + flag_init( self.script_flag ); + + self thread debris_think(); +} + +debris_think() +{ + if ( isdefined( level.custom_debris_function ) ) + self [[ level.custom_debris_function ]](); + + while ( true ) + { + self waittill( "trigger", who, force ); + + if ( getdvarint( _hash_2ECA0C0E ) > 0 || isdefined( force ) && force ) + { + + } + else + { + if ( !who usebuttonpressed() ) + continue; + + if ( who in_revive_trigger() ) + continue; + } + + if ( is_player_valid( who ) ) + { + players = get_players(); + + if ( getdvarint( _hash_2ECA0C0E ) > 0 ) + { + + } + else if ( who.score >= self.zombie_cost ) + { + who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost ); + maps\mp\_demo::bookmark( "zm_player_door", gettime(), who ); + who maps\mp\zombies\_zm_stats::increment_client_stat( "doors_purchased" ); + who maps\mp\zombies\_zm_stats::increment_player_stat( "doors_purchased" ); + } + else + { + play_sound_at_pos( "no_purchase", self.origin ); + who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "door_deny" ); + continue; + } + + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", who.name, who.score, level.round_number, self.zombie_cost, self.script_flag, self.origin, "door" ); + junk = getentarray( self.target, "targetname" ); + + if ( isdefined( self.script_flag ) ) + { + tokens = strtok( self.script_flag, "," ); + + for ( i = 0; i < tokens.size; i++ ) + flag_set( tokens[i] ); + } + + play_sound_at_pos( "purchase", self.origin ); + level notify( "junk purchased" ); + move_ent = undefined; + clip = undefined; + + for ( i = 0; i < junk.size; i++ ) + { + junk[i] connectpaths(); + + if ( isdefined( junk[i].script_noteworthy ) ) + { + if ( junk[i].script_noteworthy == "clip" ) + { + clip = junk[i]; + continue; + } + } + + struct = undefined; + + if ( isdefined( junk[i].script_linkto ) ) + { + struct = getstruct( junk[i].script_linkto, "script_linkname" ); + + if ( isdefined( struct ) ) + { + move_ent = junk[i]; + junk[i] thread debris_move( struct ); + } + else + junk[i] delete(); + + continue; + } + + junk[i] delete(); + } + + all_trigs = getentarray( self.target, "target" ); + + for ( i = 0; i < all_trigs.size; i++ ) + all_trigs[i] delete(); + + if ( isdefined( clip ) ) + { + if ( isdefined( move_ent ) ) + move_ent waittill( "movedone" ); + + clip delete(); + } + + break; + } + } +} + +debris_move( struct ) +{ + self script_delay(); + self notsolid(); + self play_sound_on_ent( "debris_move" ); + playsoundatposition( "zmb_lightning_l", self.origin ); + + if ( isdefined( self.script_firefx ) ) + playfx( level._effect[self.script_firefx], self.origin ); + + if ( isdefined( self.script_noteworthy ) ) + { + if ( self.script_noteworthy == "jiggle" ) + { + num = randomintrange( 3, 5 ); + og_angles = self.angles; + + for ( i = 0; i < num; i++ ) + { + angles = og_angles + ( -5 + randomfloat( 10 ), -5 + randomfloat( 10 ), -5 + randomfloat( 10 ) ); + time = randomfloatrange( 0.1, 0.4 ); + self rotateto( angles, time ); + wait( time - 0.05 ); + } + } + } + + time = 0.5; + + if ( isdefined( self.script_transition_time ) ) + time = self.script_transition_time; + + self moveto( struct.origin, time, time * 0.5 ); + self rotateto( struct.angles, time * 0.75 ); + + self waittill( "movedone" ); + + if ( isdefined( self.script_fxid ) ) + { + playfx( level._effect[self.script_fxid], self.origin ); + playsoundatposition( "zmb_zombie_spawn", self.origin ); + } + + self delete(); +} + +blocker_disconnect_paths( start_node, end_node, two_way ) +{ + +} + +blocker_connect_paths( start_node, end_node, two_way ) +{ + +} + +blocker_init() +{ + if ( !isdefined( self.target ) ) + return; + + targets = getentarray( self.target, "targetname" ); + self.barrier_chunks = []; + + for ( j = 0; j < targets.size; j++ ) + { + if ( targets[j] iszbarrier() ) + { + if ( isdefined( level.zbarrier_override ) ) + { + self thread [[ level.zbarrier_override ]]( targets[j] ); + continue; + } + + self.zbarrier = targets[j]; + + if ( isdefined( level.zbarrier_script_string_sets_collision ) && level.zbarrier_script_string_sets_collision ) + m_collision = isdefined( self.zbarrier.script_string ) ? self.zbarrier.script_string : "p6_anim_zm_barricade_board_collision"; + else + m_collision = "p6_anim_zm_barricade_board_collision"; + + precachemodel( m_collision ); + self.zbarrier setzbarriercolmodel( m_collision ); + self.zbarrier.chunk_health = []; + + for ( i = 0; i < self.zbarrier getnumzbarrierpieces(); i++ ) + self.zbarrier.chunk_health[i] = 0; + + continue; + } + + if ( isdefined( targets[j].script_string ) && targets[j].script_string == "rock" ) + targets[j].material = "rock"; + + if ( isdefined( targets[j].script_parameters ) ) + { + if ( targets[j].script_parameters == "grate" ) + { + if ( isdefined( targets[j].script_noteworthy ) ) + { + if ( targets[j].script_noteworthy == "2" || targets[j].script_noteworthy == "3" || targets[j].script_noteworthy == "4" || targets[j].script_noteworthy == "5" || targets[j].script_noteworthy == "6" ) + { + targets[j] hide(); +/# + iprintlnbold( " Hide " ); +#/ + } + } + } + else if ( targets[j].script_parameters == "repair_board" ) + { + targets[j].unbroken_section = getent( targets[j].target, "targetname" ); + + if ( isdefined( targets[j].unbroken_section ) ) + { + targets[j].unbroken_section linkto( targets[j] ); + targets[j] hide(); + targets[j] notsolid(); + targets[j].unbroken = 1; + + if ( isdefined( targets[j].unbroken_section.script_noteworthy ) && targets[j].unbroken_section.script_noteworthy == "glass" ) + { + targets[j].material = "glass"; + targets[j] thread destructible_glass_barricade( targets[j].unbroken_section, self ); + } + else if ( isdefined( targets[j].unbroken_section.script_noteworthy ) && targets[j].unbroken_section.script_noteworthy == "metal" ) + targets[j].material = "metal"; + } + } + else if ( targets[j].script_parameters == "barricade_vents" ) + targets[j].material = "metal_vent"; + } + + if ( isdefined( targets[j].targetname ) ) + { + if ( targets[j].targetname == "auto2" ) + { + + } + } + + targets[j] update_states( "repaired" ); + targets[j].destroyed = 0; + targets[j] show(); + targets[j].claimed = 0; + targets[j].anim_grate_index = 0; + targets[j].og_origin = targets[j].origin; + targets[j].og_angles = targets[j].angles; + self.barrier_chunks[self.barrier_chunks.size] = targets[j]; + } + + target_nodes = getnodearray( self.target, "targetname" ); + + for ( j = 0; j < target_nodes.size; j++ ) + { + if ( target_nodes[j].type == "Begin" ) + { + self.neg_start = target_nodes[j]; + + if ( isdefined( self.neg_start.target ) ) + self.neg_end = getnode( self.neg_start.target, "targetname" ); + + blocker_disconnect_paths( self.neg_start, self.neg_end ); + } + } + + if ( isdefined( self.zbarrier ) ) + { + if ( isdefined( self.barrier_chunks ) ) + { + for ( i = 0; i < self.barrier_chunks.size; i++ ) + self.barrier_chunks[i] delete(); + + self.barrier_chunks = []; + } + } + + if ( isdefined( self.zbarrier ) && should_delete_zbarriers() ) + { + self.zbarrier delete(); + self.zbarrier = undefined; + return; + } + + self blocker_attack_spots(); + self.trigger_location = getstruct( self.target, "targetname" ); + self thread blocker_think(); +} + +should_delete_zbarriers() +{ + gametype = getdvar( "ui_gametype" ); + + if ( !is_classic() && !is_standard() && gametype != "zgrief" ) + return true; + + return false; +} + +destructible_glass_barricade( unbroken_section, node ) +{ + unbroken_section setcandamage( 1 ); + unbroken_section.health = 99999; + + unbroken_section waittill( "damage", amount, who ); + + if ( is_player_valid( who ) || who maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + self thread maps\mp\zombies\_zm_spawner::zombie_boardtear_offset_fx_horizontle( self, node ); + level thread remove_chunk( self, node, 1 ); + self update_states( "destroyed" ); + self notify( "destroyed" ); + self.unbroken = 0; + } +} + +blocker_attack_spots() +{ + spots = []; + numslots = self.zbarrier getzbarriernumattackslots(); + numslots = int( max( numslots, 1 ) ); + + if ( numslots % 2 ) + spots[spots.size] = groundpos_ignore_water_new( self.zbarrier.origin + vectorscale( ( 0, 0, 1 ), 60.0 ) ); + + if ( numslots > 1 ) + { + reps = floor( numslots / 2 ); + slot = 1; + + for ( i = 0; i < reps; i++ ) + { + offset = self.zbarrier getzbarrierattackslothorzoffset() * ( i + 1 ); + spots[spots.size] = groundpos_ignore_water_new( spots[0] + anglestoright( self.angles ) * offset + vectorscale( ( 0, 0, 1 ), 60.0 ) ); + slot++; + + if ( slot < numslots ) + { + spots[spots.size] = groundpos_ignore_water_new( spots[0] + anglestoright( self.angles ) * ( offset * -1 ) + vectorscale( ( 0, 0, 1 ), 60.0 ) ); + slot++; + } + } + } + + taken = []; + + for ( i = 0; i < spots.size; i++ ) + taken[i] = 0; + + self.attack_spots_taken = taken; + self.attack_spots = spots; +/# + self thread debug_attack_spots_taken(); +#/ +} + +blocker_choke() +{ + level._blocker_choke = 0; + level endon( "stop_blocker_think" ); + + while ( true ) + { + wait 0.05; + level._blocker_choke = 0; + } +} + +blocker_think() +{ + level endon( "stop_blocker_think" ); + + if ( !isdefined( level._blocker_choke ) ) + level thread blocker_choke(); + + use_choke = 0; + + if ( isdefined( level._use_choke_blockers ) && level._use_choke_blockers == 1 ) + use_choke = 1; + + while ( true ) + { + wait 0.5; + + if ( use_choke ) + { + if ( level._blocker_choke > 3 ) + wait 0.05; + } + + level._blocker_choke++; + + if ( all_chunks_intact( self, self.barrier_chunks ) ) + continue; + + if ( no_valid_repairable_boards( self, self.barrier_chunks ) ) + continue; + + self blocker_trigger_think(); + } +} + +player_fails_blocker_repair_trigger_preamble( player, players, trigger, hold_required ) +{ + if ( !isdefined( trigger ) ) + return true; + + if ( !is_player_valid( player ) ) + return true; + + if ( players.size == 1 && isdefined( players[0].intermission ) && players[0].intermission == 1 ) + return true; + + if ( hold_required && !player usebuttonpressed() ) + return true; + + if ( !hold_required && !player use_button_held() ) + return true; + + if ( player in_revive_trigger() ) + return true; + + return false; +} + +has_blocker_affecting_perk() +{ + has_perk = undefined; + + if ( self hasperk( "specialty_fastreload" ) ) + has_perk = "specialty_fastreload"; + + return has_perk; +} + +do_post_chunk_repair_delay( has_perk ) +{ + if ( !self script_delay() ) + wait 1; +} + +handle_post_board_repair_rewards( cost, zbarrier ) +{ + self maps\mp\zombies\_zm_stats::increment_client_stat( "boards" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "boards" ); + + if ( isdefined( self.pers["boards"] ) && self.pers["boards"] % 10 == 0 ) + self thread do_player_general_vox( "general", "reboard", 90 ); + + self maps\mp\zombies\_zm_pers_upgrades_functions::pers_boards_updated( zbarrier ); + self.rebuild_barrier_reward += cost; + + if ( self.rebuild_barrier_reward < level.zombie_vars["rebuild_barrier_cap_per_round"] ) + { + self maps\mp\zombies\_zm_score::player_add_points( "rebuild_board", cost ); + self play_sound_on_ent( "purchase" ); + } + + if ( isdefined( self.board_repair ) ) + self.board_repair += 1; +} + +blocker_unitrigger_think() +{ + self endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "trigger", player ); + + self.stub.trigger_target notify( "trigger", player ); + } +} + +blocker_trigger_think() +{ + self endon( "blocker_hacked" ); + + if ( isdefined( level.no_board_repair ) && level.no_board_repair ) + return; +/# + println( "ZM >> TRIGGER blocker_trigger_think " ); +#/ + level endon( "stop_blocker_think" ); + cost = 10; + + if ( isdefined( self.zombie_cost ) ) + cost = self.zombie_cost; + + original_cost = cost; + + if ( !isdefined( self.unitrigger_stub ) ) + { + radius = 94.21; + height = 94.21; + + if ( isdefined( self.trigger_location ) ) + trigger_location = self.trigger_location; + else + trigger_location = self; + + if ( isdefined( trigger_location.radius ) ) + radius = trigger_location.radius; + + if ( isdefined( trigger_location.height ) ) + height = trigger_location.height; + + trigger_pos = groundpos( trigger_location.origin ) + vectorscale( ( 0, 0, 1 ), 4.0 ); + self.unitrigger_stub = spawnstruct(); + self.unitrigger_stub.origin = trigger_pos; + self.unitrigger_stub.radius = radius; + self.unitrigger_stub.height = height; + self.unitrigger_stub.script_unitrigger_type = "unitrigger_radius"; + self.unitrigger_stub.hint_string = get_hint_string( self, "default_reward_barrier_piece" ); + self.unitrigger_stub.cursor_hint = "HINT_NOICON"; + self.unitrigger_stub.trigger_target = self; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::blocker_unitrigger_think ); + maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); + + if ( !isdefined( trigger_location.angles ) ) + trigger_location.angles = ( 0, 0, 0 ); + + self.unitrigger_stub.origin = groundpos( trigger_location.origin ) + vectorscale( ( 0, 0, 1 ), 4.0 ) + anglestoforward( trigger_location.angles ) * -11; + } + + self thread trigger_delete_on_repair(); + thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::blocker_unitrigger_think ); +/# + if ( getdvarint( "zombie_debug" ) > 0 ) + thread debug_blocker( trigger_pos, radius, height ); +#/ + while ( true ) + { + self waittill( "trigger", player ); + + has_perk = player has_blocker_affecting_perk(); + + if ( all_chunks_intact( self, self.barrier_chunks ) ) + { + self notify( "all_boards_repaired" ); + return; + } + + if ( no_valid_repairable_boards( self, self.barrier_chunks ) ) + { + self notify( "no valid boards" ); + return; + } + + if ( isdefined( level._zm_blocker_trigger_think_return_override ) ) + { + if ( self [[ level._zm_blocker_trigger_think_return_override ]]( player ) ) + return; + } + + while ( true ) + { + players = get_players(); + + if ( player_fails_blocker_repair_trigger_preamble( player, players, self.unitrigger_stub.trigger, 0 ) ) + break; + + if ( isdefined( self.zbarrier ) ) + { + chunk = get_random_destroyed_chunk( self, self.barrier_chunks ); + self thread replace_chunk( self, chunk, has_perk, isdefined( player.pers_upgrades_awarded["board"] ) && player.pers_upgrades_awarded["board"] ); + } + else + { + chunk = get_random_destroyed_chunk( self, self.barrier_chunks ); + + if ( isdefined( chunk.script_parameter ) && chunk.script_parameters == "repair_board" || chunk.script_parameters == "barricade_vents" ) + { + if ( isdefined( chunk.unbroken_section ) ) + { + chunk show(); + chunk solid(); + chunk.unbroken_section self_delete(); + } + } + else + chunk show(); + + if ( !isdefined( chunk.script_parameters ) || chunk.script_parameters == "board" || chunk.script_parameters == "repair_board" || chunk.script_parameters == "barricade_vents" ) + { + if ( !( isdefined( level.use_clientside_board_fx ) && level.use_clientside_board_fx ) ) + { + if ( !isdefined( chunk.material ) || isdefined( chunk.material ) && chunk.material != "rock" ) + chunk play_sound_on_ent( "rebuild_barrier_piece" ); + + playsoundatposition( "zmb_cha_ching", ( 0, 0, 0 ) ); + } + } + + if ( chunk.script_parameters == "bar" ) + { + chunk play_sound_on_ent( "rebuild_barrier_piece" ); + playsoundatposition( "zmb_cha_ching", ( 0, 0, 0 ) ); + } + + if ( isdefined( chunk.script_parameters ) ) + { + if ( chunk.script_parameters == "bar" ) + { + if ( isdefined( chunk.script_noteworthy ) ) + { + if ( chunk.script_noteworthy == "5" ) + chunk hide(); + else if ( chunk.script_noteworthy == "3" ) + chunk hide(); + } + } + } + + self thread replace_chunk( self, chunk, has_perk, isdefined( player.pers_upgrades_awarded["board"] ) && player.pers_upgrades_awarded["board"] ); + } + + if ( isdefined( self.clip ) ) + { + self.clip enable_trigger(); + self.clip disconnectpaths(); + } + else + blocker_disconnect_paths( self.neg_start, self.neg_end ); + + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, original_cost, self.target, self.origin, "repair" ); + self do_post_chunk_repair_delay( has_perk ); + + if ( !is_player_valid( player ) ) + break; + + player handle_post_board_repair_rewards( cost, self ); + + if ( all_chunks_intact( self, self.barrier_chunks ) ) + { + self notify( "all_boards_repaired" ); + return; + } + + if ( no_valid_repairable_boards( self, self.barrier_chunks ) ) + { + self notify( "no valid boards" ); + return; + } + } + } +} + +random_destroyed_chunk_show() +{ + wait 0.5; + self show(); +} + +door_repaired_rumble_n_sound() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( distance( players[i].origin, self.origin ) < 150 ) + { + if ( isalive( players[i] ) ) + players[i] thread board_completion(); + } + } +} + +board_completion() +{ + self endon( "disconnect" ); +} + +trigger_delete_on_repair() +{ + while ( true ) + { + self waittill_either( "all_boards_repaired", "no valid boards" ); + maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); + break; + } +} + +rebuild_barrier_reward_reset() +{ + self.rebuild_barrier_reward = 0; +} + +remove_chunk( chunk, node, destroy_immediately, zomb ) +{ + chunk update_states( "mid_tear" ); + + if ( isdefined( chunk.script_parameters ) ) + { + if ( chunk.script_parameters == "board" || chunk.script_parameters == "repair_board" || chunk.script_parameters == "barricade_vents" ) + chunk thread zombie_boardtear_audio_offset( chunk ); + } + + if ( isdefined( chunk.script_parameters ) ) + { + if ( chunk.script_parameters == "bar" ) + chunk thread zombie_bartear_audio_offset( chunk ); + } + + chunk notsolid(); + fx = "wood_chunk_destory"; + + if ( isdefined( self.script_fxid ) ) + fx = self.script_fxid; + + if ( isdefined( chunk.script_moveoverride ) && chunk.script_moveoverride ) + chunk hide(); + + if ( isdefined( chunk.script_parameters ) && chunk.script_parameters == "bar" ) + { + if ( isdefined( chunk.script_noteworthy ) && chunk.script_noteworthy == "4" ) + { + ent = spawn( "script_origin", chunk.origin ); + ent.angles = node.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); + dist = 100; + + if ( isdefined( chunk.script_move_dist ) ) + { + dist_max = chunk.script_move_dist - 100; + dist = 100 + randomint( dist_max ); + } + else + dist = 100 + randomint( 100 ); + + dest = ent.origin + anglestoforward( ent.angles ) * dist; + trace = bullettrace( dest + vectorscale( ( 0, 0, 1 ), 16.0 ), dest + vectorscale( ( 0, 0, -1 ), 200.0 ), 0, undefined ); + + if ( trace["fraction"] == 1 ) + dest += vectorscale( ( 0, 0, -1 ), 200.0 ); + else + dest = trace["position"]; + + chunk linkto( ent ); + time = ent fake_physicslaunch( dest, 300 + randomint( 100 ) ); + + if ( randomint( 100 ) > 40 ) + ent rotatepitch( 180, time * 0.5 ); + else + ent rotatepitch( 90, time, time * 0.5 ); + + wait( time ); + chunk hide(); + wait 0.1; + ent delete(); + } + else + { + ent = spawn( "script_origin", chunk.origin ); + ent.angles = node.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); + dist = 100; + + if ( isdefined( chunk.script_move_dist ) ) + { + dist_max = chunk.script_move_dist - 100; + dist = 100 + randomint( dist_max ); + } + else + dist = 100 + randomint( 100 ); + + dest = ent.origin + anglestoforward( ent.angles ) * dist; + trace = bullettrace( dest + vectorscale( ( 0, 0, 1 ), 16.0 ), dest + vectorscale( ( 0, 0, -1 ), 200.0 ), 0, undefined ); + + if ( trace["fraction"] == 1 ) + dest += vectorscale( ( 0, 0, -1 ), 200.0 ); + else + dest = trace["position"]; + + chunk linkto( ent ); + time = ent fake_physicslaunch( dest, 260 + randomint( 100 ) ); + + if ( randomint( 100 ) > 40 ) + ent rotatepitch( 180, time * 0.5 ); + else + ent rotatepitch( 90, time, time * 0.5 ); + + wait( time ); + chunk hide(); + wait 0.1; + ent delete(); + } + + chunk update_states( "destroyed" ); + chunk notify( "destroyed" ); + } + + if ( isdefined( chunk.script_parameters ) && chunk.script_parameters == "board" || chunk.script_parameters == "repair_board" || chunk.script_parameters == "barricade_vents" ) + { + ent = spawn( "script_origin", chunk.origin ); + ent.angles = node.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); + dist = 100; + + if ( isdefined( chunk.script_move_dist ) ) + { + dist_max = chunk.script_move_dist - 100; + dist = 100 + randomint( dist_max ); + } + else + dist = 100 + randomint( 100 ); + + dest = ent.origin + anglestoforward( ent.angles ) * dist; + trace = bullettrace( dest + vectorscale( ( 0, 0, 1 ), 16.0 ), dest + vectorscale( ( 0, 0, -1 ), 200.0 ), 0, undefined ); + + if ( trace["fraction"] == 1 ) + dest += vectorscale( ( 0, 0, -1 ), 200.0 ); + else + dest = trace["position"]; + + chunk linkto( ent ); + time = ent fake_physicslaunch( dest, 200 + randomint( 100 ) ); + + if ( isdefined( chunk.unbroken_section ) ) + { + if ( !isdefined( chunk.material ) || chunk.material != "metal" ) + chunk.unbroken_section self_delete(); + } + + if ( randomint( 100 ) > 40 ) + ent rotatepitch( 180, time * 0.5 ); + else + ent rotatepitch( 90, time, time * 0.5 ); + + wait( time ); + + if ( isdefined( chunk.unbroken_section ) ) + { + if ( isdefined( chunk.material ) && chunk.material == "metal" ) + chunk.unbroken_section self_delete(); + } + + chunk hide(); + wait 0.1; + ent delete(); + chunk update_states( "destroyed" ); + chunk notify( "destroyed" ); + } + + if ( isdefined( chunk.script_parameters ) && chunk.script_parameters == "grate" ) + { + if ( isdefined( chunk.script_noteworthy ) && chunk.script_noteworthy == "6" ) + { + ent = spawn( "script_origin", chunk.origin ); + ent.angles = node.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); + dist = 100 + randomint( 100 ); + dest = ent.origin + anglestoforward( ent.angles ) * dist; + trace = bullettrace( dest + vectorscale( ( 0, 0, 1 ), 16.0 ), dest + vectorscale( ( 0, 0, -1 ), 200.0 ), 0, undefined ); + + if ( trace["fraction"] == 1 ) + dest += vectorscale( ( 0, 0, -1 ), 200.0 ); + else + dest = trace["position"]; + + chunk linkto( ent ); + time = ent fake_physicslaunch( dest, 200 + randomint( 100 ) ); + + if ( randomint( 100 ) > 40 ) + ent rotatepitch( 180, time * 0.5 ); + else + ent rotatepitch( 90, time, time * 0.5 ); + + wait( time ); + chunk hide(); + ent delete(); + chunk update_states( "destroyed" ); + chunk notify( "destroyed" ); + } + else + { + chunk hide(); + chunk update_states( "destroyed" ); + chunk notify( "destroyed" ); + } + } +} + +remove_chunk_rotate_grate( chunk ) +{ + if ( isdefined( chunk.script_parameters ) && chunk.script_parameters == "grate" ) + { + chunk vibrate( vectorscale( ( 0, 1, 0 ), 270.0 ), 0.2, 0.4, 0.4 ); + return; + } +} + +zombie_boardtear_audio_offset( chunk ) +{ + if ( isdefined( chunk.material ) && !isdefined( chunk.already_broken ) ) + chunk.already_broken = 0; + + if ( isdefined( chunk.material ) && chunk.material == "glass" && chunk.already_broken == 0 ) + { + chunk playsound( "zmb_break_glass_barrier" ); + wait( randomfloatrange( 0.3, 0.6 ) ); + chunk playsound( "zmb_break_glass_barrier" ); + chunk.already_broken = 1; + } + else if ( isdefined( chunk.material ) && chunk.material == "metal" && chunk.already_broken == 0 ) + { + chunk playsound( "grab_metal_bar" ); + wait( randomfloatrange( 0.3, 0.6 ) ); + chunk playsound( "break_metal_bar" ); + chunk.already_broken = 1; + } + else if ( isdefined( chunk.material ) && chunk.material == "rock" ) + { + if ( !( isdefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) ) + { + chunk playsound( "zmb_break_rock_barrier" ); + wait( randomfloatrange( 0.3, 0.6 ) ); + chunk playsound( "zmb_break_rock_barrier" ); + } + + chunk.already_broken = 1; + } + else if ( isdefined( chunk.material ) && chunk.material == "metal_vent" ) + { + if ( !( isdefined( level.use_clientside_board_fx ) && level.use_clientside_board_fx ) ) + chunk playsound( "evt_vent_slat_remove" ); + } + else + { + if ( !( isdefined( level.use_clientside_board_fx ) && level.use_clientside_board_fx ) ) + { + chunk play_sound_on_ent( "break_barrier_piece" ); + wait( randomfloatrange( 0.3, 0.6 ) ); + chunk play_sound_on_ent( "break_barrier_piece" ); + } + + chunk.already_broken = 1; + } +} + +zombie_bartear_audio_offset( chunk ) +{ + chunk play_sound_on_ent( "grab_metal_bar" ); + wait( randomfloatrange( 0.3, 0.6 ) ); + chunk play_sound_on_ent( "break_metal_bar" ); + wait( randomfloatrange( 1.0, 1.3 ) ); + chunk play_sound_on_ent( "drop_metal_bar" ); +} + +ensure_chunk_is_back_to_origin( chunk ) +{ + if ( chunk.origin != chunk.og_origin ) + { + chunk notsolid(); + + chunk waittill( "movedone" ); + } +} + +replace_chunk( barrier, chunk, perk, upgrade, via_powerup ) +{ + if ( !isdefined( barrier.zbarrier ) ) + { + chunk update_states( "mid_repair" ); + assert( isdefined( chunk.og_origin ) ); + assert( isdefined( chunk.og_angles ) ); + sound = "rebuild_barrier_hover"; + + if ( isdefined( chunk.script_presound ) ) + sound = chunk.script_presound; + } + + has_perk = 0; + + if ( isdefined( perk ) ) + has_perk = 1; + + if ( !isdefined( via_powerup ) && isdefined( sound ) ) + play_sound_at_pos( sound, chunk.origin ); + + if ( upgrade ) + { + barrier.zbarrier zbarrierpieceuseupgradedmodel( chunk ); + barrier.zbarrier.chunk_health[chunk] = barrier.zbarrier getupgradedpiecenumlives( chunk ); + } + else + { + barrier.zbarrier zbarrierpieceusedefaultmodel( chunk ); + barrier.zbarrier.chunk_health[chunk] = 0; + } + + scalar = 1.0; + + if ( has_perk ) + { + if ( "speciality_fastreload" == perk ) + scalar = 0.31; + else if ( "speciality_fastreload_upgrade" == perk ) + scalar = 0.2112; + } + + barrier.zbarrier showzbarrierpiece( chunk ); + barrier.zbarrier setzbarrierpiecestate( chunk, "closing", scalar ); + waitduration = barrier.zbarrier getzbarrierpieceanimlengthforstate( chunk, "closing", scalar ); + wait( waitduration ); +} + +open_all_zbarriers() +{ + foreach ( barrier in level.exterior_goals ) + { + if ( isdefined( barrier.zbarrier ) ) + { + for ( x = 0; x < barrier.zbarrier getnumzbarrierpieces(); x++ ) + barrier.zbarrier setzbarrierpiecestate( x, "opening" ); + } + + if ( isdefined( barrier.clip ) ) + { + barrier.clip disable_trigger(); + barrier.clip connectpaths(); + continue; + } + + blocker_connect_paths( barrier.neg_start, barrier.neg_end ); + } +} + +zombie_boardtear_audio_plus_fx_offset_repair_horizontal( chunk ) +{ + if ( isdefined( chunk.material ) && chunk.material == "rock" ) + { + if ( isdefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) + chunk clearclientflag( level._zombie_scriptmover_flag_rock_fx ); + else + { + earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), chunk.origin, 150 ); + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( 0, 0, 1 ), 30.0 ) ); + wait( randomfloatrange( 0.3, 0.6 ) ); + chunk play_sound_on_ent( "break_barrier_piece" ); + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( 0, 0, -1 ), 30.0 ) ); + } + } + else if ( isdefined( level.use_clientside_board_fx ) && level.use_clientside_board_fx ) + chunk clearclientflag( level._zombie_scriptmover_flag_board_horizontal_fx ); + else + { + earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), chunk.origin, 150 ); + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( 0, 0, 1 ), 30.0 ) ); + wait( randomfloatrange( 0.3, 0.6 ) ); + chunk play_sound_on_ent( "break_barrier_piece" ); + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( 0, 0, -1 ), 30.0 ) ); + } +} + +zombie_boardtear_audio_plus_fx_offset_repair_verticle( chunk ) +{ + if ( isdefined( chunk.material ) && chunk.material == "rock" ) + { + if ( isdefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) + chunk clearclientflag( level._zombie_scriptmover_flag_rock_fx ); + else + { + earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), chunk.origin, 150 ); + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( 1, 0, 0 ), 30.0 ) ); + wait( randomfloatrange( 0.3, 0.6 ) ); + chunk play_sound_on_ent( "break_barrier_piece" ); + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + } + } + else if ( isdefined( level.use_clientside_board_fx ) && level.use_clientside_board_fx ) + chunk clearclientflag( level._zombie_scriptmover_flag_board_vertical_fx ); + else + { + earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), chunk.origin, 150 ); + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( 1, 0, 0 ), 30.0 ) ); + wait( randomfloatrange( 0.3, 0.6 ) ); + chunk play_sound_on_ent( "break_barrier_piece" ); + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + } +} + +zombie_gratetear_audio_plus_fx_offset_repair_horizontal( chunk ) +{ + earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), chunk.origin, 150 ); + chunk play_sound_on_ent( "bar_rebuild_slam" ); + + switch ( randomint( 9 ) ) + { + case 0: + playfx( level._effect["fx_zombie_bar_break"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfx( level._effect["fx_zombie_bar_break_lite"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + break; + case 1: + playfx( level._effect["fx_zombie_bar_break"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfx( level._effect["fx_zombie_bar_break"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + break; + case 2: + playfx( level._effect["fx_zombie_bar_break_lite"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfx( level._effect["fx_zombie_bar_break"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + break; + case 3: + playfx( level._effect["fx_zombie_bar_break"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfx( level._effect["fx_zombie_bar_break_lite"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + break; + case 4: + playfx( level._effect["fx_zombie_bar_break_lite"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfx( level._effect["fx_zombie_bar_break_lite"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + break; + case 5: + playfx( level._effect["fx_zombie_bar_break_lite"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + break; + case 6: + playfx( level._effect["fx_zombie_bar_break_lite"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + break; + case 7: + playfx( level._effect["fx_zombie_bar_break"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + break; + case 8: + playfx( level._effect["fx_zombie_bar_break"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + break; + } +} + +zombie_bartear_audio_plus_fx_offset_repair_horizontal( chunk ) +{ + earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), chunk.origin, 150 ); + chunk play_sound_on_ent( "bar_rebuild_slam" ); + + switch ( randomint( 9 ) ) + { + case 0: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_left" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_right" ); + break; + case 1: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_left" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_right" ); + break; + case 2: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_left" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_right" ); + break; + case 3: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_left" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_right" ); + break; + case 4: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_left" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_right" ); + break; + case 5: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_left" ); + break; + case 6: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_right" ); + break; + case 7: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_left" ); + break; + case 8: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_right" ); + break; + } +} + +zombie_bartear_audio_plus_fx_offset_repair_verticle( chunk ) +{ + earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), chunk.origin, 150 ); + chunk play_sound_on_ent( "bar_rebuild_slam" ); + + switch ( randomint( 9 ) ) + { + case 0: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_top" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_bottom" ); + break; + case 1: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_top" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_bottom" ); + break; + case 2: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_top" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_bottom" ); + break; + case 3: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_top" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_bottom" ); + break; + case 4: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_top" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_bottom" ); + break; + case 5: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_top" ); + break; + case 6: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_bottom" ); + break; + case 7: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_top" ); + break; + case 8: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_bottom" ); + break; + } +} + +add_new_zombie_spawners() +{ + if ( isdefined( self.target ) ) + self.possible_spawners = getentarray( self.target, "targetname" ); + + if ( isdefined( self.script_string ) ) + { + spawners = getentarray( self.script_string, "targetname" ); + self.possible_spawners = arraycombine( self.possible_spawners, spawners, 1, 0 ); + } + + if ( !isdefined( self.possible_spawners ) ) + return; + + zombies_to_add = self.possible_spawners; + + for ( i = 0; i < self.possible_spawners.size; i++ ) + { + self.possible_spawners[i].is_enabled = 1; + add_spawner( self.possible_spawners[i] ); + } +} + +flag_blocker() +{ + if ( !isdefined( self.script_flag_wait ) ) + { +/# + assertmsg( "Flag Blocker at " + self.origin + " does not have a script_flag_wait key value pair" ); +#/ + return; + } + + if ( !isdefined( level.flag[self.script_flag_wait] ) ) + flag_init( self.script_flag_wait ); + + type = "connectpaths"; + + if ( isdefined( self.script_noteworthy ) ) + type = self.script_noteworthy; + + flag_wait( self.script_flag_wait ); + self script_delay(); + + if ( type == "connectpaths" ) + { + self connectpaths(); + self disable_trigger(); + return; + } + + if ( type == "disconnectpaths" ) + { + self disconnectpaths(); + self disable_trigger(); + return; + } +/# + assertmsg( "flag blocker at " + self.origin + ", the type \"" + type + "\" is not recognized" ); +#/ +} + +update_states( states ) +{ + assert( isdefined( states ) ); + self.state = states; +} + +quantum_bomb_open_nearest_door_validation( position ) +{ + range_squared = 32400; + zombie_doors = getentarray( "zombie_door", "targetname" ); + + for ( i = 0; i < zombie_doors.size; i++ ) + { + if ( distancesquared( zombie_doors[i].origin, position ) < range_squared ) + return true; + } + + zombie_airlock_doors = getentarray( "zombie_airlock_buy", "targetname" ); + + for ( i = 0; i < zombie_airlock_doors.size; i++ ) + { + if ( distancesquared( zombie_airlock_doors[i].origin, position ) < range_squared ) + return true; + } + + zombie_debris = getentarray( "zombie_debris", "targetname" ); + + for ( i = 0; i < zombie_debris.size; i++ ) + { + if ( distancesquared( zombie_debris[i].origin, position ) < range_squared ) + return true; + } + + return false; +} + +quantum_bomb_open_nearest_door_result( position ) +{ + range_squared = 32400; + zombie_doors = getentarray( "zombie_door", "targetname" ); + + for ( i = 0; i < zombie_doors.size; i++ ) + { + if ( distancesquared( zombie_doors[i].origin, position ) < range_squared ) + { + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "quant_good" ); + zombie_doors[i] notify( "trigger", self, 1 ); + [[ level.quantum_bomb_play_area_effect_func ]]( position ); + return; + } + } + + zombie_airlock_doors = getentarray( "zombie_airlock_buy", "targetname" ); + + for ( i = 0; i < zombie_airlock_doors.size; i++ ) + { + if ( distancesquared( zombie_airlock_doors[i].origin, position ) < range_squared ) + { + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "quant_good" ); + zombie_airlock_doors[i] notify( "trigger", self, 1 ); + [[ level.quantum_bomb_play_area_effect_func ]]( position ); + return; + } + } + + zombie_debris = getentarray( "zombie_debris", "targetname" ); + + for ( i = 0; i < zombie_debris.size; i++ ) + { + if ( distancesquared( zombie_debris[i].origin, position ) < range_squared ) + { + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "quant_good" ); + zombie_debris[i] notify( "trigger", self, 1 ); + [[ level.quantum_bomb_play_area_effect_func ]]( position ); + return; + } + } +} diff --git a/ZM/Core/maps/mp/zombies/_zm_bot.gsc b/ZM/Core/maps/mp/zombies/_zm_bot.gsc new file mode 100644 index 0000000..ba070ac --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_bot.gsc @@ -0,0 +1,12 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; + +init() +{ +/# + println( "ZM >> Zombiemode Server Scripts Init (_zm_bot.gsc)" ); +#/ +} diff --git a/ZM/Core/maps/mp/zombies/_zm_buildables.gsc b/ZM/Core/maps/mp/zombies/_zm_buildables.gsc new file mode 100644 index 0000000..9176e98 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_buildables.gsc @@ -0,0 +1,2895 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\_demo; + +init() +{ + precachestring( &"ZOMBIE_BUILDING" ); + precachestring( &"ZOMBIE_BUILD_PIECE_MISSING" ); + precachestring( &"ZOMBIE_BUILD_PIECE_GRAB" ); + precacheitem( "zombie_builder_zm" ); + precacheitem( "buildable_piece_zm" ); + level.gameobjswapping = 1; + zombie_buildables_callbacks = []; + level.buildablepickups = []; + level.buildables_built = []; + level.buildable_stubs = []; + level.buildable_piece_count = 0; + level._effect["building_dust"] = loadfx( "maps/zombie/fx_zmb_buildable_assemble_dust" ); + + if ( isdefined( level.init_buildables ) ) + [[ level.init_buildables ]](); + + if ( isdefined( level.use_swipe_protection ) ) + onplayerconnect_callback( ::buildables_watch_swipes ); +} + +anystub_update_prompt( player ) +{ + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || player in_revive_trigger() ) + { + self.hint_string = ""; + return false; + } + + if ( player isthrowinggrenade() ) + { + self.hint_string = ""; + return false; + } + + if ( isdefined( player.is_drinking ) && player.is_drinking > 0 ) + { + self.hint_string = ""; + return false; + } + + if ( isdefined( player.screecher_weapon ) ) + { + self.hint_string = ""; + return false; + } + + return true; +} + +anystub_get_unitrigger_origin() +{ + if ( isdefined( self.origin_parent ) ) + return self.origin_parent.origin; + + return self.origin; +} + +anystub_on_spawn_trigger( trigger ) +{ + if ( isdefined( self.link_parent ) ) + { + trigger enablelinkto(); + trigger linkto( self.link_parent ); + trigger setmovingplatformenabled( 1 ); + } +} + +buildables_watch_swipes() +{ + self endon( "disconnect" ); + self notify( "buildables_watch_swipes" ); + self endon( "buildables_watch_swipes" ); + + while ( true ) + { + self waittill( "melee_swipe", zombie ); + + if ( distancesquared( zombie.origin, self.origin ) > zombie.meleeattackdist * zombie.meleeattackdist ) + continue; + + trigger = level._unitriggers.trigger_pool[self getentitynumber()]; + + if ( isdefined( trigger ) && isdefined( trigger.stub.piece ) ) + { + piece = trigger.stub.piece; + + if ( !isdefined( piece.damage ) ) + piece.damage = 0; + + piece.damage++; + + if ( piece.damage > 12 ) + { + thread maps\mp\zombies\_zm_equipment::equipment_disappear_fx( trigger.stub maps\mp\zombies\_zm_unitrigger::unitrigger_origin() ); + piece maps\mp\zombies\_zm_buildables::piece_unspawn(); + self maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); + + if ( isalive( self ) ) + self playlocalsound( level.zmb_laugh_alias ); + } + } + } +} + +explosiondamage( damage, pos ) +{ +/# + println( "ZM BUILDABLE Explode do " + damage + " damage to " + self.name + "\\n" ); +#/ + self dodamage( damage, pos ); +} + +add_zombie_buildable( buildable_name, hint, building, bought ) +{ + if ( !isdefined( level.zombie_include_buildables ) ) + level.zombie_include_buildables = []; + + if ( isdefined( level.zombie_include_buildables ) && !isdefined( level.zombie_include_buildables[buildable_name] ) ) + return; + + precachestring( hint ); + + if ( isdefined( building ) ) + precachestring( building ); + + if ( isdefined( bought ) ) + precachestring( bought ); + + buildable_struct = level.zombie_include_buildables[buildable_name]; + + if ( !isdefined( level.zombie_buildables ) ) + level.zombie_buildables = []; + + buildable_struct.hint = hint; + buildable_struct.building = building; + buildable_struct.bought = bought; +/# + println( "ZM >> Looking for buildable - " + buildable_struct.name ); +#/ + level.zombie_buildables[buildable_struct.name] = buildable_struct; + + if ( !level.createfx_enabled ) + { + if ( level.zombie_buildables.size == 1 ) + register_clientfields(); + } +} + +register_clientfields() +{ + if ( isdefined( level.buildable_slot_count ) ) + { + for ( i = 0; i < level.buildable_slot_count; i++ ) + { + bits = getminbitcountfornum( level.buildable_piece_counts[i] ); + registerclientfield( "toplayer", level.buildable_clientfields[i], 12000, bits, "int" ); + } + } + else + { + bits = getminbitcountfornum( level.buildable_piece_count ); + registerclientfield( "toplayer", "buildable", 1, bits, "int" ); + } +} + +set_buildable_clientfield( slot, newvalue ) +{ + if ( isdefined( level.buildable_slot_count ) ) + self setclientfieldtoplayer( level.buildable_clientfields[slot], newvalue ); + else + self setclientfieldtoplayer( "buildable", newvalue ); +} + +clear_buildable_clientfield( slot ) +{ + self set_buildable_clientfield( slot, 0 ); +} + +include_zombie_buildable( buiildable_struct ) +{ + if ( !isdefined( level.zombie_include_buildables ) ) + level.zombie_include_buildables = []; +/# + println( "ZM >> Including buildable - " + buiildable_struct.name ); +#/ + level.zombie_include_buildables[buiildable_struct.name] = buiildable_struct; +} + +generate_zombie_buildable_piece( buildablename, modelname, radius, height, drop_offset, hud_icon, onpickup, ondrop, use_spawn_num, part_name, can_reuse, client_field_state, buildable_slot ) +{ + precachemodel( modelname ); + + if ( isdefined( hud_icon ) ) + precacheshader( hud_icon ); + + piece = spawnstruct(); + buildable_pieces = []; + buildable_pieces_structs = getstructarray( buildablename + "_" + modelname, "targetname" ); +/# + if ( buildable_pieces_structs.size < 1 ) + println( "ERROR: Missing buildable piece <" + buildablename + "> <" + modelname + ">\\n" ); +#/ + foreach ( index, struct in buildable_pieces_structs ) + { + buildable_pieces[index] = struct; + buildable_pieces[index].hasspawned = 0; + } + + piece.spawns = buildable_pieces; + piece.buildablename = buildablename; + piece.modelname = modelname; + piece.hud_icon = hud_icon; + piece.radius = radius; + piece.height = height; + piece.part_name = part_name; + piece.can_reuse = can_reuse; + piece.drop_offset = drop_offset; + piece.max_instances = 256; + + if ( isdefined( buildable_slot ) ) + piece.buildable_slot = buildable_slot; + else + piece.buildable_slot = 0; + + piece.onpickup = onpickup; + piece.ondrop = ondrop; + piece.use_spawn_num = use_spawn_num; + piece.client_field_state = client_field_state; + return piece; +} + +manage_multiple_pieces( max_instances, min_instances ) +{ + self.max_instances = max_instances; + self.min_instances = min_instances; + self.managing_pieces = 1; + self.piece_allocated = []; +} + +buildable_set_force_spawn_location( str_kvp, str_name ) +{ + self.str_force_spawn_kvp = str_kvp; + self.str_force_spawn_name = str_name; +} + +buildable_use_cyclic_spawns( randomize_start_location ) +{ + self.use_cyclic_spawns = 1; + self.randomize_cyclic_index = randomize_start_location; +} + +combine_buildable_pieces( piece1, piece2, piece3 ) +{ + spawns1 = piece1.spawns; + spawns2 = piece2.spawns; + spawns = arraycombine( spawns1, spawns2, 1, 0 ); + + if ( isdefined( piece3 ) ) + { + spawns3 = piece3.spawns; + spawns = arraycombine( spawns, spawns3, 1, 0 ); + spawns = array_randomize( spawns ); + piece3.spawns = spawns; + } + else + spawns = array_randomize( spawns ); + + piece1.spawns = spawns; + piece2.spawns = spawns; +} + +add_buildable_piece( piece, part_name, can_reuse ) +{ + if ( !isdefined( self.buildablepieces ) ) + self.buildablepieces = []; + + if ( isdefined( part_name ) ) + piece.part_name = part_name; + + if ( isdefined( can_reuse ) ) + piece.can_reuse = can_reuse; + + self.buildablepieces[self.buildablepieces.size] = piece; + + if ( !isdefined( self.buildable_slot ) ) + self.buildable_slot = piece.buildable_slot; + else + assert( self.buildable_slot == piece.buildable_slot ); +} + +create_zombie_buildable_piece( modelname, radius, height, hud_icon ) +{ + piece = generate_zombie_buildable_piece( self.name, modelname, radius, height, hud_icon ); + self add_buildable_piece( piece ); +} + +onplayerlaststand() +{ + pieces = self player_get_buildable_pieces(); + spawn_pos = []; + spawn_pos[0] = self.origin; + + if ( pieces.size >= 2 ) + { + nodes = getnodesinradiussorted( self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), 120, 30, 72, "path", 5 ); + + for ( i = 0; i < pieces.size; i++ ) + { + if ( i < nodes.size && check_point_in_playable_area( nodes[i].origin ) ) + { + spawn_pos[i] = nodes[i].origin; + continue; + } + + spawn_pos[i] = self.origin + vectorscale( ( 1, 1, 0 ), 5.0 ); + } + } + + spawnidx = 0; + + foreach ( piece in pieces ) + { + slot = piece.buildable_slot; + + if ( isdefined( piece ) ) + { + return_to_start_pos = 0; + + if ( isdefined( level.safe_place_for_buildable_piece ) ) + { + if ( !self [[ level.safe_place_for_buildable_piece ]]( piece ) ) + return_to_start_pos = 1; + } + + if ( return_to_start_pos ) + piece piece_spawn_at(); + else if ( pieces.size < 2 ) + piece piece_spawn_at( self.origin + vectorscale( ( 1, 1, 0 ), 5.0 ), self.angles ); + else + piece piece_spawn_at( spawn_pos[spawnidx], self.angles ); + + if ( isdefined( piece.ondrop ) ) + piece [[ piece.ondrop ]]( self ); + + self clear_buildable_clientfield( slot ); + spawnidx++; + } + + self player_set_buildable_piece( undefined, slot ); + self notify( "piece_released" + slot ); + } +} + +piecestub_get_unitrigger_origin() +{ + if ( isdefined( self.origin_parent ) ) + return self.origin_parent.origin + vectorscale( ( 0, 0, 1 ), 12.0 ); + + return self.origin; +} + +generate_piece_unitrigger( classname, origin, angles, flags, radius = 64, script_height = 64, moving ) +{ + script_width = script_height; + + if ( !isdefined( script_width ) ) + script_width = 64; + + script_length = script_height; + + if ( !isdefined( script_length ) ) + script_length = 64; + + unitrigger_stub = spawnstruct(); + unitrigger_stub.origin = origin; + + if ( isdefined( script_length ) ) + unitrigger_stub.script_length = script_length; + else + unitrigger_stub.script_length = 13.5; + + if ( isdefined( script_width ) ) + unitrigger_stub.script_width = script_width; + else + unitrigger_stub.script_width = 27.5; + + if ( isdefined( script_height ) ) + unitrigger_stub.script_height = script_height; + else + unitrigger_stub.script_height = 24; + + unitrigger_stub.radius = radius; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + unitrigger_stub.hint_string = &"ZOMBIE_BUILD_PIECE_GRAB"; + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.require_look_at = 0; + + switch ( classname ) + { + case "trigger_radius": + unitrigger_stub.script_unitrigger_type = "unitrigger_radius"; + break; + case "trigger_radius_use": + unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + break; + case "trigger_box": + unitrigger_stub.script_unitrigger_type = "unitrigger_box"; + break; + case "trigger_box_use": + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + break; + } + + unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + unitrigger_stub.prompt_and_visibility_func = ::piecetrigger_update_prompt; + unitrigger_stub.originfunc = ::piecestub_get_unitrigger_origin; + unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; + + if ( isdefined( moving ) && moving ) + maps\mp\zombies\_zm_unitrigger::register_unitrigger( unitrigger_stub, ::piece_unitrigger_think ); + else + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::piece_unitrigger_think ); + + return unitrigger_stub; +} + +piecetrigger_update_prompt( player ) +{ + can_use = self.stub piecestub_update_prompt( player ); + self setinvisibletoplayer( player, !can_use ); + + if ( isdefined( self.stub.hint_parm1 ) ) + self sethintstring( self.stub.hint_string, self.stub.hint_parm1 ); + else + self sethintstring( self.stub.hint_string ); + + if ( isdefined( self.stub.cursor_hint ) ) + { + if ( self.stub.cursor_hint == "HINT_WEAPON" && isdefined( self.stub.cursor_hint_weapon ) ) + self setcursorhint( self.stub.cursor_hint, self.stub.cursor_hint_weapon ); + else + self setcursorhint( self.stub.cursor_hint ); + } + + return can_use; +} + +piecestub_update_prompt( player ) +{ + if ( !self anystub_update_prompt( player ) ) + { + self.cursor_hint = "HINT_NOICON"; + return false; + } + + if ( isdefined( player player_get_buildable_piece( self.piece.buildable_slot ) ) ) + { + spiece = self.piece; + cpiece = player player_get_buildable_piece( self.piece.buildable_slot ); + + if ( spiece.modelname == cpiece.modelname && spiece.buildablename == cpiece.buildablename && ( !isdefined( spiece.script_noteworthy ) || !isdefined( cpiece.script_noteworthy ) || spiece.script_noteworthy == cpiece.script_noteworthy ) ) + { + self.hint_string = ""; + return false; + } + + if ( isdefined( spiece.hint_swap ) ) + { + self.hint_string = spiece.hint_swap; + self.hint_parm1 = self.piece.hint_swap_parm1; + } + else + self.hint_string = &"ZOMBIE_BUILD_PIECE_SWITCH"; + + if ( isdefined( self.piece.cursor_hint ) ) + self.cursor_hint = self.piece.cursor_hint; + + if ( isdefined( self.piece.cursor_hint_weapon ) ) + self.cursor_hint_weapon = self.piece.cursor_hint_weapon; + } + else + { + if ( isdefined( self.piece.hint_grab ) ) + { + self.hint_string = self.piece.hint_grab; + self.hint_parm1 = self.piece.hint_grab_parm1; + } + else + self.hint_string = &"ZOMBIE_BUILD_PIECE_GRAB"; + + if ( isdefined( self.piece.cursor_hint ) ) + self.cursor_hint = self.piece.cursor_hint; + + if ( isdefined( self.piece.cursor_hint_weapon ) ) + self.cursor_hint_weapon = self.piece.cursor_hint_weapon; + } + + return true; +} + +piece_unitrigger_think() +{ + self endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "trigger", player ); + + if ( player != self.parent_player ) + continue; + + if ( isdefined( player.screecher_weapon ) ) + continue; + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + status = player player_can_take_piece( self.stub.piece ); + + if ( !status ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + } + else + player thread player_take_piece( self.stub.piece ); + } +} + +player_get_buildable_pieces() +{ + if ( !isdefined( self.current_buildable_pieces ) ) + self.current_buildable_pieces = []; + + return self.current_buildable_pieces; +} + +player_get_buildable_piece( slot = 0 ) +{ + if ( !isdefined( self.current_buildable_pieces ) ) + self.current_buildable_pieces = []; + + return self.current_buildable_pieces[slot]; +} + +player_set_buildable_piece( piece, slot = 0 ) +{ +/# + if ( isdefined( slot ) && isdefined( piece ) && isdefined( piece.buildable_slot ) ) + assert( slot == piece.buildable_slot ); +#/ + if ( !isdefined( self.current_buildable_pieces ) ) + self.current_buildable_pieces = []; + + self.current_buildable_pieces[slot] = piece; +} + +player_can_take_piece( piece ) +{ + if ( !isdefined( piece ) ) + return false; + + return true; +} + +dbline( from, to ) +{ +/# + time = 20; + + while ( time > 0 ) + { + line( from, to, ( 0, 0, 1 ), 0, 1 ); + time -= 0.05; + wait 0.05; + } +#/ +} + +player_throw_piece( piece, origin, dir, return_to_spawn, return_time, endangles ) +{ + assert( isdefined( piece ) ); + + if ( isdefined( piece ) ) + { +/# + thread dbline( origin, origin + dir ); +#/ + pass = 0; + done = 0; + altmodel = undefined; + + while ( pass < 2 && !done ) + { + grenade = self magicgrenadetype( "buildable_piece_zm", origin, dir, 30000 ); + grenade thread watch_hit_players(); + grenade ghost(); + + if ( !isdefined( altmodel ) ) + { + altmodel = spawn( "script_model", grenade.origin ); + altmodel setmodel( piece.modelname ); + } + + altmodel.origin = grenade.angles; + altmodel.angles = grenade.angles; + altmodel linkto( grenade, "", ( 0, 0, 0 ), ( 0, 0, 0 ) ); + grenade.altmodel = altmodel; + + grenade waittill( "stationary" ); + + grenade_origin = grenade.origin; + grenade_angles = grenade.angles; + landed_on = grenade getgroundent(); + grenade delete(); + + if ( isdefined( landed_on ) && landed_on == level ) + done = 1; + else + { + origin = grenade_origin; + dir = ( dir[0] * -1 / 10, dir[1] * -1 / 10, -1 ); + pass++; + } + } + + if ( !isdefined( endangles ) ) + endangles = grenade_angles; + + piece piece_spawn_at( grenade_origin, endangles ); + + if ( isdefined( altmodel ) ) + altmodel delete(); + + if ( isdefined( piece.ondrop ) ) + piece [[ piece.ondrop ]]( self ); + + if ( isdefined( return_to_spawn ) && return_to_spawn ) + piece piece_wait_and_return( return_time ); + } +} + +watch_hit_players() +{ + self endon( "death" ); + self endon( "stationary" ); + + while ( isdefined( self ) ) + { + self waittill( "grenade_bounce", pos, normal, ent ); + + if ( isplayer( ent ) ) + ent explosiondamage( 25, pos ); + } +} + +piece_wait_and_return( return_time ) +{ + self endon( "pickup" ); + wait 0.15; + + if ( isdefined( level.exploding_jetgun_fx ) ) + playfxontag( level.exploding_jetgun_fx, self.model, "tag_origin" ); + else + playfxontag( level._effect["powerup_on"], self.model, "tag_origin" ); + + wait( return_time - 6 ); + self piece_hide(); + wait 1; + self piece_show(); + wait 1; + self piece_hide(); + wait 1; + self piece_show(); + wait 1; + self piece_hide(); + wait 1; + self piece_show(); + wait 1; + self notify( "respawn" ); + self piece_unspawn(); + self piece_spawn_at(); +} + +player_return_piece_to_original_spawn( slot = 0 ) +{ + self notify( "piece_released" + slot ); + piece = self player_get_buildable_piece( slot ); + self player_set_buildable_piece( undefined, slot ); + + if ( isdefined( piece ) ) + { + piece piece_spawn_at(); + self clear_buildable_clientfield( slot ); + } +} + +player_drop_piece_on_death( slot ) +{ + self notify( "piece_released" + slot ); + self endon( "piece_released" + slot ); + origin = self.origin; + angles = self.angles; + piece = self player_get_buildable_piece( slot ); + + self waittill( "death_or_disconnect" ); + + piece piece_spawn_at( origin, angles ); + + if ( isdefined( self ) ) + self clear_buildable_clientfield( slot ); + + if ( isdefined( piece.ondrop ) ) + piece [[ piece.ondrop ]]( self ); +} + +player_drop_piece( piece, slot = 0 ) +{ + if ( !isdefined( piece ) ) + piece = self player_get_buildable_piece( slot ); + else + slot = piece.buildable_slot; + + if ( isdefined( piece ) ) + { + origin = self.origin; + origintrace = groundtrace( origin + vectorscale( ( 0, 0, 1 ), 5.0 ), origin - vectorscale( ( 0, 0, 1 ), 999999.0 ), 0, self ); + + if ( isdefined( origintrace["entity"] ) ) + origintrace = groundtrace( origintrace["entity"].origin, origintrace["entity"].origin - vectorscale( ( 0, 0, 1 ), 999999.0 ), 0, origintrace["entity"] ); + + if ( isdefined( origintrace["position"] ) ) + origin = origintrace["position"]; + + piece.damage = 0; + piece piece_spawn_at( origin, self.angles ); + + if ( isplayer( self ) ) + self clear_buildable_clientfield( slot ); + + if ( isdefined( piece.ondrop ) ) + piece [[ piece.ondrop ]]( self ); + } + + self player_set_buildable_piece( undefined, slot ); + self notify( "piece_released" + slot ); +} + +player_take_piece( piece ) +{ + piece_slot = piece.buildable_slot; + damage = piece.damage; + + if ( isdefined( self player_get_buildable_piece( piece_slot ) ) ) + { + other_piece = self player_get_buildable_piece( piece_slot ); + self player_drop_piece( self player_get_buildable_piece( piece_slot ), piece_slot ); + other_piece.damage = damage; + self do_player_general_vox( "general", "build_swap" ); + } + + if ( isdefined( piece.onpickup ) ) + piece [[ piece.onpickup ]]( self ); + + piece piece_unspawn(); + piece notify( "pickup" ); + + if ( isplayer( self ) ) + { + if ( isdefined( piece.client_field_state ) ) + self set_buildable_clientfield( piece_slot, piece.client_field_state ); + + self player_set_buildable_piece( piece, piece_slot ); + self thread player_drop_piece_on_death( piece_slot ); + self track_buildable_piece_pickedup( piece ); + } +} + +player_destroy_piece( piece = self player_get_buildable_piece() ) +{ + if ( isplayer( self ) ) + { + slot = piece.buildable_slot; + + if ( isdefined( piece ) ) + { + piece piece_destroy(); + self clear_buildable_clientfield( slot ); + } + + self player_set_buildable_piece( undefined, slot ); + self notify( "piece_released" + slot ); + } +} + +claim_location( location ) +{ + if ( !isdefined( level.buildable_claimed_locations ) ) + level.buildable_claimed_locations = []; + + if ( !isdefined( level.buildable_claimed_locations[location] ) ) + { + level.buildable_claimed_locations[location] = 1; + return true; + } + + return false; +} + +is_point_in_build_trigger( point ) +{ + candidate_list = []; + + foreach ( zone in level.zones ) + { + if ( isdefined( zone.unitrigger_stubs ) ) + candidate_list = arraycombine( candidate_list, zone.unitrigger_stubs, 1, 0 ); + } + + valid_range = 128; + closest = maps\mp\zombies\_zm_unitrigger::get_closest_unitriggers( point, candidate_list, valid_range ); + + for ( index = 0; index < closest.size; index++ ) + { + if ( isdefined( closest[index].registered ) && closest[index].registered && isdefined( closest[index].piece ) ) + return true; + } + + return false; +} + +piece_allocate_spawn( piecespawn ) +{ + self.current_spawn = 0; + self.managed_spawn = 1; + self.piecespawn = piecespawn; + + if ( isdefined( piecespawn.str_force_spawn_kvp ) ) + { + s_struct = getstruct( piecespawn.str_force_spawn_name, piecespawn.str_force_spawn_kvp ); + + if ( isdefined( s_struct ) ) + { + for ( i = 0; i < self.spawns.size; i++ ) + { + if ( s_struct == self.spawns[i] ) + { + self.current_spawn = i; + piecespawn.piece_allocated[self.current_spawn] = 1; + piecespawn.str_force_spawn_kvp = undefined; + piecespawn.str_force_spawn_name = undefined; + return; + } + } + } + } + + if ( isdefined( piecespawn.use_cyclic_spawns ) ) + { + piece_allocate_cyclic( piecespawn ); + return; + } + + if ( self.spawns.size >= 1 && self.spawns.size > 1 ) + { + any_good = 0; + any_okay = 0; + totalweight = 0; + spawnweights = []; + + for ( i = 0; i < self.spawns.size; i++ ) + { + if ( isdefined( piecespawn.piece_allocated[i] ) && piecespawn.piece_allocated[i] ) + spawnweights[i] = 0; + else if ( isdefined( self.spawns[i].script_forcespawn ) && self.spawns[i].script_forcespawn ) + { + switch ( self.spawns[i].script_forcespawn ) + { + case 4: + spawnweights[i] = 0.0; + break; + case 1: + self.spawns[i].script_forcespawn = 0; + case 2: + self.current_spawn = i; + piecespawn.piece_allocated[self.current_spawn] = 1; + return; + case 3: + self.spawns[i].script_forcespawn = 4; + self.current_spawn = i; + piecespawn.piece_allocated[self.current_spawn] = 1; + return; + default: + any_okay = 1; + spawnweights[i] = 0.01; + break; + } + } + else if ( is_point_in_build_trigger( self.spawns[i].origin ) ) + { + any_okay = 1; + spawnweights[i] = 0.01; + } + else + { + any_good = 1; + spawnweights[i] = 1.0; + } + + totalweight += spawnweights[i]; + } + + assert( any_good || any_okay, "There is nowhere to spawn this piece" ); + + if ( any_good ) + totalweight = float( int( totalweight ) ); + + r = randomfloat( totalweight ); + + for ( i = 0; i < self.spawns.size; i++ ) + { + if ( !any_good || spawnweights[i] >= 1.0 ) + { + r -= spawnweights[i]; + + if ( r < 0 ) + { + self.current_spawn = i; + piecespawn.piece_allocated[self.current_spawn] = 1; + return; + } + } + } + + self.current_spawn = randomint( self.spawns.size ); + piecespawn.piece_allocated[self.current_spawn] = 1; + } +} + +piece_allocate_cyclic( piecespawn ) +{ + if ( self.spawns.size > 1 ) + { + if ( isdefined( piecespawn.randomize_cyclic_index ) ) + { + piecespawn.randomize_cyclic_index = undefined; + piecespawn.cyclic_index = randomint( self.spawns.size ); + } + + if ( !isdefined( piecespawn.cyclic_index ) ) + piecespawn.cyclic_index = 0; + + piecespawn.cyclic_index++; + + if ( piecespawn.cyclic_index >= self.spawns.size ) + piecespawn.cyclic_index = 0; + } + else + piecespawn.cyclic_index = 0; + + self.current_spawn = piecespawn.cyclic_index; + piecespawn.piece_allocated[self.current_spawn] = 1; +} + +piece_deallocate_spawn() +{ + if ( isdefined( self.current_spawn ) ) + { + self.piecespawn.piece_allocated[self.current_spawn] = 0; + self.current_spawn = undefined; + } + + self.start_origin = undefined; +} + +piece_pick_random_spawn() +{ + self.current_spawn = 0; + + if ( self.spawns.size >= 1 && self.spawns.size > 1 ) + { + for ( self.current_spawn = randomint( self.spawns.size ); isdefined( self.spawns[self.current_spawn].claim_location ) && !claim_location( self.spawns[self.current_spawn].claim_location ); self.current_spawn = randomint( self.spawns.size ) ) + { + arrayremoveindex( self.spawns, self.current_spawn ); + + if ( self.spawns.size < 1 ) + { + self.current_spawn = 0; +/# + println( "ERROR: All buildable spawn locations claimed" ); +#/ + return; + } + } + } +} + +piece_set_spawn( num ) +{ + self.current_spawn = 0; + + if ( self.spawns.size >= 1 && self.spawns.size > 1 ) + self.current_spawn = int( min( num, self.spawns.size - 1 ) ); +} + +piece_spawn_in( piecespawn ) +{ + if ( self.spawns.size < 1 ) + return; + + if ( isdefined( self.managed_spawn ) && self.managed_spawn ) + { + if ( !isdefined( self.current_spawn ) ) + self piece_allocate_spawn( self.piecespawn ); + } + + if ( !isdefined( self.current_spawn ) ) + self.current_spawn = 0; + + spawndef = self.spawns[self.current_spawn]; + self.script_noteworthy = spawndef.script_noteworthy; + self.script_parameters = spawndef.script_parameters; + self.unitrigger = generate_piece_unitrigger( "trigger_radius_use", spawndef.origin + vectorscale( ( 0, 0, 1 ), 12.0 ), spawndef.angles, 0, piecespawn.radius, piecespawn.height, 0 ); + self.unitrigger.piece = self; + self.buildable_slot = piecespawn.buildable_slot; + self.radius = piecespawn.radius; + self.height = piecespawn.height; + self.buildablename = piecespawn.buildablename; + self.modelname = piecespawn.modelname; + self.hud_icon = piecespawn.hud_icon; + self.part_name = piecespawn.part_name; + self.drop_offset = piecespawn.drop_offset; + self.start_origin = spawndef.origin; + self.start_angles = spawndef.angles; + self.client_field_state = piecespawn.client_field_state; + self.hint_grab = piecespawn.hint_grab; + self.hint_swap = piecespawn.hint_swap; + self.model = spawn( "script_model", self.start_origin ); + + if ( isdefined( self.start_angles ) ) + self.model.angles = self.start_angles; + + self.model setmodel( piecespawn.modelname ); + self.model ghostindemo(); + self.model.hud_icon = piecespawn.hud_icon; + self.piecespawn = piecespawn; + self.unitrigger.origin_parent = self.model; + self.building = undefined; + self.onunspawn = piecespawn.onunspawn; + self.ondestroy = piecespawn.ondestroy; + + if ( isdefined( piecespawn.onspawn ) ) + { + self.onspawn = piecespawn.onspawn; + self [[ piecespawn.onspawn ]](); + } +} + +piece_spawn_at_with_notify_delay( origin, angles, str_notify, unbuild_respawn_fn ) +{ + level waittill( str_notify ); + + piece_spawn_at( origin, angles ); + + if ( isdefined( unbuild_respawn_fn ) ) + self [[ unbuild_respawn_fn ]](); +} + +piece_spawn_at( origin, angles ) +{ + if ( self.spawns.size < 1 ) + return; + + if ( isdefined( self.managed_spawn ) && self.managed_spawn ) + { + if ( !isdefined( self.current_spawn ) && !isdefined( origin ) ) + { + self piece_allocate_spawn( self.piecespawn ); + spawndef = self.spawns[self.current_spawn]; + self.start_origin = spawndef.origin; + self.start_angles = spawndef.angles; + } + } + else if ( !isdefined( self.current_spawn ) ) + self.current_spawn = 0; + + unitrigger_offset = vectorscale( ( 0, 0, 1 ), 12.0 ); + + if ( !isdefined( origin ) ) + origin = self.start_origin; + else + { + origin += ( 0, 0, self.drop_offset ); + unitrigger_offset -= ( 0, 0, self.drop_offset ); + } + + if ( !isdefined( angles ) ) + angles = self.start_angles; +/# + if ( !isdefined( level.drop_offset ) ) + level.drop_offset = 0; + + origin += ( 0, 0, level.drop_offset ); + unitrigger_offset -= ( 0, 0, level.drop_offset ); +#/ + self.model = spawn( "script_model", origin ); + + if ( isdefined( angles ) ) + self.model.angles = angles; + + self.model setmodel( self.modelname ); + + if ( isdefined( level.equipment_safe_to_drop ) ) + { + if ( ![[ level.equipment_safe_to_drop ]]( self.model ) ) + { + origin = self.start_origin; + angles = self.start_angles; + self.model.origin = origin; + self.model.angles = angles; + } + } + + self.unitrigger = generate_piece_unitrigger( "trigger_radius_use", origin + unitrigger_offset, angles, 0, self.radius, self.height, isdefined( self.model.canmove ) && self.model.canmove ); + self.unitrigger.piece = self; + self.model.hud_icon = self.hud_icon; + self.unitrigger.origin_parent = self.model; + self.building = undefined; + + if ( isdefined( self.onspawn ) ) + self [[ self.onspawn ]](); +} + +piece_unspawn() +{ + if ( isdefined( self.onunspawn ) ) + self [[ self.onunspawn ]](); + + if ( isdefined( self.managed_spawn ) && self.managed_spawn ) + self piece_deallocate_spawn(); + + if ( isdefined( self.model ) ) + self.model delete(); + + self.model = undefined; + + if ( isdefined( self.unitrigger ) ) + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger ); + + self.unitrigger = undefined; +} + +piece_hide() +{ + if ( isdefined( self.model ) ) + self.model ghost(); +} + +piece_show() +{ + if ( isdefined( self.model ) ) + self.model show(); +} + +piece_destroy() +{ + if ( isdefined( self.ondestroy ) ) + self [[ self.ondestroy ]](); +} + +generate_piece( buildable_piece_spawns ) +{ + piece = spawnstruct(); + piece.spawns = buildable_piece_spawns.spawns; + + if ( isdefined( buildable_piece_spawns.managing_pieces ) && buildable_piece_spawns.managing_pieces ) + piece piece_allocate_spawn( buildable_piece_spawns ); + else if ( isdefined( buildable_piece_spawns.use_spawn_num ) ) + piece piece_set_spawn( buildable_piece_spawns.use_spawn_num ); + else + piece piece_pick_random_spawn(); + + piece piece_spawn_in( buildable_piece_spawns ); + + if ( piece.spawns.size >= 1 ) + piece.hud_icon = buildable_piece_spawns.hud_icon; + + if ( isdefined( buildable_piece_spawns.onpickup ) ) + piece.onpickup = buildable_piece_spawns.onpickup; + else + piece.onpickup = ::onpickuputs; + + if ( isdefined( buildable_piece_spawns.ondrop ) ) + piece.ondrop = buildable_piece_spawns.ondrop; + else + piece.ondrop = ::ondroputs; + + return piece; +} + +buildable_piece_unitriggers( buildable_name, origin ) +{ + assert( isdefined( buildable_name ) ); + assert( isdefined( level.zombie_buildables[buildable_name] ), "Called buildable_think() without including the buildable - " + buildable_name ); + buildable = level.zombie_buildables[buildable_name]; + + if ( !isdefined( buildable.buildablepieces ) ) + buildable.buildablepieces = []; + + flag_wait( "start_zombie_round_logic" ); + buildablezone = spawnstruct(); + buildablezone.buildable_name = buildable_name; + buildablezone.buildable_slot = buildable.buildable_slot; + + if ( !isdefined( buildablezone.pieces ) ) + buildablezone.pieces = []; + + buildablepickups = []; + + foreach ( buildablepiece in buildable.buildablepieces ) + { + if ( !isdefined( buildablepiece.generated_instances ) ) + buildablepiece.generated_instances = 0; + + if ( isdefined( buildablepiece.generated_piece ) && ( isdefined( buildablepiece.can_reuse ) && buildablepiece.can_reuse ) ) + piece = buildablepiece.generated_piece; + else if ( buildablepiece.generated_instances >= buildablepiece.max_instances ) + piece = buildablepiece.generated_piece; + else + { + piece = generate_piece( buildablepiece ); + buildablepiece.generated_piece = piece; + buildablepiece.generated_instances++; + + if ( isdefined( buildablepiece.min_instances ) ) + { + while ( buildablepiece.generated_instances < buildablepiece.min_instances ) + { + piece = generate_piece( buildablepiece ); + buildablepiece.generated_piece = piece; + buildablepiece.generated_instances++; + } + } + } + + buildablezone.pieces[buildablezone.pieces.size] = piece; + } + + buildablezone.stub = self; + return buildablezone; +} + +hide_buildable_table_model( trigger_targetname ) +{ + trig = getent( trigger_targetname, "targetname" ); + + if ( !isdefined( trig ) ) + return; + + if ( isdefined( trig.target ) ) + { + model = getent( trig.target, "targetname" ); + + if ( isdefined( model ) ) + { + model hide(); + model notsolid(); + } + } +} + +setup_unitrigger_buildable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + trig = getent( trigger_targetname, "targetname" ); + + if ( !isdefined( trig ) ) + return; + + return setup_unitrigger_buildable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); +} + +setup_unitrigger_buildable_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + triggers = getentarray( trigger_targetname, "targetname" ); + stubs = []; + + foreach ( trig in triggers ) + stubs[stubs.size] = setup_unitrigger_buildable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); + + return stubs; +} + +setup_unitrigger_buildable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + if ( !isdefined( trig ) ) + return; + + unitrigger_stub = spawnstruct(); + unitrigger_stub.buildablestruct = level.zombie_include_buildables[equipname]; + angles = trig.script_angles; + + if ( !isdefined( angles ) ) + angles = ( 0, 0, 0 ); + + unitrigger_stub.origin = trig.origin + anglestoright( angles ) * -6; + unitrigger_stub.angles = trig.angles; + + if ( isdefined( trig.script_angles ) ) + unitrigger_stub.angles = trig.script_angles; + + unitrigger_stub.equipname = equipname; + unitrigger_stub.weaponname = weaponname; + unitrigger_stub.trigger_hintstring = trigger_hintstring; + unitrigger_stub.delete_trigger = delete_trigger; + unitrigger_stub.built = 0; + unitrigger_stub.persistent = persistent; + unitrigger_stub.usetime = int( 3000 ); + unitrigger_stub.onbeginuse = ::onbeginuseuts; + unitrigger_stub.onenduse = ::onenduseuts; + unitrigger_stub.onuse = ::onuseplantobjectuts; + unitrigger_stub.oncantuse = ::oncantuseuts; + + if ( isdefined( trig.script_length ) ) + unitrigger_stub.script_length = trig.script_length; + else + unitrigger_stub.script_length = 32; + + if ( isdefined( trig.script_width ) ) + unitrigger_stub.script_width = trig.script_width; + else + unitrigger_stub.script_width = 100; + + if ( isdefined( trig.script_height ) ) + unitrigger_stub.script_height = trig.script_height; + else + unitrigger_stub.script_height = 64; + + unitrigger_stub.target = trig.target; + unitrigger_stub.targetname = trig.targetname; + unitrigger_stub.script_noteworthy = trig.script_noteworthy; + unitrigger_stub.script_parameters = trig.script_parameters; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + + if ( isdefined( level.zombie_buildables[equipname].hint ) ) + unitrigger_stub.hint_string = level.zombie_buildables[equipname].hint; + + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.require_look_at = 1; + unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + unitrigger_stub.prompt_and_visibility_func = ::buildabletrigger_update_prompt; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::buildable_place_think ); + unitrigger_stub.piece_trigger = trig; + trig.trigger_stub = unitrigger_stub; + unitrigger_stub.zombie_weapon_upgrade = trig.zombie_weapon_upgrade; + + if ( isdefined( unitrigger_stub.target ) ) + { + unitrigger_stub.model = getent( unitrigger_stub.target, "targetname" ); + + if ( isdefined( unitrigger_stub.model ) ) + { + if ( isdefined( unitrigger_stub.zombie_weapon_upgrade ) ) + unitrigger_stub.model useweaponhidetags( unitrigger_stub.zombie_weapon_upgrade ); + + unitrigger_stub.model hide(); + unitrigger_stub.model notsolid(); + } + } + + unitrigger_stub.buildablezone = unitrigger_stub buildable_piece_unitriggers( equipname, unitrigger_stub.origin ); + + if ( delete_trigger ) + trig delete(); + + level.buildable_stubs[level.buildable_stubs.size] = unitrigger_stub; + return unitrigger_stub; +} + +buildable_has_piece( piece ) +{ + for ( i = 0; i < self.pieces.size; i++ ) + { + if ( self.pieces[i].modelname == piece.modelname && self.pieces[i].buildablename == piece.buildablename ) + return true; + } + + return false; +} + +buildable_set_piece_built( piece ) +{ + for ( i = 0; i < self.pieces.size; i++ ) + { + if ( self.pieces[i].modelname == piece.modelname && self.pieces[i].buildablename == piece.buildablename ) + self.pieces[i].built = 1; + } +} + +buildable_set_piece_building( piece ) +{ + for ( i = 0; i < self.pieces.size; i++ ) + { + if ( self.pieces[i].modelname == piece.modelname && self.pieces[i].buildablename == piece.buildablename ) + { + self.pieces[i] = piece; + self.pieces[i].building = 1; + } + } +} + +buildable_clear_piece_building( piece ) +{ + if ( isdefined( piece ) ) + piece.building = 0; +} + +buildable_is_piece_built( piece ) +{ + for ( i = 0; i < self.pieces.size; i++ ) + { + if ( self.pieces[i].modelname == piece.modelname && self.pieces[i].buildablename == piece.buildablename ) + return isdefined( self.pieces[i].built ) && self.pieces[i].built; + } + + return 0; +} + +buildable_is_piece_building( piece ) +{ + for ( i = 0; i < self.pieces.size; i++ ) + { + if ( self.pieces[i].modelname == piece.modelname && self.pieces[i].buildablename == piece.buildablename ) + return isdefined( self.pieces[i].building ) && self.pieces[i].building && self.pieces[i] == piece; + } + + return 0; +} + +buildable_is_piece_built_or_building( piece ) +{ + for ( i = 0; i < self.pieces.size; i++ ) + { + if ( self.pieces[i].modelname == piece.modelname && self.pieces[i].buildablename == piece.buildablename ) + return isdefined( self.pieces[i].built ) && self.pieces[i].built || isdefined( self.pieces[i].building ) && self.pieces[i].building; + } + + return 0; +} + +buildable_all_built() +{ + for ( i = 0; i < self.pieces.size; i++ ) + { + if ( !( isdefined( self.pieces[i].built ) && self.pieces[i].built ) ) + return false; + } + + return true; +} + +player_can_build( buildable, continuing ) +{ + if ( !isdefined( buildable ) ) + return false; + + if ( !isdefined( self player_get_buildable_piece( buildable.buildable_slot ) ) ) + return false; + + if ( !buildable buildable_has_piece( self player_get_buildable_piece( buildable.buildable_slot ) ) ) + return false; + + if ( isdefined( continuing ) && continuing ) + { + if ( buildable buildable_is_piece_built( self player_get_buildable_piece( buildable.buildable_slot ) ) ) + return false; + } + else if ( buildable buildable_is_piece_built_or_building( self player_get_buildable_piece( buildable.buildable_slot ) ) ) + return false; + + if ( isdefined( buildable.stub ) && isdefined( buildable.stub.custom_buildablestub_update_prompt ) && isdefined( buildable.stub.playertrigger[0] ) && isdefined( buildable.stub.playertrigger[0].stub ) && !buildable.stub.playertrigger[0].stub [[ buildable.stub.custom_buildablestub_update_prompt ]]( self, 1, buildable.stub.playertrigger[0] ) ) + return false; + + return true; +} + +player_build( buildable, pieces ) +{ + if ( isdefined( pieces ) ) + { + for ( i = 0; i < pieces.size; i++ ) + { + buildable buildable_set_piece_built( pieces[i] ); + player_destroy_piece( pieces[i] ); + } + } + else + { + buildable buildable_set_piece_built( self player_get_buildable_piece( buildable.buildable_slot ) ); + player_destroy_piece( self player_get_buildable_piece( buildable.buildable_slot ) ); + } + + if ( isdefined( buildable.stub.model ) ) + { + for ( i = 0; i < buildable.pieces.size; i++ ) + { + if ( isdefined( buildable.pieces[i].part_name ) ) + { + buildable.stub.model notsolid(); + + if ( !( isdefined( buildable.pieces[i].built ) && buildable.pieces[i].built ) ) + { + buildable.stub.model hidepart( buildable.pieces[i].part_name ); + continue; + } + + buildable.stub.model show(); + buildable.stub.model showpart( buildable.pieces[i].part_name ); + } + } + } + + if ( isplayer( self ) ) + self track_buildable_pieces_built( buildable ); + + if ( buildable buildable_all_built() ) + { + self player_finish_buildable( buildable ); + buildable.stub buildablestub_finish_build( self ); + + if ( isplayer( self ) ) + self track_buildables_built( buildable ); + + if ( isdefined( level.buildable_built_custom_func ) ) + self thread [[ level.buildable_built_custom_func ]]( buildable ); + + alias = sndbuildablecompletealias( buildable.buildable_name ); + self playsound( alias ); + } + else + { + self playsound( "zmb_buildable_piece_add" ); + assert( isdefined( level.zombie_buildables[buildable.buildable_name].building ), "Missing builing hint" ); + + if ( isdefined( level.zombie_buildables[buildable.buildable_name].building ) ) + return level.zombie_buildables[buildable.buildable_name].building; + } + + return ""; +} + +sndbuildablecompletealias( name ) +{ + alias = undefined; + + switch ( name ) + { + case "chalk": + alias = "zmb_chalk_complete"; + break; + default: + alias = "zmb_buildable_complete"; + break; + } + + return alias; +} + +player_finish_buildable( buildable ) +{ + buildable.built = 1; + buildable.stub.built = 1; + buildable notify( "built", self ); + level.buildables_built[buildable.buildable_name] = 1; + level notify( buildable.buildable_name + "_built", self ); +} + +buildablestub_finish_build( player ) +{ + player player_finish_buildable( self.buildablezone ); +} + +buildablestub_remove() +{ + arrayremovevalue( level.buildable_stubs, self ); +} + +buildabletrigger_update_prompt( player ) +{ + can_use = self.stub buildablestub_update_prompt( player ); + self sethintstring( self.stub.hint_string ); + + if ( isdefined( self.stub.cursor_hint ) ) + { + if ( self.stub.cursor_hint == "HINT_WEAPON" && isdefined( self.stub.cursor_hint_weapon ) ) + self setcursorhint( self.stub.cursor_hint, self.stub.cursor_hint_weapon ); + else + self setcursorhint( self.stub.cursor_hint ); + } + + return can_use; +} + +buildablestub_update_prompt( player ) +{ + if ( !self anystub_update_prompt( player ) ) + return false; + + can_use = 1; + + if ( isdefined( self.buildablestub_reject_func ) ) + { + rval = self [[ self.buildablestub_reject_func ]]( player ); + + if ( rval ) + return false; + } + + if ( isdefined( self.custom_buildablestub_update_prompt ) && !self [[ self.custom_buildablestub_update_prompt ]]( player ) ) + return false; + + self.cursor_hint = "HINT_NOICON"; + self.cursor_hint_weapon = undefined; + + if ( !( isdefined( self.built ) && self.built ) ) + { + slot = self.buildablestruct.buildable_slot; + + if ( !isdefined( player player_get_buildable_piece( slot ) ) ) + { + if ( isdefined( level.zombie_buildables[self.equipname].hint_more ) ) + self.hint_string = level.zombie_buildables[self.equipname].hint_more; + else + self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE"; + + return false; + } + else if ( !self.buildablezone buildable_has_piece( player player_get_buildable_piece( slot ) ) ) + { + if ( isdefined( level.zombie_buildables[self.equipname].hint_wrong ) ) + self.hint_string = level.zombie_buildables[self.equipname].hint_wrong; + else + self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG"; + + return false; + } + else + { + assert( isdefined( level.zombie_buildables[self.equipname].hint ), "Missing buildable hint" ); + + if ( isdefined( level.zombie_buildables[self.equipname].hint ) ) + self.hint_string = level.zombie_buildables[self.equipname].hint; + else + self.hint_string = "Missing buildable hint"; + } + } + else if ( self.persistent == 1 ) + { + if ( maps\mp\zombies\_zm_equipment::is_limited_equipment( self.weaponname ) && maps\mp\zombies\_zm_equipment::limited_equipment_in_use( self.weaponname ) ) + { + self.hint_string = &"ZOMBIE_BUILD_PIECE_ONLY_ONE"; + return false; + } + + if ( player has_player_equipment( self.weaponname ) ) + { + self.hint_string = &"ZOMBIE_BUILD_PIECE_HAVE_ONE"; + return false; + } + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) ) + { + self.cursor_hint = "HINT_WEAPON"; + self.cursor_hint_weapon = self.weaponname; + } + + self.hint_string = self.trigger_hintstring; + } + else if ( self.persistent == 2 ) + { + if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.weaponname, undefined ) ) + { + self.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; + return false; + } + else if ( isdefined( self.bought ) && self.bought ) + { + self.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; + return false; + } + + self.hint_string = self.trigger_hintstring; + } + else + { + self.hint_string = ""; + return false; + } + + return true; +} + +player_continue_building( buildablezone, build_stub = buildablezone.stub ) +{ + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || self in_revive_trigger() ) + return false; + + if ( self isthrowinggrenade() ) + return false; + + if ( !self player_can_build( buildablezone, 1 ) ) + return false; + + if ( isdefined( self.screecher ) ) + return false; + + if ( !self usebuttonpressed() ) + return false; + + slot = build_stub.buildablestruct.buildable_slot; + + if ( !buildablezone buildable_is_piece_building( self player_get_buildable_piece( slot ) ) ) + return false; + + trigger = build_stub maps\mp\zombies\_zm_unitrigger::unitrigger_trigger( self ); + + if ( build_stub.script_unitrigger_type == "unitrigger_radius_use" ) + { + torigin = build_stub unitrigger_origin(); + porigin = self geteye(); + radius_sq = 2.25 * build_stub.test_radius_sq; + + if ( distance2dsquared( torigin, porigin ) > radius_sq ) + return false; + } + else if ( !isdefined( trigger ) || !trigger istouching( self ) ) + return false; + + if ( isdefined( build_stub.require_look_at ) && build_stub.require_look_at && !self is_player_looking_at( trigger.origin, 0.4 ) ) + return false; + + return true; +} + +player_progress_bar_update( start_time, build_time ) +{ + self endon( "entering_last_stand" ); + self endon( "death" ); + self endon( "disconnect" ); + self endon( "buildable_progress_end" ); + + while ( isdefined( self ) && gettime() - start_time < build_time ) + { + progress = ( gettime() - start_time ) / build_time; + + if ( progress < 0 ) + progress = 0; + + if ( progress > 1 ) + progress = 1; + + self.usebar updatebar( progress ); + wait 0.05; + } +} + +player_progress_bar( start_time, build_time, building_prompt ) +{ + self.usebar = self createprimaryprogressbar(); + self.usebartext = self createprimaryprogressbartext(); + + if ( isdefined( building_prompt ) ) + self.usebartext settext( building_prompt ); + else + self.usebartext settext( &"ZOMBIE_BUILDING" ); + + if ( isdefined( self ) && isdefined( start_time ) && isdefined( build_time ) ) + self player_progress_bar_update( start_time, build_time ); + + self.usebartext destroyelem(); + self.usebar destroyelem(); +} + +buildable_use_hold_think_internal( player, bind_stub = self.stub ) +{ + wait 0.01; + + if ( !isdefined( self ) ) + { + self notify( "build_failed" ); + + if ( isdefined( player.buildableaudio ) ) + { + player.buildableaudio delete(); + player.buildableaudio = undefined; + } + + return; + } + + if ( !isdefined( self.usetime ) ) + self.usetime = int( 3000 ); + + self.build_time = self.usetime; + self.build_start_time = gettime(); + build_time = self.build_time; + build_start_time = self.build_start_time; + player disable_player_move_states( 1 ); + player increment_is_drinking(); + orgweapon = player getcurrentweapon(); + build_weapon = "zombie_builder_zm"; + + if ( isdefined( bind_stub.build_weapon ) ) + build_weapon = bind_stub.build_weapon; + + player giveweapon( build_weapon ); + player switchtoweapon( build_weapon ); + slot = bind_stub.buildablestruct.buildable_slot; + bind_stub.buildablezone buildable_set_piece_building( player player_get_buildable_piece( slot ) ); + player thread player_progress_bar( build_start_time, build_time, bind_stub.building_prompt ); + + if ( isdefined( level.buildable_build_custom_func ) ) + player thread [[ level.buildable_build_custom_func ]]( self.stub ); + + while ( isdefined( self ) && player player_continue_building( bind_stub.buildablezone, self.stub ) && gettime() - self.build_start_time < self.build_time ) + wait 0.05; + + player notify( "buildable_progress_end" ); + player maps\mp\zombies\_zm_weapons::switch_back_primary_weapon( orgweapon ); + player takeweapon( "zombie_builder_zm" ); + + if ( isdefined( player.is_drinking ) && player.is_drinking ) + player decrement_is_drinking(); + + player enable_player_move_states(); + + if ( isdefined( self ) && player player_continue_building( bind_stub.buildablezone, self.stub ) && gettime() - self.build_start_time >= self.build_time ) + { + buildable_clear_piece_building( player player_get_buildable_piece( slot ) ); + self notify( "build_succeed" ); + } + else + { + if ( isdefined( player.buildableaudio ) ) + { + player.buildableaudio delete(); + player.buildableaudio = undefined; + } + + buildable_clear_piece_building( player player_get_buildable_piece( slot ) ); + self notify( "build_failed" ); + } +} + +buildable_play_build_fx( player ) +{ + self endon( "kill_trigger" ); + self endon( "build_succeed" ); + self endon( "build_failed" ); + + while ( true ) + { + playfx( level._effect["building_dust"], player getplayercamerapos(), player.angles ); + wait 0.5; + } +} + +buildable_use_hold_think( player, bind_stub = self.stub ) +{ + self thread buildable_play_build_fx( player ); + self thread buildable_use_hold_think_internal( player, bind_stub ); + retval = self waittill_any_return( "build_succeed", "build_failed" ); + + if ( retval == "build_succeed" ) + return true; + + return false; +} + +buildable_place_think() +{ + self endon( "kill_trigger" ); + player_built = undefined; + + while ( !( isdefined( self.stub.built ) && self.stub.built ) ) + { + self waittill( "trigger", player ); + + if ( player != self.parent_player ) + continue; + + if ( isdefined( player.screecher_weapon ) ) + continue; + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + status = player player_can_build( self.stub.buildablezone ); + + if ( !status ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + + if ( isdefined( self.stub.oncantuse ) ) + self.stub [[ self.stub.oncantuse ]]( player ); + } + else + { + if ( isdefined( self.stub.onbeginuse ) ) + self.stub [[ self.stub.onbeginuse ]]( player ); + + result = self buildable_use_hold_think( player ); + team = player.pers["team"]; + + if ( isdefined( self.stub.onenduse ) ) + self.stub [[ self.stub.onenduse ]]( team, player, result ); + + if ( !result ) + continue; + + if ( isdefined( self.stub.onuse ) ) + self.stub [[ self.stub.onuse ]]( player ); + + slot = self.stub.buildablestruct.buildable_slot; + + if ( isdefined( player player_get_buildable_piece( slot ) ) ) + { + prompt = player player_build( self.stub.buildablezone ); + player_built = player; + self.stub.hint_string = prompt; + } + + self sethintstring( self.stub.hint_string ); + } + } + + if ( isdefined( player_built ) ) + { + + } + + switch ( self.stub.persistent ) + { + case 1: + self bptrigger_think_persistent( player_built ); + break; + case 0: + self bptrigger_think_one_time( player_built ); + break; + case 3: + self bptrigger_think_unbuild( player_built ); + break; + case 2: + self bptrigger_think_one_use_and_fly( player_built ); + break; + case 4: + self [[ self.stub.custom_completion_callback ]]( player_built ); + break; + } +} + +bptrigger_think_one_time( player_built ) +{ + self.stub buildablestub_remove(); + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub ); +} + +bptrigger_think_unbuild( player_built ) +{ + stub_unbuild_buildable( self.stub, 1 ); +} + +bptrigger_think_one_use_and_fly( player_built ) +{ + if ( isdefined( player_built ) ) + self buildabletrigger_update_prompt( player_built ); + + if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) + { + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; + self sethintstring( self.stub.hint_string ); + return; + } + + if ( isdefined( self.stub.bought ) && self.stub.bought ) + { + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; + self sethintstring( self.stub.hint_string ); + return; + } + + if ( isdefined( self.stub.model ) ) + { + self.stub.model notsolid(); + self.stub.model show(); + } + + while ( self.stub.persistent == 2 ) + { + self waittill( "trigger", player ); + + if ( isdefined( player.screecher_weapon ) ) + continue; + + if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) + { + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; + self sethintstring( self.stub.hint_string ); + return; + } + + if ( !( isdefined( self.stub.built ) && self.stub.built ) ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + return; + } + + if ( player != self.parent_player ) + continue; + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + self.stub.bought = 1; + + if ( isdefined( self.stub.model ) ) + self.stub.model thread model_fly_away(); + + player maps\mp\zombies\_zm_weapons::weapon_give( self.stub.weaponname ); + + if ( isdefined( level.zombie_include_buildables[self.stub.equipname].onbuyweapon ) ) + self [[ level.zombie_include_buildables[self.stub.equipname].onbuyweapon ]]( player ); + + if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; + else + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; + + self sethintstring( self.stub.hint_string ); + player track_buildables_pickedup( self.stub.weaponname ); + } +} + +bptrigger_think_persistent( player_built ) +{ + if ( !isdefined( player_built ) || self [[ self.stub.prompt_and_visibility_func ]]( player_built ) ) + { + if ( isdefined( self.stub.model ) ) + { + self.stub.model notsolid(); + self.stub.model show(); + } + + while ( self.stub.persistent == 1 ) + { + self waittill( "trigger", player ); + + if ( isdefined( player.screecher_weapon ) ) + continue; + + if ( !( isdefined( self.stub.built ) && self.stub.built ) ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + self setcursorhint( "HINT_NOICON" ); + return; + } + + if ( player != self.parent_player ) + continue; + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + if ( player has_player_equipment( self.stub.weaponname ) ) + continue; + + if ( isdefined( self.stub.buildablestruct.onbought ) ) + self [[ self.stub.buildablestruct.onbought ]]( player ); + else if ( !maps\mp\zombies\_zm_equipment::is_limited_equipment( self.stub.weaponname ) || !maps\mp\zombies\_zm_equipment::limited_equipment_in_use( self.stub.weaponname ) ) + { + player maps\mp\zombies\_zm_equipment::equipment_buy( self.stub.weaponname ); + player giveweapon( self.stub.weaponname ); + player setweaponammoclip( self.stub.weaponname, 1 ); + + if ( isdefined( level.zombie_include_buildables[self.stub.equipname].onbuyweapon ) ) + self [[ level.zombie_include_buildables[self.stub.equipname].onbuyweapon ]]( player ); + + if ( self.stub.weaponname != "keys_zm" ) + player setactionslot( 1, "weapon", self.stub.weaponname ); + + self.stub.cursor_hint = "HINT_NOICON"; + self.stub.cursor_hint_weapon = undefined; + self setcursorhint( self.stub.cursor_hint ); + + if ( isdefined( level.zombie_buildables[self.stub.equipname].bought ) ) + self.stub.hint_string = level.zombie_buildables[self.stub.equipname].bought; + else + self.stub.hint_string = ""; + + self sethintstring( self.stub.hint_string ); + player track_buildables_pickedup( self.stub.weaponname ); + } + else + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + self.stub.cursor_hint = "HINT_NOICON"; + self.stub.cursor_hint_weapon = undefined; + self setcursorhint( self.stub.cursor_hint ); + } + } + } +} + +bptrigger_think_unbuild_no_return( player ) +{ + stub_unbuild_buildable( self.stub, 0 ); +} + +bpstub_set_custom_think_callback( callback ) +{ + self.persistent = 4; + self.custom_completion_callback = callback; +} + +model_fly_away() +{ + self moveto( self.origin + vectorscale( ( 0, 0, 1 ), 40.0 ), 3 ); + direction = self.origin; + direction = ( direction[1], direction[0], 0 ); + + if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 ) + direction = ( direction[0], direction[1] * -1, 0 ); + else if ( direction[0] < 0 ) + direction = ( direction[0] * -1, direction[1], 0 ); + + self vibrate( direction, 10, 0.5, 4 ); + + self waittill( "movedone" ); + + self hide(); + playfx( level._effect["poltergeist"], self.origin ); +} + +find_buildable_stub( equipname ) +{ + foreach ( stub in level.buildable_stubs ) + { + if ( stub.equipname == equipname ) + return stub; + } + + return undefined; +} + +unbuild_buildable( equipname, return_pieces, origin, angles ) +{ + stub = find_buildable_stub( equipname ); + stub_unbuild_buildable( stub, return_pieces, origin, angles ); +} + +stub_unbuild_buildable( stub, return_pieces, origin, angles ) +{ + if ( isdefined( stub ) ) + { + buildable = stub.buildablezone; + buildable.built = 0; + buildable.stub.built = 0; + buildable notify( "unbuilt" ); + level.buildables_built[buildable.buildable_name] = 0; + level notify( buildable.buildable_name + "_unbuilt" ); + + for ( i = 0; i < buildable.pieces.size; i++ ) + { + buildable.pieces[i].built = 0; + + if ( isdefined( buildable.pieces[i].part_name ) ) + { + buildable.stub.model notsolid(); + + if ( !( isdefined( buildable.pieces[i].built ) && buildable.pieces[i].built ) ) + buildable.stub.model hidepart( buildable.pieces[i].part_name ); + else + { + buildable.stub.model show(); + buildable.stub.model showpart( buildable.pieces[i].part_name ); + } + } + + if ( isdefined( return_pieces ) && return_pieces ) + { + if ( isdefined( buildable.stub.str_unbuild_notify ) ) + { + buildable.pieces[i] thread piece_spawn_at_with_notify_delay( origin, angles, buildable.stub.str_unbuild_notify, buildable.stub.unbuild_respawn_fn ); + continue; + } + + buildable.pieces[i] piece_spawn_at( origin, angles ); + } + } + + if ( isdefined( buildable.stub.model ) ) + buildable.stub.model hide(); + } +} + +player_explode_buildable( equipname, origin, speed, return_to_spawn, return_time ) +{ + self explosiondamage( 50, origin ); + stub = find_buildable_stub( equipname ); + + if ( isdefined( stub ) ) + { + buildable = stub.buildablezone; + buildable.built = 0; + buildable.stub.built = 0; + buildable notify( "unbuilt" ); + level.buildables_built[buildable.buildable_name] = 0; + level notify( buildable.buildable_name + "_unbuilt" ); + + for ( i = 0; i < buildable.pieces.size; i++ ) + { + buildable.pieces[i].built = 0; + + if ( isdefined( buildable.pieces[i].part_name ) ) + { + buildable.stub.model notsolid(); + + if ( !( isdefined( buildable.pieces[i].built ) && buildable.pieces[i].built ) ) + buildable.stub.model hidepart( buildable.pieces[i].part_name ); + else + { + buildable.stub.model show(); + buildable.stub.model showpart( buildable.pieces[i].part_name ); + } + } + + ang = randomfloat( 360 ); + h = 0.25 + randomfloat( 0.5 ); + dir = ( sin( ang ), cos( ang ), h ); + self thread player_throw_piece( buildable.pieces[i], origin, speed * dir, return_to_spawn, return_time ); + } + + buildable.stub.model hide(); + } +} + +think_buildables() +{ + foreach ( buildable in level.zombie_include_buildables ) + { + if ( isdefined( buildable.triggerthink ) ) + { + level [[ buildable.triggerthink ]](); + wait_network_frame(); + } + } + + level notify( "buildables_setup" ); +} + +buildable_trigger_think( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + return setup_unitrigger_buildable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); +} + +buildable_trigger_think_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + return setup_unitrigger_buildable_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); +} + +buildable_set_unbuild_notify_delay( str_equipname, str_unbuild_notify, unbuild_respawn_fn ) +{ + stub = find_buildable_stub( str_equipname ); + stub.str_unbuild_notify = str_unbuild_notify; + stub.unbuild_respawn_fn = unbuild_respawn_fn; +} + +setup_vehicle_unitrigger_buildable( parent, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + trig = getent( trigger_targetname, "targetname" ); + + if ( !isdefined( trig ) ) + return; + + unitrigger_stub = spawnstruct(); + unitrigger_stub.buildablestruct = level.zombie_include_buildables[equipname]; + unitrigger_stub.link_parent = parent; + unitrigger_stub.origin_parent = trig; + unitrigger_stub.trigger_targetname = trigger_targetname; + unitrigger_stub.originfunc = ::anystub_get_unitrigger_origin; + unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; + unitrigger_stub.origin = trig.origin; + unitrigger_stub.angles = trig.angles; + unitrigger_stub.equipname = equipname; + unitrigger_stub.weaponname = weaponname; + unitrigger_stub.trigger_hintstring = trigger_hintstring; + unitrigger_stub.delete_trigger = delete_trigger; + unitrigger_stub.built = 0; + unitrigger_stub.persistent = persistent; + unitrigger_stub.usetime = int( 3000 ); + unitrigger_stub.onbeginuse = ::onbeginuseuts; + unitrigger_stub.onenduse = ::onenduseuts; + unitrigger_stub.onuse = ::onuseplantobjectuts; + unitrigger_stub.oncantuse = ::oncantuseuts; + + if ( isdefined( trig.script_length ) ) + unitrigger_stub.script_length = trig.script_length; + else + unitrigger_stub.script_length = 24; + + if ( isdefined( trig.script_width ) ) + unitrigger_stub.script_width = trig.script_width; + else + unitrigger_stub.script_width = 64; + + if ( isdefined( trig.script_height ) ) + unitrigger_stub.script_height = trig.script_height; + else + unitrigger_stub.script_height = 24; + + if ( isdefined( trig.radius ) ) + unitrigger_stub.radius = trig.radius; + else + unitrigger_stub.radius = 64; + + unitrigger_stub.target = trig.target; + unitrigger_stub.targetname = trig.targetname + "_trigger"; + unitrigger_stub.script_noteworthy = trig.script_noteworthy; + unitrigger_stub.script_parameters = trig.script_parameters; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + + if ( isdefined( level.zombie_buildables[equipname].hint ) ) + unitrigger_stub.hint_string = level.zombie_buildables[equipname].hint; + + unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + unitrigger_stub.require_look_at = 1; + unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + unitrigger_stub.prompt_and_visibility_func = ::buildabletrigger_update_prompt; + maps\mp\zombies\_zm_unitrigger::register_unitrigger( unitrigger_stub, ::buildable_place_think ); + unitrigger_stub.piece_trigger = trig; + trig.trigger_stub = unitrigger_stub; + unitrigger_stub.buildablezone = unitrigger_stub buildable_piece_unitriggers( equipname, unitrigger_stub.origin ); + + if ( delete_trigger ) + trig delete(); + + level.buildable_stubs[level.buildable_stubs.size] = unitrigger_stub; + return unitrigger_stub; +} + +vehicle_buildable_trigger_think( vehicle, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + return setup_vehicle_unitrigger_buildable( vehicle, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); +} + +ai_buildable_trigger_think( parent, equipname, weaponname, trigger_hintstring, persistent ) +{ + unitrigger_stub = spawnstruct(); + unitrigger_stub.buildablestruct = level.zombie_include_buildables[equipname]; + unitrigger_stub.link_parent = parent; + unitrigger_stub.origin_parent = parent; + unitrigger_stub.originfunc = ::anystub_get_unitrigger_origin; + unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; + unitrigger_stub.origin = parent.origin; + unitrigger_stub.angles = parent.angles; + unitrigger_stub.equipname = equipname; + unitrigger_stub.weaponname = weaponname; + unitrigger_stub.trigger_hintstring = trigger_hintstring; + unitrigger_stub.delete_trigger = 1; + unitrigger_stub.built = 0; + unitrigger_stub.persistent = persistent; + unitrigger_stub.usetime = int( 3000 ); + unitrigger_stub.onbeginuse = ::onbeginuseuts; + unitrigger_stub.onenduse = ::onenduseuts; + unitrigger_stub.onuse = ::onuseplantobjectuts; + unitrigger_stub.oncantuse = ::oncantuseuts; + unitrigger_stub.script_length = 64; + unitrigger_stub.script_width = 64; + unitrigger_stub.script_height = 54; + unitrigger_stub.radius = 64; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + + if ( isdefined( level.zombie_buildables[equipname].hint ) ) + unitrigger_stub.hint_string = level.zombie_buildables[equipname].hint; + + unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + unitrigger_stub.require_look_at = 0; + unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + unitrigger_stub.prompt_and_visibility_func = ::buildabletrigger_update_prompt; + maps\mp\zombies\_zm_unitrigger::register_unitrigger( unitrigger_stub, ::buildable_place_think ); + unitrigger_stub.buildablezone = unitrigger_stub buildable_piece_unitriggers( equipname, unitrigger_stub.origin ); + level.buildable_stubs[level.buildable_stubs.size] = unitrigger_stub; + return unitrigger_stub; +} + +onpickuputs( player ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Buildable piece recovered by - " + player.name ); +#/ +} + +ondroputs( player ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Buildable piece dropped by - " + player.name ); +#/ + player notify( "event_ended" ); +} + +onbeginuseuts( player ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Buildable piece begin use by - " + player.name ); +#/ + if ( isdefined( self.buildablestruct.onbeginuse ) ) + self [[ self.buildablestruct.onbeginuse ]]( player ); + + if ( isdefined( player ) && !isdefined( player.buildableaudio ) ) + { + alias = sndbuildableusealias( self.targetname ); + player.buildableaudio = spawn( "script_origin", player.origin ); + player.buildableaudio playloopsound( alias ); + } +} + +sndbuildableusealias( name ) +{ + alias = undefined; + + switch ( name ) + { + case "cell_door_trigger": + alias = "zmb_jail_buildable"; + break; + case "generator_use_trigger": + alias = "zmb_generator_buildable"; + break; + case "chalk_buildable_trigger": + alias = "zmb_chalk_loop"; + break; + default: + alias = "zmb_buildable_loop"; + break; + } + + return alias; +} + +onenduseuts( team, player, result ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Buildable piece end use by - " + player.name ); +#/ + if ( !isdefined( player ) ) + return; + + if ( isdefined( player.buildableaudio ) ) + { + player.buildableaudio delete(); + player.buildableaudio = undefined; + } + + if ( isdefined( self.buildablestruct.onenduse ) ) + self [[ self.buildablestruct.onenduse ]]( team, player, result ); + + player notify( "event_ended" ); +} + +oncantuseuts( player ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Buildable piece can't use by - " + player.name ); +#/ + if ( isdefined( self.buildablestruct.oncantuse ) ) + self [[ self.buildablestruct.oncantuse ]]( player ); +} + +onuseplantobjectuts( player ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Buildable piece crafted by - " + player.name ); +#/ + if ( isdefined( self.buildablestruct.onuseplantobject ) ) + self [[ self.buildablestruct.onuseplantobject ]]( player ); + + player notify( "bomb_planted" ); +} + +add_zombie_buildable_vox_category( buildable_name, vox_id ) +{ + buildable_struct = level.zombie_include_buildables[buildable_name]; + buildable_struct.vox_id = vox_id; +} + +add_zombie_buildable_piece_vox_category( buildable_name, vox_id, timer ) +{ + buildable_struct = level.zombie_include_buildables[buildable_name]; + buildable_struct.piece_vox_id = vox_id; + buildable_struct.piece_vox_timer = timer; +} + +is_buildable() +{ + if ( !isdefined( level.zombie_buildables ) ) + return false; + + if ( isdefined( self.zombie_weapon_upgrade ) && isdefined( level.zombie_buildables[self.zombie_weapon_upgrade] ) ) + return true; + + if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "specialty_weapupgrade" ) + { + if ( isdefined( level.buildables_built["pap"] ) && level.buildables_built["pap"] ) + return false; + + return true; + } + + return false; +} + +buildable_crafted() +{ + self.pieces--; +} + +buildable_complete() +{ + if ( self.pieces <= 0 ) + return true; + + return false; +} + +get_buildable_hint( buildable_name ) +{ + assert( isdefined( level.zombie_buildables[buildable_name] ), buildable_name + " was not included or is not part of the zombie weapon list." ); + return level.zombie_buildables[buildable_name].hint; +} + +delete_on_disconnect( buildable, self_notify, skip_delete ) +{ + buildable endon( "death" ); + + self waittill( "disconnect" ); + + if ( isdefined( self_notify ) ) + self notify( self_notify ); + + if ( !( isdefined( skip_delete ) && skip_delete ) ) + { + if ( isdefined( buildable.stub ) ) + { + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( buildable.stub ); + buildable.stub = undefined; + } + + if ( isdefined( buildable ) ) + buildable delete(); + } +} + +get_buildable_pickup( buildablename, modelname ) +{ + foreach ( buildablepickup in level.buildablepickups ) + { + if ( buildablepickup[0].buildablestruct.name == buildablename && buildablepickup[0].visuals[0].model == modelname ) + return buildablepickup[0]; + } + + return undefined; +} + +track_buildable_piece_pickedup( piece ) +{ + if ( !isdefined( piece ) || !isdefined( piece.buildablename ) ) + { +/# + println( "STAT TRACKING FAILURE: NOT DEFINED IN track_buildable_piece_pickedup() \\n" ); +#/ + return; + } + + self add_map_buildable_stat( piece.buildablename, "pieces_pickedup", 1 ); + buildable_struct = level.zombie_include_buildables[piece.buildablename]; + + if ( isdefined( buildable_struct.piece_vox_id ) ) + { + if ( isdefined( self.a_buildable_piece_pickedup_vox_cooldown ) && isinarray( self.a_buildable_piece_pickedup_vox_cooldown, buildable_struct.piece_vox_id ) ) + return; + + self thread do_player_general_vox( "general", buildable_struct.piece_vox_id + "_pickup" ); + + if ( isdefined( buildable_struct.piece_vox_timer ) ) + self thread buildable_piece_pickedup_vox_cooldown( buildable_struct.piece_vox_id, buildable_struct.piece_vox_timer ); + } + else + self thread do_player_general_vox( "general", "build_pickup" ); +} + +buildable_piece_pickedup_vox_cooldown( piece_vox_id, timer ) +{ + self endon( "disconnect" ); + + if ( !isdefined( self.a_buildable_piece_pickedup_vox_cooldown ) ) + self.a_buildable_piece_pickedup_vox_cooldown = []; + + self.a_buildable_piece_pickedup_vox_cooldown[self.a_buildable_piece_pickedup_vox_cooldown.size] = piece_vox_id; + wait( timer ); + arrayremovevalue( self.a_buildable_piece_pickedup_vox_cooldown, piece_vox_id ); +} + +track_buildable_pieces_built( buildable ) +{ + if ( !isdefined( buildable ) || !isdefined( buildable.buildable_name ) ) + { +/# + println( "STAT TRACKING FAILURE: NOT DEFINED IN track_buildable_pieces_built() \\n" ); +#/ + return; + } + + bname = buildable.buildable_name; + + if ( isdefined( buildable.stat_name ) ) + bname = buildable.stat_name; + + self add_map_buildable_stat( bname, "pieces_built", 1 ); + + if ( !buildable buildable_all_built() ) + { + if ( isdefined( level.zombie_include_buildables[buildable.buildable_name] ) && isdefined( level.zombie_include_buildables[buildable.buildable_name].snd_build_add_vo_override ) ) + self thread [[ level.zombie_include_buildables[buildable.buildable_name].snd_build_add_vo_override ]](); + else + self thread do_player_general_vox( "general", "build_add" ); + } +} + +track_buildables_built( buildable ) +{ + if ( !isdefined( buildable ) || !isdefined( buildable.buildable_name ) ) + { +/# + println( "STAT TRACKING FAILURE: NOT DEFINED IN track_buildables_built() \\n" ); +#/ + return; + } + + bname = buildable.buildable_name; + + if ( isdefined( buildable.stat_name ) ) + bname = buildable.stat_name; + + self add_map_buildable_stat( bname, "buildable_built", 1 ); + self maps\mp\zombies\_zm_stats::increment_client_stat( "buildables_built", 0 ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "buildables_built" ); + + if ( isdefined( buildable.stub.buildablestruct.vox_id ) ) + self thread do_player_general_vox( "general", "build_" + buildable.stub.buildablestruct.vox_id + "_final" ); +} + +track_buildables_pickedup( buildable ) +{ + if ( !isdefined( buildable ) ) + { +/# + println( "STAT TRACKING FAILURE: NOT DEFINED IN track_buildables_pickedup() \\n" ); +#/ + return; + } + + stat_name = get_buildable_stat_name( buildable ); + + if ( !isdefined( stat_name ) ) + { +/# + println( "STAT TRACKING FAILURE: NO STAT NAME FOR " + buildable + "\\n" ); +#/ + return; + } + + self add_map_buildable_stat( stat_name, "buildable_pickedup", 1 ); + self say_pickup_buildable_vo( buildable, 0 ); +} + +track_buildables_planted( equipment ) +{ + if ( !isdefined( equipment ) ) + { +/# + println( "STAT TRACKING FAILURE: NOT DEFINED for track_buildables_planted() \\n" ); +#/ + return; + } + + buildable_name = undefined; + + if ( isdefined( equipment.name ) ) + buildable_name = get_buildable_stat_name( equipment.name ); + + if ( !isdefined( buildable_name ) ) + { +/# + println( "STAT TRACKING FAILURE: NO BUILDABLE NAME FOR track_buildables_planted() " + equipment.name + "\\n" ); +#/ + return; + } + + maps\mp\_demo::bookmark( "zm_player_buildable_placed", gettime(), self ); + self add_map_buildable_stat( buildable_name, "buildable_placed", 1 ); + vo_name = "build_plc_" + buildable_name; + + if ( buildable_name == "electric_trap" ) + vo_name = "build_plc_trap"; + + if ( !( isdefined( self.buildable_timer ) && self.buildable_timer ) ) + { + self thread do_player_general_vox( "general", vo_name ); + self thread placed_buildable_vo_timer(); + } +} + +placed_buildable_vo_timer() +{ + self endon( "disconnect" ); + self.buildable_timer = 1; + wait 60; + self.buildable_timer = 0; +} + +buildable_pickedup_timer() +{ + self endon( "disconnect" ); + self.buildable_pickedup_timer = 1; + wait 60; + self.buildable_pickedup_timer = 0; +} + +track_planted_buildables_pickedup( equipment ) +{ + if ( !isdefined( equipment ) ) + return; + + if ( equipment == "equip_turbine_zm" || equipment == "equip_turret_zm" || equipment == "equip_electrictrap_zm" || equipment == "riotshield_zm" ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "planted_buildables_pickedup", 0 ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "planted_buildables_pickedup" ); + } + + if ( !( isdefined( self.buildable_pickedup_timer ) && self.buildable_pickedup_timer ) ) + { + self say_pickup_buildable_vo( equipment, 1 ); + self thread buildable_pickedup_timer(); + } +} + +track_placed_buildables( buildable_name ) +{ + if ( !isdefined( buildable_name ) ) + return; + + self add_map_buildable_stat( buildable_name, "buildable_placed", 1 ); + vo_name = undefined; + + if ( buildable_name == level.riotshield_name ) + vo_name = "build_plc_shield"; + + if ( !isdefined( vo_name ) ) + return; + + self thread do_player_general_vox( "general", vo_name ); +} + +add_map_buildable_stat( piece_name, stat_name, value ) +{ + if ( !isdefined( piece_name ) || piece_name == "sq_common" || piece_name == "keys_zm" || piece_name == "oillamp_zm" ) + return; + + if ( isdefined( level.zm_disable_recording_stats ) && level.zm_disable_recording_stats || isdefined( level.zm_disable_recording_buildable_stats ) && level.zm_disable_recording_buildable_stats ) + return; + + self adddstat( "buildables", piece_name, stat_name, value ); +} + +say_pickup_buildable_vo( buildable_name, world ) +{ + if ( isdefined( self.buildable_pickedup_timer ) && self.buildable_pickedup_timer ) + return; + + name = get_buildable_vo_name( buildable_name ); + + if ( !isdefined( name ) ) + return; + + vo_name = "build_pck_b" + name; + + if ( isdefined( world ) && world ) + vo_name = "build_pck_w" + name; + + if ( !isdefined( level.transit_buildable_vo_override ) || !self [[ level.transit_buildable_vo_override ]]( name, world ) ) + { + self thread do_player_general_vox( "general", vo_name ); + self thread buildable_pickedup_timer(); + } +} + +get_buildable_vo_name( buildable_name ) +{ + switch ( buildable_name ) + { + case "equip_turbine_zm": + return "turbine"; + case "equip_turret_zm": + return "turret"; + case "equip_electrictrap_zm": + return "trap"; + case "riotshield_zm": + return "shield"; + case "jetgun_zm": + return "jetgun"; + case "equip_springpad_zm": + return "springpad_zm"; + case "equip_slipgun_zm": + return "slipgun_zm"; + case "equip_headchopper_zm": + return "headchopper_zm"; + case "equip_subwoofer_zm": + return "subwoofer_zm"; + } + + return undefined; +} + +get_buildable_stat_name( buildable ) +{ + if ( isdefined( buildable ) ) + { + switch ( buildable ) + { + case "equip_turbine_zm": + return "turbine"; + case "equip_turret_zm": + return "turret"; + case "equip_electrictrap_zm": + return "electric_trap"; + case "equip_springpad_zm": + return "springpad_zm"; + case "equip_slipgun_zm": + return "slipgun_zm"; + case "equip_headchopper_zm": + return "headchopper_zm"; + case "equip_subwoofer_zm": + return "subwoofer_zm"; + } + + return undefined; + } +} diff --git a/ZM/Core/maps/mp/zombies/_zm_chugabud.gsc b/ZM/Core/maps/mp/zombies/_zm_chugabud.gsc new file mode 100644 index 0000000..0063578 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_chugabud.gsc @@ -0,0 +1,791 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_chugabud; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_clone; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_weap_cymbal_monkey; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm; +#include maps\mp\_visionset_mgr; + +init() +{ + level.chugabud_laststand_func = ::chugabud_laststand; + level thread chugabud_hostmigration(); + level._effect["chugabud_revive_fx"] = loadfx( "weapon/quantum_bomb/fx_player_position_effect" ); + level._effect["chugabud_bleedout_fx"] = loadfx( "weapon/quantum_bomb/fx_player_position_effect" ); + add_custom_limited_weapon_check( ::is_weapon_available_in_chugabud_corpse ); +} + +chugabug_precache() +{ + +} + +chugabud_player_init() +{ + +} + +chugabud_laststand() +{ + self endon( "player_suicide" ); + self endon( "disconnect" ); + self endon( "chugabud_bleedout" ); + self maps\mp\zombies\_zm_laststand::increment_downed_stat(); + self.ignore_insta_kill = 1; + self.health = self.maxhealth; + self maps\mp\zombies\_zm_chugabud::chugabud_save_loadout(); + self maps\mp\zombies\_zm_chugabud::chugabud_fake_death(); + wait 3; + + if ( isdefined( self.insta_killed ) && self.insta_killed || isdefined( self.disable_chugabud_corpse ) ) + create_corpse = 0; + else + create_corpse = 1; + + if ( create_corpse == 1 ) + { + if ( isdefined( level._chugabug_reject_corpse_override_func ) ) + { + reject_corpse = self [[ level._chugabug_reject_corpse_override_func ]]( self.origin ); + + if ( reject_corpse ) + create_corpse = 0; + } + } + + if ( create_corpse == 1 ) + { + self thread activate_chugabud_effects_and_audio(); + corpse = self chugabud_spawn_corpse(); + corpse thread chugabud_corpse_revive_icon( self ); + self.e_chugabud_corpse = corpse; + corpse thread chugabud_corpse_cleanup_on_spectator( self ); + + if ( isdefined( level.whos_who_client_setup ) ) + corpse setclientfield( "clientfield_whos_who_clone_glow_shader", 1 ); + } + + self chugabud_fake_revive(); + wait 0.1; + self.ignore_insta_kill = undefined; + self.disable_chugabud_corpse = undefined; + + if ( create_corpse == 0 ) + { + self notify( "chugabud_effects_cleanup" ); + return; + } + + bleedout_time = getdvarfloat( "player_lastStandBleedoutTime" ); + self thread chugabud_bleed_timeout( bleedout_time, corpse ); + self thread chugabud_handle_multiple_instances( corpse ); + + corpse waittill( "player_revived", e_reviver ); + + if ( isdefined( e_reviver ) && e_reviver == self ) + self notify( "whos_who_self_revive" ); + + self perk_abort_drinking( 0.1 ); + self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); + self setorigin( corpse.origin ); + self setplayerangles( corpse.angles ); + + if ( self player_is_in_laststand() ) + { + self thread chugabud_laststand_cleanup( corpse, "player_revived" ); + self enableweaponcycling(); + self enableoffhandweapons(); + self auto_revive( self, 1 ); + return; + } + + self chugabud_laststand_cleanup( corpse, undefined ); +} + +chugabud_laststand_cleanup( corpse, str_notify ) +{ + if ( isdefined( str_notify ) ) + self waittill( str_notify ); + + self chugabud_give_loadout(); + self chugabud_corpse_cleanup( corpse, 1 ); +} + +chugabud_bleed_timeout( delay, corpse ) +{ + self endon( "player_suicide" ); + self endon( "disconnect" ); + corpse endon( "death" ); + wait( delay ); + + if ( isdefined( corpse.revivetrigger ) ) + { + while ( corpse.revivetrigger.beingrevived ) + wait 0.01; + } + + if ( isdefined( self.loadout.perks ) && flag( "solo_game" ) ) + { + for ( i = 0; i < self.loadout.perks.size; i++ ) + { + perk = self.loadout.perks[i]; + + if ( perk == "specialty_quickrevive" ) + { + arrayremovevalue( self.loadout.perks, self.loadout.perks[i] ); + corpse notify( "player_revived", self ); + return; + } + } + } + + self chugabud_corpse_cleanup( corpse, 0 ); +} + +chugabud_corpse_cleanup( corpse, was_revived ) +{ + self notify( "chugabud_effects_cleanup" ); + + if ( was_revived ) + { + playsoundatposition( "evt_ww_appear", corpse.origin ); + playfx( level._effect["chugabud_revive_fx"], corpse.origin ); + } + else + { + playsoundatposition( "evt_ww_disappear", corpse.origin ); + playfx( level._effect["chugabud_bleedout_fx"], corpse.origin ); + self notify( "chugabud_bleedout" ); + } + + if ( isdefined( corpse.revivetrigger ) ) + { + corpse notify( "stop_revive_trigger" ); + corpse.revivetrigger delete(); + corpse.revivetrigger = undefined; + } + + if ( isdefined( corpse.revive_hud_elem ) ) + { + corpse.revive_hud_elem destroy(); + corpse.revive_hud_elem = undefined; + } + + self.loadout = undefined; + wait 0.1; + corpse delete(); + self.e_chugabud_corpse = undefined; +} + +chugabud_handle_multiple_instances( corpse ) +{ + corpse endon( "death" ); + + self waittill( "perk_chugabud_activated" ); + + self chugabud_corpse_cleanup( corpse, 0 ); +} + +chugabud_spawn_corpse() +{ + corpse = maps\mp\zombies\_zm_clone::spawn_player_clone( self, self.origin, undefined, self.whos_who_shader ); + corpse.angles = self.angles; + corpse maps\mp\zombies\_zm_clone::clone_give_weapon( "m1911_zm" ); + corpse maps\mp\zombies\_zm_clone::clone_animate( "laststand" ); + corpse.revive_hud = self chugabud_revive_hud_create(); + corpse thread maps\mp\zombies\_zm_laststand::revive_trigger_spawn(); + return corpse; +} + +chugabud_revive_hud_create() +{ + self.revive_hud = newclienthudelem( self ); + self.revive_hud.alignx = "center"; + self.revive_hud.aligny = "middle"; + self.revive_hud.horzalign = "center"; + self.revive_hud.vertalign = "bottom"; + self.revive_hud.y = -50; + self.revive_hud.foreground = 1; + self.revive_hud.font = "default"; + self.revive_hud.fontscale = 1.5; + self.revive_hud.alpha = 0; + self.revive_hud.color = ( 1, 1, 1 ); + self.revive_hud settext( "" ); + return self.revive_hud; +} + +chugabud_save_loadout() +{ + primaries = self getweaponslistprimaries(); + currentweapon = self getcurrentweapon(); + self.loadout = spawnstruct(); + self.loadout.player = self; + self.loadout.weapons = []; + self.loadout.score = self.score; + self.loadout.current_weapon = -1; + + foreach ( index, weapon in primaries ) + { + self.loadout.weapons[index] = maps\mp\zombies\_zm_weapons::get_player_weapondata( self, weapon ); + + if ( weapon == currentweapon || self.loadout.weapons[index]["alt_name"] == currentweapon ) + self.loadout.current_weapon = index; + } + + self.loadout.equipment = self get_player_equipment(); + + if ( isdefined( self.loadout.equipment ) ) + self equipment_take( self.loadout.equipment ); + + self.loadout save_weapons_for_chugabud( self ); + + if ( self hasweapon( "claymore_zm" ) ) + { + self.loadout.hasclaymore = 1; + self.loadout.claymoreclip = self getweaponammoclip( "claymore_zm" ); + } + + self.loadout.perks = chugabud_save_perks( self ); + self chugabud_save_grenades(); + + if ( maps\mp\zombies\_zm_weap_cymbal_monkey::cymbal_monkey_exists() ) + self.loadout.zombie_cymbal_monkey_count = self getweaponammoclip( "cymbal_monkey_zm" ); +} + +chugabud_save_grenades() +{ + if ( self hasweapon( "emp_grenade_zm" ) ) + { + self.loadout.hasemp = 1; + self.loadout.empclip = self getweaponammoclip( "emp_grenade_zm" ); + } + + lethal_grenade = self get_player_lethal_grenade(); + + if ( self hasweapon( lethal_grenade ) ) + { + self.loadout.lethal_grenade = lethal_grenade; + self.loadout.lethal_grenade_count = self getweaponammoclip( lethal_grenade ); + } + else + self.loadout.lethal_grenade = undefined; +} + +chugabud_give_loadout() +{ + self takeallweapons(); + loadout = self.loadout; + primaries = self getweaponslistprimaries(); + + if ( loadout.weapons.size > 1 || primaries.size > 1 ) + { + foreach ( weapon in primaries ) + self takeweapon( weapon ); + } + + for ( i = 0; i < loadout.weapons.size; i++ ) + { + if ( !isdefined( loadout.weapons[i] ) ) + continue; + + if ( loadout.weapons[i]["name"] == "none" ) + continue; + + self maps\mp\zombies\_zm_weapons::weapondata_give( loadout.weapons[i] ); + } + + if ( loadout.current_weapon >= 0 && isdefined( loadout.weapons[loadout.current_weapon]["name"] ) ) + self switchtoweapon( loadout.weapons[loadout.current_weapon]["name"] ); + + self giveweapon( "knife_zm" ); + self maps\mp\zombies\_zm_equipment::equipment_give( self.loadout.equipment ); + loadout restore_weapons_for_chugabud( self ); + self chugabud_restore_claymore(); + self.score = loadout.score; + self.pers["score"] = loadout.score; + perk_array = maps\mp\zombies\_zm_perks::get_perk_array( 1 ); + + for ( i = 0; i < perk_array.size; i++ ) + { + perk = perk_array[i]; + self unsetperk( perk ); + self.num_perks--; + self set_perk_clientfield( perk, 0 ); + } + + if ( isdefined( loadout.perks ) && loadout.perks.size > 0 ) + { + for ( i = 0; i < loadout.perks.size; i++ ) + { + if ( self hasperk( loadout.perks[i] ) ) + continue; + + if ( loadout.perks[i] == "specialty_quickrevive" && flag( "solo_game" ) ) + level.solo_game_free_player_quickrevive = 1; + + if ( loadout.perks[i] == "specialty_finalstand" ) + continue; + + maps\mp\zombies\_zm_perks::give_perk( loadout.perks[i] ); + } + } + + self chugabud_restore_grenades(); + + if ( maps\mp\zombies\_zm_weap_cymbal_monkey::cymbal_monkey_exists() ) + { + if ( loadout.zombie_cymbal_monkey_count ) + { + self maps\mp\zombies\_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); + self setweaponammoclip( "cymbal_monkey_zm", loadout.zombie_cymbal_monkey_count ); + } + } +} + +chugabud_restore_grenades() +{ + if ( isdefined( self.loadout.hasemp ) && self.loadout.hasemp ) + { + self giveweapon( "emp_grenade_zm" ); + self setweaponammoclip( "emp_grenade_zm", self.loadout.empclip ); + } + + if ( isdefined( self.loadout.lethal_grenade ) ) + { + self giveweapon( self.loadout.lethal_grenade ); + self setweaponammoclip( self.loadout.lethal_grenade, self.loadout.lethal_grenade_count ); + } +} + +chugabud_restore_claymore() +{ + if ( isdefined( self.loadout.hasclaymore ) && self.loadout.hasclaymore && !self hasweapon( "claymore_zm" ) ) + { + self giveweapon( "claymore_zm" ); + self set_player_placeable_mine( "claymore_zm" ); + self setactionslot( 4, "weapon", "claymore_zm" ); + self setweaponammoclip( "claymore_zm", self.loadout.claymoreclip ); + } +} + +chugabud_fake_death() +{ + level notify( "fake_death" ); + self notify( "fake_death" ); + self takeallweapons(); + self allowstand( 0 ); + self allowcrouch( 0 ); + self allowprone( 1 ); + self.ignoreme = 1; + self enableinvulnerability(); + wait 0.1; + self freezecontrols( 1 ); + wait 0.9; +} + +chugabud_fake_revive() +{ + level notify( "fake_revive" ); + self notify( "fake_revive" ); + playsoundatposition( "evt_ww_disappear", self.origin ); + playfx( level._effect["chugabud_revive_fx"], self.origin ); + spawnpoint = chugabud_get_spawnpoint(); + + if ( isdefined( level._chugabud_post_respawn_override_func ) ) + self [[ level._chugabud_post_respawn_override_func ]]( spawnpoint.origin ); + + if ( isdefined( level.chugabud_force_corpse_position ) ) + { + if ( isdefined( self.e_chugabud_corpse ) ) + self.e_chugabud_corpse forceteleport( level.chugabud_force_corpse_position ); + + level.chugabud_force_corpse_position = undefined; + } + + if ( isdefined( level.chugabud_force_player_position ) ) + { + spawnpoint.origin = level.chugabud_force_player_position; + level.chugabud_force_player_position = undefined; + } + + self setorigin( spawnpoint.origin ); + self setplayerangles( spawnpoint.angles ); + playsoundatposition( "evt_ww_appear", spawnpoint.origin ); + playfx( level._effect["chugabud_revive_fx"], spawnpoint.origin ); + self allowstand( 1 ); + self allowcrouch( 1 ); + self allowprone( 1 ); + self.ignoreme = 0; + self setstance( "stand" ); + self freezecontrols( 0 ); + self giveweapon( "knife_zm" ); + self give_start_weapon( 1 ); + self.score = self.loadout.score; + self.pers["score"] = self.loadout.score; + self giveweapon( "frag_grenade_zm" ); + self setweaponammoclip( "frag_grenade_zm", 2 ); + self chugabud_restore_claymore(); + wait 1; + self disableinvulnerability(); +} + +chugabud_get_spawnpoint() +{ + spawnpoint = undefined; + + if ( get_chugabug_spawn_point_from_nodes( self.origin, 500, 700, 64, 1 ) ) + spawnpoint = level.chugabud_spawn_struct; + + if ( !isdefined( spawnpoint ) ) + { + if ( get_chugabug_spawn_point_from_nodes( self.origin, 100, 400, 64, 1 ) ) + spawnpoint = level.chugabud_spawn_struct; + } + + if ( !isdefined( spawnpoint ) ) + { + if ( get_chugabug_spawn_point_from_nodes( self.origin, 50, 400, 256, 0 ) ) + spawnpoint = level.chugabud_spawn_struct; + } + + if ( !isdefined( spawnpoint ) ) + spawnpoint = maps\mp\zombies\_zm::check_for_valid_spawn_near_team( self, 1 ); + + if ( !isdefined( spawnpoint ) ) + { + match_string = ""; + location = level.scr_zm_map_start_location; + + if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) ) + location = level.default_start_location; + + match_string = level.scr_zm_ui_gametype + "_" + location; + spawnpoints = []; + structs = getstructarray( "initial_spawn", "script_noteworthy" ); + + if ( isdefined( structs ) ) + { + foreach ( struct in structs ) + { + if ( isdefined( struct.script_string ) ) + { + tokens = strtok( struct.script_string, " " ); + + foreach ( token in tokens ) + { + if ( token == match_string ) + spawnpoints[spawnpoints.size] = struct; + } + } + } + } + + if ( !isdefined( spawnpoints ) || spawnpoints.size == 0 ) + spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); + + assert( isdefined( spawnpoints ), "Could not find initial spawn points!" ); + spawnpoint = maps\mp\zombies\_zm::getfreespawnpoint( spawnpoints, self ); + } + + return spawnpoint; +} + +get_chugabug_spawn_point_from_nodes( v_origin, min_radius, max_radius, max_height, ignore_targetted_nodes ) +{ + if ( !isdefined( level.chugabud_spawn_struct ) ) + level.chugabud_spawn_struct = spawnstruct(); + + found_node = undefined; + a_nodes = getnodesinradiussorted( v_origin, max_radius, min_radius, max_height, "pathnodes" ); + + if ( isdefined( a_nodes ) && a_nodes.size > 0 ) + { + a_player_volumes = getentarray( "player_volume", "script_noteworthy" ); + index = a_nodes.size - 1; + + for ( i = index; i >= 0; i-- ) + { + n_node = a_nodes[i]; + + if ( ignore_targetted_nodes == 1 ) + { + if ( isdefined( n_node.target ) ) + continue; + } + + if ( !positionwouldtelefrag( n_node.origin ) ) + { + if ( maps\mp\zombies\_zm_utility::check_point_in_enabled_zone( n_node.origin, 1, a_player_volumes ) ) + { + v_start = ( n_node.origin[0], n_node.origin[1], n_node.origin[2] + 30 ); + v_end = ( n_node.origin[0], n_node.origin[1], n_node.origin[2] - 30 ); + trace = bullettrace( v_start, v_end, 0, undefined ); + + if ( trace["fraction"] < 1 ) + { + override_abort = 0; + + if ( isdefined( level._chugabud_reject_node_override_func ) ) + override_abort = [[ level._chugabud_reject_node_override_func ]]( v_origin, n_node ); + + if ( !override_abort ) + { + found_node = n_node; + break; + } + } + } + } + } + } + + if ( isdefined( found_node ) ) + { + level.chugabud_spawn_struct.origin = found_node.origin; + v_dir = vectornormalize( v_origin - level.chugabud_spawn_struct.origin ); + level.chugabud_spawn_struct.angles = vectortoangles( v_dir ); + return true; + } + + return false; +} + +force_corpse_respawn_position( forced_corpse_position ) +{ + level.chugabud_force_corpse_position = forced_corpse_position; +} + +force_player_respawn_position( forced_player_position ) +{ + level.chugabud_force_player_position = forced_player_position; +} + +save_weapons_for_chugabud( player ) +{ + self.chugabud_melee_weapons = []; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + self save_weapon_for_chugabud( player, level._melee_weapons[i].weapon_name ); +} + +save_weapon_for_chugabud( player, weapon_name ) +{ + if ( player hasweapon( weapon_name ) ) + self.chugabud_melee_weapons[weapon_name] = 1; +} + +restore_weapons_for_chugabud( player ) +{ + for ( i = 0; i < level._melee_weapons.size; i++ ) + self restore_weapon_for_chugabud( player, level._melee_weapons[i].weapon_name ); + + self.chugabud_melee_weapons = undefined; +} + +restore_weapon_for_chugabud( player, weapon_name ) +{ + if ( !isdefined( weapon_name ) || !isdefined( self.chugabud_melee_weapons ) || !isdefined( self.chugabud_melee_weapons[weapon_name] ) ) + return; + + if ( isdefined( self.chugabud_melee_weapons[weapon_name] ) && self.chugabud_melee_weapons[weapon_name] ) + { + player giveweapon( weapon_name ); + player set_player_melee_weapon( weapon_name ); + self.chugabud_melee_weapons[weapon_name] = 0; + } +} + +chugabud_save_perks( ent ) +{ + perk_array = ent get_perk_array( 1 ); + + foreach ( perk in perk_array ) + ent unsetperk( perk ); + + return perk_array; +} + +playchugabudtimeraudio() +{ + self endon( "chugabud_grabbed" ); + self endon( "chugabud_timedout" ); + player = self.player; + self thread playchugabudtimerout( player ); + + while ( true ) + { + player playsoundtoplayer( "zmb_chugabud_timer_count", player ); + wait 1; + } +} + +playchugabudtimerout( player ) +{ + self endon( "chugabud_grabbed" ); + + self waittill( "chugabud_timedout" ); + + player playsoundtoplayer( "zmb_chugabud_timer_out", player ); +} + +chugabud_hostmigration() +{ + level endon( "end_game" ); + level notify( "chugabud_hostmigration" ); + level endon( "chugabud_hostmigration" ); + + while ( true ) + { + level waittill( "host_migration_end" ); + + chugabuds = getentarray( "player_chugabud_model", "script_noteworthy" ); + + foreach ( model in chugabuds ) + playfxontag( level._effect["powerup_on"], model, "tag_origin" ); + } +} + +player_revived_cleanup_chugabud_corpse() +{ + +} + +player_has_chugabud_corpse() +{ + if ( isdefined( self.e_chugabud_corpse ) ) + return true; + + return false; +} + +is_weapon_available_in_chugabud_corpse( weapon, player_to_check ) +{ + count = 0; + upgradedweapon = weapon; + + if ( isdefined( level.zombie_weapons[weapon] ) && isdefined( level.zombie_weapons[weapon].upgrade_name ) ) + upgradedweapon = level.zombie_weapons[weapon].upgrade_name; + + players = getplayers(); + + if ( isdefined( players ) ) + { + for ( player_index = 0; player_index < players.size; player_index++ ) + { + player = players[player_index]; + + if ( isdefined( player_to_check ) && player != player_to_check ) + continue; + + if ( player player_has_chugabud_corpse() ) + { + if ( isdefined( player.loadout ) && isdefined( player.loadout.weapons ) ) + { + for ( i = 0; i < player.loadout.weapons.size; i++ ) + { + chugabud_weapon = player.loadout.weapons[i]; + + if ( isdefined( chugabud_weapon ) && ( chugabud_weapon["name"] == weapon || chugabud_weapon["name"] == upgradedweapon ) ) + count++; + } + } + } + } + } + + return count; +} + +chugabud_corpse_cleanup_on_spectator( player ) +{ + self endon( "death" ); + player endon( "disconnect" ); + + while ( true ) + { + if ( player.sessionstate == "spectator" ) + break; + + wait 0.01; + } + + player chugabud_corpse_cleanup( self, 0 ); +} + +chugabud_corpse_revive_icon( player ) +{ + self endon( "death" ); + height_offset = 30; + index = player.clientid; + hud_elem = newhudelem(); + self.revive_hud_elem = hud_elem; + hud_elem.x = self.origin[0]; + hud_elem.y = self.origin[1]; + hud_elem.z = self.origin[2] + height_offset; + hud_elem.alpha = 1; + hud_elem.archived = 1; + hud_elem setshader( "waypoint_revive", 5, 5 ); + hud_elem setwaypoint( 1 ); + hud_elem.hidewheninmenu = 1; + hud_elem.immunetodemogamehudsettings = 1; + + while ( true ) + { + if ( !isdefined( self.revive_hud_elem ) ) + break; + + hud_elem.x = self.origin[0]; + hud_elem.y = self.origin[1]; + hud_elem.z = self.origin[2] + height_offset; + wait 0.01; + } +} + +activate_chugabud_effects_and_audio() +{ + if ( isdefined( level.whos_who_client_setup ) ) + { + if ( !isdefined( self.whos_who_effects_active ) ) + { + if ( isdefined( level.chugabud_shellshock ) ) + self shellshock( "whoswho", 60 ); + + if ( isdefined( level.vsmgr_prio_visionset_zm_whos_who ) ) + maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_whos_who", self ); + + self setclientfieldtoplayer( "clientfield_whos_who_audio", 1 ); + self setclientfieldtoplayer( "clientfield_whos_who_filter", 1 ); + self.whos_who_effects_active = 1; + self thread deactivate_chugabud_effects_and_audio(); + } + } +} + +deactivate_chugabud_effects_and_audio() +{ + self waittill_any( "death", "chugabud_effects_cleanup" ); + + if ( isdefined( level.whos_who_client_setup ) ) + { + if ( isdefined( self.whos_who_effects_active ) && self.whos_who_effects_active == 1 ) + { + if ( isdefined( level.chugabud_shellshock ) ) + self stopshellshock(); + + if ( isdefined( level.vsmgr_prio_visionset_zm_whos_who ) ) + maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_whos_who", self ); + + self setclientfieldtoplayer( "clientfield_whos_who_audio", 0 ); + self setclientfieldtoplayer( "clientfield_whos_who_filter", 0 ); + } + + self.whos_who_effects_active = undefined; + } +} diff --git a/ZM/Core/maps/mp/zombies/_zm_clone.gsc b/ZM/Core/maps/mp/zombies/_zm_clone.gsc new file mode 100644 index 0000000..dfabc22 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_clone.gsc @@ -0,0 +1,134 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; + +init() +{ + init_mover_tree(); +} + +spawn_player_clone( player, origin = player.origin, forceweapon, forcemodel ) +{ + primaryweapons = player getweaponslistprimaries(); + + if ( isdefined( forceweapon ) ) + weapon = forceweapon; + else if ( primaryweapons.size ) + weapon = primaryweapons[0]; + else + weapon = player getcurrentweapon(); + + weaponmodel = getweaponmodel( weapon ); + spawner = getent( "fake_player_spawner", "targetname" ); + + if ( isdefined( spawner ) ) + { + clone = spawner spawnactor(); + clone.origin = origin; + clone.isactor = 1; + } + else + { + clone = spawn( "script_model", origin ); + clone.isactor = 0; + } + + if ( isdefined( forcemodel ) ) + clone setmodel( forcemodel ); + else + { + clone setmodel( self.model ); + + if ( isdefined( player.headmodel ) ) + { + clone.headmodel = player.headmodel; + clone attach( clone.headmodel, "", 1 ); + } + } + + if ( weaponmodel != "" && weaponmodel != "none" ) + clone attach( weaponmodel, "tag_weapon_right" ); + + clone.team = player.team; + clone.is_inert = 1; + clone.zombie_move_speed = "walk"; + clone.script_noteworthy = "corpse_clone"; + clone.actor_damage_func = ::clone_damage_func; + return clone; +} + +clone_damage_func( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + idamage = 0; + + if ( sweapon == "knife_ballistic_upgraded_zm" || sweapon == "knife_ballistic_bowie_upgraded_zm" || sweapon == "knife_ballistic_no_melee_upgraded_zm" || sweapon == "knife_ballistic_sickle_upgraded_zm" ) + self notify( "player_revived", eattacker ); + + return idamage; +} + +clone_give_weapon( weapon ) +{ + weaponmodel = getweaponmodel( weapon ); + + if ( weaponmodel != "" && weaponmodel != "none" ) + self attach( weaponmodel, "tag_weapon_right" ); +} + +clone_animate( animtype ) +{ + if ( self.isactor ) + self thread clone_actor_animate( animtype ); + else + self thread clone_mover_animate( animtype ); +} + +clone_actor_animate( animtype ) +{ + wait 0.1; + + switch ( animtype ) + { + case "laststand": + self setanimstatefromasd( "laststand" ); + break; + case "idle": + default: + self setanimstatefromasd( "idle" ); + break; + } +} + +#using_animtree("zm_ally"); + +init_mover_tree() +{ + scriptmodelsuseanimtree( #animtree ); +} + +clone_mover_animate( animtype ) +{ + self useanimtree( #animtree ); + + switch ( animtype ) + { + case "laststand": + self setanim( %pb_laststand_idle ); + break; + case "afterlife": + self setanim( %pb_afterlife_laststand_idle ); + break; + case "chair": + self setanim( %ai_actor_elec_chair_idle ); + break; + case "falling": + self setanim( %pb_falling_loop ); + break; + case "idle": + default: + self setanim( %pb_stand_alert ); + break; + } +} diff --git a/ZM/Core/maps/mp/zombies/_zm_devgui.gsc b/ZM/Core/maps/mp/zombies/_zm_devgui.gsc new file mode 100644 index 0000000..eddded2 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_devgui.gsc @@ -0,0 +1,2259 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_turned; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_weap_claymore; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_laststand; + +init() +{ +/# + setdvar( "zombie_devgui", "" ); + setdvar( "scr_force_weapon", "" ); + setdvar( "scr_zombie_round", "1" ); + setdvar( "scr_zombie_dogs", "1" ); + setdvar( "scr_spawn_tesla", "" ); + setdvar( "scr_force_quantum_bomb_result", "" ); + level.devgui_add_weapon = ::devgui_add_weapon; + level.devgui_add_ability = ::devgui_add_ability; + level thread zombie_devgui_think(); + thread zombie_devgui_player_commands(); + thread diable_fog_in_noclip(); + thread zombie_weapon_devgui_think(); + thread devgui_zombie_healthbar(); +#/ +} + +zombie_devgui_player_commands() +{ +/# + flag_wait( "start_zombie_round_logic" ); + wait 1; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + ip1 = i + 1; + adddebugcommand( "devgui_cmd \"Zombies:1/Players:1/Player:1/" + players[i].name + "/Give Money:1\" \"set zombie_devgui player" + ip1 + "_money\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Players:1/Player:1/" + players[i].name + "/Invulnerable:2\" \"set zombie_devgui player" + ip1 + "_invul_on\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Players:1/Player:1/" + players[i].name + "/Vulnerable:3\" \"set zombie_devgui player" + ip1 + "_invul_off\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Players:1/Player:1/" + players[i].name + "/Toggle Ignored:4\" \"set zombie_devgui player" + ip1 + "_ignore\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Players:1/Player:1/" + players[i].name + "/Mega Health:5\" \"set zombie_devgui player" + ip1 + "_health\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Players:1/Player:1/" + players[i].name + "/Down:6\" \"set zombie_devgui player" + ip1 + "_kill\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Players:1/Player:1/" + players[i].name + "/Revive:7\" \"set zombie_devgui player" + ip1 + "_revive\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Players:1/Player:1/" + players[i].name + "/Turn Player:8\" \"set zombie_devgui player" + ip1 + "_turnplayer\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Players:1/Player:1/" + players[i].name + "/Debug Pers:9\" \"set zombie_devgui player" + ip1 + "_debug_pers\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Players:1/Player:1/" + players[i].name + "/Take Money:10\" \"set zombie_devgui player" + ip1 + "_moneydown\" \\n" ); + } +#/ +} + +devgui_add_weapon_entry( hint, up, weapon_name, root ) +{ +/# + rootslash = ""; + + if ( isdefined( root ) && root.size ) + rootslash = root + "/"; + + uppath = "/" + up; + + if ( up.size < 1 ) + uppath = ""; + + cmd = "devgui_cmd \"Zombies:1/Weapons:10/" + rootslash + hint + uppath + "\" \"set zombie_devgui_gun " + weapon_name + "\" \\n"; + adddebugcommand( cmd ); +#/ +} + +devgui_add_weapon_and_attachments( hint, up, weapon_name, root ) +{ +/# + devgui_add_weapon_entry( hint, up, weapon_name, root ); +#/ +} + +devgui_add_weapon( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp, ammo_cost ) +{ +/# + if ( is_offhand_weapon( weapon_name ) && !is_melee_weapon( weapon_name ) ) + return; + + if ( !isdefined( level.devgui_weapons_added ) ) + level.devgui_weapons_added = 0; + + level.devgui_weapons_added++; + + if ( is_melee_weapon( weapon_name ) ) + devgui_add_weapon_and_attachments( weapon_name, "", weapon_name, "Melee:8" ); + else + devgui_add_weapon_and_attachments( weapon_name, "", weapon_name, "" ); +#/ +} + +zombie_weapon_devgui_think() +{ +/# + level.zombie_devgui_gun = getdvar( _hash_CE4F9F97 ); + level.zombie_devgui_att = getdvar( _hash_A965F402 ); + + for (;;) + { + wait 0.25; + cmd = getdvar( _hash_CE4F9F97 ); + + if ( !isdefined( level.zombie_devgui_gun ) || level.zombie_devgui_gun != cmd ) + { + level.zombie_devgui_gun = cmd; + array_thread( get_players(), ::zombie_devgui_weapon_give, level.zombie_devgui_gun ); + } + + wait 0.25; + att = getdvar( _hash_A965F402 ); + + if ( !isdefined( level.zombie_devgui_att ) || level.zombie_devgui_att != att ) + { + level.zombie_devgui_att = att; + array_thread( get_players(), ::zombie_devgui_attachment_give, level.zombie_devgui_att ); + } + } +#/ +} + +zombie_devgui_weapon_give( gun ) +{ +/# + self maps\mp\zombies\_zm_weapons::weapon_give( gun, is_weapon_upgraded( gun ), 0 ); +#/ +} + +zombie_devgui_attachment_give( gun ) +{ +/# + newgun = maps\mp\zombies\_zm_weapons::get_base_name( self getcurrentweapon() ) + "+" + gun; + self maps\mp\zombies\_zm_weapons::weapon_give( newgun, is_weapon_upgraded( gun ), 0 ); +#/ +} + +devgui_add_ability( name, upgrade_active_func, stat_name, stat_desired_value, game_end_reset_if_not_achieved ) +{ +/# + online_game = sessionmodeisonlinegame(); + + if ( !online_game ) + return; + + if ( !is_true( level.devgui_watch_abilities ) ) + { + cmd = "devgui_cmd \"Zombies:1/Players:1/Abilities:3/Disable All:1\" \"set zombie_devgui_give_ability _disable\" \\n"; + adddebugcommand( cmd ); + cmd = "devgui_cmd \"Zombies:1/Players:1/Abilities:3/Enable All:2\" \"set zombie_devgui_give_ability _enable\" \\n"; + adddebugcommand( cmd ); + level thread zombie_ability_devgui_think(); + level.devgui_watch_abilities = 1; + } + + cmd = "devgui_cmd \"Zombies:1/Players:1/Abilities:3/" + name + "\" \"set zombie_devgui_give_ability " + name + "\" \\n"; + adddebugcommand( cmd ); + cmd = "devgui_cmd \"Zombies:1/Players:1/Abilities:3/Take:3/" + name + "\" \"set zombie_devgui_take_ability " + name + "\" \\n"; + adddebugcommand( cmd ); +#/ +} + +zombie_devgui_ability_give( name ) +{ +/# + pers_upgrade = level.pers_upgrades[name]; + + if ( isdefined( pers_upgrade ) ) + { + for ( i = 0; i < pers_upgrade.stat_names.size; i++ ) + { + stat_name = pers_upgrade.stat_names[i]; + stat_value = pers_upgrade.stat_desired_values[i]; + self maps\mp\zombies\_zm_stats::set_global_stat( stat_name, stat_value ); + self.pers_upgrade_force_test = 1; + } + } +#/ +} + +zombie_devgui_ability_take( name ) +{ +/# + pers_upgrade = level.pers_upgrades[name]; + + if ( isdefined( pers_upgrade ) ) + { + for ( i = 0; i < pers_upgrade.stat_names.size; i++ ) + { + stat_name = pers_upgrade.stat_names[i]; + stat_value = 0; + self maps\mp\zombies\_zm_stats::set_global_stat( stat_name, stat_value ); + self.pers_upgrade_force_test = 1; + } + } +#/ +} + +zombie_ability_devgui_think() +{ +/# + level.zombie_devgui_give_ability = getdvar( _hash_E2245F05 ); + level.zombie_devgui_take_ability = getdvar( _hash_726367F ); + + for (;;) + { + wait 0.25; + cmd = getdvar( _hash_E2245F05 ); + + if ( !isdefined( level.zombie_devgui_give_ability ) || level.zombie_devgui_give_ability != cmd ) + { + if ( cmd == "_disable" ) + flag_set( "sq_minigame_active" ); + else if ( cmd == "_enable" ) + flag_clear( "sq_minigame_active" ); + else + { + level.zombie_devgui_give_ability = cmd; + array_thread( get_players(), ::zombie_devgui_ability_give, level.zombie_devgui_give_ability ); + } + } + + wait 0.25; + cmd = getdvar( _hash_726367F ); + + if ( !isdefined( level.zombie_devgui_take_ability ) || level.zombie_devgui_take_ability != cmd ) + { + level.zombie_devgui_take_ability = cmd; + array_thread( get_players(), ::zombie_devgui_ability_take, level.zombie_devgui_take_ability ); + } + } +#/ +} + +zombie_healthbar( pos, dsquared ) +{ +/# + if ( distancesquared( pos, self.origin ) > dsquared ) + return; + + rate = 1; + + if ( isdefined( self.maxhealth ) ) + rate = self.health / self.maxhealth; + + color = ( 1 - rate, rate, 0 ); + text = "" + int( self.health ); + print3d( self.origin + ( 0, 0, 0 ), text, color, 1, 0.5, 1 ); +#/ +} + +devgui_zombie_healthbar() +{ +/# + while ( true ) + { + if ( getdvarint( _hash_5B45DCAF ) == 1 ) + { + lp = get_players()[0]; + zombies = getaispeciesarray( "all", "all" ); + + if ( isdefined( zombies ) ) + { + foreach ( zombie in zombies ) + zombie zombie_healthbar( lp.origin, 360000 ); + } + } + + wait 0.05; + } +#/ +} + +zombie_devgui_watch_input() +{ +/# + flag_wait( "start_zombie_round_logic" ); + wait 1; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] thread watch_debug_input(); +#/ +} + +damage_player() +{ +/# + self disableinvulnerability(); + self dodamage( self.health / 2, self.origin ); +#/ +} + +kill_player() +{ +/# + self disableinvulnerability(); + death_from = ( randomfloatrange( -20, 20 ), randomfloatrange( -20, 20 ), randomfloatrange( -20, 20 ) ); + self dodamage( self.health + 666, self.origin + death_from ); +#/ +} + +force_drink() +{ +/# + wait 0.01; + lean = self allowlean( 0 ); + ads = self allowads( 0 ); + sprint = self allowsprint( 0 ); + crouch = self allowcrouch( 1 ); + prone = self allowprone( 0 ); + melee = self allowmelee( 0 ); + self increment_is_drinking(); + orgweapon = self getcurrentweapon(); + self giveweapon( "zombie_builder_zm" ); + self switchtoweapon( "zombie_builder_zm" ); + self.build_time = self.usetime; + self.build_start_time = gettime(); + wait 2; + self maps\mp\zombies\_zm_weapons::switch_back_primary_weapon( orgweapon ); + self takeweapon( "zombie_builder_zm" ); + + if ( is_true( self.is_drinking ) ) + self decrement_is_drinking(); + + self allowlean( lean ); + self allowads( ads ); + self allowsprint( sprint ); + self allowprone( prone ); + self allowcrouch( crouch ); + self allowmelee( melee ); +#/ +} + +zombie_devgui_dpad_none() +{ +/# + self thread watch_debug_input(); +#/ +} + +zombie_devgui_dpad_death() +{ +/# + self thread watch_debug_input( ::kill_player ); +#/ +} + +zombie_devgui_dpad_damage() +{ +/# + self thread watch_debug_input( ::damage_player ); +#/ +} + +zombie_devgui_dpad_changeweapon() +{ +/# + self thread watch_debug_input( ::force_drink ); +#/ +} + +watch_debug_input( callback ) +{ +/# + self endon( "disconnect" ); + self notify( "watch_debug_input" ); + self endon( "watch_debug_input" ); + level.devgui_dpad_watch = 0; + + if ( isdefined( callback ) ) + { + level.devgui_dpad_watch = 1; + + for (;;) + { + if ( self actionslottwobuttonpressed() ) + { + self thread [[ callback ]](); + + while ( self actionslottwobuttonpressed() ) + wait 0.05; + } + + wait 0.05; + } + } +#/ +} + +zombie_devgui_think() +{ +/# + for (;;) + { + cmd = getdvar( "zombie_devgui" ); + + switch ( cmd ) + { + case "money": + players = get_players(); + array_thread( players, ::zombie_devgui_give_money ); + break; + case "player1_money": + players = get_players(); + + if ( players.size >= 1 ) + players[0] thread zombie_devgui_give_money(); + + break; + case "player2_money": + players = get_players(); + + if ( players.size >= 2 ) + players[1] thread zombie_devgui_give_money(); + + break; + case "player3_money": + players = get_players(); + + if ( players.size >= 3 ) + players[2] thread zombie_devgui_give_money(); + + break; + case "player4_money": + players = get_players(); + + if ( players.size >= 4 ) + players[3] thread zombie_devgui_give_money(); + + break; + case "moneydown": + players = get_players(); + array_thread( players, ::zombie_devgui_take_money ); + break; + case "player1_moneydown": + players = get_players(); + + if ( players.size >= 1 ) + players[0] thread zombie_devgui_take_money(); + + break; + case "player2_moneydown": + players = get_players(); + + if ( players.size >= 2 ) + players[1] thread zombie_devgui_take_money(); + + break; + case "player3_moneydown": + players = get_players(); + + if ( players.size >= 3 ) + players[2] thread zombie_devgui_take_money(); + + break; + case "player4_moneydown": + players = get_players(); + + if ( players.size >= 4 ) + players[3] thread zombie_devgui_take_money(); + + break; + case "health": + array_thread( get_players(), ::zombie_devgui_give_health ); + break; + case "player1_health": + players = get_players(); + + if ( players.size >= 1 ) + players[0] thread zombie_devgui_give_health(); + + break; + case "player2_health": + players = get_players(); + + if ( players.size >= 2 ) + players[1] thread zombie_devgui_give_health(); + + break; + case "player3_health": + players = get_players(); + + if ( players.size >= 3 ) + players[2] thread zombie_devgui_give_health(); + + break; + case "player4_health": + players = get_players(); + + if ( players.size >= 4 ) + players[3] thread zombie_devgui_give_health(); + + break; + case "ammo": + array_thread( get_players(), ::zombie_devgui_toggle_ammo ); + break; + case "ignore": + array_thread( get_players(), ::zombie_devgui_toggle_ignore ); + break; + case "player1_ignore": + players = get_players(); + + if ( players.size >= 1 ) + players[0] thread zombie_devgui_toggle_ignore(); + + break; + case "player2_ignore": + players = get_players(); + + if ( players.size >= 2 ) + players[1] thread zombie_devgui_toggle_ignore(); + + break; + case "player3_ignore": + players = get_players(); + + if ( players.size >= 3 ) + players[2] thread zombie_devgui_toggle_ignore(); + + break; + case "player4_ignore": + players = get_players(); + + if ( players.size >= 4 ) + players[3] thread zombie_devgui_toggle_ignore(); + + break; + case "invul_on": + zombie_devgui_invulnerable( undefined, 1 ); + break; + case "invul_off": + zombie_devgui_invulnerable( undefined, 0 ); + break; + case "player1_invul_on": + zombie_devgui_invulnerable( 0, 1 ); + break; + case "player1_invul_off": + zombie_devgui_invulnerable( 0, 0 ); + break; + case "player2_invul_on": + zombie_devgui_invulnerable( 1, 1 ); + break; + case "player2_invul_off": + zombie_devgui_invulnerable( 1, 0 ); + break; + case "player3_invul_on": + zombie_devgui_invulnerable( 2, 1 ); + break; + case "player3_invul_off": + zombie_devgui_invulnerable( 2, 0 ); + break; + case "player4_invul_on": + zombie_devgui_invulnerable( 3, 1 ); + break; + case "player4_invul_off": + zombie_devgui_invulnerable( 3, 0 ); + break; + case "revive_all": + array_thread( get_players(), ::zombie_devgui_revive ); + break; + case "player1_revive": + players = get_players(); + + if ( players.size >= 1 ) + players[0] thread zombie_devgui_revive(); + + break; + case "player2_revive": + players = get_players(); + + if ( players.size >= 2 ) + players[1] thread zombie_devgui_revive(); + + break; + case "player3_revive": + players = get_players(); + + if ( players.size >= 3 ) + players[2] thread zombie_devgui_revive(); + + break; + case "player4_revive": + players = get_players(); + + if ( players.size >= 4 ) + players[3] thread zombie_devgui_revive(); + + break; + case "player1_kill": + players = get_players(); + + if ( players.size >= 1 ) + players[0] thread zombie_devgui_kill(); + + break; + case "player2_kill": + players = get_players(); + + if ( players.size >= 2 ) + players[1] thread zombie_devgui_kill(); + + break; + case "player3_kill": + players = get_players(); + + if ( players.size >= 3 ) + players[2] thread zombie_devgui_kill(); + + break; + case "player4_kill": + players = get_players(); + + if ( players.size >= 4 ) + players[3] thread zombie_devgui_kill(); + + break; + case "spawn_friendly_bot": + player = gethostplayer(); + team = player.team; + devgui_bot_spawn( team ); + break; + case "specialty_quickrevive": + level.solo_lives_given = 0; + case "specialty_showonradar": + case "specialty_scavenger": + case "specialty_rof": + case "specialty_nomotionsensor": + case "specialty_longersprint": + case "specialty_grenadepulldeath": + case "specialty_flakjacket": + case "specialty_finalstand": + case "specialty_fastreload": + case "specialty_fastmeleerecovery": + case "specialty_deadshot": + case "specialty_armorvest": + case "specialty_additionalprimaryweapon": + zombie_devgui_give_perk( cmd ); + break; + case "turnplayer": + zombie_devgui_turn_player(); + break; + case "player1_turnplayer": + zombie_devgui_turn_player( 0 ); + break; + case "player2_turnplayer": + zombie_devgui_turn_player( 1 ); + break; + case "player3_turnplayer": + zombie_devgui_turn_player( 2 ); + break; + case "player4_turnplayer": + zombie_devgui_turn_player( 3 ); + break; + case "player1_debug_pers": + zombie_devgui_debug_pers( 0 ); + break; + case "player2_debug_pers": + zombie_devgui_debug_pers( 1 ); + break; + case "player3_debug_pers": + zombie_devgui_debug_pers( 2 ); + break; + case "player4_debug_pers": + zombie_devgui_debug_pers( 3 ); + break; + case "tesla": + case "random_weapon": + case "nuke": + case "minigun": + case "meat_stink": + case "lose_points_team": + case "lose_perk": + case "insta_kill": + case "full_ammo": + case "free_perk": + case "fire_sale": + case "empty_clip": + case "double_points": + case "carpenter": + case "bonus_points_team": + case "bonus_points_player": + case "bonfire_sale": + zombie_devgui_give_powerup( cmd, 1 ); + break; + case "next_tesla": + case "next_random_weapon": + case "next_nuke": + case "next_minigun": + case "next_meat_stink": + case "next_lose_points_team": + case "next_lose_perk": + case "next_insta_kill": + case "next_full_ammo": + case "next_free_perk": + case "next_fire_sale": + case "next_empty_clip": + case "next_double_points": + case "next_carpenter": + case "next_bonus_points_team": + case "next_bonus_points_player": + case "next_bonfire_sale": + zombie_devgui_give_powerup( getsubstr( cmd, 5 ), 0 ); + break; + case "round": + zombie_devgui_goto_round( getdvarint( _hash_D81B6E19 ) ); + break; + case "round_next": + zombie_devgui_goto_round( level.round_number + 1 ); + break; + case "round_prev": + zombie_devgui_goto_round( level.round_number - 1 ); + break; + case "chest_move": + if ( isdefined( level.chest_accessed ) ) + { + level notify( "devgui_chest_end_monitor" ); + level.chest_accessed = 100; + } + + break; + case "chest_never_move": + if ( isdefined( level.chest_accessed ) ) + level thread zombie_devgui_chest_never_move(); + + break; + case "chest": + if ( isdefined( level.zombie_weapons[getdvar( _hash_45ED7744 )] ) ) + { + + } + + break; + case "quantum_bomb_random_result": + setdvar( "scr_force_quantum_bomb_result", "" ); + break; + case "give_gasmask": + array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_gasmask_zm" ); + break; + case "give_hacker": + array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_hacker_zm" ); + break; + case "give_turbine": + array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_turbine_zm" ); + break; + case "give_turret": + array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_turret_zm" ); + break; + case "give_electrictrap": + array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_electrictrap_zm" ); + break; + case "give_riotshield": + array_thread( get_players(), ::zombie_devgui_equipment_give, "riotshield_zm" ); + break; + case "give_jetgun": + array_thread( get_players(), ::zombie_devgui_equipment_give, "jetgun_zm" ); + break; + case "give_springpad": + array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_springpad_zm" ); + break; + case "give_subwoofer": + array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_subwoofer_zm" ); + break; + case "give_headchopper": + array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_headchopper_zm" ); + break; + case "cool_jetgun": + array_thread( get_players(), ::zombie_devgui_cool_jetgun ); + break; + case "preserve_turbines": + array_thread( get_players(), ::zombie_devgui_preserve_turbines ); + break; + case "healthy_equipment": + array_thread( get_players(), ::zombie_devgui_equipment_stays_healthy ); + break; + case "disown_equipment": + array_thread( get_players(), ::zombie_devgui_disown_equipment ); + break; + case "buildable_drop": + array_thread( get_players(), ::zombie_devgui_buildable_drop ); + break; + case "build_busladder": + zombie_devgui_build( "busladder" ); + break; + case "build_bushatch": + zombie_devgui_build( "bushatch" ); + break; + case "build_dinerhatch": + zombie_devgui_build( "dinerhatch" ); + break; + case "build_cattlecatcher": + zombie_devgui_build( "cattlecatcher" ); + break; + case "build_pap": + zombie_devgui_build( "pap" ); + break; + case "build_riotshield_zm": + zombie_devgui_build( "riotshield_zm" ); + break; + case "build_powerswitch": + zombie_devgui_build( "powerswitch" ); + break; + case "build_turbine": + zombie_devgui_build( "turbine" ); + break; + case "build_turret": + zombie_devgui_build( "turret" ); + break; + case "build_electric_trap": + zombie_devgui_build( "electric_trap" ); + break; + case "build_jetgun_zm": + zombie_devgui_build( "jetgun_zm" ); + break; + case "build_sq_common": + zombie_devgui_build( "sq_common" ); + break; + case "build_springpad": + zombie_devgui_build( "springpad_zm" ); + break; + case "build_slipgun": + zombie_devgui_build( "slipgun_zm" ); + break; + case "build_keys": + zombie_devgui_build( "keys_zm" ); + break; + case "give_claymores": + array_thread( get_players(), ::zombie_devgui_give_claymores ); + break; + case "give_frags": + array_thread( get_players(), ::zombie_devgui_give_frags ); + break; + case "give_sticky": + array_thread( get_players(), ::zombie_devgui_give_sticky ); + break; + case "give_monkey": + array_thread( get_players(), ::zombie_devgui_give_monkey ); + break; + case "give_beacon": + array_thread( get_players(), ::zombie_devgui_give_beacon ); + break; + case "give_time_bomb": + array_thread( get_players(), ::zombie_devgui_give_time_bomb ); + break; + case "give_black_hole_bomb": + array_thread( get_players(), ::zombie_devgui_give_black_hole_bomb ); + break; + case "give_dolls": + array_thread( get_players(), ::zombie_devgui_give_dolls ); + break; + case "give_quantum_bomb": + array_thread( get_players(), ::zombie_devgui_give_quantum_bomb ); + break; + case "give_emp_bomb": + array_thread( get_players(), ::zombie_devgui_give_emp_bomb ); + break; + case "monkey_round": + zombie_devgui_monkey_round(); + break; + case "thief_round": + zombie_devgui_thief_round(); + break; + case "dog_round": + zombie_devgui_dog_round( getdvarint( _hash_3CD25BFE ) ); + break; + case "dog_round_skip": + zombie_devgui_dog_round_skip(); + break; + case "print_variables": + zombie_devgui_dump_zombie_vars(); + break; + case "pack_current_weapon": + zombie_devgui_pack_current_weapon(); + break; + case "unpack_current_weapon": + zombie_devgui_unpack_current_weapon(); + break; + case "reopt_current_weapon": + zombie_devgui_reopt_current_weapon(); + break; + case "weapon_take_all_fallback": + zombie_devgui_take_weapons( 1 ); + break; + case "weapon_take_all": + zombie_devgui_take_weapons( 0 ); + break; + case "weapon_take_current": + zombie_devgui_take_weapon(); + break; + case "power_on": + flag_set( "power_on" ); + break; + case "power_off": + flag_clear( "power_on" ); + break; + case "zombie_dpad_none": + array_thread( get_players(), ::zombie_devgui_dpad_none ); + break; + case "zombie_dpad_damage": + array_thread( get_players(), ::zombie_devgui_dpad_damage ); + break; + case "zombie_dpad_kill": + array_thread( get_players(), ::zombie_devgui_dpad_death ); + break; + case "zombie_dpad_drink": + array_thread( get_players(), ::zombie_devgui_dpad_changeweapon ); + break; + case "director_easy": + zombie_devgui_director_easy(); + break; + case "open_sesame": + zombie_devgui_open_sesame(); + break; + case "allow_fog": + zombie_devgui_allow_fog(); + break; + case "disable_kill_thread_toggle": + zombie_devgui_disable_kill_thread_toggle(); + break; + case "check_kill_thread_every_frame_toggle": + zombie_devgui_check_kill_thread_every_frame_toggle(); + break; + case "kill_thread_test_mode_toggle": + zombie_devgui_kill_thread_test_mode_toggle(); + break; + case "zombie_failsafe_debug_flush": + level notify( "zombie_failsafe_debug_flush" ); + break; + case "spawn": + devgui_zombie_spawn(); + break; + case "spawn_all": + devgui_all_spawn(); + break; + case "toggle_show_spawn_locations": + devgui_toggle_show_spawn_locations(); + break; + case "debug_hud": + array_thread( get_players(), ::devgui_debug_hud ); + break; + case "": + break; + default: + if ( isdefined( level.custom_devgui ) ) + { + if ( isarray( level.custom_devgui ) ) + { + i = 0; + + do + { + b_found_entry = is_true( [[ level.custom_devgui[i] ]]( cmd ) ); + i++; + } + while ( !b_found_entry && i < level.custom_devgui.size ); + } + else + [[ level.custom_devgui ]]( cmd ); + } + else + { + + } + + break; + } + + setdvar( "zombie_devgui", "" ); + wait 0.5; + } +#/ +} + +devgui_all_spawn() +{ +/# + player = gethostplayer(); + devgui_bot_spawn( player.team ); + wait 0.1; + devgui_bot_spawn( player.team ); + wait 0.1; + devgui_bot_spawn( player.team ); + wait 0.1; + zombie_devgui_goto_round( 8 ); +#/ +} + +devgui_toggle_show_spawn_locations() +{ +/# + if ( !isdefined( level.toggle_show_spawn_locations ) ) + level.toggle_show_spawn_locations = 1; + else + level.toggle_show_spawn_locations = !level.toggle_show_spawn_locations; +#/ +} + +devgui_zombie_spawn() +{ +/# + player = get_players()[0]; + spawnername = undefined; + spawnername = "zombie_spawner"; + direction = player getplayerangles(); + direction_vec = anglestoforward( direction ); + eye = player geteye(); + scale = 8000; + direction_vec = ( direction_vec[0] * scale, direction_vec[1] * scale, direction_vec[2] * scale ); + trace = bullettrace( eye, eye + direction_vec, 0, undefined ); + guy = undefined; + spawners = getentarray( spawnername, "script_noteworthy" ); + spawner = spawners[0]; + guy = maps\mp\zombies\_zm_utility::spawn_zombie( spawner ); + + if ( isdefined( guy ) ) + { + wait 0.5; + guy.origin = trace["position"]; + guy.angles = player.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); + guy forceteleport( trace["position"], player.angles + vectorscale( ( 0, 1, 0 ), 180.0 ) ); + guy thread maps\mp\zombies\_zm_ai_basic::find_flesh(); + } +#/ +} + +devgui_bot_spawn( team ) +{ +/# + player = gethostplayer(); + direction = player getplayerangles(); + direction_vec = anglestoforward( direction ); + eye = player geteye(); + scale = 8000; + direction_vec = ( direction_vec[0] * scale, direction_vec[1] * scale, direction_vec[2] * scale ); + trace = bullettrace( eye, eye + direction_vec, 0, undefined ); + direction_vec = player.origin - trace["position"]; + direction = vectortoangles( direction_vec ); + bot = addtestclient(); + + if ( !isdefined( bot ) ) + { + println( "Could not add test client" ); + return; + } + + bot.pers["isBot"] = 1; + bot.equipment_enabled = 0; + bot maps\mp\zombies\_zm::reset_rampage_bookmark_kill_times(); + bot.team = "allies"; + bot._player_entnum = bot getentitynumber(); + yaw = direction[1]; + bot thread devgui_bot_spawn_think( trace["position"], yaw ); +#/ +} + +devgui_bot_spawn_think( origin, yaw ) +{ +/# + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self setorigin( origin ); + angles = ( 0, yaw, 0 ); + self setplayerangles( angles ); + } +#/ +} + +zombie_devgui_open_sesame() +{ +/# + setdvar( "zombie_unlock_all", 1 ); + flag_set( "power_on" ); + players = get_players(); + array_thread( players, ::zombie_devgui_give_money ); + zombie_doors = getentarray( "zombie_door", "targetname" ); + + for ( i = 0; i < zombie_doors.size; i++ ) + { + zombie_doors[i] notify( "trigger", players[0] ); + + if ( is_true( zombie_doors[i].power_door_ignore_flag_wait ) ) + zombie_doors[i] notify( "power_on" ); + + wait 0.05; + } + + zombie_airlock_doors = getentarray( "zombie_airlock_buy", "targetname" ); + + for ( i = 0; i < zombie_airlock_doors.size; i++ ) + { + zombie_airlock_doors[i] notify( "trigger", players[0] ); + wait 0.05; + } + + zombie_debris = getentarray( "zombie_debris", "targetname" ); + + for ( i = 0; i < zombie_debris.size; i++ ) + { + zombie_debris[i] notify( "trigger", players[0] ); + wait 0.05; + } + + zombie_devgui_build( undefined ); + level notify( "open_sesame" ); + wait 1; + setdvar( "zombie_unlock_all", 0 ); +#/ +} + +any_player_in_noclip() +{ +/# + foreach ( player in get_players() ) + { + if ( player isinmovemode( "ufo", "noclip" ) ) + return true; + } + + return false; +#/ +} + +diable_fog_in_noclip() +{ +/# + level.fog_disabled_in_noclip = 1; + level endon( "allowfoginnoclip" ); + flag_wait( "start_zombie_round_logic" ); + + while ( true ) + { + while ( !any_player_in_noclip() ) + wait 1; + + setdvar( "scr_fog_disable", "1" ); + setdvar( "r_fog_disable", "1" ); + + if ( isdefined( level.culldist ) ) + setculldist( 0 ); + + while ( any_player_in_noclip() ) + wait 1; + + setdvar( "scr_fog_disable", "0" ); + setdvar( "r_fog_disable", "0" ); + + if ( isdefined( level.culldist ) ) + setculldist( level.culldist ); + } +#/ +} + +zombie_devgui_allow_fog() +{ +/# + if ( level.fog_disabled_in_noclip ) + { + level notify( "allowfoginnoclip" ); + level.fog_disabled_in_noclip = 0; + setdvar( "scr_fog_disable", "0" ); + setdvar( "r_fog_disable", "0" ); + } + else + thread diable_fog_in_noclip(); +#/ +} + +zombie_devgui_give_money() +{ +/# + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + self maps\mp\zombies\_zm_score::add_to_player_score( 100000 ); +#/ +} + +zombie_devgui_take_money() +{ +/# + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + + if ( self.score > 100 ) + self maps\mp\zombies\_zm_score::minus_to_player_score( int( self.score / 2 ) ); + else + self maps\mp\zombies\_zm_score::minus_to_player_score( self.score ); +#/ +} + +zombie_devgui_turn_player( index ) +{ +/# + players = get_players(); + + if ( !isdefined( index ) || index >= players.size ) + player = players[0]; + else + player = players[index]; + + assert( isdefined( player ) ); + assert( isplayer( player ) ); + assert( isalive( player ) ); + level.devcheater = 1; + + if ( player hasperk( "specialty_noname" ) ) + { + println( "Player turned HUMAN" ); + player maps\mp\zombies\_zm_turned::turn_to_human(); + } + else + { + println( "Player turned ZOMBIE" ); + player maps\mp\zombies\_zm_turned::turn_to_zombie(); + } +#/ +} + +zombie_devgui_debug_pers( index ) +{ +/# + players = get_players(); + + if ( !isdefined( index ) || index >= players.size ) + player = players[0]; + else + player = players[index]; + + assert( isdefined( player ) ); + assert( isplayer( player ) ); + assert( isalive( player ) ); + level.devcheater = 1; + println( "\\n\\n----------------------------------------------------------------------------------------------" ); + println( "Active Persistent upgrades [count=" + level.pers_upgrades_keys.size + "]" ); + + for ( pers_upgrade_index = 0; pers_upgrade_index < level.pers_upgrades_keys.size; pers_upgrade_index++ ) + { + name = level.pers_upgrades_keys[pers_upgrade_index]; + println( pers_upgrade_index + ">pers_upgrade name = " + name ); + pers_upgrade = level.pers_upgrades[name]; + + for ( i = 0; i < pers_upgrade.stat_names.size; i++ ) + { + stat_name = pers_upgrade.stat_names[i]; + stat_desired_value = pers_upgrade.stat_desired_values[i]; + player_current_stat_value = player maps\mp\zombies\_zm_stats::get_global_stat( stat_name ); + println( " " + i + ")stat_name = " + stat_name ); + println( " " + i + ")stat_desired_values = " + stat_desired_value ); + println( " " + i + ")player_current_stat_value = " + player_current_stat_value ); + } + + if ( is_true( player.pers_upgrades_awarded[name] ) ) + { + println( "PLAYER HAS - " + name ); + continue; + } + + println( "PLAYER DOES NOT HAVE - " + name ); + } + + println( "----------------------------------------------------------------------------------------------\\n\\n" ); +#/ +} + +zombie_devgui_cool_jetgun() +{ +/# + if ( isdefined( level.zm_devgui_jetgun_never_overheat ) ) + self thread [[ level.zm_devgui_jetgun_never_overheat ]](); +#/ +} + +zombie_devgui_preserve_turbines() +{ +/# + self endon( "disconnect" ); + self notify( "preserve_turbines" ); + self endon( "preserve_turbines" ); + + if ( !is_true( self.preserving_turbines ) ) + { + self.preserving_turbines = 1; + + while ( true ) + { + self.turbine_health = 1200; + wait 1; + } + } + + self.preserving_turbines = 0; +#/ +} + +zombie_devgui_equipment_stays_healthy() +{ +/# + self endon( "disconnect" ); + self notify( "preserve_equipment" ); + self endon( "preserve_equipment" ); + + if ( !is_true( self.preserving_equipment ) ) + { + self.preserving_equipment = 1; + + while ( true ) + { + self.equipment_damage = []; + self.shielddamagetaken = 0; + + if ( isdefined( level.destructible_equipment ) ) + { + foreach ( equip in level.destructible_equipment ) + { + if ( isdefined( equip ) ) + { + equip.shielddamagetaken = 0; + equip.damage = 0; + equip.headchopper_kills = 0; + equip.springpad_kills = 0; + equip.subwoofer_kills = 0; + } + } + } + + wait 0.1; + } + } + + self.preserving_equipment = 0; +#/ +} + +zombie_devgui_disown_equipment() +{ +/# + self.deployed_equipment = []; +#/ +} + +zombie_devgui_equipment_give( equipment ) +{ +/# + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + + if ( is_equipment_included( equipment ) ) + self maps\mp\zombies\_zm_equipment::equipment_buy( equipment ); +#/ +} + +zombie_devgui_buildable_drop() +{ +/# + if ( isdefined( level.buildable_slot_count ) ) + { + for ( i = 0; i < level.buildable_slot_count; i++ ) + self maps\mp\zombies\_zm_buildables::player_drop_piece( undefined, i ); + } + else + self maps\mp\zombies\_zm_buildables::player_drop_piece(); +#/ +} + +zombie_devgui_build( buildable ) +{ +/# + player = get_players()[0]; + + for ( i = 0; i < level.buildable_stubs.size; i++ ) + { + if ( !isdefined( buildable ) || level.buildable_stubs[i].equipname == buildable ) + { + if ( !isdefined( buildable ) && is_true( level.buildable_stubs[i].ignore_open_sesame ) ) + continue; + + if ( isdefined( buildable ) || level.buildable_stubs[i].persistent != 3 ) + level.buildable_stubs[i] maps\mp\zombies\_zm_buildables::buildablestub_finish_build( player ); + } + } +#/ +} + +zombie_devgui_give_claymores() +{ +/# + self endon( "disconnect" ); + self notify( "give_planted_grenade_thread" ); + self endon( "give_planted_grenade_thread" ); + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + + if ( isdefined( self get_player_placeable_mine() ) ) + self takeweapon( self get_player_placeable_mine() ); + + self thread maps\mp\zombies\_zm_weap_claymore::claymore_setup(); + + while ( true ) + { + self givemaxammo( "claymore_zm" ); + wait 1; + } +#/ +} + +zombie_devgui_give_lethal( weapon ) +{ +/# + self endon( "disconnect" ); + self notify( "give_lethal_grenade_thread" ); + self endon( "give_lethal_grenade_thread" ); + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + + if ( isdefined( self get_player_lethal_grenade() ) ) + self takeweapon( self get_player_lethal_grenade() ); + + self giveweapon( weapon ); + self set_player_lethal_grenade( weapon ); + + while ( true ) + { + self givemaxammo( weapon ); + wait 1; + } +#/ +} + +zombie_devgui_give_frags() +{ +/# + zombie_devgui_give_lethal( "frag_grenade_zm" ); +#/ +} + +zombie_devgui_give_sticky() +{ +/# + zombie_devgui_give_lethal( "sticky_grenade_zm" ); +#/ +} + +zombie_devgui_give_monkey() +{ +/# + self endon( "disconnect" ); + self notify( "give_tactical_grenade_thread" ); + self endon( "give_tactical_grenade_thread" ); + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + + if ( isdefined( self get_player_tactical_grenade() ) ) + self takeweapon( self get_player_tactical_grenade() ); + + if ( isdefined( level.zombiemode_devgui_cymbal_monkey_give ) ) + { + self [[ level.zombiemode_devgui_cymbal_monkey_give ]](); + + while ( true ) + { + self givemaxammo( "cymbal_monkey_zm" ); + wait 1; + } + } +#/ +} + +zombie_devgui_give_beacon() +{ +/# + self endon( "disconnect" ); + self notify( "give_tactical_grenade_thread" ); + self endon( "give_tactical_grenade_thread" ); + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + + if ( isdefined( self get_player_tactical_grenade() ) ) + self takeweapon( self get_player_tactical_grenade() ); + + if ( isdefined( level.zombiemode_devgui_beacon_give ) ) + { + self [[ level.zombiemode_devgui_beacon_give ]](); + + while ( true ) + { + self givemaxammo( "beacon_zm" ); + wait 1; + } + } +#/ +} + +zombie_devgui_give_time_bomb() +{ +/# + self endon( "disconnect" ); + self notify( "give_tactical_grenade_thread" ); + self endon( "give_tactical_grenade_thread" ); + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + + if ( isdefined( self get_player_tactical_grenade() ) ) + self takeweapon( self get_player_tactical_grenade() ); + + if ( isdefined( level.zombiemode_time_bomb_give_func ) ) + self [[ level.zombiemode_time_bomb_give_func ]](); +#/ +} + +zombie_devgui_give_black_hole_bomb() +{ +/# + self endon( "disconnect" ); + self notify( "give_tactical_grenade_thread" ); + self endon( "give_tactical_grenade_thread" ); + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + + if ( isdefined( self get_player_tactical_grenade() ) ) + self takeweapon( self get_player_tactical_grenade() ); + + if ( isdefined( level.zombiemode_devgui_black_hole_bomb_give ) ) + { + self [[ level.zombiemode_devgui_black_hole_bomb_give ]](); + + while ( true ) + { + self givemaxammo( "zombie_black_hole_bomb" ); + wait 1; + } + } +#/ +} + +zombie_devgui_give_dolls() +{ +/# + self endon( "disconnect" ); + self notify( "give_tactical_grenade_thread" ); + self endon( "give_tactical_grenade_thread" ); + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + + if ( isdefined( self get_player_tactical_grenade() ) ) + self takeweapon( self get_player_tactical_grenade() ); + + if ( isdefined( level.zombiemode_devgui_nesting_dolls_give ) ) + { + self [[ level.zombiemode_devgui_nesting_dolls_give ]](); + + while ( true ) + { + self givemaxammo( "zombie_nesting_dolls" ); + wait 1; + } + } +#/ +} + +zombie_devgui_give_quantum_bomb() +{ +/# + self endon( "disconnect" ); + self notify( "give_tactical_grenade_thread" ); + self endon( "give_tactical_grenade_thread" ); + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + + if ( isdefined( self get_player_tactical_grenade() ) ) + self takeweapon( self get_player_tactical_grenade() ); + + if ( isdefined( level.zombiemode_devgui_quantum_bomb_give ) ) + { + self [[ level.zombiemode_devgui_quantum_bomb_give ]](); + + while ( true ) + { + self givemaxammo( "zombie_quantum_bomb" ); + wait 1; + } + } +#/ +} + +zombie_devgui_give_emp_bomb() +{ +/# + self endon( "disconnect" ); + self notify( "give_tactical_grenade_thread" ); + self endon( "give_tactical_grenade_thread" ); + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + + if ( isdefined( self get_player_tactical_grenade() ) ) + self takeweapon( self get_player_tactical_grenade() ); + + if ( isdefined( level.zombiemode_devgui_emp_bomb_give ) ) + { + self [[ level.zombiemode_devgui_emp_bomb_give ]](); + + while ( true ) + { + self givemaxammo( "emp_grenade_zm" ); + wait 1; + } + } +#/ +} + +zombie_devgui_invulnerable( playerindex, onoff ) +{ +/# + players = get_players(); + + if ( !isdefined( playerindex ) ) + { + for ( i = 0; i < players.size; i++ ) + zombie_devgui_invulnerable( i, onoff ); + } + else if ( players.size > playerindex ) + { + if ( onoff ) + players[playerindex] enableinvulnerability(); + else + players[playerindex] disableinvulnerability(); + } +#/ +} + +zombie_devgui_kill() +{ +/# + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + self disableinvulnerability(); + death_from = ( randomfloatrange( -20, 20 ), randomfloatrange( -20, 20 ), randomfloatrange( -20, 20 ) ); + self dodamage( self.health + 666, self.origin + death_from ); +#/ +} + +zombie_devgui_toggle_ammo() +{ +/# + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + self notify( "devgui_toggle_ammo" ); + self endon( "devgui_toggle_ammo" ); + self.ammo4evah = !is_true( self.ammo4evah ); + + while ( isdefined( self ) && self.ammo4evah ) + { + weapon = self getcurrentweapon(); + + if ( weapon != "none" ) + { + self setweaponoverheating( 0, 0 ); + max = weaponmaxammo( weapon ); + + if ( isdefined( max ) ) + self setweaponammostock( weapon, max ); + + if ( isdefined( self get_player_tactical_grenade() ) ) + self givemaxammo( self get_player_tactical_grenade() ); + + if ( isdefined( self get_player_lethal_grenade() ) ) + self givemaxammo( self get_player_lethal_grenade() ); + } + + wait 1; + } +#/ +} + +zombie_devgui_toggle_ignore() +{ +/# + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + self.ignoreme = !self.ignoreme; + + if ( self.ignoreme ) + setdvar( "ai_showFailedPaths", 0 ); +#/ +} + +zombie_devgui_revive() +{ +/# + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + self reviveplayer(); + self notify( "stop_revive_trigger" ); + + if ( isdefined( self.revivetrigger ) ) + { + self.revivetrigger delete(); + self.revivetrigger = undefined; + } + + self allowjump( 1 ); + self.ignoreme = 0; + self.laststand = undefined; + self notify( "player_revived", self ); +#/ +} + +zombie_devgui_give_health() +{ +/# + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + self notify( "devgui_health" ); + self endon( "devgui_health" ); + self endon( "disconnect" ); + self endon( "death" ); + level.devcheater = 1; + + while ( true ) + { + self.maxhealth = 100000; + self.health = 100000; + self waittill_any( "player_revived", "perk_used", "spawned_player" ); + wait 2; + } +#/ +} + +zombie_devgui_give_perk( perk ) +{ +/# + vending_triggers = getentarray( "zombie_vending", "targetname" ); + player = get_players()[0]; + level.devcheater = 1; + + if ( vending_triggers.size < 1 ) + return; + + for ( i = 0; i < vending_triggers.size; i++ ) + { + if ( vending_triggers[i].script_noteworthy == perk ) + { + vending_triggers[i] notify( "trigger", player ); + return; + } + } +#/ +} + +zombie_devgui_give_powerup( powerup_name, now, origin ) +{ +/# + player = get_players()[0]; + found = 0; + level.devcheater = 1; + + for ( i = 0; i < level.zombie_powerup_array.size; i++ ) + { + if ( level.zombie_powerup_array[i] == powerup_name ) + { + level.zombie_powerup_index = i; + found = 1; + break; + } + } + + if ( !found ) + return; + + direction = player getplayerangles(); + direction_vec = anglestoforward( direction ); + eye = player geteye(); + scale = 8000; + direction_vec = ( direction_vec[0] * scale, direction_vec[1] * scale, direction_vec[2] * scale ); + trace = bullettrace( eye, eye + direction_vec, 0, undefined ); + level.zombie_devgui_power = 1; + level.zombie_vars["zombie_drop_item"] = 1; + level.powerup_drop_count = 0; + + if ( isdefined( origin ) ) + level thread maps\mp\zombies\_zm_powerups::powerup_drop( origin ); + else if ( !isdefined( now ) || now ) + level thread maps\mp\zombies\_zm_powerups::powerup_drop( trace["position"] ); +#/ +} + +zombie_devgui_goto_round( target_round ) +{ +/# + player = get_players()[0]; + + if ( target_round < 1 ) + target_round = 1; + + level.devcheater = 1; + level.zombie_total = 0; + maps\mp\zombies\_zm::ai_calculate_health( target_round ); + level.round_number = target_round - 1; + level notify( "kill_round" ); + wait 1; + zombies = get_round_enemy_array(); + + if ( isdefined( zombies ) ) + { + for ( i = 0; i < zombies.size; i++ ) + { + if ( is_true( zombies[i].ignore_devgui_death ) ) + continue; + + zombies[i] dodamage( zombies[i].health + 666, zombies[i].origin ); + } + } +#/ +} + +zombie_devgui_monkey_round() +{ +/# + if ( isdefined( level.next_monkey_round ) ) + zombie_devgui_goto_round( level.next_monkey_round ); +#/ +} + +zombie_devgui_thief_round() +{ +/# + if ( isdefined( level.next_thief_round ) ) + zombie_devgui_goto_round( level.next_thief_round ); +#/ +} + +zombie_devgui_dog_round( num_dogs ) +{ +/# + if ( !isdefined( level.dogs_enabled ) || !level.dogs_enabled ) + return; + + if ( !isdefined( level.dog_rounds_enabled ) || !level.dog_rounds_enabled ) + return; + + if ( !isdefined( level.enemy_dog_spawns ) || level.enemy_dog_spawns.size < 1 ) + return; + + if ( !flag( "dog_round" ) ) + setdvar( "force_dogs", num_dogs ); + else + { + + } + + zombie_devgui_goto_round( level.round_number + 1 ); +#/ +} + +zombie_devgui_dog_round_skip() +{ +/# + if ( isdefined( level.next_dog_round ) ) + zombie_devgui_goto_round( level.next_dog_round ); +#/ +} + +zombie_devgui_dump_zombie_vars() +{ +/# + if ( !isdefined( level.zombie_vars ) ) + return; + + if ( level.zombie_vars.size > 0 ) + println( "#### Zombie Variables ####" ); + else + return; + + var_names = getarraykeys( level.zombie_vars ); + + for ( i = 0; i < level.zombie_vars.size; i++ ) + { + key = var_names[i]; + println( key + ": " + level.zombie_vars[key] ); + } + + println( "##### End Zombie Variables #####" ); +#/ +} + +zombie_devgui_pack_current_weapon() +{ +/# + players = get_players(); + reviver = players[0]; + level.devcheater = 1; + + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + weap = maps\mp\zombies\_zm_weapons::get_base_name( players[i] getcurrentweapon() ); + weapon = get_upgrade( weap ); + + if ( isdefined( weapon ) ) + { + players[i] takeweapon( weap ); + players[i] giveweapon( weapon, 0, players[i] maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); + players[i] givestartammo( weapon ); + players[i] switchtoweapon( weapon ); + } + } + } +#/ +} + +zombie_devgui_unpack_current_weapon() +{ +/# + players = get_players(); + reviver = players[0]; + level.devcheater = 1; + + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + weap = players[i] getcurrentweapon(); + weapon = maps\mp\zombies\_zm_weapons::get_base_weapon_name( weap, 1 ); + + if ( isdefined( weapon ) ) + { + players[i] takeweapon( weap ); + players[i] giveweapon( weapon, 0, players[i] maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); + players[i] givestartammo( weapon ); + players[i] switchtoweapon( weapon ); + } + } + } +#/ +} + +zombie_devgui_reopt_current_weapon() +{ +/# + players = get_players(); + reviver = players[0]; + level.devcheater = 1; + + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + weap = players[i] getcurrentweapon(); + weapon = weap; + + if ( isdefined( weapon ) ) + { + if ( isdefined( players[i].pack_a_punch_weapon_options ) ) + players[i].pack_a_punch_weapon_options[weapon] = undefined; + + players[i] takeweapon( weap ); + players[i] giveweapon( weapon, 0, players[i] maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); + players[i] givestartammo( weapon ); + players[i] switchtoweapon( weapon ); + } + } + } +#/ +} + +zombie_devgui_take_weapon() +{ +/# + players = get_players(); + reviver = players[0]; + level.devcheater = 1; + + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + weap = players[i] getcurrentweapon(); + weapon = weap; + + if ( isdefined( weapon ) ) + { + players[i] takeweapon( weap ); + players[i] switch_back_primary_weapon( undefined ); + } + } + } +#/ +} + +zombie_devgui_take_weapons( give_fallback ) +{ +/# + players = get_players(); + reviver = players[0]; + level.devcheater = 1; + + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + players[i] takeallweapons(); + + if ( give_fallback ) + players[i] give_fallback_weapon(); + } + } +#/ +} + +get_upgrade( weaponname ) +{ +/# + if ( isdefined( level.zombie_weapons[weaponname] ) && isdefined( level.zombie_weapons[weaponname].upgrade_name ) ) + return maps\mp\zombies\_zm_weapons::get_upgrade_weapon( weaponname, 0 ); + else + return maps\mp\zombies\_zm_weapons::get_upgrade_weapon( weaponname, 1 ); +#/ +} + +zombie_devgui_director_easy() +{ +/# + if ( isdefined( level.director_devgui_health ) ) + [[ level.director_devgui_health ]](); +#/ +} + +zombie_devgui_chest_never_move() +{ +/# + level notify( "devgui_chest_end_monitor" ); + level endon( "devgui_chest_end_monitor" ); + + for (;;) + { + level.chest_accessed = 0; + wait 5; + } +#/ +} + +zombie_devgui_disable_kill_thread_toggle() +{ +/# + if ( !is_true( level.disable_kill_thread ) ) + level.disable_kill_thread = 1; + else + level.disable_kill_thread = 0; +#/ +} + +zombie_devgui_check_kill_thread_every_frame_toggle() +{ +/# + if ( !is_true( level.check_kill_thread_every_frame ) ) + level.check_kill_thread_every_frame = 1; + else + level.check_kill_thread_every_frame = 0; +#/ +} + +zombie_devgui_kill_thread_test_mode_toggle() +{ +/# + if ( !is_true( level.kill_thread_test_mode ) ) + level.kill_thread_test_mode = 1; + else + level.kill_thread_test_mode = 0; +#/ +} + +showonespawnpoint( spawn_point, color, notification, height, print ) +{ +/# + if ( !isdefined( height ) || height <= 0 ) + height = get_player_height(); + + if ( !isdefined( print ) ) + print = spawn_point.classname; + + center = spawn_point.origin; + forward = anglestoforward( spawn_point.angles ); + right = anglestoright( spawn_point.angles ); + forward = vectorscale( forward, 16 ); + right = vectorscale( right, 16 ); + a = center + forward - right; + b = center + forward + right; + c = center - forward + right; + d = center - forward - right; + thread lineuntilnotified( a, b, color, 0, notification ); + thread lineuntilnotified( b, c, color, 0, notification ); + thread lineuntilnotified( c, d, color, 0, notification ); + thread lineuntilnotified( d, a, color, 0, notification ); + thread lineuntilnotified( a, a + ( 0, 0, height ), color, 0, notification ); + thread lineuntilnotified( b, b + ( 0, 0, height ), color, 0, notification ); + thread lineuntilnotified( c, c + ( 0, 0, height ), color, 0, notification ); + thread lineuntilnotified( d, d + ( 0, 0, height ), color, 0, notification ); + a += ( 0, 0, height ); + b += ( 0, 0, height ); + c += ( 0, 0, height ); + d += ( 0, 0, height ); + thread lineuntilnotified( a, b, color, 0, notification ); + thread lineuntilnotified( b, c, color, 0, notification ); + thread lineuntilnotified( c, d, color, 0, notification ); + thread lineuntilnotified( d, a, color, 0, notification ); + center += ( 0, 0, height / 2 ); + arrow_forward = anglestoforward( spawn_point.angles ); + arrowhead_forward = anglestoforward( spawn_point.angles ); + arrowhead_right = anglestoright( spawn_point.angles ); + arrow_forward = vectorscale( arrow_forward, 32 ); + arrowhead_forward = vectorscale( arrowhead_forward, 24 ); + arrowhead_right = vectorscale( arrowhead_right, 8 ); + a = center + arrow_forward; + b = center + arrowhead_forward - arrowhead_right; + c = center + arrowhead_forward + arrowhead_right; + thread lineuntilnotified( center, a, color, 0, notification ); + thread lineuntilnotified( a, b, color, 0, notification ); + thread lineuntilnotified( a, c, color, 0, notification ); + thread print3duntilnotified( spawn_point.origin + ( 0, 0, height ), print, color, 1, 1, notification ); + return; +#/ +} + +print3duntilnotified( origin, text, color, alpha, scale, notification ) +{ +/# + level endon( notification ); + + for (;;) + { + print3d( origin, text, color, alpha, scale ); + wait 0.05; + } +#/ +} + +lineuntilnotified( start, end, color, depthtest, notification ) +{ +/# + level endon( notification ); + + for (;;) + { + line( start, end, color, depthtest ); + wait 0.05; + } +#/ +} + +devgui_debug_hud() +{ +/# + if ( isdefined( self get_player_lethal_grenade() ) ) + self givemaxammo( self get_player_lethal_grenade() ); + + self thread maps\mp\zombies\_zm_weap_claymore::claymore_setup(); + + if ( isdefined( level.zombiemode_time_bomb_give_func ) ) + { + if ( isdefined( self get_player_tactical_grenade() ) ) + self takeweapon( self get_player_tactical_grenade() ); + + self [[ level.zombiemode_time_bomb_give_func ]](); + } + else if ( isdefined( level.zombiemode_devgui_cymbal_monkey_give ) ) + { + if ( isdefined( self get_player_tactical_grenade() ) ) + self takeweapon( self get_player_tactical_grenade() ); + + self [[ level.zombiemode_devgui_cymbal_monkey_give ]](); + } + else if ( isdefined( self get_player_tactical_grenade() ) ) + self givemaxammo( self get_player_tactical_grenade() ); + + if ( isdefined( level.zombie_include_equipment ) && !isdefined( self get_player_equipment() ) ) + { + equipment = getarraykeys( level.zombie_include_equipment ); + + if ( isdefined( equipment[0] ) ) + self zombie_devgui_equipment_give( equipment[0] ); + } + + candidate_list = []; + + foreach ( zone in level.zones ) + { + if ( isdefined( zone.unitrigger_stubs ) ) + candidate_list = arraycombine( candidate_list, zone.unitrigger_stubs, 1, 0 ); + } + + foreach ( stub in candidate_list ) + { + if ( isdefined( stub.piece ) && isdefined( stub.piece.buildable_slot ) ) + { + if ( !isdefined( self player_get_buildable_piece( stub.piece.buildable_slot ) ) ) + self thread maps\mp\zombies\_zm_buildables::player_take_piece( stub.piece ); + } + } + + for ( i = 0; i < 10; i++ ) + { + zombie_devgui_give_powerup( "free_perk", 1, self.origin ); + wait 0.25; + } + + zombie_devgui_give_powerup( "insta_kill", 1, self.origin ); + wait 0.25; + zombie_devgui_give_powerup( "double_points", 1, self.origin ); + wait 0.25; + zombie_devgui_give_powerup( "fire_sale", 1, self.origin ); + wait 0.25; + zombie_devgui_give_powerup( "minigun", 1, self.origin ); + wait 0.25; + zombie_devgui_give_powerup( "bonfire_sale", 1, self.origin ); + wait 0.25; + self weapon_give( "tar21_upgraded_zm+gl" ); +#/ +} diff --git a/ZM/Core/maps/mp/zombies/_zm_equip_gasmask.gsc b/ZM/Core/maps/mp/zombies/_zm_equip_gasmask.gsc new file mode 100644 index 0000000..bdf6897 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_equip_gasmask.gsc @@ -0,0 +1,215 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_laststand; + +init() +{ + if ( !maps\mp\zombies\_zm_equipment::is_equipment_included( "equip_gasmask_zm" ) ) + return; + + registerclientfield( "toplayer", "gasmaskoverlay", 16000, 1, "int" ); + maps\mp\zombies\_zm_equipment::register_equipment( "equip_gasmask_zm", &"ZOMBIE_EQUIP_GASMASK_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_GASMASK_HOWTO", undefined, "gasmask", ::gasmask_activation_watcher_thread ); + level.deathcard_spawn_func = ::remove_gasmask_on_player_bleedout; + precacheitem( "lower_equip_gasmask_zm" ); + onplayerconnect_callback( ::gasmask_on_player_connect ); +} + +gasmask_on_player_connect() +{ + +} + +gasmask_removed_watcher_thread() +{ + self notify( "only_one_gasmask_removed_thread" ); + self endon( "only_one_gasmask_removed_thread" ); + self endon( "disconnect" ); + + self waittill( "equip_gasmask_zm_taken" ); + + if ( isdefined( level.zombiemode_gasmask_reset_player_model ) ) + { + ent_num = self.characterindex; + + if ( isdefined( self.zm_random_char ) ) + ent_num = self.zm_random_char; + + self [[ level.zombiemode_gasmask_reset_player_model ]]( ent_num ); + } + + if ( isdefined( level.zombiemode_gasmask_reset_player_viewmodel ) ) + { + ent_num = self.characterindex; + + if ( isdefined( self.zm_random_char ) ) + ent_num = self.zm_random_char; + + self [[ level.zombiemode_gasmask_reset_player_viewmodel ]]( ent_num ); + } + + self setclientfieldtoplayer( "gasmaskoverlay", 0 ); +} + +gasmask_activation_watcher_thread() +{ + self endon( "zombified" ); + self endon( "disconnect" ); + self endon( "equip_gasmask_zm_taken" ); + self thread gasmask_removed_watcher_thread(); + self thread remove_gasmask_on_game_over(); + + if ( isdefined( level.zombiemode_gasmask_set_player_model ) ) + { + ent_num = self.characterindex; + + if ( isdefined( self.zm_random_char ) ) + ent_num = self.zm_random_char; + + self [[ level.zombiemode_gasmask_set_player_model ]]( ent_num ); + } + + if ( isdefined( level.zombiemode_gasmask_set_player_viewmodel ) ) + { + ent_num = self.characterindex; + + if ( isdefined( self.zm_random_char ) ) + ent_num = self.zm_random_char; + + self [[ level.zombiemode_gasmask_set_player_viewmodel ]]( ent_num ); + } + + while ( true ) + { + self waittill_either( "equip_gasmask_zm_activate", "equip_gasmask_zm_deactivate" ); + + if ( self maps\mp\zombies\_zm_equipment::is_equipment_active( "equip_gasmask_zm" ) ) + { + self increment_is_drinking(); + self setactionslot( 1, "" ); + + if ( isdefined( level.zombiemode_gasmask_set_player_model ) ) + { + ent_num = self.characterindex; + + if ( isdefined( self.zm_random_char ) ) + ent_num = self.zm_random_char; + + self [[ level.zombiemode_gasmask_change_player_headmodel ]]( ent_num, 1 ); + } + + clientnotify( "gmsk2" ); + + self waittill( "weapon_change_complete" ); + + self setclientfieldtoplayer( "gasmaskoverlay", 1 ); + } + else + { + self increment_is_drinking(); + self setactionslot( 1, "" ); + + if ( isdefined( level.zombiemode_gasmask_set_player_model ) ) + { + ent_num = self.characterindex; + + if ( isdefined( self.zm_random_char ) ) + ent_num = self.zm_random_char; + + self [[ level.zombiemode_gasmask_change_player_headmodel ]]( ent_num, 0 ); + } + + self takeweapon( "equip_gasmask_zm" ); + self giveweapon( "lower_equip_gasmask_zm" ); + self switchtoweapon( "lower_equip_gasmask_zm" ); + wait 0.05; + self setclientfieldtoplayer( "gasmaskoverlay", 0 ); + + self waittill( "weapon_change_complete" ); + + self takeweapon( "lower_equip_gasmask_zm" ); + self giveweapon( "equip_gasmask_zm" ); + } + + if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + if ( self is_multiple_drinking() ) + { + self decrement_is_drinking(); + self setactionslot( 1, "weapon", "equip_gasmask_zm" ); + self notify( "equipment_select_response_done" ); + continue; + } + else if ( isdefined( self.prev_weapon_before_equipment_change ) && self hasweapon( self.prev_weapon_before_equipment_change ) ) + { + if ( self.prev_weapon_before_equipment_change != self getcurrentweapon() ) + { + self switchtoweapon( self.prev_weapon_before_equipment_change ); + + self waittill( "weapon_change_complete" ); + } + } + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + { + if ( primaryweapons[0] != self getcurrentweapon() ) + { + self switchtoweapon( primaryweapons[0] ); + + self waittill( "weapon_change_complete" ); + } + } + else + self switchtoweapon( get_player_melee_weapon() ); + } + } + + self setactionslot( 1, "weapon", "equip_gasmask_zm" ); + + if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) ) + self decrement_is_drinking(); + + self notify( "equipment_select_response_done" ); + } +} + +remove_gasmask_on_player_bleedout() +{ + self setclientfieldtoplayer( "gasmaskoverlay", 0 ); + wait_network_frame(); + wait_network_frame(); + self setclientfieldtoplayer( "gasmaskoverlay", 1 ); +} + +remove_gasmask_on_game_over() +{ + self endon( "equip_gasmask_zm_taken" ); + + level waittill( "pre_end_game" ); + + self setclientfieldtoplayer( "gasmaskoverlay", 0 ); +} + +gasmask_active() +{ + return self maps\mp\zombies\_zm_equipment::is_equipment_active( "equip_gasmask_zm" ); +} + +gasmask_debug_print( msg, color ) +{ +/# + if ( !getdvarint( _hash_4D1BCA99 ) ) + return; + + if ( !isdefined( color ) ) + color = ( 1, 1, 1 ); + + print3d( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), msg, color, 1, 1, 40 ); +#/ +} diff --git a/ZM/Core/maps/mp/zombies/_zm_equip_hacker.gsc b/ZM/Core/maps/mp/zombies/_zm_equip_hacker.gsc new file mode 100644 index 0000000..0e4a55c --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_equip_hacker.gsc @@ -0,0 +1,808 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_equip_hacker; + +init() +{ + if ( !maps\mp\zombies\_zm_equipment::is_equipment_included( "equip_hacker_zm" ) ) + return; + + maps\mp\zombies\_zm_equipment::register_equipment( "equip_hacker_zm", &"ZOMBIE_EQUIP_HACKER_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_HACKER_HOWTO", undefined, "hacker" ); + level._hackable_objects = []; + level._pooled_hackable_objects = []; + onplayerconnect_callback( ::hacker_on_player_connect ); + level thread hack_trigger_think(); + level thread hacker_trigger_pool_think(); + level thread hacker_round_reward(); + + if ( getdvarint( _hash_53BD7080 ) == 1 ) + level thread hacker_debug(); +} + +hacker_round_reward() +{ + while ( true ) + { + level waittill( "end_of_round" ); + + if ( !isdefined( level._from_nml ) ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i] get_player_equipment() ) && players[i] get_player_equipment() == "equip_hacker_zm" ) + { + if ( isdefined( players[i].equipment_got_in_round["equip_hacker_zm"] ) ) + { + got_in_round = players[i].equipment_got_in_round["equip_hacker_zm"]; + rounds_kept = level.round_number - got_in_round; + rounds_kept -= 1; + + if ( rounds_kept > 0 ) + { + rounds_kept = min( rounds_kept, 5 ); + score = rounds_kept * 500; + players[i] maps\mp\zombies\_zm_score::add_to_player_score( int( score ) ); + } + } + } + } + } + else + level._from_nml = undefined; + } +} + +hacker_debug() +{ + while ( true ) + { + for ( i = 0; i < level._hackable_objects.size; i++ ) + { + hackable = level._hackable_objects[i]; + + if ( isdefined( hackable.pooled ) && hackable.pooled ) + { + if ( isdefined( hackable._trigger ) ) + { + col = vectorscale( ( 0, 1, 0 ), 255.0 ); + + if ( isdefined( hackable.custom_debug_color ) ) + col = hackable.custom_debug_color; +/# + print3d( hackable.origin, "+", col, 1, 1 ); +#/ + } + else + { +/# + print3d( hackable.origin, "+", vectorscale( ( 0, 0, 1 ), 255.0 ), 1, 1 ); +#/ + } + + continue; + } +/# + print3d( hackable.origin, "+", vectorscale( ( 1, 0, 0 ), 255.0 ), 1, 1 ); +#/ + } + + wait 0.1; + } +} + +hacker_trigger_pool_think() +{ + if ( !isdefined( level._zombie_hacker_trigger_pool_size ) ) + level._zombie_hacker_trigger_pool_size = 8; + + pool_active = 0; + level._hacker_pool = []; + + while ( true ) + { + if ( pool_active ) + { + if ( !any_hackers_active() ) + destroy_pooled_items(); + else + { + sweep_pooled_items(); + add_eligable_pooled_items(); + } + } + else if ( any_hackers_active() ) + pool_active = 1; + + wait 0.1; + } +} + +destroy_pooled_items() +{ + pool_active = 0; + + for ( i = 0; i < level._hacker_pool.size; i++ ) + { + level._hacker_pool[i]._trigger delete(); + level._hacker_pool[i]._trigger = undefined; + } + + level._hacker_pool = []; +} + +sweep_pooled_items() +{ + new_hacker_pool = []; + + for ( i = 0; i < level._hacker_pool.size; i++ ) + { + if ( level._hacker_pool[i] should_pooled_object_exist() ) + { + new_hacker_pool[new_hacker_pool.size] = level._hacker_pool[i]; + continue; + } + + if ( isdefined( level._hacker_pool[i]._trigger ) ) + level._hacker_pool[i]._trigger delete(); + + level._hacker_pool[i]._trigger = undefined; + } + + level._hacker_pool = new_hacker_pool; +} + +should_pooled_object_exist() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] hacker_active() ) + { + if ( isdefined( self.entity ) ) + { + if ( self.entity != players[i] ) + { + if ( distance2dsquared( players[i].origin, self.entity.origin ) <= self.radius * self.radius ) + return true; + } + } + else if ( distance2dsquared( players[i].origin, self.origin ) <= self.radius * self.radius ) + return true; + } + } + + return false; +} + +add_eligable_pooled_items() +{ + candidates = []; + + for ( i = 0; i < level._hackable_objects.size; i++ ) + { + hackable = level._hackable_objects[i]; + + if ( isdefined( hackable.pooled ) && hackable.pooled && !isdefined( hackable._trigger ) ) + { + if ( !isinarray( level._hacker_pool, hackable ) ) + { + if ( hackable should_pooled_object_exist() ) + candidates[candidates.size] = hackable; + } + } + } + + for ( i = 0; i < candidates.size; i++ ) + { + candidate = candidates[i]; + height = 72; + radius = 32; + + if ( isdefined( candidate.radius ) ) + radius = candidate.radius; + + if ( isdefined( candidate.height ) ) + height = candidate.height; + + trigger = spawn( "trigger_radius_use", candidate.origin, 0, radius, height ); + trigger usetriggerrequirelookat(); + trigger triggerignoreteam(); + trigger setcursorhint( "HINT_NOICON" ); + trigger.radius = radius; + trigger.height = height; + trigger.beinghacked = 0; + candidate._trigger = trigger; + level._hacker_pool[level._hacker_pool.size] = candidate; + } +} + +get_hackable_trigger() +{ + if ( isdefined( self.door ) ) + return self.door; + else if ( isdefined( self.perk ) ) + return self.perk; + else if ( isdefined( self.window ) ) + return self.window.unitrigger_stub.trigger; + else if ( isdefined( self.classname ) && getsubstr( self.classname, 0, 7 ) == "trigger_" ) + return self; +} + +any_hackers_active() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] hacker_active() ) + return true; + } + + return false; +} + +register_hackable( name, callback_func, qualifier_func ) +{ + structs = getstructarray( name, "script_noteworthy" ); + + if ( !isdefined( structs ) ) + { +/# + println( "Error: register_hackable called on script_noteworthy " + name + " but no such structs exist." ); +#/ + return; + } + + for ( i = 0; i < structs.size; i++ ) + { + if ( !isinarray( level._hackable_objects, structs[i] ) ) + { + structs[i]._hack_callback_func = callback_func; + structs[i]._hack_qualifier_func = qualifier_func; + structs[i].pooled = level._hacker_pooled; + + if ( isdefined( structs[i].targetname ) ) + structs[i].hacker_target = getent( structs[i].targetname, "targetname" ); + + level._hackable_objects[level._hackable_objects.size] = structs[i]; + + if ( isdefined( level._hacker_pooled ) ) + level._pooled_hackable_objects[level._pooled_hackable_objects.size] = structs[i]; + + structs[i] thread hackable_object_thread(); + wait_network_frame(); + } + } +} + +register_hackable_struct( struct, callback_func, qualifier_func ) +{ + if ( !isinarray( level._hackable_objects, struct ) ) + { + struct._hack_callback_func = callback_func; + struct._hack_qualifier_func = qualifier_func; + struct.pooled = level._hacker_pooled; + + if ( isdefined( struct.targetname ) ) + struct.hacker_target = getent( struct.targetname, "targetname" ); + + level._hackable_objects[level._hackable_objects.size] = struct; + + if ( isdefined( level._hacker_pooled ) ) + level._pooled_hackable_objects[level._pooled_hackable_objects.size] = struct; + + struct thread hackable_object_thread(); + } +} + +register_pooled_hackable_struct( struct, callback_func, qualifier_func ) +{ + level._hacker_pooled = 1; + register_hackable_struct( struct, callback_func, qualifier_func ); + level._hacker_pooled = undefined; +} + +register_pooled_hackable( name, callback_func, qualifier_func ) +{ + level._hacker_pooled = 1; + register_hackable( name, callback_func, qualifier_func ); + level._hacker_pooled = undefined; +} + +deregister_hackable_struct( struct ) +{ + if ( isinarray( level._hackable_objects, struct ) ) + { + new_list = []; + + for ( i = 0; i < level._hackable_objects.size; i++ ) + { + if ( level._hackable_objects[i] != struct ) + { + new_list[new_list.size] = level._hackable_objects[i]; + continue; + } + + level._hackable_objects[i] notify( "hackable_deregistered" ); + + if ( isdefined( level._hackable_objects[i]._trigger ) ) + level._hackable_objects[i]._trigger delete(); + + if ( isdefined( level._hackable_objects[i].pooled ) && level._hackable_objects[i].pooled ) + { + arrayremovevalue( level._hacker_pool, level._hackable_objects[i] ); + arrayremovevalue( level._pooled_hackable_objects, level._hackable_objects[i] ); + } + } + + level._hackable_objects = new_list; + } +} + +deregister_hackable( noteworthy ) +{ + new_list = []; + + for ( i = 0; i < level._hackable_objects.size; i++ ) + { + if ( !isdefined( level._hackable_objects[i].script_noteworthy ) || level._hackable_objects[i].script_noteworthy != noteworthy ) + new_list[new_list.size] = level._hackable_objects[i]; + else + { + level._hackable_objects[i] notify( "hackable_deregistered" ); + + if ( isdefined( level._hackable_objects[i]._trigger ) ) + level._hackable_objects[i]._trigger delete(); + } + + if ( isdefined( level._hackable_objects[i].pooled ) && level._hackable_objects[i].pooled ) + arrayremovevalue( level._hacker_pool, level._hackable_objects[i] ); + } + + level._hackable_objects = new_list; +} + +hack_trigger_think() +{ + while ( true ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + for ( j = 0; j < level._hackable_objects.size; j++ ) + { + hackable = level._hackable_objects[j]; + + if ( isdefined( hackable._trigger ) ) + { + qualifier_passed = 1; + + if ( isdefined( hackable._hack_qualifier_func ) ) + qualifier_passed = hackable [[ hackable._hack_qualifier_func ]]( player ); + + if ( player hacker_active() && qualifier_passed && !hackable._trigger.beinghacked ) + { + hackable._trigger setinvisibletoplayer( player, 0 ); + continue; + } + + hackable._trigger setinvisibletoplayer( player, 1 ); + } + } + } + + wait 0.1; + } +} + +is_facing( facee ) +{ + orientation = self getplayerangles(); + forwardvec = anglestoforward( orientation ); + forwardvec2d = ( forwardvec[0], forwardvec[1], 0 ); + unitforwardvec2d = vectornormalize( forwardvec2d ); + tofaceevec = facee.origin - self.origin; + tofaceevec2d = ( tofaceevec[0], tofaceevec[1], 0 ); + unittofaceevec2d = vectornormalize( tofaceevec2d ); + dotproduct = vectordot( unitforwardvec2d, unittofaceevec2d ); + dot_limit = 0.8; + + if ( isdefined( facee.dot_limit ) ) + dot_limit = facee.dot_limit; + + return dotproduct > dot_limit; +} + +can_hack( hackable ) +{ + if ( !isalive( self ) ) + return false; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + return false; + + if ( !self hacker_active() ) + return false; + + if ( !isdefined( hackable._trigger ) ) + return false; + + if ( isdefined( hackable.player ) ) + { + if ( hackable.player != self ) + return false; + } + + if ( self throwbuttonpressed() ) + return false; + + if ( self fragbuttonpressed() ) + return false; + + if ( isdefined( hackable._hack_qualifier_func ) ) + { + if ( !hackable [[ hackable._hack_qualifier_func ]]( self ) ) + return false; + } + + if ( !isinarray( level._hackable_objects, hackable ) ) + return false; + + radsquared = 1024; + + if ( isdefined( hackable.radius ) ) + radsquared = hackable.radius * hackable.radius; + + origin = hackable.origin; + + if ( isdefined( hackable.entity ) ) + origin = hackable.entity.origin; + + if ( distance2dsquared( self.origin, origin ) > radsquared ) + return false; + + if ( !isdefined( hackable.no_touch_check ) && !self istouching( hackable._trigger ) ) + return false; + + if ( !self is_facing( hackable ) ) + return false; + + if ( !isdefined( hackable.no_sight_check ) && !sighttracepassed( self.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), origin, 0, undefined ) ) + return false; + + if ( !isdefined( hackable.no_bullet_trace ) && !bullettracepassed( self.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), origin, 0, undefined ) ) + return false; + + return true; +} + +is_hacking( hackable ) +{ + return can_hack( hackable ) && self usebuttonpressed(); +} + +set_hack_hint_string() +{ + if ( isdefined( self._trigger ) ) + { + if ( isdefined( self.custom_string ) ) + self._trigger sethintstring( self.custom_string ); + else if ( !isdefined( self.script_int ) || self.script_int <= 0 ) + self._trigger sethintstring( &"ZOMBIE_HACK_NO_COST" ); + else + self._trigger sethintstring( &"ZOMBIE_HACK", self.script_int ); + } +} + +tidy_on_deregister( hackable ) +{ + self endon( "clean_up_tidy_up" ); + + hackable waittill( "hackable_deregistered" ); + + if ( isdefined( self.hackerprogressbar ) ) + self.hackerprogressbar maps\mp\gametypes_zm\_hud_util::destroyelem(); + + if ( isdefined( self.hackertexthud ) ) + self.hackertexthud destroy(); +} + +hacker_do_hack( hackable ) +{ + timer = 0; + hacked = 0; + hackable._trigger.beinghacked = 1; + + if ( !isdefined( self.hackerprogressbar ) ) + self.hackerprogressbar = self maps\mp\gametypes_zm\_hud_util::createprimaryprogressbar(); + + if ( !isdefined( self.hackertexthud ) ) + self.hackertexthud = newclienthudelem( self ); + + hack_duration = hackable.script_float; + + if ( self hasperk( "specialty_fastreload" ) ) + hack_duration *= 0.66; + + hack_duration = max( 1.5, hack_duration ); + self thread tidy_on_deregister( hackable ); + self.hackerprogressbar maps\mp\gametypes_zm\_hud_util::updatebar( 0.01, 1 / hack_duration ); + self.hackertexthud.alignx = "center"; + self.hackertexthud.aligny = "middle"; + self.hackertexthud.horzalign = "center"; + self.hackertexthud.vertalign = "bottom"; + self.hackertexthud.y = -113; + + if ( issplitscreen() ) + self.hackertexthud.y = -107; + + self.hackertexthud.foreground = 1; + self.hackertexthud.font = "default"; + self.hackertexthud.fontscale = 1.8; + self.hackertexthud.alpha = 1; + self.hackertexthud.color = ( 1, 1, 1 ); + self.hackertexthud settext( &"ZOMBIE_HACKING" ); + self playloopsound( "zmb_progress_bar", 0.5 ); + + while ( self is_hacking( hackable ) ) + { + wait 0.05; + timer += 0.05; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + break; + + if ( timer >= hack_duration ) + { + hacked = 1; + break; + } + } + + self stoploopsound( 0.5 ); + + if ( hacked ) + self playsound( "vox_mcomp_hack_success" ); + else + self playsound( "vox_mcomp_hack_fail" ); + + if ( isdefined( self.hackerprogressbar ) ) + self.hackerprogressbar maps\mp\gametypes_zm\_hud_util::destroyelem(); + + if ( isdefined( self.hackertexthud ) ) + self.hackertexthud destroy(); + + hackable set_hack_hint_string(); + + if ( isdefined( hackable._trigger ) ) + hackable._trigger.beinghacked = 0; + + self notify( "clean_up_tidy_up" ); + return hacked; +} + +lowreadywatcher( player ) +{ + player endon( "disconnected" ); + self endon( "kill_lowreadywatcher" ); + + self waittill( "hackable_deregistered" ); +} + +hackable_object_thread() +{ + self endon( "hackable_deregistered" ); + height = 72; + radius = 64; + + if ( isdefined( self.radius ) ) + radius = self.radius; + + if ( isdefined( self.height ) ) + height = self.height; + + if ( !isdefined( self.pooled ) ) + { + trigger = spawn( "trigger_radius_use", self.origin, 0, radius, height ); + trigger usetriggerrequirelookat(); + trigger setcursorhint( "HINT_NOICON" ); + trigger.radius = radius; + trigger.height = height; + trigger.beinghacked = 0; + self._trigger = trigger; + } + + cost = 0; + + if ( isdefined( self.script_int ) ) + cost = self.script_int; + + duration = 1.0; + + if ( isdefined( self.script_float ) ) + duration = self.script_float; + + while ( true ) + { + wait 0.1; + + if ( !isdefined( self._trigger ) ) + continue; + + players = get_players(); + + if ( isdefined( self._trigger ) ) + { + if ( isdefined( self.entity ) ) + { + self.origin = self.entity.origin; + self._trigger.origin = self.entity.origin; + + if ( isdefined( self.trigger_offset ) ) + self._trigger.origin += self.trigger_offset; + } + } + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] can_hack( self ) ) + { + self set_hack_hint_string(); + break; + } + } + + for ( i = 0; i < players.size; i++ ) + { + hacker = players[i]; + + if ( !hacker is_hacking( self ) ) + continue; + + if ( hacker.score >= cost || cost <= 0 ) + { + self thread lowreadywatcher( hacker ); + hack_success = hacker hacker_do_hack( self ); + self notify( "kill_lowreadywatcher" ); + + if ( isdefined( hacker ) ) + { + + } + + if ( isdefined( hacker ) && hack_success ) + { + if ( cost ) + { + if ( cost > 0 ) + hacker maps\mp\zombies\_zm_score::minus_to_player_score( cost ); + else + hacker maps\mp\zombies\_zm_score::add_to_player_score( cost * -1 ); + } + + hacker notify( "successful_hack" ); + + if ( isdefined( self._hack_callback_func ) ) + self thread [[ self._hack_callback_func ]]( hacker ); + } + + continue; + } + + hacker play_sound_on_ent( "no_purchase" ); + hacker maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money", undefined, 1 ); + } + } +} + +hacker_on_player_connect() +{ + struct = spawnstruct(); + struct.origin = self.origin; + struct.radius = 48; + struct.height = 64; + struct.script_float = 10; + struct.script_int = 500; + struct.entity = self; + struct.trigger_offset = vectorscale( ( 0, 0, 1 ), 48.0 ); + register_pooled_hackable_struct( struct, ::player_hack, ::player_qualifier ); + struct thread player_hack_disconnect_watcher( self ); +} + +player_hack_disconnect_watcher( player ) +{ + player waittill( "disconnect" ); + + deregister_hackable_struct( self ); +} + +player_hack( hacker ) +{ + if ( isdefined( self.entity ) ) + self.entity maps\mp\zombies\_zm_score::player_add_points( "hacker_transfer", 500 ); + + if ( isdefined( hacker ) ) + hacker thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "hack_plr" ); +} + +player_qualifier( player ) +{ + if ( player == self.entity ) + return false; + + if ( self.entity maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + return false; + + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + return false; + + if ( isdefined( self.entity.sessionstate == "spectator" ) && self.entity.sessionstate == "spectator" ) + return false; + + return true; +} + +hide_hint_when_hackers_active( custom_logic_func, custom_logic_func_param ) +{ + invis_to_any = 0; + + while ( true ) + { + if ( isdefined( custom_logic_func ) ) + self [[ custom_logic_func ]]( custom_logic_func_param ); + + if ( maps\mp\zombies\_zm_equip_hacker::any_hackers_active() ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] hacker_active() ) + { + self setinvisibletoplayer( players[i], 1 ); + invis_to_any = 1; + continue; + } + + self setinvisibletoplayer( players[i], 0 ); + } + } + else if ( invis_to_any ) + { + invis_to_any = 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + self setinvisibletoplayer( players[i], 0 ); + } + + wait 0.1; + } +} + +hacker_debug_print( msg, color ) +{ +/# + if ( !getdvarint( _hash_428DE100 ) ) + return; + + if ( !isdefined( color ) ) + color = ( 1, 1, 1 ); + + print3d( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), msg, color, 1, 1, 40 ); +#/ +} diff --git a/ZM/Core/maps/mp/zombies/_zm_equip_turbine.gsc b/ZM/Core/maps/mp/zombies/_zm_equip_turbine.gsc new file mode 100644 index 0000000..a08929c --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_equip_turbine.gsc @@ -0,0 +1,754 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\zombies\_zm_power; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_buildables; + +init( hint = &"ZOMBIE_EQUIP_TURBINE_PICKUP_HINT_STRING", howto = &"ZOMBIE_EQUIP_TURBINE_HOWTO" ) +{ + if ( !maps\mp\zombies\_zm_equipment::is_equipment_included( "equip_turbine_zm" ) ) + return; + + level.turbine_name = "equip_turbine_zm"; + maps\mp\zombies\_zm_equipment::register_equipment( "equip_turbine_zm", hint, howto, "turbine_zm_icon", "turbine", undefined, ::transferturbine, ::dropturbine, ::pickupturbine, ::placeturbine ); + maps\mp\zombies\_zm_equipment::add_placeable_equipment( "equip_turbine_zm", "p6_anim_zm_buildable_turbine", ::destroy_placed_turbine ); + level thread onplayerconnect(); + maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "equip_turbine", hint ); + level._effect["turbine_on"] = loadfx( "maps/zombie/fx_zmb_tranzit_wind_turbine_on" ); + level._effect["turbine_med"] = loadfx( "maps/zombie/fx_zmb_tranzit_wind_turbine_med" ); + level._effect["turbine_low"] = loadfx( "maps/zombie/fx_zmb_tranzit_wind_turbine_low" ); + level._effect["turbine_aoe"] = loadfx( "maps/zombie/fx_zmb_tranzit_wind_turbine_aoe" ); + level._turbine_disappear_fx = loadfx( "maps/zombie/fx_zmb_tranzit_turbine_explo" ); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread onplayerspawned(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + self thread setupwatchers(); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread watchturbineuse(); + } +} + +setupwatchers() +{ + self waittill( "weapon_watchers_created" ); + + watcher = maps\mp\gametypes_zm\_weaponobjects::getweaponobjectwatcher( "equip_turbine" ); + watcher.onspawnretrievetriggers = maps\mp\zombies\_zm_equipment::equipment_onspawnretrievableweaponobject; +} + +watchturbineuse() +{ + self notify( "watchTurbineUse" ); + self endon( "watchTurbineUse" ); + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "equipment_placed", weapon, weapname ); + + if ( weapname == level.turbine_name ) + { + self cleanupoldturbine(); + self.buildableturbine = weapon; + self thread startturbinedeploy( weapon ); + level notify( "turbine_deployed" ); + } + } +} + +cleanupoldturbine( preserve_state ) +{ + if ( isdefined( self.localpower ) ) + { + maps\mp\zombies\_zm_power::end_local_power( self.localpower ); + self notify( "depower_on_disconnect" ); + self.localpower = undefined; + self.turbine_power_is_on = 0; + } + + self.turbine_is_powering_on = 0; + + if ( isdefined( self.buildableturbine ) ) + { + if ( isdefined( self.buildableturbine.stub ) ) + { + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildableturbine.stub ); + self.buildableturbine.stub = undefined; + } + + self.buildableturbine stoploopsound(); + self.buildableturbine delete(); + + if ( !( isdefined( preserve_state ) && preserve_state ) ) + { + self.turbine_health = undefined; + self.turbine_emped = undefined; + self.turbine_emp_time = undefined; + } + } +} + +watchforcleanup() +{ + self notify( "turbine_cleanup" ); + self endon( "turbine_cleanup" ); + evt = self waittill_any_return( "death_or_disconnect", "equip_turbine_zm_taken", "equip_turbine_zm_pickup" ); + + if ( isdefined( self ) ) + self cleanupoldturbine( evt == "equip_turbine_zm_pickup" ); +} + +depower_on_disconnect( localpower ) +{ + self notify( "depower_on_disconnect" ); + self endon( "depower_on_disconnect" ); + + self waittill( "disconnect" ); + + if ( isdefined( localpower ) ) + maps\mp\zombies\_zm_power::end_local_power( localpower ); +} + +placeturbine( origin, angles ) +{ + item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_turbine", "equip_turbine_zm", origin, angles ); + return item; +} + +dropturbine() +{ + item = thread maps\mp\zombies\_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_turbine", "equip_turbine_zm", self.origin, self.angles ); + + if ( isdefined( item ) ) + { + item.turbine_power_on = self.turbine_power_on; + item.turbine_power_level = self.turbine_power_level; + item.turbine_round_start = self.turbine_round_start; + item.turbine_health = self.turbine_health; + item.turbine_emped = self.turbine_emped; + item.turbine_emp_time = self.turbine_emp_time; + } + + self.turbine_is_powering_on = undefined; + self.turbine_power_on = undefined; + self.turbine_power_level = undefined; + self.turbine_round_start = undefined; + self.turbine_health = undefined; + self.turbine_emped = undefined; + self.turbine_emp_time = undefined; + return item; +} + +pickupturbine( item ) +{ + item.owner = self; + self.turbine_power_on = item.turbine_power_on; + item.turbine_power_on = undefined; + self.turbine_power_level = item.turbine_power_level; + self.turbine_round_start = item.turbine_round_start; + self.turbine_health = item.turbine_health; + item.turbine_health = undefined; + item.turbine_power_level = undefined; + item.turbine_round_start = undefined; + self.turbine_emped = item.turbine_emped; + self.turbine_emp_time = item.turbine_emp_time; + item.turbine_emped = undefined; + item.turbine_emp_time = undefined; + self.turbine_is_powering_on = undefined; +} + +transferturbine( fromplayer, toplayer ) +{ + while ( isdefined( toplayer.turbine_is_powering_on ) && toplayer.turbine_is_powering_on || isdefined( fromplayer.turbine_is_powering_on ) && fromplayer.turbine_is_powering_on ) + wait 0.05; + + if ( isdefined( fromplayer.buildableturbine ) && ( isdefined( fromplayer.buildableturbine.dying ) && fromplayer.buildableturbine.dying ) ) + fromplayer cleanupoldturbine( 0 ); + + if ( isdefined( toplayer.buildableturbine ) && ( isdefined( toplayer.buildableturbine.dying ) && toplayer.buildableturbine.dying ) ) + toplayer cleanupoldturbine( 0 ); + + buildableturbine = toplayer.buildableturbine; + localpower = toplayer.localpower; + turbine_power_on = toplayer.turbine_power_on; + turbine_power_is_on = toplayer.turbine_power_is_on; + turbine_power_level = toplayer.turbine_power_level; + turbine_round_start = toplayer.turbine_round_start; + turbine_health = toplayer.turbine_health; + turbine_emped = toplayer.turbine_emped; + turbine_emp_time = toplayer.turbine_emp_time; + toplayer.buildableturbine = fromplayer.buildableturbine; + fromplayer.buildableturbine = buildableturbine; + toplayer.localpower = fromplayer.localpower; + fromplayer.localpower = localpower; + toplayer.turbine_power_on = fromplayer.turbine_power_on; + fromplayer.turbine_power_on = turbine_power_on; + toplayer.turbine_power_is_on = fromplayer.turbine_power_is_on; + fromplayer.turbine_power_is_on = turbine_power_is_on; + toplayer.turbine_power_level = fromplayer.turbine_power_level; + toplayer.turbine_round_start = fromplayer.turbine_round_start; + fromplayer.turbine_power_level = turbine_power_level; + fromplayer.turbine_round_start = turbine_round_start; + toplayer.turbine_health = fromplayer.turbine_health; + fromplayer.turbine_health = turbine_health; + toplayer.turbine_emped = fromplayer.turbine_emped; + fromplayer.turbine_emped = turbine_emped; + toplayer.turbine_emp_time = fromplayer.turbine_emp_time; + fromplayer.turbine_emp_time = turbine_emp_time; + toplayer.turbine_is_powering_on = undefined; + fromplayer.turbine_is_powering_on = undefined; + toplayer notify( "equip_turbine_zm_taken" ); + toplayer.buildableturbine.original_owner = toplayer; + toplayer thread startturbinedeploy( toplayer.buildableturbine ); + fromplayer notify( "equip_turbine_zm_taken" ); + + if ( isdefined( fromplayer.buildableturbine ) ) + { + fromplayer thread startturbinedeploy( fromplayer.buildableturbine ); + fromplayer.buildableturbine.original_owner = fromplayer; + fromplayer.buildableturbine.owner = fromplayer; + } + else + fromplayer maps\mp\zombies\_zm_equipment::equipment_release( "equip_turbine_zm" ); +} + +startturbinedeploy( weapon ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_turbine_zm_taken" ); + self thread watchforcleanup(); + origin = weapon.origin; + powerradius = 335; + + if ( !isdefined( self.turbine_health ) ) + { + self.turbine_health = 1200; + self.turbine_power_level = 4; + self.turbine_power_on = 1; + self.turbine_is_powering_on = undefined; + } + + if ( !isdefined( self.turbine_round_start ) ) + { + self.turbine_round_start = level.round_number; + self.turbine_power_on = 1; + } + + self thread turbinedecay(); + self thread turbinepowerdiminish( origin, powerradius ); + + if ( isdefined( weapon ) ) + { +/# + self thread debugturbine( powerradius ); +#/ + self thread turbineaudio(); + self thread turbineanim(); + self thread turbinepowerthink( weapon, powerradius ); + + if ( isdefined( weapon.equipment_can_move ) && weapon.equipment_can_move ) + self thread turbinepowermove( weapon ); + + self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( weapon ); + + weapon waittill( "death" ); + + self thread turbinepoweroff( origin, powerradius ); + self notify( "turbine_cleanup" ); + } +} + +turbine_watch_for_emp( weapon, powerradius ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_turbine_zm_taken" ); + self.buildableturbine endon( "death" ); + + if ( !should_watch_for_emp() ) + return; + + while ( true ) + { + level waittill( "emp_detonate", origin, radius ); + + if ( distancesquared( origin, self.buildableturbine.origin ) < radius * radius ) + break; + } + + self.turbine_emped = 1; + self.turbine_emp_time = gettime(); + self notify( "turbine_power_change" ); +} + +turbinepowerthink( weapon, powerradius ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_turbine_zm_taken" ); + self.buildableturbine endon( "death" ); + origin = weapon.origin; + self thread turbine_watch_for_emp( weapon, powerradius ); + + if ( isdefined( self.turbine_power_on ) && self.turbine_power_on || isdefined( self.turbine_emped ) && self.turbine_emped ) + self thread turbinepoweron( origin, powerradius ); + + while ( isdefined( self.buildableturbine ) ) + { + self waittill( "turbine_power_change" ); + + if ( isdefined( self.turbine_emped ) && self.turbine_emped ) + { + self thread turbinepoweroff( origin, powerradius ); + + if ( isdefined( weapon ) ) + origin = weapon.origin; + + self thread turbinepoweron( origin, powerradius ); + } + else if ( !( isdefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) ) + self thread turbinepoweroff( origin, powerradius ); + else + { + if ( isdefined( weapon ) ) + origin = weapon.origin; + + self thread turbinepoweron( origin, powerradius ); + } + } +} + +turbinepowermove( weapon ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_turbine_zm_taken" ); + self.buildableturbine endon( "death" ); + origin = weapon.origin; + + while ( true ) + { + if ( origin != weapon.origin ) + { + if ( isdefined( self.localpower ) ) + self.localpower = maps\mp\zombies\_zm_power::move_local_power( self.localpower, origin ); + + origin = weapon.origin; + } + + wait 0.5; + } +} + +turbinewarmup() +{ + if ( isdefined( self.turbine_emped ) && self.turbine_emped ) + { + emp_time = level.zombie_vars["emp_perk_off_time"]; + now = gettime(); + emp_time_left = emp_time - ( now - self.turbine_emp_time ) / 1000; + + if ( emp_time_left > 0 ) + wait( emp_time_left ); + + self.turbine_emped = undefined; + self.turbine_emp_time = undefined; + } + + self.buildableturbine maps\mp\zombies\_zm_equipment::signal_equipment_activated( 3 ); + wait 0.5; + self.buildableturbine maps\mp\zombies\_zm_equipment::signal_equipment_activated( 2 ); + wait 0.5; + self.buildableturbine maps\mp\zombies\_zm_equipment::signal_equipment_activated( 1 ); + wait 0.5; +} + +turbinepoweron( origin, powerradius ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_turbine_zm_taken" ); + self.buildableturbine endon( "death" ); + + if ( !( isdefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) && !( isdefined( self.turbine_is_powering_on ) && self.turbine_is_powering_on ) && !( isdefined( self.buildableturbine.dying ) && self.buildableturbine.dying ) ) + { + self.turbine_is_powering_on = 1; + self.buildableturbine playloopsound( "zmb_turbine_loop", 2 ); + self turbinewarmup(); + + if ( isdefined( self.localpower ) ) + maps\mp\zombies\_zm_power::end_local_power( self.localpower ); + + self.localpower = undefined; + self.turbine_power_is_on = 0; + + if ( !( isdefined( self.turbine_emped ) && self.turbine_emped ) ) + { + self.localpower = maps\mp\zombies\_zm_power::add_local_power( origin, powerradius ); + self thread depower_on_disconnect( self.localpower ); + self.turbine_power_is_on = 1; + self thread turbineaudio(); + } + + self.turbine_is_powering_on = 0; + self thread turbinefx(); + self thread turbinedecay(); + } +} + +turbinepoweroff( origin, powerradius ) +{ + if ( isdefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) + { + if ( isdefined( self.localpower ) ) + maps\mp\zombies\_zm_power::end_local_power( self.localpower ); + + self notify( "depower_on_disconnect" ); + self.localpower = undefined; + self.turbine_power_is_on = 0; + self thread turbineaudio(); + + if ( !( isdefined( self.buildableturbine.dying ) && self.buildableturbine.dying ) ) + self thread turbineanim(); + } +} + +turbine_disappear_fx( origin, waittime ) +{ + if ( isdefined( waittime ) && waittime > 0 ) + wait( waittime ); + + playfx( level._turbine_disappear_fx, origin ); + + if ( isdefined( self.buildableturbine ) ) + playsoundatposition( "zmb_turbine_explo", self.buildableturbine.origin ); +} + +turbinefxonce( withaoe ) +{ + if ( isdefined( self ) && isdefined( self.buildableturbine ) && ( isdefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) ) + { + value = 0; + + switch ( self.turbine_power_level ) + { + case 4: + case 3: + value = 1; + break; + case 2: + value = 2; + break; + case 1: + value = 3; + break; + } + + if ( withaoe ) + { + if ( isdefined( self.buildableturbine.equipment_can_move ) && self.buildableturbine.equipment_can_move && ( isdefined( self.buildableturbine.move_parent.ismoving ) && self.buildableturbine.move_parent.ismoving ) ) + value |= 4; + else + value |= 8; + } + + if ( value && isdefined( self.buildableturbine ) && ( isdefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) ) + self.buildableturbine thread maps\mp\zombies\_zm_equipment::signal_equipment_activated( value ); + } +} + +turbinefx() +{ + self endon( "disconnect" ); + self endon( "equip_turbine_zm_taken" ); + + while ( isdefined( self ) && isdefined( self.buildableturbine ) && ( isdefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) ) + { + self turbinefxonce( 1 ); + wait 0.5; + self turbinefxonce( 0 ); + wait 0.5; + } +} + +turbineaudio() +{ + if ( !isdefined( self.buildableturbine ) ) + return; + + if ( !( isdefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) || isdefined( self.turbine_emped ) && self.turbine_emped ) + { + self.buildableturbine stoploopsound(); + return; + } + + self.buildableturbine playloopsound( "zmb_turbine_loop", 2 ); +} + +#using_animtree("zombie_turbine"); + +init_animtree() +{ + scriptmodelsuseanimtree( #animtree ); +} + +turbineanim( wait_for_end ) +{ + if ( !isdefined( self.buildableturbine ) ) + return; + + animlength = 0; + self.buildableturbine useanimtree( #animtree ); + + if ( isdefined( self.buildableturbine.dying ) && self.buildableturbine.dying ) + { + animlength = getanimlength( %o_zombie_buildable_turbine_death ); + self.buildableturbine setanim( %o_zombie_buildable_turbine_death ); + } + else if ( isdefined( self.turbine_emped ) && self.turbine_emped ) + { + self.buildableturbine clearanim( %o_zombie_buildable_turbine_fullpower, 0 ); + return; + } + else + { + switch ( self.turbine_power_level ) + { + case 4: + case 3: + animlength = getanimlength( %o_zombie_buildable_turbine_fullpower ); + self.buildableturbine setanim( %o_zombie_buildable_turbine_fullpower ); + break; + case 2: + animlength = getanimlength( %o_zombie_buildable_turbine_halfpower ); + self.buildableturbine setanim( %o_zombie_buildable_turbine_halfpower ); + break; + case 1: + animlength = getanimlength( %o_zombie_buildable_turbine_neardeath ); + self.buildableturbine setanim( %o_zombie_buildable_turbine_neardeath ); + break; + } + } + + if ( isdefined( wait_for_end ) && wait_for_end ) + wait( animlength ); +} + +turbinedecay() +{ + self notify( "turbineDecay" ); + self endon( "turbineDecay" ); + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_turbine_zm_taken" ); + self.buildableturbine endon( "death" ); + roundlives = 4; + + if ( !isdefined( self.turbine_power_level ) ) + self.turbine_power_level = roundlives; + + while ( self.turbine_health > 0 ) + { + old_power_level = self.turbine_power_level; + + if ( isdefined( self.turbine_emped ) && self.turbine_emped && !!( isdefined( self.turbine_is_powering_on ) && self.turbine_is_powering_on ) ) + { + emp_time = level.zombie_vars["emp_perk_off_time"]; + now = gettime(); + emp_time_left = emp_time - ( now - self.turbine_emp_time ) / 1000; + + if ( emp_time_left <= 0 ) + { + self.turbine_emped = undefined; + self.turbine_emp_time = undefined; + self.turbine_power_is_on = 0; + old_power_level = -1; + } + } + + if ( isdefined( self.turbine_emped ) && self.turbine_emped ) + self.turbine_power_level = 0; + else if ( isdefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) + { + cost = 1; + + if ( isdefined( self.localpower ) ) + cost += maps\mp\zombies\_zm_power::get_local_power_cost( self.localpower ); + + self.turbine_health -= cost; + + if ( self.turbine_health < 200 ) + self.turbine_power_level = 1; + else if ( self.turbine_health < 600 ) + self.turbine_power_level = 2; + else + self.turbine_power_level = 4; + } + + if ( old_power_level != self.turbine_power_level ) + { + self notify( "turbine_power_change" ); + self thread turbineaudio(); + + if ( !( isdefined( self.buildableturbine.dying ) && self.buildableturbine.dying ) ) + self thread turbineanim(); + } + + wait 1; + } + + self destroy_placed_turbine(); + + if ( isdefined( self.buildableturbine ) ) + turbine_disappear_fx( self.buildableturbine.origin ); + + self thread wait_and_take_equipment(); + self.turbine_health = undefined; + self.turbine_power_level = undefined; + self.turbine_round_start = undefined; + self.turbine_power_on = undefined; + self.turbine_emped = undefined; + self.turbine_emp_time = undefined; + self cleanupoldturbine(); +} + +destroy_placed_turbine() +{ + if ( isdefined( self.buildableturbine ) ) + { + if ( isdefined( self.buildableturbine.dying ) && self.buildableturbine.dying ) + { + while ( isdefined( self.buildableturbine ) ) + wait 0.05; + + return; + } + + if ( isdefined( self.buildableturbine.stub ) ) + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildableturbine.stub ); + + thread turbine_disappear_fx( self.buildableturbine.origin, 0.75 ); + self.buildableturbine.dying = 1; + self turbineanim( 1 ); + } +} + +wait_and_take_equipment() +{ + wait 0.05; + self thread maps\mp\zombies\_zm_equipment::equipment_release( "equip_turbine_zm" ); +} + +turbinepowerdiminish( origin, powerradius ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_turbine_zm_taken" ); + self.buildableturbine endon( "death" ); + + while ( !( isdefined( self.buildableturbine.dying ) && self.buildableturbine.dying ) ) + { + if ( isdefined( self.turbine_power_level ) && isdefined( self.buildableturbine ) ) + { + switch ( self.turbine_power_level ) + { + case 4: + break; + case 3: + break; + case 2: + self.turbine_power_on = 1; + wait( randomintrange( 12, 20 ) ); + self turbinepoweroff( origin, powerradius ); + self.turbine_power_on = 0; + wait( randomintrange( 3, 8 ) ); + self turbinepoweron( origin, powerradius ); + break; + case 1: + self.turbine_power_on = 1; + wait( randomintrange( 3, 7 ) ); + self turbinepoweroff( origin, powerradius ); + self.turbine_power_on = 0; + wait( randomintrange( 6, 12 ) ); + self turbinepoweron( origin, powerradius ); + break; + } + } + + wait 0.05; + } +} + +debugturbine( radius ) +{ +/# + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_turbine_zm_taken" ); + self.buildableturbine endon( "death" ); + + while ( isdefined( self.buildableturbine ) ) + { + if ( getdvarint( _hash_EB512CB7 ) ) + { + color = ( 0, 1, 0 ); + text = ""; + + if ( isdefined( self.turbine_health ) ) + text = "" + self.turbine_health + ""; + + if ( isdefined( self.buildableturbine.dying ) && self.buildableturbine.dying ) + { + text = "dying"; + color = ( 0, 0, 0 ); + } + else if ( isdefined( self.turbine_emped ) && self.turbine_emped ) + { + color = ( 0, 0, 1 ); + emp_time = level.zombie_vars["emp_perk_off_time"]; + now = gettime(); + emp_time_left = int( emp_time - ( now - self.turbine_emp_time ) / 1000 ); + text = text + " emp(" + emp_time_left + ")"; + } + else if ( isdefined( self.turbine_is_powering_on ) && self.turbine_is_powering_on ) + text += " warmup"; + else if ( isdefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) + { + if ( self.turbine_health < 200 ) + color = ( 1, 0, 0 ); + else if ( self.turbine_health < 600 ) + color = ( 1, 0.7, 0 ); + else + color = ( 1, 1, 0 ); + } + + print3d( self.buildableturbine.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), text, color, 1, 0.5, 1 ); + } + + wait 0.05; + } +#/ +} diff --git a/ZM/Core/maps/mp/zombies/_zm_equipment.gsc b/ZM/Core/maps/mp/zombies/_zm_equipment.gsc new file mode 100644 index 0000000..3ea6fd1 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_equipment.gsc @@ -0,0 +1,1707 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_spawner; + +init() +{ + init_equipment_upgrade(); + onplayerconnect_callback( ::equipment_placement_watcher ); + level._equipment_disappear_fx = loadfx( "maps/zombie/fx_zmb_tranzit_electrap_explo" ); + + if ( !( isdefined( level.disable_fx_zmb_tranzit_shield_explo ) && level.disable_fx_zmb_tranzit_shield_explo ) ) + level._riotshield_dissapear_fx = loadfx( "maps/zombie/fx_zmb_tranzit_shield_explo" ); + + level.placeable_equipment_destroy_fn = []; + + if ( !( isdefined( level._no_equipment_activated_clientfield ) && level._no_equipment_activated_clientfield ) ) + registerclientfield( "scriptmover", "equipment_activated", 12000, 4, "int" ); +} + +signal_equipment_activated( val = 1 ) +{ + if ( isdefined( level._no_equipment_activated_clientfield ) && level._no_equipment_activated_clientfield ) + return; + + self endon( "death" ); + self setclientfield( "equipment_activated", val ); + + for ( i = 0; i < 2; i++ ) + wait_network_frame(); + + self setclientfield( "equipment_activated", 0 ); +} + +register_equipment( equipment_name, hint, howto_hint, hint_icon, equipmentvo, watcher_thread, transfer_fn, drop_fn, pickup_fn, place_fn ) +{ + if ( !isdefined( level.zombie_include_equipment ) || !( isdefined( level.zombie_include_equipment[equipment_name] ) && level.zombie_include_equipment[equipment_name] ) ) + return; + + precachestring( hint ); + + if ( isdefined( hint_icon ) ) + precacheshader( hint_icon ); + + struct = spawnstruct(); + + if ( !isdefined( level.zombie_equipment ) ) + level.zombie_equipment = []; + + struct.equipment_name = equipment_name; + struct.hint = hint; + struct.howto_hint = howto_hint; + struct.hint_icon = hint_icon; + struct.vox = equipmentvo; + struct.triggers = []; + struct.models = []; + struct.watcher_thread = watcher_thread; + struct.transfer_fn = transfer_fn; + struct.drop_fn = drop_fn; + struct.pickup_fn = pickup_fn; + struct.place_fn = place_fn; + level.zombie_equipment[equipment_name] = struct; +} + +is_equipment_included( equipment_name ) +{ + if ( !isdefined( level.zombie_include_equipment ) ) + return 0; + + return isdefined( level.zombie_include_equipment[equipment_name] ); +} + +include_zombie_equipment( equipment_name ) +{ + if ( !isdefined( level.zombie_include_equipment ) ) + level.zombie_include_equipment = []; + + level.zombie_include_equipment[equipment_name] = 1; + precacheitem( equipment_name ); +} + +limit_zombie_equipment( equipment_name, limited ) +{ + if ( !isdefined( level._limited_equipment ) ) + level._limited_equipment = []; + + if ( limited ) + level._limited_equipment[level._limited_equipment.size] = equipment_name; + else + arrayremovevalue( level._limited_equipment, equipment_name, 0 ); +} + +init_equipment_upgrade() +{ + equipment_spawns = []; + equipment_spawns = getentarray( "zombie_equipment_upgrade", "targetname" ); + + for ( i = 0; i < equipment_spawns.size; i++ ) + { + hint_string = get_equipment_hint( equipment_spawns[i].zombie_equipment_upgrade ); + equipment_spawns[i] sethintstring( hint_string ); + equipment_spawns[i] setcursorhint( "HINT_NOICON" ); + equipment_spawns[i] usetriggerrequirelookat(); + equipment_spawns[i] add_to_equipment_trigger_list( equipment_spawns[i].zombie_equipment_upgrade ); + equipment_spawns[i] thread equipment_spawn_think(); + } +} + +get_equipment_hint( equipment_name ) +{ + assert( isdefined( level.zombie_equipment[equipment_name] ), equipment_name + " was not included or is not registered with the equipment system." ); + return level.zombie_equipment[equipment_name].hint; +} + +get_equipment_howto_hint( equipment_name ) +{ + assert( isdefined( level.zombie_equipment[equipment_name] ), equipment_name + " was not included or is not registered with the equipment system." ); + return level.zombie_equipment[equipment_name].howto_hint; +} + +get_equipment_icon( equipment_name ) +{ + assert( isdefined( level.zombie_equipment[equipment_name] ), equipment_name + " was not included or is not registered with the equipment system." ); + return level.zombie_equipment[equipment_name].hint_icon; +} + +add_to_equipment_trigger_list( equipment_name ) +{ + assert( isdefined( level.zombie_equipment[equipment_name] ), equipment_name + " was not included or is not registered with the equipment system." ); + level.zombie_equipment[equipment_name].triggers[level.zombie_equipment[equipment_name].triggers.size] = self; + level.zombie_equipment[equipment_name].models[level.zombie_equipment[equipment_name].models.size] = getent( self.target, "targetname" ); +} + +equipment_spawn_think() +{ + for (;;) + { + self waittill( "trigger", player ); + + if ( player in_revive_trigger() || player.is_drinking > 0 ) + { + wait 0.1; + continue; + } + + if ( is_limited_equipment( self.zombie_equipment_upgrade ) ) + { + player setup_limited_equipment( self.zombie_equipment_upgrade ); + + if ( isdefined( level.hacker_tool_positions ) ) + { + new_pos = random( level.hacker_tool_positions ); + self.origin = new_pos.trigger_org; + model = getent( self.target, "targetname" ); + model.origin = new_pos.model_org; + model.angles = new_pos.model_ang; + } + } + + player equipment_give( self.zombie_equipment_upgrade ); + } +} + +set_equipment_invisibility_to_player( equipment, invisible ) +{ + triggers = level.zombie_equipment[equipment].triggers; + + for ( i = 0; i < triggers.size; i++ ) + { + if ( isdefined( triggers[i] ) ) + triggers[i] setinvisibletoplayer( self, invisible ); + } + + models = level.zombie_equipment[equipment].models; + + for ( i = 0; i < models.size; i++ ) + { + if ( isdefined( models[i] ) ) + models[i] setinvisibletoplayer( self, invisible ); + } +} + +equipment_take( equipment = self get_player_equipment() ) +{ + if ( !isdefined( equipment ) ) + return; + + if ( !self has_player_equipment( equipment ) ) + return; + + current = 0; + current_weapon = 0; + + if ( isdefined( self get_player_equipment() ) && equipment == self get_player_equipment() ) + current = 1; + + if ( equipment == self getcurrentweapon() ) + current_weapon = 1; +/# + println( "ZM EQUIPMENT: " + self.name + " lost " + equipment + "\\n" ); +#/ + if ( isdefined( self.current_equipment_active[equipment] ) && self.current_equipment_active[equipment] ) + { + self.current_equipment_active[equipment] = 0; + self notify( equipment + "_deactivate" ); + } + + self notify( equipment + "_taken" ); + self takeweapon( equipment ); + + if ( !is_limited_equipment( equipment ) || is_limited_equipment( equipment ) && !limited_equipment_in_use( equipment ) ) + self set_equipment_invisibility_to_player( equipment, 0 ); + + if ( current ) + { + self set_player_equipment( undefined ); + self setactionslot( 1, "" ); + } + else + arrayremovevalue( self.deployed_equipment, equipment ); + + if ( current_weapon ) + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + } +} + +equipment_give( equipment ) +{ + if ( !isdefined( equipment ) ) + return; + + if ( !isdefined( level.zombie_equipment[equipment] ) ) + return; + + if ( self has_player_equipment( equipment ) ) + return; +/# + println( "ZM EQUIPMENT: " + self.name + " got " + equipment + "\\n" ); +#/ + curr_weapon = self getcurrentweapon(); + curr_weapon_was_curr_equipment = self is_player_equipment( curr_weapon ); + self equipment_take(); + self set_player_equipment( equipment ); + self giveweapon( equipment ); + self setweaponammoclip( equipment, 1 ); + self thread show_equipment_hint( equipment ); + self notify( equipment + "_given" ); + self set_equipment_invisibility_to_player( equipment, 1 ); + self setactionslot( 1, "weapon", equipment ); + + if ( isdefined( level.zombie_equipment[equipment].watcher_thread ) ) + self thread [[ level.zombie_equipment[equipment].watcher_thread ]](); + + self thread equipment_slot_watcher( equipment ); + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", level.zombie_equipment[equipment].vox ); +} + +equipment_slot_watcher( equipment ) +{ + self notify( "kill_equipment_slot_watcher" ); + self endon( "kill_equipment_slot_watcher" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "weapon_change", curr_weapon, prev_weapon ); + + self.prev_weapon_before_equipment_change = undefined; + + if ( isdefined( prev_weapon ) && "none" != prev_weapon ) + { + prev_weapon_type = weaponinventorytype( prev_weapon ); + + if ( "primary" == prev_weapon_type || "altmode" == prev_weapon_type ) + self.prev_weapon_before_equipment_change = prev_weapon; + } + + if ( isdefined( level.zombie_equipment[equipment].watcher_thread ) ) + { + if ( curr_weapon == equipment ) + { + if ( self.current_equipment_active[equipment] == 1 ) + { + self notify( equipment + "_deactivate" ); + self.current_equipment_active[equipment] = 0; + } + else if ( self.current_equipment_active[equipment] == 0 ) + { + self notify( equipment + "_activate" ); + self.current_equipment_active[equipment] = 1; + } + + self waittill( "equipment_select_response_done" ); + } + } + else if ( curr_weapon == equipment && !self.current_equipment_active[equipment] ) + { + self notify( equipment + "_activate" ); + self.current_equipment_active[equipment] = 1; + } + else if ( curr_weapon != equipment && self.current_equipment_active[equipment] ) + { + self notify( equipment + "_deactivate" ); + self.current_equipment_active[equipment] = 0; + } + } +} + +is_limited_equipment( equipment ) +{ + if ( isdefined( level._limited_equipment ) ) + { + for ( i = 0; i < level._limited_equipment.size; i++ ) + { + if ( level._limited_equipment[i] == equipment ) + return true; + } + } + + return false; +} + +limited_equipment_in_use( equipment ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + current_equipment = players[i] get_player_equipment(); + + if ( isdefined( current_equipment ) && current_equipment == equipment ) + return true; + } + + if ( isdefined( level.dropped_equipment ) && isdefined( level.dropped_equipment[equipment] ) ) + return true; + + return false; +} + +setup_limited_equipment( equipment ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] set_equipment_invisibility_to_player( equipment, 1 ); + + self thread release_limited_equipment_on_disconnect( equipment ); + self thread release_limited_equipment_on_equipment_taken( equipment ); +} + +release_limited_equipment_on_equipment_taken( equipment ) +{ + self endon( "disconnect" ); + self waittill_either( equipment + "_taken", "spawned_spectator" ); + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] set_equipment_invisibility_to_player( equipment, 0 ); +} + +release_limited_equipment_on_disconnect( equipment ) +{ + self endon( equipment + "_taken" ); + + self waittill( "disconnect" ); + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isalive( players[i] ) ) + players[i] set_equipment_invisibility_to_player( equipment, 0 ); + } +} + +is_equipment_active( equipment ) +{ + if ( !isdefined( self.current_equipment_active ) || !isdefined( self.current_equipment_active[equipment] ) ) + return 0; + + return self.current_equipment_active[equipment]; +} + +init_equipment_hint_hudelem( x, y, alignx, aligny, fontscale, alpha ) +{ + self.x = x; + self.y = y; + self.alignx = alignx; + self.aligny = aligny; + self.fontscale = fontscale; + self.alpha = alpha; + self.sort = 20; +} + +setup_equipment_client_hintelem() +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( !isdefined( self.hintelem ) ) + self.hintelem = newclienthudelem( self ); + + if ( level.splitscreen ) + self.hintelem init_equipment_hint_hudelem( 160, 90, "center", "middle", 1.6, 1.0 ); + else + self.hintelem init_equipment_hint_hudelem( 320, 220, "center", "bottom", 1.6, 1.0 ); +} + +show_equipment_hint( equipment ) +{ + self notify( "kill_previous_show_equipment_hint_thread" ); + self endon( "kill_previous_show_equipment_hint_thread" ); + self endon( "death" ); + self endon( "disconnect" ); + + if ( isdefined( self.do_not_display_equipment_pickup_hint ) && self.do_not_display_equipment_pickup_hint ) + return; + + wait 0.5; + text = get_equipment_howto_hint( equipment ); + self show_equipment_hint_text( text ); +} + +show_equipment_hint_text( text ) +{ + self notify( "hide_equipment_hint_text" ); + wait 0.05; + self setup_equipment_client_hintelem(); + self.hintelem settext( text ); + self.hintelem.alpha = 1; + self.hintelem.font = "small"; + self.hintelem.fontscale = 1.25; + self.hintelem.hidewheninmenu = 1; + time = self waittill_notify_or_timeout( "hide_equipment_hint_text", 3.2 ); + + if ( isdefined( time ) ) + { + self.hintelem fadeovertime( 0.25 ); + self.hintelem.alpha = 0; + self waittill_notify_or_timeout( "hide_equipment_hint_text", 0.25 ); + } + + self.hintelem settext( "" ); + self.hintelem destroy(); +} + +equipment_onspawnretrievableweaponobject( watcher, player ) +{ + self.plant_parent = self; + iswallmount = isdefined( level.placeable_equipment_type[self.name] ) && level.placeable_equipment_type[self.name] == "wallmount"; + + if ( !isdefined( player.turret_placement ) || !player.turret_placement["result"] ) + { + if ( iswallmount || !getdvarint( "tu11_zombie_turret_placement_ignores_bodies" ) ) + { + self waittill( "stationary" ); + + waittillframeend; + + if ( iswallmount ) + { + if ( isdefined( player.planted_wallmount_on_a_zombie ) && player.planted_wallmount_on_a_zombie ) + { + equip_name = self.name; + thread equipment_disappear_fx( self.origin, undefined, self.angles ); + self delete(); + + if ( player hasweapon( equip_name ) ) + player setweaponammoclip( equip_name, 1 ); + + player.planted_wallmount_on_a_zombie = undefined; + return; + } + } + } + else + { + self.plant_parent = player; + self.origin = player.origin; + self.angles = player.angles; + wait_network_frame(); + } + } + + equipment = watcher.name + "_zm"; +/# + if ( !isdefined( player.current_equipment ) || player.current_equipment != equipment ) + { + assert( player has_deployed_equipment( equipment ) ); + assert( !isdefined( player.current_equipment ) ); + } +#/ + if ( isdefined( player.current_equipment ) && player.current_equipment == equipment ) + player equipment_to_deployed( equipment ); + + if ( isdefined( level.zombie_equipment[equipment].place_fn ) ) + { + if ( isdefined( player.turret_placement ) && player.turret_placement["result"] ) + { + plant_origin = player.turret_placement["origin"]; + plant_angles = player.turret_placement["angles"]; + } + else if ( isdefined( level.placeable_equipment_type[self.name] ) && level.placeable_equipment_type[self.name] == "wallmount" ) + { + plant_origin = self.origin; + plant_angles = self.angles; + } + else + { + plant_origin = self.origin; + plant_angles = self.angles; + } + + if ( isdefined( level.check_force_deploy_origin ) ) + { + if ( player [[ level.check_force_deploy_origin ]]( self, plant_origin, plant_angles ) ) + { + plant_origin = player.origin; + plant_angles = player.angles; + self.plant_parent = player; + } + } + else if ( isdefined( level.check_force_deploy_z ) ) + { + if ( player [[ level.check_force_deploy_z ]]( self, plant_origin, plant_angles ) ) + plant_origin = ( plant_origin[0], plant_origin[1], player.origin[2] + 10 ); + } + + if ( isdefined( iswallmount ) && iswallmount ) + self ghost(); + + replacement = player [[ level.zombie_equipment[equipment].place_fn ]]( plant_origin, plant_angles ); + + if ( isdefined( replacement ) ) + { + replacement.owner = player; + replacement.original_owner = player; + replacement.name = self.name; + player notify( "equipment_placed", replacement, self.name ); + + if ( isdefined( level.equipment_planted ) ) + player [[ level.equipment_planted ]]( replacement, equipment, self.plant_parent ); + + player maps\mp\zombies\_zm_buildables::track_buildables_planted( self ); + } + + if ( isdefined( self ) ) + self delete(); + } +} + +equipment_retrieve( player ) +{ + if ( isdefined( self ) ) + { + self stoploopsound(); + original_owner = self.original_owner; + weaponname = self.name; + + if ( !isdefined( original_owner ) ) + { + player equipment_give( weaponname ); + self.owner = player; + } + else + { + if ( player != original_owner ) + { + equipment_transfer( weaponname, original_owner, player ); + self.owner = player; + } + + player equipment_from_deployed( weaponname ); + } + + if ( isdefined( self.requires_pickup ) && self.requires_pickup ) + { + if ( isdefined( level.zombie_equipment[weaponname].pickup_fn ) ) + { + self.owner = player; + + if ( isdefined( self.damage ) ) + player player_set_equipment_damage( weaponname, self.damage ); + + player [[ level.zombie_equipment[weaponname].pickup_fn ]]( self ); + } + } + + self.playdialog = 0; + weaponname = self.name; + self delete(); + + if ( !player hasweapon( weaponname ) ) + { + player giveweapon( weaponname ); + clip_ammo = player getweaponammoclip( weaponname ); + clip_max_ammo = weaponclipsize( weaponname ); + + if ( clip_ammo < clip_max_ammo ) + clip_ammo++; + + player setweaponammoclip( weaponname, clip_ammo ); + } + + player maps\mp\zombies\_zm_buildables::track_planted_buildables_pickedup( weaponname ); + } +} + +equipment_drop_to_planted( equipment, player ) +{ +/# + if ( !isdefined( player.current_equipment ) || player.current_equipment != equipment ) + { + assert( player has_deployed_equipment( equipment ) ); + assert( !isdefined( player.current_equipment ) ); + } +#/ + if ( isdefined( player.current_equipment ) && player.current_equipment == equipment ) + player equipment_to_deployed( equipment ); + + if ( isdefined( level.zombie_equipment[equipment].place_fn ) ) + { + replacement = player [[ level.zombie_equipment[equipment].place_fn ]]( player.origin, player.angles ); + + if ( isdefined( replacement ) ) + { + replacement.owner = player; + replacement.original_owner = player; + replacement.name = equipment; + + if ( isdefined( level.equipment_planted ) ) + player [[ level.equipment_planted ]]( replacement, equipment, player ); + + player notify( "equipment_placed", replacement, equipment ); + player maps\mp\zombies\_zm_buildables::track_buildables_planted( replacement ); + } + } +} + +equipment_transfer( weaponname, fromplayer, toplayer ) +{ + if ( is_limited_equipment( weaponname ) ) + { +/# + println( "ZM EQUIPMENT: " + weaponname + " transferred from " + fromplayer.name + " to " + toplayer.name + "\\n" ); +#/ + toplayer equipment_orphaned( weaponname ); + wait 0.05; + assert( !toplayer has_player_equipment( weaponname ) ); + assert( fromplayer has_player_equipment( weaponname ) ); + toplayer equipment_give( weaponname ); + toplayer equipment_to_deployed( weaponname ); + + if ( isdefined( level.zombie_equipment[weaponname].transfer_fn ) ) + [[ level.zombie_equipment[weaponname].transfer_fn ]]( fromplayer, toplayer ); + + fromplayer equipment_release( weaponname ); + assert( toplayer has_player_equipment( weaponname ) ); + assert( !fromplayer has_player_equipment( weaponname ) ); + equipment_damage = 0; + toplayer player_set_equipment_damage( weaponname, fromplayer player_get_equipment_damage( weaponname ) ); + fromplayer player_set_equipment_damage( equipment_damage ); + } + else + { +/# + println( "ZM EQUIPMENT: " + weaponname + " swapped from " + fromplayer.name + " to " + toplayer.name + "\\n" ); +#/ + toplayer equipment_give( weaponname ); + + if ( isdefined( toplayer.current_equipment ) && toplayer.current_equipment == weaponname ) + toplayer equipment_to_deployed( weaponname ); + + if ( isdefined( level.zombie_equipment[weaponname].transfer_fn ) ) + [[ level.zombie_equipment[weaponname].transfer_fn ]]( fromplayer, toplayer ); + + equipment_damage = toplayer player_get_equipment_damage( weaponname ); + toplayer player_set_equipment_damage( weaponname, fromplayer player_get_equipment_damage( weaponname ) ); + fromplayer player_set_equipment_damage( weaponname, equipment_damage ); + } +} + +equipment_release( equipment ) +{ +/# + println( "ZM EQUIPMENT: " + self.name + " release " + equipment + "\\n" ); +#/ + self equipment_take( equipment ); +} + +equipment_drop( equipment ) +{ + if ( isdefined( level.zombie_equipment[equipment].place_fn ) ) + { + equipment_drop_to_planted( equipment, self ); +/# + println( "ZM EQUIPMENT: " + self.name + " drop to planted " + equipment + "\\n" ); +#/ + } + else if ( isdefined( level.zombie_equipment[equipment].drop_fn ) ) + { + if ( isdefined( self.current_equipment ) && self.current_equipment == equipment ) + self equipment_to_deployed( equipment ); + + item = self [[ level.zombie_equipment[equipment].drop_fn ]](); + + if ( isdefined( item ) ) + { + if ( isdefined( level.equipment_planted ) ) + self [[ level.equipment_planted ]]( item, equipment, self ); + + item.owner = undefined; + item.damage = self player_get_equipment_damage( equipment ); + } +/# + println( "ZM EQUIPMENT: " + self.name + " dropped " + equipment + "\\n" ); +#/ + } + else + self equipment_take(); + + self notify( "equipment_dropped", equipment ); +} + +equipment_grab( equipment, item ) +{ +/# + println( "ZM EQUIPMENT: " + self.name + " picked up " + equipment + "\\n" ); +#/ + self equipment_give( equipment ); + + if ( isdefined( level.zombie_equipment[equipment].pickup_fn ) ) + { + item.owner = self; + self player_set_equipment_damage( equipment, item.damage ); + self [[ level.zombie_equipment[equipment].pickup_fn ]]( item ); + } +} + +equipment_orphaned( equipment ) +{ +/# + println( "ZM EQUIPMENT: " + self.name + " orphaned " + equipment + "\\n" ); +#/ + self equipment_take( equipment ); +} + +equipment_to_deployed( equipment ) +{ +/# + println( "ZM EQUIPMENT: " + self.name + " deployed " + equipment + "\\n" ); +#/ + if ( !isdefined( self.deployed_equipment ) ) + self.deployed_equipment = []; + + assert( self.current_equipment == equipment ); + self.deployed_equipment[self.deployed_equipment.size] = equipment; + self.current_equipment = undefined; + + if ( !isdefined( level.riotshield_name ) || equipment != level.riotshield_name ) + self takeweapon( equipment ); + + self setactionslot( 1, "" ); +} + +equipment_from_deployed( equipment = "none" ) +{ +/# + println( "ZM EQUIPMENT: " + self.name + " retrieved " + equipment + "\\n" ); +#/ + if ( isdefined( self.current_equipment ) && equipment != self.current_equipment ) + self equipment_drop( self.current_equipment ); + + assert( self has_deployed_equipment( equipment ) ); + self.current_equipment = equipment; + + if ( isdefined( level.riotshield_name ) && equipment != level.riotshield_name ) + self giveweapon( equipment ); + + if ( self hasweapon( equipment ) ) + self setweaponammoclip( equipment, 1 ); + + self setactionslot( 1, "weapon", equipment ); + arrayremovevalue( self.deployed_equipment, equipment ); + self notify( equipment + "_pickup" ); +} + +eqstub_get_unitrigger_origin() +{ + if ( isdefined( self.origin_parent ) ) + return self.origin_parent.origin; + + tup = anglestoup( self.angles ); + eq_unitrigger_offset = 12 * tup; + return self.origin + eq_unitrigger_offset; +} + +eqstub_on_spawn_trigger( trigger ) +{ + if ( isdefined( self.link_parent ) ) + { + trigger enablelinkto(); + trigger linkto( self.link_parent ); + trigger setmovingplatformenabled( 1 ); + } +} + +equipment_buy( equipment ) +{ +/# + println( "ZM EQUIPMENT: " + self.name + " bought " + equipment + "\\n" ); +#/ + if ( isdefined( self.current_equipment ) && equipment != self.current_equipment ) + self equipment_drop( self.current_equipment ); + + if ( ( equipment == "riotshield_zm" || equipment == "alcatraz_shield_zm" ) && isdefined( self.player_shield_reset_health ) ) + self [[ self.player_shield_reset_health ]](); + else + self player_set_equipment_damage( equipment, 0 ); + + self equipment_give( equipment ); +} + +generate_equipment_unitrigger( classname, origin, angles, flags, radius = 64, script_height = 64, hint, icon, think, moving ) +{ + script_width = script_height; + + if ( !isdefined( script_width ) ) + script_width = 64; + + script_length = script_height; + + if ( !isdefined( script_length ) ) + script_length = 64; + + unitrigger_stub = spawnstruct(); + unitrigger_stub.origin = origin; + + if ( isdefined( angles ) ) + unitrigger_stub.angles = angles; + + if ( isdefined( script_length ) ) + unitrigger_stub.script_length = script_length; + else + unitrigger_stub.script_length = 13.5; + + if ( isdefined( script_width ) ) + unitrigger_stub.script_width = script_width; + else + unitrigger_stub.script_width = 27.5; + + if ( isdefined( script_height ) ) + unitrigger_stub.script_height = script_height; + else + unitrigger_stub.script_height = 24; + + unitrigger_stub.radius = radius; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + unitrigger_stub.hint_string = hint; + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) ) + { + unitrigger_stub.cursor_hint = "HINT_WEAPON"; + unitrigger_stub.cursor_hint_weapon = icon; + } + + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.require_look_at = 0; + + switch ( classname ) + { + case "trigger_radius": + unitrigger_stub.script_unitrigger_type = "unitrigger_radius"; + break; + case "trigger_radius_use": + unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + break; + case "trigger_box": + unitrigger_stub.script_unitrigger_type = "unitrigger_box"; + break; + case "trigger_box_use": + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + break; + } + + unitrigger_stub.originfunc = ::eqstub_get_unitrigger_origin; + unitrigger_stub.onspawnfunc = ::eqstub_on_spawn_trigger; + + if ( isdefined( moving ) && moving ) + maps\mp\zombies\_zm_unitrigger::register_unitrigger( unitrigger_stub, think ); + else + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, think ); + + return unitrigger_stub; +} + +can_pick_up_equipment( equipment_name, equipment_trigger ) +{ + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || self in_revive_trigger() ) + return false; + + if ( self isthrowinggrenade() ) + return false; + + if ( isdefined( self.screecher_weapon ) ) + return false; + + if ( self is_jumping() ) + return false; + + if ( self is_player_equipment( equipment_name ) ) + return false; + + if ( isdefined( self.pickup_equipment ) && self.pickup_equipment ) + return false; + + if ( isdefined( level.equipment_team_pick_up ) && level.equipment_team_pick_up && !self same_team_placed_equipment( equipment_trigger ) ) + return false; + + return true; +} + +same_team_placed_equipment( equipment_trigger ) +{ + return isdefined( equipment_trigger ) && isdefined( equipment_trigger.stub ) && isdefined( equipment_trigger.stub.model ) && isdefined( equipment_trigger.stub.model.owner ) && equipment_trigger.stub.model.owner.pers["team"] == self.pers["team"]; +} + +placed_equipment_think( model, equipname, origin, angles, tradius, toffset ) +{ + pickupmodel = spawn( "script_model", origin ); + + if ( isdefined( angles ) ) + pickupmodel.angles = angles; + + pickupmodel setmodel( model ); + + if ( isdefined( level.equipment_safe_to_drop ) ) + { + if ( !self [[ level.equipment_safe_to_drop ]]( pickupmodel ) ) + { + equipment_disappear_fx( pickupmodel.origin, undefined, pickupmodel.angles ); + pickupmodel delete(); + self equipment_take( equipname ); + return undefined; + } + } + + watchername = getsubstr( equipname, 0, equipname.size - 3 ); + + if ( isdefined( level.retrievehints[watchername] ) ) + hint = level.retrievehints[watchername].hint; + else + hint = &"MP_GENERIC_PICKUP"; + + icon = get_equipment_icon( equipname ); + + if ( !isdefined( tradius ) ) + tradius = 32; + + torigin = origin; + + if ( isdefined( toffset ) ) + { + tforward = anglestoforward( angles ); + torigin += toffset * tforward; + } + + tup = anglestoup( angles ); + eq_unitrigger_offset = 12 * tup; + pickupmodel.stub = generate_equipment_unitrigger( "trigger_radius_use", torigin + eq_unitrigger_offset, angles, 0, tradius, 64, hint, equipname, ::placed_equipment_unitrigger_think, isdefined( pickupmodel.canmove ) && pickupmodel.canmove ); + pickupmodel.stub.model = pickupmodel; + pickupmodel.stub.equipname = equipname; + pickupmodel.equipname = equipname; + pickupmodel thread item_attract_zombies(); + pickupmodel thread item_watch_explosions(); + + if ( is_limited_equipment( equipname ) ) + { + if ( !isdefined( level.dropped_equipment ) ) + level.dropped_equipment = []; + + if ( isdefined( level.dropped_equipment[equipname] ) && isdefined( level.dropped_equipment[equipname].model ) ) + level.dropped_equipment[equipname].model dropped_equipment_destroy( 1 ); + + level.dropped_equipment[equipname] = pickupmodel.stub; + } + + destructible_equipment_list_add( pickupmodel ); + return pickupmodel; +} + +watch_player_visibility( equipment ) +{ + self endon( "kill_trigger" ); + self setinvisibletoall(); + + while ( isdefined( self ) ) + { + players = getplayers(); + + foreach ( player in players ) + { + if ( !isdefined( player ) ) + continue; + + invisible = !player can_pick_up_equipment( equipment, self ); + + if ( isdefined( self ) ) + self setinvisibletoplayer( player, invisible ); + + wait 0.05; + } + + wait 1; + } +} + +placed_equipment_unitrigger_think() +{ + self endon( "kill_trigger" ); + self thread watch_player_visibility( self.stub.equipname ); + + while ( true ) + { + self waittill( "trigger", player ); + + if ( !player can_pick_up_equipment( self.stub.equipname, self ) ) + continue; + + self thread pickup_placed_equipment( player ); + return; + } +} + +pickup_placed_equipment( player ) +{ + assert( !( isdefined( player.pickup_equipment ) && player.pickup_equipment ) ); + player.pickup_equipment = 1; + stub = self.stub; + + if ( isdefined( player.current_equipment ) && stub.equipname != player.current_equipment ) + player equipment_drop( player.current_equipment ); + + if ( is_limited_equipment( stub.equipname ) ) + { + if ( isdefined( level.dropped_equipment ) && isdefined( level.dropped_equipment[stub.equipname] ) && level.dropped_equipment[stub.equipname] == stub ) + level.dropped_equipment[stub.equipname] = undefined; + } + + if ( isdefined( stub.model ) ) + stub.model equipment_retrieve( player ); + + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( stub ); + wait 3; + player.pickup_equipment = 0; +} + +dropped_equipment_think( model, equipname, origin, angles, tradius, toffset ) +{ + pickupmodel = spawn( "script_model", origin ); + + if ( isdefined( angles ) ) + pickupmodel.angles = angles; + + pickupmodel setmodel( model ); + + if ( isdefined( level.equipment_safe_to_drop ) ) + { + if ( !self [[ level.equipment_safe_to_drop ]]( pickupmodel ) ) + { + equipment_disappear_fx( pickupmodel.origin, undefined, pickupmodel.angles ); + pickupmodel delete(); + self equipment_take( equipname ); + return; + } + } + + watchername = getsubstr( equipname, 0, equipname.size - 3 ); + + if ( isdefined( level.retrievehints[watchername] ) ) + hint = level.retrievehints[watchername].hint; + else + hint = &"MP_GENERIC_PICKUP"; + + icon = get_equipment_icon( equipname ); + + if ( !isdefined( tradius ) ) + tradius = 32; + + torigin = origin; + + if ( isdefined( toffset ) ) + { + offset = 64; + tforward = anglestoforward( angles ); + torigin = torigin + toffset * tforward + vectorscale( ( 0, 0, 1 ), 8.0 ); + } + + pickupmodel.stub = generate_equipment_unitrigger( "trigger_radius_use", torigin, angles, 0, tradius, 64, hint, equipname, ::dropped_equipment_unitrigger_think, isdefined( pickupmodel.canmove ) && pickupmodel.canmove ); + pickupmodel.stub.model = pickupmodel; + pickupmodel.stub.equipname = equipname; + pickupmodel.equipname = equipname; + + if ( isdefined( level.equipment_planted ) ) + self [[ level.equipment_planted ]]( pickupmodel, equipname, self ); + + if ( !isdefined( level.dropped_equipment ) ) + level.dropped_equipment = []; + + if ( isdefined( level.dropped_equipment[equipname] ) ) + level.dropped_equipment[equipname].model dropped_equipment_destroy( 1 ); + + level.dropped_equipment[equipname] = pickupmodel.stub; + destructible_equipment_list_add( pickupmodel ); + pickupmodel thread item_attract_zombies(); + return pickupmodel; +} + +dropped_equipment_unitrigger_think() +{ + self endon( "kill_trigger" ); + self thread watch_player_visibility( self.stub.equipname ); + + while ( true ) + { + self waittill( "trigger", player ); + + if ( !player can_pick_up_equipment( self.stub.equipname, self ) ) + continue; + + self thread pickup_dropped_equipment( player ); + return; + } +} + +pickup_dropped_equipment( player ) +{ + player.pickup_equipment = 1; + stub = self.stub; + + if ( isdefined( player.current_equipment ) && stub.equipname != player.current_equipment ) + player equipment_drop( player.current_equipment ); + + player equipment_grab( stub.equipname, stub.model ); + stub.model dropped_equipment_destroy(); + wait 3; + player.pickup_equipment = 0; +} + +dropped_equipment_destroy( gusto ) +{ + stub = self.stub; + + if ( isdefined( gusto ) && gusto ) + equipment_disappear_fx( self.origin, undefined, self.angles ); + + if ( isdefined( level.dropped_equipment ) ) + level.dropped_equipment[stub.equipname] = undefined; + + if ( isdefined( stub.model ) ) + stub.model delete(); + + if ( isdefined( self.original_owner ) && ( is_limited_equipment( stub.equipname ) || maps\mp\zombies\_zm_weapons::is_weapon_included( stub.equipname ) ) ) + self.original_owner equipment_take( stub.equipname ); + + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( stub ); +} + +add_placeable_equipment( equipment, modelname, destroy_fn, type ) +{ + if ( !isdefined( level.placeable_equipment ) ) + level.placeable_equipment = []; + + level.placeable_equipment[equipment] = modelname; + precachemodel( modelname ); + precacheitem( equipment + "_turret" ); + + if ( !isdefined( level.placeable_equipment_destroy_fn ) ) + level.placeable_equipment_destroy_fn = []; + + level.placeable_equipment_destroy_fn[equipment] = destroy_fn; + + if ( !isdefined( level.placeable_equipment_type ) ) + level.placeable_equipment_type = []; + + level.placeable_equipment_type[equipment] = type; +} + +is_placeable_equipment( equipment ) +{ + if ( isdefined( level.placeable_equipment ) && isdefined( level.placeable_equipment[equipment] ) ) + return true; + + return false; +} + +equipment_placement_watcher() +{ + self endon( "death_or_disconnect" ); + + for (;;) + { + self waittill( "weapon_change", weapon ); + + if ( self.sessionstate != "spectator" && is_placeable_equipment( weapon ) ) + self thread equipment_watch_placement( weapon ); + } +} + +equipment_watch_placement( equipment ) +{ + self.turret_placement = undefined; + carry_offset = vectorscale( ( 1, 0, 0 ), 22.0 ); + carry_angles = ( 0, 0, 0 ); + placeturret = spawnturret( "auto_turret", self.origin, equipment + "_turret" ); + placeturret.angles = self.angles; + placeturret setmodel( level.placeable_equipment[equipment] ); + placeturret setturretcarried( 1 ); + placeturret setturretowner( self ); + + if ( isdefined( level.placeable_equipment_type[equipment] ) ) + placeturret setturrettype( level.placeable_equipment_type[equipment] ); + + self carryturret( placeturret, carry_offset, carry_angles ); + + if ( isdefined( level.use_swipe_protection ) ) + self thread watch_melee_swipes( equipment, placeturret ); + + self notify( "create_equipment_turret", equipment, placeturret ); + ended = self waittill_any_return( "weapon_change", "grenade_fire", "death_or_disconnect" ); + + if ( !( isdefined( level.use_legacy_equipment_placement ) && level.use_legacy_equipment_placement ) ) + self.turret_placement = self canplayerplaceturret( placeturret ); + + if ( ended == "weapon_change" ) + { + self.turret_placement = undefined; + + if ( self hasweapon( equipment ) ) + self setweaponammoclip( equipment, 1 ); + } + + self notify( "destroy_equipment_turret", equipment, placeturret ); + self stopcarryturret( placeturret ); + placeturret setturretcarried( 0 ); + placeturret delete(); +} + +watch_melee_swipes( equipment, turret ) +{ + self endon( "weapon_change" ); + self endon( "grenade_fire" ); + self endon( "death" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "melee_swipe", zombie ); + + if ( distancesquared( zombie.origin, self.origin ) > zombie.meleeattackdist * zombie.meleeattackdist ) + continue; + + tpos = turret.origin; + tangles = turret.angles; + self player_damage_equipment( equipment, 200, zombie.origin ); + + if ( self.equipment_damage[equipment] >= 1500 ) + { + thread equipment_disappear_fx( tpos, undefined, tangles ); + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons[0] ) ) + self switchtoweapon( primaryweapons[0] ); + + if ( isalive( self ) ) + self playlocalsound( level.zmb_laugh_alias ); + + self maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); + self equipment_release( equipment ); + return; + } + } +} + +player_get_equipment_damage( equipment ) +{ + if ( isdefined( self.equipment_damage ) && isdefined( self.equipment_damage[equipment] ) ) + return self.equipment_damage[equipment]; + + return 0; +} + +player_set_equipment_damage( equipment, damage ) +{ + if ( !isdefined( self.equipment_damage ) ) + self.equipment_damage = []; + + self.equipment_damage[equipment] = damage; +} + +player_damage_equipment( equipment, damage, origin ) +{ + if ( !isdefined( self.equipment_damage ) ) + self.equipment_damage = []; + + if ( !isdefined( self.equipment_damage[equipment] ) ) + self.equipment_damage[equipment] = 0; + + self.equipment_damage[equipment] += damage; + + if ( self.equipment_damage[equipment] > 1500 ) + { + if ( isdefined( level.placeable_equipment_destroy_fn[equipment] ) ) + self [[ level.placeable_equipment_destroy_fn[equipment] ]](); + else + equipment_disappear_fx( origin ); + + self equipment_release( equipment ); + } +} + +item_damage( damage ) +{ + if ( isdefined( self.isriotshield ) && self.isriotshield ) + { + if ( isdefined( level.riotshield_damage_callback ) && isdefined( self.owner ) ) + self.owner [[ level.riotshield_damage_callback ]]( damage, 0 ); + else if ( isdefined( level.deployed_riotshield_damage_callback ) ) + self [[ level.deployed_riotshield_damage_callback ]]( damage ); + } + else if ( isdefined( self.owner ) ) + self.owner player_damage_equipment( self.equipname, damage, self.origin ); + else + { + if ( !isdefined( self.damage ) ) + self.damage = 0; + + self.damage += damage; + + if ( self.damage > 1500 ) + self thread dropped_equipment_destroy( 1 ); + } +} + +item_watch_damage() +{ + self endon( "death" ); + self setcandamage( 1 ); + self.health = 1500; + + while ( true ) + { + self waittill( "damage", amount ); + + self item_damage( amount ); + } +} + +item_watch_explosions() +{ + self endon( "death" ); + + while ( true ) + { + level waittill( "grenade_exploded", position, radius, idamage, odamage ); + + wait( randomfloatrange( 0.05, 0.3 ) ); + distsqrd = distancesquared( self.origin, position ); + + if ( distsqrd < radius * radius ) + { + dist = sqrt( distsqrd ); + dist /= radius; + damage = odamage + ( idamage - odamage ) * ( 1 - dist ); + self item_damage( damage * 5 ); + } + } +} + +get_item_health() +{ +/# + damage = 0; + + if ( isdefined( self.isriotshield ) && self.isriotshield ) + { + damagemax = level.zombie_vars["riotshield_hit_points"]; + + if ( isdefined( self.owner ) ) + damage = self.owner.shielddamagetaken; + else if ( isdefined( level.deployed_riotshield_damage_callback ) ) + damage = self.shielddamagetaken; + } + else if ( isdefined( self.owner ) ) + { + damagemax = 1500; + damage = self.owner player_get_equipment_damage( self.equipname ); + } + else + { + damagemax = 1500; + + if ( isdefined( self.damage ) ) + damage = self.damage; + } + + return ( damagemax - damage ) / damagemax; +#/ +} + +debughealth() +{ +/# + self endon( "death" ); + self endon( "stop_attracting_zombies" ); + + while ( true ) + { + if ( getdvarint( _hash_EB512CB7 ) ) + { + health = self get_item_health(); + color = ( 1 - health, health, 0 ); + text = "" + health * 100 + ""; + print3d( self.origin, text, color, 1, 0.5, 1 ); + } + + wait 0.05; + } +#/ +} + +item_choke() +{ + if ( !isdefined( level.item_choke_count ) ) + level.item_choke_count = 0; + + level.item_choke_count++; + + if ( !( level.item_choke_count >= 10 ) ) + { + wait 0.05; + level.item_choke_count = 0; + } +} + +is_equipment_ignored( equipname ) +{ + if ( isdefined( level.equipment_ignored_by_zombies ) && isdefined( equipname ) && isdefined( level.equipment_ignored_by_zombies[equipname] ) ) + return true; + + return false; +} + +enemies_ignore_equipment( equipname ) +{ + if ( !isdefined( level.equipment_ignored_by_zombies ) ) + level.equipment_ignored_by_zombies = []; + + level.equipment_ignored_by_zombies[equipname] = equipname; +} + +item_attract_zombies() +{ + self endon( "death" ); + self notify( "stop_attracting_zombies" ); + self endon( "stop_attracting_zombies" ); +/# + self thread debughealth(); +#/ + if ( is_equipment_ignored( self.equipname ) ) + return; + + while ( true ) + { + if ( isdefined( level.vert_equipment_attack_range ) ) + vdistmax = level.vert_equipment_attack_range; + else + vdistmax = 36; + + if ( isdefined( level.max_equipment_attack_range ) ) + distmax = level.max_equipment_attack_range * level.max_equipment_attack_range; + else + distmax = 4096; + + if ( isdefined( level.min_equipment_attack_range ) ) + distmin = level.min_equipment_attack_range * level.min_equipment_attack_range; + else + distmin = 2025; + + ai = getaiarray( level.zombie_team ); + + for ( i = 0; i < ai.size; i++ ) + { + if ( !isdefined( ai[i] ) ) + continue; + + if ( isdefined( ai[i].ignore_equipment ) && ai[i].ignore_equipment ) + continue; + + if ( isdefined( level.ignore_equipment ) ) + { + if ( self [[ level.ignore_equipment ]]( ai[i] ) ) + continue; + } + + if ( isdefined( ai[i].is_inert ) && ai[i].is_inert ) + continue; + + if ( isdefined( ai[i].is_traversing ) && ai[i].is_traversing ) + continue; + + vdist = abs( ai[i].origin[2] - self.origin[2] ); + distsqrd = distance2dsquared( ai[i].origin, self.origin ); + + if ( isdefined( self.equipname ) && ( self.equipname == "riotshield_zm" || self.equipname == "alcatraz_shield_zm" ) ) + vdistmax = 108; + + should_attack = 0; + + if ( isdefined( level.should_attack_equipment ) ) + should_attack = self [[ level.should_attack_equipment ]]( distsqrd ); + + if ( distsqrd < distmax && distsqrd > distmin && vdist < vdistmax || should_attack ) + { + if ( !( isdefined( ai[i].isscreecher ) && ai[i].isscreecher ) && !ai[i] is_quad() && !ai[i] is_leaper() ) + { + ai[i] thread attack_item( self ); + item_choke(); + } + } + + item_choke(); + } + + wait 0.1; + } +} + +attack_item( item ) +{ + self endon( "death" ); + item endon( "death" ); + self endon( "start_inert" ); + + if ( isdefined( self.doing_equipment_attack ) && self.doing_equipment_attack ) + return 0; + + if ( isdefined( self.not_interruptable ) && self.not_interruptable ) + return 0; + + self thread attack_item_stop( item ); + self thread attack_item_interrupt( item ); + + if ( getdvar( _hash_FA9CEAA6 ) == "" ) + setdvar( "zombie_equipment_attack_freq", "15" ); + + freq = getdvarint( _hash_FA9CEAA6 ); + self.doing_equipment_attack = 1; + self maps\mp\zombies\_zm_spawner::zombie_history( "doing equipment attack 1 - " + gettime() ); + self.item = item; + + if ( !isdefined( self ) || !isalive( self ) ) + return; + + if ( isdefined( item.zombie_attack_callback ) ) + item [[ item.zombie_attack_callback ]]( self ); + + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "attack", self.animname ); + + if ( isdefined( level.attack_item ) ) + self [[ level.attack_item ]](); + + melee_anim = "zm_window_melee"; + + if ( !self.has_legs ) + { + melee_anim = "zm_walk_melee_crawl"; + + if ( self.a.gib_ref == "no_legs" ) + melee_anim = "zm_stumpy_melee"; + else if ( self.zombie_move_speed == "run" || self.zombie_move_speed == "sprint" ) + melee_anim = "zm_run_melee_crawl"; + } + + self orientmode( "face point", item.origin ); + self animscripted( self.origin, flat_angle( vectortoangles( item.origin - self.origin ) ), melee_anim ); + self notify( "item_attack" ); + + if ( isdefined( self.custom_item_dmg ) ) + item thread item_damage( self.custom_item_dmg ); + else + item thread item_damage( 100 ); + + item playsound( "fly_riotshield_zm_impact_flesh" ); + wait( randomint( 100 ) / 100.0 ); + self.doing_equipment_attack = 0; + self maps\mp\zombies\_zm_spawner::zombie_history( "doing equipment attack 0 from wait - " + gettime() ); + self orientmode( "face default" ); +} + +attack_item_interrupt( item ) +{ + if ( !( isdefined( self.has_legs ) && self.has_legs ) ) + return; + + self notify( "attack_item_interrupt" ); + self endon( "attack_item_interrupt" ); + self endon( "death" ); + + while ( isdefined( self.has_legs ) && self.has_legs ) + self waittill( "damage" ); + + self stopanimscripted(); + self.doing_equipment_attack = 0; + self maps\mp\zombies\_zm_spawner::zombie_history( "doing equipment attack 0 from death - " + gettime() ); + self.item = undefined; +} + +attack_item_stop( item ) +{ + self notify( "attack_item_stop" ); + self endon( "attack_item_stop" ); + self endon( "death" ); + + item waittill( "death" ); + + self stopanimscripted(); + self.doing_equipment_attack = 0; + self maps\mp\zombies\_zm_spawner::zombie_history( "doing equipment attack 0 from death - " + gettime() ); + self.item = undefined; + + if ( isdefined( level.attack_item_stop ) ) + self [[ level.attack_item_stop ]](); +} + +window_notetracks( msg, equipment ) +{ + self endon( "death" ); + equipment endon( "death" ); + + while ( self.doing_equipment_attack ) + { + self waittill( msg, notetrack ); + + if ( notetrack == "end" ) + return; + + if ( notetrack == "fire" ) + equipment item_damage( 100 ); + } +} + +destructible_equipment_list_check() +{ + if ( !isdefined( level.destructible_equipment ) ) + level.destructible_equipment = []; + + i = 0; + + while ( i < level.destructible_equipment.size ) + { + if ( !isdefined( level.destructible_equipment[i] ) ) + arrayremoveindex( level.destructible_equipment, i ); + else + i++; + } +} + +destructible_equipment_list_add( item ) +{ + destructible_equipment_list_check(); + level.destructible_equipment[level.destructible_equipment.size] = item; +} + +get_destructible_equipment_list() +{ + destructible_equipment_list_check(); + return level.destructible_equipment; +} + +equipment_disappear_fx( origin, fx, angles ) +{ + effect = level._equipment_disappear_fx; + + if ( isdefined( fx ) ) + effect = fx; + + if ( isdefined( angles ) ) + playfx( effect, origin, anglestoforward( angles ) ); + else + playfx( effect, origin ); + + wait 1.1; +} diff --git a/ZM/Core/maps/mp/zombies/_zm_ffotd.gsc b/ZM/Core/maps/mp/zombies/_zm_ffotd.gsc new file mode 100644 index 0000000..c0df62d --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_ffotd.gsc @@ -0,0 +1,214 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_stats; + +main_start() +{ + mapname = tolower( getdvar( "mapname" ) ); + gametype = getdvar( "ui_gametype" ); + + if ( "zm_transit" == tolower( getdvar( "mapname" ) ) && "zclassic" == getdvar( "ui_gametype" ) ) + level thread transit_navcomputer_remove_card_on_success(); + + if ( "zm_prison" == tolower( getdvar( "mapname" ) ) && "zgrief" == getdvar( "ui_gametype" ) ) + level.zbarrier_script_string_sets_collision = 1; + + if ( ( "zm_transit" == mapname || "zm_highrise" == mapname ) && "zclassic" == gametype ) + { + level.pers_upgrade_sniper = 1; + level.pers_upgrade_pistol_points = 1; + level.pers_upgrade_perk_lose = 1; + level.pers_upgrade_double_points = 1; + level.pers_upgrade_nube = 1; + } +} + +main_end() +{ + onfinalizeinitialization_callback( ::force_navcomputer_trigger_think ); + level.original_melee_miss_func = level.melee_miss_func; + level.melee_miss_func = ::ffotd_melee_miss_func; +} + +force_navcomputer_trigger_think() +{ + if ( !isdefined( level.zombie_include_buildables ) || !level.zombie_include_buildables.size ) + return; + + foreach ( buildable in level.zombie_include_buildables ) + { + if ( "sq_common" == buildable.name ) + { + if ( isdefined( buildable.triggerthink ) ) + { + level [[ buildable.triggerthink ]](); + trigger_think_func = buildable.triggerthink; + buildable.triggerthink = undefined; + + level waittill( "buildables_setup" ); + + buildable.triggerthink = trigger_think_func; + return; + } + } + } +} + +transit_navcomputer_remove_card_on_success() +{ + wait_for_buildable( "sq_common" ); + wait_network_frame(); + trig_pos = getstruct( "sq_common_key", "targetname" ); + trigs = getentarray( "trigger_radius_use", "classname" ); + nav_trig = undefined; + + foreach ( trig in trigs ) + { + if ( trig.origin == trig_pos.origin ) + nav_trig = trig; + } + + if ( isdefined( nav_trig ) ) + { + while ( true ) + { + nav_trig waittill( "trigger", who ); + + if ( isplayer( who ) && is_player_valid( who ) && does_player_have_correct_navcard( who ) ) + break; + } + + players = get_players(); + + foreach ( player in players ) + player maps\mp\zombies\_zm_stats::set_global_stat( level.navcard_needed, 0 ); + + level thread sq_refresh_player_navcard_hud(); + } +} + +sq_refresh_player_navcard_hud() +{ + if ( !isdefined( level.navcards ) ) + return; + + players = get_players(); + + foreach ( player in players ) + { + navcard_bits = 0; + + for ( i = 0; i < level.navcards.size; i++ ) + { + hasit = player maps\mp\zombies\_zm_stats::get_global_stat( level.navcards[i] ); + + if ( isdefined( player.navcard_grabbed ) && player.navcard_grabbed == level.navcards[i] ) + hasit = 1; + + if ( hasit ) + navcard_bits += ( 1 << i ); + } + + wait_network_frame(); + player setclientfield( "navcard_held", 0 ); + + if ( navcard_bits > 0 ) + { + wait_network_frame(); + player setclientfield( "navcard_held", navcard_bits ); + } + } +} + +player_in_exploit_area( player_trigger_origin, player_trigger_radius ) +{ + if ( distancesquared( player_trigger_origin, self.origin ) < player_trigger_radius * player_trigger_radius ) + { +/# + iprintlnbold( "player exploit detectect" ); +#/ + return true; + } + + return false; +} + +path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ) +{ + spawnflags = 9; + zombie_trigger = spawn( "trigger_radius", zombie_trigger_origin, spawnflags, zombie_trigger_radius, zombie_trigger_height ); + zombie_trigger setteamfortrigger( level.zombie_team ); +/# + thread debug_exploit( zombie_trigger_origin, zombie_trigger_radius, player_trigger_origin, player_trigger_radius, zombie_goto_point ); +#/ + while ( true ) + { + zombie_trigger waittill( "trigger", who ); + + if ( !is_true( who.reroute ) ) + who thread exploit_reroute( zombie_trigger, player_trigger_origin, player_trigger_radius, zombie_goto_point ); + } +} + +exploit_reroute( zombie_trigger, player_trigger_origin, player_trigger_radius, zombie_goto_point ) +{ + self endon( "death" ); + self.reroute = 1; + + while ( true ) + { + if ( self istouching( zombie_trigger ) ) + { + player = self.favoriteenemy; + + if ( isdefined( player ) && player player_in_exploit_area( player_trigger_origin, player_trigger_radius ) ) + self.reroute_origin = zombie_goto_point; + else + break; + } + else + break; + + wait 0.2; + } + + self.reroute = 0; +} + +debug_exploit( player_origin, player_radius, enemy_origin, enemy_radius, zombie_goto_point ) +{ +/# + while ( isdefined( self ) ) + { + circle( player_origin, player_radius, ( 0, 0, 1 ), 0, 1, 1 ); + circle( enemy_origin, enemy_radius, ( 1, 0, 0 ), 0, 1, 1 ); + line( player_origin, enemy_origin, ( 1, 0, 0 ), 1 ); + line( enemy_origin, zombie_goto_point, ( 1, 1, 0 ), 1 ); + wait 0.05; + } +#/ +} + +ffotd_melee_miss_func() +{ + if ( isdefined( self.enemy ) ) + { + if ( isplayer( self.enemy ) && self.enemy getcurrentweapon() == "claymore_zm" ) + { + dist_sq = distancesquared( self.enemy.origin, self.origin ); + melee_dist_sq = self.meleeattackdist * self.meleeattackdist; + + if ( dist_sq < melee_dist_sq ) + { + self.enemy dodamage( self.meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); + return; + } + } + } + + if ( isdefined( level.original_melee_miss_func ) ) + self [[ level.original_melee_miss_func ]](); +} diff --git a/ZM/Core/maps/mp/zombies/_zm_game_module.gsc b/ZM/Core/maps/mp/zombies/_zm_game_module.gsc new file mode 100644 index 0000000..6d54e3e --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_game_module.gsc @@ -0,0 +1,440 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\gametypes_zm\_zm_gametype; + +register_game_module( index, module_name, pre_init_func, post_init_func, pre_init_zombie_spawn_func, post_init_zombie_spawn_func, hub_start_func ) +{ + if ( !isdefined( level._game_modules ) ) + { + level._game_modules = []; + level._num_registered_game_modules = 0; + } + + for ( i = 0; i < level._num_registered_game_modules; i++ ) + { + if ( !isdefined( level._game_modules[i] ) ) + continue; + + if ( isdefined( level._game_modules[i].index ) && level._game_modules[i].index == index ) + assert( level._game_modules[i].index != index, "A Game module is already registered for index (" + index + ")" ); + } + + level._game_modules[level._num_registered_game_modules] = spawnstruct(); + level._game_modules[level._num_registered_game_modules].index = index; + level._game_modules[level._num_registered_game_modules].module_name = module_name; + level._game_modules[level._num_registered_game_modules].pre_init_func = pre_init_func; + level._game_modules[level._num_registered_game_modules].post_init_func = post_init_func; + level._game_modules[level._num_registered_game_modules].pre_init_zombie_spawn_func = pre_init_zombie_spawn_func; + level._game_modules[level._num_registered_game_modules].post_init_zombie_spawn_func = post_init_zombie_spawn_func; + level._game_modules[level._num_registered_game_modules].hub_start_func = hub_start_func; + level._num_registered_game_modules++; +} + +set_current_game_module( game_module_index ) +{ + if ( !isdefined( game_module_index ) ) + { + level.current_game_module = level.game_module_classic_index; + level.scr_zm_game_module = level.game_module_classic_index; + return; + } + + game_module = get_game_module( game_module_index ); + + if ( !isdefined( game_module ) ) + { + assert( isdefined( game_module ), "unknown game module (" + game_module_index + ")" ); + return; + } + + level.current_game_module = game_module_index; +} + +get_current_game_module() +{ + return get_game_module( level.current_game_module ); +} + +get_game_module( game_module_index ) +{ + if ( !isdefined( game_module_index ) ) + return undefined; + + for ( i = 0; i < level._game_modules.size; i++ ) + { + if ( level._game_modules[i].index == game_module_index ) + return level._game_modules[i]; + } + + return undefined; +} + +game_module_pre_zombie_spawn_init() +{ + current_module = get_current_game_module(); + + if ( !isdefined( current_module ) || !isdefined( current_module.pre_init_zombie_spawn_func ) ) + return; + + self [[ current_module.pre_init_zombie_spawn_func ]](); +} + +game_module_post_zombie_spawn_init() +{ + current_module = get_current_game_module(); + + if ( !isdefined( current_module ) || !isdefined( current_module.post_init_zombie_spawn_func ) ) + return; + + self [[ current_module.post_init_zombie_spawn_func ]](); +} + +kill_all_zombies() +{ + ai = get_round_enemy_array(); + + foreach ( zombie in ai ) + { + if ( isdefined( zombie ) ) + { + zombie dodamage( zombie.maxhealth * 2, zombie.origin, zombie, zombie, "none", "MOD_SUICIDE" ); + wait 0.05; + } + } +} + +freeze_players( freeze ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] freeze_player_controls( freeze ); +} + +turn_power_on_and_open_doors() +{ + level.local_doors_stay_open = 1; + level.power_local_doors_globally = 1; + flag_set( "power_on" ); + level setclientfield( "zombie_power_on", 1 ); + zombie_doors = getentarray( "zombie_door", "targetname" ); + + foreach ( door in zombie_doors ) + { + if ( isdefined( door.script_noteworthy ) && door.script_noteworthy == "electric_door" ) + { + door notify( "power_on" ); + continue; + } + + if ( isdefined( door.script_noteworthy ) && door.script_noteworthy == "local_electric_door" ) + door notify( "local_power_on" ); + } +} + +respawn_spectators_and_freeze_players() +{ + players = get_players(); + + foreach ( player in players ) + { + if ( player.sessionstate == "spectator" ) + { + if ( isdefined( player.spectate_hud ) ) + player.spectate_hud destroy(); + + player [[ level.spawnplayer ]](); + } + + player freeze_player_controls( 1 ); + } +} + +damage_callback_no_pvp_damage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + if ( isdefined( eattacker ) && isplayer( eattacker ) && eattacker == self ) + return idamage; + + if ( isdefined( eattacker ) && !isplayer( eattacker ) ) + return idamage; + + if ( !isdefined( eattacker ) ) + return idamage; + + return 0; +} + +respawn_players() +{ + players = get_players(); + + foreach ( player in players ) + { + player [[ level.spawnplayer ]](); + player freeze_player_controls( 1 ); + } +} + +zombie_goto_round( target_round ) +{ + level notify( "restart_round" ); + + if ( target_round < 1 ) + target_round = 1; + + level.zombie_total = 0; + maps\mp\zombies\_zm::ai_calculate_health( target_round ); + zombies = get_round_enemy_array(); + + if ( isdefined( zombies ) ) + { + for ( i = 0; i < zombies.size; i++ ) + zombies[i] dodamage( zombies[i].health + 666, zombies[i].origin ); + } + + respawn_players(); + wait 1; +} + +wait_for_team_death_and_round_end() +{ + level endon( "game_module_ended" ); + level endon( "end_game" ); + checking_for_round_end = 0; + level.isresetting_grief = 0; + + while ( true ) + { + cdc_alive = 0; + cia_alive = 0; + players = get_players(); + + foreach ( player in players ) + { + if ( !isdefined( player._encounters_team ) ) + continue; + + if ( player._encounters_team == "A" ) + { + if ( is_player_valid( player ) ) + cia_alive++; + + continue; + } + + if ( is_player_valid( player ) ) + cdc_alive++; + } + + if ( cia_alive == 0 && cdc_alive == 0 && !level.isresetting_grief && !( isdefined( level.host_ended_game ) && level.host_ended_game ) ) + { + wait 0.5; + + if ( isdefined( level._grief_reset_message ) ) + level thread [[ level._grief_reset_message ]](); + + level.isresetting_grief = 1; + level notify( "end_round_think" ); + level.zombie_vars["spectators_respawn"] = 1; + level notify( "keep_griefing" ); + checking_for_round_end = 0; + zombie_goto_round( level.round_number ); + level thread reset_grief(); + level thread maps\mp\zombies\_zm::round_think( 1 ); + } + else if ( !checking_for_round_end ) + { + if ( cia_alive == 0 ) + { + level thread check_for_round_end( "B" ); + checking_for_round_end = 1; + } + else if ( cdc_alive == 0 ) + { + level thread check_for_round_end( "A" ); + checking_for_round_end = 1; + } + } + + if ( cia_alive > 0 && cdc_alive > 0 ) + { + level notify( "stop_round_end_check" ); + checking_for_round_end = 0; + } + + wait 0.05; + } +} + +reset_grief() +{ + wait 1; + level.isresetting_grief = 0; +} + +check_for_round_end( winner ) +{ + level endon( "keep_griefing" ); + level endon( "stop_round_end_check" ); + + level waittill( "end_of_round" ); + + level.gamemodulewinningteam = winner; + level.zombie_vars["spectators_respawn"] = 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + players[i] freezecontrols( 1 ); + + if ( players[i]._encounters_team == winner ) + { + players[i] thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "grief_won" ); + continue; + } + + players[i] thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "grief_lost" ); + } + + level notify( "game_module_ended", winner ); + level._game_module_game_end_check = undefined; + maps\mp\gametypes_zm\_zm_gametype::track_encounters_win_stats( level.gamemodulewinningteam ); + level notify( "end_game" ); +} + +wait_for_team_death() +{ + wait 15; + winner = undefined; + + while ( !isdefined( winner ) ) + { + cdc_alive = 0; + cia_alive = 0; + players = get_players(); + + foreach ( player in players ) + { + if ( player._encounters_team == "A" ) + { + if ( is_player_valid( player ) || isdefined( level.force_solo_quick_revive ) && level.force_solo_quick_revive && isdefined( player.lives ) && player.lives > 0 ) + cia_alive++; + + continue; + } + + if ( is_player_valid( player ) || isdefined( level.force_solo_quick_revive ) && level.force_solo_quick_revive && isdefined( player.lives ) && player.lives > 0 ) + cdc_alive++; + } + + if ( cia_alive == 0 ) + winner = "B"; + else if ( cdc_alive == 0 ) + winner = "A"; + + wait 0.05; + } + + level notify( "game_module_ended", winner ); +} + +make_supersprinter() +{ + self set_zombie_run_cycle( "super_sprint" ); +} + +game_module_custom_intermission( intermission_struct ) +{ + self closemenu(); + self closeingamemenu(); + level endon( "stop_intermission" ); + self endon( "disconnect" ); + self endon( "death" ); + self notify( "_zombie_game_over" ); + self.score = self.score_total; + self.sessionstate = "intermission"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + s_point = getstruct( intermission_struct, "targetname" ); + + if ( !isdefined( level.intermission_cam_model ) ) + { + level.intermission_cam_model = spawn( "script_model", s_point.origin ); + level.intermission_cam_model.angles = s_point.angles; + level.intermission_cam_model setmodel( "tag_origin" ); + } + + self.game_over_bg = newclienthudelem( self ); + self.game_over_bg.horzalign = "fullscreen"; + self.game_over_bg.vertalign = "fullscreen"; + self.game_over_bg setshader( "black", 640, 480 ); + self.game_over_bg.alpha = 1; + self spawn( level.intermission_cam_model.origin, level.intermission_cam_model.angles ); + self camerasetposition( level.intermission_cam_model ); + self camerasetlookat(); + self cameraactivate( 1 ); + self linkto( level.intermission_cam_model ); + level.intermission_cam_model moveto( getstruct( s_point.target, "targetname" ).origin, 12 ); + + if ( isdefined( level.intermission_cam_model.angles ) ) + level.intermission_cam_model rotateto( getstruct( s_point.target, "targetname" ).angles, 12 ); + + self.game_over_bg fadeovertime( 2 ); + self.game_over_bg.alpha = 0; + wait 2; + self.game_over_bg thread maps\mp\zombies\_zm::fade_up_over_time( 1 ); +} + +create_fireworks( launch_spots, min_wait, max_wait, randomize ) +{ + level endon( "stop_fireworks" ); + + while ( true ) + { + if ( isdefined( randomize ) && randomize ) + launch_spots = array_randomize( launch_spots ); + + foreach ( spot in launch_spots ) + { + level thread fireworks_launch( spot ); + wait( randomfloatrange( min_wait, max_wait ) ); + } + + wait( randomfloatrange( min_wait, max_wait ) ); + } +} + +fireworks_launch( launch_spot ) +{ + firework = spawn( "script_model", launch_spot.origin + ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ) ); + firework setmodel( "tag_origin" ); + wait_network_frame(); + playfxontag( level._effect["fw_trail_cheap"], firework, "tag_origin" ); + firework playloopsound( "zmb_souls_loop", 0.75 ); + dest = launch_spot; + + while ( isdefined( dest ) && isdefined( dest.target ) ) + { + random_offset = ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ); + new_dests = getstructarray( dest.target, "targetname" ); + new_dest = random( new_dests ); + dest = new_dest; + dist = distance( new_dest.origin + random_offset, firework.origin ); + time = dist / 700; + firework moveto( new_dest.origin + random_offset, time ); + + firework waittill( "movedone" ); + } + + firework playsound( "zmb_souls_end" ); + playfx( level._effect["fw_pre_burst"], firework.origin ); + firework delete(); +} diff --git a/ZM/Core/maps/mp/zombies/_zm_gump.gsc b/ZM/Core/maps/mp/zombies/_zm_gump.gsc new file mode 100644 index 0000000..ee0a6a1 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_gump.gsc @@ -0,0 +1,76 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; + +init() +{ + if ( !( isdefined( level.disable_blackscreen_clientfield ) && level.disable_blackscreen_clientfield ) ) + registerclientfield( "toplayer", "blackscreen", 1, 1, "int" ); + + if ( !isdefined( level.uses_gumps ) ) + level.uses_gumps = 0; + + if ( isdefined( level.uses_gumps ) && level.uses_gumps ) + onplayerconnect_callback( ::player_connect_gump ); +} + +player_teleport_blackscreen_on() +{ + if ( isdefined( level.disable_blackscreen_clientfield ) && level.disable_blackscreen_clientfield ) + return; + + if ( isdefined( level.uses_gumps ) && level.uses_gumps ) + { + self setclientfieldtoplayer( "blackscreen", 1 ); + wait 0.05; + self setclientfieldtoplayer( "blackscreen", 0 ); + } +} + +player_connect_gump() +{ + +} + +player_watch_spectate_change() +{ + if ( isdefined( level.disable_blackscreen_clientfield ) && level.disable_blackscreen_clientfield ) + return; + + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "spectator_cycle" ); + + self setclientfieldtoplayer( "blackscreen", 1 ); + wait 0.05; + self setclientfieldtoplayer( "blackscreen", 0 ); + } +} + +gump_test() +{ +/# + wait 10; + pos1 = ( -4904, -7657, 4 ); + pos3 = ( 7918, -6506, 177 ); + pos2 = ( 1986, -73, 4 ); + players = get_players(); + + if ( isdefined( players[0] ) ) + players[0] setorigin( pos1 ); + + wait 0.05; + + if ( isdefined( players[1] ) ) + players[1] setorigin( pos2 ); + + wait 0.05; + + if ( isdefined( players[2] ) ) + players[2] setorigin( pos3 ); +#/ +} diff --git a/ZM/Core/maps/mp/zombies/_zm_hackables_boards.gsc b/ZM/Core/maps/mp/zombies/_zm_hackables_boards.gsc new file mode 100644 index 0000000..2d7654d --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_hackables_boards.gsc @@ -0,0 +1,126 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equip_hacker; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_blockers; + +hack_boards() +{ + windows = getstructarray( "exterior_goal", "targetname" ); + + for ( i = 0; i < windows.size; i++ ) + { + window = windows[i]; + struct = spawnstruct(); + spot = window; + + if ( isdefined( window.trigger_location ) ) + spot = window.trigger_location; + + org = groundpos( spot.origin ) + vectorscale( ( 0, 0, 1 ), 4.0 ); + r = 96; + h = 96; + + if ( isdefined( spot.radius ) ) + r = spot.radius; + + if ( isdefined( spot.height ) ) + h = spot.height; + + struct.origin = org + vectorscale( ( 0, 0, 1 ), 48.0 ); + struct.radius = r; + struct.height = h; + struct.script_float = 2; + struct.script_int = 0; + struct.window = window; + struct.no_bullet_trace = 1; + struct.no_sight_check = 1; + struct.dot_limit = 0.7; + struct.no_touch_check = 1; + struct.last_hacked_round = 0; + struct.num_hacks = 0; + maps\mp\zombies\_zm_equip_hacker::register_pooled_hackable_struct( struct, ::board_hack, ::board_qualifier ); + } +} + +board_hack( hacker ) +{ + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( self ); + num_chunks_checked = 0; + last_repaired_chunk = undefined; + + if ( self.last_hacked_round != level.round_number ) + { + self.last_hacked_round = level.round_number; + self.num_hacks = 0; + } + + self.num_hacks++; + + if ( self.num_hacks < 3 ) + hacker maps\mp\zombies\_zm_score::add_to_player_score( 100 ); + else + { + cost = int( min( 300, hacker.score ) ); + + if ( cost ) + hacker maps\mp\zombies\_zm_score::minus_to_player_score( cost ); + } + + while ( true ) + { + if ( all_chunks_intact( self.window, self.window.barrier_chunks ) ) + break; + + chunk = get_random_destroyed_chunk( self.window, self.window.barrier_chunks ); + + if ( !isdefined( chunk ) ) + break; + + self.window thread maps\mp\zombies\_zm_blockers::replace_chunk( self.window, chunk, undefined, 0, 1 ); + last_repaired_chunk = chunk; + + if ( isdefined( self.clip ) ) + { + self.window.clip enable_trigger(); + self.window.clip disconnectpaths(); + } + else + blocker_disconnect_paths( self.window.neg_start, self.window.neg_end ); + + wait_network_frame(); + num_chunks_checked++; + + if ( num_chunks_checked >= 20 ) + break; + } + + if ( isdefined( self.window.zbarrier ) ) + { + if ( isdefined( last_repaired_chunk ) ) + { + while ( self.window.zbarrier getzbarrierpiecestate( last_repaired_chunk ) == "closing" ) + wait 0.05; + } + } + else + { + while ( isdefined( last_repaired_chunk ) && last_repaired_chunk.state == "mid_repair" ) + wait 0.05; + } + + maps\mp\zombies\_zm_equip_hacker::register_pooled_hackable_struct( self, ::board_hack, ::board_qualifier ); + self.window notify( "blocker_hacked" ); + self.window notify( "no valid boards" ); +} + +board_qualifier( player ) +{ + if ( all_chunks_intact( self.window, self.window.barrier_chunks ) || no_valid_repairable_boards( self.window, self.window.barrier_chunks ) ) + return false; + + return true; +} diff --git a/ZM/Core/maps/mp/zombies/_zm_hackables_box.gsc b/ZM/Core/maps/mp/zombies/_zm_hackables_box.gsc new file mode 100644 index 0000000..e9e2fb3 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_hackables_box.gsc @@ -0,0 +1,349 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_equip_hacker; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_audio; + +box_hacks() +{ + boxes = getstructarray( "treasure_chest_use", "targetname" ); + + for ( i = 0; i < boxes.size; i++ ) + { + box = boxes[i]; + box.box_hacks["respin"] = ::init_box_respin; + box.box_hacks["respin_respin"] = ::init_box_respin_respin; + box.box_hacks["summon_box"] = ::init_summon_box; + box.last_hacked_round = 0; + } + + level._zombiemode_chest_joker_chance_override_func = ::check_for_free_locations; + level._zombiemode_custom_box_move_logic = ::custom_box_move_logic; + level._zombiemode_check_firesale_loc_valid_func = ::custom_check_firesale_loc_valid_func; + init_summon_hacks(); +} + +custom_check_firesale_loc_valid_func() +{ + if ( isdefined( self.unitrigger_stub ) ) + box = self.unitrigger_stub.trigger_target; + else if ( isdefined( self.stub ) ) + box = self.stub.trigger_target; + + if ( box.last_hacked_round >= level.round_number ) + return false; + + return true; +} + +custom_box_move_logic() +{ + num_hacked_locs = 0; + + for ( i = 0; i < level.chests.size; i++ ) + { + if ( level.chests[i].last_hacked_round >= level.round_number ) + num_hacked_locs++; + } + + if ( num_hacked_locs == 0 ) + { + maps\mp\zombies\_zm_magicbox::default_box_move_logic(); + return; + } + + found_loc = 0; + original_spot = level.chest_index; + + while ( !found_loc ) + { + level.chest_index++; + + if ( original_spot == level.chest_index ) + level.chest_index++; + + level.chest_index %= level.chests.size; + + if ( level.chests[level.chest_index].last_hacked_round < level.round_number ) + found_loc = 1; + } +} + +check_for_free_locations( chance ) +{ + boxes = level.chests; + stored_chance = chance; + chance = -1; + + for ( i = 0; i < boxes.size; i++ ) + { + if ( i == level.chest_index ) + continue; + + if ( boxes[i].last_hacked_round < level.round_number ) + { + chance = stored_chance; + break; + } + } + + return chance; +} + +init_box_respin( chest, player ) +{ + self thread box_respin_think( chest, player ); +} + +box_respin_think( chest, player ) +{ + respin_hack = spawnstruct(); + respin_hack.origin = self.origin + vectorscale( ( 0, 0, 1 ), 24.0 ); + respin_hack.radius = 48; + respin_hack.height = 72; + respin_hack.script_int = 600; + respin_hack.script_float = 1.5; + respin_hack.player = player; + respin_hack.no_bullet_trace = 1; + respin_hack.chest = chest; + maps\mp\zombies\_zm_equip_hacker::register_pooled_hackable_struct( respin_hack, ::respin_box, ::hack_box_qualifier ); + self.weapon_model waittill_either( "death", "kill_respin_think_thread" ); + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( respin_hack ); +} + +respin_box_thread( hacker ) +{ + if ( isdefined( self.chest.zbarrier.weapon_model ) ) + self.chest.zbarrier.weapon_model notify( "kill_respin_think_thread" ); + + self.chest.no_fly_away = 1; + self.chest.zbarrier notify( "box_hacked_respin" ); + self.chest disable_trigger(); + play_sound_at_pos( "open_chest", self.chest.zbarrier.origin ); + play_sound_at_pos( "music_chest", self.chest.zbarrier.origin ); + maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( self.chest.zbarrier.weapon_string ); + self.chest.zbarrier thread maps\mp\zombies\_zm_magicbox::treasure_chest_weapon_spawn( self.chest, hacker, 1 ); + + self.chest.zbarrier waittill( "randomization_done" ); + + self.chest.no_fly_away = undefined; + + if ( !flag( "moving_chest_now" ) ) + { + self.chest enable_trigger(); + self.chest thread maps\mp\zombies\_zm_magicbox::treasure_chest_timeout(); + } +} + +respin_box( hacker ) +{ + self thread respin_box_thread( hacker ); +} + +hack_box_qualifier( player ) +{ + if ( player == self.chest.chest_user && isdefined( self.chest.weapon_out ) ) + return true; + + return false; +} + +init_box_respin_respin( chest, player ) +{ + self thread box_respin_respin_think( chest, player ); +} + +box_respin_respin_think( chest, player ) +{ + respin_hack = spawnstruct(); + respin_hack.origin = self.origin + vectorscale( ( 0, 0, 1 ), 24.0 ); + respin_hack.radius = 48; + respin_hack.height = 72; + respin_hack.script_int = -950; + respin_hack.script_float = 1.5; + respin_hack.player = player; + respin_hack.no_bullet_trace = 1; + respin_hack.chest = chest; + maps\mp\zombies\_zm_equip_hacker::register_pooled_hackable_struct( respin_hack, ::respin_respin_box, ::hack_box_qualifier ); + self.weapon_model waittill_either( "death", "kill_respin_respin_think_thread" ); + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( respin_hack ); +} + +respin_respin_box( hacker ) +{ + org = self.chest.zbarrier.origin; + + if ( isdefined( self.chest.zbarrier.weapon_model ) ) + { + self.chest.zbarrier.weapon_model notify( "kill_respin_respin_think_thread" ); + self.chest.zbarrier.weapon_model notify( "kill_weapon_movement" ); + self.chest.zbarrier.weapon_model moveto( org + vectorscale( ( 0, 0, 1 ), 40.0 ), 0.5 ); + } + + if ( isdefined( self.chest.zbarrier.weapon_model_dw ) ) + { + self.chest.zbarrier.weapon_model_dw notify( "kill_weapon_movement" ); + self.chest.zbarrier.weapon_model_dw moveto( org + vectorscale( ( 0, 0, 1 ), 40.0 ) - vectorscale( ( 1, 1, 1 ), 3.0 ), 0.5 ); + } + + self.chest.zbarrier notify( "box_hacked_rerespin" ); + self.chest.box_rerespun = 1; + self thread fake_weapon_powerup_thread( self.chest.zbarrier.weapon_model, self.chest.zbarrier.weapon_model_dw ); +} + +fake_weapon_powerup_thread( weapon1, weapon2 ) +{ + weapon1 endon( "death" ); + playfxontag( level._effect["powerup_on_solo"], weapon1, "tag_origin" ); + playsoundatposition( "zmb_spawn_powerup", weapon1.origin ); + weapon1 playloopsound( "zmb_spawn_powerup_loop" ); + self thread fake_weapon_powerup_timeout( weapon1, weapon2 ); + + while ( isdefined( weapon1 ) ) + { + waittime = randomfloatrange( 2.5, 5 ); + yaw = randomint( 360 ); + + if ( yaw > 300 ) + yaw = 300; + else if ( yaw < 60 ) + yaw = 60; + + yaw = weapon1.angles[1] + yaw; + weapon1 rotateto( ( -60 + randomint( 120 ), yaw, -45 + randomint( 90 ) ), waittime, waittime * 0.5, waittime * 0.5 ); + + if ( isdefined( weapon2 ) ) + weapon2 rotateto( ( -60 + randomint( 120 ), yaw, -45 + randomint( 90 ) ), waittime, waittime * 0.5, waittime * 0.5 ); + + wait( randomfloat( waittime - 0.1 ) ); + } +} + +fake_weapon_powerup_timeout( weapon1, weapon2 ) +{ + weapon1 endon( "death" ); + wait 15; + + for ( i = 0; i < 40; i++ ) + { + if ( i % 2 ) + { + weapon1 hide(); + + if ( isdefined( weapon2 ) ) + weapon2 hide(); + } + else + { + weapon1 show(); + + if ( isdefined( weapon2 ) ) + weapon2 hide(); + } + + if ( i < 15 ) + { + wait 0.5; + continue; + } + + if ( i < 25 ) + { + wait 0.25; + continue; + } + + wait 0.1; + } + + self.chest notify( "trigger", level ); + + if ( isdefined( weapon1 ) ) + weapon1 delete(); + + if ( isdefined( weapon2 ) ) + weapon2 delete(); +} + +init_summon_hacks() +{ + chests = getstructarray( "treasure_chest_use", "targetname" ); + + for ( i = 0; i < chests.size; i++ ) + { + chest = chests[i]; + chest init_summon_box( chest.hidden ); + } +} + +init_summon_box( create ) +{ + if ( create ) + { + if ( isdefined( self._summon_hack_struct ) ) + { + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( self._summon_hack_struct ); + self._summon_hack_struct = undefined; + } + + struct = spawnstruct(); + struct.origin = self.chest_box.origin + vectorscale( ( 0, 0, 1 ), 24.0 ); + struct.radius = 48; + struct.height = 72; + struct.script_int = 1200; + struct.script_float = 5; + struct.no_bullet_trace = 1; + struct.chest = self; + self._summon_hack_struct = struct; + maps\mp\zombies\_zm_equip_hacker::register_pooled_hackable_struct( struct, ::summon_box, ::summon_box_qualifier ); + } + else if ( isdefined( self._summon_hack_struct ) ) + { + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( self._summon_hack_struct ); + self._summon_hack_struct = undefined; + } +} + +summon_box_thread( hacker ) +{ + self.chest.last_hacked_round = level.round_number + randomintrange( 2, 5 ); + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( self ); + self.chest thread maps\mp\zombies\_zm_magicbox::show_chest(); + self.chest notify( "kill_chest_think" ); + self.chest.auto_open = 1; + self.chest.no_charge = 1; + self.chest.no_fly_away = 1; + self.chest.forced_user = hacker; + self.chest thread maps\mp\zombies\_zm_magicbox::treasure_chest_think(); + + self.chest.zbarrier waittill( "closed" ); + + self.chest.forced_user = undefined; + self.chest.auto_open = undefined; + self.chest.no_charge = undefined; + self.chest.no_fly_away = undefined; + self.chest thread maps\mp\zombies\_zm_magicbox::hide_chest(); +} + +summon_box( hacker ) +{ + self thread summon_box_thread( hacker ); + + if ( isdefined( hacker ) ) + hacker thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "hack_box" ); +} + +summon_box_qualifier( player ) +{ + if ( self.chest.last_hacked_round > level.round_number ) + return false; + + if ( isdefined( self.chest.zbarrier.chest_moving ) && self.chest.zbarrier.chest_moving ) + return false; + + return true; +} diff --git a/ZM/Core/maps/mp/zombies/_zm_hackables_doors.gsc b/ZM/Core/maps/mp/zombies/_zm_hackables_doors.gsc new file mode 100644 index 0000000..c56448a --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_hackables_doors.gsc @@ -0,0 +1,97 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_blockers; +#include maps\mp\zombies\_zm_equip_hacker; + +door_struct_debug() +{ + while ( true ) + { + wait 0.1; + origin = self.origin; + point = origin; + + for ( i = 1; i < 5; i++ ) + { + point = origin + anglestoforward( self.door.angles ) * ( i * 2 ); + passed = bullettracepassed( point, origin, 0, undefined ); + color = vectorscale( ( 0, 1, 0 ), 255.0 ); + + if ( !passed ) + color = vectorscale( ( 1, 0, 0 ), 255.0 ); +/# + print3d( point, "+", color, 1, 1 ); +#/ + } + } +} + +hack_doors( targetname = "zombie_door", door_activate_func ) +{ + doors = getentarray( targetname, "targetname" ); + + if ( !isdefined( door_activate_func ) ) + door_activate_func = maps\mp\zombies\_zm_blockers::door_opened; + + for ( i = 0; i < doors.size; i++ ) + { + door = doors[i]; + struct = spawnstruct(); + struct.origin = door.origin + anglestoforward( door.angles ) * 2; + struct.radius = 48; + struct.height = 72; + struct.script_float = 32.7; + struct.script_int = 200; + struct.door = door; + struct.no_bullet_trace = 1; + struct.door_activate_func = door_activate_func; + trace_passed = 0; + door thread hide_door_buy_when_hacker_active( struct ); + maps\mp\zombies\_zm_equip_hacker::register_pooled_hackable_struct( struct, ::door_hack ); + door thread watch_door_for_open( struct ); + } +} + +hide_door_buy_when_hacker_active( door_struct ) +{ + self endon( "death" ); + self endon( "door_hacked" ); + self endon( "door_opened" ); + maps\mp\zombies\_zm_equip_hacker::hide_hint_when_hackers_active(); +} + +watch_door_for_open( door_struct ) +{ + self waittill( "door_opened" ); + + self endon( "door_hacked" ); + remove_all_door_hackables_that_target_door( door_struct.door ); +} + +door_hack( hacker ) +{ + self.door notify( "door_hacked" ); + self.door notify( "kill_door_think" ); + remove_all_door_hackables_that_target_door( self.door ); + self.door [[ self.door_activate_func ]](); + self.door._door_open = 1; +} + +remove_all_door_hackables_that_target_door( door ) +{ + candidates = []; + + for ( i = 0; i < level._hackable_objects.size; i++ ) + { + obj = level._hackable_objects[i]; + + if ( isdefined( obj.door ) && obj.door.target == door.target ) + candidates[candidates.size] = obj; + } + + for ( i = 0; i < candidates.size; i++ ) + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( candidates[i] ); +} diff --git a/ZM/Core/maps/mp/zombies/_zm_hackables_packapunch.gsc b/ZM/Core/maps/mp/zombies/_zm_hackables_packapunch.gsc new file mode 100644 index 0000000..bf17999 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_hackables_packapunch.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equip_hacker; + +hack_packapunch() +{ + vending_weapon_upgrade_trigger = getentarray( "specialty_weapupgrade", "script_noteworthy" ); + perk = getent( vending_weapon_upgrade_trigger[0].target, "targetname" ); + + if ( isdefined( perk ) ) + { + struct = spawnstruct(); + struct.origin = perk.origin + anglestoright( perk.angles ) * 26 + vectorscale( ( 0, 0, 1 ), 48.0 ); + struct.radius = 48; + struct.height = 48; + struct.script_float = 5; + struct.script_int = -1000; + level._pack_hack_struct = struct; + maps\mp\zombies\_zm_equip_hacker::register_pooled_hackable_struct( level._pack_hack_struct, ::packapunch_hack ); + level._pack_hack_struct pack_trigger_think(); + } +} + +pack_trigger_think() +{ + if ( !flag_exists( "enter_nml" ) ) + return; + + while ( true ) + { + flag_wait( "enter_nml" ); + self.script_int = -1000; + + while ( flag( "enter_nml" ) ) + wait 1.0; + } +} + +packapunch_hack( hacker ) +{ + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( level._pack_hack_struct ); + level._pack_hack_struct.script_int = 0; + level notify( "packapunch_hacked" ); +} diff --git a/ZM/Core/maps/mp/zombies/_zm_hackables_perks.gsc b/ZM/Core/maps/mp/zombies/_zm_hackables_perks.gsc new file mode 100644 index 0000000..1591790 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_hackables_perks.gsc @@ -0,0 +1,80 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equip_hacker; + +hack_perks() +{ + vending_triggers = getentarray( "zombie_vending", "targetname" ); + + for ( i = 0; i < vending_triggers.size; i++ ) + { + struct = spawnstruct(); + + if ( isdefined( vending_triggers[i].machine ) ) + machine[0] = vending_triggers[i].machine; + else + machine = getentarray( vending_triggers[i].target, "targetname" ); + + struct.origin = machine[0].origin + anglestoright( machine[0].angles ) * 18 + vectorscale( ( 0, 0, 1 ), 48.0 ); + struct.radius = 48; + struct.height = 64; + struct.script_float = 5; + + while ( !isdefined( vending_triggers[i].cost ) ) + wait 0.05; + + struct.script_int = int( vending_triggers[i].cost * -1 ); + struct.perk = vending_triggers[i]; + + if ( isdefined( level._hack_perks_override ) ) + struct = struct [[ level._hack_perks_override ]](); + + vending_triggers[i].hackable = struct; + maps\mp\zombies\_zm_equip_hacker::register_pooled_hackable_struct( struct, ::perk_hack, ::perk_hack_qualifier ); + } + + level._solo_revive_machine_expire_func = ::solo_revive_expire_func; +} + +solo_revive_expire_func() +{ + if ( isdefined( self.hackable ) ) + { + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( self.hackable ); + self.hackable = undefined; + } +} + +perk_hack_qualifier( player ) +{ + if ( isdefined( player._retain_perks ) ) + return false; + + if ( isdefined( self.perk ) && isdefined( self.perk.script_noteworthy ) ) + { + if ( player hasperk( self.perk.script_noteworthy ) ) + return true; + } + + return false; +} + +perk_hack( hacker ) +{ + if ( flag( "solo_game" ) && self.perk.script_noteworthy == "specialty_quickrevive" ) + hacker.lives--; + + hacker notify( self.perk.script_noteworthy + "_stop" ); + hacker playsoundtoplayer( "evt_perk_throwup", hacker ); + + if ( isdefined( hacker.perk_hud ) ) + { + keys = getarraykeys( hacker.perk_hud ); + + for ( i = 0; i < hacker.perk_hud.size; i++ ) + hacker.perk_hud[keys[i]].x = i * 30; + } +} diff --git a/ZM/Core/maps/mp/zombies/_zm_hackables_powerups.gsc b/ZM/Core/maps/mp/zombies/_zm_hackables_powerups.gsc new file mode 100644 index 0000000..a1aedc6 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_hackables_powerups.gsc @@ -0,0 +1,82 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equip_hacker; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_powerups; + +unhackable_powerup( name ) +{ + ret = 0; + + switch ( name ) + { + case "random_weapon": + case "lose_points_team": + case "bonus_points_team": + case "bonus_points_player": + ret = 1; + break; + } + + return ret; +} + +hack_powerups() +{ + while ( true ) + { + level waittill( "powerup_dropped", powerup ); + + if ( !unhackable_powerup( powerup.powerup_name ) ) + { + struct = spawnstruct(); + struct.origin = powerup.origin; + struct.radius = 65; + struct.height = 72; + struct.script_float = 5; + struct.script_int = 5000; + struct.powerup = powerup; + powerup thread powerup_pickup_watcher( struct ); + maps\mp\zombies\_zm_equip_hacker::register_pooled_hackable_struct( struct, ::powerup_hack ); + } + } +} + +powerup_pickup_watcher( powerup_struct ) +{ + self endon( "hacked" ); + + self waittill( "death" ); + + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( powerup_struct ); +} + +powerup_hack( hacker ) +{ + self.powerup notify( "hacked" ); + + if ( isdefined( self.powerup.zombie_grabbable ) && self.powerup.zombie_grabbable ) + { + self.powerup notify( "powerup_timedout" ); + origin = self.powerup.origin; + self.powerup delete(); + self.powerup = maps\mp\zombies\_zm_net::network_safe_spawn( "powerup", 1, "script_model", origin ); + + if ( isdefined( self.powerup ) ) + { + self.powerup maps\mp\zombies\_zm_powerups::powerup_setup( "full_ammo" ); + self.powerup thread maps\mp\zombies\_zm_powerups::powerup_timeout(); + self.powerup thread maps\mp\zombies\_zm_powerups::powerup_wobble(); + self.powerup thread maps\mp\zombies\_zm_powerups::powerup_grab(); + } + } + else if ( self.powerup.powerup_name == "full_ammo" ) + self.powerup maps\mp\zombies\_zm_powerups::powerup_setup( "fire_sale" ); + else + self.powerup maps\mp\zombies\_zm_powerups::powerup_setup( "full_ammo" ); + + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( self ); +} diff --git a/ZM/Core/maps/mp/zombies/_zm_hackables_wallbuys.gsc b/ZM/Core/maps/mp/zombies/_zm_hackables_wallbuys.gsc new file mode 100644 index 0000000..e82eadf --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_hackables_wallbuys.gsc @@ -0,0 +1,46 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equip_hacker; + +hack_wallbuys() +{ + weapon_spawns = getstructarray( "weapon_upgrade", "targetname" ); + + for ( i = 0; i < weapon_spawns.size; i++ ) + { + if ( weapontype( weapon_spawns[i].zombie_weapon_upgrade ) == "grenade" ) + continue; + + if ( weapontype( weapon_spawns[i].zombie_weapon_upgrade ) == "melee" ) + continue; + + if ( weapontype( weapon_spawns[i].zombie_weapon_upgrade ) == "mine" ) + continue; + + if ( weapontype( weapon_spawns[i].zombie_weapon_upgrade ) == "bomb" ) + continue; + + struct = spawnstruct(); + struct.origin = weapon_spawns[i].origin; + struct.radius = 48; + struct.height = 48; + struct.script_float = 2; + struct.script_int = 3000; + struct.wallbuy = weapon_spawns[i]; + maps\mp\zombies\_zm_equip_hacker::register_pooled_hackable_struct( struct, ::wallbuy_hack ); + } + + bowie_triggers = getentarray( "bowie_upgrade", "targetname" ); + array_thread( bowie_triggers, maps\mp\zombies\_zm_equip_hacker::hide_hint_when_hackers_active ); +} + +wallbuy_hack( hacker ) +{ + self.wallbuy.hacked = 1; + self.clientfieldname = self.wallbuy.zombie_weapon_upgrade + "_" + self.origin; + level setclientfield( self.clientfieldname, 2 ); + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( self ); +} diff --git a/ZM/Core/maps/mp/zombies/_zm_jump_pad.gsc b/ZM/Core/maps/mp/zombies/_zm_jump_pad.gsc new file mode 100644 index 0000000..8dd9032 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_jump_pad.gsc @@ -0,0 +1,530 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_audio; + +init() +{ + if ( is_true( level._uses_jump_pads ) ) + level jump_pad_init(); +} + +jump_pad_init() +{ + level._jump_pad_override = []; + jump_pad_triggers = getentarray( "trig_jump_pad", "targetname" ); + + if ( !isdefined( jump_pad_triggers ) ) + return; + + for ( i = 0; i < jump_pad_triggers.size; i++ ) + { + jump_pad_triggers[i].start = getstruct( jump_pad_triggers[i].target, "targetname" ); + jump_pad_triggers[i].destination = getstructarray( jump_pad_triggers[i].start.target, "targetname" ); + + if ( isdefined( jump_pad_triggers[i].script_string ) ) + jump_pad_triggers[i].overrides = strtok( jump_pad_triggers[i].script_string, "," ); + + jump_pad_triggers[i] thread jump_pad_think(); + } + + onplayerconnect_callback( ::jump_pad_player_variables ); +} + +jump_pad_player_variables() +{ + self._padded = 0; + self.lander = 0; +} + +jump_pad_think() +{ + self endon( "destroyed" ); + end_point = undefined; + start_point = undefined; + z_velocity = undefined; + z_dist = undefined; + fling_this_way = undefined; + jump_time = undefined; + world_gravity = getdvarint( "bg_gravity" ); + gravity_pulls = -13.3; + top_velocity_sq = 810000; + forward_scaling = 1.0; + + if ( isdefined( self.script_flag_wait ) ) + { + if ( !isdefined( level.flag[self.script_flag_wait] ) ) + flag_init( self.script_flag_wait ); + + flag_wait( self.script_flag_wait ); + } + + while ( isdefined( self ) ) + { + self waittill( "trigger", who ); + + if ( isplayer( who ) ) + self thread trigger_thread( who, ::jump_pad_start, ::jump_pad_cancel ); + } +} + +jump_pad_start( ent_player, endon_condition ) +{ + self endon( "endon_condition" ); + ent_player endon( "left_jump_pad" ); + ent_player endon( "death" ); + ent_player endon( "disconnect" ); + end_point = undefined; + start_point = undefined; + z_velocity = undefined; + z_dist = undefined; + fling_this_way = undefined; + jump_time = undefined; + world_gravity = getdvarint( "bg_gravity" ); + gravity_pulls = -13.3; + top_velocity_sq = 810000; + forward_scaling = 1.0; + start_point = self.start; + + if ( isdefined( self.name ) ) + { + self._action_overrides = strtok( self.name, "," ); + + if ( isdefined( self._action_overrides ) ) + { + for ( i = 0; i < self._action_overrides.size; i++ ) + ent_player jump_pad_player_overrides( self._action_overrides[i] ); + } + } + + if ( isdefined( self.script_wait ) ) + { + if ( self.script_wait < 1 ) + self playsound( "evt_jump_pad_charge_short" ); + else + self playsound( "evt_jump_pad_charge" ); + + wait( self.script_wait ); + } + else + { + self playsound( "evt_jump_pad_charge" ); + wait 1.0; + } + + if ( isdefined( self.script_parameters ) && isdefined( level._jump_pad_override[self.script_parameters] ) ) + end_point = self [[ level._jump_pad_override[self.script_parameters] ]]( ent_player ); + + if ( !isdefined( end_point ) ) + end_point = self.destination[randomint( self.destination.size )]; + + if ( isdefined( self.script_string ) && isdefined( level._jump_pad_override[self.script_string] ) ) + { + info_array = self [[ level._jump_pad_override[self.script_string] ]]( start_point, end_point ); + fling_this_way = info_array[0]; + jump_time = info_array[1]; + } + else + { + end_spot = end_point.origin; + + if ( !is_true( self.script_airspeed ) ) + { + rand_end = ( randomfloatrange( -1, 1 ), randomfloatrange( -1, 1 ), 0 ); + rand_scale = randomint( 100 ); + rand_spot = vectorscale( rand_end, rand_scale ); + end_spot = end_point.origin + rand_spot; + } + + pad_dist = distance( start_point.origin, end_spot ); + z_dist = end_spot[2] - start_point.origin[2]; + jump_velocity = end_spot - start_point.origin; + + if ( z_dist > 40 && z_dist < 135 ) + { + z_dist *= 2.5; + forward_scaling = 1.1; +/# + if ( getdvarint( _hash_D5FD01C3 ) ) + { + if ( getdvar( _hash_E2494021 ) != "" ) + z_dist *= getdvarfloat( _hash_E2494021 ); + + if ( getdvar( _hash_4E3BC729 ) != "" ) + forward_scaling = getdvarfloat( _hash_4E3BC729 ); + } +#/ + } + else if ( z_dist >= 135 ) + { + z_dist *= 2.7; + forward_scaling = 1.3; +/# + if ( getdvarint( _hash_D5FD01C3 ) ) + { + if ( getdvar( _hash_E2494021 ) != "" ) + z_dist *= getdvarfloat( _hash_E2494021 ); + + if ( getdvar( _hash_4E3BC729 ) != "" ) + forward_scaling = getdvarfloat( _hash_4E3BC729 ); + } +#/ + } + else if ( z_dist < 0 ) + { + z_dist *= 2.4; + forward_scaling = 1.0; +/# + if ( getdvarint( _hash_D5FD01C3 ) ) + { + if ( getdvar( _hash_E2494021 ) != "" ) + z_dist *= getdvarfloat( _hash_E2494021 ); + + if ( getdvar( _hash_4E3BC729 ) != "" ) + forward_scaling = getdvarfloat( _hash_4E3BC729 ); + } +#/ + } + + z_velocity = 2 * z_dist * world_gravity; + + if ( z_velocity < 0 ) + z_velocity *= -1; + + if ( z_dist < 0 ) + z_dist *= -1; + + jump_time = sqrt( 2 * pad_dist / world_gravity ); + jump_time_2 = sqrt( 2 * z_dist / world_gravity ); + jump_time += jump_time_2; + + if ( jump_time < 0 ) + jump_time *= -1; + + x = jump_velocity[0] * forward_scaling / jump_time; + y = jump_velocity[1] * forward_scaling / jump_time; + z = z_velocity / jump_time; + fling_this_way = ( x, y, z ); + } + + if ( isdefined( end_point.target ) ) + poi_spot = getstruct( end_point.target, "targetname" ); + else + poi_spot = end_point; + + if ( !isdefined( self.script_index ) ) + ent_player.script_index = undefined; + else + ent_player.script_index = self.script_index; + + if ( isdefined( self.script_start ) && self.script_start == 1 ) + { + if ( !is_true( ent_player._padded ) ) + { + self playsound( "evt_jump_pad_launch" ); + playfx( level._effect["jump_pad_jump"], self.origin ); + ent_player thread jump_pad_move( fling_this_way, jump_time, poi_spot, self ); + + if ( isdefined( self.script_label ) ) + level notify( self.script_label ); + + return; + } + } + else if ( ent_player isonground() && !is_true( ent_player._padded ) ) + { + self playsound( "evt_jump_pad_launch" ); + playfx( level._effect["jump_pad_jump"], self.origin ); + ent_player thread jump_pad_move( fling_this_way, jump_time, poi_spot, self ); + + if ( isdefined( self.script_label ) ) + level notify( self.script_label ); + + return; + } + + wait 0.5; + + if ( ent_player istouching( self ) ) + self jump_pad_start( ent_player, endon_condition ); +} + +jump_pad_cancel( ent_player ) +{ + ent_player notify( "left_jump_pad" ); + + if ( isdefined( ent_player.poi_spot ) && !is_true( ent_player._padded ) ) + { + + } + + if ( isdefined( self.name ) ) + { + self._action_overrides = strtok( self.name, "," ); + + if ( isdefined( self._action_overrides ) ) + { + for ( i = 0; i < self._action_overrides.size; i++ ) + ent_player jump_pad_player_overrides( self._action_overrides[i] ); + } + } +} + +jump_pad_move( vec_direction, flt_time, struct_poi, trigger ) +{ + self endon( "death" ); + self endon( "disconnect" ); + start_time = gettime(); + jump_time = flt_time * 500; + attract_dist = undefined; + num_attractors = 30; + added_poi_value = 0; + start_turned_on = 1; + poi_start_func = undefined; + + while ( is_true( self.divetoprone ) || is_true( self._padded ) ) + wait 0.05; + + self._padded = 1; + self.lander = 1; + self setstance( "stand" ); + wait 0.1; + + if ( isdefined( trigger.script_label ) ) + { + if ( issubstr( trigger.script_label, "low" ) ) + { + self.jump_pad_current = undefined; + self.jump_pad_previous = undefined; + } + else if ( !isdefined( self.jump_pad_current ) ) + self.jump_pad_current = trigger; + else + { + self.jump_pad_previous = self.jump_pad_current; + self.jump_pad_current = trigger; + } + } + + if ( isdefined( self.poi_spot ) ) + { + level jump_pad_ignore_poi_cleanup( self.poi_spot ); + self.poi_spot deactivate_zombie_point_of_interest(); + self.poi_spot delete(); + } + + if ( isdefined( struct_poi ) ) + { + self.poi_spot = spawn( "script_origin", struct_poi.origin ); + + if ( isdefined( level._pad_poi_ignore ) ) + level [[ level._pad_poi_ignore ]]( self.poi_spot ); + + self thread jump_pad_enemy_follow_or_ignore( self.poi_spot ); + + if ( isdefined( level._jump_pad_poi_start_override ) && !is_true( self.script_index ) ) + poi_start_func = level._jump_pad_poi_start_override; + + if ( isdefined( level._jump_pad_poi_end_override ) ) + poi_end_func = level._jump_pad_poi_end_override; + + self.poi_spot create_zombie_point_of_interest( attract_dist, num_attractors, added_poi_value, start_turned_on, poi_start_func ); + self thread disconnect_failsafe_pad_poi_clean(); + } + + self setorigin( self.origin + ( 0, 0, 1 ) ); + + if ( 20 >= randomintrange( 0, 101 ) ) + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "jumppad" ); + + while ( gettime() - start_time < jump_time ) + { + self setvelocity( vec_direction ); + wait 0.05; + } + + while ( !self isonground() ) + wait 0.05; + + self._padded = 0; + self.lander = 0; + jump_pad_triggers = getentarray( "trig_jump_pad", "targetname" ); + + for ( i = 0; i < jump_pad_triggers.size; i++ ) + { + if ( self istouching( jump_pad_triggers[i] ) ) + { + level thread failsafe_pad_poi_clean( jump_pad_triggers[i], self.poi_spot ); + return; + } + } + + if ( isdefined( self.poi_spot ) ) + { + level jump_pad_ignore_poi_cleanup( self.poi_spot ); + self.poi_spot delete(); + } +} + +disconnect_failsafe_pad_poi_clean() +{ + self notify( "kill_disconnect_failsafe_pad_poi_clean" ); + self endon( "kill_disconnect_failsafe_pad_poi_clean" ); + self.poi_spot endon( "death" ); + + self waittill( "disconnect" ); + + if ( isdefined( self.poi_spot ) ) + { + level jump_pad_ignore_poi_cleanup( self.poi_spot ); + self.poi_spot deactivate_zombie_point_of_interest(); + self.poi_spot delete(); + } +} + +failsafe_pad_poi_clean( ent_trig, ent_poi ) +{ + if ( isdefined( ent_trig.script_wait ) ) + wait( ent_trig.script_wait ); + else + wait 0.5; + + if ( isdefined( ent_poi ) ) + { + level jump_pad_ignore_poi_cleanup( ent_poi ); + ent_poi deactivate_zombie_point_of_interest(); + ent_poi delete(); + } +} + +jump_pad_enemy_follow_or_ignore( ent_poi ) +{ + self endon( "death" ); + self endon( "disconnect" ); + zombies = getaiarray( level.zombie_team ); + players = getplayers(); + valid_players = 0; + + for ( p = 0; p < players.size; p++ ) + { + if ( is_player_valid( players[p] ) ) + valid_players++; + } + + for ( i = 0; i < zombies.size; i++ ) + { + ignore_poi = 0; + + if ( !isdefined( zombies[i] ) ) + continue; + + enemy = zombies[i].favoriteenemy; + + if ( isdefined( enemy ) ) + { + if ( players.size > 1 && valid_players > 1 ) + { + if ( enemy != self || isdefined( enemy.jump_pad_previous ) && enemy.jump_pad_previous == enemy.jump_pad_current ) + ignore_poi = 1; + } + } + + if ( is_true( ignore_poi ) ) + { + zombies[i] thread add_poi_to_ignore_list( ent_poi ); + continue; + } + + zombies[i].ignore_distance_tracking = 1; + zombies[i]._pad_follow = 1; + zombies[i] thread stop_chasing_the_sky( ent_poi ); + } +} + +jump_pad_ignore_poi_cleanup( ent_poi ) +{ + zombies = getaiarray( level.zombie_team ); + + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i] ) ) + { + if ( is_true( zombies[i]._pad_follow ) ) + { + zombies[i]._pad_follow = 0; + zombies[i] notify( "stop_chasing_the_sky" ); + zombies[i].ignore_distance_tracking = 0; + } + + if ( isdefined( ent_poi ) ) + zombies[i] thread remove_poi_from_ignore_list( ent_poi ); + } + } +} + +stop_chasing_the_sky( ent_poi ) +{ + self endon( "death" ); + self endon( "stop_chasing_the_sky" ); + + while ( is_true( self._pad_follow ) ) + { + if ( isdefined( self.favoriteenemy ) ) + { + players = getplayers(); + + for ( i = 0; i < players.size; i++ ) + { + if ( is_player_valid( players[i] ) && players[i] != self.favoriteenemy ) + { + if ( distance2dsquared( players[i].origin, self.origin ) < 10000 ) + { + self add_poi_to_ignore_list( ent_poi ); + return; + } + } + } + } + + wait 0.1; + } + + self._pad_follow = 0; + self.ignore_distance_tracking = 0; + self notify( "stop_chasing_the_sky" ); +} + +jump_pad_player_overrides( st_behavior, int_clean ) +{ + if ( !isdefined( st_behavior ) || !isstring( st_behavior ) ) + return; + + if ( !isdefined( int_clean ) ) + int_clean = 0; + + switch ( st_behavior ) + { + case "no_sprint": + if ( !int_clean ) + { + + } + else + { + + } + + break; + default: + if ( isdefined( level._jump_pad_level_behavior ) ) + self [[ level._jump_pad_level_behavior ]]( st_behavior, int_clean ); + else + { + + } + + break; + } +} diff --git a/ZM/Core/maps/mp/zombies/_zm_laststand.gsc b/ZM/Core/maps/mp/zombies/_zm_laststand.gsc new file mode 100644 index 0000000..5630482 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_laststand.gsc @@ -0,0 +1,1322 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\_demo; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\gametypes_zm\_gameobjects; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_chugabud; +#include maps\mp\zombies\_zm_perks; + +laststand_global_init() +{ + level.const_laststand_getup_count_start = 0; + level.const_laststand_getup_bar_start = 0.5; + level.const_laststand_getup_bar_regen = 0.0025; + level.const_laststand_getup_bar_damage = 0.1; +} + +init() +{ + if ( level.script == "frontend" ) + return; + + laststand_global_init(); + level.revive_tool = "syrette_zm"; + precacheitem( level.revive_tool ); + precachestring( &"ZOMBIE_BUTTON_TO_REVIVE_PLAYER" ); + precachestring( &"ZOMBIE_PLAYER_NEEDS_TO_BE_REVIVED" ); + precachestring( &"ZOMBIE_PLAYER_IS_REVIVING_YOU" ); + precachestring( &"ZOMBIE_REVIVING" ); + + if ( !isdefined( level.laststandpistol ) ) + { + level.laststandpistol = "m1911"; + precacheitem( level.laststandpistol ); + } + + level thread revive_hud_think(); + level.primaryprogressbarx = 0; + level.primaryprogressbary = 110; + level.primaryprogressbarheight = 4; + level.primaryprogressbarwidth = 120; + level.primaryprogressbary_ss = 280; + + if ( getdvar( _hash_A17166B0 ) == "" ) + setdvar( "revive_trigger_radius", "40" ); + + level.laststandgetupallowed = 0; +} + +player_is_in_laststand() +{ + if ( !( isdefined( self.no_revive_trigger ) && self.no_revive_trigger ) ) + return isdefined( self.revivetrigger ); + else + return isdefined( self.laststand ) && self.laststand; +} + +player_num_in_laststand() +{ + num = 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] player_is_in_laststand() ) + num++; + } + + return num; +} + +player_all_players_in_laststand() +{ + return player_num_in_laststand() == get_players().size; +} + +player_any_player_in_laststand() +{ + return player_num_in_laststand() > 0; +} + +player_last_stand_stats( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + if ( isdefined( attacker ) && isplayer( attacker ) && attacker != self ) + { + if ( "zcleansed" == level.gametype ) + maps\mp\_demo::bookmark( "kill", gettime(), self, attacker, 0, einflictor ); + + if ( "zcleansed" == level.gametype ) + { + if ( isdefined( attacker.is_zombie ) && !attacker.is_zombie ) + attacker.kills++; + else + attacker.downs++; + } + else + attacker.kills++; + + attacker maps\mp\zombies\_zm_stats::increment_client_stat( "kills" ); + attacker maps\mp\zombies\_zm_stats::increment_player_stat( "kills" ); + + if ( isdefined( sweapon ) ) + { + dmgweapon = sweapon; + + if ( is_alt_weapon( dmgweapon ) ) + dmgweapon = weaponaltweaponname( dmgweapon ); + + attacker addweaponstat( dmgweapon, "kills", 1 ); + } + + if ( is_headshot( sweapon, shitloc, smeansofdeath ) ) + { + attacker.headshots++; + attacker maps\mp\zombies\_zm_stats::increment_client_stat( "headshots" ); + attacker addweaponstat( sweapon, "headshots", 1 ); + attacker maps\mp\zombies\_zm_stats::increment_player_stat( "headshots" ); + } + } + + self increment_downed_stat(); + + if ( flag( "solo_game" ) && !self.lives && getnumconnectedplayers() < 2 ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "deaths" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "deaths" ); + self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat(); + } +} + +increment_downed_stat() +{ + if ( "zcleansed" != level.gametype ) + self.downs++; + + self maps\mp\zombies\_zm_stats::increment_client_stat( "downs" ); + self add_weighted_down(); + self maps\mp\zombies\_zm_stats::increment_player_stat( "downs" ); + zonename = self get_current_zone(); + + if ( !isdefined( zonename ) ) + zonename = ""; + + self recordplayerdownzombies( zonename ); +} + +playerlaststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + self notify( "entering_last_stand" ); + + if ( isdefined( level._game_module_player_laststand_callback ) ) + self [[ level._game_module_player_laststand_callback ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); + + if ( self player_is_in_laststand() ) + return; + + if ( isdefined( self.in_zombify_call ) && self.in_zombify_call ) + return; + + self thread player_last_stand_stats( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); + + if ( isdefined( level.playerlaststand_func ) ) + [[ level.playerlaststand_func ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); + + self.health = 1; + self.laststand = 1; + self.ignoreme = 1; + self thread maps\mp\gametypes_zm\_gameobjects::onplayerlaststand(); + self thread maps\mp\zombies\_zm_buildables::onplayerlaststand(); + + if ( !( isdefined( self.no_revive_trigger ) && self.no_revive_trigger ) ) + self revive_trigger_spawn(); + else + self undolaststand(); + + if ( isdefined( self.is_zombie ) && self.is_zombie ) + { + self takeallweapons(); + + if ( isdefined( attacker ) && isplayer( attacker ) && attacker != self ) + attacker notify( "killed_a_zombie_player", einflictor, self, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); + } + else + { + self laststand_disable_player_weapons(); + self laststand_give_pistol(); + } + + if ( isdefined( level.playersuicideallowed ) && level.playersuicideallowed && get_players().size > 1 ) + { + if ( !isdefined( level.canplayersuicide ) || self [[ level.canplayersuicide ]]() ) + self thread suicide_trigger_spawn(); + } + + if ( isdefined( self.disabled_perks ) ) + self.disabled_perks = []; + + if ( level.laststandgetupallowed ) + self thread laststand_getup(); + else + { + bleedout_time = getdvarfloat( "player_lastStandBleedoutTime" ); + self thread laststand_bleedout( bleedout_time ); + } + + if ( "zcleansed" != level.gametype ) + maps\mp\_demo::bookmark( "zm_player_downed", gettime(), self ); + + self notify( "player_downed" ); + self thread refire_player_downed(); + self thread cleanup_laststand_on_disconnect(); +} + +refire_player_downed() +{ + self endon( "player_revived" ); + self endon( "death" ); + self endon( "disconnect" ); + wait 1.0; + + if ( self.num_perks ) + self notify( "player_downed" ); +} + +laststand_allowed( sweapon, smeansofdeath, shitloc ) +{ + if ( level.laststandpistol == "none" ) + return false; + + return true; +} + +laststand_disable_player_weapons() +{ + weaponinventory = self getweaponslist( 1 ); + self.lastactiveweapon = self getcurrentweapon(); + + if ( self isthrowinggrenade() && is_offhand_weapon( self.lastactiveweapon ) ) + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + { + self.lastactiveweapon = primaryweapons[0]; + self switchtoweaponimmediate( self.lastactiveweapon ); + } + } + + self setlaststandprevweap( self.lastactiveweapon ); + self.laststandpistol = undefined; + self.hadpistol = 0; + + if ( isdefined( self.weapon_taken_by_losing_specialty_additionalprimaryweapon ) && self.lastactiveweapon == self.weapon_taken_by_losing_specialty_additionalprimaryweapon ) + { + self.lastactiveweapon = "none"; + self.weapon_taken_by_losing_specialty_additionalprimaryweapon = undefined; + } + + for ( i = 0; i < weaponinventory.size; i++ ) + { + weapon = weaponinventory[i]; + class = weaponclass( weapon ); + + if ( issubstr( weapon, "knife_ballistic_" ) ) + class = "knife"; + + if ( ( class == "pistol" || class == "pistol spread" || class == "pistolspread" ) && !isdefined( self.laststandpistol ) ) + { + self.laststandpistol = weapon; + self.hadpistol = 1; + } + + if ( weapon == "syrette_zm" ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "failed_sacrifices" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "failed_sacrifices" ); + } + else if ( is_zombie_perk_bottle( weapon ) ) + { + self takeweapon( weapon ); + self.lastactiveweapon = "none"; + continue; + } + + if ( isdefined( get_gamemode_var( "item_meat_name" ) ) ) + { + if ( weapon == get_gamemode_var( "item_meat_name" ) ) + { + self takeweapon( weapon ); + self.lastactiveweapon = "none"; + continue; + } + } + } + + if ( isdefined( self.hadpistol ) && self.hadpistol == 1 && isdefined( level.zombie_last_stand_pistol_memory ) ) + self [[ level.zombie_last_stand_pistol_memory ]](); + + if ( !isdefined( self.laststandpistol ) ) + self.laststandpistol = level.laststandpistol; + + self disableweaponcycling(); + self notify( "weapons_taken_for_last_stand" ); +} + +laststand_enable_player_weapons() +{ + if ( isdefined( self.hadpistol ) && !self.hadpistol && isdefined( self.laststandpistol ) ) + self takeweapon( self.laststandpistol ); + + if ( isdefined( self.hadpistol ) && self.hadpistol == 1 && isdefined( level.zombie_last_stand_ammo_return ) ) + [[ level.zombie_last_stand_ammo_return ]](); + + self enableweaponcycling(); + self enableoffhandweapons(); + + if ( isdefined( self.lastactiveweapon ) && self.lastactiveweapon != "none" && self hasweapon( self.lastactiveweapon ) && !is_placeable_mine( self.lastactiveweapon ) && !is_equipment( self.lastactiveweapon ) ) + self switchtoweapon( self.lastactiveweapon ); + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + } +} + +laststand_clean_up_on_disconnect( playerbeingrevived, revivergun ) +{ + self endon( "do_revive_ended_normally" ); + revivetrigger = playerbeingrevived.revivetrigger; + + playerbeingrevived waittill( "disconnect" ); + + if ( isdefined( revivetrigger ) ) + revivetrigger delete(); + + self cleanup_suicide_hud(); + + if ( isdefined( self.reviveprogressbar ) ) + self.reviveprogressbar destroyelem(); + + if ( isdefined( self.revivetexthud ) ) + self.revivetexthud destroy(); + + self revive_give_back_weapons( revivergun ); +} + +laststand_clean_up_reviving_any( playerbeingrevived ) +{ + self endon( "do_revive_ended_normally" ); + playerbeingrevived waittill_any( "disconnect", "zombified", "stop_revive_trigger" ); + self.is_reviving_any--; + + if ( 0 > self.is_reviving_any ) + self.is_reviving_any = 0; +} + +laststand_give_pistol() +{ + assert( isdefined( self.laststandpistol ) ); + assert( self.laststandpistol != "none" ); + + if ( isdefined( level.zombie_last_stand ) ) + [[ level.zombie_last_stand ]](); + else + { + self giveweapon( self.laststandpistol ); + self givemaxammo( self.laststandpistol ); + self switchtoweapon( self.laststandpistol ); + } +} + +laststand_bleedout( delay ) +{ + self endon( "player_revived" ); + self endon( "player_suicide" ); + self endon( "zombified" ); + self endon( "disconnect" ); + + if ( isdefined( self.is_zombie ) && self.is_zombie || isdefined( self.no_revive_trigger ) && self.no_revive_trigger ) + { + self notify( "bled_out" ); + wait_network_frame(); + self bleed_out(); + return; + } + + setclientsysstate( "lsm", "1", self ); + self.bleedout_time = delay; + + while ( self.bleedout_time > int( delay * 0.5 ) ) + { + self.bleedout_time -= 1; + wait 1; + } + + visionsetlaststand( "zombie_death", delay * 0.5 ); + + while ( self.bleedout_time > 0 ) + { + self.bleedout_time -= 1; + wait 1; + } + + while ( isdefined( self.revivetrigger ) && isdefined( self.revivetrigger.beingrevived ) && self.revivetrigger.beingrevived == 1 ) + wait 0.1; + + self notify( "bled_out" ); + wait_network_frame(); + self bleed_out(); +} + +bleed_out() +{ + self cleanup_suicide_hud(); + + if ( isdefined( self.revivetrigger ) ) + self.revivetrigger delete(); + + self.revivetrigger = undefined; + setclientsysstate( "lsm", "0", self ); + self maps\mp\zombies\_zm_stats::increment_client_stat( "deaths" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "deaths" ); + self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat(); + self recordplayerdeathzombies(); + self maps\mp\zombies\_zm_equipment::equipment_take(); + + if ( "zcleansed" != level.gametype ) + maps\mp\_demo::bookmark( "zm_player_bledout", gettime(), self, undefined, 1 ); + + level notify( "bleed_out", self.characterindex ); + self undolaststand(); + + if ( isdefined( level.is_zombie_level ) && level.is_zombie_level ) + self thread [[ level.player_becomes_zombie ]](); + else if ( isdefined( level.is_specops_level ) && level.is_specops_level ) + self thread [[ level.spawnspectator ]](); + else + self.ignoreme = 0; +} + +cleanup_suicide_hud() +{ + if ( isdefined( self.suicideprompt ) ) + self.suicideprompt destroy(); + + self.suicideprompt = undefined; +} + +clean_up_suicide_hud_on_end_game() +{ + self endon( "disconnect" ); + self endon( "zombified" ); + self endon( "stop_revive_trigger" ); + self endon( "player_revived" ); + self endon( "bled_out" ); + level waittill_any( "end_game", "stop_suicide_trigger" ); + self cleanup_suicide_hud(); + + if ( isdefined( self.suicidetexthud ) ) + self.suicidetexthud destroy(); + + if ( isdefined( self.suicideprogressbar ) ) + self.suicideprogressbar destroyelem(); +} + +clean_up_suicide_hud_on_bled_out() +{ + self endon( "disconnect" ); + self endon( "zombified" ); + self endon( "stop_revive_trigger" ); + self waittill_any( "bled_out", "player_revived", "fake_death" ); + self cleanup_suicide_hud(); + + if ( isdefined( self.suicideprogressbar ) ) + self.suicideprogressbar destroyelem(); + + if ( isdefined( self.suicidetexthud ) ) + self.suicidetexthud destroy(); +} + +suicide_trigger_spawn() +{ + radius = getdvarint( _hash_A17166B0 ); + self.suicideprompt = newclienthudelem( self ); + self.suicideprompt.alignx = "center"; + self.suicideprompt.aligny = "middle"; + self.suicideprompt.horzalign = "center"; + self.suicideprompt.vertalign = "bottom"; + self.suicideprompt.y = -170; + + if ( self issplitscreen() ) + self.suicideprompt.y = -132; + + self.suicideprompt.foreground = 1; + self.suicideprompt.font = "default"; + self.suicideprompt.fontscale = 1.5; + self.suicideprompt.alpha = 1; + self.suicideprompt.color = ( 1, 1, 1 ); + self.suicideprompt.hidewheninmenu = 1; + self thread suicide_trigger_think(); +} + +suicide_trigger_think() +{ + self endon( "disconnect" ); + self endon( "zombified" ); + self endon( "stop_revive_trigger" ); + self endon( "player_revived" ); + self endon( "bled_out" ); + self endon( "fake_death" ); + level endon( "end_game" ); + level endon( "stop_suicide_trigger" ); + self thread clean_up_suicide_hud_on_end_game(); + self thread clean_up_suicide_hud_on_bled_out(); + + while ( self usebuttonpressed() ) + wait 1; + + if ( !isdefined( self.suicideprompt ) ) + return; + + while ( true ) + { + wait 0.1; + + if ( !isdefined( self.suicideprompt ) ) + continue; + + self.suicideprompt settext( &"ZOMBIE_BUTTON_TO_SUICIDE" ); + + if ( !self is_suiciding() ) + continue; + + self.pre_suicide_weapon = self getcurrentweapon(); + self giveweapon( level.suicide_weapon ); + self switchtoweapon( level.suicide_weapon ); + duration = self docowardswayanims(); + suicide_success = suicide_do_suicide( duration ); + self.laststand = undefined; + self takeweapon( level.suicide_weapon ); + + if ( suicide_success ) + { + self notify( "player_suicide" ); + wait_network_frame(); + self maps\mp\zombies\_zm_stats::increment_client_stat( "suicides" ); + self bleed_out(); + return; + } + + self switchtoweapon( self.pre_suicide_weapon ); + self.pre_suicide_weapon = undefined; + } +} + +suicide_do_suicide( duration ) +{ + level endon( "end_game" ); + level endon( "stop_suicide_trigger" ); + suicidetime = duration; + timer = 0; + suicided = 0; + self.suicideprompt settext( "" ); + + if ( !isdefined( self.suicideprogressbar ) ) + self.suicideprogressbar = self createprimaryprogressbar(); + + if ( !isdefined( self.suicidetexthud ) ) + self.suicidetexthud = newclienthudelem( self ); + + self.suicideprogressbar updatebar( 0.01, 1 / suicidetime ); + self.suicidetexthud.alignx = "center"; + self.suicidetexthud.aligny = "middle"; + self.suicidetexthud.horzalign = "center"; + self.suicidetexthud.vertalign = "bottom"; + self.suicidetexthud.y = -173; + + if ( self issplitscreen() ) + self.suicidetexthud.y = -147; + + self.suicidetexthud.foreground = 1; + self.suicidetexthud.font = "default"; + self.suicidetexthud.fontscale = 1.8; + self.suicidetexthud.alpha = 1; + self.suicidetexthud.color = ( 1, 1, 1 ); + self.suicidetexthud.hidewheninmenu = 1; + self.suicidetexthud settext( &"ZOMBIE_SUICIDING" ); + + while ( self is_suiciding() ) + { + wait 0.05; + timer += 0.05; + + if ( timer >= suicidetime ) + { + suicided = 1; + break; + } + } + + if ( isdefined( self.suicideprogressbar ) ) + self.suicideprogressbar destroyelem(); + + if ( isdefined( self.suicidetexthud ) ) + self.suicidetexthud destroy(); + + if ( isdefined( self.suicideprompt ) ) + self.suicideprompt settext( &"ZOMBIE_BUTTON_TO_SUICIDE" ); + + return suicided; +} + +can_suicide() +{ + if ( !isalive( self ) ) + return false; + + if ( !self player_is_in_laststand() ) + return false; + + if ( !isdefined( self.suicideprompt ) ) + return false; + + if ( isdefined( self.is_zombie ) && self.is_zombie ) + return false; + + if ( isdefined( level.intermission ) && level.intermission ) + return false; + + return true; +} + +is_suiciding( revivee ) +{ + return self usebuttonpressed() && can_suicide(); +} + +revive_trigger_spawn() +{ + if ( isdefined( level.revive_trigger_spawn_override_link ) ) + [[ level.revive_trigger_spawn_override_link ]]( self ); + else + { + radius = getdvarint( _hash_A17166B0 ); + self.revivetrigger = spawn( "trigger_radius", ( 0, 0, 0 ), 0, radius, radius ); + self.revivetrigger sethintstring( "" ); + self.revivetrigger setcursorhint( "HINT_NOICON" ); + self.revivetrigger setmovingplatformenabled( 1 ); + self.revivetrigger enablelinkto(); + self.revivetrigger.origin = self.origin; + self.revivetrigger linkto( self ); + self.revivetrigger.beingrevived = 0; + self.revivetrigger.createtime = gettime(); + } + + self thread revive_trigger_think(); +} + +revive_trigger_think() +{ + self endon( "disconnect" ); + self endon( "zombified" ); + self endon( "stop_revive_trigger" ); + level endon( "end_game" ); + self endon( "death" ); + + while ( true ) + { + wait 0.1; + self.revivetrigger sethintstring( "" ); + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + d = 0; + d = self depthinwater(); + + if ( players[i] can_revive( self ) || d > 20 ) + { + self.revivetrigger setrevivehintstring( &"ZOMBIE_BUTTON_TO_REVIVE_PLAYER", self.team ); + break; + } + } + + for ( i = 0; i < players.size; i++ ) + { + reviver = players[i]; + + if ( self == reviver || !reviver is_reviving( self ) ) + continue; + + gun = reviver getcurrentweapon(); + assert( isdefined( gun ) ); + + if ( gun == level.revive_tool ) + continue; + + reviver giveweapon( level.revive_tool ); + reviver switchtoweapon( level.revive_tool ); + reviver setweaponammostock( level.revive_tool, 1 ); + revive_success = reviver revive_do_revive( self, gun ); + reviver revive_give_back_weapons( gun ); + + if ( isplayer( self ) ) + self allowjump( 1 ); + + self.laststand = undefined; + + if ( revive_success ) + { + if ( isplayer( self ) ) + maps\mp\zombies\_zm_chugabud::player_revived_cleanup_chugabud_corpse(); + + self thread revive_success( reviver ); + self cleanup_suicide_hud(); + return; + } + } + } +} + +revive_give_back_weapons( gun ) +{ + self takeweapon( level.revive_tool ); + + if ( self player_is_in_laststand() ) + return; + + if ( gun != "none" && !is_placeable_mine( gun ) && gun != "equip_gasmask_zm" && gun != "lower_equip_gasmask_zm" && self hasweapon( gun ) ) + self switchtoweapon( gun ); + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + } +} + +can_revive( revivee ) +{ + if ( !isdefined( revivee.revivetrigger ) ) + return false; + + if ( !isalive( self ) ) + return false; + + if ( self player_is_in_laststand() ) + return false; + + if ( self.team != revivee.team ) + return false; + + if ( isdefined( self.is_zombie ) && self.is_zombie ) + return false; + + if ( self has_powerup_weapon() ) + return false; + + if ( isdefined( level.can_revive_use_depthinwater_test ) && level.can_revive_use_depthinwater_test && revivee depthinwater() > 10 ) + return true; + + if ( isdefined( level.can_revive ) && ![[ level.can_revive ]]( revivee ) ) + return false; + + if ( isdefined( level.can_revive_game_module ) && ![[ level.can_revive_game_module ]]( revivee ) ) + return false; + + ignore_sight_checks = 0; + ignore_touch_checks = 0; + + if ( isdefined( level.revive_trigger_should_ignore_sight_checks ) ) + { + ignore_sight_checks = [[ level.revive_trigger_should_ignore_sight_checks ]]( self ); + + if ( ignore_sight_checks && isdefined( revivee.revivetrigger.beingrevived ) && revivee.revivetrigger.beingrevived == 1 ) + ignore_touch_checks = 1; + } + + if ( !ignore_touch_checks ) + { + if ( !self istouching( revivee.revivetrigger ) ) + return false; + } + + if ( !ignore_sight_checks ) + { + if ( !self is_facing( revivee ) ) + return false; + + if ( !sighttracepassed( self.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), revivee.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), 0, undefined ) ) + return false; + + if ( !bullettracepassed( self.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), revivee.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), 0, undefined ) ) + return false; + } + + return true; +} + +is_reviving( revivee ) +{ + return self usebuttonpressed() && can_revive( revivee ); +} + +is_reviving_any() +{ + return isdefined( self.is_reviving_any ) && self.is_reviving_any; +} + +is_facing( facee ) +{ + orientation = self getplayerangles(); + forwardvec = anglestoforward( orientation ); + forwardvec2d = ( forwardvec[0], forwardvec[1], 0 ); + unitforwardvec2d = vectornormalize( forwardvec2d ); + tofaceevec = facee.origin - self.origin; + tofaceevec2d = ( tofaceevec[0], tofaceevec[1], 0 ); + unittofaceevec2d = vectornormalize( tofaceevec2d ); + dotproduct = vectordot( unitforwardvec2d, unittofaceevec2d ); + return dotproduct > 0.9; +} + +revive_do_revive( playerbeingrevived, revivergun ) +{ + assert( self is_reviving( playerbeingrevived ) ); + revivetime = 3; + + if ( self hasperk( "specialty_quickrevive" ) ) + revivetime /= 2; + + if ( self maps\mp\zombies\_zm_pers_upgrades_functions::pers_revive_active() ) + revivetime *= 0.5; + + timer = 0; + revived = 0; + playerbeingrevived.revivetrigger.beingrevived = 1; + playerbeingrevived.revive_hud settext( &"ZOMBIE_PLAYER_IS_REVIVING_YOU", self ); + playerbeingrevived revive_hud_show_n_fade( 3.0 ); + playerbeingrevived.revivetrigger sethintstring( "" ); + + if ( isplayer( playerbeingrevived ) ) + playerbeingrevived startrevive( self ); + + if ( !isdefined( self.reviveprogressbar ) ) + self.reviveprogressbar = self createprimaryprogressbar(); + + if ( !isdefined( self.revivetexthud ) ) + self.revivetexthud = newclienthudelem( self ); + + self thread laststand_clean_up_on_disconnect( playerbeingrevived, revivergun ); + + if ( !isdefined( self.is_reviving_any ) ) + self.is_reviving_any = 0; + + self.is_reviving_any++; + self thread laststand_clean_up_reviving_any( playerbeingrevived ); + self.reviveprogressbar updatebar( 0.01, 1 / revivetime ); + self.revivetexthud.alignx = "center"; + self.revivetexthud.aligny = "middle"; + self.revivetexthud.horzalign = "center"; + self.revivetexthud.vertalign = "bottom"; + self.revivetexthud.y = -113; + + if ( self issplitscreen() ) + self.revivetexthud.y = -347; + + self.revivetexthud.foreground = 1; + self.revivetexthud.font = "default"; + self.revivetexthud.fontscale = 1.8; + self.revivetexthud.alpha = 1; + self.revivetexthud.color = ( 1, 1, 1 ); + self.revivetexthud.hidewheninmenu = 1; + + if ( self maps\mp\zombies\_zm_pers_upgrades_functions::pers_revive_active() ) + self.revivetexthud.color = ( 0.5, 0.5, 1.0 ); + + self.revivetexthud settext( &"ZOMBIE_REVIVING" ); + self thread check_for_failed_revive( playerbeingrevived ); + + while ( self is_reviving( playerbeingrevived ) ) + { + wait 0.05; + timer += 0.05; + + if ( self player_is_in_laststand() ) + break; + + if ( isdefined( playerbeingrevived.revivetrigger.auto_revive ) && playerbeingrevived.revivetrigger.auto_revive == 1 ) + break; + + if ( timer >= revivetime ) + { + revived = 1; + break; + } + } + + if ( isdefined( self.reviveprogressbar ) ) + self.reviveprogressbar destroyelem(); + + if ( isdefined( self.revivetexthud ) ) + self.revivetexthud destroy(); + + if ( isdefined( playerbeingrevived.revivetrigger.auto_revive ) && playerbeingrevived.revivetrigger.auto_revive == 1 ) + { + + } + else if ( !revived ) + { + if ( isplayer( playerbeingrevived ) ) + playerbeingrevived stoprevive( self ); + } + + playerbeingrevived.revivetrigger sethintstring( &"ZOMBIE_BUTTON_TO_REVIVE_PLAYER" ); + playerbeingrevived.revivetrigger.beingrevived = 0; + self notify( "do_revive_ended_normally" ); + self.is_reviving_any--; + + if ( !revived ) + playerbeingrevived thread checkforbleedout( self ); + + return revived; +} + +checkforbleedout( player ) +{ + self endon( "player_revived" ); + self endon( "player_suicide" ); + self endon( "disconnect" ); + player endon( "disconnect" ); + + if ( is_classic() ) + { + player.failed_revives++; + player notify( "player_failed_revive" ); + } +} + +auto_revive( reviver, dont_enable_weapons ) +{ + if ( isdefined( self.revivetrigger ) ) + { + self.revivetrigger.auto_revive = 1; + + if ( self.revivetrigger.beingrevived == 1 ) + { + while ( true ) + { + if ( self.revivetrigger.beingrevived == 0 ) + break; + + wait_network_frame(); + } + } + + self.revivetrigger.auto_trigger = 0; + } + + self reviveplayer(); + self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); + setclientsysstate( "lsm", "0", self ); + self notify( "stop_revive_trigger" ); + + if ( isdefined( self.revivetrigger ) ) + { + self.revivetrigger delete(); + self.revivetrigger = undefined; + } + + self cleanup_suicide_hud(); + + if ( !isdefined( dont_enable_weapons ) || dont_enable_weapons == 0 ) + self laststand_enable_player_weapons(); + + self allowjump( 1 ); + self.ignoreme = 0; + self.laststand = undefined; + + if ( !( isdefined( level.isresetting_grief ) && level.isresetting_grief ) ) + { + reviver.revives++; + reviver maps\mp\zombies\_zm_stats::increment_client_stat( "revives" ); + reviver maps\mp\zombies\_zm_stats::increment_player_stat( "revives" ); + self recordplayerrevivezombies( reviver ); + maps\mp\_demo::bookmark( "zm_player_revived", gettime(), self, reviver ); + } + + self notify( "player_revived", reviver ); +} + +remote_revive( reviver ) +{ + if ( !self player_is_in_laststand() ) + return; + + self auto_revive( reviver ); +} + +revive_success( reviver, b_track_stats = 1 ) +{ + if ( !isplayer( self ) ) + { + self notify( "player_revived", reviver ); + return; + } + + if ( isdefined( b_track_stats ) && b_track_stats ) + maps\mp\_demo::bookmark( "zm_player_revived", gettime(), self, reviver ); + + self notify( "player_revived", reviver ); + self reviveplayer(); + self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); + + if ( isdefined( self.pers_upgrades_awarded["perk_lose"] ) && self.pers_upgrades_awarded["perk_lose"] ) + self thread maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_perk_lose_restore(); + + if ( !( isdefined( level.isresetting_grief ) && level.isresetting_grief ) && ( isdefined( b_track_stats ) && b_track_stats ) ) + { + reviver.revives++; + reviver maps\mp\zombies\_zm_stats::increment_client_stat( "revives" ); + reviver maps\mp\zombies\_zm_stats::increment_player_stat( "revives" ); + self recordplayerrevivezombies( reviver ); + reviver.upgrade_fx_origin = self.origin; + } + + if ( is_classic() && ( isdefined( b_track_stats ) && b_track_stats ) ) + maps\mp\zombies\_zm_pers_upgrades_functions::pers_increment_revive_stat( reviver ); + + if ( isdefined( b_track_stats ) && b_track_stats ) + reviver thread check_for_sacrifice(); + + if ( isdefined( level.missioncallbacks ) ) + { + + } + + setclientsysstate( "lsm", "0", self ); + self.revivetrigger delete(); + self.revivetrigger = undefined; + self cleanup_suicide_hud(); + self laststand_enable_player_weapons(); + self.ignoreme = 0; +} + +revive_force_revive( reviver ) +{ + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( self player_is_in_laststand() ); + self thread revive_success( reviver ); +} + +revive_hud_create() +{ + self.revive_hud = newclienthudelem( self ); + self.revive_hud.alignx = "center"; + self.revive_hud.aligny = "middle"; + self.revive_hud.horzalign = "center"; + self.revive_hud.vertalign = "bottom"; + self.revive_hud.foreground = 1; + self.revive_hud.font = "default"; + self.revive_hud.fontscale = 1.5; + self.revive_hud.alpha = 0; + self.revive_hud.color = ( 1, 1, 1 ); + self.revive_hud.hidewheninmenu = 1; + self.revive_hud settext( "" ); + self.revive_hud.y = -160; +} + +revive_hud_think() +{ + self endon( "disconnect" ); + + while ( true ) + { + wait 0.1; + + if ( !player_any_player_in_laststand() ) + continue; + + players = get_players(); + playertorevive = undefined; + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i].revivetrigger ) || !isdefined( players[i].revivetrigger.createtime ) ) + continue; + + if ( !isdefined( playertorevive ) || playertorevive.revivetrigger.createtime > players[i].revivetrigger.createtime ) + playertorevive = players[i]; + } + + if ( isdefined( playertorevive ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] player_is_in_laststand() ) + continue; + + if ( getdvar( "g_gametype" ) == "vs" ) + { + if ( players[i].team != playertorevive.team ) + continue; + } + + if ( is_encounter() ) + { + if ( players[i].sessionteam != playertorevive.sessionteam ) + continue; + + if ( isdefined( level.hide_revive_message ) && level.hide_revive_message ) + continue; + } + + players[i] thread faderevivemessageover( playertorevive, 3.0 ); + } + + playertorevive.revivetrigger.createtime = undefined; + wait 3.5; + } + } +} + +faderevivemessageover( playertorevive, time ) +{ + revive_hud_show(); + self.revive_hud settext( &"ZOMBIE_PLAYER_NEEDS_TO_BE_REVIVED", playertorevive ); + self.revive_hud fadeovertime( time ); + self.revive_hud.alpha = 0; +} + +revive_hud_show() +{ + assert( isdefined( self ) ); + assert( isdefined( self.revive_hud ) ); + self.revive_hud.alpha = 1; +} + +revive_hud_show_n_fade( time ) +{ + revive_hud_show(); + self.revive_hud fadeovertime( time ); + self.revive_hud.alpha = 0; +} + +drawcylinder( pos, rad, height ) +{ +/# + currad = rad; + curheight = height; + + for ( r = 0; r < 20; r++ ) + { + theta = r / 20 * 360; + theta2 = ( r + 1 ) / 20 * 360; + line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, 0 ) ); + line( pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, curheight ) ); + line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ) ); + } +#/ +} + +get_lives_remaining() +{ + assert( level.laststandgetupallowed, "Lives only exist in the Laststand type GETUP." ); + + if ( level.laststandgetupallowed && isdefined( self.laststand_info ) && isdefined( self.laststand_info.type_getup_lives ) ) + return max( 0, self.laststand_info.type_getup_lives ); + + return 0; +} + +update_lives_remaining( increment ) +{ + assert( level.laststandgetupallowed, "Lives only exist in the Laststand type GETUP." ); + assert( isdefined( increment ), "Must specify increment true or false" ); + increment = isdefined( increment ) ? increment : 0; + self.laststand_info.type_getup_lives = max( 0, increment ? self.laststand_info.type_getup_lives + 1 : self.laststand_info.type_getup_lives - 1 ); + self notify( "laststand_lives_updated" ); +} + +player_getup_setup() +{ +/# + println( "ZM >> player_getup_setup called" ); +#/ + self.laststand_info = spawnstruct(); + self.laststand_info.type_getup_lives = level.const_laststand_getup_count_start; +} + +laststand_getup() +{ + self endon( "player_revived" ); + self endon( "disconnect" ); +/# + println( "ZM >> laststand_getup called" ); +#/ + self update_lives_remaining( 0 ); + setclientsysstate( "lsm", "1", self ); + self.laststand_info.getup_bar_value = level.const_laststand_getup_bar_start; + self thread laststand_getup_hud(); + self thread laststand_getup_damage_watcher(); + + while ( self.laststand_info.getup_bar_value < 1 ) + { + self.laststand_info.getup_bar_value += level.const_laststand_getup_bar_regen; + wait 0.05; + } + + self auto_revive( self ); + setclientsysstate( "lsm", "0", self ); +} + +laststand_getup_damage_watcher() +{ + self endon( "player_revived" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "damage" ); + + self.laststand_info.getup_bar_value -= level.const_laststand_getup_bar_damage; + + if ( self.laststand_info.getup_bar_value < 0 ) + self.laststand_info.getup_bar_value = 0; + } +} + +laststand_getup_hud() +{ + self endon( "player_revived" ); + self endon( "disconnect" ); + hudelem = newclienthudelem( self ); + hudelem.alignx = "left"; + hudelem.aligny = "middle"; + hudelem.horzalign = "left"; + hudelem.vertalign = "middle"; + hudelem.x = 5; + hudelem.y = 170; + hudelem.font = "big"; + hudelem.fontscale = 1.5; + hudelem.foreground = 1; + hudelem.hidewheninmenu = 1; + hudelem.hidewhendead = 1; + hudelem.sort = 2; + hudelem.label = &"SO_WAR_LASTSTAND_GETUP_BAR"; + self thread laststand_getup_hud_destroy( hudelem ); + + while ( true ) + { + hudelem setvalue( self.laststand_info.getup_bar_value ); + wait 0.05; + } +} + +laststand_getup_hud_destroy( hudelem ) +{ + self waittill_either( "player_revived", "disconnect" ); + hudelem destroy(); +} + +check_for_sacrifice() +{ + self delay_notify( "sacrifice_denied", 1 ); + self endon( "sacrifice_denied" ); + + self waittill( "player_downed" ); + + self maps\mp\zombies\_zm_stats::increment_client_stat( "sacrifices" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "sacrifices" ); +} + +check_for_failed_revive( playerbeingrevived ) +{ + self endon( "disconnect" ); + playerbeingrevived endon( "disconnect" ); + playerbeingrevived endon( "player_suicide" ); + self notify( "checking_for_failed_revive" ); + self endon( "checking_for_failed_revive" ); + playerbeingrevived endon( "player_revived" ); + + playerbeingrevived waittill( "bled_out" ); + + self maps\mp\zombies\_zm_stats::increment_client_stat( "failed_revives" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "failed_revives" ); +} + +add_weighted_down() +{ + if ( !level.curr_gametype_affects_rank ) + return; + + weighted_down = 1000; + + if ( level.round_number > 0 ) + weighted_down = int( 1000.0 / ceil( level.round_number / 5.0 ) ); + + self addplayerstat( "weighted_downs", weighted_down ); +} + +cleanup_laststand_on_disconnect() +{ + self endon( "player_revived" ); + self endon( "player_suicide" ); + self endon( "bled_out" ); + trig = self.revivetrigger; + + self waittill( "disconnect" ); + + if ( isdefined( trig ) ) + trig delete(); +} diff --git a/ZM/Core/maps/mp/zombies/_zm_magicbox.gsc b/ZM/Core/maps/mp/zombies/_zm_magicbox.gsc new file mode 100644 index 0000000..4a9f609 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_magicbox.gsc @@ -0,0 +1,1540 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_magicbox_lock; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\_demo; +#include maps\mp\zombies\_zm_stats; + +init() +{ + if ( !isdefined( level.chest_joker_model ) ) + { + level.chest_joker_model = "zombie_teddybear"; + precachemodel( level.chest_joker_model ); + } + + if ( !isdefined( level.magic_box_zbarrier_state_func ) ) + level.magic_box_zbarrier_state_func = ::process_magic_box_zbarrier_state; + + if ( isdefined( level.using_locked_magicbox ) && level.using_locked_magicbox ) + maps\mp\zombies\_zm_magicbox_lock::init(); + + if ( is_classic() ) + { + level.chests = getstructarray( "treasure_chest_use", "targetname" ); + treasure_chest_init( "start_chest" ); + } + + if ( level.createfx_enabled ) + return; + + registerclientfield( "zbarrier", "magicbox_glow", 1000, 1, "int" ); + registerclientfield( "zbarrier", "zbarrier_show_sounds", 9000, 1, "int" ); + registerclientfield( "zbarrier", "zbarrier_leave_sounds", 9000, 1, "int" ); + + if ( !isdefined( level.magic_box_check_equipment ) ) + level.magic_box_check_equipment = ::default_magic_box_check_equipment; + + level thread magicbox_host_migration(); +} + +treasure_chest_init( start_chest_name ) +{ + flag_init( "moving_chest_enabled" ); + flag_init( "moving_chest_now" ); + flag_init( "chest_has_been_used" ); + level.chest_moves = 0; + level.chest_level = 0; + + if ( level.chests.size == 0 ) + return; + + for ( i = 0; i < level.chests.size; i++ ) + { + level.chests[i].box_hacks = []; + level.chests[i].orig_origin = level.chests[i].origin; + level.chests[i] get_chest_pieces(); + + if ( isdefined( level.chests[i].zombie_cost ) ) + { + level.chests[i].old_cost = level.chests[i].zombie_cost; + continue; + } + + level.chests[i].old_cost = 950; + } + + if ( !level.enable_magic ) + { + foreach ( chest in level.chests ) + chest hide_chest(); + + return; + } + + level.chest_accessed = 0; + + if ( level.chests.size > 1 ) + { + flag_set( "moving_chest_enabled" ); + level.chests = array_randomize( level.chests ); + } + else + { + level.chest_index = 0; + level.chests[0].no_fly_away = 1; + } + + init_starting_chest_location( start_chest_name ); + array_thread( level.chests, ::treasure_chest_think ); +} + +init_starting_chest_location( start_chest_name ) +{ + level.chest_index = 0; + start_chest_found = 0; + + if ( level.chests.size == 1 ) + { + start_chest_found = 1; + + if ( isdefined( level.chests[level.chest_index].zbarrier ) ) + level.chests[level.chest_index].zbarrier set_magic_box_zbarrier_state( "initial" ); + } + else + { + for ( i = 0; i < level.chests.size; i++ ) + { + if ( isdefined( level.random_pandora_box_start ) && level.random_pandora_box_start == 1 ) + { + if ( start_chest_found || isdefined( level.chests[i].start_exclude ) && level.chests[i].start_exclude == 1 ) + level.chests[i] hide_chest(); + else + { + level.chest_index = i; + level.chests[level.chest_index].hidden = 0; + + if ( isdefined( level.chests[level.chest_index].zbarrier ) ) + level.chests[level.chest_index].zbarrier set_magic_box_zbarrier_state( "initial" ); + + start_chest_found = 1; + } + + continue; + } + + if ( start_chest_found || !isdefined( level.chests[i].script_noteworthy ) || !issubstr( level.chests[i].script_noteworthy, start_chest_name ) ) + { + level.chests[i] hide_chest(); + continue; + } + + level.chest_index = i; + level.chests[level.chest_index].hidden = 0; + + if ( isdefined( level.chests[level.chest_index].zbarrier ) ) + level.chests[level.chest_index].zbarrier set_magic_box_zbarrier_state( "initial" ); + + start_chest_found = 1; + } + } + + if ( !isdefined( level.pandora_show_func ) ) + level.pandora_show_func = ::default_pandora_show_func; + + level.chests[level.chest_index] thread [[ level.pandora_show_func ]](); +} + +set_treasure_chest_cost( cost ) +{ + level.zombie_treasure_chest_cost = cost; +} + +get_chest_pieces() +{ + self.chest_box = getent( self.script_noteworthy + "_zbarrier", "script_noteworthy" ); + self.chest_rubble = []; + rubble = getentarray( self.script_noteworthy + "_rubble", "script_noteworthy" ); + + for ( i = 0; i < rubble.size; i++ ) + { + if ( distancesquared( self.origin, rubble[i].origin ) < 10000 ) + self.chest_rubble[self.chest_rubble.size] = rubble[i]; + } + + self.zbarrier = getent( self.script_noteworthy + "_zbarrier", "script_noteworthy" ); + + if ( isdefined( self.zbarrier ) ) + { + self.zbarrier zbarrierpieceuseboxriselogic( 3 ); + self.zbarrier zbarrierpieceuseboxriselogic( 4 ); + } + + self.unitrigger_stub = spawnstruct(); + self.unitrigger_stub.origin = self.origin + anglestoright( self.angles ) * -22.5; + self.unitrigger_stub.angles = self.angles; + self.unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + self.unitrigger_stub.script_width = 104; + self.unitrigger_stub.script_height = 50; + self.unitrigger_stub.script_length = 45; + self.unitrigger_stub.trigger_target = self; + unitrigger_force_per_player_triggers( self.unitrigger_stub, 1 ); + self.unitrigger_stub.prompt_and_visibility_func = ::boxtrigger_update_prompt; + self.zbarrier.owner = self; +} + +boxtrigger_update_prompt( player ) +{ + can_use = self boxstub_update_prompt( player ); + + if ( isdefined( self.hint_string ) ) + { + if ( isdefined( self.hint_parm1 ) ) + self sethintstring( self.hint_string, self.hint_parm1 ); + else + self sethintstring( self.hint_string ); + } + + return can_use; +} + +boxstub_update_prompt( player ) +{ + self setcursorhint( "HINT_NOICON" ); + + if ( !self trigger_visible_to_player( player ) ) + return false; + + self.hint_parm1 = undefined; + + if ( isdefined( self.stub.trigger_target.grab_weapon_hint ) && self.stub.trigger_target.grab_weapon_hint ) + { + if ( isdefined( level.magic_box_check_equipment ) && [[ level.magic_box_check_equipment ]]( self.stub.trigger_target.grab_weapon_name ) ) + self.hint_string = &"ZOMBIE_TRADE_EQUIP"; + else + self.hint_string = &"ZOMBIE_TRADE_WEAPON"; + } + else if ( isdefined( level.using_locked_magicbox ) && level.using_locked_magicbox && ( isdefined( self.stub.trigger_target.is_locked ) && self.stub.trigger_target.is_locked ) ) + self.hint_string = get_hint_string( self, "locked_magic_box_cost" ); + else + { + self.hint_parm1 = self.stub.trigger_target.zombie_cost; + self.hint_string = get_hint_string( self, "default_treasure_chest" ); + } + + return true; +} + +default_magic_box_check_equipment( weapon ) +{ + return is_offhand_weapon( weapon ); +} + +trigger_visible_to_player( player ) +{ + self setinvisibletoplayer( player ); + visible = 1; + + if ( isdefined( self.stub.trigger_target.chest_user ) && !isdefined( self.stub.trigger_target.box_rerespun ) ) + { + if ( player != self.stub.trigger_target.chest_user || is_placeable_mine( self.stub.trigger_target.chest_user getcurrentweapon() ) || self.stub.trigger_target.chest_user hacker_active() ) + visible = 0; + } + else if ( !player can_buy_weapon() ) + visible = 0; + + if ( !visible ) + return false; + + self setvisibletoplayer( player ); + return true; +} + +magicbox_unitrigger_think() +{ + self endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "trigger", player ); + + self.stub.trigger_target notify( "trigger", player ); + } +} + +play_crazi_sound() +{ + self playlocalsound( level.zmb_laugh_alias ); +} + +show_chest_sound_thread() +{ + self.zbarrier setclientfield( "zbarrier_show_sounds", 1 ); + wait 1.0; + self.zbarrier setclientfield( "zbarrier_show_sounds", 0 ); +} + +show_chest() +{ + self.zbarrier set_magic_box_zbarrier_state( "arriving" ); + + self.zbarrier waittill( "arrived" ); + + self thread [[ level.pandora_show_func ]](); + thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think ); + self thread show_chest_sound_thread(); + self.hidden = 0; + + if ( isdefined( self.box_hacks["summon_box"] ) ) + self [[ self.box_hacks["summon_box"] ]]( 0 ); +} + +hide_chest_sound_thread() +{ + self.zbarrier setclientfield( "zbarrier_leave_sounds", 1 ); + wait 1.0; + self.zbarrier setclientfield( "zbarrier_leave_sounds", 0 ); +} + +hide_chest( doboxleave ) +{ + if ( isdefined( self.unitrigger_stub ) ) + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); + + if ( isdefined( self.pandora_light ) ) + self.pandora_light delete(); + + self.hidden = 1; + + if ( isdefined( self.box_hacks ) && isdefined( self.box_hacks["summon_box"] ) ) + self [[ self.box_hacks["summon_box"] ]]( 1 ); + + if ( isdefined( self.zbarrier ) ) + { + if ( isdefined( doboxleave ) && doboxleave ) + { + self thread hide_chest_sound_thread(); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "boxmove" ); + self.zbarrier thread magic_box_zbarrier_leave(); + + self.zbarrier waittill( "left" ); + + playfx( level._effect["poltergeist"], self.zbarrier.origin, anglestoup( self.angles ), anglestoforward( self.angles ) ); + playsoundatposition( "zmb_box_poof", self.zbarrier.origin ); + } + else + self.zbarrier thread set_magic_box_zbarrier_state( "away" ); + } +} + +magic_box_zbarrier_leave() +{ + self set_magic_box_zbarrier_state( "leaving" ); + + self waittill( "left" ); + + self set_magic_box_zbarrier_state( "away" ); +} + +default_pandora_fx_func() +{ + self endon( "death" ); + self.pandora_light = spawn( "script_model", self.zbarrier.origin ); + self.pandora_light.angles = self.zbarrier.angles + vectorscale( ( -1, 0, -1 ), 90.0 ); + self.pandora_light setmodel( "tag_origin" ); + + if ( !( isdefined( level._box_initialized ) && level._box_initialized ) ) + { + flag_wait( "start_zombie_round_logic" ); + level._box_initialized = 1; + } + + wait 1; + + if ( isdefined( self ) && isdefined( self.pandora_light ) ) + playfxontag( level._effect["lght_marker"], self.pandora_light, "tag_origin" ); +} + +default_pandora_show_func( anchor, anchortarget, pieces ) +{ + if ( !isdefined( self.pandora_light ) ) + { + if ( !isdefined( level.pandora_fx_func ) ) + level.pandora_fx_func = ::default_pandora_fx_func; + + self thread [[ level.pandora_fx_func ]](); + } + + playfx( level._effect["lght_marker_flare"], self.pandora_light.origin ); +} + +unregister_unitrigger_on_kill_think() +{ + self notify( "unregister_unitrigger_on_kill_think" ); + self endon( "unregister_unitrigger_on_kill_think" ); + + self waittill( "kill_chest_think" ); + + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); +} + +treasure_chest_think() +{ + self endon( "kill_chest_think" ); + user = undefined; + user_cost = undefined; + self.box_rerespun = undefined; + self.weapon_out = undefined; + self thread unregister_unitrigger_on_kill_think(); + + while ( true ) + { + if ( !isdefined( self.forced_user ) ) + { + self waittill( "trigger", user ); + + if ( user == level ) + continue; + } + else + user = self.forced_user; + + if ( user in_revive_trigger() ) + { + wait 0.1; + continue; + } + + if ( user.is_drinking > 0 ) + { + wait 0.1; + continue; + } + + if ( isdefined( self.disabled ) && self.disabled ) + { + wait 0.1; + continue; + } + + if ( user getcurrentweapon() == "none" ) + { + wait 0.1; + continue; + } + + reduced_cost = undefined; + + if ( is_player_valid( user ) && user maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) + reduced_cost = int( self.zombie_cost / 2 ); + + if ( isdefined( level.using_locked_magicbox ) && level.using_locked_magicbox && ( isdefined( self.is_locked ) && self.is_locked ) ) + { + if ( user.score >= level.locked_magic_box_cost ) + { + user maps\mp\zombies\_zm_score::minus_to_player_score( level.locked_magic_box_cost ); + self.zbarrier set_magic_box_zbarrier_state( "unlocking" ); + self.unitrigger_stub run_visibility_function_for_all_triggers(); + } + else + user maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_box" ); + + wait 0.1; + continue; + } + else if ( isdefined( self.auto_open ) && is_player_valid( user ) ) + { + if ( !isdefined( self.no_charge ) ) + { + user maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost ); + user_cost = self.zombie_cost; + } + else + user_cost = 0; + + self.chest_user = user; + break; + } + else if ( is_player_valid( user ) && user.score >= self.zombie_cost ) + { + user maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost ); + user_cost = self.zombie_cost; + self.chest_user = user; + break; + } + else if ( isdefined( reduced_cost ) && user.score >= reduced_cost ) + { + user maps\mp\zombies\_zm_score::minus_to_player_score( reduced_cost ); + user_cost = reduced_cost; + self.chest_user = user; + break; + } + else if ( user.score < self.zombie_cost ) + { + play_sound_at_pos( "no_purchase", self.origin ); + user maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_box" ); + continue; + } + + wait 0.05; + } + + flag_set( "chest_has_been_used" ); + maps\mp\_demo::bookmark( "zm_player_use_magicbox", gettime(), user ); + user maps\mp\zombies\_zm_stats::increment_client_stat( "use_magicbox" ); + user maps\mp\zombies\_zm_stats::increment_player_stat( "use_magicbox" ); + + if ( isdefined( level._magic_box_used_vo ) ) + user thread [[ level._magic_box_used_vo ]](); + + self thread watch_for_emp_close(); + + if ( isdefined( level.using_locked_magicbox ) && level.using_locked_magicbox ) + self thread maps\mp\zombies\_zm_magicbox_lock::watch_for_lock(); + + self._box_open = 1; + self._box_opened_by_fire_sale = 0; + + if ( isdefined( level.zombie_vars["zombie_powerup_fire_sale_on"] ) && level.zombie_vars["zombie_powerup_fire_sale_on"] && !isdefined( self.auto_open ) && self [[ level._zombiemode_check_firesale_loc_valid_func ]]() ) + self._box_opened_by_fire_sale = 1; + + if ( isdefined( self.chest_lid ) ) + self.chest_lid thread treasure_chest_lid_open(); + + if ( isdefined( self.zbarrier ) ) + { + play_sound_at_pos( "open_chest", self.origin ); + play_sound_at_pos( "music_chest", self.origin ); + self.zbarrier set_magic_box_zbarrier_state( "open" ); + } + + self.timedout = 0; + self.weapon_out = 1; + self.zbarrier thread treasure_chest_weapon_spawn( self, user ); + self.zbarrier thread treasure_chest_glowfx(); + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); + self.zbarrier waittill_any( "randomization_done", "box_hacked_respin" ); + + if ( flag( "moving_chest_now" ) && !self._box_opened_by_fire_sale && isdefined( user_cost ) ) + user maps\mp\zombies\_zm_score::add_to_player_score( user_cost, 0 ); + + if ( flag( "moving_chest_now" ) && !level.zombie_vars["zombie_powerup_fire_sale_on"] && !self._box_opened_by_fire_sale ) + self thread treasure_chest_move( self.chest_user ); + else + { + self.grab_weapon_hint = 1; + self.grab_weapon_name = self.zbarrier.weapon_string; + self.chest_user = user; + thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think ); + + if ( isdefined( self.zbarrier ) && !is_true( self.zbarrier.closed_by_emp ) ) + self thread treasure_chest_timeout(); + + while ( !( isdefined( self.closed_by_emp ) && self.closed_by_emp ) ) + { + self waittill( "trigger", grabber ); + + self.weapon_out = undefined; + + if ( isdefined( level.magic_box_grab_by_anyone ) && level.magic_box_grab_by_anyone ) + { + if ( isplayer( grabber ) ) + user = grabber; + } + + if ( isdefined( level.pers_upgrade_box_weapon ) && level.pers_upgrade_box_weapon ) + self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_box_weapon_used( user, grabber ); + + if ( isdefined( grabber.is_drinking ) && grabber.is_drinking > 0 ) + { + wait 0.1; + continue; + } + + if ( grabber == user && user getcurrentweapon() == "none" ) + { + wait 0.1; + continue; + } + + if ( grabber != level && ( isdefined( self.box_rerespun ) && self.box_rerespun ) ) + user = grabber; + + if ( grabber == user || grabber == level ) + { + self.box_rerespun = undefined; + current_weapon = "none"; + + if ( is_player_valid( user ) ) + current_weapon = user getcurrentweapon(); + + if ( grabber == user && is_player_valid( user ) && !( user.is_drinking > 0 ) && !is_placeable_mine( current_weapon ) && !is_equipment( current_weapon ) && level.revive_tool != current_weapon ) + { + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", user.name, user.score, level.round_number, self.zombie_cost, self.zbarrier.weapon_string, self.origin, "magic_accept" ); + self notify( "user_grabbed_weapon" ); + user notify( "user_grabbed_weapon" ); + user thread treasure_chest_give_weapon( self.zbarrier.weapon_string ); + maps\mp\_demo::bookmark( "zm_player_grabbed_magicbox", gettime(), user ); + user maps\mp\zombies\_zm_stats::increment_client_stat( "grabbed_from_magicbox" ); + user maps\mp\zombies\_zm_stats::increment_player_stat( "grabbed_from_magicbox" ); + break; + } + else if ( grabber == level ) + { + unacquire_weapon_toggle( self.zbarrier.weapon_string ); + self.timedout = 1; + + if ( is_player_valid( user ) ) + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %S", user.name, user.score, level.round_number, self.zombie_cost, self.zbarrier.weapon_string, self.origin, "magic_reject" ); + + break; + } + } + + wait 0.05; + } + + self.grab_weapon_hint = 0; + self.zbarrier notify( "weapon_grabbed" ); + + if ( !( isdefined( self._box_opened_by_fire_sale ) && self._box_opened_by_fire_sale ) ) + level.chest_accessed += 1; + + if ( level.chest_moves > 0 && isdefined( level.pulls_since_last_ray_gun ) ) + level.pulls_since_last_ray_gun += 1; + + if ( isdefined( level.pulls_since_last_tesla_gun ) ) + level.pulls_since_last_tesla_gun += 1; + + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); + + if ( isdefined( self.chest_lid ) ) + self.chest_lid thread treasure_chest_lid_close( self.timedout ); + + if ( isdefined( self.zbarrier ) ) + { + self.zbarrier set_magic_box_zbarrier_state( "close" ); + play_sound_at_pos( "close_chest", self.origin ); + + self.zbarrier waittill( "closed" ); + + wait 1; + } + else + wait 3.0; + + if ( isdefined( level.zombie_vars["zombie_powerup_fire_sale_on"] ) && level.zombie_vars["zombie_powerup_fire_sale_on"] && self [[ level._zombiemode_check_firesale_loc_valid_func ]]() || self == level.chests[level.chest_index] ) + thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think ); + } + + self._box_open = 0; + self._box_opened_by_fire_sale = 0; + self.chest_user = undefined; + self notify( "chest_accessed" ); + self thread treasure_chest_think(); +} + +watch_for_emp_close() +{ + self endon( "chest_accessed" ); + self.closed_by_emp = 0; + + if ( !should_watch_for_emp() ) + return; + + if ( isdefined( self.zbarrier ) ) + self.zbarrier.closed_by_emp = 0; + + while ( true ) + { + level waittill( "emp_detonate", origin, radius ); + + if ( distancesquared( origin, self.origin ) < radius * radius ) + break; + } + + if ( flag( "moving_chest_now" ) ) + return; + + self.closed_by_emp = 1; + + if ( isdefined( self.zbarrier ) ) + { + self.zbarrier.closed_by_emp = 1; + self.zbarrier notify( "box_hacked_respin" ); + + if ( isdefined( self.zbarrier.weapon_model ) ) + self.zbarrier.weapon_model notify( "kill_weapon_movement" ); + + if ( isdefined( self.zbarrier.weapon_model_dw ) ) + self.zbarrier.weapon_model_dw notify( "kill_weapon_movement" ); + } + + wait 0.1; + self notify( "trigger", level ); +} + +can_buy_weapon() +{ + if ( isdefined( self.is_drinking ) && self.is_drinking > 0 ) + return false; + + if ( self hacker_active() ) + return false; + + current_weapon = self getcurrentweapon(); + + if ( is_placeable_mine( current_weapon ) || is_equipment_that_blocks_purchase( current_weapon ) ) + return false; + + if ( self in_revive_trigger() ) + return false; + + if ( current_weapon == "none" ) + return false; + + return true; +} + +default_box_move_logic() +{ + index = -1; + + for ( i = 0; i < level.chests.size; i++ ) + { + if ( issubstr( level.chests[i].script_noteworthy, "move" + ( level.chest_moves + 1 ) ) && i != level.chest_index ) + { + index = i; + break; + } + } + + if ( index != -1 ) + level.chest_index = index; + else + level.chest_index++; + + if ( level.chest_index >= level.chests.size ) + { + temp_chest_name = level.chests[level.chest_index - 1].script_noteworthy; + level.chest_index = 0; + level.chests = array_randomize( level.chests ); + + if ( temp_chest_name == level.chests[level.chest_index].script_noteworthy ) + level.chest_index++; + } +} + +treasure_chest_move( player_vox ) +{ + level waittill( "weapon_fly_away_start" ); + + players = get_players(); + array_thread( players, ::play_crazi_sound ); + + if ( isdefined( player_vox ) ) + player_vox delay_thread( randomintrange( 2, 7 ), maps\mp\zombies\_zm_audio::create_and_play_dialog, "general", "box_move" ); + + level waittill( "weapon_fly_away_end" ); + + if ( isdefined( self.zbarrier ) ) + self hide_chest( 1 ); + + wait 0.1; + post_selection_wait_duration = 7; + + if ( level.zombie_vars["zombie_powerup_fire_sale_on"] == 1 && self [[ level._zombiemode_check_firesale_loc_valid_func ]]() ) + { + current_sale_time = level.zombie_vars["zombie_powerup_fire_sale_time"]; + wait_network_frame(); + self thread fire_sale_fix(); + level.zombie_vars["zombie_powerup_fire_sale_time"] = current_sale_time; + + while ( level.zombie_vars["zombie_powerup_fire_sale_time"] > 0 ) + wait 0.1; + } + else + post_selection_wait_duration += 5; + + level.verify_chest = 0; + + if ( isdefined( level._zombiemode_custom_box_move_logic ) ) + [[ level._zombiemode_custom_box_move_logic ]](); + else + default_box_move_logic(); + + if ( isdefined( level.chests[level.chest_index].box_hacks["summon_box"] ) ) + level.chests[level.chest_index] [[ level.chests[level.chest_index].box_hacks["summon_box"] ]]( 0 ); + + wait( post_selection_wait_duration ); + playfx( level._effect["poltergeist"], level.chests[level.chest_index].zbarrier.origin ); + level.chests[level.chest_index] show_chest(); + flag_clear( "moving_chest_now" ); + self.zbarrier.chest_moving = 0; +} + +fire_sale_fix() +{ + if ( !isdefined( level.zombie_vars["zombie_powerup_fire_sale_on"] ) ) + return; + + if ( level.zombie_vars["zombie_powerup_fire_sale_on"] ) + { + self.old_cost = 950; + self thread show_chest(); + self.zombie_cost = 10; + self.unitrigger_stub unitrigger_set_hint_string( self, "default_treasure_chest", self.zombie_cost ); + wait_network_frame(); + + level waittill( "fire_sale_off" ); + + while ( isdefined( self._box_open ) && self._box_open ) + wait 0.1; + + self hide_chest( 1 ); + self.zombie_cost = self.old_cost; + } +} + +check_for_desirable_chest_location() +{ + if ( !isdefined( level.desirable_chest_location ) ) + return level.chest_index; + + if ( level.chests[level.chest_index].script_noteworthy == level.desirable_chest_location ) + { + level.desirable_chest_location = undefined; + return level.chest_index; + } + + for ( i = 0; i < level.chests.size; i++ ) + { + if ( level.chests[i].script_noteworthy == level.desirable_chest_location ) + { + level.desirable_chest_location = undefined; + return i; + } + } +/# + iprintln( level.desirable_chest_location + " is an invalid box location!" ); +#/ + level.desirable_chest_location = undefined; + return level.chest_index; +} + +rotateroll_box() +{ + angles = 40; + angles2 = 0; + + while ( isdefined( self ) ) + { + self rotateroll( angles + angles2, 0.5 ); + wait 0.7; + angles2 = 40; + self rotateroll( angles * -2, 0.5 ); + wait 0.7; + } +} + +verify_chest_is_open() +{ + for ( i = 0; i < level.open_chest_location.size; i++ ) + { + if ( isdefined( level.open_chest_location[i] ) ) + { + if ( level.open_chest_location[i] == level.chests[level.chest_index].script_noteworthy ) + { + level.verify_chest = 1; + return; + } + } + } + + level.verify_chest = 0; +} + +treasure_chest_timeout() +{ + self endon( "user_grabbed_weapon" ); + self.zbarrier endon( "box_hacked_respin" ); + self.zbarrier endon( "box_hacked_rerespin" ); + wait 12; + self notify( "trigger", level ); +} + +treasure_chest_lid_open() +{ + openroll = 105; + opentime = 0.5; + self rotateroll( 105, opentime, opentime * 0.5 ); + play_sound_at_pos( "open_chest", self.origin ); + play_sound_at_pos( "music_chest", self.origin ); +} + +treasure_chest_lid_close( timedout ) +{ + closeroll = -105; + closetime = 0.5; + self rotateroll( closeroll, closetime, closetime * 0.5 ); + play_sound_at_pos( "close_chest", self.origin ); + self notify( "lid_closed" ); +} + +treasure_chest_chooserandomweapon( player ) +{ + keys = getarraykeys( level.zombie_weapons ); + return keys[randomint( keys.size )]; +} + +treasure_chest_canplayerreceiveweapon( player, weapon, pap_triggers ) +{ + if ( !get_is_in_box( weapon ) ) + return 0; + + if ( isdefined( player ) && player has_weapon_or_upgrade( weapon ) ) + return 0; + + if ( !limited_weapon_below_quota( weapon, player, pap_triggers ) ) + return 0; + + if ( !player player_can_use_content( weapon ) ) + return 0; + + if ( isdefined( level.custom_magic_box_selection_logic ) ) + { + if ( ![[ level.custom_magic_box_selection_logic ]]( weapon, player, pap_triggers ) ) + return 0; + } + + if ( isdefined( player ) && isdefined( level.special_weapon_magicbox_check ) ) + return player [[ level.special_weapon_magicbox_check ]]( weapon ); + + return 1; +} + +treasure_chest_chooseweightedrandomweapon( player ) +{ + keys = array_randomize( getarraykeys( level.zombie_weapons ) ); + + if ( isdefined( level.customrandomweaponweights ) ) + keys = player [[ level.customrandomweaponweights ]]( keys ); +/# + forced_weapon = getdvar( _hash_45ED7744 ); + + if ( forced_weapon != "" && isdefined( level.zombie_weapons[forced_weapon] ) ) + arrayinsert( keys, forced_weapon, 0 ); +#/ + pap_triggers = getentarray( "specialty_weapupgrade", "script_noteworthy" ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( treasure_chest_canplayerreceiveweapon( player, keys[i], pap_triggers ) ) + return keys[i]; + } + + return keys[0]; +} + +weapon_is_dual_wield( name ) +{ + switch ( name ) + { + case "pm63_upgraded_zm": + case "microwavegundw_zm": + case "microwavegundw_upgraded_zm": + case "m1911_upgraded_zm": + case "hs10_upgraded_zm": + case "fivesevendw_zm": + case "fivesevendw_upgraded_zm": + case "cz75dw_zm": + case "cz75dw_upgraded_zm": + return true; + default: + return false; + } +} + +weapon_show_hint_choke() +{ + for ( level._weapon_show_hint_choke = 0; 1; level._weapon_show_hint_choke = 0 ) + wait 0.05; +} + +decide_hide_show_hint( endon_notify, second_endon_notify, onlyplayer ) +{ + self endon( "death" ); + + if ( isdefined( endon_notify ) ) + self endon( endon_notify ); + + if ( isdefined( second_endon_notify ) ) + self endon( second_endon_notify ); + + if ( !isdefined( level._weapon_show_hint_choke ) ) + level thread weapon_show_hint_choke(); + + use_choke = 0; + + if ( isdefined( level._use_choke_weapon_hints ) && level._use_choke_weapon_hints == 1 ) + use_choke = 1; + + while ( true ) + { + last_update = gettime(); + + if ( isdefined( self.chest_user ) && !isdefined( self.box_rerespun ) ) + { + if ( is_placeable_mine( self.chest_user getcurrentweapon() ) || self.chest_user hacker_active() ) + self setinvisibletoplayer( self.chest_user ); + else + self setvisibletoplayer( self.chest_user ); + } + else if ( isdefined( onlyplayer ) ) + { + if ( onlyplayer can_buy_weapon() ) + self setinvisibletoplayer( onlyplayer, 0 ); + else + self setinvisibletoplayer( onlyplayer, 1 ); + } + else + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] can_buy_weapon() ) + { + self setinvisibletoplayer( players[i], 0 ); + continue; + } + + self setinvisibletoplayer( players[i], 1 ); + } + } + + if ( use_choke ) + { + while ( level._weapon_show_hint_choke > 4 && gettime() < last_update + 150 ) + wait 0.05; + } + else + wait 0.1; + + level._weapon_show_hint_choke++; + } +} + +get_left_hand_weapon_model_name( name ) +{ + switch ( name ) + { + case "microwavegundw_zm": + return getweaponmodel( "microwavegunlh_zm" ); + case "microwavegundw_upgraded_zm": + return getweaponmodel( "microwavegunlh_upgraded_zm" ); + default: + return getweaponmodel( name ); + } +} + +clean_up_hacked_box() +{ + self waittill( "box_hacked_respin" ); + + self endon( "box_spin_done" ); + + if ( isdefined( self.weapon_model ) ) + { + self.weapon_model delete(); + self.weapon_model = undefined; + } + + if ( isdefined( self.weapon_model_dw ) ) + { + self.weapon_model_dw delete(); + self.weapon_model_dw = undefined; + } + + self hidezbarrierpiece( 3 ); + self hidezbarrierpiece( 4 ); + self setzbarrierpiecestate( 3, "closed" ); + self setzbarrierpiecestate( 4, "closed" ); +} + +treasure_chest_weapon_spawn( chest, player, respin ) +{ + if ( isdefined( level.using_locked_magicbox ) && level.using_locked_magicbox ) + { + self.owner endon( "box_locked" ); + self thread maps\mp\zombies\_zm_magicbox_lock::clean_up_locked_box(); + } + + self endon( "box_hacked_respin" ); + self thread clean_up_hacked_box(); + assert( isdefined( player ) ); + self.weapon_string = undefined; + modelname = undefined; + rand = undefined; + number_cycles = 40; + + if ( isdefined( chest.zbarrier ) ) + { + if ( isdefined( level.custom_magic_box_do_weapon_rise ) ) + chest.zbarrier thread [[ level.custom_magic_box_do_weapon_rise ]](); + else + chest.zbarrier thread magic_box_do_weapon_rise(); + } + + for ( i = 0; i < number_cycles; i++ ) + { + if ( i < 20 ) + { + wait 0.05; + continue; + } + + if ( i < 30 ) + { + wait 0.1; + continue; + } + + if ( i < 35 ) + { + wait 0.2; + continue; + } + + if ( i < 38 ) + wait 0.3; + } + + if ( isdefined( level.custom_magic_box_weapon_wait ) ) + [[ level.custom_magic_box_weapon_wait ]](); + + if ( isdefined( player.pers_upgrades_awarded["box_weapon"] ) && player.pers_upgrades_awarded["box_weapon"] ) + rand = maps\mp\zombies\_zm_pers_upgrades_functions::pers_treasure_chest_choosespecialweapon( player ); + else + rand = treasure_chest_chooseweightedrandomweapon( player ); + + self.weapon_string = rand; + wait 0.1; + + if ( isdefined( level.custom_magicbox_float_height ) ) + v_float = anglestoup( self.angles ) * level.custom_magicbox_float_height; + else + v_float = anglestoup( self.angles ) * 40; + + self.model_dw = undefined; + self.weapon_model = spawn_weapon_model( rand, undefined, self.origin + v_float, self.angles + vectorscale( ( 0, 1, 0 ), 180.0 ) ); + + if ( weapon_is_dual_wield( rand ) ) + self.weapon_model_dw = spawn_weapon_model( rand, get_left_hand_weapon_model_name( rand ), self.weapon_model.origin - vectorscale( ( 1, 1, 1 ), 3.0 ), self.weapon_model.angles ); + + if ( getdvar( "magic_chest_movable" ) == "1" && !( isdefined( chest._box_opened_by_fire_sale ) && chest._box_opened_by_fire_sale ) && !( isdefined( level.zombie_vars["zombie_powerup_fire_sale_on"] ) && level.zombie_vars["zombie_powerup_fire_sale_on"] && self [[ level._zombiemode_check_firesale_loc_valid_func ]]() ) ) + { + random = randomint( 100 ); + + if ( !isdefined( level.chest_min_move_usage ) ) + level.chest_min_move_usage = 4; + + if ( level.chest_accessed < level.chest_min_move_usage ) + chance_of_joker = -1; + else + { + chance_of_joker = level.chest_accessed + 20; + + if ( level.chest_moves == 0 && level.chest_accessed >= 8 ) + chance_of_joker = 100; + + if ( level.chest_accessed >= 4 && level.chest_accessed < 8 ) + { + if ( random < 15 ) + chance_of_joker = 100; + else + chance_of_joker = -1; + } + + if ( level.chest_moves > 0 ) + { + if ( level.chest_accessed >= 8 && level.chest_accessed < 13 ) + { + if ( random < 30 ) + chance_of_joker = 100; + else + chance_of_joker = -1; + } + + if ( level.chest_accessed >= 13 ) + { + if ( random < 50 ) + chance_of_joker = 100; + else + chance_of_joker = -1; + } + } + } + + if ( isdefined( chest.no_fly_away ) ) + chance_of_joker = -1; + + if ( isdefined( level._zombiemode_chest_joker_chance_override_func ) ) + chance_of_joker = [[ level._zombiemode_chest_joker_chance_override_func ]]( chance_of_joker ); + + if ( chance_of_joker > random ) + { + self.weapon_string = undefined; + self.weapon_model setmodel( level.chest_joker_model ); + self.weapon_model.angles = self.angles + vectorscale( ( 0, 1, 0 ), 90.0 ); + + if ( isdefined( self.weapon_model_dw ) ) + { + self.weapon_model_dw delete(); + self.weapon_model_dw = undefined; + } + + self.chest_moving = 1; + flag_set( "moving_chest_now" ); + level.chest_accessed = 0; + level.chest_moves++; + } + } + + self notify( "randomization_done" ); + + if ( flag( "moving_chest_now" ) && !( level.zombie_vars["zombie_powerup_fire_sale_on"] && self [[ level._zombiemode_check_firesale_loc_valid_func ]]() ) ) + { + if ( isdefined( level.chest_joker_custom_movement ) ) + self [[ level.chest_joker_custom_movement ]](); + else + { + wait 0.5; + level notify( "weapon_fly_away_start" ); + wait 2; + + if ( isdefined( self.weapon_model ) ) + { + v_fly_away = self.origin + anglestoup( self.angles ) * 500; + self.weapon_model moveto( v_fly_away, 4, 3 ); + } + + if ( isdefined( self.weapon_model_dw ) ) + { + v_fly_away = self.origin + anglestoup( self.angles ) * 500; + self.weapon_model_dw moveto( v_fly_away, 4, 3 ); + } + + self.weapon_model waittill( "movedone" ); + + self.weapon_model delete(); + + if ( isdefined( self.weapon_model_dw ) ) + { + self.weapon_model_dw delete(); + self.weapon_model_dw = undefined; + } + + self notify( "box_moving" ); + level notify( "weapon_fly_away_end" ); + } + } + else + { + acquire_weapon_toggle( rand, player ); + + if ( rand == "tesla_gun_zm" || rand == "ray_gun_zm" ) + { + if ( rand == "ray_gun_zm" ) + level.pulls_since_last_ray_gun = 0; + + if ( rand == "tesla_gun_zm" ) + { + level.pulls_since_last_tesla_gun = 0; + level.player_seen_tesla_gun = 1; + } + } + + if ( !isdefined( respin ) ) + { + if ( isdefined( chest.box_hacks["respin"] ) ) + self [[ chest.box_hacks["respin"] ]]( chest, player ); + } + else if ( isdefined( chest.box_hacks["respin_respin"] ) ) + self [[ chest.box_hacks["respin_respin"] ]]( chest, player ); + + if ( isdefined( level.custom_magic_box_timer_til_despawn ) ) + self.weapon_model thread [[ level.custom_magic_box_timer_til_despawn ]]( self ); + else + self.weapon_model thread timer_til_despawn( v_float ); + + if ( isdefined( self.weapon_model_dw ) ) + { + if ( isdefined( level.custom_magic_box_timer_til_despawn ) ) + self.weapon_model_dw thread [[ level.custom_magic_box_timer_til_despawn ]]( self ); + else + self.weapon_model_dw thread timer_til_despawn( v_float ); + } + + self waittill( "weapon_grabbed" ); + + if ( !chest.timedout ) + { + if ( isdefined( self.weapon_model ) ) + self.weapon_model delete(); + + if ( isdefined( self.weapon_model_dw ) ) + self.weapon_model_dw delete(); + } + } + + self.weapon_string = undefined; + self notify( "box_spin_done" ); +} + +chest_get_min_usage() +{ + min_usage = 4; + return min_usage; +} + +chest_get_max_usage() +{ + max_usage = 6; + players = get_players(); + + if ( level.chest_moves == 0 ) + { + if ( players.size == 1 ) + max_usage = 3; + else if ( players.size == 2 ) + max_usage = 4; + else if ( players.size == 3 ) + max_usage = 5; + else + max_usage = 6; + } + else if ( players.size == 1 ) + max_usage = 4; + else if ( players.size == 2 ) + max_usage = 4; + else if ( players.size == 3 ) + max_usage = 5; + else + max_usage = 7; + + return max_usage; +} + +timer_til_despawn( v_float ) +{ + self endon( "kill_weapon_movement" ); + putbacktime = 12; + self moveto( self.origin - v_float * 0.85, putbacktime, putbacktime * 0.5 ); + wait( putbacktime ); + + if ( isdefined( self ) ) + self delete(); +} + +treasure_chest_glowfx() +{ + self setclientfield( "magicbox_glow", 1 ); + self waittill_any( "weapon_grabbed", "box_moving" ); + self setclientfield( "magicbox_glow", 0 ); +} + +treasure_chest_give_weapon( weapon_string ) +{ + self.last_box_weapon = gettime(); + self maps\mp\zombies\_zm_weapons::weapon_give( weapon_string, 0, 1 ); +} + +magic_box_teddy_twitches() +{ + self endon( "zbarrier_state_change" ); + self setzbarrierpiecestate( 0, "closed" ); + + while ( true ) + { + wait( randomfloatrange( 180, 1800 ) ); + self setzbarrierpiecestate( 0, "opening" ); + wait( randomfloatrange( 180, 1800 ) ); + self setzbarrierpiecestate( 0, "closing" ); + } +} + +magic_box_initial() +{ + self setzbarrierpiecestate( 1, "open" ); +} + +magic_box_arrives() +{ + self setzbarrierpiecestate( 1, "opening" ); + + while ( self getzbarrierpiecestate( 1 ) == "opening" ) + wait 0.05; + + self notify( "arrived" ); +} + +magic_box_leaves() +{ + self setzbarrierpiecestate( 1, "closing" ); + + while ( self getzbarrierpiecestate( 1 ) == "closing" ) + wait 0.1; + + self notify( "left" ); +} + +magic_box_opens() +{ + self setzbarrierpiecestate( 2, "opening" ); + + while ( self getzbarrierpiecestate( 2 ) == "opening" ) + wait 0.1; + + self notify( "opened" ); +} + +magic_box_closes() +{ + self setzbarrierpiecestate( 2, "closing" ); + + while ( self getzbarrierpiecestate( 2 ) == "closing" ) + wait 0.1; + + self notify( "closed" ); +} + +magic_box_do_weapon_rise() +{ + self endon( "box_hacked_respin" ); + self setzbarrierpiecestate( 3, "closed" ); + self setzbarrierpiecestate( 4, "closed" ); + wait_network_frame(); + self zbarrierpieceuseboxriselogic( 3 ); + self zbarrierpieceuseboxriselogic( 4 ); + self showzbarrierpiece( 3 ); + self showzbarrierpiece( 4 ); + self setzbarrierpiecestate( 3, "opening" ); + self setzbarrierpiecestate( 4, "opening" ); + + while ( self getzbarrierpiecestate( 3 ) != "open" ) + wait 0.5; + + self hidezbarrierpiece( 3 ); + self hidezbarrierpiece( 4 ); +} + +magic_box_do_teddy_flyaway() +{ + self showzbarrierpiece( 3 ); + self setzbarrierpiecestate( 3, "closing" ); +} + +is_chest_active() +{ + curr_state = self.zbarrier get_magic_box_zbarrier_state(); + + if ( flag( "moving_chest_now" ) ) + return false; + + if ( curr_state == "open" || curr_state == "close" ) + return true; + + return false; +} + +get_magic_box_zbarrier_state() +{ + return self.state; +} + +set_magic_box_zbarrier_state( state ) +{ + for ( i = 0; i < self getnumzbarrierpieces(); i++ ) + self hidezbarrierpiece( i ); + + self notify( "zbarrier_state_change" ); + self [[ level.magic_box_zbarrier_state_func ]]( state ); +} + +process_magic_box_zbarrier_state( state ) +{ + switch ( state ) + { + case "away": + self showzbarrierpiece( 0 ); + self thread magic_box_teddy_twitches(); + self.state = "away"; + break; + case "arriving": + self showzbarrierpiece( 1 ); + self thread magic_box_arrives(); + self.state = "arriving"; + break; + case "initial": + self showzbarrierpiece( 1 ); + self thread magic_box_initial(); + thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.owner.unitrigger_stub, ::magicbox_unitrigger_think ); + self.state = "initial"; + break; + case "open": + self showzbarrierpiece( 2 ); + self thread magic_box_opens(); + self.state = "open"; + break; + case "close": + self showzbarrierpiece( 2 ); + self thread magic_box_closes(); + self.state = "close"; + break; + case "leaving": + self showzbarrierpiece( 1 ); + self thread magic_box_leaves(); + self.state = "leaving"; + break; + default: + if ( isdefined( level.custom_magicbox_state_handler ) ) + self [[ level.custom_magicbox_state_handler ]]( state ); + + break; + } +} + +magicbox_host_migration() +{ + level endon( "end_game" ); + level notify( "mb_hostmigration" ); + level endon( "mb_hostmigration" ); + + while ( true ) + { + level waittill( "host_migration_end" ); + + if ( !isdefined( level.chests ) ) + continue; + + foreach ( chest in level.chests ) + { + if ( !is_true( chest.hidden ) ) + { + if ( isdefined( chest ) && isdefined( chest.pandora_light ) ) + playfxontag( level._effect["lght_marker"], chest.pandora_light, "tag_origin" ); + } + + wait_network_frame(); + } + } +} diff --git a/ZM/Core/maps/mp/zombies/_zm_magicbox_lock.gsc b/ZM/Core/maps/mp/zombies/_zm_magicbox_lock.gsc new file mode 100644 index 0000000..c4101f7 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_magicbox_lock.gsc @@ -0,0 +1,106 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_magicbox_lock; +#include maps\mp\zombies\_zm_unitrigger; + +init() +{ + precachemodel( "p6_anim_zm_al_magic_box_lock_red" ); + level.locked_magic_box_cost = 2000; + level.custom_magicbox_state_handler = maps\mp\zombies\_zm_magicbox_lock::set_locked_magicbox_state; + add_zombie_hint( "locked_magic_box_cost", &"ZOMBIE_LOCKED_COST_2000" ); +} + +watch_for_lock() +{ + self endon( "user_grabbed_weapon" ); + self endon( "chest_accessed" ); + + self waittill( "box_locked" ); + + self notify( "kill_chest_think" ); + self.grab_weapon_hint = 0; + self.chest_user = undefined; + wait 0.1; + self thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think ); + self.unitrigger_stub run_visibility_function_for_all_triggers(); + self thread treasure_chest_think(); +} + +clean_up_locked_box() +{ + self endon( "box_spin_done" ); + + self.owner waittill( "box_locked" ); + + if ( isdefined( self.weapon_model ) ) + { + self.weapon_model delete(); + self.weapon_model = undefined; + } + + if ( isdefined( self.weapon_model_dw ) ) + { + self.weapon_model_dw delete(); + self.weapon_model_dw = undefined; + } + + self hidezbarrierpiece( 3 ); + self hidezbarrierpiece( 4 ); + self setzbarrierpiecestate( 3, "closed" ); + self setzbarrierpiecestate( 4, "closed" ); +} + +magic_box_locks() +{ + self.owner.is_locked = 1; + self.owner notify( "box_locked" ); + self playsound( "zmb_hellbox_lock" ); + self setclientfield( "magicbox_open_fx", 0 ); + self setclientfield( "magicbox_amb_fx", 2 ); + self setzbarrierpiecestate( 5, "closing" ); + + while ( self getzbarrierpiecestate( 5 ) == "closing" ) + wait 0.5; + + self notify( "locked" ); +} + +magic_box_unlocks() +{ + maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.owner.unitrigger_stub ); + self playsound( "zmb_hellbox_unlock" ); + self setzbarrierpiecestate( 5, "opening" ); + + while ( self getzbarrierpiecestate( 5 ) == "opening" ) + wait 0.5; + + self setzbarrierpiecestate( 2, "closed" ); + self showzbarrierpiece( 2 ); + self hidezbarrierpiece( 5 ); + self notify( "unlocked" ); + self.owner.is_locked = 0; + maps\mp\zombies\_zm_unitrigger::register_unitrigger( self.owner.unitrigger_stub ); + self setclientfield( "magicbox_amb_fx", 1 ); +} + +set_locked_magicbox_state( state ) +{ + switch ( state ) + { + case "locking": + self showzbarrierpiece( 5 ); + self thread magic_box_locks(); + self.state = "locking"; + break; + case "unlocking": + self showzbarrierpiece( 5 ); + self magic_box_unlocks(); + self.state = "close"; + break; + } +} diff --git a/ZM/Core/maps/mp/zombies/_zm_mgturret.gsc b/ZM/Core/maps/mp/zombies/_zm_mgturret.gsc new file mode 100644 index 0000000..c44750a --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_mgturret.gsc @@ -0,0 +1,291 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; + +main() +{ + if ( getdvar( _hash_7C9A91DF ) == "" ) + setdvar( "mgTurret", "off" ); + + level.magic_distance = 24; + turretinfos = getentarray( "turretInfo", "targetname" ); + + for ( index = 0; index < turretinfos.size; index++ ) + turretinfos[index] delete(); +} + +set_difficulty( difficulty ) +{ + init_turret_difficulty_settings(); + turrets = getentarray( "misc_turret", "classname" ); + + for ( index = 0; index < turrets.size; index++ ) + { + if ( isdefined( turrets[index].script_skilloverride ) ) + { + switch ( turrets[index].script_skilloverride ) + { + case "easy": + difficulty = "easy"; + break; + case "medium": + difficulty = "medium"; + break; + case "hard": + difficulty = "hard"; + break; + case "fu": + difficulty = "fu"; + break; + default: + continue; + } + } + + turret_set_difficulty( turrets[index], difficulty ); + } +} + +init_turret_difficulty_settings() +{ + level.mgturretsettings["easy"]["convergenceTime"] = 2.5; + level.mgturretsettings["easy"]["suppressionTime"] = 3.0; + level.mgturretsettings["easy"]["accuracy"] = 0.38; + level.mgturretsettings["easy"]["aiSpread"] = 2; + level.mgturretsettings["easy"]["playerSpread"] = 0.5; + level.mgturretsettings["medium"]["convergenceTime"] = 1.5; + level.mgturretsettings["medium"]["suppressionTime"] = 3.0; + level.mgturretsettings["medium"]["accuracy"] = 0.38; + level.mgturretsettings["medium"]["aiSpread"] = 2; + level.mgturretsettings["medium"]["playerSpread"] = 0.5; + level.mgturretsettings["hard"]["convergenceTime"] = 0.8; + level.mgturretsettings["hard"]["suppressionTime"] = 3.0; + level.mgturretsettings["hard"]["accuracy"] = 0.38; + level.mgturretsettings["hard"]["aiSpread"] = 2; + level.mgturretsettings["hard"]["playerSpread"] = 0.5; + level.mgturretsettings["fu"]["convergenceTime"] = 0.4; + level.mgturretsettings["fu"]["suppressionTime"] = 3.0; + level.mgturretsettings["fu"]["accuracy"] = 0.38; + level.mgturretsettings["fu"]["aiSpread"] = 2; + level.mgturretsettings["fu"]["playerSpread"] = 0.5; +} + +turret_set_difficulty( turret, difficulty ) +{ + turret.convergencetime = level.mgturretsettings[difficulty]["convergenceTime"]; + turret.suppressiontime = level.mgturretsettings[difficulty]["suppressionTime"]; + turret.accuracy = level.mgturretsettings[difficulty]["accuracy"]; + turret.aispread = level.mgturretsettings[difficulty]["aiSpread"]; + turret.playerspread = level.mgturretsettings[difficulty]["playerSpread"]; +} + +turret_suppression_fire( targets ) +{ + self endon( "death" ); + self endon( "stop_suppression_fire" ); + + if ( !isdefined( self.suppresionfire ) ) + self.suppresionfire = 1; + + for (;;) + { + while ( self.suppresionfire ) + { + self settargetentity( targets[randomint( targets.size )] ); + wait( 2 + randomfloat( 2 ) ); + } + + self cleartargetentity(); + + while ( !self.suppresionfire ) + wait 1; + } +} + +burst_fire_settings( setting ) +{ + if ( setting == "delay" ) + return 0.2; + else if ( setting == "delay_range" ) + return 0.5; + else if ( setting == "burst" ) + return 0.5; + else if ( setting == "burst_range" ) + return 4; +} + +burst_fire( turret, manual_target ) +{ + turret endon( "death" ); + turret endon( "stopfiring" ); + self endon( "stop_using_built_in_burst_fire" ); + + if ( isdefined( turret.script_delay_min ) ) + turret_delay = turret.script_delay_min; + else + turret_delay = burst_fire_settings( "delay" ); + + if ( isdefined( turret.script_delay_max ) ) + turret_delay_range = turret.script_delay_max - turret_delay; + else + turret_delay_range = burst_fire_settings( "delay_range" ); + + if ( isdefined( turret.script_burst_min ) ) + turret_burst = turret.script_burst_min; + else + turret_burst = burst_fire_settings( "burst" ); + + if ( isdefined( turret.script_burst_max ) ) + turret_burst_range = turret.script_burst_max - turret_burst; + else + turret_burst_range = burst_fire_settings( "burst_range" ); + + while ( true ) + { + turret startfiring(); + + if ( isdefined( manual_target ) ) + turret thread random_spread( manual_target ); + + turret do_shoot(); + wait( turret_burst + randomfloat( turret_burst_range ) ); + turret stopshootturret(); + turret stopfiring(); + wait( turret_delay + randomfloat( turret_delay_range ) ); + } +} + +burst_fire_unmanned() +{ + self notify( "stop_burst_fire_unmanned" ); + self endon( "stop_burst_fire_unmanned" ); + self endon( "death" ); + self endon( "remote_start" ); + level endon( "game_ended" ); + + if ( isdefined( self.controlled ) && self.controlled ) + return; + + if ( isdefined( self.script_delay_min ) ) + turret_delay = self.script_delay_min; + else + turret_delay = burst_fire_settings( "delay" ); + + if ( isdefined( self.script_delay_max ) ) + turret_delay_range = self.script_delay_max - turret_delay; + else + turret_delay_range = burst_fire_settings( "delay_range" ); + + if ( isdefined( self.script_burst_min ) ) + turret_burst = self.script_burst_min; + else + turret_burst = burst_fire_settings( "burst" ); + + if ( isdefined( self.script_burst_max ) ) + turret_burst_range = self.script_burst_max - turret_burst; + else + turret_burst_range = burst_fire_settings( "burst_range" ); + + pauseuntiltime = gettime(); + turretstate = "start"; + self.script_shooting = 0; + + for (;;) + { + if ( isdefined( self.manual_targets ) ) + { + self cleartargetentity(); + self settargetentity( self.manual_targets[randomint( self.manual_targets.size )] ); + } + + duration = ( pauseuntiltime - gettime() ) * 0.001; + + if ( self isfiringturret() && duration <= 0 ) + { + if ( turretstate != "fire" ) + { + turretstate = "fire"; + self playsound( "mpl_turret_alert" ); + self thread do_shoot(); + self.script_shooting = 1; + } + + duration = turret_burst + randomfloat( turret_burst_range ); + self thread turret_timer( duration ); + + self waittill( "turretstatechange" ); + + self.script_shooting = 0; + duration = turret_delay + randomfloat( turret_delay_range ); + pauseuntiltime = gettime() + int( duration * 1000 ); + continue; + } + + if ( turretstate != "aim" ) + turretstate = "aim"; + + self thread turret_timer( duration ); + + self waittill( "turretstatechange" ); + } +} + +avoid_synchronization( time ) +{ + if ( !isdefined( level._zm_mgturret_firing ) ) + level._zm_mgturret_firing = 0; + + level._zm_mgturret_firing++; + wait( time ); + level._zm_mgturret_firing--; +} + +do_shoot() +{ + self endon( "death" ); + self endon( "turretstatechange" ); + + for (;;) + { + while ( is_true( level._zm_mgturret_firing ) ) + wait 0.1; + + thread avoid_synchronization( 0.1 ); + self shootturret(); + wait 0.112; + } +} + +turret_timer( duration ) +{ + if ( duration <= 0 ) + return; + + self endon( "turretstatechange" ); + wait( duration ); + + if ( isdefined( self ) ) + self notify( "turretstatechange" ); +} + +random_spread( ent ) +{ + self endon( "death" ); + self notify( "stop random_spread" ); + self endon( "stop random_spread" ); + self endon( "stopfiring" ); + self settargetentity( ent ); + self.manual_target = ent; + + while ( true ) + { + if ( isplayer( ent ) ) + ent.origin = self.manual_target getorigin(); + else + ent.origin = self.manual_target.origin; + + ent.origin += ( 20 - randomfloat( 40 ), 20 - randomfloat( 40 ), 20 - randomfloat( 60 ) ); + wait 0.2; + } +} diff --git a/ZM/Core/maps/mp/zombies/_zm_net.gsc b/ZM/Core/maps/mp/zombies/_zm_net.gsc new file mode 100644 index 0000000..a0a4bb4 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_net.gsc @@ -0,0 +1,93 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; + +network_choke_init( id, max ) +{ + if ( !isdefined( level.zombie_network_choke_ids_max ) ) + { + level.zombie_network_choke_ids_max = []; + level.zombie_network_choke_ids_count = []; + } + + level.zombie_network_choke_ids_max[id] = max; + level.zombie_network_choke_ids_count[id] = 0; + level thread network_choke_thread( id ); +} + +network_choke_thread( id ) +{ + while ( true ) + { + wait_network_frame(); + wait_network_frame(); + level.zombie_network_choke_ids_count[id] = 0; + } +} + +network_choke_safe( id ) +{ + return level.zombie_network_choke_ids_count[id] < level.zombie_network_choke_ids_max[id]; +} + +network_choke_action( id, choke_action, arg1, arg2, arg3 ) +{ + assert( isdefined( level.zombie_network_choke_ids_max[id] ), "Network Choke: " + id + " undefined" ); + + while ( !network_choke_safe( id ) ) + wait 0.05; + + level.zombie_network_choke_ids_count[id]++; + + if ( !isdefined( arg1 ) ) + return [[ choke_action ]](); + + if ( !isdefined( arg2 ) ) + return [[ choke_action ]]( arg1 ); + + if ( !isdefined( arg3 ) ) + return [[ choke_action ]]( arg1, arg2 ); + + return [[ choke_action ]]( arg1, arg2, arg3 ); +} + +network_entity_valid( entity ) +{ + if ( !isdefined( entity ) ) + return false; + + return true; +} + +network_safe_init( id, max ) +{ + if ( !isdefined( level.zombie_network_choke_ids_max ) || !isdefined( level.zombie_network_choke_ids_max[id] ) ) + network_choke_init( id, max ); + + assert( max == level.zombie_network_choke_ids_max[id] ); +} + +_network_safe_spawn( classname, origin ) +{ + return spawn( classname, origin ); +} + +network_safe_spawn( id, max, classname, origin ) +{ + network_safe_init( id, max ); + return network_choke_action( id, ::_network_safe_spawn, classname, origin ); +} + +_network_safe_play_fx_on_tag( fx, entity, tag ) +{ + if ( network_entity_valid( entity ) ) + playfxontag( fx, entity, tag ); +} + +network_safe_play_fx_on_tag( id, max, fx, entity, tag ) +{ + network_safe_init( id, max ); + network_choke_action( id, ::_network_safe_play_fx_on_tag, fx, entity, tag ); +} diff --git a/ZM/Core/maps/mp/zombies/_zm_perk_electric_cherry.gsc b/ZM/Core/maps/mp/zombies/_zm_perk_electric_cherry.gsc new file mode 100644 index 0000000..d99fe6a --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_perk_electric_cherry.gsc @@ -0,0 +1,395 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_score; +#include maps\mp\animscripts\shared; +#include maps\mp\zombies\_zm_ai_basic; + +enable_electric_cherry_perk_for_level() +{ + maps\mp\zombies\_zm_perks::register_perk_basic_info( "specialty_grenadepulldeath", "electric_cherry", 2000, &"ZM_PRISON_PERK_CHERRY", "zombie_perk_bottle_cherry" ); + maps\mp\zombies\_zm_perks::register_perk_precache_func( "specialty_grenadepulldeath", ::electic_cherry_precache ); + maps\mp\zombies\_zm_perks::register_perk_clientfields( "specialty_grenadepulldeath", ::electric_cherry_register_clientfield, ::electric_cherry_set_clientfield ); + maps\mp\zombies\_zm_perks::register_perk_threads( "specialty_grenadepulldeath", ::electric_cherry_reload_attack, ::electric_cherry_perk_lost ); + maps\mp\zombies\_zm_perks::register_perk_machine( "specialty_grenadepulldeath", ::electric_cherry_perk_machine_setup, ::electric_cherry_perk_machine_think ); + maps\mp\zombies\_zm_perks::register_perk_host_migration_func( "specialty_grenadepulldeath", ::electric_cherry_host_migration_func ); + + if ( isdefined( level.custom_electric_cherry_perk_threads ) && level.custom_electric_cherry_perk_threads ) + level thread [[ level.custom_electric_cherry_perk_threads ]](); +} + +init_electric_cherry() +{ + level.custom_laststand_func = ::electric_cherry_laststand; + set_zombie_var( "tesla_head_gib_chance", 50 ); + registerclientfield( "allplayers", "electric_cherry_reload_fx", 9000, 2, "int" ); +} + +electic_cherry_precache() +{ + precacheitem( "zombie_perk_bottle_cherry" ); + precacheshader( "specialty_fastreload_zombies" ); + precachemodel( "p6_zm_vending_electric_cherry_off" ); + precachemodel( "p6_zm_vending_electric_cherry_on" ); + precachestring( &"ZM_PRISON_PERK_CHERRY" ); + level._effect["electriccherry"] = loadfx( "misc/fx_zombie_cola_on" ); + level._effect["electric_cherry_explode"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_down" ); + level._effect["electric_cherry_reload_small"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_sm" ); + level._effect["electric_cherry_reload_medium"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_player" ); + level._effect["electric_cherry_reload_large"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_lg" ); + level._effect["tesla_shock"] = loadfx( "maps/zombie/fx_zombie_tesla_shock" ); + level._effect["tesla_shock_secondary"] = loadfx( "maps/zombie/fx_zombie_tesla_shock_secondary" ); +} + +electric_cherry_register_clientfield() +{ + registerclientfield( "toplayer", "perk_electric_cherry", 9000, 1, "int" ); +} + +electric_cherry_set_clientfield( state ) +{ + self setclientfieldtoplayer( "perk_electric_cherry", state ); +} + +electric_cherry_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collision ) +{ + use_trigger.script_sound = "mus_perks_cherry_jingle"; + use_trigger.script_string = "electric_cherry_perk"; + use_trigger.script_label = "mus_perks_cherry_sting"; + use_trigger.target = "vending_electriccherry"; + perk_machine.script_string = "electriccherry_perk"; + perk_machine.targetname = "vendingelectric_cherry"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "electriccherry_perk"; +} + +electric_cherry_perk_machine_think() +{ + init_electric_cherry(); + + while ( true ) + { + machine = getentarray( "vendingelectric_cherry", "targetname" ); + machine_triggers = getentarray( "vending_electriccherry", "target" ); + + for ( i = 0; i < machine.size; i++ ) + machine[i] setmodel( "p6_zm_vending_electric_cherry_off" ); + + level thread do_initial_power_off_callback( machine, "electriccherry" ); + array_thread( machine_triggers, maps\mp\zombies\_zm_perks::set_power_on, 0 ); + + level waittill( "electric_cherry_on" ); + + for ( i = 0; i < machine.size; i++ ) + { + machine[i] setmodel( "p6_zm_vending_electric_cherry_on" ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] thread perk_fx( "electriccherry" ); + machine[i] thread play_loop_on_machine(); + } + + level notify( "specialty_grenadepulldeath_power_on" ); + array_thread( machine_triggers, maps\mp\zombies\_zm_perks::set_power_on, 1 ); + + level waittill( "electric_cherry_off" ); + + array_thread( machine, maps\mp\zombies\_zm_perks::turn_perk_off ); + } +} + +electric_cherry_host_migration_func() +{ + a_electric_cherry_perk_machines = getentarray( "vending_electriccherry", "targetname" ); + + foreach ( perk_machine in a_electric_cherry_perk_machines ) + { + if ( isdefined( perk_machine.model ) && perk_machine.model == "p6_zm_vending_electric_cherry_on" ) + { + perk_machine perk_fx( undefined, 1 ); + perk_machine thread perk_fx( "electriccherry" ); + } + } +} + +electric_cherry_laststand() +{ + visionsetlaststand( "zombie_last_stand", 1 ); + + if ( isdefined( self ) ) + { + playfx( level._effect["electric_cherry_explode"], self.origin ); + self playsound( "zmb_cherry_explode" ); + self notify( "electric_cherry_start" ); + wait 0.05; + a_zombies = get_round_enemy_array(); + a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, 500 ); + + for ( i = 0; i < a_zombies.size; i++ ) + { + if ( isalive( self ) ) + { + if ( a_zombies[i].health <= 1000 ) + { + a_zombies[i] thread electric_cherry_death_fx(); + + if ( isdefined( self.cherry_kills ) ) + self.cherry_kills++; + + self maps\mp\zombies\_zm_score::add_to_player_score( 40 ); + } + else + { + a_zombies[i] thread electric_cherry_stun(); + a_zombies[i] thread electric_cherry_shock_fx(); + } + + wait 0.1; + a_zombies[i] dodamage( 1000, self.origin, self, self, "none" ); + } + } + + self notify( "electric_cherry_end" ); + } +} + +electric_cherry_death_fx() +{ + self endon( "death" ); + tag = "J_SpineUpper"; + fx = "tesla_shock"; + + if ( self.isdog ) + tag = "J_Spine1"; + + self playsound( "zmb_elec_jib_zombie" ); + network_safe_play_fx_on_tag( "tesla_death_fx", 2, level._effect[fx], self, tag ); + + if ( isdefined( self.tesla_head_gib_func ) && !self.head_gibbed ) + [[ self.tesla_head_gib_func ]](); +} + +electric_cherry_shock_fx() +{ + self endon( "death" ); + tag = "J_SpineUpper"; + fx = "tesla_shock_secondary"; + + if ( self.isdog ) + tag = "J_Spine1"; + + self playsound( "zmb_elec_jib_zombie" ); + network_safe_play_fx_on_tag( "tesla_shock_fx", 2, level._effect[fx], self, tag ); +} + +electric_cherry_stun() +{ + self endon( "death" ); + self notify( "stun_zombie" ); + self endon( "stun_zombie" ); + + if ( self.health <= 0 ) + { +/# + iprintln( "trying to stun a dead zombie" ); +#/ + return; + } + + if ( self.ai_state != "find_flesh" ) + return; + + self.forcemovementscriptstate = 1; + self.ignoreall = 1; + + for ( i = 0; i < 2; i++ ) + { + self animscripted( self.origin, self.angles, "zm_afterlife_stun" ); + self maps\mp\animscripts\shared::donotetracks( "stunned" ); + } + + self.forcemovementscriptstate = 0; + self.ignoreall = 0; + self setgoalpos( self.origin ); + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); +} + +electric_cherry_reload_attack() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "stop_electric_cherry_reload_attack" ); + self.wait_on_reload = []; + self.consecutive_electric_cherry_attacks = 0; + + while ( true ) + { + self waittill( "reload_start" ); + + str_current_weapon = self getcurrentweapon(); + + if ( isinarray( self.wait_on_reload, str_current_weapon ) ) + continue; + + self.wait_on_reload[self.wait_on_reload.size] = str_current_weapon; + self.consecutive_electric_cherry_attacks++; + n_clip_current = self getweaponammoclip( str_current_weapon ); + n_clip_max = weaponclipsize( str_current_weapon ); + n_fraction = n_clip_current / n_clip_max; + perk_radius = linear_map( n_fraction, 1.0, 0.0, 32, 128 ); + perk_dmg = linear_map( n_fraction, 1.0, 0.0, 1, 1045 ); + self thread check_for_reload_complete( str_current_weapon ); + + if ( isdefined( self ) ) + { + switch ( self.consecutive_electric_cherry_attacks ) + { + case 1: + case 0: + n_zombie_limit = undefined; + break; + case 2: + n_zombie_limit = 8; + break; + case 3: + n_zombie_limit = 4; + break; + case 4: + n_zombie_limit = 2; + break; + default: + n_zombie_limit = 0; + } + + self thread electric_cherry_cooldown_timer( str_current_weapon ); + + if ( isdefined( n_zombie_limit ) && n_zombie_limit == 0 ) + continue; + + self thread electric_cherry_reload_fx( n_fraction ); + self notify( "electric_cherry_start" ); + self playsound( "zmb_cherry_explode" ); + a_zombies = get_round_enemy_array(); + a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, perk_radius ); + n_zombies_hit = 0; + + for ( i = 0; i < a_zombies.size; i++ ) + { + if ( isalive( self ) ) + { + if ( isdefined( n_zombie_limit ) ) + { + if ( n_zombies_hit < n_zombie_limit ) + n_zombies_hit++; + else + break; + } + + if ( a_zombies[i].health <= perk_dmg ) + { + a_zombies[i] thread electric_cherry_death_fx(); + + if ( isdefined( self.cherry_kills ) ) + self.cherry_kills++; + + self maps\mp\zombies\_zm_score::add_to_player_score( 40 ); + } + else + { + if ( !isdefined( a_zombies[i].is_brutus ) ) + a_zombies[i] thread electric_cherry_stun(); + + a_zombies[i] thread electric_cherry_shock_fx(); + } + + wait 0.1; + a_zombies[i] dodamage( perk_dmg, self.origin, self, self, "none" ); + } + } + + self notify( "electric_cherry_end" ); + } + } +} + +electric_cherry_cooldown_timer( str_current_weapon ) +{ + self notify( "electric_cherry_cooldown_started" ); + self endon( "electric_cherry_cooldown_started" ); + self endon( "death" ); + self endon( "disconnect" ); + n_reload_time = weaponreloadtime( str_current_weapon ); + + if ( self hasperk( "specialty_fastreload" ) ) + n_reload_time *= getdvarfloat( "perk_weapReloadMultiplier" ); + + n_cooldown_time = n_reload_time + 3; + wait( n_cooldown_time ); + self.consecutive_electric_cherry_attacks = 0; +} + +check_for_reload_complete( weapon ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "player_lost_weapon_" + weapon ); + self thread weapon_replaced_monitor( weapon ); + + while ( true ) + { + self waittill( "reload" ); + + str_current_weapon = self getcurrentweapon(); + + if ( str_current_weapon == weapon ) + { + arrayremovevalue( self.wait_on_reload, weapon ); + self notify( "weapon_reload_complete_" + weapon ); + break; + } + } +} + +weapon_replaced_monitor( weapon ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "weapon_reload_complete_" + weapon ); + + while ( true ) + { + self waittill( "weapon_change" ); + + primaryweapons = self getweaponslistprimaries(); + + if ( !isinarray( primaryweapons, weapon ) ) + { + self notify( "player_lost_weapon_" + weapon ); + arrayremovevalue( self.wait_on_reload, weapon ); + break; + } + } +} + +electric_cherry_reload_fx( n_fraction ) +{ + if ( n_fraction >= 0.67 ) + self setclientfield( "electric_cherry_reload_fx", 1 ); + else if ( n_fraction >= 0.33 && n_fraction < 0.67 ) + self setclientfield( "electric_cherry_reload_fx", 2 ); + else + self setclientfield( "electric_cherry_reload_fx", 3 ); + + wait 1.0; + self setclientfield( "electric_cherry_reload_fx", 0 ); +} + +electric_cherry_perk_lost() +{ + self notify( "stop_electric_cherry_reload_attack" ); +} diff --git a/ZM/Core/maps/mp/zombies/_zm_perks.gsc b/ZM/Core/maps/mp/zombies/_zm_perks.gsc new file mode 100644 index 0000000..3adc500 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_perks.gsc @@ -0,0 +1,3763 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_power; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\_demo; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_chugabud; +#include maps\mp\_visionset_mgr; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm; + +init() +{ + level.additionalprimaryweapon_limit = 3; + level.perk_purchase_limit = 4; + + if ( !level.createfx_enabled ) + perks_register_clientfield(); + + if ( !level.enable_magic ) + return; + + initialize_custom_perk_arrays(); + perk_machine_spawn_init(); + vending_weapon_upgrade_trigger = []; + vending_triggers = getentarray( "zombie_vending", "targetname" ); + + for ( i = 0; i < vending_triggers.size; i++ ) + { + if ( isdefined( vending_triggers[i].script_noteworthy ) && vending_triggers[i].script_noteworthy == "specialty_weapupgrade" ) + { + vending_weapon_upgrade_trigger[vending_weapon_upgrade_trigger.size] = vending_triggers[i]; + arrayremovevalue( vending_triggers, vending_triggers[i] ); + } + } + + old_packs = getentarray( "zombie_vending_upgrade", "targetname" ); + + for ( i = 0; i < old_packs.size; i++ ) + vending_weapon_upgrade_trigger[vending_weapon_upgrade_trigger.size] = old_packs[i]; + + flag_init( "pack_machine_in_use" ); + + if ( vending_triggers.size < 1 ) + return; + + if ( vending_weapon_upgrade_trigger.size >= 1 ) + array_thread( vending_weapon_upgrade_trigger, ::vending_weapon_upgrade ); + + level.machine_assets = []; + + if ( !isdefined( level.custom_vending_precaching ) ) + level.custom_vending_precaching = ::default_vending_precaching; + + [[ level.custom_vending_precaching ]](); + + if ( !isdefined( level.packapunch_timeout ) ) + level.packapunch_timeout = 15; + + set_zombie_var( "zombie_perk_cost", 2000 ); + set_zombie_var( "zombie_perk_juggernaut_health", 160 ); + set_zombie_var( "zombie_perk_juggernaut_health_upgrade", 190 ); + array_thread( vending_triggers, ::vending_trigger_think ); + array_thread( vending_triggers, ::electric_perks_dialog ); + + if ( isdefined( level.zombiemode_using_doubletap_perk ) && level.zombiemode_using_doubletap_perk ) + level thread turn_doubletap_on(); + + if ( isdefined( level.zombiemode_using_marathon_perk ) && level.zombiemode_using_marathon_perk ) + level thread turn_marathon_on(); + + if ( isdefined( level.zombiemode_using_juggernaut_perk ) && level.zombiemode_using_juggernaut_perk ) + level thread turn_jugger_on(); + + if ( isdefined( level.zombiemode_using_revive_perk ) && level.zombiemode_using_revive_perk ) + level thread turn_revive_on(); + + if ( isdefined( level.zombiemode_using_sleightofhand_perk ) && level.zombiemode_using_sleightofhand_perk ) + level thread turn_sleight_on(); + + if ( isdefined( level.zombiemode_using_deadshot_perk ) && level.zombiemode_using_deadshot_perk ) + level thread turn_deadshot_on(); + + if ( isdefined( level.zombiemode_using_tombstone_perk ) && level.zombiemode_using_tombstone_perk ) + level thread turn_tombstone_on(); + + if ( isdefined( level.zombiemode_using_additionalprimaryweapon_perk ) && level.zombiemode_using_additionalprimaryweapon_perk ) + level thread turn_additionalprimaryweapon_on(); + + if ( isdefined( level.zombiemode_using_chugabud_perk ) && level.zombiemode_using_chugabud_perk ) + level thread turn_chugabud_on(); + + if ( level._custom_perks.size > 0 ) + { + a_keys = getarraykeys( level._custom_perks ); + + for ( i = 0; i < a_keys.size; i++ ) + { + if ( isdefined( level._custom_perks[a_keys[i]].perk_machine_thread ) ) + level thread [[ level._custom_perks[a_keys[i]].perk_machine_thread ]](); + } + } + + if ( isdefined( level._custom_turn_packapunch_on ) ) + level thread [[ level._custom_turn_packapunch_on ]](); + else + level thread turn_packapunch_on(); + + if ( isdefined( level.quantum_bomb_register_result_func ) ) + [[ level.quantum_bomb_register_result_func ]]( "give_nearest_perk", ::quantum_bomb_give_nearest_perk_result, 10, ::quantum_bomb_give_nearest_perk_validation ); + + level thread perk_hostmigration(); +} + +default_vending_precaching() +{ + if ( isdefined( level.zombiemode_using_pack_a_punch ) && level.zombiemode_using_pack_a_punch ) + { + precacheitem( "zombie_knuckle_crack" ); + precachemodel( "p6_anim_zm_buildable_pap" ); + precachemodel( "p6_anim_zm_buildable_pap_on" ); + precachestring( &"ZOMBIE_PERK_PACKAPUNCH" ); + precachestring( &"ZOMBIE_PERK_PACKAPUNCH_ATT" ); + level._effect["packapunch_fx"] = loadfx( "maps/zombie/fx_zombie_packapunch" ); + level.machine_assets["packapunch"] = spawnstruct(); + level.machine_assets["packapunch"].weapon = "zombie_knuckle_crack"; + level.machine_assets["packapunch"].off_model = "p6_anim_zm_buildable_pap"; + level.machine_assets["packapunch"].on_model = "p6_anim_zm_buildable_pap_on"; + } + + if ( isdefined( level.zombiemode_using_additionalprimaryweapon_perk ) && level.zombiemode_using_additionalprimaryweapon_perk ) + { + precacheitem( "zombie_perk_bottle_additionalprimaryweapon" ); + precacheshader( "specialty_additionalprimaryweapon_zombies" ); + precachemodel( "zombie_vending_three_gun" ); + precachemodel( "zombie_vending_three_gun_on" ); + precachestring( &"ZOMBIE_PERK_ADDITIONALWEAPONPERK" ); + level._effect["additionalprimaryweapon_light"] = loadfx( "misc/fx_zombie_cola_arsenal_on" ); + level.machine_assets["additionalprimaryweapon"] = spawnstruct(); + level.machine_assets["additionalprimaryweapon"].weapon = "zombie_perk_bottle_additionalprimaryweapon"; + level.machine_assets["additionalprimaryweapon"].off_model = "zombie_vending_three_gun"; + level.machine_assets["additionalprimaryweapon"].on_model = "zombie_vending_three_gun_on"; + } + + if ( isdefined( level.zombiemode_using_deadshot_perk ) && level.zombiemode_using_deadshot_perk ) + { + precacheitem( "zombie_perk_bottle_deadshot" ); + precacheshader( "specialty_ads_zombies" ); + precachemodel( "zombie_vending_ads" ); + precachemodel( "zombie_vending_ads_on" ); + precachestring( &"ZOMBIE_PERK_DEADSHOT" ); + level._effect["deadshot_light"] = loadfx( "misc/fx_zombie_cola_dtap_on" ); + level.machine_assets["deadshot"] = spawnstruct(); + level.machine_assets["deadshot"].weapon = "zombie_perk_bottle_deadshot"; + level.machine_assets["deadshot"].off_model = "zombie_vending_ads"; + level.machine_assets["deadshot"].on_model = "zombie_vending_ads_on"; + } + + if ( isdefined( level.zombiemode_using_doubletap_perk ) && level.zombiemode_using_doubletap_perk ) + { + precacheitem( "zombie_perk_bottle_doubletap" ); + precacheshader( "specialty_doubletap_zombies" ); + precachemodel( "zombie_vending_doubletap2" ); + precachemodel( "zombie_vending_doubletap2_on" ); + precachestring( &"ZOMBIE_PERK_DOUBLETAP" ); + level._effect["doubletap_light"] = loadfx( "misc/fx_zombie_cola_dtap_on" ); + level.machine_assets["doubletap"] = spawnstruct(); + level.machine_assets["doubletap"].weapon = "zombie_perk_bottle_doubletap"; + level.machine_assets["doubletap"].off_model = "zombie_vending_doubletap2"; + level.machine_assets["doubletap"].on_model = "zombie_vending_doubletap2_on"; + } + + if ( isdefined( level.zombiemode_using_juggernaut_perk ) && level.zombiemode_using_juggernaut_perk ) + { + precacheitem( "zombie_perk_bottle_jugg" ); + precacheshader( "specialty_juggernaut_zombies" ); + precachemodel( "zombie_vending_jugg" ); + precachemodel( "zombie_vending_jugg_on" ); + precachestring( &"ZOMBIE_PERK_JUGGERNAUT" ); + level._effect["jugger_light"] = loadfx( "misc/fx_zombie_cola_jugg_on" ); + level.machine_assets["juggernog"] = spawnstruct(); + level.machine_assets["juggernog"].weapon = "zombie_perk_bottle_jugg"; + level.machine_assets["juggernog"].off_model = "zombie_vending_jugg"; + level.machine_assets["juggernog"].on_model = "zombie_vending_jugg_on"; + } + + if ( isdefined( level.zombiemode_using_marathon_perk ) && level.zombiemode_using_marathon_perk ) + { + precacheitem( "zombie_perk_bottle_marathon" ); + precacheshader( "specialty_marathon_zombies" ); + precachemodel( "zombie_vending_marathon" ); + precachemodel( "zombie_vending_marathon_on" ); + precachestring( &"ZOMBIE_PERK_MARATHON" ); + level._effect["marathon_light"] = loadfx( "maps/zombie/fx_zmb_cola_staminup_on" ); + level.machine_assets["marathon"] = spawnstruct(); + level.machine_assets["marathon"].weapon = "zombie_perk_bottle_marathon"; + level.machine_assets["marathon"].off_model = "zombie_vending_marathon"; + level.machine_assets["marathon"].on_model = "zombie_vending_marathon_on"; + } + + if ( isdefined( level.zombiemode_using_revive_perk ) && level.zombiemode_using_revive_perk ) + { + precacheitem( "zombie_perk_bottle_revive" ); + precacheshader( "specialty_quickrevive_zombies" ); + precachemodel( "zombie_vending_revive" ); + precachemodel( "zombie_vending_revive_on" ); + precachestring( &"ZOMBIE_PERK_QUICKREVIVE" ); + level._effect["revive_light"] = loadfx( "misc/fx_zombie_cola_revive_on" ); + level._effect["revive_light_flicker"] = loadfx( "maps/zombie/fx_zmb_cola_revive_flicker" ); + level.machine_assets["revive"] = spawnstruct(); + level.machine_assets["revive"].weapon = "zombie_perk_bottle_revive"; + level.machine_assets["revive"].off_model = "zombie_vending_revive"; + level.machine_assets["revive"].on_model = "zombie_vending_revive_on"; + } + + if ( isdefined( level.zombiemode_using_sleightofhand_perk ) && level.zombiemode_using_sleightofhand_perk ) + { + precacheitem( "zombie_perk_bottle_sleight" ); + precacheshader( "specialty_fastreload_zombies" ); + precachemodel( "zombie_vending_sleight" ); + precachemodel( "zombie_vending_sleight_on" ); + precachestring( &"ZOMBIE_PERK_FASTRELOAD" ); + level._effect["sleight_light"] = loadfx( "misc/fx_zombie_cola_on" ); + level.machine_assets["speedcola"] = spawnstruct(); + level.machine_assets["speedcola"].weapon = "zombie_perk_bottle_sleight"; + level.machine_assets["speedcola"].off_model = "zombie_vending_sleight"; + level.machine_assets["speedcola"].on_model = "zombie_vending_sleight_on"; + } + + if ( isdefined( level.zombiemode_using_tombstone_perk ) && level.zombiemode_using_tombstone_perk ) + { + precacheitem( "zombie_perk_bottle_tombstone" ); + precacheshader( "specialty_tombstone_zombies" ); + precachemodel( "zombie_vending_tombstone" ); + precachemodel( "zombie_vending_tombstone_on" ); + precachemodel( "ch_tombstone1" ); + precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); + level._effect["tombstone_light"] = loadfx( "misc/fx_zombie_cola_on" ); + level.machine_assets["tombstone"] = spawnstruct(); + level.machine_assets["tombstone"].weapon = "zombie_perk_bottle_tombstone"; + level.machine_assets["tombstone"].off_model = "zombie_vending_tombstone"; + level.machine_assets["tombstone"].on_model = "zombie_vending_tombstone_on"; + } + + if ( isdefined( level.zombiemode_using_chugabud_perk ) && level.zombiemode_using_chugabud_perk ) + { + precacheitem( "zombie_perk_bottle_whoswho" ); + precacheshader( "specialty_quickrevive_zombies" ); + precachemodel( "p6_zm_vending_chugabud" ); + precachemodel( "p6_zm_vending_chugabud_on" ); + precachemodel( "ch_tombstone1" ); + precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); + level._effect["tombstone_light"] = loadfx( "misc/fx_zombie_cola_on" ); + level.machine_assets["whoswho"] = spawnstruct(); + level.machine_assets["whoswho"].weapon = "zombie_perk_bottle_whoswho"; + level.machine_assets["whoswho"].off_model = "p6_zm_vending_chugabud"; + level.machine_assets["whoswho"].on_model = "p6_zm_vending_chugabud_on"; + } + + if ( level._custom_perks.size > 0 ) + { + a_keys = getarraykeys( level._custom_perks ); + + for ( i = 0; i < a_keys.size; i++ ) + { + if ( isdefined( level._custom_perks[a_keys[i]].precache_func ) ) + level [[ level._custom_perks[a_keys[i]].precache_func ]](); + } + } +} + +pap_weapon_move_in( trigger, origin_offset, angles_offset ) +{ + level endon( "Pack_A_Punch_off" ); + trigger endon( "pap_player_disconnected" ); + trigger.worldgun rotateto( self.angles + angles_offset + vectorscale( ( 0, 1, 0 ), 90.0 ), 0.35, 0, 0 ); + offsetdw = vectorscale( ( 1, 1, 1 ), 3.0 ); + + if ( isdefined( trigger.worldgun.worldgundw ) ) + trigger.worldgun.worldgundw rotateto( self.angles + angles_offset + vectorscale( ( 0, 1, 0 ), 90.0 ), 0.35, 0, 0 ); + + wait 0.5; + trigger.worldgun moveto( self.origin + origin_offset, 0.5, 0, 0 ); + + if ( isdefined( trigger.worldgun.worldgundw ) ) + trigger.worldgun.worldgundw moveto( self.origin + origin_offset + offsetdw, 0.5, 0, 0 ); +} + +pap_weapon_move_out( trigger, origin_offset, interact_offset ) +{ + level endon( "Pack_A_Punch_off" ); + trigger endon( "pap_player_disconnected" ); + offsetdw = vectorscale( ( 1, 1, 1 ), 3.0 ); + + if ( !isdefined( trigger.worldgun ) ) + return; + + trigger.worldgun moveto( self.origin + interact_offset, 0.5, 0, 0 ); + + if ( isdefined( trigger.worldgun.worldgundw ) ) + trigger.worldgun.worldgundw moveto( self.origin + interact_offset + offsetdw, 0.5, 0, 0 ); + + wait 0.5; + + if ( !isdefined( trigger.worldgun ) ) + return; + + trigger.worldgun moveto( self.origin + origin_offset, level.packapunch_timeout, 0, 0 ); + + if ( isdefined( trigger.worldgun.worldgundw ) ) + trigger.worldgun.worldgundw moveto( self.origin + origin_offset + offsetdw, level.packapunch_timeout, 0, 0 ); +} + +fx_ent_failsafe() +{ + wait 25; + self delete(); +} + +third_person_weapon_upgrade( current_weapon, upgrade_weapon, packa_rollers, perk_machine, trigger ) +{ + level endon( "Pack_A_Punch_off" ); + trigger endon( "pap_player_disconnected" ); + rel_entity = trigger.perk_machine; + origin_offset = ( 0, 0, 0 ); + angles_offset = ( 0, 0, 0 ); + origin_base = self.origin; + angles_base = self.angles; + + if ( isdefined( rel_entity ) ) + { + if ( isdefined( level.pap_interaction_height ) ) + origin_offset = ( 0, 0, level.pap_interaction_height ); + else + origin_offset = vectorscale( ( 0, 0, 1 ), 35.0 ); + + angles_offset = vectorscale( ( 0, 1, 0 ), 90.0 ); + origin_base = rel_entity.origin; + angles_base = rel_entity.angles; + } + else + rel_entity = self; + + forward = anglestoforward( angles_base + angles_offset ); + interact_offset = origin_offset + forward * -25; + + if ( !isdefined( perk_machine.fx_ent ) ) + { + perk_machine.fx_ent = spawn( "script_model", origin_base + origin_offset + ( 0, 1, -34 ) ); + perk_machine.fx_ent.angles = angles_base + angles_offset; + perk_machine.fx_ent setmodel( "tag_origin" ); + perk_machine.fx_ent linkto( perk_machine ); + } + + if ( isdefined( level._effect["packapunch_fx"] ) ) + fx = playfxontag( level._effect["packapunch_fx"], perk_machine.fx_ent, "tag_origin" ); + + offsetdw = vectorscale( ( 1, 1, 1 ), 3.0 ); + weoptions = self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( current_weapon ); + trigger.worldgun = spawn_weapon_model( current_weapon, undefined, origin_base + interact_offset, self.angles, weoptions ); + worldgundw = undefined; + + if ( maps\mp\zombies\_zm_magicbox::weapon_is_dual_wield( current_weapon ) ) + worldgundw = spawn_weapon_model( current_weapon, maps\mp\zombies\_zm_magicbox::get_left_hand_weapon_model_name( current_weapon ), origin_base + interact_offset + offsetdw, self.angles, weoptions ); + + trigger.worldgun.worldgundw = worldgundw; + + if ( isdefined( level.custom_pap_move_in ) ) + perk_machine [[ level.custom_pap_move_in ]]( trigger, origin_offset, angles_offset, perk_machine ); + else + perk_machine pap_weapon_move_in( trigger, origin_offset, angles_offset ); + + self playsound( "zmb_perks_packa_upgrade" ); + + if ( isdefined( perk_machine.wait_flag ) ) + perk_machine.wait_flag rotateto( perk_machine.wait_flag.angles + vectorscale( ( 1, 0, 0 ), 179.0 ), 0.25, 0, 0 ); + + wait 0.35; + trigger.worldgun delete(); + + if ( isdefined( worldgundw ) ) + worldgundw delete(); + + wait 3; + + if ( isdefined( self ) ) + self playsound( "zmb_perks_packa_ready" ); + else + return; + + upoptions = self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( upgrade_weapon ); + trigger.current_weapon = current_weapon; + trigger.upgrade_name = upgrade_weapon; + trigger.worldgun = spawn_weapon_model( upgrade_weapon, undefined, origin_base + origin_offset, angles_base + angles_offset + vectorscale( ( 0, 1, 0 ), 90.0 ), upoptions ); + worldgundw = undefined; + + if ( maps\mp\zombies\_zm_magicbox::weapon_is_dual_wield( upgrade_weapon ) ) + worldgundw = spawn_weapon_model( upgrade_weapon, maps\mp\zombies\_zm_magicbox::get_left_hand_weapon_model_name( upgrade_weapon ), origin_base + origin_offset + offsetdw, angles_base + angles_offset + vectorscale( ( 0, 1, 0 ), 90.0 ), upoptions ); + + trigger.worldgun.worldgundw = worldgundw; + + if ( isdefined( perk_machine.wait_flag ) ) + perk_machine.wait_flag rotateto( perk_machine.wait_flag.angles - vectorscale( ( 1, 0, 0 ), 179.0 ), 0.25, 0, 0 ); + + if ( isdefined( level.custom_pap_move_out ) ) + rel_entity thread [[ level.custom_pap_move_out ]]( trigger, origin_offset, interact_offset ); + else + rel_entity thread pap_weapon_move_out( trigger, origin_offset, interact_offset ); + + return trigger.worldgun; +} + +can_pack_weapon( weaponname ) +{ + if ( "riotshield_zm" == weaponname ) + return false; + + if ( flag( "pack_machine_in_use" ) ) + return true; + + weaponname = self get_nonalternate_weapon( weaponname ); + + if ( !maps\mp\zombies\_zm_weapons::is_weapon_or_base_included( weaponname ) ) + return false; + + if ( !self maps\mp\zombies\_zm_weapons::can_upgrade_weapon( weaponname ) ) + return false; + + return true; +} + +player_use_can_pack_now() +{ + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission || self isthrowinggrenade() ) + return false; + + if ( !self can_buy_weapon() ) + return false; + + if ( self hacker_active() ) + return false; + + if ( !self can_pack_weapon( self getcurrentweapon() ) ) + return false; + + return true; +} + +vending_machine_trigger_think() +{ + self endon( "death" ); + self endon( "Pack_A_Punch_off" ); + + while ( true ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( self.pack_player ) && self.pack_player != players[i] || !players[i] player_use_can_pack_now() ) + { + self setinvisibletoplayer( players[i], 1 ); + continue; + } + + self setinvisibletoplayer( players[i], 0 ); + } + + wait 0.1; + } +} + +vending_weapon_upgrade() +{ + level endon( "Pack_A_Punch_off" ); + wait 0.01; + perk_machine = getent( self.target, "targetname" ); + self.perk_machine = perk_machine; + perk_machine_sound = getentarray( "perksacola", "targetname" ); + packa_rollers = spawn( "script_origin", self.origin ); + packa_timer = spawn( "script_origin", self.origin ); + packa_rollers linkto( self ); + packa_timer linkto( self ); + + if ( isdefined( perk_machine.target ) ) + perk_machine.wait_flag = getent( perk_machine.target, "targetname" ); + + pap_is_buildable = self is_buildable(); + + if ( pap_is_buildable ) + { + self trigger_off(); + perk_machine hide(); + + if ( isdefined( perk_machine.wait_flag ) ) + perk_machine.wait_flag hide(); + + wait_for_buildable( "pap" ); + self trigger_on(); + perk_machine show(); + + if ( isdefined( perk_machine.wait_flag ) ) + perk_machine.wait_flag show(); + } + + self usetriggerrequirelookat(); + self sethintstring( &"ZOMBIE_NEED_POWER" ); + self setcursorhint( "HINT_NOICON" ); + power_off = !self maps\mp\zombies\_zm_power::pap_is_on(); + + if ( power_off ) + { + pap_array = []; + pap_array[0] = perk_machine; + level thread do_initial_power_off_callback( pap_array, "packapunch" ); + + level waittill( "Pack_A_Punch_on" ); + } + + self enable_trigger(); + + if ( isdefined( level.machine_assets["packapunch"].power_on_callback ) ) + perk_machine thread [[ level.machine_assets["packapunch"].power_on_callback ]](); + + self thread vending_machine_trigger_think(); + perk_machine playloopsound( "zmb_perks_packa_loop" ); + self thread shutoffpapsounds( perk_machine, packa_rollers, packa_timer ); + self thread vending_weapon_upgrade_cost(); + + for (;;) + { + self.pack_player = undefined; + + self waittill( "trigger", player ); + + index = maps\mp\zombies\_zm_weapons::get_player_index( player ); + current_weapon = player getcurrentweapon(); + + if ( "microwavegun_zm" == current_weapon ) + current_weapon = "microwavegundw_zm"; + + current_weapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( current_weapon ); + + if ( isdefined( level.custom_pap_validation ) ) + { + valid = self [[ level.custom_pap_validation ]]( player ); + + if ( !valid ) + continue; + } + + if ( !player maps\mp\zombies\_zm_magicbox::can_buy_weapon() || player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission || player isthrowinggrenade() || !player maps\mp\zombies\_zm_weapons::can_upgrade_weapon( current_weapon ) ) + { + wait 0.1; + continue; + } + + if ( isdefined( level.pap_moving ) && level.pap_moving ) + continue; + + if ( player isswitchingweapons() ) + { + wait 0.1; + + if ( player isswitchingweapons() ) + continue; + } + + if ( !maps\mp\zombies\_zm_weapons::is_weapon_or_base_included( current_weapon ) ) + continue; + + current_cost = self.cost; + player.restore_ammo = undefined; + player.restore_clip = undefined; + player.restore_stock = undefined; + player_restore_clip_size = undefined; + player.restore_max = undefined; + upgrade_as_attachment = will_upgrade_weapon_as_attachment( current_weapon ); + + if ( upgrade_as_attachment ) + { + current_cost = self.attachment_cost; + player.restore_ammo = 1; + player.restore_clip = player getweaponammoclip( current_weapon ); + player.restore_clip_size = weaponclipsize( current_weapon ); + player.restore_stock = player getweaponammostock( current_weapon ); + player.restore_max = weaponmaxammo( current_weapon ); + } + + if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) + current_cost = player maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_double_points_cost( current_cost ); + + if ( player.score < current_cost ) + { + self playsound( "deny" ); + + if ( isdefined( level.custom_pap_deny_vo_func ) ) + player [[ level.custom_pap_deny_vo_func ]](); + else + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); + + continue; + } + + self.pack_player = player; + flag_set( "pack_machine_in_use" ); + maps\mp\_demo::bookmark( "zm_player_use_packapunch", gettime(), player ); + player maps\mp\zombies\_zm_stats::increment_client_stat( "use_pap" ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "use_pap" ); + self thread destroy_weapon_in_blackout( player ); + self thread destroy_weapon_on_disconnect( player ); + player maps\mp\zombies\_zm_score::minus_to_player_score( current_cost, 1 ); + sound = "evt_bottle_dispense"; + playsoundatposition( sound, self.origin ); + self thread maps\mp\zombies\_zm_audio::play_jingle_or_stinger( "mus_perks_packa_sting" ); + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "upgrade_wait" ); + self disable_trigger(); + + if ( !( isdefined( upgrade_as_attachment ) && upgrade_as_attachment ) ) + player thread do_player_general_vox( "general", "pap_wait", 10, 100 ); + else + player thread do_player_general_vox( "general", "pap_wait2", 10, 100 ); + + player thread do_knuckle_crack(); + self.current_weapon = current_weapon; + upgrade_name = maps\mp\zombies\_zm_weapons::get_upgrade_weapon( current_weapon, upgrade_as_attachment ); + player third_person_weapon_upgrade( current_weapon, upgrade_name, packa_rollers, perk_machine, self ); + self enable_trigger(); + self sethintstring( &"ZOMBIE_GET_UPGRADED" ); + + if ( isdefined( player ) ) + { + self setinvisibletoall(); + self setvisibletoplayer( player ); + self thread wait_for_player_to_take( player, current_weapon, packa_timer, upgrade_as_attachment ); + } + + self thread wait_for_timeout( current_weapon, packa_timer, player ); + self waittill_any( "pap_timeout", "pap_taken", "pap_player_disconnected" ); + self.current_weapon = ""; + + if ( isdefined( self.worldgun ) && isdefined( self.worldgun.worldgundw ) ) + self.worldgun.worldgundw delete(); + + if ( isdefined( self.worldgun ) ) + self.worldgun delete(); + + if ( isdefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) + self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH_ATT", self.cost ); + else + self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH", self.cost ); + + self setvisibletoall(); + self.pack_player = undefined; + flag_clear( "pack_machine_in_use" ); + } +} + +shutoffpapsounds( ent1, ent2, ent3 ) +{ + while ( true ) + { + level waittill( "Pack_A_Punch_off" ); + + level thread turnonpapsounds( ent1 ); + ent1 stoploopsound( 0.1 ); + ent2 stoploopsound( 0.1 ); + ent3 stoploopsound( 0.1 ); + } +} + +turnonpapsounds( ent ) +{ + level waittill( "Pack_A_Punch_on" ); + + ent playloopsound( "zmb_perks_packa_loop" ); +} + +vending_weapon_upgrade_cost() +{ + level endon( "Pack_A_Punch_off" ); + + while ( true ) + { + self.cost = 5000; + self.attachment_cost = 2000; + + if ( isdefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) + self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH_ATT", self.cost ); + else + self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH", self.cost ); + + level waittill( "powerup bonfire sale" ); + + self.cost = 1000; + self.attachment_cost = 1000; + + if ( isdefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) + self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH_ATT", self.cost ); + else + self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH", self.cost ); + + level waittill( "bonfire_sale_off" ); + } +} + +wait_for_player_to_take( player, weapon, packa_timer, upgrade_as_attachment ) +{ + current_weapon = self.current_weapon; + upgrade_name = self.upgrade_name; + assert( isdefined( current_weapon ), "wait_for_player_to_take: weapon does not exist" ); + assert( isdefined( upgrade_name ), "wait_for_player_to_take: upgrade_weapon does not exist" ); + upgrade_weapon = upgrade_name; + self endon( "pap_timeout" ); + level endon( "Pack_A_Punch_off" ); + + while ( true ) + { + packa_timer playloopsound( "zmb_perks_packa_ticktock" ); + + self waittill( "trigger", trigger_player ); + + if ( isdefined( level.pap_grab_by_anyone ) && level.pap_grab_by_anyone ) + player = trigger_player; + + packa_timer stoploopsound( 0.05 ); + + if ( trigger_player == player ) + { + player maps\mp\zombies\_zm_stats::increment_client_stat( "pap_weapon_grabbed" ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "pap_weapon_grabbed" ); + current_weapon = player getcurrentweapon(); +/# + if ( "none" == current_weapon ) + iprintlnbold( "WEAPON IS NONE, PACKAPUNCH RETRIEVAL DENIED" ); +#/ + if ( is_player_valid( player ) && !( player.is_drinking > 0 ) && !is_placeable_mine( current_weapon ) && !is_equipment( current_weapon ) && level.revive_tool != current_weapon && "none" != current_weapon && !player hacker_active() ) + { + maps\mp\_demo::bookmark( "zm_player_grabbed_packapunch", gettime(), player ); + self notify( "pap_taken" ); + player notify( "pap_taken" ); + player.pap_used = 1; + + if ( !( isdefined( upgrade_as_attachment ) && upgrade_as_attachment ) ) + player thread do_player_general_vox( "general", "pap_arm", 15, 100 ); + else + player thread do_player_general_vox( "general", "pap_arm2", 15, 100 ); + + weapon_limit = get_player_weapon_limit( player ); + player maps\mp\zombies\_zm_weapons::take_fallback_weapon(); + primaries = player getweaponslistprimaries(); + + if ( isdefined( primaries ) && primaries.size >= weapon_limit ) + player maps\mp\zombies\_zm_weapons::weapon_give( upgrade_weapon ); + else + { + player giveweapon( upgrade_weapon, 0, player maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( upgrade_weapon ) ); + player givestartammo( upgrade_weapon ); + } + + player switchtoweapon( upgrade_weapon ); + + if ( isdefined( player.restore_ammo ) && player.restore_ammo ) + { + new_clip = player.restore_clip + weaponclipsize( upgrade_weapon ) - player.restore_clip_size; + new_stock = player.restore_stock + weaponmaxammo( upgrade_weapon ) - player.restore_max; + player setweaponammostock( upgrade_weapon, new_stock ); + player setweaponammoclip( upgrade_weapon, new_clip ); + } + + player.restore_ammo = undefined; + player.restore_clip = undefined; + player.restore_stock = undefined; + player.restore_max = undefined; + player.restore_clip_size = undefined; + player maps\mp\zombies\_zm_weapons::play_weapon_vo( upgrade_weapon ); + return; + } + } + + wait 0.05; + } +} + +wait_for_timeout( weapon, packa_timer, player ) +{ + self endon( "pap_taken" ); + self endon( "pap_player_disconnected" ); + self thread wait_for_disconnect( player ); + wait( level.packapunch_timeout ); + self notify( "pap_timeout" ); + packa_timer stoploopsound( 0.05 ); + packa_timer playsound( "zmb_perks_packa_deny" ); + maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( weapon ); + + if ( isdefined( player ) ) + { + player maps\mp\zombies\_zm_stats::increment_client_stat( "pap_weapon_not_grabbed" ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "pap_weapon_not_grabbed" ); + } +} + +wait_for_disconnect( player ) +{ + self endon( "pap_taken" ); + self endon( "pap_timeout" ); + + while ( isdefined( player ) ) + wait 0.1; +/# + println( "*** PAP : User disconnected." ); +#/ + self notify( "pap_player_disconnected" ); +} + +destroy_weapon_on_disconnect( player ) +{ + self endon( "pap_timeout" ); + self endon( "pap_taken" ); + level endon( "Pack_A_Punch_off" ); + + player waittill( "disconnect" ); + + if ( isdefined( self.worldgun ) ) + { + if ( isdefined( self.worldgun.worldgundw ) ) + self.worldgun.worldgundw delete(); + + self.worldgun delete(); + } +} + +destroy_weapon_in_blackout( player ) +{ + self endon( "pap_timeout" ); + self endon( "pap_taken" ); + self endon( "pap_player_disconnected" ); + + level waittill( "Pack_A_Punch_off" ); + + if ( isdefined( self.worldgun ) ) + { + self.worldgun rotateto( self.worldgun.angles + ( randomint( 90 ) - 45, 0, randomint( 360 ) - 180 ), 1.5, 0, 0 ); + player playlocalsound( level.zmb_laugh_alias ); + wait 1.5; + + if ( isdefined( self.worldgun.worldgundw ) ) + self.worldgun.worldgundw delete(); + + self.worldgun delete(); + } +} + +do_knuckle_crack() +{ + self endon( "disconnect" ); + gun = self upgrade_knuckle_crack_begin(); + self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); + self upgrade_knuckle_crack_end( gun ); +} + +upgrade_knuckle_crack_begin() +{ + self increment_is_drinking(); + self disable_player_move_states( 1 ); + primaries = self getweaponslistprimaries(); + gun = self getcurrentweapon(); + weapon = level.machine_assets["packapunch"].weapon; + + if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) + { + self notify( "zmb_lost_knife" ); + self takeweapon( gun ); + } + else + return; + + self giveweapon( weapon ); + self switchtoweapon( weapon ); + return gun; +} + +upgrade_knuckle_crack_end( gun ) +{ + assert( !is_zombie_perk_bottle( gun ) ); + assert( gun != level.revive_tool ); + self enable_player_move_states(); + weapon = level.machine_assets["packapunch"].weapon; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + { + self takeweapon( weapon ); + return; + } + + self decrement_is_drinking(); + self takeweapon( weapon ); + primaries = self getweaponslistprimaries(); + + if ( self.is_drinking > 0 ) + return; + else if ( isdefined( primaries ) && primaries.size > 0 ) + self switchtoweapon( primaries[0] ); + else if ( self hasweapon( level.laststandpistol ) ) + self switchtoweapon( level.laststandpistol ); + else + self maps\mp\zombies\_zm_weapons::give_fallback_weapon(); +} + +turn_packapunch_on() +{ + vending_weapon_upgrade_trigger = getentarray( "specialty_weapupgrade", "script_noteworthy" ); + level.pap_triggers = vending_weapon_upgrade_trigger; + + for ( i = 0; i < vending_weapon_upgrade_trigger.size; i++ ) + { + perk = getent( vending_weapon_upgrade_trigger[i].target, "targetname" ); + + if ( isdefined( perk ) ) + perk setmodel( level.machine_assets["packapunch"].off_model ); + } + + for (;;) + { + level waittill( "Pack_A_Punch_on" ); + + for ( i = 0; i < vending_weapon_upgrade_trigger.size; i++ ) + { + perk = getent( vending_weapon_upgrade_trigger[i].target, "targetname" ); + + if ( isdefined( perk ) ) + perk thread activate_packapunch(); + } + + level waittill( "Pack_A_Punch_off" ); + + for ( i = 0; i < vending_weapon_upgrade_trigger.size; i++ ) + { + perk = getent( vending_weapon_upgrade_trigger[i].target, "targetname" ); + + if ( isdefined( perk ) ) + perk thread deactivate_packapunch(); + } + } +} + +activate_packapunch() +{ + self setmodel( level.machine_assets["packapunch"].on_model ); + self playsound( "zmb_perks_power_on" ); + self vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + timer = 0; + duration = 0.05; +} + +deactivate_packapunch() +{ + self setmodel( level.machine_assets["packapunch"].off_model ); +} + +do_initial_power_off_callback( machine_array, perkname ) +{ + if ( !isdefined( level.machine_assets[perkname] ) ) + { +/# + println( "Error: doing setup for a machine with no level.machine_assets! Check your perk initialization!" ); +#/ + return; + } + + if ( !isdefined( level.machine_assets[perkname].power_off_callback ) ) + return; + + wait 0.05; + array_thread( machine_array, level.machine_assets[perkname].power_off_callback ); +} + +turn_sleight_on() +{ + while ( true ) + { + machine = getentarray( "vending_sleight", "targetname" ); + machine_triggers = getentarray( "vending_sleight", "target" ); + + for ( i = 0; i < machine.size; i++ ) + machine[i] setmodel( level.machine_assets["speedcola"].off_model ); + + level thread do_initial_power_off_callback( machine, "speedcola" ); + array_thread( machine_triggers, ::set_power_on, 0 ); + + level waittill( "sleight_on" ); + + for ( i = 0; i < machine.size; i++ ) + { + machine[i] setmodel( level.machine_assets["speedcola"].on_model ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] thread perk_fx( "sleight_light" ); + machine[i] thread play_loop_on_machine(); + } + + array_thread( machine_triggers, ::set_power_on, 1 ); + + if ( isdefined( level.machine_assets["speedcola"].power_on_callback ) ) + array_thread( machine, level.machine_assets["speedcola"].power_on_callback ); + + level notify( "specialty_fastreload_power_on" ); + + level waittill( "sleight_off" ); + + array_thread( machine, ::turn_perk_off ); + + if ( isdefined( level.machine_assets["speedcola"].power_off_callback ) ) + array_thread( machine, level.machine_assets["speedcola"].power_off_callback ); + } +} + +use_solo_revive() +{ + if ( isdefined( level.using_solo_revive ) ) + return level.using_solo_revive; + + players = get_players(); + solo_mode = 0; + + if ( players.size == 1 || isdefined( level.force_solo_quick_revive ) && level.force_solo_quick_revive ) + solo_mode = 1; + + level.using_solo_revive = solo_mode; + return solo_mode; +} + +turn_revive_on() +{ + level endon( "stop_quickrevive_logic" ); + machine = getentarray( "vending_revive", "targetname" ); + machine_triggers = getentarray( "vending_revive", "target" ); + machine_model = undefined; + machine_clip = undefined; + + if ( !( isdefined( level.zombiemode_using_revive_perk ) && level.zombiemode_using_revive_perk ) ) + return; + + flag_wait( "start_zombie_round_logic" ); + players = get_players(); + solo_mode = 0; + + if ( use_solo_revive() ) + solo_mode = 1; + + start_state = 0; + start_state = solo_mode; + + while ( true ) + { + machine = getentarray( "vending_revive", "targetname" ); + machine_triggers = getentarray( "vending_revive", "target" ); + + for ( i = 0; i < machine.size; i++ ) + { + if ( flag_exists( "solo_game" ) && flag_exists( "solo_revive" ) && flag( "solo_game" ) && flag( "solo_revive" ) ) + machine[i] hide(); + + machine[i] setmodel( level.machine_assets["revive"].off_model ); + + if ( isdefined( level.quick_revive_final_pos ) ) + level.quick_revive_default_origin = level.quick_revive_final_pos; + + if ( !isdefined( level.quick_revive_default_origin ) ) + { + level.quick_revive_default_origin = machine[i].origin; + level.quick_revive_default_angles = machine[i].angles; + } + + level.quick_revive_machine = machine[i]; + } + + array_thread( machine_triggers, ::set_power_on, 0 ); + + if ( !( isdefined( start_state ) && start_state ) ) + level waittill( "revive_on" ); + + start_state = 0; + + for ( i = 0; i < machine.size; i++ ) + { + if ( isdefined( machine[i].classname ) && machine[i].classname == "script_model" ) + { + if ( isdefined( machine[i].script_noteworthy ) && machine[i].script_noteworthy == "clip" ) + { + machine_clip = machine[i]; + continue; + } + + machine[i] setmodel( level.machine_assets["revive"].on_model ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine_model = machine[i]; + machine[i] thread perk_fx( "revive_light" ); + machine[i] notify( "stop_loopsound" ); + machine[i] thread play_loop_on_machine(); + + if ( isdefined( machine_triggers[i] ) ) + machine_clip = machine_triggers[i].clip; + + if ( isdefined( machine_triggers[i] ) ) + blocker_model = machine_triggers[i].blocker_model; + } + } + + wait_network_frame(); + + if ( solo_mode && isdefined( machine_model ) && !is_true( machine_model.ishidden ) ) + machine_model thread revive_solo_fx( machine_clip, blocker_model ); + + array_thread( machine_triggers, ::set_power_on, 1 ); + + if ( isdefined( level.machine_assets["revive"].power_on_callback ) ) + array_thread( machine, level.machine_assets["revive"].power_on_callback ); + + level notify( "specialty_quickrevive_power_on" ); + + if ( isdefined( machine_model ) ) + machine_model.ishidden = 0; + + notify_str = level waittill_any_return( "revive_off", "revive_hide" ); + should_hide = 0; + + if ( notify_str == "revive_hide" ) + should_hide = 1; + + if ( isdefined( level.machine_assets["revive"].power_off_callback ) ) + array_thread( machine, level.machine_assets["revive"].power_off_callback ); + + for ( i = 0; i < machine.size; i++ ) + { + if ( isdefined( machine[i].classname ) && machine[i].classname == "script_model" ) + machine[i] turn_perk_off( should_hide ); + } + } +} + +revive_solo_fx( machine_clip, blocker_model ) +{ + if ( level flag_exists( "solo_revive" ) && flag( "solo_revive" ) && !flag( "solo_game" ) ) + return; + + if ( isdefined( machine_clip ) ) + level.quick_revive_machine_clip = machine_clip; + + if ( !isdefined( level.solo_revive_init ) ) + { + level.solo_revive_init = 1; + flag_init( "solo_revive" ); + } + + level notify( "revive_solo_fx" ); + level endon( "revive_solo_fx" ); + self endon( "death" ); + flag_wait( "solo_revive" ); + + if ( isdefined( level.revive_solo_fx_func ) ) + level thread [[ level.revive_solo_fx_func ]](); + + wait 2.0; + self playsound( "zmb_box_move" ); + playsoundatposition( "zmb_whoosh", self.origin ); + + if ( isdefined( self._linked_ent ) ) + self unlink(); + + self moveto( self.origin + vectorscale( ( 0, 0, 1 ), 40.0 ), 3 ); + + if ( isdefined( level.custom_vibrate_func ) ) + [[ level.custom_vibrate_func ]]( self ); + else + { + direction = self.origin; + direction = ( direction[1], direction[0], 0 ); + + if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 ) + direction = ( direction[0], direction[1] * -1, 0 ); + else if ( direction[0] < 0 ) + direction = ( direction[0] * -1, direction[1], 0 ); + + self vibrate( direction, 10, 0.5, 5 ); + } + + self waittill( "movedone" ); + + playfx( level._effect["poltergeist"], self.origin ); + playsoundatposition( "zmb_box_poof", self.origin ); + level clientnotify( "drb" ); + + if ( isdefined( self.fx ) ) + { + self.fx unlink(); + self.fx delete(); + } + + if ( isdefined( machine_clip ) ) + { + machine_clip trigger_off(); + machine_clip connectpaths(); + } + + if ( isdefined( blocker_model ) ) + blocker_model show(); + + level notify( "revive_hide" ); +} + +turn_jugger_on() +{ + while ( true ) + { + machine = getentarray( "vending_jugg", "targetname" ); + machine_triggers = getentarray( "vending_jugg", "target" ); + + for ( i = 0; i < machine.size; i++ ) + machine[i] setmodel( level.machine_assets["juggernog"].off_model ); + + level thread do_initial_power_off_callback( machine, "juggernog" ); + array_thread( machine_triggers, ::set_power_on, 0 ); + + level waittill( "juggernog_on" ); + + for ( i = 0; i < machine.size; i++ ) + { + machine[i] setmodel( level.machine_assets["juggernog"].on_model ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] thread perk_fx( "jugger_light" ); + machine[i] thread play_loop_on_machine(); + } + + level notify( "specialty_armorvest_power_on" ); + array_thread( machine_triggers, ::set_power_on, 1 ); + + if ( isdefined( level.machine_assets["juggernog"].power_on_callback ) ) + array_thread( machine, level.machine_assets["juggernog"].power_on_callback ); + + level waittill( "juggernog_off" ); + + if ( isdefined( level.machine_assets["juggernog"].power_off_callback ) ) + array_thread( machine, level.machine_assets["juggernog"].power_off_callback ); + + array_thread( machine, ::turn_perk_off ); + } +} + +turn_doubletap_on() +{ + while ( true ) + { + machine = getentarray( "vending_doubletap", "targetname" ); + machine_triggers = getentarray( "vending_doubletap", "target" ); + + for ( i = 0; i < machine.size; i++ ) + machine[i] setmodel( level.machine_assets["doubletap"].off_model ); + + level thread do_initial_power_off_callback( machine, "doubletap" ); + array_thread( machine_triggers, ::set_power_on, 0 ); + + level waittill( "doubletap_on" ); + + for ( i = 0; i < machine.size; i++ ) + { + machine[i] setmodel( level.machine_assets["doubletap"].on_model ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] thread perk_fx( "doubletap_light" ); + machine[i] thread play_loop_on_machine(); + } + + level notify( "specialty_rof_power_on" ); + array_thread( machine_triggers, ::set_power_on, 1 ); + + if ( isdefined( level.machine_assets["doubletap"].power_on_callback ) ) + array_thread( machine, level.machine_assets["doubletap"].power_on_callback ); + + level waittill( "doubletap_off" ); + + if ( isdefined( level.machine_assets["doubletap"].power_off_callback ) ) + array_thread( machine, level.machine_assets["doubletap"].power_off_callback ); + + array_thread( machine, ::turn_perk_off ); + } +} + +turn_marathon_on() +{ + while ( true ) + { + machine = getentarray( "vending_marathon", "targetname" ); + machine_triggers = getentarray( "vending_marathon", "target" ); + + for ( i = 0; i < machine.size; i++ ) + machine[i] setmodel( level.machine_assets["marathon"].off_model ); + + array_thread( machine_triggers, ::set_power_on, 0 ); + level thread do_initial_power_off_callback( machine, "marathon" ); + + level waittill( "marathon_on" ); + + for ( i = 0; i < machine.size; i++ ) + { + machine[i] setmodel( level.machine_assets["marathon"].on_model ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] thread perk_fx( "marathon_light" ); + machine[i] thread play_loop_on_machine(); + } + + level notify( "specialty_longersprint_power_on" ); + array_thread( machine_triggers, ::set_power_on, 1 ); + + if ( isdefined( level.machine_assets["marathon"].power_on_callback ) ) + array_thread( machine, level.machine_assets["marathon"].power_on_callback ); + + level waittill( "marathon_off" ); + + if ( isdefined( level.machine_assets["marathon"].power_off_callback ) ) + array_thread( machine, level.machine_assets["marathon"].power_off_callback ); + + array_thread( machine, ::turn_perk_off ); + } +} + +turn_deadshot_on() +{ + while ( true ) + { + machine = getentarray( "vending_deadshot_model", "targetname" ); + machine_triggers = getentarray( "vending_deadshot", "target" ); + + for ( i = 0; i < machine.size; i++ ) + machine[i] setmodel( level.machine_assets["deadshot"].off_model ); + + level thread do_initial_power_off_callback( machine, "deadshot" ); + array_thread( machine_triggers, ::set_power_on, 0 ); + + level waittill( "deadshot_on" ); + + for ( i = 0; i < machine.size; i++ ) + { + machine[i] setmodel( level.machine_assets["deadshot"].on_model ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] thread perk_fx( "deadshot_light" ); + machine[i] thread play_loop_on_machine(); + } + + level notify( "specialty_deadshot_power_on" ); + array_thread( machine_triggers, ::set_power_on, 1 ); + + if ( isdefined( level.machine_assets["deadshot"].power_on_callback ) ) + array_thread( machine, level.machine_assets["deadshot"].power_on_callback ); + + level waittill( "deadshot_off" ); + + if ( isdefined( level.machine_assets["deadshot"].power_off_callback ) ) + array_thread( machine, level.machine_assets["deadshot"].power_off_callback ); + + array_thread( machine, ::turn_perk_off ); + } +} + +turn_tombstone_on() +{ + level endon( "tombstone_removed" ); + + while ( true ) + { + machine = getentarray( "vending_tombstone", "targetname" ); + machine_triggers = getentarray( "vending_tombstone", "target" ); + + for ( i = 0; i < machine.size; i++ ) + machine[i] setmodel( level.machine_assets["tombstone"].off_model ); + + level thread do_initial_power_off_callback( machine, "tombstone" ); + array_thread( machine_triggers, ::set_power_on, 0 ); + + level waittill( "tombstone_on" ); + + for ( i = 0; i < machine.size; i++ ) + { + machine[i] setmodel( level.machine_assets["tombstone"].on_model ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] thread perk_fx( "tombstone_light" ); + machine[i] thread play_loop_on_machine(); + } + + level notify( "specialty_scavenger_power_on" ); + array_thread( machine_triggers, ::set_power_on, 1 ); + + if ( isdefined( level.machine_assets["tombstone"].power_on_callback ) ) + array_thread( machine, level.machine_assets["tombstone"].power_on_callback ); + + level waittill( "tombstone_off" ); + + if ( isdefined( level.machine_assets["tombstone"].power_off_callback ) ) + array_thread( machine, level.machine_assets["tombstone"].power_off_callback ); + + array_thread( machine, ::turn_perk_off ); + players = get_players(); + + foreach ( player in players ) + player.hasperkspecialtytombstone = undefined; + } +} + +turn_additionalprimaryweapon_on() +{ + while ( true ) + { + machine = getentarray( "vending_additionalprimaryweapon", "targetname" ); + machine_triggers = getentarray( "vending_additionalprimaryweapon", "target" ); + + for ( i = 0; i < machine.size; i++ ) + machine[i] setmodel( level.machine_assets["additionalprimaryweapon"].off_model ); + + level thread do_initial_power_off_callback( machine, "additionalprimaryweapon" ); + array_thread( machine_triggers, ::set_power_on, 0 ); + + level waittill( "additionalprimaryweapon_on" ); + + for ( i = 0; i < machine.size; i++ ) + { + machine[i] setmodel( level.machine_assets["additionalprimaryweapon"].on_model ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] thread perk_fx( "additionalprimaryweapon_light" ); + machine[i] thread play_loop_on_machine(); + } + + level notify( "specialty_additionalprimaryweapon_power_on" ); + array_thread( machine_triggers, ::set_power_on, 1 ); + + if ( isdefined( level.machine_assets["additionalprimaryweapon"].power_on_callback ) ) + array_thread( machine, level.machine_assets["additionalprimaryweapon"].power_on_callback ); + + level waittill( "additionalprimaryweapon_off" ); + + if ( isdefined( level.machine_assets["additionalprimaryweapon"].power_off_callback ) ) + array_thread( machine, level.machine_assets["additionalprimaryweapon"].power_off_callback ); + + array_thread( machine, ::turn_perk_off ); + } +} + +turn_chugabud_on() +{ + maps\mp\zombies\_zm_chugabud::init(); + + if ( isdefined( level.vsmgr_prio_visionset_zm_whos_who ) ) + maps\mp\_visionset_mgr::vsmgr_register_info( "visionset", "zm_whos_who", 5000, level.vsmgr_prio_visionset_zm_whos_who, 1, 1 ); + + while ( true ) + { + machine = getentarray( "vending_chugabud", "targetname" ); + machine_triggers = getentarray( "vending_chugabud", "target" ); + + for ( i = 0; i < machine.size; i++ ) + machine[i] setmodel( level.machine_assets["whoswho"].off_model ); + + level thread do_initial_power_off_callback( machine, "whoswho" ); + array_thread( machine_triggers, ::set_power_on, 0 ); + + level waittill( "chugabud_on" ); + + for ( i = 0; i < machine.size; i++ ) + { + machine[i] setmodel( level.machine_assets["whoswho"].on_model ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] thread perk_fx( "tombstone_light" ); + machine[i] thread play_loop_on_machine(); + } + + level notify( "specialty_finalstand_power_on" ); + array_thread( machine_triggers, ::set_power_on, 1 ); + + if ( isdefined( level.machine_assets["whoswho"].power_on_callback ) ) + array_thread( machine, level.machine_assets["whoswho"].power_on_callback ); + + level waittill( "chugabud_off" ); + + if ( isdefined( level.machine_assets["whoswho"].power_off_callback ) ) + array_thread( machine, level.machine_assets["whoswho"].power_off_callback ); + + array_thread( machine, ::turn_perk_off ); + players = get_players(); + + foreach ( player in players ) + player.hasperkspecialtychugabud = undefined; + } +} + +set_power_on( state ) +{ + self.power_on = state; +} + +turn_perk_off( ishidden ) +{ + self notify( "stop_loopsound" ); + newmachine = spawn( "script_model", self.origin ); + newmachine.angles = self.angles; + newmachine.targetname = self.targetname; + + if ( is_true( ishidden ) ) + { + newmachine.ishidden = 1; + newmachine hide(); + } + + self delete(); +} + +play_loop_on_machine() +{ + if ( isdefined( level.sndperksacolaloopoverride ) ) + return; + + sound_ent = spawn( "script_origin", self.origin ); + sound_ent playloopsound( "zmb_perks_machine_loop" ); + sound_ent linkto( self ); + + self waittill( "stop_loopsound" ); + + sound_ent unlink(); + sound_ent delete(); +} + +perk_fx( fx, turnofffx ) +{ + if ( isdefined( turnofffx ) ) + self.perk_fx = 0; + else + { + wait 3; + + if ( isdefined( self ) && !is_true( self.perk_fx ) ) + { + playfxontag( level._effect[fx], self, "tag_origin" ); + self.perk_fx = 1; + } + } +} + +electric_perks_dialog() +{ + self endon( "death" ); + wait 0.01; + flag_wait( "start_zombie_round_logic" ); + players = get_players(); + + if ( players.size == 1 ) + return; + + self endon( "warning_dialog" ); + level endon( "switch_flipped" ); + timer = 0; + + while ( true ) + { + wait 0.5; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i] ) ) + continue; + + dist = distancesquared( players[i].origin, self.origin ); + + if ( dist > 4900 ) + { + timer = 0; + continue; + } + + if ( dist < 4900 && timer < 3 ) + { + wait 0.5; + timer++; + } + + if ( dist < 4900 && timer == 3 ) + { + if ( !isdefined( players[i] ) ) + continue; + + players[i] thread do_player_vo( "vox_start", 5 ); + wait 3; + self notify( "warning_dialog" ); +/# + iprintlnbold( "warning_given" ); +#/ + } + } + } +} + +reset_vending_hint_string() +{ + perk = self.script_noteworthy; + solo = maps\mp\zombies\_zm_perks::use_solo_revive(); + + switch ( perk ) + { + case "specialty_armorvest_upgrade": + case "specialty_armorvest": + self sethintstring( &"ZOMBIE_PERK_JUGGERNAUT", self.cost ); + break; + case "specialty_quickrevive_upgrade": + case "specialty_quickrevive": + if ( solo ) + self sethintstring( &"ZOMBIE_PERK_QUICKREVIVE_SOLO", self.cost ); + else + self sethintstring( &"ZOMBIE_PERK_QUICKREVIVE", self.cost ); + + break; + case "specialty_fastreload_upgrade": + case "specialty_fastreload": + self sethintstring( &"ZOMBIE_PERK_FASTRELOAD", self.cost ); + break; + case "specialty_rof_upgrade": + case "specialty_rof": + self sethintstring( &"ZOMBIE_PERK_DOUBLETAP", self.cost ); + break; + case "specialty_longersprint_upgrade": + case "specialty_longersprint": + self sethintstring( &"ZOMBIE_PERK_MARATHON", self.cost ); + break; + case "specialty_deadshot_upgrade": + case "specialty_deadshot": + self sethintstring( &"ZOMBIE_PERK_DEADSHOT", self.cost ); + break; + case "specialty_additionalprimaryweapon_upgrade": + case "specialty_additionalprimaryweapon": + self sethintstring( &"ZOMBIE_PERK_ADDITIONALPRIMARYWEAPON", self.cost ); + break; + case "specialty_scavenger_upgrade": + case "specialty_scavenger": + self sethintstring( &"ZOMBIE_PERK_TOMBSTONE", self.cost ); + break; + case "specialty_finalstand_upgrade": + case "specialty_finalstand": + self sethintstring( &"ZOMBIE_PERK_CHUGABUD", self.cost ); + break; + default: + self sethintstring( perk + " Cost: " + level.zombie_vars["zombie_perk_cost"] ); + } + + if ( isdefined( level._custom_perks ) ) + { + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].cost ) && isdefined( level._custom_perks[perk].hint_string ) ) + self sethintstring( level._custom_perks[perk].hint_string, level._custom_perks[perk].cost ); + } +} + +vending_trigger_think() +{ + self endon( "death" ); + wait 0.01; + perk = self.script_noteworthy; + solo = 0; + start_on = 0; + level.revive_machine_is_solo = 0; + + if ( isdefined( perk ) && ( perk == "specialty_quickrevive" || perk == "specialty_quickrevive_upgrade" ) ) + { + flag_wait( "start_zombie_round_logic" ); + solo = use_solo_revive(); + self endon( "stop_quickrevive_logic" ); + level.quick_revive_trigger = self; + + if ( solo ) + { + if ( !is_true( level.revive_machine_is_solo ) ) + { + start_on = 1; + players = get_players(); + + foreach ( player in players ) + { + if ( !isdefined( player.lives ) ) + player.lives = 0; + } + + level maps\mp\zombies\_zm::set_default_laststand_pistol( 1 ); + } + + level.revive_machine_is_solo = 1; + } + } + + self sethintstring( &"ZOMBIE_NEED_POWER" ); + self setcursorhint( "HINT_NOICON" ); + self usetriggerrequirelookat(); + cost = level.zombie_vars["zombie_perk_cost"]; + + switch ( perk ) + { + case "specialty_armorvest_upgrade": + case "specialty_armorvest": + cost = 2500; + break; + case "specialty_quickrevive_upgrade": + case "specialty_quickrevive": + if ( solo ) + cost = 500; + else + cost = 1500; + + break; + case "specialty_fastreload_upgrade": + case "specialty_fastreload": + cost = 3000; + break; + case "specialty_rof_upgrade": + case "specialty_rof": + cost = 2000; + break; + case "specialty_longersprint_upgrade": + case "specialty_longersprint": + cost = 2000; + break; + case "specialty_deadshot_upgrade": + case "specialty_deadshot": + cost = 1500; + break; + case "specialty_additionalprimaryweapon_upgrade": + case "specialty_additionalprimaryweapon": + cost = 4000; + break; + } + + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].cost ) ) + cost = level._custom_perks[perk].cost; + + self.cost = cost; + + if ( !start_on ) + { + notify_name = perk + "_power_on"; + + level waittill( notify_name ); + } + + start_on = 0; + + if ( !isdefined( level._perkmachinenetworkchoke ) ) + level._perkmachinenetworkchoke = 0; + else + level._perkmachinenetworkchoke++; + + for ( i = 0; i < level._perkmachinenetworkchoke; i++ ) + wait_network_frame(); + + self thread maps\mp\zombies\_zm_audio::perks_a_cola_jingle_timer(); + self thread check_player_has_perk( perk ); + + switch ( perk ) + { + case "specialty_armorvest_upgrade": + case "specialty_armorvest": + self sethintstring( &"ZOMBIE_PERK_JUGGERNAUT", cost ); + break; + case "specialty_quickrevive_upgrade": + case "specialty_quickrevive": + if ( solo ) + self sethintstring( &"ZOMBIE_PERK_QUICKREVIVE_SOLO", cost ); + else + self sethintstring( &"ZOMBIE_PERK_QUICKREVIVE", cost ); + + break; + case "specialty_fastreload_upgrade": + case "specialty_fastreload": + self sethintstring( &"ZOMBIE_PERK_FASTRELOAD", cost ); + break; + case "specialty_rof_upgrade": + case "specialty_rof": + self sethintstring( &"ZOMBIE_PERK_DOUBLETAP", cost ); + break; + case "specialty_longersprint_upgrade": + case "specialty_longersprint": + self sethintstring( &"ZOMBIE_PERK_MARATHON", cost ); + break; + case "specialty_deadshot_upgrade": + case "specialty_deadshot": + self sethintstring( &"ZOMBIE_PERK_DEADSHOT", cost ); + break; + case "specialty_additionalprimaryweapon_upgrade": + case "specialty_additionalprimaryweapon": + self sethintstring( &"ZOMBIE_PERK_ADDITIONALPRIMARYWEAPON", cost ); + break; + case "specialty_scavenger_upgrade": + case "specialty_scavenger": + self sethintstring( &"ZOMBIE_PERK_TOMBSTONE", cost ); + break; + case "specialty_finalstand_upgrade": + case "specialty_finalstand": + self sethintstring( &"ZOMBIE_PERK_CHUGABUD", cost ); + break; + default: + self sethintstring( perk + " Cost: " + level.zombie_vars["zombie_perk_cost"] ); + } + + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].hint_string ) ) + self sethintstring( level._custom_perks[perk].hint_string, cost ); + + for (;;) + { + self waittill( "trigger", player ); + + index = maps\mp\zombies\_zm_weapons::get_player_index( player ); + + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission ) + continue; + + if ( player in_revive_trigger() ) + continue; + + if ( !player maps\mp\zombies\_zm_magicbox::can_buy_weapon() ) + { + wait 0.1; + continue; + } + + if ( player isthrowinggrenade() ) + { + wait 0.1; + continue; + } + + if ( player isswitchingweapons() ) + { + wait 0.1; + continue; + } + + if ( player.is_drinking > 0 ) + { + wait 0.1; + continue; + } + + if ( player hasperk( perk ) || player has_perk_paused( perk ) ) + { + cheat = 0; +/# + if ( getdvarint( _hash_FA81816F ) >= 5 ) + cheat = 1; +#/ + if ( cheat != 1 ) + { + self playsound( "deny" ); + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 1 ); + continue; + } + } + + if ( isdefined( level.custom_perk_validation ) ) + { + valid = self [[ level.custom_perk_validation ]]( player ); + + if ( !valid ) + continue; + } + + current_cost = cost; + + if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) + current_cost = player maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_double_points_cost( current_cost ); + + if ( player.score < current_cost ) + { + self playsound( "evt_perk_deny" ); + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); + continue; + } + + if ( player.num_perks >= player get_player_perk_purchase_limit() ) + { + self playsound( "evt_perk_deny" ); + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "sigh" ); + continue; + } + + sound = "evt_bottle_dispense"; + playsoundatposition( sound, self.origin ); + player maps\mp\zombies\_zm_score::minus_to_player_score( current_cost, 1 ); + player.perk_purchased = perk; + self thread maps\mp\zombies\_zm_audio::play_jingle_or_stinger( self.script_label ); + self thread vending_trigger_post_think( player, perk ); + } +} + +vending_trigger_post_think( player, perk ) +{ + player endon( "disconnect" ); + player endon( "end_game" ); + player endon( "perk_abort_drinking" ); + gun = player perk_give_bottle_begin( perk ); + evt = player waittill_any_return( "fake_death", "death", "player_downed", "weapon_change_complete" ); + + if ( evt == "weapon_change_complete" ) + player thread wait_give_perk( perk, 1 ); + + player perk_give_bottle_end( gun, perk ); + + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission ) + return; + + player notify( "burp" ); + + if ( isdefined( level.pers_upgrade_cash_back ) && level.pers_upgrade_cash_back ) + player maps\mp\zombies\_zm_pers_upgrades_functions::cash_back_player_drinks_perk(); + + if ( isdefined( level.pers_upgrade_perk_lose ) && level.pers_upgrade_perk_lose ) + player thread maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_perk_lose_bought(); + + if ( isdefined( level.perk_bought_func ) ) + player [[ level.perk_bought_func ]]( perk ); + + player.perk_purchased = undefined; + + if ( is_false( self.power_on ) ) + { + wait 1; + perk_pause( self.script_noteworthy ); + } + + bbprint( "zombie_uses", "playername %s playerscore %d round %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, perk, self.origin, "perk" ); +} + +solo_revive_buy_trigger_move( revive_trigger_noteworthy ) +{ + self endon( "death" ); + revive_perk_triggers = getentarray( revive_trigger_noteworthy, "script_noteworthy" ); + + foreach ( revive_perk_trigger in revive_perk_triggers ) + self thread solo_revive_buy_trigger_move_trigger( revive_perk_trigger ); +} + +solo_revive_buy_trigger_move_trigger( revive_perk_trigger ) +{ + self endon( "death" ); + revive_perk_trigger setinvisibletoplayer( self ); + + if ( level.solo_lives_given >= 3 ) + { + revive_perk_trigger trigger_off(); + + if ( isdefined( level._solo_revive_machine_expire_func ) ) + revive_perk_trigger [[ level._solo_revive_machine_expire_func ]](); + + return; + } + + while ( self.lives > 0 ) + wait 0.1; + + revive_perk_trigger setvisibletoplayer( self ); +} + +wait_give_perk( perk, bought ) +{ + self endon( "player_downed" ); + self endon( "disconnect" ); + self endon( "end_game" ); + self endon( "perk_abort_drinking" ); + self waittill_notify_or_timeout( "burp", 0.5 ); + self give_perk( perk, bought ); +} + +return_retained_perks() +{ + if ( isdefined( self._retain_perks_array ) ) + { + keys = getarraykeys( self._retain_perks_array ); + + foreach ( perk in keys ) + { + if ( isdefined( self._retain_perks_array[perk] ) && self._retain_perks_array[perk] ) + self give_perk( perk, 0 ); + } + } +} + +give_perk( perk, bought ) +{ + self setperk( perk ); + self.num_perks++; + + if ( isdefined( bought ) && bought ) + { + self maps\mp\zombies\_zm_audio::playerexert( "burp" ); + + if ( isdefined( level.remove_perk_vo_delay ) && level.remove_perk_vo_delay ) + self maps\mp\zombies\_zm_audio::perk_vox( perk ); + else + self delay_thread( 1.5, maps\mp\zombies\_zm_audio::perk_vox, perk ); + + self setblur( 4, 0.1 ); + wait 0.1; + self setblur( 0, 0.1 ); + self notify( "perk_bought", perk ); + } + + self perk_set_max_health_if_jugg( perk, 1, 0 ); + + if ( !( isdefined( level.disable_deadshot_clientfield ) && level.disable_deadshot_clientfield ) ) + { + if ( perk == "specialty_deadshot" ) + self setclientfieldtoplayer( "deadshot_perk", 1 ); + else if ( perk == "specialty_deadshot_upgrade" ) + self setclientfieldtoplayer( "deadshot_perk", 1 ); + } + + if ( perk == "specialty_scavenger" ) + self.hasperkspecialtytombstone = 1; + + players = get_players(); + + if ( use_solo_revive() && perk == "specialty_quickrevive" ) + { + self.lives = 1; + + if ( !isdefined( level.solo_lives_given ) ) + level.solo_lives_given = 0; + + if ( isdefined( level.solo_game_free_player_quickrevive ) ) + level.solo_game_free_player_quickrevive = undefined; + else + level.solo_lives_given++; + + if ( level.solo_lives_given >= 3 ) + flag_set( "solo_revive" ); + + self thread solo_revive_buy_trigger_move( perk ); + } + + if ( perk == "specialty_finalstand" ) + { + self.lives = 1; + self.hasperkspecialtychugabud = 1; + self notify( "perk_chugabud_activated" ); + } + + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].player_thread_give ) ) + self thread [[ level._custom_perks[perk].player_thread_give ]](); + + self set_perk_clientfield( perk, 1 ); + maps\mp\_demo::bookmark( "zm_player_perk", gettime(), self ); + self maps\mp\zombies\_zm_stats::increment_client_stat( "perks_drank" ); + self maps\mp\zombies\_zm_stats::increment_client_stat( perk + "_drank" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( perk + "_drank" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "perks_drank" ); + + if ( !isdefined( self.perk_history ) ) + self.perk_history = []; + + self.perk_history = add_to_array( self.perk_history, perk, 0 ); + + if ( !isdefined( self.perks_active ) ) + self.perks_active = []; + + self.perks_active[self.perks_active.size] = perk; + self notify( "perk_acquired" ); + self thread perk_think( perk ); +} + +perk_set_max_health_if_jugg( perk, set_premaxhealth, clamp_health_to_max_health ) +{ + max_total_health = undefined; + + if ( perk == "specialty_armorvest" ) + { + if ( set_premaxhealth ) + self.premaxhealth = self.maxhealth; + + max_total_health = level.zombie_vars["zombie_perk_juggernaut_health"]; + } + else if ( perk == "specialty_armorvest_upgrade" ) + { + if ( set_premaxhealth ) + self.premaxhealth = self.maxhealth; + + max_total_health = level.zombie_vars["zombie_perk_juggernaut_health_upgrade"]; + } + else if ( perk == "jugg_upgrade" ) + { + if ( set_premaxhealth ) + self.premaxhealth = self.maxhealth; + + if ( self hasperk( "specialty_armorvest" ) ) + max_total_health = level.zombie_vars["zombie_perk_juggernaut_health"]; + else + max_total_health = 100; + } + else if ( perk == "health_reboot" ) + max_total_health = 100; + + if ( isdefined( max_total_health ) ) + { + if ( self maps\mp\zombies\_zm_pers_upgrades_functions::pers_jugg_active() ) + max_total_health += level.pers_jugg_upgrade_health_bonus; + + self setmaxhealth( max_total_health ); + + if ( isdefined( clamp_health_to_max_health ) && clamp_health_to_max_health == 1 ) + { + if ( self.health > self.maxhealth ) + self.health = self.maxhealth; + } + } +} + +check_player_has_perk( perk ) +{ + self endon( "death" ); +/# + if ( getdvarint( _hash_FA81816F ) >= 5 ) + return; +#/ + dist = 16384; + + while ( true ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( distancesquared( players[i].origin, self.origin ) < dist ) + { + if ( !players[i] hasperk( perk ) && !players[i] has_perk_paused( perk ) && !players[i] in_revive_trigger() && !is_equipment_that_blocks_purchase( players[i] getcurrentweapon() ) && !players[i] hacker_active() ) + { + self setinvisibletoplayer( players[i], 0 ); + continue; + } + + self setinvisibletoplayer( players[i], 1 ); + } + } + + wait 0.1; + } +} + +vending_set_hintstring( perk ) +{ + switch ( perk ) + { + case "specialty_armorvest_upgrade": + case "specialty_armorvest": + break; + } +} + +perk_think( perk ) +{ +/# + if ( getdvarint( _hash_FA81816F ) >= 5 ) + { + if ( isdefined( self.perk_hud[perk] ) ) + return; + } +#/ + perk_str = perk + "_stop"; + result = self waittill_any_return( "fake_death", "death", "player_downed", perk_str ); + do_retain = 1; + + if ( use_solo_revive() && perk == "specialty_quickrevive" ) + do_retain = 0; + + if ( do_retain ) + { + if ( isdefined( self._retain_perks ) && self._retain_perks ) + return; + else if ( isdefined( self._retain_perks_array ) && ( isdefined( self._retain_perks_array[perk] ) && self._retain_perks_array[perk] ) ) + return; + } + + self unsetperk( perk ); + self.num_perks--; + + switch ( perk ) + { + case "specialty_armorvest": + self setmaxhealth( 100 ); + break; + case "specialty_additionalprimaryweapon": + if ( result == perk_str ) + self maps\mp\zombies\_zm::take_additionalprimaryweapon(); + + break; + case "specialty_deadshot": + if ( !( isdefined( level.disable_deadshot_clientfield ) && level.disable_deadshot_clientfield ) ) + self setclientfieldtoplayer( "deadshot_perk", 0 ); + + break; + case "specialty_deadshot_upgrade": + if ( !( isdefined( level.disable_deadshot_clientfield ) && level.disable_deadshot_clientfield ) ) + self setclientfieldtoplayer( "deadshot_perk", 0 ); + + break; + } + + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].player_thread_take ) ) + self thread [[ level._custom_perks[perk].player_thread_take ]](); + + self set_perk_clientfield( perk, 0 ); + self.perk_purchased = undefined; + + if ( isdefined( level.perk_lost_func ) ) + self [[ level.perk_lost_func ]]( perk ); + + if ( isdefined( self.perks_active ) && isinarray( self.perks_active, perk ) ) + arrayremovevalue( self.perks_active, perk, 0 ); + + self notify( "perk_lost" ); +} + +set_perk_clientfield( perk, state ) +{ + switch ( perk ) + { + case "specialty_additionalprimaryweapon": + self setclientfieldtoplayer( "perk_additional_primary_weapon", state ); + break; + case "specialty_deadshot": + self setclientfieldtoplayer( "perk_dead_shot", state ); + break; + case "specialty_flakjacket": + self setclientfieldtoplayer( "perk_dive_to_nuke", state ); + break; + case "specialty_rof": + self setclientfieldtoplayer( "perk_double_tap", state ); + break; + case "specialty_armorvest": + self setclientfieldtoplayer( "perk_juggernaut", state ); + break; + case "specialty_longersprint": + self setclientfieldtoplayer( "perk_marathon", state ); + break; + case "specialty_quickrevive": + self setclientfieldtoplayer( "perk_quick_revive", state ); + break; + case "specialty_fastreload": + self setclientfieldtoplayer( "perk_sleight_of_hand", state ); + break; + case "specialty_scavenger": + self setclientfieldtoplayer( "perk_tombstone", state ); + break; + case "specialty_finalstand": + self setclientfieldtoplayer( "perk_chugabud", state ); + break; + default: + break; + } + + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].clientfield_set ) ) + self [[ level._custom_perks[perk].clientfield_set ]]( state ); +} + +perk_hud_destroy( perk ) +{ + self.perk_hud[perk] destroy_hud(); + self.perk_hud[perk] = undefined; +} + +perk_hud_grey( perk, grey_on_off ) +{ + if ( grey_on_off ) + self.perk_hud[perk].alpha = 0.3; + else + self.perk_hud[perk].alpha = 1.0; +} + +perk_hud_flash() +{ + self endon( "death" ); + self.flash = 1; + self scaleovertime( 0.05, 32, 32 ); + wait 0.3; + self scaleovertime( 0.05, 24, 24 ); + wait 0.3; + self.flash = 0; +} + +perk_flash_audio( perk ) +{ + alias = undefined; + + switch ( perk ) + { + case "specialty_armorvest": + alias = "zmb_hud_flash_jugga"; + break; + case "specialty_quickrevive": + alias = "zmb_hud_flash_revive"; + break; + case "specialty_fastreload": + alias = "zmb_hud_flash_speed"; + break; + case "specialty_longersprint": + alias = "zmb_hud_flash_stamina"; + break; + case "specialty_flakjacket": + alias = "zmb_hud_flash_phd"; + break; + case "specialty_deadshot": + alias = "zmb_hud_flash_deadshot"; + break; + case "specialty_additionalprimaryweapon": + alias = "zmb_hud_flash_additionalprimaryweapon"; + break; + } + + if ( isdefined( alias ) ) + self playlocalsound( alias ); +} + +perk_hud_start_flash( perk ) +{ + if ( self hasperk( perk ) && isdefined( self.perk_hud ) ) + { + hud = self.perk_hud[perk]; + + if ( isdefined( hud ) ) + { + if ( !( isdefined( hud.flash ) && hud.flash ) ) + { + hud thread perk_hud_flash(); + self thread perk_flash_audio( perk ); + } + } + } +} + +perk_hud_stop_flash( perk, taken ) +{ + if ( self hasperk( perk ) && isdefined( self.perk_hud ) ) + { + hud = self.perk_hud[perk]; + + if ( isdefined( hud ) ) + { + hud.flash = undefined; + + if ( isdefined( taken ) ) + hud notify( "stop_flash_perk" ); + } + } +} + +perk_give_bottle_begin( perk ) +{ + self increment_is_drinking(); + self disable_player_move_states( 1 ); + gun = self getcurrentweapon(); + weapon = ""; + + switch ( perk ) + { + case "specialty_armorvest": + case " _upgrade": + weapon = level.machine_assets["juggernog"].weapon; + break; + case "specialty_quickrevive_upgrade": + case "specialty_quickrevive": + weapon = level.machine_assets["revive"].weapon; + break; + case "specialty_fastreload_upgrade": + case "specialty_fastreload": + weapon = level.machine_assets["speedcola"].weapon; + break; + case "specialty_rof_upgrade": + case "specialty_rof": + weapon = level.machine_assets["doubletap"].weapon; + break; + case "specialty_longersprint_upgrade": + case "specialty_longersprint": + weapon = level.machine_assets["marathon"].weapon; + break; + case "specialty_flakjacket_upgrade": + case "specialty_flakjacket": + weapon = level.machine_assets["divetonuke"].weapon; + break; + case "specialty_deadshot_upgrade": + case "specialty_deadshot": + weapon = level.machine_assets["deadshot"].weapon; + break; + case "specialty_additionalprimaryweapon_upgrade": + case "specialty_additionalprimaryweapon": + weapon = level.machine_assets["additionalprimaryweapon"].weapon; + break; + case "specialty_scavenger_upgrade": + case "specialty_scavenger": + weapon = level.machine_assets["tombstone"].weapon; + break; + case "specialty_finalstand_upgrade": + case "specialty_finalstand": + weapon = level.machine_assets["whoswho"].weapon; + break; + } + + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].perk_bottle ) ) + weapon = level._custom_perks[perk].perk_bottle; + + self giveweapon( weapon ); + self switchtoweapon( weapon ); + return gun; +} + +perk_give_bottle_end( gun, perk ) +{ + self endon( "perk_abort_drinking" ); + assert( !is_zombie_perk_bottle( gun ) ); + assert( gun != level.revive_tool ); + self enable_player_move_states(); + weapon = ""; + + switch ( perk ) + { + case "specialty_rof_upgrade": + case "specialty_rof": + weapon = level.machine_assets["doubletap"].weapon; + break; + case "specialty_longersprint_upgrade": + case "specialty_longersprint": + weapon = level.machine_assets["marathon"].weapon; + break; + case "specialty_flakjacket_upgrade": + case "specialty_flakjacket": + weapon = level.machine_assets["divetonuke"].weapon; + break; + case "specialty_armorvest_upgrade": + case "specialty_armorvest": + weapon = level.machine_assets["juggernog"].weapon; + self.jugg_used = 1; + break; + case "specialty_quickrevive_upgrade": + case "specialty_quickrevive": + weapon = level.machine_assets["revive"].weapon; + break; + case "specialty_fastreload_upgrade": + case "specialty_fastreload": + weapon = level.machine_assets["speedcola"].weapon; + self.speed_used = 1; + break; + case "specialty_deadshot_upgrade": + case "specialty_deadshot": + weapon = level.machine_assets["deadshot"].weapon; + break; + case "specialty_additionalprimaryweapon_upgrade": + case "specialty_additionalprimaryweapon": + weapon = level.machine_assets["additionalprimaryweapon"].weapon; + break; + case "specialty_scavenger_upgrade": + case "specialty_scavenger": + weapon = level.machine_assets["tombstone"].weapon; + break; + case "specialty_finalstand_upgrade": + case "specialty_finalstand": + weapon = level.machine_assets["whoswho"].weapon; + break; + } + + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].perk_bottle ) ) + weapon = level._custom_perks[perk].perk_bottle; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + { + self takeweapon( weapon ); + return; + } + + self takeweapon( weapon ); + + if ( self is_multiple_drinking() ) + { + self decrement_is_drinking(); + return; + } + else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment_that_blocks_purchase( gun ) ) + { + self switchtoweapon( gun ); + + if ( is_melee_weapon( gun ) ) + { + self decrement_is_drinking(); + return; + } + } + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + } + + self waittill( "weapon_change_complete" ); + + if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) ) + self decrement_is_drinking(); +} + +perk_abort_drinking( post_delay ) +{ + if ( self.is_drinking ) + { + self notify( "perk_abort_drinking" ); + self decrement_is_drinking(); + self enable_player_move_states(); + + if ( isdefined( post_delay ) ) + wait( post_delay ); + } +} + +give_random_perk() +{ + random_perk = undefined; + vending_triggers = getentarray( "zombie_vending", "targetname" ); + perks = []; + + for ( i = 0; i < vending_triggers.size; i++ ) + { + perk = vending_triggers[i].script_noteworthy; + + if ( isdefined( self.perk_purchased ) && self.perk_purchased == perk ) + continue; + + if ( perk == "specialty_weapupgrade" ) + continue; + + if ( !self hasperk( perk ) && !self has_perk_paused( perk ) ) + perks[perks.size] = perk; + } + + if ( perks.size > 0 ) + { + perks = array_randomize( perks ); + random_perk = perks[0]; + self give_perk( random_perk ); + } + else + self playsoundtoplayer( level.zmb_laugh_alias, self ); + + return random_perk; +} + +lose_random_perk() +{ + vending_triggers = getentarray( "zombie_vending", "targetname" ); + perks = []; + + for ( i = 0; i < vending_triggers.size; i++ ) + { + perk = vending_triggers[i].script_noteworthy; + + if ( isdefined( self.perk_purchased ) && self.perk_purchased == perk ) + continue; + + if ( self hasperk( perk ) || self has_perk_paused( perk ) ) + perks[perks.size] = perk; + } + + if ( perks.size > 0 ) + { + perks = array_randomize( perks ); + perk = perks[0]; + perk_str = perk + "_stop"; + self notify( perk_str ); + + if ( use_solo_revive() && perk == "specialty_quickrevive" ) + self.lives--; + } +} + +update_perk_hud() +{ + if ( isdefined( self.perk_hud ) ) + { + keys = getarraykeys( self.perk_hud ); + + for ( i = 0; i < self.perk_hud.size; i++ ) + self.perk_hud[keys[i]].x = i * 30; + } +} + +quantum_bomb_give_nearest_perk_validation( position ) +{ + vending_triggers = getentarray( "zombie_vending", "targetname" ); + range_squared = 32400; + + for ( i = 0; i < vending_triggers.size; i++ ) + { + if ( distancesquared( vending_triggers[i].origin, position ) < range_squared ) + return true; + } + + return false; +} + +quantum_bomb_give_nearest_perk_result( position ) +{ + [[ level.quantum_bomb_play_mystery_effect_func ]]( position ); + vending_triggers = getentarray( "zombie_vending", "targetname" ); + nearest = 0; + + for ( i = 1; i < vending_triggers.size; i++ ) + { + if ( distancesquared( vending_triggers[i].origin, position ) < distancesquared( vending_triggers[nearest].origin, position ) ) + nearest = i; + } + + players = get_players(); + perk = vending_triggers[nearest].script_noteworthy; + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( player.sessionstate == "spectator" || player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + continue; + + if ( !player hasperk( perk ) && ( !isdefined( player.perk_purchased ) || player.perk_purchased != perk ) && randomint( 5 ) ) + { + if ( player == self ) + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "quant_good" ); + + player give_perk( perk ); + player [[ level.quantum_bomb_play_player_effect_func ]](); + } + } +} + +perk_pause( perk ) +{ + if ( perk == "Pack_A_Punch" || perk == "specialty_weapupgrade" ) + return; + + for ( j = 0; j < get_players().size; j++ ) + { + player = get_players()[j]; + + if ( !isdefined( player.disabled_perks ) ) + player.disabled_perks = []; + + player.disabled_perks[perk] = isdefined( player.disabled_perks[perk] ) && player.disabled_perks[perk] || player hasperk( perk ); + + if ( player.disabled_perks[perk] ) + { + player unsetperk( perk ); + player set_perk_clientfield( perk, 2 ); + + if ( perk == "specialty_armorvest" || perk == "specialty_armorvest_upgrade" ) + { + player setmaxhealth( player.premaxhealth ); + + if ( player.health > player.maxhealth ) + player.health = player.maxhealth; + } + + if ( perk == "specialty_additionalprimaryweapon" || perk == "specialty_additionalprimaryweapon_upgrade" ) + player maps\mp\zombies\_zm::take_additionalprimaryweapon(); + + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].player_thread_take ) ) + player thread [[ level._custom_perks[perk].player_thread_take ]](); +/# + println( " ZM PERKS " + player.name + " paused perk " + perk + "\\n" ); +#/ + } + } +} + +perk_unpause( perk ) +{ + if ( !isdefined( perk ) ) + return; + + if ( perk == "Pack_A_Punch" ) + return; + + for ( j = 0; j < get_players().size; j++ ) + { + player = get_players()[j]; + + if ( isdefined( player.disabled_perks ) && ( isdefined( player.disabled_perks[perk] ) && player.disabled_perks[perk] ) ) + { + player.disabled_perks[perk] = 0; + player set_perk_clientfield( perk, 1 ); + player setperk( perk ); +/# + println( " ZM PERKS " + player.name + " unpaused perk " + perk + "\\n" ); +#/ + if ( issubstr( perk, "specialty_scavenger" ) ) + player.hasperkspecialtytombstone = 1; + + player perk_set_max_health_if_jugg( perk, 0, 0 ); + + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].player_thread_give ) ) + player thread [[ level._custom_perks[perk].player_thread_give ]](); + } + } +} + +perk_pause_all_perks() +{ + vending_triggers = getentarray( "zombie_vending", "targetname" ); + + foreach ( trigger in vending_triggers ) + maps\mp\zombies\_zm_perks::perk_pause( trigger.script_noteworthy ); +} + +perk_unpause_all_perks() +{ + vending_triggers = getentarray( "zombie_vending", "targetname" ); + + foreach ( trigger in vending_triggers ) + maps\mp\zombies\_zm_perks::perk_unpause( trigger.script_noteworthy ); +} + +has_perk_paused( perk ) +{ + if ( isdefined( self.disabled_perks ) && isdefined( self.disabled_perks[perk] ) && self.disabled_perks[perk] ) + return true; + + return false; +} + +getvendingmachinenotify() +{ + if ( !isdefined( self ) ) + return ""; + + switch ( self.script_noteworthy ) + { + case "specialty_armorvest_upgrade": + case "specialty_armorvest": + return "juggernog"; + break; + case "specialty_quickrevive_upgrade": + case "specialty_quickrevive": + return "revive"; + break; + case "specialty_fastreload_upgrade": + case "specialty_fastreload": + return "sleight"; + break; + case "specialty_rof_upgrade": + case "specialty_rof": + return "doubletap"; + break; + case "specialty_longersprint_upgrade": + case "specialty_longersprint": + return "marathon"; + break; + case "specialty_flakjacket_upgrade": + case "specialty_flakjacket": + return "divetonuke"; + break; + case "specialty_deadshot_upgrade": + case "specialty_deadshot": + return "deadshot"; + break; + case "specialty_additionalprimaryweapon_upgrade": + case "specialty_additionalprimaryweapon": + return "additionalprimaryweapon"; + break; + case "specialty_scavenger_upgrade": + case "specialty_scavenger": + return "tombstone"; + break; + case "specialty_finalstand_upgrade": + case "specialty_finalstand": + return "chugabud"; + break; + case "specialty_weapupgrade": + return "Pack_A_Punch"; + } + + str_perk = undefined; + + if ( isdefined( level._custom_perks[self.script_noteworthy] ) && isdefined( isdefined( level._custom_perks[self.script_noteworthy].alias ) ) ) + str_perk = level._custom_perks[self.script_noteworthy].alias; + + return str_perk; +} + +perk_machine_removal( machine, replacement_model ) +{ + if ( !isdefined( machine ) ) + return; + + trig = getent( machine, "script_noteworthy" ); + machine_model = undefined; + + if ( isdefined( trig ) ) + { + trig notify( "warning_dialog" ); + + if ( isdefined( trig.target ) ) + { + parts = getentarray( trig.target, "targetname" ); + + for ( i = 0; i < parts.size; i++ ) + { + if ( isdefined( parts[i].classname ) && parts[i].classname == "script_model" ) + { + machine_model = parts[i]; + continue; + } + + if ( isdefined( parts[i].script_noteworthy && parts[i].script_noteworthy == "clip" ) ) + { + model_clip = parts[i]; + continue; + } + + parts[i] delete(); + } + } + + if ( isdefined( replacement_model ) && isdefined( machine_model ) ) + machine_model setmodel( replacement_model ); + else if ( !isdefined( replacement_model ) && isdefined( machine_model ) ) + { + machine_model delete(); + + if ( isdefined( model_clip ) ) + model_clip delete(); + + if ( isdefined( trig.clip ) ) + trig.clip delete(); + } + + if ( isdefined( trig.bump ) ) + trig.bump delete(); + + trig delete(); + } +} + +perk_machine_spawn_init() +{ + match_string = ""; + location = level.scr_zm_map_start_location; + + if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) ) + location = level.default_start_location; + + match_string = level.scr_zm_ui_gametype + "_perks_" + location; + pos = []; + + if ( isdefined( level.override_perk_targetname ) ) + structs = getstructarray( level.override_perk_targetname, "targetname" ); + else + structs = getstructarray( "zm_perk_machine", "targetname" ); + + foreach ( struct in structs ) + { + if ( isdefined( struct.script_string ) ) + { + tokens = strtok( struct.script_string, " " ); + + foreach ( token in tokens ) + { + if ( token == match_string ) + pos[pos.size] = struct; + } + + continue; + } + + pos[pos.size] = struct; + } + + if ( !isdefined( pos ) || pos.size == 0 ) + return; + + precachemodel( "zm_collision_perks1" ); + + for ( i = 0; i < pos.size; i++ ) + { + perk = pos[i].script_noteworthy; + + if ( isdefined( perk ) && isdefined( pos[i].model ) ) + { + use_trigger = spawn( "trigger_radius_use", pos[i].origin + vectorscale( ( 0, 0, 1 ), 30.0 ), 0, 40, 70 ); + use_trigger.targetname = "zombie_vending"; + use_trigger.script_noteworthy = perk; + use_trigger triggerignoreteam(); + perk_machine = spawn( "script_model", pos[i].origin ); + perk_machine.angles = pos[i].angles; + perk_machine setmodel( pos[i].model ); + + if ( isdefined( level._no_vending_machine_bump_trigs ) && level._no_vending_machine_bump_trigs ) + bump_trigger = undefined; + else + { + bump_trigger = spawn( "trigger_radius", pos[i].origin, 0, 35, 64 ); + bump_trigger.script_activated = 1; + bump_trigger.script_sound = "zmb_perks_bump_bottle"; + bump_trigger.targetname = "audio_bump_trigger"; + + if ( perk != "specialty_weapupgrade" ) + bump_trigger thread thread_bump_trigger(); + } + + collision = spawn( "script_model", pos[i].origin, 1 ); + collision.angles = pos[i].angles; + collision setmodel( "zm_collision_perks1" ); + collision.script_noteworthy = "clip"; + collision disconnectpaths(); + use_trigger.clip = collision; + use_trigger.machine = perk_machine; + use_trigger.bump = bump_trigger; + + if ( isdefined( pos[i].blocker_model ) ) + use_trigger.blocker_model = pos[i].blocker_model; + + if ( isdefined( pos[i].script_int ) ) + perk_machine.script_int = pos[i].script_int; + + if ( isdefined( pos[i].turn_on_notify ) ) + perk_machine.turn_on_notify = pos[i].turn_on_notify; + + switch ( perk ) + { + case "specialty_quickrevive_upgrade": + case "specialty_quickrevive": + use_trigger.script_sound = "mus_perks_revive_jingle"; + use_trigger.script_string = "revive_perk"; + use_trigger.script_label = "mus_perks_revive_sting"; + use_trigger.target = "vending_revive"; + perk_machine.script_string = "revive_perk"; + perk_machine.targetname = "vending_revive"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "revive_perk"; + + break; + case "specialty_fastreload_upgrade": + case "specialty_fastreload": + use_trigger.script_sound = "mus_perks_speed_jingle"; + use_trigger.script_string = "speedcola_perk"; + use_trigger.script_label = "mus_perks_speed_sting"; + use_trigger.target = "vending_sleight"; + perk_machine.script_string = "speedcola_perk"; + perk_machine.targetname = "vending_sleight"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "speedcola_perk"; + + break; + case "specialty_longersprint_upgrade": + case "specialty_longersprint": + use_trigger.script_sound = "mus_perks_stamin_jingle"; + use_trigger.script_string = "marathon_perk"; + use_trigger.script_label = "mus_perks_stamin_sting"; + use_trigger.target = "vending_marathon"; + perk_machine.script_string = "marathon_perk"; + perk_machine.targetname = "vending_marathon"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "marathon_perk"; + + break; + case "specialty_armorvest_upgrade": + case "specialty_armorvest": + use_trigger.script_sound = "mus_perks_jugganog_jingle"; + use_trigger.script_string = "jugg_perk"; + use_trigger.script_label = "mus_perks_jugganog_sting"; + use_trigger.longjinglewait = 1; + use_trigger.target = "vending_jugg"; + perk_machine.script_string = "jugg_perk"; + perk_machine.targetname = "vending_jugg"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "jugg_perk"; + + break; + case "specialty_scavenger_upgrade": + case "specialty_scavenger": + use_trigger.script_sound = "mus_perks_tombstone_jingle"; + use_trigger.script_string = "tombstone_perk"; + use_trigger.script_label = "mus_perks_tombstone_sting"; + use_trigger.target = "vending_tombstone"; + perk_machine.script_string = "tombstone_perk"; + perk_machine.targetname = "vending_tombstone"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "tombstone_perk"; + + break; + case "specialty_rof_upgrade": + case "specialty_rof": + use_trigger.script_sound = "mus_perks_doubletap_jingle"; + use_trigger.script_string = "tap_perk"; + use_trigger.script_label = "mus_perks_doubletap_sting"; + use_trigger.target = "vending_doubletap"; + perk_machine.script_string = "tap_perk"; + perk_machine.targetname = "vending_doubletap"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "tap_perk"; + + break; + case "specialty_finalstand_upgrade": + case "specialty_finalstand": + use_trigger.script_sound = "mus_perks_whoswho_jingle"; + use_trigger.script_string = "tap_perk"; + use_trigger.script_label = "mus_perks_whoswho_sting"; + use_trigger.target = "vending_chugabud"; + perk_machine.script_string = "tap_perk"; + perk_machine.targetname = "vending_chugabud"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "tap_perk"; + + break; + case "specialty_additionalprimaryweapon_upgrade": + case "specialty_additionalprimaryweapon": + use_trigger.script_sound = "mus_perks_mulekick_jingle"; + use_trigger.script_string = "tap_perk"; + use_trigger.script_label = "mus_perks_mulekick_sting"; + use_trigger.target = "vending_additionalprimaryweapon"; + perk_machine.script_string = "tap_perk"; + perk_machine.targetname = "vending_additionalprimaryweapon"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "tap_perk"; + + break; + case "specialty_weapupgrade": + use_trigger.target = "vending_packapunch"; + use_trigger.script_sound = "mus_perks_packa_jingle"; + use_trigger.script_label = "mus_perks_packa_sting"; + use_trigger.longjinglewait = 1; + perk_machine.targetname = "vending_packapunch"; + flag_pos = getstruct( pos[i].target, "targetname" ); + + if ( isdefined( flag_pos ) ) + { + perk_machine_flag = spawn( "script_model", flag_pos.origin ); + perk_machine_flag.angles = flag_pos.angles; + perk_machine_flag setmodel( flag_pos.model ); + perk_machine_flag.targetname = "pack_flag"; + perk_machine.target = "pack_flag"; + } + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "perks_rattle"; + + break; + case "specialty_deadshot_upgrade": + case "specialty_deadshot": + use_trigger.script_sound = "mus_perks_deadshot_jingle"; + use_trigger.script_string = "deadshot_perk"; + use_trigger.script_label = "mus_perks_deadshot_sting"; + use_trigger.target = "vending_deadshot"; + perk_machine.script_string = "deadshot_vending"; + perk_machine.targetname = "vending_deadshot_model"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "deadshot_vending"; + + break; + default: + use_trigger.script_sound = "mus_perks_speed_jingle"; + use_trigger.script_string = "speedcola_perk"; + use_trigger.script_label = "mus_perks_speed_sting"; + use_trigger.target = "vending_sleight"; + perk_machine.script_string = "speedcola_perk"; + perk_machine.targetname = "vending_sleight"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "speedcola_perk"; + + break; + } + + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].perk_machine_set_kvps ) ) + [[ level._custom_perks[perk].perk_machine_set_kvps ]]( use_trigger, perk_machine, bump_trigger, collision ); + } + } +} + +get_perk_machine_start_state( perk ) +{ + if ( isdefined( level.vending_machines_powered_on_at_start ) && level.vending_machines_powered_on_at_start ) + return 1; + + if ( perk == "specialty_quickrevive" || perk == "specialty_quickrevive_upgrade" ) + { + assert( isdefined( level.revive_machine_is_solo ) ); + return level.revive_machine_is_solo; + } + + return 0; +} + +perks_register_clientfield() +{ + if ( isdefined( level.zombiemode_using_additionalprimaryweapon_perk ) && level.zombiemode_using_additionalprimaryweapon_perk ) + registerclientfield( "toplayer", "perk_additional_primary_weapon", 1, 2, "int" ); + + if ( isdefined( level.zombiemode_using_deadshot_perk ) && level.zombiemode_using_deadshot_perk ) + registerclientfield( "toplayer", "perk_dead_shot", 1, 2, "int" ); + + if ( isdefined( level.zombiemode_using_doubletap_perk ) && level.zombiemode_using_doubletap_perk ) + registerclientfield( "toplayer", "perk_double_tap", 1, 2, "int" ); + + if ( isdefined( level.zombiemode_using_juggernaut_perk ) && level.zombiemode_using_juggernaut_perk ) + registerclientfield( "toplayer", "perk_juggernaut", 1, 2, "int" ); + + if ( isdefined( level.zombiemode_using_marathon_perk ) && level.zombiemode_using_marathon_perk ) + registerclientfield( "toplayer", "perk_marathon", 1, 2, "int" ); + + if ( isdefined( level.zombiemode_using_revive_perk ) && level.zombiemode_using_revive_perk ) + registerclientfield( "toplayer", "perk_quick_revive", 1, 2, "int" ); + + if ( isdefined( level.zombiemode_using_sleightofhand_perk ) && level.zombiemode_using_sleightofhand_perk ) + registerclientfield( "toplayer", "perk_sleight_of_hand", 1, 2, "int" ); + + if ( isdefined( level.zombiemode_using_tombstone_perk ) && level.zombiemode_using_tombstone_perk ) + registerclientfield( "toplayer", "perk_tombstone", 1, 2, "int" ); + + if ( isdefined( level.zombiemode_using_perk_intro_fx ) && level.zombiemode_using_perk_intro_fx ) + registerclientfield( "scriptmover", "clientfield_perk_intro_fx", 1000, 1, "int" ); + + if ( isdefined( level.zombiemode_using_chugabud_perk ) && level.zombiemode_using_chugabud_perk ) + registerclientfield( "toplayer", "perk_chugabud", 1000, 1, "int" ); + + if ( isdefined( level._custom_perks ) ) + { + a_keys = getarraykeys( level._custom_perks ); + + for ( i = 0; i < a_keys.size; i++ ) + { + if ( isdefined( level._custom_perks[a_keys[i]].clientfield_register ) ) + level [[ level._custom_perks[a_keys[i]].clientfield_register ]](); + } + } +} + +thread_bump_trigger() +{ + for (;;) + { + self waittill( "trigger", trigplayer ); + + trigplayer playsound( self.script_sound ); + + while ( is_player_valid( trigplayer ) && trigplayer istouching( self ) ) + wait 0.5; + } +} + +reenable_quickrevive( machine_clip, solo_mode ) +{ + if ( isdefined( level.revive_machine_spawned ) && !is_true( level.revive_machine_spawned ) ) + return; + + wait 0.1; + power_state = 0; + + if ( is_true( solo_mode ) ) + { + power_state = 1; + should_pause = 1; + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( player.lives ) && player.lives > 0 && power_state ) + { + should_pause = 0; + continue; + } + + if ( isdefined( player.lives ) && player.lives < 1 ) + should_pause = 1; + } + + if ( should_pause ) + perk_pause( "specialty_quickrevive" ); + else + perk_unpause( "specialty_quickrevive" ); + + if ( isdefined( level.solo_revive_init ) && level.solo_revive_init && flag( "solo_revive" ) ) + { + disable_quickrevive( machine_clip ); + return; + } + + update_quickrevive_power_state( 1 ); + unhide_quickrevive(); + restart_quickrevive(); + level notify( "revive_off" ); + wait 0.1; + level notify( "stop_quickrevive_logic" ); + } + else + { + if ( !( isdefined( level._dont_unhide_quickervive_on_hotjoin ) && level._dont_unhide_quickervive_on_hotjoin ) ) + { + unhide_quickrevive(); + level notify( "revive_off" ); + wait 0.1; + } + + level notify( "revive_hide" ); + level notify( "stop_quickrevive_logic" ); + restart_quickrevive(); + + if ( flag( "power_on" ) ) + power_state = 1; + + update_quickrevive_power_state( power_state ); + } + + level thread turn_revive_on(); + + if ( power_state ) + { + perk_unpause( "specialty_quickrevive" ); + level notify( "revive_on" ); + wait 0.1; + level notify( "specialty_quickrevive_power_on" ); + } + else + perk_pause( "specialty_quickrevive" ); + + if ( !is_true( solo_mode ) ) + return; + + should_pause = 1; + players = get_players(); + + foreach ( player in players ) + { + if ( !is_player_valid( player ) ) + continue; + + if ( player hasperk( "specialty_quickrevive" ) ) + { + if ( !isdefined( player.lives ) ) + player.lives = 0; + + if ( !isdefined( level.solo_lives_given ) ) + level.solo_lives_given = 0; + + level.solo_lives_given++; + player.lives++; + + if ( isdefined( player.lives ) && player.lives > 0 && power_state ) + { + should_pause = 0; + continue; + } + + should_pause = 1; + } + } + + if ( should_pause ) + perk_pause( "specialty_quickrevive" ); + else + perk_unpause( "specialty_quickrevive" ); +} + +update_quickrevive_power_state( poweron ) +{ + foreach ( item in level.powered_items ) + { + if ( isdefined( item.target ) && isdefined( item.target.script_noteworthy ) && item.target.script_noteworthy == "specialty_quickrevive" ) + { + if ( item.power && !poweron ) + { + if ( !isdefined( item.powered_count ) ) + item.powered_count = 0; + else if ( item.powered_count > 0 ) + item.powered_count--; + } + else if ( !item.power && poweron ) + { + if ( !isdefined( item.powered_count ) ) + item.powered_count = 0; + + item.powered_count++; + } + + if ( !isdefined( item.depowered_count ) ) + item.depowered_count = 0; + + item.power = poweron; + } + } +} + +restart_quickrevive() +{ + triggers = getentarray( "zombie_vending", "targetname" ); + + foreach ( trigger in triggers ) + { + if ( !isdefined( trigger.script_noteworthy ) ) + continue; + + if ( trigger.script_noteworthy == "specialty_quickrevive" || trigger.script_noteworthy == "specialty_quickrevive_upgrade" ) + { + trigger notify( "stop_quickrevive_logic" ); + trigger thread vending_trigger_think(); + trigger trigger_on(); + } + } +} + +disable_quickrevive( machine_clip ) +{ + if ( is_true( level.solo_revive_init ) && flag( "solo_revive" ) && isdefined( level.quick_revive_machine ) ) + { + triggers = getentarray( "zombie_vending", "targetname" ); + + foreach ( trigger in triggers ) + { + if ( !isdefined( trigger.script_noteworthy ) ) + continue; + + if ( trigger.script_noteworthy == "specialty_quickrevive" || trigger.script_noteworthy == "specialty_quickrevive_upgrade" ) + trigger trigger_off(); + } + + foreach ( item in level.powered_items ) + { + if ( isdefined( item.target ) && isdefined( item.target.script_noteworthy ) && item.target.script_noteworthy == "specialty_quickrevive" ) + { + item.power = 1; + item.self_powered = 1; + } + } + + if ( isdefined( level.quick_revive_machine.original_pos ) ) + { + level.quick_revive_default_origin = level.quick_revive_machine.original_pos; + level.quick_revive_default_angles = level.quick_revive_machine.original_angles; + } + + move_org = level.quick_revive_default_origin; + + if ( isdefined( level.quick_revive_linked_ent ) ) + { + move_org = level.quick_revive_linked_ent.origin; + + if ( isdefined( level.quick_revive_linked_ent_offset ) ) + move_org += level.quick_revive_linked_ent_offset; + + level.quick_revive_machine unlink(); + } + + level.quick_revive_machine moveto( move_org + vectorscale( ( 0, 0, 1 ), 40.0 ), 3 ); + direction = level.quick_revive_machine.origin; + direction = ( direction[1], direction[0], 0 ); + + if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 ) + direction = ( direction[0], direction[1] * -1, 0 ); + else if ( direction[0] < 0 ) + direction = ( direction[0] * -1, direction[1], 0 ); + + level.quick_revive_machine vibrate( direction, 10, 0.5, 4 ); + + level.quick_revive_machine waittill( "movedone" ); + + level.quick_revive_machine hide(); + level.quick_revive_machine.ishidden = 1; + + if ( isdefined( level.quick_revive_machine_clip ) ) + { + level.quick_revive_machine_clip connectpaths(); + level.quick_revive_machine_clip trigger_off(); + } + + playfx( level._effect["poltergeist"], level.quick_revive_machine.origin ); + + if ( isdefined( level.quick_revive_trigger ) && isdefined( level.quick_revive_trigger.blocker_model ) ) + level.quick_revive_trigger.blocker_model show(); + + level notify( "revive_hide" ); + } +} + +unhide_quickrevive() +{ + while ( players_are_in_perk_area( level.quick_revive_machine ) ) + wait 0.1; + + if ( isdefined( level.quick_revive_machine_clip ) ) + { + level.quick_revive_machine_clip trigger_on(); + level.quick_revive_machine_clip disconnectpaths(); + } + + if ( isdefined( level.quick_revive_final_pos ) ) + level.quick_revive_machine.origin = level.quick_revive_final_pos; + + playfx( level._effect["poltergeist"], level.quick_revive_machine.origin ); + + if ( isdefined( level.quick_revive_trigger ) && isdefined( level.quick_revive_trigger.blocker_model ) ) + level.quick_revive_trigger.blocker_model hide(); + + level.quick_revive_machine show(); + + if ( isdefined( level.quick_revive_machine.original_pos ) ) + { + level.quick_revive_default_origin = level.quick_revive_machine.original_pos; + level.quick_revive_default_angles = level.quick_revive_machine.original_angles; + } + + direction = level.quick_revive_machine.origin; + direction = ( direction[1], direction[0], 0 ); + + if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 ) + direction = ( direction[0], direction[1] * -1, 0 ); + else if ( direction[0] < 0 ) + direction = ( direction[0] * -1, direction[1], 0 ); + + org = level.quick_revive_default_origin; + + if ( isdefined( level.quick_revive_linked_ent ) ) + { + org = level.quick_revive_linked_ent.origin; + + if ( isdefined( level.quick_revive_linked_ent_offset ) ) + org += level.quick_revive_linked_ent_offset; + } + + if ( !( isdefined( level.quick_revive_linked_ent_moves ) && level.quick_revive_linked_ent_moves ) && level.quick_revive_machine.origin != org ) + { + level.quick_revive_machine moveto( org, 3 ); + level.quick_revive_machine vibrate( direction, 10, 0.5, 2.9 ); + + level.quick_revive_machine waittill( "movedone" ); + + level.quick_revive_machine.angles = level.quick_revive_default_angles; + } + else + { + if ( isdefined( level.quick_revive_linked_ent ) ) + { + org = level.quick_revive_linked_ent.origin; + + if ( isdefined( level.quick_revive_linked_ent_offset ) ) + org += level.quick_revive_linked_ent_offset; + + level.quick_revive_machine.origin = org; + } + + level.quick_revive_machine vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + } + + if ( isdefined( level.quick_revive_linked_ent ) ) + level.quick_revive_machine linkto( level.quick_revive_linked_ent ); + + level.quick_revive_machine.ishidden = 0; +} + +players_are_in_perk_area( perk_machine ) +{ + perk_area_origin = level.quick_revive_default_origin; + + if ( isdefined( perk_machine._linked_ent ) ) + { + perk_area_origin = perk_machine._linked_ent.origin; + + if ( isdefined( perk_machine._linked_ent_offset ) ) + perk_area_origin += perk_machine._linked_ent_offset; + } + + in_area = 0; + players = get_players(); + dist_check = 9216; + + foreach ( player in players ) + { + if ( distancesquared( player.origin, perk_area_origin ) < dist_check ) + return true; + } + + return false; +} + +perk_hostmigration() +{ + level endon( "end_game" ); + level notify( "perk_hostmigration" ); + level endon( "perk_hostmigration" ); + + while ( true ) + { + level waittill( "host_migration_end" ); + + jug = getentarray( "vending_jugg", "targetname" ); + tap = getentarray( "vending_doubletap", "targetname" ); + mar = getentarray( "vending_marathon", "targetname" ); + deadshot = getentarray( "vending_deadshot", "targetname" ); + tomb = getentarray( "vending_tombstone", "targetname" ); + extraweap = getentarray( "vending_additionalprimaryweapon", "targetname" ); + sleight = getentarray( "vending_sleight", "targetname" ); + revive = getentarray( "vending_revive", "targetname" ); + chugabud = getentarray( "vending_chugabud", "targetname" ); + + foreach ( perk in jug ) + { + if ( isdefined( perk.model ) && perk.model == level.machine_assets["juggernog"].on_model ) + { + perk perk_fx( undefined, 1 ); + perk thread perk_fx( "jugger_light" ); + } + } + + foreach ( perk in tap ) + { + if ( isdefined( perk.model ) && perk.model == level.machine_assets["doubletap"].on_model ) + { + perk perk_fx( undefined, 1 ); + perk thread perk_fx( "doubletap_light" ); + } + } + + foreach ( perk in mar ) + { + if ( isdefined( perk.model ) && perk.model == level.machine_assets["marathon"].on_model ) + { + perk perk_fx( undefined, 1 ); + perk thread perk_fx( "marathon_light" ); + } + } + + foreach ( perk in deadshot ) + { + if ( isdefined( perk.model ) && perk.model == level.machine_assets["deadshot"].on_model ) + { + perk perk_fx( undefined, 1 ); + perk thread perk_fx( "deadshot_light" ); + } + } + + foreach ( perk in tomb ) + { + if ( isdefined( perk.model ) && perk.model == level.machine_assets["tombstone"].on_model ) + { + perk perk_fx( undefined, 1 ); + perk thread perk_fx( "tombstone_light" ); + } + } + + foreach ( perk in extraweap ) + { + if ( isdefined( perk.model ) && perk.model == level.machine_assets["additionalprimaryweapon"].on_model ) + { + perk perk_fx( undefined, 1 ); + perk thread perk_fx( "additionalprimaryweapon_light" ); + } + } + + foreach ( perk in sleight ) + { + if ( isdefined( perk.model ) && perk.model == level.machine_assets["speedcola"].on_model ) + { + perk perk_fx( undefined, 1 ); + perk thread perk_fx( "sleight_light" ); + } + } + + foreach ( perk in revive ) + { + if ( isdefined( perk.model ) && perk.model == level.machine_assets["revive"].on_model ) + { + perk perk_fx( undefined, 1 ); + perk thread perk_fx( "revive_light" ); + } + } + + foreach ( perk in chugabud ) + { + if ( isdefined( perk.model ) && perk.model == level.machine_assets["revive"].on_model ) + { + perk perk_fx( undefined, 1 ); + perk thread perk_fx( "tombstone_light" ); + } + } + + if ( level._custom_perks.size > 0 ) + { + a_keys = getarraykeys( level._custom_perks ); + + for ( i = 0; i < a_keys.size; i++ ) + { + if ( isdefined( level._custom_perks[a_keys[i]].host_migration_func ) ) + level thread [[ level._custom_perks[a_keys[i]].host_migration_func ]](); + } + } + } +} + +get_perk_array( ignore_chugabud ) +{ + perk_array = []; + + if ( self hasperk( "specialty_armorvest" ) ) + perk_array[perk_array.size] = "specialty_armorvest"; + + if ( self hasperk( "specialty_deadshot" ) ) + perk_array[perk_array.size] = "specialty_deadshot"; + + if ( self hasperk( "specialty_fastreload" ) ) + perk_array[perk_array.size] = "specialty_fastreload"; + + if ( self hasperk( "specialty_flakjacket" ) ) + perk_array[perk_array.size] = "specialty_flakjacket"; + + if ( self hasperk( "specialty_longersprint" ) ) + perk_array[perk_array.size] = "specialty_longersprint"; + + if ( self hasperk( "specialty_quickrevive" ) ) + perk_array[perk_array.size] = "specialty_quickrevive"; + + if ( self hasperk( "specialty_rof" ) ) + perk_array[perk_array.size] = "specialty_rof"; + + if ( self hasperk( "specialty_additionalprimaryweapon" ) ) + perk_array[perk_array.size] = "specialty_additionalprimaryweapon"; + + if ( !isdefined( ignore_chugabud ) || ignore_chugabud == 0 ) + { + if ( self hasperk( "specialty_finalstand" ) ) + perk_array[perk_array.size] = "specialty_finalstand"; + } + + if ( level._custom_perks.size > 0 ) + { + a_keys = getarraykeys( level._custom_perks ); + + for ( i = 0; i < a_keys.size; i++ ) + { + if ( self hasperk( a_keys[i] ) ) + perk_array[perk_array.size] = a_keys[i]; + } + } + + return perk_array; +} + +initialize_custom_perk_arrays() +{ + if ( !isdefined( level._custom_perks ) ) + level._custom_perks = []; +} + +register_perk_basic_info( str_perk, str_alias, n_perk_cost, str_hint_string, str_perk_bottle_weapon ) +{ + assert( isdefined( str_perk ), "str_perk is a required argument for register_perk_basic_info!" ); + assert( isdefined( str_alias ), "str_alias is a required argument for register_perk_basic_info!" ); + assert( isdefined( n_perk_cost ), "n_perk_cost is a required argument for register_perk_basic_info!" ); + assert( isdefined( str_hint_string ), "str_hint_string is a required argument for register_perk_basic_info!" ); + assert( isdefined( str_perk_bottle_weapon ), "str_perk_bottle_weapon is a required argument for register_perk_basic_info!" ); + _register_undefined_perk( str_perk ); + level._custom_perks[str_perk].alias = str_perk; + level._custom_perks[str_perk].cost = n_perk_cost; + level._custom_perks[str_perk].hint_string = str_hint_string; + level._custom_perks[str_perk].perk_bottle = str_perk_bottle_weapon; +} + +register_perk_machine( str_perk, func_perk_machine_setup, func_perk_machine_thread ) +{ + assert( isdefined( str_perk ), "str_perk is a required argument for register_perk_machine!" ); + assert( isdefined( func_perk_machine_setup ), "func_perk_machine_setup is a required argument for register_perk_machine!" ); + assert( isdefined( func_perk_machine_thread ), "func_perk_machine_thread is a required argument for register_perk_machine!" ); + _register_undefined_perk( str_perk ); + + if ( !isdefined( level._custom_perks[str_perk].perk_machine_set_kvps ) ) + level._custom_perks[str_perk].perk_machine_set_kvps = func_perk_machine_setup; + + if ( !isdefined( level._custom_perks[str_perk].perk_machine_thread ) ) + level._custom_perks[str_perk].perk_machine_thread = func_perk_machine_thread; +} + +register_perk_precache_func( str_perk, func_precache ) +{ + assert( isdefined( str_perk ), "str_perk is a required argument for register_perk_precache_func!" ); + assert( isdefined( func_precache ), "func_precache is a required argument for register_perk_precache_func!" ); + _register_undefined_perk( str_perk ); + + if ( !isdefined( level._custom_perks[str_perk].precache_func ) ) + level._custom_perks[str_perk].precache_func = func_precache; +} + +register_perk_threads( str_perk, func_give_player_perk, func_take_player_perk ) +{ + assert( isdefined( str_perk ), "str_perk is a required argument for register_perk_threads!" ); + assert( isdefined( func_give_player_perk ), "func_give_player_perk is a required argument for register_perk_threads!" ); + _register_undefined_perk( str_perk ); + + if ( !isdefined( level._custom_perks[str_perk].player_thread_give ) ) + level._custom_perks[str_perk].player_thread_give = func_give_player_perk; + + if ( isdefined( func_take_player_perk ) ) + { + if ( !isdefined( level._custom_perks[str_perk].player_thread_take ) ) + level._custom_perks[str_perk].player_thread_take = func_take_player_perk; + } +} + +register_perk_clientfields( str_perk, func_clientfield_register, func_clientfield_set ) +{ + assert( isdefined( str_perk ), "str_perk is a required argument for register_perk_clientfields!" ); + assert( isdefined( func_clientfield_register ), "func_clientfield_register is a required argument for register_perk_clientfields!" ); + assert( isdefined( func_clientfield_set ), "func_clientfield_set is a required argument for register_perk_clientfields!" ); + _register_undefined_perk( str_perk ); + + if ( !isdefined( level._custom_perks[str_perk].clientfield_register ) ) + level._custom_perks[str_perk].clientfield_register = func_clientfield_register; + + if ( !isdefined( level._custom_perks[str_perk].clientfield_set ) ) + level._custom_perks[str_perk].clientfield_set = func_clientfield_set; +} + +register_perk_host_migration_func( str_perk, func_host_migration ) +{ + assert( isdefined( str_perk ), "str_perk is a required argument for register_perk_host_migration_func!" ); + assert( isdefined( func_host_migration ), "func_host_migration is a required argument for register_perk_host_migration_func!" ); + _register_undefined_perk( str_perk ); + + if ( !isdefined( level._custom_perks[str_perk].host_migration_func ) ) + level._custom_perks[str_perk].host_migration_func = func_host_migration; +} + +_register_undefined_perk( str_perk ) +{ + if ( !isdefined( level._custom_perks ) ) + level._custom_perks = []; + + if ( !isdefined( level._custom_perks[str_perk] ) ) + level._custom_perks[str_perk] = spawnstruct(); +} diff --git a/ZM/Core/maps/mp/zombies/_zm_pers_upgrades.gsc b/ZM/Core/maps/mp/zombies/_zm_pers_upgrades.gsc new file mode 100644 index 0000000..29557ea --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_pers_upgrades.gsc @@ -0,0 +1,684 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_pers_upgrades_system; +#include maps\mp\zombies\_zm_pers_upgrades; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_pers_upgrades_functions; + +pers_upgrade_init() +{ + setup_pers_upgrade_boards(); + setup_pers_upgrade_revive(); + setup_pers_upgrade_multi_kill_headshots(); + setup_pers_upgrade_cash_back(); + setup_pers_upgrade_insta_kill(); + setup_pers_upgrade_jugg(); + setup_pers_upgrade_carpenter(); + setup_pers_upgrade_flopper(); + setup_pers_upgrade_perk_lose(); + setup_pers_upgrade_pistol_points(); + setup_pers_upgrade_double_points(); + setup_pers_upgrade_sniper(); + setup_pers_upgrade_box_weapon(); + setup_pers_upgrade_nube(); + level thread pers_upgrades_monitor(); +} + +pers_abilities_init_globals() +{ + self.successful_revives = 0; + self.failed_revives = 0; + self.failed_cash_back_prones = 0; + self.pers["last_headshot_kill_time"] = gettime(); + self.pers["zombies_multikilled"] = 0; + self.non_headshot_kill_counter = 0; + + if ( isdefined( level.pers_upgrade_box_weapon ) && level.pers_upgrade_box_weapon ) + self.pers_box_weapon_awarded = undefined; + + if ( isdefined( level.pers_upgrade_nube ) && level.pers_upgrade_nube ) + self thread pers_nube_unlock_watcher(); +} + +is_pers_system_active() +{ + if ( !is_classic() ) + return false; + + if ( is_pers_system_disabled() ) + return false; + + return true; +} + +is_pers_system_disabled() +{ + if ( level flag_exists( "sq_minigame_active" ) && flag( "sq_minigame_active" ) ) + return true; + + return false; +} + +setup_pers_upgrade_boards() +{ + if ( isdefined( level.pers_upgrade_boards ) && level.pers_upgrade_boards ) + { + level.pers_boarding_round_start = 10; + level.pers_boarding_number_of_boards_required = 74; + pers_register_upgrade( "board", ::pers_upgrade_boards_active, "pers_boarding", level.pers_boarding_number_of_boards_required, 0 ); + } +} + +setup_pers_upgrade_revive() +{ + if ( isdefined( level.pers_upgrade_revive ) && level.pers_upgrade_revive ) + { + level.pers_revivenoperk_number_of_revives_required = 17; + level.pers_revivenoperk_number_of_chances_to_keep = 1; + pers_register_upgrade( "revive", ::pers_upgrade_revive_active, "pers_revivenoperk", level.pers_revivenoperk_number_of_revives_required, 1 ); + } +} + +setup_pers_upgrade_multi_kill_headshots() +{ + if ( isdefined( level.pers_upgrade_multi_kill_headshots ) && level.pers_upgrade_multi_kill_headshots ) + { + level.pers_multikill_headshots_required = 5; + level.pers_multikill_headshots_upgrade_reset_counter = 25; + pers_register_upgrade( "multikill_headshots", ::pers_upgrade_headshot_active, "pers_multikill_headshots", level.pers_multikill_headshots_required, 0 ); + } +} + +setup_pers_upgrade_cash_back() +{ + if ( isdefined( level.pers_upgrade_cash_back ) && level.pers_upgrade_cash_back ) + { + level.pers_cash_back_num_perks_required = 50; + level.pers_cash_back_perk_buys_prone_required = 15; + level.pers_cash_back_failed_prones = 1; + level.pers_cash_back_money_reward = 1000; + pers_register_upgrade( "cash_back", ::pers_upgrade_cash_back_active, "pers_cash_back_bought", level.pers_cash_back_num_perks_required, 0 ); + add_pers_upgrade_stat( "cash_back", "pers_cash_back_prone", level.pers_cash_back_perk_buys_prone_required ); + } +} + +setup_pers_upgrade_insta_kill() +{ + if ( isdefined( level.pers_upgrade_insta_kill ) && level.pers_upgrade_insta_kill ) + { + level.pers_insta_kill_num_required = 2; + level.pers_insta_kill_upgrade_active_time = 18; + pers_register_upgrade( "insta_kill", ::pers_upgrade_insta_kill_active, "pers_insta_kill", level.pers_insta_kill_num_required, 0 ); + } +} + +setup_pers_upgrade_jugg() +{ + if ( isdefined( level.pers_upgrade_jugg ) && level.pers_upgrade_jugg ) + { + level.pers_jugg_hit_and_die_total = 3; + level.pers_jugg_hit_and_die_round_limit = 2; + level.pers_jugg_round_reached_max = 1; + level.pers_jugg_round_lose_target = 15; + level.pers_jugg_upgrade_health_bonus = 90; + pers_register_upgrade( "jugg", ::pers_upgrade_jugg_active, "pers_jugg", level.pers_jugg_hit_and_die_total, 0 ); + } +} + +setup_pers_upgrade_carpenter() +{ + if ( isdefined( level.pers_upgrade_carpenter ) && level.pers_upgrade_carpenter ) + { + level.pers_carpenter_zombie_kills = 1; + pers_register_upgrade( "carpenter", ::pers_upgrade_carpenter_active, "pers_carpenter", level.pers_carpenter_zombie_kills, 0 ); + } +} + +setup_pers_upgrade_flopper() +{ + if ( isdefined( level.pers_upgrade_flopper ) && level.pers_upgrade_flopper ) + { + level.pers_flopper_damage_counter = 6; + level.pers_flopper_counter = 1; + level.pers_flopper_min_fall_damage_activate = 30; + level.pers_flopper_min_fall_damage_deactivate = 50; + pers_register_upgrade( "flopper", ::pers_upgrade_flopper_active, "pers_flopper_counter", level.pers_flopper_counter, 0 ); + } +} + +setup_pers_upgrade_perk_lose() +{ + if ( isdefined( level.pers_upgrade_perk_lose ) && level.pers_upgrade_perk_lose ) + { + level.pers_perk_round_reached_max = 6; + level.pers_perk_lose_counter = 3; + pers_register_upgrade( "perk_lose", ::pers_upgrade_perk_lose_active, "pers_perk_lose_counter", level.pers_perk_lose_counter, 0 ); + } +} + +setup_pers_upgrade_pistol_points() +{ + if ( isdefined( level.pers_upgrade_pistol_points ) && level.pers_upgrade_pistol_points ) + { + level.pers_pistol_points_num_kills_in_game = 8; + level.pers_pistol_points_accuracy = 0.25; + level.pers_pistol_points_counter = 1; + pers_register_upgrade( "pistol_points", ::pers_upgrade_pistol_points_active, "pers_pistol_points_counter", level.pers_pistol_points_counter, 0 ); + } +} + +setup_pers_upgrade_double_points() +{ + if ( isdefined( level.pers_upgrade_double_points ) && level.pers_upgrade_double_points ) + { + level.pers_double_points_score = 2500; + level.pers_double_points_counter = 1; + pers_register_upgrade( "double_points", ::pers_upgrade_double_points_active, "pers_double_points_counter", level.pers_double_points_counter, 0 ); + } +} + +setup_pers_upgrade_sniper() +{ + if ( isdefined( level.pers_upgrade_sniper ) && level.pers_upgrade_sniper ) + { + level.pers_sniper_round_kills_counter = 5; + level.pers_sniper_kill_distance = 800; + level.pers_sniper_counter = 1; + level.pers_sniper_misses = 3; + pers_register_upgrade( "sniper", ::pers_upgrade_sniper_active, "pers_sniper_counter", level.pers_sniper_counter, 0 ); + } +} + +setup_pers_upgrade_box_weapon() +{ + if ( isdefined( level.pers_upgrade_box_weapon ) && level.pers_upgrade_box_weapon ) + { + level.pers_box_weapon_counter = 5; + level.pers_box_weapon_lose_round = 10; + pers_register_upgrade( "box_weapon", ::pers_upgrade_box_weapon_active, "pers_box_weapon_counter", level.pers_box_weapon_counter, 0 ); + } +} + +setup_pers_upgrade_nube() +{ + if ( isdefined( level.pers_upgrade_nube ) && level.pers_upgrade_nube ) + { + level.pers_nube_counter = 1; + level.pers_nube_lose_round = 10; + level.pers_numb_num_kills_unlock = 5; + pers_register_upgrade( "nube", ::pers_upgrade_nube_active, "pers_nube_counter", level.pers_nube_counter, 0 ); + } +} + +pers_upgrade_boards_active() +{ + self endon( "disconnect" ); + + for ( last_round_number = level.round_number; 1; last_round_number = level.round_number ) + { + self waittill( "pers_stats_end_of_round" ); + + if ( level.round_number >= last_round_number ) + { + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( self.rebuild_barrier_reward == 0 ) + { + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_boarding", 0 ); + return; + } + } + } + } +} + +pers_upgrade_revive_active() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "player_failed_revive" ); + + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( self.failed_revives >= level.pers_revivenoperk_number_of_chances_to_keep ) + { + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_revivenoperk", 0 ); + self.failed_revives = 0; + return; + } + } + } +} + +pers_upgrade_headshot_active() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "zombie_death_no_headshot" ); + + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + self.non_headshot_kill_counter++; + + if ( self.non_headshot_kill_counter >= level.pers_multikill_headshots_upgrade_reset_counter ) + { + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_multikill_headshots", 0 ); + self.non_headshot_kill_counter = 0; + return; + } + } + } +} + +pers_upgrade_cash_back_active() +{ + self endon( "disconnect" ); + wait 0.5; +/# + +#/ + wait 0.5; + + while ( true ) + { + self waittill( "cash_back_failed_prone" ); + + wait 0.1; +/# + +#/ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + self.failed_cash_back_prones++; + + if ( self.failed_cash_back_prones >= level.pers_cash_back_failed_prones ) + { + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_cash_back_bought", 0 ); + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_cash_back_prone", 0 ); + self.failed_cash_back_prones = 0; + wait 0.4; +/# + +#/ + return; + } + } + } +} + +pers_upgrade_insta_kill_active() +{ + self endon( "disconnect" ); + wait 0.2; +/# + +#/ + wait 0.2; + + while ( true ) + { + self waittill( "pers_melee_swipe" ); + + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( isdefined( level.pers_melee_swipe_zombie_swiper ) ) + { + e_zombie = level.pers_melee_swipe_zombie_swiper; + + if ( isalive( e_zombie ) && ( isdefined( e_zombie.is_zombie ) && e_zombie.is_zombie ) ) + { + e_zombie.marked_for_insta_upgraded_death = 1; + e_zombie dodamage( e_zombie.health + 666, e_zombie.origin, self, self, "none", "MOD_PISTOL_BULLET", 0, "knife_zm" ); + } + + level.pers_melee_swipe_zombie_swiper = undefined; + } + + break; + } + } + + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_insta_kill", 0 ); + self kill_insta_kill_upgrade_hud_icon(); + wait 0.4; +/# + +#/ +} + +is_insta_kill_upgraded_and_active() +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( self maps\mp\zombies\_zm_powerups::is_insta_kill_active() ) + { + if ( isdefined( self.pers_upgrades_awarded["insta_kill"] ) && self.pers_upgrades_awarded["insta_kill"] ) + return true; + } + } + + return false; +} + +pers_upgrade_jugg_active() +{ + self endon( "disconnect" ); + wait 0.5; +/# + +#/ + wait 0.5; + self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( "jugg_upgrade", 1, 0 ); + + while ( true ) + { + level waittill( "start_of_round" ); + + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( level.round_number == level.pers_jugg_round_lose_target ) + { +/# + +#/ + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_jugg_downgrade_count", 0 ); + wait 0.5; + + if ( self.pers["pers_jugg_downgrade_count"] >= level.pers_jugg_round_reached_max ) + break; + } + } + } + + self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( "jugg_upgrade", 1, 1 ); +/# + +#/ + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_jugg", 0 ); + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_jugg_downgrade_count", 0 ); +} + +pers_upgrade_carpenter_active() +{ + self endon( "disconnect" ); + wait 0.2; +/# + +#/ + wait 0.2; + + level waittill( "carpenter_finished" ); + + for ( self.pers_carpenter_kill = undefined; 1; self.pers_carpenter_kill = undefined ) + { + self waittill( "carpenter_zombie_killed_check_finished" ); + + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( !isdefined( self.pers_carpenter_kill ) ) + break; +/# + +#/ + } + } + + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_carpenter", 0 ); + wait 0.4; +/# + +#/ +} + +persistent_carpenter_ability_check() +{ + if ( isdefined( level.pers_upgrade_carpenter ) && level.pers_upgrade_carpenter ) + { + self endon( "disconnect" ); +/# + +#/ + if ( isdefined( self.pers_upgrades_awarded["carpenter"] ) && self.pers_upgrades_awarded["carpenter"] ) + level.pers_carpenter_boards_active = 1; + + self.pers_carpenter_zombie_check_active = 1; + self.pers_carpenter_kill = undefined; + carpenter_extra_time = 3.0; + carpenter_finished_start_time = undefined; + level.carpenter_finished_start_time = undefined; + + while ( true ) + { + if ( !is_pers_system_disabled() ) + { + if ( !isdefined( level.carpenter_powerup_active ) ) + { + if ( !isdefined( level.carpenter_finished_start_time ) ) + level.carpenter_finished_start_time = gettime(); + + time = gettime(); + dt = ( time - level.carpenter_finished_start_time ) / 1000; + + if ( dt >= carpenter_extra_time ) + break; + } + + if ( isdefined( self.pers_carpenter_kill ) ) + { + if ( isdefined( self.pers_upgrades_awarded["carpenter"] ) && self.pers_upgrades_awarded["carpenter"] ) + break; + else + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_carpenter", 0 ); + } + } + + wait 0.01; + } + + self notify( "carpenter_zombie_killed_check_finished" ); + self.pers_carpenter_zombie_check_active = undefined; + level.pers_carpenter_boards_active = undefined; + } +} + +pers_zombie_death_location_check( attacker, v_pos ) +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( is_player_valid( attacker ) ) + { + if ( isdefined( attacker.pers_carpenter_zombie_check_active ) ) + { + if ( !check_point_in_playable_area( v_pos ) ) + attacker.pers_carpenter_kill = 1; + } + } + } +} + +insta_kill_pers_upgrade_icon() +{ + if ( self.zombie_vars["zombie_powerup_insta_kill_ug_on"] ) + { + self.zombie_vars["zombie_powerup_insta_kill_ug_time"] = level.pers_insta_kill_upgrade_active_time; + return; + } + + self.zombie_vars["zombie_powerup_insta_kill_ug_on"] = 1; + self._show_solo_hud = 1; + self thread time_remaining_pers_upgrade(); +} + +time_remaining_pers_upgrade() +{ + self endon( "disconnect" ); + self endon( "kill_insta_kill_upgrade_hud_icon" ); + + while ( self.zombie_vars["zombie_powerup_insta_kill_ug_time"] >= 0 ) + { + wait 0.05; + self.zombie_vars["zombie_powerup_insta_kill_ug_time"] -= 0.05; + } + + self kill_insta_kill_upgrade_hud_icon(); +} + +kill_insta_kill_upgrade_hud_icon() +{ + self.zombie_vars["zombie_powerup_insta_kill_ug_on"] = 0; + self._show_solo_hud = 0; + self.zombie_vars["zombie_powerup_insta_kill_ug_time"] = level.pers_insta_kill_upgrade_active_time; + self notify( "kill_insta_kill_upgrade_hud_icon" ); +} + +pers_upgrade_flopper_active() +{ + self endon( "disconnect" ); + wait 0.5; +/# + iprintlnbold( "*** WE'VE GOT FLOPPER UPGRADED ***" ); +#/ + wait 0.5; + self thread maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_flopper_watcher(); + + self waittill( "pers_flopper_lost" ); +/# + iprintlnbold( "*** OH NO: Lost FLOPPER Upgrade ***" ); +#/ + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_flopper_counter", 0 ); + self.pers_num_flopper_damages = 0; +} + +pers_upgrade_perk_lose_active() +{ + self endon( "disconnect" ); + wait 0.5; +/# + iprintlnbold( "*** WE'VE GOT PERK LOSE UPGRADED ***" ); +#/ + wait 0.5; + self.pers_perk_lose_start_round = level.round_number; + + self waittill( "pers_perk_lose_lost" ); +/# + iprintlnbold( "*** OH NO: Lost PERK LOSE Upgrade ***" ); +#/ + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_perk_lose_counter", 0 ); +} + +pers_upgrade_pistol_points_active() +{ + self endon( "disconnect" ); + wait 0.5; +/# + iprintlnbold( "*** WE'VE GOT PISTOL POINTS UPGRADED ***" ); +#/ + wait 0.5; + + while ( true ) + { + self waittill( "pers_pistol_points_kill" ); + + accuracy = self maps\mp\zombies\_zm_pers_upgrades_functions::pers_get_player_accuracy(); + + if ( accuracy > level.pers_pistol_points_accuracy ) + break; + } +/# + iprintlnbold( "*** OH NO: Lost PISTOL POINTS Upgrade ***" ); +#/ + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_pistol_points_counter", 0 ); +} + +pers_upgrade_double_points_active() +{ + self endon( "disconnect" ); + wait 0.5; +/# + iprintlnbold( "*** WE'VE GOT DOUBLE POINTS UPGRADED ***" ); +#/ + wait 0.5; + + self waittill( "double_points_lost" ); +/# + iprintlnbold( "*** OH NO: Lost DOUBLE POINTS Upgrade ***" ); +#/ + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_double_points_counter", 0 ); +} + +pers_upgrade_sniper_active() +{ + self endon( "disconnect" ); + wait 0.5; +/# + iprintlnbold( "*** WE'VE GOT SNIPER UPGRADED ***" ); +#/ + wait 0.5; + + self waittill( "pers_sniper_lost" ); +/# + iprintlnbold( "*** OH NO: Lost SNIPER Upgrade ***" ); +#/ + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_sniper_counter", 0 ); +} + +pers_upgrade_box_weapon_active() +{ + self endon( "disconnect" ); + wait 0.5; +/# + iprintlnbold( "*** WE'VE GOT BOX WEAPON UPGRADED ***" ); +#/ + self thread maps\mp\zombies\_zm_pers_upgrades_functions::pers_magic_box_teddy_bear(); + wait 0.5; + self.pers_box_weapon_awarded = 1; + + while ( true ) + { + level waittill( "start_of_round" ); + + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( level.round_number >= level.pers_box_weapon_lose_round ) + break; + } + } +/# + iprintlnbold( "*** OH NO: Lost BOX WEAPON Upgrade ***" ); +#/ + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_box_weapon_counter", 0 ); +} + +pers_upgrade_nube_active() +{ + self endon( "disconnect" ); + wait 0.5; +/# + iprintlnbold( "*** WE'VE GOT NUBE UPGRADED ***" ); +#/ + wait 0.5; + + while ( true ) + { + level waittill( "start_of_round" ); + + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( level.round_number >= level.pers_nube_lose_round ) + break; + } + } +/# + iprintlnbold( "*** OH NO: Lost NUBE Upgrade ***" ); +#/ + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_nube_counter", 0 ); +} diff --git a/ZM/Core/maps/mp/zombies/_zm_pers_upgrades_functions.gsc b/ZM/Core/maps/mp/zombies/_zm_pers_upgrades_functions.gsc new file mode 100644 index 0000000..2693bca --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_pers_upgrades_functions.gsc @@ -0,0 +1,1305 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_pers_upgrades; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_score; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\_visionset_mgr; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_magicbox; + +pers_boards_updated( zbarrier ) +{ + if ( isdefined( level.pers_upgrade_boards ) && level.pers_upgrade_boards ) + { + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( !( isdefined( self.pers_upgrades_awarded["board"] ) && self.pers_upgrades_awarded["board"] ) ) + { + if ( level.round_number >= level.pers_boarding_round_start ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_boarding", 0 ); + + if ( self.pers["pers_boarding"] >= level.pers_boarding_number_of_boards_required ) + { + if ( isdefined( zbarrier ) ) + self.upgrade_fx_origin = zbarrier.origin; + } + } + } + } + } +} + +pers_revive_active() +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( isdefined( self.pers_upgrades_awarded["revive"] ) && self.pers_upgrades_awarded["revive"] ) + return true; + } + + return false; +} + +pers_increment_revive_stat( reviver ) +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + reviver maps\mp\zombies\_zm_stats::increment_client_stat( "pers_revivenoperk", 0 ); +} + +pers_mulit_kill_headshot_active() +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( isdefined( self.pers_upgrades_awarded["multikill_headshots"] ) && self.pers_upgrades_awarded["multikill_headshots"] ) + return true; + } + + return false; +} + +pers_check_for_pers_headshot( time_of_death, zombie ) +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( self.pers["last_headshot_kill_time"] == time_of_death ) + self.pers["zombies_multikilled"]++; + else + self.pers["zombies_multikilled"] = 1; + + self.pers["last_headshot_kill_time"] = time_of_death; + + if ( self.pers["zombies_multikilled"] == 2 ) + { + if ( isdefined( zombie ) ) + self.upgrade_fx_origin = zombie.origin; + + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_multikill_headshots", 0 ); + self.non_headshot_kill_counter = 0; + } + } +} + +cash_back_player_drinks_perk() +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( isdefined( level.pers_upgrade_cash_back ) && level.pers_upgrade_cash_back ) + { + if ( isdefined( self.pers_upgrades_awarded["cash_back"] ) && self.pers_upgrades_awarded["cash_back"] ) + { + self thread cash_back_money_reward(); + self thread cash_back_player_prone_check( 1 ); + } + else if ( self.pers["pers_cash_back_bought"] < level.pers_cash_back_num_perks_required ) + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_cash_back_bought", 0 ); + else + self thread cash_back_player_prone_check( 0 ); + } + } +} + +cash_back_money_reward() +{ + self endon( "death" ); + step = 5; + amount_per_step = int( level.pers_cash_back_money_reward / step ); + + for ( i = 0; i < step; i++ ) + { + self maps\mp\zombies\_zm_score::add_to_player_score( amount_per_step ); + wait 0.2; + } +} + +cash_back_player_prone_check( got_ability ) +{ + self endon( "death" ); + prone_time = 2.5; + start_time = gettime(); + + while ( true ) + { + time = gettime(); + dt = ( time - start_time ) / 1000; + + if ( dt > prone_time ) + break; + + if ( self getstance() == "prone" ) + { + if ( !got_ability ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_cash_back_prone", 0 ); + wait 0.8; + } + + return; + } + + wait 0.01; + } + + if ( got_ability ) + self notify( "cash_back_failed_prone" ); +} + +pers_upgrade_insta_kill_upgrade_check() +{ + if ( isdefined( level.pers_upgrade_insta_kill ) && level.pers_upgrade_insta_kill ) + { + self endon( "death" ); + + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return; + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + e_player = players[i]; + + if ( isdefined( e_player.pers_upgrades_awarded["insta_kill"] ) && e_player.pers_upgrades_awarded["insta_kill"] ) + e_player thread insta_kill_upgraded_player_kill_func( level.pers_insta_kill_upgrade_active_time ); + } + + if ( !( isdefined( self.pers_upgrades_awarded["insta_kill"] ) && self.pers_upgrades_awarded["insta_kill"] ) ) + { + kills_start = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "kills" ); + + self waittill( "insta_kill_over" ); + + kills_end = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "kills" ); + num_killed = kills_end - kills_start; + + if ( num_killed > 0 ) + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_insta_kill", 0 ); + else + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_insta_kill", 0 ); + } + } +} + +insta_kill_upgraded_player_kill_func( active_time ) +{ + self endon( "death" ); + wait 0.25; + + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_disabled() ) + return; + + self thread maps\mp\zombies\_zm_pers_upgrades::insta_kill_pers_upgrade_icon(); + start_time = gettime(); + zombie_collide_radius = 50; + zombie_player_height_test = 100; + + while ( true ) + { + time = gettime(); + dt = ( time - start_time ) / 1000; + + if ( dt > active_time ) + break; + + if ( !maps\mp\zombies\_zm_powerups::is_insta_kill_active() ) + break; + + a_zombies = getaiarray( level.zombie_team ); + e_closest = undefined; + + for ( i = 0; i < a_zombies.size; i++ ) + { + e_zombie = a_zombies[i]; + + if ( isdefined( e_zombie.marked_for_insta_upgraded_death ) ) + continue; + + height_diff = abs( self.origin[2] - e_zombie.origin[2] ); + + if ( height_diff < zombie_player_height_test ) + { + dist = distance2d( self.origin, e_zombie.origin ); + + if ( dist < zombie_collide_radius ) + { + dist_max = dist; + e_closest = e_zombie; + } + } + } + + if ( isdefined( e_closest ) ) + { + e_closest.marked_for_insta_upgraded_death = 1; + e_closest dodamage( e_closest.health + 666, e_closest.origin, self, self, "none", "MOD_PISTOL_BULLET", 0, "knife_zm" ); + } + + wait 0.01; + } +} + +pers_insta_kill_melee_swipe( smeansofdeath, eattacker ) +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( isdefined( smeansofdeath ) && smeansofdeath == "MOD_MELEE" ) + { + if ( isplayer( self ) && maps\mp\zombies\_zm_pers_upgrades::is_insta_kill_upgraded_and_active() ) + { + self notify( "pers_melee_swipe" ); + level.pers_melee_swipe_zombie_swiper = eattacker; + } + } + } +} + +pers_upgrade_jugg_player_death_stat() +{ + if ( isdefined( level.pers_upgrade_jugg ) && level.pers_upgrade_jugg ) + { + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( !( isdefined( self.pers_upgrades_awarded["jugg"] ) && self.pers_upgrades_awarded["jugg"] ) ) + { + if ( level.round_number <= level.pers_jugg_hit_and_die_round_limit ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_jugg", 0 ); +/# + +#/ + } + } + } + } +} + +pers_jugg_active() +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( isdefined( self.pers_upgrades_awarded["jugg"] ) && self.pers_upgrades_awarded["jugg"] ) + return true; + } + + return false; +} + +pers_upgrade_flopper_damage_check( smeansofdeath, idamage ) +{ + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return false; + + if ( !isdefined( smeansofdeath ) || smeansofdeath != "MOD_FALLING" ) + return false; + + if ( !( isdefined( self.pers_upgrades_awarded["flopper"] ) && self.pers_upgrades_awarded["flopper"] ) ) + { + if ( idamage < level.pers_flopper_min_fall_damage_activate ) + return false; + + if ( !isdefined( self.pers_num_flopper_damages ) ) + self.pers_num_flopper_damages = 0; + + self.pers_num_flopper_damages++; + + if ( self.pers_num_flopper_damages >= level.pers_flopper_damage_counter ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_flopper_counter", 0 ); +/# + iprintlnbold( "FLOPPER STAT: INCREMENTED" ); +#/ + } + } + else + { + if ( !( isdefined( self.pers_flopper_active ) && self.pers_flopper_active ) ) + { + if ( idamage >= level.pers_flopper_min_fall_damage_deactivate ) + self notify( "pers_flopper_lost" ); + + return false; + } + + if ( idamage > 0 ) + { + self notify( "activate_pers_flopper_effect" ); + return true; + } + } + + return false; +} + +divetonuke_precache_override_func() +{ + precacheshader( "specialty_divetonuke_zombies" ); + level._effect["divetonuke_light"] = loadfx( "misc/fx_zombie_cola_dtap_on" ); +} + +pers_upgrade_flopper_watcher() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "pers_flopper_lost" ); + + while ( true ) + { + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_disabled() ) + wait 0.01; + else + { + self waittill( "dtp_start" ); + + self.pers_flopper_active = 1; + self thread pers_flopper_dtn(); + + self waittill( "dtp_end" ); + + self.pers_flopper_active = undefined; + } + } +} + +pers_flopper_dtn() +{ + self endon( "disconnect" ); + + self waittill( "activate_pers_flopper_effect" ); + + if ( isdefined( level.pers_flopper_divetonuke_func ) ) + self thread [[ level.pers_flopper_divetonuke_func ]]( self, self.origin ); +} + +pers_flopper_explode( attacker, origin ) +{ + self endon( "disconnect" ); + radius = level.zombie_vars["zombie_perk_divetonuke_radius"]; + min_damage = level.zombie_vars["zombie_perk_divetonuke_min_damage"]; + max_damage = level.zombie_vars["zombie_perk_divetonuke_max_damage"]; + + if ( isdefined( level.pers_flopper_network_optimized ) && level.pers_flopper_network_optimized ) + attacker thread pers_flopper_damage_network_optimized( origin, radius, max_damage, min_damage, "MOD_GRENADE_SPLASH" ); + else + radiusdamage( origin, radius, max_damage, min_damage, attacker, "MOD_GRENADE_SPLASH" ); + + attacker setclientfield( "phd_flopper_effects", 1 ); + maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker ); + wait 1; + maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker ); + attacker setclientfield( "phd_flopper_effects", 0 ); +} + +pers_flopper_damage_network_optimized( origin, radius, max_damage, min_damage, damage_mod ) +{ + self endon( "disconnect" ); + a_zombies = get_array_of_closest( origin, get_round_enemy_array(), undefined, undefined, radius ); + network_stall_counter = 0; + + if ( isdefined( a_zombies ) ) + { + for ( i = 0; i < a_zombies.size; i++ ) + { + e_zombie = a_zombies[i]; + + if ( !isdefined( e_zombie ) || !isalive( e_zombie ) ) + continue; + + dist = distance( e_zombie.origin, origin ); + damage = min_damage + ( max_damage - min_damage ) * ( 1.0 - dist / radius ); + e_zombie dodamage( damage, e_zombie.origin, self, self, 0, damage_mod ); + network_stall_counter--; + + if ( network_stall_counter <= 0 ) + { + wait_network_frame(); + network_stall_counter = randomintrange( 1, 3 ); + } + } + } +} + +pers_upgrade_pistol_points_kill() +{ + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return; + + if ( !isdefined( self.pers_num_zombies_killed_in_game ) ) + self.pers_num_zombies_killed_in_game = 0; + + self.pers_num_zombies_killed_in_game++; + + if ( !( isdefined( self.pers_upgrades_awarded["pistol_points"] ) && self.pers_upgrades_awarded["pistol_points"] ) ) + { + if ( self.pers_num_zombies_killed_in_game >= level.pers_pistol_points_num_kills_in_game ) + { + accuracy = self pers_get_player_accuracy(); + + if ( accuracy <= level.pers_pistol_points_accuracy ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_pistol_points_counter", 0 ); +/# + iprintlnbold( "PISTOL POINTS STAT: INCREMENTED" ); +#/ + } + } + } + else + self notify( "pers_pistol_points_kill" ); +} + +pers_upgrade_pistol_points_set_score( score, event, mod, damage_weapon ) +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( isdefined( self.pers_upgrades_awarded["pistol_points"] ) && self.pers_upgrades_awarded["pistol_points"] ) + { + if ( isdefined( event ) ) + { + if ( event == "rebuild_board" ) + return score; + + if ( isdefined( damage_weapon ) ) + { + weapon_class = getweaponclasszm( damage_weapon ); + + if ( weapon_class != "weapon_pistol" ) + return score; + } + + if ( isdefined( mod ) && isstring( mod ) && mod == "MOD_PISTOL_BULLET" ) + score *= 2; + } + } + } + + return score; +} + +pers_upgrade_double_points_pickup_start() +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return; + + if ( isdefined( self.double_points_ability_check_active ) && self.double_points_ability_check_active ) + { + self.double_points_ability_start_time = gettime(); + return; + } + + self.double_points_ability_check_active = 1; + level.pers_double_points_active = 1; + start_points = self.score; + + if ( isdefined( self.account_value ) ) + bank_account_value_start = self.account_value; + else + bank_account_value_start = 0; + + self.double_points_ability_start_time = gettime(); + last_score = self.score; + ability_lost = 0; + + while ( true ) + { + if ( self.score > last_score ) + ability_lost = 1; + + last_score = self.score; + time = gettime(); + dt = ( time - self.double_points_ability_start_time ) / 1000; + + if ( dt >= 30 ) + break; + + wait 0.1; + } + + level.pers_double_points_active = undefined; + + if ( isdefined( self.account_value ) ) + bank_account_value_end = self.account_value; + else + bank_account_value_end = 0; + + if ( bank_account_value_end < bank_account_value_start ) + { + withdrawal_number = bank_account_value_start - bank_account_value_end; + withdrawal_fees = level.ta_vaultfee * withdrawal_number; + withdrawal_amount = level.bank_deposit_ddl_increment_amount * withdrawal_number; + bank_withdrawal_total = withdrawal_amount - withdrawal_fees; + } + else + bank_withdrawal_total = 0; + + if ( isdefined( self.pers_upgrades_awarded["double_points"] ) && self.pers_upgrades_awarded["double_points"] ) + { + if ( ability_lost == 1 ) + self notify( "double_points_lost" ); + } + else + { + total_points = self.score - start_points; + total_points -= bank_withdrawal_total; + + if ( total_points >= level.pers_double_points_score ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_double_points_counter", 0 ); +/# + iprintlnbold( "PISTOL POINTS STAT: INCREMENTED" ); +#/ + } + } + + self.double_points_ability_check_active = undefined; +} + +pers_upgrade_double_points_set_score( score ) +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( isdefined( self.pers_upgrades_awarded["double_points"] ) && self.pers_upgrades_awarded["double_points"] ) + { + if ( isdefined( level.pers_double_points_active ) && level.pers_double_points_active ) + { +/# + +#/ + score = int( score * 0.5 ); + } + } + } + + return score; +} + +pers_upgrade_double_points_cost( current_cost ) +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( isdefined( self.pers_upgrades_awarded["double_points"] ) && self.pers_upgrades_awarded["double_points"] ) + current_cost = int( current_cost / 2 ); + } + + return current_cost; +} + +is_pers_double_points_active() +{ + if ( isdefined( self.pers_upgrades_awarded["double_points"] ) && self.pers_upgrades_awarded["double_points"] ) + { + if ( isdefined( level.pers_double_points_active ) && level.pers_double_points_active ) + return true; + } + + return false; +} + +pers_upgrade_perk_lose_bought() +{ + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return; + + wait 1; + + if ( !( isdefined( self.pers_upgrades_awarded["perk_lose"] ) && self.pers_upgrades_awarded["perk_lose"] ) ) + { + if ( level.round_number <= level.pers_perk_round_reached_max ) + { + if ( !isdefined( self.bought_all_perks ) ) + { + a_perks = self get_perk_array( 0 ); + + if ( isdefined( a_perks ) && a_perks.size == 4 ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_perk_lose_counter", 0 ); +/# + iprintlnbold( "PERK LOSE STAT: INCREMENTED" ); +#/ + self.bought_all_perks = 1; + } + } + } + } + else if ( isdefined( self.pers_perk_lose_start_round ) ) + { + if ( level.round_number > 1 && self.pers_perk_lose_start_round == level.round_number ) + self notify( "pers_perk_lose_lost" ); + } +} + +pers_upgrade_perk_lose_save() +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( isdefined( self.perks_active ) ) + { + self.a_saved_perks = []; + self.a_saved_perks = arraycopy( self.perks_active ); + } + else + self.a_saved_perks = self get_perk_array( 0 ); + + self.a_saved_primaries = self getweaponslistprimaries(); + self.a_saved_primaries_weapons = []; + index = 0; + + foreach ( weapon in self.a_saved_primaries ) + { + self.a_saved_primaries_weapons[index] = maps\mp\zombies\_zm_weapons::get_player_weapondata( self, weapon ); + index++; + } + } +} + +pers_upgrade_perk_lose_restore() +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + player_has_mule_kick = 0; + discard_quickrevive = 0; + + if ( isdefined( self.a_saved_perks ) && self.a_saved_perks.size >= 2 ) + { + for ( i = 0; i < self.a_saved_perks.size; i++ ) + { + perk = self.a_saved_perks[i]; + + if ( perk == "specialty_quickrevive" ) + discard_quickrevive = 1; + } + + if ( discard_quickrevive == 1 ) + size = self.a_saved_perks.size; + else + size = self.a_saved_perks.size - 1; + + for ( i = 0; i < size; i++ ) + { + perk = self.a_saved_perks[i]; + + if ( discard_quickrevive == 1 && perk == "specialty_quickrevive" ) + continue; + + if ( perk == "specialty_additionalprimaryweapon" ) + player_has_mule_kick = 1; + + if ( self hasperk( perk ) ) + continue; + + self maps\mp\zombies\_zm_perks::give_perk( perk ); + wait_network_frame(); + } + } + + if ( player_has_mule_kick ) + { + a_current_weapons = self getweaponslistprimaries(); + + for ( i = 0; i < self.a_saved_primaries_weapons.size; i++ ) + { + saved_weapon = self.a_saved_primaries_weapons[i]; + found = 0; + + for ( j = 0; j < a_current_weapons.size; j++ ) + { + current_weapon = a_current_weapons[j]; + + if ( current_weapon == saved_weapon["name"] ) + { + found = 1; + break; + } + } + + if ( found == 0 ) + { + self maps\mp\zombies\_zm_weapons::weapondata_give( self.a_saved_primaries_weapons[i] ); + self switchtoweapon( a_current_weapons[0] ); + break; + } + } + } + + self.a_saved_perks = undefined; + self.a_saved_primaries = undefined; + self.a_saved_primaries_weapons = undefined; + } +} + +pers_upgrade_sniper_kill_check( zombie, attacker ) +{ + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return; + + if ( !isdefined( zombie ) || !isdefined( attacker ) || !isdefined( zombie.damageweapon ) ) + return; + + if ( isdefined( zombie.marked_for_insta_upgraded_death ) && zombie.marked_for_insta_upgraded_death ) + return; + + weapon = zombie.damageweapon; + + if ( !is_sniper_weapon( weapon ) ) + return; + + if ( isdefined( self.pers_upgrades_awarded["sniper"] ) && self.pers_upgrades_awarded["sniper"] ) + self thread pers_sniper_score_reward(); + else + { + dist = distance( zombie.origin, attacker.origin ); + + if ( dist < level.pers_sniper_kill_distance ) + return; + + if ( !isdefined( self.pers_sniper_round ) ) + { + self.pers_sniper_round = level.round_number; + self.pers_sniper_kills = 0; + } + else if ( self.pers_sniper_round != level.round_number ) + { + self.pers_sniper_round = level.round_number; + self.pers_sniper_kills = 0; + } + + self.pers_sniper_kills++; +/# + iprintlnbold( "Pers: Long range Sniper Kill" ); +#/ + if ( self.pers_sniper_kills >= level.pers_sniper_round_kills_counter ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_sniper_counter", 0 ); +/# + iprintlnbold( "SNIPER STAT: INCREMENTED" ); +#/ + } + } +} + +pers_sniper_score_reward() +{ + self endon( "disconnect" ); + self endon( "death" ); + + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + total_score = 300; + steps = 10; + score_inc = int( total_score / steps ); + + for ( i = 0; i < steps; i++ ) + { + self maps\mp\zombies\_zm_score::add_to_player_score( score_inc ); + wait 0.25; + } + } +} + +pers_sniper_player_fires( weapon, hit ) +{ + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return; + + if ( isdefined( weapon ) && isdefined( hit ) ) + { + if ( isdefined( self.pers_upgrades_awarded["sniper"] ) && self.pers_upgrades_awarded["sniper"] ) + { + if ( is_sniper_weapon( weapon ) ) + { + if ( !isdefined( self.num_sniper_misses ) ) + self.num_sniper_misses = 0; + + if ( hit ) + self.num_sniper_misses = 0; + else + { + self.num_sniper_misses++; + + if ( self.num_sniper_misses >= level.pers_sniper_misses ) + { + self notify( "pers_sniper_lost" ); + self.num_sniper_misses = 0; + } + } + } + } + } +} + +pers_get_player_accuracy() +{ + accuracy = 1.0; + total_shots = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "total_shots" ); + total_hits = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "hits" ); + + if ( total_shots > 0 ) + accuracy = total_hits / total_shots; + + return accuracy; +} + +is_sniper_weapon( weapon ) +{ + if ( !isdefined( weapon ) ) + return false; + + if ( !isstring( weapon ) ) + return false; + + if ( getsubstr( weapon, 0, 4 ) == "svu_" ) + return true; + + if ( getsubstr( weapon, 0, 6 ) == "dsr50_" ) + return true; + + if ( getsubstr( weapon, 0, 10 ) == "barretm82_" ) + return true; + + return false; +} + +pers_upgrade_box_weapon_used( e_user, e_grabber ) +{ + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return; + + if ( level.round_number >= level.pers_box_weapon_lose_round ) + return; + + if ( isdefined( e_grabber ) && isplayer( e_grabber ) ) + { + if ( is_true( e_grabber.pers_box_weapon_awarded ) ) + return; + + if ( isdefined( e_grabber.pers_upgrades_awarded["box_weapon"] ) && e_grabber.pers_upgrades_awarded["box_weapon"] ) + return; + + e_grabber maps\mp\zombies\_zm_stats::increment_client_stat( "pers_box_weapon_counter", 0 ); +/# + +#/ + } + else if ( isdefined( e_user ) && isplayer( e_user ) ) + { + if ( isdefined( e_user.pers_upgrades_awarded["box_weapon"] ) && e_user.pers_upgrades_awarded["box_weapon"] ) + return; + + e_user maps\mp\zombies\_zm_stats::zero_client_stat( "pers_box_weapon_counter", 0 ); +/# + +#/ + } +} + +pers_magic_box_teddy_bear() +{ + self endon( "disconnect" ); + + if ( isdefined( level.pers_magic_box_firesale ) && level.pers_magic_box_firesale ) + self thread pers_magic_box_firesale(); + + m_bear = spawn( "script_model", self.origin ); + m_bear setmodel( level.chest_joker_model ); + m_bear pers_magic_box_set_teddy_location( level.chest_index ); + self.pers_magix_box_teddy_bear = m_bear; + m_bear setinvisibletoall(); + wait 0.1; + m_bear setvisibletoplayer( self ); + + while ( true ) + { + box = level.chests[level.chest_index]; + + if ( level.round_number >= level.pers_box_weapon_lose_round ) + break; + + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_disabled() ) + { + m_bear setinvisibletoall(); + + while ( true ) + { + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_disabled() ) + break; + + wait 0.01; + } + + m_bear setvisibletoplayer( self ); + } + + if ( flag( "moving_chest_now" ) ) + { + m_bear setinvisibletoall(); + + while ( flag( "moving_chest_now" ) ) + wait 0.1; + + m_bear pers_magic_box_set_teddy_location( level.chest_index ); + wait 0.1; + m_bear setvisibletoplayer( self ); + } + + if ( isdefined( level.sloth_moving_box ) && level.sloth_moving_box ) + { + m_bear setinvisibletoall(); + + while ( isdefined( level.sloth_moving_box ) && level.sloth_moving_box ) + wait 0.1; + + m_bear pers_magic_box_set_teddy_location( level.chest_index ); + wait 0.1; + m_bear setvisibletoplayer( self ); + } + + if ( isdefined( box._box_open ) && box._box_open ) + { + m_bear setinvisibletoall(); + + while ( true ) + { + if ( !( isdefined( box._box_open ) && box._box_open ) ) + break; + + wait 0.01; + } + + m_bear setvisibletoplayer( self ); + } + + wait 0.01; + } + + m_bear delete(); +} + +pers_magic_box_set_teddy_location( box_index ) +{ + box = level.chests[box_index]; + + if ( isdefined( box.zbarrier ) ) + { + v_origin = box.zbarrier.origin; + v_angles = box.zbarrier.angles; + } + else + { + v_origin = box.origin; + v_angles = box.angles; + } + + v_up = anglestoup( v_angles ); + height_offset = 22; + self.origin = v_origin + v_up * height_offset; + dp = vectordot( v_up, ( 0, 0, 1 ) ); + + if ( dp > 0 ) + v_angles_offset = vectorscale( ( 0, 1, 0 ), 90.0 ); + else + v_angles_offset = ( 0, -90, -10 ); + + self.angles = v_angles + v_angles_offset; +} + +pers_treasure_chest_choosespecialweapon( player ) +{ + rval = randomfloat( 1 ); + + if ( !isdefined( player.pers_magic_box_weapon_count ) ) + player.pers_magic_box_weapon_count = 0; + + if ( player.pers_magic_box_weapon_count < 2 && ( player.pers_magic_box_weapon_count == 0 || rval < 0.6 ) ) + { +/# + +#/ + player.pers_magic_box_weapon_count++; + + if ( isdefined( level.pers_treasure_chest_get_weapons_array_func ) ) + [[ level.pers_treasure_chest_get_weapons_array_func ]](); + else + pers_treasure_chest_get_weapons_array(); + + keys = array_randomize( level.pers_box_weapons ); +/# + forced_weapon = getdvar( _hash_45ED7744 ); + + if ( forced_weapon != "" && isdefined( level.zombie_weapons[forced_weapon] ) ) + arrayinsert( keys, forced_weapon, 0 ); +#/ + pap_triggers = getentarray( "specialty_weapupgrade", "script_noteworthy" ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( maps\mp\zombies\_zm_magicbox::treasure_chest_canplayerreceiveweapon( player, keys[i], pap_triggers ) ) + return keys[i]; + } + + return keys[0]; + } + else + { +/# + +#/ + player.pers_magic_box_weapon_count = 0; + weapon = maps\mp\zombies\_zm_magicbox::treasure_chest_chooseweightedrandomweapon( player ); + return weapon; + } +} + +pers_treasure_chest_get_weapons_array() +{ + if ( !isdefined( level.pers_box_weapons ) ) + { + level.pers_box_weapons = []; + level.pers_box_weapons[level.pers_box_weapons.size] = "ray_gun_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "galil_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "knife_ballistic_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "srm1216_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "hamr_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "tar21_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "raygun_mark2_zm"; + } +} + +pers_magic_box_firesale() +{ + self endon( "disconnect" ); + wait 1; + + while ( true ) + { + if ( level.zombie_vars["zombie_powerup_fire_sale_on"] == 1 ) + { + wait 5; + + for ( i = 0; i < level.chests.size; i++ ) + { + if ( i == level.chest_index ) + continue; + + box = level.chests[i]; + self thread box_firesale_teddy_bear( box, i ); + } + + while ( true ) + { + if ( level.zombie_vars["zombie_powerup_fire_sale_on"] == 0 ) + break; + + wait 0.01; + } + } + + if ( level.round_number >= level.pers_box_weapon_lose_round ) + return; + + wait 0.5; + } +} + +box_firesale_teddy_bear( box, box_index ) +{ + self endon( "disconnect" ); + m_bear = spawn( "script_model", self.origin ); + m_bear setmodel( level.chest_joker_model ); + m_bear pers_magic_box_set_teddy_location( box_index ); + m_bear setinvisibletoall(); + wait 0.1; + m_bear setvisibletoplayer( self ); + + while ( true ) + { + if ( isdefined( box._box_open ) && box._box_open ) + { + m_bear setinvisibletoall(); + + while ( true ) + { + if ( !( isdefined( box._box_open ) && box._box_open ) ) + break; + + wait 0.01; + } + + m_bear setvisibletoplayer( self ); + } + + if ( level.zombie_vars["zombie_powerup_fire_sale_on"] == 0 ) + break; + + wait 0.01; + } + + m_bear delete(); +} + +pers_nube_unlock_watcher() +{ + self endon( "disconnect" ); + + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return; + + self.pers_num_nube_kills = 0; + + if ( self.pers["pers_max_round_reached"] >= level.pers_nube_lose_round ) + return; + + num_melee_kills = self.pers["melee_kills"]; + num_headshot_kills = self.pers["headshots"]; + num_boards = self.pers["boards"]; + + while ( true ) + { + self waittill( "pers_player_zombie_kill" ); + + if ( self.pers["pers_max_round_reached"] >= level.pers_nube_lose_round ) + { + self.pers_num_nube_kills = 0; + return; + } + + if ( num_melee_kills == self.pers["melee_kills"] && num_headshot_kills == self.pers["headshots"] && num_boards == self.pers["boards"] ) + self.pers_num_nube_kills++; + else + { + self.pers_num_nube_kills = 0; + num_melee_kills = self.pers["melee_kills"]; + num_headshot_kills = self.pers["headshots"]; + num_boards = self.pers["boards"]; + } + } +} + +pers_nube_player_ranked_as_nube( player ) +{ + if ( player.pers_num_nube_kills >= level.pers_numb_num_kills_unlock ) + return true; + + return false; +} + +pers_nube_weapon_upgrade_check( player, str_weapon ) +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( getsubstr( str_weapon, 0, 11 ) == "rottweil72_" ) + { + if ( !( isdefined( player.pers_upgrades_awarded["nube"] ) && player.pers_upgrades_awarded["nube"] ) ) + { + if ( pers_nube_player_ranked_as_nube( player ) ) + { + player maps\mp\zombies\_zm_stats::increment_client_stat( "pers_nube_counter", 0 ); + str_weapon = "ray_gun_zm"; + fx_org = player.origin; + v_dir = anglestoforward( player getplayerangles() ); + v_up = anglestoup( player getplayerangles() ); + fx_org = fx_org + v_dir * 5 + v_up * 12; + player.upgrade_fx_origin = fx_org; + } + } + else + str_weapon = "ray_gun_zm"; + } + } + + return str_weapon; +} + +pers_nube_weapon_ammo_check( player, str_weapon ) +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( getsubstr( str_weapon, 0, 11 ) == "rottweil72_" ) + { + if ( isdefined( player.pers_upgrades_awarded["nube"] ) && player.pers_upgrades_awarded["nube"] ) + { + if ( player hasweapon( "ray_gun_zm" ) ) + str_weapon = "ray_gun_zm"; + + if ( player hasweapon( "ray_gun_upgraded_zm" ) ) + str_weapon = "ray_gun_upgraded_zm"; + } + } + } + + return str_weapon; +} + +pers_nube_should_we_give_raygun( player_has_weapon, player, weapon_buy ) +{ + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return player_has_weapon; + + if ( player.pers["pers_max_round_reached"] >= level.pers_nube_lose_round ) + return player_has_weapon; + + if ( !pers_nube_player_ranked_as_nube( player ) ) + return player_has_weapon; + + if ( isdefined( weapon_buy ) && getsubstr( weapon_buy, 0, 11 ) != "rottweil72_" ) + return player_has_weapon; + + player_has_olympia = player hasweapon( "rottweil72_zm" ) || player hasweapon( "rottweil72_upgraded_zm" ); + player_has_raygun = player hasweapon( "ray_gun_zm" ) || player hasweapon( "ray_gun_upgraded_zm" ); + + if ( player_has_olympia && player_has_raygun ) + player_has_weapon = 1; + else if ( pers_nube_player_ranked_as_nube( player ) && player_has_olympia && player_has_raygun == 0 ) + player_has_weapon = 0; + else if ( isdefined( player.pers_upgrades_awarded["nube"] ) && player.pers_upgrades_awarded["nube"] && player_has_raygun ) + player_has_weapon = 1; + + return player_has_weapon; +} + +pers_nube_ammo_hint_string( player, weapon ) +{ + ammo_cost = 0; + + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return false; + + if ( getsubstr( weapon, 0, 11 ) == "rottweil72_" ) + ammo_cost = pers_nube_ammo_cost( player, ammo_cost ); + + if ( !ammo_cost ) + return false; + + self.stub.hint_string = &"ZOMBIE_WEAPONAMMOONLY"; + self sethintstring( self.stub.hint_string, ammo_cost ); + return true; +} + +pers_nube_ammo_cost( player, ammo_cost ) +{ + if ( player hasweapon( "ray_gun_zm" ) ) + ammo_cost = 250; + + if ( player hasweapon( "ray_gun_upgraded_zm" ) ) + ammo_cost = 4500; + + return ammo_cost; +} + +pers_nube_override_ammo_cost( player, weapon, ammo_cost ) +{ + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return ammo_cost; + + if ( getsubstr( weapon, 0, 11 ) == "rottweil72_" ) + ammo_cost = pers_nube_ammo_cost( player, ammo_cost ); + + return ammo_cost; +} diff --git a/ZM/Core/maps/mp/zombies/_zm_pers_upgrades_system.gsc b/ZM/Core/maps/mp/zombies/_zm_pers_upgrades_system.gsc new file mode 100644 index 0000000..50bbe85 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_pers_upgrades_system.gsc @@ -0,0 +1,235 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_stats; + +pers_register_upgrade( name, upgrade_active_func, stat_name, stat_desired_value, game_end_reset_if_not_achieved ) +{ + if ( !isdefined( level.pers_upgrades ) ) + { + level.pers_upgrades = []; + level.pers_upgrades_keys = []; + } + + if ( isdefined( level.pers_upgrades[name] ) ) + assert( 0, "A persistent upgrade is already registered for name: " + name ); + + level.pers_upgrades_keys[level.pers_upgrades_keys.size] = name; + level.pers_upgrades[name] = spawnstruct(); + level.pers_upgrades[name].stat_names = []; + level.pers_upgrades[name].stat_desired_values = []; + level.pers_upgrades[name].upgrade_active_func = upgrade_active_func; + level.pers_upgrades[name].game_end_reset_if_not_achieved = game_end_reset_if_not_achieved; + add_pers_upgrade_stat( name, stat_name, stat_desired_value ); +/# + if ( isdefined( level.devgui_add_ability ) ) + [[ level.devgui_add_ability ]]( name, upgrade_active_func, stat_name, stat_desired_value, game_end_reset_if_not_achieved ); +#/ +} + +add_pers_upgrade_stat( name, stat_name, stat_desired_value ) +{ + if ( !isdefined( level.pers_upgrades[name] ) ) + assert( 0, name + " - Persistent upgrade is not registered yet." ); + + stats_size = level.pers_upgrades[name].stat_names.size; + level.pers_upgrades[name].stat_names[stats_size] = stat_name; + level.pers_upgrades[name].stat_desired_values[stats_size] = stat_desired_value; +} + +pers_upgrades_monitor() +{ + if ( !isdefined( level.pers_upgrades ) ) + return; + + if ( !is_classic() ) + return; + + level thread wait_for_game_end(); + + while ( true ) + { + waittillframeend; + players = getplayers(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + { + player = players[player_index]; + + if ( is_player_valid( player ) && isdefined( player.stats_this_frame ) ) + { + if ( !player.stats_this_frame.size && !( isdefined( player.pers_upgrade_force_test ) && player.pers_upgrade_force_test ) ) + continue; + + for ( pers_upgrade_index = 0; pers_upgrade_index < level.pers_upgrades_keys.size; pers_upgrade_index++ ) + { + pers_upgrade = level.pers_upgrades[level.pers_upgrades_keys[pers_upgrade_index]]; + is_stat_updated = player is_any_pers_upgrade_stat_updated( pers_upgrade ); + + if ( is_stat_updated ) + { + should_award = player check_pers_upgrade( pers_upgrade ); + + if ( should_award ) + { + if ( isdefined( player.pers_upgrades_awarded[level.pers_upgrades_keys[pers_upgrade_index]] ) && player.pers_upgrades_awarded[level.pers_upgrades_keys[pers_upgrade_index]] ) + continue; + + player.pers_upgrades_awarded[level.pers_upgrades_keys[pers_upgrade_index]] = 1; + + if ( flag( "initial_blackscreen_passed" ) && !is_true( player.is_hotjoining ) ) + { + type = "upgrade"; + + if ( isdefined( level.snd_pers_upgrade_force_type ) ) + type = level.snd_pers_upgrade_force_type; + + player playsoundtoplayer( "evt_player_upgrade", player ); + + if ( isdefined( level.pers_upgrade_vo_spoken ) && level.pers_upgrade_vo_spoken ) + player delay_thread( 1, maps\mp\zombies\_zm_audio::create_and_play_dialog, "general", type, undefined, level.snd_pers_upgrade_force_variant ); + else + player delay_thread( 1, ::play_vox_to_player, "general", type, level.snd_pers_upgrade_force_variant ); + + if ( isdefined( player.upgrade_fx_origin ) ) + { + fx_org = player.upgrade_fx_origin; + player.upgrade_fx_origin = undefined; + } + else + { + fx_org = player.origin; + v_dir = anglestoforward( player getplayerangles() ); + v_up = anglestoup( player getplayerangles() ); + fx_org = fx_org + v_dir * 30 + v_up * 12; + } + + playfx( level._effect["upgrade_aquired"], fx_org ); + level thread maps\mp\zombies\_zm::disable_end_game_intermission( 1.5 ); + } +/# + player iprintlnbold( "Upgraded!" ); +#/ + if ( isdefined( pers_upgrade.upgrade_active_func ) ) + player thread [[ pers_upgrade.upgrade_active_func ]](); + + continue; + } + + if ( isdefined( player.pers_upgrades_awarded[level.pers_upgrades_keys[pers_upgrade_index]] ) && player.pers_upgrades_awarded[level.pers_upgrades_keys[pers_upgrade_index]] ) + { + if ( flag( "initial_blackscreen_passed" ) && !is_true( player.is_hotjoining ) ) + player playsoundtoplayer( "evt_player_downgrade", player ); +/# + player iprintlnbold( "Downgraded!" ); +#/ + } + + player.pers_upgrades_awarded[level.pers_upgrades_keys[pers_upgrade_index]] = 0; + } + } + + player.pers_upgrade_force_test = 0; + player.stats_this_frame = []; + } + } + + wait 0.05; + } +} + +wait_for_game_end() +{ + if ( !is_classic() ) + return; + + level waittill( "end_game" ); + + players = getplayers(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + { + player = players[player_index]; + + for ( index = 0; index < level.pers_upgrades_keys.size; index++ ) + { + str_name = level.pers_upgrades_keys[index]; + game_end_reset_if_not_achieved = level.pers_upgrades[str_name].game_end_reset_if_not_achieved; + + if ( isdefined( game_end_reset_if_not_achieved ) && game_end_reset_if_not_achieved == 1 ) + { + if ( !( isdefined( player.pers_upgrades_awarded[str_name] ) && player.pers_upgrades_awarded[str_name] ) ) + { + for ( stat_index = 0; stat_index < level.pers_upgrades[str_name].stat_names.size; stat_index++ ) + player maps\mp\zombies\_zm_stats::zero_client_stat( level.pers_upgrades[str_name].stat_names[stat_index], 0 ); + } + } + } + } +} + +check_pers_upgrade( pers_upgrade ) +{ + should_award = 1; + + for ( i = 0; i < pers_upgrade.stat_names.size; i++ ) + { + stat_name = pers_upgrade.stat_names[i]; + should_award = self check_pers_upgrade_stat( stat_name, pers_upgrade.stat_desired_values[i] ); + + if ( !should_award ) + break; + } + + return should_award; +} + +is_any_pers_upgrade_stat_updated( pers_upgrade ) +{ + if ( isdefined( self.pers_upgrade_force_test ) && self.pers_upgrade_force_test ) + return 1; + + result = 0; + + for ( i = 0; i < pers_upgrade.stat_names.size; i++ ) + { + stat_name = pers_upgrade.stat_names[i]; + + if ( isdefined( self.stats_this_frame[stat_name] ) ) + { + result = 1; + break; + } + } + + return result; +} + +check_pers_upgrade_stat( stat_name, stat_desired_value ) +{ + should_award = 1; + current_stat_value = self maps\mp\zombies\_zm_stats::get_global_stat( stat_name ); + + if ( current_stat_value < stat_desired_value ) + should_award = 0; + + return should_award; +} + +round_end() +{ + if ( !is_classic() ) + return; + + self notify( "pers_stats_end_of_round" ); + + if ( isdefined( self.pers["pers_max_round_reached"] ) ) + { + if ( level.round_number > self.pers["pers_max_round_reached"] ) + self maps\mp\zombies\_zm_stats::set_client_stat( "pers_max_round_reached", level.round_number, 0 ); + } +} diff --git a/ZM/Core/maps/mp/zombies/_zm_playerhealth.gsc b/ZM/Core/maps/mp/zombies/_zm_playerhealth.gsc new file mode 100644 index 0000000..4c7796f --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_playerhealth.gsc @@ -0,0 +1,572 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_perks; + +init() +{ + if ( !isdefined( level.script ) ) + level.script = tolower( getdvar( "mapname" ) ); + + precacheshader( "overlay_low_health" ); + level.global_damage_func_ads = ::empty_kill_func; + level.global_damage_func = ::empty_kill_func; + level.difficultytype[0] = "easy"; + level.difficultytype[1] = "normal"; + level.difficultytype[2] = "hardened"; + level.difficultytype[3] = "veteran"; + level.difficultystring["easy"] = &"GAMESKILL_EASY"; + level.difficultystring["normal"] = &"GAMESKILL_NORMAL"; + level.difficultystring["hardened"] = &"GAMESKILL_HARDENED"; + level.difficultystring["veteran"] = &"GAMESKILL_VETERAN"; +/# + thread playerhealthdebug(); +#/ + level.gameskill = 1; + + switch ( level.gameskill ) + { + case 0: + setdvar( "currentDifficulty", "easy" ); + break; + case 1: + setdvar( "currentDifficulty", "normal" ); + break; + case 2: + setdvar( "currentDifficulty", "hardened" ); + break; + case 3: + setdvar( "currentDifficulty", "veteran" ); + break; + } + + logstring( "difficulty: " + level.gameskill ); + level.player_deathinvulnerabletime = 1700; + level.longregentime = 5000; + level.healthoverlaycutoff = 0.2; + level.invultime_preshield = 0.35; + level.invultime_onshield = 0.5; + level.invultime_postshield = 0.3; + level.playerhealth_regularregendelay = 2400; + level.worthydamageratio = 0.1; + setdvar( "player_meleeDamageMultiplier", 0.4 ); + onplayerconnect_callback( ::onplayerconnect ); +} + +onplayerconnect() +{ + self thread onplayerspawned(); +} + +onplayerspawned() +{ + for (;;) + { + self waittill( "spawned_player" ); + + self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); + + if ( level.createfx_enabled ) + continue; + + self notify( "noHealthOverlay" ); + self thread playerhealthregen(); + } +} + +playerhurtcheck() +{ + self endon( "noHealthOverlay" ); + self.hurtagain = 0; + + for (;;) + { + self waittill( "damage", amount, attacker, dir, point, mod ); + + if ( isdefined( attacker ) && isplayer( attacker ) && attacker.team == self.team ) + continue; + + self.hurtagain = 1; + self.damagepoint = point; + self.damageattacker = attacker; + } +} + +playerhealthregen() +{ + self notify( "playerHealthRegen" ); + self endon( "playerHealthRegen" ); + self endon( "death" ); + self endon( "disconnect" ); + + if ( !isdefined( self.flag ) ) + { + self.flag = []; + self.flags_lock = []; + } + + if ( !isdefined( self.flag["player_has_red_flashing_overlay"] ) ) + { + self player_flag_init( "player_has_red_flashing_overlay" ); + self player_flag_init( "player_is_invulnerable" ); + } + + self player_flag_clear( "player_has_red_flashing_overlay" ); + self player_flag_clear( "player_is_invulnerable" ); + self thread healthoverlay(); + oldratio = 1; + health_add = 0; + regenrate = 0.1; + veryhurt = 0; + playerjustgotredflashing = 0; + invultime = 0; + hurttime = 0; + newhealth = 0; + lastinvulratio = 1; + self thread playerhurtcheck(); + + if ( !isdefined( self.veryhurt ) ) + self.veryhurt = 0; + + self.bolthit = 0; + + if ( getdvar( _hash_FCECE67E ) == "" ) + setdvar( "scr_playerInvulTimeScale", 1.0 ); + + playerinvultimescale = getdvarfloat( _hash_FCECE67E ); + + for (;;) + { + wait 0.05; + waittillframeend; + + if ( self.health == self.maxhealth ) + { + if ( self player_flag( "player_has_red_flashing_overlay" ) ) + player_flag_clear( "player_has_red_flashing_overlay" ); + + lastinvulratio = 1; + playerjustgotredflashing = 0; + veryhurt = 0; + continue; + } + + if ( self.health <= 0 ) + { +/# + showhitlog(); +#/ + return; + } + + wasveryhurt = veryhurt; + health_ratio = self.health / self.maxhealth; + + if ( health_ratio <= level.healthoverlaycutoff ) + { + veryhurt = 1; + + if ( !wasveryhurt ) + { + hurttime = gettime(); + self startfadingblur( 3.6, 2 ); + self player_flag_set( "player_has_red_flashing_overlay" ); + playerjustgotredflashing = 1; + } + } + + if ( self.hurtagain ) + { + hurttime = gettime(); + self.hurtagain = 0; + } + + if ( health_ratio >= oldratio ) + { + if ( gettime() - hurttime < level.playerhealth_regularregendelay ) + continue; + + if ( veryhurt ) + { + self.veryhurt = 1; + newhealth = health_ratio; + + if ( gettime() > hurttime + level.longregentime ) + newhealth += regenrate; + } + else + { + newhealth = 1; + self.veryhurt = 0; + } + + if ( newhealth > 1.0 ) + newhealth = 1.0; + + if ( newhealth <= 0 ) + return; +/# + if ( newhealth > health_ratio ) + logregen( newhealth ); +#/ + self setnormalhealth( newhealth ); + oldratio = self.health / self.maxhealth; + continue; + } + + invulworthyhealthdrop = lastinvulratio - health_ratio > level.worthydamageratio; + + if ( self.health <= 1 ) + { + self setnormalhealth( 2 / self.maxhealth ); + invulworthyhealthdrop = 1; +/# + if ( !isdefined( level.player_deathinvulnerabletimeout ) ) + level.player_deathinvulnerabletimeout = 0; + + if ( level.player_deathinvulnerabletimeout < gettime() ) + level.player_deathinvulnerabletimeout = gettime() + getdvarint( _hash_4E44E32D ); +#/ + } + + oldratio = self.health / self.maxhealth; + level notify( "hit_again" ); + health_add = 0; + hurttime = gettime(); + self startfadingblur( 3, 0.8 ); + + if ( !invulworthyhealthdrop || playerinvultimescale <= 0.0 ) + { +/# + loghit( self.health, 0 ); +#/ + continue; + } + + if ( self player_flag( "player_is_invulnerable" ) ) + continue; + + self player_flag_set( "player_is_invulnerable" ); + level notify( "player_becoming_invulnerable" ); + + if ( playerjustgotredflashing ) + { + invultime = level.invultime_onshield; + playerjustgotredflashing = 0; + } + else if ( veryhurt ) + invultime = level.invultime_postshield; + else + invultime = level.invultime_preshield; + + invultime *= playerinvultimescale; +/# + loghit( self.health, invultime ); +#/ + lastinvulratio = self.health / self.maxhealth; + self thread playerinvul( invultime ); + } +} + +playerinvul( timer ) +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( timer > 0 ) + { +/# + level.playerinvultimeend = gettime() + timer * 1000; +#/ + wait( timer ); + } + + self player_flag_clear( "player_is_invulnerable" ); +} + +healthoverlay() +{ + self endon( "disconnect" ); + self endon( "noHealthOverlay" ); + + if ( !isdefined( self._health_overlay ) ) + { + self._health_overlay = newclienthudelem( self ); + self._health_overlay.x = 0; + self._health_overlay.y = 0; + self._health_overlay setshader( "overlay_low_health", 640, 480 ); + self._health_overlay.alignx = "left"; + self._health_overlay.aligny = "top"; + self._health_overlay.horzalign = "fullscreen"; + self._health_overlay.vertalign = "fullscreen"; + self._health_overlay.alpha = 0; + } + + overlay = self._health_overlay; + self thread healthoverlay_remove( overlay ); + self thread watchhideredflashingoverlay( overlay ); + pulsetime = 0.8; + + for (;;) + { + if ( overlay.alpha > 0 ) + overlay fadeovertime( 0.5 ); + + overlay.alpha = 0; + self player_flag_wait( "player_has_red_flashing_overlay" ); + self redflashingoverlay( overlay ); + } +} + +fadefunc( overlay, severity, mult, hud_scaleonly ) +{ + pulsetime = 0.8; + scalemin = 0.5; + fadeintime = pulsetime * 0.1; + stayfulltime = pulsetime * ( 0.1 + severity * 0.2 ); + fadeouthalftime = pulsetime * ( 0.1 + severity * 0.1 ); + fadeoutfulltime = pulsetime * 0.3; + remainingtime = pulsetime - fadeintime - stayfulltime - fadeouthalftime - fadeoutfulltime; + assert( remainingtime >= -0.001 ); + + if ( remainingtime < 0 ) + remainingtime = 0; + + halfalpha = 0.8 + severity * 0.1; + leastalpha = 0.5 + severity * 0.3; + overlay fadeovertime( fadeintime ); + overlay.alpha = mult * 1.0; + wait( fadeintime + stayfulltime ); + overlay fadeovertime( fadeouthalftime ); + overlay.alpha = mult * halfalpha; + wait( fadeouthalftime ); + overlay fadeovertime( fadeoutfulltime ); + overlay.alpha = mult * leastalpha; + wait( fadeoutfulltime ); + wait( remainingtime ); +} + +watchhideredflashingoverlay( overlay ) +{ + self endon( "death_or_disconnect" ); + + while ( isdefined( overlay ) ) + { + self waittill( "clear_red_flashing_overlay" ); + + self player_flag_clear( "player_has_red_flashing_overlay" ); + overlay fadeovertime( 0.05 ); + overlay.alpha = 0; + setclientsysstate( "levelNotify", "rfo3", self ); + self notify( "hit_again" ); + } +} + +redflashingoverlay( overlay ) +{ + self endon( "hit_again" ); + self endon( "damage" ); + self endon( "death" ); + self endon( "disconnect" ); + self endon( "clear_red_flashing_overlay" ); + self.stopflashingbadlytime = gettime() + level.longregentime; + + if ( !( isdefined( self.is_in_process_of_zombify ) && self.is_in_process_of_zombify ) && !( isdefined( self.is_zombie ) && self.is_zombie ) ) + { + fadefunc( overlay, 1, 1, 0 ); + + while ( gettime() < self.stopflashingbadlytime && isalive( self ) && ( !( isdefined( self.is_in_process_of_zombify ) && self.is_in_process_of_zombify ) && !( isdefined( self.is_zombie ) && self.is_zombie ) ) ) + fadefunc( overlay, 0.9, 1, 0 ); + + if ( !( isdefined( self.is_in_process_of_zombify ) && self.is_in_process_of_zombify ) && !( isdefined( self.is_zombie ) && self.is_zombie ) ) + { + if ( isalive( self ) ) + fadefunc( overlay, 0.65, 0.8, 0 ); + + fadefunc( overlay, 0, 0.6, 1 ); + } + } + + overlay fadeovertime( 0.5 ); + overlay.alpha = 0; + self player_flag_clear( "player_has_red_flashing_overlay" ); + setclientsysstate( "levelNotify", "rfo3", self ); + wait 0.5; + self notify( "hit_again" ); +} + +healthoverlay_remove( overlay ) +{ + self endon( "disconnect" ); + self waittill_any( "noHealthOverlay", "death" ); + overlay fadeovertime( 3.5 ); + overlay.alpha = 0; +} + +empty_kill_func( type, loc, point, attacker, amount ) +{ + +} + +loghit( newhealth, invultime ) +{ +/# + +#/ +} + +logregen( newhealth ) +{ +/# + +#/ +} + +showhitlog() +{ +/# + +#/ +} + +playerhealthdebug() +{ +/# + if ( getdvar( "scr_health_debug" ) == "" ) + setdvar( "scr_health_debug", "0" ); + + waittillframeend; + + while ( true ) + { + while ( true ) + { + if ( getdvar( "scr_health_debug" ) != "0" ) + break; + + wait 0.5; + } + + thread printhealthdebug(); + + while ( true ) + { + if ( getdvar( "scr_health_debug" ) == "0" ) + break; + + wait 0.5; + } + + level notify( "stop_printing_grenade_timers" ); + destroyhealthdebug(); + } +#/ +} + +printhealthdebug() +{ +/# + level notify( "stop_printing_health_bars" ); + level endon( "stop_printing_health_bars" ); + x = 40; + y = 40; + level.healthbarhudelems = []; + level.healthbarkeys[0] = "Health"; + level.healthbarkeys[1] = "No Hit Time"; + level.healthbarkeys[2] = "No Die Time"; + + if ( !isdefined( level.playerinvultimeend ) ) + level.playerinvultimeend = 0; + + if ( !isdefined( level.player_deathinvulnerabletimeout ) ) + level.player_deathinvulnerabletimeout = 0; + + for ( i = 0; i < level.healthbarkeys.size; i++ ) + { + key = level.healthbarkeys[i]; + textelem = newhudelem(); + textelem.x = x; + textelem.y = y; + textelem.alignx = "left"; + textelem.aligny = "top"; + textelem.horzalign = "fullscreen"; + textelem.vertalign = "fullscreen"; + textelem settext( key ); + bgbar = newhudelem(); + bgbar.x = x + 79; + bgbar.y = y + 1; + bgbar.alignx = "left"; + bgbar.aligny = "top"; + bgbar.horzalign = "fullscreen"; + bgbar.vertalign = "fullscreen"; + bgbar.maxwidth = 3; + bgbar setshader( "white", bgbar.maxwidth, 10 ); + bgbar.color = vectorscale( ( 1, 1, 1 ), 0.5 ); + bar = newhudelem(); + bar.x = x + 80; + bar.y = y + 2; + bar.alignx = "left"; + bar.aligny = "top"; + bar.horzalign = "fullscreen"; + bar.vertalign = "fullscreen"; + bar setshader( "black", 1, 8 ); + textelem.bar = bar; + textelem.bgbar = bgbar; + textelem.key = key; + y += 10; + level.healthbarhudelems[key] = textelem; + } + + flag_wait( "start_zombie_round_logic" ); + + while ( true ) + { + wait 0.05; + players = get_players(); + + for ( i = 0; i < level.healthbarkeys.size && players.size > 0; i++ ) + { + key = level.healthbarkeys[i]; + player = players[0]; + width = 0; + + if ( i == 0 ) + width = player.health / player.maxhealth * 300; + else if ( i == 1 ) + width = ( level.playerinvultimeend - gettime() ) / 1000 * 40; + else if ( i == 2 ) + width = ( level.player_deathinvulnerabletimeout - gettime() ) / 1000 * 40; + + width = int( max( width, 1 ) ); + width = int( min( width, 300 ) ); + bar = level.healthbarhudelems[key].bar; + bar setshader( "black", width, 8 ); + bgbar = level.healthbarhudelems[key].bgbar; + + if ( width + 2 > bgbar.maxwidth ) + { + bgbar.maxwidth = width + 2; + bgbar setshader( "white", bgbar.maxwidth, 10 ); + bgbar.color = vectorscale( ( 1, 1, 1 ), 0.5 ); + } + } + } +#/ +} + +destroyhealthdebug() +{ +/# + if ( !isdefined( level.healthbarhudelems ) ) + return; + + for ( i = 0; i < level.healthbarkeys.size; i++ ) + { + level.healthbarhudelems[level.healthbarkeys[i]].bgbar destroy(); + level.healthbarhudelems[level.healthbarkeys[i]].bar destroy(); + level.healthbarhudelems[level.healthbarkeys[i]] destroy(); + } +#/ +} diff --git a/ZM/Core/maps/mp/zombies/_zm_power.gsc b/ZM/Core/maps/mp/zombies/_zm_power.gsc new file mode 100644 index 0000000..22b8d8c --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_power.gsc @@ -0,0 +1,676 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\_demo; +#include maps\mp\zombies\_zm_ai_basic; + +init() +{ + if ( !isdefined( level.powered_items ) ) + level.powered_items = []; + + if ( !isdefined( level.local_power ) ) + level.local_power = []; + + thread standard_powered_items(); +/# + thread debug_powered_items(); +#/ +} + +debug_powered_items() +{ +/# + while ( true ) + { + if ( getdvarint( _hash_EB512CB7 ) ) + { + if ( isdefined( level.local_power ) ) + { + foreach ( localpower in level.local_power ) + circle( localpower.origin, localpower.radius, ( 1, 0, 0 ), 0, 1, 1 ); + } + } + + wait 0.05; + } +#/ +} + +watch_global_power() +{ + while ( true ) + { + flag_wait( "power_on" ); + level thread set_global_power( 1 ); + flag_waitopen( "power_on" ); + level thread set_global_power( 0 ); + } +} + +standard_powered_items() +{ + flag_wait( "start_zombie_round_logic" ); + vending_triggers = getentarray( "zombie_vending", "targetname" ); + + foreach ( trigger in vending_triggers ) + { + if ( trigger.script_noteworthy == "specialty_weapupgrade" ) + continue; + + powered_on = maps\mp\zombies\_zm_perks::get_perk_machine_start_state( trigger.script_noteworthy ); + add_powered_item( ::perk_power_on, ::perk_power_off, ::perk_range, ::cost_low_if_local, 0, powered_on, trigger ); + } + + pack_a_punch = getentarray( "specialty_weapupgrade", "script_noteworthy" ); + + foreach ( trigger in pack_a_punch ) + { + powered_on = maps\mp\zombies\_zm_perks::get_perk_machine_start_state( trigger.script_noteworthy ); + trigger.powered = add_powered_item( ::pap_power_on, ::pap_power_off, ::pap_range, ::cost_low_if_local, 0, powered_on, trigger ); + } + + zombie_doors = getentarray( "zombie_door", "targetname" ); + + foreach ( door in zombie_doors ) + { + if ( isdefined( door.script_noteworthy ) && door.script_noteworthy == "electric_door" ) + { + add_powered_item( ::door_power_on, ::door_power_off, ::door_range, ::cost_door, 0, 0, door ); + continue; + } + + if ( isdefined( door.script_noteworthy ) && door.script_noteworthy == "local_electric_door" ) + { + power_sources = 0; + + if ( !( isdefined( level.power_local_doors_globally ) && level.power_local_doors_globally ) ) + power_sources = 1; + + add_powered_item( ::door_local_power_on, ::door_local_power_off, ::door_range, ::cost_door, power_sources, 0, door ); + } + } + + thread watch_global_power(); +} + +add_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target ) +{ + powered = spawnstruct(); + powered.power_on_func = power_on_func; + powered.power_off_func = power_off_func; + powered.range_func = range_func; + powered.power_sources = power_sources; + powered.self_powered = self_powered; + powered.target = target; + powered.cost_func = cost_func; + powered.power = self_powered; + powered.powered_count = self_powered; + powered.depowered_count = 0; + + if ( !isdefined( level.powered_items ) ) + level.powered_items = []; + + level.powered_items[level.powered_items.size] = powered; + return powered; +} + +remove_powered_item( powered ) +{ + arrayremovevalue( level.powered_items, powered, 0 ); +} + +add_temp_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target ) +{ + powered = add_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target ); + + if ( isdefined( level.local_power ) ) + { + foreach ( localpower in level.local_power ) + { + if ( powered [[ powered.range_func ]]( 1, localpower.origin, localpower.radius ) ) + { + powered change_power( 1, localpower.origin, localpower.radius ); + + if ( !isdefined( localpower.added_list ) ) + localpower.added_list = []; + + localpower.added_list[localpower.added_list.size] = powered; + } + } + } + + thread watch_temp_powered_item( powered ); + return powered; +} + +watch_temp_powered_item( powered ) +{ + powered.target waittill( "death" ); + + remove_powered_item( powered ); + + if ( isdefined( level.local_power ) ) + { + foreach ( localpower in level.local_power ) + { + if ( isdefined( localpower.added_list ) ) + arrayremovevalue( localpower.added_list, powered, 0 ); + + if ( isdefined( localpower.enabled_list ) ) + arrayremovevalue( localpower.enabled_list, powered, 0 ); + } + } +} + +change_power_in_radius( delta, origin, radius ) +{ + changed_list = []; + + for ( i = 0; i < level.powered_items.size; i++ ) + { + powered = level.powered_items[i]; + + if ( powered.power_sources != 2 ) + { + if ( powered [[ powered.range_func ]]( delta, origin, radius ) ) + { + powered change_power( delta, origin, radius ); + changed_list[changed_list.size] = powered; + } + } + } + + return changed_list; +} + +change_power( delta, origin, radius ) +{ + if ( delta > 0 ) + { + if ( !self.power ) + { + self.power = 1; + self [[ self.power_on_func ]]( origin, radius ); + } + + self.powered_count++; + } + else if ( delta < 0 ) + { + if ( self.power ) + { + self.power = 0; + self [[ self.power_off_func ]]( origin, radius ); + } + + self.depowered_count++; + } +} + +revert_power_to_list( delta, origin, radius, powered_list ) +{ + for ( i = 0; i < powered_list.size; i++ ) + { + powered = powered_list[i]; + powered revert_power( delta, origin, radius ); + } +} + +revert_power( delta, origin, radius, powered_list ) +{ + if ( delta > 0 ) + { + self.depowered_count--; + assert( self.depowered_count >= 0, "Depower underflow in power system" ); + + if ( self.depowered_count == 0 && self.powered_count > 0 && !self.power ) + { + self.power = 1; + self [[ self.power_on_func ]]( origin, radius ); + } + } + else if ( delta < 0 ) + { + self.powered_count--; + assert( self.powered_count >= 0, "Repower underflow in power system" ); + + if ( self.powered_count == 0 && self.power ) + { + self.power = 0; + self [[ self.power_off_func ]]( origin, radius ); + } + } +} + +add_local_power( origin, radius ) +{ + localpower = spawnstruct(); +/# + println( "ZM POWER: local power on at " + origin + " radius " + radius + "\\n" ); +#/ + localpower.origin = origin; + localpower.radius = radius; + localpower.enabled_list = change_power_in_radius( 1, origin, radius ); + + if ( !isdefined( level.local_power ) ) + level.local_power = []; + + level.local_power[level.local_power.size] = localpower; + return localpower; +} + +move_local_power( localpower, origin ) +{ + changed_list = []; + + for ( i = 0; i < level.powered_items.size; i++ ) + { + powered = level.powered_items[i]; + + if ( powered.power_sources == 2 ) + continue; + + waspowered = isinarray( localpower.enabled_list, powered ); + ispowered = powered [[ powered.range_func ]]( 1, origin, localpower.radius ); + + if ( ispowered && !waspowered ) + { + powered change_power( 1, origin, localpower.radius ); + localpower.enabled_list[localpower.enabled_list.size] = powered; + continue; + } + + if ( !ispowered && waspowered ) + { + powered revert_power( -1, localpower.origin, localpower.radius, localpower.enabled_list ); + arrayremovevalue( localpower.enabled_list, powered, 0 ); + } + } + + localpower.origin = origin; + return localpower; +} + +end_local_power( localpower ) +{ +/# + println( "ZM POWER: local power off at " + localpower.origin + " radius " + localpower.radius + "\\n" ); +#/ + if ( isdefined( localpower.enabled_list ) ) + revert_power_to_list( -1, localpower.origin, localpower.radius, localpower.enabled_list ); + + localpower.enabled_list = undefined; + + if ( isdefined( localpower.added_list ) ) + revert_power_to_list( -1, localpower.origin, localpower.radius, localpower.added_list ); + + localpower.added_list = undefined; + arrayremovevalue( level.local_power, localpower, 0 ); +} + +has_local_power( origin ) +{ + if ( isdefined( level.local_power ) ) + { + foreach ( localpower in level.local_power ) + { + if ( distancesquared( localpower.origin, origin ) < localpower.radius * localpower.radius ) + return true; + } + } + + return false; +} + +get_powered_item_cost() +{ + if ( !( isdefined( self.power ) && self.power ) ) + return 0; + + if ( isdefined( level._power_global ) && level._power_global && !( self.power_sources == 1 ) ) + return 0; + + cost = [[ self.cost_func ]](); + power_sources = self.powered_count; + + if ( power_sources < 1 ) + power_sources = 1; + + return cost / power_sources; +} + +get_local_power_cost( localpower ) +{ + cost = 0; + + if ( isdefined( localpower ) && isdefined( localpower.enabled_list ) ) + { + foreach ( powered in localpower.enabled_list ) + cost += powered get_powered_item_cost(); + } + + if ( isdefined( localpower ) && isdefined( localpower.added_list ) ) + { + foreach ( powered in localpower.added_list ) + cost += powered get_powered_item_cost(); + } + + return cost; +} + +set_global_power( on_off ) +{ + maps\mp\_demo::bookmark( "zm_power", gettime(), undefined, undefined, 1 ); + level._power_global = on_off; + + for ( i = 0; i < level.powered_items.size; i++ ) + { + powered = level.powered_items[i]; + + if ( isdefined( powered.target ) && powered.power_sources != 1 ) + { + powered global_power( on_off ); + wait_network_frame(); + } + } +} + +global_power( on_off ) +{ + if ( on_off ) + { +/# + println( "ZM POWER: global power on\\n" ); +#/ + if ( !self.power ) + { + self.power = 1; + self [[ self.power_on_func ]](); + } + + self.powered_count++; + } + else + { +/# + println( "ZM POWER: global power off\\n" ); +#/ + self.powered_count--; + assert( self.powered_count >= 0, "Repower underflow in power system" ); + + if ( self.powered_count == 0 && self.power ) + { + self.power = 0; + self [[ self.power_off_func ]](); + } + } +} + +never_power_on( origin, radius ) +{ + +} + +never_power_off( origin, radius ) +{ + +} + +cost_negligible() +{ + if ( isdefined( self.one_time_cost ) ) + { + cost = self.one_time_cost; + self.one_time_cost = undefined; + return cost; + } + + return 0; +} + +cost_low_if_local() +{ + if ( isdefined( self.one_time_cost ) ) + { + cost = self.one_time_cost; + self.one_time_cost = undefined; + return cost; + } + + if ( isdefined( level._power_global ) && level._power_global ) + return 0; + + if ( isdefined( self.self_powered ) && self.self_powered ) + return 0; + + return 1; +} + +cost_high() +{ + if ( isdefined( self.one_time_cost ) ) + { + cost = self.one_time_cost; + self.one_time_cost = undefined; + return cost; + } + + return 10; +} + +door_range( delta, origin, radius ) +{ + if ( delta < 0 ) + return false; + + if ( distancesquared( self.target.origin, origin ) < radius * radius ) + return true; + + return false; +} + +door_power_on( origin, radius ) +{ +/# + println( "^1ZM POWER: door on\\n" ); +#/ + self.target.power_on = 1; + self.target notify( "power_on" ); +} + +door_power_off( origin, radius ) +{ +/# + println( "^1ZM POWER: door off\\n" ); +#/ + self.target notify( "power_off" ); + self.target.power_on = 0; +} + +door_local_power_on( origin, radius ) +{ +/# + println( "^1ZM POWER: door on (local)\\n" ); +#/ + self.target.local_power_on = 1; + self.target notify( "local_power_on" ); +} + +door_local_power_off( origin, radius ) +{ +/# + println( "^1ZM POWER: door off (local)\\n" ); +#/ + self.target notify( "local_power_off" ); + self.target.local_power_on = 0; +} + +cost_door() +{ + if ( isdefined( self.target.power_cost ) ) + { + if ( !isdefined( self.one_time_cost ) ) + self.one_time_cost = 0; + + self.one_time_cost += self.target.power_cost; + self.target.power_cost = 0; + } + + if ( isdefined( self.one_time_cost ) ) + { + cost = self.one_time_cost; + self.one_time_cost = undefined; + return cost; + } + + return 0; +} + +zombie_range( delta, origin, radius ) +{ + if ( delta > 0 ) + return false; + + self.zombies = get_array_of_closest( origin, get_round_enemy_array(), undefined, undefined, radius ); + + if ( !isdefined( self.zombies ) ) + return false; + + self.power = 1; + return true; +} + +zombie_power_off( origin, radius ) +{ +/# + println( "^1ZM POWER: zombies off\\n" ); +#/ + for ( i = 0; i < self.zombies.size; i++ ) + { + self.zombies[i] thread stun_zombie(); + wait 0.05; + } +} + +stun_zombie() +{ + self endon( "death" ); + self notify( "stun_zombie" ); + self endon( "stun_zombie" ); + + if ( self.health <= 0 ) + { +/# + iprintln( "trying to stun a dead zombie" ); +#/ + return; + } + + if ( isdefined( self.ignore_inert ) && self.ignore_inert ) + return; + + if ( isdefined( self.stun_zombie ) ) + { + self thread [[ self.stun_zombie ]](); + return; + } + + self thread maps\mp\zombies\_zm_ai_basic::start_inert(); +} + +perk_range( delta, origin, radius ) +{ + if ( isdefined( self.target ) ) + { + perkorigin = self.target.origin; + + if ( isdefined( self.target.trigger_off ) && self.target.trigger_off ) + perkorigin = self.target.realorigin; + else if ( isdefined( self.target.disabled ) && self.target.disabled ) + perkorigin += vectorscale( ( 0, 0, 1 ), 10000.0 ); + + if ( distancesquared( perkorigin, origin ) < radius * radius ) + return true; + } + + return false; +} + +perk_power_on( origin, radius ) +{ +/# + println( "^1ZM POWER: perk " + self.target maps\mp\zombies\_zm_perks::getvendingmachinenotify() + " on\\n" ); +#/ + level notify( self.target maps\mp\zombies\_zm_perks::getvendingmachinenotify() + "_on" ); + maps\mp\zombies\_zm_perks::perk_unpause( self.target.script_noteworthy ); +} + +perk_power_off( origin, radius ) +{ + notify_name = self.target maps\mp\zombies\_zm_perks::getvendingmachinenotify(); + + if ( isdefined( notify_name ) && notify_name == "revive" ) + { + if ( level flag_exists( "solo_game" ) && flag( "solo_game" ) ) + return; + } +/# + println( "^1ZM POWER: perk " + self.target.script_noteworthy + " off\\n" ); +#/ + self.target notify( "death" ); + self.target thread maps\mp\zombies\_zm_perks::vending_trigger_think(); + + if ( isdefined( self.target.perk_hum ) ) + self.target.perk_hum delete(); + + maps\mp\zombies\_zm_perks::perk_pause( self.target.script_noteworthy ); + level notify( self.target maps\mp\zombies\_zm_perks::getvendingmachinenotify() + "_off" ); +} + +pap_range( delta, origin, radius ) +{ + if ( isdefined( self.target ) ) + { + paporigin = self.target.origin; + + if ( isdefined( self.target.trigger_off ) && self.target.trigger_off ) + paporigin = self.target.realorigin; + else if ( isdefined( self.target.disabled ) && self.target.disabled ) + paporigin += vectorscale( ( 0, 0, 1 ), 10000.0 ); + + if ( distancesquared( paporigin, origin ) < radius * radius ) + return true; + } + + return false; +} + +pap_power_on( origin, radius ) +{ +/# + println( "^1ZM POWER: PaP on\\n" ); +#/ + level notify( "Pack_A_Punch_on" ); +} + +pap_power_off( origin, radius ) +{ +/# + println( "^1ZM POWER: PaP off\\n" ); +#/ + level notify( "Pack_A_Punch_off" ); + self.target notify( "death" ); + self.target thread maps\mp\zombies\_zm_perks::vending_weapon_upgrade(); +} + +pap_is_on() +{ + if ( isdefined( self.powered ) ) + return self.powered.power; + + return 0; +} diff --git a/ZM/Core/maps/mp/zombies/_zm_powerups.gsc b/ZM/Core/maps/mp/zombies/_zm_powerups.gsc new file mode 100644 index 0000000..54d2c8a --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_powerups.gsc @@ -0,0 +1,2785 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\_demo; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_pers_upgrades; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\zombies\_zm_blockers; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_score; +#include maps\mp\animscripts\zm_death; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_melee_weapon; + +init() +{ + precacheshader( "specialty_doublepoints_zombies" ); + precacheshader( "specialty_instakill_zombies" ); + precacheshader( "specialty_firesale_zombies" ); + precacheshader( "zom_icon_bonfire" ); + precacheshader( "zom_icon_minigun" ); + precacheshader( "black" ); + set_zombie_var( "zombie_insta_kill", 0, undefined, undefined, 1 ); + set_zombie_var( "zombie_point_scalar", 1, undefined, undefined, 1 ); + set_zombie_var( "zombie_drop_item", 0 ); + set_zombie_var( "zombie_timer_offset", 350 ); + set_zombie_var( "zombie_timer_offset_interval", 30 ); + set_zombie_var( "zombie_powerup_fire_sale_on", 0 ); + set_zombie_var( "zombie_powerup_fire_sale_time", 30 ); + set_zombie_var( "zombie_powerup_bonfire_sale_on", 0 ); + set_zombie_var( "zombie_powerup_bonfire_sale_time", 30 ); + set_zombie_var( "zombie_powerup_insta_kill_on", 0, undefined, undefined, 1 ); + set_zombie_var( "zombie_powerup_insta_kill_time", 30, undefined, undefined, 1 ); + set_zombie_var( "zombie_powerup_point_doubler_on", 0, undefined, undefined, 1 ); + set_zombie_var( "zombie_powerup_point_doubler_time", 30, undefined, undefined, 1 ); + set_zombie_var( "zombie_powerup_drop_increment", 2000 ); + set_zombie_var( "zombie_powerup_drop_max_per_round", 4 ); + onplayerconnect_callback( ::init_player_zombie_vars ); + level._effect["powerup_on"] = loadfx( "misc/fx_zombie_powerup_on" ); + level._effect["powerup_off"] = loadfx( "misc/fx_zombie_powerup_off" ); + level._effect["powerup_grabbed"] = loadfx( "misc/fx_zombie_powerup_grab" ); + level._effect["powerup_grabbed_wave"] = loadfx( "misc/fx_zombie_powerup_wave" ); + + if ( isdefined( level.using_zombie_powerups ) && level.using_zombie_powerups ) + { + level._effect["powerup_on_red"] = loadfx( "misc/fx_zombie_powerup_on_red" ); + level._effect["powerup_grabbed_red"] = loadfx( "misc/fx_zombie_powerup_red_grab" ); + level._effect["powerup_grabbed_wave_red"] = loadfx( "misc/fx_zombie_powerup_red_wave" ); + } + + level._effect["powerup_on_solo"] = loadfx( "misc/fx_zombie_powerup_solo_on" ); + level._effect["powerup_grabbed_solo"] = loadfx( "misc/fx_zombie_powerup_solo_grab" ); + level._effect["powerup_grabbed_wave_solo"] = loadfx( "misc/fx_zombie_powerup_solo_wave" ); + level._effect["powerup_on_caution"] = loadfx( "misc/fx_zombie_powerup_caution_on" ); + level._effect["powerup_grabbed_caution"] = loadfx( "misc/fx_zombie_powerup_caution_grab" ); + level._effect["powerup_grabbed_wave_caution"] = loadfx( "misc/fx_zombie_powerup_caution_wave" ); + init_powerups(); + + if ( !level.enable_magic ) + return; + + thread watch_for_drop(); + thread setup_firesale_audio(); + thread setup_bonfiresale_audio(); + level.use_new_carpenter_func = ::start_carpenter_new; + level.board_repair_distance_squared = 562500; +} + +init_powerups() +{ + flag_init( "zombie_drop_powerups" ); + + if ( isdefined( level.enable_magic ) && level.enable_magic ) + flag_set( "zombie_drop_powerups" ); + + if ( !isdefined( level.active_powerups ) ) + level.active_powerups = []; + + if ( !isdefined( level.zombie_powerup_array ) ) + level.zombie_powerup_array = []; + + if ( !isdefined( level.zombie_special_drop_array ) ) + level.zombie_special_drop_array = []; + + add_zombie_powerup( "nuke", "zombie_bomb", &"ZOMBIE_POWERUP_NUKE", ::func_should_always_drop, 0, 0, 0, "misc/fx_zombie_mini_nuke_hotness" ); + add_zombie_powerup( "insta_kill", "zombie_skull", &"ZOMBIE_POWERUP_INSTA_KILL", ::func_should_always_drop, 0, 0, 0, undefined, "powerup_instant_kill", "zombie_powerup_insta_kill_time", "zombie_powerup_insta_kill_on" ); + add_zombie_powerup( "full_ammo", "zombie_ammocan", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_always_drop, 0, 0, 0 ); + add_zombie_powerup( "double_points", "zombie_x2_icon", &"ZOMBIE_POWERUP_DOUBLE_POINTS", ::func_should_always_drop, 0, 0, 0, undefined, "powerup_double_points", "zombie_powerup_point_doubler_time", "zombie_powerup_point_doubler_on" ); + add_zombie_powerup( "carpenter", "zombie_carpenter", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_drop_carpenter, 0, 0, 0 ); + add_zombie_powerup( "fire_sale", "zombie_firesale", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_drop_fire_sale, 0, 0, 0, undefined, "powerup_fire_sale", "zombie_powerup_fire_sale_time", "zombie_powerup_fire_sale_on" ); + add_zombie_powerup( "bonfire_sale", "zombie_pickup_bonfire", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_never_drop, 0, 0, 0, undefined, "powerup_bon_fire", "zombie_powerup_bonfire_sale_time", "zombie_powerup_bonfire_sale_on" ); + add_zombie_powerup( "minigun", "zombie_pickup_minigun", &"ZOMBIE_POWERUP_MINIGUN", ::func_should_drop_minigun, 1, 0, 0, undefined, "powerup_mini_gun", "zombie_powerup_minigun_time", "zombie_powerup_minigun_on" ); + add_zombie_powerup( "free_perk", "zombie_pickup_perk_bottle", &"ZOMBIE_POWERUP_FREE_PERK", ::func_should_never_drop, 0, 0, 0 ); + add_zombie_powerup( "tesla", "zombie_pickup_minigun", &"ZOMBIE_POWERUP_MINIGUN", ::func_should_never_drop, 1, 0, 0, undefined, "powerup_tesla", "zombie_powerup_tesla_time", "zombie_powerup_tesla_on" ); + add_zombie_powerup( "random_weapon", "zombie_pickup_minigun", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_never_drop, 1, 0, 0 ); + add_zombie_powerup( "bonus_points_player", "zombie_z_money_icon", &"ZOMBIE_POWERUP_BONUS_POINTS", ::func_should_never_drop, 1, 0, 0 ); + add_zombie_powerup( "bonus_points_team", "zombie_z_money_icon", &"ZOMBIE_POWERUP_BONUS_POINTS", ::func_should_never_drop, 0, 0, 0 ); + add_zombie_powerup( "lose_points_team", "zombie_z_money_icon", &"ZOMBIE_POWERUP_LOSE_POINTS", ::func_should_never_drop, 0, 0, 1 ); + add_zombie_powerup( "lose_perk", "zombie_pickup_perk_bottle", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_never_drop, 0, 0, 1 ); + add_zombie_powerup( "empty_clip", "zombie_ammocan", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_never_drop, 0, 0, 1 ); + add_zombie_powerup( "insta_kill_ug", "zombie_skull", &"ZOMBIE_POWERUP_INSTA_KILL", ::func_should_never_drop, 1, 0, 0, undefined, "powerup_instant_kill_ug", "zombie_powerup_insta_kill_ug_time", "zombie_powerup_insta_kill_ug_on", 5000 ); + + if ( isdefined( level.level_specific_init_powerups ) ) + [[ level.level_specific_init_powerups ]](); + + randomize_powerups(); + level.zombie_powerup_index = 0; + randomize_powerups(); + level.rare_powerups_active = 0; + level.firesale_vox_firstime = 0; + level thread powerup_hud_monitor(); + + if ( isdefined( level.quantum_bomb_register_result_func ) ) + { + [[ level.quantum_bomb_register_result_func ]]( "random_powerup", ::quantum_bomb_random_powerup_result, 5, level.quantum_bomb_in_playable_area_validation_func ); + [[ level.quantum_bomb_register_result_func ]]( "random_zombie_grab_powerup", ::quantum_bomb_random_zombie_grab_powerup_result, 5, level.quantum_bomb_in_playable_area_validation_func ); + [[ level.quantum_bomb_register_result_func ]]( "random_weapon_powerup", ::quantum_bomb_random_weapon_powerup_result, 60, level.quantum_bomb_in_playable_area_validation_func ); + [[ level.quantum_bomb_register_result_func ]]( "random_bonus_or_lose_points_powerup", ::quantum_bomb_random_bonus_or_lose_points_powerup_result, 25, level.quantum_bomb_in_playable_area_validation_func ); + } + + registerclientfield( "scriptmover", "powerup_fx", 1000, 3, "int" ); +} + +init_player_zombie_vars() +{ + self.zombie_vars["zombie_powerup_minigun_on"] = 0; + self.zombie_vars["zombie_powerup_minigun_time"] = 0; + self.zombie_vars["zombie_powerup_tesla_on"] = 0; + self.zombie_vars["zombie_powerup_tesla_time"] = 0; + self.zombie_vars["zombie_powerup_insta_kill_ug_on"] = 0; + self.zombie_vars["zombie_powerup_insta_kill_ug_time"] = 18; +} + +set_weapon_ignore_max_ammo( str_weapon ) +{ + if ( !isdefined( level.zombie_weapons_no_max_ammo ) ) + level.zombie_weapons_no_max_ammo = []; + + level.zombie_weapons_no_max_ammo[str_weapon] = 1; +} + +powerup_hud_monitor() +{ + flag_wait( "start_zombie_round_logic" ); + + if ( isdefined( level.current_game_module ) && level.current_game_module == 2 ) + return; + + flashing_timers = []; + flashing_values = []; + flashing_timer = 10; + flashing_delta_time = 0; + flashing_is_on = 0; + flashing_value = 3; + flashing_min_timer = 0.15; + + while ( flashing_timer >= flashing_min_timer ) + { + if ( flashing_timer < 5 ) + flashing_delta_time = 0.1; + else + flashing_delta_time = 0.2; + + if ( flashing_is_on ) + { + flashing_timer = flashing_timer - flashing_delta_time - 0.05; + flashing_value = 2; + } + else + { + flashing_timer -= flashing_delta_time; + flashing_value = 3; + } + + flashing_timers[flashing_timers.size] = flashing_timer; + flashing_values[flashing_values.size] = flashing_value; + flashing_is_on = !flashing_is_on; + } + + client_fields = []; + powerup_keys = getarraykeys( level.zombie_powerups ); + + for ( powerup_key_index = 0; powerup_key_index < powerup_keys.size; powerup_key_index++ ) + { + if ( isdefined( level.zombie_powerups[powerup_keys[powerup_key_index]].client_field_name ) ) + { + powerup_name = powerup_keys[powerup_key_index]; + client_fields[powerup_name] = spawnstruct(); + client_fields[powerup_name].client_field_name = level.zombie_powerups[powerup_name].client_field_name; + client_fields[powerup_name].solo = level.zombie_powerups[powerup_name].solo; + client_fields[powerup_name].time_name = level.zombie_powerups[powerup_name].time_name; + client_fields[powerup_name].on_name = level.zombie_powerups[powerup_name].on_name; + } + } + + client_field_keys = getarraykeys( client_fields ); + + while ( true ) + { + wait 0.05; + waittillframeend; + players = get_players(); + + for ( playerindex = 0; playerindex < players.size; playerindex++ ) + { + for ( client_field_key_index = 0; client_field_key_index < client_field_keys.size; client_field_key_index++ ) + { + player = players[playerindex]; +/# + if ( isdefined( player.pers["isBot"] ) && player.pers["isBot"] ) + continue; +#/ + if ( isdefined( level.powerup_player_valid ) ) + { + if ( ![[ level.powerup_player_valid ]]( player ) ) + continue; + } + + client_field_name = client_fields[client_field_keys[client_field_key_index]].client_field_name; + time_name = client_fields[client_field_keys[client_field_key_index]].time_name; + on_name = client_fields[client_field_keys[client_field_key_index]].on_name; + powerup_timer = undefined; + powerup_on = undefined; + + if ( client_fields[client_field_keys[client_field_key_index]].solo ) + { + if ( isdefined( player._show_solo_hud ) && player._show_solo_hud == 1 ) + { + powerup_timer = player.zombie_vars[time_name]; + powerup_on = player.zombie_vars[on_name]; + } + } + else if ( isdefined( level.zombie_vars[player.team][time_name] ) ) + { + powerup_timer = level.zombie_vars[player.team][time_name]; + powerup_on = level.zombie_vars[player.team][on_name]; + } + else if ( isdefined( level.zombie_vars[time_name] ) ) + { + powerup_timer = level.zombie_vars[time_name]; + powerup_on = level.zombie_vars[on_name]; + } + + if ( isdefined( powerup_timer ) && isdefined( powerup_on ) ) + { + player set_clientfield_powerups( client_field_name, powerup_timer, powerup_on, flashing_timers, flashing_values ); + continue; + } + + player setclientfieldtoplayer( client_field_name, 0 ); + } + } + } +} + +set_clientfield_powerups( clientfield_name, powerup_timer, powerup_on, flashing_timers, flashing_values ) +{ + if ( powerup_on ) + { + if ( powerup_timer < 10 ) + { + flashing_value = 3; + + for ( i = flashing_timers.size - 1; i > 0; i-- ) + { + if ( powerup_timer < flashing_timers[i] ) + { + flashing_value = flashing_values[i]; + break; + } + } + + self setclientfieldtoplayer( clientfield_name, flashing_value ); + } + else + self setclientfieldtoplayer( clientfield_name, 1 ); + } + else + self setclientfieldtoplayer( clientfield_name, 0 ); +} + +randomize_powerups() +{ + level.zombie_powerup_array = array_randomize( level.zombie_powerup_array ); +} + +get_next_powerup() +{ + powerup = level.zombie_powerup_array[level.zombie_powerup_index]; + level.zombie_powerup_index++; + + if ( level.zombie_powerup_index >= level.zombie_powerup_array.size ) + { + level.zombie_powerup_index = 0; + randomize_powerups(); + } + + return powerup; +} + +get_valid_powerup() +{ +/# + if ( isdefined( level.zombie_devgui_power ) && level.zombie_devgui_power == 1 ) + return level.zombie_powerup_array[level.zombie_powerup_index]; +#/ + if ( isdefined( level.zombie_powerup_boss ) ) + { + i = level.zombie_powerup_boss; + level.zombie_powerup_boss = undefined; + return level.zombie_powerup_array[i]; + } + + if ( isdefined( level.zombie_powerup_ape ) ) + { + powerup = level.zombie_powerup_ape; + level.zombie_powerup_ape = undefined; + return powerup; + } + + powerup = get_next_powerup(); + + while ( true ) + { + if ( ![[ level.zombie_powerups[powerup].func_should_drop_with_regular_powerups ]]() ) + { + powerup = get_next_powerup(); + continue; + } + + return powerup; + } +} + +minigun_no_drop() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].zombie_vars["zombie_powerup_minigun_on"] == 1 ) + return true; + } + + if ( !flag( "power_on" ) ) + { + if ( flag( "solo_game" ) ) + { + if ( level.solo_lives_given == 0 ) + return true; + } + else + return true; + } + + return false; +} + +get_num_window_destroyed() +{ + num = 0; + + for ( i = 0; i < level.exterior_goals.size; i++ ) + { + if ( all_chunks_destroyed( level.exterior_goals[i], level.exterior_goals[i].barrier_chunks ) ) + num += 1; + } + + return num; +} + +watch_for_drop() +{ + flag_wait( "start_zombie_round_logic" ); + flag_wait( "begin_spawning" ); + players = get_players(); + score_to_drop = players.size * level.zombie_vars["zombie_score_start_" + players.size + "p"] + level.zombie_vars["zombie_powerup_drop_increment"]; + + while ( true ) + { + flag_wait( "zombie_drop_powerups" ); + players = get_players(); + curr_total_score = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].score_total ) ) + curr_total_score += players[i].score_total; + } + + if ( curr_total_score > score_to_drop ) + { + level.zombie_vars["zombie_powerup_drop_increment"] *= 1.14; + score_to_drop = curr_total_score + level.zombie_vars["zombie_powerup_drop_increment"]; + level.zombie_vars["zombie_drop_item"] = 1; + } + + wait 0.5; + } +} + +add_zombie_powerup( powerup_name, model_name, hint, func_should_drop_with_regular_powerups, solo, caution, zombie_grabbable, fx, client_field_name, time_name, on_name, clientfield_version = 1 ) +{ + if ( isdefined( level.zombie_include_powerups ) && !isdefined( level.zombie_include_powerups[powerup_name] ) ) + return; + + precachemodel( model_name ); + precachestring( hint ); + struct = spawnstruct(); + + if ( !isdefined( level.zombie_powerups ) ) + level.zombie_powerups = []; + + struct.powerup_name = powerup_name; + struct.model_name = model_name; + struct.weapon_classname = "script_model"; + struct.hint = hint; + struct.func_should_drop_with_regular_powerups = func_should_drop_with_regular_powerups; + struct.solo = solo; + struct.caution = caution; + struct.zombie_grabbable = zombie_grabbable; + + if ( isdefined( fx ) ) + struct.fx = loadfx( fx ); + + level.zombie_powerups[powerup_name] = struct; + level.zombie_powerup_array[level.zombie_powerup_array.size] = powerup_name; + add_zombie_special_drop( powerup_name ); + + if ( !level.createfx_enabled ) + { + if ( isdefined( client_field_name ) ) + { + registerclientfield( "toplayer", client_field_name, clientfield_version, 2, "int" ); + struct.client_field_name = client_field_name; + struct.time_name = time_name; + struct.on_name = on_name; + } + } +} + +powerup_set_can_pick_up_in_last_stand( powerup_name, b_can_pick_up ) +{ + level.zombie_powerups[powerup_name].can_pick_up_in_last_stand = b_can_pick_up; +} + +add_zombie_special_drop( powerup_name ) +{ + level.zombie_special_drop_array[level.zombie_special_drop_array.size] = powerup_name; +} + +include_zombie_powerup( powerup_name ) +{ + if ( !isdefined( level.zombie_include_powerups ) ) + level.zombie_include_powerups = []; + + level.zombie_include_powerups[powerup_name] = 1; +} + +powerup_round_start() +{ + level.powerup_drop_count = 0; +} + +powerup_drop( drop_point ) +{ + if ( level.powerup_drop_count >= level.zombie_vars["zombie_powerup_drop_max_per_round"] ) + { +/# + println( "^3POWERUP DROP EXCEEDED THE MAX PER ROUND!" ); +#/ + return; + } + + if ( !isdefined( level.zombie_include_powerups ) || level.zombie_include_powerups.size == 0 ) + return; + + rand_drop = randomint( 100 ); + + if ( rand_drop > 2 ) + { + if ( !level.zombie_vars["zombie_drop_item"] ) + return; + + debug = "score"; + } + else + debug = "random"; + + playable_area = getentarray( "player_volume", "script_noteworthy" ); + level.powerup_drop_count++; + powerup = maps\mp\zombies\_zm_net::network_safe_spawn( "powerup", 1, "script_model", drop_point + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + valid_drop = 0; + + for ( i = 0; i < playable_area.size; i++ ) + { + if ( powerup istouching( playable_area[i] ) ) + valid_drop = 1; + } + + if ( valid_drop && level.rare_powerups_active ) + { + pos = ( drop_point[0], drop_point[1], drop_point[2] + 42 ); + + if ( check_for_rare_drop_override( pos ) ) + { + level.zombie_vars["zombie_drop_item"] = 0; + valid_drop = 0; + } + } + + if ( !valid_drop ) + { + level.powerup_drop_count--; + powerup delete(); + return; + } + + powerup powerup_setup(); + print_powerup_drop( powerup.powerup_name, debug ); + powerup thread powerup_timeout(); + powerup thread powerup_wobble(); + powerup thread powerup_grab(); + powerup thread powerup_move(); + powerup thread powerup_emp(); + level.zombie_vars["zombie_drop_item"] = 0; + level notify( "powerup_dropped", powerup ); +} + +specific_powerup_drop( powerup_name, drop_spot, powerup_team, powerup_location ) +{ + powerup = maps\mp\zombies\_zm_net::network_safe_spawn( "powerup", 1, "script_model", drop_spot + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + level notify( "powerup_dropped", powerup ); + + if ( isdefined( powerup ) ) + { + powerup powerup_setup( powerup_name, powerup_team, powerup_location ); + powerup thread powerup_timeout(); + powerup thread powerup_wobble(); + powerup thread powerup_grab( powerup_team ); + powerup thread powerup_move(); + powerup thread powerup_emp(); + return powerup; + } +} + +quantum_bomb_random_powerup_result( position ) +{ + if ( !isdefined( level.zombie_include_powerups ) || !level.zombie_include_powerups.size ) + return; + + keys = getarraykeys( level.zombie_include_powerups ); + + while ( keys.size ) + { + index = randomint( keys.size ); + + if ( !level.zombie_powerups[keys[index]].zombie_grabbable ) + { + skip = 0; + + switch ( keys[index] ) + { + case "random_weapon": + case "bonus_points_team": + case "bonus_points_player": + skip = 1; + break; + case "minigun": + case "insta_kill": + case "full_ammo": + case "fire_sale": + if ( randomint( 4 ) ) + skip = 1; + + break; + case "tesla": + case "free_perk": + case "bonfire_sale": + if ( randomint( 20 ) ) + skip = 1; + + break; + default: + } + + if ( skip ) + { + arrayremovevalue( keys, keys[index] ); + continue; + } + + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "quant_good" ); + [[ level.quantum_bomb_play_player_effect_at_position_func ]]( position ); + level specific_powerup_drop( keys[index], position ); + return; + } + else + arrayremovevalue( keys, keys[index] ); + } +} + +quantum_bomb_random_zombie_grab_powerup_result( position ) +{ + if ( !isdefined( level.zombie_include_powerups ) || !level.zombie_include_powerups.size ) + return; + + keys = getarraykeys( level.zombie_include_powerups ); + + while ( keys.size ) + { + index = randomint( keys.size ); + + if ( level.zombie_powerups[keys[index]].zombie_grabbable ) + { + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "quant_bad" ); + [[ level.quantum_bomb_play_player_effect_at_position_func ]]( position ); + level specific_powerup_drop( keys[index], position ); + return; + } + else + arrayremovevalue( keys, keys[index] ); + } +} + +quantum_bomb_random_weapon_powerup_result( position ) +{ + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "quant_good" ); + [[ level.quantum_bomb_play_player_effect_at_position_func ]]( position ); + level specific_powerup_drop( "random_weapon", position ); +} + +quantum_bomb_random_bonus_or_lose_points_powerup_result( position ) +{ + rand = randomint( 10 ); + powerup = "bonus_points_team"; + + switch ( rand ) + { + case 1: + case 0: + powerup = "lose_points_team"; + + if ( isdefined( level.zombie_include_powerups[powerup] ) ) + { + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "quant_bad" ); + break; + } + case 4: + case 3: + case 2: + powerup = "bonus_points_player"; + + if ( isdefined( level.zombie_include_powerups[powerup] ) ) + break; + default: + powerup = "bonus_points_team"; + break; + } + + [[ level.quantum_bomb_play_player_effect_at_position_func ]]( position ); + level specific_powerup_drop( powerup, position ); +} + +special_powerup_drop( drop_point ) +{ + if ( !isdefined( level.zombie_include_powerups ) || level.zombie_include_powerups.size == 0 ) + return; + + powerup = spawn( "script_model", drop_point + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + playable_area = getentarray( "player_volume", "script_noteworthy" ); + valid_drop = 0; + + for ( i = 0; i < playable_area.size; i++ ) + { + if ( powerup istouching( playable_area[i] ) ) + { + valid_drop = 1; + break; + } + } + + if ( !valid_drop ) + { + powerup delete(); + return; + } + + powerup special_drop_setup(); +} + +cleanup_random_weapon_list() +{ + self waittill( "death" ); + + arrayremovevalue( level.random_weapon_powerups, self ); +} + +powerup_setup( powerup_override, powerup_team, powerup_location ) +{ + powerup = undefined; + + if ( !isdefined( powerup_override ) ) + powerup = get_valid_powerup(); + else + { + powerup = powerup_override; + + if ( "tesla" == powerup && tesla_powerup_active() ) + powerup = "minigun"; + } + + struct = level.zombie_powerups[powerup]; + + if ( powerup == "random_weapon" ) + { + players = get_players(); + self.weapon = maps\mp\zombies\_zm_magicbox::treasure_chest_chooseweightedrandomweapon( players[0] ); +/# + weapon = getdvar( _hash_45ED7744 ); + + if ( weapon != "" && isdefined( level.zombie_weapons[weapon] ) ) + { + self.weapon = weapon; + setdvar( "scr_force_weapon", "" ); + } +#/ + self.base_weapon = self.weapon; + + if ( !isdefined( level.random_weapon_powerups ) ) + level.random_weapon_powerups = []; + + level.random_weapon_powerups[level.random_weapon_powerups.size] = self; + self thread cleanup_random_weapon_list(); + + if ( isdefined( level.zombie_weapons[self.weapon].upgrade_name ) && !randomint( 4 ) ) + self.weapon = level.zombie_weapons[self.weapon].upgrade_name; + + self setmodel( getweaponmodel( self.weapon ) ); + self useweaponhidetags( self.weapon ); + offsetdw = vectorscale( ( 1, 1, 1 ), 3.0 ); + self.worldgundw = undefined; + + if ( maps\mp\zombies\_zm_magicbox::weapon_is_dual_wield( self.weapon ) ) + { + self.worldgundw = spawn( "script_model", self.origin + offsetdw ); + self.worldgundw.angles = self.angles; + self.worldgundw setmodel( maps\mp\zombies\_zm_magicbox::get_left_hand_weapon_model_name( self.weapon ) ); + self.worldgundw useweaponhidetags( self.weapon ); + self.worldgundw linkto( self, "tag_weapon", offsetdw, ( 0, 0, 0 ) ); + } + } + else + self setmodel( struct.model_name ); + + maps\mp\_demo::bookmark( "zm_powerup_dropped", gettime(), undefined, undefined, 1 ); + playsoundatposition( "zmb_spawn_powerup", self.origin ); + + if ( isdefined( powerup_team ) ) + self.powerup_team = powerup_team; + + if ( isdefined( powerup_location ) ) + self.powerup_location = powerup_location; + + self.powerup_name = struct.powerup_name; + self.hint = struct.hint; + self.solo = struct.solo; + self.caution = struct.caution; + self.zombie_grabbable = struct.zombie_grabbable; + self.func_should_drop_with_regular_powerups = struct.func_should_drop_with_regular_powerups; + + if ( isdefined( struct.fx ) ) + self.fx = struct.fx; + + if ( isdefined( struct.can_pick_up_in_last_stand ) ) + self.can_pick_up_in_last_stand = struct.can_pick_up_in_last_stand; + + self playloopsound( "zmb_spawn_powerup_loop" ); + level.active_powerups[level.active_powerups.size] = self; +} + +special_drop_setup() +{ + powerup = undefined; + is_powerup = 1; + + if ( level.round_number <= 10 ) + powerup = get_valid_powerup(); + else + { + powerup = level.zombie_special_drop_array[randomint( level.zombie_special_drop_array.size )]; + + if ( level.round_number > 15 && randomint( 100 ) < ( level.round_number - 15 ) * 5 ) + powerup = "nothing"; + } + + switch ( powerup ) + { + case "zombie_blood": + case "tesla": + case "random_weapon": + case "nuke": + case "minigun": + case "lose_points_team": + case "lose_perk": + case "insta_kill": + case "free_perk": + case "fire_sale": + case "empty_clip": + case "double_points": + case "carpenter": + case "bonus_points_team": + case "bonus_points_player": + case "bonfire_sale": + case "all_revive": + break; + case "full_ammo": + if ( level.round_number > 10 && randomint( 100 ) < ( level.round_number - 10 ) * 5 ) + powerup = level.zombie_powerup_array[randomint( level.zombie_powerup_array.size )]; + + break; + case "dog": + if ( level.round_number >= 15 ) + { + is_powerup = 0; + dog_spawners = getentarray( "special_dog_spawner", "targetname" ); + thread play_sound_2d( "sam_nospawn" ); + } + else + powerup = get_valid_powerup(); + + break; + default: + if ( isdefined( level._zombiemode_special_drop_setup ) ) + is_powerup = [[ level._zombiemode_special_drop_setup ]]( powerup ); + else + { + is_powerup = 0; + playfx( level._effect["lightning_dog_spawn"], self.origin ); + playsoundatposition( "pre_spawn", self.origin ); + wait 1.5; + playsoundatposition( "zmb_bolt", self.origin ); + earthquake( 0.5, 0.75, self.origin, 1000 ); + playrumbleonposition( "explosion_generic", self.origin ); + playsoundatposition( "spawn", self.origin ); + wait 1.0; + thread play_sound_2d( "sam_nospawn" ); + self delete(); + } + } + + if ( is_powerup ) + { + playfx( level._effect["lightning_dog_spawn"], self.origin ); + playsoundatposition( "pre_spawn", self.origin ); + wait 1.5; + playsoundatposition( "zmb_bolt", self.origin ); + earthquake( 0.5, 0.75, self.origin, 1000 ); + playrumbleonposition( "explosion_generic", self.origin ); + playsoundatposition( "spawn", self.origin ); + self powerup_setup( powerup ); + self thread powerup_timeout(); + self thread powerup_wobble(); + self thread powerup_grab(); + self thread powerup_move(); + self thread powerup_emp(); + } +} + +powerup_zombie_grab_trigger_cleanup( trigger ) +{ + self waittill_any( "powerup_timedout", "powerup_grabbed", "hacked" ); + trigger delete(); +} + +powerup_zombie_grab( powerup_team ) +{ + self endon( "powerup_timedout" ); + self endon( "powerup_grabbed" ); + self endon( "hacked" ); + zombie_grab_trigger = spawn( "trigger_radius", self.origin - vectorscale( ( 0, 0, 1 ), 40.0 ), 4, 32, 72 ); + zombie_grab_trigger enablelinkto(); + zombie_grab_trigger linkto( self ); + zombie_grab_trigger setteamfortrigger( level.zombie_team ); + self thread powerup_zombie_grab_trigger_cleanup( zombie_grab_trigger ); + poi_dist = 300; + + if ( isdefined( level._zombie_grabbable_poi_distance_override ) ) + poi_dist = level._zombie_grabbable_poi_distance_override; + + zombie_grab_trigger create_zombie_point_of_interest( poi_dist, 2, 0, 1, undefined, undefined, powerup_team ); + + while ( isdefined( self ) ) + { + zombie_grab_trigger waittill( "trigger", who ); + + if ( isdefined( level._powerup_grab_check ) ) + { + if ( !self [[ level._powerup_grab_check ]]( who ) ) + continue; + } + else if ( !isdefined( who ) || !isai( who ) ) + continue; + + playfx( level._effect["powerup_grabbed_red"], self.origin ); + playfx( level._effect["powerup_grabbed_wave_red"], self.origin ); + + switch ( self.powerup_name ) + { + case "lose_points_team": + level thread lose_points_team_powerup( self ); + players = get_players(); + players[randomintrange( 0, players.size )] thread powerup_vo( "lose_points" ); + break; + case "lose_perk": + level thread lose_perk_powerup( self ); + break; + case "empty_clip": + level thread empty_clip_powerup( self ); + break; + default: + if ( isdefined( level._zombiemode_powerup_zombie_grab ) ) + level thread [[ level._zombiemode_powerup_zombie_grab ]]( self ); + + if ( isdefined( level._game_mode_powerup_zombie_grab ) ) + level thread [[ level._game_mode_powerup_zombie_grab ]]( self, who ); + else + { +/# + println( "Unrecognized poweup." ); +#/ + } + + break; + } + + level thread maps\mp\zombies\_zm_audio::do_announcer_playvox( "powerup", self.powerup_name ); + wait 0.1; + playsoundatposition( "zmb_powerup_grabbed", self.origin ); + self stoploopsound(); + self powerup_delete(); + self notify( "powerup_grabbed" ); + } +} + +powerup_grab( powerup_team ) +{ + if ( isdefined( self ) && self.zombie_grabbable ) + { + self thread powerup_zombie_grab( powerup_team ); + return; + } + + self endon( "powerup_timedout" ); + self endon( "powerup_grabbed" ); + range_squared = 4096; + + while ( isdefined( self ) ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( ( self.powerup_name == "minigun" || self.powerup_name == "tesla" || self.powerup_name == "random_weapon" || self.powerup_name == "meat_stink" ) && ( players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() || players[i] usebuttonpressed() && players[i] in_revive_trigger() ) ) + continue; + + if ( isdefined( self.can_pick_up_in_last_stand ) && !self.can_pick_up_in_last_stand && players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + continue; + + ignore_range = 0; + + if ( isdefined( players[i].ignore_range_powerup ) && players[i].ignore_range_powerup == self ) + { + players[i].ignore_range_powerup = undefined; + ignore_range = 1; + } + + if ( distancesquared( players[i].origin, self.origin ) < range_squared || ignore_range ) + { + if ( isdefined( level._powerup_grab_check ) ) + { + if ( !self [[ level._powerup_grab_check ]]( players[i] ) ) + continue; + } + + if ( isdefined( level.zombie_powerup_grab_func ) ) + level thread [[ level.zombie_powerup_grab_func ]](); + else + { + switch ( self.powerup_name ) + { + case "nuke": + level thread nuke_powerup( self, players[i].team ); + players[i] thread powerup_vo( "nuke" ); + zombies = getaiarray( level.zombie_team ); + players[i].zombie_nuked = arraysort( zombies, self.origin ); + players[i] notify( "nuke_triggered" ); + break; + case "full_ammo": + level thread full_ammo_powerup( self, players[i] ); + players[i] thread powerup_vo( "full_ammo" ); + break; + case "double_points": + level thread double_points_powerup( self, players[i] ); + players[i] thread powerup_vo( "double_points" ); + break; + case "insta_kill": + level thread insta_kill_powerup( self, players[i] ); + players[i] thread powerup_vo( "insta_kill" ); + break; + case "carpenter": + if ( is_classic() ) + players[i] thread maps\mp\zombies\_zm_pers_upgrades::persistent_carpenter_ability_check(); + + if ( isdefined( level.use_new_carpenter_func ) ) + level thread [[ level.use_new_carpenter_func ]]( self.origin ); + else + level thread start_carpenter( self.origin ); + + players[i] thread powerup_vo( "carpenter" ); + break; + case "fire_sale": + level thread start_fire_sale( self ); + players[i] thread powerup_vo( "firesale" ); + break; + case "bonfire_sale": + level thread start_bonfire_sale( self ); + players[i] thread powerup_vo( "firesale" ); + break; + case "minigun": + level thread minigun_weapon_powerup( players[i] ); + players[i] thread powerup_vo( "minigun" ); + break; + case "free_perk": + level thread free_perk_powerup( self ); + break; + case "tesla": + level thread tesla_weapon_powerup( players[i] ); + players[i] thread powerup_vo( "tesla" ); + break; + case "random_weapon": + if ( !level random_weapon_powerup( self, players[i] ) ) + continue; + + break; + case "bonus_points_player": + level thread bonus_points_player_powerup( self, players[i] ); + players[i] thread powerup_vo( "bonus_points_solo" ); + break; + case "bonus_points_team": + level thread bonus_points_team_powerup( self ); + players[i] thread powerup_vo( "bonus_points_team" ); + break; + case "teller_withdrawl": + level thread teller_withdrawl( self, players[i] ); + break; + default: + if ( isdefined( level._zombiemode_powerup_grab ) ) + level thread [[ level._zombiemode_powerup_grab ]]( self, players[i] ); + else + { +/# + println( "Unrecognized poweup." ); +#/ + } + + break; + } + } + + maps\mp\_demo::bookmark( "zm_player_powerup_grabbed", gettime(), players[i] ); + + if ( should_award_stat( self.powerup_name ) ) + { + players[i] maps\mp\zombies\_zm_stats::increment_client_stat( "drops" ); + players[i] maps\mp\zombies\_zm_stats::increment_player_stat( "drops" ); + players[i] maps\mp\zombies\_zm_stats::increment_client_stat( self.powerup_name + "_pickedup" ); + players[i] maps\mp\zombies\_zm_stats::increment_player_stat( self.powerup_name + "_pickedup" ); + } + + if ( self.solo ) + { + playfx( level._effect["powerup_grabbed_solo"], self.origin ); + playfx( level._effect["powerup_grabbed_wave_solo"], self.origin ); + } + else if ( self.caution ) + { + playfx( level._effect["powerup_grabbed_caution"], self.origin ); + playfx( level._effect["powerup_grabbed_wave_caution"], self.origin ); + } + else + { + playfx( level._effect["powerup_grabbed"], self.origin ); + playfx( level._effect["powerup_grabbed_wave"], self.origin ); + } + + if ( isdefined( self.stolen ) && self.stolen ) + level notify( "monkey_see_monkey_dont_achieved" ); + + if ( isdefined( self.grabbed_level_notify ) ) + level notify( self.grabbed_level_notify ); + + self.claimed = 1; + self.power_up_grab_player = players[i]; + wait 0.1; + playsoundatposition( "zmb_powerup_grabbed", self.origin ); + self stoploopsound(); + self hide(); + + if ( self.powerup_name != "fire_sale" ) + { + if ( isdefined( self.power_up_grab_player ) ) + { + if ( isdefined( level.powerup_intro_vox ) ) + { + level thread [[ level.powerup_intro_vox ]]( self ); + return; + } + else if ( isdefined( level.powerup_vo_available ) ) + { + can_say_vo = [[ level.powerup_vo_available ]](); + + if ( !can_say_vo ) + { + self powerup_delete(); + self notify( "powerup_grabbed" ); + return; + } + } + } + } + + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( self.powerup_name, self.power_up_grab_player.pers["team"] ); + self powerup_delete(); + self notify( "powerup_grabbed" ); + } + } + + wait 0.1; + } +} + +start_fire_sale( item ) +{ + if ( level.zombie_vars["zombie_powerup_fire_sale_time"] > 0 && is_true( level.zombie_vars["zombie_powerup_fire_sale_on"] ) ) + { + level.zombie_vars["zombie_powerup_fire_sale_time"] += 30; + return; + } + + level notify( "powerup fire sale" ); + level endon( "powerup fire sale" ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "fire_sale" ); + level.zombie_vars["zombie_powerup_fire_sale_on"] = 1; + level thread toggle_fire_sale_on(); + + for ( level.zombie_vars["zombie_powerup_fire_sale_time"] = 30; level.zombie_vars["zombie_powerup_fire_sale_time"] > 0; level.zombie_vars["zombie_powerup_fire_sale_time"] -= 0.05 ) + wait 0.05; + + level.zombie_vars["zombie_powerup_fire_sale_on"] = 0; + level notify( "fire_sale_off" ); +} + +start_bonfire_sale( item ) +{ + level notify( "powerup bonfire sale" ); + level endon( "powerup bonfire sale" ); + temp_ent = spawn( "script_origin", ( 0, 0, 0 ) ); + temp_ent playloopsound( "zmb_double_point_loop" ); + level.zombie_vars["zombie_powerup_bonfire_sale_on"] = 1; + level thread toggle_bonfire_sale_on(); + + for ( level.zombie_vars["zombie_powerup_bonfire_sale_time"] = 30; level.zombie_vars["zombie_powerup_bonfire_sale_time"] > 0; level.zombie_vars["zombie_powerup_bonfire_sale_time"] -= 0.05 ) + wait 0.05; + + level.zombie_vars["zombie_powerup_bonfire_sale_on"] = 0; + level notify( "bonfire_sale_off" ); + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] playsound( "zmb_points_loop_off" ); + + temp_ent delete(); +} + +start_carpenter( origin ) +{ + window_boards = getstructarray( "exterior_goal", "targetname" ); + total = level.exterior_goals.size; + carp_ent = spawn( "script_origin", ( 0, 0, 0 ) ); + carp_ent playloopsound( "evt_carpenter" ); + + while ( true ) + { + windows = get_closest_window_repair( window_boards, origin ); + + if ( !isdefined( windows ) ) + { + carp_ent stoploopsound( 1 ); + carp_ent playsoundwithnotify( "evt_carpenter_end", "sound_done" ); + + carp_ent waittill( "sound_done" ); + + break; + } + else + arrayremovevalue( window_boards, windows ); + + while ( true ) + { + if ( all_chunks_intact( windows, windows.barrier_chunks ) ) + break; + + chunk = get_random_destroyed_chunk( windows, windows.barrier_chunks ); + + if ( !isdefined( chunk ) ) + break; + + windows thread maps\mp\zombies\_zm_blockers::replace_chunk( windows, chunk, undefined, maps\mp\zombies\_zm_powerups::is_carpenter_boards_upgraded(), 1 ); + + if ( isdefined( windows.clip ) ) + { + windows.clip enable_trigger(); + windows.clip disconnectpaths(); + } + else + blocker_disconnect_paths( windows.neg_start, windows.neg_end ); + + wait_network_frame(); + wait 0.05; + } + + wait_network_frame(); + } + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] maps\mp\zombies\_zm_score::player_add_points( "carpenter_powerup", 200 ); + + carp_ent delete(); +} + +get_closest_window_repair( windows, origin ) +{ + current_window = undefined; + shortest_distance = undefined; + + for ( i = 0; i < windows.size; i++ ) + { + if ( all_chunks_intact( windows, windows[i].barrier_chunks ) ) + continue; + + if ( !isdefined( current_window ) ) + { + current_window = windows[i]; + shortest_distance = distancesquared( current_window.origin, origin ); + continue; + } + + if ( distancesquared( windows[i].origin, origin ) < shortest_distance ) + { + current_window = windows[i]; + shortest_distance = distancesquared( windows[i].origin, origin ); + } + } + + return current_window; +} + +powerup_vo( type ) +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( isdefined( level.powerup_vo_available ) ) + { + if ( ![[ level.powerup_vo_available ]]() ) + return; + } + + wait( randomfloatrange( 2, 2.5 ) ); + + if ( type == "tesla" ) + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", type ); + else + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "powerup", type ); + + if ( isdefined( level.custom_powerup_vo_response ) ) + level [[ level.custom_powerup_vo_response ]]( self, type ); +} + +powerup_wobble_fx() +{ + self endon( "death" ); + + if ( !isdefined( self ) ) + return; + + if ( isdefined( level.powerup_fx_func ) ) + { + self thread [[ level.powerup_fx_func ]](); + return; + } + + if ( self.solo ) + self setclientfield( "powerup_fx", 2 ); + else if ( self.caution ) + self setclientfield( "powerup_fx", 4 ); + else if ( self.zombie_grabbable ) + self setclientfield( "powerup_fx", 3 ); + else + self setclientfield( "powerup_fx", 1 ); +} + +powerup_wobble() +{ + self endon( "powerup_grabbed" ); + self endon( "powerup_timedout" ); + self thread powerup_wobble_fx(); + + while ( isdefined( self ) ) + { + waittime = randomfloatrange( 2.5, 5 ); + yaw = randomint( 360 ); + + if ( yaw > 300 ) + yaw = 300; + else if ( yaw < 60 ) + yaw = 60; + + yaw = self.angles[1] + yaw; + new_angles = ( -60 + randomint( 120 ), yaw, -45 + randomint( 90 ) ); + self rotateto( new_angles, waittime, waittime * 0.5, waittime * 0.5 ); + + if ( isdefined( self.worldgundw ) ) + self.worldgundw rotateto( new_angles, waittime, waittime * 0.5, waittime * 0.5 ); + + wait( randomfloat( waittime - 0.1 ) ); + } +} + +powerup_timeout() +{ + if ( isdefined( level._powerup_timeout_override ) && !isdefined( self.powerup_team ) ) + { + self thread [[ level._powerup_timeout_override ]](); + return; + } + + self endon( "powerup_grabbed" ); + self endon( "death" ); + self endon( "powerup_reset" ); + self show(); + wait_time = 15; + + if ( isdefined( level._powerup_timeout_custom_time ) ) + { + time = [[ level._powerup_timeout_custom_time ]]( self ); + + if ( time == 0 ) + return; + + wait_time = time; + } + + wait( wait_time ); + + for ( i = 0; i < 40; i++ ) + { + if ( i % 2 ) + { + self ghost(); + + if ( isdefined( self.worldgundw ) ) + self.worldgundw ghost(); + } + else + { + self show(); + + if ( isdefined( self.worldgundw ) ) + self.worldgundw show(); + } + + if ( i < 15 ) + { + wait 0.5; + continue; + } + + if ( i < 25 ) + { + wait 0.25; + continue; + } + + wait 0.1; + } + + self notify( "powerup_timedout" ); + self powerup_delete(); +} + +powerup_delete() +{ + arrayremovevalue( level.active_powerups, self, 0 ); + + if ( isdefined( self.worldgundw ) ) + self.worldgundw delete(); + + self delete(); +} + +powerup_delete_delayed( time ) +{ + if ( isdefined( time ) ) + wait( time ); + else + wait 0.01; + + self powerup_delete(); +} + +nuke_powerup( drop_item, player_team ) +{ + location = drop_item.origin; + playfx( drop_item.fx, location ); + level thread nuke_flash( player_team ); + wait 0.5; + zombies = getaiarray( level.zombie_team ); + zombies = arraysort( zombies, location ); + zombies_nuked = []; + + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i].ignore_nuke ) && zombies[i].ignore_nuke ) + continue; + + if ( isdefined( zombies[i].marked_for_death ) && zombies[i].marked_for_death ) + continue; + + if ( isdefined( zombies[i].nuke_damage_func ) ) + { + zombies[i] thread [[ zombies[i].nuke_damage_func ]](); + continue; + } + + if ( is_magic_bullet_shield_enabled( zombies[i] ) ) + continue; + + zombies[i].marked_for_death = 1; + zombies[i].nuked = 1; + zombies_nuked[zombies_nuked.size] = zombies[i]; + } + + for ( i = 0; i < zombies_nuked.size; i++ ) + { + wait( randomfloatrange( 0.1, 0.7 ) ); + + if ( !isdefined( zombies_nuked[i] ) ) + continue; + + if ( is_magic_bullet_shield_enabled( zombies_nuked[i] ) ) + continue; + + if ( i < 5 && !zombies_nuked[i].isdog ) + zombies_nuked[i] thread maps\mp\animscripts\zm_death::flame_death_fx(); + + if ( !zombies_nuked[i].isdog ) + { + if ( !( isdefined( zombies_nuked[i].no_gib ) && zombies_nuked[i].no_gib ) ) + zombies_nuked[i] maps\mp\zombies\_zm_spawner::zombie_head_gib(); + + zombies_nuked[i] playsound( "evt_nuked" ); + } + + zombies_nuked[i] dodamage( zombies_nuked[i].health + 666, zombies_nuked[i].origin ); + } + + players = get_players( player_team ); + + for ( i = 0; i < players.size; i++ ) + players[i] maps\mp\zombies\_zm_score::player_add_points( "nuke_powerup", 400 ); +} + +nuke_flash( team ) +{ + if ( isdefined( team ) ) + get_players()[0] playsoundtoteam( "evt_nuke_flash", team ); + else + get_players()[0] playsound( "evt_nuke_flash" ); + + fadetowhite = newhudelem(); + fadetowhite.x = 0; + fadetowhite.y = 0; + fadetowhite.alpha = 0; + fadetowhite.horzalign = "fullscreen"; + fadetowhite.vertalign = "fullscreen"; + fadetowhite.foreground = 1; + fadetowhite setshader( "white", 640, 480 ); + fadetowhite fadeovertime( 0.2 ); + fadetowhite.alpha = 0.8; + wait 0.5; + fadetowhite fadeovertime( 1.0 ); + fadetowhite.alpha = 0; + wait 1.1; + fadetowhite destroy(); +} + +double_points_powerup( drop_item, player ) +{ + level notify( "powerup points scaled_" + player.team ); + level endon( "powerup points scaled_" + player.team ); + team = player.team; + level thread point_doubler_on_hud( drop_item, team ); + + if ( isdefined( level.pers_upgrade_double_points ) && level.pers_upgrade_double_points ) + player thread maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_double_points_pickup_start(); + + if ( isdefined( level.current_game_module ) && level.current_game_module == 2 ) + { + if ( isdefined( player._race_team ) ) + { + if ( player._race_team == 1 ) + level._race_team_double_points = 1; + else + level._race_team_double_points = 2; + } + } + + level.zombie_vars[team]["zombie_point_scalar"] = 2; + players = get_players(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + { + if ( team == players[player_index].team ) + players[player_index] setclientfield( "score_cf_double_points_active", 1 ); + } + + wait 30; + level.zombie_vars[team]["zombie_point_scalar"] = 1; + level._race_team_double_points = undefined; + players = get_players(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + { + if ( team == players[player_index].team ) + players[player_index] setclientfield( "score_cf_double_points_active", 0 ); + } +} + +full_ammo_powerup( drop_item, player ) +{ + players = get_players( player.team ); + + if ( isdefined( level._get_game_module_players ) ) + players = [[ level._get_game_module_players ]]( player ); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + continue; + + primary_weapons = players[i] getweaponslist( 1 ); + players[i] notify( "zmb_max_ammo" ); + players[i] notify( "zmb_lost_knife" ); + players[i] notify( "zmb_disable_claymore_prompt" ); + players[i] notify( "zmb_disable_spikemore_prompt" ); + + for ( x = 0; x < primary_weapons.size; x++ ) + { + if ( level.headshots_only && is_lethal_grenade( primary_weapons[x] ) ) + continue; + + if ( isdefined( level.zombie_include_equipment ) && isdefined( level.zombie_include_equipment[primary_weapons[x]] ) ) + continue; + + if ( isdefined( level.zombie_weapons_no_max_ammo ) && isdefined( level.zombie_weapons_no_max_ammo[primary_weapons[x]] ) ) + continue; + + if ( players[i] hasweapon( primary_weapons[x] ) ) + players[i] givemaxammo( primary_weapons[x] ); + } + } + + level thread full_ammo_on_hud( drop_item, player.team ); +} + +insta_kill_powerup( drop_item, player ) +{ + level notify( "powerup instakill_" + player.team ); + level endon( "powerup instakill_" + player.team ); + + if ( isdefined( level.insta_kill_powerup_override ) ) + { + level thread [[ level.insta_kill_powerup_override ]]( drop_item, player ); + return; + } + + if ( is_classic() ) + player thread maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_insta_kill_upgrade_check(); + + team = player.team; + level thread insta_kill_on_hud( drop_item, team ); + level.zombie_vars[team]["zombie_insta_kill"] = 1; + wait 30; + level.zombie_vars[team]["zombie_insta_kill"] = 0; + players = get_players( team ); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i] ) ) + players[i] notify( "insta_kill_over" ); + } +} + +is_insta_kill_active() +{ + return level.zombie_vars[self.team]["zombie_insta_kill"]; +} + +check_for_instakill( player, mod, hit_location ) +{ + if ( isdefined( player ) && isalive( player ) && isdefined( level.check_for_instakill_override ) ) + { + if ( !self [[ level.check_for_instakill_override ]]( player ) ) + return; + + if ( player.use_weapon_type == "MOD_MELEE" ) + player.last_kill_method = "MOD_MELEE"; + else + player.last_kill_method = "MOD_UNKNOWN"; + + modname = remove_mod_from_methodofdeath( mod ); + + if ( !( isdefined( self.no_gib ) && self.no_gib ) ) + self maps\mp\zombies\_zm_spawner::zombie_head_gib(); + + self.health = 1; + self dodamage( self.health + 666, self.origin, player, self, hit_location, modname ); + player notify( "zombie_killed" ); + } + + if ( isdefined( player ) && isalive( player ) && ( level.zombie_vars[player.team]["zombie_insta_kill"] || isdefined( player.personal_instakill ) && player.personal_instakill ) ) + { + if ( is_magic_bullet_shield_enabled( self ) ) + return; + + if ( isdefined( self.instakill_func ) ) + { + self thread [[ self.instakill_func ]](); + return; + } + + if ( player.use_weapon_type == "MOD_MELEE" ) + player.last_kill_method = "MOD_MELEE"; + else + player.last_kill_method = "MOD_UNKNOWN"; + + modname = remove_mod_from_methodofdeath( mod ); + + if ( flag( "dog_round" ) ) + { + self.health = 1; + self dodamage( self.health + 666, self.origin, player, self, hit_location, modname ); + player notify( "zombie_killed" ); + } + else + { + if ( !( isdefined( self.no_gib ) && self.no_gib ) ) + self maps\mp\zombies\_zm_spawner::zombie_head_gib(); + + self.health = 1; + self dodamage( self.health + 666, self.origin, player, self, hit_location, modname ); + player notify( "zombie_killed" ); + } + } +} + +insta_kill_on_hud( drop_item, player_team ) +{ + if ( level.zombie_vars[player_team]["zombie_powerup_insta_kill_on"] ) + { + level.zombie_vars[player_team]["zombie_powerup_insta_kill_time"] = 30; + return; + } + + level.zombie_vars[player_team]["zombie_powerup_insta_kill_on"] = 1; + level thread time_remaning_on_insta_kill_powerup( player_team ); +} + +time_remaning_on_insta_kill_powerup( player_team ) +{ + temp_enta = spawn( "script_origin", ( 0, 0, 0 ) ); + temp_enta playloopsound( "zmb_insta_kill_loop" ); + + while ( level.zombie_vars[player_team]["zombie_powerup_insta_kill_time"] >= 0 ) + { + wait 0.05; + level.zombie_vars[player_team]["zombie_powerup_insta_kill_time"] -= 0.05; + } + + get_players()[0] playsoundtoteam( "zmb_insta_kill", player_team ); + temp_enta stoploopsound( 2 ); + level.zombie_vars[player_team]["zombie_powerup_insta_kill_on"] = 0; + level.zombie_vars[player_team]["zombie_powerup_insta_kill_time"] = 30; + temp_enta delete(); +} + +point_doubler_on_hud( drop_item, player_team ) +{ + self endon( "disconnect" ); + + if ( level.zombie_vars[player_team]["zombie_powerup_point_doubler_on"] ) + { + level.zombie_vars[player_team]["zombie_powerup_point_doubler_time"] = 30; + return; + } + + level.zombie_vars[player_team]["zombie_powerup_point_doubler_on"] = 1; + level thread time_remaining_on_point_doubler_powerup( player_team ); +} + +time_remaining_on_point_doubler_powerup( player_team ) +{ + temp_ent = spawn( "script_origin", ( 0, 0, 0 ) ); + temp_ent playloopsound( "zmb_double_point_loop" ); + + while ( level.zombie_vars[player_team]["zombie_powerup_point_doubler_time"] >= 0 ) + { + wait 0.05; + level.zombie_vars[player_team]["zombie_powerup_point_doubler_time"] -= 0.05; + } + + level.zombie_vars[player_team]["zombie_powerup_point_doubler_on"] = 0; + players = get_players( player_team ); + + for ( i = 0; i < players.size; i++ ) + players[i] playsound( "zmb_points_loop_off" ); + + temp_ent stoploopsound( 2 ); + level.zombie_vars[player_team]["zombie_powerup_point_doubler_time"] = 30; + temp_ent delete(); +} + +toggle_bonfire_sale_on() +{ + level endon( "powerup bonfire sale" ); + + if ( !isdefined( level.zombie_vars["zombie_powerup_bonfire_sale_on"] ) ) + return; + + if ( level.zombie_vars["zombie_powerup_bonfire_sale_on"] ) + { + if ( isdefined( level.bonfire_init_func ) ) + level thread [[ level.bonfire_init_func ]](); + + level waittill( "bonfire_sale_off" ); + } +} + +toggle_fire_sale_on() +{ + level endon( "powerup fire sale" ); + + if ( !isdefined( level.zombie_vars["zombie_powerup_fire_sale_on"] ) ) + return; + + if ( level.zombie_vars["zombie_powerup_fire_sale_on"] ) + { + for ( i = 0; i < level.chests.size; i++ ) + { + show_firesale_box = level.chests[i] [[ level._zombiemode_check_firesale_loc_valid_func ]](); + + if ( show_firesale_box ) + { + level.chests[i].zombie_cost = 10; + + if ( level.chest_index != i ) + { + level.chests[i].was_temp = 1; + + if ( is_true( level.chests[i].hidden ) ) + level.chests[i] thread maps\mp\zombies\_zm_magicbox::show_chest(); + + wait_network_frame(); + } + } + } + + level waittill( "fire_sale_off" ); + + waittillframeend; + + for ( i = 0; i < level.chests.size; i++ ) + { + show_firesale_box = level.chests[i] [[ level._zombiemode_check_firesale_loc_valid_func ]](); + + if ( show_firesale_box ) + { + if ( level.chest_index != i && isdefined( level.chests[i].was_temp ) ) + { + level.chests[i].was_temp = undefined; + level thread remove_temp_chest( i ); + } + + level.chests[i].zombie_cost = level.chests[i].old_cost; + } + } + } +} + +fire_sale_weapon_wait() +{ + self.zombie_cost = self.old_cost; + + while ( isdefined( self.chest_user ) ) + wait_network_frame(); + + self set_hint_string( self, "default_treasure_chest", self.zombie_cost ); +} + +remove_temp_chest( chest_index ) +{ + while ( isdefined( level.chests[chest_index].chest_user ) || isdefined( level.chests[chest_index]._box_open ) && level.chests[chest_index]._box_open == 1 ) + wait_network_frame(); + + if ( level.zombie_vars["zombie_powerup_fire_sale_on"] ) + { + level.chests[chest_index].was_temp = 1; + level.chests[chest_index].zombie_cost = 10; + return; + } + + for ( i = 0; i < chest_index; i++ ) + wait_network_frame(); + + playfx( level._effect["poltergeist"], level.chests[chest_index].orig_origin ); + level.chests[chest_index].zbarrier playsound( "zmb_box_poof_land" ); + level.chests[chest_index].zbarrier playsound( "zmb_couch_slam" ); + wait_network_frame(); + level.chests[chest_index] maps\mp\zombies\_zm_magicbox::hide_chest(); +} + +devil_dialog_delay() +{ + wait 1.0; +} + +full_ammo_on_hud( drop_item, player_team ) +{ + self endon( "disconnect" ); + hudelem = maps\mp\gametypes_zm\_hud_util::createserverfontstring( "objective", 2, player_team ); + hudelem maps\mp\gametypes_zm\_hud_util::setpoint( "TOP", undefined, 0, level.zombie_vars["zombie_timer_offset"] - level.zombie_vars["zombie_timer_offset_interval"] * 2 ); + hudelem.sort = 0.5; + hudelem.alpha = 0; + hudelem fadeovertime( 0.5 ); + hudelem.alpha = 1; + + if ( isdefined( drop_item ) ) + hudelem.label = drop_item.hint; + + hudelem thread full_ammo_move_hud( player_team ); +} + +full_ammo_move_hud( player_team ) +{ + players = get_players( player_team ); + players[0] playsoundtoteam( "zmb_full_ammo", player_team ); + wait 0.5; + move_fade_time = 1.5; + self fadeovertime( move_fade_time ); + self moveovertime( move_fade_time ); + self.y = 270; + self.alpha = 0; + wait( move_fade_time ); + self destroy(); +} + +check_for_rare_drop_override( pos ) +{ + if ( isdefined( flag( "ape_round" ) ) && flag( "ape_round" ) ) + return false; + + return false; +} + +setup_firesale_audio() +{ + wait 2; + intercom = getentarray( "intercom", "targetname" ); + + while ( true ) + { + while ( level.zombie_vars["zombie_powerup_fire_sale_on"] == 0 ) + wait 0.2; + + for ( i = 0; i < intercom.size; i++ ) + intercom[i] thread play_firesale_audio(); + + while ( level.zombie_vars["zombie_powerup_fire_sale_on"] == 1 ) + wait 0.1; + + level notify( "firesale_over" ); + } +} + +play_firesale_audio() +{ + if ( isdefined( level.sndfiresalemusoff ) && level.sndfiresalemusoff ) + return; + + if ( isdefined( level.sndannouncerisrich ) && level.sndannouncerisrich ) + self playloopsound( "mus_fire_sale_rich" ); + else + self playloopsound( "mus_fire_sale" ); + + level waittill( "firesale_over" ); + + self stoploopsound(); +} + +setup_bonfiresale_audio() +{ + wait 2; + intercom = getentarray( "intercom", "targetname" ); + + while ( true ) + { + while ( level.zombie_vars["zombie_powerup_fire_sale_on"] == 0 ) + wait 0.2; + + for ( i = 0; i < intercom.size; i++ ) + intercom[i] thread play_bonfiresale_audio(); + + while ( level.zombie_vars["zombie_powerup_fire_sale_on"] == 1 ) + wait 0.1; + + level notify( "firesale_over" ); + } +} + +play_bonfiresale_audio() +{ + if ( isdefined( level.sndfiresalemusoff ) && level.sndfiresalemusoff ) + return; + + if ( isdefined( level.sndannouncerisrich ) && level.sndannouncerisrich ) + self playloopsound( "mus_fire_sale_rich" ); + else + self playloopsound( "mus_fire_sale" ); + + level waittill( "firesale_over" ); + + self stoploopsound(); +} + +free_perk_powerup( item ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( players[i].sessionstate == "spectator" ) ) + { + player = players[i]; + + if ( isdefined( item.ghost_powerup ) ) + { + player maps\mp\zombies\_zm_stats::increment_client_stat( "buried_ghost_perk_acquired", 0 ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "buried_ghost_perk_acquired" ); + player notify( "player_received_ghost_round_free_perk" ); + } + + free_perk = player maps\mp\zombies\_zm_perks::give_random_perk(); + + if ( isdefined( level.disable_free_perks_before_power ) && level.disable_free_perks_before_power ) + player thread disable_perk_before_power( free_perk ); + } + } +} + +disable_perk_before_power( perk ) +{ + self endon( "disconnect" ); + + if ( isdefined( perk ) ) + { + wait 0.1; + + if ( !flag( "power_on" ) ) + { + a_players = get_players(); + + if ( isdefined( a_players ) && a_players.size == 1 && perk == "specialty_quickrevive" ) + return; + + self perk_pause( perk ); + flag_wait( "power_on" ); + self perk_unpause( perk ); + } + } +} + +random_weapon_powerup_throttle() +{ + self.random_weapon_powerup_throttle = 1; + wait 0.25; + self.random_weapon_powerup_throttle = 0; +} + +random_weapon_powerup( item, player ) +{ + if ( player.sessionstate == "spectator" || player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + return false; + + if ( isdefined( player.random_weapon_powerup_throttle ) && player.random_weapon_powerup_throttle || player isswitchingweapons() || player.is_drinking > 0 ) + return false; + + current_weapon = player getcurrentweapon(); + current_weapon_type = weaponinventorytype( current_weapon ); + + if ( !is_tactical_grenade( item.weapon ) ) + { + if ( "primary" != current_weapon_type && "altmode" != current_weapon_type ) + return false; + + if ( !isdefined( level.zombie_weapons[current_weapon] ) && !maps\mp\zombies\_zm_weapons::is_weapon_upgraded( current_weapon ) && "altmode" != current_weapon_type ) + return false; + } + + player thread random_weapon_powerup_throttle(); + weapon_string = item.weapon; + + if ( weapon_string == "knife_ballistic_zm" ) + weapon = player maps\mp\zombies\_zm_melee_weapon::give_ballistic_knife( weapon_string, 0 ); + else if ( weapon_string == "knife_ballistic_upgraded_zm" ) + weapon = player maps\mp\zombies\_zm_melee_weapon::give_ballistic_knife( weapon_string, 1 ); + + player thread maps\mp\zombies\_zm_weapons::weapon_give( weapon_string ); + return true; +} + +bonus_points_player_powerup( item, player ) +{ + points = randomintrange( 1, 25 ) * 100; + + if ( isdefined( level.bonus_points_powerup_override ) ) + points = [[ level.bonus_points_powerup_override ]](); + + if ( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( player.sessionstate == "spectator" ) ) + player maps\mp\zombies\_zm_score::player_add_points( "bonus_points_powerup", points ); +} + +bonus_points_team_powerup( item ) +{ + points = randomintrange( 1, 25 ) * 100; + + if ( isdefined( level.bonus_points_powerup_override ) ) + points = [[ level.bonus_points_powerup_override ]](); + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( players[i].sessionstate == "spectator" ) ) + players[i] maps\mp\zombies\_zm_score::player_add_points( "bonus_points_powerup", points ); + } +} + +lose_points_team_powerup( item ) +{ + points = randomintrange( 1, 25 ) * 100; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( players[i].sessionstate == "spectator" ) ) + { + if ( 0 > players[i].score - points ) + { + players[i] maps\mp\zombies\_zm_score::minus_to_player_score( players[i].score ); + continue; + } + + players[i] maps\mp\zombies\_zm_score::minus_to_player_score( points ); + } + } +} + +lose_perk_powerup( item ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( player.sessionstate == "spectator" ) ) + player maps\mp\zombies\_zm_perks::lose_random_perk(); + } +} + +empty_clip_powerup( item ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( player.sessionstate == "spectator" ) ) + { + weapon = player getcurrentweapon(); + player setweaponammoclip( weapon, 0 ); + } + } +} + +minigun_weapon_powerup( ent_player, time ) +{ + ent_player endon( "disconnect" ); + ent_player endon( "death" ); + ent_player endon( "player_downed" ); + + if ( !isdefined( time ) ) + time = 30; + + if ( isdefined( level._minigun_time_override ) ) + time = level._minigun_time_override; + + if ( ent_player.zombie_vars["zombie_powerup_minigun_on"] && ( "minigun_zm" == ent_player getcurrentweapon() || isdefined( ent_player.has_minigun ) && ent_player.has_minigun ) ) + { + if ( ent_player.zombie_vars["zombie_powerup_minigun_time"] < time ) + ent_player.zombie_vars["zombie_powerup_minigun_time"] = time; + + return; + } + + ent_player notify( "replace_weapon_powerup" ); + ent_player._show_solo_hud = 1; + level._zombie_minigun_powerup_last_stand_func = ::minigun_watch_gunner_downed; + ent_player.has_minigun = 1; + ent_player.has_powerup_weapon = 1; + ent_player increment_is_drinking(); + ent_player._zombie_gun_before_minigun = ent_player getcurrentweapon(); + ent_player giveweapon( "minigun_zm" ); + ent_player switchtoweapon( "minigun_zm" ); + ent_player.zombie_vars["zombie_powerup_minigun_on"] = 1; + level thread minigun_weapon_powerup_countdown( ent_player, "minigun_time_over", time ); + level thread minigun_weapon_powerup_replace( ent_player, "minigun_time_over" ); +} + +minigun_weapon_powerup_countdown( ent_player, str_gun_return_notify, time ) +{ + ent_player endon( "death" ); + ent_player endon( "disconnect" ); + ent_player endon( "player_downed" ); + ent_player endon( str_gun_return_notify ); + ent_player endon( "replace_weapon_powerup" ); + setclientsysstate( "levelNotify", "minis", ent_player ); + + for ( ent_player.zombie_vars["zombie_powerup_minigun_time"] = time; ent_player.zombie_vars["zombie_powerup_minigun_time"] > 0; ent_player.zombie_vars["zombie_powerup_minigun_time"] -= 0.05 ) + wait 0.05; + + setclientsysstate( "levelNotify", "minie", ent_player ); + level thread minigun_weapon_powerup_remove( ent_player, str_gun_return_notify ); +} + +minigun_weapon_powerup_replace( ent_player, str_gun_return_notify ) +{ + ent_player endon( "death" ); + ent_player endon( "disconnect" ); + ent_player endon( "player_downed" ); + ent_player endon( str_gun_return_notify ); + + ent_player waittill( "replace_weapon_powerup" ); + + ent_player takeweapon( "minigun_zm" ); + ent_player.zombie_vars["zombie_powerup_minigun_on"] = 0; + ent_player.has_minigun = 0; + ent_player decrement_is_drinking(); +} + +minigun_weapon_powerup_remove( ent_player, str_gun_return_notify ) +{ + ent_player endon( "death" ); + ent_player endon( "player_downed" ); + ent_player takeweapon( "minigun_zm" ); + ent_player.zombie_vars["zombie_powerup_minigun_on"] = 0; + ent_player._show_solo_hud = 0; + ent_player.has_minigun = 0; + ent_player.has_powerup_weapon = 0; + ent_player notify( str_gun_return_notify ); + ent_player decrement_is_drinking(); + + if ( isdefined( ent_player._zombie_gun_before_minigun ) ) + { + player_weapons = ent_player getweaponslistprimaries(); + + for ( i = 0; i < player_weapons.size; i++ ) + { + if ( player_weapons[i] == ent_player._zombie_gun_before_minigun ) + { + ent_player switchtoweapon( ent_player._zombie_gun_before_minigun ); + return; + } + } + } + + primaryweapons = ent_player getweaponslistprimaries(); + + if ( primaryweapons.size > 0 ) + ent_player switchtoweapon( primaryweapons[0] ); + else + { + allweapons = ent_player getweaponslist( 1 ); + + for ( i = 0; i < allweapons.size; i++ ) + { + if ( is_melee_weapon( allweapons[i] ) ) + { + ent_player switchtoweapon( allweapons[i] ); + return; + } + } + } +} + +minigun_weapon_powerup_off() +{ + self.zombie_vars["zombie_powerup_minigun_time"] = 0; +} + +minigun_watch_gunner_downed() +{ + if ( !( isdefined( self.has_minigun ) && self.has_minigun ) ) + return; + + primaryweapons = self getweaponslistprimaries(); + + for ( i = 0; i < primaryweapons.size; i++ ) + { + if ( primaryweapons[i] == "minigun_zm" ) + self takeweapon( "minigun_zm" ); + } + + self notify( "minigun_time_over" ); + self.zombie_vars["zombie_powerup_minigun_on"] = 0; + self._show_solo_hud = 0; + wait 0.05; + self.has_minigun = 0; + self.has_powerup_weapon = 0; +} + +tesla_weapon_powerup( ent_player, time ) +{ + ent_player endon( "disconnect" ); + ent_player endon( "death" ); + ent_player endon( "player_downed" ); + + if ( !isdefined( time ) ) + time = 11; + + if ( ent_player.zombie_vars["zombie_powerup_tesla_on"] && ( "tesla_gun_zm" == ent_player getcurrentweapon() || isdefined( ent_player.has_tesla ) && ent_player.has_tesla ) ) + { + ent_player givemaxammo( "tesla_gun_zm" ); + + if ( ent_player.zombie_vars["zombie_powerup_tesla_time"] < time ) + ent_player.zombie_vars["zombie_powerup_tesla_time"] = time; + + return; + } + + ent_player notify( "replace_weapon_powerup" ); + ent_player._show_solo_hud = 1; + level._zombie_tesla_powerup_last_stand_func = ::tesla_watch_gunner_downed; + ent_player.has_tesla = 1; + ent_player.has_powerup_weapon = 1; + ent_player increment_is_drinking(); + ent_player._zombie_gun_before_tesla = ent_player getcurrentweapon(); + ent_player giveweapon( "tesla_gun_zm" ); + ent_player givemaxammo( "tesla_gun_zm" ); + ent_player switchtoweapon( "tesla_gun_zm" ); + ent_player.zombie_vars["zombie_powerup_tesla_on"] = 1; + level thread tesla_weapon_powerup_countdown( ent_player, "tesla_time_over", time ); + level thread tesla_weapon_powerup_replace( ent_player, "tesla_time_over" ); +} + +tesla_weapon_powerup_countdown( ent_player, str_gun_return_notify, time ) +{ + ent_player endon( "death" ); + ent_player endon( "player_downed" ); + ent_player endon( str_gun_return_notify ); + ent_player endon( "replace_weapon_powerup" ); + setclientsysstate( "levelNotify", "minis", ent_player ); + ent_player.zombie_vars["zombie_powerup_tesla_time"] = time; + + while ( true ) + { + ent_player waittill_any( "weapon_fired", "reload", "zmb_max_ammo" ); + + if ( !ent_player getweaponammostock( "tesla_gun_zm" ) ) + { + clip_count = ent_player getweaponammoclip( "tesla_gun_zm" ); + + if ( !clip_count ) + break; + else if ( 1 == clip_count ) + ent_player.zombie_vars["zombie_powerup_tesla_time"] = 1; + else if ( 3 == clip_count ) + ent_player.zombie_vars["zombie_powerup_tesla_time"] = 6; + } + else + ent_player.zombie_vars["zombie_powerup_tesla_time"] = 11; + } + + setclientsysstate( "levelNotify", "minie", ent_player ); + level thread tesla_weapon_powerup_remove( ent_player, str_gun_return_notify ); +} + +tesla_weapon_powerup_replace( ent_player, str_gun_return_notify ) +{ + ent_player endon( "death" ); + ent_player endon( "disconnect" ); + ent_player endon( "player_downed" ); + ent_player endon( str_gun_return_notify ); + + ent_player waittill( "replace_weapon_powerup" ); + + ent_player takeweapon( "tesla_gun_zm" ); + ent_player.zombie_vars["zombie_powerup_tesla_on"] = 0; + ent_player.has_tesla = 0; + ent_player decrement_is_drinking(); +} + +tesla_weapon_powerup_remove( ent_player, str_gun_return_notify ) +{ + ent_player endon( "death" ); + ent_player endon( "player_downed" ); + ent_player takeweapon( "tesla_gun_zm" ); + ent_player.zombie_vars["zombie_powerup_tesla_on"] = 0; + ent_player._show_solo_hud = 0; + ent_player.has_tesla = 0; + ent_player.has_powerup_weapon = 0; + ent_player notify( str_gun_return_notify ); + ent_player decrement_is_drinking(); + + if ( isdefined( ent_player._zombie_gun_before_tesla ) ) + { + player_weapons = ent_player getweaponslistprimaries(); + + for ( i = 0; i < player_weapons.size; i++ ) + { + if ( player_weapons[i] == ent_player._zombie_gun_before_tesla ) + { + ent_player switchtoweapon( ent_player._zombie_gun_before_tesla ); + return; + } + } + } + + primaryweapons = ent_player getweaponslistprimaries(); + + if ( primaryweapons.size > 0 ) + ent_player switchtoweapon( primaryweapons[0] ); + else + { + allweapons = ent_player getweaponslist( 1 ); + + for ( i = 0; i < allweapons.size; i++ ) + { + if ( is_melee_weapon( allweapons[i] ) ) + { + ent_player switchtoweapon( allweapons[i] ); + return; + } + } + } +} + +tesla_weapon_powerup_off() +{ + self.zombie_vars["zombie_powerup_tesla_time"] = 0; +} + +tesla_watch_gunner_downed() +{ + if ( !( isdefined( self.has_tesla ) && self.has_tesla ) ) + return; + + primaryweapons = self getweaponslistprimaries(); + + for ( i = 0; i < primaryweapons.size; i++ ) + { + if ( primaryweapons[i] == "tesla_gun_zm" ) + self takeweapon( "tesla_gun_zm" ); + } + + self notify( "tesla_time_over" ); + self.zombie_vars["zombie_powerup_tesla_on"] = 0; + self._show_solo_hud = 0; + wait 0.05; + self.has_tesla = 0; + self.has_powerup_weapon = 0; +} + +tesla_powerup_active() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].zombie_vars["zombie_powerup_tesla_on"] ) + return true; + } + + return false; +} + +print_powerup_drop( powerup, type ) +{ +/# + if ( !isdefined( level.powerup_drop_time ) ) + { + level.powerup_drop_time = 0; + level.powerup_random_count = 0; + level.powerup_score_count = 0; + } + + time = ( gettime() - level.powerup_drop_time ) * 0.001; + level.powerup_drop_time = gettime(); + + if ( type == "random" ) + level.powerup_random_count++; + else + level.powerup_score_count++; + + println( "========== POWER UP DROPPED ==========" ); + println( "DROPPED: " + powerup ); + println( "HOW IT DROPPED: " + type ); + println( "--------------------" ); + println( "Drop Time: " + time ); + println( "Random Powerup Count: " + level.powerup_random_count ); + println( "Random Powerup Count: " + level.powerup_score_count ); + println( "======================================" ); +#/ +} + +register_carpenter_node( node, callback ) +{ + if ( !isdefined( level._additional_carpenter_nodes ) ) + level._additional_carpenter_nodes = []; + + node._post_carpenter_callback = callback; + level._additional_carpenter_nodes[level._additional_carpenter_nodes.size] = node; +} + +start_carpenter_new( origin ) +{ + level.carpenter_powerup_active = 1; + window_boards = getstructarray( "exterior_goal", "targetname" ); + + if ( isdefined( level._additional_carpenter_nodes ) ) + window_boards = arraycombine( window_boards, level._additional_carpenter_nodes, 0, 0 ); + + carp_ent = spawn( "script_origin", ( 0, 0, 0 ) ); + carp_ent playloopsound( "evt_carpenter" ); + boards_near_players = get_near_boards( window_boards ); + boards_far_from_players = get_far_boards( window_boards ); + level repair_far_boards( boards_far_from_players, maps\mp\zombies\_zm_powerups::is_carpenter_boards_upgraded() ); + + for ( i = 0; i < boards_near_players.size; i++ ) + { + window = boards_near_players[i]; + num_chunks_checked = 0; + last_repaired_chunk = undefined; + + while ( true ) + { + if ( all_chunks_intact( window, window.barrier_chunks ) ) + break; + + chunk = get_random_destroyed_chunk( window, window.barrier_chunks ); + + if ( !isdefined( chunk ) ) + break; + + window thread maps\mp\zombies\_zm_blockers::replace_chunk( window, chunk, undefined, maps\mp\zombies\_zm_powerups::is_carpenter_boards_upgraded(), 1 ); + last_repaired_chunk = chunk; + + if ( isdefined( window.clip ) ) + { + window.clip enable_trigger(); + window.clip disconnectpaths(); + } + else + blocker_disconnect_paths( window.neg_start, window.neg_end ); + + wait_network_frame(); + num_chunks_checked++; + + if ( num_chunks_checked >= 20 ) + break; + } + + if ( isdefined( window.zbarrier ) ) + { + if ( isdefined( last_repaired_chunk ) ) + { + while ( window.zbarrier getzbarrierpiecestate( last_repaired_chunk ) == "closing" ) + wait 0.05; + + if ( isdefined( window._post_carpenter_callback ) ) + window [[ window._post_carpenter_callback ]](); + } + + continue; + } + + while ( isdefined( last_repaired_chunk ) && last_repaired_chunk.state == "mid_repair" ) + wait 0.05; + } + + carp_ent stoploopsound( 1 ); + carp_ent playsoundwithnotify( "evt_carpenter_end", "sound_done" ); + + carp_ent waittill( "sound_done" ); + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] maps\mp\zombies\_zm_score::player_add_points( "carpenter_powerup", 200 ); + + carp_ent delete(); + level notify( "carpenter_finished" ); + level.carpenter_powerup_active = undefined; +} + +is_carpenter_boards_upgraded() +{ + if ( isdefined( level.pers_carpenter_boards_active ) && level.pers_carpenter_boards_active == 1 ) + return true; + + return false; +} + +get_near_boards( windows ) +{ + players = get_players(); + boards_near_players = []; + + for ( j = 0; j < windows.size; j++ ) + { + close = 0; + + for ( i = 0; i < players.size; i++ ) + { + origin = undefined; + + if ( isdefined( windows[j].zbarrier ) ) + origin = windows[j].zbarrier.origin; + else + origin = windows[j].origin; + + if ( distancesquared( players[i].origin, origin ) <= level.board_repair_distance_squared ) + { + close = 1; + break; + } + } + + if ( close ) + boards_near_players[boards_near_players.size] = windows[j]; + } + + return boards_near_players; +} + +get_far_boards( windows ) +{ + players = get_players(); + boards_far_from_players = []; + + for ( j = 0; j < windows.size; j++ ) + { + close = 0; + + for ( i = 0; i < players.size; i++ ) + { + origin = undefined; + + if ( isdefined( windows[j].zbarrier ) ) + origin = windows[j].zbarrier.origin; + else + origin = windows[j].origin; + + if ( distancesquared( players[i].origin, origin ) >= level.board_repair_distance_squared ) + { + close = 1; + break; + } + } + + if ( close ) + boards_far_from_players[boards_far_from_players.size] = windows[j]; + } + + return boards_far_from_players; +} + +repair_far_boards( barriers, upgrade ) +{ + for ( i = 0; i < barriers.size; i++ ) + { + barrier = barriers[i]; + + if ( all_chunks_intact( barrier, barrier.barrier_chunks ) ) + continue; + + if ( isdefined( barrier.zbarrier ) ) + { + a_pieces = barrier.zbarrier getzbarrierpieceindicesinstate( "open" ); + + if ( isdefined( a_pieces ) ) + { + for ( xx = 0; xx < a_pieces.size; xx++ ) + { + chunk = a_pieces[xx]; + + if ( upgrade ) + { + barrier.zbarrier zbarrierpieceuseupgradedmodel( chunk ); + barrier.zbarrier.chunk_health[chunk] = barrier.zbarrier getupgradedpiecenumlives( chunk ); + continue; + } + + barrier.zbarrier zbarrierpieceusedefaultmodel( chunk ); + barrier.zbarrier.chunk_health[chunk] = 0; + } + } + + for ( x = 0; x < barrier.zbarrier getnumzbarrierpieces(); x++ ) + { + barrier.zbarrier setzbarrierpiecestate( x, "closed" ); + barrier.zbarrier showzbarrierpiece( x ); + } + } + + if ( isdefined( barrier.clip ) ) + { + barrier.clip enable_trigger(); + barrier.clip disconnectpaths(); + } + else + blocker_disconnect_paths( barrier.neg_start, barrier.neg_end ); + + if ( i % 4 == 0 ) + wait_network_frame(); + } +} + +func_should_never_drop() +{ + return 0; +} + +func_should_always_drop() +{ + return 1; +} + +func_should_drop_minigun() +{ + if ( minigun_no_drop() ) + return false; + + return true; +} + +func_should_drop_carpenter() +{ + if ( get_num_window_destroyed() < 5 ) + return false; + + return true; +} + +func_should_drop_fire_sale() +{ + if ( level.zombie_vars["zombie_powerup_fire_sale_on"] == 1 || level.chest_moves < 1 || isdefined( level.disable_firesale_drop ) && level.disable_firesale_drop ) + return false; + + return true; +} + +powerup_move() +{ + self endon( "powerup_timedout" ); + self endon( "powerup_grabbed" ); + drag_speed = 75; + + while ( true ) + { + self waittill( "move_powerup", moveto, distance ); + + drag_vector = moveto - self.origin; + range_squared = lengthsquared( drag_vector ); + + if ( range_squared > distance * distance ) + { + drag_vector = vectornormalize( drag_vector ); + drag_vector = distance * drag_vector; + moveto = self.origin + drag_vector; + } + + self.origin = moveto; + } +} + +powerup_emp() +{ + self endon( "powerup_timedout" ); + self endon( "powerup_grabbed" ); + + if ( !should_watch_for_emp() ) + return; + + while ( true ) + { + level waittill( "emp_detonate", origin, radius ); + + if ( distancesquared( origin, self.origin ) < radius * radius ) + { + playfx( level._effect["powerup_off"], self.origin ); + self thread powerup_delete_delayed(); + self notify( "powerup_timedout" ); + } + } +} + +get_powerups( origin, radius ) +{ + if ( isdefined( origin ) && isdefined( radius ) ) + { + powerups = []; + + foreach ( powerup in level.active_powerups ) + { + if ( distancesquared( origin, powerup.origin ) < radius * radius ) + powerups[powerups.size] = powerup; + } + + return powerups; + } + + return level.active_powerups; +} + +should_award_stat( powerup_name ) +{ + if ( powerup_name == "teller_withdrawl" || powerup_name == "blue_monkey" || powerup_name == "free_perk" || powerup_name == "bonus_points_player" ) + return false; + + if ( isdefined( level.statless_powerups ) && isdefined( level.statless_powerups[powerup_name] ) ) + return false; + + return true; +} + +teller_withdrawl( powerup, player ) +{ + player maps\mp\zombies\_zm_score::add_to_player_score( powerup.value ); +} diff --git a/ZM/Core/maps/mp/zombies/_zm_score.gsc b/ZM/Core/maps/mp/zombies/_zm_score.gsc new file mode 100644 index 0000000..e16f27c --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_score.gsc @@ -0,0 +1,368 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_pers_upgrades_functions; + +init() +{ + level.score_cf_info = []; + score_cf_register_info( "damage", 1, 7 ); + score_cf_register_info( "death_normal", 1, 3 ); + score_cf_register_info( "death_torso", 1, 3 ); + score_cf_register_info( "death_neck", 1, 3 ); + score_cf_register_info( "death_head", 1, 3 ); + score_cf_register_info( "death_melee", 1, 3 ); + + if ( !level.createfx_enabled ) + registerclientfield( "allplayers", "score_cf_double_points_active", 1, 1, "int" ); +} + +score_cf_register_info( name, version, max_count ) +{ + if ( level.createfx_enabled ) + return; + + info = spawnstruct(); + info.name = name; + info.cf_field = "score_cf_" + name; + info.version = version; + info.max_count = max_count; + info.bit_count = getminbitcountfornum( max_count ); + info.players = []; + level.score_cf_info[name] = info; + registerclientfield( "allplayers", info.cf_field, info.version, info.bit_count, "int" ); +} + +score_cf_increment_info( name ) +{ + info = level.score_cf_info[name]; + player_ent_index = self getentitynumber(); + + if ( !isdefined( info.players[player_ent_index] ) ) + info.players[player_ent_index] = 0; + + info.players[player_ent_index]++; + + if ( info.players[player_ent_index] > info.max_count ) + info.players[player_ent_index] = 0; + + self setclientfield( info.cf_field, info.players[player_ent_index] ); +} + +score_cf_monitor() +{ + if ( level.createfx_enabled ) + return; + + info_keys = getarraykeys( level.score_cf_info ); + + while ( true ) + { + wait_network_frame(); + players = get_players(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + { + player = players[player_index]; + player_ent_index = player getentitynumber(); + + for ( info_index = 0; info_index < info_keys.size; info_index++ ) + { + info = level.score_cf_info[info_keys[info_index]]; + info.players[player_ent_index] = 0; + player setclientfield( info.cf_field, 0 ); + } + } + } +} + +player_add_points( event, mod, hit_location, is_dog, zombie_team, damage_weapon ) +{ + if ( level.intermission ) + return; + + if ( !is_player_valid( self ) ) + return; + + player_points = 0; + team_points = 0; + multiplier = get_points_multiplier( self ); + + switch ( event ) + { + case "death": + player_points = get_zombie_death_player_points(); + team_points = get_zombie_death_team_points(); + points = self player_add_points_kill_bonus( mod, hit_location ); + + if ( level.zombie_vars[self.team]["zombie_powerup_insta_kill_on"] == 1 && mod == "MOD_UNKNOWN" ) + points *= 2; + + player_points += points; + + if ( team_points > 0 ) + team_points += points; + + if ( mod == "MOD_GRENADE" || mod == "MOD_GRENADE_SPLASH" ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "grenade_kills" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "grenade_kills" ); + } + + break; + case "ballistic_knife_death": + player_points = get_zombie_death_player_points() + level.zombie_vars["zombie_score_bonus_melee"]; + self score_cf_increment_info( "death_melee" ); + break; + case "damage_light": + player_points = level.zombie_vars["zombie_score_damage_light"]; + self score_cf_increment_info( "damage" ); + break; + case "damage": + player_points = level.zombie_vars["zombie_score_damage_normal"]; + self score_cf_increment_info( "damage" ); + break; + case "damage_ads": + player_points = int( level.zombie_vars["zombie_score_damage_normal"] * 1.25 ); + self score_cf_increment_info( "damage" ); + break; + case "rebuild_board": + case "carpenter_powerup": + player_points = mod; + break; + case "bonus_points_powerup": + player_points = mod; + break; + case "nuke_powerup": + player_points = mod; + team_points = mod; + break; + case "thundergun_fling": + case "riotshield_fling": + case "jetgun_fling": + player_points = mod; + break; + case "hacker_transfer": + player_points = mod; + break; + case "reviver": + player_points = mod; + break; + case "vulture": + player_points = mod; + break; + case "build_wallbuy": + player_points = mod; + break; + default: + assert( 0, "Unknown point event" ); + break; + } + + player_points = multiplier * round_up_score( player_points, 5 ); + team_points = multiplier * round_up_score( team_points, 5 ); + + if ( isdefined( self.point_split_receiver ) && ( event == "death" || event == "ballistic_knife_death" ) ) + { + split_player_points = player_points - round_up_score( player_points * self.point_split_keep_percent, 10 ); + self.point_split_receiver add_to_player_score( split_player_points ); + player_points -= split_player_points; + } + + if ( is_true( level.pers_upgrade_pistol_points ) ) + player_points = self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_pistol_points_set_score( player_points, event, mod, damage_weapon ); + + self add_to_player_score( player_points ); + self.pers["score"] = self.score; + + if ( isdefined( level._game_module_point_adjustment ) ) + level [[ level._game_module_point_adjustment ]]( self, zombie_team, player_points ); +} + +get_points_multiplier( player ) +{ + multiplier = level.zombie_vars[player.team]["zombie_point_scalar"]; + + if ( isdefined( level.current_game_module ) && level.current_game_module == 2 ) + { + if ( isdefined( level._race_team_double_points ) && level._race_team_double_points == player._race_team ) + return multiplier; + else + return 1; + } + + return multiplier; +} + +get_zombie_death_player_points() +{ + players = get_players(); + + if ( players.size == 1 ) + points = level.zombie_vars["zombie_score_kill_1player"]; + else if ( players.size == 2 ) + points = level.zombie_vars["zombie_score_kill_2player"]; + else if ( players.size == 3 ) + points = level.zombie_vars["zombie_score_kill_3player"]; + else + points = level.zombie_vars["zombie_score_kill_4player"]; + + return points; +} + +get_zombie_death_team_points() +{ + players = get_players(); + + if ( players.size == 1 ) + points = level.zombie_vars["zombie_score_kill_1p_team"]; + else if ( players.size == 2 ) + points = level.zombie_vars["zombie_score_kill_2p_team"]; + else if ( players.size == 3 ) + points = level.zombie_vars["zombie_score_kill_3p_team"]; + else + points = level.zombie_vars["zombie_score_kill_4p_team"]; + + return points; +} + +player_add_points_kill_bonus( mod, hit_location ) +{ + if ( mod == "MOD_MELEE" ) + { + self score_cf_increment_info( "death_melee" ); + return level.zombie_vars["zombie_score_bonus_melee"]; + } + + if ( mod == "MOD_BURNED" ) + { + self score_cf_increment_info( "death_torso" ); + return level.zombie_vars["zombie_score_bonus_burn"]; + } + + score = 0; + + if ( isdefined( hit_location ) ) + { + switch ( hit_location ) + { + case "helmet": + case "head": + self score_cf_increment_info( "death_head" ); + score = level.zombie_vars["zombie_score_bonus_head"]; + break; + case "neck": + self score_cf_increment_info( "death_neck" ); + score = level.zombie_vars["zombie_score_bonus_neck"]; + break; + case "torso_upper": + case "torso_lower": + self score_cf_increment_info( "death_torso" ); + score = level.zombie_vars["zombie_score_bonus_torso"]; + break; + default: + self score_cf_increment_info( "death_normal" ); + break; + } + } + + return score; +} + +player_reduce_points( event, mod, hit_location ) +{ + if ( level.intermission ) + return; + + points = 0; + + switch ( event ) + { + case "no_revive_penalty": + percent = level.zombie_vars["penalty_no_revive"]; + points = self.score * percent; + break; + case "died": + percent = level.zombie_vars["penalty_died"]; + points = self.score * percent; + break; + case "downed": + percent = level.zombie_vars["penalty_downed"]; + self notify( "I_am_down" ); + points = self.score * percent; + self.score_lost_when_downed = round_up_to_ten( int( points ) ); + break; + default: + assert( 0, "Unknown point event" ); + break; + } + + points = self.score - round_up_to_ten( int( points ) ); + + if ( points < 0 ) + points = 0; + + self.score = points; +} + +add_to_player_score( points, add_to_total = 1 ) +{ + if ( !isdefined( points ) || level.intermission ) + return; + + self.score += points; + self.pers["score"] = self.score; + + if ( add_to_total ) + self.score_total += points; + + self incrementplayerstat( "score", points ); +} + +minus_to_player_score( points, ignore_double_points_upgrade ) +{ + if ( !isdefined( points ) || level.intermission ) + return; + + if ( !is_true( ignore_double_points_upgrade ) ) + { + if ( is_true( level.pers_upgrade_double_points ) ) + points = maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_double_points_set_score( points ); + } + + self.score -= points; + self.pers["score"] = self.score; + level notify( "spent_points", self, points ); +} + +add_to_team_score( points ) +{ + +} + +minus_to_team_score( points ) +{ + +} + +player_died_penalty() +{ + players = get_players( self.team ); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] != self && !players[i].is_zombie ) + players[i] player_reduce_points( "no_revive_penalty" ); + } +} + +player_downed_penalty() +{ +/# + println( "ZM >> LAST STAND - player_downed_penalty " ); +#/ + self player_reduce_points( "downed" ); +} diff --git a/ZM/Core/maps/mp/zombies/_zm_server_throttle.gsc b/ZM/Core/maps/mp/zombies/_zm_server_throttle.gsc new file mode 100644 index 0000000..9860a2d --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_server_throttle.gsc @@ -0,0 +1,90 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; + +server_choke_init( id, max ) +{ + if ( !isdefined( level.zombie_server_choke_ids_max ) ) + { + level.zombie_server_choke_ids_max = []; + level.zombie_server_choke_ids_count = []; + } + + level.zombie_server_choke_ids_max[id] = max; + level.zombie_server_choke_ids_count[id] = 0; + level thread server_choke_thread( id ); +} + +server_choke_thread( id ) +{ + while ( true ) + { + wait 0.05; + level.zombie_server_choke_ids_count[id] = 0; + } +} + +server_choke_safe( id ) +{ + return level.zombie_server_choke_ids_count[id] < level.zombie_server_choke_ids_max[id]; +} + +server_choke_action( id, choke_action, arg1, arg2, arg3 ) +{ + assert( isdefined( level.zombie_server_choke_ids_max[id] ), "server Choke: " + id + " undefined" ); + + while ( !server_choke_safe( id ) ) + wait 0.05; + + level.zombie_server_choke_ids_count[id]++; + + if ( !isdefined( arg1 ) ) + return [[ choke_action ]](); + + if ( !isdefined( arg2 ) ) + return [[ choke_action ]]( arg1 ); + + if ( !isdefined( arg3 ) ) + return [[ choke_action ]]( arg1, arg2 ); + + return [[ choke_action ]]( arg1, arg2, arg3 ); +} + +server_entity_valid( entity ) +{ + if ( !isdefined( entity ) ) + return false; + + return true; +} + +server_safe_init( id, max ) +{ + if ( !isdefined( level.zombie_server_choke_ids_max ) || !isdefined( level.zombie_server_choke_ids_max[id] ) ) + server_choke_init( id, max ); + + assert( max == level.zombie_server_choke_ids_max[id] ); +} + +_server_safe_ground_trace( pos ) +{ + return groundpos( pos ); +} + +server_safe_ground_trace( id, max, origin ) +{ + server_safe_init( id, max ); + return server_choke_action( id, ::_server_safe_ground_trace, origin ); +} + +_server_safe_ground_trace_ignore_water( pos ) +{ + return groundpos_ignore_water( pos ); +} + +server_safe_ground_trace_ignore_water( id, max, origin ) +{ + server_safe_init( id, max ); + return server_choke_action( id, ::_server_safe_ground_trace_ignore_water, origin ); +} diff --git a/ZM/Core/maps/mp/zombies/_zm_sidequests.gsc b/ZM/Core/maps/mp/zombies/_zm_sidequests.gsc new file mode 100644 index 0000000..0d75a15 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_sidequests.gsc @@ -0,0 +1,1076 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; + +init_sidequests() +{ + level._sidequest_icons_base_x = -225; + level._zombie_sidequests = []; +/# + level thread sidequest_debug(); +#/ +} + +is_sidequest_allowed( a_gametypes ) +{ + if ( isdefined( level.gamedifficulty ) && level.gamedifficulty == 0 ) + return 0; + + b_is_gametype_active = 0; + + if ( !isarray( a_gametypes ) ) + a_gametypes = array( a_gametypes ); + + for ( i = 0; i < a_gametypes.size; i++ ) + { + if ( getdvar( "g_gametype" ) == a_gametypes[i] ) + b_is_gametype_active = 1; + } + + return b_is_gametype_active; +} + +sidequest_debug() +{ +/# + if ( getdvar( _hash_A7AC338D ) != "1" ) + return; + + while ( true ) + wait 1; +#/ +} + +damager_trigger_thread( dam_types, trigger_func ) +{ + while ( true ) + { + self waittill( "damage", amount, attacker, dir, point, type ); + + self.dam_amount = amount; + self.attacker = attacker; + self.dam_dir = dir; + self.dam_point = point; + self.dam_type = type; + + for ( i = 0; i < dam_types.size; i++ ) + { + if ( type == dam_types[i] ) + break; + } + } + + if ( isdefined( trigger_func ) ) + self [[ trigger_func ]](); + + self notify( "triggered" ); +} + +damage_trigger_thread() +{ + self endon( "death" ); + + while ( true ) + { + self waittill( "damage" ); + + self.owner_ent notify( "triggered" ); + } +} + +sidequest_uses_teleportation( name ) +{ + level._zombie_sidequests[name].uses_teleportation = 1; +} + +declare_sidequest_icon( sidequest_name, icon_name, shader_name ) +{ + sidequest = level._zombie_sidequests[sidequest_name]; + sidequest.icons[icon_name] = shader_name; +} + +create_icon( shader_name, x ) +{ + icon = create_simple_hud( self ); + icon.foreground = 1; + icon.sort = 2; + icon.hidewheninmenu = 0; + icon.alignx = "center"; + icon.aligny = "bottom"; + icon.horzalign = "user_right"; + icon.vertalign = "user_bottom"; + icon.x = x; + icon.y = 0; + icon.alpha = 1; + icon setshader( shader_name, 32, 32 ); + return icon; +} + +add_sidequest_icon( sidequest_name, icon_name ) +{ + if ( !isdefined( self.sidequest_icons ) ) + self.sidequest_icons = []; + + if ( isdefined( self.sidequest_icons[icon_name] ) ) + return; + + sq = level._zombie_sidequests[sidequest_name]; + base_x = level._sidequest_icons_base_x; + + if ( isdefined( level._zombiemode_sidequest_icon_offset ) ) + base_x += level._zombiemode_sidequest_icon_offset; + + self.sidequest_icons[icon_name] = self create_icon( sq.icons[icon_name], base_x + self.sidequest_icons.size * 34 ); +} + +remove_sidequest_icon( sidequest_name, icon_name ) +{ + if ( !isdefined( self.sidequest_icons ) ) + return; + + if ( !isdefined( self.sidequest_icons[icon_name] ) ) + return; + + icon = self.sidequest_icons[icon_name]; + new_array = []; + keys = getarraykeys( self.sidequest_icons ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( keys[i] != icon_name ) + new_array[keys[i]] = self.sidequest_icons[keys[i]]; + } + + self.sidequest_icons = new_array; + icon destroy(); + keys = getarraykeys( self.sidequest_icons ); + base_x = level._sidequest_icons_base_x; + + if ( isdefined( level._zombiemode_sidequest_icon_offset ) ) + base_x += level._zombiemode_sidequest_icon_offset; + + for ( i = 0; i < keys.size; i++ ) + self.sidequest_icons[keys[i]].x = base_x + i * 34; +} + +declare_sidequest( name, init_func, logic_func, complete_func, generic_stage_start_func, generic_stage_end_func ) +{ + if ( !isdefined( level._zombie_sidequests ) ) + init_sidequests(); +/# + if ( isdefined( level._zombie_sidequests[name] ) ) + { + println( "*** ERROR: Attempt to re-declare sidequest with name " + name ); + return; + } +#/ + sq = spawnstruct(); + sq.name = name; + sq.stages = []; + sq.last_completed_stage = -1; + sq.active_stage = -1; + sq.sidequest_complete = 0; + sq.init_func = init_func; + sq.logic_func = logic_func; + sq.complete_func = complete_func; + sq.generic_stage_start_func = generic_stage_start_func; + sq.generic_stage_end_func = generic_stage_end_func; + sq.assets = []; + sq.uses_teleportation = 0; + sq.active_assets = []; + sq.icons = []; + sq.num_reps = 0; + level._zombie_sidequests[name] = sq; +} + +declare_sidequest_stage( sidequest_name, stage_name, init_func, logic_func, exit_func ) +{ +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt to declare a side quest stage before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to add stage " + stage_name + " to side quest " + sidequest_name + " but no such side quest exists." ); + return; + } + + if ( isdefined( level._zombie_sidequests[sidequest_name].stages[stage_name] ) ) + { + println( "*** ERROR: Sidequest " + sidequest_name + " already has a stage called " + stage_name ); + return; + } +#/ + stage = spawnstruct(); + stage.name = stage_name; + stage.stage_number = level._zombie_sidequests[sidequest_name].stages.size; + stage.assets = []; + stage.active_assets = []; + stage.logic_func = logic_func; + stage.init_func = init_func; + stage.exit_func = exit_func; + stage.completed = 0; + stage.time_limit = 0; + level._zombie_sidequests[sidequest_name].stages[stage_name] = stage; +} + +set_stage_time_limit( sidequest_name, stage_name, time_limit, timer_func ) +{ +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt to set a side quest stage time limit before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to add timelimit to stage " + stage_name + " in side quest " + sidequest_name + " but no such side quest exists." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name].stages[stage_name] ) ) + { + println( "*** ERROR: Attempt to add timelimit to stage " + stage_name + " in Sidequest " + sidequest_name + " but stage does not exist." ); + return; + } +#/ + level._zombie_sidequests[sidequest_name].stages[stage_name].time_limit = time_limit; + level._zombie_sidequests[sidequest_name].stages[stage_name].time_limit_func = timer_func; +} + +declare_stage_asset_from_struct( sidequest_name, stage_name, target_name, thread_func, trigger_thread_func ) +{ + structs = getstructarray( target_name, "targetname" ); +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt to declare a side quest asset " + target_name + " before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " but no such side quest exists." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name].stages[stage_name] ) ) + { + println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " : " + stage_name + " but no such stage exists." ); + return; + } + + if ( !structs.size ) + { + println( "*** ERROR: No Structs with " + target_name + " not found." ); + return; + } +#/ + for ( i = 0; i < structs.size; i++ ) + { + asset = spawnstruct(); + asset.type = "struct"; + asset.struct = structs[i]; + asset.thread_func = thread_func; + asset.trigger_thread_func = trigger_thread_func; + level._zombie_sidequests[sidequest_name].stages[stage_name].assets[level._zombie_sidequests[sidequest_name].stages[stage_name].assets.size] = asset; + } +} + +declare_stage_title( sidequest_name, stage_name, title ) +{ +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt to declare a stage title " + title + " before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to declare a stage title " + title + " to side quest " + sidequest_name + " but no such side quest exists." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name].stages[stage_name] ) ) + { + println( "*** ERROR: Attempt to declare stage title " + title + " to side quest " + sidequest_name + " : " + stage_name + " but no such stage exists." ); + return; + } +#/ + level._zombie_sidequests[sidequest_name].stages[stage_name].title = title; +} + +declare_stage_asset( sidequest_name, stage_name, target_name, thread_func, trigger_thread_func ) +{ + ents = getentarray( target_name, "targetname" ); +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt to declare a side quest asset " + target_name + " before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " but no such side quest exists." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name].stages[stage_name] ) ) + { + println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " : " + stage_name + " but no such stage exists." ); + return; + } + + if ( !ents.size ) + { + println( "*** ERROR: No Ents with " + target_name + " not found." ); + return; + } +#/ + for ( i = 0; i < ents.size; i++ ) + { + asset = spawnstruct(); + asset.type = "entity"; + asset.ent = ents[i]; + asset.thread_func = thread_func; + asset.trigger_thread_func = trigger_thread_func; + level._zombie_sidequests[sidequest_name].stages[stage_name].assets[level._zombie_sidequests[sidequest_name].stages[stage_name].assets.size] = asset; + } +} + +declare_sidequest_asset( sidequest_name, target_name, thread_func, trigger_thread_func ) +{ + ents = getentarray( target_name, "targetname" ); +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt to declare a side quest asset " + target_name + " before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " but no such side quest exists." ); + return; + } + + if ( !ents.size ) + { + println( "*** ERROR: No Ents with " + target_name + " not found." ); + return; + } +#/ + for ( i = 0; i < ents.size; i++ ) + { + asset = spawnstruct(); + asset.type = "entity"; + asset.ent = ents[i]; + asset.thread_func = thread_func; + asset.trigger_thread_func = trigger_thread_func; + asset.ent.thread_func = thread_func; + asset.ent.trigger_thread_func = trigger_thread_func; + level._zombie_sidequests[sidequest_name].assets[level._zombie_sidequests[sidequest_name].assets.size] = asset; + } +} + +declare_sidequest_asset_from_struct( sidequest_name, target_name, thread_func, trigger_thread_func ) +{ + structs = getstructarray( target_name, "targetname" ); +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt to declare a side quest asset " + target_name + " before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " but no such side quest exists." ); + return; + } + + if ( !structs.size ) + { + println( "*** ERROR: No Structs with " + target_name + " not found." ); + return; + } +#/ + for ( i = 0; i < structs.size; i++ ) + { + asset = spawnstruct(); + asset.type = "struct"; + asset.struct = structs[i]; + asset.thread_func = thread_func; + asset.trigger_thread_func = trigger_thread_func; + level._zombie_sidequests[sidequest_name].assets[level._zombie_sidequests[sidequest_name].assets.size] = asset; + } +} + +build_asset_from_struct( asset, parent_struct ) +{ + ent = spawn( "script_model", asset.origin ); + + if ( isdefined( asset.model ) ) + ent setmodel( asset.model ); + + if ( isdefined( asset.angles ) ) + ent.angles = asset.angles; + + ent.script_noteworthy = asset.script_noteworthy; + ent.type = "struct"; + ent.radius = asset.radius; + ent.thread_func = parent_struct.thread_func; + ent.trigger_thread_func = parent_struct.trigger_thread_func; + ent.script_vector = parent_struct.script_vector; + asset.trigger_thread_func = parent_struct.trigger_thread_func; + asset.script_vector = parent_struct.script_vector; + ent.target = asset.target; + ent.script_float = asset.script_float; + ent.script_int = asset.script_int; + ent.script_trigger_spawnflags = asset.script_trigger_spawnflags; + ent.targetname = asset.targetname; + return ent; +} + +delete_stage_assets() +{ + for ( i = 0; i < self.active_assets.size; i++ ) + { + asset = self.active_assets[i]; + + switch ( asset.type ) + { + case "struct": + if ( isdefined( asset.trigger ) ) + { +/# + println( "Deleting trigger from struct type asset." ); +#/ + asset.trigger delete(); + asset.trigger = undefined; + } + + asset delete(); + break; + case "entity": + if ( isdefined( asset.trigger ) ) + { +/# + println( "Deleting trigger from ent type asset." ); +#/ + asset.trigger delete(); + asset.trigger = undefined; + } + + break; + } + } + + remaining_assets = []; + + for ( i = 0; i < self.active_assets.size; i++ ) + { + if ( isdefined( self.active_assets[i] ) ) + remaining_assets[remaining_assets.size] = self.active_assets[i]; + } + + self.active_assets = remaining_assets; +} + +build_assets() +{ + for ( i = 0; i < self.assets.size; i++ ) + { + asset = undefined; + + switch ( self.assets[i].type ) + { + case "struct": + asset = self.assets[i].struct; + self.active_assets[self.active_assets.size] = build_asset_from_struct( asset, self.assets[i] ); + break; + case "entity": + for ( j = 0; j < self.active_assets.size; j++ ) + { + if ( self.active_assets[j] == self.assets[i].ent ) + { + asset = self.active_assets[j]; + break; + } + } + + asset = self.assets[i].ent; + asset.type = "entity"; + self.active_assets[self.active_assets.size] = asset; + break; + default: +/# + println( "*** ERROR: Don't know how to build asset of type " + self.assets.type ); +#/ + break; + } + + if ( isdefined( asset.script_noteworthy ) && ( self.assets[i].type == "entity" && !isdefined( asset.trigger ) ) || isdefined( asset.script_noteworthy ) ) + { + trigger_radius = 15; + trigger_height = 72; + + if ( isdefined( asset.radius ) ) + trigger_radius = asset.radius; + + if ( isdefined( asset.height ) ) + trigger_height = asset.height; + + trigger_spawnflags = 0; + + if ( isdefined( asset.script_trigger_spawnflags ) ) + trigger_spawnflags = asset.script_trigger_spawnflags; + + trigger_offset = ( 0, 0, 0 ); + + if ( isdefined( asset.script_vector ) ) + trigger_offset = asset.script_vector; + + switch ( asset.script_noteworthy ) + { + case "trigger_radius_use": + use_trigger = spawn( "trigger_radius_use", asset.origin + trigger_offset, trigger_spawnflags, trigger_radius, trigger_height ); + use_trigger setcursorhint( "HINT_NOICON" ); + use_trigger triggerignoreteam(); + + if ( isdefined( asset.radius ) ) + use_trigger.radius = asset.radius; + + use_trigger.owner_ent = self.active_assets[self.active_assets.size - 1]; + + if ( isdefined( asset.trigger_thread_func ) ) + use_trigger thread [[ asset.trigger_thread_func ]](); + else + use_trigger thread use_trigger_thread(); + + self.active_assets[self.active_assets.size - 1].trigger = use_trigger; + break; + case "trigger_radius_damage": + damage_trigger = spawn( "trigger_damage", asset.origin + trigger_offset, trigger_spawnflags, trigger_radius, trigger_height ); + + if ( isdefined( asset.radius ) ) + damage_trigger.radius = asset.radius; + + damage_trigger.owner_ent = self.active_assets[self.active_assets.size - 1]; + + if ( isdefined( asset.trigger_thread_func ) ) + damage_trigger thread [[ asset.trigger_thread_func ]](); + else + damage_trigger thread damage_trigger_thread(); + + self.active_assets[self.active_assets.size - 1].trigger = damage_trigger; + break; + case "trigger_radius": + radius_trigger = spawn( "trigger_radius", asset.origin + trigger_offset, trigger_spawnflags, trigger_radius, trigger_height ); + + if ( isdefined( asset.radius ) ) + radius_trigger.radius = asset.radius; + + radius_trigger.owner_ent = self.active_assets[self.active_assets.size - 1]; + + if ( isdefined( asset.trigger_thread_func ) ) + radius_trigger thread [[ asset.trigger_thread_func ]](); + else + radius_trigger thread radius_trigger_thread(); + + self.active_assets[self.active_assets.size - 1].trigger = radius_trigger; + break; + } + } + + if ( isdefined( self.assets[i].thread_func ) && !isdefined( self.active_assets[self.active_assets.size - 1].dont_rethread ) ) + self.active_assets[self.active_assets.size - 1] thread [[ self.assets[i].thread_func ]](); + + if ( i % 2 == 0 ) + wait_network_frame(); + } +} + +radius_trigger_thread() +{ + self endon( "death" ); + + while ( true ) + { + self waittill( "trigger", player ); + + if ( !isplayer( player ) ) + continue; + + self.owner_ent notify( "triggered" ); + + while ( player istouching( self ) ) + wait 0.05; + + self.owner_ent notify( "untriggered" ); + } +} + +thread_on_assets( target_name, thread_func ) +{ + for ( i = 0; i < self.active_assets.size; i++ ) + { + if ( self.active_assets[i].targetname == target_name ) + self.active_assets[i] thread [[ thread_func ]](); + } +} + +stage_logic_func_wrapper( sidequest, stage ) +{ + if ( isdefined( stage.logic_func ) ) + { + level endon( sidequest.name + "_" + stage.name + "_over" ); + stage [[ stage.logic_func ]](); + } +} + +sidequest_start( sidequest_name ) +{ +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt start a side quest asset " + sidequest_name + " before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to start " + sidequest_name + " but no such side quest exists." ); + return; + } +#/ + sidequest = level._zombie_sidequests[sidequest_name]; + sidequest build_assets(); + + if ( isdefined( sidequest.init_func ) ) + sidequest [[ sidequest.init_func ]](); + + if ( isdefined( sidequest.logic_func ) ) + sidequest thread [[ sidequest.logic_func ]](); +} + +stage_start( sidequest, stage ) +{ + if ( isstring( sidequest ) ) + sidequest = level._zombie_sidequests[sidequest]; + + if ( isstring( stage ) ) + stage = sidequest.stages[stage]; + + stage build_assets(); + sidequest.active_stage = stage.stage_number; + level notify( sidequest.name + "_" + stage.name + "_started" ); + stage.completed = 0; + + if ( isdefined( sidequest.generic_stage_start_func ) ) + stage [[ sidequest.generic_stage_start_func ]](); + + if ( isdefined( stage.init_func ) ) + stage [[ stage.init_func ]](); + + level._last_stage_started = stage.name; + level thread stage_logic_func_wrapper( sidequest, stage ); + + if ( stage.time_limit > 0 ) + stage thread time_limited_stage( sidequest ); + + if ( isdefined( stage.title ) ) + stage thread display_stage_title( sidequest.uses_teleportation ); +} + +display_stage_title( wait_for_teleport_done_notify ) +{ + if ( wait_for_teleport_done_notify ) + { + level waittill( "teleport_done" ); + + wait 2.0; + } + + stage_text = newhudelem(); + stage_text.location = 0; + stage_text.alignx = "center"; + stage_text.aligny = "middle"; + stage_text.foreground = 1; + stage_text.fontscale = 1.6; + stage_text.sort = 20; + stage_text.x = 320; + stage_text.y = 300; + stage_text.og_scale = 1; + stage_text.color = vectorscale( ( 1, 0, 0 ), 128.0 ); + stage_text.alpha = 0; + stage_text.fontstyle3d = "shadowedmore"; + stage_text settext( self.title ); + stage_text fadeovertime( 0.5 ); + stage_text.alpha = 1; + wait 5.0; + stage_text fadeovertime( 1.0 ); + stage_text.alpha = 0; + wait 1.0; + stage_text destroy(); +} + +time_limited_stage( sidequest ) +{ +/# + println( "*** Starting timer for sidequest " + sidequest.name + " stage " + self.name + " : " + self.time_limit + " seconds." ); +#/ + level endon( sidequest.name + "_" + self.name + "_over" ); + level endon( "suspend_timer" ); + level endon( "end_game" ); + time_limit = undefined; + + if ( isdefined( self.time_limit_func ) ) + time_limit = [[ self.time_limit_func ]]() * 0.25; + else + time_limit = self.time_limit * 0.25; + + wait( time_limit ); + level notify( "timed_stage_75_percent" ); + wait( time_limit ); + level notify( "timed_stage_50_percent" ); + wait( time_limit ); + level notify( "timed_stage_25_percent" ); + wait( time_limit - 10 ); + level notify( "timed_stage_10_seconds_to_go" ); + wait 10; + stage_failed( sidequest, self ); +} + +sidequest_println( str ) +{ +/# + if ( getdvar( _hash_A7AC338D ) != "1" ) + return; + + println( str ); +#/ +} + +precache_sidequest_assets() +{ + sidequest_names = getarraykeys( level._zombie_sidequests ); + + for ( i = 0; i < sidequest_names.size; i++ ) + { + sq = level._zombie_sidequests[sidequest_names[i]]; + icon_keys = getarraykeys( sq.icons ); + + for ( j = 0; j < icon_keys.size; j++ ) + precacheshader( sq.icons[icon_keys[j]] ); + + stage_names = getarraykeys( sq.stages ); + + for ( j = 0; j < stage_names.size; j++ ) + { + stage = sq.stages[stage_names[j]]; + + for ( k = 0; k < stage.assets.size; k++ ) + { + asset = stage.assets[k]; + + if ( isdefined( asset.type ) && asset.type == "struct" ) + { + if ( isdefined( asset.model ) ) + precachemodel( asset.model ); + } + } + } + } +} + +sidequest_complete( sidequest_name ) +{ +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt to call sidequest_complete for sidequest " + sidequest_name + " before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to call sidequest_complete for sidequest " + sidequest_name + " but no such side quest exists." ); + return; + } +#/ + return level._zombie_sidequests[sidequest_name].sidequest_complete; +} + +stage_completed( sidequest_name, stage_name ) +{ +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt to call stage_complete for sidequest " + sidequest_name + " before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to call stage_complete for sidequest " + sidequest_name + " but no such side quest exists." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name].stages[stage_name] ) ) + { + println( "*** ERROR: Attempt to call stage_complete in sq " + sidequest_name + " : " + stage_name + " but no such stage exists." ); + return; + } + + println( "*** stage completed called." ); +#/ + sidequest = level._zombie_sidequests[sidequest_name]; + stage = sidequest.stages[stage_name]; + level thread stage_completed_internal( sidequest, stage ); +} + +stage_completed_internal( sidequest, stage ) +{ + level notify( sidequest.name + "_" + stage.name + "_over" ); + level notify( sidequest.name + "_" + stage.name + "_completed" ); + + if ( isdefined( sidequest.generic_stage_end_func ) ) + { +/# + println( "Calling generic end func." ); +#/ + stage [[ sidequest.generic_stage_end_func ]](); + } + + if ( isdefined( stage.exit_func ) ) + { +/# + println( "Calling stage end func." ); +#/ + stage [[ stage.exit_func ]]( 1 ); + } + + stage.completed = 1; + sidequest.last_completed_stage = sidequest.active_stage; + sidequest.active_stage = -1; + stage delete_stage_assets(); + all_complete = 1; + stage_names = getarraykeys( sidequest.stages ); + + for ( i = 0; i < stage_names.size; i++ ) + { + if ( sidequest.stages[stage_names[i]].completed == 0 ) + { + all_complete = 0; + break; + } + } + + if ( all_complete == 1 ) + { + if ( isdefined( sidequest.complete_func ) ) + sidequest thread [[ sidequest.complete_func ]](); + + level notify( "sidequest_" + sidequest.name + "_complete" ); + sidequest.sidequest_completed = 1; + } +} + +stage_failed_internal( sidequest, stage ) +{ + level notify( sidequest.name + "_" + stage.name + "_over" ); + level notify( sidequest.name + "_" + stage.name + "_failed" ); + + if ( isdefined( sidequest.generic_stage_end_func ) ) + stage [[ sidequest.generic_stage_end_func ]](); + + if ( isdefined( stage.exit_func ) ) + stage [[ stage.exit_func ]]( 0 ); + + sidequest.active_stage = -1; + stage delete_stage_assets(); +} + +stage_failed( sidequest, stage ) +{ +/# + println( "*** Stage failed called." ); +#/ + if ( isstring( sidequest ) ) + sidequest = level._zombie_sidequests[sidequest]; + + if ( isstring( stage ) ) + stage = sidequest.stages[stage]; + + level thread stage_failed_internal( sidequest, stage ); +} + +get_sidequest_stage( sidequest, stage_number ) +{ + stage = undefined; + stage_names = getarraykeys( sidequest.stages ); + + for ( i = 0; i < stage_names.size; i++ ) + { + if ( sidequest.stages[stage_names[i]].stage_number == stage_number ) + { + stage = sidequest.stages[stage_names[i]]; + break; + } + } + + return stage; +} + +get_damage_trigger( radius, origin, damage_types ) +{ + trig = spawn( "trigger_damage", origin, 0, radius, 72 ); + trig thread dam_trigger_thread( damage_types ); + return trig; +} + +dam_trigger_thread( damage_types ) +{ + self endon( "death" ); + damage_type = "NONE"; + + while ( true ) + { + self waittill( "damage", amount, attacker, dir, point, mod ); + + for ( i = 0; i < damage_types.size; i++ ) + { + if ( mod == damage_types[i] ) + self notify( "triggered" ); + } + } +} + +use_trigger_thread() +{ + self endon( "death" ); + + while ( true ) + { + self waittill( "trigger", player ); + + self.owner_ent notify( "triggered", player ); + wait 0.1; + } +} + +sidequest_stage_active( sidequest_name, stage_name ) +{ + sidequest = level._zombie_sidequests[sidequest_name]; + stage = sidequest.stages[stage_name]; + + if ( sidequest.active_stage == stage.stage_number ) + return true; + else + return false; +} + +sidequest_start_next_stage( sidequest_name ) +{ +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt start next stage in side quest asset " + sidequest_name + " before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to start next sidequest in sidequest " + sidequest_name + " but no such side quest exists." ); + return; + } +#/ + sidequest = level._zombie_sidequests[sidequest_name]; + + if ( sidequest.sidequest_complete == 1 ) + return; + + last_completed = sidequest.last_completed_stage; + + if ( last_completed == -1 ) + last_completed = 0; + else + last_completed++; + + stage = get_sidequest_stage( sidequest, last_completed ); + + if ( !isdefined( stage ) ) + { +/# + println( "*** ERROR: Sidequest " + sidequest_name + " has no stage number " + last_completed ); +#/ + return; + } + + stage_start( sidequest, stage ); + return stage; +} + +main() +{ + +} + +is_facing( facee ) +{ + orientation = self getplayerangles(); + forwardvec = anglestoforward( orientation ); + forwardvec2d = ( forwardvec[0], forwardvec[1], 0 ); + unitforwardvec2d = vectornormalize( forwardvec2d ); + tofaceevec = facee.origin - self.origin; + tofaceevec2d = ( tofaceevec[0], tofaceevec[1], 0 ); + unittofaceevec2d = vectornormalize( tofaceevec2d ); + dotproduct = vectordot( unitforwardvec2d, unittofaceevec2d ); + return dotproduct > 0.9; +} + +fake_use( notify_string, qualifier_func ) +{ + waittillframeend; + + while ( true ) + { + if ( !isdefined( self ) ) + return; +/# + print3d( self.origin, "+", vectorscale( ( 0, 1, 0 ), 255.0 ), 1 ); +#/ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + qualifier_passed = 1; + + if ( isdefined( qualifier_func ) ) + qualifier_passed = players[i] [[ qualifier_func ]](); + + if ( qualifier_passed && distancesquared( self.origin, players[i].origin ) < 4096 ) + { + if ( players[i] is_facing( self ) ) + { + if ( players[i] usebuttonpressed() ) + { + self notify( notify_string, players[i] ); + return; + } + } + } + } + + wait 0.1; + } +} diff --git a/ZM/Core/maps/mp/zombies/_zm_spawner.gsc b/ZM/Core/maps/mp/zombies/_zm_spawner.gsc new file mode 100644 index 0000000..1b354a0 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_spawner.gsc @@ -0,0 +1,3069 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_blockers; +#include maps\mp\animscripts\zm_death; +#include maps\mp\animscripts\zm_run; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_pers_upgrades; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_ai_faller; + +init() +{ + level._contextual_grab_lerp_time = 0.3; + level.zombie_spawners = getentarray( "zombie_spawner", "script_noteworthy" ); + + if ( isdefined( level.use_multiple_spawns ) && level.use_multiple_spawns ) + { + level.zombie_spawn = []; + + for ( i = 0; i < level.zombie_spawners.size; i++ ) + { + if ( isdefined( level.zombie_spawners[i].script_int ) ) + { + int = level.zombie_spawners[i].script_int; + + if ( !isdefined( level.zombie_spawn[int] ) ) + level.zombie_spawn[int] = []; + + level.zombie_spawn[int][level.zombie_spawn[int].size] = level.zombie_spawners[i]; + } + } + } + + precachemodel( "p6_anim_zm_barricade_board_01_upgrade" ); + precachemodel( "p6_anim_zm_barricade_board_02_upgrade" ); + precachemodel( "p6_anim_zm_barricade_board_03_upgrade" ); + precachemodel( "p6_anim_zm_barricade_board_04_upgrade" ); + precachemodel( "p6_anim_zm_barricade_board_05_upgrade" ); + precachemodel( "p6_anim_zm_barricade_board_06_upgrade" ); + + if ( isdefined( level.ignore_spawner_func ) ) + { + for ( i = 0; i < level.zombie_spawners.size; i++ ) + { + ignore = [[ level.ignore_spawner_func ]]( level.zombie_spawners[i] ); + + if ( ignore ) + arrayremovevalue( level.zombie_spawners, level.zombie_spawners[i] ); + } + } + + gametype = getdvar( "ui_gametype" ); + + if ( !isdefined( level.attack_player_thru_boards_range ) ) + level.attack_player_thru_boards_range = 109.8; + + if ( isdefined( level._game_module_custom_spawn_init_func ) ) + [[ level._game_module_custom_spawn_init_func ]](); + + registerclientfield( "actor", "zombie_has_eyes", 1, 1, "int" ); + registerclientfield( "actor", "zombie_ragdoll_explode", 1, 1, "int" ); + registerclientfield( "actor", "zombie_gut_explosion", 9000, 1, "int" ); +} + +add_cusom_zombie_spawn_logic( func ) +{ + if ( !isdefined( level._zombie_custom_spawn_logic ) ) + level._zombie_custom_spawn_logic = []; + + level._zombie_custom_spawn_logic[level._zombie_custom_spawn_logic.size] = func; +} + +player_attacks_enemy( player, amount, type, point ) +{ + team = undefined; + + if ( isdefined( self._race_team ) ) + team = self._race_team; + + if ( !isads( player ) ) + { + [[ level.global_damage_func ]]( type, self.damagelocation, point, player, amount, team ); + return false; + } + + if ( !bullet_attack( type ) ) + { + [[ level.global_damage_func ]]( type, self.damagelocation, point, player, amount, team ); + return false; + } + + [[ level.global_damage_func_ads ]]( type, self.damagelocation, point, player, amount, team ); + return true; +} + +player_attacker( attacker ) +{ + if ( isplayer( attacker ) ) + return true; + + return false; +} + +enemy_death_detection() +{ + self endon( "death" ); + + for (;;) + { + self waittill( "damage", amount, attacker, direction_vec, point, type ); + + if ( !isdefined( amount ) ) + continue; + + if ( !isalive( self ) || self.delayeddeath ) + return; + + if ( !player_attacker( attacker ) ) + continue; + + self.has_been_damaged_by_player = 1; + self player_attacks_enemy( attacker, amount, type, point ); + } +} + +is_spawner_targeted_by_blocker( ent ) +{ + if ( isdefined( ent.targetname ) ) + { + targeters = getentarray( ent.targetname, "target" ); + + for ( i = 0; i < targeters.size; i++ ) + { + if ( targeters[i].targetname == "zombie_door" || targeters[i].targetname == "zombie_debris" ) + return true; + + result = is_spawner_targeted_by_blocker( targeters[i] ); + + if ( result ) + return true; + } + } + + return false; +} + +add_custom_zombie_spawn_logic( func ) +{ + if ( !isdefined( level._zombie_custom_spawn_logic ) ) + level._zombie_custom_spawn_logic = []; + + level._zombie_custom_spawn_logic[level._zombie_custom_spawn_logic.size] = func; +} + +zombie_spawn_init( animname_set = 0 ) +{ + self.targetname = "zombie"; + self.script_noteworthy = undefined; + recalc_zombie_array(); + + if ( !animname_set ) + self.animname = "zombie"; + + if ( isdefined( get_gamemode_var( "pre_init_zombie_spawn_func" ) ) ) + self [[ get_gamemode_var( "pre_init_zombie_spawn_func" ) ]](); + + self thread play_ambient_zombie_vocals(); + self.zmb_vocals_attack = "zmb_vocals_zombie_attack"; + self.ignoreall = 1; + self.ignoreme = 1; + self.allowdeath = 1; + self.force_gib = 1; + self.is_zombie = 1; + self.has_legs = 1; + self allowedstances( "stand" ); + self.zombie_damaged_by_bar_knockdown = 0; + self.gibbed = 0; + self.head_gibbed = 0; + self setphysparams( 15, 0, 72 ); + self.disablearrivals = 1; + self.disableexits = 1; + self.grenadeawareness = 0; + self.badplaceawareness = 0; + self.ignoresuppression = 1; + self.suppressionthreshold = 1; + self.nododgemove = 1; + self.dontshootwhilemoving = 1; + self.pathenemylookahead = 0; + self.badplaceawareness = 0; + self.chatinitialized = 0; + self.a.disablepain = 1; + self disable_react(); + + if ( isdefined( level.zombie_health ) ) + { + self.maxhealth = level.zombie_health; + + if ( isdefined( level.zombie_respawned_health ) && level.zombie_respawned_health.size > 0 ) + { + self.health = level.zombie_respawned_health[0]; + arrayremovevalue( level.zombie_respawned_health, level.zombie_respawned_health[0] ); + } + else + self.health = level.zombie_health; + } + else + { + self.maxhealth = level.zombie_vars["zombie_health_start"]; + self.health = self.maxhealth; + } + + self.freezegun_damage = 0; + self.dropweapon = 0; + level thread zombie_death_event( self ); + self init_zombie_run_cycle(); + self thread zombie_think(); + self thread zombie_gib_on_damage(); + self thread zombie_damage_failsafe(); + self thread enemy_death_detection(); + + if ( isdefined( level._zombie_custom_spawn_logic ) ) + { + if ( isarray( level._zombie_custom_spawn_logic ) ) + { + for ( i = 0; i < level._zombie_custom_spawn_logic.size; i++ ) + self thread [[ level._zombie_custom_spawn_logic[i] ]](); + } + else + self thread [[ level._zombie_custom_spawn_logic ]](); + } + + if ( !isdefined( self.no_eye_glow ) || !self.no_eye_glow ) + { + if ( !( isdefined( self.is_inert ) && self.is_inert ) ) + self thread delayed_zombie_eye_glow(); + } + + self.deathfunction = ::zombie_death_animscript; + self.flame_damage_time = 0; + self.meleedamage = 60; + self.no_powerups = 1; + self zombie_history( "zombie_spawn_init -> Spawned = " + self.origin ); + self.thundergun_knockdown_func = level.basic_zombie_thundergun_knockdown; + self.tesla_head_gib_func = ::zombie_tesla_head_gib; + self.team = level.zombie_team; + + if ( isdefined( level.achievement_monitor_func ) ) + self [[ level.achievement_monitor_func ]](); + + if ( isdefined( get_gamemode_var( "post_init_zombie_spawn_func" ) ) ) + self [[ get_gamemode_var( "post_init_zombie_spawn_func" ) ]](); + + if ( isdefined( level.zombie_init_done ) ) + self [[ level.zombie_init_done ]](); + + self.zombie_init_done = 1; + self notify( "zombie_init_done" ); +} + +delayed_zombie_eye_glow() +{ + self endon( "zombie_delete" ); + + if ( isdefined( self.in_the_ground ) && self.in_the_ground || isdefined( self.in_the_ceiling ) && self.in_the_ceiling ) + { + while ( !isdefined( self.create_eyes ) ) + wait 0.1; + } + else + wait 0.5; + + self zombie_eye_glow(); +} + +zombie_damage_failsafe() +{ + self endon( "death" ); + continue_failsafe_damage = 0; + + while ( true ) + { + wait 0.5; + + if ( !isdefined( self.enemy ) || !isplayer( self.enemy ) ) + continue; + + if ( self istouching( self.enemy ) ) + { + old_org = self.origin; + + if ( !continue_failsafe_damage ) + wait 5; + + if ( !isdefined( self.enemy ) || !isplayer( self.enemy ) || self.enemy hasperk( "specialty_armorvest" ) ) + continue; + + if ( self istouching( self.enemy ) && !self.enemy maps\mp\zombies\_zm_laststand::player_is_in_laststand() && isalive( self.enemy ) ) + { + if ( distancesquared( old_org, self.origin ) < 3600 ) + { + self.enemy dodamage( self.enemy.health + 1000, self.enemy.origin, self, self, "none", "MOD_RIFLE_BULLET" ); + continue_failsafe_damage = 1; + } + } + } + else + continue_failsafe_damage = 0; + } +} + +should_skip_teardown( find_flesh_struct_string ) +{ + if ( isdefined( find_flesh_struct_string ) && find_flesh_struct_string == "find_flesh" ) + return true; + + if ( isdefined( self.script_string ) && self.script_string == "zombie_chaser" ) + return true; + + return false; +} + +zombie_think() +{ + self endon( "death" ); + assert( !self.isdog ); + self.ai_state = "zombie_think"; + find_flesh_struct_string = undefined; + + if ( isdefined( level.zombie_custom_think_logic ) ) + { + shouldwait = self [[ level.zombie_custom_think_logic ]](); + + if ( shouldwait ) + self waittill( "zombie_custom_think_done", find_flesh_struct_string ); + } + else if ( isdefined( self.start_inert ) && self.start_inert ) + find_flesh_struct_string = "find_flesh"; + else + { + if ( isdefined( self.custom_location ) ) + self thread [[ self.custom_location ]](); + else + self thread do_zombie_spawn(); + + self waittill( "risen", find_flesh_struct_string ); + } + + node = undefined; + desired_nodes = []; + self.entrance_nodes = []; + + if ( isdefined( level.max_barrier_search_dist_override ) ) + max_dist = level.max_barrier_search_dist_override; + else + max_dist = 500; + + if ( !isdefined( find_flesh_struct_string ) && isdefined( self.target ) && self.target != "" ) + { + desired_origin = get_desired_origin(); + assert( isdefined( desired_origin ), "Spawner @ " + self.origin + " has a .target but did not find a target" ); + origin = desired_origin; + node = getclosest( origin, level.exterior_goals ); + self.entrance_nodes[self.entrance_nodes.size] = node; + self zombie_history( "zombie_think -> #1 entrance (script_forcegoal) origin = " + self.entrance_nodes[0].origin ); + } + else if ( self should_skip_teardown( find_flesh_struct_string ) ) + { + self zombie_setup_attack_properties(); + + if ( isdefined( self.target ) ) + { + end_at_node = getnode( self.target, "targetname" ); + + if ( isdefined( end_at_node ) ) + { + self setgoalnode( end_at_node ); + + self waittill( "goal" ); + } + } + + if ( isdefined( self.start_inert ) && self.start_inert ) + { + self thread maps\mp\zombies\_zm_ai_basic::start_inert( 1 ); + self zombie_complete_emerging_into_playable_area(); + } + else + { + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); + self thread zombie_entered_playable(); + } + + return; + } + else if ( isdefined( find_flesh_struct_string ) ) + { + assert( isdefined( find_flesh_struct_string ) ); + + for ( i = 0; i < level.exterior_goals.size; i++ ) + { + if ( isdefined( level.exterior_goals[i].script_string ) && level.exterior_goals[i].script_string == find_flesh_struct_string ) + { + node = level.exterior_goals[i]; + break; + } + } + + self.entrance_nodes[self.entrance_nodes.size] = node; + self zombie_history( "zombie_think -> #1 entrance origin = " + node.origin ); + self thread zombie_assure_node(); + } + else + { + origin = self.origin; + desired_origin = get_desired_origin(); + + if ( isdefined( desired_origin ) ) + origin = desired_origin; + + nodes = get_array_of_closest( origin, level.exterior_goals, undefined, 3 ); + desired_nodes[0] = nodes[0]; + prev_dist = distance( self.origin, nodes[0].origin ); + + for ( i = 1; i < nodes.size; i++ ) + { + dist = distance( self.origin, nodes[i].origin ); + + if ( dist - prev_dist > max_dist ) + break; + + prev_dist = dist; + desired_nodes[i] = nodes[i]; + } + + node = desired_nodes[0]; + + if ( desired_nodes.size > 1 ) + node = desired_nodes[randomint( desired_nodes.size )]; + + self.entrance_nodes = desired_nodes; + self zombie_history( "zombie_think -> #1 entrance origin = " + node.origin ); + self thread zombie_assure_node(); + } + + assert( isdefined( node ), "Did not find a node!!! [Should not see this!]" ); + level thread draw_line_ent_to_pos( self, node.origin, "goal" ); + self.first_node = node; + self thread zombie_goto_entrance( node ); +} + +zombie_entered_playable() +{ + self endon( "death" ); + + if ( !isdefined( level.playable_areas ) ) + level.playable_areas = getentarray( "player_volume", "script_noteworthy" ); + + while ( true ) + { + foreach ( area in level.playable_areas ) + { + if ( self istouching( area ) ) + { + self zombie_complete_emerging_into_playable_area(); + return; + } + } + + wait 1; + } +} + +get_desired_origin() +{ + if ( isdefined( self.target ) ) + { + ent = getent( self.target, "targetname" ); + + if ( !isdefined( ent ) ) + ent = getstruct( self.target, "targetname" ); + + if ( !isdefined( ent ) ) + ent = getnode( self.target, "targetname" ); + + assert( isdefined( ent ), "Cannot find the targeted ent/node/struct, \"" + self.target + "\" at " + self.origin ); + return ent.origin; + } + + return undefined; +} + +zombie_goto_entrance( node, endon_bad_path ) +{ + assert( !self.isdog ); + self endon( "death" ); + self endon( "stop_zombie_goto_entrance" ); + level endon( "intermission" ); + self.ai_state = "zombie_goto_entrance"; + + if ( isdefined( endon_bad_path ) && endon_bad_path ) + self endon( "bad_path" ); + + self zombie_history( "zombie_goto_entrance -> start goto entrance " + node.origin ); + self.got_to_entrance = 0; + self.goalradius = 128; + self setgoalpos( node.origin ); + + self waittill( "goal" ); + + self.got_to_entrance = 1; + self zombie_history( "zombie_goto_entrance -> reached goto entrance " + node.origin ); + self tear_into_building(); + + if ( isdefined( level.pre_aggro_pathfinding_func ) ) + self [[ level.pre_aggro_pathfinding_func ]](); + + barrier_pos = []; + barrier_pos[0] = "m"; + barrier_pos[1] = "r"; + barrier_pos[2] = "l"; + self.barricade_enter = 1; + animstate = maps\mp\animscripts\zm_utility::append_missing_legs_suffix( "zm_barricade_enter" ); + substate = "barrier_" + self.zombie_move_speed + "_" + barrier_pos[self.attacking_spot_index]; + self animscripted( self.first_node.zbarrier.origin, self.first_node.zbarrier.angles, animstate, substate ); + maps\mp\animscripts\zm_shared::donotetracks( "barricade_enter_anim" ); + self zombie_setup_attack_properties(); + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); + self.pathenemyfightdist = 4; + self zombie_complete_emerging_into_playable_area(); + self.pathenemyfightdist = 64; + self.barricade_enter = 0; +} + +zombie_assure_node() +{ + self endon( "death" ); + self endon( "goal" ); + level endon( "intermission" ); + start_pos = self.origin; + + if ( isdefined( self.entrance_nodes ) ) + { + for ( i = 0; i < self.entrance_nodes.size; i++ ) + { + if ( self zombie_bad_path() ) + { + self zombie_history( "zombie_assure_node -> assigned assured node = " + self.entrance_nodes[i].origin ); +/# + println( "^1Zombie @ " + self.origin + " did not move for 1 second. Going to next closest node @ " + self.entrance_nodes[i].origin ); +#/ + level thread draw_line_ent_to_pos( self, self.entrance_nodes[i].origin, "goal" ); + self.first_node = self.entrance_nodes[i]; + self setgoalpos( self.entrance_nodes[i].origin ); + continue; + } + + return; + } + } + + wait 2; + nodes = get_array_of_closest( self.origin, level.exterior_goals, undefined, 20 ); + + if ( isdefined( nodes ) ) + { + self.entrance_nodes = nodes; + + for ( i = 0; i < self.entrance_nodes.size; i++ ) + { + if ( self zombie_bad_path() ) + { + self zombie_history( "zombie_assure_node -> assigned assured node = " + self.entrance_nodes[i].origin ); +/# + println( "^1Zombie @ " + self.origin + " did not move for 1 second. Going to next closest node @ " + self.entrance_nodes[i].origin ); +#/ + level thread draw_line_ent_to_pos( self, self.entrance_nodes[i].origin, "goal" ); + self.first_node = self.entrance_nodes[i]; + self setgoalpos( self.entrance_nodes[i].origin ); + continue; + } + + return; + } + } + + self zombie_history( "zombie_assure_node -> failed to find a good entrance point" ); + wait 20; + self dodamage( self.health + 10, self.origin ); + level.zombies_timeout_spawn++; +} + +zombie_bad_path() +{ + self endon( "death" ); + self endon( "goal" ); + self thread zombie_bad_path_notify(); + self thread zombie_bad_path_timeout(); + self.zombie_bad_path = undefined; + + while ( !isdefined( self.zombie_bad_path ) ) + wait 0.05; + + self notify( "stop_zombie_bad_path" ); + return self.zombie_bad_path; +} + +zombie_bad_path_notify() +{ + self endon( "death" ); + self endon( "stop_zombie_bad_path" ); + + self waittill( "bad_path" ); + + self.zombie_bad_path = 1; +} + +zombie_bad_path_timeout() +{ + self endon( "death" ); + self endon( "stop_zombie_bad_path" ); + wait 2; + self.zombie_bad_path = 0; +} + +tear_into_building() +{ + self endon( "death" ); + self endon( "teleporting" ); + self zombie_history( "tear_into_building -> start" ); + + while ( true ) + { + if ( isdefined( self.first_node.script_noteworthy ) ) + { + if ( self.first_node.script_noteworthy == "no_blocker" ) + return; + } + + if ( !isdefined( self.first_node.target ) ) + return; + + if ( all_chunks_destroyed( self.first_node, self.first_node.barrier_chunks ) ) + self zombie_history( "tear_into_building -> all chunks destroyed" ); + + if ( !get_attack_spot( self.first_node ) ) + { + self zombie_history( "tear_into_building -> Could not find an attack spot" ); + self thread do_a_taunt(); + wait 0.5; + continue; + } + + self.goalradius = 2; + + if ( isdefined( level.tear_into_position ) ) + self [[ level.tear_into_position ]](); + else + { + angles = self.first_node.zbarrier.angles; + self setgoalpos( self.attacking_spot, angles ); + } + + self waittill( "goal" ); + + if ( isdefined( level.tear_into_wait ) ) + self [[ level.tear_into_wait ]](); + else + self waittill_notify_or_timeout( "orientdone", 1 ); + + self zombie_history( "tear_into_building -> Reach position and orientated" ); + + if ( all_chunks_destroyed( self.first_node, self.first_node.barrier_chunks ) ) + { + self zombie_history( "tear_into_building -> all chunks destroyed" ); + + for ( i = 0; i < self.first_node.attack_spots_taken.size; i++ ) + self.first_node.attack_spots_taken[i] = 0; + + return; + } + + while ( true ) + { + if ( isdefined( self.zombie_board_tear_down_callback ) ) + self [[ self.zombie_board_tear_down_callback ]](); + + chunk = get_closest_non_destroyed_chunk( self.origin, self.first_node, self.first_node.barrier_chunks ); + + if ( !isdefined( chunk ) ) + { + if ( !all_chunks_destroyed( self.first_node, self.first_node.barrier_chunks ) ) + { + attack = self should_attack_player_thru_boards(); + + if ( isdefined( attack ) && !attack && self.has_legs ) + self do_a_taunt(); + else + wait 0.1; + + continue; + } + + for ( i = 0; i < self.first_node.attack_spots_taken.size; i++ ) + self.first_node.attack_spots_taken[i] = 0; + + return; + } + + self zombie_history( "tear_into_building -> animating" ); + self.first_node.zbarrier setzbarrierpiecestate( chunk, "targetted_by_zombie" ); + self.first_node thread check_zbarrier_piece_for_zombie_inert( chunk, self.first_node.zbarrier, self ); + self.first_node thread check_zbarrier_piece_for_zombie_death( chunk, self.first_node.zbarrier, self ); + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "teardown", self.animname ); + + if ( isdefined( level.zbarrier_override_tear_in ) ) + animstatebase = self [[ level.zbarrier_override_tear_in ]]( chunk ); + else + animstatebase = self.first_node.zbarrier getzbarrierpieceanimstate( chunk ); + + animsubstate = "spot_" + self.attacking_spot_index + "_piece_" + self.first_node.zbarrier getzbarrierpieceanimsubstate( chunk ); + anim_sub_index = self getanimsubstatefromasd( animstatebase + "_in", animsubstate ); + self animscripted( self.first_node.zbarrier.origin, self.first_node.zbarrier.angles, maps\mp\animscripts\zm_utility::append_missing_legs_suffix( animstatebase + "_in" ), anim_sub_index ); + self zombie_tear_notetracks( "tear_anim", chunk, self.first_node ); + + while ( 0 < self.first_node.zbarrier.chunk_health[chunk] ) + { + self animscripted( self.first_node.zbarrier.origin, self.first_node.zbarrier.angles, maps\mp\animscripts\zm_utility::append_missing_legs_suffix( animstatebase + "_loop" ), anim_sub_index ); + self zombie_tear_notetracks( "tear_anim", chunk, self.first_node ); + self.first_node.zbarrier.chunk_health[chunk]--; + } + + self animscripted( self.first_node.zbarrier.origin, self.first_node.zbarrier.angles, maps\mp\animscripts\zm_utility::append_missing_legs_suffix( animstatebase + "_out" ), anim_sub_index ); + self zombie_tear_notetracks( "tear_anim", chunk, self.first_node ); + self.lastchunk_destroy_time = gettime(); + attack = self should_attack_player_thru_boards(); + + if ( isdefined( attack ) && !attack && self.has_legs ) + self do_a_taunt(); + + if ( all_chunks_destroyed( self.first_node, self.first_node.barrier_chunks ) ) + { + for ( i = 0; i < self.first_node.attack_spots_taken.size; i++ ) + self.first_node.attack_spots_taken[i] = 0; + + level notify( "last_board_torn", self.first_node.zbarrier.origin ); + return; + } + } + + self reset_attack_spot(); + } +} + +do_a_taunt() +{ + self endon( "death" ); + + if ( !self.has_legs ) + return 0; + + if ( !self.first_node.zbarrier zbarriersupportszombietaunts() ) + return; + + self.old_origin = self.origin; + + if ( getdvar( _hash_6896A7C3 ) == "" ) + setdvar( "zombie_taunt_freq", "5" ); + + freq = getdvarint( _hash_6896A7C3 ); + + if ( freq >= randomint( 100 ) ) + { + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "taunt", self.animname ); + tauntstate = "zm_taunt"; + + if ( isdefined( self.first_node.zbarrier ) && self.first_node.zbarrier getzbarriertauntanimstate() != "" ) + tauntstate = self.first_node.zbarrier getzbarriertauntanimstate(); + + self animscripted( self.origin, self.angles, tauntstate ); + self taunt_notetracks( "taunt_anim" ); + } +} + +taunt_notetracks( msg ) +{ + self endon( "death" ); + + while ( true ) + { + self waittill( msg, notetrack ); + + if ( notetrack == "end" ) + { + self forceteleport( self.old_origin ); + return; + } + } +} + +should_attack_player_thru_boards() +{ + if ( !self.has_legs ) + return false; + + if ( isdefined( self.first_node.zbarrier ) ) + { + if ( !self.first_node.zbarrier zbarriersupportszombiereachthroughattacks() ) + return false; + } + + if ( getdvar( _hash_4A4203B1 ) == "" ) + setdvar( "zombie_reachin_freq", "50" ); + + freq = getdvarint( _hash_4A4203B1 ); + players = get_players(); + attack = 0; + self.player_targets = []; + + for ( i = 0; i < players.size; i++ ) + { + if ( isalive( players[i] ) && !isdefined( players[i].revivetrigger ) && distance2d( self.origin, players[i].origin ) <= level.attack_player_thru_boards_range && !( isdefined( players[i].zombie_vars["zombie_powerup_zombie_blood_on"] ) && players[i].zombie_vars["zombie_powerup_zombie_blood_on"] ) ) + { + self.player_targets[self.player_targets.size] = players[i]; + attack = 1; + } + } + + if ( !attack || freq < randomint( 100 ) ) + return false; + + self.old_origin = self.origin; + attackanimstate = "zm_window_melee"; + + if ( isdefined( self.first_node.zbarrier ) && self.first_node.zbarrier getzbarrierreachthroughattackanimstate() != "" ) + attackanimstate = self.first_node.zbarrier getzbarrierreachthroughattackanimstate(); + + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "attack", self.animname ); + self animscripted( self.origin, self.angles, attackanimstate, self.attacking_spot_index - 1 ); + self window_notetracks( "window_melee_anim" ); + return true; +} + +window_notetracks( msg ) +{ + self endon( "death" ); + + while ( true ) + { + self waittill( msg, notetrack ); + + if ( notetrack == "end" ) + { + self teleport( self.old_origin ); + return; + } + + if ( notetrack == "fire" ) + { + if ( self.ignoreall ) + self.ignoreall = 0; + + if ( isdefined( self.first_node ) ) + { + _melee_dist_sq = 8100; + + if ( isdefined( level.attack_player_thru_boards_range ) ) + _melee_dist_sq = level.attack_player_thru_boards_range * level.attack_player_thru_boards_range; + + _trigger_dist_sq = 2601; + + for ( i = 0; i < self.player_targets.size; i++ ) + { + playerdistsq = distance2dsquared( self.player_targets[i].origin, self.origin ); + heightdiff = abs( self.player_targets[i].origin[2] - self.origin[2] ); + + if ( playerdistsq < _melee_dist_sq && heightdiff * heightdiff < _melee_dist_sq ) + { + triggerdistsq = distance2dsquared( self.player_targets[i].origin, self.first_node.trigger_location.origin ); + heightdiff = abs( self.player_targets[i].origin[2] - self.first_node.trigger_location.origin[2] ); + + if ( triggerdistsq < _trigger_dist_sq && heightdiff * heightdiff < _trigger_dist_sq ) + { + self.player_targets[i] dodamage( self.meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); + break; + } + } + } + } + else + self melee(); + } + } +} + +reset_attack_spot() +{ + if ( isdefined( self.attacking_node ) ) + { + node = self.attacking_node; + index = self.attacking_spot_index; + node.attack_spots_taken[index] = 0; + self.attacking_node = undefined; + self.attacking_spot_index = undefined; + } +} + +get_attack_spot( node ) +{ + index = get_attack_spot_index( node ); + + if ( !isdefined( index ) ) + return false; + + self.attacking_node = node; + self.attacking_spot_index = index; + node.attack_spots_taken[index] = 1; + self.attacking_spot = node.attack_spots[index]; + return true; +} + +get_attack_spot_index( node ) +{ + indexes = []; + + for ( i = 0; i < node.attack_spots.size; i++ ) + { + if ( !node.attack_spots_taken[i] ) + indexes[indexes.size] = i; + } + + if ( indexes.size == 0 ) + return undefined; + + return indexes[randomint( indexes.size )]; +} + +zombie_tear_notetracks( msg, chunk, node ) +{ + self endon( "death" ); + + while ( true ) + { + self waittill( msg, notetrack ); + + if ( notetrack == "end" ) + return; + + if ( notetrack == "board" || notetrack == "destroy_piece" || notetrack == "bar" ) + { + if ( isdefined( level.zbarrier_zombie_tear_notetrack_override ) ) + self thread [[ level.zbarrier_zombie_tear_notetrack_override ]]( node, chunk ); + + node.zbarrier setzbarrierpiecestate( chunk, "opening" ); + } + } +} + +zombie_boardtear_offset_fx_horizontle( chunk, node ) +{ + if ( isdefined( chunk.script_parameters ) && ( chunk.script_parameters == "repair_board" || chunk.script_parameters == "board" ) ) + { + if ( isdefined( chunk.unbroken ) && chunk.unbroken == 1 ) + { + if ( isdefined( chunk.material ) && chunk.material == "glass" ) + { + playfx( level._effect["glass_break"], chunk.origin, node.angles ); + chunk.unbroken = 0; + } + else if ( isdefined( chunk.material ) && chunk.material == "metal" ) + { + playfx( level._effect["fx_zombie_bar_break"], chunk.origin ); + chunk.unbroken = 0; + } + else if ( isdefined( chunk.material ) && chunk.material == "rock" ) + { + if ( isdefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) + chunk setclientflag( level._zombie_scriptmover_flag_rock_fx ); + else + playfx( level._effect["wall_break"], chunk.origin ); + + chunk.unbroken = 0; + } + } + } + + if ( isdefined( chunk.script_parameters ) && chunk.script_parameters == "barricade_vents" ) + { + if ( isdefined( level.use_clientside_board_fx ) && level.use_clientside_board_fx ) + chunk setclientflag( level._zombie_scriptmover_flag_board_horizontal_fx ); + else + playfx( level._effect["fx_zombie_bar_break"], chunk.origin ); + } + else if ( isdefined( chunk.material ) && chunk.material == "rock" ) + { + if ( isdefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) + chunk setclientflag( level._zombie_scriptmover_flag_rock_fx ); + } + else if ( isdefined( level.use_clientside_board_fx ) ) + chunk setclientflag( level._zombie_scriptmover_flag_board_horizontal_fx ); + else + { + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( 0, 0, 1 ), 30.0 ) ); + wait( randomfloatrange( 0.2, 0.4 ) ); + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( 0, 0, -1 ), 30.0 ) ); + } +} + +zombie_boardtear_offset_fx_verticle( chunk, node ) +{ + if ( isdefined( chunk.script_parameters ) && ( chunk.script_parameters == "repair_board" || chunk.script_parameters == "board" ) ) + { + if ( isdefined( chunk.unbroken ) && chunk.unbroken == 1 ) + { + if ( isdefined( chunk.material ) && chunk.material == "glass" ) + { + playfx( level._effect["glass_break"], chunk.origin, node.angles ); + chunk.unbroken = 0; + } + else if ( isdefined( chunk.material ) && chunk.material == "metal" ) + { + playfx( level._effect["fx_zombie_bar_break"], chunk.origin ); + chunk.unbroken = 0; + } + else if ( isdefined( chunk.material ) && chunk.material == "rock" ) + { + if ( isdefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) + chunk setclientflag( level._zombie_scriptmover_flag_rock_fx ); + else + playfx( level._effect["wall_break"], chunk.origin ); + + chunk.unbroken = 0; + } + } + } + + if ( isdefined( chunk.script_parameters ) && chunk.script_parameters == "barricade_vents" ) + { + if ( isdefined( level.use_clientside_board_fx ) ) + chunk setclientflag( level._zombie_scriptmover_flag_board_vertical_fx ); + else + playfx( level._effect["fx_zombie_bar_break"], chunk.origin ); + } + else if ( isdefined( chunk.material ) && chunk.material == "rock" ) + { + if ( isdefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) + chunk setclientflag( level._zombie_scriptmover_flag_rock_fx ); + } + else if ( isdefined( level.use_clientside_board_fx ) ) + chunk setclientflag( level._zombie_scriptmover_flag_board_vertical_fx ); + else + { + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( 1, 0, 0 ), 30.0 ) ); + wait( randomfloatrange( 0.2, 0.4 ) ); + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + } +} + +zombie_bartear_offset_fx_verticle( chunk ) +{ + if ( isdefined( chunk.script_parameters ) && chunk.script_parameters == "bar" || chunk.script_noteworthy == "board" ) + { + possible_tag_array_1 = []; + possible_tag_array_1[0] = "Tag_fx_top"; + possible_tag_array_1[1] = ""; + possible_tag_array_1[2] = "Tag_fx_top"; + possible_tag_array_1[3] = ""; + possible_tag_array_2 = []; + possible_tag_array_2[0] = ""; + possible_tag_array_2[1] = "Tag_fx_bottom"; + possible_tag_array_2[2] = ""; + possible_tag_array_2[3] = "Tag_fx_bottom"; + possible_tag_array_2 = array_randomize( possible_tag_array_2 ); + random_fx = []; + random_fx[0] = level._effect["fx_zombie_bar_break"]; + random_fx[1] = level._effect["fx_zombie_bar_break_lite"]; + random_fx[2] = level._effect["fx_zombie_bar_break"]; + random_fx[3] = level._effect["fx_zombie_bar_break_lite"]; + random_fx = array_randomize( random_fx ); + + switch ( randomint( 9 ) ) + { + case 0: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_top" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_bottom" ); + break; + case 1: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_top" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_bottom" ); + break; + case 2: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_top" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_bottom" ); + break; + case 3: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_top" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_bottom" ); + break; + case 4: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_top" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_bottom" ); + break; + case 5: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_top" ); + break; + case 6: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_bottom" ); + break; + case 7: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_top" ); + break; + case 8: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_bottom" ); + break; + } + } +} + +zombie_bartear_offset_fx_horizontle( chunk ) +{ + if ( isdefined( chunk.script_parameters ) && chunk.script_parameters == "bar" || chunk.script_noteworthy == "board" ) + { + switch ( randomint( 10 ) ) + { + case 0: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_left" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_right" ); + break; + case 1: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_left" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_right" ); + break; + case 2: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_left" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_right" ); + break; + case 3: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_left" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_right" ); + break; + case 4: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_left" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_right" ); + break; + case 5: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_left" ); + break; + case 6: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_right" ); + break; + case 7: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_right" ); + break; + case 8: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_right" ); + break; + } + } +} + +check_zbarrier_piece_for_zombie_inert( chunk_index, zbarrier, zombie ) +{ + zombie endon( "completed_emerging_into_playable_area" ); + + zombie waittill( "stop_zombie_goto_entrance" ); + + if ( zbarrier getzbarrierpiecestate( chunk_index ) == "targetted_by_zombie" ) + zbarrier setzbarrierpiecestate( chunk_index, "closed" ); +} + +check_zbarrier_piece_for_zombie_death( chunk_index, zbarrier, zombie ) +{ + while ( true ) + { + if ( zbarrier getzbarrierpiecestate( chunk_index ) != "targetted_by_zombie" ) + return; + + if ( !isdefined( zombie ) || !isalive( zombie ) ) + { + zbarrier setzbarrierpiecestate( chunk_index, "closed" ); + return; + } + + wait 0.05; + } +} + +check_for_zombie_death( zombie ) +{ + self endon( "destroyed" ); + wait 2.5; + self maps\mp\zombies\_zm_blockers::update_states( "repaired" ); +} + +zombie_hat_gib( attacker, means_of_death ) +{ + self endon( "death" ); + + if ( !is_mature() ) + return 0; + + if ( isdefined( self.hat_gibbed ) && self.hat_gibbed ) + return; + + if ( !isdefined( self.gibspawn5 ) || !isdefined( self.gibspawntag5 ) ) + return; + + self.hat_gibbed = 1; + + if ( isdefined( self.hatmodel ) ) + self detach( self.hatmodel, "" ); + + temp_array = []; + temp_array[0] = level._zombie_gib_piece_index_hat; + self gib( "normal", temp_array ); + + if ( isdefined( level.track_gibs ) ) + level [[ level.track_gibs ]]( self, temp_array ); +} + +zombie_head_gib( attacker, means_of_death ) +{ + self endon( "death" ); + + if ( !is_mature() ) + return 0; + + if ( isdefined( self.head_gibbed ) && self.head_gibbed ) + return; + + self.head_gibbed = 1; + self zombie_eye_glow_stop(); + size = self getattachsize(); + + for ( i = 0; i < size; i++ ) + { + model = self getattachmodelname( i ); + + if ( issubstr( model, "head" ) ) + { + if ( isdefined( self.hatmodel ) ) + self detach( self.hatmodel, "" ); + + self detach( model, "" ); + + if ( isdefined( self.torsodmg5 ) ) + self attach( self.torsodmg5, "", 1 ); + + break; + } + } + + temp_array = []; + temp_array[0] = level._zombie_gib_piece_index_head; + + if ( !( isdefined( self.hat_gibbed ) && self.hat_gibbed ) && isdefined( self.gibspawn5 ) && isdefined( self.gibspawntag5 ) ) + temp_array[1] = level._zombie_gib_piece_index_hat; + + self.hat_gibbed = 1; + self gib( "normal", temp_array ); + + if ( isdefined( level.track_gibs ) ) + level [[ level.track_gibs ]]( self, temp_array ); + + self thread damage_over_time( ceil( self.health * 0.2 ), 1, attacker, means_of_death ); +} + +damage_over_time( dmg, delay, attacker, means_of_death ) +{ + self endon( "death" ); + self endon( "exploding" ); + + if ( !isalive( self ) ) + return; + + if ( !isplayer( attacker ) ) + attacker = self; + + if ( !isdefined( means_of_death ) ) + means_of_death = "MOD_UNKNOWN"; + + while ( true ) + { + if ( isdefined( delay ) ) + wait( delay ); + + if ( isdefined( self ) ) + self dodamage( dmg, self gettagorigin( "j_neck" ), attacker, self, self.damagelocation, means_of_death, 0, self.damageweapon ); + } +} + +head_should_gib( attacker, type, point ) +{ + if ( !is_mature() ) + return false; + + if ( self.head_gibbed ) + return false; + + if ( !isdefined( attacker ) || !isplayer( attacker ) ) + return false; + + weapon = attacker getcurrentweapon(); + + if ( type != "MOD_RIFLE_BULLET" && type != "MOD_PISTOL_BULLET" ) + { + if ( type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" ) + { + if ( distance( point, self gettagorigin( "j_head" ) ) > 55 ) + return false; + else + return true; + } + else if ( type == "MOD_PROJECTILE" ) + { + if ( distance( point, self gettagorigin( "j_head" ) ) > 10 ) + return false; + else + return true; + } + else if ( weaponclass( weapon ) != "spread" ) + return false; + } + + if ( !self maps\mp\animscripts\zm_utility::damagelocationisany( "head", "helmet", "neck" ) ) + return false; + + if ( weapon == "none" || weapon == level.start_weapon || weaponisgasweapon( self.weapon ) ) + return false; + + low_health_percent = self.health / self.maxhealth * 100; + + if ( low_health_percent > 10 ) + { + self zombie_hat_gib( attacker, type ); + return false; + } + + return true; +} + +headshot_blood_fx() +{ + if ( !isdefined( self ) ) + return; + + if ( !is_mature() ) + return; + + fxtag = "j_neck"; + fxorigin = self gettagorigin( fxtag ); + upvec = anglestoup( self gettagangles( fxtag ) ); + forwardvec = anglestoforward( self gettagangles( fxtag ) ); + playfx( level._effect["headshot"], fxorigin, forwardvec, upvec ); + playfx( level._effect["headshot_nochunks"], fxorigin, forwardvec, upvec ); + wait 0.3; + + if ( isdefined( self ) ) + playfxontag( level._effect["bloodspurt"], self, fxtag ); +} + +zombie_gib_on_damage() +{ + while ( true ) + { + self waittill( "damage", amount, attacker, direction_vec, point, type, tagname, modelname, partname, weaponname ); + + if ( !isdefined( self ) ) + return; + + if ( !self zombie_should_gib( amount, attacker, type ) ) + continue; + + if ( self head_should_gib( attacker, type, point ) && type != "MOD_BURNED" ) + { + self zombie_head_gib( attacker, type ); + continue; + } + + if ( !self.gibbed ) + { + if ( self maps\mp\animscripts\zm_utility::damagelocationisany( "head", "helmet", "neck" ) ) + continue; + + refs = []; + + switch ( self.damagelocation ) + { + case "torso_upper": + case "torso_lower": + refs[refs.size] = "guts"; + refs[refs.size] = "right_arm"; + break; + case "right_hand": + case "right_arm_upper": + case "right_arm_lower": + refs[refs.size] = "right_arm"; + break; + case "left_hand": + case "left_arm_upper": + case "left_arm_lower": + refs[refs.size] = "left_arm"; + break; + case "right_leg_upper": + case "right_leg_lower": + case "right_foot": + if ( self.health <= 0 ) + { + refs[refs.size] = "right_leg"; + refs[refs.size] = "right_leg"; + refs[refs.size] = "right_leg"; + refs[refs.size] = "no_legs"; + } + + break; + case "left_leg_upper": + case "left_leg_lower": + case "left_foot": + if ( self.health <= 0 ) + { + refs[refs.size] = "left_leg"; + refs[refs.size] = "left_leg"; + refs[refs.size] = "left_leg"; + refs[refs.size] = "no_legs"; + } + + break; + default: + if ( self.damagelocation == "none" ) + { + if ( type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" || type == "MOD_PROJECTILE" || type == "MOD_PROJECTILE_SPLASH" ) + { + refs = self derive_damage_refs( point ); + break; + } + } + else + { + refs[refs.size] = "guts"; + refs[refs.size] = "right_arm"; + refs[refs.size] = "left_arm"; + refs[refs.size] = "right_leg"; + refs[refs.size] = "left_leg"; + refs[refs.size] = "no_legs"; + break; + } + } + + if ( isdefined( level.custom_derive_damage_refs ) ) + refs = self [[ level.custom_derive_damage_refs ]]( refs, point, weaponname ); + + if ( refs.size ) + { + self.a.gib_ref = maps\mp\animscripts\zm_death::get_random( refs ); + + if ( ( self.a.gib_ref == "no_legs" || self.a.gib_ref == "right_leg" || self.a.gib_ref == "left_leg" ) && self.health > 0 ) + { + self.has_legs = 0; + self allowedstances( "crouch" ); + self setphysparams( 15, 0, 24 ); + self allowpitchangle( 1 ); + self setpitchorient(); + health = self.health; + health *= 0.1; + self thread maps\mp\animscripts\zm_run::needsdelayedupdate(); + + if ( isdefined( self.crawl_anim_override ) ) + self [[ self.crawl_anim_override ]](); + } + } + + if ( self.health > 0 ) + { + self thread maps\mp\animscripts\zm_death::do_gib(); + + if ( isdefined( level.gib_on_damage ) ) + self thread [[ level.gib_on_damage ]](); + } + } + } +} + +zombie_should_gib( amount, attacker, type ) +{ + if ( !is_mature() ) + return false; + + if ( !isdefined( type ) ) + return false; + + if ( isdefined( self.is_on_fire ) && self.is_on_fire ) + return false; + + if ( isdefined( self.no_gib ) && self.no_gib == 1 ) + return false; + + switch ( type ) + { + case "MOD_UNKNOWN": + case "MOD_TRIGGER_HURT": + case "MOD_TELEFRAG": + case "MOD_SUICIDE": + case "MOD_FALLING": + case "MOD_CRUSH": + case "MOD_BURNED": + return false; + case "MOD_MELEE": + return false; + } + + if ( type == "MOD_PISTOL_BULLET" || type == "MOD_RIFLE_BULLET" ) + { + if ( !isdefined( attacker ) || !isplayer( attacker ) ) + return false; + + weapon = attacker getcurrentweapon(); + + if ( weapon == "none" || weapon == level.start_weapon ) + return false; + + if ( weaponisgasweapon( self.weapon ) ) + return false; + } + else if ( type == "MOD_PROJECTILE" ) + { + if ( isdefined( attacker ) && isplayer( attacker ) ) + { + weapon = attacker getcurrentweapon(); + + if ( weapon == "slipgun_zm" || weapon == "slipgun_upgraded_zm" ) + return false; + } + } + + prev_health = amount + self.health; + + if ( prev_health <= 0 ) + prev_health = 1; + + damage_percent = amount / prev_health * 100; + + if ( damage_percent < 10 ) + return false; + + return true; +} + +derive_damage_refs( point ) +{ + if ( !isdefined( level.gib_tags ) ) + init_gib_tags(); + + closesttag = undefined; + + for ( i = 0; i < level.gib_tags.size; i++ ) + { + if ( !isdefined( closesttag ) ) + { + closesttag = level.gib_tags[i]; + continue; + } + + if ( distancesquared( point, self gettagorigin( level.gib_tags[i] ) ) < distancesquared( point, self gettagorigin( closesttag ) ) ) + closesttag = level.gib_tags[i]; + } + + refs = []; + + if ( closesttag == "J_SpineLower" || closesttag == "J_SpineUpper" || closesttag == "J_Spine4" ) + { + refs[refs.size] = "guts"; + refs[refs.size] = "right_arm"; + } + else if ( closesttag == "J_Shoulder_LE" || closesttag == "J_Elbow_LE" || closesttag == "J_Wrist_LE" ) + refs[refs.size] = "left_arm"; + else if ( closesttag == "J_Shoulder_RI" || closesttag == "J_Elbow_RI" || closesttag == "J_Wrist_RI" ) + refs[refs.size] = "right_arm"; + else if ( closesttag == "J_Hip_LE" || closesttag == "J_Knee_LE" || closesttag == "J_Ankle_LE" ) + { + refs[refs.size] = "left_leg"; + refs[refs.size] = "no_legs"; + } + else if ( closesttag == "J_Hip_RI" || closesttag == "J_Knee_RI" || closesttag == "J_Ankle_RI" ) + { + refs[refs.size] = "right_leg"; + refs[refs.size] = "no_legs"; + } + + assert( array_validate( refs ), "get_closest_damage_refs(): couldn't derive refs from closestTag " + closesttag ); + return refs; +} + +init_gib_tags() +{ + tags = []; + tags[tags.size] = "J_SpineLower"; + tags[tags.size] = "J_SpineUpper"; + tags[tags.size] = "J_Spine4"; + tags[tags.size] = "J_Shoulder_LE"; + tags[tags.size] = "J_Elbow_LE"; + tags[tags.size] = "J_Wrist_LE"; + tags[tags.size] = "J_Shoulder_RI"; + tags[tags.size] = "J_Elbow_RI"; + tags[tags.size] = "J_Wrist_RI"; + tags[tags.size] = "J_Hip_LE"; + tags[tags.size] = "J_Knee_LE"; + tags[tags.size] = "J_Ankle_LE"; + tags[tags.size] = "J_Hip_RI"; + tags[tags.size] = "J_Knee_RI"; + tags[tags.size] = "J_Ankle_RI"; + level.gib_tags = tags; +} + +zombie_can_drop_powerups( zombie ) +{ + if ( is_tactical_grenade( zombie.damageweapon ) || !flag( "zombie_drop_powerups" ) ) + return false; + + if ( isdefined( zombie.no_powerups ) && zombie.no_powerups ) + return false; + + return true; +} + +zombie_delay_powerup_drop( origin ) +{ + wait_network_frame(); + level thread maps\mp\zombies\_zm_powerups::powerup_drop( origin ); +} + +zombie_death_points( origin, mod, hit_location, attacker, zombie, team ) +{ + if ( !isdefined( attacker ) || !isplayer( attacker ) ) + return; + + if ( zombie_can_drop_powerups( zombie ) ) + { + if ( isdefined( zombie.in_the_ground ) && zombie.in_the_ground == 1 ) + { + trace = bullettrace( zombie.origin + vectorscale( ( 0, 0, 1 ), 100.0 ), zombie.origin + vectorscale( ( 0, 0, -1 ), 100.0 ), 0, undefined ); + origin = trace["position"]; + level thread zombie_delay_powerup_drop( origin ); + } + else + { + trace = groundtrace( zombie.origin + vectorscale( ( 0, 0, 1 ), 5.0 ), zombie.origin + vectorscale( ( 0, 0, -1 ), 300.0 ), 0, undefined ); + origin = trace["position"]; + level thread zombie_delay_powerup_drop( origin ); + } + } + + level thread maps\mp\zombies\_zm_audio::player_zombie_kill_vox( hit_location, attacker, mod, zombie ); + event = "death"; + + if ( isdefined( zombie.damageweapon ) && issubstr( zombie.damageweapon, "knife_ballistic_" ) && ( mod == "MOD_MELEE" || mod == "MOD_IMPACT" ) ) + event = "ballistic_knife_death"; + + if ( isdefined( zombie.deathpoints_already_given ) && zombie.deathpoints_already_given ) + return; + + zombie.deathpoints_already_given = 1; + + if ( isdefined( zombie.damageweapon ) && is_equipment( zombie.damageweapon ) ) + return; + + attacker maps\mp\zombies\_zm_score::player_add_points( event, mod, hit_location, undefined, team, attacker.currentweapon ); +} + +get_number_variants( aliasprefix ) +{ + for ( i = 0; i < 100; i++ ) + { + if ( !soundexists( aliasprefix + "_" + i ) ) + return i; + } +} + +dragons_breath_flame_death_fx() +{ + if ( self.isdog ) + return; + + if ( !isdefined( level._effect ) || !isdefined( level._effect["character_fire_death_sm"] ) ) + { +/# + println( "^3ANIMSCRIPT WARNING: You are missing level._effect[\"character_fire_death_sm\"], please set it in your levelname_fx.gsc. Use \"env/fire/fx_fire_zombie_md\"" ); +#/ + return; + } + + playfxontag( level._effect["character_fire_death_sm"], self, "J_SpineLower" ); + tagarray = []; + + if ( !isdefined( self.a.gib_ref ) || self.a.gib_ref != "left_arm" ) + { + tagarray[tagarray.size] = "J_Elbow_LE"; + tagarray[tagarray.size] = "J_Wrist_LE"; + } + + if ( !isdefined( self.a.gib_ref ) || self.a.gib_ref != "right_arm" ) + { + tagarray[tagarray.size] = "J_Elbow_RI"; + tagarray[tagarray.size] = "J_Wrist_RI"; + } + + if ( !isdefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" && self.a.gib_ref != "left_leg" ) + { + tagarray[tagarray.size] = "J_Knee_LE"; + tagarray[tagarray.size] = "J_Ankle_LE"; + } + + if ( !isdefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" && self.a.gib_ref != "right_leg" ) + { + tagarray[tagarray.size] = "J_Knee_RI"; + tagarray[tagarray.size] = "J_Ankle_RI"; + } + + tagarray = array_randomize( tagarray ); + playfxontag( level._effect["character_fire_death_sm"], self, tagarray[0] ); +} + +zombie_ragdoll_then_explode( launchvector, attacker ) +{ + if ( !isdefined( self ) ) + return; + + self zombie_eye_glow_stop(); + self setclientfield( "zombie_ragdoll_explode", 1 ); + self notify( "exploding" ); + self notify( "end_melee" ); + self notify( "death", attacker ); + self.dont_die_on_me = 1; + self.exploding = 1; + self.a.nodeath = 1; + self.dont_throw_gib = 1; + self startragdoll(); + self setplayercollision( 0 ); + self reset_attack_spot(); + + if ( isdefined( launchvector ) ) + self launchragdoll( launchvector ); + + wait 2.1; + + if ( isdefined( self ) ) + { + self ghost(); + self delay_thread( 0.25, ::self_delete ); + } +} + +zombie_death_animscript() +{ + team = undefined; + recalc_zombie_array(); + + if ( isdefined( self._race_team ) ) + team = self._race_team; + + self reset_attack_spot(); + + if ( self check_zombie_death_animscript_callbacks() ) + return false; + + if ( isdefined( level.zombie_death_animscript_override ) ) + self [[ level.zombie_death_animscript_override ]](); + + if ( self.has_legs && isdefined( self.a.gib_ref ) && self.a.gib_ref == "no_legs" ) + self.deathanim = "zm_death"; + + self.grenadeammo = 0; + + if ( isdefined( self.nuked ) ) + { + if ( zombie_can_drop_powerups( self ) ) + { + if ( isdefined( self.in_the_ground ) && self.in_the_ground == 1 ) + { + trace = bullettrace( self.origin + vectorscale( ( 0, 0, 1 ), 100.0 ), self.origin + vectorscale( ( 0, 0, -1 ), 100.0 ), 0, undefined ); + origin = trace["position"]; + level thread zombie_delay_powerup_drop( origin ); + } + else + { + trace = groundtrace( self.origin + vectorscale( ( 0, 0, 1 ), 5.0 ), self.origin + vectorscale( ( 0, 0, -1 ), 300.0 ), 0, undefined ); + origin = trace["position"]; + level thread zombie_delay_powerup_drop( self.origin ); + } + } + } + else + level zombie_death_points( self.origin, self.damagemod, self.damagelocation, self.attacker, self, team ); + + if ( isdefined( self.attacker ) && isai( self.attacker ) ) + self.attacker notify( "killed", self ); + + if ( "rottweil72_upgraded_zm" == self.damageweapon && "MOD_RIFLE_BULLET" == self.damagemod ) + self thread dragons_breath_flame_death_fx(); + + if ( "tazer_knuckles_zm" == self.damageweapon && "MOD_MELEE" == self.damagemod ) + { + self.is_on_fire = 0; + self notify( "stop_flame_damage" ); + } + + if ( self.damagemod == "MOD_BURNED" ) + self thread maps\mp\animscripts\zm_death::flame_death_fx(); + + if ( self.damagemod == "MOD_GRENADE" || self.damagemod == "MOD_GRENADE_SPLASH" ) + level notify( "zombie_grenade_death", self.origin ); + + return false; +} + +check_zombie_death_animscript_callbacks() +{ + if ( !isdefined( level.zombie_death_animscript_callbacks ) ) + return false; + + for ( i = 0; i < level.zombie_death_animscript_callbacks.size; i++ ) + { + if ( self [[ level.zombie_death_animscript_callbacks[i] ]]() ) + return true; + } + + return false; +} + +register_zombie_death_animscript_callback( func ) +{ + if ( !isdefined( level.zombie_death_animscript_callbacks ) ) + level.zombie_death_animscript_callbacks = []; + + level.zombie_death_animscript_callbacks[level.zombie_death_animscript_callbacks.size] = func; +} + +damage_on_fire( player ) +{ + self endon( "death" ); + self endon( "stop_flame_damage" ); + wait 2; + + while ( isdefined( self.is_on_fire ) && self.is_on_fire ) + { + if ( level.round_number < 6 ) + dmg = level.zombie_health * randomfloatrange( 0.2, 0.3 ); + else if ( level.round_number < 9 ) + dmg = level.zombie_health * randomfloatrange( 0.15, 0.25 ); + else if ( level.round_number < 11 ) + dmg = level.zombie_health * randomfloatrange( 0.1, 0.2 ); + else + dmg = level.zombie_health * randomfloatrange( 0.1, 0.15 ); + + if ( isdefined( player ) && isalive( player ) ) + self dodamage( dmg, self.origin, player ); + else + self dodamage( dmg, self.origin, level ); + + wait( randomfloatrange( 1.0, 3.0 ) ); + } +} + +player_using_hi_score_weapon( player ) +{ + weapon = player getcurrentweapon(); + + if ( weapon == "none" || weaponissemiauto( weapon ) ) + return true; + + return false; +} + +zombie_damage( mod, hit_location, hit_origin, player, amount, team ) +{ + if ( is_magic_bullet_shield_enabled( self ) ) + return; + + player.use_weapon_type = mod; + + if ( isdefined( self.marked_for_death ) ) + return; + + if ( !isdefined( player ) ) + return; + + if ( isdefined( hit_origin ) ) + self.damagehit_origin = hit_origin; + else + self.damagehit_origin = player getweaponmuzzlepoint(); + + if ( self check_zombie_damage_callbacks( mod, hit_location, hit_origin, player, amount ) ) + return; + else if ( self zombie_flame_damage( mod, player ) ) + { + if ( self zombie_give_flame_damage_points() ) + player maps\mp\zombies\_zm_score::player_add_points( "damage", mod, hit_location, self.isdog, team ); + } + else + { + if ( player_using_hi_score_weapon( player ) ) + damage_type = "damage"; + else + damage_type = "damage_light"; + + if ( !( isdefined( self.no_damage_points ) && self.no_damage_points ) ) + player maps\mp\zombies\_zm_score::player_add_points( damage_type, mod, hit_location, self.isdog, team, self.damageweapon ); + } + + if ( isdefined( self.zombie_damage_fx_func ) ) + self [[ self.zombie_damage_fx_func ]]( mod, hit_location, hit_origin, player ); + + modname = remove_mod_from_methodofdeath( mod ); + + if ( is_placeable_mine( self.damageweapon ) ) + { + if ( isdefined( self.zombie_damage_claymore_func ) ) + self [[ self.zombie_damage_claymore_func ]]( mod, hit_location, hit_origin, player ); + else if ( isdefined( player ) && isalive( player ) ) + self dodamage( level.round_number * randomintrange( 100, 200 ), self.origin, player, self, hit_location, mod ); + else + self dodamage( level.round_number * randomintrange( 100, 200 ), self.origin, undefined, self, hit_location, mod ); + } + else if ( mod == "MOD_GRENADE" || mod == "MOD_GRENADE_SPLASH" ) + { + if ( isdefined( player ) && isalive( player ) ) + { + player.grenade_multiattack_count++; + player.grenade_multiattack_ent = self; + self dodamage( level.round_number + randomintrange( 100, 200 ), self.origin, player, self, hit_location, modname ); + } + else + self dodamage( level.round_number + randomintrange( 100, 200 ), self.origin, undefined, self, hit_location, modname ); + } + else if ( mod == "MOD_PROJECTILE" || mod == "MOD_EXPLOSIVE" || mod == "MOD_PROJECTILE_SPLASH" ) + { + if ( isdefined( player ) && isalive( player ) ) + self dodamage( level.round_number * randomintrange( 0, 100 ), self.origin, player, self, hit_location, modname ); + else + self dodamage( level.round_number * randomintrange( 0, 100 ), self.origin, undefined, self, hit_location, modname ); + } + + if ( isdefined( self.a.gib_ref ) && self.a.gib_ref == "no_legs" && isalive( self ) ) + { + if ( isdefined( player ) ) + { + rand = randomintrange( 0, 100 ); + + if ( rand < 10 ) + player create_and_play_dialog( "general", "crawl_spawn" ); + } + } + else if ( isdefined( self.a.gib_ref ) && ( self.a.gib_ref == "right_arm" || self.a.gib_ref == "left_arm" ) ) + { + if ( self.has_legs && isalive( self ) ) + { + if ( isdefined( player ) ) + { + rand = randomintrange( 0, 100 ); + + if ( rand < 7 ) + player create_and_play_dialog( "general", "shoot_arm" ); + } + } + } + + self thread maps\mp\zombies\_zm_powerups::check_for_instakill( player, mod, hit_location ); +} + +zombie_damage_ads( mod, hit_location, hit_origin, player, amount, team ) +{ + if ( is_magic_bullet_shield_enabled( self ) ) + return; + + player.use_weapon_type = mod; + + if ( !isdefined( player ) ) + return; + + if ( isdefined( hit_origin ) ) + self.damagehit_origin = hit_origin; + else + self.damagehit_origin = player getweaponmuzzlepoint(); + + if ( self check_zombie_damage_callbacks( mod, hit_location, hit_origin, player, amount ) ) + return; + else if ( self zombie_flame_damage( mod, player ) ) + { + if ( self zombie_give_flame_damage_points() ) + player maps\mp\zombies\_zm_score::player_add_points( "damage_ads", mod, hit_location, undefined, team ); + } + else + { + if ( player_using_hi_score_weapon( player ) ) + damage_type = "damage"; + else + damage_type = "damage_light"; + + if ( !( isdefined( self.no_damage_points ) && self.no_damage_points ) ) + player maps\mp\zombies\_zm_score::player_add_points( damage_type, mod, hit_location, undefined, team, self.damageweapon ); + } + + self thread maps\mp\zombies\_zm_powerups::check_for_instakill( player, mod, hit_location ); +} + +check_zombie_damage_callbacks( mod, hit_location, hit_origin, player, amount ) +{ + if ( !isdefined( level.zombie_damage_callbacks ) ) + return false; + + for ( i = 0; i < level.zombie_damage_callbacks.size; i++ ) + { + if ( self [[ level.zombie_damage_callbacks[i] ]]( mod, hit_location, hit_origin, player, amount ) ) + return true; + } + + return false; +} + +register_zombie_damage_callback( func ) +{ + if ( !isdefined( level.zombie_damage_callbacks ) ) + level.zombie_damage_callbacks = []; + + level.zombie_damage_callbacks[level.zombie_damage_callbacks.size] = func; +} + +zombie_give_flame_damage_points() +{ + if ( gettime() > self.flame_damage_time ) + { + self.flame_damage_time = gettime() + level.zombie_vars["zombie_flame_dmg_point_delay"]; + return true; + } + + return false; +} + +zombie_flame_damage( mod, player ) +{ + if ( mod == "MOD_BURNED" ) + { + if ( !isdefined( self.is_on_fire ) || isdefined( self.is_on_fire ) && !self.is_on_fire ) + self thread damage_on_fire( player ); + + do_flame_death = 1; + dist = 10000; + ai = getaiarray( level.zombie_team ); + + for ( i = 0; i < ai.size; i++ ) + { + if ( isdefined( ai[i].is_on_fire ) && ai[i].is_on_fire ) + { + if ( distancesquared( ai[i].origin, self.origin ) < dist ) + { + do_flame_death = 0; + break; + } + } + } + + if ( do_flame_death ) + self thread maps\mp\animscripts\zm_death::flame_death_fx(); + + return true; + } + + return false; +} + +is_weapon_shotgun( sweapon ) +{ + if ( isdefined( sweapon ) && weaponclass( sweapon ) == "spread" ) + return true; + + return false; +} + +zombie_death_event( zombie ) +{ + zombie.marked_for_recycle = 0; + force_explode = 0; + force_head_gib = 0; + + zombie waittill( "death", attacker ); + + time_of_death = gettime(); + + if ( isdefined( zombie ) ) + zombie stopsounds(); + + if ( isdefined( zombie ) && isdefined( zombie.marked_for_insta_upgraded_death ) ) + force_head_gib = 1; + + if ( !isdefined( zombie.damagehit_origin ) && isdefined( attacker ) ) + zombie.damagehit_origin = attacker getweaponmuzzlepoint(); + + if ( isdefined( attacker ) && isplayer( attacker ) ) + { + if ( isdefined( level.pers_upgrade_carpenter ) && level.pers_upgrade_carpenter ) + maps\mp\zombies\_zm_pers_upgrades::pers_zombie_death_location_check( attacker, zombie.origin ); + + if ( isdefined( level.pers_upgrade_sniper ) && level.pers_upgrade_sniper ) + attacker pers_upgrade_sniper_kill_check( zombie, attacker ); + + if ( isdefined( zombie ) && isdefined( zombie.damagelocation ) ) + { + if ( is_headshot( zombie.damageweapon, zombie.damagelocation, zombie.damagemod ) ) + { + attacker.headshots++; + attacker maps\mp\zombies\_zm_stats::increment_client_stat( "headshots" ); + attacker addweaponstat( zombie.damageweapon, "headshots", 1 ); + attacker maps\mp\zombies\_zm_stats::increment_player_stat( "headshots" ); + + if ( is_classic() ) + attacker maps\mp\zombies\_zm_pers_upgrades_functions::pers_check_for_pers_headshot( time_of_death, zombie ); + } + else + attacker notify( "zombie_death_no_headshot" ); + } + + if ( isdefined( zombie ) && isdefined( zombie.damagemod ) && zombie.damagemod == "MOD_MELEE" ) + { + attacker maps\mp\zombies\_zm_stats::increment_client_stat( "melee_kills" ); + attacker maps\mp\zombies\_zm_stats::increment_player_stat( "melee_kills" ); + attacker notify( "melee_kill" ); + + if ( attacker maps\mp\zombies\_zm_pers_upgrades::is_insta_kill_upgraded_and_active() ) + force_explode = 1; + } + + attacker maps\mp\zombies\_zm::add_rampage_bookmark_kill_time(); + attacker.kills++; + attacker maps\mp\zombies\_zm_stats::increment_client_stat( "kills" ); + attacker maps\mp\zombies\_zm_stats::increment_player_stat( "kills" ); + + if ( isdefined( level.pers_upgrade_pistol_points ) && level.pers_upgrade_pistol_points ) + attacker maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_pistol_points_kill(); + + dmgweapon = zombie.damageweapon; + + if ( is_alt_weapon( dmgweapon ) ) + dmgweapon = weaponaltweaponname( dmgweapon ); + + attacker addweaponstat( dmgweapon, "kills", 1 ); + + if ( attacker maps\mp\zombies\_zm_pers_upgrades_functions::pers_mulit_kill_headshot_active() || force_head_gib ) + zombie maps\mp\zombies\_zm_spawner::zombie_head_gib(); + + if ( isdefined( level.pers_upgrade_nube ) && level.pers_upgrade_nube ) + attacker notify( "pers_player_zombie_kill" ); + } + + zombie_death_achievement_sliquifier_check( attacker, zombie ); + recalc_zombie_array(); + + if ( !isdefined( zombie ) ) + return; + + level.global_zombies_killed++; + + if ( isdefined( zombie.marked_for_death ) && !isdefined( zombie.nuked ) ) + level.zombie_trap_killed_count++; + + zombie check_zombie_death_event_callbacks(); + name = zombie.animname; + + if ( isdefined( zombie.sndname ) ) + name = zombie.sndname; + + zombie thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "death", name ); + zombie thread zombie_eye_glow_stop(); + + if ( isdefined( zombie.damageweapon ) && is_weapon_shotgun( zombie.damageweapon ) && maps\mp\zombies\_zm_weapons::is_weapon_upgraded( zombie.damageweapon ) || isdefined( zombie.damageweapon ) && is_placeable_mine( zombie.damageweapon ) || zombie.damagemod == "MOD_GRENADE" || zombie.damagemod == "MOD_GRENADE_SPLASH" || zombie.damagemod == "MOD_EXPLOSIVE" || force_explode == 1 ) + { + splode_dist = 180; + + if ( isdefined( zombie.damagehit_origin ) && distancesquared( zombie.origin, zombie.damagehit_origin ) < splode_dist * splode_dist ) + { + tag = "J_SpineLower"; + + if ( isdefined( zombie.isdog ) && zombie.isdog ) + tag = "tag_origin"; + + if ( !( isdefined( zombie.is_on_fire ) && zombie.is_on_fire ) && !( isdefined( zombie.guts_explosion ) && zombie.guts_explosion ) ) + zombie thread zombie_gut_explosion(); + } + } + + if ( zombie.damagemod == "MOD_GRENADE" || zombie.damagemod == "MOD_GRENADE_SPLASH" ) + { + if ( isdefined( attacker ) && isalive( attacker ) ) + { + attacker.grenade_multiattack_count++; + attacker.grenade_multiattack_ent = zombie; + } + } + + if ( !( isdefined( zombie.has_been_damaged_by_player ) && zombie.has_been_damaged_by_player ) && ( isdefined( zombie.marked_for_recycle ) && zombie.marked_for_recycle ) ) + { + level.zombie_total++; + level.zombie_total_subtract++; + } + else if ( isdefined( zombie.attacker ) && isplayer( zombie.attacker ) ) + { + level.zombie_player_killed_count++; + + if ( isdefined( zombie.sound_damage_player ) && zombie.sound_damage_player == zombie.attacker ) + { + chance = get_response_chance( "damage" ); + + if ( chance != 0 ) + { + if ( chance > randomintrange( 1, 100 ) ) + zombie.attacker maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "damage" ); + } + else + zombie.attacker maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "damage" ); + } + + zombie.attacker notify( "zom_kill", zombie ); + damageloc = zombie.damagelocation; + damagemod = zombie.damagemod; + attacker = zombie.attacker; + weapon = zombie.damageweapon; + bbprint( "zombie_kills", "round %d zombietype %s damagetype %s damagelocation %s playername %s playerweapon %s playerx %f playery %f playerz %f zombiex %f zombiey %f zombiez %f", level.round_number, zombie.animname, damagemod, damageloc, attacker.name, weapon, attacker.origin, zombie.origin ); + } + else if ( zombie.ignoreall && !( isdefined( zombie.marked_for_death ) && zombie.marked_for_death ) ) + level.zombies_timeout_spawn++; + + level notify( "zom_kill" ); + level.total_zombies_killed++; +} + +zombie_gut_explosion() +{ + self.guts_explosion = 1; + + if ( is_mature() ) + self setclientfield( "zombie_gut_explosion", 1 ); + + if ( !( isdefined( self.isdog ) && self.isdog ) ) + wait 0.1; + + if ( isdefined( self ) ) + self ghost(); +} + +zombie_death_achievement_sliquifier_check( e_player, e_zombie ) +{ + if ( !isplayer( e_player ) ) + return; + + if ( isdefined( e_zombie ) ) + { + if ( isdefined( e_zombie.damageweapon ) && e_zombie.damageweapon == "slipgun_zm" ) + { + if ( !isdefined( e_player.num_sliquifier_kills ) ) + e_player.num_sliquifier_kills = 0; + + e_player.num_sliquifier_kills++; + e_player notify( "sliquifier_kill" ); + } + } +} + +check_zombie_death_event_callbacks() +{ + if ( !isdefined( level.zombie_death_event_callbacks ) ) + return; + + for ( i = 0; i < level.zombie_death_event_callbacks.size; i++ ) + self [[ level.zombie_death_event_callbacks[i] ]](); +} + +register_zombie_death_event_callback( func ) +{ + if ( !isdefined( level.zombie_death_event_callbacks ) ) + level.zombie_death_event_callbacks = []; + + level.zombie_death_event_callbacks[level.zombie_death_event_callbacks.size] = func; +} + +deregister_zombie_death_event_callback( func ) +{ + if ( isdefined( level.zombie_death_event_callbacks ) ) + arrayremovevalue( level.zombie_death_event_callbacks, func ); +} + +zombie_setup_attack_properties() +{ + self zombie_history( "zombie_setup_attack_properties()" ); + self.ignoreall = 0; + self.pathenemyfightdist = 64; + self.meleeattackdist = 64; + self.maxsightdistsqrd = 16384; + self.disablearrivals = 1; + self.disableexits = 1; +} + +attractors_generated_listener() +{ + self endon( "death" ); + level endon( "intermission" ); + self endon( "stop_find_flesh" ); + self endon( "path_timer_done" ); + + level waittill( "attractor_positions_generated" ); + + self.zombie_path_timer = 0; +} + +zombie_pathing() +{ + self endon( "death" ); + self endon( "zombie_acquire_enemy" ); + level endon( "intermission" ); + assert( isdefined( self.favoriteenemy ) || isdefined( self.enemyoverride ) ); + self._skip_pathing_first_delay = 1; + self thread zombie_follow_enemy(); + + self waittill( "bad_path" ); + + level.zombie_pathing_failed++; + + if ( isdefined( self.enemyoverride ) ) + { + debug_print( "Zombie couldn't path to point of interest at origin: " + self.enemyoverride[0] + " Falling back to breadcrumb system" ); + + if ( isdefined( self.enemyoverride[1] ) ) + { + self.enemyoverride = self.enemyoverride[1] invalidate_attractor_pos( self.enemyoverride, self ); + self.zombie_path_timer = 0; + return; + } + } + else if ( isdefined( self.favoriteenemy ) ) + debug_print( "Zombie couldn't path to player at origin: " + self.favoriteenemy.origin + " Falling back to breadcrumb system" ); + else + debug_print( "Zombie couldn't path to a player ( the other 'prefered' player might be ignored for encounters mode ). Falling back to breadcrumb system" ); + + if ( !isdefined( self.favoriteenemy ) ) + { + self.zombie_path_timer = 0; + return; + } + else + self.favoriteenemy endon( "disconnect" ); + + players = get_players(); + valid_player_num = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( is_player_valid( players[i], 1 ) ) + valid_player_num += 1; + } + + if ( players.size > 1 ) + { + if ( isdefined( level._should_skip_ignore_player_logic ) && [[ level._should_skip_ignore_player_logic ]]() ) + { + self.zombie_path_timer = 0; + return; + } + + if ( array_check_for_dupes( self.ignore_player, self.favoriteenemy ) ) + self.ignore_player[self.ignore_player.size] = self.favoriteenemy; + + if ( self.ignore_player.size < valid_player_num ) + { + self.zombie_path_timer = 0; + return; + } + } + + crumb_list = self.favoriteenemy.zombie_breadcrumbs; + bad_crumbs = []; + + while ( true ) + { + if ( !is_player_valid( self.favoriteenemy, 1 ) ) + { + self.zombie_path_timer = 0; + return; + } + + goal = zombie_pathing_get_breadcrumb( self.favoriteenemy.origin, crumb_list, bad_crumbs, randomint( 100 ) < 20 ); + + if ( !isdefined( goal ) ) + { + debug_print( "Zombie exhausted breadcrumb search" ); + level.zombie_breadcrumb_failed++; + goal = self.favoriteenemy.spectator_respawn.origin; + } + + debug_print( "Setting current breadcrumb to " + goal ); + self.zombie_path_timer += 100; + self setgoalpos( goal ); + + self waittill( "bad_path" ); + + debug_print( "Zombie couldn't path to breadcrumb at " + goal + " Finding next breadcrumb" ); + + for ( i = 0; i < crumb_list.size; i++ ) + { + if ( goal == crumb_list[i] ) + { + bad_crumbs[bad_crumbs.size] = i; + break; + } + } + } +} + +zombie_pathing_get_breadcrumb( origin, breadcrumbs, bad_crumbs, pick_random ) +{ + assert( isdefined( origin ) ); + assert( isdefined( breadcrumbs ) ); + assert( isarray( breadcrumbs ) ); +/# + if ( pick_random ) + debug_print( "Finding random breadcrumb" ); +#/ + for ( i = 0; i < breadcrumbs.size; i++ ) + { + if ( pick_random ) + crumb_index = randomint( breadcrumbs.size ); + else + crumb_index = i; + + if ( crumb_is_bad( crumb_index, bad_crumbs ) ) + continue; + + return breadcrumbs[crumb_index]; + } + + return undefined; +} + +crumb_is_bad( crumb, bad_crumbs ) +{ + for ( i = 0; i < bad_crumbs.size; i++ ) + { + if ( bad_crumbs[i] == crumb ) + return true; + } + + return false; +} + +jitter_enemies_bad_breadcrumbs( start_crumb ) +{ + trace_distance = 35; + jitter_distance = 2; + index = start_crumb; + + while ( isdefined( self.favoriteenemy.zombie_breadcrumbs[index + 1] ) ) + { + current_crumb = self.favoriteenemy.zombie_breadcrumbs[index]; + next_crumb = self.favoriteenemy.zombie_breadcrumbs[index + 1]; + angles = vectortoangles( current_crumb - next_crumb ); + right = anglestoright( angles ); + left = anglestoright( angles + vectorscale( ( 0, 1, 0 ), 180.0 ) ); + dist_pos = current_crumb + vectorscale( right, trace_distance ); + trace = bullettrace( current_crumb, dist_pos, 1, undefined ); + vector = trace["position"]; + + if ( distance( vector, current_crumb ) < 17 ) + { + self.favoriteenemy.zombie_breadcrumbs[index] = current_crumb + vectorscale( left, jitter_distance ); + continue; + } + + dist_pos = current_crumb + vectorscale( left, trace_distance ); + trace = bullettrace( current_crumb, dist_pos, 1, undefined ); + vector = trace["position"]; + + if ( distance( vector, current_crumb ) < 17 ) + { + self.favoriteenemy.zombie_breadcrumbs[index] = current_crumb + vectorscale( right, jitter_distance ); + continue; + } + + index++; + } +} + +zombie_repath_notifier() +{ + note = 0; + notes = []; + + for ( i = 0; i < 4; i++ ) + notes[notes.size] = "zombie_repath_notify_" + i; + + while ( true ) + { + level notify( notes[note] ); + note = ( note + 1 ) % 4; + wait 0.05; + } +} + +zombie_follow_enemy() +{ + self endon( "death" ); + self endon( "zombie_acquire_enemy" ); + self endon( "bad_path" ); + level endon( "intermission" ); + + if ( !isdefined( level.repathnotifierstarted ) ) + { + level.repathnotifierstarted = 1; + level thread zombie_repath_notifier(); + } + + if ( !isdefined( self.zombie_repath_notify ) ) + self.zombie_repath_notify = "zombie_repath_notify_" + self getentitynumber() % 4; + + while ( true ) + { + if ( !isdefined( self._skip_pathing_first_delay ) ) + level waittill( self.zombie_repath_notify ); + else + self._skip_pathing_first_delay = undefined; + + if ( !( isdefined( self.ignore_enemyoverride ) && self.ignore_enemyoverride ) && isdefined( self.enemyoverride ) && isdefined( self.enemyoverride[1] ) ) + { + if ( distancesquared( self.origin, self.enemyoverride[0] ) > 1 ) + self orientmode( "face motion" ); + else + self orientmode( "face point", self.enemyoverride[1].origin ); + + self.ignoreall = 1; + goalpos = self.enemyoverride[0]; + + if ( isdefined( level.adjust_enemyoverride_func ) ) + goalpos = self [[ level.adjust_enemyoverride_func ]](); + + self setgoalpos( goalpos ); + } + else if ( isdefined( self.favoriteenemy ) ) + { + self.ignoreall = 0; + self orientmode( "face default" ); + goalpos = self.favoriteenemy.origin; + + if ( isdefined( level.enemy_location_override_func ) ) + goalpos = [[ level.enemy_location_override_func ]]( self, self.favoriteenemy ); + + self setgoalpos( goalpos ); + + if ( !isdefined( level.ignore_path_delays ) ) + { + distsq = distancesquared( self.origin, self.favoriteenemy.origin ); + + if ( distsq > 10240000 ) + wait( 2.0 + randomfloat( 1.0 ) ); + else if ( distsq > 4840000 ) + wait( 1.0 + randomfloat( 0.5 ) ); + else if ( distsq > 1440000 ) + wait( 0.5 + randomfloat( 0.5 ) ); + } + } + + if ( isdefined( level.inaccesible_player_func ) ) + self [[ level.inaccessible_player_func ]](); + } +} + +zombie_eye_glow() +{ + if ( !isdefined( self ) ) + return; + + if ( !isdefined( self.no_eye_glow ) || !self.no_eye_glow ) + self setclientfield( "zombie_has_eyes", 1 ); +} + +zombie_eye_glow_stop() +{ + if ( !isdefined( self ) ) + return; + + if ( !isdefined( self.no_eye_glow ) || !self.no_eye_glow ) + self setclientfield( "zombie_has_eyes", 0 ); +} + +zombie_history( msg ) +{ +/# + if ( !isdefined( self.zombie_history ) || 32 <= self.zombie_history.size ) + self.zombie_history = []; + + self.zombie_history[self.zombie_history.size] = msg; +#/ +} + +do_zombie_spawn() +{ + self endon( "death" ); + spots = []; + + if ( isdefined( self._rise_spot ) ) + { + spot = self._rise_spot; + self thread do_zombie_rise( spot ); + return; + } + + if ( isdefined( level.zombie_spawn_locations ) ) + { + for ( i = 0; i < level.zombie_spawn_locations.size; i++ ) + { + if ( isdefined( level.use_multiple_spawns ) && level.use_multiple_spawns && isdefined( self.script_int ) ) + { + if ( !( isdefined( level.spawner_int ) && level.spawner_int == self.script_int ) && !( isdefined( level.zombie_spawn_locations[i].script_int ) || isdefined( level.zones[level.zombie_spawn_locations[i].zone_name].script_int ) ) ) + continue; + + if ( isdefined( level.zombie_spawn_locations[i].script_int ) && level.zombie_spawn_locations[i].script_int != self.script_int ) + continue; + else if ( isdefined( level.zones[level.zombie_spawn_locations[i].zone_name].script_int ) && level.zones[level.zombie_spawn_locations[i].zone_name].script_int != self.script_int ) + continue; + } + + spots[spots.size] = level.zombie_spawn_locations[i]; + } + } +/# + if ( getdvarint( _hash_A8C231AA ) ) + { + if ( isdefined( level.zombie_spawn_locations ) ) + { + player = get_players()[0]; + spots = []; + + for ( i = 0; i < level.zombie_spawn_locations.size; i++ ) + { + player_vec = vectornormalize( anglestoforward( player.angles ) ); + player_spawn = vectornormalize( level.zombie_spawn_locations[i].origin - player.origin ); + dot = vectordot( player_vec, player_spawn ); + + if ( dot > 0.707 ) + { + spots[spots.size] = level.zombie_spawn_locations[i]; + debugstar( level.zombie_spawn_locations[i].origin, 1000, ( 1, 1, 1 ) ); + } + } + + if ( spots.size <= 0 ) + { + spots[spots.size] = level.zombie_spawn_locations[0]; + iprintln( "no spawner in view" ); + } + } + } +#/ + assert( spots.size > 0, "No spawn locations found" ); + spot = random( spots ); + self.spawn_point = spot; +/# + if ( isdefined( level.toggle_show_spawn_locations ) && level.toggle_show_spawn_locations ) + { + debugstar( spot.origin, getdvarint( _hash_BB9101B2 ), ( 0, 1, 0 ) ); + host_player = gethostplayer(); + distance = distance( spot.origin, host_player.origin ); + iprintln( "Distance to player: " + distance / 12 + "feet" ); + } +#/ + if ( isdefined( spot.target ) ) + self.target = spot.target; + + if ( isdefined( spot.zone_name ) ) + self.zone_name = spot.zone_name; + + if ( isdefined( spot.script_parameters ) ) + self.script_parameters = spot.script_parameters; + + tokens = strtok( spot.script_noteworthy, " " ); + + foreach ( index, token in tokens ) + { + if ( isdefined( self.spawn_point_override ) ) + { + spot = self.spawn_point_override; + token = spot.script_noteworthy; + } + + if ( token == "custom_spawner_entry" ) + { + next_token = index + 1; + + if ( isdefined( tokens[next_token] ) ) + { + str_spawn_entry = tokens[next_token]; + + if ( isdefined( level.custom_spawner_entry ) && isdefined( level.custom_spawner_entry[str_spawn_entry] ) ) + { + self thread [[ level.custom_spawner_entry[str_spawn_entry] ]]( spot ); + continue; + } + } + } + + if ( token == "riser_location" ) + { + self thread do_zombie_rise( spot ); + continue; + } + + if ( token == "faller_location" ) + { + self thread maps\mp\zombies\_zm_ai_faller::do_zombie_fall( spot ); + continue; + } + + if ( token == "dog_location" ) + continue; + else if ( token == "screecher_location" ) + continue; + else if ( token == "leaper_location" ) + continue; + else + { + if ( isdefined( self.anchor ) ) + return; + + self.anchor = spawn( "script_origin", self.origin ); + self.anchor.angles = self.angles; + self linkto( self.anchor ); + + if ( !isdefined( spot.angles ) ) + spot.angles = ( 0, 0, 0 ); + + self ghost(); + self.anchor moveto( spot.origin, 0.05 ); + + self.anchor waittill( "movedone" ); + + target_org = get_desired_origin(); + + if ( isdefined( target_org ) ) + { + anim_ang = vectortoangles( target_org - self.origin ); + self.anchor rotateto( ( 0, anim_ang[1], 0 ), 0.05 ); + + self.anchor waittill( "rotatedone" ); + } + + if ( isdefined( level.zombie_spawn_fx ) ) + playfx( level.zombie_spawn_fx, spot.origin ); + + self unlink(); + + if ( isdefined( self.anchor ) ) + self.anchor delete(); + + self show(); + self notify( "risen", spot.script_string ); + } + } +} + +do_zombie_rise( spot ) +{ + self endon( "death" ); + self.in_the_ground = 1; + + if ( isdefined( self.anchor ) ) + self.anchor delete(); + + self.anchor = spawn( "script_origin", self.origin ); + self.anchor.angles = self.angles; + self linkto( self.anchor ); + + if ( !isdefined( spot.angles ) ) + spot.angles = ( 0, 0, 0 ); + + anim_org = spot.origin; + anim_ang = spot.angles; + anim_org += ( 0, 0, 0 ); + self ghost(); + self.anchor moveto( anim_org, 0.05 ); + + self.anchor waittill( "movedone" ); + + target_org = get_desired_origin(); + + if ( isdefined( target_org ) ) + { + anim_ang = vectortoangles( target_org - self.origin ); + self.anchor rotateto( ( 0, anim_ang[1], 0 ), 0.05 ); + + self.anchor waittill( "rotatedone" ); + } + + self unlink(); + + if ( isdefined( self.anchor ) ) + self.anchor delete(); + + self thread hide_pop(); + level thread zombie_rise_death( self, spot ); + spot thread zombie_rise_fx( self ); + substate = 0; + + if ( self.zombie_move_speed == "walk" ) + substate = randomint( 2 ); + else if ( self.zombie_move_speed == "run" ) + substate = 2; + else if ( self.zombie_move_speed == "sprint" ) + substate = 3; + + self orientmode( "face default" ); + self animscripted( self.origin, spot.angles, "zm_rise", substate ); + self maps\mp\animscripts\zm_shared::donotetracks( "rise_anim", ::handle_rise_notetracks, spot ); + self notify( "rise_anim_finished" ); + spot notify( "stop_zombie_rise_fx" ); + self.in_the_ground = 0; + self notify( "risen", spot.script_string ); +} + +hide_pop() +{ + self endon( "death" ); + wait 0.5; + + if ( isdefined( self ) ) + { + self show(); + wait_network_frame(); + + if ( isdefined( self ) ) + self.create_eyes = 1; + } +} + +handle_rise_notetracks( note, spot ) +{ + if ( note == "deathout" || note == "deathhigh" ) + { + self.zombie_rise_death_out = 1; + self notify( "zombie_rise_death_out" ); + wait 2; + spot notify( "stop_zombie_rise_fx" ); + } +} + +zombie_rise_death( zombie, spot ) +{ + zombie.zombie_rise_death_out = 0; + zombie endon( "rise_anim_finished" ); + + while ( isdefined( zombie ) && isdefined( zombie.health ) && zombie.health > 1 ) + zombie waittill( "damage", amount ); + + spot notify( "stop_zombie_rise_fx" ); + + if ( isdefined( zombie ) ) + { + zombie.deathanim = zombie get_rise_death_anim(); + zombie stopanimscripted(); + } +} + +zombie_rise_fx( zombie ) +{ + if ( !( isdefined( level.riser_fx_on_client ) && level.riser_fx_on_client ) ) + { + self thread zombie_rise_dust_fx( zombie ); + self thread zombie_rise_burst_fx( zombie ); + } + else + self thread zombie_rise_burst_fx( zombie ); + + zombie endon( "death" ); + self endon( "stop_zombie_rise_fx" ); + wait 1; + + if ( zombie.zombie_move_speed != "sprint" ) + wait 1; +} + +zombie_rise_burst_fx( zombie ) +{ + self endon( "stop_zombie_rise_fx" ); + self endon( "rise_anim_finished" ); + + if ( isdefined( self.script_parameters ) && self.script_parameters == "in_water" && !( isdefined( level._no_water_risers ) && level._no_water_risers ) ) + zombie setclientfield( "zombie_riser_fx_water", 1 ); + else if ( isdefined( self.script_parameters ) && self.script_parameters == "in_foliage" && ( isdefined( level._foliage_risers ) && level._foliage_risers ) ) + zombie setclientfield( "zombie_riser_fx_foliage", 1 ); + else if ( isdefined( self.script_parameters ) && self.script_parameters == "in_snow" ) + zombie setclientfield( "zombie_riser_fx", 1 ); + else if ( isdefined( zombie.zone_name ) && isdefined( level.zones[zombie.zone_name] ) ) + { + low_g_zones = getentarray( zombie.zone_name, "targetname" ); + + if ( isdefined( low_g_zones[0].script_string ) && low_g_zones[0].script_string == "lowgravity" ) + zombie setclientfield( "zombie_riser_fx_lowg", 1 ); + else + zombie setclientfield( "zombie_riser_fx", 1 ); + } + else + zombie setclientfield( "zombie_riser_fx", 1 ); +} + +zombie_rise_dust_fx( zombie ) +{ + dust_tag = "J_SpineUpper"; + self endon( "stop_zombie_rise_dust_fx" ); + self thread stop_zombie_rise_dust_fx( zombie ); + wait 2; + dust_time = 5.5; + dust_interval = 0.3; + + if ( isdefined( self.script_string ) && self.script_string == "in_water" ) + { + for ( t = 0; t < dust_time; t += dust_interval ) + { + playfxontag( level._effect["rise_dust_water"], zombie, dust_tag ); + wait( dust_interval ); + } + } + else if ( isdefined( self.script_string ) && self.script_string == "in_snow" ) + { + for ( t = 0; t < dust_time; t += dust_interval ) + { + playfxontag( level._effect["rise_dust_snow"], zombie, dust_tag ); + wait( dust_interval ); + } + } + else if ( isdefined( self.script_string ) && self.script_string == "in_foliage" ) + { + for ( t = 0; t < dust_time; t += dust_interval ) + { + playfxontag( level._effect["rise_dust_foliage"], zombie, dust_tag ); + wait( dust_interval ); + } + } + else + { + for ( t = 0; t < dust_time; t += dust_interval ) + { + playfxontag( level._effect["rise_dust"], zombie, dust_tag ); + wait( dust_interval ); + } + } +} + +stop_zombie_rise_dust_fx( zombie ) +{ + zombie waittill( "death" ); + + self notify( "stop_zombie_rise_dust_fx" ); +} + +get_rise_death_anim() +{ + if ( self.zombie_rise_death_out ) + return "zm_rise_death_out"; + + self.noragdoll = 1; + self.nodeathragdoll = 1; + return "zm_rise_death_in"; +} + +zombie_tesla_head_gib() +{ + self endon( "death" ); + + if ( self.animname == "quad_zombie" ) + return; + + if ( randomint( 100 ) < level.zombie_vars["tesla_head_gib_chance"] ) + { + wait( randomfloatrange( 0.53, 1.0 ) ); + self zombie_head_gib(); + } + else + network_safe_play_fx_on_tag( "tesla_death_fx", 2, level._effect["tesla_shock_eyes"], self, "J_Eyeball_LE" ); +} + +play_ambient_zombie_vocals() +{ + self endon( "death" ); + + if ( self.animname == "monkey_zombie" || isdefined( self.is_avogadro ) && self.is_avogadro ) + return; + + while ( true ) + { + type = "ambient"; + float = 2; + + if ( !isdefined( self.zombie_move_speed ) ) + { + wait 0.5; + continue; + } + + switch ( self.zombie_move_speed ) + { + case "walk": + type = "ambient"; + float = 4; + break; + case "run": + type = "sprint"; + float = 4; + break; + case "sprint": + type = "sprint"; + float = 4; + break; + } + + if ( self.animname == "zombie" && !self.has_legs ) + type = "crawler"; + else if ( self.animname == "thief_zombie" || self.animname == "leaper_zombie" ) + float = 1.2; + + name = self.animname; + + if ( isdefined( self.sndname ) ) + name = self.sndname; + + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( type, name ); + wait( randomfloatrange( 1, float ) ); + } +} + +zombie_complete_emerging_into_playable_area() +{ + self.completed_emerging_into_playable_area = 1; + self notify( "completed_emerging_into_playable_area" ); + self.no_powerups = 0; + self thread zombie_free_cam_allowed(); +} + +zombie_free_cam_allowed() +{ + self endon( "death" ); + wait 1.5; + self setfreecameralockonallowed( 1 ); +} diff --git a/ZM/Core/maps/mp/zombies/_zm_stats.gsc b/ZM/Core/maps/mp/zombies/_zm_stats.gsc new file mode 100644 index 0000000..55f8469 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_stats.gsc @@ -0,0 +1,981 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\zombies\_zm_pers_upgrades; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\gametypes_zm\_globallogic; + +init() +{ + level.player_stats_init = ::player_stats_init; + level.add_client_stat = ::add_client_stat; + level.increment_client_stat = ::increment_client_stat; + level.track_gibs = ::do_stats_for_gibs; +} + +player_stats_init() +{ + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "kills", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "suicides", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "downs", 0 ); + self.downs = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "downs" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "revives", 0 ); + self.revives = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "revives" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "perks_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "headshots", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "gibs", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "head_gibs", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "right_arm_gibs", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "left_arm_gibs", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "right_leg_gibs", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "left_leg_gibs", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "melee_kills", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "grenade_kills", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "doors_purchased", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "distance_traveled", 0 ); + self.distance_traveled = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "distance_traveled" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "total_shots", 0 ); + self.total_shots = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "total_shots" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "hits", 0 ); + self.hits = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "hits" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "deaths", 0 ); + self.deaths = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "deaths" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "boards", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "wins", 0 ); + self.totalwins = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "totalwins" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "losses", 0 ); + self.totallosses = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "totallosses" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "failed_revives", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sacrifices", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "failed_sacrifices", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "drops", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "nuke_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "insta_kill_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "full_ammo_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "double_points_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "meat_stink_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "carpenter_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "fire_sale_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zombie_blood_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "time_bomb_ammo_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "use_magicbox", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "grabbed_from_magicbox", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "use_perk_random", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "grabbed_from_perk_random", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "use_pap", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pap_weapon_grabbed", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pap_weapon_not_grabbed", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_armorvest_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_quickrevive_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_rof_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_fastreload_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_flakjacket_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_additionalprimaryweapon_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_longersprint_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_deadshot_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_scavenger_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_finalstand_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_grenadepulldeath_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_nomotionsensor" + "_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "claymores_planted", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "claymores_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "ballistic_knives_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "wallbuy_weapons_purchased", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "ammo_purchased", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "upgraded_ammo_purchased", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "power_turnedon", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "power_turnedoff", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "planted_buildables_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buildables_built", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "time_played_total", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "weighted_rounds_played", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "contaminations_received", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "contaminations_given", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zdogs_killed", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zdog_rounds_finished", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zdog_rounds_lost", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "killed_by_zdog", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "screecher_minigames_won", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "screecher_minigames_lost", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "screechers_killed", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "screecher_teleporters_used", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "avogadro_defeated", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "killed_by_avogadro", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "cheat_too_many_weapons", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "cheat_out_of_playable", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "cheat_too_friendly", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "cheat_total", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "prison_tomahawk_acquired", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "prison_fan_trap_used", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "prison_acid_trap_used", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "prison_sniper_tower_used", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "prison_ee_good_ending", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "prison_ee_bad_ending", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "prison_ee_spoon_acquired", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "prison_brutus_killed", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_lsat_purchased", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_fountain_transporter_used", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_ghost_killed", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_ghost_drained_player", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_ghost_perk_acquired", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_booze_given", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_booze_break_barricade", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_given", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_protect", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_build_buildable", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_wallbuy", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_fetch_buildable", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_box_lock", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_box_move", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_box_spin", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_powerup_cycle", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_dance", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_crawler", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_wallbuy_placed", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_wallbuy_placed_ak74u_zm", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_wallbuy_placed_an94_zm", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_wallbuy_placed_pdw57_zm", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_wallbuy_placed_svu_zm", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_wallbuy_placed_tazer_knuckles_zm", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_wallbuy_placed_870mcs_zm", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomb_mechz_killed", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomb_giant_robot_stomped", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomb_giant_robot_accessed", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomb_generator_captured", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomb_generator_defended", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomb_generator_lost", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomb_dig", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomb_golden_shovel", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomb_golden_hard_hat", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomb_perk_extension", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_boarding", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_revivenoperk", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_multikill_headshots", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_cash_back_bought", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_cash_back_prone", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_insta_kill", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_nube_5_times", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_jugg", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_jugg_downgrade_count", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_carpenter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_max_round_reached", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_flopper_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_perk_lose_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_pistol_points_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_double_points_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_sniper_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_marathon_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_box_weapon_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_zombie_kiting_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_max_ammo_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_melee_bonus_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_nube_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_last_man_standing_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_reload_speed_counter", 0, 1 ); + self maps\mp\zombies\_zm_pers_upgrades::pers_abilities_init_globals(); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "score", 0 ); + + if ( level.resetplayerscoreeveryround ) + self.pers["score"] = 0; + + self.pers["score"] = level.player_starting_points; + self.score = self.pers["score"]; + self incrementplayerstat( "score", self.score ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zteam", 0 ); + + if ( isdefined( level.level_specific_stats_init ) ) + [[ level.level_specific_stats_init ]](); + + if ( !isdefined( self.stats_this_frame ) ) + { + self.pers_upgrade_force_test = 1; + self.stats_this_frame = []; + self.pers_upgrades_awarded = []; + } +} + +update_players_stats_at_match_end( players ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + game_mode = getdvar( "ui_gametype" ); + game_mode_group = level.scr_zm_ui_gametype_group; + map_location_name = level.scr_zm_map_start_location; + + if ( map_location_name == "" ) + map_location_name = "default"; + + if ( isdefined( level.gamemodulewinningteam ) ) + { + if ( level.gamemodulewinningteam == "B" ) + matchrecorderincrementheaderstat( "winningTeam", 1 ); + else if ( level.gamemodulewinningteam == "A" ) + matchrecorderincrementheaderstat( "winningTeam", 2 ); + } + + recordmatchsummaryzombieendgamedata( game_mode, game_mode_group, map_location_name, level.round_number ); + newtime = gettime(); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( player is_bot() ) + continue; + + distance = player get_stat_distance_traveled(); + player addplayerstatwithgametype( "distance_traveled", distance ); + player add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "time_played_total", player.pers["time_played_total"] ); + recordplayermatchend( player ); + recordplayerstats( player, "presentAtEnd", 1 ); + player maps\mp\zombies\_zm_weapons::updateweapontimingszm( newtime ); + + if ( isdefined( level._game_module_stat_update_func ) ) + player [[ level._game_module_stat_update_func ]](); + + old_high_score = player get_game_mode_stat( game_mode, "score" ); + + if ( player.score_total > old_high_score ) + player set_game_mode_stat( game_mode, "score", player.score_total ); + + if ( gamemodeismode( level.gamemode_public_match ) ) + { + player gamehistoryfinishmatch( 4, 0, 0, 0, 0, 0 ); + + if ( isdefined( player.pers["matchesPlayedStatsTracked"] ) ) + { + gamemode = maps\mp\gametypes_zm\_globallogic::getcurrentgamemode(); + player maps\mp\gametypes_zm\_globallogic::incrementmatchcompletionstat( gamemode, "played", "completed" ); + + if ( isdefined( player.pers["matchesHostedStatsTracked"] ) ) + { + player maps\mp\gametypes_zm\_globallogic::incrementmatchcompletionstat( gamemode, "hosted", "completed" ); + player.pers["matchesHostedStatsTracked"] = undefined; + } + + player.pers["matchesPlayedStatsTracked"] = undefined; + } + } + + if ( !isdefined( player.pers["previous_distance_traveled"] ) ) + player.pers["previous_distance_traveled"] = 0; + + distancethisround = int( player.pers["distance_traveled"] - player.pers["previous_distance_traveled"] ); + player.pers["previous_distance_traveled"] = player.pers["distance_traveled"]; + player incrementplayerstat( "distance_traveled", distancethisround ); + } +} + +update_playing_utc_time( matchendutctime ) +{ + current_days = int( matchendutctime / 86400 ); + last_days = self get_global_stat( "TIMESTAMPLASTDAY1" ); + last_days = int( last_days / 86400 ); + diff_days = current_days - last_days; + timestamp_name = ""; + + if ( diff_days > 0 ) + { + for ( i = 5; i > diff_days; i-- ) + { + timestamp_name = "TIMESTAMPLASTDAY" + i - diff_days; + timestamp_name_to = "TIMESTAMPLASTDAY" + i; + timestamp_value = self get_global_stat( timestamp_name ); + self set_global_stat( timestamp_name_to, timestamp_value ); + } + + for ( i = 2; i <= diff_days && i < 6; i++ ) + { + timestamp_name = "TIMESTAMPLASTDAY" + i; + self set_global_stat( timestamp_name, 0 ); + } + + self set_global_stat( "TIMESTAMPLASTDAY1", matchendutctime ); + } +} + +survival_classic_custom_stat_update() +{ + +} + +grief_custom_stat_update() +{ + +} + +add_game_mode_group_stat( game_mode, stat_name, value ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self adddstat( "PlayerStatsByGameTypeGroup", game_mode, stat_name, "statValue", value ); +} + +set_game_mode_group_stat( game_mode, stat_name, value ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self setdstat( "PlayerStatsByGameTypeGroup", game_mode, stat_name, "statValue", value ); +} + +get_game_mode_group_stat( game_mode, stat_name ) +{ + return self getdstat( "PlayerStatsByGameTypeGroup", game_mode, stat_name, "statValue" ); +} + +add_game_mode_stat( game_mode, stat_name, value ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self adddstat( "PlayerStatsByGameType", game_mode, stat_name, "statValue", value ); +} + +set_game_mode_stat( game_mode, stat_name, value ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self setdstat( "PlayerStatsByGameType", game_mode, stat_name, "statValue", value ); +} + +get_game_mode_stat( game_mode, stat_name ) +{ + return self getdstat( "PlayerStatsByGameType", game_mode, stat_name, "statValue" ); +} + +get_global_stat( stat_name ) +{ + return self getdstat( "PlayerStatsList", stat_name, "StatValue" ); +} + +set_global_stat( stat_name, value ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self setdstat( "PlayerStatsList", stat_name, "StatValue", value ); +} + +add_global_stat( stat_name, value ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self adddstat( "PlayerStatsList", stat_name, "StatValue", value ); +} + +get_map_stat( stat_name, map = level.script ) +{ + return self getdstat( "PlayerStatsByMap", map, stat_name ); +} + +set_map_stat( stat_name, value, map = level.script ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self setdstat( "PlayerStatsByMap", map, stat_name, value ); +} + +add_map_stat( stat_name, value, map = level.script ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self adddstat( "PlayerStatsByMap", map, stat_name, value ); +} + +get_location_gametype_stat( start_location, game_type, stat_name ) +{ + return self getdstat( "PlayerStatsByStartLocation", start_location, "startLocationGameTypeStats", game_type, "stats", stat_name, "StatValue" ); +} + +set_location_gametype_stat( start_location, game_type, stat_name, value ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self setdstat( "PlayerStatsByStartLocation", start_location, "startLocationGameTypeStats", game_type, "stats", stat_name, "StatValue", value ); +} + +add_location_gametype_stat( start_location, game_type, stat_name, value ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self adddstat( "PlayerStatsByStartLocation", start_location, "startLocationGameTypeStats", game_type, "stats", stat_name, "StatValue", value ); +} + +get_map_weaponlocker_stat( stat_name, map = level.script ) +{ + return self getdstat( "PlayerStatsByMap", map, "weaponLocker", stat_name ); +} + +set_map_weaponlocker_stat( stat_name, value, map = level.script ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + if ( isdefined( value ) ) + self setdstat( "PlayerStatsByMap", map, "weaponLocker", stat_name, value ); + else + self setdstat( "PlayerStatsByMap", map, "weaponLocker", stat_name, 0 ); +} + +add_map_weaponlocker_stat( stat_name, value, map = level.script ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self adddstat( "PlayerStatsByMap", map, "weaponLocker", stat_name, value ); +} + +has_stored_weapondata( map = level.script ) +{ + storedweapon = self get_map_weaponlocker_stat( "name", map ); + + if ( !isdefined( storedweapon ) || isstring( storedweapon ) && storedweapon == "" || isint( storedweapon ) && storedweapon == 0 ) + return false; + + return true; +} + +get_stored_weapondata( map = level.script ) +{ + if ( self has_stored_weapondata( map ) ) + { + weapondata = []; + weapondata["name"] = self get_map_weaponlocker_stat( "name", map ); + weapondata["lh_clip"] = self get_map_weaponlocker_stat( "lh_clip", map ); + weapondata["clip"] = self get_map_weaponlocker_stat( "clip", map ); + weapondata["stock"] = self get_map_weaponlocker_stat( "stock", map ); + weapondata["alt_clip"] = self get_map_weaponlocker_stat( "alt_clip", map ); + weapondata["alt_stock"] = self get_map_weaponlocker_stat( "alt_stock", map ); + return weapondata; + } + + return undefined; +} + +clear_stored_weapondata( map = level.script ) +{ + self set_map_weaponlocker_stat( "name", "", map ); + self set_map_weaponlocker_stat( "lh_clip", 0, map ); + self set_map_weaponlocker_stat( "clip", 0, map ); + self set_map_weaponlocker_stat( "stock", 0, map ); + self set_map_weaponlocker_stat( "alt_clip", 0, map ); + self set_map_weaponlocker_stat( "alt_stock", 0, map ); +} + +set_stored_weapondata( weapondata, map = level.script ) +{ + self set_map_weaponlocker_stat( "name", weapondata["name"], map ); + self set_map_weaponlocker_stat( "lh_clip", weapondata["lh_clip"], map ); + self set_map_weaponlocker_stat( "clip", weapondata["clip"], map ); + self set_map_weaponlocker_stat( "stock", weapondata["stock"], map ); + self set_map_weaponlocker_stat( "alt_clip", weapondata["alt_clip"], map ); + self set_map_weaponlocker_stat( "alt_stock", weapondata["alt_stock"], map ); +} + +add_client_stat( stat_name, stat_value, include_gametype ) +{ + if ( getdvar( "ui_zm_mapstartlocation" ) == "" || is_true( level.zm_disable_recording_stats ) ) + return; + + if ( !isdefined( include_gametype ) ) + include_gametype = 1; + + self maps\mp\gametypes_zm\_globallogic_score::incpersstat( stat_name, stat_value, 0, include_gametype ); + self.stats_this_frame[stat_name] = 1; +} + +increment_player_stat( stat_name ) +{ + if ( getdvar( "ui_zm_mapstartlocation" ) == "" || is_true( level.zm_disable_recording_stats ) ) + return; + + self incrementplayerstat( stat_name, 1 ); +} + +increment_root_stat( stat_name, stat_value ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self adddstat( stat_name, stat_value ); +} + +increment_client_stat( stat_name, include_gametype ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + add_client_stat( stat_name, 1, include_gametype ); +} + +set_client_stat( stat_name, stat_value, include_gametype ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + current_stat_count = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( stat_name ); + self maps\mp\gametypes_zm\_globallogic_score::incpersstat( stat_name, stat_value - current_stat_count, 0, include_gametype ); + self.stats_this_frame[stat_name] = 1; +} + +zero_client_stat( stat_name, include_gametype ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + current_stat_count = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( stat_name ); + self maps\mp\gametypes_zm\_globallogic_score::incpersstat( stat_name, current_stat_count * -1, 0, include_gametype ); + self.stats_this_frame[stat_name] = 1; +} + +increment_map_cheat_stat( stat_name ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self adddstat( "PlayerStatsByMap", level.script, "cheats", stat_name, 1 ); +} + +get_stat_distance_traveled() +{ + miles = int( self.pers["distance_traveled"] / 63360 ); + remainder = self.pers["distance_traveled"] / 63360 - miles; + + if ( miles < 1 && remainder < 0.5 ) + miles = 1; + else if ( remainder >= 0.5 ) + miles++; + + return miles; +} + +get_stat_round_number() +{ + return level.round_number; +} + +get_stat_combined_rank_value_survival_classic() +{ + rounds = get_stat_round_number(); + kills = self.pers["kills"]; + + if ( rounds > 99 ) + rounds = 99; + + result = rounds * 10000000 + kills; + return result; +} + +get_stat_combined_rank_value_grief() +{ + wins = self.pers["wins"]; + losses = self.pers["losses"]; + + if ( wins > 9999 ) + wins = 9999; + + if ( losses > 9999 ) + losses = 9999; + + losses_value = 9999 - losses; + result = wins * 10000 + losses_value; + return result; +} + +update_global_counters_on_match_end() +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + deaths = 0; + kills = 0; + melee_kills = 0; + headshots = 0; + suicides = 0; + downs = 0; + revives = 0; + perks_drank = 0; + gibs = 0; + doors_purchased = 0; + distance_traveled = 0; + total_shots = 0; + boards = 0; + sacrifices = 0; + drops = 0; + nuke_pickedup = 0; + insta_kill_pickedup = 0; + full_ammo_pickedup = 0; + double_points_pickedup = 0; + meat_stink_pickedup = 0; + carpenter_pickedup = 0; + fire_sale_pickedup = 0; + zombie_blood_pickedup = 0; + use_magicbox = 0; + grabbed_from_magicbox = 0; + use_perk_random = 0; + grabbed_from_perk_random = 0; + use_pap = 0; + pap_weapon_grabbed = 0; + specialty_armorvest_drank = 0; + specialty_quickrevive_drank = 0; + specialty_fastreload_drank = 0; + specialty_longersprint_drank = 0; + specialty_scavenger_drank = 0; + specialty_rof_drank = 0; + specialty_deadshot_drank = 0; + specialty_flakjacket_drank = 0; + specialty_additionalprimaryweapon_drank = 0; + specialty_finalstand_drank = 0; + specialty_grenadepulldeath_drank = 0; + specialty_nomotionsensor_drank = 0; + claymores_planted = 0; + claymores_pickedup = 0; + ballistic_knives_pickedup = 0; + wallbuy_weapons_purchased = 0; + power_turnedon = 0; + power_turnedoff = 0; + planted_buildables_pickedup = 0; + ammo_purchased = 0; + upgraded_ammo_purchased = 0; + buildables_built = 0; + time_played = 0; + contaminations_received = 0; + contaminations_given = 0; + cheat_too_many_weapons = 0; + cheat_out_of_playable_area = 0; + cheat_too_friendly = 0; + cheat_total = 0; + prison_tomahawk_acquired = 0; + prison_fan_trap_used = 0; + prison_acid_trap_used = 0; + prison_sniper_tower_used = 0; + prison_ee_good_ending = 0; + prison_ee_bad_ending = 0; + prison_ee_spoon_acquired = 0; + prison_brutus_killed = 0; + buried_lsat_purchased = 0; + buried_fountain_transporter_used = 0; + buried_ghost_killed = 0; + buried_ghost_drained_player = 0; + buried_ghost_perk_acquired = 0; + buried_sloth_booze_given = 0; + buried_sloth_booze_break_barricade = 0; + buried_sloth_candy_given = 0; + buried_sloth_candy_protect = 0; + buried_sloth_candy_build_buildable = 0; + buried_sloth_candy_wallbuy = 0; + buried_sloth_candy_fetch_buildable = 0; + buried_sloth_candy_box_lock = 0; + buried_sloth_candy_box_move = 0; + buried_sloth_candy_box_spin = 0; + buried_sloth_candy_powerup_cycle = 0; + buried_sloth_candy_dance = 0; + buried_sloth_candy_crawler = 0; + buried_wallbuy_placed = 0; + buried_wallbuy_placed_ak74u_zm = 0; + buried_wallbuy_placed_an94_zm = 0; + buried_wallbuy_placed_pdw57_zm = 0; + buried_wallbuy_placed_svu_zm = 0; + buried_wallbuy_placed_tazer_knuckles_zm = 0; + buried_wallbuy_placed_870mcs_zm = 0; + tomb_mechz_killed = 0; + tomb_giant_robot_stomped = 0; + tomb_giant_robot_accessed = 0; + tomb_generator_captured = 0; + tomb_generator_defended = 0; + tomb_generator_lost = 0; + tomb_dig = 0; + tomb_golden_shovel = 0; + tomb_golden_hard_hat = 0; + tomb_perk_extension = 0; + players = get_players(); + + foreach ( player in players ) + { + deaths += player.pers["deaths"]; + kills += player.pers["kills"]; + headshots += player.pers["headshots"]; + suicides += player.pers["suicides"]; + melee_kills += player.pers["melee_kills"]; + downs += player.pers["downs"]; + revives += player.pers["revives"]; + perks_drank += player.pers["perks_drank"]; + specialty_armorvest_drank += player.pers["specialty_armorvest_drank"]; + specialty_quickrevive_drank += player.pers["specialty_quickrevive_drank"]; + specialty_fastreload_drank += player.pers["specialty_fastreload_drank"]; + specialty_longersprint_drank += player.pers["specialty_longersprint_drank"]; + specialty_rof_drank += player.pers["specialty_rof_drank"]; + specialty_deadshot_drank += player.pers["specialty_deadshot_drank"]; + specialty_scavenger_drank += player.pers["specialty_scavenger_drank"]; + specialty_flakjacket_drank += player.pers["specialty_flakjacket_drank"]; + specialty_additionalprimaryweapon_drank += player.pers["specialty_additionalprimaryweapon_drank"]; + specialty_finalstand_drank += player.pers["specialty_finalstand_drank"]; + specialty_grenadepulldeath_drank += player.pers["specialty_grenadepulldeath_drank"]; + specialty_nomotionsensor_drank += player.pers["specialty_nomotionsensor" + "_drank"]; + gibs += player.pers["gibs"]; + doors_purchased += player.pers["doors_purchased"]; + distance_traveled += player get_stat_distance_traveled(); + boards += player.pers["boards"]; + sacrifices += player.pers["sacrifices"]; + drops += player.pers["drops"]; + nuke_pickedup += player.pers["nuke_pickedup"]; + insta_kill_pickedup += player.pers["insta_kill_pickedup"]; + full_ammo_pickedup += player.pers["full_ammo_pickedup"]; + double_points_pickedup += player.pers["double_points_pickedup"]; + meat_stink_pickedup += player.pers["meat_stink_pickedup"]; + carpenter_pickedup += player.pers["carpenter_pickedup"]; + fire_sale_pickedup += player.pers["fire_sale_pickedup"]; + zombie_blood_pickedup += player.pers["zombie_blood_pickedup"]; + use_magicbox += player.pers["use_magicbox"]; + grabbed_from_magicbox += player.pers["grabbed_from_magicbox"]; + use_perk_random += player.pers["use_perk_random"]; + grabbed_from_perk_random += player.pers["grabbed_from_perk_random"]; + use_pap += player.pers["use_pap"]; + pap_weapon_grabbed += player.pers["pap_weapon_grabbed"]; + claymores_planted += player.pers["claymores_planted"]; + claymores_pickedup += player.pers["claymores_pickedup"]; + ballistic_knives_pickedup += player.pers["ballistic_knives_pickedup"]; + wallbuy_weapons_purchased += player.pers["wallbuy_weapons_purchased"]; + power_turnedon += player.pers["power_turnedon"]; + power_turnedoff += player.pers["power_turnedoff"]; + planted_buildables_pickedup += player.pers["planted_buildables_pickedup"]; + buildables_built += player.pers["buildables_built"]; + ammo_purchased += player.pers["ammo_purchased"]; + upgraded_ammo_purchased += player.pers["upgraded_ammo_purchased"]; + total_shots += player.total_shots; + time_played += player.pers["time_played_total"]; + contaminations_received += player.pers["contaminations_received"]; + contaminations_given += player.pers["contaminations_given"]; + cheat_too_many_weapons += player.pers["cheat_too_many_weapons"]; + cheat_out_of_playable_area += player.pers["cheat_out_of_playable"]; + cheat_too_friendly += player.pers["cheat_too_friendly"]; + cheat_total += player.pers["cheat_total"]; + prison_tomahawk_acquired += player.pers["prison_tomahawk_acquired"]; + prison_fan_trap_used += player.pers["prison_fan_trap_used"]; + prison_acid_trap_used += player.pers["prison_acid_trap_used"]; + prison_sniper_tower_used += player.pers["prison_sniper_tower_used"]; + prison_ee_good_ending += player.pers["prison_ee_good_ending"]; + prison_ee_bad_ending += player.pers["prison_ee_bad_ending"]; + prison_ee_spoon_acquired += player.pers["prison_ee_spoon_acquired"]; + prison_brutus_killed += player.pers["prison_brutus_killed"]; + buried_lsat_purchased += player.pers["buried_lsat_purchased"]; + buried_fountain_transporter_used += player.pers["buried_fountain_transporter_used"]; + buried_ghost_killed += player.pers["buried_ghost_killed"]; + buried_ghost_drained_player += player.pers["buried_ghost_drained_player"]; + buried_ghost_perk_acquired += player.pers["buried_ghost_perk_acquired"]; + buried_sloth_booze_given += player.pers["buried_sloth_booze_given"]; + buried_sloth_booze_break_barricade += player.pers["buried_sloth_booze_break_barricade"]; + buried_sloth_candy_given += player.pers["buried_sloth_candy_given"]; + buried_sloth_candy_protect += player.pers["buried_sloth_candy_protect"]; + buried_sloth_candy_build_buildable += player.pers["buried_sloth_candy_build_buildable"]; + buried_sloth_candy_wallbuy += player.pers["buried_sloth_candy_wallbuy"]; + buried_sloth_candy_fetch_buildable += player.pers["buried_sloth_candy_fetch_buildable"]; + buried_sloth_candy_box_lock += player.pers["buried_sloth_candy_box_lock"]; + buried_sloth_candy_box_move += player.pers["buried_sloth_candy_box_move"]; + buried_sloth_candy_box_spin += player.pers["buried_sloth_candy_box_spin"]; + buried_sloth_candy_powerup_cycle += player.pers["buried_sloth_candy_powerup_cycle"]; + buried_sloth_candy_dance += player.pers["buried_sloth_candy_dance"]; + buried_sloth_candy_crawler += player.pers["buried_sloth_candy_crawler"]; + buried_wallbuy_placed += player.pers["buried_wallbuy_placed"]; + buried_wallbuy_placed_ak74u_zm += player.pers["buried_wallbuy_placed_ak74u_zm"]; + buried_wallbuy_placed_an94_zm += player.pers["buried_wallbuy_placed_an94_zm"]; + buried_wallbuy_placed_pdw57_zm += player.pers["buried_wallbuy_placed_pdw57_zm"]; + buried_wallbuy_placed_svu_zm += player.pers["buried_wallbuy_placed_svu_zm"]; + buried_wallbuy_placed_tazer_knuckles_zm += player.pers["buried_wallbuy_placed_tazer_knuckles_zm"]; + buried_wallbuy_placed_870mcs_zm += player.pers["buried_wallbuy_placed_870mcs_zm"]; + tomb_mechz_killed += player.pers["tomb_mechz_killed"]; + tomb_giant_robot_stomped += player.pers["tomb_giant_robot_stomped"]; + tomb_giant_robot_accessed += player.pers["tomb_giant_robot_accessed"]; + tomb_generator_captured += player.pers["tomb_generator_captured"]; + tomb_generator_defended += player.pers["tomb_generator_defended"]; + tomb_generator_lost += player.pers["tomb_generator_lost"]; + tomb_dig += player.pers["tomb_dig"]; + tomb_golden_shovel += player.pers["tomb_golden_shovel"]; + tomb_golden_hard_hat += player.pers["tomb_golden_hard_hat"]; + tomb_perk_extension += player.pers["tomb_perk_extension"]; + } + + game_mode = getdvar( "ui_gametype" ); + incrementcounter( "global_zm_" + game_mode, 1 ); + incrementcounter( "global_zm_games", 1 ); + + if ( "zclassic" == game_mode || "zm_nuked" == level.script ) + incrementcounter( "global_zm_games_" + level.script, 1 ); + + incrementcounter( "global_zm_killed", level.global_zombies_killed ); + incrementcounter( "global_zm_killed_by_players", kills ); + incrementcounter( "global_zm_killed_by_traps", level.zombie_trap_killed_count ); + incrementcounter( "global_zm_headshots", headshots ); + incrementcounter( "global_zm_suicides", suicides ); + incrementcounter( "global_zm_melee_kills", melee_kills ); + incrementcounter( "global_zm_downs", downs ); + incrementcounter( "global_zm_deaths", deaths ); + incrementcounter( "global_zm_revives", revives ); + incrementcounter( "global_zm_perks_drank", perks_drank ); + incrementcounter( "global_zm_specialty_armorvest_drank", specialty_armorvest_drank ); + incrementcounter( "global_zm_specialty_quickrevive_drank", specialty_quickrevive_drank ); + incrementcounter( "global_zm_specialty_fastreload_drank", specialty_fastreload_drank ); + incrementcounter( "global_zm_specialty_longersprint_drank", specialty_longersprint_drank ); + incrementcounter( "global_zm_specialty_rof_drank", specialty_rof_drank ); + incrementcounter( "global_zm_specialty_deadshot_drank", specialty_deadshot_drank ); + incrementcounter( "global_zm_specialty_scavenger_drank", specialty_scavenger_drank ); + incrementcounter( "global_zm_specialty_flakjacket_drank", specialty_flakjacket_drank ); + incrementcounter( "global_zm_specialty_additionalprimaryweapon_drank", specialty_additionalprimaryweapon_drank ); + incrementcounter( "global_zm_specialty_finalstand_drank", specialty_finalstand_drank ); + incrementcounter( "global_zm_specialty_grenadepulldeath_drank", specialty_grenadepulldeath_drank ); + incrementcounter( "global_zm_" + "specialty_nomotionsensor" + "_drank", specialty_nomotionsensor_drank ); + incrementcounter( "global_zm_gibs", gibs ); + incrementcounter( "global_zm_distance_traveled", int( distance_traveled ) ); + incrementcounter( "global_zm_doors_purchased", doors_purchased ); + incrementcounter( "global_zm_boards", boards ); + incrementcounter( "global_zm_sacrifices", sacrifices ); + incrementcounter( "global_zm_drops", drops ); + incrementcounter( "global_zm_total_nuke_pickedup", nuke_pickedup ); + incrementcounter( "global_zm_total_insta_kill_pickedup", insta_kill_pickedup ); + incrementcounter( "global_zm_total_full_ammo_pickedup", full_ammo_pickedup ); + incrementcounter( "global_zm_total_double_points_pickedup", double_points_pickedup ); + incrementcounter( "global_zm_total_meat_stink_pickedup", double_points_pickedup ); + incrementcounter( "global_zm_total_carpenter_pickedup", carpenter_pickedup ); + incrementcounter( "global_zm_total_fire_sale_pickedup", fire_sale_pickedup ); + incrementcounter( "global_zm_total_zombie_blood_pickedup", zombie_blood_pickedup ); + incrementcounter( "global_zm_use_magicbox", use_magicbox ); + incrementcounter( "global_zm_grabbed_from_magicbox", grabbed_from_magicbox ); + incrementcounter( "global_zm_use_perk_random", use_perk_random ); + incrementcounter( "global_zm_grabbed_from_perk_random", grabbed_from_perk_random ); + incrementcounter( "global_zm_use_pap", use_pap ); + incrementcounter( "global_zm_pap_weapon_grabbed", pap_weapon_grabbed ); + incrementcounter( "global_zm_claymores_planted", claymores_planted ); + incrementcounter( "global_zm_claymores_pickedup", claymores_pickedup ); + incrementcounter( "global_zm_ballistic_knives_pickedup", ballistic_knives_pickedup ); + incrementcounter( "global_zm_wallbuy_weapons_purchased", wallbuy_weapons_purchased ); + incrementcounter( "global_zm_power_turnedon", power_turnedon ); + incrementcounter( "global_zm_power_turnedoff", power_turnedoff ); + incrementcounter( "global_zm_planted_buildables_pickedup", planted_buildables_pickedup ); + incrementcounter( "global_zm_buildables_built", buildables_built ); + incrementcounter( "global_zm_ammo_purchased", ammo_purchased ); + incrementcounter( "global_zm_upgraded_ammo_purchased", upgraded_ammo_purchased ); + incrementcounter( "global_zm_total_shots", total_shots ); + incrementcounter( "global_zm_time_played", time_played ); + incrementcounter( "global_zm_contaminations_received", contaminations_received ); + incrementcounter( "global_zm_contaminations_given", contaminations_given ); + incrementcounter( "global_zm_cheat_players_too_friendly", cheat_too_friendly ); + incrementcounter( "global_zm_cheats_cheat_too_many_weapons", cheat_too_many_weapons ); + incrementcounter( "global_zm_cheats_out_of_playable", cheat_out_of_playable_area ); + incrementcounter( "global_zm_total_cheats", cheat_total ); + incrementcounter( "global_zm_prison_tomahawk_acquired", prison_tomahawk_acquired ); + incrementcounter( "global_zm_prison_fan_trap_used", prison_fan_trap_used ); + incrementcounter( "global_zm_prison_acid_trap_used", prison_acid_trap_used ); + incrementcounter( "global_zm_prison_sniper_tower_used", prison_sniper_tower_used ); + incrementcounter( "global_zm_prison_ee_good_ending", prison_ee_good_ending ); + incrementcounter( "global_zm_prison_ee_bad_ending", prison_ee_bad_ending ); + incrementcounter( "global_zm_prison_ee_spoon_acquired", prison_ee_spoon_acquired ); + incrementcounter( "global_zm_prison_brutus_killed", prison_brutus_killed ); + incrementcounter( "global_zm_buried_lsat_purchased", buried_lsat_purchased ); + incrementcounter( "global_zm_buried_fountain_transporter_used", buried_fountain_transporter_used ); + incrementcounter( "global_zm_buried_ghost_killed", buried_ghost_killed ); + incrementcounter( "global_zm_buried_ghost_drained_player", buried_ghost_drained_player ); + incrementcounter( "global_zm_buried_ghost_perk_acquired", buried_ghost_perk_acquired ); + incrementcounter( "global_zm_buried_sloth_booze_given", buried_sloth_booze_given ); + incrementcounter( "global_zm_buried_sloth_booze_break_barricade", buried_sloth_booze_break_barricade ); + incrementcounter( "global_zm_buried_sloth_candy_given", buried_sloth_candy_given ); + incrementcounter( "global_zm_buried_sloth_candy_protect", buried_sloth_candy_protect ); + incrementcounter( "global_zm_buried_sloth_candy_build_buildable", buried_sloth_candy_build_buildable ); + incrementcounter( "global_zm_buried_sloth_candy_wallbuy", buried_sloth_candy_wallbuy ); + incrementcounter( "global_zm_buried_sloth_candy_fetch_buildable", buried_sloth_candy_fetch_buildable ); + incrementcounter( "global_zm_buried_sloth_candy_box_lock", buried_sloth_candy_box_lock ); + incrementcounter( "global_zm_buried_sloth_candy_box_move", buried_sloth_candy_box_move ); + incrementcounter( "global_zm_buried_sloth_candy_box_spin", buried_sloth_candy_box_spin ); + incrementcounter( "global_zm_buried_sloth_candy_powerup_cycle", buried_sloth_candy_powerup_cycle ); + incrementcounter( "global_zm_buried_sloth_candy_dance", buried_sloth_candy_dance ); + incrementcounter( "global_zm_buried_sloth_candy_crawler", buried_sloth_candy_crawler ); + incrementcounter( "global_zm_buried_wallbuy_placed", buried_wallbuy_placed ); + incrementcounter( "global_zm_buried_wallbuy_placed_ak74u_zm", buried_wallbuy_placed_ak74u_zm ); + incrementcounter( "global_zm_buried_wallbuy_placed_an94_zm", buried_wallbuy_placed_an94_zm ); + incrementcounter( "global_zm_buried_wallbuy_placed_pdw57_zm", buried_wallbuy_placed_pdw57_zm ); + incrementcounter( "global_zm_buried_wallbuy_placed_svu_zm", buried_wallbuy_placed_svu_zm ); + incrementcounter( "global_zm_buried_wallbuy_placed_tazer_knuckles_zm", buried_wallbuy_placed_tazer_knuckles_zm ); + incrementcounter( "global_zm_buried_wallbuy_placed_870mcs_zm", buried_wallbuy_placed_870mcs_zm ); + incrementcounter( "global_zm_tomb_mechz_killed", tomb_mechz_killed ); + incrementcounter( "global_zm_tomb_giant_robot_stomped", tomb_giant_robot_stomped ); + incrementcounter( "global_zm_tomb_giant_robot_accessed", tomb_giant_robot_accessed ); + incrementcounter( "global_zm_tomb_generator_captured", tomb_generator_captured ); + incrementcounter( "global_zm_tomb_generator_defended", tomb_generator_defended ); + incrementcounter( "global_zm_tomb_generator_lost", tomb_generator_lost ); + incrementcounter( "global_zm_tomb_dig", tomb_dig ); + incrementcounter( "global_zm_tomb_golden_shovel", tomb_golden_shovel ); + incrementcounter( "global_zm_tomb_golden_hard_hat", tomb_golden_hard_hat ); + incrementcounter( "global_zm_tomb_perk_extension", tomb_perk_extension ); +} + +get_specific_stat( stat_category, stat_name ) +{ + return self getdstat( stat_category, stat_name, "StatValue" ); +} + +do_stats_for_gibs( zombie, limb_tags_array ) +{ + if ( isdefined( zombie ) && isdefined( zombie.attacker ) && isplayer( zombie.attacker ) ) + { + foreach ( limb in limb_tags_array ) + { + stat_name = undefined; + + if ( limb == level._zombie_gib_piece_index_right_arm ) + stat_name = "right_arm_gibs"; + else if ( limb == level._zombie_gib_piece_index_left_arm ) + stat_name = "left_arm_gibs"; + else if ( limb == level._zombie_gib_piece_index_right_leg ) + stat_name = "right_leg_gibs"; + else if ( limb == level._zombie_gib_piece_index_left_leg ) + stat_name = "left_leg_gibs"; + else if ( limb == level._zombie_gib_piece_index_head ) + stat_name = "head_gibs"; + + if ( !isdefined( stat_name ) ) + continue; + + zombie.attacker increment_client_stat( stat_name, 0 ); + zombie.attacker increment_client_stat( "gibs" ); + } + } +} + +initializematchstats() +{ + if ( !level.onlinegame || !gamemodeismode( level.gamemode_public_match ) ) + return; + + self.pers["lastHighestScore"] = self getdstat( "HighestStats", "highest_score" ); + currgametype = level.gametype; + self gamehistorystartmatch( getgametypeenumfromname( currgametype, 0 ) ); +} + +adjustrecentstats() +{ +/# + if ( getdvarint( "scr_writeConfigStrings" ) == 1 || getdvarint( "scr_hostmigrationtest" ) == 1 ) + return; +#/ + initializematchstats(); +} + +uploadstatssoon() +{ + self notify( "upload_stats_soon" ); + self endon( "upload_stats_soon" ); + self endon( "disconnect" ); + wait 1; + uploadstats( self ); +} diff --git a/ZM/Core/maps/mp/zombies/_zm_timer.gsc b/ZM/Core/maps/mp/zombies/_zm_timer.gsc new file mode 100644 index 0000000..09a6d97 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_timer.gsc @@ -0,0 +1,84 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; + +init() +{ + precacheshader( "zombie_stopwatchneedle" ); + precacheshader( "zombie_stopwatch" ); + precacheshader( "zombie_stopwatch_glass" ); + + if ( !isdefined( level.stopwatch_length_width ) ) + level.stopwatch_length_width = 96; +} + +start_timer( time, stop_notify ) +{ + self notify( "stop_prev_timer" ); + self endon( "stop_prev_timer" ); + + if ( !isdefined( self.stopwatch_elem ) ) + { + self.stopwatch_elem = newclienthudelem( self ); + self.stopwatch_elem.horzalign = "left"; + self.stopwatch_elem.vertalign = "top"; + self.stopwatch_elem.alignx = "left"; + self.stopwatch_elem.aligny = "top"; + self.stopwatch_elem.x = 10; + self.stopwatch_elem.alpha = 0; + self.stopwatch_elem.sort = 2; + self.stopwatch_elem_glass = newclienthudelem( self ); + self.stopwatch_elem_glass.horzalign = "left"; + self.stopwatch_elem_glass.vertalign = "top"; + self.stopwatch_elem_glass.alignx = "left"; + self.stopwatch_elem_glass.aligny = "top"; + self.stopwatch_elem_glass.x = 10; + self.stopwatch_elem_glass.alpha = 0; + self.stopwatch_elem_glass.sort = 3; + self.stopwatch_elem_glass setshader( "zombie_stopwatch_glass", level.stopwatch_length_width, level.stopwatch_length_width ); + } + + self thread update_hud_position(); + + if ( isdefined( stop_notify ) ) + self thread wait_for_stop_notify( stop_notify ); + + if ( time > 60 ) + time = 0; + + self.stopwatch_elem setclock( time, 60, "zombie_stopwatch", level.stopwatch_length_width, level.stopwatch_length_width ); + self.stopwatch_elem.alpha = 1; + self.stopwatch_elem_glass.alpha = 1; + wait( time ); + self notify( "countdown_finished" ); + wait 1; + self.stopwatch_elem.alpha = 0; + self.stopwatch_elem_glass.alpha = 0; +} + +wait_for_stop_notify( stop_notify ) +{ + self endon( "stop_prev_timer" ); + self endon( "countdown_finished" ); + + self waittill( stop_notify ); + + self.stopwatch_elem.alpha = 0; + self.stopwatch_elem_glass.alpha = 0; +} + +update_hud_position() +{ + self endon( "disconnect" ); + self endon( "stop_prev_timer" ); + self endon( "countdown_finished" ); + + while ( true ) + { + self.stopwatch_elem.y = 20; + self.stopwatch_elem_glass.y = 20; + wait 0.05; + } +} diff --git a/ZM/Core/maps/mp/zombies/_zm_tombstone.gsc b/ZM/Core/maps/mp/zombies/_zm_tombstone.gsc new file mode 100644 index 0000000..215fa3f --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_tombstone.gsc @@ -0,0 +1,477 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_melee_weapon; +#include maps\mp\zombies\_zm_weap_cymbal_monkey; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_perks; + +init() +{ + onplayerconnect_callback( ::tombstone_player_init ); + level.tombstone_laststand_func = ::tombstone_laststand; + level.tombstone_spawn_func = ::tombstone_spawn; + level thread tombstone_hostmigration(); + + if ( isdefined( level.zombiemode_using_tombstone_perk ) && level.zombiemode_using_tombstone_perk ) + add_custom_limited_weapon_check( ::is_weapon_available_in_tombstone ); +} + +tombstone_player_init() +{ + while ( !isdefined( self.tombstone_index ) ) + wait 0.1; + + level.tombstones[self.tombstone_index] = spawnstruct(); +} + +tombstone_spawn() +{ + dc = spawn( "script_model", self.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + dc.angles = self.angles; + dc setmodel( "tag_origin" ); + dc_icon = spawn( "script_model", self.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + dc_icon.angles = self.angles; + dc_icon setmodel( "ch_tombstone1" ); + dc_icon linkto( dc ); + dc.icon = dc_icon; + dc.script_noteworthy = "player_tombstone_model"; + dc.player = self; + self thread tombstone_clear(); + dc thread tombstone_wobble(); + dc thread tombstone_revived( self ); + result = self waittill_any_return( "player_revived", "spawned_player", "disconnect" ); + + if ( result == "player_revived" || result == "disconnect" ) + { + dc notify( "tombstone_timedout" ); + dc_icon unlink(); + dc_icon delete(); + dc delete(); + return; + } + + dc thread tombstone_timeout(); + dc thread tombstone_grab(); +} + +tombstone_clear() +{ + result = self waittill_any_return( "tombstone_timedout", "tombstone_grabbed" ); + level.tombstones[self.tombstone_index] = spawnstruct(); +} + +tombstone_revived( player ) +{ + self endon( "tombstone_timedout" ); + player endon( "disconnect" ); + shown = 1; + + while ( isdefined( self ) && isdefined( player ) ) + { + if ( isdefined( player.revivetrigger ) && ( isdefined( player.revivetrigger.beingrevived ) && player.revivetrigger.beingrevived ) ) + { + if ( shown ) + { + shown = 0; + self.icon hide(); + } + } + else if ( !shown ) + { + shown = 1; + self.icon show(); + } + + wait 0.05; + } +} + +tombstone_laststand() +{ + primaries = self getweaponslistprimaries(); + currentweapon = self getcurrentweapon(); + dc = level.tombstones[self.tombstone_index]; + dc.player = self; + dc.weapon = []; + dc.current_weapon = -1; + + foreach ( index, weapon in primaries ) + { + dc.weapon[index] = weapon; + dc.stockcount[index] = self getweaponammostock( weapon ); + + if ( weapon == currentweapon ) + dc.current_weapon = index; + } + + if ( isdefined( self.hasriotshield ) && self.hasriotshield ) + dc.hasriotshield = 1; + + dc save_weapons_for_tombstone( self ); + + if ( self hasweapon( "claymore_zm" ) ) + { + dc.hasclaymore = 1; + dc.claymoreclip = self getweaponammoclip( "claymore_zm" ); + } + + if ( self hasweapon( "emp_grenade_zm" ) ) + { + dc.hasemp = 1; + dc.empclip = self getweaponammoclip( "emp_grenade_zm" ); + } + + dc.perk = tombstone_save_perks( self ); + lethal_grenade = self get_player_lethal_grenade(); + + if ( self hasweapon( lethal_grenade ) ) + dc.grenade = self getweaponammoclip( lethal_grenade ); + else + dc.grenade = 0; + + if ( maps\mp\zombies\_zm_weap_cymbal_monkey::cymbal_monkey_exists() ) + dc.zombie_cymbal_monkey_count = self getweaponammoclip( "cymbal_monkey_zm" ); +} + +tombstone_save_perks( ent ) +{ + perk_array = []; + + if ( ent hasperk( "specialty_armorvest" ) ) + perk_array[perk_array.size] = "specialty_armorvest"; + + if ( ent hasperk( "specialty_deadshot" ) ) + perk_array[perk_array.size] = "specialty_deadshot"; + + if ( ent hasperk( "specialty_fastreload" ) ) + perk_array[perk_array.size] = "specialty_fastreload"; + + if ( ent hasperk( "specialty_flakjacket" ) ) + perk_array[perk_array.size] = "specialty_flakjacket"; + + if ( ent hasperk( "specialty_longersprint" ) ) + perk_array[perk_array.size] = "specialty_longersprint"; + + if ( ent hasperk( "specialty_quickrevive" ) ) + perk_array[perk_array.size] = "specialty_quickrevive"; + + if ( ent hasperk( "specialty_rof" ) ) + perk_array[perk_array.size] = "specialty_rof"; + + return perk_array; +} + +tombstone_grab() +{ + self endon( "tombstone_timedout" ); + wait 1; + + while ( isdefined( self ) ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].is_zombie ) + continue; + + if ( isdefined( self.player ) && players[i] == self.player ) + { + tombstone_machine_triggers = getentarray( "specialty_scavenger", "script_noteworthy" ); + istombstonepowered = 0; + + foreach ( trigger in tombstone_machine_triggers ) + { + if ( isdefined( trigger.power_on ) && trigger.power_on || isdefined( trigger.turbine_power_on ) && trigger.turbine_power_on ) + istombstonepowered = 1; + } + + if ( istombstonepowered ) + { + dist = distance( players[i].origin, self.origin ); + + if ( dist < 64 ) + { + playfx( level._effect["powerup_grabbed"], self.origin ); + playfx( level._effect["powerup_grabbed_wave"], self.origin ); + players[i] tombstone_give(); + wait 0.1; + playsoundatposition( "zmb_tombstone_grab", self.origin ); + self stoploopsound(); + self.icon unlink(); + self.icon delete(); + self delete(); + self notify( "tombstone_grabbed" ); + players[i] clientnotify( "dc0" ); + players[i] notify( "dance_on_my_grave" ); + } + } + } + } + + wait_network_frame(); + } +} + +tombstone_give() +{ + dc = level.tombstones[self.tombstone_index]; + + if ( !flag( "solo_game" ) ) + { + primaries = self getweaponslistprimaries(); + + if ( dc.weapon.size > 1 || primaries.size > 1 ) + { + foreach ( weapon in primaries ) + self takeweapon( weapon ); + } + + for ( i = 0; i < dc.weapon.size; i++ ) + { + if ( !isdefined( dc.weapon[i] ) ) + continue; + + if ( dc.weapon[i] == "none" ) + continue; + + weapon = dc.weapon[i]; + stock = dc.stockcount[i]; + + if ( !self hasweapon( weapon ) ) + { + self giveweapon( weapon, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); + self setweaponammoclip( weapon, weaponclipsize( weapon ) ); + self setweaponammostock( weapon, stock ); + + if ( i == dc.current_weapon ) + self switchtoweapon( weapon ); + } + } + } + + if ( isdefined( dc.hasriotshield ) && dc.hasriotshield ) + { + self maps\mp\zombies\_zm_equipment::equipment_give( "riotshield_zm" ); + + if ( isdefined( self.player_shield_reset_health ) ) + self [[ self.player_shield_reset_health ]](); + } + + dc restore_weapons_for_tombstone( self ); + + if ( isdefined( dc.hasclaymore ) && dc.hasclaymore && !self hasweapon( "claymore_zm" ) ) + { + self giveweapon( "claymore_zm" ); + self set_player_placeable_mine( "claymore_zm" ); + self setactionslot( 4, "weapon", "claymore_zm" ); + self setweaponammoclip( "claymore_zm", dc.claymoreclip ); + } + + if ( isdefined( dc.hasemp ) && dc.hasemp ) + { + self giveweapon( "emp_grenade_zm" ); + self setweaponammoclip( "emp_grenade_zm", dc.empclip ); + } + + if ( isdefined( dc.perk ) && dc.perk.size > 0 ) + { + for ( i = 0; i < dc.perk.size; i++ ) + { + if ( self hasperk( dc.perk[i] ) ) + continue; + + if ( dc.perk[i] == "specialty_quickrevive" && flag( "solo_game" ) ) + continue; + + maps\mp\zombies\_zm_perks::give_perk( dc.perk[i] ); + } + } + + if ( dc.grenade > 0 && !flag( "solo_game" ) ) + { + curgrenadecount = 0; + + if ( self hasweapon( self get_player_lethal_grenade() ) ) + self getweaponammoclip( self get_player_lethal_grenade() ); + else + self giveweapon( self get_player_lethal_grenade() ); + + self setweaponammoclip( self get_player_lethal_grenade(), dc.grenade + curgrenadecount ); + } + + if ( maps\mp\zombies\_zm_weap_cymbal_monkey::cymbal_monkey_exists() && !flag( "solo_game" ) ) + { + if ( dc.zombie_cymbal_monkey_count ) + { + self maps\mp\zombies\_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); + self setweaponammoclip( "cymbal_monkey_zm", dc.zombie_cymbal_monkey_count ); + } + } +} + +tombstone_wobble() +{ + self endon( "tombstone_grabbed" ); + self endon( "tombstone_timedout" ); + + if ( isdefined( self ) ) + { + wait 1; + playfxontag( level._effect["powerup_on"], self, "tag_origin" ); + self playsound( "zmb_tombstone_spawn" ); + self playloopsound( "zmb_tombstone_looper" ); + } + + while ( isdefined( self ) ) + { + self rotateyaw( 360, 3 ); + wait 2.9; + } +} + +tombstone_timeout() +{ + self endon( "tombstone_grabbed" ); + self thread playtombstonetimeraudio(); + wait 48.5; + + for ( i = 0; i < 40; i++ ) + { + if ( i % 2 ) + self.icon ghost(); + else + self.icon show(); + + if ( i < 15 ) + { + wait 0.5; + continue; + } + + if ( i < 25 ) + { + wait 0.25; + continue; + } + + wait 0.1; + } + + self notify( "tombstone_timedout" ); + self.icon unlink(); + self.icon delete(); + self delete(); +} + +playtombstonetimeraudio() +{ + self endon( "tombstone_grabbed" ); + self endon( "tombstone_timedout" ); + player = self.player; + self thread playtombstonetimerout( player ); + + while ( true ) + { + player playsoundtoplayer( "zmb_tombstone_timer_count", player ); + wait 1; + } +} + +playtombstonetimerout( player ) +{ + self endon( "tombstone_grabbed" ); + + self waittill( "tombstone_timedout" ); + + player playsoundtoplayer( "zmb_tombstone_timer_out", player ); +} + +save_weapons_for_tombstone( player ) +{ + self.tombstone_melee_weapons = []; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + self save_weapon_for_tombstone( player, level._melee_weapons[i].weapon_name ); +} + +save_weapon_for_tombstone( player, weapon_name ) +{ + if ( player hasweapon( weapon_name ) ) + self.tombstone_melee_weapons[weapon_name] = 1; +} + +restore_weapons_for_tombstone( player ) +{ + for ( i = 0; i < level._melee_weapons.size; i++ ) + self restore_weapon_for_tombstone( player, level._melee_weapons[i].weapon_name ); + + self.tombstone_melee_weapons = undefined; +} + +restore_weapon_for_tombstone( player, weapon_name ) +{ + if ( !isdefined( weapon_name ) || !isdefined( self.tombstone_melee_weapons ) || !isdefined( self.tombstone_melee_weapons[weapon_name] ) ) + return; + + if ( isdefined( self.tombstone_melee_weapons[weapon_name] ) && self.tombstone_melee_weapons[weapon_name] ) + { + player giveweapon( weapon_name ); + player change_melee_weapon( weapon_name, "none" ); + self.tombstone_melee_weapons[weapon_name] = 0; + } +} + +tombstone_hostmigration() +{ + level endon( "end_game" ); + level notify( "tombstone_hostmigration" ); + level endon( "tombstone_hostmigration" ); + + while ( true ) + { + level waittill( "host_migration_end" ); + + tombstones = getentarray( "player_tombstone_model", "script_noteworthy" ); + + foreach ( model in tombstones ) + playfxontag( level._effect["powerup_on"], model, "tag_origin" ); + } +} + +is_weapon_available_in_tombstone( weapon, player_to_check ) +{ + count = 0; + upgradedweapon = weapon; + + if ( isdefined( level.zombie_weapons[weapon] ) && isdefined( level.zombie_weapons[weapon].upgrade_name ) ) + upgradedweapon = level.zombie_weapons[weapon].upgrade_name; + + for ( tombstone_index = 0; tombstone_index < level.tombstones.size; tombstone_index++ ) + { + dc = level.tombstones[tombstone_index]; + + if ( !isdefined( dc.weapon ) ) + continue; + + if ( isdefined( player_to_check ) && dc.player != player_to_check ) + continue; + + for ( weapon_index = 0; weapon_index < dc.weapon.size; weapon_index++ ) + { + if ( !isdefined( dc.weapon[weapon_index] ) ) + continue; + + tombstone_weapon = dc.weapon[weapon_index]; + + if ( tombstone_weapon == weapon || tombstone_weapon == upgradedweapon ) + count++; + } + } + + return count; +} diff --git a/ZM/Core/maps/mp/zombies/_zm_traps.gsc b/ZM/Core/maps/mp/zombies/_zm_traps.gsc new file mode 100644 index 0000000..2afacfb --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_traps.gsc @@ -0,0 +1,877 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_net; +#include maps\mp\_visionset_mgr; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\animscripts\zm_death; +#include maps\mp\zombies\_zm_weapons; + +init() +{ + level.trap_kills = 0; + traps = getentarray( "zombie_trap", "targetname" ); + array_thread( traps, ::trap_init ); + level thread register_visionsets( traps ); + level.burning_zombies = []; + level.elec_trap_time = 40; + level.elec_trap_cooldown_time = 60; +} + +trap_init() +{ + self ent_flag_init( "flag_active" ); + self ent_flag_init( "flag_cooldown" ); + self._trap_type = ""; + + if ( isdefined( self.script_noteworthy ) ) + { + self._trap_type = self.script_noteworthy; + + if ( isdefined( level._zombiemode_trap_activate_funcs ) && isdefined( level._zombiemode_trap_activate_funcs[self._trap_type] ) ) + self._trap_activate_func = level._zombiemode_trap_activate_funcs[self._trap_type]; + else + { + switch ( self.script_noteworthy ) + { + case "rotating": + self._trap_activate_func = ::trap_activate_rotating; + break; + case "electric": + self._trap_activate_func = ::trap_activate_electric; + break; + case "flipper": + self._trap_activate_func = ::trap_activate_flipper; + break; + case "fire": + default: + self._trap_activate_func = ::trap_activate_fire; + } + } + + if ( isdefined( level._zombiemode_trap_use_funcs ) && isdefined( level._zombiemode_trap_use_funcs[self._trap_type] ) ) + self._trap_use_func = level._zombiemode_trap_use_funcs[self._trap_type]; + else + self._trap_use_func = ::trap_use_think; + } + + self trap_model_type_init(); + self._trap_use_trigs = []; + self._trap_lights = []; + self._trap_movers = []; + self._trap_switches = []; + components = getentarray( self.target, "targetname" ); + + for ( i = 0; i < components.size; i++ ) + { + if ( isdefined( components[i].script_noteworthy ) ) + { + switch ( components[i].script_noteworthy ) + { + case "counter_1s": + self.counter_1s = components[i]; + continue; + case "counter_10s": + self.counter_10s = components[i]; + continue; + case "counter_100s": + self.counter_100s = components[i]; + continue; + case "mover": + self._trap_movers[self._trap_movers.size] = components[i]; + continue; + case "switch": + self._trap_switches[self._trap_switches.size] = components[i]; + continue; + case "light": + self._trap_lightes[self._trap_lightes.size] = components[i]; + continue; + } + } + + if ( isdefined( components[i].script_string ) ) + { + switch ( components[i].script_string ) + { + case "flipper1": + self.flipper1 = components[i]; + continue; + case "flipper2": + self.flipper2 = components[i]; + continue; + case "flipper1_radius_check": + self.flipper1_radius_check = components[i]; + continue; + case "flipper2_radius_check": + self.flipper2_radius_check = components[i]; + continue; + case "target1": + self.target1 = components[i]; + continue; + case "target2": + self.target2 = components[i]; + continue; + case "target3": + self.target3 = components[i]; + continue; + } + } + + switch ( components[i].classname ) + { + case "trigger_use": + self._trap_use_trigs[self._trap_use_trigs.size] = components[i]; + break; + case "script_model": + if ( components[i].model == self._trap_light_model_off ) + self._trap_lights[self._trap_lights.size] = components[i]; + else if ( components[i].model == self._trap_switch_model ) + self._trap_switches[self._trap_switches.size] = components[i]; + } + } + + self._trap_fx_structs = []; + components = getstructarray( self.target, "targetname" ); + + for ( i = 0; i < components.size; i++ ) + { + if ( isdefined( components[i].script_string ) && components[i].script_string == "use_this_angle" ) + { + self.use_this_angle = components[i]; + continue; + } + + self._trap_fx_structs[self._trap_fx_structs.size] = components[i]; + } + + assert( self._trap_use_trigs.size > 0, "_zm_traps::init no use triggers found for " + self.target ); + + if ( !isdefined( self.zombie_cost ) ) + self.zombie_cost = 1000; + + self._trap_in_use = 0; + self._trap_cooling_down = 0; + self thread trap_dialog(); + flag_wait( "start_zombie_round_logic" ); + self trap_lights_red(); + + for ( i = 0; i < self._trap_use_trigs.size; i++ ) + self._trap_use_trigs[i] setcursorhint( "HINT_NOICON" ); + + if ( !isdefined( self.script_flag_wait ) ) + { + self trap_set_string( &"ZOMBIE_NEED_POWER" ); + flag_wait( "power_on" ); + } + else + { + if ( !isdefined( level.flag[self.script_flag_wait] ) ) + flag_init( self.script_flag_wait ); + + flag_wait( self.script_flag_wait ); + } + + self trap_set_string( &"ZOMBIE_BUTTON_BUY_TRAP", self.zombie_cost ); + self trap_lights_green(); + + for ( i = 0; i < self._trap_use_trigs.size; i++ ) + self._trap_use_trigs[i] thread [[ self._trap_use_func ]]( self ); +} + +trap_use_think( trap ) +{ + while ( true ) + { + self waittill( "trigger", who ); + + if ( who in_revive_trigger() ) + continue; + + if ( is_player_valid( who ) && !trap._trap_in_use ) + { + if ( who.score >= trap.zombie_cost ) + who maps\mp\zombies\_zm_score::minus_to_player_score( trap.zombie_cost ); + else + continue; + + trap._trap_in_use = 1; + trap trap_set_string( &"ZOMBIE_TRAP_ACTIVE" ); + play_sound_at_pos( "purchase", who.origin ); + + if ( trap._trap_switches.size ) + { + trap thread trap_move_switches(); + + trap waittill( "switch_activated" ); + } + + trap trigger_on(); + trap thread [[ trap._trap_activate_func ]](); + + trap waittill( "trap_done" ); + + trap trigger_off(); + trap._trap_cooling_down = 1; + trap trap_set_string( &"ZOMBIE_TRAP_COOLDOWN" ); +/# + if ( getdvarint( _hash_FA81816F ) >= 1 ) + trap._trap_cooldown_time = 5; +#/ + wait( trap._trap_cooldown_time ); + trap._trap_cooling_down = 0; + trap notify( "available" ); + trap._trap_in_use = 0; + trap trap_set_string( &"ZOMBIE_BUTTON_BUY_TRAP", trap.zombie_cost ); + } + } +} + +trap_lights_red() +{ + for ( i = 0; i < self._trap_lights.size; i++ ) + { + light = self._trap_lights[i]; + light setmodel( self._trap_light_model_red ); + + if ( isdefined( light.fx ) ) + light.fx delete(); + + light.fx = maps\mp\zombies\_zm_net::network_safe_spawn( "trap_lights_red", 2, "script_model", light.origin ); + light.fx setmodel( "tag_origin" ); + light.fx.angles = light.angles; + playfxontag( level._effect["zapper_light_notready"], light.fx, "tag_origin" ); + } +} + +trap_lights_green() +{ + for ( i = 0; i < self._trap_lights.size; i++ ) + { + light = self._trap_lights[i]; + + if ( isdefined( light._switch_disabled ) ) + continue; + + light setmodel( self._trap_light_model_green ); + + if ( isdefined( light.fx ) ) + light.fx delete(); + + light.fx = maps\mp\zombies\_zm_net::network_safe_spawn( "trap_lights_green", 2, "script_model", light.origin ); + light.fx setmodel( "tag_origin" ); + light.fx.angles = light.angles; + playfxontag( level._effect["zapper_light_ready"], light.fx, "tag_origin" ); + } +} + +trap_set_string( string, param1, param2 ) +{ + for ( i = 0; i < self._trap_use_trigs.size; i++ ) + { + if ( !isdefined( param1 ) ) + { + self._trap_use_trigs[i] sethintstring( string ); + continue; + } + + if ( !isdefined( param2 ) ) + { + self._trap_use_trigs[i] sethintstring( string, param1 ); + continue; + } + + self._trap_use_trigs[i] sethintstring( string, param1, param2 ); + } +} + +trap_move_switches() +{ + self trap_lights_red(); + + for ( i = 0; i < self._trap_switches.size; i++ ) + { + self._trap_switches[i] rotatepitch( 180, 0.5 ); + self._trap_switches[i] playsound( "amb_sparks_l_b" ); + } + + self._trap_switches[0] waittill( "rotatedone" ); + + self notify( "switch_activated" ); + + self waittill( "available" ); + + for ( i = 0; i < self._trap_switches.size; i++ ) + self._trap_switches[i] rotatepitch( -180, 0.5 ); + + self._trap_switches[0] waittill( "rotatedone" ); + + self trap_lights_green(); +} + +trap_activate_electric() +{ + self._trap_duration = 40; + self._trap_cooldown_time = 60; + self notify( "trap_activate" ); + + if ( isdefined( self.script_string ) ) + { + number = int( self.script_string ); + + if ( number != 0 ) + exploder( number ); + else + clientnotify( self.script_string + "1" ); + } + + fx_points = getstructarray( self.target, "targetname" ); + + for ( i = 0; i < fx_points.size; i++ ) + { + wait_network_frame(); + fx_points[i] thread trap_audio_fx( self ); + } + + self thread trap_damage(); + wait( self._trap_duration ); + self notify( "trap_done" ); + + if ( isdefined( self.script_string ) ) + clientnotify( self.script_string + "0" ); +} + +trap_activate_fire() +{ + self._trap_duration = 40; + self._trap_cooldown_time = 60; + clientnotify( self.script_string + "1" ); + clientnotify( self.script_parameters ); + fx_points = getstructarray( self.target, "targetname" ); + + for ( i = 0; i < fx_points.size; i++ ) + { + wait_network_frame(); + fx_points[i] thread trap_audio_fx( self ); + } + + self thread trap_damage(); + wait( self._trap_duration ); + self notify( "trap_done" ); + clientnotify( self.script_string + "0" ); + clientnotify( self.script_parameters ); +} + +trap_activate_rotating() +{ + self endon( "trap_done" ); + self._trap_duration = 30; + self._trap_cooldown_time = 60; + self thread trap_damage(); + self thread trig_update( self._trap_movers[0] ); + old_angles = self._trap_movers[0].angles; + + for ( i = 0; i < self._trap_movers.size; i++ ) + self._trap_movers[i] rotateyaw( 360, 5.0, 4.5 ); + + wait 5.0; + step = 1.5; + + for ( t = 0; t < self._trap_duration; t += step ) + { + for ( i = 0; i < self._trap_movers.size; i++ ) + self._trap_movers[i] rotateyaw( 360, step ); + + wait( step ); + } + + for ( i = 0; i < self._trap_movers.size; i++ ) + self._trap_movers[i] rotateyaw( 360, 5.0, 0.0, 4.5 ); + + wait 5.0; + + for ( i = 0; i < self._trap_movers.size; i++ ) + self._trap_movers[i].angles = old_angles; + + self notify( "trap_done" ); +} + +trap_activate_flipper() +{ + +} + +trap_audio_fx( trap ) +{ + sound_origin = undefined; + + if ( trap.script_noteworthy == "electric" ) + { + sound_origin = spawn( "script_origin", self.origin ); + sound_origin playsound( "zmb_elec_start" ); + sound_origin playloopsound( "zmb_elec_loop" ); + self thread play_electrical_sound( trap ); + } + else if ( trap.script_noteworthy == "fire" ) + { + sound_origin = spawn( "script_origin", self.origin ); + sound_origin playsound( "zmb_firetrap_start" ); + sound_origin playloopsound( "zmb_firetrap_loop" ); + } + + trap waittill_any_or_timeout( trap._trap_duration, "trap_done" ); + + if ( isdefined( sound_origin ) ) + { + if ( trap.script_noteworthy == "fire" ) + playsoundatposition( "zmb_firetrap_end", sound_origin.origin ); + + sound_origin stoploopsound(); + wait 0.05; + sound_origin delete(); + } +} + +play_electrical_sound( trap ) +{ + trap endon( "trap_done" ); + + while ( true ) + { + wait( randomfloatrange( 0.1, 0.5 ) ); + playsoundatposition( "zmb_elec_arc", self.origin ); + } +} + +trap_damage() +{ + self endon( "trap_done" ); + + while ( true ) + { + self waittill( "trigger", ent ); + + if ( isplayer( ent ) ) + { + switch ( self._trap_type ) + { + case "electric": + ent thread player_elec_damage(); + break; + case "rocket": + case "fire": + ent thread player_fire_damage(); + break; + case "rotating": + if ( ent getstance() == "stand" ) + { + ent dodamage( 50, ent.origin + vectorscale( ( 0, 0, 1 ), 20.0 ) ); + ent setstance( "crouch" ); + } + + break; + } + } + else if ( !isdefined( ent.marked_for_death ) ) + { + switch ( self._trap_type ) + { + case "rocket": + ent thread zombie_trap_death( self, 100 ); + break; + case "rotating": + ent thread zombie_trap_death( self, 200 ); + break; + case "fire": + case "electric": + default: + ent thread zombie_trap_death( self, randomint( 100 ) ); + break; + } + } + } +} + +trig_update( parent ) +{ + self endon( "trap_done" ); + start_angles = self.angles; + + while ( true ) + { + self.angles = parent.angles; + wait 0.05; + } +} + +player_elec_damage() +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( !isdefined( level.elec_loop ) ) + level.elec_loop = 0; + + if ( !isdefined( self.is_burning ) && is_player_valid( self ) ) + { + self.is_burning = 1; + + if ( is_true( level.trap_electric_visionset_registered ) ) + maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_trap_electric", self, 1.25, 1.25 ); + else + self setelectrified( 1.25 ); + + shocktime = 2.5; + self shellshock( "electrocution", shocktime ); + + if ( level.elec_loop == 0 ) + { + elec_loop = 1; + self playsound( "zmb_zombie_arc" ); + } + + if ( !self hasperk( "specialty_armorvest" ) || self.health - 100 < 1 ) + { + radiusdamage( self.origin, 10, self.health + 100, self.health + 100 ); + self.is_burning = undefined; + } + else + { + self dodamage( 50, self.origin ); + wait 0.1; + self.is_burning = undefined; + } + } +} + +player_fire_damage() +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( !isdefined( self.is_burning ) && !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + self.is_burning = 1; + + if ( is_true( level.trap_fire_visionset_registered ) ) + maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_trap_burn", self, 1.25, 1.25 ); + else + self setburn( 1.25 ); + + self notify( "burned" ); + + if ( !self hasperk( "specialty_armorvest" ) || self.health - 100 < 1 ) + { + radiusdamage( self.origin, 10, self.health + 100, self.health + 100 ); + self.is_burning = undefined; + } + else + { + self dodamage( 50, self.origin ); + wait 0.1; + self.is_burning = undefined; + } + } +} + +zombie_trap_death( trap, param ) +{ + self endon( "death" ); + self.marked_for_death = 1; + + switch ( trap._trap_type ) + { + case "rocket": + case "fire": + case "electric": + if ( isdefined( self.animname ) && self.animname != "zombie_dog" ) + { + if ( param > 90 && level.burning_zombies.size < 6 ) + { + level.burning_zombies[level.burning_zombies.size] = self; + self thread zombie_flame_watch(); + self playsound( "ignite" ); + self thread maps\mp\animscripts\zm_death::flame_death_fx(); + playfxontag( level._effect["character_fire_death_torso"], self, "J_SpineLower" ); + wait( randomfloat( 1.25 ) ); + } + else + { + refs[0] = "guts"; + refs[1] = "right_arm"; + refs[2] = "left_arm"; + refs[3] = "right_leg"; + refs[4] = "left_leg"; + refs[5] = "no_legs"; + refs[6] = "head"; + self.a.gib_ref = refs[randomint( refs.size )]; + playsoundatposition( "zmb_zombie_arc", self.origin ); + + if ( trap._trap_type == "electric" ) + { + if ( randomint( 100 ) > 50 ) + { + self thread electroctute_death_fx(); + self thread play_elec_vocals(); + } + } + + wait( randomfloat( 1.25 ) ); + self playsound( "zmb_zombie_arc" ); + } + } + + if ( isdefined( self.fire_damage_func ) ) + self [[ self.fire_damage_func ]]( trap ); + else + { + level notify( "trap_kill", self, trap ); + self dodamage( self.health + 666, self.origin, trap ); + } + + break; + case "rotating": + case "centrifuge": + ang = vectortoangles( trap.origin - self.origin ); + direction_vec = vectorscale( anglestoright( ang ), param ); + + if ( isdefined( self.trap_reaction_func ) ) + self [[ self.trap_reaction_func ]]( trap ); + + level notify( "trap_kill", self, trap ); + self startragdoll(); + self launchragdoll( direction_vec ); + wait_network_frame(); + self.a.gib_ref = "head"; + self dodamage( self.health, self.origin, trap ); + break; + } +} + +zombie_flame_watch() +{ + self waittill( "death" ); + + self stoploopsound(); + arrayremovevalue( level.burning_zombies, self ); +} + +play_elec_vocals() +{ + if ( isdefined( self ) ) + { + org = self.origin; + wait 0.15; + playsoundatposition( "zmb_elec_vocals", org ); + playsoundatposition( "zmb_zombie_arc", org ); + playsoundatposition( "zmb_exp_jib_zombie", org ); + } +} + +electroctute_death_fx() +{ + self endon( "death" ); + + if ( isdefined( self.is_electrocuted ) && self.is_electrocuted ) + return; + + self.is_electrocuted = 1; + self thread electrocute_timeout(); + + if ( self.team == level.zombie_team ) + { + level.bconfiretime = gettime(); + level.bconfireorg = self.origin; + } + + if ( isdefined( level._effect["elec_torso"] ) ) + playfxontag( level._effect["elec_torso"], self, "J_SpineLower" ); + + self playsound( "zmb_elec_jib_zombie" ); + wait 1; + tagarray = []; + tagarray[0] = "J_Elbow_LE"; + tagarray[1] = "J_Elbow_RI"; + tagarray[2] = "J_Knee_RI"; + tagarray[3] = "J_Knee_LE"; + tagarray = array_randomize( tagarray ); + + if ( isdefined( level._effect["elec_md"] ) ) + playfxontag( level._effect["elec_md"], self, tagarray[0] ); + + self playsound( "zmb_elec_jib_zombie" ); + wait 1; + self playsound( "zmb_elec_jib_zombie" ); + tagarray[0] = "J_Wrist_RI"; + tagarray[1] = "J_Wrist_LE"; + + if ( !isdefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" ) + { + tagarray[2] = "J_Ankle_RI"; + tagarray[3] = "J_Ankle_LE"; + } + + tagarray = array_randomize( tagarray ); + + if ( isdefined( level._effect["elec_sm"] ) ) + { + playfxontag( level._effect["elec_sm"], self, tagarray[0] ); + playfxontag( level._effect["elec_sm"], self, tagarray[1] ); + } +} + +electrocute_timeout() +{ + self endon( "death" ); + self playloopsound( "fire_manager_0" ); + wait 12; + self stoploopsound(); + + if ( isdefined( self ) && isalive( self ) ) + { + self.is_electrocuted = 0; + self notify( "stop_flame_damage" ); + } +} + +trap_dialog() +{ + self endon( "warning_dialog" ); + level endon( "switch_flipped" ); + timer = 0; + + while ( true ) + { + wait 0.5; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + dist = distancesquared( players[i].origin, self.origin ); + + if ( dist > 4900 ) + { + timer = 0; + continue; + } + + if ( dist < 4900 && timer < 3 ) + { + wait 0.5; + timer++; + } + + if ( dist < 4900 && timer == 3 ) + { + index = maps\mp\zombies\_zm_weapons::get_player_index( players[i] ); + plr = "plr_" + index + "_"; + wait 3; + self notify( "warning_dialog" ); + } + } + } +} + +get_trap_array( trap_type ) +{ + ents = getentarray( "zombie_trap", "targetname" ); + traps = []; + + for ( i = 0; i < ents.size; i++ ) + { + if ( ents[i].script_noteworthy == trap_type ) + traps[traps.size] = ents[i]; + } + + return traps; +} + +trap_disable() +{ + cooldown = self._trap_cooldown_time; + + if ( self._trap_in_use ) + { + self notify( "trap_done" ); + self._trap_cooldown_time = 0.05; + + self waittill( "available" ); + } + + array_thread( self._trap_use_trigs, ::trigger_off ); + self trap_lights_red(); + self._trap_cooldown_time = cooldown; +} + +trap_enable() +{ + array_thread( self._trap_use_trigs, ::trigger_on ); + self trap_lights_green(); +} + +trap_model_type_init() +{ + if ( !isdefined( self.script_parameters ) ) + self.script_parameters = "default"; + + switch ( self.script_parameters ) + { + case "pentagon_electric": + self._trap_light_model_off = "zombie_trap_switch_light"; + self._trap_light_model_green = "zombie_trap_switch_light_on_green"; + self._trap_light_model_red = "zombie_trap_switch_light_on_red"; + self._trap_switch_model = "zombie_trap_switch_handle"; + break; + case "default": + default: + self._trap_light_model_off = "zombie_zapper_cagelight"; + self._trap_light_model_green = "zombie_zapper_cagelight_green"; + self._trap_light_model_red = "zombie_zapper_cagelight_red"; + self._trap_switch_model = "zombie_zapper_handle"; + break; + } +} + +register_visionsets( a_traps ) +{ + a_registered_traps = []; + + foreach ( trap in a_traps ) + { + if ( isdefined( trap.script_noteworthy ) ) + { + if ( !trap is_trap_registered( a_registered_traps ) ) + a_registered_traps[trap.script_noteworthy] = 1; + } + } + + keys = getarraykeys( a_registered_traps ); + + foreach ( key in keys ) + { + switch ( key ) + { + case "electric": + if ( !isdefined( level.vsmgr_prio_overlay_zm_trap_electrified ) ) + level.vsmgr_prio_overlay_zm_trap_electrified = 60; + + maps\mp\_visionset_mgr::vsmgr_register_info( "overlay", "zm_trap_electric", 16000, level.vsmgr_prio_overlay_zm_trap_electrified, 15, 1, maps\mp\_visionset_mgr::vsmgr_duration_lerp_thread_per_player, 0 ); + level.trap_electric_visionset_registered = 1; + break; + case "fire": + if ( !isdefined( level.vsmgr_prio_overlay_zm_trap_burn ) ) + level.vsmgr_prio_overlay_zm_trap_burn = 61; + + maps\mp\_visionset_mgr::vsmgr_register_info( "overlay", "zm_trap_burn", 16000, level.vsmgr_prio_overlay_zm_trap_burn, 15, 1, maps\mp\_visionset_mgr::vsmgr_duration_lerp_thread_per_player, 0 ); + level.trap_fire_visionset_registered = 1; + break; + } + } +} + +is_trap_registered( a_registered_traps ) +{ + return isdefined( a_registered_traps[self.script_noteworthy] ); +} diff --git a/ZM/Core/maps/mp/zombies/_zm_turned.gsc b/ZM/Core/maps/mp/zombies/_zm_turned.gsc new file mode 100644 index 0000000..767a99b --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_turned.gsc @@ -0,0 +1,419 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\_visionset_mgr; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\gametypes_zm\_spawnlogic; + +init() +{ + level.turnedmeleeweapon = "zombiemelee_zm"; + level.turnedmeleeweapon_dw = "zombiemelee_dw"; + precacheitem( level.turnedmeleeweapon ); + precacheitem( level.turnedmeleeweapon_dw ); + + if ( !( isdefined( level.custom_zombie_player_loadout_init ) && level.custom_zombie_player_loadout_init ) ) + { + precachemodel( "c_zom_player_zombie_fb" ); + precachemodel( "c_zom_zombie_viewhands" ); + } + + if ( !isdefined( level.vsmgr_prio_visionset_zombie_turned ) ) + level.vsmgr_prio_visionset_zombie_turned = 123; + + maps\mp\_visionset_mgr::vsmgr_register_info( "visionset", "zm_turned", 3000, level.vsmgr_prio_visionset_zombie_turned, 1, 1 ); + registerclientfield( "toplayer", "turned_ir", 3000, 1, "int" ); + registerclientfield( "allplayers", "player_has_eyes", 3000, 1, "int" ); + registerclientfield( "allplayers", "player_eyes_special", 5000, 1, "int" ); + level._effect["player_eye_glow"] = loadfx( "maps/zombie/fx_zombie_eye_returned_blue" ); + level._effect["player_eye_glow_orng"] = loadfx( "maps/zombie/fx_zombie_eye_returned_orng" ); + thread setup_zombie_exerts(); +} + +setup_zombie_exerts() +{ + wait 0.05; + level.exert_sounds[1]["burp"] = "null"; + level.exert_sounds[1]["hitmed"] = "null"; + level.exert_sounds[1]["hitlrg"] = "null"; +} + +delay_turning_on_eyes() +{ + self endon( "death" ); + self endon( "disconnect" ); + wait_network_frame(); + wait 0.1; + self setclientfield( "player_has_eyes", 1 ); +} + +turn_to_zombie() +{ + if ( self.sessionstate == "playing" && ( isdefined( self.is_zombie ) && self.is_zombie ) && !( isdefined( self.laststand ) && self.laststand ) ) + return; + + if ( isdefined( self.is_in_process_of_zombify ) && self.is_in_process_of_zombify ) + return; + + while ( isdefined( self.is_in_process_of_humanify ) && self.is_in_process_of_humanify ) + wait 0.1; + + if ( !flag( "pregame" ) ) + { + self playsoundtoplayer( "evt_spawn", self ); + playsoundatposition( "evt_disappear_3d", self.origin ); + + if ( !self.is_zombie ) + playsoundatposition( "vox_plr_" + randomintrange( 0, 4 ) + "_exert_death_high_" + randomintrange( 0, 4 ), self.origin ); + } + + self._can_score = 1; + self setclientfield( "player_has_eyes", 0 ); + self ghost(); + self turned_disable_player_weapons(); + self notify( "clear_red_flashing_overlay" ); + self notify( "zombify" ); + self.is_in_process_of_zombify = 1; + self.team = level.zombie_team; + self.pers["team"] = level.zombie_team; + self.sessionteam = level.zombie_team; + wait_network_frame(); + self maps\mp\gametypes_zm\_zm_gametype::onspawnplayer(); + self freezecontrols( 1 ); + self.is_zombie = 1; + self setburn( 0 ); + + if ( isdefined( self.turned_visionset ) && self.turned_visionset ) + { + maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_turned", self ); + wait_network_frame(); + wait_network_frame(); + + if ( !isdefined( self ) ) + return; + } + + maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_turned", self ); + self.turned_visionset = 1; + self setclientfieldtoplayer( "turned_ir", 1 ); + self maps\mp\zombies\_zm_audio::setexertvoice( 1 ); + self.laststand = undefined; + wait_network_frame(); + + if ( !isdefined( self ) ) + return; + + self enableweapons(); + self show(); + playsoundatposition( "evt_appear_3d", self.origin ); + playsoundatposition( "zmb_zombie_spawn", self.origin ); + self thread delay_turning_on_eyes(); + self thread turned_player_buttons(); + self setperk( "specialty_noname" ); + self setperk( "specialty_unlimitedsprint" ); + self setperk( "specialty_fallheight" ); + self turned_give_melee_weapon(); + self setmovespeedscale( 1.0 ); + self.animname = "zombie"; + self disableoffhandweapons(); + self allowstand( 1 ); + self allowprone( 0 ); + self allowcrouch( 0 ); + self allowads( 0 ); + self allowjump( 0 ); + self disableweaponcycling(); + self setmovespeedscale( 1 ); + self setsprintduration( 4 ); + self setsprintcooldown( 0 ); + self stopshellshock(); + self.maxhealth = 256; + self.health = 256; + self.meleedamage = 1000; + self detachall(); + + if ( isdefined( level.custom_zombie_player_loadout ) ) + self [[ level.custom_zombie_player_loadout ]](); + else + { + self setmodel( "c_zom_player_zombie_fb" ); + self.voice = "american"; + self.skeleton = "base"; + self setviewmodel( "c_zom_zombie_viewhands" ); + } + + self.shock_onpain = 0; + self disableinvulnerability(); + + if ( isdefined( level.player_movement_suppressed ) ) + self freezecontrols( level.player_movement_suppressed ); + else if ( !( isdefined( self.hostmigrationcontrolsfrozen ) && self.hostmigrationcontrolsfrozen ) ) + self freezecontrols( 0 ); + + self.is_in_process_of_zombify = 0; +} + +turn_to_human() +{ + if ( self.sessionstate == "playing" && !( isdefined( self.is_zombie ) && self.is_zombie ) && !( isdefined( self.laststand ) && self.laststand ) ) + return; + + if ( isdefined( self.is_in_process_of_humanify ) && self.is_in_process_of_humanify ) + return; + + while ( isdefined( self.is_in_process_of_zombify ) && self.is_in_process_of_zombify ) + wait 0.1; + + self playsoundtoplayer( "evt_spawn", self ); + playsoundatposition( "evt_disappear_3d", self.origin ); + self setclientfield( "player_has_eyes", 0 ); + self ghost(); + self notify( "humanify" ); + self.is_in_process_of_humanify = 1; + self.is_zombie = 0; + self notify( "clear_red_flashing_overlay" ); + self.team = self.prevteam; + self.pers["team"] = self.prevteam; + self.sessionteam = self.prevteam; + wait_network_frame(); + self maps\mp\gametypes_zm\_zm_gametype::onspawnplayer(); + self.maxhealth = 100; + self.health = 100; + self freezecontrols( 1 ); + + if ( self hasweapon( "death_throe_zm" ) ) + self takeweapon( "death_throe_zm" ); + + self unsetperk( "specialty_noname" ); + self unsetperk( "specialty_unlimitedsprint" ); + self unsetperk( "specialty_fallheight" ); + self turned_enable_player_weapons(); + self maps\mp\zombies\_zm_audio::setexertvoice( 0 ); + self.turned_visionset = 0; + maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_turned", self ); + self setclientfieldtoplayer( "turned_ir", 0 ); + self setmovespeedscale( 1.0 ); + self.ignoreme = 0; + self.shock_onpain = 1; + self enableweaponcycling(); + self allowstand( 1 ); + self allowprone( 1 ); + self allowcrouch( 1 ); + self allowads( 1 ); + self allowjump( 1 ); + self turnedhuman(); + self enableoffhandweapons(); + self stopshellshock(); + self.laststand = undefined; + self.is_burning = undefined; + self.meleedamage = undefined; + self detachall(); + self [[ level.givecustomcharacters ]](); + + if ( !self hasweapon( "knife_zm" ) ) + self giveweapon( "knife_zm" ); + + wait_network_frame(); + + if ( !isdefined( self ) ) + return; + + self disableinvulnerability(); + + if ( isdefined( level.player_movement_suppressed ) ) + self freezecontrols( level.player_movement_suppressed ); + else if ( !( isdefined( self.hostmigrationcontrolsfrozen ) && self.hostmigrationcontrolsfrozen ) ) + self freezecontrols( 0 ); + + self show(); + playsoundatposition( "evt_appear_3d", self.origin ); + self.is_in_process_of_humanify = 0; +} + +deletezombiesinradius( origin ) +{ + zombies = get_round_enemy_array(); + maxradius = 128; + + foreach ( zombie in zombies ) + { + if ( isdefined( zombie ) && isalive( zombie ) && !( isdefined( zombie.is_being_used_as_spawner ) && zombie.is_being_used_as_spawner ) ) + { + if ( distancesquared( zombie.origin, origin ) < maxradius * maxradius ) + { + playfx( level._effect["wood_chunk_destory"], zombie.origin ); + zombie thread silentlyremovezombie(); + } + + wait 0.05; + } + } +} + +turned_give_melee_weapon() +{ + assert( isdefined( self.turnedmeleeweapon ) ); + assert( self.turnedmeleeweapon != "none" ); + self.turned_had_knife = self hasweapon( "knife_zm" ); + + if ( isdefined( self.turned_had_knife ) && self.turned_had_knife ) + self takeweapon( "knife_zm" ); + + self giveweapon( self.turnedmeleeweapon_dw ); + self givemaxammo( self.turnedmeleeweapon_dw ); + self giveweapon( self.turnedmeleeweapon ); + self givemaxammo( self.turnedmeleeweapon ); + self switchtoweapon( self.turnedmeleeweapon_dw ); + self switchtoweapon( self.turnedmeleeweapon ); +} + +turned_player_buttons() +{ + self endon( "disconnect" ); + self endon( "humanify" ); + level endon( "end_game" ); + + while ( isdefined( self.is_zombie ) && self.is_zombie ) + { + if ( self attackbuttonpressed() || self adsbuttonpressed() || self meleebuttonpressed() ) + { + if ( cointoss() ) + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "attack", undefined ); + + while ( self attackbuttonpressed() || self adsbuttonpressed() || self meleebuttonpressed() ) + wait 0.05; + } + + if ( self usebuttonpressed() ) + { + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "taunt", undefined ); + + while ( self usebuttonpressed() ) + wait 0.05; + } + + if ( self issprinting() ) + { + while ( self issprinting() ) + { + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "sprint", undefined ); + wait 0.05; + } + } + + wait 0.05; + } +} + +turned_disable_player_weapons() +{ + if ( isdefined( self.is_zombie ) && self.is_zombie ) + return; + + weaponinventory = self getweaponslist(); + self.lastactiveweapon = self getcurrentweapon(); + self setlaststandprevweap( self.lastactiveweapon ); + self.laststandpistol = undefined; + self.hadpistol = 0; + + if ( !isdefined( self.turnedmeleeweapon ) ) + self.turnedmeleeweapon = level.turnedmeleeweapon; + + if ( !isdefined( self.turnedmeleeweapon_dw ) ) + self.turnedmeleeweapon_dw = level.turnedmeleeweapon_dw; + + self takeallweapons(); + self disableweaponcycling(); +} + +turned_enable_player_weapons() +{ + self takeallweapons(); + self enableweaponcycling(); + self enableoffhandweapons(); + self.turned_had_knife = undefined; + + if ( isdefined( level.humanify_custom_loadout ) ) + { + self thread [[ level.humanify_custom_loadout ]](); + return; + } + else if ( !self hasweapon( "rottweil72_zm" ) ) + { + self giveweapon( "rottweil72_zm" ); + self switchtoweapon( "rottweil72_zm" ); + } + + if ( !( isdefined( self.is_zombie ) && self.is_zombie ) && !self hasweapon( level.start_weapon ) ) + { + if ( !self hasweapon( "knife_zm" ) ) + self giveweapon( "knife_zm" ); + + self give_start_weapon( 0 ); + } + + if ( self hasweapon( "rottweil72_zm" ) ) + { + self setweaponammoclip( "rottweil72_zm", 2 ); + self setweaponammostock( "rottweil72_zm", 0 ); + } + + if ( self hasweapon( level.start_weapon ) ) + self givemaxammo( level.start_weapon ); + + if ( self hasweapon( self get_player_lethal_grenade() ) ) + self getweaponammoclip( self get_player_lethal_grenade() ); + else + self giveweapon( self get_player_lethal_grenade() ); + + self setweaponammoclip( self get_player_lethal_grenade(), 2 ); +} + +get_farthest_available_zombie( player ) +{ + while ( true ) + { + zombies = get_array_of_closest( player.origin, getaiarray( level.zombie_team ) ); + + for ( x = 0; x < zombies.size; x++ ) + { + zombie = zombies[x]; + + if ( isdefined( zombie ) && isalive( zombie ) && !( isdefined( zombie.in_the_ground ) && zombie.in_the_ground ) && !( isdefined( zombie.gibbed ) && zombie.gibbed ) && !( isdefined( zombie.head_gibbed ) && zombie.head_gibbed ) && !( isdefined( zombie.is_being_used_as_spawnpoint ) && zombie.is_being_used_as_spawnpoint ) && zombie in_playable_area() ) + { + zombie.is_being_used_as_spawnpoint = 1; + return zombie; + } + } + + wait 0.05; + } +} + +get_available_human() +{ + players = get_players(); + + foreach ( player in players ) + { + if ( !( isdefined( player.is_zombie ) && player.is_zombie ) ) + return player; + } +} + +silentlyremovezombie() +{ + self.skip_death_notetracks = 1; + self.nodeathragdoll = 1; + self dodamage( self.maxhealth * 2, self.origin, self, self, "none", "MOD_SUICIDE" ); + self self_delete(); +} + +getspawnpoint() +{ + spawnpoint = self maps\mp\gametypes_zm\_spawnlogic::getspawnpoint_dm( level._turned_zombie_respawnpoints ); + return spawnpoint; +} diff --git a/ZM/Core/maps/mp/zombies/_zm_unitrigger.gsc b/ZM/Core/maps/mp/zombies/_zm_unitrigger.gsc new file mode 100644 index 0000000..6c7a736 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_unitrigger.gsc @@ -0,0 +1,711 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_zonemgr; + +init() +{ + level._unitriggers = spawnstruct(); + level._unitriggers._deferredinitlist = []; + level._unitriggers.trigger_pool = []; + level._unitriggers.trigger_stubs = []; + level._unitriggers.dynamic_stubs = []; + level._unitriggers.system_trigger_funcs = []; + level._unitriggers.largest_radius = 64; + stubs_keys = array( "unitrigger_radius", "unitrigger_radius_use", "unitrigger_box", "unitrigger_box_use" ); + stubs = []; + + for ( i = 0; i < stubs_keys.size; i++ ) + stubs = arraycombine( stubs, getstructarray( stubs_keys[i], "script_unitrigger_type" ), 1, 0 ); + + for ( i = 0; i < stubs.size; i++ ) + register_unitrigger( stubs[i] ); +} + +register_unitrigger_system_func( system, trigger_func ) +{ + level._unitriggers.system_trigger_funcs[system] = trigger_func; +} + +unitrigger_force_per_player_triggers( unitrigger_stub, opt_on_off = 1 ) +{ + unitrigger_stub.trigger_per_player = opt_on_off; +} + +unitrigger_trigger( player ) +{ + if ( self.trigger_per_player ) + return self.playertrigger[player getentitynumber()]; + else + return self.trigger; +} + +unitrigger_origin() +{ + if ( isdefined( self.originfunc ) ) + origin = self [[ self.originfunc ]](); + else + origin = self.origin; + + return origin; +} + +register_unitrigger_internal( unitrigger_stub, trigger_func ) +{ + if ( !isdefined( unitrigger_stub.script_unitrigger_type ) ) + { +/# + println( "Cannot register a unitrigger with no script_unitrigger_type. Ignoring." ); +#/ + return; + } + + if ( isdefined( trigger_func ) ) + unitrigger_stub.trigger_func = trigger_func; + else if ( isdefined( unitrigger_stub.unitrigger_system ) && isdefined( level._unitriggers.system_trigger_funcs[unitrigger_stub.unitrigger_system] ) ) + unitrigger_stub.trigger_func = level._unitriggers.system_trigger_funcs[unitrigger_stub.unitrigger_system]; + + switch ( unitrigger_stub.script_unitrigger_type ) + { + case "unitrigger_radius_use": + case "unitrigger_radius": + if ( !isdefined( unitrigger_stub.radius ) ) + unitrigger_stub.radius = 32; + + if ( !isdefined( unitrigger_stub.script_height ) ) + unitrigger_stub.script_height = 64; + + unitrigger_stub.test_radius_sq = ( unitrigger_stub.radius + 15.0 ) * ( unitrigger_stub.radius + 15.0 ); + break; + case "unitrigger_box_use": + case "unitrigger_box": + if ( !isdefined( unitrigger_stub.script_width ) ) + unitrigger_stub.script_width = 64; + + if ( !isdefined( unitrigger_stub.script_height ) ) + unitrigger_stub.script_height = 64; + + if ( !isdefined( unitrigger_stub.script_length ) ) + unitrigger_stub.script_length = 64; + + box_radius = length( ( unitrigger_stub.script_width / 2, unitrigger_stub.script_length / 2, unitrigger_stub.script_height / 2 ) ); + + if ( !isdefined( unitrigger_stub.radius ) || unitrigger_stub.radius < box_radius ) + unitrigger_stub.radius = box_radius; + + unitrigger_stub.test_radius_sq = ( box_radius + 15.0 ) * ( box_radius + 15.0 ); + break; + default: +/# + println( "Unknown unitrigger type registered : " + unitrigger_stub.targetname + " - ignoring." ); +#/ + return; + } + + if ( unitrigger_stub.radius > level._unitriggers.largest_radius ) + { + level._unitriggers.largest_radius = min( 113.0, unitrigger_stub.radius ); + + if ( isdefined( level.fixed_max_player_use_radius ) ) + { + if ( level.fixed_max_player_use_radius > getdvarfloat( "player_useRadius_zm" ) ) + setdvar( "player_useRadius_zm", level.fixed_max_player_use_radius ); + } + else if ( level._unitriggers.largest_radius > getdvarfloat( "player_useRadius_zm" ) ) + setdvar( "player_useRadius_zm", level._unitriggers.largest_radius ); + } + + level._unitriggers.trigger_stubs[level._unitriggers.trigger_stubs.size] = unitrigger_stub; + unitrigger_stub.registered = 1; +} + +register_unitrigger( unitrigger_stub, trigger_func ) +{ + register_unitrigger_internal( unitrigger_stub, trigger_func ); + level._unitriggers.dynamic_stubs[level._unitriggers.dynamic_stubs.size] = unitrigger_stub; +} + +unregister_unitrigger( unitrigger_stub ) +{ + thread unregister_unitrigger_internal( unitrigger_stub ); +} + +unregister_unitrigger_internal( unitrigger_stub ) +{ + if ( !isdefined( unitrigger_stub ) ) + return; + + unitrigger_stub.registered = 0; + + if ( isdefined( unitrigger_stub.trigger_per_player ) && unitrigger_stub.trigger_per_player ) + { + if ( isdefined( unitrigger_stub.playertrigger ) && unitrigger_stub.playertrigger.size > 0 ) + { + keys = getarraykeys( unitrigger_stub.playertrigger ); + + foreach ( key in keys ) + { + trigger = unitrigger_stub.playertrigger[key]; + trigger notify( "kill_trigger" ); + + if ( isdefined( trigger ) ) + trigger delete(); + } + + unitrigger_stub.playertrigger = []; + } + } + else if ( isdefined( unitrigger_stub.trigger ) ) + { + trigger = unitrigger_stub.trigger; + trigger notify( "kill_trigger" ); + trigger.stub.trigger = undefined; + trigger delete(); + } + + if ( isdefined( unitrigger_stub.in_zone ) ) + { + arrayremovevalue( level.zones[unitrigger_stub.in_zone].unitrigger_stubs, unitrigger_stub ); + unitrigger_stub.in_zone = undefined; + } + + arrayremovevalue( level._unitriggers.trigger_stubs, unitrigger_stub ); + arrayremovevalue( level._unitriggers.dynamic_stubs, unitrigger_stub ); +} + +delay_delete_contact_ent() +{ + self.last_used_time = 0; + + while ( true ) + { + wait 1; + + if ( gettime() - self.last_used_time > 1000 ) + { + self delete(); + level._unitriggers.contact_ent = undefined; + return; + } + } +} + +register_static_unitrigger( unitrigger_stub, trigger_func, recalculate_zone ) +{ + if ( level.zones.size == 0 ) + { + unitrigger_stub.trigger_func = trigger_func; + level._unitriggers._deferredinitlist[level._unitriggers._deferredinitlist.size] = unitrigger_stub; + return; + } + + if ( !isdefined( level._unitriggers.contact_ent ) ) + { + level._unitriggers.contact_ent = spawn( "script_origin", ( 0, 0, 0 ) ); + level._unitriggers.contact_ent thread delay_delete_contact_ent(); + } + + register_unitrigger_internal( unitrigger_stub, trigger_func ); + + if ( !isdefined( level._no_static_unitriggers ) ) + { + level._unitriggers.contact_ent.last_used_time = gettime(); + level._unitriggers.contact_ent.origin = unitrigger_stub.origin; + + if ( isdefined( unitrigger_stub.in_zone ) && !isdefined( recalculate_zone ) ) + { + level.zones[unitrigger_stub.in_zone].unitrigger_stubs[level.zones[unitrigger_stub.in_zone].unitrigger_stubs.size] = unitrigger_stub; + return; + } + + keys = getarraykeys( level.zones ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( level._unitriggers.contact_ent maps\mp\zombies\_zm_zonemgr::entity_in_zone( keys[i], 1 ) ) + { + if ( !isdefined( level.zones[keys[i]].unitrigger_stubs ) ) + level.zones[keys[i]].unitrigger_stubs = []; + + level.zones[keys[i]].unitrigger_stubs[level.zones[keys[i]].unitrigger_stubs.size] = unitrigger_stub; + unitrigger_stub.in_zone = keys[i]; + return; + } + } + } + + level._unitriggers.dynamic_stubs[level._unitriggers.dynamic_stubs.size] = unitrigger_stub; + unitrigger_stub.registered = 1; +} + +reregister_unitrigger_as_dynamic( unitrigger_stub ) +{ + unregister_unitrigger_internal( unitrigger_stub ); + register_unitrigger( unitrigger_stub, unitrigger_stub.trigger_func ); +} + +debug_unitriggers() +{ +/# + while ( true ) + { + if ( getdvarint( _hash_D256F24B ) > 0 ) + { + for ( i = 0; i < level._unitriggers.trigger_stubs.size; i++ ) + { + triggerstub = level._unitriggers.trigger_stubs[i]; + color = vectorscale( ( 1, 0, 0 ), 0.75 ); + + if ( !isdefined( triggerstub.in_zone ) ) + color = vectorscale( ( 1, 1, 0 ), 0.65 ); + else if ( level.zones[triggerstub.in_zone].is_active ) + color = ( 1, 1, 0 ); + + if ( isdefined( triggerstub.trigger ) || isdefined( triggerstub.playertrigger ) && triggerstub.playertrigger.size > 0 ) + { + color = ( 0, 1, 0 ); + + if ( isdefined( triggerstub.playertrigger ) && triggerstub.playertrigger.size > 0 ) + print3d( triggerstub.origin, triggerstub.playertrigger.size, color, 1, 1, 1 ); + } + + origin = triggerstub unitrigger_origin(); + + switch ( triggerstub.script_unitrigger_type ) + { + case "unitrigger_radius_use": + case "unitrigger_radius": + if ( triggerstub.radius ) + circle( origin, triggerstub.radius, color, 0, 0, 1 ); + + if ( triggerstub.script_height ) + line( origin, origin + ( 0, 0, triggerstub.script_height ), color, 0, 1 ); + + break; + case "unitrigger_box_use": + case "unitrigger_box": + vec = ( triggerstub.script_width / 2, triggerstub.script_length / 2, triggerstub.script_height / 2 ); + box( origin, vec * -1, vec, triggerstub.angles[1], color, 1, 0, 1 ); + break; + } + } + } + + wait 0.05; + } +#/ +} + +cleanup_trigger( trigger, player ) +{ + trigger notify( "kill_trigger" ); + + if ( isdefined( trigger.stub.trigger_per_player ) && trigger.stub.trigger_per_player ) + trigger.stub.playertrigger[player getentitynumber()] = undefined; + else + trigger.stub.trigger = undefined; + + trigger delete(); + level._unitriggers.trigger_pool[player getentitynumber()] = undefined; +} + +assess_and_apply_visibility( trigger, stub, player, default_keep ) +{ + if ( !isdefined( trigger ) || !isdefined( stub ) ) + return 0; + + keep_thread = default_keep; + + if ( !isdefined( stub.prompt_and_visibility_func ) || trigger [[ stub.prompt_and_visibility_func ]]( player ) ) + { + keep_thread = 1; + + if ( !( isdefined( trigger.thread_running ) && trigger.thread_running ) ) + trigger thread trigger_thread( trigger.stub.trigger_func ); + + trigger.thread_running = 1; + + if ( isdefined( trigger.reassess_time ) && trigger.reassess_time <= 0.0 ) + trigger.reassess_time = undefined; + } + else + { + if ( isdefined( trigger.thread_running ) && trigger.thread_running ) + keep_thread = 0; + + trigger.thread_running = 0; + + if ( isdefined( stub.inactive_reasses_time ) ) + trigger.reassess_time = stub.inactive_reasses_time; + else + trigger.reassess_time = 1.0; + } + + return keep_thread; +} + +main() +{ + level thread debug_unitriggers(); + + if ( level._unitriggers._deferredinitlist.size ) + { + for ( i = 0; i < level._unitriggers._deferredinitlist.size; i++ ) + register_static_unitrigger( level._unitriggers._deferredinitlist[i], level._unitriggers._deferredinitlist[i].trigger_func ); + + for ( i = 0; i < level._unitriggers._deferredinitlist.size; i++ ) + level._unitriggers._deferredinitlist[i] = undefined; + + level._unitriggers._deferredinitlist = undefined; + } + + valid_range = level._unitriggers.largest_radius + 15.0; + valid_range_sq = valid_range * valid_range; + + while ( !isdefined( level.active_zone_names ) ) + wait 0.1; + + while ( true ) + { + waited = 0; + active_zone_names = level.active_zone_names; + candidate_list = []; + + for ( j = 0; j < active_zone_names.size; j++ ) + { + if ( isdefined( level.zones[active_zone_names[j]].unitrigger_stubs ) ) + candidate_list = arraycombine( candidate_list, level.zones[active_zone_names[j]].unitrigger_stubs, 1, 0 ); + } + + candidate_list = arraycombine( candidate_list, level._unitriggers.dynamic_stubs, 1, 0 ); + players = getplayers(); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( !isdefined( player ) ) + continue; + + player_origin = player.origin + vectorscale( ( 0, 0, 1 ), 35.0 ); + trigger = level._unitriggers.trigger_pool[player getentitynumber()]; + closest = []; + + if ( isdefined( trigger ) ) + { + dst = valid_range_sq; + origin = trigger unitrigger_origin(); + dst = trigger.stub.test_radius_sq; + time_to_ressess = 0; + + if ( distance2dsquared( player_origin, origin ) < dst ) + { + if ( isdefined( trigger.reassess_time ) ) + { + trigger.reassess_time -= 0.05; + + if ( trigger.reassess_time > 0.0 ) + continue; + + time_to_ressess = 1; + } + else + continue; + } + + closest = get_closest_unitriggers( player_origin, candidate_list, valid_range ); + + if ( isdefined( trigger ) && time_to_ressess && ( closest.size < 2 || isdefined( trigger.thread_running ) && trigger.thread_running ) ) + { + if ( assess_and_apply_visibility( trigger, trigger.stub, player, 1 ) ) + continue; + } + + if ( isdefined( trigger ) ) + cleanup_trigger( trigger, player ); + } + else + closest = get_closest_unitriggers( player_origin, candidate_list, valid_range ); + + index = 0; + last_trigger = undefined; + + while ( index < closest.size ) + { + if ( !is_player_valid( player ) && !( isdefined( closest[index].ignore_player_valid ) && closest[index].ignore_player_valid ) ) + { + index++; + continue; + } + + if ( !( isdefined( closest[index].registered ) && closest[index].registered ) ) + { + index++; + continue; + } + + if ( isdefined( last_trigger ) ) + { + cleanup_trigger( last_trigger, player ); + last_trigger = undefined; + } + + trigger = undefined; + + if ( isdefined( closest[index].trigger_per_player ) && closest[index].trigger_per_player ) + { + if ( !isdefined( closest[index].playertrigger ) ) + closest[index].playertrigger = []; + + if ( !isdefined( closest[index].playertrigger[player getentitynumber()] ) ) + { + trigger = build_trigger_from_unitrigger_stub( closest[index], player ); + level._unitriggers.trigger_pool[player getentitynumber()] = trigger; + } + } + else if ( !isdefined( closest[index].trigger ) ) + { + trigger = build_trigger_from_unitrigger_stub( closest[index], player ); + level._unitriggers.trigger_pool[player getentitynumber()] = trigger; + } + + if ( isdefined( trigger ) ) + { + trigger.parent_player = player; + + if ( assess_and_apply_visibility( trigger, closest[index], player, 0 ) ) + break; + + last_trigger = trigger; + } + + index++; + waited = 1; + wait 0.05; + } + } + + if ( !waited ) + wait 0.05; + } +} + +run_visibility_function_for_all_triggers() +{ + if ( !isdefined( self.prompt_and_visibility_func ) ) + return; + + if ( isdefined( self.trigger_per_player ) && self.trigger_per_player ) + { + if ( !isdefined( self.playertrigger ) ) + return; + + players = getplayers(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( self.playertrigger[players[i] getentitynumber()] ) ) + self.playertrigger[players[i] getentitynumber()] [[ self.prompt_and_visibility_func ]]( players[i] ); + } + } + else if ( isdefined( self.trigger ) ) + self.trigger [[ self.prompt_and_visibility_func ]]( getplayers()[0] ); +} + +build_trigger_from_unitrigger_stub( stub, player ) +{ + if ( isdefined( level._zm_build_trigger_from_unitrigger_stub_override ) ) + { + if ( stub [[ level._zm_build_trigger_from_unitrigger_stub_override ]]( player ) ) + return; + } + + radius = stub.radius; + + if ( !isdefined( radius ) ) + radius = 64; + + script_height = stub.script_height; + + if ( !isdefined( script_height ) ) + script_height = 64; + + script_width = stub.script_width; + + if ( !isdefined( script_width ) ) + script_width = 64; + + script_length = stub.script_length; + + if ( !isdefined( script_length ) ) + script_length = 64; + + trigger = undefined; + origin = stub unitrigger_origin(); + + switch ( stub.script_unitrigger_type ) + { + case "unitrigger_radius": + trigger = spawn( "trigger_radius", origin, 0, radius, script_height ); + break; + case "unitrigger_radius_use": + trigger = spawn( "trigger_radius_use", origin, 0, radius, script_height ); + break; + case "unitrigger_box": + trigger = spawn( "trigger_box", origin, 0, script_width, script_length, script_height ); + break; + case "unitrigger_box_use": + trigger = spawn( "trigger_box_use", origin, 0, script_width, script_length, script_height ); + break; + } + + if ( isdefined( trigger ) ) + { + if ( isdefined( stub.angles ) ) + trigger.angles = stub.angles; + + if ( isdefined( stub.onspawnfunc ) ) + stub [[ stub.onspawnfunc ]]( trigger ); + + if ( isdefined( stub.cursor_hint ) ) + { + if ( stub.cursor_hint == "HINT_WEAPON" && isdefined( stub.cursor_hint_weapon ) ) + trigger setcursorhint( stub.cursor_hint, stub.cursor_hint_weapon ); + else + trigger setcursorhint( stub.cursor_hint ); + } + + trigger triggerignoreteam(); + + if ( isdefined( stub.require_look_at ) && stub.require_look_at ) + trigger usetriggerrequirelookat(); + + if ( isdefined( stub.hint_string ) ) + { + if ( isdefined( stub.hint_parm2 ) ) + trigger sethintstring( stub.hint_string, stub.hint_parm1, stub.hint_parm2 ); + else if ( isdefined( stub.hint_parm1 ) ) + trigger sethintstring( stub.hint_string, stub.hint_parm1 ); + else if ( isdefined( stub.cost ) ) + trigger sethintstring( stub.hint_string, stub.cost ); + else + trigger sethintstring( stub.hint_string ); + } + + trigger.stub = stub; + } + + copy_zombie_keys_onto_trigger( trigger, stub ); + + if ( isdefined( stub.trigger_per_player ) && stub.trigger_per_player ) + { + if ( isdefined( trigger ) ) + { + trigger setinvisibletoall(); + trigger setvisibletoplayer( player ); + } + + if ( !isdefined( stub.playertrigger ) ) + stub.playertrigger = []; + + stub.playertrigger[player getentitynumber()] = trigger; + } + else + stub.trigger = trigger; + + trigger.thread_running = 0; + return trigger; +} + +copy_zombie_keys_onto_trigger( trig, stub ) +{ + trig.script_noteworthy = stub.script_noteworthy; + trig.targetname = stub.targetname; + trig.target = stub.target; + trig.zombie_weapon_upgrade = stub.zombie_weapon_upgrade; + trig.clientfieldname = stub.clientfieldname; + trig.usetime = stub.usetime; +} + +trigger_thread( trigger_func ) +{ + self endon( "kill_trigger" ); + + if ( isdefined( trigger_func ) ) + self [[ trigger_func ]](); +} + +get_closest_unitrigger_index( org, array, dist = 9999999 ) +{ + distsq = dist * dist; + + if ( array.size < 1 ) + return; + + index = undefined; + + for ( i = 0; i < array.size; i++ ) + { + origin = array[i] unitrigger_origin(); + radius_sq = array[i].test_radius_sq; + newdistsq = distance2dsquared( origin, org ); + + if ( newdistsq >= radius_sq ) + continue; + + if ( newdistsq >= distsq ) + continue; + + distsq = newdistsq; + index = i; + } + + return index; +} + +get_closest_unitriggers( org, array, dist ) +{ + triggers = []; + + if ( !isdefined( dist ) ) + dist = 9999999; + + distsq = dist * dist; + + if ( array.size < 1 ) + return triggers; + + index = undefined; + + for ( i = 0; i < array.size; i++ ) + { + if ( !isdefined( array[i] ) ) + continue; + + origin = array[i] unitrigger_origin(); + radius_sq = array[i].test_radius_sq; + newdistsq = distance2dsquared( origin, org ); + + if ( newdistsq >= radius_sq ) + continue; + + if ( abs( origin[2] - org[2] ) > 42 ) + continue; + + array[i].dsquared = newdistsq; + + for ( j = 0; j < triggers.size && newdistsq > triggers[j].dsquared; j++ ) + { + + } + + arrayinsert( triggers, array[i], j ); + + if ( 9 == i % 10 ) + wait 0.05; + } + + return triggers; +} diff --git a/ZM/Core/maps/mp/zombies/_zm_utility.gsc b/ZM/Core/maps/mp/zombies/_zm_utility.gsc new file mode 100644 index 0000000..af5a66f --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_utility.gsc @@ -0,0 +1,5036 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\animscripts\zm_run; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\zombies\_zm_server_throttle; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_power; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\gametypes_zm\_hud_message; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_audio; + +init_utility() +{ + +} + +is_classic() +{ + var = getdvar( "ui_zm_gamemodegroup" ); + + if ( var == "zclassic" ) + return true; + + return false; +} + +is_standard() +{ + var = getdvar( "ui_gametype" ); + + if ( var == "zstandard" ) + return true; + + return false; +} + +convertsecondstomilliseconds( seconds ) +{ + return seconds * 1000; +} + +is_player() +{ + return isplayer( self ) || isdefined( self.pers ) && ( isdefined( self.pers["isBot"] ) && self.pers["isBot"] ); +} + +lerp( chunk ) +{ + link = spawn( "script_origin", self getorigin() ); + link.angles = self.first_node.angles; + self linkto( link ); + link rotateto( self.first_node.angles, level._contextual_grab_lerp_time ); + link moveto( self.attacking_spot, level._contextual_grab_lerp_time ); + link waittill_multiple( "rotatedone", "movedone" ); + self unlink(); + link delete(); +} + +clear_mature_blood() +{ + blood_patch = getentarray( "mature_blood", "targetname" ); + + if ( is_mature() ) + return; + + if ( isdefined( blood_patch ) ) + { + for ( i = 0; i < blood_patch.size; i++ ) + blood_patch[i] delete(); + } +} + +recalc_zombie_array() +{ + +} + +clear_all_corpses() +{ + corpse_array = getcorpsearray(); + + for ( i = 0; i < corpse_array.size; i++ ) + { + if ( isdefined( corpse_array[i] ) ) + corpse_array[i] delete(); + } +} + +get_current_corpse_count() +{ + corpse_array = getcorpsearray(); + + if ( isdefined( corpse_array ) ) + return corpse_array.size; + + return 0; +} + +get_current_actor_count() +{ + count = 0; + actors = getaispeciesarray( level.zombie_team, "all" ); + + if ( isdefined( actors ) ) + count += actors.size; + + count += get_current_corpse_count(); + return count; +} + +get_current_zombie_count() +{ + enemies = get_round_enemy_array(); + return enemies.size; +} + +get_round_enemy_array() +{ + enemies = []; + valid_enemies = []; + enemies = getaispeciesarray( level.zombie_team, "all" ); + + for ( i = 0; i < enemies.size; i++ ) + { + if ( isdefined( enemies[i].ignore_enemy_count ) && enemies[i].ignore_enemy_count ) + continue; + + valid_enemies[valid_enemies.size] = enemies[i]; + } + + return valid_enemies; +} + +init_zombie_run_cycle() +{ + if ( isdefined( level.speed_change_round ) ) + { + if ( level.round_number >= level.speed_change_round ) + { + speed_percent = 0.2 + ( level.round_number - level.speed_change_round ) * 0.2; + speed_percent = min( speed_percent, 1 ); + change_round_max = int( level.speed_change_max * speed_percent ); + change_left = change_round_max - level.speed_change_num; + + if ( change_left == 0 ) + { + self set_zombie_run_cycle(); + return; + } + + change_speed = randomint( 100 ); + + if ( change_speed > 80 ) + { + self change_zombie_run_cycle(); + return; + } + + zombie_count = get_current_zombie_count(); + zombie_left = level.zombie_ai_limit - zombie_count; + + if ( zombie_left == change_left ) + { + self change_zombie_run_cycle(); + return; + } + } + } + + self set_zombie_run_cycle(); +} + +change_zombie_run_cycle() +{ + level.speed_change_num++; + + if ( level.gamedifficulty == 0 ) + self set_zombie_run_cycle( "sprint" ); + else + self set_zombie_run_cycle( "walk" ); + + self thread speed_change_watcher(); +} + +speed_change_watcher() +{ + self waittill( "death" ); + + if ( level.speed_change_num > 0 ) + level.speed_change_num--; +} + +set_zombie_run_cycle( new_move_speed ) +{ + self.zombie_move_speed_original = self.zombie_move_speed; + + if ( isdefined( new_move_speed ) ) + self.zombie_move_speed = new_move_speed; + else if ( level.gamedifficulty == 0 ) + self set_run_speed_easy(); + else + self set_run_speed(); + + self maps\mp\animscripts\zm_run::needsupdate(); + self.deathanim = self maps\mp\animscripts\zm_utility::append_missing_legs_suffix( "zm_death" ); +} + +set_run_speed() +{ + rand = randomintrange( level.zombie_move_speed, level.zombie_move_speed + 35 ); + + if ( rand <= 35 ) + self.zombie_move_speed = "walk"; + else if ( rand <= 70 ) + self.zombie_move_speed = "run"; + else + self.zombie_move_speed = "sprint"; +} + +set_run_speed_easy() +{ + rand = randomintrange( level.zombie_move_speed, level.zombie_move_speed + 25 ); + + if ( rand <= 35 ) + self.zombie_move_speed = "walk"; + else + self.zombie_move_speed = "run"; +} + +spawn_zombie( spawner, target_name, spawn_point, round_number ) +{ + if ( !isdefined( spawner ) ) + { +/# + println( "ZM >> spawn_zombie - NO SPAWNER DEFINED" ); +#/ + return undefined; + } + + while ( getfreeactorcount() < 1 ) + wait 0.05; + + spawner.script_moveoverride = 1; + + if ( isdefined( spawner.script_forcespawn ) && spawner.script_forcespawn ) + { + guy = spawner spawnactor(); + + if ( isdefined( level.giveextrazombies ) ) + guy [[ level.giveextrazombies ]](); + + guy enableaimassist(); + + if ( isdefined( round_number ) ) + guy._starting_round_number = round_number; + + guy.aiteam = level.zombie_team; + guy clearentityowner(); + level.zombiemeleeplayercounter = 0; + guy thread run_spawn_functions(); + guy forceteleport( spawner.origin ); + guy show(); + } + + spawner.count = 666; + + if ( !spawn_failed( guy ) ) + { + if ( isdefined( target_name ) ) + guy.targetname = target_name; + + return guy; + } + + return undefined; +} + +run_spawn_functions() +{ + self endon( "death" ); + waittillframeend; + + for ( i = 0; i < level.spawn_funcs[self.team].size; i++ ) + { + func = level.spawn_funcs[self.team][i]; + single_thread( self, func["function"], func["param1"], func["param2"], func["param3"], func["param4"], func["param5"] ); + } + + if ( isdefined( self.spawn_funcs ) ) + { + for ( i = 0; i < self.spawn_funcs.size; i++ ) + { + func = self.spawn_funcs[i]; + single_thread( self, func["function"], func["param1"], func["param2"], func["param3"], func["param4"] ); + } +/# + self.saved_spawn_functions = self.spawn_funcs; +#/ + self.spawn_funcs = undefined; +/# + self.spawn_funcs = self.saved_spawn_functions; + self.saved_spawn_functions = undefined; +#/ + self.spawn_funcs = undefined; + } +} + +create_simple_hud( client, team ) +{ + if ( isdefined( team ) ) + { + hud = newteamhudelem( team ); + hud.team = team; + } + else if ( isdefined( client ) ) + hud = newclienthudelem( client ); + else + hud = newhudelem(); + + level.hudelem_count++; + hud.foreground = 1; + hud.sort = 1; + hud.hidewheninmenu = 0; + return hud; +} + +destroy_hud() +{ + level.hudelem_count--; + self destroy(); +} + +all_chunks_intact( barrier, barrier_chunks ) +{ + if ( isdefined( barrier.zbarrier ) ) + { + pieces = barrier.zbarrier getzbarrierpieceindicesinstate( "closed" ); + + if ( pieces.size != barrier.zbarrier getnumzbarrierpieces() ) + return false; + } + else + { + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( barrier_chunks[i] get_chunk_state() != "repaired" ) + return false; + } + } + + return true; +} + +no_valid_repairable_boards( barrier, barrier_chunks ) +{ + if ( isdefined( barrier.zbarrier ) ) + { + pieces = barrier.zbarrier getzbarrierpieceindicesinstate( "open" ); + + if ( pieces.size ) + return false; + } + else + { + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( barrier_chunks[i] get_chunk_state() == "destroyed" ) + return false; + } + } + + return true; +} + +is_survival() +{ + var = getdvar( "ui_zm_gamemodegroup" ); + + if ( var == "zsurvival" ) + return true; + + return false; +} + +is_encounter() +{ + if ( isdefined( level._is_encounter ) && level._is_encounter ) + return true; + + var = getdvar( "ui_zm_gamemodegroup" ); + + if ( var == "zencounter" ) + { + level._is_encounter = 1; + return true; + } + + return false; +} + +all_chunks_destroyed( barrier, barrier_chunks ) +{ + if ( isdefined( barrier.zbarrier ) ) + { + pieces = arraycombine( barrier.zbarrier getzbarrierpieceindicesinstate( "open" ), barrier.zbarrier getzbarrierpieceindicesinstate( "opening" ), 1, 0 ); + + if ( pieces.size != barrier.zbarrier getnumzbarrierpieces() ) + return false; + } + else if ( isdefined( barrier_chunks ) ) + { + assert( isdefined( barrier_chunks ), "_zm_utility::all_chunks_destroyed - Barrier chunks undefined" ); + + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( barrier_chunks[i] get_chunk_state() != "destroyed" ) + return false; + } + } + + return true; +} + +check_point_in_playable_area( origin ) +{ + playable_area = getentarray( "player_volume", "script_noteworthy" ); + check_model = spawn( "script_model", origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + valid_point = 0; + + for ( i = 0; i < playable_area.size; i++ ) + { + if ( check_model istouching( playable_area[i] ) ) + valid_point = 1; + } + + check_model delete(); + return valid_point; +} + +check_point_in_enabled_zone( origin, zone_is_active, player_zones = getentarray( "player_volume", "script_noteworthy" ) ) +{ + if ( !isdefined( level.zones ) || !isdefined( player_zones ) ) + return 1; + + scr_org = spawn( "script_origin", origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + one_valid_zone = 0; + + for ( i = 0; i < player_zones.size; i++ ) + { + if ( scr_org istouching( player_zones[i] ) ) + { + zone = level.zones[player_zones[i].targetname]; + + if ( isdefined( zone ) && ( isdefined( zone.is_enabled ) && zone.is_enabled ) ) + { + if ( isdefined( zone_is_active ) && zone_is_active == 1 && !( isdefined( zone.is_active ) && zone.is_active ) ) + continue; + + one_valid_zone = 1; + break; + } + } + } + + scr_org delete(); + return one_valid_zone; +} + +round_up_to_ten( score ) +{ + new_score = score - score % 10; + + if ( new_score < score ) + new_score += 10; + + return new_score; +} + +round_up_score( score, value ) +{ + score = int( score ); + new_score = score - score % value; + + if ( new_score < score ) + new_score += value; + + return new_score; +} + +random_tan() +{ + rand = randomint( 100 ); + + if ( isdefined( level.char_percent_override ) ) + percentnotcharred = level.char_percent_override; + else + percentnotcharred = 65; +} + +places_before_decimal( num ) +{ + abs_num = abs( num ); + count = 0; + + while ( true ) + { + abs_num *= 0.1; + count += 1; + + if ( abs_num < 1 ) + return count; + } +} + +create_zombie_point_of_interest( attract_dist, num_attractors, added_poi_value, start_turned_on, initial_attract_func, arrival_attract_func, poi_team ) +{ + if ( !isdefined( added_poi_value ) ) + self.added_poi_value = 0; + else + self.added_poi_value = added_poi_value; + + if ( !isdefined( start_turned_on ) ) + start_turned_on = 1; + + self.script_noteworthy = "zombie_poi"; + self.poi_active = start_turned_on; + + if ( isdefined( attract_dist ) ) + self.poi_radius = attract_dist * attract_dist; + else + self.poi_radius = undefined; + + self.num_poi_attracts = num_attractors; + self.attract_to_origin = 1; + self.attractor_array = []; + self.initial_attract_func = undefined; + self.arrival_attract_func = undefined; + + if ( isdefined( poi_team ) ) + self._team = poi_team; + + if ( isdefined( initial_attract_func ) ) + self.initial_attract_func = initial_attract_func; + + if ( isdefined( arrival_attract_func ) ) + self.arrival_attract_func = arrival_attract_func; +} + +create_zombie_point_of_interest_attractor_positions( num_attract_dists, diff_per_dist, attractor_width ) +{ + self endon( "death" ); + forward = ( 0, 1, 0 ); + + if ( !isdefined( self.num_poi_attracts ) || isdefined( self.script_noteworthy ) && self.script_noteworthy != "zombie_poi" ) + return; + + if ( !isdefined( num_attract_dists ) ) + num_attract_dists = 4; + + if ( !isdefined( diff_per_dist ) ) + diff_per_dist = 45; + + if ( !isdefined( attractor_width ) ) + attractor_width = 45; + + self.attract_to_origin = 0; + self.num_attract_dists = num_attract_dists; + self.last_index = []; + + for ( i = 0; i < num_attract_dists; i++ ) + self.last_index[i] = -1; + + self.attract_dists = []; + + for ( i = 0; i < self.num_attract_dists; i++ ) + self.attract_dists[i] = diff_per_dist * ( i + 1 ); + + max_positions = []; + + for ( i = 0; i < self.num_attract_dists; i++ ) + max_positions[i] = int( 6.28 * self.attract_dists[i] / attractor_width ); + + num_attracts_per_dist = self.num_poi_attracts / self.num_attract_dists; + self.max_attractor_dist = self.attract_dists[self.attract_dists.size - 1] * 1.1; + diff = 0; + actual_num_positions = []; + + for ( i = 0; i < self.num_attract_dists; i++ ) + { + if ( num_attracts_per_dist > max_positions[i] + diff ) + { + actual_num_positions[i] = max_positions[i]; + diff += num_attracts_per_dist - max_positions[i]; + continue; + } + + actual_num_positions[i] = num_attracts_per_dist + diff; + diff = 0; + } + + self.attractor_positions = []; + failed = 0; + angle_offset = 0; + prev_last_index = -1; + + for ( j = 0; j < 4; j++ ) + { + if ( actual_num_positions[j] + failed < max_positions[j] ) + { + actual_num_positions[j] += failed; + failed = 0; + } + else if ( actual_num_positions[j] < max_positions[j] ) + { + actual_num_positions[j] = max_positions[j]; + failed = max_positions[j] - actual_num_positions[j]; + } + + failed += self generated_radius_attract_positions( forward, angle_offset, actual_num_positions[j], self.attract_dists[j] ); + angle_offset += 15; + self.last_index[j] = int( actual_num_positions[j] - failed + prev_last_index ); + prev_last_index = self.last_index[j]; + } + + self notify( "attractor_positions_generated" ); + level notify( "attractor_positions_generated" ); +} + +generated_radius_attract_positions( forward, offset, num_positions, attract_radius ) +{ + self endon( "death" ); + epsilon = 0.1; + failed = 0; + degs_per_pos = 360 / num_positions; + + for ( i = offset; i < 360 + offset; i += degs_per_pos ) + { + altforward = forward * attract_radius; + rotated_forward = ( cos( i ) * altforward[0] - sin( i ) * altforward[1], sin( i ) * altforward[0] + cos( i ) * altforward[1], altforward[2] ); + + if ( isdefined( level.poi_positioning_func ) ) + pos = [[ level.poi_positioning_func ]]( self.origin, rotated_forward ); + else if ( isdefined( level.use_alternate_poi_positioning ) && level.use_alternate_poi_positioning ) + pos = maps\mp\zombies\_zm_server_throttle::server_safe_ground_trace( "poi_trace", 10, self.origin + rotated_forward + vectorscale( ( 0, 0, 1 ), 10.0 ) ); + else + pos = maps\mp\zombies\_zm_server_throttle::server_safe_ground_trace( "poi_trace", 10, self.origin + rotated_forward + vectorscale( ( 0, 0, 1 ), 100.0 ) ); + + if ( !isdefined( pos ) ) + { + failed++; + continue; + } + + if ( isdefined( level.use_alternate_poi_positioning ) && level.use_alternate_poi_positioning ) + { + if ( isdefined( self ) && isdefined( self.origin ) ) + { + if ( self.origin[2] >= pos[2] - epsilon && self.origin[2] - pos[2] <= 150 ) + { + pos_array = []; + pos_array[0] = pos; + pos_array[1] = self; + self.attractor_positions[self.attractor_positions.size] = pos_array; + } + } + else + failed++; + + continue; + } + + if ( abs( pos[2] - self.origin[2] ) < 60 ) + { + pos_array = []; + pos_array[0] = pos; + pos_array[1] = self; + self.attractor_positions[self.attractor_positions.size] = pos_array; + continue; + } + + failed++; + } + + return failed; +} + +debug_draw_attractor_positions() +{ +/# + while ( true ) + { + while ( !isdefined( self.attractor_positions ) ) + { + wait 0.05; + continue; + } + + for ( i = 0; i < self.attractor_positions.size; i++ ) + line( self.origin, self.attractor_positions[i][0], ( 1, 0, 0 ), 1, 1 ); + + wait 0.05; + + if ( !isdefined( self ) ) + return; + } +#/ +} + +get_zombie_point_of_interest( origin, poi_array ) +{ + if ( isdefined( self.ignore_all_poi ) && self.ignore_all_poi ) + return undefined; + + curr_radius = undefined; + + if ( isdefined( poi_array ) ) + ent_array = poi_array; + else + ent_array = getentarray( "zombie_poi", "script_noteworthy" ); + + best_poi = undefined; + position = undefined; + best_dist = 100000000; + + for ( i = 0; i < ent_array.size; i++ ) + { + if ( !isdefined( ent_array[i].poi_active ) || !ent_array[i].poi_active ) + continue; + + if ( isdefined( self.ignore_poi_targetname ) && self.ignore_poi_targetname.size > 0 ) + { + if ( isdefined( ent_array[i].targetname ) ) + { + ignore = 0; + + for ( j = 0; j < self.ignore_poi_targetname.size; j++ ) + { + if ( ent_array[i].targetname == self.ignore_poi_targetname[j] ) + { + ignore = 1; + break; + } + } + + if ( ignore ) + continue; + } + } + + if ( isdefined( self.ignore_poi ) && self.ignore_poi.size > 0 ) + { + ignore = 0; + + for ( j = 0; j < self.ignore_poi.size; j++ ) + { + if ( self.ignore_poi[j] == ent_array[i] ) + { + ignore = 1; + break; + } + } + + if ( ignore ) + continue; + } + + dist = distancesquared( origin, ent_array[i].origin ); + dist -= ent_array[i].added_poi_value; + + if ( isdefined( ent_array[i].poi_radius ) ) + curr_radius = ent_array[i].poi_radius; + + if ( ( !isdefined( curr_radius ) || dist < curr_radius ) && dist < best_dist && ent_array[i] can_attract( self ) ) + { + best_poi = ent_array[i]; + best_dist = dist; + } + } + + if ( isdefined( best_poi ) ) + { + if ( isdefined( best_poi._team ) ) + { + if ( isdefined( self._race_team ) && self._race_team != best_poi._team ) + return undefined; + } + + if ( isdefined( best_poi._new_ground_trace ) && best_poi._new_ground_trace ) + { + position = []; + position[0] = groundpos_ignore_water_new( best_poi.origin + vectorscale( ( 0, 0, 1 ), 100.0 ) ); + position[1] = self; + } + else if ( isdefined( best_poi.attract_to_origin ) && best_poi.attract_to_origin ) + { + position = []; + position[0] = groundpos( best_poi.origin + vectorscale( ( 0, 0, 1 ), 100.0 ) ); + position[1] = self; + } + else + position = self add_poi_attractor( best_poi ); + + if ( isdefined( best_poi.initial_attract_func ) ) + self thread [[ best_poi.initial_attract_func ]]( best_poi ); + + if ( isdefined( best_poi.arrival_attract_func ) ) + self thread [[ best_poi.arrival_attract_func ]]( best_poi ); + } + + return position; +} + +activate_zombie_point_of_interest() +{ + if ( self.script_noteworthy != "zombie_poi" ) + return; + + self.poi_active = 1; +} + +deactivate_zombie_point_of_interest() +{ + if ( self.script_noteworthy != "zombie_poi" ) + return; + + for ( i = 0; i < self.attractor_array.size; i++ ) + self.attractor_array[i] notify( "kill_poi" ); + + self.attractor_array = []; + self.claimed_attractor_positions = []; + self.poi_active = 0; +} + +assign_zombie_point_of_interest( origin, poi ) +{ + position = undefined; + doremovalthread = 0; + + if ( isdefined( poi ) && poi can_attract( self ) ) + { + if ( !isdefined( poi.attractor_array ) || isdefined( poi.attractor_array ) && array_check_for_dupes( poi.attractor_array, self ) ) + doremovalthread = 1; + + position = self add_poi_attractor( poi ); + + if ( isdefined( position ) && doremovalthread && !array_check_for_dupes( poi.attractor_array, self ) ) + self thread update_on_poi_removal( poi ); + } + + return position; +} + +remove_poi_attractor( zombie_poi ) +{ + if ( !isdefined( zombie_poi.attractor_array ) ) + return; + + for ( i = 0; i < zombie_poi.attractor_array.size; i++ ) + { + if ( zombie_poi.attractor_array[i] == self ) + { + self notify( "kill_poi" ); + arrayremovevalue( zombie_poi.attractor_array, zombie_poi.attractor_array[i] ); + arrayremovevalue( zombie_poi.claimed_attractor_positions, zombie_poi.claimed_attractor_positions[i] ); + } + } +} + +array_check_for_dupes_using_compare( array, single, is_equal_fn ) +{ + for ( i = 0; i < array.size; i++ ) + { + if ( [[ is_equal_fn ]]( array[i], single ) ) + return false; + } + + return true; +} + +poi_locations_equal( loc1, loc2 ) +{ + return loc1[0] == loc2[0]; +} + +add_poi_attractor( zombie_poi ) +{ + if ( !isdefined( zombie_poi ) ) + return; + + if ( !isdefined( zombie_poi.attractor_array ) ) + zombie_poi.attractor_array = []; + + if ( array_check_for_dupes( zombie_poi.attractor_array, self ) ) + { + if ( !isdefined( zombie_poi.claimed_attractor_positions ) ) + zombie_poi.claimed_attractor_positions = []; + + if ( !isdefined( zombie_poi.attractor_positions ) || zombie_poi.attractor_positions.size <= 0 ) + return undefined; + + start = -1; + end = -1; + last_index = -1; + + for ( i = 0; i < 4; i++ ) + { + if ( zombie_poi.claimed_attractor_positions.size < zombie_poi.last_index[i] ) + { + start = last_index + 1; + end = zombie_poi.last_index[i]; + break; + } + + last_index = zombie_poi.last_index[i]; + } + + best_dist = 100000000; + best_pos = undefined; + + if ( start < 0 ) + start = 0; + + if ( end < 0 ) + return undefined; + + for ( i = int( start ); i <= int( end ); i++ ) + { + if ( !isdefined( zombie_poi.attractor_positions[i] ) ) + continue; + + if ( array_check_for_dupes_using_compare( zombie_poi.claimed_attractor_positions, zombie_poi.attractor_positions[i], ::poi_locations_equal ) ) + { + if ( isdefined( zombie_poi.attractor_positions[i][0] ) && isdefined( self.origin ) ) + { + dist = distancesquared( zombie_poi.attractor_positions[i][0], self.origin ); + + if ( dist < best_dist || !isdefined( best_pos ) ) + { + best_dist = dist; + best_pos = zombie_poi.attractor_positions[i]; + } + } + } + } + + if ( !isdefined( best_pos ) ) + return undefined; + + zombie_poi.attractor_array[zombie_poi.attractor_array.size] = self; + self thread update_poi_on_death( zombie_poi ); + zombie_poi.claimed_attractor_positions[zombie_poi.claimed_attractor_positions.size] = best_pos; + return best_pos; + } + else + { + for ( i = 0; i < zombie_poi.attractor_array.size; i++ ) + { + if ( zombie_poi.attractor_array[i] == self ) + { + if ( isdefined( zombie_poi.claimed_attractor_positions ) && isdefined( zombie_poi.claimed_attractor_positions[i] ) ) + return zombie_poi.claimed_attractor_positions[i]; + } + } + } + + return undefined; +} + +can_attract( attractor ) +{ + if ( !isdefined( self.attractor_array ) ) + self.attractor_array = []; + + if ( isdefined( self.attracted_array ) && !isinarray( self.attracted_array, attractor ) ) + return false; + + if ( !array_check_for_dupes( self.attractor_array, attractor ) ) + return true; + + if ( isdefined( self.num_poi_attracts ) && self.attractor_array.size >= self.num_poi_attracts ) + return false; + + return true; +} + +update_poi_on_death( zombie_poi ) +{ + self endon( "kill_poi" ); + + self waittill( "death" ); + + self remove_poi_attractor( zombie_poi ); +} + +update_on_poi_removal( zombie_poi ) +{ + zombie_poi waittill( "death" ); + + if ( !isdefined( zombie_poi.attractor_array ) ) + return; + + for ( i = 0; i < zombie_poi.attractor_array.size; i++ ) + { + if ( zombie_poi.attractor_array[i] == self ) + { + arrayremoveindex( zombie_poi.attractor_array, i ); + arrayremoveindex( zombie_poi.claimed_attractor_positions, i ); + } + } +} + +invalidate_attractor_pos( attractor_pos, zombie ) +{ + if ( !isdefined( self ) || !isdefined( attractor_pos ) ) + { + wait 0.1; + return undefined; + } + + if ( isdefined( self.attractor_positions ) && !array_check_for_dupes_using_compare( self.attractor_positions, attractor_pos, ::poi_locations_equal ) ) + { + index = 0; + + for ( i = 0; i < self.attractor_positions.size; i++ ) + { + if ( poi_locations_equal( self.attractor_positions[i], attractor_pos ) ) + index = i; + } + + for ( i = 0; i < self.last_index.size; i++ ) + { + if ( index <= self.last_index[i] ) + self.last_index[i]--; + } + + arrayremovevalue( self.attractor_array, zombie ); + arrayremovevalue( self.attractor_positions, attractor_pos ); + + for ( i = 0; i < self.claimed_attractor_positions.size; i++ ) + { + if ( self.claimed_attractor_positions[i][0] == attractor_pos[0] ) + arrayremovevalue( self.claimed_attractor_positions, self.claimed_attractor_positions[i] ); + } + } + else + wait 0.1; + + return get_zombie_point_of_interest( zombie.origin ); +} + +remove_poi_from_ignore_list( poi ) +{ + if ( isdefined( self.ignore_poi ) && self.ignore_poi.size > 0 ) + { + for ( i = 0; i < self.ignore_poi.size; i++ ) + { + if ( self.ignore_poi[i] == poi ) + { + arrayremovevalue( self.ignore_poi, self.ignore_poi[i] ); + return; + } + } + } +} + +add_poi_to_ignore_list( poi ) +{ + if ( !isdefined( self.ignore_poi ) ) + self.ignore_poi = []; + + add_poi = 1; + + if ( self.ignore_poi.size > 0 ) + { + for ( i = 0; i < self.ignore_poi.size; i++ ) + { + if ( self.ignore_poi[i] == poi ) + { + add_poi = 0; + break; + } + } + } + + if ( add_poi ) + self.ignore_poi[self.ignore_poi.size] = poi; +} + +default_validate_enemy_path_length( player ) +{ + max_dist = 1296; + d = distancesquared( self.origin, player.origin ); + + if ( d <= max_dist ) + return true; + + return false; +} + +get_path_length_to_enemy( enemy ) +{ + path_length = self calcpathlength( enemy.origin ); + return path_length; +} + +get_closest_player_using_paths( origin, players ) +{ + min_length_to_player = 9999999; + n_2d_distance_squared = 9999999; + player_to_return = undefined; + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + length_to_player = get_path_length_to_enemy( player ); + + if ( isdefined( level.validate_enemy_path_length ) ) + { + if ( length_to_player == 0 ) + { + valid = self thread [[ level.validate_enemy_path_length ]]( player ); + + if ( !valid ) + continue; + } + } + + if ( length_to_player < min_length_to_player ) + { + min_length_to_player = length_to_player; + player_to_return = player; + n_2d_distance_squared = distance2dsquared( self.origin, player.origin ); + continue; + } + + if ( length_to_player == min_length_to_player && length_to_player <= 5 ) + { + n_new_distance = distance2dsquared( self.origin, player.origin ); + + if ( n_new_distance < n_2d_distance_squared ) + { + min_length_to_player = length_to_player; + player_to_return = player; + n_2d_distance_squared = n_new_distance; + } + } + } + + return player_to_return; +} + +get_closest_valid_player( origin, ignore_player ) +{ + valid_player_found = 0; + players = get_players(); + + if ( isdefined( level._zombie_using_humangun ) && level._zombie_using_humangun ) + players = arraycombine( players, level._zombie_human_array, 0, 0 ); + + if ( isdefined( ignore_player ) ) + { + for ( i = 0; i < ignore_player.size; i++ ) + arrayremovevalue( players, ignore_player[i] ); + } + + done = 0; + + while ( players.size && !done ) + { + done = 1; + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( !is_player_valid( player, 1 ) ) + { + arrayremovevalue( players, player ); + done = 0; + break; + } + } + } + + if ( players.size == 0 ) + return undefined; + + while ( !valid_player_found ) + { + if ( isdefined( self.closest_player_override ) ) + player = [[ self.closest_player_override ]]( origin, players ); + else if ( isdefined( level.closest_player_override ) ) + player = [[ level.closest_player_override ]]( origin, players ); + else if ( isdefined( level.calc_closest_player_using_paths ) && level.calc_closest_player_using_paths ) + player = get_closest_player_using_paths( origin, players ); + else + player = getclosest( origin, players ); + + if ( !isdefined( player ) || players.size == 0 ) + return undefined; + + if ( isdefined( level._zombie_using_humangun ) && level._zombie_using_humangun && isai( player ) ) + return player; + + if ( !is_player_valid( player, 1 ) ) + { + arrayremovevalue( players, player ); + + if ( players.size == 0 ) + return undefined; + + continue; + } + + return player; + } +} + +is_player_valid( player, checkignoremeflag, ignore_laststand_players ) +{ + if ( !isdefined( player ) ) + return 0; + + if ( !isalive( player ) ) + return 0; + + if ( !isplayer( player ) ) + return 0; + + if ( isdefined( player.is_zombie ) && player.is_zombie == 1 ) + return 0; + + if ( player.sessionstate == "spectator" ) + return 0; + + if ( player.sessionstate == "intermission" ) + return 0; + + if ( isdefined( self.intermission ) && self.intermission ) + return 0; + + if ( !( isdefined( ignore_laststand_players ) && ignore_laststand_players ) ) + { + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + return 0; + } + + if ( isdefined( checkignoremeflag ) && checkignoremeflag && player.ignoreme ) + return 0; + + if ( isdefined( level.is_player_valid_override ) ) + return [[ level.is_player_valid_override ]]( player ); + + return 1; +} + +get_number_of_valid_players() +{ + players = get_players(); + num_player_valid = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( is_player_valid( players[i] ) ) + num_player_valid += 1; + } + + return num_player_valid; +} + +in_revive_trigger() +{ + if ( isdefined( self.rt_time ) && self.rt_time + 100 >= gettime() ) + return self.in_rt_cached; + + self.rt_time = gettime(); + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + current_player = players[i]; + + if ( isdefined( current_player ) && isdefined( current_player.revivetrigger ) && isalive( current_player ) ) + { + if ( self istouching( current_player.revivetrigger ) ) + { + self.in_rt_cached = 1; + return 1; + } + } + } + + self.in_rt_cached = 0; + return 0; +} + +get_closest_node( org, nodes ) +{ + return getclosest( org, nodes ); +} + +non_destroyed_bar_board_order( origin, chunks ) +{ + first_bars = []; + first_bars1 = []; + first_bars2 = []; + + for ( i = 0; i < chunks.size; i++ ) + { + if ( isdefined( chunks[i].script_team ) && chunks[i].script_team == "classic_boards" ) + { + if ( isdefined( chunks[i].script_parameters ) && chunks[i].script_parameters == "board" ) + return get_closest_2d( origin, chunks ); + else if ( isdefined( chunks[i].script_team ) && chunks[i].script_team == "bar_board_variant1" || chunks[i].script_team == "bar_board_variant2" || chunks[i].script_team == "bar_board_variant4" || chunks[i].script_team == "bar_board_variant5" ) + return undefined; + } + else if ( isdefined( chunks[i].script_team ) && chunks[i].script_team == "new_barricade" ) + { + if ( isdefined( chunks[i].script_parameters ) && ( chunks[i].script_parameters == "repair_board" || chunks[i].script_parameters == "barricade_vents" ) ) + return get_closest_2d( origin, chunks ); + } + } + + for ( i = 0; i < chunks.size; i++ ) + { + if ( isdefined( chunks[i].script_team ) && chunks[i].script_team == "6_bars_bent" || chunks[i].script_team == "6_bars_prestine" ) + { + if ( isdefined( chunks[i].script_parameters ) && chunks[i].script_parameters == "bar" ) + { + if ( isdefined( chunks[i].script_noteworthy ) ) + { + if ( chunks[i].script_noteworthy == "4" || chunks[i].script_noteworthy == "6" ) + first_bars[first_bars.size] = chunks[i]; + } + } + } + } + + for ( i = 0; i < first_bars.size; i++ ) + { + if ( isdefined( chunks[i].script_team ) && chunks[i].script_team == "6_bars_bent" || chunks[i].script_team == "6_bars_prestine" ) + { + if ( isdefined( chunks[i].script_parameters ) && chunks[i].script_parameters == "bar" ) + { + if ( !first_bars[i].destroyed ) + return first_bars[i]; + } + } + } + + for ( i = 0; i < chunks.size; i++ ) + { + if ( isdefined( chunks[i].script_team ) && chunks[i].script_team == "6_bars_bent" || chunks[i].script_team == "6_bars_prestine" ) + { + if ( isdefined( chunks[i].script_parameters ) && chunks[i].script_parameters == "bar" ) + { + if ( !chunks[i].destroyed ) + return get_closest_2d( origin, chunks ); + } + } + } +} + +non_destroyed_grate_order( origin, chunks_grate ) +{ + grate_order = []; + grate_order1 = []; + grate_order2 = []; + grate_order3 = []; + grate_order4 = []; + grate_order5 = []; + grate_order6 = []; + + if ( isdefined( chunks_grate ) ) + { + for ( i = 0; i < chunks_grate.size; i++ ) + { + if ( isdefined( chunks_grate[i].script_parameters ) && chunks_grate[i].script_parameters == "grate" ) + { + if ( isdefined( chunks_grate[i].script_noteworthy ) && chunks_grate[i].script_noteworthy == "1" ) + grate_order1[grate_order1.size] = chunks_grate[i]; + + if ( isdefined( chunks_grate[i].script_noteworthy ) && chunks_grate[i].script_noteworthy == "2" ) + grate_order2[grate_order2.size] = chunks_grate[i]; + + if ( isdefined( chunks_grate[i].script_noteworthy ) && chunks_grate[i].script_noteworthy == "3" ) + grate_order3[grate_order3.size] = chunks_grate[i]; + + if ( isdefined( chunks_grate[i].script_noteworthy ) && chunks_grate[i].script_noteworthy == "4" ) + grate_order4[grate_order4.size] = chunks_grate[i]; + + if ( isdefined( chunks_grate[i].script_noteworthy ) && chunks_grate[i].script_noteworthy == "5" ) + grate_order5[grate_order5.size] = chunks_grate[i]; + + if ( isdefined( chunks_grate[i].script_noteworthy ) && chunks_grate[i].script_noteworthy == "6" ) + grate_order6[grate_order6.size] = chunks_grate[i]; + } + } + + for ( i = 0; i < chunks_grate.size; i++ ) + { + if ( isdefined( chunks_grate[i].script_parameters ) && chunks_grate[i].script_parameters == "grate" ) + { + if ( isdefined( grate_order1[i] ) ) + { + if ( grate_order1[i].state == "repaired" ) + { + grate_order2[i] thread show_grate_pull(); + return grate_order1[i]; + } + + if ( grate_order2[i].state == "repaired" ) + { +/# + iprintlnbold( " pull bar2 " ); +#/ + grate_order3[i] thread show_grate_pull(); + return grate_order2[i]; + } + else if ( grate_order3[i].state == "repaired" ) + { +/# + iprintlnbold( " pull bar3 " ); +#/ + grate_order4[i] thread show_grate_pull(); + return grate_order3[i]; + } + else if ( grate_order4[i].state == "repaired" ) + { +/# + iprintlnbold( " pull bar4 " ); +#/ + grate_order5[i] thread show_grate_pull(); + return grate_order4[i]; + } + else if ( grate_order5[i].state == "repaired" ) + { +/# + iprintlnbold( " pull bar5 " ); +#/ + grate_order6[i] thread show_grate_pull(); + return grate_order5[i]; + } + else if ( grate_order6[i].state == "repaired" ) + return grate_order6[i]; + } + } + } + } +} + +non_destroyed_variant1_order( origin, chunks_variant1 ) +{ + variant1_order = []; + variant1_order1 = []; + variant1_order2 = []; + variant1_order3 = []; + variant1_order4 = []; + variant1_order5 = []; + variant1_order6 = []; + + if ( isdefined( chunks_variant1 ) ) + { + for ( i = 0; i < chunks_variant1.size; i++ ) + { + if ( isdefined( chunks_variant1[i].script_team ) && chunks_variant1[i].script_team == "bar_board_variant1" ) + { + if ( isdefined( chunks_variant1[i].script_noteworthy ) ) + { + if ( chunks_variant1[i].script_noteworthy == "1" ) + variant1_order1[variant1_order1.size] = chunks_variant1[i]; + + if ( chunks_variant1[i].script_noteworthy == "2" ) + variant1_order2[variant1_order2.size] = chunks_variant1[i]; + + if ( chunks_variant1[i].script_noteworthy == "3" ) + variant1_order3[variant1_order3.size] = chunks_variant1[i]; + + if ( chunks_variant1[i].script_noteworthy == "4" ) + variant1_order4[variant1_order4.size] = chunks_variant1[i]; + + if ( chunks_variant1[i].script_noteworthy == "5" ) + variant1_order5[variant1_order5.size] = chunks_variant1[i]; + + if ( chunks_variant1[i].script_noteworthy == "6" ) + variant1_order6[variant1_order6.size] = chunks_variant1[i]; + } + } + } + + for ( i = 0; i < chunks_variant1.size; i++ ) + { + if ( isdefined( chunks_variant1[i].script_team ) && chunks_variant1[i].script_team == "bar_board_variant1" ) + { + if ( isdefined( variant1_order2[i] ) ) + { + if ( variant1_order2[i].state == "repaired" ) + return variant1_order2[i]; + else if ( variant1_order3[i].state == "repaired" ) + return variant1_order3[i]; + else if ( variant1_order4[i].state == "repaired" ) + return variant1_order4[i]; + else if ( variant1_order6[i].state == "repaired" ) + return variant1_order6[i]; + else if ( variant1_order5[i].state == "repaired" ) + return variant1_order5[i]; + else if ( variant1_order1[i].state == "repaired" ) + return variant1_order1[i]; + } + } + } + } +} + +non_destroyed_variant2_order( origin, chunks_variant2 ) +{ + variant2_order = []; + variant2_order1 = []; + variant2_order2 = []; + variant2_order3 = []; + variant2_order4 = []; + variant2_order5 = []; + variant2_order6 = []; + + if ( isdefined( chunks_variant2 ) ) + { + for ( i = 0; i < chunks_variant2.size; i++ ) + { + if ( isdefined( chunks_variant2[i].script_team ) && chunks_variant2[i].script_team == "bar_board_variant2" ) + { + if ( isdefined( chunks_variant2[i].script_noteworthy ) && chunks_variant2[i].script_noteworthy == "1" ) + variant2_order1[variant2_order1.size] = chunks_variant2[i]; + + if ( isdefined( chunks_variant2[i].script_noteworthy ) && chunks_variant2[i].script_noteworthy == "2" ) + variant2_order2[variant2_order2.size] = chunks_variant2[i]; + + if ( isdefined( chunks_variant2[i].script_noteworthy ) && chunks_variant2[i].script_noteworthy == "3" ) + variant2_order3[variant2_order3.size] = chunks_variant2[i]; + + if ( isdefined( chunks_variant2[i].script_noteworthy ) && chunks_variant2[i].script_noteworthy == "4" ) + variant2_order4[variant2_order4.size] = chunks_variant2[i]; + + if ( isdefined( chunks_variant2[i].script_noteworthy ) && chunks_variant2[i].script_noteworthy == "5" && isdefined( chunks_variant2[i].script_location ) && chunks_variant2[i].script_location == "5" ) + variant2_order5[variant2_order5.size] = chunks_variant2[i]; + + if ( isdefined( chunks_variant2[i].script_noteworthy ) && chunks_variant2[i].script_noteworthy == "5" && isdefined( chunks_variant2[i].script_location ) && chunks_variant2[i].script_location == "6" ) + variant2_order6[variant2_order6.size] = chunks_variant2[i]; + } + } + + for ( i = 0; i < chunks_variant2.size; i++ ) + { + if ( isdefined( chunks_variant2[i].script_team ) && chunks_variant2[i].script_team == "bar_board_variant2" ) + { + if ( isdefined( variant2_order1[i] ) ) + { + if ( variant2_order1[i].state == "repaired" ) + return variant2_order1[i]; + else if ( variant2_order2[i].state == "repaired" ) + return variant2_order2[i]; + else if ( variant2_order3[i].state == "repaired" ) + return variant2_order3[i]; + else if ( variant2_order5[i].state == "repaired" ) + return variant2_order5[i]; + else if ( variant2_order4[i].state == "repaired" ) + return variant2_order4[i]; + else if ( variant2_order6[i].state == "repaired" ) + return variant2_order6[i]; + } + } + } + } +} + +non_destroyed_variant4_order( origin, chunks_variant4 ) +{ + variant4_order = []; + variant4_order1 = []; + variant4_order2 = []; + variant4_order3 = []; + variant4_order4 = []; + variant4_order5 = []; + variant4_order6 = []; + + if ( isdefined( chunks_variant4 ) ) + { + for ( i = 0; i < chunks_variant4.size; i++ ) + { + if ( isdefined( chunks_variant4[i].script_team ) && chunks_variant4[i].script_team == "bar_board_variant4" ) + { + if ( isdefined( chunks_variant4[i].script_noteworthy ) && chunks_variant4[i].script_noteworthy == "1" && !isdefined( chunks_variant4[i].script_location ) ) + variant4_order1[variant4_order1.size] = chunks_variant4[i]; + + if ( isdefined( chunks_variant4[i].script_noteworthy ) && chunks_variant4[i].script_noteworthy == "2" ) + variant4_order2[variant4_order2.size] = chunks_variant4[i]; + + if ( isdefined( chunks_variant4[i].script_noteworthy ) && chunks_variant4[i].script_noteworthy == "3" ) + variant4_order3[variant4_order3.size] = chunks_variant4[i]; + + if ( isdefined( chunks_variant4[i].script_noteworthy ) && chunks_variant4[i].script_noteworthy == "1" && isdefined( chunks_variant4[i].script_location ) && chunks_variant4[i].script_location == "3" ) + variant4_order4[variant4_order4.size] = chunks_variant4[i]; + + if ( isdefined( chunks_variant4[i].script_noteworthy ) && chunks_variant4[i].script_noteworthy == "5" ) + variant4_order5[variant4_order5.size] = chunks_variant4[i]; + + if ( isdefined( chunks_variant4[i].script_noteworthy ) && chunks_variant4[i].script_noteworthy == "6" ) + variant4_order6[variant4_order6.size] = chunks_variant4[i]; + } + } + + for ( i = 0; i < chunks_variant4.size; i++ ) + { + if ( isdefined( chunks_variant4[i].script_team ) && chunks_variant4[i].script_team == "bar_board_variant4" ) + { + if ( isdefined( variant4_order1[i] ) ) + { + if ( variant4_order1[i].state == "repaired" ) + return variant4_order1[i]; + else if ( variant4_order6[i].state == "repaired" ) + return variant4_order6[i]; + else if ( variant4_order3[i].state == "repaired" ) + return variant4_order3[i]; + else if ( variant4_order4[i].state == "repaired" ) + return variant4_order4[i]; + else if ( variant4_order2[i].state == "repaired" ) + return variant4_order2[i]; + else if ( variant4_order5[i].state == "repaired" ) + return variant4_order5[i]; + } + } + } + } +} + +non_destroyed_variant5_order( origin, chunks_variant5 ) +{ + variant5_order = []; + variant5_order1 = []; + variant5_order2 = []; + variant5_order3 = []; + variant5_order4 = []; + variant5_order5 = []; + variant5_order6 = []; + + if ( isdefined( chunks_variant5 ) ) + { + for ( i = 0; i < chunks_variant5.size; i++ ) + { + if ( isdefined( chunks_variant5[i].script_team ) && chunks_variant5[i].script_team == "bar_board_variant5" ) + { + if ( isdefined( chunks_variant5[i].script_noteworthy ) ) + { + if ( chunks_variant5[i].script_noteworthy == "1" && !isdefined( chunks_variant5[i].script_location ) ) + variant5_order1[variant5_order1.size] = chunks_variant5[i]; + + if ( chunks_variant5[i].script_noteworthy == "2" ) + variant5_order2[variant5_order2.size] = chunks_variant5[i]; + + if ( isdefined( chunks_variant5[i].script_noteworthy ) && chunks_variant5[i].script_noteworthy == "1" && isdefined( chunks_variant5[i].script_location ) && chunks_variant5[i].script_location == "3" ) + variant5_order3[variant5_order3.size] = chunks_variant5[i]; + + if ( chunks_variant5[i].script_noteworthy == "4" ) + variant5_order4[variant5_order4.size] = chunks_variant5[i]; + + if ( chunks_variant5[i].script_noteworthy == "5" ) + variant5_order5[variant5_order5.size] = chunks_variant5[i]; + + if ( chunks_variant5[i].script_noteworthy == "6" ) + variant5_order6[variant5_order6.size] = chunks_variant5[i]; + } + } + } + + for ( i = 0; i < chunks_variant5.size; i++ ) + { + if ( isdefined( chunks_variant5[i].script_team ) && chunks_variant5[i].script_team == "bar_board_variant5" ) + { + if ( isdefined( variant5_order1[i] ) ) + { + if ( variant5_order1[i].state == "repaired" ) + return variant5_order1[i]; + else if ( variant5_order6[i].state == "repaired" ) + return variant5_order6[i]; + else if ( variant5_order3[i].state == "repaired" ) + return variant5_order3[i]; + else if ( variant5_order2[i].state == "repaired" ) + return variant5_order2[i]; + else if ( variant5_order5[i].state == "repaired" ) + return variant5_order5[i]; + else if ( variant5_order4[i].state == "repaired" ) + return variant5_order4[i]; + } + } + } + } +} + +show_grate_pull() +{ + wait 0.53; + self show(); + self vibrate( vectorscale( ( 0, 1, 0 ), 270.0 ), 0.2, 0.4, 0.4 ); +} + +get_closest_2d( origin, ents ) +{ + if ( !isdefined( ents ) ) + return undefined; + + dist = distance2d( origin, ents[0].origin ); + index = 0; + temp_array = []; + + for ( i = 1; i < ents.size; i++ ) + { + if ( isdefined( ents[i].unbroken ) && ents[i].unbroken == 1 ) + { + ents[i].index = i; + temp_array[temp_array.size] = ents[i]; + } + } + + if ( temp_array.size > 0 ) + { + index = temp_array[randomintrange( 0, temp_array.size )].index; + return ents[index]; + } + else + { + for ( i = 1; i < ents.size; i++ ) + { + temp_dist = distance2d( origin, ents[i].origin ); + + if ( temp_dist < dist ) + { + dist = temp_dist; + index = i; + } + } + + return ents[index]; + } +} + +disable_trigger() +{ + if ( !isdefined( self.disabled ) || !self.disabled ) + { + self.disabled = 1; + self.origin -= vectorscale( ( 0, 0, 1 ), 10000.0 ); + } +} + +enable_trigger() +{ + if ( !isdefined( self.disabled ) || !self.disabled ) + return; + + self.disabled = 0; + self.origin += vectorscale( ( 0, 0, 1 ), 10000.0 ); +} + +in_playable_area() +{ + playable_area = getentarray( "player_volume", "script_noteworthy" ); + + if ( !isdefined( playable_area ) ) + { +/# + println( "No playable area playable_area found! Assume EVERYWHERE is PLAYABLE" ); +#/ + return true; + } + + for ( i = 0; i < playable_area.size; i++ ) + { + if ( self istouching( playable_area[i] ) ) + return true; + } + + return false; +} + +get_closest_non_destroyed_chunk( origin, barrier, barrier_chunks ) +{ + chunks = undefined; + chunks_grate = undefined; + chunks_grate = get_non_destroyed_chunks_grate( barrier, barrier_chunks ); + chunks = get_non_destroyed_chunks( barrier, barrier_chunks ); + + if ( isdefined( barrier.zbarrier ) ) + { + if ( isdefined( chunks ) ) + return array_randomize( chunks )[0]; + + if ( isdefined( chunks_grate ) ) + return array_randomize( chunks_grate )[0]; + } + else if ( isdefined( chunks ) ) + return non_destroyed_bar_board_order( origin, chunks ); + else if ( isdefined( chunks_grate ) ) + return non_destroyed_grate_order( origin, chunks_grate ); + + return undefined; +} + +get_random_destroyed_chunk( barrier, barrier_chunks ) +{ + if ( isdefined( barrier.zbarrier ) ) + { + ret = undefined; + pieces = barrier.zbarrier getzbarrierpieceindicesinstate( "open" ); + + if ( pieces.size ) + ret = array_randomize( pieces )[0]; + + return ret; + } + else + { + chunk = undefined; + chunks_repair_grate = undefined; + chunks = get_destroyed_chunks( barrier_chunks ); + chunks_repair_grate = get_destroyed_repair_grates( barrier_chunks ); + + if ( isdefined( chunks ) ) + return chunks[randomint( chunks.size )]; + else if ( isdefined( chunks_repair_grate ) ) + return grate_order_destroyed( chunks_repair_grate ); + + return undefined; + } +} + +get_destroyed_repair_grates( barrier_chunks ) +{ + array = []; + + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( isdefined( barrier_chunks[i] ) ) + { + if ( isdefined( barrier_chunks[i].script_parameters ) && barrier_chunks[i].script_parameters == "grate" ) + array[array.size] = barrier_chunks[i]; + } + } + + if ( array.size == 0 ) + return undefined; + + return array; +} + +get_non_destroyed_chunks( barrier, barrier_chunks ) +{ + if ( isdefined( barrier.zbarrier ) ) + return barrier.zbarrier getzbarrierpieceindicesinstate( "closed" ); + else + { + array = []; + + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( isdefined( barrier_chunks[i].script_team ) && barrier_chunks[i].script_team == "classic_boards" ) + { + if ( isdefined( barrier_chunks[i].script_parameters ) && barrier_chunks[i].script_parameters == "board" ) + { + if ( barrier_chunks[i] get_chunk_state() == "repaired" ) + { + if ( barrier_chunks[i].origin == barrier_chunks[i].og_origin ) + array[array.size] = barrier_chunks[i]; + } + } + } + + if ( isdefined( barrier_chunks[i].script_team ) && barrier_chunks[i].script_team == "new_barricade" ) + { + if ( isdefined( barrier_chunks[i].script_parameters ) && ( barrier_chunks[i].script_parameters == "repair_board" || barrier_chunks[i].script_parameters == "barricade_vents" ) ) + { + if ( barrier_chunks[i] get_chunk_state() == "repaired" ) + { + if ( barrier_chunks[i].origin == barrier_chunks[i].og_origin ) + array[array.size] = barrier_chunks[i]; + } + } + + continue; + } + + if ( isdefined( barrier_chunks[i].script_team ) && barrier_chunks[i].script_team == "6_bars_bent" ) + { + if ( isdefined( barrier_chunks[i].script_parameters ) && barrier_chunks[i].script_parameters == "bar" ) + { + if ( barrier_chunks[i] get_chunk_state() == "repaired" ) + { + if ( barrier_chunks[i].origin == barrier_chunks[i].og_origin ) + array[array.size] = barrier_chunks[i]; + } + } + + continue; + } + + if ( isdefined( barrier_chunks[i].script_team ) && barrier_chunks[i].script_team == "6_bars_prestine" ) + { + if ( isdefined( barrier_chunks[i].script_parameters ) && barrier_chunks[i].script_parameters == "bar" ) + { + if ( barrier_chunks[i] get_chunk_state() == "repaired" ) + { + if ( barrier_chunks[i].origin == barrier_chunks[i].og_origin ) + array[array.size] = barrier_chunks[i]; + } + } + } + } + + if ( array.size == 0 ) + return undefined; + + return array; + } +} + +get_non_destroyed_chunks_grate( barrier, barrier_chunks ) +{ + if ( isdefined( barrier.zbarrier ) ) + return barrier.zbarrier getzbarrierpieceindicesinstate( "closed" ); + else + { + array = []; + + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( isdefined( barrier_chunks[i].script_parameters ) && barrier_chunks[i].script_parameters == "grate" ) + { + if ( isdefined( barrier_chunks[i] ) ) + array[array.size] = barrier_chunks[i]; + } + } + + if ( array.size == 0 ) + return undefined; + + return array; + } +} + +get_non_destroyed_variant1( barrier_chunks ) +{ + array = []; + + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( isdefined( barrier_chunks[i].script_team ) && barrier_chunks[i].script_team == "bar_board_variant1" ) + { + if ( isdefined( barrier_chunks[i] ) ) + array[array.size] = barrier_chunks[i]; + } + } + + if ( array.size == 0 ) + return undefined; + + return array; +} + +get_non_destroyed_variant2( barrier_chunks ) +{ + array = []; + + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( isdefined( barrier_chunks[i].script_team ) && barrier_chunks[i].script_team == "bar_board_variant2" ) + { + if ( isdefined( barrier_chunks[i] ) ) + array[array.size] = barrier_chunks[i]; + } + } + + if ( array.size == 0 ) + return undefined; + + return array; +} + +get_non_destroyed_variant4( barrier_chunks ) +{ + array = []; + + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( isdefined( barrier_chunks[i].script_team ) && barrier_chunks[i].script_team == "bar_board_variant4" ) + { + if ( isdefined( barrier_chunks[i] ) ) + array[array.size] = barrier_chunks[i]; + } + } + + if ( array.size == 0 ) + return undefined; + + return array; +} + +get_non_destroyed_variant5( barrier_chunks ) +{ + array = []; + + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( isdefined( barrier_chunks[i].script_team ) && barrier_chunks[i].script_team == "bar_board_variant5" ) + { + if ( isdefined( barrier_chunks[i] ) ) + array[array.size] = barrier_chunks[i]; + } + } + + if ( array.size == 0 ) + return undefined; + + return array; +} + +get_destroyed_chunks( barrier_chunks ) +{ + array = []; + + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( barrier_chunks[i] get_chunk_state() == "destroyed" ) + { + if ( isdefined( barrier_chunks[i].script_parameters ) && barrier_chunks[i].script_parameters == "board" ) + { + array[array.size] = barrier_chunks[i]; + continue; + } + + if ( isdefined( barrier_chunks[i].script_parameters ) && barrier_chunks[i].script_parameters == "repair_board" || barrier_chunks[i].script_parameters == "barricade_vents" ) + { + array[array.size] = barrier_chunks[i]; + continue; + } + + if ( isdefined( barrier_chunks[i].script_parameters ) && barrier_chunks[i].script_parameters == "bar" ) + { + array[array.size] = barrier_chunks[i]; + continue; + } + + if ( isdefined( barrier_chunks[i].script_parameters ) && barrier_chunks[i].script_parameters == "grate" ) + return undefined; + } + } + + if ( array.size == 0 ) + return undefined; + + return array; +} + +grate_order_destroyed( chunks_repair_grate ) +{ + grate_repair_order = []; + grate_repair_order1 = []; + grate_repair_order2 = []; + grate_repair_order3 = []; + grate_repair_order4 = []; + grate_repair_order5 = []; + grate_repair_order6 = []; + + for ( i = 0; i < chunks_repair_grate.size; i++ ) + { + if ( isdefined( chunks_repair_grate[i].script_parameters ) && chunks_repair_grate[i].script_parameters == "grate" ) + { + if ( isdefined( chunks_repair_grate[i].script_noteworthy ) && chunks_repair_grate[i].script_noteworthy == "1" ) + grate_repair_order1[grate_repair_order1.size] = chunks_repair_grate[i]; + + if ( isdefined( chunks_repair_grate[i].script_noteworthy ) && chunks_repair_grate[i].script_noteworthy == "2" ) + grate_repair_order2[grate_repair_order2.size] = chunks_repair_grate[i]; + + if ( isdefined( chunks_repair_grate[i].script_noteworthy ) && chunks_repair_grate[i].script_noteworthy == "3" ) + grate_repair_order3[grate_repair_order3.size] = chunks_repair_grate[i]; + + if ( isdefined( chunks_repair_grate[i].script_noteworthy ) && chunks_repair_grate[i].script_noteworthy == "4" ) + grate_repair_order4[grate_repair_order4.size] = chunks_repair_grate[i]; + + if ( isdefined( chunks_repair_grate[i].script_noteworthy ) && chunks_repair_grate[i].script_noteworthy == "5" ) + grate_repair_order5[grate_repair_order5.size] = chunks_repair_grate[i]; + + if ( isdefined( chunks_repair_grate[i].script_noteworthy ) && chunks_repair_grate[i].script_noteworthy == "6" ) + grate_repair_order6[grate_repair_order6.size] = chunks_repair_grate[i]; + } + } + + for ( i = 0; i < chunks_repair_grate.size; i++ ) + { + if ( isdefined( chunks_repair_grate[i].script_parameters ) && chunks_repair_grate[i].script_parameters == "grate" ) + { + if ( isdefined( grate_repair_order1[i] ) ) + { + if ( grate_repair_order6[i].state == "destroyed" ) + { +/# + iprintlnbold( " Fix grate6 " ); +#/ + return grate_repair_order6[i]; + } + + if ( grate_repair_order5[i].state == "destroyed" ) + { +/# + iprintlnbold( " Fix grate5 " ); +#/ + grate_repair_order6[i] thread show_grate_repair(); + return grate_repair_order5[i]; + } + else if ( grate_repair_order4[i].state == "destroyed" ) + { +/# + iprintlnbold( " Fix grate4 " ); +#/ + grate_repair_order5[i] thread show_grate_repair(); + return grate_repair_order4[i]; + } + else if ( grate_repair_order3[i].state == "destroyed" ) + { +/# + iprintlnbold( " Fix grate3 " ); +#/ + grate_repair_order4[i] thread show_grate_repair(); + return grate_repair_order3[i]; + } + else if ( grate_repair_order2[i].state == "destroyed" ) + { +/# + iprintlnbold( " Fix grate2 " ); +#/ + grate_repair_order3[i] thread show_grate_repair(); + return grate_repair_order2[i]; + } + else if ( grate_repair_order1[i].state == "destroyed" ) + { +/# + iprintlnbold( " Fix grate1 " ); +#/ + grate_repair_order2[i] thread show_grate_repair(); + return grate_repair_order1[i]; + } + } + } + } +} + +show_grate_repair() +{ + wait 0.34; + self hide(); +} + +get_chunk_state() +{ + assert( isdefined( self.state ) ); + return self.state; +} + +is_float( num ) +{ + val = num - int( num ); + + if ( val != 0 ) + return true; + else + return false; +} + +array_limiter( array, total ) +{ + new_array = []; + + for ( i = 0; i < array.size; i++ ) + { + if ( i < total ) + new_array[new_array.size] = array[i]; + } + + return new_array; +} + +array_validate( array ) +{ + if ( isdefined( array ) && array.size > 0 ) + return true; + else + return false; +} + +add_spawner( spawner ) +{ + if ( isdefined( spawner.script_start ) && level.round_number < spawner.script_start ) + return; + + if ( isdefined( spawner.is_enabled ) && !spawner.is_enabled ) + return; + + if ( isdefined( spawner.has_been_added ) && spawner.has_been_added ) + return; + + spawner.has_been_added = 1; + level.zombie_spawn_locations[level.zombie_spawn_locations.size] = spawner; +} + +fake_physicslaunch( target_pos, power ) +{ + start_pos = self.origin; + gravity = getdvarint( "bg_gravity" ) * -1; + dist = distance( start_pos, target_pos ); + time = dist / power; + delta = target_pos - start_pos; + drop = 0.5 * gravity * ( time * time ); + velocity = ( delta[0] / time, delta[1] / time, ( delta[2] - drop ) / time ); + level thread draw_line_ent_to_pos( self, target_pos ); + self movegravity( velocity, time ); + return time; +} + +add_zombie_hint( ref, text ) +{ + if ( !isdefined( level.zombie_hints ) ) + level.zombie_hints = []; + + precachestring( text ); + level.zombie_hints[ref] = text; +} + +get_zombie_hint( ref ) +{ + if ( isdefined( level.zombie_hints[ref] ) ) + return level.zombie_hints[ref]; +/# + println( "UNABLE TO FIND HINT STRING " + ref ); +#/ + return level.zombie_hints["undefined"]; +} + +set_hint_string( ent, default_ref, cost ) +{ + ref = default_ref; + + if ( isdefined( ent.script_hint ) ) + ref = ent.script_hint; + + if ( isdefined( level.legacy_hint_system ) && level.legacy_hint_system ) + { + ref = ref + "_" + cost; + self sethintstring( get_zombie_hint( ref ) ); + } + else + { + hint = get_zombie_hint( ref ); + + if ( isdefined( cost ) ) + self sethintstring( hint, cost ); + else + self sethintstring( hint ); + } +} + +get_hint_string( ent, default_ref, cost ) +{ + ref = default_ref; + + if ( isdefined( ent.script_hint ) ) + ref = ent.script_hint; + + if ( isdefined( level.legacy_hint_system ) && level.legacy_hint_system && isdefined( cost ) ) + ref = ref + "_" + cost; + + return get_zombie_hint( ref ); +} + +unitrigger_set_hint_string( ent, default_ref, cost ) +{ + triggers = []; + + if ( self.trigger_per_player ) + triggers = self.playertrigger; + else + triggers[0] = self.trigger; + + foreach ( trigger in triggers ) + { + ref = default_ref; + + if ( isdefined( ent.script_hint ) ) + ref = ent.script_hint; + + if ( isdefined( level.legacy_hint_system ) && level.legacy_hint_system ) + { + ref = ref + "_" + cost; + trigger sethintstring( get_zombie_hint( ref ) ); + continue; + } + + hint = get_zombie_hint( ref ); + + if ( isdefined( cost ) ) + { + trigger sethintstring( hint, cost ); + continue; + } + + trigger sethintstring( hint ); + } +} + +add_sound( ref, alias ) +{ + if ( !isdefined( level.zombie_sounds ) ) + level.zombie_sounds = []; + + level.zombie_sounds[ref] = alias; +} + +play_sound_at_pos( ref, pos, ent ) +{ + if ( isdefined( ent ) ) + { + if ( isdefined( ent.script_soundalias ) ) + { + playsoundatposition( ent.script_soundalias, pos ); + return; + } + + if ( isdefined( self.script_sound ) ) + ref = self.script_sound; + } + + if ( ref == "none" ) + return; + + if ( !isdefined( level.zombie_sounds[ref] ) ) + { +/# + assertmsg( "Sound \"" + ref + "\" was not put to the zombie sounds list, please use add_sound( ref, alias ) at the start of your level." ); +#/ + return; + } + + playsoundatposition( level.zombie_sounds[ref], pos ); +} + +play_sound_on_ent( ref ) +{ + if ( isdefined( self.script_soundalias ) ) + { + self playsound( self.script_soundalias ); + return; + } + + if ( isdefined( self.script_sound ) ) + ref = self.script_sound; + + if ( ref == "none" ) + return; + + if ( !isdefined( level.zombie_sounds[ref] ) ) + { +/# + assertmsg( "Sound \"" + ref + "\" was not put to the zombie sounds list, please use add_sound( ref, alias ) at the start of your level." ); +#/ + return; + } + + self playsound( level.zombie_sounds[ref] ); +} + +play_loopsound_on_ent( ref ) +{ + if ( isdefined( self.script_firefxsound ) ) + ref = self.script_firefxsound; + + if ( ref == "none" ) + return; + + if ( !isdefined( level.zombie_sounds[ref] ) ) + { +/# + assertmsg( "Sound \"" + ref + "\" was not put to the zombie sounds list, please use add_sound( ref, alias ) at the start of your level." ); +#/ + return; + } + + self playsound( level.zombie_sounds[ref] ); +} + +string_to_float( string ) +{ + floatparts = strtok( string, "." ); + + if ( floatparts.size == 1 ) + return int( floatparts[0] ); + + whole = int( floatparts[0] ); + decimal = 0; + + for ( i = floatparts[1].size - 1; i >= 0; i-- ) + decimal = decimal / 10 + int( floatparts[1][i] ) / 10; + + if ( whole >= 0 ) + return whole + decimal; + else + return whole - decimal; +} + +onplayerconnect_callback( func ) +{ + addcallback( "on_player_connect", func ); +} + +onplayerdisconnect_callback( func ) +{ + addcallback( "on_player_disconnect", func ); +} + +set_zombie_var( var, value, is_float = 0, column = 1, is_team_based ) +{ + table = "mp/zombiemode.csv"; + table_value = tablelookup( table, 0, var, column ); + + if ( isdefined( table_value ) && table_value != "" ) + { + if ( is_float ) + value = float( table_value ); + else + value = int( table_value ); + } + + if ( isdefined( is_team_based ) && is_team_based ) + { + foreach ( team in level.teams ) + level.zombie_vars[team][var] = value; + } + else + level.zombie_vars[var] = value; + + return value; +} + +get_table_var( table = "mp/zombiemode.csv", var_name, value, is_float = 0, column = 1 ) +{ + table_value = tablelookup( table, 0, var_name, column ); + + if ( isdefined( table_value ) && table_value != "" ) + { + if ( is_float ) + value = string_to_float( table_value ); + else + value = int( table_value ); + } + + return value; +} + +hudelem_count() +{ +/# + max = 0; + curr_total = 0; + + while ( true ) + { + if ( level.hudelem_count > max ) + max = level.hudelem_count; + + println( "HudElems: " + level.hudelem_count + "[Peak: " + max + "]" ); + wait 0.05; + } +#/ +} + +debug_round_advancer() +{ +/# + while ( true ) + { + zombs = get_round_enemy_array(); + + for ( i = 0; i < zombs.size; i++ ) + { + zombs[i] dodamage( zombs[i].health + 666, ( 0, 0, 0 ) ); + wait 0.5; + } + } +#/ +} + +print_run_speed( speed ) +{ +/# + self endon( "death" ); + + while ( true ) + { + print3d( self.origin + vectorscale( ( 0, 0, 1 ), 64.0 ), speed, ( 1, 1, 1 ) ); + wait 0.05; + } +#/ +} + +draw_line_ent_to_ent( ent1, ent2 ) +{ +/# + if ( getdvarint( "zombie_debug" ) != 1 ) + return; + + ent1 endon( "death" ); + ent2 endon( "death" ); + + while ( true ) + { + line( ent1.origin, ent2.origin ); + wait 0.05; + } +#/ +} + +draw_line_ent_to_pos( ent, pos, end_on ) +{ +/# + if ( getdvarint( "zombie_debug" ) != 1 ) + return; + + ent endon( "death" ); + ent notify( "stop_draw_line_ent_to_pos" ); + ent endon( "stop_draw_line_ent_to_pos" ); + + if ( isdefined( end_on ) ) + ent endon( end_on ); + + while ( true ) + { + line( ent.origin, pos ); + wait 0.05; + } +#/ +} + +debug_print( msg ) +{ +/# + if ( getdvarint( "zombie_debug" ) > 0 ) + println( "######### ZOMBIE: " + msg ); +#/ +} + +debug_blocker( pos, rad, height ) +{ +/# + self notify( "stop_debug_blocker" ); + self endon( "stop_debug_blocker" ); + + for (;;) + { + if ( getdvarint( "zombie_debug" ) != 1 ) + return; + + wait 0.05; + drawcylinder( pos, rad, height ); + } +#/ +} + +drawcylinder( pos, rad, height ) +{ +/# + currad = rad; + curheight = height; + + for ( r = 0; r < 20; r++ ) + { + theta = r / 20 * 360; + theta2 = ( r + 1 ) / 20 * 360; + line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, 0 ) ); + line( pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, curheight ) ); + line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ) ); + } +#/ +} + +print3d_at_pos( msg, pos, thread_endon, offset ) +{ +/# + self endon( "death" ); + + if ( isdefined( thread_endon ) ) + { + self notify( thread_endon ); + self endon( thread_endon ); + } + + if ( !isdefined( offset ) ) + offset = ( 0, 0, 0 ); + + while ( true ) + { + print3d( self.origin + offset, msg ); + wait 0.05; + } +#/ +} + +debug_breadcrumbs() +{ +/# + self endon( "disconnect" ); + self notify( "stop_debug_breadcrumbs" ); + self endon( "stop_debug_breadcrumbs" ); + + while ( true ) + { + if ( getdvarint( "zombie_debug" ) != 1 ) + { + wait 1; + continue; + } + + for ( i = 0; i < self.zombie_breadcrumbs.size; i++ ) + drawcylinder( self.zombie_breadcrumbs[i], 5, 5 ); + + wait 0.05; + } +#/ +} + +debug_attack_spots_taken() +{ +/# + self notify( "stop_debug_breadcrumbs" ); + self endon( "stop_debug_breadcrumbs" ); + + while ( true ) + { + if ( getdvarint( "zombie_debug" ) != 2 ) + { + wait 1; + continue; + } + + wait 0.05; + count = 0; + + for ( i = 0; i < self.attack_spots_taken.size; i++ ) + { + if ( self.attack_spots_taken[i] ) + { + count++; + circle( self.attack_spots[i], 12, ( 1, 0, 0 ), 0, 1, 1 ); + continue; + } + + circle( self.attack_spots[i], 12, ( 0, 1, 0 ), 0, 1, 1 ); + } + + msg = "" + count + " / " + self.attack_spots_taken.size; + print3d( self.origin, msg ); + } +#/ +} + +float_print3d( msg, time ) +{ +/# + self endon( "death" ); + time = gettime() + time * 1000; + offset = vectorscale( ( 0, 0, 1 ), 72.0 ); + + while ( gettime() < time ) + { + offset += vectorscale( ( 0, 0, 1 ), 2.0 ); + print3d( self.origin + offset, msg, ( 1, 1, 1 ) ); + wait 0.05; + } +#/ +} + +do_player_vo( snd, variation_count ) +{ + index = maps\mp\zombies\_zm_weapons::get_player_index( self ); + sound = "zmb_vox_plr_" + index + "_" + snd; + + if ( isdefined( variation_count ) ) + sound = sound + "_" + randomintrange( 0, variation_count ); + + if ( !isdefined( level.player_is_speaking ) ) + level.player_is_speaking = 0; + + if ( level.player_is_speaking == 0 ) + { + level.player_is_speaking = 1; + self playsoundwithnotify( sound, "sound_done" ); + + self waittill( "sound_done" ); + + wait 2; + level.player_is_speaking = 0; + } +} + +stop_magic_bullet_shield() +{ + self.attackeraccuracy = 1; + self notify( "stop_magic_bullet_shield" ); + self.magic_bullet_shield = undefined; + self._mbs = undefined; +} + +magic_bullet_shield() +{ + if ( !( isdefined( self.magic_bullet_shield ) && self.magic_bullet_shield ) ) + { + if ( isai( self ) || isplayer( self ) ) + { + self.magic_bullet_shield = 1; +/# + level thread debug_magic_bullet_shield_death( self ); +#/ + if ( !isdefined( self._mbs ) ) + self._mbs = spawnstruct(); + + if ( isai( self ) ) + { + assert( isalive( self ), "Tried to do magic_bullet_shield on a dead or undefined guy." ); + self._mbs.last_pain_time = 0; + self._mbs.ignore_time = 2; + self._mbs.turret_ignore_time = 5; + } + + self.attackeraccuracy = 0.1; + } + else + { +/# + assertmsg( "magic_bullet_shield does not support entity of classname '" + self.classname + "'." ); +#/ + } + } +} + +debug_magic_bullet_shield_death( guy ) +{ + targetname = "none"; + + if ( isdefined( guy.targetname ) ) + targetname = guy.targetname; + + guy endon( "stop_magic_bullet_shield" ); + + guy waittill( "death" ); + + assert( !isdefined( guy ), "Guy died with magic bullet shield on with targetname: " + targetname ); +} + +is_magic_bullet_shield_enabled( ent ) +{ + if ( !isdefined( ent ) ) + return 0; + + return isdefined( ent.magic_bullet_shield ) && ent.magic_bullet_shield == 1; +} + +really_play_2d_sound( sound ) +{ + temp_ent = spawn( "script_origin", ( 0, 0, 0 ) ); + temp_ent playsoundwithnotify( sound, sound + "wait" ); + + temp_ent waittill( sound + "wait" ); + + wait 0.05; + temp_ent delete(); +} + +play_sound_2d( sound ) +{ + level thread really_play_2d_sound( sound ); +} + +include_weapon( weapon_name, in_box, collector, weighting_func ) +{ +/# + println( "ZM >> include_weapon = " + weapon_name ); +#/ + if ( !isdefined( in_box ) ) + in_box = 1; + + if ( !isdefined( collector ) ) + collector = 0; + + maps\mp\zombies\_zm_weapons::include_zombie_weapon( weapon_name, in_box, collector, weighting_func ); +} + +include_buildable( buildable_struct ) +{ +/# + println( "ZM >> include_buildable = " + buildable_struct.name ); +#/ + maps\mp\zombies\_zm_buildables::include_zombie_buildable( buildable_struct ); +} + +is_buildable_included( name ) +{ + if ( isdefined( level.zombie_include_buildables[name] ) ) + return true; + + return false; +} + +create_zombie_buildable_piece( modelname, radius, height, hud_icon ) +{ +/# + println( "ZM >> create_zombie_buildable_piece = " + modelname ); +#/ + self maps\mp\zombies\_zm_buildables::create_zombie_buildable_piece( modelname, radius, height, hud_icon ); +} + +is_buildable() +{ + return self maps\mp\zombies\_zm_buildables::is_buildable(); +} + +wait_for_buildable( buildable_name ) +{ + level waittill( buildable_name + "_built", player ); + + return player; +} + +include_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, start_power, target ) +{ + return maps\mp\zombies\_zm_power::add_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, start_power, target ); +} + +include_powerup( powerup_name ) +{ + maps\mp\zombies\_zm_powerups::include_zombie_powerup( powerup_name ); +} + +include_equipment( equipment_name ) +{ + maps\mp\zombies\_zm_equipment::include_zombie_equipment( equipment_name ); +} + +limit_equipment( equipment_name, limited ) +{ + maps\mp\zombies\_zm_equipment::limit_zombie_equipment( equipment_name, limited ); +} + +trigger_invisible( enable ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i] ) ) + self setinvisibletoplayer( players[i], enable ); + } +} + +print3d_ent( text, color, scale, offset, end_msg, overwrite ) +{ + self endon( "death" ); + + if ( isdefined( overwrite ) && overwrite && isdefined( self._debug_print3d_msg ) ) + { + self notify( "end_print3d" ); + wait 0.05; + } + + self endon( "end_print3d" ); + + if ( !isdefined( color ) ) + color = ( 1, 1, 1 ); + + if ( !isdefined( scale ) ) + scale = 1.0; + + if ( !isdefined( offset ) ) + offset = ( 0, 0, 0 ); + + if ( isdefined( end_msg ) ) + self endon( end_msg ); + + self._debug_print3d_msg = text; +/# + while ( true ) + { + print3d( self.origin + offset, self._debug_print3d_msg, color, scale ); + wait 0.05; + } +#/ +} + +isexplosivedamage( meansofdeath ) +{ + explosivedamage = "MOD_GRENADE MOD_GRENADE_SPLASH MOD_PROJECTILE_SPLASH MOD_EXPLOSIVE"; + + if ( issubstr( explosivedamage, meansofdeath ) ) + return true; + + return false; +} + +isprimarydamage( meansofdeath ) +{ + if ( meansofdeath == "MOD_RIFLE_BULLET" || meansofdeath == "MOD_PISTOL_BULLET" ) + return true; + + return false; +} + +isfiredamage( weapon, meansofdeath ) +{ + if ( ( issubstr( weapon, "flame" ) || issubstr( weapon, "molotov_" ) || issubstr( weapon, "napalmblob_" ) ) && ( meansofdeath == "MOD_BURNED" || meansofdeath == "MOD_GRENADE" || meansofdeath == "MOD_GRENADE_SPLASH" ) ) + return true; + + return false; +} + +isplayerexplosiveweapon( weapon, meansofdeath ) +{ + if ( !isexplosivedamage( meansofdeath ) ) + return false; + + if ( weapon == "artillery_mp" ) + return false; + + if ( issubstr( weapon, "turret" ) ) + return false; + + return true; +} + +create_counter_hud( x = 0 ) +{ + hud = create_simple_hud(); + hud.alignx = "left"; + hud.aligny = "top"; + hud.horzalign = "user_left"; + hud.vertalign = "user_top"; + hud.color = ( 1, 1, 1 ); + hud.fontscale = 32; + hud.x = x; + hud.alpha = 0; + hud setshader( "hud_chalk_1", 64, 64 ); + return hud; +} + +get_current_zone( return_zone ) +{ + flag_wait( "zones_initialized" ); + + for ( z = 0; z < level.zone_keys.size; z++ ) + { + zone_name = level.zone_keys[z]; + zone = level.zones[zone_name]; + + for ( i = 0; i < zone.volumes.size; i++ ) + { + if ( self istouching( zone.volumes[i] ) ) + { + if ( isdefined( return_zone ) && return_zone ) + return zone; + + return zone_name; + } + } + } + + return undefined; +} + +remove_mod_from_methodofdeath( mod ) +{ + return mod; +} + +clear_fog_threads() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] notify( "stop_fog" ); +} + +display_message( titletext, notifytext, duration ) +{ + notifydata = spawnstruct(); + notifydata.titletext = notifytext; + notifydata.notifytext = titletext; + notifydata.sound = "mus_level_up"; + notifydata.duration = duration; + notifydata.glowcolor = ( 1, 0, 0 ); + notifydata.color = ( 0, 0, 0 ); + notifydata.iconname = "hud_zombies_meat"; + self thread maps\mp\gametypes_zm\_hud_message::notifymessage( notifydata ); +} + +is_quad() +{ + return self.animname == "quad_zombie"; +} + +is_leaper() +{ + return self.animname == "leaper_zombie"; +} + +shock_onpain() +{ + self endon( "death" ); + self endon( "disconnect" ); + self notify( "stop_shock_onpain" ); + self endon( "stop_shock_onpain" ); + + if ( getdvar( "blurpain" ) == "" ) + setdvar( "blurpain", "on" ); + + while ( true ) + { + oldhealth = self.health; + + self waittill( "damage", damage, attacker, direction_vec, point, mod ); + + if ( isdefined( level.shock_onpain ) && !level.shock_onpain ) + continue; + + if ( isdefined( self.shock_onpain ) && !self.shock_onpain ) + continue; + + if ( self.health < 1 ) + continue; + + if ( mod == "MOD_PROJECTILE" || mod == "MOD_PROJECTILE_SPLASH" ) + continue; + else if ( mod == "MOD_GRENADE_SPLASH" || mod == "MOD_GRENADE" || mod == "MOD_EXPLOSIVE" ) + { + shocktype = undefined; + shocklight = undefined; + + if ( isdefined( self.is_burning ) && self.is_burning ) + { + shocktype = "lava"; + shocklight = "lava_small"; + } + + self shock_onexplosion( damage, shocktype, shocklight ); + } + else if ( getdvar( "blurpain" ) == "on" ) + self shellshock( "pain", 0.5 ); + } +} + +shock_onexplosion( damage, shocktype, shocklight ) +{ + time = 0; + scaled_damage = 100 * damage / self.maxhealth; + + if ( scaled_damage >= 90 ) + time = 4; + else if ( scaled_damage >= 50 ) + time = 3; + else if ( scaled_damage >= 25 ) + time = 2; + else if ( scaled_damage > 10 ) + time = 1; + + if ( time ) + { + if ( !isdefined( shocktype ) ) + shocktype = "explosion"; + + self shellshock( shocktype, time ); + } + else if ( isdefined( shocklight ) ) + self shellshock( shocklight, time ); +} + +increment_is_drinking() +{ +/# + if ( isdefined( level.devgui_dpad_watch ) && level.devgui_dpad_watch ) + { + self.is_drinking++; + return; + } +#/ + if ( !isdefined( self.is_drinking ) ) + self.is_drinking = 0; + + if ( self.is_drinking == 0 ) + { + self disableoffhandweapons(); + self disableweaponcycling(); + } + + self.is_drinking++; +} + +is_multiple_drinking() +{ + return self.is_drinking > 1; +} + +decrement_is_drinking() +{ + if ( self.is_drinking > 0 ) + self.is_drinking--; + else + { +/# + assertmsg( "making is_drinking less than 0" ); +#/ + } + + if ( self.is_drinking == 0 ) + { + self enableoffhandweapons(); + self enableweaponcycling(); + } +} + +clear_is_drinking() +{ + self.is_drinking = 0; + self enableoffhandweapons(); + self enableweaponcycling(); +} + +getweaponclasszm( weapon ) +{ + assert( isdefined( weapon ) ); + + if ( !isdefined( weapon ) ) + return undefined; + + if ( !isdefined( level.weaponclassarray ) ) + level.weaponclassarray = []; + + if ( isdefined( level.weaponclassarray[weapon] ) ) + return level.weaponclassarray[weapon]; + + baseweaponindex = getbaseweaponitemindex( weapon ) + 1; + weaponclass = tablelookupcolumnforrow( "zm/zm_statstable.csv", baseweaponindex, 2 ); + level.weaponclassarray[weapon] = weaponclass; + return weaponclass; +} + +spawn_weapon_model( weapon, model = getweaponmodel( weapon ), origin, angles, options ) +{ + weapon_model = spawn( "script_model", origin ); + + if ( isdefined( angles ) ) + weapon_model.angles = angles; + + if ( isdefined( options ) ) + weapon_model useweaponmodel( weapon, model, options ); + else + weapon_model useweaponmodel( weapon, model ); + + return weapon_model; +} + +is_limited_weapon( weapname ) +{ + if ( isdefined( level.limited_weapons ) ) + { + if ( isdefined( level.limited_weapons[weapname] ) ) + return true; + } + + return false; +} + +is_alt_weapon( weapname ) +{ + if ( getsubstr( weapname, 0, 3 ) == "gl_" ) + return true; + + if ( getsubstr( weapname, 0, 3 ) == "sf_" ) + return true; + + if ( getsubstr( weapname, 0, 10 ) == "dualoptic_" ) + return true; + + return false; +} + +is_grenade_launcher( weapname ) +{ + return weapname == "m32_zm" || weapname == "m32_upgraded_zm"; +} + +register_lethal_grenade_for_level( weaponname ) +{ + if ( is_lethal_grenade( weaponname ) ) + return; + + if ( !isdefined( level.zombie_lethal_grenade_list ) ) + level.zombie_lethal_grenade_list = []; + + level.zombie_lethal_grenade_list[weaponname] = weaponname; +} + +is_lethal_grenade( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( level.zombie_lethal_grenade_list ) ) + return 0; + + return isdefined( level.zombie_lethal_grenade_list[weaponname] ); +} + +is_player_lethal_grenade( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( self.current_lethal_grenade ) ) + return 0; + + return self.current_lethal_grenade == weaponname; +} + +get_player_lethal_grenade() +{ + grenade = ""; + + if ( isdefined( self.current_lethal_grenade ) ) + grenade = self.current_lethal_grenade; + + return grenade; +} + +set_player_lethal_grenade( weaponname ) +{ + self.current_lethal_grenade = weaponname; +} + +init_player_lethal_grenade() +{ + self set_player_lethal_grenade( level.zombie_lethal_grenade_player_init ); +} + +register_tactical_grenade_for_level( weaponname ) +{ + if ( is_tactical_grenade( weaponname ) ) + return; + + if ( !isdefined( level.zombie_tactical_grenade_list ) ) + level.zombie_tactical_grenade_list = []; + + level.zombie_tactical_grenade_list[weaponname] = weaponname; +} + +is_tactical_grenade( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( level.zombie_tactical_grenade_list ) ) + return 0; + + return isdefined( level.zombie_tactical_grenade_list[weaponname] ); +} + +is_player_tactical_grenade( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( self.current_tactical_grenade ) ) + return 0; + + return self.current_tactical_grenade == weaponname; +} + +get_player_tactical_grenade() +{ + tactical = ""; + + if ( isdefined( self.current_tactical_grenade ) ) + tactical = self.current_tactical_grenade; + + return tactical; +} + +set_player_tactical_grenade( weaponname ) +{ + self notify( "new_tactical_grenade", weaponname ); + self.current_tactical_grenade = weaponname; +} + +init_player_tactical_grenade() +{ + self set_player_tactical_grenade( level.zombie_tactical_grenade_player_init ); +} + +register_placeable_mine_for_level( weaponname ) +{ + if ( is_placeable_mine( weaponname ) ) + return; + + if ( !isdefined( level.zombie_placeable_mine_list ) ) + level.zombie_placeable_mine_list = []; + + level.zombie_placeable_mine_list[weaponname] = weaponname; +} + +is_placeable_mine( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( level.zombie_placeable_mine_list ) ) + return 0; + + return isdefined( level.zombie_placeable_mine_list[weaponname] ); +} + +is_player_placeable_mine( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( self.current_placeable_mine ) ) + return 0; + + return self.current_placeable_mine == weaponname; +} + +get_player_placeable_mine() +{ + return self.current_placeable_mine; +} + +set_player_placeable_mine( weaponname ) +{ + self.current_placeable_mine = weaponname; +} + +init_player_placeable_mine() +{ + self set_player_placeable_mine( level.zombie_placeable_mine_player_init ); +} + +register_melee_weapon_for_level( weaponname ) +{ + if ( is_melee_weapon( weaponname ) ) + return; + + if ( !isdefined( level.zombie_melee_weapon_list ) ) + level.zombie_melee_weapon_list = []; + + level.zombie_melee_weapon_list[weaponname] = weaponname; +} + +is_melee_weapon( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( level.zombie_melee_weapon_list ) ) + return 0; + + return isdefined( level.zombie_melee_weapon_list[weaponname] ); +} + +is_player_melee_weapon( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( self.current_melee_weapon ) ) + return 0; + + return self.current_melee_weapon == weaponname; +} + +get_player_melee_weapon() +{ + return self.current_melee_weapon; +} + +set_player_melee_weapon( weaponname ) +{ + self.current_melee_weapon = weaponname; +} + +init_player_melee_weapon() +{ + self set_player_melee_weapon( level.zombie_melee_weapon_player_init ); +} + +should_watch_for_emp() +{ + return isdefined( level.zombie_weapons["emp_grenade_zm"] ); +} + +register_equipment_for_level( weaponname ) +{ + if ( is_equipment( weaponname ) ) + return; + + if ( !isdefined( level.zombie_equipment_list ) ) + level.zombie_equipment_list = []; + + level.zombie_equipment_list[weaponname] = weaponname; +} + +is_equipment( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( level.zombie_equipment_list ) ) + return 0; + + return isdefined( level.zombie_equipment_list[weaponname] ); +} + +is_equipment_that_blocks_purchase( weaponname ) +{ + return is_equipment( weaponname ); +} + +is_player_equipment( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( self.current_equipment ) ) + return 0; + + return self.current_equipment == weaponname; +} + +has_deployed_equipment( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( self.deployed_equipment ) || self.deployed_equipment.size < 1 ) + return false; + + for ( i = 0; i < self.deployed_equipment.size; i++ ) + { + if ( self.deployed_equipment[i] == weaponname ) + return true; + } + + return false; +} + +has_player_equipment( weaponname ) +{ + return self is_player_equipment( weaponname ) || self has_deployed_equipment( weaponname ); +} + +get_player_equipment() +{ + return self.current_equipment; +} + +hacker_active() +{ + return self maps\mp\zombies\_zm_equipment::is_equipment_active( "equip_hacker_zm" ); +} + +set_player_equipment( weaponname ) +{ + if ( !isdefined( self.current_equipment_active ) ) + self.current_equipment_active = []; + + if ( isdefined( weaponname ) ) + self.current_equipment_active[weaponname] = 0; + + if ( !isdefined( self.equipment_got_in_round ) ) + self.equipment_got_in_round = []; + + if ( isdefined( weaponname ) ) + self.equipment_got_in_round[weaponname] = level.round_number; + + self.current_equipment = weaponname; +} + +init_player_equipment() +{ + self set_player_equipment( level.zombie_equipment_player_init ); +} + +register_offhand_weapons_for_level_defaults() +{ + if ( isdefined( level.register_offhand_weapons_for_level_defaults_override ) ) + { + [[ level.register_offhand_weapons_for_level_defaults_override ]](); + return; + } + + register_lethal_grenade_for_level( "frag_grenade_zm" ); + level.zombie_lethal_grenade_player_init = "frag_grenade_zm"; + register_tactical_grenade_for_level( "cymbal_monkey_zm" ); + level.zombie_tactical_grenade_player_init = undefined; + register_placeable_mine_for_level( "claymore_zm" ); + level.zombie_placeable_mine_player_init = undefined; + register_melee_weapon_for_level( "knife_zm" ); + register_melee_weapon_for_level( "bowie_knife_zm" ); + level.zombie_melee_weapon_player_init = "knife_zm"; + level.zombie_equipment_player_init = undefined; +} + +init_player_offhand_weapons() +{ + init_player_lethal_grenade(); + init_player_tactical_grenade(); + init_player_placeable_mine(); + init_player_melee_weapon(); + init_player_equipment(); +} + +is_offhand_weapon( weaponname ) +{ + return is_lethal_grenade( weaponname ) || is_tactical_grenade( weaponname ) || is_placeable_mine( weaponname ) || is_melee_weapon( weaponname ) || is_equipment( weaponname ); +} + +is_player_offhand_weapon( weaponname ) +{ + return self is_player_lethal_grenade( weaponname ) || self is_player_tactical_grenade( weaponname ) || self is_player_placeable_mine( weaponname ) || self is_player_melee_weapon( weaponname ) || self is_player_equipment( weaponname ); +} + +has_powerup_weapon() +{ + return isdefined( self.has_powerup_weapon ) && self.has_powerup_weapon; +} + +give_start_weapon( switch_to_weapon ) +{ + self giveweapon( level.start_weapon ); + self givestartammo( level.start_weapon ); + + if ( isdefined( switch_to_weapon ) && switch_to_weapon ) + self switchtoweapon( level.start_weapon ); +} + +array_flag_wait_any( flag_array ) +{ + if ( !isdefined( level._array_flag_wait_any_calls ) ) + level._n_array_flag_wait_any_calls = 0; + else + level._n_array_flag_wait_any_calls++; + + str_condition = "array_flag_wait_call_" + level._n_array_flag_wait_any_calls; + + for ( index = 0; index < flag_array.size; index++ ) + level thread array_flag_wait_any_thread( flag_array[index], str_condition ); + + level waittill( str_condition ); +} + +array_flag_wait_any_thread( flag_name, condition ) +{ + level endon( condition ); + flag_wait( flag_name ); + level notify( condition ); +} + +array_removedead( array ) +{ + newarray = []; + + if ( !isdefined( array ) ) + return undefined; + + for ( i = 0; i < array.size; i++ ) + { + if ( !isalive( array[i] ) || isdefined( array[i].isacorpse ) && array[i].isacorpse ) + continue; + + newarray[newarray.size] = array[i]; + } + + return newarray; +} + +groundpos( origin ) +{ + return bullettrace( origin, origin + vectorscale( ( 0, 0, -1 ), 100000.0 ), 0, self )["position"]; +} + +groundpos_ignore_water( origin ) +{ + return bullettrace( origin, origin + vectorscale( ( 0, 0, -1 ), 100000.0 ), 0, self, 1 )["position"]; +} + +groundpos_ignore_water_new( origin ) +{ + return groundtrace( origin, origin + vectorscale( ( 0, 0, -1 ), 100000.0 ), 0, self, 1 )["position"]; +} + +waittill_notify_or_timeout( msg, timer ) +{ + self endon( msg ); + wait( timer ); + return timer; +} + +self_delete() +{ + if ( isdefined( self ) ) + self delete(); +} + +script_delay() +{ + if ( isdefined( self.script_delay ) ) + { + wait( self.script_delay ); + return true; + } + else if ( isdefined( self.script_delay_min ) && isdefined( self.script_delay_max ) ) + { + wait( randomfloatrange( self.script_delay_min, self.script_delay_max ) ); + return true; + } + + return false; +} + +button_held_think( which_button ) +{ + self endon( "disconnect" ); + + if ( !isdefined( self._holding_button ) ) + self._holding_button = []; + + self._holding_button[which_button] = 0; + time_started = 0; + use_time = 250; + + while ( true ) + { + if ( self._holding_button[which_button] ) + { + if ( !self [[ level._button_funcs[which_button] ]]() ) + self._holding_button[which_button] = 0; + } + else if ( self [[ level._button_funcs[which_button] ]]() ) + { + if ( time_started == 0 ) + time_started = gettime(); + + if ( gettime() - time_started > use_time ) + self._holding_button[which_button] = 1; + } + else if ( time_started != 0 ) + time_started = 0; + + wait 0.05; + } +} + +use_button_held() +{ + init_button_wrappers(); + + if ( !isdefined( self._use_button_think_threaded ) ) + { + self thread button_held_think( level.button_use ); + self._use_button_think_threaded = 1; + } + + return self._holding_button[level.button_use]; +} + +ads_button_held() +{ + init_button_wrappers(); + + if ( !isdefined( self._ads_button_think_threaded ) ) + { + self thread button_held_think( level.button_ads ); + self._ads_button_think_threaded = 1; + } + + return self._holding_button[level.button_ads]; +} + +attack_button_held() +{ + init_button_wrappers(); + + if ( !isdefined( self._attack_button_think_threaded ) ) + { + self thread button_held_think( level.button_attack ); + self._attack_button_think_threaded = 1; + } + + return self._holding_button[level.button_attack]; +} + +use_button_pressed() +{ + return self usebuttonpressed(); +} + +ads_button_pressed() +{ + return self adsbuttonpressed(); +} + +attack_button_pressed() +{ + return self attackbuttonpressed(); +} + +init_button_wrappers() +{ + if ( !isdefined( level._button_funcs ) ) + { + level.button_use = 0; + level.button_ads = 1; + level.button_attack = 2; + level._button_funcs[level.button_use] = ::use_button_pressed; + level._button_funcs[level.button_ads] = ::ads_button_pressed; + level._button_funcs[level.button_attack] = ::attack_button_pressed; + } +} + +wait_network_frame() +{ + if ( numremoteclients() ) + { + snapshot_ids = getsnapshotindexarray(); + + for ( acked = undefined; !isdefined( acked ); acked = snapshotacknowledged( snapshot_ids ) ) + level waittill( "snapacknowledged" ); + } + else + wait 0.1; +} + +ignore_triggers( timer ) +{ + self endon( "death" ); + self.ignoretriggers = 1; + + if ( isdefined( timer ) ) + wait( timer ); + else + wait 0.5; + + self.ignoretriggers = 0; +} + +giveachievement_wrapper( achievement, all_players ) +{ + if ( achievement == "" ) + return; + + if ( isdefined( level.zm_disable_recording_stats ) && level.zm_disable_recording_stats ) + return; + + achievement_lower = tolower( achievement ); + global_counter = 0; + + if ( isdefined( all_players ) && all_players ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + players[i] giveachievement( achievement ); + has_achievement = players[i] maps\mp\zombies\_zm_stats::get_global_stat( achievement_lower ); + + if ( !( isdefined( has_achievement ) && has_achievement ) ) + global_counter++; + + players[i] maps\mp\zombies\_zm_stats::increment_client_stat( achievement_lower, 0 ); + + if ( issplitscreen() && i == 0 || !issplitscreen() ) + { + if ( isdefined( level.achievement_sound_func ) ) + players[i] thread [[ level.achievement_sound_func ]]( achievement_lower ); + } + } + } + else + { + if ( !isplayer( self ) ) + { +/# + println( "^1self needs to be a player for _utility::giveachievement_wrapper()" ); +#/ + return; + } + + self giveachievement( achievement ); + has_achievement = self maps\mp\zombies\_zm_stats::get_global_stat( achievement_lower ); + + if ( !( isdefined( has_achievement ) && has_achievement ) ) + global_counter++; + + self maps\mp\zombies\_zm_stats::increment_client_stat( achievement_lower, 0 ); + + if ( isdefined( level.achievement_sound_func ) ) + self thread [[ level.achievement_sound_func ]]( achievement_lower ); + } + + if ( global_counter ) + incrementcounter( "global_" + achievement_lower, global_counter ); +} + +spawn_failed( spawn ) +{ + if ( isdefined( spawn ) && isalive( spawn ) ) + { + if ( isalive( spawn ) ) + return false; + } + + return true; +} + +getyaw( org ) +{ + angles = vectortoangles( org - self.origin ); + return angles[1]; +} + +getyawtospot( spot ) +{ + pos = spot; + yaw = self.angles[1] - getyaw( pos ); + yaw = angleclamp180( yaw ); + return yaw; +} + +add_spawn_function( function, param1, param2, param3, param4 ) +{ + assert( !isdefined( level._loadstarted ) || !isalive( self ), "Tried to add_spawn_function to a living guy." ); + func = []; + func["function"] = function; + func["param1"] = param1; + func["param2"] = param2; + func["param3"] = param3; + func["param4"] = param4; + + if ( !isdefined( self.spawn_funcs ) ) + self.spawn_funcs = []; + + self.spawn_funcs[self.spawn_funcs.size] = func; +} + +disable_react() +{ + assert( isalive( self ), "Tried to disable react on a non ai" ); + self.a.disablereact = 1; + self.allowreact = 0; +} + +enable_react() +{ + assert( isalive( self ), "Tried to enable react on a non ai" ); + self.a.disablereact = 0; + self.allowreact = 1; +} + +flag_wait_or_timeout( flagname, timer ) +{ + start_time = gettime(); + + for (;;) + { + if ( level.flag[flagname] ) + break; + + if ( gettime() >= start_time + timer * 1000 ) + break; + + wait_for_flag_or_time_elapses( flagname, timer ); + } +} + +wait_for_flag_or_time_elapses( flagname, timer ) +{ + level endon( flagname ); + wait( timer ); +} + +isads( player ) +{ + return player playerads() > 0.5; +} + +bullet_attack( type ) +{ + if ( type == "MOD_PISTOL_BULLET" ) + return 1; + + return type == "MOD_RIFLE_BULLET"; +} + +pick_up() +{ + player = self.owner; + self destroy_ent(); + clip_ammo = player getweaponammoclip( self.name ); + clip_max_ammo = weaponclipsize( self.name ); + + if ( clip_ammo < clip_max_ammo ) + clip_ammo++; + + player setweaponammoclip( self.name, clip_ammo ); +} + +destroy_ent() +{ + self delete(); +} + +waittill_not_moving() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "detonated" ); + level endon( "game_ended" ); + + if ( self.classname == "grenade" ) + self waittill( "stationary" ); + else + { + for ( prevorigin = self.origin; 1; prevorigin = self.origin ) + { + wait 0.15; + + if ( self.origin == prevorigin ) + break; + } + } +} + +get_closest_player( org ) +{ + players = []; + players = get_players(); + return getclosest( org, players ); +} + +ent_flag_wait( msg ) +{ + self endon( "death" ); + + while ( !self.ent_flag[msg] ) + self waittill( msg ); +} + +ent_flag_wait_either( flag1, flag2 ) +{ + self endon( "death" ); + + for (;;) + { + if ( ent_flag( flag1 ) ) + return; + + if ( ent_flag( flag2 ) ) + return; + + self waittill_either( flag1, flag2 ); + } +} + +ent_wait_for_flag_or_time_elapses( flagname, timer ) +{ + self endon( flagname ); + wait( timer ); +} + +ent_flag_wait_or_timeout( flagname, timer ) +{ + self endon( "death" ); + start_time = gettime(); + + for (;;) + { + if ( self.ent_flag[flagname] ) + break; + + if ( gettime() >= start_time + timer * 1000 ) + break; + + self ent_wait_for_flag_or_time_elapses( flagname, timer ); + } +} + +ent_flag_waitopen( msg ) +{ + self endon( "death" ); + + while ( self.ent_flag[msg] ) + self waittill( msg ); +} + +ent_flag_init( message, val ) +{ + if ( !isdefined( self.ent_flag ) ) + { + self.ent_flag = []; + self.ent_flags_lock = []; + } + + if ( !isdefined( level.first_frame ) ) + assert( !isdefined( self.ent_flag[message] ), "Attempt to reinitialize existing flag '" + message + "' on entity." ); + + if ( isdefined( val ) && val ) + { + self.ent_flag[message] = 1; +/# + self.ent_flags_lock[message] = 1; +#/ + } + else + { + self.ent_flag[message] = 0; +/# + self.ent_flags_lock[message] = 0; +#/ + } +} + +ent_flag_exist( message ) +{ + if ( isdefined( self.ent_flag ) && isdefined( self.ent_flag[message] ) ) + return true; + + return false; +} + +ent_flag_set_delayed( message, delay ) +{ + wait( delay ); + self ent_flag_set( message ); +} + +ent_flag_set( message ) +{ +/# + assert( isdefined( self ), "Attempt to set a flag on entity that is not defined" ); + assert( isdefined( self.ent_flag[message] ), "Attempt to set a flag before calling flag_init: '" + message + "'." ); + assert( self.ent_flag[message] == self.ent_flags_lock[message] ); + self.ent_flags_lock[message] = 1; +#/ + self.ent_flag[message] = 1; + self notify( message ); +} + +ent_flag_toggle( message ) +{ + if ( self ent_flag( message ) ) + self ent_flag_clear( message ); + else + self ent_flag_set( message ); +} + +ent_flag_clear( message ) +{ +/# + assert( isdefined( self ), "Attempt to clear a flag on entity that is not defined" ); + assert( isdefined( self.ent_flag[message] ), "Attempt to set a flag before calling flag_init: '" + message + "'." ); + assert( self.ent_flag[message] == self.ent_flags_lock[message] ); + self.ent_flags_lock[message] = 0; +#/ + if ( self.ent_flag[message] ) + { + self.ent_flag[message] = 0; + self notify( message ); + } +} + +ent_flag_clear_delayed( message, delay ) +{ + wait( delay ); + self ent_flag_clear( message ); +} + +ent_flag( message ) +{ + assert( isdefined( message ), "Tried to check flag but the flag was not defined." ); + assert( isdefined( self.ent_flag[message] ), "Tried to check entity flag '" + message + "', but the flag was not initialized." ); + + if ( !self.ent_flag[message] ) + return false; + + return true; +} + +ent_flag_init_ai_standards() +{ + message_array = []; + message_array[message_array.size] = "goal"; + message_array[message_array.size] = "damage"; + + for ( i = 0; i < message_array.size; i++ ) + { + self ent_flag_init( message_array[i] ); + self thread ent_flag_wait_ai_standards( message_array[i] ); + } +} + +ent_flag_wait_ai_standards( message ) +{ + self endon( "death" ); + + self waittill( message ); + + self.ent_flag[message] = 1; +} + +flat_angle( angle ) +{ + rangle = ( 0, angle[1], 0 ); + return rangle; +} + +waittill_any_or_timeout( timer, string1, string2, string3, string4, string5 ) +{ + assert( isdefined( string1 ) ); + self endon( string1 ); + + if ( isdefined( string2 ) ) + self endon( string2 ); + + if ( isdefined( string3 ) ) + self endon( string3 ); + + if ( isdefined( string4 ) ) + self endon( string4 ); + + if ( isdefined( string5 ) ) + self endon( string5 ); + + wait( timer ); +} + +clear_run_anim() +{ + self.alwaysrunforward = undefined; + self.a.combatrunanim = undefined; + self.run_noncombatanim = undefined; + self.walk_combatanim = undefined; + self.walk_noncombatanim = undefined; + self.precombatrunenabled = 1; +} + +track_players_intersection_tracker() +{ + self endon( "disconnect" ); + self endon( "death" ); + level endon( "end_game" ); + wait 5; + + while ( true ) + { + killed_players = 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() || "playing" != players[i].sessionstate ) + continue; + + for ( j = 0; j < players.size; j++ ) + { + if ( i == j || players[j] maps\mp\zombies\_zm_laststand::player_is_in_laststand() || "playing" != players[j].sessionstate ) + continue; + + if ( isdefined( level.player_intersection_tracker_override ) ) + { + if ( players[i] [[ level.player_intersection_tracker_override ]]( players[j] ) ) + continue; + } + + playeri_origin = players[i].origin; + playerj_origin = players[j].origin; + + if ( abs( playeri_origin[2] - playerj_origin[2] ) > 60 ) + continue; + + distance_apart = distance2d( playeri_origin, playerj_origin ); + + if ( abs( distance_apart ) > 18 ) + continue; +/# + iprintlnbold( "PLAYERS ARE TOO FRIENDLY!!!!!" ); +#/ + players[i] dodamage( 1000, ( 0, 0, 0 ) ); + players[j] dodamage( 1000, ( 0, 0, 0 ) ); + + if ( !killed_players ) + players[i] playlocalsound( level.zmb_laugh_alias ); + + players[i] maps\mp\zombies\_zm_stats::increment_map_cheat_stat( "cheat_too_friendly" ); + players[i] maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_too_friendly", 0 ); + players[i] maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); + players[j] maps\mp\zombies\_zm_stats::increment_map_cheat_stat( "cheat_too_friendly" ); + players[j] maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_too_friendly", 0 ); + players[j] maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); + killed_players = 1; + } + } + + wait 0.5; + } +} + +get_eye() +{ + if ( isplayer( self ) ) + { + linked_ent = self getlinkedent(); + + if ( isdefined( linked_ent ) && getdvarint( _hash_5AEFD7E9 ) > 0 ) + { + camera = linked_ent gettagorigin( "tag_camera" ); + + if ( isdefined( camera ) ) + return camera; + } + } + + pos = self geteye(); + return pos; +} + +is_player_looking_at( origin, dot, do_trace, ignore_ent ) +{ + assert( isplayer( self ), "player_looking_at must be called on a player." ); + + if ( !isdefined( dot ) ) + dot = 0.7; + + if ( !isdefined( do_trace ) ) + do_trace = 1; + + eye = self get_eye(); + delta_vec = anglestoforward( vectortoangles( origin - eye ) ); + view_vec = anglestoforward( self getplayerangles() ); + new_dot = vectordot( delta_vec, view_vec ); + + if ( new_dot >= dot ) + { + if ( do_trace ) + return bullettracepassed( origin, eye, 0, ignore_ent ); + else + return 1; + } + + return 0; +} + +add_gametype( gt, dummy1, name, dummy2 ) +{ + +} + +add_gameloc( gl, dummy1, name, dummy2 ) +{ + +} + +get_closest_index( org, array, dist = 9999999 ) +{ + distsq = dist * dist; + + if ( array.size < 1 ) + return; + + index = undefined; + + for ( i = 0; i < array.size; i++ ) + { + newdistsq = distancesquared( array[i].origin, org ); + + if ( newdistsq >= distsq ) + continue; + + distsq = newdistsq; + index = i; + } + + return index; +} + +is_valid_zombie_spawn_point( point ) +{ + liftedorigin = point.origin + vectorscale( ( 0, 0, 1 ), 5.0 ); + size = 48; + height = 64; + mins = ( -1 * size, -1 * size, 0 ); + maxs = ( size, size, height ); + absmins = liftedorigin + mins; + absmaxs = liftedorigin + maxs; + + if ( boundswouldtelefrag( absmins, absmaxs ) ) + return false; + + return true; +} + +get_closest_index_to_entity( entity, array, dist, extra_check ) +{ + org = entity.origin; + + if ( !isdefined( dist ) ) + dist = 9999999; + + distsq = dist * dist; + + if ( array.size < 1 ) + return; + + index = undefined; + + for ( i = 0; i < array.size; i++ ) + { + if ( isdefined( extra_check ) && ![[ extra_check ]]( entity, array[i] ) ) + continue; + + newdistsq = distancesquared( array[i].origin, org ); + + if ( newdistsq >= distsq ) + continue; + + distsq = newdistsq; + index = i; + } + + return index; +} + +set_gamemode_var( var, val ) +{ + if ( !isdefined( game["gamemode_match"] ) ) + game["gamemode_match"] = []; + + game["gamemode_match"][var] = val; +} + +set_gamemode_var_once( var, val ) +{ + if ( !isdefined( game["gamemode_match"] ) ) + game["gamemode_match"] = []; + + if ( !isdefined( game["gamemode_match"][var] ) ) + game["gamemode_match"][var] = val; +} + +set_game_var( var, val ) +{ + game[var] = val; +} + +set_game_var_once( var, val ) +{ + if ( !isdefined( game[var] ) ) + game[var] = val; +} + +get_game_var( var ) +{ + if ( isdefined( game[var] ) ) + return game[var]; + + return undefined; +} + +get_gamemode_var( var ) +{ + if ( isdefined( game["gamemode_match"] ) && isdefined( game["gamemode_match"][var] ) ) + return game["gamemode_match"][var]; + + return undefined; +} + +waittill_subset( min_num, string1, string2, string3, string4, string5 ) +{ + self endon( "death" ); + ent = spawnstruct(); + ent.threads = 0; + returned_threads = 0; + + if ( isdefined( string1 ) ) + { + self thread waittill_string( string1, ent ); + ent.threads++; + } + + if ( isdefined( string2 ) ) + { + self thread waittill_string( string2, ent ); + ent.threads++; + } + + if ( isdefined( string3 ) ) + { + self thread waittill_string( string3, ent ); + ent.threads++; + } + + if ( isdefined( string4 ) ) + { + self thread waittill_string( string4, ent ); + ent.threads++; + } + + if ( isdefined( string5 ) ) + { + self thread waittill_string( string5, ent ); + ent.threads++; + } + + while ( ent.threads ) + { + ent waittill( "returned" ); + + ent.threads--; + returned_threads++; + + if ( returned_threads >= min_num ) + break; + } + + ent notify( "die" ); +} + +is_headshot( sweapon, shitloc, smeansofdeath ) +{ + if ( shitloc != "head" && shitloc != "helmet" ) + return 0; + + if ( smeansofdeath == "MOD_IMPACT" && issubstr( sweapon, "knife_ballistic" ) ) + return 1; + + return smeansofdeath != "MOD_MELEE" && smeansofdeath != "MOD_BAYONET" && smeansofdeath != "MOD_IMPACT" && smeansofdeath != "MOD_UNKNOWN"; +} + +is_jumping() +{ + ground_ent = self getgroundent(); + return !isdefined( ground_ent ); +} + +is_explosive_damage( mod ) +{ + if ( !isdefined( mod ) ) + return false; + + if ( mod == "MOD_GRENADE" || mod == "MOD_GRENADE_SPLASH" || mod == "MOD_PROJECTILE" || mod == "MOD_PROJECTILE_SPLASH" || mod == "MOD_EXPLOSIVE" ) + return true; + + return false; +} + +sndswitchannouncervox( who ) +{ + switch ( who ) + { + case "sam": + game["zmbdialog"]["prefix"] = "vox_zmba_sam"; + level.zmb_laugh_alias = "zmb_laugh_sam"; + level.sndannouncerisrich = 0; + break; + case "richtofen": + game["zmbdialog"]["prefix"] = "vox_zmba"; + level.zmb_laugh_alias = "zmb_laugh_richtofen"; + level.sndannouncerisrich = 1; + break; + } +} + +do_player_general_vox( category, type, timer, chance ) +{ + if ( isdefined( timer ) && isdefined( level.votimer[type] ) && level.votimer[type] > 0 ) + return; + + if ( !isdefined( chance ) ) + chance = maps\mp\zombies\_zm_audio::get_response_chance( type ); + + if ( chance > randomint( 100 ) ) + { + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( category, type ); + + if ( isdefined( timer ) ) + { + level.votimer[type] = timer; + level thread general_vox_timer( level.votimer[type], type ); + } + } +} + +general_vox_timer( timer, type ) +{ + level endon( "end_game" ); +/# + println( "ZM >> VOX TIMER STARTED FOR " + type + " ( " + timer + ")" ); +#/ + while ( timer > 0 ) + { + wait 1; + timer--; + } + + level.votimer[type] = timer; +/# + println( "ZM >> VOX TIMER ENDED FOR " + type + " ( " + timer + ")" ); +#/ +} + +create_vox_timer( type ) +{ + level.votimer[type] = 0; +} + +play_vox_to_player( category, type, force_variant ) +{ + self thread maps\mp\zombies\_zm_audio::playvoxtoplayer( category, type, force_variant ); +} + +is_favorite_weapon( weapon_to_check ) +{ + if ( !isdefined( self.favorite_wall_weapons_list ) ) + return false; + + foreach ( weapon in self.favorite_wall_weapons_list ) + { + if ( weapon_to_check == weapon ) + return true; + } + + return false; +} + +add_vox_response_chance( event, chance ) +{ + level.response_chances[event] = chance; +} + +set_demo_intermission_point() +{ + spawnpoints = getentarray( "mp_global_intermission", "classname" ); + + if ( !spawnpoints.size ) + return; + + spawnpoint = spawnpoints[0]; + match_string = ""; + location = level.scr_zm_map_start_location; + + if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) ) + location = level.default_start_location; + + match_string = level.scr_zm_ui_gametype + "_" + location; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + if ( isdefined( spawnpoints[i].script_string ) ) + { + tokens = strtok( spawnpoints[i].script_string, " " ); + + foreach ( token in tokens ) + { + if ( token == match_string ) + { + spawnpoint = spawnpoints[i]; + i = spawnpoints.size; + break; + } + } + } + } + + setdemointermissionpoint( spawnpoint.origin, spawnpoint.angles ); +} + +register_map_navcard( navcard_on_map, navcard_needed_for_computer ) +{ + level.navcard_needed = navcard_needed_for_computer; + level.map_navcard = navcard_on_map; +} + +does_player_have_map_navcard( player ) +{ + return player maps\mp\zombies\_zm_stats::get_global_stat( level.map_navcard ); +} + +does_player_have_correct_navcard( player ) +{ + if ( !isdefined( level.navcard_needed ) ) + return 0; + + return player maps\mp\zombies\_zm_stats::get_global_stat( level.navcard_needed ); +} + +place_navcard( str_model, str_stat, org, angles ) +{ + navcard = spawn( "script_model", org ); + navcard setmodel( str_model ); + navcard.angles = angles; + wait 1; + navcard_pickup_trig = spawn( "trigger_radius_use", org, 0, 84, 72 ); + navcard_pickup_trig setcursorhint( "HINT_NOICON" ); + navcard_pickup_trig sethintstring( &"ZOMBIE_NAVCARD_PICKUP" ); + navcard_pickup_trig triggerignoreteam(); + a_navcard_stats = array( "navcard_held_zm_transit", "navcard_held_zm_highrise", "navcard_held_zm_buried" ); + is_holding_card = 0; + str_placing_stat = undefined; + + while ( true ) + { + navcard_pickup_trig waittill( "trigger", who ); + + if ( is_player_valid( who ) ) + { + foreach ( str_cur_stat in a_navcard_stats ) + { + if ( who maps\mp\zombies\_zm_stats::get_global_stat( str_cur_stat ) ) + { + str_placing_stat = str_cur_stat; + is_holding_card = 1; + who maps\mp\zombies\_zm_stats::set_global_stat( str_cur_stat, 0 ); + } + } + + who playsound( "zmb_buildable_piece_add" ); + who maps\mp\zombies\_zm_stats::set_global_stat( str_stat, 1 ); + who.navcard_grabbed = str_stat; + wait_network_frame(); + is_stat = who maps\mp\zombies\_zm_stats::get_global_stat( str_stat ); + thread sq_refresh_player_navcard_hud(); + break; + } + } + + navcard delete(); + navcard_pickup_trig delete(); + + if ( is_holding_card ) + level thread place_navcard( str_model, str_placing_stat, org, angles ); +} + +sq_refresh_player_navcard_hud() +{ + if ( !isdefined( level.navcards ) ) + return; + + players = get_players(); + + foreach ( player in players ) + player thread sq_refresh_player_navcard_hud_internal(); +} + +sq_refresh_player_navcard_hud_internal() +{ + self endon( "disconnect" ); + navcard_bits = 0; + + for ( i = 0; i < level.navcards.size; i++ ) + { + hasit = self maps\mp\zombies\_zm_stats::get_global_stat( level.navcards[i] ); + + if ( isdefined( self.navcard_grabbed ) && self.navcard_grabbed == level.navcards[i] ) + hasit = 1; + + if ( hasit ) + navcard_bits += ( 1 << i ); + } + + wait_network_frame(); + self setclientfield( "navcard_held", 0 ); + + if ( navcard_bits > 0 ) + { + wait_network_frame(); + self setclientfield( "navcard_held", navcard_bits ); + } +} + +set_player_is_female( onoff ) +{ + if ( isdefined( level.use_female_animations ) && level.use_female_animations ) + { + female_perk = "specialty_gpsjammer"; + + if ( onoff ) + self setperk( female_perk ); + else + self unsetperk( female_perk ); + } +} + +disable_player_move_states( forcestancechange ) +{ + self allowcrouch( 1 ); + self allowlean( 0 ); + self allowads( 0 ); + self allowsprint( 0 ); + self allowprone( 0 ); + self allowmelee( 0 ); + + if ( isdefined( forcestancechange ) && forcestancechange == 1 ) + { + if ( self getstance() == "prone" ) + self setstance( "crouch" ); + } +} + +enable_player_move_states() +{ + if ( !isdefined( self._allow_lean ) || self._allow_lean == 1 ) + self allowlean( 1 ); + + if ( !isdefined( self._allow_ads ) || self._allow_ads == 1 ) + self allowads( 1 ); + + if ( !isdefined( self._allow_sprint ) || self._allow_sprint == 1 ) + self allowsprint( 1 ); + + if ( !isdefined( self._allow_prone ) || self._allow_prone == 1 ) + self allowprone( 1 ); + + if ( !isdefined( self._allow_melee ) || self._allow_melee == 1 ) + self allowmelee( 1 ); +} + +check_and_create_node_lists() +{ + if ( !isdefined( level._link_node_list ) ) + level._link_node_list = []; + + if ( !isdefined( level._unlink_node_list ) ) + level._unlink_node_list = []; +} + +link_nodes( a, b, bdontunlinkonmigrate = 0 ) +{ + if ( nodesarelinked( a, b ) ) + return; + + check_and_create_node_lists(); + a_index_string = "" + a.origin; + b_index_string = "" + b.origin; + + if ( !isdefined( level._link_node_list[a_index_string] ) ) + { + level._link_node_list[a_index_string] = spawnstruct(); + level._link_node_list[a_index_string].node = a; + level._link_node_list[a_index_string].links = []; + level._link_node_list[a_index_string].ignore_on_migrate = []; + } + + if ( !isdefined( level._link_node_list[a_index_string].links[b_index_string] ) ) + { + level._link_node_list[a_index_string].links[b_index_string] = b; + level._link_node_list[a_index_string].ignore_on_migrate[b_index_string] = bdontunlinkonmigrate; + } + + if ( isdefined( level._unlink_node_list[a_index_string] ) ) + { + if ( isdefined( level._unlink_node_list[a_index_string].links[b_index_string] ) ) + { + level._unlink_node_list[a_index_string].links[b_index_string] = undefined; + level._unlink_node_list[a_index_string].ignore_on_migrate[b_index_string] = undefined; + } + } + + linknodes( a, b ); +} + +unlink_nodes( a, b, bdontlinkonmigrate = 0 ) +{ + if ( !nodesarelinked( a, b ) ) + return; + + check_and_create_node_lists(); + a_index_string = "" + a.origin; + b_index_string = "" + b.origin; + + if ( !isdefined( level._unlink_node_list[a_index_string] ) ) + { + level._unlink_node_list[a_index_string] = spawnstruct(); + level._unlink_node_list[a_index_string].node = a; + level._unlink_node_list[a_index_string].links = []; + level._unlink_node_list[a_index_string].ignore_on_migrate = []; + } + + if ( !isdefined( level._unlink_node_list[a_index_string].links[b_index_string] ) ) + { + level._unlink_node_list[a_index_string].links[b_index_string] = b; + level._unlink_node_list[a_index_string].ignore_on_migrate[b_index_string] = bdontlinkonmigrate; + } + + if ( isdefined( level._link_node_list[a_index_string] ) ) + { + if ( isdefined( level._link_node_list[a_index_string].links[b_index_string] ) ) + { + level._link_node_list[a_index_string].links[b_index_string] = undefined; + level._link_node_list[a_index_string].ignore_on_migrate[b_index_string] = undefined; + } + } + + unlinknodes( a, b ); +} + +spawn_path_node( origin, angles, k1, v1, k2, v2 ) +{ + if ( !isdefined( level._spawned_path_nodes ) ) + level._spawned_path_nodes = []; + + node = spawnstruct(); + node.origin = origin; + node.angles = angles; + node.k1 = k1; + node.v1 = v1; + node.k2 = k2; + node.v2 = v2; + node.node = spawn_path_node_internal( origin, angles, k1, v1, k2, v2 ); + level._spawned_path_nodes[level._spawned_path_nodes.size] = node; + return node.node; +} + +spawn_path_node_internal( origin, angles, k1, v1, k2, v2 ) +{ + if ( isdefined( k2 ) ) + return spawnpathnode( "node_pathnode", origin, angles, k1, v1, k2, v2 ); + else if ( isdefined( k1 ) ) + return spawnpathnode( "node_pathnode", origin, angles, k1, v1 ); + else + return spawnpathnode( "node_pathnode", origin, angles ); + + return undefined; +} + +delete_spawned_path_nodes() +{ + +} + +respawn_path_nodes() +{ + if ( !isdefined( level._spawned_path_nodes ) ) + return; + + for ( i = 0; i < level._spawned_path_nodes.size; i++ ) + { + node_struct = level._spawned_path_nodes[i]; +/# + println( "Re-spawning spawned path node @ " + node_struct.origin ); +#/ + node_struct.node = spawn_path_node_internal( node_struct.origin, node_struct.angles, node_struct.k1, node_struct.v1, node_struct.k2, node_struct.v2 ); + } +} + +link_changes_internal_internal( list, func ) +{ + keys = getarraykeys( list ); + + for ( i = 0; i < keys.size; i++ ) + { + node = list[keys[i]].node; + node_keys = getarraykeys( list[keys[i]].links ); + + for ( j = 0; j < node_keys.size; j++ ) + { + if ( isdefined( list[keys[i]].links[node_keys[j]] ) ) + { + if ( isdefined( list[keys[i]].ignore_on_migrate[node_keys[j]] ) && list[keys[i]].ignore_on_migrate[node_keys[j]] ) + { +/# + println( "Node at " + keys[i] + " to node at " + node_keys[j] + " - IGNORED" ); +#/ + continue; + } +/# + println( "Node at " + keys[i] + " to node at " + node_keys[j] ); +#/ + [[ func ]]( node, list[keys[i]].links[node_keys[j]] ); + } + } + } +} + +link_changes_internal( func_for_link_list, func_for_unlink_list ) +{ + if ( isdefined( level._link_node_list ) ) + { +/# + println( "Link List" ); +#/ + link_changes_internal_internal( level._link_node_list, func_for_link_list ); + } + + if ( isdefined( level._unlink_node_list ) ) + { +/# + println( "UnLink List" ); +#/ + link_changes_internal_internal( level._unlink_node_list, func_for_unlink_list ); + } +} + +link_nodes_wrapper( a, b ) +{ + if ( !nodesarelinked( a, b ) ) + linknodes( a, b ); +} + +unlink_nodes_wrapper( a, b ) +{ + if ( nodesarelinked( a, b ) ) + unlinknodes( a, b ); +} + +undo_link_changes() +{ +/# + println( "***" ); + println( "***" ); + println( "*** Undoing link changes" ); +#/ + link_changes_internal( ::unlink_nodes_wrapper, ::link_nodes_wrapper ); + delete_spawned_path_nodes(); +} + +redo_link_changes() +{ +/# + println( "***" ); + println( "***" ); + println( "*** Redoing link changes" ); +#/ + respawn_path_nodes(); + link_changes_internal( ::link_nodes_wrapper, ::unlink_nodes_wrapper ); +} + +set_player_tombstone_index() +{ + if ( !isdefined( level.tombstone_index ) ) + level.tombstone_index = 0; + + if ( !isdefined( self.tombstone_index ) ) + { + self.tombstone_index = level.tombstone_index; + level.tombstone_index++; + } +} + +hotjoin_setup_player( viewmodel ) +{ + if ( is_true( level.passed_introscreen ) && !isdefined( self.first_spawn ) && !isdefined( self.characterindex ) ) + { + self.first_spawn = 1; + self setviewmodel( viewmodel ); + return true; + } + + return false; +} + +is_temporary_zombie_weapon( str_weapon ) +{ + return is_zombie_perk_bottle( str_weapon ) || str_weapon == level.revive_tool || str_weapon == "zombie_builder_zm" || str_weapon == "chalk_draw_zm" || str_weapon == "no_hands_zm" || str_weapon == level.machine_assets["packapunch"].weapon; +} + +is_gametype_active( a_gametypes ) +{ + b_is_gametype_active = 0; + + if ( !isarray( a_gametypes ) ) + a_gametypes = array( a_gametypes ); + + for ( i = 0; i < a_gametypes.size; i++ ) + { + if ( getdvar( "g_gametype" ) == a_gametypes[i] ) + b_is_gametype_active = 1; + } + + return b_is_gametype_active; +} + +is_createfx_active() +{ + if ( !isdefined( level.createfx_enabled ) ) + level.createfx_enabled = getdvar( "createfx" ) != ""; + + return level.createfx_enabled; +} + +is_zombie_perk_bottle( str_weapon ) +{ + switch ( str_weapon ) + { + case "zombie_perk_bottle_whoswho": + case "zombie_perk_bottle_vulture": + case "zombie_perk_bottle_tombstone": + case "zombie_perk_bottle_sleight": + case "zombie_perk_bottle_sixth_sense": + case "zombie_perk_bottle_revive": + case "zombie_perk_bottle_oneinch": + case "zombie_perk_bottle_nuke": + case "zombie_perk_bottle_marathon": + case "zombie_perk_bottle_jugg": + case "zombie_perk_bottle_doubletap": + case "zombie_perk_bottle_deadshot": + case "zombie_perk_bottle_cherry": + case "zombie_perk_bottle_additionalprimaryweapon": + b_is_perk_bottle = 1; + break; + default: + b_is_perk_bottle = 0; + break; + } + + return b_is_perk_bottle; +} + +register_custom_spawner_entry( spot_noteworthy, func ) +{ + if ( !isdefined( level.custom_spawner_entry ) ) + level.custom_spawner_entry = []; + + level.custom_spawner_entry[spot_noteworthy] = func; +} + +get_player_weapon_limit( player ) +{ + if ( isdefined( level.get_player_weapon_limit ) ) + return [[ level.get_player_weapon_limit ]]( player ); + + weapon_limit = 2; + + if ( player hasperk( "specialty_additionalprimaryweapon" ) ) + weapon_limit = level.additionalprimaryweapon_limit; + + return weapon_limit; +} + +get_player_perk_purchase_limit() +{ + if ( isdefined( level.get_player_perk_purchase_limit ) ) + return self [[ level.get_player_perk_purchase_limit ]](); + + return level.perk_purchase_limit; +} diff --git a/ZM/Core/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc b/ZM/Core/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc new file mode 100644 index 0000000..eeb581c --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc @@ -0,0 +1,559 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_clone; + +#using_animtree("zombie_cymbal_monkey"); + +init() +{ + if ( !cymbal_monkey_exists() ) + return; +/# + level.zombiemode_devgui_cymbal_monkey_give = ::player_give_cymbal_monkey; +#/ + if ( isdefined( level.legacy_cymbal_monkey ) && level.legacy_cymbal_monkey ) + level.cymbal_monkey_model = "weapon_zombie_monkey_bomb"; + else + level.cymbal_monkey_model = "t6_wpn_zmb_monkey_bomb_world"; + + level._effect["monkey_glow"] = loadfx( "maps/zombie/fx_zombie_monkey_light" ); + level._effect["grenade_samantha_steal"] = loadfx( "maps/zombie/fx_zmb_blackhole_trap_end" ); + level.cymbal_monkeys = []; + scriptmodelsuseanimtree( #animtree ); +} + +player_give_cymbal_monkey() +{ + self giveweapon( "cymbal_monkey_zm" ); + self set_player_tactical_grenade( "cymbal_monkey_zm" ); + self thread player_handle_cymbal_monkey(); +} + +player_handle_cymbal_monkey() +{ + self notify( "starting_monkey_watch" ); + self endon( "disconnect" ); + self endon( "starting_monkey_watch" ); + attract_dist_diff = level.monkey_attract_dist_diff; + + if ( !isdefined( attract_dist_diff ) ) + attract_dist_diff = 45; + + num_attractors = level.num_monkey_attractors; + + if ( !isdefined( num_attractors ) ) + num_attractors = 96; + + max_attract_dist = level.monkey_attract_dist; + + if ( !isdefined( max_attract_dist ) ) + max_attract_dist = 1536; + + while ( true ) + { + grenade = get_thrown_monkey(); + self player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff ); + wait 0.05; + } +} + +watch_for_dud( model, actor ) +{ + self endon( "death" ); + + self waittill( "grenade_dud" ); + + model.dud = 1; + self playsound( "zmb_vox_monkey_scream" ); + self.monk_scream_vox = 1; + wait 3; + + if ( isdefined( model ) ) + model delete(); + + if ( isdefined( actor ) ) + actor delete(); + + if ( isdefined( self.damagearea ) ) + self.damagearea delete(); + + if ( isdefined( self ) ) + self delete(); +} + +watch_for_emp( model, actor ) +{ + self endon( "death" ); + + if ( !should_watch_for_emp() ) + return; + + while ( true ) + { + level waittill( "emp_detonate", origin, radius ); + + if ( distancesquared( origin, self.origin ) < radius * radius ) + break; + } + + self.stun_fx = 1; + + if ( isdefined( level._equipment_emp_destroy_fx ) ) + playfx( level._equipment_emp_destroy_fx, self.origin + vectorscale( ( 0, 0, 1 ), 5.0 ), ( 0, randomfloat( 360 ), 0 ) ); + + wait 0.15; + self.attract_to_origin = 0; + self deactivate_zombie_point_of_interest(); + model clearanim( %o_monkey_bomb, 0 ); + wait 1; + self detonate(); + wait 1; + + if ( isdefined( model ) ) + model delete(); + + if ( isdefined( actor ) ) + actor delete(); + + if ( isdefined( self.damagearea ) ) + self.damagearea delete(); + + if ( isdefined( self ) ) + self delete(); +} + +clone_player_angles( owner ) +{ + self endon( "death" ); + owner endon( "death" ); + + while ( isdefined( self ) ) + { + self.angles = owner.angles; + wait 0.05; + } +} + +show_briefly( showtime ) +{ + self endon( "show_owner" ); + + if ( isdefined( self.show_for_time ) ) + { + self.show_for_time = showtime; + return; + } + + self.show_for_time = showtime; + self setvisibletoall(); + + while ( self.show_for_time > 0 ) + { + self.show_for_time -= 0.05; + wait 0.05; + } + + self setvisibletoallexceptteam( level.zombie_team ); + self.show_for_time = undefined; +} + +show_owner_on_attack( owner ) +{ + owner endon( "hide_owner" ); + owner endon( "show_owner" ); + self endon( "explode" ); + self endon( "death" ); + self endon( "grenade_dud" ); + owner.show_for_time = undefined; + + for (;;) + { + owner waittill( "weapon_fired" ); + + owner thread show_briefly( 0.5 ); + } +} + +hide_owner( owner ) +{ + owner notify( "hide_owner" ); + owner endon( "hide_owner" ); + owner setperk( "specialty_immunemms" ); + owner.no_burning_sfx = 1; + owner notify( "stop_flame_sounds" ); + owner setvisibletoallexceptteam( level.zombie_team ); + owner.hide_owner = 1; + + if ( isdefined( level._effect["human_disappears"] ) ) + playfx( level._effect["human_disappears"], owner.origin ); + + self thread show_owner_on_attack( owner ); + evt = self waittill_any_return( "explode", "death", "grenade_dud" ); +/# + println( "ZMCLONE: Player visible again because of " + evt ); +#/ + owner notify( "show_owner" ); + owner unsetperk( "specialty_immunemms" ); + + if ( isdefined( level._effect["human_disappears"] ) ) + playfx( level._effect["human_disappears"], owner.origin ); + + owner.no_burning_sfx = undefined; + owner setvisibletoall(); + owner.hide_owner = undefined; + owner show(); +} + +proximity_detonate( owner ) +{ + wait 1.5; + + if ( !isdefined( self ) ) + return; + + detonateradius = 96; + explosionradius = detonateradius * 2; + damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 1.5 ); + damagearea setexcludeteamfortrigger( owner.team ); + damagearea enablelinkto(); + damagearea linkto( self ); + self.damagearea = damagearea; + + while ( isdefined( self ) ) + { + damagearea waittill( "trigger", ent ); + + if ( isdefined( owner ) && ent == owner ) + continue; + + if ( isdefined( ent.team ) && ent.team == owner.team ) + continue; + + self playsound( "wpn_claymore_alert" ); + dist = distance( self.origin, ent.origin ); + radiusdamage( self.origin + vectorscale( ( 0, 0, 1 ), 12.0 ), explosionradius, 1, 1, owner, "MOD_GRENADE_SPLASH", "cymbal_monkey_zm" ); + + if ( isdefined( owner ) ) + self detonate( owner ); + else + self detonate( undefined ); + + break; + } + + if ( isdefined( damagearea ) ) + damagearea delete(); +} + +player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff ) +{ + self endon( "disconnect" ); + self endon( "starting_monkey_watch" ); + + if ( isdefined( grenade ) ) + { + grenade endon( "death" ); + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + if ( isdefined( grenade.damagearea ) ) + grenade.damagearea delete(); + + grenade delete(); + return; + } + + grenade hide(); + model = spawn( "script_model", grenade.origin ); + model setmodel( level.cymbal_monkey_model ); + model useanimtree( #animtree ); + model linkto( grenade ); + model.angles = grenade.angles; + model thread monkey_cleanup( grenade ); + clone = undefined; + + if ( isdefined( level.cymbal_monkey_dual_view ) && level.cymbal_monkey_dual_view ) + { + model setvisibletoallexceptteam( level.zombie_team ); + clone = maps\mp\zombies\_zm_clone::spawn_player_clone( self, vectorscale( ( 0, 0, -1 ), 999.0 ), level.cymbal_monkey_clone_weapon, undefined ); + model.simulacrum = clone; + clone maps\mp\zombies\_zm_clone::clone_animate( "idle" ); + clone thread clone_player_angles( self ); + clone notsolid(); + clone ghost(); + } + + grenade thread watch_for_dud( model, clone ); + grenade thread watch_for_emp( model, clone ); + info = spawnstruct(); + info.sound_attractors = []; + grenade thread monitor_zombie_groans( info ); + + grenade waittill( "stationary" ); + + if ( isdefined( level.grenade_planted ) ) + self thread [[ level.grenade_planted ]]( grenade, model ); + + if ( isdefined( grenade ) ) + { + if ( isdefined( model ) ) + { + model setanim( %o_monkey_bomb ); + + if ( !( isdefined( grenade.backlinked ) && grenade.backlinked ) ) + { + model unlink(); + model.origin = grenade.origin; + model.angles = grenade.angles; + } + } + + if ( isdefined( clone ) ) + { + clone forceteleport( grenade.origin, grenade.angles ); + clone thread hide_owner( self ); + grenade thread proximity_detonate( self ); + clone show(); + clone setinvisibletoall(); + clone setvisibletoteam( level.zombie_team ); + } + + grenade resetmissiledetonationtime(); + playfxontag( level._effect["monkey_glow"], model, "origin_animate_jnt" ); + valid_poi = check_point_in_enabled_zone( grenade.origin, undefined, undefined ); + + if ( isdefined( level.check_valid_poi ) ) + valid_poi = grenade [[ level.check_valid_poi ]]( valid_poi ); + + if ( valid_poi ) + { + grenade create_zombie_point_of_interest( max_attract_dist, num_attractors, 10000 ); + grenade.attract_to_origin = 1; + grenade thread create_zombie_point_of_interest_attractor_positions( 4, attract_dist_diff ); + grenade thread wait_for_attractor_positions_complete(); + grenade thread do_monkey_sound( model, info ); + level.cymbal_monkeys[level.cymbal_monkeys.size] = grenade; + } + else + { + grenade.script_noteworthy = undefined; + level thread grenade_stolen_by_sam( grenade, model, clone ); + } + } + else + { + grenade.script_noteworthy = undefined; + level thread grenade_stolen_by_sam( grenade, model, clone ); + } + } +} + +grenade_stolen_by_sam( ent_grenade, ent_model, ent_actor ) +{ + if ( !isdefined( ent_model ) ) + return; + + direction = ent_model.origin; + direction = ( direction[1], direction[0], 0 ); + + if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 ) + direction = ( direction[0], direction[1] * -1, 0 ); + else if ( direction[0] < 0 ) + direction = ( direction[0] * -1, direction[1], 0 ); + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isalive( players[i] ) ) + players[i] playlocalsound( level.zmb_laugh_alias ); + } + + playfxontag( level._effect["grenade_samantha_steal"], ent_model, "tag_origin" ); + ent_model movez( 60, 1.0, 0.25, 0.25 ); + ent_model vibrate( direction, 1.5, 2.5, 1.0 ); + + ent_model waittill( "movedone" ); + + if ( isdefined( self.damagearea ) ) + self.damagearea delete(); + + ent_model delete(); + + if ( isdefined( ent_actor ) ) + ent_actor delete(); + + if ( isdefined( ent_grenade ) ) + { + if ( isdefined( ent_grenade.damagearea ) ) + ent_grenade.damagearea delete(); + + ent_grenade delete(); + } +} + +wait_for_attractor_positions_complete() +{ + self waittill( "attractor_positions_generated" ); + + self.attract_to_origin = 0; +} + +monkey_cleanup( parent ) +{ + while ( true ) + { + if ( !isdefined( parent ) ) + { + if ( isdefined( self ) && ( isdefined( self.dud ) && self.dud ) ) + wait 6; + + if ( isdefined( self.simulacrum ) ) + self.simulacrum delete(); + + self_delete(); + return; + } + + wait 0.05; + } +} + +do_monkey_sound( model, info ) +{ + self.monk_scream_vox = 0; + + if ( isdefined( level.grenade_safe_to_bounce ) ) + { + if ( ![[ level.grenade_safe_to_bounce ]]( self.owner, "cymbal_monkey_zm" ) ) + { + self playsound( "zmb_vox_monkey_scream" ); + self.monk_scream_vox = 1; + } + } + + if ( !self.monk_scream_vox && level.music_override == 0 ) + { + if ( isdefined( level.cymbal_monkey_dual_view ) && level.cymbal_monkey_dual_view ) + self playsoundtoteam( "zmb_monkey_song", "allies" ); + else + self playsound( "zmb_monkey_song" ); + } + + if ( !self.monk_scream_vox ) + self thread play_delayed_explode_vox(); + + self waittill( "explode", position ); + + level notify( "grenade_exploded", position, 100, 5000, 450 ); + monkey_index = -1; + + for ( i = 0; i < level.cymbal_monkeys.size; i++ ) + { + if ( !isdefined( level.cymbal_monkeys[i] ) ) + { + monkey_index = i; + break; + } + } + + if ( monkey_index >= 0 ) + arrayremoveindex( level.cymbal_monkeys, monkey_index ); + + if ( isdefined( model ) ) + model clearanim( %o_monkey_bomb, 0.2 ); + + for ( i = 0; i < info.sound_attractors.size; i++ ) + { + if ( isdefined( info.sound_attractors[i] ) ) + info.sound_attractors[i] notify( "monkey_blown_up" ); + } +} + +play_delayed_explode_vox() +{ + wait 6.5; + + if ( isdefined( self ) ) + self playsound( "zmb_vox_monkey_explode" ); +} + +get_thrown_monkey() +{ + self endon( "disconnect" ); + self endon( "starting_monkey_watch" ); + + while ( true ) + { + self waittill( "grenade_fire", grenade, weapname ); + + if ( weapname == "cymbal_monkey_zm" ) + { + grenade.use_grenade_special_long_bookmark = 1; + grenade.grenade_multiattack_bookmark_count = 1; + return grenade; + } + + wait 0.05; + } +} + +monitor_zombie_groans( info ) +{ + self endon( "explode" ); + + while ( true ) + { + if ( !isdefined( self ) ) + return; + + if ( !isdefined( self.attractor_array ) ) + { + wait 0.05; + continue; + } + + for ( i = 0; i < self.attractor_array.size; i++ ) + { + if ( array_check_for_dupes( info.sound_attractors, self.attractor_array[i] ) ) + { + if ( isdefined( self.origin ) && isdefined( self.attractor_array[i].origin ) ) + { + if ( distancesquared( self.origin, self.attractor_array[i].origin ) < 250000 ) + { + info.sound_attractors[info.sound_attractors.size] = self.attractor_array[i]; + self.attractor_array[i] thread play_zombie_groans(); + } + } + } + } + + wait 0.05; + } +} + +play_zombie_groans() +{ + self endon( "death" ); + self endon( "monkey_blown_up" ); + + while ( true ) + { + if ( isdefined( self ) ) + { + self playsound( "zmb_vox_zombie_groan" ); + wait( randomfloatrange( 2, 3 ) ); + } + else + return; + } +} + +cymbal_monkey_exists() +{ + return isdefined( level.zombie_weapons["cymbal_monkey_zm"] ); +} diff --git a/ZM/Core/maps/mp/zombies/_zm_weap_thundergun.gsc b/ZM/Core/maps/mp/zombies/_zm_weap_thundergun.gsc new file mode 100644 index 0000000..de25942 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_weap_thundergun.gsc @@ -0,0 +1,379 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_score; +#include maps\mp\animscripts\zm_death; +#include maps\mp\zombies\_zm_audio; + +init() +{ + if ( !maps\mp\zombies\_zm_weapons::is_weapon_included( "thundergun_zm" ) ) + return; + + level._effect["thundergun_viewmodel_power_cell1"] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view1" ); + level._effect["thundergun_viewmodel_power_cell2"] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view2" ); + level._effect["thundergun_viewmodel_power_cell3"] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view3" ); + level._effect["thundergun_viewmodel_steam"] = loadfx( "weapon/thunder_gun/fx_thundergun_steam_view" ); + level._effect["thundergun_viewmodel_power_cell1_upgraded"] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view1" ); + level._effect["thundergun_viewmodel_power_cell2_upgraded"] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view2" ); + level._effect["thundergun_viewmodel_power_cell3_upgraded"] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view3" ); + level._effect["thundergun_viewmodel_steam_upgraded"] = loadfx( "weapon/thunder_gun/fx_thundergun_steam_view" ); + level._effect["thundergun_knockdown_ground"] = loadfx( "weapon/thunder_gun/fx_thundergun_knockback_ground" ); + level._effect["thundergun_smoke_cloud"] = loadfx( "weapon/thunder_gun/fx_thundergun_smoke_cloud" ); + set_zombie_var( "thundergun_cylinder_radius", 180 ); + set_zombie_var( "thundergun_fling_range", 480 ); + set_zombie_var( "thundergun_gib_range", 900 ); + set_zombie_var( "thundergun_gib_damage", 75 ); + set_zombie_var( "thundergun_knockdown_range", 1200 ); + set_zombie_var( "thundergun_knockdown_damage", 15 ); + level.thundergun_gib_refs = []; + level.thundergun_gib_refs[level.thundergun_gib_refs.size] = "guts"; + level.thundergun_gib_refs[level.thundergun_gib_refs.size] = "right_arm"; + level.thundergun_gib_refs[level.thundergun_gib_refs.size] = "left_arm"; + level.basic_zombie_thundergun_knockdown = ::zombie_knockdown; +/# + level thread thundergun_devgui_dvar_think(); +#/ + onplayerconnect_callback( ::thundergun_on_player_connect ); +} + +thundergun_devgui_dvar_think() +{ +/# + if ( !maps\mp\zombies\_zm_weapons::is_weapon_included( "thundergun_zm" ) ) + return; + + setdvar( "scr_thundergun_cylinder_radius", level.zombie_vars["thundergun_cylinder_radius"] ); + setdvar( "scr_thundergun_fling_range", level.zombie_vars["thundergun_fling_range"] ); + setdvar( "scr_thundergun_gib_range", level.zombie_vars["thundergun_gib_range"] ); + setdvar( "scr_thundergun_gib_damage", level.zombie_vars["thundergun_gib_damage"] ); + setdvar( "scr_thundergun_knockdown_range", level.zombie_vars["thundergun_knockdown_range"] ); + setdvar( "scr_thundergun_knockdown_damage", level.zombie_vars["thundergun_knockdown_damage"] ); + + for (;;) + { + level.zombie_vars["thundergun_cylinder_radius"] = getdvarint( _hash_DEA6F730 ); + level.zombie_vars["thundergun_fling_range"] = getdvarint( _hash_16044A2B ); + level.zombie_vars["thundergun_gib_range"] = getdvarint( _hash_F5270E6D ); + level.zombie_vars["thundergun_gib_damage"] = getdvarint( _hash_795FFDFF ); + level.zombie_vars["thundergun_knockdown_range"] = getdvarint( _hash_2721E469 ); + level.zombie_vars["thundergun_knockdown_damage"] = getdvarint( _hash_EAB5937B ); + wait 0.5; + } +#/ +} + +thundergun_on_player_connect() +{ + self thread wait_for_thundergun_fired(); +} + +wait_for_thundergun_fired() +{ + self endon( "disconnect" ); + + self waittill( "spawned_player" ); + + for (;;) + { + self waittill( "weapon_fired" ); + + currentweapon = self getcurrentweapon(); + + if ( currentweapon == "thundergun_zm" || currentweapon == "thundergun_upgraded_zm" ) + { + self thread thundergun_fired(); + view_pos = self gettagorigin( "tag_flash" ) - self getplayerviewheight(); + view_angles = self gettagangles( "tag_flash" ); + playfx( level._effect["thundergun_smoke_cloud"], view_pos, anglestoforward( view_angles ), anglestoup( view_angles ) ); + } + } +} + +thundergun_network_choke() +{ + level.thundergun_network_choke_count++; + + if ( !( level.thundergun_network_choke_count % 10 ) ) + { + wait_network_frame(); + wait_network_frame(); + wait_network_frame(); + } +} + +thundergun_fired() +{ + physicsexplosioncylinder( self.origin, 600, 240, 1 ); + + if ( !isdefined( level.thundergun_knockdown_enemies ) ) + { + level.thundergun_knockdown_enemies = []; + level.thundergun_knockdown_gib = []; + level.thundergun_fling_enemies = []; + level.thundergun_fling_vecs = []; + } + + self thundergun_get_enemies_in_range(); + level.thundergun_network_choke_count = 0; + + for ( i = 0; i < level.thundergun_fling_enemies.size; i++ ) + { + thundergun_network_choke(); + level.thundergun_fling_enemies[i] thread thundergun_fling_zombie( self, level.thundergun_fling_vecs[i], i ); + } + + for ( i = 0; i < level.thundergun_knockdown_enemies.size; i++ ) + { + thundergun_network_choke(); + level.thundergun_knockdown_enemies[i] thread thundergun_knockdown_zombie( self, level.thundergun_knockdown_gib[i] ); + } + + level.thundergun_knockdown_enemies = []; + level.thundergun_knockdown_gib = []; + level.thundergun_fling_enemies = []; + level.thundergun_fling_vecs = []; +} + +thundergun_get_enemies_in_range() +{ + view_pos = self getweaponmuzzlepoint(); + zombies = get_array_of_closest( view_pos, get_round_enemy_array(), undefined, undefined, level.zombie_vars["thundergun_knockdown_range"] ); + + if ( !isdefined( zombies ) ) + return; + + knockdown_range_squared = level.zombie_vars["thundergun_knockdown_range"] * level.zombie_vars["thundergun_knockdown_range"]; + gib_range_squared = level.zombie_vars["thundergun_gib_range"] * level.zombie_vars["thundergun_gib_range"]; + fling_range_squared = level.zombie_vars["thundergun_fling_range"] * level.zombie_vars["thundergun_fling_range"]; + cylinder_radius_squared = level.zombie_vars["thundergun_cylinder_radius"] * level.zombie_vars["thundergun_cylinder_radius"]; + forward_view_angles = self getweaponforwarddir(); + end_pos = view_pos + vectorscale( forward_view_angles, level.zombie_vars["thundergun_knockdown_range"] ); +/# + if ( 2 == getdvarint( _hash_AAC84AD6 ) ) + { + near_circle_pos = view_pos + vectorscale( forward_view_angles, 2 ); + circle( near_circle_pos, level.zombie_vars["thundergun_cylinder_radius"], ( 1, 0, 0 ), 0, 0, 100 ); + line( near_circle_pos, end_pos, ( 0, 0, 1 ), 1, 0, 100 ); + circle( end_pos, level.zombie_vars["thundergun_cylinder_radius"], ( 1, 0, 0 ), 0, 0, 100 ); + } +#/ + for ( i = 0; i < zombies.size; i++ ) + { + if ( !isdefined( zombies[i] ) || !isalive( zombies[i] ) ) + continue; + + test_origin = zombies[i] getcentroid(); + test_range_squared = distancesquared( view_pos, test_origin ); + + if ( test_range_squared > knockdown_range_squared ) + { + zombies[i] thundergun_debug_print( "range", ( 1, 0, 0 ) ); + return; + } + + normal = vectornormalize( test_origin - view_pos ); + dot = vectordot( forward_view_angles, normal ); + + if ( 0 > dot ) + { + zombies[i] thundergun_debug_print( "dot", ( 1, 0, 0 ) ); + continue; + } + + radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin ); + + if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared ) + { + zombies[i] thundergun_debug_print( "cylinder", ( 1, 0, 0 ) ); + continue; + } + + if ( 0 == zombies[i] damageconetrace( view_pos, self ) ) + { + zombies[i] thundergun_debug_print( "cone", ( 1, 0, 0 ) ); + continue; + } + + if ( test_range_squared < fling_range_squared ) + { + level.thundergun_fling_enemies[level.thundergun_fling_enemies.size] = zombies[i]; + dist_mult = ( fling_range_squared - test_range_squared ) / fling_range_squared; + fling_vec = vectornormalize( test_origin - view_pos ); + + if ( 5000 < test_range_squared ) + fling_vec += vectornormalize( test_origin - radial_origin ); + + fling_vec = ( fling_vec[0], fling_vec[1], abs( fling_vec[2] ) ); + fling_vec = vectorscale( fling_vec, 100 + 100 * dist_mult ); + level.thundergun_fling_vecs[level.thundergun_fling_vecs.size] = fling_vec; + zombies[i] thread setup_thundergun_vox( self, 1, 0, 0 ); + continue; + } + + if ( test_range_squared < gib_range_squared ) + { + level.thundergun_knockdown_enemies[level.thundergun_knockdown_enemies.size] = zombies[i]; + level.thundergun_knockdown_gib[level.thundergun_knockdown_gib.size] = 1; + zombies[i] thread setup_thundergun_vox( self, 0, 1, 0 ); + continue; + } + + level.thundergun_knockdown_enemies[level.thundergun_knockdown_enemies.size] = zombies[i]; + level.thundergun_knockdown_gib[level.thundergun_knockdown_gib.size] = 0; + zombies[i] thread setup_thundergun_vox( self, 0, 0, 1 ); + } +} + +thundergun_debug_print( msg, color ) +{ +/# + if ( !getdvarint( _hash_AAC84AD6 ) ) + return; + + if ( !isdefined( color ) ) + color = ( 1, 1, 1 ); + + print3d( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), msg, color, 1, 1, 40 ); +#/ +} + +thundergun_fling_zombie( player, fling_vec, index ) +{ + if ( !isdefined( self ) || !isalive( self ) ) + return; + + if ( isdefined( self.thundergun_fling_func ) ) + { + self [[ self.thundergun_fling_func ]]( player ); + return; + } + + self dodamage( self.health + 666, player.origin, player ); + + if ( self.health <= 0 ) + { + points = 10; + + if ( !index ) + points = maps\mp\zombies\_zm_score::get_zombie_death_player_points(); + else if ( 1 == index ) + points = 30; + + player maps\mp\zombies\_zm_score::player_add_points( "thundergun_fling", points ); + self startragdoll(); + self launchragdoll( fling_vec ); + self.thundergun_death = 1; + } +} + +zombie_knockdown( player, gib ) +{ + if ( gib && !self.gibbed ) + { + self.a.gib_ref = random( level.thundergun_gib_refs ); + self thread maps\mp\animscripts\zm_death::do_gib(); + } + + damage = level.zombie_vars["thundergun_knockdown_damage"]; + + if ( isdefined( level.override_thundergun_damage_func ) ) + self [[ level.override_thundergun_damage_func ]]( player, gib ); + else + { + self.thundergun_handle_pain_notetracks = ::handle_thundergun_pain_notetracks; + self dodamage( damage, player.origin, player ); + } +} + +thundergun_knockdown_zombie( player, gib ) +{ + self endon( "death" ); + playsoundatposition( "vox_thundergun_forcehit", self.origin ); + playsoundatposition( "wpn_thundergun_proj_impact", self.origin ); + + if ( !isdefined( self ) || !isalive( self ) ) + return; + + if ( isdefined( self.thundergun_knockdown_func ) ) + self [[ self.thundergun_knockdown_func ]]( player, gib ); + else + self dodamage( level.zombie_vars["thundergun_knockdown_damage"], player.origin, player ); + + if ( gib ) + { + self.a.gib_ref = random( level.thundergun_gib_refs ); + self thread maps\mp\animscripts\zm_death::do_gib(); + } + + self.thundergun_handle_pain_notetracks = ::handle_thundergun_pain_notetracks; + self dodamage( level.zombie_vars["thundergun_knockdown_damage"], player.origin, player ); + self playsound( "fly_thundergun_forcehit" ); +} + +handle_thundergun_pain_notetracks( note ) +{ + if ( note == "zombie_knockdown_ground_impact" ) + { + playfx( level._effect["thundergun_knockdown_ground"], self.origin, anglestoforward( self.angles ), anglestoup( self.angles ) ); + self playsound( "fly_thundergun_forcehit" ); + } +} + +is_thundergun_damage() +{ + return isdefined( self.damageweapon ) && ( self.damageweapon == "thundergun_zm" || self.damageweapon == "thundergun_upgraded_zm" ) && ( self.damagemod != "MOD_GRENADE" && self.damagemod != "MOD_GRENADE_SPLASH" ); +} + +enemy_killed_by_thundergun() +{ + return isdefined( self.thundergun_death ) && self.thundergun_death == 1; +} + +thundergun_sound_thread() +{ + self endon( "disconnect" ); + + self waittill( "spawned_player" ); + + for (;;) + { + result = self waittill_any_return( "grenade_fire", "death", "player_downed", "weapon_change", "grenade_pullback" ); + + if ( !isdefined( result ) ) + continue; + + if ( ( result == "weapon_change" || result == "grenade_fire" ) && self getcurrentweapon() == "thundergun_zm" ) + { + self playloopsound( "tesla_idle", 0.25 ); + continue; + } + + self notify( "weap_away" ); + self stoploopsound( 0.25 ); + } +} + +setup_thundergun_vox( player, fling, gib, knockdown ) +{ + if ( !isdefined( self ) || !isalive( self ) ) + return; + + if ( !fling && ( gib || knockdown ) ) + { + if ( 25 > randomintrange( 1, 100 ) ) + { + + } + } + + if ( fling ) + { + if ( 30 > randomintrange( 1, 100 ) ) + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "thundergun" ); + } +} diff --git a/ZM/Core/maps/mp/zombies/_zm_weapons.gsc b/ZM/Core/maps/mp/zombies/_zm_weapons.gsc new file mode 100644 index 0000000..7ba8a05 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_weapons.gsc @@ -0,0 +1,2732 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\gametypes_zm\_weapons; +#include maps\mp\zombies\_zm_weap_claymore; +#include maps\mp\zombies\_zm_weap_ballistic_knife; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_melee_weapon; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_weap_cymbal_monkey; + +init() +{ +/# + println( "ZM >> init (_zm_weapons.gsc)" ); +#/ + init_weapons(); + init_weapon_upgrade(); + init_weapon_toggle(); + precacheshader( "minimap_icon_mystery_box" ); + precacheshader( "specialty_instakill_zombies" ); + precacheshader( "specialty_firesale_zombies" ); + precacheitem( "zombie_fists_zm" ); + level._weaponobjects_on_player_connect_override = ::weaponobjects_on_player_connect_override; + level._zombiemode_check_firesale_loc_valid_func = ::default_check_firesale_loc_valid_func; + level.missileentities = []; + setupretrievablehintstrings(); + level thread onplayerconnect(); +} + +setupretrievablehintstrings() +{ + maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "claymore", &"ZOMBIE_CLAYMORE_PICKUP" ); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread onplayerspawned(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread watchforgrenadeduds(); + self thread watchforgrenadelauncherduds(); + self.staticweaponsstarttime = gettime(); + } +} + +watchforgrenadeduds() +{ + self endon( "spawned_player" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "grenade_fire", grenade, weapname ); + + if ( !is_equipment( weapname ) && weapname != "claymore_zm" ) + { + grenade thread checkgrenadefordud( weapname, 1, self ); + grenade thread watchforscriptexplosion( weapname, 1, self ); + } + } +} + +watchforgrenadelauncherduds() +{ + self endon( "spawned_player" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "grenade_launcher_fire", grenade, weapname ); + + grenade thread checkgrenadefordud( weapname, 0, self ); + grenade thread watchforscriptexplosion( weapname, 0, self ); + } +} + +grenade_safe_to_throw( player, weapname ) +{ + if ( isdefined( level.grenade_safe_to_throw ) ) + return self [[ level.grenade_safe_to_throw ]]( player, weapname ); + + return 1; +} + +grenade_safe_to_bounce( player, weapname ) +{ + if ( isdefined( level.grenade_safe_to_bounce ) ) + return self [[ level.grenade_safe_to_bounce ]]( player, weapname ); + + return 1; +} + +makegrenadedudanddestroy() +{ + self endon( "death" ); + self notify( "grenade_dud" ); + self makegrenadedud(); + wait 3; + + if ( isdefined( self ) ) + self delete(); +} + +checkgrenadefordud( weapname, isthrowngrenade, player ) +{ + self endon( "death" ); + player endon( "zombify" ); + + if ( !self grenade_safe_to_throw( player, weapname ) ) + { + self thread makegrenadedudanddestroy(); + return; + } + + for (;;) + { + self waittill_any_timeout( 0.25, "grenade_bounce", "stationary" ); + + if ( !self grenade_safe_to_bounce( player, weapname ) ) + { + self thread makegrenadedudanddestroy(); + return; + } + } +} + +wait_explode() +{ + self endon( "grenade_dud" ); + self endon( "done" ); + + self waittill( "explode", position ); + + level.explode_position = position; + level.explode_position_valid = 1; + self notify( "done" ); +} + +wait_timeout( time ) +{ + self endon( "grenade_dud" ); + self endon( "done" ); + wait( time ); + self notify( "done" ); +} + +wait_for_explosion( time ) +{ + level.explode_position = ( 0, 0, 0 ); + level.explode_position_valid = 0; + self thread wait_explode(); + self thread wait_timeout( time ); + + self waittill( "done" ); + + self notify( "death_or_explode", level.explode_position_valid, level.explode_position ); +} + +watchforscriptexplosion( weapname, isthrowngrenade, player ) +{ + self endon( "grenade_dud" ); + + if ( is_lethal_grenade( weapname ) || is_grenade_launcher( weapname ) ) + { + self thread wait_for_explosion( 20 ); + + self waittill( "death_or_explode", exploded, position ); + + if ( exploded ) + level notify( "grenade_exploded", position, 256, 300, 75 ); + } +} + +get_nonalternate_weapon( altweapon ) +{ + if ( is_alt_weapon( altweapon ) ) + { + alt = weaponaltweaponname( altweapon ); + + if ( alt == "none" ) + { + primaryweapons = self getweaponslistprimaries(); + alt = primaryweapons[0]; + + foreach ( weapon in primaryweapons ) + { + if ( weaponaltweaponname( weapon ) == altweapon ) + { + alt = weapon; + break; + } + } + } + + return alt; + } + + return altweapon; +} + +switch_from_alt_weapon( current_weapon ) +{ + if ( is_alt_weapon( current_weapon ) ) + { + alt = weaponaltweaponname( current_weapon ); + + if ( alt == "none" ) + { + primaryweapons = self getweaponslistprimaries(); + alt = primaryweapons[0]; + + foreach ( weapon in primaryweapons ) + { + if ( weaponaltweaponname( weapon ) == current_weapon ) + { + alt = weapon; + break; + } + } + } + + self switchtoweaponimmediate( alt ); + self waittill_notify_or_timeout( "weapon_change_complete", 1 ); + return alt; + } + + return current_weapon; +} + +give_fallback_weapon() +{ + self giveweapon( "zombie_fists_zm" ); + self switchtoweapon( "zombie_fists_zm" ); +} + +take_fallback_weapon() +{ + if ( self hasweapon( "zombie_fists_zm" ) ) + self takeweapon( "zombie_fists_zm" ); +} + +switch_back_primary_weapon( oldprimary ) +{ + if ( isdefined( self.laststand ) && self.laststand ) + return; + + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( oldprimary ) && isinarray( primaryweapons, oldprimary ) ) + self switchtoweapon( oldprimary ); + else if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); +} + +add_retrievable_knife_init_name( name ) +{ + if ( !isdefined( level.retrievable_knife_init_names ) ) + level.retrievable_knife_init_names = []; + + level.retrievable_knife_init_names[level.retrievable_knife_init_names.size] = name; +} + +watchweaponusagezm() +{ + self endon( "death" ); + self endon( "disconnect" ); + level endon( "game_ended" ); + + for (;;) + { + self waittill( "weapon_fired", curweapon ); + + self.lastfiretime = gettime(); + self.hasdonecombat = 1; + + if ( isdefined( self.hitsthismag[curweapon] ) ) + self thread updatemagshots( curweapon ); + + switch ( weaponclass( curweapon ) ) + { + case "rifle": + if ( curweapon == "crossbow_explosive_mp" ) + { + level.globalcrossbowfired++; + self addweaponstat( curweapon, "shots", 1 ); + self thread begingrenadetracking(); + break; + } + case "spread": + case "smg": + case "pistolspread": + case "pistol spread": + case "pistol": + case "mg": + self trackweaponfire( curweapon ); + level.globalshotsfired++; + break; + case "rocketlauncher": + case "grenade": + if ( is_alt_weapon( curweapon ) ) + curweapon = weaponaltweaponname( curweapon ); + + self addweaponstat( curweapon, "shots", 1 ); + break; + default: + break; + } + + switch ( curweapon ) + { + case "mp40_blinged_mp": + case "minigun_mp": + case "m32_mp": + case "m220_tow_mp": + case "m202_flash_mp": + self.usedkillstreakweapon[curweapon] = 1; + break; + default: + break; + } + } +} + +trackweaponzm() +{ + self.currentweapon = self getcurrentweapon(); + self.currenttime = gettime(); + spawnid = getplayerspawnid( self ); + + while ( true ) + { + event = self waittill_any_return( "weapon_change", "death", "disconnect", "bled_out" ); + newtime = gettime(); + + if ( event == "weapon_change" ) + { + newweapon = self getcurrentweapon(); + + if ( newweapon != "none" && newweapon != self.currentweapon ) + { + updatelastheldweapontimingszm( newtime ); + self.currentweapon = newweapon; + self.currenttime = newtime; + } + } + else + { + if ( event != "disconnect" ) + updateweapontimingszm( newtime ); + + return; + } + } +} + +updatelastheldweapontimingszm( newtime ) +{ + if ( isdefined( self.currentweapon ) && isdefined( self.currenttime ) ) + { + curweapon = self.currentweapon; + totaltime = int( ( newtime - self.currenttime ) / 1000 ); + + if ( totaltime > 0 ) + { + if ( is_alt_weapon( curweapon ) ) + curweapon = weaponaltweaponname( curweapon ); + + self addweaponstat( curweapon, "timeUsed", totaltime ); + } + } +} + +updateweapontimingszm( newtime ) +{ + if ( self is_bot() ) + return; + + updatelastheldweapontimingszm( newtime ); + + if ( !isdefined( self.staticweaponsstarttime ) ) + return; + + totaltime = int( ( newtime - self.staticweaponsstarttime ) / 1000 ); + + if ( totaltime < 0 ) + return; + + self.staticweaponsstarttime = newtime; +} + +watchweaponchangezm() +{ + self endon( "death" ); + self endon( "disconnect" ); + self.lastdroppableweapon = self getcurrentweapon(); + self.hitsthismag = []; + weapon = self getcurrentweapon(); + + if ( isdefined( weapon ) && weapon != "none" && !isdefined( self.hitsthismag[weapon] ) ) + self.hitsthismag[weapon] = weaponclipsize( weapon ); + + while ( true ) + { + previous_weapon = self getcurrentweapon(); + + self waittill( "weapon_change", newweapon ); + + if ( maydropweapon( newweapon ) ) + self.lastdroppableweapon = newweapon; + + if ( newweapon != "none" ) + { + if ( !isdefined( self.hitsthismag[newweapon] ) ) + self.hitsthismag[newweapon] = weaponclipsize( newweapon ); + } + } +} + +weaponobjects_on_player_connect_override_internal() +{ + self maps\mp\gametypes_zm\_weaponobjects::createbasewatchers(); + self createclaymorewatcher_zm(); + + for ( i = 0; i < level.retrievable_knife_init_names.size; i++ ) + self createballisticknifewatcher_zm( level.retrievable_knife_init_names[i], level.retrievable_knife_init_names[i] + "_zm" ); + + self maps\mp\gametypes_zm\_weaponobjects::setupretrievablewatcher(); + + if ( !isdefined( self.weaponobjectwatcherarray ) ) + self.weaponobjectwatcherarray = []; + + self thread maps\mp\gametypes_zm\_weaponobjects::watchweaponobjectspawn(); + self thread maps\mp\gametypes_zm\_weaponobjects::watchweaponprojectileobjectspawn(); + self thread maps\mp\gametypes_zm\_weaponobjects::deleteweaponobjectson(); + self.concussionendtime = 0; + self.hasdonecombat = 0; + self.lastfiretime = 0; + self thread watchweaponusagezm(); + self thread maps\mp\gametypes_zm\_weapons::watchgrenadeusage(); + self thread maps\mp\gametypes_zm\_weapons::watchmissileusage(); + self thread watchweaponchangezm(); + self thread maps\mp\gametypes_zm\_weapons::watchturretuse(); + self thread trackweaponzm(); + self notify( "weapon_watchers_created" ); +} + +weaponobjects_on_player_connect_override() +{ + add_retrievable_knife_init_name( "knife_ballistic" ); + add_retrievable_knife_init_name( "knife_ballistic_upgraded" ); + onplayerconnect_callback( ::weaponobjects_on_player_connect_override_internal ); +} + +createclaymorewatcher_zm() +{ + watcher = self maps\mp\gametypes_zm\_weaponobjects::createuseweaponobjectwatcher( "claymore", "claymore_zm", self.team ); + watcher.onspawnretrievetriggers = maps\mp\zombies\_zm_weap_claymore::on_spawn_retrieve_trigger; + watcher.adjusttriggerorigin = maps\mp\zombies\_zm_weap_claymore::adjust_trigger_origin; + watcher.pickup = level.pickup_claymores; + watcher.pickup_trigger_listener = level.pickup_claymores_trigger_listener; + watcher.skip_weapon_object_damage = 1; + watcher.headicon = 0; + watcher.watchforfire = 1; + watcher.detonate = ::claymoredetonate; + watcher.ondamage = level.claymores_on_damage; +} + +createballisticknifewatcher_zm( name, weapon ) +{ + watcher = self maps\mp\gametypes_zm\_weaponobjects::createuseweaponobjectwatcher( name, weapon, self.team ); + watcher.onspawn = maps\mp\zombies\_zm_weap_ballistic_knife::on_spawn; + watcher.onspawnretrievetriggers = maps\mp\zombies\_zm_weap_ballistic_knife::on_spawn_retrieve_trigger; + watcher.storedifferentobject = 1; + watcher.headicon = 0; +} + +isempweapon( weaponname ) +{ + if ( isdefined( weaponname ) && ( weaponname == "emp_mp" || weaponname == "emp_grenade_mp" || weaponname == "emp_grenade_zm" ) ) + return true; + + return false; +} + +claymoredetonate( attacker, weaponname ) +{ + from_emp = isempweapon( weaponname ); + + if ( from_emp ) + { + self delete(); + return; + } + + if ( isdefined( attacker ) ) + self detonate( attacker ); + else if ( isdefined( self.owner ) && isplayer( self.owner ) ) + self detonate( self.owner ); + else + self detonate(); +} + +default_check_firesale_loc_valid_func() +{ + return 1; +} + +add_zombie_weapon( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp, ammo_cost, create_vox ) +{ + if ( isdefined( level.zombie_include_weapons ) && !isdefined( level.zombie_include_weapons[weapon_name] ) ) + return; + + table = "mp/zombiemode.csv"; + table_cost = tablelookup( table, 0, weapon_name, 1 ); + table_ammo_cost = tablelookup( table, 0, weapon_name, 2 ); + + if ( isdefined( table_cost ) && table_cost != "" ) + cost = round_up_to_ten( int( table_cost ) ); + + if ( isdefined( table_ammo_cost ) && table_ammo_cost != "" ) + ammo_cost = round_up_to_ten( int( table_ammo_cost ) ); + + precachestring( hint ); + struct = spawnstruct(); + + if ( !isdefined( level.zombie_weapons ) ) + level.zombie_weapons = []; + + if ( !isdefined( level.zombie_weapons_upgraded ) ) + level.zombie_weapons_upgraded = []; + + if ( isdefined( upgrade_name ) ) + level.zombie_weapons_upgraded[upgrade_name] = weapon_name; + + struct.weapon_name = weapon_name; + struct.upgrade_name = upgrade_name; + struct.weapon_classname = "weapon_" + weapon_name; + struct.hint = hint; + struct.cost = cost; + struct.vox = weaponvo; + struct.vox_response = weaponvoresp; +/# + println( "ZM >> Looking for weapon - " + weapon_name ); +#/ + struct.is_in_box = level.zombie_include_weapons[weapon_name]; + + if ( !isdefined( ammo_cost ) ) + ammo_cost = round_up_to_ten( int( cost * 0.5 ) ); + + struct.ammo_cost = ammo_cost; + level.zombie_weapons[weapon_name] = struct; + + if ( isdefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch && isdefined( upgrade_name ) ) + add_attachments( weapon_name, upgrade_name ); + + if ( isdefined( create_vox ) ) + level.vox maps\mp\zombies\_zm_audio::zmbvoxadd( "player", "weapon_pickup", weapon_name, weaponvo, undefined ); +/# + if ( isdefined( level.devgui_add_weapon ) ) + [[ level.devgui_add_weapon ]]( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp, ammo_cost ); +#/ +} + +add_attachments( weapon_name, upgrade_name ) +{ + table = "zm/pap_attach.csv"; + + if ( isdefined( level.weapon_attachment_table ) ) + table = level.weapon_attachment_table; + + row = tablelookuprownum( table, 0, upgrade_name ); + + if ( row > -1 ) + { + level.zombie_weapons[weapon_name].default_attachment = tablelookup( table, 0, upgrade_name, 1 ); + level.zombie_weapons[weapon_name].addon_attachments = []; + index = 2; + + for ( next_addon = tablelookup( table, 0, upgrade_name, index ); isdefined( next_addon ) && next_addon.size > 0; next_addon = tablelookup( table, 0, upgrade_name, index ) ) + { + level.zombie_weapons[weapon_name].addon_attachments[level.zombie_weapons[weapon_name].addon_attachments.size] = next_addon; + index++; + } + } +} + +default_weighting_func() +{ + return 1; +} + +default_tesla_weighting_func() +{ + num_to_add = 1; + + if ( isdefined( level.pulls_since_last_tesla_gun ) ) + { + if ( isdefined( level.player_drops_tesla_gun ) && level.player_drops_tesla_gun == 1 ) + num_to_add += int( 0.2 * level.zombie_include_weapons.size ); + + if ( !isdefined( level.player_seen_tesla_gun ) || level.player_seen_tesla_gun == 0 ) + { + if ( level.round_number > 10 ) + num_to_add += int( 0.2 * level.zombie_include_weapons.size ); + else if ( level.round_number > 5 ) + num_to_add += int( 0.15 * level.zombie_include_weapons.size ); + } + } + + return num_to_add; +} + +default_1st_move_weighting_func() +{ + if ( level.chest_moves > 0 ) + { + num_to_add = 1; + return num_to_add; + } + else + return 0; +} + +default_upgrade_weapon_weighting_func() +{ + if ( level.chest_moves > 1 ) + return true; + else + return false; +} + +default_cymbal_monkey_weighting_func() +{ + players = get_players(); + count = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] has_weapon_or_upgrade( "cymbal_monkey_zm" ) ) + count++; + } + + if ( count > 0 ) + return 1; + else if ( level.round_number < 10 ) + return 3; + else + return 5; +} + +is_weapon_included( weapon_name ) +{ + if ( !isdefined( level.zombie_weapons ) ) + return 0; + + return isdefined( level.zombie_weapons[weapon_name] ); +} + +is_weapon_or_base_included( weapon_name ) +{ + if ( !isdefined( level.zombie_weapons ) ) + return false; + + if ( isdefined( level.zombie_weapons[weapon_name] ) ) + return true; + + base = get_base_weapon_name( weapon_name, 1 ); + + if ( isdefined( level.zombie_weapons[base] ) ) + return true; + + return false; +} + +include_zombie_weapon( weapon_name, in_box, collector, weighting_func ) +{ + if ( !isdefined( level.zombie_include_weapons ) ) + level.zombie_include_weapons = []; + + if ( !isdefined( in_box ) ) + in_box = 1; +/# + println( "ZM >> Including weapon - " + weapon_name ); +#/ + level.zombie_include_weapons[weapon_name] = in_box; + precacheitem( weapon_name ); + + if ( !isdefined( weighting_func ) ) + level.weapon_weighting_funcs[weapon_name] = ::default_weighting_func; + else + level.weapon_weighting_funcs[weapon_name] = weighting_func; +} + +init_weapons() +{ + if ( isdefined( level._zombie_custom_add_weapons ) ) + [[ level._zombie_custom_add_weapons ]](); + + precachemodel( "zombie_teddybear" ); +} + +add_limited_weapon( weapon_name, amount ) +{ + if ( !isdefined( level.limited_weapons ) ) + level.limited_weapons = []; + + level.limited_weapons[weapon_name] = amount; +} + +limited_weapon_below_quota( weapon, ignore_player, pap_triggers ) +{ + if ( isdefined( level.limited_weapons[weapon] ) ) + { + if ( !isdefined( pap_triggers ) ) + { + if ( !isdefined( level.pap_triggers ) ) + pap_triggers = getentarray( "specialty_weapupgrade", "script_noteworthy" ); + else + pap_triggers = level.pap_triggers; + } + + if ( is_true( level.no_limited_weapons ) ) + return false; + + upgradedweapon = weapon; + + if ( isdefined( level.zombie_weapons[weapon] ) && isdefined( level.zombie_weapons[weapon].upgrade_name ) ) + upgradedweapon = level.zombie_weapons[weapon].upgrade_name; + + players = get_players(); + count = 0; + limit = level.limited_weapons[weapon]; + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( ignore_player ) && ignore_player == players[i] ) + continue; + + if ( players[i] has_weapon_or_upgrade( weapon ) ) + { + count++; + + if ( count >= limit ) + return false; + } + } + + for ( k = 0; k < pap_triggers.size; k++ ) + { + if ( isdefined( pap_triggers[k].current_weapon ) && ( pap_triggers[k].current_weapon == weapon || pap_triggers[k].current_weapon == upgradedweapon ) ) + { + count++; + + if ( count >= limit ) + return false; + } + } + + for ( chestindex = 0; chestindex < level.chests.size; chestindex++ ) + { + if ( isdefined( level.chests[chestindex].zbarrier.weapon_string ) && level.chests[chestindex].zbarrier.weapon_string == weapon ) + { + count++; + + if ( count >= limit ) + return false; + } + } + + if ( isdefined( level.custom_limited_weapon_checks ) ) + { + foreach ( check in level.custom_limited_weapon_checks ) + count += [[ check ]]( weapon ); + + if ( count >= limit ) + return false; + } + + if ( isdefined( level.random_weapon_powerups ) ) + { + for ( powerupindex = 0; powerupindex < level.random_weapon_powerups.size; powerupindex++ ) + { + if ( isdefined( level.random_weapon_powerups[powerupindex] ) && level.random_weapon_powerups[powerupindex].base_weapon == weapon ) + { + count++; + + if ( count >= limit ) + return false; + } + } + } + } + + return true; +} + +add_custom_limited_weapon_check( callback ) +{ + if ( !isdefined( level.custom_limited_weapon_checks ) ) + level.custom_limited_weapon_checks = []; + + level.custom_limited_weapon_checks[level.custom_limited_weapon_checks.size] = callback; +} + +add_weapon_to_content( weapon_name, package ) +{ + if ( !isdefined( level.content_weapons ) ) + level.content_weapons = []; + + level.content_weapons[weapon_name] = package; +} + +player_can_use_content( weapon ) +{ + if ( isdefined( level.content_weapons ) ) + { + if ( isdefined( level.content_weapons[weapon] ) ) + return self hasdlcavailable( level.content_weapons[weapon] ); + } + + return 1; +} + +init_spawnable_weapon_upgrade() +{ + spawn_list = []; + spawnable_weapon_spawns = getstructarray( "weapon_upgrade", "targetname" ); + spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "bowie_upgrade", "targetname" ), 1, 0 ); + spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "sickle_upgrade", "targetname" ), 1, 0 ); + spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "tazer_upgrade", "targetname" ), 1, 0 ); + spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "buildable_wallbuy", "targetname" ), 1, 0 ); + + if ( !is_true( level.headshots_only ) ) + spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "claymore_purchase", "targetname" ), 1, 0 ); + + match_string = ""; + location = level.scr_zm_map_start_location; + + if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) ) + location = level.default_start_location; + + match_string = level.scr_zm_ui_gametype; + + if ( "" != location ) + match_string = match_string + "_" + location; + + match_string_plus_space = " " + match_string; + + for ( i = 0; i < spawnable_weapon_spawns.size; i++ ) + { + spawnable_weapon = spawnable_weapon_spawns[i]; + + if ( isdefined( spawnable_weapon.zombie_weapon_upgrade ) && spawnable_weapon.zombie_weapon_upgrade == "sticky_grenade_zm" && is_true( level.headshots_only ) ) + continue; + + if ( !isdefined( spawnable_weapon.script_noteworthy ) || spawnable_weapon.script_noteworthy == "" ) + { + spawn_list[spawn_list.size] = spawnable_weapon; + continue; + } + + matches = strtok( spawnable_weapon.script_noteworthy, "," ); + + for ( j = 0; j < matches.size; j++ ) + { + if ( matches[j] == match_string || matches[j] == match_string_plus_space ) + spawn_list[spawn_list.size] = spawnable_weapon; + } + } + + tempmodel = spawn( "script_model", ( 0, 0, 0 ) ); + + for ( i = 0; i < spawn_list.size; i++ ) + { + clientfieldname = spawn_list[i].zombie_weapon_upgrade + "_" + spawn_list[i].origin; + numbits = 2; + + if ( isdefined( level._wallbuy_override_num_bits ) ) + numbits = level._wallbuy_override_num_bits; + + registerclientfield( "world", clientfieldname, 1, numbits, "int" ); + target_struct = getstruct( spawn_list[i].target, "targetname" ); + + if ( spawn_list[i].targetname == "buildable_wallbuy" ) + { + bits = 4; + + if ( isdefined( level.buildable_wallbuy_weapons ) ) + bits = getminbitcountfornum( level.buildable_wallbuy_weapons.size + 1 ); + + registerclientfield( "world", clientfieldname + "_idx", 12000, bits, "int" ); + spawn_list[i].clientfieldname = clientfieldname; + continue; + } + + precachemodel( target_struct.model ); + unitrigger_stub = spawnstruct(); + unitrigger_stub.origin = spawn_list[i].origin; + unitrigger_stub.angles = spawn_list[i].angles; + tempmodel.origin = spawn_list[i].origin; + tempmodel.angles = spawn_list[i].angles; + mins = undefined; + maxs = undefined; + absmins = undefined; + absmaxs = undefined; + tempmodel setmodel( target_struct.model ); + tempmodel useweaponhidetags( spawn_list[i].zombie_weapon_upgrade ); + mins = tempmodel getmins(); + maxs = tempmodel getmaxs(); + absmins = tempmodel getabsmins(); + absmaxs = tempmodel getabsmaxs(); + bounds = absmaxs - absmins; + unitrigger_stub.script_length = bounds[0] * 0.25; + unitrigger_stub.script_width = bounds[1]; + unitrigger_stub.script_height = bounds[2]; + unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * ( unitrigger_stub.script_length * 0.4 ); + unitrigger_stub.target = spawn_list[i].target; + unitrigger_stub.targetname = spawn_list[i].targetname; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + + if ( spawn_list[i].targetname == "weapon_upgrade" ) + { + unitrigger_stub.cost = get_weapon_cost( spawn_list[i].zombie_weapon_upgrade ); + + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + unitrigger_stub.hint_string = get_weapon_hint( spawn_list[i].zombie_weapon_upgrade ); + unitrigger_stub.hint_parm1 = unitrigger_stub.cost; + } + else + { + unitrigger_stub.hint_parm1 = get_weapon_display_name( spawn_list[i].zombie_weapon_upgrade ); + + if ( !isdefined( unitrigger_stub.hint_parm1 ) || unitrigger_stub.hint_parm1 == "" || unitrigger_stub.hint_parm1 == "none" ) + unitrigger_stub.hint_parm1 = "missing weapon name " + spawn_list[i].zombie_weapon_upgrade; + + unitrigger_stub.hint_parm2 = unitrigger_stub.cost; + unitrigger_stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + } + } + + unitrigger_stub.weapon_upgrade = spawn_list[i].zombie_weapon_upgrade; + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.require_look_at = 1; + + if ( isdefined( spawn_list[i].require_look_from ) && spawn_list[i].require_look_from ) + unitrigger_stub.require_look_from = 1; + + unitrigger_stub.zombie_weapon_upgrade = spawn_list[i].zombie_weapon_upgrade; + unitrigger_stub.clientfieldname = clientfieldname; + maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + + if ( is_melee_weapon( unitrigger_stub.zombie_weapon_upgrade ) ) + { + if ( unitrigger_stub.zombie_weapon_upgrade == "tazer_knuckles_zm" && isdefined( level.taser_trig_adjustment ) ) + unitrigger_stub.origin += level.taser_trig_adjustment; + + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think ); + } + else if ( unitrigger_stub.zombie_weapon_upgrade == "claymore_zm" ) + { + unitrigger_stub.prompt_and_visibility_func = maps\mp\zombies\_zm_weap_claymore::claymore_unitrigger_update_prompt; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, maps\mp\zombies\_zm_weap_claymore::buy_claymores ); + } + else + { + unitrigger_stub.prompt_and_visibility_func = ::wall_weapon_update_prompt; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think ); + } + + spawn_list[i].trigger_stub = unitrigger_stub; + } + + level._spawned_wallbuys = spawn_list; + tempmodel delete(); +} + +add_dynamic_wallbuy( weapon, wallbuy, pristine ) +{ + spawned_wallbuy = undefined; + + for ( i = 0; i < level._spawned_wallbuys.size; i++ ) + { + if ( level._spawned_wallbuys[i].target == wallbuy ) + { + spawned_wallbuy = level._spawned_wallbuys[i]; + break; + } + } + + if ( !isdefined( spawned_wallbuy ) ) + { +/# + assertmsg( "Cannot find dynamic wallbuy" ); +#/ + return; + } + + if ( isdefined( spawned_wallbuy.trigger_stub ) ) + { +/# + assertmsg( "Dynamic wallbuy already added" ); +#/ + return; + } + + target_struct = getstruct( wallbuy, "targetname" ); + wallmodel = spawn_weapon_model( weapon, undefined, target_struct.origin, target_struct.angles ); + clientfieldname = spawned_wallbuy.clientfieldname; + model = getweaponmodel( weapon ); + unitrigger_stub = spawnstruct(); + unitrigger_stub.origin = target_struct.origin; + unitrigger_stub.angles = target_struct.angles; + wallmodel.origin = target_struct.origin; + wallmodel.angles = target_struct.angles; + mins = undefined; + maxs = undefined; + absmins = undefined; + absmaxs = undefined; + wallmodel setmodel( model ); + wallmodel useweaponhidetags( weapon ); + mins = wallmodel getmins(); + maxs = wallmodel getmaxs(); + absmins = wallmodel getabsmins(); + absmaxs = wallmodel getabsmaxs(); + bounds = absmaxs - absmins; + unitrigger_stub.script_length = bounds[0] * 0.25; + unitrigger_stub.script_width = bounds[1]; + unitrigger_stub.script_height = bounds[2]; + unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * ( unitrigger_stub.script_length * 0.4 ); + unitrigger_stub.target = spawned_wallbuy.target; + unitrigger_stub.targetname = "weapon_upgrade"; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + unitrigger_stub.first_time_triggered = !pristine; + + if ( !is_melee_weapon( weapon ) ) + { + if ( pristine || weapon == "claymore_zm" ) + unitrigger_stub.hint_string = get_weapon_hint( weapon ); + else + unitrigger_stub.hint_string = get_weapon_hint_ammo(); + + unitrigger_stub.cost = get_weapon_cost( weapon ); + unitrigger_stub.hint_parm1 = unitrigger_stub.cost; + } + + unitrigger_stub.weapon_upgrade = weapon; + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.require_look_at = 1; + unitrigger_stub.zombie_weapon_upgrade = weapon; + unitrigger_stub.clientfieldname = clientfieldname; + unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + + if ( is_melee_weapon( weapon ) ) + { + if ( weapon == "tazer_knuckles_zm" && isdefined( level.taser_trig_adjustment ) ) + unitrigger_stub.origin += level.taser_trig_adjustment; + + maps\mp\zombies\_zm_melee_weapon::add_stub( unitrigger_stub, weapon ); + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, maps\mp\zombies\_zm_melee_weapon::melee_weapon_think ); + } + else if ( weapon == "claymore_zm" ) + { + unitrigger_stub.prompt_and_visibility_func = maps\mp\zombies\_zm_weap_claymore::claymore_unitrigger_update_prompt; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, maps\mp\zombies\_zm_weap_claymore::buy_claymores ); + } + else + { + unitrigger_stub.prompt_and_visibility_func = ::wall_weapon_update_prompt; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think ); + } + + spawned_wallbuy.trigger_stub = unitrigger_stub; + weaponidx = undefined; + + if ( isdefined( level.buildable_wallbuy_weapons ) ) + { + for ( i = 0; i < level.buildable_wallbuy_weapons.size; i++ ) + { + if ( weapon == level.buildable_wallbuy_weapons[i] ) + { + weaponidx = i; + break; + } + } + } + + if ( isdefined( weaponidx ) ) + { + level setclientfield( clientfieldname + "_idx", weaponidx + 1 ); + wallmodel delete(); + + if ( !pristine ) + level setclientfield( clientfieldname, 1 ); + } + else + { + level setclientfield( clientfieldname, 1 ); + wallmodel show(); + } +} + +wall_weapon_update_prompt( player ) +{ + weapon = self.stub.zombie_weapon_upgrade; + + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + player_has_weapon = player has_weapon_or_upgrade( weapon ); + + if ( !player_has_weapon && ( isdefined( level.weapons_using_ammo_sharing ) && level.weapons_using_ammo_sharing ) ) + { + shared_ammo_weapon = player get_shared_ammo_weapon( self.zombie_weapon_upgrade ); + + if ( isdefined( shared_ammo_weapon ) ) + { + weapon = shared_ammo_weapon; + player_has_weapon = 1; + } + } + + if ( !player_has_weapon ) + { + cost = get_weapon_cost( weapon ); + self.stub.hint_string = get_weapon_hint( weapon ); + self sethintstring( self.stub.hint_string, cost ); + } + else if ( isdefined( level.use_legacy_weapon_prompt_format ) && level.use_legacy_weapon_prompt_format ) + { + cost = get_weapon_cost( weapon ); + ammo_cost = get_ammo_cost( weapon ); + self.stub.hint_string = get_weapon_hint_ammo(); + self sethintstring( self.stub.hint_string, cost, ammo_cost ); + } + else + { + if ( player has_upgrade( weapon ) ) + ammo_cost = get_upgraded_ammo_cost( weapon ); + else + ammo_cost = get_ammo_cost( weapon ); + + self.stub.hint_string = &"ZOMBIE_WEAPONAMMOONLY"; + self sethintstring( self.stub.hint_string, ammo_cost ); + } + } + else if ( !player has_weapon_or_upgrade( weapon ) ) + { + string_override = 0; + + if ( isdefined( player.pers_upgrades_awarded["nube"] ) && player.pers_upgrades_awarded["nube"] ) + string_override = maps\mp\zombies\_zm_pers_upgrades_functions::pers_nube_ammo_hint_string( player, weapon ); + + if ( !string_override ) + { + cost = get_weapon_cost( weapon ); + weapon_display = get_weapon_display_name( weapon ); + + if ( !isdefined( weapon_display ) || weapon_display == "" || weapon_display == "none" ) + weapon_display = "missing weapon name " + weapon; + + self.stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + self sethintstring( self.stub.hint_string, weapon_display, cost ); + } + } + else + { + if ( player has_upgrade( weapon ) ) + ammo_cost = get_upgraded_ammo_cost( weapon ); + else + ammo_cost = get_ammo_cost( weapon ); + + self.stub.hint_string = &"ZOMBIE_WEAPONAMMOONLY"; + self sethintstring( self.stub.hint_string, ammo_cost ); + } + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) ) + { + self.stub.cursor_hint = "HINT_WEAPON"; + self.stub.cursor_hint_weapon = weapon; + self setcursorhint( self.stub.cursor_hint, self.stub.cursor_hint_weapon ); + } + else + { + self.stub.cursor_hint = "HINT_NOICON"; + self.stub.cursor_hint_weapon = undefined; + self setcursorhint( self.stub.cursor_hint ); + } + + return 1; +} + +reset_wallbuy_internal( set_hint_string ) +{ + if ( isdefined( self.first_time_triggered ) && self.first_time_triggered == 1 ) + { + self.first_time_triggered = 0; + + if ( isdefined( self.clientfieldname ) ) + level setclientfield( self.clientfieldname, 0 ); + + if ( set_hint_string ) + { + hint_string = get_weapon_hint( self.zombie_weapon_upgrade ); + cost = get_weapon_cost( self.zombie_weapon_upgrade ); + self sethintstring( hint_string, cost ); + } + } +} + +reset_wallbuys() +{ + weapon_spawns = []; + weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); + melee_and_grenade_spawns = []; + melee_and_grenade_spawns = getentarray( "bowie_upgrade", "targetname" ); + melee_and_grenade_spawns = arraycombine( melee_and_grenade_spawns, getentarray( "sickle_upgrade", "targetname" ), 1, 0 ); + melee_and_grenade_spawns = arraycombine( melee_and_grenade_spawns, getentarray( "tazer_upgrade", "targetname" ), 1, 0 ); + + if ( !is_true( level.headshots_only ) ) + melee_and_grenade_spawns = arraycombine( melee_and_grenade_spawns, getentarray( "claymore_purchase", "targetname" ), 1, 0 ); + + for ( i = 0; i < weapon_spawns.size; i++ ) + weapon_spawns[i] reset_wallbuy_internal( 1 ); + + for ( i = 0; i < melee_and_grenade_spawns.size; i++ ) + melee_and_grenade_spawns[i] reset_wallbuy_internal( 0 ); + + if ( isdefined( level._unitriggers ) ) + { + candidates = []; + + for ( i = 0; i < level._unitriggers.trigger_stubs.size; i++ ) + { + stub = level._unitriggers.trigger_stubs[i]; + tn = stub.targetname; + + if ( tn == "weapon_upgrade" || tn == "bowie_upgrade" || tn == "sickle_upgrade" || tn == "tazer_upgrade" || tn == "claymore_purchase" ) + { + stub.first_time_triggered = 0; + + if ( isdefined( stub.clientfieldname ) ) + level setclientfield( stub.clientfieldname, 0 ); + + if ( tn == "weapon_upgrade" ) + { + stub.hint_string = get_weapon_hint( stub.zombie_weapon_upgrade ); + stub.cost = get_weapon_cost( stub.zombie_weapon_upgrade ); + stub.hint_parm1 = stub.cost; + } + } + } + } +} + +init_weapon_upgrade() +{ + init_spawnable_weapon_upgrade(); + weapon_spawns = []; + weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); + + for ( i = 0; i < weapon_spawns.size; i++ ) + { + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + hint_string = get_weapon_hint( weapon_spawns[i].zombie_weapon_upgrade ); + cost = get_weapon_cost( weapon_spawns[i].zombie_weapon_upgrade ); + weapon_spawns[i] sethintstring( hint_string, cost ); + weapon_spawns[i] setcursorhint( "HINT_NOICON" ); + } + else + { + cost = get_weapon_cost( weapon_spawns[i].zombie_weapon_upgrade ); + weapon_display = get_weapon_display_name( weapon_spawns[i].zombie_weapon_upgrade ); + + if ( !isdefined( weapon_display ) || weapon_display == "" || weapon_display == "none" ) + weapon_display = "missing weapon name " + weapon_spawns[i].zombie_weapon_upgrade; + + hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + weapon_spawns[i] sethintstring( hint_string, weapon_display, cost ); + } + + weapon_spawns[i] usetriggerrequirelookat(); + weapon_spawns[i] thread weapon_spawn_think(); + model = getent( weapon_spawns[i].target, "targetname" ); + + if ( isdefined( model ) ) + { + model useweaponhidetags( weapon_spawns[i].zombie_weapon_upgrade ); + model hide(); + } + } +} + +init_weapon_toggle() +{ + if ( !isdefined( level.magic_box_weapon_toggle_init_callback ) ) + return; + + level.zombie_weapon_toggles = []; + level.zombie_weapon_toggle_max_active_count = 0; + level.zombie_weapon_toggle_active_count = 0; + precachestring( &"ZOMBIE_WEAPON_TOGGLE_DISABLED" ); + precachestring( &"ZOMBIE_WEAPON_TOGGLE_ACTIVATE" ); + precachestring( &"ZOMBIE_WEAPON_TOGGLE_DEACTIVATE" ); + precachestring( &"ZOMBIE_WEAPON_TOGGLE_ACQUIRED" ); + level.zombie_weapon_toggle_disabled_hint = &"ZOMBIE_WEAPON_TOGGLE_DISABLED"; + level.zombie_weapon_toggle_activate_hint = &"ZOMBIE_WEAPON_TOGGLE_ACTIVATE"; + level.zombie_weapon_toggle_deactivate_hint = &"ZOMBIE_WEAPON_TOGGLE_DEACTIVATE"; + level.zombie_weapon_toggle_acquired_hint = &"ZOMBIE_WEAPON_TOGGLE_ACQUIRED"; + precachemodel( "zombie_zapper_cagelight" ); + precachemodel( "zombie_zapper_cagelight_green" ); + precachemodel( "zombie_zapper_cagelight_red" ); + precachemodel( "zombie_zapper_cagelight_on" ); + level.zombie_weapon_toggle_disabled_light = "zombie_zapper_cagelight"; + level.zombie_weapon_toggle_active_light = "zombie_zapper_cagelight_green"; + level.zombie_weapon_toggle_inactive_light = "zombie_zapper_cagelight_red"; + level.zombie_weapon_toggle_acquired_light = "zombie_zapper_cagelight_on"; + weapon_toggle_ents = []; + weapon_toggle_ents = getentarray( "magic_box_weapon_toggle", "targetname" ); + + for ( i = 0; i < weapon_toggle_ents.size; i++ ) + { + struct = spawnstruct(); + struct.trigger = weapon_toggle_ents[i]; + struct.weapon_name = struct.trigger.script_string; + struct.upgrade_name = level.zombie_weapons[struct.trigger.script_string].upgrade_name; + struct.enabled = 0; + struct.active = 0; + struct.acquired = 0; + target_array = []; + target_array = getentarray( struct.trigger.target, "targetname" ); + + for ( j = 0; j < target_array.size; j++ ) + { + switch ( target_array[j].script_string ) + { + case "light": + struct.light = target_array[j]; + struct.light setmodel( level.zombie_weapon_toggle_disabled_light ); + break; + case "weapon": + struct.weapon_model = target_array[j]; + struct.weapon_model hide(); + break; + } + } + + struct.trigger sethintstring( level.zombie_weapon_toggle_disabled_hint ); + struct.trigger setcursorhint( "HINT_NOICON" ); + struct.trigger usetriggerrequirelookat(); + struct thread weapon_toggle_think(); + level.zombie_weapon_toggles[struct.weapon_name] = struct; + } + + level thread [[ level.magic_box_weapon_toggle_init_callback ]](); +} + +get_weapon_toggle( weapon_name ) +{ + if ( !isdefined( level.zombie_weapon_toggles ) ) + return undefined; + + if ( isdefined( level.zombie_weapon_toggles[weapon_name] ) ) + return level.zombie_weapon_toggles[weapon_name]; + + keys = getarraykeys( level.zombie_weapon_toggles ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( weapon_name == level.zombie_weapon_toggles[keys[i]].upgrade_name ) + return level.zombie_weapon_toggles[keys[i]]; + } + + return undefined; +} + +is_weapon_toggle( weapon_name ) +{ + return isdefined( get_weapon_toggle( weapon_name ) ); +} + +disable_weapon_toggle( weapon_name ) +{ + toggle = get_weapon_toggle( weapon_name ); + + if ( !isdefined( toggle ) ) + return; + + if ( toggle.active ) + level.zombie_weapon_toggle_active_count--; + + toggle.enabled = 0; + toggle.active = 0; + toggle.light setmodel( level.zombie_weapon_toggle_disabled_light ); + toggle.weapon_model hide(); + toggle.trigger sethintstring( level.zombie_weapon_toggle_disabled_hint ); +} + +enable_weapon_toggle( weapon_name ) +{ + toggle = get_weapon_toggle( weapon_name ); + + if ( !isdefined( toggle ) ) + return; + + toggle.enabled = 1; + toggle.weapon_model show(); + toggle.weapon_model useweaponhidetags( weapon_name ); + deactivate_weapon_toggle( weapon_name ); +} + +activate_weapon_toggle( weapon_name, trig_for_vox ) +{ + if ( level.zombie_weapon_toggle_active_count >= level.zombie_weapon_toggle_max_active_count ) + { + if ( isdefined( trig_for_vox ) ) + trig_for_vox thread maps\mp\zombies\_zm_audio::weapon_toggle_vox( "max" ); + + return; + } + + toggle = get_weapon_toggle( weapon_name ); + + if ( !isdefined( toggle ) ) + return; + + if ( isdefined( trig_for_vox ) ) + trig_for_vox thread maps\mp\zombies\_zm_audio::weapon_toggle_vox( "activate", weapon_name ); + + level.zombie_weapon_toggle_active_count++; + toggle.active = 1; + toggle.light setmodel( level.zombie_weapon_toggle_active_light ); + toggle.trigger sethintstring( level.zombie_weapon_toggle_deactivate_hint ); +} + +deactivate_weapon_toggle( weapon_name, trig_for_vox ) +{ + toggle = get_weapon_toggle( weapon_name ); + + if ( !isdefined( toggle ) ) + return; + + if ( isdefined( trig_for_vox ) ) + trig_for_vox thread maps\mp\zombies\_zm_audio::weapon_toggle_vox( "deactivate", weapon_name ); + + if ( toggle.active ) + level.zombie_weapon_toggle_active_count--; + + toggle.active = 0; + toggle.light setmodel( level.zombie_weapon_toggle_inactive_light ); + toggle.trigger sethintstring( level.zombie_weapon_toggle_activate_hint ); +} + +acquire_weapon_toggle( weapon_name, player ) +{ + toggle = get_weapon_toggle( weapon_name ); + + if ( !isdefined( toggle ) ) + return; + + if ( !toggle.active || toggle.acquired ) + return; + + toggle.acquired = 1; + toggle.light setmodel( level.zombie_weapon_toggle_acquired_light ); + toggle.trigger sethintstring( level.zombie_weapon_toggle_acquired_hint ); + toggle thread unacquire_weapon_toggle_on_death_or_disconnect_thread( player ); +} + +unacquire_weapon_toggle_on_death_or_disconnect_thread( player ) +{ + self notify( "end_unacquire_weapon_thread" ); + self endon( "end_unacquire_weapon_thread" ); + player waittill_any( "spawned_spectator", "disconnect" ); + unacquire_weapon_toggle( self.weapon_name ); +} + +unacquire_weapon_toggle( weapon_name ) +{ + toggle = get_weapon_toggle( weapon_name ); + + if ( !isdefined( toggle ) ) + return; + + if ( !toggle.active || !toggle.acquired ) + return; + + toggle.acquired = 0; + toggle.light setmodel( level.zombie_weapon_toggle_active_light ); + toggle.trigger sethintstring( level.zombie_weapon_toggle_deactivate_hint ); + toggle notify( "end_unacquire_weapon_thread" ); +} + +weapon_toggle_think() +{ + for (;;) + { + self.trigger waittill( "trigger", player ); + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + if ( !self.enabled || self.acquired ) + { + self.trigger thread maps\mp\zombies\_zm_audio::weapon_toggle_vox( "max" ); + continue; + } + + if ( !self.active ) + { + activate_weapon_toggle( self.weapon_name, self.trigger ); + continue; + } + + deactivate_weapon_toggle( self.weapon_name, self.trigger ); + } +} + +get_weapon_hint( weapon_name ) +{ + assert( isdefined( level.zombie_weapons[weapon_name] ), weapon_name + " was not included or is not part of the zombie weapon list." ); + return level.zombie_weapons[weapon_name].hint; +} + +get_weapon_cost( weapon_name ) +{ + assert( isdefined( level.zombie_weapons[weapon_name] ), weapon_name + " was not included or is not part of the zombie weapon list." ); + return level.zombie_weapons[weapon_name].cost; +} + +get_ammo_cost( weapon_name ) +{ + assert( isdefined( level.zombie_weapons[weapon_name] ), weapon_name + " was not included or is not part of the zombie weapon list." ); + return level.zombie_weapons[weapon_name].ammo_cost; +} + +get_upgraded_ammo_cost( weapon_name ) +{ + assert( isdefined( level.zombie_weapons[weapon_name] ), weapon_name + " was not included or is not part of the zombie weapon list." ); + + if ( isdefined( level.zombie_weapons[weapon_name].upgraded_ammo_cost ) ) + return level.zombie_weapons[weapon_name].upgraded_ammo_cost; + + return 4500; +} + +get_weapon_display_name( weapon_name ) +{ + weapon_display = getweapondisplayname( weapon_name ); + + if ( !isdefined( weapon_display ) || weapon_display == "" || weapon_display == "none" ) + { + weapon_display = &"MPUI_NONE"; +/# + weapon_display = "missing weapon name " + weapon_name; +#/ + } + + return weapon_display; +} + +get_is_in_box( weapon_name ) +{ + assert( isdefined( level.zombie_weapons[weapon_name] ), weapon_name + " was not included or is not part of the zombie weapon list." ); + return level.zombie_weapons[weapon_name].is_in_box; +} + +weapon_supports_default_attachment( weaponname ) +{ + weaponname = get_base_weapon_name( weaponname ); + + if ( isdefined( weaponname ) ) + attachment = level.zombie_weapons[weaponname].default_attachment; + + return isdefined( attachment ); +} + +default_attachment( weaponname ) +{ + weaponname = get_base_weapon_name( weaponname ); + + if ( isdefined( weaponname ) ) + attachment = level.zombie_weapons[weaponname].default_attachment; + + if ( isdefined( attachment ) ) + return attachment; + else + return "none"; +} + +weapon_supports_attachments( weaponname ) +{ + weaponname = get_base_weapon_name( weaponname ); + + if ( isdefined( weaponname ) ) + attachments = level.zombie_weapons[weaponname].addon_attachments; + + return isdefined( attachments ) && attachments.size > 1; +} + +random_attachment( weaponname, exclude ) +{ + lo = 0; + + if ( isdefined( level.zombie_weapons[weaponname].addon_attachments ) && level.zombie_weapons[weaponname].addon_attachments.size > 0 ) + attachments = level.zombie_weapons[weaponname].addon_attachments; + else + { + attachments = getweaponsupportedattachments( weaponname ); + lo = 1; + } + + minatt = lo; + + if ( isdefined( exclude ) && exclude != "none" ) + minatt = lo + 1; + + if ( attachments.size > minatt ) + { + while ( true ) + { + idx = randomint( attachments.size - lo ) + lo; + + if ( !isdefined( exclude ) || attachments[idx] != exclude ) + return attachments[idx]; + } + } + + return "none"; +} + +get_base_name( weaponname ) +{ + split = strtok( weaponname, "+" ); + + if ( split.size > 1 ) + return split[0]; + + return weaponname; +} + +get_attachment_name( weaponname, att_id ) +{ + split = strtok( weaponname, "+" ); + + if ( isdefined( att_id ) ) + { + attachment = att_id + 1; + + if ( split.size > attachment ) + return split[attachment]; + } + else if ( split.size > 1 ) + { + att = split[1]; + + for ( idx = 2; split.size > idx; idx++ ) + att = att + "+" + split[idx]; + + return att; + } + + return undefined; +} + +get_attachment_index( weapon ) +{ + att = get_attachment_name( weapon ); + + if ( att == "none" ) + return -1; + + base = get_base_name( weapon ); + + if ( att == level.zombie_weapons[base].default_attachment ) + return 0; + + if ( isdefined( level.zombie_weapons[base].addon_attachments ) ) + { + for ( i = 0; i < level.zombie_weapons[base].addon_attachments.size; i++ ) + { + if ( level.zombie_weapons[base].addon_attachments[i] == att ) + return i + 1; + } + } +/# + println( "ZM WEAPON ERROR: Unrecognized attachment in weapon " + weapon ); +#/ + return -1; +} + +weapon_supports_this_attachment( weapon, att ) +{ + base = get_base_name( weapon ); + + if ( att == level.zombie_weapons[base].default_attachment ) + return true; + + if ( isdefined( level.zombie_weapons[base].addon_attachments ) ) + { + for ( i = 0; i < level.zombie_weapons[base].addon_attachments.size; i++ ) + { + if ( level.zombie_weapons[base].addon_attachments[i] == att ) + return true; + } + } + + return false; +} + +has_attachment( weaponname, att ) +{ + split = strtok( weaponname, "+" ); + idx = 1; + + while ( split.size > idx ) + { + if ( att == split[idx] ) + return true; + } + + return false; +} + +get_base_weapon_name( upgradedweaponname, base_if_not_upgraded ) +{ + if ( !isdefined( upgradedweaponname ) || upgradedweaponname == "" ) + return undefined; + + upgradedweaponname = tolower( upgradedweaponname ); + upgradedweaponname = get_base_name( upgradedweaponname ); + + if ( isdefined( level.zombie_weapons_upgraded[upgradedweaponname] ) ) + return level.zombie_weapons_upgraded[upgradedweaponname]; + + if ( isdefined( base_if_not_upgraded ) && base_if_not_upgraded ) + return upgradedweaponname; + + return undefined; +} + +get_upgrade_weapon( weaponname, add_attachment ) +{ + rootweaponname = tolower( weaponname ); + rootweaponname = get_base_name( rootweaponname ); + baseweaponname = get_base_weapon_name( rootweaponname, 1 ); + newweapon = rootweaponname; + + if ( !is_weapon_upgraded( rootweaponname ) ) + newweapon = level.zombie_weapons[rootweaponname].upgrade_name; + + if ( isdefined( add_attachment ) && add_attachment && ( isdefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) ) + { + oldatt = get_attachment_name( weaponname ); + att = random_attachment( baseweaponname, oldatt ); + newweapon = newweapon + "+" + att; + } + else if ( isdefined( level.zombie_weapons[rootweaponname] ) && isdefined( level.zombie_weapons[rootweaponname].default_attachment ) ) + { + att = level.zombie_weapons[rootweaponname].default_attachment; + newweapon = newweapon + "+" + att; + } + + return newweapon; +} + +can_upgrade_weapon( weaponname ) +{ + if ( !isdefined( weaponname ) || weaponname == "" || weaponname == "zombie_fists_zm" ) + return 0; + + weaponname = tolower( weaponname ); + weaponname = get_base_name( weaponname ); + + if ( !is_weapon_upgraded( weaponname ) ) + return isdefined( level.zombie_weapons[weaponname].upgrade_name ); + + if ( isdefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch && weapon_supports_attachments( weaponname ) ) + return 1; + + return 0; +} + +will_upgrade_weapon_as_attachment( weaponname ) +{ + if ( !isdefined( weaponname ) || weaponname == "" || weaponname == "zombie_fists_zm" ) + return false; + + weaponname = tolower( weaponname ); + weaponname = get_base_name( weaponname ); + + if ( !is_weapon_upgraded( weaponname ) ) + return false; + + if ( isdefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch && weapon_supports_attachments( weaponname ) ) + return true; + + return false; +} + +is_weapon_upgraded( weaponname ) +{ + if ( !isdefined( weaponname ) || weaponname == "" || weaponname == "zombie_fists_zm" ) + return false; + + weaponname = tolower( weaponname ); + weaponname = get_base_name( weaponname ); + + if ( isdefined( level.zombie_weapons_upgraded[weaponname] ) ) + return true; + + return false; +} + +get_weapon_with_attachments( weaponname ) +{ + if ( self hasweapon( weaponname ) ) + return weaponname; + + if ( isdefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) + { + weaponname = tolower( weaponname ); + weaponname = get_base_name( weaponname ); + weapons = self getweaponslist( 1 ); + + foreach ( weapon in weapons ) + { + weapon = tolower( weapon ); + weapon_base = get_base_name( weapon ); + + if ( weaponname == weapon_base ) + return weapon; + } + } + + return undefined; +} + +has_weapon_or_attachments( weaponname ) +{ + if ( self hasweapon( weaponname ) ) + return true; + + if ( isdefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) + { + weaponname = tolower( weaponname ); + weaponname = get_base_name( weaponname ); + weapons = self getweaponslist( 1 ); + + foreach ( weapon in weapons ) + { + weapon = tolower( weapon ); + weapon = get_base_name( weapon ); + + if ( weaponname == weapon ) + return true; + } + } + + return false; +} + +has_upgrade( weaponname ) +{ + weaponname = get_base_name( weaponname ); + has_upgrade = 0; + + if ( isdefined( level.zombie_weapons[weaponname] ) && isdefined( level.zombie_weapons[weaponname].upgrade_name ) ) + has_upgrade = self has_weapon_or_attachments( level.zombie_weapons[weaponname].upgrade_name ); + + if ( !has_upgrade && "knife_ballistic_zm" == weaponname ) + has_weapon = self maps\mp\zombies\_zm_melee_weapon::has_upgraded_ballistic_knife(); + + return has_upgrade; +} + +has_weapon_or_upgrade( weaponname ) +{ + weaponname = get_base_name( weaponname ); + upgradedweaponname = weaponname; + + if ( isdefined( level.zombie_weapons[weaponname] ) && isdefined( level.zombie_weapons[weaponname].upgrade_name ) ) + upgradedweaponname = level.zombie_weapons[weaponname].upgrade_name; + + has_weapon = 0; + + if ( isdefined( level.zombie_weapons[weaponname] ) ) + has_weapon = self has_weapon_or_attachments( weaponname ) || self has_upgrade( weaponname ); + + if ( !has_weapon && "knife_ballistic_zm" == weaponname ) + has_weapon = self maps\mp\zombies\_zm_melee_weapon::has_any_ballistic_knife(); + + if ( !has_weapon && is_equipment( weaponname ) ) + has_weapon = self is_equipment_active( weaponname ); + + return has_weapon; +} + +add_shared_ammo_weapon( str_weapon, str_base_weapon ) +{ + level.zombie_weapons[str_weapon].shared_ammo_weapon = str_base_weapon; +} + +get_shared_ammo_weapon( base_weapon ) +{ + base_weapon = get_base_name( base_weapon ); + weapons = self getweaponslist( 1 ); + + foreach ( weapon in weapons ) + { + weapon = tolower( weapon ); + weapon = get_base_name( weapon ); + + if ( !isdefined( level.zombie_weapons[weapon] ) && isdefined( level.zombie_weapons_upgraded[weapon] ) ) + weapon = level.zombie_weapons_upgraded[weapon]; + + if ( isdefined( level.zombie_weapons[weapon] ) && isdefined( level.zombie_weapons[weapon].shared_ammo_weapon ) && level.zombie_weapons[weapon].shared_ammo_weapon == base_weapon ) + return weapon; + } + + return undefined; +} + +get_player_weapon_with_same_base( weaponname ) +{ + weaponname = tolower( weaponname ); + weaponname = get_base_name( weaponname ); + retweapon = get_weapon_with_attachments( weaponname ); + + if ( !isdefined( retweapon ) ) + { + if ( isdefined( level.zombie_weapons[weaponname] ) ) + retweapon = get_weapon_with_attachments( level.zombie_weapons[weaponname].upgrade_name ); + else if ( isdefined( level.zombie_weapons_upgraded[weaponname] ) ) + return get_weapon_with_attachments( level.zombie_weapons_upgraded[weaponname] ); + } + + return retweapon; +} + +get_weapon_hint_ammo() +{ + if ( isdefined( level.has_pack_a_punch ) && !level.has_pack_a_punch ) + return &"ZOMBIE_WEAPONCOSTAMMO"; + else + return &"ZOMBIE_WEAPONCOSTAMMO_UPGRADE"; +} + +weapon_set_first_time_hint( cost, ammo_cost ) +{ + self sethintstring( get_weapon_hint_ammo(), cost, ammo_cost ); +} + +weapon_spawn_think() +{ + cost = get_weapon_cost( self.zombie_weapon_upgrade ); + ammo_cost = get_ammo_cost( self.zombie_weapon_upgrade ); + is_grenade = weapontype( self.zombie_weapon_upgrade ) == "grenade"; + shared_ammo_weapon = undefined; + second_endon = undefined; + + if ( isdefined( self.stub ) ) + { + second_endon = "kill_trigger"; + self.first_time_triggered = self.stub.first_time_triggered; + } + + if ( isdefined( self.stub ) && ( isdefined( self.stub.trigger_per_player ) && self.stub.trigger_per_player ) ) + self thread decide_hide_show_hint( "stop_hint_logic", second_endon, self.parent_player ); + else + self thread decide_hide_show_hint( "stop_hint_logic", second_endon ); + + if ( is_grenade ) + { + self.first_time_triggered = 0; + hint = get_weapon_hint( self.zombie_weapon_upgrade ); + self sethintstring( hint, cost ); + } + else if ( !isdefined( self.first_time_triggered ) ) + { + self.first_time_triggered = 0; + + if ( isdefined( self.stub ) ) + self.stub.first_time_triggered = 0; + } + else if ( self.first_time_triggered ) + { + if ( isdefined( level.use_legacy_weapon_prompt_format ) && level.use_legacy_weapon_prompt_format ) + self weapon_set_first_time_hint( cost, get_ammo_cost( self.zombie_weapon_upgrade ) ); + } + + for (;;) + { + self waittill( "trigger", player ); + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + if ( !player can_buy_weapon() ) + { + wait 0.1; + continue; + } + + if ( isdefined( self.stub ) && ( isdefined( self.stub.require_look_from ) && self.stub.require_look_from ) ) + { + toplayer = player get_eye() - self.origin; + forward = -1 * anglestoright( self.angles ); + dot = vectordot( toplayer, forward ); + + if ( dot < 0 ) + continue; + } + + if ( player has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + player_has_weapon = player has_weapon_or_upgrade( self.zombie_weapon_upgrade ); + + if ( !player_has_weapon && ( isdefined( level.weapons_using_ammo_sharing ) && level.weapons_using_ammo_sharing ) ) + { + shared_ammo_weapon = player get_shared_ammo_weapon( self.zombie_weapon_upgrade ); + + if ( isdefined( shared_ammo_weapon ) ) + player_has_weapon = 1; + } + + if ( isdefined( level.pers_upgrade_nube ) && level.pers_upgrade_nube ) + player_has_weapon = maps\mp\zombies\_zm_pers_upgrades_functions::pers_nube_should_we_give_raygun( player_has_weapon, player, self.zombie_weapon_upgrade ); + + cost = get_weapon_cost( self.zombie_weapon_upgrade ); + + if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) + cost = int( cost / 2 ); + + if ( !player_has_weapon ) + { + if ( player.score >= cost ) + { + if ( self.first_time_triggered == 0 ) + self show_all_weapon_buys( player, cost, ammo_cost, is_grenade ); + + player maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 ); + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, self.zombie_weapon_upgrade, self.origin, "weapon" ); + level notify( "weapon_bought", player, self.zombie_weapon_upgrade ); + + if ( self.zombie_weapon_upgrade == "riotshield_zm" ) + { + player maps\mp\zombies\_zm_equipment::equipment_give( "riotshield_zm" ); + + if ( isdefined( player.player_shield_reset_health ) ) + player [[ player.player_shield_reset_health ]](); + } + else if ( self.zombie_weapon_upgrade == "jetgun_zm" ) + player maps\mp\zombies\_zm_equipment::equipment_give( "jetgun_zm" ); + else + { + if ( is_lethal_grenade( self.zombie_weapon_upgrade ) ) + { + player takeweapon( player get_player_lethal_grenade() ); + player set_player_lethal_grenade( self.zombie_weapon_upgrade ); + } + + str_weapon = self.zombie_weapon_upgrade; + + if ( isdefined( level.pers_upgrade_nube ) && level.pers_upgrade_nube ) + str_weapon = maps\mp\zombies\_zm_pers_upgrades_functions::pers_nube_weapon_upgrade_check( player, str_weapon ); + + player weapon_give( str_weapon ); + } + + player maps\mp\zombies\_zm_stats::increment_client_stat( "wallbuy_weapons_purchased" ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "wallbuy_weapons_purchased" ); + } + else + { + play_sound_on_ent( "no_purchase" ); + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); + } + } + else + { + str_weapon = self.zombie_weapon_upgrade; + + if ( isdefined( shared_ammo_weapon ) ) + str_weapon = shared_ammo_weapon; + + if ( isdefined( level.pers_upgrade_nube ) && level.pers_upgrade_nube ) + str_weapon = maps\mp\zombies\_zm_pers_upgrades_functions::pers_nube_weapon_ammo_check( player, str_weapon ); + + if ( isdefined( self.hacked ) && self.hacked ) + { + if ( !player has_upgrade( str_weapon ) ) + ammo_cost = 4500; + else + ammo_cost = get_ammo_cost( str_weapon ); + } + else if ( player has_upgrade( str_weapon ) ) + ammo_cost = 4500; + else + ammo_cost = get_ammo_cost( str_weapon ); + + if ( isdefined( player.pers_upgrades_awarded["nube"] ) && player.pers_upgrades_awarded["nube"] ) + ammo_cost = maps\mp\zombies\_zm_pers_upgrades_functions::pers_nube_override_ammo_cost( player, self.zombie_weapon_upgrade, ammo_cost ); + + if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) + ammo_cost = int( ammo_cost / 2 ); + + if ( str_weapon == "riotshield_zm" ) + play_sound_on_ent( "no_purchase" ); + else if ( player.score >= ammo_cost ) + { + if ( self.first_time_triggered == 0 ) + self show_all_weapon_buys( player, cost, ammo_cost, is_grenade ); + + if ( player has_upgrade( str_weapon ) ) + { + player maps\mp\zombies\_zm_stats::increment_client_stat( "upgraded_ammo_purchased" ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "upgraded_ammo_purchased" ); + } + else + { + player maps\mp\zombies\_zm_stats::increment_client_stat( "ammo_purchased" ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "ammo_purchased" ); + } + + if ( str_weapon == "riotshield_zm" ) + { + if ( isdefined( player.player_shield_reset_health ) ) + ammo_given = player [[ player.player_shield_reset_health ]](); + else + ammo_given = 0; + } + else if ( player has_upgrade( str_weapon ) ) + ammo_given = player ammo_give( level.zombie_weapons[str_weapon].upgrade_name ); + else + ammo_given = player ammo_give( str_weapon ); + + if ( ammo_given ) + { + player maps\mp\zombies\_zm_score::minus_to_player_score( ammo_cost, 1 ); + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, ammo_cost, str_weapon, self.origin, "ammo" ); + } + } + else + { + play_sound_on_ent( "no_purchase" ); + + if ( isdefined( level.custom_generic_deny_vo_func ) ) + player [[ level.custom_generic_deny_vo_func ]](); + else + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); + } + } + + if ( isdefined( self.stub ) && isdefined( self.stub.prompt_and_visibility_func ) ) + self [[ self.stub.prompt_and_visibility_func ]]( player ); + } +} + +show_all_weapon_buys( player, cost, ammo_cost, is_grenade ) +{ + model = getent( self.target, "targetname" ); + + if ( isdefined( model ) ) + model thread weapon_show( player ); + else if ( isdefined( self.clientfieldname ) ) + level setclientfield( self.clientfieldname, 1 ); + + self.first_time_triggered = 1; + + if ( isdefined( self.stub ) ) + self.stub.first_time_triggered = 1; + + if ( !is_grenade ) + self weapon_set_first_time_hint( cost, ammo_cost ); + + if ( !( isdefined( level.dont_link_common_wallbuys ) && level.dont_link_common_wallbuys ) && isdefined( level._spawned_wallbuys ) ) + { + for ( i = 0; i < level._spawned_wallbuys.size; i++ ) + { + wallbuy = level._spawned_wallbuys[i]; + + if ( isdefined( self.stub ) && isdefined( wallbuy.trigger_stub ) && self.stub.clientfieldname == wallbuy.trigger_stub.clientfieldname ) + continue; + + if ( self.zombie_weapon_upgrade == wallbuy.zombie_weapon_upgrade ) + { + if ( isdefined( wallbuy.trigger_stub ) && isdefined( wallbuy.trigger_stub.clientfieldname ) ) + level setclientfield( wallbuy.trigger_stub.clientfieldname, 1 ); + else if ( isdefined( wallbuy.target ) ) + { + model = getent( wallbuy.target, "targetname" ); + + if ( isdefined( model ) ) + model thread weapon_show( player ); + } + + if ( isdefined( wallbuy.trigger_stub ) ) + { + wallbuy.trigger_stub.first_time_triggered = 1; + + if ( isdefined( wallbuy.trigger_stub.trigger ) ) + { + wallbuy.trigger_stub.trigger.first_time_triggered = 1; + + if ( !is_grenade ) + wallbuy.trigger_stub.trigger weapon_set_first_time_hint( cost, ammo_cost ); + } + + continue; + } + + if ( !is_grenade ) + wallbuy weapon_set_first_time_hint( cost, ammo_cost ); + } + } + } +} + +weapon_show( player ) +{ + player_angles = vectortoangles( player.origin - self.origin ); + player_yaw = player_angles[1]; + weapon_yaw = self.angles[1]; + + if ( isdefined( self.script_int ) ) + weapon_yaw -= self.script_int; + + yaw_diff = angleclamp180( player_yaw - weapon_yaw ); + + if ( yaw_diff > 0 ) + yaw = weapon_yaw - 90; + else + yaw = weapon_yaw + 90; + + self.og_origin = self.origin; + self.origin += anglestoforward( ( 0, yaw, 0 ) ) * 8; + wait 0.05; + self show(); + play_sound_at_pos( "weapon_show", self.origin, self ); + time = 1; + + if ( !isdefined( self._linked_ent ) ) + self moveto( self.og_origin, time ); +} + +get_pack_a_punch_weapon_options( weapon ) +{ + if ( !isdefined( self.pack_a_punch_weapon_options ) ) + self.pack_a_punch_weapon_options = []; + + if ( !is_weapon_upgraded( weapon ) ) + return self calcweaponoptions( 0, 0, 0, 0, 0 ); + + if ( isdefined( self.pack_a_punch_weapon_options[weapon] ) ) + return self.pack_a_punch_weapon_options[weapon]; + + smiley_face_reticle_index = 1; + base = get_base_name( weapon ); + camo_index = 39; + + if ( "zm_prison" == level.script ) + camo_index = 40; + else if ( "zm_tomb" == level.script ) + camo_index = 45; + + lens_index = randomintrange( 0, 6 ); + reticle_index = randomintrange( 0, 16 ); + reticle_color_index = randomintrange( 0, 6 ); + plain_reticle_index = 16; + r = randomint( 10 ); + use_plain = r < 3; + + if ( "saritch_upgraded_zm" == base ) + reticle_index = smiley_face_reticle_index; + else if ( use_plain ) + reticle_index = plain_reticle_index; +/# + if ( getdvarint( _hash_471F9AB9 ) >= 0 ) + reticle_index = getdvarint( _hash_471F9AB9 ); +#/ + scary_eyes_reticle_index = 8; + purple_reticle_color_index = 3; + + if ( reticle_index == scary_eyes_reticle_index ) + reticle_color_index = purple_reticle_color_index; + + letter_a_reticle_index = 2; + pink_reticle_color_index = 6; + + if ( reticle_index == letter_a_reticle_index ) + reticle_color_index = pink_reticle_color_index; + + letter_e_reticle_index = 7; + green_reticle_color_index = 1; + + if ( reticle_index == letter_e_reticle_index ) + reticle_color_index = green_reticle_color_index; + + self.pack_a_punch_weapon_options[weapon] = self calcweaponoptions( camo_index, lens_index, reticle_index, reticle_color_index ); + return self.pack_a_punch_weapon_options[weapon]; +} + +weapon_give( weapon, is_upgrade, magic_box, nosound ) +{ + primaryweapons = self getweaponslistprimaries(); + current_weapon = self getcurrentweapon(); + current_weapon = self maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( current_weapon ); + assert( self player_can_use_content( weapon ) ); + + if ( !isdefined( is_upgrade ) ) + is_upgrade = 0; + + weapon_limit = get_player_weapon_limit( self ); + + if ( is_equipment( weapon ) ) + self maps\mp\zombies\_zm_equipment::equipment_give( weapon ); + + if ( weapon == "riotshield_zm" ) + { + if ( isdefined( self.player_shield_reset_health ) ) + self [[ self.player_shield_reset_health ]](); + } + + if ( self hasweapon( weapon ) ) + { + if ( issubstr( weapon, "knife_ballistic_" ) ) + self notify( "zmb_lost_knife" ); + + self givestartammo( weapon ); + + if ( !is_offhand_weapon( weapon ) ) + self switchtoweapon( weapon ); + + return; + } + + if ( is_melee_weapon( weapon ) ) + current_weapon = maps\mp\zombies\_zm_melee_weapon::change_melee_weapon( weapon, current_weapon ); + else if ( is_lethal_grenade( weapon ) ) + { + old_lethal = self get_player_lethal_grenade(); + + if ( isdefined( old_lethal ) && old_lethal != "" ) + { + self takeweapon( old_lethal ); + unacquire_weapon_toggle( old_lethal ); + } + + self set_player_lethal_grenade( weapon ); + } + else if ( is_tactical_grenade( weapon ) ) + { + old_tactical = self get_player_tactical_grenade(); + + if ( isdefined( old_tactical ) && old_tactical != "" ) + { + self takeweapon( old_tactical ); + unacquire_weapon_toggle( old_tactical ); + } + + self set_player_tactical_grenade( weapon ); + } + else if ( is_placeable_mine( weapon ) ) + { + old_mine = self get_player_placeable_mine(); + + if ( isdefined( old_mine ) ) + { + self takeweapon( old_mine ); + unacquire_weapon_toggle( old_mine ); + } + + self set_player_placeable_mine( weapon ); + } + + if ( !is_offhand_weapon( weapon ) ) + self maps\mp\zombies\_zm_weapons::take_fallback_weapon(); + + if ( primaryweapons.size >= weapon_limit ) + { + if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) ) + current_weapon = undefined; + + if ( isdefined( current_weapon ) ) + { + if ( !is_offhand_weapon( weapon ) ) + { + if ( current_weapon == "tesla_gun_zm" ) + level.player_drops_tesla_gun = 1; + + if ( issubstr( current_weapon, "knife_ballistic_" ) ) + self notify( "zmb_lost_knife" ); + + self takeweapon( current_weapon ); + unacquire_weapon_toggle( current_weapon ); + } + } + } + + if ( isdefined( level.zombiemode_offhand_weapon_give_override ) ) + { + if ( self [[ level.zombiemode_offhand_weapon_give_override ]]( weapon ) ) + return; + } + + if ( weapon == "cymbal_monkey_zm" ) + { + self maps\mp\zombies\_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); + self play_weapon_vo( weapon, magic_box ); + return; + } + else if ( issubstr( weapon, "knife_ballistic_" ) ) + weapon = self maps\mp\zombies\_zm_melee_weapon::give_ballistic_knife( weapon, issubstr( weapon, "upgraded" ) ); + else if ( weapon == "claymore_zm" ) + { + self thread maps\mp\zombies\_zm_weap_claymore::claymore_setup(); + self play_weapon_vo( weapon, magic_box ); + return; + } + + if ( isdefined( level.zombie_weapons_callbacks ) && isdefined( level.zombie_weapons_callbacks[weapon] ) ) + { + self thread [[ level.zombie_weapons_callbacks[weapon] ]](); + play_weapon_vo( weapon, magic_box ); + return; + } + + if ( !( isdefined( nosound ) && nosound ) ) + self play_sound_on_ent( "purchase" ); + + if ( weapon == "ray_gun_zm" ) + playsoundatposition( "mus_raygun_stinger", ( 0, 0, 0 ) ); + + if ( !is_weapon_upgraded( weapon ) ) + self giveweapon( weapon ); + else + self giveweapon( weapon, 0, self get_pack_a_punch_weapon_options( weapon ) ); + + acquire_weapon_toggle( weapon, self ); + self givestartammo( weapon ); + + if ( !is_offhand_weapon( weapon ) ) + { + if ( !is_melee_weapon( weapon ) ) + self switchtoweapon( weapon ); + else + self switchtoweapon( current_weapon ); + } + + self play_weapon_vo( weapon, magic_box ); +} + +play_weapon_vo( weapon, magic_box ) +{ + if ( isdefined( level._audio_custom_weapon_check ) ) + type = self [[ level._audio_custom_weapon_check ]]( weapon, magic_box ); + else + type = self weapon_type_check( weapon ); + + if ( type == "crappy" ) + return; + + if ( type != "favorite" && type != "upgrade" ) + type = weapon; + + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", type ); +} + +weapon_type_check( weapon ) +{ + if ( !isdefined( self.entity_num ) ) + return "crappy"; + + weapon = get_base_name( weapon ); + + if ( self is_favorite_weapon( weapon ) ) + return "favorite"; + + if ( issubstr( weapon, "upgraded" ) ) + return "upgrade"; + else + return level.zombie_weapons[weapon].vox; +} + +get_player_index( player ) +{ + assert( isplayer( player ) ); + assert( isdefined( player.characterindex ) ); +/# + if ( player.entity_num == 0 && getdvar( _hash_2222BA21 ) != "" ) + { + new_vo_index = getdvarint( _hash_2222BA21 ); + return new_vo_index; + } +#/ + return player.characterindex; +} + +ammo_give( weapon ) +{ + give_ammo = 0; + + if ( !is_offhand_weapon( weapon ) ) + { + weapon = get_weapon_with_attachments( weapon ); + + if ( isdefined( weapon ) ) + { + stockmax = 0; + stockmax = weaponstartammo( weapon ); + clipcount = self getweaponammoclip( weapon ); + currstock = self getammocount( weapon ); + + if ( currstock - clipcount >= stockmax ) + give_ammo = 0; + else + give_ammo = 1; + } + } + else if ( self has_weapon_or_upgrade( weapon ) ) + { + if ( self getammocount( weapon ) < weaponmaxammo( weapon ) ) + give_ammo = 1; + } + + if ( give_ammo ) + { + self play_sound_on_ent( "purchase" ); + self givemaxammo( weapon ); + alt_weap = weaponaltweaponname( weapon ); + + if ( "none" != alt_weap ) + self givemaxammo( alt_weap ); + + return true; + } + + if ( !give_ammo ) + return false; +} + +get_player_weapondata( player, weapon ) +{ + weapondata = []; + + if ( !isdefined( weapon ) ) + weapondata["name"] = player getcurrentweapon(); + else + weapondata["name"] = weapon; + + weapondata["dw_name"] = weapondualwieldweaponname( weapondata["name"] ); + weapondata["alt_name"] = weaponaltweaponname( weapondata["name"] ); + + if ( weapondata["name"] != "none" ) + { + weapondata["clip"] = player getweaponammoclip( weapondata["name"] ); + weapondata["stock"] = player getweaponammostock( weapondata["name"] ); + weapondata["fuel"] = player getweaponammofuel( weapondata["name"] ); + weapondata["heat"] = player isweaponoverheating( 1, weapondata["name"] ); + weapondata["overheat"] = player isweaponoverheating( 0, weapondata["name"] ); + } + else + { + weapondata["clip"] = 0; + weapondata["stock"] = 0; + weapondata["fuel"] = 0; + weapondata["heat"] = 0; + weapondata["overheat"] = 0; + } + + if ( weapondata["dw_name"] != "none" ) + weapondata["lh_clip"] = player getweaponammoclip( weapondata["dw_name"] ); + else + weapondata["lh_clip"] = 0; + + if ( weapondata["alt_name"] != "none" ) + { + weapondata["alt_clip"] = player getweaponammoclip( weapondata["alt_name"] ); + weapondata["alt_stock"] = player getweaponammostock( weapondata["alt_name"] ); + } + else + { + weapondata["alt_clip"] = 0; + weapondata["alt_stock"] = 0; + } + + return weapondata; +} + +weapon_is_better( left, right ) +{ + if ( left != right ) + { + left_upgraded = !isdefined( level.zombie_weapons[left] ); + right_upgraded = !isdefined( level.zombie_weapons[right] ); + + if ( left_upgraded && right_upgraded ) + { + leftatt = get_attachment_index( left ); + rightatt = get_attachment_index( right ); + return leftatt > rightatt; + } + else if ( left_upgraded ) + return 1; + } + + return 0; +} + +merge_weapons( oldweapondata, newweapondata ) +{ + weapondata = []; + weapondata["name"] = "none"; + + if ( weapon_is_better( oldweapondata["name"], newweapondata["name"] ) ) + weapondata["name"] = oldweapondata["name"]; + else + weapondata["name"] = newweapondata["name"]; + + name = weapondata["name"]; + dw_name = weapondualwieldweaponname( name ); + alt_name = weaponaltweaponname( name ); + + if ( name != "none" ) + { + weapondata["clip"] = newweapondata["clip"] + oldweapondata["clip"]; + weapondata["clip"] = int( min( weapondata["clip"], weaponclipsize( name ) ) ); + weapondata["stock"] = newweapondata["stock"] + oldweapondata["stock"]; + weapondata["stock"] = int( min( weapondata["stock"], weaponmaxammo( name ) ) ); + weapondata["fuel"] = newweapondata["fuel"] + oldweapondata["fuel"]; + weapondata["fuel"] = int( min( weapondata["fuel"], weaponfuellife( name ) ) ); + weapondata["heat"] = int( min( newweapondata["heat"], oldweapondata["heat"] ) ); + weapondata["overheat"] = int( min( newweapondata["overheat"], oldweapondata["overheat"] ) ); + } + + if ( dw_name != "none" ) + { + weapondata["lh_clip"] = newweapondata["lh_clip"] + oldweapondata["lh_clip"]; + weapondata["lh_clip"] = int( min( weapondata["lh_clip"], weaponclipsize( dw_name ) ) ); + } + + if ( alt_name != "none" ) + { + weapondata["alt_clip"] = newweapondata["alt_clip"] + oldweapondata["alt_clip"]; + weapondata["alt_clip"] = int( min( weapondata["alt_clip"], weaponclipsize( alt_name ) ) ); + weapondata["alt_stock"] = newweapondata["alt_stock"] + oldweapondata["alt_stock"]; + weapondata["alt_stock"] = int( min( weapondata["alt_stock"], weaponmaxammo( alt_name ) ) ); + } + + return weapondata; +} + +weapondata_give( weapondata ) +{ + current = get_player_weapon_with_same_base( weapondata["name"] ); + + if ( isdefined( current ) ) + { + curweapondata = get_player_weapondata( self, current ); + self takeweapon( current ); + weapondata = merge_weapons( curweapondata, weapondata ); + } + + name = weapondata["name"]; + weapon_give( name, undefined, undefined, 1 ); + dw_name = weapondualwieldweaponname( name ); + alt_name = weaponaltweaponname( name ); + + if ( name != "none" ) + { + self setweaponammoclip( name, weapondata["clip"] ); + self setweaponammostock( name, weapondata["stock"] ); + + if ( isdefined( weapondata["fuel"] ) ) + self setweaponammofuel( name, weapondata["fuel"] ); + + if ( isdefined( weapondata["heat"] ) && isdefined( weapondata["overheat"] ) ) + self setweaponoverheating( weapondata["overheat"], weapondata["heat"], name ); + } + + if ( dw_name != "none" ) + self setweaponammoclip( dw_name, weapondata["lh_clip"] ); + + if ( alt_name != "none" ) + { + self setweaponammoclip( alt_name, weapondata["alt_clip"] ); + self setweaponammostock( alt_name, weapondata["alt_stock"] ); + } +} + +register_zombie_weapon_callback( str_weapon, func ) +{ + if ( !isdefined( level.zombie_weapons_callbacks ) ) + level.zombie_weapons_callbacks = []; + + if ( !isdefined( level.zombie_weapons_callbacks[str_weapon] ) ) + level.zombie_weapons_callbacks[str_weapon] = func; +} diff --git a/ZM/Core/maps/mp/zombies/_zm_zonemgr.gsc b/ZM/Core/maps/mp/zombies/_zm_zonemgr.gsc new file mode 100644 index 0000000..308c9e2 --- /dev/null +++ b/ZM/Core/maps/mp/zombies/_zm_zonemgr.gsc @@ -0,0 +1,1166 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_zonemgr; + +init() +{ +/# + println( "ZM >> Zombiemode Server Scripts Init (_zm_zonemgr.gsc)" ); +#/ + flag_init( "zones_initialized" ); + level.zones = []; + level.zone_flags = []; + level.zone_scanning_active = 0; + + if ( !isdefined( level.create_spawner_list_func ) ) + level.create_spawner_list_func = ::create_spawner_list; +} + +zone_is_enabled( zone_name ) +{ + if ( !isdefined( level.zones ) || !isdefined( level.zones[zone_name] ) || !level.zones[zone_name].is_enabled ) + return false; + + return true; +} + +get_player_zone() +{ + player_zone = undefined; + keys = getarraykeys( level.zones ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( self entity_in_zone( keys[i] ) ) + { + player_zone = keys[i]; + break; + } + } + + return player_zone; +} + +get_zone_from_position( v_pos, ignore_enabled_check ) +{ + zone = undefined; + scr_org = spawn( "script_origin", v_pos ); + keys = getarraykeys( level.zones ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( scr_org entity_in_zone( keys[i], ignore_enabled_check ) ) + { + zone = keys[i]; + break; + } + } + + scr_org delete(); + return zone; +} + +get_zone_magic_boxes( zone_name ) +{ + if ( isdefined( zone_name ) && !zone_is_enabled( zone_name ) ) + return undefined; + + zone = level.zones[zone_name]; + assert( isdefined( zone_name ) ); + return zone.magic_boxes; +} + +get_zone_zbarriers( zone_name ) +{ + if ( isdefined( zone_name ) && !zone_is_enabled( zone_name ) ) + return undefined; + + zone = level.zones[zone_name]; + assert( isdefined( zone_name ) ); + return zone.zbarriers; +} + +get_players_in_zone( zone_name, return_players ) +{ + if ( !zone_is_enabled( zone_name ) ) + return 0; + + zone = level.zones[zone_name]; + num_in_zone = 0; + players_in_zone = []; + players = get_players(); + + for ( i = 0; i < zone.volumes.size; i++ ) + { + for ( j = 0; j < players.size; j++ ) + { + if ( players[j] istouching( zone.volumes[i] ) ) + { + num_in_zone++; + players_in_zone[players_in_zone.size] = players[j]; + } + } + } + + if ( isdefined( return_players ) ) + return players_in_zone; + + return num_in_zone; +} + +player_in_zone( zone_name ) +{ + if ( !zone_is_enabled( zone_name ) ) + return false; + + zone = level.zones[zone_name]; + + for ( i = 0; i < zone.volumes.size; i++ ) + { + players = get_players(); + + for ( j = 0; j < players.size; j++ ) + { + if ( players[j] istouching( zone.volumes[i] ) && !( players[j].sessionstate == "spectator" ) ) + return true; + } + } + + return false; +} + +entity_in_zone( zone_name, ignore_enabled_check ) +{ + if ( !zone_is_enabled( zone_name ) && !( isdefined( ignore_enabled_check ) && ignore_enabled_check ) ) + return false; + + zone = level.zones[zone_name]; + + for ( i = 0; i < zone.volumes.size; i++ ) + { + if ( self istouching( zone.volumes[i] ) ) + return true; + } + + return false; +} + +deactivate_initial_barrier_goals() +{ + special_goals = getstructarray( "exterior_goal", "targetname" ); + + for ( i = 0; i < special_goals.size; i++ ) + { + if ( isdefined( special_goals[i].script_noteworthy ) ) + { + special_goals[i].is_active = 0; + special_goals[i] trigger_off(); + } + } +} + +zone_init( zone_name ) +{ + if ( isdefined( level.zones[zone_name] ) ) + return; +/# + println( "ZM >> zone_init (1) = " + zone_name ); +#/ + level.zones[zone_name] = spawnstruct(); + zone = level.zones[zone_name]; + zone.is_enabled = 0; + zone.is_occupied = 0; + zone.is_active = 0; + zone.adjacent_zones = []; + zone.is_spawning_allowed = 0; + zone.volumes = []; + volumes = getentarray( zone_name, "targetname" ); +/# + println( "ZM >> zone_init (2) = " + volumes.size ); +#/ + for ( i = 0; i < volumes.size; i++ ) + { + if ( volumes[i].classname == "info_volume" ) + zone.volumes[zone.volumes.size] = volumes[i]; + } + + assert( isdefined( zone.volumes[0] ), "zone_init: No volumes found for zone: " + zone_name ); + + if ( isdefined( zone.volumes[0].target ) ) + { + spots = getstructarray( zone.volumes[0].target, "targetname" ); + zone.spawn_locations = []; + zone.dog_locations = []; + zone.screecher_locations = []; + zone.avogadro_locations = []; + zone.inert_locations = []; + zone.quad_locations = []; + zone.leaper_locations = []; + zone.brutus_locations = []; + zone.mechz_locations = []; + zone.astro_locations = []; + zone.napalm_locations = []; + zone.zbarriers = []; + zone.magic_boxes = []; + barricades = getstructarray( "exterior_goal", "targetname" ); + box_locs = getstructarray( "treasure_chest_use", "targetname" ); + + for ( i = 0; i < spots.size; i++ ) + { + spots[i].zone_name = zone_name; + + if ( !( isdefined( spots[i].is_blocked ) && spots[i].is_blocked ) ) + spots[i].is_enabled = 1; + else + spots[i].is_enabled = 0; + + tokens = strtok( spots[i].script_noteworthy, " " ); + + foreach ( token in tokens ) + { + if ( token == "dog_location" ) + { + zone.dog_locations[zone.dog_locations.size] = spots[i]; + continue; + } + + if ( token == "screecher_location" ) + { + zone.screecher_locations[zone.screecher_locations.size] = spots[i]; + continue; + } + + if ( token == "avogadro_location" ) + { + zone.avogadro_locations[zone.avogadro_locations.size] = spots[i]; + continue; + } + + if ( token == "inert_location" ) + { + zone.inert_locations[zone.inert_locations.size] = spots[i]; + continue; + } + + if ( token == "quad_location" ) + { + zone.quad_locations[zone.quad_locations.size] = spots[i]; + continue; + } + + if ( token == "leaper_location" ) + { + zone.leaper_locations[zone.leaper_locations.size] = spots[i]; + continue; + } + + if ( token == "brutus_location" ) + { + zone.brutus_locations[zone.brutus_locations.size] = spots[i]; + continue; + } + + if ( token == "mechz_location" ) + { + zone.mechz_locations[zone.mechz_locations.size] = spots[i]; + continue; + } + + if ( token == "astro_location" ) + { + zone.astro_locations[zone.astro_locations.size] = spots[i]; + continue; + } + + if ( token == "napalm_location" ) + { + zone.napalm_locations[zone.napalm_locations.size] = spots[i]; + continue; + } + + zone.spawn_locations[zone.spawn_locations.size] = spots[i]; + } + + if ( isdefined( spots[i].script_string ) ) + { + barricade_id = spots[i].script_string; + + for ( k = 0; k < barricades.size; k++ ) + { + if ( isdefined( barricades[k].script_string ) && barricades[k].script_string == barricade_id ) + { + nodes = getnodearray( barricades[k].target, "targetname" ); + + for ( j = 0; j < nodes.size; j++ ) + { + if ( isdefined( nodes[j].type ) && nodes[j].type == "Begin" ) + spots[i].target = nodes[j].targetname; + } + } + } + } + } + + for ( i = 0; i < barricades.size; i++ ) + { + targets = getentarray( barricades[i].target, "targetname" ); + + for ( j = 0; j < targets.size; j++ ) + { + if ( targets[j] iszbarrier() && isdefined( targets[j].script_string ) && targets[j].script_string == zone_name ) + zone.zbarriers[zone.zbarriers.size] = targets[j]; + } + } + + for ( i = 0; i < box_locs.size; i++ ) + { + chest_ent = getent( box_locs[i].script_noteworthy + "_zbarrier", "script_noteworthy" ); + + if ( chest_ent entity_in_zone( zone_name, 1 ) ) + zone.magic_boxes[zone.magic_boxes.size] = box_locs[i]; + } + } +} + +reinit_zone_spawners() +{ + zkeys = getarraykeys( level.zones ); + + for ( i = 0; i < level.zones.size; i++ ) + { + zone = level.zones[zkeys[i]]; + + if ( isdefined( zone.volumes[0].target ) ) + { + spots = getstructarray( zone.volumes[0].target, "targetname" ); + zone.spawn_locations = []; + zone.dog_locations = []; + zone.screecher_locations = []; + zone.avogadro_locations = []; + zone.quad_locations = []; + zone.leaper_locations = []; + zone.brutus_locations = []; + zone.mechz_locations = []; + zone.astro_locations = []; + zone.napalm_locations = []; + + for ( j = 0; j < spots.size; j++ ) + { + spots[j].zone_name = zkeys[j]; + + if ( !( isdefined( spots[j].is_blocked ) && spots[j].is_blocked ) ) + spots[j].is_enabled = 1; + else + spots[j].is_enabled = 0; + + tokens = strtok( spots[j].script_noteworthy, " " ); + + foreach ( token in tokens ) + { + if ( token == "dog_location" ) + { + zone.dog_locations[zone.dog_locations.size] = spots[j]; + continue; + } + + if ( token == "screecher_location" ) + { + zone.screecher_locations[zone.screecher_locations.size] = spots[j]; + continue; + } + + if ( token == "avogadro_location" ) + { + zone.avogadro_locations[zone.avogadro_locations.size] = spots[j]; + continue; + } + + if ( token == "quad_location" ) + { + zone.quad_locations[zone.quad_locations.size] = spots[j]; + continue; + } + + if ( token == "leaper_location" ) + { + zone.leaper_locations[zone.leaper_locations.size] = spots[j]; + continue; + } + + if ( token == "brutus_location" ) + { + zone.brutus_locations[zone.brutus_locations.size] = spots[j]; + continue; + } + + if ( token == "mechz_location" ) + { + zone.mechz_locations[zone.mechz_locations.size] = spots[j]; + continue; + } + + if ( token == "astro_location" ) + { + zone.astro_locations[zone.astro_locations.size] = spots[j]; + continue; + } + + if ( token == "napalm_location" ) + { + zone.napalm_locations[zone.napalm_locations.size] = spots[j]; + continue; + } + + zone.spawn_locations[zone.spawn_locations.size] = spots[j]; + } + } + } + } +} + +enable_zone( zone_name ) +{ + assert( isdefined( level.zones ) && isdefined( level.zones[zone_name] ), "enable_zone: zone has not been initialized" ); + + if ( level.zones[zone_name].is_enabled ) + return; + + level.zones[zone_name].is_enabled = 1; + level.zones[zone_name].is_spawning_allowed = 1; + level notify( zone_name ); + spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); + + for ( i = 0; i < spawn_points.size; i++ ) + { + if ( spawn_points[i].script_noteworthy == zone_name ) + spawn_points[i].locked = 0; + } + + entry_points = getstructarray( zone_name + "_barriers", "script_noteworthy" ); + + for ( i = 0; i < entry_points.size; i++ ) + { + entry_points[i].is_active = 1; + entry_points[i] trigger_on(); + } +} + +make_zone_adjacent( main_zone_name, adj_zone_name, flag_name ) +{ + main_zone = level.zones[main_zone_name]; + + if ( !isdefined( main_zone.adjacent_zones[adj_zone_name] ) ) + { + main_zone.adjacent_zones[adj_zone_name] = spawnstruct(); + adj_zone = main_zone.adjacent_zones[adj_zone_name]; + adj_zone.is_connected = 0; + adj_zone.flags_do_or_check = 0; + + if ( isarray( flag_name ) ) + adj_zone.flags = flag_name; + else + adj_zone.flags[0] = flag_name; + } + else + { + assert( !isarray( flag_name ), "make_zone_adjacent: can't mix single and arrays of flags" ); + adj_zone = main_zone.adjacent_zones[adj_zone_name]; + size = adj_zone.flags.size; + adj_zone.flags_do_or_check = 1; + adj_zone.flags[size] = flag_name; + } +} + +add_zone_flags( wait_flag, add_flags ) +{ + if ( !isarray( add_flags ) ) + { + temp = add_flags; + add_flags = []; + add_flags[0] = temp; + } + + keys = getarraykeys( level.zone_flags ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( keys[i] == wait_flag ) + { + level.zone_flags[keys[i]] = arraycombine( level.zone_flags[keys[i]], add_flags, 1, 0 ); + return; + } + } + + level.zone_flags[wait_flag] = add_flags; +} + +add_adjacent_zone( zone_name_a, zone_name_b, flag_name, one_way = 0 ) +{ + if ( !isdefined( level.flag[flag_name] ) ) + flag_init( flag_name ); + + zone_init( zone_name_a ); + zone_init( zone_name_b ); + make_zone_adjacent( zone_name_a, zone_name_b, flag_name ); + + if ( !one_way ) + make_zone_adjacent( zone_name_b, zone_name_a, flag_name ); +} + +setup_zone_flag_waits() +{ + flags = []; + zkeys = getarraykeys( level.zones ); + + for ( z = 0; z < level.zones.size; z++ ) + { + zone = level.zones[zkeys[z]]; + azkeys = getarraykeys( zone.adjacent_zones ); + + for ( az = 0; az < zone.adjacent_zones.size; az++ ) + { + azone = zone.adjacent_zones[azkeys[az]]; + + for ( f = 0; f < azone.flags.size; f++ ) + flags = add_to_array( flags, azone.flags[f], 0 ); + } + } + + for ( i = 0; i < flags.size; i++ ) + level thread zone_flag_wait( flags[i] ); +} + +zone_flag_wait( flag_name ) +{ + if ( !isdefined( level.flag[flag_name] ) ) + flag_init( flag_name ); + + flag_wait( flag_name ); + flags_set = 0; + + for ( z = 0; z < level.zones.size; z++ ) + { + zkeys = getarraykeys( level.zones ); + zone = level.zones[zkeys[z]]; + + for ( az = 0; az < zone.adjacent_zones.size; az++ ) + { + azkeys = getarraykeys( zone.adjacent_zones ); + azone = zone.adjacent_zones[azkeys[az]]; + + if ( !azone.is_connected ) + { + if ( azone.flags_do_or_check ) + { + flags_set = 0; + + for ( f = 0; f < azone.flags.size; f++ ) + { + if ( flag( azone.flags[f] ) ) + { + flags_set = 1; + break; + } + } + } + else + { + flags_set = 1; + + for ( f = 0; f < azone.flags.size; f++ ) + { + if ( !flag( azone.flags[f] ) ) + flags_set = 0; + } + } + + if ( flags_set ) + { + enable_zone( zkeys[z] ); + azone.is_connected = 1; + + if ( !level.zones[azkeys[az]].is_enabled ) + enable_zone( azkeys[az] ); + + if ( flag( "door_can_close" ) ) + azone thread door_close_disconnect( flag_name ); + } + } + } + } + + keys = getarraykeys( level.zone_flags ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( keys[i] == flag_name ) + { + check_flag = level.zone_flags[keys[i]]; + + for ( k = 0; k < check_flag.size; k++ ) + flag_set( check_flag[k] ); + + break; + } + } +} + +door_close_disconnect( flag_name ) +{ + while ( flag( flag_name ) ) + wait 1.0; + + self.is_connected = 0; + level thread zone_flag_wait( flag_name ); +} + +connect_zones( zone_name_a, zone_name_b, one_way = 0 ) +{ + zone_init( zone_name_a ); + zone_init( zone_name_b ); + enable_zone( zone_name_a ); + enable_zone( zone_name_b ); + + if ( !isdefined( level.zones[zone_name_a].adjacent_zones[zone_name_b] ) ) + { + level.zones[zone_name_a].adjacent_zones[zone_name_b] = spawnstruct(); + level.zones[zone_name_a].adjacent_zones[zone_name_b].is_connected = 1; + } + + if ( !one_way ) + { + if ( !isdefined( level.zones[zone_name_b].adjacent_zones[zone_name_a] ) ) + { + level.zones[zone_name_b].adjacent_zones[zone_name_a] = spawnstruct(); + level.zones[zone_name_b].adjacent_zones[zone_name_a].is_connected = 1; + } + } +} + +manage_zones( initial_zone ) +{ + assert( isdefined( initial_zone ), "You must specify an initial zone to manage" ); + deactivate_initial_barrier_goals(); + zone_choke = 0; + spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); + + for ( i = 0; i < spawn_points.size; i++ ) + { + assert( isdefined( spawn_points[i].script_noteworthy ), "player_respawn_point: You must specify a script noteworthy with the zone name" ); + spawn_points[i].locked = 1; + } + + if ( isdefined( level.zone_manager_init_func ) ) + [[ level.zone_manager_init_func ]](); +/# + println( "ZM >> zone_init bbbb (_zm_zonemgr.gsc) = " + initial_zone.size ); +#/ + if ( isarray( initial_zone ) ) + { +/# + println( "ZM >> zone_init aaaa (_zm_zonemgr.gsc) = " + initial_zone[0] ); +#/ + for ( i = 0; i < initial_zone.size; i++ ) + { + zone_init( initial_zone[i] ); + enable_zone( initial_zone[i] ); + } + } + else + { +/# + println( "ZM >> zone_init (_zm_zonemgr.gsc) = " + initial_zone ); +#/ + zone_init( initial_zone ); + enable_zone( initial_zone ); + } + + setup_zone_flag_waits(); + zkeys = getarraykeys( level.zones ); + level.zone_keys = zkeys; + level.newzones = []; + + for ( z = 0; z < zkeys.size; z++ ) + level.newzones[zkeys[z]] = spawnstruct(); + + oldzone = undefined; + flag_set( "zones_initialized" ); + flag_wait( "begin_spawning" ); +/# + level thread _debug_zones(); +#/ + while ( getdvarint( _hash_10873CCA ) == 0 || getdvarint( _hash_762F1309 ) != 0 ) + { + for ( z = 0; z < zkeys.size; z++ ) + { + level.newzones[zkeys[z]].is_active = 0; + level.newzones[zkeys[z]].is_occupied = 0; + } + + a_zone_is_active = 0; + a_zone_is_spawning_allowed = 0; + level.zone_scanning_active = 1; + + for ( z = 0; z < zkeys.size; z++ ) + { + zone = level.zones[zkeys[z]]; + newzone = level.newzones[zkeys[z]]; + + if ( !zone.is_enabled ) + continue; + + if ( isdefined( level.zone_occupied_func ) ) + newzone.is_occupied = [[ level.zone_occupied_func ]]( zkeys[z] ); + else + newzone.is_occupied = player_in_zone( zkeys[z] ); + + if ( newzone.is_occupied ) + { + newzone.is_active = 1; + a_zone_is_active = 1; + + if ( zone.is_spawning_allowed ) + a_zone_is_spawning_allowed = 1; + + if ( !isdefined( oldzone ) || oldzone != newzone ) + { + level notify( "newzoneActive", zkeys[z] ); + oldzone = newzone; + } + + azkeys = getarraykeys( zone.adjacent_zones ); + + for ( az = 0; az < zone.adjacent_zones.size; az++ ) + { + if ( zone.adjacent_zones[azkeys[az]].is_connected && level.zones[azkeys[az]].is_enabled ) + { + level.newzones[azkeys[az]].is_active = 1; + + if ( level.zones[azkeys[az]].is_spawning_allowed ) + a_zone_is_spawning_allowed = 1; + } + } + } + + zone_choke++; + + if ( zone_choke >= 3 ) + { + zone_choke = 0; + wait 0.05; + } + } + + level.zone_scanning_active = 0; + + for ( z = 0; z < zkeys.size; z++ ) + { + level.zones[zkeys[z]].is_active = level.newzones[zkeys[z]].is_active; + level.zones[zkeys[z]].is_occupied = level.newzones[zkeys[z]].is_occupied; + } + + if ( !a_zone_is_active || !a_zone_is_spawning_allowed ) + { + if ( isarray( initial_zone ) ) + { + level.zones[initial_zone[0]].is_active = 1; + level.zones[initial_zone[0]].is_occupied = 1; + level.zones[initial_zone[0]].is_spawning_allowed = 1; + } + else + { + level.zones[initial_zone].is_active = 1; + level.zones[initial_zone].is_occupied = 1; + level.zones[initial_zone].is_spawning_allowed = 1; + } + } + + [[ level.create_spawner_list_func ]]( zkeys ); +/# + debug_show_spawn_locations(); +#/ + level.active_zone_names = maps\mp\zombies\_zm_zonemgr::get_active_zone_names(); + wait 1; + } +} + +debug_show_spawn_locations() +{ +/# + if ( isdefined( level.toggle_show_spawn_locations ) && level.toggle_show_spawn_locations ) + { + host_player = gethostplayer(); + + foreach ( location in level.zombie_spawn_locations ) + { + distance = distance( location.origin, host_player.origin ); + color = ( 0, 0, 1 ); + + if ( distance > getdvarint( _hash_85E6B1CE ) * 12 ) + color = ( 1, 0, 0 ); + + debugstar( location.origin, getdvarint( _hash_BB9101B2 ), color ); + } + } +#/ +} + +old_manage_zones( initial_zone ) +{ + assert( isdefined( initial_zone ), "You must specify an initial zone to manage" ); + deactivate_initial_barrier_goals(); + spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); + + for ( i = 0; i < spawn_points.size; i++ ) + { + assert( isdefined( spawn_points[i].script_noteworthy ), "player_respawn_point: You must specify a script noteworthy with the zone name" ); + spawn_points[i].locked = 1; + } + + if ( isdefined( level.zone_manager_init_func ) ) + [[ level.zone_manager_init_func ]](); +/# + println( "ZM >> zone_init bbbb (_zm_zonemgr.gsc) = " + initial_zone.size ); +#/ + if ( isarray( initial_zone ) ) + { +/# + println( "ZM >> zone_init aaaa (_zm_zonemgr.gsc) = " + initial_zone[0] ); +#/ + for ( i = 0; i < initial_zone.size; i++ ) + { + zone_init( initial_zone[i] ); + enable_zone( initial_zone[i] ); + } + } + else + { +/# + println( "ZM >> zone_init (_zm_zonemgr.gsc) = " + initial_zone ); +#/ + zone_init( initial_zone ); + enable_zone( initial_zone ); + } + + setup_zone_flag_waits(); + zkeys = getarraykeys( level.zones ); + level.zone_keys = zkeys; + flag_set( "zones_initialized" ); + flag_wait( "begin_spawning" ); +/# + level thread _debug_zones(); +#/ + while ( getdvarint( _hash_10873CCA ) == 0 || getdvarint( _hash_762F1309 ) != 0 ) + { + for ( z = 0; z < zkeys.size; z++ ) + { + level.zones[zkeys[z]].is_active = 0; + level.zones[zkeys[z]].is_occupied = 0; + } + + a_zone_is_active = 0; + a_zone_is_spawning_allowed = 0; + + for ( z = 0; z < zkeys.size; z++ ) + { + zone = level.zones[zkeys[z]]; + + if ( !zone.is_enabled ) + continue; + + if ( isdefined( level.zone_occupied_func ) ) + zone.is_occupied = [[ level.zone_occupied_func ]]( zkeys[z] ); + else + zone.is_occupied = player_in_zone( zkeys[z] ); + + if ( zone.is_occupied ) + { + zone.is_active = 1; + a_zone_is_active = 1; + + if ( zone.is_spawning_allowed ) + a_zone_is_spawning_allowed = 1; + + azkeys = getarraykeys( zone.adjacent_zones ); + + for ( az = 0; az < zone.adjacent_zones.size; az++ ) + { + if ( zone.adjacent_zones[azkeys[az]].is_connected && level.zones[azkeys[az]].is_enabled ) + { + level.zones[azkeys[az]].is_active = 1; + + if ( level.zones[azkeys[az]].is_spawning_allowed ) + a_zone_is_spawning_allowed = 1; + } + } + } + } + + if ( !a_zone_is_active || !a_zone_is_spawning_allowed ) + { + if ( isarray( initial_zone ) ) + { + level.zones[initial_zone[0]].is_active = 1; + level.zones[initial_zone[0]].is_occupied = 1; + level.zones[initial_zone[0]].is_spawning_allowed = 1; + } + else + { + level.zones[initial_zone].is_active = 1; + level.zones[initial_zone].is_occupied = 1; + level.zones[initial_zone].is_spawning_allowed = 1; + } + } + + [[ level.create_spawner_list_func ]]( zkeys ); + level.active_zone_names = maps\mp\zombies\_zm_zonemgr::get_active_zone_names(); + wait 1; + } +} + +create_spawner_list( zkeys ) +{ + level.zombie_spawn_locations = []; + level.inert_locations = []; + level.enemy_dog_locations = []; + level.zombie_screecher_locations = []; + level.zombie_avogadro_locations = []; + level.quad_locations = []; + level.zombie_leaper_locations = []; + level.zombie_astro_locations = []; + level.zombie_brutus_locations = []; + level.zombie_mechz_locations = []; + level.zombie_napalm_locations = []; + + for ( z = 0; z < zkeys.size; z++ ) + { + zone = level.zones[zkeys[z]]; + + if ( zone.is_enabled && zone.is_active && zone.is_spawning_allowed ) + { + for ( i = 0; i < zone.spawn_locations.size; i++ ) + { + if ( zone.spawn_locations[i].is_enabled ) + level.zombie_spawn_locations[level.zombie_spawn_locations.size] = zone.spawn_locations[i]; + } + + for ( x = 0; x < zone.inert_locations.size; x++ ) + { + if ( zone.inert_locations[x].is_enabled ) + level.inert_locations[level.inert_locations.size] = zone.inert_locations[x]; + } + + for ( x = 0; x < zone.dog_locations.size; x++ ) + { + if ( zone.dog_locations[x].is_enabled ) + level.enemy_dog_locations[level.enemy_dog_locations.size] = zone.dog_locations[x]; + } + + for ( x = 0; x < zone.screecher_locations.size; x++ ) + { + if ( zone.screecher_locations[x].is_enabled ) + level.zombie_screecher_locations[level.zombie_screecher_locations.size] = zone.screecher_locations[x]; + } + + for ( x = 0; x < zone.avogadro_locations.size; x++ ) + { + if ( zone.avogadro_locations[x].is_enabled ) + level.zombie_avogadro_locations[level.zombie_avogadro_locations.size] = zone.avogadro_locations[x]; + } + + for ( x = 0; x < zone.quad_locations.size; x++ ) + { + if ( zone.quad_locations[x].is_enabled ) + level.quad_locations[level.quad_locations.size] = zone.quad_locations[x]; + } + + for ( x = 0; x < zone.leaper_locations.size; x++ ) + { + if ( zone.leaper_locations[x].is_enabled ) + level.zombie_leaper_locations[level.zombie_leaper_locations.size] = zone.leaper_locations[x]; + } + + for ( x = 0; x < zone.astro_locations.size; x++ ) + { + if ( zone.astro_locations[x].is_enabled ) + level.zombie_astro_locations[level.zombie_astro_locations.size] = zone.astro_locations[x]; + } + + for ( x = 0; x < zone.napalm_locations.size; x++ ) + { + if ( zone.napalm_locations[x].is_enabled ) + level.zombie_napalm_locations[level.zombie_napalm_locations.size] = zone.napalm_locations[x]; + } + + for ( x = 0; x < zone.brutus_locations.size; x++ ) + { + if ( zone.brutus_locations[x].is_enabled ) + level.zombie_brutus_locations[level.zombie_brutus_locations.size] = zone.brutus_locations[x]; + } + + for ( x = 0; x < zone.mechz_locations.size; x++ ) + { + if ( zone.mechz_locations[x].is_enabled ) + level.zombie_mechz_locations[level.zombie_mechz_locations.size] = zone.mechz_locations[x]; + } + } + } +} + +get_active_zone_names() +{ + ret_list = []; + + if ( !isdefined( level.zone_keys ) ) + return ret_list; + + while ( level.zone_scanning_active ) + wait 0.05; + + for ( i = 0; i < level.zone_keys.size; i++ ) + { + if ( level.zones[level.zone_keys[i]].is_active ) + ret_list[ret_list.size] = level.zone_keys[i]; + } + + return ret_list; +} + +_init_debug_zones() +{ + current_y = 30; + current_x = 20; + xloc = []; + xloc[0] = 50; + xloc[1] = 60; + xloc[2] = 100; + xloc[3] = 130; + xloc[4] = 170; + zkeys = getarraykeys( level.zones ); + + for ( i = 0; i < zkeys.size; i++ ) + { + zonename = zkeys[i]; + zone = level.zones[zonename]; + zone.debug_hud = []; + + for ( j = 0; j < 5; j++ ) + { + zone.debug_hud[j] = newdebughudelem(); + + if ( !j ) + zone.debug_hud[j].alignx = "right"; + else + zone.debug_hud[j].alignx = "left"; + + zone.debug_hud[j].x = xloc[j]; + zone.debug_hud[j].y = current_y; + } + + current_y += 10; + zone.debug_hud[0] settext( zonename ); + } +} + +_destroy_debug_zones() +{ + zkeys = getarraykeys( level.zones ); + + for ( i = 0; i < zkeys.size; i++ ) + { + zonename = zkeys[i]; + zone = level.zones[zonename]; + + for ( j = 0; j < 5; j++ ) + { + zone.debug_hud[j] destroy(); + zone.debug_hud[j] = undefined; + } + } +} + +_debug_zones() +{ + enabled = 0; + + if ( getdvar( _hash_10E35BC4 ) == "" ) + setdvar( "zombiemode_debug_zones", "0" ); + + while ( true ) + { + wasenabled = enabled; + enabled = getdvarint( _hash_10E35BC4 ); + + if ( enabled && !wasenabled ) + _init_debug_zones(); + else if ( !enabled && wasenabled ) + _destroy_debug_zones(); + + if ( enabled ) + { + zkeys = getarraykeys( level.zones ); + + for ( i = 0; i < zkeys.size; i++ ) + { + zonename = zkeys[i]; + zone = level.zones[zonename]; + text = zonename; + zone.debug_hud[0] settext( text ); + + if ( zone.is_enabled ) + { + text += " Enabled"; + zone.debug_hud[1] settext( "Enabled" ); + } + else + zone.debug_hud[1] settext( "" ); + + if ( zone.is_active ) + { + text += " Active"; + zone.debug_hud[2] settext( "Active" ); + } + else + zone.debug_hud[2] settext( "" ); + + if ( zone.is_occupied ) + { + text += " Occupied"; + zone.debug_hud[3] settext( "Occupied" ); + } + else + zone.debug_hud[3] settext( "" ); + + if ( zone.is_spawning_allowed ) + { + text += " SpawningAllowed"; + zone.debug_hud[4] settext( "SpawningAllowed" ); + } + else + zone.debug_hud[4] settext( "" ); +/# + println( "ZM >> DEBUG=" + text ); +#/ + } + } + + wait 0.1; + } +} + +is_player_in_zone( zone_name ) +{ + zone = level.zones[zone_name]; + + for ( i = 0; i < zone.volumes.size; i++ ) + { + if ( self istouching( level.zones[zone_name].volumes[i] ) && !( self.sessionstate == "spectator" ) ) + return true; + } + + return false; +} diff --git a/ZM/Maps/Buried/aitype/zm_ally_cdc.gsc b/ZM/Maps/Buried/aitype/zm_ally_cdc.gsc new file mode 100644 index 0000000..53957ac --- /dev/null +++ b/ZM/Maps/Buried/aitype/zm_ally_cdc.gsc @@ -0,0 +1,58 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\c_zom_ally_cdc; + +#using_animtree("zm_ally"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %pb_laststand_idle; + dummy_anim_ref = %pb_stand_alert; + dummy_anim_ref = %pb_crouch_alert; + dummy_anim_ref = %pb_afterlife_laststand_idle; + dummy_anim_ref = %ai_actor_elec_chair_idle; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_ally_basic.asd"; + self.animtree = "zm_ally.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "allies"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\c_zom_ally_cdc::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "allies" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_ally_basic" ); + character\c_zom_ally_cdc::precache(); +} diff --git a/ZM/Maps/Buried/aitype/zm_buried_basic_01_char_01.gsc b/ZM/Maps/Buried/aitype/zm_buried_basic_01_char_01.gsc new file mode 100644 index 0000000..6cda629 --- /dev/null +++ b/ZM/Maps/Buried/aitype/zm_buried_basic_01_char_01.gsc @@ -0,0 +1,387 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\c_zom_zombie_buried_civilian1; + +#using_animtree("zm_buried_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_inert_look_v1; + dummy_anim_ref = %ai_zombie_inert_look_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v1; + dummy_anim_ref = %ai_zombie_inert_stagger_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v3; + dummy_anim_ref = %ai_zombie_inert_stagger_v4; + dummy_anim_ref = %ai_zombie_inert_circle_v1; + dummy_anim_ref = %ai_zombie_inert_2_walk_v11; + dummy_anim_ref = %ai_zombie_inert_2_walk_v12; + dummy_anim_ref = %ai_zombie_inert_2_walk_v13; + dummy_anim_ref = %ai_zombie_inert_2_walk_v14; + dummy_anim_ref = %ai_zombie_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_v5; + dummy_anim_ref = %ai_zombie_crawl_inert_v6; + dummy_anim_ref = %ai_zombie_crawl_inert_v7; + dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_slipslide_collapse; + dummy_anim_ref = %ai_zombie_walk_slipslide; + dummy_anim_ref = %ai_zombie_walk_slipslide_a; + dummy_anim_ref = %ai_zombie_run_slipslide; + dummy_anim_ref = %ai_zombie_run_slipslide_a; + dummy_anim_ref = %ai_zombie_sprint_slipslide; + dummy_anim_ref = %ai_zombie_sprint_slipslide_a; + dummy_anim_ref = %ai_zombie_stand_slipslide_recover; + dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; + dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; + dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; + dummy_anim_ref = %ai_zombie_thundergun_hit; + dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; + dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; + dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; + dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; + dummy_anim_ref = %ai_zombie_thundergun_getup; + dummy_anim_ref = %ai_zombie_thundergun_getup_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_c; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; + dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; + dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; + dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; + dummy_anim_ref = %ai_zombie_thundergun_getup_a; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; + dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; + dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; + dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; + dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; + dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; + dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; + dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; + dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; + dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; + dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; + dummy_anim_ref = %ai_zombie_jump_across_120; + dummy_anim_ref = %ai_zombie_crawl_jump_across_120; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_72; + dummy_anim_ref = %ai_zombie_crawl_jump_down_72; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_176; + dummy_anim_ref = %ai_zombie_crawl_jump_down_176; + dummy_anim_ref = %ai_zombie_jump_down_190; + dummy_anim_ref = %ai_zombie_crawl_jump_down_189; + dummy_anim_ref = %ai_zombie_jump_down_222; + dummy_anim_ref = %ai_zombie_crawl_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_down_240; + dummy_anim_ref = %ai_zombie_crawl_jump_down_240; + dummy_anim_ref = %ai_zombie_jump_up_96; + dummy_anim_ref = %ai_zombie_crawl_jump_up_96; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_154; + dummy_anim_ref = %ai_zombie_crawl_jump_up_154; + dummy_anim_ref = %ai_zombie_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; + dummy_anim_ref = %ai_zombie_jump_up_startrailing; + dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; + dummy_anim_ref = %ai_zombie_jump_down_startrailing; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_traverse_48; + dummy_anim_ref = %ai_zombie_traverse_48; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_buried_basic.asd"; + self.animtree = "zm_buried_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\c_zom_zombie_buried_civilian1::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" ); + character\c_zom_zombie_buried_civilian1::precache(); +} diff --git a/ZM/Maps/Buried/aitype/zm_buried_basic_01_char_02.gsc b/ZM/Maps/Buried/aitype/zm_buried_basic_01_char_02.gsc new file mode 100644 index 0000000..99cdf7a --- /dev/null +++ b/ZM/Maps/Buried/aitype/zm_buried_basic_01_char_02.gsc @@ -0,0 +1,405 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_zombie_buried_civilian2; +#include character\c_zom_zombie_buried_civilian2_nohat; + +#using_animtree("zm_buried_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_inert_look_v1; + dummy_anim_ref = %ai_zombie_inert_look_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v1; + dummy_anim_ref = %ai_zombie_inert_stagger_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v3; + dummy_anim_ref = %ai_zombie_inert_stagger_v4; + dummy_anim_ref = %ai_zombie_inert_circle_v1; + dummy_anim_ref = %ai_zombie_inert_2_walk_v11; + dummy_anim_ref = %ai_zombie_inert_2_walk_v12; + dummy_anim_ref = %ai_zombie_inert_2_walk_v13; + dummy_anim_ref = %ai_zombie_inert_2_walk_v14; + dummy_anim_ref = %ai_zombie_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_v5; + dummy_anim_ref = %ai_zombie_crawl_inert_v6; + dummy_anim_ref = %ai_zombie_crawl_inert_v7; + dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_slipslide_collapse; + dummy_anim_ref = %ai_zombie_walk_slipslide; + dummy_anim_ref = %ai_zombie_walk_slipslide_a; + dummy_anim_ref = %ai_zombie_run_slipslide; + dummy_anim_ref = %ai_zombie_run_slipslide_a; + dummy_anim_ref = %ai_zombie_sprint_slipslide; + dummy_anim_ref = %ai_zombie_sprint_slipslide_a; + dummy_anim_ref = %ai_zombie_stand_slipslide_recover; + dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; + dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; + dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; + dummy_anim_ref = %ai_zombie_thundergun_hit; + dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; + dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; + dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; + dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; + dummy_anim_ref = %ai_zombie_thundergun_getup; + dummy_anim_ref = %ai_zombie_thundergun_getup_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_c; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; + dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; + dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; + dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; + dummy_anim_ref = %ai_zombie_thundergun_getup_a; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; + dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; + dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; + dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; + dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; + dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; + dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; + dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; + dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; + dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; + dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; + dummy_anim_ref = %ai_zombie_jump_across_120; + dummy_anim_ref = %ai_zombie_crawl_jump_across_120; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_72; + dummy_anim_ref = %ai_zombie_crawl_jump_down_72; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_176; + dummy_anim_ref = %ai_zombie_crawl_jump_down_176; + dummy_anim_ref = %ai_zombie_jump_down_190; + dummy_anim_ref = %ai_zombie_crawl_jump_down_189; + dummy_anim_ref = %ai_zombie_jump_down_222; + dummy_anim_ref = %ai_zombie_crawl_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_down_240; + dummy_anim_ref = %ai_zombie_crawl_jump_down_240; + dummy_anim_ref = %ai_zombie_jump_up_96; + dummy_anim_ref = %ai_zombie_crawl_jump_up_96; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_154; + dummy_anim_ref = %ai_zombie_crawl_jump_up_154; + dummy_anim_ref = %ai_zombie_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; + dummy_anim_ref = %ai_zombie_jump_up_startrailing; + dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; + dummy_anim_ref = %ai_zombie_jump_down_startrailing; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_traverse_48; + dummy_anim_ref = %ai_zombie_traverse_48; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_buried_basic.asd"; + self.animtree = "zm_buried_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 3 ); + + switch ( randchar ) + { + case 0: + character\c_zom_zombie_buried_civilian2::main(); + break; + case 1: + character\c_zom_zombie_buried_civilian2_nohat::main(); + break; + case 2: + character\c_zom_zombie_buried_civilian2_nohat::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" ); + character\c_zom_zombie_buried_civilian2::precache(); + character\c_zom_zombie_buried_civilian2_nohat::precache(); + character\c_zom_zombie_buried_civilian2_nohat::precache(); +} diff --git a/ZM/Maps/Buried/aitype/zm_buried_basic_01_char_03.gsc b/ZM/Maps/Buried/aitype/zm_buried_basic_01_char_03.gsc new file mode 100644 index 0000000..eb130a2 --- /dev/null +++ b/ZM/Maps/Buried/aitype/zm_buried_basic_01_char_03.gsc @@ -0,0 +1,405 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_zombie_buried_civilian3; +#include character\c_zom_zombie_buried_civilian3_nohat; + +#using_animtree("zm_buried_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_inert_look_v1; + dummy_anim_ref = %ai_zombie_inert_look_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v1; + dummy_anim_ref = %ai_zombie_inert_stagger_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v3; + dummy_anim_ref = %ai_zombie_inert_stagger_v4; + dummy_anim_ref = %ai_zombie_inert_circle_v1; + dummy_anim_ref = %ai_zombie_inert_2_walk_v11; + dummy_anim_ref = %ai_zombie_inert_2_walk_v12; + dummy_anim_ref = %ai_zombie_inert_2_walk_v13; + dummy_anim_ref = %ai_zombie_inert_2_walk_v14; + dummy_anim_ref = %ai_zombie_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_v5; + dummy_anim_ref = %ai_zombie_crawl_inert_v6; + dummy_anim_ref = %ai_zombie_crawl_inert_v7; + dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_slipslide_collapse; + dummy_anim_ref = %ai_zombie_walk_slipslide; + dummy_anim_ref = %ai_zombie_walk_slipslide_a; + dummy_anim_ref = %ai_zombie_run_slipslide; + dummy_anim_ref = %ai_zombie_run_slipslide_a; + dummy_anim_ref = %ai_zombie_sprint_slipslide; + dummy_anim_ref = %ai_zombie_sprint_slipslide_a; + dummy_anim_ref = %ai_zombie_stand_slipslide_recover; + dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; + dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; + dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; + dummy_anim_ref = %ai_zombie_thundergun_hit; + dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; + dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; + dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; + dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; + dummy_anim_ref = %ai_zombie_thundergun_getup; + dummy_anim_ref = %ai_zombie_thundergun_getup_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_c; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; + dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; + dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; + dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; + dummy_anim_ref = %ai_zombie_thundergun_getup_a; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; + dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; + dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; + dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; + dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; + dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; + dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; + dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; + dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; + dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; + dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; + dummy_anim_ref = %ai_zombie_jump_across_120; + dummy_anim_ref = %ai_zombie_crawl_jump_across_120; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_72; + dummy_anim_ref = %ai_zombie_crawl_jump_down_72; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_176; + dummy_anim_ref = %ai_zombie_crawl_jump_down_176; + dummy_anim_ref = %ai_zombie_jump_down_190; + dummy_anim_ref = %ai_zombie_crawl_jump_down_189; + dummy_anim_ref = %ai_zombie_jump_down_222; + dummy_anim_ref = %ai_zombie_crawl_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_down_240; + dummy_anim_ref = %ai_zombie_crawl_jump_down_240; + dummy_anim_ref = %ai_zombie_jump_up_96; + dummy_anim_ref = %ai_zombie_crawl_jump_up_96; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_154; + dummy_anim_ref = %ai_zombie_crawl_jump_up_154; + dummy_anim_ref = %ai_zombie_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; + dummy_anim_ref = %ai_zombie_jump_up_startrailing; + dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; + dummy_anim_ref = %ai_zombie_jump_down_startrailing; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_traverse_48; + dummy_anim_ref = %ai_zombie_traverse_48; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_buried_basic.asd"; + self.animtree = "zm_buried_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 3 ); + + switch ( randchar ) + { + case 0: + character\c_zom_zombie_buried_civilian3::main(); + break; + case 1: + character\c_zom_zombie_buried_civilian3_nohat::main(); + break; + case 2: + character\c_zom_zombie_buried_civilian3_nohat::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" ); + character\c_zom_zombie_buried_civilian3::precache(); + character\c_zom_zombie_buried_civilian3_nohat::precache(); + character\c_zom_zombie_buried_civilian3_nohat::precache(); +} diff --git a/ZM/Maps/Buried/aitype/zm_buried_basic_01_char_04.gsc b/ZM/Maps/Buried/aitype/zm_buried_basic_01_char_04.gsc new file mode 100644 index 0000000..d9b70d7 --- /dev/null +++ b/ZM/Maps/Buried/aitype/zm_buried_basic_01_char_04.gsc @@ -0,0 +1,405 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_zombie_buried_civilian4; +#include character\c_zom_zombie_buried_civilian4_nohat; + +#using_animtree("zm_buried_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_inert_look_v1; + dummy_anim_ref = %ai_zombie_inert_look_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v1; + dummy_anim_ref = %ai_zombie_inert_stagger_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v3; + dummy_anim_ref = %ai_zombie_inert_stagger_v4; + dummy_anim_ref = %ai_zombie_inert_circle_v1; + dummy_anim_ref = %ai_zombie_inert_2_walk_v11; + dummy_anim_ref = %ai_zombie_inert_2_walk_v12; + dummy_anim_ref = %ai_zombie_inert_2_walk_v13; + dummy_anim_ref = %ai_zombie_inert_2_walk_v14; + dummy_anim_ref = %ai_zombie_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_v5; + dummy_anim_ref = %ai_zombie_crawl_inert_v6; + dummy_anim_ref = %ai_zombie_crawl_inert_v7; + dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_slipslide_collapse; + dummy_anim_ref = %ai_zombie_walk_slipslide; + dummy_anim_ref = %ai_zombie_walk_slipslide_a; + dummy_anim_ref = %ai_zombie_run_slipslide; + dummy_anim_ref = %ai_zombie_run_slipslide_a; + dummy_anim_ref = %ai_zombie_sprint_slipslide; + dummy_anim_ref = %ai_zombie_sprint_slipslide_a; + dummy_anim_ref = %ai_zombie_stand_slipslide_recover; + dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; + dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; + dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; + dummy_anim_ref = %ai_zombie_thundergun_hit; + dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; + dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; + dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; + dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; + dummy_anim_ref = %ai_zombie_thundergun_getup; + dummy_anim_ref = %ai_zombie_thundergun_getup_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_c; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; + dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; + dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; + dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; + dummy_anim_ref = %ai_zombie_thundergun_getup_a; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; + dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; + dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; + dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; + dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; + dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; + dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; + dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; + dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; + dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; + dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; + dummy_anim_ref = %ai_zombie_jump_across_120; + dummy_anim_ref = %ai_zombie_crawl_jump_across_120; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_72; + dummy_anim_ref = %ai_zombie_crawl_jump_down_72; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_176; + dummy_anim_ref = %ai_zombie_crawl_jump_down_176; + dummy_anim_ref = %ai_zombie_jump_down_190; + dummy_anim_ref = %ai_zombie_crawl_jump_down_189; + dummy_anim_ref = %ai_zombie_jump_down_222; + dummy_anim_ref = %ai_zombie_crawl_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_down_240; + dummy_anim_ref = %ai_zombie_crawl_jump_down_240; + dummy_anim_ref = %ai_zombie_jump_up_96; + dummy_anim_ref = %ai_zombie_crawl_jump_up_96; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_154; + dummy_anim_ref = %ai_zombie_crawl_jump_up_154; + dummy_anim_ref = %ai_zombie_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; + dummy_anim_ref = %ai_zombie_jump_up_startrailing; + dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; + dummy_anim_ref = %ai_zombie_jump_down_startrailing; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_traverse_48; + dummy_anim_ref = %ai_zombie_traverse_48; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_buried_basic.asd"; + self.animtree = "zm_buried_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 3 ); + + switch ( randchar ) + { + case 0: + character\c_zom_zombie_buried_civilian4::main(); + break; + case 1: + character\c_zom_zombie_buried_civilian4_nohat::main(); + break; + case 2: + character\c_zom_zombie_buried_civilian4_nohat::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" ); + character\c_zom_zombie_buried_civilian4::precache(); + character\c_zom_zombie_buried_civilian4_nohat::precache(); + character\c_zom_zombie_buried_civilian4_nohat::precache(); +} diff --git a/ZM/Maps/Buried/aitype/zm_buried_basic_01_char_05.gsc b/ZM/Maps/Buried/aitype/zm_buried_basic_01_char_05.gsc new file mode 100644 index 0000000..e17ac44 --- /dev/null +++ b/ZM/Maps/Buried/aitype/zm_buried_basic_01_char_05.gsc @@ -0,0 +1,409 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_zombie_buried_civilian5; +#include character\c_zom_zombie_buried_civilian5_nohat; + +#using_animtree("zm_buried_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_inert_look_v1; + dummy_anim_ref = %ai_zombie_inert_look_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v1; + dummy_anim_ref = %ai_zombie_inert_stagger_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v3; + dummy_anim_ref = %ai_zombie_inert_stagger_v4; + dummy_anim_ref = %ai_zombie_inert_circle_v1; + dummy_anim_ref = %ai_zombie_inert_2_walk_v11; + dummy_anim_ref = %ai_zombie_inert_2_walk_v12; + dummy_anim_ref = %ai_zombie_inert_2_walk_v13; + dummy_anim_ref = %ai_zombie_inert_2_walk_v14; + dummy_anim_ref = %ai_zombie_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_v5; + dummy_anim_ref = %ai_zombie_crawl_inert_v6; + dummy_anim_ref = %ai_zombie_crawl_inert_v7; + dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_slipslide_collapse; + dummy_anim_ref = %ai_zombie_walk_slipslide; + dummy_anim_ref = %ai_zombie_walk_slipslide_a; + dummy_anim_ref = %ai_zombie_run_slipslide; + dummy_anim_ref = %ai_zombie_run_slipslide_a; + dummy_anim_ref = %ai_zombie_sprint_slipslide; + dummy_anim_ref = %ai_zombie_sprint_slipslide_a; + dummy_anim_ref = %ai_zombie_stand_slipslide_recover; + dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; + dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; + dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; + dummy_anim_ref = %ai_zombie_thundergun_hit; + dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; + dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; + dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; + dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; + dummy_anim_ref = %ai_zombie_thundergun_getup; + dummy_anim_ref = %ai_zombie_thundergun_getup_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_c; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; + dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; + dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; + dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; + dummy_anim_ref = %ai_zombie_thundergun_getup_a; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; + dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; + dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; + dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; + dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; + dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; + dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; + dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; + dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; + dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; + dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; + dummy_anim_ref = %ai_zombie_jump_across_120; + dummy_anim_ref = %ai_zombie_crawl_jump_across_120; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_72; + dummy_anim_ref = %ai_zombie_crawl_jump_down_72; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_176; + dummy_anim_ref = %ai_zombie_crawl_jump_down_176; + dummy_anim_ref = %ai_zombie_jump_down_190; + dummy_anim_ref = %ai_zombie_crawl_jump_down_189; + dummy_anim_ref = %ai_zombie_jump_down_222; + dummy_anim_ref = %ai_zombie_crawl_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_down_240; + dummy_anim_ref = %ai_zombie_crawl_jump_down_240; + dummy_anim_ref = %ai_zombie_jump_up_96; + dummy_anim_ref = %ai_zombie_crawl_jump_up_96; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_154; + dummy_anim_ref = %ai_zombie_crawl_jump_up_154; + dummy_anim_ref = %ai_zombie_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; + dummy_anim_ref = %ai_zombie_jump_up_startrailing; + dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; + dummy_anim_ref = %ai_zombie_jump_down_startrailing; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_traverse_48; + dummy_anim_ref = %ai_zombie_traverse_48; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_buried_basic.asd"; + self.animtree = "zm_buried_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 4 ); + + switch ( randchar ) + { + case 0: + character\c_zom_zombie_buried_civilian5::main(); + break; + case 1: + character\c_zom_zombie_buried_civilian5_nohat::main(); + break; + case 2: + character\c_zom_zombie_buried_civilian5_nohat::main(); + break; + case 3: + character\c_zom_zombie_buried_civilian5_nohat::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" ); + character\c_zom_zombie_buried_civilian5::precache(); + character\c_zom_zombie_buried_civilian5_nohat::precache(); + character\c_zom_zombie_buried_civilian5_nohat::precache(); + character\c_zom_zombie_buried_civilian5_nohat::precache(); +} diff --git a/ZM/Maps/Buried/aitype/zm_buried_basic_02_char_01.gsc b/ZM/Maps/Buried/aitype/zm_buried_basic_02_char_01.gsc new file mode 100644 index 0000000..711d414 --- /dev/null +++ b/ZM/Maps/Buried/aitype/zm_buried_basic_02_char_01.gsc @@ -0,0 +1,387 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\c_zom_zombie_buried_miner1; + +#using_animtree("zm_buried_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_inert_look_v1; + dummy_anim_ref = %ai_zombie_inert_look_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v1; + dummy_anim_ref = %ai_zombie_inert_stagger_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v3; + dummy_anim_ref = %ai_zombie_inert_stagger_v4; + dummy_anim_ref = %ai_zombie_inert_circle_v1; + dummy_anim_ref = %ai_zombie_inert_2_walk_v11; + dummy_anim_ref = %ai_zombie_inert_2_walk_v12; + dummy_anim_ref = %ai_zombie_inert_2_walk_v13; + dummy_anim_ref = %ai_zombie_inert_2_walk_v14; + dummy_anim_ref = %ai_zombie_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_v5; + dummy_anim_ref = %ai_zombie_crawl_inert_v6; + dummy_anim_ref = %ai_zombie_crawl_inert_v7; + dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_slipslide_collapse; + dummy_anim_ref = %ai_zombie_walk_slipslide; + dummy_anim_ref = %ai_zombie_walk_slipslide_a; + dummy_anim_ref = %ai_zombie_run_slipslide; + dummy_anim_ref = %ai_zombie_run_slipslide_a; + dummy_anim_ref = %ai_zombie_sprint_slipslide; + dummy_anim_ref = %ai_zombie_sprint_slipslide_a; + dummy_anim_ref = %ai_zombie_stand_slipslide_recover; + dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; + dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; + dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; + dummy_anim_ref = %ai_zombie_thundergun_hit; + dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; + dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; + dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; + dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; + dummy_anim_ref = %ai_zombie_thundergun_getup; + dummy_anim_ref = %ai_zombie_thundergun_getup_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_c; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; + dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; + dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; + dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; + dummy_anim_ref = %ai_zombie_thundergun_getup_a; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; + dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; + dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; + dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; + dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; + dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; + dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; + dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; + dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; + dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; + dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; + dummy_anim_ref = %ai_zombie_jump_across_120; + dummy_anim_ref = %ai_zombie_crawl_jump_across_120; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_72; + dummy_anim_ref = %ai_zombie_crawl_jump_down_72; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_176; + dummy_anim_ref = %ai_zombie_crawl_jump_down_176; + dummy_anim_ref = %ai_zombie_jump_down_190; + dummy_anim_ref = %ai_zombie_crawl_jump_down_189; + dummy_anim_ref = %ai_zombie_jump_down_222; + dummy_anim_ref = %ai_zombie_crawl_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_down_240; + dummy_anim_ref = %ai_zombie_crawl_jump_down_240; + dummy_anim_ref = %ai_zombie_jump_up_96; + dummy_anim_ref = %ai_zombie_crawl_jump_up_96; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_154; + dummy_anim_ref = %ai_zombie_crawl_jump_up_154; + dummy_anim_ref = %ai_zombie_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; + dummy_anim_ref = %ai_zombie_jump_up_startrailing; + dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; + dummy_anim_ref = %ai_zombie_jump_down_startrailing; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_traverse_48; + dummy_anim_ref = %ai_zombie_traverse_48; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_buried_basic.asd"; + self.animtree = "zm_buried_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\c_zom_zombie_buried_miner1::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" ); + character\c_zom_zombie_buried_miner1::precache(); +} diff --git a/ZM/Maps/Buried/aitype/zm_buried_basic_02_char_02.gsc b/ZM/Maps/Buried/aitype/zm_buried_basic_02_char_02.gsc new file mode 100644 index 0000000..9a661a2 --- /dev/null +++ b/ZM/Maps/Buried/aitype/zm_buried_basic_02_char_02.gsc @@ -0,0 +1,405 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_zombie_buried_miner2; +#include character\c_zom_zombie_buried_miner2_nohat; + +#using_animtree("zm_buried_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_inert_look_v1; + dummy_anim_ref = %ai_zombie_inert_look_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v1; + dummy_anim_ref = %ai_zombie_inert_stagger_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v3; + dummy_anim_ref = %ai_zombie_inert_stagger_v4; + dummy_anim_ref = %ai_zombie_inert_circle_v1; + dummy_anim_ref = %ai_zombie_inert_2_walk_v11; + dummy_anim_ref = %ai_zombie_inert_2_walk_v12; + dummy_anim_ref = %ai_zombie_inert_2_walk_v13; + dummy_anim_ref = %ai_zombie_inert_2_walk_v14; + dummy_anim_ref = %ai_zombie_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_v5; + dummy_anim_ref = %ai_zombie_crawl_inert_v6; + dummy_anim_ref = %ai_zombie_crawl_inert_v7; + dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_slipslide_collapse; + dummy_anim_ref = %ai_zombie_walk_slipslide; + dummy_anim_ref = %ai_zombie_walk_slipslide_a; + dummy_anim_ref = %ai_zombie_run_slipslide; + dummy_anim_ref = %ai_zombie_run_slipslide_a; + dummy_anim_ref = %ai_zombie_sprint_slipslide; + dummy_anim_ref = %ai_zombie_sprint_slipslide_a; + dummy_anim_ref = %ai_zombie_stand_slipslide_recover; + dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; + dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; + dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; + dummy_anim_ref = %ai_zombie_thundergun_hit; + dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; + dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; + dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; + dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; + dummy_anim_ref = %ai_zombie_thundergun_getup; + dummy_anim_ref = %ai_zombie_thundergun_getup_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_c; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; + dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; + dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; + dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; + dummy_anim_ref = %ai_zombie_thundergun_getup_a; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; + dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; + dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; + dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; + dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; + dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; + dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; + dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; + dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; + dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; + dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; + dummy_anim_ref = %ai_zombie_jump_across_120; + dummy_anim_ref = %ai_zombie_crawl_jump_across_120; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_72; + dummy_anim_ref = %ai_zombie_crawl_jump_down_72; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_176; + dummy_anim_ref = %ai_zombie_crawl_jump_down_176; + dummy_anim_ref = %ai_zombie_jump_down_190; + dummy_anim_ref = %ai_zombie_crawl_jump_down_189; + dummy_anim_ref = %ai_zombie_jump_down_222; + dummy_anim_ref = %ai_zombie_crawl_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_down_240; + dummy_anim_ref = %ai_zombie_crawl_jump_down_240; + dummy_anim_ref = %ai_zombie_jump_up_96; + dummy_anim_ref = %ai_zombie_crawl_jump_up_96; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_154; + dummy_anim_ref = %ai_zombie_crawl_jump_up_154; + dummy_anim_ref = %ai_zombie_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; + dummy_anim_ref = %ai_zombie_jump_up_startrailing; + dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; + dummy_anim_ref = %ai_zombie_jump_down_startrailing; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_traverse_48; + dummy_anim_ref = %ai_zombie_traverse_48; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_buried_basic.asd"; + self.animtree = "zm_buried_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 3 ); + + switch ( randchar ) + { + case 0: + character\c_zom_zombie_buried_miner2::main(); + break; + case 1: + character\c_zom_zombie_buried_miner2_nohat::main(); + break; + case 2: + character\c_zom_zombie_buried_miner2_nohat::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" ); + character\c_zom_zombie_buried_miner2::precache(); + character\c_zom_zombie_buried_miner2_nohat::precache(); + character\c_zom_zombie_buried_miner2_nohat::precache(); +} diff --git a/ZM/Maps/Buried/aitype/zm_buried_basic_02_char_03.gsc b/ZM/Maps/Buried/aitype/zm_buried_basic_02_char_03.gsc new file mode 100644 index 0000000..02f8ecb --- /dev/null +++ b/ZM/Maps/Buried/aitype/zm_buried_basic_02_char_03.gsc @@ -0,0 +1,405 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_zombie_buried_miner3; +#include character\c_zom_zombie_buried_miner3_nohat; + +#using_animtree("zm_buried_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_inert_look_v1; + dummy_anim_ref = %ai_zombie_inert_look_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v1; + dummy_anim_ref = %ai_zombie_inert_stagger_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v3; + dummy_anim_ref = %ai_zombie_inert_stagger_v4; + dummy_anim_ref = %ai_zombie_inert_circle_v1; + dummy_anim_ref = %ai_zombie_inert_2_walk_v11; + dummy_anim_ref = %ai_zombie_inert_2_walk_v12; + dummy_anim_ref = %ai_zombie_inert_2_walk_v13; + dummy_anim_ref = %ai_zombie_inert_2_walk_v14; + dummy_anim_ref = %ai_zombie_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_v5; + dummy_anim_ref = %ai_zombie_crawl_inert_v6; + dummy_anim_ref = %ai_zombie_crawl_inert_v7; + dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_slipslide_collapse; + dummy_anim_ref = %ai_zombie_walk_slipslide; + dummy_anim_ref = %ai_zombie_walk_slipslide_a; + dummy_anim_ref = %ai_zombie_run_slipslide; + dummy_anim_ref = %ai_zombie_run_slipslide_a; + dummy_anim_ref = %ai_zombie_sprint_slipslide; + dummy_anim_ref = %ai_zombie_sprint_slipslide_a; + dummy_anim_ref = %ai_zombie_stand_slipslide_recover; + dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; + dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; + dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; + dummy_anim_ref = %ai_zombie_thundergun_hit; + dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; + dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; + dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; + dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; + dummy_anim_ref = %ai_zombie_thundergun_getup; + dummy_anim_ref = %ai_zombie_thundergun_getup_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_c; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; + dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; + dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; + dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; + dummy_anim_ref = %ai_zombie_thundergun_getup_a; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; + dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; + dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; + dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; + dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; + dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; + dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; + dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; + dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; + dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; + dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; + dummy_anim_ref = %ai_zombie_jump_across_120; + dummy_anim_ref = %ai_zombie_crawl_jump_across_120; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_72; + dummy_anim_ref = %ai_zombie_crawl_jump_down_72; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_176; + dummy_anim_ref = %ai_zombie_crawl_jump_down_176; + dummy_anim_ref = %ai_zombie_jump_down_190; + dummy_anim_ref = %ai_zombie_crawl_jump_down_189; + dummy_anim_ref = %ai_zombie_jump_down_222; + dummy_anim_ref = %ai_zombie_crawl_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_down_240; + dummy_anim_ref = %ai_zombie_crawl_jump_down_240; + dummy_anim_ref = %ai_zombie_jump_up_96; + dummy_anim_ref = %ai_zombie_crawl_jump_up_96; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_154; + dummy_anim_ref = %ai_zombie_crawl_jump_up_154; + dummy_anim_ref = %ai_zombie_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; + dummy_anim_ref = %ai_zombie_jump_up_startrailing; + dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; + dummy_anim_ref = %ai_zombie_jump_down_startrailing; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_traverse_48; + dummy_anim_ref = %ai_zombie_traverse_48; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_buried_basic.asd"; + self.animtree = "zm_buried_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 3 ); + + switch ( randchar ) + { + case 0: + character\c_zom_zombie_buried_miner3::main(); + break; + case 1: + character\c_zom_zombie_buried_miner3_nohat::main(); + break; + case 2: + character\c_zom_zombie_buried_miner3_nohat::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" ); + character\c_zom_zombie_buried_miner3::precache(); + character\c_zom_zombie_buried_miner3_nohat::precache(); + character\c_zom_zombie_buried_miner3_nohat::precache(); +} diff --git a/ZM/Maps/Buried/aitype/zm_buried_basic_03.gsc b/ZM/Maps/Buried/aitype/zm_buried_basic_03.gsc new file mode 100644 index 0000000..c938dfd --- /dev/null +++ b/ZM/Maps/Buried/aitype/zm_buried_basic_03.gsc @@ -0,0 +1,406 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_zombie_buried_saloongirl1; +#include character\c_zom_zombie_buried_saloongirl2; +#include character\c_zom_zombie_buried_saloongirl3; + +#using_animtree("zm_buried_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_inert_look_v1; + dummy_anim_ref = %ai_zombie_inert_look_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v1; + dummy_anim_ref = %ai_zombie_inert_stagger_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v3; + dummy_anim_ref = %ai_zombie_inert_stagger_v4; + dummy_anim_ref = %ai_zombie_inert_circle_v1; + dummy_anim_ref = %ai_zombie_inert_2_walk_v11; + dummy_anim_ref = %ai_zombie_inert_2_walk_v12; + dummy_anim_ref = %ai_zombie_inert_2_walk_v13; + dummy_anim_ref = %ai_zombie_inert_2_walk_v14; + dummy_anim_ref = %ai_zombie_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_v5; + dummy_anim_ref = %ai_zombie_crawl_inert_v6; + dummy_anim_ref = %ai_zombie_crawl_inert_v7; + dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_slipslide_collapse; + dummy_anim_ref = %ai_zombie_walk_slipslide; + dummy_anim_ref = %ai_zombie_walk_slipslide_a; + dummy_anim_ref = %ai_zombie_run_slipslide; + dummy_anim_ref = %ai_zombie_run_slipslide_a; + dummy_anim_ref = %ai_zombie_sprint_slipslide; + dummy_anim_ref = %ai_zombie_sprint_slipslide_a; + dummy_anim_ref = %ai_zombie_stand_slipslide_recover; + dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; + dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; + dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; + dummy_anim_ref = %ai_zombie_thundergun_hit; + dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; + dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; + dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; + dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; + dummy_anim_ref = %ai_zombie_thundergun_getup; + dummy_anim_ref = %ai_zombie_thundergun_getup_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_c; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; + dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; + dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; + dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; + dummy_anim_ref = %ai_zombie_thundergun_getup_a; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; + dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; + dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; + dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; + dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; + dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; + dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; + dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; + dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; + dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; + dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; + dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; + dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; + dummy_anim_ref = %ai_zombie_jump_across_120; + dummy_anim_ref = %ai_zombie_crawl_jump_across_120; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_72; + dummy_anim_ref = %ai_zombie_crawl_jump_down_72; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_176; + dummy_anim_ref = %ai_zombie_crawl_jump_down_176; + dummy_anim_ref = %ai_zombie_jump_down_190; + dummy_anim_ref = %ai_zombie_crawl_jump_down_189; + dummy_anim_ref = %ai_zombie_jump_down_222; + dummy_anim_ref = %ai_zombie_crawl_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_down_240; + dummy_anim_ref = %ai_zombie_crawl_jump_down_240; + dummy_anim_ref = %ai_zombie_jump_up_96; + dummy_anim_ref = %ai_zombie_crawl_jump_up_96; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_154; + dummy_anim_ref = %ai_zombie_crawl_jump_up_154; + dummy_anim_ref = %ai_zombie_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; + dummy_anim_ref = %ai_zombie_jump_up_startrailing; + dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; + dummy_anim_ref = %ai_zombie_jump_down_startrailing; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_traverse_48; + dummy_anim_ref = %ai_zombie_traverse_48; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_buried_basic.asd"; + self.animtree = "zm_buried_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 3 ); + + switch ( randchar ) + { + case 0: + character\c_zom_zombie_buried_saloongirl1::main(); + break; + case 1: + character\c_zom_zombie_buried_saloongirl2::main(); + break; + case 2: + character\c_zom_zombie_buried_saloongirl3::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" ); + character\c_zom_zombie_buried_saloongirl1::precache(); + character\c_zom_zombie_buried_saloongirl2::precache(); + character\c_zom_zombie_buried_saloongirl3::precache(); +} diff --git a/ZM/Maps/Buried/aitype/zm_buried_ghost_female.gsc b/ZM/Maps/Buried/aitype/zm_buried_ghost_female.gsc new file mode 100644 index 0000000..3a6c9ef --- /dev/null +++ b/ZM/Maps/Buried/aitype/zm_buried_ghost_female.gsc @@ -0,0 +1,86 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\c_zom_zombie_buried_ghost_woman; + +#using_animtree("zm_buried_ghost"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_ghost_idle; + dummy_anim_ref = %ai_zombie_ghost_supersprint; + dummy_anim_ref = %ai_zombie_ghost_walk; + dummy_anim_ref = %ai_zombie_ghost_melee; + dummy_anim_ref = %ai_zombie_ghost_pointdrain; + dummy_anim_ref = %ai_zombie_ghost_float_death; + dummy_anim_ref = %ai_zombie_ghost_float_death_b; + dummy_anim_ref = %ai_zombie_ghost_spawn; + dummy_anim_ref = %ai_zombie_ghost_ground_pain; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_ghost_jump_across_120; + dummy_anim_ref = %ai_zombie_ghost_jump_down_48; + dummy_anim_ref = %ai_zombie_ghost_jump_down_72; + dummy_anim_ref = %ai_zombie_ghost_jump_down_96; + dummy_anim_ref = %ai_zombie_ghost_jump_down_127; + dummy_anim_ref = %ai_zombie_ghost_jump_down_154; + dummy_anim_ref = %ai_zombie_ghost_jump_down_176; + dummy_anim_ref = %ai_zombie_ghost_jump_down_190; + dummy_anim_ref = %ai_zombie_ghost_jump_down_222; + dummy_anim_ref = %ai_zombie_ghost_jump_down_240; + dummy_anim_ref = %ai_zombie_ghost_jump_up_72; + dummy_anim_ref = %ai_zombie_ghost_jump_up_96; + dummy_anim_ref = %ai_zombie_ghost_jump_up_127; + dummy_anim_ref = %ai_zombie_ghost_jump_up_154; + dummy_anim_ref = %ai_zombie_ghost_jump_up_176; + dummy_anim_ref = %ai_zombie_ghost_jump_up_190; + dummy_anim_ref = %ai_zombie_ghost_jump_up_222; + dummy_anim_ref = %ai_zombie_ghost_jump_up_240; + dummy_anim_ref = %ai_zombie_ghost_jump_up_startrailing; + dummy_anim_ref = %ai_zombie_ghost_jump_down_startrailing; + dummy_anim_ref = %ai_zombie_ghost_jump_up_48; + dummy_anim_ref = %ai_zombie_ghost_playing_piano; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_buried_ghost.asd"; + self.animtree = "zm_buried_ghost.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 70; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = "fly_step_ghost"; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\c_zom_zombie_buried_ghost_woman::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_buried_ghost" ); + character\c_zom_zombie_buried_ghost_woman::precache(); +} diff --git a/ZM/Maps/Buried/aitype/zm_buried_sloth.gsc b/ZM/Maps/Buried/aitype/zm_buried_sloth.gsc new file mode 100644 index 0000000..dd29810 --- /dev/null +++ b/ZM/Maps/Buried/aitype/zm_buried_sloth.gsc @@ -0,0 +1,178 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\c_zom_buried_sloth; + +#using_animtree("zm_buried_sloth"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_sloth_idle_cower; + dummy_anim_ref = %ai_zombie_sloth_idle_cower_jumpback; + dummy_anim_ref = %ai_zombie_sloth_idle_jail; + dummy_anim_ref = %ai_zombie_sloth_idle_jail_2_cower; + dummy_anim_ref = %ai_zombie_sloth_idle_jail_2_cower_jumpback; + dummy_anim_ref = %ai_zombie_sloth_run; + dummy_anim_ref = %ai_zombie_sloth_run_berserk; + dummy_anim_ref = %ai_zombie_sloth_run_hunched; + dummy_anim_ref = %ai_zombie_sloth_run_scared; + dummy_anim_ref = %ai_zombie_sloth_pain; + dummy_anim_ref = %ai_zombie_sloth_run_wounded; + dummy_anim_ref = %ai_zombie_sloth_run_into_jail_2_idle_jail; + dummy_anim_ref = %ai_zombie_sloth_run_into_jail_2_cower; + dummy_anim_ref = %ai_zombie_sloth_cower_2_close_door; + dummy_anim_ref = %ai_zombie_sloth_door_close; + dummy_anim_ref = %ai_zombie_sloth_door_open; + dummy_anim_ref = %ai_zombie_sloth_walk; + dummy_anim_ref = %ai_zombie_sloth_walk_scared; + dummy_anim_ref = %ai_zombie_sloth_walk_hunched; + dummy_anim_ref = %ai_zombie_sloth_skip; + dummy_anim_ref = %ai_zombie_sloth_idle_protect; + dummy_anim_ref = %ai_zombie_sloth_run_protect; + dummy_anim_ref = %ai_zombie_sloth_frantic_run; + dummy_anim_ref = %ai_zombie_sloth_frantic_run_hunched; + dummy_anim_ref = %ai_zombie_sloth_gimme_booze; + dummy_anim_ref = %ai_zombie_sloth_gimme_candy; + dummy_anim_ref = %ai_zombie_sloth_drinkbooze; + dummy_anim_ref = %ai_zombie_sloth_drinkbooze_aim; + dummy_anim_ref = %ai_zombie_sloth_eatcandy; + dummy_anim_ref = %ai_zombie_sloth_hit_barrier; + dummy_anim_ref = %ai_zombie_sloth_hit_wall; + dummy_anim_ref = %ai_zombie_sloth_idle; + dummy_anim_ref = %ai_zombie_sloth_pickup_part; + dummy_anim_ref = %ai_zombie_sloth_make_buildable; + dummy_anim_ref = %ai_zombie_sloth_make_buildable_intro; + dummy_anim_ref = %ai_zombie_sloth_sling_equipment; + dummy_anim_ref = %ai_zombie_sloth_unsling_equipment; + dummy_anim_ref = %ai_zombie_sloth_drop_equipment; + dummy_anim_ref = %ai_zombie_sloth_idle_holding_equipment; + dummy_anim_ref = %ai_zombie_sloth_kick_old_equipment; + dummy_anim_ref = %ai_zombie_sloth_pickup_equipment; + dummy_anim_ref = %ai_zombie_sloth_run_holding_equipment; + dummy_anim_ref = %ai_zombie_sloth_wallbuy_add; + dummy_anim_ref = %ai_zombie_sloth_wallbuy_remove; + dummy_anim_ref = %ai_zombie_sloth_place_magicbox; + dummy_anim_ref = %ai_zombie_sloth_pull_magicbox; + dummy_anim_ref = %ai_zombie_sloth_magicbox_point; + dummy_anim_ref = %ai_zombie_sloth_lock_magicbox; + dummy_anim_ref = %ai_zombie_sloth_sling_magicbox; + dummy_anim_ref = %ai_zombie_sloth_unsling_magicbox; + dummy_anim_ref = %ai_zombie_sloth_run_holding_magicbox; + dummy_anim_ref = %ai_zombie_sloth_cycle_magicbox; + dummy_anim_ref = %ai_zombie_sloth_cycle_powerup; + dummy_anim_ref = %ai_zombie_sloth_dance_before_vomit; + dummy_anim_ref = %ai_zombie_sloth_vomit; + dummy_anim_ref = %ai_zombie_sloth_smell_react; + dummy_anim_ref = %ai_zombie_sloth_death; + dummy_anim_ref = %ai_zombie_sloth_attack_v1; + dummy_anim_ref = %ai_zombie_sloth_attack_v2; + dummy_anim_ref = %ai_zombie_sloth_attack_v3; + dummy_anim_ref = %ai_zombie_sloth_attack_v4; + dummy_anim_ref = %ai_zombie_sloth_crawlerhold_walk; + dummy_anim_ref = %ai_zombie_sloth_crawlerhold_walk_hunched; + dummy_anim_ref = %ai_zombie_sloth_crawlerhold_idle; + dummy_anim_ref = %ai_zombie_sloth_crawlerhold_sling; + dummy_anim_ref = %ai_zombie_sloth_crawlerhold_unsling; + dummy_anim_ref = %ai_zombie_sloth_pickup_crawler; + dummy_anim_ref = %ai_zombie_sloth_putdown_crawler; + dummy_anim_ref = %ai_zombie_sloth_kill_crawler_stomp; + dummy_anim_ref = %ai_zombie_sloth_kill_crawler_suplex; + dummy_anim_ref = %ai_zombie_sloth_crawlerhold_idle_hunched; + dummy_anim_ref = %ai_zombie_sloth_crawlerhold_sling_hunched; + dummy_anim_ref = %ai_zombie_sloth_crawlerhold_unsling_hunched; + dummy_anim_ref = %ai_zombie_sloth_pickup_crawler_hunched; + dummy_anim_ref = %ai_zombie_sloth_putdown_crawler_hunched; + dummy_anim_ref = %ai_zombie_sloth_kill_crawler_stomp_hunched; + dummy_anim_ref = %ai_zombie_sloth_kill_crawler_suplex_hunched; + dummy_anim_ref = %ai_zombie_sloth_walk_turn_180; + dummy_anim_ref = %ai_zombie_sloth_walk_crawlerhold_turn_180; + dummy_anim_ref = %ai_zombie_sloth_walk_crawlerhold_hunched_turn_180; + dummy_anim_ref = %ai_zombie_sloth_walk_scare_turn_180; + dummy_anim_ref = %ai_zombie_sloth_walk_hunched_turn_180; + dummy_anim_ref = %ai_zombie_sloth_run_turn_180; + dummy_anim_ref = %ai_zombie_sloth_run_hunched_turn_180; + dummy_anim_ref = %ai_zombie_sloth_run_holding_equipment_turn_180; + dummy_anim_ref = %ai_zombie_sloth_run_holding_magicbox_turn_180; + dummy_anim_ref = %ai_zombie_sloth_run_wounded_turn_180; + dummy_anim_ref = %ai_zombie_sloth_run_protect_turn_180; + dummy_anim_ref = %ai_zombie_sloth_jump_up_96; + dummy_anim_ref = %ai_zombie_sloth_jump_across_120; + dummy_anim_ref = %ai_zombie_sloth_jump_down_48; + dummy_anim_ref = %ai_zombie_sloth_jump_down_48_bank; + dummy_anim_ref = %ai_zombie_sloth_jump_down_72; + dummy_anim_ref = %ai_zombie_sloth_jump_down_96; + dummy_anim_ref = %ai_zombie_sloth_jump_down_96_powerroom; + dummy_anim_ref = %ai_zombie_sloth_jump_down_127; + dummy_anim_ref = %ai_zombie_sloth_jump_down_127_bank_back; + dummy_anim_ref = %ai_zombie_sloth_jump_down_127_barncorner; + dummy_anim_ref = %ai_zombie_sloth_jump_down_127_candystore_alley; + dummy_anim_ref = %ai_zombie_sloth_jump_down_127_saloon_int; + dummy_anim_ref = %ai_zombie_sloth_jump_down_176; + dummy_anim_ref = %ai_zombie_sloth_jump_down_190; + dummy_anim_ref = %ai_zombie_sloth_jump_down_190_gunshop_ext; + dummy_anim_ref = %ai_zombie_sloth_jump_down_222; + dummy_anim_ref = %ai_zombie_sloth_jump_down_222_mineshaft_gunsmith; + dummy_anim_ref = %ai_zombie_sloth_jump_down_240; + dummy_anim_ref = %ai_zombie_sloth_jump_up_127; + dummy_anim_ref = %ai_zombie_sloth_jump_up_127_powerroom; + dummy_anim_ref = %ai_zombie_sloth_jump_up_154; + dummy_anim_ref = %ai_zombie_sloth_jump_up_154_bank_back; + dummy_anim_ref = %ai_zombie_sloth_jump_up_154_bankroof_hole; + dummy_anim_ref = %ai_zombie_sloth_jump_up_154_genstore_back; + dummy_anim_ref = %ai_zombie_sloth_jump_up_222; + dummy_anim_ref = %ai_zombie_sloth_jump_up_222_church; + dummy_anim_ref = %ai_zombie_sloth_jump_up_222_gunshop_ext; + dummy_anim_ref = %ai_zombie_sloth_jump_down_154_equip; + dummy_anim_ref = %ai_zombie_sloth_jump_down_176_equip; + dummy_anim_ref = %ai_zombie_sloth_jump_down_190_equip; + dummy_anim_ref = %ai_zombie_sloth_jump_down_190_gunshop_ext_equip; + dummy_anim_ref = %ai_zombie_sloth_jump_down_222_equip; + dummy_anim_ref = %ai_zombie_sloth_jump_down_222_mineshaft_gunsmith_equip; + dummy_anim_ref = %ai_zombie_sloth_jump_down_240_equip; + dummy_anim_ref = %ai_zombie_sloth_jump_down_startrailing; + dummy_anim_ref = %ai_zombie_sloth_jump_up_48; + dummy_anim_ref = %ai_zombie_sloth_traverse_v1; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_buried_sloth.asd"; + self.animtree = "zm_buried_sloth.asd"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 70; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = "fly_step_sloth"; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\c_zom_buried_sloth::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_buried_sloth" ); + character\c_zom_buried_sloth::precache(); +} diff --git a/ZM/Maps/Buried/character/c_buried_player_reporter_dam.gsc b/ZM/Maps/Buried/character/c_buried_player_reporter_dam.gsc new file mode 100644 index 0000000..2190472 --- /dev/null +++ b/ZM/Maps/Buried/character/c_buried_player_reporter_dam.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_player_reporter_dam_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_player_reporter_dam_fb" ); +} diff --git a/Zombie Maps/Buried/zm_buried_patch/character/c_transit_player_engineer.gsc b/ZM/Maps/Buried/character/c_transit_player_engineer.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/character/c_transit_player_engineer.gsc rename to ZM/Maps/Buried/character/c_transit_player_engineer.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/character/c_transit_player_farmgirl.gsc b/ZM/Maps/Buried/character/c_transit_player_farmgirl.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/character/c_transit_player_farmgirl.gsc rename to ZM/Maps/Buried/character/c_transit_player_farmgirl.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/character/c_transit_player_oldman.gsc b/ZM/Maps/Buried/character/c_transit_player_oldman.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/character/c_transit_player_oldman.gsc rename to ZM/Maps/Buried/character/c_transit_player_oldman.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/character/c_transit_player_reporter.gsc b/ZM/Maps/Buried/character/c_transit_player_reporter.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/character/c_transit_player_reporter.gsc rename to ZM/Maps/Buried/character/c_transit_player_reporter.gsc diff --git a/ZM/Maps/Buried/character/c_zom_ally_cdc.gsc b/ZM/Maps/Buried/character/c_zom_ally_cdc.gsc new file mode 100644 index 0000000..f9073da --- /dev/null +++ b/ZM/Maps/Buried/character/c_zom_ally_cdc.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_player_cdc_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_player_cdc_fb" ); +} diff --git a/ZM/Maps/Buried/character/c_zom_buried_sloth.gsc b/ZM/Maps/Buried/character/c_zom_buried_sloth.gsc new file mode 100644 index 0000000..d8845e2 --- /dev/null +++ b/ZM/Maps/Buried/character/c_zom_buried_sloth.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_buried_sloth_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_buried_sloth_fb" ); +} diff --git a/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian1.gsc b/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian1.gsc new file mode 100644 index 0000000..d172fe0 --- /dev/null +++ b/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian1.gsc @@ -0,0 +1,51 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_buried_male_heads_als; +#include xmodelalias\c_zom_zombie_buried_civilian_hat1_als; + +main() +{ + self setmodel( "c_zom_zombie_buried_civilian_body1" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_civilian_hat1_als::main() ); + self attach( self.hatmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean"; + self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff"; + self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; + self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean"; + self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff"; + self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff"; + self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie_buried_civilian_body1" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_civilian_hat1_als::main() ); + precachemodel( "c_zom_zombie_buried_civilian_g_upclean" ); + precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff" ); + precachemodel( "c_zom_zombie_buried_civilian_g_larmoff" ); + precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); + precachemodel( "c_zom_zombie_buried_civilian_g_lowclean" ); + precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff" ); + precachemodel( "c_zom_zombie_buried_civilian_g_llegoff" ); + precachemodel( "c_zom_zombie_buried_civilian_g_legsoff" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); +} diff --git a/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian2.gsc b/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian2.gsc new file mode 100644 index 0000000..9c8c652 --- /dev/null +++ b/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian2.gsc @@ -0,0 +1,53 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_buried_male_heads_als; + +main() +{ + self setmodel( "c_zom_zombie_buried_civilian_body2" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = "c_zom_zombie_buried_civilian_hats3"; + self attach( self.hatmodel ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean2"; + self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff2"; + self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff2"; + self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; + self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean2"; + self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff2"; + self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff2"; + self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff2"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; + self.gibspawn5 = "c_zom_zombie_buried_civilian_hats3"; + self.gibspawntag5 = "J_Head"; +} + +precache() +{ + precachemodel( "c_zom_zombie_buried_civilian_body2" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + precachemodel( "c_zom_zombie_buried_civilian_hats3" ); + precachemodel( "c_zom_zombie_buried_civilian_g_upclean2" ); + precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff2" ); + precachemodel( "c_zom_zombie_buried_civilian_g_larmoff2" ); + precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); + precachemodel( "c_zom_zombie_buried_civilian_g_lowclean2" ); + precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff2" ); + precachemodel( "c_zom_zombie_buried_civilian_g_llegoff2" ); + precachemodel( "c_zom_zombie_buried_civilian_g_legsoff2" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); + precachemodel( "c_zom_zombie_buried_civilian_hats3" ); +} diff --git a/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian2_nohat.gsc b/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian2_nohat.gsc new file mode 100644 index 0000000..ed0ab7a --- /dev/null +++ b/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian2_nohat.gsc @@ -0,0 +1,51 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_buried_male_heads_als; +#include xmodelalias\c_zom_zombie_buried_civilian_hat2_als; + +main() +{ + self setmodel( "c_zom_zombie_buried_civilian_body2_nohat" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_civilian_hat2_als::main() ); + self attach( self.hatmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean2"; + self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff2"; + self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff2"; + self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; + self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean2"; + self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff2"; + self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff2"; + self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff2"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie_buried_civilian_body2_nohat" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_civilian_hat2_als::main() ); + precachemodel( "c_zom_zombie_buried_civilian_g_upclean2" ); + precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff2" ); + precachemodel( "c_zom_zombie_buried_civilian_g_larmoff2" ); + precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); + precachemodel( "c_zom_zombie_buried_civilian_g_lowclean2" ); + precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff2" ); + precachemodel( "c_zom_zombie_buried_civilian_g_llegoff2" ); + precachemodel( "c_zom_zombie_buried_civilian_g_legsoff2" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); +} diff --git a/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian3.gsc b/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian3.gsc new file mode 100644 index 0000000..3ae6c07 --- /dev/null +++ b/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian3.gsc @@ -0,0 +1,53 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_buried_male_heads_als; + +main() +{ + self setmodel( "c_zom_zombie_buried_civilian_body3" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = "c_zom_zombie_buried_civilian_hats1"; + self attach( self.hatmodel ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean3"; + self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff3"; + self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff3"; + self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; + self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean3"; + self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff3"; + self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff3"; + self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff3"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; + self.gibspawn5 = "c_zom_zombie_buried_civilian_hats1"; + self.gibspawntag5 = "J_Head"; +} + +precache() +{ + precachemodel( "c_zom_zombie_buried_civilian_body3" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + precachemodel( "c_zom_zombie_buried_civilian_hats1" ); + precachemodel( "c_zom_zombie_buried_civilian_g_upclean3" ); + precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff3" ); + precachemodel( "c_zom_zombie_buried_civilian_g_larmoff3" ); + precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); + precachemodel( "c_zom_zombie_buried_civilian_g_lowclean3" ); + precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff3" ); + precachemodel( "c_zom_zombie_buried_civilian_g_llegoff3" ); + precachemodel( "c_zom_zombie_buried_civilian_g_legsoff3" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); + precachemodel( "c_zom_zombie_buried_civilian_hats1" ); +} diff --git a/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian3_nohat.gsc b/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian3_nohat.gsc new file mode 100644 index 0000000..d6577da --- /dev/null +++ b/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian3_nohat.gsc @@ -0,0 +1,51 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_buried_male_heads_als; +#include xmodelalias\c_zom_zombie_buried_civilian_hat3_als; + +main() +{ + self setmodel( "c_zom_zombie_buried_civilian_body3_nohat" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_civilian_hat3_als::main() ); + self attach( self.hatmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean3"; + self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff3"; + self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff3"; + self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; + self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean3"; + self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff3"; + self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff3"; + self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff3"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie_buried_civilian_body3_nohat" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_civilian_hat3_als::main() ); + precachemodel( "c_zom_zombie_buried_civilian_g_upclean3" ); + precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff3" ); + precachemodel( "c_zom_zombie_buried_civilian_g_larmoff3" ); + precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); + precachemodel( "c_zom_zombie_buried_civilian_g_lowclean3" ); + precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff3" ); + precachemodel( "c_zom_zombie_buried_civilian_g_llegoff3" ); + precachemodel( "c_zom_zombie_buried_civilian_g_legsoff3" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); +} diff --git a/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian4.gsc b/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian4.gsc new file mode 100644 index 0000000..e8373c0 --- /dev/null +++ b/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian4.gsc @@ -0,0 +1,53 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_buried_male_heads_als; + +main() +{ + self setmodel( "c_zom_zombie_buried_civilian_body4" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = "c_zom_zombie_buried_civilian_hats4"; + self attach( self.hatmodel ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean4"; + self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff4"; + self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff4"; + self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; + self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean4"; + self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff4"; + self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff4"; + self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff4"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; + self.gibspawn5 = "c_zom_zombie_buried_civilian_hats4"; + self.gibspawntag5 = "J_Head"; +} + +precache() +{ + precachemodel( "c_zom_zombie_buried_civilian_body4" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + precachemodel( "c_zom_zombie_buried_civilian_hats4" ); + precachemodel( "c_zom_zombie_buried_civilian_g_upclean4" ); + precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff4" ); + precachemodel( "c_zom_zombie_buried_civilian_g_larmoff4" ); + precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); + precachemodel( "c_zom_zombie_buried_civilian_g_lowclean4" ); + precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff4" ); + precachemodel( "c_zom_zombie_buried_civilian_g_llegoff4" ); + precachemodel( "c_zom_zombie_buried_civilian_g_legsoff4" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); + precachemodel( "c_zom_zombie_buried_civilian_hats4" ); +} diff --git a/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian4_nohat.gsc b/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian4_nohat.gsc new file mode 100644 index 0000000..ff7cb67 --- /dev/null +++ b/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian4_nohat.gsc @@ -0,0 +1,51 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_buried_male_heads_als; +#include xmodelalias\c_zom_zombie_buried_civilian_hat4_als; + +main() +{ + self setmodel( "c_zom_zombie_buried_civilian_body4_nohat" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_civilian_hat4_als::main() ); + self attach( self.hatmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean4"; + self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff4"; + self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff4"; + self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; + self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean4"; + self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff4"; + self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff4"; + self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff4"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie_buried_civilian_body4_nohat" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_civilian_hat4_als::main() ); + precachemodel( "c_zom_zombie_buried_civilian_g_upclean4" ); + precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff4" ); + precachemodel( "c_zom_zombie_buried_civilian_g_larmoff4" ); + precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); + precachemodel( "c_zom_zombie_buried_civilian_g_lowclean4" ); + precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff4" ); + precachemodel( "c_zom_zombie_buried_civilian_g_llegoff4" ); + precachemodel( "c_zom_zombie_buried_civilian_g_legsoff4" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); +} diff --git a/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian5.gsc b/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian5.gsc new file mode 100644 index 0000000..3c3d737 --- /dev/null +++ b/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian5.gsc @@ -0,0 +1,53 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_buried_male_heads_als; + +main() +{ + self setmodel( "c_zom_zombie_buried_civilian_body5" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = "c_zom_zombie_buried_civilian_hats2"; + self attach( self.hatmodel ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean5"; + self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff5"; + self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff5"; + self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; + self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean5"; + self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff5"; + self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff5"; + self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff5"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; + self.gibspawn5 = "c_zom_zombie_buried_civilian_hats2"; + self.gibspawntag5 = "J_Head"; +} + +precache() +{ + precachemodel( "c_zom_zombie_buried_civilian_body5" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + precachemodel( "c_zom_zombie_buried_civilian_hats2" ); + precachemodel( "c_zom_zombie_buried_civilian_g_upclean5" ); + precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff5" ); + precachemodel( "c_zom_zombie_buried_civilian_g_larmoff5" ); + precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); + precachemodel( "c_zom_zombie_buried_civilian_g_lowclean5" ); + precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff5" ); + precachemodel( "c_zom_zombie_buried_civilian_g_llegoff5" ); + precachemodel( "c_zom_zombie_buried_civilian_g_legsoff5" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); + precachemodel( "c_zom_zombie_buried_civilian_hats2" ); +} diff --git a/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian5_nohat.gsc b/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian5_nohat.gsc new file mode 100644 index 0000000..2e6cfb8 --- /dev/null +++ b/ZM/Maps/Buried/character/c_zom_zombie_buried_civilian5_nohat.gsc @@ -0,0 +1,51 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_buried_male_heads_als; +#include xmodelalias\c_zom_zombie_buried_civilian_hat5_als; + +main() +{ + self setmodel( "c_zom_zombie_buried_civilian_body5_nohat" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_civilian_hat5_als::main() ); + self attach( self.hatmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean5"; + self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff5"; + self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff5"; + self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; + self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean5"; + self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff5"; + self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff5"; + self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff5"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie_buried_civilian_body5_nohat" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_civilian_hat5_als::main() ); + precachemodel( "c_zom_zombie_buried_civilian_g_upclean5" ); + precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff5" ); + precachemodel( "c_zom_zombie_buried_civilian_g_larmoff5" ); + precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); + precachemodel( "c_zom_zombie_buried_civilian_g_lowclean5" ); + precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff5" ); + precachemodel( "c_zom_zombie_buried_civilian_g_llegoff5" ); + precachemodel( "c_zom_zombie_buried_civilian_g_legsoff5" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); +} diff --git a/ZM/Maps/Buried/character/c_zom_zombie_buried_ghost_woman.gsc b/ZM/Maps/Buried/character/c_zom_zombie_buried_ghost_woman.gsc new file mode 100644 index 0000000..00b1242 --- /dev/null +++ b/ZM/Maps/Buried/character/c_zom_zombie_buried_ghost_woman.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_zombie_buried_ghost_woman_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_zombie_buried_ghost_woman_fb" ); +} diff --git a/ZM/Maps/Buried/character/c_zom_zombie_buried_miner1.gsc b/ZM/Maps/Buried/character/c_zom_zombie_buried_miner1.gsc new file mode 100644 index 0000000..efe57f2 --- /dev/null +++ b/ZM/Maps/Buried/character/c_zom_zombie_buried_miner1.gsc @@ -0,0 +1,51 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_buried_male_heads_als; + +main() +{ + self setmodel( "c_zom_zombie_buried_miner_body1" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = "c_zom_zombie_buried_miner_hats1"; + self attach( self.hatmodel ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_buried_miner_g_upclean"; + self.torsodmg2 = "c_zom_zombie_buried_miner_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie_buried_miner_g_larmoff"; + self.legdmg1 = "c_zom_zombie_buried_miner_g_lowclean"; + self.legdmg2 = "c_zom_zombie_buried_miner_g_rlegoff"; + self.legdmg3 = "c_zom_zombie_buried_miner_g_llegoff"; + self.legdmg4 = "c_zom_zombie_buried_miner_g_legsoff"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_knee_LE"; + self.gibspawn5 = "c_zom_zombie_buried_miner_hats1"; + self.gibspawntag5 = "J_Head"; +} + +precache() +{ + precachemodel( "c_zom_zombie_buried_miner_body1" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + precachemodel( "c_zom_zombie_buried_miner_hats1" ); + precachemodel( "c_zom_zombie_buried_miner_g_upclean" ); + precachemodel( "c_zom_zombie_buried_miner_g_rarmoff" ); + precachemodel( "c_zom_zombie_buried_miner_g_larmoff" ); + precachemodel( "c_zom_zombie_buried_miner_g_lowclean" ); + precachemodel( "c_zom_zombie_buried_miner_g_rlegoff" ); + precachemodel( "c_zom_zombie_buried_miner_g_llegoff" ); + precachemodel( "c_zom_zombie_buried_miner_g_legsoff" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); + precachemodel( "c_zom_zombie_buried_miner_hats1" ); +} diff --git a/ZM/Maps/Buried/character/c_zom_zombie_buried_miner2.gsc b/ZM/Maps/Buried/character/c_zom_zombie_buried_miner2.gsc new file mode 100644 index 0000000..7952442 --- /dev/null +++ b/ZM/Maps/Buried/character/c_zom_zombie_buried_miner2.gsc @@ -0,0 +1,51 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_buried_male_heads_als; + +main() +{ + self setmodel( "c_zom_zombie_buried_miner_body2" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = "c_zom_zombie_buried_miner_hats1"; + self attach( self.hatmodel ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_buried_miner_g_upclean2"; + self.torsodmg2 = "c_zom_zombie_buried_miner_g_rarmoff2"; + self.torsodmg3 = "c_zom_zombie_buried_miner_g_larmoff2"; + self.legdmg1 = "c_zom_zombie_buried_miner_g_lowclean2"; + self.legdmg2 = "c_zom_zombie_buried_miner_g_rlegoff2"; + self.legdmg3 = "c_zom_zombie_buried_miner_g_llegoff2"; + self.legdmg4 = "c_zom_zombie_buried_miner_g_legsoff2"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_knee_LE"; + self.gibspawn5 = "c_zom_zombie_buried_miner_hats1"; + self.gibspawntag5 = "J_Head"; +} + +precache() +{ + precachemodel( "c_zom_zombie_buried_miner_body2" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + precachemodel( "c_zom_zombie_buried_miner_hats1" ); + precachemodel( "c_zom_zombie_buried_miner_g_upclean2" ); + precachemodel( "c_zom_zombie_buried_miner_g_rarmoff2" ); + precachemodel( "c_zom_zombie_buried_miner_g_larmoff2" ); + precachemodel( "c_zom_zombie_buried_miner_g_lowclean2" ); + precachemodel( "c_zom_zombie_buried_miner_g_rlegoff2" ); + precachemodel( "c_zom_zombie_buried_miner_g_llegoff2" ); + precachemodel( "c_zom_zombie_buried_miner_g_legsoff2" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); + precachemodel( "c_zom_zombie_buried_miner_hats1" ); +} diff --git a/ZM/Maps/Buried/character/c_zom_zombie_buried_miner2_nohat.gsc b/ZM/Maps/Buried/character/c_zom_zombie_buried_miner2_nohat.gsc new file mode 100644 index 0000000..be6b511 --- /dev/null +++ b/ZM/Maps/Buried/character/c_zom_zombie_buried_miner2_nohat.gsc @@ -0,0 +1,49 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_buried_male_heads_als; +#include xmodelalias\c_zom_zombie_buried_miner_hats_als; + +main() +{ + self setmodel( "c_zom_zombie_buried_miner_body2_nohat" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_miner_hats_als::main() ); + self attach( self.hatmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_buried_miner_g_upclean2"; + self.torsodmg2 = "c_zom_zombie_buried_miner_g_rarmoff2"; + self.torsodmg3 = "c_zom_zombie_buried_miner_g_larmoff2"; + self.legdmg1 = "c_zom_zombie_buried_miner_g_lowclean2"; + self.legdmg2 = "c_zom_zombie_buried_miner_g_rlegoff2"; + self.legdmg3 = "c_zom_zombie_buried_miner_g_llegoff2"; + self.legdmg4 = "c_zom_zombie_buried_miner_g_legsoff2"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie_buried_miner_body2_nohat" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_miner_hats_als::main() ); + precachemodel( "c_zom_zombie_buried_miner_g_upclean2" ); + precachemodel( "c_zom_zombie_buried_miner_g_rarmoff2" ); + precachemodel( "c_zom_zombie_buried_miner_g_larmoff2" ); + precachemodel( "c_zom_zombie_buried_miner_g_lowclean2" ); + precachemodel( "c_zom_zombie_buried_miner_g_rlegoff2" ); + precachemodel( "c_zom_zombie_buried_miner_g_llegoff2" ); + precachemodel( "c_zom_zombie_buried_miner_g_legsoff2" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); +} diff --git a/ZM/Maps/Buried/character/c_zom_zombie_buried_miner3.gsc b/ZM/Maps/Buried/character/c_zom_zombie_buried_miner3.gsc new file mode 100644 index 0000000..c02162d --- /dev/null +++ b/ZM/Maps/Buried/character/c_zom_zombie_buried_miner3.gsc @@ -0,0 +1,51 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_buried_male_heads_als; + +main() +{ + self setmodel( "c_zom_zombie_buried_miner_body3" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = "c_zom_zombie_buried_miner_hats2"; + self attach( self.hatmodel ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_buried_miner_g_upclean3"; + self.torsodmg2 = "c_zom_zombie_buried_miner_g_rarmoff3"; + self.torsodmg3 = "c_zom_zombie_buried_miner_g_larmoff3"; + self.legdmg1 = "c_zom_zombie_buried_miner_g_lowclean3"; + self.legdmg2 = "c_zom_zombie_buried_miner_g_rlegoff3"; + self.legdmg3 = "c_zom_zombie_buried_miner_g_llegoff3"; + self.legdmg4 = "c_zom_zombie_buried_miner_g_legsoff3"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_knee_LE"; + self.gibspawn5 = "c_zom_zombie_buried_miner_hats2"; + self.gibspawntag5 = "J_Head"; +} + +precache() +{ + precachemodel( "c_zom_zombie_buried_miner_body3" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + precachemodel( "c_zom_zombie_buried_miner_hats2" ); + precachemodel( "c_zom_zombie_buried_miner_g_upclean3" ); + precachemodel( "c_zom_zombie_buried_miner_g_rarmoff3" ); + precachemodel( "c_zom_zombie_buried_miner_g_larmoff3" ); + precachemodel( "c_zom_zombie_buried_miner_g_lowclean3" ); + precachemodel( "c_zom_zombie_buried_miner_g_rlegoff3" ); + precachemodel( "c_zom_zombie_buried_miner_g_llegoff3" ); + precachemodel( "c_zom_zombie_buried_miner_g_legsoff3" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); + precachemodel( "c_zom_zombie_buried_miner_hats2" ); +} diff --git a/ZM/Maps/Buried/character/c_zom_zombie_buried_miner3_nohat.gsc b/ZM/Maps/Buried/character/c_zom_zombie_buried_miner3_nohat.gsc new file mode 100644 index 0000000..388a1ed --- /dev/null +++ b/ZM/Maps/Buried/character/c_zom_zombie_buried_miner3_nohat.gsc @@ -0,0 +1,49 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_buried_male_heads_als; +#include xmodelalias\c_zom_zombie_buried_miner_hats_als; + +main() +{ + self setmodel( "c_zom_zombie_buried_miner_body3_nohat" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_miner_hats_als::main() ); + self attach( self.hatmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_buried_miner_g_upclean3"; + self.torsodmg2 = "c_zom_zombie_buried_miner_g_rarmoff3"; + self.torsodmg3 = "c_zom_zombie_buried_miner_g_larmoff3"; + self.legdmg1 = "c_zom_zombie_buried_miner_g_lowclean3"; + self.legdmg2 = "c_zom_zombie_buried_miner_g_rlegoff3"; + self.legdmg3 = "c_zom_zombie_buried_miner_g_llegoff3"; + self.legdmg4 = "c_zom_zombie_buried_miner_g_legsoff3"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie_buried_miner_body3_nohat" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_male_heads_als::main() ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_miner_hats_als::main() ); + precachemodel( "c_zom_zombie_buried_miner_g_upclean3" ); + precachemodel( "c_zom_zombie_buried_miner_g_rarmoff3" ); + precachemodel( "c_zom_zombie_buried_miner_g_larmoff3" ); + precachemodel( "c_zom_zombie_buried_miner_g_lowclean3" ); + precachemodel( "c_zom_zombie_buried_miner_g_rlegoff3" ); + precachemodel( "c_zom_zombie_buried_miner_g_llegoff3" ); + precachemodel( "c_zom_zombie_buried_miner_g_legsoff3" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); +} diff --git a/ZM/Maps/Buried/character/c_zom_zombie_buried_saloongirl1.gsc b/ZM/Maps/Buried/character/c_zom_zombie_buried_saloongirl1.gsc new file mode 100644 index 0000000..5ee22dc --- /dev/null +++ b/ZM/Maps/Buried/character/c_zom_zombie_buried_saloongirl1.gsc @@ -0,0 +1,51 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_buried_female_heads_als; +#include xmodelalias\c_zom_zombie_buried_sgirl_hair_als; + +main() +{ + self setmodel( "c_zom_zombie_buried_sgirl_body1" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_female_heads_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_sgirl_hair_als::main() ); + self attach( self.hatmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_buried_sgirl_g_upclean"; + self.torsodmg2 = "c_zom_zombie_buried_sgirl_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie_buried_sgirl_g_larmoff"; + self.torsodmg5 = "c_zom_zombie_buried_sgirl_g_behead"; + self.legdmg1 = "c_zom_zombie_buried_sgirl_g_lowclean"; + self.legdmg2 = "c_zom_zombie_buried_sgirl_g_rlegoff"; + self.legdmg3 = "c_zom_zombie_buried_sgirl_g_llegoff"; + self.legdmg4 = "c_zom_zombie_buried_sgirl_g_legsoff"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie_buried_sgirl_body1" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_female_heads_als::main() ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_sgirl_hair_als::main() ); + precachemodel( "c_zom_zombie_buried_sgirl_g_upclean" ); + precachemodel( "c_zom_zombie_buried_sgirl_g_rarmoff" ); + precachemodel( "c_zom_zombie_buried_sgirl_g_larmoff" ); + precachemodel( "c_zom_zombie_buried_sgirl_g_behead" ); + precachemodel( "c_zom_zombie_buried_sgirl_g_lowclean" ); + precachemodel( "c_zom_zombie_buried_sgirl_g_rlegoff" ); + precachemodel( "c_zom_zombie_buried_sgirl_g_llegoff" ); + precachemodel( "c_zom_zombie_buried_sgirl_g_legsoff" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); +} diff --git a/ZM/Maps/Buried/character/c_zom_zombie_buried_saloongirl2.gsc b/ZM/Maps/Buried/character/c_zom_zombie_buried_saloongirl2.gsc new file mode 100644 index 0000000..39bb67f --- /dev/null +++ b/ZM/Maps/Buried/character/c_zom_zombie_buried_saloongirl2.gsc @@ -0,0 +1,51 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_buried_female_heads_als; +#include xmodelalias\c_zom_zombie_buried_sgirl_hair_als; + +main() +{ + self setmodel( "c_zom_zombie_buried_sgirl_body2" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_female_heads_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_sgirl_hair_als::main() ); + self attach( self.hatmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_buried_sgirl_g_upclean2"; + self.torsodmg2 = "c_zom_zombie_buried_sgirl_g_rarmoff2"; + self.torsodmg3 = "c_zom_zombie_buried_sgirl_g_larmoff2"; + self.torsodmg5 = "c_zom_zombie_buried_sgirl_g_behead"; + self.legdmg1 = "c_zom_zombie_buried_sgirl_g_lowclean2"; + self.legdmg2 = "c_zom_zombie_buried_sgirl_g_rlegoff2"; + self.legdmg3 = "c_zom_zombie_buried_sgirl_g_llegoff2"; + self.legdmg4 = "c_zom_zombie_buried_sgirl_g_legsoff2"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie_buried_sgirl_body2" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_female_heads_als::main() ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_sgirl_hair_als::main() ); + precachemodel( "c_zom_zombie_buried_sgirl_g_upclean2" ); + precachemodel( "c_zom_zombie_buried_sgirl_g_rarmoff2" ); + precachemodel( "c_zom_zombie_buried_sgirl_g_larmoff2" ); + precachemodel( "c_zom_zombie_buried_sgirl_g_behead" ); + precachemodel( "c_zom_zombie_buried_sgirl_g_lowclean2" ); + precachemodel( "c_zom_zombie_buried_sgirl_g_rlegoff2" ); + precachemodel( "c_zom_zombie_buried_sgirl_g_llegoff2" ); + precachemodel( "c_zom_zombie_buried_sgirl_g_legsoff2" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); +} diff --git a/ZM/Maps/Buried/character/c_zom_zombie_buried_saloongirl3.gsc b/ZM/Maps/Buried/character/c_zom_zombie_buried_saloongirl3.gsc new file mode 100644 index 0000000..752b187 --- /dev/null +++ b/ZM/Maps/Buried/character/c_zom_zombie_buried_saloongirl3.gsc @@ -0,0 +1,51 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_buried_female_heads_als; +#include xmodelalias\c_zom_zombie_buried_sgirl_hair_als; + +main() +{ + self setmodel( "c_zom_zombie_buried_sgirl_body3" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_female_heads_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_buried_sgirl_hair_als::main() ); + self attach( self.hatmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_buried_sgirl_g_upclean3"; + self.torsodmg2 = "c_zom_zombie_buried_sgirl_g_rarmoff3"; + self.torsodmg3 = "c_zom_zombie_buried_sgirl_g_larmoff3"; + self.torsodmg5 = "c_zom_zombie_buried_sgirl_g_behead"; + self.legdmg1 = "c_zom_zombie_buried_sgirl_g_lowclean3"; + self.legdmg2 = "c_zom_zombie_buried_sgirl_g_rlegoff3"; + self.legdmg3 = "c_zom_zombie_buried_sgirl_g_llegoff3"; + self.legdmg4 = "c_zom_zombie_buried_sgirl_g_legsoff3"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie_buried_sgirl_body3" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_female_heads_als::main() ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_buried_sgirl_hair_als::main() ); + precachemodel( "c_zom_zombie_buried_sgirl_g_upclean3" ); + precachemodel( "c_zom_zombie_buried_sgirl_g_rarmoff3" ); + precachemodel( "c_zom_zombie_buried_sgirl_g_larmoff3" ); + precachemodel( "c_zom_zombie_buried_sgirl_g_behead" ); + precachemodel( "c_zom_zombie_buried_sgirl_g_lowclean3" ); + precachemodel( "c_zom_zombie_buried_sgirl_g_rlegoff3" ); + precachemodel( "c_zom_zombie_buried_sgirl_g_llegoff3" ); + precachemodel( "c_zom_zombie_buried_sgirl_g_legsoff3" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); +} diff --git a/Zombie Maps/Buried/zm_buried_patch/character/c_zom_zombie_buried_saloongirl_mp.gsc b/ZM/Maps/Buried/character/c_zom_zombie_buried_saloongirl_mp.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/character/c_zom_zombie_buried_saloongirl_mp.gsc rename to ZM/Maps/Buried/character/c_zom_zombie_buried_saloongirl_mp.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_across_120.gsc b/ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_across_120.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_across_120.gsc rename to ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_across_120.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc b/ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_down_127.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc rename to ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_down_127.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_down_176.gsc b/ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_down_176.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_down_176.gsc rename to ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_down_176.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_down_190.gsc b/ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_down_190.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_down_190.gsc rename to ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_down_190.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_222.gsc b/ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_down_222.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_222.gsc rename to ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_down_222.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_down_240.gsc b/ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_down_240.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_down_240.gsc rename to ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_down_240.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_down_48.gsc b/ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_down_48.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_down_48.gsc rename to ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_down_48.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_72.gsc b/ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_down_72.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_72.gsc rename to ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_down_72.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc b/ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_down_96.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc rename to ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_down_96.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_down_startrailing.gsc b/ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_down_startrailing.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_down_startrailing.gsc rename to ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_down_startrailing.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc b/ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_up_127.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc rename to ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_up_127.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_up_154.gsc b/ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_up_154.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_up_154.gsc rename to ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_up_154.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_up_222.gsc b/ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_up_222.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_up_222.gsc rename to ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_up_222.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_up_96.gsc b/ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_up_96.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_up_96.gsc rename to ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_up_96.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_up_grabbed_48.gsc b/ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_up_grabbed_48.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_up_grabbed_48.gsc rename to ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_up_grabbed_48.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_up_startrailing.gsc b/ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_up_startrailing.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_up_startrailing.gsc rename to ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_jump_up_startrailing.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_traverse_48.gsc b/ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_traverse_48.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_traverse_48.gsc rename to ZM/Maps/Buried/maps/mp/animscripts/traverse/zm_traverse_48.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/createfx/zm_buried_fx.gsc b/ZM/Maps/Buried/maps/mp/createfx/zm_buried_fx.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/createfx/zm_buried_fx.gsc rename to ZM/Maps/Buried/maps/mp/createfx/zm_buried_fx.gsc diff --git a/ZM/Maps/Buried/maps/mp/gametypes_zm/zcleansed.gsc b/ZM/Maps/Buried/maps/mp/gametypes_zm/zcleansed.gsc new file mode 100644 index 0000000..acbdeb1 --- /dev/null +++ b/ZM/Maps/Buried/maps/mp/gametypes_zm/zcleansed.gsc @@ -0,0 +1,2048 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_turned; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\gametypes_zm\_weapons; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\gametypes_zm\_globallogic_utils; +#include maps\mp\zombies\_zm_blockers; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_weap_cymbal_monkey; +#include maps\mp\_visionset_mgr; + +main() +{ + level.using_zombie_powerups = 1; + level._game_mode_powerup_zombie_grab = ::zcleansed_zombie_powerup_grab; + level._zombiemode_powerup_grab = ::zcleansed_powerup_grab; + level._powerup_timeout_custom_time = ::zcleansed_powerup_custom_time_logic; + level._powerup_grab_check = ::powerup_can_player_grab; + setdvar( "aim_target_player_enabled", 1 ); + maps\mp\gametypes_zm\_zm_gametype::main(); + setscoreboardcolumns( "none", "score", "kills", "downs", "headshots" ); + level.cymbal_monkey_dual_view = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.custom_end_screen = ::custom_end_screen; + level._game_module_custom_spawn_init_func = maps\mp\gametypes_zm\_zm_gametype::custom_spawn_init_func; + level._game_module_state_update_func = maps\mp\zombies\_zm_stats::survival_classic_custom_stat_update; + level._effect["human_disappears"] = loadfx( "maps/zombie/fx_zmb_returned_spawn_puff" ); + level._effect["zombie_disappears"] = loadfx( "maps/zombie/fx_zmb_returned_spawn_puff" ); + level.human_finish_bonus_points = 250; + level.human_bonus_points = 10; + level.zombie_penalty_points = 5; + level.human_bonus_period = 1; + level.zombie_penalty_period = 10; + level.zombie_player_kill_points = 50; + level.human_player_kill_points = 50; + level.human_player_suicide_penalty = 0; + level.score_rank_bonus = array( 1.5, 0.75, 0.5, 0.25 ); + + if ( isdefined( level.should_use_cia ) && level.should_use_cia ) + level.characterindex = 0; + else + level.characterindex = 1; + + level.graceperiodfunc = ::waitforhumanselection; + level.customalivecheck = ::cleansed_alive_check; + level thread onplayerconnect(); + maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zcleansed" ); + init_cleansed_powerup_fx(); +} + +onprecachegametype() +{ + level.playersuicideallowed = 1; + level.canplayersuicide = ::canplayersuicide; + level.suicide_weapon = "death_self_zm"; + precacheitem( "death_self_zm" ); + precachemodel( "zombie_pickup_perk_bottle" ); + precache_trophy(); + precacheshader( "faction_cdc" ); + precacheshader( "faction_cia" ); + init_default_zcleansed_powerups(); + maps\mp\zombies\_zm_turned::init(); + level thread maps\mp\gametypes_zm\_zm_gametype::init(); + maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zcleansed" ); + init_cleansed_powerups(); +} + +init_default_zcleansed_powerups() +{ + maps\mp\zombies\_zm_powerups::include_zombie_powerup( "the_cure" ); + maps\mp\zombies\_zm_powerups::include_zombie_powerup( "blue_monkey" ); + maps\mp\zombies\_zm_powerups::add_zombie_powerup( "the_cure", "zombie_pickup_perk_bottle", &"ZOMBIE_POWERUP_MAX_AMMO", maps\mp\zombies\_zm_powerups::func_should_never_drop, 0, 0, 1 ); + maps\mp\zombies\_zm_powerups::add_zombie_powerup( "blue_monkey", level.cymbal_monkey_model, &"ZOMBIE_POWERUP_MAX_AMMO", maps\mp\zombies\_zm_powerups::func_should_never_drop, 1, 0, 0 ); +} + +init_cleansed_powerup_fx() +{ + level._effect["powerup_on_caution"] = loadfx( "misc/fx_zombie_powerup_on_blue" ); +} + +onstartgametype() +{ + maps\mp\gametypes_zm\_zm_gametype::setup_classic_gametype(); + level thread makefindfleshstructs(); + flag_init( "start_supersprint" ); + level.custom_player_fake_death = ::empty; + level.custom_player_fake_death_cleanup = ::empty; + level.overrideplayerdamage = ::cleanseddamagechecks; + level.playerlaststand_func = ::cleansed_player_laststand; + level.onendgame = ::cleansedonendgame; + level.ontimelimit = ::cleansedontimelimit; + level.powerup_player_valid = ::cleansed_alive_check; + level.nml_zombie_spawners = level.zombie_spawners; + level.dodge_score_highlight = 1; + level.dodge_show_revive_icon = 1; + level.custom_max_zombies = 6; + level.custom_zombie_health = 200; + level.nml_dogs_enabled = 0; + level.timercountdown = 1; + level.initial_spawn = 1; + level.nml_reaction_interval = 2000; + level.nml_min_reaction_dist_sq = 1024; + level.nml_max_reaction_dist_sq = 5760000; + level.min_humans = 1; + level.no_end_game_check = 1; + level.zombie_health = level.zombie_vars["zombie_health_start"]; + level._get_game_module_players = undefined; + level.powerup_drop_count = 0; + level.is_zombie_level = 1; + level.player_becomes_zombie = ::onzombifyplayer; + level.player_kills_player = ::player_kills_player; + set_zombie_var( "zombify_player", 1 ); + set_zombie_var( "penalty_died", 1.0 ); + set_zombie_var( "penalty_downed", 1.0 ); + + if ( isdefined( level._zcleansed_weapon_progression ) ) + { + for ( i = 0; i < level._zcleansed_weapon_progression.size; i++ ) + addguntoprogression( level._zcleansed_weapon_progression[i] ); + } + + maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zcleansed", ::zcleansed_logic ); +} + +turnedlog( text ) +{ +/# + println( "TURNEDLOG: " + text + "\\n" ); +#/ +} + +cleansed_player_laststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ +/# + +#/ + self maps\mp\zombies\_zm_score::player_downed_penalty(); + + if ( isdefined( attacker ) && isplayer( attacker ) && attacker != self ) + { + if ( isdefined( self.hide_owner ) && self.hide_owner ) + attacker notify( "invisible_player_killed" ); + } + + if ( isdefined( self.is_zombie ) && self.is_zombie && deathanimduration == 0 ) + self stopsounds(); +} + +cleansed_alive_check( player ) +{ + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.nuked ) && player.nuked || isdefined( player.is_in_process_of_zombify ) && player.is_in_process_of_zombify || isdefined( player.is_in_process_of_humanify ) && player.is_in_process_of_humanify ) + return false; + + return true; +} + +cleanseddamagechecks( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.is_in_process_of_zombify ) && self.is_in_process_of_zombify || isdefined( self.is_in_process_of_humanify ) && self.is_in_process_of_humanify ) + return 0; + + if ( isdefined( self.nuked ) && self.nuked && eattacker != self.nuker && eattacker != self ) + return 0; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && eattacker != self ) + { + if ( eattacker.team == self.team ) + return 0; + + if ( ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie ) == ( isdefined( self.is_zombie ) && self.is_zombie ) ) + return 0; + + if ( !cleansed_alive_check( eattacker ) ) + return 0; + + if ( isdefined( self.nuked ) && self.nuked && isdefined( self.nuker ) && eattacker != self.nuker ) + return 0; + + if ( isdefined( self.is_zombie ) && self.is_zombie && sweapon == "cymbal_monkey_zm" && smeansofdeath != "MOD_IMPACT" ) + { + level notify( "killed_by_decoy", eattacker, self ); + idamage = self.health + 666; + } + else + self.last_player_attacker = eattacker; +/# + +#/ + eattacker thread maps\mp\gametypes_zm\_weapons::checkhit( sweapon ); + + if ( !eattacker.is_zombie && eattacker maps\mp\zombies\_zm_powerups::is_insta_kill_active() ) + idamage = self.health + 666; + } + + if ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie ) + self playsoundtoplayer( "evt_player_swiped", self ); + + return self maps\mp\zombies\_zm::player_damage_override( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); +} + +custom_end_screen() +{ + players = get_players(); + winner = players[0]; + + foreach ( player in players ) + { + if ( isdefined( winner ) && player.score > winner.score ) + winner = player; + } + + if ( isdefined( level.last_human_standing ) ) + { + for ( i = 0; i < players.size; i++ ) + { + players[i].bonus_msg_hud = newclienthudelem( players[i] ); + players[i].bonus_msg_hud.alignx = "center"; + players[i].bonus_msg_hud.aligny = "middle"; + players[i].bonus_msg_hud.horzalign = "center"; + players[i].bonus_msg_hud.vertalign = "middle"; + players[i].bonus_msg_hud.y -= 130; + + if ( players[i] issplitscreen() ) + players[i].bonus_msg_hud.y += 70; + + players[i].bonus_msg_hud.foreground = 1; + players[i].bonus_msg_hud.fontscale = 5; + players[i].bonus_msg_hud.alpha = 0; + players[i].bonus_msg_hud.color = ( 1, 1, 1 ); + players[i].bonus_msg_hud.hidewheninmenu = 1; + players[i].bonus_msg_hud.font = "default"; + players[i].bonus_msg_hud settext( &"ZOMBIE_CLEANSED_SURVIVING_HUMAN_BONUS", level.last_human_standing.name ); + players[i].bonus_msg_hud changefontscaleovertime( 0.25 ); + players[i].bonus_msg_hud fadeovertime( 0.25 ); + players[i].bonus_msg_hud.alpha = 1; + players[i].bonus_msg_hud.fontscale = 2; + } + + wait 3.25; + } + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].bonus_msg_hud ) ) + { + players[i].bonus_msg_hud changefontscaleovertime( 0.5 ); + players[i].bonus_msg_hud fadeovertime( 0.5 ); + players[i].bonus_msg_hud.alpha = 0; + players[i].bonus_msg_hud.fontscale = 5; + } + } + + wait 0.5; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].bonus_msg_hud ) ) + players[i].bonus_msg_hud destroy(); + + players[i].game_over_hud = newclienthudelem( players[i] ); + players[i].game_over_hud.alignx = "center"; + players[i].game_over_hud.aligny = "middle"; + players[i].game_over_hud.horzalign = "center"; + players[i].game_over_hud.vertalign = "middle"; + players[i].game_over_hud.y -= 130; + players[i].game_over_hud.foreground = 1; + players[i].game_over_hud.fontscale = 3; + players[i].game_over_hud.alpha = 0; + players[i].game_over_hud.color = ( 1, 1, 1 ); + players[i].game_over_hud.hidewheninmenu = 1; + players[i].game_over_hud settext( &"ZOMBIE_GAME_OVER" ); + players[i].game_over_hud fadeovertime( 1 ); + players[i].game_over_hud.alpha = 1; + + if ( players[i] issplitscreen() ) + { + players[i].game_over_hud.fontscale = 2; + players[i].game_over_hud.y += 40; + } + + players[i].survived_hud = newclienthudelem( players[i] ); + players[i].survived_hud.alignx = "center"; + players[i].survived_hud.aligny = "middle"; + players[i].survived_hud.horzalign = "center"; + players[i].survived_hud.vertalign = "middle"; + players[i].survived_hud.y -= 100; + players[i].survived_hud.foreground = 1; + players[i].survived_hud.fontscale = 2; + players[i].survived_hud.alpha = 0; + players[i].survived_hud.color = ( 1, 1, 1 ); + players[i].survived_hud.hidewheninmenu = 1; + + if ( players[i] issplitscreen() ) + { + players[i].survived_hud.fontscale = 1.5; + players[i].survived_hud.y += 40; + } + + winner_text = &"ZOMBIE_CLEANSED_WIN"; + loser_text = &"ZOMBIE_CLEANSED_LOSE"; + + if ( isdefined( level.host_ended_game ) && level.host_ended_game ) + players[i].survived_hud settext( &"MP_HOST_ENDED_GAME" ); + else if ( players[i] == winner ) + players[i].survived_hud settext( winner_text ); + else + players[i].survived_hud settext( loser_text ); + + players[i].survived_hud fadeovertime( 1 ); + players[i].survived_hud.alpha = 1; + } +} + +allow_player_movement( allowed ) +{ + level.player_movement_suppressed = !allowed; + + foreach ( player in get_players() ) + { + if ( !( isdefined( player.in_zombify_call ) && player.in_zombify_call ) ) + player freezecontrolswrapper( level.player_movement_suppressed ); + } +} + +watch_game_start() +{ + level.start_audio_allowed = 1; + + level waittill( "cleansed_game_started" ); + + level.start_audio_allowed = 0; +} + +listen_to_the_doctor_pregame() +{ + thread watch_game_start(); + level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_start_single_0", undefined, undefined, 1, 4 ); + wait 4; + + if ( level.start_audio_allowed ) + { + level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_start_2", undefined, undefined, 1, 8 ); + wait 8; + } + + if ( level.start_audio_allowed ) + { + level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_start_3", undefined, undefined, 1, 8 ); + wait 4; + } + + if ( level.start_audio_allowed ) + level waittill( "cleansed_game_started" ); +} + +listen_to_the_doctor_started() +{ + level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_cure_found_line", undefined, undefined, 1, 8 ); + wait 8; +} + +listen_to_the_doctor_monkeys() +{ + level endon( "end_game" ); + + while ( true ) + { + level waittill( "killed_by_decoy", killer, killee ); + + if ( !isplayer( killee ) ) + continue; + + if ( isdefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) + continue; + + if ( !( isdefined( killer.heard_dr_monkey_killer ) && killer.heard_dr_monkey_killer ) ) + { + level.playing_turned_kill_vo = 1; + killer.heard_dr_monkey_killer = 1; + killer thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "dr_monkey_killer", undefined, undefined, 0 ); + } + + if ( !( isdefined( killee.heard_dr_monkey_killee ) && killee.heard_dr_monkey_killee ) ) + { + level.playing_turned_kill_vo = 1; + killee.heard_dr_monkey_killee = 1; + wait 0.25; + killee thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "dr_monkey_killee", undefined, undefined, 0 ); + } + + if ( isdefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) + { + wait 8; + level.playing_turned_kill_vo = 0; + } + } +} + +listen_to_the_doctor_human_deaths() +{ + level endon( "end_game" ); + + while ( true ) + { + level waittill( "killed_by_zombie", killer, killee ); + + wait 0.05; + + if ( isdefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) + continue; + + if ( !isdefined( killee.vo_human_killed_chance ) ) + killee.vo_human_killed_chance = 24; + + if ( randomint( 100 ) < killee.vo_human_killed_chance ) + { + level.playing_turned_kill_vo = 1; + killee thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "dr_human_killed", undefined, undefined, 0 ); + killee.vo_human_killed_chance = int( killee.vo_human_killed_chance * 0.5 ); + } + + if ( isdefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) + { + wait 4; + level.playing_turned_kill_vo = 0; + } + } +} + +listen_to_the_doctor_zombie_deaths() +{ + level endon( "end_game" ); + + while ( true ) + { + level waittill( "killed_by_human", killer, killee ); + + wait 0.05; + + if ( isdefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) + continue; + + if ( !isdefined( killer.vo_human_killer_chance ) ) + killer.vo_human_killer_chance = 24; + + if ( randomint( 100 ) < killer.vo_human_killer_chance ) + { + killer.vo_human_killer_chance = int( killer.vo_human_killer_chance * 0.5 ); + level.playing_turned_kill_vo = 1; + killer thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "dr_human_killer", undefined, undefined, 0 ); + } + + if ( isdefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) + { + wait 4; + level.playing_turned_kill_vo = 0; + } + } +} + +listen_to_the_doctor_endgame() +{ + wait 5; + + while ( maps\mp\gametypes_zm\_globallogic_utils::gettimeremaining() > 12000 ) + wait 1; + + r = randomint( 3 ); + + if ( r == 0 ) + level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_countdown0", undefined, undefined, 1, 4 ); + else if ( r == 1 ) + level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_countdown1", undefined, undefined, 1, 4 ); + else + level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_countdown2", undefined, undefined, 1, 4 ); + + while ( maps\mp\gametypes_zm\_globallogic_utils::gettimeremaining() > 500 ) + wait 1; + + level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_ending", undefined, undefined, 1, 4 ); +} + +anysplitscreen() +{ + foreach ( player in get_players() ) + { + if ( player issplitscreen() ) + return true; + } + + return false; +} + +listen_to_the_doctor() +{ + listen_to_the_doctor_pregame(); + + if ( !anysplitscreen() ) + { + listen_to_the_doctor_started(); + thread listen_to_the_doctor_human_deaths(); + thread listen_to_the_doctor_zombie_deaths(); + thread listen_to_the_doctor_monkeys(); + } + + thread listen_to_the_doctor_endgame(); +} + +watch_survival_time() +{ + level endon( "end_game" ); + level notify( "new_human_suviving" ); + level endon( "new_human_suviving" ); + self endon( "zombify" ); + wait 10; + + if ( !isdefined( self.vo_human_survival_chance ) ) + self.vo_human_survival_chance = 24; + + while ( true ) + { + if ( !( isdefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) ) + { + if ( randomint( 100 ) < self.vo_human_survival_chance ) + { + self.vo_human_survival_chance = int( self.vo_human_survival_chance * 0.25 ); + level.playing_turned_kill_vo = 1; + self thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "dr_survival", undefined, undefined, 0 ); + wait 4; + level.playing_turned_kill_vo = 0; + } + } + + wait 5; + } +} + +zcleansed_logic() +{ + setdvar( "player_lastStandBleedoutTime", "0.05" ); + setmatchtalkflag( "DeadChatWithDead", 1 ); + setmatchtalkflag( "DeadChatWithTeam", 1 ); + setmatchtalkflag( "DeadHearTeamLiving", 1 ); + setmatchtalkflag( "DeadHearAllLiving", 1 ); + setmatchtalkflag( "EveryoneHearsEveryone", 1 ); + level.zombie_include_powerups["carpenter"] = 0; + level.noroundnumber = 1; + level._supress_survived_screen = 1; + doors = getentarray( "zombie_door", "targetname" ); + + foreach ( door in doors ) + door setinvisibletoall(); + + level thread maps\mp\zombies\_zm_blockers::open_all_zbarriers(); + level thread delay_box_hide(); + flag_wait( "initial_players_connected" ); + level.gamestarttime = gettime(); + level.gamelengthtime = undefined; + level.custom_spawnplayer = ::respawn_cleansed_player; + allow_player_movement( 0 ); + setup_players(); + flag_wait( "initial_blackscreen_passed" ); + level thread listen_to_the_doctor(); + level thread playturnedmusic(); + level notify( "start_fullscreen_fade_out" ); + wait 1.5; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] thread create_match_start_message( &"ZOMBIE_FIND_THE_CURE", 3.0 ); + + allow_player_movement( 1 ); + spawn_initial_cure_powerup(); + waitforhumanselection(); + level notify( "cleansed_game_started" ); + level thread leaderwatch(); + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] thread create_match_start_message( &"ZOMBIE_MOST_TIME_AS_HUMAN_TO_WIN", 3.0 ); + + wait 1.2; + flag_clear( "pregame" ); + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] thread destroystartmsghud(); + + registertimelimit( 0, 1440 ); + level.discardtime = gettime() - level.starttime; + level thread watch_for_end_game(); + wait_for_round_end(); + allow_player_movement( 0 ); + wait_network_frame(); + award_round_end_bonus(); + level notify( "end_game" ); +} + +wait_for_round_end() +{ + level endon( "early_game_end" ); + level endon( "normal_game_end" ); + + while ( maps\mp\gametypes_zm\_globallogic_utils::gettimeremaining() > 0 ) + wait 1; +} + +end_game_early() +{ +/# + iprintlnbold( "SOLO GAME - RELEASE ONLY" ); + return; +#/ + level.forcedend = 1; + level notify( "early_game_end" ); + level notify( "end_game" ); +} + +watch_for_end_game() +{ + level waittill( "end_game" ); + + registertimelimit( 0, 0 ); + setgameendtime( 0 ); +} + +cleansedontimelimit() +{ + level notify( "normal_game_end" ); +} + +cleansedonendgame( winningteam ) +{ + +} + +create_match_start_message( text, duration ) +{ + level endon( "end_game" ); + self endon( "disconnect" ); + self notify( "kill_match_start_message" ); + self endon( "kill_match_start_message" ); + + if ( !isdefined( self.match_start_msg_hud ) ) + { + self.match_start_msg_hud = newclienthudelem( self ); + self.match_start_msg_hud.alignx = "center"; + self.match_start_msg_hud.aligny = "middle"; + self.match_start_msg_hud.horzalign = "center"; + self.match_start_msg_hud.vertalign = "middle"; + self.match_start_msg_hud.y -= 130; + self.match_start_msg_hud.fontscale = 5; + self.match_start_msg_hud.foreground = 1; + + if ( self issplitscreen() ) + self.match_start_msg_hud.y += 70; + + self.match_start_msg_hud.color = ( 1, 1, 1 ); + self.match_start_msg_hud.hidewheninmenu = 1; + self.match_start_msg_hud.font = "default"; + } + + self.match_start_msg_hud settext( text ); + self.match_start_msg_hud changefontscaleovertime( 0.25 ); + self.match_start_msg_hud fadeovertime( 0.25 ); + self.match_start_msg_hud.alpha = 1; + self.match_start_msg_hud.fontscale = 2; + + if ( self issplitscreen() ) + self.match_start_msg_hud.fontscale = 1.5; + + wait( duration ); + + if ( !isdefined( self.match_start_msg_hud ) ) + return; + + self.match_start_msg_hud changefontscaleovertime( 0.5 ); + self.match_start_msg_hud fadeovertime( 0.5 ); + self.match_start_msg_hud.alpha = 0; +} + +destroystartmsghud() +{ + level endon( "end_game" ); + self endon( "disconnect" ); + + if ( !isdefined( self.match_start_msg_hud ) ) + return; + + self.match_start_msg_hud destroy(); + self.match_start_msg_hud = undefined; +} + +delay_box_hide() +{ + wait 2.0; + start_chest = getstruct( "start_chest", "script_noteworthy" ); + + if ( isdefined( start_chest ) ) + start_chest maps\mp\zombies\_zm_magicbox::hide_chest(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connected", player ); + + player thread onplayerlaststand(); + player thread onplayerdisconnect(); + player thread setup_player(); + player thread rewardsthink(); + } +} + +onplayerlaststand() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "player_downed" ); + + self takeallweapons(); + } +} + +onplayerdisconnect() +{ + level endon( "end_game" ); + + self waittill( "disconnect" ); + + if ( get_players().size <= 1 ) + end_game_early(); + else if ( !( isdefined( level.ingraceperiod ) && level.ingraceperiod ) ) + { + thread checkzombiehumanratio(); + wait 2; + players = get_players(); + + foreach ( player in players ) + player.nuked = undefined; + } +} + +zombie_ramp_up() +{ + self notify( "zombie_ramp_up" ); + self endon( "zombie_ramp_up" ); + self endon( "death_or_disconnect" ); + self endon( "humanify" ); + + if ( isdefined( level.cleansed_zombie_round ) ) + self.maxhealth = maps\mp\zombies\_zm::ai_zombie_health( level.cleansed_zombie_round ); + else + self.maxhealth = maps\mp\zombies\_zm::ai_zombie_health( 2 ); + + self.health = self.maxhealth; +} + +precache_trophy() +{ + +} + +create_trophy() +{ + +} + +give_trophy() +{ + if ( !self.has_trophy ) + { + self setclientfield( "player_eyes_special", 1 ); + self setclientfield( "player_has_eyes", 0 ); + wait_network_frame(); + + if ( cleansed_alive_check( self ) ) + self setclientfield( "player_has_eyes", self.is_zombie ); + + self.has_trophy = 1; + } +} + +remove_trophy() +{ + if ( self.has_trophy ) + { + self setclientfield( "player_eyes_special", 0 ); + self setclientfield( "player_has_eyes", 0 ); + wait_network_frame(); + + if ( cleansed_alive_check( self ) ) + self setclientfield( "player_has_eyes", self.is_zombie ); + + self.has_trophy = 0; + } +} + +enthrone( player ) +{ + player endon( "dethrone" ); + player endon( "disconnect" ); + + while ( true ) + { + if ( cleansed_alive_check( player ) && player.is_zombie ) + { + if ( !player.has_trophy ) + player give_trophy(); + } + else if ( player.has_trophy ) + player remove_trophy(); + + wait 0.1; + } +} + +dethrone( player ) +{ + player notify( "dethrone" ); + player remove_trophy(); +} + +cleansed_set_leader( leader ) +{ + if ( isdefined( leader ) && isdefined( level.cleansed_leader ) ) + { + if ( level.cleansed_leader != leader ) + { + dethrone( level.cleansed_leader ); + level.cleansed_leader = leader; + level thread enthrone( level.cleansed_leader ); + } + + return; + } + + if ( isdefined( leader ) && !isdefined( level.cleansed_leader ) ) + { + level.cleansed_leader = leader; + level thread enthrone( level.cleansed_leader ); + return; + } + + if ( !isdefined( leader ) && isdefined( level.cleansed_leader ) ) + { + if ( isdefined( level.cleansed_leader ) ) + dethrone( level.cleansed_leader ); + + level.cleansed_leader = leader; + return; + } +} + +leaderwatch() +{ + level endon( "early_game_end" ); + level endon( "normal_game_end" ); + create_trophy(); + cleansed_set_leader( undefined ); + + while ( true ) + { + hiscore = -1; + leader = undefined; + players = get_players(); + + foreach ( player in players ) + { + if ( player.score > hiscore ) + hiscore = player.score; + } + + foreach ( player in players ) + { + if ( player.score >= hiscore ) + { + if ( isdefined( leader ) ) + { + leader = undefined; + break; + } + + leader = player; + } + } + + cleansed_set_leader( leader ); + wait 0.25; + } +} + +cover_transition() +{ + self thread fadetoblackforxsec( 0, 0.15, 0.05, 0.1 ); + wait 0.1; +} + +disappear_in_flash( washuman ) +{ + playsoundatposition( "zmb_bolt", self.origin ); + + if ( washuman ) + playfx( level._effect["human_disappears"], self.origin ); + else + playfx( level._effect["zombie_disappears"], self.origin ); + + self ghost(); +} + +humanifyplayer( for_killing ) +{ +/# + +#/ + self freezecontrolswrapper( 1 ); + self thread cover_transition(); + self disappear_in_flash( 1 ); + self.team = self.prevteam; + self.pers["team"] = self.prevteam; + self.sessionteam = self.prevteam; + self turnedhuman(); + for_killing waittill_notify_or_timeout( "respawned", 0.75 ); + wait_network_frame(); + checkzombiehumanratio( self ); + self.last_player_attacker = undefined; + self freezecontrolswrapper( level.player_movement_suppressed ); + self thread watch_survival_time(); +/# + +#/ +} + +onzombifyplayer() +{ +/# + +#/ + if ( isdefined( self.in_zombify_call ) && self.in_zombify_call ) + return; + + self.in_zombify_call = 1; + + while ( isdefined( level.in_zombify_call ) && level.in_zombify_call ) + wait 0.1; + + level.in_zombify_call = 1; + self freezecontrolswrapper( 1 ); + + if ( isdefined( self.last_player_attacker ) && isplayer( self.last_player_attacker ) && ( isdefined( self.last_player_attacker.is_zombie ) && self.last_player_attacker.is_zombie ) ) + { + + } + + if ( isdefined( self.is_zombie ) && self.is_zombie ) + { +/# + +#/ + self check_for_drops( 0 ); + } + else if ( isdefined( self.last_player_attacker ) && isplayer( self.last_player_attacker ) && ( isdefined( self.last_player_attacker.is_zombie ) && self.last_player_attacker.is_zombie ) ) + { +/# + +#/ + self check_for_drops( 1 ); + self.team = level.zombie_team; + self.pers["team"] = level.zombie_team; + self.sessionteam = level.zombie_team; + self.last_player_attacker thread humanifyplayer( self ); + self.player_was_turned_by = self.last_player_attacker; + } + else + { +/# + +#/ + self check_for_drops( 1 ); + self player_suicide(); + checkzombiehumanratio( undefined, self ); + } + + self setclientfield( "player_has_eyes", 0 ); + + if ( isdefined( self.is_zombie ) && self.is_zombie ) + { + + } + + self notify( "zombified" ); + self disappear_in_flash( 0 ); + self cover_transition(); + self notify( "clear_red_flashing_overlay" ); + self.zombification_time = gettime() / 1000; + self.last_player_attacker = undefined; + self maps\mp\zombies\_zm_laststand::laststand_enable_player_weapons(); + self.ignoreme = 1; + + if ( isdefined( self.revivetrigger ) ) + self.revivetrigger delete(); + + self.revivetrigger = undefined; + self reviveplayer(); + self maps\mp\zombies\_zm_turned::turn_to_zombie(); + self freezecontrolswrapper( level.player_movement_suppressed ); + self thread zombie_ramp_up(); + level.in_zombify_call = 0; + self.in_zombify_call = 0; +/# + +#/ +} + +playerfakedeath( vdir ) +{ + if ( !( isdefined( self.is_zombie ) && self.is_zombie ) ) + { + self endon( "disconnect" ); + level endon( "game_module_ended" ); + level notify( "fake_death" ); + self notify( "fake_death" ); + self enableinvulnerability(); + self takeallweapons(); + self freezecontrolswrapper( 1 ); + self.ignoreme = 1; + origin = self.origin; + xyspeed = ( 0, 0, 0 ); + angles = self getplayerangles(); + angles = ( angles[0], angles[1], angles[2] + randomfloatrange( -5, 5 ) ); + + if ( isdefined( vdir ) && length( vdir ) > 0 ) + { + xyspeedmag = 40 + randomint( 12 ) + randomint( 12 ); + xyspeed = xyspeedmag * vectornormalize( ( vdir[0], vdir[1], 0 ) ); + } + + linker = spawn( "script_origin", ( 0, 0, 0 ) ); + linker.origin = origin; + linker.angles = angles; + self._fall_down_anchor = linker; + self playerlinkto( linker ); + self playsoundtoplayer( "zmb_player_death_fall", self ); + origin = playerphysicstrace( origin, origin + xyspeed ); + origin += vectorscale( ( 0, 0, -1 ), 52.0 ); + lerptime = 0.5; + linker moveto( origin, lerptime, lerptime ); + linker rotateto( angles, lerptime, lerptime ); + self freezecontrolswrapper( 1 ); + + linker waittill( "movedone" ); + + self giveweapon( "death_throe_zm" ); + self switchtoweapon( "death_throe_zm" ); + bounce = randomint( 4 ) + 8; + origin = origin + ( 0, 0, bounce ) - xyspeed * 0.1; + lerptime = bounce / 50.0; + linker moveto( origin, lerptime, 0, lerptime ); + + linker waittill( "movedone" ); + + origin = origin + ( 0, 0, bounce * -1 ) + xyspeed * 0.1; + lerptime /= 2.0; + linker moveto( origin, lerptime, lerptime ); + + linker waittill( "movedone" ); + + linker moveto( origin, 5, 0 ); + wait 5; + linker delete(); + self.ignoreme = 0; + self takeweapon( "death_throe_zm" ); + self disableinvulnerability(); + self freezecontrolswrapper( 0 ); + } +} + +onspawnzombie() +{ + +} + +makefindfleshstructs() +{ + structs = getstructarray( "spawn_location", "script_noteworthy" ); + + foreach ( struct in structs ) + struct.script_string = "find_flesh"; +} + +setup_players() +{ +/# + if ( getdvarint( _hash_99BF96D1 ) != 0 ) + { + foreach ( spawnpoint in level._turned_zombie_respawnpoints ) + { + text = ""; + color = ( 0, 1, 0 ); + + if ( !isdefined( spawnpoint.angles ) ) + { + text = "No Angles Defined"; + color = ( 1, 0, 0 ); + spawnpoint.angles = ( 0, 0, 0 ); + } + } + } +#/ +} + +setup_player() +{ + hotjoined = flag( "initial_players_connected" ); + flag_wait( "initial_players_connected" ); + wait 0.05; + self ghost(); + self freezecontrolswrapper( 1 ); + self.ignoreme = 0; + self.score = 0; + self.characterindex = level.characterindex; + self takeallweapons(); + self giveweapon( "knife_zm" ); + self give_start_weapon( 1 ); + self.prevteam = self.team; + self.no_revive_trigger = 1; + self.human_score = 0; + self thread player_score_update(); + self.is_zombie = 0; + self.has_trophy = 0; + self.home_team = self.team; + + if ( self.home_team == "axis" ) + self.home_team = "team3"; + + self thread wait_turn_to_zombie( hotjoined ); +} + +wait_turn_to_zombie( hot ) +{ + if ( hot ) + { + self thread fadetoblackforxsec( 0, 1.25, 0.05, 0.25 ); + wait 1; + } + + self.is_zombie = 0; + self turn_to_zombie(); + self freezecontrolswrapper( level.player_movement_suppressed ); +} + +addguntoprogression( gunname ) +{ + if ( !isdefined( level.gunprogression ) ) + level.gunprogression = []; + + level.gunprogression[level.gunprogression.size] = gunname; +} + +check_spawn_cymbal_monkey( origin, weapon ) +{ + chance = -0.05; + + if ( !self hasweapon( "cymbal_monkey_zm" ) || self getweaponammoclip( "cymbal_monkey_zm" ) < 1 ) + { + if ( weapon == "cymbal_monkey_zm" || randomfloat( 1 ) < chance ) + { + self notify( "awarded_cymbal_monkey" ); + level.spawned_cymbal_monkey = spawn_cymbalmonkey( origin ); + level.spawned_cymbal_monkey thread delete_spawned_monkey_on_turned( self ); + return true; + } + } + + return false; +} + +delete_spawned_monkey_on_turned( player ) +{ + wait 1; + + while ( isdefined( self ) && !( isdefined( player.is_zombie ) && player.is_zombie ) ) + wait_network_frame(); + + if ( isdefined( self ) ) + { + self maps\mp\zombies\_zm_powerups::powerup_delete(); + self notify( "powerup_timedout" ); + } +} + +rewardsthink() +{ + self endon( "_zombie_game_over" ); + self endon( "disconnect" ); + + while ( isdefined( self ) ) + { + self waittill( "killed_a_zombie_player", einflictor, target, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); + + if ( !( isdefined( self.is_zombie ) && self.is_zombie ) ) + { + if ( self check_spawn_cymbal_monkey( target.origin, sweapon ) ) + target.suppress_drops = 1; + } + } +} + +shotgunloadout() +{ + self endon( "_zombie_game_over" ); + self endon( "disconnect" ); + self endon( "bled_out" ); + self endon( "zombify" ); + level.cymbal_monkey_clone_weapon = "rottweil72_zm"; + + if ( !self hasweapon( "rottweil72_zm" ) ) + { + self giveweapon( "rottweil72_zm" ); + self switchtoweapon( "rottweil72_zm" ); + } + + if ( !( isdefined( self.is_zombie ) && self.is_zombie ) && !self hasweapon( level.start_weapon ) ) + { + if ( !self hasweapon( "knife_zm" ) ) + self giveweapon( "knife_zm" ); + + self give_start_weapon( 0 ); + } + + if ( self hasweapon( "rottweil72_zm" ) ) + { + self setweaponammoclip( "rottweil72_zm", 2 ); + self setweaponammostock( "rottweil72_zm", 0 ); + } + + if ( self hasweapon( level.start_weapon ) ) + self givemaxammo( level.start_weapon ); + + if ( self hasweapon( self get_player_lethal_grenade() ) ) + self getweaponammoclip( self get_player_lethal_grenade() ); + else + self giveweapon( self get_player_lethal_grenade() ); + + self setweaponammoclip( self get_player_lethal_grenade(), 2 ); + + if ( !( isdefined( self.random_human ) && self.random_human ) ) + { + + } +} + +gunprogressionthink() +{ + self endon( "_zombie_game_over" ); + self endon( "disconnect" ); + self endon( "bled_out" ); + self endon( "zombify" ); + counter = 0; + + if ( isdefined( level.gunprogression ) && !isdefined( level.cymbal_monkey_clone_weapon ) ) + level.cymbal_monkey_clone_weapon = level.gunprogression[0]; + + last = level.start_weapon; + + if ( !self hasweapon( self get_player_lethal_grenade() ) ) + self giveweapon( self get_player_lethal_grenade() ); + + self setweaponammoclip( self get_player_lethal_grenade(), 2 ); + + if ( !( isdefined( self.random_human ) && self.random_human ) ) + { + + } + + self disableweaponcycling(); + + while ( !( isdefined( self.is_zombie ) && self.is_zombie ) ) + { + if ( !isdefined( level.gunprogression[counter] ) ) + break; + + self disableweaponcycling(); + self giveweapon( level.gunprogression[counter] ); + self switchtoweapon( level.gunprogression[counter] ); + self waittill_notify_or_timeout( "weapon_change_complete", 0.5 ); + + if ( isdefined( last ) && self hasweapon( last ) ) + self takeweapon( last ); + + last = level.gunprogression[counter]; + + while ( true ) + { + self waittill( "killed_a_zombie_player", einflictor, target, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); + + if ( isdefined( sweapon ) && level.gunprogression[counter] == sweapon ) + break; + } + + counter++; + } + + self giveweapon( level.start_weapon ); + self switchtoweapon( level.start_weapon ); + + self waittill( "weapon_change_complete" ); + + if ( isdefined( last ) && self hasweapon( last ) ) + self takeweapon( last ); + + while ( true ) + { + self waittill( "killed_a_zombie_player", einflictor, target, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); + + if ( isdefined( sweapon ) && level.start_weapon == sweapon ) + { + self notify( "gun_game_achievement" ); + break; + } + } +} + +waitforhumanselection() +{ + level waittill( "initial_human_selected" ); +} + +checkzombiehumanratio( playertomove, playertoignore ) +{ + zombiecount = 0; + humancount = 0; + zombieexist = 0; + humanexist = 0; + earliestzombie = undefined; + earliestzombietime = 99999999; + + if ( get_players().size <= 1 ) + end_game_early(); + + while ( isdefined( level.checking_human_zombie_ratio ) && level.checking_human_zombie_ratio ) + wait 0.05; + + level.checking_human_zombie_ratio = 1; + + if ( isdefined( playertomove ) ) + { + someonebecominghuman = 0; + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( player.is_in_process_of_humanify ) && player.is_in_process_of_humanify ) + someonebecominghuman = 1; + } + + if ( !( isdefined( someonebecominghuman ) && someonebecominghuman ) ) + playertomove turn_to_human(); + + level.checking_human_zombie_ratio = 0; + return; + } + + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( playertoignore ) && playertoignore == player ) + continue; + + if ( !( isdefined( player.is_zombie ) && player.is_zombie ) && !( isdefined( player.is_in_process_of_zombify ) && player.is_in_process_of_zombify ) ) + { + humancount++; + humanexist = 1; + continue; + } + + zombiecount++; + zombieexist = 1; + + if ( isdefined( player.zombification_time ) && player.zombification_time < earliestzombietime ) + { + earliestzombie = player; + earliestzombietime = player.zombification_time; + } + } + + if ( humancount > 1 ) + { + players = get_players( "allies" ); + + if ( isdefined( players ) && players.size > 0 ) + { + player = random( players ); + player thread cover_transition(); + player disappear_in_flash( 1 ); +/# + +#/ + player turn_to_zombie(); + zombiecount++; + } + } + + if ( !humanexist ) + { + players = get_players( level.zombie_team ); + + if ( isdefined( players ) && players.size > 0 ) + { + player = random( players ); + player thread cover_transition(); + player disappear_in_flash( 0 ); + player.random_human = 1; +/# + +#/ + player turn_to_human(); + player.random_human = 0; + zombiecount--; + } + } + + level.checking_human_zombie_ratio = 0; +} + +get_player_rank() +{ + level.player_score_sort = []; + players = get_players(); + + foreach ( player in players ) + { + for ( index = 0; index < level.player_score_sort.size && player.score < level.player_score_sort[index].score; index++ ) + { + + } + + arrayinsert( level.player_score_sort, player, index ); + } + + for ( index = 0; index < level.player_score_sort.size; index++ ) + { + if ( self == level.player_score_sort[index] ) + return index; + } +/# + assertmsg( "This should not happen" ); +#/ + return 0; +} + +player_add_score( bonus ) +{ + mult = 1; + + if ( isdefined( self.is_zombie ) && self.is_zombie ) + mult = level.zombie_vars[level.zombie_team]["zombie_point_scalar"]; + else + mult = level.zombie_vars["allies"]["zombie_point_scalar"]; + + self maps\mp\zombies\_zm_score::add_to_player_score( bonus * mult ); +} + +player_sub_score( penalty ) +{ + penalty = int( min( self.score, penalty ) ); + self maps\mp\zombies\_zm_score::add_to_player_score( penalty * -1 ); +} + +player_suicide() +{ + self player_sub_score( level.human_player_suicide_penalty ); +/# + if ( get_players().size < 2 ) + { + self.intermission = 0; + thread spawn_initial_cure_powerup(); + } +#/ +} + +player_kills_player( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + score_multiplier = 1; + + if ( !( isdefined( eattacker.is_zombie ) && eattacker.is_zombie ) && isdefined( level.zombie_player_kill_points ) ) + { + level notify( "killed_by_human", eattacker, self ); + eattacker player_add_score( int( score_multiplier * level.zombie_player_kill_points ) ); + eattacker maps\mp\zombies\_zm_stats::add_global_stat( "PLAYER_KILLS", 1 ); + + if ( smeansofdeath == "MOD_GRENADE" || smeansofdeath == "MOD_GRENADE_SPLASH" ) + { + eattacker maps\mp\zombies\_zm_stats::increment_client_stat( "grenade_kills" ); + eattacker maps\mp\zombies\_zm_stats::increment_player_stat( "grenade_kills" ); + } + } + + if ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie && isdefined( level.human_player_kill_points ) ) + { + level notify( "killed_by_zombie", eattacker, self ); + eattacker player_add_score( int( score_multiplier * level.human_player_kill_points ) ); + eattacker maps\mp\zombies\_zm_stats::add_global_stat( "PLAYER_RETURNS", 1 ); + } +} + +award_round_end_bonus() +{ + level notify( "stop_player_scores" ); + wait 0.25; + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_time_line", undefined, undefined, 1 ); + + while ( maps\mp\zombies\_zm_laststand::player_any_player_in_laststand() || isdefined( level.in_zombify_call ) && level.in_zombify_call ) + wait 0.25; + + hiscore = -1; + + foreach ( player in get_players() ) + { + if ( !( isdefined( player.is_zombie ) && player.is_zombie ) ) + { + player player_add_score( level.human_finish_bonus_points ); + level.last_human_standing = player; + } + + if ( player.score > hiscore ) + hiscore = player.score; + } + + foreach ( player in get_players() ) + { + if ( player.score >= hiscore ) + { + player.team = player.prevteam; + player.pers["team"] = player.prevteam; + player.sessionteam = player.prevteam; + player maps\mp\zombies\_zm_stats::increment_client_stat( "wins" ); + player maps\mp\zombies\_zm_stats::add_client_stat( "losses", -1 ); + player adddstat( "skill_rating", 1.0 ); + player setdstat( "skill_variance", 1.0 ); + + if ( gamemodeismode( level.gamemode_public_match ) ) + { + player maps\mp\zombies\_zm_stats::add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "wins", 1 ); + player maps\mp\zombies\_zm_stats::add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "losses", -1 ); + } + + continue; + } + + player.team = level.zombie_team; + player.pers["team"] = level.zombie_team; + player.sessionteam = level.zombie_team; + player setdstat( "skill_rating", 0.0 ); + player setdstat( "skill_variance", 1.0 ); + } +} + +player_score_update() +{ + self endon( "_zombie_game_over" ); + self endon( "disconnect" ); + level endon( "stop_player_scores" ); + waittime = 0.05; + + while ( true ) + { + self waittill_any_or_timeout( waittime, "zombify", "humanify" ); + + if ( !( isdefined( self._can_score ) && self._can_score ) ) + continue; + + if ( isdefined( level.hostmigrationtimer ) && level.hostmigrationtimer ) + continue; + + if ( !( isdefined( level.ingraceperiod ) && level.ingraceperiod ) ) + { + if ( !cleansed_alive_check( self ) ) + waittime = 0.05; + else if ( isdefined( self.is_zombie ) && self.is_zombie ) + { + waittime = level.zombie_penalty_period; + self player_sub_score( level.zombie_penalty_points ); + } + else + { + waittime = level.human_bonus_period; + self player_add_score( level.human_bonus_points ); + } + } + } +} + +respawn_cleansed_player() +{ + spawnpoint = self maps\mp\zombies\_zm_turned::getspawnpoint(); + self.sessionstate = "playing"; + self allowspectateteam( "freelook", 0 ); + self spawn( spawnpoint.origin, spawnpoint.angles ); + self notify( "stop_flame_damage" ); + self reviveplayer(); + self.nuked = 0; + self.nuker = undefined; + self.suppress_drops = 0; + self.is_burning = 0; + self.is_zombie = 0; + self.ignoreme = 0; + self freezecontrolswrapper( level.player_movement_suppressed ); + self notify( "respawned" ); +} + +zcleansed_zombie_powerup_grab( powerup, zombie_player ) +{ + if ( !cleansed_alive_check( zombie_player ) ) + return 0; + + switch ( powerup.powerup_name ) + { + case "the_cure": + level notify( "initial_human_selected" ); + zombie_player freezecontrolswrapper( 1 ); + zombie_player disappear_in_flash( 0 ); + zombie_player turn_to_human(); + players = get_players(); + + foreach ( player in players ) + { + if ( player.is_zombie ) + player thread zombie_ramp_up(); + } + + break; + default: + if ( isdefined( level.cleansed_powerups[powerup.powerup_name] ) ) + { + if ( isdefined( level.cleansed_powerups[powerup.powerup_name].callback ) ) + powerup thread [[ level.cleansed_powerups[powerup.powerup_name].callback ]]( zombie_player ); + } + } +} + +zcleansed_powerup_grab( powerup, player ) +{ + if ( !cleansed_alive_check( player ) ) + return 0; + + switch ( powerup.powerup_name ) + { + case "blue_monkey": + player maps\mp\zombies\_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); + player setweaponammoclip( "cymbal_monkey_zm", 1 ); + player notify( "powerup_blue_monkey" ); + break; + default: + if ( isdefined( level.cleansed_powerups[powerup.powerup_name] ) ) + { + if ( isdefined( level.cleansed_powerups[powerup.powerup_name].callback ) ) + powerup thread [[ level.cleansed_powerups[powerup.powerup_name].callback ]]( player ); + } + } +} + +zcleansed_powerup_custom_time_logic( powerup ) +{ + if ( powerup.powerup_name == "the_cure" ) + return 0; + + return 15; +} + +spawn_initial_cure_powerup() +{ + struct = random( level._turned_powerup_spawnpoints ); + maps\mp\zombies\_zm_powerups::specific_powerup_drop( "the_cure", struct.origin ); +} + +spawn_cymbalmonkey( origin ) +{ + monkey = maps\mp\zombies\_zm_powerups::specific_powerup_drop( "blue_monkey", origin ); + return monkey; +} + +check_for_drops( washuman ) +{ + if ( !isdefined( level.cleansed_kills_for_drops ) ) + level.cleansed_kills_for_drops = 0; + + if ( isdefined( self.nuked ) && self.nuked || isdefined( self.suppress_drops ) && self.suppress_drops ) + return; + + level.cleansed_kills_for_drops++; + chance = ( level.cleansed_kills_for_drops - 2 ) / level.cleansed_kills_for_drops; + + if ( chance > 0 ) + { + r = randomfloatrange( 0, 1 ); + + if ( r < chance ) + { + self thread drop_powerup( washuman ); + level.cleansed_kills_for_drops = 0; + } + } +} + +add_cleansed_powerup( name, powerupmodel, text, team, zombie_death_frequency, human_death_frequency, callback ) +{ + if ( !isdefined( level.cleansed_powerups ) ) + level.cleansed_powerups = []; + + precachemodel( powerupmodel ); + + if ( !isdefined( level.zombie_powerups[name] ) ) + { + maps\mp\zombies\_zm_powerups::include_zombie_powerup( name ); + maps\mp\zombies\_zm_powerups::add_zombie_powerup( name, powerupmodel, text, maps\mp\zombies\_zm_powerups::func_should_never_drop, 0, team == 2, team == 1 ); + + if ( !isdefined( level.statless_powerups ) ) + level.statless_powerups = []; + + level.statless_powerups[name] = 1; + } + + powerup = spawnstruct(); + powerup.name = name; + powerup.model = powerupmodel; + powerup.team = team; + powerup.callback = callback; + powerup.zfrequency = zombie_death_frequency; + powerup.hfrequency = human_death_frequency; + level.cleansed_powerups[name] = powerup; +} + +init_cleansed_powerups() +{ + level._effect["powerup_on_solo"] = loadfx( "misc/fx_zombie_powerup_on_blue" ); + add_cleansed_powerup( "green_nuke", "zombie_bomb", &"ZOMBIE_THIS_IS_A_BUG", 0, 0.4, 0, ::turned_powerup_green_nuke ); + add_cleansed_powerup( "green_double", "zombie_x2_icon", &"ZOMBIE_THIS_IS_A_BUG", 0, 1, 0, ::turned_powerup_green_double ); + add_cleansed_powerup( "green_insta", "zombie_skull", &"ZOMBIE_THIS_IS_A_BUG", 0, 0.1, 0, ::turned_powerup_green_insta ); + add_cleansed_powerup( "green_ammo", "zombie_ammocan", &"ZOMBIE_POWERUP_MAX_AMMO", 0, 1, 0, ::turned_powerup_green_ammo ); + add_cleansed_powerup( "green_monkey", level.cymbal_monkey_model, &"ZOMBIE_THIS_IS_A_BUG", 0, 0.4, 0, ::turned_powerup_green_monkey ); + add_cleansed_powerup( "red_nuke", "zombie_bomb", &"ZOMBIE_THIS_IS_A_BUG", 1, 0, 0.4, ::turned_powerup_red_nuke ); + add_cleansed_powerup( "red_ammo", "zombie_ammocan", &"ZOMBIE_THIS_IS_A_BUG", 1, 0, 1, ::turned_powerup_red_ammo ); + add_cleansed_powerup( "red_double", "zombie_x2_icon", &"ZOMBIE_THIS_IS_A_BUG", 1, 0, 1, ::turned_powerup_red_double ); + add_cleansed_powerup( "yellow_double", "zombie_x2_icon", &"ZOMBIE_THIS_IS_A_BUG", 2, 0.1, 0.1, ::turned_powerup_yellow_double ); + add_cleansed_powerup( "yellow_nuke", "zombie_bomb", &"ZOMBIE_THIS_IS_A_BUG", 2, 0.01, 0.01, ::turned_powerup_yellow_nuke ); + level.cleansed_powerup_history_depth = []; + level.cleansed_powerup_history_depth[0] = 2; + level.cleansed_powerup_history_depth[1] = 1; + level.cleansed_powerup_history = []; + level.cleansed_powerup_history[0] = []; + level.cleansed_powerup_history[1] = []; + level.cleansed_powerup_history_last = []; + level.cleansed_powerup_history_last[0] = 0; + level.cleansed_powerup_history_last[1] = 0; + + for ( i = 0; i < level.cleansed_powerup_history_depth[0]; i++ ) + { + level.cleansed_powerup_history[0][i] = "none"; + level.cleansed_powerup_history[1][i] = "none"; + } +} + +pick_a_powerup( washuman ) +{ + total = 0; + + foreach ( powerup in level.cleansed_powerups ) + { + powerup.recent = 0; + + for ( i = 0; i < level.cleansed_powerup_history_depth[washuman]; i++ ) + { + if ( level.cleansed_powerup_history[washuman][i] == powerup.name ) + powerup.recent = 1; + } + + if ( powerup.recent ) + continue; + + if ( washuman ) + { + total += powerup.hfrequency; + continue; + } + + total += powerup.zfrequency; + } + + if ( total == 0 ) + return undefined; + + r = randomfloat( total ); + + foreach ( powerup in level.cleansed_powerups ) + { + if ( powerup.recent ) + continue; + + if ( washuman ) + r -= powerup.hfrequency; + else + r -= powerup.zfrequency; + + if ( r <= 0 ) + { + level.cleansed_powerup_history[washuman][level.cleansed_powerup_history_last[washuman]] = powerup.name; + level.cleansed_powerup_history_last[washuman]++; + + if ( level.cleansed_powerup_history_last[washuman] >= level.cleansed_powerup_history_depth[washuman] ) + level.cleansed_powerup_history_last[washuman] = 0; + + return powerup; + } + } + + return undefined; +} + +drop_powerup( washuman ) +{ + powerup = pick_a_powerup( washuman ); + + if ( isdefined( powerup ) ) + { + origin = self.origin; + wait 0.25; + maps\mp\zombies\_zm_powerups::specific_powerup_drop( powerup.name, origin ); + } +} + +powerup_can_player_grab( player ) +{ + if ( !cleansed_alive_check( player ) ) + return false; + + if ( isdefined( level.cleansed_powerups[self.powerup_name] ) ) + { + if ( level.cleansed_powerups[self.powerup_name].team == 0 && ( isdefined( player.is_zombie ) && player.is_zombie ) ) + return false; + + if ( level.cleansed_powerups[self.powerup_name].team == 1 && !( isdefined( player.is_zombie ) && player.is_zombie ) ) + return false; + } + else + { + if ( self.zombie_grabbable && !( isdefined( player.is_zombie ) && player.is_zombie ) ) + return false; + + if ( !self.zombie_grabbable && ( isdefined( player.is_zombie ) && player.is_zombie ) ) + return false; + } + + return true; +} + +player_nuke_fx() +{ + self endon( "death" ); + self endon( "respawned" ); + self endon( "stop_flame_damage" ); + + if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_torso"] ) ) + { + if ( !self.isdog ) + playfxontag( level._effect["character_fire_death_torso"], self, "J_SpineLower" ); + } + + if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_sm"] ) ) + { + wait 1; + tagarray = []; + tagarray[0] = "J_Elbow_LE"; + tagarray[1] = "J_Elbow_RI"; + tagarray[2] = "J_Knee_RI"; + tagarray[3] = "J_Knee_LE"; + tagarray = array_randomize( tagarray ); + playfxontag( level._effect["character_fire_death_sm"], self, tagarray[0] ); + wait 1; + tagarray[0] = "J_Wrist_RI"; + tagarray[1] = "J_Wrist_LE"; + + if ( !isdefined( self.a ) || !isdefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" ) + { + tagarray[2] = "J_Ankle_RI"; + tagarray[3] = "J_Ankle_LE"; + } + + tagarray = array_randomize( tagarray ); + playfxontag( level._effect["character_fire_death_sm"], self, tagarray[0] ); + playfxontag( level._effect["character_fire_death_sm"], self, tagarray[1] ); + } +} + +player_nuke( player ) +{ + nuke_time = 2; + self.isdog = 0; + self.nuked = 1; + self.nuker = player; + self freezecontrolswrapper( 1 ); + maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, nuke_time / 2, nuke_time ); + self thread player_nuke_fx(); + wait( nuke_time ); + + if ( isdefined( self ) ) + { + if ( isdefined( player ) ) + self dodamage( self.health + 666, player.origin, player, player, "none", "MOD_EXPLOSIVE", 0, "nuke_zm" ); + else + { + self.nuked = undefined; + self dodamage( self.health + 666, self.origin, self, self, "none", "MOD_EXPLOSIVE", 0, "nuke_zm" ); + } + } +} + +turned_powerup_green_nuke( player ) +{ + location = self.origin; + playfx( level.zombie_powerups["nuke"].fx, location ); + level thread maps\mp\zombies\_zm_powerups::nuke_flash(); + players = get_players(); + + foreach ( target in players ) + { + if ( !cleansed_alive_check( target ) ) + continue; + + if ( isdefined( target.is_zombie ) && target.is_zombie ) + { + target thread player_nuke( player ); + continue; + } + } +} + +turned_powerup_green_double( player ) +{ + level thread maps\mp\zombies\_zm_powerups::double_points_powerup( self, player ); +} + +turned_powerup_green_insta( player ) +{ + level thread maps\mp\zombies\_zm_powerups::insta_kill_powerup( self, player ); +} + +turned_powerup_green_ammo( player ) +{ + level thread maps\mp\zombies\_zm_powerups::full_ammo_powerup( self, player ); + weapon = player getcurrentweapon(); + player givestartammo( weapon ); +} + +turned_powerup_green_monkey( player ) +{ + player maps\mp\zombies\_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); + player setweaponammoclip( "cymbal_monkey_zm", 1 ); + player notify( "powerup_green_monkey" ); +} + +turned_powerup_red_nuke( player ) +{ + location = self.origin; + playfx( level.zombie_powerups["nuke"].fx, location ); + level thread maps\mp\zombies\_zm_powerups::nuke_flash(); + players = get_players(); + + foreach ( target in players ) + { + if ( !cleansed_alive_check( target ) ) + continue; + + if ( isdefined( target.is_zombie ) && target.is_zombie ) + continue; + + target thread player_nuke( player ); + } +} + +turned_powerup_red_ammo( player ) +{ + level thread maps\mp\zombies\_zm_powerups::empty_clip_powerup( self ); +} + +turned_powerup_red_double( player ) +{ + level thread maps\mp\zombies\_zm_powerups::double_points_powerup( self, player ); +} + +turned_powerup_yellow_double( player ) +{ + level thread maps\mp\zombies\_zm_powerups::double_points_powerup( self, player ); +} + +turned_powerup_yellow_nuke( player ) +{ + location = self.origin; + playfx( level.zombie_powerups["nuke"].fx, location ); + level thread maps\mp\zombies\_zm_powerups::nuke_flash(); + players = get_players(); + + foreach ( target in players ) + { + if ( !cleansed_alive_check( target ) ) + continue; + + if ( isdefined( target.team != player.team ) && target.team != player.team ) + target thread player_nuke( player ); + } +} + +playturnedmusic() +{ + ent = spawn( "script_origin", ( 0, 0, 0 ) ); + ent thread stopturnedmusic(); + playsoundatposition( "mus_zmb_gamemode_start", ( 0, 0, 0 ) ); + wait 5; + ent playloopsound( "mus_zmb_gamemode_loop", 5 ); +} + +stopturnedmusic() +{ + level waittill( "end_game" ); + + self stoploopsound( 1.5 ); + wait 1; + self delete(); +} diff --git a/ZM/Maps/Buried/maps/mp/gametypes_zm/zgrief.gsc b/ZM/Maps/Buried/maps/mp/gametypes_zm/zgrief.gsc new file mode 100644 index 0000000..9138fd2 --- /dev/null +++ b/ZM/Maps/Buried/maps/mp/gametypes_zm/zgrief.gsc @@ -0,0 +1,814 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\gametypes_zm\zmeat; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_game_module_meat_utility; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_weap_cymbal_monkey; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\_demo; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_equipment; + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::main(); + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.custom_spectate_permissions = ::setspectatepermissionsgrief; + level._game_module_custom_spawn_init_func = maps\mp\gametypes_zm\_zm_gametype::custom_spawn_init_func; + level._game_module_stat_update_func = maps\mp\zombies\_zm_stats::grief_custom_stat_update; + level._game_module_player_damage_callback = maps\mp\gametypes_zm\_zm_gametype::game_module_player_damage_callback; + level.custom_end_screen = ::custom_end_screen; + level.gamemode_map_postinit["zgrief"] = ::postinit_func; + level._supress_survived_screen = 1; + level.game_module_team_name_override_og_x = 155; + level.prevent_player_damage = ::player_prevent_damage; + level._game_module_player_damage_grief_callback = ::game_module_player_damage_grief_callback; + level._grief_reset_message = ::grief_reset_message; + level._game_module_player_laststand_callback = ::grief_laststand_weapon_save; + level.onplayerspawned_restore_previous_weapons = ::grief_laststand_weapons_return; + level.game_module_onplayerconnect = ::grief_onplayerconnect; + level.game_mode_spawn_player_logic = ::game_mode_spawn_player_logic; + level.game_mode_custom_onplayerdisconnect = ::grief_onplayerdisconnect; + maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zgrief" ); +} + +grief_onplayerconnect() +{ + self thread move_team_icons(); + self thread maps\mp\gametypes_zm\zmeat::create_item_meat_watcher(); + self thread zgrief_player_bled_out_msg(); +} + +grief_onplayerdisconnect( disconnecting_player ) +{ + level thread update_players_on_bleedout_or_disconnect( disconnecting_player ); +} + +setspectatepermissionsgrief() +{ + self allowspectateteam( "allies", 1 ); + self allowspectateteam( "axis", 1 ); + self allowspectateteam( "freelook", 0 ); + self allowspectateteam( "none", 1 ); +} + +custom_end_screen() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + players[i].game_over_hud = newclienthudelem( players[i] ); + players[i].game_over_hud.alignx = "center"; + players[i].game_over_hud.aligny = "middle"; + players[i].game_over_hud.horzalign = "center"; + players[i].game_over_hud.vertalign = "middle"; + players[i].game_over_hud.y -= 130; + players[i].game_over_hud.foreground = 1; + players[i].game_over_hud.fontscale = 3; + players[i].game_over_hud.alpha = 0; + players[i].game_over_hud.color = ( 1, 1, 1 ); + players[i].game_over_hud.hidewheninmenu = 1; + players[i].game_over_hud settext( &"ZOMBIE_GAME_OVER" ); + players[i].game_over_hud fadeovertime( 1 ); + players[i].game_over_hud.alpha = 1; + + if ( players[i] issplitscreen() ) + { + players[i].game_over_hud.fontscale = 2; + players[i].game_over_hud.y += 40; + } + + players[i].survived_hud = newclienthudelem( players[i] ); + players[i].survived_hud.alignx = "center"; + players[i].survived_hud.aligny = "middle"; + players[i].survived_hud.horzalign = "center"; + players[i].survived_hud.vertalign = "middle"; + players[i].survived_hud.y -= 100; + players[i].survived_hud.foreground = 1; + players[i].survived_hud.fontscale = 2; + players[i].survived_hud.alpha = 0; + players[i].survived_hud.color = ( 1, 1, 1 ); + players[i].survived_hud.hidewheninmenu = 1; + + if ( players[i] issplitscreen() ) + { + players[i].survived_hud.fontscale = 1.5; + players[i].survived_hud.y += 40; + } + + winner_text = &"ZOMBIE_GRIEF_WIN"; + loser_text = &"ZOMBIE_GRIEF_LOSE"; + + if ( level.round_number < 2 ) + { + winner_text = &"ZOMBIE_GRIEF_WIN_SINGLE"; + loser_text = &"ZOMBIE_GRIEF_LOSE_SINGLE"; + } + + if ( isdefined( level.host_ended_game ) && level.host_ended_game ) + players[i].survived_hud settext( &"MP_HOST_ENDED_GAME" ); + else if ( isdefined( level.gamemodulewinningteam ) && players[i]._encounters_team == level.gamemodulewinningteam ) + players[i].survived_hud settext( winner_text, level.round_number ); + else + players[i].survived_hud settext( loser_text, level.round_number ); + + players[i].survived_hud fadeovertime( 1 ); + players[i].survived_hud.alpha = 1; + } +} + +postinit_func() +{ + level.min_humans = 1; + level.zombie_ai_limit = 24; + level.prevent_player_damage = ::player_prevent_damage; + level.lock_player_on_team_score = 1; + level._zombiemode_powerup_grab = ::meat_stink_powerup_grab; + level.meat_bounce_override = ::meat_bounce_override; + level._zombie_spawning = 0; + level._get_game_module_players = undefined; + level.powerup_drop_count = 0; + level.is_zombie_level = 1; + level._effect["meat_impact"] = loadfx( "maps/zombie/fx_zmb_meat_impact" ); + level._effect["spawn_cloud"] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); + level._effect["meat_stink_camera"] = loadfx( "maps/zombie/fx_zmb_meat_stink_camera" ); + level._effect["meat_stink_torso"] = loadfx( "maps/zombie/fx_zmb_meat_stink_torso" ); + include_powerup( "meat_stink" ); + maps\mp\zombies\_zm_powerups::add_zombie_powerup( "meat_stink", "t6_wpn_zmb_meat_world", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_drop_meat, 0, 0, 0 ); + setmatchtalkflag( "DeadChatWithDead", 1 ); + setmatchtalkflag( "DeadChatWithTeam", 1 ); + setmatchtalkflag( "DeadHearTeamLiving", 1 ); + setmatchtalkflag( "DeadHearAllLiving", 1 ); + setmatchtalkflag( "EveryoneHearsEveryone", 1 ); +} + +func_should_drop_meat() +{ + if ( minigun_no_drop() ) + return false; + + return true; +} + +minigun_no_drop() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].ignoreme == 1 ) + return true; + } + + if ( isdefined( level.meat_on_ground ) && level.meat_on_ground ) + return true; + + return false; +} + +grief_game_end_check_func() +{ + return 0; +} + +player_prevent_damage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + if ( isdefined( eattacker ) && isplayer( eattacker ) && self != eattacker && !eattacker hasperk( "specialty_noname" ) && !( isdefined( self.is_zombie ) && self.is_zombie ) ) + return true; + + return false; +} + +game_module_player_damage_grief_callback( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + penalty = 10; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && eattacker != self && eattacker.team != self.team && smeansofdeath == "MOD_MELEE" ) + self applyknockback( idamage, vdir ); +} + +onprecachegametype() +{ + level.playersuicideallowed = 1; + level.canplayersuicide = ::canplayersuicide; + level.suicide_weapon = "death_self_zm"; + precacheitem( "death_self_zm" ); + precacheshellshock( "grief_stab_zm" ); + precacheshader( "faction_cdc" ); + precacheshader( "faction_cia" ); + precacheshader( "waypoint_revive_cdc_zm" ); + precacheshader( "waypoint_revive_cia_zm" ); + level._effect["butterflies"] = loadfx( "maps/zombie/fx_zmb_impact_noharm" ); + level thread maps\mp\zombies\_zm_game_module_meat_utility::init_item_meat( "zgrief" ); + level thread maps\mp\gametypes_zm\_zm_gametype::init(); + maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zgrief" ); +} + +onstartgametype() +{ + level.no_end_game_check = 1; + level._game_module_game_end_check = ::grief_game_end_check_func; + level.round_end_custom_logic = ::grief_round_end_custom_logic; + maps\mp\gametypes_zm\_zm_gametype::setup_classic_gametype(); + maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zgrief", ::zgrief_main ); +} + +zgrief_main() +{ + level thread maps\mp\zombies\_zm::round_start(); + level thread maps\mp\gametypes_zm\_zm_gametype::kill_all_zombies(); + flag_wait( "initial_blackscreen_passed" ); + level thread maps\mp\zombies\_zm_game_module::wait_for_team_death_and_round_end(); + players = get_players(); + + foreach ( player in players ) + player.is_hotjoin = 0; + + wait 1; + playsoundatposition( "vox_zmba_grief_intro_0", ( 0, 0, 0 ) ); +} + +move_team_icons() +{ + self endon( "disconnect" ); + flag_wait( "initial_blackscreen_passed" ); + wait 0.5; +} + +kill_start_chest() +{ + flag_wait( "initial_blackscreen_passed" ); + wait 2; + start_chest = getstruct( "start_chest", "script_noteworthy" ); + start_chest maps\mp\zombies\_zm_magicbox::hide_chest(); +} + +meat_stink_powerup_grab( powerup, who ) +{ + switch ( powerup.powerup_name ) + { + case "meat_stink": + level thread meat_stink( who ); + break; + } +} + +meat_stink( who ) +{ + weapons = who getweaponslist(); + has_meat = 0; + + foreach ( weapon in weapons ) + { + if ( weapon == "item_meat_zm" ) + has_meat = 1; + } + + if ( has_meat ) + return; + + who.pre_meat_weapon = who getcurrentweapon(); + level notify( "meat_grabbed" ); + who notify( "meat_grabbed" ); + who playsound( "zmb_pickup_meat" ); + who increment_is_drinking(); + who giveweapon( "item_meat_zm" ); + who switchtoweapon( "item_meat_zm" ); + who setweaponammoclip( "item_meat_zm", 1 ); +} + +meat_stink_on_ground( position_to_play ) +{ + level.meat_on_ground = 1; + attractor_point = spawn( "script_model", position_to_play ); + attractor_point setmodel( "tag_origin" ); + attractor_point playsound( "zmb_land_meat" ); + wait 0.2; + playfxontag( level._effect["meat_stink_torso"], attractor_point, "tag_origin" ); + attractor_point playloopsound( "zmb_meat_flies" ); + attractor_point create_zombie_point_of_interest( 1536, 32, 10000 ); + attractor_point.attract_to_origin = 1; + attractor_point thread create_zombie_point_of_interest_attractor_positions( 4, 45 ); + attractor_point thread maps\mp\zombies\_zm_weap_cymbal_monkey::wait_for_attractor_positions_complete(); + attractor_point delay_thread( 15, ::self_delete ); + wait 16.0; + level.meat_on_ground = undefined; +} + +meat_bounce_override( pos, normal, ent ) +{ + if ( isdefined( ent ) && isplayer( ent ) ) + { + if ( !ent maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + level thread meat_stink_player( ent ); + + if ( isdefined( self.owner ) ) + { + maps\mp\_demo::bookmark( "zm_player_meat_stink", gettime(), ent, self.owner, 0, self ); + self.owner maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_given" ); + } + } + } + else + { + players = getplayers(); + closest_player = undefined; + closest_player_dist = 10000.0; + + for ( player_index = 0; player_index < players.size; player_index++ ) + { + player_to_check = players[player_index]; + + if ( self.owner == player_to_check ) + continue; + + if ( player_to_check maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + continue; + + distsq = distancesquared( pos, player_to_check.origin ); + + if ( distsq < closest_player_dist ) + { + closest_player = player_to_check; + closest_player_dist = distsq; + } + } + + if ( isdefined( closest_player ) ) + { + level thread meat_stink_player( closest_player ); + + if ( isdefined( self.owner ) ) + { + maps\mp\_demo::bookmark( "zm_player_meat_stink", gettime(), closest_player, self.owner, 0, self ); + self.owner maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_given" ); + } + } + else + { + valid_poi = check_point_in_enabled_zone( pos, undefined, undefined ); + + if ( valid_poi ) + { + self hide(); + level thread meat_stink_on_ground( self.origin ); + } + } + + playfx( level._effect["meat_impact"], self.origin ); + } + + self delete(); +} + +meat_stink_player( who ) +{ + level notify( "new_meat_stink_player" ); + level endon( "new_meat_stink_player" ); + who.ignoreme = 0; + players = get_players(); + + foreach ( player in players ) + { + player thread meat_stink_player_cleanup(); + + if ( player != who ) + player.ignoreme = 1; + } + + who thread meat_stink_player_create(); + who waittill_any_or_timeout( 30, "disconnect", "player_downed", "bled_out" ); + players = get_players(); + + foreach ( player in players ) + { + player thread meat_stink_player_cleanup(); + player.ignoreme = 0; + } +} + +meat_stink_player_create() +{ + self maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_received" ); + self endon( "disconnect" ); + self endon( "death" ); + tagname = "J_SpineLower"; + self.meat_stink_3p = spawn( "script_model", self gettagorigin( tagname ) ); + self.meat_stink_3p setmodel( "tag_origin" ); + self.meat_stink_3p linkto( self, tagname ); + wait 0.5; + playfxontag( level._effect["meat_stink_torso"], self.meat_stink_3p, "tag_origin" ); + self setclientfieldtoplayer( "meat_stink", 1 ); +} + +meat_stink_player_cleanup() +{ + if ( isdefined( self.meat_stink_3p ) ) + { + self.meat_stink_3p unlink(); + self.meat_stink_3p delete(); + } + + self setclientfieldtoplayer( "meat_stink", 0 ); +} + +door_close_zombie_think() +{ + self endon( "death" ); + + while ( isalive( self ) ) + { + if ( isdefined( self.enemy ) && isplayer( self.enemy ) ) + { + insamezone = 0; + keys = getarraykeys( level.zones ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( keys[i] ) && self.enemy maps\mp\zombies\_zm_zonemgr::entity_in_zone( keys[i] ) ) + insamezone = 1; + } + + if ( insamezone ) + { + wait 3; + continue; + } + + nearestzombienode = getnearestnode( self.origin ); + nearestplayernode = getnearestnode( self.enemy.origin ); + + if ( isdefined( nearestzombienode ) && isdefined( nearestplayernode ) ) + { + if ( !nodesvisible( nearestzombienode, nearestplayernode ) && !nodescanpath( nearestzombienode, nearestplayernode ) ) + self silentlyremovezombie(); + } + } + + wait 1; + } +} + +silentlyremovezombie() +{ + level.zombie_total++; + playfx( level._effect["spawn_cloud"], self.origin ); + self.skip_death_notetracks = 1; + self.nodeathragdoll = 1; + self dodamage( self.maxhealth * 2, self.origin, self, self, "none", "MOD_SUICIDE" ); + self self_delete(); +} + +zgrief_player_bled_out_msg() +{ + level endon( "end_game" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "bled_out" ); + + level thread update_players_on_bleedout_or_disconnect( self ); + } +} + +show_grief_hud_msg( msg, msg_parm, offset, cleanup_end_game ) +{ + self endon( "disconnect" ); + + while ( isdefined( level.hostmigrationtimer ) ) + wait 0.05; + + zgrief_hudmsg = newclienthudelem( self ); + zgrief_hudmsg.alignx = "center"; + zgrief_hudmsg.aligny = "middle"; + zgrief_hudmsg.horzalign = "center"; + zgrief_hudmsg.vertalign = "middle"; + zgrief_hudmsg.y -= 130; + + if ( self issplitscreen() ) + zgrief_hudmsg.y += 70; + + if ( isdefined( offset ) ) + zgrief_hudmsg.y += offset; + + zgrief_hudmsg.foreground = 1; + zgrief_hudmsg.fontscale = 5; + zgrief_hudmsg.alpha = 0; + zgrief_hudmsg.color = ( 1, 1, 1 ); + zgrief_hudmsg.hidewheninmenu = 1; + zgrief_hudmsg.font = "default"; + + if ( isdefined( cleanup_end_game ) && cleanup_end_game ) + { + level endon( "end_game" ); + zgrief_hudmsg thread show_grief_hud_msg_cleanup(); + } + + if ( isdefined( msg_parm ) ) + zgrief_hudmsg settext( msg, msg_parm ); + else + zgrief_hudmsg settext( msg ); + + zgrief_hudmsg changefontscaleovertime( 0.25 ); + zgrief_hudmsg fadeovertime( 0.25 ); + zgrief_hudmsg.alpha = 1; + zgrief_hudmsg.fontscale = 2; + wait 3.25; + zgrief_hudmsg changefontscaleovertime( 1 ); + zgrief_hudmsg fadeovertime( 1 ); + zgrief_hudmsg.alpha = 0; + zgrief_hudmsg.fontscale = 5; + wait 1; + zgrief_hudmsg notify( "death" ); + + if ( isdefined( zgrief_hudmsg ) ) + zgrief_hudmsg destroy(); +} + +show_grief_hud_msg_cleanup() +{ + self endon( "death" ); + + level waittill( "end_game" ); + + if ( isdefined( self ) ) + self destroy(); +} + +grief_reset_message() +{ + msg = &"ZOMBIE_GRIEF_RESET"; + players = get_players(); + + if ( isdefined( level.hostmigrationtimer ) ) + { + while ( isdefined( level.hostmigrationtimer ) ) + wait 0.05; + + wait 4; + } + + foreach ( player in players ) + player thread show_grief_hud_msg( msg ); + + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "grief_restarted" ); +} + +grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + self.grief_savedweapon_weapons = self getweaponslist(); + self.grief_savedweapon_weaponsammo_stock = []; + self.grief_savedweapon_weaponsammo_clip = []; + self.grief_savedweapon_currentweapon = self getcurrentweapon(); + self.grief_savedweapon_grenades = self get_player_lethal_grenade(); + + if ( isdefined( self.grief_savedweapon_grenades ) ) + self.grief_savedweapon_grenades_clip = self getweaponammoclip( self.grief_savedweapon_grenades ); + + self.grief_savedweapon_tactical = self get_player_tactical_grenade(); + + if ( isdefined( self.grief_savedweapon_tactical ) ) + self.grief_savedweapon_tactical_clip = self getweaponammoclip( self.grief_savedweapon_tactical ); + + for ( i = 0; i < self.grief_savedweapon_weapons.size; i++ ) + { + self.grief_savedweapon_weaponsammo_clip[i] = self getweaponammoclip( self.grief_savedweapon_weapons[i] ); + self.grief_savedweapon_weaponsammo_stock[i] = self getweaponammostock( self.grief_savedweapon_weapons[i] ); + } + + if ( isdefined( self.hasriotshield ) && self.hasriotshield ) + self.grief_hasriotshield = 1; + + if ( self hasweapon( "claymore_zm" ) ) + { + self.grief_savedweapon_claymore = 1; + self.grief_savedweapon_claymore_clip = self getweaponammoclip( "claymore_zm" ); + } + + if ( isdefined( self.current_equipment ) ) + self.grief_savedweapon_equipment = self.current_equipment; +} + +grief_laststand_weapons_return() +{ + if ( !( isdefined( level.isresetting_grief ) && level.isresetting_grief ) ) + return false; + + if ( !isdefined( self.grief_savedweapon_weapons ) ) + return false; + + primary_weapons_returned = 0; + + foreach ( index, weapon in self.grief_savedweapon_weapons ) + { + if ( isdefined( self.grief_savedweapon_grenades ) && weapon == self.grief_savedweapon_grenades || isdefined( self.grief_savedweapon_tactical ) && weapon == self.grief_savedweapon_tactical ) + continue; + + if ( isweaponprimary( weapon ) ) + { + if ( primary_weapons_returned >= 2 ) + continue; + + primary_weapons_returned++; + } + + if ( "item_meat_zm" == weapon ) + continue; + + self giveweapon( weapon, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); + + if ( isdefined( self.grief_savedweapon_weaponsammo_clip[index] ) ) + self setweaponammoclip( weapon, self.grief_savedweapon_weaponsammo_clip[index] ); + + if ( isdefined( self.grief_savedweapon_weaponsammo_stock[index] ) ) + self setweaponammostock( weapon, self.grief_savedweapon_weaponsammo_stock[index] ); + } + + if ( isdefined( self.grief_savedweapon_grenades ) ) + { + self giveweapon( self.grief_savedweapon_grenades ); + + if ( isdefined( self.grief_savedweapon_grenades_clip ) ) + self setweaponammoclip( self.grief_savedweapon_grenades, self.grief_savedweapon_grenades_clip ); + } + + if ( isdefined( self.grief_savedweapon_tactical ) ) + { + self giveweapon( self.grief_savedweapon_tactical ); + + if ( isdefined( self.grief_savedweapon_tactical_clip ) ) + self setweaponammoclip( self.grief_savedweapon_tactical, self.grief_savedweapon_tactical_clip ); + } + + if ( isdefined( self.current_equipment ) ) + self maps\mp\zombies\_zm_equipment::equipment_take( self.current_equipment ); + + if ( isdefined( self.grief_savedweapon_equipment ) ) + { + self.do_not_display_equipment_pickup_hint = 1; + self maps\mp\zombies\_zm_equipment::equipment_give( self.grief_savedweapon_equipment ); + self.do_not_display_equipment_pickup_hint = undefined; + } + + if ( isdefined( self.grief_hasriotshield ) && self.grief_hasriotshield ) + { + if ( isdefined( self.player_shield_reset_health ) ) + self [[ self.player_shield_reset_health ]](); + } + + if ( isdefined( self.grief_savedweapon_claymore ) && self.grief_savedweapon_claymore ) + { + self giveweapon( "claymore_zm" ); + self set_player_placeable_mine( "claymore_zm" ); + self setactionslot( 4, "weapon", "claymore_zm" ); + self setweaponammoclip( "claymore_zm", self.grief_savedweapon_claymore_clip ); + } + + primaries = self getweaponslistprimaries(); + + foreach ( weapon in primaries ) + { + if ( isdefined( self.grief_savedweapon_currentweapon ) && self.grief_savedweapon_currentweapon == weapon ) + { + self switchtoweapon( weapon ); + return true; + } + } + + if ( primaries.size > 0 ) + { + self switchtoweapon( primaries[0] ); + return true; + } + + assert( primaries.size > 0, "GRIEF: There was a problem restoring the weapons" ); + return false; +} + +grief_store_player_scores() +{ + players = get_players(); + + foreach ( player in players ) + player._pre_round_score = player.score; +} + +grief_restore_player_score() +{ + if ( !isdefined( self._pre_round_score ) ) + self._pre_round_score = self.score; + + if ( isdefined( self._pre_round_score ) ) + { + self.score = self._pre_round_score; + self.pers["score"] = self._pre_round_score; + } +} + +game_mode_spawn_player_logic() +{ + if ( flag( "start_zombie_round_logic" ) && !isdefined( self.is_hotjoin ) ) + { + self.is_hotjoin = 1; + return true; + } + + return false; +} + +update_players_on_bleedout_or_disconnect( excluded_player ) +{ + other_team = undefined; + players = get_players(); + players_remaining = 0; + + foreach ( player in players ) + { + if ( player == excluded_player ) + continue; + + if ( player.team == excluded_player.team ) + { + if ( is_player_valid( player ) ) + players_remaining++; + + continue; + } + } + + foreach ( player in players ) + { + if ( player == excluded_player ) + continue; + + if ( player.team != excluded_player.team ) + { + other_team = player.team; + + if ( players_remaining < 1 ) + { + player thread show_grief_hud_msg( &"ZOMBIE_ZGRIEF_ALL_PLAYERS_DOWN", undefined, undefined, 1 ); + player delay_thread_watch_host_migrate( 2, ::show_grief_hud_msg, &"ZOMBIE_ZGRIEF_SURVIVE", undefined, 30, 1 ); + continue; + } + + player thread show_grief_hud_msg( &"ZOMBIE_ZGRIEF_PLAYER_BLED_OUT", players_remaining ); + } + } + + if ( players_remaining == 1 ) + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "last_player", excluded_player.team ); + + if ( !isdefined( other_team ) ) + return; + + if ( players_remaining < 1 ) + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "4_player_down", other_team ); + else + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( players_remaining + "_player_left", other_team ); +} + +delay_thread_watch_host_migrate( timer, func, param1, param2, param3, param4, param5, param6 ) +{ + self thread _delay_thread_watch_host_migrate_proc( func, timer, param1, param2, param3, param4, param5, param6 ); +} + +_delay_thread_watch_host_migrate_proc( func, timer, param1, param2, param3, param4, param5, param6 ) +{ + self endon( "death" ); + self endon( "disconnect" ); + wait( timer ); + + if ( isdefined( level.hostmigrationtimer ) ) + { + while ( isdefined( level.hostmigrationtimer ) ) + wait 0.05; + + wait( timer ); + } + + single_thread( self, func, param1, param2, param3, param4, param5, param6 ); +} + +grief_round_end_custom_logic() +{ + waittillframeend; + + if ( isdefined( level.gamemodulewinningteam ) ) + level notify( "end_round_think" ); +} diff --git a/ZM/Maps/Buried/maps/mp/gametypes_zm/zmeat.gsc b/ZM/Maps/Buried/maps/mp/gametypes_zm/zmeat.gsc new file mode 100644 index 0000000..072980c --- /dev/null +++ b/ZM/Maps/Buried/maps/mp/gametypes_zm/zmeat.gsc @@ -0,0 +1,2289 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_game_module_meat_utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_spawner; + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::main(); + registerclientfield( "allplayers", "holding_meat", 7000, 1, "int" ); + registerclientfield( "scriptmover", "ring_glowfx", 7000, 1, "int" ); + registerclientfield( "scriptmover", "ring_glow_meatfx", 7000, 1, "int" ); + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + set_game_var( "ZM_roundLimit", 5 ); + set_game_var( "ZM_scoreLimit", 5 ); + set_gamemode_var( "post_init_zombie_spawn_func", ::meat_zombie_post_spawn_init ); + set_gamemode_var( "match_end_notify", "meat_end" ); + set_gamemode_var( "match_end_func", ::meat_end_match ); + level._no_static_unitriggers = 1; + level._game_module_player_damage_callback = maps\mp\gametypes_zm\_zm_gametype::game_module_player_damage_callback; + level._game_module_player_laststand_callback = ::meat_last_stand_callback; + level.no_end_game_check = 1; + maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zmeat" ); + level thread maps\mp\gametypes_zm\_zm_gametype::init(); + level.zm_roundswitch = 1; + level.zm_switchsides_on_roundswitch = 1; + level._effect["meat_marker"] = loadfx( "maps/zombie/fx_zmb_meat_marker" ); + level._effect["butterflies"] = loadfx( "maps/zombie/fx_zmb_impact_noharm" ); + level._effect["meat_glow"] = loadfx( "maps/zombie/fx_zmb_meat_glow" ); + level._effect["meat_glow3p"] = loadfx( "maps/zombie/fx_zmb_meat_glow_3p" ); + level._effect["spawn_cloud"] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); + level._effect["fw_burst"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_burst_center" ); + level._effect["fw_impact"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_drop_impact" ); + level._effect["fw_drop"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_drop_trail" ); + level._effect["fw_trail"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_trail" ); + level._effect["fw_trail_cheap"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_trail_intro" ); + level._effect["fw_pre_burst"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_burst_small" ); + level._effect["meat_bounce"] = loadfx( "maps/zombie/fx_zmb_meat_collision_glow" ); + level._effect["ring_glow"] = loadfx( "misc/fx_zombie_powerup_on" ); + level.can_revive_game_module = ::can_revive; + onplayerconnect_callback( ::meat_on_player_connect ); + spawn_level_meat_manager(); + init_animtree(); +} + +onprecachegametype() +{ + level thread maps\mp\zombies\_zm_game_module_meat_utility::init_item_meat( "zmeat" ); + maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zmeat" ); + game_mode_objects = getstructarray( "game_mode_object", "targetname" ); + meat_objects = getstructarray( "meat_object", "targetname" ); + all_structs = arraycombine( game_mode_objects, meat_objects, 1, 0 ); + + for ( i = 0; i < all_structs.size; i++ ) + { + if ( isdefined( all_structs[i].script_parameters ) ) + precachemodel( all_structs[i].script_parameters ); + } + + precacheshellshock( "grief_stab_zm" ); + precacheitem( "minigun_zm" ); + precacheshader( "faction_cdc" ); + precacheshader( "faction_cia" ); + precachemodel( "p6_zm_sign_meat_01_step1" ); + precachemodel( "p6_zm_sign_meat_01_step2" ); + precachemodel( "p6_zm_sign_meat_01_step3" ); + precachemodel( "p6_zm_sign_meat_01_step4" ); +} + +meat_hub_start_func() +{ + level thread meat_player_initial_spawn(); + level thread item_meat_reset( level._meat_start_point ); + level thread spawn_meat_zombies(); + level thread monitor_meat_on_team(); + level thread init_minigun_ring(); + level thread init_splitter_ring(); + level thread init_ammo_ring(); + level thread hide_non_meat_objects(); + level thread setup_meat_world_objects(); + level._zombie_path_timer_override = ::zombie_path_timer_override; + level.zombie_health = level.zombie_vars["zombie_health_start"]; + level._zombie_spawning = 0; + level._poi_override = ::meat_poi_override_func; + level._meat_on_team = undefined; + level._meat_zombie_spawn_timer = 2; + level._meat_zombie_spawn_health = 1; + level._minigun_time_override = 15; + level._get_game_module_players = ::get_game_module_players; + level.powerup_drop_count = 0; + level.meat_spawners = level.zombie_spawners; + + if ( !( isdefined( level._meat_callback_initialized ) && level._meat_callback_initialized ) ) + { + maps\mp\zombies\_zm::register_player_damage_callback( maps\mp\zombies\_zm_game_module::damage_callback_no_pvp_damage ); + level._meat_callback_initialized = 1; + } + + setmatchtalkflag( "DeadChatWithDead", 1 ); + setmatchtalkflag( "DeadChatWithTeam", 1 ); + setmatchtalkflag( "DeadHearTeamLiving", 1 ); + setmatchtalkflag( "DeadHearAllLiving", 1 ); + setmatchtalkflag( "EveryoneHearsEveryone", 1 ); + setteamhasmeat( "allies", 0 ); + setteamhasmeat( "axis", 0 ); + level thread zmbmusicsetupmeat(); + level.zombie_spawn_fx = level._effect["spawn_cloud"]; + weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); + + for ( i = 0; i < weapon_spawns.size; i++ ) + weapon_spawns[i] trigger_off(); + + level thread monitor_meat_on_side(); + level thread item_meat_watch_for_throw(); + level thread hold_meat_monitor(); + flag_wait( "start_encounters_match_logic" ); + level thread wait_for_team_death( 1 ); + level thread wait_for_team_death( 2 ); + level.team_a_downed = 0; + level.team_b_downed = 0; +} + +meat_on_player_connect() +{ + hotjoined = flag( "initial_players_connected" ); + self thread spawn_player_meat_manager(); + self thread wait_for_player_disconnect(); + self thread wait_for_player_downed(); +/# + self thread watch_debug_input(); +#/ + if ( hotjoined ) + { + one = 1; + two = 2; + + if ( get_game_var( "switchedsides" ) ) + { + one = 2; + two = 1; + } + + if ( get_game_var( "side_selection" ) == 1 ) + { + if ( self.team == "allies" ) + self._meat_team = one; + else + self._meat_team = two; + } + else if ( self.team == "allies" ) + self._meat_team = two; + else + self._meat_team = one; + + self meat_player_setup(); + } +} + +meat_on_player_disconnect() +{ + team0 = 1; + team1 = 2; + team_counts = []; + team_counts[team0] = 0; + team_counts[team1] = 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + team_counts[players[i]._meat_team] += 1; + + if ( team_counts[team0] == 0 ) + maps\mp\gametypes_zm\_zm_gametype::end_rounds_early( "B" ); + + if ( team_counts[team1] == 0 ) + maps\mp\gametypes_zm\_zm_gametype::end_rounds_early( "A" ); +} + +wait_for_player_disconnect() +{ + level endon( "end_game" ); + + self waittill( "disconnect" ); + + meat_on_player_disconnect(); +} + +watch_debug_input() +{ +/# + self endon( "disconnect" ); + + for (;;) + { + if ( self actionslottwobuttonpressed() ) + { + if ( getdvar( _hash_B188A91 ) != "" ) + { + self disableinvulnerability(); + self dodamage( self.health + 666, self.origin ); + } + } + + wait 0.05; + } +#/ +} + +zmbmusicsetupmeat() +{ + level.zmb_music_states["game_over"] = undefined; + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "waiting", "ENC_WAITING", 0, 0, 0, undefined ); + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "round_start", "ENC_ROUND_START", 0, 0, 0, undefined ); + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "round_end", "ENC_ROUND_END", 0, 0, 0, undefined ); + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "halftime", "ENC_HALFTIME", 0, 0, 0, undefined ); + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "match_over", "ENC_MATCH_OVER", 0, 0, 0, undefined ); +} + +monitor_meat_on_side() +{ + level endon( "meat_end" ); + + level waittill( "meat_grabbed" ); + + last_team = level._meat_on_team; + level.meat_lost_time_limit = 5000; + + while ( true ) + { + if ( isdefined( level.item_meat ) ) + { + if ( !isdefined( level._meat_team_1_volume ) || !isdefined( level._meat_team_2_volume ) ) + iprintlnbold( "BUG: There is something wrong with the team volumes" ); + + if ( isdefined( level._meat_team_1_volume ) && level.item_meat istouching( level._meat_team_1_volume ) ) + { + level._meat_on_team = 1; + level.meat_lost_time = undefined; + } + else if ( isdefined( level._meat_team_2_volume ) && level.item_meat istouching( level._meat_team_2_volume ) ) + { + level._meat_on_team = 2; + level.meat_lost_time = undefined; + } + else if ( isdefined( last_team ) ) + { + if ( !isdefined( level.meat_lost_time ) ) + level.meat_lost_time = gettime(); + else if ( gettime() - level.meat_lost_time > level.meat_lost_time_limit ) + { + add_meat_event( "level_lost_meat" ); + level thread item_meat_reset( level._meat_start_point, 1 ); + level.meat_lost_time = undefined; + + level waittill( "meat_grabbed" ); + } + } + } + else + { + player_with_meat = get_player_with_meat(); + + if ( !isdefined( player_with_meat ) ) + { + if ( !isdefined( level.meat_lost_time ) ) + level.meat_lost_time = gettime(); + else if ( gettime() - level.meat_lost_time > level.meat_lost_time_limit ) + { + add_meat_event( "level_lost_meat" ); + level thread item_meat_reset( level._meat_start_point, 1 ); + level.meat_lost_time = undefined; + + level waittill( "meat_grabbed" ); + } + } + else + level.meat_lost_time = undefined; + } + + if ( isdefined( level._meat_on_team ) && isdefined( last_team ) && level._meat_on_team != last_team ) + { + level notify( "clear_ignore_all" ); + add_meat_event( "level_meat_team", level._meat_on_team ); + last_team = level._meat_on_team; + assign_meat_to_team( undefined, level._meat_on_team ); +/# + if ( isdefined( level.item_meat ) ) + playfx( level._effect["spawn_cloud"], level.item_meat.origin ); +#/ + } + + wait 0.05; + } +} + +item_meat_watch_for_throw() +{ + level endon( "meat_end" ); + + for (;;) + { + level waittill( "meat_thrown", who ); + + add_meat_event( "player_thrown", who ); + + if ( isdefined( who._spawning_meat ) && who._spawning_meat ) + continue; + + if ( randomintrange( 1, 101 ) <= 10 ) + { + + } + + who._has_meat = 0; + + if ( isdefined( who._has_meat_hud ) ) + who._has_meat_hud destroy(); + + assign_meat_to_team( undefined, level._meat_on_team ); + } +} + +hold_meat_monitor() +{ + level endon( "meat_end" ); + + level waittill( "meat_grabbed" ); + + while ( true ) + { + player = get_player_with_meat(); + + if ( !isdefined( player ) ) + { + wait 0.2; + continue; + } + + if ( !should_try_to_bring_back_teammate( player._meat_team ) ) + { + wait 0.2; + continue; + } + + if ( !( isdefined( player._bringing_back_teammate ) && player._bringing_back_teammate ) ) + player thread bring_back_teammate_progress(); + + wait 0.2; + } +} + +meat_zombie_post_spawn_init() +{ + +} + +create_item_meat_watcher() +{ + wait 0.05; + watcher = self maps\mp\gametypes_zm\_weaponobjects::createuseweaponobjectwatcher( "item_meat", get_gamemode_var( "item_meat_name" ), self.team ); + watcher.pickup = ::item_meat_on_pickup; + watcher.onspawn = ::item_meat_spawned; + watcher.onspawnretrievetriggers = ::play_item_meat_on_spawn_retrieve_trigger; + watcher.headicon = 0; +} + +item_meat_spawned( unused0, unused1 ) +{ + maps\mp\gametypes_zm\_weaponobjects::voidonspawn( unused0, unused1 ); + self.meat_is_moving = 0; + self.meat_is_flying = 0; +} + +wait_for_player_downed() +{ + self endon( "disconnect" ); + + while ( isdefined( self ) ) + { + self waittill_any( "player_downed", "fake_death", "death" ); + add_meat_event( "player_down", self ); + wait 0.1; + + if ( isdefined( self._meat_team ) ) + { + self thread watch_save_player(); + players = get_players_on_meat_team( self._meat_team ); + + if ( players.size >= 2 ) + { + + } + } + } +} + +item_meat_watch_stationary() +{ + self endon( "death" ); + self endon( "picked_up" ); + self.meat_is_moving = 1; + + self waittill( "stationary" ); + + self playloopsound( "zmb_meat_looper", 2 ); + + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + add_meat_event( "meat_stationary", self ); + else + add_meat_event( "fake_meat_stationary", self ); + + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + { + level._meat_moving = 0; + level._meat_splitter_activated = 0; + level._last_person_to_throw_meat = undefined; + } + + self.meat_is_moving = 0; + + if ( isdefined( level._meat_on_team ) ) + { + teamplayers = get_players_on_meat_team( level._meat_on_team ); + + for ( i = 0; i < teamplayers.size; i++ ) + { + if ( isdefined( teamplayers[i] ) && isdefined( teamplayers[i]._encounters_team ) ) + { + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_land", teamplayers[i]._encounters_team ); + break; + } + } + } +} + +item_meat_watch_bounce() +{ + self endon( "death" ); + self endon( "picked_up" ); + self.meat_is_flying = 1; + + self waittill( "grenade_bounce", pos, normal, ent ); + + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + add_meat_event( "meat_bounce", self, pos, normal, ent ); + else + add_meat_event( "fake_meat_bounce", self, pos, normal, ent ); + + if ( isdefined( level.meat_bounce_override ) ) + { + self thread [[ level.meat_bounce_override ]]( pos, normal, ent ); + return; + } + + if ( isdefined( level.spawned_collmap ) ) + { + if ( isdefined( ent ) && ent == level.spawned_collmap ) + playfx( level._effect["meat_bounce"], pos, normal ); + } + + if ( isdefined( ent ) && isplayer( ent ) ) + { + add_meat_event( "player_hit_player", self.owner, ent ); + self.owner hit_player_with_meat( ent ); + } + + self.meat_is_flying = 0; + self thread watch_for_roll(); + playfxontag( level._effect["meat_marker"], self, "tag_origin" ); +} + +watch_for_roll() +{ + self endon( "stationary" ); + self endon( "death" ); + self endon( "picked_up" ); + self.meat_is_rolling = 0; + + while ( true ) + { + old_z = self.origin[2]; + wait 1; + + if ( abs( old_z - self.origin[2] ) < 10 ) + { + self.meat_is_rolling = 1; + self playloopsound( "zmb_meat_looper", 2 ); + } + } +} + +stop_rolling() +{ + self.origin = self.origin; + self.angles = self.angles; +} + +hit_player_with_meat( hit_player ) +{ +/# + println( "MEAT: Player " + self.name + " hit " + hit_player.name + " with the meat\\n" ); +#/ +} + +item_meat_pickup() +{ + self.meat_is_moving = 0; + self.meat_is_flying = 0; + level._meat_moving = 0; + level._meat_splitter_activated = 0; + self notify( "picked_up" ); +} + +player_wait_take_meat( meat_name ) +{ + self.dont_touch_the_meat = 1; + + if ( isdefined( self.pre_meat_weapon ) && self hasweapon( self.pre_meat_weapon ) ) + self switchtoweapon( self.pre_meat_weapon ); + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + else + { + assert( 0, "Player has no weapon" ); + self maps\mp\zombies\_zm_weapons::give_fallback_weapon(); + } + } + + self waittill_notify_or_timeout( "weapon_change_complete", 3 ); + self takeweapon( meat_name ); + self.pre_meat_weapon = undefined; + + if ( self.is_drinking ) + self decrement_is_drinking(); + + self.dont_touch_the_meat = 0; +} + +cleanup_meat() +{ + if ( isdefined( self.altmodel ) ) + self.altmodel delete(); + + self delete(); +} + +#using_animtree("zombie_meat"); + +init_animtree() +{ + scriptmodelsuseanimtree( #animtree ); +} + +animate_meat( grenade ) +{ + grenade waittill_any( "bounce", "stationary", "death" ); + waittillframeend; + + if ( isdefined( grenade ) ) + { + grenade hide(); + altmodel = spawn( "script_model", grenade.origin ); + altmodel setmodel( get_gamemode_var( "item_meat_model" ) ); + altmodel useanimtree( #animtree ); + altmodel.angles = grenade.angles; + altmodel linkto( grenade, "", ( 0, 0, 0 ), ( 0, 0, 0 ) ); + altmodel setanim( %o_zombie_head_idle_v1 ); + grenade.altmodel = altmodel; + + while ( isdefined( grenade ) ) + wait 0.05; + + if ( isdefined( altmodel ) ) + altmodel delete(); + } +} + +indexinarray( array, value ) +{ + if ( !isdefined( array ) || !isarray( array ) || !isdefined( value ) || !isinarray( array, value ) ) + return undefined; + + foreach ( index, item in array ) + { + if ( item == value ) + return index; + } + + return undefined; +} + +item_meat_on_spawn_retrieve_trigger( watcher, player, weaponname ) +{ + self endon( "death" ); + add_meat_event( "meat_spawn", self ); + thread animate_meat( self ); + + while ( isdefined( level.splitting_meat ) && level.splitting_meat ) + wait 0.15; + + if ( isdefined( player ) ) + { + self setowner( player ); + self setteam( player.pers["team"] ); + self.owner = player; + self.oldangles = self.angles; + + if ( player hasweapon( weaponname ) ) + { + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + player thread player_wait_take_meat( weaponname ); + else + { + player takeweapon( weaponname ); + player decrement_is_drinking(); + } + } + + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + { + if ( !( isdefined( self._respawned_meat ) && self._respawned_meat ) ) + { + level notify( "meat_thrown", player ); + level._last_person_to_throw_meat = player; + level._last_person_to_throw_meat_time = gettime(); + } + } + } + + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + { + level._meat_moving = 1; + + if ( isdefined( level.item_meat ) && level.item_meat != self ) + level.item_meat cleanup_meat(); + + level.item_meat = self; + } + + self thread item_meat_watch_stationary(); + self thread item_meat_watch_bounce(); + self.item_meat_pick_up_trigger = spawn( "trigger_radius_use", self.origin, 0, 36, 72 ); + self.item_meat_pick_up_trigger setcursorhint( "HINT_NOICON" ); + self.item_meat_pick_up_trigger sethintstring( &"ZOMBIE_MEAT_PICKUP" ); + self.item_meat_pick_up_trigger enablelinkto(); + self.item_meat_pick_up_trigger linkto( self ); + self.item_meat_pick_up_trigger triggerignoreteam(); + level.item_meat_pick_up_trigger = self.item_meat_pick_up_trigger; + self thread item_meat_watch_shutdown(); + self.meat_id = indexinarray( level._fake_meats, self ); + + if ( !isdefined( self.meat_id ) ) + self.meat_id = 0; + + if ( isdefined( level.dont_allow_meat_interaction ) && level.dont_allow_meat_interaction ) + self.item_meat_pick_up_trigger setinvisibletoall(); + else + { + self thread item_meat_watch_trigger( self.meat_id, self.item_meat_pick_up_trigger, ::item_meat_on_pickup, level.meat_pickupsoundplayer, level.meat_pickupsound ); + self thread kick_meat_monitor(); + self thread last_stand_meat_nudge(); + } + + self._respawned_meat = undefined; +} + +last_stand_meat_nudge() +{ + level endon( "meat_grabbed" ); + level endon( "end_meat" ); + self endon( "death" ); + wait 0.15; + + while ( true ) + { + players = get_players(); + + foreach ( player in players ) + { + if ( distancesquared( player.origin, self.origin ) < 2304 && player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + player thread kick_the_meat( self, 1 ); + } + + wait 0.05; + } +} + +kick_meat_monitor() +{ + level endon( "meat_grabbed" ); + level endon( "end_meat" ); + self endon( "death" ); + kick_meat_timeout = 150; + + while ( true ) + { + players = get_players(); + curr_time = gettime(); + + foreach ( player in players ) + { + if ( isdefined( level._last_person_to_throw_meat ) && player == level._last_person_to_throw_meat && curr_time - level._last_person_to_throw_meat_time <= kick_meat_timeout ) + continue; + + if ( distancesquared( player.origin, self.origin ) < 2304 && player issprinting() && !player usebuttonpressed() ) + { + if ( isdefined( player._meat_team ) && isdefined( level._meat_on_team ) && level._meat_on_team == player._meat_team ) + { + add_meat_event( "player_kick_meat", player, self ); + player thread kick_the_meat( self ); + } + } + } + + wait 0.05; + } +} + +is_meat( weapon ) +{ + return weapon == get_gamemode_var( "item_meat_name" ); +} + +spike_the_meat( meat ) +{ + if ( isdefined( self._kicking_meat ) && self._kicking_meat ) + return; + + fake_meat = 0; + self._kicking_meat = 1; + self._spawning_meat = 1; + org = self getweaponmuzzlepoint(); + vel = meat getvelocity(); + + if ( !( isdefined( meat._fake_meat ) && meat._fake_meat ) ) + { + meat cleanup_meat(); + level._last_person_to_throw_meat = self; + level._last_person_to_throw_meat_time = gettime(); + level._meat_splitter_activated = 0; + } + else + { + fake_meat = 1; + meat cleanup_meat(); + } + + kickangles = self.angles; + kickangles += ( randomfloatrange( -30, -20 ), randomfloatrange( -5, 5 ), 0 ); + launchdir = anglestoforward( kickangles ); + speed = length( vel ) * 1.5; + launchvel = vectorscale( launchdir, speed ); + grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( launchvel[0], launchvel[1], 380 ) ); + grenade playsound( "zmb_meat_meat_tossed" ); + grenade thread waittill_loopstart(); + + if ( fake_meat ) + { + grenade._fake_meat = 1; + grenade thread delete_on_real_meat_pickup(); + level._kicked_meat = grenade; + } + + wait 0.1; + self._spawning_meat = 0; + self._kicking_meat = 0; + + if ( !fake_meat ) + { + level notify( "meat_thrown", self ); + level notify( "meat_kicked" ); + } +} + +show_meat_throw_hint() +{ + level endon( "meat_thrown" ); + self endon( "player_downed" ); + self thread meat_screen_message_delete_on_death(); + wait 1; + self meat_create_hint_message( &"ZOMBIE_THROW_MEAT_HINT" ); + self thread meat_screen_message_delete(); +} + +meat_create_hint_message( string_message_1, string_message_2, string_message_3, n_offset_y = 0 ) +{ + if ( !isdefined( self._screen_message_1 ) ) + { + self._screen_message_1 = newclienthudelem( self ); + self._screen_message_1.elemtype = "font"; + self._screen_message_1.font = "objective"; + self._screen_message_1.fontscale = 1.8; + self._screen_message_1.horzalign = "center"; + self._screen_message_1.vertalign = "middle"; + self._screen_message_1.alignx = "center"; + self._screen_message_1.aligny = "middle"; + self._screen_message_1.y = -60 + n_offset_y; + self._screen_message_1.sort = 2; + self._screen_message_1.color = ( 1, 1, 1 ); + self._screen_message_1.alpha = 0.7; + self._screen_message_1.hidewheninmenu = 1; + } + + self._screen_message_1 settext( string_message_1 ); + + if ( isdefined( string_message_2 ) ) + { + if ( !isdefined( self._screen_message_2 ) ) + { + self._screen_message_2 = newclienthudelem( self ); + self._screen_message_2.elemtype = "font"; + self._screen_message_2.font = "objective"; + self._screen_message_2.fontscale = 1.8; + self._screen_message_2.horzalign = "center"; + self._screen_message_2.vertalign = "middle"; + self._screen_message_2.alignx = "center"; + self._screen_message_2.aligny = "middle"; + self._screen_message_2.y = -33 + n_offset_y; + self._screen_message_2.sort = 2; + self._screen_message_2.color = ( 1, 1, 1 ); + self._screen_message_2.alpha = 0.7; + self._screen_message_2.hidewheninmenu = 1; + } + + level._screen_message_2 settext( string_message_2 ); + } + else if ( isdefined( self._screen_message_2 ) ) + self._screen_message_2 destroy(); + + if ( isdefined( string_message_3 ) ) + { + if ( !isdefined( self._screen_message_3 ) ) + { + self._screen_message_3 = newclienthudelem( self ); + self._screen_message_3.elemtype = "font"; + self._screen_message_3.font = "objective"; + self._screen_message_3.fontscale = 1.8; + self._screen_message_3.horzalign = "center"; + self._screen_message_3.vertalign = "middle"; + self._screen_message_3.alignx = "center"; + self._screen_message_3.aligny = "middle"; + self._screen_message_3.y = -6 + n_offset_y; + self._screen_message_3.sort = 2; + self._screen_message_3.color = ( 1, 1, 1 ); + self._screen_message_3.alpha = 0.7; + self._screen_message_3.hidewheninmenu = 1; + } + + self._screen_message_3 settext( string_message_3 ); + } + else if ( isdefined( self._screen_message_3 ) ) + self._screen_message_3 destroy(); +} + +meat_screen_message_delete() +{ + self endon( "disconnect" ); + level waittill_notify_or_timeout( "meat_thrown", 5 ); + + if ( isdefined( self._screen_message_1 ) ) + self._screen_message_1 destroy(); + + if ( isdefined( self._screen_message_2 ) ) + self._screen_message_2 destroy(); + + if ( isdefined( self._screen_message_3 ) ) + self._screen_message_3 destroy(); +} + +meat_screen_message_delete_on_death() +{ + level endon( "meat_thrown" ); + self endon( "disconnect" ); + + self waittill( "player_downed" ); + + if ( isdefined( self._screen_message_1 ) ) + self._screen_message_1 destroy(); + + if ( isdefined( self._screen_message_2 ) ) + self._screen_message_2 destroy(); + + if ( isdefined( self._screen_message_3 ) ) + self._screen_message_3 destroy(); +} + +set_ignore_all() +{ + level endon( "clear_ignore_all" ); + + if ( isdefined( level._zombies_ignoring_all ) && level._zombies_ignoring_all ) + return; + + level._zombies_ignoring_all = 1; + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( isdefined( zombie ) ) + zombie.ignoreall = 1; + } + + wait 0.5; + clear_ignore_all(); +} + +clear_ignore_all() +{ + if ( !( isdefined( level._zombies_ignoring_all ) && level._zombies_ignoring_all ) ) + return; + + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( isdefined( zombie ) ) + zombie.ignoreall = 0; + } + + level._zombies_ignoring_all = 0; +} + +bring_back_teammate_progress() +{ + self notify( "bring_back_teammate_progress" ); + self endon( "bring_back_teammate_progress" ); + self endon( "disconnect" ); + player = self; + player._bringing_back_teammate = 1; + revivetime = 15; + progress = 0; + + while ( player_has_meat( player ) && is_player_valid( player ) && progress >= 0 ) + { + if ( !isdefined( player.revive_team_progressbar ) ) + { + player.revive_team_progressbar = player createprimaryprogressbar(); + player.revive_team_progressbar updatebar( 0.01, 1 / revivetime ); + player.revive_team_progressbar.progresstext = player createprimaryprogressbartext(); + player.revive_team_progressbar.progresstext settext( &"ZOMBIE_MEAT_RESPAWN_TEAMMATE" ); + player thread destroy_revive_progress_on_downed(); + } + + progress++; + + if ( progress > revivetime * 10 ) + { + level bring_back_dead_teammate( player._meat_team ); + player destroy_revive_progress(); + wait 1; + player._bringing_back_teammate = 0; + progress = -1; + } + + wait 0.1; + } + + player._bringing_back_teammate = 0; + player destroy_revive_progress(); +} + +should_try_to_bring_back_teammate( team ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i]._meat_team == team && players[i].sessionstate == "spectator" ) + return true; + } + + return false; +} + +bring_back_dead_teammate( team ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i]._meat_team == team && players[i].sessionstate == "spectator" ) + { + player = players[i]; + break; + } + } + + if ( !isdefined( player ) ) + return; + + player playsound( level.zmb_laugh_alias ); + wait 0.25; + playfx( level._effect["poltergeist"], player.spectator_respawn.origin ); + playsoundatposition( "zmb_bolt", player.spectator_respawn.origin ); + earthquake( 0.5, 0.75, player.spectator_respawn.origin, 1000 ); + level.custom_spawnplayer = ::respawn_meat_player; + player.pers["spectator_respawn"] = player.spectator_respawn; + player [[ level.spawnplayer ]](); + level.custom_spawnplayer = undefined; +} + +respawn_meat_player() +{ + spawnpoint = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "meat_spectator_respawn" ); + self spawn( spawnpoint.origin, spawnpoint.angles ); + self._meat_team = self.pers["zteam"]; + self._encounters_team = self.pers["encounters_team"]; + self.characterindex = self.pers["characterindex"]; + self._team_name = self.pers["team_name"]; + self.spectator_respawn = self.pers["meat_spectator_respawn"]; + self reviveplayer(); + self.is_burning = 0; + self.is_zombie = 0; + self.ignoreme = 0; +} + +destroy_revive_progress_on_downed() +{ + level endon( "end_game" ); + level endon( "meat_end" ); + self waittill_any( "fake_death", "player_downed", "death" ); + self destroy_revive_progress(); +} + +destroy_revive_progress() +{ + if ( isdefined( self.revive_team_progressbar ) ) + { + self.revive_team_progressbar destroyelem(); + self.revive_team_progressbar.progresstext destroyelem(); + } +} + +kick_the_meat( meat, laststand_nudge ) +{ + if ( isdefined( self._kicking_meat ) && self._kicking_meat ) + return; + + fake_meat = 0; + self._kicking_meat = 1; + self._spawning_meat = 1; + org = meat.origin; + + if ( !( isdefined( meat._fake_meat ) && meat._fake_meat ) ) + { + meat cleanup_meat(); + level._last_person_to_throw_meat = self; + level._last_person_to_throw_meat_time = gettime(); + level._meat_splitter_activated = 0; + } + else + { + fake_meat = 1; + meat cleanup_meat(); + } + + kickangles = self.angles; + kickangles += ( randomfloatrange( -30, -20 ), randomfloatrange( -5, 5 ), 0 ); + launchdir = anglestoforward( kickangles ); + vel = self getvelocity(); + speed = length( vel ) * 1.5; + height_boost = 380; + + if ( isdefined( laststand_nudge ) && laststand_nudge ) + { + if ( vel == ( 0, 0, 0 ) ) + vel = ( 30, 30, 5 ); + + speed = length( vel ) * 2; + height_boost = 120; + } + + launchvel = vectorscale( launchdir, speed ); + grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( launchvel[0], launchvel[1], height_boost ) ); + grenade playsound( "zmb_meat_meat_tossed" ); + grenade thread waittill_loopstart(); + + if ( fake_meat ) + { + grenade._fake_meat = 1; + grenade thread delete_on_real_meat_pickup(); + level._kicked_meat = grenade; + } + + wait 0.1; + self._spawning_meat = 0; + self._kicking_meat = 0; + + if ( !fake_meat ) + { + level notify( "meat_thrown", self ); + level notify( "meat_kicked" ); + } +} + +delete_on_real_meat_pickup() +{ + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + return; + + self endon( "death" ); + level waittill_any( "meat_grabbed", "end_game", "meat_kicked" ); + add_meat_event( "fake_meat_killed_by_real", self ); + + if ( isdefined( level._kicked_meat ) && level._kicked_meat == self ) + level._kicked_meat = undefined; + + if ( isdefined( self ) ) + self cleanup_meat(); +} + +play_item_meat_on_spawn_retrieve_trigger( watcher, player ) +{ + self item_meat_on_spawn_retrieve_trigger( watcher, player, get_gamemode_var( "item_meat_name" ) ); +} + +can_revive( revivee ) +{ + if ( self hasweapon( get_gamemode_var( "item_meat_name" ) ) ) + return false; + + if ( !self maps\mp\zombies\_zm_laststand::is_reviving_any() && isdefined( level.item_meat_pick_up_trigger ) && self istouching( level.item_meat_pick_up_trigger ) ) + return false; + + return true; +} + +pickup_origin() +{ + origin = self get_eye(); + + if ( !isdefined( origin ) ) + origin = self gettagorigin( "tag_weapon" ); + + if ( !isdefined( origin ) ) + origin = self gettagorigin( "tag_weapon_right" ); + + if ( !isdefined( origin ) ) + origin = self.origin; + + return origin; +} + +can_spike_meat() +{ + if ( isdefined( level._last_person_to_throw_meat ) && self == level._last_person_to_throw_meat ) + return false; + + meat = level.item_meat; + meat_spike_dist_sq = 4096; + meat_spike_dot = 0.1; + + if ( isdefined( meat ) ) + { + view_pos = self getweaponmuzzlepoint(); + + if ( distancesquared( view_pos, meat.origin ) < meat_spike_dist_sq ) + return true; + } + + return false; +} + +start_encounters_round_logic() +{ + if ( isdefined( level.flag["start_zombie_round_logic"] ) ) + flag_wait( "start_zombie_round_logic" ); + + flag_wait( "initial_players_connected" ); + + if ( !flag( "start_encounters_match_logic" ) ) + flag_set( "start_encounters_match_logic" ); +} + +onstartgametype() +{ + thread start_encounters_round_logic(); + maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zmeat", ::meat_hub_start_func, 1 ); +} + +hide_non_meat_objects() +{ + door_trigs = getentarray( "zombie_door", "targetname" ); + + for ( i = 0; i < door_trigs.size; i++ ) + { + if ( isdefined( door_trigs[i] ) ) + door_trigs[i] delete(); + } + + objects = getentarray(); + + for ( i = 0; i < objects.size; i++ ) + { + if ( objects[i] is_meat_object() ) + continue; + + if ( objects[i] iszbarrier() ) + continue; + + if ( isdefined( objects[i].spawnflags ) && objects[i].spawnflags == 1 ) + objects[i] connectpaths(); + + objects[i] notsolid(); + objects[i] hide(); + } +} + +is_meat_object() +{ + if ( !isdefined( self.script_parameters ) ) + return true; + + tokens = strtok( self.script_parameters, " " ); + + for ( i = 0; i < tokens.size; i++ ) + { + if ( tokens[i] == "meat_remove" ) + return false; + } + + return true; +} + +setup_meat_world_objects() +{ + objects = getentarray( level.scr_zm_map_start_location, "script_noteworthy" ); + + for ( i = 0; i < objects.size; i++ ) + { + if ( !objects[i] is_meat_object() ) + continue; + + if ( isdefined( objects[i].script_gameobjectname ) ) + continue; + + if ( isdefined( objects[i].script_vector ) ) + { + objects[i] moveto( objects[i].origin + objects[i].script_vector, 0.05 ); + + objects[i] waittill( "movedone" ); + } + + if ( isdefined( objects[i].spawnflags ) && objects[i].spawnflags == 1 && !( isdefined( level._dont_reconnect_paths ) && level._dont_reconnect_paths ) ) + objects[i] disconnectpaths(); + } + + level clientnotify( "meat_" + level.scr_zm_map_start_location ); +} + +spawn_meat_zombies() +{ + level endon( "meat_end" ); + force_riser = 0; + force_chaser = 0; + num = 0; + max_ai_num = 15; + + if ( getdvarint( _hash_CD22CF55 ) > 0 ) + max_ai_num = 0; + + if ( getdvarint( _hash_FA81816F ) == 2 ) + max_ai_num = -1; + + level waittill( "meat_grabbed" ); + + while ( true ) + { + ai = getaiarray( level.zombie_team ); + + if ( ai.size > max_ai_num ) + wait 0.1; + else + { + if ( num % 2 == 0 ) + spawn_points = level._meat_team_1_zombie_spawn_points; + else + spawn_points = level._meat_team_2_zombie_spawn_points; + + num++; + spawn_point = undefined; + dist = 512; + distcheck = dist * dist; + startindex = randomint( spawn_points.size ); + + while ( !isdefined( spawn_point ) ) + { + for ( i = 0; i < spawn_points.size; i++ ) + { + index = ( startindex + i ) % spawn_points.size; + point = spawn_points[index]; + + if ( num % 2 == 0 ) + players = get_players_on_meat_team( 1 ); + else + players = get_players_on_meat_team( 2 ); + + clear = 1; + + foreach ( player in players ) + { + if ( distancesquared( player.origin, point.origin ) < distcheck ) + clear = 0; + } + + if ( clear ) + { + spawn_point = point; + break; + } + } + + if ( dist <= 128 ) + spawn_point = point; + else + { + dist /= 4; + distcheck = dist * dist; + } + + wait 0.05; + } + + zombie = spawn_meat_zombie( level.meat_spawners[0], "meat_zombie", spawn_point, level._meat_zombie_spawn_health ); + + if ( isdefined( zombie ) ) + zombie maps\mp\zombies\_zm_game_module::make_supersprinter(); + } + + wait( level._meat_zombie_spawn_timer ); + } +} + +spawn_meat_zombie( spawner, target_name, spawn_point, round_number ) +{ + level endon( "meat_end" ); + + if ( !isdefined( spawner ) ) + { + iprintlnbold( "BUG: There is something wrong with the zombie spawners" ); + return; + } + + while ( isdefined( level._meat_zombie_spawning ) && level._meat_zombie_spawning ) + wait 0.05; + + level._meat_zombie_spawning = 1; + level.zombie_spawn_locations = []; + level.zombie_spawn_locations[level.zombie_spawn_locations.size] = spawn_point; + zombie = maps\mp\zombies\_zm_utility::spawn_zombie( spawner, target_name, spawn_point, round_number ); + + if ( isdefined( zombie ) ) + { + zombie thread maps\mp\zombies\_zm_spawner::zombie_spawn_init(); + zombie thread maps\mp\zombies\_zm::round_spawn_failsafe(); + } + else + iprintlnbold( "BUG: There is something wrong with the zombie spawning" ); + + spawner._spawning = undefined; + level._meat_zombie_spawning = 0; + return zombie; +} + +monitor_meat_on_team() +{ + level endon( "meat_end" ); + + while ( true ) + { + players = get_players(); + + if ( isdefined( level._meat_on_team ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i] ) ) + continue; + + if ( players[i]._meat_team == level._meat_on_team ) + { + if ( players[i].ignoreme ) + players[i].ignoreme = 0; + } + else if ( !players[i].ignoreme ) + players[i].ignoreme = 1; + + wait 0.05; + } + } + else + { + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i] ) ) + continue; + + if ( players[i].ignoreme ) + players[i].ignoreme = 0; + + wait 0.05; + } + } + + wait 0.1; + } +} + +item_meat_reset( origin, immediate ) +{ + level notify( "new_meat" ); + level endon( "new_meat" ); + + if ( isdefined( level.item_meat ) ) + { + level.item_meat cleanup_meat(); + level.item_meat = undefined; + } + + if ( !( isdefined( immediate ) && immediate ) ) + level waittill( "reset_meat" ); + + item_meat_clear(); + + if ( isdefined( origin ) ) + item_meat_spawn( origin ); +} + +meat_player_initial_spawn() +{ + players = get_players(); + one = 1; + two = 2; + + if ( get_game_var( "switchedsides" ) ) + { + one = 2; + two = 1; + } + + for ( i = 0; i < players.size; i++ ) + { + if ( get_game_var( "side_selection" ) == 1 ) + { + if ( players[i].team == "allies" ) + players[i]._meat_team = one; + else + players[i]._meat_team = two; + } + else if ( players[i].team == "allies" ) + players[i]._meat_team = two; + else + players[i]._meat_team = one; + + if ( isdefined( level.custom_player_fake_death_cleanup ) ) + players[i] [[ level.custom_player_fake_death_cleanup ]](); + + players[i] setstance( "stand" ); + + if ( isdefined( players[i]._meat_team ) ) + { + if ( players[i]._meat_team == one ) + players[i]._meat_team = one; + else + players[i]._meat_team = two; + } + else if ( players[i].team == "axis" ) + players[i]._meat_team = one; + else + players[i]._meat_team = two; + + players[i] meat_player_setup(); + } + + waittillframeend; + maps\mp\gametypes_zm\_zm_gametype::start_round(); + award_grenades_for_team( 1 ); + award_grenades_for_team( 2 ); +} + +meat_player_setup() +{ + self.pers["zteam"] = self._meat_team; + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "encounters_team", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "characterindex", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "team_name", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "spectator_respawn", 0 ); + self.pers["encounters_team"] = self._encounters_team; + self.pers["characterindex"] = self.characterindex; + self.pers["team_name"] = self._team_name; + self.pers["meat_spectator_respawn"] = self.spectator_respawn; + self.score = 1000; + self.pers["score"] = 1000; + self takeallweapons(); + self giveweapon( "knife_zm" ); + self give_start_weapon( 1 ); + + if ( !isdefined( self._saved_by_throw ) ) + self._saved_by_throw = 0; + + self setmovespeedscale( 1 ); + self._has_meat = 0; + self setclientfield( "holding_meat", 0 ); + self freeze_player_controls( 1 ); +} + +can_touch_meat() +{ + if ( isdefined( self.dont_touch_the_meat ) && self.dont_touch_the_meat ) + return 0; + + meat = level.item_meat; + + if ( isdefined( meat ) ) + { + meatorg = meat.origin + vectorscale( ( 0, 0, 1 ), 8.0 ); + trace = bullettrace( self pickup_origin(), meatorg, 0, meat ); + return distancesquared( trace["position"], meatorg ) < 1; + } + + return 0; +} + +trying_to_use() +{ + self.use_ever_released |= !self usebuttonpressed(); + return self.use_ever_released && self usebuttonpressed(); +} + +trying_to_spike( item ) +{ + return item.meat_is_flying && self meleebuttonpressed(); +} + +item_quick_trigger( meat_id, trigger ) +{ + self endon( "death" ); + meat_trigger_time = 150; + + if ( isdefined( trigger.radius ) ) + radius = trigger.radius + 15.0; + else + radius = 51.0; + + trigrad2 = radius * radius; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + player.use_ever_released = !player usebuttonpressed(); + } + + while ( isdefined( trigger ) ) + { + trigorg = trigger.origin; + players = get_players(); + + if ( players.size ) + { + random_start_point = randomint( players.size ); + + for ( i = 0; i < players.size; i++ ) + { + player = players[( i + random_start_point ) % players.size]; + + if ( !isdefined( player.trying_to_trigger_meat ) ) + player.trying_to_trigger_meat = []; + + if ( !isdefined( player.trying_to_trigger_meat_time ) ) + player.trying_to_trigger_meat_time = []; + + if ( player maps\mp\zombies\_zm_laststand::is_reviving_any() ) + continue; + + meleeing = player ismeleeing(); + + if ( isdefined( trigger ) && player istouching( trigger ) && distance2dsquared( player.origin, trigorg ) < trigrad2 && !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && ( player trying_to_use() || self.meat_is_flying && meleeing ) && player can_touch_meat() ) + { + if ( self.meat_is_flying && meleeing ) + { + if ( player can_spike_meat() ) + { + player.trying_to_trigger_meat[meat_id] = 0; + trigger notify( "usetrigger", player ); + } + } + else if ( !( isdefined( player.trying_to_trigger_meat[meat_id] ) && player.trying_to_trigger_meat[meat_id] ) ) + { + player.trying_to_trigger_meat[meat_id] = 1; + player.trying_to_trigger_meat_time[meat_id] = gettime(); + } + else if ( gettime() - player.trying_to_trigger_meat_time[meat_id] >= meat_trigger_time ) + { + player.trying_to_trigger_meat[meat_id] = 0; + trigger notify( "usetrigger", player ); + } + + continue; + } + + player.trying_to_trigger_meat[meat_id] = 0; + player.trying_to_trigger_meat_time[meat_id] = undefined; + } + } + + wait 0.05; + } +} + +item_meat_watch_trigger( meat_id, trigger, callback, playersoundonuse, npcsoundonuse ) +{ + self endon( "death" ); + self thread item_quick_trigger( meat_id, trigger ); + + while ( true ) + { + trigger waittill( "usetrigger", player ); + + if ( !isalive( player ) ) + continue; + + if ( !is_player_valid( player ) ) + continue; + + if ( player has_powerup_weapon() ) + continue; + + if ( player maps\mp\zombies\_zm_laststand::is_reviving_any() ) + continue; + + volley = self.meat_is_flying && player meleebuttonpressed(); + player.volley_meat = volley; + + if ( isdefined( self._fake_meat ) && self._fake_meat ) + add_meat_event( "player_fake_take", player, self ); + else if ( volley ) + add_meat_event( "player_volley", player, self ); + else if ( self.meat_is_moving ) + add_meat_event( "player_catch", player, self ); + else + add_meat_event( "player_take", player, self ); + + if ( isdefined( self._fake_meat ) && self._fake_meat ) + { + player playlocalsound( level.zmb_laugh_alias ); + wait_network_frame(); + + if ( !isdefined( self ) ) + return; + + self cleanup_meat(); + return; + } + + curr_weap = player getcurrentweapon(); + + if ( !is_meat( curr_weap ) ) + player.pre_meat_weapon = curr_weap; + + if ( self.meat_is_moving ) + { + if ( volley ) + self item_meat_volley( player ); + else + self item_meat_caught( player, self.meat_is_flying ); + } + + self item_meat_pickup(); + + if ( isdefined( playersoundonuse ) ) + player playlocalsound( playersoundonuse ); + + if ( isdefined( npcsoundonuse ) ) + player playsound( npcsoundonuse ); + + if ( volley ) + player thread spike_the_meat( self ); + else + { + self thread [[ callback ]]( player ); + + if ( !isdefined( player._meat_hint_shown ) ) + { + player thread show_meat_throw_hint(); + player._meat_hint_shown = 1; + } + } + } +} + +item_meat_volley( player ) +{ +/# + println( "MEAT: Spiked the meat\\n" ); +#/ +} + +item_meat_caught( player, in_air ) +{ + if ( in_air ) + { +/# + println( "MEAT: Caught the meat on the fly\\n" ); +#/ + } + else + { +/# + println( "MEAT: Caught the meat while moving\\n" ); +#/ + } +} + +item_meat_on_pickup( player ) +{ + assert( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand(), "Player in last stand triggered meat pickup" ); + player maps\mp\gametypes_zm\_weaponobjects::deleteweaponobjecthelper( self ); + self cleanup_meat(); + level.item_meat = undefined; + level._last_person_to_throw_meat = undefined; + assign_meat_to_team( player ); + level notify( "meat_grabbed" ); + player notify( "meat_grabbed" ); + level thread zmbvoxmeatonteamspecific( player._encounters_team ); + + if ( !player hasweapon( get_gamemode_var( "item_meat_name" ) ) ) + player giveweapon( get_gamemode_var( "item_meat_name" ) ); + + player increment_is_drinking(); + player switchtoweapon( get_gamemode_var( "item_meat_name" ) ); + player setweaponammoclip( get_gamemode_var( "item_meat_name" ), 2 ); + player thread waittill_thrown(); +} + +waittill_thrown() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "reset_downed" ); + + self waittill( "grenade_fire", grenade ); + + grenade playsound( "zmb_meat_meat_tossed" ); + grenade thread waittill_loopstart(); +} + +waittill_loopstart() +{ + self endon( "stationary" ); + self endon( "death" ); + level endon( "meat_grabbed" ); + level endon( "end_game" ); + level endon( "meat_kicked" ); + + while ( true ) + { + self waittill( "grenade_bounce", pos, normal, ent ); + + self stopsounds(); + wait 0.05; + self playsound( "zmb_meat_bounce" ); + } +} + +item_meat_watch_shutdown() +{ + self waittill( "death" ); + + if ( isdefined( self.item_meat_pick_up_trigger ) ) + { + self.item_meat_pick_up_trigger delete(); + level.item_meat_pick_up_trigger = undefined; + } +} + +item_meat_clear() +{ + if ( isdefined( level.item_meat ) ) + { + level.item_meat cleanup_meat(); + level.item_meat = undefined; + } + + if ( isdefined( level._fake_meats ) ) + { + foreach ( meat in level._fake_meats ) + { + if ( isdefined( meat ) ) + meat cleanup_meat(); + } + + level._fake_meats = undefined; + } +} + +zombie_path_timer_override() +{ + return gettime() + randomfloatrange( 0.35, 1 ) * 1000; +} + +meat_poi_override_func() +{ + if ( isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving ) ) + { + if ( abs( level.item_meat.origin[2] - groundpos( level.item_meat.origin )[2] ) < 35 ) + { + level._zombies_ignoring_all = 0; + level notify( "clear_ignore_all" ); + return undefined; + } + + level thread set_ignore_all(); + meat_poi = []; + meat_poi[0] = groundpos( level.item_meat.origin ); + meat_poi[1] = level.item_meat; + return meat_poi; + } + + level._zombies_ignoring_all = 0; + return undefined; +} + +meat_end_match( winning_team ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].has_minigun ) && players[i].has_minigun ) + { + primaryweapons = players[i] getweaponslistprimaries(); + + for ( x = 0; x < primaryweapons.size; x++ ) + { + if ( primaryweapons[x] == "minigun_zm" ) + players[i] takeweapon( "minigun_zm" ); + } + + players[i] notify( "minigun_time_over" ); + players[i].zombie_vars["zombie_powerup_minigun_on"] = 0; + players[i]._show_solo_hud = 0; + players[i].has_minigun = 0; + players[i].has_powerup_weapon = 0; + } + + if ( isdefined( players[i]._has_meat_hud ) ) + players[i]._has_meat_hud destroy(); + + if ( players[i] hasweapon( get_gamemode_var( "item_meat_name" ) ) ) + { + players[i] takeweapon( get_gamemode_var( "item_meat_name" ) ); + players[i] decrement_is_drinking(); + } + } + + level notify( "game_module_ended", winning_team ); + wait 0.1; + level delay_thread( 2, ::item_meat_clear ); + + if ( isdefined( level.gameended ) && level.gameended ) + level clientnotify( "end_meat" ); +} + +updatedownedcounters() +{ + if ( self._encounters_team == "A" ) + { + level.team_a_downed++; + self thread waitforrevive( "A" ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_revive_" + level.team_a_downed, "A" ); + } + else + { + level.team_b_downed++; + self thread waitforrevive( "B" ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_revive_" + level.team_b_downed, "B" ); + } +} + +waitforrevive( team ) +{ + self endon( "death" ); + + self waittill( "player_revived" ); + + if ( team == "A" ) + level.team_a_downed--; + else + level.team_b_downed--; +} + +assign_meat_to_team( player, team_num ) +{ + meat_team = undefined; + players = get_players(); + + if ( isdefined( player ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i] ) ) + continue; + + if ( players[i] != player || isdefined( player._meat_hint_shown ) && player._meat_hint_shown ) + players[i] iprintlnbold( &"ZOMBIE_GRABBED_MEAT", player.name ); + } + + meat_team = player._meat_team; + } + else if ( isdefined( team_num ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( players[i]._meat_team == team_num ) + { + players[i] iprintlnbold( &"ZOMBIE_YOUR_TEAM_MEAT" ); + continue; + } + + players[i] iprintlnbold( &"ZOMBIE_OTHER_TEAM_MEAT" ); + } + + meat_team = team_num; + } + + level._meat_on_team = meat_team; + teamplayers = get_players_on_meat_team( meat_team ); + + if ( isdefined( teamplayers ) && teamplayers.size > 0 ) + { + if ( teamplayers[0]._encounters_team == "B" ) + { + setteamhasmeat( "allies", 1 ); + setteamhasmeat( "axis", 0 ); + } + else if ( teamplayers[0]._encounters_team == "A" ) + { + setteamhasmeat( "allies", 0 ); + setteamhasmeat( "axis", 1 ); + } + } + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i] ) ) + continue; + + if ( isdefined( player ) && players[i] == player ) + { + if ( isdefined( players[i]._has_meat ) && players[i]._has_meat ) + continue; + + players[i]._has_meat = 1; + players[i] thread slow_down_player_with_meat(); + players[i] thread reset_meat_when_player_downed(); + players[i] thread reset_meat_when_player_disconnected(); + continue; + } + } +} + +zmbvoxmeatonteamspecific( team ) +{ + if ( !isdefined( level.zmbvoxteamlasthadmeat ) ) + level.zmbvoxteamlasthadmeat = team; + + if ( level.zmbvoxteamlasthadmeat == team ) + return; + + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_grab", team ); + level.zmbvoxteamlasthadmeat = team; + otherteam = maps\mp\zombies\_zm_audio_announcer::getotherteam( team ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_grab_" + otherteam, otherteam ); +} + +create_meat_team_hud( meat_team, destroy_only ) +{ + if ( isdefined( self._has_meat_hud ) ) + { + self._has_meat_hud destroy(); + + if ( isdefined( destroy_only ) ) + return; + } + + if ( !isdefined( meat_team ) ) + return; + + elem = newclienthudelem( self ); + elem.hidewheninmenu = 1; + elem.horzalign = "LEFT"; + elem.vertalign = "BOTTOM"; + elem.alignx = "left"; + elem.aligny = "middle"; + elem.x = 10; + elem.y = -10; + elem.foreground = 1; + elem.font = "default"; + elem.fontscale = 1.4; + elem.color = vectorscale( ( 1, 1, 0 ), 0.9 ); + elem.alpha = 1.0; + + if ( isdefined( self._meat_team ) && self._meat_team == meat_team ) + elem.label = &"ZOMBIE_TEAM_HAS_MEAT"; + else + elem.label = &"ZOMBIE_OTHER_TEAM_HAS_MEAT"; + + self._has_meat_hud = elem; +} + +create_meat_player_hud() +{ + if ( isdefined( self._has_meat_hud ) ) + self._has_meat_hud destroy(); + + elem = newclienthudelem( self ); + elem.hidewheninmenu = 1; + elem.horzalign = "LEFT"; + elem.vertalign = "BOTTOM"; + elem.alignx = "left"; + elem.aligny = "middle"; + elem.x = 10; + elem.y = -10; + elem.foreground = 1; + elem.font = "default"; + elem.fontscale = 1.4; + elem.color = vectorscale( ( 1, 1, 0 ), 0.9 ); + elem.alpha = 1.0; + elem.label = &"ZOMBIE_PLAYER_HAS_MEAT"; + self._has_meat_hud = elem; +} + +slow_down_player_with_meat() +{ + self endon( "disconnect" ); + self setclientfield( "holding_meat", 1 ); + self setmovespeedscale( 0.6 ); + self thread zmbvoxstartholdcounter(); + + while ( isdefined( self._has_meat ) && self._has_meat ) + { + level._meat_player_tracker_origin = self.origin; + wait 0.2; + } + + self setmovespeedscale( 1 ); + self setclientfield( "holding_meat", 0 ); +} + +zmbvoxstartholdcounter() +{ + for ( meat_hold_counter = 0; isdefined( self._has_meat ) && self._has_meat; meat_hold_counter++ ) + { + if ( meat_hold_counter >= 15 ) + { + self thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "meat_hold" ); + break; + } + + wait 0.5; + } +} + +reset_meat_when_player_downed() +{ + self notify( "reset_downed" ); + self endon( "reset_downed" ); + level endon( "meat_reset" ); + level endon( "meat_thrown" ); + self waittill_any( "player_downed", "death", "fake_death", "replace_weapon_powerup" ); + self._has_meat = 0; + self._spawning_meat = 1; + grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), self.origin + ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 15 ), ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 0 ) ); + grenade._respawned_meat = 1; + level._last_person_to_throw_meat = undefined; + playsoundatposition( "zmb_spawn_powerup", self.origin ); + wait 0.1; + self._spawning_meat = undefined; + level notify( "meat_reset" ); +} + +meat_last_stand_callback( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + if ( isdefined( self._has_meat ) && self._has_meat ) + level thread item_meat_drop( self.origin, self._meat_team ); +} + +reset_meat_when_player_disconnected() +{ + level endon( "meat_thrown" ); + level endon( "meat_reset" ); + level endon( "meat_end" ); + team = self._meat_team; + + self waittill( "disconnect" ); + + level thread item_meat_drop( level._meat_player_tracker_origin, team ); +} + +item_meat_drop( org, team ) +{ + players = get_alive_players_on_meat_team( team ); + + if ( players.size > 0 ) + { + player = players[0]; + player endon( "disconnect" ); + player._spawning_meat = 1; + grenade = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org + ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 15 ), ( 0, 0, 0 ) ); + grenade._respawned_meat = 1; + level._last_person_to_throw_meat = undefined; + playsoundatposition( "zmb_spawn_powerup", grenade.origin ); + wait 0.1; + player._spawning_meat = undefined; + level notify( "meat_reset" ); + } +} + +player_has_meat( player ) +{ + return player getcurrentweapon() == get_gamemode_var( "item_meat_name" ); +} + +get_player_with_meat() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i]._has_meat ) && players[i]._has_meat ) + return players[i]; + } + + return undefined; +} + +spawn_player_meat_manager() +{ + self thread player_watch_weapon_change(); + self thread player_watch_grenade_throw(); +} + +player_watch_weapon_change() +{ + self endon( "death_or_disconnect" ); + + for (;;) + { + self waittill( "weapon_change", weapon ); + + if ( weapon == get_gamemode_var( "item_meat_name" ) ) + { + add_meat_event( "player_meat", self ); + continue; + } + + add_meat_event( "player_no_meat", self ); + } +} + +player_watch_grenade_throw() +{ + self endon( "death_or_disconnect" ); + + for (;;) + { + self waittill( "grenade_fire", weapon, weapname ); + + if ( weapname == get_gamemode_var( "item_meat_name" ) ) + { + add_meat_event( "player_grenade_fire", self, weapon ); + weapon thread item_meat_on_spawn_retrieve_trigger( undefined, self, get_gamemode_var( "item_meat_name" ) ); + } + } +} + +spawn_level_meat_manager() +{ +/# + level.meat_manager = spawnstruct(); + level.meat_manager.events = []; + level.meat_manager thread handle_meat_events(); +#/ +} + +add_meat_event( e, p1, p2, p3, p4 ) +{ +/# + event = spawnstruct(); + event.e = e; + event.numparams = 0; + event.param = []; + + if ( isdefined( p1 ) ) + { + event.param[0] = p1; + event.numparams = 1; + } + + if ( isdefined( p2 ) ) + { + event.param[1] = p2; + event.numparams = 2; + } + + if ( isdefined( p3 ) ) + { + event.param[2] = p3; + event.numparams = 3; + } + + if ( isdefined( p4 ) ) + { + event.param[3] = p4; + event.numparams = 4; + } + + if ( isdefined( level.meat_manager ) ) + level.meat_manager.events[level.meat_manager.events.size] = event; +#/ +} + +handle_meat_events() +{ + while ( true ) + { + while ( self.events.size ) + { + self handle_meat_event( self.events[0] ); + arrayremoveindex( self.events, 0 ); + } + + wait 0.05; + } +} + +paramstr( param ) +{ +/# + if ( !isdefined( param ) ) + return "undefined"; + + if ( isplayer( param ) ) + return param.name; + + if ( isstring( param ) || isint( param ) || isfloat( param ) || isvec( param ) ) + return param; + + if ( isarray( param ) ) + return "[]"; + + return ""; +#/ +} + +handle_meat_event( event ) +{ +/# + estr = "ZM MEAT: [" + event.e + "]("; + + for ( i = 0; i < event.numparams; i++ ) + { + estr += paramstr( event.param[i] ); + + if ( i < event.numparams - 1 ) + estr += ","; + } + + estr += ") \\n"; + println( estr ); +#/ +} diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/gametypes_zm/zstandard.gsc b/ZM/Maps/Buried/maps/mp/gametypes_zm/zstandard.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/gametypes_zm/zstandard.gsc rename to ZM/Maps/Buried/maps/mp/gametypes_zm/zstandard.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/teams/_teamset_cdc.gsc b/ZM/Maps/Buried/maps/mp/teams/_teamset_cdc.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/teams/_teamset_cdc.gsc rename to ZM/Maps/Buried/maps/mp/teams/_teamset_cdc.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried.gsc b/ZM/Maps/Buried/maps/mp/zm_buried.gsc similarity index 99% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried.gsc index 3fd1624..8296739 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried.gsc +++ b/ZM/Maps/Buried/maps/mp/zm_buried.gsc @@ -735,16 +735,16 @@ give_team_characters() switch ( self.characterindex ) { - case "2": - case "0": + case 2: + case 0: self setmodel( "c_zom_player_cia_dlc1_fb" ); self.voice = "american"; self.skeleton = "base"; self setviewmodel( "c_zom_suit_viewhands" ); self.characterindex = 0; break; - case "3": - case "1": + case 3: + case 1: self setmodel( "c_zom_player_cdc_dlc1_fb" ); self.voice = "american"; self.skeleton = "base"; @@ -793,7 +793,7 @@ give_personality_characters() #/ switch ( self.characterindex ) { - case "2": + case 2: self character\c_transit_player_farmgirl::main(); self setviewmodel( "c_zom_farmgirl_viewhands" ); level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); @@ -801,7 +801,7 @@ give_personality_characters() self.favorite_wall_weapons_list[self.favorite_wall_weapons_list.size] = "870mcs_zm"; self set_player_is_female( 1 ); break; - case "0": + case 0: self character\c_transit_player_oldman::main(); self setviewmodel( "c_zom_oldman_viewhands" ); level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); @@ -809,7 +809,7 @@ give_personality_characters() self.favorite_wall_weapons_list[self.favorite_wall_weapons_list.size] = "claymore_zm"; self set_player_is_female( 0 ); break; - case "3": + case 3: self character\c_transit_player_engineer::main(); self setviewmodel( "c_zom_engineer_viewhands" ); level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); @@ -817,7 +817,7 @@ give_personality_characters() self.favorite_wall_weapons_list[self.favorite_wall_weapons_list.size] = "m16_zm"; self set_player_is_female( 0 ); break; - case "1": + case 1: self character\c_buried_player_reporter_dam::main(); self setviewmodel( "c_zom_reporter_viewhands" ); level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); @@ -929,10 +929,8 @@ assign_lowest_unused_character_index() return 1; return 3; - continue; } - - if ( player.characterindex == 3 || player.characterindex == 1 ) + else if ( player.characterindex == 3 || player.characterindex == 1 ) { if ( randomint( 100 ) > 50 ) return 0; @@ -1628,16 +1626,16 @@ buried_audio_custom_response_line( player, index, category, type ) switch ( player.characterindex ) { - case "0": + case 0: level maps\mp\zombies\_zm_audio::setup_hero_rival( player, samuel, marlton, category, type ); break; - case "1": + case 1: level maps\mp\zombies\_zm_audio::setup_hero_rival( player, russman, misty, category, type ); break; - case "2": + case 2: level maps\mp\zombies\_zm_audio::setup_hero_rival( player, marlton, samuel, category, type ); break; - case "3": + case 3: level maps\mp\zombies\_zm_audio::setup_hero_rival( player, misty, russman, category, type ); break; } @@ -1928,12 +1926,8 @@ buried_player_track_ammo_count() foreach ( weapon in a_weapons ) { if ( weapon == weap ) - { continue; - continue; - } - - if ( self getammocount( weapon ) > 0 ) + else if ( self getammocount( weapon ) > 0 ) { self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "ammo_switch" ); self.ammo_switch_vo_played = 1; diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_achievement.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_achievement.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_achievement.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_achievement.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_amb.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_amb.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_amb.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_amb.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_buildables.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_buildables.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_buildables.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_buildables.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_classic.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_classic.gsc similarity index 99% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_classic.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_classic.gsc index 71db3ca..548dcae 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_classic.gsc +++ b/ZM/Maps/Buried/maps/mp/zm_buried_classic.gsc @@ -495,11 +495,8 @@ sliding_bookcase_think() } } -sliding_bookcase_activate( open ) +sliding_bookcase_activate( open = 1 ) { - if ( !isdefined( open ) ) - open = 1; - if ( isdefined( self.door_moving ) ) return; @@ -1230,9 +1227,7 @@ _append_name( str_name, str_name_append ) blocker_model_promote() { -/# assert( isdefined( self.model ), "model not set for minigame blocker at " + self.origin ); -#/ m_blocker = spawn( "script_model", self.origin + vectorscale( ( 0, 0, -1 ), 100.0 ) ); if ( !isdefined( self.angles ) ) @@ -1257,11 +1252,8 @@ blocker_model_remove() self delete(); } -toggle_doors_along_richtofen_street( b_should_close ) +toggle_doors_along_richtofen_street( b_should_close = 1 ) { - if ( !isdefined( b_should_close ) ) - b_should_close = 1; - a_door_names = array( "general_store_door1" ); a_doors = getentarray( "zombie_door", "targetname" ); @@ -1311,11 +1303,8 @@ close_open_door() } } -open_closed_door( bignoreminigameflag ) +open_closed_door( bignoreminigameflag = 0 ) { - if ( !isdefined( bignoreminigameflag ) ) - bignoreminigameflag = 0; - if ( bignoreminigameflag || isdefined( self.closed_by_minigame ) && self.closed_by_minigame ) { if ( isdefined( self.is_moving ) && self.is_moving ) @@ -1341,11 +1330,8 @@ open_closed_door( bignoreminigameflag ) } } -toggle_door_triggers( b_allow_use ) +toggle_door_triggers( b_allow_use = 1 ) { - if ( !isdefined( b_allow_use ) ) - b_allow_use = 1; - a_triggers = getentarray( "zombie_door", "targetname" ); for ( i = 0; i < a_triggers.size; i++ ) @@ -1372,9 +1358,7 @@ minigame_blockers_precache() foreach ( struct in a_structs ) { -/# assert( isdefined( struct.model ), "blocker struct is missing model at " + struct.origin ); -#/ precachemodel( struct.model ); } } diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_distance_tracking.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_distance_tracking.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_distance_tracking.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_distance_tracking.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_ee.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_ee.gsc similarity index 97% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_ee.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_ee.gsc index d854ace..9473440 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_ee.gsc +++ b/ZM/Maps/Buried/maps/mp/zm_buried_ee.gsc @@ -116,7 +116,7 @@ spawn_and_animate_ghost_pianist() e_temp.angles = s_anim.angles; e_temp setclientfield( "ghost_fx", 3 ); e_temp setmodel( "c_zom_zombie_buried_ghost_woman_fb" ); - e_temp useanimtree( -1 ); + e_temp useanimtree( #animtree ); e_temp setanim( %ai_zombie_ghost_playing_piano ); e_temp setclientfield( "sndGhostAudio", 1 ); /# @@ -206,11 +206,8 @@ devgui_support_ee() } } -warp_to_struct( str_value, str_key ) +warp_to_struct( str_value, str_key = "targetname" ) { - if ( !isdefined( str_key ) ) - str_key = "targetname"; - s_warp = getstruct( str_value, str_key ); self setorigin( s_warp.origin ); diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_ffotd.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_ffotd.gsc similarity index 99% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_ffotd.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_ffotd.gsc index 8bb8398..703a54c 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_ffotd.gsc +++ b/ZM/Maps/Buried/maps/mp/zm_buried_ffotd.gsc @@ -505,9 +505,8 @@ ghost_mansion_from_maze_push_trigger() push_players_standing_in_trigger_volumes() { -/# assert( isdefined( self.push_player_towards_point ), "push_player_towards_point field is undefined on push_trigger! This is required for the push functionality to work" ); -#/ + while ( true ) { self waittill( "trigger", player ); diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_fountain.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_fountain.gsc similarity index 96% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_fountain.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_fountain.gsc index 5e8ddc7..f79decc 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_fountain.gsc +++ b/ZM/Maps/Buried/maps/mp/zm_buried_fountain.gsc @@ -103,14 +103,17 @@ wait_for_maze_fountain_to_be_destroyed() level endon( "_destroy_maze_fountain" ); #/ t_damage = getent( "maze_fountain_trigger", "targetname" ); + health = 1000; - for ( health = 1000; health > 0; health -= damage ) + while ( health > 0 ) { t_damage waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, idflags ); - asm_cond( damage < 50, loc_E9C ); - damage = 0; - asm_cond( isdefined( type ) && type == "MOD_EXPLOSIVE" || type == "MOD_EXPLOSIVE_SPLASH" || type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" || type == "MOD_PROJECTILE" || type == "MOD_PROJECTILE_SPLASH", loc_EE6 ); + if ( damage < 50 ) + damage = 0; + + if ( isdefined( type ) && ( type == "MOD_EXPLOSIVE" || type == "MOD_EXPLOSIVE_SPLASH" || type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" || type == "MOD_PROJECTILE" || type == "MOD_PROJECTILE_SPLASH" ) ) + health -= damage; } } diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_fx.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_fx.gsc similarity index 99% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_fx.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_fx.gsc index 34d9828..9e84e26 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_fx.gsc +++ b/ZM/Maps/Buried/maps/mp/zm_buried_fx.gsc @@ -152,5 +152,5 @@ precache_fxanim_props() level.maze_switch_anim["switch_down"] = %o_zombie_maze_switch_down; level.maze_switch_anim["switch_neutral"] = %o_zombie_maze_switch_neutral; level.scr_anim["fxanim_props"]["bank_sign"] = %fxanim_zom_buried_sign_bank_anim; - scriptmodelsuseanimtree( -1 ); + scriptmodelsuseanimtree( #animtree ); } diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_gamemodes.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_gamemodes.gsc similarity index 98% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_gamemodes.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_gamemodes.gsc index 4bf3c7f..a6974b9 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_gamemodes.gsc +++ b/ZM/Maps/Buried/maps/mp/zm_buried_gamemodes.gsc @@ -98,11 +98,8 @@ deleteslothbarricade( location ) } } -spawnmapcollision( collision_model, origin ) +spawnmapcollision( collision_model, origin = ( 0, 0, 0 ) ) { - if ( !isdefined( origin ) ) - origin = ( 0, 0, 0 ); - collision = spawn( "script_model", origin, 1 ); collision setmodel( collision_model ); collision disconnectpaths(); diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_grief_street.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_grief_street.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_grief_street.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_grief_street.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_jail.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_jail.gsc similarity index 95% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_jail.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_jail.gsc index 6dbedc9..98b0dd9 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_jail.gsc +++ b/ZM/Maps/Buried/maps/mp/zm_buried_jail.gsc @@ -4,13 +4,13 @@ #include common_scripts\utility; #include maps\mp\zombies\_zm_utility; +#using_animtree("zm_buried_props"); + init_jail_animtree() { - scriptmodelsuseanimtree( -1 ); + scriptmodelsuseanimtree( #animtree ); } -#using_animtree("zm_buried_props"); - init_jail_anims() { level.jail_open = %o_zombie_sloth_idle_jail_2_cower_door; @@ -21,7 +21,7 @@ init_jail_anims() jailuseanimtree() { - self useanimtree( -1 ); + self useanimtree( #animtree ); } init_jail() diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_maze.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_maze.gsc similarity index 99% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_maze.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_maze.gsc index 4960351..a07a02e 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_maze.gsc +++ b/ZM/Maps/Buried/maps/mp/zm_buried_maze.gsc @@ -332,9 +332,7 @@ maze_do_zombie_spawn( spot ) self endon( "death" ); spots = level.maze_hedge_spawnpoints; spot = undefined; -/# assert( spots.size > 0, "No spawn locations found" ); -#/ players_in_maze = maps\mp\zombies\_zm_zonemgr::get_players_in_zone( "zone_maze", 1 ); if ( isdefined( players_in_maze ) && players_in_maze.size != 0 ) diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_power.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_power.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_power.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_power.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_sq.gsc similarity index 98% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_sq.gsc index dc6eb77..96dcd35 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq.gsc +++ b/ZM/Maps/Buried/maps/mp/zm_buried_sq.gsc @@ -416,11 +416,8 @@ sidequest_logic() sq_metagame_reset_machine(); } -playfx_on_tower( str_fx, delete_old ) +playfx_on_tower( str_fx, delete_old = 0 ) { - if ( !isdefined( delete_old ) ) - delete_old = 0; - a_fx_spots = getentarray( "sq_complete_tower_fx", "targetname" ); if ( delete_old ) @@ -898,27 +895,27 @@ zombie_devgui_player_sq_commands() for ( i = 0; i < players.size; i++ ) { ip1 = i + 1; - adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Transit:1/Held\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_TRANSIT; set zombie_devgui nc_on\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Transit:1/Not Held\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_TRANSIT; set zombie_devgui nc_off\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Transit:1/Applied\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_TRANSIT; set zombie_devgui nc_app\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Transit:1/Not Applied\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_TRANSIT; set zombie_devgui nc_napp\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Completed:2/Transit:1/None:0\" \"set dg_sq_player " + ip1 + "; set dg_sq_map TRANSIT; set zombie_devgui comp_0\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Completed:2/Transit:1/Maxis:1\" \"set dg_sq_player " + ip1 + "; set dg_sq_map TRANSIT; set zombie_devgui comp_2\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Completed:2/Transit:1/Ricky:2\" \"set dg_sq_player " + ip1 + "; set dg_sq_map TRANSIT; set zombie_devgui comp_1\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Highrise:2/Held\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_HIGHRISE; set zombie_devgui nc_on\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Highrise:2/Not Held\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_HIGHRISE; set zombie_devgui nc_off\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Highrise:2/Applied\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_HIGHRISE; set zombie_devgui nc_app\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Highrise:2/Not Applied\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_HIGHRISE; set zombie_devgui nc_napp\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Completed:2/Highrise:2/None:0\" \"set dg_sq_player " + ip1 + "; set dg_sq_map HIGHRISE; set zombie_devgui comp_0\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Completed:2/Highrise:2/Maxis:1\" \"set dg_sq_player " + ip1 + "; set dg_sq_map HIGHRISE; set zombie_devgui comp_2\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Completed:2/Highrise:2/Ricky:2\" \"set dg_sq_player " + ip1 + "; set dg_sq_map HIGHRISE; set zombie_devgui comp_1\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Buried:3/Held\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_BURIED; set zombie_devgui nc_on\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Buried:3/Not Held\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_BURIED; set zombie_devgui nc_off\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Buried:3/Applied\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_BURIED; set zombie_devgui nc_app\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Buried:3/NotApplied\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_BURIED; set zombie_devgui nc_napp\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Completed:2/Buried:3/None:0\" \"set dg_sq_player " + ip1 + "; set dg_sq_map BURIED; set zombie_devgui comp_0\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Completed:2/Buried:3/Maxis:1\" \"set dg_sq_player " + ip1 + "; set dg_sq_map BURIED; set zombie_devgui comp_2\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Completed:2/Buried:3/Ricky:2\" \"set dg_sq_player " + ip1 + "; set dg_sq_map BURIED; set zombie_devgui comp_1\" \n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Transit:1/Held\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_TRANSIT; set zombie_devgui nc_on\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Transit:1/Not Held\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_TRANSIT; set zombie_devgui nc_off\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Transit:1/Applied\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_TRANSIT; set zombie_devgui nc_app\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Transit:1/Not Applied\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_TRANSIT; set zombie_devgui nc_napp\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Completed:2/Transit:1/None:0\" \"set dg_sq_player " + ip1 + "; set dg_sq_map TRANSIT; set zombie_devgui comp_0\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Completed:2/Transit:1/Maxis:1\" \"set dg_sq_player " + ip1 + "; set dg_sq_map TRANSIT; set zombie_devgui comp_2\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Completed:2/Transit:1/Ricky:2\" \"set dg_sq_player " + ip1 + "; set dg_sq_map TRANSIT; set zombie_devgui comp_1\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Highrise:2/Held\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_HIGHRISE; set zombie_devgui nc_on\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Highrise:2/Not Held\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_HIGHRISE; set zombie_devgui nc_off\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Highrise:2/Applied\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_HIGHRISE; set zombie_devgui nc_app\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Highrise:2/Not Applied\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_HIGHRISE; set zombie_devgui nc_napp\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Completed:2/Highrise:2/None:0\" \"set dg_sq_player " + ip1 + "; set dg_sq_map HIGHRISE; set zombie_devgui comp_0\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Completed:2/Highrise:2/Maxis:1\" \"set dg_sq_player " + ip1 + "; set dg_sq_map HIGHRISE; set zombie_devgui comp_2\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Completed:2/Highrise:2/Ricky:2\" \"set dg_sq_player " + ip1 + "; set dg_sq_map HIGHRISE; set zombie_devgui comp_1\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Buried:3/Held\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_BURIED; set zombie_devgui nc_on\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Buried:3/Not Held\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_BURIED; set zombie_devgui nc_off\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Buried:3/Applied\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_BURIED; set zombie_devgui nc_app\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Navcard:1/Buried:3/NotApplied\" \"set dg_sq_player " + ip1 + "; set dg_sq_map ZM_BURIED; set zombie_devgui nc_napp\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Completed:2/Buried:3/None:0\" \"set dg_sq_player " + ip1 + "; set dg_sq_map BURIED; set zombie_devgui comp_0\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Completed:2/Buried:3/Maxis:1\" \"set dg_sq_player " + ip1 + "; set dg_sq_map BURIED; set zombie_devgui comp_2\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Buried/SQ:1/Players:1/" + players[i].name + "/Completed:2/Buried:3/Ricky:2\" \"set dg_sq_player " + ip1 + "; set dg_sq_map BURIED; set zombie_devgui comp_1\" \\n" ); } #/ } @@ -1027,16 +1024,12 @@ sq_set_stat( sq_player, sq_level, sq_cmd ) #/ } -warp_to_struct_position( str_value, str_key ) +warp_to_struct_position( str_value, str_key = "targetname" ) { - if ( !isdefined( str_key ) ) - str_key = "targetname"; - a_warp_structs = getstructarray( str_value, str_key ); a_players = get_players(); -/# assert( a_warp_structs.size > a_players.size, "warp_to_struct_position found more players than structs for '" + str_key + "' = '" + str_value + "'! Add more structs to fix this" ); -#/ + for ( i = 0; i < a_players.size; i++ ) { a_players[i] setorigin( a_warp_structs[i].origin ); @@ -1370,25 +1363,25 @@ vo_stuhlingerpossessed() switch ( nvo ) { - case "1": + case 1: richtofensay( "vox_zmba_stuhlinger_3rd_possession_1_0", 5, play_in_3d ); break; - case "2": + case 2: richtofensay( "vox_zmba_stuhlinger_3rd_possession_2_0", 7, play_in_3d ); break; - case "3": + case 3: richtofensay( "vox_zmba_stuhlinger_3rd_possession_3_0", 9, play_in_3d ); break; - case "4": + case 4: richtofensay( "vox_zmba_stuhlinger_3rd_possession_4_0", 12, play_in_3d ); break; - case "5": + case 5: richtofensay( "vox_zmba_stuhlinger_3rd_possession_5_0", 7, play_in_3d ); break; - case "6": + case 6: richtofensay( "vox_zmba_stuhlinger_3rd_possession_6_0", 8, play_in_3d ); break; - case "7": + case 7: richtofensay( "vox_zmba_stuhlinger_3rd_possession_7_0", 8, play_in_3d ); break; } diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_bt.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_sq_bt.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_bt.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_sq_bt.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_ctw.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_sq_ctw.gsc similarity index 98% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_ctw.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_sq_ctw.gsc index 2f71873..64b3f65 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_ctw.gsc +++ b/ZM/Maps/Buried/maps/mp/zm_buried_sq_ctw.gsc @@ -378,11 +378,8 @@ debug_origin() #/ } -ctw_find_zombies_for_powerup( v_origin, n_radius, m_ignore ) +ctw_find_zombies_for_powerup( v_origin, n_radius, m_ignore = undefined ) { - if ( !isdefined( m_ignore ) ) - m_ignore = undefined; - a_zombies = getaispeciesarray( level.zombie_team, "zombie" ); n_radius_sq = n_radius * n_radius; a_near_zombies = []; diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_ftl.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_sq_ftl.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_ftl.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_sq_ftl.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_gl.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_sq_gl.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_gl.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_sq_gl.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_ip.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_sq_ip.gsc similarity index 99% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_ip.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_sq_ip.gsc index b41c47c..0a9327d 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_ip.gsc +++ b/ZM/Maps/Buried/maps/mp/zm_buried_sq_ip.gsc @@ -308,6 +308,8 @@ sq_ml_show_lever_debug( v_spot, n_index ) #/ } +#using_animtree("fxanim_props_dlc3"); + sq_ml_spawn_trigger() { v_right = anglestoforward( self.angles ); @@ -320,7 +322,7 @@ sq_ml_spawn_trigger() self.trig triggerignoreteam(); self.trig usetriggerrequirelookat(); self.is_flipped = 0; - self useanimtree( -1 ); + self useanimtree( #animtree ); while ( true ) { diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_ll.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_sq_ll.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_ll.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_sq_ll.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_mta.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_sq_mta.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_mta.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_sq_mta.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_ows.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_sq_ows.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_ows.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_sq_ows.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_tpo.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_sq_tpo.gsc similarity index 98% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_tpo.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_sq_tpo.gsc index 3b6774b..d46c655 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_tpo.gsc +++ b/ZM/Maps/Buried/maps/mp/zm_buried_sq_tpo.gsc @@ -398,9 +398,8 @@ promote_to_corpse_model( str_model ) _pose_corpse() { -/# assert( isdefined( self.script_noteworthy ), "sq_tpo_corpse_spawn_location at " + self.origin + " is missing script_noteworthy! This is required to set deadpose" ); -#/ + switch ( self.script_noteworthy ) { case "deadpose_1": @@ -449,7 +448,7 @@ _pose_corpse() break; } - self.corpse_model useanimtree( -1 ); + self.corpse_model useanimtree( #animtree ); self.corpse_model setanim( anim_pose, 1, 0.05, 1 ); } @@ -498,8 +497,9 @@ unitrigger_think() { self endon( "kill_trigger" ); self thread unitrigger_killed(); + b_trigger_used = 0; - for ( b_trigger_used = 0; !b_trigger_used; b_trigger_used = 1 ) + while ( !b_trigger_used ) { self waittill( "trigger", player ); @@ -527,7 +527,9 @@ unitrigger_think() } self _delete_progress_bar(); - asm_cond( b_progress_bar_done, loc_27AB ); + + if ( b_progress_bar_done ) + b_trigger_used = 1; } if ( b_progress_bar_done ) @@ -561,16 +563,16 @@ item_is_on_corpse() switch ( level.sq_tpo.times_searched ) { - case "0": + case 0: n_chance = 1; break; - case "1": + case 1: n_chance = 15; break; - case "2": + case 2: n_chance = 33; break; - case "3": + case 3: n_chance = 100; break; } diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_ts.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_sq_ts.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_sq_ts.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_sq_ts.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_standard.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_standard.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_standard.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_standard.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_turned_street.gsc b/ZM/Maps/Buried/maps/mp/zm_buried_turned_street.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zm_buried_turned_street.gsc rename to ZM/Maps/Buried/maps/mp/zm_buried_turned_street.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_ai_ghost.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_ai_ghost.gsc similarity index 99% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_ai_ghost.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_ai_ghost.gsc index b151ebb..c099c22 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_ai_ghost.gsc +++ b/ZM/Maps/Buried/maps/mp/zombies/_zm_ai_ghost.gsc @@ -21,9 +21,11 @@ precache() } +#using_animtree("zm_buried_ghost"); + init_animtree() { - scriptmodelsuseanimtree( -1 ); + scriptmodelsuseanimtree( #animtree ); } precache_fx() @@ -178,9 +180,8 @@ init_ghost_zone() else if ( issubstr( str_targetname, "to_maze" ) ) level.ghost_rooms[str_targetname].to_maze = 1; } -/# + assert( isdefined( room.target ), "ghost zone with targetname '" + str_targetname + "' is missing spawner target! This is used to pair zones with spawners." ); -#/ a_ghost_spawn_locations = getstructarray( room.target, "targetname" ); level.ghost_rooms[str_targetname].ghost_spawn_locations = arraycombine( a_ghost_spawn_locations, level.ghost_rooms[str_targetname].ghost_spawn_locations, 0, 0 ); level.ghost_rooms[str_targetname].volumes[level.ghost_rooms[str_targetname].volumes.size] = room; @@ -384,11 +385,9 @@ player_in_ghost_zone_monitor() if ( is_player_in_ghost_rooms( player, current_room.previous_room_names ) ) continue; - - continue; } - - player.current_ghost_room_name = level.ghost_entry_room_to_mansion; + else + player.current_ghost_room_name = level.ghost_entry_room_to_mansion; } } } @@ -1602,7 +1601,7 @@ ghost_print( str ) /# if ( getdvarint( _hash_151B6F17 ) ) { - iprintln( "ghost: " + str + "\n" ); + iprintln( "ghost: " + str + "\\n" ); if ( isdefined( self ) ) { @@ -2320,8 +2319,6 @@ get_next_spot_during_ghost_round_presentation() return level.ghost_front_standing_locations[level.current_ghost_window_index]; } -#using_animtree("zm_buried_ghost"); - spawn_ghost_round_presentation_ghost() { spawn_point = get_next_spot_during_ghost_round_presentation(); @@ -2344,7 +2341,7 @@ spawn_ghost_round_presentation_ghost() } wait 0.5; - ghost useanimtree( -1 ); + ghost useanimtree( #animtree ); ghost setanim( %ai_zombie_ghost_idle ); ghost.script_mover = spawn( "script_origin", ghost.origin ); ghost.script_mover.angles = ghost.angles; diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_ai_ghost_ffotd.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_ai_ghost_ffotd.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_ai_ghost_ffotd.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_ai_ghost_ffotd.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_ai_sloth.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_ai_sloth.gsc similarity index 99% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_ai_sloth.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_ai_sloth.gsc index 300c996..a6b33d3 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_ai_sloth.gsc +++ b/ZM/Maps/Buried/maps/mp/zombies/_zm_ai_sloth.gsc @@ -2796,11 +2796,8 @@ player_can_see_sloth() return false; } -sloth_check_turn( pos, dot_limit ) +sloth_check_turn( pos, dot_limit = -0.707 ) { - if ( !isdefined( dot_limit ) ) - dot_limit = -0.707; - self endon( "death" ); if ( !isdefined( self.locomotion ) ) @@ -3747,11 +3744,8 @@ watch_prompt_reassessment() self.active_reasses_time = 0.3; } -is_facing( facee, dot_limit ) +is_facing( facee, dot_limit = 0.7 ) { - if ( !isdefined( dot_limit ) ) - dot_limit = 0.7; - if ( isplayer( self ) ) orientation = self getplayerangles(); else diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_ai_sloth_buildables.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_ai_sloth_buildables.gsc similarity index 99% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_ai_sloth_buildables.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_ai_sloth_buildables.gsc index 7bb884d..478a8a5 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_ai_sloth_buildables.gsc +++ b/ZM/Maps/Buried/maps/mp/zombies/_zm_ai_sloth_buildables.gsc @@ -313,11 +313,13 @@ fetch_buildable_condition() { self.power_item = item; return true; - continue; } + else + { /# - sloth_print( "turbine not built" ); + sloth_print( "turbine not built" ); #/ + } } } } diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_ai_sloth_crawler.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_ai_sloth_crawler.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_ai_sloth_crawler.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_ai_sloth_crawler.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_ai_sloth_ffotd.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_ai_sloth_ffotd.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_ai_sloth_ffotd.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_ai_sloth_ffotd.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_ai_sloth_magicbox.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_ai_sloth_magicbox.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_ai_sloth_magicbox.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_ai_sloth_magicbox.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_ai_sloth_utility.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_ai_sloth_utility.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_ai_sloth_utility.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_ai_sloth_utility.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_banking.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_banking.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_banking.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_banking.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_buildables_pooled.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_buildables_pooled.gsc similarity index 99% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_buildables_pooled.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_buildables_pooled.gsc index 7a93b3f..4149e9f 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_buildables_pooled.gsc +++ b/ZM/Maps/Buried/maps/mp/zombies/_zm_buildables_pooled.gsc @@ -23,11 +23,7 @@ add_buildable_to_pool( stub, poolname ) if ( !isdefined( level.buildablepools[poolname].buildable_slot ) ) level.buildablepools[poolname].buildable_slot = stub.buildablestruct.buildable_slot; else - { -/# assert( level.buildablepools[poolname].buildable_slot == stub.buildablestruct.buildable_slot ); -#/ - } stub.buildable_pool = level.buildablepools[poolname]; stub.original_prompt_and_visibility_func = stub.prompt_and_visibility_func; @@ -174,9 +170,8 @@ pooledbuildablestub_update_prompt( player, trigger ) } else if ( isdefined( self.bound_to_buildable ) ) { -/# assert( isdefined( level.zombie_buildables[self.equipname].hint ), "Missing buildable hint" ); -#/ + if ( isdefined( level.zombie_buildables[self.equipname].hint ) ) self.hint_string = level.zombie_buildables[self.equipname].hint; else @@ -184,9 +179,8 @@ pooledbuildablestub_update_prompt( player, trigger ) } else { -/# assert( isdefined( level.zombie_buildables[self.equipname].hint ), "Missing buildable hint" ); -#/ + if ( isdefined( level.zombie_buildables[self.equipname].hint ) ) self.hint_string = level.zombie_buildables[self.equipname].hint; else @@ -387,19 +381,19 @@ pooled_buildable_place_think() switch ( self.stub.persistent ) { - case "1": + case 1: self bptrigger_think_persistent( player_built ); break; - case "0": + case 0: self bptrigger_think_one_time( player_built ); break; - case "3": + case 3: self bptrigger_think_unbuild( player_built ); break; - case "2": + case 2: self bptrigger_think_one_use_and_fly( player_built ); break; - case "4": + case 4: self [[ self.stub.custom_completion_callback ]]( player_built ); break; } diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_equip_headchopper.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_equip_headchopper.gsc similarity index 98% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_equip_headchopper.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_equip_headchopper.gsc index 6f3beeb..51f5ec9 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_equip_headchopper.gsc +++ b/ZM/Maps/Buried/maps/mp/zombies/_zm_equip_headchopper.gsc @@ -217,7 +217,7 @@ headchopper_in_range( delta, origin, radius ) headchopper_power_on( origin, radius ) { /# - println( "^1ZM POWER: trap on\n" ); + println( "^1ZM POWER: trap on\\n" ); #/ if ( !isdefined( self.target ) ) return; @@ -229,7 +229,7 @@ headchopper_power_on( origin, radius ) headchopper_power_off( origin, radius ) { /# - println( "^1ZM POWER: trap off\n" ); + println( "^1ZM POWER: trap off\\n" ); #/ if ( !isdefined( self.target ) ) return; @@ -367,13 +367,13 @@ headchopper_zombie_death_remove_chopper( chopper ) } } +#using_animtree("zombie_headchopper"); + init_animtree() { - scriptmodelsuseanimtree( -1 ); + scriptmodelsuseanimtree( #animtree ); } -#using_animtree("zombie_headchopper"); - init_anim_slice_times() { level.headchopper_slice_times = []; @@ -394,7 +394,7 @@ headchopper_animate( weapon, armed ) self endon( "disconnect" ); self endon( "equip_headchopper_zm_taken" ); weapon endon( "death" ); - weapon useanimtree( -1 ); + weapon useanimtree( #animtree ); f_animlength = getanimlength( %o_zmb_chopper_slice_fast ); s_animlength = getanimlength( %o_zmb_chopper_slice_slow ); weapon thread headchopper_audio(); @@ -764,11 +764,8 @@ headchopper_add_chop_ent( ent ) self.chop_targets = add_to_array( self.chop_targets, ent, 0 ); } -headchopper_expired( weapon, usedestroyfx ) +headchopper_expired( weapon, usedestroyfx = 1 ) { - if ( !isdefined( usedestroyfx ) ) - usedestroyfx = 1; - weapon maps\mp\zombies\_zm_equipment::dropped_equipment_destroy( usedestroyfx ); self maps\mp\zombies\_zm_equipment::equipment_release( level.headchopper_name ); self.headchopper_kills = 0; @@ -853,11 +850,8 @@ getheadchopperstouching() return headchoppers; } -getheadchoppersnear( source_origin, max_distance ) +getheadchoppersnear( source_origin, max_distance = 128 ) { - if ( !isdefined( max_distance ) ) - max_distance = 128; - headchoppers = []; players = get_players(); diff --git a/ZM/Maps/Buried/maps/mp/zombies/_zm_equip_springpad.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_equip_springpad.gsc new file mode 100644 index 0000000..1892646 --- /dev/null +++ b/ZM/Maps/Buried/maps/mp/zombies/_zm_equip_springpad.gsc @@ -0,0 +1,632 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_power; +#include maps\mp\zombies\_zm_buildables; + +init( pickupstring, howtostring ) +{ + if ( !maps\mp\zombies\_zm_equipment::is_equipment_included( "equip_springpad_zm" ) ) + return; + + level.springpad_name = "equip_springpad_zm"; + init_animtree(); + maps\mp\zombies\_zm_equipment::register_equipment( "equip_springpad_zm", pickupstring, howtostring, "zom_hud_trample_steam_complete", "springpad", undefined, ::transferspringpad, ::dropspringpad, ::pickupspringpad, ::placespringpad ); + maps\mp\zombies\_zm_equipment::add_placeable_equipment( "equip_springpad_zm", "p6_anim_zm_buildable_view_tramplesteam" ); + level thread onplayerconnect(); + maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "equip_springpad", pickupstring ); + level._effect["springpade_on"] = loadfx( "maps/zombie_highrise/fx_highrise_trmpl_steam_os" ); + + if ( !isdefined( level.springpad_trigger_radius ) ) + level.springpad_trigger_radius = 72; + + thread wait_init_damage(); +} + +wait_init_damage() +{ + while ( !isdefined( level.zombie_vars ) || !isdefined( level.zombie_vars["zombie_health_start"] ) ) + wait 1; + + level.springpad_damage = maps\mp\zombies\_zm::ai_zombie_health( 50 ); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread onplayerspawned(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + self thread setupwatchers(); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread watchspringpaduse(); + } +} + +setupwatchers() +{ + self waittill( "weapon_watchers_created" ); + + watcher = maps\mp\gametypes_zm\_weaponobjects::getweaponobjectwatcher( "equip_springpad" ); + watcher.onspawnretrievetriggers = maps\mp\zombies\_zm_equipment::equipment_onspawnretrievableweaponobject; +} + +watchspringpaduse() +{ + self notify( "watchSpringPadUse" ); + self endon( "watchSpringPadUse" ); + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "equipment_placed", weapon, weapname ); + + if ( weapname == level.springpad_name ) + { + self cleanupoldspringpad(); + self.buildablespringpad = weapon; + self thread startspringpaddeploy( weapon ); + } + } +} + +cleanupoldspringpad() +{ + if ( isdefined( self.buildablespringpad ) ) + { + if ( isdefined( self.buildablespringpad.stub ) ) + { + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub ); + self.buildablespringpad.stub = undefined; + } + + self.buildablespringpad delete(); + self.springpad_kills = undefined; + } + + if ( isdefined( level.springpad_sound_ent ) ) + { + level.springpad_sound_ent delete(); + level.springpad_sound_ent = undefined; + } +} + +watchforcleanup() +{ + self notify( "springpad_cleanup" ); + self endon( "springpad_cleanup" ); + self waittill_any( "death_or_disconnect", "equip_springpad_zm_taken", "equip_springpad_zm_pickup" ); + cleanupoldspringpad(); +} + +placespringpad( origin, angles ) +{ + if ( isdefined( self.turret_placement ) && !self.turret_placement["result"] ) + { + forward = anglestoforward( angles ); + origin -= -24 * forward; + } + + item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", origin, angles, level.springpad_trigger_radius, -24 ); + + if ( isdefined( item ) ) + { + item.springpad_kills = self.springpad_kills; + item.requires_pickup = 1; + item.zombie_attack_callback = ::springpad_fling_attacker; + } + + self.springpad_kills = undefined; + return item; +} + +dropspringpad() +{ + item = self maps\mp\zombies\_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", self.origin, self.angles, level.springpad_trigger_radius, -24 ); + + if ( isdefined( item ) ) + { + item.springpad_kills = self.springpad_kills; + item.requires_pickup = 1; + } + + self.springpad_kills = undefined; + return item; +} + +pickupspringpad( item ) +{ + self.springpad_kills = item.springpad_kills; + item.springpad_kills = undefined; +} + +transferspringpad( fromplayer, toplayer ) +{ + buildablespringpad = toplayer.buildablespringpad; + toarmed = 0; + + if ( isdefined( buildablespringpad ) ) + toarmed = isdefined( buildablespringpad.is_armed ) && buildablespringpad.is_armed; + + springpad_kills = toplayer.springpad_kills; + fromarmed = 0; + + if ( isdefined( fromplayer.buildablespringpad ) ) + fromarmed = isdefined( fromplayer.buildablespringpad.is_armed ) && fromplayer.buildablespringpad.is_armed; + + toplayer.buildablespringpad = fromplayer.buildablespringpad; + toplayer.buildablespringpad.original_owner = toplayer; + toplayer.buildablespringpad.owner = toplayer; + toplayer notify( "equip_springpad_zm_taken" ); + toplayer.springpad_kills = fromplayer.springpad_kills; + toplayer thread startspringpaddeploy( toplayer.buildablespringpad, fromarmed ); + fromplayer.buildablespringpad = buildablespringpad; + fromplayer.springpad_kills = springpad_kills; + fromplayer notify( "equip_springpad_zm_taken" ); + + if ( isdefined( fromplayer.buildablespringpad ) ) + { + fromplayer thread startspringpaddeploy( fromplayer.buildablespringpad, toarmed ); + fromplayer.buildablespringpad.original_owner = fromplayer; + fromplayer.buildablespringpad.owner = fromplayer; + } + else + fromplayer maps\mp\zombies\_zm_equipment::equipment_release( "equip_springpad_zm" ); +} + +springpad_in_range( delta, origin, radius ) +{ + if ( distancesquared( self.target.origin, origin ) < radius * radius ) + return true; + + return false; +} + +springpad_power_on( origin, radius ) +{ +/# + println( "^1ZM POWER: trap on\\n" ); +#/ + if ( !isdefined( self.target ) ) + return; + + self.target.power_on = 1; + self.target.power_on_time = gettime(); +} + +springpad_power_off( origin, radius ) +{ +/# + println( "^1ZM POWER: trap off\\n" ); +#/ + if ( !isdefined( self.target ) ) + return; + + self.target.power_on = 0; +} + +startspringpaddeploy( weapon, armed ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_springpad_zm_taken" ); + self thread watchforcleanup(); + electricradius = 45; + + if ( isdefined( self.springpad_kills ) ) + { + weapon.springpad_kills = self.springpad_kills; + self.springpad_kills = undefined; + } + + if ( !isdefined( weapon.springpad_kills ) ) + weapon.springpad_kills = 0; + + if ( isdefined( weapon ) ) + { +/# + weapon thread debugspringpad( electricradius ); +#/ + if ( isdefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power ) + { + weapon.power_on = 0; + maps\mp\zombies\_zm_power::add_temp_powered_item( ::springpad_power_on, ::springpad_power_off, ::springpad_in_range, maps\mp\zombies\_zm_power::cost_high, 1, weapon.power_on, weapon ); + } + else + weapon.power_on = 1; + + if ( !weapon.power_on ) + self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" ); + + self thread springpadthink( weapon, electricradius, armed ); + + if ( !( isdefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power ) ) + { + + } + + self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( weapon ); + + weapon waittill( "death" ); + + if ( isdefined( level.springpad_sound_ent ) ) + { + level.springpad_sound_ent playsound( "wpn_zmb_electrap_stop" ); + level.springpad_sound_ent delete(); + level.springpad_sound_ent = undefined; + } + + self notify( "springpad_cleanup" ); + } +} + +#using_animtree("zombie_springpad"); + +init_animtree() +{ + scriptmodelsuseanimtree( #animtree ); +} + +springpad_animate( weapon, armed ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_springpad_zm_taken" ); + weapon endon( "death" ); + weapon useanimtree( #animtree ); + f_animlength = getanimlength( %o_zombie_buildable_tramplesteam_reset_zombie ); + r_animlength = getanimlength( %o_zombie_buildable_tramplesteam_reset ); + l_animlength = getanimlength( %o_zombie_buildable_tramplesteam_launch ); + weapon thread springpad_audio(); + prearmed = 0; + + if ( isdefined( armed ) && armed ) + prearmed = 1; + + fast_reset = 0; + + while ( isdefined( weapon ) ) + { + if ( !prearmed ) + { + if ( fast_reset ) + { + weapon setanim( %o_zombie_buildable_tramplesteam_reset_zombie ); + weapon thread playspringpadresetaudio( f_animlength ); + wait( f_animlength ); + } + else + { + weapon setanim( %o_zombie_buildable_tramplesteam_reset ); + weapon thread playspringpadresetaudio( r_animlength ); + wait( r_animlength ); + } + } + else + wait 0.05; + + prearmed = 0; + weapon notify( "armed" ); + fast_reset = 0; + + if ( isdefined( weapon ) ) + { + weapon setanim( %o_zombie_buildable_tramplesteam_compressed_idle ); + + weapon waittill( "fling", fast ); + + fast_reset = fast; + } + + if ( isdefined( weapon ) ) + { + weapon setanim( %o_zombie_buildable_tramplesteam_launch ); + wait( l_animlength ); + } + } +} + +playspringpadresetaudio( time ) +{ + self endon( "springpadAudioCleanup" ); + ent = spawn( "script_origin", self.origin ); + ent playloopsound( "zmb_highrise_launcher_reset_loop" ); + self thread deleteentwhensounddone( time, ent ); + + self waittill( "death" ); + + ent delete(); +} + +deleteentwhensounddone( time, ent ) +{ + self endon( "death" ); + wait( time ); + self notify( "springpadAudioCleanup" ); + ent delete(); +} + +springpad_audio() +{ + loop_ent = spawn( "script_origin", self.origin ); + loop_ent playloopsound( "zmb_highrise_launcher_loop" ); + + self waittill( "death" ); + + loop_ent delete(); +} + +springpad_fx( weapon ) +{ + weapon endon( "death" ); + self endon( "equip_springpad_zm_taken" ); + + while ( isdefined( weapon ) ) + { + playfxontag( level._effect["springpade_on"], weapon, "tag_origin" ); + wait 1; + } +} + +springpadthink( weapon, electricradius, armed ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_springpad_zm_taken" ); + weapon endon( "death" ); + radiussquared = electricradius * electricradius; + trigger = spawn( "trigger_box", weapon getcentroid(), 1, 48, 48, 32 ); + trigger.origin += anglestoforward( flat_angle( weapon.angles ) ) * -15; + trigger.angles = weapon.angles; + trigger enablelinkto(); + trigger linkto( weapon ); + weapon.trigger = trigger; +/# + trigger.extent = ( 24.0, 24.0, 16.0 ); +#/ + weapon thread springpadthinkcleanup( trigger ); + direction_forward = anglestoforward( flat_angle( weapon.angles ) + vectorscale( ( -1, 0, 0 ), 60.0 ) ); + direction_vector = vectorscale( direction_forward, 1024 ); + direction_origin = weapon.origin + direction_vector; + home_angles = weapon.angles; + weapon.is_armed = 0; + self thread springpad_fx( weapon ); + self thread springpad_animate( weapon, armed ); + + weapon waittill( "armed" ); + + weapon.is_armed = 1; + weapon.fling_targets = []; + self thread targeting_thread( weapon, trigger ); + + while ( isdefined( weapon ) ) + { + wait_for_targets( weapon ); + + if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 ) + { + weapon notify( "fling", weapon.zombies_only ); + weapon.is_armed = 0; + weapon.zombies_only = 1; + + foreach ( ent in weapon.fling_targets ) + { + if ( isplayer( ent ) ) + { + ent thread player_fling( weapon.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), weapon.angles, direction_vector, weapon ); + continue; + } + + if ( isdefined( ent ) && isdefined( ent.custom_springpad_fling ) ) + { + if ( !isdefined( self.num_zombies_flung ) ) + self.num_zombies_flung = 0; + + self.num_zombies_flung++; + self notify( "zombie_flung" ); + ent thread [[ ent.custom_springpad_fling ]]( weapon, self ); + continue; + } + + if ( isdefined( ent ) ) + { + if ( !isdefined( self.num_zombies_flung ) ) + self.num_zombies_flung = 0; + + self.num_zombies_flung++; + self notify( "zombie_flung" ); + + if ( !isdefined( weapon.fling_scaler ) ) + weapon.fling_scaler = 1; + + if ( isdefined( weapon.direction_vec_override ) ) + direction_vector = weapon.direction_vec_override; + + ent dodamage( ent.health + 666, ent.origin ); + ent startragdoll(); + ent launchragdoll( direction_vector / 4 * weapon.fling_scaler ); + weapon.springpad_kills++; + } + } + + if ( weapon.springpad_kills >= 28 ) + self thread springpad_expired( weapon ); + + weapon.fling_targets = []; + + weapon waittill( "armed" ); + + weapon.is_armed = 1; + } + else + wait 0.1; + } +} + +wait_for_targets( weapon ) +{ + weapon endon( "hi_priority_target" ); + + while ( isdefined( weapon ) ) + { + if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 ) + { + wait 0.15; + return; + } + + wait 0.05; + } +} + +targeting_thread( weapon, trigger ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_springpad_zm_taken" ); + weapon endon( "death" ); + weapon.zombies_only = 1; + + while ( isdefined( weapon ) ) + { + if ( weapon.is_armed ) + { + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( !isdefined( zombie ) || !isalive( zombie ) ) + continue; + + if ( isdefined( zombie.ignore_spring_pad ) && zombie.ignore_spring_pad ) + continue; + + if ( zombie istouching( trigger ) ) + weapon springpad_add_fling_ent( zombie ); + } + + players = get_players(); + + foreach ( player in players ) + { + if ( is_player_valid( player ) && player istouching( trigger ) ) + { + weapon springpad_add_fling_ent( player ); + weapon.zombies_only = 0; + } + } + + if ( !weapon.zombies_only ) + weapon notify( "hi_priority_target" ); + } + + wait 0.05; + } +} + +springpad_fling_attacker( ent ) +{ + springpad_add_fling_ent( ent ); + + if ( isdefined( level.springpad_attack_delay ) ) + wait( level.springpad_attack_delay ); +} + +springpad_add_fling_ent( ent ) +{ + self.fling_targets = add_to_array( self.fling_targets, ent, 0 ); +} + +springpad_expired( weapon ) +{ + weapon maps\mp\zombies\_zm_equipment::dropped_equipment_destroy( 1 ); + self maps\mp\zombies\_zm_equipment::equipment_release( "equip_springpad_zm" ); + self.springpad_kills = 0; +} + +player_fling( origin, angles, velocity, weapon ) +{ + torigin = ( self.origin[0], self.origin[1], origin[2] ); + aorigin = ( origin + torigin ) * 0.5; + trace = physicstrace( origin, torigin, vectorscale( ( -1, -1, 0 ), 15.0 ), ( 15, 15, 30 ), self ); + + if ( !isdefined( trace ) || !isdefined( trace["fraction"] ) || trace["fraction"] < 1.0 ) + { + if ( !isdefined( weapon.springpad_kills ) ) + weapon.springpad_kills = 0; + + weapon.springpad_kills += 5; + + if ( weapon.springpad_kills >= 28 ) + weapon.owner thread springpad_expired( weapon ); + + return; + } + + self setorigin( aorigin ); + wait_network_frame(); + self setvelocity( velocity ); +} + +springpadthinkcleanup( trigger ) +{ + self waittill( "death" ); + + if ( isdefined( trigger ) ) + trigger delete(); +} + +debugspringpad( radius ) +{ +/# + color_armed = ( 0, 1, 0 ); + color_unarmed = vectorscale( ( 1, 1, 0 ), 0.65 ); + + while ( isdefined( self ) ) + { + if ( getdvarint( _hash_EB512CB7 ) ) + { + if ( isdefined( self.trigger ) ) + { + color = color_unarmed; + + if ( isdefined( self.is_armed ) && self.is_armed ) + color = color_armed; + + vec = self.trigger.extent; + box( self.trigger.origin, vec * -1, vec, self.trigger.angles[1], color, 1, 0, 1 ); + } + + color = ( 0, 1, 0 ); + text = ""; + + if ( isdefined( self.springpad_kills ) ) + text = "" + self.springpad_kills + ""; + else if ( isdefined( self.owner.springpad_kills ) ) + text = "[" + self.owner.springpad_kills + "]"; + + print3d( self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), text, color, 1, 0.5, 1 ); + } + + wait 0.05; + } +#/ +} diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_equip_subwoofer.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_equip_subwoofer.gsc similarity index 99% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_equip_subwoofer.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_equip_subwoofer.gsc index 2b475a7..c909256 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_equip_subwoofer.gsc +++ b/ZM/Maps/Buried/maps/mp/zombies/_zm_equip_subwoofer.gsc @@ -249,7 +249,7 @@ subwoofer_in_range( delta, origin, radius ) subwoofer_power_on( origin, radius ) { /# - println( "^1ZM POWER: trap on\n" ); + println( "^1ZM POWER: trap on\\n" ); #/ if ( !isdefined( self.target ) ) return; @@ -262,7 +262,7 @@ subwoofer_power_on( origin, radius ) subwoofer_power_off( origin, radius ) { /# - println( "^1ZM POWER: trap off\n" ); + println( "^1ZM POWER: trap off\\n" ); #/ if ( !isdefined( self.target ) ) return; diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_game_module_cleansed.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_game_module_cleansed.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_game_module_cleansed.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_game_module_cleansed.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_grief.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_game_module_grief.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_grief.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_game_module_grief.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_meat.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_game_module_meat.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_meat.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_game_module_meat.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_meat_utility.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_game_module_meat_utility.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_meat_utility.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_game_module_meat_utility.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_game_module_turned.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_game_module_turned.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_game_module_turned.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_game_module_turned.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_utility.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_game_module_utility.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_utility.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_game_module_utility.gsc diff --git a/ZM/Maps/Buried/maps/mp/zombies/_zm_melee_weapon.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_melee_weapon.gsc new file mode 100644 index 0000000..4bc83cd --- /dev/null +++ b/ZM/Maps/Buried/maps/mp/zombies/_zm_melee_weapon.gsc @@ -0,0 +1,576 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_audio; + +init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) +{ + precacheitem( weapon_name ); + precacheitem( flourish_weapon_name ); + add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); + melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_weapon_triggers.size; i++ ) + { + knife_model = getent( melee_weapon_triggers[i].target, "targetname" ); + + if ( isdefined( knife_model ) ) + knife_model hide(); + + melee_weapon_triggers[i] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); + + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + melee_weapon_triggers[i] sethintstring( hint_string, cost ); + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + cursor_hint = "HINT_WEAPON"; + cursor_hint_weapon = weapon_name; + melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); + } + else + melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); + } + else + { + weapon_display = get_weapon_display_name( weapon_name ); + hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + melee_weapon_triggers[i] sethintstring( hint_string, weapon_display, cost ); + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + cursor_hint = "HINT_WEAPON"; + cursor_hint_weapon = weapon_name; + melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); + } + else + melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); + } + + melee_weapon_triggers[i] usetriggerrequirelookat(); + } + + melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_weapon_structs.size; i++ ) + prepare_stub( melee_weapon_structs[i].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); + + register_melee_weapon_for_level( weapon_name ); + + if ( !isdefined( level.ballistic_weapon_name ) ) + level.ballistic_weapon_name = []; + + level.ballistic_weapon_name[weapon_name] = ballistic_weapon_name; + + if ( !isdefined( level.ballistic_upgraded_weapon_name ) ) + level.ballistic_upgraded_weapon_name = []; + + level.ballistic_upgraded_weapon_name[weapon_name] = ballistic_upgraded_weapon_name; +/# + if ( !isdefined( level.zombie_weapons[weapon_name] ) ) + { + if ( isdefined( level.devgui_add_weapon ) ) + [[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost ); + } +#/ +} + +prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) +{ + if ( isdefined( stub ) ) + { + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + stub.hint_string = hint_string; + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + stub.cursor_hint = "HINT_WEAPON"; + stub.cursor_hint_weapon = weapon_name; + } + else + { + stub.cursor_hint = "HINT_NOICON"; + stub.cursor_hint_weapon = undefined; + } + } + else + { + stub.hint_parm1 = get_weapon_display_name( weapon_name ); + stub.hint_parm2 = cost; + stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + stub.cursor_hint = "HINT_WEAPON"; + stub.cursor_hint_weapon = weapon_name; + } + else + { + stub.cursor_hint = "HINT_NOICON"; + stub.cursor_hint_weapon = undefined; + } + } + + stub.cost = cost; + stub.weapon_name = weapon_name; + stub.vo_dialog_id = vo_dialog_id; + stub.flourish_weapon_name = flourish_weapon_name; + stub.ballistic_weapon_name = ballistic_weapon_name; + stub.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; + stub.trigger_func = ::melee_weapon_think; + stub.flourish_fn = flourish_fn; + } +} + +add_stub( stub, weapon_name ) +{ + melee_weapon = undefined; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( level._melee_weapons[i].weapon_name == weapon_name ) + { + melee_weapon = level._melee_weapons[i]; + break; + } + } + + if ( isdefined( stub ) && isdefined( melee_weapon ) ) + prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn ); +} + +give_melee_weapon_by_name( weapon_name ) +{ + melee_weapon = undefined; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( level._melee_weapons[i].weapon_name == weapon_name ) + { + melee_weapon = level._melee_weapons[i]; + break; + } + } + + if ( isdefined( melee_weapon ) ) + self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined ); +} + +add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) +{ + melee_weapon = spawnstruct(); + melee_weapon.weapon_name = weapon_name; + melee_weapon.flourish_weapon_name = flourish_weapon_name; + melee_weapon.ballistic_weapon_name = ballistic_weapon_name; + melee_weapon.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; + melee_weapon.cost = cost; + melee_weapon.wallbuy_targetname = wallbuy_targetname; + melee_weapon.hint_string = hint_string; + melee_weapon.vo_dialog_id = vo_dialog_id; + melee_weapon.flourish_fn = flourish_fn; + + if ( !isdefined( level._melee_weapons ) ) + level._melee_weapons = []; + + level._melee_weapons[level._melee_weapons.size] = melee_weapon; +} + +player_can_see_weapon_prompt( weapon_name ) +{ + if ( is_true( level._allow_melee_weapon_switching ) ) + return true; + + if ( isdefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) ) + return false; + + return true; +} + +spectator_respawn_all() +{ + for ( i = 0; i < level._melee_weapons.size; i++ ) + self spectator_respawn( level._melee_weapons[i].wallbuy_targetname, level._melee_weapons[i].weapon_name ); +} + +spectator_respawn( wallbuy_targetname, weapon_name ) +{ + melee_triggers = getentarray( wallbuy_targetname, "targetname" ); + players = get_players(); + + for ( i = 0; i < melee_triggers.size; i++ ) + { + melee_triggers[i] setvisibletoall(); + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + for ( j = 0; j < players.size; j++ ) + { + if ( !players[j] player_can_see_weapon_prompt( weapon_name ) ) + melee_triggers[i] setinvisibletoplayer( players[j] ); + } + } + } +} + +trigger_hide_all() +{ + for ( i = 0; i < level._melee_weapons.size; i++ ) + self trigger_hide( level._melee_weapons[i].wallbuy_targetname ); +} + +trigger_hide( wallbuy_targetname ) +{ + melee_triggers = getentarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_triggers.size; i++ ) + melee_triggers[i] setinvisibletoplayer( self ); +} + +has_any_ballistic_knife() +{ + if ( self hasweapon( "knife_ballistic_zm" ) ) + return true; + + if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) + return true; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) ) + return true; + + if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) + return true; + } + + return false; +} + +has_upgraded_ballistic_knife() +{ + if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) + return true; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) + return true; + } + + return false; +} + +give_ballistic_knife( weapon_string, upgraded ) +{ + current_melee_weapon = self get_player_melee_weapon(); + + if ( isdefined( current_melee_weapon ) ) + { + if ( upgraded && isdefined( level.ballistic_upgraded_weapon_name ) && isdefined( level.ballistic_upgraded_weapon_name[current_melee_weapon] ) ) + weapon_string = level.ballistic_upgraded_weapon_name[current_melee_weapon]; + + if ( !upgraded && isdefined( level.ballistic_weapon_name ) && isdefined( level.ballistic_weapon_name[current_melee_weapon] ) ) + weapon_string = level.ballistic_weapon_name[current_melee_weapon]; + } + + return weapon_string; +} + +change_melee_weapon( weapon_name, current_weapon ) +{ + current_melee_weapon = self get_player_melee_weapon(); + + if ( isdefined( current_melee_weapon ) && current_melee_weapon != weapon_name ) + { + self takeweapon( current_melee_weapon ); + unacquire_weapon_toggle( current_melee_weapon ); + } + + self set_player_melee_weapon( weapon_name ); + had_ballistic = 0; + had_ballistic_upgraded = 0; + ballistic_was_primary = 0; + primaryweapons = self getweaponslistprimaries(); + + for ( i = 0; i < primaryweapons.size; i++ ) + { + primary_weapon = primaryweapons[i]; + + if ( issubstr( primary_weapon, "knife_ballistic_" ) ) + { + had_ballistic = 1; + + if ( primary_weapon == current_weapon ) + ballistic_was_primary = 1; + + self notify( "zmb_lost_knife" ); + self takeweapon( primary_weapon ); + unacquire_weapon_toggle( primary_weapon ); + + if ( issubstr( primary_weapon, "upgraded" ) ) + had_ballistic_upgraded = 1; + } + } + + if ( had_ballistic ) + { + if ( had_ballistic_upgraded ) + { + new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name]; + + if ( ballistic_was_primary ) + current_weapon = new_ballistic; + + self giveweapon( new_ballistic, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) ); + } + else + { + new_ballistic = level.ballistic_weapon_name[weapon_name]; + + if ( ballistic_was_primary ) + current_weapon = new_ballistic; + + self giveweapon( new_ballistic, 0 ); + } + } + + return current_weapon; +} + +melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) +{ + self.first_time_triggered = 0; + + if ( isdefined( self.stub ) ) + { + self endon( "kill_trigger" ); + + if ( isdefined( self.stub.first_time_triggered ) ) + self.first_time_triggered = self.stub.first_time_triggered; + + weapon_name = self.stub.weapon_name; + cost = self.stub.cost; + flourish_fn = self.stub.flourish_fn; + vo_dialog_id = self.stub.vo_dialog_id; + flourish_weapon_name = self.stub.flourish_weapon_name; + ballistic_weapon_name = self.stub.ballistic_weapon_name; + ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name; + players = getplayers(); + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] player_can_see_weapon_prompt( weapon_name ) ) + self setinvisibletoplayer( players[i] ); + } + } + } + + for (;;) + { + self waittill( "trigger", player ); + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + if ( player in_revive_trigger() ) + { + wait 0.1; + continue; + } + + if ( player isthrowinggrenade() ) + { + wait 0.1; + continue; + } + + if ( player.is_drinking > 0 ) + { + wait 0.1; + continue; + } + + if ( player hasweapon( weapon_name ) || player has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( player isswitchingweapons() ) + { + wait 0.1; + continue; + } + + current_weapon = player getcurrentweapon(); + + if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) || player has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission ) + { + wait 0.1; + continue; + } + + player_has_weapon = player hasweapon( weapon_name ); + + if ( !player_has_weapon ) + { + cost = self.stub.cost; + + if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) + cost = int( cost / 2 ); + + if ( player.score >= cost ) + { + if ( self.first_time_triggered == 0 ) + { + model = getent( self.target, "targetname" ); + + if ( isdefined( model ) ) + model thread melee_weapon_show( player ); + else if ( isdefined( self.clientfieldname ) ) + level setclientfield( self.clientfieldname, 1 ); + + self.first_time_triggered = 1; + + if ( isdefined( self.stub ) ) + self.stub.first_time_triggered = 1; + } + + player maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 ); + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" ); + player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self ); + } + else + { + play_sound_on_ent( "no_purchase" ); + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 ); + } + + continue; + } + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + self setinvisibletoplayer( player ); + } +} + +melee_weapon_show( player ) +{ + player_angles = vectortoangles( player.origin - self.origin ); + player_yaw = player_angles[1]; + weapon_yaw = self.angles[1]; + yaw_diff = angleclamp180( player_yaw - weapon_yaw ); + + if ( yaw_diff > 0 ) + yaw = weapon_yaw - 90; + else + yaw = weapon_yaw + 90; + + self.og_origin = self.origin; + self.origin += anglestoforward( ( 0, yaw, 0 ) ) * 8; + wait 0.05; + self show(); + play_sound_at_pos( "weapon_show", self.origin, self ); + time = 1; + self moveto( self.og_origin, time ); +} + +give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger ) +{ + if ( isdefined( flourish_fn ) ) + self thread [[ flourish_fn ]](); + + gun = self do_melee_weapon_flourish_begin( flourish_weapon_name ); + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id ); + self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); + self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + return; + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + if ( isdefined( trigger ) ) + trigger setinvisibletoplayer( self ); + + self trigger_hide_all(); + } +} + +do_melee_weapon_flourish_begin( flourish_weapon_name ) +{ + self increment_is_drinking(); + self disable_player_move_states( 1 ); + gun = self getcurrentweapon(); + weapon = flourish_weapon_name; + self giveweapon( weapon ); + self switchtoweapon( weapon ); + return gun; +} + +do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) +{ + assert( !is_zombie_perk_bottle( gun ) ); + assert( gun != level.revive_tool ); + self enable_player_move_states(); + weapon = flourish_weapon_name; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + { + self takeweapon( weapon ); + self.lastactiveweapon = "none"; + return; + } + + self takeweapon( weapon ); + self giveweapon( weapon_name ); + gun = change_melee_weapon( weapon_name, gun ); + + if ( self hasweapon( "knife_zm" ) ) + self takeweapon( "knife_zm" ); + + if ( self is_multiple_drinking() ) + { + self decrement_is_drinking(); + return; + } + else if ( gun == "knife_zm" ) + { + self switchtoweapon( weapon_name ); + self decrement_is_drinking(); + return; + } + else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) + self switchtoweapon( gun ); + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + } + + self waittill( "weapon_change_complete" ); + + if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) ) + self decrement_is_drinking(); +} diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_perk_divetonuke.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_perk_divetonuke.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_perk_vulture.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_perk_vulture.gsc similarity index 99% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_perk_vulture.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_perk_vulture.gsc index 181fd26..ddf889c 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_perk_vulture.gsc +++ b/ZM/Maps/Buried/maps/mp/zombies/_zm_perk_vulture.gsc @@ -112,9 +112,7 @@ init_vulture() level thread vulture_perk_watch_fire_sale(); level thread vulture_perk_watch_powerup_drops(); level thread vulture_handle_solo_quick_revive(); -/# assert( !isdefined( level.exit_level_func ), "vulture perk is attempting to use level.exit_level_func, but one already exists for this level!" ); -#/ level.exit_level_func = ::vulture_zombies_find_exit_point; level.perk_vulture.invalid_bonus_ammo_weapons = array( "time_bomb_zm", "time_bomb_detonator_zm" ); @@ -210,9 +208,7 @@ vulture_host_migration_func() vulture_perk_add_invalid_bonus_ammo_weapon( str_weapon ) { -/# assert( isdefined( level.perk_vulture ), "vulture_perk_add_invalid_bonus_ammo_weapon() was called before vulture perk was initialized. Make sure this is called after the vulture perk initialization func!" ); -#/ level.perk_vulture.invalid_bonus_ammo_weapons[level.perk_vulture.invalid_bonus_ammo_weapons.size] = str_weapon; } @@ -352,11 +348,8 @@ clean_up_stink( e_temp ) e_temp clear_stink_ent(); } -_delete_vulture_ent( n_delay ) +_delete_vulture_ent( n_delay = 0 ) { - if ( !isdefined( n_delay ) ) - n_delay = 0; - if ( n_delay > 0 ) { self ghost(); @@ -366,11 +359,8 @@ _delete_vulture_ent( n_delay ) self clear_bonus_ent(); } -_vulture_drop_model( str_identifier, str_model, v_model_origin, v_offset ) +_vulture_drop_model( str_identifier, str_model, v_model_origin, v_offset = ( 0, 0, 0 ) ) { - if ( !isdefined( v_offset ) ) - v_offset = ( 0, 0, 0 ); - if ( !isdefined( self.perk_vulture_models ) ) self.perk_vulture_models = []; @@ -709,11 +699,8 @@ toggle_stink_overlay( b_show_overlay ) self thread _ramp_down_stink_overlay(); } -_ramp_up_stink_overlay( b_instant_change ) +_ramp_up_stink_overlay( b_instant_change = 0 ) { - if ( !isdefined( b_instant_change ) ) - b_instant_change = 0; - self notify( "vulture_perk_stink_ramp_up_done" ); self endon( "vulture_perk_stink_ramp_up_done" ); self endon( "death_or_disconnect" ); @@ -753,11 +740,8 @@ _get_disease_meter_fraction() return self.vulture_stink_value / ( pow( 2, 5 ) - 1 ); } -_ramp_down_stink_overlay( b_instant_change ) +_ramp_down_stink_overlay( b_instant_change = 0 ) { - if ( !isdefined( b_instant_change ) ) - b_instant_change = 0; - self notify( "vulture_perk_stink_ramp_down_done" ); self endon( "vulture_perk_stink_ramp_down_done" ); self endon( "death_or_disconnect" ); @@ -833,9 +817,7 @@ give_vulture_bonus( str_bonus ) self give_bonus_stink(); break; default: -/# assert( "invalid bonus string '" + str_bonus + "' used in give_vulture_bonus()!" ); -#/ break; } } @@ -1062,9 +1044,7 @@ vulture_debug_text( str_text ) vulture_clientfield_scriptmover_set( str_field_name ) { -/# assert( isdefined( level.perk_vulture.clientfields.scriptmovers[str_field_name] ), str_field_name + " is not a valid client field for vulture perk!" ); -#/ n_value = self getclientfield( "vulture_perk_scriptmover" ); n_value |= 1 << level.perk_vulture.clientfields.scriptmovers[str_field_name]; self setclientfield( "vulture_perk_scriptmover", n_value ); @@ -1072,9 +1052,7 @@ vulture_clientfield_scriptmover_set( str_field_name ) vulture_clientfield_scriptmover_clear( str_field_name ) { -/# assert( isdefined( level.perk_vulture.clientfields.scriptmovers[str_field_name] ), str_field_name + " is not a valid client field for vulture perk!" ); -#/ n_value = self getclientfield( "vulture_perk_scriptmover" ); n_value &= ~( 1 << level.perk_vulture.clientfields.scriptmovers[str_field_name] ); self setclientfield( "vulture_perk_scriptmover", n_value ); @@ -1082,9 +1060,7 @@ vulture_clientfield_scriptmover_clear( str_field_name ) vulture_clientfield_actor_set( str_field_name ) { -/# assert( isdefined( level.perk_vulture.clientfields.actors[str_field_name] ), str_field_name + " is not a valid field for vulture_clientfield_actor_set!" ); -#/ n_value = getclientfield( "vulture_perk_actor" ); n_value |= 1 << level.perk_vulture.clientfields.actors[str_field_name]; self setclientfield( "vulture_perk_actor", n_value ); @@ -1092,9 +1068,7 @@ vulture_clientfield_actor_set( str_field_name ) vulture_clientfield_actor_clear( str_field_name ) { -/# assert( isdefined( level.perk_vulture.clientfields.actors[str_field_name] ), str_field_name + " is not a valid field for vulture_clientfield_actor_clear!" ); -#/ n_value = getclientfield( "vulture_perk_actor" ); n_value &= ~( 1 << level.perk_vulture.clientfields.actors[str_field_name] ); self setclientfield( "vulture_perk_actor", n_value ); @@ -1102,9 +1076,7 @@ vulture_clientfield_actor_clear( str_field_name ) vulture_clientfield_toplayer_set( str_field_name ) { -/# assert( isdefined( level.perk_vulture.clientfields.toplayer[str_field_name] ), str_field_name + " is not a valid client field for vulture perk!" ); -#/ n_value = self getclientfieldtoplayer( "vulture_perk_toplayer" ); n_value |= 1 << level.perk_vulture.clientfields.toplayer[str_field_name]; self setclientfieldtoplayer( "vulture_perk_toplayer", n_value ); @@ -1112,9 +1084,7 @@ vulture_clientfield_toplayer_set( str_field_name ) vulture_clientfield_toplayer_clear( str_field_name ) { -/# assert( isdefined( level.perk_vulture.clientfields.toplayer[str_field_name] ), str_field_name + " is not a valid client field for vulture perk!" ); -#/ n_value = self getclientfieldtoplayer( "vulture_perk_toplayer" ); n_value &= ~( 1 << level.perk_vulture.clientfields.toplayer[str_field_name] ); self setclientfieldtoplayer( "vulture_perk_toplayer", n_value ); @@ -1252,9 +1222,8 @@ _get_zombie_exit_point() player = get_players()[0]; n_dot_best = 9999999; a_exit_points = self [[ level.perk_vulture.func_zombies_find_valid_exit_locations ]](); -/# assert( a_exit_points.size > 0, "_get_zombie_exit_point() couldn't find any zombie exit points for player at " + player.origin + "! Add more dog_locations!" ); -#/ + for ( i = 0; i < a_exit_points.size; i++ ) { v_to_player = vectornormalize( player.origin - self.origin ); diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_weap_ballistic_knife.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_weap_ballistic_knife.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_weap_bowie.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_weap_bowie.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_weap_bowie.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_weap_bowie.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_claymore.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_weap_claymore.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_claymore.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_weap_claymore.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_weap_slowgun.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_weap_slowgun.gsc similarity index 99% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_weap_slowgun.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_weap_slowgun.gsc index 981445b..6075190 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_weap_slowgun.gsc +++ b/ZM/Maps/Buried/maps/mp/zombies/_zm_weap_slowgun.gsc @@ -306,11 +306,8 @@ zombie_change_rate( time, newrate ) wait( time ); } -zombie_slow_for_time( time, multiplier ) +zombie_slow_for_time( time, multiplier = 2.0 ) { - if ( !isdefined( multiplier ) ) - multiplier = 2.0; - paralyzer_time_per_frame = 0.1 * ( 1.0 + multiplier ); if ( self.paralyzer_slowtime <= time ) diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_weap_time_bomb.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_weap_time_bomb.gsc similarity index 99% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_weap_time_bomb.gsc rename to ZM/Maps/Buried/maps/mp/zombies/_zm_weap_time_bomb.gsc index ab534b6..2406f07 100644 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_weap_time_bomb.gsc +++ b/ZM/Maps/Buried/maps/mp/zombies/_zm_weap_time_bomb.gsc @@ -22,18 +22,11 @@ register_time_bomb_enemy( str_type, func_conditions_for_round, func_save_enemy_data, func_respawn_enemies ) { -/# assert( isdefined( str_type ), "str_type is a required parameter for register_time_bomb_enemy! This identifies the round type" ); -#/ -/# assert( isdefined( func_conditions_for_round ), "func_conditions_for_round is a required parameter for register_time_bomb_enemy! This returns a bool that tells the script what type of round it is." ); -#/ -/# assert( isdefined( func_save_enemy_data ), "func_save_enemy_data is a required parameter for register_time_bomb_enemy! This should store all relevant data about an individual enemy, and requires one input argument." ); -#/ -/# assert( isdefined( func_respawn_enemies ), "func_respawn is a required parameter for register_time_bomb_enemy! This will run a function to respawn the new creature type." ); -#/ + if ( !isdefined( level._time_bomb.enemy_type[str_type] ) ) level._time_bomb.enemy_type[str_type] = spawnstruct(); @@ -44,20 +37,14 @@ register_time_bomb_enemy( str_type, func_conditions_for_round, func_save_enemy_d register_time_bomb_enemy_save_filter( str_type, func_filter_save ) { -/# assert( isdefined( str_type ), "str_type is a required parameter for register_time_bomb_enemy_save_filter! This identifies the round type where the filter function should run." ); -#/ -/# assert( isdefined( level._time_bomb.enemy_type ), str_type + " enemy type is not yet registered with the time bomb system scripts. Register that type before calling register_time_bomb_enemy_save_filter()" ); -#/ level._time_bomb.enemy_type[str_type].enemy_data_save_filter_func = func_filter_save; } register_time_bomb_enemy_default( str_type ) { -/# assert( isdefined( level._time_bomb.enemy_type[str_type] ), str_type + " enemy type is not set up in time bomb enemy array! Initialize this enemy before trying to make it the default." ); -#/ level._time_bomb.enemy_type_default = str_type; } @@ -154,9 +141,7 @@ add_time_bomb_to_mystery_box() player_give_time_bomb() { -/# assert( isplayer( self ), "player_give_time_bomb can only be used on players!" ); -#/ self giveweapon( "time_bomb_zm" ); self swap_weapon_to_time_bomb(); self thread show_time_bomb_hints(); @@ -306,11 +291,8 @@ time_bomb_saves_data( b_show_icon, save_struct ) level thread _time_bomb_saves_data( b_show_icon, save_struct ); } -_time_bomb_saves_data( b_show_icon, save_struct ) +_time_bomb_saves_data( b_show_icon = 1, save_struct ) { - if ( !isdefined( b_show_icon ) ) - b_show_icon = 1; - debug_time_bomb_print( "TIME BOMB SET! Saving..." ); if ( !isdefined( save_struct ) && !time_bomb_save_exists() ) @@ -478,9 +460,8 @@ _time_bomb_saves_enemy_info( s_temp ) s_temp.enemies = []; s_temp.zombie_total = level.zombie_total; a_enemies = time_bomb_get_enemy_array(); -/# assert( isdefined( level._time_bomb.enemy_type[s_temp.round_type].enemy_data_save_func ), "enemy save data func is missing for AI type " + s_temp.round_type ); -#/ + for ( i = 0; i < a_enemies.size; i++ ) { s_data = spawnstruct(); @@ -710,11 +691,8 @@ time_bomb_inventory_slot_think() } } -time_bomb_restores_saved_data( b_show_fx, save_struct ) +time_bomb_restores_saved_data( b_show_fx = 1, save_struct ) { - if ( !isdefined( b_show_fx ) ) - b_show_fx = 1; - level setclientfield( "time_bomb_lua_override", 1 ); debug_time_bomb_print( "GO BACK IN TIME!" ); n_time_start = gettime(); @@ -865,9 +843,7 @@ _time_bomb_restores_enemies( save_struct, n_time_start ) { _time_bomb_resets_all_barrier_attack_spots_taken(); str_type = save_struct.round_type; -/# assert( isdefined( level._time_bomb.enemy_type[str_type] ), str_type + " respawn type isn't set up for time bomb!" ); -#/ _get_wait_time( n_time_start ); timebomb_wait_for_hostmigration(); [[ level._time_bomb.enemy_type[str_type].respawn_func ]]( save_struct ); @@ -895,9 +871,8 @@ _get_time_bomb_zombie_spawn_location() if ( b_is_standard_spawn ) a_valid_spawners[a_valid_spawners.size] = a_spawn_locations[i]; } -/# + assert( a_valid_spawners.size > 0, "_get_time_bomb_zombie_spawn_location found no valid spawn locations!" ); -#/ s_spawn_point = random( a_valid_spawners ); return s_spawn_point; } @@ -1008,9 +983,7 @@ _restore_player_perks_and_weapons( s_temp ) else if ( isdefined( s_temp.is_last_stand ) && s_temp.is_last_stand ) { self.stored_weapon_info = s_temp.stored_weapon_info; -/# assert( isdefined( level.zombie_last_stand_ammo_return ), "time bomb attempting to give player back weapons taken by last stand, but level.zombie_last_stand_ammo_return is undefined!" ); -#/ self [[ level.zombie_last_stand_ammo_return ]](); } else @@ -1145,19 +1118,13 @@ get_player_perk_list() restore_player_to_initial_loadout( s_temp ) { self takeallweapons(); -/# assert( isdefined( level.start_weapon ), "time bomb attempting to restore a spectator, but level.start_weapon isn't defined!" ); -#/ self maps\mp\zombies\_zm_weapons::weapon_give( level.start_weapon ); -/# assert( isdefined( level.zombie_lethal_grenade_player_init ), "time bomb attempting to restore a spectator, but level.zombie_lethal_grenade_player_init isn't defined!" ); -#/ self set_player_lethal_grenade( level.zombie_lethal_grenade_player_init ); self giveweapon( level.zombie_lethal_grenade_player_init ); self setweaponammoclip( level.zombie_lethal_grenade_player_init, 2 ); -/# assert( isdefined( level.zombie_melee_weapon_player_init ), "time bomb attempting to restore a spectator, but level.zombie_melee_weapon_player_init isn't defined!" ); -#/ self giveweapon( level.zombie_melee_weapon_player_init ); a_current_perks = self get_player_perk_list(); @@ -1989,11 +1956,8 @@ time_bomb_post_traverse() self.is_about_to_traverse = undefined; } -set_actor_anim_rate( rate, b_force_update ) +set_actor_anim_rate( rate, b_force_update = 0 ) { - if ( !isdefined( b_force_update ) ) - b_force_update = 0; - self endon( "death" ); level endon( "time_bomb_stop_slow_all_actors" ); diff --git a/ZM/Maps/Buried/maps/mp/zombies/_zm_weapon_locker.gsc b/ZM/Maps/Buried/maps/mp/zombies/_zm_weapon_locker.gsc new file mode 100644 index 0000000..5031b80 --- /dev/null +++ b/ZM/Maps/Buried/maps/mp/zombies/_zm_weapon_locker.gsc @@ -0,0 +1,325 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_audio; + +main() +{ + if ( !isdefined( level.weapon_locker_map ) ) + level.weapon_locker_map = level.script; + + level.weapon_locker_online = sessionmodeisonlinegame(); + weapon_lockers = getstructarray( "weapons_locker", "targetname" ); + array_thread( weapon_lockers, ::triggerweaponslockerwatch ); +} + +wl_has_stored_weapondata() +{ + if ( level.weapon_locker_online ) + return self has_stored_weapondata( level.weapon_locker_map ); + else + return isdefined( self.stored_weapon_data ); +} + +wl_get_stored_weapondata() +{ + if ( level.weapon_locker_online ) + return self get_stored_weapondata( level.weapon_locker_map ); + else + return self.stored_weapon_data; +} + +wl_clear_stored_weapondata() +{ + if ( level.weapon_locker_online ) + self clear_stored_weapondata( level.weapon_locker_map ); + else + self.stored_weapon_data = undefined; +} + +wl_set_stored_weapondata( weapondata ) +{ + if ( level.weapon_locker_online ) + self set_stored_weapondata( weapondata, level.weapon_locker_map ); + else + self.stored_weapon_data = weapondata; +} + +triggerweaponslockerwatch() +{ + unitrigger_stub = spawnstruct(); + unitrigger_stub.origin = self.origin; + + if ( isdefined( self.script_angles ) ) + unitrigger_stub.angles = self.script_angles; + else + unitrigger_stub.angles = self.angles; + + unitrigger_stub.script_angles = unitrigger_stub.angles; + + if ( isdefined( self.script_length ) ) + unitrigger_stub.script_length = self.script_length; + else + unitrigger_stub.script_length = 16; + + if ( isdefined( self.script_width ) ) + unitrigger_stub.script_width = self.script_width; + else + unitrigger_stub.script_width = 32; + + if ( isdefined( self.script_height ) ) + unitrigger_stub.script_height = self.script_height; + else + unitrigger_stub.script_height = 64; + + unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * unitrigger_stub.script_length / 2; + unitrigger_stub.targetname = "weapon_locker"; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.clientfieldname = "weapon_locker"; + maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + unitrigger_stub.prompt_and_visibility_func = ::triggerweaponslockerthinkupdateprompt; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::triggerweaponslockerthink ); +} + +triggerweaponslockerisvalidweapon( weaponname ) +{ + weaponname = get_base_weapon_name( weaponname, 1 ); + + if ( !is_weapon_included( weaponname ) ) + return false; + + if ( is_offhand_weapon( weaponname ) || is_limited_weapon( weaponname ) ) + return false; + + return true; +} + +triggerweaponslockerisvalidweaponpromptupdate( player, weaponname ) +{ + retrievingweapon = player wl_has_stored_weapondata(); + + if ( !retrievingweapon ) + { + weaponname = player get_nonalternate_weapon( weaponname ); + + if ( !triggerweaponslockerisvalidweapon( weaponname ) ) + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); + else + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_STORE" ); + } + else + { + weapondata = player wl_get_stored_weapondata(); + + if ( isdefined( level.remap_weapon_locker_weapons ) ) + weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons ); + + weapontogive = weapondata["name"]; + primaries = player getweaponslistprimaries(); + maxweapons = get_player_weapon_limit( player ); + weaponname = player get_nonalternate_weapon( weaponname ); + + if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == weaponname ) + { + if ( !triggerweaponslockerisvalidweapon( weaponname ) ) + { + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); + return; + } + } + + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" ); + } +} + +triggerweaponslockerthinkupdateprompt( player ) +{ + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + return 1; +} + +triggerweaponslockerthink() +{ + self.parent_player thread triggerweaponslockerweaponchangethink( self ); + + while ( true ) + { + self waittill( "trigger", player ); + + retrievingweapon = player wl_has_stored_weapondata(); + + if ( !retrievingweapon ) + { + curweapon = player getcurrentweapon(); + curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon ); + + if ( !triggerweaponslockerisvalidweapon( curweapon ) ) + continue; + + weapondata = player maps\mp\zombies\_zm_weapons::get_player_weapondata( player ); + player wl_set_stored_weapondata( weapondata ); + assert( curweapon == weapondata["name"], "weapon data does not match" ); + player takeweapon( curweapon ); + primaries = player getweaponslistprimaries(); + + if ( isdefined( primaries[0] ) ) + player switchtoweapon( primaries[0] ); + else + player maps\mp\zombies\_zm_weapons::give_fallback_weapon(); + + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + player playsoundtoplayer( "evt_fridge_locker_close", player ); + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "weapon_storage" ); + } + else + { + curweapon = player getcurrentweapon(); + primaries = player getweaponslistprimaries(); + weapondata = player wl_get_stored_weapondata(); + + if ( isdefined( level.remap_weapon_locker_weapons ) ) + weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons ); + + weapontogive = weapondata["name"]; + + if ( !triggerweaponslockerisvalidweapon( weapontogive ) ) + { + player playlocalsound( level.zmb_laugh_alias ); + player wl_clear_stored_weapondata(); + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + continue; + } + + curweap_base = maps\mp\zombies\_zm_weapons::get_base_weapon_name( curweapon, 1 ); + weap_base = maps\mp\zombies\_zm_weapons::get_base_weapon_name( weapontogive, 1 ); + + if ( player has_weapon_or_upgrade( weap_base ) && weap_base != curweap_base ) + { + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); + wait 3; + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + continue; + } + + maxweapons = get_player_weapon_limit( player ); + + if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == curweapon ) + { + curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon ); + + if ( !triggerweaponslockerisvalidweapon( curweapon ) ) + { + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); + wait 3; + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + continue; + } + + curweapondata = player maps\mp\zombies\_zm_weapons::get_player_weapondata( player ); + player takeweapon( curweapondata["name"] ); + player maps\mp\zombies\_zm_weapons::weapondata_give( weapondata ); + player wl_clear_stored_weapondata(); + player wl_set_stored_weapondata( curweapondata ); + player switchtoweapon( weapondata["name"] ); + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + } + else + { + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "wall_withdrawl" ); + player wl_clear_stored_weapondata(); + player maps\mp\zombies\_zm_weapons::weapondata_give( weapondata ); + player switchtoweapon( weapondata["name"] ); + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + } + + level notify( "weapon_locker_grab" ); + player playsoundtoplayer( "evt_fridge_locker_open", player ); + } + + wait 0.5; + } +} + +triggerweaponslockerweaponchangethink( trigger ) +{ + self endon( "disconnect" ); + self endon( "death" ); + trigger endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "weapon_change", newweapon ); + + trigger triggerweaponslockerisvalidweaponpromptupdate( self, newweapon ); + } +} + +add_weapon_locker_mapping( fromweapon, toweapon ) +{ + if ( !isdefined( level.remap_weapon_locker_weapons ) ) + level.remap_weapon_locker_weapons = []; + + level.remap_weapon_locker_weapons[fromweapon] = toweapon; +} + +remap_weapon( weapondata, maptable ) +{ + name = get_base_name( weapondata["name"] ); + att = get_attachment_name( weapondata["name"] ); + + if ( isdefined( maptable[name] ) ) + { + weapondata["name"] = maptable[name]; + name = weapondata["name"]; + + if ( is_weapon_upgraded( name ) ) + { + if ( isdefined( att ) && weapon_supports_attachments( name ) ) + { + base = get_base_weapon_name( name, 1 ); + + if ( !weapon_supports_this_attachment( base, att ) ) + att = random_attachment( base ); + + weapondata["name"] = weapondata["name"] + "+" + att; + } + else if ( weapon_supports_default_attachment( name ) ) + { + att = default_attachment( name ); + weapondata["name"] = weapondata["name"] + "+" + att; + } + } + } + else + return weapondata; + + name = weapondata["name"]; + dw_name = weapondualwieldweaponname( name ); + alt_name = weaponaltweaponname( name ); + + if ( name != "none" ) + { + weapondata["clip"] = int( min( weapondata["clip"], weaponclipsize( name ) ) ); + weapondata["stock"] = int( min( weapondata["stock"], weaponmaxammo( name ) ) ); + } + + if ( dw_name != "none" ) + weapondata["lh_clip"] = int( min( weapondata["lh_clip"], weaponclipsize( dw_name ) ) ); + + if ( alt_name != "none" ) + { + weapondata["alt_clip"] = int( min( weapondata["alt_clip"], weaponclipsize( alt_name ) ) ); + weapondata["alt_stock"] = int( min( weapondata["alt_stock"], weaponmaxammo( alt_name ) ) ); + } + + weapondata["dw_name"] = dw_name; + weapondata["alt_name"] = alt_name; + return weapondata; +} diff --git a/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_civilian_hat1_als.gsc b/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_civilian_hat1_als.gsc new file mode 100644 index 0000000..50e54a6 --- /dev/null +++ b/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_civilian_hat1_als.gsc @@ -0,0 +1,11 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + a[0] = "c_zom_zombie_buried_civilian_nohat"; + a[1] = "c_zom_zombie_buried_male_hair1"; + a[2] = "c_zom_zombie_buried_male_hair2"; + a[3] = "c_zom_zombie_buried_male_hair3"; + return a; +} diff --git a/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_civilian_hat2_als.gsc b/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_civilian_hat2_als.gsc new file mode 100644 index 0000000..50e54a6 --- /dev/null +++ b/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_civilian_hat2_als.gsc @@ -0,0 +1,11 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + a[0] = "c_zom_zombie_buried_civilian_nohat"; + a[1] = "c_zom_zombie_buried_male_hair1"; + a[2] = "c_zom_zombie_buried_male_hair2"; + a[3] = "c_zom_zombie_buried_male_hair3"; + return a; +} diff --git a/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_civilian_hat3_als.gsc b/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_civilian_hat3_als.gsc new file mode 100644 index 0000000..50e54a6 --- /dev/null +++ b/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_civilian_hat3_als.gsc @@ -0,0 +1,11 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + a[0] = "c_zom_zombie_buried_civilian_nohat"; + a[1] = "c_zom_zombie_buried_male_hair1"; + a[2] = "c_zom_zombie_buried_male_hair2"; + a[3] = "c_zom_zombie_buried_male_hair3"; + return a; +} diff --git a/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_civilian_hat4_als.gsc b/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_civilian_hat4_als.gsc new file mode 100644 index 0000000..50e54a6 --- /dev/null +++ b/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_civilian_hat4_als.gsc @@ -0,0 +1,11 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + a[0] = "c_zom_zombie_buried_civilian_nohat"; + a[1] = "c_zom_zombie_buried_male_hair1"; + a[2] = "c_zom_zombie_buried_male_hair2"; + a[3] = "c_zom_zombie_buried_male_hair3"; + return a; +} diff --git a/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_civilian_hat5_als.gsc b/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_civilian_hat5_als.gsc new file mode 100644 index 0000000..50e54a6 --- /dev/null +++ b/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_civilian_hat5_als.gsc @@ -0,0 +1,11 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + a[0] = "c_zom_zombie_buried_civilian_nohat"; + a[1] = "c_zom_zombie_buried_male_hair1"; + a[2] = "c_zom_zombie_buried_male_hair2"; + a[3] = "c_zom_zombie_buried_male_hair3"; + return a; +} diff --git a/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_female_heads_als.gsc b/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_female_heads_als.gsc new file mode 100644 index 0000000..98ec85f --- /dev/null +++ b/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_female_heads_als.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + a[0] = "c_zom_zombie_buried_sgirl_head1"; + a[1] = "c_zom_zombie_buried_sgirl_head2"; + return a; +} diff --git a/Zombie Maps/Buried/zm_buried_patch/xmodelalias/c_zom_zombie_buried_female_heads_m_als.gsc b/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_female_heads_m_als.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/xmodelalias/c_zom_zombie_buried_female_heads_m_als.gsc rename to ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_female_heads_m_als.gsc diff --git a/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_male_heads_als.gsc b/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_male_heads_als.gsc new file mode 100644 index 0000000..54d5c77 --- /dev/null +++ b/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_male_heads_als.gsc @@ -0,0 +1,10 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + a[0] = "c_zom_zombie_buried_male_head1"; + a[1] = "c_zom_zombie_buried_male_head2"; + a[2] = "c_zom_zombie_buried_male_head3"; + return a; +} diff --git a/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_miner_hats_als.gsc b/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_miner_hats_als.gsc new file mode 100644 index 0000000..ea9ae1e --- /dev/null +++ b/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_miner_hats_als.gsc @@ -0,0 +1,11 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + a[0] = "c_zom_zombie_buried_miner_nohat"; + a[1] = "c_zom_zombie_buried_male_hair1"; + a[2] = "c_zom_zombie_buried_male_hair2"; + a[3] = "c_zom_zombie_buried_male_hair3"; + return a; +} diff --git a/Zombie Maps/Buried/zm_buried_patch/xmodelalias/c_zom_zombie_buried_sgirl_body_als.gsc b/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_sgirl_body_als.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/xmodelalias/c_zom_zombie_buried_sgirl_body_als.gsc rename to ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_sgirl_body_als.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/xmodelalias/c_zom_zombie_buried_sgirl_hair_als.gsc b/ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_sgirl_hair_als.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/xmodelalias/c_zom_zombie_buried_sgirl_hair_als.gsc rename to ZM/Maps/Buried/xmodelalias/c_zom_zombie_buried_sgirl_hair_als.gsc diff --git a/ZM/Maps/Die Rise/aitype/zm_ally_farmgirl.gsc b/ZM/Maps/Die Rise/aitype/zm_ally_farmgirl.gsc new file mode 100644 index 0000000..c4c6e90 --- /dev/null +++ b/ZM/Maps/Die Rise/aitype/zm_ally_farmgirl.gsc @@ -0,0 +1,56 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\c_zom_ally_farmgirl; + +#using_animtree("zm_ally"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %pb_laststand_idle; + dummy_anim_ref = %pb_stand_alert; + dummy_anim_ref = %pb_crouch_alert; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_ally_basic.asd"; + self.animtree = "zm_ally.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "allies"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\c_zom_ally_farmgirl::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "allies" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_ally_basic" ); + character\c_zom_ally_farmgirl::precache(); +} diff --git a/ZM/Maps/Die Rise/aitype/zm_highrise_basic_01.gsc b/ZM/Maps/Die Rise/aitype/zm_highrise_basic_01.gsc new file mode 100644 index 0000000..ccbee0f --- /dev/null +++ b/ZM/Maps/Die Rise/aitype/zm_highrise_basic_01.gsc @@ -0,0 +1,439 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_zombie_civ_shorts; +#include character\c_zom_zombie_civ_shorts2; +#include character\c_zom_zombie_civ_shorts3; +#include character\c_zom_zombie_civ_shorts4; +#include character\c_zom_zombie_civ_shorts5; +#include character\c_zom_zombie_civ_shorts6; + +#using_animtree("zm_highrise_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_slipslide_collapse; + dummy_anim_ref = %ai_zombie_walk_slipslide; + dummy_anim_ref = %ai_zombie_walk_slipslide_a; + dummy_anim_ref = %ai_zombie_run_slipslide; + dummy_anim_ref = %ai_zombie_run_slipslide_a; + dummy_anim_ref = %ai_zombie_sprint_slipslide; + dummy_anim_ref = %ai_zombie_sprint_slipslide_a; + dummy_anim_ref = %ai_zombie_stand_slipslide_recover; + dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; + dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; + dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; + dummy_anim_ref = %ai_zombie_jump_down_40; + dummy_anim_ref = %ai_zombie_crawl_jump_down_40; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_120; + dummy_anim_ref = %ai_zombie_crawl_jump_down_120; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_176; + dummy_anim_ref = %ai_zombie_crawl_jump_down_176; + dummy_anim_ref = %ai_zombie_jump_down_184; + dummy_anim_ref = %ai_zombie_crawl_jump_down_184; + dummy_anim_ref = %ai_zombie_jump_down_190; + dummy_anim_ref = %ai_zombie_crawl_jump_down_189; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_175; + dummy_anim_ref = %ai_zombie_crawl_jump_up_175; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_crawl_traverse_48; + dummy_anim_ref = %ai_zombie_traverse_48; + dummy_anim_ref = %ai_zombie_traverse_dierise_escape_corridor; + dummy_anim_ref = %ai_zombie_traverse_round_counter_to_stools; + dummy_anim_ref = %ai_zombie_traverse_round_counter_from_stools; + dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_alt_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_alt_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_gap; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_gap; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_antenna; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_antenna; + dummy_anim_ref = %ai_zombie_jump_up_sewing; + dummy_anim_ref = %ai_zombie_crawl_jump_up_sewing; + dummy_anim_ref = %ai_zombie_traverse_dierise_1_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_2_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_2_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_3_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_3_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_4_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_4_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_5_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_5_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_6_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_6_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_7_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_7_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap1_from_antenna; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap4a_slide_down_beam; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap4b_from_roof; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap6_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap6_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap7_from_top_ledge; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap7_to_top_ledge; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap8_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap15a_from_girder; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap15b_from_girder; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap15f_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap15g_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap16a_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap16a_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap16b_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap16b_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap17a_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap17c_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap17c_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap18_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_jump_down_to_elevator_roof; + dummy_anim_ref = %ai_zombie_crawl_jump_up_from_elevator_roof; + dummy_anim_ref = %ai_zombie_jump_down_to_elevator_roof; + dummy_anim_ref = %ai_zombie_jump_up_from_elevator_roof; + dummy_anim_ref = %ai_zombie_climb_elevator; + dummy_anim_ref = %ai_zombie_crawl_traverse_round_counter_to_stools; + dummy_anim_ref = %ai_zombie_crawl_traverse_round_counter_from_stools; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_alt_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_alt_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_1_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_2_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_2_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_3_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_3_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_4_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_4_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_5_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_5_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_6_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_6_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_7_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_7_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap1_from_antenna; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap4a_slide_down_beam; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap4b_from_roof; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap6_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap6_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap7_from_top_ledge; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap7_to_top_ledge; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap8_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15a_from_girder; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15b_from_girder; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15f_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15f_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15g_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15g_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16a_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16a_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16b_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16b_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap17a_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap17a_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap17c_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap18_high_to_low; + dummy_anim_ref = %ai_zombie_riser_elevator_from_floor; + dummy_anim_ref = %ai_zombie_riser_elevator_from_ceiling; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_highrise_basic.asd"; + self.animtree = "zm_highrise_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 6 ); + + switch ( randchar ) + { + case 0: + character\c_zom_zombie_civ_shorts::main(); + break; + case 1: + character\c_zom_zombie_civ_shorts2::main(); + break; + case 2: + character\c_zom_zombie_civ_shorts3::main(); + break; + case 3: + character\c_zom_zombie_civ_shorts4::main(); + break; + case 4: + character\c_zom_zombie_civ_shorts5::main(); + break; + case 5: + character\c_zom_zombie_civ_shorts6::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_highrise_basic" ); + character\c_zom_zombie_civ_shorts::precache(); + character\c_zom_zombie_civ_shorts2::precache(); + character\c_zom_zombie_civ_shorts3::precache(); + character\c_zom_zombie_civ_shorts4::precache(); + character\c_zom_zombie_civ_shorts5::precache(); + character\c_zom_zombie_civ_shorts6::precache(); +} diff --git a/ZM/Maps/Die Rise/aitype/zm_highrise_basic_02.gsc b/ZM/Maps/Die Rise/aitype/zm_highrise_basic_02.gsc new file mode 100644 index 0000000..318e2c1 --- /dev/null +++ b/ZM/Maps/Die Rise/aitype/zm_highrise_basic_02.gsc @@ -0,0 +1,405 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\c_zom_zombie_scientist; + +#using_animtree("zm_highrise_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_slipslide_collapse; + dummy_anim_ref = %ai_zombie_walk_slipslide; + dummy_anim_ref = %ai_zombie_walk_slipslide_a; + dummy_anim_ref = %ai_zombie_run_slipslide; + dummy_anim_ref = %ai_zombie_run_slipslide_a; + dummy_anim_ref = %ai_zombie_sprint_slipslide; + dummy_anim_ref = %ai_zombie_sprint_slipslide_a; + dummy_anim_ref = %ai_zombie_stand_slipslide_recover; + dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; + dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; + dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; + dummy_anim_ref = %ai_zombie_jump_down_40; + dummy_anim_ref = %ai_zombie_crawl_jump_down_40; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_120; + dummy_anim_ref = %ai_zombie_crawl_jump_down_120; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_176; + dummy_anim_ref = %ai_zombie_crawl_jump_down_176; + dummy_anim_ref = %ai_zombie_jump_down_184; + dummy_anim_ref = %ai_zombie_crawl_jump_down_184; + dummy_anim_ref = %ai_zombie_jump_down_190; + dummy_anim_ref = %ai_zombie_crawl_jump_down_189; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_175; + dummy_anim_ref = %ai_zombie_crawl_jump_up_175; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_crawl_traverse_48; + dummy_anim_ref = %ai_zombie_traverse_48; + dummy_anim_ref = %ai_zombie_traverse_dierise_escape_corridor; + dummy_anim_ref = %ai_zombie_traverse_round_counter_to_stools; + dummy_anim_ref = %ai_zombie_traverse_round_counter_from_stools; + dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_alt_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_alt_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_gap; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_gap; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_antenna; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_antenna; + dummy_anim_ref = %ai_zombie_jump_up_sewing; + dummy_anim_ref = %ai_zombie_crawl_jump_up_sewing; + dummy_anim_ref = %ai_zombie_traverse_dierise_1_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_2_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_2_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_3_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_3_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_4_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_4_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_5_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_5_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_6_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_6_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_7_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_7_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap1_from_antenna; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap4a_slide_down_beam; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap4b_from_roof; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap6_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap6_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap7_from_top_ledge; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap7_to_top_ledge; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap8_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap15a_from_girder; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap15b_from_girder; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap15f_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap15g_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap16a_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap16a_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap16b_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap16b_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap17a_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap17c_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap17c_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap18_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_jump_down_to_elevator_roof; + dummy_anim_ref = %ai_zombie_crawl_jump_up_from_elevator_roof; + dummy_anim_ref = %ai_zombie_jump_down_to_elevator_roof; + dummy_anim_ref = %ai_zombie_jump_up_from_elevator_roof; + dummy_anim_ref = %ai_zombie_climb_elevator; + dummy_anim_ref = %ai_zombie_crawl_traverse_round_counter_to_stools; + dummy_anim_ref = %ai_zombie_crawl_traverse_round_counter_from_stools; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_alt_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_alt_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_1_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_2_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_2_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_3_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_3_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_4_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_4_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_5_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_5_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_6_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_6_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_7_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_7_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap1_from_antenna; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap4a_slide_down_beam; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap4b_from_roof; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap6_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap6_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap7_from_top_ledge; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap7_to_top_ledge; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap8_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15a_from_girder; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15b_from_girder; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15f_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15f_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15g_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15g_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16a_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16a_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16b_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16b_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap17a_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap17a_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap17c_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap18_high_to_low; + dummy_anim_ref = %ai_zombie_riser_elevator_from_floor; + dummy_anim_ref = %ai_zombie_riser_elevator_from_ceiling; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_highrise_basic.asd"; + self.animtree = "zm_highrise_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\c_zom_zombie_scientist::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_highrise_basic" ); + character\c_zom_zombie_scientist::precache(); +} diff --git a/ZM/Maps/Die Rise/aitype/zm_highrise_basic_03.gsc b/ZM/Maps/Die Rise/aitype/zm_highrise_basic_03.gsc new file mode 100644 index 0000000..57c0a52 --- /dev/null +++ b/ZM/Maps/Die Rise/aitype/zm_highrise_basic_03.gsc @@ -0,0 +1,405 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\c_zom_zombie_soldier; + +#using_animtree("zm_highrise_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_slipslide_collapse; + dummy_anim_ref = %ai_zombie_walk_slipslide; + dummy_anim_ref = %ai_zombie_walk_slipslide_a; + dummy_anim_ref = %ai_zombie_run_slipslide; + dummy_anim_ref = %ai_zombie_run_slipslide_a; + dummy_anim_ref = %ai_zombie_sprint_slipslide; + dummy_anim_ref = %ai_zombie_sprint_slipslide_a; + dummy_anim_ref = %ai_zombie_stand_slipslide_recover; + dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; + dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; + dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; + dummy_anim_ref = %ai_zombie_jump_down_40; + dummy_anim_ref = %ai_zombie_crawl_jump_down_40; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_120; + dummy_anim_ref = %ai_zombie_crawl_jump_down_120; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_176; + dummy_anim_ref = %ai_zombie_crawl_jump_down_176; + dummy_anim_ref = %ai_zombie_jump_down_184; + dummy_anim_ref = %ai_zombie_crawl_jump_down_184; + dummy_anim_ref = %ai_zombie_jump_down_190; + dummy_anim_ref = %ai_zombie_crawl_jump_down_189; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_175; + dummy_anim_ref = %ai_zombie_crawl_jump_up_175; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_crawl_traverse_48; + dummy_anim_ref = %ai_zombie_traverse_48; + dummy_anim_ref = %ai_zombie_traverse_dierise_escape_corridor; + dummy_anim_ref = %ai_zombie_traverse_round_counter_to_stools; + dummy_anim_ref = %ai_zombie_traverse_round_counter_from_stools; + dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_alt_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_alt_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_gap; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_gap; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_antenna; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_antenna; + dummy_anim_ref = %ai_zombie_jump_up_sewing; + dummy_anim_ref = %ai_zombie_crawl_jump_up_sewing; + dummy_anim_ref = %ai_zombie_traverse_dierise_1_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_2_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_2_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_3_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_3_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_4_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_4_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_5_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_5_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_6_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_6_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_7_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_7_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap1_from_antenna; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap4a_slide_down_beam; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap4b_from_roof; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap6_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap6_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap7_from_top_ledge; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap7_to_top_ledge; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap8_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap15a_from_girder; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap15b_from_girder; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap15f_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap15g_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap16a_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap16a_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap16b_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap16b_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap17a_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap17c_high_to_low; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap17c_low_to_high; + dummy_anim_ref = %ai_zombie_traverse_dierise_gap18_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_jump_down_to_elevator_roof; + dummy_anim_ref = %ai_zombie_crawl_jump_up_from_elevator_roof; + dummy_anim_ref = %ai_zombie_jump_down_to_elevator_roof; + dummy_anim_ref = %ai_zombie_jump_up_from_elevator_roof; + dummy_anim_ref = %ai_zombie_climb_elevator; + dummy_anim_ref = %ai_zombie_crawl_traverse_round_counter_to_stools; + dummy_anim_ref = %ai_zombie_crawl_traverse_round_counter_from_stools; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_alt_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_alt_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_1_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_2_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_2_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_3_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_3_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_4_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_4_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_5_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_5_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_6_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_6_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_7_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_7_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap1_from_antenna; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap4a_slide_down_beam; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap4b_from_roof; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap6_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap6_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap7_from_top_ledge; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap7_to_top_ledge; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap8_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15a_from_girder; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15b_from_girder; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15f_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15f_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15g_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15g_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16a_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16a_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16b_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16b_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap17a_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap17a_low_to_high; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap17c_high_to_low; + dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap18_high_to_low; + dummy_anim_ref = %ai_zombie_riser_elevator_from_floor; + dummy_anim_ref = %ai_zombie_riser_elevator_from_ceiling; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_highrise_basic.asd"; + self.animtree = "zm_highrise_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 210; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\c_zom_zombie_soldier::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_highrise_basic" ); + character\c_zom_zombie_soldier::precache(); +} diff --git a/ZM/Maps/Die Rise/aitype/zm_highrise_leaper.gsc b/ZM/Maps/Die Rise/aitype/zm_highrise_leaper.gsc new file mode 100644 index 0000000..c6702b6 --- /dev/null +++ b/ZM/Maps/Die Rise/aitype/zm_highrise_leaper.gsc @@ -0,0 +1,202 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\c_zom_leaper; + +#using_animtree("zm_highrise_leaper"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_quad_idle; + dummy_anim_ref = %ai_zombie_quad_idle_2; + dummy_anim_ref = %ai_zombie_leaper_death_v1; + dummy_anim_ref = %ai_zombie_leaper_death_v2; + dummy_anim_ref = %ai_zombie_leaper_run_f; + dummy_anim_ref = %ai_zombie_leaper_run_bounce; + dummy_anim_ref = %ai_zombie_quad_crawl; + dummy_anim_ref = %ai_zombie_quad_crawl_2; + dummy_anim_ref = %ai_zombie_quad_crawl_3; + dummy_anim_ref = %ai_zombie_quad_crawl_run; + dummy_anim_ref = %ai_zombie_quad_crawl_run_2; + dummy_anim_ref = %ai_zombie_quad_crawl_run_3; + dummy_anim_ref = %ai_zombie_quad_crawl_run_4; + dummy_anim_ref = %ai_zombie_quad_crawl_run_5; + dummy_anim_ref = %ai_zombie_quad_crawl_sprint; + dummy_anim_ref = %ai_zombie_quad_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_quad_crawl_sprint_3; + dummy_anim_ref = %ai_zombie_quad_crawl_01; + dummy_anim_ref = %ai_zombie_quad_crawl_02; + dummy_anim_ref = %ai_zombie_quad_crawl_03; + dummy_anim_ref = %ai_zombie_leaper_attack_v1; + dummy_anim_ref = %ai_zombie_leaper_attack_v2; + dummy_anim_ref = %ai_zombie_leaper_wall_traverse_l; + dummy_anim_ref = %ai_zombie_leaper_wall_traverse_r; + dummy_anim_ref = %ai_zombie_leaper_ceiling_traverse; + dummy_anim_ref = %ai_leaper_traverse_dierise_barrier; + dummy_anim_ref = %ai_zombie_jump_down_40; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_190; + dummy_anim_ref = %ai_zombie_jump_down_184; + dummy_anim_ref = %ai_zombie_jump_down_176; + dummy_anim_ref = %ai_leaper_jump_down_120; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_leaper_jump_up_175; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_traverse_48; + dummy_anim_ref = %ai_leaper_jump_up_sewing; + dummy_anim_ref = %ai_leaper_dierise_ventfall_176; + dummy_anim_ref = %ai_leaper_crawl_traverse_round_counter_from_stools; + dummy_anim_ref = %ai_leaper_crawl_traverse_round_counter_to_stools; + dummy_anim_ref = %ai_leaper_traverse_dierise_chrest_interior_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_chrest_interior_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_1_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_1_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_2_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_2_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_3_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_3_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_4_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_4_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_chrest_elevator_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_5_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_6_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_6_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_7_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_7_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap1_to_antenna; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap1_from_antenna; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap2_from_roof; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap2_to_roof; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap4b_to_roof; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap4b_from_roof; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap5a_from_conference; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap5a_to_conference; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap5b_from_conference; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap5b_to_conference; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap6_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap6_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap7_from_top_ledge; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap7_to_top_ledge; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap8_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap8_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap9_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap9_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap10_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap10_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap14a_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap14b_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap14c_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap14c_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap14d_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap14d_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap14e_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap14e_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap14f_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap14f_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap14g_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap14g_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap14h_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap14h_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap15a_from_girder; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap15b_from_girder; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap15f_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap15f_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap15g_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap15g_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap16a_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap16a_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap16b_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap16b_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap17a_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap17a_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap17c_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap17c_low_to_high; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap18_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap19_from_railing; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap19_to_railing; + dummy_anim_ref = %ai_zombie_leaper_wall_traverse_l_large; + dummy_anim_ref = %ai_zombie_leaper_wall_traverse_r_large; + dummy_anim_ref = %ai_leaper_traverse_dierise_gap15c_low_to_high; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_190_dlc1; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_antenna; + dummy_anim_ref = %ai_leaper_traverse_dierise_chrest_gap; + dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_green_ext_a; + dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_green_ext_b; + dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_green_ext_c; + dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_green_ext_d; + dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_green_ext_e; + dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_green_ext_f; + dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_bluegreen_antenna_to_escalator; + dummy_anim_ref = %ai_leaper_traverse_shoestore; + dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_orange_ext_a_right; + dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_orange_ext_a_left; + dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_orange_ext_b_left; + dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_orange_ext_b_right; + dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_orange_ext_c; + dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_blue_ext_a; + dummy_anim_ref = %ai_leaper_traverse_dierise_shaft1_to_bottom; + dummy_anim_ref = %ai_leaper_traverse_dierise_shaft1_from_bottom; + dummy_anim_ref = %ai_leaper_traverse_dierise_shaft2_to_bottom; + dummy_anim_ref = %ai_leaper_traverse_dierise_shaft2_from_bottom; + dummy_anim_ref = %ai_leaper_traverse_dierise_restaurant_in; + dummy_anim_ref = %ai_leaper_traverse_dierise_ac_unit; + dummy_anim_ref = %ai_leaper_traverse_dierise_chrest_interior_alt_high_to_low; + dummy_anim_ref = %ai_leaper_traverse_dierise_chrest_interior_alt_low_to_high; + dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_green_ext_g; + dummy_anim_ref = %ai_leaper_jump_down_to_elevator_roof; + dummy_anim_ref = %ai_leaper_jump_up_from_elevator_roof; + dummy_anim_ref = %ai_zombie_leaper_climb_elevator; + dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; + dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; + dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; + dummy_anim_ref = %ai_zombie_leaper_elevator_from_ceiling; + dummy_anim_ref = %ai_zombie_leaper_elevator_from_floor; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_highrise_leaper.asd"; + self.animtree = "zm_highrise_leaper.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 18; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = "zm_leaper_footstepfxtable"; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 150; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\c_zom_leaper::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_highrise_leaper" ); + character\c_zom_leaper::precache(); +} diff --git a/ZM/Maps/Die Rise/character/c_highrise_player_engineer.gsc b/ZM/Maps/Die Rise/character/c_highrise_player_engineer.gsc new file mode 100644 index 0000000..da7c920 --- /dev/null +++ b/ZM/Maps/Die Rise/character/c_highrise_player_engineer.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_player_engineer_dlc1_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_player_engineer_dlc1_fb" ); +} diff --git a/ZM/Maps/Die Rise/character/c_highrise_player_farmgirl.gsc b/ZM/Maps/Die Rise/character/c_highrise_player_farmgirl.gsc new file mode 100644 index 0000000..5e84571 --- /dev/null +++ b/ZM/Maps/Die Rise/character/c_highrise_player_farmgirl.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_player_farmgirl_dlc1_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_player_farmgirl_dlc1_fb" ); +} diff --git a/ZM/Maps/Die Rise/character/c_highrise_player_oldman.gsc b/ZM/Maps/Die Rise/character/c_highrise_player_oldman.gsc new file mode 100644 index 0000000..6575c64 --- /dev/null +++ b/ZM/Maps/Die Rise/character/c_highrise_player_oldman.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_player_oldman_dlc1_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_player_oldman_dlc1_fb" ); +} diff --git a/ZM/Maps/Die Rise/character/c_highrise_player_reporter.gsc b/ZM/Maps/Die Rise/character/c_highrise_player_reporter.gsc new file mode 100644 index 0000000..60b0ece --- /dev/null +++ b/ZM/Maps/Die Rise/character/c_highrise_player_reporter.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_player_reporter_dlc1_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_player_reporter_dlc1_fb" ); +} diff --git a/ZM/Maps/Die Rise/character/c_zom_ally_farmgirl.gsc b/ZM/Maps/Die Rise/character/c_zom_ally_farmgirl.gsc new file mode 100644 index 0000000..5e84571 --- /dev/null +++ b/ZM/Maps/Die Rise/character/c_zom_ally_farmgirl.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_player_farmgirl_dlc1_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_player_farmgirl_dlc1_fb" ); +} diff --git a/ZM/Maps/Die Rise/character/c_zom_leaper.gsc b/ZM/Maps/Die Rise/character/c_zom_leaper.gsc new file mode 100644 index 0000000..e7b8026 --- /dev/null +++ b/ZM/Maps/Die Rise/character/c_zom_leaper.gsc @@ -0,0 +1,23 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_leaper_body" ); + self.headmodel = "c_zom_leaper_head"; + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_leaper_body_g_upclean"; + self.torsodmg5 = "c_zom_leaper_body_g_behead"; + self.legdmg1 = "c_zom_leaper_body_g_lowclean"; +} + +precache() +{ + precachemodel( "c_zom_leaper_body" ); + precachemodel( "c_zom_leaper_head" ); + precachemodel( "c_zom_leaper_body_g_upclean" ); + precachemodel( "c_zom_leaper_body_g_behead" ); + precachemodel( "c_zom_leaper_body_g_lowclean" ); +} diff --git a/ZM/Maps/Die Rise/character/c_zom_zombie_civ_shorts.gsc b/ZM/Maps/Die Rise/character/c_zom_zombie_civ_shorts.gsc new file mode 100644 index 0000000..d0e6fa0 --- /dev/null +++ b/ZM/Maps/Die Rise/character/c_zom_zombie_civ_shorts.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_chinese_zombie_head_als; + +main() +{ + self setmodel( "c_zom_zombie_civ_shorts_body" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_chinese_zombie_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_civ_shorts_body_g_upclean"; + self.torsodmg2 = "c_zom_zombie_civ_shorts_body_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie_civ_shorts_body_g_larmoff"; + self.torsodmg5 = "c_zom_zombie_scientist_body_g_behead"; + self.legdmg1 = "c_zom_zombie_civ_shorts_body_g_lowclean"; + self.legdmg2 = "c_zom_zombie_civ_shorts_body_g_rlegoff"; + self.legdmg3 = "c_zom_zombie_civ_shorts_body_g_llegoff"; + self.legdmg4 = "c_zom_zombie_civ_shorts_body_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_civ_shorts_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_civ_shorts_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_civ_shorts_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_civ_shorts_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie_civ_shorts_body" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_chinese_zombie_head_als::main() ); + precachemodel( "c_zom_zombie_civ_shorts_body_g_upclean" ); + precachemodel( "c_zom_zombie_civ_shorts_body_g_rarmoff" ); + precachemodel( "c_zom_zombie_civ_shorts_body_g_larmoff" ); + precachemodel( "c_zom_zombie_scientist_body_g_behead" ); + precachemodel( "c_zom_zombie_civ_shorts_body_g_lowclean" ); + precachemodel( "c_zom_zombie_civ_shorts_body_g_rlegoff" ); + precachemodel( "c_zom_zombie_civ_shorts_body_g_llegoff" ); + precachemodel( "c_zom_zombie_civ_shorts_body_g_legsoff" ); + precachemodel( "c_zom_zombie_civ_shorts_g_rarmspawn" ); + precachemodel( "c_zom_zombie_civ_shorts_g_larmspawn" ); + precachemodel( "c_zom_zombie_civ_shorts_g_rlegspawn" ); + precachemodel( "c_zom_zombie_civ_shorts_g_llegspawn" ); +} diff --git a/ZM/Maps/Die Rise/character/c_zom_zombie_civ_shorts2.gsc b/ZM/Maps/Die Rise/character/c_zom_zombie_civ_shorts2.gsc new file mode 100644 index 0000000..712a1ad --- /dev/null +++ b/ZM/Maps/Die Rise/character/c_zom_zombie_civ_shorts2.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_chinese_zombie_head_als; + +main() +{ + self setmodel( "c_zom_zombie_civ_shorts_body2" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_chinese_zombie_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_civ_shorts_body2_g_upclean"; + self.torsodmg2 = "c_zom_zombie_civ_shorts_body2_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie_civ_shorts_body2_g_larmoff"; + self.torsodmg5 = "c_zom_zombie_scientist_body_g_behead"; + self.legdmg1 = "c_zom_zombie_civ_shorts_body2_g_lowclean"; + self.legdmg2 = "c_zom_zombie_civ_shorts_body2_g_rlegoff"; + self.legdmg3 = "c_zom_zombie_civ_shorts_body2_g_llegoff"; + self.legdmg4 = "c_zom_zombie_civ_shorts_body2_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_civ_shorts_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_civ_shorts_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_civ_shorts_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_civ_shorts_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie_civ_shorts_body2" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_chinese_zombie_head_als::main() ); + precachemodel( "c_zom_zombie_civ_shorts_body2_g_upclean" ); + precachemodel( "c_zom_zombie_civ_shorts_body2_g_rarmoff" ); + precachemodel( "c_zom_zombie_civ_shorts_body2_g_larmoff" ); + precachemodel( "c_zom_zombie_scientist_body_g_behead" ); + precachemodel( "c_zom_zombie_civ_shorts_body2_g_lowclean" ); + precachemodel( "c_zom_zombie_civ_shorts_body2_g_rlegoff" ); + precachemodel( "c_zom_zombie_civ_shorts_body2_g_llegoff" ); + precachemodel( "c_zom_zombie_civ_shorts_body2_g_legsoff" ); + precachemodel( "c_zom_zombie_civ_shorts_g_rarmspawn" ); + precachemodel( "c_zom_zombie_civ_shorts_g_larmspawn" ); + precachemodel( "c_zom_zombie_civ_shorts_g_rlegspawn" ); + precachemodel( "c_zom_zombie_civ_shorts_g_llegspawn" ); +} diff --git a/ZM/Maps/Die Rise/character/c_zom_zombie_civ_shorts3.gsc b/ZM/Maps/Die Rise/character/c_zom_zombie_civ_shorts3.gsc new file mode 100644 index 0000000..67d2cef --- /dev/null +++ b/ZM/Maps/Die Rise/character/c_zom_zombie_civ_shorts3.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_chinese_zombie_head_als; + +main() +{ + self setmodel( "c_zom_zombie_civ_shorts_body3" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_chinese_zombie_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_civ_shorts_body3_g_upclean"; + self.torsodmg2 = "c_zom_zombie_civ_shorts_body3_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie_civ_shorts_body3_g_larmoff"; + self.torsodmg5 = "c_zom_zombie_scientist_body_g_behead"; + self.legdmg1 = "c_zom_zombie_civ_shorts_body3_g_lowclean"; + self.legdmg2 = "c_zom_zombie_civ_shorts_body3_g_rlegoff"; + self.legdmg3 = "c_zom_zombie_civ_shorts_body3_g_llegoff"; + self.legdmg4 = "c_zom_zombie_civ_shorts_body3_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_civ_shorts_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_civ_shorts_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_civ_shorts_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_civ_shorts_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie_civ_shorts_body3" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_chinese_zombie_head_als::main() ); + precachemodel( "c_zom_zombie_civ_shorts_body3_g_upclean" ); + precachemodel( "c_zom_zombie_civ_shorts_body3_g_rarmoff" ); + precachemodel( "c_zom_zombie_civ_shorts_body3_g_larmoff" ); + precachemodel( "c_zom_zombie_scientist_body_g_behead" ); + precachemodel( "c_zom_zombie_civ_shorts_body3_g_lowclean" ); + precachemodel( "c_zom_zombie_civ_shorts_body3_g_rlegoff" ); + precachemodel( "c_zom_zombie_civ_shorts_body3_g_llegoff" ); + precachemodel( "c_zom_zombie_civ_shorts_body3_g_legsoff" ); + precachemodel( "c_zom_zombie_civ_shorts_g_rarmspawn" ); + precachemodel( "c_zom_zombie_civ_shorts_g_larmspawn" ); + precachemodel( "c_zom_zombie_civ_shorts_g_rlegspawn" ); + precachemodel( "c_zom_zombie_civ_shorts_g_llegspawn" ); +} diff --git a/ZM/Maps/Die Rise/character/c_zom_zombie_civ_shorts4.gsc b/ZM/Maps/Die Rise/character/c_zom_zombie_civ_shorts4.gsc new file mode 100644 index 0000000..28b9e04 --- /dev/null +++ b/ZM/Maps/Die Rise/character/c_zom_zombie_civ_shorts4.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_chinese_zombie_head_als; + +main() +{ + self setmodel( "c_zom_zombie_civ_shorts_body4" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_chinese_zombie_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_civ_shorts_body4_g_upclean"; + self.torsodmg2 = "c_zom_zombie_civ_shorts_body4_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie_civ_shorts_body4_g_larmoff"; + self.torsodmg5 = "c_zom_zombie_scientist_body_g_behead"; + self.legdmg1 = "c_zom_zombie_civ_shorts_body4_g_lowclean"; + self.legdmg2 = "c_zom_zombie_civ_shorts_body4_g_rlegoff"; + self.legdmg3 = "c_zom_zombie_civ_shorts_body4_g_llegoff"; + self.legdmg4 = "c_zom_zombie_civ_shorts_body4_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_civ_shorts_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_civ_shorts_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_civ_shorts_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_civ_shorts_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie_civ_shorts_body4" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_chinese_zombie_head_als::main() ); + precachemodel( "c_zom_zombie_civ_shorts_body4_g_upclean" ); + precachemodel( "c_zom_zombie_civ_shorts_body4_g_rarmoff" ); + precachemodel( "c_zom_zombie_civ_shorts_body4_g_larmoff" ); + precachemodel( "c_zom_zombie_scientist_body_g_behead" ); + precachemodel( "c_zom_zombie_civ_shorts_body4_g_lowclean" ); + precachemodel( "c_zom_zombie_civ_shorts_body4_g_rlegoff" ); + precachemodel( "c_zom_zombie_civ_shorts_body4_g_llegoff" ); + precachemodel( "c_zom_zombie_civ_shorts_body4_g_legsoff" ); + precachemodel( "c_zom_zombie_civ_shorts_g_rarmspawn" ); + precachemodel( "c_zom_zombie_civ_shorts_g_larmspawn" ); + precachemodel( "c_zom_zombie_civ_shorts_g_rlegspawn" ); + precachemodel( "c_zom_zombie_civ_shorts_g_llegspawn" ); +} diff --git a/ZM/Maps/Die Rise/character/c_zom_zombie_civ_shorts5.gsc b/ZM/Maps/Die Rise/character/c_zom_zombie_civ_shorts5.gsc new file mode 100644 index 0000000..a1e811f --- /dev/null +++ b/ZM/Maps/Die Rise/character/c_zom_zombie_civ_shorts5.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_chinese_zombie_head_als; + +main() +{ + self setmodel( "c_zom_zombie_civ_shorts_body5" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_chinese_zombie_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_civ_shorts_body5_g_upclean"; + self.torsodmg2 = "c_zom_zombie_civ_shorts_body5_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie_civ_shorts_body5_g_larmoff"; + self.torsodmg5 = "c_zom_zombie_scientist_body_g_behead"; + self.legdmg1 = "c_zom_zombie_civ_shorts_body5_g_lowclean"; + self.legdmg2 = "c_zom_zombie_civ_shorts_body5_g_rlegoff"; + self.legdmg3 = "c_zom_zombie_civ_shorts_body5_g_llegoff"; + self.legdmg4 = "c_zom_zombie_civ_shorts_body5_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_civ_shorts_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_civ_shorts_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_civ_shorts_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_civ_shorts_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie_civ_shorts_body5" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_chinese_zombie_head_als::main() ); + precachemodel( "c_zom_zombie_civ_shorts_body5_g_upclean" ); + precachemodel( "c_zom_zombie_civ_shorts_body5_g_rarmoff" ); + precachemodel( "c_zom_zombie_civ_shorts_body5_g_larmoff" ); + precachemodel( "c_zom_zombie_scientist_body_g_behead" ); + precachemodel( "c_zom_zombie_civ_shorts_body5_g_lowclean" ); + precachemodel( "c_zom_zombie_civ_shorts_body5_g_rlegoff" ); + precachemodel( "c_zom_zombie_civ_shorts_body5_g_llegoff" ); + precachemodel( "c_zom_zombie_civ_shorts_body5_g_legsoff" ); + precachemodel( "c_zom_zombie_civ_shorts_g_rarmspawn" ); + precachemodel( "c_zom_zombie_civ_shorts_g_larmspawn" ); + precachemodel( "c_zom_zombie_civ_shorts_g_rlegspawn" ); + precachemodel( "c_zom_zombie_civ_shorts_g_llegspawn" ); +} diff --git a/ZM/Maps/Die Rise/character/c_zom_zombie_civ_shorts6.gsc b/ZM/Maps/Die Rise/character/c_zom_zombie_civ_shorts6.gsc new file mode 100644 index 0000000..93786a3 --- /dev/null +++ b/ZM/Maps/Die Rise/character/c_zom_zombie_civ_shorts6.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_chinese_zombie_head_als; + +main() +{ + self setmodel( "c_zom_zombie_civ_shorts_body6" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_chinese_zombie_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_civ_shorts_body6_g_upclean"; + self.torsodmg2 = "c_zom_zombie_civ_shorts_body6_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie_civ_shorts_body6_g_larmoff"; + self.torsodmg5 = "c_zom_zombie_scientist_body_g_behead"; + self.legdmg1 = "c_zom_zombie_civ_shorts_body6_g_lowclean"; + self.legdmg2 = "c_zom_zombie_civ_shorts_body6_g_rlegoff"; + self.legdmg3 = "c_zom_zombie_civ_shorts_body6_g_llegoff"; + self.legdmg4 = "c_zom_zombie_civ_shorts_body6_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_civ_shorts_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_civ_shorts_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_civ_shorts_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_civ_shorts_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie_civ_shorts_body6" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_chinese_zombie_head_als::main() ); + precachemodel( "c_zom_zombie_civ_shorts_body6_g_upclean" ); + precachemodel( "c_zom_zombie_civ_shorts_body6_g_rarmoff" ); + precachemodel( "c_zom_zombie_civ_shorts_body6_g_larmoff" ); + precachemodel( "c_zom_zombie_scientist_body_g_behead" ); + precachemodel( "c_zom_zombie_civ_shorts_body6_g_lowclean" ); + precachemodel( "c_zom_zombie_civ_shorts_body6_g_rlegoff" ); + precachemodel( "c_zom_zombie_civ_shorts_body6_g_llegoff" ); + precachemodel( "c_zom_zombie_civ_shorts_body6_g_legsoff" ); + precachemodel( "c_zom_zombie_civ_shorts_g_rarmspawn" ); + precachemodel( "c_zom_zombie_civ_shorts_g_larmspawn" ); + precachemodel( "c_zom_zombie_civ_shorts_g_rlegspawn" ); + precachemodel( "c_zom_zombie_civ_shorts_g_llegspawn" ); +} diff --git a/ZM/Maps/Die Rise/character/c_zom_zombie_scientist.gsc b/ZM/Maps/Die Rise/character/c_zom_zombie_scientist.gsc new file mode 100644 index 0000000..5bb1161 --- /dev/null +++ b/ZM/Maps/Die Rise/character/c_zom_zombie_scientist.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_chinese_zombie_head_als; + +main() +{ + self setmodel( "c_zom_zombie_scientist_body" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_chinese_zombie_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_scientist_body_g_upclean"; + self.torsodmg2 = "c_zom_zombie_scientist_body_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie_scientist_body_g_larmoff"; + self.torsodmg5 = "c_zom_zombie_scientist_body_g_behead"; + self.legdmg1 = "c_zom_zombie_scientist_body_g_lowclean"; + self.legdmg2 = "c_zom_zombie_scientist_body_g_rlegoff"; + self.legdmg3 = "c_zom_zombie_scientist_body_g_llegoff"; + self.legdmg4 = "c_zom_zombie_scientist_body_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_scientist_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_scientist_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_scientist_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_scientist_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie_scientist_body" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_chinese_zombie_head_als::main() ); + precachemodel( "c_zom_zombie_scientist_body_g_upclean" ); + precachemodel( "c_zom_zombie_scientist_body_g_rarmoff" ); + precachemodel( "c_zom_zombie_scientist_body_g_larmoff" ); + precachemodel( "c_zom_zombie_scientist_body_g_behead" ); + precachemodel( "c_zom_zombie_scientist_body_g_lowclean" ); + precachemodel( "c_zom_zombie_scientist_body_g_rlegoff" ); + precachemodel( "c_zom_zombie_scientist_body_g_llegoff" ); + precachemodel( "c_zom_zombie_scientist_body_g_legsoff" ); + precachemodel( "c_zom_zombie_scientist_g_rarmspawn" ); + precachemodel( "c_zom_zombie_scientist_g_larmspawn" ); + precachemodel( "c_zom_zombie_scientist_g_rlegspawn" ); + precachemodel( "c_zom_zombie_scientist_g_llegspawn" ); +} diff --git a/ZM/Maps/Die Rise/character/c_zom_zombie_soldier.gsc b/ZM/Maps/Die Rise/character/c_zom_zombie_soldier.gsc new file mode 100644 index 0000000..23275e3 --- /dev/null +++ b/ZM/Maps/Die Rise/character/c_zom_zombie_soldier.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_chinese_zombie_head_helmet_als; + +main() +{ + self setmodel( "c_zom_zombie_soldier_body" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_chinese_zombie_head_helmet_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie_soldier_body_g_upclean"; + self.torsodmg2 = "c_zom_zombie_soldier_body_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie_soldier_body_g_larmoff"; + self.torsodmg5 = "c_zom_zombie_scientist_body_g_behead"; + self.legdmg1 = "c_zom_zombie_soldier_body_g_lowclean"; + self.legdmg2 = "c_zom_zombie_soldier_body_g_rlegoff"; + self.legdmg3 = "c_zom_zombie_soldier_body_g_llegoff"; + self.legdmg4 = "c_zom_zombie_soldier_body_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_soldier_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_soldier_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_soldier_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_soldier_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie_soldier_body" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_chinese_zombie_head_helmet_als::main() ); + precachemodel( "c_zom_zombie_soldier_body_g_upclean" ); + precachemodel( "c_zom_zombie_soldier_body_g_rarmoff" ); + precachemodel( "c_zom_zombie_soldier_body_g_larmoff" ); + precachemodel( "c_zom_zombie_scientist_body_g_behead" ); + precachemodel( "c_zom_zombie_soldier_body_g_lowclean" ); + precachemodel( "c_zom_zombie_soldier_body_g_rlegoff" ); + precachemodel( "c_zom_zombie_soldier_body_g_llegoff" ); + precachemodel( "c_zom_zombie_soldier_body_g_legsoff" ); + precachemodel( "c_zom_zombie_soldier_g_rarmspawn" ); + precachemodel( "c_zom_zombie_soldier_g_larmspawn" ); + precachemodel( "c_zom_zombie_soldier_g_rlegspawn" ); + precachemodel( "c_zom_zombie_soldier_g_llegspawn" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_chrest_gap.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_chrest_gap.gsc new file mode 100644 index 0000000..084d90f --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_chrest_gap.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_chrest_gap", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_down.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_down.gsc new file mode 100644 index 0000000..dbb747f --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_down.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_chrest_interior_high_to_low", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_down_2.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_down_2.gsc new file mode 100644 index 0000000..259a930 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_down_2.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_chrest_interior_alt_down", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_up.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_up.gsc new file mode 100644 index 0000000..b7bf8e5 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_up.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_chrest_interior_low_to_high", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_up_2.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_up_2.gsc new file mode 100644 index 0000000..3bf2b79 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_up_2.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_chrest_interior_alt_up", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_counter_from_stools.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_counter_from_stools.gsc new file mode 100644 index 0000000..1d9d419 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_counter_from_stools.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_round_counter_from_stools", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_counter_to_stools.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_counter_to_stools.gsc new file mode 100644 index 0000000..6cd588e --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_counter_to_stools.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_round_counter_to_stools", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_escape_hallway.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_escape_hallway.gsc new file mode 100644 index 0000000..544b30a --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_escape_hallway.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_escape_elevator_hallway", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap10_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap10_high_to_low.gsc new file mode 100644 index 0000000..21b9cfb --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap10_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap10_high_to_low" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap10_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap10_low_to_high.gsc new file mode 100644 index 0000000..ed50b4f --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap10_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap10_low_to_high" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14a_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14a_high_to_low.gsc new file mode 100644 index 0000000..3d338f2 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14a_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap14a_high_to_low" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14b_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14b_high_to_low.gsc new file mode 100644 index 0000000..d43c578 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14b_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap14b_high_to_low" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14c_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14c_high_to_low.gsc new file mode 100644 index 0000000..c4ef736 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14c_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap14c_high_to_low" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14c_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14c_low_to_high.gsc new file mode 100644 index 0000000..b34e59f --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14c_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap14c_low_to_high" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14d_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14d_high_to_low.gsc new file mode 100644 index 0000000..d7a08a5 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14d_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap14d_high_to_low" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14d_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14d_low_to_high.gsc new file mode 100644 index 0000000..eca10ed --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14d_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap14d_low_to_high" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14e_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14e_high_to_low.gsc new file mode 100644 index 0000000..43884e8 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14e_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap14e_high_to_low" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14e_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14e_low_to_high.gsc new file mode 100644 index 0000000..f4cd671 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14e_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap14e_low_to_high" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14f_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14f_high_to_low.gsc new file mode 100644 index 0000000..a1bda50 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14f_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap14f_high_to_low" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14f_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14f_low_to_high.gsc new file mode 100644 index 0000000..d29b748 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14f_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap14f_low_to_high" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14g_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14g_high_to_low.gsc new file mode 100644 index 0000000..37bc506 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14g_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap14g_high_to_low" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14g_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14g_low_to_high.gsc new file mode 100644 index 0000000..7f7cb67 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14g_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap14g_low_to_high" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14h_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14h_high_to_low.gsc new file mode 100644 index 0000000..558d9d8 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14h_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap14h_high_to_low" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14h_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14h_low_to_high.gsc new file mode 100644 index 0000000..f04b630 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap14h_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap14h_low_to_high" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap15a_from_girder.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap15a_from_girder.gsc new file mode 100644 index 0000000..5f87b40 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap15a_from_girder.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap15a_from_girder" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap15b_from_girder.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap15b_from_girder.gsc new file mode 100644 index 0000000..62a88e3 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap15b_from_girder.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap15b_from_girder" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap15f_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap15f_high_to_low.gsc new file mode 100644 index 0000000..9ed62f3 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap15f_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap15f_high_to_low" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap15f_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap15f_low_to_high.gsc new file mode 100644 index 0000000..4559c40 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap15f_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap15f_low_to_high" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap15g_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap15g_high_to_low.gsc new file mode 100644 index 0000000..03e8580 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap15g_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap15g_high_to_low" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap15g_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap15g_low_to_high.gsc new file mode 100644 index 0000000..101a640 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap15g_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap15g_low_to_high" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap16a_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap16a_high_to_low.gsc new file mode 100644 index 0000000..3e4adad --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap16a_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap16a_high_to_low", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap16a_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap16a_low_to_high.gsc new file mode 100644 index 0000000..0d6c510 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap16a_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap16a_low_to_high", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap16b_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap16b_high_to_low.gsc new file mode 100644 index 0000000..7168d72 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap16b_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap16b_high_to_low", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap16b_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap16b_low_to_high.gsc new file mode 100644 index 0000000..dbe7253 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap16b_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap16b_low_to_high", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap17a_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap17a_high_to_low.gsc new file mode 100644 index 0000000..1939766 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap17a_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap17a_high_to_low", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap17a_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap17a_low_to_high.gsc new file mode 100644 index 0000000..8fc1ab0 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap17a_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap17a_low_to_high", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap17c_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap17c_high_to_low.gsc new file mode 100644 index 0000000..2201e65 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap17c_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap17c_high_to_low", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap17c_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap17c_low_to_high.gsc new file mode 100644 index 0000000..f02f09d --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap17c_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap17c_low_to_high", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap18_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap18_high_to_low.gsc new file mode 100644 index 0000000..2ae196a --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap18_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap18_high_to_low", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap19_from_railing.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap19_from_railing.gsc new file mode 100644 index 0000000..8857336 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap19_from_railing.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap19_from_railing", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap19_to_railing.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap19_to_railing.gsc new file mode 100644 index 0000000..a29cc59 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap19_to_railing.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap19_to_railing", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap1_from_antenna.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap1_from_antenna.gsc new file mode 100644 index 0000000..601b9b1 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap1_from_antenna.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap1_from_antenna" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap1_to_antenna.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap1_to_antenna.gsc new file mode 100644 index 0000000..b9170b5 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap1_to_antenna.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap1_to_antenna" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap4a_slide_down_beam.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap4a_slide_down_beam.gsc new file mode 100644 index 0000000..f73a380 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap4a_slide_down_beam.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap4a_slide_down_beam" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap4b_from_roof.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap4b_from_roof.gsc new file mode 100644 index 0000000..2b06a8b --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap4b_from_roof.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap4b_from_roof" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap4b_to_roof.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap4b_to_roof.gsc new file mode 100644 index 0000000..bea460e --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap4b_to_roof.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap4b_to_roof" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap5a_from_conference.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap5a_from_conference.gsc new file mode 100644 index 0000000..84fc43d --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap5a_from_conference.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap5a_from_conference" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap5a_to_conference.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap5a_to_conference.gsc new file mode 100644 index 0000000..33beedf --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap5a_to_conference.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap5a_to_conference" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap5b_from_conference.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap5b_from_conference.gsc new file mode 100644 index 0000000..5e6025d --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap5b_from_conference.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap5b_from_conference" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap5b_to_conference.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap5b_to_conference.gsc new file mode 100644 index 0000000..5ba8380 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap5b_to_conference.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap5b_to_conference" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap6_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap6_high_to_low.gsc new file mode 100644 index 0000000..6d31d57 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap6_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap6_high_to_low" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap6_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap6_low_to_high.gsc new file mode 100644 index 0000000..3587293 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap6_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap6_low_to_high" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap7_from_top_ledge.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap7_from_top_ledge.gsc new file mode 100644 index 0000000..42abdcb --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap7_from_top_ledge.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap7_from_top_ledge" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap7_to_top_ledge.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap7_to_top_ledge.gsc new file mode 100644 index 0000000..199b20e --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap7_to_top_ledge.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap7_to_top_ledge" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap8_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap8_high_to_low.gsc new file mode 100644 index 0000000..7208787 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap8_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap8_high_to_low" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap8_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap8_low_to_high.gsc new file mode 100644 index 0000000..5be1860 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap8_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap8_low_to_high" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap9_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap9_high_to_low.gsc new file mode 100644 index 0000000..63fee6e --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap9_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap9_high_to_low" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap9_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap9_low_to_high.gsc new file mode 100644 index 0000000..be315b0 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_gap9_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_gap9_low_to_high" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_jump_ac_unit.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_jump_ac_unit.gsc new file mode 100644 index 0000000..7871f47 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_jump_ac_unit.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_blue_ac_unit", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_1_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_1_high_to_low.gsc new file mode 100644 index 0000000..0a996dd --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_1_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_traverse_1_high_to_low" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_1_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_1_low_to_high.gsc new file mode 100644 index 0000000..064377e --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_1_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_traverse_1_low_to_high" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_2_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_2_high_to_low.gsc new file mode 100644 index 0000000..523177c --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_2_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_traverse_2_high_to_low" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_2_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_2_low_to_high.gsc new file mode 100644 index 0000000..7e41e8a --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_2_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_traverse_2_low_to_high" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_3_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_3_high_to_low.gsc new file mode 100644 index 0000000..b478ef6 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_3_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_traverse_3_high_to_low" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_3_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_3_low_to_high.gsc new file mode 100644 index 0000000..9d8ed5f --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_3_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_traverse_3_low_to_high" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_4_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_4_high_to_low.gsc new file mode 100644 index 0000000..5d6af13 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_4_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_traverse_4_high_to_low" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_4_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_4_low_to_high.gsc new file mode 100644 index 0000000..ef2c9bc --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_4_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_traverse_4_low_to_high" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_5_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_5_high_to_low.gsc new file mode 100644 index 0000000..2ff3f78 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_5_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_traverse_5_high_to_low" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_5_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_5_low_to_high.gsc new file mode 100644 index 0000000..5790c72 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_5_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_traverse_5_low_to_high" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_6_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_6_high_to_low.gsc new file mode 100644 index 0000000..988162f --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_6_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_traverse_6_high_to_low", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_6_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_6_low_to_high.gsc new file mode 100644 index 0000000..b1d5c1d --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_6_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_traverse_6_low_to_high", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_7_high_to_low.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_7_high_to_low.gsc new file mode 100644 index 0000000..727bb29 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_7_high_to_low.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_traverse_7_high_to_low", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_7_low_to_high.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_7_low_to_high.gsc new file mode 100644 index 0000000..96b923f --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_dierise_traverse_7_low_to_high.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "dierise_traverse_7_low_to_high", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_gap2_to_roof.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_gap2_to_roof.gsc new file mode 100644 index 0000000..9387b62 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_gap2_to_roof.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "gap2_to_roof" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_120.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_120.gsc new file mode 100644 index 0000000..da0bf94 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_120.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_120" ); +} diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_127.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc rename to ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_127.gsc diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_176.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_176.gsc new file mode 100644 index 0000000..78f6e38 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_176.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_176" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_184.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_184.gsc new file mode 100644 index 0000000..4ef86a2 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_184.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_184" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_190.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_190.gsc new file mode 100644 index 0000000..63e4ca8 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_190.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_190" ); +} diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_down_222.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_222.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_down_222.gsc rename to ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_222.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_286.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_286.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_286.gsc rename to ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_286.gsc diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_40.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_40.gsc new file mode 100644 index 0000000..c8c4666 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_40.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_40" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_48.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_48.gsc new file mode 100644 index 0000000..3886fb1 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_48.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_48" ); +} diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_96.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc rename to ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_96.gsc diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_to_elevator_top.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_to_elevator_top.gsc new file mode 100644 index 0000000..18c0c30 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_down_to_elevator_top.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "zm_jump_down_to_elevator_top", undefined, "zm_traverse_elevator" ); +} diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_127.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc rename to ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_127.gsc diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_175.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_175.gsc new file mode 100644 index 0000000..bdea3e7 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_175.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_175" ); +} diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_up_222.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_222.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_up_222.gsc rename to ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_222.gsc diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_antenna.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_antenna.gsc new file mode 100644 index 0000000..ab96df7 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_antenna.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_antenna", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_from_elevator_top.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_from_elevator_top.gsc new file mode 100644 index 0000000..b21e1ab --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_from_elevator_top.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "zm_jump_up_from_elevator_top", undefined, "zm_traverse_elevator" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_grabbed_190.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_grabbed_190.gsc new file mode 100644 index 0000000..6ed57a3 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_grabbed_190.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_grabbed_190" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_grabbed_48.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_grabbed_48.gsc new file mode 100644 index 0000000..b612225 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_grabbed_48.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_grabbed_48" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_sewing.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_sewing.gsc new file mode 100644 index 0000000..30bf869 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_jump_up_sewing.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_sewing", undefined, "zm_traverse_dierise" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc new file mode 100644 index 0000000..a9c2823 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + self dosimpletraverse( "mantle_over_40_hurdle" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_traverse_48.gsc b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_traverse_48.gsc new file mode 100644 index 0000000..4c73a4e --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/animscripts/traverse/zm_traverse_48.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "traverse_48" ); +} diff --git a/ZM/Maps/Die Rise/maps/mp/createfx/zm_highrise_fx.gsc b/ZM/Maps/Die Rise/maps/mp/createfx/zm_highrise_fx.gsc new file mode 100644 index 0000000..b4a50e5 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/createfx/zm_highrise_fx.gsc @@ -0,0 +1,2499 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5935.09, -2250.2, 2175.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 106.466, -4415.77, 2175.93 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 7818.6, -5931.26, 2175.42 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2672.52, -8650.92, 2176.46 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3255.3, -8784.61, 2176.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5738.8, 9199.63, 2176.25 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_bend_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 402.774, -1310.8, 2222.36 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 324.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_bend_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3897.99, 3187.69, 2727.5 ); + ent.v["angles"] = ( 349.08, 288.472, -8.5135 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_sm_right" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2343.23, 1810.53, 2897.93 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_sm_right" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2966.82, 3192.47, 2470.13 ); + ent.v["angles"] = ( 1.61145, 263.827, 43.5045 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_meteor_lg_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3941.08, -18618.2, 2371.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 337.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_meteor_sm_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -10945, 2448.45, 9642.44 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 328.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_meteor_sm_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -13586.5, -11773.8, 5732.62 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 347.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_meteor_sm_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -16328.9, -318.364, 7701.99 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 325.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_meteor_sm_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 12397.1, 11495.5, 7748.65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 347.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_meteor_sm_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -5882.88, 14728.6, 7374.86 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 347.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_single" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 12129, 1409.62, 866.84 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_single" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 12606, 5028.84, 1206.96 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_single" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 12474.5, 8828.45, 1550.09 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 192.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_left" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 8354.47, -4012.84, 1369.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 138.0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_right" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -7556.62, 2863.86, 1799.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_single" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -7370.02, 189.047, 790.31 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 6.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_single" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3393.28, -9018.58, 1092.32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 46.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_left" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5920.8, -7649.07, 1372.1 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 116.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_left" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1411.54, -9514.42, 1599.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 80.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 8661.2, 2527.4, 2180.03 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 9842, 6568.17, 2175.87 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1111.98, 527.838, 2177.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_left" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 10270.9, 2025.71, 2203.89 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 171.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_left" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 9208.79, 4737.63, 2040.35 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 166.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_right" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -5043.68, 2250.88, 2384.84 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_right" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -5356.47, -1325.88, 2194.51 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 2.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_sm_right" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1188.77, 3058.28, 2923.57 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 264.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_sm_right" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2212.19, 2870.7, 2830.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 279.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_bend_01" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2317.76, 1036.57, 2862.55 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 336.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_single" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4163.52, -4574.02, 909.17 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_lg_single" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -11158.4, -7156.55, 1322.75 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_md_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1975.85, 1571.8, 3549.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_edge_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1699.46, 1974.64, 3550.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_edge_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2064.12, 1471.11, 3547.83 ); + ent.v["angles"] = ( 360, 327, 0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_smk_plume_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 12000.9, -15308.9, 4389.8 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 332.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_smk_plume_xlg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 25323.8, 14531.9, 4119.45 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 21.0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_bld_crumble_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 244.523, -7888.57, 5098.28 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 157.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_bld_crumble_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -5242.37, 2336.9, 4755.06 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 326.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_sm_bottom" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2321.77, 1179.26, 1228.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 336.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_sm_bottom" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2390.81, 1066.62, 1281.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 204.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_sm_bottom" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2547.69, 2656.36, 1280.62 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_sm_bottom" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3569.18, 903.619, 1278.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 305.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_sm_bottom" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3791.86, 186.275, 1157.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_zmb_highrise_sun" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -809485, -539953, 221553 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_moon" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 68697.9, -157016, 150210 ); + ent.v["angles"] = ( 31, 113, 0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1452.47, 1691.38, 3737.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 298.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1713.63, 1398.64, 3707.18 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 237.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1255.6, 1385.61, 3733.04 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 353.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2115.14, 2098.9, 3525.12 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1985.15, 1228.08, 3558.29 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 351.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2788.92, 2487.89, 3031.84 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3051.21, 1055.55, 1240.19 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2936.09, 1613.68, 1618.27 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2925.32, 1379.21, 1614.31 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 6.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_haze_int_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2306.41, -414.808, 1127.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_haze_int_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2331.25, -43.3334, 1121.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 240.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_haze_int_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2466.94, 275.75, 1126.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 150.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_haze_int_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2627.32, -227.895, 1120.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 240.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_haze_int_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2651.92, -267.98, 1299.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 240.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_haze_int_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2715.99, 220.238, 1303.74 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 151.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_haze_int_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2104.64, 364.181, 1305.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 240.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_haze_int_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2019.41, 2268.25, 3041.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 277.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_haze_int_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1801.31, -92.9678, 2704.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 330.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1734.18, 1887.28, 3404.85 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3256.31, 1580.39, 1328.04 ); + ent.v["angles"] = ( 0, 274, 12 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2352.67, 758.995, 1120.62 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 335.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createexploder( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2749.41, 187, 1296.99 ); + ent.v["angles"] = ( 38.5801, 310.23, -179.832 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 69; + ent = maps\mp\_utility::createexploder( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2458.49, -389.29, 1420.89 ); + ent.v["angles"] = ( 17.6406, 150.717, 4.09245 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 12; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_meteor_sm_horizon" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 89.944, -13457.5, 2203.45 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 330.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_meteor_sm_horizon" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -8358.44, 11771, 2424.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 46.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_meteor_sm_horizon" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -15394, 449.764, 2112.77 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 315.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_meteor_lg_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -11972.1, 14833.9, 2407.89 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 349.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_meteor_lg_top2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 14784.3, 13721, 2387.97 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 347.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2109.19, 1126.85, 3202.97 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 279.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2705.13, 1223.19, 3014.58 ); + ent.v["angles"] = ( 11, 182, 0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2749.42, 1079.91, 3018.68 ); + ent.v["angles"] = ( 0, 272, 13 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_md_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2316.36, 611.464, 2861.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_haze_int_med" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2465.47, -503.223, 2704.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 330.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3074.99, 303.748, 2872.09 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 18.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3350.41, 1007.86, 3126 ); + ent.v["angles"] = ( 0.190822, 271.019, 12.9983 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2959.2, 1071.99, 1584.12 ); + ent.v["angles"] = ( 0.190823, 271.019, 11.9983 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3384.78, 1012.04, 1680.04 ); + ent.v["angles"] = ( 0.190823, 271.019, 11.9983 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1965.3, 996.418, 1402.92 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2098.97, 830.184, 1284.43 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 109.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2694.02, 1684.57, 1357.74 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 189.0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_meteor_lg_top" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -715.213, -4251.6, 2320.43 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 342.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createexploder( "fx_highrise_dragon_breath_max" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1918.86, 532.453, 3321.03 ); + ent.v["angles"] = ( 348.03, 39.1898, 7.34176 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createexploder( "fx_highrise_dragon_tower_absorb_max" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2208.55, 682.084, 2876.98 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 902; + ent = maps\mp\_utility::createexploder( "fx_highrise_dragon_tower_glow_max" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2223.62, 625.375, 3145.55 ); + ent.v["angles"] = ( 277.118, 112.306, -11.3598 ); + ent.v["delay"] = 1.6; + ent.v["exploder"] = 902; + ent = maps\mp\_utility::createexploder( "fx_highrise_dragon_tower_glow_max" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2150.42, 667.116, 3145.98 ); + ent.v["angles"] = ( 277.441, 10.918, -1.13407 ); + ent.v["delay"] = 1.8; + ent.v["exploder"] = 902; + ent = maps\mp\_utility::createexploder( "fx_highrise_dragon_tower_glow_max" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2191.95, 738.555, 3145.98 ); + ent.v["angles"] = ( 276.704, 278.17, 6.16471 ); + ent.v["delay"] = 1.7; + ent.v["exploder"] = 902; + ent = maps\mp\_utility::createexploder( "fx_highrise_dragon_tower_glow_max" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2266.34, 697.975, 3145.98 ); + ent.v["angles"] = ( 277.596, 199.948, -7.9795 ); + ent.v["delay"] = 1.9; + ent.v["exploder"] = 902; + ent = maps\mp\_utility::createexploder( "fx_highrise_sidequest_complete" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2208.55, 682.084, 3289.98 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 903; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1952.4, 2125.58, 3398.93 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2198.4, 1921.55, 3244.55 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1608.42, 1630.07, 3226.55 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2002.86, 1336.04, 3226.55 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2187.74, 1793.8, 3373.88 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1625.76, 1113.24, 3373.88 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_wire_spark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1923.99, 2279.89, 3308.66 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_wire_spark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1887, 2237.51, 3316.22 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_wire_spark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2042.95, 2326.89, 3332.03 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_wire_spark" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1925.14, 2291.73, 3331.91 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1565.87, -517.59, 1427.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1556.66, -532.052, 1427.22 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1494.07, -333.813, 2845.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1465.97, -354.304, 2843.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1506.43, -282.557, 2844.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_god_ray_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2286.46, -258.277, 1338.85 ); + ent.v["angles"] = ( 297.779, 286.045, 42.5871 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_god_ray_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2334.38, -344.373, 1334.13 ); + ent.v["angles"] = ( 288.7, 265.245, 60.9518 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_fire_distant" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 500.75, -7715.98, 4930.45 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 183.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_fire_distant" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1034.61, -7566.86, 4920.16 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 172.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_fire_distant" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 793.604, -7873.05, 6300.18 ); + ent.v["angles"] = ( 360, 172, 0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_fire_distant" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4974.55, -12499.4, 4144.27 ); + ent.v["angles"] = ( 360, 172, 0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_fire_distant" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5141.25, -12654.9, 4243.13 ); + ent.v["angles"] = ( 360, 172, 0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_fire_distant" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4784.9, -12900.5, 5414.96 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 222.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_smk_plume_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 422.245, -7855.01, 4978.71 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_smk_plume_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 594.24, -8075.24, 3829.66 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_fire_distant" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 533.759, -7934.7, 3892.52 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 172.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_smk_plume_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4824.61, -12909.8, 5325.78 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 359.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_smk_plume_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4948.76, -12635.6, 4202.86 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 355.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_fire_distant" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 7660.25, -1274.45, 5002.88 ); + ent.v["angles"] = ( 342, 228, 0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_bld_crumble_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4406.97, 3642.98, 3621.17 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 326.0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_fire_distant" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 7681.66, -1588.11, 5146.58 ); + ent.v["angles"] = ( 340.092, 278.077, -7.10236 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_fire_distant" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 7896.63, -2259.78, 5234.29 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 299.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_fire_distant" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 8080.7, -1962.36, 6759.67 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 233.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_smk_plume_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 8022.27, -2422.76, 5241.34 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 30.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_smk_plume_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 8035.48, -2094.06, 6683.01 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 30.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_smk_plume_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 10619, -12056.5, 4815.85 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 16.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_fire_distant" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 10664.4, -11803, 4670.8 ); + ent.v["angles"] = ( 345, 215, 0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_fire_distant" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 10941.4, -11896.5, 4532.56 ); + ent.v["angles"] = ( 27.222, 200.347, -6.82065 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_smk_plume_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -5638.88, 2487.48, 4888.77 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_fire_distant" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -5537.59, 2599.76, 4889.63 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_smk_plume_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -5077.21, -3439.84, 4725.64 ); + ent.v["angles"] = ( 3.01569, 92.1197, -1.59938 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_fire_distant" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -5010.98, -3387.14, 4776.28 ); + ent.v["angles"] = ( 36, 274, 0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_fire_distant" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -5235.39, 2774.52, 5073.47 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_smk_plume_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1866.25, 5580.06, 3870.03 ); + ent.v["angles"] = ( 344.309, 131.366, -3.53595 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_fire_distant" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1768.48, 5602.07, 3833.98 ); + ent.v["angles"] = ( 7, 27, 0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_fire_distant" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1200.82, 5481.87, 3237.64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 334.0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_smk_plume_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1246.92, 5426.59, 3368 ); + ent.v["angles"] = ( 344.384, 136.516, -4.13286 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_fire_distant" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4280.09, 10160.2, 4329.69 ); + ent.v["angles"] = ( 50, 42, -3 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_smk_plume_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4433.3, 10083.5, 5709.05 ); + ent.v["angles"] = ( 352, 181, 8 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_smk_plume_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4114, 10279.9, 4180.68 ); + ent.v["angles"] = ( 352, 181, 8 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_fire_distant" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -4313.89, 9720.46, 5534.85 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_sm_right" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4714.76, 2493.84, 1648.97 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 183.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_sm_right" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4739.57, 1471.74, 1650.95 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 183.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_sm_bottom" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3383.68, 834.141, 1742.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_cloud_sm_bottom" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5043.55, 2601.05, 1715.63 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 258.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2352.25, 1617.06, 3361.02 ); + ent.v["angles"] = ( 314, 171, 0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_smk_plume_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1337.35, -7436.84, 5055.08 ); + ent.v["angles"] = ( 351, 339, 0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_smk_plume_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 7797.33, -1295.94, 5201.8 ); + ent.v["angles"] = ( 25.4786, 72.6761, -82.8493 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_bld_crumble_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 8862.87, -691.298, 4961.33 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 39.0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2420.08, -68.38, 1418.5 ); + ent.v["angles"] = ( 1.00179, 150.2, 1.05802 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createexploder( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2335.79, 668.45, 1297.26 ); + ent.v["angles"] = ( 48.3264, 341.649, -179.643 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 15; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2300.57, 242.033, 1441.06 ); + ent.v["angles"] = ( 35.7756, 248.973, 14.7926 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2454.23, 457.859, 1351.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2268.55, 623.049, 1380.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3064.03, 257.858, 1443.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_god_ray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1930.25, -297.457, 1296.13 ); + ent.v["angles"] = ( 328, 124, 0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_god_ray_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1780.43, 157.226, 1308.13 ); + ent.v["angles"] = ( 322, 138, 0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_god_ray_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1671.64, 1907.73, 3429.92 ); + ent.v["angles"] = ( 297, 210, 0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_god_ray_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1790.95, 1871.1, 3436.84 ); + ent.v["angles"] = ( 297, 210, 0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_god_ray_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1745.13, 1947.4, 3437.16 ); + ent.v["angles"] = ( 297, 210, 0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_god_ray_cool_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2022.25, 2127.31, 3399.22 ); + ent.v["angles"] = ( 309.598, 336.39, 8.77238 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1251.71, 1117.82, 3731.79 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 3.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2351.43, 1533.15, 3314.29 ); + ent.v["angles"] = ( 314, 171, 0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createexploder( "fx_highrise_god_ray_sm" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1502.64, 2488.15, 3049.78 ); + ent.v["angles"] = ( 335, 241, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 28; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1793.73, 2728.99, 3178.13 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2190.42, 2650.2, 3189.13 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2240.3, 2522.11, 3184.13 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1578.41, 2731.91, 3185.88 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2055.04, 2579.59, 3052.44 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2058.35, 1104.91, 3066.57 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_god_ray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1914.25, 1584.22, 3072.13 ); + ent.v["angles"] = ( 333.048, 189.653, 1.8324 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_god_ray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1887.19, 1577.48, 3046.13 ); + ent.v["angles"] = ( 327.051, 189.424, 1.94656 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createexploder( "fx_highrise_light_recessed" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1944, 1917, 3377 ); + ent.v["angles"] = ( 0, 180, 180 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 23; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_recessed" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1116, 2298, 3201 ); + ent.v["angles"] = ( 0, 180, 180 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createexploder( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2013.66, 1980.6, 3046.75 ); + ent.v["angles"] = ( 313.59, 181.264, -172.778 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 26; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1542.89, 1951.23, 3173.63 ); + ent.v["angles"] = ( 326.084, 274.704, -8.09602 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1733.96, 1578.33, 3173.75 ); + ent.v["angles"] = ( 26.3999, 180.221, 0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1668.67, 2079.96, 3174 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.2 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createexploder( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2804.27, 1289.79, 2711.14 ); + ent.v["angles"] = ( 19.8618, 15.8454, 179.579 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 18; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent_wall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1491, 1325, 3346 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent_wall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1300, 2250, 3349.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1510.18, 2082.19, 3217.85 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2031.9, 2283.8, 3242.38 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1876.9, 2235.33, 3252.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1584.94, 1558.86, 3374.88 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1663.65, 1806.64, 3368.18 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1447.13, 2092.95, 3371.88 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1886.75, 2215.98, 3374.88 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1959.83, 2149.67, 3372.88 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1983.27, 1562.68, 3367.09 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2381.82, 1122.82, 3372.03 ); + ent.v["angles"] = ( 0, 274, -57 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1969.61, 1435.29, 3192.13 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1741.48, 1380.96, 3192.13 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2200.38, 1819.39, 3051.24 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1689.91, 1358.33, 3052.11 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_recessed_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1961.97, 1571.4, 3561.7 ); + ent.v["angles"] = ( 0, 180, 180 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_recessed_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1650, 2064, 3562 ); + ent.v["angles"] = ( 0, 180, 180 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_recessed_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1940, 1328, 3562 ); + ent.v["angles"] = ( 0, 180, 180 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_recessed" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1851, 1384, 3377 ); + ent.v["angles"] = ( 0, 180, 180 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_recessed" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2036, 1917, 3377 ); + ent.v["angles"] = ( 0, 180, 180 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_recessed" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1265, 1843, 3377 ); + ent.v["angles"] = ( 0, 180, 180 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_recessed" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1297, 2073, 3377 ); + ent.v["angles"] = ( 0, 180, 180 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_recessed" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1884, 2482, 3201 ); + ent.v["angles"] = ( 0, 180, 180 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_recessed" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1850, 2339, 3201 ); + ent.v["angles"] = ( 0, 180, 180 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_recessed" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1850, 2217, 3201 ); + ent.v["angles"] = ( 0, 180, 180 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_recessed" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2092, 2377, 3201 ); + ent.v["angles"] = ( 0, 180, 180 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_mall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2068, 1578, 3369 ); + ent.v["angles"] = ( 356.6, 0, -9.40337 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createexploder( "fx_highrise_light_mall" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1852, 2018, 3371 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 24; + ent = maps\mp\_utility::createexploder( "fx_highrise_light_mall" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1580, 1430, 3363 ); + ent.v["angles"] = vectorscale( ( 0, 0, 1 ), 29.7 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 25; + ent = maps\mp\_utility::createexploder( "fx_highrise_light_mall" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1892, 1578, 3367 ); + ent.v["angles"] = ( 4.99999, 0, 7.39999 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 27; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_mall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1532, 2018, 3368 ); + ent.v["angles"] = ( 355.002, 359.848, 7.60746 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_mall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2012, 2018, 3364 ); + ent.v["angles"] = vectorscale( ( 0, 0, 1 ), 19.7 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_lantern_red" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1896.65, 1340.69, 3156.13 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_lantern_red" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1921.67, 1130.63, 3180.67 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2199.16, -220.508, 1429.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1412.87, -317.377, 1370.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2190.55, 38.0294, 1199.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2136.92, 163.026, 2801.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1822.83, 117.922, 2797.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2073.98, 162.96, 2844.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2501.97, 740.485, 2844.17 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2380.05, 501.915, 2704.13 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1958.82, 182.506, 1373.02 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2379.38, 735.746, 1265.35 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 62.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2408.28, 797.57, 1449.82 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2237.09, 769.693, 1453.12 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1465.22, 1277.82, 1582.88 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1657.8, 1289, 1582.88 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1826.1, 1284.82, 1583.88 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1966.86, 1212.15, 1583.13 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1960.06, 1097.5, 1569.73 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2159.83, 846.448, 1604.34 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 107.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1924.86, 616.804, 1611.94 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 149.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2050.99, 1040.36, 1262.44 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2680.12, 761.659, 1102.06 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 335.0 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1298.86, 1009.47, 3545.62 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1336.88, 1010.24, 3711.77 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1693.27, 959.043, 3530.37 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1997.79, 1055.94, 3322.29 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 358.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1996.55, 1061.2, 3529.25 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2341.56, 1105.49, 3428.15 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 257.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3155.15, 1100.68, 3550.87 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2691.08, 1335.75, 3182.49 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2668.41, 1106.93, 1624.14 ); + ent.v["angles"] = ( 17, 220, 102 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2468.95, 1690.2, 1634.15 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 263.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1877.81, 1000.92, 1412.75 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2178.88, 651.967, 1461.02 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 116.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1798.07, 429.98, 1281.16 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 78.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1831.99, 1263.11, 1573.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2983.84, 904.311, 1310.93 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1283.82, 1636.99, 3709.96 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 311.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1807.44, 1413.16, 3728.99 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 242.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1881.13, 1606.04, 3729.87 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 186.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1793.23, 1792.73, 3735.49 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1773.68, 1672.45, 3727.26 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1808.83, 1654.44, 3730.23 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 235.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1598.64, 1959.85, 3568.3 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 279.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2293.09, 1571.05, 3481.99 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2205.1, 2086.23, 3518.15 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 122.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2192.27, 1897.3, 3550.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2189.52, 1765.57, 3403.76 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1595.98, 1131.52, 3374.83 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1753.55, 1598.67, 3549.88 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2206.62, 1581.68, 3218.61 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2355.97, 1593.8, 3362.9 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 190.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2414.11, 1546.99, 3140.54 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 157.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2412.42, 1645.27, 3113.76 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 211.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2036.6, 2263.32, 3209.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 157.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1366.75, 2463.64, 3199.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 157.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1185.07, 2592.36, 3198.88 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1280.89, 2331.35, 3198.88 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1647.71, 2474.42, 3196.88 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2090.02, 1947.2, 3064.96 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1184.45, 2643.36, 3050.2 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_god_ray_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3348.46, 1819.9, 2144.83 ); + ent.v["angles"] = ( 312, 217, 0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_god_ray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3728.51, 1721.09, 1590.06 ); + ent.v["angles"] = ( 346.078, 202.818, 1.49289 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_god_ray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3705.99, 1549.6, 1618.51 ); + ent.v["angles"] = ( 351.045, 143.012, 1.31743 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createexploder( "fx_highrise_light_sconce_glow" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2739.03, 1858.59, 1482.86 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 20; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2837.48, 1445.67, 1402.51 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3542.62, 1929.24, 1636.69 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3548.12, 1685.85, 1637.25 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3520.89, 1046.67, 1549.98 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3758.57, 1452.44, 1426.46 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3908.33, 1245.27, 1638.82 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4023.99, 1442.62, 1665.64 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createexploder( "fx_highrise_light_sconce_glow" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 4172.35, 1511.87, 1780 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 22; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3594.78, 2243.49, 1570.96 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_sconce_beam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3226.98, 2480.47, 3028.1 ); + ent.v["angles"] = ( 4.99389, 207.012, -158.738 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_sconce_beam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3226.7, 2191.97, 3028.26 ); + ent.v["angles"] = ( 3.9309, 206.708, -160.564 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_sconce_beam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3026.51, 1709.73, 2968.03 ); + ent.v["angles"] = ( 277.259, 135.851, -17.0955 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_sconce_beam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3057.61, 1660.14, 2991.92 ); + ent.v["angles"] = ( 2, 206.4, -179.256 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_edge_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2615.73, 1685.46, 2986.14 ); + ent.v["angles"] = ( 0, 90, -12 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_edge_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2635.7, 1792.44, 2993.77 ); + ent.v["angles"] = ( 0.831006, 266.087, 11.9716 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2467.62, 1746.58, 2958.04 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 348.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2967.36, 1820.95, 3064.02 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 348.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_edge_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2597.82, 1400.42, 2982.13 ); + ent.v["angles"] = ( 358.342, 82.1724, -11.8865 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_sconce_beam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2563.95, 1659.66, 2872.03 ); + ent.v["angles"] = ( 18.7394, 109.451, 141.039 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_sconce_beam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2806.95, 2253.15, 2923.49 ); + ent.v["angles"] = ( 40.9643, 212.62, -140.933 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_recessed_tall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3208.36, 2056.22, 2950.64 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 348.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_recessed_tall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3209.28, 1994.32, 2950.71 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 348.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_sconce_beam" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2903.99, 1571.61, 2787.13 ); + ent.v["angles"] = ( 81.5036, 99.0796, -140.169 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3444.61, 1688.04, 2910.43 ); + ent.v["angles"] = ( 280, 180, 176 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2592.64, 1844.79, 2648.19 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_recessed_tall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2549.11, 1626.02, 2630.58 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 348.0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2538.1, 2333.24, 2972.01 ); + ent.v["angles"] = ( 0, 91, -12 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2634.33, 2647.39, 2818.6 ); + ent.v["angles"] = ( 0, 271, 11 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2619.11, 2630.41, 3171.93 ); + ent.v["angles"] = ( 1.86388, 262.194, 11.8565 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2636.8, 2536.55, 2893.93 ); + ent.v["angles"] = ( 40, 356, 0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2464.71, 2500.98, 2955.02 ); + ent.v["angles"] = ( 8, 283, 0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3215.75, 1847.41, 3042.1 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3573.48, 1400.34, 3117.84 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_god_ray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3028.11, 2049.5, 2949.23 ); + ent.v["angles"] = ( 303.859, 245.428, 21.855 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_god_ray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2954.03, 2075.37, 2944.19 ); + ent.v["angles"] = ( 302.055, 255.961, 13.0087 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_god_ray_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2992.71, 2049.56, 2942.22 ); + ent.v["angles"] = ( 303.859, 245.428, 21.855 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3078.6, 2667.22, 2944.06 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3336.91, 2371.02, 3002 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2755.36, 2062, 2875.12 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3319.7, 1292.55, 3017.43 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2696.8, 1576.14, 2884.94 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2696.59, 1240.93, 2870.7 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_edge_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2878.47, 1350.19, 2866.37 ); + ent.v["angles"] = ( 348.007, 357.955, 0.425021 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_god_ray_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2630.69, 1758.08, 2863.39 ); + ent.v["angles"] = ( 289.644, 199.455, 66.814 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_god_ray_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2716.57, 1720.64, 2865.82 ); + ent.v["angles"] = ( 288.659, 190.807, 74.9859 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3081.57, 2268.88, 3086.73 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 348.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3044.25, 2442.17, 3082.37 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 348.0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3297.04, 1730.78, 3132.54 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 348.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3487.61, 1497.85, 3173.85 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 348.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3317.15, 1203.93, 3134.62 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 348.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2991.17, 1280.22, 3068.33 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 348.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3082.49, 1318.66, 3085.87 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 348.0 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3098.47, 1578.75, 3090.14 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 348.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2634.14, 1467.84, 2668.77 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3317.45, 1767.88, 2824.96 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2787.9, 1713.16, 2713.49 ); + ent.v["angles"] = ( 0, 270, 16 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2876.07, 1575.63, 3031.39 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createexploder( "fx_highrise_dragon_breath_ric" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1147.24, -1392.91, 3321.97 ); + ent.v["angles"] = ( 350.302, 117.825, -10.165 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 901; + ent = maps\mp\_utility::createexploder( "fx_highrise_dragon_tower_glow_ric" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2223.62, 625.375, 3145.55 ); + ent.v["angles"] = ( 277.118, 112.306, -11.3598 ); + ent.v["delay"] = 1.6; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_highrise_dragon_tower_glow_ric" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2150.42, 667.116, 3145.98 ); + ent.v["angles"] = ( 277.441, 10.918, -1.13407 ); + ent.v["delay"] = 1.8; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_highrise_dragon_tower_glow_ric" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2191.95, 738.555, 3145.98 ); + ent.v["angles"] = ( 276.704, 278.17, 6.16471 ); + ent.v["delay"] = 1.7; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_highrise_dragon_tower_glow_ric" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2266.34, 697.975, 3145.98 ); + ent.v["angles"] = ( 277.596, 199.948, -7.9795 ); + ent.v["delay"] = 1.9; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_highrise_sidequest_complete_ric" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2208.55, 682.084, 3289.98 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1003; + ent = maps\mp\_utility::createexploder( "fx_highrise_dragon_tower_absorb_ric" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2208.55, 682.084, 2876.98 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1002; + ent = maps\mp\_utility::createexploder( "fx_highrise_dragon_breath_max" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1899.62, 540.89, 3321.77 ); + ent.v["angles"] = ( 347.645, 99.6825, -6.66593 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1001; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_recessed_tiny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3222.28, 1478.04, 3007.25 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 348.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_recessed_tiny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3222.58, 1440.63, 3006.85 ); + ent.v["angles"] = ( 348, 358.978, 0.212549 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_recessed_tiny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3222.48, 1403.17, 3007.86 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 348.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_build_lamp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3600.67, 1225.37, 3104.76 ); + ent.v["angles"] = ( 11, 180, -180 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2193.95, 2002.36, 3370.71 ); + ent.v["angles"] = ( 332.532, 4.55492, -11.3167 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent_wal2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1432, 1533, 3346 ); + ent.v["angles"] = ( 90, 301.964, 75.964 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent_wal2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1859, 1179, 3346 ); + ent.v["angles"] = ( 90, 75.964, 75.963 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent_wal2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1489, 1112, 3346 ); + ent.v["angles"] = ( 90, 153.435, -26.565 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent_wall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1487, 1304, 3160 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_edge_100" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2584.43, 1269.03, 2802.3 ); + ent.v["angles"] = ( 348.007, 2.04464, -0.425018 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_lantern_yel" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3239.42, 1323.42, 1325.28 ); + ent.v["angles"] = ( 321.37, 357.201, 15.6156 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_lantern_yel" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3423.39, 1044.76, 1361.18 ); + ent.v["angles"] = ( 29.3002, 0.63371, -31.6874 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createexploder( "fx_highrise_light_lantern_yel" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3115.04, 1509.73, 1291.21 ); + ent.v["angles"] = ( 300, 244, 2 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 19; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3654.46, 2101.78, 1586.84 ); + ent.v["angles"] = ( 357.181, 273.973, 12.0252 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3731.35, 1548.45, 1594.73 ); + ent.v["angles"] = ( 357.181, 273.973, 12.0252 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4304.49, 1364.34, 1722.44 ); + ent.v["angles"] = ( 357.181, 273.973, 12.0252 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3833.2, 1131.74, 1635.28 ); + ent.v["angles"] = ( 357.181, 273.973, 12.0252 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3705.37, 1293.27, 1607.74 ); + ent.v["angles"] = ( 357.181, 273.973, 12.0252 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4017.75, 1682.72, 1677.84 ); + ent.v["angles"] = ( 357.181, 273.973, 12.0252 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3513.18, 1777.46, 1385.47 ); + ent.v["angles"] = ( 357.181, 273.973, 33.0252 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3011.3, 1544.56, 1290.37 ); + ent.v["angles"] = ( 357.181, 273.974, -11.9748 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3207.7, 1207.77, 1337.61 ); + ent.v["angles"] = ( 357.181, 273.974, -11.9748 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2833.14, 286.665, 2790.74 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2921.53, 485.156, 2795.59 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2544.51, -730.449, 2776.97 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2566.46, 471.317, 2962.02 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1655.29, -173.601, 2788.43 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1921.23, 1.804, 2788.62 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1535.95, -605.784, 1205.21 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1854.47, -206.391, 1198.72 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_lantern_red" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1956.36, 193.943, 1232.18 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1738.24, 90.4635, 1214.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1485.65, 1540.57, 3399.58 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1463.46, 1288.78, 3397.15 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1259.22, 1070.13, 3410.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1765.28, 1087.43, 3410.44 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1766.18, 1712.03, 3571.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1654.98, 2019.46, 3577.66 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2182.6, 1557.06, 3400.09 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1602.86, 1530.88, 3222.68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1704.82, 1125.59, 3224.68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1899.05, 1970.54, 3221.01 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1363.86, 1872.36, 3222.11 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1458.94, 1657.15, 3380.88 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1337.38, 1026.47, 3711.14 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1637.23, 1803.45, 3402.52 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createexploder( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1503.41, 2486.2, 3047.74 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 28; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1524.83, 2025.97, 3047.16 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 354.0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1695.5, 1594.28, 3040.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 357.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1709.53, 1747.17, 3043.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 75.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createexploder( "fx_highrise_god_ray_cool_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3069.09, 1315.31, 3074.5 ); + ent.v["angles"] = ( 73.8317, 162.315, 152.562 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 18; + ent = maps\mp\_utility::createexploder( "fx_highrise_god_ray_cool_md" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2998.64, 1446.27, 3074.65 ); + ent.v["angles"] = ( 73.4575, 221.539, -150.225 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 18; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3303.9, 1526.44, 3011.21 ); + ent.v["angles"] = ( 355, 270.088, -1.00244 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_god_ray_cool_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2679.84, 1805.5, 2876.87 ); + ent.v["angles"] = ( 296.261, 213.47, 53.6678 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3517.86, 1484.69, 3037.26 ); + ent.v["angles"] = ( 358, 270.035, -1 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2570.9, 1409.15, 3105.96 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 76.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2548.95, 1413.6, 3104.49 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2708.6, 1426.81, 3010.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3070.14, 1387.29, 2901.64 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 324.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1887.95, 2601.71, 3079.12 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1924.07, 2594.16, 3051.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1889.12, 2640.49, 3079.11 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1895.27, 2497.53, 3092 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1847.81, 2514, 3042 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2079.36, 2330.44, 3083.88 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2855, 1575.13, 2951.85 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2836.25, 1476.09, 2889.67 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3408.4, 1724.81, 2870.78 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3308.16, 1796.09, 2137.05 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3926.66, 1843.34, 2284.8 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3691.42, 1435.88, 1445.93 ); + ent.v["angles"] = ( 290, 180, 180 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3728.29, 1439.72, 1448.04 ); + ent.v["angles"] = ( 290, 180, 180 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3227.45, 1301.67, 1336.88 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1749.81, -161.746, 2880.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1797.26, -157.369, 2880.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2620.55, 520.277, 3050.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2843.22, 306.648, 3040.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2676.16, 282.999, 2895.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2593.87, -511.697, 2885.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1407.57, -465.3, 2704.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1408.65, -457.887, 2735.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2560.5, -705.708, 2741.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2716.95, 500.098, 2712.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2126.64, 191.041, 2744.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2105.6, 183.397, 2791.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1853.52, -159.018, 2733.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2105.87, 490.816, 2737.94 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2108.57, 484.478, 2767.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2214.35, 398.459, 2732.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1841.72, -696.837, 1442.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1797.24, -774.835, 1455.88 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1796.43, -107.169, 1455.88 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1645.46, -293.835, 1455.88 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1787.7, -102.926, 1397.01 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1829.45, -163.244, 1331.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1717.33, -569.234, 1327.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2299.73, -311.967, 1341.57 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_build_lamp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2374.76, -319.422, 1222.82 ); + ent.v["angles"] = ( 0, 241, 20 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_build_lamp" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3599.9, 1175.49, 3106.71 ); + ent.v["angles"] = ( 11, 180, -180 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createexploder( "fx_highrise_light_sconce_glow" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 3541.54, 1399.8, 1636.2 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 21; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2012.42, 1347.3, 1532.28 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1490, 1270, 2111 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3176.1, 2190.87, 2527.66 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2673.41, 421, 1251.5 ); + ent.v["angles"] = ( 1.00179, 60.2, 1.05802 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2208.23, 518, 1247.5 ); + ent.v["angles"] = ( 1.00179, 60.2, 1.05802 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2088, 234.23, 1419.5 ); + ent.v["angles"] = ( 1.00179, 150.2, 1.05802 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2707.23, 748.23, 1253.14 ); + ent.v["angles"] = ( 28.2045, 55.6718, -17.8869 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2436, -289, 2838 ); + ent.v["angles"] = ( 357.168, 327.961, 1.49371 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createexploder( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2672.31, -228.43, 2825.07 ); + ent.v["angles"] = ( 324.396, 327.426, 4.03309 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 17; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1867.08, -126.5, 2825.5 ); + ent.v["angles"] = ( 1.00179, 60, 1.05802 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1445.46, -535.1, 2845.35 ); + ent.v["angles"] = ( 338.7, 63.6553, -7.41061 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2432.53, 260.46, 2838.18 ); + ent.v["angles"] = ( 29.9493, 328.321, -3.83146 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2457.14, 556, 2883.48 ); + ent.v["angles"] = ( 304.4, 180, 180 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2815, 497, 2996 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 240.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1874.15, 1546.99, 1532.04 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1598.59, 1546.6, 1531.72 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1384.83, 1209.33, 1892.45 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2007.63, 1346.43, 1892.85 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2799.48, 545.947, 3095.23 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent_wall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2123.63, 515.78, 2801 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 240.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent_wall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2374.03, 676.13, 2974 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 150.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createexploder( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1671.34, 278.75, 1414.9 ); + ent.v["angles"] = ( 42.0435, 154.841, 10.9704 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 13; + ent = maps\mp\_utility::createexploder( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1457.92, -411.62, 1255.5 ); + ent.v["angles"] = ( 1.00179, 330.2, 1.05802 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 14; + ent = maps\mp\_utility::createexploder( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2630.67, -137.02, 1251.24 ); + ent.v["angles"] = ( 31.6559, 150.193, -0.919528 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 16; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_bulb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3746.12, 1924.82, 1432.95 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4007.23, 1848.55, 2317 ); + ent.v["angles"] = ( 326.505, 277.849, -93.3464 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3929.63, 1868.95, 2893 ); + ent.v["angles"] = ( 311.657, 154.584, 17.5664 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1410.58, 1112.11, 1511.13 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1432.67, 1116, 1511.4 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1678, 1163, 1584 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3056.85, 349.04, 1251.07 ); + ent.v["angles"] = ( 1.00179, 60.2, 1.05802 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_recessed" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3799.43, 1406.53, 1434.99 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 343.9 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createexploder( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1407.3, 2289.71, 3169.82 ); + ent.v["angles"] = ( 16.5044, 175.086, -17.483 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 28; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent_wall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1658.06, 267.17, 1208.98 ); + ent.v["angles"] = ( 5.77029, 330.51, 10.08 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2677.81, -215.77, 1419.49 ); + ent.v["angles"] = ( 2.42953, 330.171, -1.39235 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1674.98, -546.49, 1419.41 ); + ent.v["angles"] = ( 11.7655, 152.791, 6.45455 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1559.83, -450.2, 1256.2 ); + ent.v["angles"] = ( 329.098, 330.754, 4.30758 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2032.62, -308.08, 1258.5 ); + ent.v["angles"] = ( 1.00179, 60.2, 1.05802 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_highrise_light_fluorescent_wal2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2816.01, 1601.82, 2893.92 ); + ent.v["angles"] = ( 316.44, 273.037, -2.09048 ); + ent.v["delay"] = -92; +} diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/gametypes_zm/zstandard.gsc b/ZM/Maps/Die Rise/maps/mp/gametypes_zm/zstandard.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/gametypes_zm/zstandard.gsc rename to ZM/Maps/Die Rise/maps/mp/gametypes_zm/zstandard.gsc diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise.gsc b/ZM/Maps/Die Rise/maps/mp/zm_highrise.gsc similarity index 99% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise.gsc rename to ZM/Maps/Die Rise/maps/mp/zm_highrise.gsc index ff808ca..32d97d0 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise.gsc +++ b/ZM/Maps/Die Rise/maps/mp/zm_highrise.gsc @@ -245,8 +245,8 @@ main() /# execdevgui( "devgui_zombie_highrise" ); level.custom_devgui = ::zombie_highrise_devgui; - adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Lighting:3/Power On:1\" \"set zombie_devgui_hrpowerlighting on\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Lighting:3/Power Off:2\" \"set zombie_devgui_hrpowerlighting off\" \n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Lighting:3/Power On:1\" \"set zombie_devgui_hrpowerlighting on\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Lighting:3/Power Off:2\" \"set zombie_devgui_hrpowerlighting off\" \\n" ); level thread watch_lightpower_devgui(); #/ level thread maps\mp\zombies\_zm::post_main(); @@ -1107,12 +1107,8 @@ init_elevator_shaft_zones() enable_zone_on_flag( str_zone_name, str_flag_name ) { -/# assert( flag_exists( str_flag_name ), "Tried to enable zone on flag, but flag " + str_flag_name + " hasn't been initialized" ); -#/ -/# assert( isdefined( level.zones[str_zone_name] ), "There is no zone with name '" + str_zone_name + " in the map!" ); -#/ flag_wait( str_flag_name ); enable_zone( str_zone_name ); } @@ -1186,7 +1182,7 @@ give_personality_characters() #/ switch ( self.characterindex ) { - case "2": + case 2: self character\c_highrise_player_farmgirl::main(); self setviewmodel( "c_zom_farmgirl_viewhands" ); level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); @@ -1195,7 +1191,7 @@ give_personality_characters() self set_player_is_female( 1 ); self.whos_who_shader = "c_zom_player_farmgirl_dlc1_fb"; break; - case "0": + case 0: self character\c_highrise_player_oldman::main(); self setviewmodel( "c_zom_oldman_viewhands" ); level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); @@ -1204,7 +1200,7 @@ give_personality_characters() self set_player_is_female( 0 ); self.whos_who_shader = "c_zom_player_oldman_dlc1_fb"; break; - case "3": + case 3: self character\c_highrise_player_engineer::main(); self setviewmodel( "c_zom_engineer_viewhands" ); level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); @@ -1213,7 +1209,7 @@ give_personality_characters() self set_player_is_female( 0 ); self.whos_who_shader = "c_zom_player_engineer_dlc1_fb"; break; - case "1": + case 1: self character\c_highrise_player_reporter::main(); self setviewmodel( "c_zom_reporter_viewhands" ); level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); @@ -1265,10 +1261,8 @@ assign_lowest_unused_character_index() return 1; return 3; - continue; } - - if ( player.characterindex == 3 || player.characterindex == 1 ) + else if ( player.characterindex == 3 || player.characterindex == 1 ) { if ( randomint( 100 ) > 50 ) return 0; @@ -1606,9 +1600,8 @@ is_magic_box_in_inverted_building() b_is_in_inverted_building = 0; a_boxes_in_inverted_building = array( "start_chest" ); str_location = level.chests[level.chest_index].script_noteworthy; -/# assert( isdefined( str_location ), "is_magic_box_in_inverted_building() can't find magic box location" ); -#/ + for ( i = 0; i < a_boxes_in_inverted_building.size; i++ ) { if ( a_boxes_in_inverted_building[i] == str_location ) @@ -1705,16 +1698,16 @@ highrise_audio_custom_response_line( player, index, category, type ) switch ( player.characterindex ) { - case "0": + case 0: level maps\mp\zombies\_zm_audio::setup_hero_rival( player, samuel, marlton, category, type ); break; - case "1": + case 1: level maps\mp\zombies\_zm_audio::setup_hero_rival( player, russman, misty, category, type ); break; - case "2": + case 2: level maps\mp\zombies\_zm_audio::setup_hero_rival( player, marlton, samuel, category, type ); break; - case "3": + case 3: level maps\mp\zombies\_zm_audio::setup_hero_rival( player, misty, russman, category, type ); break; } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_achievement.gsc b/ZM/Maps/Die Rise/maps/mp/zm_highrise_achievement.gsc similarity index 100% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_achievement.gsc rename to ZM/Maps/Die Rise/maps/mp/zm_highrise_achievement.gsc diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_amb.gsc b/ZM/Maps/Die Rise/maps/mp/zm_highrise_amb.gsc similarity index 100% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_amb.gsc rename to ZM/Maps/Die Rise/maps/mp/zm_highrise_amb.gsc diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_buildables.gsc b/ZM/Maps/Die Rise/maps/mp/zm_highrise_buildables.gsc similarity index 100% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_buildables.gsc rename to ZM/Maps/Die Rise/maps/mp/zm_highrise_buildables.gsc diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_classic.gsc b/ZM/Maps/Die Rise/maps/mp/zm_highrise_classic.gsc similarity index 99% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_classic.gsc rename to ZM/Maps/Die Rise/maps/mp/zm_highrise_classic.gsc index 46a689d..72b768b 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_classic.gsc +++ b/ZM/Maps/Die Rise/maps/mp/zm_highrise_classic.gsc @@ -636,14 +636,16 @@ is_player_killable( player, checkignoremeflag ) return true; } +#using_animtree("zombie_escape_elevator"); + init_escape_elevators_animtree() { - scriptmodelsuseanimtree( -1 ); + scriptmodelsuseanimtree( #animtree ); } escapeelevatoruseanimtree() { - self useanimtree( -1 ); + self useanimtree( #animtree ); } init_escape_pod() @@ -651,13 +653,11 @@ init_escape_pod() flag_init( "escape_pod_needs_reset" ); level thread init_escape_elevators_anims(); /# - adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Escape Pod:2/Reset To Top:1\" \"set zombie_devgui_hrescapepodreset 1\" \n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Escape Pod:2/Reset To Top:1\" \"set zombie_devgui_hrescapepodreset 1\" \\n" ); level thread watch_escapepod_devgui(); #/ } -#using_animtree("zombie_escape_elevator"); - init_escape_elevators_anims() { level.escape_elevator_1_state = %v_zombie_elevator_escape_player1_loop; @@ -884,19 +884,19 @@ escape_pod_state( set, wait_for_current_end ) switch ( set ) { - case "1": + case 1: self.state_anim = level.escape_elevator_1_state; break; - case "2": + case 2: self.state_anim = level.escape_elevator_2_state; break; - case "3": + case 3: self.state_anim = level.escape_elevator_3_state; break; - case "4": + case 4: self.state_anim = level.escape_elevator_4_state; break; - case "5": + case 5: self.state_anim = level.escape_elevator_5_state; break; } @@ -925,20 +925,20 @@ escape_pod_state_run() switch ( self.state ) { - case "1": + case 1: self.state_anim = level.escape_elevator_1_state; shouldwait = 0; break; - case "2": + case 2: self.state_anim = level.escape_elevator_2_state; break; - case "3": + case 3: self.state_anim = level.escape_elevator_3_state; break; - case "4": + case 4: self.state_anim = level.escape_elevator_4_state; break; - case "5": + case 5: self.state_anim = level.escape_elevator_5_state; break; } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_distance_tracking.gsc b/ZM/Maps/Die Rise/maps/mp/zm_highrise_distance_tracking.gsc similarity index 100% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_distance_tracking.gsc rename to ZM/Maps/Die Rise/maps/mp/zm_highrise_distance_tracking.gsc diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_elevators.gsc b/ZM/Maps/Die Rise/maps/mp/zm_highrise_elevators.gsc similarity index 98% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_elevators.gsc rename to ZM/Maps/Die Rise/maps/mp/zm_highrise_elevators.gsc index 0658637..8f03681 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_elevators.gsc +++ b/ZM/Maps/Die Rise/maps/mp/zm_highrise_elevators.gsc @@ -10,9 +10,11 @@ #include maps\mp\zombies\_zm_ai_basic; #include maps\mp\zombies\_zm_ai_leaper; +#using_animtree("zombie_perk_elevator"); + init_perk_elvators_animtree() { - scriptmodelsuseanimtree( -1 ); + scriptmodelsuseanimtree( #animtree ); } init_elevators() @@ -55,8 +57,6 @@ quick_revive_solo_watch() } } -#using_animtree("zombie_perk_elevator"); - init_perk_elevators_anims() { level.perk_elevators_door_open_state = %v_zombie_elevator_doors_open; @@ -81,7 +81,7 @@ init_perk_elevators_anims() perkelevatoruseanimtree() { - self useanimtree( -1 ); + self useanimtree( #animtree ); } perkelevatordoor( set ) @@ -324,22 +324,25 @@ init_elevator( elevatorname, force_starting_floor, force_starting_origin ) elevator.body = piece; piece.is_elevator = 1; elevator.body perkelevatoruseanimtree(); -/# assert( isdefined( piece.script_location ) ); -#/ elevator.body.current_level = piece.script_location; elevator.body.starting_floor = piece.script_location; elevator.roof_paths = elevator_path_nodes( "bldg" + elevatorname, "moving" ); elevator.floors = []; elevator.floors[piece.script_location] = piece; elevator.floors[piece.script_location].starting_position = piece.origin; + elevator.floors[piece.script_location].paths = elevator_path_nodes( "bldg" + elevatorname, "floor" + piece.script_location ); - for ( elevator.floors[piece.script_location].paths = elevator_path_nodes( "bldg" + elevatorname, "floor" + piece.script_location ); isdefined( piece.target ); elevator.floors[piece.script_location].paths = elevator_path_nodes( "bldg" + elevatorname, "floor" + piece.script_location ) ) + while ( isdefined( piece.target ) ) { piece = getstruct( piece.target, "targetname" ); piece.is_elevator = 1; - asm_cond( !isdefined( elevator.floors[piece.script_location] ), loc_2843 ); - elevator.floors[piece.script_location] = piece; + + if ( !isdefined( elevator.floors[piece.script_location] ) ) + { + elevator.floors[piece.script_location] = piece; + elevator.floors[piece.script_location].paths = elevator_path_nodes( "bldg" + elevatorname, "floor" + piece.script_location ); + } } if ( elevatorname != "3c" ) @@ -1214,19 +1217,19 @@ init_elevator_devgui( elevatorname, elevator ) /# if ( !isdefined( elevatorname ) ) { - adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Elevators:1/Stop All:1\" \"set zombie_devgui_hrelevatorstop all\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Elevators:1/Unstop All:2\" \"set zombie_devgui_hrelevatorgo all\" \n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Elevators:1/Stop All:1\" \"set zombie_devgui_hrelevatorstop all\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Elevators:1/Unstop All:2\" \"set zombie_devgui_hrelevatorgo all\" \\n" ); level thread watch_elevator_devgui( "all", 1 ); } else { - adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Elevators:1/" + elevatorname + "/Stop:1\" \"set zombie_devgui_hrelevatorstop " + elevatorname + "\" \n" ); - adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Elevators:1/" + elevatorname + "/Go:2\" \"set zombie_devgui_hrelevatorgo " + elevatorname + "\" \n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Elevators:1/" + elevatorname + "/Stop:1\" \"set zombie_devgui_hrelevatorstop " + elevatorname + "\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Elevators:1/" + elevatorname + "/Go:2\" \"set zombie_devgui_hrelevatorgo " + elevatorname + "\" \\n" ); for ( i = 0; i < elevator.floors.size; i++ ) { fname = elevator.floors["" + i].script_location; - adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Elevators:1/" + elevatorname + "/stop " + i + " [floor " + fname + "]\" \"set zombie_devgui_hrelevatorfloor " + i + "; set zombie_devgui_hrelevatorgo " + elevatorname + "\" \n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Elevators:1/" + elevatorname + "/stop " + i + " [floor " + fname + "]\" \"set zombie_devgui_hrelevatorfloor " + i + "; set zombie_devgui_hrelevatorgo " + elevatorname + "\" \\n" ); } elevator thread watch_elevator_devgui( elevatorname, 0 ); diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_ffotd.gsc b/ZM/Maps/Die Rise/maps/mp/zm_highrise_ffotd.gsc similarity index 100% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_ffotd.gsc rename to ZM/Maps/Die Rise/maps/mp/zm_highrise_ffotd.gsc diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_fx.gsc b/ZM/Maps/Die Rise/maps/mp/zm_highrise_fx.gsc similarity index 100% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_fx.gsc rename to ZM/Maps/Die Rise/maps/mp/zm_highrise_fx.gsc diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_gamemodes.gsc b/ZM/Maps/Die Rise/maps/mp/zm_highrise_gamemodes.gsc similarity index 100% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_gamemodes.gsc rename to ZM/Maps/Die Rise/maps/mp/zm_highrise_gamemodes.gsc diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq.gsc b/ZM/Maps/Die Rise/maps/mp/zm_highrise_sq.gsc similarity index 98% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq.gsc rename to ZM/Maps/Die Rise/maps/mp/zm_highrise_sq.gsc index 7bf2fe3..af29211 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq.gsc +++ b/ZM/Maps/Die Rise/maps/mp/zm_highrise_sq.gsc @@ -150,7 +150,7 @@ init_sidequest() m_ball hide(); } - scriptmodelsuseanimtree( -1 ); + scriptmodelsuseanimtree( #animtree ); level.scr_anim["fxanim_props"]["trample_gen_ab"] = %fxanim_zom_highrise_trample_gen_ab_anim; level.scr_anim["fxanim_props"]["trample_gen_ba"] = %fxanim_zom_highrise_trample_gen_ba_anim; level.scr_anim["fxanim_props"]["trample_gen_cd"] = %fxanim_zom_highrise_trample_gen_cd_anim; @@ -437,9 +437,7 @@ mahjong_tiles_setup() a_winds = array_randomize( array( "north", "south", "east", "west" ) ); a_colors = array_randomize( array( "blk", "blu", "grn", "red" ) ); a_locs = array_randomize( getstructarray( "sq_tile_loc_random", "targetname" ) ); -/# assert( a_locs.size > a_winds.size, "zm_highrise_sq: not enough locations for mahjong tiles!" ); -#/ a_wind_order = array( "none" ); for ( i = 0; i < a_winds.size; i++ ) @@ -543,25 +541,22 @@ sidequest_done() } -get_variant_from_entity_num( player_number ) +get_variant_from_entity_num( player_number = 0 ) { - if ( !isdefined( player_number ) ) - player_number = 0; - post_fix = "a"; switch ( player_number ) { - case "0": + case 0: post_fix = "a"; break; - case "1": + case 1: post_fix = "b"; break; - case "2": + case 2: post_fix = "c"; break; - case "3": + case 3: post_fix = "d"; break; } @@ -870,13 +865,13 @@ vo_richtofen_nav_card() { switch ( self.characterindex ) { - case "2": + case 2: break; - case "0": + case 0: break; - case "3": + case 3: break; - case "1": + case 1: break; } @@ -901,13 +896,13 @@ vo_find_nav_card() { switch ( self.characterindex ) { - case "2": + case 2: break; - case "0": + case 0: break; - case "3": + case 3: break; - case "1": + case 1: break; } } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_atd.gsc b/ZM/Maps/Die Rise/maps/mp/zm_highrise_sq_atd.gsc similarity index 100% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_atd.gsc rename to ZM/Maps/Die Rise/maps/mp/zm_highrise_sq_atd.gsc diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_pts.gsc b/ZM/Maps/Die Rise/maps/mp/zm_highrise_sq_pts.gsc similarity index 99% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_pts.gsc rename to ZM/Maps/Die Rise/maps/mp/zm_highrise_sq_pts.gsc index 5a220e9..5ea4aed 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_pts.gsc +++ b/ZM/Maps/Die Rise/maps/mp/zm_highrise_sq_pts.gsc @@ -288,6 +288,8 @@ is_springpad_in_place( m_springpad, is_generator ) } } +#using_animtree("fxanim_props"); + pts_springpad_fling( str_spot_name, m_buddy_springpad ) { str_anim1 = undefined; @@ -318,7 +320,7 @@ pts_springpad_fling( str_spot_name, m_buddy_springpad ) m_anim = spawn( "script_model", ( 2090, 675, 3542 ) ); m_anim.angles = ( 0, 0, 0 ); m_anim setmodel( "fxanim_zom_highrise_trample_gen_mod" ); - m_anim useanimtree( -1 ); + m_anim useanimtree( #animtree ); m_anim.targetname = "trample_gen_" + str_spot_name; pts_springpad_anim_ball( m_buddy_springpad, m_anim, str_anim1, str_anim2 ); } @@ -468,12 +470,8 @@ pts_putdown_trigs_remove_for_player( player ) foreach ( s_lion_spot in a_lion_spots ) { if ( !isdefined( s_lion_spot.pts_putdown_trigs ) ) - { continue; - continue; - } - - if ( isdefined( s_lion_spot.pts_putdown_trigs[player.characterindex] ) ) + else if ( isdefined( s_lion_spot.pts_putdown_trigs[player.characterindex] ) ) { s_lion_spot.pts_putdown_trigs[player.characterindex] delete(); arrayremoveindex( s_lion_spot.pts_putdown_trigs, player.characterindex, 1 ); diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_slb.gsc b/ZM/Maps/Die Rise/maps/mp/zm_highrise_sq_slb.gsc similarity index 100% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_slb.gsc rename to ZM/Maps/Die Rise/maps/mp/zm_highrise_sq_slb.gsc diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_ssp.gsc b/ZM/Maps/Die Rise/maps/mp/zm_highrise_sq_ssp.gsc similarity index 100% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_ssp.gsc rename to ZM/Maps/Die Rise/maps/mp/zm_highrise_sq_ssp.gsc diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_utility.gsc b/ZM/Maps/Die Rise/maps/mp/zm_highrise_utility.gsc similarity index 99% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_utility.gsc rename to ZM/Maps/Die Rise/maps/mp/zm_highrise_utility.gsc index 02393eb..75fb576 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_utility.gsc +++ b/ZM/Maps/Die Rise/maps/mp/zm_highrise_utility.gsc @@ -153,11 +153,8 @@ spawned_collision_fix() } } -connect_zones_for_ffotd( zone_name_a, zone_name_b, one_way ) +connect_zones_for_ffotd( zone_name_a, zone_name_b, one_way = 0 ) { - if ( !isdefined( one_way ) ) - one_way = 0; - zone_init( zone_name_a ); zone_init( zone_name_b ); enable_zone( zone_name_a ); diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_ai_leaper.gsc b/ZM/Maps/Die Rise/maps/mp/zombies/_zm_ai_leaper.gsc similarity index 99% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_ai_leaper.gsc rename to ZM/Maps/Die Rise/maps/mp/zombies/_zm_ai_leaper.gsc index 89e3f4d..bb6d336 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_ai_leaper.gsc +++ b/ZM/Maps/Die Rise/maps/mp/zombies/_zm_ai_leaper.gsc @@ -86,9 +86,8 @@ leaper_spawner_init() level.leaper_spawners[i].is_enabled = 1; level.leaper_spawners[i].script_forcespawn = 1; } -/# + assert( level.leaper_spawners.size > 0 ); -#/ level.leaper_health = 100; array_thread( level.leaper_spawners, ::add_spawn_function, ::leaper_init ); /# @@ -110,14 +109,13 @@ leaper_spawner_zone_check() if ( level.zones[a_zones[i]].leaper_locations.size == 0 ) { n_zones_missing_spawners++; - str_zone_list = str_zone_list + "\n " + a_zones[i]; + str_zone_list = str_zone_list + "\\n " + a_zones[i]; } - str_spawn_count_list = str_spawn_count_list + a_zones[i] + ": " + level.zones[a_zones[i]].leaper_locations.size + "\n"; + str_spawn_count_list = str_spawn_count_list + a_zones[i] + ": " + level.zones[a_zones[i]].leaper_locations.size + "\\n"; } -/# + assert( n_zones_missing_spawners == 0, "All zones require at least one leaper spawn point." + n_zones_missing_spawners + " zones are missing leaper spawners. They are: " + str_zone_list ); -#/ /# println( "========== LEAPER SPAWN COUNT PER ZONE ===========" ); println( str_spawn_count_list ); @@ -1121,7 +1119,7 @@ leaper_spawn_failsafe() if ( isdefined( self.traversestartnode ) ) str_traversal_data = " Last traversal used = " + self.traversestartnode.animscript + " at " + self.traversestartnode.origin; - iprintln( "leaper_spawn_failsafe() killing leaper at " + self.origin + " with spawn point " + self.spawn_point.origin + "!\n" + str_traversal_data ); + iprintln( "leaper_spawn_failsafe() killing leaper at " + self.origin + " with spawn point " + self.spawn_point.origin + "!\\n" + str_traversal_data ); #/ self dodamage( self.health + 100, ( 0, 0, 0 ) ); break; diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_banking.gsc b/ZM/Maps/Die Rise/maps/mp/zombies/_zm_banking.gsc similarity index 100% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_banking.gsc rename to ZM/Maps/Die Rise/maps/mp/zombies/_zm_banking.gsc diff --git a/ZM/Maps/Die Rise/maps/mp/zombies/_zm_equip_springpad.gsc b/ZM/Maps/Die Rise/maps/mp/zombies/_zm_equip_springpad.gsc new file mode 100644 index 0000000..1892646 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/zombies/_zm_equip_springpad.gsc @@ -0,0 +1,632 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_power; +#include maps\mp\zombies\_zm_buildables; + +init( pickupstring, howtostring ) +{ + if ( !maps\mp\zombies\_zm_equipment::is_equipment_included( "equip_springpad_zm" ) ) + return; + + level.springpad_name = "equip_springpad_zm"; + init_animtree(); + maps\mp\zombies\_zm_equipment::register_equipment( "equip_springpad_zm", pickupstring, howtostring, "zom_hud_trample_steam_complete", "springpad", undefined, ::transferspringpad, ::dropspringpad, ::pickupspringpad, ::placespringpad ); + maps\mp\zombies\_zm_equipment::add_placeable_equipment( "equip_springpad_zm", "p6_anim_zm_buildable_view_tramplesteam" ); + level thread onplayerconnect(); + maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "equip_springpad", pickupstring ); + level._effect["springpade_on"] = loadfx( "maps/zombie_highrise/fx_highrise_trmpl_steam_os" ); + + if ( !isdefined( level.springpad_trigger_radius ) ) + level.springpad_trigger_radius = 72; + + thread wait_init_damage(); +} + +wait_init_damage() +{ + while ( !isdefined( level.zombie_vars ) || !isdefined( level.zombie_vars["zombie_health_start"] ) ) + wait 1; + + level.springpad_damage = maps\mp\zombies\_zm::ai_zombie_health( 50 ); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread onplayerspawned(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + self thread setupwatchers(); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread watchspringpaduse(); + } +} + +setupwatchers() +{ + self waittill( "weapon_watchers_created" ); + + watcher = maps\mp\gametypes_zm\_weaponobjects::getweaponobjectwatcher( "equip_springpad" ); + watcher.onspawnretrievetriggers = maps\mp\zombies\_zm_equipment::equipment_onspawnretrievableweaponobject; +} + +watchspringpaduse() +{ + self notify( "watchSpringPadUse" ); + self endon( "watchSpringPadUse" ); + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "equipment_placed", weapon, weapname ); + + if ( weapname == level.springpad_name ) + { + self cleanupoldspringpad(); + self.buildablespringpad = weapon; + self thread startspringpaddeploy( weapon ); + } + } +} + +cleanupoldspringpad() +{ + if ( isdefined( self.buildablespringpad ) ) + { + if ( isdefined( self.buildablespringpad.stub ) ) + { + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub ); + self.buildablespringpad.stub = undefined; + } + + self.buildablespringpad delete(); + self.springpad_kills = undefined; + } + + if ( isdefined( level.springpad_sound_ent ) ) + { + level.springpad_sound_ent delete(); + level.springpad_sound_ent = undefined; + } +} + +watchforcleanup() +{ + self notify( "springpad_cleanup" ); + self endon( "springpad_cleanup" ); + self waittill_any( "death_or_disconnect", "equip_springpad_zm_taken", "equip_springpad_zm_pickup" ); + cleanupoldspringpad(); +} + +placespringpad( origin, angles ) +{ + if ( isdefined( self.turret_placement ) && !self.turret_placement["result"] ) + { + forward = anglestoforward( angles ); + origin -= -24 * forward; + } + + item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", origin, angles, level.springpad_trigger_radius, -24 ); + + if ( isdefined( item ) ) + { + item.springpad_kills = self.springpad_kills; + item.requires_pickup = 1; + item.zombie_attack_callback = ::springpad_fling_attacker; + } + + self.springpad_kills = undefined; + return item; +} + +dropspringpad() +{ + item = self maps\mp\zombies\_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", self.origin, self.angles, level.springpad_trigger_radius, -24 ); + + if ( isdefined( item ) ) + { + item.springpad_kills = self.springpad_kills; + item.requires_pickup = 1; + } + + self.springpad_kills = undefined; + return item; +} + +pickupspringpad( item ) +{ + self.springpad_kills = item.springpad_kills; + item.springpad_kills = undefined; +} + +transferspringpad( fromplayer, toplayer ) +{ + buildablespringpad = toplayer.buildablespringpad; + toarmed = 0; + + if ( isdefined( buildablespringpad ) ) + toarmed = isdefined( buildablespringpad.is_armed ) && buildablespringpad.is_armed; + + springpad_kills = toplayer.springpad_kills; + fromarmed = 0; + + if ( isdefined( fromplayer.buildablespringpad ) ) + fromarmed = isdefined( fromplayer.buildablespringpad.is_armed ) && fromplayer.buildablespringpad.is_armed; + + toplayer.buildablespringpad = fromplayer.buildablespringpad; + toplayer.buildablespringpad.original_owner = toplayer; + toplayer.buildablespringpad.owner = toplayer; + toplayer notify( "equip_springpad_zm_taken" ); + toplayer.springpad_kills = fromplayer.springpad_kills; + toplayer thread startspringpaddeploy( toplayer.buildablespringpad, fromarmed ); + fromplayer.buildablespringpad = buildablespringpad; + fromplayer.springpad_kills = springpad_kills; + fromplayer notify( "equip_springpad_zm_taken" ); + + if ( isdefined( fromplayer.buildablespringpad ) ) + { + fromplayer thread startspringpaddeploy( fromplayer.buildablespringpad, toarmed ); + fromplayer.buildablespringpad.original_owner = fromplayer; + fromplayer.buildablespringpad.owner = fromplayer; + } + else + fromplayer maps\mp\zombies\_zm_equipment::equipment_release( "equip_springpad_zm" ); +} + +springpad_in_range( delta, origin, radius ) +{ + if ( distancesquared( self.target.origin, origin ) < radius * radius ) + return true; + + return false; +} + +springpad_power_on( origin, radius ) +{ +/# + println( "^1ZM POWER: trap on\\n" ); +#/ + if ( !isdefined( self.target ) ) + return; + + self.target.power_on = 1; + self.target.power_on_time = gettime(); +} + +springpad_power_off( origin, radius ) +{ +/# + println( "^1ZM POWER: trap off\\n" ); +#/ + if ( !isdefined( self.target ) ) + return; + + self.target.power_on = 0; +} + +startspringpaddeploy( weapon, armed ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_springpad_zm_taken" ); + self thread watchforcleanup(); + electricradius = 45; + + if ( isdefined( self.springpad_kills ) ) + { + weapon.springpad_kills = self.springpad_kills; + self.springpad_kills = undefined; + } + + if ( !isdefined( weapon.springpad_kills ) ) + weapon.springpad_kills = 0; + + if ( isdefined( weapon ) ) + { +/# + weapon thread debugspringpad( electricradius ); +#/ + if ( isdefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power ) + { + weapon.power_on = 0; + maps\mp\zombies\_zm_power::add_temp_powered_item( ::springpad_power_on, ::springpad_power_off, ::springpad_in_range, maps\mp\zombies\_zm_power::cost_high, 1, weapon.power_on, weapon ); + } + else + weapon.power_on = 1; + + if ( !weapon.power_on ) + self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" ); + + self thread springpadthink( weapon, electricradius, armed ); + + if ( !( isdefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power ) ) + { + + } + + self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( weapon ); + + weapon waittill( "death" ); + + if ( isdefined( level.springpad_sound_ent ) ) + { + level.springpad_sound_ent playsound( "wpn_zmb_electrap_stop" ); + level.springpad_sound_ent delete(); + level.springpad_sound_ent = undefined; + } + + self notify( "springpad_cleanup" ); + } +} + +#using_animtree("zombie_springpad"); + +init_animtree() +{ + scriptmodelsuseanimtree( #animtree ); +} + +springpad_animate( weapon, armed ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_springpad_zm_taken" ); + weapon endon( "death" ); + weapon useanimtree( #animtree ); + f_animlength = getanimlength( %o_zombie_buildable_tramplesteam_reset_zombie ); + r_animlength = getanimlength( %o_zombie_buildable_tramplesteam_reset ); + l_animlength = getanimlength( %o_zombie_buildable_tramplesteam_launch ); + weapon thread springpad_audio(); + prearmed = 0; + + if ( isdefined( armed ) && armed ) + prearmed = 1; + + fast_reset = 0; + + while ( isdefined( weapon ) ) + { + if ( !prearmed ) + { + if ( fast_reset ) + { + weapon setanim( %o_zombie_buildable_tramplesteam_reset_zombie ); + weapon thread playspringpadresetaudio( f_animlength ); + wait( f_animlength ); + } + else + { + weapon setanim( %o_zombie_buildable_tramplesteam_reset ); + weapon thread playspringpadresetaudio( r_animlength ); + wait( r_animlength ); + } + } + else + wait 0.05; + + prearmed = 0; + weapon notify( "armed" ); + fast_reset = 0; + + if ( isdefined( weapon ) ) + { + weapon setanim( %o_zombie_buildable_tramplesteam_compressed_idle ); + + weapon waittill( "fling", fast ); + + fast_reset = fast; + } + + if ( isdefined( weapon ) ) + { + weapon setanim( %o_zombie_buildable_tramplesteam_launch ); + wait( l_animlength ); + } + } +} + +playspringpadresetaudio( time ) +{ + self endon( "springpadAudioCleanup" ); + ent = spawn( "script_origin", self.origin ); + ent playloopsound( "zmb_highrise_launcher_reset_loop" ); + self thread deleteentwhensounddone( time, ent ); + + self waittill( "death" ); + + ent delete(); +} + +deleteentwhensounddone( time, ent ) +{ + self endon( "death" ); + wait( time ); + self notify( "springpadAudioCleanup" ); + ent delete(); +} + +springpad_audio() +{ + loop_ent = spawn( "script_origin", self.origin ); + loop_ent playloopsound( "zmb_highrise_launcher_loop" ); + + self waittill( "death" ); + + loop_ent delete(); +} + +springpad_fx( weapon ) +{ + weapon endon( "death" ); + self endon( "equip_springpad_zm_taken" ); + + while ( isdefined( weapon ) ) + { + playfxontag( level._effect["springpade_on"], weapon, "tag_origin" ); + wait 1; + } +} + +springpadthink( weapon, electricradius, armed ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_springpad_zm_taken" ); + weapon endon( "death" ); + radiussquared = electricradius * electricradius; + trigger = spawn( "trigger_box", weapon getcentroid(), 1, 48, 48, 32 ); + trigger.origin += anglestoforward( flat_angle( weapon.angles ) ) * -15; + trigger.angles = weapon.angles; + trigger enablelinkto(); + trigger linkto( weapon ); + weapon.trigger = trigger; +/# + trigger.extent = ( 24.0, 24.0, 16.0 ); +#/ + weapon thread springpadthinkcleanup( trigger ); + direction_forward = anglestoforward( flat_angle( weapon.angles ) + vectorscale( ( -1, 0, 0 ), 60.0 ) ); + direction_vector = vectorscale( direction_forward, 1024 ); + direction_origin = weapon.origin + direction_vector; + home_angles = weapon.angles; + weapon.is_armed = 0; + self thread springpad_fx( weapon ); + self thread springpad_animate( weapon, armed ); + + weapon waittill( "armed" ); + + weapon.is_armed = 1; + weapon.fling_targets = []; + self thread targeting_thread( weapon, trigger ); + + while ( isdefined( weapon ) ) + { + wait_for_targets( weapon ); + + if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 ) + { + weapon notify( "fling", weapon.zombies_only ); + weapon.is_armed = 0; + weapon.zombies_only = 1; + + foreach ( ent in weapon.fling_targets ) + { + if ( isplayer( ent ) ) + { + ent thread player_fling( weapon.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), weapon.angles, direction_vector, weapon ); + continue; + } + + if ( isdefined( ent ) && isdefined( ent.custom_springpad_fling ) ) + { + if ( !isdefined( self.num_zombies_flung ) ) + self.num_zombies_flung = 0; + + self.num_zombies_flung++; + self notify( "zombie_flung" ); + ent thread [[ ent.custom_springpad_fling ]]( weapon, self ); + continue; + } + + if ( isdefined( ent ) ) + { + if ( !isdefined( self.num_zombies_flung ) ) + self.num_zombies_flung = 0; + + self.num_zombies_flung++; + self notify( "zombie_flung" ); + + if ( !isdefined( weapon.fling_scaler ) ) + weapon.fling_scaler = 1; + + if ( isdefined( weapon.direction_vec_override ) ) + direction_vector = weapon.direction_vec_override; + + ent dodamage( ent.health + 666, ent.origin ); + ent startragdoll(); + ent launchragdoll( direction_vector / 4 * weapon.fling_scaler ); + weapon.springpad_kills++; + } + } + + if ( weapon.springpad_kills >= 28 ) + self thread springpad_expired( weapon ); + + weapon.fling_targets = []; + + weapon waittill( "armed" ); + + weapon.is_armed = 1; + } + else + wait 0.1; + } +} + +wait_for_targets( weapon ) +{ + weapon endon( "hi_priority_target" ); + + while ( isdefined( weapon ) ) + { + if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 ) + { + wait 0.15; + return; + } + + wait 0.05; + } +} + +targeting_thread( weapon, trigger ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_springpad_zm_taken" ); + weapon endon( "death" ); + weapon.zombies_only = 1; + + while ( isdefined( weapon ) ) + { + if ( weapon.is_armed ) + { + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( !isdefined( zombie ) || !isalive( zombie ) ) + continue; + + if ( isdefined( zombie.ignore_spring_pad ) && zombie.ignore_spring_pad ) + continue; + + if ( zombie istouching( trigger ) ) + weapon springpad_add_fling_ent( zombie ); + } + + players = get_players(); + + foreach ( player in players ) + { + if ( is_player_valid( player ) && player istouching( trigger ) ) + { + weapon springpad_add_fling_ent( player ); + weapon.zombies_only = 0; + } + } + + if ( !weapon.zombies_only ) + weapon notify( "hi_priority_target" ); + } + + wait 0.05; + } +} + +springpad_fling_attacker( ent ) +{ + springpad_add_fling_ent( ent ); + + if ( isdefined( level.springpad_attack_delay ) ) + wait( level.springpad_attack_delay ); +} + +springpad_add_fling_ent( ent ) +{ + self.fling_targets = add_to_array( self.fling_targets, ent, 0 ); +} + +springpad_expired( weapon ) +{ + weapon maps\mp\zombies\_zm_equipment::dropped_equipment_destroy( 1 ); + self maps\mp\zombies\_zm_equipment::equipment_release( "equip_springpad_zm" ); + self.springpad_kills = 0; +} + +player_fling( origin, angles, velocity, weapon ) +{ + torigin = ( self.origin[0], self.origin[1], origin[2] ); + aorigin = ( origin + torigin ) * 0.5; + trace = physicstrace( origin, torigin, vectorscale( ( -1, -1, 0 ), 15.0 ), ( 15, 15, 30 ), self ); + + if ( !isdefined( trace ) || !isdefined( trace["fraction"] ) || trace["fraction"] < 1.0 ) + { + if ( !isdefined( weapon.springpad_kills ) ) + weapon.springpad_kills = 0; + + weapon.springpad_kills += 5; + + if ( weapon.springpad_kills >= 28 ) + weapon.owner thread springpad_expired( weapon ); + + return; + } + + self setorigin( aorigin ); + wait_network_frame(); + self setvelocity( velocity ); +} + +springpadthinkcleanup( trigger ) +{ + self waittill( "death" ); + + if ( isdefined( trigger ) ) + trigger delete(); +} + +debugspringpad( radius ) +{ +/# + color_armed = ( 0, 1, 0 ); + color_unarmed = vectorscale( ( 1, 1, 0 ), 0.65 ); + + while ( isdefined( self ) ) + { + if ( getdvarint( _hash_EB512CB7 ) ) + { + if ( isdefined( self.trigger ) ) + { + color = color_unarmed; + + if ( isdefined( self.is_armed ) && self.is_armed ) + color = color_armed; + + vec = self.trigger.extent; + box( self.trigger.origin, vec * -1, vec, self.trigger.angles[1], color, 1, 0, 1 ); + } + + color = ( 0, 1, 0 ); + text = ""; + + if ( isdefined( self.springpad_kills ) ) + text = "" + self.springpad_kills + ""; + else if ( isdefined( self.owner.springpad_kills ) ) + text = "[" + self.owner.springpad_kills + "]"; + + print3d( self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), text, color, 1, 0.5, 1 ); + } + + wait 0.05; + } +#/ +} diff --git a/ZM/Maps/Die Rise/maps/mp/zombies/_zm_melee_weapon.gsc b/ZM/Maps/Die Rise/maps/mp/zombies/_zm_melee_weapon.gsc new file mode 100644 index 0000000..4bc83cd --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/zombies/_zm_melee_weapon.gsc @@ -0,0 +1,576 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_audio; + +init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) +{ + precacheitem( weapon_name ); + precacheitem( flourish_weapon_name ); + add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); + melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_weapon_triggers.size; i++ ) + { + knife_model = getent( melee_weapon_triggers[i].target, "targetname" ); + + if ( isdefined( knife_model ) ) + knife_model hide(); + + melee_weapon_triggers[i] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); + + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + melee_weapon_triggers[i] sethintstring( hint_string, cost ); + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + cursor_hint = "HINT_WEAPON"; + cursor_hint_weapon = weapon_name; + melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); + } + else + melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); + } + else + { + weapon_display = get_weapon_display_name( weapon_name ); + hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + melee_weapon_triggers[i] sethintstring( hint_string, weapon_display, cost ); + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + cursor_hint = "HINT_WEAPON"; + cursor_hint_weapon = weapon_name; + melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); + } + else + melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); + } + + melee_weapon_triggers[i] usetriggerrequirelookat(); + } + + melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_weapon_structs.size; i++ ) + prepare_stub( melee_weapon_structs[i].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); + + register_melee_weapon_for_level( weapon_name ); + + if ( !isdefined( level.ballistic_weapon_name ) ) + level.ballistic_weapon_name = []; + + level.ballistic_weapon_name[weapon_name] = ballistic_weapon_name; + + if ( !isdefined( level.ballistic_upgraded_weapon_name ) ) + level.ballistic_upgraded_weapon_name = []; + + level.ballistic_upgraded_weapon_name[weapon_name] = ballistic_upgraded_weapon_name; +/# + if ( !isdefined( level.zombie_weapons[weapon_name] ) ) + { + if ( isdefined( level.devgui_add_weapon ) ) + [[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost ); + } +#/ +} + +prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) +{ + if ( isdefined( stub ) ) + { + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + stub.hint_string = hint_string; + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + stub.cursor_hint = "HINT_WEAPON"; + stub.cursor_hint_weapon = weapon_name; + } + else + { + stub.cursor_hint = "HINT_NOICON"; + stub.cursor_hint_weapon = undefined; + } + } + else + { + stub.hint_parm1 = get_weapon_display_name( weapon_name ); + stub.hint_parm2 = cost; + stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + stub.cursor_hint = "HINT_WEAPON"; + stub.cursor_hint_weapon = weapon_name; + } + else + { + stub.cursor_hint = "HINT_NOICON"; + stub.cursor_hint_weapon = undefined; + } + } + + stub.cost = cost; + stub.weapon_name = weapon_name; + stub.vo_dialog_id = vo_dialog_id; + stub.flourish_weapon_name = flourish_weapon_name; + stub.ballistic_weapon_name = ballistic_weapon_name; + stub.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; + stub.trigger_func = ::melee_weapon_think; + stub.flourish_fn = flourish_fn; + } +} + +add_stub( stub, weapon_name ) +{ + melee_weapon = undefined; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( level._melee_weapons[i].weapon_name == weapon_name ) + { + melee_weapon = level._melee_weapons[i]; + break; + } + } + + if ( isdefined( stub ) && isdefined( melee_weapon ) ) + prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn ); +} + +give_melee_weapon_by_name( weapon_name ) +{ + melee_weapon = undefined; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( level._melee_weapons[i].weapon_name == weapon_name ) + { + melee_weapon = level._melee_weapons[i]; + break; + } + } + + if ( isdefined( melee_weapon ) ) + self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined ); +} + +add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) +{ + melee_weapon = spawnstruct(); + melee_weapon.weapon_name = weapon_name; + melee_weapon.flourish_weapon_name = flourish_weapon_name; + melee_weapon.ballistic_weapon_name = ballistic_weapon_name; + melee_weapon.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; + melee_weapon.cost = cost; + melee_weapon.wallbuy_targetname = wallbuy_targetname; + melee_weapon.hint_string = hint_string; + melee_weapon.vo_dialog_id = vo_dialog_id; + melee_weapon.flourish_fn = flourish_fn; + + if ( !isdefined( level._melee_weapons ) ) + level._melee_weapons = []; + + level._melee_weapons[level._melee_weapons.size] = melee_weapon; +} + +player_can_see_weapon_prompt( weapon_name ) +{ + if ( is_true( level._allow_melee_weapon_switching ) ) + return true; + + if ( isdefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) ) + return false; + + return true; +} + +spectator_respawn_all() +{ + for ( i = 0; i < level._melee_weapons.size; i++ ) + self spectator_respawn( level._melee_weapons[i].wallbuy_targetname, level._melee_weapons[i].weapon_name ); +} + +spectator_respawn( wallbuy_targetname, weapon_name ) +{ + melee_triggers = getentarray( wallbuy_targetname, "targetname" ); + players = get_players(); + + for ( i = 0; i < melee_triggers.size; i++ ) + { + melee_triggers[i] setvisibletoall(); + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + for ( j = 0; j < players.size; j++ ) + { + if ( !players[j] player_can_see_weapon_prompt( weapon_name ) ) + melee_triggers[i] setinvisibletoplayer( players[j] ); + } + } + } +} + +trigger_hide_all() +{ + for ( i = 0; i < level._melee_weapons.size; i++ ) + self trigger_hide( level._melee_weapons[i].wallbuy_targetname ); +} + +trigger_hide( wallbuy_targetname ) +{ + melee_triggers = getentarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_triggers.size; i++ ) + melee_triggers[i] setinvisibletoplayer( self ); +} + +has_any_ballistic_knife() +{ + if ( self hasweapon( "knife_ballistic_zm" ) ) + return true; + + if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) + return true; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) ) + return true; + + if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) + return true; + } + + return false; +} + +has_upgraded_ballistic_knife() +{ + if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) + return true; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) + return true; + } + + return false; +} + +give_ballistic_knife( weapon_string, upgraded ) +{ + current_melee_weapon = self get_player_melee_weapon(); + + if ( isdefined( current_melee_weapon ) ) + { + if ( upgraded && isdefined( level.ballistic_upgraded_weapon_name ) && isdefined( level.ballistic_upgraded_weapon_name[current_melee_weapon] ) ) + weapon_string = level.ballistic_upgraded_weapon_name[current_melee_weapon]; + + if ( !upgraded && isdefined( level.ballistic_weapon_name ) && isdefined( level.ballistic_weapon_name[current_melee_weapon] ) ) + weapon_string = level.ballistic_weapon_name[current_melee_weapon]; + } + + return weapon_string; +} + +change_melee_weapon( weapon_name, current_weapon ) +{ + current_melee_weapon = self get_player_melee_weapon(); + + if ( isdefined( current_melee_weapon ) && current_melee_weapon != weapon_name ) + { + self takeweapon( current_melee_weapon ); + unacquire_weapon_toggle( current_melee_weapon ); + } + + self set_player_melee_weapon( weapon_name ); + had_ballistic = 0; + had_ballistic_upgraded = 0; + ballistic_was_primary = 0; + primaryweapons = self getweaponslistprimaries(); + + for ( i = 0; i < primaryweapons.size; i++ ) + { + primary_weapon = primaryweapons[i]; + + if ( issubstr( primary_weapon, "knife_ballistic_" ) ) + { + had_ballistic = 1; + + if ( primary_weapon == current_weapon ) + ballistic_was_primary = 1; + + self notify( "zmb_lost_knife" ); + self takeweapon( primary_weapon ); + unacquire_weapon_toggle( primary_weapon ); + + if ( issubstr( primary_weapon, "upgraded" ) ) + had_ballistic_upgraded = 1; + } + } + + if ( had_ballistic ) + { + if ( had_ballistic_upgraded ) + { + new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name]; + + if ( ballistic_was_primary ) + current_weapon = new_ballistic; + + self giveweapon( new_ballistic, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) ); + } + else + { + new_ballistic = level.ballistic_weapon_name[weapon_name]; + + if ( ballistic_was_primary ) + current_weapon = new_ballistic; + + self giveweapon( new_ballistic, 0 ); + } + } + + return current_weapon; +} + +melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) +{ + self.first_time_triggered = 0; + + if ( isdefined( self.stub ) ) + { + self endon( "kill_trigger" ); + + if ( isdefined( self.stub.first_time_triggered ) ) + self.first_time_triggered = self.stub.first_time_triggered; + + weapon_name = self.stub.weapon_name; + cost = self.stub.cost; + flourish_fn = self.stub.flourish_fn; + vo_dialog_id = self.stub.vo_dialog_id; + flourish_weapon_name = self.stub.flourish_weapon_name; + ballistic_weapon_name = self.stub.ballistic_weapon_name; + ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name; + players = getplayers(); + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] player_can_see_weapon_prompt( weapon_name ) ) + self setinvisibletoplayer( players[i] ); + } + } + } + + for (;;) + { + self waittill( "trigger", player ); + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + if ( player in_revive_trigger() ) + { + wait 0.1; + continue; + } + + if ( player isthrowinggrenade() ) + { + wait 0.1; + continue; + } + + if ( player.is_drinking > 0 ) + { + wait 0.1; + continue; + } + + if ( player hasweapon( weapon_name ) || player has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( player isswitchingweapons() ) + { + wait 0.1; + continue; + } + + current_weapon = player getcurrentweapon(); + + if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) || player has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission ) + { + wait 0.1; + continue; + } + + player_has_weapon = player hasweapon( weapon_name ); + + if ( !player_has_weapon ) + { + cost = self.stub.cost; + + if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) + cost = int( cost / 2 ); + + if ( player.score >= cost ) + { + if ( self.first_time_triggered == 0 ) + { + model = getent( self.target, "targetname" ); + + if ( isdefined( model ) ) + model thread melee_weapon_show( player ); + else if ( isdefined( self.clientfieldname ) ) + level setclientfield( self.clientfieldname, 1 ); + + self.first_time_triggered = 1; + + if ( isdefined( self.stub ) ) + self.stub.first_time_triggered = 1; + } + + player maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 ); + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" ); + player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self ); + } + else + { + play_sound_on_ent( "no_purchase" ); + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 ); + } + + continue; + } + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + self setinvisibletoplayer( player ); + } +} + +melee_weapon_show( player ) +{ + player_angles = vectortoangles( player.origin - self.origin ); + player_yaw = player_angles[1]; + weapon_yaw = self.angles[1]; + yaw_diff = angleclamp180( player_yaw - weapon_yaw ); + + if ( yaw_diff > 0 ) + yaw = weapon_yaw - 90; + else + yaw = weapon_yaw + 90; + + self.og_origin = self.origin; + self.origin += anglestoforward( ( 0, yaw, 0 ) ) * 8; + wait 0.05; + self show(); + play_sound_at_pos( "weapon_show", self.origin, self ); + time = 1; + self moveto( self.og_origin, time ); +} + +give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger ) +{ + if ( isdefined( flourish_fn ) ) + self thread [[ flourish_fn ]](); + + gun = self do_melee_weapon_flourish_begin( flourish_weapon_name ); + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id ); + self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); + self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + return; + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + if ( isdefined( trigger ) ) + trigger setinvisibletoplayer( self ); + + self trigger_hide_all(); + } +} + +do_melee_weapon_flourish_begin( flourish_weapon_name ) +{ + self increment_is_drinking(); + self disable_player_move_states( 1 ); + gun = self getcurrentweapon(); + weapon = flourish_weapon_name; + self giveweapon( weapon ); + self switchtoweapon( weapon ); + return gun; +} + +do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) +{ + assert( !is_zombie_perk_bottle( gun ) ); + assert( gun != level.revive_tool ); + self enable_player_move_states(); + weapon = flourish_weapon_name; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + { + self takeweapon( weapon ); + self.lastactiveweapon = "none"; + return; + } + + self takeweapon( weapon ); + self giveweapon( weapon_name ); + gun = change_melee_weapon( weapon_name, gun ); + + if ( self hasweapon( "knife_zm" ) ) + self takeweapon( "knife_zm" ); + + if ( self is_multiple_drinking() ) + { + self decrement_is_drinking(); + return; + } + else if ( gun == "knife_zm" ) + { + self switchtoweapon( weapon_name ); + self decrement_is_drinking(); + return; + } + else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) + self switchtoweapon( gun ); + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + } + + self waittill( "weapon_change_complete" ); + + if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) ) + self decrement_is_drinking(); +} diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc b/ZM/Maps/Die Rise/maps/mp/zombies/_zm_weap_ballistic_knife.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc rename to ZM/Maps/Die Rise/maps/mp/zombies/_zm_weap_ballistic_knife.gsc diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_bowie.gsc b/ZM/Maps/Die Rise/maps/mp/zombies/_zm_weap_bowie.gsc similarity index 100% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_bowie.gsc rename to ZM/Maps/Die Rise/maps/mp/zombies/_zm_weap_bowie.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_weap_claymore.gsc b/ZM/Maps/Die Rise/maps/mp/zombies/_zm_weap_claymore.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_weap_claymore.gsc rename to ZM/Maps/Die Rise/maps/mp/zombies/_zm_weap_claymore.gsc diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_slipgun.gsc b/ZM/Maps/Die Rise/maps/mp/zombies/_zm_weap_slipgun.gsc similarity index 99% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_slipgun.gsc rename to ZM/Maps/Die Rise/maps/mp/zombies/_zm_weap_slipgun.gsc index 834acb7..2c375d6 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_slipgun.gsc +++ b/ZM/Maps/Die Rise/maps/mp/zombies/_zm_weap_slipgun.gsc @@ -86,10 +86,10 @@ watch_for_slip_bolt() { case "slip_bolt_zm": grenade thread slip_bolt( self, 0 ); - continue; + break; case "slip_bolt_upgraded_zm": grenade thread slip_bolt( self, 1 ); - continue; + break; } } } @@ -405,9 +405,7 @@ zombiemoveongoo_gobacktonormal() if ( !is_true( self.completed_emerging_into_playable_area ) ) { -/# assert( isdefined( self.first_node ) ); -#/ self maps\mp\zombies\_zm_spawner::reset_attack_spot(); self orientmode( "face default" ); self thread maps\mp\zombies\_zm_spawner::zombie_goto_entrance( self.first_node ); @@ -555,9 +553,7 @@ add_slippery_spot( origin, duration, startpos ) else { player.slick_count--; -/# assert( player.slick_count >= 0 ); -#/ slicked_players[num] = undefined; } /# @@ -626,9 +622,7 @@ add_slippery_spot( origin, duration, startpos ) foreach ( player in slicked_players ) { player.slick_count--; -/# assert( player.slick_count >= 0 ); -#/ player forceslick( player.slick_count ); } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc b/ZM/Maps/Die Rise/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc similarity index 100% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc rename to ZM/Maps/Die Rise/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc diff --git a/ZM/Maps/Die Rise/maps/mp/zombies/_zm_weapon_locker.gsc b/ZM/Maps/Die Rise/maps/mp/zombies/_zm_weapon_locker.gsc new file mode 100644 index 0000000..5031b80 --- /dev/null +++ b/ZM/Maps/Die Rise/maps/mp/zombies/_zm_weapon_locker.gsc @@ -0,0 +1,325 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_audio; + +main() +{ + if ( !isdefined( level.weapon_locker_map ) ) + level.weapon_locker_map = level.script; + + level.weapon_locker_online = sessionmodeisonlinegame(); + weapon_lockers = getstructarray( "weapons_locker", "targetname" ); + array_thread( weapon_lockers, ::triggerweaponslockerwatch ); +} + +wl_has_stored_weapondata() +{ + if ( level.weapon_locker_online ) + return self has_stored_weapondata( level.weapon_locker_map ); + else + return isdefined( self.stored_weapon_data ); +} + +wl_get_stored_weapondata() +{ + if ( level.weapon_locker_online ) + return self get_stored_weapondata( level.weapon_locker_map ); + else + return self.stored_weapon_data; +} + +wl_clear_stored_weapondata() +{ + if ( level.weapon_locker_online ) + self clear_stored_weapondata( level.weapon_locker_map ); + else + self.stored_weapon_data = undefined; +} + +wl_set_stored_weapondata( weapondata ) +{ + if ( level.weapon_locker_online ) + self set_stored_weapondata( weapondata, level.weapon_locker_map ); + else + self.stored_weapon_data = weapondata; +} + +triggerweaponslockerwatch() +{ + unitrigger_stub = spawnstruct(); + unitrigger_stub.origin = self.origin; + + if ( isdefined( self.script_angles ) ) + unitrigger_stub.angles = self.script_angles; + else + unitrigger_stub.angles = self.angles; + + unitrigger_stub.script_angles = unitrigger_stub.angles; + + if ( isdefined( self.script_length ) ) + unitrigger_stub.script_length = self.script_length; + else + unitrigger_stub.script_length = 16; + + if ( isdefined( self.script_width ) ) + unitrigger_stub.script_width = self.script_width; + else + unitrigger_stub.script_width = 32; + + if ( isdefined( self.script_height ) ) + unitrigger_stub.script_height = self.script_height; + else + unitrigger_stub.script_height = 64; + + unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * unitrigger_stub.script_length / 2; + unitrigger_stub.targetname = "weapon_locker"; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.clientfieldname = "weapon_locker"; + maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + unitrigger_stub.prompt_and_visibility_func = ::triggerweaponslockerthinkupdateprompt; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::triggerweaponslockerthink ); +} + +triggerweaponslockerisvalidweapon( weaponname ) +{ + weaponname = get_base_weapon_name( weaponname, 1 ); + + if ( !is_weapon_included( weaponname ) ) + return false; + + if ( is_offhand_weapon( weaponname ) || is_limited_weapon( weaponname ) ) + return false; + + return true; +} + +triggerweaponslockerisvalidweaponpromptupdate( player, weaponname ) +{ + retrievingweapon = player wl_has_stored_weapondata(); + + if ( !retrievingweapon ) + { + weaponname = player get_nonalternate_weapon( weaponname ); + + if ( !triggerweaponslockerisvalidweapon( weaponname ) ) + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); + else + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_STORE" ); + } + else + { + weapondata = player wl_get_stored_weapondata(); + + if ( isdefined( level.remap_weapon_locker_weapons ) ) + weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons ); + + weapontogive = weapondata["name"]; + primaries = player getweaponslistprimaries(); + maxweapons = get_player_weapon_limit( player ); + weaponname = player get_nonalternate_weapon( weaponname ); + + if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == weaponname ) + { + if ( !triggerweaponslockerisvalidweapon( weaponname ) ) + { + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); + return; + } + } + + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" ); + } +} + +triggerweaponslockerthinkupdateprompt( player ) +{ + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + return 1; +} + +triggerweaponslockerthink() +{ + self.parent_player thread triggerweaponslockerweaponchangethink( self ); + + while ( true ) + { + self waittill( "trigger", player ); + + retrievingweapon = player wl_has_stored_weapondata(); + + if ( !retrievingweapon ) + { + curweapon = player getcurrentweapon(); + curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon ); + + if ( !triggerweaponslockerisvalidweapon( curweapon ) ) + continue; + + weapondata = player maps\mp\zombies\_zm_weapons::get_player_weapondata( player ); + player wl_set_stored_weapondata( weapondata ); + assert( curweapon == weapondata["name"], "weapon data does not match" ); + player takeweapon( curweapon ); + primaries = player getweaponslistprimaries(); + + if ( isdefined( primaries[0] ) ) + player switchtoweapon( primaries[0] ); + else + player maps\mp\zombies\_zm_weapons::give_fallback_weapon(); + + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + player playsoundtoplayer( "evt_fridge_locker_close", player ); + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "weapon_storage" ); + } + else + { + curweapon = player getcurrentweapon(); + primaries = player getweaponslistprimaries(); + weapondata = player wl_get_stored_weapondata(); + + if ( isdefined( level.remap_weapon_locker_weapons ) ) + weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons ); + + weapontogive = weapondata["name"]; + + if ( !triggerweaponslockerisvalidweapon( weapontogive ) ) + { + player playlocalsound( level.zmb_laugh_alias ); + player wl_clear_stored_weapondata(); + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + continue; + } + + curweap_base = maps\mp\zombies\_zm_weapons::get_base_weapon_name( curweapon, 1 ); + weap_base = maps\mp\zombies\_zm_weapons::get_base_weapon_name( weapontogive, 1 ); + + if ( player has_weapon_or_upgrade( weap_base ) && weap_base != curweap_base ) + { + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); + wait 3; + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + continue; + } + + maxweapons = get_player_weapon_limit( player ); + + if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == curweapon ) + { + curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon ); + + if ( !triggerweaponslockerisvalidweapon( curweapon ) ) + { + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); + wait 3; + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + continue; + } + + curweapondata = player maps\mp\zombies\_zm_weapons::get_player_weapondata( player ); + player takeweapon( curweapondata["name"] ); + player maps\mp\zombies\_zm_weapons::weapondata_give( weapondata ); + player wl_clear_stored_weapondata(); + player wl_set_stored_weapondata( curweapondata ); + player switchtoweapon( weapondata["name"] ); + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + } + else + { + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "wall_withdrawl" ); + player wl_clear_stored_weapondata(); + player maps\mp\zombies\_zm_weapons::weapondata_give( weapondata ); + player switchtoweapon( weapondata["name"] ); + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + } + + level notify( "weapon_locker_grab" ); + player playsoundtoplayer( "evt_fridge_locker_open", player ); + } + + wait 0.5; + } +} + +triggerweaponslockerweaponchangethink( trigger ) +{ + self endon( "disconnect" ); + self endon( "death" ); + trigger endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "weapon_change", newweapon ); + + trigger triggerweaponslockerisvalidweaponpromptupdate( self, newweapon ); + } +} + +add_weapon_locker_mapping( fromweapon, toweapon ) +{ + if ( !isdefined( level.remap_weapon_locker_weapons ) ) + level.remap_weapon_locker_weapons = []; + + level.remap_weapon_locker_weapons[fromweapon] = toweapon; +} + +remap_weapon( weapondata, maptable ) +{ + name = get_base_name( weapondata["name"] ); + att = get_attachment_name( weapondata["name"] ); + + if ( isdefined( maptable[name] ) ) + { + weapondata["name"] = maptable[name]; + name = weapondata["name"]; + + if ( is_weapon_upgraded( name ) ) + { + if ( isdefined( att ) && weapon_supports_attachments( name ) ) + { + base = get_base_weapon_name( name, 1 ); + + if ( !weapon_supports_this_attachment( base, att ) ) + att = random_attachment( base ); + + weapondata["name"] = weapondata["name"] + "+" + att; + } + else if ( weapon_supports_default_attachment( name ) ) + { + att = default_attachment( name ); + weapondata["name"] = weapondata["name"] + "+" + att; + } + } + } + else + return weapondata; + + name = weapondata["name"]; + dw_name = weapondualwieldweaponname( name ); + alt_name = weaponaltweaponname( name ); + + if ( name != "none" ) + { + weapondata["clip"] = int( min( weapondata["clip"], weaponclipsize( name ) ) ); + weapondata["stock"] = int( min( weapondata["stock"], weaponmaxammo( name ) ) ); + } + + if ( dw_name != "none" ) + weapondata["lh_clip"] = int( min( weapondata["lh_clip"], weaponclipsize( dw_name ) ) ); + + if ( alt_name != "none" ) + { + weapondata["alt_clip"] = int( min( weapondata["alt_clip"], weaponclipsize( alt_name ) ) ); + weapondata["alt_stock"] = int( min( weapondata["alt_stock"], weaponmaxammo( alt_name ) ) ); + } + + weapondata["dw_name"] = dw_name; + weapondata["alt_name"] = alt_name; + return weapondata; +} diff --git a/ZM/Maps/Die Rise/xmodelalias/c_zom_chinese_zombie_head_als.gsc b/ZM/Maps/Die Rise/xmodelalias/c_zom_chinese_zombie_head_als.gsc new file mode 100644 index 0000000..807275d --- /dev/null +++ b/ZM/Maps/Die Rise/xmodelalias/c_zom_chinese_zombie_head_als.gsc @@ -0,0 +1,11 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + a[0] = "c_zom_zombie_chinese_head1"; + a[1] = "c_zom_zombie_chinese_head2"; + a[2] = "c_zom_zombie_chinese_head3"; + a[3] = "c_zom_zombie_chinese_head4"; + return a; +} diff --git a/ZM/Maps/Die Rise/xmodelalias/c_zom_chinese_zombie_head_helmet_als.gsc b/ZM/Maps/Die Rise/xmodelalias/c_zom_chinese_zombie_head_helmet_als.gsc new file mode 100644 index 0000000..235c8b9 --- /dev/null +++ b/ZM/Maps/Die Rise/xmodelalias/c_zom_chinese_zombie_head_helmet_als.gsc @@ -0,0 +1,16 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + a[0] = "c_zom_zombie_chinese_head1"; + a[1] = "c_zom_zombie_chinese_head2"; + a[2] = "c_zom_zombie_chinese_head3"; + a[3] = "c_zom_zombie_chinese_head4"; + a[4] = "c_zom_zombie_chinese_head1"; + a[5] = "c_zom_zombie_chinese_head2"; + a[6] = "c_zom_zombie_chinese_head3"; + a[7] = "c_zom_zombie_chinese_head4"; + a[8] = "c_zom_zombie_chinese_head3_helmet"; + return a; +} diff --git a/ZM/Maps/Mob of the Dead/aitype/zm_alcatraz_basic.gsc b/ZM/Maps/Mob of the Dead/aitype/zm_alcatraz_basic.gsc new file mode 100644 index 0000000..b490816 --- /dev/null +++ b/ZM/Maps/Mob of the Dead/aitype/zm_alcatraz_basic.gsc @@ -0,0 +1,408 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_guard; +#include character\c_zom_inmate1; +#include character\c_zom_inmate2; + +#using_animtree("zm_prison_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_inert_v4; + dummy_anim_ref = %ai_zombie_inert_v6; + dummy_anim_ref = %ai_zombie_inert_stagger_v1; + dummy_anim_ref = %ai_zombie_inert_stagger_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v3; + dummy_anim_ref = %ai_zombie_inert_stagger_v4; + dummy_anim_ref = %ai_zombie_inert_circle_v1; + dummy_anim_ref = %ai_zombie_inert_2_awake_v1; + dummy_anim_ref = %ai_zombie_inert_2_awake_v2; + dummy_anim_ref = %ai_zombie_inert_2_awake_v3; + dummy_anim_ref = %ai_zombie_inert_2_awake_v4; + dummy_anim_ref = %ai_zombie_inert_2_awake_v5; + dummy_anim_ref = %ai_zombie_inert_2_awake_v6; + dummy_anim_ref = %ai_zombie_inert_2_awake_v7; + dummy_anim_ref = %ai_zombie_inert_2_awake_v8; + dummy_anim_ref = %ai_zombie_crawl_inert_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_v5; + dummy_anim_ref = %ai_zombie_crawl_inert_v6; + dummy_anim_ref = %ai_zombie_crawl_inert_v7; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v5; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_dreamcatch_shrink; + dummy_anim_ref = %ai_zombie_dreamcatch_impact; + dummy_anim_ref = %ai_zombie_dreamcatch_rise; + dummy_anim_ref = %ai_zombie_dreamcatch_shrink_a; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_climb_down_pothole; + dummy_anim_ref = %ai_zombie_crawl_climb_down_pothole; + dummy_anim_ref = %ai_zombie_climb_up_pothole; + dummy_anim_ref = %ai_zombie_crawl_climb_up_pothole; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_stumble_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_stumble_90; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_stumble_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_190; + dummy_anim_ref = %ai_zombie_jump_down_stumble_190; + dummy_anim_ref = %ai_zombie_crawl_jump_down_189; + dummy_anim_ref = %ai_zombie_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_down_stumble_222; + dummy_anim_ref = %ai_zombie_crawl_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_127; + dummy_anim_ref = %ai_zombie_jump_up_222; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_222; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_jump_down_cellblock; + dummy_anim_ref = %ai_zombie_jump_up_cellblock; + dummy_anim_ref = %ai_zombie_crawl_jump_down_cellblock; + dummy_anim_ref = %ai_zombie_crawl_jump_up_cellblock; + dummy_anim_ref = %ai_zombie_sprint_jump_up_cellblock; + dummy_anim_ref = %ai_zombie_sprint_jump_down_cellblock; + dummy_anim_ref = %ai_zombie_crawl_sprint_jump_up_cellblock; + dummy_anim_ref = %ai_zombie_crawl_sprint_jump_down_cellblock; + dummy_anim_ref = %ai_zombie_jump_down_dock_tommygun; + dummy_anim_ref = %ai_zombie_crawl_jump_across_120; + dummy_anim_ref = %ai_zombie_jump_across_120; + dummy_anim_ref = %ai_zombie_diner_roof_hatch_jump_up; + dummy_anim_ref = %ai_zombie_crawl_diner_roof_hatch_jump_up; + dummy_anim_ref = %ai_zombie_traverse_diner_roof; + dummy_anim_ref = %ai_zombie_crawl_traverse_diner_roof; + dummy_anim_ref = %ai_zombie_traverse_garage_roll; + dummy_anim_ref = %ai_zombie_crawl_jump_up_diner_roof; + dummy_anim_ref = %ai_zombie_jump_up_diner_roof; + dummy_anim_ref = %ai_zombie_jump_up_2_climb; + dummy_anim_ref = %ai_zombie_crawl_jump_up_2_climb; + dummy_anim_ref = %ai_zombie_climb_over_dock_fence; + dummy_anim_ref = %ai_zombie_crawl_climb_over_dock_fence; + dummy_anim_ref = %ai_zombie_jump_up_goldengate; + dummy_anim_ref = %ai_zombie_jump_up_dock; + dummy_anim_ref = %ai_zombie_climb_up_ext_low; + dummy_anim_ref = %ai_zombie_climb_up_ext_mid; + dummy_anim_ref = %ai_zombie_climb_up_ext_roof; + dummy_anim_ref = %ai_zombie_jump_down_cellblock_basic; + dummy_anim_ref = %ai_zombie_crawl_jump_down_cellblock_basic; + dummy_anim_ref = %ai_zombie_traverse_lower_gondola; + dummy_anim_ref = %ai_zombie_crawl_jump_up_dock_middle; + dummy_anim_ref = %ai_zombie_jump_up_dock_middle; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_sprint_v6; + dummy_anim_ref = %ai_zombie_sprint_v7; + dummy_anim_ref = %ai_zombie_sprint_v8; + dummy_anim_ref = %ai_zombie_sprint_v9; + dummy_anim_ref = %ai_zombie_sprint_v10; + dummy_anim_ref = %ai_zombie_sprint_v11; + dummy_anim_ref = %ai_zombie_sprint_v12; + dummy_anim_ref = %ai_zombie_riotshield_loop_v1; + dummy_anim_ref = %ai_zombie_riotshield_breakthrough_v1; + dummy_anim_ref = %ai_zombie_crawl_riotshield_loop_v1; + dummy_anim_ref = %ai_zombie_crawl_riotshield_breakthrough_v1; + dummy_anim_ref = %ai_zombie_afterlife_stun_a; + dummy_anim_ref = %ai_zombie_afterlife_stun_b; + dummy_anim_ref = %ai_zombie_afterlife_stun_c; + dummy_anim_ref = %ai_zombie_afterlife_stun_d; + dummy_anim_ref = %ai_zombie_afterlife_stun_e; + dummy_anim_ref = %ai_zombie_acid_stun_a; + dummy_anim_ref = %ai_zombie_acid_stun_b; + dummy_anim_ref = %ai_zombie_acid_stun_c; + dummy_anim_ref = %ai_zombie_acid_stun_d; + dummy_anim_ref = %ai_zombie_acid_stun_e; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_prison_basic.asd"; + self.animtree = "zm_prison_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 3 ); + + switch ( randchar ) + { + case 0: + character\c_zom_guard::main(); + break; + case 1: + character\c_zom_inmate1::main(); + break; + case 2: + character\c_zom_inmate2::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_prison_basic" ); + character\c_zom_guard::precache(); + character\c_zom_inmate1::precache(); + character\c_zom_inmate2::precache(); +} diff --git a/ZM/Maps/Mob of the Dead/aitype/zm_alcatraz_brutus.gsc b/ZM/Maps/Mob of the Dead/aitype/zm_alcatraz_brutus.gsc new file mode 100644 index 0000000..936057e --- /dev/null +++ b/ZM/Maps/Mob of the Dead/aitype/zm_alcatraz_brutus.gsc @@ -0,0 +1,83 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\c_zom_cellbreaker; + +#using_animtree("zm_alcatraz_brutus"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_cellbreaker_attack_swingleft; + dummy_anim_ref = %ai_zombie_cellbreaker_attack_swingright_a; + dummy_anim_ref = %ai_zombie_cellbreaker_attack_swingright_b; + dummy_anim_ref = %ai_zombie_cellbreaker_death; + dummy_anim_ref = %ai_zombie_cellbreaker_death_a; + dummy_anim_ref = %ai_zombie_cellbreaker_death_explode; + dummy_anim_ref = %ai_zombie_cellbreaker_death_mg; + dummy_anim_ref = %ai_zombie_cellbreaker_tesla_death_a; + dummy_anim_ref = %ai_zombie_cellbreaker_enrage_start; + dummy_anim_ref = %ai_zombie_cellbreaker_idle_a; + dummy_anim_ref = %ai_zombie_cellbreaker_idle_b; + dummy_anim_ref = %ai_zombie_cellbreaker_run_a; + dummy_anim_ref = %ai_zombie_cellbreaker_run_b; + dummy_anim_ref = %ai_zombie_cellbreaker_run_c; + dummy_anim_ref = %ai_zombie_cellbreaker_run_d; + dummy_anim_ref = %ai_zombie_cellbreaker_sprint_a; + dummy_anim_ref = %ai_zombie_cellbreaker_sprint_b; + dummy_anim_ref = %ai_zombie_cellbreaker_walk_a; + dummy_anim_ref = %ai_zombie_cellbreaker_boardsmash_a; + dummy_anim_ref = %ai_zombie_cellbreaker_boardsmash_b; + dummy_anim_ref = %ai_zombie_cellbreaker_boardsmash_c; + dummy_anim_ref = %ai_zombie_cellbreaker_lock_magicbox; + dummy_anim_ref = %ai_zombie_cellbreaker_lock_perkmachine; + dummy_anim_ref = %ai_zombie_cellbreaker_lock_planeramp; + dummy_anim_ref = %ai_zombie_cellbreaker_bullcharge_tell; + dummy_anim_ref = %ai_zombie_cellbreaker_gasattack; + dummy_anim_ref = %ai_zombie_cellbreaker_headpain; + dummy_anim_ref = %ai_zombie_cellbreaker_spawn; + dummy_anim_ref = %ai_zombie_cellbreaker_stumble_running; + dummy_anim_ref = %ai_zombie_cellbreaker_summondogs; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_alcatraz_brutus.asd"; + self.animtree = "zm_alcatraz_brutus.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = "zm_brutus_footstepfxtable"; + self.footstepprepend = "fly_step_brutus"; + self.footstepscriptcallback = 1; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\c_zom_cellbreaker::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_alcatraz_brutus" ); + character\c_zom_cellbreaker::precache(); +} diff --git a/ZM/Maps/Mob of the Dead/character/c_zom_arlington.gsc b/ZM/Maps/Mob of the Dead/character/c_zom_arlington.gsc new file mode 100644 index 0000000..5938c34 --- /dev/null +++ b/ZM/Maps/Mob of the Dead/character/c_zom_arlington.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_player_arlington_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_player_arlington_fb" ); +} diff --git a/ZM/Maps/Mob of the Dead/character/c_zom_cellbreaker.gsc b/ZM/Maps/Mob of the Dead/character/c_zom_cellbreaker.gsc new file mode 100644 index 0000000..8e1f905 --- /dev/null +++ b/ZM/Maps/Mob of the Dead/character/c_zom_cellbreaker.gsc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_cellbreaker_fb" ); + self.hatmodel = "c_zom_cellbreaker_helmet"; + self attach( self.hatmodel ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_cellbreaker_fb" ); + precachemodel( "c_zom_cellbreaker_helmet" ); +} diff --git a/ZM/Maps/Mob of the Dead/character/c_zom_deluca.gsc b/ZM/Maps/Mob of the Dead/character/c_zom_deluca.gsc new file mode 100644 index 0000000..d2262cf --- /dev/null +++ b/ZM/Maps/Mob of the Dead/character/c_zom_deluca.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_player_deluca_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_player_deluca_fb" ); +} diff --git a/ZM/Maps/Mob of the Dead/character/c_zom_guard.gsc b/ZM/Maps/Mob of the Dead/character/c_zom_guard.gsc new file mode 100644 index 0000000..c6fee76 --- /dev/null +++ b/ZM/Maps/Mob of the Dead/character/c_zom_guard.gsc @@ -0,0 +1,51 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_prison_guard_head_als; +#include xmodelalias\c_zom_prison_guard_hat_als; + +main() +{ + self setmodel( "c_zom_guard_body" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_prison_guard_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = codescripts\character::randomelement( xmodelalias\c_zom_prison_guard_hat_als::main() ); + self attach( self.hatmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_guard_body_g_upclean"; + self.torsodmg2 = "c_zom_guard_body_g_rarmoff"; + self.torsodmg3 = "c_zom_guard_body_g_larmoff"; + self.torsodmg5 = "c_zom_inmate_body2_g_behead"; + self.legdmg1 = "c_zom_guard_body_g_lowclean"; + self.legdmg2 = "c_zom_guard_body_g_rlegoff"; + self.legdmg3 = "c_zom_guard_body_g_llegoff"; + self.legdmg4 = "c_zom_guard_body_g_legsoff"; + self.gibspawn1 = "c_zom_inmate_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_inmate_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_inmate_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_inmate_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_guard_body" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_prison_guard_head_als::main() ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_prison_guard_hat_als::main() ); + precachemodel( "c_zom_guard_body_g_upclean" ); + precachemodel( "c_zom_guard_body_g_rarmoff" ); + precachemodel( "c_zom_guard_body_g_larmoff" ); + precachemodel( "c_zom_inmate_body2_g_behead" ); + precachemodel( "c_zom_guard_body_g_lowclean" ); + precachemodel( "c_zom_guard_body_g_rlegoff" ); + precachemodel( "c_zom_guard_body_g_llegoff" ); + precachemodel( "c_zom_guard_body_g_legsoff" ); + precachemodel( "c_zom_inmate_g_rarmspawn" ); + precachemodel( "c_zom_inmate_g_larmspawn" ); + precachemodel( "c_zom_inmate_g_rlegspawn" ); + precachemodel( "c_zom_inmate_g_llegspawn" ); +} diff --git a/ZM/Maps/Mob of the Dead/character/c_zom_handsome.gsc b/ZM/Maps/Mob of the Dead/character/c_zom_handsome.gsc new file mode 100644 index 0000000..44a7ca2 --- /dev/null +++ b/ZM/Maps/Mob of the Dead/character/c_zom_handsome.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_player_handsome_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_player_handsome_fb" ); +} diff --git a/ZM/Maps/Mob of the Dead/character/c_zom_inmate1.gsc b/ZM/Maps/Mob of the Dead/character/c_zom_inmate1.gsc new file mode 100644 index 0000000..0f616b6 --- /dev/null +++ b/ZM/Maps/Mob of the Dead/character/c_zom_inmate1.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_prison_inmate_head_als; + +main() +{ + self setmodel( "c_zom_inmate_body1" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_prison_inmate_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_inmate_body1_g_upclean"; + self.torsodmg2 = "c_zom_inmate_body1_g_rarmoff"; + self.torsodmg3 = "c_zom_inmate_body1_g_larmoff"; + self.torsodmg5 = "c_zom_inmate_body2_g_behead"; + self.legdmg1 = "c_zom_inmate_body1_g_lowclean"; + self.legdmg2 = "c_zom_inmate_body1_g_rlegoff"; + self.legdmg3 = "c_zom_inmate_body1_g_llegoff"; + self.legdmg4 = "c_zom_inmate_body1_g_legsoff"; + self.gibspawn1 = "c_zom_inmate_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_inmate_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_inmate_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_inmate_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_inmate_body1" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_prison_inmate_head_als::main() ); + precachemodel( "c_zom_inmate_body1_g_upclean" ); + precachemodel( "c_zom_inmate_body1_g_rarmoff" ); + precachemodel( "c_zom_inmate_body1_g_larmoff" ); + precachemodel( "c_zom_inmate_body2_g_behead" ); + precachemodel( "c_zom_inmate_body1_g_lowclean" ); + precachemodel( "c_zom_inmate_body1_g_rlegoff" ); + precachemodel( "c_zom_inmate_body1_g_llegoff" ); + precachemodel( "c_zom_inmate_body1_g_legsoff" ); + precachemodel( "c_zom_inmate_g_rarmspawn" ); + precachemodel( "c_zom_inmate_g_larmspawn" ); + precachemodel( "c_zom_inmate_g_rlegspawn" ); + precachemodel( "c_zom_inmate_g_llegspawn" ); +} diff --git a/ZM/Maps/Mob of the Dead/character/c_zom_inmate2.gsc b/ZM/Maps/Mob of the Dead/character/c_zom_inmate2.gsc new file mode 100644 index 0000000..5832ff3 --- /dev/null +++ b/ZM/Maps/Mob of the Dead/character/c_zom_inmate2.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_prison_inmate_head_als; + +main() +{ + self setmodel( "c_zom_inmate_body2" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_prison_inmate_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_inmate_body2_g_upclean"; + self.torsodmg2 = "c_zom_inmate_body2_g_rarmoff"; + self.torsodmg3 = "c_zom_inmate_body2_g_larmoff"; + self.torsodmg5 = "c_zom_inmate_body2_g_behead"; + self.legdmg1 = "c_zom_inmate_body1_g_lowclean"; + self.legdmg2 = "c_zom_inmate_body1_g_rlegoff"; + self.legdmg3 = "c_zom_inmate_body1_g_llegoff"; + self.legdmg4 = "c_zom_inmate_body1_g_legsoff"; + self.gibspawn1 = "c_zom_inmate_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_inmate_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_inmate_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_inmate_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_inmate_body2" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_prison_inmate_head_als::main() ); + precachemodel( "c_zom_inmate_body2_g_upclean" ); + precachemodel( "c_zom_inmate_body2_g_rarmoff" ); + precachemodel( "c_zom_inmate_body2_g_larmoff" ); + precachemodel( "c_zom_inmate_body2_g_behead" ); + precachemodel( "c_zom_inmate_body1_g_lowclean" ); + precachemodel( "c_zom_inmate_body1_g_rlegoff" ); + precachemodel( "c_zom_inmate_body1_g_llegoff" ); + precachemodel( "c_zom_inmate_body1_g_legsoff" ); + precachemodel( "c_zom_inmate_g_rarmspawn" ); + precachemodel( "c_zom_inmate_g_larmspawn" ); + precachemodel( "c_zom_inmate_g_rlegspawn" ); + precachemodel( "c_zom_inmate_g_llegspawn" ); +} diff --git a/ZM/Maps/Mob of the Dead/character/c_zom_oleary.gsc b/ZM/Maps/Mob of the Dead/character/c_zom_oleary.gsc new file mode 100644 index 0000000..7702841 --- /dev/null +++ b/ZM/Maps/Mob of the Dead/character/c_zom_oleary.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_player_oleary_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_player_oleary_fb" ); +} diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_base_to_first_floor_climb.gsc b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_base_to_first_floor_climb.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_base_to_first_floor_climb.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_base_to_first_floor_climb.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_base_to_roof_climb.gsc b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_base_to_roof_climb.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_base_to_roof_climb.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_base_to_roof_climb.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_base_to_second_floor.gsc b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_base_to_second_floor.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_base_to_second_floor.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_base_to_second_floor.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbdown.gsc b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbdown.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbdown.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbdown.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbdown_norail.gsc b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbdown_norail.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbdown_norail.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbdown_norail.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbup.gsc b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbup.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbup.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbup.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_fence_climb.gsc b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_dock_fence_climb.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_fence_climb.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_dock_fence_climb.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_mid_climb_up.gsc b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_dock_mid_climb_up.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_mid_climb_up.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_dock_mid_climb_up.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_tommygun_drop.gsc b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_dock_tommygun_drop.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_tommygun_drop.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_dock_tommygun_drop.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_water_jump_up.gsc b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_dock_water_jump_up.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_water_jump_up.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_dock_water_jump_up.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_golden_gate_jump.gsc b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_golden_gate_jump.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_golden_gate_jump.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_golden_gate_jump.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_gondola_climb.gsc b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_gondola_climb.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_gondola_climb.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_alcatraz_gondola_climb.gsc diff --git a/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_jump_down_127.gsc b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_jump_down_127.gsc new file mode 100644 index 0000000..5b1c8da --- /dev/null +++ b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_jump_down_127.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_127" ); +} diff --git a/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_jump_down_222.gsc b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_jump_down_222.gsc new file mode 100644 index 0000000..e56cb57 --- /dev/null +++ b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_jump_down_222.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_222" ); +} diff --git a/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_jump_down_286.gsc b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_jump_down_286.gsc new file mode 100644 index 0000000..e5a5753 --- /dev/null +++ b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_jump_down_286.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_286" ); +} diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_down_72.gsc b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_jump_down_72.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/animscripts/traverse/zm_jump_down_72.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_jump_down_72.gsc diff --git a/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_jump_down_96.gsc b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_jump_down_96.gsc new file mode 100644 index 0000000..a051331 --- /dev/null +++ b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_jump_down_96.gsc @@ -0,0 +1,12 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + if ( isdefined( self.isdog ) && self.isdog ) + dog_jump_down( 96, 7 ); + else + dosimpletraverse( "jump_down_96" ); +} diff --git a/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_jump_up_127.gsc b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_jump_up_127.gsc new file mode 100644 index 0000000..30fbdd3 --- /dev/null +++ b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_jump_up_127.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_127" ); +} diff --git a/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_jump_up_222.gsc b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_jump_up_222.gsc new file mode 100644 index 0000000..9041804 --- /dev/null +++ b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_jump_up_222.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_222" ); +} diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_prison_jump_up_to_climb.gsc b/ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_prison_jump_up_to_climb.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_prison_jump_up_to_climb.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/animscripts/traverse/zm_prison_jump_up_to_climb.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/createfx/zm_prison_fx.gsc b/ZM/Maps/Mob of the Dead/maps/mp/createfx/zm_prison_fx.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/createfx/zm_prison_fx.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/createfx/zm_prison_fx.gsc diff --git a/ZM/Maps/Mob of the Dead/maps/mp/gametypes_zm/zgrief.gsc b/ZM/Maps/Mob of the Dead/maps/mp/gametypes_zm/zgrief.gsc new file mode 100644 index 0000000..9138fd2 --- /dev/null +++ b/ZM/Maps/Mob of the Dead/maps/mp/gametypes_zm/zgrief.gsc @@ -0,0 +1,814 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\gametypes_zm\zmeat; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_game_module_meat_utility; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_weap_cymbal_monkey; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\_demo; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_equipment; + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::main(); + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.custom_spectate_permissions = ::setspectatepermissionsgrief; + level._game_module_custom_spawn_init_func = maps\mp\gametypes_zm\_zm_gametype::custom_spawn_init_func; + level._game_module_stat_update_func = maps\mp\zombies\_zm_stats::grief_custom_stat_update; + level._game_module_player_damage_callback = maps\mp\gametypes_zm\_zm_gametype::game_module_player_damage_callback; + level.custom_end_screen = ::custom_end_screen; + level.gamemode_map_postinit["zgrief"] = ::postinit_func; + level._supress_survived_screen = 1; + level.game_module_team_name_override_og_x = 155; + level.prevent_player_damage = ::player_prevent_damage; + level._game_module_player_damage_grief_callback = ::game_module_player_damage_grief_callback; + level._grief_reset_message = ::grief_reset_message; + level._game_module_player_laststand_callback = ::grief_laststand_weapon_save; + level.onplayerspawned_restore_previous_weapons = ::grief_laststand_weapons_return; + level.game_module_onplayerconnect = ::grief_onplayerconnect; + level.game_mode_spawn_player_logic = ::game_mode_spawn_player_logic; + level.game_mode_custom_onplayerdisconnect = ::grief_onplayerdisconnect; + maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zgrief" ); +} + +grief_onplayerconnect() +{ + self thread move_team_icons(); + self thread maps\mp\gametypes_zm\zmeat::create_item_meat_watcher(); + self thread zgrief_player_bled_out_msg(); +} + +grief_onplayerdisconnect( disconnecting_player ) +{ + level thread update_players_on_bleedout_or_disconnect( disconnecting_player ); +} + +setspectatepermissionsgrief() +{ + self allowspectateteam( "allies", 1 ); + self allowspectateteam( "axis", 1 ); + self allowspectateteam( "freelook", 0 ); + self allowspectateteam( "none", 1 ); +} + +custom_end_screen() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + players[i].game_over_hud = newclienthudelem( players[i] ); + players[i].game_over_hud.alignx = "center"; + players[i].game_over_hud.aligny = "middle"; + players[i].game_over_hud.horzalign = "center"; + players[i].game_over_hud.vertalign = "middle"; + players[i].game_over_hud.y -= 130; + players[i].game_over_hud.foreground = 1; + players[i].game_over_hud.fontscale = 3; + players[i].game_over_hud.alpha = 0; + players[i].game_over_hud.color = ( 1, 1, 1 ); + players[i].game_over_hud.hidewheninmenu = 1; + players[i].game_over_hud settext( &"ZOMBIE_GAME_OVER" ); + players[i].game_over_hud fadeovertime( 1 ); + players[i].game_over_hud.alpha = 1; + + if ( players[i] issplitscreen() ) + { + players[i].game_over_hud.fontscale = 2; + players[i].game_over_hud.y += 40; + } + + players[i].survived_hud = newclienthudelem( players[i] ); + players[i].survived_hud.alignx = "center"; + players[i].survived_hud.aligny = "middle"; + players[i].survived_hud.horzalign = "center"; + players[i].survived_hud.vertalign = "middle"; + players[i].survived_hud.y -= 100; + players[i].survived_hud.foreground = 1; + players[i].survived_hud.fontscale = 2; + players[i].survived_hud.alpha = 0; + players[i].survived_hud.color = ( 1, 1, 1 ); + players[i].survived_hud.hidewheninmenu = 1; + + if ( players[i] issplitscreen() ) + { + players[i].survived_hud.fontscale = 1.5; + players[i].survived_hud.y += 40; + } + + winner_text = &"ZOMBIE_GRIEF_WIN"; + loser_text = &"ZOMBIE_GRIEF_LOSE"; + + if ( level.round_number < 2 ) + { + winner_text = &"ZOMBIE_GRIEF_WIN_SINGLE"; + loser_text = &"ZOMBIE_GRIEF_LOSE_SINGLE"; + } + + if ( isdefined( level.host_ended_game ) && level.host_ended_game ) + players[i].survived_hud settext( &"MP_HOST_ENDED_GAME" ); + else if ( isdefined( level.gamemodulewinningteam ) && players[i]._encounters_team == level.gamemodulewinningteam ) + players[i].survived_hud settext( winner_text, level.round_number ); + else + players[i].survived_hud settext( loser_text, level.round_number ); + + players[i].survived_hud fadeovertime( 1 ); + players[i].survived_hud.alpha = 1; + } +} + +postinit_func() +{ + level.min_humans = 1; + level.zombie_ai_limit = 24; + level.prevent_player_damage = ::player_prevent_damage; + level.lock_player_on_team_score = 1; + level._zombiemode_powerup_grab = ::meat_stink_powerup_grab; + level.meat_bounce_override = ::meat_bounce_override; + level._zombie_spawning = 0; + level._get_game_module_players = undefined; + level.powerup_drop_count = 0; + level.is_zombie_level = 1; + level._effect["meat_impact"] = loadfx( "maps/zombie/fx_zmb_meat_impact" ); + level._effect["spawn_cloud"] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); + level._effect["meat_stink_camera"] = loadfx( "maps/zombie/fx_zmb_meat_stink_camera" ); + level._effect["meat_stink_torso"] = loadfx( "maps/zombie/fx_zmb_meat_stink_torso" ); + include_powerup( "meat_stink" ); + maps\mp\zombies\_zm_powerups::add_zombie_powerup( "meat_stink", "t6_wpn_zmb_meat_world", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_drop_meat, 0, 0, 0 ); + setmatchtalkflag( "DeadChatWithDead", 1 ); + setmatchtalkflag( "DeadChatWithTeam", 1 ); + setmatchtalkflag( "DeadHearTeamLiving", 1 ); + setmatchtalkflag( "DeadHearAllLiving", 1 ); + setmatchtalkflag( "EveryoneHearsEveryone", 1 ); +} + +func_should_drop_meat() +{ + if ( minigun_no_drop() ) + return false; + + return true; +} + +minigun_no_drop() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].ignoreme == 1 ) + return true; + } + + if ( isdefined( level.meat_on_ground ) && level.meat_on_ground ) + return true; + + return false; +} + +grief_game_end_check_func() +{ + return 0; +} + +player_prevent_damage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + if ( isdefined( eattacker ) && isplayer( eattacker ) && self != eattacker && !eattacker hasperk( "specialty_noname" ) && !( isdefined( self.is_zombie ) && self.is_zombie ) ) + return true; + + return false; +} + +game_module_player_damage_grief_callback( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + penalty = 10; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && eattacker != self && eattacker.team != self.team && smeansofdeath == "MOD_MELEE" ) + self applyknockback( idamage, vdir ); +} + +onprecachegametype() +{ + level.playersuicideallowed = 1; + level.canplayersuicide = ::canplayersuicide; + level.suicide_weapon = "death_self_zm"; + precacheitem( "death_self_zm" ); + precacheshellshock( "grief_stab_zm" ); + precacheshader( "faction_cdc" ); + precacheshader( "faction_cia" ); + precacheshader( "waypoint_revive_cdc_zm" ); + precacheshader( "waypoint_revive_cia_zm" ); + level._effect["butterflies"] = loadfx( "maps/zombie/fx_zmb_impact_noharm" ); + level thread maps\mp\zombies\_zm_game_module_meat_utility::init_item_meat( "zgrief" ); + level thread maps\mp\gametypes_zm\_zm_gametype::init(); + maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zgrief" ); +} + +onstartgametype() +{ + level.no_end_game_check = 1; + level._game_module_game_end_check = ::grief_game_end_check_func; + level.round_end_custom_logic = ::grief_round_end_custom_logic; + maps\mp\gametypes_zm\_zm_gametype::setup_classic_gametype(); + maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zgrief", ::zgrief_main ); +} + +zgrief_main() +{ + level thread maps\mp\zombies\_zm::round_start(); + level thread maps\mp\gametypes_zm\_zm_gametype::kill_all_zombies(); + flag_wait( "initial_blackscreen_passed" ); + level thread maps\mp\zombies\_zm_game_module::wait_for_team_death_and_round_end(); + players = get_players(); + + foreach ( player in players ) + player.is_hotjoin = 0; + + wait 1; + playsoundatposition( "vox_zmba_grief_intro_0", ( 0, 0, 0 ) ); +} + +move_team_icons() +{ + self endon( "disconnect" ); + flag_wait( "initial_blackscreen_passed" ); + wait 0.5; +} + +kill_start_chest() +{ + flag_wait( "initial_blackscreen_passed" ); + wait 2; + start_chest = getstruct( "start_chest", "script_noteworthy" ); + start_chest maps\mp\zombies\_zm_magicbox::hide_chest(); +} + +meat_stink_powerup_grab( powerup, who ) +{ + switch ( powerup.powerup_name ) + { + case "meat_stink": + level thread meat_stink( who ); + break; + } +} + +meat_stink( who ) +{ + weapons = who getweaponslist(); + has_meat = 0; + + foreach ( weapon in weapons ) + { + if ( weapon == "item_meat_zm" ) + has_meat = 1; + } + + if ( has_meat ) + return; + + who.pre_meat_weapon = who getcurrentweapon(); + level notify( "meat_grabbed" ); + who notify( "meat_grabbed" ); + who playsound( "zmb_pickup_meat" ); + who increment_is_drinking(); + who giveweapon( "item_meat_zm" ); + who switchtoweapon( "item_meat_zm" ); + who setweaponammoclip( "item_meat_zm", 1 ); +} + +meat_stink_on_ground( position_to_play ) +{ + level.meat_on_ground = 1; + attractor_point = spawn( "script_model", position_to_play ); + attractor_point setmodel( "tag_origin" ); + attractor_point playsound( "zmb_land_meat" ); + wait 0.2; + playfxontag( level._effect["meat_stink_torso"], attractor_point, "tag_origin" ); + attractor_point playloopsound( "zmb_meat_flies" ); + attractor_point create_zombie_point_of_interest( 1536, 32, 10000 ); + attractor_point.attract_to_origin = 1; + attractor_point thread create_zombie_point_of_interest_attractor_positions( 4, 45 ); + attractor_point thread maps\mp\zombies\_zm_weap_cymbal_monkey::wait_for_attractor_positions_complete(); + attractor_point delay_thread( 15, ::self_delete ); + wait 16.0; + level.meat_on_ground = undefined; +} + +meat_bounce_override( pos, normal, ent ) +{ + if ( isdefined( ent ) && isplayer( ent ) ) + { + if ( !ent maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + level thread meat_stink_player( ent ); + + if ( isdefined( self.owner ) ) + { + maps\mp\_demo::bookmark( "zm_player_meat_stink", gettime(), ent, self.owner, 0, self ); + self.owner maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_given" ); + } + } + } + else + { + players = getplayers(); + closest_player = undefined; + closest_player_dist = 10000.0; + + for ( player_index = 0; player_index < players.size; player_index++ ) + { + player_to_check = players[player_index]; + + if ( self.owner == player_to_check ) + continue; + + if ( player_to_check maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + continue; + + distsq = distancesquared( pos, player_to_check.origin ); + + if ( distsq < closest_player_dist ) + { + closest_player = player_to_check; + closest_player_dist = distsq; + } + } + + if ( isdefined( closest_player ) ) + { + level thread meat_stink_player( closest_player ); + + if ( isdefined( self.owner ) ) + { + maps\mp\_demo::bookmark( "zm_player_meat_stink", gettime(), closest_player, self.owner, 0, self ); + self.owner maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_given" ); + } + } + else + { + valid_poi = check_point_in_enabled_zone( pos, undefined, undefined ); + + if ( valid_poi ) + { + self hide(); + level thread meat_stink_on_ground( self.origin ); + } + } + + playfx( level._effect["meat_impact"], self.origin ); + } + + self delete(); +} + +meat_stink_player( who ) +{ + level notify( "new_meat_stink_player" ); + level endon( "new_meat_stink_player" ); + who.ignoreme = 0; + players = get_players(); + + foreach ( player in players ) + { + player thread meat_stink_player_cleanup(); + + if ( player != who ) + player.ignoreme = 1; + } + + who thread meat_stink_player_create(); + who waittill_any_or_timeout( 30, "disconnect", "player_downed", "bled_out" ); + players = get_players(); + + foreach ( player in players ) + { + player thread meat_stink_player_cleanup(); + player.ignoreme = 0; + } +} + +meat_stink_player_create() +{ + self maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_received" ); + self endon( "disconnect" ); + self endon( "death" ); + tagname = "J_SpineLower"; + self.meat_stink_3p = spawn( "script_model", self gettagorigin( tagname ) ); + self.meat_stink_3p setmodel( "tag_origin" ); + self.meat_stink_3p linkto( self, tagname ); + wait 0.5; + playfxontag( level._effect["meat_stink_torso"], self.meat_stink_3p, "tag_origin" ); + self setclientfieldtoplayer( "meat_stink", 1 ); +} + +meat_stink_player_cleanup() +{ + if ( isdefined( self.meat_stink_3p ) ) + { + self.meat_stink_3p unlink(); + self.meat_stink_3p delete(); + } + + self setclientfieldtoplayer( "meat_stink", 0 ); +} + +door_close_zombie_think() +{ + self endon( "death" ); + + while ( isalive( self ) ) + { + if ( isdefined( self.enemy ) && isplayer( self.enemy ) ) + { + insamezone = 0; + keys = getarraykeys( level.zones ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( keys[i] ) && self.enemy maps\mp\zombies\_zm_zonemgr::entity_in_zone( keys[i] ) ) + insamezone = 1; + } + + if ( insamezone ) + { + wait 3; + continue; + } + + nearestzombienode = getnearestnode( self.origin ); + nearestplayernode = getnearestnode( self.enemy.origin ); + + if ( isdefined( nearestzombienode ) && isdefined( nearestplayernode ) ) + { + if ( !nodesvisible( nearestzombienode, nearestplayernode ) && !nodescanpath( nearestzombienode, nearestplayernode ) ) + self silentlyremovezombie(); + } + } + + wait 1; + } +} + +silentlyremovezombie() +{ + level.zombie_total++; + playfx( level._effect["spawn_cloud"], self.origin ); + self.skip_death_notetracks = 1; + self.nodeathragdoll = 1; + self dodamage( self.maxhealth * 2, self.origin, self, self, "none", "MOD_SUICIDE" ); + self self_delete(); +} + +zgrief_player_bled_out_msg() +{ + level endon( "end_game" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "bled_out" ); + + level thread update_players_on_bleedout_or_disconnect( self ); + } +} + +show_grief_hud_msg( msg, msg_parm, offset, cleanup_end_game ) +{ + self endon( "disconnect" ); + + while ( isdefined( level.hostmigrationtimer ) ) + wait 0.05; + + zgrief_hudmsg = newclienthudelem( self ); + zgrief_hudmsg.alignx = "center"; + zgrief_hudmsg.aligny = "middle"; + zgrief_hudmsg.horzalign = "center"; + zgrief_hudmsg.vertalign = "middle"; + zgrief_hudmsg.y -= 130; + + if ( self issplitscreen() ) + zgrief_hudmsg.y += 70; + + if ( isdefined( offset ) ) + zgrief_hudmsg.y += offset; + + zgrief_hudmsg.foreground = 1; + zgrief_hudmsg.fontscale = 5; + zgrief_hudmsg.alpha = 0; + zgrief_hudmsg.color = ( 1, 1, 1 ); + zgrief_hudmsg.hidewheninmenu = 1; + zgrief_hudmsg.font = "default"; + + if ( isdefined( cleanup_end_game ) && cleanup_end_game ) + { + level endon( "end_game" ); + zgrief_hudmsg thread show_grief_hud_msg_cleanup(); + } + + if ( isdefined( msg_parm ) ) + zgrief_hudmsg settext( msg, msg_parm ); + else + zgrief_hudmsg settext( msg ); + + zgrief_hudmsg changefontscaleovertime( 0.25 ); + zgrief_hudmsg fadeovertime( 0.25 ); + zgrief_hudmsg.alpha = 1; + zgrief_hudmsg.fontscale = 2; + wait 3.25; + zgrief_hudmsg changefontscaleovertime( 1 ); + zgrief_hudmsg fadeovertime( 1 ); + zgrief_hudmsg.alpha = 0; + zgrief_hudmsg.fontscale = 5; + wait 1; + zgrief_hudmsg notify( "death" ); + + if ( isdefined( zgrief_hudmsg ) ) + zgrief_hudmsg destroy(); +} + +show_grief_hud_msg_cleanup() +{ + self endon( "death" ); + + level waittill( "end_game" ); + + if ( isdefined( self ) ) + self destroy(); +} + +grief_reset_message() +{ + msg = &"ZOMBIE_GRIEF_RESET"; + players = get_players(); + + if ( isdefined( level.hostmigrationtimer ) ) + { + while ( isdefined( level.hostmigrationtimer ) ) + wait 0.05; + + wait 4; + } + + foreach ( player in players ) + player thread show_grief_hud_msg( msg ); + + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "grief_restarted" ); +} + +grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + self.grief_savedweapon_weapons = self getweaponslist(); + self.grief_savedweapon_weaponsammo_stock = []; + self.grief_savedweapon_weaponsammo_clip = []; + self.grief_savedweapon_currentweapon = self getcurrentweapon(); + self.grief_savedweapon_grenades = self get_player_lethal_grenade(); + + if ( isdefined( self.grief_savedweapon_grenades ) ) + self.grief_savedweapon_grenades_clip = self getweaponammoclip( self.grief_savedweapon_grenades ); + + self.grief_savedweapon_tactical = self get_player_tactical_grenade(); + + if ( isdefined( self.grief_savedweapon_tactical ) ) + self.grief_savedweapon_tactical_clip = self getweaponammoclip( self.grief_savedweapon_tactical ); + + for ( i = 0; i < self.grief_savedweapon_weapons.size; i++ ) + { + self.grief_savedweapon_weaponsammo_clip[i] = self getweaponammoclip( self.grief_savedweapon_weapons[i] ); + self.grief_savedweapon_weaponsammo_stock[i] = self getweaponammostock( self.grief_savedweapon_weapons[i] ); + } + + if ( isdefined( self.hasriotshield ) && self.hasriotshield ) + self.grief_hasriotshield = 1; + + if ( self hasweapon( "claymore_zm" ) ) + { + self.grief_savedweapon_claymore = 1; + self.grief_savedweapon_claymore_clip = self getweaponammoclip( "claymore_zm" ); + } + + if ( isdefined( self.current_equipment ) ) + self.grief_savedweapon_equipment = self.current_equipment; +} + +grief_laststand_weapons_return() +{ + if ( !( isdefined( level.isresetting_grief ) && level.isresetting_grief ) ) + return false; + + if ( !isdefined( self.grief_savedweapon_weapons ) ) + return false; + + primary_weapons_returned = 0; + + foreach ( index, weapon in self.grief_savedweapon_weapons ) + { + if ( isdefined( self.grief_savedweapon_grenades ) && weapon == self.grief_savedweapon_grenades || isdefined( self.grief_savedweapon_tactical ) && weapon == self.grief_savedweapon_tactical ) + continue; + + if ( isweaponprimary( weapon ) ) + { + if ( primary_weapons_returned >= 2 ) + continue; + + primary_weapons_returned++; + } + + if ( "item_meat_zm" == weapon ) + continue; + + self giveweapon( weapon, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); + + if ( isdefined( self.grief_savedweapon_weaponsammo_clip[index] ) ) + self setweaponammoclip( weapon, self.grief_savedweapon_weaponsammo_clip[index] ); + + if ( isdefined( self.grief_savedweapon_weaponsammo_stock[index] ) ) + self setweaponammostock( weapon, self.grief_savedweapon_weaponsammo_stock[index] ); + } + + if ( isdefined( self.grief_savedweapon_grenades ) ) + { + self giveweapon( self.grief_savedweapon_grenades ); + + if ( isdefined( self.grief_savedweapon_grenades_clip ) ) + self setweaponammoclip( self.grief_savedweapon_grenades, self.grief_savedweapon_grenades_clip ); + } + + if ( isdefined( self.grief_savedweapon_tactical ) ) + { + self giveweapon( self.grief_savedweapon_tactical ); + + if ( isdefined( self.grief_savedweapon_tactical_clip ) ) + self setweaponammoclip( self.grief_savedweapon_tactical, self.grief_savedweapon_tactical_clip ); + } + + if ( isdefined( self.current_equipment ) ) + self maps\mp\zombies\_zm_equipment::equipment_take( self.current_equipment ); + + if ( isdefined( self.grief_savedweapon_equipment ) ) + { + self.do_not_display_equipment_pickup_hint = 1; + self maps\mp\zombies\_zm_equipment::equipment_give( self.grief_savedweapon_equipment ); + self.do_not_display_equipment_pickup_hint = undefined; + } + + if ( isdefined( self.grief_hasriotshield ) && self.grief_hasriotshield ) + { + if ( isdefined( self.player_shield_reset_health ) ) + self [[ self.player_shield_reset_health ]](); + } + + if ( isdefined( self.grief_savedweapon_claymore ) && self.grief_savedweapon_claymore ) + { + self giveweapon( "claymore_zm" ); + self set_player_placeable_mine( "claymore_zm" ); + self setactionslot( 4, "weapon", "claymore_zm" ); + self setweaponammoclip( "claymore_zm", self.grief_savedweapon_claymore_clip ); + } + + primaries = self getweaponslistprimaries(); + + foreach ( weapon in primaries ) + { + if ( isdefined( self.grief_savedweapon_currentweapon ) && self.grief_savedweapon_currentweapon == weapon ) + { + self switchtoweapon( weapon ); + return true; + } + } + + if ( primaries.size > 0 ) + { + self switchtoweapon( primaries[0] ); + return true; + } + + assert( primaries.size > 0, "GRIEF: There was a problem restoring the weapons" ); + return false; +} + +grief_store_player_scores() +{ + players = get_players(); + + foreach ( player in players ) + player._pre_round_score = player.score; +} + +grief_restore_player_score() +{ + if ( !isdefined( self._pre_round_score ) ) + self._pre_round_score = self.score; + + if ( isdefined( self._pre_round_score ) ) + { + self.score = self._pre_round_score; + self.pers["score"] = self._pre_round_score; + } +} + +game_mode_spawn_player_logic() +{ + if ( flag( "start_zombie_round_logic" ) && !isdefined( self.is_hotjoin ) ) + { + self.is_hotjoin = 1; + return true; + } + + return false; +} + +update_players_on_bleedout_or_disconnect( excluded_player ) +{ + other_team = undefined; + players = get_players(); + players_remaining = 0; + + foreach ( player in players ) + { + if ( player == excluded_player ) + continue; + + if ( player.team == excluded_player.team ) + { + if ( is_player_valid( player ) ) + players_remaining++; + + continue; + } + } + + foreach ( player in players ) + { + if ( player == excluded_player ) + continue; + + if ( player.team != excluded_player.team ) + { + other_team = player.team; + + if ( players_remaining < 1 ) + { + player thread show_grief_hud_msg( &"ZOMBIE_ZGRIEF_ALL_PLAYERS_DOWN", undefined, undefined, 1 ); + player delay_thread_watch_host_migrate( 2, ::show_grief_hud_msg, &"ZOMBIE_ZGRIEF_SURVIVE", undefined, 30, 1 ); + continue; + } + + player thread show_grief_hud_msg( &"ZOMBIE_ZGRIEF_PLAYER_BLED_OUT", players_remaining ); + } + } + + if ( players_remaining == 1 ) + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "last_player", excluded_player.team ); + + if ( !isdefined( other_team ) ) + return; + + if ( players_remaining < 1 ) + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "4_player_down", other_team ); + else + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( players_remaining + "_player_left", other_team ); +} + +delay_thread_watch_host_migrate( timer, func, param1, param2, param3, param4, param5, param6 ) +{ + self thread _delay_thread_watch_host_migrate_proc( func, timer, param1, param2, param3, param4, param5, param6 ); +} + +_delay_thread_watch_host_migrate_proc( func, timer, param1, param2, param3, param4, param5, param6 ) +{ + self endon( "death" ); + self endon( "disconnect" ); + wait( timer ); + + if ( isdefined( level.hostmigrationtimer ) ) + { + while ( isdefined( level.hostmigrationtimer ) ) + wait 0.05; + + wait( timer ); + } + + single_thread( self, func, param1, param2, param3, param4, param5, param6 ); +} + +grief_round_end_custom_logic() +{ + waittillframeend; + + if ( isdefined( level.gamemodulewinningteam ) ) + level notify( "end_round_think" ); +} diff --git a/ZM/Maps/Mob of the Dead/maps/mp/gametypes_zm/zmeat.gsc b/ZM/Maps/Mob of the Dead/maps/mp/gametypes_zm/zmeat.gsc new file mode 100644 index 0000000..072980c --- /dev/null +++ b/ZM/Maps/Mob of the Dead/maps/mp/gametypes_zm/zmeat.gsc @@ -0,0 +1,2289 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_game_module_meat_utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_spawner; + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::main(); + registerclientfield( "allplayers", "holding_meat", 7000, 1, "int" ); + registerclientfield( "scriptmover", "ring_glowfx", 7000, 1, "int" ); + registerclientfield( "scriptmover", "ring_glow_meatfx", 7000, 1, "int" ); + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + set_game_var( "ZM_roundLimit", 5 ); + set_game_var( "ZM_scoreLimit", 5 ); + set_gamemode_var( "post_init_zombie_spawn_func", ::meat_zombie_post_spawn_init ); + set_gamemode_var( "match_end_notify", "meat_end" ); + set_gamemode_var( "match_end_func", ::meat_end_match ); + level._no_static_unitriggers = 1; + level._game_module_player_damage_callback = maps\mp\gametypes_zm\_zm_gametype::game_module_player_damage_callback; + level._game_module_player_laststand_callback = ::meat_last_stand_callback; + level.no_end_game_check = 1; + maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zmeat" ); + level thread maps\mp\gametypes_zm\_zm_gametype::init(); + level.zm_roundswitch = 1; + level.zm_switchsides_on_roundswitch = 1; + level._effect["meat_marker"] = loadfx( "maps/zombie/fx_zmb_meat_marker" ); + level._effect["butterflies"] = loadfx( "maps/zombie/fx_zmb_impact_noharm" ); + level._effect["meat_glow"] = loadfx( "maps/zombie/fx_zmb_meat_glow" ); + level._effect["meat_glow3p"] = loadfx( "maps/zombie/fx_zmb_meat_glow_3p" ); + level._effect["spawn_cloud"] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); + level._effect["fw_burst"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_burst_center" ); + level._effect["fw_impact"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_drop_impact" ); + level._effect["fw_drop"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_drop_trail" ); + level._effect["fw_trail"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_trail" ); + level._effect["fw_trail_cheap"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_trail_intro" ); + level._effect["fw_pre_burst"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_burst_small" ); + level._effect["meat_bounce"] = loadfx( "maps/zombie/fx_zmb_meat_collision_glow" ); + level._effect["ring_glow"] = loadfx( "misc/fx_zombie_powerup_on" ); + level.can_revive_game_module = ::can_revive; + onplayerconnect_callback( ::meat_on_player_connect ); + spawn_level_meat_manager(); + init_animtree(); +} + +onprecachegametype() +{ + level thread maps\mp\zombies\_zm_game_module_meat_utility::init_item_meat( "zmeat" ); + maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zmeat" ); + game_mode_objects = getstructarray( "game_mode_object", "targetname" ); + meat_objects = getstructarray( "meat_object", "targetname" ); + all_structs = arraycombine( game_mode_objects, meat_objects, 1, 0 ); + + for ( i = 0; i < all_structs.size; i++ ) + { + if ( isdefined( all_structs[i].script_parameters ) ) + precachemodel( all_structs[i].script_parameters ); + } + + precacheshellshock( "grief_stab_zm" ); + precacheitem( "minigun_zm" ); + precacheshader( "faction_cdc" ); + precacheshader( "faction_cia" ); + precachemodel( "p6_zm_sign_meat_01_step1" ); + precachemodel( "p6_zm_sign_meat_01_step2" ); + precachemodel( "p6_zm_sign_meat_01_step3" ); + precachemodel( "p6_zm_sign_meat_01_step4" ); +} + +meat_hub_start_func() +{ + level thread meat_player_initial_spawn(); + level thread item_meat_reset( level._meat_start_point ); + level thread spawn_meat_zombies(); + level thread monitor_meat_on_team(); + level thread init_minigun_ring(); + level thread init_splitter_ring(); + level thread init_ammo_ring(); + level thread hide_non_meat_objects(); + level thread setup_meat_world_objects(); + level._zombie_path_timer_override = ::zombie_path_timer_override; + level.zombie_health = level.zombie_vars["zombie_health_start"]; + level._zombie_spawning = 0; + level._poi_override = ::meat_poi_override_func; + level._meat_on_team = undefined; + level._meat_zombie_spawn_timer = 2; + level._meat_zombie_spawn_health = 1; + level._minigun_time_override = 15; + level._get_game_module_players = ::get_game_module_players; + level.powerup_drop_count = 0; + level.meat_spawners = level.zombie_spawners; + + if ( !( isdefined( level._meat_callback_initialized ) && level._meat_callback_initialized ) ) + { + maps\mp\zombies\_zm::register_player_damage_callback( maps\mp\zombies\_zm_game_module::damage_callback_no_pvp_damage ); + level._meat_callback_initialized = 1; + } + + setmatchtalkflag( "DeadChatWithDead", 1 ); + setmatchtalkflag( "DeadChatWithTeam", 1 ); + setmatchtalkflag( "DeadHearTeamLiving", 1 ); + setmatchtalkflag( "DeadHearAllLiving", 1 ); + setmatchtalkflag( "EveryoneHearsEveryone", 1 ); + setteamhasmeat( "allies", 0 ); + setteamhasmeat( "axis", 0 ); + level thread zmbmusicsetupmeat(); + level.zombie_spawn_fx = level._effect["spawn_cloud"]; + weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); + + for ( i = 0; i < weapon_spawns.size; i++ ) + weapon_spawns[i] trigger_off(); + + level thread monitor_meat_on_side(); + level thread item_meat_watch_for_throw(); + level thread hold_meat_monitor(); + flag_wait( "start_encounters_match_logic" ); + level thread wait_for_team_death( 1 ); + level thread wait_for_team_death( 2 ); + level.team_a_downed = 0; + level.team_b_downed = 0; +} + +meat_on_player_connect() +{ + hotjoined = flag( "initial_players_connected" ); + self thread spawn_player_meat_manager(); + self thread wait_for_player_disconnect(); + self thread wait_for_player_downed(); +/# + self thread watch_debug_input(); +#/ + if ( hotjoined ) + { + one = 1; + two = 2; + + if ( get_game_var( "switchedsides" ) ) + { + one = 2; + two = 1; + } + + if ( get_game_var( "side_selection" ) == 1 ) + { + if ( self.team == "allies" ) + self._meat_team = one; + else + self._meat_team = two; + } + else if ( self.team == "allies" ) + self._meat_team = two; + else + self._meat_team = one; + + self meat_player_setup(); + } +} + +meat_on_player_disconnect() +{ + team0 = 1; + team1 = 2; + team_counts = []; + team_counts[team0] = 0; + team_counts[team1] = 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + team_counts[players[i]._meat_team] += 1; + + if ( team_counts[team0] == 0 ) + maps\mp\gametypes_zm\_zm_gametype::end_rounds_early( "B" ); + + if ( team_counts[team1] == 0 ) + maps\mp\gametypes_zm\_zm_gametype::end_rounds_early( "A" ); +} + +wait_for_player_disconnect() +{ + level endon( "end_game" ); + + self waittill( "disconnect" ); + + meat_on_player_disconnect(); +} + +watch_debug_input() +{ +/# + self endon( "disconnect" ); + + for (;;) + { + if ( self actionslottwobuttonpressed() ) + { + if ( getdvar( _hash_B188A91 ) != "" ) + { + self disableinvulnerability(); + self dodamage( self.health + 666, self.origin ); + } + } + + wait 0.05; + } +#/ +} + +zmbmusicsetupmeat() +{ + level.zmb_music_states["game_over"] = undefined; + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "waiting", "ENC_WAITING", 0, 0, 0, undefined ); + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "round_start", "ENC_ROUND_START", 0, 0, 0, undefined ); + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "round_end", "ENC_ROUND_END", 0, 0, 0, undefined ); + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "halftime", "ENC_HALFTIME", 0, 0, 0, undefined ); + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "match_over", "ENC_MATCH_OVER", 0, 0, 0, undefined ); +} + +monitor_meat_on_side() +{ + level endon( "meat_end" ); + + level waittill( "meat_grabbed" ); + + last_team = level._meat_on_team; + level.meat_lost_time_limit = 5000; + + while ( true ) + { + if ( isdefined( level.item_meat ) ) + { + if ( !isdefined( level._meat_team_1_volume ) || !isdefined( level._meat_team_2_volume ) ) + iprintlnbold( "BUG: There is something wrong with the team volumes" ); + + if ( isdefined( level._meat_team_1_volume ) && level.item_meat istouching( level._meat_team_1_volume ) ) + { + level._meat_on_team = 1; + level.meat_lost_time = undefined; + } + else if ( isdefined( level._meat_team_2_volume ) && level.item_meat istouching( level._meat_team_2_volume ) ) + { + level._meat_on_team = 2; + level.meat_lost_time = undefined; + } + else if ( isdefined( last_team ) ) + { + if ( !isdefined( level.meat_lost_time ) ) + level.meat_lost_time = gettime(); + else if ( gettime() - level.meat_lost_time > level.meat_lost_time_limit ) + { + add_meat_event( "level_lost_meat" ); + level thread item_meat_reset( level._meat_start_point, 1 ); + level.meat_lost_time = undefined; + + level waittill( "meat_grabbed" ); + } + } + } + else + { + player_with_meat = get_player_with_meat(); + + if ( !isdefined( player_with_meat ) ) + { + if ( !isdefined( level.meat_lost_time ) ) + level.meat_lost_time = gettime(); + else if ( gettime() - level.meat_lost_time > level.meat_lost_time_limit ) + { + add_meat_event( "level_lost_meat" ); + level thread item_meat_reset( level._meat_start_point, 1 ); + level.meat_lost_time = undefined; + + level waittill( "meat_grabbed" ); + } + } + else + level.meat_lost_time = undefined; + } + + if ( isdefined( level._meat_on_team ) && isdefined( last_team ) && level._meat_on_team != last_team ) + { + level notify( "clear_ignore_all" ); + add_meat_event( "level_meat_team", level._meat_on_team ); + last_team = level._meat_on_team; + assign_meat_to_team( undefined, level._meat_on_team ); +/# + if ( isdefined( level.item_meat ) ) + playfx( level._effect["spawn_cloud"], level.item_meat.origin ); +#/ + } + + wait 0.05; + } +} + +item_meat_watch_for_throw() +{ + level endon( "meat_end" ); + + for (;;) + { + level waittill( "meat_thrown", who ); + + add_meat_event( "player_thrown", who ); + + if ( isdefined( who._spawning_meat ) && who._spawning_meat ) + continue; + + if ( randomintrange( 1, 101 ) <= 10 ) + { + + } + + who._has_meat = 0; + + if ( isdefined( who._has_meat_hud ) ) + who._has_meat_hud destroy(); + + assign_meat_to_team( undefined, level._meat_on_team ); + } +} + +hold_meat_monitor() +{ + level endon( "meat_end" ); + + level waittill( "meat_grabbed" ); + + while ( true ) + { + player = get_player_with_meat(); + + if ( !isdefined( player ) ) + { + wait 0.2; + continue; + } + + if ( !should_try_to_bring_back_teammate( player._meat_team ) ) + { + wait 0.2; + continue; + } + + if ( !( isdefined( player._bringing_back_teammate ) && player._bringing_back_teammate ) ) + player thread bring_back_teammate_progress(); + + wait 0.2; + } +} + +meat_zombie_post_spawn_init() +{ + +} + +create_item_meat_watcher() +{ + wait 0.05; + watcher = self maps\mp\gametypes_zm\_weaponobjects::createuseweaponobjectwatcher( "item_meat", get_gamemode_var( "item_meat_name" ), self.team ); + watcher.pickup = ::item_meat_on_pickup; + watcher.onspawn = ::item_meat_spawned; + watcher.onspawnretrievetriggers = ::play_item_meat_on_spawn_retrieve_trigger; + watcher.headicon = 0; +} + +item_meat_spawned( unused0, unused1 ) +{ + maps\mp\gametypes_zm\_weaponobjects::voidonspawn( unused0, unused1 ); + self.meat_is_moving = 0; + self.meat_is_flying = 0; +} + +wait_for_player_downed() +{ + self endon( "disconnect" ); + + while ( isdefined( self ) ) + { + self waittill_any( "player_downed", "fake_death", "death" ); + add_meat_event( "player_down", self ); + wait 0.1; + + if ( isdefined( self._meat_team ) ) + { + self thread watch_save_player(); + players = get_players_on_meat_team( self._meat_team ); + + if ( players.size >= 2 ) + { + + } + } + } +} + +item_meat_watch_stationary() +{ + self endon( "death" ); + self endon( "picked_up" ); + self.meat_is_moving = 1; + + self waittill( "stationary" ); + + self playloopsound( "zmb_meat_looper", 2 ); + + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + add_meat_event( "meat_stationary", self ); + else + add_meat_event( "fake_meat_stationary", self ); + + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + { + level._meat_moving = 0; + level._meat_splitter_activated = 0; + level._last_person_to_throw_meat = undefined; + } + + self.meat_is_moving = 0; + + if ( isdefined( level._meat_on_team ) ) + { + teamplayers = get_players_on_meat_team( level._meat_on_team ); + + for ( i = 0; i < teamplayers.size; i++ ) + { + if ( isdefined( teamplayers[i] ) && isdefined( teamplayers[i]._encounters_team ) ) + { + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_land", teamplayers[i]._encounters_team ); + break; + } + } + } +} + +item_meat_watch_bounce() +{ + self endon( "death" ); + self endon( "picked_up" ); + self.meat_is_flying = 1; + + self waittill( "grenade_bounce", pos, normal, ent ); + + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + add_meat_event( "meat_bounce", self, pos, normal, ent ); + else + add_meat_event( "fake_meat_bounce", self, pos, normal, ent ); + + if ( isdefined( level.meat_bounce_override ) ) + { + self thread [[ level.meat_bounce_override ]]( pos, normal, ent ); + return; + } + + if ( isdefined( level.spawned_collmap ) ) + { + if ( isdefined( ent ) && ent == level.spawned_collmap ) + playfx( level._effect["meat_bounce"], pos, normal ); + } + + if ( isdefined( ent ) && isplayer( ent ) ) + { + add_meat_event( "player_hit_player", self.owner, ent ); + self.owner hit_player_with_meat( ent ); + } + + self.meat_is_flying = 0; + self thread watch_for_roll(); + playfxontag( level._effect["meat_marker"], self, "tag_origin" ); +} + +watch_for_roll() +{ + self endon( "stationary" ); + self endon( "death" ); + self endon( "picked_up" ); + self.meat_is_rolling = 0; + + while ( true ) + { + old_z = self.origin[2]; + wait 1; + + if ( abs( old_z - self.origin[2] ) < 10 ) + { + self.meat_is_rolling = 1; + self playloopsound( "zmb_meat_looper", 2 ); + } + } +} + +stop_rolling() +{ + self.origin = self.origin; + self.angles = self.angles; +} + +hit_player_with_meat( hit_player ) +{ +/# + println( "MEAT: Player " + self.name + " hit " + hit_player.name + " with the meat\\n" ); +#/ +} + +item_meat_pickup() +{ + self.meat_is_moving = 0; + self.meat_is_flying = 0; + level._meat_moving = 0; + level._meat_splitter_activated = 0; + self notify( "picked_up" ); +} + +player_wait_take_meat( meat_name ) +{ + self.dont_touch_the_meat = 1; + + if ( isdefined( self.pre_meat_weapon ) && self hasweapon( self.pre_meat_weapon ) ) + self switchtoweapon( self.pre_meat_weapon ); + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + else + { + assert( 0, "Player has no weapon" ); + self maps\mp\zombies\_zm_weapons::give_fallback_weapon(); + } + } + + self waittill_notify_or_timeout( "weapon_change_complete", 3 ); + self takeweapon( meat_name ); + self.pre_meat_weapon = undefined; + + if ( self.is_drinking ) + self decrement_is_drinking(); + + self.dont_touch_the_meat = 0; +} + +cleanup_meat() +{ + if ( isdefined( self.altmodel ) ) + self.altmodel delete(); + + self delete(); +} + +#using_animtree("zombie_meat"); + +init_animtree() +{ + scriptmodelsuseanimtree( #animtree ); +} + +animate_meat( grenade ) +{ + grenade waittill_any( "bounce", "stationary", "death" ); + waittillframeend; + + if ( isdefined( grenade ) ) + { + grenade hide(); + altmodel = spawn( "script_model", grenade.origin ); + altmodel setmodel( get_gamemode_var( "item_meat_model" ) ); + altmodel useanimtree( #animtree ); + altmodel.angles = grenade.angles; + altmodel linkto( grenade, "", ( 0, 0, 0 ), ( 0, 0, 0 ) ); + altmodel setanim( %o_zombie_head_idle_v1 ); + grenade.altmodel = altmodel; + + while ( isdefined( grenade ) ) + wait 0.05; + + if ( isdefined( altmodel ) ) + altmodel delete(); + } +} + +indexinarray( array, value ) +{ + if ( !isdefined( array ) || !isarray( array ) || !isdefined( value ) || !isinarray( array, value ) ) + return undefined; + + foreach ( index, item in array ) + { + if ( item == value ) + return index; + } + + return undefined; +} + +item_meat_on_spawn_retrieve_trigger( watcher, player, weaponname ) +{ + self endon( "death" ); + add_meat_event( "meat_spawn", self ); + thread animate_meat( self ); + + while ( isdefined( level.splitting_meat ) && level.splitting_meat ) + wait 0.15; + + if ( isdefined( player ) ) + { + self setowner( player ); + self setteam( player.pers["team"] ); + self.owner = player; + self.oldangles = self.angles; + + if ( player hasweapon( weaponname ) ) + { + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + player thread player_wait_take_meat( weaponname ); + else + { + player takeweapon( weaponname ); + player decrement_is_drinking(); + } + } + + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + { + if ( !( isdefined( self._respawned_meat ) && self._respawned_meat ) ) + { + level notify( "meat_thrown", player ); + level._last_person_to_throw_meat = player; + level._last_person_to_throw_meat_time = gettime(); + } + } + } + + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + { + level._meat_moving = 1; + + if ( isdefined( level.item_meat ) && level.item_meat != self ) + level.item_meat cleanup_meat(); + + level.item_meat = self; + } + + self thread item_meat_watch_stationary(); + self thread item_meat_watch_bounce(); + self.item_meat_pick_up_trigger = spawn( "trigger_radius_use", self.origin, 0, 36, 72 ); + self.item_meat_pick_up_trigger setcursorhint( "HINT_NOICON" ); + self.item_meat_pick_up_trigger sethintstring( &"ZOMBIE_MEAT_PICKUP" ); + self.item_meat_pick_up_trigger enablelinkto(); + self.item_meat_pick_up_trigger linkto( self ); + self.item_meat_pick_up_trigger triggerignoreteam(); + level.item_meat_pick_up_trigger = self.item_meat_pick_up_trigger; + self thread item_meat_watch_shutdown(); + self.meat_id = indexinarray( level._fake_meats, self ); + + if ( !isdefined( self.meat_id ) ) + self.meat_id = 0; + + if ( isdefined( level.dont_allow_meat_interaction ) && level.dont_allow_meat_interaction ) + self.item_meat_pick_up_trigger setinvisibletoall(); + else + { + self thread item_meat_watch_trigger( self.meat_id, self.item_meat_pick_up_trigger, ::item_meat_on_pickup, level.meat_pickupsoundplayer, level.meat_pickupsound ); + self thread kick_meat_monitor(); + self thread last_stand_meat_nudge(); + } + + self._respawned_meat = undefined; +} + +last_stand_meat_nudge() +{ + level endon( "meat_grabbed" ); + level endon( "end_meat" ); + self endon( "death" ); + wait 0.15; + + while ( true ) + { + players = get_players(); + + foreach ( player in players ) + { + if ( distancesquared( player.origin, self.origin ) < 2304 && player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + player thread kick_the_meat( self, 1 ); + } + + wait 0.05; + } +} + +kick_meat_monitor() +{ + level endon( "meat_grabbed" ); + level endon( "end_meat" ); + self endon( "death" ); + kick_meat_timeout = 150; + + while ( true ) + { + players = get_players(); + curr_time = gettime(); + + foreach ( player in players ) + { + if ( isdefined( level._last_person_to_throw_meat ) && player == level._last_person_to_throw_meat && curr_time - level._last_person_to_throw_meat_time <= kick_meat_timeout ) + continue; + + if ( distancesquared( player.origin, self.origin ) < 2304 && player issprinting() && !player usebuttonpressed() ) + { + if ( isdefined( player._meat_team ) && isdefined( level._meat_on_team ) && level._meat_on_team == player._meat_team ) + { + add_meat_event( "player_kick_meat", player, self ); + player thread kick_the_meat( self ); + } + } + } + + wait 0.05; + } +} + +is_meat( weapon ) +{ + return weapon == get_gamemode_var( "item_meat_name" ); +} + +spike_the_meat( meat ) +{ + if ( isdefined( self._kicking_meat ) && self._kicking_meat ) + return; + + fake_meat = 0; + self._kicking_meat = 1; + self._spawning_meat = 1; + org = self getweaponmuzzlepoint(); + vel = meat getvelocity(); + + if ( !( isdefined( meat._fake_meat ) && meat._fake_meat ) ) + { + meat cleanup_meat(); + level._last_person_to_throw_meat = self; + level._last_person_to_throw_meat_time = gettime(); + level._meat_splitter_activated = 0; + } + else + { + fake_meat = 1; + meat cleanup_meat(); + } + + kickangles = self.angles; + kickangles += ( randomfloatrange( -30, -20 ), randomfloatrange( -5, 5 ), 0 ); + launchdir = anglestoforward( kickangles ); + speed = length( vel ) * 1.5; + launchvel = vectorscale( launchdir, speed ); + grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( launchvel[0], launchvel[1], 380 ) ); + grenade playsound( "zmb_meat_meat_tossed" ); + grenade thread waittill_loopstart(); + + if ( fake_meat ) + { + grenade._fake_meat = 1; + grenade thread delete_on_real_meat_pickup(); + level._kicked_meat = grenade; + } + + wait 0.1; + self._spawning_meat = 0; + self._kicking_meat = 0; + + if ( !fake_meat ) + { + level notify( "meat_thrown", self ); + level notify( "meat_kicked" ); + } +} + +show_meat_throw_hint() +{ + level endon( "meat_thrown" ); + self endon( "player_downed" ); + self thread meat_screen_message_delete_on_death(); + wait 1; + self meat_create_hint_message( &"ZOMBIE_THROW_MEAT_HINT" ); + self thread meat_screen_message_delete(); +} + +meat_create_hint_message( string_message_1, string_message_2, string_message_3, n_offset_y = 0 ) +{ + if ( !isdefined( self._screen_message_1 ) ) + { + self._screen_message_1 = newclienthudelem( self ); + self._screen_message_1.elemtype = "font"; + self._screen_message_1.font = "objective"; + self._screen_message_1.fontscale = 1.8; + self._screen_message_1.horzalign = "center"; + self._screen_message_1.vertalign = "middle"; + self._screen_message_1.alignx = "center"; + self._screen_message_1.aligny = "middle"; + self._screen_message_1.y = -60 + n_offset_y; + self._screen_message_1.sort = 2; + self._screen_message_1.color = ( 1, 1, 1 ); + self._screen_message_1.alpha = 0.7; + self._screen_message_1.hidewheninmenu = 1; + } + + self._screen_message_1 settext( string_message_1 ); + + if ( isdefined( string_message_2 ) ) + { + if ( !isdefined( self._screen_message_2 ) ) + { + self._screen_message_2 = newclienthudelem( self ); + self._screen_message_2.elemtype = "font"; + self._screen_message_2.font = "objective"; + self._screen_message_2.fontscale = 1.8; + self._screen_message_2.horzalign = "center"; + self._screen_message_2.vertalign = "middle"; + self._screen_message_2.alignx = "center"; + self._screen_message_2.aligny = "middle"; + self._screen_message_2.y = -33 + n_offset_y; + self._screen_message_2.sort = 2; + self._screen_message_2.color = ( 1, 1, 1 ); + self._screen_message_2.alpha = 0.7; + self._screen_message_2.hidewheninmenu = 1; + } + + level._screen_message_2 settext( string_message_2 ); + } + else if ( isdefined( self._screen_message_2 ) ) + self._screen_message_2 destroy(); + + if ( isdefined( string_message_3 ) ) + { + if ( !isdefined( self._screen_message_3 ) ) + { + self._screen_message_3 = newclienthudelem( self ); + self._screen_message_3.elemtype = "font"; + self._screen_message_3.font = "objective"; + self._screen_message_3.fontscale = 1.8; + self._screen_message_3.horzalign = "center"; + self._screen_message_3.vertalign = "middle"; + self._screen_message_3.alignx = "center"; + self._screen_message_3.aligny = "middle"; + self._screen_message_3.y = -6 + n_offset_y; + self._screen_message_3.sort = 2; + self._screen_message_3.color = ( 1, 1, 1 ); + self._screen_message_3.alpha = 0.7; + self._screen_message_3.hidewheninmenu = 1; + } + + self._screen_message_3 settext( string_message_3 ); + } + else if ( isdefined( self._screen_message_3 ) ) + self._screen_message_3 destroy(); +} + +meat_screen_message_delete() +{ + self endon( "disconnect" ); + level waittill_notify_or_timeout( "meat_thrown", 5 ); + + if ( isdefined( self._screen_message_1 ) ) + self._screen_message_1 destroy(); + + if ( isdefined( self._screen_message_2 ) ) + self._screen_message_2 destroy(); + + if ( isdefined( self._screen_message_3 ) ) + self._screen_message_3 destroy(); +} + +meat_screen_message_delete_on_death() +{ + level endon( "meat_thrown" ); + self endon( "disconnect" ); + + self waittill( "player_downed" ); + + if ( isdefined( self._screen_message_1 ) ) + self._screen_message_1 destroy(); + + if ( isdefined( self._screen_message_2 ) ) + self._screen_message_2 destroy(); + + if ( isdefined( self._screen_message_3 ) ) + self._screen_message_3 destroy(); +} + +set_ignore_all() +{ + level endon( "clear_ignore_all" ); + + if ( isdefined( level._zombies_ignoring_all ) && level._zombies_ignoring_all ) + return; + + level._zombies_ignoring_all = 1; + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( isdefined( zombie ) ) + zombie.ignoreall = 1; + } + + wait 0.5; + clear_ignore_all(); +} + +clear_ignore_all() +{ + if ( !( isdefined( level._zombies_ignoring_all ) && level._zombies_ignoring_all ) ) + return; + + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( isdefined( zombie ) ) + zombie.ignoreall = 0; + } + + level._zombies_ignoring_all = 0; +} + +bring_back_teammate_progress() +{ + self notify( "bring_back_teammate_progress" ); + self endon( "bring_back_teammate_progress" ); + self endon( "disconnect" ); + player = self; + player._bringing_back_teammate = 1; + revivetime = 15; + progress = 0; + + while ( player_has_meat( player ) && is_player_valid( player ) && progress >= 0 ) + { + if ( !isdefined( player.revive_team_progressbar ) ) + { + player.revive_team_progressbar = player createprimaryprogressbar(); + player.revive_team_progressbar updatebar( 0.01, 1 / revivetime ); + player.revive_team_progressbar.progresstext = player createprimaryprogressbartext(); + player.revive_team_progressbar.progresstext settext( &"ZOMBIE_MEAT_RESPAWN_TEAMMATE" ); + player thread destroy_revive_progress_on_downed(); + } + + progress++; + + if ( progress > revivetime * 10 ) + { + level bring_back_dead_teammate( player._meat_team ); + player destroy_revive_progress(); + wait 1; + player._bringing_back_teammate = 0; + progress = -1; + } + + wait 0.1; + } + + player._bringing_back_teammate = 0; + player destroy_revive_progress(); +} + +should_try_to_bring_back_teammate( team ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i]._meat_team == team && players[i].sessionstate == "spectator" ) + return true; + } + + return false; +} + +bring_back_dead_teammate( team ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i]._meat_team == team && players[i].sessionstate == "spectator" ) + { + player = players[i]; + break; + } + } + + if ( !isdefined( player ) ) + return; + + player playsound( level.zmb_laugh_alias ); + wait 0.25; + playfx( level._effect["poltergeist"], player.spectator_respawn.origin ); + playsoundatposition( "zmb_bolt", player.spectator_respawn.origin ); + earthquake( 0.5, 0.75, player.spectator_respawn.origin, 1000 ); + level.custom_spawnplayer = ::respawn_meat_player; + player.pers["spectator_respawn"] = player.spectator_respawn; + player [[ level.spawnplayer ]](); + level.custom_spawnplayer = undefined; +} + +respawn_meat_player() +{ + spawnpoint = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "meat_spectator_respawn" ); + self spawn( spawnpoint.origin, spawnpoint.angles ); + self._meat_team = self.pers["zteam"]; + self._encounters_team = self.pers["encounters_team"]; + self.characterindex = self.pers["characterindex"]; + self._team_name = self.pers["team_name"]; + self.spectator_respawn = self.pers["meat_spectator_respawn"]; + self reviveplayer(); + self.is_burning = 0; + self.is_zombie = 0; + self.ignoreme = 0; +} + +destroy_revive_progress_on_downed() +{ + level endon( "end_game" ); + level endon( "meat_end" ); + self waittill_any( "fake_death", "player_downed", "death" ); + self destroy_revive_progress(); +} + +destroy_revive_progress() +{ + if ( isdefined( self.revive_team_progressbar ) ) + { + self.revive_team_progressbar destroyelem(); + self.revive_team_progressbar.progresstext destroyelem(); + } +} + +kick_the_meat( meat, laststand_nudge ) +{ + if ( isdefined( self._kicking_meat ) && self._kicking_meat ) + return; + + fake_meat = 0; + self._kicking_meat = 1; + self._spawning_meat = 1; + org = meat.origin; + + if ( !( isdefined( meat._fake_meat ) && meat._fake_meat ) ) + { + meat cleanup_meat(); + level._last_person_to_throw_meat = self; + level._last_person_to_throw_meat_time = gettime(); + level._meat_splitter_activated = 0; + } + else + { + fake_meat = 1; + meat cleanup_meat(); + } + + kickangles = self.angles; + kickangles += ( randomfloatrange( -30, -20 ), randomfloatrange( -5, 5 ), 0 ); + launchdir = anglestoforward( kickangles ); + vel = self getvelocity(); + speed = length( vel ) * 1.5; + height_boost = 380; + + if ( isdefined( laststand_nudge ) && laststand_nudge ) + { + if ( vel == ( 0, 0, 0 ) ) + vel = ( 30, 30, 5 ); + + speed = length( vel ) * 2; + height_boost = 120; + } + + launchvel = vectorscale( launchdir, speed ); + grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( launchvel[0], launchvel[1], height_boost ) ); + grenade playsound( "zmb_meat_meat_tossed" ); + grenade thread waittill_loopstart(); + + if ( fake_meat ) + { + grenade._fake_meat = 1; + grenade thread delete_on_real_meat_pickup(); + level._kicked_meat = grenade; + } + + wait 0.1; + self._spawning_meat = 0; + self._kicking_meat = 0; + + if ( !fake_meat ) + { + level notify( "meat_thrown", self ); + level notify( "meat_kicked" ); + } +} + +delete_on_real_meat_pickup() +{ + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + return; + + self endon( "death" ); + level waittill_any( "meat_grabbed", "end_game", "meat_kicked" ); + add_meat_event( "fake_meat_killed_by_real", self ); + + if ( isdefined( level._kicked_meat ) && level._kicked_meat == self ) + level._kicked_meat = undefined; + + if ( isdefined( self ) ) + self cleanup_meat(); +} + +play_item_meat_on_spawn_retrieve_trigger( watcher, player ) +{ + self item_meat_on_spawn_retrieve_trigger( watcher, player, get_gamemode_var( "item_meat_name" ) ); +} + +can_revive( revivee ) +{ + if ( self hasweapon( get_gamemode_var( "item_meat_name" ) ) ) + return false; + + if ( !self maps\mp\zombies\_zm_laststand::is_reviving_any() && isdefined( level.item_meat_pick_up_trigger ) && self istouching( level.item_meat_pick_up_trigger ) ) + return false; + + return true; +} + +pickup_origin() +{ + origin = self get_eye(); + + if ( !isdefined( origin ) ) + origin = self gettagorigin( "tag_weapon" ); + + if ( !isdefined( origin ) ) + origin = self gettagorigin( "tag_weapon_right" ); + + if ( !isdefined( origin ) ) + origin = self.origin; + + return origin; +} + +can_spike_meat() +{ + if ( isdefined( level._last_person_to_throw_meat ) && self == level._last_person_to_throw_meat ) + return false; + + meat = level.item_meat; + meat_spike_dist_sq = 4096; + meat_spike_dot = 0.1; + + if ( isdefined( meat ) ) + { + view_pos = self getweaponmuzzlepoint(); + + if ( distancesquared( view_pos, meat.origin ) < meat_spike_dist_sq ) + return true; + } + + return false; +} + +start_encounters_round_logic() +{ + if ( isdefined( level.flag["start_zombie_round_logic"] ) ) + flag_wait( "start_zombie_round_logic" ); + + flag_wait( "initial_players_connected" ); + + if ( !flag( "start_encounters_match_logic" ) ) + flag_set( "start_encounters_match_logic" ); +} + +onstartgametype() +{ + thread start_encounters_round_logic(); + maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zmeat", ::meat_hub_start_func, 1 ); +} + +hide_non_meat_objects() +{ + door_trigs = getentarray( "zombie_door", "targetname" ); + + for ( i = 0; i < door_trigs.size; i++ ) + { + if ( isdefined( door_trigs[i] ) ) + door_trigs[i] delete(); + } + + objects = getentarray(); + + for ( i = 0; i < objects.size; i++ ) + { + if ( objects[i] is_meat_object() ) + continue; + + if ( objects[i] iszbarrier() ) + continue; + + if ( isdefined( objects[i].spawnflags ) && objects[i].spawnflags == 1 ) + objects[i] connectpaths(); + + objects[i] notsolid(); + objects[i] hide(); + } +} + +is_meat_object() +{ + if ( !isdefined( self.script_parameters ) ) + return true; + + tokens = strtok( self.script_parameters, " " ); + + for ( i = 0; i < tokens.size; i++ ) + { + if ( tokens[i] == "meat_remove" ) + return false; + } + + return true; +} + +setup_meat_world_objects() +{ + objects = getentarray( level.scr_zm_map_start_location, "script_noteworthy" ); + + for ( i = 0; i < objects.size; i++ ) + { + if ( !objects[i] is_meat_object() ) + continue; + + if ( isdefined( objects[i].script_gameobjectname ) ) + continue; + + if ( isdefined( objects[i].script_vector ) ) + { + objects[i] moveto( objects[i].origin + objects[i].script_vector, 0.05 ); + + objects[i] waittill( "movedone" ); + } + + if ( isdefined( objects[i].spawnflags ) && objects[i].spawnflags == 1 && !( isdefined( level._dont_reconnect_paths ) && level._dont_reconnect_paths ) ) + objects[i] disconnectpaths(); + } + + level clientnotify( "meat_" + level.scr_zm_map_start_location ); +} + +spawn_meat_zombies() +{ + level endon( "meat_end" ); + force_riser = 0; + force_chaser = 0; + num = 0; + max_ai_num = 15; + + if ( getdvarint( _hash_CD22CF55 ) > 0 ) + max_ai_num = 0; + + if ( getdvarint( _hash_FA81816F ) == 2 ) + max_ai_num = -1; + + level waittill( "meat_grabbed" ); + + while ( true ) + { + ai = getaiarray( level.zombie_team ); + + if ( ai.size > max_ai_num ) + wait 0.1; + else + { + if ( num % 2 == 0 ) + spawn_points = level._meat_team_1_zombie_spawn_points; + else + spawn_points = level._meat_team_2_zombie_spawn_points; + + num++; + spawn_point = undefined; + dist = 512; + distcheck = dist * dist; + startindex = randomint( spawn_points.size ); + + while ( !isdefined( spawn_point ) ) + { + for ( i = 0; i < spawn_points.size; i++ ) + { + index = ( startindex + i ) % spawn_points.size; + point = spawn_points[index]; + + if ( num % 2 == 0 ) + players = get_players_on_meat_team( 1 ); + else + players = get_players_on_meat_team( 2 ); + + clear = 1; + + foreach ( player in players ) + { + if ( distancesquared( player.origin, point.origin ) < distcheck ) + clear = 0; + } + + if ( clear ) + { + spawn_point = point; + break; + } + } + + if ( dist <= 128 ) + spawn_point = point; + else + { + dist /= 4; + distcheck = dist * dist; + } + + wait 0.05; + } + + zombie = spawn_meat_zombie( level.meat_spawners[0], "meat_zombie", spawn_point, level._meat_zombie_spawn_health ); + + if ( isdefined( zombie ) ) + zombie maps\mp\zombies\_zm_game_module::make_supersprinter(); + } + + wait( level._meat_zombie_spawn_timer ); + } +} + +spawn_meat_zombie( spawner, target_name, spawn_point, round_number ) +{ + level endon( "meat_end" ); + + if ( !isdefined( spawner ) ) + { + iprintlnbold( "BUG: There is something wrong with the zombie spawners" ); + return; + } + + while ( isdefined( level._meat_zombie_spawning ) && level._meat_zombie_spawning ) + wait 0.05; + + level._meat_zombie_spawning = 1; + level.zombie_spawn_locations = []; + level.zombie_spawn_locations[level.zombie_spawn_locations.size] = spawn_point; + zombie = maps\mp\zombies\_zm_utility::spawn_zombie( spawner, target_name, spawn_point, round_number ); + + if ( isdefined( zombie ) ) + { + zombie thread maps\mp\zombies\_zm_spawner::zombie_spawn_init(); + zombie thread maps\mp\zombies\_zm::round_spawn_failsafe(); + } + else + iprintlnbold( "BUG: There is something wrong with the zombie spawning" ); + + spawner._spawning = undefined; + level._meat_zombie_spawning = 0; + return zombie; +} + +monitor_meat_on_team() +{ + level endon( "meat_end" ); + + while ( true ) + { + players = get_players(); + + if ( isdefined( level._meat_on_team ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i] ) ) + continue; + + if ( players[i]._meat_team == level._meat_on_team ) + { + if ( players[i].ignoreme ) + players[i].ignoreme = 0; + } + else if ( !players[i].ignoreme ) + players[i].ignoreme = 1; + + wait 0.05; + } + } + else + { + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i] ) ) + continue; + + if ( players[i].ignoreme ) + players[i].ignoreme = 0; + + wait 0.05; + } + } + + wait 0.1; + } +} + +item_meat_reset( origin, immediate ) +{ + level notify( "new_meat" ); + level endon( "new_meat" ); + + if ( isdefined( level.item_meat ) ) + { + level.item_meat cleanup_meat(); + level.item_meat = undefined; + } + + if ( !( isdefined( immediate ) && immediate ) ) + level waittill( "reset_meat" ); + + item_meat_clear(); + + if ( isdefined( origin ) ) + item_meat_spawn( origin ); +} + +meat_player_initial_spawn() +{ + players = get_players(); + one = 1; + two = 2; + + if ( get_game_var( "switchedsides" ) ) + { + one = 2; + two = 1; + } + + for ( i = 0; i < players.size; i++ ) + { + if ( get_game_var( "side_selection" ) == 1 ) + { + if ( players[i].team == "allies" ) + players[i]._meat_team = one; + else + players[i]._meat_team = two; + } + else if ( players[i].team == "allies" ) + players[i]._meat_team = two; + else + players[i]._meat_team = one; + + if ( isdefined( level.custom_player_fake_death_cleanup ) ) + players[i] [[ level.custom_player_fake_death_cleanup ]](); + + players[i] setstance( "stand" ); + + if ( isdefined( players[i]._meat_team ) ) + { + if ( players[i]._meat_team == one ) + players[i]._meat_team = one; + else + players[i]._meat_team = two; + } + else if ( players[i].team == "axis" ) + players[i]._meat_team = one; + else + players[i]._meat_team = two; + + players[i] meat_player_setup(); + } + + waittillframeend; + maps\mp\gametypes_zm\_zm_gametype::start_round(); + award_grenades_for_team( 1 ); + award_grenades_for_team( 2 ); +} + +meat_player_setup() +{ + self.pers["zteam"] = self._meat_team; + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "encounters_team", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "characterindex", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "team_name", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "spectator_respawn", 0 ); + self.pers["encounters_team"] = self._encounters_team; + self.pers["characterindex"] = self.characterindex; + self.pers["team_name"] = self._team_name; + self.pers["meat_spectator_respawn"] = self.spectator_respawn; + self.score = 1000; + self.pers["score"] = 1000; + self takeallweapons(); + self giveweapon( "knife_zm" ); + self give_start_weapon( 1 ); + + if ( !isdefined( self._saved_by_throw ) ) + self._saved_by_throw = 0; + + self setmovespeedscale( 1 ); + self._has_meat = 0; + self setclientfield( "holding_meat", 0 ); + self freeze_player_controls( 1 ); +} + +can_touch_meat() +{ + if ( isdefined( self.dont_touch_the_meat ) && self.dont_touch_the_meat ) + return 0; + + meat = level.item_meat; + + if ( isdefined( meat ) ) + { + meatorg = meat.origin + vectorscale( ( 0, 0, 1 ), 8.0 ); + trace = bullettrace( self pickup_origin(), meatorg, 0, meat ); + return distancesquared( trace["position"], meatorg ) < 1; + } + + return 0; +} + +trying_to_use() +{ + self.use_ever_released |= !self usebuttonpressed(); + return self.use_ever_released && self usebuttonpressed(); +} + +trying_to_spike( item ) +{ + return item.meat_is_flying && self meleebuttonpressed(); +} + +item_quick_trigger( meat_id, trigger ) +{ + self endon( "death" ); + meat_trigger_time = 150; + + if ( isdefined( trigger.radius ) ) + radius = trigger.radius + 15.0; + else + radius = 51.0; + + trigrad2 = radius * radius; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + player.use_ever_released = !player usebuttonpressed(); + } + + while ( isdefined( trigger ) ) + { + trigorg = trigger.origin; + players = get_players(); + + if ( players.size ) + { + random_start_point = randomint( players.size ); + + for ( i = 0; i < players.size; i++ ) + { + player = players[( i + random_start_point ) % players.size]; + + if ( !isdefined( player.trying_to_trigger_meat ) ) + player.trying_to_trigger_meat = []; + + if ( !isdefined( player.trying_to_trigger_meat_time ) ) + player.trying_to_trigger_meat_time = []; + + if ( player maps\mp\zombies\_zm_laststand::is_reviving_any() ) + continue; + + meleeing = player ismeleeing(); + + if ( isdefined( trigger ) && player istouching( trigger ) && distance2dsquared( player.origin, trigorg ) < trigrad2 && !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && ( player trying_to_use() || self.meat_is_flying && meleeing ) && player can_touch_meat() ) + { + if ( self.meat_is_flying && meleeing ) + { + if ( player can_spike_meat() ) + { + player.trying_to_trigger_meat[meat_id] = 0; + trigger notify( "usetrigger", player ); + } + } + else if ( !( isdefined( player.trying_to_trigger_meat[meat_id] ) && player.trying_to_trigger_meat[meat_id] ) ) + { + player.trying_to_trigger_meat[meat_id] = 1; + player.trying_to_trigger_meat_time[meat_id] = gettime(); + } + else if ( gettime() - player.trying_to_trigger_meat_time[meat_id] >= meat_trigger_time ) + { + player.trying_to_trigger_meat[meat_id] = 0; + trigger notify( "usetrigger", player ); + } + + continue; + } + + player.trying_to_trigger_meat[meat_id] = 0; + player.trying_to_trigger_meat_time[meat_id] = undefined; + } + } + + wait 0.05; + } +} + +item_meat_watch_trigger( meat_id, trigger, callback, playersoundonuse, npcsoundonuse ) +{ + self endon( "death" ); + self thread item_quick_trigger( meat_id, trigger ); + + while ( true ) + { + trigger waittill( "usetrigger", player ); + + if ( !isalive( player ) ) + continue; + + if ( !is_player_valid( player ) ) + continue; + + if ( player has_powerup_weapon() ) + continue; + + if ( player maps\mp\zombies\_zm_laststand::is_reviving_any() ) + continue; + + volley = self.meat_is_flying && player meleebuttonpressed(); + player.volley_meat = volley; + + if ( isdefined( self._fake_meat ) && self._fake_meat ) + add_meat_event( "player_fake_take", player, self ); + else if ( volley ) + add_meat_event( "player_volley", player, self ); + else if ( self.meat_is_moving ) + add_meat_event( "player_catch", player, self ); + else + add_meat_event( "player_take", player, self ); + + if ( isdefined( self._fake_meat ) && self._fake_meat ) + { + player playlocalsound( level.zmb_laugh_alias ); + wait_network_frame(); + + if ( !isdefined( self ) ) + return; + + self cleanup_meat(); + return; + } + + curr_weap = player getcurrentweapon(); + + if ( !is_meat( curr_weap ) ) + player.pre_meat_weapon = curr_weap; + + if ( self.meat_is_moving ) + { + if ( volley ) + self item_meat_volley( player ); + else + self item_meat_caught( player, self.meat_is_flying ); + } + + self item_meat_pickup(); + + if ( isdefined( playersoundonuse ) ) + player playlocalsound( playersoundonuse ); + + if ( isdefined( npcsoundonuse ) ) + player playsound( npcsoundonuse ); + + if ( volley ) + player thread spike_the_meat( self ); + else + { + self thread [[ callback ]]( player ); + + if ( !isdefined( player._meat_hint_shown ) ) + { + player thread show_meat_throw_hint(); + player._meat_hint_shown = 1; + } + } + } +} + +item_meat_volley( player ) +{ +/# + println( "MEAT: Spiked the meat\\n" ); +#/ +} + +item_meat_caught( player, in_air ) +{ + if ( in_air ) + { +/# + println( "MEAT: Caught the meat on the fly\\n" ); +#/ + } + else + { +/# + println( "MEAT: Caught the meat while moving\\n" ); +#/ + } +} + +item_meat_on_pickup( player ) +{ + assert( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand(), "Player in last stand triggered meat pickup" ); + player maps\mp\gametypes_zm\_weaponobjects::deleteweaponobjecthelper( self ); + self cleanup_meat(); + level.item_meat = undefined; + level._last_person_to_throw_meat = undefined; + assign_meat_to_team( player ); + level notify( "meat_grabbed" ); + player notify( "meat_grabbed" ); + level thread zmbvoxmeatonteamspecific( player._encounters_team ); + + if ( !player hasweapon( get_gamemode_var( "item_meat_name" ) ) ) + player giveweapon( get_gamemode_var( "item_meat_name" ) ); + + player increment_is_drinking(); + player switchtoweapon( get_gamemode_var( "item_meat_name" ) ); + player setweaponammoclip( get_gamemode_var( "item_meat_name" ), 2 ); + player thread waittill_thrown(); +} + +waittill_thrown() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "reset_downed" ); + + self waittill( "grenade_fire", grenade ); + + grenade playsound( "zmb_meat_meat_tossed" ); + grenade thread waittill_loopstart(); +} + +waittill_loopstart() +{ + self endon( "stationary" ); + self endon( "death" ); + level endon( "meat_grabbed" ); + level endon( "end_game" ); + level endon( "meat_kicked" ); + + while ( true ) + { + self waittill( "grenade_bounce", pos, normal, ent ); + + self stopsounds(); + wait 0.05; + self playsound( "zmb_meat_bounce" ); + } +} + +item_meat_watch_shutdown() +{ + self waittill( "death" ); + + if ( isdefined( self.item_meat_pick_up_trigger ) ) + { + self.item_meat_pick_up_trigger delete(); + level.item_meat_pick_up_trigger = undefined; + } +} + +item_meat_clear() +{ + if ( isdefined( level.item_meat ) ) + { + level.item_meat cleanup_meat(); + level.item_meat = undefined; + } + + if ( isdefined( level._fake_meats ) ) + { + foreach ( meat in level._fake_meats ) + { + if ( isdefined( meat ) ) + meat cleanup_meat(); + } + + level._fake_meats = undefined; + } +} + +zombie_path_timer_override() +{ + return gettime() + randomfloatrange( 0.35, 1 ) * 1000; +} + +meat_poi_override_func() +{ + if ( isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving ) ) + { + if ( abs( level.item_meat.origin[2] - groundpos( level.item_meat.origin )[2] ) < 35 ) + { + level._zombies_ignoring_all = 0; + level notify( "clear_ignore_all" ); + return undefined; + } + + level thread set_ignore_all(); + meat_poi = []; + meat_poi[0] = groundpos( level.item_meat.origin ); + meat_poi[1] = level.item_meat; + return meat_poi; + } + + level._zombies_ignoring_all = 0; + return undefined; +} + +meat_end_match( winning_team ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].has_minigun ) && players[i].has_minigun ) + { + primaryweapons = players[i] getweaponslistprimaries(); + + for ( x = 0; x < primaryweapons.size; x++ ) + { + if ( primaryweapons[x] == "minigun_zm" ) + players[i] takeweapon( "minigun_zm" ); + } + + players[i] notify( "minigun_time_over" ); + players[i].zombie_vars["zombie_powerup_minigun_on"] = 0; + players[i]._show_solo_hud = 0; + players[i].has_minigun = 0; + players[i].has_powerup_weapon = 0; + } + + if ( isdefined( players[i]._has_meat_hud ) ) + players[i]._has_meat_hud destroy(); + + if ( players[i] hasweapon( get_gamemode_var( "item_meat_name" ) ) ) + { + players[i] takeweapon( get_gamemode_var( "item_meat_name" ) ); + players[i] decrement_is_drinking(); + } + } + + level notify( "game_module_ended", winning_team ); + wait 0.1; + level delay_thread( 2, ::item_meat_clear ); + + if ( isdefined( level.gameended ) && level.gameended ) + level clientnotify( "end_meat" ); +} + +updatedownedcounters() +{ + if ( self._encounters_team == "A" ) + { + level.team_a_downed++; + self thread waitforrevive( "A" ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_revive_" + level.team_a_downed, "A" ); + } + else + { + level.team_b_downed++; + self thread waitforrevive( "B" ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_revive_" + level.team_b_downed, "B" ); + } +} + +waitforrevive( team ) +{ + self endon( "death" ); + + self waittill( "player_revived" ); + + if ( team == "A" ) + level.team_a_downed--; + else + level.team_b_downed--; +} + +assign_meat_to_team( player, team_num ) +{ + meat_team = undefined; + players = get_players(); + + if ( isdefined( player ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i] ) ) + continue; + + if ( players[i] != player || isdefined( player._meat_hint_shown ) && player._meat_hint_shown ) + players[i] iprintlnbold( &"ZOMBIE_GRABBED_MEAT", player.name ); + } + + meat_team = player._meat_team; + } + else if ( isdefined( team_num ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( players[i]._meat_team == team_num ) + { + players[i] iprintlnbold( &"ZOMBIE_YOUR_TEAM_MEAT" ); + continue; + } + + players[i] iprintlnbold( &"ZOMBIE_OTHER_TEAM_MEAT" ); + } + + meat_team = team_num; + } + + level._meat_on_team = meat_team; + teamplayers = get_players_on_meat_team( meat_team ); + + if ( isdefined( teamplayers ) && teamplayers.size > 0 ) + { + if ( teamplayers[0]._encounters_team == "B" ) + { + setteamhasmeat( "allies", 1 ); + setteamhasmeat( "axis", 0 ); + } + else if ( teamplayers[0]._encounters_team == "A" ) + { + setteamhasmeat( "allies", 0 ); + setteamhasmeat( "axis", 1 ); + } + } + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i] ) ) + continue; + + if ( isdefined( player ) && players[i] == player ) + { + if ( isdefined( players[i]._has_meat ) && players[i]._has_meat ) + continue; + + players[i]._has_meat = 1; + players[i] thread slow_down_player_with_meat(); + players[i] thread reset_meat_when_player_downed(); + players[i] thread reset_meat_when_player_disconnected(); + continue; + } + } +} + +zmbvoxmeatonteamspecific( team ) +{ + if ( !isdefined( level.zmbvoxteamlasthadmeat ) ) + level.zmbvoxteamlasthadmeat = team; + + if ( level.zmbvoxteamlasthadmeat == team ) + return; + + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_grab", team ); + level.zmbvoxteamlasthadmeat = team; + otherteam = maps\mp\zombies\_zm_audio_announcer::getotherteam( team ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_grab_" + otherteam, otherteam ); +} + +create_meat_team_hud( meat_team, destroy_only ) +{ + if ( isdefined( self._has_meat_hud ) ) + { + self._has_meat_hud destroy(); + + if ( isdefined( destroy_only ) ) + return; + } + + if ( !isdefined( meat_team ) ) + return; + + elem = newclienthudelem( self ); + elem.hidewheninmenu = 1; + elem.horzalign = "LEFT"; + elem.vertalign = "BOTTOM"; + elem.alignx = "left"; + elem.aligny = "middle"; + elem.x = 10; + elem.y = -10; + elem.foreground = 1; + elem.font = "default"; + elem.fontscale = 1.4; + elem.color = vectorscale( ( 1, 1, 0 ), 0.9 ); + elem.alpha = 1.0; + + if ( isdefined( self._meat_team ) && self._meat_team == meat_team ) + elem.label = &"ZOMBIE_TEAM_HAS_MEAT"; + else + elem.label = &"ZOMBIE_OTHER_TEAM_HAS_MEAT"; + + self._has_meat_hud = elem; +} + +create_meat_player_hud() +{ + if ( isdefined( self._has_meat_hud ) ) + self._has_meat_hud destroy(); + + elem = newclienthudelem( self ); + elem.hidewheninmenu = 1; + elem.horzalign = "LEFT"; + elem.vertalign = "BOTTOM"; + elem.alignx = "left"; + elem.aligny = "middle"; + elem.x = 10; + elem.y = -10; + elem.foreground = 1; + elem.font = "default"; + elem.fontscale = 1.4; + elem.color = vectorscale( ( 1, 1, 0 ), 0.9 ); + elem.alpha = 1.0; + elem.label = &"ZOMBIE_PLAYER_HAS_MEAT"; + self._has_meat_hud = elem; +} + +slow_down_player_with_meat() +{ + self endon( "disconnect" ); + self setclientfield( "holding_meat", 1 ); + self setmovespeedscale( 0.6 ); + self thread zmbvoxstartholdcounter(); + + while ( isdefined( self._has_meat ) && self._has_meat ) + { + level._meat_player_tracker_origin = self.origin; + wait 0.2; + } + + self setmovespeedscale( 1 ); + self setclientfield( "holding_meat", 0 ); +} + +zmbvoxstartholdcounter() +{ + for ( meat_hold_counter = 0; isdefined( self._has_meat ) && self._has_meat; meat_hold_counter++ ) + { + if ( meat_hold_counter >= 15 ) + { + self thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "meat_hold" ); + break; + } + + wait 0.5; + } +} + +reset_meat_when_player_downed() +{ + self notify( "reset_downed" ); + self endon( "reset_downed" ); + level endon( "meat_reset" ); + level endon( "meat_thrown" ); + self waittill_any( "player_downed", "death", "fake_death", "replace_weapon_powerup" ); + self._has_meat = 0; + self._spawning_meat = 1; + grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), self.origin + ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 15 ), ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 0 ) ); + grenade._respawned_meat = 1; + level._last_person_to_throw_meat = undefined; + playsoundatposition( "zmb_spawn_powerup", self.origin ); + wait 0.1; + self._spawning_meat = undefined; + level notify( "meat_reset" ); +} + +meat_last_stand_callback( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + if ( isdefined( self._has_meat ) && self._has_meat ) + level thread item_meat_drop( self.origin, self._meat_team ); +} + +reset_meat_when_player_disconnected() +{ + level endon( "meat_thrown" ); + level endon( "meat_reset" ); + level endon( "meat_end" ); + team = self._meat_team; + + self waittill( "disconnect" ); + + level thread item_meat_drop( level._meat_player_tracker_origin, team ); +} + +item_meat_drop( org, team ) +{ + players = get_alive_players_on_meat_team( team ); + + if ( players.size > 0 ) + { + player = players[0]; + player endon( "disconnect" ); + player._spawning_meat = 1; + grenade = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org + ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 15 ), ( 0, 0, 0 ) ); + grenade._respawned_meat = 1; + level._last_person_to_throw_meat = undefined; + playsoundatposition( "zmb_spawn_powerup", grenade.origin ); + wait 0.1; + player._spawning_meat = undefined; + level notify( "meat_reset" ); + } +} + +player_has_meat( player ) +{ + return player getcurrentweapon() == get_gamemode_var( "item_meat_name" ); +} + +get_player_with_meat() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i]._has_meat ) && players[i]._has_meat ) + return players[i]; + } + + return undefined; +} + +spawn_player_meat_manager() +{ + self thread player_watch_weapon_change(); + self thread player_watch_grenade_throw(); +} + +player_watch_weapon_change() +{ + self endon( "death_or_disconnect" ); + + for (;;) + { + self waittill( "weapon_change", weapon ); + + if ( weapon == get_gamemode_var( "item_meat_name" ) ) + { + add_meat_event( "player_meat", self ); + continue; + } + + add_meat_event( "player_no_meat", self ); + } +} + +player_watch_grenade_throw() +{ + self endon( "death_or_disconnect" ); + + for (;;) + { + self waittill( "grenade_fire", weapon, weapname ); + + if ( weapname == get_gamemode_var( "item_meat_name" ) ) + { + add_meat_event( "player_grenade_fire", self, weapon ); + weapon thread item_meat_on_spawn_retrieve_trigger( undefined, self, get_gamemode_var( "item_meat_name" ) ); + } + } +} + +spawn_level_meat_manager() +{ +/# + level.meat_manager = spawnstruct(); + level.meat_manager.events = []; + level.meat_manager thread handle_meat_events(); +#/ +} + +add_meat_event( e, p1, p2, p3, p4 ) +{ +/# + event = spawnstruct(); + event.e = e; + event.numparams = 0; + event.param = []; + + if ( isdefined( p1 ) ) + { + event.param[0] = p1; + event.numparams = 1; + } + + if ( isdefined( p2 ) ) + { + event.param[1] = p2; + event.numparams = 2; + } + + if ( isdefined( p3 ) ) + { + event.param[2] = p3; + event.numparams = 3; + } + + if ( isdefined( p4 ) ) + { + event.param[3] = p4; + event.numparams = 4; + } + + if ( isdefined( level.meat_manager ) ) + level.meat_manager.events[level.meat_manager.events.size] = event; +#/ +} + +handle_meat_events() +{ + while ( true ) + { + while ( self.events.size ) + { + self handle_meat_event( self.events[0] ); + arrayremoveindex( self.events, 0 ); + } + + wait 0.05; + } +} + +paramstr( param ) +{ +/# + if ( !isdefined( param ) ) + return "undefined"; + + if ( isplayer( param ) ) + return param.name; + + if ( isstring( param ) || isint( param ) || isfloat( param ) || isvec( param ) ) + return param; + + if ( isarray( param ) ) + return "[]"; + + return ""; +#/ +} + +handle_meat_event( event ) +{ +/# + estr = "ZM MEAT: [" + event.e + "]("; + + for ( i = 0; i < event.numparams; i++ ) + { + estr += paramstr( event.param[i] ); + + if ( i < event.numparams - 1 ) + estr += ","; + } + + estr += ") \\n"; + println( estr ); +#/ +} diff --git a/ZM/Maps/Mob of the Dead/maps/mp/gametypes_zm/zstandard.gsc b/ZM/Maps/Mob of the Dead/maps/mp/gametypes_zm/zstandard.gsc new file mode 100644 index 0000000..eb15237 --- /dev/null +++ b/ZM/Maps/Mob of the Dead/maps/mp/gametypes_zm/zstandard.gsc @@ -0,0 +1,46 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_ai_dogs; +#include maps\mp\zombies\_zm; + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::main(); + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level._game_module_custom_spawn_init_func = maps\mp\gametypes_zm\_zm_gametype::custom_spawn_init_func; + level._game_module_stat_update_func = maps\mp\zombies\_zm_stats::survival_classic_custom_stat_update; + maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zstandard" ); +} + +onprecachegametype() +{ + level.playersuicideallowed = 1; + level.canplayersuicide = ::canplayersuicide; + level.suicide_weapon = "death_self_zm"; + precacheitem( "death_self_zm" ); + maps\mp\zombies\_zm_ai_dogs::init(); + maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zstandard" ); +} + +onstartgametype() +{ + maps\mp\gametypes_zm\_zm_gametype::setup_classic_gametype(); + maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zstandard", ::zstandard_main ); +} + +zstandard_main() +{ + level.dog_rounds_allowed = getgametypesetting( "allowdogs" ); + + if ( level.dog_rounds_allowed ) + maps\mp\zombies\_zm_ai_dogs::enable_dog_rounds(); + + level thread maps\mp\zombies\_zm::round_start(); + level thread maps\mp\gametypes_zm\_zm_gametype::kill_all_zombies(); +} diff --git a/ZM/Maps/Mob of the Dead/maps/mp/teams/_teamset_cdc.gsc b/ZM/Maps/Mob of the Dead/maps/mp/teams/_teamset_cdc.gsc new file mode 100644 index 0000000..cef3a54 --- /dev/null +++ b/ZM/Maps/Mob of the Dead/maps/mp/teams/_teamset_cdc.gsc @@ -0,0 +1,55 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +register() +{ + game["teamset"] = []; + game["teamset"]["cdc"] = ::cdc; +} + +level_init() +{ + game["allies"] = "cdc"; + game["axis"] = "cia"; + setdvar( "g_TeamName_Allies", &"ZMUI_CDC_SHORT" ); + setdvar( "g_TeamName_Axis", &"ZMUI_CIA_SHORT" ); + game["strings"]["allies_win"] = &"ZM_CDC_WIN_MATCH"; + game["strings"]["allies_win_round"] = &"ZM_CDC_WIN_ROUND"; + game["strings"]["allies_mission_accomplished"] = &"ZM_CDC_MISSION_ACCOMPLISHED"; + game["strings"]["allies_eliminated"] = &"ZM_CDC_ELIMINATED"; + game["strings"]["allies_forfeited"] = &"ZM_CDC_FORFEITED"; + game["strings"]["allies_name"] = &"ZM_CDC_NAME"; + game["music"]["spawn_allies"] = "SPAWN_OPS"; + game["music"]["victory_allies"] = "mus_victory_usa"; + game["icons"]["allies"] = "faction_cdc"; + game["colors"]["allies"] = ( 0, 0, 0 ); + game["voice"]["allies"] = "vox_st6_"; + setdvar( "scr_allies", "marines" ); + game["strings"]["axis_win"] = &"ZM_CIA_WIN_MATCH"; + game["strings"]["axis_win_round"] = &"ZM_CIA_WIN_ROUND"; + game["strings"]["axis_mission_accomplished"] = &"ZM_CIA_MISSION_ACCOMPLISHED"; + game["strings"]["axis_eliminated"] = &"ZM_CIA_ELIMINATED"; + game["strings"]["axis_forfeited"] = &"ZM_CIA_FORFEITED"; + game["strings"]["axis_name"] = &"ZM_CIA_NAME"; + game["music"]["spawn_axis"] = "SPAWN_RUS"; + game["music"]["victory_axis"] = "mus_victory_soviet"; + game["icons"]["axis"] = "faction_cia"; + game["colors"]["axis"] = ( 0.65, 0.57, 0.41 ); + game["voice"]["axis"] = "vox_pmc_"; +} + +cdc() +{ + allies(); + axis(); +} + +allies() +{ + +} + +axis() +{ + +} diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_amb.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_amb.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_amb.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_amb.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_classic.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_classic.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_classic.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_classic.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_craftables.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_craftables.gsc similarity index 98% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_craftables.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_craftables.gsc index 244c668..aa7b486 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_craftables.gsc +++ b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_craftables.gsc @@ -492,8 +492,9 @@ roof_nag_vo() zone_roof = getent( "zone_roof", "targetname" ); zone_roof_infirmary = getent( "zone_roof_infirmary", "targetname" ); n_roof_nag_wait = 60; + n_roof_nag_max_times = 3; - for ( n_roof_nag_max_times = 3; !flag( "plane_built" ) && n_roof_nag_max_times > 0; n_roof_nag_max_times-- ) + while ( !flag( "plane_built" ) && n_roof_nag_max_times > 0 ) { wait( n_roof_nag_wait ); b_is_a_player_on_the_roof = 0; @@ -505,12 +506,20 @@ roof_nag_vo() b_is_a_player_on_the_roof = 1; } - asm_cond( !b_is_a_player_on_the_roof, loc_2E53 ); - asm_cond( level.plane_pieces_picked_up == 5, loc_2E53 ); - player = players[randomintrange( 0, players.size )]; - asm_cond( isdefined( player ), loc_2E53 ); - player do_player_general_vox( "quest", "sidequest_roof_nag", undefined, 100 ); - n_roof_nag_wait *= 1.5; + if ( !b_is_a_player_on_the_roof ) + { + if ( level.plane_pieces_picked_up == 5 ) + { + player = players[randomintrange( 0, players.size )]; + + if ( isdefined( player ) ) + { + player do_player_general_vox( "quest", "sidequest_roof_nag", undefined, 100 ); + n_roof_nag_wait *= 1.5; + n_roof_nag_max_times--; + } + } + } } } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_distance_tracking.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_distance_tracking.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_distance_tracking.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_distance_tracking.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_gamemodes.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_gamemodes.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_gamemodes.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_gamemodes.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_grief_cellblock.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_grief_cellblock.gsc similarity index 97% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_grief_cellblock.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_grief_cellblock.gsc index 4e34b5d..89da622 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_grief_cellblock.gsc +++ b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_grief_cellblock.gsc @@ -117,16 +117,16 @@ give_team_characters() switch ( self.characterindex ) { - case "2": - case "0": + case 2: + case 0: self setmodel( "c_zom_player_grief_inmate_fb" ); self.voice = "american"; self.skeleton = "base"; self setviewmodel( "c_zom_oleary_shortsleeve_viewhands" ); self.characterindex = 0; break; - case "3": - case "1": + case 3: + case 1: self setmodel( "c_zom_player_grief_guard_fb" ); self.voice = "american"; self.skeleton = "base"; @@ -180,21 +180,20 @@ main() } if ( trigger.script_flag == "activate_cafeteria" || trigger.script_flag == "activate_cellblock_east" || trigger.script_flag == "activate_cellblock_west" || trigger.script_flag == "activate_cellblock_barber" || trigger.script_flag == "activate_cellblock_gondola" || trigger.script_flag == "activate_cellblock_east_west" || trigger.script_flag == "activate_warden_office" ) - { continue; - continue; - } - - if ( isdefined( trigger.target ) ) + else { - str_target = trigger.target; - a_door_and_clip = getentarray( str_target, "targetname" ); + if ( isdefined( trigger.target ) ) + { + str_target = trigger.target; + a_door_and_clip = getentarray( str_target, "targetname" ); - foreach ( ent in a_door_and_clip ) - ent delete(); + foreach ( ent in a_door_and_clip ) + ent delete(); + } + + trigger delete(); } - - trigger delete(); } } @@ -488,7 +487,7 @@ turn_afterlife_interact_on() if ( issubstr( self.model, "p6_zm_al_shock_box" ) ) { - self useanimtree( -1 ); + self useanimtree( #animtree ); self setmodel( "p6_zm_al_shock_box_on" ); self setanim( level.shockbox_anim["on"] ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_sq.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_sq.gsc similarity index 99% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_sq.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_sq.gsc index 0a26369..be66b4e 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_sq.gsc +++ b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_sq.gsc @@ -438,27 +438,27 @@ setup_key_doors() { switch ( piece_number ) { - case "1": + case 1: width = 120; height = 112; length = 120; break; - case "2": + case 2: width = 120; height = 112; length = 124; break; - case "3": + case 3: width = 108; height = 112; length = 90; break; - case "4": + case 4: width = 98; height = 112; length = 108; break; - case "5": + case 5: width = 60; height = 112; length = 90; @@ -541,7 +541,7 @@ open_custom_door_master_key( n_door_index, e_triggerer ) switch ( n_door_index ) { - case "1": + case 1: shower_key_door = getent( "shower_key_door", "targetname" ); shower_key_door moveto( shower_key_door.origin + vectorscale( ( 1, 0, 0 ), 80.0 ), 0.25 ); shower_key_door connectpaths(); @@ -551,14 +551,14 @@ open_custom_door_master_key( n_door_index, e_triggerer ) shower_key_door playsound( "zmb_chainlink_open" ); break; - case "2": + case 2: admin_powerhouse_puzzle_door_clip = getent( "admin_powerhouse_puzzle_door_clip", "targetname" ); admin_powerhouse_puzzle_door_clip delete(); admin_powerhouse_puzzle_door = getent( "admin_powerhouse_puzzle_door", "targetname" ); admin_powerhouse_puzzle_door rotateyaw( 90, 0.5 ); admin_powerhouse_puzzle_door playsound( "zmb_chainlink_open" ); break; - case "3": + case 3: m_nixie_door_left = getent( "nixie_door_left", "targetname" ); m_nixie_door_right = getent( "nixie_door_right", "targetname" ); m_nixie_door_left rotateyaw( -165, 0.5 ); @@ -570,7 +570,7 @@ open_custom_door_master_key( n_door_index, e_triggerer ) e_triggerer door_rumble_on_open(); break; - case "4": + case 4: m_gate_01 = getent( "cable_puzzle_gate_01", "targetname" ); m_gate_01 moveto( m_gate_01.origin + ( -16, 80, 0 ), 0.5 ); m_gate_01 connectpaths(); @@ -586,7 +586,7 @@ open_custom_door_master_key( n_door_index, e_triggerer ) flag_set( "docks_inner_gate_unlocked" ); flag_set( "docks_inner_gate_open" ); break; - case "5": + case 5: m_infirmary_case_door_left = getent( "infirmary_case_door_left", "targetname" ); m_infirmary_case_door_right = getent( "infirmary_case_door_right", "targetname" ); m_infirmary_case_door_left rotateyaw( -165, 0.5 ); @@ -886,9 +886,7 @@ get_zombies_touching_volume( team, volume_name, volume ) if ( !isdefined( volume ) ) { volume = getent( volume_name, "targetname" ); -/# assert( isdefined( volume ), volume_name + " does not exist" ); -#/ } guys = getaiarray( team ); @@ -2041,14 +2039,8 @@ play_fx( str_fx, v_origin, v_angles, time_to_delete_or_notify, b_link_to_self, s } } -spawn_model( model_name, origin, angles, n_spawnflags ) +spawn_model( model_name, origin = ( 0, 0, 0 ), angles, n_spawnflags = 0 ) { - if ( !isdefined( n_spawnflags ) ) - n_spawnflags = 0; - - if ( !isdefined( origin ) ) - origin = ( 0, 0, 0 ); - model = spawn( "script_model", origin, n_spawnflags ); model setmodel( model_name ); @@ -2060,17 +2052,12 @@ spawn_model( model_name, origin, angles, n_spawnflags ) getfx( fx ) { -/# assert( isdefined( level._effect[fx] ), "Fx " + fx + " is not defined in level._effect." ); -#/ return level._effect[fx]; } -_play_fx_delete( ent, time_to_delete_or_notify ) +_play_fx_delete( ent, time_to_delete_or_notify = -1 ) { - if ( !isdefined( time_to_delete_or_notify ) ) - time_to_delete_or_notify = -1; - if ( isstring( time_to_delete_or_notify ) ) ent waittill_either( "death", time_to_delete_or_notify ); else if ( time_to_delete_or_notify > 0 ) diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_sq_nixie.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_sq_nixie.gsc similarity index 97% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_sq_nixie.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_sq_nixie.gsc index a1d26a4..86f8b58 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_sq_nixie.gsc +++ b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_sq_nixie.gsc @@ -220,11 +220,8 @@ sndnixietubecountdown( num ) ent playsound( "zmb_quest_nixie_fail" ); } -nixie_tube_thread( n_tube_index, b_force_reset ) +nixie_tube_thread( n_tube_index, b_force_reset = 1 ) { - if ( !isdefined( b_force_reset ) ) - b_force_reset = 1; - level endon( "kill_nixie_input" ); if ( b_force_reset ) @@ -262,11 +259,8 @@ nixie_tube_thread( n_tube_index, b_force_reset ) } } -nixie_tube_win_effects( n_tube_index, n_blink_rate ) +nixie_tube_win_effects( n_tube_index, n_blink_rate = 0.25 ) { - if ( !isdefined( n_blink_rate ) ) - n_blink_rate = 0.25; - while ( !flag( "nixie_countdown_started" ) ) { self hidepart( "J_" + level.a_nixie_tube_code[n_tube_index] ); @@ -278,17 +272,8 @@ nixie_tube_win_effects( n_tube_index, n_blink_rate ) self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] ); } -nixie_tube_win_effects_all_tubes( goal_num_1, goal_num_2, goal_num_3 ) +nixie_tube_win_effects_all_tubes( goal_num_1 = 0, goal_num_2 = 0, goal_num_3 = 0 ) { - if ( !isdefined( goal_num_1 ) ) - goal_num_1 = 0; - - if ( !isdefined( goal_num_2 ) ) - goal_num_2 = 0; - - if ( !isdefined( goal_num_3 ) ) - goal_num_3 = 0; - a_nixie_tube = []; a_nixie_tube[1] = getent( "nixie_tube_1", "targetname" ); a_nixie_tube[2] = getent( "nixie_tube_2", "targetname" ); diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_sq_vo.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_sq_vo.gsc similarity index 99% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_sq_vo.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_sq_vo.gsc index 38c671a..b107d39 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_sq_vo.gsc +++ b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_sq_vo.gsc @@ -403,16 +403,16 @@ vo_play_four_part_conversation( convo ) { case "Arlington": e_arlington = player; - continue; + break; case "Sal": e_sal = player; - continue; + break; case "Billy": e_billy = player; - continue; + break; case "Finn": e_finn = player; - continue; + break; } } } @@ -646,9 +646,7 @@ get_players_touching( scr_touched_name ) { n_touching_count = 0; e_touched = getent( scr_touched_name, "targetname" ); -/# assert( isdefined( e_touched ) ); -#/ a_players = getplayers(); foreach ( player in a_players ) diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_standard.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_standard.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_standard.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_standard.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_traps.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_traps.gsc similarity index 97% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_traps.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_traps.gsc index 450bc62..91546d7 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_traps.gsc +++ b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_traps.gsc @@ -17,13 +17,13 @@ init_fan_trap_trigs() init_fan_fxanim( "wardens_office" ); } +#using_animtree("fxanim_props"); + init_fan_trap_animtree() { - scriptmodelsuseanimtree( -1 ); + scriptmodelsuseanimtree( #animtree ); } -#using_animtree("fxanim_props"); - init_fan_fxanim( str_loc ) { e_fan = getent( "fxanim_fan_" + str_loc, "targetname" ); @@ -113,7 +113,7 @@ activate_fan_trap() { self.zombie_dmg_trig thread fan_trap_damage( self ); e_fan = getent( "fxanim_fan_" + self.script_string, "targetname" ); - e_fan useanimtree( -1 ); + e_fan useanimtree( #animtree ); e_fan playsound( "zmb_trap_fan_start" ); e_fan playloopsound( "zmb_trap_fan_loop", 2 ); n_start_time = getanimlength( level.fan_trap_fxanims["fan_trap_start"] ); @@ -734,15 +734,28 @@ tower_trap_fires( a_zombies ) self endon( "tower_trap_off" ); e_org = getstruct( self.range_trigger.target, "targetname" ); + n_index = randomintrange( 0, a_zombies.size ); - for ( n_index = randomintrange( 0, a_zombies.size ); isalive( a_zombies[n_index] ); n_index = randomintrange( 0, a_zombies.size ) ) + while ( isalive( a_zombies[n_index] ) ) { e_target = a_zombies[n_index]; v_zombietarget = e_target gettagorigin( self.tag_to_target ); - arrayremovevalue( a_zombies, e_target, 0 ); - wait_network_frame(); - asm_cond( a_zombies.size <= 0, loc_2676 ); - asm_jump( loc_268A ); + + if ( sighttracepassed( e_org.origin, v_zombietarget, 1, undefined ) ) + { + magicbullet( self.weapon_name, e_org.origin, v_zombietarget ); + wait( self.trap_reload_time ); + } + else + { + arrayremovevalue( a_zombies, e_target, 0 ); + wait_network_frame(); + + if ( a_zombies.size <= 0 ) + break; + + n_index = randomintrange( 0, a_zombies.size ); + } } } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_travel.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_travel.gsc similarity index 99% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_travel.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_travel.gsc index 1be000b..6985d57 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_travel.gsc +++ b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_travel.gsc @@ -336,11 +336,8 @@ zipline_call_trigger_think() } } -move_gondola( b_suppress_doors_close ) +move_gondola( b_suppress_doors_close = 0 ) { - if ( !isdefined( b_suppress_doors_close ) ) - b_suppress_doors_close = 0; - level clientnotify( "sndGS" ); gondola_lights_red(); e_gondola = level.e_gondola; @@ -607,7 +604,7 @@ tear_down_gondola_poi() gondola_chain_fx_anim() { m_chains = self.fxanim_chains; - m_chains useanimtree( -1 ); + m_chains useanimtree( #animtree ); n_start_time = getanimlength( level.gondola_chains_fxanims["gondola_chains_start"] ); n_idle_time = getanimlength( level.gondola_chains_fxanims["gondola_chains_idle"] ); m_chains setanim( level.gondola_chains_fxanims["gondola_chains_start"], 1, 0.1, 1 ); @@ -723,7 +720,7 @@ array_players_on_gondola() init_gondola_chains_animtree() { - scriptmodelsuseanimtree( -1 ); + scriptmodelsuseanimtree( #animtree ); } gondola_hostmigration() diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_utility.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_utility.gsc similarity index 99% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_utility.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_utility.gsc index bde109b..72452b3 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_utility.gsc +++ b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_utility.gsc @@ -44,12 +44,9 @@ is_team_on_golden_gate_bridge() foreach ( player in players ) { if ( player istouching( e_zone ) ) - { continue; - continue; - } - - return false; + else + return false; } return true; @@ -180,7 +177,7 @@ blundergat_upgrade_station() v_weapon_angles_offset = ( 0, 90, -90 ); m_converter.v_weapon_origin = m_converter gettagorigin( "tag_origin" ) + v_weapon_origin_offset; m_converter.v_weapon_angles = v_angles + v_weapon_angles_offset; - m_converter useanimtree( -1 ); + m_converter useanimtree( #animtree ); m_converter.fxanims["close"] = %fxanim_zom_al_packasplat_start_anim; m_converter.fxanims["inject"] = %fxanim_zom_al_packasplat_idle_anim; m_converter.fxanims["open"] = %fxanim_zom_al_packasplat_end_anim; diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_weap_quest.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_weap_quest.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_weap_quest.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_alcatraz_weap_quest.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_prison.gsc similarity index 99% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_prison.gsc index 40dbcb0..0b8d4a8 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison.gsc +++ b/ZM/Maps/Mob of the Dead/maps/mp/zm_prison.gsc @@ -494,7 +494,7 @@ give_personality_characters() #/ switch ( self.characterindex ) { - case "0": + case 0: self character\c_zom_oleary::main(); self setviewmodel( "c_zom_oleary_shortsleeve_viewhands" ); level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); @@ -502,7 +502,7 @@ give_personality_characters() self set_player_is_female( 0 ); self.character_name = "Finn"; break; - case "1": + case 1: self character\c_zom_deluca::main(); self setviewmodel( "c_zom_deluca_longsleeve_viewhands" ); level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); @@ -510,7 +510,7 @@ give_personality_characters() self set_player_is_female( 0 ); self.character_name = "Sal"; break; - case "2": + case 2: self character\c_zom_handsome::main(); self setviewmodel( "c_zom_handsome_sleeveless_viewhands" ); level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); @@ -518,7 +518,7 @@ give_personality_characters() self set_player_is_female( 0 ); self.character_name = "Billy"; break; - case "3": + case 3: self character\c_zom_arlington::main(); self setviewmodel( "c_zom_arlington_coat_viewhands" ); level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); @@ -1102,7 +1102,7 @@ alcatraz_afterlife_doors() m_shockbox = getent( s_struct.target, "targetname" ); m_shockbox.health = 5000; m_shockbox setcandamage( 1 ); - m_shockbox useanimtree( -1 ); + m_shockbox useanimtree( #animtree ); t_bump = spawn( "trigger_radius", m_shockbox.origin, 0, 28, 64 ); t_bump.origin = m_shockbox.origin + anglestoforward( m_shockbox.angles ) * 0 + anglestoright( m_shockbox.angles ) * 28 + anglestoup( m_shockbox.angles ) * 0; diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_achievement.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_prison_achievement.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_achievement.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_prison_achievement.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_ffotd.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_prison_ffotd.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_ffotd.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_prison_ffotd.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_fx.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_prison_fx.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_fx.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_prison_fx.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_spoon.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_prison_spoon.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_spoon.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_prison_spoon.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_bg.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_prison_sq_bg.gsc similarity index 98% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_bg.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_prison_sq_bg.gsc index c3097ee..e7ba19e 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_bg.gsc +++ b/ZM/Maps/Mob of the Dead/maps/mp/zm_prison_sq_bg.gsc @@ -246,11 +246,8 @@ sq_bg_spawn_rumble() } } -take_old_weapon_and_give_reward( current_weapon, reward_weapon, weapon_limit_override ) +take_old_weapon_and_give_reward( current_weapon, reward_weapon, weapon_limit_override = 0 ) { - if ( !isdefined( weapon_limit_override ) ) - weapon_limit_override = 0; - if ( weapon_limit_override == 1 ) self takeweapon( current_weapon ); else diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_fc.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_prison_sq_fc.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_fc.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_prison_sq_fc.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_final.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_prison_sq_final.gsc similarity index 99% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_final.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_prison_sq_final.gsc index 64b2a59..ba2f0d8 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_final.gsc +++ b/ZM/Maps/Mob of the Dead/maps/mp/zm_prison_sq_final.gsc @@ -148,17 +148,8 @@ nixie_final_audio_cue_code() m_nixie_tube waittill( "scary_voice" ); } -nixie_tube_win_effects_all_tubes_final( goal_num_1, goal_num_2, goal_num_3 ) +nixie_tube_win_effects_all_tubes_final( goal_num_1 = 0, goal_num_2 = 0, goal_num_3 = 0 ) { - if ( !isdefined( goal_num_1 ) ) - goal_num_1 = 0; - - if ( !isdefined( goal_num_2 ) ) - goal_num_2 = 0; - - if ( !isdefined( goal_num_3 ) ) - goal_num_3 = 0; - a_nixie_tube = []; a_nixie_tube[1] = getent( "nixie_tube_1", "targetname" ); a_nixie_tube[2] = getent( "nixie_tube_2", "targetname" ); diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_wth.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zm_prison_sq_wth.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_wth.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zm_prison_sq_wth.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_afterlife.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_afterlife.gsc similarity index 99% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_afterlife.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_afterlife.gsc index 9fe8db6..f2eeb55 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_afterlife.gsc +++ b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_afterlife.gsc @@ -200,11 +200,8 @@ init_player() self thread afterlife_player_refill_watch(); } -afterlife_remove( b_afterlife_death ) +afterlife_remove( b_afterlife_death = 0 ) { - if ( !isdefined( b_afterlife_death ) ) - b_afterlife_death = 0; - if ( isdefined( b_afterlife_death ) && b_afterlife_death ) self.lives = 0; else if ( self.lives > 0 ) @@ -405,11 +402,8 @@ afterlife_enter() } } -afterlife_leave( b_revived ) +afterlife_leave( b_revived = 1 ) { - if ( !isdefined( b_revived ) ) - b_revived = 1; - while ( self ismantling() ) wait 0.05; @@ -489,11 +483,8 @@ afterlife_leave( b_revived ) reset_all_afterlife_unitriggers(); } -afterlife_laststand( b_electric_chair ) +afterlife_laststand( b_electric_chair = 0 ) { - if ( !isdefined( b_electric_chair ) ) - b_electric_chair = 0; - self endon( "disconnect" ); self endon( "afterlife_bleedout" ); level endon( "end_game" ); @@ -615,11 +606,8 @@ afterlife_create_mana_bar( corpse ) self thread afterlife_jump_watch( corpse ); } -afterlife_infinite_mana( b_infinite ) +afterlife_infinite_mana( b_infinite = 1 ) { - if ( !isdefined( b_infinite ) ) - b_infinite = 1; - if ( isdefined( b_infinite ) && b_infinite ) self.infinite_mana = 1; else @@ -961,9 +949,8 @@ afterlife_revive_trigger_think() continue; gun = reviver getcurrentweapon(); -/# assert( isdefined( gun ) ); -#/ + if ( gun == level.revive_tool || gun == level.afterlife_revive_tool ) continue; @@ -1049,9 +1036,7 @@ afterlife_can_revive( revivee ) afterlife_revive_do_revive( playerbeingrevived, revivergun ) { -/# assert( self is_reviving_afterlife( playerbeingrevived ) ); -#/ revivetime = 3; playloop = 0; @@ -1469,9 +1454,8 @@ afterlife_get_spawnpoint() if ( !isdefined( spawnpoints ) || spawnpoints.size == 0 ) spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); -/# + assert( isdefined( spawnpoints ), "Could not find initial spawn points!" ); -#/ spawnpoint = maps\mp\zombies\_zm::getfreespawnpoint( spawnpoints, self ); } @@ -1515,12 +1499,9 @@ check_for_valid_spawn_in_zone( player ) } if ( positionwouldtelefrag( s_spawn.origin ) || distancesquared( player.origin, s_spawn.origin ) < 250000 ) - { continue; - continue; - } - - return s_spawn; + else + return s_spawn; } a_spawn_structs = get_array_of_farthest( player.origin, a_spawn_structs, undefined, 250000 ); @@ -1528,12 +1509,9 @@ check_for_valid_spawn_in_zone( player ) foreach ( s_spawn in a_spawn_structs ) { if ( positionwouldtelefrag( s_spawn.origin ) ) - { continue; - continue; - } - - return s_spawn; + else + return s_spawn; } } } @@ -1740,7 +1718,7 @@ afterlife_interact_object_think() n_count = 0; self.health = 5000; self setcandamage( 1 ); - self useanimtree( -1 ); + self useanimtree( #animtree ); self playloopsound( "zmb_afterlife_shockbox_off", 1 ); if ( !isdefined( level.shockbox_anim ) ) diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_ai_brutus.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_ai_brutus.gsc similarity index 99% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_ai_brutus.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_ai_brutus.gsc index 476ec8a..b2d3a32 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_ai_brutus.gsc +++ b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_ai_brutus.gsc @@ -218,18 +218,12 @@ setup_interaction_matrix() { int_type = interaction_types[i]; interaction = level.interaction_types[int_type]; -/# assert( !isdefined( level.interaction_priority[interaction.priority] ) ); -#/ level.interaction_priority[interaction.priority] = int_type; } /# for ( i = 0; i < interaction_types.size; i++ ) - { -/# assert( isdefined( level.interaction_priority[i] ) ); -#/ - } #/ } @@ -315,7 +309,7 @@ brutus_spawn( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zon if ( !isdefined( spawn_pos ) ) { /# - println( "ERROR: Tried to spawn brutus with no brutus spawn_positions!\n" ); + println( "ERROR: Tried to spawn brutus with no brutus spawn_positions!\\n" ); iprintln( "ERROR: Tried to spawn brutus with no brutus spawn_positions!" ); #/ self delete(); @@ -743,9 +737,7 @@ brutus_round_spawn_failsafe_respawn() get_interact_offset( item, target_type ) { -/# assert( isdefined( level.interaction_types[target_type] ) ); -#/ interaction = level.interaction_types[target_type]; anim_state = interaction.animstate; animationid = self getanimfromasd( anim_state, 0 ); @@ -1279,9 +1271,8 @@ get_priority_item_for_brutus( zone_name, do_secondary_zone_checks ) if ( int_objects[j] [[ int_struct.validity_func ]]() ) { score = self [[ int_struct.value_func ]]( int_objects[j] ); -/# assert( score >= 0 ); -#/ + if ( score < best_score || best_score < 0 ) { best_object = int_objects[j]; @@ -1350,9 +1341,7 @@ get_trap_score( object ) get_magic_boxes( zone_name ) { -/# assert( isdefined( level.zones[zone_name] ) ); -#/ return level.zones[zone_name].magic_boxes; } @@ -1378,9 +1367,7 @@ get_perk_machine_trigger() get_perk_machines( zone_name ) { -/# assert( isdefined( level.zones[zone_name] ) ); -#/ return level.zones[zone_name].perk_machines; } @@ -1411,9 +1398,7 @@ get_trigger_for_craftable() get_craftable_tables( zone_name ) { -/# assert( isdefined( level.zones[zone_name] ) ); -#/ return level.zones[zone_name].craftable_tables; } @@ -1454,9 +1439,7 @@ get_closest_trap_for_brutus() get_traps( zone_name ) { -/# assert( isdefined( level.zones[zone_name] ) ); -#/ return level.zones[zone_name].traps; } @@ -1472,9 +1455,7 @@ is_trap_valid() get_plane_ramps( zone_name ) { -/# assert( isdefined( level.zones[zone_name] ) ); -#/ return level.zones[zone_name].plane_triggers; } @@ -1758,11 +1739,11 @@ get_lock_hint_string( cost ) { switch ( cost ) { - case "2000": + case 2000: return &"ZOMBIE_LOCKED_COST_2000"; - case "4000": + case 4000: return &"ZOMBIE_LOCKED_COST_4000"; - case "6000": + case 6000: return &"ZOMBIE_LOCKED_COST_6000"; default: return &"ZOMBIE_LOCKED_COST"; diff --git a/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_craftables.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_craftables.gsc new file mode 100644 index 0000000..7ca48ff --- /dev/null +++ b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_craftables.gsc @@ -0,0 +1,2900 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\_demo; + +init() +{ + precachestring( &"ZOMBIE_BUILDING" ); + precachestring( &"ZOMBIE_BUILD_PIECE_MISSING" ); + precachestring( &"ZOMBIE_BUILD_PIECE_GRAB" ); + precacheitem( "zombie_builder_zm" ); + precacheitem( "buildable_piece_zm" ); + level.craftable_piece_swap_allowed = 1; + zombie_craftables_callbacks = []; + level.craftablepickups = []; + level.craftables_crafted = []; + level.a_uts_craftables = []; + level.craftable_piece_count = 0; + level._effect["building_dust"] = loadfx( "maps/zombie/fx_zmb_buildable_assemble_dust" ); + + if ( isdefined( level.init_craftables ) ) + [[ level.init_craftables ]](); + + open_table = spawnstruct(); + open_table.name = "open_table"; + open_table.triggerthink = ::opentablecraftable; + open_table.custom_craftablestub_update_prompt = ::open_craftablestub_update_prompt; + include_zombie_craftable( open_table ); + add_zombie_craftable( "open_table", &"" ); + + if ( isdefined( level.use_swipe_protection ) ) + onplayerconnect_callback( ::craftables_watch_swipes ); +} + +anystub_update_prompt( player ) +{ + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || player in_revive_trigger() ) + { + self.hint_string = ""; + return false; + } + + if ( isdefined( player.is_drinking ) && player.is_drinking > 0 ) + { + self.hint_string = ""; + return false; + } + + if ( isdefined( player.screecher_weapon ) ) + { + self.hint_string = ""; + return false; + } + + return true; +} + +anystub_get_unitrigger_origin() +{ + if ( isdefined( self.origin_parent ) ) + return self.origin_parent.origin; + + return self.origin; +} + +anystub_on_spawn_trigger( trigger ) +{ + if ( isdefined( self.link_parent ) ) + { + trigger enablelinkto(); + trigger linkto( self.link_parent ); + trigger setmovingplatformenabled( 1 ); + } +} + +craftables_watch_swipes() +{ + self endon( "disconnect" ); + self notify( "craftables_watch_swipes" ); + self endon( "craftables_watch_swipes" ); + + while ( true ) + { + self waittill( "melee_swipe", zombie ); + + if ( distancesquared( zombie.origin, self.origin ) > zombie.meleeattackdist * zombie.meleeattackdist ) + continue; + + trigger = level._unitriggers.trigger_pool[self getentitynumber()]; + + if ( isdefined( trigger ) && isdefined( trigger.stub.piece ) ) + { + piece = trigger.stub.piece; + + if ( !isdefined( piece.damage ) ) + piece.damage = 0; + + piece.damage++; + + if ( piece.damage > 12 ) + { + thread maps\mp\zombies\_zm_equipment::equipment_disappear_fx( trigger.stub maps\mp\zombies\_zm_unitrigger::unitrigger_origin() ); + piece maps\mp\zombies\_zm_craftables::piece_unspawn(); + self maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); + + if ( isalive( self ) ) + self playlocalsound( level.zmb_laugh_alias ); + } + } + } +} + +explosiondamage( damage, pos ) +{ +/# + println( "ZM CRAFTABLE Explode do " + damage + " damage to " + self.name + "\\n" ); +#/ + self dodamage( damage, pos ); +} + +make_zombie_craftable_open( str_craftable, str_model, v_angle_offset, v_origin_offset ) +{ + assert( isdefined( level.zombie_craftablestubs[str_craftable] ), "Craftable " + str_craftable + " has not been added yet." ); + precachemodel( str_model ); + s_craftable = level.zombie_craftablestubs[str_craftable]; + s_craftable.is_open_table = 1; + s_craftable.str_model = str_model; + s_craftable.v_angle_offset = v_angle_offset; + s_craftable.v_origin_offset = v_origin_offset; +} + +add_zombie_craftable( craftable_name, str_to_craft, str_crafting, str_taken, onfullycrafted, need_all_pieces ) +{ + if ( !isdefined( level.zombie_include_craftables ) ) + level.zombie_include_craftables = []; + + if ( isdefined( level.zombie_include_craftables ) && !isdefined( level.zombie_include_craftables[craftable_name] ) ) + return; + + if ( isdefined( str_to_craft ) ) + precachestring( str_to_craft ); + + if ( isdefined( str_crafting ) ) + precachestring( str_crafting ); + + if ( isdefined( str_taken ) ) + precachestring( str_taken ); + + craftable_struct = level.zombie_include_craftables[craftable_name]; + + if ( !isdefined( level.zombie_craftablestubs ) ) + level.zombie_craftablestubs = []; + + craftable_struct.str_to_craft = str_to_craft; + craftable_struct.str_crafting = str_crafting; + craftable_struct.str_taken = str_taken; + craftable_struct.onfullycrafted = onfullycrafted; + craftable_struct.need_all_pieces = need_all_pieces; +/# + println( "ZM >> Looking for craftable - " + craftable_struct.name ); +#/ + level.zombie_craftablestubs[craftable_struct.name] = craftable_struct; + + if ( !level.createfx_enabled ) + { + if ( level.zombie_craftablestubs.size == 2 ) + { + bits = getminbitcountfornum( level.craftable_piece_count ); + registerclientfield( "toplayer", "craftable", 9000, bits, "int" ); + } + } +} + +add_zombie_craftable_vox_category( craftable_name, vox_id ) +{ + craftable_struct = level.zombie_include_craftables[craftable_name]; + craftable_struct.vox_id = vox_id; +} + +include_zombie_craftable( craftablestub ) +{ + if ( !isdefined( level.zombie_include_craftables ) ) + level.zombie_include_craftables = []; +/# + println( "ZM >> Including craftable - " + craftablestub.name ); +#/ + level.zombie_include_craftables[craftablestub.name] = craftablestub; +} + +generate_zombie_craftable_piece( craftablename, piecename, modelname, radius, height, drop_offset, hud_icon, onpickup, ondrop, oncrafted, use_spawn_num, tag_name, can_reuse, client_field_value, is_shared = 0, vox_id, b_one_time_vo = 0 ) +{ + precachemodel( modelname ); + + if ( isdefined( hud_icon ) ) + precacheshader( hud_icon ); + + piecestub = spawnstruct(); + craftable_pieces = []; + piece_alias = ""; + + if ( !isdefined( piecename ) ) + piecename = modelname; + + craftable_pieces_structs = getstructarray( craftablename + "_" + piecename, "targetname" ); +/# + if ( craftable_pieces_structs.size < 1 ) + println( "ERROR: Missing craftable piece <" + craftablename + "> <" + piecename + ">\\n" ); +#/ + foreach ( index, struct in craftable_pieces_structs ) + { + craftable_pieces[index] = struct; + craftable_pieces[index].hasspawned = 0; + } + + piecestub.spawns = craftable_pieces; + piecestub.craftablename = craftablename; + piecestub.piecename = piecename; + piecestub.modelname = modelname; + piecestub.hud_icon = hud_icon; + piecestub.radius = radius; + piecestub.height = height; + piecestub.tag_name = tag_name; + piecestub.can_reuse = can_reuse; + piecestub.drop_offset = drop_offset; + piecestub.max_instances = 256; + piecestub.onpickup = onpickup; + piecestub.ondrop = ondrop; + piecestub.oncrafted = oncrafted; + piecestub.use_spawn_num = use_spawn_num; + piecestub.is_shared = is_shared; + piecestub.vox_id = vox_id; + + if ( isdefined( b_one_time_vo ) && b_one_time_vo ) + piecestub.b_one_time_vo = b_one_time_vo; + + if ( isdefined( client_field_value ) ) + { + if ( isdefined( is_shared ) && is_shared ) + { + assert( isstring( client_field_value ), "Client field value for shared item (" + piecename + ") should be a string (the name of the ClientField to use)" ); + piecestub.client_field_id = client_field_value; + } + else + piecestub.client_field_state = client_field_value; + } + + return piecestub; +} + +manage_multiple_pieces( max_instances ) +{ + self.max_instances = max_instances; + self.managing_pieces = 1; + self.piece_allocated = []; +} + +combine_craftable_pieces( piece1, piece2, piece3 ) +{ + spawns1 = piece1.spawns; + spawns2 = piece2.spawns; + spawns = arraycombine( spawns1, spawns2, 1, 0 ); + + if ( isdefined( piece3 ) ) + { + spawns3 = piece3.spawns; + spawns = arraycombine( spawns, spawns3, 1, 0 ); + spawns = array_randomize( spawns ); + piece3.spawns = spawns; + } + else + spawns = array_randomize( spawns ); + + piece1.spawns = spawns; + piece2.spawns = spawns; +} + +add_craftable_piece( piecestub, tag_name, can_reuse ) +{ + if ( !isdefined( self.a_piecestubs ) ) + self.a_piecestubs = []; + + if ( isdefined( tag_name ) ) + piecestub.tag_name = tag_name; + + if ( isdefined( can_reuse ) ) + piecestub.can_reuse = can_reuse; + + self.a_piecestubs[self.a_piecestubs.size] = piecestub; +} + +player_drop_piece_on_downed() +{ + self endon( "craftable_piece_released" ); + + self waittill( "bled_out" ); + + onplayerlaststand(); +} + +onplayerlaststand() +{ + piece = self.current_craftable_piece; + + if ( isdefined( piece ) ) + { + return_to_start_pos = 0; + + if ( isdefined( level.safe_place_for_craftable_piece ) ) + { + if ( !self [[ level.safe_place_for_craftable_piece ]]( piece ) ) + return_to_start_pos = 1; + } + + if ( return_to_start_pos ) + piece piece_spawn_at(); + else + piece piece_spawn_at( self.origin + vectorscale( ( 1, 1, 0 ), 5.0 ), self.angles ); + + if ( isdefined( piece.ondrop ) ) + piece [[ piece.ondrop ]]( self ); + + self setclientfieldtoplayer( "craftable", 0 ); + } + + self.current_craftable_piece = undefined; + self notify( "craftable_piece_released" ); +} + +piecestub_get_unitrigger_origin() +{ + if ( isdefined( self.origin_parent ) ) + return self.origin_parent.origin + vectorscale( ( 0, 0, 1 ), 12.0 ); + + return self.origin; +} + +generate_piece_unitrigger( classname, origin, angles, flags, radius = 64, script_height = 64, moving ) +{ + script_width = script_height; + + if ( !isdefined( script_width ) ) + script_width = 64; + + script_length = script_height; + + if ( !isdefined( script_length ) ) + script_length = 64; + + unitrigger_stub = spawnstruct(); + unitrigger_stub.origin = origin; + + if ( isdefined( script_length ) ) + unitrigger_stub.script_length = script_length; + else + unitrigger_stub.script_length = 13.5; + + if ( isdefined( script_width ) ) + unitrigger_stub.script_width = script_width; + else + unitrigger_stub.script_width = 27.5; + + if ( isdefined( script_height ) ) + unitrigger_stub.script_height = script_height; + else + unitrigger_stub.script_height = 24; + + unitrigger_stub.radius = radius; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + unitrigger_stub.hint_string = &"ZOMBIE_BUILD_PIECE_GRAB"; + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.require_look_at = 0; + + switch ( classname ) + { + case "trigger_radius": + unitrigger_stub.script_unitrigger_type = "unitrigger_radius"; + break; + case "trigger_radius_use": + unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + break; + case "trigger_box": + unitrigger_stub.script_unitrigger_type = "unitrigger_box"; + break; + case "trigger_box_use": + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + break; + } + + unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + unitrigger_stub.prompt_and_visibility_func = ::piecetrigger_update_prompt; + unitrigger_stub.originfunc = ::piecestub_get_unitrigger_origin; + unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; + + if ( isdefined( moving ) && moving ) + maps\mp\zombies\_zm_unitrigger::register_unitrigger( unitrigger_stub, ::piece_unitrigger_think ); + else + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::piece_unitrigger_think ); + + return unitrigger_stub; +} + +piecetrigger_update_prompt( player ) +{ + can_use = self.stub piecestub_update_prompt( player ); + self setinvisibletoplayer( player, !can_use ); + self sethintstring( self.stub.hint_string ); + return can_use; +} + +piecestub_update_prompt( player ) +{ + if ( !self anystub_update_prompt( player ) ) + return false; + + if ( isdefined( player.current_craftable_piece ) && !( isdefined( self.piece.is_shared ) && self.piece.is_shared ) ) + { + if ( !level.craftable_piece_swap_allowed ) + self.hint_string = &"ZM_CRAFTABLES_PIECE_NO_SWITCH"; + else + { + spiece = self.piece; + cpiece = player.current_craftable_piece; + + if ( spiece.piecename == cpiece.piecename && spiece.craftablename == cpiece.craftablename ) + { + self.hint_string = ""; + return false; + } + + self.hint_string = &"ZOMBIE_BUILD_PIECE_SWITCH"; + } + } + else + self.hint_string = &"ZOMBIE_BUILD_PIECE_GRAB"; + + return true; +} + +piece_unitrigger_think() +{ + self endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "trigger", player ); + + if ( player != self.parent_player ) + continue; + + if ( isdefined( player.screecher_weapon ) ) + continue; + + if ( !level.craftable_piece_swap_allowed && isdefined( player.current_craftable_piece ) && !( isdefined( self.stub.piece.is_shared ) && self.stub.piece.is_shared ) ) + continue; + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + status = player player_can_take_piece( self.stub.piece ); + + if ( !status ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + } + else + player thread player_take_piece( self.stub.piece ); + } +} + +player_can_take_piece( piece ) +{ + if ( !isdefined( piece ) ) + return false; + + return true; +} + +dbline( from, to ) +{ +/# + time = 20; + + while ( time > 0 ) + { + line( from, to, ( 0, 0, 1 ), 0, 1 ); + time -= 0.05; + wait 0.05; + } +#/ +} + +player_throw_piece( piece, origin, dir, return_to_spawn, return_time, endangles ) +{ + assert( isdefined( piece ) ); + + if ( isdefined( piece ) ) + { +/# + thread dbline( origin, origin + dir ); +#/ + pass = 0; + done = 0; + altmodel = undefined; + + while ( pass < 2 && !done ) + { + grenade = self magicgrenadetype( "buildable_piece_zm", origin, dir, 30000 ); + grenade thread watch_hit_players(); + grenade ghost(); + + if ( !isdefined( altmodel ) ) + { + altmodel = spawn( "script_model", grenade.origin ); + altmodel setmodel( piece.modelname ); + } + + altmodel.origin = grenade.angles; + altmodel.angles = grenade.angles; + altmodel linkto( grenade, "", ( 0, 0, 0 ), ( 0, 0, 0 ) ); + grenade.altmodel = altmodel; + + grenade waittill( "stationary" ); + + grenade_origin = grenade.origin; + grenade_angles = grenade.angles; + landed_on = grenade getgroundent(); + grenade delete(); + + if ( isdefined( landed_on ) && landed_on == level ) + done = 1; + else + { + origin = grenade_origin; + dir = ( dir[0] * -1 / 10, dir[1] * -1 / 10, -1 ); + pass++; + } + } + + if ( !isdefined( endangles ) ) + endangles = grenade_angles; + + piece piece_spawn_at( grenade_origin, endangles ); + + if ( isdefined( altmodel ) ) + altmodel delete(); + + if ( isdefined( piece.ondrop ) ) + piece [[ piece.ondrop ]]( self ); + + if ( isdefined( return_to_spawn ) && return_to_spawn ) + piece piece_wait_and_return( return_time ); + } +} + +watch_hit_players() +{ + self endon( "death" ); + self endon( "stationary" ); + + while ( isdefined( self ) ) + { + self waittill( "grenade_bounce", pos, normal, ent ); + + if ( isplayer( ent ) ) + ent explosiondamage( 25, pos ); + } +} + +piece_wait_and_return( return_time ) +{ + self endon( "pickup" ); + wait 0.15; + + if ( isdefined( level.exploding_jetgun_fx ) ) + playfxontag( level.exploding_jetgun_fx, self.model, "tag_origin" ); + else + playfxontag( level._effect["powerup_on"], self.model, "tag_origin" ); + + wait( return_time - 6 ); + self piece_hide(); + wait 1; + self piece_show(); + wait 1; + self piece_hide(); + wait 1; + self piece_show(); + wait 1; + self piece_hide(); + wait 1; + self piece_show(); + wait 1; + self notify( "respawn" ); + self piece_unspawn(); + self piece_spawn_at(); +} + +player_return_piece_to_original_spawn() +{ + self notify( "craftable_piece_released" ); + piece = self.current_craftable_piece; + self.current_craftable_piece = undefined; + + if ( isdefined( piece ) ) + { + piece piece_spawn_at(); + self setclientfieldtoplayer( "craftable", 0 ); + } +} + +player_drop_piece_on_death() +{ + self notify( "craftable_piece_released" ); + self endon( "craftable_piece_released" ); + self thread player_drop_piece_on_downed(); + origin = self.origin; + angles = self.angles; + piece = self.current_craftable_piece; + + self waittill( "disconnect" ); + + piece piece_spawn_at( origin, angles ); + + if ( isdefined( self ) ) + self setclientfieldtoplayer( "craftable", 0 ); +} + +player_drop_piece( piece = self.current_craftable_piece ) +{ + if ( isdefined( piece ) ) + { + piece.damage = 0; + piece piece_spawn_at( self.origin, self.angles ); + self setclientfieldtoplayer( "craftable", 0 ); + + if ( isdefined( piece.ondrop ) ) + piece [[ piece.ondrop ]]( self ); + } + + self.current_craftable_piece = undefined; + self notify( "craftable_piece_released" ); +} + +player_take_piece( piecespawn ) +{ + piecestub = piecespawn.piecestub; + damage = piecespawn.damage; + + if ( !( isdefined( piecestub.is_shared ) && piecestub.is_shared ) && isdefined( self.current_craftable_piece ) ) + { + other_piece = self.current_craftable_piece; + self player_drop_piece( self.current_craftable_piece ); + other_piece.damage = damage; + self do_player_general_vox( "general", "craft_swap" ); + } + + if ( isdefined( piecestub.onpickup ) ) + piecespawn [[ piecestub.onpickup ]]( self ); + + if ( isdefined( piecestub.is_shared ) && piecestub.is_shared ) + { + if ( isdefined( piecestub.client_field_id ) ) + level setclientfield( piecestub.client_field_id, 1 ); + } + else if ( isdefined( piecestub.client_field_state ) ) + self setclientfieldtoplayer( "craftable", piecestub.client_field_state ); + + piecespawn piece_unspawn(); + piecespawn notify( "pickup" ); + + if ( isdefined( piecestub.is_shared ) && piecestub.is_shared ) + piecespawn.in_shared_inventory = 1; + else + { + self.current_craftable_piece = piecespawn; + self thread player_drop_piece_on_death(); + } + + self track_craftable_piece_pickedup( piecespawn ); +} + +player_destroy_piece( piece = self.current_craftable_piece ) +{ + if ( isdefined( piece ) ) + self setclientfieldtoplayer( "craftable", 0 ); + + self.current_craftable_piece = undefined; + self notify( "craftable_piece_released" ); +} + +claim_location( location ) +{ + if ( !isdefined( level.craftable_claimed_locations ) ) + level.craftable_claimed_locations = []; + + if ( !isdefined( level.craftable_claimed_locations[location] ) ) + { + level.craftable_claimed_locations[location] = 1; + return true; + } + + return false; +} + +is_point_in_craft_trigger( point ) +{ + candidate_list = []; + + foreach ( zone in level.zones ) + { + if ( isdefined( zone.unitrigger_stubs ) ) + candidate_list = arraycombine( candidate_list, zone.unitrigger_stubs, 1, 0 ); + } + + valid_range = 128; + closest = maps\mp\zombies\_zm_unitrigger::get_closest_unitriggers( point, candidate_list, valid_range ); + + for ( index = 0; index < closest.size; index++ ) + { + if ( isdefined( closest[index].registered ) && closest[index].registered && isdefined( closest[index].piece ) ) + return true; + } + + return false; +} + +piece_allocate_spawn( piecestub ) +{ + self.current_spawn = 0; + self.managed_spawn = 1; + self.piecestub = piecestub; + + if ( self.spawns.size >= 1 && self.spawns.size > 1 ) + { + any_good = 0; + any_okay = 0; + totalweight = 0; + spawnweights = []; + + for ( i = 0; i < self.spawns.size; i++ ) + { + if ( isdefined( piecestub.piece_allocated[i] ) && piecestub.piece_allocated[i] ) + spawnweights[i] = 0; + else if ( is_point_in_craft_trigger( self.spawns[i].origin ) ) + { + any_okay = 1; + spawnweights[i] = 0.01; + } + else + { + any_good = 1; + spawnweights[i] = 1.0; + } + + totalweight += spawnweights[i]; + } + + assert( any_good || any_okay, "There is nowhere to spawn this piece" ); + + if ( any_good ) + totalweight = float( int( totalweight ) ); + + r = randomfloat( totalweight ); + + for ( i = 0; i < self.spawns.size; i++ ) + { + if ( !any_good || spawnweights[i] >= 1.0 ) + { + r -= spawnweights[i]; + + if ( r < 0 ) + { + self.current_spawn = i; + piecestub.piece_allocated[self.current_spawn] = 1; + return; + } + } + } + + self.current_spawn = randomint( self.spawns.size ); + piecestub.piece_allocated[self.current_spawn] = 1; + } +} + +piece_deallocate_spawn() +{ + if ( isdefined( self.current_spawn ) ) + { + self.piecestub.piece_allocated[self.current_spawn] = 0; + self.current_spawn = undefined; + } + + self.start_origin = undefined; +} + +piece_pick_random_spawn() +{ + self.current_spawn = 0; + + if ( self.spawns.size >= 1 && self.spawns.size > 1 ) + { + for ( self.current_spawn = randomint( self.spawns.size ); isdefined( self.spawns[self.current_spawn].claim_location ) && !claim_location( self.spawns[self.current_spawn].claim_location ); self.current_spawn = randomint( self.spawns.size ) ) + { + arrayremoveindex( self.spawns, self.current_spawn ); + + if ( self.spawns.size < 1 ) + { + self.current_spawn = 0; +/# + println( "ERROR: All craftable spawn locations claimed" ); +#/ + return; + } + } + } +} + +piece_set_spawn( num ) +{ + self.current_spawn = 0; + + if ( self.spawns.size >= 1 && self.spawns.size > 1 ) + self.current_spawn = int( min( num, self.spawns.size - 1 ) ); +} + +piece_spawn_in( piecestub ) +{ + if ( self.spawns.size < 1 ) + return; + + if ( isdefined( self.managed_spawn ) && self.managed_spawn ) + { + if ( !isdefined( self.current_spawn ) ) + self piece_allocate_spawn( self.piecestub ); + } + + if ( !isdefined( self.current_spawn ) ) + self.current_spawn = 0; + + spawndef = self.spawns[self.current_spawn]; + self.unitrigger = generate_piece_unitrigger( "trigger_radius_use", spawndef.origin + vectorscale( ( 0, 0, 1 ), 12.0 ), spawndef.angles, 0, piecestub.radius, piecestub.height, 0 ); + self.unitrigger.piece = self; + self.radius = piecestub.radius; + self.height = piecestub.height; + self.craftablename = piecestub.craftablename; + self.piecename = piecestub.piecename; + self.modelname = piecestub.modelname; + self.hud_icon = piecestub.hud_icon; + self.tag_name = piecestub.tag_name; + self.drop_offset = piecestub.drop_offset; + self.start_origin = spawndef.origin; + self.start_angles = spawndef.angles; + self.client_field_state = piecestub.client_field_state; + self.is_shared = piecestub.is_shared; + self.model = spawn( "script_model", self.start_origin ); + + if ( isdefined( self.start_angles ) ) + self.model.angles = self.start_angles; + + self.model setmodel( piecestub.modelname ); + + if ( isdefined( piecestub.onspawn ) ) + self [[ piecestub.onspawn ]](); + + self.model ghostindemo(); + self.model.hud_icon = piecestub.hud_icon; + self.piecestub = piecestub; + self.unitrigger.origin_parent = self.model; +} + +piece_spawn_at( origin, angles, use_random_start ) +{ + if ( self.spawns.size < 1 ) + return; + + if ( isdefined( self.managed_spawn ) && self.managed_spawn ) + { + if ( !isdefined( self.current_spawn ) && !isdefined( origin ) ) + { + self piece_allocate_spawn( self.piecestub ); + spawndef = self.spawns[self.current_spawn]; + self.start_origin = spawndef.origin; + self.start_angles = spawndef.angles; + } + } + else if ( !isdefined( self.current_spawn ) ) + self.current_spawn = 0; + + unitrigger_offset = vectorscale( ( 0, 0, 1 ), 12.0 ); + + if ( isdefined( use_random_start ) && use_random_start ) + { + self piece_pick_random_spawn(); + spawndef = self.spawns[self.current_spawn]; + self.start_origin = spawndef.origin; + self.start_angles = spawndef.angles; + origin = spawndef.origin; + angles = spawndef.angles; + } + else + { + if ( !isdefined( origin ) ) + origin = self.start_origin; + else + { + origin += ( 0, 0, self.drop_offset ); + unitrigger_offset -= ( 0, 0, self.drop_offset ); + } + + if ( !isdefined( angles ) ) + angles = self.start_angles; +/# + if ( !isdefined( level.drop_offset ) ) + level.drop_offset = 0; + + origin += ( 0, 0, level.drop_offset ); + unitrigger_offset -= ( 0, 0, level.drop_offset ); +#/ + } + + self.model = spawn( "script_model", origin ); + + if ( isdefined( angles ) ) + self.model.angles = angles; + + self.model setmodel( self.modelname ); + + if ( isdefined( level.equipment_safe_to_drop ) ) + { + if ( ![[ level.equipment_safe_to_drop ]]( self.model ) ) + { + origin = self.start_origin; + angles = self.start_angles; + self.model.origin = origin; + self.model.angles = angles; + } + } + + if ( isdefined( self.onspawn ) ) + self [[ self.onspawn ]](); + + self.unitrigger = generate_piece_unitrigger( "trigger_radius_use", origin + unitrigger_offset, angles, 0, self.radius, self.height, isdefined( self.model.canmove ) && self.model.canmove ); + self.unitrigger.piece = self; + self.model.hud_icon = self.hud_icon; + self.unitrigger.origin_parent = self.model; +} + +piece_unspawn() +{ + if ( isdefined( self.managed_spawn ) && self.managed_spawn ) + self piece_deallocate_spawn(); + + if ( isdefined( self.model ) ) + self.model delete(); + + self.model = undefined; + + if ( isdefined( self.unitrigger ) ) + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger ); + + self.unitrigger = undefined; +} + +piece_hide() +{ + if ( isdefined( self.model ) ) + self.model ghost(); +} + +piece_show() +{ + if ( isdefined( self.model ) ) + self.model show(); +} + +generate_piece( piecestub ) +{ + piecespawn = spawnstruct(); + piecespawn.spawns = piecestub.spawns; + + if ( isdefined( piecestub.managing_pieces ) && piecestub.managing_pieces ) + piecespawn piece_allocate_spawn( piecestub ); + else if ( isdefined( piecestub.use_spawn_num ) ) + piecespawn piece_set_spawn( piecestub.use_spawn_num ); + else + piecespawn piece_pick_random_spawn(); + + piecespawn piece_spawn_in( piecestub ); + + if ( piecespawn.spawns.size >= 1 ) + piecespawn.hud_icon = piecestub.hud_icon; + + if ( isdefined( piecestub.onpickup ) ) + piecespawn.onpickup = piecestub.onpickup; + else + piecespawn.onpickup = ::onpickuputs; + + if ( isdefined( piecestub.ondrop ) ) + piecespawn.ondrop = piecestub.ondrop; + else + piecespawn.ondrop = ::ondroputs; + + if ( isdefined( piecestub.oncrafted ) ) + piecespawn.oncrafted = piecestub.oncrafted; + + return piecespawn; +} + +craftable_piece_unitriggers( craftable_name, origin ) +{ + assert( isdefined( craftable_name ) ); + assert( isdefined( level.zombie_craftablestubs[craftable_name] ), "Called craftable_think() without including the craftable - " + craftable_name ); + craftable = level.zombie_craftablestubs[craftable_name]; + + if ( !isdefined( craftable.a_piecestubs ) ) + craftable.a_piecestubs = []; + + flag_wait( "start_zombie_round_logic" ); + craftablespawn = spawnstruct(); + craftablespawn.craftable_name = craftable_name; + + if ( !isdefined( craftablespawn.a_piecespawns ) ) + craftablespawn.a_piecespawns = []; + + craftablepickups = []; + + foreach ( piecestub in craftable.a_piecestubs ) + { + if ( !isdefined( piecestub.generated_instances ) ) + piecestub.generated_instances = 0; + + if ( isdefined( piecestub.piecespawn ) && ( isdefined( piecestub.can_reuse ) && piecestub.can_reuse ) ) + piece = piecestub.piecespawn; + else if ( piecestub.generated_instances >= piecestub.max_instances ) + piece = piecestub.piecespawn; + else + { + piece = generate_piece( piecestub ); + piecestub.piecespawn = piece; + piecestub.generated_instances++; + } + + craftablespawn.a_piecespawns[craftablespawn.a_piecespawns.size] = piece; + } + + craftablespawn.stub = self; + return craftablespawn; +} + +hide_craftable_table_model( trigger_targetname ) +{ + trig = getent( trigger_targetname, "targetname" ); + + if ( !isdefined( trig ) ) + return; + + if ( isdefined( trig.target ) ) + { + model = getent( trig.target, "targetname" ); + + if ( isdefined( model ) ) + { + model ghost(); + model notsolid(); + } + } +} + +setup_unitrigger_craftable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + trig = getent( trigger_targetname, "targetname" ); + + if ( !isdefined( trig ) ) + return; + + return setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); +} + +setup_unitrigger_craftable_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + triggers = getentarray( trigger_targetname, "targetname" ); + stubs = []; + + foreach ( trig in triggers ) + stubs[stubs.size] = setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); + + return stubs; +} + +setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + if ( !isdefined( trig ) ) + return; + + unitrigger_stub = spawnstruct(); + unitrigger_stub.craftablestub = level.zombie_include_craftables[equipname]; + angles = trig.script_angles; + + if ( !isdefined( angles ) ) + angles = ( 0, 0, 0 ); + + unitrigger_stub.origin = trig.origin + anglestoright( angles ) * -6; + unitrigger_stub.angles = trig.angles; + + if ( isdefined( trig.script_angles ) ) + unitrigger_stub.angles = trig.script_angles; + + unitrigger_stub.equipname = equipname; + unitrigger_stub.weaponname = weaponname; + unitrigger_stub.trigger_hintstring = trigger_hintstring; + unitrigger_stub.delete_trigger = delete_trigger; + unitrigger_stub.crafted = 0; + unitrigger_stub.persistent = persistent; + unitrigger_stub.usetime = int( 3000 ); + unitrigger_stub.onbeginuse = ::onbeginuseuts; + unitrigger_stub.onenduse = ::onenduseuts; + unitrigger_stub.onuse = ::onuseplantobjectuts; + unitrigger_stub.oncantuse = ::oncantuseuts; + + if ( isdefined( trig.script_length ) ) + unitrigger_stub.script_length = trig.script_length; + else + unitrigger_stub.script_length = 32; + + if ( isdefined( trig.script_width ) ) + unitrigger_stub.script_width = trig.script_width; + else + unitrigger_stub.script_width = 100; + + if ( isdefined( trig.script_height ) ) + unitrigger_stub.script_height = trig.script_height; + else + unitrigger_stub.script_height = 64; + + unitrigger_stub.target = trig.target; + unitrigger_stub.targetname = trig.targetname; + unitrigger_stub.script_noteworthy = trig.script_noteworthy; + unitrigger_stub.script_parameters = trig.script_parameters; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + + if ( isdefined( level.zombie_craftablestubs[equipname].str_to_craft ) ) + unitrigger_stub.hint_string = level.zombie_craftablestubs[equipname].str_to_craft; + + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.require_look_at = 1; + unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + + if ( isdefined( unitrigger_stub.craftablestub.custom_craftablestub_update_prompt ) ) + unitrigger_stub.custom_craftablestub_update_prompt = unitrigger_stub.craftablestub.custom_craftablestub_update_prompt; + + unitrigger_stub.prompt_and_visibility_func = ::craftabletrigger_update_prompt; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::craftable_place_think ); + unitrigger_stub.piece_trigger = trig; + trig.trigger_stub = unitrigger_stub; + unitrigger_stub.zombie_weapon_upgrade = trig.zombie_weapon_upgrade; + + if ( isdefined( unitrigger_stub.target ) ) + { + unitrigger_stub.model = getent( unitrigger_stub.target, "targetname" ); + + if ( isdefined( unitrigger_stub.model ) ) + { + if ( isdefined( unitrigger_stub.zombie_weapon_upgrade ) ) + unitrigger_stub.model useweaponhidetags( unitrigger_stub.zombie_weapon_upgrade ); + + unitrigger_stub.model ghost(); + unitrigger_stub.model notsolid(); + } + } + + if ( unitrigger_stub.equipname == "open_table" ) + { + unitrigger_stub.a_uts_open_craftables_available = []; + unitrigger_stub.n_open_craftable_choice = -1; + unitrigger_stub.b_open_craftable_checking_input = 0; + } + + unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( equipname, unitrigger_stub.origin ); + + if ( delete_trigger ) + trig delete(); + + level.a_uts_craftables[level.a_uts_craftables.size] = unitrigger_stub; + return unitrigger_stub; +} + +setup_craftable_pieces() +{ + unitrigger_stub = spawnstruct(); + unitrigger_stub.craftablestub = level.zombie_include_craftables[self.name]; + unitrigger_stub.equipname = self.name; + unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( self.name, unitrigger_stub.origin ); + level.a_uts_craftables[level.a_uts_craftables.size] = unitrigger_stub; + return unitrigger_stub; +} + +craftable_has_piece( piece ) +{ + for ( i = 0; i < self.a_piecespawns.size; i++ ) + { + if ( self.a_piecespawns[i].piecename == piece.piecename && self.a_piecespawns[i].craftablename == piece.craftablename ) + return true; + } + + return false; +} + +get_actual_uts_craftable() +{ + if ( self.craftable_name == "open_table" && self.n_open_craftable_choice != -1 ) + return self.stub.a_uts_open_craftables_available[self.n_open_craftable_choice]; + else + return self.stub; +} + +get_actual_craftablespawn() +{ + if ( self.craftable_name == "open_table" && self.stub.n_open_craftable_choice != -1 && isdefined( self.stub.a_uts_open_craftables_available[self.stub.n_open_craftable_choice].craftablespawn ) ) + return self.stub.a_uts_open_craftables_available[self.stub.n_open_craftable_choice].craftablespawn; + else + return self; +} + +craftable_can_use_shared_piece() +{ + uts_craftable = self.stub; + + if ( isdefined( uts_craftable.n_open_craftable_choice ) && uts_craftable.n_open_craftable_choice != -1 && isdefined( uts_craftable.a_uts_open_craftables_available[uts_craftable.n_open_craftable_choice] ) ) + return true; + + if ( isdefined( uts_craftable.craftablestub.need_all_pieces ) && uts_craftable.craftablestub.need_all_pieces ) + { + foreach ( piece in self.a_piecespawns ) + { + if ( !( isdefined( piece.in_shared_inventory ) && piece.in_shared_inventory ) ) + return false; + } + + return true; + } + else + { + foreach ( piece in self.a_piecespawns ) + { + if ( !( isdefined( piece.crafted ) && piece.crafted ) && ( isdefined( piece.in_shared_inventory ) && piece.in_shared_inventory ) ) + return true; + } + } + + return false; +} + +craftable_set_piece_crafted( piecespawn_check, player ) +{ + craftablespawn_check = get_actual_craftablespawn(); + + foreach ( piecespawn in craftablespawn_check.a_piecespawns ) + { + if ( isdefined( piecespawn_check ) ) + { + if ( piecespawn.piecename == piecespawn_check.piecename && piecespawn.craftablename == piecespawn_check.craftablename ) + { + piecespawn.crafted = 1; + + if ( isdefined( piecespawn.oncrafted ) ) + piecespawn thread [[ piecespawn.oncrafted ]]( player ); + + continue; + } + } + + if ( isdefined( piecespawn.is_shared ) && piecespawn.is_shared && ( isdefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) ) + { + piecespawn.crafted = 1; + + if ( isdefined( piecespawn.oncrafted ) ) + piecespawn thread [[ piecespawn.oncrafted ]]( player ); + + piecespawn.in_shared_inventory = 0; + } + } +} + +craftable_set_piece_crafting( piecespawn_check ) +{ + craftablespawn_check = get_actual_craftablespawn(); + + foreach ( piecespawn in craftablespawn_check.a_piecespawns ) + { + if ( isdefined( piecespawn_check ) ) + { + if ( piecespawn.piecename == piecespawn_check.piecename && piecespawn.craftablename == piecespawn_check.craftablename ) + piecespawn.crafting = 1; + } + + if ( isdefined( piecespawn.is_shared ) && piecespawn.is_shared && ( isdefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) ) + piecespawn.crafting = 1; + } +} + +craftable_clear_piece_crafting( piecespawn_check ) +{ + if ( isdefined( piecespawn_check ) ) + piecespawn_check.crafting = 0; + + craftablespawn_check = get_actual_craftablespawn(); + + foreach ( piecespawn in craftablespawn_check.a_piecespawns ) + { + if ( isdefined( piecespawn.is_shared ) && piecespawn.is_shared && ( isdefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) ) + piecespawn.crafting = 0; + } +} + +craftable_is_piece_crafted( piece ) +{ + for ( i = 0; i < self.a_piecespawns.size; i++ ) + { + if ( self.a_piecespawns[i].piecename == piece.piecename && self.a_piecespawns[i].craftablename == piece.craftablename ) + return isdefined( self.a_piecespawns[i].crafted ) && self.a_piecespawns[i].crafted; + } + + return 0; +} + +craftable_is_piece_crafting( piecespawn_check ) +{ + craftablespawn_check = get_actual_craftablespawn(); + + foreach ( piecespawn in craftablespawn_check.a_piecespawns ) + { + if ( isdefined( piecespawn_check ) ) + { + if ( piecespawn.piecename == piecespawn_check.piecename && piecespawn.craftablename == piecespawn_check.craftablename ) + return piecespawn.crafting; + } + + if ( isdefined( piecespawn.is_shared ) && piecespawn.is_shared && ( isdefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) && ( isdefined( piecespawn.crafting ) && piecespawn.crafting ) ) + return 1; + } + + return 0; +} + +craftable_is_piece_crafted_or_crafting( piece ) +{ + for ( i = 0; i < self.a_piecespawns.size; i++ ) + { + if ( self.a_piecespawns[i].piecename == piece.piecename && self.a_piecespawns[i].craftablename == piece.craftablename ) + return isdefined( self.a_piecespawns[i].crafted ) && self.a_piecespawns[i].crafted || isdefined( self.a_piecespawns[i].crafting ) && self.a_piecespawns[i].crafting; + } + + return 0; +} + +craftable_all_crafted() +{ + for ( i = 0; i < self.a_piecespawns.size; i++ ) + { + if ( !( isdefined( self.a_piecespawns[i].crafted ) && self.a_piecespawns[i].crafted ) ) + return false; + } + + return true; +} + +waittill_crafted( craftable_name ) +{ + level waittill( craftable_name + "_crafted", player ); + + return player; +} + +player_can_craft( craftablespawn, continuing ) +{ + if ( !isdefined( craftablespawn ) ) + return false; + + if ( !craftablespawn craftable_can_use_shared_piece() ) + { + if ( !isdefined( self.current_craftable_piece ) ) + return false; + + if ( !craftablespawn craftable_has_piece( self.current_craftable_piece ) ) + return false; + + if ( isdefined( continuing ) && continuing ) + { + if ( craftablespawn craftable_is_piece_crafted( self.current_craftable_piece ) ) + return false; + } + else if ( craftablespawn craftable_is_piece_crafted_or_crafting( self.current_craftable_piece ) ) + return false; + } + + if ( isdefined( craftablespawn.stub ) && isdefined( craftablespawn.stub.custom_craftablestub_update_prompt ) && isdefined( craftablespawn.stub.playertrigger[0] ) && isdefined( craftablespawn.stub.playertrigger[0].stub ) && !craftablespawn.stub.playertrigger[0].stub [[ craftablespawn.stub.custom_craftablestub_update_prompt ]]( self, 1, craftablespawn.stub.playertrigger[self getentitynumber()] ) ) + return false; + + return true; +} + +craftable_transfer_data() +{ + uts_craftable = self.stub; + + if ( uts_craftable.n_open_craftable_choice == -1 || !isdefined( uts_craftable.a_uts_open_craftables_available[uts_craftable.n_open_craftable_choice] ) ) + return; + + uts_source = uts_craftable.a_uts_open_craftables_available[uts_craftable.n_open_craftable_choice]; + uts_target = uts_craftable; + uts_target.craftablestub = uts_source.craftablestub; + uts_target.craftablespawn = uts_source.craftablespawn; + uts_target.crafted = uts_source.crafted; + uts_target.cursor_hint = uts_source.cursor_hint; + uts_target.custom_craftable_update_prompt = uts_source.custom_craftable_update_prompt; + uts_target.equipname = uts_source.equipname; + uts_target.hint_string = uts_source.hint_string; + uts_target.persistent = uts_source.persistent; + uts_target.prompt_and_visibility_func = uts_source.prompt_and_visibility_func; + uts_target.trigger_func = uts_source.trigger_func; + uts_target.trigger_hintstring = uts_source.trigger_hintstring; + uts_target.weaponname = uts_source.weaponname; + uts_target.craftablespawn.stub = uts_target; + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( uts_source ); + uts_source craftablestub_remove(); + return uts_target; +} + +player_craft( craftablespawn ) +{ + craftablespawn craftable_set_piece_crafted( self.current_craftable_piece, self ); + + if ( isdefined( self.current_craftable_piece ) && ( isdefined( self.current_craftable_piece.crafted ) && self.current_craftable_piece.crafted ) ) + player_destroy_piece( self.current_craftable_piece ); + + if ( isdefined( craftablespawn.stub.n_open_craftable_choice ) ) + { + uts_craftable = craftablespawn craftable_transfer_data(); + craftablespawn = uts_craftable.craftablespawn; + update_open_table_status(); + } + else + uts_craftable = craftablespawn.stub; + + if ( !isdefined( uts_craftable.model ) && isdefined( uts_craftable.craftablestub.str_model ) ) + { + craftablestub = uts_craftable.craftablestub; + s_model = getstruct( uts_craftable.target, "targetname" ); + + if ( isdefined( s_model ) ) + { + m_spawn = spawn( "script_model", s_model.origin ); + + if ( isdefined( craftablestub.v_origin_offset ) ) + m_spawn.origin += craftablestub.v_origin_offset; + + m_spawn.angles = s_model.angles; + + if ( isdefined( craftablestub.v_angle_offset ) ) + m_spawn.angles += craftablestub.v_angle_offset; + + m_spawn setmodel( craftablestub.str_model ); + uts_craftable.model = m_spawn; + } + } + + if ( isdefined( uts_craftable.model ) ) + { + for ( i = 0; i < craftablespawn.a_piecespawns.size; i++ ) + { + if ( isdefined( craftablespawn.a_piecespawns[i].tag_name ) ) + { + uts_craftable.model notsolid(); + + if ( !( isdefined( craftablespawn.a_piecespawns[i].crafted ) && craftablespawn.a_piecespawns[i].crafted ) ) + { + uts_craftable.model hidepart( craftablespawn.a_piecespawns[i].tag_name ); + continue; + } + + uts_craftable.model show(); + uts_craftable.model showpart( craftablespawn.a_piecespawns[i].tag_name ); + } + } + } + + self track_craftable_pieces_crafted( craftablespawn ); + + if ( craftablespawn craftable_all_crafted() ) + { + self player_finish_craftable( craftablespawn ); + self track_craftables_crafted( craftablespawn ); + + if ( isdefined( level.craftable_crafted_custom_func ) ) + self thread [[ level.craftable_crafted_custom_func ]]( craftablespawn ); + + self playsound( "zmb_buildable_complete" ); + } + else + { + self playsound( "zmb_buildable_piece_add" ); + assert( isdefined( level.zombie_craftablestubs[craftablespawn.craftable_name].str_crafting ), "Missing builing hint" ); + + if ( isdefined( level.zombie_craftablestubs[craftablespawn.craftable_name].str_crafting ) ) + return level.zombie_craftablestubs[craftablespawn.craftable_name].str_crafting; + } + + return ""; +} + +update_open_table_status() +{ + b_open_craftables_remaining = 0; + + foreach ( uts_craftable in level.a_uts_craftables ) + { + if ( isdefined( level.zombie_include_craftables[uts_craftable.equipname] ) && ( isdefined( level.zombie_include_craftables[uts_craftable.equipname].is_open_table ) && level.zombie_include_craftables[uts_craftable.equipname].is_open_table ) ) + { + b_piece_crafted = 0; + + foreach ( piecespawn in uts_craftable.craftablespawn.a_piecespawns ) + { + if ( isdefined( piecespawn.crafted ) && piecespawn.crafted ) + { + b_piece_crafted = 1; + break; + } + } + + if ( !b_piece_crafted ) + b_open_craftables_remaining = 1; + } + } + + if ( !b_open_craftables_remaining ) + { + foreach ( uts_craftable in level.a_uts_craftables ) + { + if ( uts_craftable.equipname == "open_table" ) + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( uts_craftable ); + } + } +} + +player_finish_craftable( craftablespawn ) +{ + craftablespawn.crafted = 1; + craftablespawn.stub.crafted = 1; + craftablespawn notify( "crafted", self ); + level.craftables_crafted[craftablespawn.craftable_name] = 1; + level notify( craftablespawn.craftable_name + "_crafted", self ); +} + +complete_craftable( str_craftable_name ) +{ + foreach ( uts_craftable in level.a_uts_craftables ) + { + if ( uts_craftable.craftablestub.name == str_craftable_name ) + { + player = getplayers()[0]; + player player_finish_craftable( uts_craftable.craftablespawn ); + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( uts_craftable ); + + if ( isdefined( uts_craftable.craftablestub.onfullycrafted ) ) + uts_craftable [[ uts_craftable.craftablestub.onfullycrafted ]](); + + return; + } + } +} + +craftablestub_remove() +{ + arrayremovevalue( level.a_uts_craftables, self ); +} + +craftabletrigger_update_prompt( player ) +{ + can_use = self.stub craftablestub_update_prompt( player ); + self sethintstring( self.stub.hint_string ); + return can_use; +} + +craftablestub_update_prompt( player, unitrigger ) +{ + if ( !self anystub_update_prompt( player ) ) + return false; + + if ( isdefined( self.is_locked ) && self.is_locked ) + return true; + + can_use = 1; + + if ( isdefined( self.custom_craftablestub_update_prompt ) && !self [[ self.custom_craftablestub_update_prompt ]]( player ) ) + return false; + + if ( !( isdefined( self.crafted ) && self.crafted ) ) + { + if ( !self.craftablespawn craftable_can_use_shared_piece() ) + { + if ( !isdefined( player.current_craftable_piece ) ) + { + self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE"; + return false; + } + else if ( !self.craftablespawn craftable_has_piece( player.current_craftable_piece ) ) + { + self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG"; + return false; + } + } + + assert( isdefined( level.zombie_craftablestubs[self.equipname].str_to_craft ), "Missing craftable hint" ); + self.hint_string = level.zombie_craftablestubs[self.equipname].str_to_craft; + } + else if ( self.persistent == 1 ) + { + if ( maps\mp\zombies\_zm_equipment::is_limited_equipment( self.weaponname ) && maps\mp\zombies\_zm_equipment::limited_equipment_in_use( self.weaponname ) ) + { + self.hint_string = &"ZOMBIE_BUILD_PIECE_ONLY_ONE"; + return false; + } + + if ( player has_player_equipment( self.weaponname ) ) + { + self.hint_string = &"ZOMBIE_BUILD_PIECE_HAVE_ONE"; + return false; + } + + self.hint_string = self.trigger_hintstring; + } + else if ( self.persistent == 2 ) + { + if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.weaponname, undefined ) ) + { + self.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; + return false; + } + else if ( isdefined( self.str_taken ) && self.str_taken ) + { + self.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; + return false; + } + + self.hint_string = self.trigger_hintstring; + } + else + { + self.hint_string = ""; + return false; + } + + return true; +} + +choose_open_craftable( player ) +{ + self endon( "kill_choose_open_craftable" ); + n_playernum = player getentitynumber(); + self.b_open_craftable_checking_input = 1; + b_got_input = 1; + hinttexthudelem = newclienthudelem( player ); + hinttexthudelem.alignx = "center"; + hinttexthudelem.aligny = "middle"; + hinttexthudelem.horzalign = "center"; + hinttexthudelem.vertalign = "bottom"; + hinttexthudelem.y = -100; + + if ( player issplitscreen() ) + hinttexthudelem.y = -50; + + hinttexthudelem.foreground = 1; + hinttexthudelem.font = "default"; + hinttexthudelem.fontscale = 1.0; + hinttexthudelem.alpha = 1; + hinttexthudelem.color = ( 1, 1, 1 ); + hinttexthudelem settext( &"ZM_CRAFTABLES_CHANGE_BUILD" ); + + if ( !isdefined( self.opencraftablehudelem ) ) + self.opencraftablehudelem = []; + + self.opencraftablehudelem[n_playernum] = hinttexthudelem; + + while ( isdefined( self.playertrigger[n_playernum] ) && !self.crafted ) + { + if ( player actionslotonebuttonpressed() ) + { + self.n_open_craftable_choice++; + b_got_input = 1; + } + else if ( player actionslottwobuttonpressed() ) + { + self.n_open_craftable_choice--; + b_got_input = 1; + } + + if ( self.n_open_craftable_choice >= self.a_uts_open_craftables_available.size ) + self.n_open_craftable_choice = 0; + else if ( self.n_open_craftable_choice < 0 ) + self.n_open_craftable_choice = self.a_uts_open_craftables_available.size - 1; + + if ( b_got_input ) + { + self.equipname = self.a_uts_open_craftables_available[self.n_open_craftable_choice].equipname; + self.hint_string = self.a_uts_open_craftables_available[self.n_open_craftable_choice].hint_string; + self.playertrigger[n_playernum] sethintstring( self.hint_string ); + b_got_input = 0; + } + + if ( player is_player_looking_at( self.playertrigger[n_playernum].origin, 0.76 ) ) + self.opencraftablehudelem[n_playernum].alpha = 1; + else + self.opencraftablehudelem[n_playernum].alpha = 0; + + wait 0.05; + } + + self.b_open_craftable_checking_input = 0; + self.opencraftablehudelem[n_playernum] destroy(); + self.opencraftablehudelem[n_playernum] = undefined; +} + +open_craftablestub_update_prompt( player ) +{ + if ( !( isdefined( self.crafted ) && self.crafted ) ) + { + self.a_uts_open_craftables_available = []; + + foreach ( uts_craftable in level.a_uts_craftables ) + { + if ( isdefined( uts_craftable.craftablestub.is_open_table ) && uts_craftable.craftablestub.is_open_table && !( isdefined( uts_craftable.crafted ) && uts_craftable.crafted ) && uts_craftable.craftablespawn.craftable_name != "open_table" && uts_craftable.craftablespawn craftable_can_use_shared_piece() ) + self.a_uts_open_craftables_available[self.a_uts_open_craftables_available.size] = uts_craftable; + } + + if ( self.a_uts_open_craftables_available.size < 2 ) + { + self notify( "kill_choose_open_craftable" ); + self.b_open_craftable_checking_input = 0; + n_entitynum = player getentitynumber(); + + if ( isdefined( self.opencraftablehudelem ) && isdefined( self.opencraftablehudelem[n_entitynum] ) ) + { + self.opencraftablehudelem[n_entitynum] destroy(); + self.opencraftablehudelem[n_entitynum] = undefined; + } + } + + switch ( self.a_uts_open_craftables_available.size ) + { + case 0: + if ( !isdefined( player.current_craftable_piece ) ) + { + self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE"; + self.n_open_craftable_choice = -1; + return false; + } + + break; + case 1: + self.n_open_craftable_choice = 0; + self.equipname = self.a_uts_open_craftables_available[self.n_open_craftable_choice].equipname; + return true; + default: + if ( !self.b_open_craftable_checking_input ) + thread choose_open_craftable( player ); + + return true; + } + } + else if ( self.persistent == 1 || self.persistent == 2 && !( isdefined( self.bought ) && self.bought ) ) + return true; + + return false; +} + +player_continue_crafting( craftablespawn ) +{ + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || self in_revive_trigger() ) + return false; + + if ( !self player_can_craft( craftablespawn, 1 ) ) + return false; + + if ( isdefined( self.screecher ) ) + return false; + + if ( !self usebuttonpressed() ) + return false; + + if ( !craftablespawn craftable_is_piece_crafting( self.current_craftable_piece ) ) + return false; + + trigger = craftablespawn.stub maps\mp\zombies\_zm_unitrigger::unitrigger_trigger( self ); + + if ( craftablespawn.stub.script_unitrigger_type == "unitrigger_radius_use" ) + { + torigin = craftablespawn.stub unitrigger_origin(); + porigin = self geteye(); + radius_sq = 2.25 * craftablespawn.stub.radius * craftablespawn.stub.radius; + + if ( distance2dsquared( torigin, porigin ) > radius_sq ) + return false; + } + else if ( !isdefined( trigger ) || !trigger istouching( self ) ) + return false; + + if ( isdefined( craftablespawn.stub.require_look_at ) && craftablespawn.stub.require_look_at && !self is_player_looking_at( trigger.origin, 0.76 ) ) + return false; + + return true; +} + +player_progress_bar_update( start_time, craft_time ) +{ + self endon( "entering_last_stand" ); + self endon( "death" ); + self endon( "disconnect" ); + self endon( "craftable_progress_end" ); + + while ( isdefined( self ) && gettime() - start_time < craft_time ) + { + progress = ( gettime() - start_time ) / craft_time; + + if ( progress < 0 ) + progress = 0; + + if ( progress > 1 ) + progress = 1; + + self.usebar updatebar( progress ); + wait 0.05; + } +} + +player_progress_bar( start_time, craft_time ) +{ + self.usebar = self createprimaryprogressbar(); + self.usebartext = self createprimaryprogressbartext(); + self.usebartext settext( &"ZOMBIE_BUILDING" ); + + if ( isdefined( self ) && isdefined( start_time ) && isdefined( craft_time ) ) + self player_progress_bar_update( start_time, craft_time ); + + self.usebartext destroyelem(); + self.usebar destroyelem(); +} + +craftable_use_hold_think_internal( player ) +{ + wait 0.01; + + if ( !isdefined( self ) ) + { + self notify( "craft_failed" ); + + if ( isdefined( player.craftableaudio ) ) + { + player.craftableaudio delete(); + player.craftableaudio = undefined; + } + + return; + } + + if ( !isdefined( self.usetime ) ) + self.usetime = int( 3000 ); + + self.craft_time = self.usetime; + self.craft_start_time = gettime(); + craft_time = self.craft_time; + craft_start_time = self.craft_start_time; + player disable_player_move_states( 1 ); + player increment_is_drinking(); + orgweapon = player getcurrentweapon(); + player giveweapon( "zombie_builder_zm" ); + player switchtoweapon( "zombie_builder_zm" ); + self.stub.craftablespawn craftable_set_piece_crafting( player.current_craftable_piece ); + player thread player_progress_bar( craft_start_time, craft_time ); + + if ( isdefined( level.craftable_craft_custom_func ) ) + player thread [[ level.craftable_craft_custom_func ]]( self.stub ); + + while ( isdefined( self ) && player player_continue_crafting( self.stub.craftablespawn ) && gettime() - self.craft_start_time < self.craft_time ) + wait 0.05; + + player notify( "craftable_progress_end" ); + player maps\mp\zombies\_zm_weapons::switch_back_primary_weapon( orgweapon ); + player takeweapon( "zombie_builder_zm" ); + + if ( isdefined( player.is_drinking ) && player.is_drinking ) + player decrement_is_drinking(); + + player enable_player_move_states(); + + if ( isdefined( self ) && player player_continue_crafting( self.stub.craftablespawn ) && gettime() - self.craft_start_time >= self.craft_time ) + { + self.stub.craftablespawn craftable_clear_piece_crafting( player.current_craftable_piece ); + self notify( "craft_succeed" ); + } + else + { + if ( isdefined( player.craftableaudio ) ) + { + player.craftableaudio delete(); + player.craftableaudio = undefined; + } + + self.stub.craftablespawn craftable_clear_piece_crafting( player.current_craftable_piece ); + self notify( "craft_failed" ); + } +} + +craftable_play_craft_fx( player ) +{ + self endon( "kill_trigger" ); + self endon( "craft_succeed" ); + self endon( "craft_failed" ); + + while ( true ) + { + playfx( level._effect["building_dust"], player getplayercamerapos(), player.angles ); + wait 0.5; + } +} + +craftable_use_hold_think( player ) +{ + self thread craftable_play_craft_fx( player ); + self thread craftable_use_hold_think_internal( player ); + retval = self waittill_any_return( "craft_succeed", "craft_failed" ); + + if ( retval == "craft_succeed" ) + return true; + + return false; +} + +craftable_place_think() +{ + self endon( "kill_trigger" ); + player_crafted = undefined; + + while ( !( isdefined( self.stub.crafted ) && self.stub.crafted ) ) + { + self waittill( "trigger", player ); + + if ( isdefined( level.custom_craftable_validation ) ) + { + valid = self [[ level.custom_craftable_validation ]]( player ); + + if ( !valid ) + continue; + } + + if ( player != self.parent_player ) + continue; + + if ( isdefined( player.screecher_weapon ) ) + continue; + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + status = player player_can_craft( self.stub.craftablespawn ); + + if ( !status ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + + if ( isdefined( self.stub.oncantuse ) ) + self.stub [[ self.stub.oncantuse ]]( player ); + } + else + { + if ( isdefined( self.stub.onbeginuse ) ) + self.stub [[ self.stub.onbeginuse ]]( player ); + + result = self craftable_use_hold_think( player ); + team = player.pers["team"]; + + if ( isdefined( self.stub.onenduse ) ) + self.stub [[ self.stub.onenduse ]]( team, player, result ); + + if ( !result ) + continue; + + if ( isdefined( self.stub.onuse ) ) + self.stub [[ self.stub.onuse ]]( player ); + + prompt = player player_craft( self.stub.craftablespawn ); + player_crafted = player; + self.stub.hint_string = prompt; + self sethintstring( self.stub.hint_string ); + } + } + + if ( isdefined( self.stub.craftablestub.onfullycrafted ) ) + { + b_result = self.stub [[ self.stub.craftablestub.onfullycrafted ]](); + + if ( !b_result ) + return; + } + + if ( isdefined( player_crafted ) ) + { + + } + + if ( self.stub.persistent == 0 ) + { + self.stub craftablestub_remove(); + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub ); + return; + } + + if ( self.stub.persistent == 3 ) + { + stub_uncraft_craftable( self.stub, 1 ); + return; + } + + if ( self.stub.persistent == 2 ) + { + if ( isdefined( player_crafted ) ) + self craftabletrigger_update_prompt( player_crafted ); + + if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) + { + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; + self sethintstring( self.stub.hint_string ); + return; + } + + if ( isdefined( self.stub.str_taken ) && self.stub.str_taken ) + { + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; + self sethintstring( self.stub.hint_string ); + return; + } + + if ( isdefined( self.stub.model ) ) + { + self.stub.model notsolid(); + self.stub.model show(); + } + + while ( self.stub.persistent == 2 ) + { + self waittill( "trigger", player ); + + if ( isdefined( player.screecher_weapon ) ) + continue; + + if ( isdefined( level.custom_craftable_validation ) ) + { + valid = self [[ level.custom_craftable_validation ]]( player ); + + if ( !valid ) + continue; + } + + if ( !( isdefined( self.stub.crafted ) && self.stub.crafted ) ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + return; + } + + if ( player != self.parent_player ) + continue; + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + self.stub.bought = 1; + + if ( isdefined( self.stub.model ) ) + self.stub.model thread model_fly_away( self ); + + player maps\mp\zombies\_zm_weapons::weapon_give( self.stub.weaponname ); + + if ( isdefined( level.zombie_include_craftables[self.stub.equipname].onbuyweapon ) ) + self [[ level.zombie_include_craftables[self.stub.equipname].onbuyweapon ]]( player ); + + if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; + else + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; + + self sethintstring( self.stub.hint_string ); + player track_craftables_pickedup( self.stub.craftablespawn ); + } + } + else if ( !isdefined( player_crafted ) || self craftabletrigger_update_prompt( player_crafted ) ) + { + if ( isdefined( self.stub.model ) ) + { + self.stub.model notsolid(); + self.stub.model show(); + } + + while ( self.stub.persistent == 1 ) + { + self waittill( "trigger", player ); + + if ( isdefined( player.screecher_weapon ) ) + continue; + + if ( isdefined( level.custom_craftable_validation ) ) + { + valid = self [[ level.custom_craftable_validation ]]( player ); + + if ( !valid ) + continue; + } + + if ( !( isdefined( self.stub.crafted ) && self.stub.crafted ) ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + return; + } + + if ( player != self.parent_player ) + continue; + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + if ( player has_player_equipment( self.stub.weaponname ) ) + continue; + + if ( isdefined( level.zombie_craftable_persistent_weapon ) ) + { + if ( self [[ level.zombie_craftable_persistent_weapon ]]( player ) ) + continue; + } + + if ( isdefined( level.zombie_custom_equipment_setup ) ) + { + if ( self [[ level.zombie_custom_equipment_setup ]]( player ) ) + continue; + } + + if ( !maps\mp\zombies\_zm_equipment::is_limited_equipment( self.stub.weaponname ) || !maps\mp\zombies\_zm_equipment::limited_equipment_in_use( self.stub.weaponname ) ) + { + player maps\mp\zombies\_zm_equipment::equipment_buy( self.stub.weaponname ); + player giveweapon( self.stub.weaponname ); + player setweaponammoclip( self.stub.weaponname, 1 ); + + if ( isdefined( level.zombie_include_craftables[self.stub.equipname].onbuyweapon ) ) + self [[ level.zombie_include_craftables[self.stub.equipname].onbuyweapon ]]( player ); + else if ( self.stub.weaponname != "keys_zm" ) + player setactionslot( 1, "weapon", self.stub.weaponname ); + + if ( isdefined( level.zombie_craftablestubs[self.stub.equipname].str_taken ) ) + self.stub.hint_string = level.zombie_craftablestubs[self.stub.equipname].str_taken; + else + self.stub.hint_string = ""; + + self sethintstring( self.stub.hint_string ); + player track_craftables_pickedup( self.stub.craftablespawn ); + } + else + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + } + } + } +} + +model_fly_away( unitrigger ) +{ + self moveto( self.origin + vectorscale( ( 0, 0, 1 ), 40.0 ), 3 ); + direction = self.origin; + direction = ( direction[1], direction[0], 0 ); + + if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 ) + direction = ( direction[0], direction[1] * -1, 0 ); + else if ( direction[0] < 0 ) + direction = ( direction[0] * -1, direction[1], 0 ); + + self vibrate( direction, 10, 0.5, 4 ); + + self waittill( "movedone" ); + + self ghost(); + playfx( level._effect["poltergeist"], self.origin ); +} + +find_craftable_stub( equipname ) +{ + foreach ( stub in level.a_uts_craftables ) + { + if ( stub.equipname == equipname ) + return stub; + } + + return undefined; +} + +uncraft_craftable( equipname, return_pieces, origin, angles ) +{ + stub = find_craftable_stub( equipname ); + stub_uncraft_craftable( stub, return_pieces, origin, angles ); +} + +stub_uncraft_craftable( stub, return_pieces, origin, angles, use_random_start ) +{ + if ( isdefined( stub ) ) + { + craftable = stub.craftablespawn; + craftable.crafted = 0; + craftable.stub.crafted = 0; + craftable notify( "uncrafted" ); + level.craftables_crafted[craftable.craftable_name] = 0; + level notify( craftable.craftable_name + "_uncrafted" ); + + for ( i = 0; i < craftable.a_piecespawns.size; i++ ) + { + craftable.a_piecespawns[i].crafted = 0; + + if ( isdefined( craftable.a_piecespawns[i].tag_name ) ) + { + craftable.stub.model notsolid(); + + if ( !( isdefined( craftable.a_piecespawns[i].crafted ) && craftable.a_piecespawns[i].crafted ) ) + craftable.stub.model hidepart( craftable.a_piecespawns[i].tag_name ); + else + { + craftable.stub.model show(); + craftable.stub.model showpart( craftable.a_piecespawns[i].tag_name ); + } + } + + if ( isdefined( return_pieces ) && return_pieces ) + craftable.a_piecespawns[i] piece_spawn_at( origin, angles, use_random_start ); + } + + if ( isdefined( craftable.stub.model ) ) + craftable.stub.model ghost(); + } +} + +player_explode_craftable( equipname, origin, speed, return_to_spawn, return_time ) +{ + self explosiondamage( 50, origin ); + stub = find_craftable_stub( equipname ); + + if ( isdefined( stub ) ) + { + craftable = stub.craftablespawn; + craftable.crafted = 0; + craftable.stub.crafted = 0; + craftable notify( "uncrafted" ); + level.craftables_crafted[craftable.craftable_name] = 0; + level notify( craftable.craftable_name + "_uncrafted" ); + + for ( i = 0; i < craftable.a_piecespawns.size; i++ ) + { + craftable.a_piecespawns[i].crafted = 0; + + if ( isdefined( craftable.a_piecespawns[i].tag_name ) ) + { + craftable.stub.model notsolid(); + + if ( !( isdefined( craftable.a_piecespawns[i].crafted ) && craftable.a_piecespawns[i].crafted ) ) + craftable.stub.model hidepart( craftable.a_piecespawns[i].tag_name ); + else + { + craftable.stub.model show(); + craftable.stub.model showpart( craftable.a_piecespawns[i].tag_name ); + } + } + + ang = randomfloat( 360 ); + h = 0.25 + randomfloat( 0.5 ); + dir = ( sin( ang ), cos( ang ), h ); + self thread player_throw_piece( craftable.a_piecespawns[i], origin, speed * dir, return_to_spawn, return_time ); + } + + craftable.stub.model ghost(); + } +} + +think_craftables() +{ + foreach ( craftable in level.zombie_include_craftables ) + { + if ( isdefined( craftable.triggerthink ) ) + craftable [[ craftable.triggerthink ]](); + } +} + +opentablecraftable() +{ + a_trigs = getentarray( "open_craftable_trigger", "targetname" ); + + foreach ( trig in a_trigs ) + setup_unitrigger_craftable_internal( trig, "open_table", "", "OPEN_CRAFTABLE", 1, 0 ); +} + +craftable_trigger_think( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + return setup_unitrigger_craftable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); +} + +craftable_trigger_think_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + return setup_unitrigger_craftable_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); +} + +setup_vehicle_unitrigger_craftable( parent, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + trig = getent( trigger_targetname, "targetname" ); + + if ( !isdefined( trig ) ) + return; + + unitrigger_stub = spawnstruct(); + unitrigger_stub.craftablestub = level.zombie_include_craftables[equipname]; + unitrigger_stub.link_parent = parent; + unitrigger_stub.origin_parent = trig; + unitrigger_stub.trigger_targetname = trigger_targetname; + unitrigger_stub.originfunc = ::anystub_get_unitrigger_origin; + unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; + unitrigger_stub.origin = trig.origin; + unitrigger_stub.angles = trig.angles; + unitrigger_stub.equipname = equipname; + unitrigger_stub.weaponname = weaponname; + unitrigger_stub.trigger_hintstring = trigger_hintstring; + unitrigger_stub.delete_trigger = delete_trigger; + unitrigger_stub.crafted = 0; + unitrigger_stub.persistent = persistent; + unitrigger_stub.usetime = int( 3000 ); + unitrigger_stub.onbeginuse = ::onbeginuseuts; + unitrigger_stub.onenduse = ::onenduseuts; + unitrigger_stub.onuse = ::onuseplantobjectuts; + unitrigger_stub.oncantuse = ::oncantuseuts; + + if ( isdefined( trig.script_length ) ) + unitrigger_stub.script_length = trig.script_length; + else + unitrigger_stub.script_length = 24; + + if ( isdefined( trig.script_width ) ) + unitrigger_stub.script_width = trig.script_width; + else + unitrigger_stub.script_width = 64; + + if ( isdefined( trig.script_height ) ) + unitrigger_stub.script_height = trig.script_height; + else + unitrigger_stub.script_height = 24; + + if ( isdefined( trig.radius ) ) + unitrigger_stub.radius = trig.radius; + else + unitrigger_stub.radius = 64; + + unitrigger_stub.target = trig.target; + unitrigger_stub.targetname = trig.targetname + "_trigger"; + unitrigger_stub.script_noteworthy = trig.script_noteworthy; + unitrigger_stub.script_parameters = trig.script_parameters; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + + if ( isdefined( level.zombie_craftablestubs[equipname].str_to_craft ) ) + unitrigger_stub.hint_string = level.zombie_craftablestubs[equipname].str_to_craft; + + unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + unitrigger_stub.require_look_at = 1; + unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + unitrigger_stub.prompt_and_visibility_func = ::craftabletrigger_update_prompt; + maps\mp\zombies\_zm_unitrigger::register_unitrigger( unitrigger_stub, ::craftable_place_think ); + unitrigger_stub.piece_trigger = trig; + trig.trigger_stub = unitrigger_stub; + unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( equipname, unitrigger_stub.origin ); + + if ( delete_trigger ) + trig delete(); + + level.a_uts_craftables[level.a_uts_craftables.size] = unitrigger_stub; + return unitrigger_stub; +} + +vehicle_craftable_trigger_think( vehicle, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + return setup_vehicle_unitrigger_craftable( vehicle, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); +} + +onpickuputs( player ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Craftable piece recovered by - " + player.name ); +#/ +} + +ondroputs( player ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Craftable piece dropped by - " + player.name ); +#/ + player notify( "event_ended" ); +} + +onbeginuseuts( player ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Craftable piece begin use by - " + player.name ); +#/ + if ( isdefined( self.craftablestub.onbeginuse ) ) + self [[ self.craftablestub.onbeginuse ]]( player ); + + if ( isdefined( player ) && !isdefined( player.craftableaudio ) ) + { + player.craftableaudio = spawn( "script_origin", player.origin ); + player.craftableaudio playloopsound( "zmb_craftable_loop" ); + } +} + +onenduseuts( team, player, result ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Craftable piece end use by - " + player.name ); +#/ + if ( !isdefined( player ) ) + return; + + if ( isdefined( player.craftableaudio ) ) + { + player.craftableaudio delete(); + player.craftableaudio = undefined; + } + + if ( isdefined( self.craftablestub.onenduse ) ) + self [[ self.craftablestub.onenduse ]]( team, player, result ); + + player notify( "event_ended" ); +} + +oncantuseuts( player ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Craftable piece can't use by - " + player.name ); +#/ + if ( isdefined( self.craftablestub.oncantuse ) ) + self [[ self.craftablestub.oncantuse ]]( player ); +} + +onuseplantobjectuts( player ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Craftable piece crafted by - " + player.name ); +#/ + if ( isdefined( self.craftablestub.onuseplantobject ) ) + self [[ self.craftablestub.onuseplantobject ]]( player ); + + player notify( "bomb_planted" ); +} + +is_craftable() +{ + if ( !isdefined( level.zombie_craftablestubs ) ) + return false; + + if ( isdefined( self.zombie_weapon_upgrade ) && isdefined( level.zombie_craftablestubs[self.zombie_weapon_upgrade] ) ) + return true; + + if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "specialty_weapupgrade" ) + { + if ( isdefined( level.craftables_crafted["pap"] ) && level.craftables_crafted["pap"] ) + return false; + + return true; + } + + return false; +} + +craftable_crafted() +{ + self.a_piecespawns--; +} + +craftable_complete() +{ + if ( self.a_piecespawns <= 0 ) + return true; + + return false; +} + +get_craftable_hint( craftable_name ) +{ + assert( isdefined( level.zombie_craftablestubs[craftable_name] ), craftable_name + " was not included or is not part of the zombie weapon list." ); + return level.zombie_craftablestubs[craftable_name].str_to_craft; +} + +delete_on_disconnect( craftable, self_notify, skip_delete ) +{ + craftable endon( "death" ); + + self waittill( "disconnect" ); + + if ( isdefined( self_notify ) ) + self notify( self_notify ); + + if ( !( isdefined( skip_delete ) && skip_delete ) ) + { + if ( isdefined( craftable.stub ) ) + { + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( craftable.stub ); + craftable.stub = undefined; + } + + if ( isdefined( craftable ) ) + craftable delete(); + } +} + +is_holding_part( craftable_name, piece_name ) +{ + if ( isdefined( self.current_craftable_piece ) ) + { + if ( self.current_craftable_piece.craftablename == craftable_name && self.current_craftable_piece.modelname == piece_name ) + return true; + } + + if ( isdefined( level.a_uts_craftables ) ) + { + foreach ( craftable_stub in level.a_uts_craftables ) + { + if ( craftable_stub.craftablestub.name == craftable_name ) + { + foreach ( piece in craftable_stub.craftablespawn.a_piecespawns ) + { + if ( piece.piecename == piece_name ) + { + if ( isdefined( piece.in_shared_inventory ) && piece.in_shared_inventory ) + return true; + } + } + } + } + } + + return false; +} + +is_part_crafted( craftable_name, piece_name ) +{ + if ( isdefined( level.a_uts_craftables ) ) + { + foreach ( craftable_stub in level.a_uts_craftables ) + { + if ( craftable_stub.craftablestub.name == craftable_name ) + { + if ( isdefined( craftable_stub.crafted ) && craftable_stub.crafted ) + return true; + + foreach ( piece in craftable_stub.craftablespawn.a_piecespawns ) + { + if ( piece.piecename == piece_name ) + { + if ( isdefined( piece.crafted ) && piece.crafted ) + return true; + } + } + } + } + } + + return false; +} + +track_craftable_piece_pickedup( piece ) +{ + if ( !isdefined( piece ) || !isdefined( piece.craftablename ) ) + { +/# + println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftable_piece_pickedup() \\n" ); +#/ + return; + } + + self add_map_craftable_stat( piece.craftablename, "pieces_pickedup", 1 ); + + if ( isdefined( piece.piecestub.vox_id ) ) + { + if ( isdefined( piece.piecestub.b_one_time_vo ) && piece.piecestub.b_one_time_vo ) + { + if ( !isdefined( self.a_one_time_piece_pickup_vo ) ) + self.a_one_time_piece_pickup_vo = []; + + if ( isdefined( self.dontspeak ) && self.dontspeak ) + return; + + if ( isinarray( self.a_one_time_piece_pickup_vo, piece.piecestub.vox_id ) ) + return; + + self.a_one_time_piece_pickup_vo[self.a_one_time_piece_pickup_vo.size] = piece.piecestub.vox_id; + } + + self thread do_player_general_vox( "general", piece.piecestub.vox_id + "_pickup" ); + } + else + self thread do_player_general_vox( "general", "build_pickup" ); +} + +track_craftable_pieces_crafted( craftable ) +{ + if ( !isdefined( craftable ) || !isdefined( craftable.craftable_name ) ) + { +/# + println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftable_pieces_crafted() \\n" ); +#/ + return; + } + + bname = craftable.craftable_name; + + if ( isdefined( craftable.stat_name ) ) + bname = craftable.stat_name; + + self add_map_craftable_stat( bname, "pieces_built", 1 ); + + if ( !craftable craftable_all_crafted() ) + self thread do_player_general_vox( "general", "build_add" ); +} + +track_craftables_crafted( craftable ) +{ + if ( !isdefined( craftable ) || !isdefined( craftable.craftable_name ) ) + { +/# + println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftables_crafted() \\n" ); +#/ + return; + } + + bname = craftable.craftable_name; + + if ( isdefined( craftable.stat_name ) ) + bname = craftable.stat_name; + + self add_map_craftable_stat( bname, "buildable_built", 1 ); + self maps\mp\zombies\_zm_stats::increment_client_stat( "buildables_built", 0 ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "buildables_built" ); + + if ( isdefined( craftable.stub.craftablestub.vox_id ) ) + { + if ( isdefined( level.zombie_custom_craftable_built_vo ) ) + self thread [[ level.zombie_custom_craftable_built_vo ]]( craftable.stub ); + + self thread do_player_general_vox( "general", craftable.stub.craftablestub.vox_id + "_final" ); + } +} + +track_craftables_pickedup( craftable ) +{ + if ( !isdefined( craftable ) ) + { +/# + println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftables_pickedup() \\n" ); +#/ + return; + } + + stat_name = get_craftable_stat_name( craftable.craftable_name ); + + if ( !isdefined( stat_name ) ) + { +/# + println( "STAT TRACKING FAILURE: NO STAT NAME FOR " + craftable.craftable_name + "\\n" ); +#/ + return; + } + + self add_map_craftable_stat( stat_name, "buildable_pickedup", 1 ); + + if ( isdefined( craftable.stub.craftablestub.vox_id ) ) + self thread do_player_general_vox( "general", craftable.stub.craftablestub.vox_id + "_plc" ); + + self say_pickup_craftable_vo( craftable, 0 ); +} + +track_craftables_planted( equipment ) +{ + if ( !isdefined( equipment ) ) + { +/# + println( "STAT TRACKING FAILURE: NOT DEFINED for track_craftables_planted() \\n" ); +#/ + return; + } + + craftable_name = undefined; + + if ( isdefined( equipment.name ) ) + craftable_name = get_craftable_stat_name( equipment.name ); + + if ( !isdefined( craftable_name ) ) + { +/# + println( "STAT TRACKING FAILURE: NO CRAFTABLE NAME FOR track_craftables_planted() " + equipment.name + "\\n" ); +#/ + return; + } + + maps\mp\_demo::bookmark( "zm_player_buildable_placed", gettime(), self ); + self add_map_craftable_stat( craftable_name, "buildable_placed", 1 ); +} + +placed_craftable_vo_timer() +{ + self endon( "disconnect" ); + self.craftable_timer = 1; + wait 60; + self.craftable_timer = 0; +} + +craftable_pickedup_timer() +{ + self endon( "disconnect" ); + self.craftable_pickedup_timer = 1; + wait 60; + self.craftable_pickedup_timer = 0; +} + +track_planted_craftables_pickedup( equipment ) +{ + if ( !isdefined( equipment ) ) + return; + + if ( equipment == "equip_turbine_zm" || equipment == "equip_turret_zm" || equipment == "equip_electrictrap_zm" || equipment == "riotshield_zm" || equipment == "alcatraz_shield_zm" || equipment == "tomb_shield_zm" ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "planted_buildables_pickedup", 0 ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "planted_buildables_pickedup" ); + } + + if ( !( isdefined( self.craftable_pickedup_timer ) && self.craftable_pickedup_timer ) ) + { + self say_pickup_craftable_vo( equipment, 1 ); + self thread craftable_pickedup_timer(); + } +} + +track_placed_craftables( craftable_name ) +{ + if ( !isdefined( craftable_name ) ) + return; + + self add_map_craftable_stat( craftable_name, "buildable_placed", 1 ); + vo_name = undefined; + + if ( craftable_name == level.riotshield_name ) + vo_name = "craft_plc_shield"; + + if ( !isdefined( vo_name ) ) + return; + + self thread do_player_general_vox( "general", vo_name ); +} + +add_map_craftable_stat( piece_name, stat_name, value ) +{ + if ( !isdefined( piece_name ) || piece_name == "sq_common" || piece_name == "keys_zm" ) + return; + + if ( isdefined( level.zm_disable_recording_stats ) && level.zm_disable_recording_stats || isdefined( level.zm_disable_recording_buildable_stats ) && level.zm_disable_recording_buildable_stats ) + return; + + self adddstat( "buildables", piece_name, stat_name, value ); +} + +say_pickup_craftable_vo( craftable_name, world ) +{ + +} + +get_craftable_vo_name( craftable_name ) +{ + +} + +get_craftable_stat_name( craftable_name ) +{ + if ( isdefined( craftable_name ) ) + { + switch ( craftable_name ) + { + case "equip_riotshield_zm": + return "riotshield_zm"; + case "equip_turbine_zm": + return "turbine"; + case "equip_turret_zm": + return "turret"; + case "equip_electrictrap_zm": + return "electric_trap"; + case "equip_springpad_zm": + return "springpad_zm"; + case "equip_slipgun_zm": + return "slipgun_zm"; + } + } + + return craftable_name; +} + +get_craftable_model( str_craftable ) +{ + foreach ( uts_craftable in level.a_uts_craftables ) + { + if ( uts_craftable.craftablestub.name == str_craftable ) + { + if ( isdefined( uts_craftable.model ) ) + return uts_craftable.model; + + break; + } + } + + return undefined; +} + +get_craftable_piece( str_craftable, str_piece ) +{ + foreach ( uts_craftable in level.a_uts_craftables ) + { + if ( uts_craftable.craftablestub.name == str_craftable ) + { + foreach ( piecespawn in uts_craftable.craftablespawn.a_piecespawns ) + { + if ( piecespawn.piecename == str_piece ) + return piecespawn; + } + + break; + } + } + + return undefined; +} + +player_get_craftable_piece( str_craftable, str_piece ) +{ + piecespawn = get_craftable_piece( str_craftable, str_piece ); + + if ( isdefined( piecespawn ) ) + self player_take_piece( piecespawn ); +} + +get_craftable_piece_model( str_craftable, str_piece ) +{ + foreach ( uts_craftable in level.a_uts_craftables ) + { + if ( uts_craftable.craftablestub.name == str_craftable ) + { + foreach ( piecespawn in uts_craftable.craftablespawn.a_piecespawns ) + { + if ( piecespawn.piecename == str_piece && isdefined( piecespawn.model ) ) + return piecespawn.model; + } + + break; + } + } + + return undefined; +} diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_game_module_grief.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_game_module_grief.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_game_module_grief.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_game_module_grief.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_game_module_meat.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_game_module_meat.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_game_module_meat.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_game_module_meat.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_game_module_meat_utility.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_game_module_meat_utility.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_game_module_meat_utility.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_game_module_meat_utility.gsc diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_game_module_utility.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_game_module_utility.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_game_module_utility.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_game_module_utility.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_magicbox_prison.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_magicbox_prison.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_magicbox_prison.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_magicbox_prison.gsc diff --git a/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_melee_weapon.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_melee_weapon.gsc new file mode 100644 index 0000000..4bc83cd --- /dev/null +++ b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_melee_weapon.gsc @@ -0,0 +1,576 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_audio; + +init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) +{ + precacheitem( weapon_name ); + precacheitem( flourish_weapon_name ); + add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); + melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_weapon_triggers.size; i++ ) + { + knife_model = getent( melee_weapon_triggers[i].target, "targetname" ); + + if ( isdefined( knife_model ) ) + knife_model hide(); + + melee_weapon_triggers[i] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); + + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + melee_weapon_triggers[i] sethintstring( hint_string, cost ); + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + cursor_hint = "HINT_WEAPON"; + cursor_hint_weapon = weapon_name; + melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); + } + else + melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); + } + else + { + weapon_display = get_weapon_display_name( weapon_name ); + hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + melee_weapon_triggers[i] sethintstring( hint_string, weapon_display, cost ); + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + cursor_hint = "HINT_WEAPON"; + cursor_hint_weapon = weapon_name; + melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); + } + else + melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); + } + + melee_weapon_triggers[i] usetriggerrequirelookat(); + } + + melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_weapon_structs.size; i++ ) + prepare_stub( melee_weapon_structs[i].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); + + register_melee_weapon_for_level( weapon_name ); + + if ( !isdefined( level.ballistic_weapon_name ) ) + level.ballistic_weapon_name = []; + + level.ballistic_weapon_name[weapon_name] = ballistic_weapon_name; + + if ( !isdefined( level.ballistic_upgraded_weapon_name ) ) + level.ballistic_upgraded_weapon_name = []; + + level.ballistic_upgraded_weapon_name[weapon_name] = ballistic_upgraded_weapon_name; +/# + if ( !isdefined( level.zombie_weapons[weapon_name] ) ) + { + if ( isdefined( level.devgui_add_weapon ) ) + [[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost ); + } +#/ +} + +prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) +{ + if ( isdefined( stub ) ) + { + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + stub.hint_string = hint_string; + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + stub.cursor_hint = "HINT_WEAPON"; + stub.cursor_hint_weapon = weapon_name; + } + else + { + stub.cursor_hint = "HINT_NOICON"; + stub.cursor_hint_weapon = undefined; + } + } + else + { + stub.hint_parm1 = get_weapon_display_name( weapon_name ); + stub.hint_parm2 = cost; + stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + stub.cursor_hint = "HINT_WEAPON"; + stub.cursor_hint_weapon = weapon_name; + } + else + { + stub.cursor_hint = "HINT_NOICON"; + stub.cursor_hint_weapon = undefined; + } + } + + stub.cost = cost; + stub.weapon_name = weapon_name; + stub.vo_dialog_id = vo_dialog_id; + stub.flourish_weapon_name = flourish_weapon_name; + stub.ballistic_weapon_name = ballistic_weapon_name; + stub.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; + stub.trigger_func = ::melee_weapon_think; + stub.flourish_fn = flourish_fn; + } +} + +add_stub( stub, weapon_name ) +{ + melee_weapon = undefined; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( level._melee_weapons[i].weapon_name == weapon_name ) + { + melee_weapon = level._melee_weapons[i]; + break; + } + } + + if ( isdefined( stub ) && isdefined( melee_weapon ) ) + prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn ); +} + +give_melee_weapon_by_name( weapon_name ) +{ + melee_weapon = undefined; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( level._melee_weapons[i].weapon_name == weapon_name ) + { + melee_weapon = level._melee_weapons[i]; + break; + } + } + + if ( isdefined( melee_weapon ) ) + self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined ); +} + +add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) +{ + melee_weapon = spawnstruct(); + melee_weapon.weapon_name = weapon_name; + melee_weapon.flourish_weapon_name = flourish_weapon_name; + melee_weapon.ballistic_weapon_name = ballistic_weapon_name; + melee_weapon.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; + melee_weapon.cost = cost; + melee_weapon.wallbuy_targetname = wallbuy_targetname; + melee_weapon.hint_string = hint_string; + melee_weapon.vo_dialog_id = vo_dialog_id; + melee_weapon.flourish_fn = flourish_fn; + + if ( !isdefined( level._melee_weapons ) ) + level._melee_weapons = []; + + level._melee_weapons[level._melee_weapons.size] = melee_weapon; +} + +player_can_see_weapon_prompt( weapon_name ) +{ + if ( is_true( level._allow_melee_weapon_switching ) ) + return true; + + if ( isdefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) ) + return false; + + return true; +} + +spectator_respawn_all() +{ + for ( i = 0; i < level._melee_weapons.size; i++ ) + self spectator_respawn( level._melee_weapons[i].wallbuy_targetname, level._melee_weapons[i].weapon_name ); +} + +spectator_respawn( wallbuy_targetname, weapon_name ) +{ + melee_triggers = getentarray( wallbuy_targetname, "targetname" ); + players = get_players(); + + for ( i = 0; i < melee_triggers.size; i++ ) + { + melee_triggers[i] setvisibletoall(); + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + for ( j = 0; j < players.size; j++ ) + { + if ( !players[j] player_can_see_weapon_prompt( weapon_name ) ) + melee_triggers[i] setinvisibletoplayer( players[j] ); + } + } + } +} + +trigger_hide_all() +{ + for ( i = 0; i < level._melee_weapons.size; i++ ) + self trigger_hide( level._melee_weapons[i].wallbuy_targetname ); +} + +trigger_hide( wallbuy_targetname ) +{ + melee_triggers = getentarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_triggers.size; i++ ) + melee_triggers[i] setinvisibletoplayer( self ); +} + +has_any_ballistic_knife() +{ + if ( self hasweapon( "knife_ballistic_zm" ) ) + return true; + + if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) + return true; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) ) + return true; + + if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) + return true; + } + + return false; +} + +has_upgraded_ballistic_knife() +{ + if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) + return true; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) + return true; + } + + return false; +} + +give_ballistic_knife( weapon_string, upgraded ) +{ + current_melee_weapon = self get_player_melee_weapon(); + + if ( isdefined( current_melee_weapon ) ) + { + if ( upgraded && isdefined( level.ballistic_upgraded_weapon_name ) && isdefined( level.ballistic_upgraded_weapon_name[current_melee_weapon] ) ) + weapon_string = level.ballistic_upgraded_weapon_name[current_melee_weapon]; + + if ( !upgraded && isdefined( level.ballistic_weapon_name ) && isdefined( level.ballistic_weapon_name[current_melee_weapon] ) ) + weapon_string = level.ballistic_weapon_name[current_melee_weapon]; + } + + return weapon_string; +} + +change_melee_weapon( weapon_name, current_weapon ) +{ + current_melee_weapon = self get_player_melee_weapon(); + + if ( isdefined( current_melee_weapon ) && current_melee_weapon != weapon_name ) + { + self takeweapon( current_melee_weapon ); + unacquire_weapon_toggle( current_melee_weapon ); + } + + self set_player_melee_weapon( weapon_name ); + had_ballistic = 0; + had_ballistic_upgraded = 0; + ballistic_was_primary = 0; + primaryweapons = self getweaponslistprimaries(); + + for ( i = 0; i < primaryweapons.size; i++ ) + { + primary_weapon = primaryweapons[i]; + + if ( issubstr( primary_weapon, "knife_ballistic_" ) ) + { + had_ballistic = 1; + + if ( primary_weapon == current_weapon ) + ballistic_was_primary = 1; + + self notify( "zmb_lost_knife" ); + self takeweapon( primary_weapon ); + unacquire_weapon_toggle( primary_weapon ); + + if ( issubstr( primary_weapon, "upgraded" ) ) + had_ballistic_upgraded = 1; + } + } + + if ( had_ballistic ) + { + if ( had_ballistic_upgraded ) + { + new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name]; + + if ( ballistic_was_primary ) + current_weapon = new_ballistic; + + self giveweapon( new_ballistic, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) ); + } + else + { + new_ballistic = level.ballistic_weapon_name[weapon_name]; + + if ( ballistic_was_primary ) + current_weapon = new_ballistic; + + self giveweapon( new_ballistic, 0 ); + } + } + + return current_weapon; +} + +melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) +{ + self.first_time_triggered = 0; + + if ( isdefined( self.stub ) ) + { + self endon( "kill_trigger" ); + + if ( isdefined( self.stub.first_time_triggered ) ) + self.first_time_triggered = self.stub.first_time_triggered; + + weapon_name = self.stub.weapon_name; + cost = self.stub.cost; + flourish_fn = self.stub.flourish_fn; + vo_dialog_id = self.stub.vo_dialog_id; + flourish_weapon_name = self.stub.flourish_weapon_name; + ballistic_weapon_name = self.stub.ballistic_weapon_name; + ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name; + players = getplayers(); + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] player_can_see_weapon_prompt( weapon_name ) ) + self setinvisibletoplayer( players[i] ); + } + } + } + + for (;;) + { + self waittill( "trigger", player ); + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + if ( player in_revive_trigger() ) + { + wait 0.1; + continue; + } + + if ( player isthrowinggrenade() ) + { + wait 0.1; + continue; + } + + if ( player.is_drinking > 0 ) + { + wait 0.1; + continue; + } + + if ( player hasweapon( weapon_name ) || player has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( player isswitchingweapons() ) + { + wait 0.1; + continue; + } + + current_weapon = player getcurrentweapon(); + + if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) || player has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission ) + { + wait 0.1; + continue; + } + + player_has_weapon = player hasweapon( weapon_name ); + + if ( !player_has_weapon ) + { + cost = self.stub.cost; + + if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) + cost = int( cost / 2 ); + + if ( player.score >= cost ) + { + if ( self.first_time_triggered == 0 ) + { + model = getent( self.target, "targetname" ); + + if ( isdefined( model ) ) + model thread melee_weapon_show( player ); + else if ( isdefined( self.clientfieldname ) ) + level setclientfield( self.clientfieldname, 1 ); + + self.first_time_triggered = 1; + + if ( isdefined( self.stub ) ) + self.stub.first_time_triggered = 1; + } + + player maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 ); + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" ); + player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self ); + } + else + { + play_sound_on_ent( "no_purchase" ); + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 ); + } + + continue; + } + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + self setinvisibletoplayer( player ); + } +} + +melee_weapon_show( player ) +{ + player_angles = vectortoangles( player.origin - self.origin ); + player_yaw = player_angles[1]; + weapon_yaw = self.angles[1]; + yaw_diff = angleclamp180( player_yaw - weapon_yaw ); + + if ( yaw_diff > 0 ) + yaw = weapon_yaw - 90; + else + yaw = weapon_yaw + 90; + + self.og_origin = self.origin; + self.origin += anglestoforward( ( 0, yaw, 0 ) ) * 8; + wait 0.05; + self show(); + play_sound_at_pos( "weapon_show", self.origin, self ); + time = 1; + self moveto( self.og_origin, time ); +} + +give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger ) +{ + if ( isdefined( flourish_fn ) ) + self thread [[ flourish_fn ]](); + + gun = self do_melee_weapon_flourish_begin( flourish_weapon_name ); + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id ); + self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); + self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + return; + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + if ( isdefined( trigger ) ) + trigger setinvisibletoplayer( self ); + + self trigger_hide_all(); + } +} + +do_melee_weapon_flourish_begin( flourish_weapon_name ) +{ + self increment_is_drinking(); + self disable_player_move_states( 1 ); + gun = self getcurrentweapon(); + weapon = flourish_weapon_name; + self giveweapon( weapon ); + self switchtoweapon( weapon ); + return gun; +} + +do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) +{ + assert( !is_zombie_perk_bottle( gun ) ); + assert( gun != level.revive_tool ); + self enable_player_move_states(); + weapon = flourish_weapon_name; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + { + self takeweapon( weapon ); + self.lastactiveweapon = "none"; + return; + } + + self takeweapon( weapon ); + self giveweapon( weapon_name ); + gun = change_melee_weapon( weapon_name, gun ); + + if ( self hasweapon( "knife_zm" ) ) + self takeweapon( "knife_zm" ); + + if ( self is_multiple_drinking() ) + { + self decrement_is_drinking(); + return; + } + else if ( gun == "knife_zm" ) + { + self switchtoweapon( weapon_name ); + self decrement_is_drinking(); + return; + } + else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) + self switchtoweapon( gun ); + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + } + + self waittill( "weapon_change_complete" ); + + if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) ) + self decrement_is_drinking(); +} diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_perk_divetonuke.gsc similarity index 100% rename from Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_perk_divetonuke.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_riotshield_prison.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_riotshield_prison.gsc similarity index 99% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_riotshield_prison.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_riotshield_prison.gsc index 8a4e1b8..21fd06a 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_riotshield_prison.gsc +++ b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_riotshield_prison.gsc @@ -249,9 +249,7 @@ trackriotshield() if ( self.hasriotshieldequipped ) { -/# assert( self.hasriotshield ); -#/ self.hasriotshield = self hasweapon( level.riotshield_name ); if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden ) @@ -261,11 +259,7 @@ trackriotshield() else if ( self.hasriotshield ) self.shield_placement = 2; else if ( isdefined( self.shield_ent ) ) - { -/# assert( self.shield_placement == 3 ); -#/ - } else self.shield_placement = 0; @@ -458,9 +452,7 @@ doriotshielddeploy( origin, angles ) riotshielddistancetest( origin ) { -/# assert( isdefined( origin ) ); -#/ min_dist_squared = getdvarfloat( "riotshield_deploy_limit_radius" ); min_dist_squared *= min_dist_squared; @@ -524,9 +516,9 @@ watchdeployedriotshielddamage() if ( !isdefined( attacker ) || !isplayer( attacker ) ) continue; -/# + assert( isdefined( self.owner ) && isdefined( self.owner.team ) ); -#/ + if ( is_encounter() && attacker.team == self.owner.team && attacker != self.owner ) continue; diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_weap_ballistic_knife.gsc similarity index 100% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_weap_ballistic_knife.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_blundersplat.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_weap_blundersplat.gsc similarity index 96% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_blundersplat.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_weap_blundersplat.gsc index 1ec918c..2f5f8c6 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_blundersplat.gsc +++ b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_weap_blundersplat.gsc @@ -123,11 +123,8 @@ wait_for_blundersplat_upgraded_fired() } } -_titus_locate_target( is_not_upgraded ) +_titus_locate_target( is_not_upgraded = 1 ) { - if ( !isdefined( is_not_upgraded ) ) - is_not_upgraded = 1; - fire_angles = self getplayerangles(); fire_origin = self getplayercamerapos(); a_targets = arraycombine( getaiarray( "axis" ), getvehiclearray( "axis" ), 0, 0 ); @@ -256,14 +253,8 @@ _titus_grenade_detonate_on_target_death( target ) self resetmissiledetonationtime( 0.05 ); } -_titus_reset_grenade_fuse( n_fuse_timer, is_not_upgraded ) +_titus_reset_grenade_fuse( n_fuse_timer = randomfloatrange( 1, 1.5 ), is_not_upgraded = 1 ) { - if ( !isdefined( is_not_upgraded ) ) - is_not_upgraded = 1; - - if ( !isdefined( n_fuse_timer ) ) - n_fuse_timer = randomfloatrange( 1, 1.5 ); - self waittill( "death" ); a_grenades = getentarray( "grenade", "classname" ); diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_claymore.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_weap_claymore.gsc similarity index 100% rename from Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_claymore.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_weap_claymore.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_riotshield_prison.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_weap_riotshield_prison.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_riotshield_prison.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_weap_riotshield_prison.gsc diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_tomahawk.gsc b/ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_weap_tomahawk.gsc similarity index 100% rename from Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_tomahawk.gsc rename to ZM/Maps/Mob of the Dead/maps/mp/zombies/_zm_weap_tomahawk.gsc diff --git a/ZM/Maps/Mob of the Dead/xmodelalias/c_zom_prison_guard_hat_als.gsc b/ZM/Maps/Mob of the Dead/xmodelalias/c_zom_prison_guard_hat_als.gsc new file mode 100644 index 0000000..989e0d3 --- /dev/null +++ b/ZM/Maps/Mob of the Dead/xmodelalias/c_zom_prison_guard_hat_als.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + a[0] = "c_zom_guard_hat"; + a[1] = "c_viet_zombie_nohat"; + return a; +} diff --git a/ZM/Maps/Mob of the Dead/xmodelalias/c_zom_prison_guard_head_als.gsc b/ZM/Maps/Mob of the Dead/xmodelalias/c_zom_prison_guard_head_als.gsc new file mode 100644 index 0000000..3d6aaf2 --- /dev/null +++ b/ZM/Maps/Mob of the Dead/xmodelalias/c_zom_prison_guard_head_als.gsc @@ -0,0 +1,11 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + a[0] = "c_zom_zombie_barbwire_head"; + a[1] = "c_zom_zombie_hellcatraz_head"; + a[2] = "c_zom_zombie_mask_head"; + a[3] = "c_zom_zombie_slackjaw_head"; + return a; +} diff --git a/ZM/Maps/Mob of the Dead/xmodelalias/c_zom_prison_inmate_head_als.gsc b/ZM/Maps/Mob of the Dead/xmodelalias/c_zom_prison_inmate_head_als.gsc new file mode 100644 index 0000000..7ec30f4 --- /dev/null +++ b/ZM/Maps/Mob of the Dead/xmodelalias/c_zom_prison_inmate_head_als.gsc @@ -0,0 +1,11 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + a[0] = "c_zom_zombie_barbwire_head"; + a[1] = "c_zom_zombie_hellcatraz_head"; + a[2] = "c_zom_zombie_mask_head_device"; + a[3] = "c_zom_zombie_slackjaw_head"; + return a; +} diff --git a/ZM/Maps/Nuketown/aitype/zm_nuked_basic_01.gsc b/ZM/Maps/Nuketown/aitype/zm_nuked_basic_01.gsc new file mode 100644 index 0000000..b13ee00 --- /dev/null +++ b/ZM/Maps/Nuketown/aitype/zm_nuked_basic_01.gsc @@ -0,0 +1,339 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_dlc0_zombie_hazmat_1; +#include character\c_zom_dlc0_zombie_hazmat_2; + +#using_animtree("zm_nuked_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_inert_look_v1; + dummy_anim_ref = %ai_zombie_inert_look_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v1; + dummy_anim_ref = %ai_zombie_inert_stagger_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v3; + dummy_anim_ref = %ai_zombie_inert_stagger_v4; + dummy_anim_ref = %ai_zombie_inert_circle_v1; + dummy_anim_ref = %ai_zombie_inert_2_walk_v11; + dummy_anim_ref = %ai_zombie_inert_2_walk_v12; + dummy_anim_ref = %ai_zombie_inert_2_walk_v13; + dummy_anim_ref = %ai_zombie_inert_2_walk_v14; + dummy_anim_ref = %ai_zombie_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_v5; + dummy_anim_ref = %ai_zombie_crawl_inert_v6; + dummy_anim_ref = %ai_zombie_crawl_inert_v7; + dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_jump_down_40; + dummy_anim_ref = %ai_zombie_crawl_jump_down_40; + dummy_anim_ref = %ai_zombie_jump_down_fast_40; + dummy_anim_ref = %ai_zombie_jump_down_72; + dummy_anim_ref = %ai_zombie_crawl_jump_down_72; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_176; + dummy_anim_ref = %ai_zombie_crawl_jump_down_176; + dummy_anim_ref = %ai_zombie_jump_up_72; + dummy_anim_ref = %ai_zombie_crawl_jump_up_72; + dummy_anim_ref = %ai_zombie_jump_up_96; + dummy_anim_ref = %ai_zombie_crawl_jump_up_96; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_154; + dummy_anim_ref = %ai_zombie_crawl_jump_up_154; + dummy_anim_ref = %ai_zombie_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_222; + dummy_anim_ref = %ai_zombie_jump_up_2_climb; + dummy_anim_ref = %ai_zombie_crawl_jump_up_2_climb; + dummy_anim_ref = %ai_zombie_traverse_garage_roll; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_nuked_basic.asd"; + self.animtree = "zm_nuked_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 2 ); + + switch ( randchar ) + { + case 0: + character\c_zom_dlc0_zombie_hazmat_1::main(); + break; + case 1: + character\c_zom_dlc0_zombie_hazmat_2::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_nuked_basic" ); + character\c_zom_dlc0_zombie_hazmat_1::precache(); + character\c_zom_dlc0_zombie_hazmat_2::precache(); +} diff --git a/ZM/Maps/Nuketown/aitype/zm_nuked_basic_01_beyes.gsc b/ZM/Maps/Nuketown/aitype/zm_nuked_basic_01_beyes.gsc new file mode 100644 index 0000000..41b37b0 --- /dev/null +++ b/ZM/Maps/Nuketown/aitype/zm_nuked_basic_01_beyes.gsc @@ -0,0 +1,339 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_dlc0_zombie_hazmat_1_beyes; +#include character\c_zom_dlc0_zombie_hazmat_2_beyes; + +#using_animtree("zm_nuked_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_inert_look_v1; + dummy_anim_ref = %ai_zombie_inert_look_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v1; + dummy_anim_ref = %ai_zombie_inert_stagger_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v3; + dummy_anim_ref = %ai_zombie_inert_stagger_v4; + dummy_anim_ref = %ai_zombie_inert_circle_v1; + dummy_anim_ref = %ai_zombie_inert_2_walk_v11; + dummy_anim_ref = %ai_zombie_inert_2_walk_v12; + dummy_anim_ref = %ai_zombie_inert_2_walk_v13; + dummy_anim_ref = %ai_zombie_inert_2_walk_v14; + dummy_anim_ref = %ai_zombie_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_v5; + dummy_anim_ref = %ai_zombie_crawl_inert_v6; + dummy_anim_ref = %ai_zombie_crawl_inert_v7; + dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_jump_down_40; + dummy_anim_ref = %ai_zombie_crawl_jump_down_40; + dummy_anim_ref = %ai_zombie_jump_down_fast_40; + dummy_anim_ref = %ai_zombie_jump_down_72; + dummy_anim_ref = %ai_zombie_crawl_jump_down_72; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_176; + dummy_anim_ref = %ai_zombie_crawl_jump_down_176; + dummy_anim_ref = %ai_zombie_jump_up_72; + dummy_anim_ref = %ai_zombie_crawl_jump_up_72; + dummy_anim_ref = %ai_zombie_jump_up_96; + dummy_anim_ref = %ai_zombie_crawl_jump_up_96; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_154; + dummy_anim_ref = %ai_zombie_crawl_jump_up_154; + dummy_anim_ref = %ai_zombie_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_222; + dummy_anim_ref = %ai_zombie_jump_up_2_climb; + dummy_anim_ref = %ai_zombie_crawl_jump_up_2_climb; + dummy_anim_ref = %ai_zombie_traverse_garage_roll; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_nuked_basic.asd"; + self.animtree = "zm_nuked_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 2 ); + + switch ( randchar ) + { + case 0: + character\c_zom_dlc0_zombie_hazmat_1_beyes::main(); + break; + case 1: + character\c_zom_dlc0_zombie_hazmat_2_beyes::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_nuked_basic" ); + character\c_zom_dlc0_zombie_hazmat_1_beyes::precache(); + character\c_zom_dlc0_zombie_hazmat_2_beyes::precache(); +} diff --git a/ZM/Maps/Nuketown/aitype/zm_nuked_basic_02.gsc b/ZM/Maps/Nuketown/aitype/zm_nuked_basic_02.gsc new file mode 100644 index 0000000..8d406ac --- /dev/null +++ b/ZM/Maps/Nuketown/aitype/zm_nuked_basic_02.gsc @@ -0,0 +1,339 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_dlc0_zombie_soldier_1; +#include character\c_zom_dlc0_zombie_soldier_civ_1; + +#using_animtree("zm_nuked_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_inert_look_v1; + dummy_anim_ref = %ai_zombie_inert_look_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v1; + dummy_anim_ref = %ai_zombie_inert_stagger_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v3; + dummy_anim_ref = %ai_zombie_inert_stagger_v4; + dummy_anim_ref = %ai_zombie_inert_circle_v1; + dummy_anim_ref = %ai_zombie_inert_2_walk_v11; + dummy_anim_ref = %ai_zombie_inert_2_walk_v12; + dummy_anim_ref = %ai_zombie_inert_2_walk_v13; + dummy_anim_ref = %ai_zombie_inert_2_walk_v14; + dummy_anim_ref = %ai_zombie_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_v5; + dummy_anim_ref = %ai_zombie_crawl_inert_v6; + dummy_anim_ref = %ai_zombie_crawl_inert_v7; + dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_jump_down_40; + dummy_anim_ref = %ai_zombie_crawl_jump_down_40; + dummy_anim_ref = %ai_zombie_jump_down_fast_40; + dummy_anim_ref = %ai_zombie_jump_down_72; + dummy_anim_ref = %ai_zombie_crawl_jump_down_72; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_176; + dummy_anim_ref = %ai_zombie_crawl_jump_down_176; + dummy_anim_ref = %ai_zombie_jump_up_72; + dummy_anim_ref = %ai_zombie_crawl_jump_up_72; + dummy_anim_ref = %ai_zombie_jump_up_96; + dummy_anim_ref = %ai_zombie_crawl_jump_up_96; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_154; + dummy_anim_ref = %ai_zombie_crawl_jump_up_154; + dummy_anim_ref = %ai_zombie_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_222; + dummy_anim_ref = %ai_zombie_jump_up_2_climb; + dummy_anim_ref = %ai_zombie_crawl_jump_up_2_climb; + dummy_anim_ref = %ai_zombie_traverse_garage_roll; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_nuked_basic.asd"; + self.animtree = "zm_nuked_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 2 ); + + switch ( randchar ) + { + case 0: + character\c_zom_dlc0_zombie_soldier_1::main(); + break; + case 1: + character\c_zom_dlc0_zombie_soldier_civ_1::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_nuked_basic" ); + character\c_zom_dlc0_zombie_soldier_1::precache(); + character\c_zom_dlc0_zombie_soldier_civ_1::precache(); +} diff --git a/ZM/Maps/Nuketown/aitype/zm_nuked_basic_02_beyes.gsc b/ZM/Maps/Nuketown/aitype/zm_nuked_basic_02_beyes.gsc new file mode 100644 index 0000000..379b30f --- /dev/null +++ b/ZM/Maps/Nuketown/aitype/zm_nuked_basic_02_beyes.gsc @@ -0,0 +1,339 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_dlc0_zombie_soldier_1_beyes; +#include character\c_zom_dlc0_zombie_soldier_civ_1_beyes; + +#using_animtree("zm_nuked_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_inert_look_v1; + dummy_anim_ref = %ai_zombie_inert_look_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v1; + dummy_anim_ref = %ai_zombie_inert_stagger_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v3; + dummy_anim_ref = %ai_zombie_inert_stagger_v4; + dummy_anim_ref = %ai_zombie_inert_circle_v1; + dummy_anim_ref = %ai_zombie_inert_2_walk_v11; + dummy_anim_ref = %ai_zombie_inert_2_walk_v12; + dummy_anim_ref = %ai_zombie_inert_2_walk_v13; + dummy_anim_ref = %ai_zombie_inert_2_walk_v14; + dummy_anim_ref = %ai_zombie_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_v5; + dummy_anim_ref = %ai_zombie_crawl_inert_v6; + dummy_anim_ref = %ai_zombie_crawl_inert_v7; + dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_jump_down_40; + dummy_anim_ref = %ai_zombie_crawl_jump_down_40; + dummy_anim_ref = %ai_zombie_jump_down_fast_40; + dummy_anim_ref = %ai_zombie_jump_down_72; + dummy_anim_ref = %ai_zombie_crawl_jump_down_72; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_176; + dummy_anim_ref = %ai_zombie_crawl_jump_down_176; + dummy_anim_ref = %ai_zombie_jump_up_72; + dummy_anim_ref = %ai_zombie_crawl_jump_up_72; + dummy_anim_ref = %ai_zombie_jump_up_96; + dummy_anim_ref = %ai_zombie_crawl_jump_up_96; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_154; + dummy_anim_ref = %ai_zombie_crawl_jump_up_154; + dummy_anim_ref = %ai_zombie_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_222; + dummy_anim_ref = %ai_zombie_jump_up_2_climb; + dummy_anim_ref = %ai_zombie_crawl_jump_up_2_climb; + dummy_anim_ref = %ai_zombie_traverse_garage_roll; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_nuked_basic.asd"; + self.animtree = "zm_nuked_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 2 ); + + switch ( randchar ) + { + case 0: + character\c_zom_dlc0_zombie_soldier_1_beyes::main(); + break; + case 1: + character\c_zom_dlc0_zombie_soldier_civ_1_beyes::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_nuked_basic" ); + character\c_zom_dlc0_zombie_soldier_1_beyes::precache(); + character\c_zom_dlc0_zombie_soldier_civ_1_beyes::precache(); +} diff --git a/ZM/Maps/Nuketown/aitype/zm_nuked_dog.gsc b/ZM/Maps/Nuketown/aitype/zm_nuked_dog.gsc new file mode 100644 index 0000000..99b2afb --- /dev/null +++ b/ZM/Maps/Nuketown/aitype/zm_nuked_dog.gsc @@ -0,0 +1,96 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\character_sp_zombie_dog; + +#using_animtree("zm_nuked_dog"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %zombie_dog_idle; + dummy_anim_ref = %zombie_dog_attackidle_growl; + dummy_anim_ref = %zombie_dog_attackidle; + dummy_anim_ref = %zombie_dog_attackidle_bark; + dummy_anim_ref = %zombie_dog_run_stop; + dummy_anim_ref = %zombie_dog_run; + dummy_anim_ref = %zombie_dog_trot; + dummy_anim_ref = %zombie_dog_run_start; + dummy_anim_ref = %zombie_dog_turn_90_left; + dummy_anim_ref = %zombie_dog_turn_90_right; + dummy_anim_ref = %zombie_dog_turn_180_left; + dummy_anim_ref = %zombie_dog_turn_180_right; + dummy_anim_ref = %zombie_dog_run_turn_90_left; + dummy_anim_ref = %zombie_dog_run_turn_90_right; + dummy_anim_ref = %zombie_dog_run_turn_180_left; + dummy_anim_ref = %zombie_dog_run_turn_180_right; + dummy_anim_ref = %zombie_dog_death_front; + dummy_anim_ref = %zombie_dog_death_hit_back; + dummy_anim_ref = %zombie_dog_death_hit_left; + dummy_anim_ref = %zombie_dog_death_hit_right; + dummy_anim_ref = %zombie_dog_run_attack; + dummy_anim_ref = %zombie_dog_run_attack_low; + dummy_anim_ref = %zombie_dog_run_jump_window_40; + dummy_anim_ref = %zombie_dog_traverse_down_40; + dummy_anim_ref = %zombie_dog_traverse_down_96; + dummy_anim_ref = %zombie_dog_traverse_down_126; + dummy_anim_ref = %zombie_dog_traverse_down_190; + dummy_anim_ref = %zombie_dog_traverse_up_40; + dummy_anim_ref = %zombie_dog_traverse_up_80; + dummy_anim_ref = %ai_zombie_dog_jump_across_120; +} + +main() +{ + self.accuracy = 0.2; + self.animstatedef = "zm_nuked_dog.asd"; + self.animtree = "zm_nuked_dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie_dog"; + self.weapon = ""; + self setengagementmindist( 256.0, 0.0 ); + self setengagementmaxdist( 768.0, 1024.0 ); + randchar = codescripts\character::get_random_character( 2 ); + + switch ( randchar ) + { + case 0: + character\character_sp_zombie_dog::main(); + break; + case 1: + character\character_sp_zombie_dog::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_nuked_dog" ); + character\character_sp_zombie_dog::precache(); + character\character_sp_zombie_dog::precache(); +} diff --git a/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_hazmat_1.gsc b/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_hazmat_1.gsc new file mode 100644 index 0000000..5d86d29 --- /dev/null +++ b/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_hazmat_1.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_dlc0_zom_head_als; + +main() +{ + self setmodel( "c_zom_dlc0_zom_haz_body1" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_dlc0_zom_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_dlc0_zom_haz_body1_upclean"; + self.torsodmg2 = "c_zom_dlc0_zom_haz_body1_rarmoff"; + self.torsodmg3 = "c_zom_dlc0_zom_haz_body1_larmoff"; + self.torsodmg5 = "c_zom_dlc0_zom_haz_body1_behead"; + self.legdmg1 = "c_zom_dlc0_zom_haz_body1_lowclean"; + self.legdmg2 = "c_zom_dlc0_zom_haz_body1_rlegoff"; + self.legdmg3 = "c_zom_dlc0_zom_haz_body1_llegoff"; + self.legdmg4 = "c_zom_dlc0_zom_haz_body1_legsoff"; + self.gibspawn1 = "c_zom_dlc0_zom_haz_body1_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_dlc0_zom_haz_body1_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_dlc0_zom_haz_body1_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_dlc0_zom_haz_body1_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_dlc0_zom_haz_body1" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_dlc0_zom_head_als::main() ); + precachemodel( "c_zom_dlc0_zom_haz_body1_upclean" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_rarmoff" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_larmoff" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_behead" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_lowclean" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_rlegoff" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_llegoff" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_legsoff" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_g_rarmspawn" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_g_larmspawn" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_g_rlegspawn" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_g_llegspawn" ); +} diff --git a/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_hazmat_1_beyes.gsc b/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_hazmat_1_beyes.gsc new file mode 100644 index 0000000..5557ab0 --- /dev/null +++ b/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_hazmat_1_beyes.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_dlc0_zom_head_blueeyes_als; + +main() +{ + self setmodel( "c_zom_dlc0_zom_haz_body1" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_dlc0_zom_head_blueeyes_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_dlc0_zom_haz_body1_upclean"; + self.torsodmg2 = "c_zom_dlc0_zom_haz_body1_rarmoff"; + self.torsodmg3 = "c_zom_dlc0_zom_haz_body1_larmoff"; + self.torsodmg5 = "c_zom_dlc0_zom_haz_body1_behead"; + self.legdmg1 = "c_zom_dlc0_zom_haz_body1_lowclean"; + self.legdmg2 = "c_zom_dlc0_zom_haz_body1_rlegoff"; + self.legdmg3 = "c_zom_dlc0_zom_haz_body1_llegoff"; + self.legdmg4 = "c_zom_dlc0_zom_haz_body1_legsoff"; + self.gibspawn1 = "c_zom_dlc0_zom_haz_body1_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_dlc0_zom_haz_body1_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_dlc0_zom_haz_body1_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_dlc0_zom_haz_body1_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_dlc0_zom_haz_body1" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_dlc0_zom_head_blueeyes_als::main() ); + precachemodel( "c_zom_dlc0_zom_haz_body1_upclean" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_rarmoff" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_larmoff" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_behead" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_lowclean" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_rlegoff" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_llegoff" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_legsoff" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_g_rarmspawn" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_g_larmspawn" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_g_rlegspawn" ); + precachemodel( "c_zom_dlc0_zom_haz_body1_g_llegspawn" ); +} diff --git a/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_hazmat_2.gsc b/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_hazmat_2.gsc new file mode 100644 index 0000000..767535f --- /dev/null +++ b/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_hazmat_2.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_dlc0_zom_haz_body2" ); + self.headmodel = "c_zom_dlc0_zom_haz_head_mask"; + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_dlc0_zom_haz_body2_upclean"; + self.torsodmg2 = "c_zom_dlc0_zom_haz_body2_rarmoff"; + self.torsodmg3 = "c_zom_dlc0_zom_haz_body2_larmoff"; + self.torsodmg5 = "c_zom_dlc0_zom_haz_body2_behead"; + self.legdmg1 = "c_zom_dlc0_zom_haz_body2_lowclean"; + self.legdmg2 = "c_zom_dlc0_zom_haz_body2_rlegoff"; + self.legdmg3 = "c_zom_dlc0_zom_haz_body2_llegoff"; + self.legdmg4 = "c_zom_dlc0_zom_haz_body2_legsoff"; + self.gibspawn1 = "c_zom_dlc0_zom_haz_body2_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_dlc0_zom_haz_body2_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_dlc0_zom_haz_body2_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_dlc0_zom_haz_body2_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_dlc0_zom_haz_body2" ); + precachemodel( "c_zom_dlc0_zom_haz_head_mask" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_upclean" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_rarmoff" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_larmoff" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_behead" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_lowclean" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_rlegoff" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_llegoff" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_legsoff" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_g_rarmspawn" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_g_larmspawn" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_g_rlegspawn" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_g_llegspawn" ); +} diff --git a/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_hazmat_2_beyes.gsc b/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_hazmat_2_beyes.gsc new file mode 100644 index 0000000..378f20b --- /dev/null +++ b/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_hazmat_2_beyes.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_dlc0_zom_haz_body2" ); + self.headmodel = "c_zom_dlc0_zom_haz_head_mask_blueeyes"; + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_dlc0_zom_haz_body2_upclean"; + self.torsodmg2 = "c_zom_dlc0_zom_haz_body2_rarmoff"; + self.torsodmg3 = "c_zom_dlc0_zom_haz_body2_larmoff"; + self.torsodmg5 = "c_zom_dlc0_zom_haz_body2_behead"; + self.legdmg1 = "c_zom_dlc0_zom_haz_body2_lowclean"; + self.legdmg2 = "c_zom_dlc0_zom_haz_body2_rlegoff"; + self.legdmg3 = "c_zom_dlc0_zom_haz_body2_llegoff"; + self.legdmg4 = "c_zom_dlc0_zom_haz_body2_legsoff"; + self.gibspawn1 = "c_zom_dlc0_zom_haz_body2_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_dlc0_zom_haz_body2_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_dlc0_zom_haz_body2_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_dlc0_zom_haz_body2_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_dlc0_zom_haz_body2" ); + precachemodel( "c_zom_dlc0_zom_haz_head_mask_blueeyes" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_upclean" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_rarmoff" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_larmoff" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_behead" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_lowclean" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_rlegoff" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_llegoff" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_legsoff" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_g_rarmspawn" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_g_larmspawn" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_g_rlegspawn" ); + precachemodel( "c_zom_dlc0_zom_haz_body2_g_llegspawn" ); +} diff --git a/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_soldier_1.gsc b/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_soldier_1.gsc new file mode 100644 index 0000000..ea4e20a --- /dev/null +++ b/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_soldier_1.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_dlc0_zom_head_als; + +main() +{ + self setmodel( "c_zom_dlc0_zom_sol_body1" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_dlc0_zom_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_dlc0_zom_sol_body1_upclean"; + self.torsodmg2 = "c_zom_dlc0_zom_sol_body1_rarmoff"; + self.torsodmg3 = "c_zom_dlc0_zom_sol_body1_larmoff"; + self.torsodmg5 = "c_zom_dlc0_zom_sol_body1_behead"; + self.legdmg1 = "c_zom_dlc0_zom_sol_body1_lowclean"; + self.legdmg2 = "c_zom_dlc0_zom_sol_body1_rlegoff"; + self.legdmg3 = "c_zom_dlc0_zom_sol_body1_llegoff"; + self.legdmg4 = "c_zom_dlc0_zom_sol_body1_legsoff"; + self.gibspawn1 = "c_zom_dlc0_zom_sol_body1_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_dlc0_zom_sol_body1_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_dlc0_zom_sol_body1_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_dlc0_zom_sol_body1_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_dlc0_zom_sol_body1" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_dlc0_zom_head_als::main() ); + precachemodel( "c_zom_dlc0_zom_sol_body1_upclean" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_rarmoff" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_larmoff" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_behead" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_lowclean" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_rlegoff" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_llegoff" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_legsoff" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_g_rarmspawn" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_g_larmspawn" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_g_rlegspawn" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_g_llegspawn" ); +} diff --git a/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_soldier_1_beyes.gsc b/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_soldier_1_beyes.gsc new file mode 100644 index 0000000..7238f2b --- /dev/null +++ b/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_soldier_1_beyes.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_dlc0_zom_head_blueeyes_als; + +main() +{ + self setmodel( "c_zom_dlc0_zom_sol_body1" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_dlc0_zom_head_blueeyes_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_dlc0_zom_sol_body1_upclean"; + self.torsodmg2 = "c_zom_dlc0_zom_sol_body1_rarmoff"; + self.torsodmg3 = "c_zom_dlc0_zom_sol_body1_larmoff"; + self.torsodmg5 = "c_zom_dlc0_zom_sol_body1_behead"; + self.legdmg1 = "c_zom_dlc0_zom_sol_body1_lowclean"; + self.legdmg2 = "c_zom_dlc0_zom_sol_body1_rlegoff"; + self.legdmg3 = "c_zom_dlc0_zom_sol_body1_llegoff"; + self.legdmg4 = "c_zom_dlc0_zom_sol_body1_legsoff"; + self.gibspawn1 = "c_zom_dlc0_zom_sol_body1_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_dlc0_zom_sol_body1_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_dlc0_zom_sol_body1_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_dlc0_zom_sol_body1_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_dlc0_zom_sol_body1" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_dlc0_zom_head_blueeyes_als::main() ); + precachemodel( "c_zom_dlc0_zom_sol_body1_upclean" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_rarmoff" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_larmoff" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_behead" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_lowclean" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_rlegoff" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_llegoff" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_legsoff" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_g_rarmspawn" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_g_larmspawn" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_g_rlegspawn" ); + precachemodel( "c_zom_dlc0_zom_sol_body1_g_llegspawn" ); +} diff --git a/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_soldier_civ_1.gsc b/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_soldier_civ_1.gsc new file mode 100644 index 0000000..0d96379 --- /dev/null +++ b/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_soldier_civ_1.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_dlc0_zom_head_als; + +main() +{ + self setmodel( "c_zom_dlc0_zom_solciv_body1" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_dlc0_zom_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_dlc0_zom_solciv_body1_upclean"; + self.torsodmg2 = "c_zom_dlc0_zom_solciv_body1_rarmoff"; + self.torsodmg3 = "c_zom_dlc0_zom_solciv_body1_larmoff"; + self.torsodmg5 = "c_zom_dlc0_zom_solciv_body1_behead"; + self.legdmg1 = "c_zom_dlc0_zom_solciv_body1_lowclean"; + self.legdmg2 = "c_zom_dlc0_zom_solciv_body1_rlegoff"; + self.legdmg3 = "c_zom_dlc0_zom_solciv_body1_llegoff"; + self.legdmg4 = "c_zom_dlc0_zom_solciv_body1_legsoff"; + self.gibspawn1 = "c_zom_dlc0_zom_solciv_body1_g_larmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_dlc0_zom_solciv_body1_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_dlc0_zom_solciv_body1_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_dlc0_zom_solciv_body1_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_dlc0_zom_solciv_body1" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_dlc0_zom_head_als::main() ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_upclean" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_rarmoff" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_larmoff" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_behead" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_lowclean" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_rlegoff" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_llegoff" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_legsoff" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_g_larmspawn" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_g_larmspawn" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_g_rlegspawn" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_g_llegspawn" ); +} diff --git a/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_soldier_civ_1_beyes.gsc b/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_soldier_civ_1_beyes.gsc new file mode 100644 index 0000000..af71db3 --- /dev/null +++ b/ZM/Maps/Nuketown/character/c_zom_dlc0_zombie_soldier_civ_1_beyes.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_dlc0_zom_head_blueeyes_als; + +main() +{ + self setmodel( "c_zom_dlc0_zom_solciv_body1" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_dlc0_zom_head_blueeyes_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_dlc0_zom_solciv_body1_upclean"; + self.torsodmg2 = "c_zom_dlc0_zom_solciv_body1_rarmoff"; + self.torsodmg3 = "c_zom_dlc0_zom_solciv_body1_larmoff"; + self.torsodmg5 = "c_zom_dlc0_zom_solciv_body1_behead"; + self.legdmg1 = "c_zom_dlc0_zom_solciv_body1_lowclean"; + self.legdmg2 = "c_zom_dlc0_zom_solciv_body1_rlegoff"; + self.legdmg3 = "c_zom_dlc0_zom_solciv_body1_llegoff"; + self.legdmg4 = "c_zom_dlc0_zom_solciv_body1_legsoff"; + self.gibspawn1 = "c_zom_dlc0_zom_solciv_body1_g_larmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_dlc0_zom_solciv_body1_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_dlc0_zom_solciv_body1_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_dlc0_zom_solciv_body1_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_dlc0_zom_solciv_body1" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_dlc0_zom_head_blueeyes_als::main() ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_upclean" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_rarmoff" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_larmoff" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_behead" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_lowclean" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_rlegoff" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_llegoff" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_legsoff" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_g_larmspawn" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_g_larmspawn" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_g_rlegspawn" ); + precachemodel( "c_zom_dlc0_zom_solciv_body1_g_llegspawn" ); +} diff --git a/ZM/Maps/Nuketown/character/character_sp_zombie_dog.gsc b/ZM/Maps/Nuketown/character/character_sp_zombie_dog.gsc new file mode 100644 index 0000000..43f598a --- /dev/null +++ b/ZM/Maps/Nuketown/character/character_sp_zombie_dog.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "zombie_wolf" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "zombie_wolf" ); +} diff --git a/ZM/Maps/Nuketown/maps/mp/_sticky_grenade.gsc b/ZM/Maps/Nuketown/maps/mp/_sticky_grenade.gsc new file mode 100644 index 0000000..86ae4c3 --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/_sticky_grenade.gsc @@ -0,0 +1,15 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; + +init() +{ + loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" ); + loadfx( "weapon/crossbow/fx_trail_crossbow_blink_red_os" ); +} + +watch_bolt_detonation( owner ) +{ + +} diff --git a/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_down_127.gsc b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_down_127.gsc new file mode 100644 index 0000000..5b1c8da --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_down_127.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_127" ); +} diff --git a/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_down_176.gsc b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_down_176.gsc new file mode 100644 index 0000000..78f6e38 --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_down_176.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_176" ); +} diff --git a/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_down_40.gsc b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_down_40.gsc new file mode 100644 index 0000000..c8c4666 --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_down_40.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_40" ); +} diff --git a/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_down_72.gsc b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_down_72.gsc new file mode 100644 index 0000000..4c6130b --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_down_72.gsc @@ -0,0 +1,12 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + if ( isdefined( self.isdog ) && self.isdog ) + dog_jump_down( 72, 7 ); + else + dosimpletraverse( "jump_down_72" ); +} diff --git a/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_down_96.gsc b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_down_96.gsc new file mode 100644 index 0000000..a051331 --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_down_96.gsc @@ -0,0 +1,12 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + if ( isdefined( self.isdog ) && self.isdog ) + dog_jump_down( 96, 7 ); + else + dosimpletraverse( "jump_down_96" ); +} diff --git a/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_down_fast_40.gsc b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_down_fast_40.gsc new file mode 100644 index 0000000..83218f2 --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_down_fast_40.gsc @@ -0,0 +1,12 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + if ( self.zombie_move_speed == "sprint" ) + dosimpletraverse( "jump_down_fast_40" ); + else + dosimpletraverse( "jump_down_40" ); +} diff --git a/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_up_127.gsc b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_up_127.gsc new file mode 100644 index 0000000..30fbdd3 --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_up_127.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_127" ); +} diff --git a/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_up_154.gsc b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_up_154.gsc new file mode 100644 index 0000000..74e1ca4 --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_up_154.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_154" ); +} diff --git a/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_up_222.gsc b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_up_222.gsc new file mode 100644 index 0000000..9041804 --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_up_222.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_222" ); +} diff --git a/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_up_72.gsc b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_up_72.gsc new file mode 100644 index 0000000..a5452be --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_up_72.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_72" ); +} diff --git a/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_up_96.gsc b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_up_96.gsc new file mode 100644 index 0000000..b8d461d --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_up_96.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_96" ); +} diff --git a/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_up_to_climb.gsc b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_up_to_climb.gsc new file mode 100644 index 0000000..8838e14 --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_jump_up_to_climb.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_to_climb" ); +} diff --git a/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_traverse_garage_door.gsc b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_traverse_garage_door.gsc new file mode 100644 index 0000000..8aa0fca --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/animscripts/traverse/zm_traverse_garage_door.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "traverse_garage_door", 1 ); +} diff --git a/ZM/Maps/Nuketown/maps/mp/createart/zm_nuked_art.gsc b/ZM/Maps/Nuketown/maps/mp/createart/zm_nuked_art.gsc new file mode 100644 index 0000000..fb08cae --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/createart/zm_nuked_art.gsc @@ -0,0 +1,46 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + level.tweakfile = 1; + visionsetnaked( "mp_nuked", 1 ); + setdvar( "r_lightGridEnableTweaks", 1 ); + setdvar( "r_lightGridIntensity", 1.25 ); + setdvar( "r_lightGridContrast", 0.18 ); + setdvar( "scr_fog_exp_halfplane", "639.219" ); + setdvar( "scr_fog_exp_halfheight", "18691.3" ); + setdvar( "scr_fog_nearplane", "138.679" ); + setdvar( "scr_fog_red", "0.806694" ); + setdvar( "scr_fog_green", "0.962521" ); + setdvar( "scr_fog_blue", "0.9624" ); + setdvar( "scr_fog_baseheight", "1145.21" ); + setdvar( "visionstore_glowTweakEnable", "0" ); + setdvar( "visionstore_glowTweakRadius0", "5" ); + setdvar( "visionstore_glowTweakRadius1", "" ); + setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); + setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); + setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); + setdvar( "visionstore_glowTweakBloomIntensity1", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); + start_dist = 138.679; + half_dist = 1011.62; + half_height = 10834.5; + base_height = 1145.21; + fog_r = 0.501961; + fog_g = 0.501961; + fog_b = 0.501961; + fog_scale = 7.5834; + sun_col_r = 0.501961; + sun_col_g = 0.501961; + sun_col_b = 0.501961; + sun_dir_x = -0.99; + sun_dir_y = 0.06; + sun_dir_z = -0.11; + sun_start_ang = 0; + sun_stop_ang = 0; + time = 0; + max_fog_opacity = 0.8546; + setvolfog( start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale, sun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, sun_stop_ang, time, max_fog_opacity ); +} diff --git a/ZM/Maps/Nuketown/maps/mp/createfx/zm_nuked_fx.gsc b/ZM/Maps/Nuketown/maps/mp/createfx/zm_nuked_fx.gsc new file mode 100644 index 0000000..a0cc2b5 --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/createfx/zm_nuked_fx.gsc @@ -0,0 +1,1493 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_linger_core" ); + ent.v["origin"] = ( 445.226, 10827.9, -3660.41 ); + ent.v["angles"] = ( 270, 0, -14 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( 41.525, -2750.68, -75.3277 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( -937.065, -3497.88, -50.1126 ); + ent.v["angles"] = ( 273.652, 322.536, 117.531 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_debris_streamer_volume" ); + ent.v["origin"] = ( 18.2005, 101.9, -54.6617 ); + ent.v["angles"] = ( 270, 0.516025, -0.516014 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_sm_pole" ); + ent.v["origin"] = ( 1081.89, 493.638, 127.047 ); + ent.v["angles"] = ( 270, 0, 141 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_sm_pole" ); + ent.v["origin"] = ( -249.48, -377.549, 200.445 ); + ent.v["angles"] = ( 298, 321, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_sm_pole" ); + ent.v["origin"] = ( 643.139, 700.744, -53.5099 ); + ent.v["angles"] = ( 270, 0, 36 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_sand_blowing_lg" ); + ent.v["origin"] = ( 1873.09, 975.065, 155.143 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 279.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_sand_blowing_lg" ); + ent.v["origin"] = ( -1966.19, 1368.03, 107.328 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 266.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_radioactive_ash_gusty" ); + ent.v["origin"] = ( -41.6646, 630.257, -32.715 ); + ent.v["angles"] = ( 3, 281, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_ceiling_edge_md" ); + ent.v["origin"] = ( 504.862, 667.287, 67.3657 ); + ent.v["angles"] = ( 72.9077, 267.649, -13.2309 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_fire_windblown_md" ); + ent.v["origin"] = ( -709.762, -571.211, 134.819 ); + ent.v["angles"] = ( 354.1, 264.518, -15.6971 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_wood_floor_int" ); + ent.v["origin"] = ( 890.183, 519.432, 118.773 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_wood_floor_int" ); + ent.v["origin"] = ( 776.965, 497.249, 106.67 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm" ); + ent.v["origin"] = ( -187.638, 545.083, -3.0519 ); + ent.v["angles"] = ( 349.396, 207.878, -44.9608 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_eaves_md" ); + ent.v["origin"] = ( -276.783, 1006.11, 76.125 ); + ent.v["angles"] = ( 334.459, 290.689, -4.2706 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_sm_pole" ); + ent.v["origin"] = ( 637.937, 661.921, 73.7494 ); + ent.v["angles"] = ( 347, 285, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm" ); + ent.v["origin"] = ( 1533.28, 73.7367, 5.7648 ); + ent.v["angles"] = ( 0, 258, -45 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_xsm" ); + ent.v["origin"] = ( -287.163, -816.474, 4.5551 ); + ent.v["angles"] = ( 314.389, 248.061, -138.142 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_radioactive_ash_gusty" ); + ent.v["origin"] = ( -1725.6, 567.512, -33 ); + ent.v["angles"] = ( 3, 290, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_radioactive_ash_gusty" ); + ent.v["origin"] = ( 1510.3, 842.699, -59 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 281.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_rubble_md_int" ); + ent.v["origin"] = ( 612.678, 709.124, -48.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 231.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_plume_md_blk_wispy_dist" ); + ent.v["origin"] = ( -596.399, 497.52, 290.26 ); + ent.v["angles"] = ( 26, 276, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_wood_sm_black" ); + ent.v["origin"] = ( 645.654, 668.519, -19.3929 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 237.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_sm" ); + ent.v["origin"] = ( 1449.32, 1110.58, -54.9784 ); + ent.v["angles"] = ( 335, 283.772, 0.574565 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_md" ); + ent.v["origin"] = ( -1907.01, -67.6244, -80.4186 ); + ent.v["angles"] = ( 2, 241, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_md" ); + ent.v["origin"] = ( -93.7951, -820.453, -65 ); + ent.v["angles"] = ( 357, 273, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_md" ); + ent.v["origin"] = ( 1671.55, 260.601, -53.6296 ); + ent.v["angles"] = ( 346, 283, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_md" ); + ent.v["origin"] = ( -1346.46, -234.953, -57.5488 ); + ent.v["angles"] = ( 357, 263, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_sm" ); + ent.v["origin"] = ( -1277.63, 1256.54, 3.8342 ); + ent.v["angles"] = ( 347.005, 237.864, 2.85391 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_md" ); + ent.v["origin"] = ( 129.994, 1168.57, 146.125 ); + ent.v["angles"] = ( 358.068, 261.992, 0.517913 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_xsm" ); + ent.v["origin"] = ( -627.548, -288.422, -19.7478 ); + ent.v["angles"] = ( 6, 256, -26 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm" ); + ent.v["origin"] = ( 579.779, -285.6, -47.0624 ); + ent.v["angles"] = ( 272, 360, 105 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 1958.86, 624.942, -46.2195 ); + ent.v["angles"] = ( 338.131, 284.83, 93.5505 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 2048.79, 341.904, -47.0714 ); + ent.v["angles"] = ( 272, 360, 36 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 1603.57, 599.497, -3.86064 ); + ent.v["angles"] = ( 315.381, 281.951, 87.2322 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 1759.17, 87.4756, -18.1138 ); + ent.v["angles"] = ( 272, 360, 36 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); + ent.v["origin"] = ( 338.176, -555.153, 218.675 ); + ent.v["angles"] = ( 68.0054, 224.425, 47 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); + ent.v["origin"] = ( -228.368, -338.549, 248.159 ); + ent.v["angles"] = ( 36, 270, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); + ent.v["origin"] = ( -637.081, 238.816, 172.508 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_elec_spark_wire_xsm_runner" ); + ent.v["origin"] = ( -862.532, 322.962, 20.2642 ); + ent.v["angles"] = ( 90, 334.669, 64.6695 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); + ent.v["origin"] = ( 562.947, -195.76, 45.7788 ); + ent.v["angles"] = ( 3, 250, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_ceiling_rafter_md" ); + ent.v["origin"] = ( -44.1217, 1280.19, 71.0198 ); + ent.v["angles"] = ( 356.102, 294.872, 177.633 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm" ); + ent.v["origin"] = ( -148.616, 1230.93, 97.875 ); + ent.v["angles"] = ( 0.315608, 299.435, -148.474 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm" ); + ent.v["origin"] = ( -339.905, 986.868, 46.0477 ); + ent.v["angles"] = ( 291.561, 213.792, -103.719 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_ceiling_rafter_md" ); + ent.v["origin"] = ( 486.764, 1088.3, 97.7656 ); + ent.v["angles"] = ( 357, 249, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_xsm" ); + ent.v["origin"] = ( 544.56, 1081.85, 115.174 ); + ent.v["angles"] = ( 346.168, 246.191, -71.5734 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 732.396, 12.911, 181.087 ); + ent.v["angles"] = ( 281.384, 156.871, 127.577 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_xsm" ); + ent.v["origin"] = ( 745.596, 65.6857, 209.106 ); + ent.v["angles"] = ( 14.4775, 278.496, -3.96713 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm_pole" ); + ent.v["origin"] = ( 870.11, 816.714, 107.283 ); + ent.v["angles"] = ( 15.9545, 287.701, -6.3861 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm" ); + ent.v["origin"] = ( 810.803, 772.44, -23.1783 ); + ent.v["angles"] = ( 341.553, 218.663, -10.2158 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm_pole" ); + ent.v["origin"] = ( 825.547, 738.247, 23.7776 ); + ent.v["angles"] = ( 272, 285, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 820.731, 709.463, -53.875 ); + ent.v["angles"] = ( 359.53, 287, -0.8831 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 705.286, 679.889, -53.875 ); + ent.v["angles"] = ( 359.245, 266, -0.656188 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_burning_ash_gusty" ); + ent.v["origin"] = ( 77.2403, -78.4967, -45.9001 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 278.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_burning_ash_gusty" ); + ent.v["origin"] = ( -1584.16, -211.734, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 278.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_burning_ash_gusty" ); + ent.v["origin"] = ( 1411.21, -381.773, -80.896 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 275.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_radioactive_embers" ); + ent.v["origin"] = ( 61.5189, 1775.38, 304.187 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_radioactive_embers_crater" ); + ent.v["origin"] = ( -109.662, 4081.69, 849.8 ); + ent.v["angles"] = ( 19, 271, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_wall_wood_ext_md" ); + ent.v["origin"] = ( -437.299, 533.905, 194.518 ); + ent.v["angles"] = ( 0, 345, 66 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_sm_pole" ); + ent.v["origin"] = ( -487.159, 506.119, 241.591 ); + ent.v["angles"] = ( 336.811, 154.342, -42.8908 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_pole_md_long" ); + ent.v["origin"] = ( -572.404, 575.137, 265.125 ); + ent.v["angles"] = ( 314.125, 255.325, 155.6 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_sm_pole" ); + ent.v["origin"] = ( -695.51, 525.979, 265.379 ); + ent.v["angles"] = ( 331.322, 319.284, 72.4991 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_rubble_md_int" ); + ent.v["origin"] = ( -511.016, 520.297, 86.4583 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 248.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( -478.575, 437.648, 220.639 ); + ent.v["angles"] = ( 339.66, 247.856, 84.5675 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( -504.978, 358.411, 221.958 ); + ent.v["angles"] = ( 329.708, 248.947, 84.0991 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_fire_windblown_md" ); + ent.v["origin"] = ( -703.411, -845.709, 130.691 ); + ent.v["angles"] = ( 354.1, 264.518, -15.6971 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_fire_windblown_md" ); + ent.v["origin"] = ( -609.896, -1223.16, 193.685 ); + ent.v["angles"] = ( 339.658, 260.34, 16.2592 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_sm" ); + ent.v["origin"] = ( -1049.36, -1107.05, 175.154 ); + ent.v["angles"] = ( 355.788, 332.293, 82.0389 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_fire_windblown_md" ); + ent.v["origin"] = ( 712.441, -626.117, 84.125 ); + ent.v["angles"] = ( 350.706, 279.562, 0.696748 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_sm" ); + ent.v["origin"] = ( 642.866, -692.345, 96.7364 ); + ent.v["angles"] = ( 1.87194, 328.296, 47.287 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm_pole" ); + ent.v["origin"] = ( 883.783, -429.588, 31.125 ); + ent.v["angles"] = ( 271, 180, -86 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm_pole" ); + ent.v["origin"] = ( 823.72, -389.939, 48.125 ); + ent.v["angles"] = ( 13.1575, 317.775, 44.5273 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_fire_windblown_md" ); + ent.v["origin"] = ( 383.536, 1010.29, 131.652 ); + ent.v["angles"] = ( 354.095, 251.449, 0.652758 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_wall_wood_ext_md" ); + ent.v["origin"] = ( -436.711, 1145.36, 1.49848 ); + ent.v["angles"] = ( 0, 203, -46 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_xsm" ); + ent.v["origin"] = ( -321.146, -209.831, -14.0275 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 277.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm" ); + ent.v["origin"] = ( 104.142, -479.193, -25.978 ); + ent.v["angles"] = ( 9.67821, 221.348, -74.5512 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm" ); + ent.v["origin"] = ( -26.1763, -437.007, -19.2142 ); + ent.v["angles"] = ( 0.911239, 230.547, 4.81652 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 88.3389, -508.587, -59.8167 ); + ent.v["angles"] = ( 299.272, 66.5849, 48.0344 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_fast" ); + ent.v["origin"] = ( 54.516, -511.388, -36.7732 ); + ent.v["angles"] = ( 6, 276, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_smolder_area_sm" ); + ent.v["origin"] = ( 1299.44, 638.812, -55.783 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 350.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_smolder_area_sm" ); + ent.v["origin"] = ( 1087.07, 625.523, -57.2874 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_rubble_md_int" ); + ent.v["origin"] = ( 902.073, 355.675, 93.236 ); + ent.v["angles"] = ( 3, 291, 6 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 939.399, 762.949, 31.9496 ); + ent.v["angles"] = ( 321.957, 18.3462, 86.1918 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_nic_fire_ceiling_edge_sm" ); + ent.v["origin"] = ( 833.663, 695.377, 75.8235 ); + ent.v["angles"] = ( 81.6093, 298.882, 15.4692 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_ceiling_md" ); + ent.v["origin"] = ( 840.874, 642.215, 90.875 ); + ent.v["angles"] = ( 86, 304, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 862.286, 741.768, -39.4932 ); + ent.v["angles"] = ( 295.064, 22.428, 82.9064 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 1126.11, 718.831, -64.8801 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 305.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 1206.55, 652.177, -63 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 289.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 1436.12, 446.719, -54.4219 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 286.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 1496.4, 260.401, -63 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 286.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 1379.63, 437.967, -55.0723 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 286.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 1699.91, 847.433, -31.1341 ); + ent.v["angles"] = ( 0, 286, 10 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm_pole" ); + ent.v["origin"] = ( 1258.8, 1113.46, -116.975 ); + ent.v["angles"] = ( 301.159, 102.265, 0.975478 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_xsm" ); + ent.v["origin"] = ( 1150.71, 998.591, -76.651 ); + ent.v["angles"] = ( 8.73988, 282.726, 27.5934 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 1199.56, 1014.64, 3.10688 ); + ent.v["angles"] = ( 315.397, 293.367, 176.746 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 817.827, 791.393, -33.1773 ); + ent.v["angles"] = ( 322.371, 292.56, -94.7225 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm" ); + ent.v["origin"] = ( 970.598, 775.64, 10.36 ); + ent.v["angles"] = ( 322.37, 292.56, -39.7225 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_pole_md_long" ); + ent.v["origin"] = ( 1003.54, 703.304, 91.6861 ); + ent.v["angles"] = ( 340.221, 283.986, -91.0187 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm" ); + ent.v["origin"] = ( 1010.57, 628.573, 8.27523 ); + ent.v["angles"] = ( 294.421, 317.647, -176.431 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm_pole" ); + ent.v["origin"] = ( 1036.8, 599.061, 129.51 ); + ent.v["angles"] = ( 342.391, 288.54, 177.155 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_smolder_area_sm" ); + ent.v["origin"] = ( 1167.18, 433.861, 77.6994 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 288.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_smolder_area_sm" ); + ent.v["origin"] = ( 877.835, 365.641, 91.4731 ); + ent.v["angles"] = ( 10.4144, 281.025, 5.88351 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_xsm" ); + ent.v["origin"] = ( 902.363, 336.777, 250.031 ); + ent.v["angles"] = ( 4.40402, 286.154, 131.967 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_nic_fire_ceiling_edge_sm" ); + ent.v["origin"] = ( 752.705, 132.337, 216.57 ); + ent.v["angles"] = ( 85.0493, 102.932, -150.795 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_nic_fire_ceiling_edge_sm" ); + ent.v["origin"] = ( 766.26, 166.922, 220.636 ); + ent.v["angles"] = ( 84.6047, 129.841, -119.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_lf_zmb_nuke_sun" ); + ent.v["origin"] = ( -338396, -327676, 221727 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_xsm" ); + ent.v["origin"] = ( 350.535, -1031.63, -39.8235 ); + ent.v["angles"] = ( 3.09771, 264.722, 22.2979 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_xsm" ); + ent.v["origin"] = ( -46.2206, 1184.99, -48.697 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 305.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( -170.6, 1199.31, -49.358 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_nic_fire_ceiling_edge_sm" ); + ent.v["origin"] = ( 489.115, 1020.15, 98.9513 ); + ent.v["angles"] = ( 89.9128, 90.2751, -178.729 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( -281.018, 504.195, 21.7972 ); + ent.v["angles"] = ( 291.608, 257.58, 59.7848 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( -455.244, 462.779, 90.6362 ); + ent.v["angles"] = ( 0, 255, -73 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm" ); + ent.v["origin"] = ( -427.615, 399.407, 65.8158 ); + ent.v["angles"] = ( 345.654, 233.354, -97.6119 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm" ); + ent.v["origin"] = ( -472.01, 421.038, 132.085 ); + ent.v["angles"] = ( 352.104, 242.192, -70.85 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_sm" ); + ent.v["origin"] = ( 226.868, -252.836, -57.6819 ); + ent.v["angles"] = ( 358.982, 266.028, -0.809154 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_sm" ); + ent.v["origin"] = ( -436.565, 952.713, -62 ); + ent.v["angles"] = ( 1.21988, 289.002, -0.36118 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_sm" ); + ent.v["origin"] = ( 340.212, 816.277, -59.7699 ); + ent.v["angles"] = ( 0.981772, 266, -0.809142 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_sm" ); + ent.v["origin"] = ( -1485.23, 486.065, -59.6137 ); + ent.v["angles"] = ( 358.775, 253.035, -1.00939 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); + ent.v["origin"] = ( -2263.81, -889.092, -24.1558 ); + ent.v["angles"] = ( 270, 357.51, 80.4895 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); + ent.v["origin"] = ( -2266.79, -1297.7, -65.1407 ); + ent.v["angles"] = ( 359.001, 275.996, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); + ent.v["origin"] = ( -2389.42, -837.586, -110.366 ); + ent.v["angles"] = ( 359.086, 254.994, 0.406816 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_fire_lg_black" ); + ent.v["origin"] = ( -2279.62, -960.342, 9.62501 ); + ent.v["angles"] = ( 285, 258, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( -695.94, -300.493, -16.9227 ); + ent.v["angles"] = ( 335.002, 301.314, 25.2887 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm" ); + ent.v["origin"] = ( -601.21, -398.426, 44.668 ); + ent.v["angles"] = ( 330.244, 230.725, -25.9171 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm" ); + ent.v["origin"] = ( -766.159, -344.729, -15.3255 ); + ent.v["angles"] = ( 279.292, 278.179, -131.334 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_xsm" ); + ent.v["origin"] = ( -933.685, -354.732, -18.6244 ); + ent.v["angles"] = ( 270, 0, 150 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_eaves_md_right" ); + ent.v["origin"] = ( -1029.84, -596.344, 101.689 ); + ent.v["angles"] = ( 9.97539, 208.061, 0.704702 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 484.874, 197.525, 62.7568 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 293.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 546.028, -856.478, 96.6235 ); + ent.v["angles"] = ( 344, 293, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 370.921, -171.36, -26.4123 ); + ent.v["angles"] = ( 316, 293, 36 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_nic_fire_building_md_dist" ); + ent.v["origin"] = ( 1862.85, -317.07, -95.7691 ); + ent.v["angles"] = ( 358.623, 239.058, -4.80797 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_nic_fire_building_md_dist" ); + ent.v["origin"] = ( 2140.39, -156.88, -123.797 ); + ent.v["angles"] = ( 357.889, 230.084, -4.53358 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_nic_fire_building_md_dist" ); + ent.v["origin"] = ( 4520.86, -20.4233, -31.2087 ); + ent.v["angles"] = ( 358.623, 239.058, -4.80797 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_nic_fire_building_md_dist" ); + ent.v["origin"] = ( 4611.85, 276.534, -56.3477 ); + ent.v["angles"] = ( 358.719, 275.176, -4.69962 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_nic_fire_building_md_dist" ); + ent.v["origin"] = ( -2045.06, 1057.59, -79.4201 ); + ent.v["angles"] = ( 356.919, 251.225, -3.77449 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_nic_fire_building_md_dist" ); + ent.v["origin"] = ( -2295.18, 879.646, -107.663 ); + ent.v["angles"] = ( 356.919, 251.225, -3.77449 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_nic_fire_building_md_dist" ); + ent.v["origin"] = ( -2273.14, -800.201, -120.875 ); + ent.v["angles"] = ( 353.999, 290.636, -4.89762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_plume_md_blk_wispy_dist" ); + ent.v["origin"] = ( -763.556, -613.056, 152.35 ); + ent.v["angles"] = ( 16, 276, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_plume_md_blk_wispy_dist" ); + ent.v["origin"] = ( 751.634, -675.851, 97.0018 ); + ent.v["angles"] = ( 12, 276, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm" ); + ent.v["origin"] = ( -1672.58, 752.365, 71.8731 ); + ent.v["angles"] = ( 356.082, 314.264, 25.1809 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm" ); + ent.v["origin"] = ( -1629.84, 762.029, -38 ); + ent.v["angles"] = ( 272, 0, 107 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm" ); + ent.v["origin"] = ( -1808.34, 798.464, -45 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 317.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_nuclear_lightning_runner" ); + ent.v["origin"] = ( 17288.3, -29227.3, 63550.7 ); + ent.v["angles"] = ( 270, 357.51, 80.4895 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_nuclear_lightning_runner" ); + ent.v["origin"] = ( 63900.4, 27524.3, 76800.3 ); + ent.v["angles"] = ( 270, 357.51, 80.4895 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_nuclear_lightning_runner" ); + ent.v["origin"] = ( -66762.3, 4052.32, 92128.8 ); + ent.v["angles"] = ( 270, 357.51, 80.4895 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_nuclear_lightning_runner" ); + ent.v["origin"] = ( -1851.37, -132734, 93025.4 ); + ent.v["angles"] = ( 270, 0.65106, -177.651 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_nuclear_lightning_runner" ); + ent.v["origin"] = ( 126197, -18115.3, 71243.8 ); + ent.v["angles"] = ( 270, 0.65106, -177.651 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_nuclear_lightning_runner" ); + ent.v["origin"] = ( -52580.2, -13623, 45759.2 ); + ent.v["angles"] = ( 270, 357.51, 80.4895 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_sm" ); + ent.v["origin"] = ( 1005.48, 1161.97, -130.671 ); + ent.v["angles"] = ( 337.777, 285.349, -3.40055 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( -96.2962, -2298.03, -48.9383 ); + ent.v["angles"] = ( 354.204, 288.079, -1.55846 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_nic_fire_building_md_dist" ); + ent.v["origin"] = ( 4894.47, 564.066, -72.9304 ); + ent.v["angles"] = ( 1.07245, 303.079, -14.7514 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_ash_embers_up_lg" ); + ent.v["origin"] = ( 724.001, -656.697, 124.384 ); + ent.v["angles"] = ( 1.92204, 279.101, -3.20506 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_ash_embers_up_lg" ); + ent.v["origin"] = ( -537.17, 533.386, 272.409 ); + ent.v["angles"] = ( 356, 279, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_exp_perk_impact_ext" ); + ent.v["origin"] = ( -84.0686, 733.174, -64 ); + ent.v["angles"] = ( 270, 0, 25 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 502; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_rubble_md_int" ); + ent.v["origin"] = ( 751.718, 270.039, 93.7874 ); + ent.v["angles"] = ( 6, 244, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 652.838, 336.776, 86.4649 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 259.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_xsm" ); + ent.v["origin"] = ( 581.059, 305.474, 227.486 ); + ent.v["angles"] = ( 0, 293, -177 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_xsm" ); + ent.v["origin"] = ( 644.644, 269.331, 235.694 ); + ent.v["angles"] = ( 7.1649, 277.993, -121.838 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm" ); + ent.v["origin"] = ( 798.918, 227.273, 223.815 ); + ent.v["angles"] = ( 18.0053, 222.798, -98.529 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_exp_perk_impact_ext" ); + ent.v["origin"] = ( -67.7972, 266.944, -43.6904 ); + ent.v["angles"] = ( 270, 0, 25 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 666; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_exp_perk_impact_int" ); + ent.v["origin"] = ( -448.66, 612.547, -64.2531 ); + ent.v["angles"] = ( 270, 1.48787, -22.4878 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 501; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_exp_perk_impact_int_shockwave" ); + ent.v["origin"] = ( -444.488, 621.286, -64.48 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 71.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 501; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_exp_perk_impact_int" ); + ent.v["origin"] = ( 795.783, -70.8028, -61.6158 ); + ent.v["angles"] = ( 270, 0, -72 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 503; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_exp_perk_impact_int_shockwave" ); + ent.v["origin"] = ( 801.75, -77.1695, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 198.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 503; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_exp_perk_impact_int" ); + ent.v["origin"] = ( -835.375, 64.6386, -54.6829 ); + ent.v["angles"] = ( 270, 0, -60 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 504; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_exp_perk_impact_int_shockwave" ); + ent.v["origin"] = ( -842.976, 52.3471, -56.0671 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 111.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 504; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_exp_perk_impact_int_shockwave" ); + ent.v["origin"] = ( 719.362, 50.6538, 78.4329 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 155.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 505; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_exp_perk_impact_int" ); + ent.v["origin"] = ( 718.327, 54.9845, 79.8171 ); + ent.v["angles"] = ( 270, 0, 15 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 505; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_exp_perk_impact_ext" ); + ent.v["origin"] = ( 1621.1, 955.583, -61.2986 ); + ent.v["angles"] = ( 270, 16.1094, -1.10941 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 506; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_exp_perk_impact_ext" ); + ent.v["origin"] = ( -2031.07, 232.356, -62.698 ); + ent.v["angles"] = ( 270, 16.1094, -1.10941 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 507; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_exp_perk_impact_ext" ); + ent.v["origin"] = ( -1692.58, 960.953, -64 ); + ent.v["angles"] = ( 270, 16.1094, -1.10941 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 508; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_exp_perk_impact_ext" ); + ent.v["origin"] = ( 2041.86, 154.715, -63.5821 ); + ent.v["angles"] = ( 270, 16.1094, -1.10941 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 509; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_exp_perk_impact_int" ); + ent.v["origin"] = ( 1357.97, 580.943, -56.7789 ); + ent.v["angles"] = ( 270, 0, -73 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 510; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_exp_perk_impact_int_shockwave" ); + ent.v["origin"] = ( 1359.34, 581.444, -56.7662 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 107.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 510; + ent = maps\mp\_utility::createexploder( "fx_smk_smolder_gray_fast" ); + ent.v["origin"] = ( 1348.08, 601.578, -48.804 ); + ent.v["angles"] = ( 297, 102, 21 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 510; + ent = maps\mp\_utility::createexploder( "fx_smk_smolder_gray_fast" ); + ent.v["origin"] = ( 2031.87, 170.67, -63.3168 ); + ent.v["angles"] = ( 297, 102, 21 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 509; + ent = maps\mp\_utility::createexploder( "fx_smk_smolder_gray_fast" ); + ent.v["origin"] = ( 1615.58, 951.798, -48.0679 ); + ent.v["angles"] = ( 350, 263, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 506; + ent = maps\mp\_utility::createexploder( "fx_smk_smolder_gray_slow" ); + ent.v["origin"] = ( 786.688, -81.2597, -54 ); + ent.v["angles"] = ( 358.746, 268.447, 32.1635 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 503; + ent = maps\mp\_utility::createexploder( "fx_smk_smolder_gray_slow" ); + ent.v["origin"] = ( 705.493, 54.8815, 85.125 ); + ent.v["angles"] = ( 0.432776, 212.866, -8.54822 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 505; + ent = maps\mp\_utility::createexploder( "fx_smk_smolder_gray_fast" ); + ent.v["origin"] = ( -90.7017, 726.382, -64 ); + ent.v["angles"] = ( 356.648, 290.836, 19.5181 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 502; + ent = maps\mp\_utility::createexploder( "fx_smk_smolder_gray_fast" ); + ent.v["origin"] = ( -448.82, 622.422, -55.3517 ); + ent.v["angles"] = ( 348.817, 314.792, 16.4361 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 501; + ent = maps\mp\_utility::createexploder( "fx_smk_smolder_gray_slow" ); + ent.v["origin"] = ( -843.836, 65.1143, -43.875 ); + ent.v["angles"] = ( 347.327, 182.037, -18.1646 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 504; + ent = maps\mp\_utility::createexploder( "fx_smk_smolder_gray_fast" ); + ent.v["origin"] = ( -1687.56, 962.63, -54 ); + ent.v["angles"] = ( 337.478, 268.869, 0.613819 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 508; + ent = maps\mp\_utility::createexploder( "fx_smk_smolder_gray_fast" ); + ent.v["origin"] = ( -2030.81, 237.488, -47.4957 ); + ent.v["angles"] = ( 349.543, 300.994, -34.6538 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 507; + ent = maps\mp\_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); + ent.v["origin"] = ( 758.039, 368.914, 260.544 ); + ent.v["angles"] = ( 26.2469, 272.323, -25.0868 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); + ent.v["origin"] = ( 536.447, 309.012, 250.579 ); + ent.v["angles"] = ( 32.9779, 305.74, 5.92861 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); + ent.v["origin"] = ( 714.263, 114.348, 224.186 ); + ent.v["angles"] = ( 42.4676, 260.329, -23.3999 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); + ent.v["origin"] = ( 900.685, 460.238, 232.833 ); + ent.v["angles"] = ( 33.1859, 265.055, -20.4905 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); + ent.v["origin"] = ( 856.037, 457.029, 191.592 ); + ent.v["angles"] = ( 7.57328, 274.281, -7.18966 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_sm" ); + ent.v["origin"] = ( 38.9442, 357.353, 48.0998 ); + ent.v["angles"] = ( 13.3813, 348.185, -38.7605 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); + ent.v["origin"] = ( 38.6534, 546.094, 53.3111 ); + ent.v["angles"] = ( 12.7355, 291.767, 3.0367 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); + ent.v["origin"] = ( -72.2776, 1146.67, 28.1412 ); + ent.v["angles"] = ( 1.05724, 285.143, 2.86748 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); + ent.v["origin"] = ( -539.143, 599.544, 228.286 ); + ent.v["angles"] = ( 26.8589, 254.988, -11.8748 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_sm" ); + ent.v["origin"] = ( -777.084, 593.841, 195.875 ); + ent.v["angles"] = ( 31.8369, 246.503, -10.3563 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_sm_pole" ); + ent.v["origin"] = ( -765.656, 676.502, 232.931 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 252.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_sm_pole" ); + ent.v["origin"] = ( -857.199, 729.038, 244.187 ); + ent.v["angles"] = ( 3.25894, 340.925, 117.052 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); + ent.v["origin"] = ( -739.369, 728.214, 159.875 ); + ent.v["angles"] = ( 9.2012, 258.681, -10.7176 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); + ent.v["origin"] = ( -740.655, 700.344, 235.875 ); + ent.v["angles"] = ( 54.8516, 274.975, 5.78444 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); + ent.v["origin"] = ( -890.777, 786.765, 144.538 ); + ent.v["angles"] = ( 1.86959, 269.11, -8.99706 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); + ent.v["origin"] = ( -834.546, 78.237, 104.908 ); + ent.v["angles"] = ( 50.4017, 243.511, -17.8334 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); + ent.v["origin"] = ( -971.698, 106.477, 112.158 ); + ent.v["angles"] = ( 53.9039, 272.917, 10.1142 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_nuked_water_stream_radioactive_thin" ); + ent.v["origin"] = ( -827.841, 562.784, 72.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_nuked_water_stream_radioactive_thin" ); + ent.v["origin"] = ( -988.132, 474.414, 74.344 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_nuked_water_stream_radioactive_spatter" ); + ent.v["origin"] = ( -826.169, 565.039, -55.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_nuked_water_stream_radioactive_spatter" ); + ent.v["origin"] = ( -984.647, 473.859, -55.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_sm" ); + ent.v["origin"] = ( -1581.76, 63.3593, -5.97322 ); + ent.v["angles"] = ( 338.551, 281.573, 17.906 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_sm" ); + ent.v["origin"] = ( -1398.31, 100.802, -4.54848 ); + ent.v["angles"] = ( 340.749, 275.707, 12.0232 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_ash_embers_up_lg" ); + ent.v["origin"] = ( -704.127, -563.141, 152.04 ); + ent.v["angles"] = ( 343.152, 305.492, -12.1529 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_ash_embers_up_lg" ); + ent.v["origin"] = ( -621.927, -1220.26, 192.207 ); + ent.v["angles"] = ( 359.121, 313.849, -6.13558 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_xsm" ); + ent.v["origin"] = ( 951.777, 361.991, 229.199 ); + ent.v["angles"] = ( 4.40401, 286.154, -113.033 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); + ent.v["origin"] = ( 757.662, 283.895, 69.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 350.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 511; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); + ent.v["origin"] = ( 693.471, 167.917, 224.787 ); + ent.v["angles"] = ( 357.001, 41.9972, 0.104802 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 511; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); + ent.v["origin"] = ( -622.128, 431.41, 68.875 ); + ent.v["angles"] = ( 357.011, 38.9931, 0.261735 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 511; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); + ent.v["origin"] = ( -902.323, 495.906, 67.3331 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 42.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 511; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); + ent.v["origin"] = ( -753.758, 632.906, 229.217 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 339.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 511; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); + ent.v["origin"] = ( -899.967, 511.921, 192.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 15.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 511; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); + ent.v["origin"] = ( -1122.69, 603.186, 70.9287 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 511; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); + ent.v["origin"] = ( 615.005, 564.502, 97.4658 ); + ent.v["angles"] = ( 15.3598, 122.284, 9.50017 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 511; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); + ent.v["origin"] = ( 536.657, 111.88, 67.7328 ); + ent.v["angles"] = ( 357.374, 99.7013, 2.18813 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 511; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); + ent.v["origin"] = ( 982.398, 300.54, 67.875 ); + ent.v["angles"] = ( 356.623, 130.736, 0.522271 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 511; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); + ent.v["origin"] = ( 1239.46, 335.822, 72.875 ); + ent.v["angles"] = ( 3.15055, 296.715, -1.32492 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 511; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_xsm" ); + ent.v["origin"] = ( 1103.83, 426.366, 27.9148 ); + ent.v["angles"] = ( 347.196, 290.515, -31.9129 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( 1121.59, 361.034, 20.394 ); + ent.v["angles"] = ( 331.219, 291.431, -93.2406 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow" ); + ent.v["origin"] = ( 776.715, 679.094, -56.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 294.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( -1856.48, 846.551, 61.1532 ); + ent.v["angles"] = ( 344.855, 304.04, -17.7261 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm_pole" ); + ent.v["origin"] = ( -990.401, 701.174, 138.432 ); + ent.v["angles"] = ( 271, 81, -36 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm_pole" ); + ent.v["origin"] = ( -1057.11, 728.051, 191.199 ); + ent.v["angles"] = ( 4.66833, 342.211, 93.8223 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( -1044.92, 530.902, 149.229 ); + ent.v["angles"] = ( 337.009, 246.09, 86.8292 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( -967.441, 746.726, 107.668 ); + ent.v["angles"] = ( 321.009, 246.15, 89.7976 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_linger_lit_z" ); + ent.v["origin"] = ( -888.748, 167.505, -56.875 ); + ent.v["angles"] = ( 305.852, 224.678, -90.0354 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow" ); + ent.v["origin"] = ( -846.922, 434.851, 100.5 ); + ent.v["angles"] = ( 351, 209, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_smolder_gray_slow" ); + ent.v["origin"] = ( -587.957, 515.134, 103.743 ); + ent.v["angles"] = ( 356.496, 276.254, -8.29492 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_linger_lit" ); + ent.v["origin"] = ( 18.3445, 347.718, 40.6696 ); + ent.v["angles"] = ( 30.9725, 337.299, 21.0652 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_linger_lit" ); + ent.v["origin"] = ( -53.8461, 1118.8, 28.125 ); + ent.v["angles"] = ( 25, 280.774, -11.8562 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_linger_lit" ); + ent.v["origin"] = ( 750.533, 183.32, 93.125 ); + ent.v["angles"] = ( 327.188, 229.439, 4.59922 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); + ent.v["origin"] = ( 721.942, 125.367, 69.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 62.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0.3; + ent.v["exploder"] = 511; + ent = maps\mp\_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); + ent.v["origin"] = ( 1034.01, 131.68, 207.459 ); + ent.v["angles"] = ( 358.003, 193.8, -2.77325 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 511; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_fireplace_md" ); + ent.v["origin"] = ( 683.285, 377.83, -49.5459 ); + ent.v["angles"] = ( 274, 180, -72 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_radiation_140x300" ); + ent.v["origin"] = ( -891.539, 515.361, -55.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 261.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_radiation_140x300" ); + ent.v["origin"] = ( -896.733, 542.604, 80.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 203.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_elec_spark_wire_xsm_runner" ); + ent.v["origin"] = ( -1041.55, 519.275, 101.507 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 45.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createloopeffect( "fx_fire_sm_smolder" ); + ent.v["origin"] = ( -76.2322, 91.6051, -60.0491 ); + ent.v["angles"] = ( 11.7408, 83.7822, 49.2868 ); + ent.v["type"] = "loopfx"; + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_ray_grate_warm" ); + ent.v["origin"] = ( 550.155, 280.534, 243.017 ); + ent.v["angles"] = ( 60.5506, 55.7581, 117.849 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_ray_grate_warm" ); + ent.v["origin"] = ( 640.509, 292.827, 248.176 ); + ent.v["angles"] = ( 58.8515, 53.4092, 124.99 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_ray_grate_warm" ); + ent.v["origin"] = ( 701.585, 91.2234, 222.035 ); + ent.v["angles"] = ( 68.6387, 46.439, 89.4071 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_ray_grate_warm" ); + ent.v["origin"] = ( -579.39, 422.91, 282.327 ); + ent.v["angles"] = ( 79.267, 103.447, 37.1853 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_ray_grate_warm" ); + ent.v["origin"] = ( -528.27, 446.041, 258.311 ); + ent.v["angles"] = ( 68.8982, 61.2584, -5.38676 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_ray_grate_warm" ); + ent.v["origin"] = ( 669.56, 48.9236, 238.125 ); + ent.v["angles"] = ( 70.1478, 53.8143, 23.3122 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide" ); + ent.v["origin"] = ( 905.223, 352.314, 109.825 ); + ent.v["angles"] = ( 305.884, 219.334, 133.147 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide_streak" ); + ent.v["origin"] = ( 1003.55, 403.728, 115.433 ); + ent.v["angles"] = ( 305.884, 219.334, 133.147 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); + ent.v["origin"] = ( 1048.19, 98.7792, 2.43868 ); + ent.v["angles"] = ( 316.848, 16.5884, -93.6101 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide_streak" ); + ent.v["origin"] = ( -894.866, 173.81, -62.875 ); + ent.v["angles"] = ( 300.234, 213.189, 150.527 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide_streak" ); + ent.v["origin"] = ( -786.558, 153.172, -26.3997 ); + ent.v["angles"] = ( 300.234, 213.189, 150.527 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide_streak_1s" ); + ent.v["origin"] = ( -907.393, 666.849, 32.1068 ); + ent.v["angles"] = ( 302.859, 91.0294, 20.9428 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide_streak" ); + ent.v["origin"] = ( -867.067, 580.141, 109.107 ); + ent.v["angles"] = ( 317.956, 76.5415, 102.488 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide_streak_1s" ); + ent.v["origin"] = ( -572.652, 509.568, -50.7644 ); + ent.v["angles"] = ( 308.279, 126.711, -2.20114 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_light_ray_grate_warm" ); + ent.v["origin"] = ( -751.485, 690.114, 198.125 ); + ent.v["angles"] = ( 40.3701, 263.547, -91.4733 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide" ); + ent.v["origin"] = ( -820.457, 418.156, 64.0783 ); + ent.v["angles"] = ( 300.856, 220.363, 18.3297 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide_streak" ); + ent.v["origin"] = ( -805.39, 586.709, 104.125 ); + ent.v["angles"] = ( 304.845, 74.9583, 104.122 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_linger_lit_slow" ); + ent.v["origin"] = ( -660.76, 641.186, 102.866 ); + ent.v["angles"] = ( 51.0816, 285.502, 85.9167 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_smk_linger_lit_z" ); + ent.v["origin"] = ( -912.221, 742.967, 155.488 ); + ent.v["angles"] = ( 21.4677, 336.379, 94.7282 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide_streak_1s" ); + ent.v["origin"] = ( -625.866, 472.437, -50 ); + ent.v["angles"] = ( 310.239, 109.613, -0.883288 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_nuked_light_ray_streaks_1s" ); + ent.v["origin"] = ( -677.512, 592.392, 46.125 ); + ent.v["angles"] = ( 318.803, 294.406, -2.45177 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_nuked_light_ray_streaks_1s" ); + ent.v["origin"] = ( -851.032, 650.305, 108.125 ); + ent.v["angles"] = ( 337.322, 223.59, 48.5054 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide_streak_1s" ); + ent.v["origin"] = ( -623.865, 549.649, -48.4828 ); + ent.v["angles"] = ( 299.966, 109.834, 46.8043 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createexploder( "fx_cloud_cover_flat" ); + ent.v["origin"] = ( 22367.2, 18595.2, 5624.66 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 676; + ent = maps\mp\_utility::createexploder( "fx_cloud_cover_flat" ); + ent.v["origin"] = ( -24470.6, 26405.6, 5199.8 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 676; + ent = maps\mp\_utility::createexploder( "fx_cloud_cover_flat" ); + ent.v["origin"] = ( 37860.6, 21667.1, 4713.99 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 676; + ent = maps\mp\_utility::createexploder( "fx_cloud_cover_flat" ); + ent.v["origin"] = ( -32651.2, 15251.8, 4013.16 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 676; + ent = maps\mp\_utility::createexploder( "fx_cloud_cover_flat" ); + ent.v["origin"] = ( 30523.3, -4471.4, 3328.24 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 676; + ent = maps\mp\_utility::createexploder( "fx_cloud_cover_volume" ); + ent.v["origin"] = ( 12900.7, -11077.4, 7956.09 ); + ent.v["angles"] = ( 279, 140, -90 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 676; + ent = maps\mp\_utility::createexploder( "fx_cloud_cover_volume" ); + ent.v["origin"] = ( -16962.3, -3560.39, 6221.83 ); + ent.v["angles"] = ( 270, 354.289, 141.711 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 676; + ent = maps\mp\_utility::createexploder( "fx_cloud_cover_volume" ); + ent.v["origin"] = ( 433.252, 24186.5, 7322.05 ); + ent.v["angles"] = ( 270, 0, 85 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 676; + ent = maps\mp\_utility::createexploder( "fx_cloud_cover_volume" ); + ent.v["origin"] = ( -3556.4, -17019.2, 5327.17 ); + ent.v["angles"] = ( 270, 357.797, 110.203 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 676; + ent = maps\mp\_utility::createexploder( "fx_cloud_cover_volume" ); + ent.v["origin"] = ( -14488.4, 13918.8, 7082 ); + ent.v["angles"] = ( 270, 2.86241, 117.138 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 676; + ent = maps\mp\_utility::createexploder( "fx_cloud_cover_volume" ); + ent.v["origin"] = ( 16939.5, 15417.8, 6238.46 ); + ent.v["angles"] = ( 270, 0, 19 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 676; + ent = maps\mp\_utility::createexploder( "fx_cloud_cover_volume" ); + ent.v["origin"] = ( 5304.38, 35180.7, 9297.49 ); + ent.v["angles"] = ( 270, 3.36646, 73.6335 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 676; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_nuked_water_stream_radioactive_thin" ); + ent.v["origin"] = ( -1009.86, 517.158, 195.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_nuked_water_stream_radioactive_thin" ); + ent.v["origin"] = ( -859.311, 572.6, 195.875 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_nuked_water_stream_radioactive_spatter" ); + ent.v["origin"] = ( -859.311, 572.6, 80.125 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_nuked_water_stream_radioactive_spatter" ); + ent.v["origin"] = ( -1009.86, 517.158, 80.125 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_zm_elec_arc_vert" ); + ent.v["origin"] = ( -2335.36, -945.512, 103.773 ); + ent.v["angles"] = ( 270, 356.82, -129.82 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_elec_transformer_sparks_runner" ); + ent.v["origin"] = ( -2319.89, -921.68, 101.125 ); + ent.v["angles"] = ( 38.8277, 307.037, -37.5344 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_fire_line_xsm" ); + ent.v["origin"] = ( -884.313, -368.767, -17.998 ); + ent.v["angles"] = ( 324.92, 290.565, -60.0378 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_sm" ); + ent.v["origin"] = ( -473.334, 174.651, -51.2521 ); + ent.v["angles"] = ( 358.942, 263.029, -0.702441 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_md" ); + ent.v["origin"] = ( 1360.67, -765.871, -59.1856 ); + ent.v["angles"] = ( 359, 283, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; +} diff --git a/ZM/Maps/Nuketown/maps/mp/gametypes_zm/zstandard.gsc b/ZM/Maps/Nuketown/maps/mp/gametypes_zm/zstandard.gsc new file mode 100644 index 0000000..eb15237 --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/gametypes_zm/zstandard.gsc @@ -0,0 +1,46 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_ai_dogs; +#include maps\mp\zombies\_zm; + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::main(); + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level._game_module_custom_spawn_init_func = maps\mp\gametypes_zm\_zm_gametype::custom_spawn_init_func; + level._game_module_stat_update_func = maps\mp\zombies\_zm_stats::survival_classic_custom_stat_update; + maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zstandard" ); +} + +onprecachegametype() +{ + level.playersuicideallowed = 1; + level.canplayersuicide = ::canplayersuicide; + level.suicide_weapon = "death_self_zm"; + precacheitem( "death_self_zm" ); + maps\mp\zombies\_zm_ai_dogs::init(); + maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zstandard" ); +} + +onstartgametype() +{ + maps\mp\gametypes_zm\_zm_gametype::setup_classic_gametype(); + maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zstandard", ::zstandard_main ); +} + +zstandard_main() +{ + level.dog_rounds_allowed = getgametypesetting( "allowdogs" ); + + if ( level.dog_rounds_allowed ) + maps\mp\zombies\_zm_ai_dogs::enable_dog_rounds(); + + level thread maps\mp\zombies\_zm::round_start(); + level thread maps\mp\gametypes_zm\_zm_gametype::kill_all_zombies(); +} diff --git a/ZM/Maps/Nuketown/maps/mp/teams/_teamset_cdc.gsc b/ZM/Maps/Nuketown/maps/mp/teams/_teamset_cdc.gsc new file mode 100644 index 0000000..cef3a54 --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/teams/_teamset_cdc.gsc @@ -0,0 +1,55 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +register() +{ + game["teamset"] = []; + game["teamset"]["cdc"] = ::cdc; +} + +level_init() +{ + game["allies"] = "cdc"; + game["axis"] = "cia"; + setdvar( "g_TeamName_Allies", &"ZMUI_CDC_SHORT" ); + setdvar( "g_TeamName_Axis", &"ZMUI_CIA_SHORT" ); + game["strings"]["allies_win"] = &"ZM_CDC_WIN_MATCH"; + game["strings"]["allies_win_round"] = &"ZM_CDC_WIN_ROUND"; + game["strings"]["allies_mission_accomplished"] = &"ZM_CDC_MISSION_ACCOMPLISHED"; + game["strings"]["allies_eliminated"] = &"ZM_CDC_ELIMINATED"; + game["strings"]["allies_forfeited"] = &"ZM_CDC_FORFEITED"; + game["strings"]["allies_name"] = &"ZM_CDC_NAME"; + game["music"]["spawn_allies"] = "SPAWN_OPS"; + game["music"]["victory_allies"] = "mus_victory_usa"; + game["icons"]["allies"] = "faction_cdc"; + game["colors"]["allies"] = ( 0, 0, 0 ); + game["voice"]["allies"] = "vox_st6_"; + setdvar( "scr_allies", "marines" ); + game["strings"]["axis_win"] = &"ZM_CIA_WIN_MATCH"; + game["strings"]["axis_win_round"] = &"ZM_CIA_WIN_ROUND"; + game["strings"]["axis_mission_accomplished"] = &"ZM_CIA_MISSION_ACCOMPLISHED"; + game["strings"]["axis_eliminated"] = &"ZM_CIA_ELIMINATED"; + game["strings"]["axis_forfeited"] = &"ZM_CIA_FORFEITED"; + game["strings"]["axis_name"] = &"ZM_CIA_NAME"; + game["music"]["spawn_axis"] = "SPAWN_RUS"; + game["music"]["victory_axis"] = "mus_victory_soviet"; + game["icons"]["axis"] = "faction_cia"; + game["colors"]["axis"] = ( 0.65, 0.57, 0.41 ); + game["voice"]["axis"] = "vox_pmc_"; +} + +cdc() +{ + allies(); + axis(); +} + +allies() +{ + +} + +axis() +{ + +} diff --git a/ZM/Maps/Nuketown/maps/mp/zm_nuked.gsc b/ZM/Maps/Nuketown/maps/mp/zm_nuked.gsc new file mode 100644 index 0000000..8870ae2 --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/zm_nuked.gsc @@ -0,0 +1,1573 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zm_nuked_gamemodes; +#include maps\mp\zm_nuked_ffotd; +#include maps\mp\zm_nuked_fx; +#include maps\mp\zombies\_zm; +#include maps\mp\animscripts\zm_death; +#include maps\mp\zombies\_load; +#include maps\mp\teams\_teamset_cdc; +#include maps\mp\gametypes_zm\_spawning; +#include maps\mp\zm_nuked_perks; +#include maps\mp\_sticky_grenade; +#include maps\mp\zombies\_zm_weap_tazer_knuckles; +#include maps\mp\zombies\_zm_weap_bowie; +#include maps\mp\zombies\_zm_weap_cymbal_monkey; +#include maps\mp\zombies\_zm_weap_claymore; +#include maps\mp\zombies\_zm_weap_ballistic_knife; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\animscripts\zm_run; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_blockers; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\_compass; + +gamemode_callback_setup() +{ + maps\mp\zm_nuked_gamemodes::init(); +} + +survival_init() +{ + level.force_team_characters = 1; + level.should_use_cia = 0; + + if ( randomint( 100 ) > 50 ) + level.should_use_cia = 1; + + level.precachecustomcharacters = ::precache_team_characters; + level.givecustomcharacters = ::give_team_characters; + flag_wait( "start_zombie_round_logic" ); +} + +zstandard_preinit() +{ + survival_init(); +} + +createfx_callback() +{ + ents = getentarray(); + + for ( i = 0; i < ents.size; i++ ) + { + if ( ents[i].classname != "info_player_start" ) + ents[i] delete(); + } +} + +main() +{ + level thread maps\mp\zm_nuked_ffotd::main_start(); + level.level_createfx_callback_thread = ::createfx_callback; + level.default_game_mode = "zstandard"; + level.default_start_location = "nuked"; + level.zombiemode_using_perk_intro_fx = 1; + level.revive_machine_spawned = 0; + level.riser_fx_on_client = 1; + setup_rex_starts(); + maps\mp\zm_nuked_fx::main(); + maps\mp\zombies\_zm::init_fx(); + maps\mp\animscripts\zm_death::precache_gib_fx(); + level.zombiemode = 1; + level._no_water_risers = 1; + precachemodel( "p6_zm_nuked_rocket_cam" ); + precacheshellshock( "default" ); + precacherumble( "damage_light" ); + precachemodel( "collision_wall_128x128x10_standard" ); + precachemodel( "collision_player_256x256x10" ); + precachemodel( "collision_player_512x512x10" ); + precachemodel( "fx_axis_createfx" ); + maps\mp\zombies\_load::main(); + + if ( getdvar( "createfx" ) == "1" ) + return; + + maps\mp\teams\_teamset_cdc::level_init(); + maps\mp\gametypes_zm\_spawning::level_use_unified_spawning( 1 ); + level.givecustomloadout = ::givecustomloadout; + level.precachecustomcharacters = ::precache_team_characters; + level.givecustomcharacters = ::give_team_characters; + initcharacterstartindex(); + level.custom_player_fake_death = ::nuked_player_fake_death; + level.custom_player_fake_death_cleanup = ::nuked_player_fake_death_cleanup; + level.initial_round_wait_func = ::initial_round_wait_func; + level.ignore_path_delays = 1; + level.calc_closest_player_using_paths = 1; + level.melee_miss_func = ::melee_miss_func; + level.zombie_init_done = ::zombie_init_done; + level._zombie_path_timer_override = ::zombie_path_timer_override; + level.zombiemode_using_pack_a_punch = 1; + level.zombiemode_reusing_pack_a_punch = 1; + level.pap_interaction_height = 47; + level.taser_trig_adjustment = ( -7, -2, 0 ); + level.zombiemode_using_doubletap_perk = 1; + level.zombiemode_using_juggernaut_perk = 1; + level.zombiemode_using_revive_perk = 1; + level.zombiemode_using_sleightofhand_perk = 1; + level.register_offhand_weapons_for_level_defaults_override = ::offhand_weapon_overrride; + level.zombiemode_offhand_weapon_give_override = ::offhand_weapon_give_override; + level._zombie_custom_add_weapons = ::custom_add_weapons; + level._allow_melee_weapon_switching = 1; + level.custom_ai_type = []; + level.raygun2_included = 1; + include_weapons(); + include_powerups(); + include_equipment_for_level(); + registerclientfield( "world", "zombie_eye_change", 4000, 1, "int" ); + maps\mp\zm_nuked_perks::init_nuked_perks(); + maps\mp\zombies\_zm::init(); + + if ( level.splitscreen && getdvarint( "splitscreen_playerCount" ) > 2 ) + { + + } + else + level.custom_intermission = ::nuked_standard_intermission; + + level thread maps\mp\_sticky_grenade::init(); + maps\mp\zombies\_zm_weap_tazer_knuckles::init(); + maps\mp\zombies\_zm_weap_bowie::init(); + level.legacy_cymbal_monkey = 1; + maps\mp\zombies\_zm_weap_cymbal_monkey::init(); + maps\mp\zombies\_zm_weap_claymore::init(); + maps\mp\zombies\_zm_weap_ballistic_knife::init(); + level.special_weapon_magicbox_check = ::nuked_special_weapon_magicbox_check; + precacheitem( "death_throe_zm" ); + level.zones = []; + level.zone_manager_init_func = ::nuked_zone_init; + init_zones[0] = "culdesac_yellow_zone"; + init_zones[1] = "culdesac_green_zone"; + level thread maps\mp\zombies\_zm_zonemgr::manage_zones( init_zones ); + level.zombie_ai_limit = 24; + level thread inermission_rocket_init(); + flag_init( "rocket_hit_nuketown" ); + flag_init( "moon_transmission_over" ); + + if ( level.round_number == 1 && is_true( level.enable_magic ) && level.gamedifficulty != 0 ) + { + level thread zombie_eye_glow_change(); + level thread switch_announcer_to_richtofen(); + level thread moon_transmission_vo(); + level thread marlton_vo_inside_bunker(); + level thread bus_random_horn(); + } + + level thread nuked_mannequin_init(); + level thread fake_lighting_cleanup(); + level thread bus_taser_blocker(); + level thread nuked_doomsday_clock_think(); + level thread nuked_population_sign_think(); + level thread maps\mp\zm_nuked_perks::perks_from_the_sky(); + level thread perks_behind_door(); + level.destructible_callbacks["headless"] = ::sndmusegg3_counter; + level thread sndswitchannouncervox( "sam" ); + level thread sndgameend(); + + if ( level.round_number == 1 && is_true( level.enable_magic ) && level.gamedifficulty != 0 ) + level thread sndmusiceastereggs(); + + setdvar( "zombiemode_path_minz_bias", 28 ); + level.speed_change_round = 15; + level.speed_change_max = 5; + level thread nuked_update_traversals(); + level thread nuked_collision_patch(); + level thread maps\mp\zm_nuked_ffotd::main_end(); +} + +door_powerup_drop( powerup_name, drop_spot, powerup_team, powerup_location ) +{ + if ( isdefined( level.door_powerup ) ) + level.door_powerup powerup_delete(); + + powerup = maps\mp\zombies\_zm_net::network_safe_spawn( "powerup", 1, "script_model", drop_spot + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + level notify( "powerup_dropped", powerup ); + + if ( isdefined( powerup ) ) + { + powerup.grabbed_level_notify = "magic_door_power_up_grabbed"; + powerup maps\mp\zombies\_zm_powerups::powerup_setup( powerup_name, powerup_team, powerup_location ); + powerup thread maps\mp\zombies\_zm_powerups::powerup_wobble(); + powerup thread maps\mp\zombies\_zm_powerups::powerup_grab( powerup_team ); + powerup thread maps\mp\zombies\_zm_powerups::powerup_move(); + level.door_powerup = powerup; + } +} + +perks_behind_door() +{ + if ( !( isdefined( level.enable_magic ) && level.enable_magic ) ) + return; + + level endon( "magic_door_power_up_grabbed" ); + flag_wait( "initial_blackscreen_passed" ); + door_perk_drop_list = []; + door_perk_drop_list[0] = "nuke"; + door_perk_drop_list[1] = "double_points"; + door_perk_drop_list[2] = "insta_kill"; + door_perk_drop_list[3] = "fire_sale"; + door_perk_drop_list[4] = "full_ammo"; + index = 0; + ammodrop = getstruct( "zm_nuked_ammo_drop", "script_noteworthy" ); + perk_type = door_perk_drop_list[index]; + index++; + door_powerup_drop( perk_type, ammodrop.origin ); + + while ( true ) + { + level waittill( "nuke_clock_moved" ); + + if ( index == door_perk_drop_list.size ) + index = 0; + + perk_type = door_perk_drop_list[index]; + index++; + door_powerup_drop( perk_type, ammodrop.origin ); + } +} + +nuked_doomsday_clock_think() +{ + min_hand_model = getent( "clock_min_hand", "targetname" ); + min_hand_model.position = 0; + + while ( true ) + { + level waittill( "update_doomsday_clock" ); + + level thread update_doomsday_clock( min_hand_model ); + } +} + +update_doomsday_clock( min_hand_model ) +{ + while ( is_true( min_hand_model.is_updating ) ) + wait 0.05; + + min_hand_model.is_updating = 1; + + if ( min_hand_model.position == 0 ) + { + min_hand_model.position = 3; + min_hand_model rotatepitch( -90, 1 ); + min_hand_model playsound( "zmb_clock_hand" ); + + min_hand_model waittill( "rotatedone" ); + + min_hand_model playsound( "zmb_clock_chime" ); + } + else + { + min_hand_model.position--; + min_hand_model rotatepitch( 30, 1 ); + min_hand_model playsound( "zmb_clock_hand" ); + + min_hand_model waittill( "rotatedone" ); + } + + level notify( "nuke_clock_moved" ); + min_hand_model.is_updating = 0; +} + +fall_down( vdir, stance ) +{ + self endon( "disconnect" ); + level endon( "game_module_ended" ); + self ghost(); + origin = self.origin; + xyspeed = ( 0, 0, 0 ); + angles = self getplayerangles(); + angles = ( angles[0], angles[1], angles[2] + randomfloatrange( -5, 5 ) ); + + if ( isdefined( vdir ) && length( vdir ) > 0 ) + { + xyspeedmag = 40 + randomint( 12 ) + randomint( 12 ); + xyspeed = xyspeedmag * vectornormalize( ( vdir[0], vdir[1], 0 ) ); + } + + linker = spawn( "script_origin", ( 0, 0, 0 ) ); + linker.origin = origin; + linker.angles = angles; + self._fall_down_anchor = linker; + self playerlinkto( linker ); + self playsoundtoplayer( "zmb_player_death_fall", self ); + falling = stance != "prone"; + + if ( falling ) + { + origin = playerphysicstrace( origin, origin + xyspeed ); + eye = self get_eye(); + floor_height = 10 + origin[2] - eye[2]; + origin += ( 0, 0, floor_height ); + lerptime = 0.5; + linker moveto( origin, lerptime, lerptime ); + linker rotateto( angles, lerptime, lerptime ); + } + + self freezecontrols( 1 ); + + if ( falling ) + linker waittill( "movedone" ); + + self giveweapon( "death_throe_zm" ); + self switchtoweapon( "death_throe_zm" ); + + if ( falling ) + { + bounce = randomint( 4 ) + 8; + origin = origin + ( 0, 0, bounce ) - xyspeed * 0.1; + lerptime = bounce / 50.0; + linker moveto( origin, lerptime, 0, lerptime ); + + linker waittill( "movedone" ); + + origin = origin + ( 0, 0, bounce * -1 ) + xyspeed * 0.1; + lerptime /= 2.0; + linker moveto( origin, lerptime, lerptime ); + + linker waittill( "movedone" ); + + linker moveto( origin, 5, 0 ); + } + + wait 15; + linker delete(); +} + +nuked_player_fake_death_cleanup() +{ + if ( isdefined( self._fall_down_anchor ) ) + { + self._fall_down_anchor delete(); + self._fall_down_anchor = undefined; + } +} + +nuked_player_fake_death( vdir ) +{ + level notify( "fake_death" ); + self notify( "fake_death" ); + stance = self getstance(); + self.ignoreme = 1; + self enableinvulnerability(); + self takeallweapons(); + + if ( isdefined( self.insta_killed ) && self.insta_killed ) + { + self maps\mp\zombies\_zm::player_fake_death(); + self allowprone( 1 ); + self allowcrouch( 0 ); + self allowstand( 0 ); + wait 0.25; + self freezecontrols( 1 ); + } + else + { + self freezecontrols( 1 ); + self thread fall_down( vdir, stance ); + wait 1; + } +} + +initial_round_wait_func() +{ + flag_wait( "initial_blackscreen_passed" ); +} + +melee_miss_func() +{ + if ( isdefined( self.enemy ) ) + { + if ( self.enemy maps\mp\zombies\_zm_laststand::is_reviving_any() ) + { + dist_sq = distancesquared( self.enemy.origin, self.origin ); + melee_dist_sq = self.meleeattackdist * self.meleeattackdist; + + if ( dist_sq < melee_dist_sq ) + self.enemy dodamage( self.meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); + } + } +} + +zombie_init_done() +{ + self.allowpain = 0; + + if ( isdefined( self.script_parameters ) && self.script_parameters == "crater" ) + self thread zombie_crater_locomotion(); + + self setphysparams( 15, 0, 48 ); +} + +zombie_crater_locomotion() +{ + self endon( "death" ); + stand_trigger = getentarray( "zombie_crawler_standup", "targetname" ); + + while ( is_true( self.needs_run_update ) ) + wait 0.1; + + self allowpitchangle( 1 ); + self setpitchorient(); + + if ( self.zombie_move_speed == "sprint" ) + self setanimstatefromasd( "zm_move_sprint_crawl", 2 ); + else + self setanimstatefromasd( "zm_move_sprint_crawl", 1 ); + + touched = 0; + + while ( !touched ) + { + if ( isdefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area ) + { + self allowpitchangle( 0 ); + self clearpitchorient(); + return; + } + + for ( i = 0; i < stand_trigger.size; i++ ) + { + if ( self istouching( stand_trigger[i] ) ) + { + touched = 1; + break; + } + } + + wait 0.1; + } + + self allowpitchangle( 0 ); + self clearpitchorient(); + self maps\mp\animscripts\zm_run::needsupdate(); +} + +zombie_path_timer_override() +{ + timer = gettime() + 100.0; + return timer; +} + +nuked_update_traversals() +{ + level.yellow_awning_clip = getentarray( "yellow_awning_clip", "targetname" ); + level.yellow_patio_clip = getentarray( "yellow_patio_clip", "targetname" ); + level.green_awning_clip = getentarray( "green_awning_clip", "targetname" ); + level.green_patio_clip = getentarray( "green_patio_clip", "targetname" ); + level.yellow_awning = 0; + level.yellow_patio = 0; + level.green_awning = 0; + level.green_patio = 0; + wait 5; + + while ( true ) + { + level.yellow_backyard = 0; + level.green_backyard = 0; + level.culdesac = 0; + level.other = 0; + nuked_update_player_zones(); + + if ( !level.culdesac && !level.other ) + { + if ( level.yellow_backyard > 0 ) + { + set_yellow_awning( 1 ); + set_yellow_patio( 0 ); + } + + if ( level.green_backyard > 0 ) + { + set_green_awning( 1 ); + set_green_patio( 0 ); + } + } + else if ( !level.yellow_backyard && !level.green_backyard && !level.other ) + { + set_yellow_awning( 0 ); + set_yellow_patio( 1 ); + set_green_awning( 0 ); + set_green_patio( 1 ); + } + else if ( !level.other ) + { + set_yellow_awning( 0 ); + set_yellow_patio( 0 ); + set_green_awning( 0 ); + set_green_patio( 0 ); + } + else + { + set_yellow_awning( 1 ); + set_yellow_patio( 1 ); + set_green_awning( 1 ); + set_green_patio( 1 ); + } + + wait 0.2; + } +} + +set_yellow_awning( enable ) +{ + if ( enable ) + { + if ( !level.yellow_awning ) + { + level.yellow_awning = 1; + house_clip( level.yellow_awning_clip, 1 ); + } + } + else if ( level.yellow_awning ) + { + level.yellow_awning = 0; + house_clip( level.yellow_awning_clip, 0 ); + } +} + +set_yellow_patio( enable ) +{ + if ( enable ) + { + if ( !level.yellow_patio ) + { + level.yellow_patio = 1; + house_clip( level.yellow_patio_clip, 1 ); + } + } + else if ( level.yellow_patio ) + { + level.yellow_patio = 0; + house_clip( level.yellow_patio_clip, 0 ); + } +} + +set_green_awning( enable ) +{ + if ( enable ) + { + if ( !level.green_awning ) + { + level.green_awning = 1; + house_clip( level.green_awning_clip, 1 ); + } + } + else if ( level.green_awning ) + { + level.green_awning = 0; + house_clip( level.green_awning_clip, 0 ); + } +} + +set_green_patio( enable ) +{ + if ( enable ) + { + if ( !level.green_patio ) + { + level.green_patio = 1; + house_clip( level.green_patio_clip, 1 ); + } + } + else if ( level.green_patio ) + { + level.green_patio = 0; + house_clip( level.green_patio_clip, 0 ); + } +} + +nuked_update_player_zones() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( is_player_valid( players[i] ) ) + { + if ( players[i] maps\mp\zombies\_zm_zonemgr::entity_in_zone( "openhouse1_backyard_zone" ) ) + { + level.green_backyard++; + continue; + } + + if ( players[i] maps\mp\zombies\_zm_zonemgr::entity_in_zone( "openhouse2_backyard_zone" ) ) + { + level.yellow_backyard++; + continue; + } + + if ( players[i] maps\mp\zombies\_zm_zonemgr::entity_in_zone( "culdesac_green_zone" ) || players[i] maps\mp\zombies\_zm_zonemgr::entity_in_zone( "culdesac_yellow_zone" ) ) + { + level.culdesac++; + continue; + } + + level.other++; + } + } +} + +house_clip( clips, connect ) +{ + for ( i = 0; i < clips.size; i++ ) + { + if ( connect ) + { + clips[i] notsolid(); + clips[i] connectpaths(); + continue; + } + + clips[i] solid(); + clips[i] disconnectpaths(); + } +} + +setup_rex_starts() +{ + add_gametype( "zstandard", ::dummy, "zstandard", ::dummy ); + add_gameloc( "nuked", ::dummy, "nuked", ::dummy ); +} + +dummy() +{ + +} + +precache_team_characters() +{ + precachemodel( "c_zom_player_cdc_fb" ); + precachemodel( "c_zom_hazmat_viewhands_light" ); + precachemodel( "c_zom_player_cia_fb" ); + precachemodel( "c_zom_suit_viewhands" ); +} + +give_team_characters() +{ + if ( isdefined( level.hotjoin_player_setup ) && [[ level.hotjoin_player_setup ]]( "c_zom_suit_viewhands" ) ) + return; + + self detachall(); + self set_player_is_female( 0 ); + + if ( isdefined( level.should_use_cia ) && level.should_use_cia ) + { + self setmodel( "c_zom_player_cia_fb" ); + self setviewmodel( "c_zom_suit_viewhands" ); + self.characterindex = 0; + } + else + { + self setmodel( "c_zom_player_cdc_fb" ); + self setviewmodel( "c_zom_hazmat_viewhands_light" ); + self.characterindex = 1; + } + + self setmovespeedscale( 1 ); + self setsprintduration( 4 ); + self setsprintcooldown( 0 ); + self set_player_tombstone_index(); +} + +initcharacterstartindex() +{ + level.characterstartindex = randomint( 4 ); +} + +selectcharacterindextouse() +{ + if ( level.characterstartindex >= 4 ) + level.characterstartindex = 0; + + self.characterindex = level.characterstartindex; + level.characterstartindex++; + return self.characterindex; +} + +givecustomloadout( takeallweapons, alreadyspawned ) +{ + self giveweapon( "knife_zm" ); + self give_start_weapon( 1 ); +} + +nuked_zone_init() +{ + flag_init( "always_on" ); + flag_set( "always_on" ); + add_adjacent_zone( "culdesac_yellow_zone", "culdesac_green_zone", "always_on" ); + add_adjacent_zone( "culdesac_yellow_zone", "openhouse2_f1_zone", "culdesac_2_openhouse2_f1" ); + add_adjacent_zone( "openhouse2_backyard_zone", "openhouse2_f1_zone", "openhouse2_f1_2_openhouse2_backyard" ); + add_adjacent_zone( "openhouse2_f1_zone", "openhouse2_f2_zone", "openhouse2_f1_2_openhouse2_f2" ); + add_adjacent_zone( "openhouse2_backyard_zone", "openhouse2_f2_zone", "openhouse2_f1_2_openhouse2_f2" ); + add_adjacent_zone( "openhouse2_backyard_zone", "openhouse2_f2_zone", "openhouse2_backyard_2_openhouse2_f2" ); + add_adjacent_zone( "culdesac_green_zone", "openhouse1_f1_zone", "culdesac_2_openhouse1_f1" ); + add_adjacent_zone( "openhouse1_f1_zone", "openhouse1_backyard_zone", "openhouse1_f1_2_openhouse1_backyard" ); + add_adjacent_zone( "openhouse1_f2_zone", "openhouse1_f1_zone", "openhouse1_f2_openhouse1_f1" ); + add_adjacent_zone( "openhouse1_f2_zone", "openhouse1_backyard_zone", "openhouse1_f2_openhouse1_f1" ); + add_adjacent_zone( "openhouse1_backyard_zone", "openhouse1_f2_zone", "openhouse1_backyard_2_openhouse1_f2" ); + add_adjacent_zone( "culdesac_yellow_zone", "truck_zone", "culdesac_2_truck" ); + add_adjacent_zone( "culdesac_green_zone", "truck_zone", "culdesac_2_truck" ); + add_adjacent_zone( "openhouse2_backyard_zone", "ammo_door_zone", "openhouse2_backyard_2_ammo_door" ); +} + +include_powerups() +{ + include_powerup( "nuke" ); + include_powerup( "insta_kill" ); + include_powerup( "double_points" ); + include_powerup( "full_ammo" ); + include_powerup( "fire_sale" ); +} + +include_perks() +{ + +} + +include_equipment_for_level() +{ + +} + +include_weapons() +{ + include_weapon( "knife_zm", 0 ); + include_weapon( "frag_grenade_zm", 0 ); + include_weapon( "claymore_zm", 0 ); + include_weapon( "sticky_grenade_zm", 0 ); + include_weapon( "m1911_zm", 0 ); + include_weapon( "m1911_upgraded_zm", 0 ); + include_weapon( "python_zm" ); + include_weapon( "python_upgraded_zm", 0 ); + include_weapon( "judge_zm" ); + include_weapon( "judge_upgraded_zm", 0 ); + include_weapon( "kard_zm" ); + include_weapon( "kard_upgraded_zm", 0 ); + include_weapon( "fiveseven_zm" ); + include_weapon( "fiveseven_upgraded_zm", 0 ); + include_weapon( "beretta93r_zm", 0 ); + include_weapon( "beretta93r_upgraded_zm", 0 ); + include_weapon( "fivesevendw_zm" ); + include_weapon( "fivesevendw_upgraded_zm", 0 ); + include_weapon( "ak74u_zm", 0 ); + include_weapon( "ak74u_upgraded_zm", 0 ); + include_weapon( "mp5k_zm", 0 ); + include_weapon( "mp5k_upgraded_zm", 0 ); + include_weapon( "qcw05_zm" ); + include_weapon( "qcw05_upgraded_zm", 0 ); + include_weapon( "870mcs_zm", 0 ); + include_weapon( "870mcs_upgraded_zm", 0 ); + include_weapon( "rottweil72_zm", 0 ); + include_weapon( "rottweil72_upgraded_zm", 0 ); + include_weapon( "saiga12_zm" ); + include_weapon( "saiga12_upgraded_zm", 0 ); + include_weapon( "srm1216_zm" ); + include_weapon( "srm1216_upgraded_zm", 0 ); + include_weapon( "m14_zm", 0 ); + include_weapon( "m14_upgraded_zm", 0 ); + include_weapon( "saritch_zm" ); + include_weapon( "saritch_upgraded_zm", 0 ); + include_weapon( "m16_zm", 0 ); + include_weapon( "m16_gl_upgraded_zm", 0 ); + include_weapon( "xm8_zm" ); + include_weapon( "xm8_upgraded_zm", 0 ); + include_weapon( "type95_zm" ); + include_weapon( "type95_upgraded_zm", 0 ); + include_weapon( "tar21_zm" ); + include_weapon( "tar21_upgraded_zm", 0 ); + include_weapon( "galil_zm" ); + include_weapon( "galil_upgraded_zm", 0 ); + include_weapon( "fnfal_zm" ); + include_weapon( "fnfal_upgraded_zm", 0 ); + include_weapon( "dsr50_zm" ); + include_weapon( "dsr50_upgraded_zm", 0 ); + include_weapon( "barretm82_zm" ); + include_weapon( "barretm82_upgraded_zm", 0 ); + include_weapon( "rpd_zm" ); + include_weapon( "rpd_upgraded_zm", 0 ); + include_weapon( "hamr_zm" ); + include_weapon( "hamr_upgraded_zm", 0 ); + include_weapon( "usrpg_zm" ); + include_weapon( "usrpg_upgraded_zm", 0 ); + include_weapon( "m32_zm" ); + include_weapon( "m32_upgraded_zm", 0 ); + include_weapon( "hk416_zm" ); + include_weapon( "hk416_upgraded_zm", 0 ); + include_weapon( "lsat_zm" ); + include_weapon( "lsat_upgraded_zm", 0 ); + include_weapon( "cymbal_monkey_zm" ); + include_weapon( "ray_gun_zm" ); + include_weapon( "ray_gun_upgraded_zm", 0 ); + include_weapon( "tazer_knuckles_zm", 0 ); + include_weapon( "knife_ballistic_no_melee_zm", 0 ); + include_weapon( "knife_ballistic_no_melee_upgraded_zm", 0 ); + include_weapon( "knife_ballistic_zm" ); + include_weapon( "knife_ballistic_upgraded_zm", 0 ); + include_weapon( "knife_ballistic_bowie_zm", 0 ); + include_weapon( "knife_ballistic_bowie_upgraded_zm", 0 ); + level._uses_retrievable_ballisitic_knives = 1; + add_limited_weapon( "m1911_zm", 0 ); + add_limited_weapon( "knife_ballistic_zm", 1 ); + add_limited_weapon( "jetgun_zm", 1 ); + add_limited_weapon( "ray_gun_zm", 4 ); + add_limited_weapon( "ray_gun_upgraded_zm", 4 ); + add_limited_weapon( "knife_ballistic_upgraded_zm", 0 ); + add_limited_weapon( "knife_ballistic_no_melee_zm", 0 ); + add_limited_weapon( "knife_ballistic_no_melee_upgraded_zm", 0 ); + add_limited_weapon( "knife_ballistic_bowie_zm", 0 ); + add_limited_weapon( "knife_ballistic_bowie_upgraded_zm", 0 ); + + if ( isdefined( level.raygun2_included ) && level.raygun2_included ) + { + include_weapon( "raygun_mark2_zm" ); + include_weapon( "raygun_mark2_upgraded_zm", 0 ); + add_weapon_to_content( "raygun_mark2_zm", "dlc3" ); + add_limited_weapon( "raygun_mark2_zm", 1 ); + add_limited_weapon( "raygun_mark2_upgraded_zm", 1 ); + } +} + +offhand_weapon_overrride() +{ + register_lethal_grenade_for_level( "frag_grenade_zm" ); + register_lethal_grenade_for_level( "sticky_grenade_zm" ); + level.zombie_lethal_grenade_player_init = "frag_grenade_zm"; + register_tactical_grenade_for_level( "cymbal_monkey_zm" ); + level.zombie_tactical_grenade_player_init = undefined; + register_placeable_mine_for_level( "claymore_zm" ); + level.zombie_placeable_mine_player_init = undefined; + register_melee_weapon_for_level( "knife_zm" ); + register_melee_weapon_for_level( "bowie_knife_zm" ); + register_melee_weapon_for_level( "tazer_knuckles_zm" ); + level.zombie_melee_weapon_player_init = "knife_zm"; + level.zombie_equipment_player_init = undefined; +} + +offhand_weapon_give_override( str_weapon ) +{ + self endon( "death" ); + + if ( is_tactical_grenade( str_weapon ) && isdefined( self get_player_tactical_grenade() ) && !self is_player_tactical_grenade( str_weapon ) ) + { + self setweaponammoclip( self get_player_tactical_grenade(), 0 ); + self takeweapon( self get_player_tactical_grenade() ); + } + + return 0; +} + +custom_add_weapons() +{ + add_zombie_weapon( "m1911_zm", "m1911_upgraded_zm", &"ZOMBIE_WEAPON_M1911", 50, "", "", undefined ); + add_zombie_weapon( "python_zm", "python_upgraded_zm", &"ZOMBIE_WEAPON_PYTHON", 50, "wpck_python", "", undefined, 1 ); + add_zombie_weapon( "judge_zm", "judge_upgraded_zm", &"ZOMBIE_WEAPON_JUDGE", 50, "wpck_judge", "", undefined, 1 ); + add_zombie_weapon( "kard_zm", "kard_upgraded_zm", &"ZOMBIE_WEAPON_KARD", 50, "wpck_kap", "", undefined, 1 ); + add_zombie_weapon( "fiveseven_zm", "fiveseven_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVEN", 50, "wpck_57", "", undefined, 1 ); + add_zombie_weapon( "beretta93r_zm", "beretta93r_upgraded_zm", &"ZOMBIE_WEAPON_BERETTA93r", 1000, "", "", undefined ); + add_zombie_weapon( "fivesevendw_zm", "fivesevendw_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVENDW", 50, "wpck_duel57", "", undefined, 1 ); + add_zombie_weapon( "ak74u_zm", "ak74u_upgraded_zm", &"ZOMBIE_WEAPON_AK74U", 1200, "smg", "", undefined ); + add_zombie_weapon( "mp5k_zm", "mp5k_upgraded_zm", &"ZOMBIE_WEAPON_MP5K", 1000, "smg", "", undefined ); + add_zombie_weapon( "qcw05_zm", "qcw05_upgraded_zm", &"ZOMBIE_WEAPON_QCW05", 50, "wpck_chicom", "", undefined, 1 ); + add_zombie_weapon( "870mcs_zm", "870mcs_upgraded_zm", &"ZOMBIE_WEAPON_870MCS", 1500, "shotgun", "", undefined ); + add_zombie_weapon( "rottweil72_zm", "rottweil72_upgraded_zm", &"ZOMBIE_WEAPON_ROTTWEIL72", 500, "shotgun", "", undefined ); + add_zombie_weapon( "saiga12_zm", "saiga12_upgraded_zm", &"ZOMBIE_WEAPON_SAIGA12", 50, "wpck_saiga12", "", undefined, 1 ); + add_zombie_weapon( "srm1216_zm", "srm1216_upgraded_zm", &"ZOMBIE_WEAPON_SRM1216", 50, "wpck_m1216", "", undefined, 1 ); + add_zombie_weapon( "m14_zm", "m14_upgraded_zm", &"ZOMBIE_WEAPON_M14", 500, "rifle", "", undefined ); + add_zombie_weapon( "saritch_zm", "saritch_upgraded_zm", &"ZOMBIE_WEAPON_SARITCH", 50, "wpck_sidr", "", undefined, 1 ); + add_zombie_weapon( "m16_zm", "m16_gl_upgraded_zm", &"ZOMBIE_WEAPON_M16", 1200, "burstrifle", "", undefined ); + add_zombie_weapon( "xm8_zm", "xm8_upgraded_zm", &"ZOMBIE_WEAPON_XM8", 50, "wpck_m8a1", "", undefined, 1 ); + add_zombie_weapon( "type95_zm", "type95_upgraded_zm", &"ZOMBIE_WEAPON_TYPE95", 50, "wpck_type25", "", undefined, 1 ); + add_zombie_weapon( "tar21_zm", "tar21_upgraded_zm", &"ZOMBIE_WEAPON_TAR21", 50, "wpck_x95l", "", undefined, 1 ); + add_zombie_weapon( "galil_zm", "galil_upgraded_zm", &"ZOMBIE_WEAPON_GALIL", 50, "wpck_galil", "", undefined, 1 ); + add_zombie_weapon( "fnfal_zm", "fnfal_upgraded_zm", &"ZOMBIE_WEAPON_FNFAL", 50, "wpck_fal", "", undefined, 1 ); + add_zombie_weapon( "dsr50_zm", "dsr50_upgraded_zm", &"ZOMBIE_WEAPON_DR50", 50, "wpck_dsr50", "", undefined, 1 ); + add_zombie_weapon( "barretm82_zm", "barretm82_upgraded_zm", &"ZOMBIE_WEAPON_BARRETM82", 50, "sniper", "", undefined ); + add_zombie_weapon( "rpd_zm", "rpd_upgraded_zm", &"ZOMBIE_WEAPON_RPD", 50, "wpck_rpd", "", undefined, 1 ); + add_zombie_weapon( "hamr_zm", "hamr_upgraded_zm", &"ZOMBIE_WEAPON_HAMR", 50, "wpck_hamr", "", undefined, 1 ); + add_zombie_weapon( "frag_grenade_zm", undefined, &"ZOMBIE_WEAPON_FRAG_GRENADE", 250, "grenade", "", 250 ); + add_zombie_weapon( "sticky_grenade_zm", undefined, &"ZOMBIE_WEAPON_STICKY_GRENADE", 250, "grenade", "", 250 ); + add_zombie_weapon( "claymore_zm", undefined, &"ZOMBIE_WEAPON_CLAYMORE", 1000, "grenade", "", undefined ); + add_zombie_weapon( "usrpg_zm", "usrpg_upgraded_zm", &"ZOMBIE_WEAPON_USRPG", 50, "wpck_rpg", "", undefined, 1 ); + add_zombie_weapon( "m32_zm", "m32_upgraded_zm", &"ZOMBIE_WEAPON_M32", 50, "wpck_m32", "", undefined, 1 ); + add_zombie_weapon( "cymbal_monkey_zm", undefined, &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 ); + add_zombie_weapon( "ray_gun_zm", "ray_gun_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN", 10000, "wpck_ray", "", undefined, 1 ); + add_zombie_weapon( "knife_ballistic_zm", "knife_ballistic_upgraded_zm", &"ZOMBIE_WEAPON_KNIFE_BALLISTIC", 10, "sickle", "", undefined ); + add_zombie_weapon( "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", &"ZOMBIE_WEAPON_KNIFE_BALLISTIC", 10, "wpck_knife", "", undefined, 1 ); + add_zombie_weapon( "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", &"ZOMBIE_WEAPON_KNIFE_BALLISTIC", 10, "sickle", "", undefined ); + add_zombie_weapon( "tazer_knuckles_zm", undefined, &"ZOMBIE_WEAPON_TAZER_KNUCKLES", 100, "tazerknuckles", "", undefined ); + add_zombie_weapon( "hk416_zm", "hk416_upgraded_zm", &"ZOMBIE_WEAPON_HK416", 100, "", "", undefined ); + add_zombie_weapon( "lsat_zm", "lsat_upgraded_zm", &"ZOMBIE_WEAPON_LSAT", 100, "", "", undefined ); + + if ( isdefined( level.raygun2_included ) && level.raygun2_included ) + add_zombie_weapon( "raygun_mark2_zm", "raygun_mark2_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN_MARK2", 10000, "raygun_mark2", "", undefined ); +} + +nuked_population_sign_think() +{ + tens_model = getent( "counter_tens", "targetname" ); + ones_model = getent( "counter_ones", "targetname" ); + step = 36.0; + ones = 0; + tens = 0; + local_zombies_killed = 0; + tens_model rotateroll( step, 0.05 ); + ones_model rotateroll( step, 0.05 ); + + while ( true ) + { + if ( local_zombies_killed < level.total_zombies_killed - level.zombie_total_subtract ) + { + ones--; + time = set_dvar_float_if_unset( "scr_dial_rotate_time", "0.5" ); + + if ( ones < 0 ) + { + ones = 9; + tens_model rotateroll( 0 - step, time ); + tens_model playsound( "zmb_counter_flip" ); + tens--; + } + + if ( tens < 0 ) + tens = 9; + + ones_model rotateroll( 0 - step, time ); + ones_model playsound( "zmb_counter_flip" ); + + ones_model waittill( "rotatedone" ); + + level.population_count = ones + tens * 10; + + if ( level.population_count == 0 || level.population_count == 33 || level.population_count == 66 || level.population_count == 99 ) + level notify( "update_doomsday_clock" ); + + local_zombies_killed++; + } + + wait 0.05; + } +} + +assign_lowest_unused_character_index() +{ + charindexarray = []; + charindexarray[0] = 0; + charindexarray[1] = 1; + charindexarray[2] = 2; + charindexarray[3] = 3; + players = get_players(); + + if ( players.size == 1 ) + { + charindexarray = array_randomize( charindexarray ); + return charindexarray[0]; + } + else if ( players.size == 2 ) + { + foreach ( player in players ) + { + if ( isdefined( player.characterindex ) ) + { + if ( player.characterindex == 0 || player.characterindex == 1 ) + { + if ( randomint( 100 ) > 50 ) + return 2; + + return 3; + } + else if ( player.characterindex == 2 || player.characterindex == 3 ) + { + if ( randomint( 100 ) > 50 ) + return 0; + + return 1; + } + } + } + } + else + { + foreach ( player in players ) + { + if ( isdefined( player.characterindex ) ) + arrayremovevalue( charindexarray, player.characterindex, 0 ); + } + + if ( charindexarray.size > 0 ) + return charindexarray[0]; + } + + return 0; +} + +nuked_mannequin_init() +{ + keep_count = 28; + level.mannequin_count = 0; + destructibles = getentarray( "destructible", "targetname" ); + mannequins = nuked_mannequin_filter( destructibles ); + + if ( mannequins.size <= 0 ) + return; + + remove_count = mannequins.size - keep_count; + remove_count = clamp( remove_count, 0, remove_count ); + mannequins = array_randomize( mannequins ); + + for ( i = 0; i < remove_count; i++ ) + { + assert( isdefined( mannequins[i].target ) ); + collision = getent( mannequins[i].target, "targetname" ); + assert( isdefined( collision ) ); + collision delete(); + mannequins[i] delete(); + level.mannequin_count--; + } + + level waittill( "prematch_over" ); + + level.mannequin_time = gettime(); +} + +nuked_mannequin_filter( destructibles ) +{ + mannequins = []; + + for ( i = 0; i < destructibles.size; i++ ) + { + destructible = destructibles[i]; + + if ( issubstr( destructible.destructibledef, "male" ) ) + { + mannequins[mannequins.size] = destructible; + level.mannequin_count++; + } + } + + return mannequins; +} + +custom_debris_function() +{ + cost = 1000; + + if ( isdefined( self.zombie_cost ) ) + cost = self.zombie_cost; + + while ( true ) + { + if ( isdefined( self.script_noteworthy ) ) + { + if ( self.script_noteworthy == "electric_door" || self.script_noteworthy == "electric_buyable_door" ) + { + self sethintstring( &"ZOMBIE_NEED_POWER" ); + flag_wait( "power_on" ); + } + } + + self set_hint_string( self, "default_buy_door", cost ); + + self waittill( "trigger", who, force ); + + if ( getdvarint( _hash_2ECA0C0E ) > 0 || is_true( force ) ) + { + + } + else + { + if ( !who usebuttonpressed() ) + continue; + + if ( who in_revive_trigger() ) + continue; + } + + if ( is_player_valid( who ) ) + { + players = get_players(); + + if ( getdvarint( _hash_2ECA0C0E ) > 0 ) + { + + } + else if ( who.score >= self.zombie_cost ) + who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost ); + else + { + play_sound_at_pos( "no_purchase", self.origin ); + who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "door_deny", undefined, 1 ); + continue; + } + + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", who.name, who.score, level.round_number, self.zombie_cost, self.script_flag, self.origin, "door" ); + junk = getentarray( self.target, "targetname" ); + + if ( isdefined( self.script_flag ) ) + { + tokens = strtok( self.script_flag, "," ); + + for ( i = 0; i < tokens.size; i++ ) + flag_set( tokens[i] ); + } + + play_sound_at_pos( "purchase", self.origin ); + level notify( "junk purchased" ); + move_ent = undefined; + clip = undefined; + + for ( i = 0; i < junk.size; i++ ) + { + junk[i] connectpaths(); + + if ( isdefined( junk[i].script_noteworthy ) ) + { + if ( junk[i].script_noteworthy == "clip" ) + { + clip = junk[i]; + continue; + } + } + + struct = undefined; + + if ( isdefined( junk[i].script_linkto ) ) + { + struct = getstruct( junk[i].script_linkto, "script_linkname" ); + + if ( isdefined( struct ) ) + { + move_ent = junk[i]; + junk[i] thread maps\mp\zombies\_zm_blockers::debris_move( struct ); + } + else + junk[i] delete(); + + continue; + } + + junk[i] delete(); + } + + all_trigs = getentarray( self.target, "target" ); + + for ( i = 0; i < all_trigs.size; i++ ) + all_trigs[i] delete(); + + if ( isdefined( clip ) ) + { + if ( isdefined( move_ent ) ) + move_ent waittill( "movedone" ); + + clip delete(); + } + + break; + } + } +} + +sndgameend() +{ + level waittill( "intermission" ); + + playsoundatposition( "zmb_endgame", ( 0, 0, 0 ) ); +} + +sndmusiceastereggs() +{ + level.music_override = 0; + level thread sndmusegg1(); + level thread sndmusegg2(); +} + +sndmusegg1() +{ + level waittill( "nuke_clock_moved" ); + + level waittill( "magic_door_power_up_grabbed" ); + + min_hand_model = getent( "clock_min_hand", "targetname" ); + + if ( level.population_count == 15 && level.music_override == 0 ) + level thread sndmuseggplay( spawn( "script_origin", ( 0, 0, 0 ) ), "zmb_nuked_song_1", 88 ); +} + +sndmusegg2() +{ + origins = []; + origins[0] = ( -1998, 632, -48 ); + origins[1] = ( -80, 35, -18 ); + origins[2] = ( 617, 313, 152 ); + level.meteor_counter = 0; + level.music_override = 0; + + for ( i = 0; i < origins.size; i++ ) + level thread sndmusegg2_wait( origins[i] ); +} + +sndmusegg2_wait( bear_origin ) +{ + temp_ent = spawn( "script_origin", bear_origin ); + temp_ent playloopsound( "zmb_meteor_loop" ); + temp_ent thread maps\mp\zombies\_zm_sidequests::fake_use( "main_music_egg_hit", ::sndmusegg2_override ); + + temp_ent waittill( "main_music_egg_hit", player ); + + temp_ent stoploopsound( 1 ); + player playsound( "zmb_meteor_activate" ); + level.meteor_counter += 1; + + if ( level.meteor_counter == 3 ) + level thread sndmuseggplay( temp_ent, "zmb_nuked_song_2", 60 ); + else + { + wait 1.5; + temp_ent delete(); + } +} + +sndmusegg2_override() +{ + if ( isdefined( level.music_override ) && level.music_override ) + return false; + + return true; +} + +sndmusegg3_counter( event, attacker ) +{ + if ( level.mannequin_count <= 0 ) + return; +/# + println( "CAYERS: " + level.mannequin_count ); +#/ + level.mannequin_count--; + + if ( level.mannequin_count <= 0 ) + { + while ( isdefined( level.music_override ) && level.music_override ) + wait 5; + + level thread sndmuseggplay( spawn( "script_origin", ( 0, 0, 0 ) ), "zmb_nuked_song_3", 80 ); + } +} + +sndmuseggplay( ent, alias, time ) +{ + level.music_override = 1; + wait 1; + ent playsound( alias ); + level thread sndeggmusicwait( time ); + level waittill_either( "end_game", "sndSongDone" ); + ent stopsounds(); + wait 0.05; + ent delete(); + level.music_override = 0; +} + +sndeggmusicwait( time ) +{ + level endon( "end_game" ); + wait( time ); + level notify( "sndSongDone" ); +} + +nuked_standard_intermission() +{ + self closemenu(); + self closeingamemenu(); + level endon( "stop_intermission" ); + self endon( "disconnect" ); + self endon( "death" ); + self notify( "_zombie_game_over" ); + self.score = self.score_total; + self.sessionstate = "intermission"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + self.game_over_bg = newclienthudelem( self ); + self.game_over_bg.x = 0; + self.game_over_bg.y = 0; + self.game_over_bg.horzalign = "fullscreen"; + self.game_over_bg.vertalign = "fullscreen"; + self.game_over_bg.foreground = 1; + self.game_over_bg.sort = 1; + self.game_over_bg setshader( "black", 640, 480 ); + self.game_over_bg.alpha = 1; + clientnotify( "znfg" ); + level thread moon_rocket_follow_path(); + wait 0.1; + self.game_over_bg fadeovertime( 1 ); + self.game_over_bg.alpha = 0; + flag_wait( "rocket_hit_nuketown" ); + self.game_over_bg fadeovertime( 1 ); + self.game_over_bg.alpha = 1; +} + +moon_rocket_follow_path() +{ + rocket_start_struct = getstruct( "inertmission_rocket_start", "targetname" ); + rocket_end_struct = getstruct( "inertmission_rocket_end", "targetname" ); + rocket_cam_start_struct = getstruct( "intermission_rocket_cam_start", "targetname" ); + rocket_cam_end_struct = getstruct( "intermission_rocket_cam_end", "targetname" ); + rocket_camera_ent = spawn( "script_model", rocket_cam_start_struct.origin ); + rocket_camera_ent.angles = rocket_cam_start_struct.angles; + rocket = getent( "intermission_rocket", "targetname" ); + rocket show(); + rocket.origin = rocket_start_struct.origin; + camera = spawn( "script_model", rocket_cam_start_struct.origin ); + camera.angles = rocket_cam_start_struct.angles; + camera setmodel( "tag_origin" ); + exploder( 676 ); + players = get_players(); + + foreach ( player in players ) + { + player setclientuivisibilityflag( "hud_visible", 0 ); + player thread player_rocket_rumble(); + player thread intermission_rocket_blur(); + player setdepthoffield( 0, 128, 7000, 10000, 6, 1.8 ); + player camerasetposition( camera ); + player camerasetlookat(); + player cameraactivate( 1 ); + } + + rocket moveto( rocket_end_struct.origin, 9 ); + rocket rotateto( rocket_end_struct.angles, 11 ); + camera moveto( rocket_cam_end_struct.origin, 9 ); + camera rotateto( rocket_cam_end_struct.angles, 8 ); + playfxontag( level._effect["rocket_entry"], rocket, "tag_fx" ); + playfxontag( level._effect["rocket_entry_light"], rocket, "tag_fx" ); + wait 7.5; + flag_set( "rocket_hit_nuketown" ); +} + +intermission_rocket_blur() +{ + while ( !flag( "rocket_hit_nuketown" ) ) + { + blur = randomfloatrange( 1, 5 ); + self setblur( blur, 1 ); + wait( randomintrange( 1, 3 ) ); + } +} + +inermission_rocket_init() +{ + rocket = getent( "intermission_rocket", "targetname" ); + rocket hide(); +} + +player_rocket_rumble() +{ + while ( !flag( "rocket_hit_nuketown" ) ) + { + self playrumbleonentity( "damage_light" ); + wait 1; + } +} + +bus_taser_blocker() +{ + trig = getent( "bus_taser_trigger", "targetname" ); + + if ( isdefined( trig ) ) + clip = getent( trig.target, "targetname" ); + + trig waittill( "trigger" ); + + if ( isdefined( clip ) ) + clip delete(); +} + +marlton_vo_inside_bunker() +{ + marlton_bunker_trig = getent( "marlton_bunker_trig", "targetname" ); + marlton_sound_pos = marlton_bunker_trig.origin; + marlton_vo = []; + marlton_vo[marlton_vo.size] = "vox_plr_3_pap_wait_0"; + marlton_vo[marlton_vo.size] = "vox_plr_3_pap_wait2_0"; + marlton_vo[marlton_vo.size] = "vox_plr_3_pap_wait2_2"; + marlton_vo[marlton_vo.size] = "vox_plr_3_avogadro_attack_1"; + marlton_vo[marlton_vo.size] = "vox_plr_3_avogadro_attack_2"; + marlton_vo[marlton_vo.size] = "vox_plr_3_build_add_1"; + marlton_vo[marlton_vo.size] = "vox_plr_3_build_pck_bjetgun_0"; + marlton_vo[marlton_vo.size] = "vox_plr_3_bus_zom_chase_1"; + marlton_vo[marlton_vo.size] = "vox_plr_3_bus_zom_roof_4"; + marlton_vo[marlton_vo.size] = "vox_plr_3_cough_0"; + marlton_vo[marlton_vo.size] = "vox_plr_3_map_in_fog_0"; + marlton_vo[marlton_vo.size] = "vox_plr_3_map_in_fog_1"; + marlton_vo[marlton_vo.size] = "vox_plr_3_map_in_fog_2"; + marlton_vo[marlton_vo.size] = "vox_plr_3_oh_shit_0_alt01"; + + while ( true ) + { + marlton_bunker_trig waittill( "trigger" ); + + playsoundatposition( marlton_vo[randomintrange( 0, marlton_vo.size )], marlton_sound_pos ); + wait_for_next_round( level.round_number ); + } +} + +wait_for_next_round( current_round ) +{ + while ( level.round_number <= current_round ) + wait 1; +} + +moon_transmission_vo() +{ + start_round = 3; + end_round = 25; + moon_transmission_struct = getstruct( "moon_transmission_struct", "targetname" ); + wait_for_round_range( 3 ); + playsoundatposition( "vox_nuked_tbase_transmission_0", moon_transmission_struct.origin ); + wait_for_round_range( randomintrange( 4, 9 ) ); + playsoundatposition( "vox_nuked_tbase_transmission_1", moon_transmission_struct.origin ); + wait_for_round_range( randomintrange( 10, 17 ) ); + playsoundatposition( "vox_nuked_tbase_transmission_2", moon_transmission_struct.origin ); + wait_for_round_range( randomintrange( 18, 22 ) ); + playsoundatposition( "vox_nuked_tbase_transmission_3", moon_transmission_struct.origin ); + wait_for_round_range( 25 ); + playsoundatposition( "vox_nuked_tbase_transmission_4", moon_transmission_struct.origin ); + flag_set( "moon_transmission_over" ); +} + +wait_for_round_range( round ) +{ + while ( level.round_number < round ) + wait 1; +} + +death_to_all_zombies() +{ + zombies = getaiarray( level.zombie_team ); + + foreach ( index, zombie in zombies ) + { + if ( !isalive( zombie ) ) + continue; + + if ( isdefined( zombie ) ) + zombie dodamage( zombie.health + 666, zombie.origin ); + + if ( index % 3 == 0 ) + wait_network_frame(); + } +} + +zombie_eye_glow_change() +{ + flag_wait( "moon_transmission_over" ); + flag_clear( "spawn_zombies" ); + death_to_all_zombies(); + level.zombie_spawners = getentarray( "zombie_spawner_beyes", "script_noteworthy" ); + + if ( isdefined( level._game_module_custom_spawn_init_func ) ) + [[ level._game_module_custom_spawn_init_func ]](); + + flag_set( "spawn_zombies" ); + level setclientfield( "zombie_eye_change", 1 ); +} + +switch_announcer_to_richtofen() +{ + flag_wait( "moon_transmission_over" ); + sndswitchannouncervox( "richtofen" ); +} + +bus_random_horn() +{ + horn_struct = getstruct( "bus_horn_struct", "targetname" ); + wait_for_round_range( randomintrange( 5, 10 ) ); + playsoundatposition( "zmb_bus_horn_leave", horn_struct.origin ); +} + +fake_lighting_cleanup() +{ + ent = getent( "nuke_reflection", "targetname" ); + + if ( isdefined( ent ) ) + ent delete(); +} + +nuked_collision_patch() +{ + minimap_upperr = spawn( "script_origin", ( 2146, 1354, 384 ) ); + minimap_upperr.targetname = "minimap_corner"; + maps\mp\_compass::setupminimap( "compass_map_zm_nuked" ); + collision1 = spawn( "script_model", ( -48, -700, 100 ) ); + collision1 setmodel( "collision_wall_128x128x10_standard" ); + collision1.angles = ( 0, 0, 0 ); + collision1 ghost(); + collision2 = spawn( "script_model", ( 11, -759, 100 ) ); + collision2 setmodel( "collision_wall_128x128x10_standard" ); + collision2.angles = vectorscale( ( 0, 1, 0 ), 270.0 ); + collision2 ghost(); + collision3 = spawn( "script_model", ( -48, -818, 100 ) ); + collision3 setmodel( "collision_wall_128x128x10_standard" ); + collision3.angles = ( 0, 0, 0 ); + collision3 ghost(); + collision4 = spawn( "script_model", ( -107, -759, 100 ) ); + collision4 setmodel( "collision_wall_128x128x10_standard" ); + collision4.angles = vectorscale( ( 0, 1, 0 ), 270.0 ); + collision4 ghost(); + collision5 = spawn( "script_model", ( -48, -759, 169 ) ); + collision5 setmodel( "collision_wall_128x128x10_standard" ); + collision5.angles = ( 0, 270, 90 ); + collision5 ghost(); + collision6 = spawn( "script_model", ( -48, -759, 31 ) ); + collision6 setmodel( "collision_wall_128x128x10_standard" ); + collision6.angles = ( 0, 270, 90 ); + collision6 ghost(); + collision7 = spawn( "script_model", ( -490, 963, 63 ) ); + collision7 setmodel( "collision_player_256x256x10" ); + collision7.angles = ( 0, 25.2, -90 ); + collision7 ghost(); + collision8 = spawn( "script_model", ( 752, 1079, 120 ) ); + collision8 setmodel( "collision_player_512x512x10" ); + collision8.angles = vectorscale( ( 0, 0, -1 ), 90.0 ); + collision8 ghost(); + collision9 = spawn( "script_model", ( -1349, 1016, 0 ) ); + collision9 setmodel( "collision_wall_128x128x10_standard" ); + collision9.angles = vectorscale( ( 0, 1, 0 ), 339.8 ); + collision9 ghost(); + collision10 = spawn( "script_model", ( 132, 280, 25 ) ); + collision10 setmodel( "collision_wall_128x128x10_standard" ); + collision10.angles = vectorscale( ( 0, 1, 0 ), 20.4 ); + collision10 ghost(); +} + +nuked_special_weapon_magicbox_check( weapon ) +{ + if ( isdefined( level.raygun2_included ) && level.raygun2_included ) + { + if ( weapon == "ray_gun_zm" ) + { + if ( self has_weapon_or_upgrade( "raygun_mark2_zm" ) ) + return false; + } + + if ( weapon == "raygun_mark2_zm" ) + { + if ( self has_weapon_or_upgrade( "ray_gun_zm" ) ) + return false; + + if ( randomint( 100 ) >= 33 ) + return false; + } + } + + return true; +} diff --git a/ZM/Maps/Nuketown/maps/mp/zm_nuked_ffotd.gsc b/ZM/Maps/Nuketown/maps/mp/zm_nuked_ffotd.gsc new file mode 100644 index 0000000..2bdc5c6 --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/zm_nuked_ffotd.gsc @@ -0,0 +1,121 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_ffotd; + +main_start() +{ + precachemodel( "collision_wall_128x128x10_standard" ); + precachemodel( "collision_player_256x256x10" ); + precachemodel( "collision_wall_64x64x10_standard" ); + + if ( isdefined( level.use_swipe_protection ) ) + onplayerconnect_callback( ::claymore_watch_swipes ); +} + +main_end() +{ + setdvar( "zombiemode_path_minz_bias", 28 ); + collision7 = spawn( "script_model", ( -490, 963, 63 ) ); + collision7 setmodel( "collision_player_256x256x10" ); + collision7.angles = ( 0, 25.2, -90 ); + collision7 ghost(); + collision9 = spawn( "script_model", ( -1349, 1016, 0 ) ); + collision9 setmodel( "collision_wall_128x128x10_standard" ); + collision9.angles = vectorscale( ( 0, 1, 0 ), 339.8 ); + collision9 ghost(); + collision11 = spawn( "script_model", ( 1074, 584, 126 ) ); + collision11 setmodel( "collision_wall_64x64x10_standard" ); + collision11.angles = vectorscale( ( 0, 1, 0 ), 15.0 ); + collision11 ghost(); + collision12 = spawn( "script_model", ( 380, -112, 150 ) ); + collision12 setmodel( "collision_wall_128x128x10_standard" ); + collision12.angles = vectorscale( ( 0, 1, 0 ), 275.0 ); + collision12 ghost(); + collision13 = spawn( "script_model", ( 501, 212, 64 ) ); + collision13 setmodel( "collision_wall_64x64x10_standard" ); + collision13.angles = ( 0, 10.8, 90 ); + collision13 ghost(); + level thread prone_under_garage_door_exploit(); +} + +prone_under_garage_door_exploit() +{ + zombie_trigger_origin = ( -679, 339, -40 ); + zombie_trigger_radius = 100; + zombie_trigger_height = 128; + player_trigger_origin = ( -750, 189, -60 ); + player_trigger_radius = 72; + zombie_goto_point = ( -863, 320, -40 ); + level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); + zombie_trigger_origin = ( -652.6, 143.2, -58.6015 ); + zombie_trigger_radius = 85; + zombie_trigger_height = 128; + player_trigger_origin = ( -741, 177, -52 ); + player_trigger_radius = 35; + zombie_goto_point = ( -729.61, 156.24, -50 ); + level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); + zombie_trigger_origin = ( -863, 320, -20 ); + zombie_trigger_radius = 150; + zombie_trigger_height = 128; + player_trigger_origin = ( -750, 189, -60 ); + player_trigger_radius = 72; + zombie_goto_point = ( -804.61, 198.24, -40 ); + level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); +} + +claymore_watch_swipes() +{ + self endon( "disconnect" ); + self notify( "claymore_watch_swipes" ); + self endon( "claymore_watch_swipes" ); + + while ( true ) + { + self waittill( "weapon_change", weapon ); + + if ( is_placeable_mine( weapon ) ) + { + self.mine_damage = 0; + self thread watch_melee_swipes( weapon ); + } + } +} + +watch_melee_swipes( weapname ) +{ + self endon( "weapon_change" ); + self endon( "death" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "melee_swipe", zombie ); + + self.mine_damage++; + + if ( self.mine_damage > 5 ) + { + self.mine_damage = 0; + ammo = self getweaponammoclip( weapname ); + + if ( ammo >= 1 ) + { + self setweaponammoclip( weapname, ammo - 1 ); + + if ( ammo == 1 ) + { + self setweaponammoclip( weapname, ammo - 1 ); + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons[0] ) ) + self switchtoweapon( primaryweapons[0] ); + } + } + else + self takeweapon( weapname ); + } + } +} diff --git a/ZM/Maps/Nuketown/maps/mp/zm_nuked_fx.gsc b/ZM/Maps/Nuketown/maps/mp/zm_nuked_fx.gsc new file mode 100644 index 0000000..ce5674b --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/zm_nuked_fx.gsc @@ -0,0 +1,141 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\zm_nuked_fx; + +precache_util_fx() +{ + +} + +precache_scripted_fx() +{ + level._effect["powerup_on"] = loadfx( "misc/fx_zombie_powerup_on" ); + level._effect["powerup_on_solo"] = loadfx( "misc/fx_zombie_powerup_solo_on" ); + level._effect["powerup_on_caution"] = loadfx( "misc/fx_zombie_powerup_caution_on" ); + level._effect["blue_eyes"] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" ); + level._effect["large_ceiling_dust"] = loadfx( "maps/zombie/fx_dust_ceiling_impact_lg_mdbrown" ); + level._effect["lght_marker"] = loadfx( "maps/zombie/fx_zombie_coast_marker" ); + level._effect["lght_marker_flare"] = loadfx( "maps/zombie/fx_zombie_coast_marker_fl" ); + level._effect["poltergeist"] = loadfx( "misc/fx_zombie_couch_effect" ); + level._effect["zomb_gib"] = loadfx( "maps/zombie/fx_zombie_dog_explosion" ); + level._effect["perk_meteor"] = loadfx( "maps/zombie/fx_zmb_trail_perk_meteor" ); + level._effect["fire_devil_lg"] = loadfx( "maps/zombie/fx_zmb_fire_devil_lg" ); + level._effect["fire_devil_sm"] = loadfx( "maps/zombie/fx_zmb_fire_devil_sm" ); + level._effect["rocket_entry"] = loadfx( "maps/zombie/fx_zmb_nuke_reentry" ); + level._effect["rocket_entry_light"] = loadfx( "maps/zombie/fx_zmb_nuke_rocket_light" ); + level._effect["fx_mp_elec_spark_burst_xsm_thin"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin" ); + level._effect["wire_spark"] = loadfx( "electrical/fx_elec_wire_spark_burst_xsm" ); +} + +precache_createfx_fx() +{ + level._effect["fx_zm_nuked_exp_perk_impact_int_shockwave"] = loadfx( "explosions/fx_zm_nuked_exp_perk_impact_int_shockwave" ); + level._effect["fx_zm_nuked_exp_perk_impact_int"] = loadfx( "explosions/fx_zm_nuked_exp_perk_impact_int" ); + level._effect["fx_zm_nuked_exp_perk_impact_ext"] = loadfx( "explosions/fx_zm_nuked_exp_perk_impact_ext" ); + level._effect["fx_zm_nuked_perk_impact_ceiling_dust"] = loadfx( "dirt/fx_zm_nuked_perk_impact_ceiling_dust" ); + level._effect["fx_lf_zmb_nuke_sun"] = loadfx( "lens_flares/fx_lf_zmb_nuke_sun" ); + level._effect["fx_zm_nuked_water_stream_radioactive_thin"] = loadfx( "water/fx_zm_nuked_water_drip_radioactive" ); + level._effect["fx_zm_nuked_water_stream_radioactive_spatter"] = loadfx( "water/fx_zm_nuked_water_drip_radioactive_spatter" ); + level._effect["fx_zmb_nuke_nuclear_lightning_runner"] = loadfx( "maps/zombie/fx_zmb_nuke_nuclear_lightning_runner" ); + level._effect["fx_zmb_nuke_radioactive_embers_crater"] = loadfx( "maps/zombie/fx_zmb_nuke_radioactive_embers_crater" ); + level._effect["fx_zmb_nuke_radioactive_embers"] = loadfx( "maps/zombie/fx_zmb_nuke_radioactive_embers" ); + level._effect["fx_zmb_nuke_linger_core"] = loadfx( "maps/zombie/fx_zmb_nuke_linger_core" ); + level._effect["fx_zmb_nuke_sand_blowing_lg"] = loadfx( "maps/zombie/fx_zmb_nuke_sand_blowing_lg" ); + level._effect["fx_zmb_nuke_debris_streamer_volume"] = loadfx( "maps/zombie/fx_zmb_nuke_debris_streamer_volume" ); + level._effect["fx_zmb_nuke_burning_ash_gusty"] = loadfx( "maps/zombie/fx_zmb_nuke_burning_ash_gusty" ); + level._effect["fx_zmb_nuke_radioactive_ash_gusty"] = loadfx( "maps/zombie/fx_zmb_nuke_radioactive_ash_gusty" ); + level._effect["fx_zmb_nuke_sand_windy_hvy_md"] = loadfx( "maps/zombie/fx_zmb_nuke_sand_windy_hvy_md" ); + level._effect["fx_zmb_nuke_sand_windy_hvy_sm"] = loadfx( "maps/zombie/fx_zmb_nuke_sand_windy_hvy_sm" ); + level._effect["fx_embers_falling_md"] = loadfx( "env/fire/fx_embers_falling_md" ); + level._effect["fx_embers_falling_sm"] = loadfx( "env/fire/fx_embers_falling_sm" ); + level._effect["fx_ash_embers_falling_radioactive_md"] = loadfx( "debris/fx_ash_embers_falling_radioactive_md" ); + level._effect["fx_ash_embers_falling_radioactive_sm"] = loadfx( "debris/fx_ash_embers_falling_radioactive_sm" ); + level._effect["fx_mp_elec_spark_burst_xsm_thin_runner"] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin_runner" ); + level._effect["fx_elec_spark_wire_xsm_runner"] = loadfx( "electrical/fx_elec_spark_wire_xsm_runner" ); + level._effect["fx_zm_elec_arc_vert"] = loadfx( "electrical/fx_zm_elec_arc_vert" ); + level._effect["fx_elec_transformer_sparks_runner"] = loadfx( "electrical/fx_elec_transformer_sparks_runner" ); + level._effect["fx_zmb_nuke_fire_windblown_md"] = loadfx( "fire/fx_zmb_nuke_fire_windblown_md" ); + level._effect["fx_fire_xsm"] = loadfx( "fire/fx_fire_xsm_no_flicker" ); + level._effect["fx_fire_line_xsm"] = loadfx( "fire/fx_fire_line_xsm_no_flicker" ); + level._effect["fx_fire_sm_smolder"] = loadfx( "fire/fx_zm_fire_sm_smolder_near" ); + level._effect["fx_fire_line_sm"] = loadfx( "fire/fx_nic_fire_line_sm" ); + level._effect["fx_fire_wall_wood_ext_md"] = loadfx( "fire/fx_fire_wall_wood_ext_md" ); + level._effect["fx_fire_ceiling_md"] = loadfx( "fire/fx_nic_fire_ceiling_md" ); + level._effect["fx_fire_ceiling_edge_md"] = loadfx( "fire/fx_nic_fire_ceiling_edge_md" ); + level._effect["fx_nic_fire_ceiling_edge_sm"] = loadfx( "fire/fx_nic_fire_ceiling_edge_sm" ); + level._effect["fx_nic_fire_building_md_dist"] = loadfx( "fire/fx_nic_fire_building_md_dist" ); + level._effect["fx_fire_fireplace_md"] = loadfx( "fire/fx_fire_fireplace_md" ); + level._effect["fx_fire_wood_floor_int"] = loadfx( "fire/fx_fire_wood_floor_int" ); + level._effect["fx_fire_ceiling_rafter_md"] = loadfx( "fire/fx_nic_fire_ceiling_rafter_md" ); + level._effect["fx_fire_eaves_md"] = loadfx( "fire/fx_nic_fire_eaves_md" ); + level._effect["fx_fire_eaves_md_left"] = loadfx( "fire/fx_nic_fire_eaves_md_left" ); + level._effect["fx_fire_eaves_md_right"] = loadfx( "fire/fx_nic_fire_eaves_md_right" ); + level._effect["fx_fire_line_xsm_pole"] = loadfx( "fire/fx_nic_fire_line_xsm_pole" ); + level._effect["fx_fire_line_sm_pole"] = loadfx( "fire/fx_nic_fire_line_sm_pole" ); + level._effect["fx_fire_pole_md_long"] = loadfx( "fire/fx_nic_fire_pole_md_long" ); + level._effect["fx_fire_smolder_area_sm"] = loadfx( "fire/fx_fire_smolder_area_sm" ); + level._effect["fx_smk_wood_sm_black"] = loadfx( "smoke/fx_smk_wood_sm_black" ); + level._effect["fx_smk_fire_lg_black"] = loadfx( "smoke/fx_smk_fire_lg_black" ); + level._effect["fx_smk_plume_md_blk_wispy_dist"] = loadfx( "smoke/fx_smk_plume_md_blk_wispy_dist" ); + level._effect["fx_smk_smolder_rubble_md_int"] = loadfx( "smoke/fx_smk_smolder_rubble_md_int_cheap" ); + level._effect["fx_smk_hallway_md_dark"] = loadfx( "smoke/fx_smk_hallway_md_dark" ); + level._effect["fx_smk_linger_lit"] = loadfx( "smoke/fx_smk_linger_lit" ); + level._effect["fx_smk_linger_lit_slow"] = loadfx( "smoke/fx_smk_linger_lit_slow" ); + level._effect["fx_smk_linger_lit_slow_bright"] = loadfx( "smoke/fx_smk_linger_lit_slow_bright" ); + level._effect["fx_smk_linger_lit_z"] = loadfx( "smoke/fx_smk_linger_lit_z" ); + level._effect["fx_smk_smolder_gray_fast"] = loadfx( "smoke/fx_smk_smolder_gray_fast" ); + level._effect["fx_smk_smolder_gray_slow"] = loadfx( "smoke/fx_smk_smolder_gray_slow" ); + level._effect["fx_zmb_fog_low_radiation_140x300"] = loadfx( "fog/fx_zmb_fog_low_radiation_140x300" ); + level._effect["fx_zm_nuked_light_ray_md_wide"] = loadfx( "light/fx_zm_nuked_light_ray_md_wide" ); + level._effect["fx_zm_nuked_light_ray_md_wide_streak"] = loadfx( "light/fx_zm_nuked_light_ray_md_wide_streak" ); + level._effect["fx_light_ray_grate_warm"] = loadfx( "light/fx_zm_nuked_light_ray_streaks" ); + level._effect["fx_light_flour_glow_cool_sngl_shrt"] = loadfx( "light/fx_light_flour_glow_cool_sngl_shrt" ); + level._effect["fx_zm_nuked_light_ray_streaks_1s"] = loadfx( "light/fx_zm_nuked_light_ray_streaks_1s" ); + level._effect["fx_zm_nuked_light_ray_md_wide_streak_1s"] = loadfx( "light/fx_zm_nuked_light_ray_md_wide_streak_1s" ); + level._effect["fx_mp_nuked_hose_spray"] = loadfx( "maps/mp_maps/fx_mp_nuked_hose_spray" ); + level._effect["fx_ash_embers_up_lg"] = loadfx( "debris/fx_ash_embers_up_lg" ); + level._effect["fx_ash_burning_falling_interior"] = loadfx( "debris/fx_ash_burning_falling_interior" ); + level._effect["fx_zmb_nuke_fire_med"] = loadfx( "maps/zombie/fx_zmb_nuke_fire_med" ); + level._effect["fx_zmb_tranzit_fire_lrg"] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_lrg" ); + level._effect["fx_zmb_tranzit_fire_med"] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_med" ); + level._effect["fx_cloud_cover_volume"] = loadfx( "maps/zombie/fx_zmb_nuke_cloud_cover_volume" ); + level._effect["fx_cloud_cover_volume_sm"] = loadfx( "maps/zombie/fx_zmb_nuke_cloud_cover_volume_sm" ); + level._effect["fx_cloud_cover_flat"] = loadfx( "maps/zombie/fx_zmb_nuke_cloud_cover_flat" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["pant01_fast"] = %fxanim_gp_pant01_fast_anim; + level.scr_anim["fxanim_props"]["shirt01_fast"] = %fxanim_gp_shirt01_fast_anim; + level.scr_anim["fxanim_props"]["sheet_med"] = %fxanim_gp_cloth_sheet_med_fast_anim; + level.scr_anim["fxanim_props"]["wirespark_long"] = %fxanim_gp_wirespark_long_anim; + level.scr_anim["fxanim_props"]["wirespark_med"] = %fxanim_gp_wirespark_med_anim; + level.scr_anim["fxanim_props"]["roaches"] = %fxanim_gp_roaches_anim; + level.scr_anim["fxanim_props"]["wht_shutters"] = %fxanim_zom_nuketown_shutters_anim; + level.scr_anim["fxanim_props"]["wht_shutters02"] = %fxanim_zom_nuketown_shutters02_anim; + level.scr_anim["fxanim_props"]["win_curtains"] = %fxanim_zom_curtains_anim; + level.scr_anim["fxanim_props"]["cabinets_brwn"] = %fxanim_zom_nuketown_cabinets_brwn_anim; + level.scr_anim["fxanim_props"]["cabinets_brwn02"] = %fxanim_zom_nuketown_cabinets_brwn02_anim; + level.scr_anim["fxanim_props"]["cabinets_red"] = %fxanim_zom_nuketown_cabinets_red_anim; + level.scr_anim["fxanim_props"]["porch"] = %fxanim_zom_nuketown_porch_anim; + level.scr_anim["fxanim_props"]["roofvent"] = %fxanim_gp_roofvent_small_wobble_anim; + level.nuked_fxanims = []; + level.nuked_fxanims["fxanim_mp_dustdevil_anim"] = %fxanim_mp_dustdevil_anim; +} + +main() +{ + precache_util_fx(); + precache_createfx_fx(); + precache_scripted_fx(); + precache_fxanim_props(); + maps\mp\createfx\zm_nuked_fx::main(); + setdvar( "enable_global_wind", 1 ); + setdvar( "wind_global_vector", "1 0 0" ); + setdvar( "wind_global_low_altitude", 0 ); + setdvar( "wind_global_hi_altitude", 0 ); + setdvar( "wind_global_low_strength_percent", 0 ); +} diff --git a/ZM/Maps/Nuketown/maps/mp/zm_nuked_gamemodes.gsc b/ZM/Maps/Nuketown/maps/mp/zm_nuked_gamemodes.gsc new file mode 100644 index 0000000..a5266e9 --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/zm_nuked_gamemodes.gsc @@ -0,0 +1,15 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zm_nuked; +#include maps\mp\zm_nuked_standard; + +init() +{ + add_map_gamemode( "zstandard", maps\mp\zm_nuked::zstandard_preinit, undefined, undefined ); + add_map_location_gamemode( "zstandard", "nuked", maps\mp\zm_nuked_standard::precache, maps\mp\zm_nuked_standard::main ); +} diff --git a/ZM/Maps/Nuketown/maps/mp/zm_nuked_perks.gsc b/ZM/Maps/Nuketown/maps/mp/zm_nuked_perks.gsc new file mode 100644 index 0000000..1f5afdb --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/zm_nuked_perks.gsc @@ -0,0 +1,395 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\animscripts\zm_death; +#include maps\mp\zombies\_zm_game_module; + +init_nuked_perks() +{ + level.perk_arrival_vehicle = getent( "perk_arrival_vehicle", "targetname" ); + level.perk_arrival_vehicle setmodel( "tag_origin" ); + flag_init( "perk_vehicle_bringing_in_perk" ); + structs = getstructarray( "zm_perk_machine", "targetname" ); + + for ( i = 0; i < structs.size; i++ ) + structs[i] structdelete(); + + level.nuked_perks = []; + level.nuked_perks[0] = spawnstruct(); + level.nuked_perks[0].model = "zombie_vending_revive"; + level.nuked_perks[0].script_noteworthy = "specialty_quickrevive"; + level.nuked_perks[0].turn_on_notify = "revive_on"; + level.nuked_perks[1] = spawnstruct(); + level.nuked_perks[1].model = "zombie_vending_sleight"; + level.nuked_perks[1].script_noteworthy = "specialty_fastreload"; + level.nuked_perks[1].turn_on_notify = "sleight_on"; + level.nuked_perks[2] = spawnstruct(); + level.nuked_perks[2].model = "zombie_vending_doubletap2"; + level.nuked_perks[2].script_noteworthy = "specialty_rof"; + level.nuked_perks[2].turn_on_notify = "doubletap_on"; + level.nuked_perks[3] = spawnstruct(); + level.nuked_perks[3].model = "zombie_vending_jugg"; + level.nuked_perks[3].script_noteworthy = "specialty_armorvest"; + level.nuked_perks[3].turn_on_notify = "juggernog_on"; + level.nuked_perks[4] = spawnstruct(); + level.nuked_perks[4].model = "p6_anim_zm_buildable_pap"; + level.nuked_perks[4].script_noteworthy = "specialty_weapupgrade"; + level.nuked_perks[4].turn_on_notify = "Pack_A_Punch_on"; + players = getnumexpectedplayers(); + + if ( players == 1 ) + { + level.override_perk_targetname = "zm_perk_machine_override"; + revive_perk_structs = getstructarray( "solo_revive", "targetname" ); + + for ( i = 0; i < revive_perk_structs.size; i++ ) + { + random_revive_structs[i] = getstruct( revive_perk_structs[i].target, "targetname" ); + random_revive_structs[i].script_int = revive_perk_structs[i].script_int; + } + + level.random_revive_structs = array_randomize( random_revive_structs ); + level.random_revive_structs[0].targetname = "zm_perk_machine_override"; + level.random_revive_structs[0].model = level.nuked_perks[0].model; + level.random_revive_structs[0].blocker_model = getent( level.random_revive_structs[0].target, "targetname" ); + level.random_revive_structs[0].script_noteworthy = level.nuked_perks[0].script_noteworthy; + level.random_revive_structs[0].turn_on_notify = level.nuked_perks[0].turn_on_notify; + + if ( !isdefined( level.struct_class_names["targetname"]["zm_perk_machine_override"] ) ) + level.struct_class_names["targetname"]["zm_perk_machine_override"] = []; + + level.struct_class_names["targetname"]["zm_perk_machine_override"][level.struct_class_names["targetname"]["zm_perk_machine_override"].size] = level.random_revive_structs[0]; +/# + level.random_revive_structs[0] thread draw_debug_location(); +#/ + random_perk_structs = []; + perk_structs = getstructarray( "zm_random_machine", "script_noteworthy" ); + perk_structs = array_exclude( perk_structs, revive_perk_structs ); + + for ( i = 0; i < perk_structs.size; i++ ) + { + random_perk_structs[i] = getstruct( perk_structs[i].target, "targetname" ); + random_perk_structs[i].script_int = perk_structs[i].script_int; + } + + level.random_perk_structs = array_randomize( random_perk_structs ); + + for ( i = 1; i < 5; i++ ) + { + level.random_perk_structs[i].targetname = "zm_perk_machine_override"; + level.random_perk_structs[i].model = level.nuked_perks[i].model; + level.random_perk_structs[i].blocker_model = getent( level.random_perk_structs[i].target, "targetname" ); + level.random_perk_structs[i].script_noteworthy = level.nuked_perks[i].script_noteworthy; + level.random_perk_structs[i].turn_on_notify = level.nuked_perks[i].turn_on_notify; + + if ( !isdefined( level.struct_class_names["targetname"]["zm_perk_machine_override"] ) ) + level.struct_class_names["targetname"]["zm_perk_machine_override"] = []; + + level.struct_class_names["targetname"]["zm_perk_machine_override"][level.struct_class_names["targetname"]["zm_perk_machine_override"].size] = level.random_perk_structs[i]; +/# + level.random_perk_structs[i] thread draw_debug_location(); +#/ + } + } + else + { + level.override_perk_targetname = "zm_perk_machine_override"; + random_perk_structs = []; + perk_structs = getstructarray( "zm_random_machine", "script_noteworthy" ); + + for ( i = 0; i < perk_structs.size; i++ ) + { + random_perk_structs[i] = getstruct( perk_structs[i].target, "targetname" ); + random_perk_structs[i].script_int = perk_structs[i].script_int; + } + + level.random_perk_structs = array_randomize( random_perk_structs ); + + for ( i = 0; i < 5; i++ ) + { + level.random_perk_structs[i].targetname = "zm_perk_machine_override"; + level.random_perk_structs[i].model = level.nuked_perks[i].model; + level.random_perk_structs[i].blocker_model = getent( level.random_perk_structs[i].target, "targetname" ); + level.random_perk_structs[i].script_noteworthy = level.nuked_perks[i].script_noteworthy; + level.random_perk_structs[i].turn_on_notify = level.nuked_perks[i].turn_on_notify; + + if ( !isdefined( level.struct_class_names["targetname"]["zm_perk_machine_override"] ) ) + level.struct_class_names["targetname"]["zm_perk_machine_override"] = []; + + level.struct_class_names["targetname"]["zm_perk_machine_override"][level.struct_class_names["targetname"]["zm_perk_machine_override"].size] = level.random_perk_structs[i]; +/# + level.random_perk_structs[i] thread draw_debug_location(); +#/ + } + } +} + +draw_debug_location() +{ +/# + +#/ +} + +wait_for_round_range( start_round, end_round ) +{ + round_to_spawn = randomintrange( start_round, end_round ); + + while ( level.round_number < round_to_spawn ) + wait 1; +} + +bring_random_perk( machines, machine_triggers ) +{ + count = machines.size; + + if ( count <= 0 ) + return; + + index = randomintrange( 0, count ); + bring_perk( machines[index], machine_triggers[index] ); + arrayremoveindex( machines, index ); + arrayremoveindex( machine_triggers, index ); +} + +bring_perk( machine, trigger ) +{ + players = get_players(); + is_doubletap = 0; + is_sleight = 0; + is_revive = 0; + is_jugger = 0; + flag_waitopen( "perk_vehicle_bringing_in_perk" ); + playsoundatposition( "zmb_perks_incoming_quad_front", ( 0, 0, 0 ) ); + playsoundatposition( "zmb_perks_incoming_alarm", ( -2198, 486, 327 ) ); + machine setclientfield( "clientfield_perk_intro_fx", 1 ); + machine.fx = spawn( "script_model", machine.origin ); + machine.fx playloopsound( "zmb_perks_incoming_loop", 6 ); + machine.fx thread perk_incoming_sound(); + machine.fx.angles = machine.angles; + machine.fx setmodel( "tag_origin" ); + machine.fx linkto( machine ); + machine linkto( level.perk_arrival_vehicle, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) ); + start_node = getvehiclenode( "perk_arrival_path_" + machine.script_int, "targetname" ); +/# + level.perk_arrival_vehicle thread draw_debug_location(); +#/ + level.perk_arrival_vehicle perk_follow_path( start_node ); + machine unlink(); + offset = ( 0, 0, 0 ); + + if ( issubstr( machine.targetname, "doubletap" ) ) + { + forward_dir = anglestoforward( machine.original_angles + vectorscale( ( 0, -1, 0 ), 90.0 ) ); + offset = vectorscale( forward_dir * -1, 20 ); + is_doubletap = 1; + } + else if ( issubstr( machine.targetname, "sleight" ) ) + { + forward_dir = anglestoforward( machine.original_angles + vectorscale( ( 0, -1, 0 ), 90.0 ) ); + offset = vectorscale( forward_dir * -1, 5 ); + is_sleight = 1; + } + else if ( issubstr( machine.targetname, "revive" ) ) + { + forward_dir = anglestoforward( machine.original_angles + vectorscale( ( 0, -1, 0 ), 90.0 ) ); + offset = vectorscale( forward_dir * -1, 10 ); + trigger.blocker_model hide(); + is_revive = 1; + } + else if ( issubstr( machine.targetname, "jugger" ) ) + { + forward_dir = anglestoforward( machine.original_angles + vectorscale( ( 0, -1, 0 ), 90.0 ) ); + offset = vectorscale( forward_dir * -1, 10 ); + is_jugger = 1; + } + + if ( !is_revive ) + trigger.blocker_model delete(); + + machine.original_pos += ( offset[0], offset[1], 0 ); + machine.origin = machine.original_pos; + machine.angles = machine.original_angles; + + if ( is_revive ) + { + level.quick_revive_final_pos = machine.origin; + level.quick_revive_final_angles = machine.angles; + } + + machine.fx stoploopsound( 0.5 ); + machine setclientfield( "clientfield_perk_intro_fx", 0 ); + playsoundatposition( "zmb_perks_incoming_land", machine.origin ); + trigger trigger_on(); + machine thread bring_perk_landing_damage(); + machine.fx unlink(); + machine.fx delete(); + machine notify( machine.turn_on_notify ); + level notify( machine.turn_on_notify ); + machine vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine playsound( "zmb_perks_power_on" ); + machine maps\mp\zombies\_zm_perks::perk_fx( undefined, 1 ); + + if ( is_revive ) + { + level.revive_machine_spawned = 1; + machine thread maps\mp\zombies\_zm_perks::perk_fx( "revive_light" ); + } + else if ( is_jugger ) + machine thread maps\mp\zombies\_zm_perks::perk_fx( "jugger_light" ); + else if ( is_doubletap ) + machine thread maps\mp\zombies\_zm_perks::perk_fx( "doubletap_light" ); + else if ( is_sleight ) + machine thread maps\mp\zombies\_zm_perks::perk_fx( "sleight_light" ); +} + +perk_incoming_sound() +{ + self endon( "death" ); + wait 10; + self playsound( "zmb_perks_incoming" ); +} + +bring_perk_landing_damage() +{ + player_prone_damage_radius = 300; + earthquake( 0.7, 2.5, self.origin, 1000 ); + radiusdamage( self.origin, player_prone_damage_radius, 10, 5, undefined, "MOD_EXPLOSIVE" ); + exploder( 500 + self.script_int ); + exploder( 511 ); + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( distancesquared( players[i].origin, self.origin ) <= player_prone_damage_radius * player_prone_damage_radius ) + { + players[i] setstance( "prone" ); + players[i] shellshock( "default", 1.5 ); + radiusdamage( players[i].origin, player_prone_damage_radius / 2, 10, 5, undefined, "MOD_EXPLOSIVE" ); + } + } + + zombies = getaiarray( level.zombie_team ); + + for ( i = 0; i < zombies.size; i++ ) + { + zombie = zombies[i]; + + if ( !isdefined( zombie ) || !isalive( zombie ) ) + continue; + + if ( distancesquared( zombie.origin, self.origin ) > 250000 ) + continue; + + zombie thread perk_machine_knockdown_zombie( self.origin ); + } +} + +perk_machine_knockdown_zombie( origin ) +{ + self.a.gib_ref = random( array( "guts", "right_arm", "left_arm" ) ); + self thread maps\mp\animscripts\zm_death::do_gib(); + level.zombie_total++; + level.zombie_total_subtract++; + self dodamage( self.health + 100, origin ); +} + +perk_follow_path( node ) +{ + flag_set( "perk_vehicle_bringing_in_perk" ); + self notify( "newpath" ); + + if ( isdefined( node ) ) + self.attachedpath = node; + + pathstart = self.attachedpath; + self.currentnode = self.attachedpath; + + if ( !isdefined( pathstart ) ) + return; + + self attachpath( pathstart ); + self startpath(); + + self waittill( "reached_end_node" ); + + flag_clear( "perk_vehicle_bringing_in_perk" ); +} + +turn_perks_on() +{ + wait 3; + maps\mp\zombies\_zm_game_module::turn_power_on_and_open_doors(); +} + +perks_from_the_sky() +{ + level thread turn_perks_on(); + top_height = 8000; + machines = []; + machine_triggers = []; + machines[0] = getent( "vending_revive", "targetname" ); + + if ( !isdefined( machines[0] ) ) + return; + + machine_triggers[0] = getent( "vending_revive", "target" ); + move_perk( machines[0], top_height, 5.0, 0.001 ); + machine_triggers[0] trigger_off(); + machines[1] = getent( "vending_doubletap", "targetname" ); + machine_triggers[1] = getent( "vending_doubletap", "target" ); + move_perk( machines[1], top_height, 5.0, 0.001 ); + machine_triggers[1] trigger_off(); + machines[2] = getent( "vending_sleight", "targetname" ); + machine_triggers[2] = getent( "vending_sleight", "target" ); + move_perk( machines[2], top_height, 5.0, 0.001 ); + machine_triggers[2] trigger_off(); + machines[3] = getent( "vending_jugg", "targetname" ); + machine_triggers[3] = getent( "vending_jugg", "target" ); + move_perk( machines[3], top_height, 5.0, 0.001 ); + machine_triggers[3] trigger_off(); + machine_triggers[4] = getent( "specialty_weapupgrade", "script_noteworthy" ); + machines[4] = getent( machine_triggers[4].target, "targetname" ); + move_perk( machines[4], top_height, 5.0, 0.001 ); + machine_triggers[4] trigger_off(); + flag_wait( "initial_blackscreen_passed" ); + wait( randomfloatrange( 5.0, 15.0 ) ); + players = get_players(); + + if ( players.size == 1 ) + { + wait 4.0; + index = 0; + bring_perk( machines[index], machine_triggers[index] ); + arrayremoveindex( machines, index ); + arrayremoveindex( machine_triggers, index ); + } + + wait_for_round_range( 3, 5 ); + wait( randomintrange( 30, 60 ) ); + bring_random_perk( machines, machine_triggers ); + wait_for_round_range( 6, 9 ); + wait( randomintrange( 30, 60 ) ); + bring_random_perk( machines, machine_triggers ); + wait_for_round_range( 10, 14 ); + wait( randomintrange( 60, 120 ) ); + bring_random_perk( machines, machine_triggers ); + wait_for_round_range( 15, 19 ); + wait( randomintrange( 60, 120 ) ); + bring_random_perk( machines, machine_triggers ); + wait_for_round_range( 20, 25 ); + wait( randomintrange( 60, 120 ) ); + bring_random_perk( machines, machine_triggers ); +} + +move_perk( ent, dist, time, accel ) +{ + ent.original_pos = ent.origin; + ent.original_angles = ent.angles; + pos = ( ent.origin[0], ent.origin[1], ent.origin[2] + dist ); + ent moveto( pos, time, accel, accel ); +} diff --git a/ZM/Maps/Nuketown/maps/mp/zm_nuked_standard.gsc b/ZM/Maps/Nuketown/maps/mp/zm_nuked_standard.gsc new file mode 100644 index 0000000..0cb82fa --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/zm_nuked_standard.gsc @@ -0,0 +1,52 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zombies\_zm_magicbox; + +precache() +{ + +} + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "nuked" ); + maps\mp\zombies\_zm_game_module::set_current_game_module( level.game_module_standard_index ); + level.enemy_location_override_func = ::enemy_location_override; + flag_wait( "initial_blackscreen_passed" ); + flag_set( "power_on" ); + nuked_treasure_chest_init(); +} + +enemy_location_override( zombie, enemy ) +{ + location = enemy.origin; + + if ( is_true( self.reroute ) ) + { + if ( isdefined( self.reroute_origin ) ) + location = self.reroute_origin; + } + + return location; +} + +nuked_treasure_chest_init() +{ + chest1 = getstruct( "start_chest1", "script_noteworthy" ); + chest2 = getstruct( "start_chest2", "script_noteworthy" ); + chest3 = getstruct( "culdesac_chest", "script_noteworthy" ); + chest4 = getstruct( "oh2_chest", "script_noteworthy" ); + chest5 = getstruct( "oh1_chest", "script_noteworthy" ); + level.chests = []; + level.chests[level.chests.size] = chest1; + level.chests[level.chests.size] = chest2; + level.chests[level.chests.size] = chest3; + level.chests[level.chests.size] = chest4; + level.chests[level.chests.size] = chest5; + maps\mp\zombies\_zm_magicbox::treasure_chest_init( "start_chest" ); +} diff --git a/ZM/Maps/Nuketown/maps/mp/zombies/_zm_melee_weapon.gsc b/ZM/Maps/Nuketown/maps/mp/zombies/_zm_melee_weapon.gsc new file mode 100644 index 0000000..a021619 --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/zombies/_zm_melee_weapon.gsc @@ -0,0 +1,473 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_audio; + +init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn ) +{ + precacheitem( weapon_name ); + precacheitem( flourish_weapon_name ); + add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon ); + melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_weapon_triggers.size; i++ ) + { + knife_model = getent( melee_weapon_triggers[i].target, "targetname" ); + + if ( isdefined( knife_model ) ) + knife_model hide(); + + melee_weapon_triggers[i] thread melee_weapon_think( weapon_name, cost, has_weapon, give_weapon, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); + melee_weapon_triggers[i] sethintstring( hint_string, cost ); + melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); + melee_weapon_triggers[i] usetriggerrequirelookat(); + } + + melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_weapon_structs.size; i++ ) + { + if ( isdefined( melee_weapon_structs[i].trigger_stub ) ) + { + melee_weapon_structs[i].trigger_stub.hint_string = hint_string; + melee_weapon_structs[i].trigger_stub.cost = cost; + melee_weapon_structs[i].trigger_stub.weapon_name = weapon_name; + melee_weapon_structs[i].trigger_stub.has_weapon = has_weapon; + melee_weapon_structs[i].trigger_stub.give_weapon = give_weapon; + melee_weapon_structs[i].trigger_stub.vo_dialog_id = vo_dialog_id; + melee_weapon_structs[i].trigger_stub.flourish_weapon_name = flourish_weapon_name; + melee_weapon_structs[i].trigger_stub.ballistic_weapon_name = ballistic_weapon_name; + melee_weapon_structs[i].trigger_stub.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; + melee_weapon_structs[i].trigger_stub.trigger_func = ::melee_weapon_think; + melee_weapon_structs[i].trigger_stub.flourish_fn = flourish_fn; + } + } + + register_melee_weapon_for_level( weapon_name ); + + if ( !isdefined( level.ballistic_weapon_name ) ) + level.ballistic_weapon_name = []; + + level.ballistic_weapon_name[weapon_name] = ballistic_weapon_name; + + if ( !isdefined( level.ballistic_upgraded_weapon_name ) ) + level.ballistic_upgraded_weapon_name = []; + + level.ballistic_upgraded_weapon_name[weapon_name] = ballistic_upgraded_weapon_name; +} + +add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn ) +{ + melee_weapon = spawnstruct(); + melee_weapon.weapon_name = weapon_name; + melee_weapon.flourish_weapon_name = flourish_weapon_name; + melee_weapon.ballistic_weapon_name = ballistic_weapon_name; + melee_weapon.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; + melee_weapon.cost = cost; + melee_weapon.wallbuy_targetname = wallbuy_targetname; + melee_weapon.hint_string = hint_string; + melee_weapon.vo_dialog_id = vo_dialog_id; + melee_weapon.has_weapon = has_weapon; + melee_weapon.give_weapon = give_weapon; + melee_weapon.take_weapon = take_weapon; + melee_weapon.flourish_fn = flourish_fn; + + if ( !isdefined( level._melee_weapons ) ) + level._melee_weapons = []; + + level._melee_weapons[level._melee_weapons.size] = melee_weapon; +} + +spectator_respawn_all() +{ + for ( i = 0; i < level._melee_weapons.size; i++ ) + self [[ level._melee_weapons[i].take_weapon ]](); + + for ( i = 0; i < level._melee_weapons.size; i++ ) + self spectator_respawn( level._melee_weapons[i].wallbuy_targetname, level._melee_weapons[i].take_weapon, level._melee_weapons[i].has_weapon ); +} + +spectator_respawn( wallbuy_targetname, take_weapon, has_weapon ) +{ + melee_triggers = getentarray( wallbuy_targetname, "targetname" ); + players = get_players(); + + for ( i = 0; i < melee_triggers.size; i++ ) + { + melee_triggers[i] setvisibletoall(); + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + for ( j = 0; j < players.size; j++ ) + { + if ( players[j] [[ has_weapon ]]() ) + melee_triggers[i] setinvisibletoplayer( players[j] ); + } + } + } +} + +trigger_hide_all() +{ + for ( i = 0; i < level._melee_weapons.size; i++ ) + self trigger_hide( level._melee_weapons[i].wallbuy_targetname ); +} + +trigger_hide( wallbuy_targetname ) +{ + melee_triggers = getentarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_triggers.size; i++ ) + melee_triggers[i] setinvisibletoplayer( self ); +} + +has_any_ballistic_knife() +{ + if ( self hasweapon( "knife_ballistic_zm" ) ) + return true; + + if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) + return true; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) ) + return true; + + if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) + return true; + } + + return false; +} + +has_upgraded_ballistic_knife() +{ + if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) + return true; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) + return true; + } + + return false; +} + +give_ballistic_knife( weapon_string, upgraded ) +{ + current_melee_weapon = self get_player_melee_weapon(); + + if ( isdefined( current_melee_weapon ) ) + { + if ( upgraded && isdefined( level.ballistic_upgraded_weapon_name ) && isdefined( level.ballistic_upgraded_weapon_name[current_melee_weapon] ) ) + weapon_string = level.ballistic_upgraded_weapon_name[current_melee_weapon]; + + if ( !upgraded && isdefined( level.ballistic_weapon_name ) && isdefined( level.ballistic_weapon_name[current_melee_weapon] ) ) + weapon_string = level.ballistic_weapon_name[current_melee_weapon]; + } + + return weapon_string; +} + +change_melee_weapon( weapon_name, current_weapon ) +{ + current_melee_weapon = self get_player_melee_weapon(); + + if ( isdefined( current_melee_weapon ) ) + { + self takeweapon( current_melee_weapon ); + unacquire_weapon_toggle( current_melee_weapon ); + } + + self set_player_melee_weapon( weapon_name ); + had_ballistic = 0; + had_ballistic_upgraded = 0; + ballistic_was_primary = 0; + primaryweapons = self getweaponslistprimaries(); + + for ( i = 0; i < primaryweapons.size; i++ ) + { + primary_weapon = primaryweapons[i]; + + if ( issubstr( primary_weapon, "knife_ballistic_" ) ) + { + had_ballistic = 1; + + if ( primary_weapon == current_weapon ) + ballistic_was_primary = 1; + + self notify( "zmb_lost_knife" ); + self takeweapon( primary_weapon ); + unacquire_weapon_toggle( primary_weapon ); + + if ( issubstr( primary_weapon, "upgraded" ) ) + had_ballistic_upgraded = 1; + } + } + + if ( had_ballistic ) + { + if ( had_ballistic_upgraded ) + { + new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name]; + + if ( ballistic_was_primary ) + current_weapon = new_ballistic; + + self giveweapon( new_ballistic, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) ); + } + else + { + new_ballistic = level.ballistic_weapon_name[weapon_name]; + + if ( ballistic_was_primary ) + current_weapon = new_ballistic; + + self giveweapon( new_ballistic, 0 ); + } + } + + return current_weapon; +} + +melee_weapon_think( weapon_name, cost, has_weapon, give_weapon, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) +{ + self.first_time_triggered = 0; + + if ( isdefined( self.stub ) ) + { + self endon( "kill_trigger" ); + + if ( isdefined( self.stub.first_time_triggered ) ) + self.first_time_triggered = self.stub.first_time_triggered; + + weapon_name = self.stub.weapon_name; + cost = self.stub.cost; + has_weapon = self.stub.has_weapon; + give_weapon = self.stub.give_weapon; + flourish_fn = self.stub.flourish_fn; + vo_dialog_id = self.stub.vo_dialog_id; + flourish_weapon_name = self.stub.flourish_weapon_name; + ballistic_weapon_name = self.stub.ballistic_weapon_name; + ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name; + players = getplayers(); + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] [[ has_weapon ]]() ) + self setinvisibletoplayer( players[i] ); + } + } + } + + for (;;) + { + self waittill( "trigger", player ); + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + if ( player in_revive_trigger() ) + { + wait 0.1; + continue; + } + + if ( player isthrowinggrenade() ) + { + wait 0.1; + continue; + } + + if ( player.is_drinking > 0 ) + { + wait 0.1; + continue; + } + + if ( player hasweapon( weapon_name ) || player has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( player isswitchingweapons() ) + { + wait 0.1; + continue; + } + + current_weapon = player getcurrentweapon(); + + if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) || player has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission ) + { + wait 0.1; + continue; + } + + player_has_weapon = player [[ has_weapon ]](); + + if ( !player_has_weapon ) + { + if ( player.score >= cost ) + { + if ( self.first_time_triggered == 0 ) + { + model = getent( self.target, "targetname" ); + + if ( isdefined( model ) ) + model thread melee_weapon_show( player ); + else if ( isdefined( self.clientfieldname ) ) + level setclientfield( self.clientfieldname, 1 ); + + self.first_time_triggered = 1; + + if ( isdefined( self.stub ) ) + self.stub.first_time_triggered = 1; + } + + player maps\mp\zombies\_zm_score::minus_to_player_score( cost ); + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" ); + player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, give_weapon, flourish_fn, self ); + } + else + { + play_sound_on_ent( "no_purchase" ); + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 ); + } + + continue; + } + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + self setinvisibletoplayer( player ); + } +} + +melee_weapon_show( player ) +{ + player_angles = vectortoangles( player.origin - self.origin ); + player_yaw = player_angles[1]; + weapon_yaw = self.angles[1]; + yaw_diff = angleclamp180( player_yaw - weapon_yaw ); + + if ( yaw_diff > 0 ) + yaw = weapon_yaw - 90; + else + yaw = weapon_yaw + 90; + + self.og_origin = self.origin; + self.origin += anglestoforward( ( 0, yaw, 0 ) ) * 8; + wait 0.05; + self show(); + play_sound_at_pos( "weapon_show", self.origin, self ); + time = 1; + self moveto( self.og_origin, time ); +} + +give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, give_weapon, flourish_fn, trigger ) +{ + if ( isdefined( flourish_fn ) ) + self thread [[ flourish_fn ]](); + + gun = self do_melee_weapon_flourish_begin( flourish_weapon_name ); + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id ); + self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); + self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + return; + + self [[ give_weapon ]](); + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + trigger setinvisibletoplayer( self ); + self trigger_hide_all(); + } +} + +do_melee_weapon_flourish_begin( flourish_weapon_name ) +{ + self increment_is_drinking(); + self disable_player_move_states( 1 ); + gun = self getcurrentweapon(); + weapon = flourish_weapon_name; + self giveweapon( weapon ); + self switchtoweapon( weapon ); + return gun; +} + +do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) +{ + assert( gun != "zombie_perk_bottle_doubletap" ); + assert( gun != "zombie_perk_bottle_revive" ); + assert( gun != "zombie_perk_bottle_jugg" ); + assert( gun != "zombie_perk_bottle_sleight" ); + assert( gun != "zombie_perk_bottle_marathon" ); + assert( gun != "zombie_perk_bottle_nuke" ); + assert( gun != "zombie_perk_bottle_deadshot" ); + assert( gun != "zombie_perk_bottle_additionalprimaryweapon" ); + assert( gun != "zombie_perk_bottle_tombstone" ); + assert( gun != level.revive_tool ); + self enable_player_move_states(); + weapon = flourish_weapon_name; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + { + self takeweapon( weapon ); + self.lastactiveweapon = "none"; + return; + } + + self takeweapon( weapon ); + self giveweapon( weapon_name ); + gun = change_melee_weapon( weapon_name, gun ); + + if ( self hasweapon( "knife_zm" ) ) + self takeweapon( "knife_zm" ); + + if ( self is_multiple_drinking() ) + { + self decrement_is_drinking(); + return; + } + else if ( gun == "knife_zm" ) + { + self switchtoweapon( weapon_name ); + self decrement_is_drinking(); + return; + } + else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) + self switchtoweapon( gun ); + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + } + + self waittill( "weapon_change_complete" ); + + if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) ) + self decrement_is_drinking(); +} diff --git a/ZM/Maps/Nuketown/maps/mp/zombies/_zm_weap_ballistic_knife.gsc b/ZM/Maps/Nuketown/maps/mp/zombies/_zm_weap_ballistic_knife.gsc new file mode 100644 index 0000000..4fab700 --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/zombies/_zm_weap_ballistic_knife.gsc @@ -0,0 +1,273 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_stats; + +init() +{ + if ( isdefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 ) + { + precachemodel( "t5_weapon_ballistic_knife_projectile" ); + precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" ); + } +} + +on_spawn( watcher, player ) +{ + player endon( "death" ); + player endon( "disconnect" ); + player endon( "zmb_lost_knife" ); + level endon( "game_ended" ); + + self waittill( "stationary", endpos, normal, angles, attacker, prey, bone ); + + isfriendly = 0; + + if ( isdefined( endpos ) ) + { + retrievable_model = spawn( "script_model", endpos ); + retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); + retrievable_model setowner( player ); + retrievable_model.owner = player; + retrievable_model.angles = angles; + retrievable_model.name = watcher.weapon; + + if ( isdefined( prey ) ) + { + if ( isplayer( prey ) && player.team == prey.team ) + isfriendly = 1; + else if ( isai( prey ) && player.team == prey.team ) + isfriendly = 1; + + if ( !isfriendly ) + { + retrievable_model linkto( prey, bone ); + retrievable_model thread force_drop_knives_to_ground_on_death( player, prey ); + } + else if ( isfriendly ) + { + retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) ); + normal = ( 0, 0, 1 ); + } + } + + watcher.objectarray[watcher.objectarray.size] = retrievable_model; + + if ( isfriendly ) + retrievable_model waittill( "stationary" ); + + retrievable_model thread drop_knives_to_ground( player ); + + if ( isfriendly ) + player notify( "ballistic_knife_stationary", retrievable_model, normal ); + else + player notify( "ballistic_knife_stationary", retrievable_model, normal, prey ); + + retrievable_model thread wait_to_show_glowing_model( prey ); + } +} + +wait_to_show_glowing_model( prey ) +{ + level endon( "game_ended" ); + self endon( "death" ); + wait 2; + self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); +} + +on_spawn_retrieve_trigger( watcher, player ) +{ + player endon( "death" ); + player endon( "disconnect" ); + player endon( "zmb_lost_knife" ); + level endon( "game_ended" ); + + player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey ); + + if ( !isdefined( retrievable_model ) ) + return; + + trigger_pos = []; + + if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) ) + { + trigger_pos[0] = prey.origin[0]; + trigger_pos[1] = prey.origin[1]; + trigger_pos[2] = prey.origin[2] + 10; + } + else + { + trigger_pos[0] = retrievable_model.origin[0] + 10 * normal[0]; + trigger_pos[1] = retrievable_model.origin[1] + 10 * normal[1]; + trigger_pos[2] = retrievable_model.origin[2] + 10 * normal[2]; + } + + pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ) ); + pickup_trigger setcursorhint( "HINT_NOICON" ); + pickup_trigger.owner = player; + retrievable_model.retrievabletrigger = pickup_trigger; + hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP"; + + if ( isdefined( hint_string ) ) + pickup_trigger sethintstring( hint_string ); + else + pickup_trigger sethintstring( &"GENERIC_PICKUP" ); + + pickup_trigger setteamfortrigger( player.team ); + player clientclaimtrigger( pickup_trigger ); + pickup_trigger enablelinkto(); + + if ( isdefined( prey ) ) + pickup_trigger linkto( prey ); + else + pickup_trigger linkto( retrievable_model ); + + if ( isdefined( level.knife_planted ) ) + [[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey ); + + retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound ); + player thread watch_shutdown( pickup_trigger, retrievable_model ); +} + +debug_print( endpos ) +{ +/# + self endon( "death" ); + + while ( true ) + { + print3d( endpos, "pickup_trigger" ); + wait 0.05; + } +#/ +} + +watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse ) +{ + self endon( "death" ); + self endon( "delete" ); + level endon( "game_ended" ); + + while ( true ) + { + trigger waittill( "trigger", player ); + + if ( !isalive( player ) ) + continue; + + if ( !player isonground() ) + continue; + + if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam ) + continue; + + if ( isdefined( trigger.claimedby ) && player != trigger.claimedby ) + continue; + + if ( player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() ) + { + if ( isdefined( playersoundonuse ) ) + player playlocalsound( playersoundonuse ); + + if ( isdefined( npcsoundonuse ) ) + player playsound( npcsoundonuse ); + + player thread [[ callback ]]( weapon, model, trigger ); + break; + } + } +} + +pick_up( weapon, model, trigger ) +{ + current_weapon = self getcurrentweapon(); + + if ( current_weapon != weapon ) + { + clip_ammo = self getweaponammoclip( weapon ); + + if ( !clip_ammo ) + self setweaponammoclip( weapon, 1 ); + else + { + new_ammo_stock = self getweaponammostock( weapon ) + 1; + self setweaponammostock( weapon, new_ammo_stock ); + } + } + else + { + new_ammo_stock = self getweaponammostock( weapon ) + 1; + self setweaponammostock( weapon, new_ammo_stock ); + } + + self maps\mp\zombies\_zm_stats::increment_client_stat( "ballistic_knives_pickedup" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "ballistic_knives_pickedup" ); + model destroy_ent(); + trigger destroy_ent(); +} + +destroy_ent() +{ + if ( isdefined( self ) ) + { + if ( isdefined( self.glowing_model ) ) + self.glowing_model delete(); + + self delete(); + } +} + +watch_shutdown( trigger, model ) +{ + self waittill_any( "death", "disconnect", "zmb_lost_knife" ); + trigger destroy_ent(); + model destroy_ent(); +} + +drop_knives_to_ground( player ) +{ + player endon( "death" ); + player endon( "zmb_lost_knife" ); + + for (;;) + { + level waittill( "drop_objects_to_ground", origin, radius ); + + if ( distancesquared( origin, self.origin ) < radius * radius ) + { + self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) ); + self thread update_retrieve_trigger( player ); + } + } +} + +force_drop_knives_to_ground_on_death( player, prey ) +{ + self endon( "death" ); + player endon( "zmb_lost_knife" ); + + prey waittill( "death" ); + + self unlink(); + self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) ); + self thread update_retrieve_trigger( player ); +} + +update_retrieve_trigger( player ) +{ + self endon( "death" ); + player endon( "zmb_lost_knife" ); + + if ( isdefined( level.custom_update_retrieve_trigger ) ) + { + self [[ level.custom_update_retrieve_trigger ]]( player ); + return; + } + + self waittill( "stationary" ); + + trigger = self.retrievabletrigger; + trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 ); + trigger linkto( self ); +} diff --git a/ZM/Maps/Nuketown/maps/mp/zombies/_zm_weap_bowie.gsc b/ZM/Maps/Nuketown/maps/mp/zombies/_zm_weap_bowie.gsc new file mode 100644 index 0000000..5ab6a5d --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/zombies/_zm_weap_bowie.gsc @@ -0,0 +1,52 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_melee_weapon; +#include maps\mp\zombies\_zm_weapons; + +init() +{ + if ( isdefined( level.bowie_cost ) ) + cost = level.bowie_cost; + else + cost = 3000; + + maps\mp\zombies\_zm_melee_weapon::init( "bowie_knife_zm", "zombie_bowie_flourish", "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", cost, "bowie_upgrade", &"ZOMBIE_WEAPON_BOWIE_BUY", "bowie", ::has_bowie, ::give_bowie, ::take_bowie, ::bowie_flourish ); + maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie" ); + maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie_upgraded" ); +} + +spectator_respawn() +{ + maps\mp\zombies\_zm_melee_weapon::spectator_respawn( "bowie_upgrade", ::take_bowie, ::has_bowie ); +} + +has_bowie() +{ + if ( is_true( level._allow_melee_weapon_switching ) ) + return false; + + if ( is_true( self._sickle_zm_equipped ) || is_true( self._bowie_zm_equipped ) || is_true( self._tazer_zm_equipped ) ) + return true; + + return false; +} + +give_bowie() +{ + self._bowie_zm_equipped = 1; + self._sickle_zm_equipped = undefined; + self._tazer_zm_equipped = undefined; +} + +take_bowie() +{ + self._bowie_zm_equipped = undefined; +} + +bowie_flourish() +{ + +} diff --git a/ZM/Maps/Nuketown/maps/mp/zombies/_zm_weap_claymore.gsc b/ZM/Maps/Nuketown/maps/mp/zombies/_zm_weap_claymore.gsc new file mode 100644 index 0000000..e18ce91 --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/zombies/_zm_weap_claymore.gsc @@ -0,0 +1,471 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\gametypes_zm\_weaponobjects; + +init() +{ + if ( !isdefined( level.claymores_max_per_player ) ) + level.claymores_max_per_player = 12; + + trigs = getentarray( "claymore_purchase", "targetname" ); + + for ( i = 0; i < trigs.size; i++ ) + { + model = getent( trigs[i].target, "targetname" ); + + if ( isdefined( model ) ) + model hide(); + } + + array_thread( trigs, ::buy_claymores ); + level thread give_claymores_after_rounds(); + level.claymores_on_damage = ::satchel_damage; + level.pickup_claymores = ::pickup_claymores; + level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener; + level.claymore_detectiondot = cos( 70 ); + level.claymore_detectionmindist = 20; + level._effect["claymore_laser"] = loadfx( "weapon/claymore/fx_claymore_laser" ); +} + +buy_claymores() +{ + self.zombie_cost = 1000; + self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); + self setcursorhint( "HINT_NOICON" ); + self endon( "kill_trigger" ); + + if ( !isdefined( self.stub ) ) + return; + + if ( isdefined( self.stub ) && !isdefined( self.stub.claymores_triggered ) ) + self.stub.claymores_triggered = 0; + + self.claymores_triggered = self.stub.claymores_triggered; + + while ( true ) + { + self waittill( "trigger", who ); + + if ( who in_revive_trigger() ) + continue; + + if ( who has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( is_player_valid( who ) ) + { + if ( who.score >= self.zombie_cost ) + { + if ( !who is_player_placeable_mine( "claymore_zm" ) ) + { + play_sound_at_pos( "purchase", self.origin ); + who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost ); + who thread claymore_setup(); + who thread show_claymore_hint( "claymore_purchased" ); + who thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" ); + + if ( isdefined( self.stub ) ) + self.claymores_triggered = self.stub.claymores_triggered; + + if ( self.claymores_triggered == 0 ) + { + model = getent( self.target, "targetname" ); + + if ( isdefined( model ) ) + model thread maps\mp\zombies\_zm_weapons::weapon_show( who ); + else if ( isdefined( self.clientfieldname ) ) + level setclientfield( self.clientfieldname, 1 ); + + self.claymores_triggered = 1; + + if ( isdefined( self.stub ) ) + self.stub.claymores_triggered = 1; + } + + trigs = getentarray( "claymore_purchase", "targetname" ); + + for ( i = 0; i < trigs.size; i++ ) + trigs[i] setinvisibletoplayer( who ); + } + else + who thread show_claymore_hint( "already_purchased" ); + } + } + } +} + +claymore_unitrigger_update_prompt( player ) +{ + if ( player is_player_placeable_mine( "claymore_zm" ) ) + return false; + + return true; +} + +set_claymore_visible() +{ + players = get_players(); + trigs = getentarray( "claymore_purchase", "targetname" ); + + while ( true ) + { + for ( j = 0; j < players.size; j++ ) + { + if ( !players[j] is_player_placeable_mine( "claymore_zm" ) ) + { + for ( i = 0; i < trigs.size; i++ ) + trigs[i] setinvisibletoplayer( players[j], 0 ); + } + } + + wait 1; + players = get_players(); + } +} + +claymore_safe_to_plant() +{ + if ( self.owner.claymores.size >= level.claymores_max_per_player ) + return 0; + + if ( isdefined( level.claymore_safe_to_plant ) ) + return self [[ level.claymore_safe_to_plant ]](); + + return 1; +} + +claymore_wait_and_detonate() +{ + wait 0.1; + self detonate( self.owner ); +} + +claymore_watch() +{ + self endon( "death" ); + + while ( true ) + { + self waittill( "grenade_fire", claymore, weapname ); + + if ( weapname == "claymore_zm" ) + { + claymore.owner = self; + claymore.team = self.team; + self notify( "zmb_enable_claymore_prompt" ); + + if ( claymore claymore_safe_to_plant() ) + { + if ( isdefined( level.claymore_planted ) ) + self thread [[ level.claymore_planted ]]( claymore ); + + claymore thread satchel_damage(); + claymore thread claymore_detonation(); + claymore thread play_claymore_effects(); + self maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_planted" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_planted" ); + } + else + claymore thread claymore_wait_and_detonate(); + } + } +} + +claymore_setup() +{ + if ( !isdefined( self.claymores ) ) + self.claymores = []; + + self thread claymore_watch(); + self giveweapon( "claymore_zm" ); + self set_player_placeable_mine( "claymore_zm" ); + self setactionslot( 4, "weapon", "claymore_zm" ); + self setweaponammostock( "claymore_zm", 2 ); +} + +adjust_trigger_origin( origin ) +{ + origin += vectorscale( ( 0, 0, 1 ), 20.0 ); + return origin; +} + +on_spawn_retrieve_trigger( watcher, player ) +{ + self maps\mp\gametypes_zm\_weaponobjects::onspawnretrievableweaponobject( watcher, player ); + + if ( isdefined( self.pickuptrigger ) ) + self.pickuptrigger sethintlowpriority( 0 ); +} + +pickup_claymores() +{ + player = self.owner; + + if ( !player hasweapon( "claymore_zm" ) ) + { + player thread claymore_watch(); + player giveweapon( "claymore_zm" ); + player set_player_placeable_mine( "claymore_zm" ); + player setactionslot( 4, "weapon", "claymore_zm" ); + player setweaponammoclip( "claymore_zm", 0 ); + player notify( "zmb_enable_claymore_prompt" ); + } + else + { + clip_ammo = player getweaponammoclip( self.name ); + clip_max_ammo = weaponclipsize( self.name ); + + if ( clip_ammo >= clip_max_ammo ) + { + player notify( "zmb_disable_claymore_prompt" ); + return; + } + } + + self pick_up(); + clip_ammo = player getweaponammoclip( self.name ); + clip_max_ammo = weaponclipsize( self.name ); + + if ( clip_ammo >= clip_max_ammo ) + player notify( "zmb_disable_claymore_prompt" ); + + player maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_pickedup" ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_pickedup" ); +} + +pickup_claymores_trigger_listener( trigger, player ) +{ + self thread pickup_claymores_trigger_listener_enable( trigger, player ); + self thread pickup_claymores_trigger_listener_disable( trigger, player ); +} + +pickup_claymores_trigger_listener_enable( trigger, player ) +{ + self endon( "delete" ); + + while ( true ) + { + player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" ); + + if ( !isdefined( trigger ) ) + return; + + trigger trigger_on(); + trigger linkto( self ); + } +} + +pickup_claymores_trigger_listener_disable( trigger, player ) +{ + self endon( "delete" ); + + while ( true ) + { + player waittill( "zmb_disable_claymore_prompt" ); + + if ( !isdefined( trigger ) ) + return; + + trigger unlink(); + trigger trigger_off(); + } +} + +shouldaffectweaponobject( object ) +{ + pos = self.origin + vectorscale( ( 0, 0, 1 ), 32.0 ); + dirtopos = pos - object.origin; + objectforward = anglestoforward( object.angles ); + dist = vectordot( dirtopos, objectforward ); + + if ( dist < level.claymore_detectionmindist ) + return 0; + + dirtopos = vectornormalize( dirtopos ); + dot = vectordot( dirtopos, objectforward ); + return dot > level.claymore_detectiondot; +} + +claymore_detonation() +{ + self endon( "death" ); + self waittill_not_moving(); + detonateradius = 96; + damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 ); + damagearea setexcludeteamfortrigger( self.team ); + damagearea enablelinkto(); + damagearea linkto( self ); + + if ( is_true( self.isonbus ) ) + damagearea setmovingplatformenabled( 1 ); + + self.damagearea = damagearea; + self thread delete_claymores_on_death( self.owner, damagearea ); + self.owner.claymores[self.owner.claymores.size] = self; + + while ( true ) + { + damagearea waittill( "trigger", ent ); + + if ( isdefined( self.owner ) && ent == self.owner ) + continue; + + if ( isdefined( ent.pers ) && isdefined( ent.pers["team"] ) && ent.pers["team"] == self.team ) + continue; + + if ( !ent shouldaffectweaponobject( self ) ) + continue; + + if ( ent damageconetrace( self.origin, self ) > 0 ) + { + self playsound( "wpn_claymore_alert" ); + wait 0.4; + + if ( isdefined( self.owner ) ) + self detonate( self.owner ); + else + self detonate( undefined ); + + return; + } + } +} + +delete_claymores_on_death( player, ent ) +{ + self waittill( "death" ); + + if ( isdefined( player ) ) + arrayremovevalue( player.claymores, self ); + + wait 0.05; + + if ( isdefined( ent ) ) + ent delete(); +} + +satchel_damage() +{ + self setcandamage( 1 ); + self.health = 100000; + self.maxhealth = self.health; + attacker = undefined; + + while ( true ) + { + self waittill( "damage", amount, attacker ); + + if ( !isdefined( self ) ) + return; + + self.health = self.maxhealth; + + if ( !isplayer( attacker ) ) + continue; + + if ( isdefined( self.owner ) && attacker == self.owner ) + continue; + + if ( isdefined( attacker.pers ) && isdefined( attacker.pers["team"] ) && attacker.pers["team"] != level.zombie_team ) + continue; + + break; + } + + if ( level.satchelexplodethisframe ) + wait( 0.1 + randomfloat( 0.4 ) ); + else + wait 0.05; + + if ( !isdefined( self ) ) + return; + + level.satchelexplodethisframe = 1; + thread reset_satchel_explode_this_frame(); + self detonate( attacker ); +} + +reset_satchel_explode_this_frame() +{ + wait 0.05; + level.satchelexplodethisframe = 0; +} + +play_claymore_effects() +{ + self endon( "death" ); + self waittill_not_moving(); + playfxontag( level._effect["claymore_laser"], self, "tag_fx" ); +} + +give_claymores_after_rounds() +{ + while ( true ) + { + level waittill( "between_round_over" ); + + if ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] is_player_placeable_mine( "claymore_zm" ) ) + { + players[i] giveweapon( "claymore_zm" ); + players[i] set_player_placeable_mine( "claymore_zm" ); + players[i] setactionslot( 4, "weapon", "claymore_zm" ); + players[i] setweaponammoclip( "claymore_zm", 2 ); + } + } + } + } +} + +init_hint_hudelem( x, y, alignx, aligny, fontscale, alpha ) +{ + self.x = x; + self.y = y; + self.alignx = alignx; + self.aligny = aligny; + self.fontscale = fontscale; + self.alpha = alpha; + self.sort = 20; +} + +setup_client_hintelem() +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( !isdefined( self.hintelem ) ) + self.hintelem = newclienthudelem( self ); + + self.hintelem init_hint_hudelem( 320, 220, "center", "bottom", 1.6, 1.0 ); +} + +show_claymore_hint( string ) +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( string == "claymore_purchased" ) + text = &"ZOMBIE_CLAYMORE_HOWTO"; + else + text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED"; + + self setup_client_hintelem(); + self.hintelem settext( text ); + wait 3.5; + self.hintelem settext( "" ); +} diff --git a/ZM/Maps/Nuketown/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc b/ZM/Maps/Nuketown/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc new file mode 100644 index 0000000..19dec79 --- /dev/null +++ b/ZM/Maps/Nuketown/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc @@ -0,0 +1,135 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_melee_weapon; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_audio; + +init() +{ + registerclientfield( "toplayer", "tazer_flourish", 1, 1, "int" ); + register_melee_weapon_for_level( "tazer_knuckles_zm" ); + + if ( isdefined( level.tazer_cost ) ) + cost = level.tazer_cost; + else + cost = 6000; + + maps\mp\zombies\_zm_melee_weapon::init( "tazer_knuckles_zm", "zombie_tazer_flourish", "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", cost, "tazer_upgrade", &"ZOMBIE_WEAPON_TAZER_BUY", "tazerknuckles", ::has_tazer, ::give_tazer, ::take_tazer, ::tazer_flourish_fx ); + maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee" ); + maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee_upgraded" ); + maps\mp\zombies\_zm_spawner::add_cusom_zombie_spawn_logic( ::watch_bodily_functions ); + level._effect["fx_zmb_taser_vomit"] = loadfx( "maps/zombie/fx_zmb_taser_vomit" ); + level._effect["fx_zmb_taser_flourish"] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" ); + level.tazer_flourish_delay = 0.5; +} + +spectator_respawn() +{ + maps\mp\zombies\_zm_melee_weapon::spectator_respawn( "tazer_upgrade", ::take_tazer, ::has_tazer ); +} + +watch_bodily_functions() +{ + if ( isdefined( self.isscreecher ) && self.isscreecher || isdefined( self.is_avogadro ) && self.is_avogadro ) + return; + + while ( true ) + { + self waittill( "damage", amount, attacker, direction_vec, point, type ); + + if ( !isdefined( self ) ) + return; + + if ( !isdefined( attacker ) || !isplayer( attacker ) ) + continue; + + if ( type != "MOD_MELEE" ) + continue; + + if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isdefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped ) + continue; + + ch = randomint( 100 ); + + if ( ch < 4 ) + playfxontag( level._effect["fx_zmb_taser_vomit"], self, "j_neck" ); + } +} + +onplayerconnect() +{ + self thread onplayerspawned(); +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread watchtazerknucklemelee(); + } +} + +watchtazerknucklemelee() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "weapon_melee", weapon ); + + if ( weapon == "tazer_knuckles_zm" ) + self tazerknuckle_melee(); + } +} + +tazerknuckle_melee() +{ + +} + +has_tazer() +{ + if ( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) + return false; + + if ( isdefined( self._sickle_zm_equipped ) && self._sickle_zm_equipped || isdefined( self._bowie_zm_equipped ) && self._bowie_zm_equipped || isdefined( self._tazer_zm_equipped ) && self._tazer_zm_equipped ) + return true; + + return false; +} + +give_tazer() +{ + self._tazer_zm_equipped = 1; + self._bowie_zm_equipped = undefined; + self._sickle_zm_equipped = undefined; +} + +take_tazer() +{ + self._tazer_zm_equipped = undefined; +} + +tazer_flourish_fx() +{ + self waittill( "weapon_change", newweapon ); + + if ( newweapon == "zombie_tazer_flourish" ) + { + self endon( "weapon_change" ); + wait( level.tazer_flourish_delay ); + self thread maps\mp\zombies\_zm_audio::playerexert( "hitmed" ); + self setclientfieldtoplayer( "tazer_flourish", 1 ); + wait_network_frame(); + self setclientfieldtoplayer( "tazer_flourish", 0 ); + } +} diff --git a/ZM/Maps/Nuketown/xmodelalias/c_zom_dlc0_zom_head_als.gsc b/ZM/Maps/Nuketown/xmodelalias/c_zom_dlc0_zom_head_als.gsc new file mode 100644 index 0000000..9463a41 --- /dev/null +++ b/ZM/Maps/Nuketown/xmodelalias/c_zom_dlc0_zom_head_als.gsc @@ -0,0 +1,11 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + a[0] = "c_zom_dlc0_zom_head1"; + a[1] = "c_zom_dlc0_zom_head2"; + a[2] = "c_zom_dlc0_zom_head3"; + a[3] = "c_zom_dlc0_zom_head4"; + return a; +} diff --git a/ZM/Maps/Nuketown/xmodelalias/c_zom_dlc0_zom_head_blueeyes_als.gsc b/ZM/Maps/Nuketown/xmodelalias/c_zom_dlc0_zom_head_blueeyes_als.gsc new file mode 100644 index 0000000..5149ca1 --- /dev/null +++ b/ZM/Maps/Nuketown/xmodelalias/c_zom_dlc0_zom_head_blueeyes_als.gsc @@ -0,0 +1,11 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + a[0] = "c_zom_dlc0_zom_head1_blueeyes"; + a[1] = "c_zom_dlc0_zom_head2_blueeyes"; + a[2] = "c_zom_dlc0_zom_head3_blueeyes"; + a[3] = "c_zom_dlc0_zom_head4_blueeyes"; + return a; +} diff --git a/ZM/Maps/Origins/aitype/zm_tomb_basic_crusader.gsc b/ZM/Maps/Origins/aitype/zm_tomb_basic_crusader.gsc new file mode 100644 index 0000000..e741ed7 --- /dev/null +++ b/ZM/Maps/Origins/aitype/zm_tomb_basic_crusader.gsc @@ -0,0 +1,423 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_tomb_crusader_1a; +#include character\c_zom_tomb_crusader_1a_nohat; +#include character\c_zom_tomb_crusader_2b; +#include character\c_zom_tomb_crusader_2b_nohat; +#include character\c_zom_tomb_crusader_2c; +#include character\c_zom_tomb_crusader_1c; + +#using_animtree("zm_tomb_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_dugup; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_jump_down_markiv_front; + dummy_anim_ref = %ai_zombie_jump_down_markiv_leftfront; + dummy_anim_ref = %ai_zombie_jump_down_markiv_leftmid; + dummy_anim_ref = %ai_zombie_jump_down_markiv_leftrear; + dummy_anim_ref = %ai_zombie_jump_down_markiv_rear; + dummy_anim_ref = %ai_zombie_jump_down_markiv_rightfront; + dummy_anim_ref = %ai_zombie_jump_down_markiv_rightmid; + dummy_anim_ref = %ai_zombie_jump_down_markiv_rightrear; + dummy_anim_ref = %ai_zombie_jump_up_markiv_front; + dummy_anim_ref = %ai_zombie_jump_up_markiv_leftfront; + dummy_anim_ref = %ai_zombie_jump_up_markiv_leftmid; + dummy_anim_ref = %ai_zombie_jump_up_markiv_leftrear; + dummy_anim_ref = %ai_zombie_jump_up_markiv_rear; + dummy_anim_ref = %ai_zombie_jump_up_markiv_rightfront; + dummy_anim_ref = %ai_zombie_jump_up_markiv_rightmid; + dummy_anim_ref = %ai_zombie_jump_up_markiv_rightrear; + dummy_anim_ref = %ai_zombie_jump_up_onto_markiv_rear; + dummy_anim_ref = %ai_zombie_crawl_jump_up_onto_markiv_rear; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_front; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftfront; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftmid; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftrear; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rear; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightfront; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightmid; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightrear; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_front; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftfront; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftmid; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftrear; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rear; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightfront; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightmid; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightrear; + dummy_anim_ref = %ai_zombie_jump_across_120; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_72; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_up_48; + dummy_anim_ref = %ai_zombie_jump_up_96; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_across_120; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_72; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_96; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_traverse_alcove_40; + dummy_anim_ref = %ai_zombie_traverse_alcove_56; + dummy_anim_ref = %ai_zombie_traverse_alcove_96; + dummy_anim_ref = %ai_zombie_traverse_scaffold_72; + dummy_anim_ref = %ai_zombie_traverse_scaffold_84; + dummy_anim_ref = %ai_zombie_traverse_scaffold_100; + dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_72; + dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_84; + dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_100; + dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_96; + dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_112; + dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_120; + dummy_anim_ref = %ai_zombie_jump_up_dlc4_trench_wall_140; + dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_112; + dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_120; + dummy_anim_ref = %ai_zombie_crawl_jump_up_dlc4_trench_wall_140; + dummy_anim_ref = %ai_zombie_vaultover_barbedwire; + dummy_anim_ref = %ai_zombie_vaultover_barbedwire_24; + dummy_anim_ref = %ai_zombie_crawl_vaultover_barbedwire; + dummy_anim_ref = %ai_zombie_crawl_vaultover_barbedwire_24; + dummy_anim_ref = %ai_zombie_crawl_jump_down_church; + dummy_anim_ref = %ai_zombie_jump_down_church; + dummy_anim_ref = %ai_zombie_thundergun_hit; + dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; + dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; + dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; + dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; + dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; + dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; + dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; + dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; + dummy_anim_ref = %ai_zombie_thundergun_getup; + dummy_anim_ref = %ai_zombie_thundergun_getup_a; + dummy_anim_ref = %ai_zombie_thundergun_getup_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_c; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; + dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_a; + dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_b; + dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_c; + dummy_anim_ref = %ai_zombie_dlc4_tesla_death_a; + dummy_anim_ref = %ai_zombie_dlc4_tesla_death_b; + dummy_anim_ref = %ai_zombie_dlc4_tesla_death_c; + dummy_anim_ref = %ai_zombie_dlc4_tesla_death_d; + dummy_anim_ref = %ai_zombie_dlc4_tesla_death_e; + dummy_anim_ref = %ai_zombie_dlc4_tesla_crawl_death_a; + dummy_anim_ref = %ai_zombie_dlc4_tesla_crawl_death_b; + dummy_anim_ref = %ai_zombie_dlc4_freeze_death_a; + dummy_anim_ref = %ai_zombie_dlc4_freeze_death_b; + dummy_anim_ref = %ai_zombie_dlc4_freeze_death_c; + dummy_anim_ref = %ai_zombie_dlc4_freeze_death_d; + dummy_anim_ref = %ai_zombie_dlc4_freeze_death_e; + dummy_anim_ref = %ai_zombie_death_icestaff_a; + dummy_anim_ref = %ai_zombie_death_icestaff_b; + dummy_anim_ref = %ai_zombie_death_icestaff_c; + dummy_anim_ref = %ai_zombie_death_icestaff_d; + dummy_anim_ref = %ai_zombie_death_icestaff_e; + dummy_anim_ref = %ai_zombie_dlc4_crawl_freeze_death_01; + dummy_anim_ref = %ai_zombie_dlc4_crawl_freeze_death_02; + dummy_anim_ref = %ai_zombie_afterlife_stun_a; + dummy_anim_ref = %ai_zombie_afterlife_stun_b; + dummy_anim_ref = %ai_zombie_afterlife_stun_c; + dummy_anim_ref = %ai_zombie_afterlife_stun_d; + dummy_anim_ref = %ai_zombie_afterlife_stun_e; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_a; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_b; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_c; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_a; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_b; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_c; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_d; + dummy_anim_ref = %ai_zombie_firestaff_death_walking_a; + dummy_anim_ref = %ai_zombie_firestaff_death_walking_b; + dummy_anim_ref = %ai_zombie_firestaff_death_walking_c; + dummy_anim_ref = %ai_zombie_firestaff_death_collapse_a; + dummy_anim_ref = %ai_zombie_firestaff_death_collapse_b; + dummy_anim_ref = %ai_zombie_grabbed_by_mech; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_tomb_basic.asd"; + self.animtree = "zm_tomb_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = "fly_step_crusader"; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 6 ); + + switch ( randchar ) + { + case 0: + character\c_zom_tomb_crusader_1a::main(); + break; + case 1: + character\c_zom_tomb_crusader_1a_nohat::main(); + break; + case 2: + character\c_zom_tomb_crusader_2b::main(); + break; + case 3: + character\c_zom_tomb_crusader_2b_nohat::main(); + break; + case 4: + character\c_zom_tomb_crusader_2c::main(); + break; + case 5: + character\c_zom_tomb_crusader_1c::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_tomb_basic" ); + character\c_zom_tomb_crusader_1a::precache(); + character\c_zom_tomb_crusader_1a_nohat::precache(); + character\c_zom_tomb_crusader_2b::precache(); + character\c_zom_tomb_crusader_2b_nohat::precache(); + character\c_zom_tomb_crusader_2c::precache(); + character\c_zom_tomb_crusader_1c::precache(); +} diff --git a/ZM/Maps/Origins/aitype/zm_tomb_basic_german.gsc b/ZM/Maps/Origins/aitype/zm_tomb_basic_german.gsc new file mode 100644 index 0000000..505c4d1 --- /dev/null +++ b/ZM/Maps/Origins/aitype/zm_tomb_basic_german.gsc @@ -0,0 +1,422 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_tomb_german_1a; +#include character\c_zom_tomb_german_1a_nohat; +#include character\c_zom_tomb_german_2b; +#include character\c_zom_tomb_german_bare; +#include character\c_zom_tomb_german_bare_nohat; + +#using_animtree("zm_tomb_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_dugup; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_jump_down_markiv_front; + dummy_anim_ref = %ai_zombie_jump_down_markiv_leftfront; + dummy_anim_ref = %ai_zombie_jump_down_markiv_leftmid; + dummy_anim_ref = %ai_zombie_jump_down_markiv_leftrear; + dummy_anim_ref = %ai_zombie_jump_down_markiv_rear; + dummy_anim_ref = %ai_zombie_jump_down_markiv_rightfront; + dummy_anim_ref = %ai_zombie_jump_down_markiv_rightmid; + dummy_anim_ref = %ai_zombie_jump_down_markiv_rightrear; + dummy_anim_ref = %ai_zombie_jump_up_markiv_front; + dummy_anim_ref = %ai_zombie_jump_up_markiv_leftfront; + dummy_anim_ref = %ai_zombie_jump_up_markiv_leftmid; + dummy_anim_ref = %ai_zombie_jump_up_markiv_leftrear; + dummy_anim_ref = %ai_zombie_jump_up_markiv_rear; + dummy_anim_ref = %ai_zombie_jump_up_markiv_rightfront; + dummy_anim_ref = %ai_zombie_jump_up_markiv_rightmid; + dummy_anim_ref = %ai_zombie_jump_up_markiv_rightrear; + dummy_anim_ref = %ai_zombie_jump_up_onto_markiv_rear; + dummy_anim_ref = %ai_zombie_crawl_jump_up_onto_markiv_rear; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_front; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftfront; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftmid; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftrear; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rear; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightfront; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightmid; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightrear; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_front; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftfront; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftmid; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftrear; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rear; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightfront; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightmid; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightrear; + dummy_anim_ref = %ai_zombie_jump_across_120; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_72; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_up_48; + dummy_anim_ref = %ai_zombie_jump_up_96; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_across_120; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_72; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_96; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_traverse_alcove_40; + dummy_anim_ref = %ai_zombie_traverse_alcove_56; + dummy_anim_ref = %ai_zombie_traverse_alcove_96; + dummy_anim_ref = %ai_zombie_traverse_scaffold_72; + dummy_anim_ref = %ai_zombie_traverse_scaffold_84; + dummy_anim_ref = %ai_zombie_traverse_scaffold_100; + dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_72; + dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_84; + dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_100; + dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_96; + dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_112; + dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_120; + dummy_anim_ref = %ai_zombie_jump_up_dlc4_trench_wall_140; + dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_112; + dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_120; + dummy_anim_ref = %ai_zombie_crawl_jump_up_dlc4_trench_wall_140; + dummy_anim_ref = %ai_zombie_vaultover_barbedwire; + dummy_anim_ref = %ai_zombie_vaultover_barbedwire_24; + dummy_anim_ref = %ai_zombie_crawl_vaultover_barbedwire; + dummy_anim_ref = %ai_zombie_crawl_vaultover_barbedwire_24; + dummy_anim_ref = %ai_zombie_crawl_jump_down_church; + dummy_anim_ref = %ai_zombie_jump_down_church; + dummy_anim_ref = %ai_zombie_thundergun_hit; + dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; + dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; + dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; + dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; + dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; + dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; + dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; + dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; + dummy_anim_ref = %ai_zombie_thundergun_getup; + dummy_anim_ref = %ai_zombie_thundergun_getup_a; + dummy_anim_ref = %ai_zombie_thundergun_getup_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_c; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; + dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_a; + dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_b; + dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_c; + dummy_anim_ref = %ai_zombie_dlc4_tesla_death_a; + dummy_anim_ref = %ai_zombie_dlc4_tesla_death_b; + dummy_anim_ref = %ai_zombie_dlc4_tesla_death_c; + dummy_anim_ref = %ai_zombie_dlc4_tesla_death_d; + dummy_anim_ref = %ai_zombie_dlc4_tesla_death_e; + dummy_anim_ref = %ai_zombie_dlc4_tesla_crawl_death_a; + dummy_anim_ref = %ai_zombie_dlc4_tesla_crawl_death_b; + dummy_anim_ref = %ai_zombie_dlc4_freeze_death_a; + dummy_anim_ref = %ai_zombie_dlc4_freeze_death_b; + dummy_anim_ref = %ai_zombie_dlc4_freeze_death_c; + dummy_anim_ref = %ai_zombie_dlc4_freeze_death_d; + dummy_anim_ref = %ai_zombie_dlc4_freeze_death_e; + dummy_anim_ref = %ai_zombie_death_icestaff_a; + dummy_anim_ref = %ai_zombie_death_icestaff_b; + dummy_anim_ref = %ai_zombie_death_icestaff_c; + dummy_anim_ref = %ai_zombie_death_icestaff_d; + dummy_anim_ref = %ai_zombie_death_icestaff_e; + dummy_anim_ref = %ai_zombie_dlc4_crawl_freeze_death_01; + dummy_anim_ref = %ai_zombie_dlc4_crawl_freeze_death_02; + dummy_anim_ref = %ai_zombie_afterlife_stun_a; + dummy_anim_ref = %ai_zombie_afterlife_stun_b; + dummy_anim_ref = %ai_zombie_afterlife_stun_c; + dummy_anim_ref = %ai_zombie_afterlife_stun_d; + dummy_anim_ref = %ai_zombie_afterlife_stun_e; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_a; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_b; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_c; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_a; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_b; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_c; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_d; + dummy_anim_ref = %ai_zombie_firestaff_death_walking_a; + dummy_anim_ref = %ai_zombie_firestaff_death_walking_b; + dummy_anim_ref = %ai_zombie_firestaff_death_walking_c; + dummy_anim_ref = %ai_zombie_firestaff_death_collapse_a; + dummy_anim_ref = %ai_zombie_firestaff_death_collapse_b; + dummy_anim_ref = %ai_zombie_grabbed_by_mech; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_tomb_basic.asd"; + self.animtree = "zm_tomb_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 6 ); + + switch ( randchar ) + { + case 0: + character\c_zom_tomb_german_1a::main(); + break; + case 1: + character\c_zom_tomb_german_1a_nohat::main(); + break; + case 2: + character\c_zom_tomb_german_2b::main(); + break; + case 3: + character\c_zom_tomb_german_bare::main(); + break; + case 4: + character\c_zom_tomb_german_bare_nohat::main(); + break; + case 5: + character\c_zom_tomb_german_bare_nohat::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_tomb_basic" ); + character\c_zom_tomb_german_1a::precache(); + character\c_zom_tomb_german_1a_nohat::precache(); + character\c_zom_tomb_german_2b::precache(); + character\c_zom_tomb_german_bare::precache(); + character\c_zom_tomb_german_bare_nohat::precache(); + character\c_zom_tomb_german_bare_nohat::precache(); +} diff --git a/ZM/Maps/Origins/aitype/zm_tomb_basic_german2.gsc b/ZM/Maps/Origins/aitype/zm_tomb_basic_german2.gsc new file mode 100644 index 0000000..e8e446d --- /dev/null +++ b/ZM/Maps/Origins/aitype/zm_tomb_basic_german2.gsc @@ -0,0 +1,422 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_tomb_german_2b_nohat; +#include character\c_zom_tomb_german_3c; +#include character\c_zom_tomb_german_3c_nohat; +#include character\c_zom_tomb_german_bare; +#include character\c_zom_tomb_german_bare_nohat; + +#using_animtree("zm_tomb_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_dugup; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_jump_down_markiv_front; + dummy_anim_ref = %ai_zombie_jump_down_markiv_leftfront; + dummy_anim_ref = %ai_zombie_jump_down_markiv_leftmid; + dummy_anim_ref = %ai_zombie_jump_down_markiv_leftrear; + dummy_anim_ref = %ai_zombie_jump_down_markiv_rear; + dummy_anim_ref = %ai_zombie_jump_down_markiv_rightfront; + dummy_anim_ref = %ai_zombie_jump_down_markiv_rightmid; + dummy_anim_ref = %ai_zombie_jump_down_markiv_rightrear; + dummy_anim_ref = %ai_zombie_jump_up_markiv_front; + dummy_anim_ref = %ai_zombie_jump_up_markiv_leftfront; + dummy_anim_ref = %ai_zombie_jump_up_markiv_leftmid; + dummy_anim_ref = %ai_zombie_jump_up_markiv_leftrear; + dummy_anim_ref = %ai_zombie_jump_up_markiv_rear; + dummy_anim_ref = %ai_zombie_jump_up_markiv_rightfront; + dummy_anim_ref = %ai_zombie_jump_up_markiv_rightmid; + dummy_anim_ref = %ai_zombie_jump_up_markiv_rightrear; + dummy_anim_ref = %ai_zombie_jump_up_onto_markiv_rear; + dummy_anim_ref = %ai_zombie_crawl_jump_up_onto_markiv_rear; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_front; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftfront; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftmid; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftrear; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rear; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightfront; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightmid; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightrear; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_front; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftfront; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftmid; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftrear; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rear; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightfront; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightmid; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightrear; + dummy_anim_ref = %ai_zombie_jump_across_120; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_72; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_up_48; + dummy_anim_ref = %ai_zombie_jump_up_96; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_across_120; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_72; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_96; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_traverse_alcove_40; + dummy_anim_ref = %ai_zombie_traverse_alcove_56; + dummy_anim_ref = %ai_zombie_traverse_alcove_96; + dummy_anim_ref = %ai_zombie_traverse_scaffold_72; + dummy_anim_ref = %ai_zombie_traverse_scaffold_84; + dummy_anim_ref = %ai_zombie_traverse_scaffold_100; + dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_72; + dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_84; + dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_100; + dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_96; + dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_112; + dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_120; + dummy_anim_ref = %ai_zombie_jump_up_dlc4_trench_wall_140; + dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_112; + dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_120; + dummy_anim_ref = %ai_zombie_crawl_jump_up_dlc4_trench_wall_140; + dummy_anim_ref = %ai_zombie_vaultover_barbedwire; + dummy_anim_ref = %ai_zombie_vaultover_barbedwire_24; + dummy_anim_ref = %ai_zombie_crawl_vaultover_barbedwire; + dummy_anim_ref = %ai_zombie_crawl_vaultover_barbedwire_24; + dummy_anim_ref = %ai_zombie_crawl_jump_down_church; + dummy_anim_ref = %ai_zombie_jump_down_church; + dummy_anim_ref = %ai_zombie_thundergun_hit; + dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; + dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; + dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; + dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; + dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; + dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; + dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; + dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; + dummy_anim_ref = %ai_zombie_thundergun_getup; + dummy_anim_ref = %ai_zombie_thundergun_getup_a; + dummy_anim_ref = %ai_zombie_thundergun_getup_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_c; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; + dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_a; + dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_b; + dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_c; + dummy_anim_ref = %ai_zombie_dlc4_tesla_death_a; + dummy_anim_ref = %ai_zombie_dlc4_tesla_death_b; + dummy_anim_ref = %ai_zombie_dlc4_tesla_death_c; + dummy_anim_ref = %ai_zombie_dlc4_tesla_death_d; + dummy_anim_ref = %ai_zombie_dlc4_tesla_death_e; + dummy_anim_ref = %ai_zombie_dlc4_tesla_crawl_death_a; + dummy_anim_ref = %ai_zombie_dlc4_tesla_crawl_death_b; + dummy_anim_ref = %ai_zombie_dlc4_freeze_death_a; + dummy_anim_ref = %ai_zombie_dlc4_freeze_death_b; + dummy_anim_ref = %ai_zombie_dlc4_freeze_death_c; + dummy_anim_ref = %ai_zombie_dlc4_freeze_death_d; + dummy_anim_ref = %ai_zombie_dlc4_freeze_death_e; + dummy_anim_ref = %ai_zombie_death_icestaff_a; + dummy_anim_ref = %ai_zombie_death_icestaff_b; + dummy_anim_ref = %ai_zombie_death_icestaff_c; + dummy_anim_ref = %ai_zombie_death_icestaff_d; + dummy_anim_ref = %ai_zombie_death_icestaff_e; + dummy_anim_ref = %ai_zombie_dlc4_crawl_freeze_death_01; + dummy_anim_ref = %ai_zombie_dlc4_crawl_freeze_death_02; + dummy_anim_ref = %ai_zombie_afterlife_stun_a; + dummy_anim_ref = %ai_zombie_afterlife_stun_b; + dummy_anim_ref = %ai_zombie_afterlife_stun_c; + dummy_anim_ref = %ai_zombie_afterlife_stun_d; + dummy_anim_ref = %ai_zombie_afterlife_stun_e; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_a; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_b; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_c; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_a; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_b; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_c; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_d; + dummy_anim_ref = %ai_zombie_firestaff_death_walking_a; + dummy_anim_ref = %ai_zombie_firestaff_death_walking_b; + dummy_anim_ref = %ai_zombie_firestaff_death_walking_c; + dummy_anim_ref = %ai_zombie_firestaff_death_collapse_a; + dummy_anim_ref = %ai_zombie_firestaff_death_collapse_b; + dummy_anim_ref = %ai_zombie_grabbed_by_mech; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_tomb_basic.asd"; + self.animtree = "zm_tomb_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 6 ); + + switch ( randchar ) + { + case 0: + character\c_zom_tomb_german_2b_nohat::main(); + break; + case 1: + character\c_zom_tomb_german_3c::main(); + break; + case 2: + character\c_zom_tomb_german_3c_nohat::main(); + break; + case 3: + character\c_zom_tomb_german_bare::main(); + break; + case 4: + character\c_zom_tomb_german_bare_nohat::main(); + break; + case 5: + character\c_zom_tomb_german_bare_nohat::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_tomb_basic" ); + character\c_zom_tomb_german_2b_nohat::precache(); + character\c_zom_tomb_german_3c::precache(); + character\c_zom_tomb_german_3c_nohat::precache(); + character\c_zom_tomb_german_bare::precache(); + character\c_zom_tomb_german_bare_nohat::precache(); + character\c_zom_tomb_german_bare_nohat::precache(); +} diff --git a/ZM/Maps/Origins/aitype/zm_tomb_basic_zone_capture.gsc b/ZM/Maps/Origins/aitype/zm_tomb_basic_zone_capture.gsc new file mode 100644 index 0000000..cf822c5 --- /dev/null +++ b/ZM/Maps/Origins/aitype/zm_tomb_basic_zone_capture.gsc @@ -0,0 +1,389 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\c_zom_tomb_crusader_zc; + +#using_animtree("zm_tomb_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_dugup; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_jump_down_markiv_front; + dummy_anim_ref = %ai_zombie_jump_down_markiv_leftfront; + dummy_anim_ref = %ai_zombie_jump_down_markiv_leftmid; + dummy_anim_ref = %ai_zombie_jump_down_markiv_leftrear; + dummy_anim_ref = %ai_zombie_jump_down_markiv_rear; + dummy_anim_ref = %ai_zombie_jump_down_markiv_rightfront; + dummy_anim_ref = %ai_zombie_jump_down_markiv_rightmid; + dummy_anim_ref = %ai_zombie_jump_down_markiv_rightrear; + dummy_anim_ref = %ai_zombie_jump_up_markiv_front; + dummy_anim_ref = %ai_zombie_jump_up_markiv_leftfront; + dummy_anim_ref = %ai_zombie_jump_up_markiv_leftmid; + dummy_anim_ref = %ai_zombie_jump_up_markiv_leftrear; + dummy_anim_ref = %ai_zombie_jump_up_markiv_rear; + dummy_anim_ref = %ai_zombie_jump_up_markiv_rightfront; + dummy_anim_ref = %ai_zombie_jump_up_markiv_rightmid; + dummy_anim_ref = %ai_zombie_jump_up_markiv_rightrear; + dummy_anim_ref = %ai_zombie_jump_up_onto_markiv_rear; + dummy_anim_ref = %ai_zombie_crawl_jump_up_onto_markiv_rear; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_front; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftfront; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftmid; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftrear; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rear; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightfront; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightmid; + dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightrear; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_front; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftfront; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftmid; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftrear; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rear; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightfront; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightmid; + dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightrear; + dummy_anim_ref = %ai_zombie_jump_across_120; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_72; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_up_48; + dummy_anim_ref = %ai_zombie_jump_up_96; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_across_120; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_72; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_96; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_traverse_alcove_40; + dummy_anim_ref = %ai_zombie_traverse_alcove_56; + dummy_anim_ref = %ai_zombie_traverse_alcove_96; + dummy_anim_ref = %ai_zombie_traverse_scaffold_72; + dummy_anim_ref = %ai_zombie_traverse_scaffold_84; + dummy_anim_ref = %ai_zombie_traverse_scaffold_100; + dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_72; + dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_84; + dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_100; + dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_96; + dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_112; + dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_120; + dummy_anim_ref = %ai_zombie_jump_up_dlc4_trench_wall_140; + dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_96; + dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_112; + dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_120; + dummy_anim_ref = %ai_zombie_crawl_jump_up_dlc4_trench_wall_140; + dummy_anim_ref = %ai_zombie_vaultover_barbedwire; + dummy_anim_ref = %ai_zombie_vaultover_barbedwire_24; + dummy_anim_ref = %ai_zombie_crawl_vaultover_barbedwire; + dummy_anim_ref = %ai_zombie_crawl_vaultover_barbedwire_24; + dummy_anim_ref = %ai_zombie_crawl_jump_down_church; + dummy_anim_ref = %ai_zombie_jump_down_church; + dummy_anim_ref = %ai_zombie_thundergun_hit; + dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; + dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; + dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; + dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; + dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; + dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; + dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; + dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; + dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; + dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; + dummy_anim_ref = %ai_zombie_thundergun_getup; + dummy_anim_ref = %ai_zombie_thundergun_getup_a; + dummy_anim_ref = %ai_zombie_thundergun_getup_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_c; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; + dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; + dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_a; + dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_b; + dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_c; + dummy_anim_ref = %ai_zombie_dlc4_tesla_death_a; + dummy_anim_ref = %ai_zombie_dlc4_tesla_death_b; + dummy_anim_ref = %ai_zombie_dlc4_tesla_death_c; + dummy_anim_ref = %ai_zombie_dlc4_tesla_death_d; + dummy_anim_ref = %ai_zombie_dlc4_tesla_death_e; + dummy_anim_ref = %ai_zombie_dlc4_tesla_crawl_death_a; + dummy_anim_ref = %ai_zombie_dlc4_tesla_crawl_death_b; + dummy_anim_ref = %ai_zombie_dlc4_freeze_death_a; + dummy_anim_ref = %ai_zombie_dlc4_freeze_death_b; + dummy_anim_ref = %ai_zombie_dlc4_freeze_death_c; + dummy_anim_ref = %ai_zombie_dlc4_freeze_death_d; + dummy_anim_ref = %ai_zombie_dlc4_freeze_death_e; + dummy_anim_ref = %ai_zombie_death_icestaff_a; + dummy_anim_ref = %ai_zombie_death_icestaff_b; + dummy_anim_ref = %ai_zombie_death_icestaff_c; + dummy_anim_ref = %ai_zombie_death_icestaff_d; + dummy_anim_ref = %ai_zombie_death_icestaff_e; + dummy_anim_ref = %ai_zombie_dlc4_crawl_freeze_death_01; + dummy_anim_ref = %ai_zombie_dlc4_crawl_freeze_death_02; + dummy_anim_ref = %ai_zombie_afterlife_stun_a; + dummy_anim_ref = %ai_zombie_afterlife_stun_b; + dummy_anim_ref = %ai_zombie_afterlife_stun_c; + dummy_anim_ref = %ai_zombie_afterlife_stun_d; + dummy_anim_ref = %ai_zombie_afterlife_stun_e; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_a; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_b; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_c; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_a; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_b; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_c; + dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_d; + dummy_anim_ref = %ai_zombie_firestaff_death_walking_a; + dummy_anim_ref = %ai_zombie_firestaff_death_walking_b; + dummy_anim_ref = %ai_zombie_firestaff_death_walking_c; + dummy_anim_ref = %ai_zombie_firestaff_death_collapse_a; + dummy_anim_ref = %ai_zombie_firestaff_death_collapse_b; + dummy_anim_ref = %ai_zombie_grabbed_by_mech; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_tomb_basic.asd"; + self.animtree = "zm_tomb_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = "fly_step_crusader"; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\c_zom_tomb_crusader_zc::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_tomb_basic" ); + character\c_zom_tomb_crusader_zc::precache(); +} diff --git a/ZM/Maps/Origins/aitype/zm_tomb_giant_robot.gsc b/ZM/Maps/Origins/aitype/zm_tomb_giant_robot.gsc new file mode 100644 index 0000000..515725f --- /dev/null +++ b/ZM/Maps/Origins/aitype/zm_tomb_giant_robot.gsc @@ -0,0 +1,65 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\c_zom_giant_robot; + +#using_animtree("zm_tomb_giant_robot"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_giant_robot_walk_a; + dummy_anim_ref = %ai_zombie_giant_robot_walk_b; + dummy_anim_ref = %ai_zombie_giant_robot_walk_nml_intro; + dummy_anim_ref = %ai_zombie_giant_robot_walk_nml; + dummy_anim_ref = %ai_zombie_giant_robot_walk_nml_outtro; + dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches_intro; + dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches; + dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches_outtro; + dummy_anim_ref = %ai_zombie_giant_robot_walk_village_intro; + dummy_anim_ref = %ai_zombie_giant_robot_walk_village; + dummy_anim_ref = %ai_zombie_giant_robot_walk_village_outtro; + dummy_anim_ref = %ai_zombie_giant_robot_bunker_intro; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_tomb_giant_robot.asd"; + self.animtree = "zm_tomb_giant_robot.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "neutral"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\c_zom_giant_robot::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "neutral" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_tomb_giant_robot" ); + character\c_zom_giant_robot::precache(); +} diff --git a/ZM/Maps/Origins/aitype/zm_tomb_giant_robot_0.gsc b/ZM/Maps/Origins/aitype/zm_tomb_giant_robot_0.gsc new file mode 100644 index 0000000..a6f869e --- /dev/null +++ b/ZM/Maps/Origins/aitype/zm_tomb_giant_robot_0.gsc @@ -0,0 +1,65 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\c_zom_giant_robot_0; + +#using_animtree("zm_tomb_giant_robot"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_giant_robot_walk_a; + dummy_anim_ref = %ai_zombie_giant_robot_walk_b; + dummy_anim_ref = %ai_zombie_giant_robot_walk_nml_intro; + dummy_anim_ref = %ai_zombie_giant_robot_walk_nml; + dummy_anim_ref = %ai_zombie_giant_robot_walk_nml_outtro; + dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches_intro; + dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches; + dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches_outtro; + dummy_anim_ref = %ai_zombie_giant_robot_walk_village_intro; + dummy_anim_ref = %ai_zombie_giant_robot_walk_village; + dummy_anim_ref = %ai_zombie_giant_robot_walk_village_outtro; + dummy_anim_ref = %ai_zombie_giant_robot_bunker_intro; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_tomb_giant_robot.asd"; + self.animtree = "zm_tomb_giant_robot.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "neutral"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\c_zom_giant_robot_0::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "neutral" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_tomb_giant_robot" ); + character\c_zom_giant_robot_0::precache(); +} diff --git a/ZM/Maps/Origins/aitype/zm_tomb_giant_robot_1.gsc b/ZM/Maps/Origins/aitype/zm_tomb_giant_robot_1.gsc new file mode 100644 index 0000000..0ba2834 --- /dev/null +++ b/ZM/Maps/Origins/aitype/zm_tomb_giant_robot_1.gsc @@ -0,0 +1,65 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\c_zom_giant_robot_1; + +#using_animtree("zm_tomb_giant_robot"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_giant_robot_walk_a; + dummy_anim_ref = %ai_zombie_giant_robot_walk_b; + dummy_anim_ref = %ai_zombie_giant_robot_walk_nml_intro; + dummy_anim_ref = %ai_zombie_giant_robot_walk_nml; + dummy_anim_ref = %ai_zombie_giant_robot_walk_nml_outtro; + dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches_intro; + dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches; + dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches_outtro; + dummy_anim_ref = %ai_zombie_giant_robot_walk_village_intro; + dummy_anim_ref = %ai_zombie_giant_robot_walk_village; + dummy_anim_ref = %ai_zombie_giant_robot_walk_village_outtro; + dummy_anim_ref = %ai_zombie_giant_robot_bunker_intro; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_tomb_giant_robot.asd"; + self.animtree = "zm_tomb_giant_robot.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "neutral"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\c_zom_giant_robot_1::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "neutral" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_tomb_giant_robot" ); + character\c_zom_giant_robot_1::precache(); +} diff --git a/ZM/Maps/Origins/aitype/zm_tomb_giant_robot_2.gsc b/ZM/Maps/Origins/aitype/zm_tomb_giant_robot_2.gsc new file mode 100644 index 0000000..22d71af --- /dev/null +++ b/ZM/Maps/Origins/aitype/zm_tomb_giant_robot_2.gsc @@ -0,0 +1,65 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\c_zom_giant_robot_2; + +#using_animtree("zm_tomb_giant_robot"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_giant_robot_walk_a; + dummy_anim_ref = %ai_zombie_giant_robot_walk_b; + dummy_anim_ref = %ai_zombie_giant_robot_walk_nml_intro; + dummy_anim_ref = %ai_zombie_giant_robot_walk_nml; + dummy_anim_ref = %ai_zombie_giant_robot_walk_nml_outtro; + dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches_intro; + dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches; + dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches_outtro; + dummy_anim_ref = %ai_zombie_giant_robot_walk_village_intro; + dummy_anim_ref = %ai_zombie_giant_robot_walk_village; + dummy_anim_ref = %ai_zombie_giant_robot_walk_village_outtro; + dummy_anim_ref = %ai_zombie_giant_robot_bunker_intro; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_tomb_giant_robot.asd"; + self.animtree = "zm_tomb_giant_robot.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "neutral"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\c_zom_giant_robot_2::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "neutral" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_tomb_giant_robot" ); + character\c_zom_giant_robot_2::precache(); +} diff --git a/ZM/Maps/Origins/aitype/zm_tomb_mech_zombie.gsc b/ZM/Maps/Origins/aitype/zm_tomb_mech_zombie.gsc new file mode 100644 index 0000000..160063f --- /dev/null +++ b/ZM/Maps/Origins/aitype/zm_tomb_mech_zombie.gsc @@ -0,0 +1,125 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\c_zom_dlc_mech; + +#using_animtree("zm_tomb_mechz"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_mech_death; + dummy_anim_ref = %ai_zombie_mech_death_explode; + dummy_anim_ref = %ai_zombie_mech_ft_aim_1; + dummy_anim_ref = %ai_zombie_mech_ft_aim_2; + dummy_anim_ref = %ai_zombie_mech_ft_aim_3; + dummy_anim_ref = %ai_zombie_mech_ft_aim_4; + dummy_anim_ref = %ai_zombie_mech_ft_aim_5; + dummy_anim_ref = %ai_zombie_mech_ft_aim_6; + dummy_anim_ref = %ai_zombie_mech_ft_aim_7; + dummy_anim_ref = %ai_zombie_mech_ft_aim_8; + dummy_anim_ref = %ai_zombie_mech_ft_aim_9; + dummy_anim_ref = %ai_zombie_mech_ft_intro_sprint_to_aim_5; + dummy_anim_ref = %ai_zombie_mech_ft_aim_idle; + dummy_anim_ref = %ai_zombie_mech_ft_fire_end; + dummy_anim_ref = %ai_zombie_mech_ft_fire_loop; + dummy_anim_ref = %ai_zombie_mech_ft_fire_start; + dummy_anim_ref = %ai_zombie_mech_ft_sweep; + dummy_anim_ref = %ai_zombie_mech_ft_sweep_up; + dummy_anim_ref = %ai_zombie_mech_ft_burn_player; + dummy_anim_ref = %ai_zombie_mech_grapple_aim_1; + dummy_anim_ref = %ai_zombie_mech_grapple_aim_2; + dummy_anim_ref = %ai_zombie_mech_grapple_aim_3; + dummy_anim_ref = %ai_zombie_mech_grapple_aim_4; + dummy_anim_ref = %ai_zombie_mech_grapple_aim_5; + dummy_anim_ref = %ai_zombie_mech_grapple_aim_6; + dummy_anim_ref = %ai_zombie_mech_grapple_aim_7; + dummy_anim_ref = %ai_zombie_mech_grapple_aim_8; + dummy_anim_ref = %ai_zombie_mech_grapple_aim_9; + dummy_anim_ref = %ai_zombie_mech_grapple_intro_sprint_to_aim_5; + dummy_anim_ref = %ai_zombie_mech_grapple_arm_closed_idle; + dummy_anim_ref = %ai_zombie_mech_grapple_arm_open_idle; + dummy_anim_ref = %ai_zombie_mech_idle; + dummy_anim_ref = %ai_zombie_mech_melee_a; + dummy_anim_ref = %ai_zombie_mech_melee_b; + dummy_anim_ref = %ai_zombie_mech_run_melee; + dummy_anim_ref = %ai_zombie_mech_sprint_melee; + dummy_anim_ref = %ai_zombie_mech_pain; + dummy_anim_ref = %ai_zombie_mech_injury_hit_by_tank; + dummy_anim_ref = %ai_zombie_mech_injury_down_by_tank_loop; + dummy_anim_ref = %ai_zombie_mech_injury_recover_from_tank; + dummy_anim_ref = %ai_zombie_mech_injury_hit_by_footstep; + dummy_anim_ref = %ai_zombie_mech_injury_down_by_footstep_loop; + dummy_anim_ref = %ai_zombie_mech_injury_recover_from_footstep; + dummy_anim_ref = %ai_zombie_mech_stunned; + dummy_anim_ref = %ai_zombie_mech_powercore_pain; + dummy_anim_ref = %ai_zombie_mech_faceplate_pain; + dummy_anim_ref = %ai_zombie_mech_head_pain; + dummy_anim_ref = %ai_zombie_mech_run; + dummy_anim_ref = %ai_zombie_mech_walk_basic; + dummy_anim_ref = %ai_zombie_mech_walk_patrol; + dummy_anim_ref = %ai_zombie_mech_sprint; + dummy_anim_ref = %ai_zombie_mech_sprint_booster_liftoff; + dummy_anim_ref = %ai_zombie_mech_sprint_booster_loop; + dummy_anim_ref = %ai_zombie_mech_sprint_booster_touchdown; + dummy_anim_ref = %ai_zombie_mech_intro_jump_in; + dummy_anim_ref = %ai_zombie_mech_exit; + dummy_anim_ref = %ai_zombie_mech_exit_hover; + dummy_anim_ref = %ai_zombie_mech_arrive; + dummy_anim_ref = %ai_zombie_mech_jump_down_48; + dummy_anim_ref = %ai_zombie_mech_jump_down_72; + dummy_anim_ref = %ai_zombie_mech_jump_down_96; + dummy_anim_ref = %ai_zombie_mech_jump_down_127; + dummy_anim_ref = %ai_zombie_mech_jump_up_48; + dummy_anim_ref = %ai_zombie_mech_jump_up_96; + dummy_anim_ref = %ai_zombie_mech_jump_up_127; + dummy_anim_ref = %ai_zombie_mech_traverse_hurdle_40; + dummy_anim_ref = %ai_zombie_mech_jump_across_120; + dummy_anim_ref = %ai_zombie_mech_jump_down_church; + dummy_anim_ref = %ai_zombie_mech_jump_down_dlc4_trench_wall_96; + dummy_anim_ref = %ai_zombie_mech_jump_down_dlc4_trench_wall_112; + dummy_anim_ref = %ai_zombie_mech_jump_down_dlc4_trench_wall_120; + dummy_anim_ref = %ai_zombie_mech_jump_up_dlc4_trench_wall_140; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_tomb_mechz.asd"; + self.animtree = "zm_tomb_mechz.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = "zm_mechz_footstepfxtable"; + self.footstepprepend = "fly_step_mechz"; + self.footstepscriptcallback = 1; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\c_zom_dlc_mech::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_tomb_mechz" ); + character\c_zom_dlc_mech::precache(); +} diff --git a/ZM/Maps/Origins/character/c_ger_richtofen_dlc4.gsc b/ZM/Maps/Origins/character/c_ger_richtofen_dlc4.gsc new file mode 100644 index 0000000..5d07259 --- /dev/null +++ b/ZM/Maps/Origins/character/c_ger_richtofen_dlc4.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_tomb_richtofen_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_tomb_richtofen_fb" ); +} diff --git a/ZM/Maps/Origins/character/c_jap_takeo_dlc4.gsc b/ZM/Maps/Origins/character/c_jap_takeo_dlc4.gsc new file mode 100644 index 0000000..ab6cc3e --- /dev/null +++ b/ZM/Maps/Origins/character/c_jap_takeo_dlc4.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_tomb_takeo_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_tomb_takeo_fb" ); +} diff --git a/ZM/Maps/Origins/character/c_rus_nikolai_dlc4.gsc b/ZM/Maps/Origins/character/c_rus_nikolai_dlc4.gsc new file mode 100644 index 0000000..b0615f3 --- /dev/null +++ b/ZM/Maps/Origins/character/c_rus_nikolai_dlc4.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_tomb_nikolai_fb" ); + self.voice = "russian"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_tomb_nikolai_fb" ); +} diff --git a/ZM/Maps/Origins/character/c_usa_dempsey_dlc4.gsc b/ZM/Maps/Origins/character/c_usa_dempsey_dlc4.gsc new file mode 100644 index 0000000..fbbece5 --- /dev/null +++ b/ZM/Maps/Origins/character/c_usa_dempsey_dlc4.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_tomb_dempsey_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_tomb_dempsey_fb" ); +} diff --git a/ZM/Maps/Origins/character/c_zom_dlc_mech.gsc b/ZM/Maps/Origins/character/c_zom_dlc_mech.gsc new file mode 100644 index 0000000..4b3f835 --- /dev/null +++ b/ZM/Maps/Origins/character/c_zom_dlc_mech.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_mech_body" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_mech_body" ); +} diff --git a/ZM/Maps/Origins/character/c_zom_giant_robot.gsc b/ZM/Maps/Origins/character/c_zom_giant_robot.gsc new file mode 100644 index 0000000..f704352 --- /dev/null +++ b/ZM/Maps/Origins/character/c_zom_giant_robot.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "veh_t6_dlc_zm_robot" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "veh_t6_dlc_zm_robot" ); +} diff --git a/ZM/Maps/Origins/character/c_zom_giant_robot_0.gsc b/ZM/Maps/Origins/character/c_zom_giant_robot_0.gsc new file mode 100644 index 0000000..2b510a6 --- /dev/null +++ b/ZM/Maps/Origins/character/c_zom_giant_robot_0.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "veh_t6_dlc_zm_robot_0" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "veh_t6_dlc_zm_robot_0" ); +} diff --git a/ZM/Maps/Origins/character/c_zom_giant_robot_1.gsc b/ZM/Maps/Origins/character/c_zom_giant_robot_1.gsc new file mode 100644 index 0000000..c3e183a --- /dev/null +++ b/ZM/Maps/Origins/character/c_zom_giant_robot_1.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "veh_t6_dlc_zm_robot_1" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "veh_t6_dlc_zm_robot_1" ); +} diff --git a/ZM/Maps/Origins/character/c_zom_giant_robot_2.gsc b/ZM/Maps/Origins/character/c_zom_giant_robot_2.gsc new file mode 100644 index 0000000..2a45785 --- /dev/null +++ b/ZM/Maps/Origins/character/c_zom_giant_robot_2.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "veh_t6_dlc_zm_robot_2" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "veh_t6_dlc_zm_robot_2" ); +} diff --git a/ZM/Maps/Origins/character/c_zom_tomb_crusader_1a.gsc b/ZM/Maps/Origins/character/c_zom_tomb_crusader_1a.gsc new file mode 100644 index 0000000..a107e7f --- /dev/null +++ b/ZM/Maps/Origins/character/c_zom_tomb_crusader_1a.gsc @@ -0,0 +1,53 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_tomb_crusader_head_als; + +main() +{ + self setmodel( "c_zom_tomb_crusader_body_1a" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_tomb_crusader_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = "c_zom_tomb_crusader_hat_1"; + self attach( self.hatmodel ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_tomb_crusader_body_g_upclean_1a"; + self.torsodmg2 = "c_zom_tomb_crusader_body_g_rarm_1a"; + self.torsodmg3 = "c_zom_tomb_crusader_body_g_larm_1a"; + self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; + self.legdmg1 = "c_zom_tomb_crusader_body_g_lowclean_1a"; + self.legdmg2 = "c_zom_tomb_crusader_body_g_rleg_1a"; + self.legdmg3 = "c_zom_tomb_crusader_body_g_lleg_1a"; + self.legdmg4 = "c_zom_tomb_crusader_body_g_legsoff_1a"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; + self.gibspawn5 = "c_zom_tomb_crusader_hat_1"; + self.gibspawntag5 = "J_Head"; +} + +precache() +{ + precachemodel( "c_zom_tomb_crusader_body_1a" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_tomb_crusader_head_als::main() ); + precachemodel( "c_zom_tomb_crusader_hat_1" ); + precachemodel( "c_zom_tomb_crusader_body_g_upclean_1a" ); + precachemodel( "c_zom_tomb_crusader_body_g_rarm_1a" ); + precachemodel( "c_zom_tomb_crusader_body_g_larm_1a" ); + precachemodel( "c_zom_tomb_german_body_g_behead" ); + precachemodel( "c_zom_tomb_crusader_body_g_lowclean_1a" ); + precachemodel( "c_zom_tomb_crusader_body_g_rleg_1a" ); + precachemodel( "c_zom_tomb_crusader_body_g_lleg_1a" ); + precachemodel( "c_zom_tomb_crusader_body_g_legsoff_1a" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); + precachemodel( "c_zom_tomb_crusader_hat_1" ); +} diff --git a/ZM/Maps/Origins/character/c_zom_tomb_crusader_1a_nohat.gsc b/ZM/Maps/Origins/character/c_zom_tomb_crusader_1a_nohat.gsc new file mode 100644 index 0000000..a30ea66 --- /dev/null +++ b/ZM/Maps/Origins/character/c_zom_tomb_crusader_1a_nohat.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_tomb_crusader_head_als; + +main() +{ + self setmodel( "c_zom_tomb_crusader_body_1a_nohat" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_tomb_crusader_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_tomb_crusader_body_g_upclean_1a"; + self.torsodmg2 = "c_zom_tomb_crusader_body_g_rarm_1a"; + self.torsodmg3 = "c_zom_tomb_crusader_body_g_larm_1a"; + self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; + self.legdmg1 = "c_zom_tomb_crusader_body_g_lowclean_1a"; + self.legdmg2 = "c_zom_tomb_crusader_body_g_rleg_1a"; + self.legdmg3 = "c_zom_tomb_crusader_body_g_lleg_1a"; + self.legdmg4 = "c_zom_tomb_crusader_body_g_legsoff_1a"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_tomb_crusader_body_1a_nohat" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_tomb_crusader_head_als::main() ); + precachemodel( "c_zom_tomb_crusader_body_g_upclean_1a" ); + precachemodel( "c_zom_tomb_crusader_body_g_rarm_1a" ); + precachemodel( "c_zom_tomb_crusader_body_g_larm_1a" ); + precachemodel( "c_zom_tomb_german_body_g_behead" ); + precachemodel( "c_zom_tomb_crusader_body_g_lowclean_1a" ); + precachemodel( "c_zom_tomb_crusader_body_g_rleg_1a" ); + precachemodel( "c_zom_tomb_crusader_body_g_lleg_1a" ); + precachemodel( "c_zom_tomb_crusader_body_g_legsoff_1a" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); +} diff --git a/ZM/Maps/Origins/character/c_zom_tomb_crusader_1c.gsc b/ZM/Maps/Origins/character/c_zom_tomb_crusader_1c.gsc new file mode 100644 index 0000000..eb1d43a --- /dev/null +++ b/ZM/Maps/Origins/character/c_zom_tomb_crusader_1c.gsc @@ -0,0 +1,53 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_tomb_crusader_head_als; + +main() +{ + self setmodel( "c_zom_tomb_crusader_body_1c" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_tomb_crusader_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = "c_zom_tomb_crusader_hat_1"; + self attach( self.hatmodel ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_tomb_crusader_body_g_upclean_1c"; + self.torsodmg2 = "c_zom_tomb_crusader_body_g_rarm_1c"; + self.torsodmg3 = "c_zom_tomb_crusader_body_g_larm_1c"; + self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; + self.legdmg1 = "c_zom_tomb_crusader_body_g_lowclean_1c"; + self.legdmg2 = "c_zom_tomb_crusader_body_g_rleg_1c"; + self.legdmg3 = "c_zom_tomb_crusader_body_g_lleg_1c"; + self.legdmg4 = "c_zom_tomb_crusader_body_g_legsoff_1c"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; + self.gibspawn5 = "c_zom_tomb_crusader_hat_3"; + self.gibspawntag5 = "J_Head"; +} + +precache() +{ + precachemodel( "c_zom_tomb_crusader_body_1c" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_tomb_crusader_head_als::main() ); + precachemodel( "c_zom_tomb_crusader_hat_1" ); + precachemodel( "c_zom_tomb_crusader_body_g_upclean_1c" ); + precachemodel( "c_zom_tomb_crusader_body_g_rarm_1c" ); + precachemodel( "c_zom_tomb_crusader_body_g_larm_1c" ); + precachemodel( "c_zom_tomb_german_body_g_behead" ); + precachemodel( "c_zom_tomb_crusader_body_g_lowclean_1c" ); + precachemodel( "c_zom_tomb_crusader_body_g_rleg_1c" ); + precachemodel( "c_zom_tomb_crusader_body_g_lleg_1c" ); + precachemodel( "c_zom_tomb_crusader_body_g_legsoff_1c" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); + precachemodel( "c_zom_tomb_crusader_hat_3" ); +} diff --git a/ZM/Maps/Origins/character/c_zom_tomb_crusader_2b.gsc b/ZM/Maps/Origins/character/c_zom_tomb_crusader_2b.gsc new file mode 100644 index 0000000..44336c1 --- /dev/null +++ b/ZM/Maps/Origins/character/c_zom_tomb_crusader_2b.gsc @@ -0,0 +1,53 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_tomb_crusader_head_als; + +main() +{ + self setmodel( "c_zom_tomb_crusader_body_2b" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_tomb_crusader_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = "c_zom_tomb_crusader_hat_2"; + self attach( self.hatmodel ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_tomb_crusader_body_g_upclean_2b"; + self.torsodmg2 = "c_zom_tomb_crusader_body_g_rarm_2b"; + self.torsodmg3 = "c_zom_tomb_crusader_body_g_larm_2b"; + self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; + self.legdmg1 = "c_zom_tomb_crusader_body_g_lowclean_2b"; + self.legdmg2 = "c_zom_tomb_crusader_body_g_rleg_2b"; + self.legdmg3 = "c_zom_tomb_crusader_body_g_lleg_2b"; + self.legdmg4 = "c_zom_tomb_crusader_body_g_legsoff_2b"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; + self.gibspawn5 = "c_zom_tomb_crusader_hat_3"; + self.gibspawntag5 = "J_Head"; +} + +precache() +{ + precachemodel( "c_zom_tomb_crusader_body_2b" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_tomb_crusader_head_als::main() ); + precachemodel( "c_zom_tomb_crusader_hat_2" ); + precachemodel( "c_zom_tomb_crusader_body_g_upclean_2b" ); + precachemodel( "c_zom_tomb_crusader_body_g_rarm_2b" ); + precachemodel( "c_zom_tomb_crusader_body_g_larm_2b" ); + precachemodel( "c_zom_tomb_german_body_g_behead" ); + precachemodel( "c_zom_tomb_crusader_body_g_lowclean_2b" ); + precachemodel( "c_zom_tomb_crusader_body_g_rleg_2b" ); + precachemodel( "c_zom_tomb_crusader_body_g_lleg_2b" ); + precachemodel( "c_zom_tomb_crusader_body_g_legsoff_2b" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); + precachemodel( "c_zom_tomb_crusader_hat_3" ); +} diff --git a/ZM/Maps/Origins/character/c_zom_tomb_crusader_2b_nohat.gsc b/ZM/Maps/Origins/character/c_zom_tomb_crusader_2b_nohat.gsc new file mode 100644 index 0000000..615c4a0 --- /dev/null +++ b/ZM/Maps/Origins/character/c_zom_tomb_crusader_2b_nohat.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_tomb_crusader_head_als; + +main() +{ + self setmodel( "c_zom_tomb_crusader_body_2b_nohat" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_tomb_crusader_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_tomb_crusader_body_g_upclean_2b"; + self.torsodmg2 = "c_zom_tomb_crusader_body_g_rarm_2b"; + self.torsodmg3 = "c_zom_tomb_crusader_body_g_larm_2b"; + self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; + self.legdmg1 = "c_zom_tomb_crusader_body_g_lowclean_2b"; + self.legdmg2 = "c_zom_tomb_crusader_body_g_rleg_2b"; + self.legdmg3 = "c_zom_tomb_crusader_body_g_lleg_2b"; + self.legdmg4 = "c_zom_tomb_crusader_body_g_legsoff_2b"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_tomb_crusader_body_2b_nohat" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_tomb_crusader_head_als::main() ); + precachemodel( "c_zom_tomb_crusader_body_g_upclean_2b" ); + precachemodel( "c_zom_tomb_crusader_body_g_rarm_2b" ); + precachemodel( "c_zom_tomb_crusader_body_g_larm_2b" ); + precachemodel( "c_zom_tomb_german_body_g_behead" ); + precachemodel( "c_zom_tomb_crusader_body_g_lowclean_2b" ); + precachemodel( "c_zom_tomb_crusader_body_g_rleg_2b" ); + precachemodel( "c_zom_tomb_crusader_body_g_lleg_2b" ); + precachemodel( "c_zom_tomb_crusader_body_g_legsoff_2b" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); +} diff --git a/ZM/Maps/Origins/character/c_zom_tomb_crusader_2c.gsc b/ZM/Maps/Origins/character/c_zom_tomb_crusader_2c.gsc new file mode 100644 index 0000000..caeec6a --- /dev/null +++ b/ZM/Maps/Origins/character/c_zom_tomb_crusader_2c.gsc @@ -0,0 +1,53 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_tomb_crusader_head_als; + +main() +{ + self setmodel( "c_zom_tomb_crusader_body_2c" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_tomb_crusader_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = "c_zom_tomb_crusader_hat_2"; + self attach( self.hatmodel ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_tomb_crusader_body_g_upclean_2c"; + self.torsodmg2 = "c_zom_tomb_crusader_body_g_rarm_2c"; + self.torsodmg3 = "c_zom_tomb_crusader_body_g_larm_2c"; + self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; + self.legdmg1 = "c_zom_tomb_crusader_body_g_lowclean_2c"; + self.legdmg2 = "c_zom_tomb_crusader_body_g_rleg_2c"; + self.legdmg3 = "c_zom_tomb_crusader_body_g_lleg_2c"; + self.legdmg4 = "c_zom_tomb_crusader_body_g_legsoff_2c"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; + self.gibspawn5 = "c_zom_tomb_crusader_hat_1"; + self.gibspawntag5 = "J_Head"; +} + +precache() +{ + precachemodel( "c_zom_tomb_crusader_body_2c" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_tomb_crusader_head_als::main() ); + precachemodel( "c_zom_tomb_crusader_hat_2" ); + precachemodel( "c_zom_tomb_crusader_body_g_upclean_2c" ); + precachemodel( "c_zom_tomb_crusader_body_g_rarm_2c" ); + precachemodel( "c_zom_tomb_crusader_body_g_larm_2c" ); + precachemodel( "c_zom_tomb_german_body_g_behead" ); + precachemodel( "c_zom_tomb_crusader_body_g_lowclean_2c" ); + precachemodel( "c_zom_tomb_crusader_body_g_rleg_2c" ); + precachemodel( "c_zom_tomb_crusader_body_g_lleg_2c" ); + precachemodel( "c_zom_tomb_crusader_body_g_legsoff_2c" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); + precachemodel( "c_zom_tomb_crusader_hat_1" ); +} diff --git a/ZM/Maps/Origins/character/c_zom_tomb_crusader_zc.gsc b/ZM/Maps/Origins/character/c_zom_tomb_crusader_zc.gsc new file mode 100644 index 0000000..ba8c410 --- /dev/null +++ b/ZM/Maps/Origins/character/c_zom_tomb_crusader_zc.gsc @@ -0,0 +1,51 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_tomb_crusader_body_zc" ); + self.headmodel = "c_zom_tomb_crusader_headz"; + self attach( self.headmodel, "", 1 ); + self.hatmodel = "c_zom_tomb_crusader_hat_3"; + self attach( self.hatmodel ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_tomb_crusader_body_g_upclean_zc"; + self.torsodmg2 = "c_zom_tomb_crusader_body_g_rarm_zc"; + self.torsodmg3 = "c_zom_tomb_crusader_body_g_larm_zc"; + self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; + self.legdmg1 = "c_zom_tomb_crusader_body_g_lowclean_zc"; + self.legdmg2 = "c_zom_tomb_crusader_body_g_rleg_zc"; + self.legdmg3 = "c_zom_tomb_crusader_body_g_lleg_zc"; + self.legdmg4 = "c_zom_tomb_crusader_body_g_legsoff_zc"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; + self.gibspawn5 = "c_zom_tomb_crusader_hat_3"; + self.gibspawntag5 = "J_Head"; +} + +precache() +{ + precachemodel( "c_zom_tomb_crusader_body_zc" ); + precachemodel( "c_zom_tomb_crusader_headz" ); + precachemodel( "c_zom_tomb_crusader_hat_3" ); + precachemodel( "c_zom_tomb_crusader_body_g_upclean_zc" ); + precachemodel( "c_zom_tomb_crusader_body_g_rarm_zc" ); + precachemodel( "c_zom_tomb_crusader_body_g_larm_zc" ); + precachemodel( "c_zom_tomb_german_body_g_behead" ); + precachemodel( "c_zom_tomb_crusader_body_g_lowclean_zc" ); + precachemodel( "c_zom_tomb_crusader_body_g_rleg_zc" ); + precachemodel( "c_zom_tomb_crusader_body_g_lleg_zc" ); + precachemodel( "c_zom_tomb_crusader_body_g_legsoff_zc" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); + precachemodel( "c_zom_tomb_crusader_hat_3" ); +} diff --git a/ZM/Maps/Origins/character/c_zom_tomb_german_1a.gsc b/ZM/Maps/Origins/character/c_zom_tomb_german_1a.gsc new file mode 100644 index 0000000..0850c1e --- /dev/null +++ b/ZM/Maps/Origins/character/c_zom_tomb_german_1a.gsc @@ -0,0 +1,53 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_tomb_german_head_als; + +main() +{ + self setmodel( "c_zom_tomb_german_body_1a" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_tomb_german_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = "c_zom_tomb_german_hat_1"; + self attach( self.hatmodel ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_tomb_german_body_g_upclean_1a"; + self.torsodmg2 = "c_zom_tomb_german_body_g_rarm_1a"; + self.torsodmg3 = "c_zom_tomb_german_body_g_larm_1a"; + self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; + self.legdmg1 = "c_zom_tomb_german_body_g_lowclean_1a"; + self.legdmg2 = "c_zom_tomb_german_body_g_rleg_1a"; + self.legdmg3 = "c_zom_tomb_german_body_g_lleg_1a"; + self.legdmg4 = "c_zom_tomb_german_body_g_legsoff_1a"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; + self.gibspawn5 = "c_zom_tomb_german_hat_1"; + self.gibspawntag5 = "J_Head"; +} + +precache() +{ + precachemodel( "c_zom_tomb_german_body_1a" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_tomb_german_head_als::main() ); + precachemodel( "c_zom_tomb_german_hat_1" ); + precachemodel( "c_zom_tomb_german_body_g_upclean_1a" ); + precachemodel( "c_zom_tomb_german_body_g_rarm_1a" ); + precachemodel( "c_zom_tomb_german_body_g_larm_1a" ); + precachemodel( "c_zom_tomb_german_body_g_behead" ); + precachemodel( "c_zom_tomb_german_body_g_lowclean_1a" ); + precachemodel( "c_zom_tomb_german_body_g_rleg_1a" ); + precachemodel( "c_zom_tomb_german_body_g_lleg_1a" ); + precachemodel( "c_zom_tomb_german_body_g_legsoff_1a" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); + precachemodel( "c_zom_tomb_german_hat_1" ); +} diff --git a/ZM/Maps/Origins/character/c_zom_tomb_german_1a_nohat.gsc b/ZM/Maps/Origins/character/c_zom_tomb_german_1a_nohat.gsc new file mode 100644 index 0000000..eb777a6 --- /dev/null +++ b/ZM/Maps/Origins/character/c_zom_tomb_german_1a_nohat.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_tomb_german_head_als; + +main() +{ + self setmodel( "c_zom_tomb_german_body_1a_nohat" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_tomb_german_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_tomb_german_body_g_upclean_1a"; + self.torsodmg2 = "c_zom_tomb_german_body_g_rarm_1a"; + self.torsodmg3 = "c_zom_tomb_german_body_g_larm_1a"; + self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; + self.legdmg1 = "c_zom_tomb_german_body_g_lowclean_1a"; + self.legdmg2 = "c_zom_tomb_german_body_g_rleg_1a"; + self.legdmg3 = "c_zom_tomb_german_body_g_lleg_1a"; + self.legdmg4 = "c_zom_tomb_german_body_g_legsoff_1a"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_tomb_german_body_1a_nohat" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_tomb_german_head_als::main() ); + precachemodel( "c_zom_tomb_german_body_g_upclean_1a" ); + precachemodel( "c_zom_tomb_german_body_g_rarm_1a" ); + precachemodel( "c_zom_tomb_german_body_g_larm_1a" ); + precachemodel( "c_zom_tomb_german_body_g_behead" ); + precachemodel( "c_zom_tomb_german_body_g_lowclean_1a" ); + precachemodel( "c_zom_tomb_german_body_g_rleg_1a" ); + precachemodel( "c_zom_tomb_german_body_g_lleg_1a" ); + precachemodel( "c_zom_tomb_german_body_g_legsoff_1a" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); +} diff --git a/ZM/Maps/Origins/character/c_zom_tomb_german_2b.gsc b/ZM/Maps/Origins/character/c_zom_tomb_german_2b.gsc new file mode 100644 index 0000000..1b7327e --- /dev/null +++ b/ZM/Maps/Origins/character/c_zom_tomb_german_2b.gsc @@ -0,0 +1,53 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_tomb_german_head_als; + +main() +{ + self setmodel( "c_zom_tomb_german_body_1b" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_tomb_german_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = "c_zom_tomb_german_hat_2"; + self attach( self.hatmodel ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_tomb_german_body_g_upclean_1b"; + self.torsodmg2 = "c_zom_tomb_german_body_g_rarm_1b"; + self.torsodmg3 = "c_zom_tomb_german_body_g_larm_1b"; + self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; + self.legdmg1 = "c_zom_tomb_german_body_g_lowclean_1b"; + self.legdmg2 = "c_zom_tomb_german_body_g_rleg_1b"; + self.legdmg3 = "c_zom_tomb_german_body_g_lleg_1b"; + self.legdmg4 = "c_zom_tomb_german_body_g_legsoff_1b"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; + self.gibspawn5 = "c_zom_tomb_german_hat_2"; + self.gibspawntag5 = "J_Head"; +} + +precache() +{ + precachemodel( "c_zom_tomb_german_body_1b" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_tomb_german_head_als::main() ); + precachemodel( "c_zom_tomb_german_hat_2" ); + precachemodel( "c_zom_tomb_german_body_g_upclean_1b" ); + precachemodel( "c_zom_tomb_german_body_g_rarm_1b" ); + precachemodel( "c_zom_tomb_german_body_g_larm_1b" ); + precachemodel( "c_zom_tomb_german_body_g_behead" ); + precachemodel( "c_zom_tomb_german_body_g_lowclean_1b" ); + precachemodel( "c_zom_tomb_german_body_g_rleg_1b" ); + precachemodel( "c_zom_tomb_german_body_g_lleg_1b" ); + precachemodel( "c_zom_tomb_german_body_g_legsoff_1b" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); + precachemodel( "c_zom_tomb_german_hat_2" ); +} diff --git a/ZM/Maps/Origins/character/c_zom_tomb_german_2b_nohat.gsc b/ZM/Maps/Origins/character/c_zom_tomb_german_2b_nohat.gsc new file mode 100644 index 0000000..098859f --- /dev/null +++ b/ZM/Maps/Origins/character/c_zom_tomb_german_2b_nohat.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_tomb_german_head_als; + +main() +{ + self setmodel( "c_zom_tomb_german_body_1b_nohat" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_tomb_german_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_tomb_german_body_g_upclean_1b"; + self.torsodmg2 = "c_zom_tomb_german_body_g_rarm_1b"; + self.torsodmg3 = "c_zom_tomb_german_body_g_larm_1b"; + self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; + self.legdmg1 = "c_zom_tomb_german_body_g_lowclean_1b"; + self.legdmg2 = "c_zom_tomb_german_body_g_rleg_1b"; + self.legdmg3 = "c_zom_tomb_german_body_g_lleg_1b"; + self.legdmg4 = "c_zom_tomb_german_body_g_legsoff_1b"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_tomb_german_body_1b_nohat" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_tomb_german_head_als::main() ); + precachemodel( "c_zom_tomb_german_body_g_upclean_1b" ); + precachemodel( "c_zom_tomb_german_body_g_rarm_1b" ); + precachemodel( "c_zom_tomb_german_body_g_larm_1b" ); + precachemodel( "c_zom_tomb_german_body_g_behead" ); + precachemodel( "c_zom_tomb_german_body_g_lowclean_1b" ); + precachemodel( "c_zom_tomb_german_body_g_rleg_1b" ); + precachemodel( "c_zom_tomb_german_body_g_lleg_1b" ); + precachemodel( "c_zom_tomb_german_body_g_legsoff_1b" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); +} diff --git a/ZM/Maps/Origins/character/c_zom_tomb_german_3c.gsc b/ZM/Maps/Origins/character/c_zom_tomb_german_3c.gsc new file mode 100644 index 0000000..83cb422 --- /dev/null +++ b/ZM/Maps/Origins/character/c_zom_tomb_german_3c.gsc @@ -0,0 +1,53 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_tomb_german_head_als; + +main() +{ + self setmodel( "c_zom_tomb_german_body_3c" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_tomb_german_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = "c_zom_tomb_german_hat_3"; + self attach( self.hatmodel ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_tomb_german_body_g_upclean_3c"; + self.torsodmg2 = "c_zom_tomb_german_body_g_rarm_3c"; + self.torsodmg3 = "c_zom_tomb_german_body_g_larm_3c"; + self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; + self.legdmg1 = "c_zom_tomb_german_body_g_lowclean_3c"; + self.legdmg2 = "c_zom_tomb_german_body_g_rleg_3c"; + self.legdmg3 = "c_zom_tomb_german_body_g_lleg_3c"; + self.legdmg4 = "c_zom_tomb_german_body_g_legsoff_3c"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; + self.gibspawn5 = "c_zom_tomb_german_hat_3"; + self.gibspawntag5 = "J_Head"; +} + +precache() +{ + precachemodel( "c_zom_tomb_german_body_3c" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_tomb_german_head_als::main() ); + precachemodel( "c_zom_tomb_german_hat_3" ); + precachemodel( "c_zom_tomb_german_body_g_upclean_3c" ); + precachemodel( "c_zom_tomb_german_body_g_rarm_3c" ); + precachemodel( "c_zom_tomb_german_body_g_larm_3c" ); + precachemodel( "c_zom_tomb_german_body_g_behead" ); + precachemodel( "c_zom_tomb_german_body_g_lowclean_3c" ); + precachemodel( "c_zom_tomb_german_body_g_rleg_3c" ); + precachemodel( "c_zom_tomb_german_body_g_lleg_3c" ); + precachemodel( "c_zom_tomb_german_body_g_legsoff_3c" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); + precachemodel( "c_zom_tomb_german_hat_3" ); +} diff --git a/ZM/Maps/Origins/character/c_zom_tomb_german_3c_nohat.gsc b/ZM/Maps/Origins/character/c_zom_tomb_german_3c_nohat.gsc new file mode 100644 index 0000000..588196b --- /dev/null +++ b/ZM/Maps/Origins/character/c_zom_tomb_german_3c_nohat.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_tomb_german_head_als; + +main() +{ + self setmodel( "c_zom_tomb_german_body_3c_nohat" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_tomb_german_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_tomb_german_body_g_upclean_3c"; + self.torsodmg2 = "c_zom_tomb_german_body_g_rarm_3c"; + self.torsodmg3 = "c_zom_tomb_german_body_g_larm_3c"; + self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; + self.legdmg1 = "c_zom_tomb_german_body_g_lowclean_3c"; + self.legdmg2 = "c_zom_tomb_german_body_g_rleg_3c"; + self.legdmg3 = "c_zom_tomb_german_body_g_lleg_3c"; + self.legdmg4 = "c_zom_tomb_german_body_g_legsoff_3c"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_tomb_german_body_3c_nohat" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_tomb_german_head_als::main() ); + precachemodel( "c_zom_tomb_german_body_g_upclean_3c" ); + precachemodel( "c_zom_tomb_german_body_g_rarm_3c" ); + precachemodel( "c_zom_tomb_german_body_g_larm_3c" ); + precachemodel( "c_zom_tomb_german_body_g_behead" ); + precachemodel( "c_zom_tomb_german_body_g_lowclean_3c" ); + precachemodel( "c_zom_tomb_german_body_g_rleg_3c" ); + precachemodel( "c_zom_tomb_german_body_g_lleg_3c" ); + precachemodel( "c_zom_tomb_german_body_g_legsoff_3c" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); +} diff --git a/ZM/Maps/Origins/character/c_zom_tomb_german_bare.gsc b/ZM/Maps/Origins/character/c_zom_tomb_german_bare.gsc new file mode 100644 index 0000000..0850c1e --- /dev/null +++ b/ZM/Maps/Origins/character/c_zom_tomb_german_bare.gsc @@ -0,0 +1,53 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_tomb_german_head_als; + +main() +{ + self setmodel( "c_zom_tomb_german_body_1a" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_tomb_german_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.hatmodel = "c_zom_tomb_german_hat_1"; + self attach( self.hatmodel ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_tomb_german_body_g_upclean_1a"; + self.torsodmg2 = "c_zom_tomb_german_body_g_rarm_1a"; + self.torsodmg3 = "c_zom_tomb_german_body_g_larm_1a"; + self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; + self.legdmg1 = "c_zom_tomb_german_body_g_lowclean_1a"; + self.legdmg2 = "c_zom_tomb_german_body_g_rleg_1a"; + self.legdmg3 = "c_zom_tomb_german_body_g_lleg_1a"; + self.legdmg4 = "c_zom_tomb_german_body_g_legsoff_1a"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; + self.gibspawn5 = "c_zom_tomb_german_hat_1"; + self.gibspawntag5 = "J_Head"; +} + +precache() +{ + precachemodel( "c_zom_tomb_german_body_1a" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_tomb_german_head_als::main() ); + precachemodel( "c_zom_tomb_german_hat_1" ); + precachemodel( "c_zom_tomb_german_body_g_upclean_1a" ); + precachemodel( "c_zom_tomb_german_body_g_rarm_1a" ); + precachemodel( "c_zom_tomb_german_body_g_larm_1a" ); + precachemodel( "c_zom_tomb_german_body_g_behead" ); + precachemodel( "c_zom_tomb_german_body_g_lowclean_1a" ); + precachemodel( "c_zom_tomb_german_body_g_rleg_1a" ); + precachemodel( "c_zom_tomb_german_body_g_lleg_1a" ); + precachemodel( "c_zom_tomb_german_body_g_legsoff_1a" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); + precachemodel( "c_zom_tomb_german_hat_1" ); +} diff --git a/ZM/Maps/Origins/character/c_zom_tomb_german_bare_nohat.gsc b/ZM/Maps/Origins/character/c_zom_tomb_german_bare_nohat.gsc new file mode 100644 index 0000000..f628c07 --- /dev/null +++ b/ZM/Maps/Origins/character/c_zom_tomb_german_bare_nohat.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_tomb_german_head_als; + +main() +{ + self setmodel( "c_zom_tomb_german_body_1a" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_tomb_german_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_tomb_german_body_g_upclean_1a"; + self.torsodmg2 = "c_zom_tomb_german_body_g_rarm_1a"; + self.torsodmg3 = "c_zom_tomb_german_body_g_larm_1a"; + self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; + self.legdmg1 = "c_zom_tomb_german_body_g_lowclean_1a"; + self.legdmg2 = "c_zom_tomb_german_body_g_rleg_1a"; + self.legdmg3 = "c_zom_tomb_german_body_g_lleg_1a"; + self.legdmg4 = "c_zom_tomb_german_body_g_legsoff_1a"; + self.gibspawn1 = "c_zom_buried_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_buried_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_buried_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_buried_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_tomb_german_body_1a" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_tomb_german_head_als::main() ); + precachemodel( "c_zom_tomb_german_body_g_upclean_1a" ); + precachemodel( "c_zom_tomb_german_body_g_rarm_1a" ); + precachemodel( "c_zom_tomb_german_body_g_larm_1a" ); + precachemodel( "c_zom_tomb_german_body_g_behead" ); + precachemodel( "c_zom_tomb_german_body_g_lowclean_1a" ); + precachemodel( "c_zom_tomb_german_body_g_rleg_1a" ); + precachemodel( "c_zom_tomb_german_body_g_lleg_1a" ); + precachemodel( "c_zom_tomb_german_body_g_legsoff_1a" ); + precachemodel( "c_zom_buried_g_rarmspawn" ); + precachemodel( "c_zom_buried_g_larmspawn" ); + precachemodel( "c_zom_buried_g_rlegspawn" ); + precachemodel( "c_zom_buried_g_llegspawn" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_alcove_40.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_alcove_40.gsc new file mode 100644 index 0000000..f991567 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_alcove_40.gsc @@ -0,0 +1,20 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + self thread alcove_traverse_fx( "rise_billow" ); + dosimpletraverse( "alcove_40" ); +} + +alcove_traverse_fx( str_fx ) +{ + self endon( "death" ); + wait 0.15; + v_facing = anglestoforward( self.angles ); + v_offset = v_facing * 32; + playfx( level._effect[str_fx], self.origin + v_offset ); + self playsound( "zmb_spawn_tomb" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_alcove_56.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_alcove_56.gsc new file mode 100644 index 0000000..95e7c87 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_alcove_56.gsc @@ -0,0 +1,20 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + self thread alcove_traverse_fx( "rise_billow" ); + dosimpletraverse( "alcove_56" ); +} + +alcove_traverse_fx( str_fx ) +{ + self endon( "death" ); + wait 0.15; + v_facing = anglestoforward( self.angles ); + v_offset = v_facing * 32; + playfx( level._effect[str_fx], self.origin + v_offset ); + self playsound( "zmb_spawn_tomb" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_alcove_96.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_alcove_96.gsc new file mode 100644 index 0000000..6e5d527 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_alcove_96.gsc @@ -0,0 +1,20 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + self thread alcove_traverse_fx( "rise_billow" ); + dosimpletraverse( "alcove_96" ); +} + +alcove_traverse_fx( str_fx ) +{ + self endon( "death" ); + wait 0.15; + v_facing = anglestoforward( self.angles ); + v_offset = v_facing * 32; + playfx( level._effect[str_fx], self.origin + v_offset ); + self playsound( "zmb_spawn_tomb" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_across_120.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_across_120.gsc new file mode 100644 index 0000000..b919516 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_across_120.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_across_120" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_127.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_127.gsc new file mode 100644 index 0000000..5b1c8da --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_127.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_127" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_48.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_48.gsc new file mode 100644 index 0000000..3886fb1 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_48.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_48" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_72.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_72.gsc new file mode 100644 index 0000000..4c6130b --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_72.gsc @@ -0,0 +1,12 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + if ( isdefined( self.isdog ) && self.isdog ) + dog_jump_down( 72, 7 ); + else + dosimpletraverse( "jump_down_72" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_96.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_96.gsc new file mode 100644 index 0000000..a051331 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_96.gsc @@ -0,0 +1,12 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + if ( isdefined( self.isdog ) && self.isdog ) + dog_jump_down( 96, 7 ); + else + dosimpletraverse( "jump_down_96" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_church.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_church.gsc new file mode 100644 index 0000000..147c449 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_church.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_church" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_dlc4_112.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_dlc4_112.gsc new file mode 100644 index 0000000..f91a068 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_dlc4_112.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_dlc4_112" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_dlc4_120.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_dlc4_120.gsc new file mode 100644 index 0000000..d498451 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_dlc4_120.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_dlc4_120" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_dlc4_96.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_dlc4_96.gsc new file mode 100644 index 0000000..9c5683e --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_down_dlc4_96.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_dlc4_96" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_up_127.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_up_127.gsc new file mode 100644 index 0000000..30fbdd3 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_up_127.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_127" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_up_48.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_up_48.gsc new file mode 100644 index 0000000..d165296 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_up_48.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_48" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_up_72.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_up_72.gsc new file mode 100644 index 0000000..a5452be --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_up_72.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_72" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_up_96.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_up_96.gsc new file mode 100644 index 0000000..b8d461d --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_up_96.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_96" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_up_dlc4_140.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_up_dlc4_140.gsc new file mode 100644 index 0000000..4e0a83d --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_jump_up_dlc4_140.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_dlc4_140" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc new file mode 100644 index 0000000..a9c2823 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + self dosimpletraverse( "mantle_over_40_hurdle" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_scaffold_100.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_scaffold_100.gsc new file mode 100644 index 0000000..33ad2d4 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_scaffold_100.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "scaffold_100" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_scaffold_72.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_scaffold_72.gsc new file mode 100644 index 0000000..cade4cc --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_scaffold_72.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "scaffold_72" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_scaffold_84.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_scaffold_84.gsc new file mode 100644 index 0000000..8738d7d --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_scaffold_84.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "scaffold_84" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_vault_barbedwire_24.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_vault_barbedwire_24.gsc new file mode 100644 index 0000000..cab17f3 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_vault_barbedwire_24.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "vault_barbedwire_24" ); +} diff --git a/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_vault_barbedwire_48.gsc b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_vault_barbedwire_48.gsc new file mode 100644 index 0000000..0fde6a9 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/animscripts/traverse/zm_vault_barbedwire_48.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "vault_barbedwire_48" ); +} diff --git a/ZM/Maps/Origins/maps/mp/createfx/zm_tomb_fx.gsc b/ZM/Maps/Origins/maps/mp/createfx/zm_tomb_fx.gsc new file mode 100644 index 0000000..7cd2b06 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/createfx/zm_tomb_fx.gsc @@ -0,0 +1,2947 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_sky_dist_aa_tracers" ); + ent.v["origin"] = ( 3985.87, -2266.88, 620.347 ); + ent.v["angles"] = ( 308, 157, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 0.5; + ent = maps\mp\_utility::createoneshoteffect( "fx_sky_dist_aa_tracers" ); + ent.v["origin"] = ( -3484.26, -2358.33, 390.429 ); + ent.v["angles"] = ( 303, 51, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 0.6; + ent = maps\mp\_utility::createoneshoteffect( "fx_sky_dist_aa_tracers" ); + ent.v["origin"] = ( -3517.84, 6068.08, -148.928 ); + ent.v["angles"] = ( 309, 304, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 0.7; + ent = maps\mp\_utility::createoneshoteffect( "fx_sky_dist_aa_tracers" ); + ent.v["origin"] = ( 4636.09, 6184.08, -566.447 ); + ent.v["angles"] = ( 309, 238, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 0.8; + ent = maps\mp\_utility::createoneshoteffect( "fx_sky_dist_aa_tracers" ); + ent.v["origin"] = ( 5658.25, 2371.44, 67.287 ); + ent.v["angles"] = ( 302, 210, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 0.9; + ent = maps\mp\_utility::createoneshoteffect( "fx_sky_dist_aa_tracers" ); + ent.v["origin"] = ( -5002.88, -1552.28, 428.395 ); + ent.v["angles"] = ( 304, 16, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 0.4; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 2843.54, 5293.37, -363.418 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 2513.15, 4672.39, -310.401 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 2195.31, 4228.35, -339.899 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 2106.41, 3592.28, -320.587 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 1795, 3512.73, -306.407 ); + ent.v["angles"] = ( 277, 52, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 1734.71, 4133.62, -351 ); + ent.v["angles"] = ( 270, 0, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 1879.3, 2885.36, -288.043 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 1049.73, 2752.76, -238.953 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 267.334, 3081.48, -177.704 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 542.076, 2284.97, -127.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -41.8083, 2641.51, -258.645 ); + ent.v["angles"] = ( 270, 359.984, 1.01559 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 1553.53, 4354.24, -312 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 1494.96, 3911.27, -312 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 993.339, 3876.16, -317.868 ); + ent.v["angles"] = ( 270, 0, 37 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 659.486, 3478.13, -297 ); + ent.v["angles"] = ( 281, 119, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 90.9842, 3546.92, -296 ); + ent.v["angles"] = ( 270, 2.3736, -30.3736 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -107.699, 3837.61, -347.875 ); + ent.v["angles"] = ( 270, 358.457, -19.4571 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -216.538, 4350.95, -347.875 ); + ent.v["angles"] = ( 270, 1.54295, 19.457 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -845.08, 3449.43, -296 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -1281.75, 3621.73, -293 ); + ent.v["angles"] = ( 270, 0, -17 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -842.809, 2436.9, -255.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -842.608, 2949.29, -111.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -513.288, 2499.41, -111.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -768.808, 2100.21, -106.74 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -711.139, 933.946, 129.849 ); + ent.v["angles"] = ( 270, 0, 24 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 1341.75, 1790.74, -17.5413 ); + ent.v["angles"] = ( 274, 90, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 1209.29, 3329.64, -138.948 ); + ent.v["angles"] = ( 270, 357.397, 125.603 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 396.941, 4628.73, -268.046 ); + ent.v["angles"] = ( 281, 135.998, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -607.777, 4721.78, -276.636 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -1627.84, 2857.51, -25.1478 ); + ent.v["angles"] = ( 284, 90, 3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -1298.53, 1958.12, 40.8049 ); + ent.v["angles"] = ( 275, 104, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -934.452, 742.622, 101.931 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 209.42, 784.732, 59.6209 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 794.491, 795.849, 60.9929 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -1357.57, 648.062, 85.4531 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -1904.92, 636.498, 79.4319 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -2540.43, 639.014, 212.896 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -2764.06, -396.495, 172 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -1549.44, -272.618, 100.397 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -719.127, -376.698, 81.4781 ); + ent.v["angles"] = ( 270, 0, 126 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 608.319, -809.919, 79.5367 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 2044.26, -243.885, 124.88 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 1446.3, 535.853, 143.553 ); + ent.v["angles"] = ( 270, 3.57633, 104.424 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 1349.04, 1051.96, 85.1172 ); + ent.v["angles"] = ( 274.242, 44.0377, 45.0407 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 1821.32, 828.037, 125.811 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 2368.44, 829.501, 121.936 ); + ent.v["angles"] = ( 270, 357.614, 98.386 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 2587.41, -298.682, 158.935 ); + ent.v["angles"] = ( 270, 0, 94 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 1804.63, -1329.32, 153.411 ); + ent.v["angles"] = ( 270, 0, 53 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -2437.57, 199.836, 97.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 1512.23, -241.161, 74.6395 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 998.818, -268.386, 81.603 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 1195.17, 160.436, 120.57 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 2355.6, 105.519, 121.476 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 1764.29, 4555.32, -312 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 2650.65, 5290.56, -360.636 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -1131.71, -1371.34, 138.544 ); + ent.v["angles"] = ( 271, 112.998, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_smoke_pillar_xlg" ); + ent.v["origin"] = ( -6497.13, 4398, 151.701 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_smoke_pillar_xlg" ); + ent.v["origin"] = ( -9726.2, 162.926, 578.613 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_smoke_pillar_xlg" ); + ent.v["origin"] = ( 8988.9, -1245.46, 644.195 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 277.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_smoke_pillar_xlg" ); + ent.v["origin"] = ( -8543.64, -7276.44, 1080.45 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 124.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_smoke_pillar_xlg" ); + ent.v["origin"] = ( 7667.85, -9841.25, 1197.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( 2875.71, 5386.04, -257.821 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( 2875.93, 5171.45, -262.48 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( 2561.32, 5148.23, -252.125 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( 1090.19, 4160.7, -217.153 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( 1026.02, 4211.22, -217.172 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( -367.441, 3824.84, -254.85 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( -343.797, 4302.17, -254.435 ); + ent.v["angles"] = ( 270, 0, 87 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( 19.3975, -2586.96, 248.965 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 102.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 78.0901, -1974.09, 230 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 590.711, -1970.39, 231 ); + ent.v["angles"] = ( 270, 0, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 1153.77, -2082.84, 129.98 ); + ent.v["angles"] = ( 281, 221, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -30.2676, -2805.18, 342.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -191.168, -2411.97, 94.861 ); + ent.v["angles"] = ( 284.96, 288.648, -142.7 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 199.73, -2663.18, 35.5706 ); + ent.v["angles"] = ( 270, 356.424, 114.576 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_skybox_vortex" ); + ent.v["origin"] = ( 26.83, 9.96018, 4049.5 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 2160.18, 2773.14, -230.924 ); + ent.v["angles"] = ( 20, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 2208.49, 2652.52, -258.351 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 1308.4, 4527.73, -280.926 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 333.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 1376.79, 4592.89, -288.057 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 323.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 1397.91, 4588, -219.295 ); + ent.v["angles"] = ( 283.348, 205.493, 46.1594 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 2289.97, 2705.53, -169.962 ); + ent.v["angles"] = ( 20, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 2300.55, 2668.53, -219.029 ); + ent.v["angles"] = ( 15.6786, 62.0124, -26.4169 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 1343.77, 4556.23, -285.912 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 324.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( -55.2918, 3401.85, -278.681 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( -45.7065, 3426.32, -275.438 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 0.345567, 3401.86, -275.368 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 275.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( -34.9274, 3405.64, -275.731 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 1413.27, 4481.31, -295.167 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 1468.43, 4469.1, -294.749 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 1463.66, 4403.79, -300.51 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 2269.8, 2801.16, -250.057 ); + ent.v["angles"] = ( 294, 90, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 2225.06, 2818.2, -259.935 ); + ent.v["angles"] = ( 294, 90, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 389.473, -2562.03, 335.952 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 454.156, -2758.77, 346.363 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 723.578, -2771.22, 313.931 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_church_fire_vista" ); + ent.v["origin"] = ( 443.498, -2377.31, 613.078 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_church_fire_vista" ); + ent.v["origin"] = ( 698.322, -2484.87, 732.146 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); + ent.v["origin"] = ( 650.999, -2463.41, 685.933 ); + ent.v["angles"] = ( 329, 286, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); + ent.v["origin"] = ( 691.35, -2507.74, 673.446 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 106.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); + ent.v["origin"] = ( 693.113, -2523.15, 720.126 ); + ent.v["angles"] = ( 32, 104, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_church_fire_vista" ); + ent.v["origin"] = ( 1159.1, -2376, 923.934 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 1141.58, 2634.92, -194.103 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 1660.77, 3112.93, -266.737 ); + ent.v["angles"] = ( 329.03, 356.938, 9.35358 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 1679.45, 3656.57, -294.379 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 296.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 2051.16, 3460.72, -169.785 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 142.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 1987.99, 4066.36, -202.976 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 91.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( -1798.14, 3941.63, -190.553 ); + ent.v["angles"] = ( 18.9826, 300.926, -6.41724 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( -1832.25, 3959.03, -245.62 ); + ent.v["angles"] = ( 15.2317, 291.084, -26.6643 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( -1735.25, 4014.26, -262.608 ); + ent.v["angles"] = ( 314, 130, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( -1661.89, 3999.32, -257.515 ); + ent.v["angles"] = ( 20, 320, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( -1720.48, 3950.62, -270.983 ); + ent.v["angles"] = ( 294, 320, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( -2507.07, 457.774, 234.358 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( -2282.47, 428.981, 212.731 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 165.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( -2006.2, 218.543, 231.684 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( -2203.47, 274.642, 201.723 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( -2028.65, 343.274, 156.023 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 139.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( -1914.86, 229.743, 155.351 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 139.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( -2027.79, 831.058, 128.021 ); + ent.v["angles"] = ( 339, 91, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( -2782.65, 717.79, 195.923 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 62.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 892.313, -2423.24, 444.256 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 282.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 677.344, -2445.57, 549.02 ); + ent.v["angles"] = ( 271, 89.9982, -89.9982 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 659.946, 338.159, 190.876 ); + ent.v["angles"] = ( 339, 28, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 959.444, 463.092, 118.669 ); + ent.v["angles"] = ( 328, 182, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 752.085, 255.592, 161.188 ); + ent.v["angles"] = ( 345, 28, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 705.07, 330.688, 171.721 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 300.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 817.163, 185.378, 148.054 ); + ent.v["angles"] = ( 294.543, 32.7905, -30.371 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 989.417, 249.04, 129.222 ); + ent.v["angles"] = ( 270, 359.851, 0.149435 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 827.541, 60.0739, 155 ); + ent.v["angles"] = ( 270, 359.851, 0.149435 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 793.703, 81.6701, 156.077 ); + ent.v["angles"] = ( 345, 28, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 1.0968, 838.705, 175.673 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 136.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( -283.606, 801.684, 179.177 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 153.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( -380.428, 795.687, 168.183 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 136.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( -578.668, -581.305, 172.375 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( -581.151, -617.212, 181.994 ); + ent.v["angles"] = ( 329, 180, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 478.173, -2748.89, 361.913 ); + ent.v["angles"] = ( 270, 359.851, 0.149435 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 268.286, -2544.9, 302.125 ); + ent.v["angles"] = ( 270, 359.851, 0.149435 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 694.386, -2786.22, 320.088 ); + ent.v["angles"] = ( 270, 359.851, 0.149435 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 638.601, -2522.27, 341.795 ); + ent.v["angles"] = ( 288.346, 22.7803, -21.7329 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 472.588, -2779.91, 354.697 ); + ent.v["angles"] = ( 284, 269, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 378.694, -2597.49, 342.625 ); + ent.v["angles"] = ( 286.115, 188.513, 168.918 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( 2703.99, 5214.27, -316.065 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( 2885.49, 5538.88, -305.067 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( 2634.75, 5565.34, -294.132 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( 2782.81, 5557.19, -304.19 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( 2547.86, 5550.3, -297.722 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( 2236.17, 5118.87, -244.6 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( 2084.75, 5132.85, -243.383 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( 2688.17, 5392.29, -311.22 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( 2520.88, 4961.95, -307.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( 2510.4, 4600.03, -245.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( 2279.26, 4754.1, -246.004 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( 2075.91, 4788.76, -246.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 92.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( 2809.88, 5357.93, -259.22 ); + ent.v["angles"] = ( 21, 189, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 2673.81, 5036.29, -340.404 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 106.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 2949.31, 5486.56, -332.275 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 260.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 2973.05, 5084.47, -369.322 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 2799.71, 5279.23, -287.968 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 218.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 2600.74, 4771.45, -246.324 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 2730.44, 4663.85, -226.716 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 2273.2, 4541.53, -254.446 ); + ent.v["angles"] = ( 1, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 1898.08, 4731.97, -225.834 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 1893.93, 5011.8, -213.504 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 2482.88, 4398.17, -225.285 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 2572.84, 5009.08, -285.413 ); + ent.v["angles"] = ( 358, 180, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( 2082.53, 4540.48, -260.773 ); + ent.v["angles"] = ( 4.98628, 60.9853, -0.419415 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 2310.53, 5103.81, -232.435 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( 2498.93, 4610.06, -183.748 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( 2088.24, 4638.71, -186.244 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( 2091.71, 4943.25, -185.956 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( -225.877, 4507.16, -282.272 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( -44.1163, 4515.35, -283.457 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( -331.545, 4517, -287.192 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( -458.555, 4522.05, -282.519 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( -488.026, 3753.75, -278.824 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( -297.115, 3751.99, -273.808 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( -236.313, 3937.23, -249.751 ); + ent.v["angles"] = ( 20, 96, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( -420.134, 4254.74, -252.309 ); + ent.v["angles"] = ( 14.7821, 279.345, 2.49013 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( -248.143, 4066.55, -239.033 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( 30.1202, 3823.51, -250.795 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( -115.75, 4411.9, -259.453 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_sparks" ); + ent.v["origin"] = ( -267.517, 4407.53, -242.127 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( 1648.8, 4438.5, -201.243 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 1884.67, 3880.74, -263.908 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( -23.9182, 3801.96, -310.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( -359.256, 3947.16, -311.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 95.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( -209.556, 4363.93, -295.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 347.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( -739.46, 2984.29, -202.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 7.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( -906.312, 2671.99, -210.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( -500.135, 2579.71, -203.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 86.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( -487.117, 2688.07, -50.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 86.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( -668.324, 2922.5, -55.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 7.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( -911.921, 2668.62, -55.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 86.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( -824.429, 2413.35, -53.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 38.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( -744.125, 3138.41, -62.2236 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( -892.647, 3143.82, -60.446 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( -464.178, 3027.59, -64.9351 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( -607.875, 3022.34, -62.8019 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( -373.261, 2688.13, -65.7059 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( -366.715, 2898.08, -63.6646 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -867.931, 2571.14, -244.699 ); + ent.v["angles"] = ( 345.951, 98.3236, 5.1274 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -908.891, 3102.88, -59.4165 ); + ent.v["angles"] = ( 14.965, 315.952, -1.3608 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_lg" ); + ent.v["origin"] = ( -752.271, 2667, -3.7368 ); + ent.v["angles"] = ( 90, 348.57, -11.4301 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( -864.203, 3042.82, -148.299 ); + ent.v["angles"] = ( 17, 29, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( -933.163, 2335.36, -182.641 ); + ent.v["angles"] = ( 359, 5, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( -701.552, 2358.15, -249.06 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 174.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( -254.399, 2659.47, -163.352 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 189.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( -953.347, 2535.07, -76.8882 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 5.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( -855.73, 2267.31, -23.1974 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 141.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( -728.289, 2912.31, -146.921 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( -883.269, 2471.4, -146.34 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( -515.883, 2474.13, -145.385 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( -455.035, 2655.2, -145.546 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( -889.403, 2654.85, -3.52275 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( -723.984, 2937.93, -2.73427 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( -868.283, 2487.89, -1.82285 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( -890.798, 2893.5, -10.0809 ); + ent.v["angles"] = ( 23.9186, 90.5422, -1.86874 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 870.208, -2594.04, 44.6886 ); + ent.v["angles"] = ( 270, 0, -143 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 676.735, -3108.88, 251 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 1119.58, -3121.99, 254 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 1019.99, -3579.06, 304.999 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( 936.016, -2283.55, 266.033 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 66.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( 1076.87, -2570.95, 125.575 ); + ent.v["angles"] = ( 354.002, 237.989, 0.175246 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( 777.844, -2400.58, 57.6874 ); + ent.v["angles"] = ( 350, 164, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( 290.811, -2980.77, 79.794 ); + ent.v["angles"] = ( 348.185, 162.781, 0.113837 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_chamber_glow_yellow" ); + ent.v["origin"] = ( 11257.1, -8661.46, -409.236 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 152.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_chamber_glow_red" ); + ent.v["origin"] = ( 9457.3, -8557.93, -399.199 ); + ent.v["angles"] = ( 271, 260.001, 89.9988 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_chamber_glow_purple" ); + ent.v["origin"] = ( 9628.91, -7008.51, -347.199 ); + ent.v["angles"] = ( 270, 32.3849, -132.385 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_chamber_glow_blue" ); + ent.v["origin"] = ( 11232.6, -7046.67, -347.204 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 242.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_chamber_glow" ); + ent.v["origin"] = ( 10342.7, -7907, -465.205 ); + ent.v["angles"] = ( 270, 11.536, -11.5361 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); + ent.v["origin"] = ( 10045.3, -7655.25, -370 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 83.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); + ent.v["origin"] = ( 9939.63, -8328.28, -382.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); + ent.v["origin"] = ( 10710.7, -8497.33, -371.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 127.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); + ent.v["origin"] = ( 10657.3, -7581.2, -391 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( 2618.88, 5226.64, -366.908 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 303.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( 148.477, -229.972, 332.336 ); + ent.v["angles"] = ( 343, 217, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( 81.0742, -290.633, 332.269 ); + ent.v["angles"] = ( 345, 41, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -85.5674, 258.429, 332.456 ); + ent.v["angles"] = ( 341, 234, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( 293.829, -116.064, 393.685 ); + ent.v["angles"] = ( 344, 118.728, -0.20071 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 235.295, 207.457, 480.164 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -336.632, -21.5365, 52.0506 ); + ent.v["angles"] = ( 337, 55, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -42.0723, 83.5241, -196.473 ); + ent.v["angles"] = ( 346.056, 95.9726, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 158.776, 225.973, 186.913 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 208.091, -207.317, 146.846 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( -300.493, 95.2871, -318.576 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 360.626, 208.227, -340.934 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( -24.682, -323.078, -241.03 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( -266.653, -388.68, -381.606 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 303.529, -349.916, -466.108 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( -59.9885, -460.848, -488.396 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( -251.721, -47.1445, -744.559 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 141.999, -113.932, -584.605 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( -206.125, 177.255, -486.853 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 176.873, 174.28, -480.175 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( -214.958, -292.397, 47.2714 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -164.141, 144.725, 40 ); + ent.v["angles"] = ( 270, 359.851, 0.149435 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 0, 425.465, -256 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -23.5406, 121.805, -752 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 3.18417, -87.4657, -752 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( -155.871, 159.395, 103.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( 191.129, 323.609, -170.269 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( -72.5692, -358.98, -543 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 349.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( 1.01975, -83.7614, -691 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 95.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( 1602.48, 4274.19, -200.575 ); + ent.v["angles"] = ( 16.1712, 210.896, 1.9318 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( 1582.16, 3870.77, -216.131 ); + ent.v["angles"] = ( 27, 143, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( 952.958, 3723.55, -245.65 ); + ent.v["angles"] = ( 14.1001, 107.45, 10.2631 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( 1207.01, 3990.99, -222.561 ); + ent.v["angles"] = ( 43, 275, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( 622.099, 3607.75, -201.135 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 30.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( 123.534, 3379.65, -184.955 ); + ent.v["angles"] = ( 35.9597, 55.8346, -18.8444 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( 284.705, 3470.19, -187.941 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( -617.429, 3524.84, -194.706 ); + ent.v["angles"] = ( 47.8791, 261.182, -3.02978 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( -1407.97, 3583.77, -184.816 ); + ent.v["angles"] = ( 25.8576, 71.2699, 7.33332 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( 2157, 4367.14, -264.372 ); + ent.v["angles"] = ( 16, 294, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( 2215.63, 4015.23, -229.596 ); + ent.v["angles"] = ( 35.5426, 152.453, -11.0361 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( 2020.71, 3510.25, -194.629 ); + ent.v["angles"] = ( 32.1279, 46.8079, -8.2971 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( 2012.03, 3589.01, -200.556 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( 1646.83, 3450.24, -185.618 ); + ent.v["angles"] = ( 32.055, 358.851, -1.37262 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( 1875.15, 3683.47, -184.219 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 957.693, -2407.48, 302.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 281.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 974.777, -2400.66, 323.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 281.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( 2040.78, 2819.25, -165.725 ); + ent.v["angles"] = ( 26.2483, 97.8143, -11.184 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( 1157.1, 2714.94, -136.112 ); + ent.v["angles"] = ( 14.6648, 134.59, -3.18866 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( 594.332, 2080.93, -30.374 ); + ent.v["angles"] = ( 26.7182, 10.0306, 3.59838 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( 362.67, 2082.48, -27.9839 ); + ent.v["angles"] = ( 23.8053, 74.1944, -5.97859 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( -459.457, 2873.44, -144.026 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( -852.351, 2309.82, -148.638 ); + ent.v["angles"] = ( 57.411, 79.5042, 76.3496 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( -834.641, 2736.93, -151.951 ); + ent.v["angles"] = ( 39.2228, 150.082, -19.2557 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( -406.088, 2606.67, -148.478 ); + ent.v["angles"] = ( 39.3881, 160.466, -16.4229 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( -718.652, 2598.86, -114.082 ); + ent.v["angles"] = ( 26, 66, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( -804.725, 2692.08, -128.814 ); + ent.v["angles"] = ( 326.162, 41.3746, -22.5945 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( -503.313, 2939.71, -3.82324 ); + ent.v["angles"] = ( 63.8394, 276.125, -83.1825 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( -816.107, 2485.12, -4.38391 ); + ent.v["angles"] = ( 33.054, 149.72, 162.335 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( -699.652, 3027.46, -60.3237 ); + ent.v["angles"] = ( 334.005, 204.497, -10.7883 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( 2695.68, 5417.73, -246.715 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 264.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( 2560, 5354.25, -248.917 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips" ); + ent.v["origin"] = ( 2183.59, 4713, -177.781 ); + ent.v["angles"] = ( 0.347275, 95.9946, -1.96994 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_church_custom" ); + ent.v["origin"] = ( 681.349, -2595.57, 608.737 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 195.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); + ent.v["origin"] = ( 2795.17, 4183.73, -405.009 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 64.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); + ent.v["origin"] = ( 2880.22, 4359.05, -442.161 ); + ent.v["angles"] = ( 360, 64, 17 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); + ent.v["origin"] = ( 3044.18, 4419.97, -441.19 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); + ent.v["origin"] = ( 2515.69, 4130.01, -285.311 ); + ent.v["angles"] = ( 19.6657, 62.0059, 28.3106 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 701.636, -2344.06, 303.81 ); + ent.v["angles"] = ( 350, 194, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 756.836, -2369.53, 287.125 ); + ent.v["angles"] = ( 350, 194, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 489.365, -2714.28, 363.36 ); + ent.v["angles"] = ( 273.512, 214.2, 143.332 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 498.27, -2607.26, 370.013 ); + ent.v["angles"] = ( 277.132, 194.595, 162.864 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 505.993, -2623.91, 370.894 ); + ent.v["angles"] = ( 278.408, 199.119, 158.372 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 480.375, -2642.37, 369.803 ); + ent.v["angles"] = ( 278.408, 199.119, 158.372 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 547.523, -2721.24, 354.662 ); + ent.v["angles"] = ( 273.306, 288.565, 69.1685 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 387.845, -2696.87, 342.987 ); + ent.v["angles"] = ( 281.25, 193.445, 163.965 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 1052.39, -2617.35, 444.731 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 281.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 317.388, -2411.52, 62.3941 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 250.292, -2461.82, 59.9847 ); + ent.v["angles"] = ( 359.983, 183, -1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 445.707, -2803.21, 159.462 ); + ent.v["angles"] = ( 359.212, 132, -0.61612 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 914.732, -2315.37, 301.764 ); + ent.v["angles"] = ( 315, 159, -12 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 879.013, -2300.16, 333.393 ); + ent.v["angles"] = ( 354, 160.005, -0.105097 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); + ent.v["origin"] = ( 885.397, -2585.22, 674.972 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 103.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 2705.66, 4463.83, -270.923 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); + ent.v["origin"] = ( 2719.29, 802.905, 33.7266 ); + ent.v["angles"] = ( 13.6698, 72.8641, 31.4379 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); + ent.v["origin"] = ( 3040.21, 837.337, -79.9756 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); + ent.v["origin"] = ( 3349.84, 1181.77, -177.67 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 2389.08, 808.252, -19.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 3344.57, 1214.05, -348 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( 2882.28, 4378.22, -510.695 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 30.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( 2996.82, 828.878, -162.675 ); + ent.v["angles"] = ( 6, 358, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( 3360.2, 1095.44, -281.759 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( 2609.27, 4136.97, -394.49 ); + ent.v["angles"] = ( 29, 19, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( -3068.94, -294.956, -105.446 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 219.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -3177.68, -366.599, -178.459 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); + ent.v["origin"] = ( -3174.32, -338.977, -34.3424 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 187.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( -3199.05, 69.1339, -23.0807 ); + ent.v["angles"] = ( 9, 284, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( -2442.69, 86.6662, 146.125 ); + ent.v["angles"] = ( 17, 183, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); + ent.v["origin"] = ( -3102.39, -165.34, -9.34888 ); + ent.v["angles"] = ( 0, 194, -8 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); + ent.v["origin"] = ( -3113.18, 77.107, 62.4578 ); + ent.v["angles"] = ( 7.68019, 228.622, 9.24817 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); + ent.v["origin"] = ( -2733.38, 121.802, 187.903 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 1409.82, -1769.21, -118.84 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( 1400.44, -1968.41, -31 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); + ent.v["origin"] = ( 1426.17, -1785.95, 24.9835 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 85.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); + ent.v["origin"] = ( 1427.72, -2088.64, 86.6268 ); + ent.v["angles"] = ( 0, 30, -10 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); + ent.v["origin"] = ( 1431.06, -2395.14, 140.669 ); + ent.v["angles"] = ( 2.27364, 41.7857, -10.7653 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); + ent.v["origin"] = ( 1336.67, -2647.78, 231.553 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 77.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( 1447.22, -2473.26, 76.026 ); + ent.v["angles"] = ( 16, 88, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 1480.21, -2233.9, -51.5 ); + ent.v["angles"] = ( 270.934, 269.834, 89.8081 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 1228.07, -2613.91, 120.632 ); + ent.v["angles"] = ( 0.484785, 335.002, 0.875333 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 1479.28, -2617.36, 102.338 ); + ent.v["angles"] = ( 0.211954, 131.989, -0.616066 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 1539.2, -2232.74, -37.2481 ); + ent.v["angles"] = ( 359.281, 138, -0.695113 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 1574.45, -1678.21, -70.6174 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 197.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 1248.96, -1762.17, -73.5857 ); + ent.v["angles"] = ( 357.947, 6.96405, 1 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); + ent.v["origin"] = ( 10314.1, -7150.76, -392 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); + ent.v["origin"] = ( 10494.8, -8444.68, -373.006 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 189.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); + ent.v["origin"] = ( 10925.2, -7680.32, -371.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 66.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); + ent.v["origin"] = ( 10864.3, -7851.97, -386.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 231.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createexploder( "fx_tomb_probe_elec_on" ); + ent.v["origin"] = ( 0.661174, 231.756, 480.401 ); + ent.v["angles"] = ( 6, 269, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 5003; + ent = maps\mp\_utility::createexploder( "fx_tomb_probe_elec_on" ); + ent.v["origin"] = ( 211.622, 153.136, 379.376 ); + ent.v["angles"] = ( 15.9883, 223.818, -2.05218 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 5001; + ent = maps\mp\_utility::createexploder( "fx_tomb_probe_elec_on" ); + ent.v["origin"] = ( 239.078, -0.145034, 480.568 ); + ent.v["angles"] = ( 7, 180, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 5004; + ent = maps\mp\_utility::createexploder( "fx_tomb_probe_elec_on" ); + ent.v["origin"] = ( 0.328866, -226.613, 480.627 ); + ent.v["angles"] = ( 5, 89.9963, -0.104926 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 5006; + ent = maps\mp\_utility::createexploder( "fx_tomb_probe_elec_on" ); + ent.v["origin"] = ( -231.022, 2.10779, 480.198 ); + ent.v["angles"] = ( 6.39872, 358.994, -0.122636 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 5005; + ent = maps\mp\_utility::createexploder( "fx_tomb_probe_elec_on" ); + ent.v["origin"] = ( -176.719, 181.685, 379.28 ); + ent.v["angles"] = ( 18.4675, 313.665, -1.77444 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 5002; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); + ent.v["origin"] = ( 10454.6, -7281.5, 173.545 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); + ent.v["origin"] = ( 10485.7, -7317.26, -380 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 354.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); + ent.v["origin"] = ( 9617.92, -8129.65, -387.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); + ent.v["origin"] = ( 10972.6, -7722.63, -390.5 ); + ent.v["angles"] = ( 360, 291, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); + ent.v["origin"] = ( 10746.6, -7466.48, 147.506 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); + ent.v["origin"] = ( 10683.1, -8114, 144.593 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 255.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); + ent.v["origin"] = ( 10323.3, -8613.96, 338.993 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); + ent.v["origin"] = ( 9795.59, -8158.02, 144.314 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 136.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); + ent.v["origin"] = ( 9609.18, -7574.33, 349.643 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 10.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); + ent.v["origin"] = ( 10219.4, -7332.73, 258.772 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 15.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); + ent.v["origin"] = ( 10007, -7701.44, 96.1417 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 112.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); + ent.v["origin"] = ( 10436.4, -7609.52, 86.5436 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 327.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); + ent.v["origin"] = ( 10596.6, -8459.21, 254.372 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 157.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); + ent.v["origin"] = ( 10252.5, -8171.73, 78.6495 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); + ent.v["origin"] = ( 11031.7, -8139.35, -11.6038 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 96.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); + ent.v["origin"] = ( 11132.6, -7470.59, 192.216 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 215.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); + ent.v["origin"] = ( 9585.82, -7911.54, 149.268 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 282.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); + ent.v["origin"] = ( 9971.95, -7216.54, -3.51153 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 327.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 2033.26, 2295.77, -74.7656 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 16.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 2475.21, 5226.47, -340.284 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 304.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( 959.389, 4120.41, -264.619 ); + ent.v["angles"] = ( 7.93895, 75.0805, 0.80711 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -148.475, 3764.52, -333.659 ); + ent.v["angles"] = ( 5.83727, 50.927, -1.283 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -450.963, 4021.8, -309.163 ); + ent.v["angles"] = ( 353.11, 258.086, -1.06419 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -457.248, 4475.68, -333.242 ); + ent.v["angles"] = ( 354.576, 217.872, 2.34151 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -217.985, 4255.18, -333.163 ); + ent.v["angles"] = ( 354.575, 22.4658, -3.32847 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( -475.534, 2980.81, -215.173 ); + ent.v["angles"] = ( 1, 199, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( -492.738, 2419.32, -47.6733 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 7.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 1621.74, 2966.11, -199.898 ); + ent.v["angles"] = ( 359, 269, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 1565.87, 2931.96, -213.247 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 274.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 1747.56, 3125.74, -280.035 ); + ent.v["angles"] = ( 285.001, 90.6045, -91.571 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( -38.0725, -342.728, -558 ); + ent.v["angles"] = ( 15, 83, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( 2948.94, 5359.98, -233.125 ); + ent.v["angles"] = ( 90, 0, -138 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( 1133.51, 4272.66, -196.973 ); + ent.v["angles"] = ( 90, 180, -49 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( 1028.23, 4220.94, -210.669 ); + ent.v["angles"] = ( 90, 0, 34 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( 1140.35, 4188.18, -206.86 ); + ent.v["angles"] = ( 90, 0, 34 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); + ent.v["origin"] = ( 1072.54, 4165.21, -216.38 ); + ent.v["angles"] = ( 90, 0, -57 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 906.456, 119.554, 249.939 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( -257.863, 137.638, 291.484 ); + ent.v["angles"] = ( 342.959, 323.713, 9.31921 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( -293.576, -102.746, 285.825 ); + ent.v["angles"] = ( 344.971, 14.8678, -7.11365 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( 116.541, 290.542, 285.574 ); + ent.v["angles"] = ( 341, 224, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( 296.156, 108.418, 282.497 ); + ent.v["angles"] = ( 342.43, 200.863, 0.349833 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( 129.157, -279.986, 285.259 ); + ent.v["angles"] = ( 343.132, 114.334, -5.37842 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( 280.798, -357.617, -39.0851 ); + ent.v["angles"] = ( 0, 224, -10 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( -82.3579, -387.457, -279.283 ); + ent.v["angles"] = ( 8.56001, 345.389, 5.18908 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( 313.501, -273.195, -381.992 ); + ent.v["angles"] = ( 356.924, 206.256, -9.51976 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( 28.399, -421.37, -510.974 ); + ent.v["angles"] = ( 352.704, 177.438, -3.85717 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( -170.228, -14.9198, -527.653 ); + ent.v["angles"] = ( 355.196, 94.9094, 6.71258 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( 176.501, -59.5695, -630.95 ); + ent.v["angles"] = ( 355.196, 94.9094, 3.71258 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( 166.315, 147.49, -508.358 ); + ent.v["angles"] = ( 355.818, 179.226, -4.40185 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( -172.36, 147.426, -516.285 ); + ent.v["angles"] = ( 3.86511, 3.22329, 4.68246 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( -44.3194, 157.479, -511.06 ); + ent.v["angles"] = ( 4.18201, 359.226, 4.40187 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( -374.971, -192.826, -330.311 ); + ent.v["angles"] = ( 17.039, 306.915, -0.619566 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( -418.439, 95.0414, -246.474 ); + ent.v["angles"] = ( 7.53049, 260.701, 0.349842 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( -429.244, 202.176, -47.6421 ); + ent.v["angles"] = ( 347, 357, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( 55.9099, 395.92, -22.1698 ); + ent.v["angles"] = ( 359.958, 175.717, 14.0284 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( 441.239, 51.6459, -33.0588 ); + ent.v["angles"] = ( 341.449, 171.586, 7.59726 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( 385.354, -85.733, -265.99 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 76.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( 168.035, -362.538, -261.271 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 201.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( 103.482, -152.476, -229.36 ); + ent.v["angles"] = ( 3, 55, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( 165.365, -9.84316, -226.36 ); + ent.v["angles"] = ( 2.08381, 101.039, 2.15929 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( -73.3678, -141.08, -229.36 ); + ent.v["angles"] = ( 0.62358, 336.984, -2.93498 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( -170.797, 43.6615, -226.36 ); + ent.v["angles"] = ( 357.428, 266.035, -1.54641 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( 412.138, 148.755, -275.002 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 104.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( -337.351, -238.606, -26.4608 ); + ent.v["angles"] = ( 353, 76, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( 201.552, -25.9036, 200.948 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( -416.633, -61.2323, -207.855 ); + ent.v["angles"] = ( 15, 310, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( 250.325, -110.651, -329.761 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( 384.129, -64.2074, -454.204 ); + ent.v["angles"] = ( 21, 251, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( -411.481, 36.0763, -387.427 ); + ent.v["angles"] = ( 21.0357, 283.252, 6.44551 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( -94.8236, 141.464, -470.899 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( -159.296, -86.2895, -480.26 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( 157.621, -234.53, 187.209 ); + ent.v["angles"] = ( 16, 176, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( 275.338, 160.242, 192.587 ); + ent.v["angles"] = ( 15, 160, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); + ent.v["origin"] = ( 303.366, 117.409, 196.842 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createexploder( "fx_tomb_chamber_walls_impact" ); + ent.v["origin"] = ( -83.6255, -83.0232, 40.125 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 222; + ent = maps\mp\_utility::createexploder( "fx_tomb_chamber_walls_impact" ); + ent.v["origin"] = ( 128.404, -69.5363, 40.125 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 222; + ent = maps\mp\_utility::createexploder( "fx_tomb_chamber_walls_impact" ); + ent.v["origin"] = ( 92.8486, 116.891, 40.125 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 222; + ent = maps\mp\_utility::createexploder( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( 179.975, -131.823, 6.02911 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 222; + ent = maps\mp\_utility::createexploder( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( 220.96, -33.1347, 4.43854 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 89.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 222; + ent = maps\mp\_utility::createexploder( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( 207.889, 83.1946, 2.74467 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 129.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 222; + ent = maps\mp\_utility::createexploder( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( 95.8509, 201.332, 1.74655 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 168.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 222; + ent = maps\mp\_utility::createexploder( "fx_tomb_dust_fall" ); + ent.v["origin"] = ( -55.8782, 215.914, 1.10722 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 226.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 222; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); + ent.v["origin"] = ( 1792.05, 1068.25, 199.75 ); + ent.v["angles"] = ( 288.027, 93.074, -93.2325 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); + ent.v["origin"] = ( 1758.98, 1067.25, 188.072 ); + ent.v["angles"] = ( 288.027, 93.074, -93.2325 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 2716.82, 671.266, 182.486 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 99.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 1954.99, 928.275, 124.325 ); + ent.v["angles"] = ( 270, 359.851, 0.149435 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 2737.12, 770.118, 199.224 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 99.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 2047.36, 1110.18, 183.487 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 1806.28, 1011.32, 178.827 ); + ent.v["angles"] = ( 307, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 1828.6, 927.214, 125.786 ); + ent.v["angles"] = ( 270, 359.851, 0.149435 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 2683.07, 717.006, 186.013 ); + ent.v["angles"] = ( 295.128, 172.773, -174.24 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 2969.28, 585.145, 446.513 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 82.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 2981.97, 461.458, 210.013 ); + ent.v["angles"] = ( 0, 186, 2 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 2703.85, 477.618, 165.687 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 2683.27, 424.04, 153.219 ); + ent.v["angles"] = ( 270, 359.851, 0.149435 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 2351.76, 914.346, 122.328 ); + ent.v["angles"] = ( 270, 359.851, 0.149435 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( 2354.54, 861.476, 121.712 ); + ent.v["angles"] = ( 270, 359.851, 0.149435 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm" ); + ent.v["origin"] = ( 2676.3, 907.538, 207.752 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 99.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); + ent.v["origin"] = ( 2658.73, 984.453, 205.764 ); + ent.v["angles"] = ( 286.022, 349.64, -1.88535 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); + ent.v["origin"] = ( 2972.64, 616.95, 452.771 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 86.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); + ent.v["origin"] = ( 3018.72, 592.45, 415.265 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 82.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); + ent.v["origin"] = ( 3070.29, 574.625, 384.331 ); + ent.v["angles"] = ( 4, 82, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); + ent.v["origin"] = ( -2784.14, 23.7212, 437.68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( -2529.32, 487.749, 228.712 ); + ent.v["angles"] = ( 286, 90, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( -2561.07, 465.52, 239.28 ); + ent.v["angles"] = ( 286, 90, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( -2817.6, 374.432, 235.732 ); + ent.v["angles"] = ( 290.318, 290.544, 69.6291 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( -2827.96, -27.9267, 241.05 ); + ent.v["angles"] = ( 286, 90, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( -2837.76, 4.07393, 237.865 ); + ent.v["angles"] = ( 286, 90, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); + ent.v["origin"] = ( -2740.58, -79.9137, 362.455 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); + ent.v["origin"] = ( -2905.31, -220.352, 205.987 ); + ent.v["angles"] = ( 312.347, 152.927, -6.62182 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); + ent.v["origin"] = ( -2409.46, 421.066, 367.153 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( -2402.83, 335.627, 234.166 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( -2385.87, 282.789, 234.164 ); + ent.v["angles"] = ( 270, 0.149457, -0.149446 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( -2380.3, -28.0319, 237.588 ); + ent.v["angles"] = ( 278, 89.9989, -89.9988 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); + ent.v["origin"] = ( -2380.05, 7.49297, 234.29 ); + ent.v["angles"] = ( 278, 89.9989, -89.9988 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); + ent.v["origin"] = ( -2840.54, 382.458, 229.167 ); + ent.v["angles"] = ( 344, 142, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); + ent.v["origin"] = ( -2759.26, 410.759, 378.307 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( -127.464, -4641.96, 559.502 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( -249.624, -4644.14, 562.46 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( -514.078, -4126.47, 494.044 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 300.204, -4024.28, 377.834 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( -174.343, -4624.4, 559.465 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 805.26, -5094.32, 465.76 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 846.434, -5082.77, 557.171 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 330.265, -5662.64, 569.648 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 1267.92, -4487.96, 541.213 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 1473.05, -4488.89, 531.005 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 1594.58, -3831.53, 395.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 279.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 2439.75, -4891.33, 688.666 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 213.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 2644.44, -4859.16, 713.522 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 213.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 1991.36, -3376.02, 519.384 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 279.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 384.953, -3378.87, 349.757 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 153.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( -1999.6, -3580.82, 555.986 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_robot_ambient" ); + ent.v["origin"] = ( -5704.13, -6535.94, 153.436 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_robot_ambient" ); + ent.v["origin"] = ( -6224.03, -6535.92, 153.434 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_robot_ambient" ); + ent.v["origin"] = ( -6760.11, -6536.09, 153.429 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_sparks" ); + ent.v["origin"] = ( -5520.45, -6640.33, 273.628 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_sparks" ); + ent.v["origin"] = ( -6419.11, -6577.88, 346.793 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( 2269.48, 1126.3, 167.505 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( 2133.06, 5069.61, -293.064 ); + ent.v["angles"] = ( 351.084, 0.802813, -4.61889 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( 1919.41, 4905.8, -278.831 ); + ent.v["angles"] = ( 353.054, 82.6612, 0.145041 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( 1955.21, 3903.11, -339.93 ); + ent.v["angles"] = ( 350.38, 129.37, 2.4631 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( 3098.24, -237.82, 157.277 ); + ent.v["angles"] = ( 270, 356.309, 90.6913 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -2249.13, -394.012, 174.999 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_ground_fog" ); + ent.v["origin"] = ( -1135.72, -395.117, 80 ); + ent.v["angles"] = ( 270, 357.614, 99.386 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_smoke_pillar_xlg" ); + ent.v["origin"] = ( 117.876, -6647.86, 670.966 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 124.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_smoke_pillar_xlg" ); + ent.v["origin"] = ( 1859.17, 12435.9, -358.777 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 124.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); + ent.v["origin"] = ( 10311.3, -7517.3, -382 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 274.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); + ent.v["origin"] = ( 9948.29, -7878.86, -403 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 355.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); + ent.v["origin"] = ( 10358.5, -8299.95, -383 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 83.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_crafting_chamber_glow" ); + ent.v["origin"] = ( 0.496392, -0.110062, -227.408 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createexploder( "fx_tomb_vortex_glow" ); + ent.v["origin"] = ( -2.90164, 1.17459, 334.67 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 333; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -5844.45, -6591.27, 388.802 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( -5497.38, -6537.85, 178.5 ); + ent.v["angles"] = ( 345, 212, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -5759.94, -6675.6, 390.349 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -5844.61, -6479.78, 390.422 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -5759.06, -6396.1, 387.73 ); + ent.v["angles"] = ( 78, 298, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -5648.2, -6395.92, 389.661 ); + ent.v["angles"] = ( 80, 262, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -5563.55, -6479.73, 390.421 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -5647.62, -6676.44, 389.768 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -5563.52, -6591.28, 389.724 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_sparks" ); + ent.v["origin"] = ( -5771.88, -6712.72, 264.609 ); + ent.v["angles"] = ( 21, 37, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( -5870.37, -6396.77, 255.442 ); + ent.v["angles"] = ( 9.74116, 318.194, 2.27144 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6083.79, -6590.49, 389.826 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6167.89, -6675.65, 389.871 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6280.22, -6674.81, 390.451 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6364.72, -6590.48, 388.905 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6364.88, -6478.99, 390.524 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6279.33, -6395.31, 387.832 ); + ent.v["angles"] = ( 78, 298, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6168.48, -6395.13, 389.763 ); + ent.v["angles"] = ( 80, 262, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6083.82, -6478.94, 390.523 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6619.8, -6591.35, 389.713 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6703.9, -6676.51, 389.758 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6816.23, -6675.67, 390.339 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6900.73, -6591.34, 388.792 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6900.89, -6479.85, 390.411 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6815.34, -6396.17, 387.719 ); + ent.v["angles"] = ( 78, 298, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6704.49, -6395.99, 389.65 ); + ent.v["angles"] = ( 80, 262, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6619.83, -6479.79, 390.411 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6863.17, -6671.96, 272.833 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6794.64, -6700.83, 272.911 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6724.74, -6701.16, 272.687 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6655.81, -6673.05, 272.781 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6188.89, -6700.92, 272.197 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6258.8, -6700.59, 272.421 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6327.33, -6671.71, 272.343 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -6119.97, -6672.8, 272.291 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -5669.38, -6700.92, 272.39 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -5739.29, -6700.6, 272.615 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -5807.82, -6671.72, 272.536 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -5600.46, -6672.81, 272.484 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( -6362.55, -6411.19, 189.427 ); + ent.v["angles"] = ( 311, 310, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( -6058.33, -6602.14, 283.19 ); + ent.v["angles"] = ( 40, 155, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_sparks" ); + ent.v["origin"] = ( -6032.19, -6484.8, 271.361 ); + ent.v["angles"] = ( 28, 195, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_sparks" ); + ent.v["origin"] = ( -6706.01, -6675.33, 387.642 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_steam_lg" ); + ent.v["origin"] = ( -6650.1, -6551.61, 116.796 ); + ent.v["angles"] = ( 293.234, 29.4734, -25.0788 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_church_fire_vista" ); + ent.v["origin"] = ( 248.72, 6464.08, -123.851 ); + ent.v["angles"] = ( 332, 180, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_church_fire_vista" ); + ent.v["origin"] = ( -396.657, 6194.97, -125.263 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_smoke_pillar_xlg" ); + ent.v["origin"] = ( -1846.57, 7753.14, -589.768 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 124.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( -387.006, 5853.76, -453.25 ); + ent.v["angles"] = ( 345.461, 226.585, 12.3341 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_sparks" ); + ent.v["origin"] = ( -251.569, 6054.81, -294.964 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 315.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_sparks" ); + ent.v["origin"] = ( -257.678, 6031.75, -318.769 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 300.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_sparks" ); + ent.v["origin"] = ( -1206.52, 5282.3, -50.9786 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 259.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_sparks" ); + ent.v["origin"] = ( -1246.17, 5318.86, 133.77 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 295.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_church_fire_vista" ); + ent.v["origin"] = ( -1018.92, 5610.69, -3.49614 ); + ent.v["angles"] = ( 330, 180, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_lg" ); + ent.v["origin"] = ( -292.259, 5902.1, -491.126 ); + ent.v["angles"] = ( 345.461, 226.585, 12.3341 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 2473.31, 4089.7, -280.51 ); + ent.v["angles"] = ( 19, 41, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 2855.58, 4153.37, -536.792 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 120.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 3180.85, 4192.81, -556.868 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( 3062.73, 4306.96, -585.469 ); + ent.v["angles"] = ( 352, 65, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -2546.49, -17.4801, 102.603 ); + ent.v["angles"] = ( 355.044, 58.9857, 0.836672 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( -2782.02, 151.467, 55.9396 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( -3293.42, 38.6278, -61.6823 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 335.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( -3333.75, -159.603, -178.559 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 319.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( -3018.82, -296.116, -134.467 ); + ent.v["angles"] = ( 1.97051, 240.028, -0.746979 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 3487.99, 1251.07, -292.593 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_md" ); + ent.v["origin"] = ( 3421, 1300.95, -328.283 ); + ent.v["angles"] = ( 358.779, 192.212, -4.19317 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 3392.22, 927.885, -292.369 ); + ent.v["angles"] = ( 0, 184, 13 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 3058.66, 740.127, -214.788 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 75.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 2346.32, 714.132, 31.2441 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 75.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_light_expensive" ); + ent.v["origin"] = ( 241.377, -2985.24, 353.839 ); + ent.v["angles"] = ( 358.252, 73.0043, -1.46938 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); + ent.v["origin"] = ( -1258.53, 3764.31, -178.677 ); + ent.v["angles"] = ( 279, 179, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; +} diff --git a/ZM/Maps/Origins/maps/mp/gametypes_zm/zstandard.gsc b/ZM/Maps/Origins/maps/mp/gametypes_zm/zstandard.gsc new file mode 100644 index 0000000..eb15237 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/gametypes_zm/zstandard.gsc @@ -0,0 +1,46 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_ai_dogs; +#include maps\mp\zombies\_zm; + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::main(); + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level._game_module_custom_spawn_init_func = maps\mp\gametypes_zm\_zm_gametype::custom_spawn_init_func; + level._game_module_stat_update_func = maps\mp\zombies\_zm_stats::survival_classic_custom_stat_update; + maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zstandard" ); +} + +onprecachegametype() +{ + level.playersuicideallowed = 1; + level.canplayersuicide = ::canplayersuicide; + level.suicide_weapon = "death_self_zm"; + precacheitem( "death_self_zm" ); + maps\mp\zombies\_zm_ai_dogs::init(); + maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zstandard" ); +} + +onstartgametype() +{ + maps\mp\gametypes_zm\_zm_gametype::setup_classic_gametype(); + maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zstandard", ::zstandard_main ); +} + +zstandard_main() +{ + level.dog_rounds_allowed = getgametypesetting( "allowdogs" ); + + if ( level.dog_rounds_allowed ) + maps\mp\zombies\_zm_ai_dogs::enable_dog_rounds(); + + level thread maps\mp\zombies\_zm::round_start(); + level thread maps\mp\gametypes_zm\_zm_gametype::kill_all_zombies(); +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb.gsc new file mode 100644 index 0000000..8fe426e --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb.gsc @@ -0,0 +1,2200 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zm_tomb_gamemodes; +#include maps\mp\zm_tomb_fx; +#include maps\mp\zm_tomb_ffotd; +#include maps\mp\zm_tomb_tank; +#include maps\mp\zm_tomb_quest_fire; +#include maps\mp\zm_tomb_capture_zones; +#include maps\mp\zm_tomb_teleporter; +#include maps\mp\zm_tomb_giant_robot; +#include maps\mp\zombies\_zm; +#include maps\mp\animscripts\zm_death; +#include maps\mp\zm_tomb_amb; +#include maps\mp\zombies\_zm_ai_mechz; +#include maps\mp\zombies\_zm_ai_quadrotor; +#include maps\mp\zombies\_load; +#include maps\mp\gametypes_zm\_spawning; +#include maps\mp\zm_tomb_vo; +#include maps\mp\zombies\_zm_perk_divetonuke; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_perk_electric_cherry; +#include maps\mp\zombies\_zm_weap_one_inch_punch; +#include maps\mp\zombies\_zm_weap_staff_fire; +#include maps\mp\zombies\_zm_weap_staff_water; +#include maps\mp\zombies\_zm_weap_staff_lightning; +#include maps\mp\zombies\_zm_weap_staff_air; +#include maps\mp\zm_tomb; +#include maps\mp\zm_tomb_achievement; +#include maps\mp\zm_tomb_distance_tracking; +#include maps\mp\zombies\_zm_magicbox_tomb; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zm_tomb_challenges; +#include maps\mp\zombies\_zm_perk_random; +#include maps\mp\_sticky_grenade; +#include maps\mp\zombies\_zm_weap_beacon; +#include maps\mp\zombies\_zm_weap_claymore; +#include maps\mp\zombies\_zm_weap_riotshield_tomb; +#include maps\mp\zombies\_zm_weap_staff_revive; +#include maps\mp\zombies\_zm_weap_cymbal_monkey; +#include maps\mp\zm_tomb_ambient_scripts; +#include maps\mp\zm_tomb_dig; +#include maps\mp\zm_tomb_main_quest; +#include maps\mp\zm_tomb_ee_main; +#include maps\mp\zm_tomb_ee_side; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zm_tomb_chamber; +#include maps\mp\_visionset_mgr; +#include maps\mp\zombies\_zm_audio; +#include character\c_usa_dempsey_dlc4; +#include character\c_rus_nikolai_dlc4; +#include character\c_ger_richtofen_dlc4; +#include character\c_jap_takeo_dlc4; +#include maps\mp\zombies\_zm_powerup_zombie_blood; +#include maps\mp\zombies\_zm_devgui; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_challenges; +#include maps\mp\zombies\_zm_laststand; + +gamemode_callback_setup() +{ + maps\mp\zm_tomb_gamemodes::init(); +} + +survival_init() +{ + level.force_team_characters = 1; + level.should_use_cia = 0; + + if ( randomint( 100 ) > 50 ) + level.should_use_cia = 1; + + level.precachecustomcharacters = ::precache_team_characters; + level.givecustomcharacters = ::give_team_characters; + flag_wait( "start_zombie_round_logic" ); +} + +zstandard_preinit() +{ + +} + +createfx_callback() +{ + ents = getentarray(); + + for ( i = 0; i < ents.size; i++ ) + { + if ( ents[i].classname != "info_player_start" ) + ents[i] delete(); + } +} + +main() +{ + level._no_equipment_activated_clientfield = 1; + level._no_navcards = 1; + level._wallbuy_override_num_bits = 1; + maps\mp\zm_tomb_fx::main(); + level thread maps\mp\zm_tomb_ffotd::main_start(); + level.default_game_mode = "zclassic"; + level.default_start_location = "tomb"; + setup_rex_starts(); + maps\mp\zm_tomb_tank::init_animtree(); + maps\mp\zm_tomb_quest_fire::init_animtree(); + maps\mp\zm_tomb_capture_zones::init_pap_animtree(); + maps\mp\zm_tomb_teleporter::init_animtree(); + maps\mp\zm_tomb_giant_robot::init_animtree(); + level.fx_exclude_edge_fog = 1; + level.fx_exclude_tesla_head_light = 1; + level.fx_exclude_default_explosion = 1; + level.fx_exclude_footsteps = 1; + level._uses_sticky_grenades = 1; + level.disable_fx_zmb_wall_buy_semtex = 1; + level._uses_taser_knuckles = 0; + level.disable_fx_upgrade_aquired = 1; + level._uses_default_wallbuy_fx = 0; + maps\mp\zombies\_zm::init_fx(); + maps\mp\animscripts\zm_death::precache_gib_fx(); + level.zombiemode = 1; + level._no_water_risers = 1; + level.riser_fx_on_client = 1; + maps\mp\zm_tomb_amb::main(); + maps\mp\zombies\_zm_ai_mechz::precache(); + maps\mp\zombies\_zm_ai_quadrotor::precache(); + level.n_active_ragdolls = 0; + level.ragdoll_limit_check = ::ragdoll_attempt; + level._limited_equipment = []; + level._limited_equipment[level._limited_equipment.size] = "equip_dieseldrone_zm"; + level._limited_equipment[level._limited_equipment.size] = "staff_fire_zm"; + level._limited_equipment[level._limited_equipment.size] = "staff_air_zm"; + level._limited_equipment[level._limited_equipment.size] = "staff_lightning_zm"; + level._limited_equipment[level._limited_equipment.size] = "staff_water_zm"; + level.a_func_vehicle_damage_override = []; + level.callbackvehicledamage = ::tomb_vehicle_damage_override_wrapper; + level.level_specific_stats_init = ::init_tomb_stats; + maps\mp\zombies\_load::main(); + setdvar( "zombiemode_path_minz_bias", 13 ); + setdvar( "tu14_bg_chargeShotExponentialAmmoPerChargeLevel", 1 ); + + if ( getdvar( "createfx" ) == "1" ) + return; + + level_precache(); + maps\mp\gametypes_zm\_spawning::level_use_unified_spawning( 1 ); + level thread setup_tomb_spawn_groups(); + spawner_main_chamber_capture_zombies = getent( "chamber_capture_zombie_spawner", "targetname" ); + spawner_main_chamber_capture_zombies add_spawn_function( ::chamber_capture_zombie_spawn_init ); + level.has_richtofen = 0; + level.givecustomloadout = ::givecustomloadout; + level.precachecustomcharacters = ::precache_personality_characters; + level.givecustomcharacters = ::give_personality_characters; + level.setupcustomcharacterexerts = ::setup_personality_character_exerts; + level._zmbvoxlevelspecific = maps\mp\zm_tomb_vo::init_level_specific_audio; + level.custom_player_track_ammo_count = ::tomb_custom_player_track_ammo_count; + level.custom_player_fake_death = ::zm_player_fake_death; + level.custom_player_fake_death_cleanup = ::zm_player_fake_death_cleanup; + level.initial_round_wait_func = ::initial_round_wait_func; + level.zombie_init_done = ::zombie_init_done; + level._zombies_round_spawn_failsafe = ::tomb_round_spawn_failsafe; + level.random_pandora_box_start = 1; + level.zombiemode_using_pack_a_punch = 1; + level.zombiemode_reusing_pack_a_punch = 1; + level.zombiemode_using_juggernaut_perk = 1; + level.zombiemode_using_revive_perk = 1; + level.zombiemode_using_sleightofhand_perk = 1; + level.zombiemode_using_additionalprimaryweapon_perk = 1; + level.zombiemode_using_marathon_perk = 1; + level.zombiemode_using_deadshot_perk = 1; + level.zombiemode_using_doubletap_perk = 1; + level.zombiemode_using_random_perk = 1; + level.zombiemode_using_divetonuke_perk = 1; + maps\mp\zombies\_zm_perk_divetonuke::enable_divetonuke_perk_for_level(); + level.custom_electric_cherry_perk_threads = maps\mp\zombies\_zm_perks::register_perk_threads( "specialty_grenadepulldeath", ::tomb_custom_electric_cherry_reload_attack, maps\mp\zombies\_zm_perk_electric_cherry::electric_cherry_perk_lost ); + level.zombiemode_using_electric_cherry_perk = 1; + maps\mp\zombies\_zm_perk_electric_cherry::enable_electric_cherry_perk_for_level(); + level.flopper_network_optimized = 1; + level.perk_random_vo_func_usemachine = maps\mp\zm_tomb_vo::wunderfizz_used_vo; + maps\mp\zombies\_zm_weap_one_inch_punch::one_inch_precache(); + maps\mp\zombies\_zm_weap_staff_fire::precache(); + maps\mp\zombies\_zm_weap_staff_water::precache(); + maps\mp\zombies\_zm_weap_staff_lightning::precache(); + maps\mp\zombies\_zm_weap_staff_air::precache(); + level._custom_turn_packapunch_on = maps\mp\zm_tomb_capture_zones::pack_a_punch_dummy_init; + level.custom_vending_precaching = maps\mp\zm_tomb::custom_vending_precaching; + level.register_offhand_weapons_for_level_defaults_override = ::offhand_weapon_overrride; + level.zombiemode_offhand_weapon_give_override = ::offhand_weapon_give_override; + level._zombie_custom_add_weapons = ::custom_add_weapons; + level._allow_melee_weapon_switching = 1; + include_equipment( "equip_dieseldrone_zm" ); + include_equipment( "tomb_shield_zm" ); + level.custom_ai_type = []; + level.raygun2_included = 1; + include_weapons(); + include_powerups(); + include_perks_in_random_rotation(); + level maps\mp\zm_tomb_achievement::init(); + precacheitem( "death_throe_zm" ); + + if ( level.splitscreen && getdvarint( "splitscreen_playerCount" ) > 2 ) + level.optimise_for_splitscreen = 1; + else + level.optimise_for_splitscreen = 0; + + if ( isdefined( level.optimise_for_splitscreen ) && level.optimise_for_splitscreen ) + level.culldist = 2500; + else + level.culldist = 5500; + + setculldist( level.culldist ); + level thread maps\mp\zm_tomb_distance_tracking::zombie_tracking_init(); + maps\mp\zombies\_zm_magicbox_tomb::init(); + level.special_weapon_magicbox_check = ::tomb_special_weapon_magicbox_check; + maps\mp\zombies\_zm::init(); + level.callbackactordamage = ::tomb_actor_damage_override_wrapper; + level._weaponobjects_on_player_connect_override = ::tomb_weaponobjects_on_player_connect_override; + maps\mp\zombies\_zm_spawner::register_zombie_death_event_callback( ::tomb_zombie_death_event_callback ); + level.player_intersection_tracker_override = ::tomb_player_intersection_tracker_override; + maps\mp\zm_tomb_challenges::challenges_init(); + maps\mp\zombies\_zm_perk_random::init(); + tomb_register_client_fields(); + register_burn_overlay(); + level thread maps\mp\_sticky_grenade::init(); + maps\mp\zm_tomb_tank::init(); + maps\mp\zombies\_zm_weap_beacon::init(); + maps\mp\zombies\_zm_weap_claymore::init(); + maps\mp\zombies\_zm_weap_riotshield_tomb::init(); + maps\mp\zombies\_zm_weap_staff_air::init(); + maps\mp\zombies\_zm_weap_staff_fire::init(); + maps\mp\zombies\_zm_weap_staff_lightning::init(); + maps\mp\zombies\_zm_weap_staff_water::init(); + maps\mp\zombies\_zm_weap_staff_revive::init(); + maps\mp\zombies\_zm_weap_cymbal_monkey::init(); + level._melee_weapons = []; + maps\mp\zm_tomb_giant_robot::init_giant_robot_glows(); + maps\mp\zm_tomb_giant_robot::init_giant_robot(); + level.can_revive = maps\mp\zm_tomb_giant_robot::tomb_can_revive_override; + maps\mp\zm_tomb_capture_zones::init_capture_zones(); + level.a_e_slow_areas = getentarray( "player_slow_area", "targetname" ); + maps\mp\zm_tomb_ambient_scripts::init_tomb_ambient_scripts(); + level thread maps\mp\zombies\_zm_ai_mechz::init(); + level thread maps\mp\zombies\_zm_perk_random::init_animtree(); + level thread maps\mp\zombies\_zm_ai_quadrotor::init(); + level.zombiemode_divetonuke_perk_func = ::tomb_custom_divetonuke_explode; + set_zombie_var( "zombie_perk_divetonuke_min_damage", 500 ); + set_zombie_var( "zombie_perk_divetonuke_max_damage", 2000 ); + level.custom_laststand_func = ::tomb_custom_electric_cherry_laststand; + maps\mp\zm_tomb_dig::init_shovel(); + level.n_crystals_pickedup = 0; + level thread maps\mp\zm_tomb_main_quest::main_quest_init(); + level thread maps\mp\zm_tomb_teleporter::teleporter_init(); + level thread maps\mp\zombies\_zm_perk_random::start_random_machine(); + level.closest_player_override = ::tomb_closest_player_override; + level.validate_enemy_path_length = ::tomb_validate_enemy_path_length; + level thread maps\mp\zm_tomb_ee_main::init(); + level thread maps\mp\zm_tomb_ee_side::init(); + level.zones = []; + level.zone_manager_init_func = ::working_zone_init; + init_zones[0] = "zone_start"; + level thread maps\mp\zombies\_zm_zonemgr::manage_zones( init_zones ); + + if ( isdefined( level.optimise_for_splitscreen ) && level.optimise_for_splitscreen ) + { + if ( is_classic() ) + level.zombie_ai_limit = 20; + + setdvar( "fx_marks_draw", 0 ); + setdvar( "disable_rope", 1 ); + setdvar( "cg_disableplayernames", 1 ); + setdvar( "disableLookAtEntityLogic", 1 ); + } + else + level.zombie_ai_limit = 24; + + level thread drop_all_barriers(); + level thread traversal_blocker(); + onplayerconnect_callback( ::on_player_connect ); + maps\mp\zombies\_zm::register_player_damage_callback( ::tomb_player_damage_callback ); + level.custom_get_round_enemy_array_func = ::zm_tomb_get_round_enemy_array; + flag_wait( "start_zombie_round_logic" ); + wait_network_frame(); + level notify( "specialty_additionalprimaryweapon_power_on" ); + wait_network_frame(); + level notify( "additionalprimaryweapon_on" ); + set_zombie_var( "zombie_use_failsafe", 0 ); + level check_solo_status(); + level thread adjustments_for_solo(); + level thread zone_capture_powerup(); + level thread clean_up_bunker_doors(); + level setclientfield( "lantern_fx", 1 ); + level thread maps\mp\zm_tomb_chamber::tomb_watch_chamber_player_activity(); +/# + maps\mp\zm_tomb_utility::setup_devgui(); +#/ + init_weather_manager(); + level thread maps\mp\zm_tomb_ffotd::main_end(); +} + +tomb_register_client_fields() +{ + registerclientfield( "scriptmover", "stone_frozen", 14000, 1, "int" ); + n_bits = getminbitcountfornum( 5 ); + registerclientfield( "world", "rain_level", 14000, n_bits, "int" ); + registerclientfield( "world", "snow_level", 14000, n_bits, "int" ); + registerclientfield( "toplayer", "player_weather_visionset", 14000, 2, "int" ); + n_bits = getminbitcountfornum( 6 ); + registerclientfield( "toplayer", "player_rumble_and_shake", 14000, n_bits, "int" ); + registerclientfield( "scriptmover", "sky_pillar", 14000, 1, "int" ); + registerclientfield( "scriptmover", "staff_charger", 14000, 3, "int" ); + registerclientfield( "toplayer", "player_staff_charge", 14000, 2, "int" ); + registerclientfield( "toplayer", "player_tablet_state", 14000, 2, "int" ); + registerclientfield( "actor", "zombie_soul", 14000, 1, "int" ); + registerclientfield( "zbarrier", "magicbox_runes", 14000, 1, "int" ); + registerclientfield( "scriptmover", "barbecue_fx", 14000, 1, "int" ); + registerclientfield( "world", "cooldown_steam", 14000, 2, "int" ); + registerclientfield( "world", "mus_zmb_egg_snapshot_loop", 14000, 1, "int" ); + registerclientfield( "world", "sndMaelstromPlr0", 14000, 1, "int" ); + registerclientfield( "world", "sndMaelstromPlr1", 14000, 1, "int" ); + registerclientfield( "world", "sndMaelstromPlr2", 14000, 1, "int" ); + registerclientfield( "world", "sndMaelstromPlr3", 14000, 1, "int" ); + registerclientfield( "world", "sndChamberMusic", 14000, 3, "int" ); + registerclientfield( "actor", "foot_print_box_fx", 14000, 1, "int" ); + registerclientfield( "scriptmover", "foot_print_box_glow", 14000, 1, "int" ); + registerclientfield( "world", "crypt_open_exploder", 14000, 1, "int" ); + registerclientfield( "world", "lantern_fx", 14000, 1, "int" ); + registerclientfield( "allplayers", "oneinchpunch_impact", 14000, 1, "int" ); + registerclientfield( "actor", "oneinchpunch_physics_launchragdoll", 14000, 1, "int" ); +} + +register_burn_overlay() +{ + level.zm_transit_burn_max_duration = 2; + + if ( !isdefined( level.vsmgr_prio_overlay_zm_transit_burn ) ) + level.vsmgr_prio_overlay_zm_transit_burn = 20; + + maps\mp\_visionset_mgr::vsmgr_register_info( "overlay", "zm_transit_burn", 14000, level.vsmgr_prio_overlay_zm_transit_burn, 15, 1, maps\mp\_visionset_mgr::vsmgr_duration_lerp_thread_per_player, 0 ); +} + +tomb_closest_player_override( v_zombie_origin, a_players_to_check ) +{ + e_player_to_attack = undefined; + + while ( !isdefined( e_player_to_attack ) ) + { + e_player_to_attack = tomb_get_closest_player_using_paths( v_zombie_origin, a_players_to_check ); + a_players = maps\mp\zm_tomb_tank::get_players_on_tank( 1 ); + + if ( a_players.size > 0 ) + { + e_player_closest_on_tank = undefined; + n_dist_tank_min = 99999999; + + foreach ( e_player in a_players ) + { + n_dist_sq = distance2dsquared( self.origin, e_player.origin ); + + if ( n_dist_sq < n_dist_tank_min ) + { + n_dist_tank_min = n_dist_sq; + e_player_closest_on_tank = e_player; + } + } + + if ( is_player_valid( e_player_to_attack ) ) + { + n_dist_for_path = distance2dsquared( self.origin, e_player_to_attack.origin ); + + if ( n_dist_tank_min < n_dist_for_path ) + e_player_to_attack = e_player_closest_on_tank; + } + else if ( is_player_valid( e_player_closest_on_tank ) ) + e_player_to_attack = e_player_closest_on_tank; + } + + wait 0.5; + } + + return e_player_to_attack; +} + +zm_tomb_get_round_enemy_array() +{ + enemies = []; + valid_enemies = []; + enemies = getaispeciesarray( level.zombie_team, "all" ); + + for ( i = 0; i < enemies.size; i++ ) + { + if ( isdefined( enemies[i].ignore_enemy_count ) && enemies[i].ignore_enemy_count && ( !isdefined( enemies[i].script_noteworthy ) || enemies[i].script_noteworthy != "capture_zombie" ) ) + continue; + + valid_enemies[valid_enemies.size] = enemies[i]; + } + + return valid_enemies; +} + +tomb_player_damage_callback( e_inflictor, e_attacker, n_damage, n_dflags, str_means_of_death, str_weapon, v_point, v_dir, str_hit_loc, psoffsettime, b_damage_from_underneath, n_model_index, str_part_name ) +{ + if ( isdefined( str_weapon ) ) + { + if ( issubstr( str_weapon, "staff" ) ) + return 0; + else if ( str_weapon == "t72_turret" ) + return 0; + else if ( str_weapon == "quadrotorturret_zm" || str_weapon == "quadrotorturret_upgraded_zm" ) + return 0; + else if ( str_weapon == "zombie_markiv_side_cannon" ) + return 0; + else if ( str_weapon == "zombie_markiv_turret" ) + return 0; + else if ( str_weapon == "zombie_markiv_cannon" ) + return 0; + } + + return n_damage; +} + +tomb_random_perk_weights() +{ + temp_array = []; + + if ( randomint( 4 ) == 0 ) + arrayinsert( temp_array, "specialty_rof", 0 ); + + if ( randomint( 4 ) == 0 ) + arrayinsert( temp_array, "specialty_deadshot", 0 ); + + if ( randomint( 4 ) == 0 ) + arrayinsert( temp_array, "specialty_additionalprimaryweapon", 0 ); + + if ( randomint( 4 ) == 0 ) + arrayinsert( temp_array, "specialty_flakjacket", 0 ); + + if ( randomint( 4 ) == 0 ) + arrayinsert( temp_array, "specialty_grenadepulldeath", 0 ); + + temp_array = array_randomize( temp_array ); + level._random_perk_machine_perk_list = array_randomize( level._random_perk_machine_perk_list ); + level._random_perk_machine_perk_list = arraycombine( level._random_perk_machine_perk_list, temp_array, 1, 0 ); + keys = getarraykeys( level._random_perk_machine_perk_list ); + return keys; +} + +level_precache() +{ + precacheshader( "specialty_zomblood_zombies" ); + precachemodel( "c_zom_guard" ); + precachemodel( "p6_zm_tm_orb_fire" ); + precachemodel( "p6_zm_tm_orb_wind" ); + precachemodel( "p6_zm_tm_orb_lightning" ); + precachemodel( "p6_zm_tm_orb_ice" ); + precachemodel( "fx_tomb_vortex_beam_mesh" ); + precachemodel( "fxuse_sky_pillar_new" ); +} + +on_player_connect() +{ + self thread revive_watcher(); + wait_network_frame(); + self thread player_slow_movement_speed_monitor(); + self thread sndmeleewpnsound(); +} + +sndmeleewpnsound() +{ + self endon( "disconnect" ); + level endon( "end_game" ); + + while ( true ) + { + while ( !self ismeleeing() ) + wait 0.05; + + current_melee_weapon = self get_player_melee_weapon(); + current_weapon = self getcurrentweapon(); + + if ( current_weapon == "tomb_shield_zm" ) + { + self playsound( "fly_riotshield_zm_swing" ); + + while ( self ismeleeing() ) + wait 0.05; + + continue; + } + + alias = "zmb_melee_whoosh_"; + + if ( isdefined( self.is_player_zombie ) && self.is_player_zombie ) + alias = "zmb_melee_whoosh_zmb_"; + else if ( current_melee_weapon == "bowie_knife_zm" ) + alias = "zmb_bowie_swing_"; + else if ( current_melee_weapon == "one_inch_punch_zm" ) + alias = "wpn_one_inch_punch_"; + else if ( current_melee_weapon == "one_inch_punch_upgraded_zm" ) + alias = "wpn_one_inch_punch_"; + else if ( current_melee_weapon == "one_inch_punch_fire_zm" ) + alias = "wpn_one_inch_punch_fire_"; + else if ( current_melee_weapon == "one_inch_punch_air_zm" ) + alias = "wpn_one_inch_punch_air_"; + else if ( current_melee_weapon == "one_inch_punch_ice_zm" ) + alias = "wpn_one_inch_punch_ice_"; + else if ( current_melee_weapon == "one_inch_punch_lightning_zm" ) + alias = "wpn_one_inch_punch_lightning_"; + else if ( sndmeleewpn_isstaff( current_melee_weapon ) ) + alias = "zmb_melee_staff_upgraded_"; + + self playsoundtoplayer( alias + "plr", self ); + wait_network_frame(); + + if ( maps\mp\zombies\_zm_audio::sndisnetworksafe() ) + self playsound( alias + "npc" ); + + while ( self ismeleeing() ) + wait 0.05; + + wait 0.05; + } +} + +sndmeleewpn_isstaff( weapon ) +{ + switch ( weapon ) + { + case "staff_watermelee_zm": + case "staff_melee_zm": + case "staff_lightning_melee_zm": + case "staff_fire_melee_zm": + case "staff_air_melee_zm": + isstaff = 1; + break; + default: + isstaff = 0; + } + + return isstaff; +} + +revive_watcher() +{ + self endon( "death_or_disconnect" ); + + while ( true ) + { + self waittill( "do_revive_ended_normally" ); + + if ( self hasperk( "specialty_quickrevive" ) ) + self notify( "quick_revived_player" ); + else + self notify( "revived_player" ); + } +} + +setup_tomb_spawn_groups() +{ + level.use_multiple_spawns = 1; + level.spawner_int = 1; + + level waittill( "start_zombie_round_logic" ); + + level.zones["ug_bottom_zone"].script_int = 2; + level.zones["zone_nml_19"].script_int = 2; + level.zones["zone_chamber_0"].script_int = 3; + level.zones["zone_chamber_1"].script_int = 3; + level.zones["zone_chamber_2"].script_int = 3; + level.zones["zone_chamber_3"].script_int = 3; + level.zones["zone_chamber_4"].script_int = 3; + level.zones["zone_chamber_5"].script_int = 3; + level.zones["zone_chamber_6"].script_int = 3; + level.zones["zone_chamber_7"].script_int = 3; + level.zones["zone_chamber_8"].script_int = 3; + level.zones["zone_ice_stairs"].script_int = 2; + level.zones["zone_bolt_stairs"].script_int = 2; + level.zones["zone_air_stairs"].script_int = 2; + level.zones["zone_fire_stairs"].script_int = 2; + level.zones["zone_bolt_stairs_1"].script_int = 2; + level.zones["zone_air_stairs_1"].script_int = 2; + level.zones["zone_fire_stairs_1"].script_int = 2; +} + +chamber_capture_zombie_spawn_init() +{ + self endon( "death" ); + + self waittill( "completed_emerging_into_playable_area" ); + + self setclientfield( "zone_capture_zombie", 1 ); +} + +tomb_round_spawn_failsafe() +{ + self endon( "death" ); + prevorigin = self.origin; + + while ( true ) + { + if ( isdefined( self.ignore_round_spawn_failsafe ) && self.ignore_round_spawn_failsafe ) + return; + + wait 15; + + if ( isdefined( self.is_inert ) && self.is_inert ) + continue; + + if ( isdefined( self.lastchunk_destroy_time ) ) + { + if ( gettime() - self.lastchunk_destroy_time < 8000 ) + continue; + } + + if ( self.origin[2] < -3000 ) + { + if ( isdefined( level.put_timed_out_zombies_back_in_queue ) && level.put_timed_out_zombies_back_in_queue && !flag( "dog_round" ) && !( isdefined( self.isscreecher ) && self.isscreecher ) ) + { + level.zombie_total++; + level.zombie_total_subtract++; + } + + self dodamage( self.health + 100, ( 0, 0, 0 ) ); + break; + } + + if ( distancesquared( self.origin, prevorigin ) < 576 ) + { + if ( isdefined( level.put_timed_out_zombies_back_in_queue ) && level.put_timed_out_zombies_back_in_queue && !flag( "dog_round" ) ) + { + if ( !self.ignoreall && !( isdefined( self.nuked ) && self.nuked ) && !( isdefined( self.marked_for_death ) && self.marked_for_death ) && !( isdefined( self.isscreecher ) && self.isscreecher ) && ( isdefined( self.has_legs ) && self.has_legs ) && !( isdefined( self.is_brutus ) && self.is_brutus ) ) + { + level.zombie_total++; + level.zombie_total_subtract++; + } + } + + level.zombies_timeout_playspace++; + self dodamage( self.health + 100, ( 0, 0, 0 ) ); + break; + } + + prevorigin = self.origin; + } +} + +givecustomloadout( takeallweapons, alreadyspawned ) +{ + self giveweapon( "knife_zm" ); + self give_start_weapon( 1 ); +} + +precache_team_characters() +{ + precachemodel( "c_zom_player_cdc_fb" ); + precachemodel( "c_zom_hazmat_viewhands" ); + precachemodel( "c_zom_player_cia_fb" ); + precachemodel( "c_zom_suit_viewhands" ); +} + +precache_personality_characters() +{ + character\c_usa_dempsey_dlc4::precache(); + character\c_rus_nikolai_dlc4::precache(); + character\c_ger_richtofen_dlc4::precache(); + character\c_jap_takeo_dlc4::precache(); + precachemodel( "c_zom_richtofen_viewhands" ); + precachemodel( "c_zom_nikolai_viewhands" ); + precachemodel( "c_zom_takeo_viewhands" ); + precachemodel( "c_zom_dempsey_viewhands" ); +} + +give_personality_characters() +{ + if ( isdefined( level.hotjoin_player_setup ) && [[ level.hotjoin_player_setup ]]( "c_zom_arlington_coat_viewhands" ) ) + return; + + self detachall(); + + if ( !isdefined( self.characterindex ) ) + self.characterindex = assign_lowest_unused_character_index(); + + self.favorite_wall_weapons_list = []; + self.talks_in_danger = 0; +/# + if ( getdvar( _hash_40772CF1 ) != "" ) + self.characterindex = getdvarint( _hash_40772CF1 ); +#/ + switch ( self.characterindex ) + { + case 0: + self character\c_usa_dempsey_dlc4::main(); + self setviewmodel( "c_zom_dempsey_viewhands" ); + level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); + self set_player_is_female( 0 ); + self.character_name = "Dempsey"; + break; + case 1: + self character\c_rus_nikolai_dlc4::main(); + self setviewmodel( "c_zom_nikolai_viewhands" ); + level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); + self set_player_is_female( 0 ); + self.character_name = "Nikolai"; + break; + case 2: + self character\c_ger_richtofen_dlc4::main(); + self setviewmodel( "c_zom_richtofen_viewhands" ); + level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); + self set_player_is_female( 0 ); + self.character_name = "Richtofen"; + break; + case 3: + self character\c_jap_takeo_dlc4::main(); + self setviewmodel( "c_zom_takeo_viewhands" ); + level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); + self set_player_is_female( 0 ); + self.character_name = "Takeo"; + break; + } + + self setmovespeedscale( 1 ); + self setsprintduration( 4 ); + self setsprintcooldown( 0 ); + self thread set_exert_id(); +} + +set_exert_id() +{ + self endon( "disconnect" ); + wait_network_frame(); + wait_network_frame(); + self maps\mp\zombies\_zm_audio::setexertvoice( self.characterindex + 1 ); +} + +assign_lowest_unused_character_index() +{ + charindexarray = []; + charindexarray[0] = 0; + charindexarray[1] = 1; + charindexarray[2] = 2; + charindexarray[3] = 3; + players = get_players(); + + if ( players.size == 1 ) + { + charindexarray = array_randomize( charindexarray ); + + if ( charindexarray[0] == 2 ) + level.has_richtofen = 1; + + return charindexarray[0]; + } + else + { + n_characters_defined = 0; + + foreach ( player in players ) + { + if ( isdefined( player.characterindex ) ) + { + arrayremovevalue( charindexarray, player.characterindex, 0 ); + n_characters_defined++; + } + } + + if ( charindexarray.size > 0 ) + { + if ( n_characters_defined == players.size - 1 ) + { + if ( !( isdefined( level.has_richtofen ) && level.has_richtofen ) ) + { + level.has_richtofen = 1; + return 2; + } + } + + charindexarray = array_randomize( charindexarray ); + + if ( charindexarray[0] == 2 ) + level.has_richtofen = 1; + + return charindexarray[0]; + } + } + + return 0; +} + +give_team_characters() +{ + self detachall(); + self set_player_is_female( 0 ); + + if ( !isdefined( self.characterindex ) ) + { + self.characterindex = 1; + + if ( self.team == "axis" ) + self.characterindex = 0; + } + + switch ( self.characterindex ) + { + case 2: + case 0: + self setmodel( "c_zom_player_cia_fb" ); + self.voice = "american"; + self.skeleton = "base"; + self setviewmodel( "c_zom_suit_viewhands" ); + self.characterindex = 0; + break; + case 3: + case 1: + self setmodel( "c_zom_player_cdc_fb" ); + self.voice = "american"; + self.skeleton = "base"; + self setviewmodel( "c_zom_hazmat_viewhands" ); + self.characterindex = 1; + break; + } + + self setmovespeedscale( 1 ); + self setsprintduration( 4 ); + self setsprintcooldown( 0 ); +} + +initcharacterstartindex() +{ + level.characterstartindex = randomint( 4 ); +} + +zm_player_fake_death_cleanup() +{ + if ( isdefined( self._fall_down_anchor ) ) + { + self._fall_down_anchor delete(); + self._fall_down_anchor = undefined; + } +} + +zm_player_fake_death( vdir ) +{ + level notify( "fake_death" ); + self notify( "fake_death" ); + stance = self getstance(); + self.ignoreme = 1; + self enableinvulnerability(); + self takeallweapons(); + + if ( isdefined( self.insta_killed ) && self.insta_killed ) + { + self maps\mp\zombies\_zm::player_fake_death(); + self allowprone( 1 ); + self allowcrouch( 0 ); + self allowstand( 0 ); + wait 0.25; + self freezecontrols( 1 ); + } + else + { + self freezecontrols( 1 ); + self thread fall_down( vdir, stance ); + wait 1; + } +} + +fall_down( vdir, stance ) +{ + self endon( "disconnect" ); + level endon( "game_module_ended" ); + self ghost(); + origin = self.origin; + xyspeed = ( 0, 0, 0 ); + angles = self getplayerangles(); + angles = ( angles[0], angles[1], angles[2] + randomfloatrange( -5, 5 ) ); + + if ( isdefined( vdir ) && length( vdir ) > 0 ) + { + xyspeedmag = 40 + randomint( 12 ) + randomint( 12 ); + xyspeed = xyspeedmag * vectornormalize( ( vdir[0], vdir[1], 0 ) ); + } + + linker = spawn( "script_origin", ( 0, 0, 0 ) ); + linker.origin = origin; + linker.angles = angles; + self._fall_down_anchor = linker; + self playerlinkto( linker ); + self playsoundtoplayer( "zmb_player_death_fall", self ); + falling = stance != "prone"; + + if ( falling ) + { + origin = playerphysicstrace( origin, origin + xyspeed ); + eye = self get_eye(); + floor_height = 10 + origin[2] - eye[2]; + origin += ( 0, 0, floor_height ); + lerptime = 0.5; + linker moveto( origin, lerptime, lerptime ); + linker rotateto( angles, lerptime, lerptime ); + } + + self freezecontrols( 1 ); + + if ( falling ) + linker waittill( "movedone" ); + + self giveweapon( "death_throe_zm" ); + self switchtoweapon( "death_throe_zm" ); + + if ( falling ) + { + bounce = randomint( 4 ) + 8; + origin = origin + ( 0, 0, bounce ) - xyspeed * 0.1; + lerptime = bounce / 50.0; + linker moveto( origin, lerptime, 0, lerptime ); + + linker waittill( "movedone" ); + + origin = origin + ( 0, 0, bounce * -1 ) + xyspeed * 0.1; + lerptime /= 2.0; + linker moveto( origin, lerptime, lerptime ); + + linker waittill( "movedone" ); + + linker moveto( origin, 5, 0 ); + } + + wait 15; + linker delete(); +} + +initial_round_wait_func() +{ + flag_wait( "initial_blackscreen_passed" ); +} + +offhand_weapon_overrride() +{ + register_lethal_grenade_for_level( "frag_grenade_zm" ); + level.zombie_lethal_grenade_player_init = "frag_grenade_zm"; + register_lethal_grenade_for_level( "sticky_grenade_zm" ); + register_tactical_grenade_for_level( "cymbal_monkey_zm" ); + register_tactical_grenade_for_level( "emp_grenade_zm" ); + register_tactical_grenade_for_level( "beacon_zm" ); + register_placeable_mine_for_level( "claymore_zm" ); + register_melee_weapon_for_level( "knife_zm" ); + register_melee_weapon_for_level( "staff_air_melee_zm" ); + register_melee_weapon_for_level( "staff_fire_melee_zm" ); + register_melee_weapon_for_level( "staff_lightning_melee_zm" ); + register_melee_weapon_for_level( "staff_water_melee_zm" ); + level.zombie_melee_weapon_player_init = "knife_zm"; + register_equipment_for_level( "tomb_shield_zm" ); + level.zombie_equipment_player_init = undefined; + level.equipment_safe_to_drop = ::equipment_safe_to_drop; +} + +equipment_safe_to_drop( weapon ) +{ + if ( !isdefined( self.origin ) ) + return true; + + return true; +} + +offhand_weapon_give_override( str_weapon ) +{ + self endon( "death" ); + + if ( is_tactical_grenade( str_weapon ) && isdefined( self get_player_tactical_grenade() ) && !self is_player_tactical_grenade( str_weapon ) ) + { + self setweaponammoclip( self get_player_tactical_grenade(), 0 ); + self takeweapon( self get_player_tactical_grenade() ); + } + + return 0; +} + +tomb_weaponobjects_on_player_connect_override() +{ + level.retrievable_knife_init_names = []; + onplayerconnect_callback( ::weaponobjects_on_player_connect_override_internal ); +} + +tomb_player_intersection_tracker_override( e_player ) +{ + if ( isdefined( e_player.b_already_on_tank ) && e_player.b_already_on_tank || isdefined( self.b_already_on_tank ) && self.b_already_on_tank ) + return true; + + if ( isdefined( e_player.giant_robot_transition ) && e_player.giant_robot_transition || isdefined( self.giant_robot_transition ) && self.giant_robot_transition ) + return true; + + return false; +} + +init_tomb_stats() +{ + self maps\mp\zm_tomb_achievement::init_player_achievement_stats(); +} + +custom_add_weapons() +{ + level.laststandpistol = "c96_zm"; + level.default_laststandpistol = "c96_zm"; + level.default_solo_laststandpistol = "c96_upgraded_zm"; + level.start_weapon = "c96_zm"; + add_zombie_weapon( "mg08_zm", "mg08_upgraded_zm", &"ZOMBIE_WEAPON_MG08", 50, "wpck_mg", "", undefined, 1 ); + add_zombie_weapon( "hamr_zm", "hamr_upgraded_zm", &"ZOMBIE_WEAPON_HAMR", 50, "wpck_mg", "", undefined, 1 ); + add_zombie_weapon( "type95_zm", "type95_upgraded_zm", &"ZOMBIE_WEAPON_TYPE95", 50, "wpck_rifle", "", undefined, 1 ); + add_zombie_weapon( "galil_zm", "galil_upgraded_zm", &"ZOMBIE_WEAPON_GALIL", 50, "wpck_rifle", "", undefined, 1 ); + add_zombie_weapon( "fnfal_zm", "fnfal_upgraded_zm", &"ZOMBIE_WEAPON_FNFAL", 50, "wpck_rifle", "", undefined, 1 ); + add_zombie_weapon( "m14_zm", "m14_upgraded_zm", &"ZOMBIE_WEAPON_M14", 500, "wpck_rifle", "", undefined, 1 ); + add_zombie_weapon( "mp44_zm", "mp44_upgraded_zm", &"ZMWEAPON_MP44_WALLBUY", 1400, "wpck_rifle", "", undefined, 1 ); + add_zombie_weapon( "scar_zm", "scar_upgraded_zm", &"ZOMBIE_WEAPON_SCAR", 50, "wpck_rifle", "", undefined, 1 ); + add_zombie_weapon( "870mcs_zm", "870mcs_upgraded_zm", &"ZOMBIE_WEAPON_870MCS", 900, "wpck_shotgun", "", undefined, 1 ); + add_zombie_weapon( "srm1216_zm", "srm1216_upgraded_zm", &"ZOMBIE_WEAPON_SRM1216", 50, "wpck_shotgun", "", undefined, 1 ); + add_zombie_weapon( "ksg_zm", "ksg_upgraded_zm", &"ZOMBIE_WEAPON_KSG", 1100, "wpck_shotgun", "", undefined, 1 ); + add_zombie_weapon( "ak74u_zm", "ak74u_upgraded_zm", &"ZOMBIE_WEAPON_AK74U", 1200, "wpck_smg", "", undefined, 1 ); + add_zombie_weapon( "ak74u_extclip_zm", "ak74u_extclip_upgraded_zm", &"ZOMBIE_WEAPON_AK74U", 1200, "wpck_smg", "", undefined, 1 ); + add_zombie_weapon( "pdw57_zm", "pdw57_upgraded_zm", &"ZOMBIE_WEAPON_PDW57", 1000, "wpck_smg", "", undefined, 1 ); + add_zombie_weapon( "thompson_zm", "thompson_upgraded_zm", &"ZMWEAPON_THOMPSON_WALLBUY", 1500, "wpck_smg", "", 800, 1 ); + add_zombie_weapon( "qcw05_zm", "qcw05_upgraded_zm", &"ZOMBIE_WEAPON_QCW05", 50, "wpck_smg", "", undefined, 1 ); + add_zombie_weapon( "mp40_zm", "mp40_upgraded_zm", &"ZOMBIE_WEAPON_MP40", 1300, "wpck_smg", "", undefined, 1 ); + add_zombie_weapon( "mp40_stalker_zm", "mp40_stalker_upgraded_zm", &"ZOMBIE_WEAPON_MP40", 1300, "wpck_smg", "", undefined, 1 ); + add_zombie_weapon( "evoskorpion_zm", "evoskorpion_upgraded_zm", &"ZOMBIE_WEAPON_EVOSKORPION", 50, "wpck_smg", "", undefined, 1 ); + add_zombie_weapon( "ballista_zm", "ballista_upgraded_zm", &"ZMWEAPON_BALLISTA_WALLBUY", 500, "wpck_snipe", "", undefined, 1 ); + add_zombie_weapon( "dsr50_zm", "dsr50_upgraded_zm", &"ZOMBIE_WEAPON_DR50", 50, "wpck_snipe", "", undefined, 1 ); + add_zombie_weapon( "beretta93r_zm", "beretta93r_upgraded_zm", &"ZOMBIE_WEAPON_BERETTA93r", 1000, "wpck_pistol", "", undefined, 1 ); + add_zombie_weapon( "beretta93r_extclip_zm", "beretta93r_extclip_upgraded_zm", &"ZOMBIE_WEAPON_BERETTA93r", 1000, "wpck_pistol", "", undefined, 1 ); + add_zombie_weapon( "kard_zm", "kard_upgraded_zm", &"ZOMBIE_WEAPON_KARD", 50, "wpck_pistol", "", undefined, 1 ); + add_zombie_weapon( "fiveseven_zm", "fiveseven_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVEN", 1100, "wpck_pistol", "", undefined, 1 ); + add_zombie_weapon( "python_zm", "python_upgraded_zm", &"ZOMBIE_WEAPON_PYTHON", 50, "wpck_pistol", "", undefined, 1 ); + add_zombie_weapon( "c96_zm", "c96_upgraded_zm", &"ZOMBIE_WEAPON_C96", 50, "wpck_pistol", "", undefined, 1 ); + add_zombie_weapon( "fivesevendw_zm", "fivesevendw_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVENDW", 50, "wpck_duel", "", undefined, 1 ); + add_zombie_weapon( "m32_zm", "m32_upgraded_zm", &"ZOMBIE_WEAPON_M32", 50, "wpck_crappy", "", undefined, 1 ); + add_zombie_weapon( "beacon_zm", undefined, &"ZOMBIE_WEAPON_BEACON", 2000, "wpck_explo", "", undefined, 1 ); + add_zombie_weapon( "claymore_zm", undefined, &"ZOMBIE_WEAPON_CLAYMORE", 1000, "wpck_explo", "", undefined, 1 ); + add_zombie_weapon( "cymbal_monkey_zm", undefined, &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 ); + add_zombie_weapon( "frag_grenade_zm", undefined, &"ZOMBIE_WEAPON_FRAG_GRENADE", 250, "wpck_explo", "", 250 ); + add_zombie_weapon( "ray_gun_zm", "ray_gun_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN", 10000, "wpck_ray", "", undefined, 1 ); + + if ( isdefined( level.raygun2_included ) && level.raygun2_included ) + add_zombie_weapon( "raygun_mark2_zm", "raygun_mark2_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN_MARK2", 10000, "wpck_raymk2", "", undefined ); + + add_zombie_weapon( "sticky_grenade_zm", undefined, &"ZOMBIE_WEAPON_STICKY_GRENADE", 250, "wpck_explo", "", 250 ); + add_zombie_weapon( "staff_air_zm", undefined, &"AIR_STAFF", 50, "wpck_rpg", "", undefined, 1 ); + add_zombie_weapon( "staff_air_upgraded_zm", undefined, &"AIR_STAFF_CHARGED", 50, "wpck_rpg", "", undefined, 1 ); + add_zombie_weapon( "staff_fire_zm", undefined, &"FIRE_STAFF", 50, "wpck_rpg", "", undefined, 1 ); + add_zombie_weapon( "staff_fire_upgraded_zm", undefined, &"FIRE_STAFF_CHARGED", 50, "wpck_rpg", "", undefined, 1 ); + add_zombie_weapon( "staff_lightning_zm", undefined, &"LIGHTNING_STAFF", 50, "wpck_rpg", "", undefined, 1 ); + add_zombie_weapon( "staff_lightning_upgraded_zm", undefined, &"LIGHTNING_STAFF_CHARGED", 50, "wpck_rpg", "", undefined, 1 ); + add_zombie_weapon( "staff_water_zm", undefined, &"WATER_STAFF", 50, "wpck_rpg", "", undefined, 1 ); + add_zombie_weapon( "staff_water_zm_cheap", undefined, &"WATER_STAFF", 50, "wpck_rpg", "", undefined, 1 ); + add_zombie_weapon( "staff_water_upgraded_zm", undefined, &"WATER_STAFF_CHARGED", 50, "wpck_rpg", "", undefined, 1 ); + add_zombie_weapon( "staff_revive_zm", undefined, &"ZM_TOMB_WEAP_STAFF_REVIVE", 50, "wpck_rpg", "", undefined, 1 ); + change_weapon_cost( "mp40_zm", 1300 ); + level.weapons_using_ammo_sharing = 1; + add_shared_ammo_weapon( "ak74u_extclip_zm", "ak74u_zm" ); + add_shared_ammo_weapon( "mp40_stalker_zm", "mp40_zm" ); + add_shared_ammo_weapon( "beretta93r_extclip_zm", "beretta93r_zm" ); +} + +include_weapons() +{ + include_weapon( "hamr_zm" ); + include_weapon( "hamr_upgraded_zm", 0 ); + include_weapon( "mg08_zm" ); + include_weapon( "mg08_upgraded_zm", 0 ); + include_weapon( "type95_zm" ); + include_weapon( "type95_upgraded_zm", 0 ); + include_weapon( "galil_zm" ); + include_weapon( "galil_upgraded_zm", 0 ); + include_weapon( "fnfal_zm" ); + include_weapon( "fnfal_upgraded_zm", 0 ); + include_weapon( "m14_zm", 0 ); + include_weapon( "m14_upgraded_zm", 0 ); + include_weapon( "mp44_zm", 0 ); + include_weapon( "mp44_upgraded_zm", 0 ); + include_weapon( "scar_zm" ); + include_weapon( "scar_upgraded_zm", 0 ); + include_weapon( "870mcs_zm", 0 ); + include_weapon( "870mcs_upgraded_zm", 0 ); + include_weapon( "ksg_zm" ); + include_weapon( "ksg_upgraded_zm", 0 ); + include_weapon( "srm1216_zm" ); + include_weapon( "srm1216_upgraded_zm", 0 ); + include_weapon( "ak74u_zm", 0 ); + include_weapon( "ak74u_upgraded_zm", 0 ); + include_weapon( "ak74u_extclip_zm" ); + include_weapon( "ak74u_extclip_upgraded_zm", 0 ); + include_weapon( "pdw57_zm" ); + include_weapon( "pdw57_upgraded_zm", 0 ); + include_weapon( "thompson_zm" ); + include_weapon( "thompson_upgraded_zm", 0 ); + include_weapon( "qcw05_zm" ); + include_weapon( "qcw05_upgraded_zm", 0 ); + include_weapon( "mp40_zm", 0 ); + include_weapon( "mp40_upgraded_zm", 0 ); + include_weapon( "mp40_stalker_zm" ); + include_weapon( "mp40_stalker_upgraded_zm", 0 ); + include_weapon( "evoskorpion_zm" ); + include_weapon( "evoskorpion_upgraded_zm", 0 ); + include_weapon( "ballista_zm", 0 ); + include_weapon( "ballista_upgraded_zm", 0 ); + include_weapon( "dsr50_zm" ); + include_weapon( "dsr50_upgraded_zm", 0 ); + include_weapon( "beretta93r_zm", 0 ); + include_weapon( "beretta93r_upgraded_zm", 0 ); + include_weapon( "beretta93r_extclip_zm" ); + include_weapon( "beretta93r_extclip_upgraded_zm", 0 ); + include_weapon( "kard_zm" ); + include_weapon( "kard_upgraded_zm", 0 ); + include_weapon( "fiveseven_zm", 0 ); + include_weapon( "fiveseven_upgraded_zm", 0 ); + include_weapon( "python_zm" ); + include_weapon( "python_upgraded_zm", 0 ); + include_weapon( "c96_zm", 0 ); + include_weapon( "c96_upgraded_zm", 0 ); + include_weapon( "fivesevendw_zm" ); + include_weapon( "fivesevendw_upgraded_zm", 0 ); + include_weapon( "m32_zm" ); + include_weapon( "m32_upgraded_zm", 0 ); + include_weapon( "beacon_zm", 0 ); + include_weapon( "claymore_zm", 0 ); + include_weapon( "cymbal_monkey_zm" ); + include_weapon( "frag_grenade_zm", 0 ); + include_weapon( "knife_zm", 0 ); + include_weapon( "ray_gun_zm" ); + include_weapon( "ray_gun_upgraded_zm", 0 ); + include_weapon( "sticky_grenade_zm", 0 ); + include_weapon( "tomb_shield_zm", 0 ); + add_limited_weapon( "c96_zm", 0 ); + add_limited_weapon( "ray_gun_zm", 4 ); + add_limited_weapon( "ray_gun_upgraded_zm", 4 ); + include_weapon( "staff_air_zm", 0 ); + include_weapon( "staff_air_upgraded_zm", 0 ); + precacheitem( "staff_air_upgraded2_zm" ); + precacheitem( "staff_air_upgraded3_zm" ); + include_weapon( "staff_fire_zm", 0 ); + include_weapon( "staff_fire_upgraded_zm", 0 ); + precacheitem( "staff_fire_upgraded2_zm" ); + precacheitem( "staff_fire_upgraded3_zm" ); + include_weapon( "staff_lightning_zm", 0 ); + include_weapon( "staff_lightning_upgraded_zm", 0 ); + precacheitem( "staff_lightning_upgraded2_zm" ); + precacheitem( "staff_lightning_upgraded3_zm" ); + include_weapon( "staff_water_zm", 0 ); + include_weapon( "staff_water_zm_cheap", 0 ); + include_weapon( "staff_water_upgraded_zm", 0 ); + precacheitem( "staff_water_upgraded2_zm" ); + precacheitem( "staff_water_upgraded3_zm" ); + include_weapon( "staff_revive_zm", 0 ); + add_limited_weapon( "staff_air_zm", 0 ); + add_limited_weapon( "staff_air_upgraded_zm", 0 ); + add_limited_weapon( "staff_fire_zm", 0 ); + add_limited_weapon( "staff_fire_upgraded_zm", 0 ); + add_limited_weapon( "staff_lightning_zm", 0 ); + add_limited_weapon( "staff_lightning_upgraded_zm", 0 ); + add_limited_weapon( "staff_water_zm", 0 ); + add_limited_weapon( "staff_water_zm_cheap", 0 ); + add_limited_weapon( "staff_water_upgraded_zm", 0 ); + + if ( isdefined( level.raygun2_included ) && level.raygun2_included ) + { + include_weapon( "raygun_mark2_zm", 1 ); + include_weapon( "raygun_mark2_upgraded_zm", 0 ); + add_weapon_to_content( "raygun_mark2_zm", "dlc3" ); + add_limited_weapon( "raygun_mark2_zm", 1 ); + add_limited_weapon( "raygun_mark2_upgraded_zm", 1 ); + } +} + +include_powerups() +{ + include_powerup( "nuke" ); + include_powerup( "insta_kill" ); + include_powerup( "double_points" ); + include_powerup( "full_ammo" ); + include_powerup( "fire_sale" ); + include_powerup( "free_perk" ); + include_powerup( "zombie_blood" ); + include_powerup( "bonus_points_player" ); + include_powerup( "bonus_points_team" ); + level.level_specific_init_powerups = ::tomb_powerup_init; + level._zombiemode_powerup_grab = ::tomb_powerup_grab; +/# + setup_powerup_devgui(); +#/ +/# + setup_oneinchpunch_devgui(); +#/ +/# + setup_tablet_devgui(); +#/ +} + +include_perks_in_random_rotation() +{ + include_perk_in_random_rotation( "specialty_armorvest" ); + include_perk_in_random_rotation( "specialty_quickrevive" ); + include_perk_in_random_rotation( "specialty_fastreload" ); + include_perk_in_random_rotation( "specialty_rof" ); + include_perk_in_random_rotation( "specialty_longersprint" ); + include_perk_in_random_rotation( "specialty_deadshot" ); + include_perk_in_random_rotation( "specialty_additionalprimaryweapon" ); + include_perk_in_random_rotation( "specialty_flakjacket" ); + include_perk_in_random_rotation( "specialty_grenadepulldeath" ); + level.custom_random_perk_weights = ::tomb_random_perk_weights; +} + +tomb_powerup_init() +{ + maps\mp\zombies\_zm_powerup_zombie_blood::init( "c_zom_tomb_german_player_fb" ); +} + +tomb_powerup_grab( s_powerup, e_player ) +{ + if ( s_powerup.powerup_name == "zombie_blood" ) + level thread maps\mp\zombies\_zm_powerup_zombie_blood::zombie_blood_powerup( s_powerup, e_player ); +} + +setup_powerup_devgui() +{ +/# + setdvar( "zombie_blood", "off" ); + adddebugcommand( "devgui_cmd \"Zombies:2/Power Ups:2/Now:1/Drop Zombie Blood:1\" \"zombie_blood on\"\n" ); + level thread watch_devgui_zombie_blood(); +#/ +} + +setup_oneinchpunch_devgui() +{ +/# + setdvar( "test_oneinchpunch", "off" ); + adddebugcommand( "devgui_cmd \"Zombies:2/Tomb:1/OneInchPunch:2/OneInchPunch:1\" \"test_oneinchpunch on\"\n" ); + setdvar( "test_oneinchpunch_upgraded", "off" ); + adddebugcommand( "devgui_cmd \"Zombies:2/Tomb:1/OneInchPunch:2/OneInchPunch_Upgraded:1\" \"test_oneinchpunch_upgraded on\"\n" ); + setdvar( "test_oneinchpunch_air", "off" ); + adddebugcommand( "devgui_cmd \"Zombies:2/Tomb:1/OneInchPunch:2/OneInchPunch_Air:1\" \"test_oneinchpunch_air on\"\n" ); + setdvar( "test_oneinchpunch_fire", "off" ); + adddebugcommand( "devgui_cmd \"Zombies:2/Tomb:1/OneInchPunch:2/OneInchPunch_Fire:1\" \"test_oneinchpunch_fire on\"\n" ); + setdvar( "test_oneinchpunch_ice", "off" ); + adddebugcommand( "devgui_cmd \"Zombies:2/Tomb:1/OneInchPunch:2/OneInchPunch_Ice:1\" \"test_oneinchpunch_ice on\"\n" ); + setdvar( "test_oneinchpunch_lightning", "off" ); + adddebugcommand( "devgui_cmd \"Zombies:2/Tomb:1/OneInchPunch:2/OneInchPunch_Lightning:1\" \"test_oneinchpunch_lightning on\"\n" ); + level thread watch_devgui_oneinchpunch(); +#/ +} + +watch_devgui_oneinchpunch() +{ +/# + while ( true ) + { + if ( getdvar( _hash_A3C7E066 ) == "on" ) + { + setdvar( "test_oneinchpunch", "off" ); + player = get_players()[0]; + player thread maps\mp\zombies\_zm_weap_one_inch_punch::one_inch_punch_melee_attack(); + } + else if ( getdvar( _hash_8921AB91 ) == "on" ) + { + setdvar( "test_oneinchpunch_upgraded", "off" ); + player = get_players()[0]; + player.b_punch_upgraded = 1; + player.str_punch_element = "upgraded"; + player thread maps\mp\zombies\_zm_weap_one_inch_punch::one_inch_punch_melee_attack(); + } + else if ( getdvar( _hash_C236601 ) == "on" ) + { + setdvar( "test_oneinchpunch_air", "off" ); + player = get_players()[0]; + player.b_punch_upgraded = 1; + player.str_punch_element = "air"; + player thread maps\mp\zombies\_zm_weap_one_inch_punch::one_inch_punch_melee_attack(); + } + else if ( getdvar( _hash_9092E46B ) == "on" ) + { + setdvar( "test_oneinchpunch_fire", "off" ); + player = get_players()[0]; + player.b_punch_upgraded = 1; + player.str_punch_element = "fire"; + player thread maps\mp\zombies\_zm_weap_one_inch_punch::one_inch_punch_melee_attack(); + } + else if ( getdvar( _hash_C238736 ) == "on" ) + { + setdvar( "test_oneinchpunch_ice", "off" ); + player = get_players()[0]; + player.b_punch_upgraded = 1; + player.str_punch_element = "ice"; + player thread maps\mp\zombies\_zm_weap_one_inch_punch::one_inch_punch_melee_attack(); + } + else if ( getdvar( _hash_9341C49 ) == "on" ) + { + setdvar( "test_oneinchpunch_lightning", "off" ); + player = get_players()[0]; + player.b_punch_upgraded = 1; + player.str_punch_element = "lightning"; + player thread maps\mp\zombies\_zm_weap_one_inch_punch::one_inch_punch_melee_attack(); + } + + wait 0.1; + } +#/ +} + +setup_tablet_devgui() +{ +/# + setdvar( "test_player_tablet", "3" ); + adddebugcommand( "devgui_cmd \"Zombies:2/Tomb:1/Easter Ann:3/Tablet-None:1\" \"test_player_tablet 0\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies:2/Tomb:1/Easter Ann:3/Tablet-Clean:1\" \"test_player_tablet 1\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies:2/Tomb:1/Easter Ann:3/Tablet-Dirty:1\" \"test_player_tablet 2\"\n" ); + level thread watch_devgui_tablet(); +#/ +} + +watch_devgui_tablet() +{ +/# + while ( true ) + { + if ( getdvar( _hash_4806208C ) != "3" ) + { + player = get_players()[0]; + n_tablet_state = int( getdvar( _hash_4806208C ) ); + player setclientfieldtoplayer( "player_tablet_state", n_tablet_state ); + setdvar( "test_player_tablet", "3" ); + } + + wait 0.1; + } +#/ +} + +watch_devgui_zombie_blood() +{ +/# + while ( true ) + { + if ( getdvar( _hash_FA71C6BA ) == "on" ) + { + setdvar( "zombie_blood", "off" ); + level thread maps\mp\zombies\_zm_devgui::zombie_devgui_give_powerup( "zombie_blood", 1 ); + } + + wait 0.1; + } +#/ +} + +watch_devgui_double_points() +{ +/# + while ( true ) + { + if ( getdvar( _hash_1FB6003C ) == "on" ) + { + setdvar( "double_points", "off" ); + level thread maps\mp\zombies\_zm_devgui::zombie_devgui_give_powerup( "double_points", 1 ); + iprintlnbold( "change" ); + } + + wait 0.1; + } +#/ +} + +setup_rex_starts() +{ + add_gametype( "zclassic", ::dummy, "zclassic", ::dummy ); + add_gameloc( "tomb", ::dummy, "tomb", ::dummy ); +} + +dummy() +{ + +} + +working_zone_init() +{ + flag_init( "always_on" ); + flag_set( "always_on" ); + add_adjacent_zone( "zone_robot_head", "zone_robot_head", "always_on" ); + add_adjacent_zone( "zone_start", "zone_start_a", "always_on" ); + add_adjacent_zone( "zone_start", "zone_start_b", "always_on" ); + add_adjacent_zone( "zone_start_a", "zone_start_b", "always_on" ); + add_adjacent_zone( "zone_start_a", "zone_bunker_1a", "activate_zone_bunker_1" ); + add_adjacent_zone( "zone_bunker_1a", "zone_bunker_1", "activate_zone_bunker_1" ); + add_adjacent_zone( "zone_bunker_1a", "zone_bunker_1", "activate_zone_bunker_3a" ); + add_adjacent_zone( "zone_bunker_1", "zone_bunker_3a", "activate_zone_bunker_3a" ); + add_adjacent_zone( "zone_bunker_3a", "zone_bunker_3b", "activate_zone_bunker_3a" ); + add_adjacent_zone( "zone_bunker_3a", "zone_bunker_3b", "activate_zone_bunker_3b" ); + add_adjacent_zone( "zone_bunker_3b", "zone_bunker_5a", "activate_zone_bunker_3b" ); + add_adjacent_zone( "zone_bunker_5a", "zone_bunker_5b", "activate_zone_bunker_3b" ); + add_adjacent_zone( "zone_start_b", "zone_bunker_2a", "activate_zone_bunker_2" ); + add_adjacent_zone( "zone_bunker_2a", "zone_bunker_2", "activate_zone_bunker_2" ); + add_adjacent_zone( "zone_bunker_2a", "zone_bunker_2", "activate_zone_bunker_4a" ); + add_adjacent_zone( "zone_bunker_2", "zone_bunker_4a", "activate_zone_bunker_4a" ); + add_adjacent_zone( "zone_bunker_4a", "zone_bunker_4b", "activate_zone_bunker_4a" ); + add_adjacent_zone( "zone_bunker_4a", "zone_bunker_4c", "activate_zone_bunker_4a" ); + add_adjacent_zone( "zone_bunker_4b", "zone_bunker_4f", "activate_zone_bunker_4a" ); + add_adjacent_zone( "zone_bunker_4c", "zone_bunker_4d", "activate_zone_bunker_4a" ); + add_adjacent_zone( "zone_bunker_4c", "zone_bunker_4e", "activate_zone_bunker_4a" ); + add_adjacent_zone( "zone_bunker_4e", "zone_bunker_tank_c1", "activate_zone_bunker_4a" ); + add_adjacent_zone( "zone_bunker_4e", "zone_bunker_tank_d", "activate_zone_bunker_4a" ); + add_adjacent_zone( "zone_bunker_tank_c", "zone_bunker_tank_c1", "activate_zone_bunker_4a" ); + add_adjacent_zone( "zone_bunker_tank_d", "zone_bunker_tank_d1", "activate_zone_bunker_4a" ); + add_adjacent_zone( "zone_bunker_4a", "zone_bunker_4b", "activate_zone_bunker_4b" ); + add_adjacent_zone( "zone_bunker_4a", "zone_bunker_4c", "activate_zone_bunker_4b" ); + add_adjacent_zone( "zone_bunker_4b", "zone_bunker_4f", "activate_zone_bunker_4b" ); + add_adjacent_zone( "zone_bunker_4c", "zone_bunker_4d", "activate_zone_bunker_4b" ); + add_adjacent_zone( "zone_bunker_4c", "zone_bunker_4e", "activate_zone_bunker_4b" ); + add_adjacent_zone( "zone_bunker_4b", "zone_bunker_5a", "activate_zone_bunker_4b" ); + add_adjacent_zone( "zone_bunker_5a", "zone_bunker_5b", "activate_zone_bunker_4b" ); + add_adjacent_zone( "zone_bunker_4e", "zone_bunker_tank_c1", "activate_zone_bunker_4b" ); + add_adjacent_zone( "zone_bunker_4e", "zone_bunker_tank_d", "activate_zone_bunker_4b" ); + add_adjacent_zone( "zone_bunker_tank_c", "zone_bunker_tank_c1", "activate_zone_bunker_4b" ); + add_adjacent_zone( "zone_bunker_tank_d", "zone_bunker_tank_d1", "activate_zone_bunker_4b" ); + add_adjacent_zone( "zone_bunker_tank_a", "zone_nml_7", "activate_zone_nml" ); + add_adjacent_zone( "zone_bunker_tank_a", "zone_nml_7a", "activate_zone_nml" ); + add_adjacent_zone( "zone_bunker_tank_a", "zone_bunker_tank_a1", "activate_zone_nml" ); + add_adjacent_zone( "zone_bunker_tank_a1", "zone_bunker_tank_a2", "activate_zone_nml" ); + add_adjacent_zone( "zone_bunker_tank_a1", "zone_bunker_tank_b", "activate_zone_nml" ); + add_adjacent_zone( "zone_bunker_tank_b", "zone_bunker_tank_c", "activate_zone_nml" ); + add_adjacent_zone( "zone_bunker_tank_c", "zone_bunker_tank_c1", "activate_zone_nml" ); + add_adjacent_zone( "zone_bunker_tank_d", "zone_bunker_tank_d1", "activate_zone_nml" ); + add_adjacent_zone( "zone_bunker_tank_d1", "zone_bunker_tank_e", "activate_zone_nml" ); + add_adjacent_zone( "zone_bunker_tank_e", "zone_bunker_tank_e1", "activate_zone_nml" ); + add_adjacent_zone( "zone_bunker_tank_e1", "zone_bunker_tank_e2", "activate_zone_nml" ); + add_adjacent_zone( "zone_bunker_tank_e1", "zone_bunker_tank_f", "activate_zone_nml" ); + add_adjacent_zone( "zone_bunker_tank_f", "zone_nml_1", "activate_zone_nml" ); + add_adjacent_zone( "zone_bunker_5b", "zone_nml_2a", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_0", "zone_nml_1", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_0", "zone_nml_farm", "activate_zone_farm" ); + add_adjacent_zone( "zone_nml_1", "zone_nml_2", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_1", "zone_nml_4", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_1", "zone_nml_20", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_2", "zone_nml_2a", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_2", "zone_nml_2b", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_2", "zone_nml_3", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_3", "zone_nml_4", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_3", "zone_nml_13", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_4", "zone_nml_5", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_4", "zone_nml_13", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_5", "zone_nml_farm", "activate_zone_farm" ); + add_adjacent_zone( "zone_nml_6", "zone_nml_2b", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_6", "zone_nml_7", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_6", "zone_nml_7a", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_6", "zone_nml_8", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_7", "zone_nml_7a", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_7", "zone_nml_9", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_7", "zone_nml_10", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_8", "zone_nml_10a", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_8", "zone_nml_14", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_8", "zone_nml_16", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_9", "zone_nml_7a", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_9", "zone_nml_9a", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_9", "zone_nml_11", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_10", "zone_nml_10a", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_10", "zone_nml_11", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_10a", "zone_nml_12", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_10a", "zone_village_4", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_11", "zone_nml_9a", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_11", "zone_nml_11a", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_11", "zone_nml_12", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_12", "zone_nml_11a", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_12", "zone_nml_12a", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_13", "zone_nml_15", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_14", "zone_nml_15", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_15", "zone_nml_17", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_15a", "zone_nml_14", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_15a", "zone_nml_15", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_16", "zone_nml_2b", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_16", "zone_nml_16a", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_16", "zone_nml_18", "activate_zone_ruins" ); + add_adjacent_zone( "zone_nml_17", "zone_nml_17a", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_17", "zone_nml_18", "activate_zone_ruins" ); + add_adjacent_zone( "zone_nml_18", "zone_nml_19", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_farm", "zone_nml_celllar", "activate_zone_farm" ); + add_adjacent_zone( "zone_nml_farm", "zone_nml_farm_1", "activate_zone_farm" ); + add_adjacent_zone( "zone_nml_19", "ug_bottom_zone", "activate_zone_crypt" ); + add_adjacent_zone( "zone_village_0", "zone_nml_15", "activate_zone_village_0" ); + add_adjacent_zone( "zone_village_0", "zone_village_4b", "activate_zone_village_0" ); + add_adjacent_zone( "zone_village_1", "zone_village_1a", "activate_zone_village_0" ); + add_adjacent_zone( "zone_village_1", "zone_village_2", "activate_zone_village_1" ); + add_adjacent_zone( "zone_village_1", "zone_village_4b", "activate_zone_village_0" ); + add_adjacent_zone( "zone_village_1", "zone_village_5b", "activate_zone_village_0" ); + add_adjacent_zone( "zone_village_2", "zone_village_3", "activate_zone_village_1" ); + add_adjacent_zone( "zone_village_3", "zone_village_3a", "activate_zone_village_1" ); + add_adjacent_zone( "zone_village_3", "zone_ice_stairs", "activate_zone_village_1" ); + add_adjacent_zone( "zone_ice_stairs", "zone_ice_stairs_1", "activate_zone_village_1" ); + add_adjacent_zone( "zone_village_3a", "zone_village_3b", "activate_zone_village_1" ); + add_adjacent_zone( "zone_village_4", "zone_nml_14", "activate_zone_village_0" ); + add_adjacent_zone( "zone_village_4", "zone_village_4a", "activate_zone_village_0" ); + add_adjacent_zone( "zone_village_4", "zone_village_4b", "activate_zone_village_0" ); + add_adjacent_zone( "zone_village_5", "zone_nml_4", "activate_zone_village_0" ); + add_adjacent_zone( "zone_village_5", "zone_village_5a", "activate_zone_village_0" ); + add_adjacent_zone( "zone_village_5a", "zone_village_5b", "activate_zone_village_0" ); + add_adjacent_zone( "zone_village_6", "zone_village_5b", "activate_zone_village_0" ); + add_adjacent_zone( "zone_village_6", "zone_village_6a", "activate_zone_village_0" ); + add_adjacent_zone( "zone_chamber_0", "zone_chamber_1", "activate_zone_chamber" ); + add_adjacent_zone( "zone_chamber_0", "zone_chamber_3", "activate_zone_chamber" ); + add_adjacent_zone( "zone_chamber_0", "zone_chamber_4", "activate_zone_chamber" ); + add_adjacent_zone( "zone_chamber_1", "zone_chamber_2", "activate_zone_chamber" ); + add_adjacent_zone( "zone_chamber_1", "zone_chamber_3", "activate_zone_chamber" ); + add_adjacent_zone( "zone_chamber_1", "zone_chamber_4", "activate_zone_chamber" ); + add_adjacent_zone( "zone_chamber_1", "zone_chamber_5", "activate_zone_chamber" ); + add_adjacent_zone( "zone_chamber_2", "zone_chamber_4", "activate_zone_chamber" ); + add_adjacent_zone( "zone_chamber_2", "zone_chamber_5", "activate_zone_chamber" ); + add_adjacent_zone( "zone_chamber_3", "zone_chamber_4", "activate_zone_chamber" ); + add_adjacent_zone( "zone_chamber_3", "zone_chamber_6", "activate_zone_chamber" ); + add_adjacent_zone( "zone_chamber_3", "zone_chamber_7", "activate_zone_chamber" ); + add_adjacent_zone( "zone_chamber_4", "zone_chamber_5", "activate_zone_chamber" ); + add_adjacent_zone( "zone_chamber_4", "zone_chamber_6", "activate_zone_chamber" ); + add_adjacent_zone( "zone_chamber_4", "zone_chamber_7", "activate_zone_chamber" ); + add_adjacent_zone( "zone_chamber_4", "zone_chamber_8", "activate_zone_chamber" ); + add_adjacent_zone( "zone_chamber_5", "zone_chamber_7", "activate_zone_chamber" ); + add_adjacent_zone( "zone_chamber_5", "zone_chamber_8", "activate_zone_chamber" ); + add_adjacent_zone( "zone_chamber_6", "zone_chamber_7", "activate_zone_chamber" ); + add_adjacent_zone( "zone_chamber_7", "zone_chamber_8", "activate_zone_chamber" ); + add_adjacent_zone( "zone_bunker_1", "zone_bunker_1a", "activate_zone_bunker_1_tank" ); + add_adjacent_zone( "zone_bunker_1a", "zone_fire_stairs", "activate_zone_bunker_1_tank" ); + add_adjacent_zone( "zone_fire_stairs", "zone_fire_stairs_1", "activate_zone_bunker_1_tank" ); + add_adjacent_zone( "zone_bunker_2", "zone_bunker_2a", "activate_zone_bunker_2_tank" ); + add_adjacent_zone( "zone_bunker_4a", "zone_bunker_4b", "activate_zone_bunker_4_tank" ); + add_adjacent_zone( "zone_bunker_4a", "zone_bunker_4c", "activate_zone_bunker_4_tank" ); + add_adjacent_zone( "zone_bunker_4c", "zone_bunker_4d", "activate_zone_bunker_4_tank" ); + add_adjacent_zone( "zone_bunker_4c", "zone_bunker_4e", "activate_zone_bunker_4_tank" ); + add_adjacent_zone( "zone_bunker_4e", "zone_bunker_tank_c1", "activate_zone_bunker_4_tank" ); + add_adjacent_zone( "zone_bunker_4e", "zone_bunker_tank_d", "activate_zone_bunker_4_tank" ); + add_adjacent_zone( "zone_bunker_tank_c", "zone_bunker_tank_c1", "activate_zone_bunker_4_tank" ); + add_adjacent_zone( "zone_bunker_tank_d", "zone_bunker_tank_d1", "activate_zone_bunker_4_tank" ); + add_adjacent_zone( "zone_bunker_tank_b", "zone_bunker_6", "activate_zone_bunker_6_tank" ); + add_adjacent_zone( "zone_bunker_1", "zone_bunker_6", "activate_zone_bunker_6_tank" ); + level thread activate_zone_trig( "trig_zone_bunker_1", "activate_zone_bunker_1_tank" ); + level thread activate_zone_trig( "trig_zone_bunker_2", "activate_zone_bunker_2_tank" ); + level thread activate_zone_trig( "trig_zone_bunker_4", "activate_zone_bunker_4_tank" ); + level thread activate_zone_trig( "trig_zone_bunker_6", "activate_zone_bunker_6_tank", "activate_zone_bunker_1_tank" ); + add_adjacent_zone( "zone_bunker_1a", "zone_fire_stairs", "activate_zone_bunker_1" ); + add_adjacent_zone( "zone_fire_stairs", "zone_fire_stairs_1", "activate_zone_bunker_1" ); + add_adjacent_zone( "zone_bunker_1a", "zone_fire_stairs", "activate_zone_bunker_3a" ); + add_adjacent_zone( "zone_fire_stairs", "zone_fire_stairs_1", "activate_zone_bunker_3a" ); + add_adjacent_zone( "zone_nml_9", "zone_air_stairs", "activate_zone_nml" ); + add_adjacent_zone( "zone_air_stairs", "zone_air_stairs_1", "activate_zone_nml" ); + add_adjacent_zone( "zone_nml_celllar", "zone_bolt_stairs", "activate_zone_farm" ); + add_adjacent_zone( "zone_bolt_stairs", "zone_bolt_stairs_1", "activate_zone_farm" ); +} + +activate_zone_trig( str_name, str_zone1, str_zone2 ) +{ + trig = getent( str_name, "targetname" ); + + trig waittill( "trigger" ); + + if ( isdefined( str_zone1 ) ) + flag_set( str_zone1 ); + + if ( isdefined( str_zone2 ) ) + flag_set( str_zone2 ); + + trig delete(); +} + +check_tank_platform_zone() +{ + while ( true ) + { + level waittill( "newzoneActive", activezone ); + + if ( activezone == "zone_bunker_3" ) + break; + + wait 1; + } + + flag_set( "activate_zone_nml" ); +} + +tomb_vehicle_damage_override_wrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname ) +{ + if ( isdefined( level.a_func_vehicle_damage_override[self.vehicletype] ) ) + return level.a_func_vehicle_damage_override[self.vehicletype]; + + return idamage; +} + +drop_all_barriers() +{ + zkeys = getarraykeys( level.zones ); + + for ( z = 0; z < level.zones.size; z++ ) + { + zbarriers = get_all_zone_zbarriers( zkeys[z] ); + + if ( !isdefined( zbarriers ) ) + continue; + + foreach ( zbarrier in zbarriers ) + { + zbarrier_pieces = zbarrier getnumzbarrierpieces(); + + for ( i = 0; i < zbarrier_pieces; i++ ) + { + zbarrier hidezbarrierpiece( i ); + zbarrier setzbarrierpiecestate( i, "open" ); + } + + wait 0.05; + } + } +} + +get_all_zone_zbarriers( zone_name ) +{ + if ( !isdefined( zone_name ) ) + return undefined; + + zone = level.zones[zone_name]; + return zone.zbarriers; +} + +tomb_special_weapon_magicbox_check( weapon ) +{ + if ( isdefined( level.raygun2_included ) && level.raygun2_included ) + { + if ( weapon == "ray_gun_zm" ) + { + if ( self has_weapon_or_upgrade( "raygun_mark2_zm" ) ) + return false; + } + + if ( weapon == "raygun_mark2_zm" ) + { + if ( self has_weapon_or_upgrade( "ray_gun_zm" ) ) + return false; + + if ( randomint( 100 ) >= 33 ) + return false; + } + } + + if ( weapon == "beacon_zm" ) + { + if ( isdefined( self.beacon_ready ) && self.beacon_ready ) + return true; + else + return false; + } + + if ( isdefined( level.zombie_weapons[weapon].shared_ammo_weapon ) ) + { + if ( self has_weapon_or_upgrade( level.zombie_weapons[weapon].shared_ammo_weapon ) ) + return false; + } + + return true; +} + +custom_vending_precaching() +{ + if ( level._custom_perks.size > 0 ) + { + a_keys = getarraykeys( level._custom_perks ); + + for ( i = 0; i < a_keys.size; i++ ) + { + if ( isdefined( level._custom_perks[a_keys[i]].precache_func ) ) + level [[ level._custom_perks[a_keys[i]].precache_func ]](); + } + } + + if ( isdefined( level.zombiemode_using_pack_a_punch ) && level.zombiemode_using_pack_a_punch ) + { + precacheitem( "zombie_knuckle_crack" ); + precachemodel( "p6_anim_zm_buildable_pap" ); + precachemodel( "p6_anim_zm_buildable_pap_on" ); + precachestring( &"ZOMBIE_PERK_PACKAPUNCH" ); + precachestring( &"ZOMBIE_PERK_PACKAPUNCH_ATT" ); + level._effect["packapunch_fx"] = loadfx( "maps/zombie/fx_zombie_packapunch" ); + level.machine_assets["packapunch"] = spawnstruct(); + level.machine_assets["packapunch"].weapon = "zombie_knuckle_crack"; + } + + if ( isdefined( level.zombiemode_using_additionalprimaryweapon_perk ) && level.zombiemode_using_additionalprimaryweapon_perk ) + { + precacheitem( "zombie_perk_bottle_additionalprimaryweapon" ); + precacheshader( "specialty_additionalprimaryweapon_zombies" ); + precachemodel( "p6_zm_tm_vending_three_gun" ); + precachestring( &"ZOMBIE_PERK_ADDITIONALWEAPONPERK" ); + level._effect["additionalprimaryweapon_light"] = loadfx( "misc/fx_zombie_cola_arsenal_on" ); + level.machine_assets["additionalprimaryweapon"] = spawnstruct(); + level.machine_assets["additionalprimaryweapon"].weapon = "zombie_perk_bottle_additionalprimaryweapon"; + level.machine_assets["additionalprimaryweapon"].off_model = "p6_zm_tm_vending_three_gun"; + level.machine_assets["additionalprimaryweapon"].on_model = "p6_zm_tm_vending_three_gun"; + level.machine_assets["additionalprimaryweapon"].power_on_callback = maps\mp\zm_tomb_capture_zones::custom_vending_power_on; + level.machine_assets["additionalprimaryweapon"].power_off_callback = maps\mp\zm_tomb_capture_zones::custom_vending_power_off; + } + + if ( isdefined( level.zombiemode_using_deadshot_perk ) && level.zombiemode_using_deadshot_perk ) + { + precacheitem( "zombie_perk_bottle_deadshot" ); + precacheshader( "specialty_ads_zombies" ); + precachemodel( "zombie_vending_ads" ); + precachemodel( "zombie_vending_ads_on" ); + precachestring( &"ZOMBIE_PERK_DEADSHOT" ); + level._effect["deadshot_light"] = loadfx( "misc/fx_zombie_cola_dtap_on" ); + level.machine_assets["deadshot"] = spawnstruct(); + level.machine_assets["deadshot"].weapon = "zombie_perk_bottle_deadshot"; + level.machine_assets["deadshot"].off_model = "zombie_vending_ads"; + level.machine_assets["deadshot"].on_model = "zombie_vending_ads_on"; + level.machine_assets["deadshot"].power_on_callback = maps\mp\zm_tomb_capture_zones::custom_vending_power_on; + level.machine_assets["deadshot"].power_off_callback = maps\mp\zm_tomb_capture_zones::custom_vending_power_off; + } + + if ( isdefined( level.zombiemode_using_divetonuke_perk ) && level.zombiemode_using_divetonuke_perk ) + { + precacheitem( "zombie_perk_bottle_nuke" ); + precacheshader( "specialty_divetonuke_zombies" ); + precachemodel( "zombie_vending_nuke" ); + precachemodel( "zombie_vending_nuke_on" ); + precachestring( &"ZOMBIE_PERK_DIVETONUKE" ); + level._effect["divetonuke_light"] = loadfx( "misc/fx_zombie_cola_dtap_on" ); + level.machine_assets["divetonuke"] = spawnstruct(); + level.machine_assets["divetonuke"].weapon = "zombie_perk_bottle_nuke"; + level.machine_assets["divetonuke"].off_model = "zombie_vending_nuke"; + level.machine_assets["divetonuke"].on_model = "zombie_vending_nuke_on"; + level.machine_assets["divetonuke"].power_on_callback = maps\mp\zm_tomb_capture_zones::custom_vending_power_on; + level.machine_assets["divetonuke"].power_off_callback = maps\mp\zm_tomb_capture_zones::custom_vending_power_off; + } + + if ( isdefined( level.zombiemode_using_doubletap_perk ) && level.zombiemode_using_doubletap_perk ) + { + precacheitem( "zombie_perk_bottle_doubletap" ); + precacheshader( "specialty_doubletap_zombies" ); + precachemodel( "zombie_vending_doubletap2" ); + precachemodel( "zombie_vending_doubletap2_on" ); + precachestring( &"ZOMBIE_PERK_DOUBLETAP" ); + level._effect["doubletap_light"] = loadfx( "misc/fx_zombie_cola_dtap_on" ); + level.machine_assets["doubletap"] = spawnstruct(); + level.machine_assets["doubletap"].weapon = "zombie_perk_bottle_doubletap"; + level.machine_assets["doubletap"].off_model = "zombie_vending_doubletap2"; + level.machine_assets["doubletap"].on_model = "zombie_vending_doubletap2_on"; + level.machine_assets["doubletap"].power_on_callback = maps\mp\zm_tomb_capture_zones::custom_vending_power_on; + level.machine_assets["doubletap"].power_off_callback = maps\mp\zm_tomb_capture_zones::custom_vending_power_off; + } + + if ( isdefined( level.zombiemode_using_juggernaut_perk ) && level.zombiemode_using_juggernaut_perk ) + { + precacheitem( "zombie_perk_bottle_jugg" ); + precacheshader( "specialty_juggernaut_zombies" ); + precachemodel( "zombie_vending_jugg" ); + precachemodel( "zombie_vending_jugg_on" ); + precachestring( &"ZOMBIE_PERK_JUGGERNAUT" ); + level._effect["jugger_light"] = loadfx( "misc/fx_zombie_cola_jugg_on" ); + level.machine_assets["juggernog"] = spawnstruct(); + level.machine_assets["juggernog"].weapon = "zombie_perk_bottle_jugg"; + level.machine_assets["juggernog"].off_model = "zombie_vending_jugg"; + level.machine_assets["juggernog"].on_model = "zombie_vending_jugg_on"; + level.machine_assets["juggernog"].power_on_callback = maps\mp\zm_tomb_capture_zones::custom_vending_power_on; + level.machine_assets["juggernog"].power_off_callback = maps\mp\zm_tomb_capture_zones::custom_vending_power_off; + } + + if ( isdefined( level.zombiemode_using_marathon_perk ) && level.zombiemode_using_marathon_perk ) + { + precacheitem( "zombie_perk_bottle_marathon" ); + precacheshader( "specialty_marathon_zombies" ); + precachemodel( "zombie_vending_marathon" ); + precachemodel( "zombie_vending_marathon_on" ); + precachestring( &"ZOMBIE_PERK_MARATHON" ); + level._effect["marathon_light"] = loadfx( "maps/zombie/fx_zmb_cola_staminup_on" ); + level.machine_assets["marathon"] = spawnstruct(); + level.machine_assets["marathon"].weapon = "zombie_perk_bottle_marathon"; + level.machine_assets["marathon"].off_model = "zombie_vending_marathon"; + level.machine_assets["marathon"].on_model = "zombie_vending_marathon_on"; + level.machine_assets["marathon"].power_on_callback = maps\mp\zm_tomb_capture_zones::custom_vending_power_on; + level.machine_assets["marathon"].power_off_callback = maps\mp\zm_tomb_capture_zones::custom_vending_power_off; + } + + if ( isdefined( level.zombiemode_using_revive_perk ) && level.zombiemode_using_revive_perk ) + { + precacheitem( "zombie_perk_bottle_revive" ); + precacheshader( "specialty_quickrevive_zombies" ); + precachemodel( "p6_zm_tm_vending_revive" ); + precachemodel( "p6_zm_tm_vending_revive_on" ); + precachestring( &"ZOMBIE_PERK_QUICKREVIVE" ); + level._effect["revive_light"] = loadfx( "misc/fx_zombie_cola_revive_on" ); + level._effect["revive_light_flicker"] = loadfx( "maps/zombie/fx_zmb_cola_revive_flicker" ); + level.machine_assets["revive"] = spawnstruct(); + level.machine_assets["revive"].weapon = "zombie_perk_bottle_revive"; + level.machine_assets["revive"].off_model = "p6_zm_tm_vending_revive"; + level.machine_assets["revive"].on_model = "p6_zm_tm_vending_revive_on"; + level.machine_assets["revive"].power_on_callback = maps\mp\zm_tomb_capture_zones::custom_vending_power_on; + level.machine_assets["revive"].power_off_callback = maps\mp\zm_tomb_capture_zones::custom_vending_power_off; + } + + if ( isdefined( level.zombiemode_using_sleightofhand_perk ) && level.zombiemode_using_sleightofhand_perk ) + { + precacheitem( "zombie_perk_bottle_sleight" ); + precacheshader( "specialty_fastreload_zombies" ); + precachemodel( "zombie_vending_sleight" ); + precachemodel( "zombie_vending_sleight_on" ); + precachestring( &"ZOMBIE_PERK_FASTRELOAD" ); + level._effect["sleight_light"] = loadfx( "misc/fx_zombie_cola_on" ); + level.machine_assets["speedcola"] = spawnstruct(); + level.machine_assets["speedcola"].weapon = "zombie_perk_bottle_sleight"; + level.machine_assets["speedcola"].off_model = "zombie_vending_sleight"; + level.machine_assets["speedcola"].on_model = "zombie_vending_sleight_on"; + level.machine_assets["speedcola"].power_on_callback = maps\mp\zm_tomb_capture_zones::custom_vending_power_on; + level.machine_assets["speedcola"].power_off_callback = maps\mp\zm_tomb_capture_zones::custom_vending_power_off; + } + + if ( isdefined( level.zombiemode_using_tombstone_perk ) && level.zombiemode_using_tombstone_perk ) + { + precacheitem( "zombie_perk_bottle_tombstone" ); + precacheshader( "specialty_tombstone_zombies" ); + precachemodel( "zombie_vending_tombstone" ); + precachemodel( "zombie_vending_tombstone_on" ); + precachemodel( "ch_tombstone1" ); + precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); + level._effect["tombstone_light"] = loadfx( "misc/fx_zombie_cola_on" ); + level.machine_assets["tombstone"] = spawnstruct(); + level.machine_assets["tombstone"].weapon = "zombie_perk_bottle_tombstone"; + level.machine_assets["tombstone"].off_model = "zombie_vending_tombstone"; + level.machine_assets["tombstone"].on_model = "zombie_vending_tombstone_on"; + level.machine_assets["tombstone"].power_on_callback = maps\mp\zm_tomb_capture_zones::custom_vending_power_on; + level.machine_assets["tombstone"].power_off_callback = maps\mp\zm_tomb_capture_zones::custom_vending_power_off; + } + + if ( isdefined( level.zombiemode_using_chugabud_perk ) && level.zombiemode_using_chugabud_perk ) + { + precacheitem( "zombie_perk_bottle_whoswho" ); + precacheshader( "specialty_quickrevive_zombies" ); + precachemodel( "p6_zm_vending_chugabud" ); + precachemodel( "p6_zm_vending_chugabud_on" ); + precachemodel( "ch_tombstone1" ); + precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); + level._effect["tombstone_light"] = loadfx( "misc/fx_zombie_cola_on" ); + level.machine_assets["whoswho"] = spawnstruct(); + level.machine_assets["whoswho"].weapon = "zombie_perk_bottle_whoswho"; + level.machine_assets["whoswho"].off_model = "p6_zm_vending_chugabud"; + level.machine_assets["whoswho"].on_model = "p6_zm_vending_chugabud_on"; + level.machine_assets["whoswho"].power_on_callback = maps\mp\zm_tomb_capture_zones::custom_vending_power_on; + level.machine_assets["whoswho"].power_off_callback = maps\mp\zm_tomb_capture_zones::custom_vending_power_off; + } +} + +tomb_actor_damage_override_wrapper( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + if ( isdefined( self.b_zombie_blood_damage_only ) && self.b_zombie_blood_damage_only ) + { + if ( !isplayer( attacker ) || !attacker.zombie_vars["zombie_powerup_zombie_blood_on"] ) + return 0; + } + + if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "capture_zombie" && isdefined( attacker ) && isplayer( attacker ) ) + { + if ( damage >= self.health ) + { + if ( 100 * level.round_number > attacker.n_capture_zombie_points ) + { + attacker maps\mp\zombies\_zm_score::player_add_points( "rebuild_board", 10 ); + attacker.n_capture_zombie_points += 10; + } + } + } + + return_val = self maps\mp\zombies\_zm::actor_damage_override_wrapper( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + + if ( damage >= self.health ) + { + if ( weapon == "zombie_markiv_cannon" && meansofdeath == "MOD_CRUSH" ) + self thread zombie_gib_guts(); + else if ( isdefined( self.b_on_tank ) && self.b_on_tank || isdefined( self.b_climbing_tank ) && self.b_climbing_tank ) + self maps\mp\zm_tomb_tank::zombie_on_tank_death_animscript_callback( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + } + + return return_val; +} + +tomb_zombie_death_event_callback() +{ + if ( isdefined( self ) && isdefined( self.damagelocation ) && isdefined( self.damagemod ) && isdefined( self.damageweapon ) && isdefined( self.attacker ) && isplayer( self.attacker ) ) + { + if ( is_headshot( self.damageweapon, self.damagelocation, self.damagemod ) && maps\mp\zombies\_zm_challenges::challenge_exists( "zc_headshots" ) && !( !isdefined( self.script_noteworthy ) && !isdefined( "capture_zombie" ) || isdefined( self.script_noteworthy ) && isdefined( "capture_zombie" ) && self.script_noteworthy == "capture_zombie" ) ) + self.attacker maps\mp\zombies\_zm_challenges::increment_stat( "zc_headshots" ); + } +} + +zombie_init_done() +{ + self.allowpain = 0; + self thread maps\mp\zm_tomb_distance_tracking::escaped_zombies_cleanup_init(); +} + +tomb_validate_enemy_path_length( player ) +{ + max_dist = 1296; + d = distancesquared( self.origin, player.origin ); + + if ( d <= max_dist ) + return true; + + return false; +} + +show_zombie_count() +{ + self endon( "death_or_disconnect" ); + flag_wait( "start_zombie_round_logic" ); + + while ( true ) + { + n_round_zombies = get_current_zombie_count(); + str_hint = "Alive: " + n_round_zombies + "\\nTo Spawn: " + level.zombie_total; + iprintln( str_hint ); + wait 5; + } +} + +tomb_custom_divetonuke_explode( attacker, origin ) +{ + radius = level.zombie_vars["zombie_perk_divetonuke_radius"]; + min_damage = level.zombie_vars["zombie_perk_divetonuke_min_damage"]; + max_damage = level.zombie_vars["zombie_perk_divetonuke_max_damage"]; + + if ( isdefined( level.flopper_network_optimized ) && level.flopper_network_optimized ) + attacker thread tomb_custom_divetonuke_explode_network_optimized( origin, radius, max_damage, min_damage, "MOD_GRENADE_SPLASH" ); + else + radiusdamage( origin, radius, max_damage, min_damage, attacker, "MOD_GRENADE_SPLASH" ); + + playfx( level._effect["divetonuke_groundhit"], origin ); + attacker playsound( "zmb_phdflop_explo" ); + maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker ); + wait 1; + maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker ); +} + +tomb_custom_divetonuke_explode_network_optimized( origin, radius, max_damage, min_damage, damage_mod ) +{ + self endon( "disconnect" ); + a_all_zombies = getaispeciesarray( "axis", "all" ); + a_zombies = get_array_of_closest( origin, a_all_zombies, undefined, undefined, radius ); + network_stall_counter = 0; + + if ( isdefined( a_zombies ) ) + { + for ( i = 0; i < a_zombies.size; i++ ) + { + e_zombie = a_zombies[i]; + + if ( !isdefined( e_zombie ) || !isalive( e_zombie ) ) + continue; + + dist = distance( e_zombie.origin, origin ); + damage = min_damage + ( max_damage - min_damage ) * ( 1.0 - dist / radius ); + e_zombie dodamage( damage, e_zombie.origin, self, self, 0, damage_mod ); + network_stall_counter--; + + if ( network_stall_counter <= 0 ) + { + wait_network_frame(); + network_stall_counter = randomintrange( 1, 3 ); + } + } + } +} + +tomb_custom_electric_cherry_laststand() +{ + visionsetlaststand( "zombie_last_stand", 1 ); + + if ( isdefined( self ) ) + { + playfx( level._effect["electric_cherry_explode"], self.origin ); + self playsound( "zmb_cherry_explode" ); + self notify( "electric_cherry_start" ); + wait 0.05; + a_zombies = getaispeciesarray( "axis", "all" ); + a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, 500 ); + + for ( i = 0; i < a_zombies.size; i++ ) + { + if ( isalive( self ) ) + { + if ( a_zombies[i].health <= 1000 ) + { + a_zombies[i] thread maps\mp\zombies\_zm_perk_electric_cherry::electric_cherry_death_fx(); + + if ( isdefined( self.cherry_kills ) ) + self.cherry_kills++; + + self maps\mp\zombies\_zm_score::add_to_player_score( 40 ); + } + else + { + a_zombies[i] thread maps\mp\zombies\_zm_perk_electric_cherry::electric_cherry_stun(); + a_zombies[i] thread maps\mp\zombies\_zm_perk_electric_cherry::electric_cherry_shock_fx(); + } + + wait 0.1; + a_zombies[i] dodamage( 1000, self.origin, self, self, "none" ); + } + } + + self notify( "electric_cherry_end" ); + } +} + +tomb_custom_electric_cherry_reload_attack() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "stop_electric_cherry_reload_attack" ); + self.wait_on_reload = []; + self.consecutive_electric_cherry_attacks = 0; + + while ( true ) + { + self waittill( "reload_start" ); + + str_current_weapon = self getcurrentweapon(); + + if ( isinarray( self.wait_on_reload, str_current_weapon ) ) + continue; + + self.wait_on_reload[self.wait_on_reload.size] = str_current_weapon; + self.consecutive_electric_cherry_attacks++; + n_clip_current = self getweaponammoclip( str_current_weapon ); + n_clip_max = weaponclipsize( str_current_weapon ); + n_fraction = n_clip_current / n_clip_max; + perk_radius = linear_map( n_fraction, 1.0, 0.0, 32, 128 ); + perk_dmg = linear_map( n_fraction, 1.0, 0.0, 1, 1045 ); + self thread maps\mp\zombies\_zm_perk_electric_cherry::check_for_reload_complete( str_current_weapon ); + + if ( isdefined( self ) ) + { + switch ( self.consecutive_electric_cherry_attacks ) + { + case 1: + case 0: + n_zombie_limit = undefined; + break; + case 2: + n_zombie_limit = 8; + break; + case 3: + n_zombie_limit = 4; + break; + case 4: + n_zombie_limit = 2; + break; + default: + n_zombie_limit = 0; + } + + self thread maps\mp\zombies\_zm_perk_electric_cherry::electric_cherry_cooldown_timer( str_current_weapon ); + + if ( isdefined( n_zombie_limit ) && n_zombie_limit == 0 ) + continue; + + self thread electric_cherry_reload_fx( n_fraction ); + self notify( "electric_cherry_start" ); + self playsound( "zmb_cherry_explode" ); + a_zombies = getaispeciesarray( "axis", "all" ); + a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, perk_radius ); + n_zombies_hit = 0; + + for ( i = 0; i < a_zombies.size; i++ ) + { + if ( isalive( self ) && isalive( a_zombies[i] ) ) + { + if ( isdefined( n_zombie_limit ) ) + { + if ( n_zombies_hit < n_zombie_limit ) + n_zombies_hit++; + else + break; + } + + if ( a_zombies[i].health <= perk_dmg ) + { + a_zombies[i] thread maps\mp\zombies\_zm_perk_electric_cherry::electric_cherry_death_fx(); + + if ( isdefined( self.cherry_kills ) ) + self.cherry_kills++; + + self maps\mp\zombies\_zm_score::add_to_player_score( 40 ); + } + else + { + if ( !isdefined( a_zombies[i].is_mechz ) ) + a_zombies[i] thread maps\mp\zombies\_zm_perk_electric_cherry::electric_cherry_stun(); + + a_zombies[i] thread maps\mp\zombies\_zm_perk_electric_cherry::electric_cherry_shock_fx(); + } + + wait 0.1; + + if ( isalive( a_zombies[i] ) ) + a_zombies[i] dodamage( perk_dmg, self.origin, self, self, "none" ); + } + } + + self notify( "electric_cherry_end" ); + } + } +} + +tomb_custom_player_track_ammo_count() +{ + self notify( "stop_ammo_tracking" ); + self endon( "disconnect" ); + self endon( "stop_ammo_tracking" ); + ammolowcount = 0; + ammooutcount = 0; + + while ( true ) + { + wait 0.5; + weap = self getcurrentweapon(); + + if ( !isdefined( weap ) || weap == "none" || !tomb_can_track_ammo_custom( weap ) ) + continue; + + if ( self getammocount( weap ) > 5 || self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + ammooutcount = 0; + ammolowcount = 0; + continue; + } + + if ( self getammocount( weap ) > 0 ) + { + if ( ammolowcount < 1 ) + { + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "ammo_low" ); + ammolowcount++; + } + } + else if ( ammooutcount < 1 ) + { + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "ammo_out" ); + ammooutcount++; + } + + wait 20; + } +} + +tomb_can_track_ammo_custom( weap ) +{ + if ( !isdefined( weap ) ) + return false; + + switch ( weap ) + { + case "zombie_tazer_flourish": + case "zombie_sickle_flourish": + case "zombie_one_inch_punch_upgrade_flourish": + case "zombie_one_inch_punch_flourish": + case "zombie_knuckle_crack": + case "zombie_fists_zm": + case "zombie_builder_zm": + case "zombie_bowie_flourish": + case "time_bomb_zm": + case "time_bomb_detonator_zm": + case "tazer_knuckles_zm": + case "tazer_knuckles_upgraded_zm": + case "staff_revive_zm": + case "slowgun_zm": + case "slowgun_upgraded_zm": + case "screecher_arms_zm": + case "riotshield_zm": + case "one_inch_punch_zm": + case "one_inch_punch_upgraded_zm": + case "one_inch_punch_lightning_zm": + case "one_inch_punch_ice_zm": + case "one_inch_punch_fire_zm": + case "one_inch_punch_air_zm": + case "none": + case "no_hands_zm": + case "lower_equip_gasmask_zm": + case "humangun_zm": + case "humangun_upgraded_zm": + case "falling_hands_tomb_zm": + case "equip_gasmask_zm": + case "equip_dieseldrone_zm": + case "death_throe_zm": + case "chalk_draw_zm": + case "alcatraz_shield_zm": + return false; + default: + if ( is_zombie_perk_bottle( weap ) || is_placeable_mine( weap ) || is_equipment( weap ) || issubstr( weap, "knife_ballistic_" ) || getsubstr( weap, 0, 3 ) == "gl_" || weaponfuellife( weap ) > 0 || weap == level.revive_tool ) + return false; + } + + return true; +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_achievement.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_achievement.gsc new file mode 100644 index 0000000..91ace52 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_achievement.gsc @@ -0,0 +1,230 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_globallogic_score; + +init() +{ + level thread achievement_tomb_sidequest(); + level thread achievement_all_your_base(); + level thread achievement_playing_with_power(); + level.achievement_sound_func = ::achievement_sound_func; + onplayerconnect_callback( ::onplayerconnect ); +} + +achievement_sound_func( achievement_name_lower ) +{ + self endon( "disconnect" ); + + if ( !sessionmodeisonlinegame() ) + return; + + for ( i = 0; i < self getentitynumber() + 1; i++ ) + wait_network_frame(); + + self thread do_player_general_vox( "general", "achievement" ); +} + +init_player_achievement_stats() +{ + if ( !is_gametype_active( "zclassic" ) ) + return; + + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc4_tomb_sidequest", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc4_not_a_gold_digger", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc4_all_your_base", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc4_kung_fu_grip", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc4_playing_with_power", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc4_im_on_a_tank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc4_saving_the_day_all_day", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc4_master_of_disguise", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc4_overachiever", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc4_master_wizard", 0 ); +} + +onplayerconnect() +{ + self thread achievement_not_a_gold_digger(); + self thread achievement_kung_fu_grip(); + self thread achievement_im_on_a_tank(); + self thread achievement_saving_the_day_all_day(); + self thread achievement_master_of_disguise(); + self thread achievement_master_wizard(); + self thread achievement_overachiever(); +} + +achievement_tomb_sidequest() +{ + level endon( "end_game" ); + + level waittill( "tomb_sidequest_complete" ); +/# + +#/ + level giveachievement_wrapper( "ZM_DLC4_TOMB_SIDEQUEST", 1 ); +} + +achievement_all_your_base() +{ + level endon( "end_game" ); + + level waittill( "all_zones_captured_none_lost" ); +/# + +#/ + level giveachievement_wrapper( "ZM_DLC4_ALL_YOUR_BASE", 1 ); +} + +achievement_playing_with_power() +{ + level endon( "end_game" ); + flag_wait( "ee_all_staffs_crafted" ); +/# + +#/ + level giveachievement_wrapper( "ZM_DLC4_PLAYING_WITH_POWER", 1 ); +} + +achievement_overachiever() +{ + level endon( "end_game" ); + self endon( "disconnect" ); + + self waittill( "all_challenges_complete" ); +/# + +#/ + self giveachievement_wrapper( "ZM_DLC4_OVERACHIEVER" ); +} + +achievement_not_a_gold_digger() +{ + level endon( "end_game" ); + self endon( "disconnect" ); + + self waittill( "dig_up_weapon_shared" ); +/# + +#/ + self giveachievement_wrapper( "ZM_DLC4_NOT_A_GOLD_DIGGER" ); +} + +achievement_kung_fu_grip() +{ + level endon( "end_game" ); + self endon( "disconnect" ); + self waittill_multiple( "mechz_grab_released_self", "mechz_grab_released_friendly" ); +/# + +#/ + self giveachievement_wrapper( "ZM_DLC4_KUNG_FU_GRIP" ); +} + +achievement_im_on_a_tank() +{ + level endon( "end_game" ); + self endon( "disconnect" ); + + self waittill( "rode_tank_around_map" ); +/# + +#/ + self giveachievement_wrapper( "ZM_DLC4_IM_ON_A_TANK" ); +} + +achievement_saving_the_day_all_day() +{ + level endon( "end_game" ); + self endon( "disconnect" ); + self waittill_multiple( "revived_player", "quick_revived_player", "revived_player_with_quadrotor", "revived_player_with_upgraded_staff" ); +/# + +#/ + self giveachievement_wrapper( "ZM_DLC4_SAVING_THE_DAY_ALL_DAY" ); +} + +_zombie_blood_achievement_think() +{ + self endon( "zombie_blood_over" ); + b_finished_achievement = 0; + + if ( !isdefined( self.zombie_blood_revives ) ) + self.zombie_blood_revives = 0; + + if ( !isdefined( self.zombie_blood_generators_started ) ) + self.zombie_blood_generators_started = 0; + + b_did_capture = 0; + n_revives = 0; + + while ( true ) + { + str_action = waittill_any_return( "completed_zone_capture", "do_revive_ended_normally", "revived_player_with_quadrotor", "revived_player_with_upgraded_staff" ); + + if ( issubstr( str_action, "revive" ) ) + self.zombie_blood_revives++; + else if ( str_action == "completed_zone_capture" ) + self.zombie_blood_generators_started++; + + if ( self.zombie_blood_generators_started > 0 && self.zombie_blood_revives >= 3 ) + return 1; + } +} + +achievement_master_of_disguise() +{ + level endon( "end_game" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "zombie_blood" ); + + b_finished_achievement = self _zombie_blood_achievement_think(); + + if ( isdefined( b_finished_achievement ) && b_finished_achievement ) + break; + } +/# + +#/ + self giveachievement_wrapper( "ZM_DLC4_MASTER_OF_DISGUISE" ); +} + +watch_equipped_weapons_for_upgraded_staffs() +{ + self endon( "disconnect" ); + self endon( "stop_weapon_switch_watcher_thread" ); + + while ( true ) + { + self waittill( "weapon_change", str_weapon ); + + if ( self.sessionstate != "playing" ) + continue; + + if ( str_weapon == "staff_water_upgraded_zm" ) + self notify( "upgraded_water_staff_equipped" ); + else if ( str_weapon == "staff_lightning_upgraded_zm" ) + self notify( "upgraded_lightning_staff_equipped" ); + else if ( str_weapon == "staff_fire_upgraded_zm" ) + self notify( "upgraded_fire_staff_equipped" ); + else if ( str_weapon == "staff_air_upgraded_zm" ) + self notify( "upgraded_air_staff_equipped" ); + } +} + +achievement_master_wizard() +{ + level endon( "end_game" ); + self endon( "disconnect" ); + self thread watch_equipped_weapons_for_upgraded_staffs(); + self waittill_multiple( "upgraded_air_staff_equipped", "upgraded_lightning_staff_equipped", "upgraded_water_staff_equipped", "upgraded_fire_staff_equipped" ); + self notify( "stop_weapon_switch_watcher_thread" ); +/# + +#/ + self giveachievement_wrapper( "ZM_DLC4_MASTER_WIZARD" ); +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_amb.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_amb.gsc new file mode 100644 index 0000000..f0eaedc --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_amb.gsc @@ -0,0 +1,664 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\_ambientpackage; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_zonemgr; + +main() +{ + level thread sndsetupendgamemusicstates(); + + if ( is_classic() ) + { + thread sndmusicegg(); + thread snd115egg(); + thread sndstingersetup(); + onplayerconnect_callback( ::sndtrackers ); + level thread sndmaelstrom(); + } +} + +sndsetupendgamemusicstates() +{ + flag_wait( "start_zombie_round_logic" ); + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "game_over_ee", "mus_zombie_game_over_ee", 1, 0, undefined, "SILENCE" ); +} + +sndtrackers() +{ + +} + +sndstingersetup() +{ + level.sndmusicstingerevent = ::sndplaystinger; + level.sndstinger = spawnstruct(); + level.sndstinger.ent = spawn( "script_origin", ( 0, 0, 0 ) ); + level.sndstinger.queue = 0; + level.sndstinger.isplaying = 0; + level.sndstinger.states = []; + level.sndroundwait = 1; + flag_wait( "start_zombie_round_logic" ); + level sndstingersetupstates(); + level thread sndstingerroundwait(); + level thread sndboardmonitor(); + level thread locationstingerwait(); + level thread snddoormusictrigs(); +} + +sndstingersetupstates() +{ + createstingerstate( "door_open", "mus_event_group_03", 2.5, "ignore" ); + createstingerstate( "boards_gone", "mus_event_group_02", 0.5, "ignore" ); + createstingerstate( "zone_nml_18", "mus_event_location_hilltop", 0.75, "queue" ); + createstingerstate( "zone_village_2", "mus_event_location_church", 0.75, "queue" ); + createstingerstate( "ug_bottom_zone", "mus_event_location_crypt", 0.75, "queue" ); + createstingerstate( "zone_robot_head", "mus_event_location_robot", 0.75, "queue" ); + createstingerstate( "zone_air_stairs", "mus_event_cave_air", 0.75, "queue" ); + createstingerstate( "zone_fire_stairs", "mus_event_cave_fire", 0.75, "queue" ); + createstingerstate( "zone_bolt_stairs", "mus_event_cave_bolt", 0.75, "queue" ); + createstingerstate( "zone_ice_stairs", "mus_event_cave_ice", 0.75, "queue" ); + createstingerstate( "poweron", "mus_event_poweron", 0, "reject" ); + createstingerstate( "tank_ride", "mus_event_tank_ride", 0, "queue" ); + createstingerstate( "generator_1", "mus_event_generator_1", 1, "reject" ); + createstingerstate( "generator_2", "mus_event_generator_2", 1, "reject" ); + createstingerstate( "generator_3", "mus_event_generator_3", 1, "reject" ); + createstingerstate( "generator_4", "mus_event_generator_4", 1, "reject" ); + createstingerstate( "generator_5", "mus_event_generator_5", 1, "reject" ); + createstingerstate( "generator_6", "mus_event_generator_6", 1, "reject" ); + createstingerstate( "staff_fire", "mus_event_staff_fire", 0.1, "reject" ); + createstingerstate( "staff_ice", "mus_event_staff_ice", 0.1, "reject" ); + createstingerstate( "staff_lightning", "mus_event_staff_lightning", 0.1, "reject" ); + createstingerstate( "staff_wind", "mus_event_staff_wind", 0.1, "reject" ); + createstingerstate( "staff_fire_upgraded", "mus_event_staff_fire_upgraded", 0.1, "reject" ); + createstingerstate( "staff_ice_upgraded", "mus_event_staff_ice_upgraded", 0.1, "reject" ); + createstingerstate( "staff_lightning_upgraded", "mus_event_staff_lightning_upgraded", 0.1, "reject" ); + createstingerstate( "staff_wind_upgraded", "mus_event_staff_wind_upgraded", 0.1, "reject" ); + createstingerstate( "staff_all_upgraded", "mus_event_staff_all_upgraded", 0.1, "reject" ); + createstingerstate( "side_sting_1", "mus_side_stinger_1", 0.1, "reject" ); + createstingerstate( "side_sting_2", "mus_side_stinger_2", 0.1, "reject" ); + createstingerstate( "side_sting_3", "mus_side_stinger_3", 0.1, "reject" ); + createstingerstate( "side_sting_4", "mus_side_stinger_4", 0.1, "reject" ); + createstingerstate( "side_sting_5", "mus_side_stinger_5", 0.1, "reject" ); + createstingerstate( "side_sting_6", "mus_side_stinger_6", 0.1, "reject" ); +} + +createstingerstate( state, alias, prewait, interrupt ) +{ + s = level.sndstinger; + + if ( !isdefined( s.states[state] ) ) + { + s.states[state] = spawnstruct(); + s.states[state].alias = alias; + s.states[state].prewait = prewait; + s.states[state].interrupt = interrupt; + } +} + +sndboardmonitor() +{ + while ( true ) + { + level waittill( "last_board_torn", barrier_origin ); + + players = getplayers(); + + foreach ( player in players ) + { + if ( distancesquared( player.origin, barrier_origin ) <= 22500 ) + { + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "boards_gone" ); + break; + } + } + } +} + +locationstingerwait( zone_name, type ) +{ + array = sndlocationsarray(); + sndnorepeats = 3; + numcut = 0; + level.sndlastzone = undefined; + level.sndlocationplayed = 0; + level thread sndlocationbetweenroundswait(); + + while ( true ) + { + level waittill( "newzoneActive", activezone ); + + wait 0.1; + + if ( !sndlocationshouldplay( array, activezone ) ) + continue; + + if ( is_true( level.sndroundwait ) ) + continue; + else if ( is_true( level.sndstinger.isplaying ) ) + { + level thread sndlocationqueue( activezone ); + continue; + } + + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( activezone ); + level.sndlocationplayed = 1; + array = sndcurrentlocationarray( array, activezone, numcut, sndnorepeats ); + level.sndlastzone = activezone; + + if ( numcut >= sndnorepeats ) + numcut = 0; + else + numcut++; + + level waittill( "between_round_over" ); + + while ( is_true( level.sndroundwait ) ) + wait 0.1; + + level.sndlocationplayed = 0; + } +} + +sndlocationsarray() +{ + array = []; + array[0] = "zone_nml_18"; + array[1] = "zone_village_2"; + array[2] = "ug_bottom_zone"; + array[3] = "zone_air_stairs"; + array[4] = "zone_fire_stairs"; + array[5] = "zone_bolt_stairs"; + array[6] = "zone_ice_stairs"; + return array; +} + +sndlocationshouldplay( array, activezone ) +{ + shouldplay = 0; + + if ( activezone == "zone_start_lower" && !flag( "fountain_transport_active" ) ) + return shouldplay; + + if ( is_true( level.music_override ) ) + return shouldplay; + + foreach ( place in array ) + { + if ( place == activezone ) + shouldplay = 1; + } + + if ( shouldplay == 0 ) + return shouldplay; + + playersinlocal = 0; + players = getplayers(); + + foreach ( player in players ) + { + if ( player maps\mp\zombies\_zm_zonemgr::is_player_in_zone( activezone ) ) + { + if ( !is_true( player.afterlife ) ) + playersinlocal++; + } + } + + if ( playersinlocal >= 1 ) + shouldplay = 1; + else + shouldplay = 0; + + return shouldplay; +} + +sndcurrentlocationarray( current_array, activezone, numcut, max_num_removed ) +{ + if ( numcut >= max_num_removed ) + current_array = sndlocationsarray(); + + foreach ( place in current_array ) + { + if ( place == activezone ) + { + arrayremovevalue( current_array, place ); + break; + } + } + + return current_array; +} + +sndlocationbetweenrounds() +{ + level endon( "newzoneActive" ); + activezones = maps\mp\zombies\_zm_zonemgr::get_active_zone_names(); + + foreach ( zone in activezones ) + { + if ( isdefined( level.sndlastzone ) && zone == level.sndlastzone ) + continue; + + players = getplayers(); + + foreach ( player in players ) + { + if ( is_true( player.afterlife ) ) + continue; + + if ( player maps\mp\zombies\_zm_zonemgr::is_player_in_zone( zone ) ) + { + wait 0.1; + level notify( "newzoneActive", zone ); + return; + } + } + } +} + +sndlocationbetweenroundswait() +{ + while ( is_true( level.sndroundwait ) ) + wait 0.1; + + while ( true ) + { + level thread sndlocationbetweenrounds(); + + level waittill( "between_round_over" ); + + while ( is_true( level.sndroundwait ) ) + wait 0.1; + } +} + +sndlocationqueue( zone ) +{ + level endon( "newzoneActive" ); + + while ( is_true( level.sndstinger.isplaying ) ) + wait 0.5; + + level notify( "newzoneActive", zone ); +} + +sndplaystinger( state, player ) +{ + s = level.sndstinger; + + if ( !isdefined( s.states[state] ) ) + return; + + interrupt = s.states[state].interrupt == "ignore"; + + if ( !is_true( s.isplaying ) || is_true( interrupt ) ) + { + if ( interrupt ) + { + wait( s.states[state].prewait ); + playstinger( state, player, 1 ); + } + else if ( !level.sndroundwait ) + { + s.isplaying = 1; + wait( s.states[state].prewait ); + playstinger( state, player, 0 ); + level notify( "sndStingerDone" ); + s.isplaying = 0; + } + else if ( s.states[state].interrupt == "queue" ) + level thread sndqueuestinger( state, player ); + + return; + } + + if ( s.states[state].interrupt == "queue" ) + level thread sndqueuestinger( state, player ); +} + +playstinger( state, player, ignore ) +{ + s = level.sndstinger; + + if ( !isdefined( s.states[state] ) ) + return; + + if ( is_true( level.music_override ) ) + return; + + if ( is_true( ignore ) ) + { + if ( isdefined( player ) ) + player playsoundtoplayer( s.states[state].alias, player ); + else + { + s.ent playsound( s.states[state].alias ); + s.ent thread playstingerstop(); + } + } + else if ( isdefined( player ) ) + { + player playsoundtoplayer( s.states[state].alias, player ); + wait 8; + } + else + { + s.ent playsoundwithnotify( s.states[state].alias, "sndStingerDone" ); + s.ent thread playstingerstop(); + + s.ent waittill( "sndStingerDone" ); + } +} + +sndqueuestinger( state, player ) +{ + s = level.sndstinger; + count = 0; + + if ( is_true( s.queue ) ) + return; + else + { + s.queue = 1; + + while ( true ) + { + if ( is_true( level.sndroundwait ) || is_true( s.isplaying ) ) + { + wait 0.5; + count++; + + if ( count >= 120 ) + return; + } + else + break; + } + + level thread sndplaystinger( state, player ); + s.queue = 0; + } +} + +sndstingerroundwait() +{ + wait 25; + level.sndroundwait = 0; + + while ( true ) + { + level waittill( "end_of_round" ); + + level thread sndstingerroundwait_start(); + } +} + +sndstingerroundwait_start() +{ + level.sndroundwait = 1; + wait 0.05; + level thread sndstingerroundwait_end(); +} + +sndstingerroundwait_end() +{ + level endon( "end_of_round" ); + + level waittill( "between_round_over" ); + + wait 28; + level.sndroundwait = 0; +} + +playstingerstop() +{ + self endon( "sndStingerDone" ); + level endon( "sndStingerDone" ); + level waittill_any( "end_of_round", "sndStingerForceStop" ); + wait 2; + self stopsounds(); +} + +sndmusicegg() +{ + origins = []; + origins[0] = ( 2682.23, 4456.15, -302.352 ); + origins[1] = ( 721.043, -87.7068, 285.986 ); + origins[2] = ( -674.048, 2536.67, -112.483 ); + level.meteor_counter = 0; + level.music_override = 0; + + for ( i = 0; i < origins.size; i++ ) + level thread sndmusicegg_wait( origins[i] ); +} + +sndmusicegg_wait( bottle_origin ) +{ + temp_ent = spawn( "script_origin", bottle_origin ); + temp_ent playloopsound( "zmb_meteor_loop" ); + temp_ent thread maps\mp\zombies\_zm_sidequests::fake_use( "main_music_egg_hit", ::sndmusicegg_override ); + + temp_ent waittill( "main_music_egg_hit", player ); + + temp_ent stoploopsound( 1 ); + player playsound( "zmb_meteor_activate" ); + level.meteor_counter += 1; + + if ( level.meteor_counter == 3 ) + level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 310 ); + else + { + wait 1.5; + temp_ent delete(); + } +} + +sndmusicegg_override() +{ + if ( is_true( level.music_override ) ) + return false; + + return true; +} + +sndmuseggplay( ent, alias, time ) +{ + level.music_override = 1; + wait 1; + ent playsound( alias ); + level setclientfield( "mus_zmb_egg_snapshot_loop", 1 ); + level notify( "sndStingerForceStop" ); + level thread sndeggmusicwait( time ); + level waittill_either( "end_game", "sndSongDone" ); + ent stopsounds(); + level setclientfield( "mus_zmb_egg_snapshot_loop", 0 ); + wait 0.05; + ent delete(); + level.music_override = 0; +} + +sndeggmusicwait( time ) +{ + level endon( "end_game" ); + wait( time ); + level notify( "sndSongDone" ); +} + +sndplaystingerwithoverride( alias, length ) +{ + shouldplay = sndwait(); + + if ( !shouldplay ) + return; + + level.music_override = 1; + level setclientfield( "mus_zmb_egg_snapshot_loop", 1 ); + level notify( "sndStingerForceStop" ); + ent = spawn( "script_origin", ( 0, 0, 0 ) ); + ent playsound( alias ); + wait( length ); + level setclientfield( "mus_zmb_egg_snapshot_loop", 0 ); + level.music_override = 0; + wait 0.05; + ent delete(); +} + +sndwait() +{ + counter = 0; + + while ( is_true( level.music_override ) ) + { + wait 1; + counter++; + + if ( counter >= 60 ) + return false; + } + + return true; +} + +snddoormusictrigs() +{ + trigs = getentarray( "sndMusicDoor", "script_noteworthy" ); + + foreach ( trig in trigs ) + trig thread snddoormusic(); +} + +snddoormusic() +{ + self endon( "sndDoorMusic_Triggered" ); + + while ( true ) + { + self waittill( "trigger" ); + + if ( is_true( level.music_override ) ) + { + wait 0.1; + continue; + } + else + break; + } + + if ( isdefined( self.target ) ) + { + ent = getent( self.target, "targetname" ); + ent notify( "sndDoorMusic_Triggered" ); + } + + level thread sndplaystingerwithoverride( self.script_sound, self.script_int ); +} + +sndmaelstrom() +{ + trig = getent( "sndMaelstrom", "targetname" ); + + if ( !isdefined( trig ) ) + return; + + while ( true ) + { + trig waittill( "trigger", who ); + + if ( isplayer( who ) && !is_true( who.sndmaelstrom ) ) + { + who.sndmaelstrom = 1; + level setclientfield( "sndMaelstromPlr" + who getentitynumber(), 1 ); + } + + who thread sndmaelstrom_timeout(); + wait 0.1; + } +} + +sndmaelstrom_timeout() +{ + self notify( "sndMaelstrom_Timeout" ); + self endon( "sndMaelstrom_Timeout" ); + wait 2; + self.sndmaelstrom = 0; + level setclientfield( "sndMaelstromPlr" + self getentitynumber(), 0 ); +} + +snd115egg() +{ + level.snd115count = 0; + oneorigin = []; + oneorigin[0] = ( 2168, 4617, -289 ); + oneorigin[1] = ( 2170, 4953, -289 ); + fiveorigin = []; + fiveorigin[0] = ( -2459, 176, 243 ); + fiveorigin[1] = ( -2792, 175, 243 ); + + foreach ( origin in oneorigin ) + level thread snd115egg_wait( origin, 0 ); + + foreach ( origin in fiveorigin ) + level thread snd115egg_wait( origin, 1 ); +} + +snd115egg_wait( origin, shouldwait ) +{ + level endon( "sndEnd115" ); + temp_ent = spawn( "script_origin", origin ); + temp_ent thread snddelete115ent(); + + if ( shouldwait ) + temp_ent thread maps\mp\zombies\_zm_sidequests::fake_use( "main_music_egg_hit", ::snd115egg_5_override ); + else + temp_ent thread maps\mp\zombies\_zm_sidequests::fake_use( "main_music_egg_hit", ::snd115egg_1_override ); + + temp_ent waittill( "main_music_egg_hit", player ); + + player playsound( "zmb_meteor_activate" ); + level.snd115count++; + + if ( level.snd115count == 3 ) + { + temp_ent notify( "sndDeleting" ); + level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song_aether", 135 ); + level notify( "sndEnd115" ); + } + else + { + temp_ent notify( "sndDeleting" ); + temp_ent delete(); + } +} + +snd115egg_1_override() +{ + stance = self getstance(); + + if ( is_true( level.music_override ) || stance != "prone" ) + return false; + + return true; +} + +snd115egg_5_override() +{ + stance = self getstance(); + + if ( is_true( level.music_override ) || stance != "prone" || level.snd115count < 2 ) + return false; + + return true; +} + +snddelete115ent() +{ + self endon( "sndDeleting" ); + + level waittill( "sndEnd115" ); + + self delete(); +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_ambient_scripts.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_ambient_scripts.gsc new file mode 100644 index 0000000..fae22d9 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_ambient_scripts.gsc @@ -0,0 +1,117 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\animscripts\zm_death; + +tomb_ambient_precache() +{ + precachemodel( "veh_t6_dlc_zm_zeppelin" ); +} + +init_tomb_ambient_scripts() +{ + tomb_ambient_precache(); + registerclientfield( "world", "sky_battle_ambient_fx", 14000, 1, "int" ); + level thread start_sky_battle(); + level thread init_zeppelin( "sky_cowbell_zeppelin_low", "stop_ambient_zeppelins" ); + delay_thread( 20, ::init_zeppelin, "sky_cowbell_zeppelin_mid", "stop_ambient_zeppelins" ); + delay_thread( 40, ::init_zeppelin, "sky_cowbell_zeppelin_high", "stop_ambient_zeppelins" ); + level thread vista_robot_pose(); +} + +init_zeppelin( str_script_noteworthy, str_ender ) +{ + level endon( str_ender ); + a_path_structs = getstructarray( str_script_noteworthy, "script_noteworthy" ); + + if ( a_path_structs.size > 0 ) + { + m_zeppelin = spawn( "script_model", ( 0, 0, 0 ) ); + m_zeppelin setmodel( "veh_t6_dlc_zm_zeppelin" ); + m_zeppelin setforcenocull(); + + while ( true ) + m_zeppelin move_zeppelin_down_new_path( a_path_structs ); + } +} + +move_zeppelin_down_new_path( a_structs ) +{ + s_path_start = get_unused_struct( a_structs ); + self ghost(); + self moveto( s_path_start.origin, 0.1 ); + self rotateto( s_path_start.angles, 0.1 ); + + self waittill( "movedone" ); + + self show(); + + if ( !isdefined( s_path_start.goal_struct ) ) + { + assert( isdefined( s_path_start.target ), "move_zeppelin_down_new_path found start struct at " + s_path_start.origin + " without a target! These are needed for zeppelin splines!" ); + s_path_start.goal_struct = getstruct( s_path_start.target, "targetname" ); + assert( isdefined( s_path_start.goal_struct ), "move_zeppelin_down_new_path couldn't find goal for path start struct at " + s_path_start.origin ); + } + + n_move_time = randomfloatrange( 120.0, 150.0 ); + self moveto( s_path_start.goal_struct.origin, n_move_time ); + + self waittill( "movedone" ); +} + +get_unused_struct( a_structs ) +{ + a_valid_structs = []; + b_no_unused_structs = 0; + + while ( !a_valid_structs.size ) + { + foreach ( struct in a_structs ) + { + if ( !isdefined( struct.used ) || b_no_unused_structs ) + struct.used = 0; + + if ( !struct.used ) + a_valid_structs[a_valid_structs.size] = struct; + } + + if ( !a_valid_structs.size ) + b_no_unused_structs = 1; + } + + s_unused = random( a_valid_structs ); + s_unused.used = 1; + return s_unused; +} + +start_sky_battle() +{ + flag_wait( "start_zombie_round_logic" ); + level setclientfield( "sky_battle_ambient_fx", 1 ); +} + +#using_animtree("fxanim_props_dlc4"); + +vista_robot_pose() +{ + flag_wait( "start_zombie_round_logic" ); + a_robots = getstructarray( "trench_downed_robot_struct", "targetname" ); + + for ( i = 0; i < a_robots.size; i++ ) + { + if ( !isdefined( a_robots[i].angles ) ) + a_robots[i].angles = ( 0, 0, 0 ); + + v_origin = getstartorigin( a_robots[i].origin, a_robots[i].angles, %ai_zombie_giant_robot_vista ); + v_angles = getstartangles( a_robots[i].origin, a_robots[i].angles, %ai_zombie_giant_robot_vista ); + e_robot = spawn( "script_model", v_origin ); + e_robot.angles = v_angles; + e_robot setmodel( "veh_t6_dlc_zm_robot" ); + e_robot useanimtree( #animtree ); + e_robot setanim( %ai_zombie_giant_robot_vista, 1, 0, 1 ); + } +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_capture_zones.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_capture_zones.gsc new file mode 100644 index 0000000..d3d83d6 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_capture_zones.gsc @@ -0,0 +1,2505 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\animscripts\zm_death; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zm_tomb_vo; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zm_tomb_capture_zones_ffotd; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_challenges; +#include maps\mp\zombies\_zm_magicbox_tomb; +#include maps\mp\zombies\_zm_powerups; + +#using_animtree("fxanim_props_dlc4"); + +init_capture_zones() +{ + maps\mp\zm_tomb_capture_zones_ffotd::capture_zone_init_start(); + precache_everything(); + declare_objectives(); + flag_init( "zone_capture_in_progress" ); + flag_init( "recapture_event_in_progress" ); + flag_init( "capture_zones_init_done" ); + flag_init( "recapture_zombies_cleared" ); + flag_init( "generator_under_attack" ); + flag_init( "all_zones_captured" ); + flag_init( "generator_lost_to_recapture_zombies" ); + root = %root; + i = %fxanim_zom_tomb_generator_start_anim; + i = %fxanim_zom_tomb_generator_up_idle_anim; + i = %fxanim_zom_tomb_generator_down_idle_anim; + i = %fxanim_zom_tomb_generator_end_anim; + i = %fxanim_zom_tomb_generator_fluid_down_anim; + i = %fxanim_zom_tomb_generator_fluid_up_anim; + i = %fxanim_zom_tomb_generator_fluid_rotate_down_anim; + i = %fxanim_zom_tomb_generator_fluid_rotate_up_anim; + i = %fxanim_zom_tomb_packapunch_pc1_anim; + i = %fxanim_zom_tomb_packapunch_pc2_anim; + i = %fxanim_zom_tomb_packapunch_pc3_anim; + i = %fxanim_zom_tomb_packapunch_pc4_anim; + i = %fxanim_zom_tomb_packapunch_pc5_anim; + i = %fxanim_zom_tomb_packapunch_pc6_anim; + i = %fxanim_zom_tomb_packapunch_pc7_anim; + i = %fxanim_zom_tomb_pack_return_pc1_anim; + i = %fxanim_zom_tomb_pack_return_pc2_anim; + i = %fxanim_zom_tomb_pack_return_pc3_anim; + i = %fxanim_zom_tomb_pack_return_pc4_anim; + i = %fxanim_zom_tomb_pack_return_pc5_anim; + i = %fxanim_zom_tomb_pack_return_pc6_anim; + i = %fxanim_zom_tomb_monolith_inductor_pull_anim; + i = %fxanim_zom_tomb_monolith_inductor_pull_idle_anim; + i = %fxanim_zom_tomb_monolith_inductor_release_anim; + i = %fxanim_zom_tomb_monolith_inductor_shake_anim; + i = %fxanim_zom_tomb_monolith_inductor_idle_anim; + level thread setup_capture_zones(); +} + +precache_everything() +{ + precachemodel( "p6_zm_tm_zone_capture_hole" ); + precachemodel( "p6_zm_tm_packapunch" ); + precacherumble( "generator_active" ); + precachestring( &"ZM_TOMB_OBJ_CAPTURE_1" ); + precachestring( &"ZM_TOMB_OBJ_RECAPTURE_1" ); + precachestring( &"ZM_TOMB_OBJ_CAPTURE_2" ); + precachestring( &"ZM_TOMB_OBJ_RECAPTURE_2" ); + precachestring( &"ZM_TOMB_OBJ_RECAPTURE_ZOMBIE" ); +} + +declare_objectives() +{ + objective_add( 0, "invisible", ( 0, 0, 0 ), &"ZM_TOMB_OBJ_CAPTURE_1" ); + objective_add( 1, "invisible", ( 0, 0, 0 ), &"ZM_TOMB_OBJ_RECAPTURE_2" ); + objective_add( 2, "invisible", ( 0, 0, 0 ), &"ZM_TOMB_OBJ_CAPTURE_2" ); + objective_add( 3, "invisible", ( 0, 0, 0 ), &"ZM_TOMB_OBJ_RECAPTURE_ZOMBIE" ); +} + +init_pap_animtree() +{ + scriptmodelsuseanimtree( #animtree ); +} + +setup_capture_zones() +{ + spawner_capture_zombie = getent( "capture_zombie_spawner", "targetname" ); + spawner_capture_zombie add_spawn_function( ::capture_zombie_spawn_init ); + a_s_generator = getstructarray( "s_generator", "targetname" ); + registerclientfield( "world", "packapunch_anim", 14000, 3, "int" ); + registerclientfield( "actor", "zone_capture_zombie", 14000, 1, "int" ); + registerclientfield( "scriptmover", "zone_capture_emergence_hole", 14000, 1, "int" ); + registerclientfield( "world", "zc_change_progress_bar_color", 14000, 1, "int" ); + registerclientfield( "world", "zone_capture_hud_all_generators_captured", 14000, 1, "int" ); + registerclientfield( "world", "zone_capture_perk_machine_smoke_fx_always_on", 14000, 1, "int" ); + registerclientfield( "world", "pap_monolith_ring_shake", 14000, 1, "int" ); + + foreach ( struct in a_s_generator ) + { + registerclientfield( "world", struct.script_noteworthy, 14000, 7, "float" ); + registerclientfield( "world", "state_" + struct.script_noteworthy, 14000, 3, "int" ); + registerclientfield( "world", "zone_capture_hud_generator_" + struct.script_int, 14000, 2, "int" ); + registerclientfield( "world", "zone_capture_monolith_crystal_" + struct.script_int, 14000, 1, "int" ); + registerclientfield( "world", "zone_capture_perk_machine_smoke_fx_" + struct.script_int, 14000, 1, "int" ); + } + + flag_wait( "start_zombie_round_logic" ); + level.magic_box_zbarrier_state_func = ::set_magic_box_zbarrier_state; + level.custom_perk_validation = ::check_perk_machine_valid; + level thread track_max_player_zombie_points(); + + foreach ( s_generator in a_s_generator ) + s_generator thread init_capture_zone(); + + register_elements_powered_by_zone_capture_generators(); + setup_perk_machines_not_controlled_by_zone_capture(); + pack_a_punch_init(); + level thread recapture_round_tracker(); + level.zone_capture.recapture_zombies = []; + level.zone_capture.last_zone_captured = undefined; + level.zone_capture.spawn_func_capture_zombie = ::init_capture_zombie; + level.zone_capture.spawn_func_recapture_zombie = ::init_recapture_zombie; +/# + level thread watch_for_open_sesame(); + level thread debug_watch_for_zone_capture(); + level thread debug_watch_for_zone_recapture(); +#/ + maps\mp\zombies\_zm_spawner::register_zombie_death_event_callback( ::recapture_zombie_death_func ); + level.custom_derive_damage_refs = ::zone_capture_gib_think; + setup_inaccessible_zombie_attack_points(); + level thread quick_revive_game_type_watcher(); + level thread quick_revive_solo_leave_watcher(); + level thread all_zones_captured_vo(); + flag_set( "capture_zones_init_done" ); + level setclientfield( "zone_capture_perk_machine_smoke_fx_always_on", 1 ); + maps\mp\zm_tomb_capture_zones_ffotd::capture_zone_init_end(); +} + +all_zones_captured_vo() +{ + flag_wait( "all_zones_captured" ); + flag_waitopen( "story_vo_playing" ); + set_players_dontspeak( 1 ); + flag_set( "story_vo_playing" ); + e_speaker = get_closest_player_to_richtofen(); + + if ( isdefined( e_speaker ) ) + { + e_speaker set_player_dontspeak( 0 ); + e_speaker create_and_play_dialog( "zone_capture", "all_generators_captured" ); + e_speaker waittill_any( "done_speaking", "disconnect" ); + } + + e_richtofen = get_player_named( "Richtofen" ); + + if ( isdefined( e_richtofen ) ) + { + e_richtofen set_player_dontspeak( 0 ); + e_richtofen create_and_play_dialog( "zone_capture", "all_generators_captured" ); + } + + set_players_dontspeak( 0 ); + flag_clear( "story_vo_playing" ); +} + +get_closest_player_to_richtofen() +{ + a_players = get_players(); + e_speaker = undefined; + e_richtofen = get_player_named( "Richtofen" ); + + if ( isdefined( e_richtofen ) ) + { + if ( a_players.size > 1 ) + { + arrayremovevalue( a_players, e_richtofen, 0 ); + e_speaker = arraysort( a_players, e_richtofen.origin, 1 )[0]; + } + else + e_speaker = undefined; + } + else + e_speaker = get_random_speaker(); + + return e_speaker; +} + +get_player_named( str_character_name ) +{ + e_character = undefined; + + foreach ( player in get_players() ) + { + if ( isdefined( player.character_name ) && player.character_name == str_character_name ) + e_character = player; + } + + return e_character; +} + +quick_revive_game_type_watcher() +{ + while ( true ) + { + level waittill( "revive_hide" ); + + wait 1; + t_revive_machine = level.zone_capture.zones["generator_start_bunker"].perk_machines["revive"]; + + if ( level.zone_capture.zones["generator_start_bunker"] ent_flag( "player_controlled" ) ) + { + level notify( "revive_on" ); + t_revive_machine.is_locked = 0; + t_revive_machine maps\mp\zombies\_zm_perks::reset_vending_hint_string(); + } + else + { + level notify( "revive_off" ); + t_revive_machine.is_locked = 1; + t_revive_machine sethintstring( &"ZM_TOMB_ZC" ); + } + } +} + +quick_revive_solo_leave_watcher() +{ + if ( flag_exists( "solo_revive" ) ) + { + flag_wait( "solo_revive" ); + level setclientfield( "zone_capture_perk_machine_smoke_fx_1", 0 ); + } +} + +revive_perk_fx_think() +{ + return !flag_exists( "solo_revive" ) || !flag( "solo_revive" ); +} + +setup_inaccessible_zombie_attack_points() +{ + set_attack_point_as_inaccessible( "generator_start_bunker", 5 ); + set_attack_point_as_inaccessible( "generator_start_bunker", 11 ); + set_attack_point_as_inaccessible( "generator_tank_trench", 4 ); + set_attack_point_as_inaccessible( "generator_tank_trench", 5 ); + set_attack_point_as_inaccessible( "generator_tank_trench", 6 ); +} + +set_attack_point_as_inaccessible( str_zone, n_index ) +{ + assert( isdefined( level.zone_capture.zones[str_zone] ), "set_attack_point_as_inaccessible couldn't find " + str_zone + " in level.zone_capture's zone array!" ); + level.zone_capture.zones[str_zone] ent_flag_wait( "zone_initialized" ); + assert( isdefined( level.zone_capture.zones[str_zone].zombie_attack_points[n_index] ), "set_attack_points_as_inaccessible couldn't find index " + n_index + " on zone " + str_zone ); + level.zone_capture.zones[str_zone].zombie_attack_points[n_index].inaccessible = 1; +} + +setup_perk_machines_not_controlled_by_zone_capture() +{ + level.zone_capture.perk_machines_always_on = array( "specialty_additionalprimaryweapon" ); +} + +track_max_player_zombie_points() +{ + while ( true ) + { + a_players = get_players(); + + foreach ( player in a_players ) + player.n_capture_zombie_points = 0; + + level waittill( "between_round_over" ); + } +} + +pack_a_punch_dummy_init() +{ + +} + +pack_a_punch_init() +{ + vending_weapon_upgrade_trigger = getentarray( "specialty_weapupgrade", "script_noteworthy" ); + level.pap_triggers = vending_weapon_upgrade_trigger; + t_pap = getent( "specialty_weapupgrade", "script_noteworthy" ); + t_pap.machine ghost(); + t_pap.machine notsolid(); + t_pap.bump enablelinkto(); + t_pap.bump linkto( t_pap ); + level thread pack_a_punch_think(); +} + +pack_a_punch_think() +{ + while ( true ) + { + flag_wait( "all_zones_captured" ); + pack_a_punch_enable(); + flag_waitopen( "all_zones_captured" ); + pack_a_punch_disable(); + } +} + +pack_a_punch_enable() +{ + t_pap = getent( "specialty_weapupgrade", "script_noteworthy" ); + t_pap trigger_on(); + flag_set( "power_on" ); + level setclientfield( "zone_capture_hud_all_generators_captured", 1 ); + + if ( !flag( "generator_lost_to_recapture_zombies" ) ) + level notify( "all_zones_captured_none_lost" ); +} + +pack_a_punch_disable() +{ + t_pap = getent( "specialty_weapupgrade", "script_noteworthy" ); + level setclientfield( "zone_capture_hud_all_generators_captured", 0 ); + flag_waitopen( "pack_machine_in_use" ); + t_pap trigger_off(); +} + +register_elements_powered_by_zone_capture_generators() +{ + register_random_perk_machine_for_zone( "generator_start_bunker", "starting_bunker" ); + register_perk_machine_for_zone( "generator_start_bunker", "revive", "vending_revive", ::revive_perk_fx_think ); + register_mystery_box_for_zone( "generator_start_bunker", "bunker_start_chest" ); + register_random_perk_machine_for_zone( "generator_tank_trench", "trenches_right" ); + register_mystery_box_for_zone( "generator_tank_trench", "bunker_tank_chest" ); + register_random_perk_machine_for_zone( "generator_mid_trench", "trenches_left" ); + register_perk_machine_for_zone( "generator_mid_trench", "sleight", "vending_sleight" ); + register_mystery_box_for_zone( "generator_mid_trench", "bunker_cp_chest" ); + register_random_perk_machine_for_zone( "generator_nml_right", "nml" ); + register_perk_machine_for_zone( "generator_nml_right", "juggernog", "vending_jugg" ); + register_mystery_box_for_zone( "generator_nml_right", "nml_open_chest" ); + register_random_perk_machine_for_zone( "generator_nml_left", "farmhouse" ); + register_perk_machine_for_zone( "generator_nml_left", "marathon", "vending_marathon" ); + register_mystery_box_for_zone( "generator_nml_left", "nml_farm_chest" ); + register_random_perk_machine_for_zone( "generator_church", "church" ); + register_mystery_box_for_zone( "generator_church", "village_church_chest" ); +} + +register_perk_machine_for_zone( str_zone_name, str_perk_name, str_machine_targetname, func_perk_fx_think ) +{ + assert( isdefined( level.zone_capture.zones[str_zone_name] ), "register_perk_machine_for_zone can't find " + str_zone_name + " has not been initialized in level.zone_capture.zones array!" ); + + if ( !isdefined( level.zone_capture.zones[str_zone_name].perk_machines ) ) + level.zone_capture.zones[str_zone_name].perk_machines = []; + + if ( !isdefined( level.zone_capture.zones[str_zone_name].perk_machines[str_perk_name] ) ) + { + e_perk_machine_trigger = get_perk_machine_trigger_from_vending_entity( str_machine_targetname ); + e_perk_machine_trigger.str_zone_name = str_zone_name; + level.zone_capture.zones[str_zone_name].perk_machines[str_perk_name] = e_perk_machine_trigger; + } + + level.zone_capture.zones[str_zone_name].perk_fx_func = func_perk_fx_think; +} + +register_random_perk_machine_for_zone( str_zone_name, str_identifier ) +{ + assert( isdefined( level.zone_capture.zones[str_zone_name] ), "register_random_perk_machine_for_zone can't find " + str_zone_name + " has not been initialized in level.zone_capture.zones array!" ); + + if ( !isdefined( level.zone_capture.zones[str_zone_name].perk_machines_random ) ) + level.zone_capture.zones[str_zone_name].perk_machines_random = []; + + a_random_perk_machines = getentarray( "random_perk_machine", "targetname" ); + + foreach ( random_perk_machine in a_random_perk_machines ) + { + if ( isdefined( random_perk_machine.script_string ) && random_perk_machine.script_string == str_identifier ) + level.zone_capture.zones[str_zone_name].perk_machines_random[level.zone_capture.zones[str_zone_name].perk_machines_random.size] = random_perk_machine; + } +} + +register_mystery_box_for_zone( str_zone_name, str_identifier ) +{ + assert( isdefined( level.zone_capture.zones[str_zone_name] ), "register_mystery_box_for_zone can't find " + str_zone_name + " has not been initialized in level.zone_capture.zones array!" ); + + if ( !isdefined( level.zone_capture.zones[str_zone_name].mystery_boxes ) ) + level.zone_capture.zones[str_zone_name].mystery_boxes = []; + + s_mystery_box = get_mystery_box_from_script_noteworthy( str_identifier ); + s_mystery_box.unitrigger_stub.prompt_and_visibility_func = ::magic_box_trigger_update_prompt; + s_mystery_box.unitrigger_stub.zone = str_zone_name; + s_mystery_box.zone_capture_area = str_zone_name; + s_mystery_box.zbarrier.zone_capture_area = str_zone_name; + level.zone_capture.zones[str_zone_name].mystery_boxes[level.zone_capture.zones[str_zone_name].mystery_boxes.size] = s_mystery_box; +} + +get_mystery_box_from_script_noteworthy( str_script_noteworthy ) +{ + s_box = undefined; + + foreach ( s_mystery_box in level.chests ) + { + if ( isdefined( s_mystery_box.script_noteworthy ) && s_mystery_box.script_noteworthy == str_script_noteworthy ) + s_box = s_mystery_box; + } + + assert( isdefined( s_mystery_box ), "get_mystery_box_from_script_noteworthy() couldn't find a mystery box with script_noteworthy = " + str_script_noteworthy ); + return s_box; +} + +enable_perk_machines_in_zone() +{ + if ( isdefined( self.perk_machines ) && isarray( self.perk_machines ) ) + { + a_keys = getarraykeys( self.perk_machines ); + + for ( i = 0; i < a_keys.size; i++ ) + level notify( a_keys[i] + "_on" ); + + for ( i = 0; i < a_keys.size; i++ ) + { + e_perk_trigger = self.perk_machines[a_keys[i]]; + e_perk_trigger.is_locked = 0; + e_perk_trigger maps\mp\zombies\_zm_perks::reset_vending_hint_string(); + } + } +} + +disable_perk_machines_in_zone() +{ + if ( isdefined( self.perk_machines ) && isarray( self.perk_machines ) ) + { + a_keys = getarraykeys( self.perk_machines ); + + for ( i = 0; i < a_keys.size; i++ ) + level notify( a_keys[i] + "_off" ); + + for ( i = 0; i < a_keys.size; i++ ) + { + e_perk_trigger = self.perk_machines[a_keys[i]]; + e_perk_trigger.is_locked = 1; + e_perk_trigger sethintstring( &"ZM_TOMB_ZC" ); + } + } +} + +enable_random_perk_machines_in_zone() +{ + if ( isdefined( self.perk_machines_random ) && isarray( self.perk_machines_random ) ) + { + foreach ( random_perk_machine in self.perk_machines_random ) + { + random_perk_machine.is_locked = 0; + random_perk_machine sethintstring( &"ZM_TOMB_RPB", level._random_zombie_perk_cost ); + } + } +} + +disable_random_perk_machines_in_zone() +{ + if ( isdefined( self.perk_machines_random ) && isarray( self.perk_machines_random ) ) + { + foreach ( random_perk_machine in self.perk_machines_random ) + random_perk_machine.is_locked = 1; + } +} + +enable_mystery_boxes_in_zone() +{ + foreach ( mystery_box in self.mystery_boxes ) + { + mystery_box.is_locked = 0; + mystery_box.zbarrier set_magic_box_zbarrier_state( "player_controlled" ); + mystery_box.zbarrier setclientfield( "magicbox_runes", 1 ); + } +} + +disable_mystery_boxes_in_zone() +{ + foreach ( mystery_box in self.mystery_boxes ) + { + mystery_box.is_locked = 1; + mystery_box.zbarrier set_magic_box_zbarrier_state( "zombie_controlled" ); + mystery_box.zbarrier setclientfield( "magicbox_runes", 0 ); + } +} + +get_perk_machine_trigger_from_vending_entity( str_vending_machine_targetname ) +{ + e_trigger = getent( str_vending_machine_targetname, "target" ); + assert( isdefined( e_trigger ), "get_perk_machine_trigger_from_vending_entity couldn't find perk machine trigger with target = " + str_vending_machine_targetname ); + return e_trigger; +} + +check_perk_machine_valid( player ) +{ + if ( isdefined( self.script_noteworthy ) && isinarray( level.zone_capture.perk_machines_always_on, self.script_noteworthy ) ) + b_machine_valid = 1; + else + { + assert( isdefined( self.str_zone_name ), "str_zone_name field missing on perk machine! This is required by the zone capture system!" ); + b_machine_valid = level.zone_capture.zones[self.str_zone_name] ent_flag( "player_controlled" ); + } + + if ( !b_machine_valid ) + player create_and_play_dialog( "lockdown", "power_off" ); + + return b_machine_valid; +} + +init_capture_zone() +{ + assert( isdefined( self.script_noteworthy ), "capture zone struct is missing script_noteworthy KVP! This is required for init_capture_zone()" ); + + if ( !isdefined( level.zone_capture ) ) + level.zone_capture = spawnstruct(); + + if ( !isdefined( level.zone_capture.zones ) ) + level.zone_capture.zones = []; + + assert( !isdefined( level.zone_capture.zones[self.script_noteworthy] ), "init_capture_zone() attempting to initialize an existing zone with name '" + self.script_noteworthy + "'" ); + self.n_current_progress = 0; + self.n_last_progress = 0; + self setup_generator_unitrigger(); + self.str_zone = get_zone_from_position( self.origin, 1 ); + self.sndent = spawn( "script_origin", self.origin ); + assert( isdefined( self.script_int ), "script_int KVP is required by init_capture_zone() to identify the objective index, but it's missing on zone '" + self.script_noteworthy + "'" ); + self ent_flag_init( "attacked_by_recapture_zombies" ); + self ent_flag_init( "current_recapture_target_zone" ); + self ent_flag_init( "player_controlled" ); + self ent_flag_init( "zone_contested" ); + self ent_flag_init( "zone_initialized" ); + level.zone_capture.zones[self.script_noteworthy] = self; + self set_zombie_controlled_area( 1 ); + self setup_zombie_attack_points(); + self ent_flag_set( "zone_initialized" ); + self thread wait_for_capture_trigger(); +} + +setup_generator_unitrigger() +{ + s_unitrigger_stub = spawnstruct(); + s_unitrigger_stub.origin = self.origin; + s_unitrigger_stub.angles = self.angles; + s_unitrigger_stub.radius = 32; + s_unitrigger_stub.script_length = 128; + s_unitrigger_stub.script_width = 128; + s_unitrigger_stub.script_height = 128; + s_unitrigger_stub.cursor_hint = "HINT_NOICON"; + s_unitrigger_stub.hint_string = &"ZM_TOMB_CAP"; + s_unitrigger_stub.hint_parm1 = [[ ::get_generator_capture_start_cost ]](); + s_unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + s_unitrigger_stub.require_look_at = 1; + s_unitrigger_stub.prompt_and_visibility_func = ::generator_trigger_prompt_and_visibility; + s_unitrigger_stub.generator_struct = self; + unitrigger_force_per_player_triggers( s_unitrigger_stub, 1 ); + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( s_unitrigger_stub, ::generator_unitrigger_think ); +} + +generator_trigger_prompt_and_visibility( e_player ) +{ + b_can_see_hint = 1; + s_zone = self.stub.generator_struct; + + if ( s_zone ent_flag( "zone_contested" ) || s_zone ent_flag( "player_controlled" ) ) + b_can_see_hint = 0; + + if ( flag( "zone_capture_in_progress" ) ) + self sethintstring( &"ZM_TOMB_ZCIP" ); + else + self sethintstring( &"ZM_TOMB_CAP", get_generator_capture_start_cost() ); + + self setinvisibletoplayer( e_player, !b_can_see_hint ); + return b_can_see_hint; +} + +generator_unitrigger_think() +{ + self endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "trigger", e_player ); + + if ( !is_player_valid( e_player ) || e_player is_reviving_any() || e_player != self.parent_player ) + continue; + + if ( e_player.score < get_generator_capture_start_cost() ) + { + e_player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_capture" ); + continue; + } + + if ( flag( "zone_capture_in_progress" ) ) + continue; + + self setinvisibletoall(); + self.stub.generator_struct notify( "start_generator_capture", e_player ); + } +} + +setup_zombie_attack_points() +{ + self.zombie_attack_points = []; + v_right = anglestoright( self.angles ); + self add_attack_points_from_anchor_origin( self.origin, 0, 52 ); + self add_attack_points_from_anchor_origin( self.origin + v_right * 170, 4, 32 ); + self add_attack_points_from_anchor_origin( self.origin + v_right * -1 * 170, 8, 32 ); +} + +add_attack_points_from_anchor_origin( v_origin, n_start_index, n_scale ) +{ + v_forward = anglestoforward( self.angles ); + v_right = anglestoright( self.angles ); + self.zombie_attack_points[n_start_index] = init_attack_point( v_origin + v_forward * n_scale, v_origin ); + self.zombie_attack_points[n_start_index + 1] = init_attack_point( v_origin + v_right * n_scale, v_origin ); + self.zombie_attack_points[n_start_index + 2] = init_attack_point( v_origin + v_forward * -1 * n_scale, v_origin ); + self.zombie_attack_points[n_start_index + 3] = init_attack_point( v_origin + v_right * -1 * n_scale, v_origin ); +} + +init_attack_point( v_origin, v_center_pillar ) +{ + s_temp = spawnstruct(); + s_temp.is_claimed = 0; + s_temp.claimed_by = undefined; + s_temp.origin = v_origin; + s_temp.inaccessible = 0; + s_temp.v_center_pillar = v_center_pillar; + return s_temp; +} + +wait_for_capture_trigger() +{ + while ( true ) + { + self waittill( "start_generator_capture", e_player ); + + if ( !flag( "zone_capture_in_progress" ) ) + { + flag_set( "zone_capture_in_progress" ); + self.generator_cost = get_generator_capture_start_cost(); + e_player minus_to_player_score( self.generator_cost ); + e_player delay_thread( 2.5, ::create_and_play_dialog, "zone_capture", "capture_started" ); + self maps\mp\zm_tomb_capture_zones_ffotd::capture_event_start(); + self thread monitor_capture_zombies(); + self thread activate_capture_zone(); + self ent_flag_wait( "zone_contested" ); + capture_event_handle_ai_limit(); + self ent_flag_waitopen( "zone_contested" ); + self maps\mp\zm_tomb_capture_zones_ffotd::capture_event_end(); + wait 1; + + if ( isdefined( e_player ) && self ent_flag( "player_controlled" ) ) + self refund_generator_cost_if_player_captured_it( e_player ); + } + else + { + flag_wait( "zone_capture_in_progress" ); + flag_waitopen( "zone_capture_in_progress" ); + } + + capture_event_handle_ai_limit(); + + if ( self ent_flag( "player_controlled" ) ) + self ent_flag_waitopen( "player_controlled" ); + } +} + +refund_generator_cost_if_player_captured_it( e_player ) +{ + if ( isinarray( self get_players_in_capture_zone(), e_player ) ) + { + n_refund_amount = self.generator_cost; + b_double_points_active = level.zombie_vars["allies"]["zombie_point_scalar"] == 2; + n_multiplier = 1; + + if ( b_double_points_active ) + n_multiplier = 0.5; + + e_player add_to_player_score( int( n_refund_amount * n_multiplier ) ); + } +} + +get_generator_capture_start_cost() +{ + return 200 * get_players().size; +} + +capture_event_handle_ai_limit() +{ + n_capture_zombies_needed = calculate_capture_event_zombies_needed(); + level.zombie_ai_limit = 24 - n_capture_zombies_needed; + + while ( get_current_zombie_count() > level.zombie_ai_limit ) + { + ai_zombie = get_zombie_to_delete(); + + if ( isdefined( ai_zombie ) ) + ai_zombie thread delete_zombie_for_capture_event(); + + wait_network_frame(); + } +} + +get_zombie_to_delete() +{ + ai_zombie = undefined; + a_zombies = get_round_enemy_array(); + + if ( a_zombies.size > 0 ) + ai_zombie = random( a_zombies ); + + return ai_zombie; +} + +delete_zombie_for_capture_event() +{ + if ( isdefined( self ) ) + { + playfx( level._effect["tesla_elec_kill"], self.origin ); + self ghost(); + } + + wait_network_frame(); + + if ( isdefined( self ) ) + self delete(); +} + +calculate_capture_event_zombies_needed() +{ + n_capture_zombies_needed = get_capture_zombies_needed(); + n_recapture_zombies_needed = 0; + + if ( flag( "recapture_event_in_progress" ) ) + n_recapture_zombies_needed = get_recapture_zombies_needed(); + + return n_capture_zombies_needed + n_recapture_zombies_needed; +} + +get_capture_zombies_needed( b_per_zone = 0 ) +{ + a_contested_zones = get_contested_zones(); + + switch ( a_contested_zones.size ) + { + case 0: + n_capture_zombies_needed = 0; + n_capture_zombies_needed_per_zone = 0; + break; + case 1: + n_capture_zombies_needed = 4; + n_capture_zombies_needed_per_zone = 4; + break; + case 2: + n_capture_zombies_needed = 6; + n_capture_zombies_needed_per_zone = 3; + break; + case 3: + n_capture_zombies_needed = 6; + n_capture_zombies_needed_per_zone = 2; + break; + case 4: + n_capture_zombies_needed = 8; + n_capture_zombies_needed_per_zone = 2; + break; + default: +/# + iprintlnbold( "get_capture_zombies_needed() unhandled case. active capture events = " + a_contested_zones.size ); +#/ + n_capture_zombies_needed = 2 * a_contested_zones.size; + n_capture_zombies_needed_per_zone = 2; + break; + } + + if ( b_per_zone ) + b_capture_zombies_needed = n_capture_zombies_needed_per_zone; + + return n_capture_zombies_needed; +} + +set_capture_zombies_needed_per_zone() +{ + a_contested_zones = get_contested_zones(); + n_zombies_needed_per_zone = get_capture_zombies_needed( 1 ); + + foreach ( zone in a_contested_zones ) + { + if ( zone ent_flag( "current_recapture_target_zone" ) ) + continue; + + zone.capture_zombie_limit = n_zombies_needed_per_zone; + } + + return n_zombies_needed_per_zone; +} + +get_recapture_zombies_needed() +{ + if ( level.is_forever_solo_game ) + n_recapture_zombies_needed = 4; + else + n_recapture_zombies_needed = 6; + + return n_recapture_zombies_needed; +} + +activate_capture_zone( b_show_emergence_holes = 1 ) +{ + if ( !flag( "recapture_event_in_progress" ) ) + self thread generator_initiated_vo(); + + self.a_emergence_hole_structs = getstructarray( self.target, "targetname" ); + self show_emergence_holes( b_show_emergence_holes ); + + if ( flag( "recapture_event_in_progress" ) && self ent_flag( "current_recapture_target_zone" ) ) + { + flag_wait_any( "generator_under_attack", "recapture_zombies_cleared" ); + + if ( flag( "recapture_zombies_cleared" ) ) + return; + } + + self capture_progress_think(); + self destroy_emergence_holes(); +} + +show_emergence_holes( b_show_emergence_holes ) +{ + self destroy_emergence_holes(); + + if ( b_show_emergence_holes ) + { + self.a_spawner_holes = []; + self.a_emergence_holes = []; + + foreach ( s_spawner_hole in self.a_emergence_hole_structs ) + self.a_emergence_holes[self.a_emergence_holes.size] = s_spawner_hole emergence_hole_spawn(); + } +} + +destroy_emergence_holes() +{ + if ( isdefined( self.a_emergence_holes ) && self.a_emergence_holes.size > 0 ) + { + foreach ( m_emergence_hole in self.a_emergence_holes ) + { + if ( isdefined( m_emergence_hole ) ) + { + m_emergence_hole setclientfield( "zone_capture_emergence_hole", 0 ); + m_emergence_hole ghost(); + m_emergence_hole thread delete_self_after_time( randomfloatrange( 0.5, 2.0 ) ); + } + + wait_network_frame(); + } + } +} + +delete_self_after_time( n_time ) +{ + wait( n_time ); + + if ( isdefined( self ) ) + self delete(); +} + +monitor_capture_zombies() +{ + self ent_flag_wait( "zone_contested" ); + e_spawner_capture_zombie = getent( "capture_zombie_spawner", "targetname" ); + self.capture_zombies = []; + self.capture_zombie_limit = self set_capture_zombies_needed_per_zone(); + + while ( self ent_flag( "zone_contested" ) ) + { + self.capture_zombies = array_removedead( self.capture_zombies ); + + if ( self.capture_zombies.size < self.capture_zombie_limit ) + { + ai = spawn_zombie( e_spawner_capture_zombie ); + s_spawn_point = self get_emergence_hole_spawn_point(); + ai thread [[ level.zone_capture.spawn_func_capture_zombie ]]( self, s_spawn_point ); + self.capture_zombies[self.capture_zombies.size] = ai; + } + + wait 0.5; + } +} + +monitor_recapture_zombies() +{ + e_spawner_capture_zombie = getent( "capture_zombie_spawner", "targetname" ); + self.capture_zombie_limit = get_recapture_zombies_needed(); + n_capture_zombie_spawns = 0; + self thread play_vo_when_generator_is_attacked(); + + while ( flag( "recapture_event_in_progress" ) && n_capture_zombie_spawns < self.capture_zombie_limit ) + { + level.zone_capture.recapture_zombies = array_removedead( level.zone_capture.recapture_zombies ); + ai = spawn_zombie( e_spawner_capture_zombie ); + n_capture_zombie_spawns++; + s_spawn_point = self get_emergence_hole_spawn_point(); + ai thread [[ level.zone_capture.spawn_func_recapture_zombie ]]( self, s_spawn_point ); + level.zone_capture.recapture_zombies[level.zone_capture.recapture_zombies.size] = ai; + wait 0.5; + } + + level monitor_recapture_zombie_count(); +} + +play_vo_when_generator_is_attacked() +{ + self endon( "zone_contested" ); + level endon( "recapture_event_in_progress" ); + + self waittill( "zombies_attacking_generator" ); + + broadcast_vo_category_to_team( "recapture_generator_attacked", 3.5 ); +} + +get_emergence_hole_spawn_point() +{ + while ( true ) + { + if ( isdefined( self.a_emergence_hole_structs ) && self.a_emergence_hole_structs.size > 0 ) + { + s_spawn_point = self get_unused_emergence_hole_spawn_point(); + s_spawn_point.spawned_zombie = 1; + return s_spawn_point; + } + else + self.a_emergence_hole_structs = getstructarray( self.target, "targetname" ); + + wait 0.05; + } +} + +get_unused_emergence_hole_spawn_point() +{ + a_valid_spawn_points = []; + b_all_points_used = 0; + + while ( !a_valid_spawn_points.size ) + { + foreach ( s_emergence_hole in self.a_emergence_hole_structs ) + { + if ( !isdefined( s_emergence_hole.spawned_zombie ) || b_all_points_used ) + s_emergence_hole.spawned_zombie = 0; + + if ( !s_emergence_hole.spawned_zombie ) + a_valid_spawn_points[a_valid_spawn_points.size] = s_emergence_hole; + } + + if ( !a_valid_spawn_points.size ) + b_all_points_used = 1; + } + + s_spawn_point = random( a_valid_spawn_points ); + return s_spawn_point; +} + +emergence_hole_spawn() +{ + m_emergence_hole = spawn( "script_model", self.origin ); + m_emergence_hole.angles = self.angles; + m_emergence_hole setmodel( "p6_zm_tm_zone_capture_hole" ); + wait_network_frame(); + m_emergence_hole setclientfield( "zone_capture_emergence_hole", 1 ); + return m_emergence_hole; +} + +init_zone_capture_zombie_common( s_spawn_point ) +{ + self setphysparams( 15, 0, 72 ); + self.ignore_enemy_count = 1; + self dug_zombie_rise( s_spawn_point ); + self playsound( "zmb_vocals_capzomb_spawn" ); + self setclientfield( "zone_capture_zombie", 1 ); + self init_anim_rate(); +} + +init_anim_rate() +{ + self setclientfield( "anim_rate", 1 ); + n_rate = self getclientfield( "anim_rate" ); + self setentityanimrate( n_rate ); +} + +zone_capture_gib_think( refs, point, weaponname ) +{ + if ( isdefined( self.is_recapture_zombie ) && self.is_recapture_zombie ) + { + arrayremovevalue( refs, "right_leg", 0 ); + arrayremovevalue( refs, "left_leg", 0 ); + arrayremovevalue( refs, "no_legs", 0 ); + } + + return refs; +} + +init_capture_zombie( zone_struct, s_spawn_point ) +{ + self endon( "death" ); + self init_zone_capture_zombie_common( s_spawn_point ); + + if ( isdefined( self.zombie_move_speed ) && self.zombie_move_speed == "walk" ) + { + self.zombie_move_speed = "run"; + self set_zombie_run_cycle( "run" ); + } + + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); + find_flesh_struct_string = "find_flesh"; + self notify( "zombie_custom_think_done", find_flesh_struct_string ); + self thread capture_zombies_only_attack_nearby_players( zone_struct ); +} + +init_recapture_zombie( zone_struct, s_spawn_point ) +{ + self endon( "death" ); + self.is_recapture_zombie = 1; + self init_zone_capture_zombie_common( s_spawn_point ); + self.goalradius = 30; + self.zombie_move_speed = "sprint"; + self.s_attack_generator = zone_struct; + self.attacking_new_generator = 1; + self.attacking_point = undefined; + self thread recapture_zombie_poi_think(); + + while ( true ) + { + self.is_attacking_zone = 0; + + if ( self.zombie_has_point_of_interest ) + v_attack_origin = self.point_of_interest; + else + { + if ( self.attacking_new_generator || !isdefined( self.attacking_point ) ) + { + if ( isdefined( self.attacking_point ) ) + self.attacking_point unclaim_attacking_point(); + + self.attacking_point = self get_unclaimed_attack_point( self.s_attack_generator ); + } + + v_attack_origin = self.attacking_point.origin; + } + + self setgoalpos( v_attack_origin ); + self waittill_either( "goal", "poi_state_changed" ); + + if ( !self.zombie_has_point_of_interest ) + { + if ( distance( self.attacking_point.origin, self.origin ) > 50 ) + continue; + + self.is_attacking_zone = 1; + + if ( !isdefined( level.zone_capture.recapture_target ) && !isdefined( self.s_attack_generator.script_noteworthy ) || isdefined( level.zone_capture.recapture_target ) && isdefined( self.s_attack_generator.script_noteworthy ) && level.zone_capture.recapture_target == self.s_attack_generator.script_noteworthy ) + { + flag_set( "generator_under_attack" ); + self.s_attack_generator ent_flag_set( "attacked_by_recapture_zombies" ); + self.attacking_new_generator = 0; + zone_struct notify( "zombies_attacking_generator" ); + } + } + else if ( isdefined( self.attacking_point ) ) + self.attacking_point unclaim_attacking_point(); + + self play_melee_attack_animation(); + } +} + +capture_zombie_rise_fx( ai_zombie ) +{ + playfx( level._effect["zone_capture_zombie_spawn"], self.origin, anglestoforward( self.angles ), anglestoup( self.angles ) ); +} + +get_unclaimed_attack_point( s_zone ) +{ + s_zone clean_up_unused_attack_points(); + n_claimed_center = s_zone get_claimed_attack_points_between_indicies( 0, 3 ); + n_claimed_left = s_zone get_claimed_attack_points_between_indicies( 4, 7 ); + n_claimed_right = s_zone get_claimed_attack_points_between_indicies( 8, 11 ); + b_use_center_pillar = n_claimed_center < 3; + b_use_left_pillar = n_claimed_left < 1; + b_use_right_pillar = n_claimed_right < 1; + + if ( b_use_center_pillar ) + a_valid_attack_points = s_zone get_unclaimed_attack_points_between_indicies( 0, 3 ); + else if ( b_use_left_pillar ) + a_valid_attack_points = s_zone get_unclaimed_attack_points_between_indicies( 4, 7 ); + else if ( b_use_right_pillar ) + a_valid_attack_points = s_zone get_unclaimed_attack_points_between_indicies( 8, 11 ); + else + a_valid_attack_points = s_zone get_unclaimed_attack_points_between_indicies( 0, 11 ); + + if ( a_valid_attack_points.size == 0 ) + a_valid_attack_points = s_zone get_unclaimed_attack_points_between_indicies( 0, 11 ); + + assert( a_valid_attack_points.size > 0, "get_unclaimed_attack_point() couldn't find any valid attack points in zone " + s_zone.script_noteworthy ); + s_attack_point = random( a_valid_attack_points ); + s_attack_point.is_claimed = 1; + s_attack_point.claimed_by = self; + return s_attack_point; +} + +clean_up_unused_attack_points() +{ + foreach ( s_attack_point in self.zombie_attack_points ) + { + if ( s_attack_point.is_claimed && !isdefined( s_attack_point.claimed_by ) ) + { + s_attack_point.is_claimed = 0; + s_attack_point.claimed_by = undefined; + } + } +} + +get_unclaimed_attack_points_between_indicies( n_start, n_end ) +{ + a_valid_attack_points = []; + + for ( i = n_start; i < n_end; i++ ) + { + if ( !self.zombie_attack_points[i].is_claimed && !self.zombie_attack_points[i].inaccessible ) + a_valid_attack_points[a_valid_attack_points.size] = self.zombie_attack_points[i]; + } + + return a_valid_attack_points; +} + +get_claimed_attack_points_between_indicies( n_start, n_end ) +{ + a_valid_points = []; + + for ( i = n_start; i < n_end; i++ ) + { + if ( self.zombie_attack_points[i].is_claimed ) + a_valid_points[a_valid_points.size] = self.zombie_attack_points[i]; + } + + return a_valid_points.size; +} + +unclaim_attacking_point() +{ + self.is_claimed = 0; + self.claimed_by = undefined; +} + +clear_all_zombie_attack_points_in_zone() +{ + foreach ( s_attack_point in self.zombie_attack_points ) + s_attack_point unclaim_attacking_point(); +} + +capture_zombies_only_attack_nearby_players( s_zone ) +{ + self endon( "death" ); + n_goal_radius = self.goalradius; + + while ( true ) + { + self.goalradius = n_goal_radius; + + if ( self should_capture_zombie_attack_generator( s_zone ) ) + { + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + self.goalradius = 30; + + if ( !isdefined( self.attacking_point ) ) + self.attacking_point = self get_unclaimed_attack_point( s_zone ); + + self setgoalpos( self.attacking_point.origin ); + self thread cancel_generator_attack_if_player_gets_close_to_generator( s_zone ); + str_notify = self waittill_any_return( "goal", "stop_attacking_generator" ); + + if ( !isdefined( str_notify ) && !isdefined( "stop_attacking_generator" ) || isdefined( str_notify ) && isdefined( "stop_attacking_generator" ) && str_notify == "stop_attacking_generator" ) + self.attacking_point unclaim_attacking_point(); + else + { + self play_melee_attack_animation(); + continue; + } + } + + wait 0.5; + } +} + +cancel_generator_attack_if_player_gets_close_to_generator( s_zone ) +{ + self notify( "generator_attack_cancel_think" ); + self endon( "generator_attack_cancel_think" ); + self endon( "death" ); + + while ( true ) + { + if ( !self should_capture_zombie_attack_generator( s_zone ) ) + { + self notify( "stop_attacking_generator" ); + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); + break; + } + + wait( randomfloatrange( 0.2, 1.5 ) ); + } +} + +should_capture_zombie_attack_generator( s_zone ) +{ + a_players = get_players(); + a_valid_targets = arraysort( a_players, s_zone.origin, 1, undefined, 700 ); + + foreach ( player in a_players ) + { + if ( !isdefined( self.ignore_player ) ) + self.ignore_player = []; + + b_is_valid_target = isinarray( a_valid_targets, player ) && is_player_valid( player ); + b_is_currently_ignored = isinarray( self.ignore_player, player ); + + if ( b_is_valid_target && b_is_currently_ignored ) + { + arrayremovevalue( self.ignore_player, player, 0 ); + continue; + } + + if ( !b_is_valid_target && !b_is_currently_ignored ) + self.ignore_player[self.ignore_player.size] = player; + } + + b_should_attack_generator = isdefined( self.enemy ) && ( a_valid_targets.size == 0 || self.ignore_player.size == a_players.size ); + return b_should_attack_generator; +} + +play_melee_attack_animation() +{ + self endon( "death" ); + self endon( "poi_state_changed" ); + v_angles = self.angles; + + if ( isdefined( self.attacking_point ) ) + { + v_angles = self.attacking_point.v_center_pillar - self.origin; + v_angles = vectortoangles( ( v_angles[0], v_angles[1], 0 ) ); + } + + self animscripted( self.origin, v_angles, "zm_generator_melee" ); + + while ( true ) + { + self waittill( "static_melee_anim", note ); + + if ( note == "end" ) + break; + } +} + +recapture_zombie_poi_think() +{ + self endon( "death" ); + self.zombie_has_point_of_interest = 0; + + while ( isdefined( self ) && isalive( self ) ) + { + if ( isdefined( level._poi_override ) ) + zombie_poi = self [[ level._poi_override ]](); + + if ( !isdefined( zombie_poi ) ) + zombie_poi = self get_zombie_point_of_interest( self.origin ); + + self.using_poi_last_check = self.zombie_has_point_of_interest; + + if ( isdefined( zombie_poi ) && isarray( zombie_poi ) && isdefined( zombie_poi[1] ) ) + { + self.goalradius = 16; + self.zombie_has_point_of_interest = 1; + self.is_attacking_zone = 0; + self.point_of_interest = zombie_poi[0]; + } + else + { + self.goalradius = 30; + self.zombie_has_point_of_interest = 0; + self.point_of_interest = undefined; + zombie_poi = undefined; + } + + if ( self.using_poi_last_check != self.zombie_has_point_of_interest ) + { + self notify( "poi_state_changed" ); + self stopanimscripted( 0.2 ); + } + + wait 1; + } +} + +kill_all_capture_zombies() +{ + while ( isdefined( self.capture_zombies ) && self.capture_zombies.size > 0 ) + { + foreach ( zombie in self.capture_zombies ) + { + if ( isdefined( zombie ) && isalive( zombie ) ) + { + playfx( level._effect["tesla_elec_kill"], zombie.origin ); + zombie dodamage( zombie.health + 100, zombie.origin ); + } + + wait_network_frame(); + } + + self.capture_zombies = array_removedead( self.capture_zombies ); + } + + self.capture_zombies = []; +} + +kill_all_recapture_zombies() +{ + while ( isdefined( level.zone_capture.recapture_zombies ) && level.zone_capture.recapture_zombies.size > 0 ) + { + foreach ( zombie in level.zone_capture.recapture_zombies ) + { + if ( isdefined( zombie ) && isalive( zombie ) ) + { + playfx( level._effect["tesla_elec_kill"], zombie.origin ); + zombie dodamage( zombie.health + 100, zombie.origin ); + } + + wait_network_frame(); + } + + level.zone_capture.recapture_zombies = array_removedead( level.zone_capture.recapture_zombies ); + } + + level.zone_capture.recapture_zombies = []; +} + +is_capture_area_occupied( parent_zone ) +{ + if ( parent_zone.is_occupied ) + return true; + + foreach ( s_child_zone in parent_zone.child_capture_zones ) + { + if ( s_child_zone.is_occupied ) + return true; + } + + return false; +} + +set_player_controlled_area() +{ + level.zone_capture.last_zone_captured = self; + self set_player_controlled_zone(); + self play_pap_anim( 1 ); +} + +update_captured_zone_count() +{ + level.total_capture_zones = get_captured_zone_count(); + + if ( level.total_capture_zones == 6 ) + flag_set( "all_zones_captured" ); + else + flag_clear( "all_zones_captured" ); +} + +get_captured_zone_count() +{ + n_player_controlled_zones = 0; + + foreach ( generator in level.zone_capture.zones ) + { + if ( generator ent_flag( "player_controlled" ) ) + n_player_controlled_zones++; + } + + return n_player_controlled_zones; +} + +get_contested_zone_count() +{ + return get_contested_zones().size; +} + +get_contested_zones() +{ + a_contested_zones = []; + + foreach ( generator in level.zone_capture.zones ) + { + if ( generator ent_flag( "zone_contested" ) ) + a_contested_zones[a_contested_zones.size] = generator; + } + + return a_contested_zones; +} + +set_player_controlled_zone() +{ + self ent_flag_set( "player_controlled" ); + self ent_flag_clear( "attacked_by_recapture_zombies" ); + level setclientfield( "zone_capture_hud_generator_" + self.script_int, 1 ); + level setclientfield( "zone_capture_monolith_crystal_" + self.script_int, 0 ); + + if ( !isdefined( self.perk_fx_func ) || [[ self.perk_fx_func ]]() ) + level setclientfield( "zone_capture_perk_machine_smoke_fx_" + self.script_int, 1 ); + + self ent_flag_set( "player_controlled" ); + update_captured_zone_count(); + self enable_perk_machines_in_zone(); + self enable_random_perk_machines_in_zone(); + self enable_mystery_boxes_in_zone(); + level notify( "zone_captured_by_player", self.str_zone ); +} + +set_zombie_controlled_area( b_is_level_initializing = 0 ) +{ + update_captured_zone_count(); + + if ( b_is_level_initializing ) + { + level setclientfield( "state_" + self.script_noteworthy, 3 ); + wait_network_frame(); + level setclientfield( "state_" + self.script_noteworthy, 0 ); + } + + if ( self ent_flag( "player_controlled" ) ) + flag_set( "generator_lost_to_recapture_zombies" ); + + self set_zombie_controlled_zone( b_is_level_initializing ); + self play_pap_anim( 0 ); +} + +play_pap_anim( b_assemble ) +{ + level setclientfield( "packapunch_anim", get_captured_zone_count() ); +} + +set_zombie_controlled_zone( b_is_level_initializing = 0 ) +{ + n_hud_state = 2; + + if ( b_is_level_initializing ) + n_hud_state = 0; + + self ent_flag_clear( "player_controlled" ); + level setclientfield( "zone_capture_hud_generator_" + self.script_int, n_hud_state ); + level setclientfield( "zone_capture_monolith_crystal_" + self.script_int, 1 ); + level setclientfield( "zone_capture_perk_machine_smoke_fx_" + self.script_int, 0 ); + update_captured_zone_count(); + self disable_perk_machines_in_zone(); + self disable_random_perk_machines_in_zone(); + self disable_mystery_boxes_in_zone(); +} + +capture_progress_think() +{ + self init_capture_progress(); + self clear_zone_objective_index(); + self show_zone_capture_objective( 1 ); + self get_zone_objective_index(); + + while ( self ent_flag( "zone_contested" ) ) + { + a_players = get_players(); + a_players_in_capture_zone = self get_players_in_capture_zone(); + + foreach ( player in a_players ) + { + if ( isinarray( a_players_in_capture_zone, player ) ) + { + if ( !flag( "recapture_event_in_progress" ) || !self ent_flag( "current_recapture_target_zone" ) ) + objective_setplayerusing( self.n_objective_index, player ); + + continue; + } + + if ( is_player_valid( player ) ) + objective_clearplayerusing( self.n_objective_index, player ); + } + + self.n_last_progress = self.n_current_progress; + self.n_current_progress += self get_progress_rate( a_players_in_capture_zone.size, a_players.size ); + + if ( self.n_last_progress != self.n_current_progress ) + { + self.n_current_progress = clamp( self.n_current_progress, 0, 100 ); + objective_setprogress( self.n_objective_index, self.n_current_progress / 100 ); + self zone_capture_sound_state_think(); + level setclientfield( self.script_noteworthy, self.n_current_progress / 100 ); + self generator_set_state(); + + if ( !flag( "recapture_event_in_progress" ) || !self ent_flag( "attacked_by_recapture_zombies" ) ) + { + b_set_color_to_white = a_players_in_capture_zone.size > 0; + + if ( !flag( "recapture_event_in_progress" ) && self ent_flag( "current_recapture_target_zone" ) ) + b_set_color_to_white = 1; + + level setclientfield( "zc_change_progress_bar_color", b_set_color_to_white ); + } + + update_objective_on_momentum_change(); + + if ( self.n_current_progress == 0 || self.n_current_progress == 100 && !self ent_flag( "attacked_by_recapture_zombies" ) ) + self ent_flag_clear( "zone_contested" ); + } + + show_zone_capture_debug_info(); + wait 0.1; + } + + self ent_flag_clear( "attacked_by_recapture_zombies" ); + self handle_generator_capture(); + self clear_all_zombie_attack_points_in_zone(); +} + +update_objective_on_momentum_change() +{ + if ( self ent_flag( "current_recapture_target_zone" ) && !flag( "recapture_event_in_progress" ) && self.n_objective_index == 1 && self.n_current_progress > self.n_last_progress ) + { + self clear_zone_objective_index(); + self show_zone_capture_objective( 1 ); + level setclientfield( "zc_change_progress_bar_color", 1 ); + } +} + +get_zone_objective_index() +{ + if ( !isdefined( self.n_objective_index ) ) + { + if ( self ent_flag( "current_recapture_target_zone" ) ) + { + if ( flag( "recapture_event_in_progress" ) ) + n_objective = 1; + else + n_objective = 2; + } + else + n_objective = 0; + + self.n_objective_index = n_objective; + } + + return self.n_objective_index; +} + +get_zones_using_objective_index( n_index ) +{ + n_zones_using_objective_index = 0; + + foreach ( zone in level.zone_capture.zones ) + { + if ( isdefined( zone.n_objective_index ) && zone.n_objective_index == n_index ) + n_zones_using_objective_index++; + } + + return n_zones_using_objective_index; +} + +zone_capture_sound_state_think() +{ + if ( !isdefined( self.is_playing_audio ) ) + self.is_playing_audio = 0; + + if ( self.n_current_progress > self.n_last_progress ) + { + if ( self.is_playing_audio ) + { + self.sndent stoploopsound(); + self.is_playing_audio = 0; + } + } + else if ( !self.is_playing_audio && flag( "generator_under_attack" ) ) + { + self.sndent playloopsound( "zmb_capturezone_generator_alarm", 0.25 ); + self.is_playing_audio = 1; + } +} + +handle_generator_capture() +{ + level setclientfield( "zc_change_progress_bar_color", 0 ); + self show_zone_capture_objective( 0 ); + + if ( self.n_current_progress == 100 ) + { + self players_capture_zone(); + self kill_all_capture_zombies(); + } + else if ( self.n_current_progress == 0 ) + { + if ( self ent_flag( "player_controlled" ) ) + { + self.sndent stoploopsound( 0.25 ); + self thread generator_deactivated_vo(); + self.is_playing_audio = 0; + + foreach ( player in get_players() ) + { + player maps\mp\zombies\_zm_stats::increment_client_stat( "tomb_generator_lost", 0 ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "tomb_generator_lost" ); + } + } + + self set_zombie_controlled_area(); + + if ( flag( "recapture_event_in_progress" ) && get_captured_zone_count() > 0 ) + { + + } + else + self kill_all_capture_zombies(); + } + + if ( get_contested_zone_count() == 0 ) + flag_clear( "zone_capture_in_progress" ); +} + +init_capture_progress() +{ + if ( !isdefined( level.zone_capture.rate_capture ) ) + level.zone_capture.rate_capture = get_update_rate( 10 ); + + if ( !isdefined( level.zone_capture.rate_capture_solo ) ) + level.zone_capture.rate_capture_solo = get_update_rate( 12 ); + + if ( !isdefined( level.zone_capture.rate_decay ) ) + level.zone_capture.rate_decay = get_update_rate( 20 ) * -1; + + if ( !isdefined( level.zone_capture.rate_recapture ) ) + level.zone_capture.rate_recapture = get_update_rate( 40 ) * -1; + + if ( !isdefined( level.zone_capture.rate_recapture_players ) ) + level.zone_capture.rate_recapture_players = get_update_rate( 10 ); + + if ( !self ent_flag( "player_controlled" ) ) + { + self.n_current_progress = 0; + self ent_flag_clear( "attacked_by_recapture_zombies" ); + } + + self ent_flag_set( "zone_contested" ); +} + +get_progress_rate( n_players_in_zone, n_players_total ) +{ + if ( flag( "recapture_event_in_progress" ) && self ent_flag( "current_recapture_target_zone" ) ) + { + if ( self get_recapture_attacker_count() > 0 ) + n_rate = level.zone_capture.rate_recapture; + else if ( !self ent_flag( "attacked_by_recapture_zombies" ) ) + n_rate = 0; + else + n_rate = level.zone_capture.rate_recapture_players; + } + else if ( self ent_flag( "current_recapture_target_zone" ) ) + n_rate = level.zone_capture.rate_recapture_players; + else if ( n_players_in_zone > 0 ) + { + if ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) + n_rate = level.zone_capture.rate_capture_solo; + else + n_rate = level.zone_capture.rate_capture * n_players_in_zone / n_players_total; + } + else + n_rate = level.zone_capture.rate_decay; + + return n_rate; +} + +show_zone_capture_objective( b_show_objective ) +{ + self get_zone_objective_index(); + + if ( b_show_objective ) + { + objective_position( self.n_objective_index, self.origin ); + objective_setgamemodeflags( self.n_objective_index, self.script_int ); + objective_state( self.n_objective_index, "active" ); + } + else + self clear_zone_objective_index(); +} + +clear_zone_objective_index() +{ + if ( isdefined( self.n_objective_index ) && get_zones_using_objective_index( self.n_objective_index ) < 2 ) + { + objective_state( self.n_objective_index, "invisible" ); + a_players = get_players(); + + foreach ( player in a_players ) + objective_clearplayerusing( self.n_objective_index, player ); + } + + self.n_objective_index = undefined; +} + +hide_zone_objective_while_recapture_group_runs_to_next_generator( b_hide_icon ) +{ + self clear_zone_objective_index(); + flag_clear( "generator_under_attack" ); + + if ( !b_hide_icon ) + recapture_zombie_group_icon_show(); + + do + wait 1; + while ( !flag( "recapture_zombies_cleared" ) && self get_recapture_attacker_count() == 0 ); + + if ( !flag( "recapture_zombies_cleared" ) ) + self thread generator_compromised_vo(); +} + +recapture_zombie_group_icon_show() +{ + level endon( "recapture_zombies_cleared" ); + + if ( isdefined( level.zone_capture.recapture_zombies ) && flag( "recapture_event_in_progress" ) ) + { + while ( !level.zone_capture.recapture_zombies.size ) + { + wait_network_frame(); + level.zone_capture.recapture_zombies = array_removedead( level.zone_capture.recapture_zombies ); + } + + flag_waitopen( "generator_under_attack" ); + + if ( level.zone_capture.recapture_zombies.size > 0 ) + { + ai_zombie = random( level.zone_capture.recapture_zombies ); + objective_state( 3, "active" ); + objective_onentity( 3, ai_zombie ); + ai_zombie thread recapture_zombie_icon_think(); + } + } +} + +recapture_zombie_icon_think() +{ + while ( isalive( self ) && !flag( "generator_under_attack" ) ) + { +/# + debugstar( self.origin, 20, ( 1, 0, 0 ) ); +#/ + wait 1; + } + + recapture_zombie_group_icon_hide(); + wait_network_frame(); + + if ( !flag( "recapture_zombies_cleared" ) ) + recapture_zombie_group_icon_show(); +} + +recapture_zombie_group_icon_hide() +{ + objective_state( 3, "invisible" ); + + if ( isalive( self ) ) + objective_clearentity( 3 ); +} + +players_capture_zone() +{ + self.sndent playsound( "zmb_capturezone_success" ); + self.sndent stoploopsound( 0.25 ); + wait_network_frame(); + + if ( !flag( "recapture_event_in_progress" ) && !self ent_flag( "player_controlled" ) ) + self thread zone_capture_complete_vo(); + + reward_players_in_capture_zone(); + self set_player_controlled_area(); + wait_network_frame(); + playfx( level._effect["capture_complete"], self.origin ); + level thread sndplaygeneratormusicstinger(); +} + +reward_players_in_capture_zone() +{ + b_challenge_exists = maps\mp\zombies\_zm_challenges::challenge_exists( "zc_zone_captures" ); + + if ( !self ent_flag( "player_controlled" ) ) + { + foreach ( player in get_players_in_capture_zone() ) + { + player notify( "completed_zone_capture" ); + player maps\mp\zombies\_zm_score::player_add_points( "bonus_points_powerup", 100 ); + + if ( b_challenge_exists ) + player maps\mp\zombies\_zm_challenges::increment_stat( "zc_zone_captures" ); + + player maps\mp\zombies\_zm_stats::increment_client_stat( "tomb_generator_captured", 0 ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "tomb_generator_captured" ); + } + } +} + +show_zone_capture_debug_info() +{ +/# + if ( getdvarint( _hash_1AD074DA ) > 0 ) + { + print3d( self.origin, "progress = " + self.n_current_progress, ( 0, 1, 0 ) ); + circle( groundtrace( self.origin, self.origin - vectorscale( ( 0, 0, 1 ), 1000.0 ), 0, undefined )["position"], 220, ( 0, 1, 0 ), 0, 4 ); + + foreach ( n_index, attack_point in self.zombie_attack_points ) + { + if ( attack_point.inaccessible ) + v_color = ( 1, 1, 1 ); + else if ( attack_point.is_claimed ) + v_color = ( 1, 0, 0 ); + else + v_color = ( 0, 1, 0 ); + + debugstar( attack_point.origin, 4, v_color ); + print3d( attack_point.origin + vectorscale( ( 0, 0, 1 ), 10.0 ), n_index, v_color, 1, 1, 4 ); + } + } +#/ +} + +get_players_in_capture_zone() +{ + a_players_in_capture_zone = []; + + foreach ( player in get_players() ) + { + if ( is_player_valid( player ) && distance2dsquared( player.origin, self.origin ) < 48400 && player.origin[2] > self.origin[2] + -20 ) + a_players_in_capture_zone[a_players_in_capture_zone.size] = player; + } + + return a_players_in_capture_zone; +} + +get_update_rate( n_duration ) +{ + n_change_per_update = 100 / n_duration * 0.1; + return n_change_per_update; +} + +generator_set_state() +{ + n_generator_state = level getclientfield( "state_" + self.script_noteworthy ); + + if ( self.n_current_progress == 0 ) + self generator_state_turn_off(); + else if ( n_generator_state == 0 && self.n_current_progress > 0 ) + self generator_state_turn_on(); + else if ( self can_start_generator_power_up_anim() ) + self generator_state_power_up(); + else if ( n_generator_state == 2 && self.n_current_progress < self.n_last_progress ) + { + self generator_state_power_down(); + + if ( !flag( "recapture_event_in_progress" ) ) + self thread generator_interrupted_vo(); + } +} + +generator_state_turn_on() +{ + level setclientfield( "state_" + self.script_noteworthy, 1 ); + self.n_time_started_generator = gettime(); +} + +generator_state_power_up() +{ + level setclientfield( "state_" + self.script_noteworthy, 2 ); +} + +generator_state_power_down() +{ + if ( self ent_flag( "attacked_by_recapture_zombies" ) ) + n_state = 5; + else + n_state = 3; + + level setclientfield( "state_" + self.script_noteworthy, n_state ); +} + +generator_state_turn_off() +{ + level setclientfield( "state_" + self.script_noteworthy, 4 ); + self thread generator_turns_off_after_anim(); +} + +generator_turns_off_after_anim() +{ + wait( getanimlength( %fxanim_zom_tomb_generator_end_anim ) ); + self generator_state_off(); +} + +generator_state_off() +{ + level setclientfield( "state_" + self.script_noteworthy, 0 ); +} + +can_start_generator_power_up_anim() +{ + if ( !isdefined( self.n_time_started_generator ) ) + self.n_time_started_generator = 0; + + if ( !isdefined( self.n_time_start_anim ) ) + self.n_time_start_anim = getanimlength( %fxanim_zom_tomb_generator_start_anim ); + + return self.n_current_progress > self.n_last_progress && ( gettime() - self.n_time_started_generator ) * 0.001 > self.n_time_start_anim; +} + +get_recapture_attacker_count() +{ + n_zone_attacker_count = 0; + + foreach ( zombie in level.zone_capture.recapture_zombies ) + { + if ( isalive( zombie ) && ( isdefined( zombie.is_attacking_zone ) && zombie.is_attacking_zone ) && ( !isdefined( self.script_noteworthy ) && !isdefined( level.zone_capture.recapture_target ) || isdefined( self.script_noteworthy ) && isdefined( level.zone_capture.recapture_target ) && self.script_noteworthy == level.zone_capture.recapture_target ) ) + n_zone_attacker_count++; + } + + return n_zone_attacker_count; +} + +watch_for_open_sesame() +{ +/# + level waittill( "open_sesame" ); + + level.b_open_sesame = 1; + a_generators = getstructarray( "s_generator", "targetname" ); + + foreach ( s_generator in a_generators ) + { + s_temp = level.zone_capture.zones[s_generator.script_noteworthy]; + s_temp debug_set_generator_active(); + wait_network_frame(); + } +#/ +} + +debug_watch_for_zone_capture() +{ +/# + while ( true ) + { + level waittill( "force_zone_capture", n_zone ); + + foreach ( zone in level.zone_capture.zones ) + { + if ( zone.script_int == n_zone && !zone ent_flag( "player_controlled" ) ) + zone debug_set_generator_active(); + } + } +#/ +} + +debug_watch_for_zone_recapture() +{ +/# + while ( true ) + { + level waittill( "force_zone_recapture", n_zone ); + + foreach ( zone in level.zone_capture.zones ) + { + if ( zone.script_int == n_zone && zone ent_flag( "player_controlled" ) ) + zone debug_set_generator_inactive(); + } + } +#/ +} + +debug_set_generator_active() +{ +/# + self set_player_controlled_area(); + self.n_current_progress = 100; + self generator_state_power_up(); + level setclientfield( self.script_noteworthy, self.n_current_progress / 100 ); +#/ +} + +debug_set_generator_inactive() +{ +/# + self set_zombie_controlled_area(); + self.n_current_progress = 0; + self generator_state_turn_off(); + level setclientfield( self.script_noteworthy, self.n_current_progress / 100 ); +#/ +} + +set_magic_box_zbarrier_state( state ) +{ + for ( i = 0; i < self getnumzbarrierpieces(); i++ ) + self hidezbarrierpiece( i ); + + self notify( "zbarrier_state_change" ); + + switch ( state ) + { + case "away": + self showzbarrierpiece( 0 ); + self.state = "away"; + self.owner.is_locked = 0; + break; + case "arriving": + self showzbarrierpiece( 1 ); + self thread magic_box_arrives(); + self.state = "arriving"; + break; + case "initial": + self showzbarrierpiece( 1 ); + self thread magic_box_initial(); + thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.owner.unitrigger_stub, maps\mp\zombies\_zm_magicbox::magicbox_unitrigger_think ); + self.state = "close"; + break; + case "open": + self showzbarrierpiece( 2 ); + self thread maps\mp\zombies\_zm_magicbox_tomb::magic_box_opens(); + self.state = "open"; + break; + case "close": + self showzbarrierpiece( 2 ); + self thread maps\mp\zombies\_zm_magicbox_tomb::magic_box_closes(); + self.state = "close"; + break; + case "leaving": + self showzbarrierpiece( 1 ); + self thread magic_box_leaves(); + self.state = "leaving"; + self.owner.is_locked = 0; + break; + case "zombie_controlled": + if ( isdefined( level.zombie_vars["zombie_powerup_fire_sale_on"] ) && level.zombie_vars["zombie_powerup_fire_sale_on"] ) + { + self showzbarrierpiece( 2 ); + self setclientfield( "magicbox_amb_fx", 0 ); + } + + if ( self.state == "initial" || self.state == "close" ) + { + self showzbarrierpiece( 1 ); + self setclientfield( "magicbox_amb_fx", 1 ); + } + else if ( self.state == "away" ) + { + self showzbarrierpiece( 0 ); + self setclientfield( "magicbox_amb_fx", 0 ); + } + else if ( self.state == "open" || self.state == "leaving" ) + { + self showzbarrierpiece( 2 ); + self setclientfield( "magicbox_amb_fx", 0 ); + } + + break; + case "player_controlled": + if ( self.state == "arriving" || self.state == "close" ) + { + self showzbarrierpiece( 2 ); + self setclientfield( "magicbox_amb_fx", 2 ); + break; + } + + if ( self.state == "away" ) + { + self showzbarrierpiece( 0 ); + self setclientfield( "magicbox_amb_fx", 3 ); + } + + break; + default: + if ( isdefined( level.custom_magicbox_state_handler ) ) + self [[ level.custom_magicbox_state_handler ]]( state ); + + break; + } +} + +magic_box_trigger_update_prompt( player ) +{ + can_use = self magic_box_stub_update_prompt( player ); + + if ( isdefined( self.stub.hint_string ) ) + { + if ( isdefined( self.stub.hint_parm1 ) ) + self sethintstring( self.stub.hint_string, self.stub.hint_parm1 ); + else + self sethintstring( self.stub.hint_string ); + } + + return can_use; +} + +magic_box_stub_update_prompt( player ) +{ + self setcursorhint( "HINT_NOICON" ); + + if ( !self trigger_visible_to_player( player ) ) + return false; + + self.stub.hint_parm1 = undefined; + + if ( isdefined( self.stub.trigger_target.grab_weapon_hint ) && self.stub.trigger_target.grab_weapon_hint ) + self.stub.hint_string = &"ZOMBIE_TRADE_WEAPONS"; + else if ( !level.zone_capture.zones[self.stub.zone] ent_flag( "player_controlled" ) ) + { + self.stub.hint_string = &"ZM_TOMB_ZC"; + return false; + } + else + { + self.stub.hint_parm1 = self.stub.trigger_target.zombie_cost; + self.stub.hint_string = get_hint_string( self, "default_treasure_chest" ); + } + + return true; +} + +recapture_round_tracker() +{ + n_next_recapture_round = 10; + + while ( true ) + { +/# + iprintln( "Next Recapture Round = " + n_next_recapture_round ); +#/ + level waittill_any( "between_round_over", "force_recapture_start" ); +/# + if ( getdvarint( _hash_EF89C4FC ) > 0 ) + n_next_recapture_round = level.round_number; +#/ + if ( level.round_number >= n_next_recapture_round && !flag( "zone_capture_in_progress" ) && get_captured_zone_count() >= get_player_controlled_zone_count_for_recapture() ) + { + n_next_recapture_round = level.round_number + randomintrange( 3, 6 ); + level thread recapture_round_start(); + } + } +} + +get_player_controlled_zone_count_for_recapture() +{ + n_zones_required = 4; +/# + if ( getdvarint( _hash_EF89C4FC ) > 0 ) + n_zones_required = 1; +#/ + return n_zones_required; +} + +get_recapture_zone( s_last_recapture_zone ) +{ + a_s_player_zones = []; + + foreach ( str_key, s_zone in level.zone_capture.zones ) + { + if ( s_zone ent_flag( "player_controlled" ) ) + a_s_player_zones[str_key] = s_zone; + } + + s_recapture_zone = undefined; + + if ( a_s_player_zones.size ) + { + if ( isdefined( s_last_recapture_zone ) ) + { + n_distance_closest = undefined; + + foreach ( s_zone in a_s_player_zones ) + { + n_distance = distancesquared( s_zone.origin, s_last_recapture_zone.origin ); + + if ( !isdefined( n_distance_closest ) || n_distance < n_distance_closest ) + { + s_recapture_zone = s_zone; + n_distance_closest = n_distance; + } + } + } + else + { + s_recapture_zone = random( a_s_player_zones ); +/# + if ( getdvarint( _hash_8178CABA ) > 0 ) + { + n_zone = getdvarint( _hash_8178CABA ); + + foreach ( zone in level.zone_capture.zones ) + { + if ( n_zone == zone.script_int && zone ent_flag( "player_controlled" ) ) + { + s_recapture_zone = zone; + break; + } + } + } +#/ + } + } + + return s_recapture_zone; +} + +recapture_round_start() +{ + flag_set( "recapture_event_in_progress" ); + flag_clear( "recapture_zombies_cleared" ); + flag_clear( "generator_under_attack" ); + level.recapture_zombies_killed = 0; + b_is_first_generator_attack = 1; + s_recapture_target_zone = undefined; + capture_event_handle_ai_limit(); + recapture_round_audio_starts(); + + while ( !flag( "recapture_zombies_cleared" ) && get_captured_zone_count() > 0 ) + { + s_recapture_target_zone = get_recapture_zone( s_recapture_target_zone ); + level.zone_capture.recapture_target = s_recapture_target_zone.script_noteworthy; + s_recapture_target_zone maps\mp\zm_tomb_capture_zones_ffotd::recapture_event_start(); + + if ( b_is_first_generator_attack ) + s_recapture_target_zone thread monitor_recapture_zombies(); + + set_recapture_zombie_attack_target( s_recapture_target_zone ); + s_recapture_target_zone thread generator_under_attack_warnings(); + s_recapture_target_zone ent_flag_set( "current_recapture_target_zone" ); + s_recapture_target_zone thread hide_zone_objective_while_recapture_group_runs_to_next_generator( b_is_first_generator_attack ); + s_recapture_target_zone activate_capture_zone( b_is_first_generator_attack ); + s_recapture_target_zone ent_flag_clear( "attacked_by_recapture_zombies" ); + s_recapture_target_zone ent_flag_clear( "current_recapture_target_zone" ); + + if ( b_is_first_generator_attack && !s_recapture_target_zone ent_flag( "player_controlled" ) ) + delay_thread( 3, ::broadcast_vo_category_to_team, "recapture_started" ); + + b_is_first_generator_attack = 0; + s_recapture_target_zone maps\mp\zm_tomb_capture_zones_ffotd::recapture_event_end(); + wait 0.05; + } + + if ( s_recapture_target_zone.n_current_progress == 0 || s_recapture_target_zone.n_current_progress == 100 ) + s_recapture_target_zone handle_generator_capture(); + + capture_event_handle_ai_limit(); + kill_all_recapture_zombies(); + recapture_round_audio_ends(); + flag_clear( "recapture_event_in_progress" ); + flag_clear( "generator_under_attack" ); +} + +broadcast_vo_category_to_team( str_category, n_delay = 1 ) +{ + a_players = get_players(); + a_speakers = []; + + do + { + e_speaker = get_random_speaker( a_players ); + a_speakers[a_speakers.size] = e_speaker; + arrayremovevalue( a_players, e_speaker ); + a_players = e_speaker get_players_too_far_to_hear( a_players ); + } + while ( a_players.size > 0 ); + + for ( i = 0; i < a_speakers.size; i++ ) + a_speakers[i] delay_thread( n_delay, ::create_and_play_dialog, "zone_capture", str_category ); +} + +get_players_too_far_to_hear( a_players ) +{ + a_distant = []; + + foreach ( player in a_players ) + { + if ( distancesquared( player.origin, self.origin ) > 640000 && is_player_valid( player ) && !player isplayeronsamemachine( self ) ) + a_distant[a_distant.size] = player; + } + + return a_distant; +} + +get_random_speaker( a_players = get_players() ) +{ + a_valid_players = []; + + foreach ( player in a_players ) + { + if ( is_player_valid( player ) ) + a_valid_players[a_valid_players.size] = player; + } + + return random( a_valid_players ); +} + +set_recapture_zombie_attack_target( s_recapture_target_zone ) +{ + flag_clear( "generator_under_attack" ); + s_recapture_target_zone ent_flag_clear( "attacked_by_recapture_zombies" ); + + foreach ( zombie in level.zone_capture.recapture_zombies ) + { + zombie.is_attacking_zone = 0; + zombie.s_attack_generator = s_recapture_target_zone; + zombie.attacking_new_generator = 1; + } +} + +sndrecaptureroundloop() +{ + level endon( "sndEndRoundLoop" ); + wait 5; + ent = spawn( "script_origin", ( 0, 0, 0 ) ); + ent playloopsound( "mus_recapture_round_loop", 5 ); + ent thread sndrecaptureroundloop_stop(); +} + +sndrecaptureroundloop_stop() +{ + flag_wait( "recapture_zombies_cleared" ); + self stoploopsound( 2 ); + wait 2; + self delete(); +} + +monitor_recapture_zombie_count() +{ + while ( true ) + { + level.zone_capture.recapture_zombies = array_removedead( level.zone_capture.recapture_zombies ); + + if ( level.zone_capture.recapture_zombies.size == 0 ) + { + flag_set( "recapture_zombies_cleared" ); + flag_clear( "recapture_event_in_progress" ); + flag_clear( "generator_under_attack" ); + + if ( isdefined( level.zone_capture.recapture_target ) ) + { + level.zone_capture.zones[level.zone_capture.recapture_target] ent_flag_clear( "attacked_by_recapture_zombies" ); + level.zone_capture.recapture_target = undefined; + } + + break; + } + + wait 1; + } +} + +recapture_zombie_death_func() +{ + if ( isdefined( self.is_recapture_zombie ) && self.is_recapture_zombie ) + { + level.recapture_zombies_killed++; + + if ( isdefined( self.attacker ) && isplayer( self.attacker ) && level.recapture_zombies_killed == get_recapture_zombies_needed() ) + { + self.attacker thread delay_thread( 2, ::create_and_play_dialog, "zone_capture", "recapture_prevented" ); + + foreach ( player in get_players() ) + { + player maps\mp\zombies\_zm_stats::increment_client_stat( "tomb_generator_defended", 0 ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "tomb_generator_defended" ); + } + } + + if ( level.recapture_zombies_killed == get_recapture_zombies_needed() && flag( "generator_under_attack" ) ) + self drop_max_ammo_at_death_location(); + } +} + +drop_max_ammo_at_death_location() +{ + if ( isdefined( self ) ) + v_powerup_origin = groundtrace( self.origin + vectorscale( ( 0, 0, 1 ), 10.0 ), self.origin + vectorscale( ( 0, 0, -1 ), 150.0 ), 0, undefined, 1 )["position"]; + + if ( isdefined( v_powerup_origin ) ) + level thread maps\mp\zombies\_zm_powerups::specific_powerup_drop( "full_ammo", v_powerup_origin ); +} + +generator_under_attack_warnings() +{ + flag_wait_any( "generator_under_attack", "recapture_zombies_cleared" ); + + if ( !flag( "recapture_zombies_cleared" ) ) + { + e_alarm_sound = spawn( "script_origin", self.origin ); + e_alarm_sound playloopsound( "zmb_capturezone_losing" ); + e_alarm_sound thread play_flare_effect(); + wait 0.5; + flag_waitopen( "generator_under_attack" ); + e_alarm_sound stoploopsound( 0.2 ); + wait 0.5; + e_alarm_sound delete(); + } +} + +play_flare_effect() +{ + self endon( "death" ); + n_end_time = gettime() + 5000; + + while ( flag( "generator_under_attack" ) ) + { + playfx( level._effect["lght_marker_flare"], self.origin ); + wait 4; + } +} + +recapture_round_audio_starts() +{ + level.music_round_override = 1; + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "dog_start" ); + level thread sndrecaptureroundloop(); +} + +recapture_round_audio_ends() +{ + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "dog_end" ); + level.music_round_override = 0; + level notify( "sndEndRoundLoop" ); +} + +custom_vending_power_on() +{ + +} + +custom_vending_power_off() +{ + +} + +generator_initiated_vo() +{ + e_vo_origin = spawn( "script_origin", self.origin ); + level.maxis_generator_vo = 1; + e_vo_origin playsoundwithnotify( "vox_maxi_generator_initiate_0", "vox_maxi_generator_initiate_0_done" ); + + e_vo_origin waittill( "vox_maxi_generator_initiate_0_done" ); + + level.maxis_generator_vo = 0; + e_vo_origin delete(); +} + +zone_capture_complete_vo() +{ + e_vo_origin = spawn( "script_origin", self.origin ); + e_vo_origin playsoundwithnotify( "vox_maxi_generator_process_complete_0", "vox_maxi_generator_process_complete_0_done" ); + + e_vo_origin waittill( "vox_maxi_generator_process_complete_0_done" ); + + e_vo_origin playsoundwithnotify( "vox_maxi_generator_" + self.script_int + "_activated_0", "vox_maxi_generator_" + self.script_int + "_activated_0_done" ); + + e_vo_origin waittill( "vox_maxi_generator_" + self.script_int + "_activated_0_done" ); + + e_vo_origin delete(); +} + +generator_interrupted_vo() +{ + e_vo_origin = spawn( "script_origin", self.origin ); + e_vo_origin playsoundwithnotify( "vox_maxi_generator_interrupted_0", "vox_maxi_generator_interrupted_0_done" ); + + e_vo_origin waittill( "vox_maxi_generator_interrupted_0_done" ); + + e_vo_origin delete(); +} + +generator_compromised_vo() +{ + e_vo_origin = spawn( "script_origin", self.origin ); + e_vo_origin playsoundwithnotify( "vox_maxi_generator_" + self.script_int + "_compromised_0", "vox_maxi_generator_" + self.script_int + "_compromised_0_done" ); + + e_vo_origin waittill( "vox_maxi_generator_" + self.script_int + "_compromised_0_done" ); + + e_vo_origin delete(); +} + +generator_deactivated_vo() +{ + e_vo_origin = spawn( "script_origin", self.origin ); + e_vo_origin playsoundwithnotify( "vox_maxi_generator_" + self.script_int + "_deactivated_0", "vox_maxi_generator_" + self.script_int + "_deactivated_0_done" ); + + e_vo_origin waittill( "vox_maxi_generator_" + self.script_int + "_deactivated_0_done" ); + + e_vo_origin delete(); +} + +sndplaygeneratormusicstinger() +{ + num = get_captured_zone_count(); + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "generator_" + num ); +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_capture_zones_ffotd.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_capture_zones_ffotd.gsc new file mode 100644 index 0000000..13114c9 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_capture_zones_ffotd.gsc @@ -0,0 +1,35 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; + +capture_zone_init_start() +{ + +} + +capture_zone_init_end() +{ + +} + +capture_event_start() +{ + +} + +capture_event_end() +{ + +} + +recapture_event_start() +{ + +} + +recapture_event_end() +{ + +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_challenges.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_challenges.gsc new file mode 100644 index 0000000..bd22316 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_challenges.gsc @@ -0,0 +1,388 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zm_tomb_vo; +#include raw\maps\mp\_zm_challenges; +#include maps\mp\zombies\_zm_challenges; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\zombies\_zm_powerup_zombie_blood; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_weap_one_inch_punch; + +challenges_init() +{ + level.challenges_add_stats = ::tomb_challenges_add_stats; + maps\mp\zombies\_zm_challenges::init(); +} + +tomb_challenges_add_stats() +{ + n_kills = 115; + n_zone_caps = 6; + n_points_spent = 30000; + n_boxes_filled = 4; +/# + if ( getdvarint( _hash_FA81816F ) > 0 ) + { + n_kills = 1; + n_zone_caps = 2; + n_points_spent = 500; + n_boxes_filled = 1; + } +#/ + add_stat( "zc_headshots", 0, &"ZM_TOMB_CH1", n_kills, undefined, ::reward_packed_weapon ); + add_stat( "zc_zone_captures", 0, &"ZM_TOMB_CH2", n_zone_caps, undefined, ::reward_powerup_max_ammo ); + add_stat( "zc_points_spent", 0, &"ZM_TOMB_CH3", n_points_spent, undefined, ::reward_double_tap, ::track_points_spent ); + add_stat( "zc_boxes_filled", 1, &"ZM_TOMB_CHT", n_boxes_filled, undefined, ::reward_one_inch_punch, ::init_box_footprints ); +} + +track_points_spent() +{ + while ( true ) + { + level waittill( "spent_points", player, points ); + + player increment_stat( "zc_points_spent", points ); + } +} + +init_box_footprints() +{ + level.n_soul_boxes_completed = 0; + flag_init( "vo_soul_box_intro_played" ); + flag_init( "vo_soul_box_continue_played" ); + a_boxes = getentarray( "foot_box", "script_noteworthy" ); + array_thread( a_boxes, ::box_footprint_think ); +} + +#using_animtree("fxanim_props_dlc4"); + +box_footprint_think() +{ + self.n_souls_absorbed = 0; + n_souls_required = 30; +/# + if ( getdvarint( _hash_FA81816F ) > 0 ) + n_souls_required = 10; +#/ + self useanimtree( #animtree ); + self thread watch_for_foot_stomp(); + wait 1; + self setclientfield( "foot_print_box_glow", 1 ); + wait 1; + self setclientfield( "foot_print_box_glow", 0 ); + + while ( self.n_souls_absorbed < n_souls_required ) + { + self waittill( "soul_absorbed", player ); + + self.n_souls_absorbed++; + + if ( self.n_souls_absorbed == 1 ) + { + self clearanim( %o_zombie_dlc4_challenge_box_close, 0 ); + self setanim( %o_zombie_dlc4_challenge_box_open ); + self delay_thread( 1, ::setclientfield, "foot_print_box_glow", 1 ); + + if ( isdefined( player ) && !flag( "vo_soul_box_intro_played" ) ) + player delay_thread( 1.5, ::richtofenrespondvoplay, "zm_box_start", 0, "vo_soul_box_intro_played" ); + } + + if ( self.n_souls_absorbed == floor( n_souls_required / 4 ) ) + { + if ( isdefined( player ) && flag( "vo_soul_box_intro_played" ) && !flag( "vo_soul_box_continue_played" ) ) + player thread richtofenrespondvoplay( "zm_box_continue", 1, "vo_soul_box_continue_played" ); + } + + if ( self.n_souls_absorbed == floor( n_souls_required / 2 ) || self.n_souls_absorbed == floor( n_souls_required / 1.3 ) ) + { + if ( isdefined( player ) ) + player create_and_play_dialog( "soul_box", "zm_box_encourage" ); + } + + if ( self.n_souls_absorbed == n_souls_required ) + { + wait 1; + self clearanim( %o_zombie_dlc4_challenge_box_open, 0 ); + self setanim( %o_zombie_dlc4_challenge_box_close ); + } + } + + self notify( "box_finished" ); + level.n_soul_boxes_completed++; + e_volume = getent( self.target, "targetname" ); + e_volume delete(); + self delay_thread( 0.5, ::setclientfield, "foot_print_box_glow", 0 ); + wait 1; + self movez( 30, 1, 1 ); + wait 0.5; + n_rotations = randomintrange( 5, 7 ); + v_start_angles = self.angles; + + for ( i = 0; i < n_rotations; i++ ) + { + v_rotate_angles = v_start_angles + ( randomfloatrange( -10, 10 ), randomfloatrange( -10, 10 ), randomfloatrange( -10, 10 ) ); + n_rotate_time = randomfloatrange( 0.2, 0.4 ); + self rotateto( v_rotate_angles, n_rotate_time ); + + self waittill( "rotatedone" ); + } + + self rotateto( v_start_angles, 0.3 ); + self movez( -60, 0.5, 0.5 ); + + self waittill( "rotatedone" ); + + trace_start = self.origin + vectorscale( ( 0, 0, 1 ), 200.0 ); + trace_end = self.origin; + fx_trace = bullettrace( trace_start, trace_end, 0, self ); + playfx( level._effect["mech_booster_landing"], fx_trace["position"], anglestoforward( self.angles ), anglestoup( self.angles ) ); + playsoundatposition( "zmb_footprintbox_disappear", self.origin ); + + self waittill( "movedone" ); + + level maps\mp\zombies\_zm_challenges::increment_stat( "zc_boxes_filled" ); + + if ( isdefined( player ) ) + { + if ( level.n_soul_boxes_completed == 1 ) + player thread richtofenrespondvoplay( "zm_box_complete" ); + else if ( level.n_soul_boxes_completed == 4 ) + player thread richtofenrespondvoplay( "zm_box_final_complete", 1 ); + } + + self delete(); +} + +watch_for_foot_stomp() +{ + self endon( "box_finished" ); + + while ( true ) + { + self waittill( "robot_foot_stomp" ); + + self clearanim( %o_zombie_dlc4_challenge_box_open, 0 ); + self setanim( %o_zombie_dlc4_challenge_box_close ); + self setclientfield( "foot_print_box_glow", 0 ); + self.n_souls_absorbed = 0; + wait 5; + } +} + +footprint_zombie_killed( attacker ) +{ + a_volumes = getentarray( "foot_box_volume", "script_noteworthy" ); + + foreach ( e_volume in a_volumes ) + { + if ( self istouching( e_volume ) && isdefined( attacker ) && isplayer( attacker ) ) + { + self setclientfield( "foot_print_box_fx", 1 ); + m_box = getent( e_volume.target, "targetname" ); + m_box notify( "soul_absorbed", attacker ); + return true; + } + } + + return false; +} + +reward_packed_weapon( player, s_stat ) +{ + if ( !isdefined( s_stat.str_reward_weapon ) ) + { + a_weapons = array( "scar_zm", "galil_zm", "mp44_zm" ); + s_stat.str_reward_weapon = maps\mp\zombies\_zm_weapons::get_upgrade_weapon( random( a_weapons ) ); + } + + m_weapon = spawn( "script_model", self.origin ); + m_weapon.angles = self.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); + m_weapon playsound( "zmb_spawn_powerup" ); + m_weapon playloopsound( "zmb_spawn_powerup_loop", 0.5 ); + str_model = getweaponmodel( s_stat.str_reward_weapon ); + options = player maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( s_stat.str_reward_weapon ); + m_weapon useweaponmodel( s_stat.str_reward_weapon, str_model, options ); + wait_network_frame(); + + if ( !reward_rise_and_grab( m_weapon, 50, 2, 2, 10 ) ) + return false; + + weapon_limit = get_player_weapon_limit( player ); + primaries = player getweaponslistprimaries(); + + if ( isdefined( primaries ) && primaries.size >= weapon_limit ) + player maps\mp\zombies\_zm_weapons::weapon_give( s_stat.str_reward_weapon ); + else + { + player giveweapon( s_stat.str_reward_weapon, 0, player maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( s_stat.str_reward_weapon ) ); + player givestartammo( s_stat.str_reward_weapon ); + } + + player switchtoweapon( s_stat.str_reward_weapon ); + m_weapon stoploopsound( 0.1 ); + player playsound( "zmb_powerup_grabbed" ); + m_weapon delete(); + return true; +} + +reward_powerup_max_ammo( player, s_stat ) +{ + return reward_powerup( player, "full_ammo" ); +} + +reward_powerup_double_points( player, n_timeout ) +{ + return reward_powerup( player, "double_points", n_timeout ); +} + +reward_powerup_zombie_blood( player, n_timeout ) +{ + return reward_powerup( player, "zombie_blood", n_timeout ); +} + +reward_powerup( player, str_powerup, n_timeout = 10 ) +{ + if ( !isdefined( level.zombie_powerups[str_powerup] ) ) + return; + + s_powerup = level.zombie_powerups[str_powerup]; + m_reward = spawn( "script_model", self.origin ); + m_reward.angles = self.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); + m_reward setmodel( s_powerup.model_name ); + m_reward playsound( "zmb_spawn_powerup" ); + m_reward playloopsound( "zmb_spawn_powerup_loop", 0.5 ); + wait_network_frame(); + + if ( !reward_rise_and_grab( m_reward, 50, 2, 2, n_timeout ) ) + return 0; + + m_reward.hint = s_powerup.hint; + + if ( !isdefined( player ) ) + player = self.player_using; + + switch ( str_powerup ) + { + case "full_ammo": + level thread maps\mp\zombies\_zm_powerups::full_ammo_powerup( m_reward, player ); + player thread powerup_vo( "full_ammo" ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "full_ammo", player.pers["team"] ); + break; + case "double_points": + level thread maps\mp\zombies\_zm_powerups::double_points_powerup( m_reward, player ); + player thread powerup_vo( "double_points" ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "double_points", player.pers["team"] ); + break; + case "zombie_blood": + level thread maps\mp\zombies\_zm_powerup_zombie_blood::zombie_blood_powerup( m_reward, player ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "zombie_blood", player.pers["team"] ); + } + + wait 0.1; + m_reward stoploopsound( 0.1 ); + player playsound( "zmb_powerup_grabbed" ); + m_reward delete(); + return 1; +} + +reward_double_tap( player, s_stat ) +{ + m_reward = spawn( "script_model", self.origin ); + m_reward.angles = self.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); + str_model = getweaponmodel( "zombie_perk_bottle_doubletap" ); + m_reward setmodel( str_model ); + m_reward playsound( "zmb_spawn_powerup" ); + m_reward playloopsound( "zmb_spawn_powerup_loop", 0.5 ); + wait_network_frame(); + + if ( !reward_rise_and_grab( m_reward, 50, 2, 2, 10 ) ) + return false; + + if ( player hasperk( "specialty_rof" ) || player has_perk_paused( "specialty_rof" ) ) + { + m_reward thread bottle_reject_sink( player ); + return false; + } + + m_reward stoploopsound( 0.1 ); + player playsound( "zmb_powerup_grabbed" ); + m_reward thread maps\mp\zombies\_zm_perks::vending_trigger_post_think( player, "specialty_rof" ); + m_reward delete(); + return true; +} + +bottle_reject_sink( player ) +{ + n_time = 1; + player playlocalsound( level.zmb_laugh_alias ); + self thread maps\mp\zombies\_zm_challenges::reward_sink( 0, 61, n_time ); + wait( n_time ); + self delete(); +} + +reward_one_inch_punch( player, s_stat ) +{ + m_reward = spawn( "script_model", self.origin ); + m_reward.angles = self.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); + m_reward setmodel( "tag_origin" ); + playfxontag( level._effect["staff_soul"], m_reward, "tag_origin" ); + m_reward playsound( "zmb_spawn_powerup" ); + m_reward playloopsound( "zmb_spawn_powerup_loop", 0.5 ); + wait_network_frame(); + + if ( !reward_rise_and_grab( m_reward, 50, 2, 2, 10 ) ) + return false; + + player thread maps\mp\zombies\_zm_weap_one_inch_punch::one_inch_punch_melee_attack(); + m_reward stoploopsound( 0.1 ); + player playsound( "zmb_powerup_grabbed" ); + m_reward delete(); + player thread one_inch_punch_watch_for_death( s_stat ); + return true; +} + +one_inch_punch_watch_for_death( s_stat ) +{ + self endon( "disconnect" ); + + self waittill( "bled_out" ); + + if ( s_stat.b_reward_claimed ) + s_stat.b_reward_claimed = 0; + + s_stat.a_b_player_rewarded[self.characterindex] = 0; +} + +reward_beacon( player, s_stat ) +{ + m_reward = spawn( "script_model", self.origin ); + m_reward.angles = self.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); + str_model = getweaponmodel( "beacon_zm" ); + m_reward setmodel( str_model ); + m_reward playsound( "zmb_spawn_powerup" ); + m_reward playloopsound( "zmb_spawn_powerup_loop", 0.5 ); + wait_network_frame(); + + if ( !reward_rise_and_grab( m_reward, 50, 2, 2, 10 ) ) + return false; + + player maps\mp\zombies\_zm_weapons::weapon_give( "beacon_zm" ); + + if ( isdefined( level.zombie_include_weapons["beacon_zm"] ) && !level.zombie_include_weapons["beacon_zm"] ) + { + level.zombie_include_weapons["beacon_zm"] = 1; + level.zombie_weapons["beacon_zm"].is_in_box = 1; + } + + m_reward stoploopsound( 0.1 ); + player playsound( "zmb_powerup_grabbed" ); + m_reward delete(); + return true; +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_chamber.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_chamber.gsc new file mode 100644 index 0000000..158c3cc --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_chamber.gsc @@ -0,0 +1,303 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zombies\_zm_laststand; + +main() +{ + level thread inits(); + level thread chamber_wall_change_randomly(); +} + +inits() +{ + a_walls = getentarray( "chamber_wall", "script_noteworthy" ); + + foreach ( e_wall in a_walls ) + { + e_wall.down_origin = e_wall.origin; + e_wall.up_origin = ( e_wall.origin[0], e_wall.origin[1], e_wall.origin[2] + 1000 ); + } + + level.n_chamber_wall_active = 0; + flag_wait( "start_zombie_round_logic" ); + wait 3.0; + + foreach ( e_wall in a_walls ) + { + e_wall moveto( e_wall.up_origin, 0.05 ); + e_wall connectpaths(); + } +/# + level thread chamber_devgui(); +#/ +} + +chamber_devgui() +{ +/# + setdvarint( "chamber_wall", 5 ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Chamber:1/Fire:1\" \"chamber_wall 1\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Chamber:1/Air:2\" \"chamber_wall 2\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Chamber:1/Lightning:3\" \"chamber_wall 3\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Chamber:1/Water:4\" \"chamber_wall 4\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Chamber:1/None:5\" \"chamber_wall 0\"\n" ); + level thread watch_chamber_wall(); +#/ +} + +watch_chamber_wall() +{ +/# + while ( true ) + { + if ( getdvarint( _hash_763A3046 ) != 5 ) + { + chamber_change_walls( getdvarint( _hash_763A3046 ) ); + setdvarint( "chamber_wall", 5 ); + } + + wait 0.05; + } +#/ +} + +cap_value( val, min, max ) +{ + if ( val < min ) + return min; + else if ( val > max ) + return max; + else + return val; +} + +chamber_wall_dust() +{ + for ( i = 1; i <= 9; i++ ) + { + playfxontag( level._effect["crypt_wall_drop"], self, "tag_fx_dust_0" + i ); + wait_network_frame(); + } +} + +chamber_change_walls( n_element ) +{ + if ( n_element == level.n_chamber_wall_active ) + return; + + e_current_wall = undefined; + e_new_wall = undefined; + playsoundatposition( "zmb_chamber_wallchange", ( 10342, -7921, -272 ) ); + a_walls = getentarray( "chamber_wall", "script_noteworthy" ); + + foreach ( e_wall in a_walls ) + { + if ( e_wall.script_int == n_element ) + { + e_wall thread move_wall_down(); + continue; + } + + if ( e_wall.script_int == level.n_chamber_wall_active ) + e_wall thread move_wall_up(); + } + + level.n_chamber_wall_active = n_element; +} + +is_chamber_occupied() +{ + a_players = getplayers(); + + foreach ( e_player in a_players ) + { + if ( is_point_in_chamber( e_player.origin ) ) + return true; + } + + return false; +} + +is_point_in_chamber( v_origin ) +{ + if ( !isdefined( level.s_chamber_center ) ) + { + level.s_chamber_center = getstruct( "chamber_center", "targetname" ); + level.s_chamber_center.radius_sq = level.s_chamber_center.script_float * level.s_chamber_center.script_float; + } + + return distance2dsquared( level.s_chamber_center.origin, v_origin ) < level.s_chamber_center.radius_sq; +} + +chamber_wall_change_randomly() +{ + flag_wait( "start_zombie_round_logic" ); + a_element_enums = array( 1, 2, 3, 4 ); + level endon( "stop_random_chamber_walls" ); + + for ( n_elem_prev = undefined; 1; n_elem_prev = n_elem ) + { + while ( !is_chamber_occupied() ) + wait 1.0; + + flag_wait( "any_crystal_picked_up" ); + n_round = cap_value( level.round_number, 10, 30 ); + f_progression_pct = ( n_round - 10 ) / ( 30 - 10 ); + n_change_wall_time = lerpfloat( 15, 5, f_progression_pct ); + n_elem = random( a_element_enums ); + arrayremovevalue( a_element_enums, n_elem, 0 ); + + if ( isdefined( n_elem_prev ) ) + a_element_enums[a_element_enums.size] = n_elem_prev; + + chamber_change_walls( n_elem ); + wait( n_change_wall_time ); + } +} + +move_wall_up() +{ + self moveto( self.up_origin, 1 ); + + self waittill( "movedone" ); + + self connectpaths(); +} + +move_wall_down() +{ + self moveto( self.down_origin, 1 ); + + self waittill( "movedone" ); + + rumble_players_in_chamber( 2, 0.1 ); + self thread chamber_wall_dust(); + self disconnectpaths(); +} + +random_shuffle( a_items, item ) +{ + b_done_shuffling = undefined; + + if ( !isdefined( item ) ) + item = a_items[a_items.size - 1]; + + while ( !( isdefined( b_done_shuffling ) && b_done_shuffling ) ) + { + a_items = array_randomize( a_items ); + + if ( a_items[0] != item ) + b_done_shuffling = 1; + + wait 0.05; + } + + return a_items; +} + +tomb_chamber_find_exit_point() +{ + self endon( "death" ); + player = get_players()[0]; + dist_zombie = 0; + dist_player = 0; + dest = 0; + away = vectornormalize( self.origin - player.origin ); + endpos = self.origin + vectorscale( away, 600 ); + locs = array_randomize( level.enemy_dog_locations ); + + for ( i = 0; i < locs.size; i++ ) + { + dist_zombie = distancesquared( locs[i].origin, endpos ); + dist_player = distancesquared( locs[i].origin, player.origin ); + + if ( dist_zombie < dist_player ) + { + dest = i; + break; + } + } + + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + + if ( isdefined( locs[dest] ) ) + self setgoalpos( locs[dest].origin ); + + self.b_wandering_in_chamber = 1; + flag_wait( "player_active_in_chamber" ); + self.b_wandering_in_chamber = 0; + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); +} + +chamber_zombies_find_poi() +{ + zombies = getaiarray( level.zombie_team ); + + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i].b_wandering_in_chamber ) && zombies[i].b_wandering_in_chamber ) + continue; + + if ( !is_point_in_chamber( zombies[i].origin ) ) + continue; + + zombies[i] thread tomb_chamber_find_exit_point(); + } +} + +tomb_is_valid_target_in_chamber() +{ + a_players = getplayers(); + + foreach ( e_player in a_players ) + { + if ( e_player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + continue; + + if ( isdefined( e_player.b_zombie_blood ) && e_player.b_zombie_blood || isdefined( e_player.ignoreme ) && e_player.ignoreme ) + continue; + + if ( !is_point_in_chamber( e_player.origin ) ) + continue; + + return true; + } + + return false; +} + +is_player_in_chamber() +{ + if ( is_point_in_chamber( self.origin ) ) + return true; + else + return false; +} + +tomb_watch_chamber_player_activity() +{ + flag_init( "player_active_in_chamber" ); + flag_wait( "start_zombie_round_logic" ); + + while ( true ) + { + wait 1.0; + + if ( is_chamber_occupied() ) + { + if ( tomb_is_valid_target_in_chamber() ) + flag_set( "player_active_in_chamber" ); + else + { + flag_clear( "player_active_in_chamber" ); + chamber_zombies_find_poi(); + } + } + } +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_classic.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_classic.gsc new file mode 100644 index 0000000..874a9f1 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_classic.gsc @@ -0,0 +1,37 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zm_tomb_craftables; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zombies\_zm_magicbox; + +precache() +{ + if ( isdefined( level.createfx_enabled ) && level.createfx_enabled ) + return; + + maps\mp\zombies\_zm_craftables::init(); + maps\mp\zm_tomb_craftables::randomize_craftable_spawns(); + maps\mp\zm_tomb_craftables::include_craftables(); + maps\mp\zm_tomb_craftables::init_craftables(); +} + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "tomb" ); + maps\mp\zombies\_zm_game_module::set_current_game_module( level.game_module_standard_index ); + level thread maps\mp\zombies\_zm_craftables::think_craftables(); + flag_wait( "initial_blackscreen_passed" ); +} + +zm_treasure_chest_init() +{ + chest1 = getstruct( "start_chest", "script_noteworthy" ); + level.chests = []; + level.chests[level.chests.size] = chest1; + maps\mp\zombies\_zm_magicbox::treasure_chest_init( "start_chest" ); +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_craftables.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_craftables.gsc new file mode 100644 index 0000000..e13198c --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_craftables.gsc @@ -0,0 +1,1389 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zm_tomb_main_quest; +#include maps\mp\zm_tomb_vo; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_ai_quadrotor; +#include maps\mp\zombies\_zm_equipment; + +randomize_craftable_spawns() +{ + a_randomized_craftables = array( "gramophone_vinyl_ice", "gramophone_vinyl_air", "gramophone_vinyl_elec", "gramophone_vinyl_fire", "gramophone_vinyl_master", "gramophone_vinyl_player" ); + + foreach ( str_craftable in a_randomized_craftables ) + { + s_original_pos = getstruct( str_craftable, "targetname" ); + a_alt_locations = getstructarray( str_craftable + "_alt", "targetname" ); + n_loc_index = randomintrange( 0, a_alt_locations.size + 1 ); + + if ( n_loc_index == a_alt_locations.size ) + continue; + else + { + s_original_pos.origin = a_alt_locations[n_loc_index].origin; + s_original_pos.angles = a_alt_locations[n_loc_index].angles; + } + } +} + +init_craftables() +{ + precachemodel( "p6_zm_tm_quadrotor_stand" ); + flag_init( "quadrotor_cooling_down" ); + level.craftable_piece_count = 4; + flag_init( "any_crystal_picked_up" ); + flag_init( "staff_air_zm_enabled" ); + flag_init( "staff_fire_zm_enabled" ); + flag_init( "staff_lightning_zm_enabled" ); + flag_init( "staff_water_zm_enabled" ); + register_clientfields(); + add_zombie_craftable( "equip_dieseldrone_zm", &"ZM_TOMB_CRQ", &"ZM_TOMB_CRQ", &"ZM_TOMB_TQ", ::onfullycrafted_quadrotor, 1 ); + add_zombie_craftable_vox_category( "equip_dieseldrone_zm", "build_dd" ); + make_zombie_craftable_open( "equip_dieseldrone_zm", "veh_t6_dlc_zm_quadrotor", ( 0, 0, 0 ), ( 0, -4, 10 ) ); + add_zombie_craftable( "tomb_shield_zm", &"ZM_TOMB_CRRI", undefined, &"ZOMBIE_BOUGHT_RIOT", undefined, 1 ); + add_zombie_craftable_vox_category( "tomb_shield_zm", "build_zs" ); + make_zombie_craftable_open( "tomb_shield_zm", "t6_wpn_zmb_shield_dlc4_dmg0_world", vectorscale( ( 0, -1, 0 ), 90.0 ), ( 0, 0, level.riotshield_placement_zoffset ) ); + add_zombie_craftable( "elemental_staff_fire", &"ZM_TOMB_CRF", &"ZM_TOMB_INS", &"ZM_TOMB_BOF", ::staff_fire_fullycrafted, 1 ); + add_zombie_craftable_vox_category( "elemental_staff_fire", "fire_staff" ); + add_zombie_craftable( "elemental_staff_air", &"ZM_TOMB_CRA", &"ZM_TOMB_INS", &"ZM_TOMB_BOA", ::staff_air_fullycrafted, 1 ); + add_zombie_craftable_vox_category( "elemental_staff_air", "air_staff" ); + add_zombie_craftable( "elemental_staff_lightning", &"ZM_TOMB_CRL", &"ZM_TOMB_INS", &"ZM_TOMB_BOL", ::staff_lightning_fullycrafted, 1 ); + add_zombie_craftable_vox_category( "elemental_staff_lightning", "light_staff" ); + add_zombie_craftable( "elemental_staff_water", &"ZM_TOMB_CRW", &"ZM_TOMB_INS", &"ZM_TOMB_BOW", ::staff_water_fullycrafted, 1 ); + add_zombie_craftable_vox_category( "elemental_staff_water", "ice_staff" ); + add_zombie_craftable( "gramophone", &"ZM_TOMB_CRAFT_GRAMOPHONE", &"ZM_TOMB_CRAFT_GRAMOPHONE", &"ZM_TOMB_BOUGHT_GRAMOPHONE", undefined, 0 ); + add_zombie_craftable_vox_category( "gramophone", "gramophone" ); + level.zombie_craftable_persistent_weapon = ::tomb_check_crafted_weapon_persistence; + level.custom_craftable_validation = ::tomb_custom_craftable_validation; + level.zombie_custom_equipment_setup = ::setup_quadrotor_purchase; + level thread hide_staff_model(); + level.quadrotor_status = spawnstruct(); + level.quadrotor_status.crafted = 0; + level.quadrotor_status.picked_up = 0; + level.num_staffpieces_picked_up = []; + level.n_staffs_crafted = 0; +} + +add_craftable_cheat( craftable ) +{ +/# + if ( !isdefined( level.cheat_craftables ) ) + level.cheat_craftables = []; + + foreach ( s_piece in craftable.a_piecestubs ) + { + id_string = undefined; + client_field_val = undefined; + + if ( isdefined( s_piece.client_field_id ) ) + { + id_string = s_piece.client_field_id; + client_field_val = id_string; + } + else if ( isdefined( s_piece.client_field_state ) ) + { + id_string = "gem"; + client_field_val = s_piece.client_field_state; + } + else + continue; + + tokens = strtok( id_string, "_" ); + display_string = "piece"; + + foreach ( token in tokens ) + { + if ( token != "piece" && token != "staff" && token != "zm" ) + display_string = display_string + "_" + token; + } + + level.cheat_craftables["" + client_field_val] = s_piece; + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Craftables:1/" + craftable.name + "/" + display_string + "\" \"give_craftable " + client_field_val + "\"\n" ); + s_piece.waste = "waste"; + } + + flag_wait( "start_zombie_round_logic" ); + + foreach ( s_piece in craftable.a_piecestubs ) + { + s_piece craftable_waittill_spawned(); + s_piece.piecespawn.model thread puzzle_debug_position( "C", vectorscale( ( 0, 1, 0 ), 255.0 ), undefined, "show_craftable_locations" ); + } +#/ +} + +autocraft_staffs() +{ + setdvar( "autocraft_staffs", "off" ); +/# + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Craftables:1/Give All Staff Pieces:0\" \"autocraft_staffs on\"\n" ); +#/ + while ( getdvar( _hash_373B6254 ) != "on" ) + wait_network_frame(); + + flag_wait( "start_zombie_round_logic" ); + keys = getarraykeys( level.cheat_craftables ); + a_players = getplayers(); + + foreach ( key in keys ) + { + if ( issubstr( key, "staff" ) || issubstr( key, "record" ) ) + { + s_piece = level.cheat_craftables[key]; + + if ( isdefined( s_piece.piecespawn ) ) + a_players[0] maps\mp\zombies\_zm_craftables::player_take_piece( s_piece.piecespawn ); + } + } + + for ( i = 1; i <= 4; i++ ) + { + level notify( "player_teleported", a_players[0], i ); + wait_network_frame(); + piece_spawn = level.cheat_craftables["" + i].piecespawn; + + if ( isdefined( piece_spawn ) ) + { + if ( isdefined( a_players[i - 1] ) ) + { + a_players[i - 1] maps\mp\zombies\_zm_craftables::player_take_piece( piece_spawn ); + wait_network_frame(); + } + } + + wait_network_frame(); + } +} + +run_craftables_devgui() +{ +/# + level thread autocraft_staffs(); + setdvar( "give_craftable", "" ); + + while ( true ) + { + craftable_id = getdvar( _hash_817E2753 ); + + if ( craftable_id != "" ) + { + piece_spawn = level.cheat_craftables[craftable_id].piecespawn; + + if ( isdefined( piece_spawn ) ) + { + players = getplayers(); + players[0] maps\mp\zombies\_zm_craftables::player_take_piece( piece_spawn ); + } + + setdvar( "give_craftable", "" ); + } + + wait 0.05; + } +#/ +} + +include_craftables() +{ + level thread run_craftables_devgui(); + craftable_name = "equip_dieseldrone_zm"; + quadrotor_body = generate_zombie_craftable_piece( craftable_name, "body", "veh_t6_dlc_zm_quad_piece_body", 32, 64, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_quadrotor_zm_body", 1, "build_dd" ); + quadrotor_brain = generate_zombie_craftable_piece( craftable_name, "brain", "veh_t6_dlc_zm_quad_piece_brain", 32, 64, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_quadrotor_zm_brain", 1, "build_dd_brain" ); + quadrotor_engine = generate_zombie_craftable_piece( craftable_name, "engine", "veh_t6_dlc_zm_quad_piece_engine", 32, 64, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_quadrotor_zm_engine", 1, "build_dd" ); + quadrotor = spawnstruct(); + quadrotor.name = craftable_name; + quadrotor add_craftable_piece( quadrotor_body ); + quadrotor add_craftable_piece( quadrotor_brain ); + quadrotor add_craftable_piece( quadrotor_engine ); + quadrotor.triggerthink = ::quadrotorcraftable; + include_zombie_craftable( quadrotor ); + level thread add_craftable_cheat( quadrotor ); + craftable_name = "tomb_shield_zm"; + riotshield_top = generate_zombie_craftable_piece( craftable_name, "top", "t6_wpn_zmb_shield_dlc4_top", 48, 64, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_dolly", 1, "build_zs" ); + riotshield_door = generate_zombie_craftable_piece( craftable_name, "door", "t6_wpn_zmb_shield_dlc4_door", 48, 15, 25, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_door", 1, "build_zs" ); + riotshield_bracket = generate_zombie_craftable_piece( craftable_name, "bracket", "t6_wpn_zmb_shield_dlc4_bracket", 48, 15, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_clamp", 1, "build_zs" ); + riotshield = spawnstruct(); + riotshield.name = craftable_name; + riotshield add_craftable_piece( riotshield_top ); + riotshield add_craftable_piece( riotshield_door ); + riotshield add_craftable_piece( riotshield_bracket ); + riotshield.onbuyweapon = ::onbuyweapon_riotshield; + riotshield.triggerthink = ::riotshieldcraftable; + include_craftable( riotshield ); + level thread add_craftable_cheat( riotshield ); + craftable_name = "elemental_staff_air"; + staff_air_gem = generate_zombie_craftable_piece( craftable_name, "gem", "t6_wpn_zmb_staff_crystal_air_part", 48, 64, 0, undefined, ::onpickup_aircrystal, ::ondrop_aircrystal, undefined, undefined, undefined, undefined, 2, 0, "crystal", 1 ); + staff_air_upper_staff = generate_zombie_craftable_piece( craftable_name, "upper_staff", "t6_wpn_zmb_staff_tip_air_world", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_ustaff_air", 1, "staff_part" ); + staff_air_middle_staff = generate_zombie_craftable_piece( craftable_name, "middle_staff", "t6_wpn_zmb_staff_stem_air_part", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_mstaff_air", 1, "staff_part" ); + staff_air_lower_staff = generate_zombie_craftable_piece( craftable_name, "lower_staff", "t6_wpn_zmb_staff_revive_part", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_lstaff_air", 1, "staff_part" ); + staff = spawnstruct(); + staff.name = craftable_name; + staff add_craftable_piece( staff_air_gem ); + staff add_craftable_piece( staff_air_upper_staff ); + staff add_craftable_piece( staff_air_middle_staff ); + staff add_craftable_piece( staff_air_lower_staff ); + staff.triggerthink = ::staffcraftable_air; + staff.custom_craftablestub_update_prompt = ::tomb_staff_update_prompt; + include_zombie_craftable( staff ); + level thread add_craftable_cheat( staff ); + count_staff_piece_pickup( array( staff_air_upper_staff, staff_air_middle_staff, staff_air_lower_staff ) ); + craftable_name = "elemental_staff_fire"; + staff_fire_gem = generate_zombie_craftable_piece( craftable_name, "gem", "t6_wpn_zmb_staff_crystal_fire_part", 48, 64, 0, undefined, ::onpickup_firecrystal, ::ondrop_firecrystal, undefined, undefined, undefined, undefined, 1, 0, "crystal", 1 ); + staff_fire_upper_staff = generate_zombie_craftable_piece( craftable_name, "upper_staff", "t6_wpn_zmb_staff_tip_fire_world", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_ustaff_fire", 1, "staff_part" ); + staff_fire_middle_staff = generate_zombie_craftable_piece( craftable_name, "middle_staff", "t6_wpn_zmb_staff_stem_fire_part", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_mstaff_fire", 1, "staff_part" ); + staff_fire_lower_staff = generate_zombie_craftable_piece( craftable_name, "lower_staff", "t6_wpn_zmb_staff_revive_part", 64, 128, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_lstaff_fire", 1, "staff_part" ); + level thread maps\mp\zm_tomb_main_quest::staff_mechz_drop_pieces( staff_fire_lower_staff ); + level thread maps\mp\zm_tomb_main_quest::staff_biplane_drop_pieces( array( staff_fire_middle_staff ) ); + level thread maps\mp\zm_tomb_main_quest::staff_unlock_with_zone_capture( staff_fire_upper_staff ); + staff = spawnstruct(); + staff.name = craftable_name; + staff add_craftable_piece( staff_fire_gem ); + staff add_craftable_piece( staff_fire_upper_staff ); + staff add_craftable_piece( staff_fire_middle_staff ); + staff add_craftable_piece( staff_fire_lower_staff ); + staff.triggerthink = ::staffcraftable_fire; + staff.custom_craftablestub_update_prompt = ::tomb_staff_update_prompt; + include_zombie_craftable( staff ); + level thread add_craftable_cheat( staff ); + count_staff_piece_pickup( array( staff_fire_upper_staff, staff_fire_middle_staff, staff_fire_lower_staff ) ); + craftable_name = "elemental_staff_lightning"; + staff_lightning_gem = generate_zombie_craftable_piece( craftable_name, "gem", "t6_wpn_zmb_staff_crystal_bolt_part", 48, 64, 0, undefined, ::onpickup_lightningcrystal, ::ondrop_lightningcrystal, undefined, undefined, undefined, undefined, 3, 0, "crystal", 1 ); + staff_lightning_upper_staff = generate_zombie_craftable_piece( craftable_name, "upper_staff", "t6_wpn_zmb_staff_tip_lightning_world", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_ustaff_lightning", 1, "staff_part" ); + staff_lightning_middle_staff = generate_zombie_craftable_piece( craftable_name, "middle_staff", "t6_wpn_zmb_staff_stem_bolt_part", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_mstaff_lightning", 1, "staff_part" ); + staff_lightning_lower_staff = generate_zombie_craftable_piece( craftable_name, "lower_staff", "t6_wpn_zmb_staff_revive_part", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_lstaff_lightning", 1, "staff_part" ); + staff = spawnstruct(); + staff.name = craftable_name; + staff add_craftable_piece( staff_lightning_gem ); + staff add_craftable_piece( staff_lightning_upper_staff ); + staff add_craftable_piece( staff_lightning_middle_staff ); + staff add_craftable_piece( staff_lightning_lower_staff ); + staff.triggerthink = ::staffcraftable_lightning; + staff.custom_craftablestub_update_prompt = ::tomb_staff_update_prompt; + include_zombie_craftable( staff ); + level thread add_craftable_cheat( staff ); + count_staff_piece_pickup( array( staff_lightning_upper_staff, staff_lightning_middle_staff, staff_lightning_lower_staff ) ); + craftable_name = "elemental_staff_water"; + staff_water_gem = generate_zombie_craftable_piece( craftable_name, "gem", "t6_wpn_zmb_staff_crystal_water_part", 48, 64, 0, undefined, ::onpickup_watercrystal, ::ondrop_watercrystal, undefined, undefined, undefined, undefined, 4, 0, "crystal", 1 ); + staff_water_upper_staff = generate_zombie_craftable_piece( craftable_name, "upper_staff", "t6_wpn_zmb_staff_tip_water_world", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_ustaff_water", 1, "staff_part" ); + staff_water_middle_staff = generate_zombie_craftable_piece( craftable_name, "middle_staff", "t6_wpn_zmb_staff_stem_water_part", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_mstaff_water", 1, "staff_part" ); + staff_water_lower_staff = generate_zombie_craftable_piece( craftable_name, "lower_staff", "t6_wpn_zmb_staff_revive_part", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_lstaff_water", 1, "staff_part" ); + a_ice_staff_parts = array( staff_water_lower_staff, staff_water_middle_staff, staff_water_upper_staff ); + level thread maps\mp\zm_tomb_main_quest::staff_ice_dig_pieces( a_ice_staff_parts ); + staff = spawnstruct(); + staff.name = craftable_name; + staff add_craftable_piece( staff_water_gem ); + staff add_craftable_piece( staff_water_upper_staff ); + staff add_craftable_piece( staff_water_middle_staff ); + staff add_craftable_piece( staff_water_lower_staff ); + staff.triggerthink = ::staffcraftable_water; + staff.custom_craftablestub_update_prompt = ::tomb_staff_update_prompt; + include_zombie_craftable( staff ); + level thread add_craftable_cheat( staff ); + count_staff_piece_pickup( array( staff_water_upper_staff, staff_water_middle_staff, staff_water_lower_staff ) ); + craftable_name = "gramophone"; + vinyl_pickup_player = vinyl_add_pickup( craftable_name, "vinyl_player", "p6_zm_tm_gramophone", "piece_record_zm_player", undefined, "gramophone" ); + vinyl_pickup_master = vinyl_add_pickup( craftable_name, "vinyl_master", "p6_zm_tm_record_master", "piece_record_zm_vinyl_master", undefined, "record" ); + vinyl_pickup_air = vinyl_add_pickup( craftable_name, "vinyl_air", "p6_zm_tm_record_wind", "piece_record_zm_vinyl_air", "quest_state2", "record" ); + vinyl_pickup_ice = vinyl_add_pickup( craftable_name, "vinyl_ice", "p6_zm_tm_record_ice", "piece_record_zm_vinyl_water", "quest_state4", "record" ); + vinyl_pickup_fire = vinyl_add_pickup( craftable_name, "vinyl_fire", "p6_zm_tm_record_fire", "piece_record_zm_vinyl_fire", "quest_state1", "record" ); + vinyl_pickup_elec = vinyl_add_pickup( craftable_name, "vinyl_elec", "p6_zm_tm_record_lightning", "piece_record_zm_vinyl_lightning", "quest_state3", "record" ); + vinyl_pickup_player.sam_line = "gramophone_found"; + vinyl_pickup_master.sam_line = "master_found"; + vinyl_pickup_air.sam_line = "first_record_found"; + vinyl_pickup_ice.sam_line = "first_record_found"; + vinyl_pickup_fire.sam_line = "first_record_found"; + vinyl_pickup_elec.sam_line = "first_record_found"; + level thread maps\mp\zm_tomb_vo::watch_one_shot_samantha_line( "vox_sam_1st_record_found_0", "first_record_found" ); + level thread maps\mp\zm_tomb_vo::watch_one_shot_samantha_line( "vox_sam_gramophone_found_0", "gramophone_found" ); + level thread maps\mp\zm_tomb_vo::watch_one_shot_samantha_line( "vox_sam_master_found_0", "master_found" ); + gramophone = spawnstruct(); + gramophone.name = craftable_name; + gramophone add_craftable_piece( vinyl_pickup_player ); + gramophone add_craftable_piece( vinyl_pickup_master ); + gramophone add_craftable_piece( vinyl_pickup_air ); + gramophone add_craftable_piece( vinyl_pickup_ice ); + gramophone add_craftable_piece( vinyl_pickup_fire ); + gramophone add_craftable_piece( vinyl_pickup_elec ); + gramophone.triggerthink = ::gramophonecraftable; + include_zombie_craftable( gramophone ); + level thread add_craftable_cheat( gramophone ); + staff_fire_gem thread watch_part_pickup( "quest_state1", 2 ); + staff_air_gem thread watch_part_pickup( "quest_state2", 2 ); + staff_lightning_gem thread watch_part_pickup( "quest_state3", 2 ); + staff_water_gem thread watch_part_pickup( "quest_state4", 2 ); + staff_fire_gem thread staff_crystal_wait_for_teleport( 1 ); + staff_air_gem thread staff_crystal_wait_for_teleport( 2 ); + staff_lightning_gem thread staff_crystal_wait_for_teleport( 3 ); + staff_water_gem thread staff_crystal_wait_for_teleport( 4 ); + level thread maps\mp\zm_tomb_vo::staff_craft_vo(); + level thread maps\mp\zm_tomb_vo::samantha_discourage_think(); + level thread maps\mp\zm_tomb_vo::samantha_encourage_think(); + level thread craftable_add_glow_fx(); +} + +register_clientfields() +{ + bits = 1; + registerclientfield( "world", "piece_quadrotor_zm_body", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_quadrotor_zm_brain", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_quadrotor_zm_engine", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_riotshield_dolly", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_riotshield_door", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_riotshield_clamp", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_staff_zm_gem_air", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_staff_zm_ustaff_air", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_staff_zm_mstaff_air", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_staff_zm_lstaff_air", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_staff_zm_gem_fire", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_staff_zm_ustaff_fire", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_staff_zm_mstaff_fire", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_staff_zm_lstaff_fire", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_staff_zm_gem_lightning", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_staff_zm_ustaff_lightning", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_staff_zm_mstaff_lightning", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_staff_zm_lstaff_lightning", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_staff_zm_gem_water", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_staff_zm_ustaff_water", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_staff_zm_mstaff_water", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_staff_zm_lstaff_water", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_record_zm_player", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_record_zm_vinyl_master", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_record_zm_vinyl_air", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_record_zm_vinyl_water", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_record_zm_vinyl_fire", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_record_zm_vinyl_lightning", 14000, bits, "int", undefined, 0 ); + registerclientfield( "scriptmover", "element_glow_fx", 14000, 4, "int", undefined, 0 ); + registerclientfield( "scriptmover", "bryce_cake", 14000, 2, "int", undefined, 0 ); + registerclientfield( "scriptmover", "switch_spark", 14000, 1, "int", undefined, 0 ); + bits = getminbitcountfornum( 5 ); + registerclientfield( "world", "staff_player1", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "staff_player2", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "staff_player3", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "staff_player4", 14000, bits, "int", undefined, 0 ); + bits = getminbitcountfornum( 5 ); + registerclientfield( "world", "quest_state1", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "quest_state2", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "quest_state3", 14000, bits, "int", undefined, 0 ); + registerclientfield( "world", "quest_state4", 14000, bits, "int", undefined, 0 ); + registerclientfield( "toplayer", "sndMudSlow", 14000, 1, "int" ); +} + +craftable_add_glow_fx() +{ + flag_wait( "start_zombie_round_logic" ); + + foreach ( s_craftable in level.zombie_include_craftables ) + { + if ( !issubstr( s_craftable.name, "elemental_staff" ) ) + continue; + + n_elem = 0; + + if ( issubstr( s_craftable.name, "fire" ) ) + n_elem = 1; + else if ( issubstr( s_craftable.name, "air" ) ) + n_elem = 2; + else if ( issubstr( s_craftable.name, "lightning" ) ) + n_elem = 3; + else if ( issubstr( s_craftable.name, "water" ) ) + n_elem = 4; + else + { +/# + iprintlnbold( "ERROR: Unknown staff element type in craftable_add_glow_fx: " + s_craftable.name ); +#/ + return; + } + + foreach ( s_piece in s_craftable.a_piecestubs ) + { + if ( s_piece.piecename == "gem" ) + continue; + + s_piece craftable_waittill_spawned(); + do_glow_now = n_elem == 3 || n_elem == 2; + s_piece.piecespawn.model thread craftable_model_attach_glow( n_elem, do_glow_now ); + } + } +} + +craftable_model_attach_glow( n_elem, do_glow_now ) +{ + self endon( "death" ); + + if ( !do_glow_now ) + self waittill( "staff_piece_glow" ); + + self setclientfield( "element_glow_fx", n_elem ); +} + +tomb_staff_update_prompt( player, b_set_hint_string_now, trigger ) +{ + if ( isdefined( self.crafted ) && self.crafted ) + return true; + + self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE"; + + if ( isdefined( player ) ) + { + if ( !isdefined( player.current_craftable_piece ) ) + return false; + + if ( !self.craftablespawn craftable_has_piece( player.current_craftable_piece ) ) + { + self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG"; + return false; + } + } + + if ( level.staff_part_count[self.craftablespawn.craftable_name] == 0 ) + { + self.hint_string = level.zombie_craftablestubs[self.equipname].str_to_craft; + return true; + } + else + return false; +} + +init_craftable_choke() +{ + for ( level.craftables_spawned_this_frame = 0; 1; level.craftables_spawned_this_frame = 0 ) + wait_network_frame(); +} + +craftable_wait_your_turn() +{ + if ( !isdefined( level.craftables_spawned_this_frame ) ) + level thread init_craftable_choke(); + + while ( level.craftables_spawned_this_frame >= 2 ) + wait_network_frame(); + + level.craftables_spawned_this_frame++; +} + +quadrotorcraftable() +{ + craftable_wait_your_turn(); + maps\mp\zombies\_zm_craftables::craftable_trigger_think( "quadrotor_zm_craftable_trigger", "equip_dieseldrone_zm", "equip_dieseldrone_zm", &"ZM_TOMB_TQ", 1, 1 ); +} + +riotshieldcraftable() +{ + craftable_wait_your_turn(); + maps\mp\zombies\_zm_craftables::craftable_trigger_think( "riotshield_zm_craftable_trigger", "tomb_shield_zm", "tomb_shield_zm", &"ZOMBIE_GRAB_RIOTSHIELD", 1, 1 ); +} + +staffcraftable_air() +{ + craftable_wait_your_turn(); + maps\mp\zombies\_zm_craftables::craftable_trigger_think( "staff_air_craftable_trigger", "elemental_staff_air", "staff_air_zm", &"ZM_TOMB_PUAS", 1, 1 ); +} + +staffcraftable_fire() +{ + craftable_wait_your_turn(); + maps\mp\zombies\_zm_craftables::craftable_trigger_think( "staff_fire_craftable_trigger", "elemental_staff_fire", "staff_fire_zm", &"ZM_TOMB_PUFS", 1, 1 ); +} + +staffcraftable_lightning() +{ + craftable_wait_your_turn(); + maps\mp\zombies\_zm_craftables::craftable_trigger_think( "staff_lightning_craftable_trigger", "elemental_staff_lightning", "staff_lightning_zm", &"ZM_TOMB_PULS", 1, 1 ); +} + +staffcraftable_water() +{ + craftable_wait_your_turn(); + maps\mp\zombies\_zm_craftables::craftable_trigger_think( "staff_water_craftable_trigger", "elemental_staff_water", "staff_water_zm", &"ZM_TOMB_PUIS", 1, 1 ); +} + +gramophonecraftable() +{ + craftable_wait_your_turn(); + maps\mp\zombies\_zm_craftables::craftable_trigger_think( "gramophone_craftable_trigger", "gramophone", "gramophone", &"ZOMBIE_GRAB_GRAMOPHONE", 1, 1 ); +} + +tankcraftableupdateprompt( player, sethintstringnow, buildabletrigger ) +{ + if ( level.vh_tank getspeedmph() > 0.0 ) + { + if ( isdefined( self ) ) + { + self.hint_string = ""; + + if ( isdefined( sethintstringnow ) && sethintstringnow && isdefined( buildabletrigger ) ) + buildabletrigger sethintstring( self.hint_string ); + } + + return false; + } + + return true; +} + +ondrop_common( player ) +{ + self.piece_owner = undefined; +} + +ondrop_crystal( player ) +{ + ondrop_common( player ); + s_piece = self.piecestub; + s_piece.piecespawn.canmove = 1; + maps\mp\zombies\_zm_unitrigger::reregister_unitrigger_as_dynamic( s_piece.piecespawn.unitrigger ); + s_original_pos = getstruct( self.craftablename + "_" + self.piecename ); + s_piece.piecespawn.unitrigger trigger_off(); + s_piece.piecespawn.model ghost(); + s_piece.piecespawn.model moveto( s_original_pos.origin, 0.05 ); + + s_piece.piecespawn.model waittill( "movedone" ); + + s_piece.piecespawn.model show(); + s_piece.piecespawn.unitrigger trigger_on(); +} + +ondrop_firecrystal( player ) +{ + level setclientfield( "piece_staff_zm_gem_fire", 0 ); + level setclientfield( "quest_state1", 1 ); + level setclientfield( "piece_record_zm_vinyl_fire", 0 ); + player clear_player_crystal( 1 ); + ondrop_crystal( player ); +} + +ondrop_aircrystal( player ) +{ + level setclientfield( "piece_staff_zm_gem_air", 0 ); + level setclientfield( "quest_state2", 1 ); + level setclientfield( "piece_record_zm_vinyl_air", 0 ); + player clear_player_crystal( 2 ); + ondrop_crystal( player ); +} + +ondrop_lightningcrystal( player ) +{ + level setclientfield( "piece_staff_zm_gem_lightning", 0 ); + level setclientfield( "quest_state3", 1 ); + level setclientfield( "piece_record_zm_vinyl_lightning", 0 ); + player clear_player_crystal( 3 ); + ondrop_crystal( player ); +} + +ondrop_watercrystal( player ) +{ + level setclientfield( "piece_staff_zm_gem_water", 0 ); + level setclientfield( "quest_state4", 1 ); + level setclientfield( "piece_record_zm_vinyl_water", 0 ); + player clear_player_crystal( 4 ); + ondrop_crystal( player ); +} + +clear_player_crystal( n_element ) +{ + if ( n_element == self.crystal_id ) + { + n_player = self getentitynumber() + 1; + level setclientfield( "staff_player" + n_player, 0 ); + self.crystal_id = 0; + } +} + +piece_pickup_conversation( player ) +{ + wait 1.0; + + while ( isdefined( player.isspeaking ) && player.isspeaking ) + wait_network_frame(); + + if ( isdefined( self.piecestub.vo_line_notify ) ) + { + level notify( "quest_progressed", player, 0 ); + level notify( self.piecestub.vo_line_notify, player ); + } + else if ( isdefined( self.piecestub.sam_line ) ) + { + level notify( "quest_progressed", player, 0 ); + level notify( self.piecestub.sam_line, player ); + } + else + level notify( "quest_progressed", player, 1 ); +} + +onpickup_common( player ) +{ + player playsound( "zmb_craftable_pickup" ); + self.piece_owner = player; + self thread piece_pickup_conversation( player ); +/# + foreach ( spawn in self.spawns ) + spawn notify( "stop_debug_position" ); +#/ +} + +staff_pickup_vo() +{ + if ( !flag( "samantha_intro_done" ) ) + return; + + if ( !( isdefined( level.sam_staff_line_played ) && level.sam_staff_line_played ) ) + { + level.sam_staff_line_played = 1; + wait 1.0; + maps\mp\zm_tomb_vo::set_players_dontspeak( 1 ); + maps\mp\zm_tomb_vo::samanthasay( "vox_sam_1st_staff_found_1_0", self, 1 ); + maps\mp\zm_tomb_vo::samanthasay( "vox_sam_1st_staff_found_2_0", self ); + maps\mp\zm_tomb_vo::set_players_dontspeak( 0 ); + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "staff", "first_piece" ); + } +} + +onpickup_staffpiece( player ) +{ + onpickup_common( player ); + + if ( !isdefined( level.num_staffpieces_picked_up[self.craftablename] ) ) + level.num_staffpieces_picked_up[self.craftablename] = 0; + + level.num_staffpieces_picked_up[self.craftablename]++; + + if ( level.num_staffpieces_picked_up[self.craftablename] == 3 ) + level notify( self.craftablename + "_all_pieces_found" ); + + player thread staff_pickup_vo(); +} + +onpickup_crystal( player, elementname, elementenum ) +{ + onpickup_common( player ); + level setclientfield( "piece_staff_zm_gem_" + elementname, 1 ); + n_player = player getentitynumber() + 1; + level setclientfield( "staff_player" + n_player, elementenum ); + + if ( flag( "any_crystal_picked_up" ) ) + self.piecestub.vox_id = undefined; + + flag_set( "any_crystal_picked_up" ); +} + +onpickup_firecrystal( player ) +{ + level setclientfield( "quest_state1", 2 ); + player.crystal_id = 1; + onpickup_crystal( player, "fire", 1 ); +} + +onpickup_aircrystal( player ) +{ + level setclientfield( "quest_state2", 2 ); + player.crystal_id = 2; + onpickup_crystal( player, "air", 2 ); +} + +onpickup_lightningcrystal( player ) +{ + level setclientfield( "quest_state3", 2 ); + player.crystal_id = 3; + onpickup_crystal( player, "lightning", 3 ); +} + +onpickup_watercrystal( player ) +{ + level setclientfield( "quest_state4", 2 ); + player.crystal_id = 4; + onpickup_crystal( player, "water", 4 ); +} + +vinyl_add_pickup( str_craftable_name, str_piece_name, str_model_name, str_bit_clientfield, str_quest_clientfield, str_vox_id ) +{ + b_one_time_vo = 1; + craftable = generate_zombie_craftable_piece( str_craftable_name, str_piece_name, str_model_name, 32, 62, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, str_bit_clientfield, 1, str_vox_id, b_one_time_vo ); + craftable thread watch_part_pickup( str_quest_clientfield, 1 ); + return craftable; +} + +watch_part_pickup( str_quest_clientfield, n_clientfield_val ) +{ + self craftable_waittill_spawned(); + + self.piecespawn waittill( "pickup" ); + + level notify( self.craftablename + "_" + self.piecename + "_picked_up" ); + + if ( isdefined( str_quest_clientfield ) && isdefined( n_clientfield_val ) ) + level setclientfield( str_quest_clientfield, n_clientfield_val ); +} + +count_staff_piece_pickup( a_staff_pieces ) +{ + if ( !isdefined( level.staff_part_count ) ) + level.staff_part_count = []; + + str_name = a_staff_pieces[0].craftablename; + level.staff_part_count[str_name] = a_staff_pieces.size; + + foreach ( piece in a_staff_pieces ) + { + assert( piece.craftablename == str_name ); + piece thread watch_staff_pickup(); + } +} + +craftable_waittill_spawned() +{ + while ( !isdefined( self.piecespawn ) ) + wait_network_frame(); +} + +watch_staff_pickup() +{ + self craftable_waittill_spawned(); + + self.piecespawn waittill( "pickup" ); + + level.staff_part_count[self.craftablename]--; +} + +onfullycrafted_quadrotor( player ) +{ + level.quadrotor_status.crafted = 1; + pickup_trig = level.quadrotor_status.pickup_trig; + level.quadrotor_status.str_zone = maps\mp\zombies\_zm_zonemgr::get_zone_from_position( pickup_trig.origin, 1 ); + level.quadrotor_status.pickup_indicator = spawn( "script_model", pickup_trig.model.origin + vectorscale( ( 0, 0, -1 ), 10.0 ) ); + level.quadrotor_status.pickup_indicator setmodel( "p6_zm_tm_quadrotor_stand" ); + level notify( "quest_progressed", player, 1 ); + return 1; +} + +onbuyweapon_riotshield( player ) +{ + if ( isdefined( player.player_shield_reset_health ) ) + player [[ player.player_shield_reset_health ]](); + + if ( isdefined( player.player_shield_reset_location ) ) + player [[ player.player_shield_reset_location ]](); +} + +staff_fullycrafted( modelname, elementenum ) +{ + player = get_closest_player( self.origin ); + staff_model = getent( modelname, "targetname" ); + staff_info = get_staff_info_from_element_index( elementenum ); + staff_model useweaponmodel( staff_info.weapname ); + staff_model showallparts(); + level notify( "quest_progressed", player, 0 ); + + if ( !isdefined( staff_model.inused ) ) + { + staff_model show(); + staff_model.inused = 1; + level.n_staffs_crafted++; + + if ( level.n_staffs_crafted == 4 ) + flag_set( "ee_all_staffs_crafted" ); + } + + str_fieldname = "quest_state" + elementenum; + level setclientfield( str_fieldname, 3 ); + return 1; +} + +staff_fire_fullycrafted() +{ + level thread sndplaystaffstingeronce( "fire" ); + return staff_fullycrafted( "craftable_staff_fire_zm", 1 ); +} + +staff_air_fullycrafted() +{ + level thread sndplaystaffstingeronce( "wind" ); + return staff_fullycrafted( "craftable_staff_air_zm", 2 ); +} + +staff_lightning_fullycrafted() +{ + level thread sndplaystaffstingeronce( "lightning" ); + return staff_fullycrafted( "craftable_staff_lightning_zm", 3 ); +} + +staff_water_fullycrafted() +{ + level thread sndplaystaffstingeronce( "ice" ); + return staff_fullycrafted( "craftable_staff_water_zm", 4 ); +} + +sndplaystaffstingeronce( type ) +{ + if ( !isdefined( level.sndstaffbuilt ) ) + level.sndstaffbuilt = []; + + if ( !isinarray( level.sndstaffbuilt, type ) ) + { + level.sndstaffbuilt[level.sndstaffbuilt.size] = type; + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "staff_" + type ); + } +} + +quadrotor_watcher( player ) +{ + quadrotor_set_unavailable(); + player thread quadrotor_return_condition_watcher(); + player thread quadrotor_control_thread(); + + level waittill( "drone_available" ); + + level.maxis_quadrotor = undefined; + + if ( flag( "ee_quadrotor_disabled" ) ) + flag_waitopen( "ee_quadrotor_disabled" ); + + quadrotor_set_available(); +} + +quadrotor_return_condition_watcher() +{ + self waittill_any( "bled_out", "disconnect" ); + + if ( isdefined( level.maxis_quadrotor ) ) + level notify( "drone_should_return" ); + else + level notify( "drone_available" ); +} + +quadrotor_control_thread() +{ + self endon( "bled_out" ); + self endon( "disconnect" ); + + while ( true ) + { + if ( self actionslottwobuttonpressed() && self hasweapon( "equip_dieseldrone_zm" ) ) + { + self waittill( "weapon_change_complete" ); + + self playsound( "veh_qrdrone_takeoff" ); + weapons = self getweaponslistprimaries(); + self switchtoweapon( weapons[0] ); + + self waittill( "weapon_change_complete" ); + + if ( self hasweapon( "equip_dieseldrone_zm" ) ) + { + self takeweapon( "equip_dieseldrone_zm" ); + self setactionslot( 2, "" ); + } + + str_vehicle = "heli_quadrotor_zm"; + + if ( flag( "ee_maxis_drone_retrieved" ) ) + str_vehicle = "heli_quadrotor_upgraded_zm"; + + qr = spawnvehicle( "veh_t6_dlc_zm_quadrotor", "quadrotor_ai", str_vehicle, self.origin + vectorscale( ( 0, 0, 1 ), 96.0 ), self.angles ); + level thread quadrotor_death_watcher( qr ); + qr thread quadrotor_instance_watcher( self ); + return; + } + + wait 0.05; + } +} + +quadrotor_debug_send_home( player_owner ) +{ + self endon( "drone_should_return" ); + level endon( "drone_available" ); + + while ( true ) + { + if ( player_owner actionslottwobuttonpressed() ) + self quadrotor_fly_back_to_table(); + + wait 0.05; + } +} + +quadrotor_instance_watcher( player_owner ) +{ + self endon( "death" ); + self.player_owner = player_owner; + self.health = 200; + level.maxis_quadrotor = self; + self makevehicleunusable(); + self thread maps\mp\zombies\_zm_ai_quadrotor::quadrotor_think(); + self thread follow_ent( player_owner ); + self thread quadrotor_timer(); + + level waittill( "drone_should_return" ); + + self quadrotor_fly_back_to_table(); +} + +quadrotor_death_watcher( quadrotor ) +{ + level endon( "drone_available" ); + + quadrotor waittill( "death" ); + + level notify( "drone_available" ); +} + +quadrotor_fly_back_to_table() +{ + self endon( "death" ); + level endon( "drone_available" ); + + if ( isdefined( self ) ) + { +/# + iprintln( "Maxis sez: time to bounce" ); +#/ + self.returning_home = 1; + self thread quadrotor_fly_back_to_table_timeout(); + self waittill_any( "attempting_return", "return_timeout" ); + } + + if ( isdefined( self ) ) + self waittill_any( "near_goal", "force_goal", "reached_end_node", "return_timeout" ); + + if ( isdefined( self ) ) + { + playfx( level._effect["tesla_elec_kill"], self.origin ); + self playsound( "zmb_qrdrone_leave" ); + self delete(); +/# + iprintln( "Maxis deleted" ); +#/ + } + + level notify( "drone_available" ); +} + +report_notify( str_notify ) +{ + self waittill( str_notify ); + + iprintln( str_notify ); +} + +quadrotor_fly_back_to_table_timeout() +{ + self endon( "death" ); + level endon( "drone_available" ); + wait 30; + + if ( isdefined( self ) ) + { + self delete(); +/# + iprintln( "Maxis deleted" ); +#/ + } + + self notify( "return_timeout" ); +} + +quadrotor_timer() +{ + self endon( "death" ); + level endon( "drone_available" ); + wait 80; + vox_line = "vox_maxi_drone_cool_down_" + randomintrange( 0, 2 ); + self thread maps\mp\zm_tomb_vo::maxissay( vox_line, self ); + wait 10; + vox_line = "vox_maxi_drone_cool_down_2"; + self thread maps\mp\zm_tomb_vo::maxissay( vox_line, self ); + level notify( "drone_should_return" ); +} + +quadrotor_set_available() +{ +/# + iprintln( "Quad returned to table" ); +#/ + playfx( level._effect["tesla_elec_kill"], level.quadrotor_status.pickup_trig.model.origin ); + level.quadrotor_status.pickup_trig.model playsound( "zmb_qrdrone_leave" ); + level.quadrotor_status.picked_up = 0; + level.quadrotor_status.pickup_trig.model show(); + flag_set( "quadrotor_cooling_down" ); + str_zone = level.quadrotor_status.str_zone; + + switch ( str_zone ) + { + case "zone_nml_9": + setclientfield( "cooldown_steam", 1 ); + break; + case "zone_bunker_5a": + setclientfield( "cooldown_steam", 2 ); + break; + case "zone_village_1": + setclientfield( "cooldown_steam", 3 ); + break; + } + + vox_line = "vox_maxi_drone_cool_down_3"; + thread maxissay( vox_line, level.quadrotor_status.pickup_trig.model ); + wait 60; + flag_clear( "quadrotor_cooling_down" ); + setclientfield( "cooldown_steam", 0 ); + level.quadrotor_status.pickup_trig trigger_on(); + vox_line = "vox_maxi_drone_cool_down_4"; + maxissay( vox_line, level.quadrotor_status.pickup_trig.model ); +} + +quadrotor_set_unavailable() +{ + level.quadrotor_status.picked_up = 1; + level.quadrotor_status.pickup_trig trigger_off(); + level.quadrotor_status.pickup_trig.model ghost(); +} + +sqcommoncraftable() +{ + level.sq_craftable = maps\mp\zombies\_zm_craftables::craftable_trigger_think( "sq_common_craftable_trigger", "sq_common", "sq_common", "", 1, 0 ); +} + +droponmover( player ) +{ + +} + +pickupfrommover() +{ + +} + +setup_quadrotor_purchase( player ) +{ + if ( self.stub.weaponname == "equip_dieseldrone_zm" ) + { + if ( players_has_weapon( "equip_dieseldrone_zm" ) ) + return true; + + quadrotor = getentarray( "quadrotor_ai", "targetname" ); + + if ( quadrotor.size >= 1 ) + return true; + + quadrotor_set_unavailable(); + player giveweapon( "equip_dieseldrone_zm" ); + player setweaponammoclip( "equip_dieseldrone_zm", 1 ); + player playsoundtoplayer( "zmb_buildable_pickup_complete", player ); + + if ( isdefined( self.stub.craftablestub.use_actionslot ) ) + player setactionslot( self.stub.craftablestub.use_actionslot, "weapon", "equip_dieseldrone_zm" ); + else + player setactionslot( 2, "weapon", "equip_dieseldrone_zm" ); + + player notify( "equip_dieseldrone_zm_given" ); + level thread quadrotor_watcher( player ); + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "build_dd_plc" ); + return true; + } + + return false; +} + +players_has_weapon( weaponname ) +{ + players = getplayers(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] hasweapon( weaponname ) ) + return true; + } + + return false; +} + +tomb_custom_craftable_validation( player ) +{ + if ( self.stub.equipname == "equip_dieseldrone_zm" ) + { + level.quadrotor_status.pickup_trig = self.stub; + + if ( level.quadrotor_status.crafted ) + return !level.quadrotor_status.picked_up && !flag( "quadrotor_cooling_down" ); + } + + if ( !issubstr( self.stub.weaponname, "staff" ) ) + return 1; + + str_craftable = self.stub.equipname; + + if ( !( isdefined( level.craftables_crafted[str_craftable] ) && level.craftables_crafted[str_craftable] ) ) + return 1; + + if ( !player can_pickup_staff() ) + return 0; + + s_elemental_staff = get_staff_info_from_weapon_name( self.stub.weaponname, 0 ); + str_weapon_check = s_elemental_staff.weapname; + a_weapons = player getweaponslistprimaries(); + + foreach ( weapon in a_weapons ) + { + if ( issubstr( weapon, "staff" ) && weapon != str_weapon_check ) + player takeweapon( weapon ); + } + + return 1; +} + +tomb_check_crafted_weapon_persistence( player ) +{ + if ( self.stub.equipname == "equip_dieseldrone_zm" ) + { + if ( level.quadrotor_status.picked_up ) + return true; + else if ( level.quadrotor_status.crafted ) + return false; + } + else if ( self.stub.weaponname == "staff_air_zm" || self.stub.weaponname == "staff_fire_zm" || self.stub.weaponname == "staff_lightning_zm" || self.stub.weaponname == "staff_water_zm" ) + { + if ( self is_unclaimed_staff_weapon( self.stub.weaponname ) ) + { + s_elemental_staff = get_staff_info_from_weapon_name( self.stub.weaponname, 0 ); + player maps\mp\zombies\_zm_weapons::weapon_give( s_elemental_staff.weapname, 0, 0 ); + + if ( isdefined( s_elemental_staff.prev_ammo_stock ) && isdefined( s_elemental_staff.prev_ammo_clip ) ) + { + player setweaponammostock( s_elemental_staff.weapname, s_elemental_staff.prev_ammo_stock ); + player setweaponammoclip( s_elemental_staff.weapname, s_elemental_staff.prev_ammo_clip ); + } + + if ( isdefined( level.zombie_craftablestubs[self.stub.equipname].str_taken ) ) + self.stub.hint_string = level.zombie_craftablestubs[self.stub.equipname].str_taken; + else + self.stub.hint_string = ""; + + self sethintstring( self.stub.hint_string ); + player track_craftables_pickedup( self.stub.craftablespawn ); + model = getent( "craftable_" + self.stub.weaponname, "targetname" ); + model ghost(); + self.stub thread track_crafted_staff_trigger(); + self.stub thread track_staff_weapon_respawn( player ); + set_player_staff( self.stub.weaponname, player ); + } + else + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + } + + return true; + } + + return false; +} + +is_unclaimed_staff_weapon( str_weapon ) +{ + if ( !maps\mp\zombies\_zm_equipment::is_limited_equipment( str_weapon ) ) + return true; + else + { + s_elemental_staff = get_staff_info_from_weapon_name( str_weapon, 0 ); + str_weapon_check = s_elemental_staff.weapname; + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( player ) && player has_weapon_or_upgrade( str_weapon_check ) ) + return false; + } + } + + return true; +} + +get_staff_info_from_weapon_name( str_name, b_base_info_only = 1 ) +{ + foreach ( s_staff in level.a_elemental_staffs ) + { + if ( s_staff.weapname == str_name || s_staff.upgrade.weapname == str_name ) + { + if ( s_staff.charger.is_charged && !b_base_info_only ) + return s_staff.upgrade; + else + return s_staff; + } + } + + return undefined; +} + +get_staff_info_from_element_index( n_index ) +{ + foreach ( s_staff in level.a_elemental_staffs ) + { + if ( s_staff.enum == n_index ) + return s_staff; + } + + return undefined; +} + +track_crafted_staff_trigger() +{ + s_elemental_staff = get_staff_info_from_weapon_name( self.weaponname, 1 ); + + if ( !isdefined( self.base_weaponname ) ) + self.base_weaponname = s_elemental_staff.weapname; + + flag_waitopen( self.base_weaponname + "_enabled" ); + self trigger_off(); + flag_wait( self.base_weaponname + "_enabled" ); + self trigger_on(); +} + +track_staff_weapon_respawn( player ) +{ + self notify( "kill_track_staff_weapon_respawn" ); + self endon( "kill_track_staff_weapon_respawn" ); + s_elemental_staff = get_staff_info_from_weapon_name( self.weaponname, 1 ); + s_upgraded_staff = s_elemental_staff.upgrade; + + if ( !isdefined( self.base_weaponname ) ) + self.base_weaponname = s_elemental_staff.weapname; + + flag_clear( self.base_weaponname + "_enabled" ); + + for ( has_weapon = 0; isalive( player ); has_weapon = 0 ) + { + if ( isdefined( s_elemental_staff.charger.is_inserted ) && s_elemental_staff.charger.is_inserted || isdefined( s_upgraded_staff.charger.is_inserted ) && s_upgraded_staff.charger.is_inserted || isdefined( s_upgraded_staff.ee_in_use ) && s_upgraded_staff.ee_in_use ) + has_weapon = 1; + else + { + weapons = player getweaponslistprimaries(); + + foreach ( weapon in weapons ) + { + n_melee_element = 0; + + if ( weapon == self.base_weaponname ) + { + s_elemental_staff.prev_ammo_stock = player getweaponammostock( weapon ); + s_elemental_staff.prev_ammo_clip = player getweaponammoclip( weapon ); + has_weapon = 1; + } + else if ( weapon == s_upgraded_staff.weapname ) + { + s_upgraded_staff.prev_ammo_stock = player getweaponammostock( weapon ); + s_upgraded_staff.prev_ammo_clip = player getweaponammoclip( weapon ); + has_weapon = 1; + n_melee_element = s_upgraded_staff.enum; + } + + if ( player hasweapon( "staff_revive_zm" ) ) + { + s_upgraded_staff.revive_ammo_stock = player getweaponammostock( "staff_revive_zm" ); + s_upgraded_staff.revive_ammo_clip = player getweaponammoclip( "staff_revive_zm" ); + } + + if ( has_weapon && !( isdefined( player.one_inch_punch_flag_has_been_init ) && player.one_inch_punch_flag_has_been_init ) && n_melee_element != 0 ) + { + cur_weapon = player getcurrentweapon(); + + if ( cur_weapon != weapon && ( isdefined( player.use_staff_melee ) && player.use_staff_melee ) ) + { + player update_staff_accessories( 0 ); + continue; + } + + if ( cur_weapon == weapon && !( isdefined( player.use_staff_melee ) && player.use_staff_melee ) ) + player update_staff_accessories( n_melee_element ); + } + } + } + + if ( !has_weapon ) + break; + + wait 0.5; + } + + b_staff_in_use = 0; + a_players = getplayers(); + + foreach ( check_player in a_players ) + { + weapons = check_player getweaponslistprimaries(); + + foreach ( weapon in weapons ) + { + if ( weapon == self.base_weaponname || weapon == s_upgraded_staff.weapname ) + b_staff_in_use = 1; + } + } + + if ( !b_staff_in_use ) + { + model = getent( "craftable_" + self.base_weaponname, "targetname" ); + model show(); + flag_set( self.base_weaponname + "_enabled" ); + } + + clear_player_staff( self.base_weaponname, player ); +} + +set_player_staff( str_weaponname, e_player ) +{ + s_staff = get_staff_info_from_weapon_name( str_weaponname ); + s_staff.e_owner = e_player; + n_player = e_player getentitynumber() + 1; + e_player.staff_enum = s_staff.enum; + level setclientfield( "staff_player" + n_player, s_staff.enum ); + e_player update_staff_accessories( s_staff.enum ); +/# + iprintlnbold( "Player " + n_player + " has staff " + s_staff.enum ); +#/ +} + +clear_player_staff_by_player_number( n_player ) +{ + level setclientfield( "staff_player" + n_player, 0 ); +} + +clear_player_staff( str_weaponname, e_owner ) +{ + s_staff = get_staff_info_from_weapon_name( str_weaponname ); + + if ( isdefined( e_owner ) && isdefined( s_staff.e_owner ) && e_owner != s_staff.e_owner ) + return; + + if ( !isdefined( e_owner ) ) + e_owner = s_staff.e_owner; + + if ( isdefined( e_owner ) ) + { + if ( !isdefined( e_owner.staff_enum ) && !isdefined( s_staff.enum ) || isdefined( e_owner.staff_enum ) && isdefined( s_staff.enum ) && e_owner.staff_enum == s_staff.enum ) + { + n_player = e_owner getentitynumber() + 1; + e_owner.staff_enum = 0; + level setclientfield( "staff_player" + n_player, 0 ); + e_owner update_staff_accessories( 0 ); + } + } +/# + iprintlnbold( "Nobody has staff " + s_staff.enum ); +#/ + s_staff.e_owner = undefined; +} + +hide_staff_model() +{ + staffs = getentarray( "craftable_staff_model", "script_noteworthy" ); + + foreach ( stave in staffs ) + stave ghost(); +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_dig.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_dig.gsc new file mode 100644 index 0000000..7bba437 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_dig.gsc @@ -0,0 +1,995 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zm_tomb_main_quest; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_weap_claymore; +#include maps\mp\zombies\_zm_powerup_zombie_blood; + +init_shovel() +{ + precachemodel( "p6_zm_tm_dig_mound" ); + precachemodel( "p6_zm_tm_dig_mound_blood" ); + precachemodel( "p6_zm_tm_shovel" ); + precachemodel( "zombie_pickup_perk_bottle" ); + precachemodel( "t6_wpn_claymore_world" ); + maps\mp\zombies\_zm_audio_announcer::createvox( "blood_money", "powerup_blood_money" ); + onplayerconnect_callback( ::init_shovel_player ); + a_shovel_pos = getstructarray( "shovel_location", "targetname" ); + a_shovel_zone = []; + + foreach ( s_shovel_pos in a_shovel_pos ) + { + if ( !isdefined( a_shovel_zone[s_shovel_pos.script_noteworthy] ) ) + a_shovel_zone[s_shovel_pos.script_noteworthy] = []; + + a_shovel_zone[s_shovel_pos.script_noteworthy][a_shovel_zone[s_shovel_pos.script_noteworthy].size] = s_shovel_pos; + } + + foreach ( a_zone in a_shovel_zone ) + { + s_pos = a_zone[randomint( a_zone.size )]; + m_shovel = spawn( "script_model", s_pos.origin ); + m_shovel.angles = s_pos.angles; + m_shovel setmodel( "p6_zm_tm_shovel" ); + generate_shovel_unitrigger( m_shovel ); + } + + level.get_player_perk_purchase_limit = ::get_player_perk_purchase_limit; + level.bonus_points_powerup_override = ::bonus_points_powerup_override; + level thread dig_powerups_tracking(); + level thread dig_spots_init(); + registerclientfield( "world", "shovel_player1", 14000, 2, "int", undefined, 0 ); + registerclientfield( "world", "shovel_player2", 14000, 2, "int", undefined, 0 ); + registerclientfield( "world", "shovel_player3", 14000, 2, "int", undefined, 0 ); + registerclientfield( "world", "shovel_player4", 14000, 2, "int", undefined, 0 ); + registerclientfield( "world", "helmet_player1", 14000, 1, "int", undefined, 0 ); + registerclientfield( "world", "helmet_player2", 14000, 1, "int", undefined, 0 ); + registerclientfield( "world", "helmet_player3", 14000, 1, "int", undefined, 0 ); + registerclientfield( "world", "helmet_player4", 14000, 1, "int", undefined, 0 ); +/# + level thread setup_dig_devgui(); +#/ +} + +init_shovel_player() +{ + self.dig_vars["has_shovel"] = 0; + self.dig_vars["has_upgraded_shovel"] = 0; + self.dig_vars["has_helmet"] = 0; + self.dig_vars["n_spots_dug"] = 0; + self.dig_vars["n_losing_streak"] = 0; +} + +generate_shovel_unitrigger( e_shovel ) +{ + s_unitrigger_stub = spawnstruct(); + s_unitrigger_stub.origin = e_shovel.origin + vectorscale( ( 0, 0, 1 ), 32.0 ); + s_unitrigger_stub.angles = e_shovel.angles; + s_unitrigger_stub.radius = 32; + s_unitrigger_stub.script_length = 64; + s_unitrigger_stub.script_width = 64; + s_unitrigger_stub.script_height = 64; + s_unitrigger_stub.cursor_hint = "HINT_NOICON"; + s_unitrigger_stub.hint_string = &"ZM_TOMB_SHPU"; + s_unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + s_unitrigger_stub.require_look_at = 1; + s_unitrigger_stub.prompt_and_visibility_func = ::shovel_trigger_prompt_and_visiblity; + s_unitrigger_stub.e_shovel = e_shovel; + unitrigger_force_per_player_triggers( s_unitrigger_stub, 1 ); + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( s_unitrigger_stub, ::shovel_unitrigger_think ); +} + +shovel_trigger_prompt_and_visiblity( e_player ) +{ + can_use = self.stub shovel_prompt_update( e_player ); + self setinvisibletoplayer( e_player, !can_use ); + self sethintstring( self.stub.hint_string ); + return can_use; +} + +shovel_prompt_update( e_player ) +{ + if ( !self unitrigger_stub_show_hint_prompt_valid( e_player ) ) + return false; + + self.hint_string = &"ZM_TOMB_SHPU"; + + if ( isdefined( e_player.dig_vars["has_shovel"] ) && e_player.dig_vars["has_shovel"] ) + self.hint_string = &"ZM_TOMB_SHAG"; + + return true; +} + +shovel_unitrigger_think() +{ + self endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "trigger", e_player ); + + if ( e_player != self.parent_player ) + continue; + + if ( !( isdefined( e_player.dig_vars["has_shovel"] ) && e_player.dig_vars["has_shovel"] ) ) + { + e_player.dig_vars["has_shovel"] = 1; + e_player playsound( "zmb_craftable_pickup" ); + e_player dig_reward_dialog( "pickup_shovel" ); + n_player = e_player getentitynumber() + 1; + level setclientfield( "shovel_player" + n_player, 1 ); + e_player thread dig_disconnect_watch( n_player, self.stub.e_shovel.origin, self.stub.e_shovel.angles ); + self.stub.e_shovel delete(); + maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub ); + } + } +} + +dig_reward_dialog( str_category ) +{ + if ( !( isdefined( self.dig_vo_cooldown ) && self.dig_vo_cooldown ) ) + { + self do_player_general_vox( "digging", str_category ); + + if ( str_category != "pickup_shovel" ) + self thread dig_reward_vo_cooldown(); + } +} + +dig_reward_vo_cooldown() +{ + self endon( "disconnect" ); + self.dig_vo_cooldown = 1; + wait 60; + self.dig_vo_cooldown = undefined; +} + +unitrigger_stub_show_hint_prompt_valid( e_player ) +{ + if ( !is_player_valid( e_player ) ) + { + self.hint_string = ""; + return false; + } + + return true; +} + +dig_disconnect_watch( n_player, v_origin, v_angles ) +{ + self waittill( "disconnect" ); + + level setclientfield( "shovel_player" + n_player, 0 ); + level setclientfield( "helmet_player" + n_player, 0 ); + m_shovel = spawn( "script_model", v_origin ); + m_shovel.angles = v_angles; + m_shovel setmodel( "p6_zm_tm_shovel" ); + generate_shovel_unitrigger( m_shovel ); +} + +dig_spots_init() +{ + flag_wait( "start_zombie_round_logic" ); + level.n_dig_spots_cur = 0; + level.n_dig_spots_max = 15; + level.a_dig_spots = getstructarray( "dig_spot", "targetname" ); + + foreach ( s_dig_spot in level.a_dig_spots ) + { + if ( !isdefined( s_dig_spot.angles ) ) + s_dig_spot.angles = ( 0, 0, 0 ); + + if ( isdefined( s_dig_spot.script_noteworthy ) && s_dig_spot.script_noteworthy == "initial_spot" ) + s_dig_spot thread dig_spot_spawn(); + else + s_dig_spot.dug = 1; + + s_dig_spot.str_zone = maps\mp\zombies\_zm_zonemgr::get_zone_from_position( s_dig_spot.origin + vectorscale( ( 0, 0, 1 ), 32.0 ), 1 ); + + if ( !isdefined( s_dig_spot.str_zone ) ) + { + s_dig_spot.str_zone = ""; +/# + assertmsg( "Dig spot at ( " + s_dig_spot.origin[0] + ", " + s_dig_spot.origin[1] + ", " + s_dig_spot.origin[2] + ") is not in a zone." ); +#/ + } + + wait_network_frame(); + } + + level thread dig_spots_respawn(); +} + +dig_spots_respawn( a_dig_spots ) +{ + while ( true ) + { + level waittill( "end_of_round" ); + + wait 2; + a_dig_spots = array_randomize( level.a_dig_spots ); + n_respawned = 0; + n_respawned_max = 3; + + if ( level.weather_snow > 0 ) + n_respawned_max = 0; + else if ( level.weather_rain > 0 ) + n_respawned_max = 5; + + if ( level.weather_snow == 0 ) + n_respawned_max += randomint( get_players().size ); + + for ( i = 0; i < a_dig_spots.size; i++ ) + { + if ( isdefined( a_dig_spots[i].dug ) && a_dig_spots[i].dug && n_respawned < n_respawned_max && level.n_dig_spots_cur <= level.n_dig_spots_max ) + { + a_dig_spots[i].dug = undefined; + a_dig_spots[i] thread dig_spot_spawn(); + wait_network_frame(); + n_respawned++; + } + } + + if ( level.weather_snow > 0 && level.ice_staff_pieces.size > 0 ) + { + foreach ( s_staff in level.ice_staff_pieces ) + { + a_staff_spots = []; + n_active_mounds = 0; + + foreach ( s_dig_spot in level.a_dig_spots ) + { + if ( isdefined( s_dig_spot.str_zone ) && issubstr( s_dig_spot.str_zone, s_staff.zone_substr ) ) + { + if ( !( isdefined( s_dig_spot.dug ) && s_dig_spot.dug ) ) + { + n_active_mounds++; + continue; + } + + a_staff_spots[a_staff_spots.size] = s_dig_spot; + } + } + + if ( n_active_mounds < 2 && a_staff_spots.size > 0 && level.n_dig_spots_cur <= level.n_dig_spots_max ) + { + n_index = randomint( a_staff_spots.size ); + a_staff_spots[n_index].dug = undefined; + a_staff_spots[n_index] thread dig_spot_spawn(); + arrayremoveindex( a_staff_spots, n_index ); + n_active_mounds++; + wait_network_frame(); + } + } + } + } +} + +dig_spot_spawn() +{ + level.n_dig_spots_cur++; + self.m_dig = spawn( "script_model", self.origin + vectorscale( ( 0, 0, -1 ), 40.0 ) ); + self.m_dig setmodel( "p6_zm_tm_dig_mound" ); + self.m_dig.angles = self.angles; + self.m_dig moveto( self.origin, 3, 0, 1 ); + + self.m_dig waittill( "movedone" ); + + t_dig = tomb_spawn_trigger_radius( self.origin + vectorscale( ( 0, 0, 1 ), 20.0 ), 100, 1 ); + t_dig.prompt_and_visibility_func = ::dig_spot_trigger_visibility; + t_dig.require_look_at = 1; + t_dig waittill_dug( self ); + t_dig tomb_unitrigger_delete(); + t_dig = undefined; + self.m_dig delete(); + self.m_dig = undefined; +} + +dig_spot_trigger_visibility( player ) +{ + if ( isdefined( player.dig_vars["has_shovel"] ) && player.dig_vars["has_shovel"] ) + self sethintstring( &"ZM_TOMB_X2D" ); + else + self sethintstring( &"ZM_TOMB_NS" ); + + return 1; +} + +waittill_dug( s_dig_spot ) +{ + while ( true ) + { + self waittill( "trigger", player ); + + if ( isdefined( player.dig_vars["has_shovel"] ) && player.dig_vars["has_shovel"] ) + { + player playsound( "evt_dig" ); + s_dig_spot.dug = 1; + level.n_dig_spots_cur--; + playfx( level._effect["digging"], self.origin ); + player setclientfieldtoplayer( "player_rumble_and_shake", 1 ); + player maps\mp\zombies\_zm_stats::increment_client_stat( "tomb_dig", 0 ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "tomb_dig" ); + s_staff_piece = s_dig_spot maps\mp\zm_tomb_main_quest::dig_spot_get_staff_piece( player ); + + if ( isdefined( s_staff_piece ) ) + { + s_staff_piece maps\mp\zm_tomb_main_quest::show_ice_staff_piece( self.origin ); + player dig_reward_dialog( "dig_staff_part" ); + } + else + { + n_good_chance = 50; + + if ( player.dig_vars["n_spots_dug"] == 0 || player.dig_vars["n_losing_streak"] == 3 ) + { + player.dig_vars["n_losing_streak"] = 0; + n_good_chance = 100; + } + + if ( player.dig_vars["has_upgraded_shovel"] ) + { + if ( !player.dig_vars["has_helmet"] ) + { + n_helmet_roll = randomint( 100 ); + + if ( n_helmet_roll >= 95 ) + { + player.dig_vars["has_helmet"] = 1; + n_player = player getentitynumber() + 1; + level setclientfield( "helmet_player" + n_player, 1 ); + player playsoundtoplayer( "zmb_squest_golden_anything", player ); + player maps\mp\zombies\_zm_stats::increment_client_stat( "tomb_golden_hard_hat", 0 ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "tomb_golden_hard_hat" ); + return; + } + } + + n_good_chance = 70; + } + + n_prize_roll = randomint( 100 ); + + if ( n_prize_roll > n_good_chance ) + { + if ( cointoss() ) + { + player dig_reward_dialog( "dig_grenade" ); + self thread dig_up_grenade( player ); + } + else + { + player dig_reward_dialog( "dig_zombie" ); + self thread dig_up_zombie( player, s_dig_spot ); + } + + player.dig_vars["n_losing_streak"]++; + } + else if ( cointoss() ) + self thread dig_up_powerup( player ); + else + { + player dig_reward_dialog( "dig_gun" ); + self thread dig_up_weapon( player ); + } + } + + if ( !player.dig_vars["has_upgraded_shovel"] ) + { + player.dig_vars["n_spots_dug"]++; + + if ( player.dig_vars["n_spots_dug"] >= 30 ) + { + player.dig_vars["has_upgraded_shovel"] = 1; + player thread ee_zombie_blood_dig(); + n_player = player getentitynumber() + 1; + level setclientfield( "shovel_player" + n_player, 2 ); + player playsoundtoplayer( "zmb_squest_golden_anything", player ); + player maps\mp\zombies\_zm_stats::increment_client_stat( "tomb_golden_shovel", 0 ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "tomb_golden_shovel" ); + } + } + + return; + } + } +} + +dig_up_zombie( player, s_dig_spot ) +{ + ai_zombie = spawn_zombie( level.dig_spawners[0] ); + ai_zombie endon( "death" ); + ai_zombie ghost(); + e_linker = spawn( "script_origin", ( 0, 0, 0 ) ); + e_linker.origin = ai_zombie.origin; + e_linker.angles = ai_zombie.angles; + ai_zombie linkto( e_linker ); + e_linker moveto( player.origin + vectorscale( ( 1, 1, 0 ), 100.0 ), 0.1 ); + + e_linker waittill( "movedone" ); + + ai_zombie unlink(); + e_linker delete(); + ai_zombie show(); + ai_zombie playsound( "evt_zombie_dig_dirt" ); + ai_zombie dug_zombie_rise( s_dig_spot ); + find_flesh_struct_string = "find_flesh"; + ai_zombie notify( "zombie_custom_think_done", find_flesh_struct_string ); +} + +dig_up_powerup( player ) +{ + powerup = spawn( "script_model", self.origin ); + powerup endon( "powerup_grabbed" ); + powerup endon( "powerup_timedout" ); + a_rare_powerups = dig_get_rare_powerups( player ); + powerup_item = undefined; + + if ( level.dig_n_powerups_spawned + level.powerup_drop_count > 4 || level.dig_last_prize_rare || a_rare_powerups.size == 0 || randomint( 100 ) < 80 ) + { + if ( level.dig_n_zombie_bloods_spawned < 1 && randomint( 100 ) > 70 ) + { + powerup_item = "zombie_blood"; + level.dig_n_zombie_bloods_spawned++; + level.dig_n_powerups_spawned++; + player dig_reward_dialog( "dig_powerup" ); + } + else + { + powerup_item = "bonus_points_player"; + player dig_reward_dialog( "dig_cash" ); + } + + level.dig_last_prize_rare = 0; + } + else + { + powerup_item = a_rare_powerups[randomint( a_rare_powerups.size )]; + level.dig_last_prize_rare = 1; + level.dig_n_powerups_spawned++; + player dig_reward_dialog( "dig_powerup" ); + dig_set_powerup_spawned( powerup_item ); + } + + powerup maps\mp\zombies\_zm_powerups::powerup_setup( powerup_item ); + powerup movez( 40, 0.6 ); + + powerup waittill( "movedone" ); + + powerup thread maps\mp\zombies\_zm_powerups::powerup_timeout(); + powerup thread maps\mp\zombies\_zm_powerups::powerup_wobble(); + powerup thread maps\mp\zombies\_zm_powerups::powerup_grab(); +} + +dig_get_rare_powerups( player ) +{ + a_rare_powerups = []; + a_possible_powerups = array( "nuke", "double_points" ); + + if ( level.dig_magic_box_moved && !dig_has_powerup_spawned( "fire_sale" ) ) + a_possible_powerups[a_possible_powerups.size] = "fire_sale"; + + if ( player.dig_vars["has_upgraded_shovel"] ) + a_possible_powerups = combinearrays( a_possible_powerups, array( "insta_kill", "full_ammo" ) ); + + foreach ( powerup in a_possible_powerups ) + { + if ( !dig_has_powerup_spawned( powerup ) ) + a_rare_powerups[a_rare_powerups.size] = powerup; + } + + return a_rare_powerups; +} + +dig_up_grenade( player ) +{ + player endon( "disconnect" ); + v_spawnpt = self.origin; + grenade = "frag_grenade_zm"; + n_rand = randomintrange( 0, 4 ); + player magicgrenadetype( grenade, v_spawnpt, vectorscale( ( 0, 0, 1 ), 300.0 ), 3.0 ); + player playsound( "evt_grenade_digup" ); + + if ( n_rand ) + { + wait 0.3; + + if ( cointoss() ) + player magicgrenadetype( grenade, v_spawnpt, ( 50, 50, 300 ), 3.0 ); + } +} + +dig_up_weapon( digger ) +{ + a_common_weapons = array( "ballista_zm", "c96_zm", "870mcs_zm" ); + a_rare_weapons = array( "dsr50_zm", "srm1216_zm" ); + + if ( digger.dig_vars["has_upgraded_shovel"] ) + a_rare_weapons = combinearrays( a_rare_weapons, array( "claymore_zm", "ak74u_zm", "ksg_zm", "mp40_zm", "mp44_zm" ) ); + + str_weapon = undefined; + + if ( randomint( 100 ) < 90 ) + str_weapon = a_common_weapons[getarraykeys( a_common_weapons )[randomint( getarraykeys( a_common_weapons ).size )]]; + else + str_weapon = a_rare_weapons[getarraykeys( a_rare_weapons )[randomint( getarraykeys( a_rare_weapons ).size )]]; + + v_spawnpt = self.origin + ( 0, 0, 40 ); + v_spawnang = ( 0, 0, 0 ); + str_spec_model = undefined; + + if ( str_weapon == "claymore_zm" ) + { + str_spec_model = "t6_wpn_claymore_world"; + v_spawnang += vectorscale( ( 0, 1, 0 ), 90.0 ); + } + + v_angles = digger getplayerangles(); + v_angles = ( 0, v_angles[1], 0 ) + vectorscale( ( 0, 1, 0 ), 90.0 ) + v_spawnang; + m_weapon = spawn_weapon_model( str_weapon, str_spec_model, v_spawnpt, v_angles ); + + if ( str_weapon == "claymore_zm" ) + { + m_weapon setmodel( "t6_wpn_claymore_world" ); + v_spawnang += vectorscale( ( 0, 0, 1 ), 90.0 ); + } + + m_weapon.angles = v_angles; + m_weapon playloopsound( "evt_weapon_digup" ); + m_weapon thread timer_til_despawn( v_spawnpt, 40 * -1 ); + m_weapon endon( "dig_up_weapon_timed_out" ); + playfxontag( level._effect["special_glow"], m_weapon, "tag_origin" ); + m_weapon.trigger = tomb_spawn_trigger_radius( v_spawnpt, 100, 1 ); + m_weapon.trigger.hint_string = &"ZM_TOMB_X2PU"; + m_weapon.trigger.hint_parm1 = getweapondisplayname( str_weapon ); + + m_weapon.trigger waittill( "trigger", player ); + + m_weapon.trigger notify( "weapon_grabbed" ); + m_weapon.trigger thread swap_weapon( str_weapon, player ); + + if ( isdefined( m_weapon.trigger ) ) + { + m_weapon.trigger tomb_unitrigger_delete(); + m_weapon.trigger = undefined; + } + + if ( isdefined( m_weapon ) ) + m_weapon delete(); + + if ( player != digger ) + digger notify( "dig_up_weapon_shared" ); +} + +swap_weapon( str_weapon, e_player ) +{ + str_current_weapon = e_player getcurrentweapon(); + + if ( str_weapon == "claymore_zm" ) + { + if ( !e_player hasweapon( str_weapon ) ) + { + e_player thread maps\mp\zombies\_zm_weap_claymore::show_claymore_hint( "claymore_purchased" ); + e_player thread maps\mp\zombies\_zm_weap_claymore::claymore_setup(); + e_player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" ); + } + else + e_player givemaxammo( str_weapon ); + + return; + } + + if ( is_player_valid( e_player ) && !e_player.is_drinking && !is_placeable_mine( str_current_weapon ) && !is_equipment( str_current_weapon ) && level.revive_tool != str_current_weapon && "none" != str_current_weapon && !e_player hacker_active() ) + { + if ( !e_player hasweapon( str_weapon ) ) + e_player take_old_weapon_and_give_new( str_current_weapon, str_weapon ); + else + e_player givemaxammo( str_weapon ); + } +} + +take_old_weapon_and_give_new( current_weapon, weapon ) +{ + a_weapons = self getweaponslistprimaries(); + + if ( isdefined( a_weapons ) && a_weapons.size >= get_player_weapon_limit( self ) ) + self takeweapon( current_weapon ); + + self giveweapon( weapon ); + self switchtoweapon( weapon ); +} + +timer_til_despawn( v_float, n_dist ) +{ + self endon( "weapon_grabbed" ); + putbacktime = 12; + self movez( n_dist, putbacktime, putbacktime * 0.5 ); + + self waittill( "movedone" ); + + self notify( "dig_up_weapon_timed_out" ); + + if ( isdefined( self.trigger ) ) + { + self.trigger tomb_unitrigger_delete(); + self.trigger = undefined; + } + + if ( isdefined( self ) ) + self delete(); +} + +get_player_perk_purchase_limit() +{ + if ( isdefined( self.player_perk_purchase_limit ) ) + return self.player_perk_purchase_limit; + + return level.perk_purchase_limit; +} + +increment_player_perk_purchase_limit() +{ + if ( !isdefined( self.player_perk_purchase_limit ) ) + self.player_perk_purchase_limit = level.perk_purchase_limit; + + if ( self.player_perk_purchase_limit < 8 ) + self.player_perk_purchase_limit++; +} + +ee_zombie_blood_dig() +{ + self endon( "disconnect" ); + n_z_spots_found = 0; + a_z_spots = getstructarray( "zombie_blood_dig_spot", "targetname" ); + self.t_zombie_blood_dig = spawn( "trigger_radius_use", ( 0, 0, 0 ), 0, 100, 50 ); + self.t_zombie_blood_dig.e_unique_player = self; + self.t_zombie_blood_dig triggerignoreteam(); + self.t_zombie_blood_dig setcursorhint( "HINT_NOICON" ); + self.t_zombie_blood_dig sethintstring( &"ZM_TOMB_X2D" ); + self.t_zombie_blood_dig maps\mp\zombies\_zm_powerup_zombie_blood::make_zombie_blood_entity(); + + while ( n_z_spots_found < 4 ) + { + a_randomized = array_randomize( a_z_spots ); + n_index = undefined; + + for ( i = 0; i < a_randomized.size; i++ ) + { + if ( !isdefined( a_randomized[i].n_player ) ) + { + n_index = i; + break; + } + } + + assert( isdefined( n_index ), "No more zombie blood dig spots. Add more to the map." ); + s_z_spot = a_randomized[n_index]; + s_z_spot.n_player = self getentitynumber(); + s_z_spot create_zombie_blood_dig_spot( self ); + n_z_spots_found++; + + level waittill( "end_of_round" ); + } + + self.t_zombie_blood_dig delete(); +} + +ee_zombie_blood_dig_disconnect_watch() +{ + self waittill( "disconnect" ); + + if ( isdefined( self.t_zombie_blood_dig ) ) + self.t_zombie_blood_dig delete(); + + a_z_spots = getstructarray( "zombie_blood_dig_spot", "targetname" ); + + foreach ( s_pos in a_z_spots ) + { + if ( isdefined( s_pos.n_player ) && s_pos.n_player == self getentitynumber() ) + s_pos.n_player = undefined; + + if ( isdefined( s_pos.m_dig ) ) + s_pos delete(); + } +} + +create_zombie_blood_dig_spot( e_player ) +{ + self.m_dig = spawn( "script_model", self.origin + vectorscale( ( 0, 0, -1 ), 40.0 ) ); + self.m_dig.angles = self.angles; + self.m_dig setmodel( "p6_zm_tm_dig_mound_blood" ); + self.m_dig maps\mp\zombies\_zm_powerup_zombie_blood::make_zombie_blood_entity(); + self.m_dig moveto( self.origin, 3, 0, 1 ); + + self.m_dig waittill( "movedone" ); + + self.m_dig.e_unique_player = e_player; +/# + self thread puzzle_debug_position( "+", vectorscale( ( 0, 0, 1 ), 255.0 ), self.origin ); +#/ + e_player.t_zombie_blood_dig.origin = self.origin + vectorscale( ( 0, 0, 1 ), 20.0 ); + e_player.t_zombie_blood_dig waittill_zombie_blood_dug( self ); +/# + self notify( "stop_debug_position" ); +#/ +} + +waittill_zombie_blood_dug( s_dig_spot ) +{ + self endon( "death" ); + + while ( true ) + { + self waittill( "trigger", player ); + + if ( isdefined( player.dig_vars["has_shovel"] ) && player.dig_vars["has_shovel"] ) + { + player.t_zombie_blood_dig.origin = ( 0, 0, 0 ); + player playsound( "evt_dig" ); + playfx( level._effect["digging"], self.origin ); + s_dig_spot.m_dig delete(); + spawn_perk_upgrade_bottle( s_dig_spot.origin, player ); + return; + } + } +} + +spawn_perk_upgrade_bottle( v_origin, e_player ) +{ + m_bottle = spawn( "script_model", v_origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + m_bottle setmodel( "zombie_pickup_perk_bottle" ); + m_bottle.angles = vectorscale( ( 1, 0, 0 ), 10.0 ); + m_bottle setinvisibletoall(); + m_bottle setvisibletoplayer( e_player ); + m_fx = spawn( "script_model", m_bottle.origin ); + m_fx setmodel( "tag_origin" ); + m_fx setinvisibletoall(); + m_fx setvisibletoplayer( e_player ); + playfxontag( level._effect["special_glow"], m_fx, "tag_origin" ); + m_bottle linkto( m_fx ); + m_fx thread rotate_perk_upgrade_bottle(); + + while ( isdefined( e_player ) && !e_player istouching( m_bottle ) ) + wait 0.05; + + m_bottle delete(); + m_fx delete(); + + if ( isdefined( e_player ) ) + { + e_player increment_player_perk_purchase_limit(); + e_player maps\mp\zombies\_zm_stats::increment_client_stat( "tomb_perk_extension", 0 ); + e_player maps\mp\zombies\_zm_stats::increment_player_stat( "tomb_perk_extension" ); + } +} + +rotate_perk_upgrade_bottle() +{ + self endon( "death" ); + + while ( true ) + { + self rotateyaw( 360, 5 ); + + self waittill( "rotatedone" ); + } +} + +bonus_points_powerup_override() +{ + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "blood_money" ); + points = randomintrange( 1, 6 ) * 50; + return points; +} + +dig_powerups_tracking() +{ + level endon( "end_game" ); + level.dig_powerups_tracking = []; + level.dig_magic_box_moved = 0; + level.dig_last_prize_rare = 0; + level.dig_n_zombie_bloods_spawned = 0; + + for ( level.dig_n_powerups_spawned = 0; 1; level.dig_n_powerups_spawned = 0 ) + { + level waittill( "end_of_round" ); + + foreach ( str_powerup, value in level.dig_powerups_tracking ) + level.dig_powerups_tracking[str_powerup] = 0; + + level.dig_n_zombie_bloods_spawned = 0; + } +} + +dig_has_powerup_spawned( str_powerup ) +{ + if ( !isdefined( level.dig_powerups_tracking[str_powerup] ) ) + level.dig_powerups_tracking[str_powerup] = 0; + + return level.dig_powerups_tracking[str_powerup]; +} + +dig_set_powerup_spawned( str_powerup ) +{ + level.dig_powerups_tracking[str_powerup] = 1; +} + +setup_dig_devgui() +{ +/# + setdvar( "give_shovel", "off" ); + setdvar( "give_golden_shovel", "off" ); + setdvar( "give_helmet", "off" ); + setdvar( "spawn_max_mounds", "off" ); + setdvar( "spawn_all_mounds", "off" ); + setdvar( "test_blood_mounds", "off" ); + setdvar( "force_weather_rain", "off" ); + setdvar( "force_weather_snow", "off" ); + setdvar( "force_weather_none", "off" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Digging:1/Give Shovel:1\" \"give_shovel on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Digging:1/Give Golden Shovel:2\" \"give_golden_shovel on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Digging:1/Give Helmet:3\" \"give_helmet on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Digging:1/Spawn Max Mounds:4\" \"spawn_max_mounds on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Digging:1/Spawn All Mounds:5\" \"spawn_all_mounds on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Digging:1/Test Blood Mounds:6\" \"test_blood_mounds on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Weather:1/Rain:1\" \"force_weather_rain on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Weather:1/Snow:2\" \"force_weather_snow on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Weather:1/Clear:3\" \"force_weather_none on\"\n" ); + level thread watch_devgui_dig(); +#/ +} + +watch_devgui_dig() +{ +/# + while ( true ) + { + if ( getdvar( _hash_C817F0A0 ) == "on" ) + { + setdvar( "give_shovel", "off" ); + + foreach ( player in getplayers() ) + { + player.dig_vars["has_shovel"] = 1; + n_player = player getentitynumber() + 1; + level setclientfield( "shovel_player" + n_player, 1 ); + } + } + + if ( getdvar( _hash_8B880FB8 ) == "on" ) + { + setdvar( "give_golden_shovel", "off" ); + + foreach ( player in getplayers() ) + { + player.dig_vars["has_shovel"] = 1; + player.dig_vars["has_upgraded_shovel"] = 1; + player thread ee_zombie_blood_dig(); + n_player = player getentitynumber() + 1; + level setclientfield( "shovel_player" + n_player, 2 ); + } + } + + if ( getdvar( _hash_AE371CCE ) == "on" ) + { + setdvar( "give_helmet", "off" ); + + foreach ( player in getplayers() ) + { + player.dig_vars["has_helmet"] = 1; + n_player = player getentitynumber() + 1; + level setclientfield( "helmet_player" + n_player, 1 ); + } + } + + if ( getdvar( _hash_B92412E8 ) == "on" ) + { + setdvar( "spawn_max_mounds", "off" ); + a_dig_spots = array_randomize( level.a_dig_spots ); + + for ( i = 0; i < a_dig_spots.size; i++ ) + { + if ( isdefined( a_dig_spots[i].dug ) && a_dig_spots[i].dug && level.n_dig_spots_cur <= level.n_dig_spots_max ) + { + a_dig_spots[i].dug = undefined; + a_dig_spots[i] thread dig_spot_spawn(); + wait_network_frame(); + } + } + } + + if ( getdvar( _hash_76E825DB ) == "on" ) + { + setdvar( "spawn_all_mounds", "off" ); + a_dig_spots = array_randomize( level.a_dig_spots ); + + for ( i = 0; i < a_dig_spots.size; i++ ) + { + if ( isdefined( a_dig_spots[i].dug ) && a_dig_spots[i].dug ) + { + a_dig_spots[i].dug = undefined; + a_dig_spots[i] thread dig_spot_spawn(); + wait_network_frame(); + } + } + } + + if ( getdvar( _hash_9D237849 ) == "on" ) + { + setdvar( "test_blood_mounds", "off" ); + a_z_spots = getstructarray( "zombie_blood_dig_spot", "targetname" ); + + foreach ( s_spot in a_z_spots ) + { + s_spot.m_dig = spawn( "script_model", s_spot.origin + vectorscale( ( 0, 0, -1 ), 40.0 ) ); + s_spot.m_dig.angles = s_spot.angles; + s_spot.m_dig setmodel( "p6_zm_tm_dig_mound_blood" ); + s_spot.m_dig moveto( s_spot.origin, 3, 0, 1 ); + wait_network_frame(); + } + } + + if ( getdvar( _hash_6A4B6CAC ) == "on" ) + { + setdvar( "force_weather_rain", "off" ); + level.weather_snow = 0; + level.weather_rain = 5; + level.weather_vision = 1; + level setclientfield( "rain_level", level.weather_rain ); + level setclientfield( "snow_level", level.weather_snow ); + wait 1; + + foreach ( player in getplayers() ) + { + if ( is_player_valid( player, 0, 1 ) ) + player set_weather_to_player(); + } + } + + if ( getdvar( _hash_6A4C3129 ) == "on" ) + { + setdvar( "force_weather_snow", "off" ); + level.weather_snow = 5; + level.weather_rain = 0; + level.weather_vision = 2; + level setclientfield( "rain_level", level.weather_rain ); + level setclientfield( "snow_level", level.weather_snow ); + wait 1; + + foreach ( player in getplayers() ) + { + if ( is_player_valid( player, 0, 1 ) ) + player set_weather_to_player(); + } + } + + if ( getdvar( _hash_6A497752 ) == "on" ) + { + setdvar( "force_weather_none", "off" ); + level.weather_snow = 0; + level.weather_rain = 0; + level.weather_vision = 3; + level setclientfield( "rain_level", level.weather_rain ); + level setclientfield( "snow_level", level.weather_snow ); + wait 1; + + foreach ( player in getplayers() ) + { + if ( is_player_valid( player, 0, 1 ) ) + player set_weather_to_player(); + } + } + + wait 0.05; + } +#/ +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_distance_tracking.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_distance_tracking.gsc new file mode 100644 index 0000000..1d392a7 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_distance_tracking.gsc @@ -0,0 +1,388 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zm_tomb_chamber; + +zombie_tracking_init() +{ + level.zombie_respawned_health = []; + + if ( !isdefined( level.zombie_tracking_dist ) ) + level.zombie_tracking_dist = 1520; + + if ( !isdefined( level.zombie_tracking_high ) ) + level.zombie_tracking_high = 1000; + + if ( !isdefined( level.zombie_tracking_wait ) ) + level.zombie_tracking_wait = 10; + + while ( true ) + { + a_players = get_players(); + + foreach ( player in a_players ) + { + if ( player maps\mp\zombies\_zm_zonemgr::player_in_zone( "zone_air_stairs" ) || player maps\mp\zombies\_zm_zonemgr::player_in_zone( "zone_bolt_stairs" ) || player maps\mp\zombies\_zm_zonemgr::player_in_zone( "zone_fire_stairs" ) || player maps\mp\zombies\_zm_zonemgr::player_in_zone( "zone_ice_stairs" ) ) + { + player.b_in_tunnels = 1; + continue; + } + + player.b_in_tunnels = 0; + } + + zombies = get_round_enemy_array(); + + if ( !isdefined( zombies ) || isdefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking ) + { + wait( level.zombie_tracking_wait ); + continue; + } + else + { + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i] ) && !( isdefined( zombies[i].ignore_distance_tracking ) && zombies[i].ignore_distance_tracking ) ) + zombies[i] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high ); + } + } + + wait( level.zombie_tracking_wait ); + } +} + +delete_zombie_noone_looking( how_close, how_high ) +{ + self endon( "death" ); + + if ( !isdefined( how_close ) ) + how_close = 1500; + + if ( !isdefined( how_high ) ) + how_high = 600; + + distance_squared_check = how_close * how_close; + too_far_dist = distance_squared_check * 3; + + if ( isdefined( level.zombie_tracking_too_far_dist ) ) + too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist; + + self.inview = 0; + self.player_close = 0; + n_distance_squared = 0; + n_height_difference = 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].sessionstate == "spectator" ) + continue; + + if ( isdefined( level.only_track_targeted_players ) ) + { + if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[i] ) + continue; + } + + can_be_seen = self player_can_see_me( players[i] ); + + if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist ) + self.inview++; + + n_modifier = 1.0; + + if ( isdefined( players[i].b_in_tunnels ) && players[i].b_in_tunnels ) + n_modifier = 2.25; + + n_distance_squared = distancesquared( self.origin, players[i].origin ); + n_height_difference = abs( self.origin[2] - players[i].origin[2] ); + + if ( n_distance_squared < distance_squared_check * n_modifier && n_height_difference < how_high ) + self.player_close++; + } + + if ( self.inview == 0 && self.player_close == 0 ) + { + if ( !isdefined( self.animname ) || self.animname != "zombie" && self.animname != "mechz_zombie" ) + return; + + if ( isdefined( self.electrified ) && self.electrified == 1 ) + return; + + if ( isdefined( self.in_the_ground ) && self.in_the_ground == 1 ) + return; + + zombies = getaiarray( "axis" ); + + if ( ( !isdefined( self.damagemod ) || self.damagemod == "MOD_UNKNOWN" ) && self.health < self.maxhealth ) + { + if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) ) + { + level.zombie_total++; + level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health; + } + } + else if ( zombies.size + level.zombie_total > 24 || zombies.size + level.zombie_total <= 24 && self.health >= self.maxhealth ) + { + if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) ) + { + level.zombie_total++; + + if ( self.health < level.zombie_health ) + level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health; + } + } + + self maps\mp\zombies\_zm_spawner::reset_attack_spot(); + self notify( "zombie_delete" ); + + if ( isdefined( self.is_mechz ) && self.is_mechz ) + { + self notify( "mechz_cleanup" ); + level.mechz_left_to_spawn++; + wait_network_frame(); + level notify( "spawn_mechz" ); + } + + self delete(); + recalc_zombie_array(); + } +} + +player_can_see_me( player ) +{ + playerangles = player getplayerangles(); + playerforwardvec = anglestoforward( playerangles ); + playerunitforwardvec = vectornormalize( playerforwardvec ); + banzaipos = self.origin; + playerpos = player getorigin(); + playertobanzaivec = banzaipos - playerpos; + playertobanzaiunitvec = vectornormalize( playertobanzaivec ); + forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec ); + + if ( forwarddotbanzai >= 1 ) + anglefromcenter = 0; + else if ( forwarddotbanzai <= -1 ) + anglefromcenter = 180; + else + anglefromcenter = acos( forwarddotbanzai ); + + playerfov = getdvarfloat( "cg_fov" ); + banzaivsplayerfovbuffer = getdvarfloat( _hash_BCB625CF ); + + if ( banzaivsplayerfovbuffer <= 0 ) + banzaivsplayerfovbuffer = 0.2; + + playercanseeme = anglefromcenter <= playerfov * 0.5 * ( 1 - banzaivsplayerfovbuffer ); + return playercanseeme; +} + +escaped_zombies_cleanup_init() +{ + self endon( "death" ); + self.zombie_path_bad = 0; + + while ( true ) + { + if ( !self.zombie_path_bad ) + self waittill( "bad_path" ); + + found_player = undefined; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( is_player_valid( players[i] ) && self maymovetopoint( players[i].origin, 1 ) ) + { + self.favoriteenemy = players[i]; + found_player = 1; + continue; + } + } + + n_delete_distance = 1500; + n_delete_height = 1000; + + if ( !isdefined( found_player ) && isdefined( self.in_the_ground ) && !isdefined( self.completed_emerging_into_playable_area ) ) + { + self thread delete_zombie_noone_looking( n_delete_distance, n_delete_height ); + self.zombie_path_bad = 1; + self escaped_zombies_cleanup(); + } + else if ( !isdefined( found_player ) && ( isdefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area ) ) + { + self thread delete_zombie_noone_looking( n_delete_distance, n_delete_height ); + self.zombie_path_bad = 1; + self escaped_zombies_cleanup(); + } + + wait 0.1; + } +} + +escaped_zombies_cleanup() +{ + self endon( "death" ); + s_escape = self get_escape_position(); + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + + if ( isdefined( s_escape ) ) + { + self setgoalpos( s_escape.origin ); + self thread check_player_available(); + self waittill_any( "goal", "reaquire_player" ); + } + + self.zombie_path_bad = !can_zombie_path_to_any_player(); + wait 0.1; + + if ( !self.zombie_path_bad ) + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); +} + +get_escape_position() +{ + self endon( "death" ); + str_zone = get_current_zone(); + + if ( !isdefined( str_zone ) ) + str_zone = self.zone_name; + + if ( isdefined( str_zone ) ) + { + a_zones = get_adjacencies_to_zone( str_zone ); + a_dog_locations = get_dog_locations_in_zones( a_zones ); + s_farthest = self get_farthest_dog_location( a_dog_locations ); + } + + return s_farthest; +} + +check_player_available() +{ + self notify( "_check_player_available" ); + self endon( "_check_player_available" ); + self endon( "death" ); + self endon( "goal" ); + + while ( self.zombie_path_bad ) + { + wait( randomfloatrange( 0.2, 0.5 ) ); + + if ( self can_zombie_see_any_player() ) + { + self notify( "reaquire_player" ); + return; + } + } + + self notify( "reaquire_player" ); +} + +can_zombie_path_to_any_player() +{ + a_players = get_players(); + + for ( i = 0; i < a_players.size; i++ ) + { + if ( !is_player_valid( a_players[i] ) ) + continue; + + v_player_origin = a_players[i].origin; + + if ( ( isdefined( self.b_on_tank ) && self.b_on_tank ) != ( isdefined( a_players[i].b_already_on_tank ) && a_players[i].b_already_on_tank ) ) + v_player_origin = level.vh_tank gettagorigin( "window_left_rear_jmp_jnt" ); + + if ( findpath( self.origin, v_player_origin ) ) + return true; + } + + return false; +} + +can_zombie_see_any_player() +{ + a_players = get_players(); + zombie_in_chamber = maps\mp\zm_tomb_chamber::is_point_in_chamber( self.origin ); + + for ( i = 0; i < a_players.size; i++ ) + { + if ( !is_player_valid( a_players[i] ) ) + continue; + + player_origin = a_players[i].origin; + + if ( isdefined( a_players[i].b_already_on_tank ) && a_players[i].b_already_on_tank ) + { + if ( isdefined( self.b_on_tank ) && self.b_on_tank ) + return true; + else + player_origin = level.vh_tank gettagorigin( "window_left_rear_jmp_jnt" ); + } + else + { + player_in_chamber = maps\mp\zm_tomb_chamber::is_point_in_chamber( a_players[i].origin ); + + if ( player_in_chamber != zombie_in_chamber ) + continue; + } + + path_length = 0; + path_length = self calcpathlength( player_origin ); + + if ( self maymovetopoint( player_origin, 1 ) || path_length != 0 ) + return true; + } + + return false; +} + +get_adjacencies_to_zone( str_zone ) +{ + a_adjacencies = []; + a_adjacencies[0] = str_zone; + a_adjacent_zones = getarraykeys( level.zones[str_zone].adjacent_zones ); + + for ( i = 0; i < a_adjacent_zones.size; i++ ) + { + if ( level.zones[str_zone].adjacent_zones[a_adjacent_zones[i]].is_connected ) + a_adjacencies[a_adjacencies.size] = a_adjacent_zones[i]; + } + + return a_adjacencies; +} + +get_dog_locations_in_zones( a_zones ) +{ + a_dog_locations = []; + + foreach ( zone in a_zones ) + a_dog_locations = arraycombine( a_dog_locations, level.zones[zone].dog_locations, 0, 0 ); + + return a_dog_locations; +} + +get_farthest_dog_location( a_dog_locations ) +{ + n_farthest_index = 0; + n_distance_farthest = 0; + + for ( i = 0; i < a_dog_locations.size; i++ ) + { + n_distance_sq = distancesquared( self.origin, a_dog_locations[i].origin ); + + if ( n_distance_sq > n_distance_farthest ) + { + n_distance_farthest = n_distance_sq; + n_farthest_index = i; + } + } + + return a_dog_locations[n_farthest_index]; +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_ee_lights.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_lights.gsc new file mode 100644 index 0000000..d0ca422 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_lights.gsc @@ -0,0 +1,175 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zm_tomb_quest_crypt; + +main() +{ + registerclientfield( "world", "light_show", 14000, 2, "int" ); + flag_init( "show_morse_code" ); + init_morse_code(); + flag_wait( "start_zombie_round_logic" ); + chamber_discs = getentarray( "crypt_puzzle_disc", "script_noteworthy" ); + lit_discs = []; + + foreach ( disc in chamber_discs ) + { + if ( isdefined( disc.script_int ) ) + lit_discs[disc.script_int - 1] = disc; + } + + flag_wait_any( "ee_all_staffs_upgraded", "show_morse_code" ); + + while ( true ) + { + setclientfield( "light_show", 1 ); + + if ( randomint( 100 ) < 10 ) + { + turn_all_lights_off( lit_discs ); + wait 10.0; + setclientfield( "light_show", 3 ); + light_show_morse( lit_discs, "GIOVAN BATTISTA BELLASO" ); + setclientfield( "light_show", 1 ); + } + + turn_all_lights_off( lit_discs ); + wait 10.0; + setclientfield( "light_show", 2 ); + light_show_morse( lit_discs, level.cipher_key ); + + foreach ( message in level.morse_messages ) + { + setclientfield( "light_show", 1 ); + cipher = phrase_convert_to_cipher( message, level.cipher_key ); + turn_all_lights_off( lit_discs ); + wait 10.0; + light_show_morse( lit_discs, cipher ); + } + } +} + +init_morse_code() +{ + level.morse_letters = []; + level.morse_letters["A"] = ".-"; + level.morse_letters["B"] = "-..."; + level.morse_letters["C"] = "-.-."; + level.morse_letters["D"] = "-.."; + level.morse_letters["E"] = "."; + level.morse_letters["F"] = "..-."; + level.morse_letters["G"] = "--."; + level.morse_letters["H"] = "...."; + level.morse_letters["I"] = ".."; + level.morse_letters["J"] = ".---"; + level.morse_letters["K"] = "-.-"; + level.morse_letters["L"] = ".-.."; + level.morse_letters["M"] = "--"; + level.morse_letters["N"] = "-."; + level.morse_letters["O"] = "---"; + level.morse_letters["P"] = ".--."; + level.morse_letters["Q"] = "--.-"; + level.morse_letters["R"] = ".-."; + level.morse_letters["S"] = "..."; + level.morse_letters["T"] = "-"; + level.morse_letters["U"] = "..-"; + level.morse_letters["V"] = "...-"; + level.morse_letters["W"] = ".--"; + level.morse_letters["X"] = "-..-"; + level.morse_letters["Y"] = "-.--"; + level.morse_letters["Z"] = "--.."; + level.morse_messages = []; + level.morse_messages[0] = "WARN MESSINES"; + level.morse_messages[1] = "SOMETHING BLUE IN THE EARTH"; + level.morse_messages[2] = "NOT CLAY"; + level.morse_messages[3] = "WE GREW WEAK"; + level.morse_messages[4] = "THOUGHT IT WAS FLU"; + level.morse_messages[5] = "MEN BECAME BEASTS"; + level.morse_messages[6] = "BLOOD TURNED TO ASH"; + level.morse_messages[7] = "LIBERATE TUTE DE INFERNIS"; + level.cipher_key = "INFERNO"; +} + +turn_all_lights_off( a_discs ) +{ + foreach ( disc in a_discs ) + disc maps\mp\zm_tomb_quest_crypt::bryce_cake_light_update( 0 ); +} + +turn_all_lights_on( a_discs ) +{ + foreach ( disc in a_discs ) + disc maps\mp\zm_tomb_quest_crypt::bryce_cake_light_update( 1 ); +} + +phrase_convert_to_cipher( str_phrase, str_key ) +{ + alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + alphabet_vals = []; + num = 0; + + for ( i = 0; i < alphabet.size; i++ ) + { + letter = alphabet[i]; + alphabet_vals[letter] = num; + num++; + } + + encrypted_phrase = []; + j = 0; + + for ( i = 0; i < str_phrase.size; i++ ) + { + cipher_letter = str_key[j % str_key.size]; + original_letter = str_phrase[i]; + n_original_letter = alphabet_vals[original_letter]; + + if ( !isdefined( n_original_letter ) ) + { + encrypted_phrase[encrypted_phrase.size] = original_letter; + continue; + } + + n_cipher_offset = alphabet_vals[cipher_letter]; + n_ciphered_letter = ( n_original_letter + n_cipher_offset ) % alphabet.size; + encrypted_phrase[encrypted_phrase.size] = alphabet[n_ciphered_letter]; + j++; + } + + return encrypted_phrase; +} + +light_show_morse( a_discs, message ) +{ + for ( i = 0; i < message.size; i++ ) + { + letter = message[i]; + letter_code = level.morse_letters[letter]; + + if ( isdefined( letter_code ) ) + { + for ( j = 0; j < letter_code.size; j++ ) + { + turn_all_lights_on( a_discs ); + + if ( letter_code[j] == "." ) + wait 0.2; + else if ( letter_code[j] == "-" ) + wait 1.0; + + turn_all_lights_off( a_discs ); + wait 0.5; + } + } + else + wait 2.0; + + wait 1.5; + } +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main.gsc new file mode 100644 index 0000000..42cfcc8 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main.gsc @@ -0,0 +1,540 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zm_tomb_vo; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\gametypes_zm\_hud; +#include maps\mp\zm_tomb_ee_main_step_1; +#include maps\mp\zm_tomb_ee_main_step_2; +#include maps\mp\zm_tomb_ee_main_step_3; +#include maps\mp\zm_tomb_ee_main_step_4; +#include maps\mp\zm_tomb_ee_main_step_5; +#include maps\mp\zm_tomb_ee_main_step_6; +#include maps\mp\zm_tomb_ee_main_step_7; +#include maps\mp\zm_tomb_ee_main_step_8; +#include maps\mp\zm_tomb_amb; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_weapons; + +init() +{ + registerclientfield( "actor", "ee_zombie_fist_fx", 14000, 1, "int" ); + registerclientfield( "actor", "ee_zombie_soul_portal", 14000, 1, "int" ); + registerclientfield( "world", "ee_sam_portal", 14000, 2, "int" ); + registerclientfield( "vehicle", "ee_plane_fx", 14000, 1, "int" ); + registerclientfield( "world", "ee_ending", 14000, 1, "int" ); + precache_models(); + flag_init( "ee_all_staffs_crafted" ); + flag_init( "ee_all_staffs_upgraded" ); + flag_init( "ee_all_staffs_placed" ); + flag_init( "ee_mech_zombie_hole_opened" ); + flag_init( "ee_mech_zombie_fight_completed" ); + flag_init( "ee_maxis_drone_retrieved" ); + flag_init( "ee_all_players_upgraded_punch" ); + flag_init( "ee_souls_absorbed" ); + flag_init( "ee_samantha_released" ); + flag_init( "ee_quadrotor_disabled" ); + flag_init( "ee_sam_portal_active" ); + + if ( !is_sidequest_allowed( "zclassic" ) ) + return; +/# + level thread setup_ee_main_devgui(); +#/ + declare_sidequest( "little_girl_lost", ::init_sidequest, ::sidequest_logic, ::complete_sidequest, ::generic_stage_start, ::generic_stage_end ); + maps\mp\zm_tomb_ee_main_step_1::init(); + maps\mp\zm_tomb_ee_main_step_2::init(); + maps\mp\zm_tomb_ee_main_step_3::init(); + maps\mp\zm_tomb_ee_main_step_4::init(); + maps\mp\zm_tomb_ee_main_step_5::init(); + maps\mp\zm_tomb_ee_main_step_6::init(); + maps\mp\zm_tomb_ee_main_step_7::init(); + maps\mp\zm_tomb_ee_main_step_8::init(); + flag_wait( "start_zombie_round_logic" ); + sidequest_start( "little_girl_lost" ); +} + +precache_models() +{ + precachemodel( "p_rus_alarm_button" ); + precachemodel( "p6_zm_tm_staff_holder" ); + precachemodel( "p6_zm_tm_runes" ); + precachemodel( "drone_collision" ); +} + +init_sidequest() +{ + level.n_ee_step = 0; + level.n_ee_robot_staffs_planted = 0; +} + +sidequest_logic() +{ + level._cur_stage_name = "step_0"; + flag_wait( "ee_all_staffs_crafted" ); + flag_wait( "all_zones_captured" ); + level.n_ee_step++; + level thread zombie_blood_hint_watch(); + stage_start( "little_girl_lost", "step_1" ); + + level waittill( "little_girl_lost_step_1_over" ); + + stage_start( "little_girl_lost", "step_2" ); + + level waittill( "little_girl_lost_step_2_over" ); + + level thread maps\mp\zm_tomb_amb::sndplaystingerwithoverride( "mus_event_ee_step2", 15 ); + stage_start( "little_girl_lost", "step_3" ); + + level waittill( "little_girl_lost_step_3_over" ); + + level thread maps\mp\zm_tomb_amb::sndplaystingerwithoverride( "mus_event_ee_step3", 35 ); + stage_start( "little_girl_lost", "step_4" ); + + level waittill( "little_girl_lost_step_4_over" ); + + level thread maps\mp\zm_tomb_amb::sndplaystingerwithoverride( "mus_event_ee_step4", 30 ); + stage_start( "little_girl_lost", "step_5" ); + + level waittill( "little_girl_lost_step_5_over" ); + + level thread maps\mp\zm_tomb_amb::sndplaystingerwithoverride( "mus_event_ee_step5", 29 ); + stage_start( "little_girl_lost", "step_6" ); + + level waittill( "little_girl_lost_step_6_over" ); + + level thread maps\mp\zm_tomb_amb::sndplaystingerwithoverride( "mus_event_ee_step6", 28 ); + stage_start( "little_girl_lost", "step_7" ); + + level waittill( "little_girl_lost_step_7_over" ); + + level thread maps\mp\zm_tomb_amb::sndplaystingerwithoverride( "mus_event_ee_step7", 31 ); + stage_start( "little_girl_lost", "step_8" ); + + level waittill( "little_girl_lost_step_8_over" ); +} + +zombie_blood_hint_watch() +{ + n_curr_step = level.n_ee_step; + a_player_hint[0] = 0; + a_player_hint[1] = 0; + a_player_hint[2] = 0; + a_player_hint[3] = 0; + + while ( !flag( "ee_samantha_released" ) ) + { + level waittill( "player_zombie_blood", e_player ); + + if ( n_curr_step != level.n_ee_step ) + { + n_curr_step = level.n_ee_step; + + for ( i = 0; i < a_player_hint.size; i++ ) + a_player_hint[i] = 0; + } + + if ( !a_player_hint[e_player.characterindex] ) + { + wait( randomfloatrange( 3, 7 ) ); + + if ( isdefined( e_player.vo_promises_playing ) && e_player.vo_promises_playing ) + continue; + + while ( isdefined( level.sam_talking ) && level.sam_talking ) + wait 0.05; + + if ( isdefined( e_player ) && isplayer( e_player ) && e_player.zombie_vars["zombie_powerup_zombie_blood_on"] ) + { + a_player_hint[e_player.characterindex] = 1; + set_players_dontspeak( 1 ); + level.sam_talking = 1; + str_vox = get_zombie_blood_hint_vox(); + e_player playsoundtoplayer( str_vox, e_player ); + n_duration = soundgetplaybacktime( str_vox ); + wait( n_duration / 1000 ); + level.sam_talking = 0; + set_players_dontspeak( 0 ); + } + } + else if ( randomint( 100 ) < 20 ) + { + wait( randomfloatrange( 3, 7 ) ); + + if ( isdefined( e_player.vo_promises_playing ) && e_player.vo_promises_playing ) + continue; + + while ( isdefined( level.sam_talking ) && level.sam_talking ) + wait 0.05; + + if ( isdefined( e_player ) && isplayer( e_player ) && e_player.zombie_vars["zombie_powerup_zombie_blood_on"] ) + { + str_vox = get_zombie_blood_hint_generic_vox(); + + if ( isdefined( str_vox ) ) + { + set_players_dontspeak( 1 ); + level.sam_talking = 1; + e_player playsoundtoplayer( str_vox, e_player ); + n_duration = soundgetplaybacktime( str_vox ); + wait( n_duration / 1000 ); + level.sam_talking = 0; + set_players_dontspeak( 0 ); + } + } + } + } +} + +get_step_announce_vox() +{ + switch ( level.n_ee_step ) + { + case 1: + return "vox_sam_all_staff_upgrade_key_0"; + case 2: + return "vox_sam_all_staff_ascend_darkness_0"; + case 3: + return "vox_sam_all_staff_rain_fire_0"; + case 4: + return "vox_sam_all_staff_unleash_hoard_0"; + case 5: + return "vox_sam_all_staff_skewer_beast_0"; + case 6: + return "vox_sam_all_staff_fist_iron_0"; + case 7: + return "vox_sam_all_staff_raise_hell_0"; + default: + return undefined; + } +} + +get_zombie_blood_hint_vox() +{ + if ( flag( "all_zones_captured" ) ) + return "vox_sam_upgrade_staff_clue_" + level.n_ee_step + "_0"; + + return "vox_sam_upgrade_staff_clue_" + level.n_ee_step + "_grbld_0"; +} + +get_zombie_blood_hint_generic_vox() +{ + if ( !isdefined( level.generic_clue_index ) ) + level.generic_clue_index = 0; + + vo_array[0] = "vox_sam_heard_by_all_1_0"; + vo_array[1] = "vox_sam_heard_by_all_2_0"; + vo_array[2] = "vox_sam_heard_by_all_3_0"; + vo_array[3] = "vox_sam_slow_progress_0"; + vo_array[4] = "vox_sam_slow_progress_2"; + vo_array[5] = "vox_sam_slow_progress_3"; + + if ( level.generic_clue_index >= vo_array.size ) + return undefined; + + str_vo = vo_array[level.generic_clue_index]; + level.generic_clue_index++; + return str_vo; +} + +complete_sidequest() +{ + level.sndgameovermusicoverride = "game_over_ee"; + a_players = getplayers(); + + foreach ( player in a_players ) + { + player freezecontrols( 1 ); + player thread fadetoblackforxsec( 0, 5, 0.5, 0, "white" ); + } + + playsoundatposition( "zmb_squest_whiteout", ( 0, 0, 0 ) ); + delay_thread( 0.5, ::remove_portal_beam ); + level.custom_intermission = ::player_intermission_ee; + level setclientfield( "ee_ending", 1 ); + wait_network_frame(); + level notify( "end_game" ); +} + +remove_portal_beam() +{ + if ( isdefined( level.ee_ending_beam_fx ) ) + level.ee_ending_beam_fx delete(); +} + +generic_stage_start() +{ + str_vox = get_step_announce_vox(); + + if ( isdefined( str_vox ) ) + level thread ee_samantha_say( str_vox ); +} + +generic_stage_end() +{ + level.n_ee_step++; + + if ( level.n_ee_step <= 6 ) + flag_wait( "all_zones_captured" ); + + wait_network_frame(); + wait_network_frame(); +} + +all_staffs_inserted_in_puzzle_room() +{ + n_staffs_inserted = 0; + + foreach ( staff in level.a_elemental_staffs ) + { + if ( staff.upgrade.charger.is_inserted ) + n_staffs_inserted++; + } + + if ( n_staffs_inserted == 4 ) + return true; + else + return false; +} + +ee_samantha_say( str_vox ) +{ + flag_waitopen( "story_vo_playing" ); + flag_set( "story_vo_playing" ); + set_players_dontspeak( 1 ); + samanthasay( str_vox, get_players()[0] ); + set_players_dontspeak( 0 ); + flag_clear( "story_vo_playing" ); +} + +player_intermission_ee() +{ + self closemenu(); + self closeingamemenu(); + level endon( "stop_intermission" ); + self endon( "disconnect" ); + self endon( "death" ); + self notify( "_zombie_game_over" ); + self.score = self.score_total; + self.sessionstate = "intermission"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + points = getstructarray( "ee_cam", "targetname" ); + + if ( !isdefined( points ) || points.size == 0 ) + { + points = getentarray( "info_intermission", "classname" ); + + if ( points.size < 1 ) + { +/# + println( "NO info_intermission POINTS IN MAP" ); +#/ + return; + } + } + + self.game_over_bg = newclienthudelem( self ); + self.game_over_bg.horzalign = "fullscreen"; + self.game_over_bg.vertalign = "fullscreen"; + self.game_over_bg setshader( "black", 640, 480 ); + self.game_over_bg.alpha = 1; + visionsetnaked( "cheat_bw", 0.05 ); + org = undefined; + + while ( true ) + { + points = array_randomize( points ); + + for ( i = 0; i < points.size; i++ ) + { + point = points[i]; + + if ( !isdefined( org ) ) + self spawn( point.origin, point.angles ); + + if ( isdefined( points[i].target ) ) + { + if ( !isdefined( org ) ) + { + org = spawn( "script_model", self.origin + vectorscale( ( 0, 0, -1 ), 60.0 ) ); + org setmodel( "tag_origin" ); + } + + org.origin = points[i].origin; + org.angles = points[i].angles; + + for ( j = 0; j < get_players().size; j++ ) + { + player = get_players()[j]; + player camerasetposition( org ); + player camerasetlookat(); + player cameraactivate( 1 ); + } + + speed = 20; + + if ( isdefined( points[i].speed ) ) + speed = points[i].speed; + + target_point = getstruct( points[i].target, "targetname" ); + dist = distance( points[i].origin, target_point.origin ); + time = dist / speed; + q_time = time * 0.25; + + if ( q_time > 1 ) + q_time = 1; + + self.game_over_bg fadeovertime( q_time ); + self.game_over_bg.alpha = 0; + org moveto( target_point.origin, time, q_time, q_time ); + org rotateto( target_point.angles, time, q_time, q_time ); + wait( time - q_time ); + self.game_over_bg fadeovertime( q_time ); + self.game_over_bg.alpha = 1; + wait( q_time ); + continue; + } + + self.game_over_bg fadeovertime( 1 ); + self.game_over_bg.alpha = 0; + wait 5; + self.game_over_bg thread maps\mp\zombies\_zm::fade_up_over_time( 1 ); + } + } +} + +setup_ee_main_devgui() +{ +/# + wait 5; + b_activated = 0; + + while ( !b_activated ) + { + foreach ( player in getplayers() ) + { + if ( distance2d( player.origin, ( 2904, 5040, -336 ) ) < 100 && player usebuttonpressed() ) + { + wait 2; + + if ( player usebuttonpressed() ) + b_activated = 1; + } + } + + wait 0.05; + } + + setdvar( "ee_main_progress", "off" ); + setdvar( "ee_main_end_level", "off" ); + setdvar( "ee_upgrade_beacon", "off" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/EE Main:1/Next Step:1\" \"ee_main_progress on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/EE Main:1/Upgrade Beacon:2\" \"ee_upgrade_beacon on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/EE Main:1/End Level:3\" \"ee_main_end_level on\"\n" ); + level thread watch_devgui_ee_main(); +#/ +} + +watch_devgui_ee_main() +{ +/# + while ( true ) + { + if ( getdvar( _hash_A6E41BC7 ) == "on" ) + { + setdvar( "ee_main_progress", "off" ); + level.ee_debug = 1; + flag_set( "samantha_intro_done" ); + + switch ( level._cur_stage_name ) + { + case "step_0": + flag_set( "ee_all_staffs_crafted" ); + flag_set( "all_zones_captured" ); + break; + case "step_1": + flag_set( "ee_all_staffs_upgraded" ); + + level waittill( "little_girl_lost_step_1_over" ); + + break; + case "step_2": + flag_set( "ee_all_staffs_placed" ); + + level waittill( "little_girl_lost_step_2_over" ); + + break; + case "step_3": + flag_set( "ee_mech_zombie_hole_opened" ); + m_floor = getent( "easter_mechzombie_spawn", "targetname" ); + + if ( isdefined( m_floor ) ) + m_floor delete(); + + level waittill( "little_girl_lost_step_3_over" ); + + break; + case "step_4": + flag_set( "ee_mech_zombie_fight_completed" ); + flag_set( "ee_quadrotor_disabled" ); + + level waittill( "little_girl_lost_step_4_over" ); + + break; + case "step_5": + flag_set( "ee_maxis_drone_retrieved" ); + flag_clear( "ee_quadrotor_disabled" ); + + level waittill( "little_girl_lost_step_5_over" ); + + break; + case "step_6": + flag_set( "ee_all_players_upgraded_punch" ); + + level waittill( "little_girl_lost_step_6_over" ); + + break; + case "step_7": + flag_set( "ee_souls_absorbed" ); + + level waittill( "little_girl_lost_step_7_over" ); + + break; + case "step_8": + flag_set( "ee_quadrotor_disabled" ); + + level waittill( "little_girl_lost_step_8_over" ); + + break; + default: + break; + } + } + + if ( getdvar( _hash_6F30FD20 ) == "on" ) + { + setdvar( "ee_main_end_level", "off" ); + level setclientfield( "ee_sam_portal", 2 ); + complete_sidequest(); + } + + if ( getdvar( _hash_6E33C5DD ) == "on" ) + { + setdvar( "ee_upgrade_beacon", "off" ); + setdvar( "force_three_robot_round", "on" ); + flag_set( "fire_link_enabled" ); + array_thread( get_players(), maps\mp\zombies\_zm_weapons::weapon_give, "beacon_zm" ); + } + + wait 0.05; + } +#/ +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_1.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_1.gsc new file mode 100644 index 0000000..f380a3f --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_1.gsc @@ -0,0 +1,32 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_tomb_ee_main; + +init() +{ + declare_sidequest_stage( "little_girl_lost", "step_1", ::init_stage, ::stage_logic, ::exit_stage ); +} + +init_stage() +{ + level._cur_stage_name = "step_1"; +} + +stage_logic() +{ +/# + iprintln( level._cur_stage_name + " of little girl lost started" ); +#/ + flag_wait( "ee_all_staffs_upgraded" ); + wait_network_frame(); + stage_completed( "little_girl_lost", level._cur_stage_name ); +} + +exit_stage( success ) +{ + +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_2.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_2.gsc new file mode 100644 index 0000000..8f455d2 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_2.gsc @@ -0,0 +1,161 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_tomb_ee_main; +#include maps\mp\zombies\_zm_powerup_zombie_blood; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zm_tomb_craftables; + +init() +{ + declare_sidequest_stage( "little_girl_lost", "step_2", ::init_stage, ::stage_logic, ::exit_stage ); + precachemodel( "p6_zm_tm_staff_holder" ); +} + +init_stage() +{ + level._cur_stage_name = "step_2"; + a_structs = getstructarray( "robot_head_staff", "targetname" ); + + foreach ( unitrigger_stub in a_structs ) + { + level thread create_robot_head_trigger( unitrigger_stub ); + wait_network_frame(); + wait_network_frame(); + wait_network_frame(); + } +} + +stage_logic() +{ +/# + iprintln( level._cur_stage_name + " of little girl lost started" ); +#/ + flag_wait( "ee_all_staffs_placed" ); + playsoundatposition( "zmb_squest_robot_alarm_high", ( -14, -1, 871 ) ); + wait 3; + wait_network_frame(); + stage_completed( "little_girl_lost", level._cur_stage_name ); +} + +exit_stage( success ) +{ + a_structs = getstructarray( "robot_head_staff", "targetname" ); + + foreach ( struct in a_structs ) + { + struct thread remove_plinth(); + wait_network_frame(); + wait_network_frame(); + wait_network_frame(); + } +} + +remove_plinth() +{ + playfx( level._effect["teleport_1p"], self.m_plinth.origin ); + playsoundatposition( "zmb_footprintbox_disappear", self.m_plinth.origin ); + wait 3; + + if ( isdefined( self.m_plinth.m_staff ) ) + { + self.m_plinth.m_staff unlink(); + self.m_plinth.m_staff.origin = self.m_plinth.v_old_origin; + self.m_plinth.m_staff.angles = self.m_plinth.v_old_angles; + self.m_plinth.e_staff.ee_in_use = undefined; + } + + self.m_sign delete(); + self.m_plinth delete(); + self.m_coll delete(); + unregister_unitrigger( self ); +} + +create_robot_head_trigger( unitrigger_stub ) +{ + playfx( level._effect["teleport_1p"], unitrigger_stub.origin ); + playsoundatposition( "zmb_footprintbox_disappear", unitrigger_stub.origin ); + wait 3; + unitrigger_stub.radius = 50; + unitrigger_stub.height = 256; + unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + unitrigger_stub.require_look_at = 1; + m_coll = spawn( "script_model", unitrigger_stub.origin ); + m_coll setmodel( "drone_collision" ); + unitrigger_stub.m_coll = m_coll; + wait_network_frame(); + m_plinth = spawn( "script_model", unitrigger_stub.origin ); + m_plinth.angles = unitrigger_stub.angles; + m_plinth setmodel( "p6_zm_tm_staff_holder" ); + unitrigger_stub.m_plinth = m_plinth; + wait_network_frame(); + m_sign = spawn( "script_model", unitrigger_stub.origin ); + m_sign setmodel( "p6_zm_tm_runes" ); + m_sign linkto( unitrigger_stub.m_plinth, "tag_origin", ( 0, 15, 40 ) ); + m_sign hidepart( "j_fire" ); + m_sign hidepart( "j_ice" ); + m_sign hidepart( "j_lightning" ); + m_sign hidepart( "j_wind" ); + + switch ( unitrigger_stub.script_noteworthy ) + { + case "fire": + m_sign showpart( "j_fire" ); + break; + case "water": + m_sign showpart( "j_ice" ); + break; + case "lightning": + m_sign showpart( "j_lightning" ); + break; + case "air": + m_sign showpart( "j_wind" ); + break; + } + + m_sign maps\mp\zombies\_zm_powerup_zombie_blood::make_zombie_blood_entity(); + unitrigger_stub.m_sign = m_sign; + unitrigger_stub.origin += vectorscale( ( 0, 0, 1 ), 30.0 ); + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::robot_head_trigger_think ); +} + +robot_head_trigger_think() +{ + self endon( "kill_trigger" ); + str_weap_staff = "staff_" + self.script_noteworthy + "_upgraded_zm"; + e_upgraded_staff = maps\mp\zm_tomb_craftables::get_staff_info_from_weapon_name( str_weap_staff ); + + while ( true ) + { + self waittill( "trigger", player ); + + if ( player hasweapon( str_weap_staff ) ) + { + e_upgraded_staff.ee_in_use = 1; + player takeweapon( str_weap_staff ); + maps\mp\zm_tomb_craftables::clear_player_staff( str_weap_staff ); + level.n_ee_robot_staffs_planted++; + + if ( level.n_ee_robot_staffs_planted == 4 ) + flag_set( "ee_all_staffs_placed" ); + + e_upgraded_staff thread place_staff( self.stub.m_plinth ); + } + } +} + +place_staff( m_plinth ) +{ + m_staff = getent( "craftable_" + self.weapname, "targetname" ); + m_plinth.e_staff = self; + m_plinth.m_staff = m_staff; + m_plinth.v_old_angles = m_staff.angles; + m_plinth.v_old_origin = m_staff.origin; + m_staff linkto( m_plinth, "tag_origin", ( 0, 10, 30 ), ( 345, 90, 0 ) ); + m_staff show(); + m_plinth playsound( "zmb_squest_robot_place_staff" ); +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_3.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_3.gsc new file mode 100644 index 0000000..f79b16a --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_3.gsc @@ -0,0 +1,155 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_tomb_ee_main; +#include maps\mp\zombies\_zm_unitrigger; + +init() +{ + declare_sidequest_stage( "little_girl_lost", "step_3", ::init_stage, ::stage_logic, ::exit_stage ); +} + +init_stage() +{ + level._cur_stage_name = "step_3"; + level.check_valid_poi = ::mech_zombie_hole_valid; + create_buttons_and_triggers(); +} + +stage_logic() +{ +/# + iprintln( level._cur_stage_name + " of little girl lost started" ); +#/ + level thread watch_for_triple_attack(); + flag_wait( "ee_mech_zombie_hole_opened" ); + wait_network_frame(); + stage_completed( "little_girl_lost", level._cur_stage_name ); +} + +exit_stage( success ) +{ + level.check_valid_poi = undefined; + level notify( "fire_link_cooldown" ); + flag_set( "fire_link_enabled" ); + a_buttons = getentarray( "fire_link_button", "targetname" ); + array_delete( a_buttons ); + a_structs = getstructarray( "fire_link", "targetname" ); + + foreach ( unitrigger_stub in a_structs ) + unregister_unitrigger( unitrigger_stub ); +} + +create_buttons_and_triggers() +{ + a_structs = getstructarray( "fire_link", "targetname" ); + + foreach ( unitrigger_stub in a_structs ) + { + unitrigger_stub.radius = 36; + unitrigger_stub.height = 256; + unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + unitrigger_stub.require_look_at = 1; + m_model = spawn( "script_model", unitrigger_stub.origin ); + m_model setmodel( "p_rus_alarm_button" ); + m_model.angles = unitrigger_stub.angles; + m_model.targetname = "fire_link_button"; + m_model thread ready_to_activate( unitrigger_stub ); + wait_network_frame(); + } +} + +ready_to_activate( unitrigger_stub ) +{ + self endon( "death" ); + self playsoundwithnotify( "vox_maxi_robot_sync_0", "sync_done" ); + + self waittill( "sync_done" ); + + wait 0.5; + self playsoundwithnotify( "vox_maxi_robot_await_0", "ready_to_use" ); + + self waittill( "ready_to_use" ); + + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::activate_fire_link ); +} + +watch_for_triple_attack() +{ + t_hole = getent( "fire_link_damage", "targetname" ); + + while ( !flag( "ee_mech_zombie_hole_opened" ) ) + { + t_hole waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname ); + + if ( isdefined( weaponname ) && weaponname == "beacon_zm" && flag( "fire_link_enabled" ) ) + { + playsoundatposition( "zmb_squest_robot_floor_collapse", t_hole.origin ); + wait 3; + m_floor = getent( "easter_mechzombie_spawn", "targetname" ); + m_floor delete(); + flag_set( "ee_mech_zombie_hole_opened" ); + t_hole delete(); + return; + } + } +} + +mech_zombie_hole_valid( valid ) +{ + t_hole = getent( "fire_link_damage", "targetname" ); + + if ( self istouching( t_hole ) ) + return 1; + + return valid; +} + +activate_fire_link() +{ + self endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "trigger", player ); + + self playsound( "zmb_squest_robot_button" ); + + if ( flag( "three_robot_round" ) ) + { + level thread fire_link_cooldown( self ); + self playsound( "zmb_squest_robot_button_activate" ); + self playloopsound( "zmb_squest_robot_button_timer", 0.5 ); + flag_waitopen( "fire_link_enabled" ); + self stoploopsound( 0.5 ); + self playsound( "zmb_squest_robot_button_deactivate" ); + } + else + { + self playsound( "vox_maxi_robot_abort_0" ); + self playsound( "zmb_squest_robot_button_deactivate" ); + wait 3; + } + } +} + +fire_link_cooldown( t_button ) +{ + level notify( "fire_link_cooldown" ); + level endon( "fire_link_cooldown" ); + flag_set( "fire_link_enabled" ); + + if ( isdefined( t_button ) ) + t_button playsound( "vox_maxi_robot_activated_0" ); + + wait 25; + + if ( isdefined( t_button ) ) + t_button playsound( "vox_maxi_robot_deactivated_0" ); + + flag_clear( "fire_link_enabled" ); +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_4.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_4.gsc new file mode 100644 index 0000000..8eaa784 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_4.gsc @@ -0,0 +1,250 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_tomb_ee_main; +#include maps\mp\zombies\_zm_ai_mechz; +#include maps\mp\zombies\_zm_ai_mechz_dev; +#include maps\mp\zombies\_zm_ai_mechz_claw; +#include maps\mp\zombies\_zm_ai_mechz_ft; +#include maps\mp\zombies\_zm_ai_mechz_booster; +#include maps\mp\zm_tomb_vo; +#include maps\mp\zombies\_zm_ai_mechz_ffotd; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\animscripts\zm_shared; + +init() +{ + declare_sidequest_stage( "little_girl_lost", "step_4", ::init_stage, ::stage_logic, ::exit_stage ); +} + +init_stage() +{ + level._cur_stage_name = "step_4"; + level.ee_mech_zombies_killed = 0; + level.ee_mech_zombies_alive = 0; + level.ee_mech_zombies_spawned = 0; + level.quadrotor_custom_behavior = ::mech_zombie_hole_search; +} + +stage_logic() +{ +/# + iprintln( level._cur_stage_name + " of little girl lost started" ); +#/ + flag_wait( "ee_quadrotor_disabled" ); + level thread sndee4music(); + + if ( !flag( "ee_mech_zombie_fight_completed" ) ) + { + while ( level.ee_mech_zombies_spawned < 8 ) + { + if ( level.ee_mech_zombies_alive < 4 ) + { + ai = spawn_zombie( level.mechz_spawners[0] ); + ai thread ee_mechz_spawn( level.ee_mech_zombies_spawned % 4 ); + level.ee_mech_zombies_alive++; + level.ee_mech_zombies_spawned++; + } + + wait( randomfloatrange( 0.5, 1 ) ); + } + } + + flag_wait( "ee_mech_zombie_fight_completed" ); + wait_network_frame(); + stage_completed( "little_girl_lost", level._cur_stage_name ); +} + +exit_stage( success ) +{ + level.quadrotor_custom_behavior = undefined; +} + +mech_zombie_hole_search() +{ + s_goal = getstruct( "ee_mech_hole_goal_0", "targetname" ); + + if ( distance2dsquared( self.origin, s_goal.origin ) < 250000 ) + { + self setvehgoalpos( s_goal.origin, 1, 2, 1 ); + self waittill_any( "near_goal", "force_goal", "reached_end_node" ); + s_goal = getstruct( "ee_mech_hole_goal_1", "targetname" ); + self setvehgoalpos( s_goal.origin, 1, 0, 1 ); + self waittill_any( "near_goal", "force_goal", "reached_end_node" ); + wait 2; + s_goal = getstruct( "ee_mech_hole_goal_2", "targetname" ); + self setvehgoalpos( s_goal.origin, 1, 0, 1 ); + self waittill_any( "near_goal", "force_goal", "reached_end_node" ); + playsoundatposition( "zmb_squest_maxis_folly", s_goal.origin ); + maxissay( "vox_maxi_drone_upgraded_3", self ); + flag_set( "ee_quadrotor_disabled" ); + self dodamage( 200, self.origin ); + self delete(); + level.maxis_quadrotor = undefined; + } +} + +ee_mechz_spawn( n_spawn_pos ) +{ + self maps\mp\zombies\_zm_ai_mechz_ffotd::spawn_start(); + self endon( "death" ); + level endon( "intermission" ); + self mechz_attach_objects(); + self mechz_set_starting_health(); + self mechz_setup_fx(); + self mechz_setup_snd(); + self.closest_player_override = maps\mp\zombies\_zm_ai_mechz::get_favorite_enemy; + self.animname = "mechz_zombie"; + self.has_legs = 1; + self.no_gib = 1; + self.ignore_all_poi = 1; + self.is_mechz = 1; + self.ignore_enemy_count = 1; + self.no_damage_points = 1; + self.melee_anim_func = ::melee_anim_func; + self.meleedamage = 75; + recalc_zombie_array(); + self setphysparams( 20, 0, 80 ); + self.zombie_init_done = 1; + self notify( "zombie_init_done" ); + self.allowpain = 0; + self animmode( "normal" ); + self orientmode( "face enemy" ); + self maps\mp\zombies\_zm_spawner::zombie_setup_attack_properties(); + self.completed_emerging_into_playable_area = 1; + self notify( "completed_emerging_into_playable_area" ); + self.no_powerups = 0; + self setfreecameralockonallowed( 0 ); + self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow(); + level thread maps\mp\zombies\_zm_spawner::zombie_death_event( self ); + self thread maps\mp\zombies\_zm_spawner::enemy_death_detection(); + a_spawner_structs = getstructarray( "mech_hole_spawner", "targetname" ); + spawn_pos = a_spawner_structs[n_spawn_pos]; + + if ( !isdefined( spawn_pos.angles ) ) + spawn_pos.angles = ( 0, 0, 0 ); + + self thread mechz_death(); + self thread mechz_death_ee(); + self forceteleport( spawn_pos.origin, spawn_pos.angles ); + self set_zombie_run_cycle( "walk" ); + + if ( isdefined( level.mechz_find_flesh_override_func ) ) + level thread [[ level.mechz_find_flesh_override_func ]](); + else + self thread mechz_find_flesh(); + + self thread mechz_jump_think( spawn_pos ); + self ee_mechz_do_jump( spawn_pos ); + self maps\mp\zombies\_zm_ai_mechz_ffotd::spawn_end(); +} + +mechz_death_ee() +{ + self waittill( "death" ); + + level.ee_mech_zombies_killed++; + level.ee_mech_zombies_alive--; + + if ( level.ee_mech_zombies_killed == 4 ) + { + v_max_ammo_origin = self.origin; + level thread maps\mp\zombies\_zm_powerups::specific_powerup_drop( "full_ammo", v_max_ammo_origin ); + } + + if ( level.ee_mech_zombies_killed == 8 ) + { + v_nuke_origin = self.origin; + level thread maps\mp\zombies\_zm_powerups::specific_powerup_drop( "nuke", v_nuke_origin ); + flag_set( "ee_mech_zombie_fight_completed" ); + } +} + +ee_mechz_do_jump( s_spawn_pos ) +{ + self endon( "death" ); + self endon( "kill_jump" ); +/# + if ( getdvarint( _hash_E7121222 ) > 0 ) + println( "\\nMZ: Doing Jump-Teleport\\n" ); +#/ +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\nMZ: Jump setting not interruptable\\n" ); +#/ + self.not_interruptable = 1; + self setfreecameralockonallowed( 0 ); + self animscripted( self.origin, self.angles, "zm_fly_out" ); + self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" ); + self ghost(); + + if ( isdefined( self.m_claw ) ) + self.m_claw ghost(); + + old_fx = self.fx_field; + self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow_stop(); + self fx_cleanup(); + self animscripted( self.origin, self.angles, "zm_fly_hover" ); + wait( level.mechz_jump_delay ); + s_landing_point = getstruct( s_spawn_pos.target, "targetname" ); + + if ( !isdefined( s_landing_point.angles ) ) + s_landing_point.angles = ( 0, 0, 0 ); + + self animscripted( s_landing_point.origin, s_landing_point.angles, "zm_fly_in" ); + self show(); + self.fx_field = old_fx; + self setclientfield( "mechz_fx", self.fx_field ); + self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow(); + + if ( isdefined( self.m_claw ) ) + self.m_claw show(); + + self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" ); + self.not_interruptable = 0; + self setfreecameralockonallowed( 1 ); +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\nMZ: Jump clearing not interruptable\\n" ); +#/ + mechz_jump_cleanup(); + self.closest_jump_point = s_landing_point; +} + +sndee4music() +{ + shouldplay = sndwait(); + + if ( !shouldplay ) + return; + + level.music_override = 1; + level setclientfield( "mus_zmb_egg_snapshot_loop", 1 ); + ent = spawn( "script_origin", ( 0, 0, 0 ) ); + ent playloopsound( "mus_mechz_fight_loop" ); + flag_wait( "ee_mech_zombie_fight_completed" ); + level setclientfield( "mus_zmb_egg_snapshot_loop", 0 ); + level.music_override = 0; + wait 0.05; + ent delete(); +} + +sndwait() +{ + counter = 0; + + while ( is_true( level.music_override ) ) + { + wait 1; + counter++; + + if ( counter >= 60 ) + return false; + } + + return true; +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_5.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_5.gsc new file mode 100644 index 0000000..f4e6fd0 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_5.gsc @@ -0,0 +1,160 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_tomb_ee_main; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zombies\_zm_powerup_zombie_blood; +#include maps\mp\zombies\_zm_unitrigger; + +init() +{ + declare_sidequest_stage( "little_girl_lost", "step_5", ::init_stage, ::stage_logic, ::exit_stage ); +} + +init_stage() +{ + level._cur_stage_name = "step_5"; + level.callbackvehicledamage = ::ee_plane_vehicledamage; + level.zombie_ai_limit--; +} + +stage_logic() +{ +/# + iprintln( level._cur_stage_name + " of little girl lost started" ); +#/ + level thread spawn_zombie_blood_plane(); + flag_wait( "ee_maxis_drone_retrieved" ); + wait_network_frame(); + stage_completed( "little_girl_lost", level._cur_stage_name ); +} + +exit_stage( success ) +{ + level.zombie_ai_limit++; +} + +spawn_zombie_blood_plane() +{ + s_biplane_pos = getstruct( "air_crystal_biplane_pos", "targetname" ); + vh_biplane = spawnvehicle( "veh_t6_dlc_zm_biplane", "zombie_blood_biplane", "biplane_zm", ( 0, 0, 0 ), ( 0, 0, 0 ) ); + vh_biplane ent_flag_init( "biplane_down", 0 ); + vh_biplane maps\mp\zombies\_zm_powerup_zombie_blood::make_zombie_blood_entity(); + vh_biplane playloopsound( "zmb_zombieblood_3rd_plane_loop", 1 ); + vh_biplane.health = 10000; + vh_biplane setcandamage( 1 ); + vh_biplane setforcenocull(); + vh_biplane attachpath( getvehiclenode( "biplane_start", "targetname" ) ); + vh_biplane startpath(); + vh_biplane setclientfield( "ee_plane_fx", 1 ); + vh_biplane ent_flag_wait( "biplane_down" ); + vh_biplane playsound( "zmb_zombieblood_3rd_plane_explode" ); + e_special_zombie = getentarray( "zombie_spawner_dig", "script_noteworthy" )[0]; + ai_pilot = spawn_zombie( e_special_zombie, "zombie_blood_pilot" ); + ai_pilot magic_bullet_shield(); + ai_pilot.ignore_enemy_count = 1; + ai_pilot maps\mp\zombies\_zm_powerup_zombie_blood::make_zombie_blood_entity(); + ai_pilot forceteleport( vh_biplane.origin, vh_biplane.angles ); + ai_pilot.sndname = "capzomb"; + ai_pilot.ignore_nuke = 1; + ai_pilot.b_zombie_blood_damage_only = 1; + playfx( level._effect["biplane_explode"], vh_biplane.origin ); + vh_biplane delete(); + a_start_pos = getstructarray( "pilot_goal", "script_noteworthy" ); + a_start_pos = get_array_of_closest( ai_pilot.origin, a_start_pos ); + linker = spawn( "script_model", ai_pilot.origin ); + linker setmodel( "tag_origin" ); + ai_pilot linkto( linker ); + linker moveto( a_start_pos[0].origin, 3 ); + + linker waittill( "movedone" ); + + linker delete(); + ai_pilot stop_magic_bullet_shield(); + level thread zombie_pilot_sound( ai_pilot ); + ai_pilot.ignoreall = 1; + ai_pilot.zombie_move_speed = "sprint"; + ai_pilot set_zombie_run_cycle( "sprint" ); + ai_pilot thread pilot_loop_logic( a_start_pos[0] ); + + ai_pilot waittill( "death" ); + + level thread spawn_quadrotor_pickup( ai_pilot.origin, ai_pilot.angles ); +} + +zombie_pilot_sound( ai_pilot ) +{ + sndent = spawn( "script_origin", ai_pilot.origin ); + sndent playloopsound( "zmb_zombieblood_3rd_loop_other" ); + + while ( isdefined( ai_pilot ) && isalive( ai_pilot ) ) + { + sndent.origin = ai_pilot.origin; + wait 0.3; + } + + sndent delete(); +} + +pilot_loop_logic( s_start ) +{ + self endon( "death" ); + + for ( s_goal = s_start; isalive( self ); s_goal = getstruct( s_goal.target, "targetname" ) ) + { + self setgoalpos( s_goal.origin ); + + self waittill( "goal" ); + } +} + +ee_plane_vehicledamage( e_inflictor, e_attacker, n_damage, n_dflags, str_means_of_death, str_weapon, v_point, v_dir, str_hit_loc, psoffsettime, b_damage_from_underneath, n_model_index, str_part_name ) +{ + if ( self.vehicletype == "biplane_zm" && !self ent_flag( "biplane_down" ) ) + { + if ( isplayer( e_attacker ) && e_attacker.zombie_vars["zombie_powerup_zombie_blood_on"] ) + self ent_flag_set( "biplane_down" ); + + return 0; + } + + return n_damage; +} + +spawn_quadrotor_pickup( v_origin, v_angles ) +{ + m_quadrotor = spawn( "script_model", v_origin + vectorscale( ( 0, 0, 1 ), 30.0 ) ); + m_quadrotor.angles = v_angles; + m_quadrotor setmodel( "veh_t6_dlc_zm_quadrotor" ); + m_quadrotor.targetname = "quadrotor_pickup"; + unitrigger_stub = spawnstruct(); + unitrigger_stub.origin = v_origin; + unitrigger_stub.radius = 36; + unitrigger_stub.height = 256; + unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + unitrigger_stub.hint_string = &"ZM_TOMB_DIHS"; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + unitrigger_stub.require_look_at = 1; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::quadrotor_pickup_think ); + flag_wait( "ee_maxis_drone_retrieved" ); + unregister_unitrigger( unitrigger_stub ); +} + +quadrotor_pickup_think() +{ + self endon( "kill_trigger" ); + m_quadrotor = getent( "quadrotor_pickup", "targetname" ); + + while ( true ) + { + self waittill( "trigger", player ); + + player playsound( "vox_maxi_drone_upgraded_0" ); + flag_clear( "ee_quadrotor_disabled" ); + flag_set( "ee_maxis_drone_retrieved" ); + m_quadrotor delete(); + } +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_6.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_6.gsc new file mode 100644 index 0000000..694e8ee --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_6.gsc @@ -0,0 +1,149 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_tomb_ee_main; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\gametypes_zm\_hud; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_weap_one_inch_punch; + +init() +{ + declare_sidequest_stage( "little_girl_lost", "step_6", ::init_stage, ::stage_logic, ::exit_stage ); +} + +init_stage() +{ + level._cur_stage_name = "step_6"; + maps\mp\zombies\_zm_spawner::add_custom_zombie_spawn_logic( ::ruins_fist_glow_monitor ); +} + +stage_logic() +{ +/# + iprintln( level._cur_stage_name + " of little girl lost started" ); +#/ + level setclientfield( "sndChamberMusic", 1 ); + flag_wait( "ee_all_players_upgraded_punch" ); + level setclientfield( "sndChamberMusic", 0 ); + wait_network_frame(); + stage_completed( "little_girl_lost", level._cur_stage_name ); +} + +exit_stage( success ) +{ + +} + +ruins_fist_glow_monitor() +{ + if ( flag( "ee_all_players_upgraded_punch" ) ) + return; + + if ( isdefined( self.zone_name ) && self.zone_name == "ug_bottom_zone" ) + { + wait 0.1; + self setclientfield( "ee_zombie_fist_fx", 1 ); + self.has_soul = 1; + + while ( isalive( self ) ) + { + self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); + + if ( !isdefined( inflictor.n_ee_punch_souls ) ) + { + inflictor.n_ee_punch_souls = 0; + inflictor.b_punch_upgraded = 0; + } + + if ( self.has_soul && inflictor.n_ee_punch_souls < 20 && isdefined( weaponname ) && weaponname == "one_inch_punch_zm" && is_true( self.completed_emerging_into_playable_area ) ) + { + self setclientfield( "ee_zombie_fist_fx", 0 ); + self.has_soul = 0; + playsoundatposition( "zmb_squest_punchtime_punched", self.origin ); + inflictor.n_ee_punch_souls++; + + if ( inflictor.n_ee_punch_souls == 20 ) + level thread spawn_punch_upgrade_tablet( self.origin, inflictor ); + } + } + } +} + +spawn_punch_upgrade_tablet( v_origin, e_player ) +{ + m_tablet = spawn( "script_model", v_origin + vectorscale( ( 0, 0, 1 ), 50.0 ) ); + m_tablet setmodel( "p6_zm_tm_tablet" ); + m_fx = spawn( "script_model", m_tablet.origin ); + m_fx setmodel( "tag_origin" ); + m_fx setinvisibletoall(); + m_fx setvisibletoplayer( e_player ); + m_tablet linkto( m_fx ); + playfxontag( level._effect["special_glow"], m_fx, "tag_origin" ); + m_fx thread rotate_punch_upgrade_tablet(); + m_tablet playloopsound( "zmb_squest_punchtime_tablet_loop", 0.5 ); + m_tablet setinvisibletoall(); + m_tablet setvisibletoplayer( e_player ); + + while ( isdefined( e_player ) && !e_player istouching( m_tablet ) ) + wait 0.05; + + m_tablet delete(); + m_fx delete(); + e_player playsound( "zmb_squest_punchtime_tablet_pickup" ); + + if ( isdefined( e_player ) ) + { + e_player thread fadetoblackforxsec( 0, 0.3, 0.5, 0.5, "white" ); + a_zombies = getaispeciesarray( level.zombie_team, "all" ); + + foreach ( zombie in a_zombies ) + { + if ( distance2dsquared( e_player.origin, zombie.origin ) < 65536 && !is_true( zombie.is_mechz ) && is_true( zombie.has_legs ) && is_true( zombie.completed_emerging_into_playable_area ) ) + { + zombie.v_punched_from = e_player.origin; + zombie animcustom( maps\mp\zombies\_zm_weap_one_inch_punch::knockdown_zombie_animate ); + } + } + + wait 1; + e_player.b_punch_upgraded = 1; + + if ( e_player hasweapon( "staff_fire_upgraded_zm" ) ) + e_player.str_punch_element = "fire"; + else if ( e_player hasweapon( "staff_air_upgraded_zm" ) ) + e_player.str_punch_element = "air"; + else if ( e_player hasweapon( "staff_lightning_upgraded_zm" ) ) + e_player.str_punch_element = "lightning"; + else if ( e_player hasweapon( "staff_water_upgraded_zm" ) ) + e_player.str_punch_element = "ice"; + else + e_player.str_punch_element = "upgraded"; + + e_player thread maps\mp\zombies\_zm_weap_one_inch_punch::one_inch_punch_melee_attack(); + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( !isdefined( player.b_punch_upgraded ) || !player.b_punch_upgraded ) + return; + } + + flag_set( "ee_all_players_upgraded_punch" ); + } +} + +rotate_punch_upgrade_tablet() +{ + self endon( "death" ); + + while ( true ) + { + self rotateyaw( 360, 5 ); + + self waittill( "rotatedone" ); + } +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_7.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_7.gsc new file mode 100644 index 0000000..6981dad --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_7.gsc @@ -0,0 +1,87 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_tomb_ee_main; +#include maps\mp\zm_tomb_vo; +#include maps\mp\zm_tomb_chamber; + +init() +{ + declare_sidequest_stage( "little_girl_lost", "step_7", ::init_stage, ::stage_logic, ::exit_stage ); +} + +init_stage() +{ + level._cur_stage_name = "step_7"; + level.n_ee_portal_souls = 0; +} + +stage_logic() +{ +/# + iprintln( level._cur_stage_name + " of little girl lost started" ); +#/ + level thread monitor_puzzle_portal(); + level setclientfield( "sndChamberMusic", 2 ); + flag_wait( "ee_souls_absorbed" ); + level setclientfield( "sndChamberMusic", 3 ); + wait_network_frame(); + stage_completed( "little_girl_lost", level._cur_stage_name ); +} + +exit_stage( success ) +{ + +} + +ee_zombie_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) +{ + if ( isdefined( attacker ) && isplayer( attacker ) && maps\mp\zm_tomb_chamber::is_point_in_chamber( self.origin ) ) + { + level.n_ee_portal_souls++; + + if ( level.n_ee_portal_souls == 1 ) + level thread ee_samantha_say( "vox_sam_generic_encourage_3" ); + else if ( level.n_ee_portal_souls == floor( 33.3333 ) ) + level thread ee_samantha_say( "vox_sam_generic_encourage_4" ); + else if ( level.n_ee_portal_souls == floor( 66.6667 ) ) + level thread ee_samantha_say( "vox_sam_generic_encourage_5" ); + else if ( level.n_ee_portal_souls == 100 ) + { + level thread ee_samantha_say( "vox_sam_generic_encourage_0" ); + flag_set( "ee_souls_absorbed" ); + } + + self setclientfield( "ee_zombie_soul_portal", 1 ); + } +} + +monitor_puzzle_portal() +{ +/# + if ( is_true( level.ee_debug ) ) + { + flag_set( "ee_sam_portal_active" ); + level setclientfield( "ee_sam_portal", 1 ); + return; + } +#/ + while ( !flag( "ee_souls_absorbed" ) ) + { + if ( all_staffs_inserted_in_puzzle_room() && !flag( "ee_sam_portal_active" ) ) + { + flag_set( "ee_sam_portal_active" ); + level setclientfield( "ee_sam_portal", 1 ); + } + else if ( !all_staffs_inserted_in_puzzle_room() && flag( "ee_sam_portal_active" ) ) + { + flag_clear( "ee_sam_portal_active" ); + level setclientfield( "ee_sam_portal", 0 ); + } + + wait 0.5; + } +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_8.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_8.gsc new file mode 100644 index 0000000..60c862e --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_main_step_8.gsc @@ -0,0 +1,104 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_tomb_ee_main; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zm_tomb_vo; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\gametypes_zm\_hud; +#include maps\mp\zm_tomb_chamber; + +init() +{ + declare_sidequest_stage( "little_girl_lost", "step_8", ::init_stage, ::stage_logic, ::exit_stage ); +} + +init_stage() +{ + level._cur_stage_name = "step_8"; + level.quadrotor_custom_behavior = ::move_into_portal; +} + +stage_logic() +{ +/# + iprintln( level._cur_stage_name + " of little girl lost started" ); +#/ + level notify( "tomb_sidequest_complete" ); + + foreach ( player in get_players() ) + { + if ( player is_player_in_chamber() ) + player thread fadetoblackforxsec( 0, 1, 0.5, 0.5, "white" ); + } + + wait 0.5; + level setclientfield( "ee_sam_portal", 2 ); + level notify( "stop_random_chamber_walls" ); + a_walls = getentarray( "chamber_wall", "script_noteworthy" ); + + foreach ( e_wall in a_walls ) + { + e_wall thread maps\mp\zm_tomb_chamber::move_wall_up(); + e_wall hide(); + } + + flag_wait( "ee_quadrotor_disabled" ); + wait 1; + level thread ee_samantha_say( "vox_sam_all_staff_freedom_0" ); + s_pos = getstruct( "player_portal_final", "targetname" ); + t_portal = tomb_spawn_trigger_radius( s_pos.origin, 100, 1 ); + t_portal.require_look_at = 1; + t_portal.hint_string = &"ZM_TOMB_TELE"; + t_portal thread waittill_player_activates(); + level.ee_ending_beam_fx = spawn( "script_model", s_pos.origin + vectorscale( ( 0, 0, -1 ), 300.0 ) ); + level.ee_ending_beam_fx.angles = vectorscale( ( 0, 1, 0 ), 90.0 ); + level.ee_ending_beam_fx setmodel( "tag_origin" ); + playfxontag( level._effect["ee_beam"], level.ee_ending_beam_fx, "tag_origin" ); + level.ee_ending_beam_fx playsound( "zmb_squest_crystal_sky_pillar_start" ); + level.ee_ending_beam_fx playloopsound( "zmb_squest_crystal_sky_pillar_loop", 3 ); + flag_wait( "ee_samantha_released" ); + t_portal tomb_unitrigger_delete(); + wait_network_frame(); + stage_completed( "little_girl_lost", level._cur_stage_name ); +} + +exit_stage( success ) +{ + +} + +waittill_player_activates() +{ + while ( true ) + { + self waittill( "trigger", player ); + + flag_set( "ee_samantha_released" ); + } +} + +move_into_portal() +{ + s_goal = getstruct( "maxis_portal_path", "targetname" ); + + if ( distance2dsquared( self.origin, s_goal.origin ) < 250000 ) + { + self setvehgoalpos( s_goal.origin, 1, 2, 1 ); + self waittill_any( "near_goal", "force_goal", "reached_end_node" ); + maxissay( "vox_maxi_drone_upgraded_1", self ); + wait 1; + level thread maxissay( "vox_maxi_drone_upgraded_2", self ); + s_goal = getstruct( s_goal.target, "targetname" ); + self setvehgoalpos( s_goal.origin, 1, 0, 1 ); + self waittill_any( "near_goal", "force_goal", "reached_end_node" ); + self playsound( "zmb_qrdrone_leave" ); + flag_set( "ee_quadrotor_disabled" ); + self dodamage( 200, self.origin ); + self delete(); + level.maxis_quadrotor = undefined; + } +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_ee_side.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_side.gsc new file mode 100644 index 0000000..9550d12 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_ee_side.gsc @@ -0,0 +1,663 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zm_tomb_vo; +#include maps\mp\zm_tomb_ee_lights; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zm_tomb_amb; + +init() +{ + precacheshader( "zm_tm_wth_dog" ); + precachemodel( "p6_zm_tm_tablet" ); + precachemodel( "p6_zm_tm_tablet_muddy" ); + precachemodel( "p6_zm_tm_radio_01" ); + precachemodel( "p6_zm_tm_radio_01_panel2_blood" ); + registerclientfield( "world", "wagon_1_fire", 14000, 1, "int" ); + registerclientfield( "world", "wagon_2_fire", 14000, 1, "int" ); + registerclientfield( "world", "wagon_3_fire", 14000, 1, "int" ); + registerclientfield( "actor", "ee_zombie_tablet_fx", 14000, 1, "int" ); + registerclientfield( "toplayer", "ee_beacon_reward", 14000, 1, "int" ); + onplayerconnect_callback( ::onplayerconnect_ee_jump_scare ); + onplayerconnect_callback( ::onplayerconnect_ee_oneinchpunch ); + sq_one_inch_punch(); + a_triggers = getentarray( "audio_bump_trigger", "targetname" ); + + foreach ( trigger in a_triggers ) + { + if ( isdefined( trigger.script_sound ) && trigger.script_sound == "zmb_perks_bump_bottle" ) + trigger thread check_for_change(); + } + + level thread wagon_fire_challenge(); + level thread wall_hole_poster(); + level thread quadrotor_medallions(); + level thread maps\mp\zm_tomb_ee_lights::main(); + level thread radio_ee_song(); +} + +quadrotor_medallions() +{ + flag_init( "ee_medallions_collected" ); + level thread quadrotor_medallions_vo(); + level.n_ee_medallions = 4; + flag_wait( "ee_medallions_collected" ); + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "side_sting_4" ); + s_mg_spawn = getstruct( "mgspawn", "targetname" ); + v_spawnpt = s_mg_spawn.origin; + v_spawnang = s_mg_spawn.angles; + player = get_players()[0]; + options = player maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( "mg08_upgraded_zm" ); + m_mg_model = spawn_weapon_model( "mg08_upgraded_zm", undefined, v_spawnpt, v_spawnang, options ); + playfxontag( level._effect["special_glow"], m_mg_model, "tag_origin" ); + t_weapon_swap = tomb_spawn_trigger_radius( v_spawnpt, 100, 1 ); + t_weapon_swap.require_look_at = 1; + t_weapon_swap.hint_string = &"ZM_TOMB_X2PU"; + t_weapon_swap.hint_parm1 = getweapondisplayname( "mg08_upgraded_zm" ); + + for ( b_retrieved = 0; !b_retrieved; b_retrieved = swap_mg( e_player ) ) + t_weapon_swap waittill( "trigger", e_player ); + + t_weapon_swap tomb_unitrigger_delete(); + m_mg_model delete(); +} + +quadrotor_medallions_vo() +{ + n_vo_counter = 0; + + while ( n_vo_counter < 4 ) + { + level waittill( "quadrotor_medallion_found", v_quadrotor ); + + v_quadrotor playsound( "zmb_medallion_pickup" ); + + if ( isdefined( v_quadrotor ) ) + { + maxissay( "vox_maxi_drone_pickups_" + n_vo_counter, v_quadrotor ); + n_vo_counter++; + + if ( isdefined( v_quadrotor ) && n_vo_counter == 4 ) + maxissay( "vox_maxi_drone_pickups_" + n_vo_counter, v_quadrotor ); + } + } +} + +swap_mg( e_player ) +{ + str_current_weapon = e_player getcurrentweapon(); + str_reward_weapon = maps\mp\zombies\_zm_weapons::get_upgrade_weapon( "mg08_zm" ); + + if ( is_player_valid( e_player ) && !e_player.is_drinking && !is_placeable_mine( str_current_weapon ) && !is_equipment( str_current_weapon ) && level.revive_tool != str_current_weapon && "none" != str_current_weapon && !e_player hacker_active() ) + { + if ( e_player hasweapon( str_reward_weapon ) ) + e_player givemaxammo( str_reward_weapon ); + else + { + a_weapons = e_player getweaponslistprimaries(); + + if ( isdefined( a_weapons ) && a_weapons.size >= get_player_weapon_limit( e_player ) ) + e_player takeweapon( str_current_weapon ); + + e_player giveweapon( str_reward_weapon, 0, e_player maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( str_reward_weapon ) ); + e_player givestartammo( str_reward_weapon ); + e_player switchtoweapon( str_reward_weapon ); + } + + return true; + } + else + return false; +} + +wall_hole_poster() +{ + m_poster = getent( "hole_poster", "targetname" ); + m_poster setcandamage( 1 ); + m_poster.health = 1000; + m_poster.maxhealth = m_poster.health; + + while ( true ) + { + m_poster waittill( "damage" ); + + if ( m_poster.health <= 0 ) + m_poster physicslaunch( m_poster.origin, ( 0, 0, 0 ) ); + } +} + +wagon_fire_challenge() +{ + flag_init( "ee_wagon_timer_start" ); + flag_init( "ee_wagon_challenge_complete" ); + s_powerup = getstruct( "wagon_powerup", "targetname" ); + flag_wait( "start_zombie_round_logic" ); + wagon_fire_start(); + + while ( true ) + { + flag_wait( "ee_wagon_timer_start" ); + flag_wait_or_timeout( "ee_wagon_challenge_complete", 30 ); + + if ( !flag( "ee_wagon_challenge_complete" ) ) + { + wagon_fire_start(); + flag_clear( "ee_wagon_timer_start" ); + } + else + { + maps\mp\zombies\_zm_powerups::specific_powerup_drop( "zombie_blood", s_powerup.origin ); + + level waittill( "end_of_round" ); + + waittillframeend; + + while ( level.weather_rain > 0 ) + { + level waittill( "end_of_round" ); + + waittillframeend; + } + + wagon_fire_start(); + flag_clear( "ee_wagon_timer_start" ); + flag_clear( "ee_wagon_challenge_complete" ); + } + } +} + +wagon_fire_start() +{ + level.n_wagon_fires_out = 0; + a_triggers = getentarray( "wagon_damage_trigger", "targetname" ); + + foreach ( trigger in a_triggers ) + { + trigger thread wagon_fire_trigger_watch(); + level setclientfield( trigger.script_noteworthy, 1 ); + } +} + +wagon_fire_trigger_watch() +{ + self notify( "watch_reset" ); + self endon( "watch_reset" ); + + while ( true ) + { + self waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname ); + + if ( isplayer( attacker ) && ( attacker getcurrentweapon() == "staff_water_zm" || attacker getcurrentweapon() == "staff_water_upgraded_zm" ) ) + { + level.n_wagon_fires_out++; + + if ( !flag( "ee_wagon_timer_start" ) ) + flag_set( "ee_wagon_timer_start" ); + + level setclientfield( self.script_noteworthy, 0 ); + + if ( level.n_wagon_fires_out == 3 ) + { + flag_set( "ee_wagon_challenge_complete" ); + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "side_sting_1" ); + } + + return; + } + } +} + +check_for_change() +{ + while ( true ) + { + self waittill( "trigger", e_player ); + + if ( e_player getstance() == "prone" ) + { + e_player maps\mp\zombies\_zm_score::add_to_player_score( 25 ); + play_sound_at_pos( "purchase", e_player.origin ); + break; + } + + wait 0.1; + } +} + +onplayerconnect_ee_jump_scare() +{ + self endon( "disconnect" ); + + if ( !isdefined( level.jump_scare_lookat_point ) ) + level.jump_scare_lookat_point = getstruct( "struct_gg_look", "targetname" ); + + if ( !isdefined( level.b_saw_jump_scare ) ) + level.b_saw_jump_scare = 0; + + while ( !level.b_saw_jump_scare ) + { + n_time = 0; + + while ( self adsbuttonpressed() && n_time < 25 ) + { + n_time++; + wait 0.05; + } + + if ( n_time >= 25 && self adsbuttonpressed() && self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_nml_18" ) && sq_is_weapon_sniper( self getcurrentweapon() ) && is_player_looking_at( level.jump_scare_lookat_point.origin, 0.998, 0, undefined ) ) + { + self playsoundtoplayer( "zmb_easteregg_scarydog", self ); + self.wth_elem = newclienthudelem( self ); + self.wth_elem.horzalign = "fullscreen"; + self.wth_elem.vertalign = "fullscreen"; + self.wth_elem.sort = 1000; + self.wth_elem.foreground = 0; + self.wth_elem setshader( "zm_tm_wth_dog", 640, 480 ); + self.wth_elem.hidewheninmenu = 1; + j_time = 0; + + while ( self adsbuttonpressed() && j_time < 5 ) + { + j_time++; + wait 0.05; + } + + self.wth_elem destroy(); + level.b_saw_jump_scare = 1; + } + + wait 0.05; + } +} + +sq_is_weapon_sniper( str_weapon ) +{ + a_snipers = array( "dsr50" ); + + foreach ( str_sniper in a_snipers ) + { + if ( issubstr( str_weapon, str_sniper ) && !issubstr( str_weapon, "+is" ) ) + return true; + } + + return false; +} + +onplayerconnect_ee_oneinchpunch() +{ + self.sq_one_inch_punch_stage = 0; + self.sq_one_inch_punch_kills = 0; +} + +sq_one_inch_punch_disconnect_watch() +{ + self waittill( "disconnect" ); + + if ( isdefined( self.sq_one_inch_punch_tablet ) ) + self.sq_one_inch_punch_tablet delete(); + + spawn_tablet_model( self.sq_one_inch_punch_tablet_num, "bunker", "muddy" ); + level.n_tablets_remaining++; +} + +sq_one_inch_punch_death_watch() +{ + self endon( "disconnect" ); + + self waittill( "bled_out" ); + + if ( self.sq_one_inch_punch_stage < 6 ) + { + self.sq_one_inch_punch_stage = 0; + self.sq_one_inch_punch_kills = 0; + + if ( isdefined( self.sq_one_inch_punch_tablet ) ) + self.sq_one_inch_punch_tablet delete(); + + spawn_tablet_model( self.sq_one_inch_punch_tablet_num, "bunker", "muddy" ); + level.n_tablets_remaining++; + } +} + +sq_one_inch_punch() +{ + maps\mp\zombies\_zm_spawner::add_custom_zombie_spawn_logic( ::bunker_volume_death_check ); + maps\mp\zombies\_zm_spawner::add_custom_zombie_spawn_logic( ::church_volume_death_check ); + level.n_tablets_remaining = 4; + a_tablets = []; + + for ( n_player_id = 0; n_player_id < level.n_tablets_remaining; n_player_id++ ) + a_tablets[n_player_id] = spawn_tablet_model( n_player_id + 1, "bunker", "muddy" ); + + t_bunker = getent( "trigger_oneinchpunch_bunker_table", "targetname" ); + t_bunker thread bunker_trigger_thread(); + t_bunker setcursorhint( "HINT_NOICON" ); + t_birdbath = getent( "trigger_oneinchpunch_church_birdbath", "targetname" ); + t_birdbath thread birdbath_trigger_thread(); + t_birdbath setcursorhint( "HINT_NOICON" ); +} + +bunker_trigger_thread() +{ + while ( true ) + { + self waittill( "trigger", player ); + + if ( player.sq_one_inch_punch_stage == 0 ) + { + player.sq_one_inch_punch_stage++; + player.sq_one_inch_punch_tablet_num = level.n_tablets_remaining; + player setclientfieldtoplayer( "player_tablet_state", 2 ); + player playsound( "zmb_squest_oiptablet_pickup" ); + player thread sq_one_inch_punch_disconnect_watch(); + player thread sq_one_inch_punch_death_watch(); + m_tablet = getent( "tablet_bunker_" + level.n_tablets_remaining, "targetname" ); + m_tablet delete(); + level.n_tablets_remaining--; +/# + iprintln( "1 - take the tablet to the church" ); +#/ + } + + if ( player.sq_one_inch_punch_stage == 4 ) + { + player.sq_one_inch_punch_tablet = spawn_tablet_model( player.sq_one_inch_punch_tablet_num, "bunker", "clean" ); + player.sq_one_inch_punch_stage++; + player setclientfieldtoplayer( "player_tablet_state", 0 ); + player playsound( "zmb_squest_oiptablet_place_table" ); +/# + iprintln( "5 - charge the tablet in the bunker" ); +#/ + } + else if ( player.sq_one_inch_punch_stage == 6 && ( isdefined( player.beacon_ready ) && player.beacon_ready ) ) + { + player setclientfieldtoplayer( "ee_beacon_reward", 0 ); + player maps\mp\zombies\_zm_weapons::weapon_give( "beacon_zm" ); + player thread richtofenrespondvoplay( "get_beacon" ); + + if ( isdefined( level.zombie_include_weapons["beacon_zm"] ) && !level.zombie_include_weapons["beacon_zm"] ) + { + level.zombie_include_weapons["beacon_zm"] = 1; + level.zombie_weapons["beacon_zm"].is_in_box = 1; + } + + player playsound( "zmb_squest_oiptablet_get_reward" ); + player.sq_one_inch_punch_stage++; +/# + iprintln( "7 - tablet is activated; bestow rewards" ); +#/ + } + } +} + +birdbath_trigger_thread() +{ + while ( true ) + { + self waittill( "trigger", player ); + + if ( player.sq_one_inch_punch_stage == 1 ) + { + if ( isdefined( player.sq_one_inch_punch_reclean ) ) + { + player.sq_one_inch_punch_reclean = undefined; + player.sq_one_inch_punch_stage++; + player.sq_one_inch_punch_tablet = spawn_tablet_model( player.sq_one_inch_punch_tablet_num, "church", "clean" ); + level thread tablet_cleanliness_chastise( player, 1 ); + } + else + player.sq_one_inch_punch_tablet = spawn_tablet_model( player.sq_one_inch_punch_tablet_num, "church", "muddy" ); + + player playsound( "zmb_squest_oiptablet_bathe" ); + player setclientfieldtoplayer( "player_tablet_state", 0 ); + player.sq_one_inch_punch_stage++; +/# + iprintln( "2 - charge the tablet in the church" ); +#/ + } + + if ( player.sq_one_inch_punch_stage == 3 ) + { + player setclientfieldtoplayer( "player_tablet_state", 1 ); + player.sq_one_inch_punch_stage++; + + if ( isdefined( player.sq_one_inch_punch_tablet ) ) + player.sq_one_inch_punch_tablet delete(); + + player playsound( "zmb_squest_oiptablet_pickup_clean" ); + player thread tablet_cleanliness_thread(); +/# + iprintln( "4 - take the tablet to the tank bunker" ); +#/ + } + } +} + +tablet_cleanliness_thread() +{ + self endon( "death_or_disconnect" ); + + while ( self.sq_one_inch_punch_stage == 4 ) + { + if ( self.is_player_slowed ) + { + self setclientfieldtoplayer( "player_tablet_state", 2 ); + self playsoundtoplayer( "zmb_squest_oiptablet_dirtied", self ); + self.sq_one_inch_punch_stage = 1; + self.sq_one_inch_punch_reclean = 1; + level thread tablet_cleanliness_chastise( self ); +/# + iprintln( "1 - take the tablet to the church" ); +#/ + } + + wait 1; + } +} + +tablet_cleanliness_chastise( e_player, b_cleaned = 0 ) +{ + if ( !isdefined( e_player ) || isdefined( level.sam_talking ) && level.sam_talking || flag( "story_vo_playing" ) ) + return; + + flag_set( "story_vo_playing" ); + e_player set_player_dontspeak( 1 ); + level.sam_talking = 1; + str_line = "vox_sam_generic_chastise_7"; + + if ( b_cleaned ) + str_line = "vox_sam_generic_chastise_8"; + + if ( isdefined( e_player ) ) + e_player playsoundtoplayer( str_line, e_player ); + + n_duration = soundgetplaybacktime( str_line ); + wait( n_duration / 1000 ); + level.sam_talking = 0; + flag_clear( "story_vo_playing" ); + + if ( isdefined( e_player ) ) + e_player set_player_dontspeak( 0 ); +} + +bunker_volume_death_check() +{ + self waittill( "death" ); + + if ( !isdefined( self ) ) + return; + + volume_name = "oneinchpunch_bunker_volume"; + volume = getent( volume_name, "targetname" ); + assert( isdefined( volume ), volume_name + " does not exist" ); + attacker = self.attacker; + + if ( isdefined( attacker ) && isplayer( attacker ) ) + { + if ( attacker.sq_one_inch_punch_stage == 5 && ( self.damagemod == "MOD_MELEE" || self.damageweapon == "tomb_shield_zm" ) ) + { + if ( self istouching( volume ) ) + { + self setclientfield( "ee_zombie_tablet_fx", 1 ); + attacker.sq_one_inch_punch_kills++; +/# + iprintln( "kill count: " + attacker.sq_one_inch_punch_kills ); +#/ + if ( attacker.sq_one_inch_punch_kills >= 20 ) + { + attacker thread bunker_spawn_reward(); + attacker.sq_one_inch_punch_stage++; + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "side_sting_3" ); +/# + iprintln( "6 - activate the tablet in the bunker" ); +#/ + } + } + } + } +} + +bunker_spawn_reward() +{ + self endon( "disconnect" ); + wait 2; + self setclientfieldtoplayer( "ee_beacon_reward", 1 ); + wait 2; + self.beacon_ready = 1; +} + +church_volume_death_check() +{ + self waittill( "death" ); + + if ( !isdefined( self ) ) + return; + + volume_name = "oneinchpunch_church_volume"; + volume = getent( volume_name, "targetname" ); + assert( isdefined( volume ), volume_name + " does not exist" ); + attacker = self.attacker; + + if ( isdefined( attacker ) && isplayer( attacker ) ) + { + if ( attacker.sq_one_inch_punch_stage == 2 && ( self.damagemod == "MOD_MELEE" || self.damageweapon == "tomb_shield_zm" ) ) + { + if ( self istouching( volume ) ) + { + self setclientfield( "ee_zombie_tablet_fx", 1 ); + attacker.sq_one_inch_punch_kills++; +/# + iprintln( "kill count: " + attacker.sq_one_inch_punch_kills ); +#/ + if ( attacker.sq_one_inch_punch_kills >= 20 ) + { + attacker.sq_one_inch_punch_stage++; + attacker.sq_one_inch_punch_kills = 0; + attacker.sq_one_inch_punch_tablet delete(); + attacker.sq_one_inch_punch_tablet = spawn_tablet_model( attacker.sq_one_inch_punch_tablet_num, "church", "clean" ); + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "side_sting_6" ); +/# + iprintln( "3 - tablet is charged, pick up the tablet from the birdbath" ); +#/ + } + } + } + } +} + +spawn_tablet_model( n_player_id, str_location, str_state ) +{ + s_tablet_spawn = getstruct( "oneinchpunch_" + str_location + "_tablet_" + n_player_id, "targetname" ); + v_spawnpt = s_tablet_spawn.origin; + v_spawnang = s_tablet_spawn.angles; + m_tablet = spawn( "script_model", v_spawnpt ); + m_tablet.angles = v_spawnang; + + if ( str_state == "clean" ) + { + m_tablet setmodel( "p6_zm_tm_tablet" ); + + if ( str_location == "church" ) + m_tablet playsound( "zmb_squest_oiptablet_charged" ); + } + else + m_tablet setmodel( "p6_zm_tm_tablet_muddy" ); + + m_tablet.targetname = "tablet_" + str_location + "_" + n_player_id; + return m_tablet; +} + +radio_ee_song() +{ + level.found_ee_radio_count = 0; + wait 3; + a_structs = getstructarray( "ee_radio_pos", "targetname" ); + + foreach ( unitrigger_stub in a_structs ) + { + unitrigger_stub.radius = 50; + unitrigger_stub.height = 128; + unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + unitrigger_stub.require_look_at = 1; + m_radio = spawn( "script_model", unitrigger_stub.origin ); + m_radio.angles = unitrigger_stub.angles; + m_radio setmodel( "p6_zm_tm_radio_01" ); + m_radio attach( "p6_zm_tm_radio_01_panel2_blood", "tag_j_cover" ); + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::radio_ee_think ); +/# + unitrigger_stub thread radio_ee_debug(); +#/ + wait_network_frame(); + } +} + +radio_ee_debug() +{ +/# + self endon( "stop_display" ); + + while ( true ) + { + print3d( self.origin, "R", vectorscale( ( 1, 0, 1 ), 255.0 ), 1 ); + wait 0.05; + } +#/ +} + +radio_ee_think() +{ + self endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "trigger", player ); + + if ( is_player_valid( player ) && !( isdefined( level.music_override ) && level.music_override ) ) + { + level.found_ee_radio_count++; + + if ( level.found_ee_radio_count == 3 ) + { + level.music_override = 1; + ent = spawn( "script_origin", ( 0, 0, 0 ) ); + level thread maps\mp\zm_tomb_amb::sndmuseggplay( ent, "mus_zmb_secret_song_a7x", 352 ); + } +/# + self.stub notify( "stop_display" ); +#/ + maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub ); + return; + } + } +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_ffotd.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_ffotd.gsc new file mode 100644 index 0000000..e5bd740 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_ffotd.gsc @@ -0,0 +1,234 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_zonemgr; +#include codescripts\struct; + +main_start() +{ + level thread spawned_collision_ffotd(); + level thread spawn_kill_brushes(); + level thread respawn_struct_fix(); + onplayerconnect_callback( ::one_inch_punch_take_think ); +} + +main_end() +{ + level thread player_spawn_fix(); + level thread update_charger_position(); + level thread traversal_blocker_disabler(); +} + +update_charger_position() +{ + foreach ( e_staff in level.a_elemental_staffs ) + e_staff moveto( e_staff.charger.origin, 0.05 ); + + foreach ( e_staff in level.a_elemental_staffs_upgraded ) + e_staff moveto( e_staff.charger.origin, 0.05 ); +} + +spawned_collision_ffotd() +{ + precachemodel( "collision_ai_64x64x10" ); + precachemodel( "collision_wall_256x256x10_standard" ); + precachemodel( "collision_wall_512x512x10_standard" ); + precachemodel( "collision_geo_256x256x10_standard" ); + precachemodel( "collision_geo_512x512x10_standard" ); + precachemodel( "collision_geo_ramp_standard" ); + precachemodel( "collision_player_512x512x512" ); + precachemodel( "collision_geo_32x32x128_standard" ); + precachemodel( "collision_geo_64x64x128_standard" ); + precachemodel( "collision_geo_64x64x256_standard" ); + precachemodel( "collision_player_wall_256x256x10" ); + precachemodel( "collision_player_wall_512x512x10" ); + precachemodel( "collision_player_wall_32x32x10" ); + precachemodel( "collision_geo_64x64x10_standard" ); + precachemodel( "p6_zm_tm_barbedwire_tube" ); + precachemodel( "p6_zm_tm_rubble_rebar_group" ); + flag_wait( "start_zombie_round_logic" ); + m_disconnector = spawn( "script_model", ( -568, -956, 160 ), 1 ); + m_disconnector setmodel( "collision_ai_64x64x10" ); + m_disconnector.angles = vectorscale( ( 0, 1, 0 ), 35.0 ); + m_disconnector disconnectpaths(); + m_disconnector ghost(); + + if ( !( isdefined( level.optimise_for_splitscreen ) && level.optimise_for_splitscreen ) ) + { + collision1a = spawn( "script_model", ( 1128, -2664.25, 122 ) ); + collision1a setmodel( "collision_player_wall_256x256x10" ); + collision1a.angles = vectorscale( ( 0, 1, 0 ), 285.0 ); + collision1a ghost(); + collision1b = spawn( "script_model", ( 909.5, -2856.5, -6 ) ); + collision1b setmodel( "collision_player_wall_512x512x10" ); + collision1b.angles = vectorscale( ( 0, 1, 0 ), 195.0 ); + collision1b ghost(); + collision1c = spawn( "script_model", ( 415, -2989, -6 ) ); + collision1c setmodel( "collision_player_wall_512x512x10" ); + collision1c.angles = vectorscale( ( 0, 1, 0 ), 195.0 ); + collision1c ghost(); + collision2a = spawn( "script_model", ( -6760, -6536, 280 ) ); + collision2a setmodel( "collision_geo_512x512x10_standard" ); + collision2a.angles = ( 0, 0, 0 ); + collision2a ghost(); + collision2b = spawn( "script_model", ( -6224, -6536, 280 ) ); + collision2b setmodel( "collision_geo_512x512x10_standard" ); + collision2b.angles = ( 0, 0, 0 ); + collision2b ghost(); + collision2c = spawn( "script_model", ( -5704, -6536, 280 ) ); + collision2c setmodel( "collision_geo_512x512x10_standard" ); + collision2c.angles = ( 0, 0, 0 ); + collision2c ghost(); + collision3a = spawn( "script_model", ( 1088, 4216, -192 ) ); + collision3a setmodel( "collision_geo_256x256x10_standard" ); + collision3a.angles = ( 0, 0, 0 ); + collision3a ghost(); + collision4a = spawn( "script_model", ( 545.36, -2382.3, 404 ) ); + collision4a setmodel( "collision_wall_256x256x10_standard" ); + collision4a.angles = ( 0, 293.8, 180 ); + collision4a ghost(); + collision4b = spawn( "script_model", ( 579.36, -2367.3, 264 ) ); + collision4b setmodel( "collision_geo_ramp_standard" ); + collision4b.angles = ( 0, 293.8, 180 ); + collision4b ghost(); + collision5a = spawn( "script_model", ( 67.87, -3193.25, 504 ) ); + collision5a setmodel( "collision_player_512x512x512" ); + collision5a.angles = vectorscale( ( 0, 1, 0 ), 14.1 ); + collision5a ghost(); + collision5b = spawn( "script_model", ( 292.5, -2865.5, 286 ) ); + collision5b setmodel( "collision_geo_32x32x128_standard" ); + collision5b.angles = ( 270, 22.4, 0 ); + collision5b ghost(); + collision5c = spawn( "script_model", ( 292.5, -2865.5, 266 ) ); + collision5c setmodel( "collision_geo_32x32x128_standard" ); + collision5c.angles = ( 270, 22.4, 0 ); + collision5c ghost(); + collision5d = spawn( "script_model", ( 339, -3024.5, 280 ) ); + collision5d setmodel( "collision_geo_64x64x128_standard" ); + collision5d.angles = ( 270, 18.2, 0 ); + collision5d ghost(); + model5a = spawn( "script_model", ( 248.15, -2917.26, 351.01 ) ); + model5a setmodel( "p6_zm_tm_barbedwire_tube" ); + model5a.angles = ( 6.00001, 188, 90 ); + collision6a = spawn( "script_model", ( -227.25, 4010.25, -96 ) ); + collision6a setmodel( "collision_player_wall_256x256x10" ); + collision6a.angles = vectorscale( ( 0, 1, 0 ), 265.299 ); + collision6a ghost(); + model6a = spawn( "script_model", ( -231.124, 4093.08, -230.685 ) ); + model6a setmodel( "p6_zm_tm_rubble_rebar_group" ); + model6a.angles = ( 25.883, 2.13901, 0.55601 ); + collision7a = spawn( "script_model", ( 599, -2478, 184 ) ); + collision7a setmodel( "collision_geo_64x64x128_standard" ); + collision7a.angles = ( 270, 14.7, 0 ); + collision7a ghost(); + collision8a = spawn( "script_model", ( -3190, -555, -111 ) ); + collision8a setmodel( "collision_player_wall_512x512x10" ); + collision8a.angles = vectorscale( ( 0, 1, 0 ), 1.8 ); + collision8a ghost(); + collision11a = spawn( "script_model", ( 812.812, -64.1434, 384 ) ); + collision11a setmodel( "collision_player_wall_256x256x10" ); + collision11a.angles = vectorscale( ( 0, 1, 0 ), 9.99998 ); + collision11a ghost(); + collision12a = spawn( "script_model", ( 180, 4128, 40 ) ); + collision12a setmodel( "collision_player_wall_512x512x10" ); + collision12a.angles = vectorscale( ( 0, 1, 0 ), 270.0 ); + collision12a ghost(); + collision13a = spawn( "script_model", ( 2088, 588, 240 ) ); + collision13a setmodel( "collision_player_wall_512x512x10" ); + collision13a.angles = ( 0, 0, 0 ); + collision13a ghost(); + collision14a = spawn( "script_model", ( -787, 375, 380 ) ); + collision14a setmodel( "collision_player_wall_256x256x10" ); + collision14a.angles = ( 0, 0, 0 ); + collision14a ghost(); + collision14b = spawn( "script_model", ( -899, 375, 236 ) ); + collision14b setmodel( "collision_player_wall_32x32x10" ); + collision14b.angles = ( 0, 0, 0 ); + collision14b ghost(); + collision15a = spawn( "script_model", ( 1704, 2969.34, -187.83 ) ); + collision15a setmodel( "collision_geo_64x64x10_standard" ); + collision15a.angles = vectorscale( ( 0, 0, 1 ), 47.4 ); + collision15a ghost(); + } +} + +spawn_kill_brushes() +{ + t_killbrush_1 = spawn( "trigger_box", ( 1643, 2168, 96 ), 0, 256, 1200, 512 ); + t_killbrush_1.script_noteworthy = "kill_brush"; + t_killbrush_2 = spawn( "trigger_box", ( -1277, 892, 184 ), 0, 148, 88, 128 ); + t_killbrush_2.script_noteworthy = "kill_brush"; +} + +one_inch_punch_take_think() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "bled_out" ); + + self.one_inch_punch_flag_has_been_init = 0; + + if ( self ent_flag_exist( "melee_punch_cooldown" ) ) + self.ent_flag["melee_punch_cooldown"] = undefined; + } +} + +player_spawn_fix() +{ + s_zone_nml_18 = level.zones["zone_nml_18"]; + s_zone_nml_18.adjacent_zones["zone_nml_19"] = undefined; + s_zone_nml_19 = level.zones["zone_nml_19"]; + s_zone_nml_19.adjacent_zones["zone_nml_18"] = undefined; + add_adjacent_zone( "zone_nml_18", "zone_nml_19", "activate_zone_ruins" ); +} + +respawn_struct_fix() +{ + spawn1 = createstruct(); + spawn1.model = undefined; + spawn1.origin = ( 2400, 120, 160 ); + spawn1.targetname = "nml_11_spawn_points"; + spawn1.radius = 32; + spawn1.script_int = 1; + spawn2 = createstruct(); + spawn2.model = undefined; + spawn2.origin = ( 2392, 360, 160 ); + spawn2.targetname = "nml_11_spawn_points"; + spawn2.radius = 32; + spawn2.script_int = 1; + spawn3 = createstruct(); + spawn3.model = undefined; + spawn3.origin = ( 2616, 152, 160 ); + spawn3.targetname = "nml_11_spawn_points"; + spawn3.radius = 32; + spawn3.script_int = 1; +} + +traversal_blocker_disabler() +{ + level endon( "activate_zone_nml" ); + pos1 = ( -1509, 3912, -168 ); + pos2 = ( 672, 3720, -179 ); + b_too_close = 0; + + while ( level.round_number < 10 && !b_too_close ) + { + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( distancesquared( player.origin, pos1 ) < 4096 || distancesquared( player.origin, pos2 ) < 4096 ) + b_too_close = 1; + } + + wait 1; + } + + m_traversal_blocker = getent( "traversal_blocker", "targetname" ); + m_traversal_blocker.origin += vectorscale( ( 0, 0, -1 ), 10000.0 ); + m_traversal_blocker connectpaths(); +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_fx.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_fx.gsc new file mode 100644 index 0000000..75e36bd --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_fx.gsc @@ -0,0 +1,151 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\zm_tomb_fx; + +main() +{ + precache_createfx_fx(); + precache_scripted_fx(); + precache_fxanim_props(); + precache_fxanim_props_dlc4(); + maps\mp\createfx\zm_tomb_fx::main(); +} + +precache_scripted_fx() +{ + level._effect["eye_glow_blue"] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" ); + level._effect["switch_sparks"] = loadfx( "env/electrical/fx_elec_wire_spark_burst" ); + level._effect["zapper_light_ready"] = loadfx( "maps/zombie_tomb/fx_tomb_capture_light_green" ); + level._effect["zapper_light_notready"] = loadfx( "maps/zombie_tomb/fx_tomb_capture_light_red" ); + level._effect["m14_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_rifle" ); + level._effect["fx_tomb_ee_vortex"] = loadfx( "maps/zombie_tomb/fx_tomb_ee_vortex" ); + level._effect["poltergeist"] = loadfx( "misc/fx_zombie_couch_effect" ); + level._effect["door_steam"] = loadfx( "maps/zombie_tomb/fx_tomb_dieselmagic_doors_steam" ); + level._effect["zomb_gib"] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" ); + level._effect["spawn_cloud"] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); + level._effect["robot_foot_stomp"] = loadfx( "maps/zombie_tomb/fx_tomb_robot_dust" ); + level._effect["eject_warning"] = loadfx( "maps/zombie_tomb/fx_tomb_robot_eject_warning" ); + level._effect["eject_steam"] = loadfx( "maps/zombie_tomb/fx_tomb_robot_eject_steam" ); + level._effect["giant_robot_footstep_warning_light"] = loadfx( "maps/zombie_tomb/fx_tomb_foot_warning_light_red" ); + level._effect["air_glow"] = loadfx( "maps/zombie_tomb/fx_tomb_elem_reveal_air_glow" ); + level._effect["elec_glow"] = loadfx( "maps/zombie_tomb/fx_tomb_elem_reveal_elec_glow" ); + level._effect["fire_glow"] = loadfx( "maps/zombie_tomb/fx_tomb_elem_reveal_fire_glow" ); + level._effect["ice_glow"] = loadfx( "maps/zombie_tomb/fx_tomb_elem_reveal_ice_glow" ); + level._effect["digging"] = loadfx( "maps/zombie_tomb/fx_tomb_shovel_dig" ); + level._effect["mechz_death"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_death" ); + level._effect["mechz_sparks"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_sparks" ); + level._effect["mechz_steam"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_steam" ); + level._effect["mechz_claw"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_wpn_claw" ); + level._effect["mechz_claw_arm"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_wpn_source" ); + level._effect["staff_charge"] = loadfx( "weapon/zmb_staff/fx_zmb_staff_charge" ); + level._effect["staff_soul"] = loadfx( "weapon/zmb_staff/fx_zmb_staff_charge_souls" ); + level._effect["fire_muzzle"] = loadfx( "weapon/zmb_staff/fx_zmb_staff_fire_muz_flash_1p" ); + level._effect["crypt_gem_beam"] = loadfx( "weapon/zmb_staff/fx_zmb_staff_charge_souls" ); + level._effect["crypt_wall_drop"] = loadfx( "maps/zombie_tomb/fx_tomb_chamber_walls_impact" ); + level._effect["air_puzzle_smoke"] = loadfx( "maps/zombie_tomb/fx_tomb_puzzle_air_smoke" ); + level._effect["elec_piano_glow"] = loadfx( "maps/zombie_tomb/fx_tomb_puzzle_elec_sparks" ); + level._effect["fire_ash_explosion"] = loadfx( "maps/zombie_tomb/fx_tomb_puzzle_fire_exp_ash" ); + level._effect["fire_sacrifice_flame"] = loadfx( "maps/zombie_tomb/fx_tomb_puzzle_fire_sacrifice" ); + level._effect["fire_torch"] = loadfx( "maps/zombie_tomb/fx_tomb_puzzle_fire_torch" ); + level._effect["ice_explode"] = loadfx( "maps/zombie_tomb/fx_tomb_puzzle_ice_pipe_burst" ); + level._effect["puzzle_orb_trail"] = loadfx( "maps/zombie_tomb/fx_tomb_puzzle_plinth_trail" ); + level._effect["teleport_1p"] = loadfx( "maps/zombie_tomb/fx_tomb_teleport_1p" ); + level._effect["teleport_3p"] = loadfx( "maps/zombie_tomb/fx_tomb_teleport_3p" ); + level._effect["teleport_air"] = loadfx( "maps/zombie_tomb/fx_tomb_portal_air" ); + level._effect["teleport_elec"] = loadfx( "maps/zombie_tomb/fx_tomb_portal_elec" ); + level._effect["teleport_fire"] = loadfx( "maps/zombie_tomb/fx_tomb_portal_fire" ); + level._effect["teleport_ice"] = loadfx( "maps/zombie_tomb/fx_tomb_portal_ice" ); + level._effect["tesla_elec_kill"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_afterlife_zmb_tport" ); + level._effect["capture_progression"] = loadfx( "maps/zombie_tomb/fx_tomb_capture_progression" ); + level._effect["capture_complete"] = loadfx( "maps/zombie_tomb/fx_tomb_capture_complete" ); + level._effect["capture_exhaust"] = loadfx( "maps/zombie_tomb/fx_tomb_capture_exhaust_back" ); + level._effect["screecher_hole"] = loadfx( "maps/zombie_tomb/fx_tomb_screecher_vortex" ); + level._effect["zone_capture_zombie_spawn"] = loadfx( "maps/zombie_tomb/fx_tomb_emergence_spawn" ); + level._effect["crusader_zombie_eyes"] = loadfx( "maps/zombie/fx_zombie_crusader_eyes" ); + level._effect["zone_capture_zombie_torso_fx"] = loadfx( "maps/zombie_tomb/fx_tomb_crusader_torso_loop" ); + level._effect["player_rain"] = loadfx( "maps/zombie_tomb/fx_tomb_player_weather_rain" ); + level._effect["player_snow"] = loadfx( "maps/zombie_tomb/fx_tomb_player_weather_snow" ); + level._effect["lightning_flash"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_lg" ); + level._effect["tank_treads"] = loadfx( "maps/zombie_tomb/fx_tomb_veh_tank_treadfx_mud" ); + level._effect["tank_light_grn"] = loadfx( "maps/zombie_tomb/fx_tomb_capture_light_green" ); + level._effect["tank_light_red"] = loadfx( "maps/zombie_tomb/fx_tomb_capture_light_red" ); + level._effect["tank_overheat"] = loadfx( "maps/zombie_tomb/fx_tomb_veh_tank_exhaust_overheat" ); + level._effect["tank_exhaust"] = loadfx( "maps/zombie_tomb/fx_tomb_veh_tank_exhaust" ); + level._effect["bottle_glow"] = loadfx( "maps/zombie_tomb/fx_tomb_dieselmagic_portal" ); + level._effect["perk_pipe_smoke"] = loadfx( "maps/zombie_tomb/fx_tomb_perk_machine_exhaust" ); + level._effect["wagon_fire"] = loadfx( "maps/zombie_tomb/fx_tomb_ee_fire_wagon" ); + level._effect["zombie_fist_glow"] = loadfx( "maps/zombie_tomb/fx_tomb_ee_fists" ); + level._effect["ee_vortex"] = loadfx( "maps/zombie_tomb/fx_tomb_ee_vortex" ); + level._effect["ee_beam"] = loadfx( "maps/zombie_tomb/fx_tomb_ee_beam" ); + level._effect["foot_box_glow"] = loadfx( "maps/zombie_tomb/fx_tomb_challenge_fire" ); + level._effect["couch_fx"] = loadfx( "maps/zombie_tomb/fx_tomb_debris_blocker" ); + level._effect["sky_plane_tracers"] = loadfx( "maps/zombie_tomb/fx_tomb_sky_plane_tracers" ); + level._effect["sky_plane_trail"] = loadfx( "maps/zombie_tomb/fx_tomb_sky_plane_trail" ); + level._effect["biplane_explode"] = loadfx( "maps/zombie_tomb/fx_tomb_explo_airplane" ); + level._effect["special_glow"] = loadfx( "maps/zombie_tomb/fx_tomb_elem_reveal_glow" ); +} + +precache_createfx_fx() +{ + level._effect["fx_sky_dist_aa_tracers"] = loadfx( "maps/zombie_tomb/fx_tomb_sky_dist_aa_tracers" ); + level._effect["fx_tomb_vortex_glow"] = loadfx( "maps/zombie_tomb/fx_tomb_vortex_glow" ); + level._effect["fx_pack_a_punch"] = loadfx( "maps/zombie_tomb/fx_tomb_pack_a_punch_light_beams" ); + level._effect["fx_tomb_dust_fall"] = loadfx( "maps/zombie_tomb/fx_tomb_dust_fall" ); + level._effect["fx_tomb_dust_fall_lg"] = loadfx( "maps/zombie_tomb/fx_tomb_dust_fall_lg" ); + level._effect["fx_tomb_embers_flat"] = loadfx( "maps/zombie_tomb/fx_tomb_embers_flat" ); + level._effect["fx_tomb_fire_lg"] = loadfx( "maps/zombie_tomb/fx_tomb_fire_lg" ); + level._effect["fx_tomb_fire_sm"] = loadfx( "maps/zombie_tomb/fx_tomb_fire_sm" ); + level._effect["fx_tomb_fire_line_sm"] = loadfx( "maps/zombie_tomb/fx_tomb_fire_line_sm" ); + level._effect["fx_tomb_fire_sm_smolder"] = loadfx( "maps/zombie_tomb/fx_tomb_fire_sm_smolder" ); + level._effect["fx_tomb_ground_fog"] = loadfx( "maps/zombie_tomb/fx_tomb_ground_fog" ); + level._effect["fx_tomb_sparks"] = loadfx( "maps/zombie_tomb/fx_tomb_sparks" ); + level._effect["fx_tomb_water_drips"] = loadfx( "maps/zombie_tomb/fx_tomb_water_drips" ); + level._effect["fx_tomb_water_drips_sm"] = loadfx( "maps/zombie_tomb/fx_tomb_water_drips_sm" ); + level._effect["fx_tomb_smoke_pillar_xlg"] = loadfx( "maps/zombie_tomb/fx_tomb_smoke_pillar_xlg" ); + level._effect["fx_tomb_godray_md"] = loadfx( "maps/zombie_tomb/fx_tomb_godray_md" ); + level._effect["fx_tomb_godray_mist_md"] = loadfx( "maps/zombie_tomb/fx_tomb_godray_mist_md" ); + level._effect["fx_tomb_dust_motes_md"] = loadfx( "maps/zombie_tomb/fx_tomb_dust_motes_md" ); + level._effect["fx_tomb_dust_motes_lg"] = loadfx( "maps/zombie_tomb/fx_tomb_dust_motes_lg" ); + level._effect["fx_tomb_light_md"] = loadfx( "maps/zombie_tomb/fx_tomb_light_md" ); + level._effect["fx_tomb_light_lg"] = loadfx( "maps/zombie_tomb/fx_tomb_light_lg" ); + level._effect["fx_tomb_light_expensive"] = loadfx( "maps/zombie_tomb/fx_tomb_light_expensive" ); + level._effect["fx_tomb_steam_md"] = loadfx( "maps/zombie_tomb/fx_tomb_steam_md" ); + level._effect["fx_tomb_steam_lg"] = loadfx( "maps/zombie_tomb/fx_tomb_steam_lg" ); + level._effect["fx_tomb_church_fire_vista"] = loadfx( "maps/zombie_tomb/fx_tomb_church_fire_vista" ); + level._effect["fx_tomb_church_custom"] = loadfx( "maps/zombie_tomb/fx_tomb_church_custom" ); + level._effect["fx_tomb_chamber_glow"] = loadfx( "maps/zombie_tomb/fx_tomb_chamber_glow" ); + level._effect["fx_tomb_chamber_glow_blue"] = loadfx( "maps/zombie_tomb/fx_tomb_chamber_glow_blue" ); + level._effect["fx_tomb_chamber_glow_purple"] = loadfx( "maps/zombie_tomb/fx_tomb_chamber_glow_purple" ); + level._effect["fx_tomb_chamber_glow_yellow"] = loadfx( "maps/zombie_tomb/fx_tomb_chamber_glow_yellow" ); + level._effect["fx_tomb_chamber_glow_red"] = loadfx( "maps/zombie_tomb/fx_tomb_chamber_glow_red" ); + level._effect["fx_tomb_chamber_walls_impact"] = loadfx( "maps/zombie_tomb/fx_tomb_chamber_walls_impact" ); + level._effect["fx_tomb_crafting_chamber_glow"] = loadfx( "maps/zombie_tomb/fx_tomb_crafting_chamber_glow" ); + level._effect["fx_tomb_probe_elec_on"] = loadfx( "maps/zombie_tomb/fx_tomb_probe_elec_on" ); + level._effect["fx_tomb_robot_ambient"] = loadfx( "maps/zombie_tomb/fx_tomb_robot_ambient" ); + level._effect["fx_tomb_skybox_vortex"] = loadfx( "maps/zombie_tomb/fx_tomb_skybox_vortex" ); +} + +#using_animtree("fxanim_props"); + +precache_fxanim_props() +{ + level.scr_anim["fxanim_props"]["dogfights"] = %fxanim_zom_tomb_dogfights_anim; +} + +#using_animtree("fxanim_props_dlc4"); + +precache_fxanim_props_dlc4() +{ + level.scr_anim["fxanim_props_dlc4"]["church_wires"] = %fxanim_zom_tomb_church_wires_anim; + level.scr_anim["fxanim_props_dlc4"]["no_mans_wire"] = %fxanim_zom_tomb_no_mans_wire_anim; + level.scr_anim["fxanim_props_dlc4"]["float_bunker"] = %fxanim_zom_tomb_debris_float_bunker_anim; + level.scr_anim["fxanim_props_dlc4"]["chamber_rocks01"] = %fxanim_zom_tomb_chamber_rocks01_anim; + level.scr_anim["fxanim_props_dlc4"]["chamber_rocks02"] = %fxanim_zom_tomb_chamber_rocks02_anim; + level.scr_anim["fxanim_props_dlc4"]["head_fans"] = %fxanim_zom_tomb_robot_head_fans_anim; + level.scr_anim["fxanim_props_dlc4"]["church_drain"] = %fxanim_zom_tomb_church_drain_anim; + level.scr_anim["fxanim_props_dlc4"]["wires_ruins"] = %fxanim_zom_tomb_wires_ruins_anim; + level.scr_anim["fxanim_props_dlc4"]["pap_ropes"] = %fxanim_zom_tomb_pap_ropes_anim; + level.scr_anim["fxanim_props_dlc4"]["church_ceiling"] = %fxanim_zom_tomb_church_ceiling_anim; + level.scr_anim["fxanim_props_dlc4"]["crane_hook"] = %fxanim_zom_tomb_crane_hook_anim; +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_gamemodes.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_gamemodes.gsc new file mode 100644 index 0000000..8bd0f14 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_gamemodes.gsc @@ -0,0 +1,15 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zm_tomb; +#include maps\mp\zm_tomb_classic; + +init() +{ + add_map_gamemode( "zclassic", maps\mp\zm_tomb::zstandard_preinit, undefined, undefined ); + add_map_location_gamemode( "zclassic", "tomb", maps\mp\zm_tomb_classic::precache, maps\mp\zm_tomb_classic::main ); +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_giant_robot.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_giant_robot.gsc new file mode 100644 index 0000000..df29018 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_giant_robot.gsc @@ -0,0 +1,2182 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\animscripts\zm_death; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\gametypes_zm\_hud; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zm_tomb_giant_robot_ffotd; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\zombies\_zm_ai_mechz; +#include maps\mp\zombies\_zm_weap_one_inch_punch; +#include maps\mp\zm_tomb_teleporter; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_clone; +#include maps\mp\zm_tomb_vo; +#include maps\mp\zombies\_zm; + +init_giant_robot_glows() +{ + maps\mp\zm_tomb_giant_robot_ffotd::init_giant_robot_glows_start(); + precacheitem( "falling_hands_tomb_zm" ); + precachemodel( "veh_t6_dlc_zm_robot_foot_hatch" ); + precachemodel( "veh_t6_dlc_zm_robot_foot_hatch_lights" ); + flag_init( "foot_shot" ); + flag_init( "three_robot_round" ); + flag_init( "fire_link_enabled" ); + flag_init( "timeout_vo_robot_0" ); + flag_init( "timeout_vo_robot_1" ); + flag_init( "timeout_vo_robot_2" ); + level thread setup_giant_robot_devgui(); + level.gr_foot_hatch_closed = []; + level.gr_foot_hatch_closed[0] = 1; + level.gr_foot_hatch_closed[1] = 1; + level.gr_foot_hatch_closed[2] = 1; + a_gr_head_triggers = getstructarray( "giant_robot_head_exit_trigger", "script_noteworthy" ); + + foreach ( struct in a_gr_head_triggers ) + gr_head_exit_trigger_start( struct ); + + level thread handle_wind_tunnel_bunker_collision(); + level thread handle_tank_bunker_collision(); + maps\mp\zm_tomb_giant_robot_ffotd::init_giant_robot_glows_end(); +} + +#using_animtree("zm_tomb_giant_robot_hatch"); + +init_animtree() +{ + scriptmodelsuseanimtree( #animtree ); +} + +init_giant_robot() +{ + maps\mp\zm_tomb_giant_robot_ffotd::init_giant_robot_start(); + registerclientfield( "actor", "register_giant_robot", 14000, 1, "int" ); + registerclientfield( "world", "start_anim_robot_0", 14000, 1, "int" ); + registerclientfield( "world", "start_anim_robot_1", 14000, 1, "int" ); + registerclientfield( "world", "start_anim_robot_2", 14000, 1, "int" ); + registerclientfield( "world", "play_foot_stomp_fx_robot_0", 14000, 2, "int" ); + registerclientfield( "world", "play_foot_stomp_fx_robot_1", 14000, 2, "int" ); + registerclientfield( "world", "play_foot_stomp_fx_robot_2", 14000, 2, "int" ); + registerclientfield( "world", "play_foot_open_fx_robot_0", 14000, 2, "int" ); + registerclientfield( "world", "play_foot_open_fx_robot_1", 14000, 2, "int" ); + registerclientfield( "world", "play_foot_open_fx_robot_2", 14000, 2, "int" ); + registerclientfield( "world", "eject_warning_fx_robot_0", 14000, 1, "int" ); + registerclientfield( "world", "eject_warning_fx_robot_1", 14000, 1, "int" ); + registerclientfield( "world", "eject_warning_fx_robot_2", 14000, 1, "int" ); + registerclientfield( "allplayers", "eject_steam_fx", 14000, 1, "int" ); + registerclientfield( "allplayers", "all_tubes_play_eject_steam_fx", 14000, 1, "int" ); + registerclientfield( "allplayers", "gr_eject_player_impact_fx", 14000, 1, "int" ); + registerclientfield( "toplayer", "giant_robot_rumble_and_shake", 14000, 2, "int" ); + registerclientfield( "world", "church_ceiling_fxanim", 14000, 1, "int" ); + level thread giant_robot_initial_spawns(); + level.custom_intermission = ::tomb_standard_intermission; + init_footstep_safe_spots(); + maps\mp\zm_tomb_giant_robot_ffotd::init_giant_robot_end(); +} + +init_footstep_safe_spots() +{ + level.giant_robot_footstep_safe_spots = []; + make_safe_spot_trigger_box_at_point( ( -493, -198, 389 ), ( 0, 0, 0 ), 80, 64, 150 ); +} + +make_safe_spot_trigger_box_at_point( v_origin, v_angles, n_length, n_width, n_height ) +{ + trig = spawn( "trigger_box", v_origin, 0, n_length, n_width, n_height ); + trig.angles = v_angles; + level.giant_robot_footstep_safe_spots[level.giant_robot_footstep_safe_spots.size] = trig; +} + +tomb_can_revive_override( player_down ) +{ + if ( isdefined( player_down.is_stomped ) && player_down.is_stomped ) + return false; + + return true; +} + +giant_robot_initial_spawns() +{ + flag_wait( "start_zombie_round_logic" ); + level.a_giant_robots = []; + + for ( i = 0; i < 3; i++ ) + { + level.gr_foot_hatch_closed[i] = 1; + trig_stomp_kill_right = getent( "trig_stomp_kill_right_" + i, "targetname" ); + trig_stomp_kill_left = getent( "trig_stomp_kill_left_" + i, "targetname" ); + trig_stomp_kill_right enablelinkto(); + trig_stomp_kill_left enablelinkto(); + clip_foot_right = getent( "clip_foot_right_" + i, "targetname" ); + clip_foot_left = getent( "clip_foot_left_" + i, "targetname" ); + sp_giant_robot = getent( "ai_giant_robot_" + i, "targetname" ); + ai = sp_giant_robot spawnactor(); + ai maps\mp\zm_tomb_giant_robot_ffotd::giant_robot_spawn_start(); + ai.is_giant_robot = 1; + ai.giant_robot_id = i; + tag_right_foot = ai gettagorigin( "TAG_ATTACH_HATCH_RI" ); + tag_left_foot = ai gettagorigin( "TAG_ATTACH_HATCH_LE" ); + trig_stomp_kill_right.origin = tag_right_foot + vectorscale( ( 0, 0, 1 ), 72.0 ); + trig_stomp_kill_right.angles = ai gettagangles( "TAG_ATTACH_HATCH_RI" ); + trig_stomp_kill_left.origin = tag_left_foot + vectorscale( ( 0, 0, 1 ), 72.0 ); + trig_stomp_kill_left.angles = ai gettagangles( "TAG_ATTACH_HATCH_LE" ); + wait 0.1; + trig_stomp_kill_right linkto( ai, "TAG_ATTACH_HATCH_RI", vectorscale( ( 0, 0, 1 ), 72.0 ) ); + wait_network_frame(); + trig_stomp_kill_left linkto( ai, "TAG_ATTACH_HATCH_LE", vectorscale( ( 0, 0, 1 ), 72.0 ) ); + wait_network_frame(); + ai.trig_stomp_kill_right = trig_stomp_kill_right; + ai.trig_stomp_kill_left = trig_stomp_kill_left; + clip_foot_right.origin = tag_right_foot + ( 0, 0, 0 ); + clip_foot_left.origin = tag_left_foot + ( 0, 0, 0 ); + clip_foot_right.angles = ai gettagangles( "TAG_ATTACH_HATCH_RI" ); + clip_foot_left.angles = ai gettagangles( "TAG_ATTACH_HATCH_LE" ); + wait 0.1; + clip_foot_right linkto( ai, "TAG_ATTACH_HATCH_RI", ( 0, 0, 0 ) ); + wait_network_frame(); + clip_foot_left linkto( ai, "TAG_ATTACH_HATCH_LE", ( 0, 0, 0 ) ); + wait_network_frame(); + ai.clip_foot_right = clip_foot_right; + ai.clip_foot_left = clip_foot_left; + ai.is_zombie = 0; + ai.targetname = "giant_robot_walker_" + i; + ai.animname = "giant_robot_walker"; + ai.script_noteworthy = "giant_robot"; + ai.audio_type = "giant_robot"; + ai.ignoreall = 1; + ai.ignoreme = 1; + ai setcandamage( 0 ); + ai magic_bullet_shield(); + ai setplayercollision( 1 ); + ai setforcenocull(); + ai setfreecameralockonallowed( 0 ); + ai.goalradius = 100000; + ai setgoalpos( ai.origin ); + ai setclientfield( "register_giant_robot", 1 ); + ai ghost(); + ai ent_flag_init( "robot_head_entered" ); + ai ent_flag_init( "kill_trigger_active" ); + level.a_giant_robots[i] = ai; + ai maps\mp\zm_tomb_giant_robot_ffotd::giant_robot_spawn_end(); + wait_network_frame(); + } + + level thread robot_cycling(); +} + +robot_cycling() +{ + three_robot_round = 0; + last_robot = -1; + level thread giant_robot_intro_walk( 1 ); + + level waittill( "giant_robot_intro_complete" ); + + while ( true ) + { + if ( !( level.round_number % 4 ) && three_robot_round != level.round_number ) + flag_set( "three_robot_round" ); + + if ( flag( "ee_all_staffs_placed" ) && !flag( "ee_mech_zombie_hole_opened" ) ) + flag_set( "three_robot_round" ); +/# + if ( isdefined( level.devgui_force_three_robot_round ) && level.devgui_force_three_robot_round ) + flag_set( "three_robot_round" ); +#/ + if ( flag( "three_robot_round" ) ) + { + level.zombie_ai_limit = 22; + random_number = randomint( 3 ); + + if ( random_number == 2 ) + level thread giant_robot_start_walk( 2 ); + else + level thread giant_robot_start_walk( 2, 0 ); + + wait 5; + + if ( random_number == 0 ) + level thread giant_robot_start_walk( 0 ); + else + level thread giant_robot_start_walk( 0, 0 ); + + wait 5; + + if ( random_number == 1 ) + level thread giant_robot_start_walk( 1 ); + else + level thread giant_robot_start_walk( 1, 0 ); + + level waittill( "giant_robot_walk_cycle_complete" ); + + level waittill( "giant_robot_walk_cycle_complete" ); + + level waittill( "giant_robot_walk_cycle_complete" ); + + wait 5; + level.zombie_ai_limit = 24; + three_robot_round = level.round_number; + last_robot = -1; + flag_clear( "three_robot_round" ); + } + else + { + if ( !flag( "activate_zone_nml" ) ) + random_number = randomint( 2 ); + else + { + do + random_number = randomint( 3 ); + while ( random_number == last_robot ); + } +/# + if ( isdefined( level.devgui_force_giant_robot ) ) + random_number = level.devgui_force_giant_robot; +#/ + last_robot = random_number; + level thread giant_robot_start_walk( random_number ); + + level waittill( "giant_robot_walk_cycle_complete" ); + + wait 5; + } + } +} + +giant_robot_intro_walk( n_robot_id ) +{ + ai = getent( "giant_robot_walker_" + n_robot_id, "targetname" ); + ai attach( "veh_t6_dlc_zm_robot_foot_hatch", "TAG_ATTACH_HATCH_LE" ); + ai attach( "veh_t6_dlc_zm_robot_foot_hatch", "TAG_ATTACH_HATCH_RI" ); + ai thread giant_robot_think( ai.trig_stomp_kill_right, ai.trig_stomp_kill_left, ai.clip_foot_right, ai.clip_foot_left, undefined, 3 ); + level thread starting_spawn_light(); + wait 0.5; + level setclientfield( "play_foot_stomp_fx_robot_" + ai.giant_robot_id, 2 ); + level thread giant_robot_intro_exploder(); + a_players = getplayers(); + + foreach ( player in a_players ) + { + player setclientfieldtoplayer( "giant_robot_rumble_and_shake", 3 ); + player thread turn_clientside_rumble_off(); + } + + level waittill( "giant_robot_walk_cycle_complete" ); + + level notify( "giant_robot_intro_complete" ); +} + +giant_robot_intro_exploder() +{ + exploder( 111 ); + wait 3.0; + stop_exploder( 111 ); +} + +giant_robot_start_walk( n_robot_id, b_has_hatch = 1 ) +{ + ai = getent( "giant_robot_walker_" + n_robot_id, "targetname" ); + level.gr_foot_hatch_closed[n_robot_id] = 1; + ai.b_has_hatch = b_has_hatch; + ai ent_flag_clear( "kill_trigger_active" ); + ai ent_flag_clear( "robot_head_entered" ); + + if ( isdefined( ai.b_has_hatch ) && ai.b_has_hatch ) + m_sole = getent( "target_sole_" + n_robot_id, "targetname" ); + + if ( isdefined( m_sole ) && ( isdefined( ai.b_has_hatch ) && ai.b_has_hatch ) ) + { + m_sole setcandamage( 1 ); + m_sole.health = 99999; + m_sole useanimtree( #animtree ); + m_sole unlink(); + } + + wait 10; + + if ( isdefined( m_sole ) ) + { + if ( cointoss() ) + ai.hatch_foot = "left"; + else + ai.hatch_foot = "right"; +/# + if ( isdefined( level.devgui_force_giant_robot_foot ) && ( isdefined( ai.b_has_hatch ) && ai.b_has_hatch ) ) + ai.hatch_foot = level.devgui_force_giant_robot_foot; +#/ + if ( ai.hatch_foot == "left" ) + { + n_sole_origin = ai gettagorigin( "TAG_ATTACH_HATCH_LE" ); + v_sole_angles = ai gettagangles( "TAG_ATTACH_HATCH_LE" ); + ai.hatch_foot = "left"; + str_sole_tag = "TAG_ATTACH_HATCH_LE"; + ai attach( "veh_t6_dlc_zm_robot_foot_hatch", "TAG_ATTACH_HATCH_RI" ); + } + else if ( ai.hatch_foot == "right" ) + { + n_sole_origin = ai gettagorigin( "TAG_ATTACH_HATCH_RI" ); + v_sole_angles = ai gettagangles( "TAG_ATTACH_HATCH_RI" ); + ai.hatch_foot = "right"; + str_sole_tag = "TAG_ATTACH_HATCH_RI"; + ai attach( "veh_t6_dlc_zm_robot_foot_hatch", "TAG_ATTACH_HATCH_LE" ); + } + + m_sole.origin = n_sole_origin; + m_sole.angles = v_sole_angles; + wait 0.1; + m_sole linkto( ai, str_sole_tag, ( 0, 0, 0 ) ); + m_sole show(); + ai attach( "veh_t6_dlc_zm_robot_foot_hatch_lights", str_sole_tag ); + } + + if ( !( isdefined( ai.b_has_hatch ) && ai.b_has_hatch ) ) + { + ai attach( "veh_t6_dlc_zm_robot_foot_hatch", "TAG_ATTACH_HATCH_RI" ); + ai attach( "veh_t6_dlc_zm_robot_foot_hatch", "TAG_ATTACH_HATCH_LE" ); + } + + wait 0.05; + ai thread giant_robot_think( ai.trig_stomp_kill_right, ai.trig_stomp_kill_left, ai.clip_foot_right, ai.clip_foot_left, m_sole, n_robot_id ); +} + +giant_robot_think( trig_stomp_kill_right, trig_stomp_kill_left, clip_foot_right, clip_foot_left, m_sole, n_robot_id ) +{ + self thread robot_walk_animation( n_robot_id ); + self show(); + + if ( isdefined( m_sole ) ) + self thread sole_cleanup( m_sole ); + + self.is_walking = 1; + self thread monitor_footsteps( trig_stomp_kill_right, "right" ); + self thread monitor_footsteps( trig_stomp_kill_left, "left" ); + self thread monitor_footsteps_fx( trig_stomp_kill_right, "right" ); + self thread monitor_footsteps_fx( trig_stomp_kill_left, "left" ); + self thread monitor_shadow_notetracks( "right" ); + self thread monitor_shadow_notetracks( "left" ); + self thread sndgrthreads( "left" ); + self thread sndgrthreads( "right" ); + + if ( isdefined( m_sole ) && level.gr_foot_hatch_closed[n_robot_id] && ( isdefined( self.b_has_hatch ) && self.b_has_hatch ) ) + self thread giant_robot_foot_waittill_sole_shot( m_sole ); + + a_players = getplayers(); + + if ( n_robot_id != 3 && !( isdefined( level.giant_robot_discovered ) && level.giant_robot_discovered ) ) + { + foreach ( player in a_players ) + player thread giant_robot_discovered_vo( self ); + } + else if ( flag( "three_robot_round" ) && !( isdefined( level.three_robot_round_vo ) && level.three_robot_round_vo ) ) + { + foreach ( player in a_players ) + player thread three_robot_round_vo( self ); + } + + if ( n_robot_id != 3 && !( isdefined( level.shoot_robot_vo ) && level.shoot_robot_vo ) ) + { + foreach ( player in a_players ) + player thread shoot_at_giant_robot_vo( self ); + } + + self waittill( "giant_robot_stop" ); + + self.is_walking = 0; + self stopanimscripted(); + sp_giant_robot = getent( "ai_giant_robot_" + self.giant_robot_id, "targetname" ); + self.origin = sp_giant_robot.origin; + level setclientfield( "play_foot_open_fx_robot_" + self.giant_robot_id, 0 ); + self ghost(); + self detachall(); + level notify( "giant_robot_walk_cycle_complete" ); +} + +sole_cleanup( m_sole ) +{ + self endon( "death" ); + self endon( "giant_robot_stop" ); + wait_network_frame(); + m_sole clearanim( %root, 0.0 ); + wait_network_frame(); + m_sole setanim( %ai_zombie_giant_robot_hatch_close, 1, 0.2, 1 ); +} + +giant_robot_foot_waittill_sole_shot( m_sole ) +{ + self endon( "death" ); + self endon( "giant_robot_stop" ); + + if ( isdefined( self.hatch_foot ) && self.hatch_foot == "left" ) + { + str_tag = "TAG_ATTACH_HATCH_LE"; + n_foot = 2; + } + else if ( isdefined( self.hatch_foot ) && self.hatch_foot == "right" ) + { + str_tag = "TAG_ATTACH_HATCH_RI"; + n_foot = 1; + } + + self waittillmatch( "scripted_walk", "kill_zombies_leftfoot_1" ); + + wait 1; + + m_sole waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); + + m_sole.health = 99999; + level.gr_foot_hatch_closed[self.giant_robot_id] = 0; + level setclientfield( "play_foot_open_fx_robot_" + self.giant_robot_id, n_foot ); + m_sole clearanim( %ai_zombie_giant_robot_hatch_close, 1 ); + m_sole setanim( %ai_zombie_giant_robot_hatch_open, 1, 0.2, 1 ); + n_time = getanimlength( %ai_zombie_giant_robot_hatch_open ); + wait( n_time ); + m_sole clearanim( %ai_zombie_giant_robot_hatch_open, 1 ); + m_sole setanim( %ai_zombie_giant_robot_hatch_open_idle, 1, 0.2, 1 ); +} + +giant_robot_close_head_entrance( foot_side ) +{ + wait 5.0; + level.gr_foot_hatch_closed[self.giant_robot_id] = 1; + level setclientfield( "play_foot_open_fx_robot_" + self.giant_robot_id, 0 ); + m_sole = getent( "target_sole_" + self.giant_robot_id, "targetname" ); + + if ( isdefined( m_sole ) ) + { + m_sole clearanim( %ai_zombie_giant_robot_hatch_open, 1 ); + m_sole clearanim( %ai_zombie_giant_robot_hatch_open_idle, 1 ); + m_sole setanim( %ai_zombie_giant_robot_hatch_close, 1, 0.2, 1 ); + } + + if ( isdefined( foot_side ) ) + { + if ( foot_side == "right" ) + str_tag = "TAG_ATTACH_HATCH_RI"; + else if ( foot_side == "left" ) + str_tag = "TAG_ATTACH_HATCH_LE"; + + self detach( "veh_t6_dlc_zm_robot_foot_hatch_lights", str_tag ); + } +} + +robot_walk_animation( n_robot_id ) +{ + if ( n_robot_id != 3 ) + { + level setclientfield( "start_anim_robot_" + n_robot_id, 1 ); + self thread start_footprint_warning_vo( n_robot_id ); + } + + if ( n_robot_id == 0 ) + { + animationid = self getanimfromasd( "zm_robot_walk_nml", 0 ); + str_anim_scripted_name = "zm_robot_walk_nml"; + s_robot_path = getstruct( "anim_align_robot_nml", "targetname" ); + s_robot_path.angles = ( 0, 0, 0 ); + self animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 0 ); + self thread maps\mp\animscripts\zm_shared::donotetracks( "scripted_walk" ); + + self waittillmatch( "scripted_walk", "end" ); + + animationid = self getanimfromasd( "zm_robot_walk_nml", 1 ); + self thread maps\mp\animscripts\zm_shared::donotetracks( "scripted_walk" ); + self animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 1 ); + + self waittillmatch( "scripted_walk", "end" ); + + animationid = self getanimfromasd( "zm_robot_walk_nml", 2 ); + self thread maps\mp\animscripts\zm_shared::donotetracks( "scripted_walk" ); + self animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 2 ); + + self waittillmatch( "scripted_walk", "end" ); + + self notify( "giant_robot_stop" ); + } + else if ( n_robot_id == 1 ) + { + animationid = self getanimfromasd( "zm_robot_walk_trenches", 0 ); + str_anim_scripted_name = "zm_robot_walk_trenches"; + s_robot_path = getstruct( "anim_align_robot_trenches", "targetname" ); + s_robot_path.angles = ( 0, 0, 0 ); + self animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 0 ); + self thread maps\mp\animscripts\zm_shared::donotetracks( "scripted_walk" ); + + self waittillmatch( "scripted_walk", "end" ); + + animationid = self getanimfromasd( "zm_robot_walk_trenches", 1 ); + self thread maps\mp\animscripts\zm_shared::donotetracks( "scripted_walk" ); + self animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 1 ); + + self waittillmatch( "scripted_walk", "end" ); + + animationid = self getanimfromasd( "zm_robot_walk_trenches", 2 ); + self thread maps\mp\animscripts\zm_shared::donotetracks( "scripted_walk" ); + self animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 2 ); + + self waittillmatch( "scripted_walk", "end" ); + + self notify( "giant_robot_stop" ); + } + else if ( n_robot_id == 2 ) + { + animationid = self getanimfromasd( "zm_robot_walk_village", 0 ); + str_anim_scripted_name = "zm_robot_walk_village"; + s_robot_path = getstruct( "anim_align_robot_village", "targetname" ); + s_robot_path.angles = ( 0, 0, 0 ); + self animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 0 ); + self thread maps\mp\animscripts\zm_shared::donotetracks( "scripted_walk" ); + + self waittillmatch( "scripted_walk", "end" ); + + animationid = self getanimfromasd( "zm_robot_walk_village", 1 ); + self thread maps\mp\animscripts\zm_shared::donotetracks( "scripted_walk" ); + self animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 1 ); + + self waittillmatch( "scripted_walk", "end" ); + + animationid = self getanimfromasd( "zm_robot_walk_village", 2 ); + self thread maps\mp\animscripts\zm_shared::donotetracks( "scripted_walk" ); + self animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 2 ); + + self waittillmatch( "scripted_walk", "end" ); + + self notify( "giant_robot_stop" ); + } + else if ( n_robot_id == 3 ) + { + animationid = self getanimfromasd( "zm_robot_walk_intro", 0 ); + str_anim_scripted_name = "zm_robot_walk_intro"; + s_robot_path = getstruct( "anim_align_robot_trenches", "targetname" ); + s_robot_path.angles = ( 0, 0, 0 ); + self animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 0 ); + self thread maps\mp\animscripts\zm_shared::donotetracks( "scripted_walk" ); + + self waittillmatch( "scripted_walk", "end" ); + + self notify( "giant_robot_stop" ); + } + + if ( n_robot_id != 3 ) + level setclientfield( "start_anim_robot_" + n_robot_id, 0 ); +} + +sndgrthreads( side ) +{ + self thread sndrobot( "soundfootstart_" + side, "zmb_robot_leg_move_" + side, side ); + self thread sndrobot( "soundfootwarning_" + side, "zmb_robot_foot_alarm", side ); + self thread sndrobot( "soundfootdown_" + side, "zmb_robot_leg_whoosh", side ); + self thread sndrobot( "soundfootalarm_" + side, "zmb_robot_pre_stomp_a", side ); +} + +sndrobot( notetrack, alias, side ) +{ + self endon( "giant_robot_stop" ); + + if ( side == "right" ) + str_tag = "TAG_ATTACH_HATCH_RI"; + else if ( side == "left" ) + str_tag = "TAG_ATTACH_HATCH_LE"; + + while ( true ) + { + self waittillmatch( "scripted_walk", notetrack ); + + self playsoundontag( alias, str_tag ); + wait 0.1; + } +} + +monitor_footsteps( trig_stomp_kill, foot_side ) +{ + self endon( "death" ); + self endon( "giant_robot_stop" ); + str_start_stomp = "kill_zombies_" + foot_side + "foot_1"; + str_end_stomp = "footstep_" + foot_side + "_large"; + + while ( true ) + { + self waittillmatch( "scripted_walk", str_start_stomp ); + + self thread toggle_kill_trigger_flag( trig_stomp_kill, 1, foot_side ); + + self waittillmatch( "scripted_walk", str_end_stomp ); + + if ( self.giant_robot_id == 0 && foot_side == "left" ) + self thread toggle_wind_bunker_collision(); + else if ( self.giant_robot_id == 1 && foot_side == "left" ) + self thread toggle_tank_bunker_collision(); + + wait 0.5; + self thread toggle_kill_trigger_flag( trig_stomp_kill, 0, foot_side ); + } +} + +monitor_footsteps_fx( trig_stomp_kill, foot_side ) +{ + self endon( "death" ); + self endon( "giant_robot_stop" ); + str_end_stomp = "footstep_" + foot_side + "_large"; + + while ( true ) + { + level setclientfield( "play_foot_stomp_fx_robot_" + self.giant_robot_id, 0 ); + + self waittillmatch( "scripted_walk", str_end_stomp ); + + if ( foot_side == "right" ) + level setclientfield( "play_foot_stomp_fx_robot_" + self.giant_robot_id, 1 ); + else + level setclientfield( "play_foot_stomp_fx_robot_" + self.giant_robot_id, 2 ); + + trig_stomp_kill thread rumble_and_shake( self ); + + if ( self.giant_robot_id == 2 ) + self thread church_ceiling_fxanim( foot_side ); + else if ( self.giant_robot_id == 0 ) + self thread play_pap_shake_fxanim( foot_side ); + + wait_network_frame(); + } +} + +monitor_shadow_notetracks( foot_side ) +{ + self endon( "death" ); + self endon( "giant_robot_stop" ); + + while ( true ) + { + self waittillmatch( "scripted_walk", "shadow_" + foot_side ); + + start_robot_stomp_warning_vo( foot_side ); + } +} + +rumble_and_shake( robot ) +{ + a_players = get_players(); + wait 0.2; + + foreach ( player in a_players ) + { + if ( is_player_valid( player ) ) + { + if ( isdefined( player.in_giant_robot_head ) ) + { + if ( isdefined( player.giant_robot_transition ) && player.giant_robot_transition ) + continue; + + if ( player.in_giant_robot_head == robot.giant_robot_id ) + player setclientfieldtoplayer( "giant_robot_rumble_and_shake", 2 ); + else + continue; + } + else + { + dist = distance( player.origin, self.origin ); + + if ( dist < 1500 ) + { + player setclientfieldtoplayer( "giant_robot_rumble_and_shake", 3 ); + level notify( "sam_clue_giant", player ); + } + else if ( dist < 3000 ) + player setclientfieldtoplayer( "giant_robot_rumble_and_shake", 2 ); + else if ( dist < 6000 ) + player setclientfieldtoplayer( "giant_robot_rumble_and_shake", 1 ); + else + continue; + } + + player thread turn_clientside_rumble_off(); + } + } +} + +toggle_kill_trigger_flag( trig_stomp, b_flag, foot_side = undefined ) +{ + if ( b_flag ) + { + self ent_flag_set( "kill_trigger_active" ); + trig_stomp thread activate_kill_trigger( self, foot_side ); + } + else + { + self ent_flag_clear( "kill_trigger_active" ); + level notify( "stop_kill_trig_think" ); + + if ( self ent_flag( "robot_head_entered" ) ) + { + self ent_flag_clear( "robot_head_entered" ); + self thread giant_robot_close_head_entrance( foot_side ); + level thread giant_robot_head_teleport_timeout( self.giant_robot_id ); + } + } +} + +activate_kill_trigger( robot, foot_side ) +{ + level endon( "stop_kill_trig_think" ); + + if ( foot_side == "left" ) + str_foot_tag = "TAG_ATTACH_HATCH_LE"; + else if ( foot_side == "right" ) + str_foot_tag = "TAG_ATTACH_HATCH_RI"; + + while ( robot ent_flag( "kill_trigger_active" ) ) + { + a_zombies = getaispeciesarray( level.zombie_team, "all" ); + a_zombies_to_kill = []; + + foreach ( zombie in a_zombies ) + { + if ( distancesquared( zombie.origin, self.origin ) < 360000 ) + { + if ( isdefined( zombie.is_giant_robot ) && zombie.is_giant_robot ) + continue; + + if ( isdefined( zombie.marked_for_death ) && zombie.marked_for_death ) + continue; + + if ( isdefined( zombie.robot_stomped ) && zombie.robot_stomped ) + continue; + + if ( zombie istouching( self ) ) + { + if ( isdefined( zombie.is_mechz ) && zombie.is_mechz ) + { + zombie thread maps\mp\zombies\_zm_ai_mechz::mechz_robot_stomp_callback(); + continue; + } + + zombie setgoalpos( zombie.origin ); + zombie.marked_for_death = 1; + a_zombies_to_kill[a_zombies_to_kill.size] = zombie; + continue; + } + + if ( !( isdefined( zombie.is_mechz ) && zombie.is_mechz ) && ( isdefined( zombie.has_legs ) && zombie.has_legs ) && ( isdefined( zombie.completed_emerging_into_playable_area ) && zombie.completed_emerging_into_playable_area ) ) + { + n_my_z = zombie.origin[2]; + v_giant_robot = robot gettagorigin( str_foot_tag ); + n_giant_robot_z = v_giant_robot[2]; + z_diff = abs( n_my_z - n_giant_robot_z ); + + if ( z_diff <= 100 ) + { + zombie.v_punched_from = self.origin; + zombie animcustom( maps\mp\zombies\_zm_weap_one_inch_punch::knockdown_zombie_animate ); + } + } + } + } + + if ( a_zombies_to_kill.size > 0 ) + { + level thread zombie_stomp_death( robot, a_zombies_to_kill ); + robot thread zombie_stomped_by_gr_vo( foot_side ); + } + + if ( isdefined( level.maxis_quadrotor ) ) + { + if ( level.maxis_quadrotor istouching( self ) ) + level.maxis_quadrotor thread quadrotor_stomp_death(); + } + + a_boxes = getentarray( "foot_box", "script_noteworthy" ); + + foreach ( m_box in a_boxes ) + { + if ( m_box istouching( self ) ) + m_box notify( "robot_foot_stomp" ); + } + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( is_player_valid( players[i], 0, 1 ) ) + { + if ( !players[i] istouching( self ) ) + continue; + + if ( players[i] is_in_giant_robot_footstep_safe_spot() ) + continue; + + if ( isdefined( players[i].in_giant_robot_head ) ) + continue; + + if ( isdefined( players[i].is_stomped ) && players[i].is_stomped ) + continue; + + if ( !level.gr_foot_hatch_closed[robot.giant_robot_id] && isdefined( robot.hatch_foot ) && ( isdefined( robot.b_has_hatch ) && robot.b_has_hatch ) && issubstr( self.targetname, robot.hatch_foot ) && !self player_is_in_laststand() ) + { + players[i].ignoreme = 1; + players[i].teleport_initial_origin = self.origin; + + if ( robot.giant_robot_id == 0 ) + { + level thread maps\mp\zm_tomb_teleporter::stargate_teleport_player( "head_0_teleport_player", players[i], 4.0, 0 ); + players[i].in_giant_robot_head = 0; + } + else if ( robot.giant_robot_id == 1 ) + { + level thread maps\mp\zm_tomb_teleporter::stargate_teleport_player( "head_1_teleport_player", players[i], 4.0, 0 ); + players[i].in_giant_robot_head = 1; + + if ( players[i] maps\mp\zombies\_zm_zonemgr::player_in_zone( "zone_bunker_4d" ) || players[i] maps\mp\zombies\_zm_zonemgr::player_in_zone( "zone_bunker_4c" ) ) + players[i].entered_foot_from_tank_bunker = 1; + } + else + { + level thread maps\mp\zm_tomb_teleporter::stargate_teleport_player( "head_2_teleport_player", players[i], 4.0, 0 ); + players[i].in_giant_robot_head = 2; + } + + robot ent_flag_set( "robot_head_entered" ); + players[i] maps\mp\zombies\_zm_stats::increment_client_stat( "tomb_giant_robot_accessed", 0 ); + players[i] maps\mp\zombies\_zm_stats::increment_player_stat( "tomb_giant_robot_accessed" ); + players[i] playsoundtoplayer( "zmb_bot_elevator_ride_up", players[i] ); + start_wait = 0.0; + black_screen_wait = 4.0; + fade_in_time = 0.01; + fade_out_time = 0.2; + players[i] thread fadetoblackforxsec( start_wait, black_screen_wait, fade_in_time, fade_out_time, "white" ); + n_transition_time = start_wait + black_screen_wait + fade_in_time + fade_out_time; + n_start_time = start_wait + fade_in_time; + players[i] thread player_transition_into_robot_head_start( n_start_time ); + players[i] thread player_transition_into_robot_head_finish( n_transition_time ); + players[i] thread player_death_watch_on_giant_robot(); + continue; + } + else + { + if ( isdefined( players[i].dig_vars["has_helmet"] ) && players[i].dig_vars["has_helmet"] ) + players[i] thread player_stomp_fake_death( robot ); + else + players[i] thread player_stomp_death( robot ); + + start_wait = 0.0; + black_screen_wait = 5.0; + fade_in_time = 0.01; + fade_out_time = 0.2; + players[i] thread fadetoblackforxsec( start_wait, black_screen_wait, fade_in_time, fade_out_time, "black", 1 ); + } + } + } + + wait 0.05; + } +} + +is_in_giant_robot_footstep_safe_spot() +{ + b_is_in_safe_spot = 0; + + if ( isdefined( level.giant_robot_footstep_safe_spots ) ) + { + foreach ( e_volume in level.giant_robot_footstep_safe_spots ) + { + if ( self istouching( e_volume ) ) + { + b_is_in_safe_spot = 1; + break; + } + } + } + + return b_is_in_safe_spot; +} + +player_stomp_death( robot ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self.is_stomped = 1; + self playsound( "zmb_zombie_arc" ); + self freezecontrols( 1 ); + + if ( self player_is_in_laststand() ) + self shellshock( "explosion", 7 ); + else + self dodamage( self.health, self.origin, robot ); + + self maps\mp\zombies\_zm_stats::increment_client_stat( "tomb_giant_robot_stomped", 0 ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "tomb_giant_robot_stomped" ); + wait 5.0; + self.is_stomped = 0; + + if ( !( isdefined( self.hostmigrationcontrolsfrozen ) && self.hostmigrationcontrolsfrozen ) ) + self freezecontrols( 0 ); + + self thread play_robot_crush_player_vo(); +} + +player_stomp_fake_death( robot ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self.is_stomped = 1; + self playsound( "zmb_zombie_arc" ); + self freezecontrols( 1 ); + self setstance( "prone" ); + self shellshock( "explosion", 7 ); + wait 5.0; + self.is_stomped = 0; + + if ( !( isdefined( self.hostmigrationcontrolsfrozen ) && self.hostmigrationcontrolsfrozen ) ) + self freezecontrols( 0 ); + + if ( !( isdefined( self.ee_stepped_on ) && self.ee_stepped_on ) ) + { + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "robot_crush_golden" ); + self.ee_stepped_on = 1; + } +} + +zombie_stomp_death( robot, a_zombies_to_kill ) +{ + n_interval = 0; + + for ( i = 0; i < a_zombies_to_kill.size; i++ ) + { + zombie = a_zombies_to_kill[i]; + + if ( !isdefined( zombie ) || !isalive( zombie ) ) + continue; + + zombie dodamage( zombie.health, zombie.origin, robot ); + n_interval++; + + if ( n_interval >= 4 ) + { + wait_network_frame(); + n_interval = 0; + } + } +} + +quadrotor_stomp_death() +{ + self endon( "death" ); + self delete(); +} + +toggle_wind_bunker_collision() +{ + s_org = getstruct( "wind_tunnel_bunker", "script_noteworthy" ); + v_foot = self gettagorigin( "TAG_ATTACH_HATCH_LE" ); + + if ( distance2dsquared( s_org.origin, v_foot ) < 57600 ) + { + level notify( "wind_bunker_collision_on" ); + wait 5.0; + level notify( "wind_bunker_collision_off" ); + } +} + +toggle_tank_bunker_collision() +{ + s_org = getstruct( "tank_bunker", "script_noteworthy" ); + v_foot = self gettagorigin( "TAG_ATTACH_HATCH_LE" ); + + if ( distance2dsquared( s_org.origin, v_foot ) < 57600 ) + { + level notify( "tank_bunker_collision_on" ); + wait 5.0; + level notify( "tank_bunker_collision_off" ); + } +} + +handle_wind_tunnel_bunker_collision() +{ + e_collision = getent( "clip_foot_bottom_wind", "targetname" ); + e_collision notsolid(); + e_collision connectpaths(); + + while ( true ) + { + level waittill( "wind_bunker_collision_on" ); + + wait 0.1; + e_collision solid(); + e_collision disconnectpaths(); + + level waittill( "wind_bunker_collision_off" ); + + e_collision notsolid(); + e_collision connectpaths(); + } +} + +handle_tank_bunker_collision() +{ + e_collision = getent( "clip_foot_bottom_tank", "targetname" ); + e_collision notsolid(); + e_collision connectpaths(); + + while ( true ) + { + level waittill( "tank_bunker_collision_on" ); + + wait 0.1; + e_collision solid(); + e_collision disconnectpaths(); + + level waittill( "tank_bunker_collision_off" ); + + e_collision notsolid(); + e_collision connectpaths(); + } +} + +church_ceiling_fxanim( foot_side ) +{ + if ( foot_side == "left" ) + tag_foot = self gettagorigin( "TAG_ATTACH_HATCH_LE" ); + else + tag_foot = self gettagorigin( "TAG_ATTACH_HATCH_RI" ); + + s_church = getstruct( "giant_robot_church_marker", "targetname" ); + n_distance = distance2dsquared( tag_foot, s_church.origin ); + + if ( n_distance < 1000000 ) + { + level setclientfield( "church_ceiling_fxanim", 1 ); + wait_network_frame(); + level setclientfield( "church_ceiling_fxanim", 0 ); + } +} + +play_pap_shake_fxanim( foot_side ) +{ + if ( foot_side == "left" ) + tag_foot = self gettagorigin( "TAG_ATTACH_HATCH_LE" ); + else + tag_foot = self gettagorigin( "TAG_ATTACH_HATCH_RI" ); + + s_pap = getstruct( "giant_robot_pap_marker", "targetname" ); + wait 0.2; + n_distance = distance2dsquared( tag_foot, s_pap.origin ); + + if ( n_distance < 2250000 ) + { + level setclientfield( "pap_monolith_ring_shake", 1 ); + wait_network_frame(); + level setclientfield( "pap_monolith_ring_shake", 0 ); + } +} + +player_transition_into_robot_head_start( n_start_time ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self.giant_robot_transition = 1; + self.dontspeak = 1; + self setclientfieldtoplayer( "giant_robot_rumble_and_shake", 3 ); + wait 1.5; + self setclientfieldtoplayer( "player_rumble_and_shake", 4 ); +} + +player_transition_into_robot_head_finish( n_transition_time ) +{ + self endon( "death" ); + self endon( "disconnect" ); + wait( n_transition_time ); + self setclientfieldtoplayer( "player_rumble_and_shake", 0 ); + self setclientfieldtoplayer( "giant_robot_rumble_and_shake", 0 ); + self.giant_robot_transition = 0; + wait 2.0; + + if ( !flag( "story_vo_playing" ) ) + { + self.dontspeak = 0; + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "enter_robot" ); + } + + if ( !isdefined( level.sndrobotheadcount ) || level.sndrobotheadcount == 0 ) + { + level.sndrobotheadcount = 4; + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "zone_robot_head" ); + } + else + level.sndrobotheadcount--; +} + +gr_head_exit_trigger_start( s_origin ) +{ + s_origin.unitrigger_stub = spawnstruct(); + s_origin.unitrigger_stub.origin = s_origin.origin; + s_origin.unitrigger_stub.radius = 36; + s_origin.unitrigger_stub.height = 256; + s_origin.unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + s_origin.unitrigger_stub.hint_string = &"ZM_TOMB_EHT"; + s_origin.unitrigger_stub.cursor_hint = "HINT_NOICON"; + s_origin.unitrigger_stub.require_look_at = 1; + s_origin.unitrigger_stub.target = s_origin.target; + s_origin.unitrigger_stub.script_int = s_origin.script_int; + s_origin.unitrigger_stub.is_available = 1; + s_origin.unitrigger_stub.prompt_and_visibility_func = ::gr_head_eject_trigger_visibility; + maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( s_origin.unitrigger_stub, 1 ); + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( s_origin.unitrigger_stub, ::player_exits_giant_robot_head_trigger_think ); +} + +gr_head_eject_trigger_visibility( player ) +{ + b_is_invis = !( isdefined( self.stub.is_available ) && self.stub.is_available ); + self setinvisibletoplayer( player, b_is_invis ); + self sethintstring( self.stub.hint_string ); + return !b_is_invis; +} + +reset_gr_head_unitriggers() +{ + maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::player_exits_giant_robot_head_trigger_think ); +} + +player_exits_giant_robot_head_trigger_think() +{ + self endon( "tube_used_for_timeout" ); + + while ( true ) + { + self waittill( "trigger", player ); + + if ( !( isdefined( self.stub.is_available ) && self.stub.is_available ) ) + continue; + + if ( !isplayer( player ) || !is_player_valid( player ) ) + continue; + + level thread init_player_eject_logic( self.stub, player ); + self.stub.is_available = 0; + } +} + +init_player_eject_logic( s_unitrigger, player, b_timeout = 0 ) +{ + s_unitrigger.is_available = 0; + s_origin = getstruct( s_unitrigger.target, "targetname" ); + v_origin = s_origin.origin; + v_angles = s_origin.angles; + m_linkpoint = spawn_model( "tag_origin", v_origin, v_angles ); + + if ( isdefined( level.giant_robot_head_player_eject_thread_custom_func ) ) + player thread [[ level.giant_robot_head_player_eject_thread_custom_func ]]( m_linkpoint, s_origin.script_noteworthy, b_timeout ); + else + player thread giant_robot_head_player_eject_thread( m_linkpoint, s_origin.script_noteworthy, b_timeout ); + + tube_clone = player maps\mp\zombies\_zm_clone::spawn_player_clone( player, player.origin, undefined ); + player thread giant_robot_eject_disconnect_watcher( m_linkpoint, tube_clone ); + tube_clone linkto( m_linkpoint, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) ); + tube_clone.ignoreme = 1; + tube_clone show(); + tube_clone detachall(); + tube_clone setvisibletoall(); + tube_clone setinvisibletoplayer( player ); + tube_clone maps\mp\zombies\_zm_clone::clone_animate( "idle" ); + tube_clone thread tube_clone_falls_to_earth( m_linkpoint ); + + m_linkpoint waittill( "movedone" ); + + wait 6.0; + s_unitrigger.is_available = 1; +} + +giant_robot_head_player_eject_thread( m_linkpoint, str_tube, b_timeout = 0 ) +{ + self endon( "death_or_disconnect" ); + self maps\mp\zm_tomb_giant_robot_ffotd::giant_robot_head_player_eject_start(); + str_current_weapon = self getcurrentweapon(); + self disableweapons(); + self disableoffhandweapons(); + self enableinvulnerability(); + self setstance( "stand" ); + self allowstand( 1 ); + self allowcrouch( 0 ); + self allowprone( 0 ); + self playerlinktodelta( m_linkpoint, "tag_origin", 1, 20, 20, 20, 20 ); + self setplayerangles( m_linkpoint.angles ); + self ghost(); + self.dontspeak = 1; + self setclientfieldtoplayer( "isspeaking", 1 ); + self notify( "teleport" ); + self.giant_robot_transition = 1; + self playsoundtoplayer( "zmb_bot_timeout_alarm", self ); + self.old_angles = self.angles; + + if ( !b_timeout ) + { + self setclientfield( "eject_steam_fx", 1 ); + self thread in_tube_manual_looping_rumble(); + wait 3.0; + } + + self stopsounds(); + wait_network_frame(); + self playsoundtoplayer( "zmb_giantrobot_exit", self ); + self notify( "end_in_tube_rumble" ); + self thread exit_gr_manual_looping_rumble(); + m_linkpoint moveto( m_linkpoint.origin + vectorscale( ( 0, 0, 1 ), 2000.0 ), 2.5 ); + self thread fadetoblackforxsec( 0, 2.0, 1.0, 0.0, "white" ); + wait 1.0; + m_linkpoint moveto( self.teleport_initial_origin + vectorscale( ( 0, 0, 1 ), 3000.0 ), 0.05 ); + m_linkpoint.angles = vectorscale( ( 1, 0, 0 ), 90.0 ); + self enableweapons(); + self giveweapon( "falling_hands_tomb_zm" ); + self switchtoweaponimmediate( "falling_hands_tomb_zm" ); + self setweaponammoclip( "falling_hands_tomb_zm", 0 ); + wait 1.0; + self playsoundtoplayer( "zmb_giantrobot_fall", self ); + self playerlinktodelta( m_linkpoint, "tag_origin", 1, 180, 180, 20, 20 ); + m_linkpoint moveto( self.teleport_initial_origin, 3, 1.0 ); + m_linkpoint thread play_gr_eject_impact_player_fx( self ); + m_linkpoint notify( "start_gr_eject_fall_to_earth" ); + self thread player_screams_while_falling(); + wait 2.75; + self thread fadetoblackforxsec( 0, 1.0, 0, 0.5, "black" ); + + self waittill( "gr_eject_fall_complete" ); + + self takeweapon( "falling_hands_tomb_zm" ); + + if ( isdefined( str_current_weapon ) && str_current_weapon != "none" ) + self switchtoweaponimmediate( str_current_weapon ); + + self enableoffhandweapons(); + self unlink(); + m_linkpoint delete(); + self teleport_player_to_gr_footprint_safe_spot(); + self show(); + self setplayerangles( self.old_angles ); + self disableinvulnerability(); + self.dontspeak = 0; + self allowstand( 1 ); + self allowcrouch( 1 ); + self allowprone( 1 ); + self setclientfieldtoplayer( "isspeaking", 0 ); + self.in_giant_robot_head = undefined; + self.teleport_initial_origin = undefined; + self.old_angles = undefined; + self thread gr_eject_landing_rumble(); + self thread gr_eject_landing_rumble_on_position(); + self setclientfield( "eject_steam_fx", 0 ); + n_post_eject_time = 2.5; + self setstance( "prone" ); + self shellshock( "explosion", n_post_eject_time ); + self.giant_robot_transition = 0; + self notify( "gr_eject_sequence_complete" ); + + if ( !flag( "story_vo_playing" ) ) + self delay_thread( 3.0, maps\mp\zombies\_zm_audio::create_and_play_dialog, "general", "air_chute_landing" ); +/# + debug_level = getdvarint( _hash_FA81816F ); + + if ( isdefined( debug_level ) && debug_level ) + self enableinvulnerability(); +#/ + wait( n_post_eject_time ); + self.ignoreme = 0; + self maps\mp\zm_tomb_giant_robot_ffotd::giant_robot_head_player_eject_end(); +} + +player_screams_while_falling() +{ + self endon( "disconnect" ); + self stopsounds(); + wait_network_frame(); + self playsoundtoplayer( "vox_plr_" + self.characterindex + "_exit_robot_0", self ); +} + +tube_clone_falls_to_earth( m_linkpoint ) +{ + m_linkpoint waittill( "start_gr_eject_fall_to_earth" ); + + self maps\mp\zombies\_zm_clone::clone_animate( "falling" ); + + m_linkpoint waittill( "movedone" ); + + self delete(); +} + +in_tube_manual_looping_rumble() +{ + self endon( "end_in_tube_rumble" ); + self endon( "death" ); + self endon( "disconnect" ); + + while ( true ) + { + self setclientfieldtoplayer( "giant_robot_rumble_and_shake", 1 ); + wait_network_frame(); + self setclientfieldtoplayer( "giant_robot_rumble_and_shake", 0 ); + wait_network_frame(); + wait 0.1; + } +} + +exit_gr_manual_looping_rumble() +{ + self endon( "end_exit_gr_rumble" ); + self endon( "death" ); + self endon( "disconnect" ); + + while ( true ) + { + self setclientfieldtoplayer( "giant_robot_rumble_and_shake", 1 ); + wait_network_frame(); + self setclientfieldtoplayer( "giant_robot_rumble_and_shake", 0 ); + wait_network_frame(); + wait 0.1; + } +} + +gr_eject_landing_rumble() +{ + self endon( "death" ); + self endon( "disconnect" ); + self notify( "end_exit_gr_rumble" ); + wait_network_frame(); + self setclientfieldtoplayer( "giant_robot_rumble_and_shake", 0 ); + wait_network_frame(); + self setclientfieldtoplayer( "giant_robot_rumble_and_shake", 3 ); + wait_network_frame(); + self setclientfieldtoplayer( "giant_robot_rumble_and_shake", 0 ); +} + +gr_eject_landing_rumble_on_position() +{ + self endon( "death" ); + self endon( "disconnect" ); + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( player == self ) + continue; + + if ( isdefined( player.giant_robot_transition ) && player.giant_robot_transition ) + continue; + + if ( distance2dsquared( player.origin, self.origin ) < 250000 ) + player thread gr_eject_landing_rumble(); + } +} + +teleport_player_to_gr_footprint_safe_spot() +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( isdefined( self.entered_foot_from_tank_bunker ) && self.entered_foot_from_tank_bunker ) + { + a_s_orgs = getstructarray( "tank_platform_safe_spots", "targetname" ); + + foreach ( struct in a_s_orgs ) + { + if ( !positionwouldtelefrag( struct.origin ) ) + { + self setorigin( struct.origin ); + break; + } + } + + self.entered_foot_from_tank_bunker = 0; + return; + } + + a_s_footprints = getstructarray( "giant_robot_footprint", "targetname" ); + a_s_footprints = get_array_of_closest( self.teleport_initial_origin, a_s_footprints ); + s_footprint = a_s_footprints[0]; + a_v_offset = []; + a_v_offset[0] = ( 0, 0, 0 ); + a_v_offset[1] = vectorscale( ( 1, 1, 0 ), 50.0 ); + a_v_offset[2] = vectorscale( ( 1, 0, 0 ), 50.0 ); + a_v_offset[3] = vectorscale( ( 1, -1, 0 ), 50.0 ); + a_v_offset[4] = vectorscale( ( 0, -1, 0 ), 50.0 ); + a_v_offset[5] = vectorscale( ( -1, -1, 0 ), 50.0 ); + a_v_offset[6] = vectorscale( ( -1, 0, 0 ), 50.0 ); + a_v_offset[7] = vectorscale( ( -1, 1, 0 ), 50.0 ); + a_v_offset[8] = vectorscale( ( 0, 1, 0 ), 50.0 ); + + for ( i = 0; i < a_v_offset.size; i++ ) + { + v_origin = s_footprint.origin + a_v_offset[i]; + v_trace_start = v_origin + vectorscale( ( 0, 0, 1 ), 100.0 ); + v_final = playerphysicstrace( v_trace_start, v_origin ); + + if ( !positionwouldtelefrag( v_final ) ) + { + self setorigin( v_final ); + break; + } + } +} + +giant_robot_head_teleport_timeout( n_robot_id ) +{ + wait 15; + n_players_in_robot = count_players_in_gr_head( n_robot_id ); + + if ( n_players_in_robot == 0 ) + return; + + while ( flag( "maxis_audiolog_gr" + n_robot_id + "_playing" ) ) + wait 0.1; + + n_players_in_robot = count_players_in_gr_head( n_robot_id ); + + if ( n_players_in_robot == 0 ) + return; + + level thread play_timeout_warning_vo( n_robot_id ); + maps\mp\zm_tomb_vo::reset_maxis_audiolog_unitrigger( n_robot_id ); + level setclientfield( "eject_warning_fx_robot_" + n_robot_id, 1 ); + a_players = getplayers(); + a_players[0] setclientfield( "all_tubes_play_eject_steam_fx", 1 ); + + level waittill( "timeout_warning_vo_complete_" + n_robot_id ); + + a_gr_head_triggers = getstructarray( "giant_robot_head_exit_trigger", "script_noteworthy" ); + a_shutdown_triggers = []; + + foreach ( trigger in a_gr_head_triggers ) + { + if ( trigger.script_int == n_robot_id ) + { + if ( isdefined( trigger.unitrigger_stub.is_available ) && trigger.unitrigger_stub.is_available ) + { + maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( trigger.unitrigger_stub ); + a_shutdown_triggers[a_shutdown_triggers.size] = trigger; + } + } + } + + a_players = getplayers(); + a_m_linkspots = []; + + foreach ( player in a_players ) + { + if ( isdefined( player.in_giant_robot_head ) && player.in_giant_robot_head == n_robot_id ) + { + if ( !( isdefined( player.giant_robot_transition ) && player.giant_robot_transition ) ) + { + if ( player player_is_in_laststand() ) + { + if ( isdefined( player.waiting_to_revive ) && player.waiting_to_revive && a_players.size <= 1 ) + { + flag_set( "instant_revive" ); + player.stopflashingbadlytime = gettime() + 1000; + wait_network_frame(); + flag_clear( "instant_revive" ); + } + else + { + player thread maps\mp\zombies\_zm_laststand::bleed_out(); + player notify( "gr_head_forced_bleed_out" ); + continue; + } + } + + if ( isalive( player ) ) + { + m_linkspot = spawn_model( "tag_origin", player.origin, player.angles ); + a_m_linkspots[a_m_linkspots.size] = m_linkspot; + player start_drag_player_to_eject_tube( n_robot_id, m_linkspot ); + wait 0.1; + } + } + } + } + + wait 10.0; + maps\mp\zm_tomb_vo::restart_maxis_audiolog_unitrigger( n_robot_id ); + level setclientfield( "eject_warning_fx_robot_" + n_robot_id, 0 ); + a_players = getplayers(); + a_players[0] setclientfield( "all_tubes_play_eject_steam_fx", 0 ); + + foreach ( trigger in a_shutdown_triggers ) + { + if ( trigger.script_int == n_robot_id ) + trigger thread reset_gr_head_unitriggers(); + } + + if ( a_m_linkspots.size > 0 ) + { + for ( i = 0; i < a_m_linkspots.size; i++ ) + { + if ( isdefined( a_m_linkspots[i] ) ) + a_m_linkspots[i] delete(); + } + } +} + +start_drag_player_to_eject_tube( n_robot_id, m_linkspot ) +{ + self endon( "death" ); + self endon( "disconnect" ); + a_gr_head_triggers = getstructarray( "giant_robot_head_exit_trigger", "script_noteworthy" ); + a_gr_head_triggers = get_array_of_closest( self.origin, a_gr_head_triggers ); + + foreach ( trigger in a_gr_head_triggers ) + { + if ( trigger.unitrigger_stub.script_int == n_robot_id ) + { + if ( isdefined( trigger.unitrigger_stub.is_available ) && trigger.unitrigger_stub.is_available ) + { + self thread in_tube_manual_looping_rumble(); + trigger.unitrigger_stub.is_available = 0; + s_tube = getstruct( trigger.target, "targetname" ); + self playerlinktodelta( m_linkspot, "tag_origin", 1, 20, 20, 20, 20 ); + self thread move_player_to_eject_tube( m_linkspot, s_tube, trigger ); + break; + } + } + } +} + +move_player_to_eject_tube( m_linkspot, s_tube, trigger ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self.giant_robot_transition = 1; + n_speed = 500; + n_dist = distance( m_linkspot.origin, s_tube.origin ); + n_time = n_dist / n_speed; + m_linkspot moveto( s_tube.origin, n_time ); + + m_linkspot waittill( "movedone" ); + + m_linkspot delete(); + level thread init_player_eject_logic( trigger.unitrigger_stub, self, 1 ); +} + +sndalarmtimeout() +{ + self endon( "teleport" ); + self endon( "disconnect" ); + self playsoundtoplayer( "zmb_bot_timeout_alarm", self ); + wait 2.5; + self playsoundtoplayer( "zmb_bot_timeout_alarm", self ); +} + +play_gr_eject_impact_player_fx( player ) +{ + player endon( "death" ); + player endon( "disconnect" ); + + self waittill( "movedone" ); + + player setclientfield( "gr_eject_player_impact_fx", 1 ); + wait_network_frame(); + player notify( "gr_eject_fall_complete" ); + wait 1.0; + player setclientfield( "gr_eject_player_impact_fx", 0 ); +} + +player_death_watch_on_giant_robot() +{ + self endon( "disconnect" ); + self endon( "gr_eject_sequence_complete" ); + self waittill_either( "bled_out", "gr_head_forced_bleed_out" ); + self.entered_foot_from_tank_bunker = undefined; + self.giant_robot_transition = undefined; + self.in_giant_robot_head = undefined; + self.ignoreme = 0; + self.dontspeak = 0; +} + +giant_robot_eject_disconnect_watcher( m_linkpoint, tube_clone ) +{ + self endon( "gr_eject_sequence_complete" ); + + self waittill( "disconnect" ); + + if ( isdefined( m_linkpoint ) ) + m_linkpoint delete(); + + if ( isdefined( tube_clone ) ) + tube_clone delete(); +} + +turn_clientside_rumble_off() +{ + self endon( "death" ); + self endon( "disconnect" ); + wait_network_frame(); + self setclientfieldtoplayer( "giant_robot_rumble_and_shake", 0 ); +} + +spawn_model( model_name, origin = ( 0, 0, 0 ), angles, n_spawnflags = 0 ) +{ + model = spawn( "script_model", origin, n_spawnflags ); + model setmodel( model_name ); + + if ( isdefined( angles ) ) + model.angles = angles; + + return model; +} + +count_players_in_gr_head( n_robot_id ) +{ + n_players_in_robot = 0; + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( isdefined( player.in_giant_robot_head ) && player.in_giant_robot_head == n_robot_id ) + n_players_in_robot++; + } + + return n_players_in_robot; +} + +tomb_standard_intermission() +{ + self closemenu(); + self closeingamemenu(); + level endon( "stop_intermission" ); + self endon( "disconnect" ); + self endon( "death" ); + self notify( "_zombie_game_over" ); + level thread setup_giant_robots_intermission(); + self.score = self.score_total; + self.sessionstate = "intermission"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + points = getstructarray( "intermission", "targetname" ); + + if ( !isdefined( points ) || points.size == 0 ) + { + points = getentarray( "info_intermission", "classname" ); + + if ( points.size < 1 ) + { +/# + println( "NO info_intermission POINTS IN MAP" ); +#/ + return; + } + } + + self.game_over_bg = newclienthudelem( self ); + self.game_over_bg.horzalign = "fullscreen"; + self.game_over_bg.vertalign = "fullscreen"; + self.game_over_bg setshader( "black", 640, 480 ); + self.game_over_bg.alpha = 1; + org = undefined; + + while ( true ) + { + points = array_randomize( points ); + + for ( i = 0; i < points.size; i++ ) + { + point = points[i]; + + if ( !isdefined( org ) ) + self spawn( point.origin, point.angles ); + + if ( isdefined( points[i].target ) ) + { + if ( !isdefined( org ) ) + { + org = spawn( "script_model", self.origin + vectorscale( ( 0, 0, -1 ), 60.0 ) ); + org setmodel( "tag_origin" ); + } + + org.origin = points[i].origin; + org.angles = points[i].angles; + + for ( j = 0; j < get_players().size; j++ ) + { + player = get_players()[j]; + player camerasetposition( org ); + player camerasetlookat(); + player cameraactivate( 1 ); + } + + speed = 20; + + if ( isdefined( points[i].speed ) ) + speed = points[i].speed; + + target_point = getstruct( points[i].target, "targetname" ); + dist = distance( points[i].origin, target_point.origin ); + time = dist / speed; + q_time = time * 0.25; + + if ( q_time > 1 ) + q_time = 1; + + self.game_over_bg fadeovertime( q_time ); + self.game_over_bg.alpha = 0; + org moveto( target_point.origin, time, q_time, q_time ); + org rotateto( target_point.angles, time, q_time, q_time ); + wait( time - q_time ); + self.game_over_bg fadeovertime( q_time ); + self.game_over_bg.alpha = 1; + wait( q_time ); + continue; + } + + self.game_over_bg fadeovertime( 1 ); + self.game_over_bg.alpha = 0; + wait 5; + self.game_over_bg thread maps\mp\zombies\_zm::fade_up_over_time( 1 ); + } + } +} + +setup_giant_robots_intermission() +{ + for ( i = 0; i < 3; i++ ) + { + ai_giant_robot = getent( "giant_robot_walker_" + i, "targetname" ); + + if ( !isdefined( ai_giant_robot ) ) + continue; + + ai_giant_robot ghost(); + ai_giant_robot stopanimscripted( 0.05 ); + ai_giant_robot notify( "giant_robot_stop" ); + + if ( i == 2 ) + { + wait_network_frame(); + ai_giant_robot show(); + str_anim_scripted_name = "zm_robot_walk_village"; + s_robot_path = getstruct( "anim_align_robot_village", "targetname" ); + s_robot_path.angles = ( 0, 0, 0 ); + animationid = ai_giant_robot getanimfromasd( "zm_robot_walk_village", 1 ); + ai_giant_robot thread maps\mp\animscripts\zm_shared::donotetracks( "scripted_walk" ); + ai_giant_robot animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 1 ); + } + } +} + +giant_robot_discovered_vo( ai_giant_robot ) +{ + ai_giant_robot endon( "giant_robot_stop" ); + self endon( "disconnect" ); + level endon( "giant_robot_discovered" ); + + while ( true ) + { + if ( distance2dsquared( self.origin, ai_giant_robot.origin ) < 16000000 ) + { + if ( self is_player_looking_at( ai_giant_robot.origin + vectorscale( ( 0, 0, 1 ), 2000.0 ), 0.85 ) ) + { + if ( !( isdefined( self.dontspeak ) && self.dontspeak ) ) + { + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "discover_robot" ); + level.giant_robot_discovered = 1; + level notify( "giant_robot_discovered" ); + break; + } + } + } + + wait 0.1; + } +} + +three_robot_round_vo( ai_giant_robot ) +{ + ai_giant_robot endon( "giant_robot_stop" ); + self endon( "disconnect" ); + level endon( "three_robot_round_vo" ); + + while ( true ) + { + if ( distance2dsquared( self.origin, ai_giant_robot.origin ) < 16000000 ) + { + if ( self is_player_looking_at( ai_giant_robot.origin + vectorscale( ( 0, 0, 1 ), 2000.0 ), 0.85 ) ) + { + if ( !( isdefined( self.dontspeak ) && self.dontspeak ) ) + { + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "see_robots" ); + level.three_robot_round_vo = 1; + level notify( "three_robot_round_vo" ); + break; + } + } + } + + wait 0.1; + } +} + +shoot_at_giant_robot_vo( ai_giant_robot ) +{ + ai_giant_robot endon( "giant_robot_stop" ); + self endon( "disconnect" ); + level endon( "shoot_robot_vo" ); + + while ( true ) + { + while ( distance2dsquared( self.origin, ai_giant_robot.origin ) < 16000000 && self is_player_looking_at( ai_giant_robot.origin + vectorscale( ( 0, 0, 1 ), 2000.0 ), 0.7 ) ) + { + self waittill( "weapon_fired" ); + + if ( distance2dsquared( self.origin, ai_giant_robot.origin ) < 16000000 && self is_player_looking_at( ai_giant_robot.origin + vectorscale( ( 0, 0, 1 ), 2000.0 ), 0.7 ) ) + { + if ( !( isdefined( self.dontspeak ) && self.dontspeak ) ) + { + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "shoot_robot" ); + level.shoot_robot_vo = 1; + level notify( "shoot_robot_vo" ); + return; + } + } + } + + wait 0.1; + } +} + +start_robot_stomp_warning_vo( foot_side ) +{ + if ( foot_side == "right" ) + str_tag = "TAG_ATTACH_HATCH_RI"; + else if ( foot_side == "left" ) + str_tag = "TAG_ATTACH_HATCH_LE"; + + v_origin = self gettagorigin( str_tag ); + a_s_footprint_all = getstructarray( "giant_robot_footprint_center", "targetname" ); + a_s_footprint = []; + + foreach ( footprint in a_s_footprint_all ) + { + if ( footprint.script_int == self.giant_robot_id ) + a_s_footprint[a_s_footprint.size] = footprint; + } + + if ( a_s_footprint.size == 0 ) + return; + else + { + a_s_footprint = get_array_of_closest( v_origin, a_s_footprint ); + s_footprint = a_s_footprint[0]; + } + + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( distance2dsquared( player.origin, s_footprint.origin ) < 160000 ) + player thread play_robot_stomp_warning_vo(); + } +} + +play_robot_stomp_warning_vo() +{ + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( player == self ) + continue; + + if ( distance2dsquared( self.origin, player.origin ) < 640000 ) + { + if ( player is_player_looking_at( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ) ) ) + { + if ( !( isdefined( player.dontspeak ) && player.dontspeak ) ) + { + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "warn_robot_foot" ); + break; + } + } + } + } +} + +zombie_stomped_by_gr_vo( foot_side ) +{ + self endon( "giant_robot_stop" ); + + if ( foot_side == "right" ) + str_tag = "TAG_ATTACH_HATCH_RI"; + else if ( foot_side == "left" ) + str_tag = "TAG_ATTACH_HATCH_LE"; + + v_origin = self gettagorigin( str_tag ); + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( distancesquared( v_origin, player.origin ) < 640000 ) + { + if ( player is_player_looking_at( v_origin, 0.25 ) ) + { + if ( !( isdefined( player.dontspeak ) && player.dontspeak ) ) + { + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "robot_crush_zombie" ); + return; + } + } + } + } +} + +play_robot_crush_player_vo() +{ + self endon( "disconnect" ); + + if ( self player_is_in_laststand() ) + { + if ( cointoss() ) + n_alt = 1; + else + n_alt = 0; + + self playsoundwithnotify( "vox_plr_" + self.characterindex + "_robot_crush_player_" + n_alt, "sound_done" + "vox_plr_" + self.characterindex + "_robot_crush_player_" + n_alt ); + } +} + +play_timeout_warning_vo( n_robot_id ) +{ + flag_set( "timeout_vo_robot_" + n_robot_id ); + s_origin = getstruct( "eject_warning_fx_robot_" + n_robot_id, "targetname" ); + e_vo_origin = spawn_model( "tag_origin", s_origin.origin ); + e_vo_origin playsoundwithnotify( "vox_maxi_purge_robot_0", "vox_maxi_purge_robot_0_done" ); + + e_vo_origin waittill( "vox_maxi_purge_robot_0_done" ); + + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( isdefined( player.in_giant_robot_head ) && player.in_giant_robot_head == n_robot_id ) + { + if ( !( isdefined( player.giant_robot_transition ) && player.giant_robot_transition ) ) + { + if ( !( isdefined( player.dontspeak ) && player.dontspeak ) ) + { + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "purge_robot" ); + break; + } + } + } + } + + while ( isdefined( player ) && ( isdefined( player.isspeaking ) && player.isspeaking ) ) + wait 0.1; + + wait 1.0; + e_vo_origin playsoundwithnotify( "vox_maxi_purge_countdown_0", "vox_maxi_purge_countdown_0_done" ); + + e_vo_origin waittill( "vox_maxi_purge_countdown_0_done" ); + + wait 1.0; + level notify( "timeout_warning_vo_complete_" + n_robot_id ); + e_vo_origin playsoundwithnotify( "vox_maxi_purge_now_0", "vox_maxi_purge_now_0_done" ); + + e_vo_origin waittill( "vox_maxi_purge_now_0_done" ); + + e_vo_origin delete(); + flag_clear( "timeout_vo_robot_" + n_robot_id ); +} + +start_footprint_warning_vo( n_robot_id ) +{ + wait 20.0; + a_structs = getstructarray( "giant_robot_footprint_center", "targetname" ); + + foreach ( struct in a_structs ) + { + if ( struct.script_int == n_robot_id ) + struct thread footprint_check_for_nearby_players( self ); + } +} + +footprint_check_for_nearby_players( ai_giant_robot ) +{ + level endon( "footprint_warning_vo" ); + ai_giant_robot endon( "giant_robot_stop" ); + + while ( true ) + { + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( distance2dsquared( player.origin, self.origin ) < 90000 ) + { + if ( distance2dsquared( player.origin, ai_giant_robot.origin ) < 16000000 ) + { + if ( player.origin[0] > ai_giant_robot.origin[0] ) + { + if ( !( isdefined( player.dontspeak ) && player.dontspeak ) ) + { + player do_player_general_vox( "general", "warn_robot" ); + level.footprint_warning_vo = 1; + level notify( "footprint_warning_vo" ); + return; + } + } + } + } + } + + wait 1.0; + } +} + +setup_giant_robot_devgui() +{ +/# + setdvar( "force_giant_robot_0", "off" ); + setdvar( "force_giant_robot_1", "off" ); + setdvar( "force_giant_robot_2", "off" ); + setdvar( "force_three_robot_round", "off" ); + setdvar( "force_left_foot", "off" ); + setdvar( "force_right_foot", "off" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Giant Robot:1/Force Robot 0 (NML):1\" \"force_giant_robot_0 on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Giant Robot:1/Force Robot 1 (Trench):2\" \"force_giant_robot_1 on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Giant Robot:1/Force Robot 2 (Village):3\" \"force_giant_robot_2 on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Giant Robot:1/Force Three Robot Round:4\" \"force_three_robot_round on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Giant Robot:1/Force Left Foot:5\" \"force_left_foot on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Giant Robot:1/Force Right Foot:6\" \"force_right_foot on\"\n" ); + level thread watch_for_force_giant_robot(); +#/ +} + +watch_for_force_giant_robot() +{ +/# + while ( true ) + { + if ( getdvar( _hash_79D9A3FA ) == "on" ) + { + setdvar( "force_giant_robot_0", "off" ); + + if ( isdefined( level.devgui_force_giant_robot ) && level.devgui_force_giant_robot == 0 ) + { + level.devgui_force_giant_robot = undefined; + iprintlnbold( "Force Giant Robot off" ); + } + else + { + level.devgui_force_giant_robot = 0; + iprintlnbold( "Force Giant Robot 0 (NML)" ); + } + } + + if ( getdvar( _hash_79D9A3FB ) == "on" ) + { + setdvar( "force_giant_robot_1", "off" ); + + if ( isdefined( level.devgui_force_giant_robot ) && level.devgui_force_giant_robot == 1 ) + { + level.devgui_force_giant_robot = undefined; + iprintlnbold( "Force Giant Robot off" ); + } + else + { + level.devgui_force_giant_robot = 1; + iprintlnbold( "Force Giant Robot 1 (Trench)" ); + } + } + + if ( getdvar( _hash_79D9A3FC ) == "on" ) + { + setdvar( "force_giant_robot_2", "off" ); + + if ( isdefined( level.devgui_force_giant_robot ) && level.devgui_force_giant_robot == 2 ) + { + level.devgui_force_giant_robot = undefined; + iprintlnbold( "Force Giant Robot off" ); + } + else + { + level.devgui_force_giant_robot = 2; + iprintlnbold( "Force Giant Robot 2 (Village)" ); + } + } + + if ( getdvar( _hash_DF4E4957 ) == "on" ) + { + setdvar( "force_three_robot_round", "off" ); + + if ( isdefined( level.devgui_force_three_robot_round ) && level.devgui_force_three_robot_round ) + { + level.devgui_force_three_robot_round = undefined; + iprintlnbold( "Force Three Robot Round off" ); + } + else + { + level.devgui_force_three_robot_round = 1; + iprintlnbold( "Force Three Robot Round" ); + } + } + + if ( getdvar( _hash_D816D475 ) == "on" ) + { + setdvar( "force_left_foot", "off" ); + + if ( isdefined( level.devgui_force_giant_robot_foot ) && level.devgui_force_giant_robot_foot == "left" ) + { + level.devgui_force_giant_robot_foot = undefined; + iprintlnbold( "Force Giant Robot Foot Off" ); + } + else + { + level.devgui_force_giant_robot_foot = "left"; + iprintlnbold( "Force Giant Robot Hatch on Left Foot" ); + } + } + + if ( getdvar( _hash_462243C8 ) == "on" ) + { + setdvar( "force_right_foot", "off" ); + + if ( isdefined( level.devgui_force_giant_robot_foot ) && level.devgui_force_giant_robot_foot == "right" ) + { + level.devgui_force_giant_robot_foot = undefined; + iprintlnbold( "Force Giant Robot Foot Off" ); + } + else + { + level.devgui_force_giant_robot_foot = "right"; + iprintlnbold( "Force Giant Robot Hatch on Right Foot" ); + } + } + + wait 0.05; + } +#/ +} + +starting_spawn_light() +{ + light = getent( "start_bunker_footprint_light", "targetname" ); + + if ( !isdefined( light ) ) + return; + + light setlightintensity( 0 ); + wait 5.4; + + for ( i = 8; i <= 16; i += 8 ) + { + light setlightintensity( i ); + wait 0.1; + } +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_giant_robot_ffotd.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_giant_robot_ffotd.gsc new file mode 100644 index 0000000..5e260ec --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_giant_robot_ffotd.gsc @@ -0,0 +1,45 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; + +init_giant_robot_start() +{ + +} + +init_giant_robot_end() +{ + +} + +init_giant_robot_glows_start() +{ + +} + +init_giant_robot_glows_end() +{ + +} + +giant_robot_spawn_start() +{ + +} + +giant_robot_spawn_end() +{ + +} + +giant_robot_head_player_eject_start() +{ + +} + +giant_robot_head_player_eject_end() +{ + +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_main_quest.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_main_quest.gsc new file mode 100644 index 0000000..6796534 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_main_quest.gsc @@ -0,0 +1,1288 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zm_tomb_quest_air; +#include maps\mp\zm_tomb_quest_fire; +#include maps\mp\zm_tomb_quest_ice; +#include maps\mp\zm_tomb_quest_elec; +#include maps\mp\zm_tomb_quest_crypt; +#include maps\mp\zm_tomb_chamber; +#include maps\mp\zm_tomb_vo; +#include maps\mp\zm_tomb_teleporter; +#include maps\mp\zombies\_zm_blockers; +#include maps\mp\zm_tomb_craftables; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_challenges; +#include maps\mp\zm_tomb_ee_main_step_7; +#include maps\mp\zm_tomb_challenges; +#include maps\mp\zm_tomb_amb; +#include maps\mp\zombies\_zm_audio; + +main_quest_init() +{ + flag_init( "dug" ); + flag_init( "air_open" ); + flag_init( "fire_open" ); + flag_init( "lightning_open" ); + flag_init( "ice_open" ); + flag_init( "panels_solved" ); + flag_init( "fire_solved" ); + flag_init( "ice_solved" ); + flag_init( "chamber_puzzle_cheat" ); + flag_init( "activate_zone_crypt" ); + level.callbackvehicledamage = ::aircrystalbiplanecallback_vehicledamage; + level.game_mode_custom_onplayerdisconnect = ::player_disconnect_callback; + onplayerconnect_callback( ::onplayerconnect ); + staff_air = getent( "prop_staff_air", "targetname" ); + staff_fire = getent( "prop_staff_fire", "targetname" ); + staff_lightning = getent( "prop_staff_lightning", "targetname" ); + staff_water = getent( "prop_staff_water", "targetname" ); + staff_air.weapname = "staff_air_zm"; + staff_fire.weapname = "staff_fire_zm"; + staff_lightning.weapname = "staff_lightning_zm"; + staff_water.weapname = "staff_water_zm"; + staff_air.element = "air"; + staff_fire.element = "fire"; + staff_lightning.element = "lightning"; + staff_water.element = "water"; + staff_air.craftable_name = "elemental_staff_air"; + staff_fire.craftable_name = "elemental_staff_fire"; + staff_lightning.craftable_name = "elemental_staff_lightning"; + staff_water.craftable_name = "elemental_staff_water"; + staff_air.charger = getstruct( "staff_air_charger", "script_noteworthy" ); + staff_fire.charger = getstruct( "staff_fire_charger", "script_noteworthy" ); + staff_lightning.charger = getstruct( "zone_bolt_chamber", "script_noteworthy" ); + staff_water.charger = getstruct( "staff_ice_charger", "script_noteworthy" ); + staff_fire.quest_clientfield = "quest_state1"; + staff_air.quest_clientfield = "quest_state2"; + staff_lightning.quest_clientfield = "quest_state3"; + staff_water.quest_clientfield = "quest_state4"; + staff_fire.enum = 1; + staff_air.enum = 2; + staff_lightning.enum = 3; + staff_water.enum = 4; + level.a_elemental_staffs = []; + level.a_elemental_staffs[level.a_elemental_staffs.size] = staff_air; + level.a_elemental_staffs[level.a_elemental_staffs.size] = staff_fire; + level.a_elemental_staffs[level.a_elemental_staffs.size] = staff_lightning; + level.a_elemental_staffs[level.a_elemental_staffs.size] = staff_water; + + foreach ( staff in level.a_elemental_staffs ) + { + staff.charger.charges_received = 0; + staff.charger.is_inserted = 0; + staff thread place_staffs_encasement(); + staff thread staff_charger_check(); + staff ghost(); + } + + staff_air_upgraded = getent( "prop_staff_air_upgraded", "targetname" ); + staff_fire_upgraded = getent( "prop_staff_fire_upgraded", "targetname" ); + staff_lightning_upgraded = getent( "prop_staff_lightning_upgraded", "targetname" ); + staff_water_upgraded = getent( "prop_staff_water_upgraded", "targetname" ); + staff_air_upgraded.weapname = "staff_air_upgraded_zm"; + staff_fire_upgraded.weapname = "staff_fire_upgraded_zm"; + staff_lightning_upgraded.weapname = "staff_lightning_upgraded_zm"; + staff_water_upgraded.weapname = "staff_water_upgraded_zm"; + staff_air_upgraded.melee = "staff_air_melee_zm"; + staff_fire_upgraded.melee = "staff_fire_melee_zm"; + staff_lightning_upgraded.melee = "staff_lightning_melee_zm"; + staff_water_upgraded.melee = "staff_water_melee_zm"; + staff_air_upgraded.base_weapname = "staff_air_zm"; + staff_fire_upgraded.base_weapname = "staff_fire_zm"; + staff_lightning_upgraded.base_weapname = "staff_lightning_zm"; + staff_water_upgraded.base_weapname = "staff_water_zm"; + staff_air_upgraded.element = "air"; + staff_fire_upgraded.element = "fire"; + staff_lightning_upgraded.element = "lightning"; + staff_water_upgraded.element = "water"; + staff_air_upgraded.charger = staff_air.charger; + staff_fire_upgraded.charger = staff_fire.charger; + staff_lightning_upgraded.charger = staff_lightning.charger; + staff_water_upgraded.charger = staff_water.charger; + staff_fire_upgraded.enum = 1; + staff_air_upgraded.enum = 2; + staff_lightning_upgraded.enum = 3; + staff_water_upgraded.enum = 4; + staff_air.upgrade = staff_air_upgraded; + staff_fire.upgrade = staff_fire_upgraded; + staff_water.upgrade = staff_water_upgraded; + staff_lightning.upgrade = staff_lightning_upgraded; + level.a_elemental_staffs_upgraded = []; + level.a_elemental_staffs_upgraded[level.a_elemental_staffs_upgraded.size] = staff_air_upgraded; + level.a_elemental_staffs_upgraded[level.a_elemental_staffs_upgraded.size] = staff_fire_upgraded; + level.a_elemental_staffs_upgraded[level.a_elemental_staffs_upgraded.size] = staff_lightning_upgraded; + level.a_elemental_staffs_upgraded[level.a_elemental_staffs_upgraded.size] = staff_water_upgraded; + + foreach ( staff_upgraded in level.a_elemental_staffs_upgraded ) + { + staff_upgraded.charger.charges_received = 0; + staff_upgraded.charger.is_inserted = 0; + staff_upgraded.charger.is_charged = 0; + staff_upgraded.prev_ammo_clip = weaponclipsize( staff_upgraded.weapname ); + staff_upgraded.prev_ammo_stock = weaponmaxammo( staff_upgraded.weapname ); + staff_upgraded thread place_staffs_encasement(); + staff_upgraded ghost(); + } + + foreach ( staff in level.a_elemental_staffs ) + { + staff.prev_ammo_clip = weaponclipsize( staff_upgraded.weapname ); + staff.prev_ammo_stock = weaponmaxammo( staff_upgraded.weapname ); + staff.upgrade.downgrade = staff; + staff.upgrade useweaponmodel( staff.weapname ); + staff.upgrade showallparts(); + } + + level.staffs_charged = 0; + array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_spawn_func ); + level thread watch_for_staff_upgrades(); + level thread chambers_init(); + level thread maps\mp\zm_tomb_quest_air::main(); + level thread maps\mp\zm_tomb_quest_fire::main(); + level thread maps\mp\zm_tomb_quest_ice::main(); + level thread maps\mp\zm_tomb_quest_elec::main(); + level thread maps\mp\zm_tomb_quest_crypt::main(); + level thread maps\mp\zm_tomb_chamber::main(); + level thread maps\mp\zm_tomb_vo::watch_occasional_line( "puzzle", "puzzle_confused", "vo_puzzle_confused" ); + level thread maps\mp\zm_tomb_vo::watch_occasional_line( "puzzle", "puzzle_good", "vo_puzzle_good" ); + level thread maps\mp\zm_tomb_vo::watch_occasional_line( "puzzle", "puzzle_bad", "vo_puzzle_bad" ); + level thread maps\mp\zm_tomb_vo::watch_one_shot_samantha_clue( "vox_sam_ice_staff_clue_0", "sam_clue_dig", "elemental_staff_water_all_pieces_found" ); + level thread maps\mp\zm_tomb_vo::watch_one_shot_samantha_clue( "vox_sam_fire_staff_clue_0", "sam_clue_mechz", "mechz_killed" ); + level thread maps\mp\zm_tomb_vo::watch_one_shot_samantha_clue( "vox_sam_fire_staff_clue_1", "sam_clue_biplane", "biplane_down" ); + level thread maps\mp\zm_tomb_vo::watch_one_shot_samantha_clue( "vox_sam_fire_staff_clue_2", "sam_clue_zonecap", "staff_piece_capture_complete" ); + level thread maps\mp\zm_tomb_vo::watch_one_shot_samantha_clue( "vox_sam_lightning_staff_clue_0", "sam_clue_tank", "elemental_staff_lightning_all_pieces_found" ); + level thread maps\mp\zm_tomb_vo::watch_one_shot_samantha_clue( "vox_sam_wind_staff_clue_0", "sam_clue_giant", "elemental_staff_air_all_pieces_found" ); + level.dig_spawners = getentarray( "zombie_spawner_dig", "script_noteworthy" ); + array_thread( level.dig_spawners, ::add_spawn_function, ::dug_zombie_spawn_init ); +} + +onplayerconnect() +{ + +} + +player_disconnect_callback( player ) +{ + n_player = player getentitynumber() + 1; + level delay_thread( 0.5, ::clear_player_staff_by_player_number, n_player ); +} + +place_staffs_encasement() +{ + s_pos = getstruct( "staff_pos_" + self.element, "targetname" ); + self.origin = s_pos.origin; + self.angles = s_pos.angles; +} + +chambers_init() +{ + flag_init( "gramophone_placed" ); + array_thread( getentarray( "trigger_death_floor", "targetname" ), ::monitor_chamber_death_trigs ); + a_stargate_gramophones = getstructarray( "stargate_gramophone_pos", "targetname" ); + array_thread( a_stargate_gramophones, ::run_gramophone_teleporter ); + a_door_main = getentarray( "chamber_entrance", "targetname" ); + array_thread( a_door_main, ::run_gramophone_door, "vinyl_master" ); +} + +monitor_chamber_death_trigs() +{ + while ( true ) + { + self waittill( "trigger", ent ); + + if ( isplayer( ent ) ) + ent.bleedout_time = 0; + + ent dodamage( ent.health + 666, ent.origin ); + wait 0.05; + } +} + +watch_gramophone_vinyl_pickup() +{ + str_vinyl_record = "vinyl_main"; + + switch ( self.script_int ) + { + case 1: + str_vinyl_record = "vinyl_fire"; + break; + case 2: + str_vinyl_record = "vinyl_air"; + break; + case 3: + str_vinyl_record = "vinyl_elec"; + break; + case 4: + str_vinyl_record = "vinyl_ice"; + break; + default: + str_vinyl_record = "vinyl_master"; + break; + } + + level waittill( "gramophone_" + str_vinyl_record + "_picked_up" ); + + self.has_vinyl = 1; +} + +get_gramophone_song() +{ + switch ( self.script_int ) + { + case 1: + return "mus_gramophone_fire"; + break; + case 2: + return "mus_gramophone_air"; + break; + case 3: + return "mus_gramophone_electric"; + break; + case 4: + return "mus_gramophone_ice"; + break; + default: + return "mus_gramophone_electric"; + break; + } +} + +run_gramophone_teleporter( str_vinyl_record ) +{ + self.has_vinyl = 0; + self.gramophone_model = undefined; + self thread watch_gramophone_vinyl_pickup(); + t_gramophone = tomb_spawn_trigger_radius( self.origin, 60.0, 1 ); + t_gramophone set_unitrigger_hint_string( &"ZOMBIE_BUILD_PIECE_MORE" ); + + level waittill( "gramophone_vinyl_player_picked_up" ); + + str_craftablename = "gramophone"; + t_gramophone set_unitrigger_hint_string( &"ZM_TOMB_RU" ); + + while ( !self.has_vinyl ) + wait 0.05; + + t_gramophone set_unitrigger_hint_string( &"ZM_TOMB_PLGR" ); + + while ( true ) + { + t_gramophone waittill( "trigger", player ); + + if ( !isdefined( self.gramophone_model ) ) + { + if ( !flag( "gramophone_placed" ) ) + { + self.gramophone_model = spawn( "script_model", self.origin ); + self.gramophone_model.angles = self.angles; + self.gramophone_model setmodel( "p6_zm_tm_gramophone" ); + level setclientfield( "piece_record_zm_player", 0 ); + flag_set( "gramophone_placed" ); + t_gramophone set_unitrigger_hint_string( "" ); + t_gramophone trigger_off(); + str_song_id = self get_gramophone_song(); + self.gramophone_model playsound( str_song_id ); + player thread maps\mp\zm_tomb_vo::play_gramophone_place_vo(); + maps\mp\zm_tomb_teleporter::stargate_teleport_enable( self.script_int ); + flag_wait( "teleporter_building_" + self.script_int ); + flag_waitopen( "teleporter_building_" + self.script_int ); + t_gramophone trigger_on(); + t_gramophone set_unitrigger_hint_string( &"ZM_TOMB_PUGR" ); + + if ( isdefined( self.script_flag ) ) + flag_set( self.script_flag ); + } + else + player door_gramophone_elsewhere_hint(); + } + else + { + self.gramophone_model delete(); + self.gramophone_model = undefined; + player playsound( "zmb_craftable_pickup" ); + flag_clear( "gramophone_placed" ); + level setclientfield( "piece_record_zm_player", 1 ); + maps\mp\zm_tomb_teleporter::stargate_teleport_disable( self.script_int ); + t_gramophone set_unitrigger_hint_string( &"ZM_TOMB_PLGR" ); + } + } +} + +door_watch_open_sesame() +{ +/# + level waittill_any( "open_sesame", "open_all_gramophone_doors" ); + self.has_vinyl = 1; + level.b_open_all_gramophone_doors = 1; + wait 0.5; + + if ( isdefined( self.trigger ) ) + self.trigger notify( "trigger", getplayers()[0] ); +#/ +} + +run_gramophone_door( str_vinyl_record ) +{ + flag_init( self.targetname + "_opened" ); + trig_position = getstruct( self.targetname + "_position", "targetname" ); + trig_position.has_vinyl = 0; + trig_position.gramophone_model = undefined; + trig_position thread watch_gramophone_vinyl_pickup(); + trig_position thread door_watch_open_sesame(); + t_door = tomb_spawn_trigger_radius( trig_position.origin, 60.0, 1 ); + t_door set_unitrigger_hint_string( &"ZOMBIE_BUILD_PIECE_MORE" ); + level waittill_any( "gramophone_vinyl_player_picked_up", "open_sesame", "open_all_gramophone_doors" ); + str_craftablename = "gramophone"; + t_door set_unitrigger_hint_string( &"ZM_TOMB_RU" ); + trig_position.trigger = t_door; + + while ( !trig_position.has_vinyl ) + wait 0.05; + + t_door set_unitrigger_hint_string( &"ZM_TOMB_PLGR" ); + + while ( true ) + { + t_door waittill( "trigger", player ); + + if ( !isdefined( trig_position.gramophone_model ) ) + { + if ( !flag( "gramophone_placed" ) || isdefined( level.b_open_all_gramophone_doors ) && level.b_open_all_gramophone_doors ) + { + if ( !( isdefined( level.b_open_all_gramophone_doors ) && level.b_open_all_gramophone_doors ) ) + { + trig_position.gramophone_model = spawn( "script_model", trig_position.origin ); + trig_position.gramophone_model.angles = trig_position.angles; + trig_position.gramophone_model setmodel( "p6_zm_tm_gramophone" ); + flag_set( "gramophone_placed" ); + level setclientfield( "piece_record_zm_player", 0 ); + } + + t_door trigger_off(); + str_song = trig_position get_gramophone_song(); + playsoundatposition( str_song, self.origin ); + self playsound( "zmb_crypt_stairs" ); + wait 6.0; + chamber_blocker(); + flag_set( self.targetname + "_opened" ); + + if ( isdefined( trig_position.script_flag ) ) + flag_set( trig_position.script_flag ); + + level setclientfield( "crypt_open_exploder", 1 ); + self movez( -260, 10.0, 1.0, 1.0 ); + + self waittill( "movedone" ); + + self connectpaths(); + self delete(); + t_door trigger_on(); + t_door set_unitrigger_hint_string( &"ZM_TOMB_PUGR" ); + + if ( isdefined( level.b_open_all_gramophone_doors ) && level.b_open_all_gramophone_doors ) + break; + } + else + player door_gramophone_elsewhere_hint(); + } + else + { + trig_position.gramophone_model delete(); + trig_position.gramophone_model = undefined; + flag_clear( "gramophone_placed" ); + player playsound( "zmb_craftable_pickup" ); + level setclientfield( "piece_record_zm_player", 1 ); + break; + } + } + + t_door tomb_unitrigger_delete(); + trig_position.trigger = undefined; +} + +chamber_blocker() +{ + a_blockers = getentarray( "junk_nml_chamber", "targetname" ); + m_blocker = getent( "junk_nml_chamber", "targetname" ); + s_blocker_end = getstruct( m_blocker.script_linkto, "script_linkname" ); + m_blocker thread maps\mp\zombies\_zm_blockers::debris_move( s_blocker_end ); + m_blocker_clip = getent( "junk_nml_chamber_clip", "targetname" ); + m_blocker_clip connectpaths(); + + m_blocker waittill( "movedone" ); + + m_blocker_clip delete(); +} + +watch_for_staff_upgrades() +{ + foreach ( staff in level.a_elemental_staffs ) + staff thread staff_upgrade_watch(); +} + +staff_upgrade_watch() +{ + flag_wait( self.weapname + "_upgrade_unlocked" ); + self thread place_staff_in_charger(); +} + +staff_get_pickup_message() +{ + if ( self.element == "air" ) + return &"ZM_TOMB_PUAS"; + else if ( self.element == "fire" ) + return &"ZM_TOMB_PUFS"; + else if ( self.element == "lightning" ) + return &"ZM_TOMB_PULS"; + else + return &"ZM_TOMB_PUIS"; +} + +staff_get_insert_message() +{ + if ( self.element == "air" ) + return &"ZM_TOMB_INAS"; + else if ( self.element == "fire" ) + return &"ZM_TOMB_INFS"; + else if ( self.element == "lightning" ) + return &"ZM_TOMB_INLS"; + else + return &"ZM_TOMB_INWS"; +} + +player_has_staff() +{ + a_weapons = self getweaponslistprimaries(); + + foreach ( weapon in a_weapons ) + { + if ( issubstr( weapon, "staff" ) ) + return true; + } + + return false; +} + +can_pickup_staff() +{ + b_has_staff = self player_has_staff(); + b_staff_equipped = issubstr( self getcurrentweapon(), "staff" ); + + if ( b_has_staff && !b_staff_equipped ) + self thread swap_staff_hint(); + + return !b_has_staff || b_staff_equipped; +} + +watch_for_player_pickup_staff() +{ + staff_picked_up = 0; + pickup_message = self staff_get_pickup_message(); + self.trigger set_unitrigger_hint_string( pickup_message ); + self show(); + self.trigger trigger_on(); + + while ( !staff_picked_up ) + { + self.trigger waittill( "trigger", player ); + + self notify( "retrieved", player ); + + if ( player can_pickup_staff() ) + { + weapon_drop = player getcurrentweapon(); + a_weapons = player getweaponslistprimaries(); + n_max_other_weapons = get_player_weapon_limit( player ) - 1; + + if ( a_weapons.size > n_max_other_weapons || issubstr( weapon_drop, "staff" ) ) + player takeweapon( weapon_drop ); + + player thread watch_staff_ammo_reload(); + self ghost(); + self setinvisibletoall(); + player giveweapon( self.weapname ); + player switchtoweapon( self.weapname ); + clip_size = weaponclipsize( self.weapname ); + player setweaponammoclip( self.weapname, clip_size ); + self.owner = player; + level notify( "stop_staff_sound" ); + self notify( "staff_equip" ); + staff_picked_up = 1; + self.charger.is_inserted = 0; + self setclientfield( "staff_charger", 0 ); + self.charger.full = 1; + maps\mp\zm_tomb_craftables::set_player_staff( self.weapname, player ); + } + } +} + +watch_staff_ammo_reload() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "zmb_max_ammo" ); + + a_weapons = self getweaponslistprimaries(); + + foreach ( weapon in a_weapons ) + { + if ( issubstr( weapon, "staff" ) ) + self setweaponammoclip( weapon, weaponmaxammo( weapon ) ); + } + } +} + +rotate_forever( rotate_time = 20.0 ) +{ + self endon( "death" ); + + while ( true ) + { + self rotateyaw( 360, 20.0, 0.0, 0.0 ); + + self waittill( "rotatedone" ); + } +} + +staff_crystal_wait_for_teleport( n_element_enum ) +{ + flag_init( "charger_ready_" + n_element_enum ); + self craftable_waittill_spawned(); + self.origin = self.piecespawn.model.origin; + self.piecespawn.model ghost(); + self.piecespawn.model movez( -1000, 0.05 ); + e_plinth = getent( "crystal_plinth" + n_element_enum, "targetname" ); + e_plinth.v_start = e_plinth.origin; + e_plinth.v_start = ( e_plinth.v_start[0], e_plinth.v_start[1], e_plinth.origin[2] - 78 ); + e_plinth.v_crystal = e_plinth.origin; + e_plinth.v_crystal = ( e_plinth.v_crystal[0], e_plinth.v_crystal[1], e_plinth.origin[2] - 40 ); + e_plinth.v_staff = e_plinth.origin; + e_plinth.v_staff = ( e_plinth.v_staff[0], e_plinth.v_staff[1], e_plinth.origin[2] + 15 ); + e_plinth moveto( e_plinth.v_start, 0.05 ); + + while ( true ) + { + level waittill( "player_teleported", e_player, n_teleport_enum ); + + if ( n_teleport_enum == n_element_enum ) + break; + } + + e_plinth moveto( e_plinth.v_crystal, 6.0 ); + e_plinth thread sndmoveplinth( 6 ); + lookat_dot = cos( 90.0 ); + dist_sq = 250000.0; + lookat_time = 0.0; + + while ( lookat_time < 1.0 && isdefined( self.piecespawn.model ) ) + { + wait 0.1; + + if ( !isdefined( self.piecespawn.model ) ) + break; + + if ( self.piecespawn.model any_player_looking_at_plinth( lookat_dot, dist_sq ) ) + lookat_time += 0.1; + else + lookat_time = 0.0; + } + + if ( isdefined( self.piecespawn.model ) ) + { + self.piecespawn.model movez( 985, 0.05 ); + + self.piecespawn.model waittill( "movedone" ); + + self.piecespawn.model show(); + self.piecespawn.model thread rotate_forever(); + self.piecespawn.model movez( 15, 2.0 ); + self.piecespawn.model playloopsound( "zmb_squest_crystal_loop", 4.25 ); + } + + flag_wait( "charger_ready_" + n_element_enum ); + + while ( !maps\mp\zm_tomb_chamber::is_chamber_occupied() ) + wait_network_frame(); + + e_plinth moveto( e_plinth.v_staff, 3.0 ); + e_plinth thread sndmoveplinth( 3 ); + + e_plinth waittill( "movedone" ); +} + +sndmoveplinth( time ) +{ + self notify( "sndMovePlinth" ); + self endon( "sndMovePlinth" ); + self playloopsound( "zmb_chamber_plinth_move", 0.25 ); + wait( time ); + self stoploopsound( 0.1 ); + self playsound( "zmb_chamber_plinth_stop" ); +} + +staff_mechz_drop_pieces( s_piece ) +{ + s_piece craftable_waittill_spawned(); + s_piece.piecespawn.model ghost(); + + for ( i = 0; i < 1; i++ ) + level waittill( "mechz_killed", origin ); + + s_piece.piecespawn.canmove = 1; + maps\mp\zombies\_zm_unitrigger::reregister_unitrigger_as_dynamic( s_piece.piecespawn.unitrigger ); + origin = groundpos_ignore_water_new( origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + s_piece.piecespawn.model moveto( origin + vectorscale( ( 0, 0, 1 ), 32.0 ), 0.05 ); + + s_piece.piecespawn.model waittill( "movedone" ); + + if ( isdefined( s_piece.piecespawn.model ) ) + { + s_piece.piecespawn.model show(); + s_piece.piecespawn.model notify( "staff_piece_glow" ); + s_piece.piecespawn.model thread mechz_staff_piece_failsafe(); + } +} + +mechz_staff_piece_failsafe() +{ + min_dist_sq = 1000000; + self endon( "death" ); + wait 120.0; + + while ( true ) + { + a_players = getplayers(); + b_anyone_near = 0; + + foreach ( e_player in a_players ) + { + dist_sq = distance2dsquared( e_player.origin, self.origin ); + + if ( dist_sq < min_dist_sq ) + b_anyone_near = 1; + } + + if ( !b_anyone_near ) + break; + + wait 1.0; + } + + a_locations = getstructarray( "mechz_location", "script_noteworthy" ); + s_location = get_closest_2d( self.origin, a_locations ); + self moveto( s_location.origin + vectorscale( ( 0, 0, 1 ), 32.0 ), 3.0 ); +} + +biplane_clue() +{ + self endon( "death" ); + level endon( "biplane_down" ); + + while ( true ) + { + cur_round = level.round_number; + + while ( level.round_number == cur_round ) + wait 1.0; + + wait( randomfloatrange( 5.0, 15.0 ) ); + a_players = getplayers(); + + foreach ( e_player in a_players ) + level notify( "sam_clue_biplane", e_player ); + } +} + +staff_biplane_drop_pieces( a_staff_pieces ) +{ + foreach ( staff_piece in a_staff_pieces ) + { + staff_piece craftable_waittill_spawned(); + staff_piece.origin = staff_piece.piecespawn.model.origin; + staff_piece.piecespawn.model notify( "staff_piece_glow" ); + staff_piece.piecespawn.model ghost(); + staff_piece.piecespawn.model movez( -500, 0.05 ); + } + + flag_wait( "activate_zone_village_0" ); + cur_round = level.round_number; + + while ( level.round_number == cur_round ) + wait 1.0; + + s_biplane_pos = getstruct( "air_crystal_biplane_pos", "targetname" ); + vh_biplane = spawnvehicle( "veh_t6_dlc_zm_biplane", "air_crystal_biplane", "biplane_zm", s_biplane_pos.origin, s_biplane_pos.angles ); + vh_biplane ent_flag_init( "biplane_down", 0 ); + vh_biplane thread biplane_clue(); + e_fx_tag = getent( "air_crystal_biplane_tag", "targetname" ); + e_fx_tag moveto( vh_biplane.origin, 0.05 ); + + e_fx_tag waittill( "movedone" ); + + e_fx_tag linkto( vh_biplane, "tag_origin" ); + vh_biplane.health = 10000; + vh_biplane setcandamage( 1 ); + vh_biplane setforcenocull(); + vh_biplane attachpath( getvehiclenode( "biplane_start", "targetname" ) ); + vh_biplane startpath(); + s_biplane_pos structdelete(); + e_fx_tag setclientfield( "element_glow_fx", 1 ); + vh_biplane ent_flag_wait( "biplane_down" ); + vh_biplane playsound( "zmb_zombieblood_3rd_plane_explode" ); + + foreach ( staff_piece in a_staff_pieces ) + { + staff_piece.e_fx = spawn( "script_model", e_fx_tag.origin ); + staff_piece.e_fx setmodel( "tag_origin" ); + staff_piece.e_fx setclientfield( "element_glow_fx", 1 ); + staff_piece.e_fx moveto( staff_piece.origin, 5.0 ); + } + + playfx( level._effect["biplane_explode"], vh_biplane.origin ); + vh_biplane delete(); + e_fx_tag delete(); + + a_staff_pieces[0].e_fx waittill( "movedone" ); + + foreach ( staff_piece in a_staff_pieces ) + { + staff_piece.e_fx delete(); + staff_piece.piecespawn.model show(); + staff_piece.piecespawn.model movez( 500, 0.05 ); + + staff_piece.piecespawn.model waittill( "movedone" ); + } +} + +aircrystalbiplanecallback_vehicledamage( e_inflictor, e_attacker, n_damage, n_dflags, str_means_of_death, str_weapon, v_point, v_dir, str_hit_loc, psoffsettime, b_damage_from_underneath, n_model_index, str_part_name ) +{ + if ( isplayer( e_attacker ) && self.vehicletype == "biplane_zm" && !self ent_flag( "biplane_down" ) ) + { + self ent_flag_set( "biplane_down" ); + level notify( "biplane_down" ); + } + + return n_damage; +} + +zone_capture_clue( str_zone ) +{ + level endon( "staff_piece_capture_complete" ); + + while ( true ) + { + wait 5.0; + + while ( !level.zones[str_zone].is_occupied ) + wait 1.0; + + a_players = getplayers(); + + foreach ( e_player in a_players ) + level notify( "sam_clue_zonecap", e_player ); + } +} + +staff_unlock_with_zone_capture( s_staff_piece ) +{ + flag_wait( "start_zombie_round_logic" ); + s_staff_piece craftable_waittill_spawned(); + str_zone = maps\mp\zombies\_zm_zonemgr::get_zone_from_position( s_staff_piece.piecespawn.model.origin, 1 ); + + if ( !isdefined( str_zone ) ) + { +/# + assertmsg( "Zone capture staff piece is not in a zone." ); +#/ + return; + } + + level thread zone_capture_clue( str_zone ); + s_staff_piece.piecespawn.model ghost(); + + while ( true ) + { + level waittill( "zone_captured_by_player", str_captured_zone ); + + if ( str_captured_zone == str_zone ) + break; + } + + level notify( "staff_piece_capture_complete" ); + + foreach ( uts_box in level.a_uts_challenge_boxes ) + { + if ( uts_box.str_location == "church_capture" ) + { + uts_box.s_staff_piece = s_staff_piece; + level thread maps\mp\zombies\_zm_challenges::open_box( undefined, uts_box, ::reward_staff_piece ); + return; + } + } +} + +reward_staff_piece( player, s_stat ) +{ + m_piece = spawn( "script_model", self.origin ); + m_piece.angles = self.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); + m_piece setmodel( "t6_wpn_zmb_staff_tip_fire_world" ); + m_piece.origin = self.origin; + m_piece.angles = self.angles + vectorscale( ( 0, 1, 0 ), 90.0 ); + m_piece setclientfield( "element_glow_fx", 1 ); + wait_network_frame(); + + if ( !reward_rise_and_grab( m_piece, 50, 2, 2, -1 ) ) + return false; + + n_dist = 9999; + a_players = getplayers(); + a_players = get_array_of_closest( self.m_box.origin, a_players ); + + if ( isdefined( a_players[0] ) ) + a_players[0] maps\mp\zombies\_zm_craftables::player_take_piece( self.s_staff_piece.piecespawn ); + + m_piece delete(); + return true; +} + +dig_spot_get_staff_piece( e_player ) +{ + level notify( "sam_clue_dig", e_player ); + str_zone = self.str_zone; + + foreach ( s_staff in level.ice_staff_pieces ) + { + if ( !isdefined( s_staff.num_misses ) ) + s_staff.num_misses = 0; + + if ( issubstr( str_zone, s_staff.zone_substr ) ) + { + miss_chance = 100 / ( s_staff.num_misses + 1 ); + + if ( level.weather_snow <= 0 ) + miss_chance = 101; + + if ( randomint( 100 ) > miss_chance || s_staff.num_misses > 3 && miss_chance < 100 ) + return s_staff; + else + { + s_staff.num_misses++; + break; + } + } + } + + return undefined; +} + +show_ice_staff_piece( origin ) +{ + arrayremovevalue( level.ice_staff_pieces, self ); + wait 0.5; + self.piecespawn.canmove = 1; + maps\mp\zombies\_zm_unitrigger::reregister_unitrigger_as_dynamic( self.piecespawn.unitrigger ); + vert_offset = 32; + self.piecespawn.model moveto( origin + ( 0, 0, vert_offset ), 0.05 ); + + self.piecespawn.model waittill( "movedone" ); + + self.piecespawn.model showindemo(); + self.piecespawn.model show(); + self.piecespawn.model notify( "staff_piece_glow" ); + self.piecespawn.model playsound( "evt_staff_digup" ); + self.piecespawn.model playloopsound( "evt_staff_digup_lp" ); +} + +staff_ice_dig_pieces( a_staff_pieces ) +{ + flag_wait( "start_zombie_round_logic" ); + level.ice_staff_pieces = arraycopy( a_staff_pieces ); + + foreach ( s_piece in level.ice_staff_pieces ) + { + s_piece craftable_waittill_spawned(); + s_piece.piecespawn.model ghost(); + } + + level.ice_staff_pieces[0].zone_substr = "bunker"; + level.ice_staff_pieces[1].zone_substr = "nml"; + level.ice_staff_pieces[2].zone_substr = "village"; + level.ice_staff_pieces[2].num_misses = 2; +} + +crystal_play_glow_fx( s_crystal ) +{ + flag_wait( "start_zombie_round_logic" ); + + switch ( s_crystal.modelname ) + { + case "t6_wpn_zmb_staff_crystal_air_part": + watch_for_crystal_pickup( s_crystal, 2 ); + break; + case "t6_wpn_zmb_staff_crystal_fire_part": + watch_for_crystal_pickup( s_crystal, 1 ); + break; + case "t6_wpn_zmb_staff_crystal_bolt_part": + watch_for_crystal_pickup( s_crystal, 3 ); + break; + case "t6_wpn_zmb_staff_crystal_water_part": + watch_for_crystal_pickup( s_crystal, 4 ); + break; + } +} + +watch_for_crystal_pickup( s_crystal, n_enum ) +{ + s_crystal.piecespawn.model setclientfield( "element_glow_fx", n_enum ); + + s_crystal.piecespawn waittill( "pickup" ); + + self playsound( "evt_crystal" ); + level.n_crystals_pickedup++; +} + +crystal_dropped( s_crystal ) +{ + flag_wait( "start_zombie_round_logic" ); + + s_crystal.piecespawn waittill( "piece_released" ); + + level.n_crystals_pickedup--; + level thread crystal_play_glow_fx( s_crystal ); +} + +staff_charger_get_player_msg( e_player ) +{ + weapon_available = 1; + charge_ready = 0; + + if ( self.stub.staff_data.charger.is_inserted ) + { + if ( self.stub.staff_data.charger.is_charged ) + charge_ready = 1; + } + + if ( e_player hasweapon( self.stub.staff_data.weapname ) ) + { + msg = self.stub.staff_data staff_get_insert_message(); + return msg; + } + else if ( charge_ready ) + { + msg = self.stub.staff_data staff_get_pickup_message(); + return msg; + } + else + return ""; +} + +place_staff_in_charger() +{ + flag_set( "charger_ready_" + self.enum ); + v_trigger_pos = self.charger.origin; + v_trigger_pos = ( v_trigger_pos[0], v_trigger_pos[1], v_trigger_pos[2] - 30.0 ); + + if ( isdefined( self.charge_trigger ) ) + self.charge_trigger tomb_unitrigger_delete(); + + self.charge_trigger = tomb_spawn_trigger_radius( v_trigger_pos, 120, 1, ::staff_charger_get_player_msg ); + self.charge_trigger.require_look_at = 1; + self.charge_trigger.staff_data = self; + waittill_staff_inserted(); +} + +debug_staff_charge() +{ +/# + if ( !isdefined( self.charger.charges_received ) ) + self.charger.charges_received = 0; + + while ( self.charger.is_inserted ) + { + if ( self.charger.is_charged ) + { + maxammo = weaponmaxammo( self.weapname ); + + if ( !isdefined( self.prev_ammo_stock ) ) + self.prev_ammo_stock = maxammo; + + print3d( self.origin, self.prev_ammo_stock + "/" + maxammo, vectorscale( ( 1, 1, 1 ), 255.0 ), 1 ); + } + else + print3d( self.origin, self.charger.charges_received + "/" + 20, vectorscale( ( 1, 1, 1 ), 255.0 ), 1 ); + + wait 0.05; + } +#/ +} + +waittill_staff_inserted() +{ + while ( true ) + { + self.charge_trigger waittill( "trigger", player ); + + weapon_available = 1; + + if ( isdefined( player ) ) + { + weapon_available = player hasweapon( self.weapname ); + + if ( weapon_available ) + player takeweapon( self.weapname ); + } + + if ( weapon_available ) + { + self.charger.is_inserted = 1; + self thread debug_staff_charge(); + maps\mp\zm_tomb_craftables::clear_player_staff( self.weapname ); + self.charge_trigger trigger_off(); + + if ( isdefined( self.charger.angles ) ) + self.angles = self.charger.angles; + + self moveto( self.charger.origin, 0.05 ); + + self waittill( "movedone" ); + + self setclientfield( "staff_charger", self.enum ); + self.charger.full = 0; + self show(); + self playsound( "zmb_squest_charge_place_staff" ); + return; + } + } +} + +zombie_spawn_func() +{ + self.actor_killed_override = ::zombie_killed_override; +} + +zombie_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) +{ + if ( flag( "ee_sam_portal_active" ) && !flag( "ee_souls_absorbed" ) ) + { + maps\mp\zm_tomb_ee_main_step_7::ee_zombie_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ); + return; + } + + if ( maps\mp\zm_tomb_challenges::footprint_zombie_killed( attacker ) ) + return; + + n_max_dist_sq = 9000000; + + if ( isplayer( attacker ) || sweapon == "one_inch_punch_zm" ) + { + if ( !flag( "fire_puzzle_1_complete" ) ) + maps\mp\zm_tomb_quest_fire::sacrifice_puzzle_zombie_killed( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ); + + s_nearest_staff = undefined; + n_nearest_dist_sq = n_max_dist_sq; + + foreach ( staff in level.a_elemental_staffs ) + { + if ( isdefined( staff.charger.full ) && staff.charger.full ) + continue; + + if ( staff.charger.is_inserted || staff.upgrade.charger.is_inserted ) + { + if ( !( isdefined( staff.charger.is_charged ) && staff.charger.is_charged ) ) + { + dist_sq = distance2dsquared( self.origin, staff.origin ); + + if ( dist_sq <= n_nearest_dist_sq ) + { + n_nearest_dist_sq = dist_sq; + s_nearest_staff = staff; + } + } + } + } + + if ( isdefined( s_nearest_staff ) ) + { + if ( s_nearest_staff.charger.is_charged ) + { + + } + else + { + s_nearest_staff.charger.charges_received++; + s_nearest_staff.charger thread zombie_soul_to_charger( self, s_nearest_staff.enum ); + } + } + } +} + +zombie_soul_to_charger( ai_zombie, n_element ) +{ + ai_zombie setclientfield( "zombie_soul", 1 ); + wait 1.5; + self notify( "soul_received" ); +} + +staff_charger_check() +{ + self.charger.is_charged = 0; + flag_wait( self.weapname + "_upgrade_unlocked" ); + self useweaponmodel( self.weapname ); + self showallparts(); + + while ( true ) + { + if ( self.charger.charges_received >= 20 || getdvarint( _hash_FA81816F ) >= 2 && self.charger.is_inserted ) + { + wait 0.5; + self.charger.is_charged = 1; + e_player = get_closest_player( self.charger.origin ); + e_player thread maps\mp\zm_tomb_vo::say_puzzle_completion_line( self.enum ); + self setclientfield( "staff_charger", 0 ); + self.charger.full = 1; + level setclientfield( self.quest_clientfield, 4 ); + level thread spawn_upgraded_staff_triggers( self.enum ); + level.staffs_charged++; + + if ( level.staffs_charged == 4 ) + flag_set( "ee_all_staffs_upgraded" ); + + self thread staff_sound(); + break; + } + + wait 1; + } +} + +staff_sound() +{ + self thread sndstaffupgradedstinger(); + self playsound( "zmb_squest_charge_soul_full" ); + self playloopsound( "zmb_squest_charge_soul_full_loop", 0.1 ); + + level waittill( "stop_staff_sound" ); + + self stoploopsound( 0.1 ); +} + +sndstaffupgradedstinger() +{ + if ( level.staffs_charged == 4 ) + { + level thread maps\mp\zm_tomb_amb::sndplaystingerwithoverride( "mus_event_staff_all_upgraded", 55 ); + return; + } + + if ( self.weapname == "staff_air_zm" ) + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "staff_wind_upgraded" ); + + if ( self.weapname == "staff_fire_zm" ) + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "staff_fire_upgraded" ); + + if ( self.weapname == "staff_lightning_zm" ) + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "staff_lightning_upgraded" ); + + if ( self.weapname == "staff_water_zm" ) + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "staff_ice_upgraded" ); +} + +spawn_upgraded_staff_triggers( n_index ) +{ + e_staff_standard = get_staff_info_from_element_index( n_index ); + e_staff_standard_upgraded = e_staff_standard.upgrade; + e_staff_standard.charge_trigger trigger_on(); + e_staff_standard.charge_trigger.require_look_at = 1; + pickup_message = e_staff_standard staff_get_pickup_message(); + e_staff_standard.charge_trigger set_unitrigger_hint_string( pickup_message ); + e_staff_standard ghost(); + e_staff_standard_upgraded.trigger = e_staff_standard.charge_trigger; + e_staff_standard_upgraded.angles = e_staff_standard.angles; + e_staff_standard_upgraded moveto( e_staff_standard.origin, 0.05 ); + + e_staff_standard_upgraded waittill( "movedone" ); + + e_staff_standard_upgraded show(); + e_fx = spawn( "script_model", e_staff_standard_upgraded.origin + vectorscale( ( 0, 0, 1 ), 8.0 ) ); + e_fx setmodel( "tag_origin" ); + wait 0.6; + e_fx setclientfield( "element_glow_fx", e_staff_standard.enum ); + e_staff_standard_upgraded watch_for_player_pickup_staff(); + e_staff_standard_upgraded.trigger trigger_off(); + player = e_staff_standard_upgraded.owner; + e_fx delete(); + + while ( true ) + { + if ( e_staff_standard.charger.is_charged ) + { + e_staff_standard_upgraded thread staff_upgraded_reload_monitor(); + break; + } + + wait_network_frame(); + } +} + +staff_upgraded_reload_monitor() +{ + self.weaponname = self.weapname; + self thread track_staff_weapon_respawn( self.owner ); + + while ( true ) + { + place_staff_in_charger(); + self thread staff_upgraded_reload(); + self watch_for_player_pickup_staff(); + self.trigger trigger_off(); + self.charger.is_inserted = 0; + maxammo = weaponmaxammo( self.weapname ); + n_ammo = int( min( maxammo, self.prev_ammo_stock ) ); + + if ( isdefined( self.owner ) ) + { + self.owner setweaponammostock( self.weapname, n_ammo ); + self.owner setweaponammoclip( self.weapname, self.prev_ammo_clip ); + self thread track_staff_weapon_respawn( self.owner ); + } + } +} + +staff_upgraded_reload() +{ + self endon( "staff_equip" ); + max_ammo = weaponmaxammo( self.weapname ); + n_count = int( max_ammo / 20 ); + b_reloaded = 0; + + while ( true ) + { + self.charger waittill( "soul_received" ); + + self.prev_ammo_stock += n_count; + + if ( self.prev_ammo_stock > max_ammo ) + { + self.prev_ammo_stock = max_ammo; + self setclientfield( "staff_charger", 0 ); + self.charger.full = 1; + } + + if ( !b_reloaded ) + { + self.trigger trigger_on(); + b_reloaded = 1; + } + } +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_quest_air.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_quest_air.gsc new file mode 100644 index 0000000..5c87a8a --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_quest_air.gsc @@ -0,0 +1,250 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zm_tomb_vo; + +main() +{ + flag_init( "air_puzzle_1_complete" ); + flag_init( "air_puzzle_2_complete" ); + flag_init( "air_upgrade_available" ); + air_puzzle_1_init(); + air_puzzle_2_init(); + maps\mp\zm_tomb_vo::add_puzzle_completion_line( 2, "vox_sam_wind_puz_solve_1" ); + maps\mp\zm_tomb_vo::add_puzzle_completion_line( 2, "vox_sam_wind_puz_solve_0" ); + maps\mp\zm_tomb_vo::add_puzzle_completion_line( 2, "vox_sam_wind_puz_solve_2" ); + level thread maps\mp\zm_tomb_vo::watch_one_shot_line( "puzzle", "try_puzzle", "vo_try_puzzle_air1" ); + level thread maps\mp\zm_tomb_vo::watch_one_shot_line( "puzzle", "try_puzzle", "vo_try_puzzle_air2" ); + level thread air_puzzle_1_run(); + flag_wait( "air_puzzle_1_complete" ); + playsoundatposition( "zmb_squest_step1_finished", ( 0, 0, 0 ) ); + level thread air_puzzle_1_cleanup(); + level thread rumble_players_in_chamber( 5, 3.0 ); + level thread air_puzzle_2_run(); +} + +air_puzzle_1_init() +{ + level.a_ceiling_rings = getentarray( "ceiling_ring", "script_noteworthy" ); + + foreach ( e_ring in level.a_ceiling_rings ) + e_ring ceiling_ring_init(); +} + +air_puzzle_1_cleanup() +{ + for ( i = 1; i <= 3; i++ ) + { + n_move = ( 4 - i ) * 20.0; + e_ring = getent( "ceiling_ring_0" + i, "targetname" ); + e_ring rotateyaw( 360, 1.5, 0.5, 0.0 ); + e_ring movez( n_move, 1.5, 0.5, 0.0 ); + + e_ring waittill( "movedone" ); + } + + playsoundatposition( "zmb_squest_wind_ring_disappear", level.a_ceiling_rings[0].origin ); +} + +air_puzzle_1_run() +{ + array_thread( level.a_ceiling_rings, ::ceiling_ring_run ); +} + +check_puzzle_solved() +{ + num_solved = 0; + + foreach ( e_ring in level.a_ceiling_rings ) + { + if ( e_ring.script_int != e_ring.position ) + return false; + } + + return true; +} + +ceiling_ring_randomize() +{ + n_offset_from_final = randomintrange( 1, 4 ); + self.position = ( self.script_int + n_offset_from_final ) % 4; + ceiling_ring_update_position(); + assert( self.position != self.script_int ); +} + +ceiling_ring_update_position() +{ + new_angles = ( self.angles[0], self.position * 90, self.angles[2] ); + self rotateto( new_angles, 0.5, 0.2, 0.2 ); + self playsound( "zmb_squest_wind_ring_turn" ); + + self waittill( "rotatedone" ); +} + +ceiling_ring_rotate() +{ + self.position = ( self.position + 1 ) % 4; +/# + if ( self.position == self.script_int ) + iprintlnbold( "Ring is in place." ); +#/ + self ceiling_ring_update_position(); + solved = check_puzzle_solved(); + + if ( solved && !flag( "air_puzzle_1_complete" ) ) + { + self thread maps\mp\zm_tomb_vo::say_puzzle_completion_line( 2 ); + flag_set( "air_puzzle_1_complete" ); + } +} + +ceiling_ring_init() +{ + self.position = 0; +} + +ceiling_ring_run() +{ + level endon( "air_puzzle_1_complete" ); + self setcandamage( 1 ); + self.position = 0; + ceiling_ring_randomize(); + n_rotations = 0; + + while ( true ) + { + self waittill( "damage", damage, attacker, direction_vec, point, mod, tagname, modelname, partname, weaponname ); + + if ( weaponname == "staff_air_zm" ) + { + level notify( "vo_try_puzzle_air1", attacker ); + self ceiling_ring_rotate(); + rumble_nearby_players( self.origin, 1500, 2 ); + n_rotations++; + + if ( n_rotations % 4 == 0 ) + level notify( "vo_puzzle_bad", attacker ); + } + else + level notify( "vo_puzzle_confused", attacker ); + } +} + +air_puzzle_2_init() +{ + a_smoke_pos = getstructarray( "puzzle_smoke_origin", "targetname" ); + + foreach ( s_smoke_pos in a_smoke_pos ) + { + s_smoke_pos.detector_brush = getent( s_smoke_pos.target, "targetname" ); + s_smoke_pos.detector_brush ghost(); + } +} + +air_puzzle_2_run() +{ + a_smoke_pos = getstructarray( "puzzle_smoke_origin", "targetname" ); + + foreach ( s_smoke_pos in a_smoke_pos ) + s_smoke_pos thread air_puzzle_smoke(); + + while ( true ) + { + level waittill( "air_puzzle_smoke_solved" ); + + all_smoke_solved = 1; + + foreach ( s_smoke_pos in a_smoke_pos ) + { + if ( !s_smoke_pos.solved ) + all_smoke_solved = 0; + } + + if ( all_smoke_solved ) + { + a_players = getplayers(); + + foreach ( e_player in a_players ) + { + if ( e_player hasweapon( "staff_air_zm" ) ) + { + e_player thread maps\mp\zm_tomb_vo::say_puzzle_completion_line( 2 ); + break; + } + } + + flag_set( "air_puzzle_2_complete" ); + level thread play_puzzle_stinger_on_all_players(); + break; + } + } +} + +air_puzzle_smoke() +{ + self.e_fx = spawn( "script_model", self.origin ); + self.e_fx.angles = self.angles; + self.e_fx setmodel( "tag_origin" ); + self.e_fx playloopsound( "zmb_squest_wind_incense_loop", 2 ); + s_dest = getstruct( "puzzle_smoke_dest", "targetname" ); + playfxontag( level._effect["air_puzzle_smoke"], self.e_fx, "tag_origin" ); + self thread air_puzzle_run_smoke_direction(); + flag_wait( "air_puzzle_2_complete" ); + self.e_fx movez( -1000, 1.0, 0.1, 0.1 ); + + self.e_fx waittill( "movedone" ); + + wait 5.0; + self.e_fx delete(); + self.detector_brush delete(); +} + +air_puzzle_run_smoke_direction() +{ + level endon( "air_puzzle_2_complete" ); + self endon( "death" ); + s_dest = getstruct( "puzzle_smoke_dest", "targetname" ); + v_to_dest = vectornormalize( s_dest.origin - self.origin ); + f_min_dot = cos( self.script_int ); + self.solved = 0; + self.detector_brush setcandamage( 1 ); + direction_failures = 0; + + while ( true ) + { + self.detector_brush waittill( "damage", damage, attacker, direction_vec, point, mod, tagname, modelname, partname, weaponname ); + + if ( weaponname == "staff_air_zm" ) + { + level notify( "vo_try_puzzle_air2", attacker ); + new_yaw = vectoangles( direction_vec ); + new_orient = ( 0, new_yaw, 0 ); + self.e_fx rotateto( new_orient, 1.0, 0.3, 0.3 ); + + self.e_fx waittill( "rotatedone" ); + + f_dot = vectordot( v_to_dest, direction_vec ); + self.solved = f_dot > f_min_dot; + + if ( !self.solved ) + { + direction_failures++; + + if ( direction_failures > 4 ) + level notify( "vo_puzzle_confused", attacker ); + } + else if ( randomint( 100 ) < 10 ) + level notify( "vo_puzzle_good", attacker ); + + level notify( "air_puzzle_smoke_solved" ); + } + else if ( issubstr( weaponname, "staff" ) ) + level notify( "vo_puzzle_bad", attacker ); + } +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_quest_crypt.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_quest_crypt.gsc new file mode 100644 index 0000000..3497a7e --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_quest_crypt.gsc @@ -0,0 +1,330 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zm_tomb_vo; +#include maps\mp\zombies\_zm_audio; + +main() +{ + precachemodel( "p6_power_lever" ); + onplayerconnect_callback( ::on_player_connect_crypt ); + flag_init( "staff_air_zm_upgrade_unlocked" ); + flag_init( "staff_water_zm_upgrade_unlocked" ); + flag_init( "staff_fire_zm_upgrade_unlocked" ); + flag_init( "staff_lightning_zm_upgrade_unlocked" ); + flag_init( "disc_rotation_active" ); + level thread maps\mp\zm_tomb_vo::watch_one_shot_line( "puzzle", "try_puzzle", "vo_try_puzzle_crypt" ); + init_crypt_gems(); + chamber_disc_puzzle_init(); +} + +on_player_connect_crypt() +{ + discs = getentarray( "crypt_puzzle_disc", "script_noteworthy" ); + + foreach ( disc in discs ) + disc delay_thread( 0.5, ::bryce_cake_light_update, 0 ); +} + +chamber_disc_puzzle_init() +{ + level.gem_start_pos = []; + level.gem_start_pos["crypt_gem_fire"] = 2; + level.gem_start_pos["crypt_gem_air"] = 3; + level.gem_start_pos["crypt_gem_ice"] = 0; + level.gem_start_pos["crypt_gem_elec"] = 1; + chamber_discs = getentarray( "crypt_puzzle_disc", "script_noteworthy" ); + array_thread( chamber_discs, ::chamber_disc_run ); + flag_wait( "chamber_entrance_opened" ); + chamber_discs_randomize(); +} + +#using_animtree("fxanim_props_dlc4"); + +chamber_disc_run() +{ + flag_wait( "start_zombie_round_logic" ); + self.position = 0; + self bryce_cake_light_update( 0 ); + + if ( isdefined( self.target ) ) + { + a_levers = getentarray( self.target, "targetname" ); + + foreach ( e_lever in a_levers ) + { + e_lever.trigger_stub = tomb_spawn_trigger_radius( e_lever.origin, 100, 1 ); + e_lever.trigger_stub.require_look_at = 0; + clockwise = !isdefined( e_lever.script_string ) && !isdefined( "clockwise" ) || isdefined( e_lever.script_string ) && isdefined( "clockwise" ) && e_lever.script_string == "clockwise"; + e_lever.trigger_stub thread chamber_disc_trigger_run( self, e_lever, clockwise ); + } + + self thread chamber_disc_move_to_position(); + } + + self useanimtree( #animtree ); + n_wait = randomfloatrange( 0.0, 5.0 ); + wait( n_wait ); + self setanim( %fxanim_zom_tomb_chamber_piece_anim ); +} + +init_crypt_gems() +{ + disc = getent( "crypt_puzzle_disc_main", "targetname" ); + gems = getentarray( "crypt_gem", "script_noteworthy" ); + + foreach ( gem in gems ) + { + gem linkto( disc ); + gem thread run_crypt_gem_pos(); + } +} + +light_discs_bottom_to_top() +{ + discs = getentarray( "crypt_puzzle_disc", "script_noteworthy" ); + + for ( i = 1; i <= 4; i++ ) + { + foreach ( disc in discs ) + { + if ( !isdefined( disc.script_int ) && !isdefined( i ) || isdefined( disc.script_int ) && isdefined( i ) && disc.script_int == i ) + { + disc bryce_cake_light_update( 1 ); + break; + } + } + + wait 1.0; + } +} + +run_crypt_gem_pos() +{ + str_weapon = undefined; + complete_flag = undefined; + str_orb_path = undefined; + str_glow_fx = undefined; + n_element = self.script_int; + + switch ( self.targetname ) + { + case "crypt_gem_air": + str_weapon = "staff_air_zm"; + complete_flag = "staff_air_zm_upgrade_unlocked"; + str_orb_path = "air_orb_exit_path"; + str_final_pos = "air_orb_plinth_final"; + break; + case "crypt_gem_ice": + str_weapon = "staff_water_zm"; + complete_flag = "staff_water_zm_upgrade_unlocked"; + str_orb_path = "ice_orb_exit_path"; + str_final_pos = "ice_orb_plinth_final"; + break; + case "crypt_gem_fire": + str_weapon = "staff_fire_zm"; + complete_flag = "staff_fire_zm_upgrade_unlocked"; + str_orb_path = "fire_orb_exit_path"; + str_final_pos = "fire_orb_plinth_final"; + break; + case "crypt_gem_elec": + str_weapon = "staff_lightning_zm"; + complete_flag = "staff_lightning_zm_upgrade_unlocked"; + str_orb_path = "lightning_orb_exit_path"; + str_final_pos = "lightning_orb_plinth_final"; + break; + default: +/# + assertmsg( "Unknown crypt gem targetname: " + self.targetname ); +#/ + return; + } + + e_gem_model = puzzle_orb_chamber_to_crypt( str_orb_path, self ); + e_main_disc = getent( "crypt_puzzle_disc_main", "targetname" ); + e_gem_model linkto( e_main_disc ); + str_targetname = self.targetname; + self delete(); + e_gem_model setcandamage( 1 ); + + while ( true ) + { + e_gem_model waittill( "damage", damage, attacker, direction_vec, point, mod, tagname, modelname, partname, weaponname ); + + if ( weaponname == str_weapon ) + break; + } + + e_gem_model setclientfield( "element_glow_fx", n_element ); + e_gem_model playsound( "zmb_squest_crystal_charge" ); + e_gem_model playloopsound( "zmb_squest_crystal_charge_loop", 2 ); + + while ( true ) + { + if ( chamber_disc_gem_has_clearance( str_targetname ) ) + break; + + level waittill( "crypt_disc_rotation" ); + } + + flag_set( "disc_rotation_active" ); + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "side_sting_5" ); + light_discs_bottom_to_top(); + level thread puzzle_orb_pillar_show(); + e_gem_model unlink(); + s_ascent = getstruct( "orb_crypt_ascent_path", "targetname" ); + v_next_pos = ( e_gem_model.origin[0], e_gem_model.origin[1], s_ascent.origin[2] ); + e_gem_model setclientfield( "element_glow_fx", n_element ); + playfxontag( level._effect["puzzle_orb_trail"], e_gem_model, "tag_origin" ); + e_gem_model playsound( "zmb_squest_crystal_leave" ); + e_gem_model puzzle_orb_move( v_next_pos ); + flag_clear( "disc_rotation_active" ); + level thread chamber_discs_randomize(); + e_gem_model puzzle_orb_follow_path( s_ascent ); + v_next_pos = ( e_gem_model.origin[0], e_gem_model.origin[1], e_gem_model.origin[2] + 2000 ); + e_gem_model puzzle_orb_move( v_next_pos ); + s_chamber_path = getstruct( str_orb_path, "targetname" ); + str_model = e_gem_model.model; + e_gem_model delete(); + e_gem_model = puzzle_orb_follow_return_path( s_chamber_path, n_element ); + s_final = getstruct( str_final_pos, "targetname" ); + e_gem_model puzzle_orb_move( s_final.origin ); + e_new_gem = spawn( "script_model", s_final.origin ); + e_new_gem setmodel( e_gem_model.model ); + e_new_gem.script_int = n_element; + e_new_gem setclientfield( "element_glow_fx", n_element ); + e_gem_model delete(); + e_new_gem playsound( "zmb_squest_crystal_arrive" ); + e_new_gem playloopsound( "zmb_squest_crystal_charge_loop", 0.1 ); + flag_set( complete_flag ); +} + +chamber_disc_move_to_position() +{ + new_angles = ( self.angles[0], self.position * 90, self.angles[2] ); + self rotateto( new_angles, 1.0, 0.0, 0.0 ); + self playsound( "zmb_crypt_disc_turn" ); + wait( 1.0 * 0.75 ); + self bryce_cake_light_update( 0 ); + wait( 1.0 * 0.25 ); + self bryce_cake_light_update( 0 ); + self playsound( "zmb_crypt_disc_stop" ); + rumble_nearby_players( self.origin, 1000, 2 ); +} + +chamber_discs_move_all_to_position( discs = undefined ) +{ + flag_set( "disc_rotation_active" ); + + if ( !isdefined( discs ) ) + discs = getentarray( "chamber_puzzle_disc", "script_noteworthy" ); + + foreach ( e_disc in discs ) + e_disc chamber_disc_move_to_position(); + + flag_clear( "disc_rotation_active" ); +} + +chamber_disc_get_gem_position( gem_name ) +{ + disc = getent( "crypt_puzzle_disc_main", "targetname" ); + return ( disc.position + level.gem_start_pos[gem_name] ) % 4; +} + +chamber_disc_gem_has_clearance( gem_name ) +{ + gem_position = chamber_disc_get_gem_position( gem_name ); + discs = getentarray( "crypt_puzzle_disc", "script_noteworthy" ); + + foreach ( disc in discs ) + { + if ( !isdefined( disc.targetname ) && !isdefined( "crypt_puzzle_disc_main" ) || isdefined( disc.targetname ) && isdefined( "crypt_puzzle_disc_main" ) && disc.targetname == "crypt_puzzle_disc_main" ) + continue; + + if ( disc.position != gem_position ) + return false; + } + + return true; +} + +chamber_disc_rotate( b_clockwise ) +{ + if ( b_clockwise ) + self.position = ( self.position + 1 ) % 4; + else + self.position = ( self.position + 3 ) % 4; + + self chamber_disc_move_to_position(); +} + +bryce_cake_light_update( b_on = 1 ) +{ + if ( !isdefined( self.n_bryce_cake ) ) + self.n_bryce_cake = 0; + + if ( !b_on ) + self.n_bryce_cake = ( self.n_bryce_cake + 1 ) % 2; + else + self.n_bryce_cake = 2; + + self setclientfield( "bryce_cake", self.n_bryce_cake ); +} + +chamber_discs_randomize() +{ + discs = getentarray( "crypt_puzzle_disc", "script_noteworthy" ); + prev_disc_pos = 0; + + foreach ( disc in discs ) + { + if ( !isdefined( disc.target ) ) + continue; + + disc.position = ( prev_disc_pos + randomintrange( 1, 3 ) ) % 4; + prev_disc_pos = disc.position; + } + + chamber_discs_move_all_to_position( discs ); +} + +chamber_disc_switch_spark() +{ + self setclientfield( "switch_spark", 1 ); + wait 0.5; + self setclientfield( "switch_spark", 0 ); +} + +chamber_disc_trigger_run( e_disc, e_lever, b_clockwise ) +{ + discs_to_rotate = array( e_disc ); + e_lever useanimtree( #animtree ); + n_anim_time = getanimlength( %fxanim_zom_tomb_puzzle_lever_switch_anim ); + + while ( true ) + { + self waittill( "trigger", e_triggerer ); + + if ( !flag( "disc_rotation_active" ) ) + { + flag_set( "disc_rotation_active" ); + e_lever setanim( %fxanim_zom_tomb_puzzle_lever_switch_anim, 1.0, 0.0, 1.0 ); + e_lever playsound( "zmb_crypt_lever" ); + wait( n_anim_time * 0.5 ); + e_lever thread chamber_disc_switch_spark(); + array_thread( discs_to_rotate, ::chamber_disc_rotate, b_clockwise ); + wait 1.0; + e_lever clearanim( %fxanim_zom_tomb_puzzle_lever_switch_anim, 0 ); + flag_clear( "disc_rotation_active" ); + level notify( "vo_try_puzzle_crypt", e_triggerer ); + } + + level notify( "crypt_disc_rotation" ); + } +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_quest_elec.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_quest_elec.gsc new file mode 100644 index 0000000..b8ed634 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_quest_elec.gsc @@ -0,0 +1,417 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zm_tomb_vo; +#include maps\mp\zm_tomb_chamber; +#include maps\mp\zombies\_zm_unitrigger; + +main() +{ + onplayerconnect_callback( ::onplayerconnect ); + flag_init( "electric_puzzle_1_complete" ); + flag_init( "electric_puzzle_2_complete" ); + flag_init( "electric_upgrade_available" ); + maps\mp\zm_tomb_vo::add_puzzle_completion_line( 3, "vox_sam_lightning_puz_solve_0" ); + maps\mp\zm_tomb_vo::add_puzzle_completion_line( 3, "vox_sam_lightning_puz_solve_1" ); + maps\mp\zm_tomb_vo::add_puzzle_completion_line( 3, "vox_sam_lightning_puz_solve_2" ); + level thread maps\mp\zm_tomb_vo::watch_one_shot_line( "puzzle", "try_puzzle", "vo_try_puzzle_lightning1" ); + level thread maps\mp\zm_tomb_vo::watch_one_shot_line( "puzzle", "try_puzzle", "vo_try_puzzle_lightning2" ); + electric_puzzle_1_init(); + electric_puzzle_2_init(); + level thread electric_puzzle_1_run(); + flag_wait( "electric_puzzle_1_complete" ); + playsoundatposition( "zmb_squest_step1_finished", ( 0, 0, 0 ) ); + level thread rumble_players_in_chamber( 5, 3.0 ); + level thread electric_puzzle_2_run(); + flag_wait( "electric_puzzle_2_complete" ); + level thread electric_puzzle_2_cleanup(); +} + +onplayerconnect() +{ + self thread electric_puzzle_watch_staff(); +} + +electric_puzzle_watch_staff() +{ + self endon( "disconnect" ); + a_piano_keys = getstructarray( "piano_key", "script_noteworthy" ); + + while ( true ) + { + self waittill( "projectile_impact", str_weap_name, v_explode_point, n_radius, e_projectile, n_impact ); + + if ( str_weap_name == "staff_lightning_zm" ) + { + if ( !flag( "electric_puzzle_1_complete" ) && maps\mp\zm_tomb_chamber::is_chamber_occupied() ) + { + n_index = get_closest_index( v_explode_point, a_piano_keys, 20.0 ); + + if ( isdefined( n_index ) ) + { + a_piano_keys[n_index] notify( "piano_key_shot" ); + a_players = getplayers(); + + foreach ( e_player in a_players ) + { + if ( e_player hasweapon( "staff_lightning_zm" ) ) + level notify( "vo_try_puzzle_lightning1", e_player ); + } + } + } + } + } +} + +electric_puzzle_1_init() +{ + flag_init( "piano_chord_ringing" ); +} + +electric_puzzle_1_run() +{ + a_piano_keys = getstructarray( "piano_key", "script_noteworthy" ); + level.a_piano_keys_playing = []; + array_thread( a_piano_keys, ::piano_key_run ); + level thread piano_run_chords(); +} + +piano_keys_stop() +{ + level notify( "piano_keys_stop" ); + level.a_piano_keys_playing = []; +} + +show_chord_debug( a_chord_notes ) +{ +/# + if ( !isdefined( a_chord_notes ) ) + a_chord_notes = []; + + a_piano_keys = getstructarray( "piano_key", "script_noteworthy" ); + + foreach ( e_key in a_piano_keys ) + { + e_key notify( "stop_debug_position" ); + + foreach ( note in a_chord_notes ) + { + if ( note == e_key.script_string ) + { + e_key thread puzzle_debug_position(); + break; + } + } + } +#/ +} + +piano_run_chords() +{ + a_chords = getstructarray( "piano_chord", "targetname" ); + + foreach ( s_chord in a_chords ) + { + s_chord.notes = strtok( s_chord.script_string, " " ); + assert( s_chord.notes.size == 3 ); + } + + a_chord_order = array( "a_minor", "e_minor", "d_minor" ); + + foreach ( chord_name in a_chord_order ) + { + s_chord = getstruct( "piano_chord_" + chord_name, "script_noteworthy" ); +/# + show_chord_debug( s_chord.notes ); +#/ + chord_solved = 0; + + while ( !chord_solved ) + { + level waittill( "piano_key_played" ); + + if ( level.a_piano_keys_playing.size == 3 ) + { + correct_notes_playing = 0; + + foreach ( played_note in level.a_piano_keys_playing ) + { + foreach ( requested_note in s_chord.notes ) + { + if ( requested_note == played_note ) + correct_notes_playing++; + } + } + + if ( correct_notes_playing == 3 ) + chord_solved = 1; + else + { + a_players = getplayers(); + + foreach ( e_player in a_players ) + { + if ( e_player hasweapon( "staff_lightning_zm" ) ) + level notify( "vo_puzzle_bad", e_player ); + } + } + } + } + + a_players = getplayers(); + + foreach ( e_player in a_players ) + { + if ( e_player hasweapon( "staff_lightning_zm" ) ) + level notify( "vo_puzzle_good", e_player ); + } + + flag_set( "piano_chord_ringing" ); + rumble_nearby_players( a_chords[0].origin, 1500, 2 ); + wait 4.0; + flag_clear( "piano_chord_ringing" ); + piano_keys_stop(); +/# + show_chord_debug(); +#/ + } + + e_player = get_closest_player( a_chords[0].origin ); + e_player thread maps\mp\zm_tomb_vo::say_puzzle_completion_line( 3 ); + flag_set( "electric_puzzle_1_complete" ); +} + +piano_key_run() +{ + piano_key_note = self.script_string; + + while ( true ) + { + self waittill( "piano_key_shot" ); + + if ( !flag( "piano_chord_ringing" ) ) + { + if ( level.a_piano_keys_playing.size >= 3 ) + piano_keys_stop(); + + self.e_fx = spawn( "script_model", self.origin ); + self.e_fx playloopsound( "zmb_kbd_" + piano_key_note ); + self.e_fx.angles = self.angles; + self.e_fx setmodel( "tag_origin" ); + playfxontag( level._effect["elec_piano_glow"], self.e_fx, "tag_origin" ); + level.a_piano_keys_playing[level.a_piano_keys_playing.size] = piano_key_note; + level notify( "piano_key_played", self, piano_key_note ); + + level waittill( "piano_keys_stop" ); + + self.e_fx delete(); + } + } +} + +electric_puzzle_2_init() +{ + level.electric_relays = []; + level.electric_relays["bunker"] = spawnstruct(); + level.electric_relays["tank_platform"] = spawnstruct(); + level.electric_relays["start"] = spawnstruct(); + level.electric_relays["elec"] = spawnstruct(); + level.electric_relays["ruins"] = spawnstruct(); + level.electric_relays["air"] = spawnstruct(); + level.electric_relays["ice"] = spawnstruct(); + level.electric_relays["village"] = spawnstruct(); + + foreach ( s_relay in level.electric_relays ) + s_relay.connections = []; + + level.electric_relays["tank_platform"].connections[0] = "ruins"; + level.electric_relays["start"].connections[1] = "tank_platform"; + level.electric_relays["elec"].connections[0] = "ice"; + level.electric_relays["ruins"].connections[2] = "chamber"; + level.electric_relays["air"].connections[2] = "start"; + level.electric_relays["ice"].connections[3] = "village"; + level.electric_relays["village"].connections[2] = "air"; + level.electric_relays["bunker"].position = 2; + level.electric_relays["tank_platform"].position = 1; + level.electric_relays["start"].position = 3; + level.electric_relays["elec"].position = 1; + level.electric_relays["ruins"].position = 3; + level.electric_relays["air"].position = 0; + level.electric_relays["ice"].position = 1; + level.electric_relays["village"].position = 1; + a_switches = getentarray( "puzzle_relay_switch", "script_noteworthy" ); + + foreach ( e_switch in a_switches ) + level.electric_relays[e_switch.script_string].e_switch = e_switch; + + array_thread( level.electric_relays, ::relay_switch_run ); +} + +electric_puzzle_2_run() +{ + update_relays(); +} + +electric_puzzle_2_cleanup() +{ + foreach ( s_relay in level.electric_relays ) + { + if ( isdefined( s_relay.trigger_stub ) ) + maps\mp\zombies\_zm_unitrigger::register_unitrigger( s_relay.trigger_stub ); + + if ( isdefined( s_relay.e_switch ) ) + s_relay.e_switch stoploopsound( 0.5 ); + + if ( isdefined( s_relay.e_fx ) ) + s_relay.e_fx delete(); + } +} + +kill_all_relay_power() +{ + foreach ( s_relay in level.electric_relays ) + { + s_relay.receiving_power = 0; + s_relay.sending_power = 0; + } +} + +relay_give_power( s_relay ) +{ + if ( !flag( "electric_puzzle_1_complete" ) ) + return; + + if ( !isdefined( s_relay ) ) + { + kill_all_relay_power(); + s_relay = level.electric_relays["elec"]; + } + + s_relay.receiving_power = 1; + str_target_relay = s_relay.connections[s_relay.position]; + + if ( isdefined( str_target_relay ) ) + { + if ( str_target_relay == "chamber" ) + { + s_relay.e_switch thread maps\mp\zm_tomb_vo::say_puzzle_completion_line( 3 ); + level thread play_puzzle_stinger_on_all_players(); + flag_set( "electric_puzzle_2_complete" ); + } + else + { + s_relay.sending_power = 1; + s_target_relay = level.electric_relays[str_target_relay]; + relay_give_power( s_target_relay ); + } + } +} + +update_relay_fx_and_sound() +{ + if ( !flag( "electric_puzzle_1_complete" ) ) + return; + + foreach ( s_relay in level.electric_relays ) + { + if ( s_relay.sending_power ) + { + if ( isdefined( s_relay.e_fx ) ) + s_relay.e_fx delete(); + + s_relay.e_switch playloopsound( "zmb_squest_elec_switch_hum", 1 ); + continue; + } + + if ( s_relay.receiving_power ) + { + if ( !isdefined( s_relay.e_fx ) ) + { + v_offset = anglestoright( s_relay.e_switch.angles ) * 1.0; + s_relay.e_fx = spawn( "script_model", s_relay.e_switch.origin + v_offset ); + s_relay.e_fx.angles = s_relay.e_switch.angles + vectorscale( ( 0, 0, -1 ), 90.0 ); + s_relay.e_fx setmodel( "tag_origin" ); + playfxontag( level._effect["fx_tomb_sparks"], s_relay.e_fx, "tag_origin" ); + } + + s_relay.e_switch playloopsound( "zmb_squest_elec_switch_spark", 1 ); + continue; + } + + if ( isdefined( s_relay.e_fx ) ) + s_relay.e_fx delete(); + + s_relay.e_switch stoploopsound( 1 ); + } +} + +update_relay_rotation() +{ + self.e_switch rotateto( ( self.position * 90, self.e_switch.angles[1], self.e_switch.angles[2] ), 0.1, 0, 0 ); + self.e_switch playsound( "zmb_squest_elec_switch" ); + + self.e_switch waittill( "rotatedone" ); +} + +update_relays() +{ + relay_give_power(); + update_relay_fx_and_sound(); +} + +relay_switch_run() +{ + assert( isdefined( self.e_switch ) ); + self.trigger_stub = spawnstruct(); + self.trigger_stub.origin = self.e_switch.origin; + self.trigger_stub.radius = 50; + self.trigger_stub.cursor_hint = "HINT_NOICON"; + self.trigger_stub.hint_string = ""; + self.trigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + self.trigger_stub.require_look_at = 1; + maps\mp\zombies\_zm_unitrigger::register_unitrigger( self.trigger_stub, ::relay_unitrigger_think ); + level endon( "electric_puzzle_2_complete" ); + self thread update_relay_rotation(); + n_tries = 0; + + while ( true ) + { + self.trigger_stub waittill( "trigger", e_user ); + + n_tries++; + level notify( "vo_try_puzzle_lightning2", e_user ); + self.position = ( self.position + 1 ) % 4; + str_target_relay = self.connections[self.position]; + + if ( isdefined( str_target_relay ) ) + { + if ( str_target_relay == "village" || str_target_relay == "ruins" ) + level notify( "vo_puzzle_good", e_user ); + } + else if ( n_tries % 8 == 0 ) + level notify( "vo_puzzle_confused", e_user ); + else if ( n_tries % 4 == 0 ) + level notify( "vo_puzzle_bad", e_user ); + + self update_relay_rotation(); + update_relays(); + } +} + +relay_unitrigger_think() +{ + self endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "trigger", player ); + + self.stub notify( "trigger", player ); + } +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_quest_fire.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_quest_fire.gsc new file mode 100644 index 0000000..38af722 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_quest_fire.gsc @@ -0,0 +1,473 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zm_tomb_vo; +#include maps\mp\zm_tomb_chamber; + +main() +{ + flag_init( "fire_puzzle_1_complete" ); + flag_init( "fire_puzzle_2_complete" ); + flag_init( "fire_upgrade_available" ); + onplayerconnect_callback( ::onplayerconnect ); + fire_puzzle_1_init(); + fire_puzzle_2_init(); + maps\mp\zm_tomb_vo::add_puzzle_completion_line( 1, "vox_sam_fire_puz_solve_0" ); + maps\mp\zm_tomb_vo::add_puzzle_completion_line( 1, "vox_sam_fire_puz_solve_1" ); + maps\mp\zm_tomb_vo::add_puzzle_completion_line( 1, "vox_sam_fire_puz_solve_2" ); + level thread maps\mp\zm_tomb_vo::watch_one_shot_line( "puzzle", "try_puzzle", "vo_try_puzzle_fire1" ); + level thread maps\mp\zm_tomb_vo::watch_one_shot_line( "puzzle", "try_puzzle", "vo_try_puzzle_fire2" ); + level thread fire_puzzle_1_run(); + flag_wait( "fire_puzzle_1_complete" ); + playsoundatposition( "zmb_squest_step1_finished", ( 0, 0, 0 ) ); + level thread rumble_players_in_chamber( 5, 3.0 ); + level thread fire_puzzle_1_cleanup(); + level thread fire_puzzle_2_run(); + flag_wait( "fire_puzzle_2_complete" ); + level thread fire_puzzle_2_cleanup(); + flag_wait( "staff_fire_zm_upgrade_unlocked" ); +} + +onplayerconnect() +{ + self thread fire_puzzle_watch_staff(); +} + +#using_animtree("zm_tomb_basic"); + +init_animtree() +{ + scriptmodelsuseanimtree( #animtree ); +} + +fire_puzzle_1_init() +{ + +} + +fire_puzzle_1_run() +{ + level.sacrifice_volumes = getentarray( "fire_sacrifice_volume", "targetname" ); + level.clone_list = []; + level thread clone_cleanup_watch_player_presence(); + array_thread( level.sacrifice_volumes, ::init_sacrifice_volume ); + b_any_volumes_unfinished = 1; + + while ( b_any_volumes_unfinished ) + { + level waittill( "fire_sacrifice_completed" ); + + b_any_volumes_unfinished = 0; + + foreach ( e_volume in level.sacrifice_volumes ) + { + if ( !e_volume.b_gods_pleased ) + b_any_volumes_unfinished = 1; + } + } +/# + iprintlnbold( "Fire Chamber Puzzle Completed" ); +#/ + e_player = get_closest_player( level.sacrifice_volumes[0].origin ); + e_player thread maps\mp\zm_tomb_vo::say_puzzle_completion_line( 1 ); + flag_set( "fire_puzzle_1_complete" ); +} + +fire_puzzle_1_cleanup() +{ + array_delete( level.sacrifice_volumes ); + level.sacrifice_volumes = []; + array_delete( level.clone_list ); + level.clone_list = []; +} + +clone_cleanup_watch_player_presence() +{ + level endon( "fire_puzzle_1_complete" ); + + while ( true ) + { + wait 1.0; + + if ( level.clone_list.size > 0 ) + { + if ( !maps\mp\zm_tomb_chamber::is_chamber_occupied() ) + { + array_delete( level.clone_list ); + level.clone_list = []; + } + } + } +} + +init_sacrifice_volume() +{ + self.b_gods_pleased = 0; + self.num_sacrifices_received = 0; + self.pct_sacrifices_received = 0.0; + self.e_ignition_point = getstruct( self.target, "targetname" ); + self.e_ignition_point thread run_sacrifice_ignition( self ); +} + +run_sacrifice_plinth( e_volume ) +{ + while ( true ) + { + if ( flag( "fire_puzzle_1_complete" ) ) + break; + else if ( isdefined( e_volume ) ) + { + if ( e_volume.pct_sacrifices_received > self.script_float || e_volume.b_gods_pleased ) + break; + } + + wait 0.5; + } + + light_plinth(); +} + +run_sacrifice_ignition( e_volume ) +{ + e_volume ent_flag_init( "flame_on" ); + + if ( flag( "fire_puzzle_1_complete" ) ) + return; + + level endon( "fire_puzzle_1_complete" ); + a_torch_pos = getstructarray( self.target, "targetname" ); + array_thread( a_torch_pos, ::run_sacrifice_plinth, e_volume ); + sndorigin = a_torch_pos[0].origin; + + if ( !isdefined( self.angles ) ) + self.angles = ( 0, 0, 0 ); + + max_hit_distance_sq = 10000; + + while ( !e_volume.b_gods_pleased ) + { + e_volume ent_flag_clear( "flame_on" ); + + level waittill( "fire_staff_explosion", v_point, e_projectile ); + + if ( !maps\mp\zm_tomb_chamber::is_chamber_occupied() ) + continue; + + if ( !e_projectile istouching( e_volume ) ) + continue; + + self.e_fx = spawn( "script_model", self.origin ); + self.e_fx.angles = vectorscale( ( -1, 0, 0 ), 90.0 ); + self.e_fx setmodel( "tag_origin" ); + self.e_fx setclientfield( "barbecue_fx", 1 ); + e_volume ent_flag_set( "flame_on" ); + wait 6.0; + self.e_fx delete(); + } + + level notify( "fire_sacrifice_completed" ); +} + +light_plinth() +{ + e_fx = spawn( "script_model", self.origin ); + e_fx setmodel( "tag_origin" ); + playfxontag( level._effect["fire_torch"], e_fx, "tag_origin" ); + e_fx.angles = vectorscale( ( -1, 0, 0 ), 90.0 ); + e_fx playsound( "zmb_squest_fire_torch_ignite" ); + e_fx playloopsound( "zmb_squest_fire_torch_loop", 0.6 ); + flag_wait( "fire_puzzle_1_complete" ); + wait 30.0; + e_fx stoploopsound( 0.1 ); + e_fx playsound( "zmb_squest_fire_torch_out" ); + e_fx delete(); +} + +is_church_occupied() +{ + return 1; +} + +sacrifice_puzzle_zombie_killed( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) +{ + if ( !( isdefined( level.craftables_crafted["elemental_staff_fire"] ) && level.craftables_crafted["elemental_staff_fire"] ) && getdvarint( _hash_FA81816F ) <= 0 ) + return; + + if ( isdefined( self.is_mechz ) && self.is_mechz ) + return; + + if ( !isdefined( level.sacrifice_volumes ) ) + return; + + if ( !maps\mp\zm_tomb_chamber::is_chamber_occupied() ) + return; + + foreach ( e_volume in level.sacrifice_volumes ) + { + if ( e_volume.b_gods_pleased ) + continue; + + if ( self istouching( e_volume ) ) + { + level notify( "vo_try_puzzle_fire1", attacker ); + self thread fire_sacrifice_death_clone( e_volume ); + return; + } + } +} + +delete_oldest_clone() +{ + if ( level.clone_list.size == 0 ) + return; + + clone = level.clone_list[0]; + arrayremoveindex( level.clone_list, 0, 0 ); + clone delete(); +} + +fire_sacrifice_death_clone( e_sacrifice_volume ) +{ + if ( level.clone_list.size >= 15 ) + level delete_oldest_clone(); + + self ghost(); + clone = self spawn_zombie_clone(); + + if ( self.has_legs ) + clone setanim( %ch_dazed_a_death, 1.0, 0.0, 1.0 ); + else + clone setanim( %ai_zombie_crawl_death_v1, 1.0, 0.0, 1.0 ); + + n_anim_time = getanimlength( %ch_dazed_a_death ); + level.clone_list[level.clone_list.size] = clone; + clone endon( "death" ); + wait( n_anim_time ); + e_sacrifice_volume ent_flag_wait( "flame_on" ); + a_players = getplayers(); + + foreach ( e_player in a_players ) + { + if ( e_player hasweapon( "staff_fire_zm" ) ) + level notify( "vo_puzzle_good", e_player ); + } + + playfx( level._effect["fire_ash_explosion"], clone.origin, anglestoforward( clone.angles ), anglestoup( clone.angles ) ); + e_sacrifice_volume.num_sacrifices_received++; + e_sacrifice_volume.pct_sacrifices_received = e_sacrifice_volume.num_sacrifices_received / 32; + + if ( e_sacrifice_volume.num_sacrifices_received >= 32 ) + e_sacrifice_volume.b_gods_pleased = 1; + + e_sacrifice_volume notify( "sacrifice_received" ); + arrayremovevalue( level.clone_list, clone ); + clone delete(); +} + +spawn_zombie_clone() +{ + clone = spawn( "script_model", self.origin ); + clone.angles = self.angles; + clone setmodel( self.model ); + + if ( isdefined( self.headmodel ) ) + { + clone.headmodel = self.headmodel; + clone attach( clone.headmodel, "", 1 ); + } + + clone useanimtree( #animtree ); + return clone; +} + +fire_puzzle_2_init() +{ + for ( i = 1; i <= 4; i++ ) + { + a_ternary = getentarray( "fire_torch_ternary_group_0" + i, "targetname" ); + + if ( a_ternary.size > 1 ) + { + index_to_save = randomintrange( 0, a_ternary.size ); + a_ternary[index_to_save] ghost(); + arrayremoveindex( a_ternary, index_to_save, 0 ); + array_delete( a_ternary ); + continue; + } + + a_ternary[0] ghost(); + } + + a_torches = getstructarray( "church_torch_target", "script_noteworthy" ); + array_thread( a_torches, ::fire_puzzle_torch_run ); +} + +fire_puzzle_2_run() +{ + a_ternary = getentarray( "fire_torch_ternary", "script_noteworthy" ); + assert( a_ternary.size == 4 ); + + foreach ( e_number in a_ternary ) + { + e_number show(); + e_target_torch = getstruct( e_number.target, "targetname" ); + e_target_torch.b_correct_torch = 1; + e_target_torch thread puzzle_debug_position(); + } +} + +fire_puzzle_2_cleanup() +{ + a_torches = getstructarray( "church_torch_target", "script_noteworthy" ); + + foreach ( s_torch in a_torches ) + { + if ( !isdefined( s_torch.e_fx ) ) + { + s_torch thread fire_puzzle_2_torch_flame(); + wait 0.25; + } + } + + wait 30.0; + + foreach ( s_torch in a_torches ) + { + if ( isdefined( s_torch.e_fx ) ) + { + s_torch.e_fx delete(); + wait 0.25; + } + } +} + +fire_puzzle_2_is_complete() +{ + a_torches = getstructarray( "church_torch_target", "script_noteworthy" ); + wrong_torch = 0; + unlit_torch = 0; + + foreach ( e_torch in a_torches ) + { + if ( isdefined( e_torch.e_fx ) && !e_torch.b_correct_torch ) + wrong_torch = 1; + + if ( !isdefined( e_torch.e_fx ) && e_torch.b_correct_torch ) + unlit_torch = 1; + } + + if ( !isdefined( level.n_torches_lit ) ) + level.n_torches_lit = 0; + + if ( !isdefined( level.n_wrong_torches ) ) + level.n_wrong_torches = 0; + + level.n_torches_lit++; + a_players = getplayers(); + + foreach ( e_player in a_players ) + { + if ( e_player hasweapon( "staff_fire_zm" ) ) + { + if ( level.n_torches_lit % 12 == 0 && !flag( "fire_puzzle_2_complete" ) ) + { + level notify( "vo_puzzle_confused", e_player ); + continue; + } + + if ( wrong_torch && !flag( "fire_puzzle_2_complete" ) ) + { + level.n_wrong_torches++; + + if ( level.n_wrong_torches % 5 == 0 ) + level notify( "vo_puzzle_bad", e_player ); + + continue; + } + + if ( unlit_torch ) + level notify( "vo_puzzle_good", e_player ); + } + } + + return !wrong_torch && !unlit_torch; +} + +fire_puzzle_watch_staff() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "projectile_impact", str_weap_name, v_explode_point, n_radius, e_projectile, n_impact ); + + if ( str_weap_name == "staff_fire_zm" ) + level notify( "fire_staff_explosion", v_explode_point, e_projectile ); + } +} + +fire_puzzle_2_torch_flame() +{ + if ( isdefined( self.e_fx ) ) + self.e_fx delete(); + + self.e_fx = spawn( "script_model", self.origin ); + self.e_fx.angles = vectorscale( ( -1, 0, 0 ), 90.0 ); + self.e_fx setmodel( "tag_origin" ); + playfxontag( level._effect["fire_torch"], self.e_fx, "tag_origin" ); + self.e_fx playsound( "zmb_squest_fire_torch_ignite" ); + self.e_fx playloopsound( "zmb_squest_fire_torch_loop", 0.6 ); + rumble_nearby_players( self.origin, 1500, 2 ); + self.e_fx endon( "death" ); + + if ( fire_puzzle_2_is_complete() && !flag( "fire_puzzle_2_complete" ) ) + { + self.e_fx thread maps\mp\zm_tomb_vo::say_puzzle_completion_line( 1 ); + level thread play_puzzle_stinger_on_all_players(); + flag_set( "fire_puzzle_2_complete" ); + } + + wait 15.0; + self.e_fx stoploopsound( 0.1 ); + self.e_fx playsound( "zmb_squest_fire_torch_out" ); + + if ( !flag( "fire_puzzle_2_complete" ) ) + self.e_fx delete(); +} + +fire_puzzle_torch_run() +{ + level endon( "fire_puzzle_2_complete" ); + self.b_correct_torch = 0; + max_hit_distance_sq = 4096; + + while ( true ) + { + level waittill( "fire_staff_explosion", v_point ); + + if ( !is_church_occupied() ) + continue; + + dist_sq = distancesquared( v_point, self.origin ); + + if ( dist_sq > max_hit_distance_sq ) + continue; + + a_players = getplayers(); + + foreach ( e_player in a_players ) + { + if ( e_player hasweapon( "staff_fire_zm" ) ) + level notify( "vo_try_puzzle_fire2", e_player ); + } + + self thread fire_puzzle_2_torch_flame(); + wait 2.0; + } +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_quest_ice.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_quest_ice.gsc new file mode 100644 index 0000000..d620dcc --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_quest_ice.gsc @@ -0,0 +1,324 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zm_tomb_vo; + +main() +{ + precachemodel( "p6_zm_tm_note_rock_01_anim" ); + flag_init( "ice_puzzle_1_complete" ); + flag_init( "ice_puzzle_2_complete" ); + flag_init( "ice_upgrade_available" ); + flag_init( "ice_tile_flipping" ); + maps\mp\zm_tomb_vo::add_puzzle_completion_line( 4, "vox_sam_ice_puz_solve_0" ); + maps\mp\zm_tomb_vo::add_puzzle_completion_line( 4, "vox_sam_ice_puz_solve_1" ); + maps\mp\zm_tomb_vo::add_puzzle_completion_line( 4, "vox_sam_ice_puz_solve_2" ); + level thread maps\mp\zm_tomb_vo::watch_one_shot_line( "puzzle", "try_puzzle", "vo_try_puzzle_water1" ); + level thread maps\mp\zm_tomb_vo::watch_one_shot_line( "puzzle", "try_puzzle", "vo_try_puzzle_water2" ); + ice_puzzle_1_init(); + level thread ice_puzzle_2_init(); + level thread ice_puzzle_1_run(); + flag_wait( "ice_puzzle_1_complete" ); + playsoundatposition( "zmb_squest_step1_finished", ( 0, 0, 0 ) ); + level thread rumble_players_in_chamber( 5, 3.0 ); + ice_puzzle_1_cleanup(); + level thread ice_puzzle_2_run(); + flag_wait( "ice_puzzle_2_complete" ); + flag_wait( "staff_water_zm_upgrade_unlocked" ); +} + +ice_puzzle_1_init() +{ + ice_tiles_randomize(); + a_ceiling_tile_brushes = getentarray( "ice_ceiling_tile", "script_noteworthy" ); + level.unsolved_tiles = a_ceiling_tile_brushes; + + foreach ( tile in a_ceiling_tile_brushes ) + { + tile.showing_tile_side = 0; + tile.value = int( tile.script_string ); + tile thread ceiling_tile_flip(); + tile thread ceiling_tile_process_damage(); + } + + a_ice_ternary_digit_brushes = getentarray( "ice_chamber_digit", "targetname" ); + + foreach ( digit in a_ice_ternary_digit_brushes ) + { + digit ghost(); + digit notsolid(); + } + + level.ternary_digits = []; + level.ternary_digits[0] = array( -1, 0, -1 ); + level.ternary_digits[1] = array( -1, 1, -1 ); + level.ternary_digits[2] = array( -1, 2, -1 ); + level.ternary_digits[3] = array( 1, -1, 0 ); + level.ternary_digits[4] = array( 1, -1, 1 ); + level.ternary_digits[5] = array( 1, -1, 2 ); + level.ternary_digits[6] = array( 2, -1, 0 ); + level.ternary_digits[7] = array( 2, -1, 1 ); + level.ternary_digits[8] = array( 2, -1, 2 ); + level.ternary_digits[9] = array( 1, 0, 0 ); + level.ternary_digits[10] = array( 1, 0, 1 ); + level.ternary_digits[11] = array( 1, 0, 2 ); + level thread update_ternary_display(); +} + +ice_puzzle_1_cleanup() +{ + a_ceiling_tile_brushes = getentarray( "ice_ceiling_tile", "script_noteworthy" ); + + foreach ( tile in a_ceiling_tile_brushes ) + tile thread ceiling_tile_flip( 0 ); + + a_ice_ternary_digit_brushes = getentarray( "ice_chamber_digit", "targetname" ); + array_delete( a_ice_ternary_digit_brushes ); +} + +ice_tiles_randomize() +{ + a_original_tiles = getentarray( "ice_tile_original", "targetname" ); + a_original_positions = []; + + foreach ( e_tile in a_original_tiles ) + a_original_positions[a_original_positions.size] = e_tile.origin; + + a_unused_tiles = getentarray( "ice_ceiling_tile", "script_noteworthy" ); + n_total_tiles = a_unused_tiles.size; + + foreach ( v_pos in a_original_positions ) + { + e_tile = random( a_unused_tiles ); + arrayremovevalue( a_unused_tiles, e_tile, 0 ); + e_tile moveto( v_pos, 0.5, 0.1, 0.1 ); + + e_tile waittill( "movedone" ); + } + + assert( a_unused_tiles.size == n_total_tiles - a_original_positions.size ); + array_delete( a_unused_tiles ); +} + +reset_tiles() +{ + a_ceiling_tile_brushes = getentarray( "ice_ceiling_tile", "script_noteworthy" ); + + foreach ( tile in a_ceiling_tile_brushes ) + tile thread ceiling_tile_flip( 1 ); +} + +update_ternary_display() +{ + a_ice_ternary_digit_brushes = getentarray( "ice_chamber_digit", "targetname" ); + level endon( "ice_puzzle_1_complete" ); + + while ( true ) + { + level waittill( "update_ice_chamber_digits", newval ); + + foreach ( digit in a_ice_ternary_digit_brushes ) + { + digit ghost(); + + if ( isdefined( newval ) ) + { + digit_slot = int( digit.script_noteworthy ); + shown_value = level.ternary_digits[newval][digit_slot]; + digit_value = int( digit.script_string ); + + if ( shown_value == digit_value ) + digit show(); + } + } + } +} + +change_ice_gem_value() +{ + ice_gem = getent( "ice_chamber_gem", "targetname" ); + + if ( level.unsolved_tiles.size != 0 ) + { + correct_tile = random( level.unsolved_tiles ); + ice_gem.value = correct_tile.value; + level notify( "update_ice_chamber_digits", ice_gem.value ); + } + else + level notify( "update_ice_chamber_digits", -1 ); +} + +process_gem_shooting() +{ + level endon( "ice_puzzle_1_complete" ); + ice_gem = getent( "ice_chamber_gem", "targetname" ); + ice_gem.value = -1; + ice_gem setcandamage( 1 ); + + while ( true ) + { + self waittill( "damage", damage, attacker, direction_vec, point, mod, tagname, modelname, partname, weaponname ); + + if ( weaponname == "staff_water_zm" ) + change_ice_gem_value(); + } +} + +ice_puzzle_1_run() +{ + level thread process_gem_shooting(); + change_ice_gem_value(); +} + +ceiling_tile_flip( b_flip_to_tile_side = !self.showing_tile_side ) +{ + if ( b_flip_to_tile_side == self.showing_tile_side ) + return; + + self.showing_tile_side = !self.showing_tile_side; + self rotateroll( 180, 0.5, 0.1, 0.1 ); + self playsound( "zmb_squest_ice_tile_flip" ); + + if ( !self.showing_tile_side ) + arrayremovevalue( level.unsolved_tiles, self, 0 ); + else + level.unsolved_tiles[level.unsolved_tiles.size] = self; + + if ( level.unsolved_tiles.size == 0 && !flag( "ice_puzzle_1_complete" ) ) + { + self thread maps\mp\zm_tomb_vo::say_puzzle_completion_line( 4 ); + flag_set( "ice_puzzle_1_complete" ); + } + + self waittill( "rotatedone" ); +} + +ceiling_tile_process_damage() +{ + level endon( "ice_puzzle_1_complete" ); + ice_gem = getent( "ice_chamber_gem", "targetname" ); + self setcandamage( 1 ); + ice_gem setcandamage( 1 ); + + while ( true ) + { + self waittill( "damage", damage, attacker, direction_vec, point, mod, tagname, modelname, partname, weaponname ); + + if ( issubstr( weaponname, "water" ) && self.showing_tile_side && !flag( "ice_tile_flipping" ) ) + { + level notify( "vo_try_puzzle_water1", attacker ); + flag_set( "ice_tile_flipping" ); + + if ( ice_gem.value == self.value ) + { + level notify( "vo_puzzle_good", attacker ); + self ceiling_tile_flip( 0 ); + rumble_nearby_players( self.origin, 1500, 2 ); + wait 0.2; + } + else + { + level notify( "vo_puzzle_bad", attacker ); + reset_tiles(); + rumble_nearby_players( self.origin, 1500, 2 ); + wait 2.0; + } + + change_ice_gem_value(); + flag_clear( "ice_tile_flipping" ); + } + else + level notify( "vo_puzzle_confused", attacker ); + } +} + +ice_puzzle_2_init() +{ + +} + +ice_puzzle_2_run() +{ + a_stone_positions = getstructarray( "puzzle_stone_water", "targetname" ); + level.ice_stones_remaining = a_stone_positions.size; + + foreach ( s_stone in a_stone_positions ) + { + s_stone thread ice_stone_run(); + wait_network_frame(); + } +} + +ice_stone_run() +{ + v_up = anglestoup( self.angles ); + v_spawn_pos = self.origin - 64 * v_up; + self.e_model = spawn( "script_model", v_spawn_pos ); + self.e_model.angles = self.angles; + self.e_model setmodel( "p6_zm_tm_note_rock_01_anim" ); + self.e_model moveto( self.origin, 1.0, 0.5, 0.5 ); + playfx( level._effect["digging"], self.origin ); + self.e_model setcandamage( 1 ); + + for ( has_tried = 0; !flag( "ice_puzzle_2_complete" ); has_tried = 1 ) + { + self.e_model waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); + + level notify( "vo_try_puzzle_water2", inflictor ); + + if ( issubstr( weaponname, "water" ) ) + { + level notify( "vo_puzzle_good", inflictor ); + break; + } + else if ( has_tried ) + level notify( "vo_puzzle_bad", inflictor ); + } + + self.e_model setclientfield( "stone_frozen", 1 ); + playsoundatposition( "zmb_squest_ice_stone_freeze", self.origin ); + + while ( !flag( "ice_puzzle_2_complete" ) ) + { + self.e_model waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); + + if ( !issubstr( weaponname, "staff" ) && issubstr( type, "BULLET" ) ) + { + level notify( "vo_puzzle_good", inflictor ); + break; + } + else + level notify( "vo_puzzle_confused", inflictor ); + } + + self.e_model delete(); + playfx( level._effect["ice_explode"], self.origin, anglestoforward( self.angles ), anglestoup( self.angles ) ); + playsoundatposition( "zmb_squest_ice_stone_shatter", self.origin ); + level.ice_stones_remaining--; + + if ( level.ice_stones_remaining <= 0 && !flag( "ice_puzzle_2_complete" ) ) + { + flag_set( "ice_puzzle_2_complete" ); + e_player = get_closest_player( self.origin ); + e_player thread maps\mp\zm_tomb_vo::say_puzzle_completion_line( 4 ); + level thread play_puzzle_stinger_on_all_players(); + level.weather_snow = 5; + level.weather_rain = 0; + + foreach ( player in getplayers() ) + player set_weather_to_player(); + + wait 5.0; + level.weather_snow = 0; + level.weather_rain = 0; + + foreach ( player in getplayers() ) + player set_weather_to_player(); + } +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_standard.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_standard.gsc new file mode 100644 index 0000000..64eda50 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_standard.gsc @@ -0,0 +1,30 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zombies\_zm_magicbox; + +precache() +{ + +} + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "tomb" ); + maps\mp\zombies\_zm_game_module::set_current_game_module( level.game_module_standard_index ); + flag_wait( "initial_blackscreen_passed" ); + flag_set( "power_on" ); + zm_treasure_chest_init(); +} + +zm_treasure_chest_init() +{ + chest1 = getstruct( "start_chest", "script_noteworthy" ); + level.chests = []; + level.chests[level.chests.size] = chest1; + maps\mp\zombies\_zm_magicbox::treasure_chest_init( "start_chest" ); +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_tank.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_tank.gsc new file mode 100644 index 0000000..eb98990 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_tank.gsc @@ -0,0 +1,1702 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zm_tomb_vo; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zm_tomb_amb; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\gametypes_zm\_hud; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zombies\_zm_weap_staff_fire; +#include maps\mp\zombies\_zm_spawner; + +tank_precache() +{ + +} + +init() +{ + registerclientfield( "vehicle", "tank_tread_fx", 14000, 1, "int" ); + registerclientfield( "vehicle", "tank_flamethrower_fx", 14000, 2, "int" ); + registerclientfield( "vehicle", "tank_cooldown_fx", 14000, 2, "int" ); + tank_precache(); + onplayerconnect_callback( ::onplayerconnect ); + level.enemy_location_override_func = ::enemy_location_override; + level.adjust_enemyoverride_func = ::adjust_enemyoverride; + level.zm_mantle_over_40_move_speed_override = ::zm_mantle_over_40_move_speed_override; + level.vh_tank = getent( "tank", "targetname" ); + level.vh_tank tank_setup(); + level.vh_tank thread tankuseanimtree(); + level.vh_tank thread tank_discovery_vo(); + level thread maps\mp\zm_tomb_vo::watch_occasional_line( "tank", "tank_flame_zombie", "vo_tank_flame_zombie" ); + level thread maps\mp\zm_tomb_vo::watch_occasional_line( "tank", "tank_leave", "vo_tank_leave" ); + level thread maps\mp\zm_tomb_vo::watch_occasional_line( "tank", "tank_cooling", "vo_tank_cooling" ); +} + +onplayerconnect() +{ + self thread onplayerspawned(); +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self.b_already_on_tank = 0; + } +} + +tank_discovery_vo() +{ + max_dist_sq = 640000.0; + flag_wait( "activate_zone_village_0" ); + + while ( true ) + { + a_players = getplayers(); + + foreach ( e_player in a_players ) + { + dist_sq = distance2dsquared( level.vh_tank.origin, e_player.origin ); + height_diff = abs( level.vh_tank.origin[2] - e_player.origin[2] ); + + if ( dist_sq < max_dist_sq && height_diff < 150 && !( isdefined( e_player.isspeaking ) && e_player.isspeaking ) ) + { + e_player maps\mp\zombies\_zm_audio::create_and_play_dialog( "tank", "discover_tank" ); + return; + } + } + + wait 0.1; + } +} + +tank_drop_powerups() +{ + flag_wait( "start_zombie_round_logic" ); + a_drop_nodes = []; + + for ( i = 0; i < 3; i++ ) + { + drop_num = i + 1; + a_drop_nodes[i] = getvehiclenode( "tank_powerup_drop_" + drop_num, "script_noteworthy" ); + a_drop_nodes[i].next_drop_round = level.round_number + i; + s_drop = getstruct( "tank_powerup_drop_" + drop_num, "targetname" ); + a_drop_nodes[i].drop_pos = s_drop.origin; + } + + a_possible_powerups = array( "nuke", "full_ammo", "zombie_blood", "insta_kill", "fire_sale", "double_points" ); + + while ( true ) + { + self ent_flag_wait( "tank_moving" ); + + foreach ( node in a_drop_nodes ) + { + dist_sq = distance2dsquared( node.origin, self.origin ); + + if ( dist_sq < 250000 ) + { + a_players = get_players_on_tank( 1 ); + + if ( a_players.size > 0 ) + { + if ( level.staff_part_count["elemental_staff_lightning"] == 0 && level.round_number >= node.next_drop_round ) + { + str_powerup = random( a_possible_powerups ); + level thread maps\mp\zombies\_zm_powerups::specific_powerup_drop( str_powerup, node.drop_pos ); + node.next_drop_round = level.round_number + randomintrange( 8, 12 ); + continue; + } + + level notify( "sam_clue_tank", self ); + } + } + } + + wait 2.0; + } +} + +zm_mantle_over_40_move_speed_override() +{ + traversealias = "barrier_walk"; + + switch ( self.zombie_move_speed ) + { + case "chase_bus": + traversealias = "barrier_sprint"; + break; + default: +/# + assertmsg( "Zombie move speed of '" + self.zombie_move_speed + "' is not supported for mantle_over_40." ); +#/ + } + + return traversealias; +} + +#using_animtree("zm_tomb_tank"); + +init_animtree() +{ + scriptmodelsuseanimtree( #animtree ); +} + +tankuseanimtree() +{ + self useanimtree( #animtree ); +} + +drawtag( tag, opcolor ) +{ +/# + org = self gettagorigin( tag ); + ang = self gettagangles( tag ); + box( org, vectorscale( ( -1, -1, 0 ), 8.0 ), vectorscale( ( 1, 1, 1 ), 8.0 ), ang[1], opcolor, 1, 0, 1 ); +#/ +} + +draw_tank_tag( tag, opcolor ) +{ +/# + self endon( "death" ); + + for (;;) + { + if ( self tank_tag_is_valid( tag ) ) + drawtag( tag.str_tag, vectorscale( ( 0, 1, 0 ), 255.0 ) ); + else + drawtag( tag.str_tag, vectorscale( ( 1, 0, 0 ), 255.0 ) ); + + wait 0.05; + } +#/ +} + +tank_debug_tags() +{ +/# + setdvar( "debug_tank", "off" ); + adddebugcommand( "devgui_cmd \"Zombies:2/Tomb:1/Tank Debug:5\" \"debug_tank on\"\n" ); + flag_wait( "start_zombie_round_logic" ); + a_spots = getstructarray( "tank_jump_down_spots", "script_noteworthy" ); + + while ( true ) + { + if ( getdvar( _hash_55B41FB9 ) == "on" ) + { + if ( !( isdefined( self.tags_drawing ) && self.tags_drawing ) ) + { + foreach ( s_tag in self.a_tank_tags ) + self thread draw_tank_tag( s_tag ); + + self.tags_drawing = 1; + } + + ang = self.angles; + + foreach ( s_spot in a_spots ) + { + org = self tank_get_jump_down_offset( s_spot ); + box( org, vectorscale( ( -1, -1, 0 ), 4.0 ), vectorscale( ( 1, 1, 1 ), 4.0 ), ang[1], vectorscale( ( 1, 1, 0 ), 128.0 ), 1, 0, 1 ); + } + + a_zombies = get_round_enemy_array(); + + foreach ( e_zombie in a_zombies ) + { + if ( isdefined( e_zombie.tank_state ) ) + print3d( e_zombie.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), e_zombie.tank_state, vectorscale( ( 1, 0, 0 ), 255.0 ), 1 ); + } + } + + wait 0.05; + } +#/ +} + +tank_jump_down_store_offset( s_pos ) +{ + v_up = anglestoup( self.angles ); + v_right = anglestoright( self.angles ); + v_fwd = anglestoforward( self.angles ); + offset = s_pos.origin - self.origin; + s_pos.tank_offset = ( vectordot( v_fwd, offset ), vectordot( v_right, offset ), vectordot( v_up, offset ) ); +} + +tank_get_jump_down_offset( s_pos ) +{ + v_up = anglestoup( self.angles ); + v_right = anglestoright( self.angles ); + v_fwd = anglestoforward( self.angles ); + v_offset = s_pos.tank_offset; + return self.origin + v_offset[0] * v_fwd + v_offset[1] * v_right + v_offset[2] * v_up; +} + +tank_setup() +{ + self ent_flag_init( "tank_moving" ); + self ent_flag_init( "tank_activated" ); + self ent_flag_init( "tank_cooldown" ); + level.tank_boxes_enabled = 0; + self.tag_occupied = []; + self.health = 1000; + self.n_players_on = 0; + self.chase_pos_time = 0; + self hidepart( "tag_flamethrower" ); + self setmovingplatformenabled( 1 ); + self.e_roof = getent( "vol_on_tank_watch", "targetname" ); + self.e_roof enablelinkto(); + self.e_roof linkto( self ); + self.t_use = getent( "trig_use_tank", "targetname" ); + self.t_use enablelinkto(); + self.t_use linkto( self ); + self.t_use sethintstring( &"ZM_TOMB_X2AT", 500 ); + self.t_kill = spawn( "trigger_box", ( -8192, -4300, 0 ), 0, 200, 150, 128 ); + self.t_kill enablelinkto(); + self.t_kill linkto( self ); + m_tank_path_blocker = getent( "tank_path_blocker", "targetname" ); + m_tank_path_blocker delete(); + a_tank_jump_down_spots = getstructarray( "tank_jump_down_spots", "script_noteworthy" ); + + foreach ( s_spot in a_tank_jump_down_spots ) + self tank_jump_down_store_offset( s_spot ); + + self thread players_on_tank_update(); + self thread zombies_watch_tank(); + self thread tank_station(); + self thread tank_run_flamethrowers(); + self thread do_treadfx(); + self thread do_cooldown_fx(); + self thread tank_drop_powerups(); +/# + self thread tank_debug_tags(); +#/ + self playloopsound( "zmb_tank_idle", 0.5 ); +} + +do_cooldown_fx() +{ + self endon( "death" ); + flag_wait( "start_zombie_round_logic" ); + + while ( true ) + { + self setclientfield( "tank_cooldown_fx", 2 ); + self ent_flag_wait( "tank_moving" ); + self setclientfield( "tank_cooldown_fx", 0 ); + self ent_flag_wait( "tank_cooldown" ); + self setclientfield( "tank_cooldown_fx", 1 ); + self ent_flag_waitopen( "tank_cooldown" ); + } +} + +do_treadfx() +{ + self endon( "death" ); + + while ( true ) + { + self ent_flag_wait( "tank_moving" ); + self setclientfield( "tank_tread_fx", 1 ); + self ent_flag_waitopen( "tank_moving" ); + self setclientfield( "tank_tread_fx", 0 ); + } +} + +disconnect_reconnect_paths( vh_tank ) +{ + self endon( "death" ); + + while ( true ) + { + self disconnectpaths(); + wait 1; + + while ( vh_tank getspeedmph() < 1 ) + wait 0.05; + + self connectpaths(); + wait 0.5; + } +} + +tank_rumble_update() +{ + while ( self.b_already_on_tank ) + { + if ( level.vh_tank ent_flag( "tank_moving" ) ) + self setclientfieldtoplayer( "player_rumble_and_shake", 6 ); + else + self setclientfieldtoplayer( "player_rumble_and_shake", 0 ); + + wait 1.0; + } + + self setclientfieldtoplayer( "player_rumble_and_shake", 0 ); +} + +players_on_tank_update() +{ + flag_wait( "start_zombie_round_logic" ); + self thread tank_disconnect_paths(); + + while ( true ) + { + a_players = getplayers(); + + foreach ( e_player in a_players ) + { + if ( is_player_valid( e_player ) ) + { + if ( isdefined( e_player.b_already_on_tank ) && !e_player.b_already_on_tank && e_player entity_on_tank() ) + { + e_player.b_already_on_tank = 1; + self.n_players_on++; + + if ( self ent_flag( "tank_cooldown" ) ) + level notify( "vo_tank_cooling", e_player ); + + e_player thread tank_rumble_update(); + e_player thread tank_rides_around_map_achievement_watcher(); + e_player thread tank_force_crouch_from_prone_after_on_tank(); + e_player allowcrouch( 1 ); + e_player allowprone( 0 ); + continue; + } + + if ( isdefined( e_player.b_already_on_tank ) && e_player.b_already_on_tank && !e_player entity_on_tank() ) + { + e_player.b_already_on_tank = 0; + self.n_players_on--; + level notify( "vo_tank_leave", e_player ); + e_player notify( "player_jumped_off_tank" ); + e_player setclientfieldtoplayer( "player_rumble_and_shake", 0 ); + e_player allowprone( 1 ); + } + } + } + + wait 0.05; + } +} + +tank_force_crouch_from_prone_after_on_tank() +{ + self endon( "disconnect" ); + self endon( "bled_out" ); + wait 1; + + if ( "prone" == self getstance() ) + self setstance( "crouch" ); +} + +tank_rides_around_map_achievement_watcher() +{ + self endon( "death_or_disconnect" ); + self endon( "player_jumped_off_tank" ); + + if ( level.vh_tank ent_flag( "tank_moving" ) ) + level.vh_tank ent_flag_waitopen( "tank_moving" ); + + str_starting_location = level.vh_tank.str_location_current; + + do + { + level.vh_tank ent_flag_wait( "tank_moving" ); + level.vh_tank ent_flag_waitopen( "tank_moving" ); + } + while ( str_starting_location != level.vh_tank.str_location_current ); + + self notify( "rode_tank_around_map" ); +} + +entity_on_tank() +{ + if ( self istouching( level.vh_tank.e_roof ) ) + return true; + + return false; +} + +tank_station() +{ + self thread tank_watch_use(); + self thread tank_movement(); + a_call_boxes = getentarray( "trig_tank_station_call", "targetname" ); + + foreach ( t_call_box in a_call_boxes ) + t_call_box thread tank_call_box(); + + self.t_use waittill( "trigger" ); + + level.tank_boxes_enabled = 1; +} + +tank_left_behind() +{ + wait 4.0; + n_valid_dist_sq = 1000000; + a_riders = get_players_on_tank( 1 ); + + if ( a_riders.size == 0 ) + return; + + e_rider = random( a_riders ); + a_players = getplayers(); + a_victims = []; + v_tank_fwd = anglestoforward( self.angles ); + + foreach ( e_player in a_players ) + { + if ( isdefined( e_player.b_already_on_tank ) && e_player.b_already_on_tank ) + continue; + + if ( distance2dsquared( e_player.origin, self.origin ) > n_valid_dist_sq ) + continue; + + v_to_tank = self.origin - e_player.origin; + v_to_tank = vectornormalize( v_to_tank ); + + if ( vectordot( v_to_tank, v_tank_fwd ) < 0 ) + continue; + + v_player_fwd = anglestoforward( e_player.angles ); + + if ( vectordot( v_player_fwd, v_to_tank ) < 0 ) + continue; + + a_victims[a_victims.size] = e_player; + } + + if ( a_victims.size == 0 ) + return; + + e_victim = random( a_victims ); + maps\mp\zm_tomb_vo::tank_left_behind_vo( e_victim, e_rider ); +} + +tank_watch_use() +{ + while ( true ) + { + self.t_use waittill( "trigger", e_player ); + + level thread maps\mp\zm_tomb_amb::sndplaystingerwithoverride( "mus_event_tank_ride", 70 ); + cooling_down = self ent_flag( "tank_cooldown" ); + + if ( is_player_valid( e_player ) && e_player.score >= 500 && !cooling_down ) + { + self ent_flag_set( "tank_activated" ); + self ent_flag_set( "tank_moving" ); + e_player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "tank", "tank_buy" ); + self thread tank_left_behind(); + e_player maps\mp\zombies\_zm_score::minus_to_player_score( 500 ); + + self waittill( "tank_stop" ); + + self playsound( "zmb_tank_stop" ); + self stoploopsound( 1.5 ); + + if ( isdefined( self.b_call_box_used ) && self.b_call_box_used ) + { + self.b_call_box_used = 0; + self activate_tank_wait_with_no_cost(); + } + } + } +} + +activate_tank_wait_with_no_cost() +{ + self endon( "call_box_used" ); + self.b_no_cost = 1; + + self.t_use waittill( "trigger", e_player ); + + self ent_flag_set( "tank_activated" ); + self ent_flag_set( "tank_moving" ); + self.b_no_cost = 0; +} + +tank_call_box() +{ + while ( true ) + { + self waittill( "trigger", e_player ); + + cooling_down = level.vh_tank ent_flag( "tank_cooldown" ); + + if ( !level.vh_tank ent_flag( "tank_activated" ) && e_player.score >= 500 && !cooling_down ) + { + level.vh_tank notify( "call_box_used" ); + level.vh_tank.b_call_box_used = 1; + e_switch = getent( self.target, "targetname" ); + self setinvisibletoall(); + wait 0.05; + e_switch rotatepitch( -180, 0.5 ); + + e_switch waittill( "rotatedone" ); + + e_switch rotatepitch( 180, 0.5 ); + level.vh_tank.t_use useby( e_player ); + + level.vh_tank waittill( "tank_stop" ); + } + } +} + +tank_call_boxes_update() +{ + str_loc = level.vh_tank.str_location_current; + a_trigs = getentarray( "trig_tank_station_call", "targetname" ); + moving = level.vh_tank ent_flag( "tank_moving" ); + cooling = level.vh_tank ent_flag( "tank_cooldown" ); + + foreach ( trig in a_trigs ) + { + at_this_station = trig.script_noteworthy == "call_box_" + str_loc; + + if ( moving ) + { + trig setvisibletoall(); + trig sethintstring( &"ZM_TOMB_TNKM" ); + continue; + } + + if ( !level.tank_boxes_enabled || at_this_station ) + { + trig setinvisibletoall(); + continue; + } + + if ( cooling ) + { + trig setvisibletoall(); + trig sethintstring( &"ZM_TOMB_TNKC" ); + continue; + } + + trig setvisibletoall(); + trig sethintstring( &"ZM_TOMB_X2CT", 500 ); + } +} + +tank_movement() +{ + n_path_start = getvehiclenode( "tank_start", "targetname" ); + self attachpath( n_path_start ); + self startpath(); + self thread follow_path( n_path_start ); + self setspeedimmediate( 0 ); + self.a_locations = array( "village", "bunkers" ); + n_location_index = 0; + self.str_location_current = self.a_locations[n_location_index]; + tank_call_boxes_update(); + + while ( true ) + { + self ent_flag_wait( "tank_activated" ); +/# + iprintln( "The tank is moving." ); +#/ + self thread tank_connect_paths(); + self playsound( "evt_tank_call" ); + self setspeedimmediate( 8 ); + self.t_use setinvisibletoall(); + tank_call_boxes_update(); + self thread tank_kill_players(); + self thread tank_cooldown_timer(); + + self waittill( "tank_stop" ); + + self ent_flag_set( "tank_cooldown" ); + self.t_use setvisibletoall(); + self.t_use sethintstring( &"ZM_TOMB_TNKC" ); + self ent_flag_clear( "tank_moving" ); + self thread tank_disconnect_paths(); + self setspeedimmediate( 0 ); + n_location_index++; + + if ( n_location_index == self.a_locations.size ) + n_location_index = 0; + + self.str_location_current = self.a_locations[n_location_index]; + tank_call_boxes_update(); + self wait_for_tank_cooldown(); + self ent_flag_clear( "tank_cooldown" ); + + if ( isdefined( self.b_no_cost ) && self.b_no_cost ) + self.t_use sethintstring( &"ZM_TOMB_X2ATF" ); + else + self.t_use sethintstring( &"ZM_TOMB_X2AT", 500 ); + + self ent_flag_clear( "tank_activated" ); + tank_call_boxes_update(); + } +} + +tank_disconnect_paths() +{ + self endon( "death" ); + + while ( self getspeedmph() > 0 ) + wait 0.05; + + self disconnectpaths(); +} + +tank_connect_paths() +{ + self endon( "death" ); + self connectpaths(); +} + +tank_kill_players() +{ + self endon( "tank_cooldown" ); + + while ( true ) + { + self.t_kill waittill( "trigger", player ); + + player thread tank_ran_me_over(); + wait 0.05; + } +} + +tank_ran_me_over() +{ + self disableinvulnerability(); + self dodamage( self.health + 1000, self.origin ); + a_nodes = getnodesinradiussorted( self.origin, 256, 0, 72, "path", 15 ); + + foreach ( node in a_nodes ) + { + str_zone = maps\mp\zombies\_zm_zonemgr::get_zone_from_position( node.origin ); + + if ( !isdefined( str_zone ) ) + continue; + + if ( !( isdefined( node.b_player_downed_here ) && node.b_player_downed_here ) ) + { + start_wait = 0.0; + black_screen_wait = 4.0; + fade_in_time = 0.01; + fade_out_time = 0.2; + self thread maps\mp\gametypes_zm\_hud::fadetoblackforxsec( start_wait, black_screen_wait, fade_in_time, fade_out_time, "black" ); + node.b_player_downed_here = 1; + e_linker = spawn( "script_origin", self.origin ); + self playerlinkto( e_linker ); + e_linker moveto( node.origin + vectorscale( ( 0, 0, 1 ), 8.0 ), 1.0 ); + e_linker wait_to_unlink( self ); + node.b_player_downed_here = undefined; + e_linker delete(); + return; + } + } +} + +wait_to_unlink( player ) +{ + player endon( "disconnect" ); + wait 4; + self unlink(); +} + +tank_cooldown_timer() +{ + self.n_cooldown_timer = 0; + str_location_original = self.str_location_current; + self playsound( "zmb_tank_start" ); + self stoploopsound( 0.4 ); + wait 0.4; + self playloopsound( "zmb_tank_loop", 1 ); + + while ( str_location_original == self.str_location_current ) + { + self.n_cooldown_timer += self.n_players_on * 0.05; + wait 0.05; + } +} + +wait_for_tank_cooldown() +{ + self thread snd_fuel(); + + if ( self.n_cooldown_timer < 2 ) + self.n_cooldown_timer = 2; + else if ( self.n_cooldown_timer > 120 ) + self.n_cooldown_timer = 120; + + wait( self.n_cooldown_timer ); + level notify( "stp_cd" ); + self playsound( "zmb_tank_ready" ); + self playloopsound( "zmb_tank_idle" ); +} + +snd_fuel() +{ + snd_cd_ent = spawn( "script_origin", self.origin ); + snd_cd_ent linkto( self ); + wait 4; + snd_cd_ent playsound( "zmb_tank_fuel_start" ); + wait 0.5; + snd_cd_ent playloopsound( "zmb_tank_fuel_loop" ); + + level waittill( "stp_cd" ); + + snd_cd_ent stoploopsound( 0.5 ); + snd_cd_ent playsound( "zmb_tank_fuel_end" ); + wait 2; + snd_cd_ent delete(); +} + +follow_path( n_path_start ) +{ + self endon( "death" ); + assert( isdefined( n_path_start ), "vehicle_path() called without a path" ); + self notify( "newpath" ); + self endon( "newpath" ); + n_next_point = n_path_start; + + while ( isdefined( n_next_point ) ) + { + self.n_next_node = getvehiclenode( n_next_point.target, "targetname" ); + + self waittill( "reached_node", n_next_point ); + + self.n_current = n_next_point; + n_next_point notify( "trigger", self ); + + if ( isdefined( n_next_point.script_noteworthy ) ) + { + self notify( n_next_point.script_noteworthy ); + self notify( "noteworthy", n_next_point.script_noteworthy, n_next_point ); + } + + waittillframeend; + } +} + +tank_tag_array_setup() +{ + a_tank_tags = []; + a_tank_tags[0] = spawnstruct(); + a_tank_tags[0].str_tag = "window_left_1_jmp_jnt"; + a_tank_tags[0].disabled_at_bunker = 1; + a_tank_tags[0].disabled_at_church = 1; + a_tank_tags[0].side = "left"; + a_tank_tags[1] = spawnstruct(); + a_tank_tags[1].str_tag = "window_left_2_jmp_jnt"; + a_tank_tags[1].disabled_at_bunker = 1; + a_tank_tags[1].disabled_at_church = 1; + a_tank_tags[1].side = "left"; + a_tank_tags[2] = spawnstruct(); + a_tank_tags[2].str_tag = "window_left_3_jmp_jnt"; + a_tank_tags[2].disabled_at_bunker = 1; + a_tank_tags[2].disabled_at_church = 1; + a_tank_tags[2].side = "left"; + a_tank_tags[3] = spawnstruct(); + a_tank_tags[3].str_tag = "window_right_front_jmp_jnt"; + a_tank_tags[3].side = "front"; + a_tank_tags[4] = spawnstruct(); + a_tank_tags[4].str_tag = "window_right_1_jmp_jnt"; + a_tank_tags[4].side = "right"; + a_tank_tags[5] = spawnstruct(); + a_tank_tags[5].str_tag = "window_right_2_jmp_jnt"; + a_tank_tags[5].disabled_at_church = 1; + a_tank_tags[5].side = "right"; + a_tank_tags[6] = spawnstruct(); + a_tank_tags[6].str_tag = "window_right_3_jmp_jnt"; + a_tank_tags[6].disabled_at_church = 1; + a_tank_tags[6].side = "right"; + a_tank_tags[7] = spawnstruct(); + a_tank_tags[7].str_tag = "window_left_rear_jmp_jnt"; + a_tank_tags[7].side = "rear"; + return a_tank_tags; +} + +get_players_on_tank( valid_targets_only = 0 ) +{ + a_players_on_tank = []; + a_players = getplayers(); + + foreach ( e_player in a_players ) + { + if ( is_player_valid( e_player ) && ( isdefined( e_player.b_already_on_tank ) && e_player.b_already_on_tank ) ) + { + if ( !valid_targets_only || !( isdefined( e_player.ignoreme ) && e_player.ignoreme ) && is_player_valid( e_player ) ) + a_players_on_tank[a_players_on_tank.size] = e_player; + } + } + + return a_players_on_tank; +} + +mechz_tag_array_setup() +{ + a_mechz_tags = []; + a_mechz_tags[0] = spawnstruct(); + a_mechz_tags[0].str_tag = "tag_mechz_1"; + a_mechz_tags[0].in_use = 0; + a_mechz_tags[0].in_use_by = undefined; + a_mechz_tags[1] = spawnstruct(); + a_mechz_tags[1].str_tag = "tag_mechz_2"; + a_mechz_tags[1].in_use = 0; + a_mechz_tags[1].in_use_by = undefined; + a_mechz_tags[2] = spawnstruct(); + a_mechz_tags[2].str_tag = "tag_mechz_3"; + a_mechz_tags[2].in_use = 0; + a_mechz_tags[2].in_use_by = undefined; + a_mechz_tags[3] = spawnstruct(); + a_mechz_tags[3].str_tag = "tag_mechz_4"; + a_mechz_tags[3].in_use = 0; + a_mechz_tags[3].in_use_by = undefined; + return a_mechz_tags; +} + +mechz_tag_in_use_cleanup( mechz, tag_struct_index ) +{ + mechz notify( "kill_mechz_tag_in_use_cleanup" ); + mechz endon( "kill_mechz_tag_in_use_cleanup" ); + mechz waittill_any_or_timeout( 30, "death", "kill_ft", "tank_flamethrower_attack_complete" ); + self.a_mechz_tags[tag_struct_index].in_use = 0; + self.a_mechz_tags[tag_struct_index].in_use_by = undefined; +} + +get_closest_mechz_tag_on_tank( mechz, target_org ) +{ + best_dist = -1; + best_tag_index = undefined; + + for ( i = 0; i < self.a_mechz_tags.size; i++ ) + { + if ( self.a_mechz_tags[i].in_use && self.a_mechz_tags[i].in_use_by != mechz ) + continue; + + s_tag = self.a_mechz_tags[i]; + tag_org = self gettagorigin( s_tag.str_tag ); + dist = distancesquared( tag_org, target_org ); + + if ( dist < best_dist || best_dist < 0 ) + { + best_dist = dist; + best_tag_index = i; + } + } + + if ( isdefined( best_tag_index ) ) + { + for ( i = 0; i < self.a_mechz_tags.size; i++ ) + { + if ( self.a_mechz_tags[i].in_use && self.a_mechz_tags[i].in_use_by == mechz ) + { + self.a_mechz_tags[i].in_use = 0; + self.a_mechz_tags[i].in_use_by = undefined; + } + } + + self.a_mechz_tags[best_tag_index].in_use = 1; + self.a_mechz_tags[best_tag_index].in_use_by = mechz; + self thread mechz_tag_in_use_cleanup( mechz, best_tag_index ); + return self.a_mechz_tags[best_tag_index].str_tag; + } + + return undefined; +} + +tank_tag_is_valid( s_tag, disable_sides = 0 ) +{ + if ( disable_sides ) + { + if ( s_tag.side == "right" || s_tag.side == "left" ) + return 0; + } + + if ( self ent_flag( "tank_moving" ) ) + { + if ( s_tag.side == "front" ) + return 0; + + if ( !isdefined( self.n_next_node ) ) + return 1; + + if ( !isdefined( self.n_next_node.script_string ) ) + return 1; + + if ( issubstr( self.n_next_node.script_string, "disable_" + s_tag.side ) ) + return 0; + else + return 1; + } + + at_church = self.str_location_current == "village"; + at_bunker = self.str_location_current == "bunkers"; + + if ( at_church ) + return !( isdefined( s_tag.disabled_at_church ) && s_tag.disabled_at_church ); + else if ( at_bunker ) + return !( isdefined( s_tag.disabled_at_bunker ) && s_tag.disabled_at_bunker ); + + return 1; +} + +zombies_watch_tank() +{ + a_tank_tags = tank_tag_array_setup(); + self.a_tank_tags = a_tank_tags; + a_mechz_tags = mechz_tag_array_setup(); + self.a_mechz_tags = a_mechz_tags; + + while ( true ) + { + a_zombies = get_round_enemy_array(); + + foreach ( e_zombie in a_zombies ) + { + if ( !isdefined( e_zombie.tank_state ) ) + e_zombie thread tank_zombie_think(); + } + + wait_network_frame(); + } +} + +start_chasing_tank() +{ + self.tank_state = "tank_chase"; +} + +stop_chasing_tank() +{ + self.tank_state = "none"; + self.str_tank_tag = undefined; + self.tank_tag = undefined; + self.b_on_tank = 0; + self.tank_re_eval_time = undefined; + self notify( "change_goal" ); + + if ( isdefined( self.zombie_move_speed_original ) ) + self set_zombie_run_cycle( self.zombie_move_speed_original ); +} + +choose_tag_and_chase() +{ + s_tag = self get_closest_valid_tank_tag(); + + if ( isdefined( s_tag ) ) + { + self.str_tank_tag = s_tag.str_tag; + self.tank_tag = s_tag; + self.tank_state = "tag_chase"; + } + else + wait 1.0; +} + +choose_tag_and_jump_down() +{ + s_tag = self get_closest_valid_tank_tag( 1 ); + + if ( isdefined( s_tag ) ) + { + self.str_tank_tag = s_tag.str_tag; + self.tank_tag = getstruct( s_tag.str_tag + "_down_start", "targetname" ); + self.tank_state = "exit_tank"; + self set_zombie_run_cycle( "walk" ); + assert( isdefined( self.tank_tag ) ); + } + else + wait 1.0; +} + +climb_tag() +{ + self endon( "death" ); + self.tank_state = "climbing"; + self.b_on_tank = 1; + str_tag = self.str_tank_tag; + self linkto( level.vh_tank, str_tag ); + v_tag_origin = level.vh_tank gettagorigin( str_tag ); + v_tag_angles = level.vh_tank gettagangles( str_tag ); + str_anim_alias = str_tag; + + if ( level.vh_tank ent_flag( "tank_moving" ) && str_tag == "window_left_rear_jmp_jnt" ) + str_anim_alias = "window_rear_long_jmp_jnt"; + + if ( !self.has_legs ) + str_anim_alias += "_crawler"; + + n_anim_index = self getanimsubstatefromasd( "zm_tank_jump_up", str_anim_alias ); + self.b_climbing_tank = 1; + self animscripted( v_tag_origin, v_tag_angles, "zm_tank_jump_up", n_anim_index ); + self zombieanimnotetrackthink( "tank_jump_up" ); + self unlink(); + self.b_climbing_tank = 0; + level.vh_tank tank_mark_tag_occupied( str_tag, self, 0 ); + set_zombie_on_tank(); +} + +set_zombie_on_tank() +{ + self setgoalpos( self.origin ); + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); + self.tank_state = "on_tank"; +} + +jump_down_tag() +{ + self endon( "death" ); + self.tank_state = "jumping_down"; + str_tag = self.str_tank_tag; + self linkto( level.vh_tank, str_tag ); + v_tag_origin = level.vh_tank gettagorigin( str_tag ); + v_tag_angles = level.vh_tank gettagangles( str_tag ); + self setgoalpos( v_tag_origin ); + str_anim_alias = str_tag; + + if ( !self.has_legs ) + str_anim_alias += "_crawler"; + + n_anim_index = self getanimsubstatefromasd( "zm_tank_jump_down", str_anim_alias ); + self.b_climbing_tank = 1; + self animscripted( v_tag_origin, v_tag_angles, "zm_tank_jump_down", n_anim_index ); + self zombieanimnotetrackthink( "tank_jump_down" ); + self unlink(); + self.b_climbing_tank = 0; + level.vh_tank tank_mark_tag_occupied( str_tag, self, 0 ); + self.pursuing_tank_tag = 0; + stop_chasing_tank(); +} + +watch_zombie_fall_off_tank() +{ + self endon( "death" ); + + while ( true ) + { + if ( self.tank_state == "on_tank" || self.tank_state == "exit_tank" ) + { + if ( !self entity_on_tank() ) + stop_chasing_tank(); + + wait 0.5; + } + else if ( self.tank_state == "none" ) + { + if ( self entity_on_tank() ) + set_zombie_on_tank(); + + wait 5.0; + } + + wait_network_frame(); + } +} + +in_range_2d( v1, v2, range, vert_allowance ) +{ + if ( abs( v1[2] - v2[2] ) > vert_allowance ) + return 0; + + return distance2dsquared( v1, v2 ) < range * range; +} + +tank_zombie_think() +{ + self endon( "death" ); + self.tank_state = "none"; + self thread watch_zombie_fall_off_tank(); + think_time = 0.5; + + while ( true ) + { + a_players_on_tank = get_players_on_tank( 1 ); + tag_range = 32.0; + + if ( level.vh_tank ent_flag( "tank_moving" ) ) + tag_range = 64.0; + + switch ( self.tank_state ) + { + case "none": + if ( !isdefined( self.ai_state ) || self.ai_state != "find_flesh" ) + break; + + if ( a_players_on_tank.size == 0 ) + break; + + if ( is_player_valid( self.favoriteenemy ) ) + { + if ( isdefined( self.favoriteenemy.b_already_on_tank ) && self.favoriteenemy.b_already_on_tank ) + self start_chasing_tank(); + } + else + { + a_players = getplayers(); + a_eligible_players = []; + + foreach ( e_player in a_players ) + { + if ( !( isdefined( e_player.ignoreme ) && e_player.ignoreme ) && is_player_valid( e_player ) ) + a_eligible_players[a_eligible_players.size] = e_player; + } + + if ( a_eligible_players.size > 0 ) + { + if ( a_players_on_tank.size == a_players.size ) + self.favoriteenemy = random( a_eligible_players ); + else + self.favoriteenemy = tomb_get_closest_player_using_paths( self.origin, a_eligible_players ); + } + } + + break; + case "tank_chase": + if ( a_players_on_tank.size == 0 ) + { + self stop_chasing_tank(); + break; + } + + dist_sq_to_tank = distancesquared( self.origin, level.vh_tank.origin ); + + if ( dist_sq_to_tank < 250000 ) + self choose_tag_and_chase(); + + if ( self.has_legs && self.zombie_move_speed != "super_sprint" && !( isdefined( self.is_traversing ) && self.is_traversing ) && self.ai_state == "find_flesh" ) + { + if ( level.vh_tank ent_flag( "tank_moving" ) ) + { + self set_zombie_run_cycle( "super_sprint" ); + self thread zombie_chasing_tank_turn_crawler(); + } + } + + break; + case "tag_chase": + if ( !isdefined( self.tank_re_eval_time ) ) + self.tank_re_eval_time = 6.0; + else if ( self.tank_re_eval_time <= 0.0 ) + { + if ( self entity_on_tank() ) + self set_zombie_on_tank(); + else + self stop_chasing_tank(); + + break; + } + + self notify( "stop_path_to_tag" ); + + if ( a_players_on_tank.size == 0 ) + { + self stop_chasing_tank(); + break; + } + + dist_sq_to_tank = distancesquared( self.origin, level.vh_tank.origin ); + + if ( dist_sq_to_tank > 1000000 || a_players_on_tank.size == 0 ) + { + start_chasing_tank(); + break; + } + + v_tag = level.vh_tank gettagorigin( self.str_tank_tag ); + + if ( in_range_2d( v_tag, self.origin, tag_range, tag_range ) ) + { + tag_claimed = level.vh_tank tank_mark_tag_occupied( self.str_tank_tag, self, 1 ); + + if ( tag_claimed ) + self thread climb_tag(); + } + else + { + self thread update_zombie_goal_pos( self.str_tank_tag, "stop_path_to_tag" ); + self.tank_re_eval_time -= think_time; + } + + break; + case "climbing": + break; + case "on_tank": + if ( a_players_on_tank.size == 0 ) + choose_tag_and_jump_down(); + else if ( !isdefined( self.favoriteenemy ) || !is_player_valid( self.favoriteenemy, 1 ) ) + self.favoriteenemy = random( a_players_on_tank ); + + break; + case "exit_tank": + self notify( "stop_exit_tank" ); + + if ( a_players_on_tank.size > 0 ) + { + set_zombie_on_tank(); + break; + } + + v_tag_pos = level.vh_tank tank_get_jump_down_offset( self.tank_tag ); + + if ( in_range_2d( v_tag_pos, self.origin, tag_range, tag_range ) ) + { + tag_claimed = level.vh_tank tank_mark_tag_occupied( self.str_tank_tag, self, 1 ); + + if ( tag_claimed ) + self thread jump_down_tag(); + } + else + { + self thread update_zombie_goal_pos( self.tank_tag.targetname, "stop_exit_tank" ); + wait 1.0; + } + + break; + case "jumping_down": + break; + } + + wait( think_time ); + } +} + +update_zombie_goal_pos( str_position, stop_notify ) +{ + self notify( "change_goal" ); + self endon( "death" ); + self endon( "goal" ); + self endon( "near_goal" ); + self endon( "change_goal" ); + + if ( isdefined( stop_notify ) ) + self endon( stop_notify ); + + s_script_origin = getstruct( str_position, "targetname" ); + + while ( self.tank_state != "none" ) + { + if ( isdefined( s_script_origin ) ) + { + v_origin = level.vh_tank tank_get_jump_down_offset( s_script_origin ); +/# + if ( getdvar( _hash_55B41FB9 ) == "on" ) + line( self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), v_origin ); +#/ + } + else + v_origin = level.vh_tank gettagorigin( str_position ); + + self setgoalpos( v_origin ); + wait 0.05; + } +} + +zombie_chasing_tank_turn_crawler() +{ + self notify( "tank_watch_turn_crawler" ); + self endon( "tank_watch_turn_crawler" ); + self endon( "death" ); + + while ( self.has_legs ) + wait 0.05; + + self set_zombie_run_cycle( self.zombie_move_speed_original ); +} + +tank_mark_tag_occupied( str_tag, ai_occupier, set_occupied ) +{ + current_occupier = self.tag_occupied[str_tag]; + min_dist_sq_to_tag = 1024; + + if ( set_occupied ) + { + if ( !isdefined( current_occupier ) ) + { + self.tag_occupied[str_tag] = ai_occupier; + return true; + } + else if ( ai_occupier == current_occupier || !isalive( current_occupier ) ) + { + dist_sq_to_tag = distance2dsquared( ai_occupier.origin, self gettagorigin( str_tag ) ); + + if ( dist_sq_to_tag < min_dist_sq_to_tag ) + { + self.tag_occupied[str_tag] = ai_occupier; + return true; + } + } + + return false; + } + else if ( !isdefined( current_occupier ) ) + return true; + else if ( current_occupier != ai_occupier ) + return false; + else + { + self.tag_occupied[str_tag] = undefined; + return true; + } +} + +is_tag_crowded( str_tag ) +{ + v_tag = self gettagorigin( str_tag ); + a_zombies = getaiarray( level.zombie_team ); + n_nearby_zombies = 0; + + foreach ( e_zombie in a_zombies ) + { + dist_sq = distancesquared( v_tag, e_zombie.origin ); + + if ( dist_sq < 4096 ) + { + if ( isdefined( e_zombie.tank_state ) ) + { + if ( e_zombie.tank_state != "tank_chase" && e_zombie.tank_state != "tag_chase" && e_zombie.tank_state != "none" ) + continue; + } + + n_nearby_zombies++; + + if ( n_nearby_zombies >= 4 ) + return true; + } + } + + return false; +} + +get_closest_valid_tank_tag( jumping_down = 0 ) +{ + closest_dist_sq = 100000000; + closest_tag = undefined; + disable_sides = 0; + + if ( jumping_down && level.vh_tank ent_flag( "tank_moving" ) ) + disable_sides = 1; + + foreach ( s_tag in level.vh_tank.a_tank_tags ) + { + if ( level.vh_tank tank_tag_is_valid( s_tag, disable_sides ) ) + { + v_tag = level.vh_tank gettagorigin( s_tag.str_tag ); + dist_sq = distancesquared( self.origin, v_tag ); + + if ( dist_sq < closest_dist_sq ) + { + if ( !level.vh_tank is_tag_crowded( s_tag.str_tag ) ) + { + closest_tag = s_tag; + closest_dist_sq = dist_sq; + } + } + } + } + + return closest_tag; +} + +zombieanimnotetrackthink( str_anim_notetrack_notify, chunk, node ) +{ + self endon( "death" ); + + while ( true ) + { + self waittill( str_anim_notetrack_notify, str_notetrack ); + + if ( str_notetrack == "end" ) + return; + } +} + +tank_run_flamethrowers() +{ + self thread tank_flamethrower( "tag_flash", 1 ); + wait 0.25; + self thread tank_flamethrower( "tag_flash_gunner1", 2 ); + wait 0.25; + self thread tank_flamethrower( "tag_flash_gunner2", 3 ); +} + +tank_flamethrower_get_targets( str_tag, n_flamethrower_id ) +{ + a_zombies = getaiarray( level.zombie_team ); + a_targets = []; + v_tag_pos = self gettagorigin( str_tag ); + v_tag_angles = self gettagangles( str_tag ); + v_tag_fwd = anglestoforward( v_tag_angles ); + v_kill_pos = v_tag_pos + v_tag_fwd * 80; + + foreach ( ai_zombie in a_zombies ) + { + dist_sq = distance2dsquared( ai_zombie.origin, v_kill_pos ); + + if ( dist_sq > 80 * 80 ) + continue; + + if ( isdefined( ai_zombie.tank_state ) ) + { + if ( ai_zombie.tank_state == "climbing" || ai_zombie.tank_state == "jumping_down" ) + continue; + } + + v_to_zombie = vectornormalize( ai_zombie.origin - v_tag_pos ); + n_dot = vectordot( v_tag_fwd, ai_zombie.origin ); + + if ( n_dot < 0.95 ) + continue; + + a_targets[a_targets.size] = ai_zombie; + } + + return a_targets; +} + +tank_flamethrower_cycle_targets( str_tag, n_flamethrower_id ) +{ + self endon( "flamethrower_stop_" + n_flamethrower_id ); + + while ( true ) + { + a_targets = tank_flamethrower_get_targets( str_tag, n_flamethrower_id ); + + foreach ( ai in a_targets ) + { + if ( isalive( ai ) ) + { + self setturrettargetent( ai ); + wait 1.0; + } + } + + wait 1.0; + } +} + +tank_flamethrower( str_tag, n_flamethrower_id ) +{ + zombieless_waits = 0; + time_between_flames = randomfloatrange( 3.0, 6.0 ); + + while ( true ) + { + wait 1.0; + + if ( n_flamethrower_id == 1 ) + self setturrettargetvec( self.origin + anglestoforward( self.angles ) * 1000 ); + + self ent_flag_wait( "tank_moving" ); + a_targets = tank_flamethrower_get_targets( str_tag, n_flamethrower_id ); + + if ( a_targets.size > 0 || zombieless_waits > time_between_flames ) + { + self setclientfield( "tank_flamethrower_fx", n_flamethrower_id ); + self thread flamethrower_damage_zombies( n_flamethrower_id, str_tag ); + + if ( n_flamethrower_id == 1 ) + self thread tank_flamethrower_cycle_targets( str_tag, n_flamethrower_id ); + + if ( a_targets.size > 0 ) + wait 6.0; + else + wait 3.0; + + self setclientfield( "tank_flamethrower_fx", 0 ); + self notify( "flamethrower_stop_" + n_flamethrower_id ); + zombieless_waits = 0; + time_between_flames = randomfloatrange( 3.0, 6.0 ); + } + else + zombieless_waits++; + } +} + +flamethrower_damage_zombies( n_flamethrower_id, str_tag ) +{ + self endon( "flamethrower_stop_" + n_flamethrower_id ); + + while ( true ) + { + a_targets = tank_flamethrower_get_targets( str_tag, n_flamethrower_id ); + + foreach ( ai_zombie in a_targets ) + { + if ( isalive( ai_zombie ) ) + { + a_players = get_players_on_tank( 1 ); + + if ( a_players.size > 0 ) + level notify( "vo_tank_flame_zombie", random( a_players ) ); + + if ( str_tag == "tag_flash" ) + { + ai_zombie do_damage_network_safe( self, ai_zombie.health, "zm_tank_flamethrower", "MOD_BURNED" ); + ai_zombie thread zombie_gib_guts(); + } + else + ai_zombie thread maps\mp\zombies\_zm_weap_staff_fire::flame_damage_fx( "zm_tank_flamethrower", self ); + + wait 0.05; + } + } + + wait_network_frame(); + } +} + +enemy_location_override() +{ + self endon( "death" ); + enemy = self.favoriteenemy; + location = enemy.origin; + tank = level.vh_tank; + + if ( isdefined( self.is_mechz ) && self.is_mechz ) + return location; + + if ( isdefined( self.item ) ) + return self.origin; + + if ( is_true( self.reroute ) ) + { + if ( isdefined( self.reroute_origin ) ) + location = self.reroute_origin; + } + + if ( isdefined( self.tank_state ) ) + { + if ( self.tank_state == "tank_chase" ) + self.goalradius = 128; + else if ( self.tank_state == "tag_chase" ) + self.goalradius = 16; + else + self.goalradius = 32; + + if ( self.tank_state == "tank_chase" || self.tank_state == "none" && ( isdefined( enemy.b_already_on_tank ) && enemy.b_already_on_tank ) ) + { + tank_front = tank gettagorigin( "window_right_front_jmp_jnt" ); + tank_back = tank gettagorigin( "window_left_rear_jmp_jnt" ); + + if ( tank ent_flag( "tank_moving" ) ) + { + self.ignoreall = 1; + + if ( !( isdefined( self.close_to_tank ) && self.close_to_tank ) ) + { + if ( gettime() != tank.chase_pos_time ) + { + tank.chase_pos_time = gettime(); + tank.chase_pos_index = 0; + tank_forward = vectornormalize( anglestoforward( level.vh_tank.angles ) ); + tank_right = vectornormalize( anglestoright( level.vh_tank.angles ) ); + tank.chase_pos = []; + tank.chase_pos[0] = level.vh_tank.origin + vectorscale( tank_forward, -164 ); + tank.chase_pos[1] = tank_front; + tank.chase_pos[2] = tank_back; + } + + location = tank.chase_pos[tank.chase_pos_index]; + tank.chase_pos_index++; + + if ( tank.chase_pos_index >= 3 ) + tank.chase_pos_index = 0; + + dist_sq = distancesquared( self.origin, location ); + + if ( dist_sq < 4096 ) + self.close_to_tank = 1; + } + + return location; + } + + self.close_to_tank = 0; + front_dist = distance2dsquared( enemy.origin, level.vh_tank.origin ); + back_dist = distance2dsquared( enemy.origin, level.vh_tank.origin ); + + if ( front_dist < back_dist ) + location = tank_front; + else + location = tank_back; + + self.ignoreall = 0; + } + else if ( self.tank_state == "tag_chase" ) + location = level.vh_tank gettagorigin( self.str_tank_tag ); + else if ( self.tank_state == "exit_tank" ) + location = level.vh_tank tank_get_jump_down_offset( self.tank_tag ); + } + + return location; +} + +adjust_enemyoverride() +{ + self endon( "death" ); + location = self.enemyoverride[0]; + tank = level.vh_tank; + ent = self.enemyoverride[1]; + return location; +} + +closest_player_tank( origin, players ) +{ + if ( isdefined( level.vh_tank ) && level.vh_tank.n_players_on > 0 || !( isdefined( level.calc_closest_player_using_paths ) && level.calc_closest_player_using_paths ) ) + player = getclosest( origin, players ); + else + player = get_closest_player_using_paths( origin, players ); + + if ( isdefined( player ) ) + return player; +} + +zombie_on_tank_death_animscript_callback( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + if ( isdefined( self.exploding ) && self.exploding ) + { + self notify( "killanimscript" ); + self maps\mp\zombies\_zm_spawner::reset_attack_spot(); + return true; + } + + if ( isdefined( self ) ) + { + level maps\mp\zombies\_zm_spawner::zombie_death_points( self.origin, meansofdeath, shitloc, attacker, self ); + launchvector = undefined; + self thread maps\mp\zombies\_zm_spawner::zombie_ragdoll_then_explode( launchvector, attacker ); + self notify( "killanimscript" ); + self maps\mp\zombies\_zm_spawner::reset_attack_spot(); + return true; + } + + return false; +} + +tomb_get_path_length_to_tank() +{ + tank_front = level.vh_tank gettagorigin( "window_right_front_jmp_jnt" ) + vectorscale( ( 0, 0, 1 ), 30.0 ); + tank_back = level.vh_tank gettagorigin( "window_left_rear_jmp_jnt" ) + vectorscale( ( 0, 0, 1 ), 30.0 ); + path_length_1 = self calcpathlength( tank_front ); + path_length_2 = self calcpathlength( tank_back ); + + if ( path_length_1 < path_length_2 ) + return path_length_1; + else + return path_length_2; +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_teleporter.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_teleporter.gsc new file mode 100644 index 0000000..2214797 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_teleporter.gsc @@ -0,0 +1,408 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zm_tomb_utility; +#include maps\mp\gametypes_zm\_hud; +#include maps\mp\zm_tomb_vo; +#include maps\mp\zombies\_zm_score; + +#using_animtree("fxanim_props_dlc4"); + +teleporter_init() +{ + registerclientfield( "scriptmover", "teleporter_fx", 14000, 1, "int" ); + precacheshellshock( "lava" ); + level.teleport = []; + level.n_active_links = 0; + level.n_countdown = 0; + level.n_teleport_delay = 0; + level.teleport_cost = 0; + level.n_teleport_cooldown = 0; + level.is_cooldown = 0; + level.n_active_timer = -1; + level.n_teleport_time = 0; + level.a_teleport_models = []; + a_entrance_models = getentarray( "teleport_model", "targetname" ); + + foreach ( e_model in a_entrance_models ) + { + e_model useanimtree( #animtree ); + level.a_teleport_models[e_model.script_int] = e_model; + } + + array_thread( a_entrance_models, ::teleporter_samantha_chamber_line ); + a_portal_frames = getentarray( "portal_exit_frame", "script_noteworthy" ); + level.a_portal_exit_frames = []; + + foreach ( e_frame in a_portal_frames ) + { + e_frame useanimtree( #animtree ); + e_frame ghost(); + level.a_portal_exit_frames[e_frame.script_int] = e_frame; + } + + level.a_teleport_exits = []; + a_exits = getstructarray( "portal_exit", "script_noteworthy" ); + + foreach ( s_portal in a_exits ) + level.a_teleport_exits[s_portal.script_int] = s_portal; + + level.a_teleport_exit_triggers = []; + a_trigs = getstructarray( "chamber_exit_trigger", "script_noteworthy" ); + + foreach ( s_trig in a_trigs ) + level.a_teleport_exit_triggers[s_trig.script_int] = s_trig; + + a_s_teleporters = getstructarray( "trigger_teleport_pad", "targetname" ); + array_thread( a_s_teleporters, ::run_chamber_entrance_teleporter ); + spawn_stargate_fx_origins(); + root = %root; + i = %fxanim_zom_tomb_portal_open_anim; + i = %fxanim_zom_tomb_portal_collapse_anim; +} + +init_animtree() +{ + scriptmodelsuseanimtree( #animtree ); +} + +teleporter_samantha_chamber_line() +{ + max_dist_sq = 640000.0; + level.sam_chamber_line_played = 0; + flag_wait( "samantha_intro_done" ); + + while ( !level.sam_chamber_line_played ) + { + a_players = getplayers(); + + foreach ( e_player in a_players ) + { + dist_sq = distance2dsquared( self.origin, e_player.origin ); + height_diff = abs( self.origin[2] - e_player.origin[2] ); + + if ( dist_sq < max_dist_sq && height_diff < 150 && !( isdefined( e_player.isspeaking ) && e_player.isspeaking ) ) + { + level thread play_teleporter_samantha_chamber_line( e_player ); + return; + } + } + + wait 0.1; + } +} + +play_teleporter_samantha_chamber_line( e_player ) +{ + if ( level.sam_chamber_line_played ) + return; + + level.sam_chamber_line_played = 1; + flag_waitopen( "story_vo_playing" ); + flag_set( "story_vo_playing" ); + set_players_dontspeak( 1 ); + maps\mp\zm_tomb_vo::samanthasay( "vox_sam_enter_chamber_1_0", e_player, 1 ); + maps\mp\zm_tomb_vo::samanthasay( "vox_sam_enter_chamber_2_0", e_player ); + set_players_dontspeak( 0 ); + flag_clear( "story_vo_playing" ); +} + +run_chamber_exit( n_enum ) +{ + s_portal = level.a_teleport_exits[n_enum]; + s_activate_pos = level.a_teleport_exit_triggers[n_enum]; + e_portal_frame = level.a_portal_exit_frames[n_enum]; + e_portal_frame show(); + str_building_flag = e_portal_frame.targetname + "_building"; + flag_init( str_building_flag ); + s_activate_pos.trigger_stub = tomb_spawn_trigger_radius( s_activate_pos.origin, 50.0, 1 ); + s_activate_pos.trigger_stub set_unitrigger_hint_string( &"ZM_TOMB_TELE" ); + s_portal.target = s_activate_pos.target; + s_portal.origin = e_portal_frame gettagorigin( "fx_portal_jnt" ); + s_portal.angles = e_portal_frame gettagangles( "fx_portal_jnt" ); + s_portal.angles = ( s_portal.angles[0], s_portal.angles[1] + 180, s_portal.angles[2] ); + str_fx = get_teleport_fx_from_enum( n_enum ); + collapse_time = getanimlength( %fxanim_zom_tomb_portal_collapse_anim ); + open_time = getanimlength( %fxanim_zom_tomb_portal_open_anim ); + flag_wait( "start_zombie_round_logic" ); + + while ( true ) + { + s_activate_pos.trigger_stub waittill( "trigger", e_player ); + + if ( !is_player_valid( e_player ) ) + continue; + + if ( e_player.score < level.teleport_cost ) + continue; + + s_activate_pos.trigger_stub set_unitrigger_hint_string( "" ); + s_activate_pos.trigger_stub trigger_off(); + + if ( level.teleport_cost > 0 ) + e_player maps\mp\zombies\_zm_score::minus_to_player_score( level.teleport_cost ); + + e_portal_frame playloopsound( "zmb_teleporter_loop_pre", 1 ); + e_portal_frame setanim( %fxanim_zom_tomb_portal_open_anim, 1.0, 0.1, 1 ); + flag_set( str_building_flag ); + e_portal_frame thread whirlwind_rumble_nearby_players( str_building_flag ); + wait( open_time ); + e_portal_frame setanim( %fxanim_zom_tomb_portal_open_1frame_anim, 1.0, 0.1, 1 ); + wait_network_frame(); + flag_clear( str_building_flag ); + e_fx = spawn( "script_model", s_portal.origin ); + e_fx.angles = s_portal.angles; + e_fx setmodel( "tag_origin" ); + e_fx setclientfield( "element_glow_fx", n_enum + 4 ); + rumble_nearby_players( e_fx.origin, 1000, 2 ); + e_portal_frame playloopsound( "zmb_teleporter_loop_post", 1 ); + s_portal thread teleporter_radius_think(); + wait 20.0; + e_portal_frame setanim( %fxanim_zom_tomb_portal_collapse_anim, 1.0, 0.1, 1 ); + e_portal_frame stoploopsound( 0.5 ); + e_portal_frame playsound( "zmb_teleporter_anim_collapse_pew" ); + s_portal notify( "teleporter_radius_stop" ); + e_fx setclientfield( "element_glow_fx", 0 ); + wait( collapse_time ); + e_fx delete(); + s_activate_pos.trigger_stub trigger_on(); + s_activate_pos.trigger_stub set_unitrigger_hint_string( &"ZM_TOMB_TELE" ); + } +} + +run_chamber_entrance_teleporter() +{ + self endon( "death" ); + fx_glow = get_teleport_fx_from_enum( self.script_int ); + e_model = level.a_teleport_models[self.script_int]; + self.origin = e_model gettagorigin( "fx_portal_jnt" ); + self.angles = e_model gettagangles( "fx_portal_jnt" ); + self.angles = ( self.angles[0], self.angles[1] + 180, self.angles[2] ); + self.trigger_stub = tomb_spawn_trigger_radius( self.origin - vectorscale( ( 0, 0, 1 ), 30.0 ), 50.0 ); + flag_init( "enable_teleporter_" + self.script_int ); + str_building_flag = "teleporter_building_" + self.script_int; + flag_init( str_building_flag ); + collapse_time = getanimlength( %fxanim_zom_tomb_portal_collapse_anim ); + open_time = getanimlength( %fxanim_zom_tomb_portal_open_anim ); + flag_wait( "start_zombie_round_logic" ); + e_model setanim( %fxanim_zom_tomb_portal_collapse_anim, 1.0, 0.1, 1 ); + wait( collapse_time ); + + while ( true ) + { + flag_wait( "enable_teleporter_" + self.script_int ); + flag_set( str_building_flag ); + e_model thread whirlwind_rumble_nearby_players( str_building_flag ); + e_model setanim( %fxanim_zom_tomb_portal_open_anim, 1.0, 0.1, 1 ); + e_model playloopsound( "zmb_teleporter_loop_pre", 1 ); + wait( open_time ); + e_model setanim( %fxanim_zom_tomb_portal_open_1frame_anim, 1.0, 0.1, 1 ); + wait_network_frame(); + e_fx = spawn( "script_model", self.origin ); + e_fx.angles = self.angles; + e_fx setmodel( "tag_origin" ); + e_fx setclientfield( "element_glow_fx", self.script_int + 4 ); + rumble_nearby_players( e_fx.origin, 1000, 2 ); + e_model playloopsound( "zmb_teleporter_loop_post", 1 ); + + if ( !( isdefined( self.exit_enabled ) && self.exit_enabled ) ) + { + self.exit_enabled = 1; + level thread run_chamber_exit( self.script_int ); + } + + self thread stargate_teleport_think(); + flag_clear( str_building_flag ); + flag_waitopen( "enable_teleporter_" + self.script_int ); + level notify( "disable_teleporter_" + self.script_int ); + e_fx setclientfield( "element_glow_fx", 0 ); + e_model stoploopsound( 0.5 ); + e_model playsound( "zmb_teleporter_anim_collapse_pew" ); + e_model setanim( %fxanim_zom_tomb_portal_collapse_anim, 1.0, 0.1, 1 ); + wait( collapse_time ); + e_fx delete(); + } +} + +teleporter_radius_think( radius = 120.0 ) +{ + self endon( "teleporter_radius_stop" ); + radius_sq = radius * radius; + + while ( true ) + { + a_players = getplayers(); + + foreach ( e_player in a_players ) + { + dist_sq = distancesquared( e_player.origin, self.origin ); + + if ( dist_sq < radius_sq && e_player getstance() != "prone" && !( isdefined( e_player.teleporting ) && e_player.teleporting ) ) + { + playfx( level._effect["teleport_3p"], self.origin, ( 1, 0, 0 ), ( 0, 0, 1 ) ); + playsoundatposition( "zmb_teleporter_tele_3d", self.origin ); + level thread stargate_teleport_player( self.target, e_player ); + } + } + + wait_network_frame(); + } +} + +stargate_teleport_think() +{ + self endon( "death" ); + level endon( "disable_teleporter_" + self.script_int ); + e_potal = level.a_teleport_models[self.script_int]; + + while ( true ) + { + self.trigger_stub waittill( "trigger", e_player ); + + if ( e_player getstance() != "prone" && !( isdefined( e_player.teleporting ) && e_player.teleporting ) ) + { + playfx( level._effect["teleport_3p"], self.origin, ( 1, 0, 0 ), ( 0, 0, 1 ) ); + playsoundatposition( "zmb_teleporter_tele_3d", self.origin ); + level notify( "player_teleported", e_player, self.script_int ); + level thread stargate_teleport_player( self.target, e_player ); + } + } +} + +stargate_teleport_enable( n_index ) +{ + flag_set( "enable_teleporter_" + n_index ); +} + +stargate_teleport_disable( n_index ) +{ + flag_clear( "enable_teleporter_" + n_index ); +} + +stargate_play_fx() +{ + self.e_fx setclientfield( "teleporter_fx", 1 ); + + self waittill( "stop_teleport_fx" ); + + self.e_fx setclientfield( "teleporter_fx", 0 ); +} + +spawn_stargate_fx_origins() +{ + a_teleport_positions = getstructarray( "teleport_room", "script_noteworthy" ); + + foreach ( s_teleport in a_teleport_positions ) + { + v_fx_pos = s_teleport.origin + ( 0, 0, 64 ) + anglestoforward( s_teleport.angles ) * 120; + s_teleport.e_fx = spawn( "script_model", v_fx_pos ); + s_teleport.e_fx setmodel( "tag_origin" ); + s_teleport.e_fx.angles = s_teleport.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); + } +} + +stargate_teleport_player( str_teleport_to, player, n_teleport_time_sec = 2.0, show_fx = 1 ) +{ + player.teleporting = 1; + + if ( show_fx ) + { + player thread fadetoblackforxsec( 0, 0.3, 0.0, 0.5, "white" ); + wait_network_frame(); + } + + n_pos = player.characterindex; + prone_offset = vectorscale( ( 0, 0, 1 ), 49.0 ); + crouch_offset = vectorscale( ( 0, 0, 1 ), 20.0 ); + stand_offset = ( 0, 0, 0 ); + image_room = getstruct( "teleport_room_" + n_pos, "targetname" ); + player disableoffhandweapons(); + player disableweapons(); + player freezecontrols( 1 ); + wait_network_frame(); + + if ( player getstance() == "prone" ) + desired_origin = image_room.origin + prone_offset; + else if ( player getstance() == "crouch" ) + desired_origin = image_room.origin + crouch_offset; + else + desired_origin = image_room.origin + stand_offset; + + player.teleport_origin = spawn( "script_model", player.origin ); + player.teleport_origin setmodel( "tag_origin" ); + player.teleport_origin.angles = player.angles; + player playerlinktoabsolute( player.teleport_origin, "tag_origin" ); + player.teleport_origin.origin = desired_origin; + player.teleport_origin.angles = image_room.angles; + + if ( show_fx ) + player playsoundtoplayer( "zmb_teleporter_tele_2d", player ); + + wait_network_frame(); + player.teleport_origin.angles = image_room.angles; + + if ( show_fx ) + image_room thread stargate_play_fx(); + + wait( n_teleport_time_sec ); + + if ( show_fx ) + { + player thread fadetoblackforxsec( 0, 0.3, 0.0, 0.5, "white" ); + wait_network_frame(); + } + + image_room notify( "stop_teleport_fx" ); + a_pos = getstructarray( str_teleport_to, "targetname" ); + s_pos = get_free_teleport_pos( player, a_pos ); + player unlink(); + + if ( isdefined( player.teleport_origin ) ) + { + player.teleport_origin delete(); + player.teleport_origin = undefined; + } + + player setorigin( s_pos.origin ); + player setplayerangles( s_pos.angles ); + player enableweapons(); + player enableoffhandweapons(); + player freezecontrols( 0 ); + player.teleporting = 0; +} + +is_teleport_landing_valid( s_pos, n_radius ) +{ + n_radius_sq = n_radius * n_radius; + a_players = getplayers(); + + foreach ( e_player in a_players ) + { + if ( distance2dsquared( s_pos.origin, e_player.origin ) < n_radius_sq ) + return false; + } + + return true; +} + +get_free_teleport_pos( player, a_structs ) +{ + n_player_radius = 64; + + while ( true ) + { + a_players = getplayers(); + + foreach ( s_pos in a_structs ) + { + if ( is_teleport_landing_valid( s_pos, n_player_radius ) ) + return s_pos; + } + + wait 0.05; + } +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_utility.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_utility.gsc new file mode 100644 index 0000000..8d34db8 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_utility.gsc @@ -0,0 +1,1743 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zm_tomb_teleporter; +#include maps\mp\zm_tomb_vo; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zm_tomb_chamber; +#include maps\mp\zombies\_zm_challenges; +#include maps\mp\zm_tomb_challenges; +#include maps\mp\zm_tomb_tank; +#include maps\mp\zm_tomb_craftables; + +setup_devgui() +{ +/# + execdevgui( "devgui_zombie_tomb" ); + level.custom_devgui = ::zombie_devgui_tomb; + setdvar( "complete_puzzles1", "off" ); + setdvar( "complete_puzzles2", "off" ); + setdvar( "open_all_teleporters", "off" ); + setdvar( "show_craftable_locations", "off" ); + setdvar( "show_morse_code", "off" ); + setdvar( "sam_intro_skip", "off" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Quest:1/Open All Teleporters:1\" \"open_all_teleporters on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Quest:1/Skip Chamber Puzzles:2\" \"complete_puzzles1 on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Quest:1/Skip Top-side Puzzles:3\" \"complete_puzzles2 on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Quest:1/Show Craftable Locations:4\" \"show_craftable_locations on \"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Quest:1/Skip Samantha Intro:5\" \"sam_intro_skip on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies:2/Tomb:1/Easter Ann:3/Show Morse Code:1\" \"show_morse_code on \"\n" ); + level thread watch_devgui_quadrotor(); + level thread watch_devgui_complete_puzzles(); + level thread watch_for_upgraded_staffs(); +#/ +} + +zombie_devgui_tomb( cmd ) +{ +/# + cmd_strings = strtok( cmd, " " ); + + switch ( cmd_strings[0] ) + { + case "force_recapture_start": + level notify( "force_recapture_start" ); + break; + case "force_capture_zone_6": + case "force_capture_zone_5": + case "force_capture_zone_4": + case "force_capture_zone_3": + case "force_capture_zone_2": + case "force_capture_zone_1": + level notify( "force_zone_capture", int( getsubstr( cmd_strings[0], 19 ) ) ); + break; + case "force_recapture_zone_6": + case "force_recapture_zone_5": + case "force_recapture_zone_4": + case "force_recapture_zone_3": + case "force_recapture_zone_2": + case "force_recapture_zone_1": + level notify( "force_zone_recapture", int( getsubstr( cmd_strings[0], 21 ) ) ); + break; + } +#/ +} + +watch_for_upgraded_staffs() +{ +/# + cmd = ""; + + while ( true ) + { + wait 0.25; + + if ( !isdefined( level.zombie_devgui_gun ) || level.zombie_devgui_gun != cmd ) + { + a_players = get_players(); + + foreach ( player in a_players ) + { + has_upgraded_staff = 0; + a_str_weapons = player getweaponslist(); + + foreach ( str_weapon in a_str_weapons ) + { + if ( is_weapon_upgraded_staff( str_weapon ) ) + has_upgraded_staff = 1; + } + + if ( has_upgraded_staff ) + player update_staff_accessories(); + } + } + } +#/ +} + +watch_devgui_complete_puzzles() +{ +/# + while ( true ) + { + if ( getdvar( _hash_BB20372B ) == "on" || getdvar( _hash_BB20372C ) == "on" ) + { + flag_set( "air_puzzle_1_complete" ); + flag_set( "ice_puzzle_1_complete" ); + flag_set( "electric_puzzle_1_complete" ); + flag_set( "fire_puzzle_1_complete" ); + flag_set( "chamber_puzzle_cheat" ); + setdvar( "complete_puzzles1", "off" ); + level notify( "open_all_gramophone_doors" ); + } + + if ( getdvar( _hash_A3C6E365 ) == "on" ) + { + flag_set( "show_morse_code" ); + setdvar( "show_morse_code", "off" ); + } + + if ( getdvar( _hash_BB20372C ) == "on" ) + { + flag_set( "air_puzzle_2_complete" ); + flag_set( "ice_puzzle_2_complete" ); + flag_set( "electric_puzzle_2_complete" ); + flag_set( "fire_puzzle_2_complete" ); + flag_set( "chamber_puzzle_cheat" ); + flag_set( "staff_air_zm_upgrade_unlocked" ); + flag_set( "staff_water_zm_upgrade_unlocked" ); + flag_set( "staff_fire_zm_upgrade_unlocked" ); + flag_set( "staff_lightning_zm_upgrade_unlocked" ); + setdvar( "complete_puzzles2", "off" ); + } + + if ( getdvar( _hash_273EAFA7 ) == "on" ) + { + flag_set( "samantha_intro_done" ); + setdvar( "sam_intro_skip", "off" ); + } + + if ( getdvar( _hash_B7590487 ) == "on" ) + { + maps\mp\zm_tomb_teleporter::stargate_teleport_enable( 1 ); + maps\mp\zm_tomb_teleporter::stargate_teleport_enable( 2 ); + maps\mp\zm_tomb_teleporter::stargate_teleport_enable( 3 ); + maps\mp\zm_tomb_teleporter::stargate_teleport_enable( 4 ); + setdvar( "open_all_teleporters", "off" ); + flag_set( "activate_zone_chamber" ); + } + + wait 0.5; + } +#/ +} + +get_teleport_fx_from_enum( n_enum ) +{ + switch ( n_enum ) + { + case 1: + return "teleport_fire"; + case 4: + return "teleport_ice"; + case 3: + return "teleport_elec"; + case 2: + default: + return "teleport_air"; + } +} + +watch_devgui_quadrotor() +{ +/# + while ( getdvar( _hash_7D075455 ) != "on" ) + wait 0.1; + + players = getplayers(); + + foreach ( player in players ) + { + player set_player_equipment( "equip_dieseldrone_zm" ); + player giveweapon( "equip_dieseldrone_zm" ); + player setweaponammoclip( "equip_dieseldrone_zm", 1 ); + player thread show_equipment_hint( "equip_dieseldrone_zm" ); + player notify( "equip_dieseldrone_zm" + "_given" ); + player set_equipment_invisibility_to_player( "equip_dieseldrone_zm", 1 ); + player setactionslot( 1, "weapon", "equip_dieseldrone_zm" ); + } +#/ +} + +include_craftable( craftable_struct ) +{ +/# + println( "ZM >> include_craftable = " + craftable_struct.name ); +#/ + maps\mp\zombies\_zm_craftables::include_zombie_craftable( craftable_struct ); +} + +is_craftable() +{ + return self maps\mp\zombies\_zm_craftables::is_craftable(); +} + +is_part_crafted( craftable_name, part_modelname ) +{ + return maps\mp\zombies\_zm_craftables::is_part_crafted( craftable_name, part_modelname ); +} + +wait_for_craftable( craftable_name ) +{ + level waittill( craftable_name + "_crafted", player ); + + return player; +} + +check_solo_status() +{ + if ( getnumexpectedplayers() == 1 && ( !sessionmodeisonlinegame() || !sessionmodeisprivate() ) ) + level.is_forever_solo_game = 1; + else + level.is_forever_solo_game = 0; +} + +player_slow_movement_speed_monitor() +{ + self endon( "disconnect" ); + n_movescale_delta_no_perk = 0.4 / 4.0; + n_movescale_delta_staminup = 0.3 / 6.0; + n_new_move_scale = 1.0; + n_move_scale_delta = 1.0; + self.n_move_scale = n_new_move_scale; + + while ( true ) + { + is_player_slowed = 0; + self.is_player_slowed = 0; + + foreach ( area in level.a_e_slow_areas ) + { + if ( self istouching( area ) ) + { + self setclientfieldtoplayer( "sndMudSlow", 1 ); + is_player_slowed = 1; + self.is_player_slowed = 1; + + if ( !( isdefined( self.played_mud_vo ) && self.played_mud_vo ) && !( isdefined( self.dontspeak ) && self.dontspeak ) ) + self thread maps\mp\zm_tomb_vo::struggle_mud_vo(); + + if ( self hasperk( "specialty_longersprint" ) ) + { + n_new_move_scale = 0.7; + n_move_scale_delta = n_movescale_delta_staminup; + } + else + { + n_new_move_scale = 0.6; + n_move_scale_delta = n_movescale_delta_no_perk; + } + + break; + } + } + + if ( !is_player_slowed ) + { + self setclientfieldtoplayer( "sndMudSlow", 0 ); + self notify( "mud_slowdown_cleared" ); + n_new_move_scale = 1.0; + } + + if ( self.n_move_scale != n_new_move_scale ) + { + if ( self.n_move_scale > n_new_move_scale + n_move_scale_delta ) + self.n_move_scale -= n_move_scale_delta; + else + self.n_move_scale = n_new_move_scale; + + self setmovespeedscale( self.n_move_scale ); + } + + wait 0.1; + } +} + +dug_zombie_spawn_init( animname_set = 0 ) +{ + self.targetname = "zombie"; + self.script_noteworthy = undefined; + + if ( !animname_set ) + self.animname = "zombie"; + + if ( isdefined( get_gamemode_var( "pre_init_zombie_spawn_func" ) ) ) + self [[ get_gamemode_var( "pre_init_zombie_spawn_func" ) ]](); + + self thread play_ambient_zombie_vocals(); + self.zmb_vocals_attack = "zmb_vocals_zombie_attack"; + self.ignoreall = 1; + self.ignoreme = 1; + self.allowdeath = 1; + self.force_gib = 1; + self.is_zombie = 1; + self.has_legs = 1; + self allowedstances( "stand" ); + self.zombie_damaged_by_bar_knockdown = 0; + self.gibbed = 0; + self.head_gibbed = 0; + self setphysparams( 15, 0, 72 ); + self.disablearrivals = 1; + self.disableexits = 1; + self.grenadeawareness = 0; + self.badplaceawareness = 0; + self.ignoresuppression = 1; + self.suppressionthreshold = 1; + self.nododgemove = 1; + self.dontshootwhilemoving = 1; + self.pathenemylookahead = 0; + self.badplaceawareness = 0; + self.chatinitialized = 0; + self.a.disablepain = 1; + self disable_react(); + + if ( isdefined( level.zombie_health ) ) + { + self.maxhealth = level.zombie_health; + + if ( isdefined( level.zombie_respawned_health ) && level.zombie_respawned_health.size > 0 ) + { + self.health = level.zombie_respawned_health[0]; + arrayremovevalue( level.zombie_respawned_health, level.zombie_respawned_health[0] ); + } + else + self.health = level.zombie_health; + } + else + { + self.maxhealth = level.zombie_vars["zombie_health_start"]; + self.health = self.maxhealth; + } + + self.freezegun_damage = 0; + self.dropweapon = 0; + level thread zombie_death_event( self ); + self init_zombie_run_cycle(); + self thread dug_zombie_think(); + self thread zombie_gib_on_damage(); + self thread zombie_damage_failsafe(); + self thread enemy_death_detection(); + + if ( isdefined( level._zombie_custom_spawn_logic ) ) + { + if ( isarray( level._zombie_custom_spawn_logic ) ) + { + for ( i = 0; i < level._zombie_custom_spawn_logic.size; i++ ) + self thread [[ level._zombie_custom_spawn_logic[i] ]](); + } + else + self thread [[ level._zombie_custom_spawn_logic ]](); + } + + if ( !isdefined( self.no_eye_glow ) || !self.no_eye_glow ) + { + if ( !( isdefined( self.is_inert ) && self.is_inert ) ) + self thread delayed_zombie_eye_glow(); + } + + self.deathfunction = ::zombie_death_animscript; + self.flame_damage_time = 0; + self.meleedamage = 60; + self.no_powerups = 1; + self zombie_history( "zombie_spawn_init -> Spawned = " + self.origin ); + self.thundergun_knockdown_func = level.basic_zombie_thundergun_knockdown; + self.tesla_head_gib_func = ::zombie_tesla_head_gib; + self.team = level.zombie_team; + + if ( isdefined( get_gamemode_var( "post_init_zombie_spawn_func" ) ) ) + self [[ get_gamemode_var( "post_init_zombie_spawn_func" ) ]](); + + if ( isdefined( level.zombie_init_done ) ) + self [[ level.zombie_init_done ]](); + + self.zombie_init_done = 1; + self notify( "zombie_init_done" ); +} + +dug_zombie_think() +{ + self endon( "death" ); + assert( !self.isdog ); + self.ai_state = "zombie_think"; + find_flesh_struct_string = undefined; + + self waittill( "zombie_custom_think_done", find_flesh_struct_string ); + + node = undefined; + desired_nodes = []; + self.entrance_nodes = []; + + if ( isdefined( level.max_barrier_search_dist_override ) ) + max_dist = level.max_barrier_search_dist_override; + else + max_dist = 500; + + if ( !isdefined( find_flesh_struct_string ) && isdefined( self.target ) && self.target != "" ) + { + desired_origin = get_desired_origin(); + assert( isdefined( desired_origin ), "Spawner @ " + self.origin + " has a .target but did not find a target" ); + origin = desired_origin; + node = getclosest( origin, level.exterior_goals ); + self.entrance_nodes[self.entrance_nodes.size] = node; + self zombie_history( "zombie_think -> #1 entrance (script_forcegoal) origin = " + self.entrance_nodes[0].origin ); + } + else if ( self should_skip_teardown( find_flesh_struct_string ) ) + { + self zombie_setup_attack_properties(); + + if ( isdefined( self.target ) ) + { + end_at_node = getnode( self.target, "targetname" ); + + if ( isdefined( end_at_node ) ) + { + self setgoalnode( end_at_node ); + + self waittill( "goal" ); + } + } + + if ( isdefined( self.start_inert ) && self.start_inert ) + { + self thread maps\mp\zombies\_zm_ai_basic::start_inert( 1 ); + self zombie_complete_emerging_into_playable_area(); + } + else + { + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); + self thread dug_zombie_entered_playable(); + } + + return; + } + else if ( isdefined( find_flesh_struct_string ) ) + { + assert( isdefined( find_flesh_struct_string ) ); + + for ( i = 0; i < level.exterior_goals.size; i++ ) + { + if ( level.exterior_goals[i].script_string == find_flesh_struct_string ) + { + node = level.exterior_goals[i]; + break; + } + } + + self.entrance_nodes[self.entrance_nodes.size] = node; + self zombie_history( "zombie_think -> #1 entrance origin = " + node.origin ); + self thread zombie_assure_node(); + } + else + { + origin = self.origin; + desired_origin = get_desired_origin(); + + if ( isdefined( desired_origin ) ) + origin = desired_origin; + + nodes = get_array_of_closest( origin, level.exterior_goals, undefined, 3 ); + desired_nodes[0] = nodes[0]; + prev_dist = distance( self.origin, nodes[0].origin ); + + for ( i = 1; i < nodes.size; i++ ) + { + dist = distance( self.origin, nodes[i].origin ); + + if ( dist - prev_dist > max_dist ) + break; + + prev_dist = dist; + desired_nodes[i] = nodes[i]; + } + + node = desired_nodes[0]; + + if ( desired_nodes.size > 1 ) + node = desired_nodes[randomint( desired_nodes.size )]; + + self.entrance_nodes = desired_nodes; + self zombie_history( "zombie_think -> #1 entrance origin = " + node.origin ); + self thread zombie_assure_node(); + } + + assert( isdefined( node ), "Did not find a node!!! [Should not see this!]" ); + level thread draw_line_ent_to_pos( self, node.origin, "goal" ); + self.first_node = node; + self thread zombie_goto_entrance( node ); +} + +dug_zombie_entered_playable() +{ + self endon( "death" ); + + if ( !isdefined( level.playable_areas ) ) + level.playable_areas = getentarray( "player_volume", "script_noteworthy" ); + + while ( true ) + { + foreach ( area in level.playable_areas ) + { + if ( self istouching( area ) ) + { + self dug_zombie_complete_emerging_into_playable_area(); + return; + } + } + + wait 1; + } +} + +dug_zombie_complete_emerging_into_playable_area() +{ + self.completed_emerging_into_playable_area = 1; + self notify( "completed_emerging_into_playable_area" ); + self.no_powerups = 1; + self thread zombie_free_cam_allowed(); +} + +dug_zombie_rise( spot, func_rise_fx = ::zombie_rise_fx ) +{ + self endon( "death" ); + self.in_the_ground = 1; + self.no_eye_glow = 1; + self.anchor = spawn( "script_origin", self.origin ); + self.anchor.angles = self.angles; + self linkto( self.anchor ); + + if ( !isdefined( spot.angles ) ) + spot.angles = ( 0, 0, 0 ); + + anim_org = spot.origin; + anim_ang = spot.angles; + self ghost(); + self.anchor moveto( anim_org, 0.05 ); + + self.anchor waittill( "movedone" ); + + target_org = get_desired_origin(); + + if ( isdefined( target_org ) ) + { + anim_ang = vectortoangles( target_org - self.origin ); + self.anchor rotateto( ( 0, anim_ang[1], 0 ), 0.05 ); + + self.anchor waittill( "rotatedone" ); + } + + self unlink(); + + if ( isdefined( self.anchor ) ) + self.anchor delete(); + + self thread hide_pop(); + level thread zombie_rise_death( self, spot ); + spot thread [[ func_rise_fx ]]( self ); + substate = 0; + + if ( self.zombie_move_speed == "walk" ) + substate = randomint( 2 ); + else if ( self.zombie_move_speed == "run" ) + substate = 2; + else if ( self.zombie_move_speed == "sprint" ) + substate = 3; + + self orientmode( "face default" ); + self playsound( "zmb_vocals_capzomb_spawn" ); + self animscripted( self.origin, spot.angles, "zm_dug_rise" ); + self maps\mp\animscripts\zm_shared::donotetracks( "rise_anim", ::handle_rise_notetracks, spot ); + self.no_eye_glow = 0; + self thread zombie_eye_glow(); + self notify( "rise_anim_finished" ); + spot notify( "stop_zombie_rise_fx" ); + self.in_the_ground = 0; + self notify( "risen", spot.script_string ); +} + +is_weapon_upgraded_staff( weapon ) +{ + if ( weapon == "staff_water_upgraded_zm" ) + return true; + else if ( weapon == "staff_lightning_upgraded_zm" ) + return true; + else if ( weapon == "staff_fire_upgraded_zm" ) + return true; + else if ( weapon == "staff_air_upgraded_zm" ) + return true; + + return false; +} + +watch_staff_usage() +{ + self notify( "watch_staff_usage" ); + self endon( "watch_staff_usage" ); + self endon( "disconnect" ); + self setclientfieldtoplayer( "player_staff_charge", 0 ); + + while ( true ) + { + self waittill( "weapon_change", weapon ); + + has_upgraded_staff = 0; + has_revive_staff = 0; + weapon_is_upgraded_staff = is_weapon_upgraded_staff( weapon ); + str_upgraded_staff_weapon = undefined; + a_str_weapons = self getweaponslist(); + + foreach ( str_weapon in a_str_weapons ) + { + if ( is_weapon_upgraded_staff( str_weapon ) ) + { + has_upgraded_staff = 1; + str_upgraded_staff_weapon = str_weapon; + } + + if ( str_weapon == "staff_revive_zm" ) + has_revive_staff = 1; + } +/# + if ( has_upgraded_staff && !has_revive_staff ) + has_revive_staff = 1; +#/ + if ( has_upgraded_staff && !has_revive_staff ) + { + self takeweapon( str_upgraded_staff_weapon ); + has_upgraded_staff = 0; + } + + if ( !has_upgraded_staff && has_revive_staff ) + { + self takeweapon( "staff_revive_zm" ); + has_revive_staff = 0; + } + + if ( !has_revive_staff || !weapon_is_upgraded_staff && "none" != weapon && "none" != weaponaltweaponname( weapon ) ) + self setactionslot( 3, "altmode" ); + else + self setactionslot( 3, "weapon", "staff_revive_zm" ); + + if ( weapon_is_upgraded_staff ) + self thread staff_charge_watch_wrapper( weapon ); + } +} + +staff_charge_watch() +{ + self endon( "disconnect" ); + self endon( "player_downed" ); + self endon( "weapon_change" ); + self endon( "weapon_fired" ); + + while ( !self attackbuttonpressed() ) + wait 0.05; + + n_old_charge = 0; + + while ( true ) + { + if ( n_old_charge != self.chargeshotlevel ) + { + self setclientfieldtoplayer( "player_staff_charge", self.chargeshotlevel ); + n_old_charge = self.chargeshotlevel; + } + + wait 0.1; + } +} + +staff_charge_watch_wrapper( weapon ) +{ + self notify( "staff_charge_watch_wrapper" ); + self endon( "staff_charge_watch_wrapper" ); + self endon( "disconnect" ); + self setclientfieldtoplayer( "player_staff_charge", 0 ); + + while ( is_weapon_upgraded_staff( weapon ) ) + { + self staff_charge_watch(); + self setclientfieldtoplayer( "player_staff_charge", 0 ); + weapon = self getcurrentweapon(); + } +} + +door_record_hint() +{ + hud = setting_tutorial_hud(); + hud settext( &"ZM_TOMB_RU" ); + wait 3; + hud destroy(); +} + +swap_staff_hint() +{ + level notify( "staff_Hint" ); + hud = setting_tutorial_hud(); + hud settext( &"ZM_TOMB_OSO" ); + level waittill_any_or_timeout( 3.0, "staff_hint" ); + hud destroy(); +} + +door_gramophone_elsewhere_hint() +{ + hud = setting_tutorial_hud(); + hud settext( &"ZM_TOMB_GREL" ); + wait 3; + hud destroy(); +} + +puzzle_debug_position( string_to_show, color, origin, str_dvar, n_show_time ) +{ +/# + self endon( "death" ); + self endon( "stop_debug_position" ); + + if ( !isdefined( string_to_show ) ) + string_to_show = "+"; + + if ( !isdefined( color ) ) + color = vectorscale( ( 1, 1, 1 ), 255.0 ); + + if ( isdefined( str_dvar ) ) + { + while ( getdvar( _hash_93087F74 ) != "on" ) + wait 1.0; + } + + while ( true ) + { + if ( isdefined( origin ) ) + where_to_draw = origin; + else + where_to_draw = self.origin; + + print3d( where_to_draw, string_to_show, color, 1 ); + wait 0.1; + + if ( isdefined( n_show_time ) ) + { + n_show_time -= 0.1; + + if ( n_show_time <= 0 ) + break; + } + } +#/ +} + +placeholder_puzzle_delete_ent( str_flag_name ) +{ + self endon( "death" ); + flag_wait( str_flag_name ); + self delete(); +} + +placeholder_puzzle_spin_model() +{ + self endon( "death" ); + + while ( true ) + { + self rotateyaw( 360, 10, 0, 0 ); + wait 9.9; + } +} + +setting_tutorial_hud() +{ + client_hint = newclienthudelem( self ); + client_hint.alignx = "center"; + client_hint.aligny = "middle"; + client_hint.horzalign = "center"; + client_hint.vertalign = "bottom"; + client_hint.y = -120; + client_hint.foreground = 1; + client_hint.font = "default"; + client_hint.fontscale = 1.5; + client_hint.alpha = 1; + client_hint.color = ( 1, 1, 1 ); + return client_hint; +} + +tomb_trigger_update_message( func_per_player_msg ) +{ + a_players = getplayers(); + + foreach ( e_player in a_players ) + { + n_player = e_player getentitynumber(); + + if ( !isdefined( self.stub.playertrigger[n_player] ) ) + continue; + + new_msg = self [[ func_per_player_msg ]]( e_player ); + self.stub.playertrigger[n_player].stored_hint_string = new_msg; + self.stub.playertrigger[n_player] sethintstring( new_msg ); + } +} + +set_unitrigger_hint_string( str_message ) +{ + self.hint_string = str_message; + maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self ); + maps\mp\zombies\_zm_unitrigger::register_unitrigger( self, ::tomb_unitrigger_think ); +} + +tomb_spawn_trigger_radius( origin, radius, use_trigger = 0, func_per_player_msg ) +{ + trigger_stub = spawnstruct(); + trigger_stub.origin = origin; + trigger_stub.radius = radius; + + if ( use_trigger ) + { + trigger_stub.cursor_hint = "HINT_NOICON"; + trigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + } + else + trigger_stub.script_unitrigger_type = "unitrigger_radius"; + + if ( isdefined( func_per_player_msg ) ) + { + trigger_stub.func_update_msg = func_per_player_msg; + maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( trigger_stub, 1 ); + } + + maps\mp\zombies\_zm_unitrigger::register_unitrigger( trigger_stub, ::tomb_unitrigger_think ); + return trigger_stub; +} + +tomb_unitrigger_think() +{ + self endon( "kill_trigger" ); + + if ( isdefined( self.stub.func_update_msg ) ) + self thread tomb_trigger_update_message( self.stub.func_update_msg ); + + while ( true ) + { + self waittill( "trigger", player ); + + self.stub notify( "trigger", player ); + } +} + +tomb_unitrigger_delete() +{ + maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self ); + self structdelete(); +} + +zombie_gib_all() +{ + if ( !isdefined( self ) ) + return; + + if ( isdefined( self.is_mechz ) && self.is_mechz ) + return; + + a_gib_ref = []; + a_gib_ref[0] = level._zombie_gib_piece_index_all; + self gib( "normal", a_gib_ref ); + self ghost(); + wait 0.4; + + if ( isdefined( self ) ) + self self_delete(); +} + +zombie_gib_guts() +{ + if ( !isdefined( self ) ) + return; + + if ( isdefined( self.is_mechz ) && self.is_mechz ) + return; + + v_origin = self gettagorigin( "J_SpineLower" ); + + if ( isdefined( v_origin ) ) + { + v_forward = anglestoforward( ( 0, randomint( 360 ), 0 ) ); + playfx( level._effect["zombie_guts_explosion"], v_origin, v_forward ); + } + + wait_network_frame(); + + if ( isdefined( self ) ) + { + self ghost(); + wait( randomfloatrange( 0.4, 1.1 ) ); + + if ( isdefined( self ) ) + self self_delete(); + } +} + +link_platform_nodes( nd_1, nd_2 ) +{ + if ( !nodesarelinked( nd_1, nd_2 ) ) + link_nodes( nd_1, nd_2 ); + + if ( !nodesarelinked( nd_2, nd_1 ) ) + link_nodes( nd_2, nd_1 ); +} + +unlink_platform_nodes( nd_1, nd_2 ) +{ + if ( nodesarelinked( nd_1, nd_2 ) ) + unlink_nodes( nd_1, nd_2 ); + + if ( nodesarelinked( nd_2, nd_1 ) ) + unlink_nodes( nd_2, nd_1 ); +} + +init_weather_manager() +{ + level.weather_snow = 0; + level.weather_rain = 0; + level.weather_fog = 0; + level.weather_vision = 0; + level thread weather_manager(); + level thread rotate_skydome(); + onplayerconnect_callback( ::set_weather_to_player ); + level.force_weather = []; + + if ( cointoss() ) + level.force_weather[3] = "snow"; + else + level.force_weather[4] = "snow"; + + for ( i = 5; i <= 9; i++ ) + { + if ( cointoss() ) + { + level.force_weather[i] = "none"; + continue; + } + + level.force_weather[i] = "rain"; + } + + level.force_weather[10] = "snow"; +} + +randomize_weather() +{ + weather_name = level.force_weather[level.round_number]; + + if ( !isdefined( weather_name ) ) + { + n_round_weather = randomint( 100 ); + rounds_since_snow = level.round_number - level.last_snow_round; + rounds_since_rain = level.round_number - level.last_rain_round; + + if ( n_round_weather < 40 || rounds_since_snow > 3 ) + weather_name = "snow"; + else if ( n_round_weather < 80 || rounds_since_rain > 4 ) + weather_name = "rain"; + else + weather_name = "none"; + } + + if ( weather_name == "snow" ) + { + level.weather_snow = randomintrange( 1, 5 ); + level.weather_rain = 0; + level.weather_vision = 2; + level.last_snow_round = level.round_number; + } + else if ( weather_name == "rain" ) + { + level.weather_snow = 0; + level.weather_rain = randomintrange( 1, 5 ); + level.weather_vision = 1; + level.last_rain_round = level.round_number; + } + else + { + level.weather_snow = 0; + level.weather_rain = 0; + level.weather_vision = 3; + } +} + +weather_manager() +{ + level.last_snow_round = 0; + level.last_rain_round = 0; + + while ( true ) + { + level waittill( "end_of_round" ); + + randomize_weather(); + level setclientfield( "rain_level", level.weather_rain ); + level setclientfield( "snow_level", level.weather_snow ); + wait 2; + + foreach ( player in getplayers() ) + { + if ( is_player_valid( player, 0, 1 ) ) + player set_weather_to_player(); + } + } +} + +set_weather_to_player() +{ + self setclientfieldtoplayer( "player_weather_visionset", level.weather_vision ); +} + +rotate_skydome() +{ + level.sky_rotation = 360; + + while ( true ) + { + level.sky_rotation -= 0.025; + + if ( level.sky_rotation < 0 ) + level.sky_rotation += 360; + + setdvar( "r_skyRotation", level.sky_rotation ); + wait 0.1; + } +} + +play_puzzle_stinger_on_all_players() +{ + players = getplayers(); + + foreach ( player in players ) + player playsound( "zmb_squest_step2_finished" ); +} + +puzzle_orb_move( v_to_pos ) +{ + dist = distance( self.origin, v_to_pos ); + + if ( dist == 0.0 ) + return; + + movetime = dist / 300; + self moveto( v_to_pos, movetime, 0, 0 ); + + self waittill( "movedone" ); +} + +puzzle_orb_follow_path( s_start ) +{ + s_next_pos = s_start; + + while ( isdefined( s_next_pos ) ) + { + self puzzle_orb_move( s_next_pos.origin ); + + if ( isdefined( s_next_pos.target ) ) + s_next_pos = getstruct( s_next_pos.target, "targetname" ); + else + s_next_pos = undefined; + } +} + +puzzle_orb_follow_return_path( s_start, n_element ) +{ + a_path = []; + s_next = s_start; + + while ( isdefined( s_next ) ) + { + a_path[a_path.size] = s_next; + + if ( isdefined( s_next.target ) ) + s_next = getstruct( s_next.target, "targetname" ); + else + s_next = undefined; + } + + v_start = a_path[a_path.size - 1].origin + vectorscale( ( 0, 0, 1 ), 1000.0 ); + e_model = spawn( "script_model", v_start ); + e_model setmodel( s_start.model ); + e_model setclientfield( "element_glow_fx", n_element ); + playfxontag( level._effect["puzzle_orb_trail"], e_model, "tag_origin" ); + + for ( i = a_path.size - 1; i >= 0; i-- ) + e_model puzzle_orb_move( a_path[i].origin ); + + return e_model; +} + +puzzle_orb_pillar_show() +{ + level notify( "sky_pillar_reset" ); + level endon( "sky_pillar_reset" ); + s_pillar = getstruct( "crypt_pillar", "targetname" ); + exploder( 333 ); + + if ( isdefined( s_pillar.e_model ) ) + s_pillar.e_model delete(); + + s_pillar.e_model = spawn( "script_model", s_pillar.origin ); + s_pillar.e_model endon( "death" ); + s_pillar.e_model ghost(); + s_pillar.e_model setmodel( "fxuse_sky_pillar_new" ); + s_pillar.e_model setclientfield( "sky_pillar", 1 ); + wait_network_frame(); + s_pillar.e_model show(); + wait 1.0; + wait 27.5; + s_pillar.e_model setclientfield( "sky_pillar", 0 ); + wait 1.0; + s_pillar.e_model delete(); +} + +any_player_looking_at_plinth( min_lookat_dot, n_near_dist_sq ) +{ + players = getplayers(); + + foreach ( player in players ) + { + dist_sq = distance2dsquared( player.origin, self.origin ); + + if ( dist_sq < n_near_dist_sq ) + { + fvec = anglestoforward( player.angles ); + to_self = self.origin - player.origin; + to_self = vectornormalize( to_self ); + dot_to_self = vectordot( to_self, fvec ); + + if ( dot_to_self > min_lookat_dot ) + return true; + } + } + + return false; +} + +puzzle_orb_ready_to_leave( str_zone, min_lookat_dot, n_near_dist_sq ) +{ + if ( !level.zones[str_zone].is_occupied || flag( "chamber_puzzle_cheat" ) ) + return 1; + + return any_player_looking_at_plinth( min_lookat_dot, n_near_dist_sq ); +} + +puzzle_orb_chamber_to_crypt( str_start_point, e_gem_pos ) +{ + a_puzzle_flags = strtok( e_gem_pos.script_flag, " " ); + assert( a_puzzle_flags.size == 2 ); + + foreach ( str_flag in a_puzzle_flags ) + assert( level flag_exists( str_flag ) ); + + flag_wait( a_puzzle_flags[0] ); + s_start = getstruct( str_start_point, "targetname" ); + e_model = spawn( "script_model", s_start.origin ); + e_model setmodel( s_start.model ); + e_model.script_int = e_gem_pos.script_int; + wait_network_frame(); + e_model playsound( "zmb_squest_crystal_leave" ); + wait_network_frame(); + e_model playloopsound( "zmb_squest_crystal_loop", 1 ); + str_zone = maps\mp\zombies\_zm_zonemgr::get_zone_from_position( s_start.origin, 1 ); + time_looking_at_orb = 0.0; + min_lookat_dot = cos( 30 ); + n_near_dist_sq = 32400; + + while ( time_looking_at_orb < 1.0 ) + { + wait 0.1; + + if ( s_start puzzle_orb_ready_to_leave( str_zone, min_lookat_dot, n_near_dist_sq ) ) + time_looking_at_orb += 0.1; + else + time_looking_at_orb = 0.0; + } + + wait_network_frame(); + playfxontag( level._effect["puzzle_orb_trail"], e_model, "tag_origin" ); + wait_network_frame(); + s_next_pos = getstruct( s_start.target, "targetname" ); + e_model puzzle_orb_follow_path( s_next_pos ); + v_sky_pos = e_model.origin; + v_sky_pos = ( v_sky_pos[0], v_sky_pos[1], v_sky_pos[2] + 1000 ); + e_model puzzle_orb_move( v_sky_pos ); + e_model ghost(); + s_descend_start = getstruct( "orb_crypt_descent_path", "targetname" ); + v_pos_above_gem = s_descend_start.origin + vectorscale( ( 0, 0, 1 ), 3000.0 ); + e_model moveto( v_pos_above_gem, 0.05, 0, 0 ); + + e_model waittill( "movedone" ); + + flag_wait( a_puzzle_flags[1] ); + e_model show(); + level thread puzzle_orb_pillar_show(); + e_model puzzle_orb_follow_path( s_descend_start ); + flag_set( "disc_rotation_active" ); + e_model puzzle_orb_move( e_gem_pos.origin ); + e_model_nofx = spawn( "script_model", e_model.origin ); + e_model_nofx setmodel( e_model.model ); + e_model_nofx.script_int = e_gem_pos.script_int; + e_model delete(); + wait_network_frame(); + e_model_nofx playsound( "zmb_squest_crystal_arrive" ); + wait_network_frame(); + e_model_nofx playloopsound( "zmb_squest_crystal_loop", 1 ); + flag_clear( "disc_rotation_active" ); + return e_model_nofx; +} + +capture_zombie_spawn_init( animname_set = 0 ) +{ + self.targetname = "capture_zombie_ai"; + + if ( !animname_set ) + self.animname = "zombie"; + + self.sndname = "capzomb"; + + if ( isdefined( get_gamemode_var( "pre_init_zombie_spawn_func" ) ) ) + self [[ get_gamemode_var( "pre_init_zombie_spawn_func" ) ]](); + + self thread play_ambient_zombie_vocals(); + self.zmb_vocals_attack = "zmb_vocals_capzomb_attack"; + self.no_damage_points = 1; + self.deathpoints_already_given = 1; + self.ignore_enemy_count = 1; + self.ignoreall = 1; + self.ignoreme = 1; + self.allowdeath = 1; + self.force_gib = 1; + self.is_zombie = 1; + self.has_legs = 1; + self allowedstances( "stand" ); + self.zombie_damaged_by_bar_knockdown = 0; + self.gibbed = 0; + self.head_gibbed = 0; + self.disablearrivals = 1; + self.disableexits = 1; + self.grenadeawareness = 0; + self.badplaceawareness = 0; + self.ignoresuppression = 1; + self.suppressionthreshold = 1; + self.nododgemove = 1; + self.dontshootwhilemoving = 1; + self.pathenemylookahead = 0; + self.badplaceawareness = 0; + self.chatinitialized = 0; + self.a.disablepain = 1; + self disable_react(); + + if ( isdefined( level.zombie_health ) ) + { + self.maxhealth = level.zombie_health; + + if ( isdefined( level.zombie_respawned_health ) && level.zombie_respawned_health.size > 0 ) + { + self.health = level.zombie_respawned_health[0]; + arrayremovevalue( level.zombie_respawned_health, level.zombie_respawned_health[0] ); + } + else + self.health = level.zombie_health; + } + else + { + self.maxhealth = level.zombie_vars["zombie_health_start"]; + self.health = self.maxhealth; + } + + self.freezegun_damage = 0; + self.dropweapon = 0; + level thread zombie_death_event( self ); + self set_zombie_run_cycle(); + self thread dug_zombie_think(); + self thread zombie_gib_on_damage(); + self thread zombie_damage_failsafe(); + self thread enemy_death_detection(); + + if ( !isdefined( self.no_eye_glow ) || !self.no_eye_glow ) + { + if ( !( isdefined( self.is_inert ) && self.is_inert ) ) + self thread delayed_zombie_eye_glow(); + } + + self.deathfunction = ::zombie_death_animscript; + self.flame_damage_time = 0; + self.meleedamage = 60; + self.no_powerups = 1; + self zombie_history( "zombie_spawn_init -> Spawned = " + self.origin ); + self.thundergun_knockdown_func = level.basic_zombie_thundergun_knockdown; + self.tesla_head_gib_func = ::zombie_tesla_head_gib; + self.team = level.zombie_team; + + if ( isdefined( get_gamemode_var( "post_init_zombie_spawn_func" ) ) ) + self [[ get_gamemode_var( "post_init_zombie_spawn_func" ) ]](); + + self.zombie_init_done = 1; + self notify( "zombie_init_done" ); +} + +rumble_players_in_chamber( n_rumble_enum, n_rumble_time = 0.1 ) +{ + a_players = getplayers(); + a_rumbled_players = []; + + foreach ( e_player in a_players ) + { + if ( maps\mp\zm_tomb_chamber::is_point_in_chamber( e_player.origin ) ) + { + e_player setclientfieldtoplayer( "player_rumble_and_shake", n_rumble_enum ); + a_rumbled_players[a_rumbled_players.size] = e_player; + } + } + + wait( n_rumble_time ); + + foreach ( e_player in a_rumbled_players ) + e_player setclientfieldtoplayer( "player_rumble_and_shake", 0 ); +} + +rumble_nearby_players( v_center, n_range, n_rumble_enum ) +{ + n_range_sq = n_range * n_range; + a_players = getplayers(); + a_rumbled_players = []; + + foreach ( e_player in a_players ) + { + if ( distancesquared( v_center, e_player.origin ) < n_range_sq ) + { + e_player setclientfieldtoplayer( "player_rumble_and_shake", n_rumble_enum ); + a_rumbled_players[a_rumbled_players.size] = e_player; + } + } + + wait_network_frame(); + + foreach ( e_player in a_rumbled_players ) + e_player setclientfieldtoplayer( "player_rumble_and_shake", 0 ); +} + +whirlwind_rumble_player( e_whirlwind, str_active_flag ) +{ + if ( isdefined( self.whirlwind_rumble_on ) && self.whirlwind_rumble_on ) + return; + + self.whirlwind_rumble_on = 1; + n_rumble_level = 1; + self setclientfieldtoplayer( "player_rumble_and_shake", 4 ); + dist_sq = distancesquared( self.origin, e_whirlwind.origin ); + range_inner_sq = 10000; + range_sq = 90000; + + while ( dist_sq < range_sq ) + { + wait 0.05; + + if ( !isdefined( e_whirlwind ) ) + break; + + if ( isdefined( str_active_flag ) ) + { + if ( !flag( str_active_flag ) ) + break; + } + + dist_sq = distancesquared( self.origin, e_whirlwind.origin ); + + if ( n_rumble_level == 1 && dist_sq < range_inner_sq ) + { + n_rumble_level = 2; + self setclientfieldtoplayer( "player_rumble_and_shake", 5 ); + } + else if ( n_rumble_level == 2 && dist_sq >= range_inner_sq ) + { + n_rumble_level = 1; + self setclientfieldtoplayer( "player_rumble_and_shake", 4 ); + } + } + + self setclientfieldtoplayer( "player_rumble_and_shake", 0 ); + self.whirlwind_rumble_on = 0; +} + +whirlwind_rumble_nearby_players( str_active_flag ) +{ + range_sq = 90000; + + while ( flag( str_active_flag ) ) + { + a_players = getplayers(); + + foreach ( player in a_players ) + { + dist_sq = distancesquared( self.origin, player.origin ); + + if ( dist_sq < range_sq ) + player thread whirlwind_rumble_player( self, str_active_flag ); + } + + wait_network_frame(); + } +} + +clean_up_bunker_doors() +{ + a_door_models = getentarray( "bunker_door", "script_noteworthy" ); + array_thread( a_door_models, ::bunker_door_clean_up ); +} + +bunker_door_clean_up() +{ + self waittill( "movedone" ); + + self delete(); +} + +adjustments_for_solo() +{ + if ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) + { + a_door_buys = getentarray( "zombie_door", "targetname" ); + array_thread( a_door_buys, ::door_price_reduction_for_solo ); + a_debris_buys = getentarray( "zombie_debris", "targetname" ); + array_thread( a_debris_buys, ::door_price_reduction_for_solo ); + change_weapon_cost( "beretta93r_zm", 750 ); + change_weapon_cost( "870mcs_zm", 750 ); + } +} + +door_price_reduction_for_solo() +{ + if ( self.zombie_cost >= 750 ) + { + self.zombie_cost -= 250; + + if ( self.zombie_cost >= 2500 ) + self.zombie_cost -= 250; + + if ( self.targetname == "zombie_door" ) + self set_hint_string( self, "default_buy_door", self.zombie_cost ); + else + self set_hint_string( self, "default_buy_debris", self.zombie_cost ); + } +} + +change_weapon_cost( str_weapon, n_cost ) +{ + level.zombie_weapons[str_weapon].cost = n_cost; + level.zombie_weapons[str_weapon].ammo_cost = round_up_to_ten( int( n_cost * 0.5 ) ); +} + +zone_capture_powerup() +{ + while ( true ) + { + flag_wait( "zone_capture_in_progress" ); + flag_waitopen( "zone_capture_in_progress" ); + wait 2; + + foreach ( generator in level.zone_capture.zones ) + { + if ( generator ent_flag( "player_controlled" ) ) + { + foreach ( uts_box in level.a_uts_challenge_boxes ) + { + if ( uts_box.str_location == "start_bunker" ) + { + if ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) + level thread maps\mp\zombies\_zm_challenges::open_box( undefined, uts_box, maps\mp\zm_tomb_challenges::reward_powerup_double_points, -1 ); + else + level thread maps\mp\zombies\_zm_challenges::open_box( undefined, uts_box, maps\mp\zm_tomb_challenges::reward_powerup_zombie_blood, -1 ); + + return; + } + } + } + } + } +} + +traversal_blocker() +{ + flag_wait( "activate_zone_nml" ); + m_traversal_blocker = getent( "traversal_blocker", "targetname" ); + m_traversal_blocker connectpaths(); + m_traversal_blocker delete(); +} + +_kill_zombie_network_safe_internal( e_attacker, str_weapon ) +{ + if ( !isdefined( self ) ) + return; + + if ( !isalive( self ) ) + return; + + self.staff_dmg = str_weapon; + self dodamage( self.health, self.origin, e_attacker, e_attacker, "none", self.kill_damagetype, 0, str_weapon ); +} + +_damage_zombie_network_safe_internal( e_attacker, str_weapon, n_damage_amt ) +{ + if ( !isdefined( self ) ) + return; + + if ( !isalive( self ) ) + return; + + self dodamage( n_damage_amt, self.origin, e_attacker, e_attacker, "none", self.kill_damagetype, 0, str_weapon ); +} + +do_damage_network_safe( e_attacker, n_amount, str_weapon, str_mod ) +{ + if ( isdefined( self.is_mechz ) && self.is_mechz ) + self dodamage( n_amount, self.origin, e_attacker, e_attacker, "none", str_mod, 0, str_weapon ); + else if ( n_amount < self.health ) + { + self.kill_damagetype = str_mod; + maps\mp\zombies\_zm_net::network_safe_init( "dodamage", 6 ); + self maps\mp\zombies\_zm_net::network_choke_action( "dodamage", ::_damage_zombie_network_safe_internal, e_attacker, str_weapon, n_amount ); + } + else + { + self.kill_damagetype = str_mod; + maps\mp\zombies\_zm_net::network_safe_init( "dodamage_kill", 4 ); + self maps\mp\zombies\_zm_net::network_choke_action( "dodamage_kill", ::_kill_zombie_network_safe_internal, e_attacker, str_weapon ); + } +} + +_throttle_bullet_trace_think() +{ + do + { + level.bullet_traces_this_frame = 0; + wait_network_frame(); + } + while ( 1 ); +} + +bullet_trace_throttled( v_start, v_end, e_ignore ) +{ + if ( !isdefined( level.bullet_traces_this_frame ) ) + level thread _throttle_bullet_trace_think(); + + while ( level.bullet_traces_this_frame >= 2 ) + wait_network_frame(); + + level.bullet_traces_this_frame++; + return bullettracepassed( v_start, v_end, 0, e_ignore ); +} + +tomb_get_closest_player_using_paths( origin, players ) +{ + min_length_to_player = 9999999; + n_2d_distance_squared = 9999999; + player_to_return = undefined; + dist_to_tank = undefined; + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( !isdefined( player ) ) + continue; + + if ( isdefined( player.b_already_on_tank ) && player.b_already_on_tank ) + { + if ( !isdefined( dist_to_tank ) ) + { + length_to_player = self maps\mp\zm_tomb_tank::tomb_get_path_length_to_tank(); + dist_to_tank = length_to_player; + } + else + length_to_player = dist_to_tank; + } + else + length_to_player = self get_path_length_to_enemy( player ); + + if ( isdefined( level.validate_enemy_path_length ) ) + { + if ( length_to_player == 0 ) + { + valid = self thread [[ level.validate_enemy_path_length ]]( player ); + + if ( !valid ) + continue; + } + } + + if ( length_to_player < min_length_to_player ) + { + min_length_to_player = length_to_player; + player_to_return = player; + n_2d_distance_squared = distance2dsquared( self.origin, player.origin ); + continue; + } + + if ( length_to_player == min_length_to_player && length_to_player <= 5 ) + { + n_new_distance = distance2dsquared( self.origin, player.origin ); + + if ( n_new_distance < n_2d_distance_squared ) + { + min_length_to_player = length_to_player; + player_to_return = player; + n_2d_distance_squared = n_new_distance; + } + } + } + + return player_to_return; +} + +update_staff_accessories( n_element_index ) +{ +/# + if ( !isdefined( n_element_index ) ) + { + n_element_index = 0; + str_weapon = self getcurrentweapon(); + + if ( is_weapon_upgraded_staff( str_weapon ) ) + { + s_info = maps\mp\zm_tomb_craftables::get_staff_info_from_weapon_name( str_weapon ); + + if ( isdefined( s_info ) ) + { + n_element_index = s_info.enum; + s_info.charger.is_charged = 1; + } + } + } +#/ + if ( !( isdefined( self.one_inch_punch_flag_has_been_init ) && self.one_inch_punch_flag_has_been_init ) ) + { + cur_weapon = self get_player_melee_weapon(); + weapon_to_keep = "knife_zm"; + self.use_staff_melee = 0; + + if ( n_element_index != 0 ) + { + staff_info = maps\mp\zm_tomb_craftables::get_staff_info_from_element_index( n_element_index ); + + if ( staff_info.charger.is_charged ) + staff_info = staff_info.upgrade; + + if ( isdefined( staff_info.melee ) ) + { + weapon_to_keep = staff_info.melee; + self.use_staff_melee = 1; + } + } + + melee_changed = 0; + + if ( cur_weapon != weapon_to_keep ) + { + self takeweapon( cur_weapon ); + self giveweapon( weapon_to_keep ); + self set_player_melee_weapon( weapon_to_keep ); + melee_changed = 1; + } + } + + has_revive = self hasweapon( "staff_revive_zm" ); + has_upgraded_staff = 0; + a_weapons = self getweaponslistprimaries(); + staff_info = maps\mp\zm_tomb_craftables::get_staff_info_from_element_index( n_element_index ); + + foreach ( str_weapon in a_weapons ) + { + if ( is_weapon_upgraded_staff( str_weapon ) ) + has_upgraded_staff = 1; + } + + if ( has_revive && !has_upgraded_staff ) + { + self setactionslot( 3, "altmode" ); + self takeweapon( "staff_revive_zm" ); + } + else if ( !has_revive && has_upgraded_staff ) + { + self setactionslot( 3, "weapon", "staff_revive_zm" ); + self giveweapon( "staff_revive_zm" ); + + if ( isdefined( staff_info ) ) + { + if ( isdefined( staff_info.upgrade.revive_ammo_stock ) ) + { + self setweaponammostock( "staff_revive_zm", staff_info.upgrade.revive_ammo_stock ); + self setweaponammoclip( "staff_revive_zm", staff_info.upgrade.revive_ammo_clip ); + } + } + } +} + +get_round_enemy_array_wrapper() +{ + if ( isdefined( level.custom_get_round_enemy_array_func ) ) + a_enemies = [[ level.custom_get_round_enemy_array_func ]](); + else + a_enemies = get_round_enemy_array(); + + return a_enemies; +} + +add_ragdoll() +{ + level.n_active_ragdolls++; + wait 1; + + if ( level.n_active_ragdolls > 0 ) + level.n_active_ragdolls--; +} + +ragdoll_attempt() +{ + if ( level.n_active_ragdolls >= 4 ) + return false; + + level thread add_ragdoll(); + return true; +} diff --git a/ZM/Maps/Origins/maps/mp/zm_tomb_vo.gsc b/ZM/Maps/Origins/maps/mp/zm_tomb_vo.gsc new file mode 100644 index 0000000..e6755b0 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zm_tomb_vo.gsc @@ -0,0 +1,2522 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\zombies\_zm_unitrigger; + +init_level_specific_audio() +{ + flag_init( "story_vo_playing" ); + flag_init( "round_one_narrative_vo_complete" ); + flag_init( "maxis_audiolog_gr0_playing" ); + flag_init( "maxis_audiolog_gr1_playing" ); + flag_init( "maxis_audiolog_gr2_playing" ); + flag_init( "maxis_audio_log_1" ); + flag_init( "maxis_audio_log_2" ); + flag_init( "maxis_audio_log_3" ); + flag_init( "maxis_audio_log_4" ); + flag_init( "maxis_audio_log_5" ); + flag_init( "maxis_audio_log_6" ); + flag_init( "generator_find_vo_playing" ); + flag_init( "samantha_intro_done" ); + flag_init( "maxis_crafted_intro_done" ); + level.oh_shit_vo_cooldown = 0; + level.remove_perk_vo_delay = 1; + setdvar( "zombie_kills", "5" ); + setdvar( "zombie_kill_timer", "6" ); + + if ( is_classic() ) + { + level._audio_custom_response_line = ::tomb_audio_custom_response_line; + level.audio_get_mod_type = ::tomb_audio_get_mod_type_override; + level.custom_kill_damaged_vo = maps\mp\zombies\_zm_audio::custom_kill_damaged_vo; + level._custom_zombie_oh_shit_vox_func = ::tomb_custom_zombie_oh_shit_vox; + level.gib_on_damage = ::tomb_custom_crawler_spawned_vo; + level._audio_custom_weapon_check = ::tomb_audio_custom_weapon_check; + level._magic_box_used_vo = ::tomb_magic_box_used_vo; + level thread start_narrative_vo(); + level thread first_magic_box_seen_vo(); + level thread start_samantha_intro_vo(); + level.zombie_custom_craftable_built_vo = ::tomb_drone_built_vo; + level thread discover_dig_site_vo(); + level thread maxis_audio_logs(); + level thread discover_pack_a_punch(); + } + + tomb_add_player_dialogue( "player", "general", "no_money_weapon", "nomoney_generic", undefined ); + tomb_add_player_dialogue( "player", "general", "no_money_box", "nomoney_generic", undefined ); + tomb_add_player_dialogue( "player", "general", "perk_deny", "nomoney_generic", undefined ); + tomb_add_player_dialogue( "player", "general", "no_money_capture", "nomoney_generic", undefined ); + tomb_add_player_dialogue( "player", "perk", "specialty_armorvest", "perk_jugga", undefined ); + tomb_add_player_dialogue( "player", "perk", "specialty_quickrevive", "perk_revive", undefined ); + tomb_add_player_dialogue( "player", "perk", "specialty_fastreload", "perk_speed", undefined ); + tomb_add_player_dialogue( "player", "perk", "specialty_longersprint", "perk_stamine", undefined ); + tomb_add_player_dialogue( "player", "perk", "specialty_additionalprimaryweapon", "perk_mule", undefined ); + tomb_add_player_dialogue( "player", "kill", "closekill", "kill_close", undefined, 15 ); + tomb_add_player_dialogue( "player", "kill", "damage", "kill_damaged", undefined, 50 ); + tomb_add_player_dialogue( "player", "kill", "headshot", "kill_headshot", "resp_kill_headshot", 25 ); + tomb_add_player_dialogue( "player", "kill", "raygun", "kill_ray", undefined, 15 ); + tomb_add_player_dialogue( "player", "kill", "raymk2", "kill_raymk2", undefined, 15 ); + tomb_add_player_dialogue( "player", "kill", "one_inch_punch", "kill_one_inch", undefined, 15 ); + tomb_add_player_dialogue( "player", "kill", "ice_staff", "kill_ice", undefined, 15 ); + tomb_add_player_dialogue( "player", "kill", "ice_staff_upgrade", "kill_ice_upgrade", undefined, 15 ); + tomb_add_player_dialogue( "player", "kill", "fire_staff", "kill_fire", undefined, 15 ); + tomb_add_player_dialogue( "player", "kill", "fire_staff_upgrade", "kill_fire_upgrade", undefined, 15 ); + tomb_add_player_dialogue( "player", "kill", "light_staff", "kill_light", undefined, 15 ); + tomb_add_player_dialogue( "player", "kill", "light_staff_upgrade", "kill_light_upgrade", undefined, 15 ); + tomb_add_player_dialogue( "player", "kill", "wind_staff", "kill_wind", undefined, 15 ); + tomb_add_player_dialogue( "player", "kill", "wind_staff_upgrade", "kill_wind_upgrade", undefined, 15 ); + tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_0_neg", "head_rspnd_to_plr_0_neg", undefined, 100 ); + tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_0_pos", "head_rspnd_to_plr_0_pos", undefined, 100 ); + tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_1_neg", "head_rspnd_to_plr_1_neg", undefined, 100 ); + tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_1_pos", "head_rspnd_to_plr_1_pos", undefined, 100 ); + tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_2_neg", "head_rspnd_to_plr_2_neg", undefined, 100 ); + tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_2_pos", "head_rspnd_to_plr_2_pos", undefined, 100 ); + tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_3_neg", "head_rspnd_to_plr_3_neg", undefined, 100 ); + tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_3_pos", "head_rspnd_to_plr_3_pos", undefined, 100 ); + tomb_add_player_dialogue( "player", "powerup", "zombie_blood", "powerup_zombie_blood", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "revive_up", "revive_player", "revive_player", 100 ); + tomb_add_player_dialogue( "player", "general", "heal_revived_pos", "heal_revived_pos", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "heal_revived_neg", "heal_revived_neg", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "exert_sigh", "exert_sigh", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "exert_laugh", "exert_laugh", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "pain_high", "pain_high", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "build_dd_pickup", "build_dd_pickup", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "build_dd_brain_pickup", "pickup_brain", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "build_dd_final", "build_dd_final", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "build_dd_plc", "build_dd_take", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "build_zs_pickup", "build_zs_pickup", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "build_zs_final", "build_zs_final", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "build_zs_plc", "build_zs_take", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "record_pickup", "pickup_record", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "gramophone_pickup", "pickup_gramophone", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "place_gramophone", "place_gramophone", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "staff_part_pickup", "pickup_staff_part", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "crystal_pickup", "pickup_crystal", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "pickup_fire", "pickup_fire", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "pickup_ice", "pickup_ice", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "pickup_light", "pickup_light", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "pickup_wind", "pickup_wind", undefined, 100 ); + tomb_add_player_dialogue( "player", "puzzle", "try_puzzle", "activate_generic", undefined ); + tomb_add_player_dialogue( "player", "puzzle", "puzzle_confused", "confusion_generic", undefined ); + tomb_add_player_dialogue( "player", "puzzle", "puzzle_good", "outcome_yes_generic", undefined ); + tomb_add_player_dialogue( "player", "puzzle", "puzzle_bad", "outcome_no_generic", undefined ); + tomb_add_player_dialogue( "player", "puzzle", "berate_respond", "generic_chastise", undefined ); + tomb_add_player_dialogue( "player", "puzzle", "encourage_respond", "generic_encourage", undefined ); + tomb_add_player_dialogue( "player", "staff", "first_piece", "1st_staff_found", undefined ); + tomb_add_player_dialogue( "player", "general", "build_pickup", "pickup_generic", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "reboard", "rebuild_boards", undefined, 100 ); + tomb_add_player_dialogue( "player", "weapon_pickup", "explo", "wpck_explo", undefined, 100 ); + tomb_add_player_dialogue( "player", "weapon_pickup", "raygun_mark2_zm", "wpck_raymk2", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "use_box_intro", "use_box_intro", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "use_box_2nd_time", "use_box_2nd_time", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "take_weapon_intro", "take_weapon_intro", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "take_weapon_2nd_time", "take_weapon_2nd_time", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "discover_wall_buy", "discover_wall_buy", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "generic_wall_buy", "generic_wall_buy", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "pap_arm", "pap_arm", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "pap_discovered", "capture_zones", undefined, 100 ); + tomb_add_player_dialogue( "player", "tank", "discover_tank", "discover_tank", undefined ); + tomb_add_player_dialogue( "player", "tank", "tank_flame_zombie", "kill_tank", undefined ); + tomb_add_player_dialogue( "player", "tank", "tank_buy", "buy_tank", undefined ); + tomb_add_player_dialogue( "player", "tank", "tank_leave", "exit_tank", undefined ); + tomb_add_player_dialogue( "player", "tank", "tank_cooling", "cool_tank", undefined ); + tomb_add_player_dialogue( "player", "tank", "tank_left_behind", "miss_tank", undefined ); + tomb_add_player_dialogue( "player", "general", "siren_1st_time", "siren_1st_time", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "siren_generic", "siren_generic", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "multiple_mechs", "multiple_mechs", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "discover_mech", "discover_mech", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "mech_defeated", "mech_defeated", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "mech_grab", "rspnd_mech_grab", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "shoot_mech_arm", "shoot_mech_arm", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "shoot_mech_head", "shoot_mech_head", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "shoot_mech_power", "shoot_mech_power", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "rspnd_mech_jump", "rspnd_mech_jump", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "enter_robot", "enter_robot", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "purge_robot", "purge_robot", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "exit_robot", "exit_robot", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "air_chute_landing", "air_chute_landing", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "robot_crush_golden", "robot_crush_golden", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "robot_crush_player", "robot_crush_player", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "discover_robot", "discover_robot", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "see_robots", "see_robots", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "robot_crush_zombie", "robot_crush_zombie", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "robot_crush_mech", "robot_crush_mech", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "shoot_robot", "shoot_robot", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "warn_robot_foot", "warn_robot_foot", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "warn_robot", "warn_robot", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "use_beacon", "use_beacon", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_0_neg", "srnd_rspnd_to_plr_0_neg", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_1_neg", "srnd_rspnd_to_plr_1_neg", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_2_neg", "srnd_rspnd_to_plr_2_neg", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_3_neg", "srnd_rspnd_to_plr_3_neg", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_0_pos", "srnd_rspnd_to_plr_0_pos", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_1_pos", "srnd_rspnd_to_plr_1_pos", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_2_pos", "srnd_rspnd_to_plr_2_pos", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_3_pos", "srnd_rspnd_to_plr_3_pos", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "achievement", "earn_acheivement", undefined, 100 ); + tomb_add_player_dialogue( "player", "quest", "find_secret", "find_secret", undefined, 100 ); + tomb_add_player_dialogue( "player", "perk", "one_inch", "perk_one_inch", undefined, 100 ); + tomb_add_player_dialogue( "player", "digging", "pickup_shovel", "pickup_shovel", undefined, 100 ); + tomb_add_player_dialogue( "player", "digging", "dig_gun", "dig_gun", undefined, 15 ); + tomb_add_player_dialogue( "player", "digging", "dig_grenade", "dig_grenade", undefined, 15 ); + tomb_add_player_dialogue( "player", "digging", "dig_zombie", "dig_zombie", undefined, 15 ); + tomb_add_player_dialogue( "player", "digging", "dig_staff_part", "dig_staff_part", undefined, 100 ); + tomb_add_player_dialogue( "player", "digging", "dig_powerup", "dig_powerup", undefined, 15 ); + tomb_add_player_dialogue( "player", "digging", "dig_cash", "dig_cash", undefined, 15 ); + tomb_add_player_dialogue( "player", "soul_box", "zm_box_encourage", "zm_box_encourage", undefined, 100 ); + tomb_add_player_dialogue( "player", "zone_capture", "capture_started", "capture_zombies", undefined, 100 ); + tomb_add_player_dialogue( "player", "zone_capture", "recapture_started", "roaming_zombies", undefined, 100 ); + tomb_add_player_dialogue( "player", "zone_capture", "recapture_generator_attacked", "recapture_initiated", undefined, 100 ); + tomb_add_player_dialogue( "player", "zone_capture", "recapture_prevented", "recapture_prevented", undefined, 100 ); + tomb_add_player_dialogue( "player", "zone_capture", "all_generators_captured", "zones_held", undefined, 100 ); + tomb_add_player_dialogue( "player", "lockdown", "power_off", "lockdown_generic", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "struggle_mud", "struggle_mud", undefined, 100 ); + tomb_add_player_dialogue( "player", "general", "discover_dig_site", "discover_dig_site", undefined, 100 ); + tomb_add_player_dialogue( "player", "quadrotor", "kill_drone", "kill_drone", undefined, 100 ); + tomb_add_player_dialogue( "player", "quadrotor", "rspnd_drone_revive", "rspnd_drone_revive", undefined, 100 ); + tomb_add_player_dialogue( "player", "wunderfizz", "perk_wonder", "perk_wonder", undefined, 100 ); + tomb_add_player_dialogue( "player", "samantha", "hear_samantha_1", "hear_samantha_1", undefined, 100 ); + tomb_add_player_dialogue( "player", "samantha", "heroes_confer", "heroes_confer", undefined, 100 ); + tomb_add_player_dialogue( "player", "samantha", "hear_samantha_3", "hear_samantha_3", undefined, 100 ); + init_sam_promises(); +} + +tomb_add_player_dialogue( speaker, category, type, alias, response, chance ) +{ + level.vox zmbvoxadd( speaker, category, type, alias, response ); + + if ( isdefined( chance ) ) + add_vox_response_chance( type, chance ); +} + +tomb_audio_get_mod_type_override( impact, mod, weapon, zombie, instakill, dist, player ) +{ + close_dist = 4096; + med_dist = 15376; + far_dist = 75625; + a_str_mod = []; + + if ( isdefined( zombie.staff_dmg ) ) + weapon = zombie.staff_dmg; + else if ( isdefined( zombie ) && isdefined( zombie.damageweapon ) ) + weapon = zombie.damageweapon; + + if ( weapon == "staff_water_zm" || weapon == "staff_water_upgraded_zm" ) + a_str_mod[a_str_mod.size] = "ice_staff"; + + if ( weapon == "staff_water_upgraded2_zm" || weapon == "staff_water_upgraded3_zm" ) + a_str_mod[a_str_mod.size] = "ice_staff_upgrade"; + + if ( weapon == "staff_fire_zm" || weapon == "staff_fire_upgraded_zm" ) + a_str_mod[a_str_mod.size] = "fire_staff"; + + if ( weapon == "staff_fire_upgraded2_zm" || weapon == "staff_fire_upgraded3_zm" ) + a_str_mod[a_str_mod.size] = "fire_staff_upgrade"; + + if ( weapon == "staff_lightning_zm" || weapon == "staff_lightning_upgraded_zm" ) + a_str_mod[a_str_mod.size] = "light_staff"; + + if ( weapon == "staff_lightning_upgraded2_zm" || weapon == "staff_lightning_upgraded3_zm" ) + a_str_mod[a_str_mod.size] = "light_staff_upgrade"; + + if ( weapon == "staff_air_zm" || weapon == "staff_air_upgraded_zm" ) + a_str_mod[a_str_mod.size] = "wind_staff"; + + if ( weapon == "staff_air_upgraded2_zm" || weapon == "staff_air_upgraded3_zm" ) + a_str_mod[a_str_mod.size] = "wind_staff_upgrade"; + + if ( is_headshot( weapon, impact, mod ) && dist >= far_dist ) + a_str_mod[a_str_mod.size] = "headshot"; + + if ( weapon == "ray_gun_zm" || weapon == "ray_gun_upgraded_zm" ) + { + if ( dist > far_dist ) + { + if ( !instakill ) + a_str_mod[a_str_mod.size] = "raygun"; + else + a_str_mod[a_str_mod.size] = "weapon_instakill"; + } + } + + if ( weapon == "raygun_mark2_zm" || weapon == "raygun_mark2_upgraded_zm" ) + { + if ( dist > far_dist ) + { + if ( !instakill ) + a_str_mod[a_str_mod.size] = "raymk2"; + else + a_str_mod[a_str_mod.size] = "weapon_instakill"; + } + } + + if ( is_explosive_damage( mod ) && weapon != "ray_gun_zm" && weapon != "ray_gun_upgraded_zm" && weapon != "raygun_mark2_zm" && weapon != "raygun_mark2_upgraded_zm" && !( isdefined( zombie.is_on_fire ) && zombie.is_on_fire ) ) + { + if ( !issubstr( weapon, "staff" ) ) + { + if ( !instakill ) + a_str_mod[a_str_mod.size] = "explosive"; + else + a_str_mod[a_str_mod.size] = "weapon_instakill"; + } + } + + if ( instakill ) + { + if ( mod == "MOD_MELEE" ) + a_str_mod[a_str_mod.size] = "melee_instakill"; + else + a_str_mod[a_str_mod.size] = "weapon_instakill"; + } + + if ( mod != "MOD_MELEE" && !zombie.has_legs ) + a_str_mod[a_str_mod.size] = "crawler"; + + if ( mod != "MOD_BURNED" && dist < close_dist ) + a_str_mod[a_str_mod.size] = "closekill"; + + if ( a_str_mod.size == 0 ) + str_mod_final = "default"; + else if ( a_str_mod.size == 1 ) + str_mod_final = a_str_mod[0]; + else + { + for ( i = 0; i < a_str_mod.size; i++ ) + { + if ( cointoss() ) + str_mod_final = a_str_mod[i]; + } + + str_mod_final = a_str_mod[randomint( a_str_mod.size )]; + } + + return str_mod_final; +} + +tomb_custom_zombie_oh_shit_vox() +{ + self endon( "death_or_disconnect" ); + + while ( true ) + { + wait 1; + + if ( isdefined( self.oh_shit_vo_cooldown ) && self.oh_shit_vo_cooldown ) + continue; + + players = get_players(); + zombs = get_round_enemy_array(); + + if ( players.size <= 1 ) + { + n_distance = 250; + n_zombies = 5; + n_chance = 30; + n_cooldown_time = 20; + } + else + { + n_distance = 250; + n_zombies = 5; + n_chance = 30; + n_cooldown_time = 15; + } + + close_zombs = 0; + + for ( i = 0; i < zombs.size; i++ ) + { + if ( isdefined( zombs[i].favoriteenemy ) && zombs[i].favoriteenemy == self || !isdefined( zombs[i].favoriteenemy ) ) + { + if ( distancesquared( zombs[i].origin, self.origin ) < n_distance * n_distance ) + close_zombs++; + } + } + + if ( close_zombs >= n_zombies ) + { + if ( randomint( 100 ) < n_chance && !( isdefined( self.giant_robot_transition ) && self.giant_robot_transition ) && !isdefined( self.in_giant_robot_head ) ) + { + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "oh_shit" ); + self thread global_oh_shit_cooldown_timer( n_cooldown_time ); + wait( n_cooldown_time ); + } + } + } +} + +global_oh_shit_cooldown_timer( n_cooldown_time ) +{ + self endon( "disconnect" ); + self.oh_shit_vo_cooldown = 1; + wait( n_cooldown_time ); + self.oh_shit_vo_cooldown = 0; +} + +tomb_custom_crawler_spawned_vo() +{ + self endon( "death" ); + + if ( isdefined( self.a.gib_ref ) && isalive( self ) ) + { + if ( self.a.gib_ref == "no_legs" || self.a.gib_ref == "right_leg" || self.a.gib_ref == "left_leg" ) + { + if ( isdefined( self.attacker ) && isplayer( self.attacker ) ) + { + if ( isdefined( self.attacker.crawler_created_vo_cooldown ) && self.attacker.crawler_created_vo_cooldown ) + return; + + rand = randomintrange( 0, 100 ); + + if ( rand < 15 ) + { + self.attacker maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "crawl_spawn" ); + self.attacker thread crawler_created_vo_cooldown(); + } + } + } + } +} + +crawler_created_vo_cooldown() +{ + self endon( "disconnect" ); + self.crawler_created_vo_cooldown = 1; + wait 30; + self.crawler_created_vo_cooldown = 0; +} + +tomb_audio_custom_weapon_check( weapon, magic_box ) +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( isdefined( magic_box ) && magic_box ) + { + if ( isdefined( self.magic_box_uses ) && self.magic_box_uses == 1 ) + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "take_weapon_intro" ); + else if ( isdefined( self.magic_box_uses ) && self.magic_box_uses == 2 ) + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "take_weapon_2nd_time" ); + else + { + type = self maps\mp\zombies\_zm_weapons::weapon_type_check( weapon ); + return type; + } + } + else if ( issubstr( weapon, "staff" ) ) + { + if ( weapon == "staff_fire_zm" ) + { + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "pickup_fire" ); + level notify( "staff_crafted_vo", self, 1 ); + } + else if ( weapon == "staff_water_zm" ) + { + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "pickup_ice" ); + level notify( "staff_crafted_vo", self, 4 ); + } + else if ( weapon == "staff_air_zm" ) + { + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "pickup_wind" ); + level notify( "staff_crafted_vo", self, 2 ); + } + else if ( weapon == "staff_lightning_zm" ) + { + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "pickup_light" ); + level notify( "staff_crafted_vo", self, 3 ); + } + } + else if ( !isdefined( self.wallbuys_purchased ) ) + { + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "discover_wall_buy" ); + self.wallbuys_purchased = 1; + } + else if ( weapon == "sticky_grenade_zm" || weapon == "claymore_zm" ) + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "explo" ); + else + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "generic_wall_buy" ); + + return "crappy"; +} + +tomb_magic_box_used_vo() +{ + if ( !isdefined( self.magic_box_uses ) ) + self.magic_box_uses = 1; + else + self.magic_box_uses++; + + if ( self.magic_box_uses == 1 ) + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "use_box_intro" ); + else if ( self.magic_box_uses == 2 ) + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "use_box_2nd_time" ); +} + +easter_egg_song_vo( player ) +{ + wait 3.5; + + if ( isalive( player ) ) + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "quest", "find_secret" ); + else + { + while ( true ) + { + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( isalive( player ) ) + { + if ( !( isdefined( player.dontspeak ) && player.dontspeak ) ) + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "quest", "find_secret" ); + } + } + } + + wait 0.1; + } +} + +play_gramophone_place_vo() +{ + if ( !( isdefined( self.dontspeak ) && self.dontspeak ) ) + { + if ( !( isdefined( self.gramophone_place_vo ) && self.gramophone_place_vo ) ) + { + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "place_gramophone" ); + self.gramophone_place_vo = 1; + } + } +} + +setup_personality_character_exerts() +{ + level.exert_sounds[1]["burp"][0] = "vox_plr_0_exert_burp_0"; + level.exert_sounds[1]["burp"][1] = "vox_plr_0_exert_burp_1"; + level.exert_sounds[1]["burp"][2] = "vox_plr_0_exert_burp_2"; + level.exert_sounds[1]["burp"][3] = "vox_plr_0_exert_burp_3"; + level.exert_sounds[1]["burp"][4] = "vox_plr_0_exert_burp_4"; + level.exert_sounds[1]["burp"][5] = "vox_plr_0_exert_burp_5"; + level.exert_sounds[1]["burp"][6] = "vox_plr_0_exert_burp_6"; + level.exert_sounds[2]["burp"][0] = "vox_plr_1_exert_burp_0"; + level.exert_sounds[2]["burp"][1] = "vox_plr_1_exert_burp_1"; + level.exert_sounds[2]["burp"][2] = "vox_plr_1_exert_burp_2"; + level.exert_sounds[2]["burp"][3] = "vox_plr_1_exert_burp_3"; + level.exert_sounds[3]["burp"][0] = "vox_plr_2_exert_burp_0"; + level.exert_sounds[3]["burp"][1] = "vox_plr_2_exert_burp_1"; + level.exert_sounds[3]["burp"][2] = "vox_plr_2_exert_burp_2"; + level.exert_sounds[3]["burp"][3] = "vox_plr_2_exert_burp_3"; + level.exert_sounds[3]["burp"][4] = "vox_plr_2_exert_burp_4"; + level.exert_sounds[3]["burp"][5] = "vox_plr_2_exert_burp_5"; + level.exert_sounds[3]["burp"][6] = "vox_plr_2_exert_burp_6"; + level.exert_sounds[4]["burp"][0] = "vox_plr_3_exert_burp_0"; + level.exert_sounds[4]["burp"][1] = "vox_plr_3_exert_burp_1"; + level.exert_sounds[4]["burp"][2] = "vox_plr_3_exert_burp_2"; + level.exert_sounds[4]["burp"][3] = "vox_plr_3_exert_burp_3"; + level.exert_sounds[4]["burp"][4] = "vox_plr_3_exert_burp_4"; + level.exert_sounds[4]["burp"][5] = "vox_plr_3_exert_burp_5"; + level.exert_sounds[4]["burp"][6] = "vox_plr_3_exert_burp_6"; + level.exert_sounds[1]["hitmed"][0] = "vox_plr_0_exert_pain_medium_0"; + level.exert_sounds[1]["hitmed"][1] = "vox_plr_0_exert_pain_medium_1"; + level.exert_sounds[1]["hitmed"][2] = "vox_plr_0_exert_pain_medium_2"; + level.exert_sounds[1]["hitmed"][3] = "vox_plr_0_exert_pain_medium_3"; + level.exert_sounds[2]["hitmed"][0] = "vox_plr_1_exert_pain_medium_0"; + level.exert_sounds[2]["hitmed"][1] = "vox_plr_1_exert_pain_medium_1"; + level.exert_sounds[2]["hitmed"][2] = "vox_plr_1_exert_pain_medium_2"; + level.exert_sounds[2]["hitmed"][3] = "vox_plr_1_exert_pain_medium_3"; + level.exert_sounds[3]["hitmed"][0] = "vox_plr_2_exert_pain_medium_0"; + level.exert_sounds[3]["hitmed"][1] = "vox_plr_2_exert_pain_medium_1"; + level.exert_sounds[3]["hitmed"][2] = "vox_plr_2_exert_pain_medium_2"; + level.exert_sounds[3]["hitmed"][3] = "vox_plr_2_exert_pain_medium_3"; + level.exert_sounds[4]["hitmed"][0] = "vox_plr_3_exert_pain_medium_0"; + level.exert_sounds[4]["hitmed"][1] = "vox_plr_3_exert_pain_medium_1"; + level.exert_sounds[4]["hitmed"][2] = "vox_plr_3_exert_pain_medium_2"; + level.exert_sounds[4]["hitmed"][3] = "vox_plr_3_exert_pain_medium_3"; + level.exert_sounds[1]["hitlrg"][0] = "vox_plr_0_exert_pain_high_0"; + level.exert_sounds[1]["hitlrg"][1] = "vox_plr_0_exert_pain_high_1"; + level.exert_sounds[1]["hitlrg"][2] = "vox_plr_0_exert_pain_high_2"; + level.exert_sounds[1]["hitlrg"][3] = "vox_plr_0_exert_pain_high_3"; + level.exert_sounds[2]["hitlrg"][0] = "vox_plr_1_exert_pain_high_0"; + level.exert_sounds[2]["hitlrg"][1] = "vox_plr_1_exert_pain_high_1"; + level.exert_sounds[2]["hitlrg"][2] = "vox_plr_1_exert_pain_high_2"; + level.exert_sounds[2]["hitlrg"][3] = "vox_plr_1_exert_pain_high_3"; + level.exert_sounds[3]["hitlrg"][0] = "vox_plr_2_exert_pain_high_0"; + level.exert_sounds[3]["hitlrg"][1] = "vox_plr_2_exert_pain_high_1"; + level.exert_sounds[3]["hitlrg"][2] = "vox_plr_2_exert_pain_high_2"; + level.exert_sounds[3]["hitlrg"][3] = "vox_plr_2_exert_pain_high_3"; + level.exert_sounds[4]["hitlrg"][0] = "vox_plr_3_exert_pain_high_0"; + level.exert_sounds[4]["hitlrg"][1] = "vox_plr_3_exert_pain_high_1"; + level.exert_sounds[4]["hitlrg"][2] = "vox_plr_3_exert_pain_high_2"; + level.exert_sounds[4]["hitlrg"][3] = "vox_plr_3_exert_pain_high_3"; +} + +tomb_audio_custom_response_line( player, index, category, type ) +{ + if ( type == "revive_up" ) + player thread play_pos_neg_response_on_closest_player( "general", "heal_revived", "kills" ); + else if ( type == "headshot" ) + player thread play_pos_neg_response_on_closest_player( "kill", "headshot_respond_to_plr_" + player.characterindex, "kills" ); + else if ( type == "oh_shit" ) + { + player thread play_pos_neg_response_on_closest_player( "general", "srnd_rspnd_to_plr_" + player.characterindex, "kills" ); + player thread global_oh_shit_cooldown_timer( 15 ); + } +} + +play_vo_category_on_closest_player( category, type ) +{ + a_players = getplayers(); + + if ( a_players.size <= 1 ) + return; + + arrayremovevalue( a_players, self ); + a_closest = arraysort( a_players, self.origin, 1 ); + + if ( distancesquared( self.origin, a_closest[0].origin ) <= 250000 ) + { + if ( isalive( a_closest[0] ) ) + a_closest[0] maps\mp\zombies\_zm_audio::create_and_play_dialog( category, type ); + } +} + +play_pos_neg_response_on_closest_player( category, type, str_stat ) +{ + a_players = getplayers(); + + if ( a_players.size <= 1 ) + return; + + arrayremovevalue( a_players, self ); + a_closest = arraysort( a_players, self.origin, 1 ); + + foreach ( player in a_closest ) + { + if ( distancesquared( self.origin, player.origin ) <= 250000 ) + { + if ( isalive( player ) ) + { + str_suffix = get_positive_or_negative_suffix( self, player, str_stat ); + + if ( isdefined( str_suffix ) ) + type += str_suffix; + + player maps\mp\zombies\_zm_audio::create_and_play_dialog( category, type ); + break; + } + } + } +} + +get_positive_or_negative_suffix( e_player1, e_player2, str_stat ) +{ + n_player1_stat = e_player1 maps\mp\gametypes_zm\_globallogic_score::getpersstat( str_stat ); + n_player2_stat = e_player2 maps\mp\gametypes_zm\_globallogic_score::getpersstat( str_stat ); + + if ( !isdefined( n_player1_stat ) || !isdefined( n_player2_stat ) ) + return undefined; + + if ( n_player1_stat >= n_player2_stat ) + str_result = "_pos"; + else + str_result = "_neg"; + + return str_result; +} + +struggle_mud_vo() +{ + self endon( "disconnect" ); + self.played_mud_vo = 1; + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "struggle_mud" ); + + self waittill( "mud_slowdown_cleared" ); + + self thread struggle_mud_vo_cooldown(); +} + +struggle_mud_vo_cooldown() +{ + self endon( "disconnect" ); + wait 600; + self.played_mud_vo = 0; +} + +discover_dig_site_vo() +{ + flag_wait( "activate_zone_nml" ); + s_origin = getstruct( "discover_dig_site_vo_trigger", "targetname" ); + s_origin.unitrigger_stub = spawnstruct(); + s_origin.unitrigger_stub.origin = s_origin.origin; + s_origin.unitrigger_stub.script_width = 320; + s_origin.unitrigger_stub.script_length = 88; + s_origin.unitrigger_stub.script_height = 256; + s_origin.unitrigger_stub.script_unitrigger_type = "unitrigger_box"; + s_origin.unitrigger_stub.angles = ( 0, 0, 0 ); + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( s_origin.unitrigger_stub, ::discover_dig_site_trigger_touch ); +} + +discover_dig_site_trigger_touch() +{ + while ( true ) + { + self waittill( "trigger", player ); + + if ( isplayer( player ) ) + { + if ( !( isdefined( player.dontspeak ) && player.dontspeak ) ) + { + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "discover_dig_site" ); + maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub ); + break; + } + } + } +} + +maxis_audio_logs() +{ + a_s_radios = getstructarray( "maxis_audio_log", "targetname" ); + + foreach ( s_origin in a_s_radios ) + { + s_origin.unitrigger_stub = spawnstruct(); + s_origin.unitrigger_stub.origin = s_origin.origin; + s_origin.unitrigger_stub.radius = 36; + s_origin.unitrigger_stub.height = 256; + s_origin.unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + s_origin.unitrigger_stub.hint_string = &"ZM_TOMB_MAXIS_AUDIOLOG"; + s_origin.unitrigger_stub.cursor_hint = "HINT_NOICON"; + s_origin.unitrigger_stub.require_look_at = 1; + s_origin.unitrigger_stub.script_int = s_origin.script_int; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( s_origin.unitrigger_stub, ::maxis_audio_log_think ); + } +} + +discover_pack_a_punch() +{ + t_pap_intro = getent( "pack_a_punch_intro_trigger", "targetname" ); + + if ( !isdefined( t_pap_intro ) ) + return; + + s_lookat = getstruct( t_pap_intro.target, "targetname" ); + + while ( true ) + { + t_pap_intro waittill( "trigger", e_player ); + + if ( !isdefined( e_player.discover_pap_vo_played ) ) + e_player.discover_pap_vo_played = 0; + + if ( !e_player.discover_pap_vo_played ) + { + if ( vectordot( anglestoforward( e_player getplayerangles() ), vectornormalize( s_lookat.origin - e_player.origin ) ) > 0.8 && e_player can_player_speak() ) + { + e_player.discover_pap_vo_played = 1; + e_player create_and_play_dialog( "general", "pap_discovered" ); + + foreach ( player in get_players() ) + { + if ( distance( player.origin, e_player.origin ) < 800 ) + player.discover_pap_vo_played = 1; + } + } + } + } +} + +can_player_speak() +{ + return isplayer( self ) && !( isdefined( self.dontspeak ) && self.dontspeak ) && self getclientfieldtoplayer( "isspeaking" ) == 0; +} + +maxis_audio_log_think() +{ + self waittill( "trigger", player ); + + if ( !isplayer( player ) || !is_player_valid( player ) ) + return; + + level thread play_maxis_audio_log( self.stub.origin, self.stub.script_int ); +} + +play_maxis_audio_log( v_trigger_origin, n_audiolog_id ) +{ + a_audiolog = get_audiolog_vo(); + a_audiolog_to_play = a_audiolog[n_audiolog_id]; + + if ( n_audiolog_id == 4 ) + flag_set( "maxis_audiolog_gr0_playing" ); + else if ( n_audiolog_id == 5 ) + flag_set( "maxis_audiolog_gr1_playing" ); + else if ( n_audiolog_id == 6 ) + flag_set( "maxis_audiolog_gr2_playing" ); + + e_vo_origin = spawn( "script_origin", v_trigger_origin ); + flag_set( "maxis_audio_log_" + n_audiolog_id ); + a_s_triggers = getstructarray( "maxis_audio_log", "targetname" ); + + foreach ( s_trigger in a_s_triggers ) + { + if ( s_trigger.script_int == n_audiolog_id ) + break; + } + + level thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( s_trigger.unitrigger_stub ); + + for ( i = 0; i < a_audiolog_to_play.size; i++ ) + { + e_vo_origin playsoundwithnotify( a_audiolog_to_play[i], a_audiolog_to_play[i] + "_done" ); + + e_vo_origin waittill( a_audiolog_to_play[i] + "_done" ); + } + + e_vo_origin delete(); + + if ( n_audiolog_id == 4 ) + flag_clear( "maxis_audiolog_gr0_playing" ); + else if ( n_audiolog_id == 5 ) + flag_clear( "maxis_audiolog_gr1_playing" ); + else if ( n_audiolog_id == 6 ) + flag_clear( "maxis_audiolog_gr2_playing" ); + + level thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( s_trigger.unitrigger_stub, ::maxis_audio_log_think ); +} + +reset_maxis_audiolog_unitrigger( n_robot_id ) +{ + if ( n_robot_id == 0 ) + n_script_int = 4; + else if ( n_robot_id == 1 ) + n_script_int = 5; + else if ( n_robot_id == 2 ) + n_script_int = 6; + + if ( flag( "maxis_audio_log_" + n_script_int ) ) + return; + + a_s_radios = getstructarray( "maxis_audio_log", "targetname" ); + + foreach ( s_origin in a_s_radios ) + { + if ( s_origin.script_int == n_script_int ) + { + if ( isdefined( s_origin.unitrigger_stub ) ) + maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( s_origin.unitrigger_stub ); + } + } +} + +restart_maxis_audiolog_unitrigger( n_robot_id ) +{ + if ( n_robot_id == 0 ) + n_script_int = 4; + else if ( n_robot_id == 1 ) + n_script_int = 5; + else if ( n_robot_id == 2 ) + n_script_int = 6; + + a_s_radios = getstructarray( "maxis_audio_log", "targetname" ); + + foreach ( s_origin in a_s_radios ) + { + if ( s_origin.script_int == n_script_int ) + { + if ( isdefined( s_origin.unitrigger_stub ) ) + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( s_origin.unitrigger_stub, ::maxis_audio_log_think ); + } + } +} + +get_audiolog_vo() +{ + a_audiologs = []; + a_audiologs[1] = []; + a_audiologs[1][0] = "vox_maxi_audio_log_1_1_0"; + a_audiologs[1][1] = "vox_maxi_audio_log_1_2_0"; + a_audiologs[1][2] = "vox_maxi_audio_log_1_3_0"; + a_audiologs[2] = []; + a_audiologs[2][0] = "vox_maxi_audio_log_2_1_0"; + a_audiologs[2][1] = "vox_maxi_audio_log_2_2_0"; + a_audiologs[3] = []; + a_audiologs[3][0] = "vox_maxi_audio_log_3_1_0"; + a_audiologs[3][1] = "vox_maxi_audio_log_3_2_0"; + a_audiologs[3][2] = "vox_maxi_audio_log_3_3_0"; + a_audiologs[4] = []; + a_audiologs[4][0] = "vox_maxi_audio_log_4_1_0"; + a_audiologs[4][1] = "vox_maxi_audio_log_4_2_0"; + a_audiologs[4][2] = "vox_maxi_audio_log_4_3_0"; + a_audiologs[5] = []; + a_audiologs[5][0] = "vox_maxi_audio_log_5_1_0"; + a_audiologs[5][1] = "vox_maxi_audio_log_5_2_0"; + a_audiologs[5][2] = "vox_maxi_audio_log_5_3_0"; + a_audiologs[6] = []; + a_audiologs[6][0] = "vox_maxi_audio_log_6_1_0"; + a_audiologs[6][1] = "vox_maxi_audio_log_6_2_0"; + return a_audiologs; +} + +start_narrative_vo() +{ + flag_wait( "start_zombie_round_logic" ); + set_players_dontspeak( 1 ); + wait 10; + + if ( is_game_solo() ) + game_start_solo_vo(); + else + game_start_vo(); + + level waittill( "end_of_round" ); + + level thread round_two_end_narrative_vo(); + + if ( is_game_solo() ) + round_one_end_solo_vo(); + else + round_one_end_vo(); + + flag_set( "round_one_narrative_vo_complete" ); +} + +start_samantha_intro_vo() +{ + while ( true ) + { + level waittill( "start_of_round" ); + + if ( level.round_number == 5 ) + samantha_intro_1(); + else if ( level.round_number == 6 ) + samantha_intro_2(); + else if ( level.round_number == 7 ) + { + samantha_intro_3(); + flag_set( "samantha_intro_done" ); + break; + } + } +} + +samantha_intro_1() +{ +/# + iprintln( "samantha_intro_1" ); +#/ + players = getplayers(); + + if ( !isdefined( players[0] ) ) + return; + + flag_waitopen( "story_vo_playing" ); + flag_set( "story_vo_playing" ); + set_players_dontspeak( 1 ); + samanthasay( "vox_sam_sam_help_5_0", players[0], 1, 1 ); + players = getplayers(); + + foreach ( player in players ) + { + if ( player.character_name != "Richtofen" ) + { + player play_category_on_player_character_if_present( "hear_samantha_1", player.character_name ); + wait 1; + play_line_on_player_character_if_present( "vox_plr_2_hear_samantha_1_0", "Richtofen" ); + break; + } + } + + set_players_dontspeak( 0 ); + flag_clear( "story_vo_playing" ); +} + +samantha_intro_2() +{ +/# + iprintln( "samantha_intro_2" ); +#/ + player_richtofen = get_player_character_if_present( "Richtofen" ); + + if ( !isdefined( player_richtofen ) ) + return; + + flag_waitopen( "story_vo_playing" ); + flag_set( "story_vo_playing" ); + set_players_dontspeak( 1 ); + + if ( isdefined( player_richtofen ) ) + { + nearest_friend = get_nearest_friend_within_speaking_distance( player_richtofen ); + + if ( isdefined( nearest_friend ) ) + { + nearest_friend play_category_on_player_character_if_present( "heroes_confer", nearest_friend.character_name ); + wait 1; + play_line_on_player_character_if_present( "vox_plr_2_heroes_confer_0", "Richtofen" ); + } + } + + set_players_dontspeak( 0 ); + flag_clear( "story_vo_playing" ); +} + +samantha_intro_3() +{ +/# + iprintln( "samantha_intro_3" ); +#/ + players = getplayers(); + + if ( !isdefined( players[0] ) ) + return; + + flag_waitopen( "story_vo_playing" ); + flag_set( "story_vo_playing" ); + set_players_dontspeak( 1 ); + samanthasay( "vox_sam_hear_samantha_3_0", players[0], 1, 1 ); + players = getplayers(); + player = players[randomintrange( 0, players.size )]; + + if ( isdefined( player ) ) + player play_category_on_player_character_if_present( "hear_samantha_3", player.character_name ); + + set_players_dontspeak( 0 ); + flag_clear( "story_vo_playing" ); +} + +play_category_on_player_character_if_present( category, character_name ) +{ + vox_line_prefix = undefined; + + switch ( character_name ) + { + case "Dempsey": + vox_line_prefix = "vox_plr_0_"; + break; + case "Nikolai": + vox_line_prefix = "vox_plr_1_"; + break; + case "Richtofen": + vox_line_prefix = "vox_plr_2_"; + break; + case "Takeo": + vox_line_prefix = "vox_plr_3_"; + break; + } + + vox_line = vox_line_prefix + category + "_0"; + play_line_on_player_character_if_present( vox_line, character_name ); +} + +get_nearest_friend_within_speaking_distance( other_player ) +{ + distance_nearest = 800; + nearest_friend = undefined; + players = getplayers(); + + foreach ( player in players ) + { + distance_between_players = distance( player.origin, other_player.origin ); + + if ( player != other_player && distance_between_players < distance_nearest ) + { + nearest_friend = player; + distance_nearest = distance_between_players; + } + } + + if ( isdefined( nearest_friend ) ) + return nearest_friend; + else + return undefined; +} + +play_line_on_player_character_if_present( vox_line, character_name ) +{ + player_character = get_player_character_if_present( character_name ); + + if ( isdefined( player_character ) ) + { +/# + iprintln( "" + character_name + " says " + vox_line ); +#/ + player_character playsoundwithnotify( vox_line, "sound_done" + vox_line ); + + player_character waittill( "sound_done" + vox_line ); + + return true; + } + else + return false; +} + +get_player_character_if_present( character_name ) +{ + players = getplayers(); + + foreach ( player in players ) + { + if ( player.character_name == character_name ) + return player; + } + + return undefined; +} + +round_two_end_narrative_vo() +{ + level waittill( "end_of_round" ); + + flag_wait( "round_one_narrative_vo_complete" ); + + if ( flag( "generator_find_vo_playing" ) ) + { + flag_waitopen( "generator_find_vo_playing" ); + wait 3; + } + + if ( is_game_solo() ) + round_two_end_solo_vo(); +} + +game_start_solo_vo() +{ + if ( flag( "story_vo_playing" ) ) + return; + + players = getplayers(); + e_speaker = players[0]; + + if ( !isdefined( e_speaker ) ) + return; + + a_convo = build_game_start_solo_convo(); + flag_set( "story_vo_playing" ); + set_players_dontspeak( 1 ); + lines = a_convo[e_speaker.character_name]; + + if ( isarray( lines ) ) + { + for ( i = 0; i < lines.size; i++ ) + { + e_speaker playsoundwithnotify( lines[i], "sound_done" + lines[i] ); + + e_speaker waittill( "sound_done" + lines[i] ); + + wait 1.0; + } + } + else + { + e_speaker playsoundwithnotify( a_convo[e_speaker.character_name], "sound_done" + a_convo[e_speaker.character_name] ); + + e_speaker waittill( "sound_done" + a_convo[e_speaker.character_name] ); + } + + set_players_dontspeak( 0 ); + flag_clear( "story_vo_playing" ); +} + +build_game_start_solo_convo() +{ + a_game_start_solo_convo = []; + a_game_start_solo_convo["Dempsey"] = "vox_plr_0_game_start_0"; + a_game_start_solo_convo["Nikolai"] = "vox_plr_1_game_start_0"; + a_game_start_solo_convo["Richtofen"] = []; + a_game_start_solo_convo["Richtofen"][0] = "vox_plr_2_game_start_0"; + a_game_start_solo_convo["Richtofen"][1] = "vox_plr_2_game_start_1"; + a_game_start_solo_convo["Takeo"] = "vox_plr_3_game_start_0"; + return a_game_start_solo_convo; +} + +game_start_vo() +{ + players = getplayers(); + + if ( players.size <= 1 ) + return; + + if ( flag( "story_vo_playing" ) ) + return; + + a_game_start_convo = build_game_start_convo(); + flag_set( "story_vo_playing" ); + e_dempsey = undefined; + e_nikolai = undefined; + e_richtofen = undefined; + e_takeo = undefined; + + foreach ( player in players ) + { + if ( isdefined( player ) ) + { + switch ( player.character_name ) + { + case "Dempsey": + e_dempsey = player; + break; + case "Nikolai": + e_nikolai = player; + break; + case "Richtofen": + e_richtofen = player; + break; + case "Takeo": + e_takeo = player; + break; + } + } + } + + set_players_dontspeak( 1 ); + + for ( i = 0; i < a_game_start_convo.size; i++ ) + { + players = getplayers(); + + if ( players.size <= 1 ) + { + set_players_dontspeak( 0 ); + flag_clear( "story_vo_playing" ); + return; + } + + if ( !isdefined( e_richtofen ) ) + continue; + + line_number = i + 1; + + if ( line_number == 2 ) + { + a_richtofen_lines = a_game_start_convo["line_" + line_number]; + + for ( j = 0; j < a_richtofen_lines.size; j++ ) + { + e_richtofen playsoundwithnotify( a_richtofen_lines[j], "sound_done" + a_richtofen_lines[j] ); + + e_richtofen waittill( "sound_done" + a_richtofen_lines[j] ); + } + + continue; + } + + arrayremovevalue( players, e_richtofen ); + players = get_array_of_closest( e_richtofen.origin, players ); + e_speaker = players[0]; + + if ( !isdefined( e_speaker ) ) + continue; + + e_speaker playsoundwithnotify( a_game_start_convo["line_" + line_number][e_speaker.character_name], "sound_done" + a_game_start_convo["line_" + line_number][e_speaker.character_name] ); + + e_speaker waittill( "sound_done" + a_game_start_convo["line_" + line_number][e_speaker.character_name] ); + } + + set_players_dontspeak( 0 ); + flag_clear( "story_vo_playing" ); +} + +build_game_start_convo() +{ + a_game_start_convo = []; + a_game_start_convo["line_1"] = []; + a_game_start_convo["line_1"]["Dempsey"] = "vox_plr_0_game_start_meet_2_0"; + a_game_start_convo["line_1"]["Nikolai"] = "vox_plr_1_game_start_meet_1_0"; + a_game_start_convo["line_1"]["Takeo"] = "vox_plr_3_game_start_meet_3_0"; + a_game_start_convo["line_2"] = []; + a_game_start_convo["line_2"][0] = "vox_plr_2_game_start_meet_4_0"; + a_game_start_convo["line_2"][1] = "vox_plr_2_generator_find_0"; + a_game_start_convo["line_3"] = []; + a_game_start_convo["line_3"]["Dempsey"] = "vox_plr_0_generator_find_0"; + a_game_start_convo["line_3"]["Nikolai"] = "vox_plr_1_generator_find_0"; + a_game_start_convo["line_3"]["Takeo"] = "vox_plr_3_generator_find_0"; + return a_game_start_convo; +} + +run_staff_crafted_vo( str_sam_line ) +{ + wait 1.0; + + while ( isdefined( self.isspeaking ) && self.isspeaking ) + wait_network_frame(); + + if ( level.n_staffs_crafted == 4 ) + all_staffs_crafted_vo(); + else if ( isdefined( str_sam_line ) ) + { + flag_waitopen( "story_vo_playing" ); + flag_set( "story_vo_playing" ); + set_players_dontspeak( 1 ); + samanthasay( str_sam_line, self, 1 ); + set_players_dontspeak( 0 ); + flag_clear( "story_vo_playing" ); + } +} + +staff_craft_vo() +{ + staff_crafted = []; + lines = array( "vox_sam_1st_staff_crafted_0", "vox_sam_2nd_staff_crafted_0", "vox_sam_3rd_staff_crafted_0" ); + + while ( staff_crafted.size < 4 ) + { + level waittill( "staff_crafted_vo", e_crafter, n_element ); + + if ( !( isdefined( staff_crafted[n_element] ) && staff_crafted[n_element] ) ) + { + staff_crafted[n_element] = 1; + line = lines[level.n_staffs_crafted - 1]; + e_crafter thread run_staff_crafted_vo( line ); + } + } +} + +all_staffs_crafted_vo() +{ + while ( flag( "story_vo_playing" ) ) + wait_network_frame(); + + a_convo = build_all_staffs_crafted_vo(); + flag_set( "story_vo_playing" ); + set_players_dontspeak( 1 ); + + for ( i = 0; i < a_convo.size; i++ ) + { + line_number = i + 1; + index = "line_" + line_number; + + if ( isdefined( a_convo[index]["Sam"] ) ) + { + samanthasay( a_convo[index]["Sam"], self ); + continue; + } + + line = a_convo[index][self.character_name]; + self playsoundwithnotify( line, "sound_done" + line ); + + self waittill( "sound_done" + line ); + } + + set_players_dontspeak( 0 ); + flag_clear( "story_vo_playing" ); +} + +build_all_staffs_crafted_vo() +{ + a_staff_convo = []; + a_staff_convo["line_1"] = []; + a_staff_convo["line_1"]["Sam"] = "vox_sam_4th_staff_crafted_0"; + a_staff_convo["line_2"] = []; + a_staff_convo["line_2"]["Dempsey"] = "vox_plr_0_4th_staff_crafted_0"; + a_staff_convo["line_2"]["Nikolai"] = "vox_plr_1_4th_staff_crafted_0"; + a_staff_convo["line_2"]["Richtofen"] = "vox_plr_2_4th_staff_crafted_0"; + a_staff_convo["line_2"]["Takeo"] = "vox_plr_3_4th_staff_crafted_0"; + a_staff_convo["line_3"] = []; + a_staff_convo["line_3"]["Sam"] = "vox_sam_4th_staff_crafted_1"; + a_staff_convo["line_4"] = []; + a_staff_convo["line_4"]["Dempsey"] = "vox_plr_0_4th_staff_crafted_1"; + a_staff_convo["line_4"]["Nikolai"] = "vox_plr_1_4th_staff_crafted_1"; + a_staff_convo["line_4"]["Richtofen"] = "vox_plr_2_4th_staff_crafted_1"; + a_staff_convo["line_4"]["Takeo"] = "vox_plr_3_4th_staff_crafted_1"; + a_staff_convo["line_5"] = []; + a_staff_convo["line_5"]["Sam"] = "vox_sam_generic_encourage_6"; + return a_staff_convo; +} + +get_left_behind_plea() +{ + pl_num = 0; + + if ( self.character_name == "Nikolai" ) + pl_num = 1; + else if ( self.character_name == "Richtofen" ) + pl_num = 2; + else if ( self.character_name == "Takeo" ) + pl_num = 3; + + return "vox_plr_" + pl_num + "_miss_tank_" + randomint( 3 ); +} + +get_left_behind_response( e_victim ) +{ + if ( self.character_name == "Dempsey" ) + { + if ( cointoss() ) + return "vox_plr_0_tank_rspnd_generic_0"; + else if ( e_victim.character_name == "Nikolai" ) + return "vox_plr_0_tank_rspnd_to_plr_1_0"; + else if ( e_victim.character_name == "Richtofen" ) + return "vox_plr_0_tank_rspnd_to_plr_2_0"; + else if ( e_victim.character_name == "Takeo" ) + return "vox_plr_0_tank_rspnd_to_plr_3_0"; + } + else if ( self.character_name == "Nikolai" ) + { + if ( cointoss() ) + return "vox_plr_1_tank_rspnd_generic_0"; + else if ( e_victim.character_name == "Dempsey" ) + return "vox_plr_1_tank_rspnd_to_plr_0_0"; + else if ( e_victim.character_name == "Richtofen" ) + return "vox_plr_1_tank_rspnd_to_plr_2_0"; + else if ( e_victim.character_name == "Takeo" ) + return "vox_plr_1_tank_rspnd_to_plr_3_0"; + } + else if ( self.character_name == "Richtofen" ) + { + if ( cointoss() ) + return "vox_plr_2_tank_rspnd_generic_0"; + else if ( e_victim.character_name == "Dempsey" ) + return "vox_plr_2_tank_rspnd_to_plr_0_0"; + else if ( e_victim.character_name == "Nikolai" ) + return "vox_plr_2_tank_rspnd_to_plr_1_0"; + else if ( e_victim.character_name == "Takeo" ) + return "vox_plr_2_tank_rspnd_to_plr_3_0"; + } + else if ( self.character_name == "Takeo" ) + { + if ( cointoss() ) + return "vox_plr_3_tank_rspnd_generic_0"; + else if ( e_victim.character_name == "Dempsey" ) + return "vox_plr_3_tank_rspnd_to_plr_0_0"; + else if ( e_victim.character_name == "Nikolai" ) + return "vox_plr_3_tank_rspnd_to_plr_1_0"; + else if ( e_victim.character_name == "Richtofen" ) + return "vox_plr_3_tank_rspnd_to_plr_2_0"; + } + + return undefined; +} + +tank_left_behind_vo( e_victim, e_rider ) +{ + if ( !isdefined( e_victim ) || !isdefined( e_rider ) ) + return; + + if ( flag( "story_vo_playing" ) ) + return; + + flag_set( "story_vo_playing" ); + set_players_dontspeak( 1 ); + e_victim.isspeaking = 1; + e_rider.isspeaking = 1; + str_plea_line = e_victim get_left_behind_plea(); + e_victim playsoundwithnotify( str_plea_line, "sound_done" + str_plea_line ); + + e_victim waittill( "sound_done" + str_plea_line ); + + str_rider_line = e_rider get_left_behind_response( e_victim ); + e_victim playsoundwithnotify( str_rider_line, "sound_done" + str_rider_line ); + + e_victim waittill( "sound_done" + str_rider_line ); + + e_victim.isspeaking = 0; + e_rider.isspeaking = 0; + set_players_dontspeak( 0 ); + flag_clear( "story_vo_playing" ); +} + +round_one_end_solo_vo() +{ + if ( flag( "story_vo_playing" ) ) + return; + + players = getplayers(); + e_speaker = players[0]; + + if ( !isdefined( e_speaker ) ) + return; + + a_convo = build_round_one_end_solo_convo(); + flag_set( "story_vo_playing" ); + set_players_dontspeak( 1 ); + lines = a_convo[e_speaker.character_name]; + + if ( isarray( lines ) ) + { + for ( i = 0; i < lines.size; i++ ) + { + e_speaker playsoundwithnotify( lines[i], "sound_done" + lines[i] ); + + e_speaker waittill( "sound_done" + lines[i] ); + + wait 1.0; + } + } + else + { + e_speaker playsoundwithnotify( a_convo[e_speaker.character_name], "sound_done" + a_convo[e_speaker.character_name] ); + + e_speaker waittill( "sound_done" + a_convo[e_speaker.character_name] ); + } + + set_players_dontspeak( 0 ); + flag_clear( "story_vo_playing" ); +} + +build_round_one_end_solo_convo() +{ + a_round_one_end_solo_convo = []; + a_round_one_end_solo_convo["Dempsey"] = []; + a_round_one_end_solo_convo["Dempsey"][0] = "vox_plr_0_end_round_1_5_0"; + a_round_one_end_solo_convo["Dempsey"][1] = "vox_plr_0_end_round_1_6_1"; + a_round_one_end_solo_convo["Nikolai"] = "vox_plr_1_end_round_1_9_0"; + a_round_one_end_solo_convo["Richtofen"] = "vox_plr_2_end_round_1_7_0"; + a_round_one_end_solo_convo["Takeo"] = "vox_plr_3_end_round_1_8_0"; + return a_round_one_end_solo_convo; +} + +round_one_end_vo() +{ + players = getplayers(); + + if ( players.size <= 1 ) + return; + + if ( flag( "story_vo_playing" ) ) + return; + + a_convo = build_round_one_end_convo(); + flag_set( "story_vo_playing" ); + e_dempsey = undefined; + e_nikolai = undefined; + e_richtofen = undefined; + e_takeo = undefined; + + foreach ( player in players ) + { + if ( isdefined( player ) ) + { + switch ( player.character_name ) + { + case "Dempsey": + e_dempsey = player; + break; + case "Nikolai": + e_nikolai = player; + break; + case "Richtofen": + e_richtofen = player; + break; + case "Takeo": + e_takeo = player; + break; + } + } + } + + set_players_dontspeak( 1 ); + + for ( i = 0; i < a_convo.size; i++ ) + { + players = getplayers(); + + if ( players.size <= 1 ) + { + set_players_dontspeak( 0 ); + flag_clear( "story_vo_playing" ); + return; + } + + if ( !isdefined( e_richtofen ) ) + continue; + + line_number = i + 1; + + if ( line_number == 2 ) + { + a_richtofen_lines = a_convo["line_" + line_number]; + + for ( j = 0; j < a_richtofen_lines.size; j++ ) + { + e_richtofen playsoundwithnotify( a_richtofen_lines[j], "sound_done" + a_richtofen_lines[j] ); + + e_richtofen waittill( "sound_done" + a_richtofen_lines[j] ); + } + + continue; + } + + arrayremovevalue( players, e_richtofen ); + players = get_array_of_closest( e_richtofen.origin, players ); + e_speaker = players[0]; + + if ( !isdefined( e_speaker ) ) + continue; + + e_speaker playsoundwithnotify( a_convo["line_" + line_number][e_speaker.character_name], "sound_done" + a_convo["line_" + line_number][e_speaker.character_name] ); + + e_speaker waittill( "sound_done" + a_convo["line_" + line_number][e_speaker.character_name] ); + } + + set_players_dontspeak( 0 ); + flag_clear( "story_vo_playing" ); +} + +build_round_one_end_convo() +{ + a_round_one_end_convo = []; + a_round_one_end_convo["line_1"] = []; + a_round_one_end_convo["line_1"]["Dempsey"] = "vox_plr_0_end_round_1_1_0"; + a_round_one_end_convo["line_1"]["Nikolai"] = "vox_plr_1_end_round_1_3_0"; + a_round_one_end_convo["line_1"]["Takeo"] = "vox_plr_3_end_round_1_2_0"; + a_round_one_end_convo["line_2"] = []; + a_round_one_end_convo["line_2"][0] = "vox_plr_2_story_exposition_4_0"; + a_round_one_end_convo["line_3"] = []; + a_round_one_end_convo["line_3"]["Dempsey"] = "vox_plr_0_during_round_1_0"; + a_round_one_end_convo["line_3"]["Nikolai"] = "vox_plr_1_during_round_2_0"; + a_round_one_end_convo["line_3"]["Takeo"] = "vox_plr_3_during_round_2_0"; + return a_round_one_end_convo; +} + +round_two_end_solo_vo() +{ + if ( flag( "story_vo_playing" ) ) + return; + + players = getplayers(); + e_speaker = players[0]; + + if ( !isdefined( e_speaker ) ) + return; + + a_convo = build_round_two_end_solo_convo(); + flag_set( "story_vo_playing" ); + set_players_dontspeak( 1 ); + lines = a_convo[e_speaker.character_name]; + + if ( isarray( lines ) ) + { + for ( i = 0; i < lines.size; i++ ) + { + e_speaker playsoundwithnotify( lines[i], "sound_done" + lines[i] ); + + e_speaker waittill( "sound_done" + lines[i] ); + + wait 1.0; + } + } + else + { + e_speaker playsoundwithnotify( a_convo[e_speaker.character_name], "sound_done" + a_convo[e_speaker.character_name] ); + + e_speaker waittill( "sound_done" + a_convo[e_speaker.character_name] ); + } + + set_players_dontspeak( 0 ); + flag_clear( "story_vo_playing" ); +} + +build_round_two_end_solo_convo() +{ + a_round_two_end_solo_convo = []; + a_round_two_end_solo_convo["Dempsey"] = "vox_plr_0_end_round_2_1_0"; + a_round_two_end_solo_convo["Nikolai"] = "vox_plr_1_end_round_2_5_0"; + a_round_two_end_solo_convo["Richtofen"] = []; + a_round_two_end_solo_convo["Richtofen"][0] = "vox_plr_2_end_round_2_2_0"; + a_round_two_end_solo_convo["Richtofen"][1] = "vox_plr_2_end_round_2_3_1"; + a_round_two_end_solo_convo["Takeo"] = "vox_plr_3_end_round_2_4_0"; + return a_round_two_end_solo_convo; +} + +first_magic_box_seen_vo() +{ + flag_wait( "start_zombie_round_logic" ); + magicbox = level.chests[level.chest_index]; + a_players = getplayers(); + + foreach ( player in a_players ) + player thread wait_and_play_first_magic_box_seen_vo( magicbox.unitrigger_stub ); +} + +wait_and_play_first_magic_box_seen_vo( struct ) +{ + self endon( "disconnect" ); + level endon( "first_maigc_box_discovered" ); + + while ( true ) + { + if ( distancesquared( self.origin, struct.origin ) < 40000 ) + { + if ( self is_player_looking_at( struct.origin, 0.75 ) ) + { + if ( !( isdefined( self.dontspeak ) && self.dontspeak ) ) + { + if ( flag( "story_vo_playing" ) ) + { + wait 0.1; + continue; + } + + players = getplayers(); + a_speakers = []; + + foreach ( player in players ) + { + if ( isdefined( player ) && distance2dsquared( player.origin, self.origin ) <= 1000000 ) + { + switch ( player.character_name ) + { + case "Dempsey": + e_dempsey = player; + a_speakers[a_speakers.size] = e_dempsey; + break; + case "Nikolai": + e_nikolai = player; + a_speakers[a_speakers.size] = e_nikolai; + break; + case "Richtofen": + e_richtofen = player; + a_speakers[a_speakers.size] = e_richtofen; + break; + case "Takeo": + e_takeo = player; + a_speakers[a_speakers.size] = e_takeo; + break; + } + } + } + + if ( !isdefined( e_richtofen ) ) + { + wait 0.1; + continue; + } + + if ( a_speakers.size < 2 ) + { + wait 0.1; + continue; + } + + flag_set( "story_vo_playing" ); + set_players_dontspeak( 1 ); + a_convo = build_first_magic_box_seen_vo(); + + if ( isdefined( e_richtofen ) ) + { + e_richtofen playsoundwithnotify( a_convo[0][e_richtofen.character_name], "sound_done" + a_convo[0][e_richtofen.character_name] ); + + e_richtofen waittill( "sound_done" + a_convo[0][e_richtofen.character_name] ); + } + + if ( isdefined( struct.trigger_target ) && isdefined( struct.trigger_target.is_locked ) ) + { + arrayremovevalue( a_speakers, e_richtofen ); + a_speakers = get_array_of_closest( e_richtofen.origin, a_speakers ); + e_speaker = a_speakers[0]; + + if ( distancesquared( e_speaker.origin, e_richtofen.origin ) < 2250000 ) + { + if ( isdefined( e_speaker ) ) + { + e_speaker playsoundwithnotify( a_convo[1][e_speaker.character_name], "sound_done" + a_convo[1][e_speaker.character_name] ); + + e_speaker waittill( "sound_done" + a_convo[1][e_speaker.character_name] ); + } + } + } + + if ( isdefined( struct.trigger_target ) && isdefined( struct.trigger_target.is_locked ) ) + { + if ( struct.trigger_target.is_locked == 1 ) + { + if ( isdefined( e_richtofen ) ) + { + e_richtofen playsoundwithnotify( a_convo[2][e_richtofen.character_name], "sound_done" + a_convo[2][e_richtofen.character_name] ); + + e_richtofen waittill( "sound_done" + a_convo[2][e_richtofen.character_name] ); + } + } + } + + set_players_dontspeak( 0 ); + flag_clear( "story_vo_playing" ); + level notify( "first_maigc_box_discovered" ); + break; + } + } + } + + wait 0.1; + } +} + +build_first_magic_box_seen_vo() +{ + a_first_magic_box_seen_convo = []; + a_first_magic_box_seen_convo[0] = []; + a_first_magic_box_seen_convo[0]["Richtofen"] = "vox_plr_2_respond_maxis_1_0"; + a_first_magic_box_seen_convo[1] = []; + a_first_magic_box_seen_convo[1]["Dempsey"] = "vox_plr_0_respond_maxis_2_0"; + a_first_magic_box_seen_convo[1]["Takeo"] = "vox_plr_3_respond_maxis_3_0"; + a_first_magic_box_seen_convo[1]["Nikolai"] = "vox_plr_1_respond_maxis_4_0"; + a_first_magic_box_seen_convo[2] = []; + a_first_magic_box_seen_convo[2]["Richtofen"] = "vox_plr_2_respond_maxis_5_0"; + return a_first_magic_box_seen_convo; +} + +tomb_drone_built_vo( s_craftable ) +{ + if ( s_craftable.weaponname != "equip_dieseldrone_zm" ) + return; + + flag_waitopen( "story_vo_playing" ); + flag_set( "story_vo_playing" ); + set_players_dontspeak( 1 ); + wait 1; + e_vo_origin = get_speaking_location_maxis_drone( self, s_craftable ); + vox_line = "vox_maxi_maxis_drone_1_0"; + e_vo_origin playsoundwithnotify( vox_line, "sound_done" + vox_line ); +/# + iprintln( "Maxis says " + vox_line ); +#/ + e_vo_origin waittill( "sound_done" + vox_line ); + + e_vo_origin delete(); + wait 1; + e_vo_origin = get_speaking_location_maxis_drone( self, s_craftable ); + vox_line = "vox_maxi_maxis_drone_4_0"; + e_vo_origin playsoundwithnotify( vox_line, "sound_done" + vox_line ); +/# + iprintln( "Maxis says " + vox_line ); +#/ + e_vo_origin waittill( "sound_done" + vox_line ); + + e_vo_origin delete(); + wait 1; + + if ( isdefined( self ) && self.character_name == "Richtofen" ) + { + vox_line = "vox_plr_2_maxis_drone_5_0"; +/# + iprintln( "" + self.character_name + " says " + vox_line ); +#/ + self playsoundwithnotify( vox_line, "sound_done" + vox_line ); + + self waittill( "sound_done" + vox_line ); + } + + set_players_dontspeak( 0 ); + flag_clear( "story_vo_playing" ); + flag_set( "maxis_crafted_intro_done" ); +} + +get_speaking_location_maxis_drone( player, s_craftable ) +{ + e_vo_origin = undefined; + + if ( isdefined( level.maxis_quadrotor ) ) + { + e_vo_origin = spawn( "script_origin", level.maxis_quadrotor.origin ); + e_vo_origin linkto( level.maxis_quadrotor ); + } + else + { + player = b_player_has_dieseldrone_weapon(); + + if ( isdefined( player ) ) + { + e_vo_origin = spawn( "script_origin", player.origin ); + e_vo_origin linkto( player ); + } + else + e_vo_origin = spawn( "script_origin", s_craftable.origin ); + } + + return e_vo_origin; +} + +b_player_has_dieseldrone_weapon() +{ + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( player hasweapon( "equip_dieseldrone_zm" ) ) + return player; + } + + return undefined; +} + +set_players_dontspeak( bool ) +{ + players = getplayers(); + + if ( bool ) + { + foreach ( player in players ) + { + if ( isdefined( player ) ) + { + player.dontspeak = 1; + player setclientfieldtoplayer( "isspeaking", 1 ); + } + } + + foreach ( player in players ) + { + while ( isdefined( player ) && ( isdefined( player.isspeaking ) && player.isspeaking ) ) + wait 0.1; + } + } + else + { + foreach ( player in players ) + { + if ( isdefined( player ) ) + { + player.dontspeak = 0; + player setclientfieldtoplayer( "isspeaking", 0 ); + } + } + } +} + +set_player_dontspeak( bool ) +{ + if ( bool ) + { + self.dontspeak = 1; + self setclientfieldtoplayer( "isspeaking", 1 ); + + while ( isdefined( self ) && ( isdefined( self.isspeaking ) && self.isspeaking ) ) + wait 0.1; + } + else + { + self.dontspeak = 0; + self setclientfieldtoplayer( "isspeaking", 0 ); + } +} + +is_game_solo() +{ + players = getplayers(); + + if ( players.size == 1 ) + return true; + else + return false; +} + +add_puzzle_completion_line( n_element_enum, str_line ) +{ + if ( !isdefined( level.puzzle_completion_lines ) ) + { + level.puzzle_completion_lines = []; + level.puzzle_completion_lines_count = []; + } + + if ( !isdefined( level.puzzle_completion_lines[n_element_enum] ) ) + { + level.puzzle_completion_lines[n_element_enum] = []; + level.puzzle_completion_lines_count[n_element_enum] = 0; + } + + level.puzzle_completion_lines[n_element_enum][level.puzzle_completion_lines[n_element_enum].size] = str_line; +} + +say_puzzle_completion_line( n_element_enum ) +{ + level notify( "quest_progressed" ); + wait 4.0; + + if ( level.puzzle_completion_lines_count[n_element_enum] >= level.puzzle_completion_lines[n_element_enum].size ) + { +/# + iprintlnbold( "Out of puzzle completion lines for element " + n_element_enum ); +#/ + return; + } + + str_line = level.puzzle_completion_lines[n_element_enum][level.puzzle_completion_lines_count[n_element_enum]]; + level.puzzle_completion_lines_count[n_element_enum]++; + set_players_dontspeak( 1 ); + level samanthasay( str_line, self ); + set_players_dontspeak( 0 ); +} + +watch_occasional_line( str_category, str_line, str_notify, n_time_between = 30.0, n_times_to_play = 100 ) +{ + for ( i = 0; i < n_times_to_play; i++ ) + { + level waittill( str_notify, e_player ); + + if ( isdefined( e_player ) ) + { + e_player maps\mp\zombies\_zm_audio::create_and_play_dialog( str_category, str_line ); + wait( n_time_between ); + } + } +} + +watch_one_shot_line( str_category, str_line, str_notify ) +{ + while ( true ) + { + level waittill( str_notify, e_player ); + + if ( isdefined( e_player ) ) + { + e_player maps\mp\zombies\_zm_audio::create_and_play_dialog( str_category, str_line ); + return; + } + } +} + +watch_one_shot_samantha_line( str_line, str_notify ) +{ + while ( true ) + { + level waittill( str_notify, e_play_on ); + + if ( isdefined( e_play_on ) ) + { + set_players_dontspeak( 1 ); + + if ( samanthasay( str_line, e_play_on ) ) + { + set_players_dontspeak( 0 ); + return; + } + + set_players_dontspeak( 0 ); + } + } +} + +watch_one_shot_samantha_clue( str_line, str_notify, str_endon ) +{ + if ( isdefined( str_endon ) ) + level endon( str_endon ); + + if ( !isdefined( level.next_samantha_clue_time ) ) + level.next_samantha_clue_time = gettime(); + + while ( true ) + { + level waittill( str_notify, e_player ); + + wait 10; + + if ( isdefined( e_player ) && ( isdefined( e_player.vo_promises_playing ) && e_player.vo_promises_playing ) ) + continue; + + while ( isdefined( level.sam_talking ) && level.sam_talking ) + wait_network_frame(); + + if ( level.next_samantha_clue_time > gettime() ) + continue; + + if ( !isplayer( e_player ) ) + { + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( player.zombie_vars["zombie_powerup_zombie_blood_on"] ) + { + e_player = player; + break; + } + } + } + + if ( isdefined( e_player ) && isplayer( e_player ) && e_player.zombie_vars["zombie_powerup_zombie_blood_on"] && flag( "samantha_intro_done" ) ) + { + flag_waitopen( "story_vo_playing" ); + flag_set( "story_vo_playing" ); + + while ( isdefined( e_player.isspeaking ) && e_player.isspeaking ) + wait_network_frame(); + + if ( !is_player_valid( e_player ) ) + continue; + + set_players_dontspeak( 1 ); + level.sam_talking = 1; + e_player playsoundtoplayer( str_line, e_player ); + n_duration = soundgetplaybacktime( str_line ); + wait( n_duration / 1000 ); + level.sam_talking = 0; + level.next_samantha_clue_time = gettime() + 300000; + flag_clear( "story_vo_playing" ); + set_players_dontspeak( 0 ); + return; + } + } +} + +samantha_discourage_reset() +{ + n_min_time = 60000 * 5; + n_max_time = 60000 * 10; + level.sam_next_beratement = gettime() + randomintrange( n_min_time, n_max_time ); +} + +samantha_encourage_watch_good_lines() +{ + while ( true ) + { + level waittill( "vo_puzzle_good", e_player ); + + wait 1.0; + level notify( "quest_progressed", e_player, 1 ); + } +} + +samantha_encourage_think() +{ + original_list = array( "vox_sam_generic_encourage_0", "vox_sam_generic_encourage_1", "vox_sam_generic_encourage_2", "vox_sam_generic_encourage_3", "vox_sam_generic_encourage_4", "vox_sam_generic_encourage_5" ); + available_list = []; + n_min_time = 60000 * 5; + n_max_time = 60000 * 10; + next_encouragement = 0; + level thread samantha_encourage_watch_good_lines(); + + while ( true ) + { + if ( available_list.size == 0 ) + available_list = arraycopy( original_list ); + + e_player = undefined; + say_something = 0; + + level waittill( "quest_progressed", e_player, say_something ); + + samantha_discourage_reset(); + + if ( gettime() < next_encouragement ) + continue; + + if ( !( isdefined( say_something ) && say_something ) ) + continue; + + if ( !isdefined( e_player ) ) + continue; + + if ( !is_player_valid( e_player ) ) + continue; + + if ( isdefined( level.sam_talking ) && level.sam_talking ) + continue; + + while ( flag( "story_vo_playing" ) || isdefined( e_player.isspeaking ) && e_player.isspeaking ) + wait_network_frame(); + + line = random( available_list ); + arrayremovevalue( available_list, line ); + set_players_dontspeak( 1 ); + + if ( samanthasay( line, e_player, 1 ) ) + { + set_players_dontspeak( 0 ); + e_player maps\mp\zombies\_zm_audio::create_and_play_dialog( "puzzle", "encourage_respond" ); + next_encouragement = gettime() + randomintrange( n_min_time, n_max_time ); + } + + set_players_dontspeak( 0 ); + } +} + +samantha_discourage_think() +{ + level endon( "ee_all_staffs_upgraded" ); + original_list = array( "vox_sam_generic_chastise_0", "vox_sam_generic_chastise_1", "vox_sam_generic_chastise_2", "vox_sam_generic_chastise_3", "vox_sam_generic_chastise_4", "vox_sam_generic_chastise_5", "vox_sam_generic_chastise_6" ); + available_list = []; + flag_wait( "samantha_intro_done" ); + + while ( true ) + { + if ( available_list.size == 0 ) + available_list = arraycopy( original_list ); + + samantha_discourage_reset(); + + while ( gettime() < level.sam_next_beratement ) + wait 1.0; + + line = random( available_list ); + arrayremovevalue( available_list, line ); + a_players = getplayers(); + + while ( a_players.size > 0 ) + { + e_player = random( a_players ); + arrayremovevalue( a_players, e_player ); + + if ( is_player_valid( e_player ) ) + { + samanthasay( line, e_player, 1 ); + e_player maps\mp\zombies\_zm_audio::create_and_play_dialog( "puzzle", "berate_respond" ); + break; + } + } + } +} + +samanthasay( vox_line, e_source, b_wait_for_nearby_speakers = 0, intro_line = 0 ) +{ + level endon( "end_game" ); + + if ( !intro_line && !flag( "samantha_intro_done" ) ) + return false; + else if ( intro_line && flag( "samantha_intro_done" ) ) + return false; + + while ( isdefined( level.sam_talking ) && level.sam_talking ) + wait_network_frame(); + + level.sam_talking = 1; + + if ( b_wait_for_nearby_speakers ) + { + nearbyplayers = get_array_of_closest( e_source.origin, get_players(), undefined, undefined, 256 ); + + if ( isdefined( nearbyplayers ) && nearbyplayers.size > 0 ) + { + foreach ( player in nearbyplayers ) + { + while ( isdefined( player ) && ( isdefined( player.isspeaking ) && player.isspeaking ) ) + wait 0.05; + } + } + } + + level thread samanthasayvoplay( e_source, vox_line ); + + level waittill( "SamanthaSay_vo_finished" ); + + return true; +} + +samanthasayvoplay( e_source, vox_line ) +{ + e_source playsoundwithnotify( vox_line, "sound_done" + vox_line ); + + e_source waittill( "sound_done" + vox_line ); + + level.sam_talking = 0; + level notify( "SamanthaSay_vo_finished" ); +} + +maxissay( vox_line, m_spot_override, b_wait_for_nearby_speakers ) +{ + level endon( "end_game" ); + level endon( "intermission" ); + + if ( isdefined( level.intermission ) && level.intermission ) + return; + + if ( !flag( "maxis_crafted_intro_done" ) ) + return; + + while ( isdefined( level.maxis_talking ) && level.maxis_talking ) + wait 0.05; + + level.maxis_talking = 1; +/# + iprintlnbold( "Maxis Says: " + vox_line ); +#/ + if ( isdefined( m_spot_override ) ) + m_vo_spot = m_spot_override; + + if ( isdefined( b_wait_for_nearby_speakers ) && b_wait_for_nearby_speakers ) + { + nearbyplayers = get_array_of_closest( m_vo_spot.origin, get_players(), undefined, undefined, 256 ); + + if ( isdefined( nearbyplayers ) && nearbyplayers.size > 0 ) + { + foreach ( player in nearbyplayers ) + { + while ( isdefined( player ) && ( isdefined( player.isspeaking ) && player.isspeaking ) ) + wait 0.05; + } + } + } + + level thread maxissayvoplay( m_vo_spot, vox_line ); + + level waittill( "MaxisSay_vo_finished" ); +} + +maxissayvoplay( m_vo_spot, vox_line ) +{ + m_vo_spot playsoundwithnotify( vox_line, "sound_done" + vox_line ); + m_vo_spot waittill_either( "sound_done" + vox_line, "death" ); + level.maxis_talking = 0; + level notify( "MaxisSay_vo_finished" ); +} + +richtofenrespondvoplay( vox_category, b_richtofen_first = 0, str_flag ) +{ + if ( flag( "story_vo_playing" ) ) + return; + + flag_set( "story_vo_playing" ); + set_players_dontspeak( 1 ); + + if ( b_richtofen_first ) + { + if ( self.character_name == "Richtofen" ) + { + str_vox_line = "vox_plr_" + self.characterindex + "_" + vox_category + "_0"; + self playsoundwithnotify( str_vox_line, "rich_done" ); + + self waittill( "rich_done" ); + + wait 0.5; + + foreach ( player in getplayers() ) + { + if ( player.character_name != "Richtofen" && distance2d( player.origin, self.origin ) < 800 ) + { + str_vox_line = "vox_plr_" + player.characterindex + "_" + vox_category + "_0"; + player playsoundwithnotify( str_vox_line, "rich_done" ); + + player waittill( "rich_done" ); + } + } + } + else + { + foreach ( player in getplayers() ) + { + if ( player.character_name == "Richtofen" && distance2d( player.origin, self.origin ) < 800 ) + { + str_vox_line = "vox_plr_" + player.characterindex + "_" + vox_category + "_0"; + player playsoundwithnotify( str_vox_line, "rich_done" ); + + player waittill( "rich_done" ); + + wait 0.5; + } + } + + if ( isdefined( self ) ) + { + str_vox_line = "vox_plr_" + self.characterindex + "_" + vox_category + "_0"; + self playsoundwithnotify( str_vox_line, "rich_response" ); + + self waittill( "rich_response" ); + } + } + } + else if ( self.character_name == "Richtofen" ) + { + foreach ( player in getplayers() ) + { + if ( player.character_name != "Richtofen" && distance2d( player.origin, self.origin ) < 800 ) + { + str_vox_line = "vox_plr_" + player.characterindex + "_" + vox_category + "_0"; + player playsoundwithnotify( str_vox_line, "rich_done" ); + + player waittill( "rich_done" ); + + wait 0.5; + } + } + + if ( isdefined( self ) ) + { + str_vox_line = "vox_plr_" + self.characterindex + "_" + vox_category + "_0"; + self playsoundwithnotify( str_vox_line, "rich_done" ); + + self waittill( "rich_done" ); + } + } + else + { + str_vox_line = "vox_plr_" + self.characterindex + "_" + vox_category + "_0"; + self playsoundwithnotify( str_vox_line, "rich_response" ); + + self waittill( "rich_response" ); + + wait 0.5; + + foreach ( player in getplayers() ) + { + if ( player.character_name == "Richtofen" && distance2d( player.origin, self.origin ) < 800 ) + { + str_vox_line = "vox_plr_" + player.characterindex + "_" + vox_category + "_0"; + player playsoundwithnotify( str_vox_line, "rich_done" ); + + player waittill( "rich_done" ); + } + } + } + + if ( isdefined( str_flag ) ) + flag_set( str_flag ); + + set_players_dontspeak( 0 ); + flag_clear( "story_vo_playing" ); +} + +wunderfizz_used_vo() +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( isdefined( self.has_used_perk_random ) && self.has_used_perk_random ) + return; + + if ( isdefined( self.character_name ) && self.character_name != "Richtofen" ) + return; + + if ( flag( "story_vo_playing" ) ) + return; + + if ( isdefined( self.dontspeak ) && self.dontspeak ) + return; + + set_players_dontspeak( 1 ); + self.has_used_perk_random = 1; + + for ( i = 1; i < 4; i++ ) + { + vox_line = "vox_plr_2_discover_wonder_" + i + "_0"; + self playsoundwithnotify( vox_line, "sound_done" + vox_line ); + + self waittill( "sound_done" + vox_line ); + + wait 0.1; + } + + set_players_dontspeak( 0 ); +} + +init_sam_promises() +{ + level.vo_promises["Richtofen_1"][0] = "vox_sam_hear_samantha_2_plr_2_0"; + level.vo_promises["Richtofen_1"][1] = "vox_plr_2_hear_samantha_2_0"; + level.vo_promises["Richtofen_2"][0] = "vox_sam_sam_richtofen_1_0"; + level.vo_promises["Richtofen_2"][1] = "vox_sam_sam_richtofen_2_0"; + level.vo_promises["Richtofen_2"][2] = "vox_plr_2_sam_richtofen_3_0"; + level.vo_promises["Richtofen_3"][0] = "vox_sam_sam_richtofen_4_0"; + level.vo_promises["Richtofen_3"][1] = "vox_plr_2_sam_richtofen_5_0"; + level.vo_promises["Richtofen_3"][2] = "vox_plr_2_sam_richtofen_6_0"; + level.vo_promises["Dempsey_1"][0] = "vox_sam_hear_samantha_2_plr_0_0"; + level.vo_promises["Dempsey_1"][1] = "vox_plr_0_hear_samantha_2_0"; + level.vo_promises["Dempsey_2"][0] = "vox_sam_sam_dempsey_1_0"; + level.vo_promises["Dempsey_2"][1] = "vox_sam_sam_dempsey_1_1"; + level.vo_promises["Dempsey_2"][2] = "vox_plr_0_sam_dempsey_1_0"; + level.vo_promises["Dempsey_3"][0] = "vox_sam_sam_dempsey_2_0"; + level.vo_promises["Dempsey_3"][1] = "vox_sam_sam_dempsey_2_1"; + level.vo_promises["Dempsey_3"][2] = "vox_plr_0_sam_dempsey_2_0"; + level.vo_promises["Nikolai_1"][0] = "vox_sam_hear_samantha_2_plr_1_0"; + level.vo_promises["Nikolai_1"][1] = "vox_plr_1_hear_samantha_2_0"; + level.vo_promises["Nikolai_2"][0] = "vox_sam_sam_nikolai_1_0"; + level.vo_promises["Nikolai_2"][1] = "vox_sam_sam_nikolai_1_1"; + level.vo_promises["Nikolai_2"][2] = "vox_plr_1_sam_nikolai_1_0"; + level.vo_promises["Nikolai_3"][0] = "vox_sam_sam_nikolai_2_0"; + level.vo_promises["Nikolai_3"][1] = "vox_sam_sam_nikolai_2_1"; + level.vo_promises["Nikolai_3"][2] = "vox_plr_1_sam_nikolai_2_0"; + level.vo_promises["Takeo_1"][0] = "vox_sam_hear_samantha_2_plr_3_0"; + level.vo_promises["Takeo_1"][1] = "vox_plr_3_hear_samantha_2_0"; + level.vo_promises["Takeo_2"][0] = "vox_sam_sam_takeo_1_0"; + level.vo_promises["Takeo_2"][1] = "vox_sam_sam_takeo_1_1"; + level.vo_promises["Takeo_2"][2] = "vox_plr_3_sam_takeo_1_0"; + level.vo_promises["Takeo_3"][0] = "vox_sam_sam_takeo_2_0"; + level.vo_promises["Takeo_3"][1] = "vox_sam_sam_takeo_2_1"; + level.vo_promises["Takeo_3"][2] = "vox_plr_3_sam_takeo_2_0"; + level thread sam_promises_watch(); +} + +sam_promises_watch() +{ + flag_wait( "samantha_intro_done" ); + + while ( true ) + { + level waittill( "player_zombie_blood", e_player ); + + a_players = get_players(); + + if ( randomint( 100 ) < 20 ) + e_player thread sam_promises_conversation(); + } +} + +sam_promises_conversation() +{ + self endon( "disconnect" ); + self.vo_promises_playing = 1; + wait 3; + + if ( !isdefined( self.n_vo_promises ) ) + self.n_vo_promises = 1; + + if ( self.n_vo_promises > 3 || isdefined( self.b_promise_cooldown ) && self.b_promise_cooldown || flag( "story_vo_playing" ) ) + { + self.vo_promises_playing = undefined; + return; + } + + a_promises = level.vo_promises[self.character_name + "_" + self.n_vo_promises]; + self.n_vo_promises++; + self thread sam_promises_cooldown(); + level.sam_talking = 1; + self set_player_dontspeak( 1 ); + flag_set( "story_vo_playing" ); + self play_sam_promises_conversation( a_promises ); + level.sam_talking = 0; + self set_player_dontspeak( 0 ); + flag_clear( "story_vo_playing" ); + self.vo_promises_playing = undefined; +} + +play_sam_promises_conversation( a_promises ) +{ + for ( i = 0; i < a_promises.size; i++ ) + { + self endon( "zombie_blood_over" ); + self endon( "disconnect" ); + + if ( issubstr( a_promises[i], "sam_sam" ) || issubstr( a_promises[i], "samantha" ) ) + { + self thread sam_promises_conversation_ended_early( a_promises[i] ); + self playsoundtoplayer( a_promises[i], self ); + n_duration = soundgetplaybacktime( a_promises[i] ); + wait( n_duration / 1000 ); + self notify( "promises_VO_end_early" ); + } + else + { + self playsoundwithnotify( a_promises[i], "player_done" ); + + self waittill( "player_done" ); + } + + wait 0.3; + } +} + +sam_promises_conversation_ended_early( str_alias ) +{ + self notify( "promises_VO_end_early" ); + self endon( "promises_VO_end_early" ); + + while ( self.zombie_vars["zombie_powerup_zombie_blood_on"] ) + wait 0.05; + + self stoplocalsound( str_alias ); +} + +sam_promises_cooldown() +{ + self endon( "disconnect" ); + self.b_promise_cooldown = 1; + + level waittill( "end_of_round" ); + + self.b_promise_cooldown = undefined; +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_ai_mechz.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_ai_mechz.gsc new file mode 100644 index 0000000..228c2d3 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_ai_mechz.gsc @@ -0,0 +1,1965 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\zombies\_zm_zonemgr; +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\zm_tomb_tank; +#include maps\mp\zombies\_zm_ai_mechz_dev; +#include maps\mp\zombies\_zm_ai_mechz_claw; +#include maps\mp\zombies\_zm_ai_mechz_ft; +#include maps\mp\zombies\_zm_ai_mechz_booster; +#include maps\mp\zombies\_zm_ai_mechz_ffotd; +#include maps\mp\zombies\_zm_ai_mechz; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zm_tomb_chamber; +#include maps\mp\zombies\_zm_ai_basic; + +precache() +{ + level thread mechz_setup_armor_pieces(); + precachemodel( "c_zom_mech_claw" ); + precachemodel( "c_zom_mech_faceplate" ); + precachemodel( "c_zom_mech_powersupply_cap" ); + level._effect["mech_dmg_sparks"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_sparks" ); + level._effect["mech_dmg_steam"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_steam" ); + level._effect["mech_booster"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_jump_booster" ); + level._effect["mech_wpn_source"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_wpn_source" ); + level._effect["mech_wpn_flamethrower"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_wpn_flamethrower" ); + level._effect["mech_booster_landing"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_jump_landing" ); + level._effect["mech_faceplate_dmg"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_armor_face" ); + level._effect["mech_armor_dmg"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_armor" ); + level._effect["mech_exhaust"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_exhaust_smoke" ); + level._effect["mech_booster_feet"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_jump_booster_sm" ); + level._effect["mech_headlamp"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_head_light" ); + level._effect["mech_footstep_steam"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_foot_step_steam" ); + setdvar( "zombie_double_wide_checks", 1 ); + precacherumble( "mechz_footsteps" ); + precacheshellshock( "lava_small" ); +} + +#using_animtree("mechz_claw"); + +init() +{ + maps\mp\zombies\_zm_ai_mechz_ffotd::mechz_init_start(); + level.mechz_spawners = getentarray( "mechz_spawner", "script_noteworthy" ); + + if ( level.mechz_spawners.size == 0 ) + return; + + for ( i = 0; i < level.mechz_spawners.size; i++ ) + { + level.mechz_spawners[i].is_enabled = 1; + level.mechz_spawners[i].script_forcespawn = 1; + } + + level.mechz_base_health = 5000; + level.mechz_health = level.mechz_base_health; + level.mechz_health_increase = 1000; + level.mechz_round_count = 0; + level.mechz_damage_percent = 0.1; + level.mechz_remove_helmet_head_dmg_base = 500; + level.mechz_remove_helmet_head_dmg = level.mechz_remove_helmet_head_dmg_base; + level.mechz_remove_helmet_head_dmg_increase = 250; + level.mechz_explosive_dmg_head_scaler = 0.25; + level.mechz_helmet_health_percentage = 0.1; + level.mechz_powerplant_expose_dmg_base = 300; + level.mechz_powerplant_expose_dmg = level.mechz_powerplant_expose_base_dmg; + level.mechz_powerplant_expose_dmg_increase = 100; + level.mechz_powerplant_destroy_dmg_base = 500; + level.mechz_powerplant_destroy_dmg = level.mechz_powerplant_destroy_dmg_base; + level.mechz_powerplant_destroy_dmg_increase = 150; + level.mechz_powerplant_expose_health_percentage = 0.05; + level.mechz_powerplant_destroyed_health_percentage = 0.025; + level.mechz_explosive_dmg_to_cancel_claw_percentage = 0.1; + level.mechz_min_round_fq = 3; + level.mechz_max_round_fq = 4; + level.mechz_min_round_fq_solo = 4; + level.mechz_max_round_fq_solo = 6; + level.mechz_reset_dist_sq = 65536; + level.mechz_sticky_dist_sq = 1048576; + level.mechz_aggro_dist_sq = 16384; + level.mechz_zombie_per_round = 1; + level.mechz_left_to_spawn = 0; + level.mechz_players_in_zone_spawn_point_cap = 120; + level.mechz_shotgun_damage_mod = 1.5; + level.mechz_failed_paths_to_jump = 3; + level.mechz_jump_dist_threshold = 4410000; + level.mechz_jump_delay = 3; + level.mechz_player_flame_dmg = 10; + level.mechz_half_front_arc = cos( 45 ); + level.mechz_ft_sweep_chance = 10; + level.mechz_aim_max_pitch = 60; + level.mechz_aim_max_yaw = 45; + level.mechz_custom_goalradius = 48; + level.mechz_custom_goalradius_sq = level.mechz_custom_goalradius * level.mechz_custom_goalradius; + level.mechz_tank_knockdown_time = 5; + level.mechz_robot_knockdown_time = 10; + level.mechz_dist_for_sprint = 129600; + level.mechz_dist_for_stop_sprint = 57600; + level.mechz_claw_cooldown_time = 7000; + level.mechz_flamethrower_cooldown_time = 5000; + level.mechz_min_extra_spawn = 8; + level.mechz_max_extra_spawn = 11; + level.mechz_points_for_killer = 250; + level.mechz_points_for_team = 500; + level.mechz_points_for_helmet = 100; + level.mechz_points_for_powerplant = 100; + level.mechz_flogger_stun_time = 3; + level.mechz_powerplant_stun_time = 4; + flag_init( "mechz_launching_claw" ); + flag_init( "mechz_claw_move_complete" ); + registerclientfield( "actor", "mechz_fx", 14000, 12, "int" ); + registerclientfield( "toplayer", "mechz_grab", 14000, 1, "int" ); + level thread init_flamethrower_triggers(); + + if ( isdefined( level.mechz_spawning_logic_override_func ) ) + level thread [[ level.mechz_spawning_logic_override_func ]](); + else + level thread mechz_spawning_logic(); + + scriptmodelsuseanimtree( #animtree ); +/# + setup_devgui(); +#/ + maps\mp\zombies\_zm_ai_mechz_ffotd::mechz_init_end(); +} + +mechz_setup_armor_pieces() +{ + level.mechz_armor_info = []; + level.mechz_armor_info[0] = spawnstruct(); + level.mechz_armor_info[0].model = "c_zom_mech_armor_knee_left"; + level.mechz_armor_info[0].tag = "J_Knee_Attach_LE"; + level.mechz_armor_info[1] = spawnstruct(); + level.mechz_armor_info[1].model = "c_zom_mech_armor_knee_right"; + level.mechz_armor_info[1].tag = "J_Knee_attach_RI"; + level.mechz_armor_info[2] = spawnstruct(); + level.mechz_armor_info[2].model = "c_zom_mech_armor_shoulder_left"; + level.mechz_armor_info[2].tag = "J_ShoulderArmor_LE"; + level.mechz_armor_info[3] = spawnstruct(); + level.mechz_armor_info[3].model = "c_zom_mech_armor_shoulder_right"; + level.mechz_armor_info[3].tag = "J_ShoulderArmor_RI"; + level.mechz_armor_info[4] = spawnstruct(); + level.mechz_armor_info[4].tag = "J_Root_Attach_LE"; + level.mechz_armor_info[5] = spawnstruct(); + level.mechz_armor_info[5].tag = "J_Root_Attach_RI"; + + for ( i = 0; i < level.mechz_armor_info.size; i++ ) + { + if ( isdefined( level.mechz_armor_info[i].model ) ) + precachemodel( level.mechz_armor_info[i].model ); + } +} + +mechz_setup_fx() +{ + self.fx_field = 0; + self thread booster_fx_watcher(); + self thread flamethrower_fx_watcher(); +} + +clear_one_off_fx( fx_id ) +{ + self endon( "death" ); + wait 10; + self.fx_field &= ~fx_id; + self setclientfield( "mechz_fx", self.fx_field ); +} + +traversal_booster_fx_watcher() +{ + self endon( "death" ); + + while ( true ) + { + self waittill( "traverse_anim", notetrack ); + + if ( notetrack == "booster_on" ) + { + self.fx_field |= 128; + self.sndloopent playsound( "zmb_ai_mechz_rocket_start" ); + self.sndloopent playloopsound( "zmb_ai_mechz_rocket_loop", 0.75 ); + } + else if ( notetrack == "booster_off" ) + { + self.fx_field &= ~128; + self.sndloopent playsound( "zmb_ai_mechz_rocket_stop" ); + self.sndloopent stoploopsound( 1 ); + } + + self setclientfield( "mechz_fx", self.fx_field ); + } +} + +booster_fx_watcher() +{ + self endon( "death" ); + self thread traversal_booster_fx_watcher(); + + while ( true ) + { + self waittill( "jump_anim", notetrack ); + + if ( isdefined( self.mechz_hidden ) && self.mechz_hidden ) + continue; + + if ( notetrack == "booster_on" ) + { + self.fx_field |= 128; + self.sndloopent playsound( "zmb_ai_mechz_rocket_start" ); + self.sndloopent playloopsound( "zmb_ai_mechz_rocket_loop", 0.75 ); + } + else if ( notetrack == "booster_off" ) + { + self.fx_field &= ~128; + self.sndloopent playsound( "zmb_ai_mechz_rocket_stop" ); + self.sndloopent stoploopsound( 1 ); + } + else if ( notetrack == "impact" ) + { + self.fx_field |= 512; + + if ( isdefined( self.has_helmet ) && self.has_helmet ) + self.fx_field |= 2048; + + self thread clear_one_off_fx( 512 ); + } + + self setclientfield( "mechz_fx", self.fx_field ); + } +} + +flamethrower_fx_watcher() +{ + self endon( "death" ); + + while ( true ) + { + self waittill( "flamethrower_anim", notetrack ); + + if ( notetrack == "start_ft" ) + self.fx_field |= 64; + else if ( notetrack == "stop_ft" ) + self.fx_field &= ~64; + + self setclientfield( "mechz_fx", self.fx_field ); + } +} + +fx_cleanup() +{ + self.fx_field = 0; + self setclientfield( "mechz_fx", self.fx_field ); + wait_network_frame(); +} + +mechz_setup_snd() +{ + self.audio_type = "mechz"; + + if ( !isdefined( self.sndloopent ) ) + { + self.sndloopent = spawn( "script_origin", self.origin ); + self.sndloopent linkto( self, "tag_origin" ); + self thread snddeleteentondeath( self.sndloopent ); + } + + self thread play_ambient_mechz_vocals(); +} + +snddeleteentondeath( ent ) +{ + self waittill( "death" ); + + ent delete(); +} + +play_ambient_mechz_vocals() +{ + self endon( "death" ); + wait( randomintrange( 2, 4 ) ); + + while ( true ) + { + if ( isdefined( self ) ) + { + if ( isdefined( self.favoriteenemy ) && distance( self.origin, self.favoriteenemy.origin ) <= 150 ) + { + + } + else + self playsound( "zmb_ai_mechz_vox_ambient" ); + } + + wait( randomfloatrange( 3, 6 ) ); + } +} + +enable_mechz_rounds() +{ +/# + if ( getdvarint( _hash_FA81816F ) >= 2 ) + return; +#/ + level.mechz_rounds_enabled = 1; + flag_init( "mechz_round" ); + level thread mechz_round_tracker(); +} + +mechz_round_tracker() +{ + maps\mp\zombies\_zm_ai_mechz_ffotd::mechz_round_tracker_start(); + level.num_mechz_spawned = 0; + old_spawn_func = level.round_spawn_func; + old_wait_func = level.round_wait_func; + + while ( !isdefined( level.zombie_mechz_locations ) ) + wait 0.05; + + flag_wait( "activate_zone_nml" ); + mech_start_round_num = 8; + + if ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) + mech_start_round_num = 8; + + while ( level.round_number < mech_start_round_num ) + level waittill( "between_round_over" ); + + level.next_mechz_round = level.round_number; + level thread debug_print_mechz_round(); + + while ( true ) + { + maps\mp\zombies\_zm_ai_mechz_ffotd::mechz_round_tracker_loop_start(); + + if ( level.num_mechz_spawned > 0 ) + level.mechz_should_drop_powerup = 1; + + if ( level.next_mechz_round <= level.round_number ) + { + a_zombies = getaispeciesarray( level.zombie_team, "all" ); + + foreach ( zombie in a_zombies ) + { + if ( isdefined( zombie.is_mechz ) && zombie.is_mechz && isalive( zombie ) ) + { + level.next_mechz_round++; + break; + } + } + } + + if ( level.mechz_left_to_spawn == 0 && level.next_mechz_round <= level.round_number ) + { + mechz_health_increases(); + + if ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) + level.mechz_zombie_per_round = 1; + else if ( level.mechz_round_count < 2 ) + level.mechz_zombie_per_round = 1; + else if ( level.mechz_round_count < 5 ) + level.mechz_zombie_per_round = 2; + else + level.mechz_zombie_per_round = 3; + + level.mechz_left_to_spawn = level.mechz_zombie_per_round; + mechz_spawning = level.mechz_left_to_spawn; + wait( randomfloatrange( 10.0, 15.0 ) ); + level notify( "spawn_mechz" ); + + if ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) + n_round_gap = randomintrange( level.mechz_min_round_fq_solo, level.mechz_max_round_fq_solo ); + else + n_round_gap = randomintrange( level.mechz_min_round_fq, level.mechz_max_round_fq ); + + level.next_mechz_round = level.round_number + n_round_gap; + level.mechz_round_count++; + level thread debug_print_mechz_round(); + level.num_mechz_spawned += mechz_spawning; + } + + maps\mp\zombies\_zm_ai_mechz_ffotd::mechz_round_tracker_loop_end(); + + level waittill( "between_round_over" ); + + mechz_clear_spawns(); + } +} + +debug_print_mechz_round() +{ + flag_wait( "start_zombie_round_logic" ); +/# + iprintln( "Next mechz Round = " + level.next_mechz_round ); +#/ +} + +mechz_spawning_logic() +{ + level thread enable_mechz_rounds(); + + while ( true ) + { + level waittill( "spawn_mechz" ); + + while ( level.mechz_left_to_spawn ) + { + while ( level.zombie_mechz_locations.size < 1 ) + wait( randomfloatrange( 5.0, 10.0 ) ); + + ai = spawn_zombie( level.mechz_spawners[0] ); + ai thread mechz_spawn(); + level.mechz_left_to_spawn--; + + if ( level.mechz_left_to_spawn == 0 ) + level thread response_to_air_raid_siren_vo(); + + ai thread mechz_hint_vo(); + wait( randomfloatrange( 3.0, 6.0 ) ); + } + } +} + +mechz_prespawn() +{ + +} + +mechz_attach_objects() +{ + self detachall(); + self.armor_state = []; + + for ( i = 0; i < level.mechz_armor_info.size; i++ ) + { + self.armor_state[i] = spawnstruct(); + self.armor_state[i].index = i; + self.armor_state[i].tag = level.mechz_armor_info[i].tag; + + if ( isdefined( level.mechz_armor_info[i].model ) ) + { + self attach( level.mechz_armor_info[i].model, level.mechz_armor_info[i].tag, 1 ); + self.armor_state[i].model = level.mechz_armor_info[i].model; + } + } + + if ( isdefined( self.m_claw ) ) + { + self.m_claw delete(); + self.m_claw = undefined; + } + + org = self gettagorigin( "tag_claw" ); + ang = self gettagangles( "tag_claw" ); + self.m_claw = spawn( "script_model", org ); + self.m_claw setmodel( "c_zom_mech_claw" ); + self.m_claw.angles = ang; + self.m_claw linkto( self, "tag_claw" ); + self.m_claw useanimtree( #animtree ); + + if ( isdefined( self.m_claw_damage_trigger ) ) + { + self.m_claw_damage_trigger unlink(); + self.m_claw_damage_trigger delete(); + self.m_claw_damage_trigger = undefined; + } + + trigger_spawnflags = 0; + trigger_radius = 3; + trigger_height = 15; + self.m_claw_damage_trigger = spawn( "trigger_damage", org, trigger_spawnflags, trigger_radius, trigger_height ); + self.m_claw_damage_trigger.angles = ang; + self.m_claw_damage_trigger enablelinkto(); + self.m_claw_damage_trigger linkto( self, "tag_claw" ); + self thread mechz_claw_damage_trigger_thread(); + self attach( "c_zom_mech_faceplate", "J_Helmet", 0 ); + self.has_helmet = 1; + self attach( "c_zom_mech_powersupply_cap", "tag_powersupply", 0 ); + self.has_powerplant = 1; + self.powerplant_covered = 1; + self.armor_state = array_randomize( self.armor_state ); +} + +mechz_set_starting_health() +{ + self.maxhealth = level.mechz_health; + self.helmet_dmg = 0; + self.helmet_dmg_for_removal = self.maxhealth * level.mechz_helmet_health_percentage; + self.powerplant_cover_dmg = 0; + self.powerplant_cover_dmg_for_removal = self.maxhealth * level.mechz_powerplant_expose_health_percentage; + self.powerplant_dmg = 0; + self.powerplant_dmg_for_destroy = self.maxhealth * level.mechz_powerplant_destroyed_health_percentage; + level.mechz_explosive_dmg_to_cancel_claw = self.maxhealth * level.mechz_explosive_dmg_to_cancel_claw_percentage; +/# + if ( getdvarint( _hash_E7121222 ) > 0 ) + { + println( "\\nMZ: MechZ Starting Health: " + self.maxhealth ); + println( "\\nMZ: MechZ Required Helmet Dmg: " + self.helmet_dmg_for_removal ); + println( "\\nMZ: MechZ Required Powerplant Cover Dmg: " + self.powerplant_cover_dmg_for_removal ); + println( "\\nMZ: MechZ Required Powerplant Dmg: " + self.powerplant_dmg_for_destroy ); + } +#/ + self.health = level.mechz_health; + self.non_attacker_func = ::mechz_non_attacker_damage_override; + self.non_attack_func_takes_attacker = 1; + self.actor_damage_func = ::mechz_damage_override; + self.instakill_func = ::mechz_instakill_override; + self.nuke_damage_func = ::mechz_nuke_override; +} + +mechz_spawn() +{ + self maps\mp\zombies\_zm_ai_mechz_ffotd::spawn_start(); + self endon( "death" ); + level endon( "intermission" ); + self mechz_attach_objects(); + self mechz_set_starting_health(); + self mechz_setup_fx(); + self mechz_setup_snd(); + level notify( "sam_clue_mechz", self ); + self.closest_player_override = maps\mp\zombies\_zm_ai_mechz::get_favorite_enemy; + self.animname = "mechz_zombie"; + self.has_legs = 1; + self.no_gib = 1; + self.ignore_all_poi = 1; + self.is_mechz = 1; + self.ignore_enemy_count = 1; + self.no_damage_points = 1; + self.melee_anim_func = ::melee_anim_func; + self.meleedamage = 75; + self.custom_item_dmg = 2000; + recalc_zombie_array(); + self setphysparams( 20, 0, 80 ); + self setcandamage( 0 ); + self.zombie_init_done = 1; + self notify( "zombie_init_done" ); + self.allowpain = 0; + self animmode( "normal" ); + self orientmode( "face enemy" ); + self maps\mp\zombies\_zm_spawner::zombie_setup_attack_properties(); + self.completed_emerging_into_playable_area = 1; + self notify( "completed_emerging_into_playable_area" ); + self.no_powerups = 0; + self setfreecameralockonallowed( 0 ); + self notsolid(); + self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow(); + level thread maps\mp\zombies\_zm_spawner::zombie_death_event( self ); + self thread maps\mp\zombies\_zm_spawner::enemy_death_detection(); + + if ( level.zombie_mechz_locations.size ) + spawn_pos = self get_best_mechz_spawn_pos(); + + if ( !isdefined( spawn_pos ) ) + { +/# + println( "ERROR: Tried to spawn mechz with no mechz spawn_positions!\\n" ); + iprintln( "ERROR: Tried to spawn mechz with no mechz spawn_positions!" ); +#/ + self delete(); + return; + } + + if ( isdefined( level.mechz_force_spawn_pos ) ) + { + spawn_pos = level.mechz_force_spawn_pos; + level.mechz_force_spawn_pos = undefined; + } + + if ( !isdefined( spawn_pos.angles ) ) + spawn_pos.angles = ( 0, 0, 0 ); + + self thread mechz_death(); + self forceteleport( spawn_pos.origin, spawn_pos.angles ); + self playsound( "zmb_ai_mechz_incoming_alarm" ); + + if ( !isdefined( spawn_pos.angles ) ) + spawn_pos.angles = ( 0, 0, 0 ); + + self animscripted( spawn_pos.origin, spawn_pos.angles, "zm_spawn" ); + self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" ); + self setfreecameralockonallowed( 1 ); + self solid(); + self set_zombie_run_cycle( "walk" ); + + if ( isdefined( level.mechz_find_flesh_override_func ) ) + level thread [[ level.mechz_find_flesh_override_func ]](); + else + self thread mechz_find_flesh(); + + self thread mechz_jump_think( spawn_pos ); + self setcandamage( 1 ); + self init_anim_rate(); + self maps\mp\zombies\_zm_ai_mechz_ffotd::spawn_end(); +} + +get_closest_mechz_spawn_pos( org ) +{ + best_dist = -1; + best_pos = undefined; + players = get_players(); + + for ( i = 0; i < level.zombie_mechz_locations.size; i++ ) + { + dist = distancesquared( org, level.zombie_mechz_locations[i].origin ); + + if ( dist < best_dist || best_dist < 0 ) + { + best_dist = dist; + best_pos = level.zombie_mechz_locations[i]; + } + } +/# + if ( !isdefined( best_pos ) ) + println( "Error: Mechz could not find a valid jump pos from position ( " + self.origin[0] + ", " + self.origin[1] + ", " + self.origin[2] + " )" ); +#/ + return best_pos; +} + +get_best_mechz_spawn_pos( ignore_used_positions = 0 ) +{ + best_dist = -1; + best_pos = undefined; + players = get_players(); + + for ( i = 0; i < level.zombie_mechz_locations.size; i++ ) + { + if ( !ignore_used_positions && ( isdefined( level.zombie_mechz_locations[i].has_been_used ) && level.zombie_mechz_locations[i].has_been_used ) ) + continue; + + if ( ignore_used_positions == 1 && ( isdefined( level.zombie_mechz_locations[i].used_cooldown ) && level.zombie_mechz_locations[i].used_cooldown ) ) + continue; + + for ( j = 0; j < players.size; j++ ) + { + if ( is_player_valid( players[j], 1, 1 ) ) + { + dist = distancesquared( level.zombie_mechz_locations[i].origin, players[j].origin ); + + if ( dist < best_dist || best_dist < 0 ) + { + best_dist = dist; + best_pos = level.zombie_mechz_locations[i]; + } + } + } + } + + if ( ignore_used_positions && isdefined( best_pos ) ) + best_pos thread jump_pos_used_cooldown(); + + if ( isdefined( best_pos ) ) + best_pos.has_been_used = 1; + else if ( level.zombie_mechz_locations.size > 0 ) + return level.zombie_mechz_locations[randomint( level.zombie_mechz_locations.size )]; + + return best_pos; +} + +mechz_clear_spawns() +{ + for ( i = 0; i < level.zombie_mechz_locations.size; i++ ) + level.zombie_mechz_locations[i].has_been_used = 0; +} + +jump_pos_used_cooldown() +{ + self.used_cooldown = 1; + wait 5.0; + self.used_cooldown = 0; +} + +mechz_health_increases() +{ + if ( !isdefined( level.mechz_last_spawn_round ) || level.round_number > level.mechz_last_spawn_round ) + { + a_players = getplayers(); + n_player_modifier = 1; + + if ( a_players.size > 1 ) + n_player_modifier = a_players.size * 0.75; + + level.mechz_health = int( n_player_modifier * ( level.mechz_base_health + level.mechz_health_increase * level.mechz_round_count ) ); + + if ( level.mechz_health >= 22500 * n_player_modifier ) + level.mechz_health = int( 22500 * n_player_modifier ); + + level.mechz_last_spawn_round = level.round_number; + } +} + +mechz_death() +{ + self endon( "mechz_cleanup" ); + thread mechz_cleanup(); + + self waittill( "death" ); + + death_origin = self.origin; + + if ( isdefined( self.robot_stomped ) && self.robot_stomped ) + death_origin += vectorscale( ( 0, 0, 1 ), 90.0 ); + + self mechz_claw_detach(); + self release_flamethrower_trigger(); + self.fx_field = 0; + self setclientfield( "mechz_fx", self.fx_field ); + self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow_stop(); + self mechz_interrupt(); + + if ( isdefined( self.favoriteenemy ) ) + { + if ( isdefined( self.favoriteenemy.hunted_by ) ) + self.favoriteenemy.hunted_by--; + } + + self thread mechz_explode( "tag_powersupply", death_origin ); + + if ( get_current_zombie_count() == 0 && level.zombie_total == 0 ) + { + level.last_mechz_origin = self.origin; + level notify( "last_mechz_down" ); + } + + if ( isplayer( self.attacker ) ) + { + event = "death"; + + if ( issubstr( self.damageweapon, "knife_ballistic_" ) ) + event = "ballistic_knife_death"; + + self.attacker delay_thread( 4.0, maps\mp\zombies\_zm_audio::create_and_play_dialog, "general", "mech_defeated" ); + self.attacker maps\mp\zombies\_zm_score::player_add_points( event, self.damagemod, self.damagelocation, 1 ); + self.attacker maps\mp\zombies\_zm_stats::increment_client_stat( "tomb_mechz_killed", 0 ); + self.attacker maps\mp\zombies\_zm_stats::increment_player_stat( "tomb_mechz_killed" ); + + if ( isdefined( level.mechz_should_drop_powerup ) && level.mechz_should_drop_powerup ) + { + wait_network_frame(); + wait_network_frame(); + level.mechz_should_drop_powerup = 0; + + if ( level.powerup_drop_count >= level.zombie_vars["zombie_powerup_drop_max_per_round"] ) + level.powerup_drop_count = level.zombie_vars["zombie_powerup_drop_max_per_round"] - 1; + + level.zombie_vars["zombie_drop_item"] = 1; + level thread maps\mp\zombies\_zm_powerups::powerup_drop( self.origin ); + } + } +} + +mechz_explode( str_tag, death_origin ) +{ + wait 2.0; + v_origin = self gettagorigin( str_tag ); + level notify( "mechz_exploded", v_origin ); + playsoundatposition( "zmb_ai_mechz_death_explode", v_origin ); + playfx( level._effect["mechz_death"], v_origin ); + radiusdamage( v_origin, 128, 100, 25, undefined, "MOD_GRENADE_SPLASH" ); + earthquake( 0.5, 1.0, v_origin, 256 ); + playrumbleonposition( "grenade_rumble", v_origin ); + level notify( "mechz_killed", death_origin ); +} + +mechz_cleanup() +{ + self waittill( "mechz_cleanup" ); + + self mechz_interrupt(); + level.sndmechzistalking = 0; + + if ( isdefined( self.sndmechzmusicent ) ) + { + self.sndmechzmusicent delete(); + self.sndmechzmusicent = undefined; + } + + if ( isdefined( self.favoriteenemy ) ) + { + if ( isdefined( self.favoriteenemy.hunted_by ) ) + self.favoriteenemy.hunted_by--; + } +} + +mechz_interrupt() +{ + self notify( "kill_claw" ); + self notify( "kill_ft" ); + self notify( "kill_jump" ); +} + +mechz_stun( time ) +{ + self endon( "death" ); + + if ( !isalive( self ) || isdefined( self.not_interruptable ) && self.not_interruptable || isdefined( self.is_traversing ) && self.is_traversing ) + return; + + curr_time = 0; + anim_time = self getanimlengthfromasd( "zm_stun", 0 ); + self mechz_interrupt(); + self mechz_claw_detach(); + wait 0.05; + self.not_interruptable = 1; +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\nMZ: Stun setting not interruptable\\n" ); +#/ + while ( curr_time < time ) + { + self animscripted( self.origin, self.angles, "zm_stun" ); + self maps\mp\animscripts\zm_shared::donotetracks( "stun_anim" ); + self clearanim( %root, 0 ); + curr_time += anim_time; + } + + self.not_interruptable = 0; +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\nMZ: Stun clearing not interruptable\\n" ); +#/ +} + +mechz_tank_hit_callback() +{ + self endon( "death" ); + + if ( isdefined( self.mechz_hit_by_tank ) && self.mechz_hit_by_tank ) + return; +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\nMZ: Tank damage setting not interruptable\\n" ); +#/ + self.not_interruptable = 1; + self.mechz_hit_by_tank = 1; + self mechz_interrupt(); + v_trace_start = self.origin + vectorscale( ( 0, 0, 1 ), 100.0 ); + v_trace_end = self.origin - vectorscale( ( 0, 0, 1 ), 500.0 ); + v_trace = physicstrace( self.origin, v_trace_end, ( -15, -15, -5 ), ( 15, 15, 5 ), self ); + self.origin = v_trace["position"]; + timer = 0; + self animscripted( self.origin, self.angles, "zm_tank_hit_in" ); + self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" ); + anim_length = self getanimlengthfromasd( "zm_tank_hit_loop", 0 ); + + while ( timer < level.mechz_tank_knockdown_time ) + { + timer += anim_length; + self animscripted( self.origin, self.angles, "zm_tank_hit_loop" ); + self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" ); + } + + self animscripted( self.origin, self.angles, "zm_tank_hit_out" ); + self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" ); +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\nMZ: Tank damage clearing not interruptable\\n" ); +#/ + self.not_interruptable = 0; + self.mechz_hit_by_tank = 0; + + if ( !level.vh_tank ent_flag( "tank_moving" ) && self istouching( level.vh_tank ) ) + { + self notsolid(); + self ghost(); + self.mechz_hidden = 1; + + if ( isdefined( self.m_claw ) ) + self.m_claw ghost(); + + self.fx_field_old = self.fx_field; + self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow_stop(); + self fx_cleanup(); + self mechz_do_jump(); + self solid(); + self.mechz_hidden = 0; + } +} + +mechz_robot_stomp_callback() +{ + self endon( "death" ); + + if ( isdefined( self.robot_stomped ) && self.robot_stomped ) + return; + + self.not_interruptable = 1; + self.robot_stomped = 1; + self mechz_interrupt(); +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\nMZ: Robot stomp setting not interruptable\\n" ); +#/ + self thread mechz_stomped_by_giant_robot_vo(); + v_trace_start = self.origin + vectorscale( ( 0, 0, 1 ), 100.0 ); + v_trace_end = self.origin - vectorscale( ( 0, 0, 1 ), 500.0 ); + v_trace = physicstrace( self.origin, v_trace_end, ( -15, -15, -5 ), ( 15, 15, 5 ), self ); + self.origin = v_trace["position"]; + timer = 0; + self animscripted( self.origin, self.angles, "zm_robot_hit_in" ); + self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" ); + anim_length = self getanimlengthfromasd( "zm_robot_hit_loop", 0 ); + + while ( timer < level.mechz_robot_knockdown_time ) + { + timer += anim_length; + self animscripted( self.origin, self.angles, "zm_robot_hit_loop" ); + self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" ); + } + + self animscripted( self.origin, self.angles, "zm_robot_hit_out" ); + self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" ); +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\nMZ: Robot stomp clearing not interruptable\\n" ); +#/ + self.not_interruptable = 0; + self.robot_stomped = 0; +} + +mechz_delayed_item_delete() +{ + wait 30; + self delete(); +} + +mechz_get_closest_valid_player() +{ + players = get_players(); + + if ( isdefined( self.ignore_player ) ) + { + for ( i = 0; i < self.ignore_player.size; i++ ) + arrayremovevalue( players, self.ignore_player[i] ); + } + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( level._zombie_using_humangun ) && level._zombie_using_humangun && isai( players[i] ) ) + return players[i]; + + if ( !is_player_valid( players[i], 1, 1 ) ) + { + arrayremovevalue( players, players[i] ); + i--; + } + } + + switch ( players.size ) + { + case 0: + return undefined; + case 1: + return players[0]; + default: + if ( isdefined( level.closest_player_override ) ) + player = [[ level.closest_player_override ]]( self.origin, players ); + else if ( isdefined( level.calc_closest_player_using_paths ) && level.calc_closest_player_using_paths ) + player = get_closest_player_using_paths( self.origin, players ); + else + player = getclosest( self.origin, players ); + + return player; + } +} + +get_favorite_enemy( origin, players ) +{ + mechz_targets = getplayers(); + least_hunted = undefined; + best_hunted_val = -1; + best_dist = -1; + distances = []; + + if ( isdefined( self.favoriteenemy ) && is_player_valid( self.favoriteenemy, 1, 1 ) && !isdefined( self.favoriteenemy.in_giant_robot_head ) && !self.favoriteenemy maps\mp\zm_tomb_chamber::is_player_in_chamber() ) + { + assert( isdefined( self.favoriteenemy.hunted_by ) ); + self.favoriteenemy.hunted_by--; + least_hunted = self.favoriteenemy; + } + + for ( i = 0; i < mechz_targets.size; i++ ) + { + if ( !isdefined( mechz_targets[i].hunted_by ) || mechz_targets[i].hunted_by < 0 ) + mechz_targets[i].hunted_by = 0; + + if ( !is_player_valid( mechz_targets[i], 1, 1 ) ) + { + distances[i] = undefined; + continue; + } + + distances[i] = distancesquared( self.origin, mechz_targets[i].origin ); + } + + found_weapon_target = 0; + + for ( i = 0; i < mechz_targets.size; i++ ) + { + if ( abs( mechz_targets[i].origin[2] - self.origin[2] ) > 60 ) + continue; + + dist = distances[i]; + + if ( !isdefined( dist ) ) + continue; + + if ( dist < 50000 && ( dist < best_dist || best_dist < 0 ) ) + { + found_weapon_target = 1; + least_hunted = mechz_targets[i]; + best_dist = dist; + } + } + + if ( found_weapon_target ) + { + least_hunted.hunted_by++; + return least_hunted; + } + + if ( isdefined( self.favoriteenemy ) && is_player_valid( self.favoriteenemy, 1, 1 ) ) + { + if ( distancesquared( self.origin, self.favoriteenemy.origin ) <= level.mechz_sticky_dist_sq ) + { + self.favoriteenemy.hunted_by++; + return self.favoriteenemy; + } + } + + for ( i = 0; i < mechz_targets.size; i++ ) + { + if ( isdefined( mechz_targets[i].in_giant_robot_head ) ) + continue; + + if ( mechz_targets[i] maps\mp\zm_tomb_chamber::is_player_in_chamber() ) + continue; + + if ( isdefined( distances[i] ) ) + dist = distances[i]; + else + continue; + + hunted = mechz_targets[i].hunted_by; + + if ( !isdefined( least_hunted ) || hunted <= least_hunted.hunted_by ) + { + if ( dist < best_dist || best_dist < 0 ) + { + least_hunted = mechz_targets[i]; + best_dist = dist; + } + } + } + + if ( isdefined( least_hunted ) ) + least_hunted.hunted_by++; + + return least_hunted; +} + +mechz_check_in_arc( right_offset ) +{ + origin = self.origin; + + if ( isdefined( right_offset ) ) + { + right_angle = anglestoright( self.angles ); + origin += right_angle * right_offset; + } + + facing_vec = anglestoforward( self.angles ); + enemy_vec = self.favoriteenemy.origin - origin; + enemy_yaw_vec = ( enemy_vec[0], enemy_vec[1], 0 ); + facing_yaw_vec = ( facing_vec[0], facing_vec[1], 0 ); + enemy_yaw_vec = vectornormalize( enemy_yaw_vec ); + facing_yaw_vec = vectornormalize( facing_yaw_vec ); + enemy_dot = vectordot( facing_yaw_vec, enemy_yaw_vec ); + + if ( enemy_dot < cos( level.mechz_aim_max_yaw ) ) + return false; + + enemy_angles = vectortoangles( enemy_vec ); + + if ( abs( angleclamp180( enemy_angles[0] ) ) > level.mechz_aim_max_pitch ) + return false; + + return true; +} + +mechz_get_aim_anim( anim_prefix, target_pos, right_offset ) +{ + in_arc = self mechz_check_in_arc( right_offset ); + + if ( !in_arc ) + return undefined; + + origin = self.origin; + + if ( isdefined( right_offset ) ) + { + right_angle = anglestoright( self.angles ); + origin += right_angle * right_offset; + } + + aiming_vec = vectortoangles( target_pos - origin ); + pitch = angleclamp180( aiming_vec[0] ); + yaw = angleclamp180( self.angles[1] - aiming_vec[1] ); + centered_ud = abs( pitch ) < level.mechz_aim_max_pitch / 2; + centered_lr = abs( yaw ) < level.mechz_aim_max_yaw / 2; + right_anim = angleclamp180( self.angles[1] - aiming_vec[1] ) > 0; + up_anim = pitch < 0; + + if ( centered_ud && centered_lr ) + return anim_prefix + "_aim_5"; + else if ( centered_ud && right_anim ) + return anim_prefix + "_aim_6"; + else if ( centered_ud ) + return anim_prefix + "_aim_4"; + else if ( centered_lr && up_anim ) + return anim_prefix + "_aim_8"; + else if ( centered_lr ) + return anim_prefix + "_aim_2"; + else if ( right_anim && up_anim ) + return anim_prefix + "_aim_9"; + else if ( right_anim ) + return anim_prefix + "_aim_3"; + else if ( up_anim ) + return anim_prefix + "_aim_7"; + else + return anim_prefix + "_aim_1"; +} + +mechz_start_basic_find_flesh() +{ + self.goalradius = level.mechz_custom_goalradius; + self.custom_goalradius_override = level.mechz_custom_goalradius; + + if ( !isdefined( self.ai_state ) || self.ai_state != "find_flesh" ) + { + self.ai_state = "find_flesh"; + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); + } +} + +mechz_stop_basic_find_flesh() +{ + if ( isdefined( self.ai_state ) && self.ai_state == "find_flesh" ) + { + self.ai_state = undefined; + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + } +} + +watch_for_player_dist() +{ + self endon( "death" ); + + while ( true ) + { + player = mechz_get_closest_valid_player(); + + if ( isdefined( player ) && ( isdefined( player.is_player_slowed ) && player.is_player_slowed ) ) + reset_dist = level.mechz_reset_dist_sq / 2; + else + reset_dist = level.mechz_reset_dist_sq; + + if ( !isdefined( player ) || distancesquared( player.origin, self.origin ) > reset_dist ) + self.disable_complex_behaviors = 0; + + wait 0.5; + } +} + +mechz_find_flesh() +{ + self endon( "death" ); + level endon( "intermission" ); + + if ( level.intermission ) + return; + + self.helitarget = 1; + self.ignoreme = 0; + self.nododgemove = 1; + self.ignore_player = []; + self.goalradius = 32; + self.ai_state = "spawning"; + self thread watch_for_player_dist(); + + while ( true ) + { +/# + if ( isdefined( self.force_behavior ) && self.force_behavior ) + { + wait 0.05; + continue; + } +#/ + if ( isdefined( self.not_interruptable ) && self.not_interruptable ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\nMZ: Not thinking since a behavior has set not_interruptable\\n" ); +#/ + wait 0.05; + continue; + } + + if ( isdefined( self.is_traversing ) && self.is_traversing ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\nMZ: Not thinking since mech is traversing\\n" ); +#/ + wait 0.05; + continue; + } + + player = [[ self.closest_player_override ]](); + self mechz_set_locomotion_speed(); +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\nMZ: Doing think\\n" ); +#/ + self.favoriteenemy = player; + + if ( !isdefined( player ) ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\tMZ: No Enemy, idling\\n" ); +#/ + self.goal_pos = self.origin; + self setgoalpos( self.goal_pos ); + self.ai_state = "idle"; + self setanimstatefromasd( "zm_idle" ); + wait 0.5; + continue; + } + + if ( player entity_on_tank() ) + { + if ( level.vh_tank ent_flag( "tank_moving" ) ) + { + if ( isdefined( self.jump_pos ) && self mechz_in_range_for_jump() ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\tMZ: Enemy on moving tank, do jump out and jump in when tank is stationary\\n" ); +#/ + self mechz_do_jump( 1 ); + } + else + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\tMZ: Enemy on moving tank, Jump Requested, going to jump pos\\n" ); +#/ + if ( !isdefined( self.jump_pos ) ) + self.jump_pos = get_closest_mechz_spawn_pos( self.origin ); + + if ( isdefined( self.jump_pos ) ) + { + self.goal_pos = self.jump_pos.origin; + self setgoalpos( self.goal_pos ); + } + + wait 0.5; + continue; + } + } + else + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\tMZ: Enemy on tank, targetting a tank pos\\n" ); +#/ + self.disable_complex_behaviors = 0; + self mechz_stop_basic_find_flesh(); + self.ai_state = "tracking_tank"; + self.goalradius = level.mechz_custom_goalradius; + self.custom_goalradius_override = level.mechz_custom_goalradius; + closest_tank_tag = level.vh_tank get_closest_mechz_tag_on_tank( self, self.origin ); + + if ( !isdefined( closest_tank_tag ) ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\tMZ: Enemy on tank, no closest tank pos found, continuing\\n" ); +#/ + wait 0.5; + continue; + } + + closest_tank_tag_pos = level.vh_tank gettagorigin( closest_tank_tag ); + + if ( abs( self.origin[2] - closest_tank_tag_pos[2] ) >= level.mechz_custom_goalradius || distance2dsquared( self.origin, closest_tank_tag_pos ) >= level.mechz_custom_goalradius_sq ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\tMZ: Enemy on tank, setting tank pos as goal\\n" ); +#/ + self.goal_pos = closest_tank_tag_pos; + self setgoalpos( self.goal_pos ); + self waittill_any_or_timeout( 0.5, "goal", "bad_path" ); + + if ( !player entity_on_tank() ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\tMZ: Enemy got off tank by the time we reached our goal, continuing\\n" ); +#/ + continue; + } + } + + if ( abs( self.origin[2] - closest_tank_tag_pos[2] ) < level.mechz_custom_goalradius && distance2dsquared( self.origin, closest_tank_tag_pos ) < level.mechz_custom_goalradius_sq ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\tMZ: Enemy on tank, reached tank pos, doing flamethrower sweep\\n" ); +#/ + self.angles = vectortoangles( level.vh_tank.origin - self.origin ); + self mechz_do_flamethrower_attack( 1 ); + self notify( "tank_flamethrower_attack_complete" ); + } + } + + continue; + } + else if ( isdefined( self.jump_requested ) && self.jump_requested || isdefined( self.force_jump ) && self.force_jump ) + { + if ( self mechz_in_range_for_jump() ) + self mechz_do_jump(); + else + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\tMZ: Jump Requested, going to jump pos\\n" ); +#/ + self.goal_pos = self.jump_pos.origin; + self setgoalpos( self.goal_pos ); + wait 0.5; + continue; + } + } + else if ( self.zombie_move_speed == "sprint" && isdefined( player ) ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\tMZ: Sprinting\\n" ); +#/ + self.goal_pos = player.origin; + self setgoalpos( self.goal_pos ); + wait 0.5; + continue; + } + else if ( distancesquared( self.origin, player.origin ) < level.mechz_aggro_dist_sq ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\tMZ: Player very close, switching to melee only\\n" ); +#/ + self.disable_complex_behaviors = 1; + } + else if ( self should_do_claw_attack() ) + { + self mechz_do_claw_grab(); + continue; + } + else if ( self should_do_flamethrower_attack() ) + { + self mechz_do_flamethrower_attack(); + continue; + } +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\tMZ: No special behavior valid, heading after player\\n" ); +#/ + self.goal_pos = player.origin; + + if ( isdefined( level.damage_prone_players_override_func ) ) + level thread [[ level.damage_prone_players_override_func ]](); + else + self thread damage_prone_players(); + + mechz_start_basic_find_flesh(); + wait 0.5; + } +} + +damage_prone_players() +{ + self endon( "death" ); + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( isdefined( self.favoriteenemy ) && self.favoriteenemy == player ) + { + n_dist = distance2dsquared( player.origin, self.origin ); + + if ( n_dist < 2025 ) + { + player_z = player.origin[2]; + mechz_z = self.origin[2]; + + if ( player_z < mechz_z && mechz_z - player_z <= 75 ) + { + if ( isdefined( self.meleedamage ) ) + idamage = self.meleedamage; + else + idamage = 50; + + player dodamage( idamage, self.origin, self, self, "none", "MOD_MELEE" ); + } + } + } + } +} + +melee_anim_func() +{ + self.next_leap_time = gettime() + 1500; +} + +mechz_launch_armor_piece() +{ + if ( !isdefined( self.next_armor_piece ) ) + self.next_armor_piece = 0; + + if ( !isdefined( self.armor_state ) || self.next_armor_piece >= self.armor_state.size ) + { +/# + println( "Trying to launch armor piece after all pieces have already been launched!" ); +#/ + return; + } + + if ( isdefined( self.armor_state[self.next_armor_piece].model ) ) + self detach( self.armor_state[self.next_armor_piece].model, self.armor_state[self.next_armor_piece].tag ); + + self.fx_field |= 1 << self.armor_state[self.next_armor_piece].index; + self setclientfield( "mechz_fx", self.fx_field ); + + if ( sndmechzisnetworksafe( "destruction" ) ) + self playsound( "zmb_ai_mechz_destruction" ); + + self.next_armor_piece++; +} + +mechz_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, poffsettime, boneindex ) +{ + num_tiers = level.mechz_armor_info.size + 1; + old_health_tier = int( num_tiers * self.health / self.maxhealth ); + bonename = getpartname( "c_zom_mech_body", boneindex ); + + if ( isdefined( attacker ) && isalive( attacker ) && isplayer( attacker ) && ( level.zombie_vars[attacker.team]["zombie_insta_kill"] || isdefined( attacker.personal_instakill ) && attacker.personal_instakill ) ) + { + n_mechz_damage_percent = 1.0; + n_mechz_headshot_modifier = 2.0; + } + else + { + n_mechz_damage_percent = level.mechz_damage_percent; + n_mechz_headshot_modifier = 1.0; + } + + if ( isdefined( weapon ) && is_weapon_shotgun( weapon ) ) + { + n_mechz_damage_percent *= level.mechz_shotgun_damage_mod; + n_mechz_headshot_modifier *= level.mechz_shotgun_damage_mod; + } + + if ( damage <= 10 ) + n_mechz_damage_percent = 1.0; + + if ( is_explosive_damage( meansofdeath ) || issubstr( weapon, "staff" ) ) + { + if ( n_mechz_damage_percent < 0.5 ) + n_mechz_damage_percent = 0.5; + + if ( !( isdefined( self.has_helmet ) && self.has_helmet ) && issubstr( weapon, "staff" ) && n_mechz_damage_percent < 1.0 ) + n_mechz_damage_percent = 1.0; + + final_damage = damage * n_mechz_damage_percent; + + if ( !isdefined( self.explosive_dmg_taken ) ) + self.explosive_dmg_taken = 0; + + self.explosive_dmg_taken += final_damage; + self.helmet_dmg += final_damage; + + if ( isdefined( self.explosive_dmg_taken_on_grab_start ) ) + { + if ( isdefined( self.e_grabbed ) && self.explosive_dmg_taken - self.explosive_dmg_taken_on_grab_start > level.mechz_explosive_dmg_to_cancel_claw ) + { + if ( isdefined( self.has_helmet ) && self.has_helmet && self.helmet_dmg < self.helmet_dmg_for_removal || !( isdefined( self.has_helmet ) && self.has_helmet ) ) + self thread mechz_claw_shot_pain_reaction(); + + self thread ent_released_from_claw_grab_achievement( attacker, self.e_grabbed ); + self thread mechz_claw_release(); + } + } + } + else if ( shitloc != "head" && shitloc != "helmet" ) + { + if ( bonename == "tag_powersupply" ) + { + final_damage = damage * n_mechz_damage_percent; + + if ( !( isdefined( self.powerplant_covered ) && self.powerplant_covered ) ) + self.powerplant_dmg += final_damage; + else + self.powerplant_cover_dmg += final_damage; + } + + if ( isdefined( self.e_grabbed ) && ( shitloc == "left_hand" || shitloc == "left_arm_lower" || shitloc == "left_arm_upper" ) ) + { + if ( isdefined( self.e_grabbed ) ) + self thread mechz_claw_shot_pain_reaction(); + + self thread ent_released_from_claw_grab_achievement( attacker, self.e_grabbed ); + self thread mechz_claw_release( 1 ); + } + + final_damage = damage * n_mechz_damage_percent; + } + else if ( !( isdefined( self.has_helmet ) && self.has_helmet ) ) + final_damage = damage * n_mechz_headshot_modifier; + else + { + final_damage = damage * n_mechz_damage_percent; + self.helmet_dmg += final_damage; + } + + if ( !isdefined( weapon ) || weapon == "none" ) + { + if ( !isplayer( attacker ) ) + final_damage = 0; + } + + new_health_tier = int( num_tiers * ( self.health - final_damage ) / self.maxhealth ); + + if ( old_health_tier > new_health_tier ) + { + while ( old_health_tier > new_health_tier ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 0 ) + println( "\\nMZ: Old tier: " + old_health_tier + " New Health Tier: " + new_health_tier + " Launching armor piece" ); +#/ + if ( old_health_tier < num_tiers ) + self mechz_launch_armor_piece(); + + old_health_tier--; + } + } + + if ( isdefined( self.has_helmet ) && self.has_helmet && self.helmet_dmg >= self.helmet_dmg_for_removal ) + { + self.has_helmet = 0; + self detach( "c_zom_mech_faceplate", "J_Helmet" ); + + if ( sndmechzisnetworksafe( "destruction" ) ) + self playsound( "zmb_ai_mechz_destruction" ); + + if ( sndmechzisnetworksafe( "angry" ) ) + self playsound( "zmb_ai_mechz_vox_angry" ); + + self.fx_field |= 1024; + self.fx_field &= ~2048; + self setclientfield( "mechz_fx", self.fx_field ); + + if ( !( isdefined( self.not_interruptable ) && self.not_interruptable ) && !( isdefined( self.is_traversing ) && self.is_traversing ) ) + { + self mechz_interrupt(); + self animscripted( self.origin, self.angles, "zm_pain_faceplate" ); + self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim_faceplate" ); + } + + self thread shoot_mechz_head_vo(); + } + + if ( isdefined( self.powerplant_covered ) && self.powerplant_covered && self.powerplant_cover_dmg >= self.powerplant_cover_dmg_for_removal ) + { + self.powerplant_covered = 0; + self detach( "c_zom_mech_powersupply_cap", "tag_powersupply" ); + cap_model = spawn( "script_model", self gettagorigin( "tag_powersupply" ) ); + cap_model.angles = self gettagangles( "tag_powersupply" ); + cap_model setmodel( "c_zom_mech_powersupply_cap" ); + cap_model physicslaunch( cap_model.origin, anglestoforward( cap_model.angles ) ); + cap_model thread mechz_delayed_item_delete(); + + if ( sndmechzisnetworksafe( "destruction" ) ) + self playsound( "zmb_ai_mechz_destruction" ); + + if ( !( isdefined( self.not_interruptable ) && self.not_interruptable ) && !( isdefined( self.is_traversing ) && self.is_traversing ) ) + { + self mechz_interrupt(); + self animscripted( self.origin, self.angles, "zm_pain_powercore" ); + self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim_powercore" ); + } + } + else if ( !( isdefined( self.powerplant_covered ) && self.powerplant_covered ) && ( isdefined( self.has_powerplant ) && self.has_powerplant ) && self.powerplant_dmg >= self.powerplant_dmg_for_destroy ) + { + self.has_powerplant = 0; + self thread mechz_stun( level.mechz_powerplant_stun_time ); + + if ( sndmechzisnetworksafe( "destruction" ) ) + self playsound( "zmb_ai_mechz_destruction" ); + } +/# + if ( getdvarint( _hash_E7121222 ) > 0 ) + { + println( "\\nMZ: Doing " + final_damage + " damage to mechz, Health Remaining: " + self.health ); + + if ( self.helmet_dmg < self.helmet_dmg_for_removal ) + println( "\\nMZ: Current helmet dmg: " + self.helmet_dmg + " Required helmet dmg: " + self.helmet_dmg_for_removal ); + } +#/ + return final_damage; +} + +mechz_non_attacker_damage_override( damage, weapon, attacker ) +{ + if ( attacker == level.vh_tank ) + self thread mechz_tank_hit_callback(); + + return 0; +} + +mechz_instakill_override() +{ + +} + +mechz_nuke_override() +{ + self endon( "death" ); + wait( randomfloatrange( 0.1, 0.7 ) ); + self playsound( "evt_nuked" ); + self dodamage( self.health * 0.25, self.origin ); +} + +mechz_set_locomotion_speed() +{ + self endon( "death" ); + self.prev_move_speed = self.zombie_move_speed; + + if ( !isdefined( self.favoriteenemy ) ) + self.zombie_move_speed = "walk"; + else if ( isdefined( self.force_run ) && self.force_run ) + self.zombie_move_speed = "run"; + else if ( isdefined( self.force_sprint ) && self.force_sprint ) + self.zombie_move_speed = "sprint"; + else if ( isdefined( self.favoriteenemy ) && self.favoriteenemy entity_on_tank() && isdefined( level.vh_tank ) && level.vh_tank ent_flag( "tank_activated" ) ) + self.zombie_move_speed = "run"; + else if ( isdefined( self.favoriteenemy ) && distancesquared( self.origin, self.favoriteenemy.origin ) > level.mechz_dist_for_sprint ) + self.zombie_move_speed = "run"; + else if ( !( isdefined( self.has_powerplant ) && self.has_powerplant ) ) + self.zombie_move_speed = "walk"; + else + self.zombie_move_speed = "walk"; + + if ( self.zombie_move_speed == "sprint" && self.prev_move_speed != "sprint" ) + { + self mechz_interrupt(); + self animscripted( self.origin, self.angles, "zm_sprint_intro" ); + self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" ); + } + else if ( self.zombie_move_speed != "sprint" && self.prev_move_speed == "sprint" ) + { + self animscripted( self.origin, self.angles, "zm_sprint_outro" ); + self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" ); + } + + self set_zombie_run_cycle( self.zombie_move_speed ); +} + +response_to_air_raid_siren_vo() +{ + wait 3.0; + a_players = getplayers(); + + if ( a_players.size == 0 ) + return; + + a_players = array_randomize( a_players ); + + foreach ( player in a_players ) + { + if ( is_player_valid( player ) ) + { + if ( !( isdefined( player.dontspeak ) && player.dontspeak ) ) + { + if ( !isdefined( level.air_raid_siren_count ) ) + { + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "siren_1st_time" ); + level.air_raid_siren_count = 1; + + while ( isdefined( player ) && ( isdefined( player.isspeaking ) && player.isspeaking ) ) + wait 0.1; + + level thread start_see_mech_zombie_vo(); + break; + } + else if ( level.mechz_zombie_per_round == 1 ) + { + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "siren_generic" ); + break; + } + else + { + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "multiple_mechs" ); + break; + } + } + } + } +} + +start_see_mech_zombie_vo() +{ + wait 1.0; + a_zombies = getaispeciesarray( level.zombie_team, "all" ); + + foreach ( zombie in a_zombies ) + { + if ( isdefined( zombie.is_mechz ) && zombie.is_mechz ) + ai_mechz = zombie; + } + + a_players = getplayers(); + + if ( a_players.size == 0 ) + return; + + if ( isalive( ai_mechz ) ) + { + foreach ( player in a_players ) + player thread player_looking_at_mechz_watcher( ai_mechz ); + } +} + +player_looking_at_mechz_watcher( ai_mechz ) +{ + self endon( "disconnect" ); + ai_mechz endon( "death" ); + level endon( "first_mech_zombie_seen" ); + + while ( true ) + { + if ( distancesquared( self.origin, ai_mechz.origin ) < 1000000 ) + { + if ( self is_player_looking_at( ai_mechz.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), 0.75 ) ) + { + if ( !( isdefined( self.dontspeak ) && self.dontspeak ) ) + { + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "discover_mech" ); + level notify( "first_mech_zombie_seen" ); + break; + } + } + } + + wait 0.1; + } +} + +mechz_grabbed_played_vo( ai_mechz ) +{ + self endon( "disconnect" ); + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "mech_grab" ); + + while ( isdefined( self ) && ( isdefined( self.isspeaking ) && self.isspeaking ) ) + wait 0.1; + + wait 1.0; + + if ( isalive( ai_mechz ) && isdefined( ai_mechz.e_grabbed ) ) + ai_mechz thread play_shoot_arm_hint_vo(); +} + +play_shoot_arm_hint_vo() +{ + self endon( "death" ); + + while ( true ) + { + if ( !isdefined( self.e_grabbed ) ) + return; + + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( player == self.e_grabbed ) + continue; + + if ( distancesquared( self.origin, player.origin ) < 1000000 ) + { + if ( player is_player_looking_at( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), 0.75 ) ) + { + if ( !( isdefined( player.dontspeak ) && player.dontspeak ) ) + { + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "shoot_mech_arm" ); + return; + } + } + } + } + + wait 0.1; + } +} + +mechz_hint_vo() +{ + self endon( "death" ); + wait 30.0; + + while ( true ) + { + if ( self.health > self.maxhealth * 0.5 ) + { + wait 1.0; + continue; + } + + if ( !( isdefined( self.powerplant_covered ) && self.powerplant_covered ) ) + { + wait 1.0; + continue; + } + + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( isdefined( self.e_grabbed ) && self.e_grabbed == player ) + continue; + + if ( distancesquared( self.origin, player.origin ) < 1000000 ) + { + if ( player is_player_looking_at( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), 0.75 ) ) + { + if ( !( isdefined( player.dontspeak ) && player.dontspeak ) ) + { + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "shoot_mech_power" ); + return; + } + } + } + } + + wait 0.1; + } +} + +shoot_mechz_head_vo() +{ + self endon( "death" ); + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( isdefined( self.e_grabbed ) && self.e_grabbed == player ) + continue; + + if ( distancesquared( self.origin, player.origin ) < 1000000 ) + { + if ( player is_player_looking_at( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), 0.75 ) ) + { + if ( !( isdefined( player.dontspeak ) && player.dontspeak ) ) + { + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "shoot_mech_head" ); + return; + } + } + } + } +} + +mechz_jump_vo() +{ + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( distancesquared( self.origin, player.origin ) < 1000000 ) + { + if ( player is_player_looking_at( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), 0.5 ) ) + { + if ( !( isdefined( player.dontspeak ) && player.dontspeak ) ) + { + player delay_thread( 3.0, maps\mp\zombies\_zm_audio::create_and_play_dialog, "general", "rspnd_mech_jump" ); + return; + } + } + } + } +} + +mechz_stomped_by_giant_robot_vo() +{ + self endon( "death" ); + wait 5.0; + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( distancesquared( self.origin, player.origin ) < 1000000 ) + { + if ( player is_player_looking_at( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), 0.75 ) ) + { + if ( !( isdefined( player.dontspeak ) && player.dontspeak ) ) + { + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "robot_crush_mech" ); + return; + } + } + } + } +} + +init_anim_rate() +{ + self setclientfield( "anim_rate", 1 ); + n_rate = self getclientfield( "anim_rate" ); + self setentityanimrate( n_rate ); +} + +sndmechzisnetworksafe( type ) +{ + if ( !isdefined( level.sndmechz ) ) + level.sndmechz = []; + + if ( !isdefined( level.sndmechz[type] ) ) + level thread sndmechznetworkchoke( type ); + + if ( level.sndmechz[type] > 1 ) + return false; + + level.sndmechz[type]++; + return true; +} + +sndmechznetworkchoke( type ) +{ + while ( true ) + { + level.sndmechz[type] = 0; + wait_network_frame(); + } +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_ai_mechz_booster.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_ai_mechz_booster.gsc new file mode 100644 index 0000000..5b68797 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_ai_mechz_booster.gsc @@ -0,0 +1,299 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\zombies\_zm_zonemgr; +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\zm_tomb_tank; +#include maps\mp\zombies\_zm_ai_mechz_dev; +#include maps\mp\zombies\_zm_ai_mechz; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\zombies\_zm_spawner; + +mechz_in_range_for_jump() +{ + if ( !isdefined( self.jump_pos ) ) + { +/# + iprintln( "\\nMZ Error: Trying to jump without valid jump_pos\\n" ); +#/ + self.jump_requested = 0; + return false; + } + + dist = distancesquared( self.origin, self.jump_pos.origin ); + + if ( dist <= 100 ) + return true; + + return false; +} + +mechz_jump_think( spawn_pos ) +{ + self endon( "death" ); + self endon( "stop_jump_think" ); + self.closest_jump_point = spawn_pos; + self.goal_pos = self.origin; + self setgoalpos( self.goal_pos ); + self thread mechz_jump_stuck_watcher(); + + while ( true ) + { + if ( isdefined( self.jump_requested ) && self.jump_requested ) + { + if ( !self mechz_should_jump() ) + { + self.jump_requested = 0; + self.jump_pos = undefined; + } + + wait 1; + continue; + } + + if ( !isdefined( self.ai_state ) || self.ai_state != "find_flesh" ) + { + wait 0.05; + continue; + } + + if ( isdefined( self.not_interruptable ) && self.not_interruptable ) + { + wait 0.05; + continue; + } +/# + if ( isdefined( self.force_behavior ) && self.force_behavior ) + { + wait 0.05; + continue; + } +#/ + if ( self mechz_should_jump() ) + { + self.jump_requested = 1; + self.jump_pos = get_closest_mechz_spawn_pos( self.origin ); + + if ( !isdefined( self.jump_pos ) ) + self.jump_requested = 0; + } + + wait 1; + } +} + +watch_for_riot_shield_melee() +{ + self endon( "new_stuck_watcher" ); + self endon( "death" ); + + while ( true ) + { + self waittill( "item_attack" ); +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\tMZ: Resetting fail count because of item attack\\n" ); +#/ + self.fail_count = 0; + } +} + +watch_for_valid_melee() +{ + self endon( "new_stuck_watcher" ); + self endon( "death" ); + + while ( true ) + { + self waittillmatch( "melee_anim", "end" ); + + if ( isdefined( self.favoriteenemy ) && distancesquared( self.origin, self.favoriteenemy.origin ) < 16384 ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\tMZ: Resetting fail count because of melee\\n" ); +#/ + self.fail_count = 0; + } + } +} + +mechz_jump_stuck_watcher() +{ + self notify( "new_stuck_watcher" ); + self endon( "death" ); + self endon( "new_stuck_watcher" ); + self.fail_count = 0; + self thread watch_for_valid_melee(); + self thread watch_for_riot_shield_melee(); + + while ( true ) + { + if ( !isdefined( self.goal_pos ) ) + { + wait 0.05; + continue; + } + + if ( isdefined( self.not_interruptable ) && self.not_interruptable ) + { + wait 0.05; + continue; + } + + if ( isdefined( self.ai_state ) && self.ai_state != "find_flesh" ) + { + wait 0.05; + continue; + } +/# + if ( isdefined( self.force_behavior ) && self.force_behavior ) + { + wait 0.05; + continue; + } +#/ + if ( !findpath( self.origin, self.goal_pos, self, 0, 0 ) ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\tMZ: Incrementing fail count\\n" ); +#/ +/# + println( "Mechz could not path to goal_pos " + self.goal_pos ); +#/ + self.fail_count++; + } + else + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\tMZ: Resetting fail count because of good path\\n" ); +#/ + self.fail_count = 0; + } + + wait 1; + } +} + +mechz_should_jump() +{ +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\tMZ: Checking should jump\\n" ); +#/ + if ( !isdefined( self.favoriteenemy ) ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\t\\tMZ: Not doing jump because has no enemy\\n" ); +#/ + return false; + } + + dist = distancesquared( self.origin, self.favoriteenemy.origin ); + + if ( dist >= level.mechz_jump_dist_threshold ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\t\\tMZ: Doing jump because target is too far\\n" ); +#/ + return true; + } + + if ( self.fail_count >= level.mechz_failed_paths_to_jump ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\t\\tMZ: Doing jump because has failed too many pathfind checks\\n" ); +#/ + return true; + } + + return false; +} + +mechz_do_jump( wait_for_stationary_tank ) +{ + self endon( "death" ); + self endon( "kill_jump" ); +/# + if ( getdvarint( _hash_E7121222 ) > 0 ) + println( "\\nMZ: Doing Jump-Teleport\\n" ); +#/ +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\nMZ: Jump setting not interruptable\\n" ); +#/ + self.not_interruptable = 1; + self setfreecameralockonallowed( 0 ); + self thread mechz_jump_vo(); + self animscripted( self.origin, self.angles, "zm_fly_out" ); + self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" ); + self ghost(); + self.mechz_hidden = 1; + + if ( isdefined( self.m_claw ) ) + self.m_claw ghost(); + + if ( self.fx_field ) + self.fx_field_old = self.fx_field; + + self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow_stop(); + self fx_cleanup(); + self animscripted( self.origin, self.angles, "zm_fly_hover" ); + wait( level.mechz_jump_delay ); + + if ( isdefined( wait_for_stationary_tank ) && wait_for_stationary_tank ) + level.vh_tank ent_flag_waitopen( "tank_moving" ); + + self notsolid(); + closest_jump_point = get_best_mechz_spawn_pos( 1 ); + + if ( isdefined( closest_jump_point ) ) + self.closest_jump_point = closest_jump_point; + + if ( !isdefined( self.closest_jump_point.angles ) ) + self.closest_jump_point.angles = ( 0, 0, 0 ); + + self animscripted( self.closest_jump_point.origin, self.closest_jump_point.angles, "zm_fly_in" ); + self solid(); + self.mechz_hidden = 0; + self show(); + self.fx_field = self.fx_field_old; + self.fx_field_old = undefined; + self setclientfield( "mechz_fx", self.fx_field ); + self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow(); + + if ( isdefined( self.m_claw ) ) + self.m_claw show(); + + self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" ); + self.not_interruptable = 0; + self setfreecameralockonallowed( 1 ); +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\nMZ: Jump clearing not interruptable\\n" ); +#/ + mechz_jump_cleanup(); +} + +mechz_kill_jump_watcher() +{ + self endon( "jump_complete" ); + self waittill_either( "death", "kill_jump" ); + self mechz_jump_cleanup(); +} + +mechz_jump_cleanup() +{ + self.fx_field &= ~128; + self setclientfield( "mechz_fx", self.fx_field ); + self stopanimscripted(); + self notify( "jump_complete" ); +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_ai_mechz_claw.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_ai_mechz_claw.gsc new file mode 100644 index 0000000..b0fb037 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_ai_mechz_claw.gsc @@ -0,0 +1,608 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\zombies\_zm_zonemgr; +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zm_tomb_utility; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\zm_tomb_tank; +#include maps\mp\zombies\_zm_ai_mechz_dev; +#include maps\mp\zombies\_zm_ai_mechz; +#include maps\mp\zombies\_zm_ai_mechz_ft; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_weap_riotshield_tomb; + +#using_animtree("mechz_claw"); + +mechz_claw_detach() +{ + if ( isdefined( self.m_claw ) ) + { + self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0.2, 1 ); + + if ( isdefined( self.m_claw.fx_ent ) ) + self.m_claw.fx_ent delete(); + + self.m_claw unlink(); + self.m_claw physicslaunch( self.m_claw.origin, ( 0, 0, -1 ) ); + self.m_claw thread mechz_delayed_item_delete(); + self.m_claw = undefined; + } + + if ( isdefined( self.m_claw_damage_trigger ) ) + { + self.m_claw_damage_trigger unlink(); + self.m_claw_damage_trigger delete(); + self.m_claw_damage_trigger = undefined; + } +} + +mechz_claw_release( bopenclaw ) +{ + self.explosive_dmg_taken_on_grab_start = undefined; + + if ( isdefined( self.e_grabbed ) ) + { + if ( isplayer( self.e_grabbed ) ) + { + self.e_grabbed setclientfieldtoplayer( "mechz_grab", 0 ); + self.e_grabbed allowcrouch( 1 ); + self.e_grabbed allowprone( 1 ); + } + + if ( !isdefined( self.e_grabbed._fall_down_anchor ) ) + { + trace_start = self.e_grabbed.origin + vectorscale( ( 0, 0, 1 ), 70.0 ); + trace_end = self.e_grabbed.origin + vectorscale( ( 0, 0, -1 ), 500.0 ); + drop_trace = playerphysicstrace( trace_start, trace_end ) + vectorscale( ( 0, 0, 1 ), 24.0 ); + self.e_grabbed unlink(); + self.e_grabbed setorigin( drop_trace ); + } + + self.e_grabbed = undefined; + + if ( isdefined( bopenclaw ) && bopenclaw ) + self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0.2, 1 ); + } +} + +mechz_claw_shot_pain_reaction() +{ + self mechz_interrupt(); + self animscripted( self.origin, self.angles, "zm_head_pain" ); + self maps\mp\animscripts\zm_shared::donotetracks( "head_pain_anim" ); +} + +ent_released_from_claw_grab_achievement( e_releaser, e_held_by_mechz ) +{ + if ( isdefined( e_releaser ) && isdefined( e_held_by_mechz ) && isplayer( e_releaser ) && isplayer( e_held_by_mechz ) ) + { + if ( e_releaser == e_held_by_mechz ) + e_releaser notify( "mechz_grab_released_self" ); + else + e_releaser notify( "mechz_grab_released_friendly" ); + } +} + +mechz_claw_notetracks() +{ + self endon( "death" ); + self endon( "kill_claw" ); + + self waittillmatch( "grapple_anim", "muzzleflash" ); + + self waittillmatch( "grapple_anim", "end" ); +} + +mechz_claw_aim( target_pos ) +{ + self endon( "death" ); + self endon( "kill_claw" ); + self endon( "claw_complete" ); + aim_anim = mechz_get_aim_anim( "zm_grapple", target_pos ); + self animscripted( self.origin, self.angles, "zm_grapple_aim_start" ); + self thread mechz_claw_notetracks(); + self maps\mp\animscripts\zm_shared::donotetracks( "grapple_anim" ); + + while ( flag( "mechz_launching_claw" ) ) + { + self animscripted( self.origin, self.angles, aim_anim ); + self maps\mp\animscripts\zm_shared::donotetracks( "grapple_anim" ); + self clearanim( %root, 0.0 ); + } +} + +player_can_be_grabbed() +{ + if ( self getstance() == "prone" && ( isdefined( self.is_dtp ) && self.is_dtp ) ) + return false; + + if ( !is_player_valid( self, 1, 1 ) ) + return false; + + return true; +} + +mechz_claw_explosive_watcher() +{ + if ( !isdefined( self.explosive_dmg_taken ) ) + self.explosive_dmg_taken = 0; + + self.explosive_dmg_taken_on_grab_start = self.explosive_dmg_taken; +} + +mechz_unlink_on_laststand( mechz ) +{ + self endon( "death" ); + self endon( "disconnect" ); + mechz endon( "death" ); + mechz endon( "claw_complete" ); + mechz endon( "kill_claw" ); + + while ( true ) + { + if ( isdefined( self ) && self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + mechz thread mechz_claw_release(); + return; + } + + wait 0.05; + } +} + +claw_grapple() +{ + self endon( "death" ); + self endon( "kill_claw" ); + + if ( !isdefined( self.favoriteenemy ) ) + return; + + v_claw_origin = self gettagorigin( "tag_claw" ); + v_claw_angles = vectortoangles( self.origin - self.favoriteenemy.origin ); + self.fx_field |= 256; + self setclientfield( "mechz_fx", self.fx_field ); + self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0, 1 ); + self.m_claw unlink(); + self.m_claw.fx_ent = spawn( "script_model", self.m_claw gettagorigin( "tag_claw" ) ); + self.m_claw.fx_ent.angles = self.m_claw gettagangles( "tag_claw" ); + self.m_claw.fx_ent setmodel( "tag_origin" ); + self.m_claw.fx_ent linkto( self.m_claw, "tag_claw" ); + network_safe_play_fx_on_tag( "mech_claw", 1, level._effect["mechz_claw"], self.m_claw.fx_ent, "tag_origin" ); + v_enemy_origin = self.favoriteenemy.origin + vectorscale( ( 0, 0, 1 ), 36.0 ); + n_dist = distance( v_claw_origin, v_enemy_origin ); + n_time = n_dist / 1200; + self playsound( "zmb_ai_mechz_claw_fire" ); + self.m_claw moveto( v_enemy_origin, n_time ); + self.m_claw thread check_for_claw_move_complete(); + self.m_claw playloopsound( "zmb_ai_mechz_claw_loop_out", 0.1 ); + self.e_grabbed = undefined; + + do + { + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( !is_player_valid( player, 1, 1 ) || !player player_can_be_grabbed() ) + continue; + + n_dist_sq = distancesquared( player.origin + vectorscale( ( 0, 0, 1 ), 36.0 ), self.m_claw.origin ); + + if ( n_dist_sq < 2304 ) + { + if ( isdefined( player.hasriotshield ) && player.hasriotshield && player getcurrentweapon() == level.riotshield_name ) + { + shield_dmg = level.zombie_vars["riotshield_hit_points"]; + player maps\mp\zombies\_zm_weap_riotshield_tomb::player_damage_shield( shield_dmg - 1, 1 ); + wait 1; + player maps\mp\zombies\_zm_weap_riotshield_tomb::player_damage_shield( 1, 1 ); + } + else + { + self.e_grabbed = player; + self.e_grabbed setclientfieldtoplayer( "mechz_grab", 1 ); + self.e_grabbed playerlinktodelta( self.m_claw, "tag_attach_player" ); + self.e_grabbed setplayerangles( vectortoangles( self.origin - self.e_grabbed.origin ) ); + self.e_grabbed playsound( "zmb_ai_mechz_claw_grab" ); + self.e_grabbed setstance( "stand" ); + self.e_grabbed allowcrouch( 0 ); + self.e_grabbed allowprone( 0 ); + self.e_grabbed thread mechz_grabbed_played_vo( self ); + + if ( !flag( "mechz_claw_move_complete" ) ) + self.m_claw moveto( self.m_claw.origin, 0.05 ); + } + + break; + } + } + + wait 0.05; + } + while ( !flag( "mechz_claw_move_complete" ) && !isdefined( self.e_grabbed ) ); + + if ( !isdefined( self.e_grabbed ) ) + { + a_ai_zombies = get_round_enemy_array(); + + foreach ( ai_zombie in a_ai_zombies ) + { + if ( !isalive( ai_zombie ) || isdefined( ai_zombie.is_giant_robot ) && ai_zombie.is_giant_robot || isdefined( ai_zombie.is_mechz ) && ai_zombie.is_mechz ) + continue; + + n_dist_sq = distancesquared( ai_zombie.origin + vectorscale( ( 0, 0, 1 ), 36.0 ), self.m_claw.origin ); + + if ( n_dist_sq < 2304 ) + { + self.e_grabbed = ai_zombie; + self.e_grabbed linkto( self.m_claw, "tag_attach_player", ( 0, 0, 0 ) ); + self.e_grabbed.mechz_grabbed_by = self; + self.e_grabbed animcustom( ::zombie_grabbed_by_mechz_claw ); + break; + } + } + } + + self.m_claw clearanim( %root, 0.2 ); + self.m_claw setanim( %ai_zombie_mech_grapple_arm_closed_idle, 1, 0.2, 1 ); + wait 0.5; + + if ( isdefined( self.e_grabbed ) ) + n_time = n_dist / 200; + else + n_time = n_dist / 1000; + + self mechz_claw_explosive_watcher(); + v_claw_origin = self gettagorigin( "tag_claw" ); + v_claw_angles = self gettagangles( "tag_claw" ); + self.m_claw moveto( v_claw_origin, max( 0.05, n_time ) ); + self.m_claw playloopsound( "zmb_ai_mechz_claw_loop_in", 0.1 ); + + self.m_claw waittill( "movedone" ); + + v_claw_origin = self gettagorigin( "tag_claw" ); + v_claw_angles = self gettagangles( "tag_claw" ); + self.m_claw playsound( "zmb_ai_mechz_claw_back" ); + self.m_claw stoploopsound( 1 ); + + if ( maps\mp\zombies\_zm_ai_mechz::sndmechzisnetworksafe( "angry" ) ) + self playsound( "zmb_ai_mechz_vox_angry" ); + + self.m_claw.origin = v_claw_origin; + self.m_claw.angles = v_claw_angles; + self.m_claw clearanim( %root, 0.2 ); + self.m_claw linkto( self, "tag_claw", ( 0, 0, 0 ) ); + self.m_claw setanim( %ai_zombie_mech_grapple_arm_closed_idle, 1, 0.2, 1 ); + self.m_claw.fx_ent delete(); + self.m_claw.fx_ent = undefined; + self.fx_field &= ~256; + self setclientfield( "mechz_fx", self.fx_field ); + flag_clear( "mechz_launching_claw" ); + + if ( isdefined( self.e_grabbed ) ) + { + if ( !isdefined( self.flamethrower_trigger ) ) + self mechz_flamethrower_initial_setup(); + + if ( isplayer( self.e_grabbed ) && is_player_valid( self.e_grabbed ) ) + self.e_grabbed thread mechz_unlink_on_laststand( self ); + else if ( isai( self.e_grabbed ) ) + self.e_grabbed thread mechz_zombie_flamethrower_gib( self ); + + self thread check_for_claw_damaged( self.e_grabbed ); + self animscripted( self.origin, self.angles, "zm_flamethrower_claw_victim" ); + self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" ); + } + + flag_clear( "mechz_claw_move_complete" ); +} + +zombie_grabbed_by_mechz_claw() +{ + self endon( "death" ); + self setanimstatefromasd( "zm_grabbed_by_mech" ); + self.mechz_grabbed_by waittill_any( "death", "claw_complete", "kill_claw" ); +} + +check_for_claw_damaged( player ) +{ + player endon( "death" ); + player endon( "disconnect" ); + self endon( "death" ); + self endon( "claw_complete" ); + self endon( "kill_claw" ); + self thread claw_damaged_mechz_endon_watcher( player ); + player thread claw_damaged_player_endon_watcher( self ); + self.m_claw setcandamage( 1 ); + + while ( isdefined( self.e_grabbed ) ) + { + self.m_claw waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); + + if ( is_player_valid( inflictor ) ) + { + self dodamage( 1, inflictor.origin, inflictor, inflictor, "left_hand", type ); + self.m_claw setcandamage( 0 ); + self notify( "claw_damaged" ); + break; + } + } +} + +claw_damaged_mechz_endon_watcher( player ) +{ + self endon( "claw_damaged" ); + player endon( "death" ); + player endon( "disconnect" ); + self waittill_any( "death", "claw_complete", "kill_claw" ); + + if ( isdefined( self ) && isdefined( self.m_claw ) ) + self.m_claw setcandamage( 0 ); +} + +claw_damaged_player_endon_watcher( mechz ) +{ + mechz endon( "claw_damaged" ); + mechz endon( "death" ); + mechz endon( "claw_complete" ); + mechz endon( "kill_claw" ); + self waittill_any( "death", "disconnect" ); + + if ( isdefined( mechz ) && isdefined( mechz.m_claw ) ) + mechz.m_claw setcandamage( 0 ); +} + +check_for_players_mid_grapple() +{ + self endon( "movedone" ); + + while ( true ) + { + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( !is_player_valid( player, 1, 1 ) || !player player_can_be_grabbed() ) + continue; + + n_dist_sq = distancesquared( player.origin + vectorscale( ( 0, 0, 1 ), 36.0 ), self.origin ); + + if ( n_dist_sq < 2304 ) + { + self moveto( self.origin, 0.05 ); + self notify( "movedone" ); + return; + } + } + + wait 0.05; + } +} + +check_for_claw_move_complete() +{ + self waittill( "movedone" ); + + wait 0.05; + flag_set( "mechz_claw_move_complete" ); +} + +mechz_zombie_flamethrower_gib( mechz ) +{ + mechz waittillmatch( "flamethrower_anim", "start_ft" ); + + if ( isalive( self ) ) + { + self thread zombie_gib_all(); + self dodamage( self.health, self.origin, self ); + } +} + +should_do_claw_attack() +{ + assert( isdefined( self.favoriteenemy ) ); +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\tMZ: Checking should claw\\n" ); +#/ + if ( !( isdefined( self.has_powerplant ) && self.has_powerplant ) ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\t\\tMZ: Not doing claw because powerplant has been destroyed\\n" ); +#/ + return false; + } + + if ( isdefined( self.disable_complex_behaviors ) && self.disable_complex_behaviors ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\t\\tMZ: Not doing claw because doing force aggro\\n" ); +#/ + return false; + } + + if ( isdefined( self.not_interruptable ) && self.not_interruptable ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\t\\tMZ: Not doing claw because another behavior has set not_interruptable\\n" ); +#/ + return false; + } + + if ( isdefined( self.last_claw_time ) && gettime() - self.last_claw_time < level.mechz_claw_cooldown_time ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\t\\tMZ: Not doing claw because claw is on cooldown\\n" ); +#/ + return false; + } + + if ( !self mechz_check_in_arc() ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\t\\tMZ: Not doing claw because target is not in front arc\\n" ); +#/ + return false; + } + + n_dist_sq = distancesquared( self.origin, self.favoriteenemy.origin ); + + if ( n_dist_sq < 90000 || n_dist_sq > 1000000 ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\t\\tMZ: Not doing claw because target is not in range\\n" ); +#/ + return false; + } + + if ( !self.favoriteenemy player_can_be_grabbed() ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\t\\tMZ: Not doing claw because player is prone or dtp\\n" ); +#/ + return false; + } + + curr_zone = get_zone_from_position( self.origin + vectorscale( ( 0, 0, 1 ), 36.0 ) ); + + if ( isdefined( curr_zone ) && "ug_bottom_zone" == curr_zone ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\t\\tMZ: Not doing claw because mech is in main chamber\\n" ); +#/ + return false; + } + + clip_mask = level.physicstracemaskclip | level.physicstracemaskphysics; + claw_origin = self.origin + vectorscale( ( 0, 0, 1 ), 65.0 ); + trace = physicstrace( claw_origin, self.favoriteenemy.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), ( -15, -15, -20 ), ( 15, 15, 40 ), self, clip_mask ); + b_cansee = trace["fraction"] == 1.0 || isdefined( trace["entity"] ) && trace["entity"] == self.favoriteenemy; + + if ( !b_cansee ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\t\\tMZ: Not doing claw because capsule trace failed\\n" ); +#/ + return false; + } + + return true; +} + +mechz_do_claw_grab() +{ + self endon( "death" ); + self endon( "kill_claw" ); +/# + if ( getdvarint( _hash_E7121222 ) > 0 ) + println( "\\n\\tMZ: Doing Claw Attack\\n" ); +#/ + assert( isdefined( self.favoriteenemy ) ); + self thread mechz_kill_claw_watcher(); + self.last_claw_time = gettime(); + target_pos = self.favoriteenemy.origin + vectorscale( ( 0, 0, 1 ), 30.0 ); + self thread mechz_stop_basic_find_flesh(); + self.ai_state = "grapple_attempt"; + flag_set( "mechz_launching_claw" ); + self thread mechz_claw_aim( target_pos ); + self orientmode( "face enemy" ); + + self waittillmatch( "grapple_anim", "muzzleflash" ); + + self claw_grapple(); + self mechz_claw_cleanup(); +} + +mechz_kill_claw_watcher() +{ + self endon( "claw_complete" ); + self waittill_either( "death", "kill_claw" ); + self mechz_claw_cleanup(); +} + +mechz_claw_cleanup() +{ + self.fx_field &= ~256; + self.fx_field &= ~64; + self setclientfield( "mechz_fx", self.fx_field ); + self mechz_claw_release(); + + if ( isdefined( self.m_claw ) ) + { + self.m_claw clearanim( %root, 0.2 ); + + if ( isdefined( self.m_claw.fx_ent ) ) + { + self.m_claw.fx_ent delete(); + self.m_claw.fx_ent = undefined; + } + + if ( !( isdefined( self.has_powerplant ) && self.has_powerplant ) ) + { + self mechz_claw_detach(); + flag_clear( "mechz_launching_claw" ); + } + else + { + if ( !self.m_claw islinkedto( self ) ) + { + v_claw_origin = self gettagorigin( "tag_claw" ); + v_claw_angles = self gettagangles( "tag_claw" ); + n_dist = distance( self.m_claw.origin, v_claw_origin ); + n_time = n_dist / 1000; + self.m_claw moveto( v_claw_origin, max( 0.05, n_time ) ); + self.m_claw playloopsound( "zmb_ai_mechz_claw_loop_in", 0.1 ); + + self.m_claw waittill( "movedone" ); + + v_claw_origin = self gettagorigin( "tag_claw" ); + v_claw_angles = self gettagangles( "tag_claw" ); + self.m_claw playsound( "zmb_ai_mechz_claw_back" ); + self.m_claw stoploopsound( 1 ); + self.m_claw.origin = v_claw_origin; + self.m_claw.angles = v_claw_angles; + self.m_claw clearanim( %root, 0.2 ); + self.m_claw linkto( self, "tag_claw", ( 0, 0, 0 ) ); + } + + self.m_claw setanim( %ai_zombie_mech_grapple_arm_closed_idle, 1, 0.2, 1 ); + } + } + + self notify( "claw_complete" ); +} + +mechz_claw_damage_trigger_thread() +{ + self endon( "death" ); + self.m_claw_damage_trigger endon( "death" ); + + while ( true ) + { + self.m_claw_damage_trigger waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); + + if ( self.m_claw islinkedto( self ) ) + continue; + + if ( is_player_valid( inflictor ) ) + { + self dodamage( 1, inflictor.origin, inflictor, inflictor, "left_hand", type ); + self.m_claw setcandamage( 0 ); + self notify( "claw_damaged" ); + } + } +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_ai_mechz_dev.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_ai_mechz_dev.gsc new file mode 100644 index 0000000..db05c94 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_ai_mechz_dev.gsc @@ -0,0 +1,509 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\zombies\_zm_ai_mechz; +#include maps\mp\animscripts\zm_shared; + +mechz_debug() +{ +/# + while ( true ) + { + debug_level = getdvarint( _hash_E7121222 ); + + if ( isdefined( debug_level ) && debug_level ) + { + if ( debug_level == 1 ) + { + mechz_array = getentarray( "mechz_zombie_ai" ); + + for ( i = 0; i < mechz_array.size; i++ ) + { + if ( isdefined( mechz_array[i].goal_pos ) ) + { + debugstar( mechz_array[i].goal_pos, ( 1, 0, 0 ), 1 ); + line( mechz_array[i].goal_pos, mechz_array[i].origin, ( 1, 0, 0 ), 0, 1 ); + } + } + } + } + } +#/ +} + +setup_devgui() +{ +/# + setdvar( "spawn_Mechz", "off" ); + setdvar( "force_mechz_jump", "off" ); + setdvar( "test_mechz_tank", "off" ); + setdvar( "test_mechz_robot", "off" ); + setdvar( "reset_mechz_thinking", "off" ); + setdvar( "test_mechz_sprint", "off" ); + setdvar( "mechz_force_behavior", "none" ); + setdvarint( "mechz_behavior_orient", 0 ); + setdvarint( "mechz_behavior_dist", 300 ); + adddebugcommand( "devgui_cmd \"Zombies/Zombie Spawning:2/Spawn Zombie:1/Mech Zombie:1\" \"spawn_Mechz on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Jump In:1\" \"mechz_force_behavior jump_in\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Jump Out:2\" \"mechz_force_behavior jump_out\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Flamethrower:3\" \"mechz_force_behavior flamethrower\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Damage Armor:4\" \"mechz_force_behavior damage_armor\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Damage Faceplate:5\" \"mechz_force_behavior damage_faceplate\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Claw Attack:5\" \"mechz_force_behavior claw_attack\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Melee:6\" \"mechz_force_behavior melee\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/zero degrees:1\" \"mechz_behavior_orient 0\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/forty-five degrees:2\" \"mechz_behavior_orient 45\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/ninety degrees:3\" \"mechz_behavior_orient 90\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/one thirty five degrees:4\" \"mechz_behavior_orient 135\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/one eighty degrees:5\" \"mechz_behavior_orient 180\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/two twenty five degrees:6\" \"mechz_behavior_orient 225\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/two seventy degrees:7\" \"mechz_behavior_orient 270\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/three fifteen degrees:8\" \"mechz_behavior_orient 315\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Distance:8/one hundred:1\" \"mechz_behavior_dist 100\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Distance:8/two hundred:2\" \"mechz_behavior_dist 200\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Distance:8/three hundred:3\" \"mechz_behavior_dist 300\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Distance:8/four hundred:4\" \"mechz_behavior_dist 400\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Distance:8/five hundred:5\" \"mechz_behavior_dist 500\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Test Tank Knockdown:2\" \"test_mechz_tank on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Test Robot Knockdown:3\" \"test_mechz_robot on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Test Sprint:4\" \"test_mechz_sprint on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Reset Mech:5\" \"reset_mechz_thinking on\"\n" ); + level thread watch_devgui_mechz(); +#/ +} + +watch_devgui_mechz() +{ +/# + while ( true ) + { + if ( getdvar( _hash_877D2B64 ) == "on" ) + { + mechz_health_increases(); + level.mechz_left_to_spawn = 1; + + if ( getdvarint( _hash_FA81816F ) >= 2 ) + level.round_number++; + + level notify( "spawn_mechz" ); + setdvar( "spawn_Mechz", "off" ); + level.mechz_last_spawn_round = 0; + } + + if ( getdvar( _hash_7D9211F9 ) != "none" ) + { + behavior = getdvar( _hash_7D9211F9 ); + zombies = getaiarray( "axis" ); + + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz ) + zombies[i] thread mechz_force_behavior( behavior ); + } + + setdvar( "mechz_force_behavior", "none" ); + } + + if ( getdvar( _hash_BD7CA008 ) == "on" ) + { + setdvar( "test_mechz_tank", "off" ); + mechz = undefined; + zombies = getaiarray( "axis" ); + + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz ) + mechz = zombies[i]; + } + + if ( !isdefined( mechz ) ) + continue; + + mechz.not_interruptable = 1; + mechz mechz_stop_basic_find_flesh(); + mechz.ai_state = "devgui"; + mechz.goal_pos = ( 446, -4318, 200 ); + mechz setgoalpos( mechz.goal_pos ); + } + + if ( getdvar( _hash_6CF3EB40 ) == "on" ) + { + setdvar( "test_mechz_robot", "off" ); + mechz = undefined; + zombies = getaiarray( "axis" ); + + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz ) + mechz = zombies[i]; + } + + if ( !isdefined( mechz ) ) + continue; + + mechz.not_interruptable = 1; + mechz mechz_stop_basic_find_flesh(); + mechz.ai_state = "devgui"; + mechz.goal_pos = ( 1657, -336, 92 ); + mechz setgoalpos( mechz.goal_pos ); + } + + if ( getdvar( _hash_DE1409A ) == "on" ) + { + setdvar( "test_mechz_sprint", "off" ); + zombies = getaiarray( "axis" ); + + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz ) + zombies[i].force_sprint = 1; + } + } + + if ( getdvar( _hash_772BCD39 ) == "on" ) + { + setdvar( "reset_mechz_thinking", "off" ); + zombies = getaiarray( "axis" ); + + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz ) + { + zombies[i].not_interruptable = 0; + zombies[i].force_sprint = 0; + } + } + } + + wait 0.1; + } +#/ +} + +mechz_force_behavior( behavior ) +{ +/# + self notify( "kill_force_behavior" ); + self thread mechz_stop_basic_find_flesh(); + self.ignoreall = 1; + self.force_behavior = 1; + + if ( behavior == "jump_in" ) + self thread mechz_force_jump_in(); + + if ( behavior == "jump_out" ) + self thread mechz_force_jump_out(); + + if ( behavior == "flamethrower" ) + self thread mechz_force_flamethrower(); + + if ( behavior == "claw_attack" ) + self thread mechz_force_claw_attack(); + + if ( behavior == "damage_armor" ) + self thread mechz_force_damage_armor(); + + if ( behavior == "damage_faceplate" ) + self thread mechz_force_damage_faceplate(); + + if ( behavior == "melee" ) + self thread mechz_force_melee(); + + if ( behavior == "none" ) + { + self.ignoreall = 0; + self.force_behavior = 0; + self notify( "kill_force_behavior" ); + } +#/ +} + +get_behavior_orient() +{ +/# + behavior_orient = getdvarint( _hash_2F660A7B ); + return level.players[0].angles + vectorscale( ( 0, 1, 0 ), 180.0 ) + ( 0, behavior_orient, 0 ); +#/ +} + +setup_force_behavior() +{ +/# + if ( !isdefined( level.test_align_struct ) ) + { + player = get_players()[0]; + pos = player.origin; + offset = anglestoforward( player.angles ); + offset = vectornormalize( offset ); + level.test_align_struct = spawn( "script_model", pos + 300 * offset ); + level.test_align_struct setmodel( "tag_origin" ); + level.test_align_struct.angles = player.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); + level.test_align_struct thread align_test_struct(); + level.test_align_struct.angles = player.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); + } + + self linkto( level.test_align_struct, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) ); + self.fx_field &= ~64; + self.fx_field &= ~128; + self.fx_field &= ~256; +#/ +} + +align_test_struct() +{ +/# + while ( true ) + { + pos = level.players[0].origin; + offset = anglestoforward( level.players[0].angles ); + offset = vectornormalize( offset ); + dist = getdvarint( _hash_6DCD047E ); + level.test_align_struct.origin = pos + dist * offset; + level.test_align_struct.angles = get_behavior_orient(); + wait 0.05; + } +#/ +} + +scripted_behavior( anim_scripted_name, notify_name ) +{ +/# + self animscripted( level.test_align_struct.origin, level.test_align_struct.angles, anim_scripted_name ); + self maps\mp\animscripts\zm_shared::donotetracks( notify_name ); +#/ +} + +mechz_force_jump_in() +{ +/# + self endon( "kill_force_behavior" ); + self setup_force_behavior(); + + while ( true ) + { + self animscripted( self.origin, self.angles, "zm_idle" ); + wait 0.2; + self scripted_behavior( "zm_spawn", "jump_anim" ); + } +#/ +} + +mechz_force_jump_out() +{ +/# + self endon( "kill_force_behavior" ); + self setup_force_behavior(); + + while ( true ) + { + self animscripted( self.origin, self.angles, "zm_idle" ); + wait 0.2; + self scripted_behavior( "zm_fly_out", "jump_anim" ); + self ghost(); + self animscripted( self.origin, self.angles, "zm_fly_hover" ); + wait( level.mechz_jump_delay ); + self show(); + self scripted_behavior( "zm_fly_in", "jump_anim" ); + } +#/ +} + +#using_animtree("mechz_claw"); + +mechz_force_flamethrower() +{ +/# + self endon( "kill_force_behavior" ); + self setup_force_behavior(); + curr_aim_anim = 1; + curr_timer = 0; + self animscripted( self.origin, self.angles, "zm_idle" ); + wait 0.2; + self scripted_behavior( "zm_flamethrower_aim_start", "flamethrower_anim" ); + + while ( true ) + { + if ( curr_timer > 3 ) + { + curr_aim_anim++; + curr_timer = 0; + + if ( curr_aim_anim < 10 ) + iprintln( "Testing aim_" + curr_aim_anim ); + } + + if ( curr_aim_anim >= 10 ) + { + iprintln( "Testing flamethrower sweep" ); + curr_aim_anim = 1; + self scripted_behavior( "zm_flamethrower_sweep", "flamethrower_anim" ); + self.fx_field |= 64; + self setclientfield( "mechz_fx", self.fx_field ); + } + else + { + length = self getanimlengthfromasd( "zm_flamethrower_aim_" + curr_aim_anim, 0 ); + self clearanim( %root, 0 ); + self scripted_behavior( "zm_flamethrower_aim_" + curr_aim_anim, "flamethrower_anim" ); + curr_timer += length; + } + } +#/ +} + +fake_launch_claw() +{ +/# + self.launching_claw = 1; + v_claw_origin = self gettagorigin( "tag_claw" ); + v_claw_angles = vectortoangles( self.origin - level.players[0].origin ); + self.fx_field |= 256; + self setclientfield( "mechz_fx", self.fx_field ); + self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0, 1 ); + self.m_claw unlink(); + self.m_claw.fx_ent = spawn( "script_model", self.m_claw gettagorigin( "tag_claw" ) ); + self.m_claw.fx_ent.angles = self.m_claw gettagangles( "tag_claw" ); + self.m_claw.fx_ent setmodel( "tag_origin" ); + self.m_claw.fx_ent linkto( self.m_claw, "tag_claw" ); + network_safe_play_fx_on_tag( "mech_claw", 1, level._effect["mechz_claw"], self.m_claw.fx_ent, "tag_origin" ); + self.m_claw clearanim( %root, 0.2 ); + self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0.2, 1 ); + offset = anglestoforward( self.angles ); + offset = vectornormalize( offset ); + target_pos = self.origin + offset * 500 + vectorscale( ( 0, 0, 1 ), 36.0 ); + n_time = 0.0833333; + self.m_claw moveto( target_pos, n_time ); + + self.m_claw waittill( "movedone" ); + + self.m_claw clearanim( %root, 0.2 ); + self.m_claw setanim( %ai_zombie_mech_grapple_arm_closed_idle, 1, 0.2, 1 ); + wait 0.5; + self.m_claw moveto( v_claw_origin, 0.5 ); + + self.m_claw waittill( "movedone" ); + + self.m_claw.fx_ent delete(); + self.fx_field &= ~256; + self setclientfield( "mechz_fx", self.fx_field ); + v_claw_origin = self gettagorigin( "tag_claw" ); + v_claw_angles = self gettagangles( "tag_claw" ); + self.m_claw.origin = v_claw_origin; + self.m_claw.angles = v_claw_angles; + self.m_claw linkto( self, "tag_claw" ); + self.launching_claw = 0; +#/ +} + +mechz_force_claw_attack() +{ +/# + self endon( "kill_force_behavior" ); + self setup_force_behavior(); + + while ( true ) + { + self animscripted( self.origin, self.angles, "zm_idle" ); + wait 0.2; + self scripted_behavior( "zm_grapple_aim_start", "grapple_anim" ); + self thread fake_launch_claw(); + + while ( isdefined( self.launching_claw ) && self.launching_claw ) + { + self clearanim( %root, 0 ); + wait 0.05; + self scripted_behavior( "zm_grapple_aim_5", "grapple_anim" ); + } + + self scripted_behavior( "zm_flamethrower_claw_victim", "flamethrower_anim" ); + } +#/ +} + +mechz_force_damage_armor() +{ +/# + self endon( "kill_force_behavior" ); + self setup_force_behavior(); + + if ( !isdefined( self.next_armor_piece ) ) + self.next_armor_piece = 0; + + self thread scripted_behavior( "zm_idle", "idle_anim" ); + + if ( self.next_armor_piece == self.armor_state.size ) + { + self.next_armor_piece = 0; + + for ( i = 0; i < self.armor_state.size; i++ ) + { + self.fx_field &= ~( 1 << self.armor_state[i].index ); + + if ( isdefined( self.armor_state[i].model ) ) + self attach( self.armor_state[i].model, self.armor_state[i].tag ); + } + } + else + { + self.fx_field |= 1 << self.armor_state[self.next_armor_piece].index; + + if ( isdefined( self.armor_state[self.next_armor_piece].model ) ) + self detach( self.armor_state[self.next_armor_piece].model, self.armor_state[self.next_armor_piece].tag ); + + self.next_armor_piece++; + } + + self setclientfield( "mechz_fx", self.fx_field ); + + while ( true ) + self scripted_behavior( "zm_idle", "idle_anim" ); +#/ +} + +mechz_force_damage_faceplate() +{ +/# + self endon( "kill_force_behavior" ); + self setup_force_behavior(); + self thread scripted_behavior( "zm_idle", "idle_anim" ); + + if ( isdefined( self.has_helmet ) && self.has_helmet ) + { + self.has_helmet = 0; + self detach( "c_zom_mech_faceplate", "J_Helmet" ); + self.fx_field |= 1024; + self.fx_field &= ~2048; + } + else + { + self.has_helmet = 1; + self.fx_field &= ~1024; + self.fx_field |= 2048; + self attach( "c_zom_mech_faceplate", "J_Helmet" ); + } + + self setclientfield( "mechz_fx", self.fx_field ); + + while ( true ) + self scripted_behavior( "zm_idle", "idle_anim" ); +#/ +} + +mechz_force_melee() +{ +/# + self endon( "kill_force_behavior" ); + self setup_force_behavior(); + + while ( true ) + { + self animscripted( self.origin, self.angles, "zm_idle" ); + wait 0.2; + self scripted_behavior( "zm_melee_stand", "melee_anim" ); + } +#/ +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_ai_mechz_ffotd.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_ai_mechz_ffotd.gsc new file mode 100644 index 0000000..b25d50a --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_ai_mechz_ffotd.gsc @@ -0,0 +1,40 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; + +mechz_init_start() +{ + +} + +mechz_init_end() +{ + +} + +spawn_start() +{ + self.not_interruptable = 1; +} + +spawn_end() +{ + self.not_interruptable = 0; +} + +mechz_round_tracker_start() +{ + +} + +mechz_round_tracker_loop_start() +{ + +} + +mechz_round_tracker_loop_end() +{ + +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_ai_mechz_ft.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_ai_mechz_ft.gsc new file mode 100644 index 0000000..eded6b0 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_ai_mechz_ft.gsc @@ -0,0 +1,556 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\zombies\_zm_zonemgr; +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\zm_tomb_tank; +#include maps\mp\zombies\_zm_ai_mechz_dev; +#include maps\mp\zombies\_zm_ai_mechz; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\_visionset_mgr; + +init_flamethrower_triggers() +{ + flag_wait( "initial_players_connected" ); + level.flamethrower_trigger_array = getentarray( "flamethrower_trigger", "script_noteworthy" ); + assert( isdefined( level.flamethrower_trigger_array ) && level.flamethrower_trigger_array.size >= 4 ); + + for ( i = 0; i < level.flamethrower_trigger_array.size; i++ ) + level.flamethrower_trigger_array[i] enablelinkto(); +} + +mechz_flamethrower_initial_setup() +{ + self endon( "death" ); + + if ( isdefined( self.flamethrower_trigger ) ) + self release_flamethrower_trigger(); + + self.flamethrower_trigger = get_flamethrower_trigger(); + + if ( !isdefined( self.flamethrower_trigger ) ) + { +/# + println( "Error: No free flamethrower triggers! Make sure you haven't spawned more than 4 mech zombies" ); +#/ + return; + } + + self.flamethrower_trigger.origin = self gettagorigin( "tag_flamethrower_FX" ); + self.flamethrower_trigger.angles = self gettagangles( "tag_flamethrower_FX" ); + self.flamethrower_trigger linkto( self, "tag_flamethrower_FX" ); + self thread mechz_watch_for_flamethrower_damage(); +} + +get_flamethrower_trigger() +{ + for ( i = 0; i < level.flamethrower_trigger_array.size; i++ ) + { + if ( !( isdefined( level.flamethrower_trigger_array[i].in_use ) && level.flamethrower_trigger_array[i].in_use ) ) + { + level.flamethrower_trigger_array[i].in_use = 1; + level.flamethrower_trigger_array[i].original_position = level.flamethrower_trigger_array[i].origin; + return level.flamethrower_trigger_array[i]; + } + } + + return undefined; +} + +release_flamethrower_trigger() +{ + if ( !isdefined( self.flamethrower_trigger ) ) + return; + + self.flamethrower_trigger.in_use = 0; + self.flamethrower_trigger unlink(); + self.flamethrower_trigger.origin = self.flamethrower_trigger.original_position; + self.flamethrower_linked = 0; + self.flamethrower_trigger = undefined; +} + +mechz_flamethrower_dist_watcher() +{ + self endon( "kill_ft" ); + wait 0.5; + + while ( true ) + { + if ( !isdefined( self.favoriteenemy ) || !is_player_valid( self.favoriteenemy, 1, 1 ) || distancesquared( self.origin, self.favoriteenemy.origin ) > 50000 ) + { + self notify( "stop_ft" ); + return; + } + + wait 0.05; + } +} + +mechz_flamethrower_arc_watcher() +{ + self endon( "death" ); + self endon( "kill_ft" ); + self endon( "stop_ft" ); + aim_anim = undefined; + + while ( true ) + { + old_anim = aim_anim; + aim_anim = mechz_get_aim_anim( "zm_flamethrower", self.favoriteenemy.origin, 26 ); + self.curr_aim_anim = aim_anim; + + if ( !isdefined( aim_anim ) ) + { + self notify( "stop_ft" ); + return; + } + + if ( !isdefined( old_anim ) || old_anim != aim_anim ) + self notify( "arc_change" ); + + wait 0.05; + } +} + +mechz_play_flamethrower_aim() +{ + self endon( "death" ); + self endon( "kill_ft" ); + self endon( "stop_ft" ); + self endon( "arc_change" ); + + if ( isdefined( self.curr_aim_anim ) ) + { + self stopanimscripted(); + self animscripted( self.origin, self.angles, self.curr_aim_anim ); + self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" ); + } + else + wait 0.05; +} + +mechz_flamethrower_aim() +{ + self endon( "death" ); + self endon( "kill_ft" ); + self endon( "stop_ft" ); + + self waittillmatch( "flamethrower_anim", "end" ); + + self thread mechz_flamethrower_dist_watcher(); + self thread mechz_flamethrower_arc_watcher(); + aim_anim = undefined; + + while ( true ) + self mechz_play_flamethrower_aim(); +} + +mechz_flamethrower_tank_sweep() +{ + self endon( "death" ); + self endon( "kill_ft" ); + self endon( "stop_ft" ); + + while ( true ) + { + self stopanimscripted(); + self.angles = vectortoangles( level.vh_tank.origin - self.origin ); + self animscripted( self.origin, self.angles, "zm_flamethrower_sweep_up" ); + self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" ); + + if ( level.vh_tank ent_flag( "tank_moving" ) ) + break; + + a_players_on_tank = get_players_on_tank( 1 ); + + if ( !a_players_on_tank.size ) + break; + } + + self notify( "stop_ft" ); +} + +mechz_stop_firing_watcher() +{ + self endon( "death" ); + self endon( "kill_ft" ); + self endon( "flamethrower_complete" ); + + self waittillmatch( "flamethrower_anim", "stop_ft" ); + + self.firing = 0; +} + +mechz_watch_for_flamethrower_damage() +{ + self endon( "death" ); + + while ( true ) + { + self waittillmatch( "flamethrower_anim", "start_ft" ); + + self.firing = 1; + self thread mechz_stop_firing_watcher(); + + while ( isdefined( self.firing ) && self.firing ) + { + do_tank_sweep_auto_damage = isdefined( self.doing_tank_sweep ) && self.doing_tank_sweep && !level.vh_tank ent_flag( "tank_moving" ); + players = getplayers(); + + for ( i = 0; i < players.size; i++ ) + { + if ( !( isdefined( players[i].is_burning ) && players[i].is_burning ) ) + { + if ( do_tank_sweep_auto_damage && players[i] entity_on_tank() || players[i] istouching( self.flamethrower_trigger ) ) + players[i] thread player_flame_damage(); + } + } + + zombies = getaispeciesarray( "axis", "all" ); + + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz ) + continue; + + if ( isdefined( zombies[i].on_fire ) && zombies[i].on_fire ) + continue; + + if ( do_tank_sweep_auto_damage && zombies[i] entity_on_tank() || zombies[i] istouching( self.flamethrower_trigger ) ) + { + zombies[i].on_fire = 1; + zombies[i] promote_to_explosive(); + } + } + + wait 0.1; + } + } +} + +player_flame_damage() +{ + self endon( "zombified" ); + self endon( "death" ); + self endon( "disconnect" ); + n_player_dmg = 30; + n_jugga_dmg = 45; + n_burn_time = 1.5; + + if ( isdefined( self.is_zombie ) && self.is_zombie ) + return; + + self thread player_stop_burning(); + + if ( !isdefined( self.is_burning ) && is_player_valid( self, 1, 0 ) ) + { + self.is_burning = 1; + maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, n_burn_time, level.zm_transit_burn_max_duration ); + self notify( "burned" ); + + if ( !self hasperk( "specialty_armorvest" ) ) + self dodamage( n_player_dmg, self.origin ); + else + self dodamage( n_jugga_dmg, self.origin ); + + wait 0.5; + self.is_burning = undefined; + } +} + +player_stop_burning() +{ + self notify( "player_stop_burning" ); + self endon( "player_stop_burning" ); + self endon( "death_or_disconnect" ); + + self waittill( "zombified" ); + + self notify( "stop_flame_damage" ); + maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_transit_burn", self ); +} + +zombie_burning_fx() +{ + self endon( "death" ); + self endon( "stop_flame_damage" ); + + while ( true ) + { + if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_torso"] ) ) + { + if ( !self.isdog ) + playfxontag( level._effect["character_fire_death_torso"], self, "J_SpineLower" ); + } + + if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_sm"] ) ) + { + wait 1; + tagarray = []; + + if ( randomint( 2 ) == 0 ) + { + tagarray[0] = "J_Elbow_LE"; + tagarray[1] = "J_Elbow_RI"; + tagarray[2] = "J_HEAD"; + } + else + { + tagarray[0] = "J_Wrist_RI"; + tagarray[1] = "J_Wrist_LE"; + tagarray[2] = "J_HEAD"; + } + + tagarray = array_randomize( tagarray ); + self thread network_safe_play_fx_on_tag( "flamethrower", 2, level._effect["character_fire_death_sm"], self, tagarray[0] ); + } + + wait 12; + } +} + +zombie_burning_audio() +{ + self playloopsound( "zmb_fire_loop" ); + self waittill_any( "death", "stop_flame_damage" ); + + if ( isdefined( self ) && isalive( self ) ) + self stoploopsound( 0.25 ); +} + +zombie_burning_dmg() +{ + self endon( "death" ); + self endon( "stop_flame_damage" ); + damageradius = 25; + damage = 2; + + while ( true ) + { + eyeorigin = self geteye(); + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( is_player_valid( players[i], 1, 0 ) ) + { + playereye = players[i] geteye(); + + if ( distancesquared( eyeorigin, playereye ) < damageradius * damageradius ) + { + players[i] dodamage( damage, self.origin, self ); + players[i] notify( "burned" ); + } + } + } + + wait 1.0; + } +} + +promote_to_explosive() +{ + self endon( "death" ); + self thread zombie_burning_audio(); + self thread zombie_burning_fx(); + self thread explode_on_death(); + self thread zombie_burning_dmg(); + self thread on_fire_timeout(); +} + +explode_on_death() +{ + self endon( "stop_flame_damage" ); + + self waittill( "death" ); + + if ( !isdefined( self ) ) + return; + + tag = "J_SpineLower"; + + if ( isdefined( self.animname ) && self.animname == "zombie_dog" ) + tag = "tag_origin"; + + if ( is_mature() ) + { + if ( isdefined( level._effect["zomb_gib"] ) ) + playfx( level._effect["zomb_gib"], self gettagorigin( tag ) ); + } + else if ( isdefined( level._effect["spawn_cloud"] ) ) + playfx( level._effect["spawn_cloud"], self gettagorigin( tag ) ); + + self radiusdamage( self.origin, 128, 30, 15, undefined, "MOD_EXPLOSIVE" ); + self ghost(); + + if ( isdefined( self.isdog ) && self.isdog ) + self hide(); + else + self delay_thread( 1, ::self_delete ); +} + +on_fire_timeout() +{ + self endon( "death" ); + wait 12; + + if ( isdefined( self ) && isalive( self ) ) + { + self.is_on_fire = 0; + self notify( "stop_flame_damage" ); + } +} + +should_do_flamethrower_attack() +{ + assert( isdefined( self.favoriteenemy ) ); +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\tMZ: Checking should flame\\n" ); +#/ + if ( isdefined( self.disable_complex_behaviors ) && self.disable_complex_behaviors ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\t\\tMZ: Not doing flamethrower because doing force aggro\\n" ); +#/ + return false; + } + + if ( isdefined( self.not_interruptable ) && self.not_interruptable ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\t\\tMZ: Not doing flamethrower because another behavior has set not_interruptable\\n" ); +#/ + return false; + } + + if ( !self mechz_check_in_arc( 26 ) ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\t\\tMZ: Not doing flamethrower because target is not in front arc\\n" ); +#/ + return false; + } + + if ( isdefined( self.last_flamethrower_time ) && gettime() - self.last_flamethrower_time < level.mechz_flamethrower_cooldown_time ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\t\\tMZ: Not doing flamethrower because it is still on cooldown\\n" ); +#/ + return false; + } + + n_dist_sq = distancesquared( self.origin, self.favoriteenemy.origin ); + + if ( n_dist_sq < 10000 || n_dist_sq > 50000 ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\t\\tMZ: Not doing flamethrower because target is not in range\\n" ); +#/ + return false; + } + + b_cansee = bullettracepassed( self.origin + vectorscale( ( 0, 0, 1 ), 36.0 ), self.favoriteenemy.origin + vectorscale( ( 0, 0, 1 ), 36.0 ), 0, undefined ); + + if ( !b_cansee ) + { +/# + if ( getdvarint( _hash_E7121222 ) > 1 ) + println( "\\n\\t\\tMZ: Not doing flamethrower because cannot see target\\n" ); +#/ + return false; + } + + return true; +} + +#using_animtree("mechz_claw"); + +mechz_do_flamethrower_attack( tank_sweep ) +{ + self endon( "death" ); + self endon( "kill_ft" ); +/# + if ( getdvarint( _hash_E7121222 ) > 0 ) + println( "\\n\\tMZ: Doing Flamethrower Attack\\n" ); +#/ + self thread mechz_stop_basic_find_flesh(); + self.ai_state = "flamethrower_attack"; + self setgoalpos( self.origin ); + self clearanim( %root, 0.2 ); + self.last_flamethrower_time = gettime(); + self thread mechz_kill_flamethrower_watcher(); + + if ( !isdefined( self.flamethrower_trigger ) ) + self mechz_flamethrower_initial_setup(); + + n_nearby_enemies = 0; + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( distance2dsquared( player.origin, self.favoriteenemy.origin ) < 10000 ) + n_nearby_enemies++; + } + + if ( isdefined( tank_sweep ) && tank_sweep ) + { + self.doing_tank_sweep = 1; + self thread mechz_flamethrower_tank_sweep(); + } + else if ( randomint( 100 ) < level.mechz_ft_sweep_chance && n_nearby_enemies > 1 ) + { + self.doing_ft_sweep = 1; + self animscripted( self.origin, self.angles, "zm_flamethrower_sweep" ); + self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" ); + } + else + { + self animscripted( self.origin, self.angles, "zm_flamethrower_aim_start" ); + self thread mechz_flamethrower_aim(); + self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" ); + } + + self orientmode( "face default" ); + + if ( isdefined( self.doing_ft_sweep ) && self.doing_ft_sweep ) + self.doing_ft_sweep = 0; + else + { + self.cant_melee = 1; + + self waittill( "stop_ft" ); + + self mechz_flamethrower_cleanup(); + wait 0.5; + self stopanimscripted(); + return; + } + + self mechz_flamethrower_cleanup(); +} + +mechz_kill_flamethrower_watcher() +{ + self endon( "flamethrower_complete" ); + self waittill_either( "kill_ft", "death" ); + self mechz_flamethrower_cleanup(); +} + +mechz_flamethrower_cleanup() +{ + self.fx_field &= ~64; + self setclientfield( "mechz_fx", self.fx_field ); + self.firing = 0; + self.doing_tank_sweep = 0; + self.cant_melee = 0; + self notify( "flamethrower_complete" ); +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_ai_quadrotor.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_ai_quadrotor.gsc new file mode 100644 index 0000000..8c7e0e3 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_ai_quadrotor.gsc @@ -0,0 +1,1257 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include animscripts\utility; +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\_quadrotor; +#include maps\_vehicle; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zm_tomb_vo; +#include maps\mp\zombies\_zm_laststand; + +precache() +{ + precachemodel( "veh_t6_dlc_zm_quadrotor" ); + precachevehicle( "heli_quadrotor_zm" ); + precachevehicle( "heli_quadrotor_upgraded_zm" ); +} + +init() +{ + level._effect["quadrotor_nudge"] = loadfx( "destructibles/fx_quadrotor_nudge01" ); + level._effect["qd_revive"] = loadfx( "maps/zombie_tomb/fx_tomb_veh_quadrotor_revive_health" ); + maps\mp\zombies\_zm_equipment::register_equipment( "equip_dieseldrone_zm", &"ZM_TOMB_DIHS", &"ZM_TOMB_DIHO", "riotshield_zm_icon", "riotshield" ); +} + +quadrotor_dealt_no_damage_to_player( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + if ( isdefined( sweapon ) && sweapon == "quadrotorturret_zm" ) + return 0; + + return idamage; +} + +quadrotor_think() +{ + self enableaimassist(); + self sethoverparams( 5.0, 60.0, 40 ); + self setneargoalnotifydist( 64 ); + self.flyheight = 128; + self setvehicleavoidance( 1 ); + self.vehfovcosine = 0; + self.vehfovcosinebusy = 0.574; + self.vehaircraftcollisionenabled = 1; + + if ( !isdefined( self.goalradius ) ) + self.goalradius = 128; + + if ( !isdefined( self.goalpos ) ) + self.goalpos = self.origin; + + self thread quadrotor_death(); + self thread quadrotor_damage(); + quadrotor_start_ai(); + self thread quadrotor_set_team( "allies" ); +} + +follow_ent( e_followee ) +{ + level endon( "end_game" ); + self endon( "death" ); + + while ( isdefined( e_followee ) ) + { + if ( !self.returning_home ) + { + v_facing = e_followee getplayerangles(); + v_forward = anglestoforward( ( 0, v_facing[1], 0 ) ); + candidate_goalpos = e_followee.origin + v_forward * 128; + trace_goalpos = physicstrace( self.origin, candidate_goalpos ); + + if ( trace_goalpos["position"] == candidate_goalpos ) + self.goalpos = e_followee.origin + v_forward * 128; + else + self.goalpos = e_followee.origin + vectorscale( ( 0, 0, 1 ), 60.0 ); + } + + wait( randomfloatrange( 1.0, 2.0 ) ); + } +} + +quadrotor_start_ai() +{ + self.goalpos = self.origin; + self.returning_home = 0; + quadrotor_main(); +} + +quadrotor_main() +{ + self thread quadrotor_blink_lights(); + self thread quadrotor_fireupdate(); + self thread quadrotor_movementupdate(); + self thread quadrotor_collision(); + self thread quadrotor_ambient_vo(); + self thread quadrotor_watch_for_game_end(); +} + +quadrotor_ambient_vo() +{ + level endon( "end_game" ); + self endon( "death" ); + spawn_lines = []; + spawn_lines[0] = "vox_maxi_drone_standby_0"; + spawn_lines[1] = "vox_maxi_drone_hover_0"; + spawn_lines[2] = "vox_maxi_drone_holding_0"; + vox_line = spawn_lines[randomintrange( 0, spawn_lines.size )]; + self thread maps\mp\zm_tomb_vo::maxissay( vox_line, self ); + current_ambient_line_cooldown = randomintrange( 10000, 30000 ); + wait( current_ambient_line_cooldown ); + + while ( true ) + { + current_time = gettime(); + + if ( current_time - self.time_last_spoke_attack_line > current_ambient_line_cooldown ) + { + if ( current_time - self.time_last_spoke_killed_line > current_ambient_line_cooldown ) + { + vox_line = "vox_maxi_drone_ambient_" + randomintrange( 0, 10 ) + "_0"; + self thread maps\mp\zm_tomb_vo::maxissay( vox_line, self ); + current_ambient_line_cooldown = randomintrange( 10000, 30000 ); + } + } + + wait 0.1; + } +} + +quadrotor_fireupdate() +{ + level endon( "end_game" ); + self endon( "death" ); + current_time = gettime(); + self.time_last_spoke_attack_line = current_time; + self.time_last_spoke_killed_line = current_time; + current_attack_line_cooldown = 10000; + current_killed_line_cooldown = 10000; + + while ( true ) + { + if ( isdefined( self.enemy ) && self vehcansee( self.enemy ) ) + { + dist_squared = distancesquared( self.enemy.origin, self.origin ); + + if ( dist_squared < 384 * 384 && dist_squared > 96 * 96 ) + { + self setturrettargetent( self.enemy ); + current_time = gettime(); + + if ( current_time - self.time_last_spoke_attack_line > current_attack_line_cooldown ) + { + vox_line = "vox_maxi_drone_attacking_" + randomintrange( 0, 3 ); + self thread maps\mp\zm_tomb_vo::maxissay( vox_line, self ); + self.time_last_spoke_attack_line = current_time; + current_attack_line_cooldown = randomintrange( 10000, 30000 ); + } + + self quadrotor_fire_for_time( randomfloatrange( 1.5, 3.0 ) ); + } + + if ( isdefined( self.enemy ) && isai( self.enemy ) ) + wait( randomfloatrange( 0.5, 1.0 ) ); + else + { + current_time = gettime(); + + if ( current_time - self.time_last_spoke_killed_line > current_killed_line_cooldown ) + { + vox_line = "vox_maxi_drone_killed_" + randomintrange( 0, 4 ); + self maps\mp\zm_tomb_vo::maxissay( vox_line, self ); + do_thank_maxis = randomintrange( 0, 2 ); + + if ( do_thank_maxis > 0 ) + { + players = getplayers(); + player = players[randomintrange( 0, players.size )]; + player thread do_player_general_vox( "quadrotor", "kill_drone", undefined, 100 ); + } + + self.time_last_spoke_killed_line = current_time; + current_killed_line_cooldown = randomintrange( 10000, 30000 ); + } + + wait( randomfloatrange( 0.5, 1.5 ) ); + } + } + else + { + current_time = gettime(); + + if ( current_time - self.time_last_spoke_attack_line > current_attack_line_cooldown ) + { + vox_line = "vox_maxi_drone_scan_0"; + self thread maps\mp\zm_tomb_vo::maxissay( vox_line, self ); + self.time_last_spoke_attack_line = current_time; + current_attack_line_cooldown = randomintrange( 10000, 30000 ); + } + + wait 0.4; + } + } +} + +quadrotor_watch_for_game_end() +{ + self endon( "death" ); + + level waittill( "end_game" ); + + if ( isdefined( self ) ) + { + playfx( level._effect["tesla_elec_kill"], self.origin ); + self playsound( "zmb_qrdrone_leave" ); + self delete(); +/# + iprintln( "Maxis deleted" ); +#/ + } +} + +quadrotor_check_move( position ) +{ + results = physicstrace( self.origin, position, ( -15, -15, -5 ), ( 15, 15, 5 ) ); + + if ( results["fraction"] == 1 ) + return true; + + return false; +} + +quadrotor_adjust_goal_for_enemy_height( goalpos ) +{ + if ( isdefined( self.enemy ) ) + { + if ( isai( self.enemy ) ) + offset = 45; + else + offset = -100; + + if ( self.enemy.origin[2] + offset > goalpos[2] ) + { + goal_z = self.enemy.origin[2] + offset; + + if ( goal_z > goalpos[2] + 400 ) + goal_z = goalpos[2] + 400; + + results = physicstrace( goalpos, ( goalpos[0], goalpos[1], goal_z ), ( -15, -15, -5 ), ( 15, 15, 5 ) ); + + if ( results["fraction"] == 1 ) + goalpos = ( goalpos[0], goalpos[1], goal_z ); + } + } + + return goalpos; +} + +make_sure_goal_is_well_above_ground( pos ) +{ + start = pos + ( 0, 0, self.flyheight ); + end = pos + ( 0, 0, self.flyheight * -1 ); + trace = bullettrace( start, end, 0, self, 0, 0 ); + end = trace["position"]; + pos = end + ( 0, 0, self.flyheight ); + z = self getheliheightlockheight( pos ); + pos = ( pos[0], pos[1], z ); + return pos; +} + +waittill_pathing_done() +{ + level endon( "end_game" ); + self endon( "death" ); + self endon( "change_state" ); + + if ( self.vehonpath ) + self waittill_any( "near_goal", "reached_end_node", "force_goal" ); +} + +quadrotor_movementupdate() +{ + level endon( "end_game" ); + self endon( "death" ); + self endon( "change_state" ); + assert( isalive( self ) ); + a_powerups = []; + old_goalpos = self.goalpos; + self.goalpos = self make_sure_goal_is_well_above_ground( self.goalpos ); + + if ( !self.vehonpath ) + { + if ( isdefined( self.attachedpath ) ) + self script_delay(); + else if ( distancesquared( self.origin, self.goalpos ) < 10000 && ( self.goalpos[2] > old_goalpos[2] + 10 || self.origin[2] + 10 < self.goalpos[2] ) ) + { + self setvehgoalpos( self.goalpos, 1, 2, 0 ); + self pathvariableoffset( vectorscale( ( 0, 0, 1 ), 20.0 ), 2 ); + self waittill_any_or_timeout( 4, "near_goal", "force_goal" ); + } + else + { + goalpos = self quadrotor_get_closest_node(); + self setvehgoalpos( goalpos, 1, 2, 0 ); + self waittill_any_or_timeout( 2, "near_goal", "force_goal" ); + } + } + + assert( isalive( self ) ); + self setvehicleavoidance( 1 ); + goalfailures = 0; + + while ( true ) + { + self waittill_pathing_done(); + self thread quadrotor_blink_lights(); + + if ( self.returning_home ) + { + self setneargoalnotifydist( 64 ); + self setheliheightlock( 0 ); + is_valid_exit_path_found = 0; + quadrotor_table = level.quadrotor_status.pickup_trig.model; + is_valid_exit_path_found = self setvehgoalpos( quadrotor_table.origin, 1, 2, 1 ); + + if ( is_valid_exit_path_found ) + { + self notify( "attempting_return" ); + self waittill_any( "near_goal", "force_goal", "reached_end_node", "return_timeout" ); + continue; + } + + self setneargoalnotifydist( 8 ); + str_zone = level.quadrotor_status.str_zone; +/# + iprintln( "EXIT ZONE: " + str_zone ); +#/ + switch ( str_zone ) + { + case "zone_nml_9": + exit_path = getvehiclenode( "quadrotor_nml_exit_path", "targetname" ); + is_valid_exit_path_found = self setvehgoalpos( exit_path.origin, 1, 2, 1 ); + break; + case "zone_bunker_5a": + if ( flag( "activate_zone_nml" ) ) + { + exit_path = getvehiclenode( "quadrotor_bunker_north_exit_path", "targetname" ); + is_valid_exit_path_found = self setvehgoalpos( exit_path.origin, 1, 2, 1 ); + } + else + { + + } + + if ( !is_valid_exit_path_found ) + { + if ( flag( "activate_zone_bunker_3b" ) ) + { + exit_path = getvehiclenode( "quadrotor_bunker_west_exit_path", "targetname" ); + is_valid_exit_path_found = self setvehgoalpos( exit_path.origin, 1, 2, 1 ); + } + else + { + + } + } + + if ( !is_valid_exit_path_found ) + { + if ( flag( "activate_zone_bunker_4b" ) ) + { + exit_path = getvehiclenode( "quadrotor_bunker_south_exit_path", "targetname" ); + is_valid_exit_path_found = self setvehgoalpos( exit_path.origin, 1, 2, 1 ); + } + else + { + + } + } + + break; + case "zone_village_2": + break; + } + + if ( is_valid_exit_path_found ) + { + self waittill_any( "near_goal", "force_goal" ); + self cancelaimove(); + self clearvehgoalpos(); + self pathvariableoffsetclear(); + self pathfixedoffsetclear(); + self clearlookatent(); + self setvehicleavoidance( 0 ); + self.drivepath = 1; + self attachpath( exit_path ); + self pathvariableoffset( vectorscale( ( 1, 1, 1 ), 8.0 ), randomintrange( 1, 3 ) ); + self drivepath( exit_path ); + wait 1; + self notify( "attempting_return" ); + } + else + self thread quadrotor_escape_into_air(); + + self waittill_any( "near_goal", "force_goal", "reached_end_node", "return_timeout" ); + } + + if ( !isdefined( self.revive_target ) ) + { + player = self player_in_last_stand_within_range( 500 ); + + if ( isdefined( player ) ) + { + self.revive_target = player; + player.quadrotor_revive = 1; + vox_line = "vox_maxi_drone_revive_" + randomintrange( 0, 5 ); + maps\mp\zm_tomb_vo::maxissay( vox_line, self ); + } + } + + if ( isdefined( self.revive_target ) ) + { + origin = self.revive_target.origin; + origin = ( origin[0], origin[1], origin[2] + 150 ); + z = self getheliheightlockheight( origin ); + origin = ( origin[0], origin[1], z ); + + if ( self setvehgoalpos( origin, 1, 2, 1 ) ) + { + self waittill_any( "near_goal", "force_goal", "reached_end_node" ); + level thread watch_for_fail_revive( self ); + wait 1; + + if ( isdefined( self.revive_target ) && self.revive_target maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + playfxontag( level._effect["staff_charge"], self.revive_target, "tag_origin" ); + self.revive_target notify( "remote_revive", self.player_owner ); + self.revive_target do_player_general_vox( "quadrotor", "rspnd_drone_revive", undefined, 100 ); + self.player_owner notify( "revived_player_with_quadrotor" ); + } + + self.revive_target = undefined; + self setvehgoalpos( origin, 1 ); + wait 1; + continue; + } + else + player.quadrotor_revive = undefined; + + wait 0.1; + } + + a_powerups = []; + + if ( level.active_powerups.size > 0 && isdefined( self.player_owner ) ) + a_powerups = get_array_of_closest( self.player_owner.origin, level.active_powerups, undefined, undefined, 500 ); + + if ( a_powerups.size > 0 ) + { + b_got_powerup = 0; + + foreach ( powerup in a_powerups ) + { + if ( self setvehgoalpos( powerup.origin, 1, 2, 1 ) ) + { + self waittill_any( "near_goal", "force_goal", "reached_end_node" ); + + if ( isdefined( powerup ) ) + { + self.player_owner.ignore_range_powerup = powerup; + b_got_powerup = 1; + } + + wait 1; + break; + } + } + + if ( b_got_powerup ) + continue; + + wait 0.1; + } + + a_special_items = getentarray( "quad_special_item", "script_noteworthy" ); + + if ( level.n_ee_medallions > 0 && isdefined( self.player_owner ) ) + { + e_special_item = getclosest( self.player_owner.origin, a_special_items, 500 ); + + if ( isdefined( e_special_item ) ) + { + self setneargoalnotifydist( 4 ); + + if ( isdefined( e_special_item.target ) ) + { + s_start_pos = getstruct( e_special_item.target, "targetname" ); + self setvehgoalpos( s_start_pos.origin, 1, 0, 1 ); + self waittill_any( "near_goal", "force_goal", "reached_end_node" ); + } + + self setvehgoalpos( e_special_item.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), 1, 0, 1 ); + self waittill_any( "near_goal", "force_goal", "reached_end_node" ); + wait 1; + playfx( level._effect["staff_charge"], e_special_item.origin ); + e_special_item hide(); + level.n_ee_medallions--; + level notify( "quadrotor_medallion_found", self ); + + if ( isdefined( e_special_item.target ) ) + { + s_start_pos = getstruct( e_special_item.target, "targetname" ); + self setvehgoalpos( s_start_pos.origin, 1, 0, 1 ); + self waittill_any( "near_goal", "force_goal", "reached_end_node" ); + } + + if ( level.n_ee_medallions == 0 ) + { + s_mg_spawn = getstruct( "mgspawn", "targetname" ); + self setvehgoalpos( s_mg_spawn.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), 1, 0, 1 ); + self waittill_any( "near_goal", "force_goal", "reached_end_node" ); + wait 1; + playfx( level._effect["staff_charge"], s_mg_spawn.origin ); + e_special_item playsound( "zmb_perks_packa_ready" ); + flag_set( "ee_medallions_collected" ); + } + + e_special_item delete(); + self setneargoalnotifydist( 30 ); + self setvehgoalpos( self.origin, 1 ); + } + } + + if ( isdefined( level.quadrotor_custom_behavior ) ) + self [[ level.quadrotor_custom_behavior ]](); + + goalpos = quadrotor_find_new_position(); + + if ( self setvehgoalpos( goalpos, 1, 2, 1 ) ) + { + goalfailures = 0; + + if ( isdefined( self.goal_node ) ) + self.goal_node.quadrotor_claimed = 1; + + if ( isdefined( self.enemy ) && self vehcansee( self.enemy ) ) + { + if ( randomint( 100 ) > 50 ) + self setlookatent( self.enemy ); + } + + self waittill_any_timeout( 12, "near_goal", "force_goal", "reached_end_node" ); + + if ( isdefined( self.enemy ) && self vehcansee( self.enemy ) ) + { + self setlookatent( self.enemy ); + wait( randomfloatrange( 1, 4 ) ); + self clearlookatent(); + } + + if ( isdefined( self.goal_node ) ) + self.goal_node.quadrotor_claimed = undefined; + } + else + { + goalfailures++; + + if ( isdefined( self.goal_node ) ) + self.goal_node.quadrotor_fails = 1; + + if ( goalfailures == 1 ) + { + wait 0.5; + continue; + } + else if ( goalfailures == 2 ) + goalpos = self.origin; + else if ( goalfailures == 3 ) + { + goalpos = self quadrotor_get_closest_node(); + self setvehgoalpos( goalpos, 1 ); + + self waittill( "near_goal" ); + } + else if ( goalfailures > 3 ) + { +/# + println( "WARNING: Quadrotor can't find path to goal over 4 times." + self.origin + " " + goalpos ); + line( self.origin, goalpos, ( 1, 1, 1 ), 1, 100 ); +#/ + self.goalpos = make_sure_goal_is_well_above_ground( goalpos ); + } + + old_goalpos = goalpos; + offset = ( randomfloatrange( -50, 50 ), randomfloatrange( -50, 50 ), randomfloatrange( 50, 150 ) ); + goalpos += offset; + goalpos = quadrotor_adjust_goal_for_enemy_height( goalpos ); + + if ( self quadrotor_check_move( goalpos ) ) + { + self setvehgoalpos( goalpos, 1 ); + self waittill_any( "near_goal", "force_goal", "start_vehiclepath" ); + wait( randomfloatrange( 1, 3 ) ); + + if ( !self.vehonpath ) + { + self setvehgoalpos( old_goalpos, 1 ); + self waittill_any( "near_goal", "force_goal", "start_vehiclepath" ); + } + } + + wait 0.5; + } + } +} + +quadrotor_escape_into_air() +{ +/# + iprintln( "couldn't path to exit" ); +#/ + self.goalpos = self.origin + vectorscale( ( 0, 0, 1 ), 2048.0 ); + can_path_straight_up = self setvehgoalpos( self.goalpos, 1, 0, 1 ); + trace_goalpos = physicstrace( self.origin, self.goalpos ); + + if ( can_path_straight_up && trace_goalpos["position"] == self.goalpos ) + { +/# + iprintln( "I can go straight up" ); +#/ + self notify( "attempting_return" ); + } + else + { +/# + iprintln( "Failed pathing straight up" ); +#/ + self notify( "attempting_return" ); + playfx( level._effect["tesla_elec_kill"], self.origin ); + self playsound( "zmb_qrdrone_leave" ); + self delete(); + level notify( "drone_available" ); + } +} + +quadrotor_get_closest_node() +{ + nodes = getnodesinradiussorted( self.origin, 200, 0, 500, "Path" ); + + if ( nodes.size == 0 ) + nodes = getnodesinradiussorted( self.goalpos, 3000, 0, 2000, "Path" ); + + foreach ( node in nodes ) + { + if ( node.type == "BAD NODE" || !node has_spawnflag( 2097152 ) ) + continue; + + return make_sure_goal_is_well_above_ground( node.origin ); + } + + return self.origin; +} + +quadrotor_find_new_position() +{ + if ( !isdefined( self.goalpos ) ) + self.goalpos = self.origin; + + origin = self.goalpos; + nodes = getnodesinradius( self.goalpos, self.goalradius, 0, self.flyheight + 300, "Path" ); + + if ( nodes.size == 0 ) + nodes = getnodesinradius( self.goalpos, self.goalradius + 1000, 0, self.flyheight + 1000, "Path" ); + + if ( nodes.size == 0 ) + nodes = getnodesinradius( self.goalpos, self.goalradius + 5000, 0, self.flyheight + 4000, "Path" ); + + best_node = undefined; + best_score = 0; + + foreach ( node in nodes ) + { + if ( node.type == "BAD NODE" || !node has_spawnflag( 2097152 ) ) + continue; + + if ( isdefined( node.quadrotor_fails ) || isdefined( node.quadrotor_claimed ) ) + score = randomfloat( 30 ); + else + score = randomfloat( 100 ); + + if ( score > best_score ) + { + best_score = score; + best_node = node; + } + } + + if ( isdefined( best_node ) ) + { + origin = best_node.origin + ( 0, 0, self.flyheight + randomfloatrange( -30, 40 ) ); + z = self getheliheightlockheight( origin ); + origin = ( origin[0], origin[1], z ); + self.goal_node = best_node; + } + + return origin; +} + +quadrotor_teleport_to_nearest_node() +{ + self.origin = self quadrotor_get_closest_node(); +} + +quadrotor_damage() +{ + self endon( "crash_done" ); + + while ( isdefined( self ) ) + { + self waittill( "damage", damage, dir, point, type ); + + if ( isdefined( self.off ) ) + continue; + + if ( type == "MOD_EXPLOSIVE" || type == "MOD_GRENADE_SPLASH" || type == "MOD_PROJECTILE_SPLASH" ) + { + self setvehvelocity( self.velocity + vectornormalize( dir ) * 300 ); + ang_vel = self getangularvelocity(); + ang_vel += ( randomfloatrange( -300, 300 ), randomfloatrange( -300, 300 ), randomfloatrange( -300, 300 ) ); + self setangularvelocity( ang_vel ); + } + else + { + ang_vel = self getangularvelocity(); + yaw_vel = randomfloatrange( -320, 320 ); + + if ( yaw_vel < 0 ) + yaw_vel -= 150; + else + yaw_vel += 150; + + ang_vel += ( randomfloatrange( -150, 150 ), yaw_vel, randomfloatrange( -150, 150 ) ); + self setangularvelocity( ang_vel ); + } + + wait 0.3; + } +} + +quadrotor_cleanup_fx() +{ + if ( isdefined( self.stun_fx ) ) + self.stun_fx delete(); +} + +quadrotor_death() +{ + wait 0.1; + self notify( "nodeath_thread" ); + + self waittill( "death", attacker, damagefromunderneath, weaponname, point, dir ); + + self notify( "nodeath_thread" ); + + if ( isdefined( self.goal_node ) && isdefined( self.goal_node.quadrotor_claimed ) ) + self.goal_node.quadrotor_claimed = undefined; + + if ( isdefined( self.delete_on_death ) ) + { + if ( isdefined( self ) ) + { + self quadrotor_cleanup_fx(); + self delete(); + level.maxis_quadrotor = undefined; + } + + return; + } + + if ( !isdefined( self ) ) + return; + + self endon( "death" ); + self disableaimassist(); + self death_fx(); + self thread death_radius_damage(); + self thread set_death_model( self.deathmodel, self.modelswapdelay ); + self thread quadrotor_crash_movement( attacker, dir ); + self quadrotor_cleanup_fx(); + + self waittill( "crash_done" ); + + self delete(); + level.maxis_quadrotor = undefined; +} + +death_fx() +{ + if ( isdefined( self.deathfx ) ) + playfxontag( self.deathfx, self, self.deathfxtag ); + + self playsound( "veh_qrdrone_sparks" ); +} + +quadrotor_crash_movement( attacker, hitdir ) +{ + level endon( "end_game" ); + self endon( "crash_done" ); + self endon( "death" ); + self cancelaimove(); + self clearvehgoalpos(); + self clearlookatent(); + self setphysacceleration( vectorscale( ( 0, 0, -1 ), 800.0 ) ); + self.vehcheckforpredictedcrash = 1; + + if ( !isdefined( hitdir ) ) + hitdir = ( 1, 0, 0 ); + + side_dir = vectorcross( hitdir, ( 0, 0, 1 ) ); + side_dir_mag = randomfloatrange( -100, 100 ); + side_dir_mag += sign( side_dir_mag ) * 80; + side_dir *= side_dir_mag; + self setvehvelocity( self.velocity + vectorscale( ( 0, 0, 1 ), 100.0 ) + vectornormalize( side_dir ) ); + ang_vel = self getangularvelocity(); + ang_vel = ( ang_vel[0] * 0.3, ang_vel[1], ang_vel[2] * 0.3 ); + yaw_vel = randomfloatrange( 0, 210 ) * sign( ang_vel[1] ); + yaw_vel += sign( yaw_vel ) * 180; + ang_vel += ( randomfloatrange( -1, 1 ), yaw_vel, randomfloatrange( -1, 1 ) ); + self setangularvelocity( ang_vel ); + self.crash_accel = randomfloatrange( 75, 110 ); + + if ( !isdefined( self.off ) ) + self thread quadrotor_crash_accel(); + + self thread quadrotor_collision(); + self playsound( "veh_qrdrone_dmg_hit" ); + + if ( !isdefined( self.off ) ) + self thread qrotor_dmg_snd(); + + wait 0.1; + + if ( randomint( 100 ) < 40 && !isdefined( self.off ) ) + self thread quadrotor_fire_for_time( randomfloatrange( 0.7, 2.0 ) ); + + wait 15; + self notify( "crash_done" ); +} + +qrotor_dmg_snd() +{ + dmg_ent = spawn( "script_origin", self.origin ); + dmg_ent linkto( self ); + dmg_ent playloopsound( "veh_qrdrone_dmg_loop" ); + self waittill_any( "crash_done", "death" ); + dmg_ent stoploopsound( 1 ); + wait 2; + dmg_ent delete(); +} + +quadrotor_fire_for_time( totalfiretime ) +{ + level endon( "end_game" ); + self endon( "crash_done" ); + self endon( "change_state" ); + self endon( "death" ); + + if ( isdefined( self.emped ) ) + return; + + weaponname = self seatgetweapon( 0 ); + firetime = weaponfiretime( weaponname ); + time = 0; + firecount = 1; + + while ( time < totalfiretime && !isdefined( self.emped ) ) + { + if ( isdefined( self.enemy ) && isdefined( self.enemy.attackeraccuracy ) && self.enemy.attackeraccuracy == 0 ) + self fireweapon( undefined, undefined, 1 ); + else + self fireweapon(); + + firecount++; + wait( firetime ); + time += firetime; + } +} + +quadrotor_crash_accel() +{ + level endon( "end_game" ); + self endon( "crash_done" ); + self endon( "death" ); + count = 0; + + while ( true ) + { + self setvehvelocity( self.velocity + anglestoup( self.angles ) * self.crash_accel ); + self.crash_accel *= 0.98; + wait 0.1; + count++; + + if ( count % 8 == 0 ) + { + if ( randomint( 100 ) > 40 ) + { + if ( self.velocity[2] > 150.0 ) + self.crash_accel *= 0.75; + else if ( self.velocity[2] < 40.0 && count < 60 ) + { + if ( abs( self.angles[0] ) > 30 || abs( self.angles[2] ) > 30 ) + self.crash_accel = randomfloatrange( 160, 200 ); + else + self.crash_accel = randomfloatrange( 85, 120 ); + } + } + } + } +} + +quadrotor_predicted_collision() +{ + level endon( "end_game" ); + self endon( "crash_done" ); + self endon( "death" ); + + while ( true ) + { + self waittill( "veh_predictedcollision", velocity, normal ); + + if ( normal[2] >= 0.6 ) + self notify( "veh_collision", velocity, normal ); + } +} + +quadrotor_collision_player() +{ + level endon( "end_game" ); + self endon( "change_state" ); + self endon( "crash_done" ); + self endon( "death" ); + + while ( true ) + { + self waittill( "veh_collision", velocity, normal ); + + driver = self getseatoccupant( 0 ); + + if ( isdefined( driver ) && lengthsquared( velocity ) > 4900 ) + { + earthquake( 0.25, 0.25, driver.origin, 50 ); + driver playrumbleonentity( "damage_heavy" ); + } + } +} + +quadrotor_collision() +{ + level endon( "end_game" ); + self endon( "change_state" ); + self endon( "crash_done" ); + self endon( "death" ); + + if ( !isalive( self ) ) + self thread quadrotor_predicted_collision(); + + self.bounce_count = 0; + time_of_last_bounce = 0; + + while ( true ) + { + self waittill( "veh_collision", velocity, normal ); + + ang_vel = self getangularvelocity() * 0.5; + self setangularvelocity( ang_vel ); + + if ( normal[2] < 0.6 || isalive( self ) && !isdefined( self.emped ) ) + { + self setvehvelocity( self.velocity + normal * 90 ); + self playsound( "veh_qrdrone_wall" ); + + if ( normal[2] < 0.6 ) + fx_origin = self.origin - normal * 28; + else + fx_origin = self.origin - normal * 10; + + playfx( level._effect["quadrotor_nudge"], fx_origin, normal ); + current_time = gettime(); + + if ( current_time - time_of_last_bounce < 1000 ) + { + self.bounce_count += 1; + + if ( self.bounce_count > 2 ) + { + self notify( "force_goal" ); + self.bounce_count = 0; + } + } + else + self.bounce_count = 0; + + time_of_last_bounce = gettime(); + } + else if ( isdefined( self.emped ) ) + { + if ( isdefined( self.bounced ) ) + { + self playsound( "veh_qrdrone_wall" ); + self setvehvelocity( ( 0, 0, 0 ) ); + self setangularvelocity( ( 0, 0, 0 ) ); + + if ( self.angles[0] < 0 ) + { + if ( self.angles[0] < -15 ) + self.angles = ( -15, self.angles[1], self.angles[2] ); + else if ( self.angles[0] > -10 ) + self.angles = ( -10, self.angles[1], self.angles[2] ); + } + else if ( self.angles[0] > 15 ) + self.angles = ( 15, self.angles[1], self.angles[2] ); + else if ( self.angles[0] < 10 ) + self.angles = ( 10, self.angles[1], self.angles[2] ); + + self.bounced = undefined; + self notify( "landed" ); + return; + } + else + { + self.bounced = 1; + self setvehvelocity( self.velocity + normal * 120 ); + self playsound( "veh_qrdrone_wall" ); + + if ( normal[2] < 0.6 ) + fx_origin = self.origin - normal * 28; + else + fx_origin = self.origin - normal * 10; + + playfx( level._effect["quadrotor_nudge"], fx_origin, normal ); + } + } + else + { + createdynentandlaunch( self.deathmodel, self.origin, self.angles, self.origin, self.velocity * 0.01 ); + self playsound( "veh_qrdrone_explo" ); + self thread death_fire_loop_audio(); + self notify( "crash_done" ); + } + } +} + +death_fire_loop_audio() +{ + sound_ent = spawn( "script_origin", self.origin ); + sound_ent playloopsound( "veh_qrdrone_death_fire_loop", 0.1 ); + wait 11; + sound_ent stoploopsound( 1 ); + sound_ent delete(); +} + +quadrotor_set_team( team ) +{ + self.team = team; + self.vteam = team; + self setteam( team ); + + if ( !isdefined( self.off ) ) + quadrotor_blink_lights(); +} + +quadrotor_blink_lights() +{ + level endon( "end_game" ); + self endon( "death" ); + self lights_off(); + wait 0.1; + self lights_on(); +} + +quadrotor_self_destruct() +{ + level endon( "end_game" ); + self endon( "death" ); + self endon( "exit_vehicle" ); + self_destruct = 0; + self_destruct_time = 0; + + while ( true ) + { + if ( !self_destruct ) + { + if ( level.player meleebuttonpressed() ) + { + self_destruct = 1; + self_destruct_time = 5; + } + + wait 0.05; + continue; + } + else + { + iprintlnbold( self_destruct_time ); + wait 1; + self_destruct_time -= 1; + + if ( self_destruct_time == 0 ) + { + driver = self getseatoccupant( 0 ); + + if ( isdefined( driver ) ) + driver disableinvulnerability(); + + earthquake( 3, 1, self.origin, 256 ); + radiusdamage( self.origin, 1000, 15000, 15000, level.player, "MOD_EXPLOSIVE" ); + self dodamage( self.health + 1000, self.origin ); + } + + continue; + } + } +} + +quadrotor_level_out_for_landing() +{ + level endon( "end_game" ); + self endon( "death" ); + self endon( "emped" ); + self endon( "landed" ); + + while ( isdefined( self.emped ) ) + { + velocity = self.velocity; + self.angles = ( self.angles[0] * 0.85, self.angles[1], self.angles[2] * 0.85 ); + ang_vel = self getangularvelocity() * 0.85; + self setangularvelocity( ang_vel ); + self setvehvelocity( velocity ); + wait 0.05; + } +} + +quadrotor_temp_bullet_shield( invulnerable_time ) +{ + self notify( "bullet_shield" ); + self endon( "bullet_shield" ); + self.bullet_shield = 1; + wait( invulnerable_time ); + + if ( isdefined( self ) ) + { + self.bullet_shield = undefined; + wait 3; + + if ( isdefined( self ) && self.health < 40 ) + self.health = 40; + } +} + +lights_on() +{ + self clearclientflag( 10 ); +} + +lights_off() +{ + self setclientflag( 10 ); +} + +death_radius_damage() +{ + if ( !isdefined( self ) || self.radiusdamageradius <= 0 ) + return; + + wait 0.05; + + if ( isdefined( self ) ) + self radiusdamage( self.origin + vectorscale( ( 0, 0, 1 ), 15.0 ), self.radiusdamageradius, self.radiusdamagemax, self.radiusdamagemin, self, "MOD_EXPLOSIVE" ); +} + +set_death_model( smodel, fdelay ) +{ + assert( isdefined( smodel ) ); + + if ( isdefined( fdelay ) && fdelay > 0 ) + wait( fdelay ); + + if ( !isdefined( self ) ) + return; + + if ( isdefined( self.deathmodel_attached ) ) + return; + + self setmodel( smodel ); +} + +player_in_last_stand_within_range( range ) +{ + players = getplayers(); + + if ( players.size == 1 ) + return; + + foreach ( player in players ) + { + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && distancesquared( self.origin, player.origin ) < range * range && !isdefined( player.quadrotor_revive ) ) + return player; + } +} + +watch_for_fail_revive( quad_rotor ) +{ + quadrotor = quad_rotor; + owner = quad_rotor.player_owner; + revive_target = quad_rotor.revive_target; + revive_target endon( "bled_out" ); + revive_target endon( "disconnect" ); + level thread kill_fx_if_target_revive( quadrotor, revive_target ); + revive_target.revive_hud settext( &"GAME_PLAYER_IS_REVIVING_YOU", owner ); + revive_target revive_hud_show_n_fade( 1.0 ); + wait 1; + + if ( isdefined( revive_target ) ) + revive_target.quadrotor_revive = undefined; +} + +kill_fx_if_target_revive( quadrotor, revive_target ) +{ + e_fx = spawn( "script_model", quadrotor gettagorigin( "tag_origin" ) ); + e_fx setmodel( "tag_origin" ); + e_fx playsound( "zmb_drone_revive_fire" ); + e_fx playloopsound( "zmb_drone_revive_loop", 0.2 ); + playfxontag( level._effect["qd_revive"], e_fx, "tag_origin" ); + e_fx moveto( revive_target.origin, 1 ); + timer = 0; + + while ( true ) + { + if ( isdefined( revive_target ) && revive_target maps\mp\zombies\_zm_laststand::player_is_in_laststand() && isdefined( quadrotor ) ) + { + wait 0.1; + timer += 0.1; + + if ( timer >= 1 ) + { + playfxontag( level._effect["staff_soul"], e_fx, "tag_origin" ); + e_fx stoploopsound( 0.1 ); + e_fx playsound( "zmb_drone_revive_revive_3d" ); + revive_target playsoundtoplayer( "zmb_drone_revive_revive_plr", revive_target ); + break; + } + } + else + break; + } + + e_fx delete(); +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_challenges.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_challenges.gsc new file mode 100644 index 0000000..c9317c6 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_challenges.gsc @@ -0,0 +1,772 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_score; + +init() +{ + level._challenges = spawnstruct(); + stats_init(); + level.a_m_challenge_boards = []; + level.a_uts_challenge_boxes = []; + a_m_challenge_boxes = getentarray( "challenge_box", "targetname" ); + array_thread( a_m_challenge_boxes, ::box_init ); + onplayerconnect_callback( ::onplayerconnect ); + n_bits = getminbitcountfornum( 14 ); + registerclientfield( "toplayer", "challenge_complete_1", 14000, 1, "int" ); + registerclientfield( "toplayer", "challenge_complete_2", 14000, 1, "int" ); + registerclientfield( "toplayer", "challenge_complete_3", 14000, 1, "int" ); + registerclientfield( "toplayer", "challenge_complete_4", 14000, 1, "int" ); +/# + level thread challenges_devgui(); +#/ +} + +onplayerconnect() +{ + player_stats_init( self.characterindex ); + + foreach ( s_stat in level._challenges.a_players[self.characterindex].a_stats ) + { + s_stat.b_display_tag = 1; + + foreach ( m_board in level.a_m_challenge_boards ) + { + m_board showpart( s_stat.str_medal_tag ); + m_board hidepart( s_stat.str_glow_tag ); + } + } + + self thread onplayerspawned(); +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + foreach ( s_stat in level._challenges.a_players[self.characterindex].a_stats ) + { + if ( s_stat.b_medal_awarded && !s_stat.b_reward_claimed ) + { + foreach ( m_board in level.a_m_challenge_boards ) + self setclientfieldtoplayer( s_stat.s_parent.cf_complete, 1 ); + } + } + + foreach ( s_stat in level._challenges.s_team.a_stats ) + { + if ( s_stat.b_medal_awarded && s_stat.a_b_player_rewarded[self.characterindex] ) + { + foreach ( m_board in level.a_m_challenge_boards ) + self setclientfieldtoplayer( s_stat.s_parent.cf_complete, 1 ); + } + } + } +} + +stats_init() +{ + level._challenges.a_stats = []; + + if ( isdefined( level.challenges_add_stats ) ) + [[ level.challenges_add_stats ]](); + + foreach ( stat in level._challenges.a_stats ) + { + if ( isdefined( stat.fp_init_stat ) ) + level thread [[ stat.fp_init_stat ]](); + } + + level._challenges.a_players = []; + + for ( i = 0; i < 4; i++ ) + player_stats_init( i ); + + team_stats_init(); +} + +add_stat( str_name, b_team = 0, str_hint = &"", n_goal = 1, str_reward_model, fp_give_reward, fp_init_stat ) +{ + stat = spawnstruct(); + stat.str_name = str_name; + stat.b_team = b_team; + stat.str_hint = str_hint; + stat.n_goal = n_goal; + stat.str_reward_model = str_reward_model; + stat.fp_give_reward = fp_give_reward; + + if ( isdefined( fp_init_stat ) ) + stat.fp_init_stat = fp_init_stat; + + level._challenges.a_stats[str_name] = stat; + stat.cf_complete = "challenge_complete_" + level._challenges.a_stats.size; +} + +player_stats_init( n_index ) +{ + a_characters = array( "d", "n", "r", "t" ); + str_character = a_characters[n_index]; + + if ( !isdefined( level._challenges.a_players[n_index] ) ) + { + level._challenges.a_players[n_index] = spawnstruct(); + level._challenges.a_players[n_index].a_stats = []; + } + + s_player_set = level._challenges.a_players[n_index]; + n_challenge_index = 1; + + foreach ( s_challenge in level._challenges.a_stats ) + { + if ( !s_challenge.b_team ) + { + if ( !isdefined( s_player_set.a_stats[s_challenge.str_name] ) ) + s_player_set.a_stats[s_challenge.str_name] = spawnstruct(); + + s_stat = s_player_set.a_stats[s_challenge.str_name]; + s_stat.s_parent = s_challenge; + s_stat.n_value = 0; + s_stat.b_medal_awarded = 0; + s_stat.b_reward_claimed = 0; + n_index = level._challenges.a_stats.size + 1; + s_stat.str_medal_tag = "j_" + str_character + "_medal_0" + n_challenge_index; + s_stat.str_glow_tag = "j_" + str_character + "_glow_0" + n_challenge_index; + s_stat.b_display_tag = 0; + n_challenge_index++; + } + } + + s_player_set.n_completed = 0; + s_player_set.n_medals_held = 0; +} + +team_stats_init( n_index ) +{ + if ( !isdefined( level._challenges.s_team ) ) + { + level._challenges.s_team = spawnstruct(); + level._challenges.s_team.a_stats = []; + } + + s_team_set = level._challenges.s_team; + + foreach ( s_challenge in level._challenges.a_stats ) + { + if ( s_challenge.b_team ) + { + if ( !isdefined( s_team_set.a_stats[s_challenge.str_name] ) ) + s_team_set.a_stats[s_challenge.str_name] = spawnstruct(); + + s_stat = s_team_set.a_stats[s_challenge.str_name]; + s_stat.s_parent = s_challenge; + s_stat.n_value = 0; + s_stat.b_medal_awarded = 0; + s_stat.b_reward_claimed = 0; + s_stat.a_b_player_rewarded = array( 0, 0, 0, 0 ); + s_stat.str_medal_tag = "j_g_medal"; + s_stat.str_glow_tag = "j_g_glow"; + s_stat.b_display_tag = 1; + } + } + + s_team_set.n_completed = 0; + s_team_set.n_medals_held = 0; +} + +challenge_exists( str_name ) +{ + if ( isdefined( level._challenges.a_stats[str_name] ) ) + return true; + else + return false; +} + +get_stat( str_stat, player ) +{ + s_parent_stat = level._challenges.a_stats[str_stat]; + assert( isdefined( s_parent_stat ), "Challenge stat: " + str_stat + " does not exist" ); + assert( s_parent_stat.b_team || isdefined( player ), "Challenge stat: " + str_stat + " is a player stat, but no player passed in" ); + + if ( s_parent_stat.b_team ) + s_stat = level._challenges.s_team.a_stats[str_stat]; + else + s_stat = level._challenges.a_players[player.characterindex].a_stats[str_stat]; + + return s_stat; +} + +increment_stat( str_stat, n_increment = 1 ) +{ + s_stat = get_stat( str_stat, self ); + + if ( !s_stat.b_medal_awarded ) + { + s_stat.n_value += n_increment; + check_stat_complete( s_stat ); + } +} + +set_stat( str_stat, n_set ) +{ + s_stat = get_stat( str_stat, self ); + + if ( !s_stat.b_medal_awarded ) + { + s_stat.n_value = n_set; + check_stat_complete( s_stat ); + } +} + +check_stat_complete( s_stat ) +{ + if ( s_stat.b_medal_awarded ) + return 1; + + if ( s_stat.n_value >= s_stat.s_parent.n_goal ) + { + s_stat.b_medal_awarded = 1; + + if ( s_stat.s_parent.b_team ) + { + s_team_stats = level._challenges.s_team; + s_team_stats.n_completed++; + s_team_stats.n_medals_held++; + a_players = get_players(); + + foreach ( player in a_players ) + { + player setclientfieldtoplayer( s_stat.s_parent.cf_complete, 1 ); + player playsound( "evt_medal_acquired" ); + wait_network_frame(); + } + } + else + { + s_player_stats = level._challenges.a_players[self.characterindex]; + s_player_stats.n_completed++; + s_player_stats.n_medals_held++; + self playsound( "evt_medal_acquired" ); + self setclientfieldtoplayer( s_stat.s_parent.cf_complete, 1 ); + } + + foreach ( m_board in level.a_m_challenge_boards ) + m_board showpart( s_stat.str_glow_tag ); + + if ( isplayer( self ) ) + { + if ( level._challenges.a_players[self.characterindex].n_completed + level._challenges.s_team.n_completed == level._challenges.a_stats.size ) + self notify( "all_challenges_complete" ); + } + else + { + foreach ( player in get_players() ) + { + if ( isdefined( player.characterindex ) ) + { + if ( level._challenges.a_players[player.characterindex].n_completed + level._challenges.s_team.n_completed == level._challenges.a_stats.size ) + player notify( "all_challenges_complete" ); + } + } + } + + wait_network_frame(); + } +} + +stat_reward_available( stat, player ) +{ + if ( isstring( stat ) ) + s_stat = get_stat( stat, player ); + else + s_stat = stat; + + if ( !s_stat.b_medal_awarded ) + return false; + + if ( s_stat.b_reward_claimed ) + return false; + + if ( s_stat.s_parent.b_team && s_stat.a_b_player_rewarded[player.characterindex] ) + return false; + + return true; +} + +player_has_unclaimed_team_reward() +{ + foreach ( s_stat in level._challenges.s_team.a_stats ) + { + if ( s_stat.b_medal_awarded && !s_stat.a_b_player_rewarded[self.characterindex] ) + return true; + } + + return false; +} + +board_init( m_board ) +{ + self.m_board = m_board; + a_challenges = getarraykeys( level._challenges.a_stats ); + a_characters = array( "d", "n", "r", "t" ); + m_board.a_s_medal_tags = []; + b_team_hint_added = 0; + + foreach ( n_char_index, s_set in level._challenges.a_players ) + { + str_character = a_characters[n_char_index]; + n_challenge_index = 1; + + foreach ( s_stat in s_set.a_stats ) + { + str_medal_tag = "j_" + str_character + "_medal_0" + n_challenge_index; + str_glow_tag = "j_" + str_character + "_glow_0" + n_challenge_index; + s_tag = spawnstruct(); + s_tag.v_origin = m_board gettagorigin( str_medal_tag ); + s_tag.s_stat = s_stat; + s_tag.n_character_index = n_char_index; + s_tag.str_medal_tag = str_medal_tag; + m_board.a_s_medal_tags[m_board.a_s_medal_tags.size] = s_tag; + m_board hidepart( str_medal_tag ); + m_board hidepart( str_glow_tag ); + n_challenge_index++; + } + } + + foreach ( s_stat in level._challenges.s_team.a_stats ) + { + str_medal_tag = "j_g_medal"; + str_glow_tag = "j_g_glow"; + s_tag = spawnstruct(); + s_tag.v_origin = m_board gettagorigin( str_medal_tag ); + s_tag.s_stat = s_stat; + s_tag.n_character_index = 4; + s_tag.str_medal_tag = str_medal_tag; + m_board.a_s_medal_tags[m_board.a_s_medal_tags.size] = s_tag; + m_board hidepart( str_glow_tag ); + b_team_hint_added = 1; + } + + level.a_m_challenge_boards[level.a_m_challenge_boards.size] = m_board; +} + +#using_animtree("fxanim_props_dlc4"); + +box_init() +{ + self useanimtree( #animtree ); + s_unitrigger_stub = spawnstruct(); + s_unitrigger_stub.origin = self.origin + ( 0, 0, 0 ); + s_unitrigger_stub.angles = self.angles; + s_unitrigger_stub.radius = 64; + s_unitrigger_stub.script_length = 64; + s_unitrigger_stub.script_width = 64; + s_unitrigger_stub.script_height = 64; + s_unitrigger_stub.cursor_hint = "HINT_NOICON"; + s_unitrigger_stub.hint_string = &""; + s_unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + s_unitrigger_stub.prompt_and_visibility_func = ::box_prompt_and_visiblity; + s_unitrigger_stub ent_flag_init( "waiting_for_grab" ); + s_unitrigger_stub ent_flag_init( "reward_timeout" ); + s_unitrigger_stub.b_busy = 0; + s_unitrigger_stub.m_box = self; + s_unitrigger_stub.b_disable_trigger = 0; + + if ( isdefined( self.script_string ) ) + s_unitrigger_stub.str_location = self.script_string; + + if ( isdefined( s_unitrigger_stub.m_box.target ) ) + { + s_unitrigger_stub.m_board = getent( s_unitrigger_stub.m_box.target, "targetname" ); + s_unitrigger_stub board_init( s_unitrigger_stub.m_board ); + } + + unitrigger_force_per_player_triggers( s_unitrigger_stub, 1 ); + level.a_uts_challenge_boxes[level.a_uts_challenge_boxes.size] = s_unitrigger_stub; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( s_unitrigger_stub, ::box_think ); +} + +box_prompt_and_visiblity( player ) +{ + if ( self.stub.b_disable_trigger ) + return false; + + self thread update_box_prompt( player ); + return true; +} + +update_box_prompt( player ) +{ + self endon( "kill_trigger" ); + player endon( "death_or_disconnect" ); + str_hint = &""; + str_old_hint = &""; + m_board = self.stub.m_board; + self sethintstring( str_hint ); + + while ( true ) + { + s_hint_tag = undefined; + b_showing_stat = 0; + self.b_can_open = 0; + + if ( self.stub.b_busy ) + { + if ( self.stub ent_flag( "waiting_for_grab" ) && ( !isdefined( self.stub.player_using ) || self.stub.player_using == player ) ) + str_hint = &"ZM_TOMB_CH_G"; + else + str_hint = &""; + } + else + { + str_hint = &""; + player.s_lookat_stat = undefined; + n_closest_dot = 0.996; + v_eye_origin = player getplayercamerapos(); + v_eye_direction = anglestoforward( player getplayerangles() ); + + foreach ( str_tag, s_tag in m_board.a_s_medal_tags ) + { + if ( !s_tag.s_stat.b_display_tag ) + continue; + + v_tag_origin = s_tag.v_origin; + v_eye_to_tag = vectornormalize( v_tag_origin - v_eye_origin ); + n_dot = vectordot( v_eye_to_tag, v_eye_direction ); + + if ( n_dot > n_closest_dot ) + { + n_closest_dot = n_dot; + str_hint = s_tag.s_stat.s_parent.str_hint; + s_hint_tag = s_tag; + b_showing_stat = 1; + self.b_can_open = 0; + + if ( s_tag.n_character_index == player.characterindex || s_tag.n_character_index == 4 ) + { + player.s_lookat_stat = s_tag.s_stat; + + if ( stat_reward_available( s_tag.s_stat, player ) ) + { + str_hint = &"ZM_TOMB_CH_S"; + b_showing_stat = 0; + self.b_can_open = 1; + } + } + } + } + + if ( str_hint == &"" ) + { + s_player = level._challenges.a_players[player.characterindex]; + s_team = level._challenges.s_team; + + if ( s_player.n_medals_held > 0 || player player_has_unclaimed_team_reward() ) + { + str_hint = &"ZM_TOMB_CH_O"; + self.b_can_open = 1; + } + else + str_hint = &"ZM_TOMB_CH_V"; + } + } + + if ( str_old_hint != str_hint ) + { + str_old_hint = str_hint; + self.stub.hint_string = str_hint; + + if ( isdefined( s_hint_tag ) ) + { + str_name = s_hint_tag.s_stat.s_parent.str_name; + n_character_index = s_hint_tag.n_character_index; + + if ( n_character_index != 4 ) + s_player_stat = level._challenges.a_players[n_character_index].a_stats[str_name]; + else + { + + } + } + + self sethintstring( self.stub.hint_string ); + } + + wait 0.1; + } +} + +box_think() +{ + self endon( "kill_trigger" ); + s_team = level._challenges.s_team; + + while ( true ) + { + self waittill( "trigger", player ); + + if ( !is_player_valid( player ) ) + continue; + + if ( self.stub.b_busy ) + { + current_weapon = player getcurrentweapon(); + + if ( isdefined( player.intermission ) && player.intermission || is_placeable_mine( current_weapon ) || is_equipment_that_blocks_purchase( current_weapon ) || current_weapon == "none" || player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || player isthrowinggrenade() || player in_revive_trigger() || player isswitchingweapons() || player.is_drinking > 0 ) + { + wait 0.1; + continue; + } + + if ( self.stub ent_flag( "waiting_for_grab" ) ) + { + if ( !isdefined( self.stub.player_using ) ) + self.stub.player_using = player; + + if ( player == self.stub.player_using ) + self.stub ent_flag_clear( "waiting_for_grab" ); + } + + wait 0.05; + continue; + } + + if ( self.b_can_open ) + { + self.stub.hint_string = &""; + self sethintstring( self.stub.hint_string ); + level thread open_box( player, self.stub ); + } + } +} + +get_reward_category( player, s_select_stat ) +{ + if ( isdefined( s_select_stat ) && s_select_stat.s_parent.b_team || level._challenges.s_team.n_medals_held > 0 ) + return level._challenges.s_team; + + if ( level._challenges.a_players[player.characterindex].n_medals_held > 0 ) + return level._challenges.a_players[player.characterindex]; + + return undefined; +} + +get_reward_stat( s_category ) +{ + foreach ( s_stat in s_category.a_stats ) + { + if ( s_stat.b_medal_awarded && !s_stat.b_reward_claimed ) + { + if ( s_stat.s_parent.b_team && s_stat.a_b_player_rewarded[self.characterindex] ) + continue; + + return s_stat; + } + } + + return undefined; +} + +open_box( player, ut_stub, fp_reward_override, param1 ) +{ + m_box = ut_stub.m_box; + + while ( ut_stub.b_busy ) + wait 1; + + ut_stub.b_busy = 1; + ut_stub.player_using = player; + + if ( isdefined( player ) && isdefined( player.s_lookat_stat ) ) + s_select_stat = player.s_lookat_stat; + + m_box setanim( %o_zombie_dlc4_challenge_box_open ); + m_box delay_thread( 0.75, ::setclientfield, "foot_print_box_glow", 1 ); + wait 0.5; + + if ( isdefined( fp_reward_override ) ) + ut_stub [[ fp_reward_override ]]( player, param1 ); + else + ut_stub spawn_reward( player, s_select_stat ); + + wait 1; + m_box setanim( %o_zombie_dlc4_challenge_box_close ); + m_box delay_thread( 0.75, ::setclientfield, "foot_print_box_glow", 0 ); + wait 2; + ut_stub.b_busy = 0; + ut_stub.player_using = undefined; +} + +spawn_reward( player, s_select_stat ) +{ + if ( isdefined( player ) ) + { + player endon( "death_or_disconnect" ); + + if ( isdefined( s_select_stat ) ) + { + s_category = get_reward_category( player, s_select_stat ); + + if ( stat_reward_available( s_select_stat, player ) ) + s_stat = s_select_stat; + } + + if ( !isdefined( s_stat ) ) + { + s_category = get_reward_category( player ); + s_stat = player get_reward_stat( s_category ); + } + + if ( self [[ s_stat.s_parent.fp_give_reward ]]( player, s_stat ) ) + { + if ( isdefined( s_stat.s_parent.cf_complete ) ) + player setclientfieldtoplayer( s_stat.s_parent.cf_complete, 0 ); + + if ( s_stat.s_parent.b_team ) + { + s_stat.a_b_player_rewarded[player.characterindex] = 1; + a_players = get_players(); + + foreach ( player in a_players ) + { + if ( !s_stat.a_b_player_rewarded[player.characterindex] ) + return; + } + } + + s_stat.b_reward_claimed = 1; + s_category.n_medals_held--; + } + } +} + +reward_grab_wait( n_timeout = 10 ) +{ + self ent_flag_clear( "reward_timeout" ); + self ent_flag_set( "waiting_for_grab" ); + self endon( "waiting_for_grab" ); + + if ( n_timeout > 0 ) + { + wait( n_timeout ); + self ent_flag_set( "reward_timeout" ); + self ent_flag_clear( "waiting_for_grab" ); + } + else + self ent_flag_waitopen( "waiting_for_grab" ); +} + +reward_sink( n_delay, n_z, n_time ) +{ + if ( isdefined( n_delay ) ) + { + wait( n_delay ); + + if ( isdefined( self ) ) + self movez( n_z * -1, n_time ); + } +} + +reward_rise_and_grab( m_reward, n_z, n_rise_time, n_delay, n_timeout ) +{ + m_reward movez( n_z, n_rise_time ); + wait( n_rise_time ); + + if ( n_timeout > 0 ) + m_reward thread reward_sink( n_delay, n_z, n_timeout + 1 ); + + self reward_grab_wait( n_timeout ); + + if ( self ent_flag( "reward_timeout" ) ) + return false; + + return true; +} + +reward_points( player, s_stat ) +{ + player maps\mp\zombies\_zm_score::add_to_player_score( 2500 ); +} + +challenges_devgui() +{ +/# + setdvar( "award_challenge", "0" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Challenges:10/Award Player1\" \"award_challenge 1\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Challenges:10/Award Player2\" \"award_challenge 2\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Challenges:10/Award Player3\" \"award_challenge 3\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Tomb:1/Challenges:10/Award Team\" \"award_challenge 4\"\n" ); + thread watch_devgui_award_challenges(); +#/ +} + +watch_devgui_award_challenges() +{ +/# + while ( true ) + { + n_award_challenge = getdvarint( _hash_AF0D5C36 ); + + if ( n_award_challenge != 0 ) + { + devgui_award_challenge( n_award_challenge ); + setdvarint( "award_challenge", 0 ); + } + + wait 0.5; + } +#/ +} + +devgui_award_challenge( n_index ) +{ +/# + if ( n_index == 4 ) + { + s_team_stats = level._challenges.s_team; + s_team_stats.n_completed = 1; + s_team_stats.n_medals_held = 1; + a_keys = getarraykeys( level._challenges.s_team.a_stats ); + s_stat = level._challenges.s_team.a_stats[a_keys[0]]; + s_stat.b_medal_awarded = 1; + s_stat.b_reward_claimed = 0; + a_players = get_players(); + + foreach ( player in a_players ) + { + s_stat.a_b_player_rewarded[player.characterindex] = 0; + player setclientfieldtoplayer( s_stat.s_parent.cf_complete, 1 ); + } + + foreach ( m_board in level.a_m_challenge_boards ) + m_board showpart( s_stat.str_glow_tag ); + } + else + { + a_keys = getarraykeys( level._challenges.a_players[0].a_stats ); + a_players = get_players(); + + foreach ( player in a_players ) + { + s_player_data = level._challenges.a_players[player.characterindex]; + s_player_data.n_completed++; + s_player_data.n_medals_held++; + s_stat = s_player_data.a_stats[a_keys[n_index - 1]]; + s_stat.b_medal_awarded = 1; + s_stat.b_reward_claimed = 0; + player setclientfieldtoplayer( s_stat.s_parent.cf_complete, 1 ); + + foreach ( m_board in level.a_m_challenge_boards ) + m_board showpart( s_stat.str_glow_tag ); + } + } +#/ +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_craftables.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_craftables.gsc new file mode 100644 index 0000000..7ca48ff --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_craftables.gsc @@ -0,0 +1,2900 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\_demo; + +init() +{ + precachestring( &"ZOMBIE_BUILDING" ); + precachestring( &"ZOMBIE_BUILD_PIECE_MISSING" ); + precachestring( &"ZOMBIE_BUILD_PIECE_GRAB" ); + precacheitem( "zombie_builder_zm" ); + precacheitem( "buildable_piece_zm" ); + level.craftable_piece_swap_allowed = 1; + zombie_craftables_callbacks = []; + level.craftablepickups = []; + level.craftables_crafted = []; + level.a_uts_craftables = []; + level.craftable_piece_count = 0; + level._effect["building_dust"] = loadfx( "maps/zombie/fx_zmb_buildable_assemble_dust" ); + + if ( isdefined( level.init_craftables ) ) + [[ level.init_craftables ]](); + + open_table = spawnstruct(); + open_table.name = "open_table"; + open_table.triggerthink = ::opentablecraftable; + open_table.custom_craftablestub_update_prompt = ::open_craftablestub_update_prompt; + include_zombie_craftable( open_table ); + add_zombie_craftable( "open_table", &"" ); + + if ( isdefined( level.use_swipe_protection ) ) + onplayerconnect_callback( ::craftables_watch_swipes ); +} + +anystub_update_prompt( player ) +{ + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || player in_revive_trigger() ) + { + self.hint_string = ""; + return false; + } + + if ( isdefined( player.is_drinking ) && player.is_drinking > 0 ) + { + self.hint_string = ""; + return false; + } + + if ( isdefined( player.screecher_weapon ) ) + { + self.hint_string = ""; + return false; + } + + return true; +} + +anystub_get_unitrigger_origin() +{ + if ( isdefined( self.origin_parent ) ) + return self.origin_parent.origin; + + return self.origin; +} + +anystub_on_spawn_trigger( trigger ) +{ + if ( isdefined( self.link_parent ) ) + { + trigger enablelinkto(); + trigger linkto( self.link_parent ); + trigger setmovingplatformenabled( 1 ); + } +} + +craftables_watch_swipes() +{ + self endon( "disconnect" ); + self notify( "craftables_watch_swipes" ); + self endon( "craftables_watch_swipes" ); + + while ( true ) + { + self waittill( "melee_swipe", zombie ); + + if ( distancesquared( zombie.origin, self.origin ) > zombie.meleeattackdist * zombie.meleeattackdist ) + continue; + + trigger = level._unitriggers.trigger_pool[self getentitynumber()]; + + if ( isdefined( trigger ) && isdefined( trigger.stub.piece ) ) + { + piece = trigger.stub.piece; + + if ( !isdefined( piece.damage ) ) + piece.damage = 0; + + piece.damage++; + + if ( piece.damage > 12 ) + { + thread maps\mp\zombies\_zm_equipment::equipment_disappear_fx( trigger.stub maps\mp\zombies\_zm_unitrigger::unitrigger_origin() ); + piece maps\mp\zombies\_zm_craftables::piece_unspawn(); + self maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); + + if ( isalive( self ) ) + self playlocalsound( level.zmb_laugh_alias ); + } + } + } +} + +explosiondamage( damage, pos ) +{ +/# + println( "ZM CRAFTABLE Explode do " + damage + " damage to " + self.name + "\\n" ); +#/ + self dodamage( damage, pos ); +} + +make_zombie_craftable_open( str_craftable, str_model, v_angle_offset, v_origin_offset ) +{ + assert( isdefined( level.zombie_craftablestubs[str_craftable] ), "Craftable " + str_craftable + " has not been added yet." ); + precachemodel( str_model ); + s_craftable = level.zombie_craftablestubs[str_craftable]; + s_craftable.is_open_table = 1; + s_craftable.str_model = str_model; + s_craftable.v_angle_offset = v_angle_offset; + s_craftable.v_origin_offset = v_origin_offset; +} + +add_zombie_craftable( craftable_name, str_to_craft, str_crafting, str_taken, onfullycrafted, need_all_pieces ) +{ + if ( !isdefined( level.zombie_include_craftables ) ) + level.zombie_include_craftables = []; + + if ( isdefined( level.zombie_include_craftables ) && !isdefined( level.zombie_include_craftables[craftable_name] ) ) + return; + + if ( isdefined( str_to_craft ) ) + precachestring( str_to_craft ); + + if ( isdefined( str_crafting ) ) + precachestring( str_crafting ); + + if ( isdefined( str_taken ) ) + precachestring( str_taken ); + + craftable_struct = level.zombie_include_craftables[craftable_name]; + + if ( !isdefined( level.zombie_craftablestubs ) ) + level.zombie_craftablestubs = []; + + craftable_struct.str_to_craft = str_to_craft; + craftable_struct.str_crafting = str_crafting; + craftable_struct.str_taken = str_taken; + craftable_struct.onfullycrafted = onfullycrafted; + craftable_struct.need_all_pieces = need_all_pieces; +/# + println( "ZM >> Looking for craftable - " + craftable_struct.name ); +#/ + level.zombie_craftablestubs[craftable_struct.name] = craftable_struct; + + if ( !level.createfx_enabled ) + { + if ( level.zombie_craftablestubs.size == 2 ) + { + bits = getminbitcountfornum( level.craftable_piece_count ); + registerclientfield( "toplayer", "craftable", 9000, bits, "int" ); + } + } +} + +add_zombie_craftable_vox_category( craftable_name, vox_id ) +{ + craftable_struct = level.zombie_include_craftables[craftable_name]; + craftable_struct.vox_id = vox_id; +} + +include_zombie_craftable( craftablestub ) +{ + if ( !isdefined( level.zombie_include_craftables ) ) + level.zombie_include_craftables = []; +/# + println( "ZM >> Including craftable - " + craftablestub.name ); +#/ + level.zombie_include_craftables[craftablestub.name] = craftablestub; +} + +generate_zombie_craftable_piece( craftablename, piecename, modelname, radius, height, drop_offset, hud_icon, onpickup, ondrop, oncrafted, use_spawn_num, tag_name, can_reuse, client_field_value, is_shared = 0, vox_id, b_one_time_vo = 0 ) +{ + precachemodel( modelname ); + + if ( isdefined( hud_icon ) ) + precacheshader( hud_icon ); + + piecestub = spawnstruct(); + craftable_pieces = []; + piece_alias = ""; + + if ( !isdefined( piecename ) ) + piecename = modelname; + + craftable_pieces_structs = getstructarray( craftablename + "_" + piecename, "targetname" ); +/# + if ( craftable_pieces_structs.size < 1 ) + println( "ERROR: Missing craftable piece <" + craftablename + "> <" + piecename + ">\\n" ); +#/ + foreach ( index, struct in craftable_pieces_structs ) + { + craftable_pieces[index] = struct; + craftable_pieces[index].hasspawned = 0; + } + + piecestub.spawns = craftable_pieces; + piecestub.craftablename = craftablename; + piecestub.piecename = piecename; + piecestub.modelname = modelname; + piecestub.hud_icon = hud_icon; + piecestub.radius = radius; + piecestub.height = height; + piecestub.tag_name = tag_name; + piecestub.can_reuse = can_reuse; + piecestub.drop_offset = drop_offset; + piecestub.max_instances = 256; + piecestub.onpickup = onpickup; + piecestub.ondrop = ondrop; + piecestub.oncrafted = oncrafted; + piecestub.use_spawn_num = use_spawn_num; + piecestub.is_shared = is_shared; + piecestub.vox_id = vox_id; + + if ( isdefined( b_one_time_vo ) && b_one_time_vo ) + piecestub.b_one_time_vo = b_one_time_vo; + + if ( isdefined( client_field_value ) ) + { + if ( isdefined( is_shared ) && is_shared ) + { + assert( isstring( client_field_value ), "Client field value for shared item (" + piecename + ") should be a string (the name of the ClientField to use)" ); + piecestub.client_field_id = client_field_value; + } + else + piecestub.client_field_state = client_field_value; + } + + return piecestub; +} + +manage_multiple_pieces( max_instances ) +{ + self.max_instances = max_instances; + self.managing_pieces = 1; + self.piece_allocated = []; +} + +combine_craftable_pieces( piece1, piece2, piece3 ) +{ + spawns1 = piece1.spawns; + spawns2 = piece2.spawns; + spawns = arraycombine( spawns1, spawns2, 1, 0 ); + + if ( isdefined( piece3 ) ) + { + spawns3 = piece3.spawns; + spawns = arraycombine( spawns, spawns3, 1, 0 ); + spawns = array_randomize( spawns ); + piece3.spawns = spawns; + } + else + spawns = array_randomize( spawns ); + + piece1.spawns = spawns; + piece2.spawns = spawns; +} + +add_craftable_piece( piecestub, tag_name, can_reuse ) +{ + if ( !isdefined( self.a_piecestubs ) ) + self.a_piecestubs = []; + + if ( isdefined( tag_name ) ) + piecestub.tag_name = tag_name; + + if ( isdefined( can_reuse ) ) + piecestub.can_reuse = can_reuse; + + self.a_piecestubs[self.a_piecestubs.size] = piecestub; +} + +player_drop_piece_on_downed() +{ + self endon( "craftable_piece_released" ); + + self waittill( "bled_out" ); + + onplayerlaststand(); +} + +onplayerlaststand() +{ + piece = self.current_craftable_piece; + + if ( isdefined( piece ) ) + { + return_to_start_pos = 0; + + if ( isdefined( level.safe_place_for_craftable_piece ) ) + { + if ( !self [[ level.safe_place_for_craftable_piece ]]( piece ) ) + return_to_start_pos = 1; + } + + if ( return_to_start_pos ) + piece piece_spawn_at(); + else + piece piece_spawn_at( self.origin + vectorscale( ( 1, 1, 0 ), 5.0 ), self.angles ); + + if ( isdefined( piece.ondrop ) ) + piece [[ piece.ondrop ]]( self ); + + self setclientfieldtoplayer( "craftable", 0 ); + } + + self.current_craftable_piece = undefined; + self notify( "craftable_piece_released" ); +} + +piecestub_get_unitrigger_origin() +{ + if ( isdefined( self.origin_parent ) ) + return self.origin_parent.origin + vectorscale( ( 0, 0, 1 ), 12.0 ); + + return self.origin; +} + +generate_piece_unitrigger( classname, origin, angles, flags, radius = 64, script_height = 64, moving ) +{ + script_width = script_height; + + if ( !isdefined( script_width ) ) + script_width = 64; + + script_length = script_height; + + if ( !isdefined( script_length ) ) + script_length = 64; + + unitrigger_stub = spawnstruct(); + unitrigger_stub.origin = origin; + + if ( isdefined( script_length ) ) + unitrigger_stub.script_length = script_length; + else + unitrigger_stub.script_length = 13.5; + + if ( isdefined( script_width ) ) + unitrigger_stub.script_width = script_width; + else + unitrigger_stub.script_width = 27.5; + + if ( isdefined( script_height ) ) + unitrigger_stub.script_height = script_height; + else + unitrigger_stub.script_height = 24; + + unitrigger_stub.radius = radius; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + unitrigger_stub.hint_string = &"ZOMBIE_BUILD_PIECE_GRAB"; + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.require_look_at = 0; + + switch ( classname ) + { + case "trigger_radius": + unitrigger_stub.script_unitrigger_type = "unitrigger_radius"; + break; + case "trigger_radius_use": + unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + break; + case "trigger_box": + unitrigger_stub.script_unitrigger_type = "unitrigger_box"; + break; + case "trigger_box_use": + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + break; + } + + unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + unitrigger_stub.prompt_and_visibility_func = ::piecetrigger_update_prompt; + unitrigger_stub.originfunc = ::piecestub_get_unitrigger_origin; + unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; + + if ( isdefined( moving ) && moving ) + maps\mp\zombies\_zm_unitrigger::register_unitrigger( unitrigger_stub, ::piece_unitrigger_think ); + else + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::piece_unitrigger_think ); + + return unitrigger_stub; +} + +piecetrigger_update_prompt( player ) +{ + can_use = self.stub piecestub_update_prompt( player ); + self setinvisibletoplayer( player, !can_use ); + self sethintstring( self.stub.hint_string ); + return can_use; +} + +piecestub_update_prompt( player ) +{ + if ( !self anystub_update_prompt( player ) ) + return false; + + if ( isdefined( player.current_craftable_piece ) && !( isdefined( self.piece.is_shared ) && self.piece.is_shared ) ) + { + if ( !level.craftable_piece_swap_allowed ) + self.hint_string = &"ZM_CRAFTABLES_PIECE_NO_SWITCH"; + else + { + spiece = self.piece; + cpiece = player.current_craftable_piece; + + if ( spiece.piecename == cpiece.piecename && spiece.craftablename == cpiece.craftablename ) + { + self.hint_string = ""; + return false; + } + + self.hint_string = &"ZOMBIE_BUILD_PIECE_SWITCH"; + } + } + else + self.hint_string = &"ZOMBIE_BUILD_PIECE_GRAB"; + + return true; +} + +piece_unitrigger_think() +{ + self endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "trigger", player ); + + if ( player != self.parent_player ) + continue; + + if ( isdefined( player.screecher_weapon ) ) + continue; + + if ( !level.craftable_piece_swap_allowed && isdefined( player.current_craftable_piece ) && !( isdefined( self.stub.piece.is_shared ) && self.stub.piece.is_shared ) ) + continue; + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + status = player player_can_take_piece( self.stub.piece ); + + if ( !status ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + } + else + player thread player_take_piece( self.stub.piece ); + } +} + +player_can_take_piece( piece ) +{ + if ( !isdefined( piece ) ) + return false; + + return true; +} + +dbline( from, to ) +{ +/# + time = 20; + + while ( time > 0 ) + { + line( from, to, ( 0, 0, 1 ), 0, 1 ); + time -= 0.05; + wait 0.05; + } +#/ +} + +player_throw_piece( piece, origin, dir, return_to_spawn, return_time, endangles ) +{ + assert( isdefined( piece ) ); + + if ( isdefined( piece ) ) + { +/# + thread dbline( origin, origin + dir ); +#/ + pass = 0; + done = 0; + altmodel = undefined; + + while ( pass < 2 && !done ) + { + grenade = self magicgrenadetype( "buildable_piece_zm", origin, dir, 30000 ); + grenade thread watch_hit_players(); + grenade ghost(); + + if ( !isdefined( altmodel ) ) + { + altmodel = spawn( "script_model", grenade.origin ); + altmodel setmodel( piece.modelname ); + } + + altmodel.origin = grenade.angles; + altmodel.angles = grenade.angles; + altmodel linkto( grenade, "", ( 0, 0, 0 ), ( 0, 0, 0 ) ); + grenade.altmodel = altmodel; + + grenade waittill( "stationary" ); + + grenade_origin = grenade.origin; + grenade_angles = grenade.angles; + landed_on = grenade getgroundent(); + grenade delete(); + + if ( isdefined( landed_on ) && landed_on == level ) + done = 1; + else + { + origin = grenade_origin; + dir = ( dir[0] * -1 / 10, dir[1] * -1 / 10, -1 ); + pass++; + } + } + + if ( !isdefined( endangles ) ) + endangles = grenade_angles; + + piece piece_spawn_at( grenade_origin, endangles ); + + if ( isdefined( altmodel ) ) + altmodel delete(); + + if ( isdefined( piece.ondrop ) ) + piece [[ piece.ondrop ]]( self ); + + if ( isdefined( return_to_spawn ) && return_to_spawn ) + piece piece_wait_and_return( return_time ); + } +} + +watch_hit_players() +{ + self endon( "death" ); + self endon( "stationary" ); + + while ( isdefined( self ) ) + { + self waittill( "grenade_bounce", pos, normal, ent ); + + if ( isplayer( ent ) ) + ent explosiondamage( 25, pos ); + } +} + +piece_wait_and_return( return_time ) +{ + self endon( "pickup" ); + wait 0.15; + + if ( isdefined( level.exploding_jetgun_fx ) ) + playfxontag( level.exploding_jetgun_fx, self.model, "tag_origin" ); + else + playfxontag( level._effect["powerup_on"], self.model, "tag_origin" ); + + wait( return_time - 6 ); + self piece_hide(); + wait 1; + self piece_show(); + wait 1; + self piece_hide(); + wait 1; + self piece_show(); + wait 1; + self piece_hide(); + wait 1; + self piece_show(); + wait 1; + self notify( "respawn" ); + self piece_unspawn(); + self piece_spawn_at(); +} + +player_return_piece_to_original_spawn() +{ + self notify( "craftable_piece_released" ); + piece = self.current_craftable_piece; + self.current_craftable_piece = undefined; + + if ( isdefined( piece ) ) + { + piece piece_spawn_at(); + self setclientfieldtoplayer( "craftable", 0 ); + } +} + +player_drop_piece_on_death() +{ + self notify( "craftable_piece_released" ); + self endon( "craftable_piece_released" ); + self thread player_drop_piece_on_downed(); + origin = self.origin; + angles = self.angles; + piece = self.current_craftable_piece; + + self waittill( "disconnect" ); + + piece piece_spawn_at( origin, angles ); + + if ( isdefined( self ) ) + self setclientfieldtoplayer( "craftable", 0 ); +} + +player_drop_piece( piece = self.current_craftable_piece ) +{ + if ( isdefined( piece ) ) + { + piece.damage = 0; + piece piece_spawn_at( self.origin, self.angles ); + self setclientfieldtoplayer( "craftable", 0 ); + + if ( isdefined( piece.ondrop ) ) + piece [[ piece.ondrop ]]( self ); + } + + self.current_craftable_piece = undefined; + self notify( "craftable_piece_released" ); +} + +player_take_piece( piecespawn ) +{ + piecestub = piecespawn.piecestub; + damage = piecespawn.damage; + + if ( !( isdefined( piecestub.is_shared ) && piecestub.is_shared ) && isdefined( self.current_craftable_piece ) ) + { + other_piece = self.current_craftable_piece; + self player_drop_piece( self.current_craftable_piece ); + other_piece.damage = damage; + self do_player_general_vox( "general", "craft_swap" ); + } + + if ( isdefined( piecestub.onpickup ) ) + piecespawn [[ piecestub.onpickup ]]( self ); + + if ( isdefined( piecestub.is_shared ) && piecestub.is_shared ) + { + if ( isdefined( piecestub.client_field_id ) ) + level setclientfield( piecestub.client_field_id, 1 ); + } + else if ( isdefined( piecestub.client_field_state ) ) + self setclientfieldtoplayer( "craftable", piecestub.client_field_state ); + + piecespawn piece_unspawn(); + piecespawn notify( "pickup" ); + + if ( isdefined( piecestub.is_shared ) && piecestub.is_shared ) + piecespawn.in_shared_inventory = 1; + else + { + self.current_craftable_piece = piecespawn; + self thread player_drop_piece_on_death(); + } + + self track_craftable_piece_pickedup( piecespawn ); +} + +player_destroy_piece( piece = self.current_craftable_piece ) +{ + if ( isdefined( piece ) ) + self setclientfieldtoplayer( "craftable", 0 ); + + self.current_craftable_piece = undefined; + self notify( "craftable_piece_released" ); +} + +claim_location( location ) +{ + if ( !isdefined( level.craftable_claimed_locations ) ) + level.craftable_claimed_locations = []; + + if ( !isdefined( level.craftable_claimed_locations[location] ) ) + { + level.craftable_claimed_locations[location] = 1; + return true; + } + + return false; +} + +is_point_in_craft_trigger( point ) +{ + candidate_list = []; + + foreach ( zone in level.zones ) + { + if ( isdefined( zone.unitrigger_stubs ) ) + candidate_list = arraycombine( candidate_list, zone.unitrigger_stubs, 1, 0 ); + } + + valid_range = 128; + closest = maps\mp\zombies\_zm_unitrigger::get_closest_unitriggers( point, candidate_list, valid_range ); + + for ( index = 0; index < closest.size; index++ ) + { + if ( isdefined( closest[index].registered ) && closest[index].registered && isdefined( closest[index].piece ) ) + return true; + } + + return false; +} + +piece_allocate_spawn( piecestub ) +{ + self.current_spawn = 0; + self.managed_spawn = 1; + self.piecestub = piecestub; + + if ( self.spawns.size >= 1 && self.spawns.size > 1 ) + { + any_good = 0; + any_okay = 0; + totalweight = 0; + spawnweights = []; + + for ( i = 0; i < self.spawns.size; i++ ) + { + if ( isdefined( piecestub.piece_allocated[i] ) && piecestub.piece_allocated[i] ) + spawnweights[i] = 0; + else if ( is_point_in_craft_trigger( self.spawns[i].origin ) ) + { + any_okay = 1; + spawnweights[i] = 0.01; + } + else + { + any_good = 1; + spawnweights[i] = 1.0; + } + + totalweight += spawnweights[i]; + } + + assert( any_good || any_okay, "There is nowhere to spawn this piece" ); + + if ( any_good ) + totalweight = float( int( totalweight ) ); + + r = randomfloat( totalweight ); + + for ( i = 0; i < self.spawns.size; i++ ) + { + if ( !any_good || spawnweights[i] >= 1.0 ) + { + r -= spawnweights[i]; + + if ( r < 0 ) + { + self.current_spawn = i; + piecestub.piece_allocated[self.current_spawn] = 1; + return; + } + } + } + + self.current_spawn = randomint( self.spawns.size ); + piecestub.piece_allocated[self.current_spawn] = 1; + } +} + +piece_deallocate_spawn() +{ + if ( isdefined( self.current_spawn ) ) + { + self.piecestub.piece_allocated[self.current_spawn] = 0; + self.current_spawn = undefined; + } + + self.start_origin = undefined; +} + +piece_pick_random_spawn() +{ + self.current_spawn = 0; + + if ( self.spawns.size >= 1 && self.spawns.size > 1 ) + { + for ( self.current_spawn = randomint( self.spawns.size ); isdefined( self.spawns[self.current_spawn].claim_location ) && !claim_location( self.spawns[self.current_spawn].claim_location ); self.current_spawn = randomint( self.spawns.size ) ) + { + arrayremoveindex( self.spawns, self.current_spawn ); + + if ( self.spawns.size < 1 ) + { + self.current_spawn = 0; +/# + println( "ERROR: All craftable spawn locations claimed" ); +#/ + return; + } + } + } +} + +piece_set_spawn( num ) +{ + self.current_spawn = 0; + + if ( self.spawns.size >= 1 && self.spawns.size > 1 ) + self.current_spawn = int( min( num, self.spawns.size - 1 ) ); +} + +piece_spawn_in( piecestub ) +{ + if ( self.spawns.size < 1 ) + return; + + if ( isdefined( self.managed_spawn ) && self.managed_spawn ) + { + if ( !isdefined( self.current_spawn ) ) + self piece_allocate_spawn( self.piecestub ); + } + + if ( !isdefined( self.current_spawn ) ) + self.current_spawn = 0; + + spawndef = self.spawns[self.current_spawn]; + self.unitrigger = generate_piece_unitrigger( "trigger_radius_use", spawndef.origin + vectorscale( ( 0, 0, 1 ), 12.0 ), spawndef.angles, 0, piecestub.radius, piecestub.height, 0 ); + self.unitrigger.piece = self; + self.radius = piecestub.radius; + self.height = piecestub.height; + self.craftablename = piecestub.craftablename; + self.piecename = piecestub.piecename; + self.modelname = piecestub.modelname; + self.hud_icon = piecestub.hud_icon; + self.tag_name = piecestub.tag_name; + self.drop_offset = piecestub.drop_offset; + self.start_origin = spawndef.origin; + self.start_angles = spawndef.angles; + self.client_field_state = piecestub.client_field_state; + self.is_shared = piecestub.is_shared; + self.model = spawn( "script_model", self.start_origin ); + + if ( isdefined( self.start_angles ) ) + self.model.angles = self.start_angles; + + self.model setmodel( piecestub.modelname ); + + if ( isdefined( piecestub.onspawn ) ) + self [[ piecestub.onspawn ]](); + + self.model ghostindemo(); + self.model.hud_icon = piecestub.hud_icon; + self.piecestub = piecestub; + self.unitrigger.origin_parent = self.model; +} + +piece_spawn_at( origin, angles, use_random_start ) +{ + if ( self.spawns.size < 1 ) + return; + + if ( isdefined( self.managed_spawn ) && self.managed_spawn ) + { + if ( !isdefined( self.current_spawn ) && !isdefined( origin ) ) + { + self piece_allocate_spawn( self.piecestub ); + spawndef = self.spawns[self.current_spawn]; + self.start_origin = spawndef.origin; + self.start_angles = spawndef.angles; + } + } + else if ( !isdefined( self.current_spawn ) ) + self.current_spawn = 0; + + unitrigger_offset = vectorscale( ( 0, 0, 1 ), 12.0 ); + + if ( isdefined( use_random_start ) && use_random_start ) + { + self piece_pick_random_spawn(); + spawndef = self.spawns[self.current_spawn]; + self.start_origin = spawndef.origin; + self.start_angles = spawndef.angles; + origin = spawndef.origin; + angles = spawndef.angles; + } + else + { + if ( !isdefined( origin ) ) + origin = self.start_origin; + else + { + origin += ( 0, 0, self.drop_offset ); + unitrigger_offset -= ( 0, 0, self.drop_offset ); + } + + if ( !isdefined( angles ) ) + angles = self.start_angles; +/# + if ( !isdefined( level.drop_offset ) ) + level.drop_offset = 0; + + origin += ( 0, 0, level.drop_offset ); + unitrigger_offset -= ( 0, 0, level.drop_offset ); +#/ + } + + self.model = spawn( "script_model", origin ); + + if ( isdefined( angles ) ) + self.model.angles = angles; + + self.model setmodel( self.modelname ); + + if ( isdefined( level.equipment_safe_to_drop ) ) + { + if ( ![[ level.equipment_safe_to_drop ]]( self.model ) ) + { + origin = self.start_origin; + angles = self.start_angles; + self.model.origin = origin; + self.model.angles = angles; + } + } + + if ( isdefined( self.onspawn ) ) + self [[ self.onspawn ]](); + + self.unitrigger = generate_piece_unitrigger( "trigger_radius_use", origin + unitrigger_offset, angles, 0, self.radius, self.height, isdefined( self.model.canmove ) && self.model.canmove ); + self.unitrigger.piece = self; + self.model.hud_icon = self.hud_icon; + self.unitrigger.origin_parent = self.model; +} + +piece_unspawn() +{ + if ( isdefined( self.managed_spawn ) && self.managed_spawn ) + self piece_deallocate_spawn(); + + if ( isdefined( self.model ) ) + self.model delete(); + + self.model = undefined; + + if ( isdefined( self.unitrigger ) ) + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger ); + + self.unitrigger = undefined; +} + +piece_hide() +{ + if ( isdefined( self.model ) ) + self.model ghost(); +} + +piece_show() +{ + if ( isdefined( self.model ) ) + self.model show(); +} + +generate_piece( piecestub ) +{ + piecespawn = spawnstruct(); + piecespawn.spawns = piecestub.spawns; + + if ( isdefined( piecestub.managing_pieces ) && piecestub.managing_pieces ) + piecespawn piece_allocate_spawn( piecestub ); + else if ( isdefined( piecestub.use_spawn_num ) ) + piecespawn piece_set_spawn( piecestub.use_spawn_num ); + else + piecespawn piece_pick_random_spawn(); + + piecespawn piece_spawn_in( piecestub ); + + if ( piecespawn.spawns.size >= 1 ) + piecespawn.hud_icon = piecestub.hud_icon; + + if ( isdefined( piecestub.onpickup ) ) + piecespawn.onpickup = piecestub.onpickup; + else + piecespawn.onpickup = ::onpickuputs; + + if ( isdefined( piecestub.ondrop ) ) + piecespawn.ondrop = piecestub.ondrop; + else + piecespawn.ondrop = ::ondroputs; + + if ( isdefined( piecestub.oncrafted ) ) + piecespawn.oncrafted = piecestub.oncrafted; + + return piecespawn; +} + +craftable_piece_unitriggers( craftable_name, origin ) +{ + assert( isdefined( craftable_name ) ); + assert( isdefined( level.zombie_craftablestubs[craftable_name] ), "Called craftable_think() without including the craftable - " + craftable_name ); + craftable = level.zombie_craftablestubs[craftable_name]; + + if ( !isdefined( craftable.a_piecestubs ) ) + craftable.a_piecestubs = []; + + flag_wait( "start_zombie_round_logic" ); + craftablespawn = spawnstruct(); + craftablespawn.craftable_name = craftable_name; + + if ( !isdefined( craftablespawn.a_piecespawns ) ) + craftablespawn.a_piecespawns = []; + + craftablepickups = []; + + foreach ( piecestub in craftable.a_piecestubs ) + { + if ( !isdefined( piecestub.generated_instances ) ) + piecestub.generated_instances = 0; + + if ( isdefined( piecestub.piecespawn ) && ( isdefined( piecestub.can_reuse ) && piecestub.can_reuse ) ) + piece = piecestub.piecespawn; + else if ( piecestub.generated_instances >= piecestub.max_instances ) + piece = piecestub.piecespawn; + else + { + piece = generate_piece( piecestub ); + piecestub.piecespawn = piece; + piecestub.generated_instances++; + } + + craftablespawn.a_piecespawns[craftablespawn.a_piecespawns.size] = piece; + } + + craftablespawn.stub = self; + return craftablespawn; +} + +hide_craftable_table_model( trigger_targetname ) +{ + trig = getent( trigger_targetname, "targetname" ); + + if ( !isdefined( trig ) ) + return; + + if ( isdefined( trig.target ) ) + { + model = getent( trig.target, "targetname" ); + + if ( isdefined( model ) ) + { + model ghost(); + model notsolid(); + } + } +} + +setup_unitrigger_craftable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + trig = getent( trigger_targetname, "targetname" ); + + if ( !isdefined( trig ) ) + return; + + return setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); +} + +setup_unitrigger_craftable_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + triggers = getentarray( trigger_targetname, "targetname" ); + stubs = []; + + foreach ( trig in triggers ) + stubs[stubs.size] = setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); + + return stubs; +} + +setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + if ( !isdefined( trig ) ) + return; + + unitrigger_stub = spawnstruct(); + unitrigger_stub.craftablestub = level.zombie_include_craftables[equipname]; + angles = trig.script_angles; + + if ( !isdefined( angles ) ) + angles = ( 0, 0, 0 ); + + unitrigger_stub.origin = trig.origin + anglestoright( angles ) * -6; + unitrigger_stub.angles = trig.angles; + + if ( isdefined( trig.script_angles ) ) + unitrigger_stub.angles = trig.script_angles; + + unitrigger_stub.equipname = equipname; + unitrigger_stub.weaponname = weaponname; + unitrigger_stub.trigger_hintstring = trigger_hintstring; + unitrigger_stub.delete_trigger = delete_trigger; + unitrigger_stub.crafted = 0; + unitrigger_stub.persistent = persistent; + unitrigger_stub.usetime = int( 3000 ); + unitrigger_stub.onbeginuse = ::onbeginuseuts; + unitrigger_stub.onenduse = ::onenduseuts; + unitrigger_stub.onuse = ::onuseplantobjectuts; + unitrigger_stub.oncantuse = ::oncantuseuts; + + if ( isdefined( trig.script_length ) ) + unitrigger_stub.script_length = trig.script_length; + else + unitrigger_stub.script_length = 32; + + if ( isdefined( trig.script_width ) ) + unitrigger_stub.script_width = trig.script_width; + else + unitrigger_stub.script_width = 100; + + if ( isdefined( trig.script_height ) ) + unitrigger_stub.script_height = trig.script_height; + else + unitrigger_stub.script_height = 64; + + unitrigger_stub.target = trig.target; + unitrigger_stub.targetname = trig.targetname; + unitrigger_stub.script_noteworthy = trig.script_noteworthy; + unitrigger_stub.script_parameters = trig.script_parameters; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + + if ( isdefined( level.zombie_craftablestubs[equipname].str_to_craft ) ) + unitrigger_stub.hint_string = level.zombie_craftablestubs[equipname].str_to_craft; + + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.require_look_at = 1; + unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + + if ( isdefined( unitrigger_stub.craftablestub.custom_craftablestub_update_prompt ) ) + unitrigger_stub.custom_craftablestub_update_prompt = unitrigger_stub.craftablestub.custom_craftablestub_update_prompt; + + unitrigger_stub.prompt_and_visibility_func = ::craftabletrigger_update_prompt; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::craftable_place_think ); + unitrigger_stub.piece_trigger = trig; + trig.trigger_stub = unitrigger_stub; + unitrigger_stub.zombie_weapon_upgrade = trig.zombie_weapon_upgrade; + + if ( isdefined( unitrigger_stub.target ) ) + { + unitrigger_stub.model = getent( unitrigger_stub.target, "targetname" ); + + if ( isdefined( unitrigger_stub.model ) ) + { + if ( isdefined( unitrigger_stub.zombie_weapon_upgrade ) ) + unitrigger_stub.model useweaponhidetags( unitrigger_stub.zombie_weapon_upgrade ); + + unitrigger_stub.model ghost(); + unitrigger_stub.model notsolid(); + } + } + + if ( unitrigger_stub.equipname == "open_table" ) + { + unitrigger_stub.a_uts_open_craftables_available = []; + unitrigger_stub.n_open_craftable_choice = -1; + unitrigger_stub.b_open_craftable_checking_input = 0; + } + + unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( equipname, unitrigger_stub.origin ); + + if ( delete_trigger ) + trig delete(); + + level.a_uts_craftables[level.a_uts_craftables.size] = unitrigger_stub; + return unitrigger_stub; +} + +setup_craftable_pieces() +{ + unitrigger_stub = spawnstruct(); + unitrigger_stub.craftablestub = level.zombie_include_craftables[self.name]; + unitrigger_stub.equipname = self.name; + unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( self.name, unitrigger_stub.origin ); + level.a_uts_craftables[level.a_uts_craftables.size] = unitrigger_stub; + return unitrigger_stub; +} + +craftable_has_piece( piece ) +{ + for ( i = 0; i < self.a_piecespawns.size; i++ ) + { + if ( self.a_piecespawns[i].piecename == piece.piecename && self.a_piecespawns[i].craftablename == piece.craftablename ) + return true; + } + + return false; +} + +get_actual_uts_craftable() +{ + if ( self.craftable_name == "open_table" && self.n_open_craftable_choice != -1 ) + return self.stub.a_uts_open_craftables_available[self.n_open_craftable_choice]; + else + return self.stub; +} + +get_actual_craftablespawn() +{ + if ( self.craftable_name == "open_table" && self.stub.n_open_craftable_choice != -1 && isdefined( self.stub.a_uts_open_craftables_available[self.stub.n_open_craftable_choice].craftablespawn ) ) + return self.stub.a_uts_open_craftables_available[self.stub.n_open_craftable_choice].craftablespawn; + else + return self; +} + +craftable_can_use_shared_piece() +{ + uts_craftable = self.stub; + + if ( isdefined( uts_craftable.n_open_craftable_choice ) && uts_craftable.n_open_craftable_choice != -1 && isdefined( uts_craftable.a_uts_open_craftables_available[uts_craftable.n_open_craftable_choice] ) ) + return true; + + if ( isdefined( uts_craftable.craftablestub.need_all_pieces ) && uts_craftable.craftablestub.need_all_pieces ) + { + foreach ( piece in self.a_piecespawns ) + { + if ( !( isdefined( piece.in_shared_inventory ) && piece.in_shared_inventory ) ) + return false; + } + + return true; + } + else + { + foreach ( piece in self.a_piecespawns ) + { + if ( !( isdefined( piece.crafted ) && piece.crafted ) && ( isdefined( piece.in_shared_inventory ) && piece.in_shared_inventory ) ) + return true; + } + } + + return false; +} + +craftable_set_piece_crafted( piecespawn_check, player ) +{ + craftablespawn_check = get_actual_craftablespawn(); + + foreach ( piecespawn in craftablespawn_check.a_piecespawns ) + { + if ( isdefined( piecespawn_check ) ) + { + if ( piecespawn.piecename == piecespawn_check.piecename && piecespawn.craftablename == piecespawn_check.craftablename ) + { + piecespawn.crafted = 1; + + if ( isdefined( piecespawn.oncrafted ) ) + piecespawn thread [[ piecespawn.oncrafted ]]( player ); + + continue; + } + } + + if ( isdefined( piecespawn.is_shared ) && piecespawn.is_shared && ( isdefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) ) + { + piecespawn.crafted = 1; + + if ( isdefined( piecespawn.oncrafted ) ) + piecespawn thread [[ piecespawn.oncrafted ]]( player ); + + piecespawn.in_shared_inventory = 0; + } + } +} + +craftable_set_piece_crafting( piecespawn_check ) +{ + craftablespawn_check = get_actual_craftablespawn(); + + foreach ( piecespawn in craftablespawn_check.a_piecespawns ) + { + if ( isdefined( piecespawn_check ) ) + { + if ( piecespawn.piecename == piecespawn_check.piecename && piecespawn.craftablename == piecespawn_check.craftablename ) + piecespawn.crafting = 1; + } + + if ( isdefined( piecespawn.is_shared ) && piecespawn.is_shared && ( isdefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) ) + piecespawn.crafting = 1; + } +} + +craftable_clear_piece_crafting( piecespawn_check ) +{ + if ( isdefined( piecespawn_check ) ) + piecespawn_check.crafting = 0; + + craftablespawn_check = get_actual_craftablespawn(); + + foreach ( piecespawn in craftablespawn_check.a_piecespawns ) + { + if ( isdefined( piecespawn.is_shared ) && piecespawn.is_shared && ( isdefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) ) + piecespawn.crafting = 0; + } +} + +craftable_is_piece_crafted( piece ) +{ + for ( i = 0; i < self.a_piecespawns.size; i++ ) + { + if ( self.a_piecespawns[i].piecename == piece.piecename && self.a_piecespawns[i].craftablename == piece.craftablename ) + return isdefined( self.a_piecespawns[i].crafted ) && self.a_piecespawns[i].crafted; + } + + return 0; +} + +craftable_is_piece_crafting( piecespawn_check ) +{ + craftablespawn_check = get_actual_craftablespawn(); + + foreach ( piecespawn in craftablespawn_check.a_piecespawns ) + { + if ( isdefined( piecespawn_check ) ) + { + if ( piecespawn.piecename == piecespawn_check.piecename && piecespawn.craftablename == piecespawn_check.craftablename ) + return piecespawn.crafting; + } + + if ( isdefined( piecespawn.is_shared ) && piecespawn.is_shared && ( isdefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) && ( isdefined( piecespawn.crafting ) && piecespawn.crafting ) ) + return 1; + } + + return 0; +} + +craftable_is_piece_crafted_or_crafting( piece ) +{ + for ( i = 0; i < self.a_piecespawns.size; i++ ) + { + if ( self.a_piecespawns[i].piecename == piece.piecename && self.a_piecespawns[i].craftablename == piece.craftablename ) + return isdefined( self.a_piecespawns[i].crafted ) && self.a_piecespawns[i].crafted || isdefined( self.a_piecespawns[i].crafting ) && self.a_piecespawns[i].crafting; + } + + return 0; +} + +craftable_all_crafted() +{ + for ( i = 0; i < self.a_piecespawns.size; i++ ) + { + if ( !( isdefined( self.a_piecespawns[i].crafted ) && self.a_piecespawns[i].crafted ) ) + return false; + } + + return true; +} + +waittill_crafted( craftable_name ) +{ + level waittill( craftable_name + "_crafted", player ); + + return player; +} + +player_can_craft( craftablespawn, continuing ) +{ + if ( !isdefined( craftablespawn ) ) + return false; + + if ( !craftablespawn craftable_can_use_shared_piece() ) + { + if ( !isdefined( self.current_craftable_piece ) ) + return false; + + if ( !craftablespawn craftable_has_piece( self.current_craftable_piece ) ) + return false; + + if ( isdefined( continuing ) && continuing ) + { + if ( craftablespawn craftable_is_piece_crafted( self.current_craftable_piece ) ) + return false; + } + else if ( craftablespawn craftable_is_piece_crafted_or_crafting( self.current_craftable_piece ) ) + return false; + } + + if ( isdefined( craftablespawn.stub ) && isdefined( craftablespawn.stub.custom_craftablestub_update_prompt ) && isdefined( craftablespawn.stub.playertrigger[0] ) && isdefined( craftablespawn.stub.playertrigger[0].stub ) && !craftablespawn.stub.playertrigger[0].stub [[ craftablespawn.stub.custom_craftablestub_update_prompt ]]( self, 1, craftablespawn.stub.playertrigger[self getentitynumber()] ) ) + return false; + + return true; +} + +craftable_transfer_data() +{ + uts_craftable = self.stub; + + if ( uts_craftable.n_open_craftable_choice == -1 || !isdefined( uts_craftable.a_uts_open_craftables_available[uts_craftable.n_open_craftable_choice] ) ) + return; + + uts_source = uts_craftable.a_uts_open_craftables_available[uts_craftable.n_open_craftable_choice]; + uts_target = uts_craftable; + uts_target.craftablestub = uts_source.craftablestub; + uts_target.craftablespawn = uts_source.craftablespawn; + uts_target.crafted = uts_source.crafted; + uts_target.cursor_hint = uts_source.cursor_hint; + uts_target.custom_craftable_update_prompt = uts_source.custom_craftable_update_prompt; + uts_target.equipname = uts_source.equipname; + uts_target.hint_string = uts_source.hint_string; + uts_target.persistent = uts_source.persistent; + uts_target.prompt_and_visibility_func = uts_source.prompt_and_visibility_func; + uts_target.trigger_func = uts_source.trigger_func; + uts_target.trigger_hintstring = uts_source.trigger_hintstring; + uts_target.weaponname = uts_source.weaponname; + uts_target.craftablespawn.stub = uts_target; + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( uts_source ); + uts_source craftablestub_remove(); + return uts_target; +} + +player_craft( craftablespawn ) +{ + craftablespawn craftable_set_piece_crafted( self.current_craftable_piece, self ); + + if ( isdefined( self.current_craftable_piece ) && ( isdefined( self.current_craftable_piece.crafted ) && self.current_craftable_piece.crafted ) ) + player_destroy_piece( self.current_craftable_piece ); + + if ( isdefined( craftablespawn.stub.n_open_craftable_choice ) ) + { + uts_craftable = craftablespawn craftable_transfer_data(); + craftablespawn = uts_craftable.craftablespawn; + update_open_table_status(); + } + else + uts_craftable = craftablespawn.stub; + + if ( !isdefined( uts_craftable.model ) && isdefined( uts_craftable.craftablestub.str_model ) ) + { + craftablestub = uts_craftable.craftablestub; + s_model = getstruct( uts_craftable.target, "targetname" ); + + if ( isdefined( s_model ) ) + { + m_spawn = spawn( "script_model", s_model.origin ); + + if ( isdefined( craftablestub.v_origin_offset ) ) + m_spawn.origin += craftablestub.v_origin_offset; + + m_spawn.angles = s_model.angles; + + if ( isdefined( craftablestub.v_angle_offset ) ) + m_spawn.angles += craftablestub.v_angle_offset; + + m_spawn setmodel( craftablestub.str_model ); + uts_craftable.model = m_spawn; + } + } + + if ( isdefined( uts_craftable.model ) ) + { + for ( i = 0; i < craftablespawn.a_piecespawns.size; i++ ) + { + if ( isdefined( craftablespawn.a_piecespawns[i].tag_name ) ) + { + uts_craftable.model notsolid(); + + if ( !( isdefined( craftablespawn.a_piecespawns[i].crafted ) && craftablespawn.a_piecespawns[i].crafted ) ) + { + uts_craftable.model hidepart( craftablespawn.a_piecespawns[i].tag_name ); + continue; + } + + uts_craftable.model show(); + uts_craftable.model showpart( craftablespawn.a_piecespawns[i].tag_name ); + } + } + } + + self track_craftable_pieces_crafted( craftablespawn ); + + if ( craftablespawn craftable_all_crafted() ) + { + self player_finish_craftable( craftablespawn ); + self track_craftables_crafted( craftablespawn ); + + if ( isdefined( level.craftable_crafted_custom_func ) ) + self thread [[ level.craftable_crafted_custom_func ]]( craftablespawn ); + + self playsound( "zmb_buildable_complete" ); + } + else + { + self playsound( "zmb_buildable_piece_add" ); + assert( isdefined( level.zombie_craftablestubs[craftablespawn.craftable_name].str_crafting ), "Missing builing hint" ); + + if ( isdefined( level.zombie_craftablestubs[craftablespawn.craftable_name].str_crafting ) ) + return level.zombie_craftablestubs[craftablespawn.craftable_name].str_crafting; + } + + return ""; +} + +update_open_table_status() +{ + b_open_craftables_remaining = 0; + + foreach ( uts_craftable in level.a_uts_craftables ) + { + if ( isdefined( level.zombie_include_craftables[uts_craftable.equipname] ) && ( isdefined( level.zombie_include_craftables[uts_craftable.equipname].is_open_table ) && level.zombie_include_craftables[uts_craftable.equipname].is_open_table ) ) + { + b_piece_crafted = 0; + + foreach ( piecespawn in uts_craftable.craftablespawn.a_piecespawns ) + { + if ( isdefined( piecespawn.crafted ) && piecespawn.crafted ) + { + b_piece_crafted = 1; + break; + } + } + + if ( !b_piece_crafted ) + b_open_craftables_remaining = 1; + } + } + + if ( !b_open_craftables_remaining ) + { + foreach ( uts_craftable in level.a_uts_craftables ) + { + if ( uts_craftable.equipname == "open_table" ) + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( uts_craftable ); + } + } +} + +player_finish_craftable( craftablespawn ) +{ + craftablespawn.crafted = 1; + craftablespawn.stub.crafted = 1; + craftablespawn notify( "crafted", self ); + level.craftables_crafted[craftablespawn.craftable_name] = 1; + level notify( craftablespawn.craftable_name + "_crafted", self ); +} + +complete_craftable( str_craftable_name ) +{ + foreach ( uts_craftable in level.a_uts_craftables ) + { + if ( uts_craftable.craftablestub.name == str_craftable_name ) + { + player = getplayers()[0]; + player player_finish_craftable( uts_craftable.craftablespawn ); + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( uts_craftable ); + + if ( isdefined( uts_craftable.craftablestub.onfullycrafted ) ) + uts_craftable [[ uts_craftable.craftablestub.onfullycrafted ]](); + + return; + } + } +} + +craftablestub_remove() +{ + arrayremovevalue( level.a_uts_craftables, self ); +} + +craftabletrigger_update_prompt( player ) +{ + can_use = self.stub craftablestub_update_prompt( player ); + self sethintstring( self.stub.hint_string ); + return can_use; +} + +craftablestub_update_prompt( player, unitrigger ) +{ + if ( !self anystub_update_prompt( player ) ) + return false; + + if ( isdefined( self.is_locked ) && self.is_locked ) + return true; + + can_use = 1; + + if ( isdefined( self.custom_craftablestub_update_prompt ) && !self [[ self.custom_craftablestub_update_prompt ]]( player ) ) + return false; + + if ( !( isdefined( self.crafted ) && self.crafted ) ) + { + if ( !self.craftablespawn craftable_can_use_shared_piece() ) + { + if ( !isdefined( player.current_craftable_piece ) ) + { + self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE"; + return false; + } + else if ( !self.craftablespawn craftable_has_piece( player.current_craftable_piece ) ) + { + self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG"; + return false; + } + } + + assert( isdefined( level.zombie_craftablestubs[self.equipname].str_to_craft ), "Missing craftable hint" ); + self.hint_string = level.zombie_craftablestubs[self.equipname].str_to_craft; + } + else if ( self.persistent == 1 ) + { + if ( maps\mp\zombies\_zm_equipment::is_limited_equipment( self.weaponname ) && maps\mp\zombies\_zm_equipment::limited_equipment_in_use( self.weaponname ) ) + { + self.hint_string = &"ZOMBIE_BUILD_PIECE_ONLY_ONE"; + return false; + } + + if ( player has_player_equipment( self.weaponname ) ) + { + self.hint_string = &"ZOMBIE_BUILD_PIECE_HAVE_ONE"; + return false; + } + + self.hint_string = self.trigger_hintstring; + } + else if ( self.persistent == 2 ) + { + if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.weaponname, undefined ) ) + { + self.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; + return false; + } + else if ( isdefined( self.str_taken ) && self.str_taken ) + { + self.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; + return false; + } + + self.hint_string = self.trigger_hintstring; + } + else + { + self.hint_string = ""; + return false; + } + + return true; +} + +choose_open_craftable( player ) +{ + self endon( "kill_choose_open_craftable" ); + n_playernum = player getentitynumber(); + self.b_open_craftable_checking_input = 1; + b_got_input = 1; + hinttexthudelem = newclienthudelem( player ); + hinttexthudelem.alignx = "center"; + hinttexthudelem.aligny = "middle"; + hinttexthudelem.horzalign = "center"; + hinttexthudelem.vertalign = "bottom"; + hinttexthudelem.y = -100; + + if ( player issplitscreen() ) + hinttexthudelem.y = -50; + + hinttexthudelem.foreground = 1; + hinttexthudelem.font = "default"; + hinttexthudelem.fontscale = 1.0; + hinttexthudelem.alpha = 1; + hinttexthudelem.color = ( 1, 1, 1 ); + hinttexthudelem settext( &"ZM_CRAFTABLES_CHANGE_BUILD" ); + + if ( !isdefined( self.opencraftablehudelem ) ) + self.opencraftablehudelem = []; + + self.opencraftablehudelem[n_playernum] = hinttexthudelem; + + while ( isdefined( self.playertrigger[n_playernum] ) && !self.crafted ) + { + if ( player actionslotonebuttonpressed() ) + { + self.n_open_craftable_choice++; + b_got_input = 1; + } + else if ( player actionslottwobuttonpressed() ) + { + self.n_open_craftable_choice--; + b_got_input = 1; + } + + if ( self.n_open_craftable_choice >= self.a_uts_open_craftables_available.size ) + self.n_open_craftable_choice = 0; + else if ( self.n_open_craftable_choice < 0 ) + self.n_open_craftable_choice = self.a_uts_open_craftables_available.size - 1; + + if ( b_got_input ) + { + self.equipname = self.a_uts_open_craftables_available[self.n_open_craftable_choice].equipname; + self.hint_string = self.a_uts_open_craftables_available[self.n_open_craftable_choice].hint_string; + self.playertrigger[n_playernum] sethintstring( self.hint_string ); + b_got_input = 0; + } + + if ( player is_player_looking_at( self.playertrigger[n_playernum].origin, 0.76 ) ) + self.opencraftablehudelem[n_playernum].alpha = 1; + else + self.opencraftablehudelem[n_playernum].alpha = 0; + + wait 0.05; + } + + self.b_open_craftable_checking_input = 0; + self.opencraftablehudelem[n_playernum] destroy(); + self.opencraftablehudelem[n_playernum] = undefined; +} + +open_craftablestub_update_prompt( player ) +{ + if ( !( isdefined( self.crafted ) && self.crafted ) ) + { + self.a_uts_open_craftables_available = []; + + foreach ( uts_craftable in level.a_uts_craftables ) + { + if ( isdefined( uts_craftable.craftablestub.is_open_table ) && uts_craftable.craftablestub.is_open_table && !( isdefined( uts_craftable.crafted ) && uts_craftable.crafted ) && uts_craftable.craftablespawn.craftable_name != "open_table" && uts_craftable.craftablespawn craftable_can_use_shared_piece() ) + self.a_uts_open_craftables_available[self.a_uts_open_craftables_available.size] = uts_craftable; + } + + if ( self.a_uts_open_craftables_available.size < 2 ) + { + self notify( "kill_choose_open_craftable" ); + self.b_open_craftable_checking_input = 0; + n_entitynum = player getentitynumber(); + + if ( isdefined( self.opencraftablehudelem ) && isdefined( self.opencraftablehudelem[n_entitynum] ) ) + { + self.opencraftablehudelem[n_entitynum] destroy(); + self.opencraftablehudelem[n_entitynum] = undefined; + } + } + + switch ( self.a_uts_open_craftables_available.size ) + { + case 0: + if ( !isdefined( player.current_craftable_piece ) ) + { + self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE"; + self.n_open_craftable_choice = -1; + return false; + } + + break; + case 1: + self.n_open_craftable_choice = 0; + self.equipname = self.a_uts_open_craftables_available[self.n_open_craftable_choice].equipname; + return true; + default: + if ( !self.b_open_craftable_checking_input ) + thread choose_open_craftable( player ); + + return true; + } + } + else if ( self.persistent == 1 || self.persistent == 2 && !( isdefined( self.bought ) && self.bought ) ) + return true; + + return false; +} + +player_continue_crafting( craftablespawn ) +{ + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || self in_revive_trigger() ) + return false; + + if ( !self player_can_craft( craftablespawn, 1 ) ) + return false; + + if ( isdefined( self.screecher ) ) + return false; + + if ( !self usebuttonpressed() ) + return false; + + if ( !craftablespawn craftable_is_piece_crafting( self.current_craftable_piece ) ) + return false; + + trigger = craftablespawn.stub maps\mp\zombies\_zm_unitrigger::unitrigger_trigger( self ); + + if ( craftablespawn.stub.script_unitrigger_type == "unitrigger_radius_use" ) + { + torigin = craftablespawn.stub unitrigger_origin(); + porigin = self geteye(); + radius_sq = 2.25 * craftablespawn.stub.radius * craftablespawn.stub.radius; + + if ( distance2dsquared( torigin, porigin ) > radius_sq ) + return false; + } + else if ( !isdefined( trigger ) || !trigger istouching( self ) ) + return false; + + if ( isdefined( craftablespawn.stub.require_look_at ) && craftablespawn.stub.require_look_at && !self is_player_looking_at( trigger.origin, 0.76 ) ) + return false; + + return true; +} + +player_progress_bar_update( start_time, craft_time ) +{ + self endon( "entering_last_stand" ); + self endon( "death" ); + self endon( "disconnect" ); + self endon( "craftable_progress_end" ); + + while ( isdefined( self ) && gettime() - start_time < craft_time ) + { + progress = ( gettime() - start_time ) / craft_time; + + if ( progress < 0 ) + progress = 0; + + if ( progress > 1 ) + progress = 1; + + self.usebar updatebar( progress ); + wait 0.05; + } +} + +player_progress_bar( start_time, craft_time ) +{ + self.usebar = self createprimaryprogressbar(); + self.usebartext = self createprimaryprogressbartext(); + self.usebartext settext( &"ZOMBIE_BUILDING" ); + + if ( isdefined( self ) && isdefined( start_time ) && isdefined( craft_time ) ) + self player_progress_bar_update( start_time, craft_time ); + + self.usebartext destroyelem(); + self.usebar destroyelem(); +} + +craftable_use_hold_think_internal( player ) +{ + wait 0.01; + + if ( !isdefined( self ) ) + { + self notify( "craft_failed" ); + + if ( isdefined( player.craftableaudio ) ) + { + player.craftableaudio delete(); + player.craftableaudio = undefined; + } + + return; + } + + if ( !isdefined( self.usetime ) ) + self.usetime = int( 3000 ); + + self.craft_time = self.usetime; + self.craft_start_time = gettime(); + craft_time = self.craft_time; + craft_start_time = self.craft_start_time; + player disable_player_move_states( 1 ); + player increment_is_drinking(); + orgweapon = player getcurrentweapon(); + player giveweapon( "zombie_builder_zm" ); + player switchtoweapon( "zombie_builder_zm" ); + self.stub.craftablespawn craftable_set_piece_crafting( player.current_craftable_piece ); + player thread player_progress_bar( craft_start_time, craft_time ); + + if ( isdefined( level.craftable_craft_custom_func ) ) + player thread [[ level.craftable_craft_custom_func ]]( self.stub ); + + while ( isdefined( self ) && player player_continue_crafting( self.stub.craftablespawn ) && gettime() - self.craft_start_time < self.craft_time ) + wait 0.05; + + player notify( "craftable_progress_end" ); + player maps\mp\zombies\_zm_weapons::switch_back_primary_weapon( orgweapon ); + player takeweapon( "zombie_builder_zm" ); + + if ( isdefined( player.is_drinking ) && player.is_drinking ) + player decrement_is_drinking(); + + player enable_player_move_states(); + + if ( isdefined( self ) && player player_continue_crafting( self.stub.craftablespawn ) && gettime() - self.craft_start_time >= self.craft_time ) + { + self.stub.craftablespawn craftable_clear_piece_crafting( player.current_craftable_piece ); + self notify( "craft_succeed" ); + } + else + { + if ( isdefined( player.craftableaudio ) ) + { + player.craftableaudio delete(); + player.craftableaudio = undefined; + } + + self.stub.craftablespawn craftable_clear_piece_crafting( player.current_craftable_piece ); + self notify( "craft_failed" ); + } +} + +craftable_play_craft_fx( player ) +{ + self endon( "kill_trigger" ); + self endon( "craft_succeed" ); + self endon( "craft_failed" ); + + while ( true ) + { + playfx( level._effect["building_dust"], player getplayercamerapos(), player.angles ); + wait 0.5; + } +} + +craftable_use_hold_think( player ) +{ + self thread craftable_play_craft_fx( player ); + self thread craftable_use_hold_think_internal( player ); + retval = self waittill_any_return( "craft_succeed", "craft_failed" ); + + if ( retval == "craft_succeed" ) + return true; + + return false; +} + +craftable_place_think() +{ + self endon( "kill_trigger" ); + player_crafted = undefined; + + while ( !( isdefined( self.stub.crafted ) && self.stub.crafted ) ) + { + self waittill( "trigger", player ); + + if ( isdefined( level.custom_craftable_validation ) ) + { + valid = self [[ level.custom_craftable_validation ]]( player ); + + if ( !valid ) + continue; + } + + if ( player != self.parent_player ) + continue; + + if ( isdefined( player.screecher_weapon ) ) + continue; + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + status = player player_can_craft( self.stub.craftablespawn ); + + if ( !status ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + + if ( isdefined( self.stub.oncantuse ) ) + self.stub [[ self.stub.oncantuse ]]( player ); + } + else + { + if ( isdefined( self.stub.onbeginuse ) ) + self.stub [[ self.stub.onbeginuse ]]( player ); + + result = self craftable_use_hold_think( player ); + team = player.pers["team"]; + + if ( isdefined( self.stub.onenduse ) ) + self.stub [[ self.stub.onenduse ]]( team, player, result ); + + if ( !result ) + continue; + + if ( isdefined( self.stub.onuse ) ) + self.stub [[ self.stub.onuse ]]( player ); + + prompt = player player_craft( self.stub.craftablespawn ); + player_crafted = player; + self.stub.hint_string = prompt; + self sethintstring( self.stub.hint_string ); + } + } + + if ( isdefined( self.stub.craftablestub.onfullycrafted ) ) + { + b_result = self.stub [[ self.stub.craftablestub.onfullycrafted ]](); + + if ( !b_result ) + return; + } + + if ( isdefined( player_crafted ) ) + { + + } + + if ( self.stub.persistent == 0 ) + { + self.stub craftablestub_remove(); + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub ); + return; + } + + if ( self.stub.persistent == 3 ) + { + stub_uncraft_craftable( self.stub, 1 ); + return; + } + + if ( self.stub.persistent == 2 ) + { + if ( isdefined( player_crafted ) ) + self craftabletrigger_update_prompt( player_crafted ); + + if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) + { + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; + self sethintstring( self.stub.hint_string ); + return; + } + + if ( isdefined( self.stub.str_taken ) && self.stub.str_taken ) + { + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; + self sethintstring( self.stub.hint_string ); + return; + } + + if ( isdefined( self.stub.model ) ) + { + self.stub.model notsolid(); + self.stub.model show(); + } + + while ( self.stub.persistent == 2 ) + { + self waittill( "trigger", player ); + + if ( isdefined( player.screecher_weapon ) ) + continue; + + if ( isdefined( level.custom_craftable_validation ) ) + { + valid = self [[ level.custom_craftable_validation ]]( player ); + + if ( !valid ) + continue; + } + + if ( !( isdefined( self.stub.crafted ) && self.stub.crafted ) ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + return; + } + + if ( player != self.parent_player ) + continue; + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + self.stub.bought = 1; + + if ( isdefined( self.stub.model ) ) + self.stub.model thread model_fly_away( self ); + + player maps\mp\zombies\_zm_weapons::weapon_give( self.stub.weaponname ); + + if ( isdefined( level.zombie_include_craftables[self.stub.equipname].onbuyweapon ) ) + self [[ level.zombie_include_craftables[self.stub.equipname].onbuyweapon ]]( player ); + + if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; + else + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; + + self sethintstring( self.stub.hint_string ); + player track_craftables_pickedup( self.stub.craftablespawn ); + } + } + else if ( !isdefined( player_crafted ) || self craftabletrigger_update_prompt( player_crafted ) ) + { + if ( isdefined( self.stub.model ) ) + { + self.stub.model notsolid(); + self.stub.model show(); + } + + while ( self.stub.persistent == 1 ) + { + self waittill( "trigger", player ); + + if ( isdefined( player.screecher_weapon ) ) + continue; + + if ( isdefined( level.custom_craftable_validation ) ) + { + valid = self [[ level.custom_craftable_validation ]]( player ); + + if ( !valid ) + continue; + } + + if ( !( isdefined( self.stub.crafted ) && self.stub.crafted ) ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + return; + } + + if ( player != self.parent_player ) + continue; + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + if ( player has_player_equipment( self.stub.weaponname ) ) + continue; + + if ( isdefined( level.zombie_craftable_persistent_weapon ) ) + { + if ( self [[ level.zombie_craftable_persistent_weapon ]]( player ) ) + continue; + } + + if ( isdefined( level.zombie_custom_equipment_setup ) ) + { + if ( self [[ level.zombie_custom_equipment_setup ]]( player ) ) + continue; + } + + if ( !maps\mp\zombies\_zm_equipment::is_limited_equipment( self.stub.weaponname ) || !maps\mp\zombies\_zm_equipment::limited_equipment_in_use( self.stub.weaponname ) ) + { + player maps\mp\zombies\_zm_equipment::equipment_buy( self.stub.weaponname ); + player giveweapon( self.stub.weaponname ); + player setweaponammoclip( self.stub.weaponname, 1 ); + + if ( isdefined( level.zombie_include_craftables[self.stub.equipname].onbuyweapon ) ) + self [[ level.zombie_include_craftables[self.stub.equipname].onbuyweapon ]]( player ); + else if ( self.stub.weaponname != "keys_zm" ) + player setactionslot( 1, "weapon", self.stub.weaponname ); + + if ( isdefined( level.zombie_craftablestubs[self.stub.equipname].str_taken ) ) + self.stub.hint_string = level.zombie_craftablestubs[self.stub.equipname].str_taken; + else + self.stub.hint_string = ""; + + self sethintstring( self.stub.hint_string ); + player track_craftables_pickedup( self.stub.craftablespawn ); + } + else + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + } + } + } +} + +model_fly_away( unitrigger ) +{ + self moveto( self.origin + vectorscale( ( 0, 0, 1 ), 40.0 ), 3 ); + direction = self.origin; + direction = ( direction[1], direction[0], 0 ); + + if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 ) + direction = ( direction[0], direction[1] * -1, 0 ); + else if ( direction[0] < 0 ) + direction = ( direction[0] * -1, direction[1], 0 ); + + self vibrate( direction, 10, 0.5, 4 ); + + self waittill( "movedone" ); + + self ghost(); + playfx( level._effect["poltergeist"], self.origin ); +} + +find_craftable_stub( equipname ) +{ + foreach ( stub in level.a_uts_craftables ) + { + if ( stub.equipname == equipname ) + return stub; + } + + return undefined; +} + +uncraft_craftable( equipname, return_pieces, origin, angles ) +{ + stub = find_craftable_stub( equipname ); + stub_uncraft_craftable( stub, return_pieces, origin, angles ); +} + +stub_uncraft_craftable( stub, return_pieces, origin, angles, use_random_start ) +{ + if ( isdefined( stub ) ) + { + craftable = stub.craftablespawn; + craftable.crafted = 0; + craftable.stub.crafted = 0; + craftable notify( "uncrafted" ); + level.craftables_crafted[craftable.craftable_name] = 0; + level notify( craftable.craftable_name + "_uncrafted" ); + + for ( i = 0; i < craftable.a_piecespawns.size; i++ ) + { + craftable.a_piecespawns[i].crafted = 0; + + if ( isdefined( craftable.a_piecespawns[i].tag_name ) ) + { + craftable.stub.model notsolid(); + + if ( !( isdefined( craftable.a_piecespawns[i].crafted ) && craftable.a_piecespawns[i].crafted ) ) + craftable.stub.model hidepart( craftable.a_piecespawns[i].tag_name ); + else + { + craftable.stub.model show(); + craftable.stub.model showpart( craftable.a_piecespawns[i].tag_name ); + } + } + + if ( isdefined( return_pieces ) && return_pieces ) + craftable.a_piecespawns[i] piece_spawn_at( origin, angles, use_random_start ); + } + + if ( isdefined( craftable.stub.model ) ) + craftable.stub.model ghost(); + } +} + +player_explode_craftable( equipname, origin, speed, return_to_spawn, return_time ) +{ + self explosiondamage( 50, origin ); + stub = find_craftable_stub( equipname ); + + if ( isdefined( stub ) ) + { + craftable = stub.craftablespawn; + craftable.crafted = 0; + craftable.stub.crafted = 0; + craftable notify( "uncrafted" ); + level.craftables_crafted[craftable.craftable_name] = 0; + level notify( craftable.craftable_name + "_uncrafted" ); + + for ( i = 0; i < craftable.a_piecespawns.size; i++ ) + { + craftable.a_piecespawns[i].crafted = 0; + + if ( isdefined( craftable.a_piecespawns[i].tag_name ) ) + { + craftable.stub.model notsolid(); + + if ( !( isdefined( craftable.a_piecespawns[i].crafted ) && craftable.a_piecespawns[i].crafted ) ) + craftable.stub.model hidepart( craftable.a_piecespawns[i].tag_name ); + else + { + craftable.stub.model show(); + craftable.stub.model showpart( craftable.a_piecespawns[i].tag_name ); + } + } + + ang = randomfloat( 360 ); + h = 0.25 + randomfloat( 0.5 ); + dir = ( sin( ang ), cos( ang ), h ); + self thread player_throw_piece( craftable.a_piecespawns[i], origin, speed * dir, return_to_spawn, return_time ); + } + + craftable.stub.model ghost(); + } +} + +think_craftables() +{ + foreach ( craftable in level.zombie_include_craftables ) + { + if ( isdefined( craftable.triggerthink ) ) + craftable [[ craftable.triggerthink ]](); + } +} + +opentablecraftable() +{ + a_trigs = getentarray( "open_craftable_trigger", "targetname" ); + + foreach ( trig in a_trigs ) + setup_unitrigger_craftable_internal( trig, "open_table", "", "OPEN_CRAFTABLE", 1, 0 ); +} + +craftable_trigger_think( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + return setup_unitrigger_craftable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); +} + +craftable_trigger_think_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + return setup_unitrigger_craftable_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); +} + +setup_vehicle_unitrigger_craftable( parent, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + trig = getent( trigger_targetname, "targetname" ); + + if ( !isdefined( trig ) ) + return; + + unitrigger_stub = spawnstruct(); + unitrigger_stub.craftablestub = level.zombie_include_craftables[equipname]; + unitrigger_stub.link_parent = parent; + unitrigger_stub.origin_parent = trig; + unitrigger_stub.trigger_targetname = trigger_targetname; + unitrigger_stub.originfunc = ::anystub_get_unitrigger_origin; + unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; + unitrigger_stub.origin = trig.origin; + unitrigger_stub.angles = trig.angles; + unitrigger_stub.equipname = equipname; + unitrigger_stub.weaponname = weaponname; + unitrigger_stub.trigger_hintstring = trigger_hintstring; + unitrigger_stub.delete_trigger = delete_trigger; + unitrigger_stub.crafted = 0; + unitrigger_stub.persistent = persistent; + unitrigger_stub.usetime = int( 3000 ); + unitrigger_stub.onbeginuse = ::onbeginuseuts; + unitrigger_stub.onenduse = ::onenduseuts; + unitrigger_stub.onuse = ::onuseplantobjectuts; + unitrigger_stub.oncantuse = ::oncantuseuts; + + if ( isdefined( trig.script_length ) ) + unitrigger_stub.script_length = trig.script_length; + else + unitrigger_stub.script_length = 24; + + if ( isdefined( trig.script_width ) ) + unitrigger_stub.script_width = trig.script_width; + else + unitrigger_stub.script_width = 64; + + if ( isdefined( trig.script_height ) ) + unitrigger_stub.script_height = trig.script_height; + else + unitrigger_stub.script_height = 24; + + if ( isdefined( trig.radius ) ) + unitrigger_stub.radius = trig.radius; + else + unitrigger_stub.radius = 64; + + unitrigger_stub.target = trig.target; + unitrigger_stub.targetname = trig.targetname + "_trigger"; + unitrigger_stub.script_noteworthy = trig.script_noteworthy; + unitrigger_stub.script_parameters = trig.script_parameters; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + + if ( isdefined( level.zombie_craftablestubs[equipname].str_to_craft ) ) + unitrigger_stub.hint_string = level.zombie_craftablestubs[equipname].str_to_craft; + + unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + unitrigger_stub.require_look_at = 1; + unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + unitrigger_stub.prompt_and_visibility_func = ::craftabletrigger_update_prompt; + maps\mp\zombies\_zm_unitrigger::register_unitrigger( unitrigger_stub, ::craftable_place_think ); + unitrigger_stub.piece_trigger = trig; + trig.trigger_stub = unitrigger_stub; + unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( equipname, unitrigger_stub.origin ); + + if ( delete_trigger ) + trig delete(); + + level.a_uts_craftables[level.a_uts_craftables.size] = unitrigger_stub; + return unitrigger_stub; +} + +vehicle_craftable_trigger_think( vehicle, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + return setup_vehicle_unitrigger_craftable( vehicle, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); +} + +onpickuputs( player ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Craftable piece recovered by - " + player.name ); +#/ +} + +ondroputs( player ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Craftable piece dropped by - " + player.name ); +#/ + player notify( "event_ended" ); +} + +onbeginuseuts( player ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Craftable piece begin use by - " + player.name ); +#/ + if ( isdefined( self.craftablestub.onbeginuse ) ) + self [[ self.craftablestub.onbeginuse ]]( player ); + + if ( isdefined( player ) && !isdefined( player.craftableaudio ) ) + { + player.craftableaudio = spawn( "script_origin", player.origin ); + player.craftableaudio playloopsound( "zmb_craftable_loop" ); + } +} + +onenduseuts( team, player, result ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Craftable piece end use by - " + player.name ); +#/ + if ( !isdefined( player ) ) + return; + + if ( isdefined( player.craftableaudio ) ) + { + player.craftableaudio delete(); + player.craftableaudio = undefined; + } + + if ( isdefined( self.craftablestub.onenduse ) ) + self [[ self.craftablestub.onenduse ]]( team, player, result ); + + player notify( "event_ended" ); +} + +oncantuseuts( player ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Craftable piece can't use by - " + player.name ); +#/ + if ( isdefined( self.craftablestub.oncantuse ) ) + self [[ self.craftablestub.oncantuse ]]( player ); +} + +onuseplantobjectuts( player ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Craftable piece crafted by - " + player.name ); +#/ + if ( isdefined( self.craftablestub.onuseplantobject ) ) + self [[ self.craftablestub.onuseplantobject ]]( player ); + + player notify( "bomb_planted" ); +} + +is_craftable() +{ + if ( !isdefined( level.zombie_craftablestubs ) ) + return false; + + if ( isdefined( self.zombie_weapon_upgrade ) && isdefined( level.zombie_craftablestubs[self.zombie_weapon_upgrade] ) ) + return true; + + if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "specialty_weapupgrade" ) + { + if ( isdefined( level.craftables_crafted["pap"] ) && level.craftables_crafted["pap"] ) + return false; + + return true; + } + + return false; +} + +craftable_crafted() +{ + self.a_piecespawns--; +} + +craftable_complete() +{ + if ( self.a_piecespawns <= 0 ) + return true; + + return false; +} + +get_craftable_hint( craftable_name ) +{ + assert( isdefined( level.zombie_craftablestubs[craftable_name] ), craftable_name + " was not included or is not part of the zombie weapon list." ); + return level.zombie_craftablestubs[craftable_name].str_to_craft; +} + +delete_on_disconnect( craftable, self_notify, skip_delete ) +{ + craftable endon( "death" ); + + self waittill( "disconnect" ); + + if ( isdefined( self_notify ) ) + self notify( self_notify ); + + if ( !( isdefined( skip_delete ) && skip_delete ) ) + { + if ( isdefined( craftable.stub ) ) + { + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( craftable.stub ); + craftable.stub = undefined; + } + + if ( isdefined( craftable ) ) + craftable delete(); + } +} + +is_holding_part( craftable_name, piece_name ) +{ + if ( isdefined( self.current_craftable_piece ) ) + { + if ( self.current_craftable_piece.craftablename == craftable_name && self.current_craftable_piece.modelname == piece_name ) + return true; + } + + if ( isdefined( level.a_uts_craftables ) ) + { + foreach ( craftable_stub in level.a_uts_craftables ) + { + if ( craftable_stub.craftablestub.name == craftable_name ) + { + foreach ( piece in craftable_stub.craftablespawn.a_piecespawns ) + { + if ( piece.piecename == piece_name ) + { + if ( isdefined( piece.in_shared_inventory ) && piece.in_shared_inventory ) + return true; + } + } + } + } + } + + return false; +} + +is_part_crafted( craftable_name, piece_name ) +{ + if ( isdefined( level.a_uts_craftables ) ) + { + foreach ( craftable_stub in level.a_uts_craftables ) + { + if ( craftable_stub.craftablestub.name == craftable_name ) + { + if ( isdefined( craftable_stub.crafted ) && craftable_stub.crafted ) + return true; + + foreach ( piece in craftable_stub.craftablespawn.a_piecespawns ) + { + if ( piece.piecename == piece_name ) + { + if ( isdefined( piece.crafted ) && piece.crafted ) + return true; + } + } + } + } + } + + return false; +} + +track_craftable_piece_pickedup( piece ) +{ + if ( !isdefined( piece ) || !isdefined( piece.craftablename ) ) + { +/# + println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftable_piece_pickedup() \\n" ); +#/ + return; + } + + self add_map_craftable_stat( piece.craftablename, "pieces_pickedup", 1 ); + + if ( isdefined( piece.piecestub.vox_id ) ) + { + if ( isdefined( piece.piecestub.b_one_time_vo ) && piece.piecestub.b_one_time_vo ) + { + if ( !isdefined( self.a_one_time_piece_pickup_vo ) ) + self.a_one_time_piece_pickup_vo = []; + + if ( isdefined( self.dontspeak ) && self.dontspeak ) + return; + + if ( isinarray( self.a_one_time_piece_pickup_vo, piece.piecestub.vox_id ) ) + return; + + self.a_one_time_piece_pickup_vo[self.a_one_time_piece_pickup_vo.size] = piece.piecestub.vox_id; + } + + self thread do_player_general_vox( "general", piece.piecestub.vox_id + "_pickup" ); + } + else + self thread do_player_general_vox( "general", "build_pickup" ); +} + +track_craftable_pieces_crafted( craftable ) +{ + if ( !isdefined( craftable ) || !isdefined( craftable.craftable_name ) ) + { +/# + println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftable_pieces_crafted() \\n" ); +#/ + return; + } + + bname = craftable.craftable_name; + + if ( isdefined( craftable.stat_name ) ) + bname = craftable.stat_name; + + self add_map_craftable_stat( bname, "pieces_built", 1 ); + + if ( !craftable craftable_all_crafted() ) + self thread do_player_general_vox( "general", "build_add" ); +} + +track_craftables_crafted( craftable ) +{ + if ( !isdefined( craftable ) || !isdefined( craftable.craftable_name ) ) + { +/# + println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftables_crafted() \\n" ); +#/ + return; + } + + bname = craftable.craftable_name; + + if ( isdefined( craftable.stat_name ) ) + bname = craftable.stat_name; + + self add_map_craftable_stat( bname, "buildable_built", 1 ); + self maps\mp\zombies\_zm_stats::increment_client_stat( "buildables_built", 0 ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "buildables_built" ); + + if ( isdefined( craftable.stub.craftablestub.vox_id ) ) + { + if ( isdefined( level.zombie_custom_craftable_built_vo ) ) + self thread [[ level.zombie_custom_craftable_built_vo ]]( craftable.stub ); + + self thread do_player_general_vox( "general", craftable.stub.craftablestub.vox_id + "_final" ); + } +} + +track_craftables_pickedup( craftable ) +{ + if ( !isdefined( craftable ) ) + { +/# + println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftables_pickedup() \\n" ); +#/ + return; + } + + stat_name = get_craftable_stat_name( craftable.craftable_name ); + + if ( !isdefined( stat_name ) ) + { +/# + println( "STAT TRACKING FAILURE: NO STAT NAME FOR " + craftable.craftable_name + "\\n" ); +#/ + return; + } + + self add_map_craftable_stat( stat_name, "buildable_pickedup", 1 ); + + if ( isdefined( craftable.stub.craftablestub.vox_id ) ) + self thread do_player_general_vox( "general", craftable.stub.craftablestub.vox_id + "_plc" ); + + self say_pickup_craftable_vo( craftable, 0 ); +} + +track_craftables_planted( equipment ) +{ + if ( !isdefined( equipment ) ) + { +/# + println( "STAT TRACKING FAILURE: NOT DEFINED for track_craftables_planted() \\n" ); +#/ + return; + } + + craftable_name = undefined; + + if ( isdefined( equipment.name ) ) + craftable_name = get_craftable_stat_name( equipment.name ); + + if ( !isdefined( craftable_name ) ) + { +/# + println( "STAT TRACKING FAILURE: NO CRAFTABLE NAME FOR track_craftables_planted() " + equipment.name + "\\n" ); +#/ + return; + } + + maps\mp\_demo::bookmark( "zm_player_buildable_placed", gettime(), self ); + self add_map_craftable_stat( craftable_name, "buildable_placed", 1 ); +} + +placed_craftable_vo_timer() +{ + self endon( "disconnect" ); + self.craftable_timer = 1; + wait 60; + self.craftable_timer = 0; +} + +craftable_pickedup_timer() +{ + self endon( "disconnect" ); + self.craftable_pickedup_timer = 1; + wait 60; + self.craftable_pickedup_timer = 0; +} + +track_planted_craftables_pickedup( equipment ) +{ + if ( !isdefined( equipment ) ) + return; + + if ( equipment == "equip_turbine_zm" || equipment == "equip_turret_zm" || equipment == "equip_electrictrap_zm" || equipment == "riotshield_zm" || equipment == "alcatraz_shield_zm" || equipment == "tomb_shield_zm" ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "planted_buildables_pickedup", 0 ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "planted_buildables_pickedup" ); + } + + if ( !( isdefined( self.craftable_pickedup_timer ) && self.craftable_pickedup_timer ) ) + { + self say_pickup_craftable_vo( equipment, 1 ); + self thread craftable_pickedup_timer(); + } +} + +track_placed_craftables( craftable_name ) +{ + if ( !isdefined( craftable_name ) ) + return; + + self add_map_craftable_stat( craftable_name, "buildable_placed", 1 ); + vo_name = undefined; + + if ( craftable_name == level.riotshield_name ) + vo_name = "craft_plc_shield"; + + if ( !isdefined( vo_name ) ) + return; + + self thread do_player_general_vox( "general", vo_name ); +} + +add_map_craftable_stat( piece_name, stat_name, value ) +{ + if ( !isdefined( piece_name ) || piece_name == "sq_common" || piece_name == "keys_zm" ) + return; + + if ( isdefined( level.zm_disable_recording_stats ) && level.zm_disable_recording_stats || isdefined( level.zm_disable_recording_buildable_stats ) && level.zm_disable_recording_buildable_stats ) + return; + + self adddstat( "buildables", piece_name, stat_name, value ); +} + +say_pickup_craftable_vo( craftable_name, world ) +{ + +} + +get_craftable_vo_name( craftable_name ) +{ + +} + +get_craftable_stat_name( craftable_name ) +{ + if ( isdefined( craftable_name ) ) + { + switch ( craftable_name ) + { + case "equip_riotshield_zm": + return "riotshield_zm"; + case "equip_turbine_zm": + return "turbine"; + case "equip_turret_zm": + return "turret"; + case "equip_electrictrap_zm": + return "electric_trap"; + case "equip_springpad_zm": + return "springpad_zm"; + case "equip_slipgun_zm": + return "slipgun_zm"; + } + } + + return craftable_name; +} + +get_craftable_model( str_craftable ) +{ + foreach ( uts_craftable in level.a_uts_craftables ) + { + if ( uts_craftable.craftablestub.name == str_craftable ) + { + if ( isdefined( uts_craftable.model ) ) + return uts_craftable.model; + + break; + } + } + + return undefined; +} + +get_craftable_piece( str_craftable, str_piece ) +{ + foreach ( uts_craftable in level.a_uts_craftables ) + { + if ( uts_craftable.craftablestub.name == str_craftable ) + { + foreach ( piecespawn in uts_craftable.craftablespawn.a_piecespawns ) + { + if ( piecespawn.piecename == str_piece ) + return piecespawn; + } + + break; + } + } + + return undefined; +} + +player_get_craftable_piece( str_craftable, str_piece ) +{ + piecespawn = get_craftable_piece( str_craftable, str_piece ); + + if ( isdefined( piecespawn ) ) + self player_take_piece( piecespawn ); +} + +get_craftable_piece_model( str_craftable, str_piece ) +{ + foreach ( uts_craftable in level.a_uts_craftables ) + { + if ( uts_craftable.craftablestub.name == str_craftable ) + { + foreach ( piecespawn in uts_craftable.craftablespawn.a_piecespawns ) + { + if ( piecespawn.piecename == str_piece && isdefined( piecespawn.model ) ) + return piecespawn.model; + } + + break; + } + } + + return undefined; +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_magicbox_tomb.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_magicbox_tomb.gsc new file mode 100644 index 0000000..12e1fef --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_magicbox_tomb.gsc @@ -0,0 +1,280 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_magicbox; + +init() +{ + registerclientfield( "zbarrier", "magicbox_initial_fx", 2000, 1, "int" ); + registerclientfield( "zbarrier", "magicbox_amb_fx", 2000, 2, "int" ); + registerclientfield( "zbarrier", "magicbox_open_fx", 2000, 1, "int" ); + registerclientfield( "zbarrier", "magicbox_leaving_fx", 2000, 1, "int" ); + level._effect["lght_marker"] = loadfx( "maps/zombie_tomb/fx_tomb_marker" ); + level._effect["lght_marker_flare"] = loadfx( "maps/zombie/fx_zmb_tranzit_marker_fl" ); + level._effect["poltergeist"] = loadfx( "system_elements/fx_null" ); + level._effect["box_powered"] = loadfx( "maps/zombie_tomb/fx_tomb_magicbox_on" ); + level._effect["box_unpowered"] = loadfx( "maps/zombie_tomb/fx_tomb_magicbox_off" ); + level._effect["box_gone_ambient"] = loadfx( "maps/zombie_tomb/fx_tomb_magicbox_amb_base" ); + level._effect["box_here_ambient"] = loadfx( "maps/zombie_tomb/fx_tomb_magicbox_amb_slab" ); + level._effect["box_is_open"] = loadfx( "maps/zombie_tomb/fx_tomb_magicbox_open" ); + level._effect["box_portal"] = loadfx( "maps/zombie_tomb/fx_tomb_magicbox_portal" ); + level._effect["box_is_leaving"] = loadfx( "maps/zombie_tomb/fx_tomb_magicbox_leave" ); + level.chest_joker_model = "zombie_teddybear"; + precachemodel( level.chest_joker_model ); + level.chest_joker_custom_movement = ::custom_joker_movement; + level.custom_magic_box_timer_til_despawn = ::custom_magic_box_timer_til_despawn; + level.custom_magic_box_do_weapon_rise = ::custom_magic_box_do_weapon_rise; + level.custom_magic_box_weapon_wait = ::custom_magic_box_weapon_wait; + level.custom_magicbox_float_height = 50; + level.magic_box_zbarrier_state_func = ::set_magic_box_zbarrier_state; + level thread wait_then_create_base_magic_box_fx(); + level thread handle_fire_sale(); +} + +custom_joker_movement() +{ + v_origin = self.weapon_model.origin - vectorscale( ( 0, 0, 1 ), 5.0 ); + self.weapon_model delete(); + m_lock = spawn( "script_model", v_origin ); + m_lock setmodel( level.chest_joker_model ); + m_lock.angles = self.angles + vectorscale( ( 0, 1, 0 ), 270.0 ); + m_lock playsound( "zmb_hellbox_bear" ); + wait 0.5; + level notify( "weapon_fly_away_start" ); + wait 1; + m_lock rotateyaw( 3000, 4, 4 ); + wait 3; + v_angles = anglestoforward( self.angles - vectorscale( ( 0, 1, 0 ), 90.0 ) ); + m_lock moveto( m_lock.origin + 20 * v_angles, 0.5, 0.5 ); + + m_lock waittill( "movedone" ); + + m_lock moveto( m_lock.origin + -100 * v_angles, 0.5, 0.5 ); + + m_lock waittill( "movedone" ); + + m_lock delete(); + self notify( "box_moving" ); + level notify( "weapon_fly_away_end" ); +} + +custom_magic_box_timer_til_despawn( magic_box ) +{ + self endon( "kill_weapon_movement" ); + putbacktime = 12; + v_float = anglestoforward( magic_box.angles - vectorscale( ( 0, 1, 0 ), 90.0 ) ) * 40; + self moveto( self.origin - v_float * 0.25, putbacktime, putbacktime * 0.5 ); + wait( putbacktime ); + + if ( isdefined( self ) ) + self delete(); +} + +custom_magic_box_weapon_wait() +{ + wait 0.5; +} + +wait_then_create_base_magic_box_fx() +{ + while ( !isdefined( level.chests ) ) + wait 0.5; + + while ( !isdefined( level.chests[level.chests.size - 1].zbarrier ) ) + wait 0.5; + + foreach ( chest in level.chests ) + chest.zbarrier setclientfield( "magicbox_initial_fx", 1 ); +} + +set_magic_box_zbarrier_state( state ) +{ + for ( i = 0; i < self getnumzbarrierpieces(); i++ ) + self hidezbarrierpiece( i ); + + self notify( "zbarrier_state_change" ); + + switch ( state ) + { + case "away": + self showzbarrierpiece( 0 ); + self.state = "away"; + self.owner.is_locked = 0; + break; + case "arriving": + self showzbarrierpiece( 1 ); + self thread magic_box_arrives(); + self.state = "arriving"; + break; + case "initial": + self showzbarrierpiece( 1 ); + self thread magic_box_initial(); + thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.owner.unitrigger_stub, maps\mp\zombies\_zm_magicbox::magicbox_unitrigger_think ); + self.state = "close"; + break; + case "open": + self showzbarrierpiece( 2 ); + self thread magic_box_opens(); + self.state = "open"; + break; + case "close": + self showzbarrierpiece( 2 ); + self thread magic_box_closes(); + self.state = "close"; + break; + case "leaving": + self showzbarrierpiece( 1 ); + self thread magic_box_leaves(); + self.state = "leaving"; + self.owner.is_locked = 0; + break; + default: + if ( isdefined( level.custom_magicbox_state_handler ) ) + self [[ level.custom_magicbox_state_handler ]]( state ); + + break; + } +} + +magic_box_initial() +{ + self setzbarrierpiecestate( 1, "open" ); + wait 1; + self setclientfield( "magicbox_amb_fx", 1 ); +} + +magic_box_arrives() +{ + self setclientfield( "magicbox_leaving_fx", 0 ); + self setzbarrierpiecestate( 1, "opening" ); + + while ( self getzbarrierpiecestate( 1 ) == "opening" ) + wait 0.05; + + self notify( "arrived" ); + self.state = "close"; + s_zone_capture_area = level.zone_capture.zones[self.zone_capture_area]; + + if ( isdefined( s_zone_capture_area ) ) + { + if ( !s_zone_capture_area ent_flag( "player_controlled" ) ) + self setclientfield( "magicbox_amb_fx", 1 ); + else + self setclientfield( "magicbox_amb_fx", 2 ); + } +} + +magic_box_leaves() +{ + self setclientfield( "magicbox_leaving_fx", 1 ); + self setclientfield( "magicbox_open_fx", 0 ); + self setzbarrierpiecestate( 1, "closing" ); + self playsound( "zmb_hellbox_rise" ); + + while ( self getzbarrierpiecestate( 1 ) == "closing" ) + wait 0.1; + + self notify( "left" ); + s_zone_capture_area = level.zone_capture.zones[self.zone_capture_area]; + + if ( isdefined( s_zone_capture_area ) ) + { + if ( s_zone_capture_area ent_flag( "player_controlled" ) ) + self setclientfield( "magicbox_amb_fx", 3 ); + else + self setclientfield( "magicbox_amb_fx", 0 ); + } + + if ( isdefined( level.dig_magic_box_moved ) && !level.dig_magic_box_moved ) + level.dig_magic_box_moved = 1; +} + +magic_box_opens() +{ + self setclientfield( "magicbox_open_fx", 1 ); + self setzbarrierpiecestate( 2, "opening" ); + self playsound( "zmb_hellbox_open" ); + + while ( self getzbarrierpiecestate( 2 ) == "opening" ) + wait 0.1; + + self notify( "opened" ); + self thread magic_box_open_idle(); +} + +magic_box_open_idle() +{ + self endon( "stop_open_idle" ); + self hidezbarrierpiece( 2 ); + self showzbarrierpiece( 5 ); + + while ( true ) + { + self setzbarrierpiecestate( 5, "opening" ); + + while ( self getzbarrierpiecestate( 5 ) != "open" ) + wait 0.05; + } +} + +magic_box_closes() +{ + self notify( "stop_open_idle" ); + self hidezbarrierpiece( 5 ); + self showzbarrierpiece( 2 ); + self setzbarrierpiecestate( 2, "closing" ); + self playsound( "zmb_hellbox_close" ); + self setclientfield( "magicbox_open_fx", 0 ); + + while ( self getzbarrierpiecestate( 2 ) == "closing" ) + wait 0.1; + + self notify( "closed" ); +} + +custom_magic_box_do_weapon_rise() +{ + self endon( "box_hacked_respin" ); + wait 0.5; + self setzbarrierpiecestate( 3, "closed" ); + self setzbarrierpiecestate( 4, "closed" ); + wait_network_frame(); + self zbarrierpieceuseboxriselogic( 3 ); + self zbarrierpieceuseboxriselogic( 4 ); + self showzbarrierpiece( 3 ); + self showzbarrierpiece( 4 ); + self setzbarrierpiecestate( 3, "opening" ); + self setzbarrierpiecestate( 4, "opening" ); + + while ( self getzbarrierpiecestate( 3 ) != "open" ) + wait 0.5; + + self hidezbarrierpiece( 3 ); + self hidezbarrierpiece( 4 ); +} + +handle_fire_sale() +{ + while ( true ) + { + level waittill( "fire_sale_off" ); + + for ( i = 0; i < level.chests.size; i++ ) + { + if ( level.chest_index != i && isdefined( level.chests[i].was_temp ) ) + { + if ( isdefined( level.chests[i].zbarrier.zone_capture_area ) && level.zone_capture.zones[level.chests[i].zbarrier.zone_capture_area] ent_flag( "player_controlled" ) ) + { + level.chests[i].zbarrier setclientfield( "magicbox_amb_fx", 3 ); + continue; + } + + level.chests[i].zbarrier setclientfield( "magicbox_amb_fx", 0 ); + } + } + } +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_melee_weapon.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_melee_weapon.gsc new file mode 100644 index 0000000..4bc83cd --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_melee_weapon.gsc @@ -0,0 +1,576 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_audio; + +init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) +{ + precacheitem( weapon_name ); + precacheitem( flourish_weapon_name ); + add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); + melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_weapon_triggers.size; i++ ) + { + knife_model = getent( melee_weapon_triggers[i].target, "targetname" ); + + if ( isdefined( knife_model ) ) + knife_model hide(); + + melee_weapon_triggers[i] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); + + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + melee_weapon_triggers[i] sethintstring( hint_string, cost ); + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + cursor_hint = "HINT_WEAPON"; + cursor_hint_weapon = weapon_name; + melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); + } + else + melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); + } + else + { + weapon_display = get_weapon_display_name( weapon_name ); + hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + melee_weapon_triggers[i] sethintstring( hint_string, weapon_display, cost ); + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + cursor_hint = "HINT_WEAPON"; + cursor_hint_weapon = weapon_name; + melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); + } + else + melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); + } + + melee_weapon_triggers[i] usetriggerrequirelookat(); + } + + melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_weapon_structs.size; i++ ) + prepare_stub( melee_weapon_structs[i].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); + + register_melee_weapon_for_level( weapon_name ); + + if ( !isdefined( level.ballistic_weapon_name ) ) + level.ballistic_weapon_name = []; + + level.ballistic_weapon_name[weapon_name] = ballistic_weapon_name; + + if ( !isdefined( level.ballistic_upgraded_weapon_name ) ) + level.ballistic_upgraded_weapon_name = []; + + level.ballistic_upgraded_weapon_name[weapon_name] = ballistic_upgraded_weapon_name; +/# + if ( !isdefined( level.zombie_weapons[weapon_name] ) ) + { + if ( isdefined( level.devgui_add_weapon ) ) + [[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost ); + } +#/ +} + +prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) +{ + if ( isdefined( stub ) ) + { + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + stub.hint_string = hint_string; + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + stub.cursor_hint = "HINT_WEAPON"; + stub.cursor_hint_weapon = weapon_name; + } + else + { + stub.cursor_hint = "HINT_NOICON"; + stub.cursor_hint_weapon = undefined; + } + } + else + { + stub.hint_parm1 = get_weapon_display_name( weapon_name ); + stub.hint_parm2 = cost; + stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + stub.cursor_hint = "HINT_WEAPON"; + stub.cursor_hint_weapon = weapon_name; + } + else + { + stub.cursor_hint = "HINT_NOICON"; + stub.cursor_hint_weapon = undefined; + } + } + + stub.cost = cost; + stub.weapon_name = weapon_name; + stub.vo_dialog_id = vo_dialog_id; + stub.flourish_weapon_name = flourish_weapon_name; + stub.ballistic_weapon_name = ballistic_weapon_name; + stub.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; + stub.trigger_func = ::melee_weapon_think; + stub.flourish_fn = flourish_fn; + } +} + +add_stub( stub, weapon_name ) +{ + melee_weapon = undefined; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( level._melee_weapons[i].weapon_name == weapon_name ) + { + melee_weapon = level._melee_weapons[i]; + break; + } + } + + if ( isdefined( stub ) && isdefined( melee_weapon ) ) + prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn ); +} + +give_melee_weapon_by_name( weapon_name ) +{ + melee_weapon = undefined; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( level._melee_weapons[i].weapon_name == weapon_name ) + { + melee_weapon = level._melee_weapons[i]; + break; + } + } + + if ( isdefined( melee_weapon ) ) + self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined ); +} + +add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) +{ + melee_weapon = spawnstruct(); + melee_weapon.weapon_name = weapon_name; + melee_weapon.flourish_weapon_name = flourish_weapon_name; + melee_weapon.ballistic_weapon_name = ballistic_weapon_name; + melee_weapon.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; + melee_weapon.cost = cost; + melee_weapon.wallbuy_targetname = wallbuy_targetname; + melee_weapon.hint_string = hint_string; + melee_weapon.vo_dialog_id = vo_dialog_id; + melee_weapon.flourish_fn = flourish_fn; + + if ( !isdefined( level._melee_weapons ) ) + level._melee_weapons = []; + + level._melee_weapons[level._melee_weapons.size] = melee_weapon; +} + +player_can_see_weapon_prompt( weapon_name ) +{ + if ( is_true( level._allow_melee_weapon_switching ) ) + return true; + + if ( isdefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) ) + return false; + + return true; +} + +spectator_respawn_all() +{ + for ( i = 0; i < level._melee_weapons.size; i++ ) + self spectator_respawn( level._melee_weapons[i].wallbuy_targetname, level._melee_weapons[i].weapon_name ); +} + +spectator_respawn( wallbuy_targetname, weapon_name ) +{ + melee_triggers = getentarray( wallbuy_targetname, "targetname" ); + players = get_players(); + + for ( i = 0; i < melee_triggers.size; i++ ) + { + melee_triggers[i] setvisibletoall(); + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + for ( j = 0; j < players.size; j++ ) + { + if ( !players[j] player_can_see_weapon_prompt( weapon_name ) ) + melee_triggers[i] setinvisibletoplayer( players[j] ); + } + } + } +} + +trigger_hide_all() +{ + for ( i = 0; i < level._melee_weapons.size; i++ ) + self trigger_hide( level._melee_weapons[i].wallbuy_targetname ); +} + +trigger_hide( wallbuy_targetname ) +{ + melee_triggers = getentarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_triggers.size; i++ ) + melee_triggers[i] setinvisibletoplayer( self ); +} + +has_any_ballistic_knife() +{ + if ( self hasweapon( "knife_ballistic_zm" ) ) + return true; + + if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) + return true; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) ) + return true; + + if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) + return true; + } + + return false; +} + +has_upgraded_ballistic_knife() +{ + if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) + return true; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) + return true; + } + + return false; +} + +give_ballistic_knife( weapon_string, upgraded ) +{ + current_melee_weapon = self get_player_melee_weapon(); + + if ( isdefined( current_melee_weapon ) ) + { + if ( upgraded && isdefined( level.ballistic_upgraded_weapon_name ) && isdefined( level.ballistic_upgraded_weapon_name[current_melee_weapon] ) ) + weapon_string = level.ballistic_upgraded_weapon_name[current_melee_weapon]; + + if ( !upgraded && isdefined( level.ballistic_weapon_name ) && isdefined( level.ballistic_weapon_name[current_melee_weapon] ) ) + weapon_string = level.ballistic_weapon_name[current_melee_weapon]; + } + + return weapon_string; +} + +change_melee_weapon( weapon_name, current_weapon ) +{ + current_melee_weapon = self get_player_melee_weapon(); + + if ( isdefined( current_melee_weapon ) && current_melee_weapon != weapon_name ) + { + self takeweapon( current_melee_weapon ); + unacquire_weapon_toggle( current_melee_weapon ); + } + + self set_player_melee_weapon( weapon_name ); + had_ballistic = 0; + had_ballistic_upgraded = 0; + ballistic_was_primary = 0; + primaryweapons = self getweaponslistprimaries(); + + for ( i = 0; i < primaryweapons.size; i++ ) + { + primary_weapon = primaryweapons[i]; + + if ( issubstr( primary_weapon, "knife_ballistic_" ) ) + { + had_ballistic = 1; + + if ( primary_weapon == current_weapon ) + ballistic_was_primary = 1; + + self notify( "zmb_lost_knife" ); + self takeweapon( primary_weapon ); + unacquire_weapon_toggle( primary_weapon ); + + if ( issubstr( primary_weapon, "upgraded" ) ) + had_ballistic_upgraded = 1; + } + } + + if ( had_ballistic ) + { + if ( had_ballistic_upgraded ) + { + new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name]; + + if ( ballistic_was_primary ) + current_weapon = new_ballistic; + + self giveweapon( new_ballistic, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) ); + } + else + { + new_ballistic = level.ballistic_weapon_name[weapon_name]; + + if ( ballistic_was_primary ) + current_weapon = new_ballistic; + + self giveweapon( new_ballistic, 0 ); + } + } + + return current_weapon; +} + +melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) +{ + self.first_time_triggered = 0; + + if ( isdefined( self.stub ) ) + { + self endon( "kill_trigger" ); + + if ( isdefined( self.stub.first_time_triggered ) ) + self.first_time_triggered = self.stub.first_time_triggered; + + weapon_name = self.stub.weapon_name; + cost = self.stub.cost; + flourish_fn = self.stub.flourish_fn; + vo_dialog_id = self.stub.vo_dialog_id; + flourish_weapon_name = self.stub.flourish_weapon_name; + ballistic_weapon_name = self.stub.ballistic_weapon_name; + ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name; + players = getplayers(); + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] player_can_see_weapon_prompt( weapon_name ) ) + self setinvisibletoplayer( players[i] ); + } + } + } + + for (;;) + { + self waittill( "trigger", player ); + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + if ( player in_revive_trigger() ) + { + wait 0.1; + continue; + } + + if ( player isthrowinggrenade() ) + { + wait 0.1; + continue; + } + + if ( player.is_drinking > 0 ) + { + wait 0.1; + continue; + } + + if ( player hasweapon( weapon_name ) || player has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( player isswitchingweapons() ) + { + wait 0.1; + continue; + } + + current_weapon = player getcurrentweapon(); + + if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) || player has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission ) + { + wait 0.1; + continue; + } + + player_has_weapon = player hasweapon( weapon_name ); + + if ( !player_has_weapon ) + { + cost = self.stub.cost; + + if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) + cost = int( cost / 2 ); + + if ( player.score >= cost ) + { + if ( self.first_time_triggered == 0 ) + { + model = getent( self.target, "targetname" ); + + if ( isdefined( model ) ) + model thread melee_weapon_show( player ); + else if ( isdefined( self.clientfieldname ) ) + level setclientfield( self.clientfieldname, 1 ); + + self.first_time_triggered = 1; + + if ( isdefined( self.stub ) ) + self.stub.first_time_triggered = 1; + } + + player maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 ); + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" ); + player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self ); + } + else + { + play_sound_on_ent( "no_purchase" ); + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 ); + } + + continue; + } + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + self setinvisibletoplayer( player ); + } +} + +melee_weapon_show( player ) +{ + player_angles = vectortoangles( player.origin - self.origin ); + player_yaw = player_angles[1]; + weapon_yaw = self.angles[1]; + yaw_diff = angleclamp180( player_yaw - weapon_yaw ); + + if ( yaw_diff > 0 ) + yaw = weapon_yaw - 90; + else + yaw = weapon_yaw + 90; + + self.og_origin = self.origin; + self.origin += anglestoforward( ( 0, yaw, 0 ) ) * 8; + wait 0.05; + self show(); + play_sound_at_pos( "weapon_show", self.origin, self ); + time = 1; + self moveto( self.og_origin, time ); +} + +give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger ) +{ + if ( isdefined( flourish_fn ) ) + self thread [[ flourish_fn ]](); + + gun = self do_melee_weapon_flourish_begin( flourish_weapon_name ); + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id ); + self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); + self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + return; + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + if ( isdefined( trigger ) ) + trigger setinvisibletoplayer( self ); + + self trigger_hide_all(); + } +} + +do_melee_weapon_flourish_begin( flourish_weapon_name ) +{ + self increment_is_drinking(); + self disable_player_move_states( 1 ); + gun = self getcurrentweapon(); + weapon = flourish_weapon_name; + self giveweapon( weapon ); + self switchtoweapon( weapon ); + return gun; +} + +do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) +{ + assert( !is_zombie_perk_bottle( gun ) ); + assert( gun != level.revive_tool ); + self enable_player_move_states(); + weapon = flourish_weapon_name; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + { + self takeweapon( weapon ); + self.lastactiveweapon = "none"; + return; + } + + self takeweapon( weapon ); + self giveweapon( weapon_name ); + gun = change_melee_weapon( weapon_name, gun ); + + if ( self hasweapon( "knife_zm" ) ) + self takeweapon( "knife_zm" ); + + if ( self is_multiple_drinking() ) + { + self decrement_is_drinking(); + return; + } + else if ( gun == "knife_zm" ) + { + self switchtoweapon( weapon_name ); + self decrement_is_drinking(); + return; + } + else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) + self switchtoweapon( gun ); + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + } + + self waittill( "weapon_change_complete" ); + + if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) ) + self decrement_is_drinking(); +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_perk_divetonuke.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_perk_divetonuke.gsc new file mode 100644 index 0000000..4dc086f --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_perk_divetonuke.gsc @@ -0,0 +1,172 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\_visionset_mgr; + +enable_divetonuke_perk_for_level() +{ + maps\mp\zombies\_zm_perks::register_perk_basic_info( "specialty_flakjacket", "divetonuke", 2000, &"ZOMBIE_PERK_DIVETONUKE", "zombie_perk_bottle_nuke" ); + maps\mp\zombies\_zm_perks::register_perk_precache_func( "specialty_flakjacket", ::divetonuke_precache ); + maps\mp\zombies\_zm_perks::register_perk_clientfields( "specialty_flakjacket", ::divetonuke_register_clientfield, ::divetonuke_set_clientfield ); + maps\mp\zombies\_zm_perks::register_perk_machine( "specialty_flakjacket", ::divetonuke_perk_machine_setup, ::divetonuke_perk_machine_think ); + maps\mp\zombies\_zm_perks::register_perk_host_migration_func( "specialty_flakjacket", ::divetonuke_host_migration_func ); +} + +init_divetonuke() +{ + level.zombiemode_divetonuke_perk_func = ::divetonuke_explode; + maps\mp\_visionset_mgr::vsmgr_register_info( "visionset", "zm_perk_divetonuke", 9000, 400, 5, 1 ); + level._effect["divetonuke_groundhit"] = loadfx( "maps/zombie/fx_zmb_phdflopper_exp" ); + set_zombie_var( "zombie_perk_divetonuke_radius", 300 ); + set_zombie_var( "zombie_perk_divetonuke_min_damage", 1000 ); + set_zombie_var( "zombie_perk_divetonuke_max_damage", 5000 ); +} + +divetonuke_precache() +{ + if ( isdefined( level.divetonuke_precache_override_func ) ) + { + [[ level.divetonuke_precache_override_func ]](); + return; + } + + precacheitem( "zombie_perk_bottle_nuke" ); + precacheshader( "specialty_divetonuke_zombies" ); + precachemodel( "zombie_vending_nuke" ); + precachemodel( "zombie_vending_nuke_on" ); + precachestring( &"ZOMBIE_PERK_DIVETONUKE" ); + level._effect["divetonuke_light"] = loadfx( "misc/fx_zombie_cola_dtap_on" ); + level.machine_assets["divetonuke"] = spawnstruct(); + level.machine_assets["divetonuke"].weapon = "zombie_perk_bottle_nuke"; + level.machine_assets["divetonuke"].off_model = "zombie_vending_nuke"; + level.machine_assets["divetonuke"].on_model = "zombie_vending_nuke_on"; +} + +divetonuke_register_clientfield() +{ + registerclientfield( "toplayer", "perk_dive_to_nuke", 9000, 1, "int" ); +} + +divetonuke_set_clientfield( state ) +{ + self setclientfieldtoplayer( "perk_dive_to_nuke", state ); +} + +divetonuke_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collision ) +{ + use_trigger.script_sound = "mus_perks_phd_jingle"; + use_trigger.script_string = "divetonuke_perk"; + use_trigger.script_label = "mus_perks_phd_sting"; + use_trigger.target = "vending_divetonuke"; + perk_machine.script_string = "divetonuke_perk"; + perk_machine.targetname = "vending_divetonuke"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "divetonuke_perk"; +} + +divetonuke_perk_machine_think() +{ + init_divetonuke(); + + while ( true ) + { + machine = getentarray( "vending_divetonuke", "targetname" ); + machine_triggers = getentarray( "vending_divetonuke", "target" ); + + for ( i = 0; i < machine.size; i++ ) + machine[i] setmodel( level.machine_assets["divetonuke"].off_model ); + + array_thread( machine_triggers, ::set_power_on, 0 ); + level thread do_initial_power_off_callback( machine, "divetonuke" ); + + level waittill( "divetonuke_on" ); + + for ( i = 0; i < machine.size; i++ ) + { + machine[i] setmodel( level.machine_assets["divetonuke"].on_model ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] thread perk_fx( "divetonuke_light" ); + machine[i] thread play_loop_on_machine(); + } + + level notify( "specialty_flakjacket_power_on" ); + array_thread( machine_triggers, ::set_power_on, 1 ); + + if ( isdefined( level.machine_assets["divetonuke"].power_on_callback ) ) + array_thread( machine, level.machine_assets["divetonuke"].power_on_callback ); + + level waittill( "divetonuke_off" ); + + if ( isdefined( level.machine_assets["divetonuke"].power_off_callback ) ) + array_thread( machine, level.machine_assets["divetonuke"].power_off_callback ); + + array_thread( machine, ::turn_perk_off ); + } +} + +divetonuke_host_migration_func() +{ + flop = getentarray( "vending_divetonuke", "targetname" ); + + foreach ( perk in flop ) + { + if ( isdefined( perk.model ) && perk.model == level.machine_assets["divetonuke"].on_model ) + { + perk perk_fx( undefined, 1 ); + perk thread perk_fx( "divetonuke_light" ); + } + } +} + +divetonuke_explode( attacker, origin ) +{ + radius = level.zombie_vars["zombie_perk_divetonuke_radius"]; + min_damage = level.zombie_vars["zombie_perk_divetonuke_min_damage"]; + max_damage = level.zombie_vars["zombie_perk_divetonuke_max_damage"]; + + if ( isdefined( level.flopper_network_optimized ) && level.flopper_network_optimized ) + attacker thread divetonuke_explode_network_optimized( origin, radius, max_damage, min_damage, "MOD_GRENADE_SPLASH" ); + else + radiusdamage( origin, radius, max_damage, min_damage, attacker, "MOD_GRENADE_SPLASH" ); + + playfx( level._effect["divetonuke_groundhit"], origin ); + attacker playsound( "zmb_phdflop_explo" ); + maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker ); + wait 1; + maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker ); +} + +divetonuke_explode_network_optimized( origin, radius, max_damage, min_damage, damage_mod ) +{ + self endon( "disconnect" ); + a_zombies = get_array_of_closest( origin, get_round_enemy_array(), undefined, undefined, radius ); + network_stall_counter = 0; + + if ( isdefined( a_zombies ) ) + { + for ( i = 0; i < a_zombies.size; i++ ) + { + e_zombie = a_zombies[i]; + + if ( !isdefined( e_zombie ) || !isalive( e_zombie ) ) + continue; + + dist = distance( e_zombie.origin, origin ); + damage = min_damage + ( max_damage - min_damage ) * ( 1.0 - dist / radius ); + e_zombie dodamage( damage, e_zombie.origin, self, self, 0, damage_mod ); + network_stall_counter--; + + if ( network_stall_counter <= 0 ) + { + wait_network_frame(); + network_stall_counter = randomintrange( 1, 3 ); + } + } + } +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_perk_random.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_perk_random.gsc new file mode 100644 index 0000000..d3d49f0 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_perk_random.gsc @@ -0,0 +1,661 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_perks; + +init() +{ + level._random_zombie_perk_cost = 1500; + level thread precache(); + level thread init_machines(); + registerclientfield( "scriptmover", "perk_bottle_cycle_state", 14000, 2, "int" ); + registerclientfield( "scriptmover", "turn_active_perk_light_red", 14000, 1, "int" ); + registerclientfield( "scriptmover", "turn_active_perk_light_green", 14000, 1, "int" ); + registerclientfield( "scriptmover", "turn_on_location_indicator", 14000, 1, "int" ); + registerclientfield( "scriptmover", "turn_active_perk_ball_light", 14000, 1, "int" ); + registerclientfield( "scriptmover", "zone_captured", 14000, 1, "int" ); + level._effect["perk_machine_light"] = loadfx( "maps/zombie_tomb/fx_tomb_dieselmagic_light" ); + level._effect["perk_machine_light_red"] = loadfx( "maps/zombie_tomb/fx_tomb_dieselmagic_light_red" ); + level._effect["perk_machine_light_green"] = loadfx( "maps/zombie_tomb/fx_tomb_dieselmagic_light_green" ); + level._effect["perk_machine_steam"] = loadfx( "maps/zombie_tomb/fx_tomb_dieselmagic_steam" ); + level._effect["perk_machine_location"] = loadfx( "maps/zombie_tomb/fx_tomb_dieselmagic_identify" ); + level._effect["perk_machine_activation_electric_loop"] = loadfx( "maps/zombie_tomb/fx_tomb_dieselmagic_on" ); + flag_init( "machine_can_reset" ); +} + +init_machines() +{ + machines = getentarray( "random_perk_machine", "targetname" ); + + foreach ( machine in machines ) + { + machine.artifact_glow_setting = 1; + machine.machinery_glow_setting = 0.0; + machine.is_current_ball_location = 0; + machine.unitrigger_stub = spawnstruct(); + machine.unitrigger_stub.origin = machine.origin + anglestoright( machine.angles ) * 22.5; + machine.unitrigger_stub.angles = machine.angles; + machine.unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + machine.unitrigger_stub.script_width = 64; + machine.unitrigger_stub.script_height = 64; + machine.unitrigger_stub.script_length = 64; + machine.unitrigger_stub.trigger_target = machine; + unitrigger_force_per_player_triggers( machine.unitrigger_stub, 1 ); + machine.unitrigger_stub.prompt_and_visibility_func = ::wunderfizztrigger_update_prompt; + level thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( machine.unitrigger_stub, ::wunderfizz_unitrigger_think ); + } +} + +wunderfizztrigger_update_prompt( player ) +{ + can_use = self wunderfizzstub_update_prompt( player ); + + if ( isdefined( self.hint_string ) ) + { + if ( isdefined( self.hint_parm1 ) ) + self sethintstring( self.hint_string, self.hint_parm1 ); + else + self sethintstring( self.hint_string ); + } + + return can_use; +} + +wunderfizzstub_update_prompt( player ) +{ + self setcursorhint( "HINT_NOICON" ); + + if ( !self trigger_visible_to_player( player ) ) + return false; + + self.hint_parm1 = undefined; + + if ( isdefined( self.stub.trigger_target.is_locked ) && self.stub.trigger_target.is_locked ) + { + self.hint_string = &"ZM_TOMB_RPU"; + return false; + } + else if ( self.stub.trigger_target.is_current_ball_location ) + { + if ( isdefined( self.stub.trigger_target.machine_user ) ) + { + if ( isdefined( self.stub.trigger_target.grab_perk_hint ) && self.stub.trigger_target.grab_perk_hint ) + { + n_purchase_limit = player get_player_perk_purchase_limit(); + + if ( player.num_perks >= n_purchase_limit ) + { + self.hint_string = &"ZM_TOMB_RPT"; + self.hint_parm1 = n_purchase_limit; + return false; + } + else + { + self.hint_string = &"ZM_TOMB_RPP"; + return true; + } + } + else + return false; + } + else + { + n_purchase_limit = player get_player_perk_purchase_limit(); + + if ( player.num_perks >= n_purchase_limit ) + { + self.hint_string = &"ZM_TOMB_RPT"; + self.hint_parm1 = n_purchase_limit; + return false; + } + else + { + self.hint_string = &"ZM_TOMB_RPB"; + self.hint_parm1 = level._random_zombie_perk_cost; + return true; + } + } + } + else + { + self.hint_string = &"ZM_TOMB_RPE"; + return false; + } +} + +trigger_visible_to_player( player ) +{ + self setinvisibletoplayer( player ); + visible = 1; + + if ( isdefined( self.stub.trigger_target.machine_user ) ) + { + if ( player != self.stub.trigger_target.machine_user || is_placeable_mine( self.stub.trigger_target.machine_user getcurrentweapon() ) ) + visible = 0; + } + else if ( !player can_buy_perk() ) + visible = 0; + + if ( !visible ) + return false; + + self setvisibletoplayer( player ); + return true; +} + +can_buy_perk() +{ + if ( isdefined( self.is_drinking ) && self.is_drinking > 0 ) + return false; + + current_weapon = self getcurrentweapon(); + + if ( is_placeable_mine( current_weapon ) || is_equipment_that_blocks_purchase( current_weapon ) ) + return false; + + if ( self in_revive_trigger() ) + return false; + + if ( current_weapon == "none" ) + return false; + + return true; +} + +#using_animtree("zm_perk_random"); + +init_animtree() +{ + scriptmodelsuseanimtree( #animtree ); +} + +start_random_machine() +{ + level thread machines_setup(); + level thread machine_selector(); +} + +precache() +{ + precachemodel( "p6_zm_vending_diesel_magic" ); + precachemodel( "t6_wpn_zmb_perk_bottle_bear_world" ); +} + +machines_setup() +{ + wait 0.5; + level.perk_bottle_weapon_array = arraycombine( level.machine_assets, level._custom_perks, 0, 1 ); + start_machines = getentarray( "start_machine", "script_noteworthy" ); + assert( isdefined( start_machines.size != 0 ), "missing start random perk machine" ); + + if ( start_machines.size == 1 ) + level.random_perk_start_machine = start_machines[0]; + else + level.random_perk_start_machine = start_machines[randomint( start_machines.size )]; + + machines = getentarray( "random_perk_machine", "targetname" ); + + foreach ( machine in machines ) + { + spawn_location = spawn( "script_model", machine.origin ); + spawn_location setmodel( "tag_origin" ); + spawn_location.angles = machine.angles; + forward_dir = anglestoright( machine.angles ); + spawn_location.origin += vectorscale( ( 0, 0, 1 ), 65.0 ); + machine.bottle_spawn_location = spawn_location; + machine useanimtree( #animtree ); + machine thread machine_power_indicators(); + + if ( machine != level.random_perk_start_machine ) + { + machine hidepart( "j_ball" ); + machine.is_current_ball_location = 0; + } + else + { + level.wunderfizz_starting_machine = machine; + level notify( "wunderfizz_setup" ); + machine thread machine_think(); + } + + wait_network_frame(); + } +} + +machine_power_indicators() +{ + self setclientfield( "zone_captured", 1 ); + wait 1; + self setclientfield( "zone_captured", 0 ); + + while ( true ) + { + self conditional_power_indicators(); + + while ( isdefined( self.is_locked ) && self.is_locked ) + wait 1; + + self conditional_power_indicators(); + + while ( !( isdefined( self.is_locked ) && self.is_locked ) ) + wait 1; + } +} + +conditional_power_indicators() +{ + if ( isdefined( self.is_locked ) && self.is_locked ) + { + self setclientfield( "turn_active_perk_light_red", 0 ); + self setclientfield( "turn_active_perk_light_green", 0 ); + self setclientfield( "turn_active_perk_ball_light", 0 ); + self setclientfield( "zone_captured", 0 ); + } + else if ( self.is_current_ball_location ) + { + self setclientfield( "turn_active_perk_light_red", 0 ); + self setclientfield( "turn_active_perk_light_green", 1 ); + self setclientfield( "turn_active_perk_ball_light", 1 ); + self setclientfield( "zone_captured", 1 ); + } + else + { + self setclientfield( "turn_active_perk_light_red", 1 ); + self setclientfield( "turn_active_perk_light_green", 0 ); + self setclientfield( "turn_active_perk_ball_light", 0 ); + self setclientfield( "zone_captured", 1 ); + } +} + +wunderfizz_unitrigger_think( player ) +{ + self endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "trigger", player ); + + self.stub.trigger_target notify( "trigger", player ); + } +} + +machine_think() +{ + level notify( "machine_think" ); + level endon( "machine_think" ); + self thread machine_sounds(); + self show(); + self.num_time_used = 0; + self.num_til_moved = randomintrange( 4, 7 ); + self.is_current_ball_location = 1; + self setclientfield( "turn_on_location_indicator", 1 ); + self showpart( "j_ball" ); + self thread update_animation( "start" ); + + while ( isdefined( self.is_locked ) && self.is_locked ) + wait 1; + + self conditional_power_indicators(); + + while ( true ) + { + self waittill( "trigger", player ); + + flag_clear( "machine_can_reset" ); + level notify( "pmmove" ); + + if ( player.score < level._random_zombie_perk_cost ) + { + self playsound( "evt_perk_deny" ); + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); + continue; + } + + if ( self.num_time_used >= self.num_til_moved ) + { + level notify( "pmmove" ); + self thread update_animation( "shut_down" ); + level notify( "random_perk_moving" ); + self setclientfield( "turn_on_location_indicator", 0 ); + self.is_current_ball_location = 0; + self conditional_power_indicators(); + self hidepart( "j_ball" ); + break; + } + + self.machine_user = player; + self.num_time_used++; + player maps\mp\zombies\_zm_stats::increment_client_stat( "use_perk_random" ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "use_perk_random" ); + player maps\mp\zombies\_zm_score::minus_to_player_score( level._random_zombie_perk_cost ); + self thread update_animation( "in_use" ); + + if ( isdefined( level.perk_random_vo_func_usemachine ) && isdefined( player ) ) + player thread [[ level.perk_random_vo_func_usemachine ]](); + + while ( true ) + { + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); + random_perk = get_weighted_random_perk( player ); + self setclientfield( "perk_bottle_cycle_state", 1 ); + level notify( "pmstrt" ); + wait 1.0; + self thread start_perk_bottle_cycling(); + self thread perk_bottle_motion(); + model = get_perk_weapon_model( random_perk ); + wait 3.0; + self notify( "done_cycling" ); + + if ( self.num_time_used >= self.num_til_moved ) + { + self.bottle_spawn_location setmodel( "t6_wpn_zmb_perk_bottle_bear_world" ); + level notify( "pmmove" ); + self thread update_animation( "shut_down" ); + wait 3; + player maps\mp\zombies\_zm_score::add_to_player_score( level._random_zombie_perk_cost ); + self.bottle_spawn_location setmodel( "tag_origin" ); + level notify( "random_perk_moving" ); + self setclientfield( "perk_bottle_cycle_state", 0 ); + self setclientfield( "turn_on_location_indicator", 0 ); + self.is_current_ball_location = 0; + self conditional_power_indicators(); + self hidepart( "j_ball" ); + self.machine_user = undefined; + thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::wunderfizz_unitrigger_think ); + break; + } + else + self.bottle_spawn_location setmodel( model ); + + self.grab_perk_hint = 1; + thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::wunderfizz_unitrigger_think ); + self thread grab_check( player, random_perk ); + self thread time_out_check(); + self waittill_either( "grab_check", "time_out_check" ); + self.grab_perk_hint = 0; + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); + thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::wunderfizz_unitrigger_think ); + level notify( "pmstop" ); + + if ( player.num_perks >= player get_player_perk_purchase_limit() ) + player maps\mp\zombies\_zm_score::add_to_player_score( level._random_zombie_perk_cost ); + + self setclientfield( "perk_bottle_cycle_state", 0 ); + self.machine_user = undefined; + self.bottle_spawn_location setmodel( "tag_origin" ); + self thread update_animation( "idle" ); + break; + } + + flag_wait( "machine_can_reset" ); + } +} + +grab_check( player, random_perk ) +{ + self endon( "time_out_check" ); + perk_is_bought = 0; + + while ( !perk_is_bought ) + { + self waittill( "trigger", e_triggerer ); + + if ( e_triggerer == player ) + { + if ( isdefined( player.is_drinking ) && player.is_drinking > 0 ) + { + wait 0.1; + continue; + } + + if ( player.num_perks < player get_player_perk_purchase_limit() ) + perk_is_bought = 1; + else + { + self playsound( "evt_perk_deny" ); + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "sigh" ); + self notify( "time_out_or_perk_grab" ); + return; + } + } + } + + player maps\mp\zombies\_zm_stats::increment_client_stat( "grabbed_from_perk_random" ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "grabbed_from_perk_random" ); + player thread monitor_when_player_acquires_perk(); + self notify( "grab_check" ); + self notify( "time_out_or_perk_grab" ); + gun = player maps\mp\zombies\_zm_perks::perk_give_bottle_begin( random_perk ); + evt = player waittill_any_return( "fake_death", "death", "player_downed", "weapon_change_complete" ); + + if ( evt == "weapon_change_complete" ) + player thread maps\mp\zombies\_zm_perks::wait_give_perk( random_perk, 1 ); + + player maps\mp\zombies\_zm_perks::perk_give_bottle_end( gun, random_perk ); + + if ( !( isdefined( player.has_drunk_wunderfizz ) && player.has_drunk_wunderfizz ) ) + { + player do_player_general_vox( "wunderfizz", "perk_wonder", undefined, 100 ); + player.has_drunk_wunderfizz = 1; + } +} + +monitor_when_player_acquires_perk() +{ + self waittill_any( "perk_acquired", "death_or_disconnect", "player_downed" ); + flag_set( "machine_can_reset" ); +} + +time_out_check() +{ + self endon( "grab_check" ); + wait 10.0; + self notify( "time_out_check" ); + flag_set( "machine_can_reset" ); +} + +machine_selector() +{ + while ( true ) + { + level waittill( "random_perk_moving" ); + + machines = getentarray( "random_perk_machine", "targetname" ); + + if ( machines.size == 1 ) + { + new_machine = machines[0]; + new_machine thread machine_think(); + continue; + } + + do + new_machine = machines[randomint( machines.size )]; + while ( new_machine == level.random_perk_start_machine ); + + level.random_perk_start_machine = new_machine; + wait 10; + new_machine thread machine_think(); + } +} + +include_perk_in_random_rotation( perk ) +{ + if ( !isdefined( level._random_perk_machine_perk_list ) ) + level._random_perk_machine_perk_list = []; + + level._random_perk_machine_perk_list = add_to_array( level._random_perk_machine_perk_list, perk ); +} + +get_weighted_random_perk( player ) +{ + keys = array_randomize( getarraykeys( level._random_perk_machine_perk_list ) ); + + if ( isdefined( level.custom_random_perk_weights ) ) + keys = player [[ level.custom_random_perk_weights ]](); +/# + forced_perk = getdvar( _hash_B097C64C ); + + if ( forced_perk != "" && isdefined( level._random_perk_machine_perk_list[forced_perk] ) ) + arrayinsert( keys, forced_perk, 0 ); +#/ + for ( i = 0; i < keys.size; i++ ) + { + if ( player hasperk( level._random_perk_machine_perk_list[keys[i]] ) ) + continue; + else + return level._random_perk_machine_perk_list[keys[i]]; + } + + return level._random_perk_machine_perk_list[keys[0]]; +} + +perk_bottle_motion() +{ + putouttime = 3; + putbacktime = 10; + v_float = anglestoforward( self.angles - ( 0, 90, 0 ) ) * 10; + self.bottle_spawn_location.origin = self.origin + ( 0, 0, 53 ); + self.bottle_spawn_location.angles = self.angles; + self.bottle_spawn_location.origin -= v_float; + self.bottle_spawn_location moveto( self.bottle_spawn_location.origin + v_float, putouttime, putouttime * 0.5 ); + self.bottle_spawn_location.angles += ( 0, 0, 10 ); + self.bottle_spawn_location rotateyaw( 720, putouttime, putouttime * 0.5 ); + + self waittill( "done_cycling" ); + + self.bottle_spawn_location.angles = self.angles; + self.bottle_spawn_location moveto( self.bottle_spawn_location.origin - v_float, putbacktime, putbacktime * 0.5 ); + self.bottle_spawn_location rotateyaw( 90, putbacktime, putbacktime * 0.5 ); +} + +start_perk_bottle_cycling() +{ + self endon( "done_cycling" ); + array_key = getarraykeys( level.perk_bottle_weapon_array ); + timer = 0; + + while ( true ) + { + for ( i = 0; i < array_key.size; i++ ) + { + if ( isdefined( level.perk_bottle_weapon_array[array_key[i]].weapon ) ) + model = getweaponmodel( level.perk_bottle_weapon_array[array_key[i]].weapon ); + else + model = getweaponmodel( level.perk_bottle_weapon_array[array_key[i]].perk_bottle ); + + self.bottle_spawn_location setmodel( model ); + wait 0.2; + } + } +} + +get_perk_weapon_model( perk ) +{ + switch ( perk ) + { + case "specialty_armorvest": + case " _upgrade": + weapon = level.machine_assets["juggernog"].weapon; + break; + case "specialty_quickrevive_upgrade": + case "specialty_quickrevive": + weapon = level.machine_assets["revive"].weapon; + break; + case "specialty_fastreload_upgrade": + case "specialty_fastreload": + weapon = level.machine_assets["speedcola"].weapon; + break; + case "specialty_rof_upgrade": + case "specialty_rof": + weapon = level.machine_assets["doubletap"].weapon; + break; + case "specialty_longersprint_upgrade": + case "specialty_longersprint": + weapon = level.machine_assets["marathon"].weapon; + break; + case "specialty_flakjacket_upgrade": + case "specialty_flakjacket": + weapon = level.machine_assets["divetonuke"].weapon; + break; + case "specialty_deadshot_upgrade": + case "specialty_deadshot": + weapon = level.machine_assets["deadshot"].weapon; + break; + case "specialty_additionalprimaryweapon_upgrade": + case "specialty_additionalprimaryweapon": + weapon = level.machine_assets["additionalprimaryweapon"].weapon; + break; + case "specialty_scavenger_upgrade": + case "specialty_scavenger": + weapon = level.machine_assets["tombstone"].weapon; + break; + case "specialty_finalstand_upgrade": + case "specialty_finalstand": + weapon = level.machine_assets["whoswho"].weapon; + break; + } + + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].perk_bottle ) ) + weapon = level._custom_perks[perk].perk_bottle; + + return getweaponmodel( weapon ); +} + +update_animation( animation ) +{ + switch ( animation ) + { + case "start": + self clearanim( %root, 0.2 ); + self setanim( %o_zombie_dlc4_vending_diesel_turn_on, 1, 0.2, 1 ); + break; + case "shut_down": + self clearanim( %root, 0.2 ); + self setanim( %o_zombie_dlc4_vending_diesel_turn_off, 1, 0.2, 1 ); + break; + case "in_use": + self clearanim( %root, 0.2 ); + self setanim( %o_zombie_dlc4_vending_diesel_ballspin_loop, 1, 0.2, 1 ); + break; + case "idle": + self clearanim( %root, 0.2 ); + self setanim( %o_zombie_dlc4_vending_diesel_on_idle, 1, 0.2, 1 ); + break; + default: + self clearanim( %root, 0.2 ); + self setanim( %o_zombie_dlc4_vending_diesel_on_idle, 1, 0.2, 1 ); + break; + } +} + +machine_sounds() +{ + level endon( "machine_think" ); + + while ( true ) + { + level waittill( "pmstrt" ); + + rndprk_ent = spawn( "script_origin", self.origin ); + rndprk_ent stopsounds(); + rndprk_ent playsound( "zmb_rand_perk_start" ); + rndprk_ent playloopsound( "zmb_rand_perk_loop", 0.5 ); + state_switch = level waittill_any_return( "pmstop", "pmmove" ); + rndprk_ent stoploopsound( 1 ); + + if ( state_switch == "pmstop" ) + rndprk_ent playsound( "zmb_rand_perk_stop" ); + else + rndprk_ent playsound( "zmb_rand_perk_leave" ); + + rndprk_ent delete(); + } +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_powerup_zombie_blood.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_powerup_zombie_blood.gsc new file mode 100644 index 0000000..64c00ad --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_powerup_zombie_blood.gsc @@ -0,0 +1,198 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\_visionset_mgr; + +init( str_zombie_model ) +{ + level.str_zombie_blood_model = str_zombie_model; + precachemodel( level.str_zombie_blood_model ); + registerclientfield( "allplayers", "player_zombie_blood_fx", 14000, 1, "int" ); + level._effect["zombie_blood"] = loadfx( "maps/zombie_tomb/fx_tomb_pwr_up_zmb_blood" ); + level._effect["zombie_blood_1st"] = loadfx( "maps/zombie_tomb/fx_zm_blood_overlay_pclouds" ); + add_zombie_powerup( "zombie_blood", "p6_zm_tm_blood_power_up", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_always_drop, 1, 0, 0, undefined, "powerup_zombie_blood", "zombie_powerup_zombie_blood_time", "zombie_powerup_zombie_blood_on" ); + powerup_set_can_pick_up_in_last_stand( "zombie_blood", 0 ); + onplayerconnect_callback( ::init_player_zombie_blood_vars ); + level.a_zombie_blood_entities = []; + array_thread( getentarray( "zombie_blood_visible", "targetname" ), ::make_zombie_blood_entity ); + + if ( !isdefined( level.vsmgr_prio_visionset_zm_powerup_zombie_blood ) ) + level.vsmgr_prio_visionset_zm_powerup_zombie_blood = 15; + + if ( !isdefined( level.vsmgr_prio_overlay_zm_powerup_zombie_blood ) ) + level.vsmgr_prio_overlay_zm_powerup_zombie_blood = 16; + + maps\mp\_visionset_mgr::vsmgr_register_info( "visionset", "zm_powerup_zombie_blood_visionset", 14000, level.vsmgr_prio_visionset_zm_powerup_zombie_blood, 15, 1 ); + maps\mp\_visionset_mgr::vsmgr_register_info( "overlay", "zm_powerup_zombie_blood_overlay", 14000, level.vsmgr_prio_overlay_zm_powerup_zombie_blood, 15, 1 ); +} + +init_player_zombie_blood_vars() +{ + self.zombie_vars["zombie_powerup_zombie_blood_on"] = 0; + self.zombie_vars["zombie_powerup_zombie_blood_time"] = 30; +} + +zombie_blood_powerup( m_powerup, e_player ) +{ + e_player notify( "zombie_blood" ); + e_player endon( "zombie_blood" ); + e_player endon( "disconnect" ); + e_player thread powerup_vo( "zombie_blood" ); + e_player.ignoreme = 1; + e_player._show_solo_hud = 1; + e_player.zombie_vars["zombie_powerup_zombie_blood_time"] = 30; + e_player.zombie_vars["zombie_powerup_zombie_blood_on"] = 1; + level notify( "player_zombie_blood", e_player ); + maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_powerup_zombie_blood_visionset", e_player ); + maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_powerup_zombie_blood_overlay", e_player ); + e_player setclientfield( "player_zombie_blood_fx", 1 ); + __new = []; + + foreach ( __key, __value in level.a_zombie_blood_entities ) + { + if ( isdefined( __value ) ) + { + if ( isstring( __key ) ) + { + __new[__key] = __value; + continue; + } + + __new[__new.size] = __value; + } + } + + level.a_zombie_blood_entities = __new; + + foreach ( e_zombie_blood in level.a_zombie_blood_entities ) + { + if ( isdefined( e_zombie_blood.e_unique_player ) ) + { + if ( e_zombie_blood.e_unique_player == e_player ) + e_zombie_blood setvisibletoplayer( e_player ); + + continue; + } + + e_zombie_blood setvisibletoplayer( e_player ); + } + + if ( !isdefined( e_player.m_fx ) ) + { + v_origin = e_player gettagorigin( "J_Eyeball_LE" ); + v_angles = e_player gettagangles( "J_Eyeball_LE" ); + m_fx = spawn( "script_model", v_origin ); + m_fx setmodel( "tag_origin" ); + m_fx.angles = v_angles; + m_fx linkto( e_player, "J_Eyeball_LE", ( 0, 0, 0 ), ( 0, 0, 0 ) ); + m_fx thread fx_disconnect_watch( e_player ); + playfxontag( level._effect["zombie_blood"], m_fx, "tag_origin" ); + e_player.m_fx = m_fx; + e_player.m_fx playloopsound( "zmb_zombieblood_3rd_loop", 1 ); + + if ( isdefined( level.str_zombie_blood_model ) ) + { + e_player.hero_model = e_player.model; + e_player setmodel( level.str_zombie_blood_model ); + } + } + + e_player thread watch_zombie_blood_early_exit(); + + while ( e_player.zombie_vars["zombie_powerup_zombie_blood_time"] >= 0 ) + { + wait 0.05; + e_player.zombie_vars["zombie_powerup_zombie_blood_time"] -= 0.05; + } + + e_player notify( "zombie_blood_over" ); + + if ( isdefined( e_player.characterindex ) ) + e_player playsound( "vox_plr_" + e_player.characterindex + "_exert_grunt_" + randomintrange( 0, 3 ) ); + + e_player.m_fx delete(); + maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_powerup_zombie_blood_visionset", e_player ); + maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_powerup_zombie_blood_overlay", e_player ); + e_player.zombie_vars["zombie_powerup_zombie_blood_on"] = 0; + e_player.zombie_vars["zombie_powerup_zombie_blood_time"] = 30; + e_player._show_solo_hud = 0; + e_player setclientfield( "player_zombie_blood_fx", 0 ); + + if ( !isdefined( e_player.early_exit ) ) + e_player.ignoreme = 0; + else + e_player.early_exit = undefined; + + __new = []; + + foreach ( __key, __value in level.a_zombie_blood_entities ) + { + if ( isdefined( __value ) ) + { + if ( isstring( __key ) ) + { + __new[__key] = __value; + continue; + } + + __new[__new.size] = __value; + } + } + + level.a_zombie_blood_entities = __new; + + foreach ( e_zombie_blood in level.a_zombie_blood_entities ) + e_zombie_blood setinvisibletoplayer( e_player ); + + if ( isdefined( e_player.hero_model ) ) + { + e_player setmodel( e_player.hero_model ); + e_player.hero_model = undefined; + } +} + +fx_disconnect_watch( e_player ) +{ + self endon( "death" ); + + e_player waittill( "disconnect" ); + + self delete(); +} + +watch_zombie_blood_early_exit() +{ + self notify( "early_exit_watch" ); + self endon( "early_exit_watch" ); + self endon( "zombie_blood_over" ); + self endon( "disconnect" ); + waittill_any_ents_two( self, "player_downed", level, "end_game" ); + self.zombie_vars["zombie_powerup_zombie_blood_time"] = -0.05; + self.early_exit = 1; +} + +make_zombie_blood_entity() +{ + assert( isdefined( level.a_zombie_blood_entities ), "zombie blood powerup not initiliazed in level" ); + level.a_zombie_blood_entities[level.a_zombie_blood_entities.size] = self; + self setinvisibletoall(); + + foreach ( e_player in getplayers() ) + { + if ( e_player.zombie_vars["zombie_powerup_zombie_blood_on"] ) + { + if ( isdefined( self.e_unique_player ) ) + { + if ( self.e_unique_player == e_player ) + self setvisibletoplayer( e_player ); + + continue; + } + + self setvisibletoplayer( e_player ); + } + } +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_riotshield_tomb.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_riotshield_tomb.gsc new file mode 100644 index 0000000..c05d8de --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_riotshield_tomb.gsc @@ -0,0 +1,626 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_weap_riotshield_tomb; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_weapons; + +init() +{ + level.riotshield_name = "tomb_shield_zm"; + level.deployedshieldmodel = []; + level.stowedshieldmodel = []; + level.carriedshieldmodel = []; + level.deployedshieldmodel[0] = "t6_wpn_zmb_shield_dlc4_dmg0_world"; + level.deployedshieldmodel[2] = "t6_wpn_zmb_shield_dlc4_dmg1_world"; + level.deployedshieldmodel[3] = "t6_wpn_zmb_shield_dlc4_dmg2_world"; + level.stowedshieldmodel[0] = "t6_wpn_zmb_shield_dlc4_dmg0_stow"; + level.stowedshieldmodel[2] = "t6_wpn_zmb_shield_dlc4_dmg1_stow"; + level.stowedshieldmodel[3] = "t6_wpn_zmb_shield_dlc4_dmg2_stow"; + level.carriedshieldmodel[0] = "t6_wpn_zmb_shield_dlc4_dmg0_world"; + level.carriedshieldmodel[2] = "t6_wpn_zmb_shield_dlc4_dmg1_world"; + level.carriedshieldmodel[3] = "t6_wpn_zmb_shield_dlc4_dmg2_world"; + level.viewshieldmodel[0] = "t6_wpn_zmb_shield_dlc4_dmg0_view"; + level.viewshieldmodel[2] = "t6_wpn_zmb_shield_dlc4_dmg1_view"; + level.viewshieldmodel[3] = "t6_wpn_zmb_shield_dlc4_dmg2_view"; + precachemodel( level.stowedshieldmodel[0] ); + precachemodel( level.stowedshieldmodel[2] ); + precachemodel( level.stowedshieldmodel[3] ); + precachemodel( level.carriedshieldmodel[0] ); + precachemodel( level.carriedshieldmodel[2] ); + precachemodel( level.carriedshieldmodel[3] ); + precachemodel( level.viewshieldmodel[0] ); + precachemodel( level.viewshieldmodel[2] ); + precachemodel( level.viewshieldmodel[3] ); + level.riotshield_placement_zoffset = 26; +} + +attachriotshield( model, tag ) +{ + if ( isdefined( self.prev_shield_model ) && isdefined( self.prev_shield_tag ) ) + self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); + + self.prev_shield_model = model; + self.prev_shield_tag = tag; + + if ( isdefined( self.prev_shield_model ) && isdefined( self.prev_shield_tag ) ) + self attachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); +} + +removeriotshield() +{ + if ( isdefined( self.prev_shield_model ) && isdefined( self.prev_shield_tag ) ) + self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); + + self.prev_shield_model = undefined; + self.prev_shield_tag = undefined; + + if ( self getcurrentweapon() != level.riotshield_name ) + return; + + self setheldweaponmodel( 0 ); +} + +setriotshieldviewmodel( modelnum ) +{ + self.prev_shield_viewmodel = modelnum; + + if ( self getcurrentweapon() != level.riotshield_name ) + return; + + if ( isdefined( self.prev_shield_viewmodel ) ) + self setheldweaponmodel( self.prev_shield_viewmodel ); + else + self setheldweaponmodel( 0 ); +} + +specialriotshieldviewmodel() +{ + if ( self getcurrentweapon() != level.riotshield_name ) + return; + + self setheldweaponmodel( 3 ); +} + +restoreriotshieldviewmodel() +{ + if ( self getcurrentweapon() != level.riotshield_name ) + return; + + if ( isdefined( self.prev_shield_viewmodel ) ) + self setheldweaponmodel( self.prev_shield_viewmodel ); + else + self setheldweaponmodel( 0 ); +} + +updateriotshieldmodel() +{ + if ( !isdefined( self.shield_damage_level ) ) + { + if ( isdefined( self.player_shield_reset_health ) ) + self [[ self.player_shield_reset_health ]](); + } + + update = 0; + + if ( !isdefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level ) + { + self.prev_shield_damage_level = self.shield_damage_level; + update = 1; + } + + if ( !isdefined( self.prev_shield_placement ) || self.prev_shield_placement != self.shield_placement ) + { + self.prev_shield_placement = self.shield_placement; + update = 1; + } + + if ( update ) + { + if ( self.prev_shield_placement == 0 ) + self attachriotshield(); + else if ( self.prev_shield_placement == 1 ) + { + self attachriotshield( level.carriedshieldmodel[self.prev_shield_damage_level], "tag_weapon_left" ); + self setriotshieldviewmodel( self.prev_shield_damage_level ); + } + else if ( self.prev_shield_placement == 2 ) + self attachriotshield( level.stowedshieldmodel[self.prev_shield_damage_level], "tag_stowed_back" ); + else if ( self.prev_shield_placement == 3 ) + { + self attachriotshield(); + + if ( isdefined( self.shield_ent ) ) + self.shield_ent setmodel( level.deployedshieldmodel[self.prev_shield_damage_level] ); + } + } +} + +updatestandaloneriotshieldmodel() +{ + update = 0; + + if ( !isdefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level ) + { + self.prev_shield_damage_level = self.shield_damage_level; + update = 1; + } + + if ( update ) + self setmodel( level.deployedshieldmodel[self.prev_shield_damage_level] ); +} + +watchshieldlaststand() +{ + self endon( "death" ); + self endon( "disconnect" ); + self notify( "watchShieldLastStand" ); + self endon( "watchShieldLastStand" ); + + while ( true ) + { + self waittill( "weapons_taken_for_last_stand" ); + + self.riotshield_hidden = 0; + + if ( isdefined( self.hasriotshield ) && self.hasriotshield ) + { + if ( self.prev_shield_placement == 1 || self.prev_shield_placement == 2 ) + { + self.riotshield_hidden = 2; + self.shield_placement = 0; + self updateriotshieldmodel(); + } + } + + str_notify = self waittill_any_return( "player_revived", "bled_out" ); + + if ( str_notify == "player_revived" ) + { + if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden > 0 ) + { + self.shield_placement = self.riotshield_hidden; + self updateriotshieldmodel(); + } + } + else + self maps\mp\zombies\_zm_weap_riotshield_tomb::player_take_riotshield(); + + self.riotshield_hidden = undefined; + } +} + +trackriotshield() +{ + self endon( "death" ); + self endon( "disconnect" ); + self.hasriotshield = self hasweapon( level.riotshield_name ); + self.hasriotshieldequipped = self getcurrentweapon() == level.riotshield_name; + self.shield_placement = 0; + + if ( self.hasriotshield ) + { + if ( self.hasriotshieldequipped ) + { + self.shield_placement = 1; + self updateriotshieldmodel(); + } + else + { + self.shield_placement = 2; + self updateriotshieldmodel(); + } + } + + for (;;) + { + self waittill( "weapon_change", newweapon ); + + if ( newweapon == level.riotshield_name ) + { + if ( self.hasriotshieldequipped ) + continue; + + if ( isdefined( self.riotshieldentity ) ) + self notify( "destroy_riotshield" ); + + self.shield_placement = 1; + self updateriotshieldmodel(); + + if ( self.hasriotshield ) + { + + } + else + { + + } + + self.hasriotshield = 1; + self.hasriotshieldequipped = 1; + continue; + } + + if ( self ismantling() && newweapon == "none" ) + continue; + + if ( self.hasriotshieldequipped ) + { + assert( self.hasriotshield ); + self.hasriotshield = self hasweapon( level.riotshield_name ); + + if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden ) + { + + } + else if ( self.hasriotshield ) + self.shield_placement = 2; + else if ( isdefined( self.shield_ent ) ) + assert( self.shield_placement == 3 ); + else + self.shield_placement = 0; + + self updateriotshieldmodel(); + self.hasriotshieldequipped = 0; + continue; + } + + if ( self.hasriotshield ) + { + if ( !self hasweapon( level.riotshield_name ) ) + { + self.shield_placement = 0; + self updateriotshieldmodel(); + self.hasriotshield = 0; + } + + continue; + } + + if ( self hasweapon( level.riotshield_name ) ) + { + self.shield_placement = 2; + self updateriotshieldmodel(); + self.hasriotshield = 1; + } + } +} + +trackequipmentchange() +{ + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "equipment_dropped", equipname ); + + self notify( "weapon_change", self getcurrentweapon() ); + } +} + +updateriotshieldplacement() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "deploy_riotshield" ); + self endon( "start_riotshield_deploy" ); + self endon( "weapon_change" ); + + while ( true ) + { + placement = self canplaceriotshield( "raise_riotshield" ); + + if ( placement["result"] && riotshielddistancetest( placement["origin"] ) ) + { + self restoreriotshieldviewmodel(); + self setplacementhint( 1 ); + } + else + { + self specialriotshieldviewmodel(); + self setplacementhint( 0 ); + } + + wait 0.05; + } +} + +startriotshielddeploy() +{ + self notify( "start_riotshield_deploy" ); + self thread updateriotshieldplacement(); + self thread watchriotshielddeploy(); +} + +spawnriotshieldcover( origin, angles ) +{ + shield_ent = spawn( "script_model", origin, 1 ); + shield_ent.angles = angles; + shield_ent setowner( self ); + shield_ent.owner = self; + shield_ent.owner.shield_ent = shield_ent; + shield_ent.isriotshield = 1; + self.shield_placement = 3; + self updateriotshieldmodel(); + shield_ent setscriptmoverflag( 0 ); + self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( shield_ent, "destroy_riotshield", 1 ); + maps\mp\zombies\_zm_equipment::destructible_equipment_list_add( shield_ent ); + return shield_ent; +} + +watchriotshielddeploy() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "start_riotshield_deploy" ); + self endon( "destroy_riotshield" ); + + self waittill( "deploy_riotshield", deploy_attempt ); + + self restoreriotshieldviewmodel(); + self setplacementhint( 1 ); + placement_hint = 0; + + if ( deploy_attempt ) + { + placement = self canplaceriotshield( "deploy_riotshield" ); + + if ( placement["result"] && riotshielddistancetest( placement["origin"] ) && self check_plant_position( placement["origin"], placement["angles"] ) ) + self doriotshielddeploy( placement["origin"], placement["angles"] ); + else + { + placement_hint = 1; + clip_max_ammo = weaponclipsize( level.riotshield_name ); + self setweaponammoclip( level.riotshield_name, clip_max_ammo ); + } + } + else + placement_hint = 1; + + if ( placement_hint ) + self setriotshieldfailhint(); +} + +check_plant_position( origin, angles ) +{ + if ( isdefined( level.equipment_safe_to_drop ) ) + { + ret = 1; + test_ent = spawn( "script_model", origin ); + test_ent setmodel( level.deployedshieldmodel[0] ); + test_ent.angles = angles; + + if ( !self [[ level.equipment_safe_to_drop ]]( test_ent ) ) + ret = 0; + + test_ent delete(); + return ret; + } + + return 1; +} + +doriotshielddeploy( origin, angles ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "start_riotshield_deploy" ); + self notify( "deployed_riotshield" ); + self maps\mp\zombies\_zm_buildables::track_placed_buildables( level.riotshield_name ); + + if ( isdefined( self.current_equipment ) && self.current_equipment == level.riotshield_name ) + self maps\mp\zombies\_zm_equipment::equipment_to_deployed( level.riotshield_name ); + + zoffset = level.riotshield_placement_zoffset; + shield_ent = self spawnriotshieldcover( origin + ( 0, 0, zoffset ), angles ); + item_ent = deployriotshield( self, shield_ent ); + primaries = self getweaponslistprimaries(); +/# + assert( isdefined( item_ent ) ); + assert( !isdefined( self.riotshieldretrievetrigger ) ); + assert( !isdefined( self.riotshieldentity ) ); +#/ + self maps\mp\zombies\_zm_weapons::switch_back_primary_weapon( primaries[0] ); + + if ( isdefined( level.equipment_planted ) ) + self [[ level.equipment_planted ]]( shield_ent, level.riotshield_name, self ); + + if ( isdefined( level.equipment_safe_to_drop ) ) + { + if ( !self [[ level.equipment_safe_to_drop ]]( shield_ent ) ) + { + self notify( "destroy_riotshield" ); + shield_ent delete(); + item_ent delete(); + return; + } + } + + self.riotshieldretrievetrigger = item_ent; + self.riotshieldentity = shield_ent; + self thread watchdeployedriotshieldents(); + self thread deleteshieldondamage( self.riotshieldentity ); + self thread deleteshieldmodelonweaponpickup( self.riotshieldretrievetrigger ); + self thread deleteriotshieldonplayerdeath(); + self thread watchshieldtriggervisibility( self.riotshieldretrievetrigger ); + self.riotshieldentity thread watchdeployedriotshielddamage(); + return shield_ent; +} + +riotshielddistancetest( origin ) +{ + assert( isdefined( origin ) ); + min_dist_squared = getdvarfloat( "riotshield_deploy_limit_radius" ); + min_dist_squared *= min_dist_squared; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( isdefined( level.players[i].riotshieldentity ) ) + { + dist_squared = distancesquared( level.players[i].riotshieldentity.origin, origin ); + + if ( min_dist_squared > dist_squared ) + { +/# + println( "Shield placement denied! Failed distance check to other riotshields." ); +#/ + return false; + } + } + } + + return true; +} + +watchdeployedriotshieldents() +{ +/# + assert( isdefined( self.riotshieldretrievetrigger ) ); + assert( isdefined( self.riotshieldentity ) ); +#/ + riotshieldretrievetrigger = self.riotshieldretrievetrigger; + riotshieldentity = self.riotshieldentity; + self waittill_any( "destroy_riotshield", "disconnect", "tomb_shield_zm_taken" ); + + if ( isdefined( self ) ) + { + self.shield_placement = 0; + self updateriotshieldmodel(); + } + + if ( isdefined( riotshieldretrievetrigger ) ) + riotshieldretrievetrigger delete(); + + if ( isdefined( riotshieldentity ) ) + riotshieldentity delete(); +} + +watchdeployedriotshielddamage() +{ + self endon( "death" ); + damagemax = getdvarint( "riotshield_deployed_health" ); + self.damagetaken = 0; + + while ( true ) + { + self.maxhealth = 100000; + self.health = self.maxhealth; + + self waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, idflags ); + + if ( !( isdefined( level.players_can_damage_riotshields ) && level.players_can_damage_riotshields ) ) + continue; + + if ( !isdefined( attacker ) || !isplayer( attacker ) ) + continue; + + assert( isdefined( self.owner ) && isdefined( self.owner.team ) ); + + if ( is_encounter() && attacker.team == self.owner.team && attacker != self.owner ) + continue; + + if ( isdefined( level.riotshield_damage_callback ) ) + self.owner [[ level.riotshield_damage_callback ]]( damage, 0 ); + else + { + if ( type == "MOD_MELEE" ) + damage *= getdvarfloat( "riotshield_melee_damage_scale" ); + else if ( type == "MOD_PISTOL_BULLET" || type == "MOD_RIFLE_BULLET" ) + damage *= getdvarfloat( "riotshield_bullet_damage_scale" ); + else if ( type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" || type == "MOD_EXPLOSIVE" || type == "MOD_EXPLOSIVE_SPLASH" || type == "MOD_PROJECTILE" || type == "MOD_PROJECTILE_SPLASH" ) + damage *= getdvarfloat( "riotshield_explosive_damage_scale" ); + else if ( type == "MOD_IMPACT" ) + damage *= getdvarfloat( "riotshield_projectile_damage_scale" ); + + self.damagetaken += damage; + + if ( self.damagetaken >= damagemax ) + self damagethendestroyriotshield(); + } + } +} + +damagethendestroyriotshield() +{ + self endon( "death" ); + self.owner.riotshieldretrievetrigger delete(); + self notsolid(); + self setclientflag( 14 ); + wait( getdvarfloat( "riotshield_destroyed_cleanup_time" ) ); + self.owner notify( "destroy_riotshield" ); +} + +deleteshieldondamage( shield_ent ) +{ + shield_ent waittill( "death" ); + + self notify( "destroy_riotshield" ); +} + +deleteshieldmodelonweaponpickup( shield_trigger ) +{ + shield_trigger waittill( "trigger", player ); + + self maps\mp\zombies\_zm_equipment::equipment_from_deployed( level.riotshield_name ); + self notify( "destroy_riotshield" ); + + if ( self != player ) + { + if ( isdefined( level.transferriotshield ) ) + [[ level.transferriotshield ]]( self, player ); + } +} + +watchshieldtriggervisibility( trigger ) +{ + self endon( "death" ); + trigger endon( "death" ); + + while ( isdefined( trigger ) ) + { + players = get_players(); + + foreach ( player in players ) + { + pickup = 1; + + if ( !isdefined( player ) ) + continue; + + if ( is_true( player.afterlife ) ) + { + trigger setinvisibletoplayer( player ); + wait 0.05; + continue; + } + + if ( isdefined( level.cantransferriotshield ) ) + pickup = [[ level.cantransferriotshield ]]( self, player ); + + if ( !isdefined( trigger ) ) + return; + + if ( pickup ) + trigger setvisibletoplayer( player ); + else + trigger setinvisibletoplayer( player ); + + wait 0.05; + } + + wait 0.05; + } +} + +deleteriotshieldonplayerdeath() +{ + self.riotshieldentity endon( "death" ); + + self waittill( "death" ); + + self notify( "destroy_riotshield" ); +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_ballistic_knife.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_ballistic_knife.gsc new file mode 100644 index 0000000..d83c091 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_ballistic_knife.gsc @@ -0,0 +1,302 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_stats; + +init() +{ + if ( !isdefined( level.ballistic_knife_autorecover ) ) + level.ballistic_knife_autorecover = 1; + + if ( isdefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 ) + { + precachemodel( "t5_weapon_ballistic_knife_projectile" ); + precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" ); + } +} + +on_spawn( watcher, player ) +{ + player endon( "death" ); + player endon( "disconnect" ); + player endon( "zmb_lost_knife" ); + level endon( "game_ended" ); + + self waittill( "stationary", endpos, normal, angles, attacker, prey, bone ); + + isfriendly = 0; + + if ( isdefined( endpos ) ) + { + retrievable_model = spawn( "script_model", endpos ); + retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); + retrievable_model setowner( player ); + retrievable_model.owner = player; + retrievable_model.angles = angles; + retrievable_model.name = watcher.weapon; + + if ( isdefined( prey ) ) + { + if ( isplayer( prey ) && player.team == prey.team ) + isfriendly = 1; + else if ( isai( prey ) && player.team == prey.team ) + isfriendly = 1; + + if ( !isfriendly ) + { + retrievable_model linkto( prey, bone ); + retrievable_model thread force_drop_knives_to_ground_on_death( player, prey ); + } + else if ( isfriendly ) + { + retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) ); + normal = ( 0, 0, 1 ); + } + } + + watcher.objectarray[watcher.objectarray.size] = retrievable_model; + + if ( isfriendly ) + retrievable_model waittill( "stationary" ); + + retrievable_model thread drop_knives_to_ground( player ); + + if ( isfriendly ) + player notify( "ballistic_knife_stationary", retrievable_model, normal ); + else + player notify( "ballistic_knife_stationary", retrievable_model, normal, prey ); + + retrievable_model thread wait_to_show_glowing_model( prey ); + } +} + +wait_to_show_glowing_model( prey ) +{ + level endon( "game_ended" ); + self endon( "death" ); + wait 2; + self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); +} + +on_spawn_retrieve_trigger( watcher, player ) +{ + player endon( "death" ); + player endon( "disconnect" ); + player endon( "zmb_lost_knife" ); + level endon( "game_ended" ); + + player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey ); + + if ( !isdefined( retrievable_model ) ) + return; + + trigger_pos = []; + + if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) ) + { + trigger_pos[0] = prey.origin[0]; + trigger_pos[1] = prey.origin[1]; + trigger_pos[2] = prey.origin[2] + 10; + } + else + { + trigger_pos[0] = retrievable_model.origin[0] + 10 * normal[0]; + trigger_pos[1] = retrievable_model.origin[1] + 10 * normal[1]; + trigger_pos[2] = retrievable_model.origin[2] + 10 * normal[2]; + } + + if ( is_true( level.ballistic_knife_autorecover ) ) + { + trigger_pos[2] -= 50.0; + pickup_trigger = spawn( "trigger_radius", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ), 0, 50, 100 ); + } + else + { + pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ) ); + pickup_trigger setcursorhint( "HINT_NOICON" ); + } + + pickup_trigger.owner = player; + retrievable_model.retrievabletrigger = pickup_trigger; + hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP"; + + if ( isdefined( hint_string ) ) + pickup_trigger sethintstring( hint_string ); + else + pickup_trigger sethintstring( &"GENERIC_PICKUP" ); + + pickup_trigger setteamfortrigger( player.team ); + player clientclaimtrigger( pickup_trigger ); + pickup_trigger enablelinkto(); + + if ( isdefined( prey ) ) + pickup_trigger linkto( prey ); + else + pickup_trigger linkto( retrievable_model ); + + if ( isdefined( level.knife_planted ) ) + [[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey ); + + retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound ); + player thread watch_shutdown( pickup_trigger, retrievable_model ); +} + +debug_print( endpos ) +{ +/# + self endon( "death" ); + + while ( true ) + { + print3d( endpos, "pickup_trigger" ); + wait 0.05; + } +#/ +} + +watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse ) +{ + self endon( "death" ); + self endon( "delete" ); + level endon( "game_ended" ); + max_ammo = weaponmaxammo( weapon ) + 1; + autorecover = is_true( level.ballistic_knife_autorecover ); + + while ( true ) + { + trigger waittill( "trigger", player ); + + if ( !isalive( player ) ) + continue; + + if ( !player isonground() && !is_true( trigger.force_pickup ) ) + continue; + + if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam ) + continue; + + if ( isdefined( trigger.claimedby ) && player != trigger.claimedby ) + continue; + + ammo_stock = player getweaponammostock( weapon ); + ammo_clip = player getweaponammoclip( weapon ); + current_weapon = player getcurrentweapon(); + total_ammo = ammo_stock + ammo_clip; + hasreloaded = 1; + + if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon ) + hasreloaded = 0; + + if ( total_ammo >= max_ammo || !hasreloaded ) + continue; + + if ( autorecover || player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() || is_true( trigger.force_pickup ) ) + { + if ( isdefined( playersoundonuse ) ) + player playlocalsound( playersoundonuse ); + + if ( isdefined( npcsoundonuse ) ) + player playsound( npcsoundonuse ); + + player thread [[ callback ]]( weapon, model, trigger ); + break; + } + } +} + +pick_up( weapon, model, trigger ) +{ + if ( self hasweapon( weapon ) ) + { + current_weapon = self getcurrentweapon(); + + if ( current_weapon != weapon ) + { + clip_ammo = self getweaponammoclip( weapon ); + + if ( !clip_ammo ) + self setweaponammoclip( weapon, 1 ); + else + { + new_ammo_stock = self getweaponammostock( weapon ) + 1; + self setweaponammostock( weapon, new_ammo_stock ); + } + } + else + { + new_ammo_stock = self getweaponammostock( weapon ) + 1; + self setweaponammostock( weapon, new_ammo_stock ); + } + } + + self maps\mp\zombies\_zm_stats::increment_client_stat( "ballistic_knives_pickedup" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "ballistic_knives_pickedup" ); + model destroy_ent(); + trigger destroy_ent(); +} + +destroy_ent() +{ + if ( isdefined( self ) ) + { + if ( isdefined( self.glowing_model ) ) + self.glowing_model delete(); + + self delete(); + } +} + +watch_shutdown( trigger, model ) +{ + self waittill_any( "death_or_disconnect", "zmb_lost_knife" ); + trigger destroy_ent(); + model destroy_ent(); +} + +drop_knives_to_ground( player ) +{ + player endon( "death" ); + player endon( "zmb_lost_knife" ); + + for (;;) + { + level waittill( "drop_objects_to_ground", origin, radius ); + + if ( distancesquared( origin, self.origin ) < radius * radius ) + { + self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) ); + self thread update_retrieve_trigger( player ); + } + } +} + +force_drop_knives_to_ground_on_death( player, prey ) +{ + self endon( "death" ); + player endon( "zmb_lost_knife" ); + + prey waittill( "death" ); + + self unlink(); + self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) ); + self thread update_retrieve_trigger( player ); +} + +update_retrieve_trigger( player ) +{ + self endon( "death" ); + player endon( "zmb_lost_knife" ); + + if ( isdefined( level.custom_update_retrieve_trigger ) ) + { + self [[ level.custom_update_retrieve_trigger ]]( player ); + return; + } + + self waittill( "stationary" ); + + trigger = self.retrievabletrigger; + trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 ); + trigger linkto( self ); +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_beacon.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_beacon.gsc new file mode 100644 index 0000000..acf3c5e --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_beacon.gsc @@ -0,0 +1,972 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_clone; +#include maps\mp\zombies\_zm_audio; + +#using_animtree("zombie_beacon"); + +init() +{ + if ( !beacon_exists() ) + return; +/# + level.zombiemode_devgui_beacon_give = ::player_give_beacon; +#/ + registerclientfield( "world", "play_launch_artillery_fx_robot_0", 14000, 1, "int" ); + registerclientfield( "world", "play_launch_artillery_fx_robot_1", 14000, 1, "int" ); + registerclientfield( "world", "play_launch_artillery_fx_robot_2", 14000, 1, "int" ); + registerclientfield( "scriptmover", "play_beacon_fx", 14000, 1, "int" ); + registerclientfield( "scriptmover", "play_artillery_barrage", 14000, 2, "int" ); + precachemodel( "jun_missile" ); + level._effect["beacon_glow"] = loadfx( "maps/zombie_tomb/fx_tomb_beacon_glow" ); + level._effect["beacon_shell_explosion"] = loadfx( "maps/zombie_tomb/fx_tomb_beacon_exp" ); + level._effect["beacon_shell_trail"] = loadfx( "maps/zombie_tomb/fx_tomb_beacon_trail" ); + level._effect["beacon_launch_fx"] = loadfx( "maps/zombie_tomb/fx_tomb_beacon_launch" ); + level._effect["grenade_samantha_steal"] = loadfx( "maps/zombie/fx_zmb_blackhole_trap_end" ); + level.beacons = []; + level.zombie_weapons_callbacks["beacon_zm"] = ::player_give_beacon; + scriptmodelsuseanimtree( #animtree ); +} + +player_give_beacon() +{ + self giveweapon( "beacon_zm" ); + self set_player_tactical_grenade( "beacon_zm" ); + self thread player_handle_beacon(); +} + +player_handle_beacon() +{ + self notify( "starting_beacon_watch" ); + self endon( "disconnect" ); + self endon( "starting_beacon_watch" ); + attract_dist_diff = level.beacon_attract_dist_diff; + + if ( !isdefined( attract_dist_diff ) ) + attract_dist_diff = 45; + + num_attractors = level.num_beacon_attractors; + + if ( !isdefined( num_attractors ) ) + num_attractors = 96; + + max_attract_dist = level.beacon_attract_dist; + + if ( !isdefined( max_attract_dist ) ) + max_attract_dist = 1536; + + while ( true ) + { + grenade = get_thrown_beacon(); + self thread player_throw_beacon( grenade, num_attractors, max_attract_dist, attract_dist_diff ); + wait 0.05; + } +} + +watch_for_dud( model, actor ) +{ + self endon( "death" ); + + self waittill( "grenade_dud" ); + + model.dud = 1; + self.monk_scream_vox = 1; + wait 3; + + if ( isdefined( model ) ) + model delete(); + + if ( isdefined( actor ) ) + actor delete(); + + if ( isdefined( self.damagearea ) ) + self.damagearea delete(); + + if ( isdefined( self ) ) + self delete(); +} + +watch_for_emp( model, actor ) +{ + self endon( "death" ); + + if ( !should_watch_for_emp() ) + return; + + while ( true ) + { + level waittill( "emp_detonate", origin, radius ); + + if ( distancesquared( origin, self.origin ) < radius * radius ) + break; + } + + self.stun_fx = 1; + + if ( isdefined( level._equipment_emp_destroy_fx ) ) + playfx( level._equipment_emp_destroy_fx, self.origin + vectorscale( ( 0, 0, 1 ), 5.0 ), ( 0, randomfloat( 360 ), 0 ) ); + + wait 0.15; + self.attract_to_origin = 0; + self deactivate_zombie_point_of_interest(); + wait 1; + self detonate(); + wait 1; + + if ( isdefined( model ) ) + model delete(); + + if ( isdefined( actor ) ) + actor delete(); + + if ( isdefined( self.damagearea ) ) + self.damagearea delete(); + + if ( isdefined( self ) ) + self delete(); +} + +clone_player_angles( owner ) +{ + self endon( "death" ); + owner endon( "bled_out" ); + + while ( isdefined( self ) ) + { + self.angles = owner.angles; + wait 0.05; + } +} + +show_briefly( showtime ) +{ + self endon( "show_owner" ); + + if ( isdefined( self.show_for_time ) ) + { + self.show_for_time = showtime; + return; + } + + self.show_for_time = showtime; + self setvisibletoall(); + + while ( self.show_for_time > 0 ) + { + self.show_for_time -= 0.05; + wait 0.05; + } + + self setvisibletoallexceptteam( level.zombie_team ); + self.show_for_time = undefined; +} + +show_owner_on_attack( owner ) +{ + owner endon( "hide_owner" ); + owner endon( "show_owner" ); + self endon( "explode" ); + self endon( "death" ); + self endon( "grenade_dud" ); + owner.show_for_time = undefined; + + for (;;) + { + owner waittill( "weapon_fired" ); + + owner thread show_briefly( 0.5 ); + } +} + +hide_owner( owner ) +{ + owner notify( "hide_owner" ); + owner endon( "hide_owner" ); + owner setperk( "specialty_immunemms" ); + owner.no_burning_sfx = 1; + owner notify( "stop_flame_sounds" ); + owner setvisibletoallexceptteam( level.zombie_team ); + owner.hide_owner = 1; + + if ( isdefined( level._effect["human_disappears"] ) ) + playfx( level._effect["human_disappears"], owner.origin ); + + self thread show_owner_on_attack( owner ); + evt = self waittill_any_return( "explode", "death", "grenade_dud" ); +/# + println( "ZMCLONE: Player visible again because of " + evt ); +#/ + owner notify( "show_owner" ); + owner unsetperk( "specialty_immunemms" ); + + if ( isdefined( level._effect["human_disappears"] ) ) + playfx( level._effect["human_disappears"], owner.origin ); + + owner.no_burning_sfx = undefined; + owner setvisibletoall(); + owner.hide_owner = undefined; + owner show(); +} + +proximity_detonate( owner ) +{ + wait 1.5; + + if ( !isdefined( self ) ) + return; + + detonateradius = 96; + explosionradius = detonateradius * 2; + damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 1.5 ); + damagearea setexcludeteamfortrigger( owner.team ); + damagearea enablelinkto(); + damagearea linkto( self ); + self.damagearea = damagearea; + + while ( isdefined( self ) ) + { + damagearea waittill( "trigger", ent ); + + if ( isdefined( owner ) && ent == owner ) + continue; + + if ( isdefined( ent.team ) && ent.team == owner.team ) + continue; + + self playsound( "wpn_claymore_alert" ); + dist = distance( self.origin, ent.origin ); + radiusdamage( self.origin + vectorscale( ( 0, 0, 1 ), 12.0 ), explosionradius, 1, 1, owner, "MOD_GRENADE_SPLASH", "beacon_zm" ); + + if ( isdefined( owner ) ) + self detonate( owner ); + else + self detonate( undefined ); + + break; + } + + if ( isdefined( damagearea ) ) + damagearea delete(); +} + +player_throw_beacon( grenade, num_attractors, max_attract_dist, attract_dist_diff ) +{ + self endon( "disconnect" ); + self endon( "starting_beacon_watch" ); + + if ( isdefined( grenade ) ) + { + grenade endon( "death" ); + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + if ( isdefined( grenade.damagearea ) ) + grenade.damagearea delete(); + + grenade delete(); + return; + } + + grenade hide(); + model = spawn( "script_model", grenade.origin ); + model endon( "weapon_beacon_timeout" ); + model setmodel( "t6_wpn_zmb_homing_beacon_world" ); + model useanimtree( #animtree ); + model linkto( grenade ); + model.angles = grenade.angles; + model thread beacon_cleanup( grenade ); + model.owner = self; + clone = undefined; + + if ( isdefined( level.beacon_dual_view ) && level.beacon_dual_view ) + { + model setvisibletoallexceptteam( level.zombie_team ); + clone = maps\mp\zombies\_zm_clone::spawn_player_clone( self, vectorscale( ( 0, 0, -1 ), 999.0 ), level.beacon_clone_weapon, undefined ); + model.simulacrum = clone; + clone maps\mp\zombies\_zm_clone::clone_animate( "idle" ); + clone thread clone_player_angles( self ); + clone notsolid(); + clone ghost(); + } + + grenade thread watch_for_dud( model, clone ); + info = spawnstruct(); + info.sound_attractors = []; + grenade thread monitor_zombie_groans( info ); + + grenade waittill( "stationary" ); + + if ( isdefined( level.grenade_planted ) ) + self thread [[ level.grenade_planted ]]( grenade, model ); + + if ( isdefined( grenade ) ) + { + if ( isdefined( model ) ) + { + model thread weapon_beacon_anims(); + + if ( !( isdefined( grenade.backlinked ) && grenade.backlinked ) ) + { + model unlink(); + model.origin = grenade.origin; + model.angles = grenade.angles; + } + } + + if ( isdefined( clone ) ) + { + clone forceteleport( grenade.origin, grenade.angles ); + clone thread hide_owner( self ); + grenade thread proximity_detonate( self ); + clone show(); + clone setinvisibletoall(); + clone setvisibletoteam( level.zombie_team ); + } + + grenade resetmissiledetonationtime(); + model setclientfield( "play_beacon_fx", 1 ); + valid_poi = check_point_in_enabled_zone( grenade.origin, undefined, undefined ); + + if ( isdefined( level.check_valid_poi ) ) + valid_poi = grenade [[ level.check_valid_poi ]]( valid_poi ); + + if ( valid_poi ) + { + grenade create_zombie_point_of_interest( max_attract_dist, num_attractors, 10000 ); + grenade.attract_to_origin = 1; + grenade thread create_zombie_point_of_interest_attractor_positions( 4, attract_dist_diff ); + grenade thread wait_for_attractor_positions_complete(); + grenade thread do_beacon_sound( model, info ); + model thread wait_and_explode( grenade ); + model.time_thrown = gettime(); + + while ( isdefined( level.weapon_beacon_busy ) && level.weapon_beacon_busy ) + { + wait 0.1; + continue; + } + + if ( flag( "three_robot_round" ) && flag( "fire_link_enabled" ) ) + model thread start_artillery_launch_ee( grenade ); + else + model thread start_artillery_launch_normal( grenade ); + + level.beacons[level.beacons.size] = grenade; + } + else + { + grenade.script_noteworthy = undefined; + level thread grenade_stolen_by_sam( grenade, model, clone ); + } + } + else + { + grenade.script_noteworthy = undefined; + level thread grenade_stolen_by_sam( grenade, model, clone ); + } + } +} + +weapon_beacon_anims() +{ + n_time = getanimlength( %o_zombie_dlc4_homing_deploy ); + self setanim( %o_zombie_dlc4_homing_deploy ); + wait( n_time ); + self setanim( %o_zombie_dlc4_homing_spin ); +} + +grenade_stolen_by_sam( ent_grenade, ent_model, ent_actor ) +{ + if ( !isdefined( ent_model ) ) + return; + + direction = ent_model.origin; + direction = ( direction[1], direction[0], 0 ); + + if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 ) + direction = ( direction[0], direction[1] * -1, 0 ); + else if ( direction[0] < 0 ) + direction = ( direction[0] * -1, direction[1], 0 ); + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isalive( players[i] ) ) + players[i] playlocalsound( level.zmb_laugh_alias ); + } + + playfxontag( level._effect["grenade_samantha_steal"], ent_model, "tag_origin" ); + ent_model movez( 60, 1.0, 0.25, 0.25 ); + ent_model vibrate( direction, 1.5, 2.5, 1.0 ); + + ent_model waittill( "movedone" ); + + if ( isdefined( self.damagearea ) ) + self.damagearea delete(); + + ent_model delete(); + + if ( isdefined( ent_actor ) ) + ent_actor delete(); + + if ( isdefined( ent_grenade ) ) + { + if ( isdefined( ent_grenade.damagearea ) ) + ent_grenade.damagearea delete(); + + ent_grenade delete(); + } +} + +wait_for_attractor_positions_complete() +{ + self waittill( "attractor_positions_generated" ); + + self.attract_to_origin = 0; +} + +beacon_cleanup( parent ) +{ + while ( true ) + { + if ( !isdefined( parent ) ) + { + if ( isdefined( self ) && ( isdefined( self.dud ) && self.dud ) ) + wait 6; + + if ( isdefined( self.simulacrum ) ) + self.simulacrum delete(); + + self_delete(); + return; + } + + wait 0.05; + } +} + +do_beacon_sound( model, info ) +{ + self.monk_scream_vox = 0; + + if ( isdefined( level.grenade_safe_to_bounce ) ) + { + if ( ![[ level.grenade_safe_to_bounce ]]( self.owner, "beacon_zm" ) ) + self.monk_scream_vox = 1; + } + + if ( !self.monk_scream_vox && level.music_override == 0 ) + { + if ( isdefined( level.beacon_dual_view ) && level.beacon_dual_view ) + self playsoundtoteam( "null", "allies" ); + else + self playsound( "null" ); + } + + if ( !self.monk_scream_vox ) + self thread play_delayed_explode_vox(); + + self waittill( "robot_artillery_barrage", position ); + + level notify( "grenade_exploded", position, 100, 5000, 450 ); + beacon_index = -1; + + for ( i = 0; i < level.beacons.size; i++ ) + { + if ( !isdefined( level.beacons[i] ) ) + { + beacon_index = i; + break; + } + } + + if ( beacon_index >= 0 ) + arrayremoveindex( level.beacons, beacon_index ); + + for ( i = 0; i < info.sound_attractors.size; i++ ) + { + if ( isdefined( info.sound_attractors[i] ) ) + info.sound_attractors[i] notify( "beacon_blown_up" ); + } + + self delete(); +} + +play_delayed_explode_vox() +{ + wait 6.5; + + if ( isdefined( self ) ) + { + + } +} + +get_thrown_beacon() +{ + self endon( "disconnect" ); + self endon( "starting_beacon_watch" ); + + while ( true ) + { + self waittill( "grenade_fire", grenade, weapname ); + + if ( weapname == "beacon_zm" ) + { + grenade.use_grenade_special_long_bookmark = 1; + grenade.grenade_multiattack_bookmark_count = 1; + return grenade; + } + + wait 0.05; + } +} + +monitor_zombie_groans( info ) +{ + self endon( "explode" ); + + while ( true ) + { + if ( !isdefined( self ) ) + return; + + if ( !isdefined( self.attractor_array ) ) + { + wait 0.05; + continue; + } + + for ( i = 0; i < self.attractor_array.size; i++ ) + { + if ( array_check_for_dupes( info.sound_attractors, self.attractor_array[i] ) ) + { + if ( isdefined( self.origin ) && isdefined( self.attractor_array[i].origin ) ) + { + if ( distancesquared( self.origin, self.attractor_array[i].origin ) < 250000 ) + { + info.sound_attractors[info.sound_attractors.size] = self.attractor_array[i]; + self.attractor_array[i] thread play_zombie_groans(); + } + } + } + } + + wait 0.05; + } +} + +play_zombie_groans() +{ + self endon( "death" ); + self endon( "beacon_blown_up" ); + + while ( true ) + { + if ( isdefined( self ) ) + { + self playsound( "zmb_vox_zombie_groan" ); + wait( randomfloatrange( 2, 3 ) ); + } + else + return; + } +} + +beacon_exists() +{ + return isdefined( level.zombie_weapons["beacon_zm"] ); +} + +wait_and_explode( grenade ) +{ + self endon( "beacon_missile_launch" ); + + grenade waittill( "explode", position ); + + self notify( "weapon_beacon_timeout" ); + + if ( isdefined( grenade ) ) + grenade notify( "robot_artillery_barrage", self.origin ); +} + +start_artillery_launch_normal( grenade ) +{ + self endon( "weapon_beacon_timeout" ); + sp_giant_robot = undefined; + + while ( !isdefined( sp_giant_robot ) ) + { + for ( i = 0; i < 3; i++ ) + { + if ( isdefined( level.a_giant_robots[i].is_walking ) && level.a_giant_robots[i].is_walking ) + { + if ( !( isdefined( level.a_giant_robots[i].weap_beacon_firing ) && level.a_giant_robots[i].weap_beacon_firing ) ) + { + sp_giant_robot = level.a_giant_robots[i]; + self thread artillery_fx_logic( sp_giant_robot, grenade ); + self notify( "beacon_missile_launch" ); + level.weapon_beacon_busy = 1; + grenade.fuse_reset = 1; + grenade.fuse_time = 100; + grenade resetmissiledetonationtime( 100 ); + break; + } + } + } + + wait 0.1; + } +} + +start_artillery_launch_ee( grenade ) +{ + self endon( "weapon_beacon_timeout" ); + sp_giant_robot = undefined; + n_index = 0; + a_robot_index = []; + a_robot_index[0] = 1; + a_robot_index[1] = 0; + a_robot_index[2] = 2; + + while ( n_index < a_robot_index.size ) + { + n_robot_num = a_robot_index[n_index]; + + if ( isdefined( level.a_giant_robots[n_robot_num].is_walking ) && level.a_giant_robots[n_robot_num].is_walking ) + { + if ( !( isdefined( level.a_giant_robots[n_robot_num].weap_beacon_firing ) && level.a_giant_robots[n_robot_num].weap_beacon_firing ) ) + { + sp_giant_robot = level.a_giant_robots[n_robot_num]; + self thread artillery_fx_logic_ee( sp_giant_robot, grenade ); + self notify( "beacon_missile_launch" ); + level.weapon_beacon_busy = 1; + grenade.fuse_reset = 1; + grenade.fuse_time = 100; + grenade resetmissiledetonationtime( 100 ); + wait 2.0; + n_index++; + } + } + else if ( n_index == 0 ) + { + if ( !flag( "three_robot_round" ) ) + { + self thread start_artillery_launch_normal( grenade ); + break; + } + } + else if ( n_index > 0 ) + break; + + wait 0.1; + } + + self thread artillery_barrage_logic( grenade, 1 ); +} + +artillery_fx_logic( sp_giant_robot, grenade ) +{ + sp_giant_robot.weap_beacon_firing = 1; + level setclientfield( "play_launch_artillery_fx_robot_" + sp_giant_robot.giant_robot_id, 1 ); + self thread homing_beacon_vo(); + wait 0.5; + + if ( isdefined( sp_giant_robot ) ) + { + level setclientfield( "play_launch_artillery_fx_robot_" + sp_giant_robot.giant_robot_id, 0 ); + wait 3.0; + self thread artillery_barrage_logic( grenade ); + wait 1.0; + sp_giant_robot.weap_beacon_firing = 0; + } +} + +artillery_fx_logic_ee( sp_giant_robot, grenade ) +{ + sp_giant_robot.weap_beacon_firing = 1; + sp_giant_robot playsound( "zmb_homingbeacon_missiile_alarm" ); + level setclientfield( "play_launch_artillery_fx_robot_" + sp_giant_robot.giant_robot_id, 1 ); + self thread homing_beacon_vo(); + wait 0.5; + + if ( isdefined( sp_giant_robot ) ) + level setclientfield( "play_launch_artillery_fx_robot_" + sp_giant_robot.giant_robot_id, 0 ); + + wait 1.0; + sp_giant_robot.weap_beacon_firing = 0; +} + +homing_beacon_vo() +{ + if ( isdefined( self.owner ) && isplayer( self.owner ) ) + { + n_time = gettime(); + + if ( isdefined( self.time_thrown ) ) + { + if ( n_time < self.time_thrown + 3000 ) + self.owner maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "use_beacon" ); + } + } +} + +artillery_barrage_logic( grenade, b_ee = 0 ) +{ + if ( isdefined( b_ee ) && b_ee ) + { + a_v_land_offsets = self build_weap_beacon_landing_offsets_ee(); + a_v_start_offsets = self build_weap_beacon_start_offsets_ee(); + n_num_missiles = 15; + n_clientfield = 2; + } + else + { + a_v_land_offsets = self build_weap_beacon_landing_offsets(); + a_v_start_offsets = self build_weap_beacon_start_offsets(); + n_num_missiles = 5; + n_clientfield = 1; + } + + self.a_v_land_spots = []; + self.a_v_start_spots = []; + + for ( i = 0; i < n_num_missiles; i++ ) + { + self.a_v_start_spots[i] = self.origin + a_v_start_offsets[i]; + self.a_v_land_spots[i] = self.origin + a_v_land_offsets[i]; + v_start_trace = self.a_v_start_spots[i] - vectorscale( ( 0, 0, 1 ), 5000.0 ); + trace = bullettrace( v_start_trace, self.a_v_land_spots[i], 0, undefined ); + self.a_v_land_spots[i] = trace["position"]; + wait 0.05; + } + + for ( i = 0; i < n_num_missiles; i++ ) + { + self setclientfield( "play_artillery_barrage", n_clientfield ); + self thread wait_and_do_weapon_beacon_damage( i ); + wait_network_frame(); + self setclientfield( "play_artillery_barrage", 0 ); + + if ( i == 0 ) + { + wait 1.0; + continue; + } + + wait 0.25; + } + + level thread allow_beacons_to_be_targeted_by_giant_robot(); + wait 6.0; + grenade notify( "robot_artillery_barrage", self.origin ); +} + +allow_beacons_to_be_targeted_by_giant_robot() +{ + wait 3.0; + level.weapon_beacon_busy = 0; +} + +build_weap_beacon_landing_offsets() +{ + a_offsets = []; + a_offsets[0] = ( 0, 0, 0 ); + a_offsets[1] = vectorscale( ( -1, 1, 0 ), 72.0 ); + a_offsets[2] = vectorscale( ( 1, 1, 0 ), 72.0 ); + a_offsets[3] = vectorscale( ( 1, -1, 0 ), 72.0 ); + a_offsets[4] = vectorscale( ( -1, -1, 0 ), 72.0 ); + return a_offsets; +} + +build_weap_beacon_start_offsets() +{ + a_offsets = []; + a_offsets[0] = vectorscale( ( 0, 0, 1 ), 8500.0 ); + a_offsets[1] = ( -6500, 6500, 8500 ); + a_offsets[2] = ( 6500, 6500, 8500 ); + a_offsets[3] = ( 6500, -6500, 8500 ); + a_offsets[4] = ( -6500, -6500, 8500 ); + return a_offsets; +} + +build_weap_beacon_landing_offsets_ee() +{ + a_offsets = []; + a_offsets[0] = ( 0, 0, 0 ); + a_offsets[1] = vectorscale( ( -1, 1, 0 ), 72.0 ); + a_offsets[2] = vectorscale( ( 1, 1, 0 ), 72.0 ); + a_offsets[3] = vectorscale( ( 1, -1, 0 ), 72.0 ); + a_offsets[4] = vectorscale( ( -1, -1, 0 ), 72.0 ); + a_offsets[5] = vectorscale( ( -1, 1, 0 ), 72.0 ); + a_offsets[6] = vectorscale( ( 1, 1, 0 ), 72.0 ); + a_offsets[7] = vectorscale( ( 1, -1, 0 ), 72.0 ); + a_offsets[8] = vectorscale( ( -1, -1, 0 ), 72.0 ); + a_offsets[9] = vectorscale( ( -1, 1, 0 ), 72.0 ); + a_offsets[10] = vectorscale( ( 1, 1, 0 ), 72.0 ); + a_offsets[11] = vectorscale( ( 1, -1, 0 ), 72.0 ); + a_offsets[12] = vectorscale( ( -1, -1, 0 ), 72.0 ); + a_offsets[13] = vectorscale( ( -1, 1, 0 ), 72.0 ); + a_offsets[14] = vectorscale( ( 1, 1, 0 ), 72.0 ); + return a_offsets; +} + +build_weap_beacon_start_offsets_ee() +{ + a_offsets = []; + a_offsets[0] = vectorscale( ( 0, 0, 1 ), 8500.0 ); + a_offsets[1] = ( -6500, 6500, 8500 ); + a_offsets[2] = ( 6500, 6500, 8500 ); + a_offsets[3] = ( 6500, -6500, 8500 ); + a_offsets[4] = ( -6500, -6500, 8500 ); + a_offsets[5] = ( -6500, 6500, 8500 ); + a_offsets[6] = ( 6500, 6500, 8500 ); + a_offsets[7] = ( 6500, -6500, 8500 ); + a_offsets[8] = ( -6500, -6500, 8500 ); + a_offsets[9] = ( -6500, 6500, 8500 ); + a_offsets[10] = ( 6500, 6500, 8500 ); + a_offsets[11] = ( 6500, -6500, 8500 ); + a_offsets[12] = ( -6500, -6500, 8500 ); + a_offsets[13] = ( -6500, 6500, 8500 ); + a_offsets[14] = ( 6500, 6500, 8500 ); + return a_offsets; +} + +wait_and_do_weapon_beacon_damage( index ) +{ + wait 3.0; + v_damage_origin = self.a_v_land_spots[index]; + level.n_weap_beacon_zombie_thrown_count = 0; + a_zombies_to_kill = []; + a_zombies = getaispeciesarray( "axis", "all" ); + + foreach ( zombie in a_zombies ) + { + n_distance = distance( zombie.origin, v_damage_origin ); + + if ( n_distance <= 200 ) + { + n_damage = linear_map( n_distance, 200, 0, 7000, 8000 ); + + if ( n_damage >= zombie.health ) + { + a_zombies_to_kill[a_zombies_to_kill.size] = zombie; + continue; + } + + zombie thread set_beacon_damage(); + zombie dodamage( n_damage, zombie.origin, self.owner, self.owner, "none", "MOD_GRENADE_SPLASH", 0, "beacon_zm" ); + } + } + + if ( index == 0 ) + { + radiusdamage( self.origin + vectorscale( ( 0, 0, 1 ), 12.0 ), 10, 1, 1, self.owner, "MOD_GRENADE_SPLASH", "beacon_zm" ); + self ghost(); + self stopanimscripted( 0 ); + } + + level thread weap_beacon_zombie_death( self, a_zombies_to_kill ); + self thread weap_beacon_rumble(); +} + +weap_beacon_zombie_death( model, a_zombies_to_kill ) +{ + n_interval = 0; + + for ( i = 0; i < a_zombies_to_kill.size; i++ ) + { + zombie = a_zombies_to_kill[i]; + + if ( !isdefined( zombie ) || !isalive( zombie ) ) + continue; + + zombie thread set_beacon_damage(); + zombie dodamage( zombie.health, zombie.origin, model.owner, model.owner, "none", "MOD_GRENADE_SPLASH", 0, "beacon_zm" ); + n_interval++; + zombie thread weapon_beacon_launch_ragdoll(); + + if ( n_interval >= 4 ) + { + wait_network_frame(); + n_interval = 0; + } + } +} + +weapon_beacon_launch_ragdoll() +{ + if ( isdefined( self.is_mechz ) && self.is_mechz ) + return; + + if ( isdefined( self.is_giant_robot ) && self.is_giant_robot ) + return; + + if ( level.n_weap_beacon_zombie_thrown_count >= 5 ) + return; + + level.n_weap_beacon_zombie_thrown_count++; + + if ( isdefined( level.ragdoll_limit_check ) && ![[ level.ragdoll_limit_check ]]() ) + { + level thread weap_beacon_gib( self ); + return; + } + + self startragdoll(); + n_x = randomintrange( 50, 150 ); + n_y = randomintrange( 50, 150 ); + + if ( cointoss() ) + n_x *= -1; + + if ( cointoss() ) + n_y *= -1; + + v_launch = ( n_x, n_y, randomintrange( 75, 250 ) ); + self launchragdoll( v_launch ); +} + +weap_beacon_gib( ai_zombie ) +{ + a_gib_ref = []; + a_gib_ref[0] = level._zombie_gib_piece_index_all; + ai_zombie gib( "normal", a_gib_ref ); +} + +weap_beacon_rumble() +{ + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( isalive( player ) && isdefined( player ) ) + { + if ( distance2dsquared( player.origin, self.origin ) < 250000 ) + player thread execute_weap_beacon_rumble(); + } + } +} + +execute_weap_beacon_rumble() +{ + self endon( "death" ); + self endon( "disconnect" ); + self setclientfieldtoplayer( "player_rumble_and_shake", 3 ); + wait_network_frame(); + self setclientfieldtoplayer( "player_rumble_and_shake", 0 ); +} + +set_beacon_damage() +{ + self endon( "death" ); + self.set_beacon_damage = 1; + wait 0.05; + self.set_beacon_damage = 0; +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_claymore.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_claymore.gsc new file mode 100644 index 0000000..4c5d3f8 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_claymore.gsc @@ -0,0 +1,466 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\gametypes_zm\_weaponobjects; + +init() +{ + if ( !isdefined( level.claymores_max_per_player ) ) + level.claymores_max_per_player = 12; + + trigs = getentarray( "claymore_purchase", "targetname" ); + + for ( i = 0; i < trigs.size; i++ ) + { + model = getent( trigs[i].target, "targetname" ); + + if ( isdefined( model ) ) + model hide(); + } + + array_thread( trigs, ::buy_claymores ); + level thread give_claymores_after_rounds(); + level.claymores_on_damage = ::satchel_damage; + level.pickup_claymores = ::pickup_claymores; + level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener; + level.claymore_detectiondot = cos( 70 ); + level.claymore_detectionmindist = 20; + level._effect["claymore_laser"] = loadfx( "weapon/claymore/fx_claymore_laser" ); +} + +buy_claymores() +{ + self.zombie_cost = 1000; + self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); + self setcursorhint( "HINT_WEAPON", "claymore_zm" ); + self endon( "kill_trigger" ); + + if ( !isdefined( self.stub ) ) + return; + + if ( isdefined( self.stub ) && !isdefined( self.stub.claymores_triggered ) ) + self.stub.claymores_triggered = 0; + + self.claymores_triggered = self.stub.claymores_triggered; + + while ( true ) + { + self waittill( "trigger", who ); + + if ( who in_revive_trigger() ) + continue; + + if ( who has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( is_player_valid( who ) ) + { + if ( who.score >= self.zombie_cost ) + { + if ( !who is_player_placeable_mine( "claymore_zm" ) ) + { + play_sound_at_pos( "purchase", self.origin ); + who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost ); + who thread claymore_setup(); + who thread show_claymore_hint( "claymore_purchased" ); + who thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" ); + + if ( isdefined( self.stub ) ) + self.claymores_triggered = self.stub.claymores_triggered; + + if ( self.claymores_triggered == 0 ) + { + model = getent( self.target, "targetname" ); + + if ( isdefined( model ) ) + model thread maps\mp\zombies\_zm_weapons::weapon_show( who ); + else if ( isdefined( self.clientfieldname ) ) + level setclientfield( self.clientfieldname, 1 ); + + self.claymores_triggered = 1; + + if ( isdefined( self.stub ) ) + self.stub.claymores_triggered = 1; + } + + trigs = getentarray( "claymore_purchase", "targetname" ); + + for ( i = 0; i < trigs.size; i++ ) + trigs[i] setinvisibletoplayer( who ); + } + else + who thread show_claymore_hint( "already_purchased" ); + } + else + { + who play_sound_on_ent( "no_purchase" ); + who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); + } + } + } +} + +claymore_unitrigger_update_prompt( player ) +{ + if ( player is_player_placeable_mine( "claymore_zm" ) ) + { + self sethintstring( "" ); + self setcursorhint( "HINT_NOICON" ); + return false; + } + + self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); + self setcursorhint( "HINT_WEAPON", "claymore_zm" ); + return true; +} + +set_claymore_visible() +{ + players = get_players(); + trigs = getentarray( "claymore_purchase", "targetname" ); + + while ( true ) + { + for ( j = 0; j < players.size; j++ ) + { + if ( !players[j] is_player_placeable_mine( "claymore_zm" ) ) + { + for ( i = 0; i < trigs.size; i++ ) + trigs[i] setinvisibletoplayer( players[j], 0 ); + } + } + + wait 1; + players = get_players(); + } +} + +claymore_safe_to_plant() +{ + if ( self.owner.claymores.size >= level.claymores_max_per_player ) + return 0; + + if ( isdefined( level.claymore_safe_to_plant ) ) + return self [[ level.claymore_safe_to_plant ]](); + + return 1; +} + +claymore_wait_and_detonate() +{ + wait 0.1; + self detonate( self.owner ); +} + +claymore_watch() +{ + self endon( "death" ); + self notify( "claymore_watch" ); + self endon( "claymore_watch" ); + + while ( true ) + { + self waittill( "grenade_fire", claymore, weapname ); + + if ( weapname == "claymore_zm" ) + { + claymore.owner = self; + claymore.team = self.team; + self notify( "zmb_enable_claymore_prompt" ); + + if ( claymore claymore_safe_to_plant() ) + { + if ( isdefined( level.claymore_planted ) ) + self thread [[ level.claymore_planted ]]( claymore ); + + claymore thread claymore_detonation(); + claymore thread play_claymore_effects(); + self maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_planted" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_planted" ); + } + else + claymore thread claymore_wait_and_detonate(); + } + } +} + +claymore_setup() +{ + if ( !isdefined( self.claymores ) ) + self.claymores = []; + + self thread claymore_watch(); + self giveweapon( "claymore_zm" ); + self set_player_placeable_mine( "claymore_zm" ); + self setactionslot( 4, "weapon", "claymore_zm" ); + self setweaponammostock( "claymore_zm", 2 ); +} + +adjust_trigger_origin( origin ) +{ + origin += vectorscale( ( 0, 0, 1 ), 20.0 ); + return origin; +} + +on_spawn_retrieve_trigger( watcher, player ) +{ + self maps\mp\gametypes_zm\_weaponobjects::onspawnretrievableweaponobject( watcher, player ); + + if ( isdefined( self.pickuptrigger ) ) + self.pickuptrigger sethintlowpriority( 0 ); +} + +pickup_claymores() +{ + player = self.owner; + + if ( !player hasweapon( "claymore_zm" ) ) + { + player thread claymore_watch(); + player giveweapon( "claymore_zm" ); + player set_player_placeable_mine( "claymore_zm" ); + player setactionslot( 4, "weapon", "claymore_zm" ); + player setweaponammoclip( "claymore_zm", 0 ); + player notify( "zmb_enable_claymore_prompt" ); + } + else + { + clip_ammo = player getweaponammoclip( self.name ); + clip_max_ammo = weaponclipsize( self.name ); + + if ( clip_ammo >= clip_max_ammo ) + { + self destroy_ent(); + player notify( "zmb_disable_claymore_prompt" ); + return; + } + } + + self pick_up(); + clip_ammo = player getweaponammoclip( self.name ); + clip_max_ammo = weaponclipsize( self.name ); + + if ( clip_ammo >= clip_max_ammo ) + player notify( "zmb_disable_claymore_prompt" ); + + player maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_pickedup" ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_pickedup" ); +} + +pickup_claymores_trigger_listener( trigger, player ) +{ + self thread pickup_claymores_trigger_listener_enable( trigger, player ); + self thread pickup_claymores_trigger_listener_disable( trigger, player ); +} + +pickup_claymores_trigger_listener_enable( trigger, player ) +{ + self endon( "delete" ); + self endon( "death" ); + + while ( true ) + { + player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" ); + + if ( !isdefined( trigger ) ) + return; + + trigger trigger_on(); + trigger linkto( self ); + } +} + +pickup_claymores_trigger_listener_disable( trigger, player ) +{ + self endon( "delete" ); + self endon( "death" ); + + while ( true ) + { + player waittill( "zmb_disable_claymore_prompt" ); + + if ( !isdefined( trigger ) ) + return; + + trigger unlink(); + trigger trigger_off(); + } +} + +shouldaffectweaponobject( object ) +{ + pos = self.origin + vectorscale( ( 0, 0, 1 ), 32.0 ); + dirtopos = pos - object.origin; + objectforward = anglestoforward( object.angles ); + dist = vectordot( dirtopos, objectforward ); + + if ( dist < level.claymore_detectionmindist ) + return 0; + + dirtopos = vectornormalize( dirtopos ); + dot = vectordot( dirtopos, objectforward ); + return dot > level.claymore_detectiondot; +} + +claymore_detonation() +{ + self endon( "death" ); + self waittill_not_moving(); + detonateradius = 96; + damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 ); + damagearea setexcludeteamfortrigger( self.team ); + damagearea enablelinkto(); + damagearea linkto( self ); + + if ( is_true( self.isonbus ) ) + damagearea setmovingplatformenabled( 1 ); + + self.damagearea = damagearea; + self thread delete_claymores_on_death( self.owner, damagearea ); + self.owner.claymores[self.owner.claymores.size] = self; + + while ( true ) + { + damagearea waittill( "trigger", ent ); + + if ( isdefined( self.owner ) && ent == self.owner ) + continue; + + if ( isdefined( ent.pers ) && isdefined( ent.pers["team"] ) && ent.pers["team"] == self.team ) + continue; + + if ( isdefined( ent.ignore_claymore ) && ent.ignore_claymore ) + continue; + + if ( !ent shouldaffectweaponobject( self ) ) + continue; + + if ( ent damageconetrace( self.origin, self ) > 0 ) + { + self playsound( "wpn_claymore_alert" ); + wait 0.4; + + if ( isdefined( self.owner ) ) + self detonate( self.owner ); + else + self detonate( undefined ); + + return; + } + } +} + +delete_claymores_on_death( player, ent ) +{ + self waittill( "death" ); + + if ( isdefined( player ) ) + arrayremovevalue( player.claymores, self ); + + wait 0.05; + + if ( isdefined( ent ) ) + ent delete(); +} + +satchel_damage() +{ + self endon( "death" ); + self setcandamage( 1 ); + self.health = 100000; + self.maxhealth = self.health; + attacker = undefined; + + while ( true ) + { + self waittill( "damage", amount, attacker ); + + if ( !isdefined( self ) ) + return; + + self.health = self.maxhealth; + + if ( !isplayer( attacker ) ) + continue; + + if ( isdefined( self.owner ) && attacker == self.owner ) + continue; + + if ( isdefined( attacker.pers ) && isdefined( attacker.pers["team"] ) && attacker.pers["team"] != level.zombie_team ) + continue; + + break; + } + + if ( level.satchelexplodethisframe ) + wait( 0.1 + randomfloat( 0.4 ) ); + else + wait 0.05; + + if ( !isdefined( self ) ) + return; + + level.satchelexplodethisframe = 1; + thread reset_satchel_explode_this_frame(); + self detonate( attacker ); +} + +reset_satchel_explode_this_frame() +{ + wait 0.05; + level.satchelexplodethisframe = 0; +} + +play_claymore_effects() +{ + self endon( "death" ); + self waittill_not_moving(); + playfxontag( level._effect["claymore_laser"], self, "tag_fx" ); +} + +give_claymores_after_rounds() +{ + while ( true ) + { + level waittill( "between_round_over" ); + + if ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] is_player_placeable_mine( "claymore_zm" ) ) + { + players[i] giveweapon( "claymore_zm" ); + players[i] set_player_placeable_mine( "claymore_zm" ); + players[i] setactionslot( 4, "weapon", "claymore_zm" ); + players[i] setweaponammoclip( "claymore_zm", 2 ); + } + } + } + } +} + +show_claymore_hint( string ) +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( string == "claymore_purchased" ) + text = &"ZOMBIE_CLAYMORE_HOWTO"; + else + text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED"; + + show_equipment_hint_text( text ); +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_one_inch_punch.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_one_inch_punch.gsc new file mode 100644 index 0000000..b137c71 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_one_inch_punch.gsc @@ -0,0 +1,347 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_weap_staff_fire; +#include maps\mp\zombies\_zm_weap_staff_water; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_weap_staff_lightning; +#include maps\mp\animscripts\zm_shared; + +one_inch_precache() +{ + precacheitem( "one_inch_punch_zm" ); + precacheitem( "one_inch_punch_fire_zm" ); + precacheitem( "one_inch_punch_air_zm" ); + precacheitem( "one_inch_punch_ice_zm" ); + precacheitem( "one_inch_punch_lightning_zm" ); + precacheitem( "one_inch_punch_upgraded_zm" ); + precacheitem( "zombie_one_inch_punch_flourish" ); + precacheitem( "zombie_one_inch_punch_upgrade_flourish" ); + level._effect["oneinch_impact"] = loadfx( "maps/zombie_tomb/fx_tomb_perk_one_inch_punch" ); + level._effect["punch_knockdown_ground"] = loadfx( "weapon/thunder_gun/fx_thundergun_knockback_ground" ); +} + +one_inch_punch_melee_attack() +{ + self endon( "disconnect" ); + self endon( "stop_one_inch_punch_attack" ); + + if ( !( isdefined( self.one_inch_punch_flag_has_been_init ) && self.one_inch_punch_flag_has_been_init ) ) + self ent_flag_init( "melee_punch_cooldown" ); + + self.one_inch_punch_flag_has_been_init = 1; + current_melee_weapon = self get_player_melee_weapon(); + self takeweapon( current_melee_weapon ); + + if ( isdefined( self.b_punch_upgraded ) && self.b_punch_upgraded ) + { + str_weapon = self getcurrentweapon(); + self disable_player_move_states( 1 ); + self giveweapon( "zombie_one_inch_punch_upgrade_flourish" ); + self switchtoweapon( "zombie_one_inch_punch_upgrade_flourish" ); + self waittill_any( "player_downed", "weapon_change_complete" ); + self switchtoweapon( str_weapon ); + self enable_player_move_states(); + self takeweapon( "zombie_one_inch_punch_upgrade_flourish" ); + + if ( self.str_punch_element == "air" ) + { + self giveweapon( "one_inch_punch_air_zm" ); + self set_player_melee_weapon( "one_inch_punch_air_zm" ); + } + else if ( self.str_punch_element == "fire" ) + { + self giveweapon( "one_inch_punch_fire_zm" ); + self set_player_melee_weapon( "one_inch_punch_fire_zm" ); + } + else if ( self.str_punch_element == "ice" ) + { + self giveweapon( "one_inch_punch_ice_zm" ); + self set_player_melee_weapon( "one_inch_punch_ice_zm" ); + } + else if ( self.str_punch_element == "lightning" ) + { + self giveweapon( "one_inch_punch_lightning_zm" ); + self set_player_melee_weapon( "one_inch_punch_lightning_zm" ); + } + else + { + self giveweapon( "one_inch_punch_upgraded_zm" ); + self set_player_melee_weapon( "one_inch_punch_upgraded_zm" ); + } + } + else + { + str_weapon = self getcurrentweapon(); + self disable_player_move_states( 1 ); + self giveweapon( "zombie_one_inch_punch_flourish" ); + self switchtoweapon( "zombie_one_inch_punch_flourish" ); + self waittill_any( "player_downed", "weapon_change_complete" ); + self switchtoweapon( str_weapon ); + self enable_player_move_states(); + self takeweapon( "zombie_one_inch_punch_flourish" ); + self giveweapon( "one_inch_punch_zm" ); + self set_player_melee_weapon( "one_inch_punch_zm" ); + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "perk", "one_inch" ); + } + + self thread monitor_melee_swipe(); +} + +monitor_melee_swipe() +{ + self endon( "disconnect" ); + self notify( "stop_monitor_melee_swipe" ); + self endon( "stop_monitor_melee_swipe" ); + self endon( "bled_out" ); + + while ( true ) + { + while ( !self ismeleeing() ) + wait 0.05; + + if ( self getcurrentweapon() == level.riotshield_name ) + { + wait 0.1; + continue; + } + + range_mod = 1; + self setclientfield( "oneinchpunch_impact", 1 ); + wait_network_frame(); + self setclientfield( "oneinchpunch_impact", 0 ); + v_punch_effect_fwd = anglestoforward( self getplayerangles() ); + v_punch_yaw = get2dyaw( ( 0, 0, 0 ), v_punch_effect_fwd ); + + if ( isdefined( self.b_punch_upgraded ) && self.b_punch_upgraded && isdefined( self.str_punch_element ) && self.str_punch_element == "air" ) + range_mod *= 2; + + a_zombies = getaispeciesarray( level.zombie_team, "all" ); + a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, 100 ); + + foreach ( zombie in a_zombies ) + { + if ( self is_player_facing( zombie, v_punch_yaw ) && distancesquared( self.origin, zombie.origin ) <= 4096 * range_mod ) + { + self thread zombie_punch_damage( zombie, 1 ); + continue; + } + + if ( self is_player_facing( zombie, v_punch_yaw ) ) + self thread zombie_punch_damage( zombie, 0.5 ); + } + + while ( self ismeleeing() ) + wait 0.05; + + wait 0.05; + } +} + +is_player_facing( zombie, v_punch_yaw ) +{ + v_player_to_zombie_yaw = get2dyaw( self.origin, zombie.origin ); + yaw_diff = v_player_to_zombie_yaw - v_punch_yaw; + + if ( yaw_diff < 0 ) + yaw_diff *= -1; + + if ( yaw_diff < 35 ) + return true; + else + return false; +} + +is_oneinch_punch_damage() +{ + return isdefined( self.damageweapon ) && self.damageweapon == "one_inch_punch_zm"; +} + +gib_zombies_head( player ) +{ + player endon( "disconnect" ); + self maps\mp\zombies\_zm_spawner::zombie_head_gib(); +} + +punch_cooldown() +{ + wait 1; + self ent_flag_set( "melee_punch_cooldown" ); +} + +zombie_punch_damage( ai_zombie, n_mod ) +{ + self endon( "disconnect" ); + ai_zombie.punch_handle_pain_notetracks = ::handle_punch_pain_notetracks; + + if ( isdefined( n_mod ) ) + { + if ( isdefined( self.b_punch_upgraded ) && self.b_punch_upgraded ) + n_base_damage = 11275; + else + n_base_damage = 2250; + + n_damage = int( n_base_damage * n_mod ); + + if ( !( isdefined( ai_zombie.is_mechz ) && ai_zombie.is_mechz ) ) + { + if ( n_damage >= ai_zombie.health ) + { + self thread zombie_punch_death( ai_zombie ); + self do_player_general_vox( "kill", "one_inch_punch" ); + + if ( isdefined( self.b_punch_upgraded ) && self.b_punch_upgraded && isdefined( self.str_punch_element ) ) + { + switch ( self.str_punch_element ) + { + case "fire": + ai_zombie thread maps\mp\zombies\_zm_weap_staff_fire::flame_damage_fx( self.current_melee_weapon, self, n_mod ); + break; + case "ice": + ai_zombie thread maps\mp\zombies\_zm_weap_staff_water::ice_affect_zombie( self.current_melee_weapon, self, 0, n_mod ); + break; + case "lightning": + if ( isdefined( ai_zombie.is_mechz ) && ai_zombie.is_mechz ) + return; + + if ( isdefined( ai_zombie.is_electrocuted ) && ai_zombie.is_electrocuted ) + return; + + tag = "J_SpineUpper"; + network_safe_play_fx_on_tag( "lightning_impact", 2, level._effect["lightning_impact"], ai_zombie, tag ); + ai_zombie thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "electrocute", ai_zombie.animname ); + break; + } + } + } + else + { + self maps\mp\zombies\_zm_score::player_add_points( "damage_light" ); + + if ( isdefined( self.b_punch_upgraded ) && self.b_punch_upgraded && isdefined( self.str_punch_element ) ) + { + switch ( self.str_punch_element ) + { + case "fire": + ai_zombie thread maps\mp\zombies\_zm_weap_staff_fire::flame_damage_fx( self.current_melee_weapon, self, n_mod ); + break; + case "ice": + ai_zombie thread maps\mp\zombies\_zm_weap_staff_water::ice_affect_zombie( self.current_melee_weapon, self, 0, n_mod ); + break; + case "lightning": + ai_zombie thread maps\mp\zombies\_zm_weap_staff_lightning::stun_zombie(); + break; + } + } + } + } + + ai_zombie dodamage( n_damage, ai_zombie.origin, self, self, 0, "MOD_MELEE", 0, self.current_melee_weapon ); + } +} + +zombie_punch_death( ai_zombie ) +{ + ai_zombie thread gib_zombies_head( self ); + + if ( isdefined( level.ragdoll_limit_check ) && ![[ level.ragdoll_limit_check ]]() ) + return; + + if ( isdefined( ai_zombie ) ) + { + ai_zombie startragdoll(); + ai_zombie setclientfield( "oneinchpunch_physics_launchragdoll", 1 ); + } + + wait_network_frame(); + + if ( isdefined( ai_zombie ) ) + ai_zombie setclientfield( "oneinchpunch_physics_launchragdoll", 0 ); +} + +handle_punch_pain_notetracks( note ) +{ + if ( note == "zombie_knockdown_ground_impact" ) + playfx( level._effect["punch_knockdown_ground"], self.origin, anglestoforward( self.angles ), anglestoup( self.angles ) ); +} + +knockdown_zombie_animate() +{ + self notify( "end_play_punch_pain_anim" ); + self endon( "killanimscript" ); + self endon( "death" ); + self endon( "end_play_punch_pain_anim" ); + + if ( isdefined( self.marked_for_death ) && self.marked_for_death ) + return; + + self.allowpain = 0; + animation_direction = undefined; + animation_legs = ""; + animation_side = undefined; + animation_duration = "_default"; + v_forward = vectordot( anglestoforward( self.angles ), vectornormalize( self.v_punched_from - self.origin ) ); + + if ( v_forward > 0.6 ) + { + animation_direction = "back"; + + if ( !( isdefined( self.has_legs ) && self.has_legs ) ) + animation_legs = "_crawl"; + + if ( randomint( 100 ) > 75 ) + animation_side = "belly"; + else + animation_side = "back"; + } + else if ( self.damageyaw > 75 && self.damageyaw < 135 ) + { + animation_direction = "left"; + animation_side = "belly"; + } + else if ( self.damageyaw > -135 && self.damageyaw < -75 ) + { + animation_direction = "right"; + animation_side = "belly"; + } + else + { + animation_direction = "front"; + animation_side = "belly"; + } + + self thread knockdown_zombie_animate_state(); + self setanimstatefromasd( "zm_punch_fall_" + animation_direction + animation_legs ); + self maps\mp\animscripts\zm_shared::donotetracks( "punch_fall_anim", self.punch_handle_pain_notetracks ); + + if ( !( isdefined( self.has_legs ) && self.has_legs ) || isdefined( self.marked_for_death ) && self.marked_for_death ) + return; + + if ( isdefined( self.a.gib_ref ) ) + { + if ( self.a.gib_ref == "no_legs" || self.a.gib_ref == "no_arms" || ( self.a.gib_ref == "left_leg" || self.a.gib_ref == "right_leg" ) && randomint( 100 ) > 25 || ( self.a.gib_ref == "left_arm" || self.a.gib_ref == "right_arm" ) && randomint( 100 ) > 75 ) + animation_duration = "_late"; + else if ( randomint( 100 ) > 75 ) + animation_duration = "_early"; + } + else if ( randomint( 100 ) > 25 ) + animation_duration = "_early"; + + self setanimstatefromasd( "zm_punch_getup_" + animation_side + animation_duration ); + self maps\mp\animscripts\zm_shared::donotetracks( "punch_getup_anim" ); + self.allowpain = 1; + self notify( "back_up" ); +} + +knockdown_zombie_animate_state() +{ + self endon( "death" ); + self.is_knocked_down = 1; + self waittill_any( "damage", "back_up" ); + self.is_knocked_down = 0; +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_riotshield_tomb.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_riotshield_tomb.gsc new file mode 100644 index 0000000..9b4b021 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_riotshield_tomb.gsc @@ -0,0 +1,773 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zombies\_zm_riotshield_tomb; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\animscripts\zm_death; +#include maps\mp\zombies\_zm_audio; + +init() +{ + maps\mp\zombies\_zm_riotshield_tomb::init(); + set_zombie_var( "riotshield_cylinder_radius", 360 ); + set_zombie_var( "riotshield_fling_range", 90 ); + set_zombie_var( "riotshield_gib_range", 90 ); + set_zombie_var( "riotshield_gib_damage", 75 ); + set_zombie_var( "riotshield_knockdown_range", 90 ); + set_zombie_var( "riotshield_knockdown_damage", 15 ); + set_zombie_var( "riotshield_hit_points", 1500 ); + set_zombie_var( "riotshield_fling_damage_shield", 100 ); + set_zombie_var( "riotshield_knockdown_damage_shield", 15 ); + level.riotshield_network_choke_count = 0; + level.riotshield_gib_refs = []; + level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "guts"; + level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "right_arm"; + level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "left_arm"; + level.riotshield_damage_callback = ::player_damage_shield; + level.deployed_riotshield_damage_callback = ::deployed_damage_shield; + level.transferriotshield = ::transferriotshield; + level.cantransferriotshield = ::cantransferriotshield; + maps\mp\zombies\_zm_spawner::register_zombie_damage_callback( ::riotshield_zombie_damage_response ); + maps\mp\zombies\_zm_equipment::register_equipment( "tomb_shield_zm", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_RIOTSHIELD_HOWTO", "riotshield_zm_icon", "riotshield", ::riotshield_activation_watcher_thread, undefined, ::dropshield, ::pickupshield ); + maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "riotshield", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING" ); + onplayerconnect_callback( ::onplayerconnect ); +} + +onplayerconnect() +{ + self.player_shield_reset_health = ::player_init_shield_health; + self.player_shield_apply_damage = ::player_damage_shield; + self.player_shield_reset_location = ::player_init_shield_location; + self thread watchriotshielduse(); + self thread watchriotshieldmelee(); + self thread player_watch_laststand(); +} + +dropshield() +{ + self.shield_placement = 0; + self maps\mp\zombies\_zm_riotshield_tomb::updateriotshieldmodel(); + item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "t6_wpn_zmb_shield_dlc4_dmg0_world", "tomb_shield_zm", self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), self.angles ); + + if ( isdefined( item ) ) + { + item.shielddamagetaken = self.shielddamagetaken; + item.original_owner = self; + item.owner = undefined; + item.name = level.riotshield_name; + item.isriotshield = 1; + item deployed_damage_shield( 0 ); + item setscriptmoverflag( 0 ); + item.requires_pickup = 1; + item thread watchtoofriendly( self ); + } + + self takeweapon( level.riotshield_name ); + return item; +} + +watchtoofriendly( player ) +{ + wait 1; + + if ( isdefined( self ) && isdefined( player ) && distance2dsquared( self.origin, player.origin ) < 36 ) + { + if ( isalive( player ) ) + player playlocalsound( level.zmb_laugh_alias ); + + player maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); + self deployed_damage_shield( 2000 ); + } +} + +pickupshield( item ) +{ + item.owner = self; + damage = item.shielddamagetaken; + damagemax = level.zombie_vars["riotshield_hit_points"]; + self.shielddamagetaken = damage; + self player_set_shield_health( damage, damagemax ); +} + +placeshield( origin, angles ) +{ + if ( self getcurrentweapon() != level.riotshield_name ) + { + self switchtoweapon( level.riotshield_name ); + + self waittill( "weapon_change" ); + } + + item = self maps\mp\zombies\_zm_riotshield_tomb::doriotshielddeploy( origin, angles ); + + if ( isdefined( item ) ) + { + item.origin = self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ); + item.angles = self.angles; + item.owner = self; + } + + return item; +} + +cantransferriotshield( fromplayer, toplayer ) +{ + if ( isdefined( toplayer.screecher_weapon ) ) + return false; + + if ( isdefined( toplayer.is_drinking ) && toplayer.is_drinking > 0 ) + return false; + + if ( toplayer maps\mp\zombies\_zm_laststand::player_is_in_laststand() || toplayer in_revive_trigger() ) + return false; + + if ( toplayer isthrowinggrenade() ) + return false; + + if ( fromplayer == toplayer ) + return true; + + if ( toplayer is_player_equipment( level.riotshield_name ) && toplayer.shield_placement != 3 ) + return false; + + if ( fromplayer.session_team != toplayer.session_team ) + return false; + + return true; +} + +transferriotshield( fromplayer, toplayer ) +{ + damage = fromplayer.shielddamagetaken; + toplayer player_take_riotshield(); + fromplayer player_take_riotshield(); + toplayer.shielddamagetaken = damage; + toplayer.shield_placement = 3; + toplayer.shield_damage_level = 0; + toplayer maps\mp\zombies\_zm_equipment::equipment_give( "tomb_shield_zm" ); + toplayer switchtoweapon( "tomb_shield_zm" ); + damagemax = level.zombie_vars["riotshield_hit_points"]; + toplayer player_set_shield_health( damage, damagemax ); +} + +player_take_riotshield() +{ + self notify( "destroy_riotshield" ); + + if ( self getcurrentweapon() == "tomb_shield_zm" ) + { + new_primary = ""; + + if ( isdefined( self.laststand ) && self.laststand ) + { + new_primary = self.laststandpistol; + self giveweapon( new_primary ); + } + else + { + primaryweapons = self getweaponslistprimaries(); + + for ( i = 0; i < primaryweapons.size; i++ ) + { + if ( primaryweapons[i] != "tomb_shield_zm" ) + { + new_primary = primaryweapons[i]; + break; + } + } + + if ( new_primary == "" ) + { + self maps\mp\zombies\_zm_weapons::give_fallback_weapon(); + new_primary = "zombie_fists_zm"; + } + } + + self switchtoweaponimmediate( new_primary ); + self playsound( "wpn_riotshield_zm_destroy" ); + + self waittill( "weapon_change" ); + } + + self maps\mp\zombies\_zm_riotshield_tomb::removeriotshield(); + self maps\mp\zombies\_zm_equipment::equipment_take( "tomb_shield_zm" ); + self.hasriotshield = 0; + self.hasriotshieldequipped = 0; +} + +player_watch_laststand() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "entering_last_stand" ); + + if ( self getcurrentweapon() == "tomb_shield_zm" ) + { + new_primary = self.laststandpistol; + self giveweapon( new_primary ); + self switchtoweaponimmediate( new_primary ); + } + } +} + +player_init_shield_health() +{ + retval = self.shielddamagetaken > 0; + self.shielddamagetaken = 0; + self.shield_damage_level = 0; + self maps\mp\zombies\_zm_riotshield_tomb::updateriotshieldmodel(); + return retval; +} + +player_init_shield_location() +{ + self.hasriotshield = 1; + self.hasriotshieldequipped = 0; + self.shield_placement = 2; + self maps\mp\zombies\_zm_riotshield_tomb::updateriotshieldmodel(); +} + +player_set_shield_health( damage, max_damage ) +{ + shieldhealth = int( 100 * ( max_damage - damage ) / max_damage ); + + if ( shieldhealth >= 50 ) + self.shield_damage_level = 0; + else if ( shieldhealth >= 25 ) + self.shield_damage_level = 2; + else + self.shield_damage_level = 3; + + self maps\mp\zombies\_zm_riotshield_tomb::updateriotshieldmodel(); +} + +deployed_set_shield_health( damage, max_damage ) +{ + shieldhealth = int( 100 * ( max_damage - damage ) / max_damage ); + + if ( shieldhealth >= 50 ) + self.shield_damage_level = 0; + else if ( shieldhealth >= 25 ) + self.shield_damage_level = 2; + else + self.shield_damage_level = 3; + + self maps\mp\zombies\_zm_riotshield_tomb::updatestandaloneriotshieldmodel(); +} + +player_damage_shield( idamage, bheld ) +{ + damagemax = level.zombie_vars["riotshield_hit_points"]; + + if ( !isdefined( self.shielddamagetaken ) ) + self.shielddamagetaken = 0; + + self.shielddamagetaken += idamage; + + if ( self.shielddamagetaken >= damagemax ) + { + if ( bheld || !isdefined( self.shield_ent ) ) + { + self playrumbleonentity( "damage_heavy" ); + earthquake( 1.0, 0.75, self.origin, 100 ); + } + else if ( isdefined( self.shield_ent ) ) + { + if ( is_true( self.shield_ent.destroy_begun ) ) + return; + + self.shield_ent.destroy_begun = 1; + shield_origin = self.shield_ent.origin; + level thread maps\mp\zombies\_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx ); + wait 1; + playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin ); + } + + self thread player_take_riotshield(); + } + else + { + if ( bheld ) + { + self playrumbleonentity( "damage_light" ); + earthquake( 0.5, 0.5, self.origin, 100 ); + } + + self player_set_shield_health( self.shielddamagetaken, damagemax ); + self playsound( "fly_riotshield_zm_impact_zombies" ); + } +} + +deployed_damage_shield( idamage ) +{ + damagemax = level.zombie_vars["riotshield_hit_points"]; + + if ( !isdefined( self.shielddamagetaken ) ) + self.shielddamagetaken = 0; + + self.shielddamagetaken += idamage; + + if ( self.shielddamagetaken >= damagemax ) + { + shield_origin = self.origin; + + if ( isdefined( self.stub ) ) + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub ); + + if ( isdefined( self.original_owner ) ) + self.original_owner maps\mp\zombies\_zm_equipment::equipment_take( "tomb_shield_zm" ); + + maps\mp\zombies\_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx ); + playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin ); + self_delete(); + } + else + self deployed_set_shield_health( self.shielddamagetaken, damagemax ); +} + +riotshield_activation_watcher_thread() +{ + self endon( "zombified" ); + self endon( "disconnect" ); + self endon( "tomb_shield_zm_taken" ); + + while ( true ) + self waittill_either( "tomb_shield_zm_activate", "tomb_shield_zm_deactivate" ); +} + +watchriotshielduse() +{ + self endon( "death" ); + self endon( "disconnect" ); + self.shielddamagetaken = 0; + self thread maps\mp\zombies\_zm_riotshield_tomb::trackriotshield(); + self thread maps\mp\zombies\_zm_riotshield_tomb::trackequipmentchange(); + self thread maps\mp\zombies\_zm_riotshield_tomb::watchshieldlaststand(); + self thread trackstuckzombies(); + + for (;;) + { + self waittill( "raise_riotshield" ); + + self thread maps\mp\zombies\_zm_riotshield_tomb::startriotshielddeploy(); + } +} + +watchriotshieldmelee() +{ + for (;;) + { + self waittill( "weapon_melee", weapon ); + + if ( weapon == level.riotshield_name ) + self riotshield_melee(); + } +} + +is_riotshield_damage( mod, player, amount ) +{ + if ( mod == "MOD_MELEE" && player hasweapon( level.riotshield_name ) && amount < 10 ) + return true; + + return false; +} + +riotshield_damage( amount ) +{ + +} + +riotshield_fling_zombie( player, fling_vec, index ) +{ + if ( !isdefined( self ) || !isalive( self ) ) + return; + + if ( isdefined( self.ignore_riotshield ) && self.ignore_riotshield ) + return; + + if ( isdefined( self.riotshield_fling_func ) ) + { + self [[ self.riotshield_fling_func ]]( player ); + return; + } + + damage = 2500; + self dodamage( damage, player.origin, player, player, "", "MOD_IMPACT" ); + + if ( self.health < 1 ) + { + self.riotshield_death = 1; + + if ( isdefined( level.ragdoll_limit_check ) && ![[ level.ragdoll_limit_check ]]() ) + return; + + self startragdoll(); + self launchragdoll( fling_vec ); + } +} + +zombie_knockdown( player, gib ) +{ + damage = level.zombie_vars["riotshield_knockdown_damage"]; + + if ( isdefined( level.override_riotshield_damage_func ) ) + self [[ level.override_riotshield_damage_func ]]( player, gib ); + else + { + if ( gib ) + { + self.a.gib_ref = random( level.riotshield_gib_refs ); + self thread maps\mp\animscripts\zm_death::do_gib(); + } + + self dodamage( damage, player.origin, player ); + } +} + +riotshield_knockdown_zombie( player, gib ) +{ + self endon( "death" ); + playsoundatposition( "vox_riotshield_forcehit", self.origin ); + playsoundatposition( "wpn_riotshield_proj_impact", self.origin ); + + if ( !isdefined( self ) || !isalive( self ) ) + return; + + if ( isdefined( self.riotshield_knockdown_func ) ) + self [[ self.riotshield_knockdown_func ]]( player, gib ); + else + self zombie_knockdown( player, gib ); + + self dodamage( level.zombie_vars["riotshield_knockdown_damage"], player.origin, player ); + self playsound( "fly_riotshield_forcehit" ); +} + +riotshield_get_enemies_in_range() +{ + view_pos = self geteye(); + zombies = get_array_of_closest( view_pos, get_round_enemy_array_wrapper(), undefined, undefined, 2 * level.zombie_vars["riotshield_knockdown_range"] ); + + if ( !isdefined( zombies ) ) + return; + + knockdown_range_squared = level.zombie_vars["riotshield_knockdown_range"] * level.zombie_vars["riotshield_knockdown_range"]; + gib_range_squared = level.zombie_vars["riotshield_gib_range"] * level.zombie_vars["riotshield_gib_range"]; + fling_range_squared = level.zombie_vars["riotshield_fling_range"] * level.zombie_vars["riotshield_fling_range"]; + cylinder_radius_squared = level.zombie_vars["riotshield_cylinder_radius"] * level.zombie_vars["riotshield_cylinder_radius"]; + forward_view_angles = self getweaponforwarddir(); + end_pos = view_pos + vectorscale( forward_view_angles, level.zombie_vars["riotshield_knockdown_range"] ); +/# + if ( 2 == getdvarint( _hash_BF480CE9 ) ) + { + near_circle_pos = view_pos + vectorscale( forward_view_angles, 2 ); + circle( near_circle_pos, level.zombie_vars["riotshield_cylinder_radius"], ( 1, 0, 0 ), 0, 0, 100 ); + line( near_circle_pos, end_pos, ( 0, 0, 1 ), 1, 0, 100 ); + circle( end_pos, level.zombie_vars["riotshield_cylinder_radius"], ( 1, 0, 0 ), 0, 0, 100 ); + } +#/ + for ( i = 0; i < zombies.size; i++ ) + { + if ( !isdefined( zombies[i] ) || !isalive( zombies[i] ) ) + continue; + + test_origin = zombies[i] getcentroid(); + test_range_squared = distancesquared( view_pos, test_origin ); + + if ( test_range_squared > knockdown_range_squared ) + { + zombies[i] riotshield_debug_print( "range", ( 1, 0, 0 ) ); + return; + } + + normal = vectornormalize( test_origin - view_pos ); + dot = vectordot( forward_view_angles, normal ); + + if ( 0 > dot ) + { + zombies[i] riotshield_debug_print( "dot", ( 1, 0, 0 ) ); + continue; + } + + radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin ); + + if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared ) + { + zombies[i] riotshield_debug_print( "cylinder", ( 1, 0, 0 ) ); + continue; + } + + if ( 0 == zombies[i] damageconetrace( view_pos, self ) ) + { + zombies[i] riotshield_debug_print( "cone", ( 1, 0, 0 ) ); + continue; + } + + if ( test_range_squared < fling_range_squared ) + { + level.riotshield_fling_enemies[level.riotshield_fling_enemies.size] = zombies[i]; + dist_mult = ( fling_range_squared - test_range_squared ) / fling_range_squared; + fling_vec = vectornormalize( test_origin - view_pos ); + + if ( 5000 < test_range_squared ) + fling_vec += vectornormalize( test_origin - radial_origin ); + + fling_vec = ( fling_vec[0], fling_vec[1], abs( fling_vec[2] ) ); + fling_vec = vectorscale( fling_vec, 100 + 100 * dist_mult ); + level.riotshield_fling_vecs[level.riotshield_fling_vecs.size] = fling_vec; + zombies[i] riotshield_debug_print( "fling", ( 0, 1, 0 ) ); + continue; + } + + level.riotshield_knockdown_enemies[level.riotshield_knockdown_enemies.size] = zombies[i]; + level.riotshield_knockdown_gib[level.riotshield_knockdown_gib.size] = 0; + zombies[i] riotshield_debug_print( "knockdown", ( 1, 1, 0 ) ); + } +} + +riotshield_network_choke() +{ + level.riotshield_network_choke_count++; + + if ( !( level.riotshield_network_choke_count % 10 ) ) + { + wait_network_frame(); + wait_network_frame(); + wait_network_frame(); + } +} + +riotshield_melee() +{ + if ( !isdefined( level.riotshield_knockdown_enemies ) ) + { + level.riotshield_knockdown_enemies = []; + level.riotshield_knockdown_gib = []; + level.riotshield_fling_enemies = []; + level.riotshield_fling_vecs = []; + } + + self riotshield_get_enemies_in_range(); + shield_damage = 0; + level.riotshield_network_choke_count = 0; + + for ( i = 0; i < level.riotshield_fling_enemies.size; i++ ) + { + riotshield_network_choke(); + + if ( isdefined( level.riotshield_fling_enemies[i] ) ) + { + level.riotshield_fling_enemies[i] thread riotshield_fling_zombie( self, level.riotshield_fling_vecs[i], i ); + shield_damage += level.zombie_vars["riotshield_fling_damage_shield"]; + } + } + + for ( i = 0; i < level.riotshield_knockdown_enemies.size; i++ ) + { + riotshield_network_choke(); + level.riotshield_knockdown_enemies[i] thread riotshield_knockdown_zombie( self, level.riotshield_knockdown_gib[i] ); + shield_damage += level.zombie_vars["riotshield_knockdown_damage_shield"]; + } + + level.riotshield_knockdown_enemies = []; + level.riotshield_knockdown_gib = []; + level.riotshield_fling_enemies = []; + level.riotshield_fling_vecs = []; + + if ( shield_damage ) + self player_damage_shield( shield_damage, 0 ); +} + +trackstuckzombies() +{ + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "deployed_riotshield" ); + + if ( isdefined( self.riotshieldentity ) ) + self thread watchstuckzombies(); + } +} + +attack_shield( shield ) +{ + self endon( "death" ); + shield.owner endon( "death" ); + shield.owner endon( "disconnect" ); + shield.owner endon( "start_riotshield_deploy" ); + shield.owner endon( "destroy_riotshield" ); + + if ( isdefined( self.doing_shield_attack ) && self.doing_shield_attack ) + return 0; + + self.old_origin = self.origin; + + if ( getdvar( _hash_B253DFE7 ) == "" ) + setdvar( "zombie_shield_attack_freq", "15" ); + + freq = getdvarint( _hash_B253DFE7 ); + self.doing_shield_attack = 1; + self.enemyoverride[0] = shield.origin; + self.enemyoverride[1] = shield; + wait( randomint( 100 ) / 100.0 ); + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "attack", self.animname ); + attackanim = "zm_riotshield_melee"; + + if ( !self.has_legs ) + attackanim += "_crawl"; + + self orientmode( "face point", shield.origin ); + self animscripted( self.origin, flat_angle( vectortoangles( shield.origin - self.origin ) ), attackanim ); + + if ( isdefined( shield.owner.player_shield_apply_damage ) ) + shield.owner [[ shield.owner.player_shield_apply_damage ]]( 100, 0 ); + else + shield.owner player_damage_shield( 100, 0 ); + + self thread attack_shield_stop( shield ); + wait( randomint( 100 ) / 100.0 ); + self.doing_shield_attack = 0; + self orientmode( "face default" ); +} + +attack_shield_stop( shield ) +{ + self notify( "attack_shield_stop" ); + self endon( "attack_shield_stop" ); + self endon( "death" ); + + shield waittill( "death" ); + + self stopanimscripted(); + + if ( isdefined( self.doing_shield_attack ) && self.doing_shield_attack ) + { + breachanim = "zm_riotshield_breakthrough"; + + if ( !self.has_legs ) + breachanim += "_crawl"; + + self animscripted( self.origin, flat_angle( self.angles ), breachanim ); + } +} + +window_notetracks( msg, player ) +{ + self endon( "death" ); + + while ( true ) + { + self waittill( msg, notetrack ); + + if ( notetrack == "end" ) + return; + + if ( notetrack == "fire" ) + player player_damage_shield( 100, 0 ); + } +} + +watchstuckzombies() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "start_riotshield_deploy" ); + self endon( "destroy_riotshield" ); + self endon( "deployed_riotshield" ); + level endon( "intermission" ); + self.riotshieldentity maps\mp\zombies\_zm_equipment::item_attract_zombies(); +} + +riotshield_active() +{ + return self maps\mp\zombies\_zm_equipment::is_equipment_active( "tomb_shield_zm" ); +} + +riotshield_debug_print( msg, color ) +{ +/# + if ( !getdvarint( _hash_BF480CE9 ) ) + return; + + if ( !isdefined( color ) ) + color = ( 1, 1, 1 ); + + print3d( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), msg, color, 1, 1, 40 ); +#/ +} + +shield_zombie_attract_func( poi ) +{ + +} + +shield_zombie_arrive_func( poi ) +{ + self endon( "death" ); + self endon( "zombie_acquire_enemy" ); + self endon( "path_timer_done" ); + + self waittill( "goal" ); + + if ( isdefined( poi.owner ) ) + { + poi.owner player_damage_shield( 100, 0 ); + + if ( isdefined( poi.owner.player_shield_apply_damage ) ) + poi.owner [[ poi.owner.player_shield_apply_damage ]]( 100, 0 ); + } +} + +createriotshieldattractor() +{ + self create_zombie_point_of_interest( 50, 8, 0, 1, ::shield_zombie_attract_func, ::shield_zombie_arrive_func ); + self thread create_zombie_point_of_interest_attractor_positions( 4, 15, 15 ); + return get_zombie_point_of_interest( self.origin ); +} + +riotshield_zombie_damage_response( mod, hit_location, hit_origin, player, amount ) +{ + if ( self is_riotshield_damage( mod, player, amount ) ) + { + self riotshield_damage( amount ); + return true; + } + + return false; +} + +watchriotshieldattractor() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "start_riotshield_deploy" ); + self endon( "destroy_riotshield" ); + self endon( "deployed_riotshield" ); + poi = self.riotshieldentity createriotshieldattractor(); +} + +trackriotshieldattractor() +{ + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "deployed_riotshield" ); + + self thread watchriotshieldattractor(); + } +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_staff_air.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_staff_air.gsc new file mode 100644 index 0000000..e5f895c --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_staff_air.gsc @@ -0,0 +1,594 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\animscripts\shared; + +init() +{ + level._effect["whirlwind"] = loadfx( "weapon/zmb_staff/fx_zmb_staff_air_ug_impact_miss" ); + registerclientfield( "scriptmover", "whirlwind_play_fx", 14000, 1, "int" ); + registerclientfield( "actor", "air_staff_launch", 14000, 1, "int" ); + registerclientfield( "allplayers", "air_staff_source", 14000, 1, "int" ); + onplayerconnect_callback( ::onplayerconnect ); + maps\mp\zombies\_zm_ai_basic::init_inert_zombies(); + flag_init( "whirlwind_active" ); + maps\mp\zombies\_zm_spawner::register_zombie_damage_callback( ::staff_air_zombie_damage_response ); + maps\mp\zombies\_zm_spawner::register_zombie_death_event_callback( ::staff_air_death_event ); +} + +precache() +{ + precacheitem( "staff_air_melee_zm" ); +} + +onplayerconnect() +{ + self thread onplayerspawned(); +} + +onplayerspawned() +{ + self endon( "disconnect" ); + self thread watch_staff_air_fired(); + self thread watch_staff_air_impact(); + self thread watch_staff_usage(); +} + +air_projectile_delete() +{ + self endon( "death" ); + wait 0.75; + self delete(); +} + +watch_staff_air_fired() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "missile_fire", e_projectile, str_weapon ); + + if ( str_weapon == "staff_air_upgraded_zm" || str_weapon == "staff_air_zm" ) + { + e_projectile thread air_projectile_delete(); + wind_damage_cone( str_weapon ); + self setclientfield( "air_staff_source", 1 ); + wait_network_frame(); + self setclientfield( "air_staff_source", 0 ); + } + } +} + +watch_staff_air_impact() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "projectile_impact", str_weap_name, v_explode_point, n_radius, projectile ); + + if ( str_weap_name == "staff_air_upgraded2_zm" || str_weap_name == "staff_air_upgraded3_zm" ) + self thread staff_air_find_source( v_explode_point, str_weap_name ); + } +} + +staff_air_find_source( v_detonate, str_weapon ) +{ + self endon( "disconnect" ); + + if ( !isdefined( v_detonate ) ) + return; + + a_zombies = getaiarray( level.zombie_team ); + a_zombies = get_array_of_closest( v_detonate, a_zombies ); + + if ( a_zombies.size ) + { + for ( i = 0; i < a_zombies.size; i++ ) + { + if ( isalive( a_zombies[i] ) ) + { + if ( is_true( a_zombies[i].staff_hit ) ) + continue; + + if ( distance2dsquared( v_detonate, a_zombies[i].origin ) <= 10000 ) + self thread staff_air_zombie_source( a_zombies[0], str_weapon ); + else + self thread staff_air_position_source( v_detonate, str_weapon ); + + return; + } + } + } + else + self thread staff_air_position_source( v_detonate, str_weapon ); +} + +staff_air_zombie_source( ai_zombie, str_weapon ) +{ + self endon( "disconnect" ); + ai_zombie.staff_hit = 1; + ai_zombie.is_source = 1; + v_whirlwind_pos = ai_zombie.origin; + self thread staff_air_position_source( v_whirlwind_pos, str_weapon ); + + if ( !isdefined( ai_zombie.is_mechz ) ) + self thread source_zombie_death( ai_zombie ); +} + +staff_air_position_source( v_detonate, str_weapon ) +{ + self endon( "disconnect" ); + + if ( !isdefined( v_detonate ) ) + return; + + if ( flag( "whirlwind_active" ) ) + { + level notify( "whirlwind_stopped" ); + + while ( flag( "whirlwind_active" ) ) + wait_network_frame(); + + wait 0.3; + } + + flag_set( "whirlwind_active" ); + n_time = self.chargeshotlevel * 3.5; + e_whirlwind = spawn( "script_model", v_detonate + vectorscale( ( 0, 0, 1 ), 100.0 ) ); + e_whirlwind setmodel( "tag_origin" ); + e_whirlwind.angles = vectorscale( ( -1, 0, 0 ), 90.0 ); + e_whirlwind thread puzzle_debug_position( "X", vectorscale( ( 1, 1, 0 ), 255.0 ) ); + e_whirlwind moveto( groundpos_ignore_water_new( e_whirlwind.origin ), 0.05 ); + + e_whirlwind waittill( "movedone" ); + + e_whirlwind setclientfield( "whirlwind_play_fx", 1 ); + e_whirlwind thread whirlwind_rumble_nearby_players( "whirlwind_active" ); + e_whirlwind thread whirlwind_timeout( n_time ); + wait 0.5; + e_whirlwind.player_owner = self; + e_whirlwind thread whirlwind_seek_zombies( self.chargeshotlevel, str_weapon ); +} + +whirlwind_seek_zombies( n_level, str_weapon ) +{ + self endon( "death" ); + self.b_found_zombies = 0; + n_range = get_air_blast_range( n_level ); + + while ( true ) + { + a_zombies = staff_air_zombie_range( self.origin, n_range ); + + if ( a_zombies.size ) + { + self.b_found_zombies = 1; + self thread whirlwind_kill_zombies( n_level, str_weapon ); + break; + } + + wait 0.1; + } +} + +whirlwind_timeout( n_time ) +{ + self endon( "death" ); + level waittill_any_or_timeout( n_time, "whirlwind_stopped" ); + level notify( "whirlwind_stopped" ); + self setclientfield( "whirlwind_play_fx", 0 ); + self notify( "stop_debug_position" ); + flag_clear( "whirlwind_active" ); + wait 1.5; + self delete(); +} + +move_along_ground_position( v_position, n_time ) +{ + v_diff = vectornormalize( v_position - self.origin ); + v_newpos = self.origin + v_diff * 50 + vectorscale( ( 0, 0, 1 ), 50.0 ); + v_ground = groundpos_ignore_water_new( v_newpos ); + self moveto( v_ground, n_time ); +} + +whirlwind_kill_zombies( n_level, str_weapon ) +{ + self endon( "death" ); + n_range = get_air_blast_range( n_level ); + self.n_charge_level = n_level; + + while ( true ) + { + a_zombies = staff_air_zombie_range( self.origin, n_range ); + a_zombies = get_array_of_closest( self.origin, a_zombies ); + + for ( i = 0; i < a_zombies.size; i++ ) + { + if ( !isdefined( a_zombies[i] ) ) + continue; + + if ( a_zombies[i].ai_state != "find_flesh" ) + continue; + + if ( is_true( a_zombies[i].is_mechz ) ) + continue; + + if ( is_true( self._whirlwind_attract_anim ) ) + continue; + + v_offset = ( 10, 10, 32 ); + + if ( !bullet_trace_throttled( self.origin + v_offset, a_zombies[i].origin + v_offset, undefined ) ) + continue; + + if ( !isdefined( a_zombies[i] ) || !isalive( a_zombies[i] ) ) + continue; + + v_offset = ( -10, -10, 64 ); + + if ( !bullet_trace_throttled( self.origin + v_offset, a_zombies[i].origin + v_offset, undefined ) ) + continue; + + if ( !isdefined( a_zombies[i] ) || !isalive( a_zombies[i] ) ) + continue; + + a_zombies[i] thread whirlwind_drag_zombie( self, str_weapon ); + wait 0.5; + } + + wait_network_frame(); + } +} + +whirlwind_drag_zombie( e_whirlwind, str_weapon ) +{ + if ( isdefined( self.e_linker ) ) + return; + + self whirlwind_move_zombie( e_whirlwind ); + + if ( isdefined( self ) && isdefined( e_whirlwind ) && flag( "whirlwind_active" ) ) + { + player = e_whirlwind.player_owner; + self do_damage_network_safe( player, self.health, str_weapon, "MOD_IMPACT" ); + level thread staff_air_gib( self ); + } +} + +whirlwind_move_zombie( e_whirlwind ) +{ + if ( isdefined( self.e_linker ) ) + return; + + self.e_linker = spawn( "script_origin", ( 0, 0, 0 ) ); + self.e_linker.origin = self.origin; + self.e_linker.angles = self.angles; + self linkto( self.e_linker ); + self thread whirlwind_unlink( e_whirlwind ); + + if ( isdefined( e_whirlwind ) ) + n_dist_sq = distance2dsquared( e_whirlwind.origin, self.origin ); + + n_fling_range_sq = 900; + + while ( isalive( self ) && n_dist_sq > n_fling_range_sq && isdefined( e_whirlwind ) && flag( "whirlwind_active" ) ) + { + n_dist_sq = distance2dsquared( e_whirlwind.origin, self.origin ); + + if ( isdefined( self.ai_state ) && self.ai_state == "find_flesh" ) + { + b_supercharged = e_whirlwind.n_charge_level == 3; + self thread whirlwind_attract_anim( e_whirlwind.origin, b_supercharged ); + n_movetime = 1.0; + + if ( b_supercharged ) + n_movetime = 0.8; + + self.e_linker thread move_along_ground_position( e_whirlwind.origin, n_movetime ); + } + else + break; + + wait 0.05; + } + + self notify( "reached_whirlwind" ); + self.e_linker delete(); +} + +whirlwind_unlink( e_whirlwind ) +{ + self endon( "death" ); + + e_whirlwind waittill( "death" ); + + self unlink(); +} + +source_zombie_death( ai_zombie ) +{ + self endon( "disconnect" ); + n_range = get_air_blast_range( self.chargeshotlevel ); + tag = "J_SpineUpper"; + + if ( ai_zombie.isdog ) + tag = "J_Spine1"; + + v_source = ai_zombie gettagorigin( tag ); + ai_zombie thread staff_air_fling_zombie( self ); + a_zombies = staff_air_zombie_range( v_source, n_range ); + + if ( !isdefined( a_zombies ) ) + return; + + self thread staff_air_proximity_kill( a_zombies ); +} + +get_air_blast_range( n_charge ) +{ + switch ( n_charge ) + { + case 1: + n_range = 100; + break; + default: + n_range = 250; + break; + } + + return n_range; +} + +staff_air_proximity_kill( a_zombies ) +{ + self endon( "disconnect" ); + + if ( !isdefined( a_zombies ) ) + return; + + for ( i = 0; i < a_zombies.size; i++ ) + { + if ( isalive( a_zombies[i] ) ) + { + a_zombies[i] thread staff_air_fling_zombie( self ); + wait 0.05; + } + } +} + +staff_air_zombie_range( v_source, n_range ) +{ + a_enemies = []; + a_zombies = getaiarray( level.zombie_team ); + a_zombies = get_array_of_closest( v_source, a_zombies ); + n_range_sq = n_range * n_range; + + if ( isdefined( a_zombies ) ) + { + for ( i = 0; i < a_zombies.size; i++ ) + { + if ( !isdefined( a_zombies[i] ) ) + continue; + + v_zombie_pos = a_zombies[i].origin; + + if ( isdefined( a_zombies[i].staff_hit ) && a_zombies[i].staff_hit == 1 ) + continue; + + if ( distancesquared( v_source, v_zombie_pos ) > n_range_sq ) + continue; + + a_enemies[a_enemies.size] = a_zombies[i]; + } + } + + return a_enemies; +} + +staff_air_fling_zombie( player ) +{ + player endon( "disconnect" ); + + if ( !isalive( self ) ) + return; + + if ( isdefined( self.is_source ) || cointoss() ) + self thread zombie_launch( player, "staff_air_upgraded_zm" ); + else + { + self do_damage_network_safe( player, self.health, "staff_air_upgraded_zm", "MOD_IMPACT" ); + level thread staff_air_gib( self ); + } +} + +zombie_launch( e_attacker, str_weapon ) +{ + self do_damage_network_safe( e_attacker, self.health, str_weapon, "MOD_IMPACT" ); + + if ( isdefined( level.ragdoll_limit_check ) && ![[ level.ragdoll_limit_check ]]() ) + level thread staff_air_gib( self ); + else + { + self startragdoll(); + self setclientfield( "air_staff_launch", 1 ); + } +} + +determine_launch_vector( e_attacker, ai_target ) +{ + v_launch = vectornormalize( ai_target.origin - e_attacker.origin ) * randomintrange( 125, 150 ) + ( 0, 0, randomintrange( 75, 150 ) ); + return v_launch; +} + +staff_air_gib( ai_zombie ) +{ + if ( cointoss() ) + ai_zombie thread zombie_gib_all(); + + ai_zombie thread zombie_gib_guts(); +} + +staff_air_zombie_damage_response( mod, hit_location, hit_origin, player, amount ) +{ + if ( self is_staff_air_damage() && mod != "MOD_MELEE" ) + { + self thread stun_zombie(); + return true; + } + + return false; +} + +is_staff_air_damage() +{ + return isdefined( self.damageweapon ) && ( self.damageweapon == "staff_air_zm" || self.damageweapon == "staff_air_upgraded_zm" ) && !is_true( self.set_beacon_damage ); +} + +staff_air_death_event() +{ + if ( is_staff_air_damage() && self.damagemod != "MOD_MELEE" ) + { + if ( is_true( self.is_mechz ) ) + return; + + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "death", self.animname ); + self thread zombie_eye_glow_stop(); + + if ( isdefined( level.ragdoll_limit_check ) && ![[ level.ragdoll_limit_check ]]() ) + level thread staff_air_gib( self ); + else + { + self startragdoll(); + self setclientfield( "air_staff_launch", 1 ); + } + } +} + +wind_damage_cone( str_weapon ) +{ + fire_angles = self getplayerangles(); + fire_origin = self getplayercamerapos(); + a_targets = getaiarray( "axis" ); + a_targets = get_array_of_closest( self.origin, a_targets, undefined, 12, 400 ); + + if ( str_weapon == "staff_air_upgraded_zm" ) + { + n_damage = 3300; + n_fov = 60; + } + else + { + n_damage = 2050; + n_fov = 45; + } + + foreach ( target in a_targets ) + { + if ( isai( target ) ) + { + if ( within_fov( fire_origin, fire_angles, target gettagorigin( "j_spine4" ), cos( n_fov ) ) ) + { + if ( self maps\mp\zombies\_zm_powerups::is_insta_kill_active() ) + n_damage = target.health; + + target do_damage_network_safe( self, n_damage, str_weapon, "MOD_IMPACT" ); + } + } + } +} + +stun_zombie() +{ + self endon( "death" ); + + if ( is_true( self.is_mechz ) ) + return; + + if ( is_true( self.is_electrocuted ) ) + return; + + if ( !isdefined( self.ai_state ) || self.ai_state != "find_flesh" ) + return; + + self.forcemovementscriptstate = 1; + self.ignoreall = 1; + self.is_electrocuted = 1; + tag = "J_SpineUpper"; + + if ( self.isdog ) + tag = "J_Spine1"; + + self animscripted( self.origin, self.angles, "zm_electric_stun" ); + self maps\mp\animscripts\shared::donotetracks( "stunned" ); + self.forcemovementscriptstate = 0; + self.ignoreall = 0; + self.is_electrocuted = 0; +} + +whirlwind_attract_anim_watch_cancel() +{ + self endon( "death" ); + + while ( flag( "whirlwind_active" ) ) + wait_network_frame(); + + self.deathanim = undefined; + self stopanimscripted(); + self._whirlwind_attract_anim = 0; +} + +whirlwind_attract_anim( v_attract_point, b_move_fast = 0 ) +{ + self endon( "death" ); + level endon( "whirlwind_stopped" ); + + if ( is_true( self._whirlwind_attract_anim ) ) + return; + + v_angles_to_source = vectortoangles( v_attract_point - self.origin ); + v_source_to_target = vectortoangles( self.origin - v_attract_point ); + self.a.runblendtime = 0.9; + + if ( self.has_legs ) + { + self.needs_run_update = 1; + self._had_legs = 1; + + if ( b_move_fast ) + self animscripted( self.origin, v_source_to_target, "zm_move_whirlwind_fast" ); + else + self animscripted( self.origin, v_source_to_target, "zm_move_whirlwind" ); + } + else + { + self.needs_run_update = 1; + self._had_legs = 0; + + if ( b_move_fast ) + self animscripted( self.origin, v_source_to_target, "zm_move_whirlwind_crawl" ); + else + self animscripted( self.origin, v_source_to_target, "zm_move_whirlwind_fast_crawl" ); + } + + if ( is_true( self.nogravity ) ) + { + self animmode( "none" ); + self.nogravity = undefined; + } + + self._whirlwind_attract_anim = 1; + self.a.runblendtime = self._normal_run_blend_time; + self thread whirlwind_attract_anim_watch_cancel(); + + self waittill( "reached_whirlwind" ); +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_staff_fire.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_staff_fire.gsc new file mode 100644 index 0000000..8af103d --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_staff_fire.gsc @@ -0,0 +1,445 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_powerups; + +init() +{ + registerclientfield( "actor", "fire_char_fx", 14000, 1, "int" ); + registerclientfield( "toplayer", "fire_muzzle_fx", 14000, 1, "int" ); + onplayerconnect_callback( ::onplayerconnect ); + maps\mp\zombies\_zm_ai_basic::init_inert_zombies(); + maps\mp\zombies\_zm_spawner::register_zombie_damage_callback( ::staff_fire_zombie_damage_response ); + maps\mp\zombies\_zm_spawner::register_zombie_death_event_callback( ::staff_fire_death_event ); +} + +precache() +{ + precacheitem( "staff_fire_melee_zm" ); +} + +onplayerconnect() +{ + self thread onplayerspawned(); +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "spawned_player" ); + + self thread watch_staff_fire_upgrade_fired(); + self thread watch_staff_fire_fired(); + self thread watch_staff_usage(); + } +} + +watch_staff_fire_fired() +{ + self notify( "watch_staff_fired" ); + self endon( "disconnect" ); + self endon( "watch_staff_fired" ); + + while ( true ) + { + self waittill( "missile_fire", e_projectile, str_weapon ); + + if ( is_true( e_projectile.additional_shot ) ) + continue; + + if ( str_weapon == "staff_fire_zm" || str_weapon == "staff_fire_upgraded_zm" ) + self fire_spread_shots( str_weapon ); + } +} + +watch_staff_fire_upgrade_fired() +{ + self notify( "watch_staff_upgrade_fired" ); + self endon( "disconnect" ); + self endon( "watch_staff_upgrade_fired" ); + + while ( true ) + { + self waittill( "grenade_fire", e_projectile, str_weapon ); + + if ( is_true( e_projectile.additional_shot ) ) + continue; + + if ( str_weapon == "staff_fire_upgraded2_zm" || str_weapon == "staff_fire_upgraded3_zm" ) + { + e_projectile thread fire_staff_update_grenade_fuse(); + e_projectile thread fire_staff_area_of_effect( self, str_weapon ); + self fire_additional_shots( str_weapon ); + } + } +} + +fire_spread_shots( str_weapon ) +{ + wait_network_frame(); + wait_network_frame(); + v_fwd = self getweaponforwarddir(); + fire_angles = vectortoangles( v_fwd ); + fire_origin = self getweaponmuzzlepoint(); + trace = bullettrace( fire_origin, fire_origin + v_fwd * 100.0, 0, undefined ); + + if ( trace["fraction"] != 1 ) + return; + + v_left_angles = ( fire_angles[0], fire_angles[1] - 15, fire_angles[2] ); + v_left = anglestoforward( v_left_angles ); + e_proj = magicbullet( str_weapon, fire_origin + v_fwd * 50.0, fire_origin + v_left * 100.0, self ); + e_proj.additional_shot = 1; + wait_network_frame(); + wait_network_frame(); + v_fwd = self getweaponforwarddir(); + fire_angles = vectortoangles( v_fwd ); + fire_origin = self getweaponmuzzlepoint(); + v_right_angles = ( fire_angles[0], fire_angles[1] + 15, fire_angles[2] ); + v_right = anglestoforward( v_right_angles ); + e_proj = magicbullet( str_weapon, fire_origin + v_fwd * 50.0, fire_origin + v_right * 100.0, self ); + e_proj.additional_shot = 1; +} + +fire_staff_area_of_effect( e_attacker, str_weapon ) +{ + self waittill( "explode", v_pos ); + + ent = spawn( "script_origin", v_pos ); + ent playloopsound( "wpn_firestaff_grenade_loop", 1 ); +/# + level thread puzzle_debug_position( "X", vectorscale( ( 1, 0, 0 ), 255.0 ), v_pos, undefined, 5.0 ); +#/ + n_alive_time = 5.0; + aoe_radius = 80; + + if ( str_weapon == "staff_fire_upgraded3_zm" ) + aoe_radius = 100; + + n_step_size = 0.2; + + while ( n_alive_time > 0.0 ) + { + if ( n_alive_time - n_step_size <= 0.0 ) + aoe_radius *= 2; + + a_targets = getaiarray( "axis" ); + a_targets = get_array_of_closest( v_pos, a_targets, undefined, undefined, aoe_radius ); + wait( n_step_size ); + n_alive_time -= n_step_size; + + foreach ( e_target in a_targets ) + { + if ( isdefined( e_target ) && isalive( e_target ) ) + { + if ( !is_true( self.is_on_fire ) ) + e_target thread flame_damage_fx( str_weapon, e_attacker ); + } + } + } + + ent playsound( "wpn_firestaff_proj_impact" ); + ent delete(); +} + +grenade_waittill_still_or_bounce() +{ + self endon( "death" ); + self endon( "grenade_bounce" ); + wait 0.5; + + do + { + prev_origin = self.origin; + wait_network_frame(); + wait_network_frame(); + } + while ( prev_origin != self.origin ); +} + +fire_staff_update_grenade_fuse() +{ + self endon( "death" ); + self grenade_waittill_still_or_bounce(); + self notify( "fire_aoe_start", self.origin ); + self resetmissiledetonationtime( 0.0 ); +} + +fire_additional_shots( str_weapon ) +{ + self endon( "disconnect" ); + self endon( "weapon_change" ); + n_shots = 1; + + if ( str_weapon == "staff_fire_upgraded3_zm" ) + n_shots = 2; + + for ( i = 1; i <= n_shots; i++ ) + { + wait 0.35; + + if ( isdefined( self ) && self getcurrentweapon() == "staff_fire_upgraded_zm" ) + { + v_player_angles = vectortoangles( self getweaponforwarddir() ); + n_player_pitch = v_player_angles[0]; + n_player_pitch += 5 * i; + n_player_yaw = v_player_angles[1] + randomfloatrange( -15.0, 15.0 ); + v_shot_angles = ( n_player_pitch, n_player_yaw, v_player_angles[2] ); + v_shot_start = self getweaponmuzzlepoint(); + v_shot_end = v_shot_start + anglestoforward( v_shot_angles ); + e_proj = magicbullet( str_weapon, v_shot_start, v_shot_end, self ); + e_proj.additional_shot = 1; + e_proj thread fire_staff_update_grenade_fuse(); + e_proj thread fire_staff_area_of_effect( self, str_weapon ); + self setclientfieldtoplayer( "fire_muzzle_fx", 1 ); + wait_network_frame(); + self setclientfieldtoplayer( "fire_muzzle_fx", 0 ); + } + } +} + +staff_fire_zombie_damage_response( mod, hit_location, hit_origin, player, amount ) +{ + if ( self is_staff_fire_damage() && mod != "MOD_MELEE" ) + { + self thread staff_fire_zombie_hit_response_internal( mod, self.damageweapon, player, amount ); + return true; + } + + return false; +} + +is_staff_fire_damage() +{ + return isdefined( self.damageweapon ) && ( self.damageweapon == "staff_fire_zm" || self.damageweapon == "staff_fire_upgraded_zm" || self.damageweapon == "staff_fire_upgraded2_zm" || self.damageweapon == "staff_fire_upgraded3_zm" ) && !is_true( self.set_beacon_damage ); +} + +staff_fire_zombie_hit_response_internal( mod, damageweapon, player, amount ) +{ + player endon( "disconnect" ); + + if ( !isalive( self ) ) + return; + + if ( mod != "MOD_BURNED" && mod != "MOD_GRENADE_SPLASH" ) + { + pct_from_center = ( amount - 1.0 ) / 10.0; + pct_damage = 0.5 + 0.5 * pct_from_center; + + if ( is_true( self.is_mechz ) ) + { + self thread mechz_flame_damage( damageweapon, player, pct_damage ); + return; + } + + self thread flame_damage_fx( damageweapon, player, pct_damage ); + } +} + +staff_fire_death_event() +{ + if ( is_staff_fire_damage() && self.damagemod != "MOD_MELEE" ) + { + self setclientfield( "fire_char_fx", 1 ); + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "death", self.animname ); + self thread zombie_eye_glow_stop(); + } +} + +on_fire_timeout( n_duration ) +{ + self endon( "death" ); + wait( n_duration ); + self.is_on_fire = 0; + self notify( "stop_flame_damage" ); +} + +flame_damage_fx( damageweapon, e_attacker, pct_damage = 1.0 ) +{ + was_on_fire = is_true( self.is_on_fire ); + n_initial_dmg = get_impact_damage( damageweapon ) * pct_damage; + is_upgraded = damageweapon == "staff_fire_upgraded_zm" || damageweapon == "staff_fire_upgraded2_zm" || damageweapon == "staff_fire_upgraded3_zm"; + + if ( is_upgraded && pct_damage > 0.5 && n_initial_dmg > self.health && cointoss() ) + { + self do_damage_network_safe( e_attacker, self.health, damageweapon, "MOD_BURNED" ); + + if ( cointoss() ) + self thread zombie_gib_all(); + else + self thread zombie_gib_guts(); + + return; + } + + self endon( "death" ); + + if ( !was_on_fire ) + { + self.is_on_fire = 1; + self thread zombie_set_and_restore_flame_state(); + wait 0.5; + self thread flame_damage_over_time( e_attacker, damageweapon, pct_damage ); + } + + if ( n_initial_dmg > 0 ) + self do_damage_network_safe( e_attacker, n_initial_dmg, damageweapon, "MOD_BURNED" ); +} + +_fire_stun_zombie_internal( do_stun, run_cycle ) +{ + if ( !isalive( self ) ) + return; + + if ( is_true( self.has_legs ) ) + self set_zombie_run_cycle( run_cycle ); + + if ( do_stun ) + self animscripted( self.origin, self.angles, "zm_afterlife_stun" ); +} + +fire_stun_zombie_choked( do_stun, run_cycle ) +{ + maps\mp\zombies\_zm_net::network_safe_init( "fire_stun", 2 ); + self maps\mp\zombies\_zm_net::network_choke_action( "fire_stun", ::_fire_stun_zombie_internal, do_stun, run_cycle ); +} + +zombie_set_and_restore_flame_state() +{ + if ( !isalive( self ) ) + return; + + if ( is_true( self.is_mechz ) ) + return; + + self setclientfield( "fire_char_fx", 1 ); + self.disablemelee = 1; + prev_run_cycle = self.zombie_move_speed; + + if ( is_true( self.has_legs ) ) + self.deathanim = "zm_death_fire"; + + if ( self.ai_state == "find_flesh" ) + self fire_stun_zombie_choked( 1, "burned" ); + + self waittill( "stop_flame_damage" ); + + self.deathanim = undefined; + self.disablemelee = undefined; + + if ( self.ai_state == "find_flesh" ) + self fire_stun_zombie_choked( 0, prev_run_cycle ); + + self setclientfield( "fire_char_fx", 0 ); +} + +get_impact_damage( damageweapon ) +{ + switch ( damageweapon ) + { + case "staff_fire_zm": + return 2050; + case "staff_fire_upgraded_zm": + return 3300; + case "staff_fire_upgraded2_zm": + return 11500; + case "staff_fire_upgraded3_zm": + return 20000; + case "one_inch_punch_fire_zm": + return 0; + default: + return 0; + } +} + +get_damage_per_second( damageweapon ) +{ + switch ( damageweapon ) + { + case "staff_fire_zm": + return 75; + case "staff_fire_upgraded_zm": + return 150; + case "staff_fire_upgraded2_zm": + return 300; + case "staff_fire_upgraded3_zm": + return 450; + case "one_inch_punch_fire_zm": + return 250; + default: + return self.health; + } +} + +get_damage_duration( damageweapon ) +{ + switch ( damageweapon ) + { + case "staff_fire_zm": + return 8; + case "staff_fire_upgraded_zm": + return 8; + case "staff_fire_upgraded2_zm": + return 8; + case "staff_fire_upgraded3_zm": + return 8; + case "one_inch_punch_fire_zm": + return 8; + default: + return 8; + } +} + +flame_damage_over_time( e_attacker, damageweapon, pct_damage ) +{ + e_attacker endon( "disconnect" ); + self endon( "death" ); + self endon( "stop_flame_damage" ); + n_damage = get_damage_per_second( damageweapon ); + n_duration = get_damage_duration( damageweapon ); + n_damage *= pct_damage; + self thread on_fire_timeout( n_duration ); + + while ( true ) + { + if ( isdefined( e_attacker ) && isplayer( e_attacker ) ) + { + if ( e_attacker maps\mp\zombies\_zm_powerups::is_insta_kill_active() ) + n_damage = self.health; + } + + self do_damage_network_safe( e_attacker, n_damage, damageweapon, "MOD_BURNED" ); + wait 1.0; + } +} + +mechz_flame_damage( damageweapon, e_attacker, pct_damage ) +{ + self endon( "death" ); + n_initial_dmg = get_impact_damage( damageweapon ); + + if ( n_initial_dmg > 0 ) + self do_damage_network_safe( e_attacker, n_initial_dmg, damageweapon, "MOD_BURNED" ); +} + +stop_zombie() +{ + e_linker = spawn( "script_origin", ( 0, 0, 0 ) ); + e_linker.origin = self.origin; + e_linker.angles = self.angles; + self linkto( e_linker ); + + self waittill( "death" ); + + e_linker delete(); +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_staff_lightning.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_staff_lightning.gsc new file mode 100644 index 0000000..2f31af5 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_staff_lightning.gsc @@ -0,0 +1,421 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_score; +#include maps\mp\animscripts\shared; + +init() +{ + level._effect["lightning_miss"] = loadfx( "weapon/zmb_staff/fx_zmb_staff_elec_ug_impact_miss" ); + level._effect["lightning_arc"] = loadfx( "weapon/zmb_staff/fx_zmb_staff_elec_trail_bolt_cheap" ); + level._effect["lightning_impact"] = loadfx( "weapon/zmb_staff/fx_zmb_staff_elec_ug_impact_hit_torso" ); + level._effect["tesla_shock_eyes"] = loadfx( "maps/zombie/fx_zombie_tesla_shock_eyes" ); + registerclientfield( "actor", "lightning_impact_fx", 14000, 1, "int" ); + registerclientfield( "scriptmover", "lightning_miss_fx", 14000, 1, "int" ); + registerclientfield( "actor", "lightning_arc_fx", 14000, 1, "int" ); + set_zombie_var( "tesla_head_gib_chance", 50 ); + onplayerconnect_callback( ::onplayerconnect ); + maps\mp\zombies\_zm_spawner::register_zombie_damage_callback( ::staff_lightning_zombie_damage_response ); + maps\mp\zombies\_zm_spawner::register_zombie_death_event_callback( ::staff_lightning_death_event ); +} + +precache() +{ + precacheitem( "staff_lightning_melee_zm" ); +} + +onplayerconnect() +{ + self thread onplayerspawned(); +} + +onplayerspawned() +{ + self endon( "disconnect" ); + self thread watch_staff_lightning_fired(); + self thread watch_staff_usage(); +} + +watch_staff_lightning_fired() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "missile_fire", e_projectile, str_weapon ); + + if ( str_weapon == "staff_lightning_upgraded2_zm" || str_weapon == "staff_lightning_upgraded3_zm" ) + { + fire_angles = vectortoangles( self getweaponforwarddir() ); + fire_origin = self getweaponmuzzlepoint(); + self thread staff_lightning_position_source( fire_origin, fire_angles, str_weapon ); + } + } +} + +lightning_ball_wait( n_lifetime_after_move ) +{ + level endon( "lightning_ball_created" ); + + self waittill( "movedone" ); + + wait( n_lifetime_after_move ); + return 1; +} + +staff_lightning_position_source( v_detonate, v_angles, str_weapon ) +{ + self endon( "disconnect" ); + level notify( "lightning_ball_created" ); + + if ( !isdefined( v_angles ) ) + v_angles = ( 0, 0, 0 ); + + e_ball_fx = spawn( "script_model", v_detonate + anglestoforward( v_angles ) * 100.0 ); + e_ball_fx.angles = v_angles; + e_ball_fx.str_weapon = str_weapon; + e_ball_fx setmodel( "tag_origin" ); + e_ball_fx.n_range = get_lightning_blast_range( self.chargeshotlevel ); + e_ball_fx.n_damage_per_sec = get_lightning_ball_damage_per_sec( self.chargeshotlevel ); + e_ball_fx setclientfield( "lightning_miss_fx", 1 ); + n_shot_range = staff_lightning_get_shot_range( self.chargeshotlevel ); + v_end = v_detonate + anglestoforward( v_angles ) * n_shot_range; + trace = bullettrace( v_detonate, v_end, 0, undefined ); + + if ( trace["fraction"] != 1 ) + v_end = trace["position"]; + + staff_lightning_ball_speed = n_shot_range / 8.0; + n_dist = distance( e_ball_fx.origin, v_end ); + n_max_movetime_s = n_shot_range / staff_lightning_ball_speed; + n_movetime_s = n_dist / staff_lightning_ball_speed; + n_leftover_time = n_max_movetime_s - n_movetime_s; + e_ball_fx thread staff_lightning_ball_kill_zombies( self ); +/# + e_ball_fx thread puzzle_debug_position( "X", ( 175, 0, 255 ) ); +#/ + e_ball_fx moveto( v_end, n_movetime_s ); + finished_playing = e_ball_fx lightning_ball_wait( n_leftover_time ); + e_ball_fx notify( "stop_killing" ); + e_ball_fx notify( "stop_debug_position" ); + + if ( is_true( finished_playing ) ) + wait 3.0; + + if ( isdefined( e_ball_fx ) ) + e_ball_fx delete(); +} + +staff_lightning_ball_kill_zombies( e_attacker ) +{ + self endon( "death" ); + self endon( "stop_killing" ); + + while ( true ) + { + a_zombies = staff_lightning_get_valid_targets( e_attacker, self.origin ); + + if ( isdefined( a_zombies ) ) + { + foreach ( zombie in a_zombies ) + { + if ( staff_lightning_is_target_valid( zombie ) ) + { + e_attacker thread staff_lightning_arc_fx( self, zombie ); + wait 0.2; + } + } + } + + wait 0.5; + } +} + +staff_lightning_get_valid_targets( player, v_source ) +{ + player endon( "disconnect" ); + a_enemies = []; + a_zombies = getaiarray( level.zombie_team ); + a_zombies = get_array_of_closest( v_source, a_zombies, undefined, undefined, self.n_range ); + + if ( isdefined( a_zombies ) ) + { + foreach ( ai_zombie in a_zombies ) + { + if ( staff_lightning_is_target_valid( ai_zombie ) ) + a_enemies[a_enemies.size] = ai_zombie; + } + } + + return a_enemies; +} + +staff_lightning_get_shot_range( n_charge ) +{ + switch ( n_charge ) + { + case 3: + return 1200; + default: + return 800; + } +} + +get_lightning_blast_range( n_charge ) +{ + switch ( n_charge ) + { + case 1: + n_range = 200; + break; + case 2: + n_range = 150; + break; + case 3: + default: + n_range = 250; + break; + } + + return n_range; +} + +get_lightning_ball_damage_per_sec( n_charge ) +{ + if ( !isdefined( n_charge ) ) + return 2500; + + switch ( n_charge ) + { + case 3: + return 3500; + default: + return 2500; + } +} + +staff_lightning_is_target_valid( ai_zombie ) +{ + if ( !isdefined( ai_zombie ) ) + return false; + + if ( is_true( ai_zombie.is_being_zapped ) ) + return false; + + if ( is_true( ai_zombie.is_mechz ) ) + return false; + + return true; +} + +staff_lightning_ball_damage_over_time( e_source, e_target, e_attacker ) +{ + e_attacker endon( "disconnect" ); + e_target setclientfield( "lightning_impact_fx", 1 ); + e_target thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "electrocute", e_target.animname ); + n_range_sq = e_source.n_range * e_source.n_range; + e_target.is_being_zapped = 1; + e_target setclientfield( "lightning_arc_fx", 1 ); + wait 0.5; + + if ( isdefined( e_source ) ) + { + if ( !isdefined( e_source.n_damage_per_sec ) ) + e_source.n_damage_per_sec = get_lightning_ball_damage_per_sec( e_attacker.chargeshotlevel ); + + n_damage_per_pulse = e_source.n_damage_per_sec * 1.0; + } + + while ( isdefined( e_source ) && isalive( e_target ) ) + { + e_target thread stun_zombie(); + wait 1.0; + + if ( !isdefined( e_source ) || !isalive( e_target ) ) + break; + + n_dist_sq = distancesquared( e_source.origin, e_target.origin ); + + if ( n_dist_sq > n_range_sq ) + break; + + if ( isalive( e_target ) && isdefined( e_source ) ) + { + instakill_on = e_attacker maps\mp\zombies\_zm_powerups::is_insta_kill_active(); + + if ( n_damage_per_pulse < e_target.health && !instakill_on ) + e_target do_damage_network_safe( e_attacker, n_damage_per_pulse, e_source.str_weapon, "MOD_RIFLE_BULLET" ); + else + { + e_target thread zombie_shock_eyes(); + e_target thread staff_lightning_kill_zombie( e_attacker, e_source.str_weapon ); + break; + } + } + } + + if ( isdefined( e_target ) ) + { + e_target.is_being_zapped = 0; + e_target setclientfield( "lightning_arc_fx", 0 ); + } +} + +staff_lightning_arc_fx( e_source, ai_zombie ) +{ + self endon( "disconnect" ); + + if ( !isdefined( ai_zombie ) ) + return; + + if ( !bullet_trace_throttled( e_source.origin, ai_zombie.origin + vectorscale( ( 0, 0, 1 ), 20.0 ), ai_zombie ) ) + return; + + if ( isdefined( e_source ) && isdefined( ai_zombie ) && isalive( ai_zombie ) ) + level thread staff_lightning_ball_damage_over_time( e_source, ai_zombie, self ); +} + +staff_lightning_kill_zombie( player, str_weapon ) +{ + player endon( "disconnect" ); + + if ( !isalive( self ) ) + return; + + if ( is_true( self.has_legs ) ) + { + if ( !self hasanimstatefromasd( "zm_death_tesla" ) ) + return; + + self.deathanim = "zm_death_tesla"; + } + else + { + if ( !self hasanimstatefromasd( "zm_death_tesla_crawl" ) ) + return; + + self.deathanim = "zm_death_tesla_crawl"; + } + + if ( is_true( self.is_traversing ) ) + self.deathanim = undefined; + + self do_damage_network_safe( player, self.health, str_weapon, "MOD_RIFLE_BULLET" ); + player maps\mp\zombies\_zm_score::player_add_points( "death", "", "" ); +} + +staff_lightning_death_fx() +{ + if ( isdefined( self ) ) + { + self setclientfield( "lightning_impact_fx", 1 ); + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "electrocute", self.animname ); + self thread zombie_shock_eyes(); + } +} + +zombie_shock_eyes_network_safe( fx, entity, tag ) +{ + if ( network_entity_valid( entity ) ) + { + if ( !is_true( self.head_gibbed ) ) + playfxontag( fx, entity, tag ); + } +} + +zombie_shock_eyes() +{ + if ( isdefined( self.head_gibbed ) && self.head_gibbed ) + return; + + maps\mp\zombies\_zm_net::network_safe_init( "shock_eyes", 2 ); + maps\mp\zombies\_zm_net::network_choke_action( "shock_eyes", ::zombie_shock_eyes_network_safe, level._effect["tesla_shock_eyes"], self, "J_Eyeball_LE" ); +} + +staff_lightning_zombie_damage_response( mod, hit_location, hit_origin, player, amount ) +{ + if ( self is_staff_lightning_damage() && self.damagemod != "MOD_RIFLE_BULLET" ) + self thread stun_zombie(); + + return 0; +} + +is_staff_lightning_damage() +{ + return isdefined( self.damageweapon ) && ( self.damageweapon == "staff_lightning_zm" || self.damageweapon == "staff_lightning_upgraded_zm" ) && !is_true( self.set_beacon_damage ); +} + +staff_lightning_death_event() +{ + if ( is_staff_lightning_damage() && self.damagemod != "MOD_MELEE" ) + { + if ( is_true( self.is_mechz ) ) + return; + + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "death", self.animname ); + self thread zombie_eye_glow_stop(); + + if ( is_true( self.has_legs ) ) + { + if ( !self hasanimstatefromasd( "zm_death_tesla" ) ) + return; + + self.deathanim = "zm_death_tesla"; + } + else + { + if ( !self hasanimstatefromasd( "zm_death_tesla_crawl" ) ) + return; + + self.deathanim = "zm_death_tesla_crawl"; + } + + if ( is_true( self.is_traversing ) ) + self.deathanim = undefined; + + tag = "J_SpineUpper"; + self setclientfield( "lightning_impact_fx", 1 ); + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "electrocute", self.animname ); + self thread zombie_shock_eyes(); + + if ( isdefined( self.deathanim ) ) + self waittillmatch( "death_anim", "die" ); + + self do_damage_network_safe( self.attacker, self.health, self.damageweapon, "MOD_RIFLE_BULLET" ); + } +} + +stun_zombie() +{ + self endon( "death" ); + + if ( is_true( self.is_mechz ) ) + return; + + if ( is_true( self.is_electrocuted ) ) + return; + + if ( !isdefined( self.ai_state ) || self.ai_state != "find_flesh" ) + return; + + self.forcemovementscriptstate = 1; + self.ignoreall = 1; + self.is_electrocuted = 1; + tag = "J_SpineUpper"; + network_safe_play_fx_on_tag( "lightning_impact", 2, level._effect["lightning_impact"], self, tag ); + + if ( is_true( self.has_legs ) ) + self animscripted( self.origin, self.angles, "zm_electric_stun" ); + + self maps\mp\animscripts\shared::donotetracks( "stunned" ); + self.forcemovementscriptstate = 0; + self.ignoreall = 0; + self.is_electrocuted = 0; +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_staff_revive.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_staff_revive.gsc new file mode 100644 index 0000000..9ea6858 --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_staff_revive.gsc @@ -0,0 +1,74 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zombies\_zm_laststand; + +init() +{ + onplayerconnect_callback( ::onplayerconnect ); +} + +onplayerconnect() +{ + self thread onplayerspawned(); +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "spawned_player" ); + + self thread watch_staff_revive_fired(); + } +} + +watch_staff_revive_fired() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "missile_fire", e_projectile, str_weapon ); + + if ( !( str_weapon == "staff_revive_zm" ) ) + continue; + + self waittill( "projectile_impact", e_ent, v_explode_point, n_radius, str_name, n_impact ); + + self thread staff_revive_impact( v_explode_point ); + } +} + +staff_revive_impact( v_explode_point ) +{ + self endon( "disconnect" ); + e_closest_player = undefined; + n_closest_dist_sq = 1024; + playsoundatposition( "wpn_revivestaff_proj_impact", v_explode_point ); + a_e_players = getplayers(); + + foreach ( e_player in a_e_players ) + { + if ( e_player == self || !e_player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + continue; + + n_dist_sq = distancesquared( v_explode_point, e_player.origin ); + + if ( n_dist_sq < n_closest_dist_sq ) + e_closest_player = e_player; + } + + if ( isdefined( e_closest_player ) ) + { + e_closest_player notify( "remote_revive", self ); + e_closest_player playsoundtoplayer( "wpn_revivestaff_revive_plr", e_player ); + self notify( "revived_player_with_upgraded_staff" ); + } +} diff --git a/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_staff_water.gsc b/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_staff_water.gsc new file mode 100644 index 0000000..6c549fc --- /dev/null +++ b/ZM/Maps/Origins/maps/mp/zombies/_zm_weap_staff_water.gsc @@ -0,0 +1,489 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zm_tomb_utility; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_powerups; + +init() +{ + level._effect["staff_water_blizzard"] = loadfx( "weapon/zmb_staff/fx_zmb_staff_ice_ug_impact_hit" ); + level._effect["staff_water_ice_shard"] = loadfx( "weapon/zmb_staff/fx_zmb_staff_ice_trail_bolt" ); + level._effect["staff_water_shatter"] = loadfx( "weapon/zmb_staff/fx_zmb_staff_ice_exp" ); + registerclientfield( "scriptmover", "staff_blizzard_fx", 14000, 1, "int" ); + registerclientfield( "actor", "anim_rate", 14000, 2, "float" ); + registerclientfield( "actor", "attach_bullet_model", 14000, 1, "int" ); + onplayerconnect_callback( ::onplayerconnect ); + precacheitem( "staff_water_fake_dart_zm" ); + precacheitem( "staff_water_dart_zm" ); + flag_init( "blizzard_active" ); + init_tag_array(); + level thread water_dart_cleanup(); + maps\mp\zombies\_zm_spawner::register_zombie_death_event_callback( ::staff_water_death_event ); + maps\mp\zombies\_zm_spawner::add_cusom_zombie_spawn_logic( ::staff_water_on_zombie_spawned ); +} + +precache() +{ + precacheitem( "staff_water_melee_zm" ); +} + +init_tag_array() +{ + level.zombie_water_icicle_tag = []; + level.zombie_water_icicle_tag[0] = "j_hip_le"; + level.zombie_water_icicle_tag[1] = "j_hip_ri"; + level.zombie_water_icicle_tag[2] = "j_spine4"; + level.zombie_water_icicle_tag[3] = "j_elbow_le"; + level.zombie_water_icicle_tag[4] = "j_elbow_ri"; + level.zombie_water_icicle_tag[5] = "j_clavicle_le"; + level.zombie_water_icicle_tag[6] = "j_clavicle_ri"; +} + +water_dart_cleanup() +{ + while ( true ) + { + a_grenades = getentarray( "grenade", "classname" ); + + foreach ( e_grenade in a_grenades ) + { + if ( isdefined( e_grenade.model ) && e_grenade.model == "p6_zm_tm_staff_projectile_ice" ) + { + time = gettime(); + + if ( time - e_grenade.birthtime >= 1000 ) + e_grenade delete(); + } + } + + wait 0.1; + } +} + +onplayerconnect() +{ + self thread onplayerspawned(); +} + +onplayerspawned() +{ + self endon( "disconnect" ); + self thread watch_staff_water_fired(); + self thread watch_staff_water_impact(); + self thread watch_staff_usage(); +} + +watch_staff_water_fired() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "missile_fire", e_projectile, str_weapon ); + + if ( str_weapon == "staff_water_zm" || str_weapon == "staff_water_upgraded_zm" ) + { + wait_network_frame(); + _icicle_locate_target( str_weapon ); + wait_network_frame(); + _icicle_locate_target( str_weapon ); + wait_network_frame(); + _icicle_locate_target( str_weapon ); + } + } +} + +watch_staff_water_impact() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "projectile_impact", str_weapon, v_explode_point, n_radius, str_name, n_impact ); + + if ( str_weapon == "staff_water_upgraded2_zm" || str_weapon == "staff_water_upgraded3_zm" ) + { + n_lifetime = 6.0; + + if ( str_weapon == "staff_water_upgraded3_zm" ) + n_lifetime = 9.0; + + self thread staff_water_position_source( v_explode_point, n_lifetime, str_weapon ); + } + } +} + +staff_water_kill_zombie( player, str_weapon ) +{ + self freeze_zombie(); + self do_damage_network_safe( player, self.health, str_weapon, "MOD_RIFLE_BULLET" ); + + if ( isdefined( self.deathanim ) ) + self waittillmatch( "death_anim", "shatter" ); + + if ( isdefined( self ) ) + self thread frozen_zombie_shatter(); + + player maps\mp\zombies\_zm_score::player_add_points( "death", "", "" ); +} + +freeze_zombie() +{ + if ( is_true( self.is_mechz ) ) + return; + + if ( !self.isdog ) + { + if ( self.has_legs ) + { + if ( !self hasanimstatefromasd( "zm_death_freeze" ) ) + return; + + self.deathanim = "zm_death_freeze"; + } + else + { + if ( !self hasanimstatefromasd( "zm_death_freeze_crawl" ) ) + return; + + self.deathanim = "zm_death_freeze_crawl"; + } + } + else + self.a.nodeath = undefined; + + if ( is_true( self.is_traversing ) ) + self.deathanim = undefined; +} + +_network_safe_play_fx( fx, v_origin ) +{ + playfx( fx, v_origin, ( 0, 0, 1 ), ( 1, 0, 0 ) ); +} + +network_safe_play_fx( id, max, fx, v_origin ) +{ + network_safe_init( id, max ); + network_choke_action( id, ::_network_safe_play_fx, fx, v_origin ); +} + +frozen_zombie_shatter() +{ + if ( is_true( self.is_mechz ) ) + return; + + if ( isdefined( self ) ) + { + if ( is_mature() ) + { + v_fx = self gettagorigin( "J_SpineLower" ); + level thread network_safe_play_fx( "frozen_shatter", 2, level._effect["staff_water_shatter"], v_fx ); + self thread frozen_zombie_gib( "normal" ); + } + else + self startragdoll(); + } +} + +frozen_zombie_gib( gib_type ) +{ + gibarray = []; + gibarray[gibarray.size] = level._zombie_gib_piece_index_all; + self gib( gib_type, gibarray ); + self ghost(); + wait 0.4; + + if ( isdefined( self ) ) + self self_delete(); +} + +staff_water_position_source( v_detonate, n_lifetime_sec, str_weapon ) +{ + self endon( "disconnect" ); + + if ( isdefined( v_detonate ) ) + { + level notify( "blizzard_shot" ); + e_fx = spawn( "script_model", v_detonate + vectorscale( ( 0, 0, 1 ), 33.0 ) ); + e_fx setmodel( "tag_origin" ); + e_fx setclientfield( "staff_blizzard_fx", 1 ); + e_fx thread puzzle_debug_position( "X", ( 0, 64, 255 ) ); + wait 1; + flag_set( "blizzard_active" ); + e_fx thread ice_staff_blizzard_do_kills( self, str_weapon ); + e_fx thread whirlwind_rumble_nearby_players( "blizzard_active" ); + e_fx thread ice_staff_blizzard_timeout( n_lifetime_sec ); + e_fx thread ice_staff_blizzard_off(); + + e_fx waittill( "blizzard_off" ); + + flag_clear( "blizzard_active" ); + e_fx notify( "stop_debug_position" ); + wait 0.1; + e_fx setclientfield( "staff_blizzard_fx", 0 ); + wait 0.1; + e_fx delete(); + } +} + +ice_staff_blizzard_do_kills( player, str_weapon ) +{ + player endon( "disconnect" ); + self endon( "blizzard_off" ); + + while ( true ) + { + a_zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in a_zombies ) + { + if ( !is_true( zombie.is_on_ice ) ) + { + if ( distancesquared( self.origin, zombie.origin ) <= 30625 ) + { + if ( is_true( zombie.is_mechz ) ) + { + zombie thread ice_affect_mechz( player, 1 ); + continue; + } + + if ( isalive( zombie ) ) + zombie thread ice_affect_zombie( str_weapon, player, 1 ); + } + } + } + + wait 0.1; + } +} + +ice_staff_blizzard_timeout( n_time ) +{ + self endon( "death" ); + self endon( "blizzard_off" ); + wait( n_time ); + self notify( "blizzard_off" ); +} + +ice_staff_blizzard_off() +{ + self endon( "death" ); + self endon( "blizzard_off" ); + + level waittill( "blizzard_shot" ); + + self notify( "blizzard_off" ); +} + +get_ice_blast_range( n_charge ) +{ + switch ( n_charge ) + { + case 1: + case 0: + n_range = 250000; + break; + case 2: + n_range = 640000; + break; + case 3: + n_range = 1000000; + break; + } + + return n_range; +} + +staff_water_zombie_range( v_source, n_range ) +{ + a_enemies = []; + a_zombies = getaiarray( level.zombie_team ); + a_zombies = get_array_of_closest( v_source, a_zombies ); + + if ( isdefined( a_zombies ) ) + { + for ( i = 0; i < a_zombies.size; i++ ) + { + if ( !isdefined( a_zombies[i] ) ) + continue; + + v_zombie_pos = a_zombies[i] gettagorigin( "j_head" ); + + if ( distancesquared( v_source, v_zombie_pos ) > n_range ) + continue; + + if ( !bullet_trace_throttled( v_source, v_zombie_pos, undefined ) ) + continue; + + if ( isdefined( a_zombies[i] ) && isalive( a_zombies[i] ) ) + a_enemies[a_enemies.size] = a_zombies[i]; + } + } + + return a_enemies; +} + +is_staff_water_damage() +{ + return isdefined( self.damageweapon ) && ( self.damageweapon == "staff_water_zm" || self.damageweapon == "staff_water_upgraded_zm" || self.damageweapon == "staff_water_fake_dart_zm" ) && !is_true( self.set_beacon_damage ); +} + +ice_affect_mechz( e_player, is_upgraded ) +{ + if ( is_true( self.is_on_ice ) ) + return; + + self.is_on_ice = 1; + + if ( is_upgraded ) + self do_damage_network_safe( e_player, 3300, "staff_water_upgraded_zm", "MOD_RIFLE_BULLET" ); + else + self do_damage_network_safe( e_player, 2050, "staff_water_zm", "MOD_RIFLE_BULLET" ); + + wait 1.0; + self.is_on_ice = 0; +} + +ice_affect_zombie( str_weapon = "staff_water_zm", e_player, always_kill = 0, n_mod = 1 ) +{ + self endon( "death" ); + instakill_on = e_player maps\mp\zombies\_zm_powerups::is_insta_kill_active(); + + if ( str_weapon == "staff_water_zm" ) + n_damage = 2050; + else if ( str_weapon == "staff_water_upgraded_zm" || str_weapon == "staff_water_upgraded2_zm" || str_weapon == "staff_water_upgraded3_zm" ) + n_damage = 3300; + else if ( str_weapon == "one_inch_punch_ice_zm" ) + n_damage = 11275; + + if ( is_true( self.is_on_ice ) ) + return; + + self.is_on_ice = 1; + self setclientfield( "attach_bullet_model", 1 ); + n_speed = 0.3; + self set_anim_rate( 0.3 ); + + if ( instakill_on || always_kill ) + wait( randomfloatrange( 0.5, 0.7 ) ); + else + wait( randomfloatrange( 1.8, 2.3 ) ); + + if ( self.health < n_damage || instakill_on || always_kill ) + { + self set_anim_rate( 1.0 ); + wait_network_frame(); + + if ( str_weapon != "one_inch_punch_ice_zm" ) + staff_water_kill_zombie( e_player, str_weapon ); + } + else + { + self do_damage_network_safe( e_player, n_damage, str_weapon, "MOD_RIFLE_BULLET" ); + self.deathanim = undefined; + self setclientfield( "attach_bullet_model", 0 ); + wait 0.5; + self set_anim_rate( 1.0 ); + self.is_on_ice = 0; + } +} + +set_anim_rate( n_speed ) +{ + self setclientfield( "anim_rate", n_speed ); + n_rate = self getclientfield( "anim_rate" ); + self setentityanimrate( n_rate ); + + if ( n_speed != 1.0 ) + self.preserve_asd_substates = 1; + + wait_network_frame(); + + if ( !is_true( self.is_traversing ) ) + { + self.needs_run_update = 1; + self notify( "needs_run_update" ); + } + + wait_network_frame(); + + if ( n_speed == 1.0 ) + self.preserve_asd_substates = 0; +} + +staff_water_on_zombie_spawned() +{ + self setclientfield( "anim_rate", 1 ); + n_rate = self getclientfield( "anim_rate" ); + self setentityanimrate( n_rate ); +} + +staff_water_death_event() +{ + if ( is_staff_water_damage() && self.damagemod != "MOD_MELEE" ) + { + self.no_gib = 1; + self.nodeathragdoll = 1; + self freeze_zombie(); + + if ( isdefined( self.deathanim ) ) + self waittillmatch( "death_anim", "shatter" ); + + self thread frozen_zombie_shatter(); + } +} + +_icicle_locate_target( str_weapon ) +{ + is_upgraded = str_weapon == "staff_water_upgraded_zm"; + fire_angles = self getplayerangles(); + fire_origin = self getplayercamerapos(); + a_targets = getaiarray( "axis" ); + a_targets = get_array_of_closest( self.origin, a_targets, undefined, undefined, 600 ); + + foreach ( target in a_targets ) + { + if ( is_true( target.is_on_ice ) ) + continue; + + if ( within_fov( fire_origin, fire_angles, target gettagorigin( "j_spine4" ), cos( 25 ) ) ) + { + if ( isai( target ) ) + { + a_tags = []; + a_tags[0] = "j_hip_le"; + a_tags[1] = "j_hip_ri"; + a_tags[2] = "j_spine4"; + a_tags[3] = "j_elbow_le"; + a_tags[4] = "j_elbow_ri"; + a_tags[5] = "j_clavicle_le"; + a_tags[6] = "j_clavicle_ri"; + str_tag = a_tags[randomint( a_tags.size )]; + b_trace_pass = bullet_trace_throttled( fire_origin, target gettagorigin( str_tag ), target ); + + if ( b_trace_pass && isdefined( target ) && isalive( target ) ) + { + if ( is_true( target.is_mechz ) ) + target thread ice_affect_mechz( self, is_upgraded ); + else + target thread ice_affect_zombie( str_weapon, self ); + + return; + } + } + } + } +} + +_icicle_get_spread( n_spread ) +{ + n_x = randomintrange( n_spread * -1, n_spread ); + n_y = randomintrange( n_spread * -1, n_spread ); + n_z = randomintrange( n_spread * -1, n_spread ); + return ( n_x, n_y, n_z ); +} diff --git a/ZM/Maps/Origins/xmodelalias/c_zom_tomb_crusader_head_als.gsc b/ZM/Maps/Origins/xmodelalias/c_zom_tomb_crusader_head_als.gsc new file mode 100644 index 0000000..d851256 --- /dev/null +++ b/ZM/Maps/Origins/xmodelalias/c_zom_tomb_crusader_head_als.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + a[0] = "c_zom_tomb_crusader_head1"; + a[1] = "c_zom_tomb_crusader_head2"; + return a; +} diff --git a/ZM/Maps/Origins/xmodelalias/c_zom_tomb_german_head_als.gsc b/ZM/Maps/Origins/xmodelalias/c_zom_tomb_german_head_als.gsc new file mode 100644 index 0000000..2927b0d --- /dev/null +++ b/ZM/Maps/Origins/xmodelalias/c_zom_tomb_german_head_als.gsc @@ -0,0 +1,10 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + a[0] = "c_zom_tomb_german_head1"; + a[1] = "c_zom_tomb_german_head2"; + a[2] = "c_zom_tomb_german_head3"; + return a; +} diff --git a/ZM/Maps/Tranzit Diner/aitype/zm_ally_cdc.gsc b/ZM/Maps/Tranzit Diner/aitype/zm_ally_cdc.gsc new file mode 100644 index 0000000..cb4ebc8 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/aitype/zm_ally_cdc.gsc @@ -0,0 +1,56 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\c_zom_ally_cdc; + +#using_animtree("zm_ally"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %pb_laststand_idle; + dummy_anim_ref = %pb_stand_alert; + dummy_anim_ref = %pb_crouch_alert; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_ally_basic.asd"; + self.animtree = "zm_ally.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "allies"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\c_zom_ally_cdc::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "allies" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_ally_basic" ); + character\c_zom_ally_cdc::precache(); +} diff --git a/ZM/Maps/Tranzit Diner/character/c_transit_player_engineer.gsc b/ZM/Maps/Tranzit Diner/character/c_transit_player_engineer.gsc new file mode 100644 index 0000000..51d3866 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/character/c_transit_player_engineer.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_player_engineer_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_player_engineer_fb" ); +} diff --git a/ZM/Maps/Tranzit Diner/character/c_transit_player_farmgirl.gsc b/ZM/Maps/Tranzit Diner/character/c_transit_player_farmgirl.gsc new file mode 100644 index 0000000..b9268ab --- /dev/null +++ b/ZM/Maps/Tranzit Diner/character/c_transit_player_farmgirl.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_player_farmgirl_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_player_farmgirl_fb" ); +} diff --git a/ZM/Maps/Tranzit Diner/character/c_transit_player_oldman.gsc b/ZM/Maps/Tranzit Diner/character/c_transit_player_oldman.gsc new file mode 100644 index 0000000..97f93a1 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/character/c_transit_player_oldman.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_player_oldman_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_player_oldman_fb" ); +} diff --git a/ZM/Maps/Tranzit Diner/character/c_transit_player_reporter.gsc b/ZM/Maps/Tranzit Diner/character/c_transit_player_reporter.gsc new file mode 100644 index 0000000..1645893 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/character/c_transit_player_reporter.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_player_reporter_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_player_reporter_fb" ); +} diff --git a/ZM/Maps/Tranzit Diner/character/c_zom_ally_cdc.gsc b/ZM/Maps/Tranzit Diner/character/c_zom_ally_cdc.gsc new file mode 100644 index 0000000..f9073da --- /dev/null +++ b/ZM/Maps/Tranzit Diner/character/c_zom_ally_cdc.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_player_cdc_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_player_cdc_fb" ); +} diff --git a/ZM/Maps/Tranzit Diner/codescripts/character_mp.gsc b/ZM/Maps/Tranzit Diner/codescripts/character_mp.gsc new file mode 100644 index 0000000..6086847 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/codescripts/character_mp.gsc @@ -0,0 +1,19 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; + +setmodelfromarray( a ) +{ + self setmodel( a[randomint( a.size )] ); +} + +precachemodelarray( a ) +{ + for ( i = 0; i < a.size; i++ ) + precachemodel( a[i] ); +} + +attachfromarray( a ) +{ + self attach( codescripts\character::randomelement( a ), "", 1 ); +} diff --git a/ZM/Maps/Tranzit Diner/common_scripts/utility.gsc b/ZM/Maps/Tranzit Diner/common_scripts/utility.gsc new file mode 100644 index 0000000..c1f3762 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/common_scripts/utility.gsc @@ -0,0 +1,1640 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +init_session_mode_flags() +{ + level.gamemode_public_match = 0; + level.gamemode_private_match = 1; + level.gamemode_local_splitscreen = 2; + level.gamemode_wager_match = 3; + level.gamemode_theater = 5; + level.gamemode_league_match = 6; + level.gamemode_rts = 7; + level.language = getdvar( "language" ); +} + +empty( a, b, c, d, e ) +{ + +} + +add_to_array( array, item, allow_dupes ) +{ + if ( !isdefined( item ) ) + return array; + + if ( !isdefined( allow_dupes ) ) + allow_dupes = 1; + + if ( !isdefined( array ) ) + array[0] = item; + else if ( allow_dupes || !isinarray( array, item ) ) + array[array.size] = item; + + return array; +} + +array_copy( array ) +{ + a_copy = []; + + foreach ( elem in array ) + a_copy[a_copy.size] = elem; + + return a_copy; +} + +array_delete( array, is_struct ) +{ + foreach ( ent in array ) + { + if ( isdefined( is_struct ) && is_struct ) + { + ent structdelete(); + ent = undefined; + continue; + } + + if ( isdefined( ent ) ) + ent delete(); + } +} + +array_randomize( array ) +{ + for ( i = 0; i < array.size; i++ ) + { + j = randomint( array.size ); + temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + + return array; +} + +array_reverse( array ) +{ + array2 = []; + + for ( i = array.size - 1; i >= 0; i-- ) + array2[array2.size] = array[i]; + + return array2; +} + +array_exclude( array, arrayexclude ) +{ + newarray = array; + + if ( isarray( arrayexclude ) ) + { + for ( i = 0; i < arrayexclude.size; i++ ) + arrayremovevalue( newarray, arrayexclude[i] ); + } + else + arrayremovevalue( newarray, arrayexclude ); + + return newarray; +} + +array_notify( ents, notifier ) +{ + for ( i = 0; i < ents.size; i++ ) + ents[i] notify( notifier ); +} + +array_wait( array, msg, timeout ) +{ + keys = getarraykeys( array ); + structs = []; + + for ( i = 0; i < keys.size; i++ ) + { + key = keys[i]; + structs[key] = spawnstruct(); + structs[key]._array_wait = 1; + structs[key] thread array_waitlogic1( array[key], msg, timeout ); + } + + for ( i = 0; i < keys.size; i++ ) + { + key = keys[i]; + + if ( isdefined( array[key] ) && structs[key]._array_wait ) + structs[key] waittill( "_array_wait" ); + } +} + +array_wait_any( array, msg, timeout ) +{ + if ( array.size == 0 ) + return undefined; + + keys = getarraykeys( array ); + structs = []; + internal_msg = msg + "array_wait"; + + for ( i = 0; i < keys.size; i++ ) + { + key = keys[i]; + structs[key] = spawnstruct(); + structs[key]._array_wait = 1; + structs[key] thread array_waitlogic3( array[key], msg, internal_msg, timeout ); + } + + level waittill( internal_msg, ent ); + + return ent; +} + +array_waitlogic1( ent, msg, timeout ) +{ + self array_waitlogic2( ent, msg, timeout ); + self._array_wait = 0; + self notify( "_array_wait" ); +} + +array_waitlogic2( ent, msg, timeout ) +{ + ent endon( msg ); + ent endon( "death" ); + + if ( isdefined( timeout ) ) + wait( timeout ); + else + ent waittill( msg ); +} + +array_waitlogic3( ent, msg, internal_msg, timeout ) +{ + if ( msg != "death" ) + ent endon( "death" ); + + level endon( internal_msg ); + self array_waitlogic2( ent, msg, timeout ); + level notify( internal_msg, ent ); +} + +array_check_for_dupes( array, single ) +{ + for ( i = 0; i < array.size; i++ ) + { + if ( array[i] == single ) + return false; + } + + return true; +} + +array_swap( array, index1, index2 ) +{ + assert( index1 < array.size, "index1 to swap out of range" ); + assert( index2 < array.size, "index2 to swap out of range" ); + temp = array[index1]; + array[index1] = array[index2]; + array[index2] = temp; + return array; +} + +array_average( array ) +{ + assert( isarray( array ) ); + assert( array.size > 0 ); + total = 0; + + for ( i = 0; i < array.size; i++ ) + total += array[i]; + + return total / array.size; +} + +array_std_deviation( array, mean ) +{ + assert( isarray( array ) ); + assert( array.size > 0 ); + tmp = []; + + for ( i = 0; i < array.size; i++ ) + tmp[i] = ( array[i] - mean ) * ( array[i] - mean ); + + total = 0; + + for ( i = 0; i < tmp.size; i++ ) + total += tmp[i]; + + return sqrt( total / array.size ); +} + +random_normal_distribution( mean, std_deviation, lower_bound, upper_bound ) +{ + x1 = 0; + x2 = 0; + w = 1; + y1 = 0; + + while ( w >= 1 ) + { + x1 = 2 * randomfloatrange( 0, 1 ) - 1; + x2 = 2 * randomfloatrange( 0, 1 ) - 1; + w = x1 * x1 + x2 * x2; + } + + w = sqrt( -2.0 * log( w ) / w ); + y1 = x1 * w; + number = mean + y1 * std_deviation; + + if ( isdefined( lower_bound ) && number < lower_bound ) + number = lower_bound; + + if ( isdefined( upper_bound ) && number > upper_bound ) + number = upper_bound; + + return number; +} + +random( array ) +{ + keys = getarraykeys( array ); + return array[keys[randomint( keys.size )]]; +} + +get_players( str_team ) +{ + if ( isdefined( str_team ) ) + return getplayers( str_team ); + else + return getplayers(); +} + +is_prefix( msg, prefix ) +{ + if ( prefix.size > msg.size ) + return false; + + for ( i = 0; i < prefix.size; i++ ) + { + if ( msg[i] != prefix[i] ) + return false; + } + + return true; +} + +is_suffix( msg, suffix ) +{ + if ( suffix.size > msg.size ) + return false; + + for ( i = 0; i < suffix.size; i++ ) + { + if ( msg[msg.size - 1 - i] != suffix[suffix.size - 1 - i] ) + return false; + } + + return true; +} + +vector_compare( vec1, vec2 ) +{ + return abs( vec1[0] - vec2[0] ) < 0.001 && abs( vec1[1] - vec2[1] ) < 0.001 && abs( vec1[2] - vec2[2] ) < 0.001; +} + +draw_debug_line( start, end, timer ) +{ +/# + for ( i = 0; i < timer * 20; i++ ) + { + line( start, end, ( 1, 1, 0.5 ) ); + wait 0.05; + } +#/ +} + +waittillend( msg ) +{ + self waittillmatch( msg, "end" ); +} + +random_vector( max_length ) +{ + return ( randomfloatrange( -1 * max_length, max_length ), randomfloatrange( -1 * max_length, max_length ), randomfloatrange( -1 * max_length, max_length ) ); +} + +angle_dif( oldangle, newangle ) +{ + outvalue = ( oldangle - newangle ) % 360; + + if ( outvalue < 0 ) + outvalue += 360; + + if ( outvalue > 180 ) + outvalue = ( outvalue - 360 ) * -1; + + return outvalue; +} + +sign( x ) +{ + if ( x >= 0 ) + return 1; + + return -1; +} + +track( spot_to_track ) +{ + if ( isdefined( self.current_target ) ) + { + if ( spot_to_track == self.current_target ) + return; + } + + self.current_target = spot_to_track; +} + +clear_exception( type ) +{ + assert( isdefined( self.exception[type] ) ); + self.exception[type] = anim.defaultexception; +} + +set_exception( type, func ) +{ + assert( isdefined( self.exception[type] ) ); + self.exception[type] = func; +} + +set_all_exceptions( exceptionfunc ) +{ + keys = getarraykeys( self.exception ); + + for ( i = 0; i < keys.size; i++ ) + self.exception[keys[i]] = exceptionfunc; +} + +cointoss() +{ + return randomint( 100 ) >= 50; +} + +waittill_string( msg, ent ) +{ + if ( msg != "death" ) + self endon( "death" ); + + ent endon( "die" ); + + self waittill( msg ); + + ent notify( "returned", msg ); +} + +waittill_multiple( string1, string2, string3, string4, string5 ) +{ + self endon( "death" ); + ent = spawnstruct(); + ent.threads = 0; + + if ( isdefined( string1 ) ) + { + self thread waittill_string( string1, ent ); + ent.threads++; + } + + if ( isdefined( string2 ) ) + { + self thread waittill_string( string2, ent ); + ent.threads++; + } + + if ( isdefined( string3 ) ) + { + self thread waittill_string( string3, ent ); + ent.threads++; + } + + if ( isdefined( string4 ) ) + { + self thread waittill_string( string4, ent ); + ent.threads++; + } + + if ( isdefined( string5 ) ) + { + self thread waittill_string( string5, ent ); + ent.threads++; + } + + while ( ent.threads ) + { + ent waittill( "returned" ); + + ent.threads--; + } + + ent notify( "die" ); +} + +waittill_multiple_ents( ent1, string1, ent2, string2, ent3, string3, ent4, string4 ) +{ + self endon( "death" ); + ent = spawnstruct(); + ent.threads = 0; + + if ( isdefined( ent1 ) ) + { + assert( isdefined( string1 ) ); + ent1 thread waittill_string( string1, ent ); + ent.threads++; + } + + if ( isdefined( ent2 ) ) + { + assert( isdefined( string2 ) ); + ent2 thread waittill_string( string2, ent ); + ent.threads++; + } + + if ( isdefined( ent3 ) ) + { + assert( isdefined( string3 ) ); + ent3 thread waittill_string( string3, ent ); + ent.threads++; + } + + if ( isdefined( ent4 ) ) + { + assert( isdefined( string4 ) ); + ent4 thread waittill_string( string4, ent ); + ent.threads++; + } + + while ( ent.threads ) + { + ent waittill( "returned" ); + + ent.threads--; + } + + ent notify( "die" ); +} + +waittill_any_return( string1, string2, string3, string4, string5, string6, string7 ) +{ + if ( ( !isdefined( string1 ) || string1 != "death" ) && ( !isdefined( string2 ) || string2 != "death" ) && ( !isdefined( string3 ) || string3 != "death" ) && ( !isdefined( string4 ) || string4 != "death" ) && ( !isdefined( string5 ) || string5 != "death" ) && ( !isdefined( string6 ) || string6 != "death" ) && ( !isdefined( string7 ) || string7 != "death" ) ) + self endon( "death" ); + + ent = spawnstruct(); + + if ( isdefined( string1 ) ) + self thread waittill_string( string1, ent ); + + if ( isdefined( string2 ) ) + self thread waittill_string( string2, ent ); + + if ( isdefined( string3 ) ) + self thread waittill_string( string3, ent ); + + if ( isdefined( string4 ) ) + self thread waittill_string( string4, ent ); + + if ( isdefined( string5 ) ) + self thread waittill_string( string5, ent ); + + if ( isdefined( string6 ) ) + self thread waittill_string( string6, ent ); + + if ( isdefined( string7 ) ) + self thread waittill_string( string7, ent ); + + ent waittill( "returned", msg ); + + ent notify( "die" ); + return msg; +} + +waittill_any_array_return( a_notifies ) +{ + if ( isinarray( a_notifies, "death" ) ) + self endon( "death" ); + + s_tracker = spawnstruct(); + + foreach ( str_notify in a_notifies ) + { + if ( isdefined( str_notify ) ) + self thread waittill_string( str_notify, s_tracker ); + } + + s_tracker waittill( "returned", msg ); + + s_tracker notify( "die" ); + return msg; +} + +waittill_any( str_notify1, str_notify2, str_notify3, str_notify4, str_notify5 ) +{ + assert( isdefined( str_notify1 ) ); + waittill_any_array( array( str_notify1, str_notify2, str_notify3, str_notify4, str_notify5 ) ); +} + +waittill_any_array( a_notifies ) +{ + assert( isdefined( a_notifies[0] ), "At least the first element has to be defined for waittill_any_array." ); + + for ( i = 1; i < a_notifies.size; i++ ) + { + if ( isdefined( a_notifies[i] ) ) + self endon( a_notifies[i] ); + } + + self waittill( a_notifies[0] ); +} + +waittill_any_timeout( n_timeout, string1, string2, string3, string4, string5 ) +{ + if ( ( !isdefined( string1 ) || string1 != "death" ) && ( !isdefined( string2 ) || string2 != "death" ) && ( !isdefined( string3 ) || string3 != "death" ) && ( !isdefined( string4 ) || string4 != "death" ) && ( !isdefined( string5 ) || string5 != "death" ) ) + self endon( "death" ); + + ent = spawnstruct(); + + if ( isdefined( string1 ) ) + self thread waittill_string( string1, ent ); + + if ( isdefined( string2 ) ) + self thread waittill_string( string2, ent ); + + if ( isdefined( string3 ) ) + self thread waittill_string( string3, ent ); + + if ( isdefined( string4 ) ) + self thread waittill_string( string4, ent ); + + if ( isdefined( string5 ) ) + self thread waittill_string( string5, ent ); + + ent thread _timeout( n_timeout ); + + ent waittill( "returned", msg ); + + ent notify( "die" ); + return msg; +} + +_timeout( delay ) +{ + self endon( "die" ); + wait( delay ); + self notify( "returned", "timeout" ); +} + +waittill_any_ents( ent1, string1, ent2, string2, ent3, string3, ent4, string4, ent5, string5, ent6, string6, ent7, string7 ) +{ + assert( isdefined( ent1 ) ); + assert( isdefined( string1 ) ); + + if ( isdefined( ent2 ) && isdefined( string2 ) ) + ent2 endon( string2 ); + + if ( isdefined( ent3 ) && isdefined( string3 ) ) + ent3 endon( string3 ); + + if ( isdefined( ent4 ) && isdefined( string4 ) ) + ent4 endon( string4 ); + + if ( isdefined( ent5 ) && isdefined( string5 ) ) + ent5 endon( string5 ); + + if ( isdefined( ent6 ) && isdefined( string6 ) ) + ent6 endon( string6 ); + + if ( isdefined( ent7 ) && isdefined( string7 ) ) + ent7 endon( string7 ); + + ent1 waittill( string1 ); +} + +waittill_any_ents_two( ent1, string1, ent2, string2 ) +{ + assert( isdefined( ent1 ) ); + assert( isdefined( string1 ) ); + + if ( isdefined( ent2 ) && isdefined( string2 ) ) + ent2 endon( string2 ); + + ent1 waittill( string1 ); +} + +waittill_flag_exists( msg ) +{ + while ( !flag_exists( msg ) ) + { + waittillframeend; + + if ( flag_exists( msg ) ) + break; + + wait 0.05; + } +} + +isflashed() +{ + if ( !isdefined( self.flashendtime ) ) + return 0; + + return gettime() < self.flashendtime; +} + +isstunned() +{ + if ( !isdefined( self.flashendtime ) ) + return 0; + + return gettime() < self.flashendtime; +} + +flag( flagname ) +{ + assert( isdefined( flagname ), "Tried to check flag but the flag was not defined." ); + assert( isdefined( level.flag[flagname] ), "Tried to check flag " + flagname + " but the flag was not initialized." ); + + if ( !level.flag[flagname] ) + return false; + + return true; +} + +flag_delete( flagname ) +{ + if ( isdefined( level.flag[flagname] ) ) + level.flag[flagname] = undefined; + else + { +/# + println( "flag_delete() called on flag that does not exist: " + flagname ); +#/ + } +} + +flag_init( flagname, val, b_is_trigger = 0 ) +{ + if ( !isdefined( level.flag ) ) + level.flag = []; + + if ( !isdefined( level.sp_stat_tracking_func ) ) + level.sp_stat_tracking_func = ::empty; + + if ( !isdefined( level.first_frame ) ) + assert( !isdefined( level.flag[flagname] ), "Attempt to reinitialize existing flag: " + flagname ); + + if ( isdefined( val ) && val ) + level.flag[flagname] = 1; + else + level.flag[flagname] = 0; + + if ( b_is_trigger ) + { + if ( !isdefined( level.trigger_flags ) ) + { + init_trigger_flags(); + level.trigger_flags[flagname] = []; + } + else if ( !isdefined( level.trigger_flags[flagname] ) ) + level.trigger_flags[flagname] = []; + } + + if ( is_suffix( flagname, "aa_" ) ) + thread [[ level.sp_stat_tracking_func ]]( flagname ); +} + +flag_set( flagname ) +{ + assert( isdefined( level.flag[flagname] ), "Attempt to set a flag before calling flag_init: " + flagname ); + level.flag[flagname] = 1; + level notify( flagname ); + set_trigger_flag_permissions( flagname ); +} + +flag_set_for_time( n_time, str_flag ) +{ + level notify( "set_flag_for_time:" + str_flag ); + flag_set( str_flag ); + level endon( "set_flag_for_time:" + str_flag ); + wait( n_time ); + flag_clear( str_flag ); +} + +flag_toggle( flagname ) +{ + if ( flag( flagname ) ) + flag_clear( flagname ); + else + flag_set( flagname ); +} + +flag_wait( flagname ) +{ + level waittill_flag_exists( flagname ); + + while ( !level.flag[flagname] ) + level waittill( flagname ); +} + +flag_wait_any( str_flag1, str_flag2, str_flag3, str_flag4, str_flag5 ) +{ + level flag_wait_any_array( array( str_flag1, str_flag2, str_flag3, str_flag4, str_flag5 ) ); +} + +flag_wait_any_array( a_flags ) +{ + while ( true ) + { + for ( i = 0; i < a_flags.size; i++ ) + { + if ( flag( a_flags[i] ) ) + return a_flags[i]; + } + + level waittill_any_array( a_flags ); + } +} + +flag_clear( flagname ) +{ + assert( isdefined( level.flag[flagname] ), "Attempt to set a flag before calling flag_init: " + flagname ); + + if ( level.flag[flagname] ) + { + level.flag[flagname] = 0; + level notify( flagname ); + set_trigger_flag_permissions( flagname ); + } +} + +flag_waitopen( flagname ) +{ + while ( level.flag[flagname] ) + level waittill( flagname ); +} + +flag_waitopen_array( a_flags ) +{ + foreach ( str_flag in a_flags ) + { + if ( flag( str_flag ) ) + { + flag_waitopen( str_flag ); + continue; + } + } +} + +flag_exists( flagname ) +{ + if ( self == level ) + { + if ( !isdefined( level.flag ) ) + return false; + + if ( isdefined( level.flag[flagname] ) ) + return true; + } + else + { + if ( !isdefined( self.ent_flag ) ) + return false; + + if ( isdefined( self.ent_flag[flagname] ) ) + return true; + } + + return false; +} + +script_gen_dump_addline( string = "nowrite", signature ) +{ + if ( !isdefined( level._loadstarted ) ) + { + if ( !isdefined( level.script_gen_dump_preload ) ) + level.script_gen_dump_preload = []; + + struct = spawnstruct(); + struct.string = string; + struct.signature = signature; + level.script_gen_dump_preload[level.script_gen_dump_preload.size] = struct; + return; + } + + if ( !isdefined( level.script_gen_dump[signature] ) ) + level.script_gen_dump_reasons[level.script_gen_dump_reasons.size] = "Added: " + string; + + level.script_gen_dump[signature] = string; + level.script_gen_dump2[signature] = string; +} + +array_func( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ) +{ + if ( !isdefined( entities ) ) + return; + + if ( isarray( entities ) ) + { + if ( entities.size ) + { + keys = getarraykeys( entities ); + + for ( i = 0; i < keys.size; i++ ) + single_func( entities[keys[i]], func, arg1, arg2, arg3, arg4, arg5, arg6 ); + } + } + else + single_func( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ); +} + +single_func( entity = level, func, arg1, arg2, arg3, arg4, arg5, arg6 ) +{ + if ( isdefined( arg6 ) ) + return entity [[ func ]]( arg1, arg2, arg3, arg4, arg5, arg6 ); + else if ( isdefined( arg5 ) ) + return entity [[ func ]]( arg1, arg2, arg3, arg4, arg5 ); + else if ( isdefined( arg4 ) ) + return entity [[ func ]]( arg1, arg2, arg3, arg4 ); + else if ( isdefined( arg3 ) ) + return entity [[ func ]]( arg1, arg2, arg3 ); + else if ( isdefined( arg2 ) ) + return entity [[ func ]]( arg1, arg2 ); + else if ( isdefined( arg1 ) ) + return entity [[ func ]]( arg1 ); + else + return entity [[ func ]](); +} + +new_func( func, arg1, arg2, arg3, arg4, arg5, arg6 ) +{ + s_func = spawnstruct(); + s_func.func = func; + s_func.arg1 = arg1; + s_func.arg2 = arg2; + s_func.arg3 = arg3; + s_func.arg4 = arg4; + s_func.arg5 = arg5; + s_func.arg6 = arg6; + return s_func; +} + +call_func( s_func ) +{ + return single_func( self, s_func.func, s_func.arg1, s_func.arg2, s_func.arg3, s_func.arg4, s_func.arg5, s_func.arg6 ); +} + +array_thread( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ) +{ + assert( isdefined( entities ), "Undefined entity array passed to common_scriptsutility::array_thread" ); + assert( isdefined( func ), "Undefined function passed to common_scriptsutility::array_thread" ); + + if ( isarray( entities ) ) + { + if ( isdefined( arg6 ) ) + { + foreach ( ent in entities ) + ent thread [[ func ]]( arg1, arg2, arg3, arg4, arg5, arg6 ); + } + else if ( isdefined( arg5 ) ) + { + foreach ( ent in entities ) + ent thread [[ func ]]( arg1, arg2, arg3, arg4, arg5 ); + } + else if ( isdefined( arg4 ) ) + { + foreach ( ent in entities ) + ent thread [[ func ]]( arg1, arg2, arg3, arg4 ); + } + else if ( isdefined( arg3 ) ) + { + foreach ( ent in entities ) + ent thread [[ func ]]( arg1, arg2, arg3 ); + } + else if ( isdefined( arg2 ) ) + { + foreach ( ent in entities ) + ent thread [[ func ]]( arg1, arg2 ); + } + else if ( isdefined( arg1 ) ) + { + foreach ( ent in entities ) + ent thread [[ func ]]( arg1 ); + } + else + { + foreach ( ent in entities ) + ent thread [[ func ]](); + } + } + else + single_thread( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ); +} + +array_ent_thread( entities, func, arg1, arg2, arg3, arg4, arg5 ) +{ + assert( isdefined( entities ), "Undefined entity array passed to common_scriptsutility::array_ent_thread" ); + assert( isdefined( func ), "Undefined function passed to common_scriptsutility::array_ent_thread" ); + + if ( isarray( entities ) ) + { + if ( entities.size ) + { + keys = getarraykeys( entities ); + + for ( i = 0; i < keys.size; i++ ) + single_thread( self, func, entities[keys[i]], arg1, arg2, arg3, arg4, arg5 ); + } + } + else + single_thread( self, func, entities, arg1, arg2, arg3, arg4, arg5 ); +} + +single_thread( entity, func, arg1, arg2, arg3, arg4, arg5, arg6 ) +{ + assert( isdefined( entity ), "Undefined entity passed to common_scriptsutility::single_thread()" ); + + if ( isdefined( arg6 ) ) + entity thread [[ func ]]( arg1, arg2, arg3, arg4, arg5, arg6 ); + else if ( isdefined( arg5 ) ) + entity thread [[ func ]]( arg1, arg2, arg3, arg4, arg5 ); + else if ( isdefined( arg4 ) ) + entity thread [[ func ]]( arg1, arg2, arg3, arg4 ); + else if ( isdefined( arg3 ) ) + entity thread [[ func ]]( arg1, arg2, arg3 ); + else if ( isdefined( arg2 ) ) + entity thread [[ func ]]( arg1, arg2 ); + else if ( isdefined( arg1 ) ) + entity thread [[ func ]]( arg1 ); + else + entity thread [[ func ]](); +} + +remove_undefined_from_array( array ) +{ + newarray = []; + + for ( i = 0; i < array.size; i++ ) + { + if ( !isdefined( array[i] ) ) + continue; + + newarray[newarray.size] = array[i]; + } + + return newarray; +} + +trigger_on( name, type ) +{ + if ( isdefined( name ) ) + { + if ( !isdefined( type ) ) + type = "targetname"; + + ents = getentarray( name, type ); + array_thread( ents, ::trigger_on_proc ); + } + else + self trigger_on_proc(); +} + +trigger_on_proc() +{ + if ( isdefined( self.realorigin ) ) + self.origin = self.realorigin; + + self.trigger_off = undefined; +} + +trigger_off( name, type ) +{ + if ( isdefined( name ) ) + { + if ( !isdefined( type ) ) + type = "targetname"; + + ents = getentarray( name, type ); + array_thread( ents, ::trigger_off_proc ); + } + else + self trigger_off_proc(); +} + +trigger_off_proc() +{ + if ( !isdefined( self.trigger_off ) || !self.trigger_off ) + { + self.realorigin = self.origin; + self.origin += vectorscale( ( 0, 0, -1 ), 10000.0 ); + self.trigger_off = 1; + } +} + +trigger_wait( str_name, str_key = "targetname", e_entity ) +{ + if ( isdefined( str_name ) ) + { + triggers = getentarray( str_name, str_key ); + assert( triggers.size > 0, "trigger not found: " + str_name + " key: " + str_key ); + + if ( triggers.size == 1 ) + { + trigger_hit = triggers[0]; + trigger_hit _trigger_wait( e_entity ); + } + else + { + s_tracker = spawnstruct(); + array_thread( triggers, ::_trigger_wait_think, s_tracker, e_entity ); + + s_tracker waittill( "trigger", e_other, trigger_hit ); + + trigger_hit.who = e_other; + } + + level notify( str_name, trigger_hit.who ); + return trigger_hit; + } + else + return _trigger_wait( e_entity ); +} + +_trigger_wait( e_entity ) +{ + do + { + if ( is_look_trigger( self ) ) + { + self waittill( "trigger_look", e_other ); + + continue; + } + + self waittill( "trigger", e_other ); + } + while ( isdefined( e_entity ) && e_other != e_entity ); + + self.who = e_other; + return self; +} + +_trigger_wait_think( s_tracker, e_entity ) +{ + self endon( "death" ); + s_tracker endon( "trigger" ); + e_other = _trigger_wait( e_entity ); + s_tracker notify( "trigger", e_other, self ); +} + +trigger_use( str_name, str_key = "targetname", ent = get_players()[0], b_assert = 1 ) +{ + if ( isdefined( str_name ) ) + { + e_trig = getent( str_name, str_key ); + + if ( !isdefined( e_trig ) ) + { + if ( b_assert ) + { +/# + assertmsg( "trigger not found: " + str_name + " key: " + str_key ); +#/ + } + + return; + } + } + else + { + e_trig = self; + str_name = self.targetname; + } + + e_trig useby( ent ); + level notify( str_name, ent ); + + if ( is_look_trigger( e_trig ) ) + e_trig notify( "trigger_look" ); + + return e_trig; +} + +set_trigger_flag_permissions( msg ) +{ + if ( !isdefined( level.trigger_flags ) || !isdefined( level.trigger_flags[msg] ) ) + return; + + level.trigger_flags[msg] = remove_undefined_from_array( level.trigger_flags[msg] ); + array_thread( level.trigger_flags[msg], ::update_trigger_based_on_flags ); +} + +update_trigger_based_on_flags() +{ + true_on = 1; + + if ( isdefined( self.script_flag_true ) ) + { + true_on = 0; + tokens = create_flags_and_return_tokens( self.script_flag_true ); + + for ( i = 0; i < tokens.size; i++ ) + { + if ( flag( tokens[i] ) ) + { + true_on = 1; + break; + } + } + } + + false_on = 1; + + if ( isdefined( self.script_flag_false ) ) + { + tokens = create_flags_and_return_tokens( self.script_flag_false ); + + for ( i = 0; i < tokens.size; i++ ) + { + if ( flag( tokens[i] ) ) + { + false_on = 0; + break; + } + } + } + + [[ level.trigger_func[true_on && false_on] ]](); +} + +create_flags_and_return_tokens( flags ) +{ + tokens = strtok( flags, " " ); + + for ( i = 0; i < tokens.size; i++ ) + { + if ( !isdefined( level.flag[tokens[i]] ) ) + flag_init( tokens[i], undefined, 1 ); + } + + return tokens; +} + +init_trigger_flags() +{ + level.trigger_flags = []; + level.trigger_func[1] = ::trigger_on; + level.trigger_func[0] = ::trigger_off; +} + +is_look_trigger( trig ) +{ + return isdefined( trig ) ? trig has_spawnflag( 256 ) && !( !isdefined( trig.classname ) && !isdefined( "trigger_damage" ) || isdefined( trig.classname ) && isdefined( "trigger_damage" ) && trig.classname == "trigger_damage" ) : 0; +} + +is_trigger_once( trig ) +{ + return isdefined( trig ) ? trig has_spawnflag( 1024 ) || !isdefined( self.classname ) && !isdefined( "trigger_once" ) || isdefined( self.classname ) && isdefined( "trigger_once" ) && self.classname == "trigger_once" : 0; +} + +getstruct( name, type = "targetname" ) +{ + assert( isdefined( level.struct_class_names ), "Tried to getstruct before the structs were init" ); + array = level.struct_class_names[type][name]; + + if ( !isdefined( array ) ) + return undefined; + + if ( array.size > 1 ) + { +/# + assertmsg( "getstruct used for more than one struct of type " + type + " called " + name + "." ); +#/ + return undefined; + } + + return array[0]; +} + +getstructarray( name, type = "targetname" ) +{ + assert( isdefined( level.struct_class_names ), "Tried to getstruct before the structs were init" ); + array = level.struct_class_names[type][name]; + + if ( !isdefined( array ) ) + return []; + + return array; +} + +structdelete() +{ + if ( isdefined( self.target ) && isdefined( level.struct_class_names["target"][self.target] ) ) + level.struct_class_names["target"][self.target] = undefined; + + if ( isdefined( self.targetname ) && isdefined( level.struct_class_names["targetname"][self.targetname] ) ) + level.struct_class_names["targetname"][self.targetname] = undefined; + + if ( isdefined( self.script_noteworthy ) && isdefined( level.struct_class_names["script_noteworthy"][self.script_noteworthy] ) ) + level.struct_class_names["script_noteworthy"][self.script_noteworthy] = undefined; + + if ( isdefined( self.script_linkname ) && isdefined( level.struct_class_names["script_linkname"][self.script_linkname] ) ) + level.struct_class_names["script_linkname"][self.script_linkname] = undefined; +} + +struct_class_init() +{ + assert( !isdefined( level.struct_class_names ), "level.struct_class_names is being initialized in the wrong place! It shouldn't be initialized yet." ); + level.struct_class_names = []; + level.struct_class_names["target"] = []; + level.struct_class_names["targetname"] = []; + level.struct_class_names["script_noteworthy"] = []; + level.struct_class_names["script_linkname"] = []; + level.struct_class_names["script_unitrigger_type"] = []; + + foreach ( s_struct in level.struct ) + { + if ( isdefined( s_struct.targetname ) ) + { + if ( !isdefined( level.struct_class_names["targetname"][s_struct.targetname] ) ) + level.struct_class_names["targetname"][s_struct.targetname] = []; + + size = level.struct_class_names["targetname"][s_struct.targetname].size; + level.struct_class_names["targetname"][s_struct.targetname][size] = s_struct; + } + + if ( isdefined( s_struct.target ) ) + { + if ( !isdefined( level.struct_class_names["target"][s_struct.target] ) ) + level.struct_class_names["target"][s_struct.target] = []; + + size = level.struct_class_names["target"][s_struct.target].size; + level.struct_class_names["target"][s_struct.target][size] = s_struct; + } + + if ( isdefined( s_struct.script_noteworthy ) ) + { + if ( !isdefined( level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy] ) ) + level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy] = []; + + size = level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy].size; + level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy][size] = s_struct; + } + + if ( isdefined( s_struct.script_linkname ) ) + { + assert( !isdefined( level.struct_class_names["script_linkname"][s_struct.script_linkname] ), "Two structs have the same linkname" ); + level.struct_class_names["script_linkname"][s_struct.script_linkname][0] = s_struct; + } + + if ( isdefined( s_struct.script_unitrigger_type ) ) + { + if ( !isdefined( level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type] ) ) + level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type] = []; + + size = level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type].size; + level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type][size] = s_struct; + } + } +} + +fileprint_start( file ) +{ +/# + filename = file; + file = openfile( filename, "write" ); + level.fileprint = file; + level.fileprintlinecount = 0; + level.fileprint_filename = filename; +#/ +} + +fileprint_map_start( file ) +{ +/# + file = "map_source/" + file + ".map"; + fileprint_start( file ); + level.fileprint_mapentcount = 0; + fileprint_map_header( 1 ); +#/ +} + +fileprint_chk( file, str ) +{ +/# + level.fileprintlinecount++; + + if ( level.fileprintlinecount > 400 ) + { + wait 0.05; + level.fileprintlinecount++; + level.fileprintlinecount = 0; + } + + fprintln( file, str ); +#/ +} + +fileprint_map_header( binclude_blank_worldspawn = 0 ) +{ + assert( isdefined( level.fileprint ) ); +/# + fileprint_chk( level.fileprint, "iwmap 4" ); + fileprint_chk( level.fileprint, "\"000_Global\" flags active" ); + fileprint_chk( level.fileprint, "\"The Map\" flags" ); + + if ( !binclude_blank_worldspawn ) + return; + + fileprint_map_entity_start(); + fileprint_map_keypairprint( "classname", "worldspawn" ); + fileprint_map_entity_end(); +#/ +} + +fileprint_map_keypairprint( key1, key2 ) +{ +/# + assert( isdefined( level.fileprint ) ); + fileprint_chk( level.fileprint, "\"" + key1 + "\" \"" + key2 + "\"" ); +#/ +} + +fileprint_map_entity_start() +{ +/# + assert( !isdefined( level.fileprint_entitystart ) ); + level.fileprint_entitystart = 1; + assert( isdefined( level.fileprint ) ); + fileprint_chk( level.fileprint, "// entity " + level.fileprint_mapentcount ); + fileprint_chk( level.fileprint, "{" ); + level.fileprint_mapentcount++; +#/ +} + +fileprint_map_entity_end() +{ +/# + assert( isdefined( level.fileprint_entitystart ) ); + assert( isdefined( level.fileprint ) ); + level.fileprint_entitystart = undefined; + fileprint_chk( level.fileprint, "}" ); +#/ +} + +fileprint_end() +{ +/# + assert( !isdefined( level.fileprint_entitystart ) ); + saved = closefile( level.fileprint ); + + if ( saved != 1 ) + { + println( "-----------------------------------" ); + println( " " ); + println( "file write failure" ); + println( "file with name: " + level.fileprint_filename ); + println( "make sure you checkout the file you are trying to save" ); + println( "note: USE P4 Search to find the file and check that one out" ); + println( " Do not checkin files in from the xenonoutput folder, " ); + println( " this is junctioned to the proper directory where you need to go" ); + println( "junctions looks like this" ); + println( " " ); + println( "..\\xenonOutput\\scriptdata\\createfx ..\\share\\raw\\maps\\createfx" ); + println( "..\\xenonOutput\\scriptdata\\createart ..\\share\\raw\\maps\\createart" ); + println( "..\\xenonOutput\\scriptdata\\vision ..\\share\\raw\\vision" ); + println( "..\\xenonOutput\\scriptdata\\scriptgen ..\\share\\raw\\maps\\scriptgen" ); + println( "..\\xenonOutput\\scriptdata\\zone_source ..\\xenon\\zone_source" ); + println( "..\\xenonOutput\\accuracy ..\\share\\raw\\accuracy" ); + println( "..\\xenonOutput\\scriptdata\\map_source ..\\map_source\\xenon_export" ); + println( " " ); + println( "-----------------------------------" ); + println( "File not saved( see console.log for info ) " ); + } + + level.fileprint = undefined; + level.fileprint_filename = undefined; +#/ +} + +fileprint_radiant_vec( vector ) +{ +/# + string = "" + vector[0] + " " + vector[1] + " " + vector[2] + ""; + return string; +#/ +} + +is_mature() +{ + if ( level.onlinegame ) + return 1; + + return getlocalprofileint( "cg_mature" ); +} + +is_german_build() +{ + if ( level.language == "german" ) + return true; + + return false; +} + +is_gib_restricted_build() +{ + if ( getdvar( "language" ) == "japanese" ) + return true; + + return false; +} + +is_true( check ) +{ + return isdefined( check ) && check; +} + +is_false( check ) +{ + return isdefined( check ) && !check; +} + +has_spawnflag( spawnflags ) +{ + if ( isdefined( self.spawnflags ) ) + return ( self.spawnflags & spawnflags ) == spawnflags; + + return 0; +} + +clamp( val, val_min, val_max ) +{ + if ( val < val_min ) + val = val_min; + else if ( val > val_max ) + val = val_max; + + return val; +} + +linear_map( num, min_a, max_a, min_b, max_b ) +{ + return clamp( ( num - min_a ) / ( max_a - min_a ) * ( max_b - min_b ) + min_b, min_b, max_b ); +} + +lag( desired, curr, k, dt ) +{ + r = 0.0; + + if ( k * dt >= 1.0 || k <= 0.0 ) + r = desired; + else + { + err = desired - curr; + r = curr + k * err * dt; + } + + return r; +} + +death_notify_wrapper( attacker, damagetype ) +{ + level notify( "face", "death", self ); + self notify( "death", attacker, damagetype ); +} + +damage_notify_wrapper( damage, attacker, direction_vec, point, type, modelname, tagname, partname, idflags ) +{ + level notify( "face", "damage", self ); + self notify( "damage", damage, attacker, direction_vec, point, type, modelname, tagname, partname, idflags ); +} + +explode_notify_wrapper() +{ + level notify( "face", "explode", self ); + self notify( "explode" ); +} + +alert_notify_wrapper() +{ + level notify( "face", "alert", self ); + self notify( "alert" ); +} + +shoot_notify_wrapper() +{ + level notify( "face", "shoot", self ); + self notify( "shoot" ); +} + +melee_notify_wrapper() +{ + level notify( "face", "melee", self ); + self notify( "melee" ); +} + +isusabilityenabled() +{ + return !self.disabledusability; +} + +_disableusability() +{ + self.disabledusability++; + self disableusability(); +} + +_enableusability() +{ + self.disabledusability--; + assert( self.disabledusability >= 0 ); + + if ( !self.disabledusability ) + self enableusability(); +} + +resetusability() +{ + self.disabledusability = 0; + self enableusability(); +} + +_disableweapon() +{ + if ( !isdefined( self.disabledweapon ) ) + self.disabledweapon = 0; + + self.disabledweapon++; + self disableweapons(); +} + +_enableweapon() +{ + self.disabledweapon--; + assert( self.disabledweapon >= 0 ); + + if ( !self.disabledweapon ) + self enableweapons(); +} + +isweaponenabled() +{ + return !self.disabledweapon; +} + +delay_thread( timer, func, param1, param2, param3, param4, param5, param6 ) +{ + self thread _delay_thread_proc( func, timer, param1, param2, param3, param4, param5, param6 ); +} + +_delay_thread_proc( func, timer, param1, param2, param3, param4, param5, param6 ) +{ + self endon( "death" ); + self endon( "disconnect" ); + wait( timer ); + single_thread( self, func, param1, param2, param3, param4, param5, param6 ); +} + +delay_notify( str_notify, n_delay, str_endon ) +{ + assert( isdefined( str_notify ) ); + assert( isdefined( n_delay ) ); + self thread _delay_notify_proc( str_notify, n_delay, str_endon ); +} + +_delay_notify_proc( str_notify, n_delay, str_endon ) +{ + self endon( "death" ); + + if ( isdefined( str_endon ) ) + self endon( str_endon ); + + if ( n_delay > 0 ) + wait( n_delay ); + + self notify( str_notify ); +} + +notify_delay_with_ender( snotifystring, fdelay, ender ) +{ + if ( isdefined( ender ) ) + level endon( ender ); + + assert( isdefined( self ) ); + assert( isdefined( snotifystring ) ); + assert( isdefined( fdelay ) ); + self endon( "death" ); + + if ( fdelay > 0 ) + wait( fdelay ); + + if ( !isdefined( self ) ) + return; + + self notify( snotifystring ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/_art.gsc b/ZM/Maps/Tranzit Diner/maps/mp/_art.gsc new file mode 100644 index 0000000..41f00e2 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/_art.gsc @@ -0,0 +1,473 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; + +main() +{ +/# + if ( getdvar( "scr_art_tweak" ) == "" || getdvar( "scr_art_tweak" ) == "0" ) + setdvar( "scr_art_tweak", 0 ); + + if ( getdvar( "scr_dof_enable" ) == "" ) + setdvar( "scr_dof_enable", "1" ); + + if ( getdvar( "scr_cinematic_autofocus" ) == "" ) + setdvar( "scr_cinematic_autofocus", "1" ); + + if ( getdvar( "scr_art_visionfile" ) == "" && isdefined( level.script ) ) + setdvar( "scr_art_visionfile", level.script ); + + if ( getdvar( "debug_reflection" ) == "" ) + setdvar( "debug_reflection", "0" ); + + if ( getdvar( "debug_reflection_matte" ) == "" ) + setdvar( "debug_reflection_matte", "0" ); + + if ( getdvar( "debug_color_pallete" ) == "" ) + setdvar( "debug_color_pallete", "0" ); + + precachemodel( "test_sphere_lambert" ); + precachemodel( "test_macbeth_chart" ); + precachemodel( "test_macbeth_chart_unlit" ); + precachemodel( "test_sphere_silver" ); + level thread debug_reflection(); + level thread debug_reflection_matte(); + level thread debug_color_pallete(); +#/ + if ( !isdefined( level.dofdefault ) ) + { + level.dofdefault["nearStart"] = 0; + level.dofdefault["nearEnd"] = 1; + level.dofdefault["farStart"] = 8000; + level.dofdefault["farEnd"] = 10000; + level.dofdefault["nearBlur"] = 6; + level.dofdefault["farBlur"] = 0; + } + + level.curdof = ( level.dofdefault["farStart"] - level.dofdefault["nearEnd"] ) / 2; +/# + thread tweakart(); +#/ + if ( !isdefined( level.script ) ) + level.script = tolower( getdvar( "mapname" ) ); +} + +artfxprintln( file, string ) +{ +/# + if ( file == -1 ) + return; + + fprintln( file, string ); +#/ +} + +strtok_loc( string, par1 ) +{ + stringlist = []; + indexstring = ""; + + for ( i = 0; i < string.size; i++ ) + { + if ( string[i] == " " ) + { + stringlist[stringlist.size] = indexstring; + indexstring = ""; + continue; + } + + indexstring += string[i]; + } + + if ( indexstring.size ) + stringlist[stringlist.size] = indexstring; + + return stringlist; +} + +setfogsliders() +{ + fogall = strtok_loc( getdvar( "g_fogColorReadOnly" ), " " ); + red = fogall[0]; + green = fogall[1]; + blue = fogall[2]; + halfplane = getdvar( "g_fogHalfDistReadOnly" ); + nearplane = getdvar( "g_fogStartDistReadOnly" ); + + if ( !isdefined( red ) || !isdefined( green ) || !isdefined( blue ) || !isdefined( halfplane ) ) + { + red = 1; + green = 1; + blue = 1; + halfplane = 10000001; + nearplane = 10000000; + } + + setdvar( "scr_fog_exp_halfplane", halfplane ); + setdvar( "scr_fog_nearplane", nearplane ); + setdvar( "scr_fog_color", red + " " + green + " " + blue ); +} + +tweakart() +{ +/# + if ( !isdefined( level.tweakfile ) ) + level.tweakfile = 0; + + if ( getdvar( "scr_fog_baseheight" ) == "" ) + { + setdvar( "scr_fog_exp_halfplane", "500" ); + setdvar( "scr_fog_exp_halfheight", "500" ); + setdvar( "scr_fog_nearplane", "0" ); + setdvar( "scr_fog_baseheight", "0" ); + } + + setdvar( "scr_fog_fraction", "1.0" ); + setdvar( "scr_art_dump", "0" ); + setdvar( "scr_art_sun_fog_dir_set", "0" ); + setdvar( "scr_dof_nearStart", level.dofdefault["nearStart"] ); + setdvar( "scr_dof_nearEnd", level.dofdefault["nearEnd"] ); + setdvar( "scr_dof_farStart", level.dofdefault["farStart"] ); + setdvar( "scr_dof_farEnd", level.dofdefault["farEnd"] ); + setdvar( "scr_dof_nearBlur", level.dofdefault["nearBlur"] ); + setdvar( "scr_dof_farBlur", level.dofdefault["farBlur"] ); + file = undefined; + filename = undefined; + tweak_toggle = 1; + + for (;;) + { + while ( getdvarint( "scr_art_tweak" ) == 0 ) + { + tweak_toggle = 1; + wait 0.05; + } + + if ( tweak_toggle ) + { + tweak_toggle = 0; + fogsettings = getfogsettings(); + setdvar( "scr_fog_nearplane", fogsettings[0] ); + setdvar( "scr_fog_exp_halfplane", fogsettings[1] ); + setdvar( "scr_fog_exp_halfheight", fogsettings[3] ); + setdvar( "scr_fog_baseheight", fogsettings[2] ); + setdvar( "scr_fog_color", fogsettings[4] + " " + fogsettings[5] + " " + fogsettings[6] ); + setdvar( "scr_fog_color_scale", fogsettings[7] ); + setdvar( "scr_sun_fog_color", fogsettings[8] + " " + fogsettings[9] + " " + fogsettings[10] ); + level.fogsundir = []; + level.fogsundir[0] = fogsettings[11]; + level.fogsundir[1] = fogsettings[12]; + level.fogsundir[2] = fogsettings[13]; + setdvar( "scr_sun_fog_start_angle", fogsettings[14] ); + setdvar( "scr_sun_fog_end_angle", fogsettings[15] ); + setdvar( "scr_fog_max_opacity", fogsettings[16] ); + } + + level.fogexphalfplane = getdvarfloat( "scr_fog_exp_halfplane" ); + level.fogexphalfheight = getdvarfloat( "scr_fog_exp_halfheight" ); + level.fognearplane = getdvarfloat( "scr_fog_nearplane" ); + level.fogbaseheight = getdvarfloat( "scr_fog_baseheight" ); + level.fogcolorred = getdvarcolorred( "scr_fog_color" ); + level.fogcolorgreen = getdvarcolorgreen( "scr_fog_color" ); + level.fogcolorblue = getdvarcolorblue( "scr_fog_color" ); + level.fogcolorscale = getdvarfloat( "scr_fog_color_scale" ); + level.sunfogcolorred = getdvarcolorred( "scr_sun_fog_color" ); + level.sunfogcolorgreen = getdvarcolorgreen( "scr_sun_fog_color" ); + level.sunfogcolorblue = getdvarcolorblue( "scr_sun_fog_color" ); + level.sunstartangle = getdvarfloat( "scr_sun_fog_start_angle" ); + level.sunendangle = getdvarfloat( "scr_sun_fog_end_angle" ); + level.fogmaxopacity = getdvarfloat( "scr_fog_max_opacity" ); + + if ( getdvarint( "scr_art_sun_fog_dir_set" ) ) + { + setdvar( "scr_art_sun_fog_dir_set", "0" ); + println( "Setting sun fog direction to facing of player" ); + players = get_players(); + dir = vectornormalize( anglestoforward( players[0] getplayerangles() ) ); + level.fogsundir = []; + level.fogsundir[0] = dir[0]; + level.fogsundir[1] = dir[1]; + level.fogsundir[2] = dir[2]; + } + + fovslidercheck(); + dumpsettings(); + + if ( !getdvarint( _hash_DBBD8F3B ) ) + { + if ( !isdefined( level.fogsundir ) ) + { + level.fogsundir = []; + level.fogsundir[0] = 1; + level.fogsundir[1] = 0; + level.fogsundir[2] = 0; + } + + setvolfog( level.fognearplane, level.fogexphalfplane, level.fogexphalfheight, level.fogbaseheight, level.fogcolorred, level.fogcolorgreen, level.fogcolorblue, level.fogcolorscale, level.sunfogcolorred, level.sunfogcolorgreen, level.sunfogcolorblue, level.fogsundir[0], level.fogsundir[1], level.fogsundir[2], level.sunstartangle, level.sunendangle, 0, level.fogmaxopacity ); + } + else + setexpfog( 100000000, 100000001, 0, 0, 0, 0 ); + + wait 0.1; + } +#/ +} + +fovslidercheck() +{ + if ( level.dofdefault["nearStart"] >= level.dofdefault["nearEnd"] ) + { + level.dofdefault["nearStart"] = level.dofdefault["nearEnd"] - 1; + setdvar( "scr_dof_nearStart", level.dofdefault["nearStart"] ); + } + + if ( level.dofdefault["nearEnd"] <= level.dofdefault["nearStart"] ) + { + level.dofdefault["nearEnd"] = level.dofdefault["nearStart"] + 1; + setdvar( "scr_dof_nearEnd", level.dofdefault["nearEnd"] ); + } + + if ( level.dofdefault["farStart"] >= level.dofdefault["farEnd"] ) + { + level.dofdefault["farStart"] = level.dofdefault["farEnd"] - 1; + setdvar( "scr_dof_farStart", level.dofdefault["farStart"] ); + } + + if ( level.dofdefault["farEnd"] <= level.dofdefault["farStart"] ) + { + level.dofdefault["farEnd"] = level.dofdefault["farStart"] + 1; + setdvar( "scr_dof_farEnd", level.dofdefault["farEnd"] ); + } + + if ( level.dofdefault["farBlur"] >= level.dofdefault["nearBlur"] ) + { + level.dofdefault["farBlur"] = level.dofdefault["nearBlur"] - 0.1; + setdvar( "scr_dof_farBlur", level.dofdefault["farBlur"] ); + } + + if ( level.dofdefault["farStart"] <= level.dofdefault["nearEnd"] ) + { + level.dofdefault["farStart"] = level.dofdefault["nearEnd"] + 1; + setdvar( "scr_dof_farStart", level.dofdefault["farStart"] ); + } +} + +dumpsettings() +{ +/# + if ( getdvar( "scr_art_dump" ) != "0" ) + { + println( "\\tstart_dist = " + level.fognearplane + ";" ); + println( "\\thalf_dist = " + level.fogexphalfplane + ";" ); + println( "\\thalf_height = " + level.fogexphalfheight + ";" ); + println( "\\tbase_height = " + level.fogbaseheight + ";" ); + println( "\\tfog_r = " + level.fogcolorred + ";" ); + println( "\\tfog_g = " + level.fogcolorgreen + ";" ); + println( "\\tfog_b = " + level.fogcolorblue + ";" ); + println( "\\tfog_scale = " + level.fogcolorscale + ";" ); + println( "\\tsun_col_r = " + level.sunfogcolorred + ";" ); + println( "\\tsun_col_g = " + level.sunfogcolorgreen + ";" ); + println( "\\tsun_col_b = " + level.sunfogcolorblue + ";" ); + println( "\\tsun_dir_x = " + level.fogsundir[0] + ";" ); + println( "\\tsun_dir_y = " + level.fogsundir[1] + ";" ); + println( "\\tsun_dir_z = " + level.fogsundir[2] + ";" ); + println( "\\tsun_start_ang = " + level.sunstartangle + ";" ); + println( "\\tsun_stop_ang = " + level.sunendangle + ";" ); + println( "\\ttime = 0;" ); + println( "\\tmax_fog_opacity = " + level.fogmaxopacity + ";" ); + println( "" ); + println( "\\tsetVolFog(start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale," ); + println( "\\t\\tsun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, " ); + println( "\\t\\tsun_stop_ang, time, max_fog_opacity);" ); + setdvar( "scr_art_dump", "0" ); + } +#/ +} + +debug_reflection() +{ +/# + level.debug_reflection = 0; + + while ( true ) + { + wait 0.1; + + if ( getdvar( "debug_reflection" ) == "2" && level.debug_reflection != 2 || getdvar( "debug_reflection" ) == "3" && level.debug_reflection != 3 ) + { + remove_reflection_objects(); + + if ( getdvar( "debug_reflection" ) == "2" ) + { + create_reflection_objects(); + level.debug_reflection = 2; + } + else + { + create_reflection_objects(); + create_reflection_object(); + level.debug_reflection = 3; + } + } + else if ( getdvar( "debug_reflection" ) == "1" && level.debug_reflection != 1 ) + { + setdvar( "debug_reflection_matte", "0" ); + setdvar( "debug_color_pallete", "0" ); + remove_reflection_objects(); + create_reflection_object(); + level.debug_reflection = 1; + } + else if ( getdvar( "debug_reflection" ) == "0" && level.debug_reflection != 0 ) + { + remove_reflection_objects(); + level.debug_reflection = 0; + } + } +#/ +} + +remove_reflection_objects() +{ +/# + if ( ( level.debug_reflection == 2 || level.debug_reflection == 3 ) && isdefined( level.debug_reflection_objects ) ) + { + for ( i = 0; i < level.debug_reflection_objects.size; i++ ) + level.debug_reflection_objects[i] delete(); + + level.debug_reflection_objects = undefined; + } + + if ( level.debug_reflection == 1 || level.debug_reflection == 3 || level.debug_reflection_matte == 1 || level.debug_color_pallete == 1 || level.debug_color_pallete == 2 ) + { + if ( isdefined( level.debug_reflectionobject ) ) + level.debug_reflectionobject delete(); + } +#/ +} + +create_reflection_objects() +{ +/# + reflection_locs = getreflectionlocs(); + + for ( i = 0; i < reflection_locs.size; i++ ) + { + level.debug_reflection_objects[i] = spawn( "script_model", reflection_locs[i] ); + level.debug_reflection_objects[i] setmodel( "test_sphere_silver" ); + } +#/ +} + +create_reflection_object( model = "test_sphere_silver" ) +{ +/# + if ( isdefined( level.debug_reflectionobject ) ) + level.debug_reflectionobject delete(); + + players = get_players(); + player = players[0]; + level.debug_reflectionobject = spawn( "script_model", player geteye() + vectorscale( anglestoforward( player.angles ), 100 ) ); + level.debug_reflectionobject setmodel( model ); + level.debug_reflectionobject.origin = player geteye() + vectorscale( anglestoforward( player getplayerangles() ), 100 ); + level.debug_reflectionobject linkto( player ); + thread debug_reflection_buttons(); +#/ +} + +debug_reflection_buttons() +{ +/# + level notify( "new_reflection_button_running" ); + level endon( "new_reflection_button_running" ); + level.debug_reflectionobject endon( "death" ); + offset = 100; + lastoffset = offset; + + while ( getdvar( "debug_reflection" ) == "1" || getdvar( "debug_reflection" ) == "3" || getdvar( "debug_reflection_matte" ) == "1" || getdvar( "debug_color_pallete" ) == "1" || getdvar( "debug_color_pallete" ) == "2" ) + { + players = get_players(); + + if ( players[0] buttonpressed( "BUTTON_X" ) ) + offset += 50; + + if ( players[0] buttonpressed( "BUTTON_Y" ) ) + offset -= 50; + + if ( offset > 1000 ) + offset = 1000; + + if ( offset < 64 ) + offset = 64; + + level.debug_reflectionobject unlink(); + level.debug_reflectionobject.origin = players[0] geteye() + vectorscale( anglestoforward( players[0] getplayerangles() ), offset ); + temp_angles = vectortoangles( players[0].origin - level.debug_reflectionobject.origin ); + level.debug_reflectionobject.angles = ( 0, temp_angles[1], 0 ); + lastoffset = offset; + line( level.debug_reflectionobject.origin, getreflectionorigin( level.debug_reflectionobject.origin ), ( 1, 0, 0 ), 1, 1 ); + wait 0.05; + + if ( isdefined( level.debug_reflectionobject ) ) + level.debug_reflectionobject linkto( players[0] ); + } +#/ +} + +debug_reflection_matte() +{ +/# + level.debug_reflection_matte = 0; + + while ( true ) + { + wait 0.1; + + if ( getdvar( "debug_reflection_matte" ) == "1" && level.debug_reflection_matte != 1 ) + { + setdvar( "debug_reflection", "0" ); + setdvar( "debug_color_pallete", "0" ); + remove_reflection_objects(); + create_reflection_object( "test_sphere_lambert" ); + level.debug_reflection_matte = 1; + } + else if ( getdvar( "debug_reflection_matte" ) == "0" && level.debug_reflection_matte != 0 ) + { + remove_reflection_objects(); + level.debug_reflection_matte = 0; + } + } +#/ +} + +debug_color_pallete() +{ +/# + level.debug_color_pallete = 0; + + while ( true ) + { + wait 0.1; + + if ( getdvar( "debug_color_pallete" ) == "1" && level.debug_color_pallete != 1 ) + { + setdvar( "debug_reflection", "0" ); + setdvar( "debug_reflection_matte", "0" ); + remove_reflection_objects(); + create_reflection_object( "test_macbeth_chart" ); + level.debug_color_pallete = 1; + } + else if ( getdvar( "debug_color_pallete" ) == "2" && level.debug_color_pallete != 2 ) + { + remove_reflection_objects(); + create_reflection_object( "test_macbeth_chart_unlit" ); + level.debug_color_pallete = 2; + } + else if ( getdvar( "debug_color_pallete" ) == "0" && level.debug_color_pallete != 0 ) + { + remove_reflection_objects(); + level.debug_color_pallete = 0; + } + } +#/ +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/_audio.gsc b/ZM/Maps/Tranzit Diner/maps/mp/_audio.gsc new file mode 100644 index 0000000..039e1ac --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/_audio.gsc @@ -0,0 +1,139 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; + +init() +{ + +} + +wait_until_first_player() +{ + players = get_players(); + + if ( !isdefined( players[0] ) ) + level waittill( "first_player_ready" ); + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] thread monitor_player_sprint(); +} + +stand_think( trig ) +{ + killtext = "kill_stand_think" + trig getentitynumber(); + self endon( "disconnect" ); + self endon( "death" ); + self endon( killtext ); + + while ( true ) + { + if ( self.player_is_moving ) + trig playsound( trig.script_label ); + + wait 1; + } +} + +monitor_player_sprint() +{ + self endon( "disconnect" ); + self thread monitor_player_movement(); + + for ( self._is_sprinting = 0; 1; self._is_sprinting = 0 ) + { + self waittill( "sprint_begin" ); + + self._is_sprinting = 1; + + self waittill( "sprint_end" ); + } +} + +monitor_player_movement() +{ + self endon( "disconnect" ); + + while ( true ) + { + org_1 = self.origin; + wait 1.0; + org_2 = self.origin; + distancemoved = distancesquared( org_1, org_2 ); + + if ( distancemoved > 4096 ) + self.player_is_moving = 1; + else + self.player_is_moving = 0; + } +} + +thread_enter_exit_sound( trig ) +{ + self endon( "death" ); + self endon( "disconnect" ); + trig.touchingplayers[self getentitynumber()] = 1; + + if ( isdefined( trig.script_sound ) && trig.script_activated && self._is_sprinting ) + self playsound( trig.script_sound ); + + self thread stand_think( trig ); + + while ( self istouching( trig ) ) + wait 0.1; + + self notify( "kill_stand_think" + trig getentitynumber() ); + self playsound( trig.script_noteworthy ); + trig.touchingplayers[self getentitynumber()] = 0; +} + +thread_step_trigger() +{ + if ( !isdefined( self.script_activated ) ) + self.script_activated = 1; + + if ( !isdefined( self.touchingplayers ) ) + { + self.touchingplayers = []; + + for ( i = 0; i < 4; i++ ) + self.touchingplayers[i] = 0; + } + + while ( true ) + { + self waittill( "trigger", who ); + + if ( self.touchingplayers[who getentitynumber()] == 0 ) + who thread thread_enter_exit_sound( self ); + } +} + +disable_bump_trigger( triggername ) +{ + triggers = getentarray( "audio_bump_trigger", "targetname" ); + + if ( isdefined( triggers ) ) + { + for ( i = 0; i < triggers.size; i++ ) + { + if ( isdefined( triggers[i].script_label ) && triggers[i].script_label == triggername ) + triggers[i].script_activated = 0; + } + } +} + +get_player_index_number( player ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] == player ) + return i; + } + + return 1; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/_ballistic_knife.gsc b/ZM/Maps/Tranzit Diner/maps/mp/_ballistic_knife.gsc new file mode 100644 index 0000000..e9eca74 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/_ballistic_knife.gsc @@ -0,0 +1,262 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\_challenges; + +init() +{ + precachemodel( "t6_wpn_ballistic_knife_projectile" ); + precachemodel( "t6_wpn_ballistic_knife_blade_retrieve" ); +} + +onspawn( watcher, player ) +{ + player endon( "death" ); + player endon( "disconnect" ); + level endon( "game_ended" ); + + self waittill( "stationary", endpos, normal, angles, attacker, prey, bone ); + + isfriendly = 0; + + if ( isdefined( endpos ) ) + { + retrievable_model = spawn( "script_model", endpos ); + retrievable_model setmodel( "t6_wpn_ballistic_knife_projectile" ); + retrievable_model setteam( player.team ); + retrievable_model setowner( player ); + retrievable_model.owner = player; + retrievable_model.angles = angles; + retrievable_model.name = watcher.weapon; + retrievable_model.targetname = "sticky_weapon"; + + if ( isdefined( prey ) ) + { + if ( level.teambased && isplayer( prey ) && player.team == prey.team ) + isfriendly = 1; + else if ( level.teambased && isai( prey ) && player.team == prey.aiteam ) + isfriendly = 1; + + if ( !isfriendly ) + { + if ( isalive( prey ) ) + retrievable_model droptoground( retrievable_model.origin, 80 ); + else + retrievable_model linkto( prey, bone ); + } + else if ( isfriendly ) + { + retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) ); + normal = ( 0, 0, 1 ); + } + } + + watcher.objectarray[watcher.objectarray.size] = retrievable_model; + + if ( isfriendly ) + retrievable_model waittill( "stationary" ); + + retrievable_model thread dropknivestoground(); + + if ( isfriendly ) + player notify( "ballistic_knife_stationary", retrievable_model, normal ); + else + player notify( "ballistic_knife_stationary", retrievable_model, normal, prey ); + + retrievable_model thread wait_to_show_glowing_model( prey ); + } +} + +wait_to_show_glowing_model( prey ) +{ + level endon( "game_ended" ); + self endon( "death" ); + glowing_retrievable_model = spawn( "script_model", self.origin ); + self.glowing_model = glowing_retrievable_model; + glowing_retrievable_model.angles = self.angles; + glowing_retrievable_model linkto( self ); + + if ( isdefined( prey ) && !isalive( prey ) ) + wait 2; + + glowing_retrievable_model setmodel( "t6_wpn_ballistic_knife_blade_retrieve" ); +} + +watch_shutdown() +{ + pickuptrigger = self.pickuptrigger; + glowing_model = self.glowing_model; + + self waittill( "death" ); + + if ( isdefined( pickuptrigger ) ) + pickuptrigger delete(); + + if ( isdefined( glowing_model ) ) + glowing_model delete(); +} + +onspawnretrievetrigger( watcher, player ) +{ + player endon( "death" ); + player endon( "disconnect" ); + level endon( "game_ended" ); + + player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey ); + + if ( !isdefined( retrievable_model ) ) + return; + + vec_scale = 10; + trigger_pos = []; + + if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) ) + { + trigger_pos[0] = prey.origin[0]; + trigger_pos[1] = prey.origin[1]; + trigger_pos[2] = prey.origin[2] + vec_scale; + } + else + { + trigger_pos[0] = retrievable_model.origin[0] + vec_scale * normal[0]; + trigger_pos[1] = retrievable_model.origin[1] + vec_scale * normal[1]; + trigger_pos[2] = retrievable_model.origin[2] + vec_scale * normal[2]; + } + + trigger_pos[2] -= 50.0; + pickup_trigger = spawn( "trigger_radius", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ), 0, 50, 100 ); + pickup_trigger.owner = player; + retrievable_model.pickuptrigger = pickup_trigger; + pickup_trigger enablelinkto(); + + if ( isdefined( prey ) ) + pickup_trigger linkto( prey ); + else + pickup_trigger linkto( retrievable_model ); + + retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.pickupsoundplayer, watcher.pickupsound ); + retrievable_model thread watch_shutdown(); +} + +watch_use_trigger( trigger, model, callback, playersoundonuse, npcsoundonuse ) +{ + self endon( "death" ); + self endon( "delete" ); + level endon( "game_ended" ); + max_ammo = weaponmaxammo( "knife_ballistic_mp" ) + 1; + + while ( true ) + { + trigger waittill( "trigger", player ); + + if ( !isalive( player ) ) + continue; + + if ( !player isonground() ) + continue; + + if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam ) + continue; + + if ( isdefined( trigger.claimedby ) && player != trigger.claimedby ) + continue; + + if ( !player hasweapon( "knife_ballistic_mp" ) ) + continue; + + ammo_stock = player getweaponammostock( "knife_ballistic_mp" ); + ammo_clip = player getweaponammoclip( "knife_ballistic_mp" ); + current_weapon = player getcurrentweapon(); + total_ammo = ammo_stock + ammo_clip; + hasreloaded = 1; + + if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == "knife_ballistic_mp" ) + hasreloaded = 0; + + if ( total_ammo >= max_ammo || !hasreloaded ) + continue; + + if ( isdefined( playersoundonuse ) ) + player playlocalsound( playersoundonuse ); + + if ( isdefined( npcsoundonuse ) ) + player playsound( npcsoundonuse ); + + self thread [[ callback ]]( player ); + break; + } +} + +pick_up( player ) +{ + self destroy_ent(); + current_weapon = player getcurrentweapon(); + player maps\mp\_challenges::pickedupballisticknife(); + + if ( current_weapon != "knife_ballistic_mp" ) + { + clip_ammo = player getweaponammoclip( "knife_ballistic_mp" ); + + if ( !clip_ammo ) + player setweaponammoclip( "knife_ballistic_mp", 1 ); + else + { + new_ammo_stock = player getweaponammostock( "knife_ballistic_mp" ) + 1; + player setweaponammostock( "knife_ballistic_mp", new_ammo_stock ); + } + } + else + { + new_ammo_stock = player getweaponammostock( "knife_ballistic_mp" ) + 1; + player setweaponammostock( "knife_ballistic_mp", new_ammo_stock ); + } +} + +destroy_ent() +{ + if ( isdefined( self ) ) + { + pickuptrigger = self.pickuptrigger; + + if ( isdefined( pickuptrigger ) ) + pickuptrigger delete(); + + if ( isdefined( self.glowing_model ) ) + self.glowing_model delete(); + + self delete(); + } +} + +dropknivestoground() +{ + self endon( "death" ); + + for (;;) + { + level waittill( "drop_objects_to_ground", origin, radius ); + + self droptoground( origin, radius ); + } +} + +droptoground( origin, radius ) +{ + if ( distancesquared( origin, self.origin ) < radius * radius ) + { + self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) ); + self thread updateretrievetrigger(); + } +} + +updateretrievetrigger() +{ + self endon( "death" ); + + self waittill( "stationary" ); + + trigger = self.pickuptrigger; + trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 ); + trigger linkto( self ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/_bb.gsc b/ZM/Maps/Tranzit Diner/maps/mp/_bb.gsc new file mode 100644 index 0000000..7e6832f --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/_bb.gsc @@ -0,0 +1,89 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; + +init() +{ + level thread onplayerconnect(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connected", player ); + + player thread onplayerspawned(); + player thread onplayerdeath(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + self._bbdata = []; + + for (;;) + { + self waittill( "spawned_player" ); + + self._bbdata["score"] = 0; + self._bbdata["momentum"] = 0; + self._bbdata["spawntime"] = gettime(); + self._bbdata["shots"] = 0; + self._bbdata["hits"] = 0; + } +} + +onplayerdisconnect() +{ + for (;;) + { + self waittill( "disconnect" ); + + self commitspawndata(); + break; + } +} + +onplayerdeath() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "death" ); + + self commitspawndata(); + } +} + +commitspawndata() +{ + assert( isdefined( self._bbdata ) ); + + if ( !isdefined( self._bbdata ) ) + return; + + bbprint( "mpplayerlives", "gametime %d spawnid %d lifescore %d lifemomentum %d lifetime %d name %s", gettime(), getplayerspawnid( self ), self._bbdata["score"], self._bbdata["momentum"], gettime() - self._bbdata["spawntime"], self.name ); +} + +commitweapondata( spawnid, currentweapon, time0 ) +{ + assert( isdefined( self._bbdata ) ); + + if ( !isdefined( self._bbdata ) ) + return; + + time1 = gettime(); + bbprint( "mpweapons", "spawnid %d name %s duration %d shots %d hits %d", spawnid, currentweapon, time1 - time0, self._bbdata["shots"], self._bbdata["hits"] ); + self._bbdata["shots"] = 0; + self._bbdata["hits"] = 0; +} + +bbaddtostat( statname, delta ) +{ + if ( isdefined( self._bbdata ) && isdefined( self._bbdata[statname] ) ) + self._bbdata[statname] += delta; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/_busing.gsc b/ZM/Maps/Tranzit Diner/maps/mp/_busing.gsc new file mode 100644 index 0000000..6928e30 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/_busing.gsc @@ -0,0 +1,18 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +businit() +{ + assert( level.clientscripts ); + level.busstate = ""; + registerclientsys( "busCmd" ); +} + +setbusstate( state ) +{ + if ( level.busstate != state ) + setclientsysstate( "busCmd", state ); + + level.busstate = state; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/_challenges.gsc b/ZM/Maps/Tranzit Diner/maps/mp/_challenges.gsc new file mode 100644 index 0000000..e5ca8f3 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/_challenges.gsc @@ -0,0 +1,1876 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; + +init() +{ + if ( !isdefined( level.challengescallbacks ) ) + level.challengescallbacks = []; + + waittillframeend; + + if ( canprocesschallenges() ) + { + registerchallengescallback( "playerKilled", ::challengekills ); + registerchallengescallback( "gameEnd", ::challengegameend ); + registerchallengescallback( "roundEnd", ::challengeroundend ); + } + + level thread onplayerconnect(); + + foreach ( team in level.teams ) + initteamchallenges( team ); +} + +addflyswatterstat( weapon, aircraft ) +{ + if ( !isdefined( self.pers["flyswattercount"] ) ) + self.pers["flyswattercount"] = 0; + + self addweaponstat( weapon, "destroyed_aircraft", 1 ); + self.pers["flyswattercount"]++; + + if ( self.pers["flyswattercount"] == 5 ) + self addweaponstat( weapon, "destroyed_5_aircraft", 1 ); + + if ( isdefined( aircraft ) && isdefined( aircraft.birthtime ) ) + { + if ( gettime() - aircraft.birthtime < 20000 ) + self addweaponstat( weapon, "destroyed_aircraft_under20s", 1 ); + } + + if ( !isdefined( self.destroyedaircrafttime ) ) + self.destroyedaircrafttime = []; + + if ( isdefined( self.destroyedaircrafttime[weapon] ) && gettime() - self.destroyedaircrafttime[weapon] < 10000 ) + { + self addweaponstat( weapon, "destroyed_2aircraft_quickly", 1 ); + self.destroyedaircrafttime[weapon] = undefined; + } + else + self.destroyedaircrafttime[weapon] = gettime(); +} + +canprocesschallenges() +{ +/# + if ( getdvarintdefault( "scr_debug_challenges", 0 ) ) + return true; +#/ + if ( level.rankedmatch || level.wagermatch ) + return true; + + return false; +} + +initteamchallenges( team ) +{ + if ( !isdefined( game["challenge"] ) ) + game["challenge"] = []; + + if ( !isdefined( game["challenge"][team] ) ) + { + game["challenge"][team] = []; + game["challenge"][team]["plantedBomb"] = 0; + game["challenge"][team]["destroyedBombSite"] = 0; + game["challenge"][team]["capturedFlag"] = 0; + } + + game["challenge"][team]["allAlive"] = 1; +} + +registerchallengescallback( callback, func ) +{ + if ( !isdefined( level.challengescallbacks[callback] ) ) + level.challengescallbacks[callback] = []; + + level.challengescallbacks[callback][level.challengescallbacks[callback].size] = func; +} + +dochallengecallback( callback, data ) +{ + if ( !isdefined( level.challengescallbacks ) ) + return; + + if ( !isdefined( level.challengescallbacks[callback] ) ) + return; + + if ( isdefined( data ) ) + { + for ( i = 0; i < level.challengescallbacks[callback].size; i++ ) + thread [[ level.challengescallbacks[callback][i] ]]( data ); + } + else + { + for ( i = 0; i < level.challengescallbacks[callback].size; i++ ) + thread [[ level.challengescallbacks[callback][i] ]](); + } +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connected", player ); + + player thread initchallengedata(); + player thread spawnwatcher(); + player thread monitorreloads(); + } +} + +monitorreloads() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "reload" ); + + currentweapon = self getcurrentweapon(); + + if ( currentweapon == "none" ) + continue; + + time = gettime(); + self.lastreloadtime = time; + + if ( currentweapon == "crossbow_mp" ) + self.crossbowclipkillcount = 0; + + if ( weaponhasattachment( currentweapon, "dualclip" ) ) + self thread reloadthenkill( currentweapon ); + } +} + +reloadthenkill( reloadweapon ) +{ + self endon( "disconnect" ); + self endon( "death" ); + self endon( "reloadThenKillTimedOut" ); + self notify( "reloadThenKillStart" ); + self endon( "reloadThenKillStart" ); + self thread reloadthenkilltimeout( 5 ); + + for (;;) + { + self waittill( "killed_enemy_player", time, weapon ); + + if ( reloadweapon == weapon ) + self addplayerstat( "reload_then_kill_dualclip", 1 ); + } +} + +reloadthenkilltimeout( time ) +{ + self endon( "disconnect" ); + self endon( "death" ); + self endon( "reloadThenKillStart" ); + wait( time ); + self notify( "reloadThenKillTimedOut" ); +} + +initchallengedata() +{ + self.pers["bulletStreak"] = 0; + self.pers["lastBulletKillTime"] = 0; + self.pers["stickExplosiveKill"] = 0; + self.pers["carepackagesCalled"] = 0; + self.explosiveinfo = []; +} + +isdamagefromplayercontrolledaitank( eattacker, einflictor, sweapon ) +{ + if ( sweapon == "ai_tank_drone_gun_mp" ) + { + if ( isdefined( eattacker ) && isdefined( eattacker.remoteweapon ) && isdefined( einflictor ) ) + { + if ( isdefined( einflictor.controlled ) && einflictor.controlled == 1 ) + { + if ( eattacker.remoteweapon == einflictor ) + return true; + } + } + } + else if ( sweapon == "ai_tank_drone_rocket_mp" ) + { + if ( isdefined( einflictor ) && !isdefined( einflictor.from_ai ) ) + return true; + } + + return false; +} + +isdamagefromplayercontrolledsentry( eattacker, einflictor, sweapon ) +{ + if ( sweapon == "auto_gun_turret_mp" ) + { + if ( isdefined( eattacker ) && isdefined( eattacker.remoteweapon ) && isdefined( einflictor ) ) + { + if ( eattacker.remoteweapon == einflictor ) + { + if ( isdefined( einflictor.controlled ) && einflictor.controlled == 1 ) + return true; + } + } + } + + return false; +} + +challengekills( data, time ) +{ + victim = data.victim; + player = data.attacker; + attacker = data.attacker; + time = data.time; + victim = data.victim; + weapon = data.sweapon; + time = data.time; + inflictor = data.einflictor; + meansofdeath = data.smeansofdeath; + wasplanting = data.wasplanting; + wasdefusing = data.wasdefusing; + lastweaponbeforetoss = data.lastweaponbeforetoss; + ownerweaponatlaunch = data.ownerweaponatlaunch; + + if ( !isdefined( data.sweapon ) ) + return; + + if ( !isdefined( player ) || !isplayer( player ) ) + return; + + weaponclass = getweaponclass( weapon ); + game["challenge"][victim.team]["allAlive"] = 0; + + if ( level.teambased ) + { + if ( player.team == victim.team ) + return; + } + else if ( player == victim ) + return; + + if ( isdamagefromplayercontrolledaitank( player, inflictor, weapon ) == 1 ) + player addplayerstat( "kill_with_remote_control_ai_tank", 1 ); + + if ( weapon == "auto_gun_turret_mp" ) + { + if ( isdefined( inflictor ) ) + { + if ( !isdefined( inflictor.killcount ) ) + inflictor.killcount = 0; + + inflictor.killcount++; + + if ( inflictor.killcount >= 5 ) + { + inflictor.killcount = 0; + player addplayerstat( "killstreak_5_with_sentry_gun", 1 ); + } + } + + if ( isdamagefromplayercontrolledsentry( player, inflictor, weapon ) == 1 ) + player addplayerstat( "kill_with_remote_control_sentry_gun", 1 ); + } + + if ( weapon == "minigun_mp" || weapon == "inventory_minigun_mp" ) + { + player.deathmachinekills++; + + if ( player.deathmachinekills >= 5 ) + { + player.deathmachinekills = 0; + player addplayerstat( "killstreak_5_with_death_machine", 1 ); + } + } + + if ( data.waslockingon == 1 && weapon == "chopper_minigun_mp" ) + player addplayerstat( "kill_enemy_locking_on_with_chopper_gunner", 1 ); + + if ( isdefined( level.iskillstreakweapon ) ) + { + if ( [[ level.iskillstreakweapon ]]( data.sweapon ) ) + return; + } + + attacker notify( "killed_enemy_player", time, weapon ); + + if ( isdefined( player.primaryloadoutweapon ) && weapon == player.primaryloadoutweapon || isdefined( player.primaryloadoutaltweapon ) && weapon == player.primaryloadoutaltweapon ) + { + if ( player isbonuscardactive( 0, player.class_num ) ) + { + player addbonuscardstat( 0, "kills", 1, player.class_num ); + player addplayerstat( "kill_with_loadout_weapon_with_3_attachments", 1 ); + } + + if ( isdefined( player.secondaryweaponkill ) && player.secondaryweaponkill == 1 ) + { + player.primaryweaponkill = 0; + player.secondaryweaponkill = 0; + + if ( player isbonuscardactive( 2, player.class_num ) ) + { + player addbonuscardstat( 2, "kills", 1, player.class_num ); + player addplayerstat( "kill_with_both_primary_weapons", 1 ); + } + } + else + player.primaryweaponkill = 1; + } + else if ( isdefined( player.secondaryloadoutweapon ) && weapon == player.secondaryloadoutweapon || isdefined( player.secondaryloadoutaltweapon ) && weapon == player.secondaryloadoutaltweapon ) + { + if ( player isbonuscardactive( 1, player.class_num ) ) + player addbonuscardstat( 1, "kills", 1, player.class_num ); + + if ( isdefined( player.primaryweaponkill ) && player.primaryweaponkill == 1 ) + { + player.primaryweaponkill = 0; + player.secondaryweaponkill = 0; + + if ( player isbonuscardactive( 2, player.class_num ) ) + { + player addbonuscardstat( 2, "kills", 1, player.class_num ); + player addplayerstat( "kill_with_both_primary_weapons", 1 ); + } + } + else + player.secondaryweaponkill = 1; + } + + if ( player isbonuscardactive( 5, player.class_num ) || player isbonuscardactive( 4, player.class_num ) || player isbonuscardactive( 3, player.class_num ) ) + player addplayerstat( "kill_with_2_perks_same_category", 1 ); + + baseweaponname = getreffromitemindex( getbaseweaponitemindex( weapon ) ) + "_mp"; + + if ( isdefined( player.weaponkills[baseweaponname] ) ) + { + player.weaponkills[baseweaponname]++; + + if ( player.weaponkills[baseweaponname] == 5 ) + player addweaponstat( baseweaponname, "killstreak_5", 1 ); + + if ( player.weaponkills[baseweaponname] == 10 ) + player addweaponstat( baseweaponname, "killstreak_10", 1 ); + } + else + player.weaponkills[baseweaponname] = 1; + + attachmentname = player getweaponoptic( weapon ); + + if ( isdefined( attachmentname ) && attachmentname != "" ) + { + if ( isdefined( player.attachmentkills[attachmentname] ) ) + { + player.attachmentkills[attachmentname]++; + + if ( player.attachmentkills[attachmentname] == 5 ) + player addweaponstat( weapon, "killstreak_5_attachment", 1 ); + } + else + player.attachmentkills[attachmentname] = 1; + } + + assert( isdefined( player.activecounteruavs ) ); + assert( isdefined( player.activeuavs ) ); + assert( isdefined( player.activesatellites ) ); + + if ( player.activeuavs > 0 ) + player addplayerstat( "kill_while_uav_active", 1 ); + + if ( player.activecounteruavs > 0 ) + player addplayerstat( "kill_while_cuav_active", 1 ); + + if ( player.activesatellites > 0 ) + player addplayerstat( "kill_while_satellite_active", 1 ); + + if ( isdefined( attacker.tacticalinsertiontime ) && attacker.tacticalinsertiontime + 5000 > time ) + { + player addplayerstat( "kill_after_tac_insert", 1 ); + player addweaponstat( "tactical_insertion_mp", "CombatRecordStat", 1 ); + } + + if ( isdefined( victim.tacticalinsertiontime ) && victim.tacticalinsertiontime + 5000 > time ) + player addweaponstat( "tactical_insertion_mp", "headshots", 1 ); + + if ( isdefined( level.isplayertrackedfunc ) ) + { + if ( attacker [[ level.isplayertrackedfunc ]]( victim, time ) ) + { + attacker addplayerstat( "kill_enemy_revealed_by_sensor", 1 ); + attacker addweaponstat( "sensor_grenade_mp", "CombatRecordStat", 1 ); + } + } + + if ( level.teambased ) + { + activeempowner = level.empowners[player.team]; + + if ( isdefined( activeempowner ) ) + { + if ( activeempowner == player ) + player addplayerstat( "kill_while_emp_active", 1 ); + } + } + else if ( isdefined( level.empplayer ) ) + { + if ( level.empplayer == player ) + player addplayerstat( "kill_while_emp_active", 1 ); + } + + if ( isdefined( player.flakjacketclaymore[victim.clientid] ) && player.flakjacketclaymore[victim.clientid] == 1 ) + player addplayerstat( "survive_claymore_kill_planter_flak_jacket_equipped", 1 ); + + if ( isdefined( player.dogsactive ) ) + { + if ( weapon != "dog_bite_mp" ) + { + player.dogsactivekillstreak++; + + if ( player.dogsactivekillstreak > 5 ) + player addplayerstat( "killstreak_5_dogs", 1 ); + } + } + + isstunned = 0; + + if ( victim maps\mp\_utility::isflashbanged() ) + { + if ( isdefined( victim.lastflashedby ) && victim.lastflashedby == player ) + { + player addplayerstat( "kill_flashed_enemy", 1 ); + player addweaponstat( "flash_grenade_mp", "CombatRecordStat", 1 ); + } + + isstunned = 1; + } + + if ( isdefined( victim.concussionendtime ) && victim.concussionendtime > gettime() ) + { + if ( isdefined( victim.lastconcussedby ) && victim.lastconcussedby == player ) + { + player addplayerstat( "kill_concussed_enemy", 1 ); + player addweaponstat( "concussion_grenade_mp", "CombatRecordStat", 1 ); + } + + isstunned = 1; + } + + if ( isdefined( player.laststunnedby ) ) + { + if ( player.laststunnedby == victim && player.laststunnedtime + 5000 > time ) + player addplayerstat( "kill_enemy_who_shocked_you", 1 ); + } + + if ( isdefined( victim.laststunnedby ) && victim.laststunnedtime + 5000 > time ) + { + isstunned = 1; + + if ( victim.laststunnedby == player ) + { + player addplayerstat( "kill_shocked_enemy", 1 ); + player addweaponstat( "proximity_grenade_mp", "CombatRecordStat", 1 ); + + if ( data.smeansofdeath == "MOD_MELEE" ) + player addplayerstat( "shock_enemy_then_stab_them", 1 ); + } + } + + if ( player.mantletime + 5000 > time ) + player addplayerstat( "mantle_then_kill", 1 ); + + if ( isdefined( player.tookweaponfrom ) && isdefined( player.tookweaponfrom[weapon] ) && isdefined( player.tookweaponfrom[weapon].previousowner ) ) + { + if ( level.teambased ) + { + if ( player.tookweaponfrom[weapon].previousowner.team != player.team ) + { + player.pickedupweaponkills[weapon]++; + player addplayerstat( "kill_enemy_with_picked_up_weapon", 1 ); + } + } + else + { + player.pickedupweaponkills[weapon]++; + player addplayerstat( "kill_enemy_with_picked_up_weapon", 1 ); + } + + if ( player.pickedupweaponkills[weapon] >= 5 ) + { + player.pickedupweaponkills[weapon] = 0; + player addplayerstat( "killstreak_5_picked_up_weapon", 1 ); + } + } + + if ( isdefined( victim.explosiveinfo["originalOwnerKill"] ) && victim.explosiveinfo["originalOwnerKill"] == 1 ) + { + if ( victim.explosiveinfo["damageExplosiveKill"] == 1 ) + player addplayerstat( "kill_enemy_shoot_their_explosive", 1 ); + } + + if ( data.attackerstance == "crouch" ) + player addplayerstat( "kill_enemy_while_crouched", 1 ); + else if ( data.attackerstance == "prone" ) + player addplayerstat( "kill_enemy_while_prone", 1 ); + + if ( data.victimstance == "prone" ) + player addplayerstat( "kill_prone_enemy", 1 ); + + if ( data.smeansofdeath == "MOD_HEAD_SHOT" || data.smeansofdeath == "MOD_PISTOL_BULLET" || data.smeansofdeath == "MOD_RIFLE_BULLET" ) + player genericbulletkill( data, victim, weapon ); + + if ( level.teambased ) + { + if ( !isdefined( player.pers["kill_every_enemy"] ) && ( level.playercount[victim.pers["team"]] > 3 && player.pers["killed_players"].size >= level.playercount[victim.pers["team"]] ) ) + { + player addplayerstat( "kill_every_enemy", 1 ); + player.pers["kill_every_enemy"] = 1; + } + } + + switch ( weaponclass ) + { + case "weapon_pistol": + if ( data.smeansofdeath == "MOD_HEAD_SHOT" ) + { + player.pers["pistolHeadshot"]++; + + if ( player.pers["pistolHeadshot"] >= 10 ) + { + player.pers["pistolHeadshot"] = 0; + player addplayerstat( "pistolHeadshot_10_onegame", 1 ); + } + } + + break; + case "weapon_assault": + if ( data.smeansofdeath == "MOD_HEAD_SHOT" ) + { + player.pers["assaultRifleHeadshot"]++; + + if ( player.pers["assaultRifleHeadshot"] >= 5 ) + { + player.pers["assaultRifleHeadshot"] = 0; + player addplayerstat( "headshot_assault_5_onegame", 1 ); + } + } + + break; + case "weapon_smg": + case "weapon_lmg": + break; + case "weapon_sniper": + if ( isdefined( victim.firsttimedamaged ) && victim.firsttimedamaged == time ) + { + player addplayerstat( "kill_enemy_one_bullet_sniper", 1 ); + player addweaponstat( weapon, "kill_enemy_one_bullet_sniper", 1 ); + + if ( !isdefined( player.pers["one_shot_sniper_kills"] ) ) + player.pers["one_shot_sniper_kills"] = 0; + + player.pers["one_shot_sniper_kills"]++; + + if ( player.pers["one_shot_sniper_kills"] == 10 ) + player addplayerstat( "kill_10_enemy_one_bullet_sniper_onegame", 1 ); + } + + break; + case "weapon_cqb": + if ( isdefined( victim.firsttimedamaged ) && victim.firsttimedamaged == time ) + { + player addplayerstat( "kill_enemy_one_bullet_shotgun", 1 ); + player addweaponstat( weapon, "kill_enemy_one_bullet_shotgun", 1 ); + + if ( !isdefined( player.pers["one_shot_shotgun_kills"] ) ) + player.pers["one_shot_shotgun_kills"] = 0; + + player.pers["one_shot_shotgun_kills"]++; + + if ( player.pers["one_shot_shotgun_kills"] == 10 ) + player addplayerstat( "kill_10_enemy_one_bullet_shotgun_onegame", 1 ); + } + + break; + } + + if ( data.smeansofdeath == "MOD_MELEE" ) + { + if ( weaponhasattachment( weapon, "tacknife" ) ) + { + player addplayerstat( "kill_enemy_with_tacknife", 1 ); + player bladekill(); + } + else if ( weapon == "knife_ballistic_mp" ) + { + player bladekill(); + player addweaponstat( weapon, "ballistic_knife_melee", 1 ); + } + else if ( weapon == "knife_held_mp" || weapon == "knife_mp" ) + player bladekill(); + else if ( weapon == "riotshield_mp" ) + { + if ( victim.lastfiretime + 3000 > time ) + player addweaponstat( weapon, "shield_melee_while_enemy_shooting", 1 ); + } + } + else + { + if ( data.smeansofdeath == "MOD_IMPACT" && baseweaponname == "crossbow_mp" ) + { + if ( weaponhasattachment( weapon, "stackfire" ) ) + player addplayerstat( "KILL_CROSSBOW_STACKFIRE", 1 ); + } + else if ( isdefined( ownerweaponatlaunch ) ) + { + if ( weaponhasattachment( ownerweaponatlaunch, "stackfire" ) ) + player addplayerstat( "KILL_CROSSBOW_STACKFIRE", 1 ); + } + + if ( weapon == "knife_ballistic_mp" ) + { + player bladekill(); + + if ( isdefined( player.retreivedblades ) && player.retreivedblades > 0 ) + { + player.retreivedblades--; + player addweaponstat( weapon, "kill_retrieved_blade", 1 ); + } + } + } + + lethalgrenadekill = 0; + + switch ( weapon ) + { + case "bouncingbetty_mp": + lethalgrenadekill = 1; + player notify( "lethalGrenadeKill" ); + break; + case "hatchet_mp": + player bladekill(); + lethalgrenadekill = 1; + player notify( "lethalGrenadeKill" ); + + if ( isdefined( lastweaponbeforetoss ) ) + { + if ( lastweaponbeforetoss == level.riotshield_name ) + { + player addweaponstat( level.riotshield_name, "hatchet_kill_with_shield_equiped", 1 ); + player addplayerstat( "hatchet_kill_with_shield_equiped", 1 ); + } + } + + break; + case "claymore_mp": + lethalgrenadekill = 1; + player notify( "lethalGrenadeKill" ); + player addplayerstat( "kill_with_claymore", 1 ); + + if ( data.washacked ) + player addplayerstat( "kill_with_hacked_claymore", 1 ); + + break; + case "satchel_charge_mp": + lethalgrenadekill = 1; + player notify( "lethalGrenadeKill" ); + player addplayerstat( "kill_with_c4", 1 ); + break; + case "destructible_car_mp": + player addplayerstat( "kill_enemy_withcar", 1 ); + + if ( isdefined( inflictor.destroyingweapon ) ) + player addweaponstat( inflictor.destroyingweapon, "kills_from_cars", 1 ); + + break; + case "sticky_grenade_mp": + lethalgrenadekill = 1; + player notify( "lethalGrenadeKill" ); + + if ( isdefined( victim.explosiveinfo["stuckToPlayer"] ) && victim.explosiveinfo["stuckToPlayer"] == victim ) + { + attacker.pers["stickExplosiveKill"]++; + + if ( attacker.pers["stickExplosiveKill"] >= 5 ) + { + attacker.pers["stickExplosiveKill"] = 0; + player addplayerstat( "stick_explosive_kill_5_onegame", 1 ); + } + } + + break; + case "frag_grenade_mp": + lethalgrenadekill = 1; + player notify( "lethalGrenadeKill" ); + + if ( isdefined( data.victim.explosiveinfo["cookedKill"] ) && data.victim.explosiveinfo["cookedKill"] == 1 ) + player addplayerstat( "kill_with_cooked_grenade", 1 ); + + if ( isdefined( data.victim.explosiveinfo["throwbackKill"] ) && data.victim.explosiveinfo["throwbackKill"] == 1 ) + player addplayerstat( "kill_with_tossed_back_lethal", 1 ); + + break; + case "explosive_bolt_mp": + case "crossbow_mp": + if ( !isdefined( player.crossbowclipkillcount ) ) + player.crossbowclipkillcount = 0; + + player.crossbowclipkillcount++; + + if ( player.crossbowclipkillcount >= weaponclipsize( "crossbow_mp" ) ) + { + player.crossbowclipkillcount = 0; + player addweaponstat( "crossbow_mp", "crossbow_kill_clip", 1 ); + } + + break; + } + + if ( lethalgrenadekill ) + { + if ( player isbonuscardactive( 6, player.class_num ) ) + { + player addbonuscardstat( 6, "kills", 1, player.class_num ); + + if ( !isdefined( player.pers["dangerCloseKills"] ) ) + player.pers["dangerCloseKills"] = 0; + + player.pers["dangerCloseKills"]++; + + if ( player.pers["dangerCloseKills"] == 5 ) + player addplayerstat( "kill_with_dual_lethal_grenades", 1 ); + } + } + + player perkkills( victim, isstunned, time ); +} + +perkkills( victim, isstunned, time ) +{ + player = self; + + if ( player hasperk( "specialty_movefaster" ) ) + player addplayerstat( "perk_movefaster_kills", 1 ); + + if ( player hasperk( "specialty_noname" ) ) + player addplayerstat( "perk_noname_kills", 1 ); + + if ( player hasperk( "specialty_quieter" ) ) + player addplayerstat( "perk_quieter_kills", 1 ); + + if ( player hasperk( "specialty_longersprint" ) ) + { + if ( isdefined( player.lastsprinttime ) && gettime() - player.lastsprinttime < 2500 ) + player addplayerstat( "perk_longersprint", 1 ); + } + + if ( player hasperk( "specialty_fastmantle" ) ) + { + if ( isdefined( player.lastsprinttime ) && gettime() - player.lastsprinttime < 2500 && player playerads() >= 1 ) + player addplayerstat( "perk_fastmantle_kills", 1 ); + } + + if ( player hasperk( "specialty_loudenemies" ) ) + player addplayerstat( "perk_loudenemies_kills", 1 ); + + if ( isstunned == 1 && player hasperk( "specialty_stunprotection" ) ) + player addplayerstat( "perk_protection_stun_kills", 1 ); + + assert( isdefined( victim.activecounteruavs ) ); + activeemp = 0; + + if ( level.teambased ) + { + foreach ( team in level.teams ) + { + if ( team == player.team ) + continue; + + if ( isdefined( level.empowners[team] ) ) + { + activeemp = 1; + break; + } + } + } + else if ( isdefined( level.empplayer ) ) + { + if ( level.empplayer != player ) + activeemp = 1; + } + + activecuav = 0; + + if ( level.teambased ) + { + foreach ( team in level.teams ) + { + if ( team == player.team ) + continue; + + if ( level.activecounteruavs[team] > 0 ) + { + activecuav = 1; + break; + } + } + } + else + { + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] != player ) + { + if ( isdefined( level.activecounteruavs[players[i].entnum] ) && level.activecounteruavs[players[i].entnum] > 0 ) + { + activecuav = 1; + break; + } + } + } + } + + if ( activecuav == 1 || activeemp == 1 ) + { + if ( player hasperk( "specialty_immunecounteruav" ) ) + player addplayerstat( "perk_immune_cuav_kills", 1 ); + } + + activeuavvictim = 0; + + if ( level.teambased ) + { + if ( level.activeuavs[victim.team] > 0 ) + activeuavvictim = 1; + } + else + activeuavvictim = isdefined( level.activeuavs[victim.entnum] ) && level.activeuavs[victim.entnum] > 0; + + if ( activeuavvictim == 1 ) + { + if ( player hasperk( "specialty_gpsjammer" ) ) + player addplayerstat( "perk_gpsjammer_immune_kills", 1 ); + } + + if ( player.lastweaponchange + 5000 > time ) + { + if ( player hasperk( "specialty_fastweaponswitch" ) ) + player addplayerstat( "perk_fastweaponswitch_kill_after_swap", 1 ); + } + + if ( player.scavenged == 1 ) + { + if ( player hasperk( "specialty_scavenger" ) ) + player addplayerstat( "perk_scavenger_kills_after_resupply", 1 ); + } +} + +flakjacketprotected( weapon, attacker ) +{ + if ( weapon == "claymore_mp" ) + self.flakjacketclaymore[attacker.clientid] = 1; + + self addplayerstat( "perk_flak_survive", 1 ); +} + +earnedkillstreak() +{ + if ( self hasperk( "specialty_earnmoremomentum" ) ) + self addplayerstat( "perk_earnmoremomentum_earn_streak", 1 ); +} + +genericbulletkill( data, victim, weapon ) +{ + player = self; + time = data.time; + + if ( player.pers["lastBulletKillTime"] == time ) + player.pers["bulletStreak"]++; + else + player.pers["bulletStreak"] = 1; + + player.pers["lastBulletKillTime"] = time; + + if ( data.victim.idflagstime == time ) + { + if ( data.victim.idflags & level.idflags_penetration ) + { + player addplayerstat( "kill_enemy_through_wall", 1 ); + + if ( isdefined( weapon ) && weaponhasattachment( weapon, "fmj" ) ) + player addplayerstat( "kill_enemy_through_wall_with_fmj", 1 ); + } + } +} + +ishighestscoringplayer( player ) +{ + if ( !isdefined( player.score ) || player.score < 1 ) + return false; + + players = level.players; + + if ( level.teambased ) + team = player.pers["team"]; + else + team = "all"; + + highscore = player.score; + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i].score ) ) + continue; + + if ( players[i] == player ) + continue; + + if ( players[i].score < 1 ) + continue; + + if ( team != "all" && players[i].pers["team"] != team ) + continue; + + if ( players[i].score >= highscore ) + return false; + } + + return true; +} + +spawnwatcher() +{ + self endon( "disconnect" ); + self.pers["stickExplosiveKill"] = 0; + self.pers["pistolHeadshot"] = 0; + self.pers["assaultRifleHeadshot"] = 0; + self.pers["killNemesis"] = 0; + + while ( true ) + { + self waittill( "spawned_player" ); + + self.pers["longshotsPerLife"] = 0; + self.flakjacketclaymore = []; + self.weaponkills = []; + self.attachmentkills = []; + self.retreivedblades = 0; + self.lastreloadtime = 0; + self.crossbowclipkillcount = 0; + self thread watchfordtp(); + self thread watchformantle(); + self thread monitor_player_sprint(); + } +} + +pickedupballisticknife() +{ + self.retreivedblades++; +} + +watchfordtp() +{ + self endon( "disconnect" ); + self endon( "death" ); + + for ( self.dtptime = 0; 1; self.dtptime = gettime() + 4000 ) + self waittill( "dtp_end" ); +} + +watchformantle() +{ + self endon( "disconnect" ); + self endon( "death" ); + + for ( self.mantletime = 0; 1; self.mantletime = mantleendtime ) + self waittill( "mantle_start", mantleendtime ); +} + +disarmedhackedcarepackage() +{ + self addplayerstat( "disarm_hacked_carepackage", 1 ); +} + +destroyed_car() +{ + if ( !isdefined( self ) || !isplayer( self ) ) + return; + + self addplayerstat( "destroy_car", 1 ); +} + +killednemesis() +{ + self.pers["killNemesis"]++; + + if ( self.pers["killNemesis"] >= 5 ) + { + self.pers["killNemesis"] = 0; + self addplayerstat( "kill_nemesis", 1 ); + } +} + +killwhiledamagingwithhpm() +{ + self addplayerstat( "kill_while_damaging_with_microwave_turret", 1 ); +} + +longdistancehatchetkill() +{ + self addplayerstat( "long_distance_hatchet_kill", 1 ); +} + +blockedsatellite() +{ + self addplayerstat( "activate_cuav_while_enemy_satelite_active", 1 ); +} + +longdistancekill() +{ + self.pers["longshotsPerLife"]++; + + if ( self.pers["longshotsPerLife"] >= 3 ) + { + self.pers["longshotsPerLife"] = 0; + self addplayerstat( "longshot_3_onelife", 1 ); + } +} + +challengeroundend( data ) +{ + player = data.player; + winner = data.winner; + + if ( endedearly( winner ) ) + return; + + if ( level.teambased ) + { + winnerscore = game["teamScores"][winner]; + loserscore = getlosersteamscores( winner ); + } + + switch ( level.gametype ) + { + case "sd": + if ( player.team == winner ) + { + if ( game["challenge"][winner]["allAlive"] ) + player addgametypestat( "round_win_no_deaths", 1 ); + + if ( isdefined( player.lastmansddefeat3enemies ) ) + player addgametypestat( "last_man_defeat_3_enemies", 1 ); + } + + break; + default: + break; + } +} + +roundend( winner ) +{ + wait 0.05; + data = spawnstruct(); + data.time = gettime(); + + if ( level.teambased ) + { + if ( isdefined( winner ) && isdefined( level.teams[winner] ) ) + data.winner = winner; + } + else if ( isdefined( winner ) ) + data.winner = winner; + + for ( index = 0; index < level.placement["all"].size; index++ ) + { + data.player = level.placement["all"][index]; + data.place = index; + dochallengecallback( "roundEnd", data ); + } +} + +gameend( winner ) +{ + wait 0.05; + data = spawnstruct(); + data.time = gettime(); + + if ( level.teambased ) + { + if ( isdefined( winner ) && isdefined( level.teams[winner] ) ) + data.winner = winner; + } + else if ( isdefined( winner ) && isplayer( winner ) ) + data.winner = winner; + + for ( index = 0; index < level.placement["all"].size; index++ ) + { + data.player = level.placement["all"][index]; + data.place = index; + dochallengecallback( "gameEnd", data ); + } +} + +getfinalkill( player ) +{ + if ( isplayer( player ) ) + player addplayerstat( "get_final_kill", 1 ); +} + +destroyrcbomb( weaponname ) +{ + self destroyscorestreak( weaponname ); + + if ( weaponname == "hatchet_mp" ) + self addplayerstat( "destroy_rcbomb_with_hatchet", 1 ); +} + +capturedcrate() +{ + if ( isdefined( self.lastrescuedby ) && isdefined( self.lastrescuedtime ) ) + { + if ( self.lastrescuedtime + 5000 > gettime() ) + self.lastrescuedby addplayerstat( "defend_teammate_who_captured_package", 1 ); + } +} + +destroyscorestreak( weaponname ) +{ + if ( isdefined( weaponname ) && weaponname == "qrdrone_turret_mp" ) + self addplayerstat( "destroy_score_streak_with_qrdrone", 1 ); +} + +capturedobjective( capturetime ) +{ + if ( isdefined( self.smokegrenadetime ) && isdefined( self.smokegrenadeposition ) ) + { + if ( self.smokegrenadetime + 14000 > capturetime ) + { + distsq = distancesquared( self.smokegrenadeposition, self.origin ); + + if ( distsq < 57600 ) + { + self addplayerstat( "capture_objective_in_smoke", 1 ); + self addweaponstat( "willy_pete_mp", "CombatRecordStat", 1 ); + } + else + { + + } + } + } +} + +hackedordestroyedequipment() +{ + if ( self hasperk( "specialty_showenemyequipment" ) ) + self addplayerstat( "perk_hacker_destroy", 1 ); +} + +destroyedequipment( weaponname ) +{ + if ( isdefined( weaponname ) && weaponname == "emp_grenade_mp" ) + { + self addplayerstat( "destroy_equipment_with_emp_grenade", 1 ); + self addweaponstat( "emp_grenade_mp", "combatRecordStat", 1 ); + } + + self addplayerstat( "destroy_equipment", 1 ); + self hackedordestroyedequipment(); +} + +destroyedtacticalinsert() +{ + if ( !isdefined( self.pers["tacticalInsertsDestroyed"] ) ) + self.pers["tacticalInsertsDestroyed"] = 0; + + self.pers["tacticalInsertsDestroyed"]++; + + if ( self.pers["tacticalInsertsDestroyed"] >= 5 ) + { + self.pers["tacticalInsertsDestroyed"] = 0; + self addplayerstat( "destroy_5_tactical_inserts", 1 ); + } +} + +bladekill() +{ + if ( !isdefined( self.pers["bladeKills"] ) ) + self.pers["bladeKills"] = 0; + + self.pers["bladeKills"]++; + + if ( self.pers["bladeKills"] >= 15 ) + { + self.pers["bladeKills"] = 0; + self addplayerstat( "kill_15_with_blade", 1 ); + } +} + +destroyedexplosive( weaponname ) +{ + self destroyedequipment( weaponname ); + self addplayerstat( "destroy_explosive", 1 ); +} + +assisted() +{ + self addplayerstat( "assist", 1 ); +} + +earnedmicrowaveassistscore( score ) +{ + self addplayerstat( "assist_score_microwave_turret", score ); + self addplayerstat( "assist_score_killstreak", score ); +} + +earnedcuavassistscore( score ) +{ + self addplayerstat( "assist_score_cuav", score ); + self addplayerstat( "assist_score_killstreak", score ); + self addweaponstat( "counteruav_mp", "assists", 1 ); +} + +earneduavassistscore( score ) +{ + self addplayerstat( "assist_score_uav", score ); + self addplayerstat( "assist_score_killstreak", score ); + self addweaponstat( "radar_mp", "assists", 1 ); +} + +earnedsatelliteassistscore( score ) +{ + self addplayerstat( "assist_score_satellite", score ); + self addplayerstat( "assist_score_killstreak", score ); + self addweaponstat( "radardirection_mp", "assists", 1 ); +} + +earnedempassistscore( score ) +{ + self addplayerstat( "assist_score_emp", score ); + self addplayerstat( "assist_score_killstreak", score ); + self addweaponstat( "emp_mp", "assists", 1 ); +} + +teamcompletedchallenge( team, challenge ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].team ) && players[i].team == team ) + players[i] addgametypestat( challenge, 1 ); + } +} + +endedearly( winner ) +{ + if ( level.hostforcedend ) + return true; + + if ( !isdefined( winner ) ) + return true; + + if ( level.teambased ) + { + if ( winner == "tie" ) + return true; + } + + return false; +} + +getlosersteamscores( winner ) +{ + teamscores = 0; + + foreach ( team in level.teams ) + { + if ( team == winner ) + continue; + + teamscores += game["teamScores"][team]; + } + + return teamscores; +} + +didloserfailchallenge( winner, challenge ) +{ + foreach ( team in level.teams ) + { + if ( team == winner ) + continue; + + if ( game["challenge"][team][challenge] ) + return false; + } + + return true; +} + +challengegameend( data ) +{ + player = data.player; + winner = data.winner; + + if ( isdefined( level.scoreeventgameendcallback ) ) + [[ level.scoreeventgameendcallback ]]( data ); + + if ( endedearly( winner ) ) + return; + + if ( level.teambased ) + { + winnerscore = game["teamScores"][winner]; + loserscore = getlosersteamscores( winner ); + } + + switch ( level.gametype ) + { + case "tdm": + if ( player.team == winner ) + { + if ( winnerscore >= loserscore + 20 ) + player addgametypestat( "CRUSH", 1 ); + } + + mostkillsleastdeaths = 1; + + for ( index = 0; index < level.placement["all"].size; index++ ) + { + if ( level.placement["all"][index].deaths < player.deaths ) + mostkillsleastdeaths = 0; + + if ( level.placement["all"][index].kills > player.kills ) + mostkillsleastdeaths = 0; + } + + if ( mostkillsleastdeaths && player.kills > 0 && level.placement["all"].size > 3 ) + player addgametypestat( "most_kills_least_deaths", 1 ); + + break; + case "dm": + if ( player == winner ) + { + if ( level.placement["all"].size >= 2 ) + { + secondplace = level.placement["all"][1]; + + if ( player.kills >= secondplace.kills + 7 ) + player addgametypestat( "CRUSH", 1 ); + } + } + + break; + case "ctf": + if ( player.team == winner ) + { + if ( loserscore == 0 ) + player addgametypestat( "SHUT_OUT", 1 ); + } + + break; + case "dom": + if ( player.team == winner ) + { + if ( winnerscore >= loserscore + 70 ) + player addgametypestat( "CRUSH", 1 ); + } + + break; + case "hq": + if ( player.team == winner && winnerscore > 0 ) + { + if ( winnerscore >= loserscore + 70 ) + player addgametypestat( "CRUSH", 1 ); + } + + break; + case "koth": + if ( player.team == winner && winnerscore > 0 ) + { + if ( winnerscore >= loserscore + 70 ) + player addgametypestat( "CRUSH", 1 ); + } + + if ( player.team == winner && winnerscore > 0 ) + { + if ( winnerscore >= loserscore + 110 ) + player addgametypestat( "ANNIHILATION", 1 ); + } + + break; + case "dem": + if ( player.team == game["defenders"] && player.team == winner ) + { + if ( loserscore == 0 ) + player addgametypestat( "SHUT_OUT", 1 ); + } + + break; + case "sd": + if ( player.team == winner ) + { + if ( loserscore <= 1 ) + player addgametypestat( "CRUSH", 1 ); + } + default: + break; + } +} + +multikill( killcount, weapon ) +{ + if ( killcount >= 3 && isdefined( self.lastkillwheninjured ) ) + { + if ( self.lastkillwheninjured + 5000 > gettime() ) + self addplayerstat( "multikill_3_near_death", 1 ); + } +} + +domattackermultikill( killcount ) +{ + self addgametypestat( "kill_2_enemies_capturing_your_objective", 1 ); +} + +totaldomination( team ) +{ + teamcompletedchallenge( team, "control_3_points_3_minutes" ); +} + +holdflagentirematch( team, label ) +{ + switch ( label ) + { + case "_a": + event = "hold_a_entire_match"; + break; + case "_b": + event = "hold_b_entire_match"; + break; + case "_c": + event = "hold_c_entire_match"; + break; + default: + return; + } + + teamcompletedchallenge( team, event ); +} + +capturedbfirstminute() +{ + self addgametypestat( "capture_b_first_minute", 1 ); +} + +controlzoneentirely( team ) +{ + teamcompletedchallenge( team, "control_zone_entirely" ); +} + +multi_lmg_smg_kill() +{ + self addplayerstat( "multikill_3_lmg_or_smg_hip_fire", 1 ); +} + +killedzoneattacker( weapon ) +{ + if ( weapon == "planemortar_mp" || weapon == "remote_missile_missile_mp" || weapon == "remote_missile_bomblet_mp" ) + self thread updatezonemultikills(); +} + +killeddog() +{ + origin = self.origin; + + if ( level.teambased ) + { + teammates = get_team_alive_players_s( self.team ); + + foreach ( player in teammates.a ) + { + if ( player == self ) + continue; + + distsq = distancesquared( origin, player.origin ); + + if ( distsq < 57600 ) + { + self addplayerstat( "killed_dog_close_to_teammate", 1 ); + break; + } + } + } +} + +updatezonemultikills() +{ + self endon( "disconnect" ); + level endon( "game_ended" ); + self notify( "updateRecentZoneKills" ); + self endon( "updateRecentZoneKills" ); + + if ( !isdefined( self.recentzonekillcount ) ) + self.recentzonekillcount = 0; + + self.recentzonekillcount++; + wait 4.0; + + if ( self.recentzonekillcount > 1 ) + self addplayerstat( "multikill_2_zone_attackers", 1 ); + + self.recentzonekillcount = 0; +} + +multi_rcbomb_kill() +{ + self addplayerstat( "muiltikill_2_with_rcbomb", 1 ); +} + +multi_remotemissile_kill() +{ + self addplayerstat( "multikill_3_remote_missile", 1 ); +} + +multi_mgl_kill() +{ + self addplayerstat( "multikill_3_with_mgl", 1 ); +} + +immediatecapture() +{ + self addgametypestat( "immediate_capture", 1 ); +} + +killedlastcontester() +{ + self addgametypestat( "contest_then_capture", 1 ); +} + +bothbombsdetonatewithintime() +{ + self addgametypestat( "both_bombs_detonate_10_seconds", 1 ); +} + +fullclipnomisses( weaponclass, weapon ) +{ + +} + +destroyedturret( weaponname ) +{ + self destroyscorestreak( weaponname ); + self addplayerstat( "destroy_turret", 1 ); +} + +calledincarepackage() +{ + self.pers["carepackagesCalled"]++; + + if ( self.pers["carepackagesCalled"] >= 3 ) + { + self addplayerstat( "call_in_3_care_packages", 1 ); + self.pers["carepackagesCalled"] = 0; + } +} + +destroyedhelicopter( attacker, weapon, damagetype, playercontrolled ) +{ + attacker destroyscorestreak( weapon ); + + if ( damagetype == "MOD_RIFLE_BULLET" || damagetype == "MOD_PISTOL_BULLET" ) + attacker addplayerstat( "destroyed_helicopter_with_bullet", 1 ); +} + +destroyedqrdrone( damagetype, weapon ) +{ + self destroyscorestreak( weapon ); + self addplayerstat( "destroy_qrdrone", 1 ); + + if ( damagetype == "MOD_RIFLE_BULLET" || damagetype == "MOD_PISTOL_BULLET" ) + self addplayerstat( "destroyed_qrdrone_with_bullet", 1 ); + + self destroyedplayercontrolledaircraft(); +} + +destroyedplayercontrolledaircraft() +{ + if ( self hasperk( "specialty_noname" ) ) + self addplayerstat( "destroy_helicopter", 1 ); +} + +destroyedaircraft( attacker, weapon ) +{ + attacker destroyscorestreak( weapon ); + + if ( isdefined( weapon ) ) + { + if ( weapon == "emp_mp" || weapon == "killstreak_emp_mp" ) + attacker addplayerstat( "destroy_aircraft_with_emp", 1 ); + else if ( weapon == "missile_drone_projectile_mp" || weapon == "missile_drone_mp" ) + attacker addplayerstat( "destroy_aircraft_with_missile_drone", 1 ); + } + + if ( attacker hasperk( "specialty_nottargetedbyairsupport" ) ) + attacker addplayerstat( "perk_nottargetedbyairsupport_destroy_aircraft", 1 ); + + attacker addplayerstat( "destroy_aircraft", 1 ); +} + +killstreakten() +{ + primary = self getloadoutitem( self.class_num, "primary" ); + + if ( primary != 0 ) + return; + + secondary = self getloadoutitem( self.class_num, "secondary" ); + + if ( secondary != 0 ) + return; + + primarygrenade = self getloadoutitem( self.class_num, "primarygrenade" ); + + if ( primarygrenade != 0 ) + return; + + specialgrenade = self getloadoutitem( self.class_num, "specialgrenade" ); + + if ( specialgrenade != 0 ) + return; + + for ( numspecialties = 0; numspecialties < level.maxspecialties; numspecialties++ ) + { + perk = self getloadoutitem( self.class_num, "specialty" + ( numspecialties + 1 ) ); + + if ( perk != 0 ) + return; + } + + self addplayerstat( "killstreak_10_no_weapons_perks", 1 ); +} + +scavengedgrenade() +{ + self endon( "disconnect" ); + self endon( "death" ); + self notify( "scavengedGrenade" ); + self endon( "scavengedGrenade" ); + + for (;;) + { + self waittill( "lethalGrenadeKill" ); + + self addplayerstat( "kill_with_resupplied_lethal_grenade", 1 ); + } +} + +stunnedtankwithempgrenade( attacker ) +{ + attacker addplayerstat( "stun_aitank_wIth_emp_grenade", 1 ); +} + +playerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, shitloc, attackerstance ) +{ +/# + print( level.gametype ); +#/ + self.anglesondeath = self getplayerangles(); + + if ( isdefined( attacker ) ) + attacker.anglesonkill = attacker getplayerangles(); + + if ( !isdefined( sweapon ) ) + sweapon = "none"; + + self endon( "disconnect" ); + data = spawnstruct(); + data.victim = self; + data.victimstance = self getstance(); + data.einflictor = einflictor; + data.attacker = attacker; + data.attackerstance = attackerstance; + data.idamage = idamage; + data.smeansofdeath = smeansofdeath; + data.sweapon = sweapon; + data.shitloc = shitloc; + data.time = gettime(); + + if ( isdefined( einflictor ) && isdefined( einflictor.lastweaponbeforetoss ) ) + data.lastweaponbeforetoss = einflictor.lastweaponbeforetoss; + + if ( isdefined( einflictor ) && isdefined( einflictor.ownerweaponatlaunch ) ) + data.ownerweaponatlaunch = einflictor.ownerweaponatlaunch; + + waslockingon = 0; + + if ( isdefined( einflictor.locking_on ) ) + waslockingon |= einflictor.locking_on; + + if ( isdefined( einflictor.locked_on ) ) + waslockingon |= einflictor.locked_on; + + waslockingon &= 1 << data.victim.entnum; + + if ( waslockingon != 0 ) + data.waslockingon = 1; + else + data.waslockingon = 0; + + data.washacked = einflictor maps\mp\_utility::ishacked(); + data.wasplanting = data.victim.isplanting; + + if ( !isdefined( data.wasplanting ) ) + data.wasplanting = 0; + + data.wasdefusing = data.victim.isdefusing; + + if ( !isdefined( data.wasdefusing ) ) + data.wasdefusing = 0; + + data.victimweapon = data.victim.currentweapon; + data.victimonground = data.victim isonground(); + + if ( isplayer( attacker ) ) + { + data.attackeronground = data.attacker isonground(); + + if ( !isdefined( data.attackerstance ) ) + data.attackerstance = data.attacker getstance(); + } + else + { + data.attackeronground = 0; + data.attackerstance = "stand"; + } + + waitandprocessplayerkilledcallback( data ); + data.attacker notify( "playerKilledChallengesProcessed" ); +} + +waittillslowprocessallowed() +{ + while ( level.lastslowprocessframe == gettime() ) + wait 0.05; + + level.lastslowprocessframe = gettime(); +} + +doscoreeventcallback( callback, data ) +{ + if ( !isdefined( level.scoreeventcallbacks ) ) + return; + + if ( !isdefined( level.scoreeventcallbacks[callback] ) ) + return; + + if ( isdefined( data ) ) + { + for ( i = 0; i < level.scoreeventcallbacks[callback].size; i++ ) + thread [[ level.scoreeventcallbacks[callback][i] ]]( data ); + } + else + { + for ( i = 0; i < level.scoreeventcallbacks[callback].size; i++ ) + thread [[ level.scoreeventcallbacks[callback][i] ]](); + } +} + +waitandprocessplayerkilledcallback( data ) +{ + if ( isdefined( data.attacker ) ) + data.attacker endon( "disconnect" ); + + wait 0.05; + waittillslowprocessallowed(); + level thread dochallengecallback( "playerKilled", data ); + level thread doscoreeventcallback( "playerKilled", data ); +} + +weaponisknife( weapon ) +{ + if ( weapon == "knife_held_mp" || weapon == "knife_mp" || weapon == "knife_ballistic_mp" ) + return true; + + return false; +} + +eventreceived( eventname ) +{ + self endon( "disconnect" ); + waittillslowprocessallowed(); + + switch ( level.gametype ) + { + case "tdm": + if ( eventname == "killstreak_10" ) + self addgametypestat( "killstreak_10", 1 ); + else if ( eventname == "killstreak_15" ) + self addgametypestat( "killstreak_15", 1 ); + else if ( eventname == "killstreak_20" ) + self addgametypestat( "killstreak_20", 1 ); + else if ( eventname == "multikill_3" ) + self addgametypestat( "multikill_3", 1 ); + else if ( eventname == "kill_enemy_who_killed_teammate" ) + self addgametypestat( "kill_enemy_who_killed_teammate", 1 ); + else if ( eventname == "kill_enemy_injuring_teammate" ) + self addgametypestat( "kill_enemy_injuring_teammate", 1 ); + + break; + case "dm": + if ( eventname == "killstreak_10" ) + self addgametypestat( "killstreak_10", 1 ); + else if ( eventname == "killstreak_15" ) + self addgametypestat( "killstreak_15", 1 ); + else if ( eventname == "killstreak_20" ) + self addgametypestat( "killstreak_20", 1 ); + else if ( eventname == "killstreak_30" ) + self addgametypestat( "killstreak_30", 1 ); + + break; + case "sd": + if ( eventname == "defused_bomb_last_man_alive" ) + self addgametypestat( "defused_bomb_last_man_alive", 1 ); + else if ( eventname == "elimination_and_last_player_alive" ) + self addgametypestat( "elimination_and_last_player_alive", 1 ); + else if ( eventname == "killed_bomb_planter" ) + self addgametypestat( "killed_bomb_planter", 1 ); + else if ( eventname == "killed_bomb_defuser" ) + self addgametypestat( "killed_bomb_defuser", 1 ); + + break; + case "ctf": + if ( eventname == "kill_flag_carrier" ) + self addgametypestat( "kill_flag_carrier", 1 ); + else if ( eventname == "defend_flag_carrier" ) + self addgametypestat( "defend_flag_carrier", 1 ); + + break; + case "dem": + if ( eventname == "killed_bomb_planter" ) + self addgametypestat( "killed_bomb_planter", 1 ); + else if ( eventname == "killed_bomb_defuser" ) + self addgametypestat( "killed_bomb_defuser", 1 ); + + break; + default: + break; + } +} + +monitor_player_sprint() +{ + self endon( "disconnect" ); + self endon( "death" ); + + for ( self.lastsprinttime = undefined; 1; self.lastsprinttime = gettime() ) + { + self waittill( "sprint_begin" ); + + self waittill( "sprint_end" ); + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/_compass.gsc b/ZM/Maps/Tranzit Diner/maps/mp/_compass.gsc new file mode 100644 index 0000000..d2e8842 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/_compass.gsc @@ -0,0 +1,76 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +setupminimap( material ) +{ + requiredmapaspectratio = getdvarfloat( "scr_RequiredMapAspectratio" ); + corners = getentarray( "minimap_corner", "targetname" ); + + if ( corners.size != 2 ) + { +/# + println( "^1Error: There are not exactly two \"minimap_corner\" entities in the map. Could not set up minimap." ); +#/ + return; + } + + corner0 = ( corners[0].origin[0], corners[0].origin[1], 0 ); + corner1 = ( corners[1].origin[0], corners[1].origin[1], 0 ); + cornerdiff = corner1 - corner0; + north = ( cos( getnorthyaw() ), sin( getnorthyaw() ), 0 ); + west = ( 0 - north[1], north[0], 0 ); + + if ( vectordot( cornerdiff, west ) > 0 ) + { + if ( vectordot( cornerdiff, north ) > 0 ) + { + northwest = corner1; + southeast = corner0; + } + else + { + side = vecscale( north, vectordot( cornerdiff, north ) ); + northwest = corner1 - side; + southeast = corner0 + side; + } + } + else if ( vectordot( cornerdiff, north ) > 0 ) + { + side = vecscale( north, vectordot( cornerdiff, north ) ); + northwest = corner0 + side; + southeast = corner1 - side; + } + else + { + northwest = corner0; + southeast = corner1; + } + + if ( requiredmapaspectratio > 0 ) + { + northportion = vectordot( northwest - southeast, north ); + westportion = vectordot( northwest - southeast, west ); + mapaspectratio = westportion / northportion; + + if ( mapaspectratio < requiredmapaspectratio ) + { + incr = requiredmapaspectratio / mapaspectratio; + addvec = vecscale( west, westportion * ( incr - 1 ) * 0.5 ); + } + else + { + incr = mapaspectratio / requiredmapaspectratio; + addvec = vecscale( north, northportion * ( incr - 1 ) * 0.5 ); + } + + northwest += addvec; + southeast -= addvec; + } + + setminimap( material, northwest[0], northwest[1], southeast[0], southeast[1] ); +} + +vecscale( vec, scalar ) +{ + return ( vec[0] * scalar, vec[1] * scalar, vec[2] * scalar ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/_createfx.gsc b/ZM/Maps/Tranzit Diner/maps/mp/_createfx.gsc new file mode 100644 index 0000000..4353be1 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/_createfx.gsc @@ -0,0 +1,2944 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\_createfxmenu; +#include maps\mp\_createfxundo; +#include maps\mp\_fx; +#include maps\mp\_script_gen; + +createfx() +{ +/# + println( "^2Running CreateFX 2.0" ); +#/ + if ( ismp() ) + { + init_mp_paths(); + level.timelimitoverride = 1; + } + else + init_sp_paths(); + + precachemodel( "fx_axis_createfx" ); + precacheshader( "black" ); + + if ( getdvar( "createfx_scaleid" ) == "" ) + setdvar( "createfx_scaleid", "0.5" ); + + if ( getdvar( "createfx_print_frames" ) == "" ) + setdvar( "createfx_print_frames", "3" ); + + if ( getdvar( "createfx_drawaxis" ) == "" ) + setdvar( "createfx_drawaxis", "1" ); + + if ( getdvar( "createfx_drawaxis_range" ) == "" ) + setdvar( "createfx_drawaxis_range", "2000" ); + + if ( getdvar( "createfx_autosave_time" ) == "" ) + setdvar( "createfx_autosave_time", "300" ); + + if ( getdvar( "createfx_oneshot_min_delay" ) == "" ) + setdvar( "createfx_oneshot_min_delay", "-100" ); + + if ( getdvar( "createfx_oneshot_max_delay" ) == "" ) + setdvar( "createfx_oneshot_max_delay", "-15" ); + + flag_init( "createfx_saving" ); + + if ( !isdefined( level.createfx ) ) + level.createfx = []; + + if ( !isdefined( level.cfx_uniqueid ) ) + level.cfx_uniqueid = 0; + + level.cfx_last_action = "none"; + + if ( !ismp() ) + level thread [[ level.cfx_func_run_gump_func ]](); + + if ( isdefined( level.createfx_callback_thread ) ) + level thread [[ level.createfx_callback_thread ]](); + + if ( ismp() ) + { + level.callbackplayerdisconnect = ::empty; + level.callbackplayerdamage = ::damage_void; + level.callbackplayerkilled = ::empty; + level.callbackplayerconnect = ::callback_playerconnect; + + while ( !isdefined( level.player ) ) + wait 0.05; + + thread createfxdelay(); + } + + level.is_camera_on = 0; + thread createfxlogic(); + + level waittill( "eternity" ); +} + +fx_init() +{ + if ( ismp() ) + init_client_mp_variables(); + else + init_client_sp_variables(); + + level.exploderfunction = level.cfx_exploder_before; + waittillframeend; + waittillframeend; + level.exploderfunction = level.cfx_exploder_after; + level.non_fx_ents = 0; + + if ( level.createfx_enabled ) + { + triggers = getentarray( "trigger_multiple", "classname" ); + + for ( i = 0; i < triggers.size; i++ ) + triggers[i] delete(); + + triggers = getentarray( "trigger_once", "classname" ); + + for ( i = 0; i < triggers.size; i++ ) + triggers[i] delete(); + + triggers = getentarray( "trigger_box", "classname" ); + + for ( i = 0; i < triggers.size; i++ ) + triggers[i] delete(); + + triggers = getentarray( "trigger_radius", "classname" ); + + for ( i = 0; i < triggers.size; i++ ) + triggers[i] delete(); + + triggers = getentarray( "trigger_lookat", "classname" ); + + for ( i = 0; i < triggers.size; i++ ) + triggers[i] delete(); + + triggers = getentarray( "trigger_damage", "classname" ); + + for ( i = 0; i < triggers.size; i++ ) + triggers[i] delete(); + + sm = getentarray( "spawn_manager", "classname" ); + + for ( i = 0; i < sm.size; i++ ) + sm[i] delete(); + + delete_spawns(); + + if ( !ismp() ) + { + delete_arrays_in_sp(); +/# + println( "We're not in MP!" ); +#/ + } + } + + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + ent set_forward_and_up_vectors(); + + if ( level.clientscripts ) + { + if ( !level.createfx_enabled ) + continue; + } + + if ( isdefined( ent.model ) ) + level.non_fx_ents++; + + if ( ent.v["type"] == "loopfx" ) + ent thread [[ level.cfx_func_loopfx ]](); + + if ( ent.v["type"] == "oneshotfx" ) + ent thread [[ level.cfx_func_oneshotfx ]](); + + if ( ent.v["type"] == "soundfx" ) + ent thread [[ level.cfx_func_soundfx ]](); + } +} + +add_effect( name, effect ) +{ + if ( !isdefined( level._effect ) ) + level._effect = []; + + level._effect[name] = loadfx( effect ); +} + +createeffect( type, fxid ) +{ + ent = undefined; + + if ( !isdefined( level.createfx_enabled ) ) + level.createfx_enabled = getdvar( "createfx" ) != ""; + + if ( !isdefined( level.createfxent ) ) + level.createfxent = []; + + if ( level.createfx_enabled ) + { + if ( !isdefined( level.cfx_uniqueid ) ) + level.cfx_uniqueid = 0; + + ent = spawnstruct(); + ent.uniqueid = level.cfx_uniqueid; + level.cfx_uniqueid++; + } + else if ( type == "exploder" ) + ent = spawnstruct(); + else + { + if ( !isdefined( level._fake_createfx_struct ) ) + level._fake_createfx_struct = spawnstruct(); + + ent = level._fake_createfx_struct; + } + + level.createfxent[level.createfxent.size] = ent; + ent.v = []; + ent.v["type"] = type; + ent.v["fxid"] = fxid; + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["origin"] = ( 0, 0, 0 ); + ent.drawn = 1; + return ent; +} + +createloopsound() +{ + ent = spawnstruct(); + + if ( !isdefined( level.createfxent ) ) + level.createfxent = []; + + level.createfxent[level.createfxent.size] = ent; + ent.v = []; + ent.v["type"] = "soundfx"; + ent.v["fxid"] = "No FX"; + ent.v["soundalias"] = "nil"; + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["origin"] = ( 0, 0, 0 ); + ent.drawn = 1; + return ent; +} + +set_forward_and_up_vectors() +{ + self.v["up"] = anglestoup( self.v["angles"] ); + self.v["forward"] = anglestoforward( self.v["angles"] ); +} + +createfxlogic() +{ + waittillframeend; + menu_init(); + + if ( !ismp() ) + { + players = get_players(); + + if ( !isdefined( players ) || players.size == 0 ) + level waittill( "first_player_ready" ); + } +/# + adddebugcommand( "noclip" ); +#/ + if ( !isdefined( level._effect ) ) + level._effect = []; + + if ( getdvar( "createfx_map" ) == "" ) + setdvar( "createfx_map", level.script ); + else if ( getdvar( "createfx_map" ) == level.script ) + { + if ( !ismp() ) + { + playerpos = []; + playerpos[0] = getdvarint( _hash_274F266C ); + playerpos[1] = getdvarint( _hash_274F266D ); + playerpos[2] = getdvarint( _hash_274F266E ); + player = get_players()[0]; + player setorigin( ( playerpos[0], playerpos[1], playerpos[2] ) ); + } + } +/# + filename = level.cfx_server_scriptdata + level.script + "_fx.gsc"; + file = openfile( filename, "append" ); + level.write_error = ""; + + if ( file == -1 ) + level.write_error = filename; + else + closefile( file ); +#/ + level.createfxhudelements = []; + level.createfx_hudelements = 100; + stroffsetx = []; + stroffsety = []; + stroffsetx[0] = 0; + stroffsety[0] = 0; + stroffsetx[1] = 1; + stroffsety[1] = 1; + stroffsetx[2] = -2; + stroffsety[2] = 1; + setdvar( "fx", "nil" ); + crosshair = newdebughudelem(); + crosshair.location = 0; + crosshair.alignx = "center"; + crosshair.aligny = "middle"; + crosshair.foreground = 1; + crosshair.fontscale = 2; + crosshair.sort = 20; + crosshair.alpha = 1; + crosshair.x = 320; + crosshair.y = 233; + crosshair settext( "." ); + center_text_init(); + level.cleartextmarker = newdebughudelem(); + level.cleartextmarker.alpha = 0; + level.cleartextmarker settext( "marker" ); + + for ( i = 0; i < level.createfx_hudelements; i++ ) + { + newstrarray = []; + + for ( p = 0; p < 2; p++ ) + { + newstr = newhudelem(); + newstr.alignx = "left"; + newstr.location = 0; + newstr.foreground = 1; + newstr.fontscale = 1.1; + newstr.sort = 20 - p; + newstr.alpha = 1; + newstr.x = 0 + stroffsetx[p]; + newstr.y = 60 + stroffsety[p] + i * 15; + + if ( p > 0 ) + newstr.color = ( 0, 0, 0 ); + + newstrarray[newstrarray.size] = newstr; + } + + level.createfxhudelements[i] = newstrarray; + } + + level.selectedmove_up = 0; + level.selectedmove_forward = 0; + level.selectedmove_right = 0; + level.selectedrotate_pitch = 0; + level.selectedrotate_roll = 0; + level.selectedrotate_yaw = 0; + level.selected_fx = []; + level.selected_fx_ents = []; + level.createfx_lockedlist = []; + level.createfx_lockedlist["escape"] = 1; + level.createfx_lockedlist["BUTTON_LSHLDR"] = 1; + level.createfx_lockedlist["BUTTON_RSHLDR"] = 1; + level.createfx_lockedlist["mouse1"] = 1; + level.createfx_lockedlist["ctrl"] = 1; + level.createfx_draw_enabled = 1; + level.buttonisheld = []; + axismode = 0; + colors = []; + colors["loopfx"]["selected"] = ( 1.0, 1.0, 0.2 ); + colors["loopfx"]["highlighted"] = ( 0.4, 0.95, 1.0 ); + colors["loopfx"]["default"] = ( 0.3, 0.5, 1.0 ); + colors["oneshotfx"]["selected"] = ( 1.0, 1.0, 0.2 ); + colors["oneshotfx"]["highlighted"] = ( 0.33, 0.97, 1.0 ); + colors["oneshotfx"]["default"] = ( 0.1, 0.73, 0.73 ); + colors["exploder"]["selected"] = ( 1.0, 1.0, 0.2 ); + colors["exploder"]["highlighted"] = ( 1.0, 0.1, 0.1 ); + colors["exploder"]["default"] = ( 1.0, 0.1, 0.1 ); + colors["rainfx"]["selected"] = ( 1.0, 1.0, 0.2 ); + colors["rainfx"]["highlighted"] = ( 0.95, 0.4, 0.95 ); + colors["rainfx"]["default"] = ( 0.78, 0.0, 0.73 ); + colors["soundfx"]["selected"] = ( 1.0, 1.0, 0.2 ); + colors["soundfx"]["highlighted"] = ( 0.5, 1.0, 0.75 ); + colors["soundfx"]["default"] = ( 0.2, 0.9, 0.2 ); + lasthighlightedent = undefined; + level.fx_rotating = 0; + setmenu( "none" ); + level.createfx_selecting = 0; + level.createfx_last_player_origin = ( 0, 0, 0 ); + level.createfx_last_player_forward = ( 0, 0, 0 ); + level.createfx_last_view_change_test = 0; + player = get_players()[0]; + black = newdebughudelem(); + black.x = -120; + black.y = 200; + black.foreground = 0; + black setshader( "black", 250, 160 ); + black.alpha = 0; + level.createfx_inputlocked = 0; + help_on_last_frame = 0; + + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + ent post_entity_creation_function(); + } + + thread draw_distance(); + lastselectentity = undefined; + thread createfx_autosave(); + + if ( !ismp() ) + make_sp_player_invulnerable( player ); + + for (;;) + { + player = get_players()[0]; + changedselectedents = 0; + right = anglestoright( player getplayerangles() ); + forward = anglestoforward( player getplayerangles() ); + up = anglestoup( player getplayerangles() ); + dot = 0.85; + placeent_vector = vectorscale( forward, 750 ); + level.createfxcursor = bullettrace( player geteye(), player geteye() + placeent_vector, 0, undefined ); + highlightedent = undefined; + level.buttonclick = []; + level.button_is_kb = []; + process_button_held_and_clicked(); + ctrlheld = button_is_held( "ctrl", "BUTTON_LSHLDR" ); + shiftheld = button_is_held( "shift" ); + functionheld = button_is_held( "f" ); + leftclick = button_is_clicked( "mouse1", "BUTTON_A" ); + leftheld = button_is_held( "mouse1", "BUTTON_A" ); + create_fx_menu(); + + if ( button_is_clicked( "BUTTON_X" ) || shiftheld && button_is_clicked( "x" ) ) + axismode = !axismode; + + if ( button_is_clicked( "F2" ) || functionheld && button_is_clicked( "2" ) ) + toggle_createfx_drawing(); + + if ( button_is_clicked( "F3" ) || functionheld && button_is_clicked( "3" ) ) + print_ambient_fx_inventory(); + + if ( button_is_clicked( "F5" ) || functionheld && button_is_clicked( "5" ) ) + createfx_save(); + + if ( button_is_clicked( "ins", "i" ) ) + insert_effect(); + + if ( button_is_clicked( "c" ) ) + { + if ( level.is_camera_on == 0 ) + { +/# + adddebugcommand( "noclip" ); +#/ + level thread handle_camera(); + level.is_camera_on = 1; + } + else if ( level.is_camera_on == 1 ) + { +/# + adddebugcommand( "noclip" ); +#/ + level notify( "new_camera" ); + level.is_camera_on = 0; + axismode = 0; + } + } + + if ( button_is_held( "BUTTON_RTRIG" ) && level.is_camera_on ) + axismode = 1; + else if ( !button_is_held( "BUTTON_RTRIG" ) && level.is_camera_on ) + axismode = 0; + + if ( button_is_clicked( "del" ) || !shiftheld && button_is_clicked( "d" ) ) + delete_pressed(); + + if ( button_is_clicked( "end" ) || shiftheld && button_is_clicked( "d" ) ) + { + drop_selection_to_ground(); + changedselectedents = 1; + } + + if ( button_is_clicked( "s" ) ) + { + setmenu( "select_by_property" ); + wait 0.05; + } + + if ( isdefined( level.cfx_selected_prop ) ) + { + if ( ctrlheld ) + select_ents_by_property( level.cfx_selected_prop, 1 ); + else + select_ents_by_property( level.cfx_selected_prop ); + + level.cfx_selected_prop = undefined; + } + + if ( button_is_clicked( "j" ) ) + { + setmenu( "jump_to_effect" ); + draw_effects_list( "Select effect to jump to:" ); + } + + if ( button_is_clicked( "escape" ) ) + clear_settable_fx(); + + if ( button_is_clicked( "space" ) && !shiftheld ) + set_off_exploders(); + + if ( button_is_clicked( "space" ) && shiftheld ) + turn_off_exploders(); + + if ( button_is_clicked( "tab", "BUTTON_RSHLDR" ) ) + { + move_selection_to_cursor(); + changedselectedents = 1; + } + + if ( button_is_clicked( "z" ) ) + { + if ( shiftheld ) + { + + } + else + undo(); + } + + if ( button_is_held( "q", "F1" ) ) + { + help_on_last_frame = 1; + show_help(); + wait 0.05; + continue; + } + else if ( help_on_last_frame == 1 ) + { + clear_fx_hudelements(); + help_on_last_frame = 0; + } + + if ( button_is_clicked( "BUTTON_LSTICK" ) && !ctrlheld ) + copy_ents(); + + if ( button_is_clicked( "BUTTON_RSTICK" ) ) + { + if ( ctrlheld ) + paste_ents_onto_ents(); + else + paste_ents(); + } + + if ( isdefined( level.selected_fx_option_index ) ) + menu_fx_option_set(); + + if ( button_is_held( "BUTTON_RTRIG" ) && button_is_held( "BUTTON_LTRIG" ) ) + { + move_player_around_map_fast(); + wait 0.25; + continue; + } + + if ( menu( "none" ) ) + { + if ( button_is_clicked( "rightarrow" ) ) + move_player_to_next_same_effect( 1, lastselectentity ); + else if ( button_is_clicked( "leftarrow" ) ) + move_player_to_next_same_effect( 0, lastselectentity ); + } + + if ( level.write_error != "" ) + { + level notify( "write_error" ); + thread write_error_msg( level.write_error ); + level.write_error = ""; + } + + highlightedent = level.fx_highlightedent; + + if ( leftclick || gettime() - level.createfx_last_view_change_test > 250 ) + { + if ( leftclick || vector_changed( level.createfx_last_player_origin, player.origin ) || dot_changed( level.createfx_last_player_forward, forward ) ) + { + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + + if ( !ent.drawn ) + continue; + + difference = vectornormalize( ent.v["origin"] - player.origin + vectorscale( ( 0, 0, 1 ), 55.0 ) ); + newdot = vectordot( forward, difference ); + + if ( newdot < dot ) + continue; + + if ( newdot == dot ) + { + if ( ent_is_selected( ent ) ) + continue; + } + + dot = newdot; + highlightedent = ent; + highlightedent.last_fx_index = i; + } + + level.fx_highlightedent = highlightedent; + level.createfx_last_player_origin = player.origin; + level.createfx_last_player_forward = forward; + } + + level.createfx_last_view_change_test = gettime(); + } + + if ( isdefined( highlightedent ) ) + { + if ( isdefined( lasthighlightedent ) ) + { + if ( lasthighlightedent != highlightedent ) + { + if ( !ent_is_selected( lasthighlightedent ) ) + lasthighlightedent thread entity_highlight_disable(); + + if ( !ent_is_selected( highlightedent ) ) + highlightedent thread entity_highlight_enable(); + } + } + else if ( !ent_is_selected( highlightedent ) ) + highlightedent thread entity_highlight_enable(); + } + + manipulate_createfx_ents( highlightedent, leftclick, leftheld, ctrlheld, colors, right ); + + if ( axismode && level.selected_fx_ents.size > 0 ) + { + thread process_fx_rotater(); + + if ( button_is_clicked( "enter", "r" ) ) + reset_axis_of_selected_ents(); + + if ( button_is_clicked( "v" ) ) + copy_angles_of_selected_ents(); + + if ( getdvarint( "createfx_drawaxis" ) == 1 ) + { + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + level.selected_fx_ents[i] draw_axis(); + } + + if ( level.selectedrotate_pitch != 0 || level.selectedrotate_yaw != 0 || level.selectedrotate_roll != 0 ) + changedselectedents = 1; + + wait 0.05; + } + else + { + stop_drawing_axis_models(); + selectedmove_vector = get_selected_move_vector(); + + if ( distancesquared( ( 0, 0, 0 ), selectedmove_vector ) > 0 ) + { + changedselectedents = 1; + + if ( level.cfx_last_action != "translate" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "translate"; + } + } + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + + if ( isdefined( ent.model ) ) + continue; + + ent.v["origin"] += selectedmove_vector; + } + + wait 0.05; + } + + if ( changedselectedents ) + update_selected_entities(); + + lasthighlightedent = highlightedent; + + if ( last_selected_entity_has_changed( lastselectentity ) ) + { + level.effect_list_offset = 0; + clear_settable_fx(); + setmenu( "none" ); + } + + if ( level.selected_fx_ents.size ) + { + lastselectentity = level.selected_fx_ents[level.selected_fx_ents.size - 1]; + continue; + } + + lastselectentity = undefined; + } +} + +toggle_createfx_drawing() +{ + level.createfx_draw_enabled = !level.createfx_draw_enabled; +} + +manipulate_createfx_ents( highlightedent, leftclick, leftheld, ctrlheld, colors, right ) +{ + if ( !level.createfx_draw_enabled ) + { + clear_fx_hudelements(); + return; + } + + scale = getdvarfloat( "createfx_scaleid" ); + print_frames = getdvarint( "createfx_print_frames" ); + + if ( !isdefined( level.createfx_manipulate_offset ) ) + level.createfx_manipulate_offset = 0; + + offset = level.createfx_manipulate_offset; + level.createfx_manipulate_offset = ( level.createfx_manipulate_offset + 1 ) % print_frames; + + for ( i = offset; i < level.createfxent.size; i += print_frames ) + { + ent = level.createfxent[i]; + + if ( !ent.drawn ) + continue; + + if ( isdefined( highlightedent ) && ent == highlightedent ) + continue; + else + { + colorindex = "default"; + + if ( index_is_selected( i ) ) + colorindex = "selected"; +/# + print3d( ent.v["origin"], ".", colors[ent.v["type"]][colorindex], 1, scale, print_frames ); +#/ + if ( ent.textalpha > 0 ) + { + printright = vectorscale( right, ent.v["fxid"].size * -2.93 * scale ); + printup = ( 0, 0, 15 * scale ); +/# + print3d( ent.v["origin"] + printright + printup, ent.v["fxid"], colors[ent.v["type"]][colorindex], ent.textalpha, scale, print_frames ); +#/ + } + } + } + + if ( isdefined( highlightedent ) ) + { + if ( !entities_are_selected() ) + display_fx_info( highlightedent ); + + if ( leftclick ) + { + entwasselected = index_is_selected( highlightedent.last_fx_index ); + level.createfx_selecting = !entwasselected; + + if ( !ctrlheld ) + { + selectedsize = level.selected_fx_ents.size; + clear_entity_selection(); + + if ( entwasselected && selectedsize == 1 ) + select_entity( highlightedent.last_fx_index, highlightedent ); + } + + toggle_entity_selection( highlightedent.last_fx_index, highlightedent ); + } + else if ( leftheld ) + { + if ( ctrlheld ) + { + if ( level.createfx_selecting ) + select_entity( highlightedent.last_fx_index, highlightedent ); + + if ( !level.createfx_selecting ) + deselect_entity( highlightedent.last_fx_index, highlightedent ); + } + } + + colorindex = "highlighted"; + + if ( index_is_selected( highlightedent.last_fx_index ) ) + colorindex = "selected"; +/# + print3d( highlightedent.v["origin"], ".", colors[highlightedent.v["type"]][colorindex], 1, scale, 1 ); +#/ + if ( highlightedent.textalpha > 0 ) + { + printright = vectorscale( right, highlightedent.v["fxid"].size * -2.93 * scale ); + printup = ( 0, 0, 15 * scale ); +/# + print3d( highlightedent.v["origin"] + printright + printup, highlightedent.v["fxid"], colors[highlightedent.v["type"]][colorindex], highlightedent.textalpha, scale, 1 ); +#/ + } + } +} + +clear_settable_fx() +{ + level.createfx_inputlocked = 0; + setdvar( "fx", "nil" ); + level.selected_fx_option_index = undefined; + reset_fx_hud_colors(); +} + +reset_fx_hud_colors() +{ + for ( i = 0; i < level.createfx_hudelements; i++ ) + level.createfxhudelements[i][0].color = ( 1, 1, 1 ); +} + +button_is_held( name, name2 ) +{ + if ( isdefined( name2 ) ) + { + if ( isdefined( level.buttonisheld[name2] ) ) + return 1; + } + + return isdefined( level.buttonisheld[name] ); +} + +button_is_clicked( name, name2 ) +{ + if ( isdefined( name2 ) ) + { + if ( isdefined( level.buttonclick[name2] ) ) + return 1; + } + + return isdefined( level.buttonclick[name] ); +} + +toggle_entity_selection( index, ent ) +{ + if ( isdefined( level.selected_fx[index] ) ) + deselect_entity( index, ent ); + else + select_entity( index, ent ); +} + +select_entity( index, ent, skip_undo ) +{ + if ( isdefined( level.selected_fx[index] ) ) + return; + + ent.last_fx_index = index; + + if ( !isdefined( skip_undo ) && level.cfx_last_action != "none" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "none"; + } + + clear_settable_fx(); + level notify( "new_ent_selection" ); + ent thread entity_highlight_enable(); + level.selected_fx[index] = 1; + level.selected_fx_ents[level.selected_fx_ents.size] = ent; +} + +ent_is_highlighted( ent ) +{ + if ( !isdefined( level.fx_highlightedent ) ) + return 0; + + return ent == level.fx_highlightedent; +} + +deselect_entity( index, ent ) +{ + if ( !isdefined( level.selected_fx[index] ) ) + return; + + if ( level.cfx_last_action != "none" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "none"; + } + + clear_settable_fx(); + level notify( "new_ent_selection" ); + level.selected_fx[index] = undefined; + + if ( !ent_is_highlighted( ent ) ) + ent thread entity_highlight_disable(); + + newarray = []; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + if ( level.selected_fx_ents[i] != ent ) + newarray[newarray.size] = level.selected_fx_ents[i]; + } + + level.selected_fx_ents = newarray; +} + +index_is_selected( index ) +{ + return isdefined( level.selected_fx[index] ); +} + +ent_is_selected( ent ) +{ + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + if ( level.selected_fx_ents[i] == ent ) + return true; + } + + return false; +} + +clear_entity_selection( skip_undo ) +{ + if ( !isdefined( skip_undo ) && level.cfx_last_action != "none" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "none"; + } + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + if ( !ent_is_highlighted( level.selected_fx_ents[i] ) ) + level.selected_fx_ents[i] thread entity_highlight_disable(); + } + + level.selected_fx = []; + level.selected_fx_ents = []; +} + +draw_axis() +{ + if ( isdefined( self.draw_axis_model ) ) + return; + + self.draw_axis_model = spawn_axis_model( self.v["origin"], self.v["angles"] ); + level thread draw_axis_think( self ); + + if ( !isdefined( level.draw_axis_models ) ) + level.draw_axis_models = []; + + level.draw_axis_models[level.draw_axis_models.size] = self.draw_axis_model; +} + +spawn_axis_model( origin, angles ) +{ + model = spawn( "script_model", origin ); + model setmodel( "fx_axis_createfx" ); + model.angles = angles; + return model; +} + +draw_axis_think( axis_parent ) +{ + axis_model = axis_parent.draw_axis_model; + axis_model endon( "death" ); + player = get_players()[0]; + range = getdvarint( "createfx_drawaxis_range" ); + i = 0; + + while ( true ) + { + if ( !isdefined( axis_parent ) ) + break; + + if ( distancesquared( axis_model.origin, player.origin ) > range * range ) + { + if ( isdefined( axis_model ) ) + { + axis_model delete(); + arrayremovevalue( level.draw_axis_models, undefined ); + } + } + else if ( !isdefined( axis_model ) ) + { + axis_model = spawn_axis_model( axis_parent.v["origin"], axis_parent.v["angles"] ); + axis_parent.draw_axis_model = axis_model; + level.draw_axis_models[level.draw_axis_models.size] = axis_model; + } + + axis_model.origin = axis_parent.v["origin"]; + axis_model.angles = axis_parent.v["angles"]; + wait 0.1; + i++; + + if ( i >= 10 ) + { + range = getdvarint( "createfx_drawaxis_range" ); + i = 0; + } + } + + if ( isdefined( axis_model ) ) + axis_model delete(); +} + +stop_drawing_axis_models() +{ + if ( isdefined( level.draw_axis_models ) ) + { + for ( i = 0; i < level.draw_axis_models.size; i++ ) + { + if ( isdefined( level.draw_axis_models[i] ) ) + level.draw_axis_models[i] delete(); + } + + arrayremovevalue( level.draw_axis_models, undefined ); + } +} + +clear_fx_hudelements() +{ + level.cfx_center_text[level.cfx_center_text_max - 1] clearalltextafterhudelem(); + + for ( i = 0; i < level.createfx_hudelements; i++ ) + { + for ( p = 0; p < 2; p++ ) + level.createfxhudelements[i][p] settext( "" ); + } + + level.fxhudelements = 0; +} + +set_fx_hudelement( text ) +{ + if ( ismp() && !isdefined( level.createfx_delay_done ) ) + return; + + if ( level.fxhudelements < level.createfx_hudelements ) + { + for ( p = 0; p < 2; p++ ) + level.createfxhudelements[level.fxhudelements][p] settext( text ); + + level.fxhudelements++; + } +} + +buttondown( button, button2 ) +{ + return buttonpressed_internal( button ) || buttonpressed_internal( button2 ); +} + +buttonpressed_internal( button ) +{ + if ( !isdefined( button ) ) + return 0; + + if ( kb_locked( button ) ) + return 0; + + player = get_players()[0]; + return player buttonpressed( button ); +} + +get_selected_move_vector() +{ + player = get_players()[0]; + yaw = player getplayerangles()[1]; + angles = ( 0, yaw, 0 ); + right = anglestoright( angles ); + forward = anglestoforward( angles ); + up = anglestoup( angles ); + ctrlheld = button_is_held( "ctrl", "BUTTON_LSHLDR" ); + + if ( buttondown( "kp_uparrow", "DPAD_UP" ) ) + { + if ( level.selectedmove_forward < 0 ) + level.selectedmove_forward = 0; + + if ( ctrlheld ) + { + level.selectedmove_forward = 0.1; + wait 0.05; + } + else + level.selectedmove_forward += 1; + } + else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) ) + { + if ( level.selectedmove_forward > 0 ) + level.selectedmove_forward = 0; + + if ( ctrlheld ) + { + level.selectedmove_forward = -1 * 0.1; + wait 0.05; + } + else + level.selectedmove_forward -= 1; + } + else + level.selectedmove_forward = 0; + + if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) ) + { + if ( level.selectedmove_right < 0 ) + level.selectedmove_right = 0; + + if ( ctrlheld ) + { + level.selectedmove_right = 0.1; + wait 0.05; + } + else + level.selectedmove_right += 1; + } + else if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) ) + { + if ( level.selectedmove_right > 0 ) + level.selectedmove_right = 0; + + if ( ctrlheld ) + { + level.selectedmove_right = -1 * 0.1; + wait 0.05; + } + else + level.selectedmove_right -= 1; + } + else + level.selectedmove_right = 0; + + if ( buttondown( "BUTTON_Y" ) ) + { + if ( level.selectedmove_up < 0 ) + level.selectedmove_up = 0; + + if ( ctrlheld ) + { + level.selectedmove_up = 0.1; + wait 0.05; + } + else + level.selectedmove_up += 1; + } + else if ( buttondown( "BUTTON_B" ) ) + { + if ( level.selectedmove_up > 0 ) + level.selectedmove_up = 0; + + if ( ctrlheld ) + { + level.selectedmove_up = -1 * 0.1; + wait 0.05; + } + else + level.selectedmove_up -= 1; + } + else + level.selectedmove_up = 0; + + vector = ( 0, 0, 0 ); + vector += vectorscale( forward, level.selectedmove_forward ); + vector += vectorscale( right, level.selectedmove_right ); + vector += vectorscale( up, level.selectedmove_up ); + return vector; +} + +process_button_held_and_clicked() +{ + add_button( "mouse1" ); + add_kb_button( "shift" ); + add_kb_button( "ctrl" ); + add_button( "BUTTON_RSHLDR" ); + add_button( "BUTTON_LSHLDR" ); + add_button( "BUTTON_RSTICK" ); + add_button( "BUTTON_LSTICK" ); + add_button( "BUTTON_A" ); + add_button( "BUTTON_B" ); + add_button( "BUTTON_X" ); + add_button( "BUTTON_Y" ); + add_button( "DPAD_UP" ); + add_button( "DPAD_LEFT" ); + add_button( "DPAD_RIGHT" ); + add_button( "DPAD_DOWN" ); + add_kb_button( "escape" ); + add_button( "BUTTON_RTRIG" ); + add_button( "BUTTON_LTRIG" ); + add_kb_button( "a" ); + add_button( "F1" ); + add_button( "F5" ); + add_button( "F2" ); + add_kb_button( "c" ); + add_kb_button( "d" ); + add_kb_button( "f" ); + add_kb_button( "h" ); + add_kb_button( "i" ); + add_kb_button( "j" ); + add_kb_button( "k" ); + add_kb_button( "l" ); + add_kb_button( "m" ); + add_kb_button( "p" ); + add_kb_button( "q" ); + add_kb_button( "r" ); + add_kb_button( "s" ); + add_kb_button( "v" ); + add_kb_button( "x" ); + add_kb_button( "z" ); + add_button( "del" ); + add_kb_button( "end" ); + add_kb_button( "tab" ); + add_kb_button( "ins" ); + add_kb_button( "add" ); + add_kb_button( "space" ); + add_kb_button( "enter" ); + add_kb_button( "leftarrow" ); + add_kb_button( "rightarrow" ); + add_kb_button( "1" ); + add_kb_button( "2" ); + add_kb_button( "3" ); + add_kb_button( "4" ); + add_kb_button( "5" ); + add_kb_button( "6" ); + add_kb_button( "7" ); + add_kb_button( "8" ); + add_kb_button( "9" ); + add_kb_button( "0" ); + add_kb_button( "~" ); +} + +locked( name ) +{ + if ( isdefined( level.createfx_lockedlist[name] ) ) + return 0; + + return kb_locked( name ); +} + +kb_locked( name ) +{ + return level.createfx_inputlocked && isdefined( level.button_is_kb[name] ); +} + +add_button( name ) +{ + player = get_players()[0]; + + if ( locked( name ) ) + return; + + if ( !isdefined( level.buttonisheld[name] ) ) + { + if ( player buttonpressed( name ) ) + { + level.buttonisheld[name] = 1; + level.buttonclick[name] = 1; + } + } + else if ( !player buttonpressed( name ) ) + level.buttonisheld[name] = undefined; +} + +add_kb_button( name ) +{ + level.button_is_kb[name] = 1; + add_button( name ); +} + +set_anglemod_move_vector() +{ +/# + ctrlheld = button_is_held( "ctrl", "BUTTON_LSHLDR" ); + players = get_players(); + + if ( level.is_camera_on == 1 ) + { + newmovement = players[0] getnormalizedmovement(); + dolly_movement = players[0] getnormalizedcameramovement(); + + if ( newmovement[1] <= -0.3 ) + level.selectedrotate_yaw -= 1; + else if ( newmovement[1] >= 0.3 ) + level.selectedrotate_yaw += 1; + else if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) ) + { + if ( level.selectedrotate_yaw < 0 ) + level.selectedrotate_yaw = 0; + + level.selectedrotate_yaw += 0.1; + } + else if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) ) + { + if ( level.selectedrotate_yaw > 0 ) + level.selectedrotate_yaw = 0; + + level.selectedrotate_yaw -= 0.1; + } + else + level.selectedrotate_yaw = 0; + + if ( dolly_movement[0] <= -0.2 ) + level.selectedrotate_pitch += 1; + else if ( dolly_movement[0] >= 0.2 ) + level.selectedrotate_pitch -= 1; + else if ( buttondown( "kp_uparrow", "DPAD_UP" ) ) + { + if ( level.selectedrotate_pitch < 0 ) + level.selectedrotate_pitch = 0; + + level.selectedrotate_pitch += 0.1; + } + else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) ) + { + if ( level.selectedrotate_pitch > 0 ) + level.selectedrotate_pitch = 0; + + level.selectedrotate_pitch -= 0.1; + } + else + level.selectedrotate_pitch = 0; + + if ( buttondown( "BUTTON_Y" ) ) + { + if ( level.selectedrotate_roll < 0 ) + level.selectedrotate_roll = 0; + + level.selectedrotate_roll += 0.1; + } + else if ( buttondown( "BUTTON_B" ) ) + { + if ( level.selectedrotate_roll > 0 ) + level.selectedrotate_roll = 0; + + level.selectedrotate_roll -= 0.1; + } + else + level.selectedrotate_roll = 0; + } + else + { + if ( buttondown( "kp_uparrow", "DPAD_UP" ) ) + { + if ( level.selectedrotate_pitch < 0 ) + level.selectedrotate_pitch = 0; + + if ( ctrlheld ) + { + level.selectedrotate_pitch = 0.1; + wait 0.05; + } + else + level.selectedrotate_pitch += 1; + } + else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) ) + { + if ( level.selectedrotate_pitch > 0 ) + level.selectedrotate_pitch = 0; + + if ( ctrlheld ) + { + level.selectedrotate_pitch = -1 * 0.1; + wait 0.05; + } + else + level.selectedrotate_pitch -= 1; + } + else + level.selectedrotate_pitch = 0; + + if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) ) + { + if ( level.selectedrotate_yaw < 0 ) + level.selectedrotate_yaw = 0; + + if ( ctrlheld ) + { + level.selectedrotate_yaw = 0.1; + wait 0.05; + } + else + level.selectedrotate_yaw += 1; + } + else if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) ) + { + if ( level.selectedrotate_yaw > 0 ) + level.selectedrotate_yaw = 0; + + if ( ctrlheld ) + { + level.selectedrotate_yaw = -1 * 0.1; + wait 0.05; + } + else + level.selectedrotate_yaw -= 1; + } + else + level.selectedrotate_yaw = 0; + + if ( buttondown( "BUTTON_Y" ) ) + { + if ( level.selectedrotate_roll < 0 ) + level.selectedrotate_roll = 0; + + if ( ctrlheld ) + { + level.selectedrotate_roll = 0.1; + wait 0.05; + } + else + level.selectedrotate_roll += 1; + } + else if ( buttondown( "BUTTON_B" ) ) + { + if ( level.selectedrotate_roll > 0 ) + level.selectedrotate_roll = 0; + + if ( ctrlheld ) + { + level.selectedrotate_roll = -1 * 0.1; + wait 0.05; + } + else + level.selectedrotate_roll -= 1; + } + else + level.selectedrotate_roll = 0; + } +#/ +} + +cfxprintln( file, string ) +{ +/# + if ( file == -1 ) + return; + + fprintln( file, string ); +#/ +} + +update_save_bar( number ) +{ + level notify( "saving_start" ); + level endon( "saving_start" ); + level.current_saving_number = 0; + + while ( level.current_saving_number < level.createfxent.size ) + { + center_text_clear(); + center_text_add( "Saving Createfx to File" ); + center_text_add( "Saving effect " + level.current_saving_number + "/" + level.createfxent.size ); + center_text_add( "Do not reset Xenon until saving is complete." ); + wait 0.05; + center_text_clear(); + } + + center_text_add( "Saving Complete." ); + center_text_add( level.createfxent.size + " effects saved to files." ); +} + +generate_fx_log( type, autosave ) +{ +/# + autosave = isdefined( autosave ); + + if ( type == "server" ) + { + if ( !autosave ) + filename = level.cfx_server_scriptdata + level.script + "_fx.gsc"; + else + filename = level.cfx_server_scriptdata + "backup.gsc"; + + call_loop = level.cfx_server_loop; + call_oneshot = level.cfx_server_oneshot; + call_exploder = level.cfx_server_exploder; + call_loopsound = level.cfx_server_loopsound; + } + else if ( type == "client" ) + { + if ( !autosave ) + filename = level.cfx_client_scriptdata + level.script + "_fx.csc"; + else + filename = level.cfx_client_scriptdata + "backup.csc"; + + call_loop = level.cfx_client_loop; + call_oneshot = level.cfx_client_oneshot; + call_exploder = level.cfx_client_exploder; + call_loopsound = level.cfx_client_loopsound; + } + else + { + println( "^1Error: Improper type in generate_fx_log()" ); + return; + } + + file = openfile( filename, "write" ); + + if ( file == -1 ) + { + level.write_error = filename; + + if ( type == "server" ) + return 1; + else if ( type == "client" ) + return 2; + else + return 3; + } + else + { + cfxprintln( file, "//_createfx generated. Do not touch!!" ); + cfxprintln( file, "main()" ); + cfxprintln( file, "{" ); + + for ( p = 0; p < level.createfxent.size; p++ ) + { + ent = level.createfxent[p]; + origin = []; + angles = []; + + for ( i = 0; i < 3; i++ ) + { + origin[i] = ent.v["origin"][i]; + angles[i] = ent.v["angles"][i]; + + if ( origin[i] < 0.1 && origin[i] > 0.1 * -1 ) + origin[i] = 0; + + if ( angles[i] < 0.1 && angles[i] > 0.1 * -1 ) + angles[i] = 0; + } + + ent.v["origin"] = ( origin[0], origin[1], origin[2] ); + ent.v["angles"] = ( angles[0], angles[1], angles[2] ); + } + + if ( !autosave ) + println( " *** CREATING EFFECT, COPY THESE LINES TO ", level.script, "_fx.gsc *** " ); + + cfxprintln( file, "// CreateFX entities placed: " + level.createfxent.size - level.non_fx_ents ); + breather = 0; + + if ( autosave ) + breather_pause = 1; + else + breather_pause = 5; + + for ( i = 0; i < level.createfxent.size; i++ ) + { + e = level.createfxent[i]; + assert( isdefined( e.v["type"] ), "effect at origin " + e.v["origin"] + " has no type" ); + + if ( isdefined( e.model ) ) + continue; + + if ( e.v["fxid"] == "No FX" ) + continue; + + output_name = "\\t"; + output_props = "\\t"; + ent_type = e.v["type"]; + + if ( ent_type == "loopfx" ) + output_name += ( "ent = " + call_loop + "( \"" + e.v["fxid"] + "\" );" ); + + if ( ent_type == "oneshotfx" ) + output_name += ( "ent = " + call_oneshot + "( \"" + e.v["fxid"] + "\" );" ); + + if ( ent_type == "exploder" ) + output_name += ( "ent = " + call_exploder + "( \"" + e.v["fxid"] + "\" );" ); + + if ( ent_type == "soundfx" ) + output_name += ( "ent = " + call_loopsound + "();" ); + + output_props += get_fx_options( e ); + cfxprintln( file, output_name ); + cfxprintln( file, output_props ); + cfxprintln( file, "\\t" ); + breather++; + + if ( breather >= breather_pause ) + { + wait 0.05; + breather = 0; + } + } + + if ( level.bscriptgened ) + { + script_gen_dump_addline( level.cfx_server_scriptgendump, level.script + "_fx" ); + [[ level.cfx_func_script_gen_dump ]](); + } + + cfxprintln( file, "}" ); + saved = closefile( file ); + assert( saved == 1, "File not saved (see above message?): " + filename ); + println( "CreateFX entities placed: " + level.createfxent.size - level.non_fx_ents ); + return 0; + } +#/ +} + +get_fx_options( ent ) +{ + output_props = ""; + + for ( i = 0; i < level.createfx_options.size; i++ ) + { + option = level.createfx_options[i]; + + if ( !isdefined( ent.v[option["name"]] ) ) + continue; + + if ( !mask( option["mask"], ent.v["type"] ) ) + continue; + + if ( option["type"] == "string" ) + { + if ( option["name"] == "fxid" ) + continue; + + output_props += ( "ent.v[ \"" + option["name"] + "\" ] = \"" + ent.v[option["name"]] + "\"; " ); + continue; + } + + output_props += ( "ent.v[ \"" + option["name"] + "\" ] = " + ent.v[option["name"]] + "; " ); + } + + return output_props; +} + +entity_highlight_disable() +{ + self notify( "highlight change" ); + self endon( "highlight change" ); + + for (;;) + { + self.textalpha -= 0.05; + + if ( self.textalpha < 0.4 ) + break; + + wait 0.05; + } + + self.textalpha = 0.4; +} + +entity_highlight_enable() +{ + self notify( "highlight change" ); + self endon( "highlight change" ); + + for (;;) + { + self.textalpha += 0.05; + + if ( self.textalpha > 1 ) + break; + + wait 0.05; + } + + self.textalpha = 1; +} + +get_center_of_array( array ) +{ + center = ( 0, 0, 0 ); + + for ( i = 0; i < array.size; i++ ) + center = ( center[0] + array[i].v["origin"][0], center[1] + array[i].v["origin"][1], center[2] + array[i].v["origin"][2] ); + + return ( center[0] / array.size, center[1] / array.size, center[2] / array.size ); +} + +rotation_is_occuring() +{ + if ( level.selectedrotate_roll != 0 ) + return 1; + + if ( level.selectedrotate_pitch != 0 ) + return 1; + + return level.selectedrotate_yaw != 0; +} + +process_fx_rotater() +{ + if ( level.fx_rotating ) + return; + + set_anglemod_move_vector(); + + if ( !rotation_is_occuring() ) + return; + + level.fx_rotating = 1; + + if ( level.cfx_last_action != "rotate" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "rotate"; + } + + if ( level.selected_fx_ents.size > 1 ) + { + center = get_center_of_array( level.selected_fx_ents ); + org = spawn( "script_origin", center ); + org.v["angles"] = level.selected_fx_ents[0].v["angles"]; + org.v["origin"] = center; + rotater = []; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + rotater[i] = spawn( "script_origin", level.selected_fx_ents[i].v["origin"] ); + rotater[i].angles = level.selected_fx_ents[i].v["angles"]; + rotater[i] linkto( org ); + } + + rotate_over_time( org, rotater ); + org delete(); + + for ( i = 0; i < rotater.size; i++ ) + rotater[i] delete(); + } + else if ( level.selected_fx_ents.size == 1 ) + { + ent = level.selected_fx_ents[0]; + rotater = spawn( "script_origin", ( 0, 0, 0 ) ); + rotater.angles = ent.v["angles"]; + + if ( level.selectedrotate_pitch != 0 ) + rotater devaddpitch( level.selectedrotate_pitch ); + else if ( level.selectedrotate_yaw != 0 ) + rotater devaddyaw( level.selectedrotate_yaw ); + else + rotater devaddroll( level.selectedrotate_roll ); + + ent.v["angles"] = rotater.angles; + rotater delete(); + wait 0.05; + } + + level.fx_rotating = 0; +} + +rotate_over_time( org, rotater ) +{ + level endon( "new_ent_selection" ); + + for ( p = 0; p < 2; p++ ) + { + if ( level.selectedrotate_pitch != 0 ) + org devaddpitch( level.selectedrotate_pitch ); + else if ( level.selectedrotate_yaw != 0 ) + org devaddyaw( level.selectedrotate_yaw ); + else + org devaddroll( level.selectedrotate_roll ); + + wait 0.05; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + + if ( isdefined( ent.model ) ) + continue; + + ent.v["origin"] = rotater[i].origin; + ent.v["angles"] = rotater[i].angles; + } + } +} + +delete_pressed() +{ + if ( level.createfx_inputlocked ) + { + remove_selected_option(); + return; + } + + delete_selection(); +} + +remove_selected_option() +{ + if ( !isdefined( level.selected_fx_option_index ) ) + return; + + name = level.createfx_options[level.selected_fx_option_index]["name"]; + + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + + if ( !ent_is_selected( ent ) ) + continue; + + ent remove_option( name ); + } + + update_selected_entities(); + clear_settable_fx(); +} + +remove_option( name ) +{ + self.v[name] = undefined; +} + +delete_selection() +{ + newarray = []; + + if ( level.selected_fx_ents.size < 1 ) + return; + + store_undo_state( "delete", level.selected_fx_ents ); + level.cfx_last_action = "none"; + + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + + if ( ent_is_selected( ent ) ) + { + if ( isdefined( ent.looper ) ) + ent.looper delete(); + + level.fx_highlightedent = undefined; + ent notify( "stop_loop" ); + continue; + } + + newarray[newarray.size] = ent; + } + + level.createfxent = newarray; + level.selected_fx = []; + level.selected_fx_ents = []; + clear_fx_hudelements(); +} + +move_selection_to_cursor( skip_undo ) +{ + origin = level.createfxcursor["position"]; + + if ( level.selected_fx_ents.size <= 0 ) + return; + + if ( !isdefined( skip_undo ) && level.cfx_last_action != "move_to_cursor" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "move_to_cursor"; + } + + center = get_center_of_array( level.selected_fx_ents ); + difference = center - origin; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + + if ( isdefined( ent.model ) ) + continue; + + ent.v["origin"] -= difference; + } +} + +insert_effect() +{ + setmenu( "creation" ); + level.effect_list_offset = 0; + clear_fx_hudelements(); + set_fx_hudelement( "Pick effect type to create:" ); + set_fx_hudelement( "1. One Shot fx" ); + set_fx_hudelement( "2. Looping fx" ); + set_fx_hudelement( "3. Exploder" ); + set_fx_hudelement( "4. Looping sound" ); + set_fx_hudelement( "(c) Cancel" ); + set_fx_hudelement( "(x) Exit" ); +} + +show_help() +{ + clear_fx_hudelements(); + set_fx_hudelement( "Help:" ); + set_fx_hudelement( "I Insert effect" ); + set_fx_hudelement( "Shift + D Delete selected effects" ); + set_fx_hudelement( "F + 5 Save" ); + set_fx_hudelement( "A button Toggle the selection of the current effect" ); + set_fx_hudelement( "X button Toggle effect rotation mode" ); + set_fx_hudelement( "Y button Move selected effects up or rotate X axis" ); + set_fx_hudelement( "B button Move selected effects down or rotate X axis" ); + set_fx_hudelement( "D-pad Up/Down Move selected effects Forward/Backward or rotate Y axis" ); + set_fx_hudelement( "D-pad Left/Right Move selected effects Left/Right or rotate Z axis" ); + set_fx_hudelement( "R Shoulder Move selected effects to the cursor" ); + set_fx_hudelement( "L Shoulder Hold to select multiple effects" ); + set_fx_hudelement( "Right Arrow Next page in options menu" ); + set_fx_hudelement( "Left Arrow Previous page in options menu" ); + set_fx_hudelement( "A Add option to the selected effects" ); + set_fx_hudelement( "X Exit effect options menu" ); + set_fx_hudelement( "Shift + D Drop selected effects to the ground" ); + set_fx_hudelement( "R Reset the rotation of the selected effects" ); + set_fx_hudelement( "L Stick Copy effects" ); + set_fx_hudelement( "R Stick Paste effects" ); + set_fx_hudelement( "V Copy the angles from the most recently selected fx onto all selected fx." ); + set_fx_hudelement( "F + 2 Toggle CreateFX dot and menu drawing" ); + set_fx_hudelement( "U UFO" ); + set_fx_hudelement( "N Noclip" ); + set_fx_hudelement( "R Trig + L Trig Jump forward 8000 units" ); + set_fx_hudelement( "T Toggle Timescale FAST" ); + set_fx_hudelement( "Y Toggle Timescale SLOW" ); + set_fx_hudelement( "H Toggle FX Visibility" ); + set_fx_hudelement( "W Toggle effect wireframe" ); + set_fx_hudelement( "P Toggle FX Profile" ); +} + +center_text_init() +{ + level.cfx_center_text = []; + level.cfx_center_text_index = 0; + level.cfx_center_text_max = 3; + new_array = []; + + for ( p = 0; p < level.cfx_center_text_max; p++ ) + { + center_hud = newdebughudelem(); + center_hud settext( " " ); + center_hud.horzalign = "center"; + center_hud.vertalign = "middle"; + center_hud.alignx = "center"; + center_hud.aligny = "middle"; + center_hud.foreground = 1; + center_hud.fontscale = 1.1; + center_hud.sort = 21; + center_hud.alpha = 1; + center_hud.color = ( 1, 0, 0 ); + center_hud.y = p * 25; + new_array[p] = center_hud; + } + + level.cfx_center_text = new_array; +} + +center_text_add( text ) +{ + if ( isdefined( text ) && isdefined( level.cfx_center_text ) ) + { + level.cfx_center_text[level.cfx_center_text_index] settext( text ); + level.cfx_center_text_index++; + + if ( level.cfx_center_text_index >= level.cfx_center_text_max ) + level.cfx_center_text_index = level.cfx_center_text_max - 1; + } +} + +center_text_clear() +{ + for ( p = 0; p < level.cfx_center_text_max; p++ ) + level.cfx_center_text[p] settext( " " ); + + level.cfx_center_text_index = 0; +} + +write_error_msg( filename ) +{ + level notify( "write_error" ); + level endon( "write_error" ); + + if ( isdefined( filename ) ) + { + center_text_clear(); + center_text_add( "File " + filename + " is not writeable." ); + center_text_add( "If it's checked out, restart your computer!" ); + center_text_add( "Hold the A Button to dismiss." ); + + for (;;) + { + player = get_players()[0]; + + if ( player buttonpressed( "BUTTON_A" ) ) + { + center_text_clear(); + level.write_error = ""; + break; + } + + wait 0.25; + } + } +} + +select_last_entity( skip_undo ) +{ + select_entity( level.createfxent.size - 1, level.createfxent[level.createfxent.size - 1], skip_undo ); +} + +post_entity_creation_function() +{ + self.textalpha = 0; + self.drawn = 1; +} + +copy_ents() +{ + if ( level.selected_fx_ents.size <= 0 ) + return; + + array = []; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + newent = spawnstruct(); + newent.v = ent.v; + newent post_entity_creation_function(); + array[array.size] = newent; + } + + level.stored_ents = array; +} + +paste_ents() +{ + delay_min = getdvarint( "createfx_oneshot_min_delay" ); + delay_max = getdvarint( "createfx_oneshot_max_delay" ); + + if ( delay_min > delay_max ) + { + temp = delay_min; + delay_min = delay_max; + delay_max = temp; + } + + if ( !isdefined( level.stored_ents ) ) + return; + + clear_entity_selection(); + + if ( level.cfx_last_action != "none" ) + store_undo_state( "edit", level.selected_fx_ents ); + + level.cfx_last_action = "none"; + + for ( i = 0; i < level.stored_ents.size; i++ ) + { + level.stored_ents[i].uniqueid = level.cfx_uniqueid; + level.cfx_uniqueid++; + + if ( level.stored_ents[i].v["type"] == "oneshotfx" ) + level.stored_ents[i].v["delay"] = randomintrange( delay_min, delay_max ); + + add_and_select_entity( level.stored_ents[i], "skip_undo" ); + } + + move_selection_to_cursor( "skip_undo" ); + update_selected_entities(); + store_undo_state( "add", level.stored_ents ); + level.stored_ents = []; + copy_ents(); +} + +paste_ents_onto_ents() +{ + if ( !isdefined( level.stored_ents ) || !isdefined( level.selected_fx_ents ) ) + return; + + if ( level.stored_ents.size < 1 || level.selected_fx_ents.size < 1 ) + return; + + if ( level.stored_ents.size != level.selected_fx_ents.size ) + { +/# + println( "^2CreateFX: Number of source ents must match the number of destination ents for Paste Into to work." ); +#/ + return; + } + + if ( level.cfx_last_action != "none" ) + store_undo_state( "edit", level.selected_fx_ents ); + + level.cfx_last_action = "none"; + selected_ents_temp = level.selected_fx_ents; + + for ( i = 0; i < level.stored_ents.size; i++ ) + { + source_ent = level.stored_ents[i]; + target_ent = level.selected_fx_ents[i]; + source_ent.uniqueid = level.cfx_uniqueid; + level.cfx_uniqueid++; + source_ent.v["angles"] = target_ent.v["angles"]; + source_ent.v["origin"] = target_ent.v["origin"]; + add_and_select_entity( source_ent, "skip_undo" ); + } + + for ( i = 0; i < selected_ents_temp.size; i++ ) + deselect_entity( selected_ents_temp[i].last_fx_index, selected_ents_temp[i] ); + + update_selected_entities(); + store_undo_state( "add", level.stored_ents ); + level.stored_ents = []; + copy_ents(); +} + +add_and_select_entity( ent, skip_undo ) +{ + level.createfxent[level.createfxent.size] = ent; + select_last_entity( skip_undo ); +} + +stop_fx_looper() +{ + if ( isdefined( self.looper ) ) + self.looper delete(); + + self [[ level.cfx_func_stop_loopsound ]](); +} + +restart_fx_looper() +{ + stop_fx_looper(); + self set_forward_and_up_vectors(); + + if ( self.v["type"] == "loopfx" ) + self [[ level.cfx_func_create_looper ]](); + + if ( self.v["type"] == "oneshotfx" ) + self [[ level.cfx_func_create_triggerfx ]](); + + if ( self.v["type"] == "soundfx" ) + self [[ level.cfx_func_create_loopsound ]](); +} + +update_selected_entities() +{ + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + ent restart_fx_looper(); + } +} + +copy_angles_of_selected_ents() +{ + level notify( "new_ent_selection" ); + + if ( level.cfx_last_action != "copy_angles" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "copy_angles"; + } + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + ent.v["angles"] = level.selected_fx_ents[level.selected_fx_ents.size - 1].v["angles"]; + ent set_forward_and_up_vectors(); + } + + update_selected_entities(); +} + +reset_axis_of_selected_ents() +{ + level notify( "new_ent_selection" ); + + if ( level.cfx_last_action != "reset_axis" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "reset_axis"; + } + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + ent.v["angles"] = ( 0, 0, 0 ); + ent set_forward_and_up_vectors(); + } + + update_selected_entities(); +} + +last_selected_entity_has_changed( lastselectentity ) +{ + if ( isdefined( lastselectentity ) ) + { + if ( !entities_are_selected() ) + return 1; + } + else + return entities_are_selected(); + + return lastselectentity != level.selected_fx_ents[level.selected_fx_ents.size - 1]; +} + +createfx_showorigin( id, org, delay, org2, type, exploder, id2, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout ) +{ + +} + +drop_selection_to_ground() +{ + if ( level.cfx_last_action != "drop_to_ground" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "drop_to_ground"; + } + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + trace = bullettrace( ent.v["origin"], ent.v["origin"] + vectorscale( ( 0, 0, -1 ), 2048.0 ), 0, undefined ); + ent.v["origin"] = trace["position"]; + } +} + +set_off_exploders() +{ + level notify( "createfx_exploder_reset" ); + exploders = []; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + + if ( isdefined( ent.v["exploder"] ) ) + exploders[ent.v["exploder"]] = 1; + } + + keys = getarraykeys( exploders ); + + for ( i = 0; i < keys.size; i++ ) + exploder( keys[i] ); +} + +turn_off_exploders() +{ + level notify( "createfx_exploder_reset" ); + exploders = []; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + + if ( isdefined( ent.v["exploder"] ) ) + exploders[ent.v["exploder"]] = 1; + } + + keys = getarraykeys( exploders ); + + for ( i = 0; i < keys.size; i++ ) + stop_exploder( keys[i] ); +} + +draw_distance() +{ + count = 0; + last_pos = ( 0, 0, 0 ); + + if ( getdvarint( "createfx_drawdist" ) == 0 ) + setdvar( "createfx_drawdist", "1500" ); + + player = get_players()[0]; + + for (;;) + { + maxdist = getdvarint( "createfx_drawdist" ); + maxdistsqr = maxdist * maxdist; +/# + if ( flag( "createfx_saving" ) ) + println( "Waiting for createfx to save..." ); +#/ + flag_waitopen( "createfx_saving" ); + + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + + if ( ent_is_selected( ent ) ) + ent.drawn = 1; + else + ent.drawn = distancesquared( player.origin, ent.v["origin"] ) <= maxdistsqr; + + count++; + + if ( count > 50 ) + { + count = 0; + wait 0.05; + } + } + + wait 0.1; + + while ( distancesquared( player.origin, last_pos ) < 2500 ) + wait 0.1; + + last_pos = player.origin; + } +} + +createfx_save( autosave ) +{ + flag_waitopen( "createfx_saving" ); + flag_set( "createfx_saving" ); + resettimeout(); + + if ( isdefined( autosave ) ) + savemode = "AUTOSAVE"; + else + savemode = "USER SAVE"; + + type = "server"; + old_time = gettime(); +/# + println( "\\n^3#### CREATEFX SERVER " + savemode + " BEGIN ####" ); +#/ + file_error = generate_fx_log( type, autosave ); +/# + println( "^3#### CREATEFX SERVER " + savemode + " END (Time: " + ( gettime() - old_time ) * 0.001 + " seconds)####" ); +#/ + if ( file_error ) + { +/# + println( "^3#### CREATEFX " + savemode + " CANCELLED ####" ); +#/ + createfx_emergency_backup(); + } + else + { + if ( level.clientscripts && !isdefined( autosave ) ) + { + old_time = gettime(); +/# + println( "\\n^3#### CREATEFX CLIENT " + savemode + " BEGIN ####" ); +#/ + file_error = generate_fx_log( "client" ); +/# + println( "^3#### CREATEFX CLIENT " + savemode + " END (Time: " + ( gettime() - old_time ) * 0.001 + " seconds)####" ); +#/ + if ( file_error ) + { +/# + iprintln( "CreateFX clientscript file is not writeable! Aborting save." ); +#/ +/# + println( "^3#### CREATEFX " + savemode + " CANCELLED ####" ); +#/ + return; + } + } + + flag_clear( "createfx_saving" ); + } +} + +createfx_autosave() +{ + for (;;) + { + wait_time = getdvarint( "createfx_autosave_time" ); + + if ( wait_time < 120 || isstring( wait_time ) ) + wait_time = 120; + + wait( wait_time ); + + if ( !flag( "createfx_saving" ) ) + createfx_save( 1 ); + } +} + +createfx_emergency_backup() +{ +/# + println( "^5#### CREATEFX EMERGENCY BACKUP BEGIN ####" ); +#/ + file_error = generate_fx_log( "server", 1 ); + + if ( file_error ) + { +/# + iprintln( "Error saving to backup.gsc. All is lost!" ); +#/ + } + else + { +/# + println( "^5#### CREATEFX EMERGENCY BACKUP END ####" ); +#/ + } + + flag_clear( "createfx_saving" ); +} + +move_player_around_map_fast() +{ + player = get_players()[0]; + direction = player getplayerangles(); + direction_vec = anglestoforward( direction ); + eye = player geteye(); + trace = bullettrace( eye, eye + vectorscale( direction_vec, 20000 ), 0, undefined ); + dist = distance( eye, trace["position"] ); + position = eye + vectorscale( direction_vec, dist - 64 ); + player setorigin( position ); +} + +move_player_to_next_same_effect( forward_search, lastselectentity ) +{ + player = get_players()[0]; + direction = player getplayerangles(); + direction_vec = anglestoforward( direction ); + + if ( !isdefined( forward_search ) ) + forward_search = 1; + + ent = level.selected_fx_ents[level.selected_fx_ents.size - 1]; + start_index = 0; + + if ( level.selected_fx_ents.size <= 0 ) + { + if ( forward_search ) + ent = level.cfx_next_ent; + else + ent = level.cfx_previous_ent; + + if ( isdefined( ent ) ) + { + index = get_ent_index( ent ); + + if ( index >= 0 ) + { + select_entity( index, ent ); + position = ent.v["origin"] - vectorscale( direction_vec, 175 ); + player setorigin( position ); + level.cfx_previous_ent = ent; + level.cfx_next_ent = get_next_ent_with_same_id( index, ent.v["fxid"] ); + } + else if ( forward_search ) + level.cfx_next_ent = undefined; + else + level.cfx_previous_ent = undefined; + } + + return; + } + + if ( level.selected_fx_ents.size == 1 ) + { + for ( i = 0; i < level.createfxent.size; i++ ) + { + if ( isdefined( level.selected_fx[i] ) ) + { + start_index = i; + deselect_entity( i, ent ); + break; + } + } + + if ( forward_search ) + { + level.cfx_previous_ent = ent; + ent = get_next_ent_with_same_id( i, ent.v["fxid"] ); + select_entity( level.ent_found_index, ent ); + position = ent.v["origin"] - vectorscale( direction_vec, 175 ); + player setorigin( position ); + level.cfx_next_ent = get_next_ent_with_same_id( level.ent_found_index, ent.v["fxid"] ); + return; + } + else + { + level.cfx_next_ent = ent; + ent = get_previous_ent_with_same_id( i, ent.v["fxid"] ); + select_entity( level.ent_found_index, ent ); + position = ent.v["origin"] - vectorscale( direction_vec, 175 ); + player setorigin( position ); + level.cfx_previous_ent = get_previous_ent_with_same_id( level.ent_found_index, ent.v["fxid"] ); + return; + } + } + else + { + if ( isdefined( level.last_ent_moved_to ) && !last_selected_entity_has_changed( lastselectentity ) ) + ent = level.last_ent_moved_to; + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + if ( ent == level.selected_fx_ents[i] ) + break; + } + + if ( forward_search ) + { + if ( i < level.selected_fx_ents.size - 1 ) + { + i++; + ent = level.selected_fx_ents[i]; + } + else + ent = level.selected_fx_ents[0]; + } + else if ( i > 0 ) + ent = level.selected_fx_ents[i - 1]; + else + ent = level.selected_fx_ents[level.selected_fx_ents.size - 1]; + + level.last_ent_moved_to = ent; + position = ent.v["origin"] - vectorscale( direction_vec, 175 ); + player setorigin( position ); + } +} + +get_next_ent_with_same_id( index, ent_id ) +{ + for ( i = index + 1; i < level.createfxent.size; i++ ) + { + if ( ent_id == level.createfxent[i].v["fxid"] ) + { + level.ent_found_index = i; + return level.createfxent[i]; + } + } + + for ( i = 0; i < index; i++ ) + { + if ( ent_id == level.createfxent[i].v["fxid"] ) + { + level.ent_found_index = i; + return level.createfxent[i]; + } + } + + level.ent_found_index = index; + return level.createfxent[index]; +} + +get_previous_ent_with_same_id( index, ent_id ) +{ + for ( i = index - 1; i > 0; i-- ) + { + if ( ent_id == level.createfxent[i].v["fxid"] ) + { + level.ent_found_index = i; + return level.createfxent[i]; + } + } + + for ( i = level.createfxent.size - 1; i > index; i-- ) + { + if ( ent_id == level.createfxent[i].v["fxid"] ) + { + level.ent_found_index = i; + return level.createfxent[i]; + } + } + + level.ent_found_index = index; + return level.createfxent[index]; +} + +get_ent_index( ent ) +{ + for ( i = 0; i < level.createfxent.size; i++ ) + { + if ( ent == level.createfxent[i] ) + return i; + } + + return -1; +} + +select_ents_by_property( property, add_to_selection ) +{ + ent = level.selected_fx_ents[level.selected_fx_ents.size - 1]; + prop_to_match = ent.v[property]; + + if ( !isdefined( add_to_selection ) ) + clear_entity_selection(); + + for ( i = 0; i < level.createfxent.size; i++ ) + { + if ( isdefined( level.createfxent[i].v[property] ) ) + { + if ( level.createfxent[i].v[property] == prop_to_match ) + select_entity( i, level.createfxent[i] ); + } + } +} + +print_ambient_fx_inventory() +{ +/# + fx_list = get_level_ambient_fx(); + ent_list = []; + fx_list_count = []; + println( "\\n\\n^2INVENTORY OF AMBIENT EFFECTS: " ); + + for ( i = 0; i < level.createfxent.size; i++ ) + ent_list[i] = level.createfxent[i].v["fxid"]; + + for ( i = 0; i < fx_list.size; i++ ) + { + count = 0; + + for ( j = 0; j < ent_list.size; j++ ) + { + if ( fx_list[i] == ent_list[j] ) + { + count++; + ent_list[j] = ""; + } + } + + fx_list_count[i] = count; + } + + for ( i = 0; i < fx_list_count.size - 1; i++ ) + { + for ( j = i + 1; j < fx_list_count.size; j++ ) + { + if ( fx_list_count[j] < fx_list_count[i] ) + { + temp_count = fx_list_count[i]; + temp_id = fx_list[i]; + fx_list_count[i] = fx_list_count[j]; + fx_list[i] = fx_list[j]; + fx_list_count[j] = temp_count; + fx_list[j] = temp_id; + } + } + } + + for ( i = 0; i < fx_list_count.size; i++ ) + { + switch ( fx_list_count[i] ) + { + case 0: + print( "^1" ); + break; + case 1: + print( "^3" ); + break; + default: + break; + } + + print( fx_list_count[i] + "\\t" + fx_list[i] + "\\n" ); + } + + print( "\\n" ); +#/ +} + +vector_changed( old, new ) +{ + if ( distancesquared( old, new ) >= 1 ) + return true; + + return false; +} + +dot_changed( old, new ) +{ + dot = vectordot( old, new ); + + if ( dot < 1 ) + return true; + + return false; +} + +damage_void( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) +{ + +} + +handle_camera() +{ +/# + level notify( "new_camera" ); + level endon( "new_camera" ); + movement = ( 0, 0, 0 ); + + if ( !isdefined( level.camera ) ) + { + level.camera = spawn( "script_origin", ( 0, 0, 0 ) ); + level.camera setmodel( "tag_origin" ); + } + + players = get_players(); + players[0] playerlinktodelta( level.camera, "tag_origin", 1, 0, 0, 0, 0, 1 ); + players[0] disableweapons(); + level.camera_snapto = 1; + level.stick_camera = 1; + level.camera_prev_snapto = 0; + level.cameravec = ( 90, 150, 20 ); + model = undefined; + n_y_vector = 0; + n_x_vector = 0; + zoom_level = 300; + b_changes_x = 0; + b_changes_z = 0; + b_changes_y = 0; + test_string = ""; + + while ( true ) + { + if ( level.camera_snapto > 0 ) + { + if ( level.stick_camera ) + { + originoffset = vectorscale( level.cameravec, -1 ); + temp_offset = originoffset + vectorscale( ( 0, 0, -1 ), 60.0 ); + anglesoffset = vectortoangles( temp_offset ); + + if ( level.camera_prev_snapto == level.camera_snapto ) + { + players = get_players(); + newmovement = players[0] getnormalizedmovement(); + dolly_movement = players[0] getnormalizedcameramovement(); + + if ( button_is_held( "BUTTON_LTRIG" ) || button_is_held( "BUTTON_RTRIG" ) ) + { + + } + else + { + if ( newmovement[1] <= -0.4 ) + { + n_y_vector += -0.2; + b_changes_y = 1; + } + else if ( newmovement[1] >= 0.4 ) + { + n_y_vector += 0.2; + b_changes_y = 1; + } + else + b_changes_y = 0; + + if ( newmovement[0] <= -0.4 ) + { + n_x_vector += -0.4; + b_changes_x = 1; + } + else if ( newmovement[0] >= 0.4 ) + { + n_x_vector += 0.4; + b_changes_x = 1; + } + else + b_changes_x = 0; + + if ( dolly_movement[0] <= -0.4 ) + { + zoom_level += 30; + b_changes_z = 1; + } + else if ( dolly_movement[0] >= 0.4 ) + { + zoom_level += -30; + b_changes_z = 1; + } + else + b_changes_z = 0; + + if ( b_changes_z || b_changes_x || b_changes_y ) + { + newmovement = ( n_x_vector, n_y_vector, newmovement[2] ); + movement = ( 0, 0, 0 ); + movement = vectorscale( movement, 0.8 ) + vectorscale( newmovement, 1 - 0.8 ); + tilt = max( 0, 10 + movement[0] * 160 ); + level.cameravec = ( cos( movement[1] * 180 ) * zoom_level, sin( movement[1] * 180 ) * zoom_level, tilt ); + iprintln( level.cameravec[0] + " " + level.cameravec[1] + " " + level.cameravec[2] ); + } + } + } + else + level.camera_prev_snapto = level.camera_snapto; + + if ( isdefined( level.current_select_ent ) ) + { + originoffset = vectorscale( level.cameravec, -1 ); + temp_offset = originoffset + vectorscale( ( 0, 0, -1 ), 60.0 ); + anglesoffset = vectortoangles( temp_offset ); + + if ( !isdefined( model ) ) + { + model = spawn( "script_origin", level.current_select_ent.v["origin"] ); + model setmodel( "tag_origin" ); + } + + if ( model.origin != level.current_select_ent.v["origin"] ) + model.origin = level.current_select_ent.v["origin"]; + + level.camera linkto( model, "tag_origin", level.cameravec, anglesoffset ); + } + else + { + wait 0.05; + continue; + } + } + else + level.camera unlink(); + } + + wait 0.05; + } +#/ +} + +camera_hud_toggle( text ) +{ + if ( isdefined( level.camera_hud ) ) + level.camera_hud destroy(); + + level.camera_hud = newdebughudelem(); + level.camera_hud settext( text ); + level.camera_hud.horzalign = "left"; + level.camera_hud.vertalign = "bottom"; + level.camera_hud.alignx = "left"; + level.camera_hud.aligny = "bottom"; + level.camera_hud.foreground = 1; + level.camera_hud.fontscale = 1.1; + level.camera_hud.sort = 21; + level.camera_hud.alpha = 1; + level.camera_hud.color = ( 1, 1, 1 ); +} + +init_sp_paths() +{ + +} + +make_sp_player_invulnerable( player ) +{ + +} + +delete_arrays_in_sp() +{ + +} + +used_in_animation( sp ) +{ + +} + +init_client_sp_variables() +{ + +} + +init_mp_paths() +{ + level.cfx_server_scriptdata = "mpcreatefx/"; + level.cfx_client_scriptdata = "mpclientcreatefx/"; + level.cfx_server_loop = "maps\\mp\\_utility::createLoopEffect"; + level.cfx_server_oneshot = "maps\\mp\\_utility::createOneshotEffect"; + level.cfx_server_exploder = "maps\\mp\\_utility::createExploder"; + level.cfx_server_loopsound = "maps\\mp\\_createfx::createLoopSound"; + level.cfx_server_scriptgendump = "maps\\mp\\createfx\\" + level.script + "_fx::main();"; + level.cfx_client_loop = "clientscripts\\mp\\_fx::createLoopEffect"; + level.cfx_client_oneshot = "clientscripts\\mp\\_fx::createOneshotEffect"; + level.cfx_client_exploder = "clientscripts\\mp\\_fx::createExploder"; + level.cfx_client_loopsound = "clientscripts\\mp\\_fx::createLoopSound"; + level.cfx_client_scriptgendump = "clientscripts\\mp\\_createfx\\" + level.script + "_fx::main();"; + level.cfx_func_run_gump_func = ::empty; + level.cfx_func_loopfx = maps\mp\_fx::loopfxthread; + level.cfx_func_oneshotfx = maps\mp\_fx::oneshotfxthread; + level.cfx_func_soundfx = maps\mp\_fx::create_loopsound; + level.cfx_func_script_gen_dump = maps\mp\_script_gen::script_gen_dump; + level.cfx_func_stop_loopsound = maps\mp\_fx::stop_loopsound; + level.cfx_func_create_looper = maps\mp\_fx::create_looper; + level.cfx_func_create_triggerfx = maps\mp\_fx::create_triggerfx; + level.cfx_func_create_loopsound = maps\mp\_fx::create_loopsound; +} + +callback_playerconnect() +{ + self waittill( "begin" ); + + if ( !isdefined( level.hasspawned ) ) + { + spawnpoints = getentarray( "mp_global_intermission", "classname" ); + + if ( !spawnpoints.size ) + spawnpoints = getentarray( "info_player_start", "classname" ); + + assert( spawnpoints.size ); + spawnpoint = spawnpoints[0]; + self.sessionteam = "none"; + self.sessionstate = "playing"; + + if ( !level.teambased ) + self.ffateam = "none"; + + self spawn( spawnpoint.origin, spawnpoint.angles ); + level.player = self; + level.hasspawned = 1; + } + else + kick( self.name ); +} + +delete_spawns() +{ + spawn_classes = []; + spawn_classes[spawn_classes.size] = "mp_dm_spawn"; + spawn_classes[spawn_classes.size] = "mp_tdm_spawn"; + spawn_classes[spawn_classes.size] = "mp_dom_spawn"; + spawn_classes[spawn_classes.size] = "mp_dom_spawn_axis_start"; + spawn_classes[spawn_classes.size] = "mp_dom_spawn_allies_start"; + spawn_classes[spawn_classes.size] = "mp_res_spawn_allies"; + spawn_classes[spawn_classes.size] = "mp_res_spawn_axis"; + spawn_classes[spawn_classes.size] = "mp_res_spawn_axis_start"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_attacker"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_attacker_a"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_attacker_b"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_attacker_c"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_attacker_start"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_attackerOT_start"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_defender"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_defender_a"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_defender_b"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_defender_c"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_defender_start"; + spawn_classes[spawn_classes.size] = "mp_dem_spawn_defenderOT_start"; + + foreach ( class in spawn_classes ) + { + spawns = getentarray( class, "classname" ); + + foreach ( spawn in spawns ) + spawn delete(); + } +} + +createfxdelay() +{ + wait 10; + level.createfx_delay_done = 1; +} + +init_client_mp_variables() +{ + level.cfx_exploder_before = maps\mp\_utility::exploder_before_load; + level.cfx_exploder_after = maps\mp\_utility::exploder_after_load; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/_createfxmenu.gsc b/ZM/Maps/Tranzit Diner/maps/mp/_createfxmenu.gsc new file mode 100644 index 0000000..2e27bec --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/_createfxmenu.gsc @@ -0,0 +1,941 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\_createfx; +#include maps\mp\_createfxundo; + +menu( name ) +{ +/# + return level.create_fx_menu == name; +#/ +} + +setmenu( name ) +{ +/# + level.create_fx_menu = name; +#/ +} + +create_fx_menu() +{ +/# + if ( button_is_clicked( "escape", "x" ) ) + { + exit_menu(); + return; + } + + if ( menu( "creation" ) ) + { + if ( button_is_clicked( "1" ) ) + { + setmenu( "create_oneshot" ); + draw_effects_list(); + return; + } + + if ( button_is_clicked( "2" ) ) + { + setmenu( "create_loopfx" ); + draw_effects_list(); + return; + } + + if ( button_is_clicked( "3" ) ) + { + setmenu( "create_exploder" ); + draw_effects_list(); + return; + } + + if ( button_is_clicked( "4" ) ) + { + setmenu( "create_loopsound" ); + ent = createloopsound(); + finish_creating_entity( ent ); + setmenu( "none" ); + return; + } + } + + if ( menu( "create_oneshot" ) || menu( "create_loopfx" ) || menu( "create_exploder" ) || menu( "change_fxid" ) ) + { + if ( button_is_clicked( "rightarrow" ) ) + { + increment_list_offset(); + draw_effects_list(); + } + + if ( button_is_clicked( "leftarrow" ) ) + { + decrement_list_offset(); + draw_effects_list(); + } + + menu_fx_creation(); + } + else if ( menu( "none" ) ) + { + menu_change_selected_fx(); + + if ( entities_are_selected() ) + { + display_fx_info( get_last_selected_entity() ); + + if ( button_is_clicked( "a" ) ) + { + clear_settable_fx(); + setmenu( "add_options" ); + } + } + } + else if ( menu( "add_options" ) ) + { + if ( !entities_are_selected() ) + { + clear_fx_hudelements(); + setmenu( "none" ); + return; + } + + display_fx_add_options( get_last_selected_entity() ); + + if ( button_is_clicked( "rightarrow" ) ) + increment_list_offset(); + + if ( button_is_clicked( "leftarrow" ) ) + decrement_list_offset(); + } + else if ( menu( "jump_to_effect" ) ) + { + if ( button_is_clicked( "rightarrow" ) ) + { + increment_list_offset(); + draw_effects_list( "Select effect to jump to:" ); + } + + if ( button_is_clicked( "leftarrow" ) ) + { + decrement_list_offset(); + draw_effects_list( "Select effect to jump to:" ); + } + + jump_to_effect(); + } + else if ( menu( "select_by_property" ) ) + { + menu_selection(); + + if ( button_is_clicked( "rightarrow" ) ) + increment_list_offset(); + + if ( button_is_clicked( "leftarrow" ) ) + decrement_list_offset(); + } + else if ( menu( "change_type" ) ) + { + if ( !entities_are_selected() ) + { + clear_fx_hudelements(); + setmenu( "none" ); + return; + } + else + menu_fx_type(); + } +#/ +} + +exit_menu() +{ +/# + clear_fx_hudelements(); + clear_entity_selection(); + update_selected_entities(); + setmenu( "none" ); +#/ +} + +get_last_selected_entity() +{ +/# + return level.selected_fx_ents[level.selected_fx_ents.size - 1]; +#/ +} + +menu_fx_creation() +{ +/# + count = 0; + picked_fx = undefined; + keys = get_level_ambient_fx(); + + for ( i = level.effect_list_offset; i < keys.size; i++ ) + { + count += 1; + button_to_check = count; + + if ( button_to_check == 10 ) + button_to_check = 0; + + if ( button_is_clicked( button_to_check + "" ) && !button_is_held( "f" ) ) + { + picked_fx = keys[i]; + break; + } + + if ( count > level.effect_list_offset_max ) + break; + } + + if ( !isdefined( picked_fx ) ) + return; + + if ( menu( "change_fxid" ) ) + { + apply_option_to_selected_fx( get_option( "fxid" ), picked_fx ); + level.effect_list_offset = 0; + clear_fx_hudelements(); + setmenu( "none" ); + return; + } + + ent = undefined; + + if ( menu( "create_loopfx" ) ) + ent = createloopeffect( picked_fx ); + + if ( menu( "create_oneshot" ) ) + { + ent = createoneshoteffect( picked_fx ); + delay_min = getdvarint( "createfx_oneshot_min_delay" ); + delay_max = getdvarint( "createfx_oneshot_max_delay" ); + + if ( delay_min > delay_max ) + { + temp = delay_min; + delay_min = delay_max; + delay_max = temp; + } + + ent.v["delay"] = randomintrange( delay_min, delay_max ); + } + + if ( menu( "create_exploder" ) ) + ent = createexploder( picked_fx ); + + finish_creating_entity( ent ); + + if ( level.cfx_last_action != "none" ) + store_undo_state( "edit", level.selected_fx_ents ); + + store_undo_state( "add", level.createfxent[level.createfxent.size - 1] ); + level.cfx_last_action = "none"; + setmenu( "none" ); +#/ +} + +finish_creating_entity( ent ) +{ +/# + ent.v["angles"] = vectortoangles( ent.v["origin"] + vectorscale( ( 0, 0, 1 ), 100.0 ) - ent.v["origin"] ); + assert( isdefined( ent ) ); + ent post_entity_creation_function(); + clear_entity_selection(); + select_last_entity( "skip_undo" ); + move_selection_to_cursor( "skip_undo" ); + update_selected_entities(); +#/ +} + +change_effect_to_oneshot( ent ) +{ +/# + if ( ent.v["type"] == "oneshotfx" ) + return; + + if ( ent.v["type"] == "exploder" ) + { + ent.v["exploder"] = undefined; + ent.v["exploder_type"] = undefined; + ent.v["soundalias"] = undefined; + } + + if ( !isdefined( ent.v["delay"] ) || ent.v["delay"] == 0 ) + { + delay_min = getdvarint( "createfx_oneshot_min_delay" ); + delay_max = getdvarint( "createfx_oneshot_max_delay" ); + + if ( delay_min > delay_max ) + { + temp = delay_min; + delay_min = delay_max; + delay_max = temp; + } + + ent.v["delay"] = randomintrange( delay_min, delay_max ); + } + + ent.v["type"] = "oneshotfx"; +#/ +} + +change_effect_to_loop( ent ) +{ +/# + if ( ent.v["type"] == "loopfx" ) + return; + + if ( ent.v["type"] == "exploder" ) + { + ent.v["exploder"] = undefined; + ent.v["exploder_type"] = undefined; + ent.v["soundalias"] = undefined; + } + + if ( !isdefined( ent.v["delay"] ) || ent.v["delay"] <= 0 ) + ent.v["delay"] = 1; + + ent.v["type"] = "loopfx"; +#/ +} + +change_effect_to_exploder( ent ) +{ +/# + if ( ent.v["type"] == "exploder" ) + return; + + ent.v["type"] = "exploder"; + + if ( !isdefined( ent.v["delay"] ) || ent.v["delay"] < 0 ) + ent.v["delay"] = 0; + + ent.v["exploder"] = 1; + ent.v["exploder_type"] = "normal"; +#/ +} + +change_ent_type( newtype ) +{ +/# + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = "ent_type"; + + if ( newtype == "oneshotfx" ) + { + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + change_effect_to_oneshot( level.selected_fx_ents[i] ); + } + else if ( newtype == "loopfx" ) + { + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + change_effect_to_loop( level.selected_fx_ents[i] ); + } + else if ( newtype == "exploder" ) + { + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + change_effect_to_exploder( level.selected_fx_ents[i] ); + } +#/ +} + +menu_init() +{ +/# + level.createfx_options = []; + addoption( "string", "type", "Type", "oneshotfx", "fx" ); + addoption( "string", "fxid", "Name", "nil", "fx" ); + addoption( "vector", "origin", "Origin", ( 0, 0, 0 ), "fx" ); + addoption( "vector", "angles", "Angles", ( 0, 0, 0 ), "fx" ); + addoption( "float", "delay", "Repeat rate/start delay", 0.5, "fx" ); + addoption( "int", "repeat", "Number of times to repeat", 5, "exploder" ); + addoption( "float", "primlightfrac", "Primary light fraction", 1.0, "fx" ); + addoption( "int", "lightoriginoffs", "Light origin offset", 64, "fx" ); + addoption( "float", "delay_min", "Minimum time between repeats", 1, "exploder" ); + addoption( "float", "delay_max", "Maximum time between repeats", 2, "exploder" ); + addoption( "float", "fire_range", "Fire damage range", 0, "fx" ); + addoption( "string", "firefx", "2nd FX id", "nil", "exploder" ); + addoption( "float", "firefxdelay", "2nd FX id repeat rate", 0.5, "exploder" ); + addoption( "float", "firefxtimeout", "2nd FX timeout", 5, "exploder" ); + addoption( "string", "firefxsound", "2nd FX soundalias", "nil", "exploder" ); + addoption( "string", "ender", "Level notify for ending 2nd FX", "nil", "exploder" ); + addoption( "string", "rumble", "Rumble", "nil", "exploder" ); + addoption( "float", "damage", "Radius damage", 150, "exploder" ); + addoption( "float", "damage_radius", "Radius of radius damage", 250, "exploder" ); + addoption( "int", "exploder", "Exploder", 1, "exploder" ); + addoption( "string", "earthquake", "Earthquake", "nil", "exploder" ); + addoption( "string", "soundalias", "Soundalias", "nil", "all" ); + addoption( "int", "stoppable", "Can be stopped from script", "1", "all" ); + level.effect_list_offset = 0; + level.effect_list_offset_max = 9; + level.createfxmasks = []; + level.createfxmasks["all"] = []; + level.createfxmasks["all"]["exploder"] = 1; + level.createfxmasks["all"]["oneshotfx"] = 1; + level.createfxmasks["all"]["loopfx"] = 1; + level.createfxmasks["all"]["soundfx"] = 1; + level.createfxmasks["fx"] = []; + level.createfxmasks["fx"]["exploder"] = 1; + level.createfxmasks["fx"]["oneshotfx"] = 1; + level.createfxmasks["fx"]["loopfx"] = 1; + level.createfxmasks["exploder"] = []; + level.createfxmasks["exploder"]["exploder"] = 1; + level.createfxmasks["loopfx"] = []; + level.createfxmasks["loopfx"]["loopfx"] = 1; + level.createfxmasks["oneshotfx"] = []; + level.createfxmasks["oneshotfx"]["oneshotfx"] = 1; + level.createfxmasks["soundfx"] = []; + level.createfxmasks["soundfx"]["soundalias"] = 1; +#/ +} + +get_last_selected_ent() +{ +/# + return level.selected_fx_ents[level.selected_fx_ents.size - 1]; +#/ +} + +entities_are_selected() +{ +/# + return level.selected_fx_ents.size > 0; +#/ +} + +menu_change_selected_fx() +{ +/# + if ( !level.selected_fx_ents.size ) + return; + + count = 0; + drawncount = 0; + ent = get_last_selected_ent(); + + for ( i = 0; i < level.createfx_options.size; i++ ) + { + option = level.createfx_options[i]; + + if ( !isdefined( ent.v[option["name"]] ) ) + continue; + + count++; + + if ( count < level.effect_list_offset ) + continue; + + drawncount++; + button_to_check = drawncount; + + if ( button_to_check == 10 ) + button_to_check = 0; + + if ( button_is_clicked( button_to_check + "" ) && !button_is_held( "f" ) ) + { + prepare_option_for_change( option, drawncount ); + break; + } + + if ( drawncount > level.effect_list_offset_max ) + break; + } +#/ +} + +prepare_option_for_change( option, drawncount ) +{ +/# + if ( option["name"] == "fxid" ) + { + setmenu( "change_fxid" ); + draw_effects_list(); + return; + } + + if ( option["name"] == "type" ) + { + setmenu( "change_type" ); + return; + } + + level.createfx_inputlocked = 1; + set_option_index( option["name"] ); + setdvar( "fx", "nil" ); + level.createfxhudelements[drawncount + 1][0].color = ( 1, 1, 0 ); +#/ +} + +menu_fx_option_set() +{ +/# + if ( getdvar( "fx" ) == "nil" ) + return; + + option = get_selected_option(); + setting = undefined; + + if ( option["type"] == "string" ) + setting = getdvar( "fx" ); + + if ( option["type"] == "int" ) + setting = getdvarint( "fx" ); + + if ( option["type"] == "float" ) + setting = getdvarfloat( "fx" ); + + if ( option["type"] == "vector" ) + { + setting = getdvar( "fx" ); + temparray = strtok( setting, " " ); + + if ( temparray.size == 3 ) + setting = ( float( temparray[0] ), float( temparray[1] ), float( temparray[2] ) ); + else + { + clear_settable_fx(); + return; + } + } + + apply_option_to_selected_fx( option, setting ); +#/ +} + +menu_fx_type() +{ +/# + clear_fx_hudelements(); + set_fx_hudelement( "Change effect type to:" ); + set_fx_hudelement( " (1) Oneshot" ); + set_fx_hudelement( " (2) Looped" ); + set_fx_hudelement( " (3) Exploder" ); + set_fx_hudelement( "(x) Exit >" ); + + if ( button_is_clicked( "1" ) && !button_is_held( "f" ) ) + { + change_ent_type( "oneshotfx" ); + setmenu( "none" ); + } + else if ( button_is_clicked( "2" ) && !button_is_held( "f" ) ) + { + change_ent_type( "loopfx" ); + setmenu( "none" ); + } + else if ( button_is_clicked( "3" ) && !button_is_held( "f" ) ) + { + change_ent_type( "exploder" ); + setmenu( "none" ); + } + + if ( menu( "none" ) ) + update_selected_entities(); +#/ +} + +menu_selection() +{ +/# + clear_fx_hudelements(); + set_fx_hudelement( "Select all by property:" ); + drawncount = 0; + option_number = 0; + ent = level.selected_fx_ents[level.selected_fx_ents.size - 1]; + + if ( level.selected_fx_ents.size < 1 ) + set_fx_hudelement( "No ent is selected." ); + else + { + for ( i = level.effect_list_offset; i < level.createfx_options.size; i++ ) + { + if ( drawncount > level.effect_list_offset_max ) + break; + + if ( drawncount > ent.v.size ) + break; + + prop_name = level.createfx_options[i]["name"]; + option_number = drawncount + 1; + + if ( isdefined( ent.v[prop_name] ) ) + { + if ( button_is_clicked( option_number + "" ) && !button_is_held( "f" ) ) + { + level.cfx_selected_prop = prop_name; + menunone(); + level.effect_list_offset = 0; + return; + } + + prop_desc = level.createfx_options[i]["description"]; + set_fx_hudelement( option_number + ". " + prop_desc + ": " + ent.v[prop_name] ); + drawncount++; + continue; + } + } + } + + if ( drawncount > level.effect_list_offset_max ) + { + pages = ceil( ent.v.size / level.effect_list_offset_max ); + current_page = level.effect_list_offset / level.effect_list_offset_max + 1; + set_fx_hudelement( "(<-) Page " + current_page + " of " + pages + " (->)" ); + } + + set_fx_hudelement( "(x) Exit >" ); +#/ +} + +apply_option_to_selected_fx( option, setting ) +{ +/# + if ( level.cfx_last_action != option["name"] ) + { + store_undo_state( "edit", level.selected_fx_ents ); + level.cfx_last_action = option["name"]; + } + + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + + if ( mask( option["mask"], ent.v["type"] ) ) + ent.v[option["name"]] = setting; + } + + update_selected_entities(); + clear_settable_fx(); +#/ +} + +set_option_index( name ) +{ +/# + for ( i = 0; i < level.createfx_options.size; i++ ) + { + if ( level.createfx_options[i]["name"] != name ) + continue; + + level.selected_fx_option_index = i; + return; + } +#/ +} + +get_selected_option() +{ +/# + return level.createfx_options[level.selected_fx_option_index]; +#/ +} + +mask( type, name ) +{ +/# + return isdefined( level.createfxmasks[type][name] ); +#/ +} + +addoption( type, name, description, defaultsetting, mask ) +{ +/# + option = []; + option["type"] = type; + option["name"] = name; + option["description"] = description; + option["default"] = defaultsetting; + option["mask"] = mask; + level.createfx_options[level.createfx_options.size] = option; +#/ +} + +get_option( name ) +{ +/# + for ( i = 0; i < level.createfx_options.size; i++ ) + { + if ( level.createfx_options[i]["name"] == name ) + return level.createfx_options[i]; + } +#/ +} + +display_fx_info( ent ) +{ +/# + if ( !menu( "none" ) ) + return; + + clear_fx_hudelements(); + + if ( !level.createfx_draw_enabled ) + return; + + set_fx_hudelement( "Selected: " + level.selected_fx_ents.size + " Distance: " + get_distance_from_ent( ent ) ); + level.createfxhudelements[0][0].color = ( 1, 1, 0 ); + set_fx_hudelement( "Name: " + ent.v["fxid"] ); + + if ( entities_are_selected() ) + { + count = 0; + drawncount = 0; + + for ( i = 0; i < level.createfx_options.size; i++ ) + { + option = level.createfx_options[i]; + + if ( !isdefined( ent.v[option["name"]] ) ) + continue; + + count++; + + if ( count < level.effect_list_offset ) + continue; + + drawncount++; + set_fx_hudelement( drawncount + ". " + option["description"] + ": " + ent.v[option["name"]] ); + + if ( drawncount > level.effect_list_offset_max ) + { + more = 1; + break; + } + } + + if ( count > level.effect_list_offset_max ) + { + pages = ceil( level.createfx_options.size / level.effect_list_offset_max ); + current_page = level.effect_list_offset / level.effect_list_offset_max + 1; + set_fx_hudelement( "(<-) Page " + current_page + " of " + pages + " (->)" ); + } + + set_fx_hudelement( "(a) Add >" ); + set_fx_hudelement( "(x) Exit >" ); + } + else + { + set_fx_hudelement( "Origin: " + ent.v["origin"] ); + set_fx_hudelement( "Angles: " + ent.v["angles"] ); + } +#/ +} + +display_fx_add_options( ent ) +{ +/# + assert( menu( "add_options" ) ); + assert( entities_are_selected() ); + clear_fx_hudelements(); + set_fx_hudelement( "Selected: " + level.selected_fx_ents.size + " Distance: " + get_distance_from_ent( ent ) ); + level.createfxhudelements[0][0].color = ( 1, 1, 0 ); + set_fx_hudelement( "Name: " + ent.v["fxid"] ); + set_fx_hudelement( "Origin: " + ent.v["origin"] ); + set_fx_hudelement( "Angles: " + ent.v["angles"] ); + count = 0; + drawncount = 0; + + if ( level.effect_list_offset >= level.createfx_options.size ) + level.effect_list_offset = 0; + + for ( i = 0; i < level.createfx_options.size; i++ ) + { + option = level.createfx_options[i]; + + if ( isdefined( ent.v[option["name"]] ) ) + continue; + + if ( !mask( option["mask"], ent.v["type"] ) ) + continue; + + count++; + + if ( count < level.effect_list_offset ) + continue; + + if ( drawncount >= level.effect_list_offset_max ) + continue; + + drawncount++; + button_to_check = drawncount; + + if ( button_to_check == 10 ) + button_to_check = 0; + + if ( button_is_clicked( button_to_check + "" ) && !button_is_held( "f" ) ) + { + add_option_to_selected_entities( option ); + menunone(); + return; + } + + set_fx_hudelement( button_to_check + ". " + option["description"] ); + } + + if ( count > level.effect_list_offset_max ) + { + pages = ceil( level.createfx_options.size / level.effect_list_offset_max ); + current_page = level.effect_list_offset / level.effect_list_offset_max + 1; + set_fx_hudelement( "(<-) Page " + current_page + " of " + pages + " (->)" ); + } + + set_fx_hudelement( "(x) Exit >" ); +#/ +} + +add_option_to_selected_entities( option ) +{ +/# + for ( i = 0; i < level.selected_fx_ents.size; i++ ) + { + ent = level.selected_fx_ents[i]; + + if ( mask( option["mask"], ent.v["type"] ) ) + ent.v[option["name"]] = option["default"]; + } +#/ +} + +menunone() +{ +/# + level.effect_list_offset = 0; + clear_fx_hudelements(); + setmenu( "none" ); +#/ +} + +draw_effects_list( title ) +{ +/# + clear_fx_hudelements(); + + if ( !isdefined( title ) ) + title = "Pick an effect:"; + + set_fx_hudelement( title ); + count = 0; + more = 0; + keys = get_level_ambient_fx(); + + if ( level.effect_list_offset >= keys.size ) + level.effect_list_offset = 0; + else if ( level.effect_list_offset < 0 ) + level.effect_list_offset = int( floor( keys.size / level.effect_list_offset_max ) * level.effect_list_offset_max ); + + for ( i = level.effect_list_offset; i < keys.size; i++ ) + { + count += 1; + set_fx_hudelement( count + ". " + keys[i] ); + + if ( count >= level.effect_list_offset_max ) + { + more = 1; + break; + } + } + + if ( keys.size > level.effect_list_offset_max ) + { + pages = ceil( keys.size / level.effect_list_offset_max ); + current_page = level.effect_list_offset / level.effect_list_offset_max + 1; + set_fx_hudelement( "(<-) Page " + current_page + " of " + pages + " (->)" ); + } +#/ +} + +increment_list_offset() +{ +/# + level.effect_list_offset += level.effect_list_offset_max; +#/ +} + +decrement_list_offset() +{ +/# + level.effect_list_offset -= level.effect_list_offset_max; +#/ +} + +jump_to_effect() +{ +/# + count = 0; + picked_fxid = undefined; + keys = get_level_ambient_fx(); + + for ( i = level.effect_list_offset; i < keys.size; i++ ) + { + count += 1; + button_to_check = count; + + if ( button_to_check == 10 ) + button_to_check = 0; + + if ( button_is_clicked( button_to_check + "" ) && !button_is_held( "f" ) ) + { + picked_fxid = keys[i]; + break; + } + + if ( count > level.effect_list_offset_max ) + break; + } + + if ( !isdefined( picked_fxid ) ) + return; + + clear_entity_selection(); + ent = get_next_ent_with_same_id( -1, picked_fxid ); + + if ( isdefined( ent ) ) + { + level.cfx_next_ent = ent; + move_player_to_next_same_effect( 1 ); + } + else + iprintln( "Effect " + picked_fxid + " has not been placed." ); + + level.effect_list_offset = 0; + clear_fx_hudelements(); + setmenu( "none" ); +#/ +} + +get_level_ambient_fx() +{ +/# + if ( !isdefined( level._effect_keys ) ) + { + keys = getarraykeys( level._effect ); + level._effect_keys = []; + k = 0; + + for ( i = 0; i < keys.size; i++ ) + { + if ( issubstr( keys[i], "fx_" ) ) + { + level._effect_keys[k] = keys[i]; + k++; + } + } + + if ( level._effect_keys.size == 0 ) + level._effect_keys = keys; + } + + return level._effect_keys; +#/ +} + +get_distance_from_ent( ent ) +{ +/# + player = get_players()[0]; + return distance( player geteye(), ent.v["origin"] ); +#/ +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/_createfxundo.gsc b/ZM/Maps/Tranzit Diner/maps/mp/_createfxundo.gsc new file mode 100644 index 0000000..3ef987b --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/_createfxundo.gsc @@ -0,0 +1,508 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\_createfx; +#include maps\mp\_createfxmenu; + +store_undo_state( change_type, ents ) +{ + if ( !isdefined( level.cfx_undo_states ) ) + { + level.cfx_undo_states = []; + level.cfx_redo_states = []; + level.cfx_limbo_state = spawnstruct(); + level.cfx_max_states = 10; + } + + if ( !isarray( ents ) ) + ents = array( ents ); + + temp_array = []; + + for ( i = 0; i < ents.size; i++ ) + temp_array[i] = copy_fx_ent( ents[i] ); + + state = spawnstruct(); + state.operation = change_type; + state.last_action = level.cfx_last_action; + state.ent_array = temp_array; + + if ( level.cfx_undo_states.size >= level.cfx_max_states ) + level.cfx_undo_states = array_drop( level.cfx_undo_states ); + + level.cfx_undo_states[level.cfx_undo_states.size] = state; + level.cfx_redo_states = []; + level.cfx_limbo_state = undefined; + debug_print_latest_state( "undo" ); +} + +undo() +{ + if ( !isdefined( level.createfxent ) || !isdefined( level.cfx_undo_states ) || level.cfx_undo_states.size < 1 ) + return; + + revert_state = level.cfx_undo_states[level.cfx_undo_states.size - 1]; + + if ( level.cfx_last_action != "none" ) + { + store_undo_state( "edit", level.selected_fx_ents ); + move_undo_state_to_redo(); + clear_entity_selection( "skip_undo" ); + apply_state_change( "undo", revert_state ); + move_undo_state_to_limbo(); + level.cfx_last_action = "none"; + } + else + { + clear_entity_selection( "skip_undo" ); + + if ( revert_state.operation != "edit" ) + { + apply_state_change( "undo", revert_state ); + move_undo_state_to_redo(); + level.cfx_last_action = "none"; + } + else if ( isdefined( level.cfx_limbo_state ) ) + { + move_limbo_state_to_redo(); + apply_state_change( "undo", revert_state ); + move_undo_state_to_limbo(); + level.cfx_last_action = "none"; + } + else + { + if ( level.cfx_undo_states.size > 1 ) + { + move_undo_state_to_redo(); + revert_state = level.cfx_undo_states[level.cfx_undo_states.size - 1]; + } + + apply_state_change( "undo", revert_state ); + move_undo_state_to_limbo(); + } + } +} + +apply_state_change( type, revert_state ) +{ + if ( type == "undo" ) + { +/# + println( "^2CreateFX: Undo operation" ); +#/ + if ( revert_state.operation == "edit" ) + undo_edit( revert_state.ent_array ); + else if ( revert_state.operation == "add" ) + undo_add( revert_state.ent_array ); + else if ( revert_state.operation == "delete" ) + undo_delete( revert_state.ent_array ); + } + else + { +/# + println( "^2CreateFX: Redo operation" ); +#/ + if ( revert_state.operation == "edit" ) + undo_edit( revert_state.ent_array ); + else if ( revert_state.operation == "add" ) + undo_delete( revert_state.ent_array ); + else if ( revert_state.operation == "delete" ) + undo_add( revert_state.ent_array ); + } +} + +move_undo_state_to_redo() +{ + if ( level.cfx_redo_states.size >= level.cfx_max_states ) + level.cfx_redo_states = array_drop( level.cfx_redo_states ); + + level.cfx_redo_states[level.cfx_redo_states.size] = level.cfx_undo_states[level.cfx_undo_states.size - 1]; + level.cfx_undo_states = array_pop( level.cfx_undo_states ); + debug_print_latest_state( "undo" ); + debug_print_latest_state( "redo" ); +} + +move_redo_state_to_undo() +{ + if ( level.cfx_undo_states.size >= level.cfx_max_states ) + level.cfx_undo_states = array_drop( level.cfx_undo_states ); + + level.cfx_undo_states[level.cfx_undo_states.size] = level.cfx_redo_states[level.cfx_redo_states.size - 1]; + level.cfx_redo_states = array_pop( level.cfx_redo_states ); + debug_print_latest_state( "undo" ); + debug_print_latest_state( "redo" ); +} + +move_undo_state_to_limbo() +{ + level.cfx_limbo_state = level.cfx_undo_states[level.cfx_undo_states.size - 1]; + level.cfx_undo_states = array_pop( level.cfx_undo_states ); + debug_print_latest_state( "undo" ); + debug_print_latest_state( "limbo" ); +} + +move_redo_state_to_limbo() +{ + level.cfx_limbo_state = level.cfx_redo_states[level.cfx_redo_states.size - 1]; + level.cfx_redo_states = array_pop( level.cfx_redo_states ); + debug_print_latest_state( "redo" ); + debug_print_latest_state( "limbo" ); +} + +move_limbo_state_to_undo() +{ + if ( level.cfx_undo_states.size >= level.cfx_max_states ) + level.cfx_undo_states = array_drop( level.cfx_undo_states ); + + level.cfx_undo_states[level.cfx_undo_states.size] = level.cfx_limbo_state; + level.cfx_limbo_state = undefined; + debug_print_latest_state( "undo" ); + debug_print_latest_state( "limbo" ); +} + +move_limbo_state_to_redo() +{ + if ( level.cfx_redo_states.size >= level.cfx_max_states ) + level.cfx_redo_states = array_drop( level.cfx_redo_states ); + + level.cfx_redo_states[level.cfx_redo_states.size] = level.cfx_limbo_state; + level.cfx_limbo_state = undefined; + debug_print_latest_state( "redo" ); +} + +undo_edit( ent_array ) +{ + ent_array = reorder_ent_array_by_uniqueid( ent_array ); +/# + println( "^3CreateFX: Undoing edit" ); + debug_print_ent_array( ent_array, "ent_array[]" ); + debug_print_ent_array( level.createfxent, "level.createFXent[]" ); +#/ + last_id = ent_array[ent_array.size - 1].uniqueid; + + if ( last_id > level.createfxent.size - 1 ) + last_id = level.createfxent.size - 1; + + j = ent_array.size - 1; + source_ent = ent_array[j]; + + for ( i = last_id; i >= 0; i-- ) + { + target_ent = level.createfxent[i]; + + if ( source_ent.uniqueid == target_ent.uniqueid ) + { + copy_values_between_fx_ents( source_ent, target_ent ); + select_entity( i, target_ent, "skip_undo" ); + j--; + + if ( j < 0 ) + break; + + source_ent = ent_array[j]; + } + } + + update_selected_entities(); +/# + println( "^1CreateFX: Finished edit" ); + debug_print_ent_array( level.createfxent, "level.createFXent[]" ); +#/ +} + +undo_add( ent_array ) +{ + ent_array = reorder_ent_array_by_uniqueid( ent_array ); +/# + println( "^3createfx: Undoing add." ); + debug_print_ent_array( ent_array, "ent_array[]" ); + debug_print_ent_array( level.createfxent, "level.createFXent[]" ); +#/ + last_id = ent_array[ent_array.size - 1].uniqueid; + + if ( last_id > level.createfxent.size - 1 ) + last_id = level.createfxent.size - 1; + + j = ent_array.size - 1; + source_ent = ent_array[j]; + + for ( i = last_id; i >= 0; i-- ) + { + target_ent = level.createfxent[i]; + + if ( source_ent.uniqueid == target_ent.uniqueid ) + { + if ( isdefined( target_ent.looper ) ) + target_ent.looper delete(); + + target_ent notify( "stop_loop" ); + level.createfxent[i] = undefined; + j--; + + if ( j < 0 ) + break; + + source_ent = ent_array[j]; + } + } +/# + debug_print_ent_array( level.createfxent, "level.createFXent[]" ); + println( "createfx: Starting array_remove_undefined()" ); +#/ + arrayremovevalue( level.createfxent, undefined ); +/# + println( "^1CreateFX: Finished undo add." ); + debug_print_ent_array( level.createfxent, "level.createFXent[]" ); +#/ + clear_fx_hudelements(); +} + +undo_delete( ent_array ) +{ +/# + println( "^3CreateFX: Undoing delete" ); + debug_print_ent_array( ent_array, "ent_array in undo_delete()" ); + debug_print_ent_array( level.createfxent, "level.createFXent[]" ); +#/ + ent_array = reorder_ent_array_by_uniqueid( ent_array ); + + if ( level.createfxent.size == 0 ) + { + for ( i = 0; i < ent_array.size; i++ ) + level.createfxent[i] = copy_fx_ent( ent_array[i] ); + } + else + { + temp_array = []; + i = 0; + + for ( j = 0; j < level.createfxent.size; j++ ) + { + target_ent = level.createfxent[j]; + + if ( i >= ent_array.size ) + { + temp_array[temp_array.size] = target_ent; + continue; + } + + source_ent = ent_array[i]; + + if ( target_ent.uniqueid < source_ent.uniqueid ) + { + temp_array[temp_array.size] = target_ent; + continue; + } + + temp_array[temp_array.size] = copy_fx_ent( source_ent ); + j--; + i++; + } + + while ( i < ent_array.size ) + { + temp_array[temp_array.size] = ent_array[i]; + i++; + } + + level.createfxent = temp_array; + } +/# + println( "^1Createfx: Finished undoing delete, pre-selection" ); + debug_print_ent_array( level.createfxent, "level.createFXent[]" ); +#/ + last_id = ent_array[ent_array.size - 1].uniqueid; + + if ( last_id > level.createfxent.size - 1 ) + last_id = level.createfxent.size - 1; + + j = ent_array.size - 1; + source_ent = ent_array[j]; + + for ( i = last_id; i >= 0; i-- ) + { + target_ent = level.createfxent[i]; + + if ( source_ent.uniqueid == target_ent.uniqueid ) + { + target_ent post_entity_creation_function(); + select_entity( i, target_ent, "skip_undo" ); + j--; + + if ( j < 0 ) + break; + + source_ent = ent_array[j]; + } + } + + update_selected_entities(); +} + +redo() +{ + if ( !isdefined( level.createfxent ) || !isdefined( level.cfx_redo_states ) || level.cfx_redo_states.size < 1 ) + return; + + clear_entity_selection( "skip_undo" ); + + if ( isdefined( level.cfx_limbo_state ) ) + { + move_limbo_state_to_undo(); + move_redo_state_to_limbo(); + apply_state_change( "redo", level.cfx_limbo_state ); + } + else + { + revert_state = level.cfx_redo_states[level.cfx_redo_states.size - 1]; + apply_state_change( "redo", revert_state ); + + if ( revert_state.operation == "edit" ) + move_redo_state_to_limbo(); + else + move_redo_state_to_undo(); + } + + level.cfx_last_action = "none"; +} + +reorder_ent_array_by_uniqueid( ent_array ) +{ + if ( ent_array.size <= 1 ) + return ent_array; + + array_size = ent_array.size; + + for ( i = 0; i < array_size - 1; i++ ) + { + for ( j = i + 1; j < array_size; j++ ) + { + if ( ent_array[i].uniqueid > ent_array[j].uniqueid ) + { + temp_ent = ent_array[i]; + ent_array[i] = ent_array[j]; + ent_array[j] = temp_ent; + } + } + } + + return ent_array; +} + +copy_fx_ent( ent ) +{ + temp_ent = spawnstruct(); + temp_ent.drawn = ent.drawn; + temp_ent.drawn_axis_model = ent.drawn_axis_model; + temp_ent.last_fx_index = ent.last_fx_index; + temp_ent.textalpha = ent.textalpha; + temp_ent.uniqueid = ent.uniqueid; + temp_ent.v = ent.v; + return temp_ent; +} + +copy_values_between_fx_ents( source, dest ) +{ + dest.drawn = source.drawn; + dest.drawn_axis_model = source.drawn_axis_model; + dest.last_fx_index = source.last_fx_index; + dest.textalpha = source.textalpha; + dest.v = source.v; + return dest; +} + +array_pop( array ) +{ + array_size = array.size - 1; + temp_array = []; + + if ( array_size <= 0 ) + return temp_array; + + for ( i = 0; i < array_size; i++ ) + temp_array[i] = array[i]; + + array = temp_array; + return array; +} + +array_drop( array ) +{ + if ( array.size > 0 ) + { + temp_array = []; + + for ( i = 1; i < array.size; i++ ) + temp_array[i - 1] = array[i]; + + array = temp_array; + } + + return array; +} + +debug_print_ent_array( array, name ) +{ +/# + if ( isdefined( name ) ) + println( "Printing out " + name ); + else + println( "Printing out some array" ); + + for ( i = 0; i < array.size; i++ ) + { + if ( !isdefined( array[i] ) ) + { + println( "" + i + ": deleted effect" ); + continue; + } + + println( "" + i + ": uniqueid: " + array[i].uniqueid + " fxid: " + array[i].v["fxid"] ); + } +#/ +} + +debug_print_latest_state( type ) +{ +/# + println( "^3Saving " + type + " state" ); + + if ( type == "undo" ) + { + if ( !isdefined( level.cfx_undo_states[level.cfx_undo_states.size - 1] ) ) + { + println( "There are no undo states." ); + return; + } + + state = level.cfx_undo_states[level.cfx_undo_states.size - 1]; + size = level.cfx_undo_states.size - 1; + } + else if ( type == "redo" ) + { + if ( !isdefined( level.cfx_redo_states[level.cfx_redo_states.size - 1] ) ) + { + println( "There are no redo states." ); + return; + } + + state = level.cfx_redo_states[level.cfx_redo_states.size - 1]; + size = level.cfx_redo_states.size - 1; + } + else + { + if ( !isdefined( level.cfx_limbo_state ) ) + { + println( "There is no limbo state." ); + return; + } + + state = level.cfx_limbo_state; + size = 0; + } + + println( "State " + size + " - " + state.operation + ": " + state.last_action ); + debug_print_ent_array( state.ent_array, "save state ent_array" ); +#/ +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/_demo.gsc b/ZM/Maps/Tranzit Diner/maps/mp/_demo.gsc new file mode 100644 index 0000000..554e430 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/_demo.gsc @@ -0,0 +1,90 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +init() +{ + level.bookmark["kill"] = 0; + level.bookmark["event"] = 1; + level.bookmark["zm_round_end"] = 2; + level.bookmark["zm_player_downed"] = 3; + level.bookmark["zm_player_revived"] = 4; + level.bookmark["zm_player_bledout"] = 5; + level.bookmark["zm_player_use_magicbox"] = 6; + level.bookmark["score_event"] = 7; + level.bookmark["medal"] = 8; + level.bookmark["round_result"] = 9; + level.bookmark["game_result"] = 10; + level.bookmark["zm_powerup_dropped"] = 11; + level.bookmark["zm_player_powerup_grabbed"] = 12; + level.bookmark["zm_player_perk"] = 13; + level.bookmark["zm_power"] = 14; + level.bookmark["zm_player_door"] = 15; + level.bookmark["zm_player_buildable_placed"] = 16; + level.bookmark["zm_player_use_packapunch"] = 17; + level.bookmark["zm_player_rampage"] = 18; + level.bookmark["zm_player_grenade_special"] = 19; + level.bookmark["zm_player_grenade_multiattack"] = 20; + level.bookmark["zm_player_meat_stink"] = 21; + level.bookmark["zm_player_grabbed_magicbox"] = 22; + level.bookmark["zm_player_grabbed_packapunch"] = 23; + level.bookmark["zm_player_grenade_special_long"] = 24; +} + +bookmark( type, time, clientent1, clientent2, eventpriority, inflictorent, overrideentitycamera, actorent ) +{ + assert( isdefined( level.bookmark[type] ), "Unable to find a bookmark type for type - " + type ); + client1 = 255; + client2 = 255; + inflictorentnum = -1; + inflictorenttype = 0; + inflictorbirthtime = 0; + actorentnum = undefined; + scoreeventpriority = 0; + + if ( isdefined( clientent1 ) ) + client1 = clientent1 getentitynumber(); + + if ( isdefined( clientent2 ) ) + client2 = clientent2 getentitynumber(); + + if ( isdefined( eventpriority ) ) + scoreeventpriority = eventpriority; + + if ( isdefined( inflictorent ) ) + { + inflictorentnum = inflictorent getentitynumber(); + inflictorenttype = inflictorent getentitytype(); + + if ( isdefined( inflictorent.birthtime ) ) + inflictorbirthtime = inflictorent.birthtime; + } + + if ( !isdefined( overrideentitycamera ) ) + overrideentitycamera = 0; + + if ( isdefined( actorent ) ) + actorentnum = actorent getentitynumber(); + + adddemobookmark( level.bookmark[type], time, client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum ); +} + +gameresultbookmark( type, winningteamindex, losingteamindex ) +{ + assert( isdefined( level.bookmark[type] ), "Unable to find a bookmark type for type - " + type ); + client1 = 255; + client2 = 255; + scoreeventpriority = 0; + inflictorentnum = -1; + inflictorenttype = 0; + inflictorbirthtime = 0; + overrideentitycamera = 0; + actorentnum = undefined; + + if ( isdefined( winningteamindex ) ) + client1 = winningteamindex; + + if ( isdefined( losingteamindex ) ) + client2 = losingteamindex; + + adddemobookmark( level.bookmark[type], gettime(), client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/_fx.gsc b/ZM/Maps/Tranzit Diner/maps/mp/_fx.gsc new file mode 100644 index 0000000..127dc2e --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/_fx.gsc @@ -0,0 +1,453 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\_createfx; + +print_org( fxcommand, fxid, fxpos, waittime ) +{ +/# + if ( getdvar( _hash_F49A52C ) == "1" ) + { + println( "{" ); + println( "\"origin\" \"" + fxpos[0] + " " + fxpos[1] + " " + fxpos[2] + "\"" ); + println( "\"classname\" \"script_model\"" ); + println( "\"model\" \"fx\"" ); + println( "\"script_fxcommand\" \"" + fxcommand + "\"" ); + println( "\"script_fxid\" \"" + fxid + "\"" ); + println( "\"script_delay\" \"" + waittime + "\"" ); + println( "}" ); + } +#/ +} + +oneshotfx( fxid, fxpos, waittime, fxpos2 ) +{ + +} + +oneshotfxthread() +{ + wait 0.05; + + if ( self.v["delay"] > 0 ) + wait( self.v["delay"] ); + + create_triggerfx(); +} + +create_triggerfx() +{ + self.looper = spawnfx_wrapper( self.v["fxid"], self.v["origin"], self.v["forward"], self.v["up"] ); + triggerfx( self.looper, self.v["delay"] ); + create_loopsound(); +} + +exploderfx( num, fxid, fxpos, waittime, fxpos2, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout, exploder_group ) +{ + if ( 1 ) + { + ent = createexploder( fxid ); + ent.v["origin"] = fxpos; + ent.v["angles"] = ( 0, 0, 0 ); + + if ( isdefined( fxpos2 ) ) + ent.v["angles"] = vectortoangles( fxpos2 - fxpos ); + + ent.v["delay"] = waittime; + ent.v["exploder"] = num; + return; + } + + fx = spawn( "script_origin", ( 0, 0, 0 ) ); + fx.origin = fxpos; + fx.angles = vectortoangles( fxpos2 - fxpos ); + fx.script_exploder = num; + fx.script_fxid = fxid; + fx.script_delay = waittime; + fx.script_firefx = firefx; + fx.script_firefxdelay = firefxdelay; + fx.script_firefxsound = firefxsound; + fx.script_sound = fxsound; + fx.script_earthquake = fxquake; + fx.script_damage = fxdamage; + fx.script_radius = damage_radius; + fx.script_soundalias = soundalias; + fx.script_firefxtimeout = firefxtimeout; + fx.script_repeat = repeat; + fx.script_delay_min = delay_min; + fx.script_delay_max = delay_max; + fx.script_exploder_group = exploder_group; + forward = anglestoforward( fx.angles ); + forward = vectorscale( forward, 150 ); + fx.targetpos = fxpos + forward; + + if ( !isdefined( level._script_exploders ) ) + level._script_exploders = []; + + level._script_exploders[level._script_exploders.size] = fx; + maps\mp\_createfx::createfx_showorigin( fxid, fxpos, waittime, fxpos2, "exploderfx", fx, undefined, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout ); +} + +loopfx( fxid, fxpos, waittime, fxpos2, fxstart, fxstop, timeout ) +{ +/# + println( "Loopfx is deprecated!" ); +#/ + ent = createloopeffect( fxid ); + ent.v["origin"] = fxpos; + ent.v["angles"] = ( 0, 0, 0 ); + + if ( isdefined( fxpos2 ) ) + ent.v["angles"] = vectortoangles( fxpos2 - fxpos ); + + ent.v["delay"] = waittime; +} + +create_looper() +{ + self.looper = playloopedfx( level._effect[self.v["fxid"]], self.v["delay"], self.v["origin"], 0, self.v["forward"], self.v["up"] ); + create_loopsound(); +} + +create_loopsound() +{ + self notify( "stop_loop" ); + + if ( isdefined( self.v["soundalias"] ) && self.v["soundalias"] != "nil" ) + { + if ( isdefined( self.looper ) ) + self.looper thread maps\mp\_utility::loop_fx_sound( self.v["soundalias"], self.v["origin"], "death" ); + else + thread maps\mp\_utility::loop_fx_sound( self.v["soundalias"], self.v["origin"], "stop_loop" ); + } +} + +stop_loopsound() +{ + self notify( "stop_loop" ); +} + +loopfxthread() +{ + wait 0.05; + + if ( isdefined( self.fxstart ) ) + level waittill( "start fx" + self.fxstart ); + + while ( true ) + { + create_looper(); + + if ( isdefined( self.timeout ) ) + thread loopfxstop( self.timeout ); + + if ( isdefined( self.fxstop ) ) + level waittill( "stop fx" + self.fxstop ); + else + return; + + if ( isdefined( self.looper ) ) + self.looper delete(); + + if ( isdefined( self.fxstart ) ) + level waittill( "start fx" + self.fxstart ); + else + return; + } +} + +loopfxchangeid( ent ) +{ + self endon( "death" ); + + ent waittill( "effect id changed", change ); +} + +loopfxchangeorg( ent ) +{ + self endon( "death" ); + + for (;;) + { + ent waittill( "effect org changed", change ); + + self.origin = change; + } +} + +loopfxchangedelay( ent ) +{ + self endon( "death" ); + + ent waittill( "effect delay changed", change ); +} + +loopfxdeletion( ent ) +{ + self endon( "death" ); + + ent waittill( "effect deleted" ); + + self delete(); +} + +loopfxstop( timeout ) +{ + self endon( "death" ); + wait( timeout ); + self.looper delete(); +} + +loopsound( sound, pos, waittime ) +{ + level thread loopsoundthread( sound, pos, waittime ); +} + +loopsoundthread( sound, pos, waittime ) +{ + org = spawn( "script_origin", pos ); + org.origin = pos; + org playloopsound( sound ); +} + +gunfireloopfx( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) +{ + thread gunfireloopfxthread( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ); +} + +gunfireloopfxthread( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) +{ + level endon( "stop all gunfireloopfx" ); + wait 0.05; + + if ( betweensetsmax < betweensetsmin ) + { + temp = betweensetsmax; + betweensetsmax = betweensetsmin; + betweensetsmin = temp; + } + + betweensetsbase = betweensetsmin; + betweensetsrange = betweensetsmax - betweensetsmin; + + if ( shotdelaymax < shotdelaymin ) + { + temp = shotdelaymax; + shotdelaymax = shotdelaymin; + shotdelaymin = temp; + } + + shotdelaybase = shotdelaymin; + shotdelayrange = shotdelaymax - shotdelaymin; + + if ( shotsmax < shotsmin ) + { + temp = shotsmax; + shotsmax = shotsmin; + shotsmin = temp; + } + + shotsbase = shotsmin; + shotsrange = shotsmax - shotsmin; + fxent = spawnfx( level._effect[fxid], fxpos ); + + for (;;) + { + shotnum = shotsbase + randomint( shotsrange ); + + for ( i = 0; i < shotnum; i++ ) + { + triggerfx( fxent ); + wait( shotdelaybase + randomfloat( shotdelayrange ) ); + } + + wait( betweensetsbase + randomfloat( betweensetsrange ) ); + } +} + +gunfireloopfxvec( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) +{ + thread gunfireloopfxvecthread( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ); +} + +gunfireloopfxvecthread( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) +{ + level endon( "stop all gunfireloopfx" ); + wait 0.05; + + if ( betweensetsmax < betweensetsmin ) + { + temp = betweensetsmax; + betweensetsmax = betweensetsmin; + betweensetsmin = temp; + } + + betweensetsbase = betweensetsmin; + betweensetsrange = betweensetsmax - betweensetsmin; + + if ( shotdelaymax < shotdelaymin ) + { + temp = shotdelaymax; + shotdelaymax = shotdelaymin; + shotdelaymin = temp; + } + + shotdelaybase = shotdelaymin; + shotdelayrange = shotdelaymax - shotdelaymin; + + if ( shotsmax < shotsmin ) + { + temp = shotsmax; + shotsmax = shotsmin; + shotsmin = temp; + } + + shotsbase = shotsmin; + shotsrange = shotsmax - shotsmin; + fxpos2 = vectornormalize( fxpos2 - fxpos ); + fxent = spawnfx( level._effect[fxid], fxpos, fxpos2 ); + + for (;;) + { + shotnum = shotsbase + randomint( shotsrange ); + + for ( i = 0; i < int( shotnum / level.fxfireloopmod ); i++ ) + { + triggerfx( fxent ); + delay = ( shotdelaybase + randomfloat( shotdelayrange ) ) * level.fxfireloopmod; + + if ( delay < 0.05 ) + delay = 0.05; + + wait( delay ); + } + + wait( shotdelaybase + randomfloat( shotdelayrange ) ); + wait( betweensetsbase + randomfloat( betweensetsrange ) ); + } +} + +setfireloopmod( value ) +{ + level.fxfireloopmod = 1 / value; +} + +setup_fx() +{ + if ( !isdefined( self.script_fxid ) || !isdefined( self.script_fxcommand ) || !isdefined( self.script_delay ) ) + return; + + org = undefined; + + if ( isdefined( self.target ) ) + { + ent = getent( self.target, "targetname" ); + + if ( isdefined( ent ) ) + org = ent.origin; + } + + fxstart = undefined; + + if ( isdefined( self.script_fxstart ) ) + fxstart = self.script_fxstart; + + fxstop = undefined; + + if ( isdefined( self.script_fxstop ) ) + fxstop = self.script_fxstop; + + if ( self.script_fxcommand == "OneShotfx" ) + oneshotfx( self.script_fxid, self.origin, self.script_delay, org ); + + if ( self.script_fxcommand == "loopfx" ) + loopfx( self.script_fxid, self.origin, self.script_delay, org, fxstart, fxstop ); + + if ( self.script_fxcommand == "loopsound" ) + loopsound( self.script_fxid, self.origin, self.script_delay ); + + self delete(); +} + +script_print_fx() +{ +/# + if ( !isdefined( self.script_fxid ) || !isdefined( self.script_fxcommand ) || !isdefined( self.script_delay ) ) + { + println( "Effect at origin ", self.origin, " doesn't have script_fxid/script_fxcommand/script_delay" ); + self delete(); + return; + } + + if ( isdefined( self.target ) ) + org = getent( self.target, "targetname" ).origin; + else + org = "undefined"; + + if ( self.script_fxcommand == "OneShotfx" ) + println( "mapsmp_fx::OneShotfx(\"" + self.script_fxid + "\", " + self.origin + ", " + self.script_delay + ", " + org + ");" ); + + if ( self.script_fxcommand == "loopfx" ) + println( "mapsmp_fx::LoopFx(\"" + self.script_fxid + "\", " + self.origin + ", " + self.script_delay + ", " + org + ");" ); + + if ( self.script_fxcommand == "loopsound" ) + println( "mapsmp_fx::LoopSound(\"" + self.script_fxid + "\", " + self.origin + ", " + self.script_delay + ", " + org + ");" ); +#/ +} + +script_playfx( id, pos, pos2 ) +{ + if ( !id ) + return; + + if ( isdefined( pos2 ) ) + playfx( id, pos, pos2 ); + else + playfx( id, pos ); +} + +script_playfxontag( id, ent, tag ) +{ + if ( !id ) + return; + + playfxontag( id, ent, tag ); +} + +grenadeexplosionfx( pos ) +{ + playfx( level._effect["mechanical explosion"], pos ); + earthquake( 0.15, 0.5, pos, 250 ); +} + +soundfx( fxid, fxpos, endonnotify ) +{ + org = spawn( "script_origin", ( 0, 0, 0 ) ); + org.origin = fxpos; + org playloopsound( fxid ); + + if ( isdefined( endonnotify ) ) + org thread soundfxdelete( endonnotify ); +} + +soundfxdelete( endonnotify ) +{ + level waittill( endonnotify ); + + self delete(); +} + +blenddelete( blend ) +{ + self waittill( "death" ); + + blend delete(); +} + +spawnfx_wrapper( fx_id, origin, forward, up ) +{ + assert( isdefined( level._effect[fx_id] ), "Missing level._effect[\"" + fx_id + "\"]. You did not setup the fx before calling it in createFx." ); + fx_object = spawnfx( level._effect[fx_id], origin, forward, up ); + return fx_object; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/_fxanim.gsc b/ZM/Maps/Tranzit Diner/maps/mp/_fxanim.gsc new file mode 100644 index 0000000..73937d3 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/_fxanim.gsc @@ -0,0 +1,8 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +init() +{ + level.scr_anim = []; + level.scr_anim["fxanim_props"] = []; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/_global_fx.gsc b/ZM/Maps/Tranzit Diner/maps/mp/_global_fx.gsc new file mode 100644 index 0000000..5b002ac --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/_global_fx.gsc @@ -0,0 +1,53 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; + +main() +{ + randomstartdelay = randomfloatrange( -20, -15 ); + global_fx( "barrel_fireFX_origin", "global_barrel_fire", "fire/firelp_barrel_pm", randomstartdelay, "fire_barrel_small" ); + global_fx( "ch_streetlight_02_FX_origin", "ch_streetlight_02_FX", "misc/lighthaze", randomstartdelay ); + global_fx( "me_streetlight_01_FX_origin", "me_streetlight_01_FX", "misc/lighthaze_bog_a", randomstartdelay ); + global_fx( "ch_street_light_01_on", "lamp_glow_FX", "misc/light_glow_white", randomstartdelay ); + global_fx( "highway_lamp_post", "ch_streetlight_02_FX", "misc/lighthaze_villassault", randomstartdelay ); + global_fx( "cs_cargoship_spotlight_on_FX_origin", "cs_cargoship_spotlight_on_FX", "misc/lighthaze", randomstartdelay ); + global_fx( "me_dumpster_fire_FX_origin", "me_dumpster_fire_FX", "fire/firelp_med_pm_nodistort", randomstartdelay, "fire_dumpster_medium" ); + global_fx( "com_tires_burning01_FX_origin", "com_tires_burning01_FX", "fire/tire_fire_med", randomstartdelay ); + global_fx( "icbm_powerlinetower_FX_origin", "icbm_powerlinetower_FX", "misc/power_tower_light_red_blink", randomstartdelay ); +} + +global_fx( targetname, fxname, fxfile, delay, soundalias ) +{ + ents = getstructarray( targetname, "targetname" ); + + if ( !isdefined( ents ) ) + return; + + if ( ents.size <= 0 ) + return; + + for ( i = 0; i < ents.size; i++ ) + ents[i] global_fx_create( fxname, fxfile, delay, soundalias ); +} + +global_fx_create( fxname, fxfile, delay, soundalias ) +{ + if ( !isdefined( level._effect ) ) + level._effect = []; + + if ( !isdefined( level._effect[fxname] ) ) + level._effect[fxname] = loadfx( fxfile ); + + if ( !isdefined( self.angles ) ) + self.angles = ( 0, 0, 0 ); + + ent = createoneshoteffect( fxname ); + ent.v["origin"] = self.origin; + ent.v["angles"] = self.angles; + ent.v["fxid"] = fxname; + ent.v["delay"] = delay; + + if ( isdefined( soundalias ) ) + ent.v["soundalias"] = soundalias; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/_interactive_objects.gsc b/ZM/Maps/Tranzit Diner/maps/mp/_interactive_objects.gsc new file mode 100644 index 0000000..148d9d5 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/_interactive_objects.gsc @@ -0,0 +1,387 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; + +init() +{ + level.barrelexplodingthisframe = 0; + qbarrels = 0; + all_barrels = []; + barrels = getentarray( "explodable_barrel", "targetname" ); + + if ( isdefined( barrels ) && barrels.size > 0 ) + { + qbarrels = 1; + + for ( i = 0; i < barrels.size; i++ ) + all_barrels[all_barrels.size] = barrels[i]; + } + + barrels = getentarray( "explodable_barrel", "script_noteworthy" ); + + if ( isdefined( barrels ) && barrels.size > 0 ) + { + qbarrels = 1; + + for ( i = 0; i < barrels.size; i++ ) + all_barrels[all_barrels.size] = barrels[i]; + } + + if ( qbarrels ) + { + precachemodel( "global_explosive_barrel" ); + level.barrelburn = 100; + level.barrelhealth = 250; + level.barrelingsound = "exp_redbarrel_ignition"; + level.barrelexpsound = "exp_redbarrel"; + level.breakables_fx["barrel"]["burn_start"] = loadfx( "destructibles/fx_barrel_ignite" ); + level.breakables_fx["barrel"]["burn"] = loadfx( "destructibles/fx_barrel_fire_top" ); + level.breakables_fx["barrel"]["explode"] = loadfx( "destructibles/fx_dest_barrelexp" ); + array_thread( all_barrels, ::explodable_barrel_think ); + } + + qcrates = 0; + all_crates = []; + crates = getentarray( "flammable_crate", "targetname" ); + + if ( isdefined( crates ) && crates.size > 0 ) + { + qcrates = 1; + + for ( i = 0; i < crates.size; i++ ) + all_crates[all_crates.size] = crates[i]; + } + + crates = getentarray( "flammable_crate", "script_noteworthy" ); + + if ( isdefined( crates ) && crates.size > 0 ) + { + qcrates = 1; + + for ( i = 0; i < crates.size; i++ ) + all_crates[all_crates.size] = crates[i]; + } + + if ( qcrates ) + { + precachemodel( "global_flammable_crate_jap_piece01_d" ); + level.crateburn = 100; + level.cratehealth = 200; + level.breakables_fx["ammo_crate"]["burn_start"] = loadfx( "destructibles/fx_ammobox_ignite" ); + level.breakables_fx["ammo_crate"]["burn"] = loadfx( "destructibles/fx_ammobox_fire_top" ); + level.breakables_fx["ammo_crate"]["explode"] = loadfx( "destructibles/fx_ammoboxExp" ); + level.crateignsound = "Ignition_ammocrate"; + level.crateexpsound = "Explo_ammocrate"; + array_thread( all_crates, ::flammable_crate_think ); + } + + if ( !qbarrels && !qcrates ) + return; +} + +explodable_barrel_think() +{ + if ( self.classname != "script_model" ) + return; + + self endon( "exploding" ); + self breakable_clip(); + self.health = level.barrelhealth; + self setcandamage( 1 ); + self.targetname = "explodable_barrel"; + + if ( sessionmodeiszombiesgame() ) + self.removeexplodable = 1; + + for (;;) + { + self waittill( "damage", amount, attacker, direction_vec, p, type ); +/# + println( "BARRELDAMAGE: " + type ); +#/ + if ( type == "MOD_MELEE" || type == "MOD_IMPACT" ) + continue; + + if ( isdefined( self.script_requires_player ) && self.script_requires_player && !isplayer( attacker ) ) + continue; + + if ( isdefined( self.script_selfisattacker ) && self.script_selfisattacker ) + self.damageowner = self; + else + self.damageowner = attacker; + + self.health -= amount; + + if ( self.health <= level.barrelburn ) + self thread explodable_barrel_burn(); + } +} + +explodable_barrel_burn() +{ + count = 0; + startedfx = 0; + up = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) ); + worldup = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) ); + dot = vectordot( up, worldup ); + offset1 = ( 0, 0, 0 ); + offset2 = up * vectorscale( ( 0, 0, 1 ), 44.0 ); + + if ( dot < 0.5 ) + { + offset1 = up * vectorscale( ( 0, 0, 1 ), 22.0 ) - vectorscale( ( 0, 0, 1 ), 30.0 ); + offset2 = up * vectorscale( ( 0, 0, 1 ), 22.0 ) + vectorscale( ( 0, 0, 1 ), 14.0 ); + } + + while ( self.health > 0 ) + { + if ( !startedfx ) + { + playfx( level.breakables_fx["barrel"]["burn_start"], self.origin + offset1 ); + level thread play_sound_in_space( level.barrelingsound, self.origin ); + startedfx = 1; + } + + if ( count > 20 ) + count = 0; + + playfx( level.breakables_fx["barrel"]["burn"], self.origin + offset2 ); + self playloopsound( "barrel_fuse" ); + + if ( count == 0 ) + self.health -= 10 + randomint( 10 ); + + count++; + wait 0.05; + } + + level notify( "explosion_started" ); + self thread explodable_barrel_explode(); +} + +explodable_barrel_explode() +{ + self notify( "exploding" ); + self death_notify_wrapper(); + up = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) ); + worldup = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) ); + dot = vectordot( up, worldup ); + offset = ( 0, 0, 0 ); + + if ( dot < 0.5 ) + { + start = self.origin + vectorscale( up, 22 ); + trace = physicstrace( start, start + vectorscale( ( 0, 0, -1 ), 64.0 ) ); + end = trace["position"]; + offset = end - self.origin; + } + + offset += vectorscale( ( 0, 0, 1 ), 4.0 ); + mindamage = 1; + maxdamage = 250; + blastradius = 250; + level thread play_sound_in_space( level.barrelexpsound, self.origin ); + playfx( level.breakables_fx["barrel"]["explode"], self.origin + offset ); + physicsexplosionsphere( self.origin + offset, 100, 80, 1, maxdamage, mindamage ); + level.barrelexplodingthisframe = 1; + + if ( isdefined( self.remove ) ) + self.remove delete(); + + if ( isdefined( self.radius ) ) + blastradius = self.radius; + + self radiusdamage( self.origin + vectorscale( ( 0, 0, 1 ), 56.0 ), blastradius, maxdamage, mindamage, self.damageowner ); + attacker = undefined; + + if ( isdefined( self.damageowner ) ) + attacker = self.damageowner; + + level.lastexplodingbarrel["time"] = gettime(); + level.lastexplodingbarrel["origin"] = self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ); + + if ( isdefined( self.removeexplodable ) ) + self hide(); + else + self setmodel( "global_explosive_barrel" ); + + if ( dot < 0.5 ) + { + start = self.origin + vectorscale( up, 22 ); + trace = physicstrace( start, start + vectorscale( ( 0, 0, -1 ), 64.0 ) ); + pos = trace["position"]; + self.origin = pos; + self.angles += vectorscale( ( 0, 0, 1 ), 90.0 ); + } + + wait 0.05; + level.barrelexplodingthisframe = 0; +} + +flammable_crate_think() +{ + if ( self.classname != "script_model" ) + return; + + self endon( "exploding" ); + self breakable_clip(); + self.health = level.cratehealth; + self setcandamage( 1 ); + + for (;;) + { + self waittill( "damage", amount, attacker, direction_vec, p, type ); + + if ( isdefined( self.script_requires_player ) && self.script_requires_player && !isplayer( attacker ) ) + continue; + + if ( isdefined( self.script_selfisattacker ) && self.script_selfisattacker ) + self.damageowner = self; + else + self.damageowner = attacker; + + if ( level.barrelexplodingthisframe ) + wait( randomfloat( 1 ) ); + + self.health -= amount; + + if ( self.health <= level.crateburn ) + self thread flammable_crate_burn(); + } +} + +flammable_crate_burn() +{ + count = 0; + startedfx = 0; + up = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) ); + worldup = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) ); + dot = vectordot( up, worldup ); + offset1 = ( 0, 0, 0 ); + offset2 = up * vectorscale( ( 0, 0, 1 ), 44.0 ); + + if ( dot < 0.5 ) + { + offset1 = up * vectorscale( ( 0, 0, 1 ), 22.0 ) - vectorscale( ( 0, 0, 1 ), 30.0 ); + offset2 = up * vectorscale( ( 0, 0, 1 ), 22.0 ) + vectorscale( ( 0, 0, 1 ), 14.0 ); + } + + while ( self.health > 0 ) + { + if ( !startedfx ) + { + playfx( level.breakables_fx["ammo_crate"]["burn_start"], self.origin ); + level thread play_sound_in_space( level.crateignsound, self.origin ); + startedfx = 1; + } + + if ( count > 20 ) + count = 0; + + playfx( level.breakables_fx["ammo_crate"]["burn"], self.origin ); + + if ( count == 0 ) + self.health -= 10 + randomint( 10 ); + + count++; + wait 0.05; + } + + self thread flammable_crate_explode(); +} + +flammable_crate_explode() +{ + self notify( "exploding" ); + self death_notify_wrapper(); + up = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) ); + worldup = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) ); + dot = vectordot( up, worldup ); + offset = ( 0, 0, 0 ); + + if ( dot < 0.5 ) + { + start = self.origin + vectorscale( up, 22 ); + trace = physicstrace( start, start + vectorscale( ( 0, 0, -1 ), 64.0 ) ); + end = trace["position"]; + offset = end - self.origin; + } + + offset += vectorscale( ( 0, 0, 1 ), 4.0 ); + mindamage = 1; + maxdamage = 250; + blastradius = 250; + level thread play_sound_in_space( level.crateexpsound, self.origin ); + playfx( level.breakables_fx["ammo_crate"]["explode"], self.origin ); + physicsexplosionsphere( self.origin + offset, 100, 80, 1, maxdamage, mindamage ); + level.barrelexplodingthisframe = 1; + + if ( isdefined( self.remove ) ) + self.remove delete(); + + if ( isdefined( self.radius ) ) + blastradius = self.radius; + + attacker = undefined; + + if ( isdefined( self.damageowner ) ) + attacker = self.damageowner; + + self radiusdamage( self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), blastradius, maxdamage, mindamage, attacker ); + self setmodel( "global_flammable_crate_jap_piece01_d" ); + + if ( dot < 0.5 ) + { + start = self.origin + vectorscale( up, 22 ); + trace = physicstrace( start, start + vectorscale( ( 0, 0, -1 ), 64.0 ) ); + pos = trace["position"]; + self.origin = pos; + self.angles += vectorscale( ( 0, 0, 1 ), 90.0 ); + } + + wait 0.05; + level.barrelexplodingthisframe = 0; +} + +breakable_clip() +{ + if ( isdefined( self.target ) ) + { + targ = getent( self.target, "targetname" ); + + if ( targ.classname == "script_brushmodel" ) + { + self.remove = targ; + return; + } + } + + if ( isdefined( level.breakables_clip ) && level.breakables_clip.size > 0 ) + self.remove = getclosestent( self.origin, level.breakables_clip ); + + if ( isdefined( self.remove ) ) + arrayremovevalue( level.breakables_clip, self.remove ); +} + +getclosestent( org, array ) +{ + if ( array.size < 1 ) + return; + + dist = 256; + ent = undefined; + + for ( i = 0; i < array.size; i++ ) + { + newdist = distance( array[i] getorigin(), org ); + + if ( newdist >= dist ) + continue; + + dist = newdist; + ent = array[i]; + } + + return ent; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/_music.gsc b/ZM/Maps/Tranzit Diner/maps/mp/_music.gsc new file mode 100644 index 0000000..74125f2 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/_music.gsc @@ -0,0 +1,26 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +music_init() +{ + assert( level.clientscripts ); + level.musicstate = ""; + registerclientsys( "musicCmd" ); +} + +setmusicstate( state, player ) +{ + if ( isdefined( level.musicstate ) ) + { + if ( isdefined( player ) ) + { + setclientsysstate( "musicCmd", state, player ); + return; + } + else if ( level.musicstate != state ) + setclientsysstate( "musicCmd", state ); + } + + level.musicstate = state; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/_script_gen.gsc b/ZM/Maps/Tranzit Diner/maps/mp/_script_gen.gsc new file mode 100644 index 0000000..ea90c13 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/_script_gen.gsc @@ -0,0 +1,290 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\_script_gen; + +script_gen_dump_checksaved() +{ + signatures = getarraykeys( level.script_gen_dump ); + + for ( i = 0; i < signatures.size; i++ ) + { + if ( !isdefined( level.script_gen_dump2[signatures[i]] ) ) + { + level.script_gen_dump[signatures[i]] = undefined; + level.script_gen_dump_reasons[level.script_gen_dump_reasons.size] = "Signature unmatched( removed feature ): " + signatures[i]; + } + } +} + +script_gen_dump() +{ +/# + script_gen_dump_checksaved(); + + if ( !level.script_gen_dump_reasons.size ) + { + flag_set( "scriptgen_done" ); + return; + } + + firstrun = 0; + + if ( level.bscriptgened ) + { + println( " " ); + println( " " ); + println( " " ); + println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); + println( "^3Dumping scriptgen dump for these reasons" ); + println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); + + for ( i = 0; i < level.script_gen_dump_reasons.size; i++ ) + { + if ( issubstr( level.script_gen_dump_reasons[i], "nowrite" ) ) + { + substr = getsubstr( level.script_gen_dump_reasons[i], 15 ); + println( i + ". ) " + substr ); + } + else + println( i + ". ) " + level.script_gen_dump_reasons[i] ); + + if ( level.script_gen_dump_reasons[i] == "First run" ) + firstrun = 1; + } + + println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); + println( " " ); + + if ( firstrun ) + { + println( "for First Run make sure you delete all of the vehicle precache script calls, createart calls, createfx calls( most commonly placed in maps\\" + level.script + "_fx.gsc ) " ); + println( " " ); + println( "replace:" ); + println( "maps\\_load::main( 1 );" ); + println( " " ); + println( "with( don't forget to add this file to P4 ):" ); + println( "maps\\scriptgen\\" + level.script + "_scriptgen::main();" ); + println( " " ); + } + + println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); + println( " " ); + println( "^2 / \\ / \\ / \\" ); + println( "^2scroll up" ); + println( "^2 / \\ / \\ / \\" ); + println( " " ); + } + else + return; + + filename = "scriptgen/" + level.script + "_scriptgen.gsc"; + csvfilename = "zone_source/" + level.script + ".csv"; + + if ( level.bscriptgened ) + file = openfile( filename, "write" ); + else + file = 0; + + assert( file != -1, "File not writeable( check it and and restart the map ): " + filename ); + script_gen_dumpprintln( file, "// script generated script do not write your own script here it will go away if you do." ); + script_gen_dumpprintln( file, "main()" ); + script_gen_dumpprintln( file, "{" ); + script_gen_dumpprintln( file, "" ); + script_gen_dumpprintln( file, "\\tlevel.script_gen_dump = [];" ); + script_gen_dumpprintln( file, "" ); + signatures = getarraykeys( level.script_gen_dump ); + + for ( i = 0; i < signatures.size; i++ ) + { + if ( !issubstr( level.script_gen_dump[signatures[i]], "nowrite" ) ) + script_gen_dumpprintln( file, "\\t" + level.script_gen_dump[signatures[i]] ); + } + + for ( i = 0; i < signatures.size; i++ ) + { + if ( !issubstr( level.script_gen_dump[signatures[i]], "nowrite" ) ) + { + script_gen_dumpprintln( file, "\\tlevel.script_gen_dump[ " + "\"" + signatures[i] + "\"" + " ] = " + "\"" + signatures[i] + "\"" + ";" ); + continue; + } + + script_gen_dumpprintln( file, "\\tlevel.script_gen_dump[ " + "\"" + signatures[i] + "\"" + " ] = " + "\"nowrite\"" + ";" ); + } + + script_gen_dumpprintln( file, "" ); + keys1 = undefined; + keys2 = undefined; + + if ( isdefined( level.sg_precacheanims ) ) + keys1 = getarraykeys( level.sg_precacheanims ); + + if ( isdefined( keys1 ) ) + { + for ( i = 0; i < keys1.size; i++ ) + script_gen_dumpprintln( file, "\\tanim_precach_" + keys1[i] + "();" ); + } + + script_gen_dumpprintln( file, "\\tmaps\\_load::main( 1, " + level.bcsvgened + ", 1 );" ); + script_gen_dumpprintln( file, "}" ); + script_gen_dumpprintln( file, "" ); + + if ( isdefined( level.sg_precacheanims ) ) + keys1 = getarraykeys( level.sg_precacheanims ); + + if ( isdefined( keys1 ) ) + { + for ( i = 0; i < keys1.size; i++ ) + { + script_gen_dumpprintln( file, "#using_animtree( \"" + keys1[i] + "\" );" ); + script_gen_dumpprintln( file, "anim_precach_" + keys1[i] + "()" ); + script_gen_dumpprintln( file, "{" ); + script_gen_dumpprintln( file, "\\tlevel.sg_animtree[ \"" + keys1[i] + "\" ] = #animtree;" ); + keys2 = getarraykeys( level.sg_precacheanims[keys1[i]] ); + + if ( isdefined( keys2 ) ) + { + for ( j = 0; j < keys2.size; j++ ) + script_gen_dumpprintln( file, "\\tlevel.sg_anim[ \"" + keys2[j] + "\" ] = %" + keys2[j] + ";" ); + } + + script_gen_dumpprintln( file, "}" ); + script_gen_dumpprintln( file, "" ); + } + } + + if ( level.bscriptgened ) + saved = closefile( file ); + else + saved = 1; + + if ( level.bcsvgened ) + csvfile = openfile( csvfilename, "write" ); + else + csvfile = 0; + + assert( csvfile != -1, "File not writeable( check it and and restart the map ): " + csvfilename ); + signatures = getarraykeys( level.script_gen_dump ); + + for ( i = 0; i < signatures.size; i++ ) + script_gen_csvdumpprintln( csvfile, signatures[i] ); + + if ( level.bcsvgened ) + csvfilesaved = closefile( csvfile ); + else + csvfilesaved = 1; + + assert( csvfilesaved == 1, "csv not saved( see above message? ): " + csvfilename ); + assert( saved == 1, "map not saved( see above message? ): " + filename ); +#/ + assert( !level.bscriptgened, "SCRIPTGEN generated: follow instructions listed above this error in the console" ); + + if ( level.bscriptgened ) + { +/# + assertmsg( "SCRIPTGEN updated: Rebuild fast file and run map again" ); +#/ + } + + flag_set( "scriptgen_done" ); +} + +script_gen_csvdumpprintln( file, signature ) +{ + prefix = undefined; + writtenprefix = undefined; + path = ""; + extension = ""; + + if ( issubstr( signature, "ignore" ) ) + prefix = "ignore"; + else if ( issubstr( signature, "col_map_sp" ) ) + prefix = "col_map_sp"; + else if ( issubstr( signature, "gfx_map" ) ) + prefix = "gfx_map"; + else if ( issubstr( signature, "rawfile" ) ) + prefix = "rawfile"; + else if ( issubstr( signature, "sound" ) ) + prefix = "sound"; + else if ( issubstr( signature, "xmodel" ) ) + prefix = "xmodel"; + else if ( issubstr( signature, "xanim" ) ) + prefix = "xanim"; + else if ( issubstr( signature, "item" ) ) + { + prefix = "item"; + writtenprefix = "weapon"; + path = "sp/"; + } + else if ( issubstr( signature, "fx" ) ) + prefix = "fx"; + else if ( issubstr( signature, "menu" ) ) + { + prefix = "menu"; + writtenprefix = "menufile"; + path = "ui / scriptmenus/"; + extension = ".menu"; + } + else if ( issubstr( signature, "rumble" ) ) + { + prefix = "rumble"; + writtenprefix = "rawfile"; + path = "rumble/"; + } + else if ( issubstr( signature, "shader" ) ) + { + prefix = "shader"; + writtenprefix = "material"; + } + else if ( issubstr( signature, "shock" ) ) + { + prefix = "shock"; + writtenprefix = "rawfile"; + extension = ".shock"; + path = "shock/"; + } + else if ( issubstr( signature, "string" ) ) + { + prefix = "string"; +/# + assertmsg( "string not yet supported by scriptgen" ); +#/ + } + else if ( issubstr( signature, "turret" ) ) + { + prefix = "turret"; + writtenprefix = "weapon"; + path = "sp/"; + } + else if ( issubstr( signature, "vehicle" ) ) + { + prefix = "vehicle"; + writtenprefix = "rawfile"; + path = "vehicles/"; + } + + if ( !isdefined( prefix ) ) + return; + + if ( !isdefined( writtenprefix ) ) + string = prefix + ", " + getsubstr( signature, prefix.size + 1, signature.size ); + else + string = writtenprefix + ", " + path + getsubstr( signature, prefix.size + 1, signature.size ) + extension; +/# + if ( file == -1 || !level.bcsvgened ) + println( string ); + else + fprintln( file, string ); +#/ +} + +script_gen_dumpprintln( file, string ) +{ +/# + if ( file == -1 || !level.bscriptgened ) + println( string ); + else + fprintln( file, string ); +#/ +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/_serverfaceanim_mp.gsc b/ZM/Maps/Tranzit Diner/maps/mp/_serverfaceanim_mp.gsc new file mode 100644 index 0000000..57936ef --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/_serverfaceanim_mp.gsc @@ -0,0 +1,61 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; + +init() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread onplayerspawned(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread init_serverfaceanim(); + } +} + +init_serverfaceanim() +{ + self.do_face_anims = 1; + + if ( !isdefined( level.face_event_handler ) ) + { + level.face_event_handler = spawnstruct(); + level.face_event_handler.events = []; + level.face_event_handler.events["death"] = "face_death"; + level.face_event_handler.events["grenade danger"] = "face_alert"; + level.face_event_handler.events["bulletwhizby"] = "face_alert"; + level.face_event_handler.events["projectile_impact"] = "face_alert"; + level.face_event_handler.events["explode"] = "face_alert"; + level.face_event_handler.events["alert"] = "face_alert"; + level.face_event_handler.events["shoot"] = "face_shoot_single"; + level.face_event_handler.events["melee"] = "face_melee"; + level.face_event_handler.events["damage"] = "face_pain"; + level thread wait_for_face_event(); + } +} + +wait_for_face_event() +{ + while ( true ) + { + level waittill( "face", face_notify, ent ); + + if ( isdefined( ent ) && isdefined( ent.do_face_anims ) && ent.do_face_anims ) + { + if ( isdefined( level.face_event_handler.events[face_notify] ) ) + ent sendfaceevent( level.face_event_handler.events[face_notify] ); + } + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/_sticky_grenade.gsc b/ZM/Maps/Tranzit Diner/maps/mp/_sticky_grenade.gsc new file mode 100644 index 0000000..86ae4c3 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/_sticky_grenade.gsc @@ -0,0 +1,15 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; + +init() +{ + loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" ); + loadfx( "weapon/crossbow/fx_trail_crossbow_blink_red_os" ); +} + +watch_bolt_detonation( owner ) +{ + +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/_utility.gsc b/ZM/Maps/Tranzit Diner/maps/mp/_utility.gsc new file mode 100644 index 0000000..2068656 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/_utility.gsc @@ -0,0 +1,2671 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\_createfx; +#include maps\mp\_utility; + +addcallback( event, func ) +{ + assert( isdefined( event ), "Trying to set a callback on an undefined event." ); + + if ( !isdefined( level._callbacks ) || !isdefined( level._callbacks[event] ) ) + level._callbacks[event] = []; + + level._callbacks[event] = add_to_array( level._callbacks[event], func, 0 ); +} + +callback( event ) +{ + if ( isdefined( level._callbacks ) && isdefined( level._callbacks[event] ) ) + { + for ( i = 0; i < level._callbacks[event].size; i++ ) + { + callback = level._callbacks[event][i]; + + if ( isdefined( callback ) ) + self thread [[ callback ]](); + } + } +} + +onfinalizeinitialization_callback( func ) +{ + addcallback( "on_finalize_initialization", func ); +} + +triggeroff() +{ + if ( !isdefined( self.realorigin ) ) + self.realorigin = self.origin; + + if ( self.origin == self.realorigin ) + self.origin += vectorscale( ( 0, 0, -1 ), 10000.0 ); +} + +triggeron() +{ + if ( isdefined( self.realorigin ) ) + self.origin = self.realorigin; +} + +error( msg ) +{ +/# + println( "^c*ERROR* ", msg ); + wait 0.05; + + if ( getdvar( _hash_F49A52C ) != "1" ) + { +/# + assertmsg( "This is a forced error - attach the log file" ); +#/ + } +#/ +} + +warning( msg ) +{ +/# + println( "^1WARNING: " + msg ); +#/ +} + +spawn_array_struct() +{ + s = spawnstruct(); + s.a = []; + return s; +} + +within_fov( start_origin, start_angles, end_origin, fov ) +{ + normal = vectornormalize( end_origin - start_origin ); + forward = anglestoforward( start_angles ); + dot = vectordot( forward, normal ); + return dot >= fov; +} + +append_array_struct( dst_s, src_s ) +{ + for ( i = 0; i < src_s.a.size; i++ ) + dst_s.a[dst_s.a.size] = src_s.a[i]; +} + +exploder( num ) +{ + [[ level.exploderfunction ]]( num ); +} + +exploder_stop( num ) +{ + stop_exploder( num ); +} + +exploder_sound() +{ + if ( isdefined( self.script_delay ) ) + wait( self.script_delay ); + + self playsound( level.scr_sound[self.script_sound] ); +} + +cannon_effect() +{ + if ( isdefined( self.v["repeat"] ) ) + { + for ( i = 0; i < self.v["repeat"]; i++ ) + { + playfx( level._effect[self.v["fxid"]], self.v["origin"], self.v["forward"], self.v["up"] ); + self exploder_delay(); + } + + return; + } + + self exploder_delay(); + + if ( isdefined( self.looper ) ) + self.looper delete(); + + self.looper = spawnfx( getfx( self.v["fxid"] ), self.v["origin"], self.v["forward"], self.v["up"] ); + triggerfx( self.looper ); + exploder_playsound(); +} + +exploder_delay() +{ + if ( !isdefined( self.v["delay"] ) ) + self.v["delay"] = 0; + + min_delay = self.v["delay"]; + max_delay = self.v["delay"] + 0.001; + + if ( isdefined( self.v["delay_min"] ) ) + min_delay = self.v["delay_min"]; + + if ( isdefined( self.v["delay_max"] ) ) + max_delay = self.v["delay_max"]; + + if ( min_delay > 0 ) + wait( randomfloatrange( min_delay, max_delay ) ); +} + +exploder_playsound() +{ + if ( !isdefined( self.v["soundalias"] ) || self.v["soundalias"] == "nil" ) + return; + + play_sound_in_space( self.v["soundalias"], self.v["origin"] ); +} + +brush_delete() +{ + num = self.v["exploder"]; + + if ( isdefined( self.v["delay"] ) ) + wait( self.v["delay"] ); + else + wait 0.05; + + if ( !isdefined( self.model ) ) + return; + + assert( isdefined( self.model ) ); + + if ( level.createfx_enabled ) + { + if ( isdefined( self.exploded ) ) + return; + + self.exploded = 1; + self.model hide(); + self.model notsolid(); + wait 3; + self.exploded = undefined; + self.model show(); + self.model solid(); + return; + } + + if ( !isdefined( self.v["fxid"] ) || self.v["fxid"] == "No FX" ) + self.v["exploder"] = undefined; + + waittillframeend; + self.model delete(); +} + +brush_show() +{ + if ( isdefined( self.v["delay"] ) ) + wait( self.v["delay"] ); + + assert( isdefined( self.model ) ); + self.model show(); + self.model solid(); + + if ( level.createfx_enabled ) + { + if ( isdefined( self.exploded ) ) + return; + + self.exploded = 1; + wait 3; + self.exploded = undefined; + self.model hide(); + self.model notsolid(); + } +} + +brush_throw() +{ + if ( isdefined( self.v["delay"] ) ) + wait( self.v["delay"] ); + + ent = undefined; + + if ( isdefined( self.v["target"] ) ) + ent = getent( self.v["target"], "targetname" ); + + if ( !isdefined( ent ) ) + { + self.model delete(); + return; + } + + self.model show(); + startorg = self.v["origin"]; + startang = self.v["angles"]; + org = ent.origin; + temp_vec = org - self.v["origin"]; + x = temp_vec[0]; + y = temp_vec[1]; + z = temp_vec[2]; + self.model rotatevelocity( ( x, y, z ), 12 ); + self.model movegravity( ( x, y, z ), 12 ); + + if ( level.createfx_enabled ) + { + if ( isdefined( self.exploded ) ) + return; + + self.exploded = 1; + wait 3; + self.exploded = undefined; + self.v["origin"] = startorg; + self.v["angles"] = startang; + self.model hide(); + return; + } + + self.v["exploder"] = undefined; + wait 6; + self.model delete(); +} + +getplant() +{ + start = self.origin + vectorscale( ( 0, 0, 1 ), 10.0 ); + range = 11; + forward = anglestoforward( self.angles ); + forward = vectorscale( forward, range ); + traceorigins[0] = start + forward; + traceorigins[1] = start; + trace = bullettrace( traceorigins[0], traceorigins[0] + vectorscale( ( 0, 0, -1 ), 18.0 ), 0, undefined ); + + if ( trace["fraction"] < 1 ) + { + temp = spawnstruct(); + temp.origin = trace["position"]; + temp.angles = orienttonormal( trace["normal"] ); + return temp; + } + + trace = bullettrace( traceorigins[1], traceorigins[1] + vectorscale( ( 0, 0, -1 ), 18.0 ), 0, undefined ); + + if ( trace["fraction"] < 1 ) + { + temp = spawnstruct(); + temp.origin = trace["position"]; + temp.angles = orienttonormal( trace["normal"] ); + return temp; + } + + traceorigins[2] = start + vectorscale( ( 1, 1, 0 ), 16.0 ); + traceorigins[3] = start + vectorscale( ( 1, -1, 0 ), 16.0 ); + traceorigins[4] = start + vectorscale( ( -1, -1, 0 ), 16.0 ); + traceorigins[5] = start + vectorscale( ( -1, 1, 0 ), 16.0 ); + besttracefraction = undefined; + besttraceposition = undefined; + + for ( i = 0; i < traceorigins.size; i++ ) + { + trace = bullettrace( traceorigins[i], traceorigins[i] + vectorscale( ( 0, 0, -1 ), 1000.0 ), 0, undefined ); + + if ( !isdefined( besttracefraction ) || trace["fraction"] < besttracefraction ) + { + besttracefraction = trace["fraction"]; + besttraceposition = trace["position"]; + } + } + + if ( besttracefraction == 1 ) + besttraceposition = self.origin; + + temp = spawnstruct(); + temp.origin = besttraceposition; + temp.angles = orienttonormal( trace["normal"] ); + return temp; +} + +orienttonormal( normal ) +{ + hor_normal = ( normal[0], normal[1], 0 ); + hor_length = length( hor_normal ); + + if ( !hor_length ) + return ( 0, 0, 0 ); + + hor_dir = vectornormalize( hor_normal ); + neg_height = normal[2] * -1; + tangent = ( hor_dir[0] * neg_height, hor_dir[1] * neg_height, hor_length ); + plant_angle = vectortoangles( tangent ); + return plant_angle; +} + +array_levelthread( ents, process, var, excluders ) +{ + exclude = []; + + for ( i = 0; i < ents.size; i++ ) + exclude[i] = 0; + + if ( isdefined( excluders ) ) + { + for ( i = 0; i < ents.size; i++ ) + { + for ( p = 0; p < excluders.size; p++ ) + { + if ( ents[i] == excluders[p] ) + exclude[i] = 1; + } + } + } + + for ( i = 0; i < ents.size; i++ ) + { + if ( !exclude[i] ) + { + if ( isdefined( var ) ) + { + level thread [[ process ]]( ents[i], var ); + continue; + } + + level thread [[ process ]]( ents[i] ); + } + } +} + +deleteplacedentity( entity ) +{ + entities = getentarray( entity, "classname" ); + + for ( i = 0; i < entities.size; i++ ) + entities[i] delete(); +} + +playsoundonplayers( sound, team ) +{ + assert( isdefined( level.players ) ); + + if ( level.splitscreen ) + { + if ( isdefined( level.players[0] ) ) + level.players[0] playlocalsound( sound ); + } + else if ( isdefined( team ) ) + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + player playlocalsound( sound ); + } + } + else + { + for ( i = 0; i < level.players.size; i++ ) + level.players[i] playlocalsound( sound ); + } +} + +get_player_height() +{ + return 70.0; +} + +isbulletimpactmod( smeansofdeath ) +{ + return issubstr( smeansofdeath, "BULLET" ) || smeansofdeath == "MOD_HEAD_SHOT"; +} + +get_team_alive_players_s( teamname ) +{ + teamplayers_s = spawn_array_struct(); + + if ( isdefined( teamname ) && isdefined( level.aliveplayers ) && isdefined( level.aliveplayers[teamname] ) ) + { + for ( i = 0; i < level.aliveplayers[teamname].size; i++ ) + teamplayers_s.a[teamplayers_s.a.size] = level.aliveplayers[teamname][i]; + } + + return teamplayers_s; +} + +get_all_alive_players_s() +{ + allplayers_s = spawn_array_struct(); + + if ( isdefined( level.aliveplayers ) ) + { + keys = getarraykeys( level.aliveplayers ); + + for ( i = 0; i < keys.size; i++ ) + { + team = keys[i]; + + for ( j = 0; j < level.aliveplayers[team].size; j++ ) + allplayers_s.a[allplayers_s.a.size] = level.aliveplayers[team][j]; + } + } + + return allplayers_s; +} + +waitrespawnbutton() +{ + self endon( "disconnect" ); + self endon( "end_respawn" ); + + while ( self usebuttonpressed() != 1 ) + wait 0.05; +} + +setlowermessage( text, time, combinemessageandtimer ) +{ + if ( !isdefined( self.lowermessage ) ) + return; + + if ( isdefined( self.lowermessageoverride ) && text != &"" ) + { + text = self.lowermessageoverride; + time = undefined; + } + + self notify( "lower_message_set" ); + self.lowermessage settext( text ); + + if ( isdefined( time ) && time > 0 ) + { + if ( !isdefined( combinemessageandtimer ) || !combinemessageandtimer ) + self.lowertimer.label = &""; + else + { + self.lowermessage settext( "" ); + self.lowertimer.label = text; + } + + self.lowertimer settimer( time ); + } + else + { + self.lowertimer settext( "" ); + self.lowertimer.label = &""; + } + + if ( self issplitscreen() ) + self.lowermessage.fontscale = 1.4; + + self.lowermessage fadeovertime( 0.05 ); + self.lowermessage.alpha = 1; + self.lowertimer fadeovertime( 0.05 ); + self.lowertimer.alpha = 1; +} + +setlowermessagevalue( text, value, combinemessage ) +{ + if ( !isdefined( self.lowermessage ) ) + return; + + if ( isdefined( self.lowermessageoverride ) && text != &"" ) + { + text = self.lowermessageoverride; + time = undefined; + } + + self notify( "lower_message_set" ); + + if ( !isdefined( combinemessage ) || !combinemessage ) + self.lowermessage settext( text ); + else + self.lowermessage settext( "" ); + + if ( isdefined( value ) && value > 0 ) + { + if ( !isdefined( combinemessage ) || !combinemessage ) + self.lowertimer.label = &""; + else + self.lowertimer.label = text; + + self.lowertimer setvalue( value ); + } + else + { + self.lowertimer settext( "" ); + self.lowertimer.label = &""; + } + + if ( self issplitscreen() ) + self.lowermessage.fontscale = 1.4; + + self.lowermessage fadeovertime( 0.05 ); + self.lowermessage.alpha = 1; + self.lowertimer fadeovertime( 0.05 ); + self.lowertimer.alpha = 1; +} + +clearlowermessage( fadetime ) +{ + if ( !isdefined( self.lowermessage ) ) + return; + + self notify( "lower_message_set" ); + + if ( !isdefined( fadetime ) || fadetime == 0 ) + setlowermessage( &"" ); + else + { + self endon( "disconnect" ); + self endon( "lower_message_set" ); + self.lowermessage fadeovertime( fadetime ); + self.lowermessage.alpha = 0; + self.lowertimer fadeovertime( fadetime ); + self.lowertimer.alpha = 0; + wait( fadetime ); + self setlowermessage( "" ); + } +} + +printonteam( text, team ) +{ + assert( isdefined( level.players ) ); + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + player iprintln( text ); + } +} + +printboldonteam( text, team ) +{ + assert( isdefined( level.players ) ); + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + player iprintlnbold( text ); + } +} + +printboldonteamarg( text, team, arg ) +{ + assert( isdefined( level.players ) ); + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + player iprintlnbold( text, arg ); + } +} + +printonteamarg( text, team, arg ) +{ + +} + +printonplayers( text, team ) +{ + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( team ) ) + { + if ( isdefined( players[i].pers["team"] ) && players[i].pers["team"] == team ) + players[i] iprintln( text ); + + continue; + } + + players[i] iprintln( text ); + } +} + +printandsoundoneveryone( team, enemyteam, printfriendly, printenemy, soundfriendly, soundenemy, printarg ) +{ + shoulddosounds = isdefined( soundfriendly ); + shoulddoenemysounds = 0; + + if ( isdefined( soundenemy ) ) + { + assert( shoulddosounds ); + shoulddoenemysounds = 1; + } + + if ( !isdefined( printarg ) ) + printarg = ""; + + if ( level.splitscreen || !shoulddosounds ) + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + + if ( isdefined( playerteam ) ) + { + if ( playerteam == team && isdefined( printfriendly ) && printfriendly != &"" ) + { + player iprintln( printfriendly, printarg ); + continue; + } + + if ( isdefined( printenemy ) && printenemy != &"" ) + { + if ( isdefined( enemyteam ) && playerteam == enemyteam ) + { + player iprintln( printenemy, printarg ); + continue; + } + + if ( !isdefined( enemyteam ) && playerteam != team ) + player iprintln( printenemy, printarg ); + } + } + } + + if ( shoulddosounds ) + { + assert( level.splitscreen ); + level.players[0] playlocalsound( soundfriendly ); + } + } + else + { + assert( shoulddosounds ); + + if ( shoulddoenemysounds ) + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + + if ( isdefined( playerteam ) ) + { + if ( playerteam == team ) + { + if ( isdefined( printfriendly ) && printfriendly != &"" ) + player iprintln( printfriendly, printarg ); + + player playlocalsound( soundfriendly ); + continue; + } + + if ( isdefined( enemyteam ) && playerteam == enemyteam || !isdefined( enemyteam ) && playerteam != team ) + { + if ( isdefined( printenemy ) && printenemy != &"" ) + player iprintln( printenemy, printarg ); + + player playlocalsound( soundenemy ); + } + } + } + } + else + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + + if ( isdefined( playerteam ) ) + { + if ( playerteam == team ) + { + if ( isdefined( printfriendly ) && printfriendly != &"" ) + player iprintln( printfriendly, printarg ); + + player playlocalsound( soundfriendly ); + continue; + } + + if ( isdefined( printenemy ) && printenemy != &"" ) + { + if ( isdefined( enemyteam ) && playerteam == enemyteam ) + { + player iprintln( printenemy, printarg ); + continue; + } + + if ( !isdefined( enemyteam ) && playerteam != team ) + player iprintln( printenemy, printarg ); + } + } + } + } + } +} + +_playlocalsound( soundalias ) +{ + if ( level.splitscreen && !self ishost() ) + return; + + self playlocalsound( soundalias ); +} + +dvarintvalue( dvar, defval, minval, maxval ) +{ + dvar = "scr_" + level.gametype + "_" + dvar; + + if ( getdvar( dvar ) == "" ) + { + setdvar( dvar, defval ); + return defval; + } + + value = getdvarint( dvar ); + + if ( value > maxval ) + value = maxval; + else if ( value < minval ) + value = minval; + else + return value; + + setdvar( dvar, value ); + return value; +} + +dvarfloatvalue( dvar, defval, minval, maxval ) +{ + dvar = "scr_" + level.gametype + "_" + dvar; + + if ( getdvar( dvar ) == "" ) + { + setdvar( dvar, defval ); + return defval; + } + + value = getdvarfloat( dvar ); + + if ( value > maxval ) + value = maxval; + else if ( value < minval ) + value = minval; + else + return value; + + setdvar( dvar, value ); + return value; +} + +play_sound_on_tag( alias, tag ) +{ + if ( isdefined( tag ) ) + { + org = spawn( "script_origin", self gettagorigin( tag ) ); + org linkto( self, tag, ( 0, 0, 0 ), ( 0, 0, 0 ) ); + } + else + { + org = spawn( "script_origin", ( 0, 0, 0 ) ); + org.origin = self.origin; + org.angles = self.angles; + org linkto( self ); + } + + org playsound( alias ); + wait 5.0; + org delete(); +} + +createloopeffect( fxid ) +{ + ent = maps\mp\_createfx::createeffect( "loopfx", fxid ); + ent.v["delay"] = 0.5; + return ent; +} + +createoneshoteffect( fxid ) +{ + ent = maps\mp\_createfx::createeffect( "oneshotfx", fxid ); + ent.v["delay"] = -15; + return ent; +} + +loop_fx_sound( alias, origin, ender, timeout ) +{ + org = spawn( "script_origin", ( 0, 0, 0 ) ); + + if ( isdefined( ender ) ) + { + thread loop_sound_delete( ender, org ); + self endon( ender ); + } + + org.origin = origin; + org playloopsound( alias ); + + if ( !isdefined( timeout ) ) + return; + + wait( timeout ); +} + +exploder_damage() +{ + if ( isdefined( self.v["delay"] ) ) + delay = self.v["delay"]; + else + delay = 0; + + if ( isdefined( self.v["damage_radius"] ) ) + radius = self.v["damage_radius"]; + else + radius = 128; + + damage = self.v["damage"]; + origin = self.v["origin"]; + wait( delay ); + radiusdamage( origin, radius, damage, damage ); +} + +exploder_before_load( num ) +{ + waittillframeend; + waittillframeend; + activate_exploder( num ); +} + +exploder_after_load( num ) +{ + activate_exploder( num ); +} + +getexploderid( ent ) +{ + if ( !isdefined( level._exploder_ids ) ) + { + level._exploder_ids = []; + level._exploder_id = 1; + } + + if ( !isdefined( level._exploder_ids[ent.v["exploder"]] ) ) + { + level._exploder_ids[ent.v["exploder"]] = level._exploder_id; + level._exploder_id++; + } + + return level._exploder_ids[ent.v["exploder"]]; +} + +activate_exploder_on_clients( num ) +{ + if ( !isdefined( level._exploder_ids[num] ) ) + return; + + if ( !isdefined( level._client_exploders[num] ) ) + level._client_exploders[num] = 1; + + if ( !isdefined( level._client_exploder_ids[num] ) ) + level._client_exploder_ids[num] = 1; + + activateclientexploder( level._exploder_ids[num] ); +} + +delete_exploder_on_clients( num ) +{ + if ( !isdefined( level._exploder_ids[num] ) ) + return; + + if ( !isdefined( level._client_exploders[num] ) ) + return; + + level._client_exploders[num] = undefined; + level._client_exploder_ids[num] = undefined; + deactivateclientexploder( level._exploder_ids[num] ); +} + +activate_individual_exploder() +{ + level notify( "exploder" + self.v["exploder"] ); + + if ( level.createfx_enabled || !level.clientscripts || !isdefined( level._exploder_ids[int( self.v["exploder"] )] ) || isdefined( self.v["exploder_server"] ) ) + { +/# + println( "Exploder " + self.v["exploder"] + " created on server." ); +#/ + if ( isdefined( self.v["firefx"] ) ) + self thread fire_effect(); + + if ( isdefined( self.v["fxid"] ) && self.v["fxid"] != "No FX" ) + self thread cannon_effect(); + else if ( isdefined( self.v["soundalias"] ) ) + self thread sound_effect(); + } + + if ( isdefined( self.v["trailfx"] ) ) + self thread trail_effect(); + + if ( isdefined( self.v["damage"] ) ) + self thread exploder_damage(); + + if ( self.v["exploder_type"] == "exploder" ) + self thread brush_show(); + else if ( self.v["exploder_type"] == "exploderchunk" || self.v["exploder_type"] == "exploderchunk visible" ) + self thread brush_throw(); + else + self thread brush_delete(); +} + +trail_effect() +{ + self exploder_delay(); + + if ( !isdefined( self.v["trailfxtag"] ) ) + self.v["trailfxtag"] = "tag_origin"; + + temp_ent = undefined; + + if ( self.v["trailfxtag"] == "tag_origin" ) + playfxontag( level._effect[self.v["trailfx"]], self.model, self.v["trailfxtag"] ); + else + { + temp_ent = spawn( "script_model", self.model.origin ); + temp_ent setmodel( "tag_origin" ); + temp_ent linkto( self.model, self.v["trailfxtag"] ); + playfxontag( level._effect[self.v["trailfx"]], temp_ent, "tag_origin" ); + } + + if ( isdefined( self.v["trailfxsound"] ) ) + { + if ( !isdefined( temp_ent ) ) + self.model playloopsound( self.v["trailfxsound"] ); + else + temp_ent playloopsound( self.v["trailfxsound"] ); + } + + if ( isdefined( self.v["ender"] ) && isdefined( temp_ent ) ) + level thread trail_effect_ender( temp_ent, self.v["ender"] ); + + if ( !isdefined( self.v["trailfxtimeout"] ) ) + return; + + wait( self.v["trailfxtimeout"] ); + + if ( isdefined( temp_ent ) ) + temp_ent delete(); +} + +trail_effect_ender( ent, ender ) +{ + ent endon( "death" ); + + self waittill( ender ); + + ent delete(); +} + +activate_exploder( num ) +{ + num = int( num ); +/# + if ( level.createfx_enabled ) + { + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + + if ( !isdefined( ent ) ) + continue; + + if ( ent.v["type"] != "exploder" ) + continue; + + if ( !isdefined( ent.v["exploder"] ) ) + continue; + + if ( ent.v["exploder"] != num ) + continue; + + if ( isdefined( ent.v["exploder_server"] ) ) + client_send = 0; + + ent activate_individual_exploder(); + } + + return; + } +#/ + client_send = 1; + + if ( isdefined( level.createfxexploders[num] ) ) + { + for ( i = 0; i < level.createfxexploders[num].size; i++ ) + { + if ( client_send && isdefined( level.createfxexploders[num][i].v["exploder_server"] ) ) + client_send = 0; + + level.createfxexploders[num][i] activate_individual_exploder(); + } + } + + if ( level.clientscripts ) + { + if ( !level.createfx_enabled && client_send == 1 ) + activate_exploder_on_clients( num ); + } +} + +stop_exploder( num ) +{ + num = int( num ); + + if ( level.clientscripts ) + { + if ( !level.createfx_enabled ) + delete_exploder_on_clients( num ); + } + + if ( isdefined( level.createfxexploders[num] ) ) + { + for ( i = 0; i < level.createfxexploders[num].size; i++ ) + { + if ( !isdefined( level.createfxexploders[num][i].looper ) ) + continue; + + level.createfxexploders[num][i].looper delete(); + } + } +} + +sound_effect() +{ + self effect_soundalias(); +} + +effect_soundalias() +{ + if ( !isdefined( self.v["delay"] ) ) + self.v["delay"] = 0; + + origin = self.v["origin"]; + alias = self.v["soundalias"]; + wait( self.v["delay"] ); + play_sound_in_space( alias, origin ); +} + +play_sound_in_space( alias, origin, master ) +{ + org = spawn( "script_origin", ( 0, 0, 1 ) ); + + if ( !isdefined( origin ) ) + origin = self.origin; + + org.origin = origin; + + if ( isdefined( master ) && master ) + org playsoundasmaster( alias ); + else + org playsound( alias ); + + wait 10.0; + org delete(); +} + +loop_sound_in_space( alias, origin, ender ) +{ + org = spawn( "script_origin", ( 0, 0, 1 ) ); + + if ( !isdefined( origin ) ) + origin = self.origin; + + org.origin = origin; + org playloopsound( alias ); + + level waittill( ender ); + + org stoploopsound(); + wait 0.1; + org delete(); +} + +fire_effect() +{ + if ( !isdefined( self.v["delay"] ) ) + self.v["delay"] = 0; + + delay = self.v["delay"]; + + if ( isdefined( self.v["delay_min"] ) && isdefined( self.v["delay_max"] ) ) + delay = self.v["delay_min"] + randomfloat( self.v["delay_max"] - self.v["delay_min"] ); + + forward = self.v["forward"]; + up = self.v["up"]; + org = undefined; + firefxsound = self.v["firefxsound"]; + origin = self.v["origin"]; + firefx = self.v["firefx"]; + ender = self.v["ender"]; + + if ( !isdefined( ender ) ) + ender = "createfx_effectStopper"; + + timeout = self.v["firefxtimeout"]; + firefxdelay = 0.5; + + if ( isdefined( self.v["firefxdelay"] ) ) + firefxdelay = self.v["firefxdelay"]; + + wait( delay ); + + if ( isdefined( firefxsound ) ) + level thread loop_fx_sound( firefxsound, origin, ender, timeout ); + + playfx( level._effect[firefx], self.v["origin"], forward, up ); +} + +loop_sound_delete( ender, ent ) +{ + ent endon( "death" ); + + self waittill( ender ); + + ent delete(); +} + +createexploder( fxid ) +{ + ent = maps\mp\_createfx::createeffect( "exploder", fxid ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1; + ent.v["exploder_type"] = "normal"; + return ent; +} + +getotherteam( team ) +{ + if ( team == "allies" ) + return "axis"; + else if ( team == "axis" ) + return "allies"; + else + return "allies"; +/# + assertmsg( "getOtherTeam: invalid team " + team ); +#/ +} + +getteammask( team ) +{ + if ( !level.teambased || !isdefined( team ) || !isdefined( level.spawnsystem.ispawn_teammask[team] ) ) + return level.spawnsystem.ispawn_teammask_free; + + return level.spawnsystem.ispawn_teammask[team]; +} + +getotherteamsmask( skip_team ) +{ + mask = 0; + + foreach ( team in level.teams ) + { + if ( team == skip_team ) + continue; + + mask |= getteammask( team ); + } + + return mask; +} + +wait_endon( waittime, endonstring, endonstring2, endonstring3, endonstring4 ) +{ + self endon( endonstring ); + + if ( isdefined( endonstring2 ) ) + self endon( endonstring2 ); + + if ( isdefined( endonstring3 ) ) + self endon( endonstring3 ); + + if ( isdefined( endonstring4 ) ) + self endon( endonstring4 ); + + wait( waittime ); + return 1; +} + +ismg( weapon ) +{ + return issubstr( weapon, "_bipod_" ); +} + +plot_points( plotpoints, r, g, b, timer ) +{ +/# + lastpoint = plotpoints[0]; + + if ( !isdefined( r ) ) + r = 1; + + if ( !isdefined( g ) ) + g = 1; + + if ( !isdefined( b ) ) + b = 1; + + if ( !isdefined( timer ) ) + timer = 0.05; + + for ( i = 1; i < plotpoints.size; i++ ) + { + line( lastpoint, plotpoints[i], ( r, g, b ), 1, timer ); + lastpoint = plotpoints[i]; + } +#/ +} + +player_flag_wait( msg ) +{ + while ( !self.flag[msg] ) + self waittill( msg ); +} + +player_flag_wait_either( flag1, flag2 ) +{ + for (;;) + { + if ( flag( flag1 ) ) + return; + + if ( flag( flag2 ) ) + return; + + self waittill_either( flag1, flag2 ); + } +} + +player_flag_waitopen( msg ) +{ + while ( self.flag[msg] ) + self waittill( msg ); +} + +player_flag_init( message, trigger ) +{ + if ( !isdefined( self.flag ) ) + { + self.flag = []; + self.flags_lock = []; + } + + assert( !isdefined( self.flag[message] ), "Attempt to reinitialize existing message: " + message ); + self.flag[message] = 0; +/# + self.flags_lock[message] = 0; +#/ +} + +player_flag_set_delayed( message, delay ) +{ + wait( delay ); + player_flag_set( message ); +} + +player_flag_set( message ) +{ +/# + assert( isdefined( self.flag[message] ), "Attempt to set a flag before calling flag_init: " + message ); + assert( self.flag[message] == self.flags_lock[message] ); + self.flags_lock[message] = 1; +#/ + self.flag[message] = 1; + self notify( message ); +} + +player_flag_clear( message ) +{ +/# + assert( isdefined( self.flag[message] ), "Attempt to set a flag before calling flag_init: " + message ); + assert( self.flag[message] == self.flags_lock[message] ); + self.flags_lock[message] = 0; +#/ + self.flag[message] = 0; + self notify( message ); +} + +player_flag( message ) +{ + assert( isdefined( message ), "Tried to check flag but the flag was not defined." ); + + if ( !self.flag[message] ) + return false; + + return true; +} + +registerclientsys( ssysname ) +{ + if ( !isdefined( level._clientsys ) ) + level._clientsys = []; + + if ( level._clientsys.size >= 32 ) + { +/# + error( "Max num client systems exceeded." ); +#/ + return; + } + + if ( isdefined( level._clientsys[ssysname] ) ) + { +/# + error( "Attempt to re-register client system : " + ssysname ); +#/ + return; + } + else + { + level._clientsys[ssysname] = spawnstruct(); + level._clientsys[ssysname].sysid = clientsysregister( ssysname ); + } +} + +setclientsysstate( ssysname, ssysstate, player ) +{ + if ( !isdefined( level._clientsys ) ) + { +/# + error( "setClientSysState called before registration of any systems." ); +#/ + return; + } + + if ( !isdefined( level._clientsys[ssysname] ) ) + { +/# + error( "setClientSysState called on unregistered system " + ssysname ); +#/ + return; + } + + if ( isdefined( player ) ) + player clientsyssetstate( level._clientsys[ssysname].sysid, ssysstate ); + else + { + clientsyssetstate( level._clientsys[ssysname].sysid, ssysstate ); + level._clientsys[ssysname].sysstate = ssysstate; + } +} + +getclientsysstate( ssysname ) +{ + if ( !isdefined( level._clientsys ) ) + { +/# + error( "Cannot getClientSysState before registering any client systems." ); +#/ + return ""; + } + + if ( !isdefined( level._clientsys[ssysname] ) ) + { +/# + error( "Client system " + ssysname + " cannot return state, as it is unregistered." ); +#/ + return ""; + } + + if ( isdefined( level._clientsys[ssysname].sysstate ) ) + return level._clientsys[ssysname].sysstate; + + return ""; +} + +clientnotify( event ) +{ + if ( level.clientscripts ) + { + if ( isplayer( self ) ) + maps\mp\_utility::setclientsysstate( "levelNotify", event, self ); + else + maps\mp\_utility::setclientsysstate( "levelNotify", event ); + } +} + +alphabet_compare( a, b ) +{ + list = []; + val = 1; + list["0"] = val; + val++; + list["1"] = val; + val++; + list["2"] = val; + val++; + list["3"] = val; + val++; + list["4"] = val; + val++; + list["5"] = val; + val++; + list["6"] = val; + val++; + list["7"] = val; + val++; + list["8"] = val; + val++; + list["9"] = val; + val++; + list["_"] = val; + val++; + list["a"] = val; + val++; + list["b"] = val; + val++; + list["c"] = val; + val++; + list["d"] = val; + val++; + list["e"] = val; + val++; + list["f"] = val; + val++; + list["g"] = val; + val++; + list["h"] = val; + val++; + list["i"] = val; + val++; + list["j"] = val; + val++; + list["k"] = val; + val++; + list["l"] = val; + val++; + list["m"] = val; + val++; + list["n"] = val; + val++; + list["o"] = val; + val++; + list["p"] = val; + val++; + list["q"] = val; + val++; + list["r"] = val; + val++; + list["s"] = val; + val++; + list["t"] = val; + val++; + list["u"] = val; + val++; + list["v"] = val; + val++; + list["w"] = val; + val++; + list["x"] = val; + val++; + list["y"] = val; + val++; + list["z"] = val; + val++; + a = tolower( a ); + b = tolower( b ); + val1 = 0; + + if ( isdefined( list[a] ) ) + val1 = list[a]; + + val2 = 0; + + if ( isdefined( list[b] ) ) + val2 = list[b]; + + if ( val1 > val2 ) + return "1st"; + + if ( val1 < val2 ) + return "2nd"; + + return "same"; +} + +is_later_in_alphabet( string1, string2 ) +{ + count = string1.size; + + if ( count >= string2.size ) + count = string2.size; + + for ( i = 0; i < count; i++ ) + { + val = alphabet_compare( string1[i], string2[i] ); + + if ( val == "1st" ) + return 1; + + if ( val == "2nd" ) + return 0; + } + + return string1.size > string2.size; +} + +alphabetize( array ) +{ + if ( array.size <= 1 ) + return array; + + count = 0; + + for (;;) + { + changed = 0; + + for ( i = 0; i < array.size - 1; i++ ) + { + if ( is_later_in_alphabet( array[i], array[i + 1] ) ) + { + val = array[i]; + array[i] = array[i + 1]; + array[i + 1] = val; + changed = 1; + count++; + + if ( count >= 9 ) + { + count = 0; + wait 0.05; + } + } + } + + if ( !changed ) + return array; + } + + return array; +} + +get_players() +{ + players = getplayers(); + return players; +} + +getfx( fx ) +{ + assert( isdefined( level._effect[fx] ), "Fx " + fx + " is not defined in level._effect." ); + return level._effect[fx]; +} + +struct_arrayspawn() +{ + struct = spawnstruct(); + struct.array = []; + struct.lastindex = 0; + return struct; +} + +structarray_add( struct, object ) +{ + assert( !isdefined( object.struct_array_index ) ); + struct.array[struct.lastindex] = object; + object.struct_array_index = struct.lastindex; + struct.lastindex++; +} + +structarray_remove( struct, object ) +{ + structarray_swaptolast( struct, object ); + struct.array[struct.lastindex - 1] = undefined; + struct.lastindex--; +} + +structarray_swaptolast( struct, object ) +{ + struct structarray_swap( struct.array[struct.lastindex - 1], object ); +} + +structarray_shuffle( struct, shuffle ) +{ + for ( i = 0; i < shuffle; i++ ) + struct structarray_swap( struct.array[i], struct.array[randomint( struct.lastindex )] ); +} + +structarray_swap( object1, object2 ) +{ + index1 = object1.struct_array_index; + index2 = object2.struct_array_index; + self.array[index2] = object1; + self.array[index1] = object2; + self.array[index1].struct_array_index = index1; + self.array[index2].struct_array_index = index2; +} + +waittill_either( msg1, msg2 ) +{ + self endon( msg1 ); + + self waittill( msg2 ); +} + +combinearrays( array1, array2 ) +{ + assert( isdefined( array1 ) || isdefined( array2 ) ); + + if ( !isdefined( array1 ) && isdefined( array2 ) ) + return array2; + + if ( !isdefined( array2 ) && isdefined( array1 ) ) + return array1; + + foreach ( elem in array2 ) + array1[array1.size] = elem; + + return array1; +} + +getclosest( org, array, dist ) +{ + return comparesizes( org, array, dist, ::closerfunc ); +} + +getclosestfx( org, fxarray, dist ) +{ + return comparesizesfx( org, fxarray, dist, ::closerfunc ); +} + +getfarthest( org, array, dist ) +{ + return comparesizes( org, array, dist, ::fartherfunc ); +} + +comparesizesfx( org, array, dist, comparefunc ) +{ + if ( !array.size ) + return undefined; + + if ( isdefined( dist ) ) + { + distsqr = dist * dist; + struct = undefined; + keys = getarraykeys( array ); + + for ( i = 0; i < keys.size; i++ ) + { + newdistsqr = distancesquared( array[keys[i]].v["origin"], org ); + + if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) + continue; + + distsqr = newdistsqr; + struct = array[keys[i]]; + } + + return struct; + } + + keys = getarraykeys( array ); + struct = array[keys[0]]; + distsqr = distancesquared( struct.v["origin"], org ); + + for ( i = 1; i < keys.size; i++ ) + { + newdistsqr = distancesquared( array[keys[i]].v["origin"], org ); + + if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) + continue; + + distsqr = newdistsqr; + struct = array[keys[i]]; + } + + return struct; +} + +comparesizes( org, array, dist, comparefunc ) +{ + if ( !array.size ) + return undefined; + + if ( isdefined( dist ) ) + { + distsqr = dist * dist; + ent = undefined; + keys = getarraykeys( array ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( !isdefined( array[keys[i]] ) ) + continue; + + newdistsqr = distancesquared( array[keys[i]].origin, org ); + + if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) + continue; + + distsqr = newdistsqr; + ent = array[keys[i]]; + } + + return ent; + } + + keys = getarraykeys( array ); + ent = array[keys[0]]; + distsqr = distancesquared( ent.origin, org ); + + for ( i = 1; i < keys.size; i++ ) + { + if ( !isdefined( array[keys[i]] ) ) + continue; + + newdistsqr = distancesquared( array[keys[i]].origin, org ); + + if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) + continue; + + distsqr = newdistsqr; + ent = array[keys[i]]; + } + + return ent; +} + +closerfunc( dist1, dist2 ) +{ + return dist1 >= dist2; +} + +fartherfunc( dist1, dist2 ) +{ + return dist1 <= dist2; +} + +get_array_of_closest( org, array, excluders = [], max = array.size, maxdist ) +{ + maxdists2rd = undefined; + + if ( isdefined( maxdist ) ) + maxdists2rd = maxdist * maxdist; + + dist = []; + index = []; + + for ( i = 0; i < array.size; i++ ) + { + if ( !isdefined( array[i] ) ) + continue; + + excluded = 0; + + for ( p = 0; p < excluders.size; p++ ) + { + if ( array[i] != excluders[p] ) + continue; + + excluded = 1; + break; + } + + if ( excluded ) + continue; + + length = distancesquared( org, array[i].origin ); + + if ( isdefined( maxdists2rd ) && maxdists2rd < length ) + continue; + + dist[dist.size] = length; + index[index.size] = i; + } + + for (;;) + { + change = 0; + + for ( i = 0; i < dist.size - 1; i++ ) + { + if ( dist[i] <= dist[i + 1] ) + continue; + + change = 1; + temp = dist[i]; + dist[i] = dist[i + 1]; + dist[i + 1] = temp; + temp = index[i]; + index[i] = index[i + 1]; + index[i + 1] = temp; + } + + if ( !change ) + break; + } + + newarray = []; + + if ( max > dist.size ) + max = dist.size; + + for ( i = 0; i < max; i++ ) + newarray[i] = array[index[i]]; + + return newarray; +} + +set_dvar_if_unset( dvar, value, reset = 0 ) +{ + if ( reset || getdvar( dvar ) == "" ) + { + setdvar( dvar, value ); + return value; + } + + return getdvar( dvar ); +} + +set_dvar_float_if_unset( dvar, value, reset = 0 ) +{ + if ( reset || getdvar( dvar ) == "" ) + setdvar( dvar, value ); + + return getdvarfloat( dvar ); +} + +set_dvar_int_if_unset( dvar, value, reset = 0 ) +{ + if ( reset || getdvar( dvar ) == "" ) + { + setdvar( dvar, value ); + return int( value ); + } + + return getdvarint( dvar ); +} + +drawcylinder( pos, rad, height, duration, stop_notify ) +{ +/# + if ( !isdefined( duration ) ) + duration = 0; + + level thread drawcylinder_think( pos, rad, height, duration, stop_notify ); +#/ +} + +drawcylinder_think( pos, rad, height, seconds, stop_notify ) +{ +/# + if ( isdefined( stop_notify ) ) + level endon( stop_notify ); + + stop_time = gettime() + seconds * 1000; + currad = rad; + curheight = height; + + for (;;) + { + if ( seconds > 0 && stop_time <= gettime() ) + return; + + for ( r = 0; r < 20; r++ ) + { + theta = r / 20 * 360; + theta2 = ( r + 1 ) / 20 * 360; + line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, 0 ) ); + line( pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, curheight ) ); + line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ) ); + } + + wait 0.05; + } +#/ +} + +is_bot() +{ + return isplayer( self ) && isdefined( self.pers["isBot"] ) && self.pers["isBot"] != 0; +} + +add_trigger_to_ent( ent ) +{ + if ( !isdefined( ent._triggers ) ) + ent._triggers = []; + + ent._triggers[self getentitynumber()] = 1; +} + +remove_trigger_from_ent( ent ) +{ + if ( !isdefined( ent ) ) + return; + + if ( !isdefined( ent._triggers ) ) + return; + + if ( !isdefined( ent._triggers[self getentitynumber()] ) ) + return; + + ent._triggers[self getentitynumber()] = 0; +} + +ent_already_in_trigger( trig ) +{ + if ( !isdefined( self._triggers ) ) + return false; + + if ( !isdefined( self._triggers[trig getentitynumber()] ) ) + return false; + + if ( !self._triggers[trig getentitynumber()] ) + return false; + + return true; +} + +trigger_thread_death_monitor( ent, ender ) +{ + ent waittill( "death" ); + + self endon( ender ); + self remove_trigger_from_ent( ent ); +} + +trigger_thread( ent, on_enter_payload, on_exit_payload ) +{ + ent endon( "entityshutdown" ); + ent endon( "death" ); + + if ( ent ent_already_in_trigger( self ) ) + return; + + self add_trigger_to_ent( ent ); + ender = "end_trig_death_monitor" + self getentitynumber() + " " + ent getentitynumber(); + self thread trigger_thread_death_monitor( ent, ender ); + endon_condition = "leave_trigger_" + self getentitynumber(); + + if ( isdefined( on_enter_payload ) ) + self thread [[ on_enter_payload ]]( ent, endon_condition ); + + while ( isdefined( ent ) && ent istouching( self ) ) + wait 0.01; + + ent notify( endon_condition ); + + if ( isdefined( ent ) && isdefined( on_exit_payload ) ) + self thread [[ on_exit_payload ]]( ent ); + + if ( isdefined( ent ) ) + self remove_trigger_from_ent( ent ); + + self notify( ender ); +} + +isoneround() +{ + if ( level.roundlimit == 1 ) + return true; + + return false; +} + +isfirstround() +{ + if ( level.roundlimit > 1 && game["roundsplayed"] == 0 ) + return true; + + return false; +} + +islastround() +{ + if ( level.roundlimit > 1 && game["roundsplayed"] >= level.roundlimit - 1 ) + return true; + + return false; +} + +waslastround() +{ + if ( level.forcedend ) + return true; + + if ( isdefined( level.shouldplayovertimeround ) ) + { + if ( [[ level.shouldplayovertimeround ]]() ) + { + level.nextroundisovertime = 1; + return false; + } + else if ( isdefined( game["overtime_round"] ) ) + return true; + } + + if ( hitroundlimit() || hitscorelimit() || hitroundwinlimit() ) + return true; + + return false; +} + +hitroundlimit() +{ + if ( level.roundlimit <= 0 ) + return 0; + + return getroundsplayed() >= level.roundlimit; +} + +anyteamhitroundwinlimit() +{ + foreach ( team in level.teams ) + { + if ( getroundswon( team ) >= level.roundwinlimit ) + return true; + } + + return false; +} + +anyteamhitroundlimitwithdraws() +{ + tie_wins = game["roundswon"]["tie"]; + + foreach ( team in level.teams ) + { + if ( getroundswon( team ) + tie_wins >= level.roundwinlimit ) + return true; + } + + return false; +} + +getroundwinlimitwinningteam() +{ + max_wins = 0; + winning_team = undefined; + + foreach ( team in level.teams ) + { + wins = getroundswon( team ); + + if ( !isdefined( winning_team ) ) + { + max_wins = wins; + winning_team = team; + continue; + } + + if ( wins == max_wins ) + { + winning_team = "tie"; + continue; + } + + if ( wins > max_wins ) + { + max_wins = wins; + winning_team = team; + } + } + + return winning_team; +} + +hitroundwinlimit() +{ + if ( !isdefined( level.roundwinlimit ) || level.roundwinlimit <= 0 ) + return false; + + if ( anyteamhitroundwinlimit() ) + return true; + + if ( anyteamhitroundlimitwithdraws() ) + { + if ( getroundwinlimitwinningteam() != "tie" ) + return true; + } + + return false; +} + +anyteamhitscorelimit() +{ + foreach ( team in level.teams ) + { + if ( game["teamScores"][team] >= level.scorelimit ) + return true; + } + + return false; +} + +hitscorelimit() +{ + if ( isscoreroundbased() ) + return false; + + if ( level.scorelimit <= 0 ) + return false; + + if ( level.teambased ) + { + if ( anyteamhitscorelimit() ) + return true; + } + else + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pointstowin ) && player.pointstowin >= level.scorelimit ) + return true; + } + } + + return false; +} + +getroundswon( team ) +{ + return game["roundswon"][team]; +} + +getotherteamsroundswon( skip_team ) +{ + roundswon = 0; + + foreach ( team in level.teams ) + { + if ( team == skip_team ) + continue; + + roundswon += game["roundswon"][team]; + } + + return roundswon; +} + +getroundsplayed() +{ + return game["roundsplayed"]; +} + +isscoreroundbased() +{ + return level.scoreroundbased; +} + +isroundbased() +{ + if ( level.roundlimit != 1 && level.roundwinlimit != 1 ) + return true; + + return false; +} + +waittillnotmoving() +{ + if ( self ishacked() ) + { + wait 0.05; + return; + } + + if ( self.classname == "grenade" ) + self waittill( "stationary" ); + else + { + for ( prevorigin = self.origin; 1; prevorigin = self.origin ) + { + wait 0.15; + + if ( self.origin == prevorigin ) + break; + } + } +} + +mayapplyscreeneffect() +{ + assert( isdefined( self ) ); + assert( isplayer( self ) ); + return !isdefined( self.viewlockedentity ); +} + +getdvarfloatdefault( dvarname, defaultvalue ) +{ + value = getdvar( dvarname ); + + if ( value != "" ) + return float( value ); + + return defaultvalue; +} + +getdvarintdefault( dvarname, defaultvalue ) +{ + value = getdvar( dvarname ); + + if ( value != "" ) + return int( value ); + + return defaultvalue; +} + +closestpointonline( point, linestart, lineend ) +{ + linemagsqrd = lengthsquared( lineend - linestart ); + t = ( ( point[0] - linestart[0] ) * ( lineend[0] - linestart[0] ) + ( point[1] - linestart[1] ) * ( lineend[1] - linestart[1] ) + ( point[2] - linestart[2] ) * ( lineend[2] - linestart[2] ) ) / linemagsqrd; + + if ( t < 0.0 ) + return linestart; + else if ( t > 1.0 ) + return lineend; + + start_x = linestart[0] + t * ( lineend[0] - linestart[0] ); + start_y = linestart[1] + t * ( lineend[1] - linestart[1] ); + start_z = linestart[2] + t * ( lineend[2] - linestart[2] ); + return ( start_x, start_y, start_z ); +} + +isstrstart( string1, substr ) +{ + return getsubstr( string1, 0, substr.size ) == substr; +} + +spread_array_thread( entities, process, var1, var2, var3 ) +{ + keys = getarraykeys( entities ); + + if ( isdefined( var3 ) ) + { + for ( i = 0; i < keys.size; i++ ) + { + entities[keys[i]] thread [[ process ]]( var1, var2, var3 ); + wait 0.1; + } + + return; + } + + if ( isdefined( var2 ) ) + { + for ( i = 0; i < keys.size; i++ ) + { + entities[keys[i]] thread [[ process ]]( var1, var2 ); + wait 0.1; + } + + return; + } + + if ( isdefined( var1 ) ) + { + for ( i = 0; i < keys.size; i++ ) + { + entities[keys[i]] thread [[ process ]]( var1 ); + wait 0.1; + } + + return; + } + + for ( i = 0; i < keys.size; i++ ) + { + entities[keys[i]] thread [[ process ]](); + wait 0.1; + } +} + +freeze_player_controls( boolean ) +{ + assert( isdefined( boolean ), "'freeze_player_controls()' has not been passed an argument properly." ); + + if ( boolean && isdefined( self ) ) + self freezecontrols( boolean ); + else if ( !boolean && isdefined( self ) && !level.gameended ) + self freezecontrols( boolean ); +} + +gethostplayer() +{ + players = get_players(); + + for ( index = 0; index < players.size; index++ ) + { + if ( players[index] ishost() ) + return players[index]; + } +} + +gethostplayerforbots() +{ + players = get_players(); + + for ( index = 0; index < players.size; index++ ) + { + if ( players[index] ishostforbots() ) + return players[index]; + } +} + +ispregame() +{ + return isdefined( level.pregame ) && level.pregame; +} + +iskillstreaksenabled() +{ + return isdefined( level.killstreaksenabled ) && level.killstreaksenabled; +} + +isrankenabled() +{ + return isdefined( level.rankenabled ) && level.rankenabled; +} + +playsmokesound( position, duration, startsound, stopsound, loopsound ) +{ + smokesound = spawn( "script_origin", ( 0, 0, 1 ) ); + smokesound.origin = position; + smokesound playsound( startsound ); + smokesound playloopsound( loopsound ); + + if ( duration > 0.5 ) + wait( duration - 0.5 ); + + thread playsoundinspace( stopsound, position ); + smokesound stoploopsound( 0.5 ); + wait 0.5; + smokesound delete(); +} + +playsoundinspace( alias, origin, master ) +{ + org = spawn( "script_origin", ( 0, 0, 1 ) ); + + if ( !isdefined( origin ) ) + origin = self.origin; + + org.origin = origin; + + if ( isdefined( master ) && master ) + org playsoundasmaster( alias ); + else + org playsound( alias ); + + wait 10.0; + org delete(); +} + +get2dyaw( start, end ) +{ + yaw = 0; + vector = ( end[0] - start[0], end[1] - start[1], 0 ); + return vectoangles( vector ); +} + +vectoangles( vector ) +{ + yaw = 0; + vecx = vector[0]; + vecy = vector[1]; + + if ( vecx == 0 && vecy == 0 ) + return 0; + + if ( vecy < 0.001 && vecy > -0.001 ) + vecy = 0.001; + + yaw = atan( vecx / vecy ); + + if ( vecy < 0 ) + yaw += 180; + + return 90 - yaw; +} + +deleteaftertime( time ) +{ + assert( isdefined( self ) ); + assert( isdefined( time ) ); + assert( time >= 0.05 ); + self thread deleteaftertimethread( time ); +} + +deleteaftertimethread( time ) +{ + self endon( "death" ); + wait( time ); + self delete(); +} + +setusingremote( remotename ) +{ + if ( isdefined( self.carryicon ) ) + self.carryicon.alpha = 0; + + assert( !self isusingremote() ); + self.usingremote = remotename; + self disableoffhandweapons(); + self notify( "using_remote" ); +} + +getremotename() +{ + assert( self isusingremote() ); + return self.usingremote; +} + +isusingremote() +{ + return isdefined( self.usingremote ); +} + +getlastweapon() +{ + last_weapon = undefined; + + if ( self hasweapon( self.lastnonkillstreakweapon ) ) + last_weapon = self.lastnonkillstreakweapon; + else if ( self hasweapon( self.lastdroppableweapon ) ) + last_weapon = self.lastdroppableweapon; + + assert( isdefined( last_weapon ) ); + return last_weapon; +} + +freezecontrolswrapper( frozen ) +{ + if ( isdefined( level.hostmigrationtimer ) ) + { + self freeze_player_controls( 1 ); + return; + } + + self freeze_player_controls( frozen ); +} + +setobjectivetext( team, text ) +{ + game["strings"]["objective_" + team] = text; + precachestring( text ); +} + +setobjectivescoretext( team, text ) +{ + game["strings"]["objective_score_" + team] = text; + precachestring( text ); +} + +setobjectivehinttext( team, text ) +{ + game["strings"]["objective_hint_" + team] = text; + precachestring( text ); +} + +getobjectivetext( team ) +{ + return game["strings"]["objective_" + team]; +} + +getobjectivescoretext( team ) +{ + return game["strings"]["objective_score_" + team]; +} + +getobjectivehinttext( team ) +{ + return game["strings"]["objective_hint_" + team]; +} + +registerroundswitch( minvalue, maxvalue ) +{ + level.roundswitch = clamp( getgametypesetting( "roundSwitch" ), minvalue, maxvalue ); + level.roundswitchmin = minvalue; + level.roundswitchmax = maxvalue; +} + +registerroundlimit( minvalue, maxvalue ) +{ + level.roundlimit = clamp( getgametypesetting( "roundLimit" ), minvalue, maxvalue ); + level.roundlimitmin = minvalue; + level.roundlimitmax = maxvalue; +} + +registerroundwinlimit( minvalue, maxvalue ) +{ + level.roundwinlimit = clamp( getgametypesetting( "roundWinLimit" ), minvalue, maxvalue ); + level.roundwinlimitmin = minvalue; + level.roundwinlimitmax = maxvalue; +} + +registerscorelimit( minvalue, maxvalue ) +{ + level.scorelimit = clamp( getgametypesetting( "scoreLimit" ), minvalue, maxvalue ); + level.scorelimitmin = minvalue; + level.scorelimitmax = maxvalue; + setdvar( "ui_scorelimit", level.scorelimit ); +} + +registertimelimit( minvalue, maxvalue ) +{ + level.timelimit = clamp( getgametypesetting( "timeLimit" ), minvalue, maxvalue ); + level.timelimitmin = minvalue; + level.timelimitmax = maxvalue; + setdvar( "ui_timelimit", level.timelimit ); +} + +registernumlives( minvalue, maxvalue ) +{ + level.numlives = clamp( getgametypesetting( "playerNumLives" ), minvalue, maxvalue ); + level.numlivesmin = minvalue; + level.numlivesmax = maxvalue; +} + +getplayerfromclientnum( clientnum ) +{ + if ( clientnum < 0 ) + return undefined; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( level.players[i] getentitynumber() == clientnum ) + return level.players[i]; + } + + return undefined; +} + +setclientfield( field_name, value ) +{ + if ( self == level ) + codesetworldclientfield( field_name, value ); + else + codesetclientfield( self, field_name, value ); +} + +setclientfieldtoplayer( field_name, value ) +{ + codesetplayerstateclientfield( self, field_name, value ); +} + +getclientfield( field_name ) +{ + if ( self == level ) + return codegetworldclientfield( field_name ); + else + return codegetclientfield( self, field_name ); +} + +getclientfieldtoplayer( field_name ) +{ + return codegetplayerstateclientfield( self, field_name ); +} + +isenemyplayer( player ) +{ + assert( isdefined( player ) ); + + if ( !isplayer( player ) ) + return false; + + if ( level.teambased ) + { + if ( player.team == self.team ) + return false; + } + else if ( player == self ) + return false; + + return true; +} + +getweaponclass( weapon ) +{ + assert( isdefined( weapon ) ); + + if ( !isdefined( weapon ) ) + return undefined; + + if ( !isdefined( level.weaponclassarray ) ) + level.weaponclassarray = []; + + if ( isdefined( level.weaponclassarray[weapon] ) ) + return level.weaponclassarray[weapon]; + + baseweaponindex = getbaseweaponitemindex( weapon ) + 1; + weaponclass = tablelookupcolumnforrow( "mp/statstable.csv", baseweaponindex, 2 ); + level.weaponclassarray[weapon] = weaponclass; + return weaponclass; +} + +ispressbuild() +{ + buildtype = getdvar( _hash_19B966D7 ); + + if ( isdefined( buildtype ) && buildtype == "press" ) + return true; + + return false; +} + +isflashbanged() +{ + return isdefined( self.flashendtime ) && gettime() < self.flashendtime; +} + +ishacked() +{ + return isdefined( self.hacked ) && self.hacked; +} + +domaxdamage( origin, attacker, inflictor, headshot, mod ) +{ + if ( isdefined( self.damagedtodeath ) && self.damagedtodeath ) + return; + + if ( isdefined( self.maxhealth ) ) + damage = self.maxhealth + 1; + else + damage = self.health + 1; + + self.damagedtodeath = 1; + self dodamage( damage, origin, attacker, inflictor, headshot, mod ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/_visionset_mgr.gsc b/ZM/Maps/Tranzit Diner/maps/mp/_visionset_mgr.gsc new file mode 100644 index 0000000..faf2f69 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/_visionset_mgr.gsc @@ -0,0 +1,445 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; + +init() +{ + if ( level.createfx_enabled ) + return; + + level.vsmgr_initializing = 1; + level.vsmgr_default_info_name = "none"; + level.vsmgr = []; + level thread register_type( "visionset" ); + level thread register_type( "overlay" ); + onfinalizeinitialization_callback( ::finalize_clientfields ); + level thread monitor(); + level thread onplayerconnect(); +} + +vsmgr_register_info( type, name, version, priority, lerp_step_count, activate_per_player, lerp_thread, ref_count_lerp_thread ) +{ + if ( level.createfx_enabled ) + return; + + assert( level.vsmgr_initializing, "All info registration in the visionset_mgr system must occur during the first frame while the system is initializing" ); + lower_name = tolower( name ); + validate_info( type, lower_name, priority ); + add_sorted_name_key( type, lower_name ); + add_sorted_priority_key( type, lower_name, priority ); + level.vsmgr[type].info[lower_name] = spawnstruct(); + level.vsmgr[type].info[lower_name] add_info( type, lower_name, version, priority, lerp_step_count, activate_per_player, lerp_thread, ref_count_lerp_thread ); + + if ( level.vsmgr[type].highest_version < version ) + level.vsmgr[type].highest_version = version; +} + +vsmgr_activate( type, name, player, opt_param_1, opt_param_2 ) +{ + if ( level.vsmgr[type].info[name].state.activate_per_player ) + { + activate_per_player( type, name, player, opt_param_1, opt_param_2 ); + return; + } + + state = level.vsmgr[type].info[name].state; + + if ( state.ref_count_lerp_thread ) + { + state.ref_count++; + + if ( 1 < state.ref_count ) + return; + } + + if ( isdefined( state.lerp_thread ) ) + state thread lerp_thread_wrapper( state.lerp_thread, opt_param_1, opt_param_2 ); + else + { + players = getplayers(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + state vsmgr_set_state_active( players[player_index], 1 ); + } +} + +vsmgr_deactivate( type, name, player ) +{ + if ( level.vsmgr[type].info[name].state.activate_per_player ) + { + deactivate_per_player( type, name, player ); + return; + } + + state = level.vsmgr[type].info[name].state; + + if ( state.ref_count_lerp_thread ) + { + state.ref_count--; + + if ( 0 < state.ref_count ) + return; + } + + state notify( "deactivate" ); + players = getplayers(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + state vsmgr_set_state_inactive( players[player_index] ); +} + +vsmgr_set_state_active( player, lerp ) +{ + player_entnum = player getentitynumber(); + + if ( !isdefined( self.players[player_entnum] ) ) + return; + + self.players[player_entnum].active = 1; + self.players[player_entnum].lerp = lerp; +} + +vsmgr_set_state_inactive( player ) +{ + player_entnum = player getentitynumber(); + + if ( !isdefined( self.players[player_entnum] ) ) + return; + + self.players[player_entnum].active = 0; + self.players[player_entnum].lerp = 0; +} + +vsmgr_timeout_lerp_thread( timeout, opt_param_2 ) +{ + players = getplayers(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + self vsmgr_set_state_active( players[player_index], 1 ); + + wait( timeout ); + vsmgr_deactivate( self.type, self.name ); +} + +vsmgr_timeout_lerp_thread_per_player( player, timeout, opt_param_2 ) +{ + self vsmgr_set_state_active( player, 1 ); + wait( timeout ); + deactivate_per_player( self.type, self.name, player ); +} + +vsmgr_duration_lerp_thread( duration, max_duration ) +{ + start_time = gettime(); + end_time = start_time + int( duration * 1000 ); + + if ( isdefined( max_duration ) ) + start_time = end_time - int( max_duration * 1000 ); + + while ( true ) + { + lerp = calc_remaining_duration_lerp( start_time, end_time ); + + if ( 0 >= lerp ) + break; + + players = getplayers(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + self vsmgr_set_state_active( players[player_index], lerp ); + + wait 0.05; + } + + vsmgr_deactivate( self.type, self.name ); +} + +vsmgr_duration_lerp_thread_per_player( player, duration, max_duration ) +{ + start_time = gettime(); + end_time = start_time + int( duration * 1000 ); + + if ( isdefined( max_duration ) ) + start_time = end_time - int( max_duration * 1000 ); + + while ( true ) + { + lerp = calc_remaining_duration_lerp( start_time, end_time ); + + if ( 0 >= lerp ) + break; + + self vsmgr_set_state_active( player, lerp ); + wait 0.05; + } + + deactivate_per_player( self.type, self.name, player ); +} + +register_type( type ) +{ + level.vsmgr[type] = spawnstruct(); + level.vsmgr[type].type = type; + level.vsmgr[type].in_use = 0; + level.vsmgr[type].highest_version = 0; + level.vsmgr[type].cf_slot_name = type + "_slot"; + level.vsmgr[type].cf_lerp_name = type + "_lerp"; + level.vsmgr[type].info = []; + level.vsmgr[type].sorted_name_keys = []; + level.vsmgr[type].sorted_prio_keys = []; + vsmgr_register_info( type, level.vsmgr_default_info_name, 1, 0, 1, 0, undefined ); +} + +finalize_clientfields() +{ + typekeys = getarraykeys( level.vsmgr ); + + for ( type_index = 0; type_index < typekeys.size; type_index++ ) + level.vsmgr[typekeys[type_index]] thread finalize_type_clientfields(); + + level.vsmgr_initializing = 0; +} + +finalize_type_clientfields() +{ + if ( 1 >= self.info.size ) + return; + + self.in_use = 1; + self.cf_slot_bit_count = getminbitcountfornum( self.info.size - 1 ); + self.cf_lerp_bit_count = self.info[self.sorted_name_keys[0]].lerp_bit_count; + + for ( i = 0; i < self.sorted_name_keys.size; i++ ) + { + self.info[self.sorted_name_keys[i]].slot_index = i; + + if ( self.info[self.sorted_name_keys[i]].lerp_bit_count > self.cf_lerp_bit_count ) + self.cf_lerp_bit_count = self.info[self.sorted_name_keys[i]].lerp_bit_count; + } + + registerclientfield( "toplayer", self.cf_slot_name, self.highest_version, self.cf_slot_bit_count, "int" ); + + if ( 1 < self.cf_lerp_bit_count ) + registerclientfield( "toplayer", self.cf_lerp_name, self.highest_version, self.cf_lerp_bit_count, "float" ); +} + +validate_info( type, name, priority ) +{ + keys = getarraykeys( level.vsmgr ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( type == keys[i] ) + break; + } + + assert( i < keys.size, "In visionset_mgr, type '" + type + "'is unknown" ); + keys = getarraykeys( level.vsmgr[type].info ); + + for ( i = 0; i < keys.size; i++ ) + { + assert( level.vsmgr[type].info[keys[i]].name != name, "In visionset_mgr of type '" + type + "': name '" + name + "' has previously been registered" ); + assert( level.vsmgr[type].info[keys[i]].priority != priority, "In visionset_mgr of type '" + type + "': priority '" + priority + "' requested for name '" + name + "' has previously been registered under name '" + level.vsmgr[type].info[keys[i]].name + "'" ); + } +} + +add_sorted_name_key( type, name ) +{ + for ( i = 0; i < level.vsmgr[type].sorted_name_keys.size; i++ ) + { + if ( name < level.vsmgr[type].sorted_name_keys[i] ) + break; + } + + arrayinsert( level.vsmgr[type].sorted_name_keys, name, i ); +} + +add_sorted_priority_key( type, name, priority ) +{ + for ( i = 0; i < level.vsmgr[type].sorted_prio_keys.size; i++ ) + { + if ( priority > level.vsmgr[type].info[level.vsmgr[type].sorted_prio_keys[i]].priority ) + break; + } + + arrayinsert( level.vsmgr[type].sorted_prio_keys, name, i ); +} + +add_info( type, name, version, priority, lerp_step_count, activate_per_player, lerp_thread, ref_count_lerp_thread ) +{ + self.type = type; + self.name = name; + self.version = version; + self.priority = priority; + self.lerp_step_count = lerp_step_count; + self.lerp_bit_count = getminbitcountfornum( lerp_step_count ); + + if ( !isdefined( ref_count_lerp_thread ) ) + ref_count_lerp_thread = 0; + + self.state = spawnstruct(); + self.state.type = type; + self.state.name = name; + self.state.activate_per_player = activate_per_player; + self.state.lerp_thread = lerp_thread; + self.state.ref_count_lerp_thread = ref_count_lerp_thread; + self.state.players = []; + + if ( ref_count_lerp_thread && !activate_per_player ) + self.state.ref_count = 0; +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connected", player ); + + player thread on_player_connect(); + } +} + +on_player_connect() +{ + self._player_entnum = self getentitynumber(); + typekeys = getarraykeys( level.vsmgr ); + + for ( type_index = 0; type_index < typekeys.size; type_index++ ) + { + type = typekeys[type_index]; + + if ( !level.vsmgr[type].in_use ) + continue; + + for ( name_index = 0; name_index < level.vsmgr[type].sorted_name_keys.size; name_index++ ) + { + name_key = level.vsmgr[type].sorted_name_keys[name_index]; + level.vsmgr[type].info[name_key].state.players[self._player_entnum] = spawnstruct(); + level.vsmgr[type].info[name_key].state.players[self._player_entnum].active = 0; + level.vsmgr[type].info[name_key].state.players[self._player_entnum].lerp = 0; + + if ( level.vsmgr[type].info[name_key].state.ref_count_lerp_thread && level.vsmgr[type].info[name_key].state.activate_per_player ) + level.vsmgr[type].info[name_key].state.players[self._player_entnum].ref_count = 0; + } + + level.vsmgr[type].info[level.vsmgr_default_info_name].state vsmgr_set_state_active( self, 1 ); + } +} + +monitor() +{ + while ( level.vsmgr_initializing ) + wait 0.05; + + typekeys = getarraykeys( level.vsmgr ); + + while ( true ) + { + wait 0.05; + waittillframeend; + players = get_players(); + + for ( type_index = 0; type_index < typekeys.size; type_index++ ) + { + type = typekeys[type_index]; + + if ( !level.vsmgr[type].in_use ) + continue; + + for ( player_index = 0; player_index < players.size; player_index++ ) + { +/# + if ( is_true( players[player_index].pers["isBot"] ) ) + continue; +#/ + update_clientfields( players[player_index], level.vsmgr[type] ); + } + } + } +} + +get_first_active_name( type_struct ) +{ + size = type_struct.sorted_prio_keys.size; + + for ( prio_index = 0; prio_index < size; prio_index++ ) + { + prio_key = type_struct.sorted_prio_keys[prio_index]; + + if ( type_struct.info[prio_key].state.players[self._player_entnum].active ) + return prio_key; + } + + return level.vsmgr_default_info_name; +} + +update_clientfields( player, type_struct ) +{ + name = player get_first_active_name( type_struct ); + player setclientfieldtoplayer( type_struct.cf_slot_name, type_struct.info[name].slot_index ); + + if ( 1 < type_struct.cf_lerp_bit_count ) + player setclientfieldtoplayer( type_struct.cf_lerp_name, type_struct.info[name].state.players[player._player_entnum].lerp ); +} + +lerp_thread_wrapper( func, opt_param_1, opt_param_2 ) +{ + self notify( "deactivate" ); + self endon( "deactivate" ); + self [[ func ]]( opt_param_1, opt_param_2 ); +} + +lerp_thread_per_player_wrapper( func, player, opt_param_1, opt_param_2 ) +{ + player_entnum = player getentitynumber(); + self notify( "deactivate" ); + self endon( "deactivate" ); + self.players[player_entnum] notify( "deactivate" ); + self.players[player_entnum] endon( "deactivate" ); + player endon( "disconnect" ); + self [[ func ]]( player, opt_param_1, opt_param_2 ); +} + +activate_per_player( type, name, player, opt_param_1, opt_param_2 ) +{ + player_entnum = player getentitynumber(); + state = level.vsmgr[type].info[name].state; + + if ( state.ref_count_lerp_thread ) + { + state.players[player_entnum].ref_count++; + + if ( 1 < state.players[player_entnum].ref_count ) + return; + } + + if ( isdefined( state.lerp_thread ) ) + state thread lerp_thread_per_player_wrapper( state.lerp_thread, player, opt_param_1, opt_param_2 ); + else + state vsmgr_set_state_active( player, 1 ); +} + +deactivate_per_player( type, name, player ) +{ + player_entnum = player getentitynumber(); + state = level.vsmgr[type].info[name].state; + + if ( state.ref_count_lerp_thread ) + { + state.players[player_entnum].ref_count--; + + if ( 0 < state.players[player_entnum].ref_count ) + return; + } + + state vsmgr_set_state_inactive( player ); + state notify( "deactivate" ); +} + +calc_remaining_duration_lerp( start_time, end_time ) +{ + now = gettime(); + frac = float( end_time - now ) / float( end_time - start_time ); + return clamp( frac, 0, 1 ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_climb_down_pothole.gsc b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_climb_down_pothole.gsc new file mode 100644 index 0000000..c3e9bb4 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_climb_down_pothole.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "climb_down_pothole" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_climb_up_pothole.gsc b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_climb_up_pothole.gsc new file mode 100644 index 0000000..2f95ced --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_climb_up_pothole.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "climb_up_pothole" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_across_120.gsc b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_across_120.gsc new file mode 100644 index 0000000..b919516 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_across_120.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_across_120" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_down_127.gsc b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_down_127.gsc new file mode 100644 index 0000000..5b1c8da --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_down_127.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_127" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_down_190.gsc b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_down_190.gsc new file mode 100644 index 0000000..63e4ca8 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_down_190.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_190" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_down_222.gsc b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_down_222.gsc new file mode 100644 index 0000000..e56cb57 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_down_222.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_222" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_down_48.gsc b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_down_48.gsc new file mode 100644 index 0000000..3886fb1 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_down_48.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_48" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_down_96.gsc b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_down_96.gsc new file mode 100644 index 0000000..a051331 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_down_96.gsc @@ -0,0 +1,12 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + if ( isdefined( self.isdog ) && self.isdog ) + dog_jump_down( 96, 7 ); + else + dosimpletraverse( "jump_down_96" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_up_127.gsc b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_up_127.gsc new file mode 100644 index 0000000..30fbdd3 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_up_127.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_127" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_up_222.gsc b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_up_222.gsc new file mode 100644 index 0000000..9041804 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_jump_up_222.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_222" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_mantle_over_40.gsc b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_mantle_over_40.gsc new file mode 100644 index 0000000..3a37df9 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_mantle_over_40.gsc @@ -0,0 +1,49 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + traversestate = "zm_traverse_barrier"; + traversealias = "barrier_walk"; + + if ( self.has_legs ) + { + switch ( self.zombie_move_speed ) + { + case "walk_slide": + case "walk": + case "low_gravity_walk": + traversealias = "barrier_walk"; + break; + case "run_slide": + case "run": + case "low_gravity_run": + traversealias = "barrier_run"; + break; + case "super_sprint": + case "sprint_slide": + case "sprint": + case "low_gravity_sprint": + traversealias = "barrier_sprint"; + break; + default: + if ( isdefined( level.zm_mantle_over_40_move_speed_override ) ) + traversealias = self [[ level.zm_mantle_over_40_move_speed_override ]](); + else + { +/# + assertmsg( "Zombie '" + self.classname + "' move speed of '" + self.zombie_move_speed + "' is not supported for mantle_over_40." ); +#/ + } + } + } + else + { + traversestate = "zm_traverse_barrier_crawl"; + traversealias = "barrier_crawl"; + } + + self dotraverse( traversestate, traversealias ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc new file mode 100644 index 0000000..a9c2823 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + self dosimpletraverse( "mantle_over_40_hurdle" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_car.gsc b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_car.gsc new file mode 100644 index 0000000..9ba9add --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_car.gsc @@ -0,0 +1,32 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + speed = ""; + + if ( !isdefined( self.isdog ) || !self.isdog ) + { + switch ( self.zombie_move_speed ) + { + case "walk_slide": + case "walk": + speed = ""; + break; + case "run_slide": + case "run": + speed = "_run"; + break; + case "super_sprint": + case "sprint_slide": + case "sprint": + speed = "_sprint"; + break; + default: + } + } + + dosimpletraverse( "traverse_car" + speed, 1 ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_car_reverse.gsc b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_car_reverse.gsc new file mode 100644 index 0000000..b2ac641 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_car_reverse.gsc @@ -0,0 +1,24 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + speed = ""; + + if ( !self.has_legs ) + { + switch ( self.zombie_move_speed ) + { + case "super_sprint": + case "sprint_slide": + case "sprint": + speed = "_sprint"; + break; + default: + } + } + + dosimpletraverse( "traverse_car_reverse" + speed, 1 ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_diner_counter.gsc b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_diner_counter.gsc new file mode 100644 index 0000000..29cc89e --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_diner_counter.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "traverse_diner_counter", 1 ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_diner_counter_reverse.gsc b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_diner_counter_reverse.gsc new file mode 100644 index 0000000..d563110 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_diner_counter_reverse.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "traverse_diner_counter_reverse", 1 ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_diner_roof.gsc b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_diner_roof.gsc new file mode 100644 index 0000000..b4d8920 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_diner_roof.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "traverse_diner_roof" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_diner_roof_hatch_up.gsc b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_diner_roof_hatch_up.gsc new file mode 100644 index 0000000..f96d77f --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_diner_roof_hatch_up.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "traverse_diner_roof_hatch_up" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_diner_roof_up.gsc b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_diner_roof_up.gsc new file mode 100644 index 0000000..d01b4a8 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_diner_roof_up.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "traverse_diner_roof_up" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_garage_door.gsc b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_garage_door.gsc new file mode 100644 index 0000000..8aa0fca --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/animscripts/traverse/zm_traverse_garage_door.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "traverse_garage_door", 1 ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/createart/zm_transit_art.gsc b/ZM/Maps/Tranzit Diner/maps/mp/createart/zm_transit_art.gsc new file mode 100644 index 0000000..902a0ff --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/createart/zm_transit_art.gsc @@ -0,0 +1,46 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + level.tweakfile = 1; + setdvar( "scr_fog_exp_halfplane", "639.219" ); + setdvar( "scr_fog_exp_halfheight", "18691.3" ); + setdvar( "scr_fog_nearplane", "138.679" ); + setdvar( "scr_fog_red", "0.806694" ); + setdvar( "scr_fog_green", "0.962521" ); + setdvar( "scr_fog_blue", "0.9624" ); + setdvar( "scr_fog_baseheight", "1145.21" ); + setdvar( "visionstore_glowTweakEnable", "0" ); + setdvar( "visionstore_glowTweakRadius0", "5" ); + setdvar( "visionstore_glowTweakRadius1", "" ); + setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); + setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); + setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); + setdvar( "visionstore_glowTweakBloomIntensity1", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); + start_dist = 138.679; + half_dist = 1011.62; + half_height = 10834.5; + base_height = 1145.21; + fog_r = 0.501961; + fog_g = 0.501961; + fog_b = 0.501961; + fog_scale = 7.5834; + sun_col_r = 0.501961; + sun_col_g = 0.501961; + sun_col_b = 0.501961; + sun_dir_x = -0.99; + sun_dir_y = 0.06; + sun_dir_z = -0.11; + sun_start_ang = 0; + sun_stop_ang = 0; + time = 0; + max_fog_opacity = 0.8546; + setvolfog( start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale, sun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, sun_stop_ang, time, max_fog_opacity ); + visionsetnaked( "zm_transit", 0 ); + setdvar( "r_lightGridEnableTweaks", 1 ); + setdvar( "r_lightGridIntensity", 1.4 ); + setdvar( "r_lightGridContrast", 0.2 ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/createfx/zm_transit_fx.gsc b/ZM/Maps/Tranzit Diner/maps/mp/createfx/zm_transit_fx.gsc new file mode 100644 index 0000000..c60abfe --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/createfx/zm_transit_fx.gsc @@ -0,0 +1,3932 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_thick_1200x600" ); + ent.v["origin"] = ( -5964.8, 5958.68, -56.5457 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 278.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_thick_1200x600" ); + ent.v["origin"] = ( -7115.4, 6131.36, -52 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 263.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_thick_1200x600" ); + ent.v["origin"] = ( -8140.71, 6172, -40.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 281.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); + ent.v["origin"] = ( -5614.79, -6468.82, -39.2142 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 264.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); + ent.v["origin"] = ( -4165.66, -6434.5, -21.0351 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -6463.47, 4442.16, -54.2825 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -8085.35, 5126.36, -55.5562 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -5441.89, 2910.1, 86.6898 ); + ent.v["angles"] = ( 0, 181, 4 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -5012.74, 4.19914, 92.9997 ); + ent.v["angles"] = ( 360, 237, -5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_1000x1000" ); + ent.v["origin"] = ( -5294.92, 1435.37, 193 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -8375.91, -6880.29, 169.426 ); + ent.v["angles"] = ( 0, 62, 3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -693.86, -434.302, -62 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 1307.61, -433.515, -61.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 3301.23, -433.48, -61.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 1443.74, -1912.92, -49.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 1496.75, 951.473, -61.75 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 2317.07, 2920.76, -61.1957 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 326.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 4034.7, 4213.02, -121.687 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 291.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 5863.49, 4856.8, -90.6416 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 165.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 6425.89, 6793.82, -244.747 ); + ent.v["angles"] = ( 0, 165, 6 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 7658.88, 8594.01, -462.611 ); + ent.v["angles"] = ( 0.7299, 115.044, 6.96203 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 9492.26, 8859.12, -575.761 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 10248, 7411.77, -572.63 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 9370.34, 6265.97, -566.254 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 9363.72, 5259.97, -561.195 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 8247.62, 3780.29, -204.463 ); + ent.v["angles"] = vectorscale( ( 0, 0, -1 ), 9.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 8454.29, 1816.51, -91.9754 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 12.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_1000x1000" ); + ent.v["origin"] = ( -9435.63, 3725.57, 129.632 ); + ent.v["angles"] = ( 0, 328, -8 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -6295.03, -6855.52, -43.3133 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -5503.32, -5950.27, -33.7949 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -4278.1, -6853.2, -47.9013 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -2226.38, -6476.4, -111.832 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 151.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -430.571, -4777.94, -61 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 1354.92, -4343.55, 8.28402 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 154.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 2374.83, -5587.02, 2.17561 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 263.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 6376.43, -6175.54, -33.8548 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 263.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 8345.75, -6327.09, 106.432 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 226.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 10086.9, -6470.41, 118 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 354.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 7864.23, -7747.09, -22.7953 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 236.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 7372.48, -4745.95, -16.153 ); + ent.v["angles"] = ( 5, 177, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 6344.74, -4691.46, -51.8628 ); + ent.v["angles"] = ( 360, 177, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 7338.11, -2595.86, -111.322 ); + ent.v["angles"] = ( 359.907, 136.037, 4.87958 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 8825, -1201.03, -194.996 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 131.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 9725.72, -1742.09, -32.561 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 131.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 8174.97, -105.473, -61.5243 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 297.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 7784.83, 6029.76, -345.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 155.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_1000x1000" ); + ent.v["origin"] = ( 4116.25, 5645.36, -1 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 98.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_1000x1000" ); + ent.v["origin"] = ( -5802.88, 5634.9, 84.3632 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_thick_1200x600" ); + ent.v["origin"] = ( -5148.4, 4832.7, 0.312576 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 200.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -5934.56, 4918.4, -62.8867 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 187.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -6027.78, 5040.17, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 242.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -6079.08, 5289.99, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 144.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -7600.2, 4227.16, -56.4433 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 46.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -8537.89, 4162.49, -12.8317 ); + ent.v["angles"] = ( 360, 140, 10 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -8467.74, 4197.83, -25.7767 ); + ent.v["angles"] = ( 0, 88, 5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -8667.97, 4150.55, 4.24724 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 63.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -5642.84, 5224.15, -46.4991 ); + ent.v["angles"] = ( 4, 190, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -5655.12, 5116.59, -45.489 ); + ent.v["angles"] = ( 3.28795, 202.949, 2.74547 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -8029.04, 3834.02, -0.54985 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -7892.28, 3799.24, -3.22023 ); + ent.v["angles"] = ( 0, 353, -6 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); + ent.v["origin"] = ( 10156.4, 7081.81, -569.368 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -7670.71, 4400.04, -52.4712 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 25.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -7632.2, 4335.27, -53.4487 ); + ent.v["angles"] = ( 8.99508, 3.31666, 2.0246 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( -6662.13, 4291.07, -64 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( -6154.93, 4677.49, -57.6558 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 332.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( -7509.32, 4764.04, -61 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 3.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( -6443.25, 5252.53, -46.875 ); + ent.v["angles"] = ( 4.46701, 145.564, -11.1489 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( -7010.67, 5058.05, -46.875 ); + ent.v["angles"] = ( 0, 30, -4 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( -6236.39, 5096.6, -64.875 ); + ent.v["angles"] = ( 337, 270, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( -6263.69, 5186.76, -110.875 ); + ent.v["angles"] = ( 337, 270, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( -6935.05, 3992.15, -44.575 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 54.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( -6387.72, 5200.47, -45.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 111.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( -6228.73, 5271.98, -138.875 ); + ent.v["angles"] = ( 0, 320, 26 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( -7025.25, 5020.08, -47.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 12.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( -6990.59, 3917.48, -35.575 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 28.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); + ent.v["origin"] = ( -6482.02, -6922.66, -20.2632 ); + ent.v["angles"] = ( 5.58951, 0.151229, -1.77637 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_right_border" ); + ent.v["origin"] = ( -3783.49, -6804.15, -57.0054 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 189.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); + ent.v["origin"] = ( -5772.58, 4495.25, -45.7761 ); + ent.v["angles"] = ( 4.55882, 136.126, 0.230205 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( -6664.46, 4282.63, -63 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( -6419.69, 5968, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 182.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( -6794.75, 5895.12, -63 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( -7130.02, 5875.24, -61 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( -7035.44, 6092.55, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( -7019.59, 4360.48, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -7984.94, 4200.7, -40.8316 ); + ent.v["angles"] = ( 359.649, 23.5878, -7.38978 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -6164.4, 6207.33, -62 ); + ent.v["angles"] = ( 0, 265, 3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -6611.77, 6255.7, -64.056 ); + ent.v["angles"] = ( 355.996, 257.157, 2.98491 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -5905.66, 6053.11, -62.1083 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 243.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -7777.88, 5432.39, -67.6399 ); + ent.v["angles"] = ( 20.9872, 250.768, 2.14186 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -8977.1, 4620.45, -7.94255 ); + ent.v["angles"] = ( 0, 328, -8 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -9194.46, 4472.11, 27.7692 ); + ent.v["angles"] = ( 358.071, 314.131, -11.7653 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -9968.48, 3966.82, 141.149 ); + ent.v["angles"] = ( 360, 320, -2 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -9330.22, 3636.74, 143.33 ); + ent.v["angles"] = ( 1.2114, 128.06, 6.8825 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_flicker" ); + ent.v["origin"] = ( -7058.84, 5241.95, 114.025 ); + ent.v["angles"] = ( 304, 90, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -6702.67, 4030.74, -21.2888 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -7174.47, 4179.63, 52 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); + ent.v["origin"] = ( 1543.09, 1046.91, -49 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 262.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); + ent.v["origin"] = ( -7823.94, 4726.57, -55.4636 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 349.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( -6255.49, 5934.51, -55 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( -7111.76, 5851.47, -42 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( -6651.29, 3918.42, -41 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_thick_600x600" ); + ent.v["origin"] = ( -6584.17, 3681.87, -4.99999 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 15.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_thick_600x600" ); + ent.v["origin"] = ( -7886.28, 3889.4, 82.5849 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 15.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_depot_map_flicker" ); + ent.v["origin"] = ( -6713.64, 5321.71, -9.66086 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_depot_map_flicker" ); + ent.v["origin"] = ( -6723.23, 5313.91, -8.18646 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 225.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety" ); + ent.v["origin"] = ( -6365.04, 4578.04, 109.9 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 100; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -5517.59, 5241.44, -11 ); + ent.v["angles"] = ( 28, 182, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_50x50_sm" ); + ent.v["origin"] = ( -6758.41, 4766.59, -92.7686 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_50x50_sm" ); + ent.v["origin"] = ( -6689.7, 4768.01, -92.7002 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -5980.96, 6261.54, -36.3953 ); + ent.v["angles"] = ( 0, 175, -8 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -5845.6, 6191.34, -35.9 ); + ent.v["angles"] = ( 358.005, 179.002, -0.139585 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_50x50_sm" ); + ent.v["origin"] = ( -7810.49, 5420.54, -74.2103 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 154.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_50x50_sm" ); + ent.v["origin"] = ( -7819.04, 4111.9, -37.6549 ); + ent.v["angles"] = ( 12.9361, 13.2884, -8.13303 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_spark_ext_runner" ); + ent.v["origin"] = ( -7674.39, 5156.76, 166.697 ); + ent.v["angles"] = ( 63, 269, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 500; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_dbl_glow" ); + ent.v["origin"] = ( -6801.44, 5517.77, 76.125 ); + ent.v["angles"] = ( 330, 180, -90 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); + ent.v["origin"] = ( -6583.75, 5403.93, -32.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -300; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); + ent.v["origin"] = ( -6968.95, 5308.98, -32.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -360; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_column_lrg" ); + ent.v["origin"] = ( -6197.68, 3183.08, 15 ); + ent.v["angles"] = ( 271, 187, -84 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_column_lrg" ); + ent.v["origin"] = ( -4725.65, 4685.73, 338.88 ); + ent.v["angles"] = ( 271, 97, 72 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); + ent.v["origin"] = ( -4793.84, 4708.26, 346.094 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -7246.23, 4589.33, 78.025 ); + ent.v["angles"] = ( 90, 2, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -6951.36, 4934.45, 91.0322 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -6751.02, 4934.64, 85.425 ); + ent.v["angles"] = ( 31.9413, 329.602, 91 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -6847.37, 5022.5, 91 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety" ); + ent.v["origin"] = ( -3946.86, -7250.19, 107 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 102; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety" ); + ent.v["origin"] = ( -4418.11, -626.9, 192.003 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 79.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 114; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety" ); + ent.v["origin"] = ( 8133.65, 4787.75, -194.479 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 108; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety" ); + ent.v["origin"] = ( 10160.1, -1748.62, -45.9508 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 106; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety" ); + ent.v["origin"] = ( -45.2307, -5452.06, 92.5112 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 104; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -6724.03, 4589.1, 81.9 ); + ent.v["angles"] = ( 87, 182, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); + ent.v["origin"] = ( 287.427, -453.374, -62 ); + ent.v["angles"] = ( 1.9859, 356.008, -0.59234 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_right_border" ); + ent.v["origin"] = ( 10191, 8408.74, -566.847 ); + ent.v["angles"] = ( 3.6542, 275.052, 1.6294 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); + ent.v["origin"] = ( 6127.06, -6034.52, -70.4416 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 43.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); + ent.v["origin"] = ( 6552.9, -4715.76, -58.9995 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_thick_600x600" ); + ent.v["origin"] = ( 7804.15, -4507.67, 76 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); + ent.v["origin"] = ( 7466.6, -4570.16, 32.1187 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 299.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( -6879.38, 4404.41, -55.7499 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 345.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( -6865.54, 4337.65, -56.7845 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 24.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( -6803.27, 4294.82, -59.5574 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 83.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( 1397.35, -485.659, -67.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( 2955.11, -447.745, -129.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 183.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_town_cans" ); + ent.v["origin"] = ( 2318.31, -669.672, 132.6 ); + ent.v["angles"] = ( 82, 90, 90 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_town_cans" ); + ent.v["origin"] = ( 2393.33, -669.067, 133.725 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( 2475.69, -4.57658, 197.512 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( 591.712, -1224.22, 247.125 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_fog" ); + ent.v["origin"] = ( -385.805, -200.682, 110.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_fog" ); + ent.v["origin"] = ( 1232.59, -1724.85, 188.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 172.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_fog" ); + ent.v["origin"] = ( 1782.94, -2158.76, 109.262 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_street_lamp" ); + ent.v["origin"] = ( 2424, -200, 104 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_fog" ); + ent.v["origin"] = ( 3264.9, -684.243, 110 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( -7174.46, 4182.06, 86.8813 ); + ent.v["angles"] = ( 87, 182, 180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( 1916.05, -1534.34, -55.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 150.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( 742.165, -500.51, -61.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( 1584.48, 61.4287, -62 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( 1643.6, 239.56, -62.0999 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( 1956.58, -684.969, -55.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( -7162.7, 4430.93, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( -5961.17, 4659.68, -56.1655 ); + ent.v["angles"] = ( 0, 177, 3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( 1984.16, -477.682, -61.0387 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 152.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( 1529.72, -1378.9, -60 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 2076.71, -1639.77, 6.14304 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow" ); + ent.v["origin"] = ( 2284.66, 80.3072, 73.0331 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 2353.79, -515.486, -60.3616 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 104.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 2426.85, -478.694, -58.3936 ); + ent.v["angles"] = ( 9, 139, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 702.614, -1449.61, 161.693 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( 1721.63, -90.9005, -55.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( 1476.19, -161.862, -58.502 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( 1601.25, 381.192, -62 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( 2249.23, -374.64, -62 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( 1313.09, -749.727, -62 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 144.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 2990.83, -473.678, -129.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 129.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); + ent.v["origin"] = ( -6365.25, 4577.86, 109.8 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 101; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); + ent.v["origin"] = ( -3946.92, -7250.32, 107.1 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 103; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); + ent.v["origin"] = ( -4418.04, -626.987, 191.91 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 79.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 115; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); + ent.v["origin"] = ( 6300.89, 5078.98, 67.4032 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 111; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); + ent.v["origin"] = ( 8133.62, 4787.71, -194.497 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 109; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); + ent.v["origin"] = ( 10160, -1748.7, -45.9436 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 107; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); + ent.v["origin"] = ( -45.1183, -5452.09, 92.4005 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 105; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_bridge_dest" ); + ent.v["origin"] = ( -2790.06, -446.644, 162.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 150; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 754.692, -1143.89, 212.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_short_warm" ); + ent.v["origin"] = ( 969.776, -997.644, 97.8737 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 286.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_short_warm" ); + ent.v["origin"] = ( 1037.18, -956.931, 110.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 303.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_short_warm" ); + ent.v["origin"] = ( 920.384, -991.542, 115.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 281.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_short_warm" ); + ent.v["origin"] = ( 988.555, -841.342, 117.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 289.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 787.978, -855.479, -51.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 355.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( 808.764, -1044.17, -54.6895 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 917.617, -1052.28, 94.2635 ); + ent.v["angles"] = ( 29, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 850.388, -949.561, 94 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( 695.336, -1140.64, 174.388 ); + ent.v["angles"] = ( 0, 358.745, 90.3158 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_column_lrg" ); + ent.v["origin"] = ( -397.618, -1279.07, 159.194 ); + ent.v["angles"] = ( 271, 187, -84 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_town_cans" ); + ent.v["origin"] = ( 1144.58, -1476.87, 73.125 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( 1075.85, -1008.77, -61 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 47.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( 855.703, -1077.52, -55.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 978.234, -1004.41, 95.8515 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 112.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 1026.46, -1141.13, 177.669 ); + ent.v["angles"] = ( 24, 193, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( 11566, 7369.17, -754.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 65.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm" ); + ent.v["origin"] = ( -7002.24, 4782.52, -63 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 200; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm" ); + ent.v["origin"] = ( -5071.79, -7163.23, -58.3008 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 220; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm" ); + ent.v["origin"] = ( 8637.74, -6861.16, 100.781 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 230; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm" ); + ent.v["origin"] = ( 10217, -809.125, -216.77 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 240; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm" ); + ent.v["origin"] = ( 10777.6, 7700.74, -579.817 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm" ); + ent.v["origin"] = ( 1256.2, -477.919, -61 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 260; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort" ); + ent.v["origin"] = ( -5772.88, 5116.44, -43.0053 ); + ent.v["angles"] = ( 270, 217.395, 178.605 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_detail" ); + ent.v["origin"] = ( -6706.07, 4768.48, -92.5561 ); + ent.v["angles"] = ( 270, 0, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_detail" ); + ent.v["origin"] = ( -7616.51, 4365.68, -58 ); + ent.v["angles"] = ( 270, 0.65106, -162.651 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_sm" ); + ent.v["origin"] = ( -5185.59, -6893.63, -65 ); + ent.v["angles"] = ( 270, 0, -3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_sm" ); + ent.v["origin"] = ( -5455.46, -6802.14, -65 ); + ent.v["angles"] = ( 270, 356.906, -30.9059 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_sm" ); + ent.v["origin"] = ( 7051.84, -6104.46, -126 ); + ent.v["angles"] = ( 270, 359.914, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_sm" ); + ent.v["origin"] = ( 7097.11, -6375.92, -126 ); + ent.v["angles"] = ( 270, 359.914, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_sm" ); + ent.v["origin"] = ( 2790.44, -423.149, -80.455 ); + ent.v["angles"] = ( 270, 0.692906, 178.307 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); + ent.v["origin"] = ( 6100.79, -5285.34, -32.8692 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 337.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_right_border" ); + ent.v["origin"] = ( 10382.8, 8961.99, -422.321 ); + ent.v["angles"] = ( 358.271, 9.94811, 0.507869 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); + ent.v["origin"] = ( 10049.7, 8042.2, -572.673 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); + ent.v["origin"] = ( 10070.1, 7465.39, -576 ); + ent.v["angles"] = ( 358.698, 359.957, 0.783675 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( 7062.86, -6152.26, -126 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 107.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_spark_ext_runner" ); + ent.v["origin"] = ( -3843.32, -7122.23, 150.713 ); + ent.v["angles"] = ( 63, 269, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 500; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_spark_ext_runner" ); + ent.v["origin"] = ( 8854.15, -5938.39, 310.653 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 500; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_spark_ext_runner" ); + ent.v["origin"] = ( 1293.97, -1569.38, 275.83 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 500; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow" ); + ent.v["origin"] = ( -6837.05, 5106.9, 122.125 ); + ent.v["angles"] = ( 288.982, 88.5178, 1.46959 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); + ent.v["origin"] = ( 2038.82, 145.766, 43.9131 ); + ent.v["angles"] = ( 284.035, 94.1266, -94.0038 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_bowling_sign_fog" ); + ent.v["origin"] = ( 2357.64, -719.063, 369.31 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); + ent.v["origin"] = ( 2837.4, -435.051, 11.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1889.32, 763.731, -56.6942 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 1791.17, 740.252, -55.0558 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 163.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 1979.87, 761.433, -47.4833 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 7818.75, -5992.71, 60.2811 ); + ent.v["angles"] = ( 20, 84, -6 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 7988.32, -6044.29, 75.9195 ); + ent.v["angles"] = ( 4, 35, -11 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 8334.09, -6302.3, 93.7967 ); + ent.v["angles"] = ( 359.913, 359.004, -5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 8353.75, -6383, 98.6189 ); + ent.v["angles"] = ( 354.382, 346.891, -3.27537 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 8404.03, -6366.25, 98.1088 ); + ent.v["angles"] = ( 354.374, 344.526, -1.56396 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 8393.64, -6460.92, 102.788 ); + ent.v["angles"] = ( 1.29256, 14.9455, -2.83045 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 8438.13, -6582.85, 105.293 ); + ent.v["angles"] = ( 359.328, 191.965, -2.0986 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 8363.87, -7077.4, 92.5037 ); + ent.v["angles"] = ( 7.08973, 260.142, -1.31736 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 8398.26, -7131.53, 83.5329 ); + ent.v["angles"] = ( 355.945, 6.61279, 7.42273 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 8406.2, -7050.16, 95.9016 ); + ent.v["angles"] = ( 4.76812, 319.449, 5.4151 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 8418.49, -6955.4, 101.044 ); + ent.v["angles"] = ( 1.65899, 333.337, -1.42441 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5503.15, 6388.21, -72.5321 ); + ent.v["angles"] = ( 0.109414, 292.37, -8.15952 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5514.5, 6422.25, -73.5282 ); + ent.v["angles"] = ( 356.025, 262.626, -7.13254 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 5388.57, 6425.25, -64.7438 ); + ent.v["angles"] = ( 356.766, 272.615, -3.7523 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5337.66, 6389.44, -64.8271 ); + ent.v["angles"] = ( 358.904, 187.573, -0.430535 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5324.97, 6019.33, -64.9331 ); + ent.v["angles"] = ( 359.844, 311.516, -4.94951 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5377.87, 6091.1, -67.7557 ); + ent.v["angles"] = ( 0.239705, 148.415, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5359.91, 6133.77, -69 ); + ent.v["angles"] = ( 0.243594, 80.4189, 1.7854 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5280.21, 6157.39, -65.9638 ); + ent.v["angles"] = ( 2.09653, 38.445, 1.85192 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5298.75, 6236.24, -67.6985 ); + ent.v["angles"] = ( 0.512533, 76.4233, 0.749736 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5481, 6340.94, -69.9456 ); + ent.v["angles"] = ( 354.217, 246.67, -5.76663 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5469.72, 6431.43, -71.8224 ); + ent.v["angles"] = ( 356.025, 262.626, -5.13254 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5313.89, 6374.04, -68.4139 ); + ent.v["angles"] = ( 352.852, 230.625, -1.9477 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 1744.42, 704.608, -57.139 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); + ent.v["origin"] = ( -5879.18, 5132.33, -54.9188 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 203.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); + ent.v["origin"] = ( -5679.99, 5029.36, -38.0459 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( 191.569, 618.303, -38 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( 53.7307, 538.679, -35.3064 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 250.113, 567.747, -34.6563 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 132.32, 591.904, 85.6072 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 318.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 234.855, 648.418, 85.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 141.005, 552.795, -33.0726 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 304.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_vault" ); + ent.v["origin"] = ( 466.399, 540.849, 24.125 ); + ent.v["angles"] = ( 2, 330, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_key_glint" ); + ent.v["origin"] = ( 589.29, 440.722, 11.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 233.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_key_glint" ); + ent.v["origin"] = ( 589.064, 449.555, 11.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 233.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( 100.097, 339.198, -46.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 174.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( 256.422, 349.21, -54.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( 178.717, 413.692, -29.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_bar_glow" ); + ent.v["origin"] = ( 1777.99, 156.13, 151.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( 2523.8, 374.808, 69.625 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 1114.07, 20.5454, 41.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 313.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_town_cans" ); + ent.v["origin"] = ( 502.541, 765.832, 83.125 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 991.306, -95.3722, 40.5243 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 313.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( 1970.15, 167.957, 163.938 ); + ent.v["angles"] = ( 335, 251, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_med" ); + ent.v["origin"] = ( 2239.96, 185.098, 139.125 ); + ent.v["angles"] = ( 336.247, 251.383, 8.33834 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_med" ); + ent.v["origin"] = ( 1969.63, -25.7143, 91.125 ); + ent.v["angles"] = ( 335.016, 245.207, -0.932351 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( 1873.95, 168.875, 165.392 ); + ent.v["angles"] = ( 332.003, 249.879, 0.387281 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( 1941.61, 167.23, 198.192 ); + ent.v["angles"] = ( 336, 251, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( 2003.46, 42.8896, 92.125 ); + ent.v["angles"] = ( 337.004, 241.914, 0.424438 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( 2350.84, 34.2896, 88.125 ); + ent.v["angles"] = ( 333.004, 244.121, -0.474286 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( 1888.03, 168.875, 202.429 ); + ent.v["angles"] = ( 336, 251, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_med" ); + ent.v["origin"] = ( 2324.61, -20.7978, 88.125 ); + ent.v["angles"] = ( 334, 243, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( 2179.62, -1804.56, 249.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( 2212.67, -1670.11, 208.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 174.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( 1264.63, -3157.28, 28.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 70.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); + ent.v["origin"] = ( -627.572, -615.202, 116.432 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 113; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety" ); + ent.v["origin"] = ( -627.359, -615.075, 116.432 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 112; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( 1927.64, -1060.33, 131.881 ); + ent.v["angles"] = ( 67, 269.911, 87.9181 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1645.32, 694.99, -64.1414 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1602.48, 476.257, -68.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 324.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1535.94, 497.874, -64.9919 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 23.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1374.88, 782.003, -65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1603.51, -262.848, -65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 324.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 584.114, -459.174, -67 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 205.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 775.721, -690.862, -57.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 353.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1026.73, -502.666, -64.9585 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 304.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1165.88, -310.769, -65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 250.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1592.68, -972.327, -64.8077 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 31.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1515.33, -822.148, -62.2515 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 20.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1533.38, -1139.12, -60.4293 ); + ent.v["angles"] = ( 0.278291, 274.981, -5.99519 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 1359.65, -1213.52, -63.1614 ); + ent.v["angles"] = ( 356.345, 160.109, -1.41514 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 1535.79, -1334.63, -63.8559 ); + ent.v["angles"] = ( 0.73816, 38.0882, 3.84916 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 1492.83, -1288.81, -50.9464 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 344.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 1479.57, -1249.33, -55.1658 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 48.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 1493.56, -1314.7, -54.8906 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 279.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1386.95, 261.349, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 252.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1247.14, 178.805, -65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1431.34, 155.715, -66 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 1540.99, -68.7187, -64.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 60.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 1482.47, -63.7589, -62 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 103.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 1343.41, 77.0003, -68.1872 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 102.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1562.34, -1135.27, -60.6276 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 283.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( 1452.5, -218.951, -70 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( 1361.91, -551.798, -67 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 230.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 2441.27, -547.621, -59.6587 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 208.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1248.59, -1279.85, -58 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 294.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 1343.33, -1237.01, -55.7566 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 67.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -6869.17, 5342.61, -62.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 350.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 3; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -6869.78, 5464.68, -61.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 15.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 3; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( -6835.64, 5264.04, -66.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 53.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 3; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( -6762.79, 5228.51, -63.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 52.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 3; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( -6720.24, 5171.85, -61.3532 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 23.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 3; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( -6896.93, 5375.32, -63.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 244.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 3; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_power_pulse" ); + ent.v["origin"] = ( 12204.4, 7587.57, -641 ); + ent.v["angles"] = ( 270, 0, -95 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 500; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_power_on" ); + ent.v["origin"] = ( 12204.4, 7587.57, -640 ); + ent.v["angles"] = ( 270, 0, -95 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0.25; + ent.v["exploder"] = 500; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_power_rising" ); + ent.v["origin"] = ( 12204.4, 7587.57, -639 ); + ent.v["angles"] = ( 270, 0, -95 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 30.25; + ent.v["exploder"] = 500; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_crevice_smoke_100" ); + ent.v["origin"] = ( -6865.77, 5449.35, -63.7096 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 18.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_crevice_smoke_100" ); + ent.v["origin"] = ( -6865.9, 5353.17, -64.4128 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 352.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_crevice_smoke_100" ); + ent.v["origin"] = ( -6821.72, 5257.82, -62.8765 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 68.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_crevice_smoke_100" ); + ent.v["origin"] = ( -6752.63, 5222.43, -66.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 50.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety" ); + ent.v["origin"] = ( 6301.07, 5079.12, 67.4271 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 110; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( -10128.1, 3411.46, 196 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( -10497, 2685.14, 219.741 ); + ent.v["angles"] = ( 0, 331, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( -10539.3, 1146.3, 311.719 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 316.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( -9678.57, 2737.65, 192 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 54.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( -11488.2, 521.303, 192 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 27.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( -10739.5, -2162.63, 240.948 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 150.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( -9363.38, -6107.72, 196 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 230.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_thick_600x600" ); + ent.v["origin"] = ( -10126.6, -6035.96, 192 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_thick_600x600" ); + ent.v["origin"] = ( -10747.4, -3914.96, 192 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -11077, -1101.23, 180 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 171.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort" ); + ent.v["origin"] = ( -11210, -1129.64, 180 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); + ent.v["origin"] = ( -11220.5, -1101.46, 180 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 203.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -11149.5, -1196.82, 180 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -11188.2, -1050.69, 180 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -11279.7, -1155.05, 180 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -11278.8, -1268.24, 180 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -11296.1, -909.062, 185 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 78.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -11309.7, -2014.81, 180 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 126.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); + ent.v["origin"] = ( -11311, -2020.2, 180 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -11375, -1964.33, 185.879 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 346.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -11234.5, -2090.5, 180 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 155.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( -11220.4, -3193.42, 268.293 ); + ent.v["angles"] = ( 333.018, 206.982, 2.24406 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -11104.8, -983.586, 194.026 ); + ent.v["angles"] = ( 7, 190, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); + ent.v["origin"] = ( -10657.8, 889.003, 305.817 ); + ent.v["angles"] = ( 0, 316, -4 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_dbl_glow" ); + ent.v["origin"] = ( -6247.77, 5197.74, 35.125 ); + ent.v["angles"] = ( 297.939, 94.5663, -94.2372 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -9936.09, 2851.18, 441 ); + ent.v["angles"] = ( 270, 0, -30 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -10224.1, 2342.43, 440 ); + ent.v["angles"] = ( 270, 0, -30 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -10610.4, 1486.71, 430.812 ); + ent.v["angles"] = ( 289, 249, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -11120, -312.414, 440.9 ); + ent.v["angles"] = ( 270, 359.089, -12.0888 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -11249.9, -1465.12, 439.2 ); + ent.v["angles"] = ( 270, 359.951, -1.95138 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -11173.1, -3034.18, 441.161 ); + ent.v["angles"] = ( 270, 340.77, 26.2299 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -10797.9, -4638.33, 439.9 ); + ent.v["angles"] = ( 270, 1.54295, 17.457 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -10121.4, -5933.87, 433.345 ); + ent.v["angles"] = ( 289.524, 274.491, 104.913 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -9680.11, -6367.1, 433 ); + ent.v["angles"] = ( 289.455, 68.9812, -16.4659 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( -10003.3, 3224.71, 192 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 259.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow" ); + ent.v["origin"] = ( -11779.3, -1125.37, 375 ); + ent.v["angles"] = ( 270, 0.906503, -1.90651 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_flicker" ); + ent.v["origin"] = ( -11778, -1677.58, 373.371 ); + ent.v["angles"] = ( 270, 0.906503, -1.90651 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); + ent.v["origin"] = ( -11778.4, -2244.37, 374.1 ); + ent.v["angles"] = ( 270, 0.906503, -1.90651 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); + ent.v["origin"] = ( -10951.7, -5454.94, 374 ); + ent.v["angles"] = ( 270, 358.512, 26.4878 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -10710.7, -855.473, 370 ); + ent.v["angles"] = ( 271, 264.002, 89.9978 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); + ent.v["origin"] = ( -6163.17, 3293.78, -13.9583 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 119.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); + ent.v["origin"] = ( -11303.5, -3354.03, 302.04 ); + ent.v["angles"] = ( 337.721, 5.86313, -15.1555 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); + ent.v["origin"] = ( -7381.73, 6748.78, -55 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); + ent.v["origin"] = ( -7490.71, 6520.46, -71 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 276.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); + ent.v["origin"] = ( -7307.65, 6961.87, -79 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 276.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_column_lrg" ); + ent.v["origin"] = ( -7412.36, 7034.42, -45 ); + ent.v["angles"] = ( 290.014, 195.476, -92.6171 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); + ent.v["origin"] = ( -5794.23, 6978.67, -44 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 152.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -6355.24, 5714, 8.125 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -7184.36, 5600.22, 15.125 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 177.625, -530.665, -48.3973 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 313.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 1295.93, 882.596, -25.875 ); + ent.v["angles"] = ( 35, 342, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 1284.46, 875.951, -32.7092 ); + ent.v["angles"] = ( 327, 156, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -5459.9, -6788, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 337.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -5230.88, -6999.87, -65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 85.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -5145.21, -6915.75, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 337.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -5050.25, -6921.37, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 169.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -5501.02, -6704.36, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 263.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -5473.88, -7476.84, 127.125 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -5429.98, -7531.46, 128 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -5429.21, -7664.66, 128.125 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -5429.52, -7799.99, 127.814 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -5429.63, -7933.89, 128 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -5644.89, -7549.17, 134.291 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -6031.36, -7550.77, 136.125 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -6314.79, -7549.68, 134.879 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -6469.19, -7789.98, 136.641 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -5938.95, -7417.7, 127.125 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -5846.87, -7476.07, 126.967 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -5656.66, -7476.06, 128 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -5483.61, -7432.77, -34.6377 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 290.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 5435.05, 6878.72, -9.113 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 187.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -5974.13, -7261.3, -48.2301 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 64.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -5972.29, -7281.63, -66.268 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 324.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( -5851.29, -7067.3, -54.1333 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 136.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( -4366.17, -7273.86, -52.8879 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 122.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( -5148.85, -7273.66, -63.5983 ); + ent.v["angles"] = ( 357, 120.999, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( -5090.66, -7323.27, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 122.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( -4380.11, -7148.49, -58.148 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 122.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( -5862.85, -7050.07, -52.8316 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 122.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); + ent.v["origin"] = ( -5969.18, -7734.27, 10.025 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -5698.49, -8378.1, -12.3228 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_glow_fog" ); + ent.v["origin"] = ( -4568.29, -7225.78, 151.693 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 117.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -4737.35, -7412.11, 197.275 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -4833.49, -7840.76, 125.125 ); + ent.v["angles"] = ( 271, 359.999, -178.999 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -4625.94, -7868.51, 124.025 ); + ent.v["angles"] = ( 295.505, 181.435, 177.976 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -4410.87, -7797.71, 114.26 ); + ent.v["angles"] = ( 283.337, 346.888, 12.8218 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5409.75, -7279.42, 276.181 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5408.13, -7411.31, 275.423 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5409.11, -7211.45, 276.35 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5412.33, -7144.55, 274.523 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5412.82, -7113.89, 274.643 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5409.51, -7012.87, 276.361 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5408.54, -6967.22, 509.706 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5408.04, -6942.82, 606.032 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5336.28, -7378.8, 275.297 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5337.65, -7312.61, 275.796 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5336.82, -7245.57, 275.566 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5336.31, -7143.39, 276.066 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5337.79, -7013.92, 275.057 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5336.85, -6971.21, 475.647 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5337.16, -6957.33, 539.584 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( -4834.79, -7458.79, 128.325 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -6306.31, -7943.28, 77.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -5775.25, -7866.32, 54.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -5729.95, -7877.56, 63.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -5625.83, -7543.92, 61.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -5268.45, -7968.52, 4.89243 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -5142.25, -7958.67, -20.1334 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_bulb_xsm" ); + ent.v["origin"] = ( 7894.84, -6552.52, 202.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_bulb_xsm" ); + ent.v["origin"] = ( 7889.8, -6318.81, 315.925 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_bulb_xsm" ); + ent.v["origin"] = ( 8013.75, -6642.93, 361.925 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 8328.49, -5015.29, 161.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 7882.26, -5207.24, 151.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 8503.42, -4804.02, 162.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 8059.34, -5204.01, 333.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_bulb_xsm" ); + ent.v["origin"] = ( 8317.79, -6683.08, 180.206 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_bulb_xsm" ); + ent.v["origin"] = ( 8234.94, -6586.04, 178 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_bulb_xsm" ); + ent.v["origin"] = ( 8137.48, -6959.37, 211.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 8057.41, -4806.99, 161.725 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 7374.98, -5426.44, 49.3118 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( -4220.64, -7799.22, -1.875 ); + ent.v["angles"] = ( 316.689, 259.962, 13.0518 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( -4189.21, -7705.66, 7.66019 ); + ent.v["angles"] = ( 317.814, 249.191, 10.3636 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( -4295.9, -7802.49, 21.125 ); + ent.v["angles"] = ( 320.075, 258.325, 14.3308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( -4308.83, -7683.01, 32.8659 ); + ent.v["angles"] = ( 325.068, 264.852, 10.8459 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( -5017.99, -7879.03, -56.875 ); + ent.v["angles"] = ( 340.408, 259.106, 4.31522 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( -5003.87, -7838.04, -30.3927 ); + ent.v["angles"] = ( 342.331, 260.31, 3.91311 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( -5494.71, -7831.96, 3.125 ); + ent.v["angles"] = ( 335.016, 248.207, -0.932351 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( -5523.54, -7862.26, 0.125 ); + ent.v["angles"] = ( 336, 246, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( 9040.04, -6391.29, 273.2 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( 8419.09, -5744.22, 249.051 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( 8242.84, -6849.96, 259.625 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( 8240.02, -6532.87, 209.525 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 87.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( 6587.59, -5127.09, -55.2822 ); + ent.v["angles"] = ( 353, 160, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( 6987.8, -5763.06, -51.5495 ); + ent.v["angles"] = ( 2, 136, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( 7858.56, -5805.03, 8.45168 ); + ent.v["angles"] = ( 2, 136, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( 7792.54, -5443.05, 36.5811 ); + ent.v["angles"] = ( 359, 136, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( 7442.47, -5125.89, -4.7008 ); + ent.v["angles"] = ( 359, 136, -5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( 8739.61, -6983.54, 86.5683 ); + ent.v["angles"] = ( 0.545573, 157.823, 1.29891 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8027.21, -6432.62, 165.375 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8225.35, -6613.31, 178.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8140.59, -6889.03, 168.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8033.01, -6470.27, 294.896 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 9029.53, -6393.49, 249.093 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8416.65, -5742.4, 224.177 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8357.57, -6682.99, 183.255 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8100.48, -5243.8, 114.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 7910.7, -5209.15, 151.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8050.46, -5221.8, 334.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8484.12, -4806.32, 166.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8055.05, -4795.58, 161.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8328.53, -5033.75, 165.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 7854.08, -5055.63, 126.147 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 7803.41, -4567.1, 111.113 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8591.82, -5402.47, 117 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 7135.13, -5638.24, 30.9983 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( 9978.39, -1767.15, -212.32 ); + ent.v["angles"] = ( 358, 160, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( 10242, -133.225, -213.655 ); + ent.v["angles"] = ( 2, 160, 2 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( 10185, -1131.84, -210.081 ); + ent.v["angles"] = ( 2, 160, 2 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 10419.3, 7366.19, -557.286 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 223.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 10426.2, 7362.67, -556.087 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 10576.4, 7867.03, -534.373 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 21.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 10561.8, 7854.68, -546.776 ); + ent.v["angles"] = ( 24, 21, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 10543.1, 7838.16, -564.906 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 287.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 11244.2, 7598.05, -529.002 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 11273.6, 7566.38, -510.46 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 11197.5, 7581.58, -554.377 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 11102.1, 7582.38, -521.847 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( 11534.9, 7043.33, -422.437 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 125.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); + ent.v["origin"] = ( 11695.4, 6972.81, -417.525 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 121.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( 10772.1, 7534.6, -579.322 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 134.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( 10293.5, 8161.56, -576.661 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 157.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( 11284.2, 7782.37, -549.009 ); + ent.v["angles"] = ( 8.89267, 132.773, -10.1167 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); + ent.v["origin"] = ( 10545.1, 7987.11, -542.084 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 213.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); + ent.v["origin"] = ( -7274.63, 4216.52, -7.79429 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); + ent.v["origin"] = ( -4655.73, -7718.2, -46.2181 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 124.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); + ent.v["origin"] = ( 1772.67, -134.847, -26.9184 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); + ent.v["origin"] = ( 10482.5, 8077.43, -551.016 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); + ent.v["origin"] = ( 10779.7, 7998.21, -540.07 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 257.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); + ent.v["origin"] = ( 11134.3, 8093.66, -505.788 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 290.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( 11518.6, 7313.49, -755.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 32.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 11535.9, 7320.47, -712.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( 12544.7, 8367.86, -747.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 217.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( 12619.1, 8410.46, -751.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 250.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); + ent.v["origin"] = ( 11077.4, 8147.23, -472.382 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 85.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( 10627.8, 8984.05, -351.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 244.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( 10671.7, 9056.4, -351.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); + ent.v["origin"] = ( 12185.1, 8300.09, -747.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); + ent.v["origin"] = ( 10667.5, 8857.24, -566.312 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 320.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 11829.2, 7033.91, -366.52 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 142.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); + ent.v["origin"] = ( 11000.5, 8592.98, -721.228 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 263.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -3523.91, 4145.58, 1026 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 164.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 200; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -5822.61, 8161.55, 1665.98 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 255.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 200; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -10419.6, 2878.18, 1302.32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 33.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 200; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -10422.2, 5513.57, 1108.93 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 351.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 200; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -7579.71, 2412.15, 1076.04 ); + ent.v["angles"] = ( 20.9875, 82.1415, 0.732403 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 200; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -8591.58, 7883.01, 1434.96 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 300.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 200; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -5183.81, 1971.44, 1380.88 ); + ent.v["angles"] = ( 8.93236, 125.086, 1.10578 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 200; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -3907.73, 6244.31, 1277.76 ); + ent.v["angles"] = ( 4.95198, 216.03, 0.697713 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 200; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -7994.63, -5467.26, 1488 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 338.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 220; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -6248.9, -4383.96, 1488.83 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 283.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 220; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -3637.03, -5318.07, 994.45 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 232.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 220; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -2982.77, -8985.62, 1217.37 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 142.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 220; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -4789.43, -10429.2, 1615.09 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 107.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 220; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -2144.48, -6671.63, 1097.34 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 189.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 220; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -7283.26, -9141.06, 1439.81 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 54.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 220; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -8253.71, -7187.61, 1204.71 ); + ent.v["angles"] = ( 357, 7, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 220; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 11039.7, -5731.09, 1349.86 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 230; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 4491.1, -6164.51, 1530.32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 5.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 230; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 9613.27, -3527.74, 1697.05 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 230; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 4882.98, -3611.48, 1455.78 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 322.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 230; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 7145.47, -2628.27, 1418.72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 230; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 10641, -8278.11, 1550.91 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 137.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 230; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 5867.88, -8161.48, 1505.91 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 230; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 8045.36, -9511.34, 1941.18 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 82.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 230; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 6852.87, -2262.35, 1264.09 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 23.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 240; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 13859, -645.96, 1348.54 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 183.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 240; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 8118.81, 2009.01, 1412.57 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 303.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 240; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 10501.1, 2270.69, 1535.92 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 240; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 6154.19, 223.038, 1606.08 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 349.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 240; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 10606.6, -4038.92, 1467.82 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 104.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 240; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 13138.8, -3032.95, 1329.48 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 139.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 240; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 12600.4, 1246.54, 1347.77 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 231.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 240; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 8452.68, -3056.77, 1074.09 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 55.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 240; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 14766.4, 6814.59, 1098.18 ); + ent.v["angles"] = ( 12, 174, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 10339.2, 3964.06, 1379.25 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 82.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 12754.5, 4793.53, 1107.25 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 132.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 14340.3, 9177.31, 663.407 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 197.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 8179.63, 4723.92, 896.714 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 51.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 8458.11, 10639.4, 1231.62 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 307.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 7094.67, 8425.25, 1257 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 353.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 7202.75, 6339.84, 765.131 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 17.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 10729.5, 11122.9, 1151.78 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 266.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 13325.6, 10557.6, 1366.97 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 235.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -207.347, 1856.37, 1500.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 302.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 260; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -1247.2, -2498.41, 1408 ); + ent.v["angles"] = ( 360, 36, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 260; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 1625.45, 3225.11, 1105 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 260; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 4274.06, -1538.84, 1177 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 153.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 260; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -1889.24, 66.6515, 1399 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 348.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 260; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 4525.94, 665.024, 1126 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 197.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 260; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 2974.66, -3206.25, 1577 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 111.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 260; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 694.038, -3737.93, 1409 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 79.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 260; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 3769.33, 2230.93, 904 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 232.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 260; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_truck_light" ); + ent.v["origin"] = ( 1164.06, 310.847, -0.95 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 200.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); + ent.v["origin"] = ( 2050.55, -1176.95, 92.625 ); + ent.v["angles"] = ( 282, 270, 90 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_town_cans_sm" ); + ent.v["origin"] = ( 888.034, -1532.84, 80.125 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_town_cans_sm" ); + ent.v["origin"] = ( 888.055, -1424.17, 80.0051 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_town_cans_sm" ); + ent.v["origin"] = ( 1058.12, -1424.92, 80.725 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -6494.99, 5193.01, 55.225 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -6004.73, 4178.79, -39.7161 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 99.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -6007.56, 4183.18, -46.8613 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 99.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); + ent.v["origin"] = ( -7256.49, 5356.49, 76.625 ); + ent.v["angles"] = ( 300.56, 56.1976, -63.4146 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_spark_blue_lg_loop" ); + ent.v["origin"] = ( 11224.3, 7631.21, -757.475 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_spark_blue_lg_loop" ); + ent.v["origin"] = ( 11166.9, 7525.87, -755.374 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( 1510.96, -426.276, -67.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_50x50_sm" ); + ent.v["origin"] = ( -5982.84, -6804.63, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -5858.36, -7105.72, -65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 289.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -5694.71, -6884.39, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 350.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -5823.62, -6768.1, -65.2136 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 97.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_cool" ); + ent.v["origin"] = ( -7178.46, 5386.18, -43.6839 ); + ent.v["angles"] = ( 346, 41, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_cool" ); + ent.v["origin"] = ( -7176.71, 5393.31, -9.00734 ); + ent.v["angles"] = ( 346, 41, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_cool" ); + ent.v["origin"] = ( -7177.88, 5334.54, 45.5397 ); + ent.v["angles"] = ( 356, 55, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_cool" ); + ent.v["origin"] = ( -7061.11, 5401.32, -55.875 ); + ent.v["angles"] = ( 341, 56, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_cool" ); + ent.v["origin"] = ( -7108.24, 5323.87, -55.875 ); + ent.v["angles"] = ( 341, 55, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( -6364.25, 5404.07, -54.2979 ); + ent.v["angles"] = ( 327.291, 180.677, 4.76528 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( -6450.47, 5366.94, -55.875 ); + ent.v["angles"] = ( 317.576, 183.05, -3.56625 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( -6324.56, 5391.09, 23.3601 ); + ent.v["angles"] = ( 339.99, 181.99, -0.275328 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -6526.78, 5027.04, -32.4411 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 279.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -6536.44, 5005.17, -38.2548 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -6550.6, 5011.6, -33.6877 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( 10085.8, 7660.61, -580 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( 10099.7, 7278.2, -583 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 77.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( 10029.6, 7897.85, -584 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 206.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 10093.3, 7472.53, -583 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 10199.8, 7421.3, -573 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 10161.9, 7815.92, -576 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 81.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -2752.23, -202.843, -61.0126 ); + ent.v["angles"] = ( 10.9441, 272.285, 67.3066 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 150; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -2748.37, -203.92, -10.2652 ); + ent.v["angles"] = ( 0, 273, 9 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 150; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_flicker" ); + ent.v["origin"] = ( 1901.03, 564.856, 67.125 ); + ent.v["angles"] = ( 311.502, 195.461, 157.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( 9992.94, -1245.49, -217.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 130.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 10052.3, -1175.39, -223.625 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 276.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 10168.1, -1213.8, -221.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 10061.8, -1368.94, -222.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 70.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( 11263.9, 8174.39, -337.162 ); + ent.v["angles"] = ( 52, 12, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_bulb_xsm" ); + ent.v["origin"] = ( 11773.7, 8485.59, -469.375 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 290.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( 11333.8, 8107.72, -378.181 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 74.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( 10530.4, 8345.07, -413.424 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( -4437.91, -7528.95, 99.8901 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -4625.7, -7827.94, 124.725 ); + ent.v["angles"] = ( 295.505, 181.435, 177.976 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( -6346.4, -7804.18, -13.2077 ); + ent.v["angles"] = ( 338, 245, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( -6346.4, -7804.18, -13.2077 ); + ent.v["angles"] = ( 338, 245, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); + ent.v["origin"] = ( -6144.54, -7824.85, 130.125 ); + ent.v["angles"] = ( 282, 90, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); + ent.v["origin"] = ( -5761.02, -7822.95, 130.125 ); + ent.v["angles"] = ( 270, 30.9987, -120.999 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_town_cans_sm" ); + ent.v["origin"] = ( -3834.8, -7320.06, 61.125 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( 2224.68, 104.286, 155.125 ); + ent.v["angles"] = ( 336.062, 255.377, -1.77889 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( 2202.63, 108.655, 148.125 ); + ent.v["angles"] = ( 336, 251, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( 2182.71, 167.009, 152.125 ); + ent.v["angles"] = ( 336, 251, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_bulb_xsm" ); + ent.v["origin"] = ( 7144.94, -5606.8, 70.4908 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 13759.9, -1380.82, -92.9938 ); + ent.v["angles"] = ( 314, 229, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 13870.7, -722.317, -222.776 ); + ent.v["angles"] = ( 306, 229, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 13863.9, -341.626, -212.875 ); + ent.v["angles"] = ( 306, 229, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 13808.1, -628.646, -252.875 ); + ent.v["angles"] = ( 298, 229, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 13859.6, -974.169, -94 ); + ent.v["angles"] = ( 326, 229, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 13805.1, -1449.76, -132.375 ); + ent.v["angles"] = ( 317.174, 237.094, 15.7036 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 13558.1, -1418.66, -180.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 13987.6, -365.533, -152.199 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); + ent.v["origin"] = ( 13795.6, -429.569, -188.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( 13819.1, -1026.6, -185.938 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 3.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); + ent.v["origin"] = ( 13763.8, -1373.05, -181.438 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); + ent.v["origin"] = ( 14249.4, -1138.75, -195.847 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); + ent.v["origin"] = ( 13147.5, -1608.93, -198.477 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); + ent.v["origin"] = ( 13355.5, -236.408, -194.069 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( 14144.1, -1050.49, -192.334 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 3.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( 13846.6, -1797.74, -179.776 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 3.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( 13715.6, -740.508, -188.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 3.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( 13280.2, -758.48, -202.824 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 33.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( 11569.6, 7207.64, -627.375 ); + ent.v["angles"] = ( 65, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_spark_blue_lg_loop" ); + ent.v["origin"] = ( 11097.3, 8370.78, -472.312 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_spark_blue_lg_loop" ); + ent.v["origin"] = ( 11065.7, 8350.09, -480.76 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_transformer_on" ); + ent.v["origin"] = ( 11096.1, 8349.73, -498.022 ); + ent.v["angles"] = ( 10.9932, 163.963, -8.38868 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_spark_blue_sm_loop" ); + ent.v["origin"] = ( 11062.9, 8351.89, -475.091 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); + ent.v["origin"] = ( -11249.7, 904.058, 192 ); + ent.v["angles"] = ( 299.251, 356.208, -7.17259 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); + ent.v["origin"] = ( -11060.9, 836.008, 327.885 ); + ent.v["angles"] = ( 299.251, 356.208, -7.17259 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); + ent.v["origin"] = ( -10848.1, 727.41, 262.305 ); + ent.v["angles"] = ( 299.251, 356.208, -7.17259 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( -11453.1, -2704.04, 238 ); + ent.v["angles"] = ( 312.147, 207.959, -4.21566 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( -11447.1, -2717.45, 320 ); + ent.v["angles"] = ( 316.137, 207.551, -3.92308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -11237.1, -2774.08, 205.693 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); + ent.v["origin"] = ( -11065.4, -3093.87, 210.48 ); + ent.v["angles"] = ( 313, 209, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); + ent.v["origin"] = ( -11085.3, -3572.2, 238.785 ); + ent.v["angles"] = ( 323, 209, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); + ent.v["origin"] = ( -10751.6, 548.387, 281.46 ); + ent.v["angles"] = ( 298.016, 48.8707, 1.87996 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); + ent.v["origin"] = ( 11026.4, 8418.04, -452.626 ); + ent.v["angles"] = ( 319, 238, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); + ent.v["origin"] = ( 11047.5, 8544.31, -407.409 ); + ent.v["angles"] = ( 321.972, 238.53, -82.3373 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); + ent.v["origin"] = ( 10965.8, 8541.46, -361.01 ); + ent.v["angles"] = ( 319, 232, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); + ent.v["origin"] = ( 10784.7, 8598.1, -382.159 ); + ent.v["angles"] = ( 312, 253, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); + ent.v["origin"] = ( 11284.5, 8803.95, -209.321 ); + ent.v["angles"] = ( 71.1934, 180.803, -87.4102 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); + ent.v["origin"] = ( 10895.9, 8866.25, -196.195 ); + ent.v["angles"] = ( 73, 258, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); + ent.v["origin"] = ( 10781.7, 8702.04, -222.415 ); + ent.v["angles"] = ( 88, 267, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); + ent.v["origin"] = ( 10799.1, 8575.29, -500.938 ); + ent.v["angles"] = ( 79, 87, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); + ent.v["origin"] = ( 10979.3, 8831.12, -420.153 ); + ent.v["angles"] = ( 73, 267, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( 7976.72, -4577.1, 193.859 ); + ent.v["angles"] = ( 18.9006, 87.1581, -14.8078 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 8107.3, -4901.58, 390.125 ); + ent.v["angles"] = ( 322.027, 247.537, -1.56188 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 8254.05, -4975.36, 463.125 ); + ent.v["angles"] = ( 322.434, 234.888, 6.2056 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 8194.13, -4983.58, 441.125 ); + ent.v["angles"] = ( 322.109, 239.929, 3.1195 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 8249.4, -4832.61, 434.125 ); + ent.v["angles"] = ( 322, 245, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 8226.89, -5241.31, 421.125 ); + ent.v["angles"] = ( 322, 245, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 8046.06, -4860.87, 413.125 ); + ent.v["angles"] = ( 322.677, 257.613, -7.72609 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 635.54, 407.845, 91.125 ); + ent.v["angles"] = ( 16, 71, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 628.125, 406.734, 43.7233 ); + ent.v["angles"] = ( 3, 71, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 638.811, 426.54, -18.875 ); + ent.v["angles"] = ( 349, 71, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 784.565, 726.997, -33.8978 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 811.849, 729.36, -35.0041 ); + ent.v["angles"] = ( 0, 270, -2 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( 942.825, 799.82, -52.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 223.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_river" ); + ent.v["origin"] = ( -1148.16, -1138.11, -41.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 80.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_river" ); + ent.v["origin"] = ( -2664.01, -1345.03, -346.451 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 104.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_river" ); + ent.v["origin"] = ( -2674.54, 433.639, -359.784 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_river" ); + ent.v["origin"] = ( -1124.75, 259.523, -48.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 69.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -863.312, -745.248, -48.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -1196.8, -787.911, -47.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -1381.38, -46.0962, -47.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_river" ); + ent.v["origin"] = ( -2645.12, 9.70624, -357.904 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_river" ); + ent.v["origin"] = ( -2719.28, -285.725, -334.581 ); + ent.v["angles"] = ( 1, 87, 3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_river" ); + ent.v["origin"] = ( -2685.84, -997.132, -346.559 ); + ent.v["angles"] = ( 358.157, 83.9017, 1.94423 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_smoke_tall" ); + ent.v["origin"] = ( -2770.44, -707.874, -115.875 ); + ent.v["angles"] = ( 12, 275, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 150; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_smoke_tall" ); + ent.v["origin"] = ( -2778.19, -155.061, -94.875 ); + ent.v["angles"] = ( 29, 80, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 150; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); + ent.v["origin"] = ( -2291.93, -758.164, -101.161 ); + ent.v["angles"] = ( 11, 214, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); + ent.v["origin"] = ( -1255.13, -1277.79, -34.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 83.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_river" ); + ent.v["origin"] = ( -2742.09, -665.677, -333.1 ); + ent.v["angles"] = ( 1, 87, 3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -1508.17, -320.626, -58.369 ); + ent.v["angles"] = ( 355, 187, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -1452.09, -720.211, -60.0286 ); + ent.v["angles"] = ( 359.993, 186.739, -2.98858 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -1415.76, -1177.25, -62.1707 ); + ent.v["angles"] = ( 356.67, 156.949, -0.497783 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -704.822, -246.538, -58.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 22.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -779.445, -1098.9, -61.8023 ); + ent.v["angles"] = ( 0.993918, 9.99335, -0.738612 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -699.587, -705.189, -57.1237 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 345.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -1140.42, -15.2616, -48.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -1273.82, -1205.47, -42.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -2204.13, -5739.66, -80.9468 ); + ent.v["angles"] = ( 7, 307, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -1994.56, -5882.45, -95.6035 ); + ent.v["angles"] = ( 7, 307, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -1875.72, -6466.37, -98.9131 ); + ent.v["angles"] = ( 7, 307, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -1610.46, -6120.94, -92.074 ); + ent.v["angles"] = ( 7, 307, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -2214.93, -6067.3, -102.865 ); + ent.v["angles"] = ( 7, 307, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -1708.85, -6610.85, -95.0234 ); + ent.v["angles"] = ( 355.794, 73.794, -4.39947 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -2318.27, -6315.39, -107.815 ); + ent.v["angles"] = ( 353.394, 27.6107, 4.95295 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -1948.05, -6554.84, -111.909 ); + ent.v["angles"] = ( 356.111, 77.7913, -4.68174 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -1528.88, -5886.45, -91.5689 ); + ent.v["angles"] = ( 356.621, 83.7816, -5.0618 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -2024.68, -5586.57, -68.3597 ); + ent.v["angles"] = ( 356.111, 77.7913, -4.68174 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_river" ); + ent.v["origin"] = ( 8336.11, -8461.36, -126.254 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_river" ); + ent.v["origin"] = ( 7440.73, -8528.75, -124.913 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 81.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( 7171.28, -6397.54, -126 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 107.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( 7054.04, -6397.21, -126 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 86.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( 7094.94, -6285.23, -126 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 107.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 8662.38, -5640.09, 124.292 ); + ent.v["angles"] = ( 323, 318, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 8599.65, -5634.21, 153.303 ); + ent.v["angles"] = ( 321.616, 319.338, -39.0353 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 5262.91, 7044.48, 43.9142 ); + ent.v["angles"] = ( 316.21, 262.066, 4.81097 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 5174.93, 7053.13, 41.125 ); + ent.v["angles"] = ( 316.411, 278.687, -6.71217 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_desklamp" ); + ent.v["origin"] = ( -7101.92, 5147.13, -0.163522 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 86.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( -4683.65, -7970.08, 52.9438 ); + ent.v["angles"] = ( 68, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_desklamp" ); + ent.v["origin"] = ( 12139.1, 8505.25, -696.157 ); + ent.v["angles"] = ( 85.685, 136.004, 133.029 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_spark_int_runner" ); + ent.v["origin"] = ( 7967.02, -464.256, 1429.54 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 416; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_spark_int_runner" ); + ent.v["origin"] = ( 7264.27, -458.783, 1045.58 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 305.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 416; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_spark_int_runner" ); + ent.v["origin"] = ( 7964.59, -462.798, 663.232 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 59.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 416; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); + ent.v["origin"] = ( -6365.04, 4578.04, 109.9 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 400; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); + ent.v["origin"] = ( -6365.1, 4578.04, 109.746 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 401; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); + ent.v["origin"] = ( -3946.92, -7250.32, 107.1 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 403; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); + ent.v["origin"] = ( -3946.86, -7250.19, 107 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 402; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); + ent.v["origin"] = ( -45.1183, -5452.09, 92.4005 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 405; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); + ent.v["origin"] = ( -45.2307, -5452.06, 92.5112 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 404; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); + ent.v["origin"] = ( 10160, -1748.7, -45.9436 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 406; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); + ent.v["origin"] = ( 10160.1, -1748.62, -45.9508 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 407; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); + ent.v["origin"] = ( 8133.62, 4787.71, -194.497 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 409; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); + ent.v["origin"] = ( 8133.65, 4787.75, -194.479 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 408; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); + ent.v["origin"] = ( 6301.07, 5079.12, 67.4271 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 410; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); + ent.v["origin"] = ( 6300.89, 5078.98, 67.4032 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 411; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); + ent.v["origin"] = ( -627.359, -615.075, 116.432 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 412; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); + ent.v["origin"] = ( -627.572, -615.202, 116.432 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 413; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); + ent.v["origin"] = ( -4418.11, -626.9, 192.003 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 415; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); + ent.v["origin"] = ( -4418.04, -626.987, 191.91 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 414; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( -6917.44, 3891.27, 81.125 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -9032.52, 4222.59, 40.0809 ); + ent.v["angles"] = ( 0.716713, 61.9889, -1.86754 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_creek" ); + ent.v["origin"] = ( 11131.7, 8831.49, -894.668 ); + ent.v["angles"] = ( 81.0228, 227.719, -27.4136 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_smoke_pit" ); + ent.v["origin"] = ( 10945.1, 8621.79, -1116.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_creek" ); + ent.v["origin"] = ( 11178.6, 8859.45, -715.452 ); + ent.v["angles"] = ( 63.6007, 216.198, -13.3547 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_creek" ); + ent.v["origin"] = ( 10953.1, 8914.32, -688.637 ); + ent.v["angles"] = ( 53.9874, 292.702, 1.41178 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_creek" ); + ent.v["origin"] = ( 10983, 8838.08, -841.275 ); + ent.v["angles"] = ( 66.6739, 293.054, 17.3617 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_creek" ); + ent.v["origin"] = ( 10999, 8819.35, -930.992 ); + ent.v["angles"] = ( 74.6464, 318.518, 15.5448 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_smoke_pit" ); + ent.v["origin"] = ( 11118.6, 8507.76, -1176.88 ); + ent.v["angles"] = ( 340, 61, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( 1417.38, -341.936, -67.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_flicker" ); + ent.v["origin"] = ( 1927.64, -1060.33, 131.881 ); + ent.v["angles"] = ( 67, 269.911, 87.9181 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_callbacksetup.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_callbacksetup.gsc new file mode 100644 index 0000000..66a5537 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_callbacksetup.gsc @@ -0,0 +1,215 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\_audio; +#include maps\mp\gametypes_zm\_globallogic; +#include maps\mp\gametypes_zm\_globallogic_player; +#include maps\mp\gametypes_zm\_globallogic_actor; +#include maps\mp\gametypes_zm\_hostmigration; + +codecallback_startgametype() +{ + if ( !isdefined( level.gametypestarted ) || !level.gametypestarted ) + { + [[ level.callbackstartgametype ]](); + level.gametypestarted = 1; + } +} + +codecallback_finalizeinitialization() +{ + maps\mp\_utility::callback( "on_finalize_initialization" ); +} + +codecallback_playerconnect() +{ + self endon( "disconnect" ); + self thread maps\mp\_audio::monitor_player_sprint(); + [[ level.callbackplayerconnect ]](); +} + +codecallback_playerdisconnect() +{ + self notify( "disconnect" ); + client_num = self getentitynumber(); + [[ level.callbackplayerdisconnect ]](); +} + +codecallback_hostmigration() +{ +/# + println( "****CodeCallback_HostMigration****" ); +#/ + [[ level.callbackhostmigration ]](); +} + +codecallback_hostmigrationsave() +{ +/# + println( "****CodeCallback_HostMigrationSave****" ); +#/ + [[ level.callbackhostmigrationsave ]](); +} + +codecallback_prehostmigrationsave() +{ +/# + println( "****CodeCallback_PreHostMigrationSave****" ); +#/ + [[ level.callbackprehostmigrationsave ]](); +} + +codecallback_playermigrated() +{ +/# + println( "****CodeCallback_PlayerMigrated****" ); +#/ + [[ level.callbackplayermigrated ]](); +} + +codecallback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) +{ + self endon( "disconnect" ); + [[ level.callbackplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ); +} + +codecallback_playerkilled( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ) +{ + self endon( "disconnect" ); + [[ level.callbackplayerkilled ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ); +} + +codecallback_playerlaststand( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ) +{ + self endon( "disconnect" ); + [[ level.callbackplayerlaststand ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ); +} + +codecallback_playermelee( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit ) +{ + self endon( "disconnect" ); + [[ level.callbackplayermelee ]]( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit ); +} + +codecallback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) +{ + [[ level.callbackactordamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ); +} + +codecallback_actorkilled( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset ) +{ + [[ level.callbackactorkilled ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset ); +} + +codecallback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, damagefromunderneath, modelindex, partname ) +{ + [[ level.callbackvehicledamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, damagefromunderneath, modelindex, partname ); +} + +codecallback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, timeoffset ) +{ + +} + +codecallback_faceeventnotify( notify_msg, ent ) +{ + if ( isdefined( ent ) && isdefined( ent.do_face_anims ) && ent.do_face_anims ) + { + if ( isdefined( level.face_event_handler ) && isdefined( level.face_event_handler.events[notify_msg] ) ) + ent sendfaceevent( level.face_event_handler.events[notify_msg] ); + } +} + +codecallback_menuresponse( action, arg ) +{ + if ( !isdefined( level.menuresponsequeue ) ) + { + level.menuresponsequeue = []; + level thread menuresponsequeuepump(); + } + + index = level.menuresponsequeue.size; + level.menuresponsequeue[index] = spawnstruct(); + level.menuresponsequeue[index].action = action; + level.menuresponsequeue[index].arg = arg; + level.menuresponsequeue[index].ent = self; + level notify( "menuresponse_queue" ); +} + +menuresponsequeuepump() +{ + while ( true ) + { + level waittill( "menuresponse_queue" ); + + do + { + level.menuresponsequeue[0].ent notify( "menuresponse", level.menuresponsequeue[0].action, level.menuresponsequeue[0].arg ); + arrayremoveindex( level.menuresponsequeue, 0, 0 ); + wait 0.05; + } + while ( level.menuresponsequeue.size > 0 ); + } +} + +setupcallbacks() +{ + setdefaultcallbacks(); + level.idflags_radius = 1; + level.idflags_no_armor = 2; + level.idflags_no_knockback = 4; + level.idflags_penetration = 8; + level.idflags_destructible_entity = 16; + level.idflags_shield_explosive_impact = 32; + level.idflags_shield_explosive_impact_huge = 64; + level.idflags_shield_explosive_splash = 128; + level.idflags_no_team_protection = 256; + level.idflags_no_protection = 512; + level.idflags_passthru = 1024; +} + +setdefaultcallbacks() +{ + level.callbackstartgametype = maps\mp\gametypes_zm\_globallogic::callback_startgametype; + level.callbackplayerconnect = maps\mp\gametypes_zm\_globallogic_player::callback_playerconnect; + level.callbackplayerdisconnect = maps\mp\gametypes_zm\_globallogic_player::callback_playerdisconnect; + level.callbackplayerdamage = maps\mp\gametypes_zm\_globallogic_player::callback_playerdamage; + level.callbackplayerkilled = maps\mp\gametypes_zm\_globallogic_player::callback_playerkilled; + level.callbackplayermelee = maps\mp\gametypes_zm\_globallogic_player::callback_playermelee; + level.callbackplayerlaststand = maps\mp\gametypes_zm\_globallogic_player::callback_playerlaststand; + level.callbackactordamage = maps\mp\gametypes_zm\_globallogic_actor::callback_actordamage; + level.callbackactorkilled = maps\mp\gametypes_zm\_globallogic_actor::callback_actorkilled; + level.callbackplayermigrated = maps\mp\gametypes_zm\_globallogic_player::callback_playermigrated; + level.callbackhostmigration = maps\mp\gametypes_zm\_hostmigration::callback_hostmigration; + level.callbackhostmigrationsave = maps\mp\gametypes_zm\_hostmigration::callback_hostmigrationsave; + level.callbackprehostmigrationsave = maps\mp\gametypes_zm\_hostmigration::callback_prehostmigrationsave; +} + +abortlevel() +{ +/# + println( "ERROR: Aborting level - gametype is not supported" ); +#/ + level.callbackstartgametype = ::callbackvoid; + level.callbackplayerconnect = ::callbackvoid; + level.callbackplayerdisconnect = ::callbackvoid; + level.callbackplayerdamage = ::callbackvoid; + level.callbackplayerkilled = ::callbackvoid; + level.callbackplayermelee = ::callbackvoid; + level.callbackplayerlaststand = ::callbackvoid; + level.callbackactordamage = ::callbackvoid; + level.callbackactorkilled = ::callbackvoid; + level.callbackvehicledamage = ::callbackvoid; + setdvar( "g_gametype", "dm" ); + exitlevel( 0 ); +} + +codecallback_glasssmash( pos, dir ) +{ + level notify( "glass_smash", pos, dir ); +} + +callbackvoid() +{ + +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_clientids.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_clientids.gsc new file mode 100644 index 0000000..7611d6b --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_clientids.gsc @@ -0,0 +1,19 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +init() +{ + level.clientid = 0; + level thread onplayerconnect(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player.clientid = level.clientid; + level.clientid++; + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_damagefeedback.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_damagefeedback.gsc new file mode 100644 index 0000000..0b61988 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_damagefeedback.gsc @@ -0,0 +1,166 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +init() +{ + precacheshader( "damage_feedback" ); + precacheshader( "damage_feedback_flak" ); + precacheshader( "damage_feedback_tac" ); + level thread onplayerconnect(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player.hud_damagefeedback = newdamageindicatorhudelem( player ); + player.hud_damagefeedback.horzalign = "center"; + player.hud_damagefeedback.vertalign = "middle"; + player.hud_damagefeedback.x = -12; + player.hud_damagefeedback.y = -12; + player.hud_damagefeedback.alpha = 0; + player.hud_damagefeedback.archived = 1; + player.hud_damagefeedback setshader( "damage_feedback", 24, 48 ); + player.hitsoundtracker = 1; + } +} + +updatedamagefeedback( mod, inflictor, perkfeedback ) +{ + if ( !isplayer( self ) || sessionmodeiszombiesgame() ) + return; + + if ( isdefined( mod ) && mod != "MOD_CRUSH" && mod != "MOD_GRENADE_SPLASH" && mod != "MOD_HIT_BY_OBJECT" ) + { + if ( isdefined( inflictor ) && isdefined( inflictor.soundmod ) ) + { + switch ( inflictor.soundmod ) + { + case "player": + self thread playhitsound( mod, "mpl_hit_alert" ); + break; + case "heli": + self thread playhitsound( mod, "mpl_hit_alert_air" ); + break; + case "hpm": + self thread playhitsound( mod, "mpl_hit_alert_hpm" ); + break; + case "taser_spike": + self thread playhitsound( mod, "mpl_hit_alert_taser_spike" ); + break; + case "straferun": + case "dog": + break; + case "default_loud": + self thread playhitsound( mod, "mpl_hit_heli_gunner" ); + break; + default: + self thread playhitsound( mod, "mpl_hit_alert_low" ); + break; + } + } + else + self thread playhitsound( mod, "mpl_hit_alert_low" ); + } + + if ( isdefined( perkfeedback ) ) + { + switch ( perkfeedback ) + { + case "flakjacket": + self.hud_damagefeedback setshader( "damage_feedback_flak", 24, 48 ); + break; + case "tacticalMask": + self.hud_damagefeedback setshader( "damage_feedback_tac", 24, 48 ); + break; + } + } + else + self.hud_damagefeedback setshader( "damage_feedback", 24, 48 ); + + self.hud_damagefeedback.alpha = 1; + self.hud_damagefeedback fadeovertime( 1 ); + self.hud_damagefeedback.alpha = 0; +} + +playhitsound( mod, alert ) +{ + self endon( "disconnect" ); + + if ( self.hitsoundtracker ) + { + self.hitsoundtracker = 0; + self playlocalsound( alert ); + wait 0.05; + self.hitsoundtracker = 1; + } +} + +updatespecialdamagefeedback( hitent ) +{ + if ( !isplayer( self ) ) + return; + + if ( !isdefined( hitent ) ) + return; + + if ( !isplayer( hitent ) ) + return; + + wait 0.05; + + if ( !isdefined( self.directionalhitarray ) ) + { + self.directionalhitarray = []; + hitentnum = hitent getentitynumber(); + self.directionalhitarray[hitentnum] = 1; + self thread sendhitspecialeventatframeend( hitent ); + } + else + { + hitentnum = hitent getentitynumber(); + self.directionalhitarray[hitentnum] = 1; + } +} + +sendhitspecialeventatframeend( hitent ) +{ + self endon( "disconnect" ); + waittillframeend; + enemyshit = 0; + value = 1; + entbitarray0 = 0; + + for ( i = 0; i < 32; i++ ) + { + if ( isdefined( self.directionalhitarray[i] ) && self.directionalhitarray[i] != 0 ) + { + entbitarray0 += value; + enemyshit++; + } + + value *= 2; + } + + entbitarray1 = 0; + + for ( i = 33; i < 64; i++ ) + { + if ( isdefined( self.directionalhitarray[i] ) && self.directionalhitarray[i] != 0 ) + { + entbitarray1 += value; + enemyshit++; + } + + value *= 2; + } + + if ( enemyshit ) + self directionalhitindicator( entbitarray0, entbitarray1 ); + + self.directionalhitarray = undefined; + entbitarray0 = 0; + entbitarray1 = 0; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_dev.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_dev.gsc new file mode 100644 index 0000000..0dee973 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_dev.gsc @@ -0,0 +1,90 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; + +init() +{ +/# + for (;;) + { + updatedevsettingszm(); + wait 0.5; + } +#/ +} + +updatedevsettingszm() +{ +/# + if ( level.players.size > 0 ) + { + if ( getdvar( "r_streamDumpDistance" ) == "3" ) + { + if ( !isdefined( level.streamdumpteamindex ) ) + level.streamdumpteamindex = 0; + else + level.streamdumpteamindex++; + + numpoints = 0; + spawnpoints = []; + location = level.scr_zm_map_start_location; + + if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) ) + location = level.default_start_location; + + match_string = level.scr_zm_ui_gametype + "_" + location; + + if ( level.streamdumpteamindex < level.teams.size ) + { + structs = getstructarray( "initial_spawn", "script_noteworthy" ); + + if ( isdefined( structs ) ) + { + foreach ( struct in structs ) + { + if ( isdefined( struct.script_string ) ) + { + tokens = strtok( struct.script_string, " " ); + + foreach ( token in tokens ) + { + if ( token == match_string ) + spawnpoints[spawnpoints.size] = struct; + } + } + } + } + + if ( !isdefined( spawnpoints ) || spawnpoints.size == 0 ) + spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); + + if ( isdefined( spawnpoints ) ) + numpoints = spawnpoints.size; + } + + if ( numpoints == 0 ) + { + setdvar( "r_streamDumpDistance", "0" ); + level.streamdumpteamindex = -1; + } + else + { + averageorigin = ( 0, 0, 0 ); + averageangles = ( 0, 0, 0 ); + + foreach ( spawnpoint in spawnpoints ) + { + averageorigin += spawnpoint.origin / numpoints; + averageangles += spawnpoint.angles / numpoints; + } + + level.players[0] setplayerangles( averageangles ); + level.players[0] setorigin( averageorigin ); + wait 0.05; + setdvar( "r_streamDumpDistance", "2" ); + } + } + } +#/ +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_gameobjects.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_gameobjects.gsc new file mode 100644 index 0000000..a5d4059 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_gameobjects.gsc @@ -0,0 +1,2374 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\gametypes_zm\_weapons; +#include maps\mp\gametypes_zm\_hostmigration; +#include maps\mp\gametypes_zm\_tweakables; + +main( allowed ) +{ + level.vehiclesenabled = getgametypesetting( "vehiclesEnabled" ); + level.vehiclestimed = getgametypesetting( "vehiclesTimed" ); + level.objectivepingdelay = getgametypesetting( "objectivePingTime" ); + level.nonteambasedteam = "allies"; +/# + if ( level.script == "mp_vehicle_test" ) + level.vehiclesenabled = 1; +#/ + if ( level.vehiclesenabled ) + { + allowed[allowed.size] = "vehicle"; + filter_script_vehicles_from_vehicle_descriptors( allowed ); + } + + entities = getentarray(); + + for ( entity_index = entities.size - 1; entity_index >= 0; entity_index-- ) + { + entity = entities[entity_index]; + + if ( !entity_is_allowed( entity, allowed ) ) + entity delete(); + } +} + +entity_is_allowed( entity, allowed_game_modes ) +{ + if ( isdefined( level.createfx_enabled ) && level.createfx_enabled ) + return 1; + + allowed = 1; + + if ( isdefined( entity.script_gameobjectname ) && entity.script_gameobjectname != "[all_modes]" ) + { + allowed = 0; + gameobjectnames = strtok( entity.script_gameobjectname, " " ); + + for ( i = 0; i < allowed_game_modes.size && !allowed; i++ ) + { + for ( j = 0; j < gameobjectnames.size && !allowed; j++ ) + allowed = gameobjectnames[j] == allowed_game_modes[i]; + } + } + + return allowed; +} + +location_is_allowed( entity, location ) +{ + allowed = 1; + location_list = undefined; + + if ( isdefined( entity.script_noteworthy ) ) + location_list = entity.script_noteworthy; + + if ( isdefined( entity.script_location ) ) + location_list = entity.script_location; + + if ( isdefined( location_list ) ) + { + if ( location_list == "[all_modes]" ) + allowed = 1; + else + { + allowed = 0; + gameobjectlocations = strtok( location_list, " " ); + + for ( j = 0; j < gameobjectlocations.size; j++ ) + { + if ( gameobjectlocations[j] == location ) + { + allowed = 1; + break; + } + } + } + } + + return allowed; +} + +filter_script_vehicles_from_vehicle_descriptors( allowed_game_modes ) +{ + vehicle_descriptors = getentarray( "vehicle_descriptor", "targetname" ); + script_vehicles = getentarray( "script_vehicle", "classname" ); + vehicles_to_remove = []; + + for ( descriptor_index = 0; descriptor_index < vehicle_descriptors.size; descriptor_index++ ) + { + descriptor = vehicle_descriptors[descriptor_index]; + closest_distance_sq = 1000000000000.0; + closest_vehicle = undefined; + + for ( vehicle_index = 0; vehicle_index < script_vehicles.size; vehicle_index++ ) + { + vehicle = script_vehicles[vehicle_index]; + dsquared = distancesquared( vehicle getorigin(), descriptor getorigin() ); + + if ( dsquared < closest_distance_sq ) + { + closest_distance_sq = dsquared; + closest_vehicle = vehicle; + } + } + + if ( isdefined( closest_vehicle ) ) + { + if ( !entity_is_allowed( descriptor, allowed_game_modes ) ) + vehicles_to_remove[vehicles_to_remove.size] = closest_vehicle; + } + } + + for ( vehicle_index = 0; vehicle_index < vehicles_to_remove.size; vehicle_index++ ) + vehicles_to_remove[vehicle_index] delete(); +} + +init() +{ + level.numgametypereservedobjectives = 0; + level.releasedobjectives = []; + + if ( !sessionmodeiszombiesgame() ) + { + precacheitem( "briefcase_bomb_mp" ); + precacheitem( "briefcase_bomb_defuse_mp" ); + } + + level thread onplayerconnect(); +} + +onplayerconnect() +{ + level endon( "game_ended" ); + + for (;;) + { + level waittill( "connecting", player ); + + player thread onplayerspawned(); + player thread ondisconnect(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + level endon( "game_ended" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread ondeath(); + self.touchtriggers = []; + self.carryobject = undefined; + self.claimtrigger = undefined; + self.canpickupobject = 1; + self.disabledweapon = 0; + self.killedinuse = undefined; + } +} + +ondeath() +{ + level endon( "game_ended" ); + self endon( "spawned_player" ); + + self waittill( "death" ); + + if ( isdefined( self.carryobject ) ) + self.carryobject thread setdropped(); +} + +ondisconnect() +{ + level endon( "game_ended" ); + + self waittill( "disconnect" ); + + if ( isdefined( self.carryobject ) ) + self.carryobject thread setdropped(); +} + +createcarryobject( ownerteam, trigger, visuals, offset, objectivename ) +{ + carryobject = spawnstruct(); + carryobject.type = "carryObject"; + carryobject.curorigin = trigger.origin; + carryobject.ownerteam = ownerteam; + carryobject.entnum = trigger getentitynumber(); + + if ( issubstr( trigger.classname, "use" ) ) + carryobject.triggertype = "use"; + else + carryobject.triggertype = "proximity"; + + trigger.baseorigin = trigger.origin; + carryobject.trigger = trigger; + carryobject.useweapon = undefined; + + if ( !isdefined( offset ) ) + offset = ( 0, 0, 0 ); + + carryobject.offset3d = offset; + carryobject.newstyle = 0; + + if ( isdefined( objectivename ) ) + carryobject.newstyle = 1; + else + objectivename = &""; + + for ( index = 0; index < visuals.size; index++ ) + { + visuals[index].baseorigin = visuals[index].origin; + visuals[index].baseangles = visuals[index].angles; + } + + carryobject.visuals = visuals; + carryobject.compassicons = []; + carryobject.objid = []; + + if ( !carryobject.newstyle ) + { + foreach ( team in level.teams ) + carryobject.objid[team] = getnextobjid(); + } + + carryobject.objidpingfriendly = 0; + carryobject.objidpingenemy = 0; + level.objidstart += 2; + carryobject.objectiveid = getnextobjid(); + objective_add( carryobject.objectiveid, "invisible", carryobject.curorigin, objectivename ); + carryobject.carrier = undefined; + carryobject.isresetting = 0; + carryobject.interactteam = "none"; + carryobject.allowweapons = 0; + carryobject.visiblecarriermodel = undefined; + carryobject.worldicons = []; + carryobject.carriervisible = 0; + carryobject.visibleteam = "none"; + carryobject.worldiswaypoint = []; + carryobject.carryicon = undefined; + carryobject.ondrop = undefined; + carryobject.onpickup = undefined; + carryobject.onreset = undefined; + + if ( carryobject.triggertype == "use" ) + carryobject thread carryobjectusethink(); + else + carryobject thread carryobjectproxthink(); + + carryobject thread updatecarryobjectorigin(); + carryobject thread updatecarryobjectobjectiveorigin(); + return carryobject; +} + +carryobjectusethink() +{ + level endon( "game_ended" ); + self.trigger endon( "destroyed" ); + + while ( true ) + { + self.trigger waittill( "trigger", player ); + + if ( self.isresetting ) + continue; + + if ( !isalive( player ) ) + continue; + + if ( isdefined( player.laststand ) && player.laststand ) + continue; + + if ( !self caninteractwith( player ) ) + continue; + + if ( !player.canpickupobject ) + continue; + + if ( player.throwinggrenade ) + continue; + + if ( isdefined( self.carrier ) ) + continue; + + if ( player isinvehicle() ) + continue; + + if ( player isweaponviewonlylinked() ) + continue; + + if ( !player istouching( self.trigger ) ) + continue; + + self setpickedup( player ); + } +} + +carryobjectproxthink() +{ + level endon( "game_ended" ); + self.trigger endon( "destroyed" ); + + while ( true ) + { + self.trigger waittill( "trigger", player ); + + if ( self.isresetting ) + continue; + + if ( !isalive( player ) ) + continue; + + if ( isdefined( player.laststand ) && player.laststand ) + continue; + + if ( !self caninteractwith( player ) ) + continue; + + if ( !player.canpickupobject ) + continue; + + if ( player.throwinggrenade ) + continue; + + if ( isdefined( self.carrier ) ) + continue; + + if ( player isinvehicle() ) + continue; + + if ( player isweaponviewonlylinked() ) + continue; + + if ( !player istouching( self.trigger ) ) + continue; + + self setpickedup( player ); + } +} + +pickupobjectdelay( origin ) +{ + level endon( "game_ended" ); + self endon( "death" ); + self endon( "disconnect" ); + self.canpickupobject = 0; + + for (;;) + { + if ( distancesquared( self.origin, origin ) > 4096 ) + break; + + wait 0.2; + } + + self.canpickupobject = 1; +} + +setpickedup( player ) +{ + if ( isdefined( player.carryobject ) ) + { + if ( isdefined( player.carryobject.swappable ) && player.carryobject.swappable ) + player.carryobject thread setdropped(); + else + { + if ( isdefined( self.onpickupfailed ) ) + self [[ self.onpickupfailed ]]( player ); + + return; + } + } + + player giveobject( self ); + self setcarrier( player ); + + for ( index = 0; index < self.visuals.size; index++ ) + self.visuals[index] thread hideobject(); + + self.trigger.origin += vectorscale( ( 0, 0, 1 ), 10000.0 ); + self notify( "pickup_object" ); + + if ( isdefined( self.onpickup ) ) + self [[ self.onpickup ]]( player ); + + self updatecompassicons(); + self updateworldicons(); + self updateobjective(); +} + +hideobject() +{ + radius = 32; + origin = self.origin; + grenades = getentarray( "grenade", "classname" ); + radiussq = radius * radius; + linkedgrenades = []; + linkedgrenadesindex = 0; + self hide(); + + for ( i = 0; i < grenades.size; i++ ) + { + if ( distancesquared( origin, grenades[i].origin ) < radiussq ) + { + if ( grenades[i] islinkedto( self ) ) + { + linkedgrenades[linkedgrenadesindex] = grenades[i]; + linkedgrenades[linkedgrenadesindex] unlink(); + linkedgrenadesindex++; + } + } + } + + self.origin += vectorscale( ( 0, 0, 1 ), 10000.0 ); + waittillframeend; + + for ( i = 0; i < linkedgrenadesindex; i++ ) + linkedgrenades[i] launch( vectorscale( ( 1, 1, 1 ), 5.0 ) ); +} + +updatecarryobjectorigin() +{ + level endon( "game_ended" ); + self.trigger endon( "destroyed" ); + + if ( self.newstyle ) + return; + + objpingdelay = level.objectivepingdelay; + + for (;;) + { + if ( isdefined( self.carrier ) && level.teambased ) + { + self.curorigin = self.carrier.origin + vectorscale( ( 0, 0, 1 ), 75.0 ); + + if ( ( self.visibleteam == "friendly" || self.visibleteam == "any" ) && self.objidpingfriendly ) + { + foreach ( team in level.teams ) + { + if ( self isfriendlyteam( team ) ) + { + if ( self.objpoints[team].isshown ) + { + self.objpoints[team].alpha = self.objpoints[team].basealpha; + self.objpoints[team] fadeovertime( objpingdelay + 1.0 ); + self.objpoints[team].alpha = 0; + } + + objective_position( self.objid[team], self.curorigin ); + } + } + } + + if ( ( self.visibleteam == "enemy" || self.visibleteam == "any" ) && self.objidpingenemy ) + { + if ( !self isfriendlyteam( team ) ) + { + if ( self.objpoints[team].isshown ) + { + self.objpoints[team].alpha = self.objpoints[team].basealpha; + self.objpoints[team] fadeovertime( objpingdelay + 1.0 ); + self.objpoints[team].alpha = 0; + } + + objective_position( self.objid[team], self.curorigin ); + } + } + + self wait_endon( objpingdelay, "dropped", "reset" ); + continue; + } + + if ( isdefined( self.carrier ) ) + { + self.curorigin = self.carrier.origin + vectorscale( ( 0, 0, 1 ), 75.0 ); + wait 0.05; + continue; + } + + wait 0.05; + } +} + +updatecarryobjectobjectiveorigin() +{ + level endon( "game_ended" ); + self.trigger endon( "destroyed" ); + + if ( !self.newstyle ) + return; + + objpingdelay = level.objectivepingdelay; + + for (;;) + { + if ( isdefined( self.carrier ) ) + { + self.curorigin = self.carrier.origin; + objective_position( self.objectiveid, self.curorigin ); + self wait_endon( objpingdelay, "dropped", "reset" ); + continue; + } + + objective_position( self.objectiveid, self.curorigin ); + wait 0.05; + } +} + +giveobject( object ) +{ + assert( !isdefined( self.carryobject ) ); + self.carryobject = object; + self thread trackcarrier(); + + if ( !object.allowweapons ) + { + self _disableweapon(); + self thread manualdropthink(); + } + + self.disallowvehicleusage = 1; + + if ( isdefined( object.visiblecarriermodel ) ) + self maps\mp\gametypes_zm\_weapons::forcestowedweaponupdate(); + + if ( !object.newstyle ) + { + if ( isdefined( object.carryicon ) ) + { + if ( self issplitscreen() ) + { + self.carryicon = createicon( object.carryicon, 35, 35 ); + self.carryicon.x = -130; + self.carryicon.y = -90; + self.carryicon.horzalign = "right"; + self.carryicon.vertalign = "bottom"; + } + else + { + self.carryicon = createicon( object.carryicon, 50, 50 ); + + if ( !object.allowweapons ) + self.carryicon setpoint( "CENTER", "CENTER", 0, 60 ); + else + { + self.carryicon.x = 130; + self.carryicon.y = -60; + self.carryicon.horzalign = "user_left"; + self.carryicon.vertalign = "user_bottom"; + } + } + + self.carryicon.alpha = 0.75; + self.carryicon.hidewhileremotecontrolling = 1; + self.carryicon.hidewheninkillcam = 1; + } + } +} + +returnhome() +{ + self.isresetting = 1; + self notify( "reset" ); + + for ( index = 0; index < self.visuals.size; index++ ) + { + self.visuals[index].origin = self.visuals[index].baseorigin; + self.visuals[index].angles = self.visuals[index].baseangles; + self.visuals[index] show(); + } + + self.trigger.origin = self.trigger.baseorigin; + self.curorigin = self.trigger.origin; + + if ( isdefined( self.onreset ) ) + self [[ self.onreset ]](); + + self clearcarrier(); + updateworldicons(); + updatecompassicons(); + updateobjective(); + self.isresetting = 0; +} + +isobjectawayfromhome() +{ + if ( isdefined( self.carrier ) ) + return true; + + if ( distancesquared( self.trigger.origin, self.trigger.baseorigin ) > 4 ) + return true; + + return false; +} + +setposition( origin, angles ) +{ + self.isresetting = 1; + + for ( index = 0; index < self.visuals.size; index++ ) + { + visual = self.visuals[index]; + visual.origin = origin; + visual.angles = angles; + visual show(); + } + + self.trigger.origin = origin; + self.curorigin = self.trigger.origin; + self clearcarrier(); + updateworldicons(); + updatecompassicons(); + updateobjective(); + self.isresetting = 0; +} + +onplayerlaststand() +{ + if ( isdefined( self.carryobject ) ) + self.carryobject thread setdropped(); +} + +setdropped() +{ + self.isresetting = 1; + self notify( "dropped" ); + startorigin = ( 0, 0, 0 ); + endorigin = ( 0, 0, 0 ); + body = undefined; + + if ( isdefined( self.carrier ) && self.carrier.team != "spectator" ) + { + startorigin = self.carrier.origin + vectorscale( ( 0, 0, 1 ), 20.0 ); + endorigin = self.carrier.origin - vectorscale( ( 0, 0, 1 ), 2000.0 ); + body = self.carrier.body; + self.visuals[0].origin = self.carrier.origin; + } + else + { + startorigin = self.safeorigin + vectorscale( ( 0, 0, 1 ), 20.0 ); + endorigin = self.safeorigin - vectorscale( ( 0, 0, 1 ), 20.0 ); + } + + trace = playerphysicstrace( startorigin, endorigin ); + angletrace = bullettrace( startorigin, endorigin, 0, body ); + droppingplayer = self.carrier; + + if ( isdefined( trace ) ) + { + tempangle = randomfloat( 360 ); + droporigin = trace; + + if ( angletrace["fraction"] < 1 && distance( angletrace["position"], trace ) < 10.0 ) + { + forward = ( cos( tempangle ), sin( tempangle ), 0 ); + forward = vectornormalize( forward - vectorscale( angletrace["normal"], vectordot( forward, angletrace["normal"] ) ) ); + dropangles = vectortoangles( forward ); + } + else + dropangles = ( 0, tempangle, 0 ); + + for ( index = 0; index < self.visuals.size; index++ ) + { + self.visuals[index].origin = droporigin; + self.visuals[index].angles = dropangles; + self.visuals[index] show(); + } + + self.trigger.origin = droporigin; + self.curorigin = self.trigger.origin; + self thread pickuptimeout( trace[2], startorigin[2] ); + } + else + { + for ( index = 0; index < self.visuals.size; index++ ) + { + self.visuals[index].origin = self.visuals[index].baseorigin; + self.visuals[index].angles = self.visuals[index].baseangles; + self.visuals[index] show(); + } + + self.trigger.origin = self.trigger.baseorigin; + self.curorigin = self.trigger.baseorigin; + } + + if ( isdefined( self.ondrop ) ) + self [[ self.ondrop ]]( droppingplayer ); + + self clearcarrier(); + self updatecompassicons(); + self updateworldicons(); + self updateobjective(); + self.isresetting = 0; +} + +setcarrier( carrier ) +{ + self.carrier = carrier; + objective_setplayerusing( self.objectiveid, carrier ); + self thread updatevisibilityaccordingtoradar(); +} + +clearcarrier() +{ + if ( !isdefined( self.carrier ) ) + return; + + self.carrier takeobject( self ); + objective_clearplayerusing( self.objectiveid, self.carrier ); + self.carrier = undefined; + self notify( "carrier_cleared" ); +} + +shouldbereset( minz, maxz ) +{ + minetriggers = getentarray( "minefield", "targetname" ); + hurttriggers = getentarray( "trigger_hurt", "classname" ); + elevators = getentarray( "script_elevator", "targetname" ); + + for ( index = 0; index < minetriggers.size; index++ ) + { + if ( self.visuals[0] istouchingswept( minetriggers[index], minz, maxz ) ) + return true; + } + + for ( index = 0; index < hurttriggers.size; index++ ) + { + if ( self.visuals[0] istouchingswept( hurttriggers[index], minz, maxz ) ) + return true; + } + + for ( index = 0; index < elevators.size; index++ ) + { + assert( isdefined( elevators[index].occupy_volume ) ); + + if ( self.visuals[0] istouchingswept( elevators[index].occupy_volume, minz, maxz ) ) + return true; + } + + return false; +} + +pickuptimeout( minz, maxz ) +{ + self endon( "pickup_object" ); + self endon( "stop_pickup_timeout" ); + wait 0.05; + + if ( self shouldbereset( minz, maxz ) ) + { + self returnhome(); + return; + } + + if ( isdefined( self.autoresettime ) ) + { + wait( self.autoresettime ); + + if ( !isdefined( self.carrier ) ) + self returnhome(); + } +} + +takeobject( object ) +{ + if ( isdefined( self.carryicon ) ) + self.carryicon destroyelem(); + + if ( isdefined( object.visiblecarriermodel ) ) + self maps\mp\gametypes_zm\_weapons::detach_all_weapons(); + + self.carryobject = undefined; + + if ( !isalive( self ) ) + return; + + self notify( "drop_object" ); + self.disallowvehicleusage = 0; + + if ( object.triggertype == "proximity" ) + self thread pickupobjectdelay( object.trigger.origin ); + + if ( isdefined( object.visiblecarriermodel ) ) + self maps\mp\gametypes_zm\_weapons::forcestowedweaponupdate(); + + if ( !object.allowweapons ) + self _enableweapon(); +} + +trackcarrier() +{ + level endon( "game_ended" ); + self endon( "disconnect" ); + self endon( "death" ); + self endon( "drop_object" ); + + while ( isdefined( self.carryobject ) && isalive( self ) ) + { + if ( self isonground() ) + { + trace = bullettrace( self.origin + vectorscale( ( 0, 0, 1 ), 20.0 ), self.origin - vectorscale( ( 0, 0, 1 ), 20.0 ), 0, undefined ); + + if ( trace["fraction"] < 1 ) + self.carryobject.safeorigin = trace["position"]; + } + + wait 0.05; + } +} + +manualdropthink() +{ + level endon( "game_ended" ); + self endon( "disconnect" ); + self endon( "death" ); + self endon( "drop_object" ); + + for (;;) + { + while ( self attackbuttonpressed() || self fragbuttonpressed() || self secondaryoffhandbuttonpressed() || self meleebuttonpressed() ) + wait 0.05; + + while ( !self attackbuttonpressed() && !self fragbuttonpressed() && !self secondaryoffhandbuttonpressed() && !self meleebuttonpressed() ) + wait 0.05; + + if ( isdefined( self.carryobject ) && !self usebuttonpressed() ) + self.carryobject thread setdropped(); + } +} + +createuseobject( ownerteam, trigger, visuals, offset, objectivename ) +{ + useobject = spawnstruct(); + useobject.type = "useObject"; + useobject.curorigin = trigger.origin; + useobject.ownerteam = ownerteam; + useobject.entnum = trigger getentitynumber(); + useobject.keyobject = undefined; + + if ( issubstr( trigger.classname, "use" ) ) + useobject.triggertype = "use"; + else + useobject.triggertype = "proximity"; + + useobject.trigger = trigger; + + for ( index = 0; index < visuals.size; index++ ) + { + visuals[index].baseorigin = visuals[index].origin; + visuals[index].baseangles = visuals[index].angles; + } + + useobject.visuals = visuals; + + if ( !isdefined( offset ) ) + offset = ( 0, 0, 0 ); + + useobject.offset3d = offset; + useobject.newstyle = 0; + + if ( isdefined( objectivename ) ) + useobject.newstyle = 1; + else + objectivename = &""; + + useobject.compassicons = []; + useobject.objid = []; + + if ( !useobject.newstyle ) + { + foreach ( team in level.teams ) + useobject.objid[team] = getnextobjid(); + + if ( level.teambased ) + { + foreach ( team in level.teams ) + { + objective_add( useobject.objid[team], "invisible", useobject.curorigin ); + objective_team( useobject.objid[team], team ); + } + } + else + objective_add( useobject.objid[level.nonteambasedteam], "invisible", useobject.curorigin ); + } + + useobject.objectiveid = getnextobjid(); + objective_add( useobject.objectiveid, "invisible", useobject.curorigin, objectivename ); + useobject.interactteam = "none"; + useobject.worldicons = []; + useobject.visibleteam = "none"; + useobject.worldiswaypoint = []; + useobject.onuse = undefined; + useobject.oncantuse = undefined; + useobject.usetext = "default"; + useobject.usetime = 10000; + useobject clearprogress(); + useobject.decayprogress = 0; + + if ( useobject.triggertype == "proximity" ) + { + useobject.numtouching["neutral"] = 0; + useobject.numtouching["none"] = 0; + useobject.touchlist["neutral"] = []; + useobject.touchlist["none"] = []; + + foreach ( team in level.teams ) + { + useobject.numtouching[team] = 0; + useobject.touchlist[team] = []; + } + + useobject.userate = 0; + useobject.claimteam = "none"; + useobject.claimplayer = undefined; + useobject.lastclaimteam = "none"; + useobject.lastclaimtime = 0; + useobject.claimgraceperiod = 1.0; + useobject.mustmaintainclaim = 0; + useobject.cancontestclaim = 0; + useobject thread useobjectproxthink(); + } + else + { + useobject.userate = 1; + useobject thread useobjectusethink(); + } + + return useobject; +} + +setkeyobject( object ) +{ + if ( !isdefined( object ) ) + { + self.keyobject = undefined; + return; + } + + if ( !isdefined( self.keyobject ) ) + self.keyobject = []; + + self.keyobject[self.keyobject.size] = object; +} + +haskeyobject( use ) +{ + for ( x = 0; x < use.keyobject.size; x++ ) + { + if ( isdefined( self.carryobject ) && isdefined( use.keyobject[x] ) && self.carryobject == use.keyobject[x] ) + return true; + } + + return false; +} + +useobjectusethink() +{ + level endon( "game_ended" ); + self.trigger endon( "destroyed" ); + + while ( true ) + { + self.trigger waittill( "trigger", player ); + + if ( !isalive( player ) ) + continue; + + if ( !self caninteractwith( player ) ) + continue; + + if ( !player isonground() ) + continue; + + if ( player isinvehicle() ) + continue; + + if ( isdefined( self.keyobject ) && ( !isdefined( player.carryobject ) || !player haskeyobject( self ) ) ) + { + if ( isdefined( self.oncantuse ) ) + self [[ self.oncantuse ]]( player ); + + continue; + } + + result = 1; + + if ( self.usetime > 0 ) + { + if ( isdefined( self.onbeginuse ) ) + self [[ self.onbeginuse ]]( player ); + + team = player.pers["team"]; + result = self useholdthink( player ); + + if ( isdefined( self.onenduse ) ) + self [[ self.onenduse ]]( team, player, result ); + } + + if ( !result ) + continue; + + if ( isdefined( self.onuse ) ) + self [[ self.onuse ]]( player ); + } +} + +getearliestclaimplayer() +{ + assert( self.claimteam != "none" ); + team = self.claimteam; + earliestplayer = self.claimplayer; + + if ( self.touchlist[team].size > 0 ) + { + earliesttime = undefined; + players = getarraykeys( self.touchlist[team] ); + + for ( index = 0; index < players.size; index++ ) + { + touchdata = self.touchlist[team][players[index]]; + + if ( !isdefined( earliesttime ) || touchdata.starttime < earliesttime ) + { + earliestplayer = touchdata.player; + earliesttime = touchdata.starttime; + } + } + } + + return earliestplayer; +} + +useobjectproxthink() +{ + level endon( "game_ended" ); + self.trigger endon( "destroyed" ); + self thread proxtriggerthink(); + + while ( true ) + { + if ( self.usetime && self.curprogress >= self.usetime ) + { + self clearprogress(); + creditplayer = getearliestclaimplayer(); + + if ( isdefined( self.onenduse ) ) + self [[ self.onenduse ]]( self getclaimteam(), creditplayer, isdefined( creditplayer ) ); + + if ( isdefined( creditplayer ) && isdefined( self.onuse ) ) + self [[ self.onuse ]]( creditplayer ); + + self setclaimteam( "none" ); + self.claimplayer = undefined; + } + + if ( self.claimteam != "none" ) + { + if ( self useobjectlockedforteam( self.claimteam ) ) + { + if ( isdefined( self.onenduse ) ) + self [[ self.onenduse ]]( self getclaimteam(), self.claimplayer, 0 ); + + self setclaimteam( "none" ); + self.claimplayer = undefined; + self clearprogress(); + } + else if ( self.usetime ) + { + if ( self.decayprogress && !self.numtouching[self.claimteam] ) + { + if ( isdefined( self.claimplayer ) ) + { + if ( isdefined( self.onenduse ) ) + self [[ self.onenduse ]]( self getclaimteam(), self.claimplayer, 0 ); + + self.claimplayer = undefined; + } + + decayscale = 0; + + if ( self.decaytime ) + decayscale = self.usetime / self.decaytime; + + self.curprogress -= 50 * self.userate * decayscale; + + if ( self.curprogress <= 0 ) + self clearprogress(); + + self updatecurrentprogress(); + + if ( isdefined( self.onuseupdate ) ) + self [[ self.onuseupdate ]]( self getclaimteam(), self.curprogress / self.usetime, 50 * self.userate * decayscale / self.usetime ); + + if ( self.curprogress == 0 ) + self setclaimteam( "none" ); + } + else if ( !self.numtouching[self.claimteam] ) + { + if ( isdefined( self.onenduse ) ) + self [[ self.onenduse ]]( self getclaimteam(), self.claimplayer, 0 ); + + self setclaimteam( "none" ); + self.claimplayer = undefined; + } + else + { + self.curprogress += 50 * self.userate; + self updatecurrentprogress(); + + if ( isdefined( self.onuseupdate ) ) + self [[ self.onuseupdate ]]( self getclaimteam(), self.curprogress / self.usetime, 50 * self.userate / self.usetime ); + } + } + else if ( !self.mustmaintainclaim ) + { + if ( isdefined( self.onuse ) ) + self [[ self.onuse ]]( self.claimplayer ); + + if ( !self.mustmaintainclaim ) + { + self setclaimteam( "none" ); + self.claimplayer = undefined; + } + } + else if ( !self.numtouching[self.claimteam] ) + { + if ( isdefined( self.onunoccupied ) ) + self [[ self.onunoccupied ]](); + + self setclaimteam( "none" ); + self.claimplayer = undefined; + } + else if ( self.cancontestclaim ) + { + numother = getnumtouchingexceptteam( self.claimteam ); + + if ( numother > 0 ) + { + if ( isdefined( self.oncontested ) ) + self [[ self.oncontested ]](); + + self setclaimteam( "none" ); + self.claimplayer = undefined; + } + } + } + else if ( self.curprogress > 0 && gettime() - self.lastclaimtime > self.claimgraceperiod * 1000 ) + self clearprogress(); + + wait 0.05; + maps\mp\gametypes_zm\_hostmigration::waittillhostmigrationdone(); + } +} + +useobjectlockedforteam( team ) +{ + if ( isdefined( self.teamlock ) && isdefined( level.teams[team] ) ) + return self.teamlock[team]; + + return 0; +} + +canclaim( player ) +{ + if ( self.cancontestclaim ) + { + numother = getnumtouchingexceptteam( player.pers["team"] ); + + if ( numother != 0 ) + return false; + } + + if ( !isdefined( self.keyobject ) || isdefined( player.carryobject ) && player haskeyobject( self ) ) + return true; + + return false; +} + +proxtriggerthink() +{ + level endon( "game_ended" ); + self.trigger endon( "destroyed" ); + entitynumber = self.entnum; + + while ( true ) + { + self.trigger waittill( "trigger", player ); + + if ( !isalive( player ) || self useobjectlockedforteam( player.pers["team"] ) ) + continue; + + if ( player isinvehicle() ) + continue; + + if ( player isweaponviewonlylinked() ) + continue; + + if ( self caninteractwith( player ) && self.claimteam == "none" ) + { + if ( self canclaim( player ) ) + { + setclaimteam( player.pers["team"] ); + self.claimplayer = player; + + if ( self.usetime && isdefined( self.onbeginuse ) ) + self [[ self.onbeginuse ]]( self.claimplayer ); + } + else if ( isdefined( self.oncantuse ) ) + self [[ self.oncantuse ]]( player ); + } + + if ( isalive( player ) && !isdefined( player.touchtriggers[entitynumber] ) ) + player thread triggertouchthink( self ); + } +} + +clearprogress() +{ + self.curprogress = 0; + self updatecurrentprogress(); + + if ( isdefined( self.onuseclear ) ) + self [[ self.onuseclear ]](); +} + +setclaimteam( newteam ) +{ + assert( newteam != self.claimteam ); + + if ( self.claimteam == "none" && gettime() - self.lastclaimtime > self.claimgraceperiod * 1000 ) + self clearprogress(); + else if ( newteam != "none" && newteam != self.lastclaimteam ) + self clearprogress(); + + self.lastclaimteam = self.claimteam; + self.lastclaimtime = gettime(); + self.claimteam = newteam; + self updateuserate(); +} + +getclaimteam() +{ + return self.claimteam; +} + +continuetriggertouchthink( team, object ) +{ + if ( !isalive( self ) ) + return false; + + if ( self useobjectlockedforteam( team ) ) + return false; + + if ( self isinvehicle() ) + return false; + + if ( !self istouching( object.trigger ) ) + return false; + + return true; +} + +triggertouchthink( object ) +{ + team = self.pers["team"]; + score = 1; + object.numtouching[team] += score; + + if ( object.usetime ) + object updateuserate(); + + touchname = "player" + self.clientid; + struct = spawnstruct(); + struct.player = self; + struct.starttime = gettime(); + object.touchlist[team][touchname] = struct; + objective_setplayerusing( object.objectiveid, self ); + self.touchtriggers[object.entnum] = object.trigger; + + if ( isdefined( object.ontouchuse ) ) + object [[ object.ontouchuse ]]( self ); + + while ( self continuetriggertouchthink( team, object ) ) + { + if ( object.usetime ) + self updateproxbar( object, 0 ); + + wait 0.05; + } + + if ( isdefined( self ) ) + { + if ( object.usetime ) + self updateproxbar( object, 1 ); + + self.touchtriggers[object.entnum] = undefined; + objective_clearplayerusing( object.objectiveid, self ); + } + + if ( level.gameended ) + return; + + object.touchlist[team][touchname] = undefined; + object.numtouching[team] -= score; + + if ( object.numtouching[team] < 1 ) + object.numtouching[team] = 0; + + if ( object.usetime ) + { + if ( object.numtouching[team] <= 0 && object.curprogress >= object.usetime ) + { + object.curprogress = object.usetime - 1; + object updatecurrentprogress(); + } + } + + if ( isdefined( self ) && isdefined( object.onendtouchuse ) ) + object [[ object.onendtouchuse ]]( self ); + + object updateuserate(); +} + +updateproxbar( object, forceremove ) +{ + if ( object.newstyle ) + return; + + if ( !forceremove && object.decayprogress ) + { + if ( !object caninteractwith( self ) ) + { + if ( isdefined( self.proxbar ) ) + self.proxbar hideelem(); + + if ( isdefined( self.proxbartext ) ) + self.proxbartext hideelem(); + + return; + } + else + { + if ( !isdefined( self.proxbar ) ) + { + self.proxbar = createprimaryprogressbar(); + self.proxbar.lastuserate = -1; + } + + if ( self.pers["team"] == object.claimteam ) + { + if ( self.proxbar.bar.color != ( 1, 1, 1 ) ) + { + self.proxbar.bar.color = ( 1, 1, 1 ); + self.proxbar.lastuserate = -1; + } + } + else if ( self.proxbar.bar.color != ( 1, 0, 0 ) ) + { + self.proxbar.bar.color = ( 1, 0, 0 ); + self.proxbar.lastuserate = -1; + } + } + } + else if ( forceremove || !object caninteractwith( self ) || self.pers["team"] != object.claimteam ) + { + if ( isdefined( self.proxbar ) ) + self.proxbar hideelem(); + + if ( isdefined( self.proxbartext ) ) + self.proxbartext hideelem(); + + return; + } + + if ( !isdefined( self.proxbar ) ) + { + self.proxbar = self createprimaryprogressbar(); + self.proxbar.lastuserate = -1; + self.proxbar.lasthostmigrationstate = 0; + } + + if ( self.proxbar.hidden ) + { + self.proxbar showelem(); + self.proxbar.lastuserate = -1; + self.proxbar.lasthostmigrationstate = 0; + } + + if ( !isdefined( self.proxbartext ) ) + { + self.proxbartext = self createprimaryprogressbartext(); + self.proxbartext settext( object.usetext ); + } + + if ( self.proxbartext.hidden ) + { + self.proxbartext showelem(); + self.proxbartext settext( object.usetext ); + } + + if ( self.proxbar.lastuserate != object.userate || self.proxbar.lasthostmigrationstate != isdefined( level.hostmigrationtimer ) ) + { + if ( object.curprogress > object.usetime ) + object.curprogress = object.usetime; + + if ( object.decayprogress && self.pers["team"] != object.claimteam ) + { + if ( object.curprogress > 0 ) + { + progress = object.curprogress / object.usetime; + rate = 1000 / object.usetime * ( object.userate * -1 ); + + if ( isdefined( level.hostmigrationtimer ) ) + rate = 0; + + self.proxbar updatebar( progress, rate ); + } + } + else + { + progress = object.curprogress / object.usetime; + rate = 1000 / object.usetime * object.userate; + + if ( isdefined( level.hostmigrationtimer ) ) + rate = 0; + + self.proxbar updatebar( progress, rate ); + } + + self.proxbar.lasthostmigrationstate = isdefined( level.hostmigrationtimer ); + self.proxbar.lastuserate = object.userate; + } +} + +getnumtouchingexceptteam( ignoreteam ) +{ + numtouching = 0; + + foreach ( team in level.teams ) + { + if ( ignoreteam == team ) + continue; + + numtouching += self.numtouching[team]; + } + + return numtouching; +} + +updateuserate() +{ + numclaimants = self.numtouching[self.claimteam]; + numother = 0; + numother = getnumtouchingexceptteam( self.claimteam ); + self.userate = 0; + + if ( self.decayprogress ) + { + if ( numclaimants && !numother ) + self.userate = numclaimants; + else if ( !numclaimants && numother ) + self.userate = numother; + else if ( !numclaimants && !numother ) + self.userate = 0; + } + else if ( numclaimants && !numother ) + self.userate = numclaimants; + + if ( isdefined( self.onupdateuserate ) ) + self [[ self.onupdateuserate ]](); +} + +useholdthink( player ) +{ + player notify( "use_hold" ); + + if ( !( isdefined( self.dontlinkplayertotrigger ) && self.dontlinkplayertotrigger ) ) + { + player playerlinkto( self.trigger ); + player playerlinkedoffsetenable(); + } + + player clientclaimtrigger( self.trigger ); + player.claimtrigger = self.trigger; + useweapon = self.useweapon; + lastweapon = player getcurrentweapon(); + + if ( isdefined( useweapon ) ) + { + assert( isdefined( lastweapon ) ); + + if ( lastweapon == useweapon ) + { + assert( isdefined( player.lastnonuseweapon ) ); + lastweapon = player.lastnonuseweapon; + } + + assert( lastweapon != useweapon ); + player.lastnonuseweapon = lastweapon; + player giveweapon( useweapon ); + player setweaponammostock( useweapon, 0 ); + player setweaponammoclip( useweapon, 0 ); + player switchtoweapon( useweapon ); + } + else + player _disableweapon(); + + self clearprogress(); + self.inuse = 1; + self.userate = 0; + objective_setplayerusing( self.objectiveid, player ); + player thread personalusebar( self ); + result = useholdthinkloop( player, lastweapon ); + + if ( isdefined( player ) ) + { + objective_clearplayerusing( self.objectiveid, player ); + self clearprogress(); + + if ( isdefined( player.attachedusemodel ) ) + { + player detach( player.attachedusemodel, "tag_inhand" ); + player.attachedusemodel = undefined; + } + + player notify( "done_using" ); + } + + if ( isdefined( useweapon ) && isdefined( player ) ) + player thread takeuseweapon( useweapon ); + + if ( isdefined( result ) && result ) + return true; + + if ( isdefined( player ) ) + { + player.claimtrigger = undefined; + + if ( isdefined( useweapon ) ) + { + ammo = player getweaponammoclip( lastweapon ); + + if ( lastweapon != "none" && !( isweaponequipment( lastweapon ) && player getweaponammoclip( lastweapon ) == 0 ) ) + player switchtoweapon( lastweapon ); + else + player takeweapon( useweapon ); + } + else if ( isalive( player ) ) + player _enableweapon(); + + if ( !( isdefined( self.dontlinkplayertotrigger ) && self.dontlinkplayertotrigger ) ) + player unlink(); + + if ( !isalive( player ) ) + player.killedinuse = 1; + } + + self.inuse = 0; + + if ( self.trigger.classname == "trigger_radius_use" ) + player clientreleasetrigger( self.trigger ); + else + self.trigger releaseclaimedtrigger(); + + return false; +} + +takeuseweapon( useweapon ) +{ + self endon( "use_hold" ); + self endon( "death" ); + self endon( "disconnect" ); + level endon( "game_ended" ); + + while ( self getcurrentweapon() == useweapon && !self.throwinggrenade ) + wait 0.05; + + self takeweapon( useweapon ); +} + +continueholdthinkloop( player, waitforweapon, timedout, usetime ) +{ + maxwaittime = 1.5; + + if ( !isalive( player ) ) + return false; + + if ( isdefined( player.laststand ) && player.laststand ) + return false; + + if ( self.curprogress >= usetime ) + return false; + + if ( !player usebuttonpressed() ) + return false; + + if ( player.throwinggrenade ) + return false; + + if ( player meleebuttonpressed() ) + return false; + + if ( player isinvehicle() ) + return false; + + if ( player isremotecontrolling() ) + return false; + + if ( player isweaponviewonlylinked() ) + return false; + + if ( !player istouching( self.trigger ) ) + return false; + + if ( !self.userate && !waitforweapon ) + return false; + + if ( waitforweapon && timedout > maxwaittime ) + return false; + + return true; +} + +updatecurrentprogress() +{ + if ( self.usetime ) + { + progress = float( self.curprogress ) / self.usetime; + objective_setprogress( self.objectiveid, clamp( progress, 0, 1 ) ); + } +} + +useholdthinkloop( player, lastweapon ) +{ + level endon( "game_ended" ); + self endon( "disabled" ); + useweapon = self.useweapon; + waitforweapon = 1; + timedout = 0; + usetime = self.usetime; + + while ( self continueholdthinkloop( player, waitforweapon, timedout, usetime ) ) + { + timedout += 0.05; + + if ( !isdefined( useweapon ) || player getcurrentweapon() == useweapon ) + { + self.curprogress += 50 * self.userate; + self updatecurrentprogress(); + self.userate = 1; + waitforweapon = 0; + } + else + self.userate = 0; + + if ( self.curprogress >= usetime ) + { + self.inuse = 0; + player clientreleasetrigger( self.trigger ); + player.claimtrigger = undefined; + + if ( isdefined( useweapon ) ) + { + player setweaponammostock( useweapon, 1 ); + player setweaponammoclip( useweapon, 1 ); + + if ( lastweapon != "none" && !( isweaponequipment( lastweapon ) && player getweaponammoclip( lastweapon ) == 0 ) ) + player switchtoweapon( lastweapon ); + else + player takeweapon( useweapon ); + } + else + player _enableweapon(); + + if ( !( isdefined( self.dontlinkplayertotrigger ) && self.dontlinkplayertotrigger ) ) + player unlink(); + + wait 0.05; + return isalive( player ); + } + + wait 0.05; + maps\mp\gametypes_zm\_hostmigration::waittillhostmigrationdone(); + } + + return 0; +} + +personalusebar( object ) +{ + self endon( "disconnect" ); + + if ( object.newstyle ) + return; + + if ( isdefined( self.usebar ) ) + return; + + self.usebar = self createprimaryprogressbar(); + self.usebartext = self createprimaryprogressbartext(); + self.usebartext settext( object.usetext ); + usetime = object.usetime; + lastrate = -1; + lasthostmigrationstate = isdefined( level.hostmigrationtimer ); + + while ( isalive( self ) && object.inuse && !level.gameended ) + { + if ( lastrate != object.userate || lasthostmigrationstate != isdefined( level.hostmigrationtimer ) ) + { + if ( object.curprogress > usetime ) + object.curprogress = usetime; + + if ( object.decayprogress && self.pers["team"] != object.claimteam ) + { + if ( object.curprogress > 0 ) + { + progress = object.curprogress / usetime; + rate = 1000 / usetime * ( object.userate * -1 ); + + if ( isdefined( level.hostmigrationtimer ) ) + rate = 0; + + self.proxbar updatebar( progress, rate ); + } + } + else + { + progress = object.curprogress / usetime; + rate = 1000 / usetime * object.userate; + + if ( isdefined( level.hostmigrationtimer ) ) + rate = 0; + + self.usebar updatebar( progress, rate ); + } + + if ( !object.userate ) + { + self.usebar hideelem(); + self.usebartext hideelem(); + } + else + { + self.usebar showelem(); + self.usebartext showelem(); + } + } + + lastrate = object.userate; + lasthostmigrationstate = isdefined( level.hostmigrationtimer ); + wait 0.05; + } + + self.usebar destroyelem(); + self.usebartext destroyelem(); +} + +updatetrigger() +{ + if ( self.triggertype != "use" ) + return; + + if ( self.interactteam == "none" ) + self.trigger.origin -= vectorscale( ( 0, 0, 1 ), 50000.0 ); + else if ( self.interactteam == "any" || !level.teambased ) + { + self.trigger.origin = self.curorigin; + self.trigger setteamfortrigger( "none" ); + } + else if ( self.interactteam == "friendly" ) + { + self.trigger.origin = self.curorigin; + + if ( isdefined( level.teams[self.ownerteam] ) ) + self.trigger setteamfortrigger( self.ownerteam ); + else + self.trigger.origin -= vectorscale( ( 0, 0, 1 ), 50000.0 ); + } + else if ( self.interactteam == "enemy" ) + { + self.trigger.origin = self.curorigin; + self.trigger setexcludeteamfortrigger( self.ownerteam ); + } +} + +updateobjective() +{ + if ( !self.newstyle ) + return; + + objective_team( self.objectiveid, self.ownerteam ); + + if ( self.visibleteam == "any" ) + { + objective_state( self.objectiveid, "active" ); + objective_visibleteams( self.objectiveid, level.spawnsystem.ispawn_teammask["all"] ); + } + else if ( self.visibleteam == "friendly" ) + { + objective_state( self.objectiveid, "active" ); + objective_visibleteams( self.objectiveid, level.spawnsystem.ispawn_teammask[self.ownerteam] ); + } + else if ( self.visibleteam == "enemy" ) + { + objective_state( self.objectiveid, "active" ); + objective_visibleteams( self.objectiveid, level.spawnsystem.ispawn_teammask["all"] & ~level.spawnsystem.ispawn_teammask[self.ownerteam] ); + } + else + { + objective_state( self.objectiveid, "invisible" ); + objective_visibleteams( self.objectiveid, 0 ); + } + + if ( self.type == "carryObject" ) + { + if ( isalive( self.carrier ) ) + objective_onentity( self.objectiveid, self.carrier ); + else + objective_clearentity( self.objectiveid ); + } +} + +updateworldicons() +{ + if ( self.visibleteam == "any" ) + { + updateworldicon( "friendly", 1 ); + updateworldicon( "enemy", 1 ); + } + else if ( self.visibleteam == "friendly" ) + { + updateworldicon( "friendly", 1 ); + updateworldicon( "enemy", 0 ); + } + else if ( self.visibleteam == "enemy" ) + { + updateworldicon( "friendly", 0 ); + updateworldicon( "enemy", 1 ); + } + else + { + updateworldicon( "friendly", 0 ); + updateworldicon( "enemy", 0 ); + } +} + +updateworldicon( relativeteam, showicon ) +{ + +} + +updatecompassicons() +{ + if ( self.visibleteam == "any" ) + { + updatecompassicon( "friendly", 1 ); + updatecompassicon( "enemy", 1 ); + } + else if ( self.visibleteam == "friendly" ) + { + updatecompassicon( "friendly", 1 ); + updatecompassicon( "enemy", 0 ); + } + else if ( self.visibleteam == "enemy" ) + { + updatecompassicon( "friendly", 0 ); + updatecompassicon( "enemy", 1 ); + } + else + { + updatecompassicon( "friendly", 0 ); + updatecompassicon( "enemy", 0 ); + } +} + +updatecompassicon( relativeteam, showicon ) +{ + if ( self.newstyle ) + return; + + updateteams = getupdateteams( relativeteam ); + + for ( index = 0; index < updateteams.size; index++ ) + { + showiconthisteam = showicon; + + if ( !showiconthisteam && shouldshowcompassduetoradar( updateteams[index] ) ) + showiconthisteam = 1; + + if ( level.teambased ) + objid = self.objid[updateteams[index]]; + else + objid = self.objid[level.nonteambasedteam]; + + if ( !isdefined( self.compassicons[relativeteam] ) || !showiconthisteam ) + { + objective_state( objid, "invisible" ); + continue; + } + + objective_icon( objid, self.compassicons[relativeteam] ); + objective_state( objid, "active" ); + + if ( self.type == "carryObject" ) + { + if ( isalive( self.carrier ) && !shouldpingobject( relativeteam ) ) + { + objective_onentity( objid, self.carrier ); + continue; + } + + objective_position( objid, self.curorigin ); + } + } +} + +shouldpingobject( relativeteam ) +{ + if ( relativeteam == "friendly" && self.objidpingfriendly ) + return true; + else if ( relativeteam == "enemy" && self.objidpingenemy ) + return true; + + return false; +} + +getupdateteams( relativeteam ) +{ + updateteams = []; + + if ( level.teambased ) + { + if ( relativeteam == "friendly" ) + { + foreach ( team in level.teams ) + { + if ( self isfriendlyteam( team ) ) + updateteams[updateteams.size] = team; + } + } + else if ( relativeteam == "enemy" ) + { + foreach ( team in level.teams ) + { + if ( !self isfriendlyteam( team ) ) + updateteams[updateteams.size] = team; + } + } + } + else if ( relativeteam == "friendly" ) + updateteams[updateteams.size] = level.nonteambasedteam; + else + updateteams[updateteams.size] = "axis"; + + return updateteams; +} + +shouldshowcompassduetoradar( team ) +{ + showcompass = 0; + return showcompass; +} + +updatevisibilityaccordingtoradar() +{ + self endon( "death" ); + self endon( "carrier_cleared" ); + + while ( true ) + { + level waittill( "radar_status_change" ); + + self updatecompassicons(); + } +} + +setownerteam( team ) +{ + self.ownerteam = team; + self updatetrigger(); + self updatecompassicons(); + self updateworldicons(); + self updateobjective(); +} + +getownerteam() +{ + return self.ownerteam; +} + +setdecaytime( time ) +{ + self.decaytime = int( time * 1000 ); +} + +setusetime( time ) +{ + self.usetime = int( time * 1000 ); +} + +setusetext( text ) +{ + self.usetext = text; +} + +setusehinttext( text ) +{ + self.trigger sethintstring( text ); +} + +allowcarry( relativeteam ) +{ + self.interactteam = relativeteam; +} + +allowuse( relativeteam ) +{ + self.interactteam = relativeteam; + updatetrigger(); +} + +setvisibleteam( relativeteam ) +{ + self.visibleteam = relativeteam; + + if ( !maps\mp\gametypes_zm\_tweakables::gettweakablevalue( "hud", "showobjicons" ) ) + self.visibleteam = "none"; + + updatecompassicons(); + updateworldicons(); + updateobjective(); +} + +setmodelvisibility( visibility ) +{ + if ( visibility ) + { + for ( index = 0; index < self.visuals.size; index++ ) + { + self.visuals[index] show(); + + if ( self.visuals[index].classname == "script_brushmodel" || self.visuals[index].classname == "script_model" ) + self.visuals[index] thread makesolid(); + } + } + else + { + for ( index = 0; index < self.visuals.size; index++ ) + { + self.visuals[index] hide(); + + if ( self.visuals[index].classname == "script_brushmodel" || self.visuals[index].classname == "script_model" ) + { + self.visuals[index] notify( "changing_solidness" ); + self.visuals[index] notsolid(); + } + } + } +} + +makesolid() +{ + self endon( "death" ); + self notify( "changing_solidness" ); + self endon( "changing_solidness" ); + + while ( true ) + { + for ( i = 0; i < level.players.size; i++ ) + { + if ( level.players[i] istouching( self ) ) + break; + } + + if ( i == level.players.size ) + { + self solid(); + break; + } + + wait 0.05; + } +} + +setcarriervisible( relativeteam ) +{ + self.carriervisible = relativeteam; +} + +setcanuse( relativeteam ) +{ + self.useteam = relativeteam; +} + +set2dicon( relativeteam, shader ) +{ + self.compassicons[relativeteam] = shader; + updatecompassicons(); +} + +set3dicon( relativeteam, shader ) +{ + self.worldicons[relativeteam] = shader; + updateworldicons(); +} + +set3duseicon( relativeteam, shader ) +{ + self.worlduseicons[relativeteam] = shader; +} + +set3diswaypoint( relativeteam, waypoint ) +{ + self.worldiswaypoint[relativeteam] = waypoint; +} + +setcarryicon( shader ) +{ + self.carryicon = shader; +} + +setvisiblecarriermodel( visiblemodel ) +{ + self.visiblecarriermodel = visiblemodel; +} + +getvisiblecarriermodel() +{ + return self.visiblecarriermodel; +} + +destroyobject( deletetrigger, forcehide = 1 ) +{ + self disableobject( forcehide ); + + foreach ( visual in self.visuals ) + { + visual hide(); + visual delete(); + } + + self.trigger notify( "destroyed" ); + + if ( isdefined( deletetrigger ) && deletetrigger ) + self.trigger delete(); + else + self.trigger triggeron(); +} + +disableobject( forcehide ) +{ + self notify( "disabled" ); + + if ( self.type == "carryObject" || isdefined( forcehide ) && forcehide ) + { + if ( isdefined( self.carrier ) ) + self.carrier takeobject( self ); + + for ( index = 0; index < self.visuals.size; index++ ) + self.visuals[index] hide(); + } + + self.trigger triggeroff(); + self setvisibleteam( "none" ); +} + +enableobject( forceshow ) +{ + if ( self.type == "carryObject" || isdefined( forceshow ) && forceshow ) + { + for ( index = 0; index < self.visuals.size; index++ ) + self.visuals[index] show(); + } + + self.trigger triggeron(); + self setvisibleteam( "any" ); +} + +getrelativeteam( team ) +{ + if ( self.ownerteam == "any" ) + return "friendly"; + + if ( team == self.ownerteam ) + return "friendly"; + else if ( team == getenemyteam( self.ownerteam ) ) + return "enemy"; + else + return "neutral"; +} + +isfriendlyteam( team ) +{ + if ( !level.teambased ) + return true; + + if ( self.ownerteam == "any" ) + return true; + + if ( self.ownerteam == team ) + return true; + + return false; +} + +caninteractwith( player ) +{ + team = player.pers["team"]; + + switch ( self.interactteam ) + { + case "none": + return false; + case "any": + return true; + case "friendly": + if ( level.teambased ) + { + if ( team == self.ownerteam ) + return true; + else + return false; + } + else if ( player == self.ownerteam ) + return true; + else + return false; + case "enemy": + if ( level.teambased ) + { + if ( team != self.ownerteam ) + return true; + else if ( isdefined( self.decayprogress ) && self.decayprogress && self.curprogress > 0 ) + return true; + else + return false; + } + else if ( player != self.ownerteam ) + return true; + else + return false; + default: + assert( 0, "invalid interactTeam" ); + return false; + } +} + +isteam( team ) +{ + if ( team == "neutral" ) + return true; + + if ( isdefined( level.teams[team] ) ) + return true; + + if ( team == "any" ) + return true; + + if ( team == "none" ) + return true; + + return false; +} + +isrelativeteam( relativeteam ) +{ + if ( relativeteam == "friendly" ) + return true; + + if ( relativeteam == "enemy" ) + return true; + + if ( relativeteam == "any" ) + return true; + + if ( relativeteam == "none" ) + return true; + + return false; +} + +getenemyteam( team ) +{ + if ( team == "neutral" ) + return "none"; + else if ( team == "allies" ) + return "axis"; + else + return "allies"; +} + +getnextobjid() +{ + nextid = 0; + + if ( level.releasedobjectives.size > 0 ) + { + nextid = level.releasedobjectives[level.releasedobjectives.size - 1]; + level.releasedobjectives[level.releasedobjectives.size - 1] = undefined; + } + else + { + nextid = level.numgametypereservedobjectives; + level.numgametypereservedobjectives++; + } + + assert( nextid < 32, "Ran out of objective IDs" ); + return nextid; +} + +releaseobjid( objid ) +{ + assert( objid < level.numgametypereservedobjectives ); + + for ( i = 0; i < level.releasedobjectives.size; i++ ) + { + if ( objid == level.releasedobjectives[i] && objid == 31 ) + return; + + assert( objid != level.releasedobjectives[i] ); + } + + level.releasedobjectives[level.releasedobjectives.size] = objid; +} + +getlabel() +{ + label = self.trigger.script_label; + + if ( !isdefined( label ) ) + { + label = ""; + return label; + } + + if ( label[0] != "_" ) + return "_" + label; + + return label; +} + +mustmaintainclaim( enabled ) +{ + self.mustmaintainclaim = enabled; +} + +cancontestclaim( enabled ) +{ + self.cancontestclaim = enabled; +} + +setflags( flags ) +{ + objective_setgamemodeflags( self.objectiveid, flags ); +} + +getflags( flags ) +{ + return objective_getgamemodeflags( self.objectiveid ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globalentities.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globalentities.gsc new file mode 100644 index 0000000..df94d58 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globalentities.gsc @@ -0,0 +1,3 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_actor.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_actor.gsc new file mode 100644 index 0000000..b035cc6 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_actor.gsc @@ -0,0 +1,174 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_globallogic_player; +#include maps\mp\gametypes_zm\_globallogic_utils; +#include maps\mp\gametypes_zm\_weapons; +#include maps\mp\gametypes_zm\_damagefeedback; +#include maps\mp\_challenges; + +callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + if ( game["state"] == "postgame" ) + return; + + if ( self.aiteam == "spectator" ) + return; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat ) + return; + + self.idflags = idflags; + self.idflagstime = gettime(); + eattacker = maps\mp\gametypes_zm\_globallogic_player::figureoutattacker( eattacker ); + + if ( !isdefined( vdir ) ) + idflags |= level.idflags_no_knockback; + + friendly = 0; + + if ( self.health == self.maxhealth || !isdefined( self.attackers ) ) + { + self.attackers = []; + self.attackerdata = []; + self.attackerdamage = []; + } + + if ( maps\mp\gametypes_zm\_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) ) + smeansofdeath = "MOD_HEAD_SHOT"; + + if ( level.onlyheadshots ) + { + if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) + return; + else if ( smeansofdeath == "MOD_HEAD_SHOT" ) + idamage = 150; + } + + if ( sweapon == "none" && isdefined( einflictor ) ) + { + if ( isdefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) + sweapon = "explodable_barrel_mp"; + else if ( isdefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) + sweapon = "destructible_car_mp"; + } + + if ( !( idflags & level.idflags_no_protection ) ) + { + if ( isplayer( eattacker ) ) + eattacker.pers["participation"]++; + + prevhealthratio = self.health / self.maxhealth; + + if ( level.teambased && isplayer( eattacker ) && self != eattacker && self.aiteam == eattacker.pers["team"] ) + { + if ( level.friendlyfire == 0 ) + return; + else if ( level.friendlyfire == 1 ) + { + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + } + else if ( level.friendlyfire == 2 ) + return; + else if ( level.friendlyfire == 3 ) + { + idamage = int( idamage * 0.5 ); + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + } + + friendly = 1; + } + else + { + if ( isdefined( eattacker ) && isdefined( self.script_owner ) && eattacker == self.script_owner && !level.hardcoremode ) + return; + + if ( isdefined( eattacker ) && isdefined( self.script_owner ) && isdefined( eattacker.script_owner ) && eattacker.script_owner == self.script_owner ) + return; + + if ( idamage < 1 ) + idamage = 1; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( sweapon ) && !issubstr( smeansofdeath, "MOD_MELEE" ) ) + eattacker thread maps\mp\gametypes_zm\_weapons::checkhit( sweapon ); + + if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isdefined( einflictor ) && isdefined( einflictor.iscooked ) ) + self.wascooked = gettime(); + else + self.wascooked = undefined; + + self.lastdamagewasfromenemy = isdefined( eattacker ) && eattacker != self; + self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + } + + if ( isdefined( eattacker ) && eattacker != self ) + { + if ( sweapon != "artillery_mp" && ( !isdefined( einflictor ) || !isai( einflictor ) ) ) + { + if ( idamage > 0 ) + eattacker thread maps\mp\gametypes_zm\_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor ); + } + } + } +/# + if ( getdvarint( "g_debugDamage" ) ) + println( "actor:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + shitloc + ";" + boneindex + "\\n" ); +#/ + if ( 1 ) + { + lpselfnum = self getentitynumber(); + lpselfteam = self.aiteam; + lpattackerteam = ""; + + if ( isplayer( eattacker ) ) + { + lpattacknum = eattacker getentitynumber(); + lpattackguid = eattacker getguid(); + lpattackname = eattacker.name; + lpattackerteam = eattacker.pers["team"]; + } + else + { + lpattacknum = -1; + lpattackguid = ""; + lpattackname = ""; + lpattackerteam = "world"; + } + + logprint( "AD;" + lpselfnum + ";" + lpselfteam + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\\n" ); + } +} + +callback_actorkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) +{ + if ( game["state"] == "postgame" ) + return; + + if ( isai( attacker ) && isdefined( attacker.script_owner ) ) + { + if ( attacker.script_owner.team != self.aiteam ) + attacker = attacker.script_owner; + } + + if ( attacker.classname == "script_vehicle" && isdefined( attacker.owner ) ) + attacker = attacker.owner; + + if ( isdefined( attacker ) && isplayer( attacker ) ) + { + if ( !level.teambased || self.aiteam != attacker.pers["team"] ) + { + level.globalkillstreaksdestroyed++; + attacker addweaponstat( "dogs_mp", "destroyed", 1 ); + attacker maps\mp\_challenges::killeddog(); + } + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_audio.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_audio.gsc new file mode 100644 index 0000000..372aef7 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_audio.gsc @@ -0,0 +1,904 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_globallogic_utils; +#include maps\mp\gametypes_zm\_globallogic_audio; +#include maps\mp\_music; + +init() +{ + game["music"]["defeat"] = "mus_defeat"; + game["music"]["victory_spectator"] = "mus_defeat"; + game["music"]["winning"] = "mus_time_running_out_winning"; + game["music"]["losing"] = "mus_time_running_out_losing"; + game["music"]["match_end"] = "mus_match_end"; + game["music"]["victory_tie"] = "mus_defeat"; + game["music"]["suspense"] = []; + game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_01"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_02"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_03"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_04"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_05"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_06"; + game["dialog"]["mission_success"] = "mission_success"; + game["dialog"]["mission_failure"] = "mission_fail"; + game["dialog"]["mission_draw"] = "draw"; + game["dialog"]["round_success"] = "encourage_win"; + game["dialog"]["round_failure"] = "encourage_lost"; + game["dialog"]["round_draw"] = "draw"; + game["dialog"]["timesup"] = "timesup"; + game["dialog"]["winning"] = "winning"; + game["dialog"]["losing"] = "losing"; + game["dialog"]["min_draw"] = "min_draw"; + game["dialog"]["lead_lost"] = "lead_lost"; + game["dialog"]["lead_tied"] = "tied"; + game["dialog"]["lead_taken"] = "lead_taken"; + game["dialog"]["last_alive"] = "lastalive"; + game["dialog"]["boost"] = "generic_boost"; + + if ( !isdefined( game["dialog"]["offense_obj"] ) ) + game["dialog"]["offense_obj"] = "generic_boost"; + + if ( !isdefined( game["dialog"]["defense_obj"] ) ) + game["dialog"]["defense_obj"] = "generic_boost"; + + game["dialog"]["hardcore"] = "hardcore"; + game["dialog"]["oldschool"] = "oldschool"; + game["dialog"]["highspeed"] = "highspeed"; + game["dialog"]["tactical"] = "tactical"; + game["dialog"]["challenge"] = "challengecomplete"; + game["dialog"]["promotion"] = "promotion"; + game["dialog"]["bomb_acquired"] = "sd_bomb_taken"; + game["dialog"]["bomb_taken"] = "sd_bomb_taken_taken"; + game["dialog"]["bomb_lost"] = "sd_bomb_drop"; + game["dialog"]["bomb_defused"] = "sd_bomb_defused"; + game["dialog"]["bomb_planted"] = "sd_bomb_planted"; + game["dialog"]["obj_taken"] = "securedobj"; + game["dialog"]["obj_lost"] = "lostobj"; + game["dialog"]["obj_defend"] = "defend_start"; + game["dialog"]["obj_destroy"] = "destroy_start"; + game["dialog"]["obj_capture"] = "capture_obj"; + game["dialog"]["objs_capture"] = "capture_objs"; + game["dialog"]["hq_located"] = "hq_located"; + game["dialog"]["hq_enemy_captured"] = "hq_capture"; + game["dialog"]["hq_enemy_destroyed"] = "hq_defend"; + game["dialog"]["hq_secured"] = "hq_secured"; + game["dialog"]["hq_offline"] = "hq_offline"; + game["dialog"]["hq_online"] = "hq_online"; + game["dialog"]["koth_located"] = "koth_located"; + game["dialog"]["koth_captured"] = "koth_captured"; + game["dialog"]["koth_lost"] = "koth_lost"; + game["dialog"]["koth_secured"] = "koth_secured"; + game["dialog"]["koth_contested"] = "koth_contest"; + game["dialog"]["koth_offline"] = "koth_offline"; + game["dialog"]["koth_online"] = "koth_online"; + game["dialog"]["move_to_new"] = "new_positions"; + game["dialog"]["attack"] = "attack"; + game["dialog"]["defend"] = "defend"; + game["dialog"]["offense"] = "offense"; + game["dialog"]["defense"] = "defense"; + game["dialog"]["halftime"] = "halftime"; + game["dialog"]["overtime"] = "overtime"; + game["dialog"]["side_switch"] = "switchingsides"; + game["dialog"]["flag_taken"] = "ourflag"; + game["dialog"]["flag_dropped"] = "ourflag_drop"; + game["dialog"]["flag_returned"] = "ourflag_return"; + game["dialog"]["flag_captured"] = "ourflag_capt"; + game["dialog"]["enemy_flag_taken"] = "enemyflag"; + game["dialog"]["enemy_flag_dropped"] = "enemyflag_drop"; + game["dialog"]["enemy_flag_returned"] = "enemyflag_return"; + game["dialog"]["enemy_flag_captured"] = "enemyflag_capt"; + game["dialog"]["securing_a"] = "dom_securing_a"; + game["dialog"]["securing_b"] = "dom_securing_b"; + game["dialog"]["securing_c"] = "dom_securing_c"; + game["dialog"]["securing_d"] = "dom_securing_d"; + game["dialog"]["securing_e"] = "dom_securing_e"; + game["dialog"]["securing_f"] = "dom_securing_f"; + game["dialog"]["secured_a"] = "dom_secured_a"; + game["dialog"]["secured_b"] = "dom_secured_b"; + game["dialog"]["secured_c"] = "dom_secured_c"; + game["dialog"]["secured_d"] = "dom_secured_d"; + game["dialog"]["secured_e"] = "dom_secured_e"; + game["dialog"]["secured_f"] = "dom_secured_f"; + game["dialog"]["losing_a"] = "dom_losing_a"; + game["dialog"]["losing_b"] = "dom_losing_b"; + game["dialog"]["losing_c"] = "dom_losing_c"; + game["dialog"]["losing_d"] = "dom_losing_d"; + game["dialog"]["losing_e"] = "dom_losing_e"; + game["dialog"]["losing_f"] = "dom_losing_f"; + game["dialog"]["lost_a"] = "dom_lost_a"; + game["dialog"]["lost_b"] = "dom_lost_b"; + game["dialog"]["lost_c"] = "dom_lost_c"; + game["dialog"]["lost_d"] = "dom_lost_d"; + game["dialog"]["lost_e"] = "dom_lost_e"; + game["dialog"]["lost_f"] = "dom_lost_f"; + game["dialog"]["secure_flag"] = "secure_flag"; + game["dialog"]["securing_flag"] = "securing_flag"; + game["dialog"]["losing_flag"] = "losing_flag"; + game["dialog"]["lost_flag"] = "lost_flag"; + game["dialog"]["oneflag_enemy"] = "oneflag_enemy"; + game["dialog"]["oneflag_friendly"] = "oneflag_friendly"; + game["dialog"]["lost_all"] = "dom_lock_theytake"; + game["dialog"]["secure_all"] = "dom_lock_wetake"; + game["dialog"]["squad_move"] = "squad_move"; + game["dialog"]["squad_30sec"] = "squad_30sec"; + game["dialog"]["squad_winning"] = "squad_onemin_vic"; + game["dialog"]["squad_losing"] = "squad_onemin_loss"; + game["dialog"]["squad_down"] = "squad_down"; + game["dialog"]["squad_bomb"] = "squad_bomb"; + game["dialog"]["squad_plant"] = "squad_plant"; + game["dialog"]["squad_take"] = "squad_takeobj"; + game["dialog"]["kicked"] = "player_kicked"; + game["dialog"]["sentry_destroyed"] = "dest_sentry"; + game["dialog"]["sentry_hacked"] = "kls_turret_hacked"; + game["dialog"]["microwave_destroyed"] = "dest_microwave"; + game["dialog"]["microwave_hacked"] = "kls_microwave_hacked"; + game["dialog"]["sam_destroyed"] = "dest_sam"; + game["dialog"]["tact_destroyed"] = "dest_tact"; + game["dialog"]["equipment_destroyed"] = "dest_equip"; + game["dialog"]["hacked_equip"] = "hacked_equip"; + game["dialog"]["uav_destroyed"] = "kls_u2_destroyed"; + game["dialog"]["cuav_destroyed"] = "kls_cu2_destroyed"; + level.dialoggroups = []; + level thread post_match_snapshot_watcher(); +} + +registerdialoggroup( group, skipifcurrentlyplayinggroup ) +{ + if ( !isdefined( level.dialoggroups ) ) + level.dialoggroups = []; + else if ( isdefined( level.dialoggroup[group] ) ) + { + error( "registerDialogGroup: Dialog group " + group + " already registered." ); + return; + } + + level.dialoggroup[group] = spawnstruct(); + level.dialoggroup[group].group = group; + level.dialoggroup[group].skipifcurrentlyplayinggroup = skipifcurrentlyplayinggroup; + level.dialoggroup[group].currentcount = 0; +} + +sndstartmusicsystem() +{ + self endon( "disconnect" ); + + if ( game["state"] == "postgame" ) + return; + + if ( game["state"] == "pregame" ) + { +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - music state is undefined Waiting 15 seconds to set music state" ); +#/ + wait 30; + + if ( !isdefined( level.nextmusicstate ) ) + { + self.pers["music"].currentstate = "UNDERSCORE"; + self thread suspensemusic(); + } + } + + if ( !isdefined( level.nextmusicstate ) ) + { +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - music state is undefined Waiting 15 seconds to set music state" ); +#/ + self.pers["music"].currentstate = "UNDERSCORE"; + self thread suspensemusic(); + } +} + +suspensemusicforplayer() +{ + self endon( "disconnect" ); + self thread set_music_on_player( "UNDERSCORE", 0 ); +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Setting Music State Random Underscore " + self.pers["music"].returnstate + " On player " + self getentitynumber() ); +#/ +} + +suspensemusic( random ) +{ + level endon( "game_ended" ); + level endon( "match_ending_soon" ); + self endon( "disconnect" ); +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Starting random underscore" ); +#/ + while ( true ) + { + wait( randomintrange( 25, 60 ) ); +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Checking for random underscore" ); +#/ + if ( !isdefined( self.pers["music"].inque ) ) + self.pers["music"].inque = 0; + + if ( self.pers["music"].inque ) + { +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Inque no random underscore" ); +#/ + continue; + } + + if ( !isdefined( self.pers["music"].currentstate ) ) + self.pers["music"].currentstate = "SILENT"; + + if ( randomint( 100 ) < self.underscorechance && self.pers["music"].currentstate != "ACTION" && self.pers["music"].currentstate != "TIME_OUT" ) + { + self thread suspensemusicforplayer(); + self.underscorechance -= 20; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Starting random underscore" ); +#/ + } + } +} + +leaderdialogforotherteams( dialog, skip_team, squad_dialog ) +{ + foreach ( team in level.teams ) + { + if ( team != skip_team ) + leaderdialog( dialog, team, undefined, undefined, squad_dialog ); + } +} + +announceroundwinner( winner, delay ) +{ + if ( delay > 0 ) + wait( delay ); + + if ( !isdefined( winner ) || isplayer( winner ) ) + return; + + if ( isdefined( level.teams[winner] ) ) + { + leaderdialog( "round_success", winner ); + leaderdialogforotherteams( "round_failure", winner ); + } + else + { + foreach ( team in level.teams ) + thread playsoundonplayers( "mus_round_draw" + "_" + level.teampostfix[team] ); + + leaderdialog( "round_draw" ); + } +} + +announcegamewinner( winner, delay ) +{ + if ( delay > 0 ) + wait( delay ); + + if ( !isdefined( winner ) || isplayer( winner ) ) + return; + + if ( isdefined( level.teams[winner] ) ) + { + leaderdialog( "mission_success", winner ); + leaderdialogforotherteams( "mission_failure", winner ); + } + else + leaderdialog( "mission_draw" ); +} + +doflameaudio() +{ + self endon( "disconnect" ); + waittillframeend; + + if ( !isdefined( self.lastflamehurtaudio ) ) + self.lastflamehurtaudio = 0; + + currenttime = gettime(); + + if ( self.lastflamehurtaudio + level.fire_audio_repeat_duration + randomint( level.fire_audio_random_max_duration ) < currenttime ) + { + self playlocalsound( "vox_pain_small" ); + self.lastflamehurtaudio = currenttime; + } +} + +leaderdialog( dialog, team, group, excludelist, squaddialog ) +{ + assert( isdefined( level.players ) ); + + if ( level.splitscreen ) + return; + + if ( level.wagermatch ) + return; + + if ( !isdefined( team ) ) + { + dialogs = []; + + foreach ( team in level.teams ) + dialogs[team] = dialog; + + leaderdialogallteams( dialogs, group, excludelist ); + return; + } + + if ( level.splitscreen ) + { + if ( level.players.size ) + level.players[0] leaderdialogonplayer( dialog, group ); + + return; + } + + if ( isdefined( excludelist ) ) + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team && !maps\mp\gametypes_zm\_globallogic_utils::isexcluded( player, excludelist ) ) + player leaderdialogonplayer( dialog, group ); + } + } + else + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + player leaderdialogonplayer( dialog, group ); + } + } +} + +leaderdialogallteams( dialogs, group, excludelist ) +{ + assert( isdefined( level.players ) ); + + if ( level.splitscreen ) + return; + + if ( level.splitscreen ) + { + if ( level.players.size ) + level.players[0] leaderdialogonplayer( dialogs[level.players[0].team], group ); + + return; + } + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + team = player.pers["team"]; + + if ( !isdefined( team ) ) + continue; + + if ( !isdefined( dialogs[team] ) ) + continue; + + if ( isdefined( excludelist ) && maps\mp\gametypes_zm\_globallogic_utils::isexcluded( player, excludelist ) ) + continue; + + player leaderdialogonplayer( dialogs[team], group ); + } +} + +flushdialog() +{ + foreach ( player in level.players ) + player flushdialogonplayer(); +} + +flushdialogonplayer() +{ + self.leaderdialoggroups = []; + self.leaderdialogqueue = []; + self.leaderdialogactive = 0; + self.currentleaderdialoggroup = ""; +} + +flushgroupdialog( group ) +{ + foreach ( player in level.players ) + player flushgroupdialogonplayer( group ); +} + +flushgroupdialogonplayer( group ) +{ + self.leaderdialoggroups[group] = undefined; + + foreach ( key, dialog in self.leaderdialogqueue ) + { + if ( dialog == group ) + self.leaderdialogqueue[key] = undefined; + } +} + +addgroupdialogtoplayer( dialog, group ) +{ + if ( !isdefined( level.dialoggroup[group] ) ) + { + error( "leaderDialogOnPlayer: Dialog group " + group + " is not registered" ); + return 0; + } + + addtoqueue = 0; + + if ( !isdefined( self.leaderdialoggroups[group] ) ) + addtoqueue = 1; + + if ( !level.dialoggroup[group].skipifcurrentlyplayinggroup ) + { + if ( self.currentleaderdialog == dialog && self.currentleaderdialogtime + 2000 > gettime() ) + { + self.leaderdialoggroups[group] = undefined; + + foreach ( key, leader_dialog in self.leaderdialogqueue ) + { + if ( leader_dialog == group ) + { + for ( i = key + 1; i < self.leaderdialogqueue.size; i++ ) + self.leaderdialogqueue[i - 1] = self.leaderdialogqueue[i]; + + self.leaderdialogqueue[i - 1] = undefined; + break; + } + } + + return 0; + } + } + else if ( self.currentleaderdialoggroup == group ) + return 0; + + self.leaderdialoggroups[group] = dialog; + return addtoqueue; +} + +testdialogqueue( group ) +{ +/# + count = 0; + + foreach ( temp in self.leaderdialogqueue ) + { + if ( temp == group ) + count++; + } + + if ( count > 1 ) + shit = 0; +#/ +} + +leaderdialogonplayer( dialog, group ) +{ + team = self.pers["team"]; + + if ( level.splitscreen ) + return; + + if ( !isdefined( team ) ) + return; + + if ( !isdefined( level.teams[team] ) ) + return; + + if ( isdefined( group ) ) + { + if ( !addgroupdialogtoplayer( dialog, group ) ) + { + self testdialogqueue( group ); + return; + } + + dialog = group; + } + + if ( !self.leaderdialogactive ) + self thread playleaderdialogonplayer( dialog ); + else + self.leaderdialogqueue[self.leaderdialogqueue.size] = dialog; +} + +waitforsound( sound, extratime = 0.1 ) +{ + time = soundgetplaybacktime( sound ); + + if ( time < 0 ) + wait( 3.0 + extratime ); + else + wait( time * 0.001 + extratime ); +} + +playleaderdialogonplayer( dialog ) +{ + if ( isdefined( level.allowannouncer ) && !level.allowannouncer ) + return; + + team = self.pers["team"]; + self endon( "disconnect" ); + self.leaderdialogactive = 1; + + if ( isdefined( self.leaderdialoggroups[dialog] ) ) + { + group = dialog; + dialog = self.leaderdialoggroups[group]; + self.leaderdialoggroups[group] = undefined; + self.currentleaderdialoggroup = group; + self testdialogqueue( group ); + } + + if ( level.wagermatch || !isdefined( game["voice"] ) ) + faction = "vox_wm_"; + else + faction = game["voice"][team]; + + sound_name = faction + game["dialog"][dialog]; + + if ( level.allowannouncer ) + { + self playlocalsound( sound_name ); + self.currentleaderdialog = dialog; + self.currentleaderdialogtime = gettime(); + } + + waitforsound( sound_name ); + self.leaderdialogactive = 0; + self.currentleaderdialoggroup = ""; + self.currentleaderdialog = ""; + + if ( self.leaderdialogqueue.size > 0 ) + { + nextdialog = self.leaderdialogqueue[0]; + + for ( i = 1; i < self.leaderdialogqueue.size; i++ ) + self.leaderdialogqueue[i - 1] = self.leaderdialogqueue[i]; + + self.leaderdialogqueue[i - 1] = undefined; + + if ( isdefined( self.leaderdialoggroups[dialog] ) ) + self testdialogqueue( dialog ); + + self thread playleaderdialogonplayer( nextdialog ); + } +} + +isteamwinning( checkteam ) +{ + score = game["teamScores"][checkteam]; + + foreach ( team in level.teams ) + { + if ( team != checkteam ) + { + if ( game["teamScores"][team] >= score ) + return false; + } + } + + return true; +} + +announceteamiswinning() +{ + foreach ( team in level.teams ) + { + if ( isteamwinning( team ) ) + { + leaderdialog( "winning", team, undefined, undefined, "squad_winning" ); + leaderdialogforotherteams( "losing", team, "squad_losing" ); + return true; + } + } + + return false; +} + +musiccontroller() +{ + level endon( "game_ended" ); + level thread musictimesout(); + + level waittill( "match_ending_soon" ); + + if ( islastround() || isoneround() ) + { + if ( !level.splitscreen ) + { + if ( level.teambased ) + { + if ( !announceteamiswinning() ) + leaderdialog( "min_draw" ); + } + + level waittill( "match_ending_very_soon" ); + + foreach ( team in level.teams ) + leaderdialog( "timesup", team, undefined, undefined, "squad_30sec" ); + } + } + else + { + level waittill( "match_ending_vox" ); + + leaderdialog( "timesup" ); + } +} + +musictimesout() +{ + level endon( "game_ended" ); + + level waittill( "match_ending_very_soon" ); + + thread maps\mp\gametypes_zm\_globallogic_audio::set_music_on_team( "TIME_OUT", "both", 1, 0 ); +} + +actionmusicset() +{ + level endon( "game_ended" ); + level.playingactionmusic = 1; + wait 45; + level.playingactionmusic = 0; +} + +play_2d_on_team( alias, team ) +{ + assert( isdefined( level.players ) ); + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + player playlocalsound( alias ); + } +} + +set_music_on_team( state, team, save_state, return_state, wait_time ) +{ + if ( sessionmodeiszombiesgame() ) + return; + + assert( isdefined( level.players ) ); + + if ( !isdefined( team ) ) + { + team = "both"; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - team undefined: Setting to both" ); +#/ + } + + if ( !isdefined( save_state ) ) + { + save_sate = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - save_sate undefined: Setting to false" ); +#/ + } + + if ( !isdefined( return_state ) ) + { + return_state = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Music System - return_state undefined: Setting to false" ); +#/ + } + + if ( !isdefined( wait_time ) ) + { + wait_time = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - wait_time undefined: Setting to 0" ); +#/ + } + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( team == "both" ) + { + player thread set_music_on_player( state, save_state, return_state, wait_time ); + continue; + } + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + { + player thread set_music_on_player( state, save_state, return_state, wait_time ); +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Setting Music State " + state + " On player " + player getentitynumber() ); +#/ + } + } +} + +set_music_on_player( state, save_state, return_state, wait_time ) +{ + self endon( "disconnect" ); + + if ( sessionmodeiszombiesgame() ) + return; + + assert( isplayer( self ) ); + + if ( !isdefined( save_state ) ) + { + save_state = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Music System - save_sate undefined: Setting to false" ); +#/ + } + + if ( !isdefined( return_state ) ) + { + return_state = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Music System - return_state undefined: Setting to false" ); +#/ + } + + if ( !isdefined( wait_time ) ) + { + wait_time = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - wait_time undefined: Setting to 0" ); +#/ + } + + if ( !isdefined( state ) ) + { + state = "UNDERSCORE"; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - state undefined: Setting to UNDERSCORE" ); +#/ + } + + maps\mp\_music::setmusicstate( state, self ); + + if ( isdefined( self.pers["music"].currentstate ) && save_state ) + { + self.pers["music"].returnstate = state; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Saving Music State " + self.pers["music"].returnstate + " On " + self getentitynumber() ); +#/ + } + + self.pers["music"].previousstate = self.pers["music"].currentstate; + self.pers["music"].currentstate = state; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Setting Music State " + state + " On player " + self getentitynumber() ); +#/ + if ( isdefined( self.pers["music"].returnstate ) && return_state ) + { +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Starting Return State " + self.pers["music"].returnstate + " On " + self getentitynumber() ); +#/ + self set_next_music_state( self.pers["music"].returnstate, wait_time ); + } +} + +return_music_state_player( wait_time ) +{ + if ( !isdefined( wait_time ) ) + { + wait_time = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - wait_time undefined: Setting to 0" ); +#/ + } + + self set_next_music_state( self.pers["music"].returnstate, wait_time ); +} + +return_music_state_team( team, wait_time ) +{ + if ( !isdefined( wait_time ) ) + { + wait_time = 0; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - wait_time undefined: Setting to 0" ); +#/ + } + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( team == "both" ) + { + player thread set_next_music_state( self.pers["music"].returnstate, wait_time ); + continue; + } + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + { + player thread set_next_music_state( self.pers["music"].returnstate, wait_time ); +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Setting Music State " + self.pers["music"].returnstate + " On player " + player getentitynumber() ); +#/ + } + } +} + +set_next_music_state( nextstate, wait_time ) +{ + self endon( "disconnect" ); + self.pers["music"].nextstate = nextstate; +/# + if ( getdvarint( _hash_BC4784C ) > 0 ) + println( "Music System - Setting next Music State " + self.pers["music"].nextstate + " On " + self getentitynumber() ); +#/ + if ( !isdefined( self.pers["music"].inque ) ) + self.pers["music"].inque = 0; + + if ( self.pers["music"].inque ) + { + return; +/# + println( "Music System - Music state in que" ); +#/ + } + else + { + self.pers["music"].inque = 1; + + if ( wait_time ) + wait( wait_time ); + + self set_music_on_player( self.pers["music"].nextstate, 0 ); + self.pers["music"].inque = 0; + } +} + +getroundswitchdialog( switchtype ) +{ + switch ( switchtype ) + { + case "halftime": + return "halftime"; + case "overtime": + return "overtime"; + default: + return "side_switch"; + } +} + +post_match_snapshot_watcher() +{ + level waittill( "game_ended" ); + + level clientnotify( "pm" ); + + level waittill( "sfade" ); + + level clientnotify( "pmf" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_defaults.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_defaults.gsc new file mode 100644 index 0000000..1c3f658 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_defaults.gsc @@ -0,0 +1,214 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_globallogic_utils; +#include maps\mp\gametypes_zm\_globallogic; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\gametypes_zm\_globallogic_audio; +#include maps\mp\gametypes_zm\_spawnlogic; + +getwinningteamfromloser( losing_team ) +{ + if ( level.multiteam ) + return "tie"; + else if ( losing_team == "axis" ) + return "allies"; + + return "axis"; +} + +default_onforfeit( team ) +{ + level.gameforfeited = 1; + level notify( "forfeit in progress" ); + level endon( "forfeit in progress" ); + level endon( "abort forfeit" ); + forfeit_delay = 20.0; + announcement( game["strings"]["opponent_forfeiting_in"], forfeit_delay, 0 ); + wait 10.0; + announcement( game["strings"]["opponent_forfeiting_in"], 10.0, 0 ); + wait 10.0; + endreason = &""; + + if ( !isdefined( team ) ) + { + setdvar( "ui_text_endreason", game["strings"]["players_forfeited"] ); + endreason = game["strings"]["players_forfeited"]; + winner = level.players[0]; + } + else if ( isdefined( level.teams[team] ) ) + { + endreason = game["strings"][team + "_forfeited"]; + setdvar( "ui_text_endreason", endreason ); + winner = getwinningteamfromloser( team ); + } + else + { + assert( isdefined( team ), "Forfeited team is not defined" ); + assert( 0, "Forfeited team " + team + " is not allies or axis" ); + winner = "tie"; + } + + level.forcedend = 1; + + if ( isplayer( winner ) ) + logstring( "forfeit, win: " + winner getxuid() + "(" + winner.name + ")" ); + else + maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "forfeit", winner ); + + thread maps\mp\gametypes_zm\_globallogic::endgame( winner, endreason ); +} + +default_ondeadevent( team ) +{ + if ( isdefined( level.teams[team] ) ) + { + eliminatedstring = game["strings"][team + "_eliminated"]; + iprintln( eliminatedstring ); + makedvarserverinfo( "ui_text_endreason", eliminatedstring ); + setdvar( "ui_text_endreason", eliminatedstring ); + winner = getwinningteamfromloser( team ); + maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "team eliminated", winner ); + thread maps\mp\gametypes_zm\_globallogic::endgame( winner, eliminatedstring ); + } + else + { + makedvarserverinfo( "ui_text_endreason", game["strings"]["tie"] ); + setdvar( "ui_text_endreason", game["strings"]["tie"] ); + maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "tie" ); + + if ( level.teambased ) + thread maps\mp\gametypes_zm\_globallogic::endgame( "tie", game["strings"]["tie"] ); + else + thread maps\mp\gametypes_zm\_globallogic::endgame( undefined, game["strings"]["tie"] ); + } +} + +default_onalivecountchange( team ) +{ + +} + +default_onroundendgame( winner ) +{ + return winner; +} + +default_ononeleftevent( team ) +{ + if ( !level.teambased ) + { + winner = maps\mp\gametypes_zm\_globallogic_score::gethighestscoringplayer(); + + if ( isdefined( winner ) ) + logstring( "last one alive, win: " + winner.name ); + else + logstring( "last one alive, win: unknown" ); + + thread maps\mp\gametypes_zm\_globallogic::endgame( winner, &"MP_ENEMIES_ELIMINATED" ); + } + else + { + for ( index = 0; index < level.players.size; index++ ) + { + player = level.players[index]; + + if ( !isalive( player ) ) + continue; + + if ( !isdefined( player.pers["team"] ) || player.pers["team"] != team ) + continue; + + player maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "sudden_death" ); + } + } +} + +default_ontimelimit() +{ + winner = undefined; + + if ( level.teambased ) + { + winner = maps\mp\gametypes_zm\_globallogic::determineteamwinnerbygamestat( "teamScores" ); + maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "time limit", winner ); + } + else + { + winner = maps\mp\gametypes_zm\_globallogic_score::gethighestscoringplayer(); + + if ( isdefined( winner ) ) + logstring( "time limit, win: " + winner.name ); + else + logstring( "time limit, tie" ); + } + + makedvarserverinfo( "ui_text_endreason", game["strings"]["time_limit_reached"] ); + setdvar( "ui_text_endreason", game["strings"]["time_limit_reached"] ); + thread maps\mp\gametypes_zm\_globallogic::endgame( winner, game["strings"]["time_limit_reached"] ); +} + +default_onscorelimit() +{ + if ( !level.endgameonscorelimit ) + return false; + + winner = undefined; + + if ( level.teambased ) + { + winner = maps\mp\gametypes_zm\_globallogic::determineteamwinnerbygamestat( "teamScores" ); + maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "scorelimit", winner ); + } + else + { + winner = maps\mp\gametypes_zm\_globallogic_score::gethighestscoringplayer(); + + if ( isdefined( winner ) ) + logstring( "scorelimit, win: " + winner.name ); + else + logstring( "scorelimit, tie" ); + } + + makedvarserverinfo( "ui_text_endreason", game["strings"]["score_limit_reached"] ); + setdvar( "ui_text_endreason", game["strings"]["score_limit_reached"] ); + thread maps\mp\gametypes_zm\_globallogic::endgame( winner, game["strings"]["score_limit_reached"] ); + return true; +} + +default_onspawnspectator( origin, angles ) +{ + if ( isdefined( origin ) && isdefined( angles ) ) + { + self spawn( origin, angles ); + return; + } + + spawnpointname = "mp_global_intermission"; + spawnpoints = getentarray( spawnpointname, "classname" ); + assert( spawnpoints.size, "There are no mp_global_intermission spawn points in the map. There must be at least one." ); + spawnpoint = maps\mp\gametypes_zm\_spawnlogic::getspawnpoint_random( spawnpoints ); + self spawn( spawnpoint.origin, spawnpoint.angles ); +} + +default_onspawnintermission() +{ + spawnpointname = "mp_global_intermission"; + spawnpoints = getentarray( spawnpointname, "classname" ); + spawnpoint = spawnpoints[0]; + + if ( isdefined( spawnpoint ) ) + self spawn( spawnpoint.origin, spawnpoint.angles ); + else + { +/# + maps\mp\_utility::error( "NO " + spawnpointname + " SPAWNPOINTS IN MAP" ); +#/ + } +} + +default_gettimelimit() +{ + return clamp( getgametypesetting( "timeLimit" ), level.timelimitmin, level.timelimitmax ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_player.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_player.gsc new file mode 100644 index 0000000..c412e1a --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_player.gsc @@ -0,0 +1,2115 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\gametypes_zm\_globallogic; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\gametypes_zm\_hostmigration; +#include maps\mp\gametypes_zm\_globallogic_ui; +#include maps\mp\gametypes_zm\_globallogic_spawn; +#include maps\mp\gametypes_zm\_spectating; +#include maps\mp\gametypes_zm\_globallogic_utils; +#include maps\mp\gametypes_zm\_spawning; +#include maps\mp\gametypes_zm\_hud_message; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\_demo; +#include maps\mp\gametypes_zm\_weapons; +#include maps\mp\gametypes_zm\_spawnlogic; +#include maps\mp\_challenges; +#include maps\mp\gametypes_zm\_tweakables; +#include maps\mp\gametypes_zm\_globallogic_audio; + +freezeplayerforroundend() +{ + self clearlowermessage(); + self closemenu(); + self closeingamemenu(); + self freeze_player_controls( 1 ); + + if ( !sessionmodeiszombiesgame() ) + currentweapon = self getcurrentweapon(); +} + +callback_playerconnect() +{ + thread notifyconnecting(); + self.statusicon = "hud_status_connecting"; + + self waittill( "begin" ); + + if ( isdefined( level.reset_clientdvars ) ) + self [[ level.reset_clientdvars ]](); + + waittillframeend; + self.statusicon = ""; + self.guid = self getguid(); + profilelog_begintiming( 4, "ship" ); + level notify( "connected", self ); + + if ( self ishost() ) + self thread maps\mp\gametypes_zm\_globallogic::listenforgameend(); + + if ( !level.splitscreen && !isdefined( self.pers["score"] ) ) + iprintln( &"MP_CONNECTED", self ); + + if ( !isdefined( self.pers["score"] ) ) + self thread maps\mp\zombies\_zm_stats::adjustrecentstats(); + + if ( gamemodeismode( level.gamemode_public_match ) && !isdefined( self.pers["matchesPlayedStatsTracked"] ) ) + { + gamemode = maps\mp\gametypes_zm\_globallogic::getcurrentgamemode(); + self maps\mp\gametypes_zm\_globallogic::incrementmatchcompletionstat( gamemode, "played", "started" ); + + if ( !isdefined( self.pers["matchesHostedStatsTracked"] ) && self islocaltohost() ) + { + self maps\mp\gametypes_zm\_globallogic::incrementmatchcompletionstat( gamemode, "hosted", "started" ); + self.pers["matchesHostedStatsTracked"] = 1; + } + + self.pers["matchesPlayedStatsTracked"] = 1; + self thread maps\mp\zombies\_zm_stats::uploadstatssoon(); + } + + lpselfnum = self getentitynumber(); + lpguid = self getguid(); + logprint( "J;" + lpguid + ";" + lpselfnum + ";" + self.name + "\\n" ); + bbprint( "mpjoins", "name %s client %s", self.name, lpselfnum ); + + if ( !sessionmodeiszombiesgame() ) + self setclientuivisibilityflag( "hud_visible", 1 ); + + if ( level.forceradar == 1 ) + { + self.pers["hasRadar"] = 1; + self.hasspyplane = 1; + level.activeuavs[self getentitynumber()] = 1; + } + + if ( level.forceradar == 2 ) + self setclientuivisibilityflag( "g_compassShowEnemies", level.forceradar ); + else + self setclientuivisibilityflag( "g_compassShowEnemies", 0 ); + + self setclientplayersprinttime( level.playersprinttime ); + self setclientnumlives( level.numlives ); + makedvarserverinfo( "cg_drawTalk", 1 ); + + if ( level.hardcoremode ) + self setclientdrawtalk( 3 ); + + if ( sessionmodeiszombiesgame() ) + self [[ level.player_stats_init ]](); + else + { + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "score" ); + + if ( level.resetplayerscoreeveryround ) + self.pers["score"] = 0; + + self.score = self.pers["score"]; + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "momentum", 0 ); + self.momentum = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "momentum" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "suicides" ); + self.suicides = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "suicides" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "headshots" ); + self.headshots = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "headshots" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "challenges" ); + self.challenges = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "challenges" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "kills" ); + self.kills = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "kills" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "deaths" ); + self.deaths = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "deaths" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "assists" ); + self.assists = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "assists" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "defends", 0 ); + self.defends = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "defends" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "offends", 0 ); + self.offends = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "offends" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "plants", 0 ); + self.plants = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "plants" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "defuses", 0 ); + self.defuses = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "defuses" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "returns", 0 ); + self.returns = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "returns" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "captures", 0 ); + self.captures = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "captures" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "destructions", 0 ); + self.destructions = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "destructions" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "backstabs", 0 ); + self.backstabs = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "backstabs" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "longshots", 0 ); + self.longshots = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "longshots" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "survived", 0 ); + self.survived = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "survived" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "stabs", 0 ); + self.stabs = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "stabs" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomahawks", 0 ); + self.tomahawks = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "tomahawks" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "humiliated", 0 ); + self.humiliated = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "humiliated" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "x2score", 0 ); + self.x2score = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "x2score" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "agrkills", 0 ); + self.x2score = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "agrkills" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "hacks", 0 ); + self.x2score = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "hacks" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sessionbans", 0 ); + self.sessionbans = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "sessionbans" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "gametypeban", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "time_played_total", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "time_played_alive", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "teamkills", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "teamkills_nostats", 0 ); + self.teamkillpunish = 0; + + if ( level.minimumallowedteamkills >= 0 && self.pers["teamkills_nostats"] > level.minimumallowedteamkills ) + self thread reduceteamkillsovertime(); + } + + if ( getdvar( "r_reflectionProbeGenerate" ) == "1" ) + level waittill( "eternity" ); + + self.killedplayerscurrent = []; + + if ( !isdefined( self.pers["best_kill_streak"] ) ) + { + self.pers["killed_players"] = []; + self.pers["killed_by"] = []; + self.pers["nemesis_tracking"] = []; + self.pers["artillery_kills"] = 0; + self.pers["dog_kills"] = 0; + self.pers["nemesis_name"] = ""; + self.pers["nemesis_rank"] = 0; + self.pers["nemesis_rankIcon"] = 0; + self.pers["nemesis_xp"] = 0; + self.pers["nemesis_xuid"] = ""; + self.pers["best_kill_streak"] = 0; + } + + if ( !isdefined( self.pers["music"] ) ) + { + self.pers["music"] = spawnstruct(); + self.pers["music"].spawn = 0; + self.pers["music"].inque = 0; + self.pers["music"].currentstate = "SILENT"; + self.pers["music"].previousstate = "SILENT"; + self.pers["music"].nextstate = "UNDERSCORE"; + self.pers["music"].returnstate = "UNDERSCORE"; + } + + self.leaderdialogqueue = []; + self.leaderdialogactive = 0; + self.leaderdialoggroups = []; + self.currentleaderdialoggroup = ""; + self.currentleaderdialog = ""; + self.currentleaderdialogtime = 0; + + if ( !isdefined( self.pers["cur_kill_streak"] ) ) + self.pers["cur_kill_streak"] = 0; + + if ( !isdefined( self.pers["cur_total_kill_streak"] ) ) + { + self.pers["cur_total_kill_streak"] = 0; + self setplayercurrentstreak( 0 ); + } + + if ( !isdefined( self.pers["totalKillstreakCount"] ) ) + self.pers["totalKillstreakCount"] = 0; + + if ( !isdefined( self.pers["killstreaksEarnedThisKillstreak"] ) ) + self.pers["killstreaksEarnedThisKillstreak"] = 0; + + if ( isdefined( level.usingscorestreaks ) && level.usingscorestreaks && !isdefined( self.pers["killstreak_quantity"] ) ) + self.pers["killstreak_quantity"] = []; + + if ( isdefined( level.usingscorestreaks ) && level.usingscorestreaks && !isdefined( self.pers["held_killstreak_ammo_count"] ) ) + self.pers["held_killstreak_ammo_count"] = []; + + self.lastkilltime = 0; + self.cur_death_streak = 0; + self disabledeathstreak(); + self.death_streak = 0; + self.kill_streak = 0; + self.gametype_kill_streak = 0; + self.spawnqueueindex = -1; + self.deathtime = 0; + self.lastgrenadesuicidetime = -1; + self.teamkillsthisround = 0; + + if ( !isdefined( level.livesdonotreset ) || !level.livesdonotreset || !isdefined( self.pers["lives"] ) ) + self.pers["lives"] = level.numlives; + + if ( !level.teambased ) + self.pers["team"] = undefined; + + self.hasspawned = 0; + self.waitingtospawn = 0; + self.wantsafespawn = 0; + self.deathcount = 0; + self.wasaliveatmatchstart = 0; + level.players[level.players.size] = self; + + if ( level.splitscreen ) + setdvar( "splitscreen_playerNum", level.players.size ); + + if ( game["state"] == "postgame" ) + { + self.pers["needteam"] = 1; + self.pers["team"] = "spectator"; + self.team = "spectator"; + self setclientuivisibilityflag( "hud_visible", 0 ); + self [[ level.spawnintermission ]](); + self closemenu(); + self closeingamemenu(); + profilelog_endtiming( 4, "gs=" + game["state"] + " zom=" + sessionmodeiszombiesgame() ); + return; + } + + if ( level.scr_zm_ui_gametype_group == "zencounter" ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "losses" ); + self updatestatratio( "wlratio", "wins", "losses" ); + + if ( gamemodeismode( level.gamemode_public_match ) ) + self maps\mp\zombies\_zm_stats::add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "losses", 1 ); + } + else if ( level.scr_zm_ui_gametype_group == "zsurvival" ) + { + if ( is_true( level.should_use_cia ) ) + self luinotifyevent( &"hud_update_survival_team", 1, 2 ); + } + + level endon( "game_ended" ); + + if ( isdefined( level.hostmigrationtimer ) ) + self thread maps\mp\gametypes_zm\_hostmigration::hostmigrationtimerthink(); + + if ( level.oldschool ) + { + self.pers["class"] = undefined; + self.class = self.pers["class"]; + } + + if ( isdefined( self.pers["team"] ) ) + self.team = self.pers["team"]; + + if ( isdefined( self.pers["class"] ) ) + self.class = self.pers["class"]; + + if ( !isdefined( self.pers["team"] ) || isdefined( self.pers["needteam"] ) ) + { + self.pers["needteam"] = undefined; + self.pers["team"] = "spectator"; + self.team = "spectator"; + self.sessionstate = "dead"; + self maps\mp\gametypes_zm\_globallogic_ui::updateobjectivetext(); + [[ level.spawnspectator ]](); + + if ( level.rankedmatch ) + { + [[ level.autoassign ]]( 0 ); + self thread maps\mp\gametypes_zm\_globallogic_spawn::kickifdontspawn(); + } + else + [[ level.autoassign ]]( 0 ); + + if ( self.pers["team"] == "spectator" ) + { + self.sessionteam = "spectator"; + + if ( !level.teambased ) + self.ffateam = "spectator"; + + self thread spectate_player_watcher(); + } + + if ( level.teambased ) + { + self.sessionteam = self.pers["team"]; + + if ( !isalive( self ) ) + self.statusicon = "hud_status_dead"; + + self thread maps\mp\gametypes_zm\_spectating::setspectatepermissions(); + } + } + else if ( self.pers["team"] == "spectator" ) + { + self setclientscriptmainmenu( game["menu_class"] ); + [[ level.spawnspectator ]](); + self.sessionteam = "spectator"; + self.sessionstate = "spectator"; + + if ( !level.teambased ) + self.ffateam = "spectator"; + + self thread spectate_player_watcher(); + } + else + { + self.sessionteam = self.pers["team"]; + self.sessionstate = "dead"; + + if ( !level.teambased ) + self.ffateam = self.pers["team"]; + + self maps\mp\gametypes_zm\_globallogic_ui::updateobjectivetext(); + [[ level.spawnspectator ]](); + + if ( maps\mp\gametypes_zm\_globallogic_utils::isvalidclass( self.pers["class"] ) ) + self thread [[ level.spawnclient ]](); + else + self maps\mp\gametypes_zm\_globallogic_ui::showmainmenuforteam(); + + self thread maps\mp\gametypes_zm\_spectating::setspectatepermissions(); + } + + if ( self.sessionteam != "spectator" ) + self thread maps\mp\gametypes_zm\_spawning::onspawnplayer_unified( 1 ); + + profilelog_endtiming( 4, "gs=" + game["state"] + " zom=" + sessionmodeiszombiesgame() ); + + if ( isdefined( self.pers["isBot"] ) ) + return; +} + +spectate_player_watcher() +{ + self endon( "disconnect" ); + self.watchingactiveclient = 1; + self.waitingforplayerstext = undefined; + + while ( true ) + { + if ( self.pers["team"] != "spectator" || level.gameended ) + { + self maps\mp\gametypes_zm\_hud_message::clearshoutcasterwaitingmessage(); +/# + println( " Unfreeze controls 1" ); +#/ + self freezecontrols( 0 ); + self.watchingactiveclient = 0; + break; + } + else + { + if ( !level.splitscreen && !level.hardcoremode && getdvarint( "scr_showperksonspawn" ) == 1 && game["state"] != "postgame" && !isdefined( self.perkhudelem ) ) + { + if ( level.perksenabled == 1 ) + self maps\mp\gametypes_zm\_hud_util::showperks(); + + self thread maps\mp\gametypes_zm\_globallogic_ui::hideloadoutaftertime( 0 ); + } + + count = 0; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( level.players[i].team != "spectator" ) + { + count++; + break; + } + } + + if ( count > 0 ) + { + if ( !self.watchingactiveclient ) + { + self maps\mp\gametypes_zm\_hud_message::clearshoutcasterwaitingmessage(); + self freezecontrols( 0 ); +/# + println( " Unfreeze controls 2" ); +#/ + } + + self.watchingactiveclient = 1; + } + else + { + if ( self.watchingactiveclient ) + { + [[ level.onspawnspectator ]](); + self freezecontrols( 1 ); + self maps\mp\gametypes_zm\_hud_message::setshoutcasterwaitingmessage(); + } + + self.watchingactiveclient = 0; + } + + wait 0.5; + } + } +} + +callback_playermigrated() +{ +/# + println( "Player " + self.name + " finished migrating at time " + gettime() ); +#/ + if ( isdefined( self.connected ) && self.connected ) + self maps\mp\gametypes_zm\_globallogic_ui::updateobjectivetext(); + + self thread inform_clientvm_of_migration(); + level.hostmigrationreturnedplayercount++; + + if ( level.hostmigrationreturnedplayercount >= level.players.size * 2 / 3 ) + { +/# + println( "2/3 of players have finished migrating" ); +#/ + level notify( "hostmigration_enoughplayers" ); + } +} + +inform_clientvm_of_migration() +{ + self endon( "disconnect" ); + wait 1.0; + self clientnotify( "hmo" ); +/# + println( "SERVER : Sent HMO to client " + self getentitynumber() ); +#/ +} + +callback_playerdisconnect() +{ + profilelog_begintiming( 5, "ship" ); + + if ( game["state"] != "postgame" && !level.gameended ) + { + gamelength = maps\mp\gametypes_zm\_globallogic::getgamelength(); + self maps\mp\gametypes_zm\_globallogic::bbplayermatchend( gamelength, "MP_PLAYER_DISCONNECT", 0 ); + } + + self removeplayerondisconnect(); + + if ( level.splitscreen ) + { + players = level.players; + + if ( players.size <= 1 ) + level thread maps\mp\gametypes_zm\_globallogic::forceend(); + + setdvar( "splitscreen_playerNum", players.size ); + } + + if ( isdefined( self.score ) && isdefined( self.pers["team"] ) ) + { + self logstring( "team: score " + self.pers["team"] + ":" + self.score ); + level.dropteam += 1; + } + + [[ level.onplayerdisconnect ]](); + lpselfnum = self getentitynumber(); + lpguid = self getguid(); + logprint( "Q;" + lpguid + ";" + lpselfnum + ";" + self.name + "\\n" ); + + for ( entry = 0; entry < level.players.size; entry++ ) + { + if ( level.players[entry] == self ) + { + while ( entry < level.players.size - 1 ) + { + level.players[entry] = level.players[entry + 1]; + entry++; + } + + level.players[entry] = undefined; + break; + } + } + + for ( entry = 0; entry < level.players.size; entry++ ) + { + if ( isdefined( level.players[entry].pers["killed_players"][self.name] ) ) + level.players[entry].pers["killed_players"][self.name] = undefined; + + if ( isdefined( level.players[entry].killedplayerscurrent[self.name] ) ) + level.players[entry].killedplayerscurrent[self.name] = undefined; + + if ( isdefined( level.players[entry].pers["killed_by"][self.name] ) ) + level.players[entry].pers["killed_by"][self.name] = undefined; + + if ( isdefined( level.players[entry].pers["nemesis_tracking"][self.name] ) ) + level.players[entry].pers["nemesis_tracking"][self.name] = undefined; + + if ( level.players[entry].pers["nemesis_name"] == self.name ) + level.players[entry] choosenextbestnemesis(); + } + + if ( level.gameended ) + self maps\mp\gametypes_zm\_globallogic::removedisconnectedplayerfromplacement(); + + level thread maps\mp\gametypes_zm\_globallogic::updateteamstatus(); + profilelog_endtiming( 5, "gs=" + game["state"] + " zom=" + sessionmodeiszombiesgame() ); +} + +callback_playermelee( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit ) +{ + hit = 1; + + if ( level.teambased && self.team == eattacker.team ) + { + if ( level.friendlyfire == 0 ) + hit = 0; + } + + self finishmeleehit( eattacker, sweapon, vorigin, vdir, boneindex, shieldhit, hit ); +} + +choosenextbestnemesis() +{ + nemesisarray = self.pers["nemesis_tracking"]; + nemesisarraykeys = getarraykeys( nemesisarray ); + nemesisamount = 0; + nemesisname = ""; + + if ( nemesisarraykeys.size > 0 ) + { + for ( i = 0; i < nemesisarraykeys.size; i++ ) + { + nemesisarraykey = nemesisarraykeys[i]; + + if ( nemesisarray[nemesisarraykey] > nemesisamount ) + { + nemesisname = nemesisarraykey; + nemesisamount = nemesisarray[nemesisarraykey]; + } + } + } + + self.pers["nemesis_name"] = nemesisname; + + if ( nemesisname != "" ) + { + for ( playerindex = 0; playerindex < level.players.size; playerindex++ ) + { + if ( level.players[playerindex].name == nemesisname ) + { + nemesisplayer = level.players[playerindex]; + self.pers["nemesis_rank"] = nemesisplayer.pers["rank"]; + self.pers["nemesis_rankIcon"] = nemesisplayer.pers["rankxp"]; + self.pers["nemesis_xp"] = nemesisplayer.pers["prestige"]; + self.pers["nemesis_xuid"] = nemesisplayer getxuid( 1 ); + break; + } + } + } + else + self.pers["nemesis_xuid"] = ""; +} + +removeplayerondisconnect() +{ + for ( entry = 0; entry < level.players.size; entry++ ) + { + if ( level.players[entry] == self ) + { + while ( entry < level.players.size - 1 ) + { + level.players[entry] = level.players[entry + 1]; + entry++; + } + + level.players[entry] = undefined; + break; + } + } +} + +custom_gamemodes_modified_damage( victim, eattacker, idamage, smeansofdeath, sweapon, einflictor, shitloc ) +{ + if ( level.onlinegame && !sessionmodeisprivate() ) + return idamage; + + if ( isdefined( eattacker ) && isdefined( eattacker.damagemodifier ) ) + idamage *= eattacker.damagemodifier; + + if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) + idamage = int( idamage * level.bulletdamagescalar ); + + return idamage; +} + +figureoutattacker( eattacker ) +{ + if ( isdefined( eattacker ) ) + { + if ( isai( eattacker ) && isdefined( eattacker.script_owner ) ) + { + team = self.team; + + if ( isai( self ) && isdefined( self.aiteam ) ) + team = self.aiteam; + + if ( eattacker.script_owner.team != team ) + eattacker = eattacker.script_owner; + } + + if ( eattacker.classname == "script_vehicle" && isdefined( eattacker.owner ) ) + eattacker = eattacker.owner; + else if ( eattacker.classname == "auto_turret" && isdefined( eattacker.owner ) ) + eattacker = eattacker.owner; + } + + return eattacker; +} + +figureoutweapon( sweapon, einflictor ) +{ + if ( sweapon == "none" && isdefined( einflictor ) ) + { + if ( isdefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) + sweapon = "explodable_barrel_mp"; + else if ( isdefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) + sweapon = "destructible_car_mp"; + } + + return sweapon; +} + +isplayerimmunetokillstreak( eattacker, sweapon ) +{ + if ( level.hardcoremode ) + return false; + + if ( !isdefined( eattacker ) ) + return false; + + if ( self != eattacker ) + return false; + + if ( sweapon != "straferun_gun_mp" && sweapon != "straferun_rockets_mp" ) + return false; + + return true; +} + +callback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + profilelog_begintiming( 6, "ship" ); + + if ( game["state"] == "postgame" ) + return; + + if ( self.sessionteam == "spectator" ) + return; + + if ( isdefined( self.candocombat ) && !self.candocombat ) + return; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat ) + return; + + if ( isdefined( level.hostmigrationtimer ) ) + return; + + if ( ( sweapon == "ai_tank_drone_gun_mp" || sweapon == "ai_tank_drone_rocket_mp" ) && !level.hardcoremode ) + { + if ( isdefined( eattacker ) && eattacker == self ) + { + if ( isdefined( einflictor ) && isdefined( einflictor.from_ai ) ) + return; + } + + if ( isdefined( eattacker ) && isdefined( eattacker.owner ) && eattacker.owner == self ) + return; + } + + if ( sweapon == "emp_grenade_mp" ) + self notify( "emp_grenaded", eattacker ); + + idamage = custom_gamemodes_modified_damage( self, eattacker, idamage, smeansofdeath, sweapon, einflictor, shitloc ); + idamage = int( idamage ); + self.idflags = idflags; + self.idflagstime = gettime(); + eattacker = figureoutattacker( eattacker ); + pixbeginevent( "PlayerDamage flags/tweaks" ); + + if ( !isdefined( vdir ) ) + idflags |= level.idflags_no_knockback; + + friendly = 0; + + if ( self.health != self.maxhealth ) + self notify( "snd_pain_player" ); + + if ( isdefined( einflictor ) && isdefined( einflictor.script_noteworthy ) && einflictor.script_noteworthy == "ragdoll_now" ) + smeansofdeath = "MOD_FALLING"; + + if ( maps\mp\gametypes_zm\_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) && isplayer( eattacker ) ) + smeansofdeath = "MOD_HEAD_SHOT"; + + if ( level.onplayerdamage != maps\mp\gametypes_zm\_globallogic::blank ) + { + modifieddamage = [[ level.onplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); + + if ( isdefined( modifieddamage ) ) + { + if ( modifieddamage <= 0 ) + return; + + idamage = modifieddamage; + } + } + + if ( level.onlyheadshots ) + { + if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) + return; + else if ( smeansofdeath == "MOD_HEAD_SHOT" ) + idamage = 150; + } + + if ( isdefined( eattacker ) && isplayer( eattacker ) && self.team != eattacker.team ) + self.lastattackweapon = sweapon; + + sweapon = figureoutweapon( sweapon, einflictor ); + pixendevent(); + attackerishittingteammate = isplayer( eattacker ) && self isenemyplayer( eattacker ) == 0; + + if ( shitloc == "riotshield" ) + { + if ( attackerishittingteammate && level.friendlyfire == 0 ) + return; + + if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" && !attackerishittingteammate ) + { + previous_shield_damage = self.shielddamageblocked; + self.shielddamageblocked += idamage; + + if ( isplayer( eattacker ) ) + { + eattacker.lastattackedshieldplayer = self; + eattacker.lastattackedshieldtime = gettime(); + } + + if ( self.shielddamageblocked % 400 < previous_shield_damage % 400 ) + { + score_event = "shield_blocked_damage"; + + if ( self.shielddamageblocked > 2000 ) + score_event = "shield_blocked_damage_reduced"; + } + } + + if ( idflags & level.idflags_shield_explosive_impact ) + { + shitloc = "none"; + + if ( !( idflags & level.idflags_shield_explosive_impact_huge ) ) + idamage *= 0.0; + } + else if ( idflags & level.idflags_shield_explosive_splash ) + { + if ( isdefined( einflictor ) && isdefined( einflictor.stucktoplayer ) && einflictor.stucktoplayer == self ) + idamage = 101; + + shitloc = "none"; + } + else + return; + } + + if ( isdefined( eattacker ) && eattacker != self && !friendly ) + level.usestartspawns = 0; + + pixbeginevent( "PlayerDamage log" ); +/# + if ( getdvarint( "g_debugDamage" ) ) + println( "client:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); +#/ + if ( self.sessionstate != "dead" ) + { + lpselfnum = self getentitynumber(); + lpselfname = self.name; + lpselfteam = self.team; + lpselfguid = self getguid(); + lpattackerteam = ""; + lpattackerorigin = ( 0, 0, 0 ); + + if ( isplayer( eattacker ) ) + { + lpattacknum = eattacker getentitynumber(); + lpattackguid = eattacker getguid(); + lpattackname = eattacker.name; + lpattackerteam = eattacker.team; + lpattackerorigin = eattacker.origin; + bbprint( "mpattacks", "gametime %d attackerspawnid %d attackerweapon %s attackerx %d attackery %d attackerz %d victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", gettime(), getplayerspawnid( eattacker ), sweapon, lpattackerorigin, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 0 ); + } + else + { + lpattacknum = -1; + lpattackguid = ""; + lpattackname = ""; + lpattackerteam = "world"; + bbprint( "mpattacks", "gametime %d attackerweapon %s victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", gettime(), sweapon, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 0 ); + } + + logprint( "D;" + lpselfguid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\\n" ); + } + + pixendevent(); + profilelog_endtiming( 6, "gs=" + game["state"] + " zom=" + sessionmodeiszombiesgame() ); +} + +resetattackerlist() +{ + self.attackers = []; + self.attackerdata = []; + self.attackerdamage = []; + self.firsttimedamaged = 0; +} + +dodamagefeedback( sweapon, einflictor, idamage, smeansofdeath ) +{ + if ( !isdefined( sweapon ) ) + return false; + + if ( level.allowhitmarkers == 0 ) + return false; + + if ( level.allowhitmarkers == 1 ) + { + if ( isdefined( smeansofdeath ) && isdefined( idamage ) ) + { + if ( istacticalhitmarker( sweapon, smeansofdeath, idamage ) ) + return false; + } + } + + return true; +} + +istacticalhitmarker( sweapon, smeansofdeath, idamage ) +{ + if ( isgrenade( sweapon ) ) + { + if ( sweapon == "willy_pete_mp" ) + { + if ( smeansofdeath == "MOD_GRENADE_SPLASH" ) + return true; + } + else if ( idamage == 1 ) + return true; + } + + return false; +} + +doperkfeedback( player, sweapon, smeansofdeath, einflictor ) +{ + perkfeedback = undefined; + return perkfeedback; +} + +isaikillstreakdamage( sweapon, einflictor ) +{ + switch ( sweapon ) + { + case "ai_tank_drone_rocket_mp": + return isdefined( einflictor.firedbyai ); + case "missile_swarm_projectile_mp": + return 1; + case "planemortar_mp": + return 1; + case "chopper_minigun_mp": + return 1; + case "straferun_rockets_mp": + return 1; + case "littlebird_guard_minigun_mp": + return 1; + case "cobra_20mm_comlink_mp": + return 1; + } + + return 0; +} + +finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + pixbeginevent( "finishPlayerDamageWrapper" ); + + if ( !level.console && idflags & level.idflags_penetration && isplayer( eattacker ) ) + { +/# + println( "penetrated:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); +#/ + eattacker addplayerstat( "penetration_shots", 1 ); + } + + self finishplayerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + + if ( getdvar( "scr_csmode" ) != "" ) + self shellshock( "damage_mp", 0.2 ); + + self damageshellshockandrumble( eattacker, einflictor, sweapon, smeansofdeath, idamage ); + pixendevent(); +} + +allowedassistweapon( weapon ) +{ + return 1; +} + +callback_playerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + profilelog_begintiming( 7, "ship" ); + self endon( "spawned" ); + self notify( "killed_player" ); + + if ( self.sessionteam == "spectator" ) + return; + + if ( game["state"] == "postgame" ) + return; + + self needsrevive( 0 ); + + if ( isdefined( self.burning ) && self.burning == 1 ) + self setburn( 0 ); + + self.suicide = 0; + + if ( isdefined( level.takelivesondeath ) && level.takelivesondeath == 1 ) + { + if ( self.pers["lives"] ) + { + self.pers["lives"]--; + + if ( self.pers["lives"] == 0 ) + { + level notify( "player_eliminated" ); + self notify( "player_eliminated" ); + } + } + } + + self thread flushgroupdialogonplayer( "item_destroyed" ); + sweapon = updateweapon( einflictor, sweapon ); + pixbeginevent( "PlayerKilled pre constants" ); + wasinlaststand = 0; + deathtimeoffset = 0; + lastweaponbeforedroppingintolaststand = undefined; + attackerstance = undefined; + self.laststandthislife = undefined; + self.vattackerorigin = undefined; + + if ( isdefined( self.uselaststandparams ) ) + { + self.uselaststandparams = undefined; + assert( isdefined( self.laststandparams ) ); + + if ( !level.teambased || !isdefined( attacker ) || !isplayer( attacker ) || attacker.team != self.team || attacker == self ) + { + einflictor = self.laststandparams.einflictor; + attacker = self.laststandparams.attacker; + attackerstance = self.laststandparams.attackerstance; + idamage = self.laststandparams.idamage; + smeansofdeath = self.laststandparams.smeansofdeath; + sweapon = self.laststandparams.sweapon; + vdir = self.laststandparams.vdir; + shitloc = self.laststandparams.shitloc; + self.vattackerorigin = self.laststandparams.vattackerorigin; + deathtimeoffset = ( gettime() - self.laststandparams.laststandstarttime ) / 1000; + + if ( isdefined( self.previousprimary ) ) + { + wasinlaststand = 1; + lastweaponbeforedroppingintolaststand = self.previousprimary; + } + } + + self.laststandparams = undefined; + } + + bestplayer = undefined; + bestplayermeansofdeath = undefined; + obituarymeansofdeath = undefined; + bestplayerweapon = undefined; + obituaryweapon = undefined; + + if ( ( !isdefined( attacker ) || attacker.classname == "trigger_hurt" || attacker.classname == "worldspawn" || isdefined( attacker.ismagicbullet ) && attacker.ismagicbullet == 1 || attacker == self ) && isdefined( self.attackers ) ) + { + if ( !isdefined( bestplayer ) ) + { + for ( i = 0; i < self.attackers.size; i++ ) + { + player = self.attackers[i]; + + if ( !isdefined( player ) ) + continue; + + if ( !isdefined( self.attackerdamage[player.clientid] ) || !isdefined( self.attackerdamage[player.clientid].damage ) ) + continue; + + if ( player == self || level.teambased && player.team == self.team ) + continue; + + if ( self.attackerdamage[player.clientid].lasttimedamaged + 2500 < gettime() ) + continue; + + if ( !allowedassistweapon( self.attackerdamage[player.clientid].weapon ) ) + continue; + + if ( self.attackerdamage[player.clientid].damage > 1 && !isdefined( bestplayer ) ) + { + bestplayer = player; + bestplayermeansofdeath = self.attackerdamage[player.clientid].meansofdeath; + bestplayerweapon = self.attackerdamage[player.clientid].weapon; + continue; + } + + if ( isdefined( bestplayer ) && self.attackerdamage[player.clientid].damage > self.attackerdamage[bestplayer.clientid].damage ) + { + bestplayer = player; + bestplayermeansofdeath = self.attackerdamage[player.clientid].meansofdeath; + bestplayerweapon = self.attackerdamage[player.clientid].weapon; + } + } + } + + if ( isdefined( bestplayer ) ) + self recordkillmodifier( "assistedsuicide" ); + } + + if ( isdefined( bestplayer ) ) + { + attacker = bestplayer; + obituarymeansofdeath = bestplayermeansofdeath; + obituaryweapon = bestplayerweapon; + } + + if ( isplayer( attacker ) ) + attacker.damagedplayers[self.clientid] = undefined; + + if ( maps\mp\gametypes_zm\_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) && isplayer( attacker ) ) + { + attacker playlocalsound( "prj_bullet_impact_headshot_helmet_nodie_2d" ); + smeansofdeath = "MOD_HEAD_SHOT"; + } + + self.deathtime = gettime(); + attacker = updateattacker( attacker, sweapon ); + einflictor = updateinflictor( einflictor ); + smeansofdeath = updatemeansofdeath( sweapon, smeansofdeath ); + + if ( isdefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped == 1 ) + { + self detachshieldmodel( level.carriedshieldmodel, "tag_weapon_left" ); + self.hasriotshield = 0; + self.hasriotshieldequipped = 0; + } + + self thread updateglobalbotkilledcounter(); + + if ( isplayer( attacker ) && attacker != self && ( !level.teambased || level.teambased && self.team != attacker.team ) ) + { + self addweaponstat( sweapon, "deaths", 1 ); + + if ( wasinlaststand && isdefined( lastweaponbeforedroppingintolaststand ) ) + weaponname = lastweaponbeforedroppingintolaststand; + else + weaponname = self.lastdroppableweapon; + + if ( isdefined( weaponname ) && ( issubstr( weaponname, "gl_" ) || issubstr( weaponname, "mk_" ) || issubstr( weaponname, "ft_" ) ) ) + weaponname = self.currentweapon; + + if ( isdefined( weaponname ) ) + self addweaponstat( weaponname, "deathsDuringUse", 1 ); + + if ( smeansofdeath != "MOD_FALLING" ) + attacker addweaponstat( sweapon, "kills", 1 ); + + if ( smeansofdeath == "MOD_HEAD_SHOT" ) + attacker addweaponstat( sweapon, "headshots", 1 ); + } + + if ( !isdefined( obituarymeansofdeath ) ) + obituarymeansofdeath = smeansofdeath; + + if ( !isdefined( obituaryweapon ) ) + obituaryweapon = sweapon; + + if ( !isplayer( attacker ) || self isenemyplayer( attacker ) == 0 ) + { + level notify( "reset_obituary_count" ); + level.lastobituaryplayercount = 0; + level.lastobituaryplayer = undefined; + } + else + { + if ( isdefined( level.lastobituaryplayer ) && level.lastobituaryplayer == attacker ) + level.lastobituaryplayercount++; + else + { + level notify( "reset_obituary_count" ); + level.lastobituaryplayer = attacker; + level.lastobituaryplayercount = 1; + } + + if ( level.lastobituaryplayercount >= 4 ) + { + level notify( "reset_obituary_count" ); + level.lastobituaryplayercount = 0; + level.lastobituaryplayer = undefined; + } + } + + overrideentitycamera = 0; + + if ( level.teambased && isdefined( attacker.pers ) && self.team == attacker.team && obituarymeansofdeath == "MOD_GRENADE" && level.friendlyfire == 0 ) + { + obituary( self, self, obituaryweapon, obituarymeansofdeath ); + maps\mp\_demo::bookmark( "kill", gettime(), self, self, 0, einflictor, overrideentitycamera ); + } + else + { + obituary( self, attacker, obituaryweapon, obituarymeansofdeath ); + maps\mp\_demo::bookmark( "kill", gettime(), self, attacker, 0, einflictor, overrideentitycamera ); + } + + if ( !level.ingraceperiod ) + { + self maps\mp\gametypes_zm\_weapons::dropscavengerfordeath( attacker ); + self maps\mp\gametypes_zm\_weapons::dropweaponfordeath( attacker ); + self maps\mp\gametypes_zm\_weapons::dropoffhand(); + } + + maps\mp\gametypes_zm\_spawnlogic::deathoccured( self, attacker ); + self.sessionstate = "dead"; + self.statusicon = "hud_status_dead"; + self.pers["weapon"] = undefined; + self.killedplayerscurrent = []; + self.deathcount++; +/# + println( "players(" + self.clientid + ") death count ++: " + self.deathcount ); +#/ + if ( !isdefined( self.switching_teams ) ) + { + if ( isplayer( attacker ) && level.teambased && attacker != self && self.team == attacker.team ) + { + self.pers["cur_kill_streak"] = 0; + self.pers["cur_total_kill_streak"] = 0; + self.pers["totalKillstreakCount"] = 0; + self.pers["killstreaksEarnedThisKillstreak"] = 0; + self setplayercurrentstreak( 0 ); + } + else + { + self maps\mp\gametypes_zm\_globallogic_score::incpersstat( "deaths", 1, 1, 1 ); + self.deaths = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "deaths" ); + self updatestatratio( "kdratio", "kills", "deaths" ); + + if ( self.pers["cur_kill_streak"] > self.pers["best_kill_streak"] ) + self.pers["best_kill_streak"] = self.pers["cur_kill_streak"]; + + self.pers["kill_streak_before_death"] = self.pers["cur_kill_streak"]; + self.pers["cur_kill_streak"] = 0; + self.pers["cur_total_kill_streak"] = 0; + self.pers["totalKillstreakCount"] = 0; + self.pers["killstreaksEarnedThisKillstreak"] = 0; + self setplayercurrentstreak( 0 ); + self.cur_death_streak++; + + if ( self.cur_death_streak > self.death_streak ) + { + if ( level.rankedmatch ) + self setdstat( "HighestStats", "death_streak", self.cur_death_streak ); + + self.death_streak = self.cur_death_streak; + } + + if ( self.cur_death_streak >= getdvarint( "perk_deathStreakCountRequired" ) ) + self enabledeathstreak(); + } + } + else + { + self.pers["totalKillstreakCount"] = 0; + self.pers["killstreaksEarnedThisKillstreak"] = 0; + } + + lpselfnum = self getentitynumber(); + lpselfname = self.name; + lpattackguid = ""; + lpattackname = ""; + lpselfteam = self.team; + lpselfguid = self getguid(); + lpattackteam = ""; + lpattackorigin = ( 0, 0, 0 ); + lpattacknum = -1; + awardassists = 0; + pixendevent(); + self resetplayermomentumondeath(); + + if ( isplayer( attacker ) ) + { + lpattackguid = attacker getguid(); + lpattackname = attacker.name; + lpattackteam = attacker.team; + lpattackorigin = attacker.origin; + + if ( attacker == self ) + { + dokillcam = 0; + self maps\mp\gametypes_zm\_globallogic_score::incpersstat( "suicides", 1 ); + self.suicides = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "suicides" ); + + if ( smeansofdeath == "MOD_SUICIDE" && shitloc == "none" && self.throwinggrenade ) + self.lastgrenadesuicidetime = gettime(); + + awardassists = 1; + self.suicide = 1; + + if ( isdefined( self.friendlydamage ) ) + { + self iprintln( &"MP_FRIENDLY_FIRE_WILL_NOT" ); + + if ( level.teamkillpointloss ) + { + scoresub = self [[ level.getteamkillscore ]]( einflictor, attacker, smeansofdeath, sweapon ); + maps\mp\gametypes_zm\_globallogic_score::_setplayerscore( attacker, maps\mp\gametypes_zm\_globallogic_score::_getplayerscore( attacker ) - scoresub ); + } + } + } + else + { + pixbeginevent( "PlayerKilled attacker" ); + lpattacknum = attacker getentitynumber(); + dokillcam = 1; + + if ( level.teambased && self.team == attacker.team && smeansofdeath == "MOD_GRENADE" && level.friendlyfire == 0 ) + { + + } + else if ( level.teambased && self.team == attacker.team ) + { + if ( !ignoreteamkills( sweapon, smeansofdeath ) ) + { + teamkill_penalty = self [[ level.getteamkillpenalty ]]( einflictor, attacker, smeansofdeath, sweapon ); + attacker maps\mp\gametypes_zm\_globallogic_score::incpersstat( "teamkills_nostats", teamkill_penalty, 0 ); + attacker maps\mp\gametypes_zm\_globallogic_score::incpersstat( "teamkills", 1 ); + attacker.teamkillsthisround++; + + if ( level.teamkillpointloss ) + { + scoresub = self [[ level.getteamkillscore ]]( einflictor, attacker, smeansofdeath, sweapon ); + maps\mp\gametypes_zm\_globallogic_score::_setplayerscore( attacker, maps\mp\gametypes_zm\_globallogic_score::_getplayerscore( attacker ) - scoresub ); + } + + if ( maps\mp\gametypes_zm\_globallogic_utils::gettimepassed() < 5000 ) + teamkilldelay = 1; + else if ( attacker.pers["teamkills_nostats"] > 1 && maps\mp\gametypes_zm\_globallogic_utils::gettimepassed() < 8000 + attacker.pers["teamkills_nostats"] * 1000 ) + teamkilldelay = 1; + else + teamkilldelay = attacker teamkilldelay(); + + if ( teamkilldelay > 0 ) + { + attacker.teamkillpunish = 1; + attacker suicide(); + + if ( attacker shouldteamkillkick( teamkilldelay ) ) + attacker teamkillkick(); + + attacker thread reduceteamkillsovertime(); + } + } + } + else + { + maps\mp\gametypes_zm\_globallogic_score::inctotalkills( attacker.team ); + attacker thread maps\mp\gametypes_zm\_globallogic_score::givekillstats( smeansofdeath, sweapon, self ); + + if ( isalive( attacker ) ) + { + pixbeginevent( "killstreak" ); + + if ( !isdefined( einflictor ) || !isdefined( einflictor.requireddeathcount ) || attacker.deathcount == einflictor.requireddeathcount ) + { + shouldgivekillstreak = 0; + attacker.pers["cur_total_kill_streak"]++; + attacker setplayercurrentstreak( attacker.pers["cur_total_kill_streak"] ); + + if ( isdefined( level.killstreaks ) && shouldgivekillstreak ) + { + attacker.pers["cur_kill_streak"]++; + + if ( attacker.pers["cur_kill_streak"] >= 3 ) + { + if ( attacker.pers["cur_kill_streak"] <= 30 ) + { + + } + else + { + + } + } + } + } + + pixendevent(); + } + + if ( attacker.pers["cur_kill_streak"] > attacker.kill_streak ) + { + if ( level.rankedmatch ) + attacker setdstat( "HighestStats", "kill_streak", attacker.pers["totalKillstreakCount"] ); + + attacker.kill_streak = attacker.pers["cur_kill_streak"]; + } + + killstreak = undefined; + + if ( isdefined( killstreak ) ) + { + + } + else if ( smeansofdeath == "MOD_HEAD_SHOT" ) + { + + } + else if ( smeansofdeath == "MOD_MELEE" ) + { + if ( sweapon == "riotshield_mp" ) + { + + } + else + { + + } + } + + attacker thread maps\mp\gametypes_zm\_globallogic_score::trackattackerkill( self.name, self.pers["rank"], self.pers["rankxp"], self.pers["prestige"], self getxuid( 1 ) ); + attackername = attacker.name; + self thread maps\mp\gametypes_zm\_globallogic_score::trackattackeedeath( attackername, attacker.pers["rank"], attacker.pers["rankxp"], attacker.pers["prestige"], attacker getxuid( 1 ) ); + attacker thread maps\mp\gametypes_zm\_globallogic_score::inckillstreaktracker( sweapon ); + + if ( level.teambased && attacker.team != "spectator" ) + { + if ( isai( attacker ) ) + maps\mp\gametypes_zm\_globallogic_score::giveteamscore( "kill", attacker.aiteam, attacker, self ); + else + maps\mp\gametypes_zm\_globallogic_score::giveteamscore( "kill", attacker.team, attacker, self ); + } + + scoresub = level.deathpointloss; + + if ( scoresub != 0 ) + maps\mp\gametypes_zm\_globallogic_score::_setplayerscore( self, maps\mp\gametypes_zm\_globallogic_score::_getplayerscore( self ) - scoresub ); + + level thread playkillbattlechatter( attacker, sweapon, self ); + + if ( level.teambased ) + awardassists = 1; + } + + pixendevent(); + } + } + else if ( isdefined( attacker ) && ( attacker.classname == "trigger_hurt" || attacker.classname == "worldspawn" ) ) + { + dokillcam = 0; + lpattacknum = -1; + lpattackguid = ""; + lpattackname = ""; + lpattackteam = "world"; + self maps\mp\gametypes_zm\_globallogic_score::incpersstat( "suicides", 1 ); + self.suicides = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "suicides" ); + awardassists = 1; + } + else + { + dokillcam = 0; + lpattacknum = -1; + lpattackguid = ""; + lpattackname = ""; + lpattackteam = "world"; + + if ( isdefined( einflictor ) && isdefined( einflictor.killcament ) ) + { + dokillcam = 1; + lpattacknum = self getentitynumber(); + } + + if ( isdefined( attacker ) && isdefined( attacker.team ) && isdefined( level.teams[attacker.team] ) ) + { + if ( attacker.team != self.team ) + { + if ( level.teambased ) + maps\mp\gametypes_zm\_globallogic_score::giveteamscore( "kill", attacker.team, attacker, self ); + } + } + + awardassists = 1; + } + + if ( sessionmodeiszombiesgame() ) + awardassists = 0; + + if ( awardassists ) + { + pixbeginevent( "PlayerKilled assists" ); + + if ( isdefined( self.attackers ) ) + { + for ( j = 0; j < self.attackers.size; j++ ) + { + player = self.attackers[j]; + + if ( !isdefined( player ) ) + continue; + + if ( player == attacker ) + continue; + + if ( player.team != lpattackteam ) + continue; + + damage_done = self.attackerdamage[player.clientid].damage; + player thread maps\mp\gametypes_zm\_globallogic_score::processassist( self, damage_done, self.attackerdamage[player.clientid].weapon ); + } + } + + if ( isdefined( self.lastattackedshieldplayer ) && isdefined( self.lastattackedshieldtime ) && self.lastattackedshieldplayer != attacker ) + { + if ( gettime() - self.lastattackedshieldtime < 4000 ) + self.lastattackedshieldplayer thread maps\mp\gametypes_zm\_globallogic_score::processshieldassist( self ); + } + + pixendevent(); + } + + pixbeginevent( "PlayerKilled post constants" ); + self.lastattacker = attacker; + self.lastdeathpos = self.origin; + + if ( isdefined( attacker ) && isplayer( attacker ) && attacker != self && ( !level.teambased || attacker.team != self.team ) ) + self thread maps\mp\_challenges::playerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, shitloc, attackerstance ); + else + self notify( "playerKilledChallengesProcessed" ); + + if ( isdefined( self.attackers ) ) + self.attackers = []; + + if ( isplayer( attacker ) ) + bbprint( "mpattacks", "gametime %d attackerspawnid %d attackerweapon %s attackerx %d attackery %d attackerz %d victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", gettime(), getplayerspawnid( attacker ), sweapon, lpattackorigin, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 1 ); + else + bbprint( "mpattacks", "gametime %d attackerweapon %s victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", gettime(), sweapon, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 1 ); + + logprint( "K;" + lpselfguid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\\n" ); + attackerstring = "none"; + + if ( isplayer( attacker ) ) + attackerstring = attacker getxuid() + "(" + lpattackname + ")"; + + self logstring( "d " + smeansofdeath + "(" + sweapon + ") a:" + attackerstring + " d:" + idamage + " l:" + shitloc + " @ " + int( self.origin[0] ) + " " + int( self.origin[1] ) + " " + int( self.origin[2] ) ); + level thread maps\mp\gametypes_zm\_globallogic::updateteamstatus(); + killcamentity = self getkillcamentity( attacker, einflictor, sweapon ); + killcamentityindex = -1; + killcamentitystarttime = 0; + + if ( isdefined( killcamentity ) ) + { + killcamentityindex = killcamentity getentitynumber(); + + if ( isdefined( killcamentity.starttime ) ) + killcamentitystarttime = killcamentity.starttime; + else + killcamentitystarttime = killcamentity.birthtime; + + if ( !isdefined( killcamentitystarttime ) ) + killcamentitystarttime = 0; + } + + if ( isdefined( self.killstreak_waitamount ) && self.killstreak_waitamount > 0 ) + dokillcam = 0; + + self maps\mp\gametypes_zm\_weapons::detachcarryobjectmodel(); + died_in_vehicle = 0; + + if ( isdefined( self.diedonvehicle ) ) + died_in_vehicle = self.diedonvehicle; + + pixendevent(); + pixbeginevent( "PlayerKilled body and gibbing" ); + + if ( !died_in_vehicle ) + { + vattackerorigin = undefined; + + if ( isdefined( attacker ) ) + vattackerorigin = attacker.origin; + + ragdoll_now = 0; + + if ( isdefined( self.usingvehicle ) && self.usingvehicle && isdefined( self.vehicleposition ) && self.vehicleposition == 1 ) + ragdoll_now = 1; + + body = self cloneplayer( deathanimduration ); + self createdeadbody( idamage, smeansofdeath, sweapon, shitloc, vdir, vattackerorigin, deathanimduration, einflictor, ragdoll_now, body ); + } + + pixendevent(); + thread maps\mp\gametypes_zm\_globallogic_spawn::spawnqueuedclient( self.team, attacker ); + self.switching_teams = undefined; + self.joining_team = undefined; + self.leaving_team = undefined; + self thread [[ level.onplayerkilled ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); + + for ( icb = 0; icb < level.onplayerkilledextraunthreadedcbs.size; icb++ ) + self [[ level.onplayerkilledextraunthreadedcbs[icb] ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); + + self.wantsafespawn = 0; + perks = []; + killstreaks = maps\mp\gametypes_zm\_globallogic::getkillstreaks( attacker ); + + if ( !isdefined( self.killstreak_waitamount ) ) + self thread [[ level.spawnplayerprediction ]](); + + profilelog_endtiming( 7, "gs=" + game["state"] + " zom=" + sessionmodeiszombiesgame() ); + wait 0.25; + weaponclass = getweaponclass( sweapon ); + self.cancelkillcam = 0; + defaultplayerdeathwatchtime = 1.75; + + if ( isdefined( level.overrideplayerdeathwatchtimer ) ) + defaultplayerdeathwatchtime = [[ level.overrideplayerdeathwatchtimer ]]( defaultplayerdeathwatchtime ); + + maps\mp\gametypes_zm\_globallogic_utils::waitfortimeornotifies( defaultplayerdeathwatchtime ); + self notify( "death_delay_finished" ); +/# + if ( getdvarint( _hash_C1849218 ) != 0 ) + { + dokillcam = 1; + + if ( lpattacknum < 0 ) + lpattacknum = self getentitynumber(); + } +#/ + if ( game["state"] != "playing" ) + return; + + self.respawntimerstarttime = gettime(); + + if ( !self.cancelkillcam && dokillcam && level.killcam ) + { + livesleft = !( level.numlives && !self.pers["lives"] ); + timeuntilspawn = maps\mp\gametypes_zm\_globallogic_spawn::timeuntilspawn( 1 ); + willrespawnimmediately = livesleft && timeuntilspawn <= 0 && !level.playerqueuedrespawn; + } + + if ( game["state"] != "playing" ) + { + self.sessionstate = "dead"; + self.spectatorclient = -1; + self.killcamtargetentity = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + return; + } + + waittillkillstreakdone(); + + if ( maps\mp\gametypes_zm\_globallogic_utils::isvalidclass( self.class ) ) + { + timepassed = undefined; + + if ( isdefined( self.respawntimerstarttime ) ) + timepassed = ( gettime() - self.respawntimerstarttime ) / 1000; + + self thread [[ level.spawnclient ]]( timepassed ); + self.respawntimerstarttime = undefined; + } +} + +updateglobalbotkilledcounter() +{ + if ( isdefined( self.pers["isBot"] ) ) + level.globallarryskilled++; +} + +waittillkillstreakdone() +{ + if ( isdefined( self.killstreak_waitamount ) ) + { + starttime = gettime(); + waittime = self.killstreak_waitamount * 1000; + + while ( gettime() < starttime + waittime && isdefined( self.killstreak_waitamount ) ) + wait 0.1; + + wait 2.0; + self.killstreak_waitamount = undefined; + } +} + +teamkillkick() +{ + self maps\mp\gametypes_zm\_globallogic_score::incpersstat( "sessionbans", 1 ); + self endon( "disconnect" ); + waittillframeend; + playlistbanquantum = maps\mp\gametypes_zm\_tweakables::gettweakablevalue( "team", "teamkillerplaylistbanquantum" ); + playlistbanpenalty = maps\mp\gametypes_zm\_tweakables::gettweakablevalue( "team", "teamkillerplaylistbanpenalty" ); + + if ( playlistbanquantum > 0 && playlistbanpenalty > 0 ) + { + timeplayedtotal = self getdstat( "playerstatslist", "time_played_total", "StatValue" ); + minutesplayed = timeplayedtotal / 60; + freebees = 2; + banallowance = int( floor( minutesplayed / playlistbanquantum ) ) + freebees; + + if ( self.sessionbans > banallowance ) + self setdstat( "playerstatslist", "gametypeban", "StatValue", timeplayedtotal + playlistbanpenalty * 60 ); + } + + if ( self is_bot() ) + level notify( "bot_kicked", self.team ); + + ban( self getentitynumber() ); + maps\mp\gametypes_zm\_globallogic_audio::leaderdialog( "kicked" ); +} + +teamkilldelay() +{ + teamkills = self.pers["teamkills_nostats"]; + + if ( level.minimumallowedteamkills < 0 || teamkills <= level.minimumallowedteamkills ) + return 0; + + exceeded = teamkills - level.minimumallowedteamkills; + return level.teamkillspawndelay * exceeded; +} + +shouldteamkillkick( teamkilldelay ) +{ + if ( teamkilldelay && level.minimumallowedteamkills >= 0 ) + { + if ( maps\mp\gametypes_zm\_globallogic_utils::gettimepassed() >= 5000 ) + return true; + + if ( self.pers["teamkills_nostats"] > 1 ) + return true; + } + + return false; +} + +reduceteamkillsovertime() +{ + timeperoneteamkillreduction = 20.0; + reductionpersecond = 1.0 / timeperoneteamkillreduction; + + while ( true ) + { + if ( isalive( self ) ) + { + self.pers["teamkills_nostats"] -= reductionpersecond; + + if ( self.pers["teamkills_nostats"] < level.minimumallowedteamkills ) + { + self.pers["teamkills_nostats"] = level.minimumallowedteamkills; + break; + } + } + + wait 1; + } +} + +ignoreteamkills( sweapon, smeansofdeath ) +{ + if ( sessionmodeiszombiesgame() ) + return true; + + if ( smeansofdeath == "MOD_MELEE" ) + return false; + + if ( sweapon == "briefcase_bomb_mp" ) + return true; + + if ( sweapon == "supplydrop_mp" ) + return true; + + return false; +} + +callback_playerlaststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + +} + +damageshellshockandrumble( eattacker, einflictor, sweapon, smeansofdeath, idamage ) +{ + self thread maps\mp\gametypes_zm\_weapons::onweapondamage( eattacker, einflictor, sweapon, smeansofdeath, idamage ); + self playrumbleonentity( "damage_heavy" ); +} + +createdeadbody( idamage, smeansofdeath, sweapon, shitloc, vdir, vattackerorigin, deathanimduration, einflictor, ragdoll_jib, body ) +{ + if ( smeansofdeath == "MOD_HIT_BY_OBJECT" && self getstance() == "prone" ) + { + self.body = body; + return; + } + + if ( isdefined( level.ragdoll_override ) && self [[ level.ragdoll_override ]]() ) + return; + + if ( ragdoll_jib || self isonladder() || self ismantling() || smeansofdeath == "MOD_CRUSH" || smeansofdeath == "MOD_HIT_BY_OBJECT" ) + body startragdoll(); + + if ( !self isonground() ) + { + if ( getdvarint( "scr_disable_air_death_ragdoll" ) == 0 ) + body startragdoll(); + } + + if ( self is_explosive_ragdoll( sweapon, einflictor ) ) + body start_explosive_ragdoll( vdir, sweapon ); + + thread delaystartragdoll( body, shitloc, vdir, sweapon, einflictor, smeansofdeath ); + self.body = body; +} + +is_explosive_ragdoll( weapon, inflictor ) +{ + if ( !isdefined( weapon ) ) + return false; + + if ( weapon == "destructible_car_mp" || weapon == "explodable_barrel_mp" ) + return true; + + if ( weapon == "sticky_grenade_mp" || weapon == "explosive_bolt_mp" ) + { + if ( isdefined( inflictor ) && isdefined( inflictor.stucktoplayer ) ) + { + if ( inflictor.stucktoplayer == self ) + return true; + } + } + + return false; +} + +start_explosive_ragdoll( dir, weapon ) +{ + if ( !isdefined( self ) ) + return; + + x = randomintrange( 50, 100 ); + y = randomintrange( 50, 100 ); + z = randomintrange( 10, 20 ); + + if ( isdefined( weapon ) && ( weapon == "sticky_grenade_mp" || weapon == "explosive_bolt_mp" ) ) + { + if ( isdefined( dir ) && lengthsquared( dir ) > 0 ) + { + x = dir[0] * x; + y = dir[1] * y; + } + } + else + { + if ( cointoss() ) + x *= -1; + + if ( cointoss() ) + y *= -1; + } + + self startragdoll(); + self launchragdoll( ( x, y, z ) ); +} + +notifyconnecting() +{ + waittillframeend; + + if ( isdefined( self ) ) + level notify( "connecting", self ); +} + +delaystartragdoll( ent, shitloc, vdir, sweapon, einflictor, smeansofdeath ) +{ + if ( isdefined( ent ) ) + { + deathanim = ent getcorpseanim(); + + if ( animhasnotetrack( deathanim, "ignore_ragdoll" ) ) + return; + } + + if ( level.oldschool ) + { + if ( !isdefined( vdir ) ) + vdir = ( 0, 0, 0 ); + + explosionpos = ent.origin + ( 0, 0, maps\mp\gametypes_zm\_globallogic_utils::gethitlocheight( shitloc ) ); + explosionpos -= vdir * 20; + explosionradius = 40; + explosionforce = 0.75; + + if ( smeansofdeath == "MOD_IMPACT" || smeansofdeath == "MOD_EXPLOSIVE" || issubstr( smeansofdeath, "MOD_GRENADE" ) || issubstr( smeansofdeath, "MOD_PROJECTILE" ) || shitloc == "head" || shitloc == "helmet" ) + explosionforce = 2.5; + + ent startragdoll( 1 ); + wait 0.05; + + if ( !isdefined( ent ) ) + return; + + physicsexplosionsphere( explosionpos, explosionradius, explosionradius / 2, explosionforce ); + return; + } + + wait 0.2; + + if ( !isdefined( ent ) ) + return; + + if ( ent isragdoll() ) + return; + + deathanim = ent getcorpseanim(); + startfrac = 0.35; + + if ( animhasnotetrack( deathanim, "start_ragdoll" ) ) + { + times = getnotetracktimes( deathanim, "start_ragdoll" ); + + if ( isdefined( times ) ) + startfrac = times[0]; + } + + waittime = startfrac * getanimlength( deathanim ); + wait( waittime ); + + if ( isdefined( ent ) ) + ent startragdoll( 1 ); +} + +trackattackerdamage( eattacker, idamage, smeansofdeath, sweapon ) +{ + assert( isplayer( eattacker ) ); + + if ( self.attackerdata.size == 0 ) + self.firsttimedamaged = gettime(); + + if ( !isdefined( self.attackerdata[eattacker.clientid] ) ) + { + self.attackerdamage[eattacker.clientid] = spawnstruct(); + self.attackerdamage[eattacker.clientid].damage = idamage; + self.attackerdamage[eattacker.clientid].meansofdeath = smeansofdeath; + self.attackerdamage[eattacker.clientid].weapon = sweapon; + self.attackerdamage[eattacker.clientid].time = gettime(); + self.attackers[self.attackers.size] = eattacker; + self.attackerdata[eattacker.clientid] = 0; + } + else + { + self.attackerdamage[eattacker.clientid].damage += idamage; + self.attackerdamage[eattacker.clientid].meansofdeath = smeansofdeath; + self.attackerdamage[eattacker.clientid].weapon = sweapon; + + if ( !isdefined( self.attackerdamage[eattacker.clientid].time ) ) + self.attackerdamage[eattacker.clientid].time = gettime(); + } + + self.attackerdamage[eattacker.clientid].lasttimedamaged = gettime(); + + if ( maps\mp\gametypes_zm\_weapons::isprimaryweapon( sweapon ) ) + self.attackerdata[eattacker.clientid] = 1; +} + +giveinflictorownerassist( eattacker, einflictor, idamage, smeansofdeath, sweapon ) +{ + if ( !isdefined( einflictor ) ) + return; + + if ( !isdefined( einflictor.owner ) ) + return; + + if ( !isdefined( einflictor.ownergetsassist ) ) + return; + + if ( !einflictor.ownergetsassist ) + return; + + assert( isplayer( einflictor.owner ) ); + self trackattackerdamage( einflictor.owner, idamage, smeansofdeath, sweapon ); +} + +updatemeansofdeath( sweapon, smeansofdeath ) +{ + switch ( sweapon ) + { + case "knife_ballistic_mp": + case "crossbow_mp": + if ( smeansofdeath != "MOD_HEAD_SHOT" && smeansofdeath != "MOD_MELEE" ) + smeansofdeath = "MOD_PISTOL_BULLET"; + + break; + case "dog_bite_mp": + smeansofdeath = "MOD_PISTOL_BULLET"; + break; + case "destructible_car_mp": + smeansofdeath = "MOD_EXPLOSIVE"; + break; + case "explodable_barrel_mp": + smeansofdeath = "MOD_EXPLOSIVE"; + break; + } + + return smeansofdeath; +} + +updateattacker( attacker, weapon ) +{ + if ( isai( attacker ) && isdefined( attacker.script_owner ) ) + { + if ( !level.teambased || attacker.script_owner.team != self.team ) + attacker = attacker.script_owner; + } + + if ( attacker.classname == "script_vehicle" && isdefined( attacker.owner ) ) + { + attacker notify( "killed", self ); + attacker = attacker.owner; + } + + if ( isai( attacker ) ) + attacker notify( "killed", self ); + + if ( isdefined( self.capturinglastflag ) && self.capturinglastflag == 1 ) + attacker.lastcapkiller = 1; + + if ( isdefined( attacker ) && isdefined( weapon ) && weapon == "planemortar_mp" ) + { + if ( !isdefined( attacker.planemortarbda ) ) + attacker.planemortarbda = 0; + + attacker.planemortarbda++; + } + + return attacker; +} + +updateinflictor( einflictor ) +{ + if ( isdefined( einflictor ) && einflictor.classname == "script_vehicle" ) + { + einflictor notify( "killed", self ); + + if ( isdefined( einflictor.bda ) ) + einflictor.bda++; + } + + return einflictor; +} + +updateweapon( einflictor, sweapon ) +{ + if ( sweapon == "none" && isdefined( einflictor ) ) + { + if ( isdefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) + sweapon = "explodable_barrel_mp"; + else if ( isdefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) + sweapon = "destructible_car_mp"; + } + + return sweapon; +} + +getclosestkillcamentity( attacker, killcamentities, depth = 0 ) +{ + closestkillcament = undefined; + closestkillcamentindex = undefined; + closestkillcamentdist = undefined; + origin = undefined; + + foreach ( killcamentindex, killcament in killcamentities ) + { + if ( killcament == attacker ) + continue; + + origin = killcament.origin; + + if ( isdefined( killcament.offsetpoint ) ) + origin += killcament.offsetpoint; + + dist = distancesquared( self.origin, origin ); + + if ( !isdefined( closestkillcament ) || dist < closestkillcamentdist ) + { + closestkillcament = killcament; + closestkillcamentdist = dist; + closestkillcamentindex = killcamentindex; + } + } + + if ( depth < 3 && isdefined( closestkillcament ) ) + { + if ( !bullettracepassed( closestkillcament.origin, self.origin, 0, self ) ) + { + killcamentities[closestkillcamentindex] = undefined; + betterkillcament = getclosestkillcamentity( attacker, killcamentities, depth + 1 ); + + if ( isdefined( betterkillcament ) ) + closestkillcament = betterkillcament; + } + } + + return closestkillcament; +} + +getkillcamentity( attacker, einflictor, sweapon ) +{ + if ( !isdefined( einflictor ) ) + return undefined; + + if ( einflictor == attacker ) + { + if ( !isdefined( einflictor.ismagicbullet ) ) + return undefined; + + if ( isdefined( einflictor.ismagicbullet ) && !einflictor.ismagicbullet ) + return undefined; + } + else if ( isdefined( level.levelspecifickillcam ) ) + { + levelspecifickillcament = self [[ level.levelspecifickillcam ]](); + + if ( isdefined( levelspecifickillcament ) ) + return levelspecifickillcament; + } + + if ( sweapon == "m220_tow_mp" ) + return undefined; + + if ( isdefined( einflictor.killcament ) ) + { + if ( einflictor.killcament == attacker ) + return undefined; + + return einflictor.killcament; + } + else if ( isdefined( einflictor.killcamentities ) ) + return getclosestkillcamentity( attacker, einflictor.killcamentities ); + + if ( isdefined( einflictor.script_gameobjectname ) && einflictor.script_gameobjectname == "bombzone" ) + return einflictor.killcament; + + return einflictor; +} + +playkillbattlechatter( attacker, sweapon, victim ) +{ + +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_score.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_score.gsc new file mode 100644 index 0000000..a6fcf15 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_score.gsc @@ -0,0 +1,785 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\_bb; +#include maps\mp\gametypes_zm\_globallogic; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\gametypes_zm\_globallogic_audio; +#include maps\mp\_challenges; +#include maps\mp\gametypes_zm\_globallogic_utils; + +updatematchbonusscores( winner ) +{ + +} + +givematchbonus( scoretype, score ) +{ + +} + +doskillupdate( winner ) +{ + skillupdate( winner, level.teambased ); +} + +gethighestscoringplayer() +{ + players = level.players; + winner = undefined; + tie = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i].score ) ) + continue; + + if ( players[i].score < 1 ) + continue; + + if ( !isdefined( winner ) || players[i].score > winner.score ) + { + winner = players[i]; + tie = 0; + continue; + } + + if ( players[i].score == winner.score ) + tie = 1; + } + + if ( tie || !isdefined( winner ) ) + return undefined; + else + return winner; +} + +resetscorechain() +{ + self notify( "reset_score_chain" ); + self.scorechain = 0; + self.rankupdatetotal = 0; +} + +scorechaintimer() +{ + self notify( "score_chain_timer" ); + self endon( "reset_score_chain" ); + self endon( "score_chain_timer" ); + self endon( "death" ); + self endon( "disconnect" ); + wait 20; + self thread resetscorechain(); +} + +roundtonearestfive( score ) +{ + rounding = score % 5; + + if ( rounding <= 2 ) + return score - rounding; + else + return score + 5 - rounding; +} + +giveplayermomentumnotification( score, label, descvalue, countstowardrampage ) +{ + rampagebonus = 0; + + if ( isdefined( level.usingrampage ) && level.usingrampage ) + { + if ( countstowardrampage ) + { + if ( !isdefined( self.scorechain ) ) + self.scorechain = 0; + + self.scorechain++; + self thread scorechaintimer(); + } + + if ( isdefined( self.scorechain ) && self.scorechain >= 999 ) + rampagebonus = roundtonearestfive( int( score * level.rampagebonusscale + 0.5 ) ); + } + + if ( score != 0 ) + self luinotifyevent( &"score_event", 3, label, score, rampagebonus ); + + score += rampagebonus; + + if ( score > 0 && self hasperk( "specialty_earnmoremomentum" ) ) + score = roundtonearestfive( int( score * getdvarfloat( "perk_killstreakMomentumMultiplier" ) + 0.5 ) ); + + _setplayermomentum( self, self.pers["momentum"] + score ); +} + +resetplayermomentumondeath() +{ + if ( isdefined( level.usingscorestreaks ) && level.usingscorestreaks ) + { + _setplayermomentum( self, 0 ); + self thread resetscorechain(); + } +} + +giveplayermomentum( event, player, victim, weapon, descvalue ) +{ + +} + +giveplayerscore( event, player, victim, weapon, descvalue ) +{ + scorediff = 0; + momentum = player.pers["momentum"]; + giveplayermomentum( event, player, victim, weapon, descvalue ); + newmomentum = player.pers["momentum"]; + + if ( level.overrideplayerscore ) + return 0; + + pixbeginevent( "level.onPlayerScore" ); + score = player.pers["score"]; + [[ level.onplayerscore ]]( event, player, victim ); + newscore = player.pers["score"]; + pixendevent(); + bbprint( "mpplayerscore", "spawnid %d gametime %d type %s player %s delta %d deltamomentum %d team %s", getplayerspawnid( player ), gettime(), event, player.name, newscore - score, newmomentum - momentum, player.team ); + player maps\mp\_bb::bbaddtostat( "score", newscore - score ); + + if ( score == newscore ) + return 0; + + pixbeginevent( "givePlayerScore" ); + recordplayerstats( player, "score", newscore ); + scorediff = newscore - score; + player addplayerstatwithgametype( "score", scorediff ); + + if ( isdefined( player.pers["lastHighestScore"] ) && newscore > player.pers["lastHighestScore"] ) + player setdstat( "HighestStats", "highest_score", newscore ); + + pixendevent(); + return scorediff; +} + +default_onplayerscore( event, player, victim ) +{ + +} + +_setplayerscore( player, score ) +{ + +} + +_getplayerscore( player ) +{ + return player.pers["score"]; +} + +_setplayermomentum( player, momentum ) +{ + momentum = clamp( momentum, 0, 2000 ); + oldmomentum = player.pers["momentum"]; + + if ( momentum == oldmomentum ) + return; + + player maps\mp\_bb::bbaddtostat( "momentum", momentum - oldmomentum ); + + if ( momentum > oldmomentum ) + { + highestmomentumcost = 0; + numkillstreaks = player.killstreak.size; + killstreaktypearray = []; + } + + player.pers["momentum"] = momentum; + player.momentum = player.pers["momentum"]; +} + +_giveplayerkillstreakinternal( player, momentum, oldmomentum, killstreaktypearray ) +{ + +} + +setplayermomentumdebug() +{ +/# + setdvar( "sv_momentumPercent", 0.0 ); + + while ( true ) + { + wait 1; + momentumpercent = getdvarfloatdefault( "sv_momentumPercent", 0.0 ); + + if ( momentumpercent != 0.0 ) + { + player = gethostplayer(); + + if ( !isdefined( player ) ) + return; + + if ( isdefined( player.killstreak ) ) + _setplayermomentum( player, int( 2000 * momentumpercent / 100 ) ); + } + } +#/ +} + +giveteamscore( event, team, player, victim ) +{ + if ( level.overrideteamscore ) + return; + + pixbeginevent( "level.onTeamScore" ); + teamscore = game["teamScores"][team]; + [[ level.onteamscore ]]( event, team ); + pixendevent(); + newscore = game["teamScores"][team]; + bbprint( "mpteamscores", "gametime %d event %s team %d diff %d score %d", gettime(), event, team, newscore - teamscore, newscore ); + + if ( teamscore == newscore ) + return; + + updateteamscores( team ); + thread maps\mp\gametypes_zm\_globallogic::checkscorelimit(); +} + +giveteamscoreforobjective( team, score ) +{ + teamscore = game["teamScores"][team]; + onteamscore( score, team ); + newscore = game["teamScores"][team]; + bbprint( "mpteamobjscores", "gametime %d team %d diff %d score %d", gettime(), team, newscore - teamscore, newscore ); + + if ( teamscore == newscore ) + return; + + updateteamscores( team ); + thread maps\mp\gametypes_zm\_globallogic::checkscorelimit(); +} + +_setteamscore( team, teamscore ) +{ + if ( teamscore == game["teamScores"][team] ) + return; + + game["teamScores"][team] = teamscore; + updateteamscores( team ); + thread maps\mp\gametypes_zm\_globallogic::checkscorelimit(); +} + +resetteamscores() +{ + if ( !isdefined( level.roundscorecarry ) || level.roundscorecarry == 0 || maps\mp\_utility::isfirstround() ) + { + foreach ( team in level.teams ) + game["teamScores"][team] = 0; + } + + maps\mp\gametypes_zm\_globallogic_score::updateallteamscores(); +} + +resetallscores() +{ + resetteamscores(); + resetplayerscores(); +} + +resetplayerscores() +{ + players = level.players; + winner = undefined; + tie = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].pers["score"] ) ) + _setplayerscore( players[i], 0 ); + } +} + +updateteamscores( team ) +{ + setteamscore( team, game["teamScores"][team] ); + level thread maps\mp\gametypes_zm\_globallogic::checkteamscorelimitsoon( team ); +} + +updateallteamscores() +{ + foreach ( team in level.teams ) + updateteamscores( team ); +} + +_getteamscore( team ) +{ + return game["teamScores"][team]; +} + +gethighestteamscoreteam() +{ + score = 0; + winning_teams = []; + + foreach ( team in level.teams ) + { + team_score = game["teamScores"][team]; + + if ( team_score > score ) + { + score = team_score; + winning_teams = []; + } + + if ( team_score == score ) + winning_teams[team] = team; + } + + return winning_teams; +} + +areteamarraysequal( teamsa, teamsb ) +{ + if ( teamsa.size != teamsb.size ) + return false; + + foreach ( team in teamsa ) + { + if ( !isdefined( teamsb[team] ) ) + return false; + } + + return true; +} + +onteamscore( score, team ) +{ + game["teamScores"][team] += score; + + if ( level.scorelimit && game["teamScores"][team] > level.scorelimit ) + game["teamScores"][team] = level.scorelimit; + + if ( level.splitscreen ) + return; + + if ( level.scorelimit == 1 ) + return; + + iswinning = gethighestteamscoreteam(); + + if ( iswinning.size == 0 ) + return; + + if ( gettime() - level.laststatustime < 5000 ) + return; + + if ( areteamarraysequal( iswinning, level.waswinning ) ) + return; + + level.laststatustime = gettime(); + + if ( iswinning.size == 1 ) + { + foreach ( team in iswinning ) + { + if ( isdefined( level.waswinning[team] ) ) + { + if ( level.waswinning.size == 1 ) + continue; + } + + maps\mp\gametypes_zm\_globallogic_audio::leaderdialog( "lead_taken", team, "status" ); + } + } + + if ( level.waswinning.size == 1 ) + { + foreach ( team in level.waswinning ) + { + if ( isdefined( iswinning[team] ) ) + { + if ( iswinning.size == 1 ) + continue; + + if ( level.waswinning.size > 1 ) + continue; + } + + maps\mp\gametypes_zm\_globallogic_audio::leaderdialog( "lead_lost", team, "status" ); + } + } + + level.waswinning = iswinning; +} + +default_onteamscore( event, team ) +{ + +} + +initpersstat( dataname, record_stats, init_to_stat_value ) +{ + if ( !isdefined( self.pers[dataname] ) ) + self.pers[dataname] = 0; + + if ( !isdefined( record_stats ) || record_stats == 1 ) + recordplayerstats( self, dataname, int( self.pers[dataname] ) ); + + if ( isdefined( init_to_stat_value ) && init_to_stat_value == 1 ) + self.pers[dataname] = self getdstat( "PlayerStatsList", dataname, "StatValue" ); +} + +getpersstat( dataname ) +{ + return self.pers[dataname]; +} + +incpersstat( dataname, increment, record_stats, includegametype ) +{ + pixbeginevent( "incPersStat" ); + self.pers[dataname] += increment; + + if ( isdefined( includegametype ) && includegametype ) + self addplayerstatwithgametype( dataname, increment ); + else + self addplayerstat( dataname, increment ); + + if ( !isdefined( record_stats ) || record_stats == 1 ) + self thread threadedrecordplayerstats( dataname ); + + pixendevent(); +} + +threadedrecordplayerstats( dataname ) +{ + self endon( "disconnect" ); + waittillframeend; + recordplayerstats( self, dataname, self.pers[dataname] ); +} + +updatewinstats( winner ) +{ + +} + +updatelossstats( loser ) +{ + loser addplayerstatwithgametype( "losses", 1 ); + loser updatestatratio( "wlratio", "wins", "losses" ); + loser notify( "loss" ); +} + +updatetiestats( loser ) +{ + loser addplayerstatwithgametype( "losses", -1 ); + loser addplayerstatwithgametype( "ties", 1 ); + loser updatestatratio( "wlratio", "wins", "losses" ); + loser setdstat( "playerstatslist", "cur_win_streak", "StatValue", 0 ); + loser notify( "tie" ); +} + +updatewinlossstats( winner ) +{ + if ( !waslastround() && !level.hostforcedend ) + return; + + players = level.players; + + if ( !isdefined( winner ) || isdefined( winner ) && !isplayer( winner ) && winner == "tie" ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i].pers["team"] ) ) + continue; + + if ( level.hostforcedend && players[i] ishost() ) + continue; + + updatetiestats( players[i] ); + } + } + else if ( isplayer( winner ) ) + { + if ( level.hostforcedend && winner ishost() ) + return; + + updatewinstats( winner ); + } + else + { + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i].pers["team"] ) ) + continue; + + if ( level.hostforcedend && players[i] ishost() ) + continue; + + if ( winner == "tie" ) + { + updatetiestats( players[i] ); + continue; + } + + if ( players[i].pers["team"] == winner ) + { + updatewinstats( players[i] ); + continue; + } + + players[i] setdstat( "playerstatslist", "cur_win_streak", "StatValue", 0 ); + } + } +} + +backupandclearwinstreaks() +{ + +} + +restorewinstreaks( winner ) +{ + +} + +inckillstreaktracker( sweapon ) +{ + self endon( "disconnect" ); + waittillframeend; + + if ( sweapon == "artillery_mp" ) + self.pers["artillery_kills"]++; + + if ( sweapon == "dog_bite_mp" ) + self.pers["dog_kills"]++; +} + +trackattackerkill( name, rank, xp, prestige, xuid ) +{ + self endon( "disconnect" ); + attacker = self; + waittillframeend; + pixbeginevent( "trackAttackerKill" ); + + if ( !isdefined( attacker.pers["killed_players"][name] ) ) + attacker.pers["killed_players"][name] = 0; + + if ( !isdefined( attacker.killedplayerscurrent[name] ) ) + attacker.killedplayerscurrent[name] = 0; + + if ( !isdefined( attacker.pers["nemesis_tracking"][name] ) ) + attacker.pers["nemesis_tracking"][name] = 0; + + attacker.pers["killed_players"][name]++; + attacker.killedplayerscurrent[name]++; + attacker.pers["nemesis_tracking"][name] += 1.0; + + if ( attacker.pers["nemesis_name"] == name ) + attacker maps\mp\_challenges::killednemesis(); + + if ( attacker.pers["nemesis_name"] == "" || attacker.pers["nemesis_tracking"][name] > attacker.pers["nemesis_tracking"][attacker.pers["nemesis_name"]] ) + { + attacker.pers["nemesis_name"] = name; + attacker.pers["nemesis_rank"] = rank; + attacker.pers["nemesis_rankIcon"] = prestige; + attacker.pers["nemesis_xp"] = xp; + attacker.pers["nemesis_xuid"] = xuid; + } + else if ( isdefined( attacker.pers["nemesis_name"] ) && attacker.pers["nemesis_name"] == name ) + { + attacker.pers["nemesis_rank"] = rank; + attacker.pers["nemesis_xp"] = xp; + } + + pixendevent(); +} + +trackattackeedeath( attackername, rank, xp, prestige, xuid ) +{ + self endon( "disconnect" ); + waittillframeend; + pixbeginevent( "trackAttackeeDeath" ); + + if ( !isdefined( self.pers["killed_by"][attackername] ) ) + self.pers["killed_by"][attackername] = 0; + + self.pers["killed_by"][attackername]++; + + if ( !isdefined( self.pers["nemesis_tracking"][attackername] ) ) + self.pers["nemesis_tracking"][attackername] = 0; + + self.pers["nemesis_tracking"][attackername] += 1.5; + + if ( self.pers["nemesis_name"] == "" || self.pers["nemesis_tracking"][attackername] > self.pers["nemesis_tracking"][self.pers["nemesis_name"]] ) + { + self.pers["nemesis_name"] = attackername; + self.pers["nemesis_rank"] = rank; + self.pers["nemesis_rankIcon"] = prestige; + self.pers["nemesis_xp"] = xp; + self.pers["nemesis_xuid"] = xuid; + } + else if ( isdefined( self.pers["nemesis_name"] ) && self.pers["nemesis_name"] == attackername ) + { + self.pers["nemesis_rank"] = rank; + self.pers["nemesis_xp"] = xp; + } + + if ( self.pers["nemesis_name"] == attackername && self.pers["nemesis_tracking"][attackername] >= 2 ) + self setclientuivisibilityflag( "killcam_nemesis", 1 ); + else + self setclientuivisibilityflag( "killcam_nemesis", 0 ); + + pixendevent(); +} + +default_iskillboosting() +{ + return 0; +} + +givekillstats( smeansofdeath, sweapon, evictim ) +{ + self endon( "disconnect" ); + waittillframeend; + + if ( level.rankedmatch && self [[ level.iskillboosting ]]() ) + { +/# + self iprintlnbold( "GAMETYPE DEBUG: NOT GIVING YOU OFFENSIVE CREDIT AS BOOSTING PREVENTION" ); +#/ + return; + } + + pixbeginevent( "giveKillStats" ); + self maps\mp\gametypes_zm\_globallogic_score::incpersstat( "kills", 1, 1, 1 ); + self.kills = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "kills" ); + self updatestatratio( "kdratio", "kills", "deaths" ); + attacker = self; + + if ( smeansofdeath == "MOD_HEAD_SHOT" ) + { + attacker thread incpersstat( "headshots", 1, 1, 0 ); + attacker.headshots = attacker.pers["headshots"]; + evictim recordkillmodifier( "headshot" ); + } + + pixendevent(); +} + +inctotalkills( team ) +{ + if ( level.teambased && isdefined( level.teams[team] ) ) + game["totalKillsTeam"][team]++; + + game["totalKills"]++; +} + +setinflictorstat( einflictor, eattacker, sweapon ) +{ + if ( !isdefined( eattacker ) ) + return; + + if ( !isdefined( einflictor ) ) + { + eattacker addweaponstat( sweapon, "hits", 1 ); + return; + } + + if ( !isdefined( einflictor.playeraffectedarray ) ) + einflictor.playeraffectedarray = []; + + foundnewplayer = 1; + + for ( i = 0; i < einflictor.playeraffectedarray.size; i++ ) + { + if ( einflictor.playeraffectedarray[i] == self ) + { + foundnewplayer = 0; + break; + } + } + + if ( foundnewplayer ) + { + einflictor.playeraffectedarray[einflictor.playeraffectedarray.size] = self; + + if ( sweapon == "concussion_grenade_mp" || sweapon == "tabun_gas_mp" ) + eattacker addweaponstat( sweapon, "used", 1 ); + + eattacker addweaponstat( sweapon, "hits", 1 ); + } +} + +processshieldassist( killedplayer ) +{ + self endon( "disconnect" ); + killedplayer endon( "disconnect" ); + wait 0.05; + maps\mp\gametypes_zm\_globallogic_utils::waittillslowprocessallowed(); + + if ( !isdefined( level.teams[self.pers["team"]] ) ) + return; + + if ( self.pers["team"] == killedplayer.pers["team"] ) + return; + + if ( !level.teambased ) + return; + + self maps\mp\gametypes_zm\_globallogic_score::incpersstat( "assists", 1, 1, 1 ); + self.assists = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "assists" ); +} + +processassist( killedplayer, damagedone, weapon ) +{ + self endon( "disconnect" ); + killedplayer endon( "disconnect" ); + wait 0.05; + maps\mp\gametypes_zm\_globallogic_utils::waittillslowprocessallowed(); + + if ( !isdefined( level.teams[self.pers["team"]] ) ) + return; + + if ( self.pers["team"] == killedplayer.pers["team"] ) + return; + + if ( !level.teambased ) + return; + + assist_level = "assist"; + assist_level_value = int( ceil( damagedone / 25 ) ); + + if ( assist_level_value < 1 ) + assist_level_value = 1; + else if ( assist_level_value > 3 ) + assist_level_value = 3; + + assist_level = assist_level + "_" + assist_level_value * 25; + self maps\mp\gametypes_zm\_globallogic_score::incpersstat( "assists", 1, 1, 1 ); + self.assists = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "assists" ); + + switch ( weapon ) + { + case "concussion_grenade_mp": + assist_level = "assist_concussion"; + break; + case "flash_grenade_mp": + assist_level = "assist_flash"; + break; + case "emp_grenade_mp": + assist_level = "assist_emp"; + break; + case "proximity_grenade_mp": + case "proximity_grenade_aoe_mp": + assist_level = "assist_proximity"; + break; + } + + self maps\mp\_challenges::assisted(); +} + +xpratethread() +{ +/# + +#/ +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_spawn.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_spawn.gsc new file mode 100644 index 0000000..95cbb36 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_spawn.gsc @@ -0,0 +1,878 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_globallogic_player; +#include maps\mp\gametypes_zm\_spawning; +#include maps\mp\gametypes_zm\_globallogic_audio; +#include maps\mp\gametypes_zm\_globallogic_utils; +#include maps\mp\gametypes_zm\_globallogic; +#include maps\mp\gametypes_zm\_hud_message; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\gametypes_zm\_globallogic_ui; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\gametypes_zm\_spectating; +#include maps\mp\gametypes_zm\_hostmigration; +#include maps\mp\gametypes_zm\_globallogic_defaults; +#include maps\mp\gametypes_zm\_spawnlogic; + +timeuntilspawn( includeteamkilldelay ) +{ + if ( level.ingraceperiod && !self.hasspawned ) + return 0; + + respawndelay = 0; + + if ( self.hasspawned ) + { + result = self [[ level.onrespawndelay ]](); + + if ( isdefined( result ) ) + respawndelay = result; + else + respawndelay = level.playerrespawndelay; + + if ( includeteamkilldelay && ( isdefined( self.teamkillpunish ) && self.teamkillpunish ) ) + respawndelay += maps\mp\gametypes_zm\_globallogic_player::teamkilldelay(); + } + + wavebased = level.waverespawndelay > 0; + + if ( wavebased ) + return self timeuntilwavespawn( respawndelay ); + + return respawndelay; +} + +allteamshaveexisted() +{ + foreach ( team in level.teams ) + { + if ( !level.everexisted[team] ) + return false; + } + + return true; +} + +mayspawn() +{ + if ( isdefined( level.mayspawn ) && !self [[ level.mayspawn ]]() ) + return false; + + if ( level.inovertime ) + return false; + + if ( level.playerqueuedrespawn && !isdefined( self.allowqueuespawn ) && !level.ingraceperiod && !level.usestartspawns ) + return false; + + if ( level.numlives ) + { + if ( level.teambased ) + gamehasstarted = allteamshaveexisted(); + else + gamehasstarted = level.maxplayercount > 1 || !isoneround() && !isfirstround(); + + if ( !self.pers["lives"] && gamehasstarted ) + return false; + else if ( gamehasstarted ) + { + if ( !level.ingraceperiod && !self.hasspawned && !level.wagermatch ) + return false; + } + } + + return true; +} + +timeuntilwavespawn( minimumwait ) +{ + earliestspawntime = gettime() + minimumwait * 1000; + lastwavetime = level.lastwave[self.pers["team"]]; + wavedelay = level.wavedelay[self.pers["team"]] * 1000; + + if ( wavedelay == 0 ) + return 0; + + numwavespassedearliestspawntime = ( earliestspawntime - lastwavetime ) / wavedelay; + numwaves = ceil( numwavespassedearliestspawntime ); + timeofspawn = lastwavetime + numwaves * wavedelay; + + if ( isdefined( self.wavespawnindex ) ) + timeofspawn += 50 * self.wavespawnindex; + + return ( timeofspawn - gettime() ) / 1000; +} + +stoppoisoningandflareonspawn() +{ + self endon( "disconnect" ); + self.inpoisonarea = 0; + self.inburnarea = 0; + self.inflarevisionarea = 0; + self.ingroundnapalm = 0; +} + +spawnplayerprediction() +{ + self endon( "disconnect" ); + self endon( "end_respawn" ); + self endon( "game_ended" ); + self endon( "joined_spectators" ); + self endon( "spawned" ); + + while ( true ) + { + wait 0.5; + + if ( isdefined( level.onspawnplayerunified ) && getdvarint( _hash_CF6EEB8B ) == 0 ) + maps\mp\gametypes_zm\_spawning::onspawnplayer_unified( 1 ); + else + self [[ level.onspawnplayer ]]( 1 ); + } +} + +giveloadoutlevelspecific( team, class ) +{ + pixbeginevent( "giveLoadoutLevelSpecific" ); + + if ( isdefined( level.givecustomcharacters ) ) + self [[ level.givecustomcharacters ]](); + + if ( isdefined( level.givecustomloadout ) ) + self [[ level.givecustomloadout ]](); + + pixendevent(); +} + +spawnplayer() +{ + pixbeginevent( "spawnPlayer_preUTS" ); + self endon( "disconnect" ); + self endon( "joined_spectators" ); + self notify( "spawned" ); + level notify( "player_spawned" ); + self notify( "end_respawn" ); + self setspawnvariables(); + + if ( !self.hasspawned ) + { + self.underscorechance = 70; + self thread maps\mp\gametypes_zm\_globallogic_audio::sndstartmusicsystem(); + } + + if ( level.teambased ) + self.sessionteam = self.team; + else + { + self.sessionteam = "none"; + self.ffateam = self.team; + } + + hadspawned = self.hasspawned; + self.sessionstate = "playing"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.statusicon = ""; + self.damagedplayers = []; + + if ( getdvarint( "scr_csmode" ) > 0 ) + self.maxhealth = getdvarint( "scr_csmode" ); + else + self.maxhealth = level.playermaxhealth; + + self.health = self.maxhealth; + self.friendlydamage = undefined; + self.hasspawned = 1; + self.spawntime = gettime(); + self.afk = 0; + + if ( self.pers["lives"] && ( !isdefined( level.takelivesondeath ) || level.takelivesondeath == 0 ) ) + { + self.pers["lives"]--; + + if ( self.pers["lives"] == 0 ) + { + level notify( "player_eliminated" ); + self notify( "player_eliminated" ); + } + } + + self.laststand = undefined; + self.revivingteammate = 0; + self.burning = undefined; + self.nextkillstreakfree = undefined; + self.activeuavs = 0; + self.activecounteruavs = 0; + self.activesatellites = 0; + self.deathmachinekills = 0; + self.disabledweapon = 0; + self resetusability(); + self maps\mp\gametypes_zm\_globallogic_player::resetattackerlist(); + self.diedonvehicle = undefined; + + if ( !self.wasaliveatmatchstart ) + { + if ( level.ingraceperiod || maps\mp\gametypes_zm\_globallogic_utils::gettimepassed() < 20000 ) + self.wasaliveatmatchstart = 1; + } + + self setdepthoffield( 0, 0, 512, 512, 4, 0 ); + self resetfov(); + pixbeginevent( "onSpawnPlayer" ); + + if ( isdefined( level.onspawnplayerunified ) && getdvarint( _hash_CF6EEB8B ) == 0 ) + self [[ level.onspawnplayerunified ]](); + else + self [[ level.onspawnplayer ]]( 0 ); + + if ( isdefined( level.playerspawnedcb ) ) + self [[ level.playerspawnedcb ]](); + + pixendevent(); + pixendevent(); + level thread maps\mp\gametypes_zm\_globallogic::updateteamstatus(); + pixbeginevent( "spawnPlayer_postUTS" ); + self thread stoppoisoningandflareonspawn(); + self stopburning(); + assert( maps\mp\gametypes_zm\_globallogic_utils::isvalidclass( self.class ) ); + self giveloadoutlevelspecific( self.team, self.class ); + + if ( level.inprematchperiod ) + { + self freeze_player_controls( 1 ); + team = self.pers["team"]; + + if ( isdefined( self.pers["music"].spawn ) && self.pers["music"].spawn == 0 ) + { + if ( level.wagermatch ) + music = "SPAWN_WAGER"; + else + music = game["music"]["spawn_" + team]; + + self thread maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( music, 0, 0 ); + self.pers["music"].spawn = 1; + } + + if ( level.splitscreen ) + { + if ( isdefined( level.playedstartingmusic ) ) + music = undefined; + else + level.playedstartingmusic = 1; + } + + if ( !isdefined( level.disableprematchmessages ) || level.disableprematchmessages == 0 ) + { + thread maps\mp\gametypes_zm\_hud_message::showinitialfactionpopup( team ); + hintmessage = getobjectivehinttext( self.pers["team"] ); + + if ( isdefined( hintmessage ) ) + self thread maps\mp\gametypes_zm\_hud_message::hintmessage( hintmessage ); + + if ( isdefined( game["dialog"]["gametype"] ) && ( !level.splitscreen || self == level.players[0] ) ) + { + if ( !isdefined( level.infinalfight ) || !level.infinalfight ) + { + if ( level.hardcoremode ) + self maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "gametype_hardcore" ); + else + self maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "gametype" ); + } + } + + if ( team == game["attackers"] ) + self maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "offense_obj", "introboost" ); + else + self maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "defense_obj", "introboost" ); + } + } + else + { + self freeze_player_controls( 0 ); + self enableweapons(); + + if ( !hadspawned && game["state"] == "playing" ) + { + pixbeginevent( "sound" ); + team = self.team; + + if ( isdefined( self.pers["music"].spawn ) && self.pers["music"].spawn == 0 ) + { + self thread maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "SPAWN_SHORT", 0, 0 ); + self.pers["music"].spawn = 1; + } + + if ( level.splitscreen ) + { + if ( isdefined( level.playedstartingmusic ) ) + music = undefined; + else + level.playedstartingmusic = 1; + } + + if ( !isdefined( level.disableprematchmessages ) || level.disableprematchmessages == 0 ) + { + thread maps\mp\gametypes_zm\_hud_message::showinitialfactionpopup( team ); + hintmessage = getobjectivehinttext( self.pers["team"] ); + + if ( isdefined( hintmessage ) ) + self thread maps\mp\gametypes_zm\_hud_message::hintmessage( hintmessage ); + + if ( isdefined( game["dialog"]["gametype"] ) && ( !level.splitscreen || self == level.players[0] ) ) + { + if ( !isdefined( level.infinalfight ) || !level.infinalfight ) + { + if ( level.hardcoremode ) + self maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "gametype_hardcore" ); + else + self maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "gametype" ); + } + } + + if ( team == game["attackers"] ) + self maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "offense_obj", "introboost" ); + else + self maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "defense_obj", "introboost" ); + } + + pixendevent(); + } + } + + if ( getdvar( "scr_showperksonspawn" ) == "" ) + setdvar( "scr_showperksonspawn", "0" ); + + if ( level.hardcoremode ) + setdvar( "scr_showperksonspawn", "0" ); + + if ( !level.splitscreen && getdvarint( "scr_showperksonspawn" ) == 1 && game["state"] != "postgame" ) + { + pixbeginevent( "showperksonspawn" ); + + if ( level.perksenabled == 1 ) + self maps\mp\gametypes_zm\_hud_util::showperks(); + + self thread maps\mp\gametypes_zm\_globallogic_ui::hideloadoutaftertime( 3.0 ); + self thread maps\mp\gametypes_zm\_globallogic_ui::hideloadoutondeath(); + pixendevent(); + } + + if ( isdefined( self.pers["momentum"] ) ) + self.momentum = self.pers["momentum"]; + + pixendevent(); + waittillframeend; + self notify( "spawned_player" ); + self logstring( "S " + self.origin[0] + " " + self.origin[1] + " " + self.origin[2] ); + setdvar( "scr_selecting_location", "" ); +/# + if ( getdvarint( _hash_F8D00F60 ) > 0 ) + self thread maps\mp\gametypes_zm\_globallogic_score::xpratethread(); +#/ + self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); + + if ( game["state"] == "postgame" ) + { + assert( !level.intermission ); + self maps\mp\gametypes_zm\_globallogic_player::freezeplayerforroundend(); + } +} + +spawnspectator( origin, angles ) +{ + self notify( "spawned" ); + self notify( "end_respawn" ); + in_spawnspectator( origin, angles ); +} + +respawn_asspectator( origin, angles ) +{ + in_spawnspectator( origin, angles ); +} + +in_spawnspectator( origin, angles ) +{ + pixmarker( "BEGIN: in_spawnSpectator" ); + self setspawnvariables(); + + if ( self.pers["team"] == "spectator" ) + self clearlowermessage(); + + self.sessionstate = "spectator"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + + if ( self.pers["team"] == "spectator" ) + self.statusicon = ""; + else + self.statusicon = "hud_status_dead"; + + maps\mp\gametypes_zm\_spectating::setspectatepermissionsformachine(); + [[ level.onspawnspectator ]]( origin, angles ); + + if ( level.teambased && !level.splitscreen ) + self thread spectatorthirdpersonness(); + + level thread maps\mp\gametypes_zm\_globallogic::updateteamstatus(); + pixmarker( "END: in_spawnSpectator" ); +} + +spectatorthirdpersonness() +{ + self endon( "disconnect" ); + self endon( "spawned" ); + self notify( "spectator_thirdperson_thread" ); + self endon( "spectator_thirdperson_thread" ); + self.spectatingthirdperson = 0; +} + +forcespawn( time ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "spawned" ); + + if ( !isdefined( time ) ) + time = 60; + + wait( time ); + + if ( self.hasspawned ) + return; + + if ( self.pers["team"] == "spectator" ) + return; + + if ( !maps\mp\gametypes_zm\_globallogic_utils::isvalidclass( self.pers["class"] ) ) + { + self.pers["class"] = "CLASS_CUSTOM1"; + self.class = self.pers["class"]; + } + + self maps\mp\gametypes_zm\_globallogic_ui::closemenus(); + self thread [[ level.spawnclient ]](); +} + +kickifdontspawn() +{ +/# + if ( getdvarint( "scr_hostmigrationtest" ) == 1 ) + return; +#/ + if ( self ishost() ) + return; + + self kickifidontspawninternal(); +} + +kickifidontspawninternal() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "spawned" ); + waittime = 90; + + if ( getdvar( _hash_4257CF5C ) != "" ) + waittime = getdvarfloat( _hash_4257CF5C ); + + mintime = 45; + + if ( getdvar( _hash_DF057E0 ) != "" ) + mintime = getdvarfloat( _hash_DF057E0 ); + + starttime = gettime(); + kickwait( waittime ); + timepassed = ( gettime() - starttime ) / 1000; + + if ( timepassed < waittime - 0.1 && timepassed < mintime ) + return; + + if ( self.hasspawned ) + return; + + if ( sessionmodeisprivate() ) + return; + + if ( self.pers["team"] == "spectator" ) + return; + + kick( self getentitynumber() ); +} + +kickwait( waittime ) +{ + level endon( "game_ended" ); + maps\mp\gametypes_zm\_hostmigration::waitlongdurationwithhostmigrationpause( waittime ); +} + +spawninterroundintermission() +{ + self notify( "spawned" ); + self notify( "end_respawn" ); + self setspawnvariables(); + self clearlowermessage(); + self freeze_player_controls( 0 ); + self.sessionstate = "spectator"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + self maps\mp\gametypes_zm\_globallogic_defaults::default_onspawnintermission(); + self setorigin( self.origin ); + self setplayerangles( self.angles ); + self setdepthoffield( 0, 128, 512, 4000, 6, 1.8 ); +} + +spawnintermission( usedefaultcallback ) +{ + self notify( "spawned" ); + self notify( "end_respawn" ); + self endon( "disconnect" ); + self setspawnvariables(); + self clearlowermessage(); + self freeze_player_controls( 0 ); + + if ( level.rankedmatch && waslastround() ) + { + if ( self.postgamemilestones || self.postgamecontracts || self.postgamepromotion ) + { + if ( self.postgamepromotion ) + self playlocalsound( "mus_level_up" ); + else if ( self.postgamecontracts ) + self playlocalsound( "mus_challenge_complete" ); + else if ( self.postgamemilestones ) + self playlocalsound( "mus_contract_complete" ); + + self closeingamemenu(); + self openmenu( game["menu_endgameupdate"] ); + waittime = 4.0; + + while ( waittime ) + { + wait 0.25; + waittime -= 0.25; + self openmenu( game["menu_endgameupdate"] ); + } + + self closemenu(); + } + } + + self.sessionstate = "intermission"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + + if ( isdefined( usedefaultcallback ) && usedefaultcallback ) + maps\mp\gametypes_zm\_globallogic_defaults::default_onspawnintermission(); + else + [[ level.onspawnintermission ]](); + + self setdepthoffield( 0, 128, 512, 4000, 6, 1.8 ); +} + +spawnqueuedclientonteam( team ) +{ + player_to_spawn = undefined; + + for ( i = 0; i < level.deadplayers[team].size; i++ ) + { + player = level.deadplayers[team][i]; + + if ( player.waitingtospawn ) + continue; + + player_to_spawn = player; + break; + } + + if ( isdefined( player_to_spawn ) ) + { + player_to_spawn.allowqueuespawn = 1; + player_to_spawn maps\mp\gametypes_zm\_globallogic_ui::closemenus(); + player_to_spawn thread [[ level.spawnclient ]](); + } +} + +spawnqueuedclient( dead_player_team, killer ) +{ + if ( !level.playerqueuedrespawn ) + return; + + maps\mp\gametypes_zm\_globallogic_utils::waittillslowprocessallowed(); + spawn_team = undefined; + + if ( isdefined( killer ) && isdefined( killer.team ) && isdefined( level.teams[killer.team] ) ) + spawn_team = killer.team; + + if ( isdefined( spawn_team ) ) + { + spawnqueuedclientonteam( spawn_team ); + return; + } + + foreach ( team in level.teams ) + { + if ( team == dead_player_team ) + continue; + + spawnqueuedclientonteam( team ); + } +} + +allteamsnearscorelimit() +{ + if ( !level.teambased ) + return false; + + if ( level.scorelimit <= 1 ) + return false; + + foreach ( team in level.teams ) + { + if ( !( game["teamScores"][team] >= level.scorelimit - 1 ) ) + return false; + } + + return true; +} + +shouldshowrespawnmessage() +{ + if ( waslastround() ) + return false; + + if ( isoneround() ) + return false; + + if ( isdefined( level.livesdonotreset ) && level.livesdonotreset ) + return false; + + if ( allteamsnearscorelimit() ) + return false; + + return true; +} + +default_spawnmessage() +{ + setlowermessage( game["strings"]["spawn_next_round"] ); + self thread maps\mp\gametypes_zm\_globallogic_ui::removespawnmessageshortly( 3 ); +} + +showspawnmessage() +{ + if ( shouldshowrespawnmessage() ) + self thread [[ level.spawnmessage ]](); +} + +spawnclient( timealreadypassed ) +{ + pixbeginevent( "spawnClient" ); + assert( isdefined( self.team ) ); + assert( maps\mp\gametypes_zm\_globallogic_utils::isvalidclass( self.class ) ); + + if ( !self mayspawn() ) + { + currentorigin = self.origin; + currentangles = self.angles; + self showspawnmessage(); + self thread [[ level.spawnspectator ]]( currentorigin + vectorscale( ( 0, 0, 1 ), 60.0 ), currentangles ); + pixendevent(); + return; + } + + if ( self.waitingtospawn ) + { + pixendevent(); + return; + } + + self.waitingtospawn = 1; + self.allowqueuespawn = undefined; + self waitandspawnclient( timealreadypassed ); + + if ( isdefined( self ) ) + self.waitingtospawn = 0; + + pixendevent(); +} + +waitandspawnclient( timealreadypassed ) +{ + self endon( "disconnect" ); + self endon( "end_respawn" ); + level endon( "game_ended" ); + + if ( !isdefined( timealreadypassed ) ) + timealreadypassed = 0; + + spawnedasspectator = 0; + + if ( isdefined( self.teamkillpunish ) && self.teamkillpunish ) + { + teamkilldelay = maps\mp\gametypes_zm\_globallogic_player::teamkilldelay(); + + if ( teamkilldelay > timealreadypassed ) + { + teamkilldelay -= timealreadypassed; + timealreadypassed = 0; + } + else + { + timealreadypassed -= teamkilldelay; + teamkilldelay = 0; + } + + if ( teamkilldelay > 0 ) + { + setlowermessage( &"MP_FRIENDLY_FIRE_WILL_NOT", teamkilldelay ); + self thread respawn_asspectator( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), self.angles ); + spawnedasspectator = 1; + wait( teamkilldelay ); + } + + self.teamkillpunish = 0; + } + + if ( !isdefined( self.wavespawnindex ) && isdefined( level.waveplayerspawnindex[self.team] ) ) + { + self.wavespawnindex = level.waveplayerspawnindex[self.team]; + level.waveplayerspawnindex[self.team]++; + } + + timeuntilspawn = timeuntilspawn( 0 ); + + if ( timeuntilspawn > timealreadypassed ) + { + timeuntilspawn -= timealreadypassed; + timealreadypassed = 0; + } + else + { + timealreadypassed -= timeuntilspawn; + timeuntilspawn = 0; + } + + if ( timeuntilspawn > 0 ) + { + if ( level.playerqueuedrespawn ) + setlowermessage( game["strings"]["you_will_spawn"], timeuntilspawn ); + else if ( self issplitscreen() ) + setlowermessage( game["strings"]["waiting_to_spawn_ss"], timeuntilspawn, 1 ); + else + setlowermessage( game["strings"]["waiting_to_spawn"], timeuntilspawn ); + + if ( !spawnedasspectator ) + { + spawnorigin = self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ); + spawnangles = self.angles; + + if ( isdefined( level.useintermissionpointsonwavespawn ) && [[ level.useintermissionpointsonwavespawn ]]() == 1 ) + { + spawnpoint = maps\mp\gametypes_zm\_spawnlogic::getrandomintermissionpoint(); + + if ( isdefined( spawnpoint ) ) + { + spawnorigin = spawnpoint.origin; + spawnangles = spawnpoint.angles; + } + } + + self thread respawn_asspectator( spawnorigin, spawnangles ); + } + + spawnedasspectator = 1; + self maps\mp\gametypes_zm\_globallogic_utils::waitfortimeornotify( timeuntilspawn, "force_spawn" ); + self notify( "stop_wait_safe_spawn_button" ); + } + + wavebased = level.waverespawndelay > 0; + + if ( !level.playerforcerespawn && self.hasspawned && !wavebased && !self.wantsafespawn && !level.playerqueuedrespawn ) + { + setlowermessage( game["strings"]["press_to_spawn"] ); + + if ( !spawnedasspectator ) + self thread respawn_asspectator( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), self.angles ); + + spawnedasspectator = 1; + self waitrespawnorsafespawnbutton(); + } + + self.waitingtospawn = 0; + self clearlowermessage(); + self.wavespawnindex = undefined; + self.respawntimerstarttime = undefined; + self thread [[ level.spawnplayer ]](); +} + +waitrespawnorsafespawnbutton() +{ + self endon( "disconnect" ); + self endon( "end_respawn" ); + + while ( true ) + { + if ( self usebuttonpressed() ) + break; + + wait 0.05; + } +} + +waitinspawnqueue() +{ + self endon( "disconnect" ); + self endon( "end_respawn" ); + + if ( !level.ingraceperiod && !level.usestartspawns ) + { + currentorigin = self.origin; + currentangles = self.angles; + self thread [[ level.spawnspectator ]]( currentorigin + vectorscale( ( 0, 0, 1 ), 60.0 ), currentangles ); + + self waittill( "queue_respawn" ); + } +} + +setthirdperson( value ) +{ + if ( !level.console ) + return; + + if ( !isdefined( self.spectatingthirdperson ) || value != self.spectatingthirdperson ) + { + self.spectatingthirdperson = value; + + if ( value ) + { + self setclientthirdperson( 1 ); + self setdepthoffield( 0, 128, 512, 4000, 6, 1.8 ); + } + else + { + self setclientthirdperson( 0 ); + self setdepthoffield( 0, 0, 512, 4000, 4, 0 ); + } + + self resetfov(); + } +} + +setspawnvariables() +{ + resettimeout(); + self stopshellshock(); + self stoprumble( "damage_heavy" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_ui.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_ui.gsc new file mode 100644 index 0000000..0e9b460 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_ui.gsc @@ -0,0 +1,490 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\gametypes_zm\_globallogic; +#include maps\mp\gametypes_zm\_spectating; +#include maps\mp\gametypes_zm\_globallogic_player; + +init() +{ + precachestring( &"MP_HALFTIME" ); + precachestring( &"MP_OVERTIME" ); + precachestring( &"MP_ROUNDEND" ); + precachestring( &"MP_INTERMISSION" ); + precachestring( &"MP_SWITCHING_SIDES_CAPS" ); + precachestring( &"MP_FRIENDLY_FIRE_WILL_NOT" ); + precachestring( &"MP_RAMPAGE" ); + precachestring( &"medal_received" ); + precachestring( &"killstreak_received" ); + precachestring( &"prox_grenade_notify" ); + precachestring( &"player_callout" ); + precachestring( &"score_event" ); + precachestring( &"rank_up" ); + precachestring( &"gun_level_complete" ); + precachestring( &"challenge_complete" ); + + if ( sessionmodeiszombiesgame() ) + precachestring( &"hud_update_survival_team" ); + + if ( level.splitscreen ) + precachestring( &"MP_ENDED_GAME" ); + else + precachestring( &"MP_HOST_ENDED_GAME" ); +} + +setupcallbacks() +{ + level.autoassign = ::menuautoassign; + level.spectator = ::menuspectator; + level.class = ::menuclass; + level.teammenu = ::menuteam; +} + +hideloadoutaftertime( delay ) +{ + self endon( "disconnect" ); + self endon( "perks_hidden" ); + wait( delay ); + self thread hideallperks( 0.4 ); + self notify( "perks_hidden" ); +} + +hideloadoutondeath() +{ + self endon( "disconnect" ); + self endon( "perks_hidden" ); + + self waittill( "death" ); + + self hideallperks(); + self notify( "perks_hidden" ); +} + +hideloadoutonkill() +{ + self endon( "disconnect" ); + self endon( "death" ); + self endon( "perks_hidden" ); + + self waittill( "killed_player" ); + + self hideallperks(); + self notify( "perks_hidden" ); +} + +freegameplayhudelems() +{ + if ( isdefined( self.perkicon ) ) + { + for ( numspecialties = 0; numspecialties < level.maxspecialties; numspecialties++ ) + { + if ( isdefined( self.perkicon[numspecialties] ) ) + { + self.perkicon[numspecialties] destroyelem(); + self.perkname[numspecialties] destroyelem(); + } + } + } + + if ( isdefined( self.perkhudelem ) ) + self.perkhudelem destroyelem(); + + if ( isdefined( self.killstreakicon ) ) + { + if ( isdefined( self.killstreakicon[0] ) ) + self.killstreakicon[0] destroyelem(); + + if ( isdefined( self.killstreakicon[1] ) ) + self.killstreakicon[1] destroyelem(); + + if ( isdefined( self.killstreakicon[2] ) ) + self.killstreakicon[2] destroyelem(); + + if ( isdefined( self.killstreakicon[3] ) ) + self.killstreakicon[3] destroyelem(); + + if ( isdefined( self.killstreakicon[4] ) ) + self.killstreakicon[4] destroyelem(); + } + + self notify( "perks_hidden" ); + + if ( isdefined( self.lowermessage ) ) + self.lowermessage destroyelem(); + + if ( isdefined( self.lowertimer ) ) + self.lowertimer destroyelem(); + + if ( isdefined( self.proxbar ) ) + self.proxbar destroyelem(); + + if ( isdefined( self.proxbartext ) ) + self.proxbartext destroyelem(); + + if ( isdefined( self.carryicon ) ) + self.carryicon destroyelem(); +} + +teamplayercountsequal( playercounts ) +{ + count = undefined; + + foreach ( team in level.teams ) + { + if ( !isdefined( count ) ) + { + count = playercounts[team]; + continue; + } + + if ( count != playercounts[team] ) + return false; + } + + return true; +} + +teamwithlowestplayercount( playercounts, ignore_team ) +{ + count = 9999; + lowest_team = undefined; + + foreach ( team in level.teams ) + { + if ( count > playercounts[team] ) + { + count = playercounts[team]; + lowest_team = team; + } + } + + return lowest_team; +} + +menuautoassign( comingfrommenu ) +{ + teamkeys = getarraykeys( level.teams ); + assignment = teamkeys[randomint( teamkeys.size )]; + self closemenus(); + + if ( isdefined( level.forceallallies ) && level.forceallallies ) + assignment = "allies"; + else if ( level.teambased ) + { + if ( getdvarint( "party_autoteams" ) == 1 ) + { + if ( level.allow_teamchange == "1" && ( self.hasspawned || comingfrommenu ) ) + assignment = ""; + else + { + team = getassignedteam( self ); + + switch ( team ) + { + case 1: + assignment = teamkeys[1]; + break; + case 2: + assignment = teamkeys[0]; + break; + case 3: + assignment = teamkeys[2]; + break; + case 4: + if ( !isdefined( level.forceautoassign ) || !level.forceautoassign ) + { + self setclientscriptmainmenu( game["menu_class"] ); + return; + } + default: + assignment = ""; + + if ( isdefined( level.teams[team] ) ) + assignment = team; + else if ( team == "spectator" && !level.forceautoassign ) + { + self setclientscriptmainmenu( game["menu_class"] ); + return; + } + } + } + } + + if ( assignment == "" || getdvarint( "party_autoteams" ) == 0 ) + { + if ( sessionmodeiszombiesgame() ) + assignment = "allies"; + } + + if ( assignment == self.pers["team"] && ( self.sessionstate == "playing" || self.sessionstate == "dead" ) ) + { + self beginclasschoice(); + return; + } + } + else if ( getdvarint( "party_autoteams" ) == 1 ) + { + if ( level.allow_teamchange != "1" || !self.hasspawned && !comingfrommenu ) + { + team = getassignedteam( self ); + + if ( isdefined( level.teams[team] ) ) + assignment = team; + else if ( team == "spectator" && !level.forceautoassign ) + { + self setclientscriptmainmenu( game["menu_class"] ); + return; + } + } + } + + if ( assignment != self.pers["team"] && ( self.sessionstate == "playing" || self.sessionstate == "dead" ) ) + { + self.switching_teams = 1; + self.joining_team = assignment; + self.leaving_team = self.pers["team"]; + self suicide(); + } + + self.pers["team"] = assignment; + self.team = assignment; + self.pers["class"] = undefined; + self.class = undefined; + self.pers["weapon"] = undefined; + self.pers["savedmodel"] = undefined; + self updateobjectivetext(); + + if ( level.teambased ) + self.sessionteam = assignment; + else + { + self.sessionteam = "none"; + self.ffateam = assignment; + } + + if ( !isalive( self ) ) + self.statusicon = "hud_status_dead"; + + self notify( "joined_team" ); + level notify( "joined_team" ); + self notify( "end_respawn" ); + self beginclasschoice(); + self setclientscriptmainmenu( game["menu_class"] ); +} + +teamscoresequal() +{ + score = undefined; + + foreach ( team in level.teams ) + { + if ( !isdefined( score ) ) + { + score = getteamscore( team ); + continue; + } + + if ( score != getteamscore( team ) ) + return false; + } + + return true; +} + +teamwithlowestscore() +{ + score = 99999999; + lowest_team = undefined; + + foreach ( team in level.teams ) + { + if ( score > getteamscore( team ) ) + lowest_team = team; + } + + return lowest_team; +} + +pickteamfromscores( teams ) +{ + assignment = "allies"; + + if ( teamscoresequal() ) + assignment = teams[randomint( teams.size )]; + else + assignment = teamwithlowestscore(); + + return assignment; +} + +getsplitscreenteam() +{ + for ( index = 0; index < level.players.size; index++ ) + { + if ( !isdefined( level.players[index] ) ) + continue; + + if ( level.players[index] == self ) + continue; + + if ( !self isplayeronsamemachine( level.players[index] ) ) + continue; + + team = level.players[index].sessionteam; + + if ( team != "spectator" ) + return team; + } + + return ""; +} + +updateobjectivetext() +{ + if ( sessionmodeiszombiesgame() || self.pers["team"] == "spectator" ) + { + self setclientcgobjectivetext( "" ); + return; + } + + if ( level.scorelimit > 0 ) + self setclientcgobjectivetext( getobjectivescoretext( self.pers["team"] ) ); + else + self setclientcgobjectivetext( getobjectivetext( self.pers["team"] ) ); +} + +closemenus() +{ + self closemenu(); + self closeingamemenu(); +} + +beginclasschoice( forcenewchoice ) +{ + assert( isdefined( level.teams[self.pers["team"]] ) ); + team = self.pers["team"]; + + if ( level.disablecac == 1 ) + { + self.pers["class"] = level.defaultclass; + self.class = level.defaultclass; + + if ( self.sessionstate != "playing" && game["state"] == "playing" ) + self thread [[ level.spawnclient ]](); + + level thread maps\mp\gametypes_zm\_globallogic::updateteamstatus(); + self thread maps\mp\gametypes_zm\_spectating::setspectatepermissionsformachine(); + return; + } + + if ( level.wagermatch ) + self openmenu( game["menu_changeclass_wager"] ); + else if ( getdvarint( "barebones_class_mode" ) ) + self openmenu( game["menu_changeclass_barebones"] ); + else + self openmenu( game["menu_changeclass_" + team] ); +} + +showmainmenuforteam() +{ + assert( isdefined( level.teams[self.pers["team"]] ) ); + team = self.pers["team"]; + + if ( level.wagermatch ) + self openmenu( game["menu_changeclass_wager"] ); + else + self openmenu( game["menu_changeclass_" + team] ); +} + +menuteam( team ) +{ + self closemenus(); + + if ( !level.console && level.allow_teamchange == "0" && ( isdefined( self.hasdonecombat ) && self.hasdonecombat ) ) + return; + + if ( self.pers["team"] != team ) + { + if ( level.ingraceperiod && ( !isdefined( self.hasdonecombat ) || !self.hasdonecombat ) ) + self.hasspawned = 0; + + if ( self.sessionstate == "playing" ) + { + self.switching_teams = 1; + self.joining_team = team; + self.leaving_team = self.pers["team"]; + self suicide(); + } + + self.pers["team"] = team; + self.team = team; + self.pers["class"] = undefined; + self.class = undefined; + self.pers["weapon"] = undefined; + self.pers["savedmodel"] = undefined; + self updateobjectivetext(); + + if ( level.teambased ) + self.sessionteam = team; + else + { + self.sessionteam = "none"; + self.ffateam = team; + } + + self setclientscriptmainmenu( game["menu_class"] ); + self notify( "joined_team" ); + level notify( "joined_team" ); + self notify( "end_respawn" ); + } + + self beginclasschoice(); +} + +menuspectator() +{ + self closemenus(); + + if ( self.pers["team"] != "spectator" ) + { + if ( isalive( self ) ) + { + self.switching_teams = 1; + self.joining_team = "spectator"; + self.leaving_team = self.pers["team"]; + self suicide(); + } + + self.pers["team"] = "spectator"; + self.team = "spectator"; + self.pers["class"] = undefined; + self.class = undefined; + self.pers["weapon"] = undefined; + self.pers["savedmodel"] = undefined; + self updateobjectivetext(); + self.sessionteam = "spectator"; + + if ( !level.teambased ) + self.ffateam = "spectator"; + + [[ level.spawnspectator ]](); + self thread maps\mp\gametypes_zm\_globallogic_player::spectate_player_watcher(); + self setclientscriptmainmenu( game["menu_class"] ); + self notify( "joined_spectators" ); + } +} + +menuclass( response ) +{ + self closemenus(); +} + +removespawnmessageshortly( delay ) +{ + self endon( "disconnect" ); + waittillframeend; + self endon( "end_respawn" ); + wait( delay ); + self clearlowermessage( 2.0 ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_utils.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_utils.gsc new file mode 100644 index 0000000..bef7d8d --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_utils.gsc @@ -0,0 +1,425 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_message; +#include maps\mp\gametypes_zm\_hostmigration; +#include maps\mp\gametypes_zm\_globallogic_score; + +waittillslowprocessallowed() +{ + while ( level.lastslowprocessframe == gettime() ) + wait 0.05; + + level.lastslowprocessframe = gettime(); +} + +testmenu() +{ + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + wait 10.0; + notifydata = spawnstruct(); + notifydata.titletext = &"MP_CHALLENGE_COMPLETED"; + notifydata.notifytext = "wheee"; + notifydata.sound = "mp_challenge_complete"; + self thread maps\mp\gametypes_zm\_hud_message::notifymessage( notifydata ); + } +} + +testshock() +{ + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + wait 3.0; + numshots = randomint( 6 ); + + for ( i = 0; i < numshots; i++ ) + { + iprintlnbold( numshots ); + self shellshock( "frag_grenade_mp", 0.2 ); + wait 0.1; + } + } +} + +testhps() +{ + self endon( "death" ); + self endon( "disconnect" ); + hps = []; + hps[hps.size] = "radar_mp"; + hps[hps.size] = "artillery_mp"; + hps[hps.size] = "dogs_mp"; + + for (;;) + { + hp = "radar_mp"; + wait 20.0; + } +} + +timeuntilroundend() +{ + if ( level.gameended ) + { + timepassed = ( gettime() - level.gameendtime ) / 1000; + timeremaining = level.postroundtime - timepassed; + + if ( timeremaining < 0 ) + return 0; + + return timeremaining; + } + + if ( level.inovertime ) + return undefined; + + if ( level.timelimit <= 0 ) + return undefined; + + if ( !isdefined( level.starttime ) ) + return undefined; + + timepassed = ( gettimepassed() - level.starttime ) / 1000; + timeremaining = level.timelimit * 60 - timepassed; + return timeremaining + level.postroundtime; +} + +gettimeremaining() +{ + return level.timelimit * 60 * 1000 - gettimepassed(); +} + +registerpostroundevent( eventfunc ) +{ + if ( !isdefined( level.postroundevents ) ) + level.postroundevents = []; + + level.postroundevents[level.postroundevents.size] = eventfunc; +} + +executepostroundevents() +{ + if ( !isdefined( level.postroundevents ) ) + return; + + for ( i = 0; i < level.postroundevents.size; i++ ) + [[ level.postroundevents[i] ]](); +} + +getvalueinrange( value, minvalue, maxvalue ) +{ + if ( value > maxvalue ) + return maxvalue; + else if ( value < minvalue ) + return minvalue; + else + return value; +} + +assertproperplacement() +{ +/# + numplayers = level.placement["all"].size; + + for ( i = 0; i < numplayers - 1; i++ ) + { + if ( isdefined( level.placement["all"][i] ) && isdefined( level.placement["all"][i + 1] ) ) + { + if ( level.placement["all"][i].score < level.placement["all"][i + 1].score ) + { + println( "^1Placement array:" ); + + for ( i = 0; i < numplayers; i++ ) + { + player = level.placement["all"][i]; + println( "^1" + i + ". " + player.name + ": " + player.score ); + } +/# + assertmsg( "Placement array was not properly sorted" ); +#/ + break; + } + } + } +#/ +} + +isvalidclass( class ) +{ + if ( level.oldschool || sessionmodeiszombiesgame() ) + { + assert( !isdefined( class ) ); + return 1; + } + + return isdefined( class ) && class != ""; +} + +playtickingsound( gametype_tick_sound ) +{ + self endon( "death" ); + self endon( "stop_ticking" ); + level endon( "game_ended" ); + time = level.bombtimer; + + while ( true ) + { + self playsound( gametype_tick_sound ); + + if ( time > 10 ) + { + time -= 1; + wait 1; + } + else if ( time > 4 ) + { + time -= 0.5; + wait 0.5; + } + else if ( time > 1 ) + { + time -= 0.4; + wait 0.4; + } + else + { + time -= 0.3; + wait 0.3; + } + + maps\mp\gametypes_zm\_hostmigration::waittillhostmigrationdone(); + } +} + +stoptickingsound() +{ + self notify( "stop_ticking" ); +} + +gametimer() +{ + level endon( "game_ended" ); + + level waittill( "prematch_over" ); + + level.starttime = gettime(); + level.discardtime = 0; + + if ( isdefined( game["roundMillisecondsAlreadyPassed"] ) ) + { + level.starttime -= game["roundMillisecondsAlreadyPassed"]; + game["roundMillisecondsAlreadyPassed"] = undefined; + } + + prevtime = gettime(); + + while ( game["state"] == "playing" ) + { + if ( !level.timerstopped ) + game["timepassed"] += gettime() - prevtime; + + prevtime = gettime(); + wait 1.0; + } +} + +gettimepassed() +{ + if ( !isdefined( level.starttime ) ) + return 0; + + if ( level.timerstopped ) + return level.timerpausetime - level.starttime - level.discardtime; + else + return gettime() - level.starttime - level.discardtime; +} + +pausetimer() +{ + if ( level.timerstopped ) + return; + + level.timerstopped = 1; + level.timerpausetime = gettime(); +} + +resumetimer() +{ + if ( !level.timerstopped ) + return; + + level.timerstopped = 0; + level.discardtime += gettime() - level.timerpausetime; +} + +getscoreremaining( team ) +{ + assert( isplayer( self ) || isdefined( team ) ); + scorelimit = level.scorelimit; + + if ( isplayer( self ) ) + return scorelimit - maps\mp\gametypes_zm\_globallogic_score::_getplayerscore( self ); + else + return scorelimit - getteamscore( team ); +} + +getscoreperminute( team ) +{ + assert( isplayer( self ) || isdefined( team ) ); + scorelimit = level.scorelimit; + timelimit = level.timelimit; + minutespassed = gettimepassed() / 60000 + 0.0001; + + if ( isplayer( self ) ) + return maps\mp\gametypes_zm\_globallogic_score::_getplayerscore( self ) / minutespassed; + else + return getteamscore( team ) / minutespassed; +} + +getestimatedtimeuntilscorelimit( team ) +{ + assert( isplayer( self ) || isdefined( team ) ); + scoreperminute = self getscoreperminute( team ); + scoreremaining = self getscoreremaining( team ); + + if ( !scoreperminute ) + return 999999; + + return scoreremaining / scoreperminute; +} + +rumbler() +{ + self endon( "disconnect" ); + + while ( true ) + { + wait 0.1; + self playrumbleonentity( "damage_heavy" ); + } +} + +waitfortimeornotify( time, notifyname ) +{ + self endon( notifyname ); + wait( time ); +} + +waitfortimeornotifynoartillery( time, notifyname ) +{ + self endon( notifyname ); + wait( time ); + + while ( isdefined( level.artilleryinprogress ) ) + { + assert( level.artilleryinprogress ); + wait 0.25; + } +} + +isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) +{ + if ( shitloc != "head" && shitloc != "helmet" ) + return false; + + switch ( smeansofdeath ) + { + case "MOD_MELEE": + case "MOD_BAYONET": + return false; + case "MOD_IMPACT": + if ( sweapon != "knife_ballistic_mp" ) + return false; + } + + return true; +} + +gethitlocheight( shitloc ) +{ + switch ( shitloc ) + { + case "neck": + case "helmet": + case "head": + return 60; + case "torso_upper": + case "right_hand": + case "right_arm_upper": + case "right_arm_lower": + case "left_hand": + case "left_arm_upper": + case "left_arm_lower": + case "gun": + return 48; + case "torso_lower": + return 40; + case "right_leg_upper": + case "left_leg_upper": + return 32; + case "right_leg_lower": + case "left_leg_lower": + return 10; + case "right_foot": + case "left_foot": + return 5; + } + + return 48; +} + +debugline( start, end ) +{ +/# + for ( i = 0; i < 50; i++ ) + { + line( start, end ); + wait 0.05; + } +#/ +} + +isexcluded( entity, entitylist ) +{ + for ( index = 0; index < entitylist.size; index++ ) + { + if ( entity == entitylist[index] ) + return true; + } + + return false; +} + +waitfortimeornotifies( desireddelay ) +{ + startedwaiting = gettime(); + waitedtime = ( gettime() - startedwaiting ) / 1000; + + if ( waitedtime < desireddelay ) + { + wait( desireddelay - waitedtime ); + return desireddelay; + } + else + return waitedtime; +} + +logteamwinstring( wintype, winner ) +{ + log_string = wintype; + + if ( isdefined( winner ) ) + log_string = log_string + ", win: " + winner; + + foreach ( team in level.teams ) + log_string = log_string + ", " + team + ": " + game["teamScores"][team]; + + logstring( log_string ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_vehicle.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_vehicle.gsc new file mode 100644 index 0000000..9c72f62 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_globallogic_vehicle.gsc @@ -0,0 +1,381 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_weapons; +#include maps\mp\gametypes_zm\_globallogic_player; +#include maps\mp\gametypes_zm\_damagefeedback; + +callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname ) +{ + self.idflags = idflags; + self.idflagstime = gettime(); + + if ( game["state"] == "postgame" ) + return; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat ) + return; + + if ( !isdefined( vdir ) ) + idflags |= level.idflags_no_knockback; + + friendly = 0; + + if ( isdefined( self.maxhealth ) && self.health == self.maxhealth || !isdefined( self.attackers ) ) + { + self.attackers = []; + self.attackerdata = []; + self.attackerdamage = []; + } + + if ( sweapon == "none" && isdefined( einflictor ) ) + { + if ( isdefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) + sweapon = "explodable_barrel_mp"; + else if ( isdefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) + sweapon = "destructible_car_mp"; + } + + if ( !( idflags & level.idflags_no_protection ) ) + { + if ( self isvehicleimmunetodamage( idflags, smeansofdeath, sweapon ) ) + return; + + if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) + { + + } + else if ( smeansofdeath == "MOD_PROJECTILE" || smeansofdeath == "MOD_GRENADE" ) + { + idamage *= getvehicleprojectilescalar( sweapon ); + idamage = int( idamage ); + + if ( idamage == 0 ) + return; + } + else if ( smeansofdeath == "MOD_GRENADE_SPLASH" ) + { + idamage *= getvehicleunderneathsplashscalar( sweapon ); + idamage = int( idamage ); + + if ( idamage == 0 ) + return; + } + + idamage *= level.vehicledamagescalar; + idamage = int( idamage ); + + if ( isplayer( eattacker ) ) + eattacker.pers["participation"]++; + + prevhealthratio = self.health / self.maxhealth; + + if ( isdefined( self.owner ) && isplayer( self.owner ) ) + team = self.owner.pers["team"]; + + if ( level.teambased && isplayer( eattacker ) && team == eattacker.pers["team"] ) + { + if ( level.friendlyfire == 0 ) + { + if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) + return; + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 1 ); + } + else if ( level.friendlyfire == 1 ) + { + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); + } + else if ( level.friendlyfire == 2 ) + { + if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) + return; + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 1 ); + } + else if ( level.friendlyfire == 3 ) + { + idamage = int( idamage * 0.5 ); + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); + } + + friendly = 1; + } + else + { + if ( !level.teambased && isdefined( self.targetname ) && self.targetname == "rcbomb" ) + { + + } + else if ( isdefined( self.owner ) && isdefined( eattacker ) && self.owner == eattacker ) + return; + + if ( idamage < 1 ) + idamage = 1; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( sweapon ) ) + eattacker thread maps\mp\gametypes_zm\_weapons::checkhit( sweapon ); + + if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isdefined( einflictor.iscooked ) ) + self.wascooked = gettime(); + else + self.wascooked = undefined; + + attacker_seat = undefined; + + if ( isdefined( eattacker ) ) + attacker_seat = self getoccupantseat( eattacker ); + + self.lastdamagewasfromenemy = isdefined( eattacker ) && !isdefined( attacker_seat ); + self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); + + if ( level.gametype == "hack" && sweapon != "emp_grenade_mp" ) + idamage = 0; + } + + if ( isdefined( eattacker ) && eattacker != self ) + { + if ( maps\mp\gametypes_zm\_globallogic_player::dodamagefeedback( sweapon, einflictor ) ) + { + if ( idamage > 0 ) + eattacker thread maps\mp\gametypes_zm\_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor ); + } + } + } +/# + if ( getdvarint( "g_debugDamage" ) ) + println( "actor:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); +#/ + if ( 1 ) + { + lpselfnum = self getentitynumber(); + lpselfteam = ""; + lpattackerteam = ""; + + if ( isplayer( eattacker ) ) + { + lpattacknum = eattacker getentitynumber(); + lpattackguid = eattacker getguid(); + lpattackname = eattacker.name; + lpattackerteam = eattacker.pers["team"]; + } + else + { + lpattacknum = -1; + lpattackguid = ""; + lpattackname = ""; + lpattackerteam = "world"; + } + + logprint( "VD;" + lpselfnum + ";" + lpselfteam + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\\n" ); + } +} + +callback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ) +{ + idamage = 0; + finnerdamage = 0; + fouterdamage = 0; + self.idflags = idflags; + self.idflagstime = gettime(); + + if ( game["state"] == "postgame" ) + return; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat ) + return; + + friendly = 0; + + if ( !( idflags & level.idflags_no_protection ) ) + { + if ( self isvehicleimmunetodamage( idflags, smeansofdeath, sweapon ) ) + return; + + if ( smeansofdeath == "MOD_PROJECTILE_SPLASH" || smeansofdeath == "MOD_GRENADE_SPLASH" || smeansofdeath == "MOD_EXPLOSIVE" ) + { + scalar = getvehicleprojectilesplashscalar( sweapon ); + idamage = int( idamage * scalar ); + finnerdamage *= scalar; + fouterdamage *= scalar; + + if ( finnerdamage == 0 ) + return; + + if ( idamage < 1 ) + idamage = 1; + } + + occupant_team = undefined; + + if ( level.teambased && isplayer( eattacker ) && occupant_team == eattacker.pers["team"] ) + { + if ( level.friendlyfire == 0 ) + { + if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) + return; + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); + } + else if ( level.friendlyfire == 1 ) + { + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); + } + else if ( level.friendlyfire == 2 ) + { + if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) + return; + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); + } + else if ( level.friendlyfire == 3 ) + { + idamage = int( idamage * 0.5 ); + + if ( idamage < 1 ) + idamage = 1; + + self.lastdamagewasfromenemy = 0; + self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); + } + + friendly = 1; + } + else + { + if ( idamage < 1 ) + idamage = 1; + + self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); + } + } +} + +vehiclecrush() +{ + self endon( "disconnect" ); + + if ( isdefined( level._effect ) && isdefined( level._effect["tanksquish"] ) ) + playfx( level._effect["tanksquish"], self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ) ); + + self playsound( "chr_crunch" ); +} + +getvehicleprojectilescalar( sweapon ) +{ + if ( sweapon == "satchel_charge_mp" ) + scale = 1; + else if ( sweapon == "sticky_grenade_mp" ) + scale = 1; + else if ( sweapon == "claymore_mp" ) + scale = 1; + else if ( sweapon == "remote_missile_missile_mp" ) + scale = 10.0; + else if ( sweapon == "remote_mortar_missile_mp" ) + scale = 10.0; + else if ( sweapon == "smaw_mp" ) + scale = 0.2; + else if ( sweapon == "fhj18_mp" ) + scale = 0.2; + else if ( issubstr( sweapon, "gl_" ) ) + scale = 1; + else if ( issubstr( sweapon, "turret_mp" ) ) + scale = 1; + else if ( issubstr( sweapon, "grenade" ) ) + scale = 1; + else + scale = 1; + + return scale; +} + +getvehicleprojectilesplashscalar( sweapon ) +{ + if ( sweapon == "satchel_charge_mp" ) + scale = 1; + else if ( sweapon == "sticky_grenade_mp" ) + scale = 1; + else if ( sweapon == "claymore_mp" ) + scale = 1; + else if ( sweapon == "remote_missile_missile_mp" ) + scale = 10.0; + else if ( sweapon == "remote_mortar_missile_mp" ) + scale = 4.0; + else if ( sweapon == "chopper_minigun_mp" ) + scale = 0.5; + else if ( issubstr( sweapon, "gl_" ) ) + scale = 0.5; + else if ( issubstr( sweapon, "turrent_mp" ) ) + scale = 0.1; + else if ( issubstr( sweapon, "grenade" ) ) + scale = 1; + else + scale = 1; + + return scale; +} + +getvehicleunderneathsplashscalar( sweapon ) +{ + if ( sweapon == "satchel_charge_mp" ) + { + scale = 10.0; + scale *= 3.0; + } + else + scale = 1.0; + + return scale; +} + +getvehiclebulletdamage( sweapon ) +{ + if ( issubstr( sweapon, "ptrs41_" ) ) + idamage = 25; + else if ( issubstr( sweapon, "gunner" ) ) + idamage = 5; + else if ( issubstr( sweapon, "mg42_bipod" ) || issubstr( sweapon, "30cal_bipod" ) ) + idamage = 5; + else + idamage = 1; + + return idamage; +} + +allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) +{ + if ( isdefined( self.allowfriendlyfiredamageoverride ) ) + return [[ self.allowfriendlyfiredamageoverride ]]( einflictor, eattacker, smeansofdeath, sweapon ); + + vehicle = eattacker getvehicleoccupied(); + return 0; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_gv_actions.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_gv_actions.gsc new file mode 100644 index 0000000..125b60c --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_gv_actions.gsc @@ -0,0 +1,873 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\gametypes_zm\_globallogic; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\gametypes_zm\_globallogic_ui; + +initializeactionarray() +{ + level.gametypeactions = []; + level.gametypeactions["GiveAmmo"] = ::dogiveammo; + level.gametypeactions["RemoveAmmo"] = ::doremoveammo; + level.gametypeactions["PlaySound"] = ::doplaysound; + level.gametypeactions["EnableUAV"] = ::doenableuav; + level.gametypeactions["GiveScore"] = ::dogivescore; + level.gametypeactions["RemoveScore"] = ::doremovescore; + level.gametypeactions["SetHeader"] = ::dosetheader; + level.gametypeactions["SetSubHeader"] = ::dosetsubheader; + level.gametypeactions["DisplayMessage"] = ::dodisplaymessage; + level.gametypeactions["GiveHealth"] = ::dogivehealth; + level.gametypeactions["RemoveHealth"] = ::doremovehealth; + level.gametypeactions["SetHealthRegen"] = ::dosethealthregen; + level.gametypeactions["ChangeClass"] = ::dochangeclass; + level.gametypeactions["ChangeTeam"] = ::dochangeteam; + level.gametypeactions["GivePerk"] = ::dogiveperk; + level.gametypeactions["RemovePerk"] = ::doremoveperk; + level.gametypeactions["GiveInvuln"] = ::dogiveinvuln; + level.gametypeactions["RemoveInvuln"] = ::doremoveinvuln; + level.gametypeactions["SetDamageModifier"] = ::dosetdamagemodifier; + level.gametypeactions["GiveKillstreak"] = ::dogivekillstreak; + level.gametypeactions["RemoveKillstreak"] = ::doremovekillstreak; + level.gametypeactions["GiveLives"] = ::dogivelives; + level.gametypeactions["RemoveLives"] = ::doremovelives; + level.gametypeactions["ScaleMoveSpeed"] = ::doscalemovespeed; + level.gametypeactions["ShowOnRadar"] = ::doshowonradar; + level.conditionals = []; + level.conditionals["Equals"] = ::equals; + level.conditionals["=="] = ::equals; + level.conditionals["!="] = ::notequals; + level.conditionals["<"] = ::lessthan; + level.conditionals["<="] = ::lessthanequals; + level.conditionals[">"] = ::greaterthan; + level.conditionals[">="] = ::greaterthanequals; + level.conditionals["InPlace"] = ::inplace; + level.conditionallefthandside = []; + level.conditionallefthandside["PlayersLeft"] = ::playersleft; + level.conditionallefthandside["RoundsPlayed"] = ::roundsplayed; + level.conditionallefthandside["HitBy"] = ::hitby; + level.conditionallefthandside["PlayersClass"] = ::playersclass; + level.conditionallefthandside["VictimsClass"] = ::playersclass; + level.conditionallefthandside["AttackersClass"] = ::attackersclass; + level.conditionallefthandside["PlayersPlace"] = ::playersplace; + level.conditionallefthandside["VictimsPlace"] = ::playersplace; + level.conditionallefthandside["AttackersPlace"] = ::attackersplace; + level.targets = []; + level.targets["Everyone"] = ::gettargeteveryone; + level.targets["PlayersLeft"] = ::gettargetplayersleft; + level.targets["PlayersEliminated"] = ::gettargetplayerseliminated; + level.targets["PlayersTeam"] = ::gettargetplayersteam; + level.targets["VictimsTeam"] = ::gettargetplayersteam; + level.targets["OtherTeam"] = ::gettargetotherteam; + level.targets["AttackersTeam"] = ::gettargetotherteam; + level.targets["PlayersLeftOnPlayersTeam"] = ::gettargetplayersleftonplayersteam; + level.targets["PlayersLeftOnOtherTeam"] = ::gettargetplayersleftonotherteam; + level.targets["PlayersLeftOnVictimsTeam"] = ::gettargetplayersleftonplayersteam; + level.targets["PlayersLeftOnAttackersTeam"] = ::gettargetplayersleftonotherteam; + level.targets["PlayersEliminatedOnPlayersTeam"] = ::gettargetplayerseliminatedonplayersteam; + level.targets["PlayersEliminatedOnOtherTeam"] = ::gettargetplayerseliminatedonotherteam; + level.targets["PlayersEliminatedOnVictimsTeam"] = ::gettargetplayerseliminatedonplayersteam; + level.targets["PlayersEliminatedOnAttackersTeam"] = ::gettargetplayerseliminatedonotherteam; + level.targets["AssistingPlayers"] = ::getassistingplayers; +} + +equals( param1, param2 ) +{ + return param1 == param2; +} + +notequals( param1, param2 ) +{ + return param1 != param2; +} + +lessthan( param1, param2 ) +{ + return param1 < param2; +} + +lessthanequals( param1, param2 ) +{ + return param1 <= param2; +} + +greaterthan( param1, param2 ) +{ + return param1 > param2; +} + +greaterthanequals( param1, param2 ) +{ + return param1 >= param2; +} + +inplace( param1, param2 ) +{ + if ( param1 == param2 ) + return true; + + if ( param2 == "top3" && param1 == "first" ) + return true; + + return false; +} + +playersleft( rule ) +{ + return 0; +} + +roundsplayed( rule ) +{ + return game["roundsplayed"] + 1; +} + +hitby( rule ) +{ + meansofdeath = rule.target["MeansOfDeath"]; + weapon = rule.target["Weapon"]; + + if ( !isdefined( meansofdeath ) || !isdefined( weapon ) ) + return undefined; + + switch ( weapon ) + { + case "knife_ballistic_mp": + return "knife"; + } + + switch ( meansofdeath ) + { + case "MOD_RIFLE_BULLET": + case "MOD_PISTOL_BULLET": + return "bullet"; + case "MOD_MELEE": + case "MOD_BAYONET": + return "knife"; + case "MOD_HEAD_SHOT": + return "headshot"; + case "MOD_PROJECTILE_SPLASH": + case "MOD_PROJECTILE": + case "MOD_GRENADE_SPLASH": + case "MOD_GRENADE": + case "MOD_EXPLOSIVE": + return "explosive"; + } + + return undefined; +} + +getplayersclass( player ) +{ + return player.pers["class"]; +} + +playersclass( rule ) +{ + player = rule.target["Player"]; + return getplayersclass( player ); +} + +attackersclass( rule ) +{ + player = rule.target["Attacker"]; + return getplayersclass( player ); +} + +getplayersplace( player ) +{ + maps\mp\gametypes_zm\_globallogic::updateplacement(); + + if ( !isdefined( level.placement["all"] ) ) + return; + + for ( place = 0; place < level.placement["all"].size; place++ ) + { + if ( level.placement["all"][place] == player ) + break; + } + + place++; + + if ( place == 1 ) + return "first"; + else if ( place <= 3 ) + return "top3"; + else if ( place == level.placement["all"].size ) + return "last"; + + return "middle"; +} + +playersplace( rule ) +{ + player = rule.target["Player"]; + return getplayersplace( player ); +} + +attackersplace( rule ) +{ + player = rule.target["Attacker"]; + return getplayersplace( player ); +} + +gettargeteveryone( rule ) +{ + return level.players; +} + +gettargetplayersleft( rule ) +{ + return 0; +} + +gettargetplayerseliminated( rule ) +{ + return 0; +} + +gettargetplayersteam( rule ) +{ + player = rule.target["Player"]; + + if ( !isdefined( player ) ) + return []; + + return getplayersonteam( level.players, player.pers["team"] ); +} + +gettargetotherteam( rule ) +{ + player = rule.target["Player"]; + + if ( !isdefined( player ) ) + return []; + + return getplayersonteam( level.players, getotherteam( player.pers["team"] ) ); +} + +gettargetplayersleftonplayersteam( rule ) +{ + return []; +} + +gettargetplayersleftonotherteam( rule ) +{ + return []; +} + +gettargetplayerseliminatedonplayersteam( rule ) +{ + return []; +} + +gettargetplayerseliminatedonotherteam( rule ) +{ + return []; +} + +getassistingplayers( rule ) +{ + assisters = []; + attacker = rule.target["Attacker"]; + + if ( !isdefined( rule.target["Assisters"] ) || !isdefined( attacker ) ) + return assisters; + + for ( j = 0; j < rule.target["Assisters"].size; j++ ) + { + player = rule.target["Assisters"][j]; + + if ( !isdefined( player ) ) + continue; + + if ( player == attacker ) + continue; + + assisters[assisters.size] = player; + } + + return assisters; +} + +executegametypeeventrule( rule ) +{ + if ( !aregametypeeventruleconditionalsmet( rule ) ) + return; + + if ( !isdefined( level.gametypeactions[rule.action] ) ) + { +/# + error( "GAMETYPE VARIANTS - unknown action: " + rule.action + "!" ); +#/ + return; + } + + thread internalexecuterule( rule ); +} + +internalexecuterule( rule ) +{ + +} + +aregametypeeventruleconditionalsmet( rule ) +{ + if ( !isdefined( rule.conditionals ) || rule.conditionals.size == 0 ) + return 1; + + combinedresult = 1; + + if ( rule.conditionaleval == "OR" ) + combinedresult = 0; + + for ( i = 0; i < rule.conditionals.size; i++ ) + { + conditionalresult = evaluategametypeeventruleconditional( rule, rule.conditionals[i] ); + + switch ( rule.conditionaleval ) + { + case "AND": + combinedresult = combinedresult && conditionalresult; + break; + case "OR": + combinedresult = combinedresult || conditionalresult; + break; + } + + if ( rule.conditionaleval == "AND" && !combinedresult ) + break; + + if ( rule.conditionaleval == "OR" && combinedresult ) + break; + } + + return combinedresult; +} + +evaluategametypeeventruleconditional( rule, conditional ) +{ + if ( !isdefined( conditional.lhs ) || !isdefined( conditional.operand ) || !isdefined( conditional.rhs ) ) + return 0; + + if ( !isdefined( level.conditionallefthandside[conditional.lhs] ) ) + return 0; + + lhsvalue = [[ level.conditionallefthandside[conditional.lhs] ]]( rule ); + + if ( !isdefined( lhsvalue ) || !isdefined( level.conditionals[conditional.operand] ) ) + return 0; + + return [[ level.conditionals[conditional.operand] ]]( lhsvalue, conditional.rhs ); +} + +getplayersonteam( players, team ) +{ + playersonteam = []; + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( player.pers["team"] == team ) + playersonteam[playersonteam.size] = player; + } + + return playersonteam; +} + +gettargetsforgametypeeventrule( rule ) +{ + targets = []; + + if ( !isdefined( rule.targetname ) ) + return targets; + + if ( isdefined( rule.target[rule.targetname] ) ) + targets[targets.size] = rule.target[rule.targetname]; + else if ( isdefined( level.targets[rule.targetname] ) ) + targets = [[ level.targets[rule.targetname] ]]( rule ); + + return targets; +} + +doesrulehavevalidparam( rule ) +{ + return isdefined( rule.params ) && isarray( rule.params ) && rule.params.size > 0; +} + +sortplayersbylivesdescending( players ) +{ + if ( !isdefined( players ) ) + return undefined; + + swapped = 1; + + for ( n = players.size; swapped; n-- ) + { + swapped = 0; + + for ( i = 0; i < n - 1; i++ ) + { + if ( players[i].pers["lives"] < players[i + 1].pers["lives"] ) + { + temp = players[i]; + players[i] = players[i + 1]; + players[i + 1] = temp; + swapped = 1; + } + } + } + + return players; +} + +giveammo( players, amount ) +{ + for ( i = 0; i < players.size; i++ ) + { + wait 0.5; + player = players[i]; + currentweapon = player getcurrentweapon(); + clipammo = player getweaponammoclip( currentweapon ); + player setweaponammoclip( currentweapon, clipammo + amount ); + } +} + +dogiveammo( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + targets = gettargetsforgametypeeventrule( rule ); + giveammo( targets, rule.params[0] ); +} + +doremoveammo( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + targets = gettargetsforgametypeeventrule( rule ); + giveammo( targets, 0 - rule.params[0] ); +} + +doplaysound( rule ) +{ + if ( doesrulehavevalidparam( rule ) ) + playsoundonplayers( rule.params[0] ); +} + +doenableuav( rule ) +{ + targets = gettargetsforgametypeeventrule( rule ); + + for ( targetindex = 0; targetindex < targets.size; targetindex++ ) + { + targets[targetindex].pers["hasRadar"] = 1; + targets[targetindex].hasspyplane = 1; + } +} + +givescore( players, amount ) +{ + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + score = maps\mp\gametypes_zm\_globallogic_score::_getplayerscore( player ); + maps\mp\gametypes_zm\_globallogic_score::_setplayerscore( player, score + amount ); + } +} + +dogivescore( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + targets = gettargetsforgametypeeventrule( rule ); + givescore( targets, rule.params[0] ); +} + +doremovescore( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + targets = gettargetsforgametypeeventrule( rule ); + givescore( targets, 0 - rule.params[0] ); +} + +dosetheader( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + targets = gettargetsforgametypeeventrule( rule ); + + for ( targetindex = 0; targetindex < targets.size; targetindex++ ) + { + target = targets[targetindex]; + displaytextonhudelem( target, target.customgametypeheader, rule.params[0], rule.params[1], "gv_header", rule.params[2] ); + } +} + +dosetsubheader( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + targets = gettargetsforgametypeeventrule( rule ); + + for ( targetindex = 0; targetindex < targets.size; targetindex++ ) + { + target = targets[targetindex]; + displaytextonhudelem( target, target.customgametypesubheader, rule.params[0], rule.params[1], "gv_subheader", rule.params[2] ); + } +} + +displaytextonhudelem( target, texthudelem, text, secondstodisplay, notifyname, valueparam ) +{ + texthudelem.alpha = 1; + + if ( isdefined( valueparam ) ) + texthudelem settext( text, valueparam ); + else + texthudelem settext( text ); + + if ( !isdefined( secondstodisplay ) || secondstodisplay <= 0 ) + { + target.doingnotify = 0; + target notify( notifyname ); + return; + } + + target thread fadecustomgametypehudelem( texthudelem, secondstodisplay, notifyname ); +} + +fadecustomgametypehudelem( hudelem, seconds, notifyname ) +{ + self endon( "disconnect" ); + self notify( notifyname ); + self endon( notifyname ); + + if ( seconds <= 0 ) + return; + + self.doingnotify = 1; + wait( seconds ); + + while ( hudelem.alpha > 0 ) + { + hudelem.alpha -= 0.05; + + if ( hudelem.alpha < 0 ) + hudelem.alpha = 0; + + wait 0.05; + } + + self.doingnotify = 0; +} + +dodisplaymessage( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + targets = gettargetsforgametypeeventrule( rule ); + + for ( targetindex = 0; targetindex < targets.size; targetindex++ ) + thread announcemessage( targets[targetindex], rule.params[0], 2.0 ); +} + +announcemessage( target, messagetext, time ) +{ + target endon( "disconnect" ); + clientannouncement( target, messagetext, int( time * 1000 ) ); + + if ( time == 0 ) + time = getdvarfloat( _hash_E8C4FC20 ); + + target.doingnotify = 1; + wait( time ); + target.doingnotify = 0; +} + +givehealth( players, amount ) +{ + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + player.health += amount; + } +} + +dogivehealth( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + givehealth( gettargetsforgametypeeventrule( rule ), rule.params[0] ); +} + +doremovehealth( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + givehealth( gettargetsforgametypeeventrule( rule ), 0 - rule.params[0] ); +} + +dosethealthregen( rule ) +{ + targets = gettargetsforgametypeeventrule( rule ); + + for ( targetindex = 0; targetindex < targets.size; targetindex++ ) + { + player = targets[targetindex]; + player.regenrate = rule.params[0]; + } +} + +dochangeclass( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; +} + +dochangeteam( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + team = rule.params[0]; + teamkeys = getarraykeys( level.teams ); + targets = gettargetsforgametypeeventrule( rule ); + + for ( targetindex = 0; targetindex < targets.size; targetindex++ ) + { + target = targets[targetindex]; + + if ( target.pers["team"] == team ) + continue; + + if ( team == "toggle" ) + { + team = teamkeys[randomint( teamkeys.size )]; + + for ( teamindex = 0; teamindex < teamkeys.size; teamindex++ ) + { + if ( target.pers["team"] == teamkeys[teamindex] ) + { + team = teamkeys[( teamindex + 1 ) % teamkeys.size]; + break; + } + } + } + + target.pers["team"] = team; + target.team = team; + + if ( level.teambased ) + target.sessionteam = team; + else + target.sessionteam = "none"; + + target notify( "joined_team" ); + level notify( "joined_team" ); + } +} + +displayperk( player, imagename ) +{ + index = 0; + + if ( isdefined( player.perkicon ) ) + { + index = -1; + + for ( i = 0; i < player.perkicon.size; i++ ) + { + if ( player.perkicon[i].alpha == 0 ) + { + index = i; + break; + } + } + + if ( index == -1 ) + return; + } + + player maps\mp\gametypes_zm\_hud_util::showperk( index, imagename, 10 ); + player thread maps\mp\gametypes_zm\_globallogic_ui::hideloadoutaftertime( 3.0 ); + player thread maps\mp\gametypes_zm\_globallogic_ui::hideloadoutondeath(); +} + +setorunsetperk( players, perks, shouldset ) +{ + if ( level.perksenabled == 0 ) + return; + + if ( perks.size < 2 ) + return; + + hasperkalready = 0; + imagename = perks[perks.size - 1]; + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + for ( perkindex = 0; perkindex < perks.size - 1; perkindex++ ) + { + perk = perks[perkindex]; + + if ( player hasperk( perk ) ) + hasperkalready = 1; + + if ( shouldset ) + { + player setperk( perk ); + continue; + } + + player unsetperk( perk ); + } + + if ( shouldset && !hasperkalready && getdvarint( "scr_showperksonspawn" ) == 1 ) + displayperk( player, imagename ); + } +} + +dogiveperk( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + setorunsetperk( gettargetsforgametypeeventrule( rule ), rule.params, 1 ); +} + +doremoveperk( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + setorunsetperk( gettargetsforgametypeeventrule( rule ), rule.params, 0 ); +} + +giveorremovekillstreak( rule, shouldgive ) +{ + +} + +dogivekillstreak( rule ) +{ + giveorremovekillstreak( rule, 1 ); +} + +doremovekillstreak( rule ) +{ + giveorremovekillstreak( rule, 0 ); +} + +givelives( players, amount ) +{ + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + player.pers["lives"] += amount; + + if ( player.pers["lives"] < 0 ) + player.pers["lives"] = 0; + } +} + +dogivelives( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + givelives( gettargetsforgametypeeventrule( rule ), rule.params[0] ); +} + +doremovelives( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + givelives( gettargetsforgametypeeventrule( rule ), 0 - rule.params[0] ); +} + +giveorremoveinvuln( players, shouldgiveinvuln ) +{ + for ( i = 0; i < players.size; i++ ) + player = players[i]; +} + +dogiveinvuln( rule ) +{ + giveorremoveinvuln( gettargetsforgametypeeventrule( rule ), 1 ); +} + +doremoveinvuln( rule ) +{ + giveorremoveinvuln( gettargetsforgametypeeventrule( rule ), 0 ); +} + +dosetdamagemodifier( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + players = gettargetsforgametypeeventrule( rule ); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + player.damagemodifier = rule.params[0]; + } +} + +doscalemovespeed( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + movespeedscale = rule.params[0]; + targets = gettargetsforgametypeeventrule( rule ); + + for ( targetindex = 0; targetindex < targets.size; targetindex++ ) + { + target = targets[targetindex]; + target.movementspeedmodifier = movespeedscale * target getmovespeedscale(); + + if ( target.movementspeedmodifier < 0.1 ) + target.movementspeedmodifier = 0.1; + else if ( target.movementspeedmodifier > 4.0 ) + target.movementspeedmodifier = 4.0; + + target setmovespeedscale( target.movementspeedmodifier ); + } +} + +doshowonradar( rule ) +{ + if ( !doesrulehavevalidparam( rule ) ) + return; + + targets = gettargetsforgametypeeventrule( rule ); + + for ( targetindex = 0; targetindex < targets.size; targetindex++ ) + { + if ( rule.params[0] == "enable" ) + { + targets[targetindex] setperk( "specialty_showonradar" ); + continue; + } + + targets[targetindex] unsetperk( "specialty_showonradar" ); + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_healthoverlay.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_healthoverlay.gsc new file mode 100644 index 0000000..e3c164f --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_healthoverlay.gsc @@ -0,0 +1,278 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\gametypes_zm\_globallogic_player; + +init() +{ + precacheshader( "overlay_low_health" ); + level.healthoverlaycutoff = 0.55; + regentime = level.playerhealthregentime; + level.playerhealth_regularregendelay = regentime * 1000; + level.healthregendisabled = level.playerhealth_regularregendelay <= 0; + level thread onplayerconnect(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread onplayerspawned(); + player thread onplayerkilled(); + player thread onjoinedteam(); + player thread onjoinedspectators(); + player thread onplayerdisconnect(); + } +} + +onjoinedteam() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "joined_team" ); + + self notify( "end_healthregen" ); + } +} + +onjoinedspectators() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "joined_spectators" ); + + self notify( "end_healthregen" ); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread playerhealthregen(); + } +} + +onplayerkilled() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "killed_player" ); + + self notify( "end_healthregen" ); + } +} + +onplayerdisconnect() +{ + self waittill( "disconnect" ); + + self notify( "end_healthregen" ); +} + +playerhealthregen() +{ + self endon( "end_healthregen" ); + + if ( self.health <= 0 ) + { + assert( !isalive( self ) ); + return; + } + + maxhealth = self.health; + oldhealth = maxhealth; + player = self; + health_add = 0; + regenrate = 0.1; + usetrueregen = 0; + veryhurt = 0; + player.breathingstoptime = -10000; + thread playerbreathingsound( maxhealth * 0.35 ); + thread playerheartbeatsound( maxhealth * 0.35 ); + lastsoundtime_recover = 0; + hurttime = 0; + newhealth = 0; + + for (;;) + { + wait 0.05; + + if ( isdefined( player.regenrate ) ) + { + regenrate = player.regenrate; + usetrueregen = 1; + } + + if ( player.health == maxhealth ) + { + veryhurt = 0; + self.atbrinkofdeath = 0; + continue; + } + + if ( player.health <= 0 ) + return; + + if ( isdefined( player.laststand ) && player.laststand ) + continue; + + wasveryhurt = veryhurt; + ratio = player.health / maxhealth; + + if ( ratio <= level.healthoverlaycutoff ) + { + veryhurt = 1; + self.atbrinkofdeath = 1; + + if ( !wasveryhurt ) + hurttime = gettime(); + } + + if ( player.health >= oldhealth ) + { + regentime = level.playerhealth_regularregendelay; + + if ( player hasperk( "specialty_healthregen" ) ) + regentime = int( regentime / getdvarfloat( "perk_healthRegenMultiplier" ) ); + + if ( gettime() - hurttime < regentime ) + continue; + + if ( level.healthregendisabled ) + continue; + + if ( gettime() - lastsoundtime_recover > regentime ) + { + lastsoundtime_recover = gettime(); + self notify( "snd_breathing_better" ); + } + + if ( veryhurt ) + { + newhealth = ratio; + veryhurttime = 3000; + + if ( player hasperk( "specialty_healthregen" ) ) + veryhurttime = int( veryhurttime / getdvarfloat( "perk_healthRegenMultiplier" ) ); + + if ( gettime() > hurttime + veryhurttime ) + newhealth += regenrate; + } + else if ( usetrueregen ) + newhealth = ratio + regenrate; + else + newhealth = 1; + + if ( newhealth >= 1.0 ) + { + self maps\mp\gametypes_zm\_globallogic_player::resetattackerlist(); + newhealth = 1.0; + } + + if ( newhealth <= 0 ) + return; + + player setnormalhealth( newhealth ); + change = player.health - oldhealth; + + if ( change > 0 ) + player decayplayerdamages( change ); + + oldhealth = player.health; + continue; + } + + oldhealth = player.health; + health_add = 0; + hurttime = gettime(); + player.breathingstoptime = hurttime + 6000; + } +} + +decayplayerdamages( decay ) +{ + if ( !isdefined( self.attackerdamage ) ) + return; + + for ( i = 0; i < self.attackerdamage.size; i++ ) + { + if ( !isdefined( self.attackerdamage[i] ) || !isdefined( self.attackerdamage[i].damage ) ) + continue; + + self.attackerdamage[i].damage -= decay; + + if ( self.attackerdamage[i].damage < 0 ) + self.attackerdamage[i].damage = 0; + } +} + +playerbreathingsound( healthcap ) +{ + self endon( "end_healthregen" ); + wait 2; + player = self; + + for (;;) + { + wait 0.2; + + if ( player.health <= 0 ) + return; + + if ( player.health >= healthcap ) + continue; + + if ( level.healthregendisabled && gettime() > player.breathingstoptime ) + continue; + + player notify( "snd_breathing_hurt" ); + wait 0.784; + wait( 0.1 + randomfloat( 0.8 ) ); + } +} + +playerheartbeatsound( healthcap ) +{ + self endon( "end_healthregen" ); + self.hearbeatwait = 0.2; + wait 2; + player = self; + + for (;;) + { + wait 0.2; + + if ( player.health <= 0 ) + return; + + if ( player.health >= healthcap ) + { + self.hearbeatwait = 0.3; + continue; + } + + if ( level.healthregendisabled && gettime() > player.breathingstoptime ) + { + self.hearbeatwait = 0.3; + continue; + } + + player playlocalsound( "mpl_player_heartbeat" ); + wait( self.hearbeatwait ); + + if ( self.hearbeatwait <= 0.6 ) + self.hearbeatwait += 0.1; + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_hostmigration.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_hostmigration.gsc new file mode 100644 index 0000000..bfbf85b --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_hostmigration.gsc @@ -0,0 +1,518 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_hud; +#include maps\mp\zombies\_zm; + +debug_script_structs() +{ +/# + if ( isdefined( level.struct ) ) + { + println( "*** Num structs " + level.struct.size ); + println( "" ); + + for ( i = 0; i < level.struct.size; i++ ) + { + struct = level.struct[i]; + + if ( isdefined( struct.targetname ) ) + { + println( "---" + i + " : " + struct.targetname ); + continue; + } + + println( "---" + i + " : " + "NONE" ); + } + } + else + println( "*** No structs defined." ); +#/ +} + +updatetimerpausedness() +{ + shouldbestopped = isdefined( level.hostmigrationtimer ); + + if ( !level.timerstopped && shouldbestopped ) + { + level.timerstopped = 1; + level.timerpausetime = gettime(); + } + else if ( level.timerstopped && !shouldbestopped ) + { + level.timerstopped = 0; + level.discardtime += gettime() - level.timerpausetime; + } +} + +callback_hostmigrationsave() +{ + +} + +callback_prehostmigrationsave() +{ + undo_link_changes(); + disablezombies( 1 ); + + if ( is_true( level._hm_should_pause_spawning ) ) + flag_set( "spawn_zombies" ); + + for ( i = 0; i < level.players.size; i++ ) + level.players[i] enableinvulnerability(); +} + +pausetimer() +{ + level.migrationtimerpausetime = gettime(); +} + +resumetimer() +{ + level.discardtime += gettime() - level.migrationtimerpausetime; +} + +locktimer() +{ + level endon( "host_migration_begin" ); + level endon( "host_migration_end" ); + + for (;;) + { + currtime = gettime(); + wait 0.05; + + if ( !level.timerstopped && isdefined( level.discardtime ) ) + level.discardtime += gettime() - currtime; + } +} + +callback_hostmigration() +{ + redo_link_changes(); + setslowmotion( 1, 1, 0 ); + makedvarserverinfo( "ui_guncycle", 0 ); + level.hostmigrationreturnedplayercount = 0; + + if ( level.gameended ) + { +/# + println( "Migration starting at time " + gettime() + ", but game has ended, so no countdown." ); +#/ + return; + } + + sethostmigrationstatus( 1 ); + level notify( "host_migration_begin" ); + + for ( i = 0; i < level.players.size; i++ ) + { + if ( isdefined( level.hostmigration_link_entity_callback ) ) + { + if ( !isdefined( level.players[i]._host_migration_link_entity ) ) + level.players[i]._host_migration_link_entity = level.players[i] [[ level.hostmigration_link_entity_callback ]](); + } + + level.players[i] thread hostmigrationtimerthink(); + } + + if ( isdefined( level.hostmigration_ai_link_entity_callback ) ) + { + zombies = getaiarray( level.zombie_team ); + + if ( isdefined( zombies ) && zombies.size > 0 ) + { + foreach ( zombie in zombies ) + { + if ( !isdefined( zombie._host_migration_link_entity ) ) + zombie._host_migration_link_entity = zombie [[ level.hostmigration_ai_link_entity_callback ]](); + } + } + } + + if ( level.inprematchperiod ) + level waittill( "prematch_over" ); +/# + println( "Migration starting at time " + gettime() ); +#/ + level.hostmigrationtimer = 1; + thread locktimer(); + zombies = getaiarray( level.zombie_team ); + + if ( isdefined( zombies ) && zombies.size > 0 ) + { + foreach ( zombie in zombies ) + { + if ( isdefined( zombie._host_migration_link_entity ) ) + { + ent = spawn( "script_origin", zombie.origin ); + ent.angles = zombie.angles; + zombie linkto( ent ); + ent linkto( zombie._host_migration_link_entity, "tag_origin", zombie._host_migration_link_entity worldtolocalcoords( ent.origin ), ent.angles + zombie._host_migration_link_entity.angles ); + zombie._host_migration_link_helper = ent; + zombie linkto( zombie._host_migration_link_helper ); + } + } + } + + level endon( "host_migration_begin" ); + level._hm_should_pause_spawning = flag( "spawn_zombies" ); + + if ( level._hm_should_pause_spawning ) + flag_clear( "spawn_zombies" ); + + hostmigrationwait(); + + foreach ( player in level.players ) + player thread post_migration_become_vulnerable(); + + zombies = getaiarray( level.zombie_team ); + + if ( isdefined( zombies ) && zombies.size > 0 ) + { + foreach ( zombie in zombies ) + { + if ( isdefined( zombie._host_migration_link_entity ) ) + { + zombie unlink(); + zombie._host_migration_link_helper delete(); + zombie._host_migration_link_helper = undefined; + zombie._host_migration_link_entity = undefined; + } + } + } + + enablezombies( 1 ); + + if ( level._hm_should_pause_spawning ) + flag_set( "spawn_zombies" ); + + level.hostmigrationtimer = undefined; + level._hm_should_pause_spawning = undefined; + sethostmigrationstatus( 0 ); +/# + println( "Migration finished at time " + gettime() ); +#/ + level notify( "host_migration_end" ); +} + +post_migration_become_vulnerable() +{ + self endon( "disconnect" ); + wait 3; + self disableinvulnerability(); +} + +matchstarttimerconsole_internal( counttime, matchstarttimer ) +{ + waittillframeend; + level endon( "match_start_timer_beginning" ); + + while ( counttime > 0 && !level.gameended ) + { + matchstarttimer thread maps\mp\gametypes_zm\_hud::fontpulse( level ); + wait( matchstarttimer.inframes * 0.05 ); + matchstarttimer setvalue( counttime ); + counttime--; + wait( 1 - matchstarttimer.inframes * 0.05 ); + } +} + +matchstarttimerconsole( type, duration ) +{ + level notify( "match_start_timer_beginning" ); + wait 0.05; + matchstarttext = createserverfontstring( "objective", 1.5 ); + matchstarttext setpoint( "CENTER", "CENTER", 0, -40 ); + matchstarttext.sort = 1001; + matchstarttext settext( game["strings"]["waiting_for_teams"] ); + matchstarttext.foreground = 0; + matchstarttext.hidewheninmenu = 1; + matchstarttext settext( game["strings"][type] ); + matchstarttimer = createserverfontstring( "objective", 2.2 ); + matchstarttimer setpoint( "CENTER", "CENTER", 0, 0 ); + matchstarttimer.sort = 1001; + matchstarttimer.color = ( 1, 1, 0 ); + matchstarttimer.foreground = 0; + matchstarttimer.hidewheninmenu = 1; + matchstarttimer maps\mp\gametypes_zm\_hud::fontpulseinit(); + counttime = int( duration ); + + if ( counttime >= 2 ) + matchstarttimerconsole_internal( counttime, matchstarttimer ); + else + { + + } + + matchstarttimer destroyelem(); + matchstarttext destroyelem(); +} + +hostmigrationwait() +{ + level endon( "game_ended" ); + + if ( level.hostmigrationreturnedplayercount < level.players.size * 2 / 3 ) + { + thread matchstarttimerconsole( "waiting_for_teams", 20.0 ); + hostmigrationwaitforplayers(); + } + + thread matchstarttimerconsole( "match_starting_in", 5.0 ); + wait 5; +} + +hostmigrationwaitforplayers() +{ + level endon( "hostmigration_enoughplayers" ); + wait 15; +} + +hostmigrationtimerthink_internal() +{ + level endon( "host_migration_begin" ); + level endon( "host_migration_end" ); + self.hostmigrationcontrolsfrozen = 0; + + while ( !isalive( self ) ) + self waittill( "spawned" ); + + if ( isdefined( self._host_migration_link_entity ) ) + { + ent = spawn( "script_origin", self.origin ); + ent.angles = self.angles; + self linkto( ent ); + ent linkto( self._host_migration_link_entity, "tag_origin", self._host_migration_link_entity worldtolocalcoords( ent.origin ), ent.angles + self._host_migration_link_entity.angles ); + self._host_migration_link_helper = ent; +/# + println( "Linking player to ent " + self._host_migration_link_entity.targetname ); +#/ + } + + self.hostmigrationcontrolsfrozen = 1; + self freezecontrols( 1 ); + + level waittill( "host_migration_end" ); +} + +hostmigrationtimerthink() +{ + self endon( "disconnect" ); + level endon( "host_migration_begin" ); + hostmigrationtimerthink_internal(); + + if ( self.hostmigrationcontrolsfrozen ) + { + self freezecontrols( 0 ); + self.hostmigrationcontrolsfrozen = 0; +/# + println( " Host migration unfreeze controls" ); +#/ + } + + if ( isdefined( self._host_migration_link_entity ) ) + { + self unlink(); + self._host_migration_link_helper delete(); + self._host_migration_link_helper = undefined; + + if ( isdefined( self._host_migration_link_entity._post_host_migration_thread ) ) + self thread [[ self._host_migration_link_entity._post_host_migration_thread ]]( self._host_migration_link_entity ); + + self._host_migration_link_entity = undefined; + } +} + +waittillhostmigrationdone() +{ + if ( !isdefined( level.hostmigrationtimer ) ) + return 0; + + starttime = gettime(); + + level waittill( "host_migration_end" ); + + return gettime() - starttime; +} + +waittillhostmigrationstarts( duration ) +{ + if ( isdefined( level.hostmigrationtimer ) ) + return; + + level endon( "host_migration_begin" ); + wait( duration ); +} + +waitlongdurationwithhostmigrationpause( duration ) +{ + if ( duration == 0 ) + return; + + assert( duration > 0 ); + starttime = gettime(); + endtime = gettime() + duration * 1000; + + while ( gettime() < endtime ) + { + waittillhostmigrationstarts( ( endtime - gettime() ) / 1000 ); + + if ( isdefined( level.hostmigrationtimer ) ) + { + timepassed = waittillhostmigrationdone(); + endtime += timepassed; + } + } + + if ( gettime() != endtime ) + { +/# + println( "SCRIPT WARNING: gettime() = " + gettime() + " NOT EQUAL TO endtime = " + endtime ); +#/ + } + + waittillhostmigrationdone(); + return gettime() - starttime; +} + +waitlongdurationwithgameendtimeupdate( duration ) +{ + if ( duration == 0 ) + return; + + assert( duration > 0 ); + starttime = gettime(); + endtime = gettime() + duration * 1000; + + while ( gettime() < endtime ) + { + waittillhostmigrationstarts( ( endtime - gettime() ) / 1000 ); + + while ( isdefined( level.hostmigrationtimer ) ) + { + endtime += 1000; + setgameendtime( int( endtime ) ); + wait 1; + } + } +/# + if ( gettime() != endtime ) + println( "SCRIPT WARNING: gettime() = " + gettime() + " NOT EQUAL TO endtime = " + endtime ); +#/ + while ( isdefined( level.hostmigrationtimer ) ) + { + endtime += 1000; + setgameendtime( int( endtime ) ); + wait 1; + } + + return gettime() - starttime; +} + +find_alternate_player_place( v_origin, min_radius, max_radius, max_height, ignore_targetted_nodes ) +{ + found_node = undefined; + a_nodes = getnodesinradiussorted( v_origin, max_radius, min_radius, max_height, "pathnodes" ); + + if ( isdefined( a_nodes ) && a_nodes.size > 0 ) + { + a_player_volumes = getentarray( "player_volume", "script_noteworthy" ); + index = a_nodes.size - 1; + + for ( i = index; i >= 0; i-- ) + { + n_node = a_nodes[i]; + + if ( ignore_targetted_nodes == 1 ) + { + if ( isdefined( n_node.target ) ) + continue; + } + + if ( !positionwouldtelefrag( n_node.origin ) ) + { + if ( maps\mp\zombies\_zm_utility::check_point_in_enabled_zone( n_node.origin, 1, a_player_volumes ) ) + { + v_start = ( n_node.origin[0], n_node.origin[1], n_node.origin[2] + 30 ); + v_end = ( n_node.origin[0], n_node.origin[1], n_node.origin[2] - 30 ); + trace = bullettrace( v_start, v_end, 0, undefined ); + + if ( trace["fraction"] < 1 ) + { + override_abort = 0; + + if ( isdefined( level._chugabud_reject_node_override_func ) ) + override_abort = [[ level._chugabud_reject_node_override_func ]]( v_origin, n_node ); + + if ( !override_abort ) + { + found_node = n_node; + break; + } + } + } + } + } + } + + return found_node; +} + +hostmigration_put_player_in_better_place() +{ + spawnpoint = undefined; + spawnpoint = find_alternate_player_place( self.origin, 50, 150, 64, 1 ); + + if ( !isdefined( spawnpoint ) ) + spawnpoint = find_alternate_player_place( self.origin, 150, 400, 64, 1 ); + + if ( !isdefined( spawnpoint ) ) + spawnpoint = find_alternate_player_place( self.origin, 50, 400, 256, 0 ); + + if ( !isdefined( spawnpoint ) ) + spawnpoint = maps\mp\zombies\_zm::check_for_valid_spawn_near_team( self, 1 ); + + if ( !isdefined( spawnpoint ) ) + { + match_string = ""; + location = level.scr_zm_map_start_location; + + if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) ) + location = level.default_start_location; + + match_string = level.scr_zm_ui_gametype + "_" + location; + spawnpoints = []; + structs = getstructarray( "initial_spawn", "script_noteworthy" ); + + if ( isdefined( structs ) ) + { + foreach ( struct in structs ) + { + if ( isdefined( struct.script_string ) ) + { + tokens = strtok( struct.script_string, " " ); + + foreach ( token in tokens ) + { + if ( token == match_string ) + spawnpoints[spawnpoints.size] = struct; + } + } + } + } + + if ( !isdefined( spawnpoints ) || spawnpoints.size == 0 ) + spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); + + assert( isdefined( spawnpoints ), "Could not find initial spawn points!" ); + spawnpoint = maps\mp\zombies\_zm::getfreespawnpoint( spawnpoints, self ); + } + + if ( isdefined( spawnpoint ) ) + self setorigin( spawnpoint.origin ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_hud.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_hud.gsc new file mode 100644 index 0000000..c5a28b7 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_hud.gsc @@ -0,0 +1,157 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +init() +{ + precacheshader( "progress_bar_bg" ); + precacheshader( "progress_bar_fg" ); + precacheshader( "progress_bar_fill" ); + precacheshader( "score_bar_bg" ); + level.uiparent = spawnstruct(); + level.uiparent.horzalign = "left"; + level.uiparent.vertalign = "top"; + level.uiparent.alignx = "left"; + level.uiparent.aligny = "top"; + level.uiparent.x = 0; + level.uiparent.y = 0; + level.uiparent.width = 0; + level.uiparent.height = 0; + level.uiparent.children = []; + level.fontheight = 12; + + foreach ( team in level.teams ) + level.hud[team] = spawnstruct(); + + level.primaryprogressbary = -61; + level.primaryprogressbarx = 0; + level.primaryprogressbarheight = 9; + level.primaryprogressbarwidth = 120; + level.primaryprogressbartexty = -75; + level.primaryprogressbartextx = 0; + level.primaryprogressbarfontsize = 1.4; + level.primaryprogressbarx_ss = 20; + level.primaryprogressbartextx_ss = 20; + level.primaryprogressbary_ss = 30; + level.primaryprogressbartexty_ss = 33; + level.primaryprogressbarheight_ss = 2; + level.secondaryprogressbary = -85; + level.secondaryprogressbarx = 0; + level.secondaryprogressbarheight = 9; + level.secondaryprogressbarwidth = 120; + level.secondaryprogressbartexty = -100; + level.secondaryprogressbartextx = 0; + level.secondaryprogressbarfontsize = 1.4; + level.secondaryprogressbarx_ss = 20; + level.secondaryprogressbartextx_ss = 20; + level.secondaryprogressbary_ss = 15; + level.secondaryprogressbartexty_ss = 0; + level.secondaryprogressbarheight_ss = 2; + level.teamprogressbary = 32; + level.teamprogressbarheight = 14; + level.teamprogressbarwidth = 192; + level.teamprogressbartexty = 8; + level.teamprogressbarfontsize = 1.65; + setdvar( "ui_generic_status_bar", 0 ); + level.lowertextyalign = "BOTTOM"; + level.lowertexty = -42; + level.lowertextfontsize = 1.4; + level.lowertextyalign_ss = "CENTER"; + level.lowertexty_ss = 40; + level.lowertextfontsize_ss = 1.4; +} + +fontpulseinit() +{ + self.basefontscale = self.fontscale; + self.maxfontscale = self.fontscale * 2; + self.inframes = 1.5; + self.outframes = 3; +} + +fontpulse( player ) +{ + self notify( "fontPulse" ); + self endon( "fontPulse" ); + self endon( "death" ); + player endon( "disconnect" ); + player endon( "joined_team" ); + player endon( "joined_spectators" ); + + if ( self.outframes == 0 ) + self.fontscale = 0.01; + else + self.fontscale = self.fontscale; + + if ( self.inframes > 0 ) + { + self changefontscaleovertime( self.inframes * 0.05 ); + self.fontscale = self.maxfontscale; + wait( self.inframes * 0.05 ); + } + else + { + self.fontscale = self.maxfontscale; + self.alpha = 0; + self fadeovertime( self.outframes * 0.05 ); + self.alpha = 1; + } + + if ( self.outframes > 0 ) + { + self changefontscaleovertime( self.outframes * 0.05 ); + self.fontscale = self.basefontscale; + } +} + +fadetoblackforxsec( startwait, blackscreenwait, fadeintime, fadeouttime, shadername, n_sort = 50 ) +{ + wait( startwait ); + + if ( !isdefined( self ) ) + return; + + if ( !isdefined( self.blackscreen ) ) + self.blackscreen = newclienthudelem( self ); + + self.blackscreen.x = 0; + self.blackscreen.y = 0; + self.blackscreen.horzalign = "fullscreen"; + self.blackscreen.vertalign = "fullscreen"; + self.blackscreen.foreground = 0; + self.blackscreen.hidewhendead = 0; + self.blackscreen.hidewheninmenu = 1; + self.blackscreen.sort = n_sort; + + if ( isdefined( shadername ) ) + self.blackscreen setshader( shadername, 640, 480 ); + else + self.blackscreen setshader( "black", 640, 480 ); + + self.blackscreen.alpha = 0; + + if ( fadeintime > 0 ) + self.blackscreen fadeovertime( fadeintime ); + + self.blackscreen.alpha = 1; + wait( fadeintime ); + + if ( !isdefined( self.blackscreen ) ) + return; + + wait( blackscreenwait ); + + if ( !isdefined( self.blackscreen ) ) + return; + + if ( fadeouttime > 0 ) + self.blackscreen fadeovertime( fadeouttime ); + + self.blackscreen.alpha = 0; + wait( fadeouttime ); + + if ( isdefined( self.blackscreen ) ) + { + self.blackscreen destroy(); + self.blackscreen = undefined; + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_hud_message.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_hud_message.gsc new file mode 100644 index 0000000..255f6ba --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_hud_message.gsc @@ -0,0 +1,1253 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\gametypes_zm\_hud_message; +#include maps\mp\_music; +#include maps\mp\gametypes_zm\_globallogic_audio; +#include maps\mp\_utility; + +init() +{ + precachestring( &"MENU_POINTS" ); + precachestring( &"MP_FIRSTPLACE_NAME" ); + precachestring( &"MP_SECONDPLACE_NAME" ); + precachestring( &"MP_THIRDPLACE_NAME" ); + precachestring( &"MP_WAGER_PLACE_NAME" ); + precachestring( &"MP_MATCH_BONUS_IS" ); + precachestring( &"MP_CODPOINTS_MATCH_BONUS_IS" ); + precachestring( &"MP_WAGER_WINNINGS_ARE" ); + precachestring( &"MP_WAGER_SIDEBET_WINNINGS_ARE" ); + precachestring( &"MP_WAGER_IN_THE_MONEY" ); + precachestring( &"faction_popup" ); + game["strings"]["draw"] = &"MP_DRAW_CAPS"; + game["strings"]["round_draw"] = &"MP_ROUND_DRAW_CAPS"; + game["strings"]["round_win"] = &"MP_ROUND_WIN_CAPS"; + game["strings"]["round_loss"] = &"MP_ROUND_LOSS_CAPS"; + game["strings"]["victory"] = &"MP_VICTORY_CAPS"; + game["strings"]["defeat"] = &"MP_DEFEAT_CAPS"; + game["strings"]["game_over"] = &"MP_GAME_OVER_CAPS"; + game["strings"]["halftime"] = &"MP_HALFTIME_CAPS"; + game["strings"]["overtime"] = &"MP_OVERTIME_CAPS"; + game["strings"]["roundend"] = &"MP_ROUNDEND_CAPS"; + game["strings"]["intermission"] = &"MP_INTERMISSION_CAPS"; + game["strings"]["side_switch"] = &"MP_SWITCHING_SIDES_CAPS"; + game["strings"]["match_bonus"] = &"MP_MATCH_BONUS_IS"; + game["strings"]["codpoints_match_bonus"] = &"MP_CODPOINTS_MATCH_BONUS_IS"; + game["strings"]["wager_winnings"] = &"MP_WAGER_WINNINGS_ARE"; + game["strings"]["wager_sidebet_winnings"] = &"MP_WAGER_SIDEBET_WINNINGS_ARE"; + game["strings"]["wager_inthemoney"] = &"MP_WAGER_IN_THE_MONEY_CAPS"; + game["strings"]["wager_loss"] = &"MP_WAGER_LOSS_CAPS"; + game["strings"]["wager_topwinners"] = &"MP_WAGER_TOPWINNERS"; + game["menu_endgameupdate"] = "endgameupdate"; + precachemenu( game["menu_endgameupdate"] ); + level thread onplayerconnect(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread hintmessagedeaththink(); + player thread lowermessagethink(); + player thread initnotifymessage(); + player thread initcustomgametypeheader(); + } +} + +initcustomgametypeheader() +{ + font = "default"; + titlesize = 2.5; + self.customgametypeheader = createfontstring( font, titlesize ); + self.customgametypeheader setpoint( "TOP", undefined, 0, 30 ); + self.customgametypeheader.glowalpha = 1; + self.customgametypeheader.hidewheninmenu = 1; + self.customgametypeheader.archived = 0; + self.customgametypeheader.color = ( 1, 1, 0.6 ); + self.customgametypeheader.alpha = 1; + titlesize = 2.0; + self.customgametypesubheader = createfontstring( font, titlesize ); + self.customgametypesubheader setparent( self.customgametypeheader ); + self.customgametypesubheader setpoint( "TOP", "BOTTOM", 0, 0 ); + self.customgametypesubheader.glowalpha = 1; + self.customgametypesubheader.hidewheninmenu = 1; + self.customgametypesubheader.archived = 0; + self.customgametypesubheader.color = ( 1, 1, 0.6 ); + self.customgametypesubheader.alpha = 1; +} + +hintmessage( hinttext, duration ) +{ + notifydata = spawnstruct(); + notifydata.notifytext = hinttext; + notifydata.duration = duration; + notifymessage( notifydata ); +} + +hintmessageplayers( players, hinttext, duration ) +{ + notifydata = spawnstruct(); + notifydata.notifytext = hinttext; + notifydata.duration = duration; + + for ( i = 0; i < players.size; i++ ) + players[i] notifymessage( notifydata ); +} + +showinitialfactionpopup( team ) +{ + self luinotifyevent( &"faction_popup", 1, game["strings"][team + "_name"] ); + maps\mp\gametypes_zm\_hud_message::oldnotifymessage( undefined, undefined, undefined, undefined ); +} + +initnotifymessage() +{ + if ( !sessionmodeiszombiesgame() ) + { + if ( self issplitscreen() ) + { + titlesize = 2.0; + textsize = 1.4; + iconsize = 24; + font = "extrabig"; + point = "TOP"; + relativepoint = "BOTTOM"; + yoffset = 30; + xoffset = 30; + } + else + { + titlesize = 2.5; + textsize = 1.75; + iconsize = 30; + font = "extrabig"; + point = "TOP"; + relativepoint = "BOTTOM"; + yoffset = 0; + xoffset = 0; + } + } + else if ( self issplitscreen() ) + { + titlesize = 2.0; + textsize = 1.4; + iconsize = 24; + font = "extrabig"; + point = "TOP"; + relativepoint = "BOTTOM"; + yoffset = 30; + xoffset = 30; + } + else + { + titlesize = 2.5; + textsize = 1.75; + iconsize = 30; + font = "extrabig"; + point = "BOTTOM LEFT"; + relativepoint = "TOP"; + yoffset = 0; + xoffset = 0; + } + + self.notifytitle = createfontstring( font, titlesize ); + self.notifytitle setpoint( point, undefined, xoffset, yoffset ); + self.notifytitle.glowalpha = 1; + self.notifytitle.hidewheninmenu = 1; + self.notifytitle.archived = 0; + self.notifytitle.alpha = 0; + self.notifytext = createfontstring( font, textsize ); + self.notifytext setparent( self.notifytitle ); + self.notifytext setpoint( point, relativepoint, 0, 0 ); + self.notifytext.glowalpha = 1; + self.notifytext.hidewheninmenu = 1; + self.notifytext.archived = 0; + self.notifytext.alpha = 0; + self.notifytext2 = createfontstring( font, textsize ); + self.notifytext2 setparent( self.notifytitle ); + self.notifytext2 setpoint( point, relativepoint, 0, 0 ); + self.notifytext2.glowalpha = 1; + self.notifytext2.hidewheninmenu = 1; + self.notifytext2.archived = 0; + self.notifytext2.alpha = 0; + self.notifyicon = createicon( "white", iconsize, iconsize ); + self.notifyicon setparent( self.notifytext2 ); + self.notifyicon setpoint( point, relativepoint, 0, 0 ); + self.notifyicon.hidewheninmenu = 1; + self.notifyicon.archived = 0; + self.notifyicon.alpha = 0; + self.doingnotify = 0; + self.notifyqueue = []; +} + +oldnotifymessage( titletext, notifytext, iconname, glowcolor, sound, duration ) +{ + if ( level.wagermatch && !level.teambased ) + return; + + notifydata = spawnstruct(); + notifydata.titletext = titletext; + notifydata.notifytext = notifytext; + notifydata.iconname = iconname; + notifydata.sound = sound; + notifydata.duration = duration; + self.startmessagenotifyqueue[self.startmessagenotifyqueue.size] = notifydata; + self notify( "received award" ); +} + +notifymessage( notifydata ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self.messagenotifyqueue[self.messagenotifyqueue.size] = notifydata; + self notify( "received award" ); +} + +shownotifymessage( notifydata, duration ) +{ + self endon( "disconnect" ); + self.doingnotify = 1; + waitrequirevisibility( 0 ); + self notify( "notifyMessageBegin", duration ); + self thread resetoncancel(); + + if ( isdefined( notifydata.sound ) ) + self playlocalsound( notifydata.sound ); + + if ( isdefined( notifydata.musicstate ) ) + self maps\mp\_music::setmusicstate( notifydata.music ); + + if ( isdefined( notifydata.leadersound ) ) + self maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( notifydata.leadersound ); + + if ( isdefined( notifydata.glowcolor ) ) + glowcolor = notifydata.glowcolor; + else + glowcolor = ( 0, 0, 0 ); + + if ( isdefined( notifydata.color ) ) + color = notifydata.color; + else + color = ( 1, 1, 1 ); + + anchorelem = self.notifytitle; + + if ( isdefined( notifydata.titletext ) ) + { + if ( isdefined( notifydata.titlelabel ) ) + self.notifytitle.label = notifydata.titlelabel; + else + self.notifytitle.label = &""; + + if ( isdefined( notifydata.titlelabel ) && !isdefined( notifydata.titleisstring ) ) + self.notifytitle setvalue( notifydata.titletext ); + else + self.notifytitle settext( notifydata.titletext ); + + self.notifytitle setcod7decodefx( 200, int( duration * 1000 ), 600 ); + self.notifytitle.glowcolor = glowcolor; + self.notifytitle.color = color; + self.notifytitle.alpha = 1; + } + + if ( isdefined( notifydata.notifytext ) ) + { + if ( isdefined( notifydata.textlabel ) ) + self.notifytext.label = notifydata.textlabel; + else + self.notifytext.label = &""; + + if ( isdefined( notifydata.textlabel ) && !isdefined( notifydata.textisstring ) ) + self.notifytext setvalue( notifydata.notifytext ); + else + self.notifytext settext( notifydata.notifytext ); + + self.notifytext setcod7decodefx( 100, int( duration * 1000 ), 600 ); + self.notifytext.glowcolor = glowcolor; + self.notifytext.color = color; + self.notifytext.alpha = 1; + anchorelem = self.notifytext; + } + + if ( isdefined( notifydata.notifytext2 ) ) + { + if ( self issplitscreen() ) + { + if ( isdefined( notifydata.text2label ) ) + self iprintlnbold( notifydata.text2label, notifydata.notifytext2 ); + else + self iprintlnbold( notifydata.notifytext2 ); + } + else + { + self.notifytext2 setparent( anchorelem ); + + if ( isdefined( notifydata.text2label ) ) + self.notifytext2.label = notifydata.text2label; + else + self.notifytext2.label = &""; + + self.notifytext2 settext( notifydata.notifytext2 ); + self.notifytext2 setpulsefx( 100, int( duration * 1000 ), 1000 ); + self.notifytext2.glowcolor = glowcolor; + self.notifytext2.color = color; + self.notifytext2.alpha = 1; + anchorelem = self.notifytext2; + } + } + + if ( isdefined( notifydata.iconname ) ) + { + iconwidth = 60; + iconheight = 60; + + if ( isdefined( notifydata.iconwidth ) ) + iconwidth = notifydata.iconwidth; + + if ( isdefined( notifydata.iconheight ) ) + iconheight = notifydata.iconheight; + + self.notifyicon setparent( anchorelem ); + self.notifyicon setshader( notifydata.iconname, iconwidth, iconheight ); + self.notifyicon.alpha = 0; + self.notifyicon fadeovertime( 1.0 ); + self.notifyicon.alpha = 1; + waitrequirevisibility( duration ); + self.notifyicon fadeovertime( 0.75 ); + self.notifyicon.alpha = 0; + } + else + waitrequirevisibility( duration ); + + self notify( "notifyMessageDone" ); + self.doingnotify = 0; +} + +waitrequirevisibility( waittime ) +{ + interval = 0.05; + + while ( !self canreadtext() ) + wait( interval ); + + while ( waittime > 0 ) + { + wait( interval ); + + if ( self canreadtext() ) + waittime -= interval; + } +} + +canreadtext() +{ + return 1; +} + +resetondeath() +{ + self endon( "notifyMessageDone" ); + self endon( "disconnect" ); + level endon( "game_ended" ); + + self waittill( "death" ); + + resetnotify(); +} + +resetoncancel() +{ + self notify( "resetOnCancel" ); + self endon( "resetOnCancel" ); + self endon( "notifyMessageDone" ); + self endon( "disconnect" ); + + level waittill( "cancel_notify" ); + + resetnotify(); +} + +resetnotify() +{ + self.notifytitle.alpha = 0; + self.notifytext.alpha = 0; + self.notifyicon.alpha = 0; + self.doingnotify = 0; +} + +hintmessagedeaththink() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "death" ); + + if ( isdefined( self.hintmessage ) ) + self.hintmessage destroyelem(); + } +} + +lowermessagethink() +{ + self endon( "disconnect" ); + self.lowermessage = createfontstring( "default", level.lowertextfontsize ); + self.lowermessage setpoint( "CENTER", level.lowertextyalign, 0, level.lowertexty ); + self.lowermessage settext( "" ); + self.lowermessage.archived = 0; + timerfontsize = 1.5; + + if ( self issplitscreen() ) + timerfontsize = 1.4; + + self.lowertimer = createfontstring( "default", timerfontsize ); + self.lowertimer setparent( self.lowermessage ); + self.lowertimer setpoint( "TOP", "BOTTOM", 0, 0 ); + self.lowertimer settext( "" ); + self.lowertimer.archived = 0; +} + +setmatchscorehudelemforteam( team ) +{ + if ( level.roundscorecarry ) + self setvalue( getteamscore( team ) ); + else + self setvalue( getroundswon( team ) ); +} + +teamoutcomenotify( winner, isround, endreasontext ) +{ + self endon( "disconnect" ); + self notify( "reset_outcome" ); + team = self.pers["team"]; + + if ( isdefined( team ) && team == "spectator" ) + { + for ( i = 0; i < level.players.size; i++ ) + { + if ( self.currentspectatingclient == level.players[i].clientid ) + { + team = level.players[i].pers["team"]; + break; + } + } + } + + if ( !isdefined( team ) || !isdefined( level.teams[team] ) ) + team = "allies"; + + while ( self.doingnotify ) + wait 0.05; + + self endon( "reset_outcome" ); + headerfont = "extrabig"; + font = "default"; + + if ( self issplitscreen() ) + { + titlesize = 2.0; + textsize = 1.5; + iconsize = 30; + spacing = 10; + } + else + { + titlesize = 3.0; + textsize = 2.0; + iconsize = 70; + spacing = 25; + } + + duration = 60000; + outcometitle = createfontstring( headerfont, titlesize ); + outcometitle setpoint( "TOP", undefined, 0, 30 ); + outcometitle.glowalpha = 1; + outcometitle.hidewheninmenu = 0; + outcometitle.archived = 0; + outcometext = createfontstring( font, 2.0 ); + outcometext setparent( outcometitle ); + outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); + outcometext.glowalpha = 1; + outcometext.hidewheninmenu = 0; + outcometext.archived = 0; + + if ( winner == "halftime" ) + { + outcometitle settext( game["strings"]["halftime"] ); + outcometitle.color = ( 1, 1, 1 ); + winner = "allies"; + } + else if ( winner == "intermission" ) + { + outcometitle settext( game["strings"]["intermission"] ); + outcometitle.color = ( 1, 1, 1 ); + winner = "allies"; + } + else if ( winner == "roundend" ) + { + outcometitle settext( game["strings"]["roundend"] ); + outcometitle.color = ( 1, 1, 1 ); + winner = "allies"; + } + else if ( winner == "overtime" ) + { + outcometitle settext( game["strings"]["overtime"] ); + outcometitle.color = ( 1, 1, 1 ); + winner = "allies"; + } + else if ( winner == "tie" ) + { + if ( isround ) + outcometitle settext( game["strings"]["round_draw"] ); + else + outcometitle settext( game["strings"]["draw"] ); + + outcometitle.color = ( 0.29, 0.61, 0.7 ); + winner = "allies"; + } + else if ( isdefined( self.pers["team"] ) && winner == team ) + { + if ( isround ) + outcometitle settext( game["strings"]["round_win"] ); + else + outcometitle settext( game["strings"]["victory"] ); + + outcometitle.color = ( 0.42, 0.68, 0.46 ); + } + else + { + if ( isround ) + outcometitle settext( game["strings"]["round_loss"] ); + else + outcometitle settext( game["strings"]["defeat"] ); + + outcometitle.color = ( 0.73, 0.29, 0.19 ); + } + + outcometext settext( endreasontext ); + outcometitle setcod7decodefx( 200, duration, 600 ); + outcometext setpulsefx( 100, duration, 1000 ); + iconspacing = 100; + currentx = ( level.teamcount - 1 ) * -1 * iconspacing / 2; + teamicons = []; + teamicons[team] = createicon( game["icons"][team], iconsize, iconsize ); + teamicons[team] setparent( outcometext ); + teamicons[team] setpoint( "TOP", "BOTTOM", currentx, spacing ); + teamicons[team].hidewheninmenu = 0; + teamicons[team].archived = 0; + teamicons[team].alpha = 0; + teamicons[team] fadeovertime( 0.5 ); + teamicons[team].alpha = 1; + currentx += iconspacing; + + foreach ( enemyteam in level.teams ) + { + if ( team == enemyteam ) + continue; + + teamicons[enemyteam] = createicon( game["icons"][enemyteam], iconsize, iconsize ); + teamicons[enemyteam] setparent( outcometext ); + teamicons[enemyteam] setpoint( "TOP", "BOTTOM", currentx, spacing ); + teamicons[enemyteam].hidewheninmenu = 0; + teamicons[enemyteam].archived = 0; + teamicons[enemyteam].alpha = 0; + teamicons[enemyteam] fadeovertime( 0.5 ); + teamicons[enemyteam].alpha = 1; + currentx += iconspacing; + } + + teamscores = []; + teamscores[team] = createfontstring( font, titlesize ); + teamscores[team] setparent( teamicons[team] ); + teamscores[team] setpoint( "TOP", "BOTTOM", 0, spacing ); + teamscores[team].glowalpha = 1; + + if ( isround ) + teamscores[team] setvalue( getteamscore( team ) ); + else + teamscores[team] [[ level.setmatchscorehudelemforteam ]]( team ); + + teamscores[team].hidewheninmenu = 0; + teamscores[team].archived = 0; + teamscores[team] setpulsefx( 100, duration, 1000 ); + + foreach ( enemyteam in level.teams ) + { + if ( team == enemyteam ) + continue; + + teamscores[enemyteam] = createfontstring( headerfont, titlesize ); + teamscores[enemyteam] setparent( teamicons[enemyteam] ); + teamscores[enemyteam] setpoint( "TOP", "BOTTOM", 0, spacing ); + teamscores[enemyteam].glowalpha = 1; + + if ( isround ) + teamscores[enemyteam] setvalue( getteamscore( enemyteam ) ); + else + teamscores[enemyteam] [[ level.setmatchscorehudelemforteam ]]( enemyteam ); + + teamscores[enemyteam].hidewheninmenu = 0; + teamscores[enemyteam].archived = 0; + teamscores[enemyteam] setpulsefx( 100, duration, 1000 ); + } + + font = "objective"; + matchbonus = undefined; + + if ( isdefined( self.matchbonus ) ) + { + matchbonus = createfontstring( font, 2.0 ); + matchbonus setparent( outcometext ); + matchbonus setpoint( "TOP", "BOTTOM", 0, iconsize + spacing * 3 + teamscores[team].height ); + matchbonus.glowalpha = 1; + matchbonus.hidewheninmenu = 0; + matchbonus.archived = 0; + matchbonus.label = game["strings"]["match_bonus"]; + matchbonus setvalue( self.matchbonus ); + } + + self thread resetoutcomenotify( teamicons, teamscores, outcometitle, outcometext ); +} + +teamoutcomenotifyzombie( winner, isround, endreasontext ) +{ + self endon( "disconnect" ); + self notify( "reset_outcome" ); + team = self.pers["team"]; + + if ( isdefined( team ) && team == "spectator" ) + { + for ( i = 0; i < level.players.size; i++ ) + { + if ( self.currentspectatingclient == level.players[i].clientid ) + { + team = level.players[i].pers["team"]; + break; + } + } + } + + if ( !isdefined( team ) || !isdefined( level.teams[team] ) ) + team = "allies"; + + while ( self.doingnotify ) + wait 0.05; + + self endon( "reset_outcome" ); + + if ( self issplitscreen() ) + { + titlesize = 2.0; + spacing = 10; + font = "default"; + } + else + { + titlesize = 3.0; + spacing = 50; + font = "objective"; + } + + outcometitle = createfontstring( font, titlesize ); + outcometitle setpoint( "TOP", undefined, 0, spacing ); + outcometitle.glowalpha = 1; + outcometitle.hidewheninmenu = 0; + outcometitle.archived = 0; + outcometitle settext( endreasontext ); + outcometitle setpulsefx( 100, 60000, 1000 ); + self thread resetoutcomenotify( undefined, undefined, outcometitle ); +} + +outcomenotify( winner, isroundend, endreasontext ) +{ + self endon( "disconnect" ); + self notify( "reset_outcome" ); + + while ( self.doingnotify ) + wait 0.05; + + self endon( "reset_outcome" ); + headerfont = "extrabig"; + font = "default"; + + if ( self issplitscreen() ) + { + titlesize = 2.0; + winnersize = 1.5; + othersize = 1.5; + iconsize = 30; + spacing = 10; + } + else + { + titlesize = 3.0; + winnersize = 2.0; + othersize = 1.5; + iconsize = 30; + spacing = 20; + } + + duration = 60000; + players = level.placement["all"]; + outcometitle = createfontstring( headerfont, titlesize ); + outcometitle setpoint( "TOP", undefined, 0, spacing ); + + if ( !maps\mp\_utility::isoneround() && !isroundend ) + outcometitle settext( game["strings"]["game_over"] ); + else if ( isdefined( players[1] ) && players[0].score == players[1].score && players[0].deaths == players[1].deaths && ( self == players[0] || self == players[1] ) ) + outcometitle settext( game["strings"]["tie"] ); + else if ( isdefined( players[2] ) && players[0].score == players[2].score && players[0].deaths == players[2].deaths && self == players[2] ) + outcometitle settext( game["strings"]["tie"] ); + else if ( isdefined( players[0] ) && self == players[0] ) + { + outcometitle settext( game["strings"]["victory"] ); + outcometitle.color = ( 0.42, 0.68, 0.46 ); + } + else + { + outcometitle settext( game["strings"]["defeat"] ); + outcometitle.color = ( 0.73, 0.29, 0.19 ); + } + + outcometitle.glowalpha = 1; + outcometitle.hidewheninmenu = 0; + outcometitle.archived = 0; + outcometitle setcod7decodefx( 200, duration, 600 ); + outcometext = createfontstring( font, 2.0 ); + outcometext setparent( outcometitle ); + outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); + outcometext.glowalpha = 1; + outcometext.hidewheninmenu = 0; + outcometext.archived = 0; + outcometext settext( endreasontext ); + firsttitle = createfontstring( font, winnersize ); + firsttitle setparent( outcometext ); + firsttitle setpoint( "TOP", "BOTTOM", 0, spacing ); + firsttitle.glowalpha = 1; + firsttitle.hidewheninmenu = 0; + firsttitle.archived = 0; + + if ( isdefined( players[0] ) ) + { + firsttitle.label = &"MP_FIRSTPLACE_NAME"; + firsttitle setplayernamestring( players[0] ); + firsttitle setcod7decodefx( 175, duration, 600 ); + } + + secondtitle = createfontstring( font, othersize ); + secondtitle setparent( firsttitle ); + secondtitle setpoint( "TOP", "BOTTOM", 0, spacing ); + secondtitle.glowalpha = 1; + secondtitle.hidewheninmenu = 0; + secondtitle.archived = 0; + + if ( isdefined( players[1] ) ) + { + secondtitle.label = &"MP_SECONDPLACE_NAME"; + secondtitle setplayernamestring( players[1] ); + secondtitle setcod7decodefx( 175, duration, 600 ); + } + + thirdtitle = createfontstring( font, othersize ); + thirdtitle setparent( secondtitle ); + thirdtitle setpoint( "TOP", "BOTTOM", 0, spacing ); + thirdtitle setparent( secondtitle ); + thirdtitle.glowalpha = 1; + thirdtitle.hidewheninmenu = 0; + thirdtitle.archived = 0; + + if ( isdefined( players[2] ) ) + { + thirdtitle.label = &"MP_THIRDPLACE_NAME"; + thirdtitle setplayernamestring( players[2] ); + thirdtitle setcod7decodefx( 175, duration, 600 ); + } + + matchbonus = createfontstring( font, 2.0 ); + matchbonus setparent( thirdtitle ); + matchbonus setpoint( "TOP", "BOTTOM", 0, spacing ); + matchbonus.glowalpha = 1; + matchbonus.hidewheninmenu = 0; + matchbonus.archived = 0; + + if ( isdefined( self.matchbonus ) ) + { + matchbonus.label = game["strings"]["match_bonus"]; + matchbonus setvalue( self.matchbonus ); + } + + self thread updateoutcome( firsttitle, secondtitle, thirdtitle ); + self thread resetoutcomenotify( undefined, undefined, outcometitle, outcometext, firsttitle, secondtitle, thirdtitle, matchbonus ); +} + +wageroutcomenotify( winner, endreasontext ) +{ + self endon( "disconnect" ); + self notify( "reset_outcome" ); + + while ( self.doingnotify ) + wait 0.05; + + setmatchflag( "enable_popups", 0 ); + self endon( "reset_outcome" ); + headerfont = "extrabig"; + font = "objective"; + + if ( self issplitscreen() ) + { + titlesize = 2.0; + winnersize = 1.5; + othersize = 1.5; + iconsize = 30; + spacing = 2; + } + else + { + titlesize = 3.0; + winnersize = 2.0; + othersize = 1.5; + iconsize = 30; + spacing = 20; + } + + halftime = 0; + + if ( isdefined( level.sidebet ) && level.sidebet ) + halftime = 1; + + duration = 60000; + players = level.placement["all"]; + outcometitle = createfontstring( headerfont, titlesize ); + outcometitle setpoint( "TOP", undefined, 0, spacing ); + + if ( halftime ) + { + outcometitle settext( game["strings"]["intermission"] ); + outcometitle.color = ( 1, 1, 0 ); + outcometitle.glowcolor = ( 1, 0, 0 ); + } + else if ( isdefined( level.dontcalcwagerwinnings ) && level.dontcalcwagerwinnings == 1 ) + { + outcometitle settext( game["strings"]["wager_topwinners"] ); + outcometitle.color = ( 0.42, 0.68, 0.46 ); + } + else if ( isdefined( self.wagerwinnings ) && self.wagerwinnings > 0 ) + { + outcometitle settext( game["strings"]["wager_inthemoney"] ); + outcometitle.color = ( 0.42, 0.68, 0.46 ); + } + else + { + outcometitle settext( game["strings"]["wager_loss"] ); + outcometitle.color = ( 0.73, 0.29, 0.19 ); + } + + outcometitle.glowalpha = 1; + outcometitle.hidewheninmenu = 0; + outcometitle.archived = 0; + outcometitle setcod7decodefx( 200, duration, 600 ); + outcometext = createfontstring( font, 2.0 ); + outcometext setparent( outcometitle ); + outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); + outcometext.glowalpha = 1; + outcometext.hidewheninmenu = 0; + outcometext.archived = 0; + outcometext settext( endreasontext ); + playernamehudelems = []; + playercphudelems = []; + numplayers = players.size; + + for ( i = 0; i < numplayers; i++ ) + { + if ( !halftime && isdefined( players[i] ) ) + { + secondtitle = createfontstring( font, othersize ); + + if ( playernamehudelems.size == 0 ) + { + secondtitle setparent( outcometext ); + secondtitle setpoint( "TOP_LEFT", "BOTTOM", -175, spacing * 3 ); + } + else + { + secondtitle setparent( playernamehudelems[playernamehudelems.size - 1] ); + secondtitle setpoint( "TOP_LEFT", "BOTTOM_LEFT", 0, spacing ); + } + + secondtitle.glowalpha = 1; + secondtitle.hidewheninmenu = 0; + secondtitle.archived = 0; + secondtitle.label = &"MP_WAGER_PLACE_NAME"; + secondtitle.playernum = i; + secondtitle setplayernamestring( players[i] ); + playernamehudelems[playernamehudelems.size] = secondtitle; + secondcp = createfontstring( font, othersize ); + secondcp setparent( secondtitle ); + secondcp setpoint( "TOP_RIGHT", "TOP_LEFT", 350, 0 ); + secondcp.glowalpha = 1; + secondcp.hidewheninmenu = 0; + secondcp.archived = 0; + secondcp.label = &"MENU_POINTS"; + secondcp.currentvalue = 0; + + if ( isdefined( players[i].wagerwinnings ) ) + secondcp.targetvalue = players[i].wagerwinnings; + else + secondcp.targetvalue = 0; + + if ( secondcp.targetvalue > 0 ) + secondcp.color = ( 0.42, 0.68, 0.46 ); + + secondcp setvalue( 0 ); + playercphudelems[playercphudelems.size] = secondcp; + } + } + + self thread updatewageroutcome( playernamehudelems, playercphudelems ); + self thread resetwageroutcomenotify( playernamehudelems, playercphudelems, outcometitle, outcometext ); + + if ( halftime ) + return; + + stillupdating = 1; + countupduration = 2; + cpincrement = 9999; + + if ( isdefined( playercphudelems[0] ) ) + { + cpincrement = int( playercphudelems[0].targetvalue / ( countupduration / 0.05 ) ); + + if ( cpincrement < 1 ) + cpincrement = 1; + } + + while ( stillupdating ) + { + stillupdating = 0; + + for ( i = 0; i < playercphudelems.size; i++ ) + { + if ( isdefined( playercphudelems[i] ) && playercphudelems[i].currentvalue < playercphudelems[i].targetvalue ) + { + playercphudelems[i].currentvalue += cpincrement; + + if ( playercphudelems[i].currentvalue > playercphudelems[i].targetvalue ) + playercphudelems[i].currentvalue = playercphudelems[i].targetvalue; + + playercphudelems[i] setvalue( playercphudelems[i].currentvalue ); + stillupdating = 1; + } + } + + wait 0.05; + } +} + +teamwageroutcomenotify( winner, isroundend, endreasontext ) +{ + self endon( "disconnect" ); + self notify( "reset_outcome" ); + team = self.pers["team"]; + + if ( !isdefined( team ) || !isdefined( level.teams[team] ) ) + team = "allies"; + + wait 0.05; + + while ( self.doingnotify ) + wait 0.05; + + self endon( "reset_outcome" ); + headerfont = "extrabig"; + font = "objective"; + + if ( self issplitscreen() ) + { + titlesize = 2.0; + textsize = 1.5; + iconsize = 30; + spacing = 10; + } + else + { + titlesize = 3.0; + textsize = 2.0; + iconsize = 70; + spacing = 15; + } + + halftime = 0; + + if ( isdefined( level.sidebet ) && level.sidebet ) + halftime = 1; + + duration = 60000; + outcometitle = createfontstring( headerfont, titlesize ); + outcometitle setpoint( "TOP", undefined, 0, spacing ); + outcometitle.glowalpha = 1; + outcometitle.hidewheninmenu = 0; + outcometitle.archived = 0; + outcometext = createfontstring( font, 2.0 ); + outcometext setparent( outcometitle ); + outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); + outcometext.glowalpha = 1; + outcometext.hidewheninmenu = 0; + outcometext.archived = 0; + + if ( winner == "tie" ) + { + if ( isroundend ) + outcometitle settext( game["strings"]["round_draw"] ); + else + outcometitle settext( game["strings"]["draw"] ); + + outcometitle.color = ( 1, 1, 1 ); + winner = "allies"; + } + else if ( winner == "overtime" ) + { + outcometitle settext( game["strings"]["overtime"] ); + outcometitle.color = ( 1, 1, 1 ); + } + else if ( isdefined( self.pers["team"] ) && winner == team ) + { + if ( isroundend ) + outcometitle settext( game["strings"]["round_win"] ); + else + outcometitle settext( game["strings"]["victory"] ); + + outcometitle.color = ( 0.42, 0.68, 0.46 ); + } + else + { + if ( isroundend ) + outcometitle settext( game["strings"]["round_loss"] ); + else + outcometitle settext( game["strings"]["defeat"] ); + + outcometitle.color = ( 0.73, 0.29, 0.19 ); + } + + if ( !isdefined( level.dontshowendreason ) || !level.dontshowendreason ) + outcometext settext( endreasontext ); + + outcometitle setpulsefx( 100, duration, 1000 ); + outcometext setpulsefx( 100, duration, 1000 ); + teamicons = []; + teamicons[team] = createicon( game["icons"][team], iconsize, iconsize ); + teamicons[team] setparent( outcometext ); + teamicons[team] setpoint( "TOP", "BOTTOM", -60, spacing ); + teamicons[team].hidewheninmenu = 0; + teamicons[team].archived = 0; + teamicons[team].alpha = 0; + teamicons[team] fadeovertime( 0.5 ); + teamicons[team].alpha = 1; + + foreach ( enemyteam in level.teams ) + { + if ( team == enemyteam ) + continue; + + teamicons[enemyteam] = createicon( game["icons"][enemyteam], iconsize, iconsize ); + teamicons[enemyteam] setparent( outcometext ); + teamicons[enemyteam] setpoint( "TOP", "BOTTOM", 60, spacing ); + teamicons[enemyteam].hidewheninmenu = 0; + teamicons[enemyteam].archived = 0; + teamicons[enemyteam].alpha = 0; + teamicons[enemyteam] fadeovertime( 0.5 ); + teamicons[enemyteam].alpha = 1; + } + + teamscores = []; + teamscores[team] = createfontstring( font, titlesize ); + teamscores[team] setparent( teamicons[team] ); + teamscores[team] setpoint( "TOP", "BOTTOM", 0, spacing ); + teamscores[team].glowalpha = 1; + teamscores[team] setvalue( getteamscore( team ) ); + teamscores[team].hidewheninmenu = 0; + teamscores[team].archived = 0; + teamscores[team] setpulsefx( 100, duration, 1000 ); + + foreach ( enemyteam in level.teams ) + { + if ( team == enemyteam ) + continue; + + teamscores[enemyteam] = createfontstring( font, titlesize ); + teamscores[enemyteam] setparent( teamicons[enemyteam] ); + teamscores[enemyteam] setpoint( "TOP", "BOTTOM", 0, spacing ); + teamscores[enemyteam].glowalpha = 1; + teamscores[enemyteam] setvalue( getteamscore( enemyteam ) ); + teamscores[enemyteam].hidewheninmenu = 0; + teamscores[enemyteam].archived = 0; + teamscores[enemyteam] setpulsefx( 100, duration, 1000 ); + } + + matchbonus = undefined; + sidebetwinnings = undefined; + + if ( !isroundend && !halftime && isdefined( self.wagerwinnings ) ) + { + matchbonus = createfontstring( font, 2.0 ); + matchbonus setparent( outcometext ); + matchbonus setpoint( "TOP", "BOTTOM", 0, iconsize + spacing * 3 + teamscores[team].height ); + matchbonus.glowalpha = 1; + matchbonus.hidewheninmenu = 0; + matchbonus.archived = 0; + matchbonus.label = game["strings"]["wager_winnings"]; + matchbonus setvalue( self.wagerwinnings ); + + if ( isdefined( game["side_bets"] ) && game["side_bets"] ) + { + sidebetwinnings = createfontstring( font, 2.0 ); + sidebetwinnings setparent( matchbonus ); + sidebetwinnings setpoint( "TOP", "BOTTOM", 0, spacing ); + sidebetwinnings.glowalpha = 1; + sidebetwinnings.hidewheninmenu = 0; + sidebetwinnings.archived = 0; + sidebetwinnings.label = game["strings"]["wager_sidebet_winnings"]; + sidebetwinnings setvalue( self.pers["wager_sideBetWinnings"] ); + } + } + + self thread resetoutcomenotify( teamicons, teamscores, outcometitle, outcometext, matchbonus, sidebetwinnings ); +} + +destroyhudelem( hudelem ) +{ + if ( isdefined( hudelem ) ) + hudelem destroyelem(); +} + +resetoutcomenotify( hudelemlist1, hudelemlist2, hudelem3, hudelem4, hudelem5, hudelem6, hudelem7, hudelem8, hudelem9, hudelem10 ) +{ + self endon( "disconnect" ); + + self waittill( "reset_outcome" ); + + destroyhudelem( hudelem3 ); + destroyhudelem( hudelem4 ); + destroyhudelem( hudelem5 ); + destroyhudelem( hudelem6 ); + destroyhudelem( hudelem7 ); + destroyhudelem( hudelem8 ); + destroyhudelem( hudelem9 ); + destroyhudelem( hudelem10 ); + + if ( isdefined( hudelemlist1 ) ) + { + foreach ( elem in hudelemlist1 ) + destroyhudelem( elem ); + } + + if ( isdefined( hudelemlist2 ) ) + { + foreach ( elem in hudelemlist2 ) + destroyhudelem( elem ); + } +} + +resetwageroutcomenotify( playernamehudelems, playercphudelems, outcometitle, outcometext ) +{ + self endon( "disconnect" ); + + self waittill( "reset_outcome" ); + + for ( i = playernamehudelems.size - 1; i >= 0; i-- ) + { + if ( isdefined( playernamehudelems[i] ) ) + playernamehudelems[i] destroy(); + } + + for ( i = playercphudelems.size - 1; i >= 0; i-- ) + { + if ( isdefined( playercphudelems[i] ) ) + playercphudelems[i] destroy(); + } + + if ( isdefined( outcometext ) ) + outcometext destroy(); + + if ( isdefined( outcometitle ) ) + outcometitle destroy(); +} + +updateoutcome( firsttitle, secondtitle, thirdtitle ) +{ + self endon( "disconnect" ); + self endon( "reset_outcome" ); + + while ( true ) + { + self waittill( "update_outcome" ); + + players = level.placement["all"]; + + if ( isdefined( firsttitle ) && isdefined( players[0] ) ) + firsttitle setplayernamestring( players[0] ); + else if ( isdefined( firsttitle ) ) + firsttitle.alpha = 0; + + if ( isdefined( secondtitle ) && isdefined( players[1] ) ) + secondtitle setplayernamestring( players[1] ); + else if ( isdefined( secondtitle ) ) + secondtitle.alpha = 0; + + if ( isdefined( thirdtitle ) && isdefined( players[2] ) ) + thirdtitle setplayernamestring( players[2] ); + else if ( isdefined( thirdtitle ) ) + thirdtitle.alpha = 0; + } +} + +updatewageroutcome( playernamehudelems, playercphudelems ) +{ + self endon( "disconnect" ); + self endon( "reset_outcome" ); + + while ( true ) + { + self waittill( "update_outcome" ); + + players = level.placement["all"]; + + for ( i = 0; i < playernamehudelems.size; i++ ) + { + if ( isdefined( playernamehudelems[i] ) && isdefined( players[playernamehudelems[i].playernum] ) ) + { + playernamehudelems[i] setplayernamestring( players[playernamehudelems[i].playernum] ); + continue; + } + + if ( isdefined( playernamehudelems[i] ) ) + playernamehudelems[i].alpha = 0; + + if ( isdefined( playercphudelems[i] ) ) + playercphudelems[i].alpha = 0; + } + } +} + +setshoutcasterwaitingmessage() +{ + if ( !isdefined( self.waitingforplayerstext ) ) + { + self.waitingforplayerstext = createfontstring( "objective", 2.5 ); + self.waitingforplayerstext setpoint( "CENTER", "CENTER", 0, -80 ); + self.waitingforplayerstext.sort = 1001; + self.waitingforplayerstext settext( &"MP_WAITING_FOR_PLAYERS_SHOUTCASTER" ); + self.waitingforplayerstext.foreground = 0; + self.waitingforplayerstext.hidewheninmenu = 1; + } +} + +clearshoutcasterwaitingmessage() +{ + if ( isdefined( self.waitingforplayerstext ) ) + { + destroyhudelem( self.waitingforplayerstext ); + self.waitingforplayerstext = undefined; + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_hud_util.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_hud_util.gsc new file mode 100644 index 0000000..b216ea7 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_hud_util.gsc @@ -0,0 +1,1042 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +setparent( element ) +{ + if ( isdefined( self.parent ) && self.parent == element ) + return; + + if ( isdefined( self.parent ) ) + self.parent removechild( self ); + + self.parent = element; + self.parent addchild( self ); + + if ( isdefined( self.point ) ) + self setpoint( self.point, self.relativepoint, self.xoffset, self.yoffset ); + else + self setpoint( "TOP" ); +} + +getparent() +{ + return self.parent; +} + +addchild( element ) +{ + element.index = self.children.size; + self.children[self.children.size] = element; +} + +removechild( element ) +{ + element.parent = undefined; + + if ( self.children[self.children.size - 1] != element ) + { + self.children[element.index] = self.children[self.children.size - 1]; + self.children[element.index].index = element.index; + } + + self.children[self.children.size - 1] = undefined; + element.index = undefined; +} + +setpoint( point, relativepoint, xoffset, yoffset, movetime = 0 ) +{ + element = self getparent(); + + if ( movetime ) + self moveovertime( movetime ); + + if ( !isdefined( xoffset ) ) + xoffset = 0; + + self.xoffset = xoffset; + + if ( !isdefined( yoffset ) ) + yoffset = 0; + + self.yoffset = yoffset; + self.point = point; + self.alignx = "center"; + self.aligny = "middle"; + + switch ( point ) + { + case "CENTER": + break; + case "TOP": + self.aligny = "top"; + break; + case "BOTTOM": + self.aligny = "bottom"; + break; + case "LEFT": + self.alignx = "left"; + break; + case "RIGHT": + self.alignx = "right"; + break; + case "TOP_RIGHT": + case "TOPRIGHT": + self.aligny = "top"; + self.alignx = "right"; + break; + case "TOP_LEFT": + case "TOPLEFT": + self.aligny = "top"; + self.alignx = "left"; + break; + case "TOPCENTER": + self.aligny = "top"; + self.alignx = "center"; + break; + case "BOTTOM_RIGHT": + case "BOTTOM RIGHT": + self.aligny = "bottom"; + self.alignx = "right"; + break; + case "BOTTOM_LEFT": + case "BOTTOM LEFT": + self.aligny = "bottom"; + self.alignx = "left"; + break; + default: +/# + println( "^3Warning: unknown point passed to setPoint(): " + point ); +#/ + break; + } + + if ( !isdefined( relativepoint ) ) + relativepoint = point; + + self.relativepoint = relativepoint; + relativex = "center"; + relativey = "middle"; + + switch ( relativepoint ) + { + case "CENTER": + break; + case "TOP": + relativey = "top"; + break; + case "BOTTOM": + relativey = "bottom"; + break; + case "LEFT": + relativex = "left"; + break; + case "RIGHT": + relativex = "right"; + break; + case "TOP_RIGHT": + case "TOPRIGHT": + relativey = "top"; + relativex = "right"; + break; + case "TOP_LEFT": + case "TOPLEFT": + relativey = "top"; + relativex = "left"; + break; + case "TOPCENTER": + relativey = "top"; + relativex = "center"; + break; + case "BOTTOM_RIGHT": + case "BOTTOM RIGHT": + relativey = "bottom"; + relativex = "right"; + break; + case "BOTTOM_LEFT": + case "BOTTOM LEFT": + relativey = "bottom"; + relativex = "left"; + break; + default: +/# + println( "^3Warning: unknown relativePoint passed to setPoint(): " + relativepoint ); +#/ + break; + } + + if ( element == level.uiparent ) + { + self.horzalign = relativex; + self.vertalign = relativey; + } + else + { + self.horzalign = element.horzalign; + self.vertalign = element.vertalign; + } + + if ( relativex == element.alignx ) + { + offsetx = 0; + xfactor = 0; + } + else if ( relativex == "center" || element.alignx == "center" ) + { + offsetx = int( element.width / 2 ); + + if ( relativex == "left" || element.alignx == "right" ) + xfactor = -1; + else + xfactor = 1; + } + else + { + offsetx = element.width; + + if ( relativex == "left" ) + xfactor = -1; + else + xfactor = 1; + } + + self.x = element.x + offsetx * xfactor; + + if ( relativey == element.aligny ) + { + offsety = 0; + yfactor = 0; + } + else if ( relativey == "middle" || element.aligny == "middle" ) + { + offsety = int( element.height / 2 ); + + if ( relativey == "top" || element.aligny == "bottom" ) + yfactor = -1; + else + yfactor = 1; + } + else + { + offsety = element.height; + + if ( relativey == "top" ) + yfactor = -1; + else + yfactor = 1; + } + + self.y = element.y + offsety * yfactor; + self.x += self.xoffset; + self.y += self.yoffset; + + switch ( self.elemtype ) + { + case "bar": + setpointbar( point, relativepoint, xoffset, yoffset ); + self.barframe setparent( self getparent() ); + self.barframe setpoint( point, relativepoint, xoffset, yoffset ); + break; + } + + self updatechildren(); +} + +setpointbar( point, relativepoint, xoffset, yoffset ) +{ + self.bar.horzalign = self.horzalign; + self.bar.vertalign = self.vertalign; + self.bar.alignx = "left"; + self.bar.aligny = self.aligny; + self.bar.y = self.y; + + if ( self.alignx == "left" ) + self.bar.x = self.x; + else if ( self.alignx == "right" ) + self.bar.x = self.x - self.width; + else + self.bar.x = self.x - int( self.width / 2 ); + + if ( self.aligny == "top" ) + self.bar.y = self.y; + else if ( self.aligny == "bottom" ) + self.bar.y = self.y; + + self updatebar( self.bar.frac ); +} + +updatebar( barfrac, rateofchange ) +{ + if ( self.elemtype == "bar" ) + updatebarscale( barfrac, rateofchange ); +} + +updatebarscale( barfrac, rateofchange ) +{ + barwidth = int( self.width * barfrac + 0.5 ); + + if ( !barwidth ) + barwidth = 1; + + self.bar.frac = barfrac; + self.bar setshader( self.bar.shader, barwidth, self.height ); + assert( barwidth <= self.width, "barWidth <= self.width: " + barwidth + " <= " + self.width + " - barFrac was " + barfrac ); + + if ( isdefined( rateofchange ) && barwidth < self.width ) + { + if ( rateofchange > 0 ) + { + assert( ( 1 - barfrac ) / rateofchange > 0, "barFrac: " + barfrac + "rateOfChange: " + rateofchange ); + self.bar scaleovertime( ( 1 - barfrac ) / rateofchange, self.width, self.height ); + } + else if ( rateofchange < 0 ) + { + assert( barfrac / -1 * rateofchange > 0, "barFrac: " + barfrac + "rateOfChange: " + rateofchange ); + self.bar scaleovertime( barfrac / -1 * rateofchange, 1, self.height ); + } + } + + self.bar.rateofchange = rateofchange; + self.bar.lastupdatetime = gettime(); +} + +createfontstring( font, fontscale ) +{ + fontelem = newclienthudelem( self ); + fontelem.elemtype = "font"; + fontelem.font = font; + fontelem.fontscale = fontscale; + fontelem.x = 0; + fontelem.y = 0; + fontelem.width = 0; + fontelem.height = int( level.fontheight * fontscale ); + fontelem.xoffset = 0; + fontelem.yoffset = 0; + fontelem.children = []; + fontelem setparent( level.uiparent ); + fontelem.hidden = 0; + return fontelem; +} + +createserverfontstring( font, fontscale, team ) +{ + if ( isdefined( team ) ) + fontelem = newteamhudelem( team ); + else + fontelem = newhudelem(); + + fontelem.elemtype = "font"; + fontelem.font = font; + fontelem.fontscale = fontscale; + fontelem.x = 0; + fontelem.y = 0; + fontelem.width = 0; + fontelem.height = int( level.fontheight * fontscale ); + fontelem.xoffset = 0; + fontelem.yoffset = 0; + fontelem.children = []; + fontelem setparent( level.uiparent ); + fontelem.hidden = 0; + return fontelem; +} + +createservertimer( font, fontscale, team ) +{ + if ( isdefined( team ) ) + timerelem = newteamhudelem( team ); + else + timerelem = newhudelem(); + + timerelem.elemtype = "timer"; + timerelem.font = font; + timerelem.fontscale = fontscale; + timerelem.x = 0; + timerelem.y = 0; + timerelem.width = 0; + timerelem.height = int( level.fontheight * fontscale ); + timerelem.xoffset = 0; + timerelem.yoffset = 0; + timerelem.children = []; + timerelem setparent( level.uiparent ); + timerelem.hidden = 0; + return timerelem; +} + +createclienttimer( font, fontscale ) +{ + timerelem = newclienthudelem( self ); + timerelem.elemtype = "timer"; + timerelem.font = font; + timerelem.fontscale = fontscale; + timerelem.x = 0; + timerelem.y = 0; + timerelem.width = 0; + timerelem.height = int( level.fontheight * fontscale ); + timerelem.xoffset = 0; + timerelem.yoffset = 0; + timerelem.children = []; + timerelem setparent( level.uiparent ); + timerelem.hidden = 0; + return timerelem; +} + +createicon( shader, width, height ) +{ + iconelem = newclienthudelem( self ); + iconelem.elemtype = "icon"; + iconelem.x = 0; + iconelem.y = 0; + iconelem.width = width; + iconelem.height = height; + iconelem.xoffset = 0; + iconelem.yoffset = 0; + iconelem.children = []; + iconelem setparent( level.uiparent ); + iconelem.hidden = 0; + + if ( isdefined( shader ) ) + iconelem setshader( shader, width, height ); + + return iconelem; +} + +createservericon( shader, width, height, team ) +{ + if ( isdefined( team ) ) + iconelem = newteamhudelem( team ); + else + iconelem = newhudelem(); + + iconelem.elemtype = "icon"; + iconelem.x = 0; + iconelem.y = 0; + iconelem.width = width; + iconelem.height = height; + iconelem.xoffset = 0; + iconelem.yoffset = 0; + iconelem.children = []; + iconelem setparent( level.uiparent ); + iconelem.hidden = 0; + + if ( isdefined( shader ) ) + iconelem setshader( shader, width, height ); + + return iconelem; +} + +createserverbar( color, width, height, flashfrac, team, selected ) +{ + if ( isdefined( team ) ) + barelem = newteamhudelem( team ); + else + barelem = newhudelem(); + + barelem.x = 0; + barelem.y = 0; + barelem.frac = 0; + barelem.color = color; + barelem.sort = -2; + barelem.shader = "progress_bar_fill"; + barelem setshader( "progress_bar_fill", width, height ); + barelem.hidden = 0; + + if ( isdefined( flashfrac ) ) + barelem.flashfrac = flashfrac; + + if ( isdefined( team ) ) + barelemframe = newteamhudelem( team ); + else + barelemframe = newhudelem(); + + barelemframe.elemtype = "icon"; + barelemframe.x = 0; + barelemframe.y = 0; + barelemframe.width = width; + barelemframe.height = height; + barelemframe.xoffset = 0; + barelemframe.yoffset = 0; + barelemframe.bar = barelem; + barelemframe.barframe = barelemframe; + barelemframe.children = []; + barelemframe.sort = -1; + barelemframe.color = ( 1, 1, 1 ); + barelemframe setparent( level.uiparent ); + + if ( isdefined( selected ) ) + barelemframe setshader( "progress_bar_fg_sel", width, height ); + else + barelemframe setshader( "progress_bar_fg", width, height ); + + barelemframe.hidden = 0; + + if ( isdefined( team ) ) + barelembg = newteamhudelem( team ); + else + barelembg = newhudelem(); + + barelembg.elemtype = "bar"; + barelembg.x = 0; + barelembg.y = 0; + barelembg.width = width; + barelembg.height = height; + barelembg.xoffset = 0; + barelembg.yoffset = 0; + barelembg.bar = barelem; + barelembg.barframe = barelemframe; + barelembg.children = []; + barelembg.sort = -3; + barelembg.color = ( 0, 0, 0 ); + barelembg.alpha = 0.5; + barelembg setparent( level.uiparent ); + barelembg setshader( "progress_bar_bg", width, height ); + barelembg.hidden = 0; + return barelembg; +} + +createbar( color, width, height, flashfrac ) +{ + barelem = newclienthudelem( self ); + barelem.x = 0; + barelem.y = 0; + barelem.frac = 0; + barelem.color = color; + barelem.sort = -2; + barelem.shader = "progress_bar_fill"; + barelem setshader( "progress_bar_fill", width, height ); + barelem.hidden = 0; + + if ( isdefined( flashfrac ) ) + barelem.flashfrac = flashfrac; + + barelemframe = newclienthudelem( self ); + barelemframe.elemtype = "icon"; + barelemframe.x = 0; + barelemframe.y = 0; + barelemframe.width = width; + barelemframe.height = height; + barelemframe.xoffset = 0; + barelemframe.yoffset = 0; + barelemframe.bar = barelem; + barelemframe.barframe = barelemframe; + barelemframe.children = []; + barelemframe.sort = -1; + barelemframe.color = ( 1, 1, 1 ); + barelemframe setparent( level.uiparent ); + barelemframe.hidden = 0; + barelembg = newclienthudelem( self ); + barelembg.elemtype = "bar"; + + if ( !self issplitscreen() ) + { + barelembg.x = -2; + barelembg.y = -2; + } + + barelembg.width = width; + barelembg.height = height; + barelembg.xoffset = 0; + barelembg.yoffset = 0; + barelembg.bar = barelem; + barelembg.barframe = barelemframe; + barelembg.children = []; + barelembg.sort = -3; + barelembg.color = ( 0, 0, 0 ); + barelembg.alpha = 0.5; + barelembg setparent( level.uiparent ); + + if ( !self issplitscreen() ) + barelembg setshader( "progress_bar_bg", width + 4, height + 4 ); + else + barelembg setshader( "progress_bar_bg", width + 0, height + 0 ); + + barelembg.hidden = 0; + return barelembg; +} + +getcurrentfraction() +{ + frac = self.bar.frac; + + if ( isdefined( self.bar.rateofchange ) ) + { + frac += ( gettime() - self.bar.lastupdatetime ) * self.bar.rateofchange; + + if ( frac > 1 ) + frac = 1; + + if ( frac < 0 ) + frac = 0; + } + + return frac; +} + +createprimaryprogressbar() +{ + bar = undefined; + + if ( self issplitscreen() ) + { + bar = self createbar( ( 1, 1, 1 ), level.primaryprogressbarwidth, level.primaryprogressbarheight_ss ); + bar setpoint( "TOP", undefined, level.primaryprogressbarx_ss, level.primaryprogressbary_ss ); + } + else + { + bar = self createbar( ( 1, 1, 1 ), level.primaryprogressbarwidth, level.primaryprogressbarheight ); + bar setpoint( "CENTER", undefined, level.primaryprogressbarx, level.primaryprogressbary ); + } + + return bar; +} + +createprimaryprogressbartext() +{ + text = createfontstring( "objective", level.primaryprogressbarfontsize ); + + if ( self issplitscreen() ) + text setpoint( "TOP", undefined, level.primaryprogressbartextx_ss, level.primaryprogressbartexty_ss ); + else + text setpoint( "CENTER", undefined, level.primaryprogressbartextx, level.primaryprogressbartexty ); + + text.sort = -1; + return text; +} + +createsecondaryprogressbar() +{ + secondaryprogressbarheight = getdvarintdefault( "scr_secondaryProgressBarHeight", level.secondaryprogressbarheight ); + secondaryprogressbarx = getdvarintdefault( "scr_secondaryProgressBarX", level.secondaryprogressbarx ); + secondaryprogressbary = getdvarintdefault( "scr_secondaryProgressBarY", level.secondaryprogressbary ); + secondaryprogressbarheight_ss = getdvarintdefault( "scr_secondaryProgressBarHeight", level.secondaryprogressbarheight_ss ); + secondaryprogressbarx_ss = getdvarintdefault( "scr_secondaryProgressBarX", level.secondaryprogressbarx_ss ); + secondaryprogressbary_ss = getdvarintdefault( "scr_secondaryProgressBarY", level.secondaryprogressbary_ss ); + bar = undefined; + + if ( self issplitscreen() ) + { + bar = self createbar( ( 1, 1, 1 ), level.secondaryprogressbarwidth, secondaryprogressbarheight_ss ); + bar setpoint( "TOP", undefined, secondaryprogressbarx_ss, secondaryprogressbary_ss ); + } + else + { + bar = self createbar( ( 1, 1, 1 ), level.secondaryprogressbarwidth, secondaryprogressbarheight ); + bar setpoint( "CENTER", undefined, secondaryprogressbarx, secondaryprogressbary ); + } + + return bar; +} + +createsecondaryprogressbartext() +{ + secondaryprogressbartextx = getdvarintdefault( "scr_btx", level.secondaryprogressbartextx ); + secondaryprogressbartexty = getdvarintdefault( "scr_bty", level.secondaryprogressbartexty ); + secondaryprogressbartextx_ss = getdvarintdefault( "scr_btx", level.secondaryprogressbartextx_ss ); + secondaryprogressbartexty_ss = getdvarintdefault( "scr_bty", level.secondaryprogressbartexty_ss ); + text = createfontstring( "objective", level.primaryprogressbarfontsize ); + + if ( self issplitscreen() ) + text setpoint( "TOP", undefined, secondaryprogressbartextx_ss, secondaryprogressbartexty_ss ); + else + text setpoint( "CENTER", undefined, secondaryprogressbartextx, secondaryprogressbartexty ); + + text.sort = -1; + return text; +} + +createteamprogressbar( team ) +{ + bar = createserverbar( ( 1, 0, 0 ), level.teamprogressbarwidth, level.teamprogressbarheight, undefined, team ); + bar setpoint( "TOP", undefined, 0, level.teamprogressbary ); + return bar; +} + +createteamprogressbartext( team ) +{ + text = createserverfontstring( "default", level.teamprogressbarfontsize, team ); + text setpoint( "TOP", undefined, 0, level.teamprogressbartexty ); + return text; +} + +setflashfrac( flashfrac ) +{ + self.bar.flashfrac = flashfrac; +} + +hideelem() +{ + if ( self.hidden ) + return; + + self.hidden = 1; + + if ( self.alpha != 0 ) + self.alpha = 0; + + if ( self.elemtype == "bar" || self.elemtype == "bar_shader" ) + { + self.bar.hidden = 1; + + if ( self.bar.alpha != 0 ) + self.bar.alpha = 0; + + self.barframe.hidden = 1; + + if ( self.barframe.alpha != 0 ) + self.barframe.alpha = 0; + } +} + +showelem() +{ + if ( !self.hidden ) + return; + + self.hidden = 0; + + if ( self.elemtype == "bar" || self.elemtype == "bar_shader" ) + { + if ( self.alpha != 0.5 ) + self.alpha = 0.5; + + self.bar.hidden = 0; + + if ( self.bar.alpha != 1 ) + self.bar.alpha = 1; + + self.barframe.hidden = 0; + + if ( self.barframe.alpha != 1 ) + self.barframe.alpha = 1; + } + else if ( self.alpha != 1 ) + self.alpha = 1; +} + +flashthread() +{ + self endon( "death" ); + + if ( !self.hidden ) + self.alpha = 1; + + while ( true ) + { + if ( self.frac >= self.flashfrac ) + { + if ( !self.hidden ) + { + self fadeovertime( 0.3 ); + self.alpha = 0.2; + wait 0.35; + self fadeovertime( 0.3 ); + self.alpha = 1; + } + + wait 0.7; + } + else + { + if ( !self.hidden && self.alpha != 1 ) + self.alpha = 1; + + wait 0.05; + } + } +} + +destroyelem() +{ + tempchildren = []; + + for ( index = 0; index < self.children.size; index++ ) + { + if ( isdefined( self.children[index] ) ) + tempchildren[tempchildren.size] = self.children[index]; + } + + for ( index = 0; index < tempchildren.size; index++ ) + tempchildren[index] setparent( self getparent() ); + + if ( self.elemtype == "bar" || self.elemtype == "bar_shader" ) + { + self.bar destroy(); + self.barframe destroy(); + } + + self destroy(); +} + +seticonshader( shader ) +{ + self setshader( shader, self.width, self.height ); +} + +setwidth( width ) +{ + self.width = width; +} + +setheight( height ) +{ + self.height = height; +} + +setsize( width, height ) +{ + self.width = width; + self.height = height; +} + +updatechildren() +{ + for ( index = 0; index < self.children.size; index++ ) + { + child = self.children[index]; + child setpoint( child.point, child.relativepoint, child.xoffset, child.yoffset ); + } +} + +createloadouticon( verindex, horindex, xpos, ypos ) +{ + iconsize = 32; + + if ( level.splitscreen ) + ypos -= 80 + iconsize * ( 3 - verindex ); + else + ypos -= 90 + iconsize * ( 3 - verindex ); + + if ( level.splitscreen ) + xpos -= 5 + iconsize * horindex; + else + xpos -= 10 + iconsize * horindex; + + icon = createicon( "white", iconsize, iconsize ); + icon setpoint( "BOTTOM RIGHT", "BOTTOM RIGHT", xpos, ypos ); + icon.horzalign = "user_right"; + icon.vertalign = "user_bottom"; + icon.archived = 0; + icon.foreground = 0; + return icon; +} + +setloadouticoncoords( verindex, horindex, xpos, ypos ) +{ + iconsize = 32; + + if ( level.splitscreen ) + ypos -= 80 + iconsize * ( 3 - verindex ); + else + ypos -= 90 + iconsize * ( 3 - verindex ); + + if ( level.splitscreen ) + xpos -= 5 + iconsize * horindex; + else + xpos -= 10 + iconsize * horindex; + + self setpoint( "BOTTOM RIGHT", "BOTTOM RIGHT", xpos, ypos ); + self.horzalign = "user_right"; + self.vertalign = "user_bottom"; + self.archived = 0; + self.foreground = 0; + self.alpha = 1; +} + +setloadouttextcoords( xcoord ) +{ + self setpoint( "RIGHT", "LEFT", xcoord, 0 ); +} + +createloadouttext( icon, xcoord ) +{ + text = createfontstring( "small", 1 ); + text setparent( icon ); + text setpoint( "RIGHT", "LEFT", xcoord, 0 ); + text.archived = 0; + text.alignx = "right"; + text.aligny = "middle"; + text.foreground = 0; + return text; +} + +showloadoutattribute( iconelem, icon, alpha, textelem, text ) +{ + iconsize = 32; + iconelem.alpha = alpha; + + if ( alpha ) + iconelem setshader( icon, iconsize, iconsize ); + + if ( isdefined( textelem ) ) + { + textelem.alpha = alpha; + + if ( alpha ) + textelem settext( text ); + } +} + +hideloadoutattribute( iconelem, fadetime, textelem, hidetextonly ) +{ + if ( isdefined( fadetime ) ) + { + if ( !isdefined( hidetextonly ) || !hidetextonly ) + iconelem fadeovertime( fadetime ); + + if ( isdefined( textelem ) ) + textelem fadeovertime( fadetime ); + } + + if ( !isdefined( hidetextonly ) || !hidetextonly ) + iconelem.alpha = 0; + + if ( isdefined( textelem ) ) + textelem.alpha = 0; +} + +showperks() +{ + ypos = 40; + + if ( !isdefined( self.perkhudelem ) ) + self.perkhudelem = createloadouticon( 0, 0, 200, ypos ); + else + self.perkhudelem setloadouticoncoords( 0, 0, 200, ypos ); + + self.perkhudelem setperks( self ); + self.perkhudelem.x = -10; + self.perkhudelem.alpha = 0; + self.perkhudelem fadeovertime( 0.4 ); + self.perkhudelem.alpha = 1; + self.perkhudelem.hidewheninmenu = 1; +} + +showperk( index, perk, ypos ) +{ + assert( game["state"] != "postgame" ); + + if ( !isdefined( self.perkicon ) ) + { + self.perkicon = []; + self.perkname = []; + } + + if ( !isdefined( self.perkicon[index] ) ) + { + assert( !isdefined( self.perkname[index] ) ); + self.perkicon[index] = createloadouticon( index, 0, 200, ypos ); + self.perkname[index] = createloadouttext( self.perkicon[index], 160 ); + } + else + { + self.perkicon[index] setloadouticoncoords( index, 0, 200, ypos ); + self.perkname[index] setloadouttextcoords( 160 ); + } + + if ( perk == "perk_null" || perk == "weapon_null" || perk == "specialty_null" ) + alpha = 0; + else + { + assert( isdefined( level.perknames[perk] ), perk ); + alpha = 1; + } + + showloadoutattribute( self.perkicon[index], perk, alpha, self.perkname[index], level.perknames[perk] ); + self.perkicon[index] moveovertime( 0.3 ); + self.perkicon[index].x = -5; + self.perkicon[index].hidewheninmenu = 1; + self.perkname[index] moveovertime( 0.3 ); + self.perkname[index].x = -40; + self.perkname[index].hidewheninmenu = 1; +} + +hideperks( fadetime ) +{ + if ( level.perksenabled == 1 ) + { + if ( game["state"] == "postgame" ) + { + assert( !isdefined( self.perkhudelem ) ); + return; + } + } + + assert( isdefined( self.perkhudelem ) ); + + if ( isdefined( self.perkhudelem ) ) + hideloadoutattribute( self.perkhudelem, fadetime ); +} + +hideperk( index, fadetime = 0.05, hidetextonly ) +{ + if ( level.perksenabled == 1 ) + { + if ( game["state"] == "postgame" ) + { + if ( isdefined( self.perkicon ) ) + { + assert( !isdefined( self.perkicon[index] ) ); + assert( !isdefined( self.perkname[index] ) ); + } + + return; + } + + assert( isdefined( self.perkicon[index] ) ); + assert( isdefined( self.perkname[index] ) ); + + if ( isdefined( self.perkicon ) && isdefined( self.perkicon[index] ) && isdefined( self.perkname ) && isdefined( self.perkname[index] ) ) + hideloadoutattribute( self.perkicon[index], fadetime, self.perkname[index], hidetextonly ); + } +} + +hideallperks( fadetime, hidetextonly ) +{ + if ( level.perksenabled == 1 ) + hideperks( fadetime ); +} + +showkillstreak( index, killstreak, xpos, ypos ) +{ + assert( game["state"] != "postgame" ); + + if ( !isdefined( self.killstreakicon ) ) + self.killstreakicon = []; + + if ( !isdefined( self.killstreakicon[index] ) ) + self.killstreakicon[index] = createloadouticon( 3, self.killstreak.size - 1 - index, xpos, ypos ); + + if ( killstreak == "killstreak_null" || killstreak == "weapon_null" ) + alpha = 0; + else + { + assert( isdefined( level.killstreakicons[killstreak] ), killstreak ); + alpha = 1; + } + + showloadoutattribute( self.killstreakicon[index], level.killstreakicons[killstreak], alpha ); +} + +hidekillstreak( index, fadetime ) +{ + if ( iskillstreaksenabled() ) + { + if ( game["state"] == "postgame" ) + { + assert( !isdefined( self.killstreakicon[index] ) ); + return; + } + + assert( isdefined( self.killstreakicon[index] ) ); + hideloadoutattribute( self.killstreakicon[index], fadetime ); + } +} + +setgamemodeinfopoint() +{ + self.x = 5; + self.y = 120; + self.horzalign = "user_left"; + self.vertalign = "user_top"; + self.alignx = "left"; + self.aligny = "top"; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_menus.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_menus.gsc new file mode 100644 index 0000000..e68c67c --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_menus.gsc @@ -0,0 +1,174 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_globallogic; +#include maps\mp\gametypes_zm\_rank; + +init() +{ + precachestring( &"open_ingame_menu" ); + game["menu_team"] = "team_marinesopfor"; + game["menu_initteam_allies"] = "initteam_marines"; + game["menu_initteam_axis"] = "initteam_opfor"; + game["menu_class"] = "class"; + game["menu_changeclass"] = "changeclass"; + game["menu_changeclass_offline"] = "changeclass"; + game["menu_wager_side_bet"] = "sidebet"; + game["menu_wager_side_bet_player"] = "sidebet_player"; + game["menu_changeclass_wager"] = "changeclass_wager"; + game["menu_changeclass_custom"] = "changeclass_custom"; + game["menu_changeclass_barebones"] = "changeclass_barebones"; + + foreach ( team in level.teams ) + game["menu_changeclass_" + team] = "changeclass"; + + game["menu_controls"] = "ingame_controls"; + game["menu_options"] = "ingame_options"; + game["menu_leavegame"] = "popup_leavegame"; + precachemenu( game["menu_controls"] ); + precachemenu( game["menu_options"] ); + precachemenu( game["menu_leavegame"] ); + precachemenu( "scoreboard" ); + precachemenu( "spectate" ); + precachemenu( game["menu_team"] ); + precachemenu( game["menu_changeclass_allies"] ); + precachemenu( game["menu_initteam_allies"] ); + precachemenu( game["menu_changeclass_axis"] ); + precachemenu( game["menu_class"] ); + precachemenu( game["menu_changeclass"] ); + precachemenu( game["menu_initteam_axis"] ); + precachemenu( game["menu_changeclass_offline"] ); + precachemenu( game["menu_changeclass_wager"] ); + precachemenu( game["menu_changeclass_custom"] ); + precachemenu( game["menu_changeclass_barebones"] ); + precachemenu( game["menu_wager_side_bet"] ); + precachemenu( game["menu_wager_side_bet_player"] ); + precachestring( &"MP_HOST_ENDED_GAME" ); + precachestring( &"MP_HOST_ENDGAME_RESPONSE" ); + level thread onplayerconnect(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread onmenuresponse(); + } +} + +onmenuresponse() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "menuresponse", menu, response ); + + if ( response == "back" ) + { + self closemenu(); + self closeingamemenu(); + + if ( level.console ) + { + if ( menu == game["menu_changeclass"] || menu == game["menu_changeclass_offline"] || menu == game["menu_team"] || menu == game["menu_controls"] ) + { + if ( isdefined( level.teams[self.pers["team"]] ) ) + self openmenu( game["menu_class"] ); + } + } + + continue; + } + + if ( response == "changeteam" && level.allow_teamchange == "1" ) + { + self closemenu(); + self closeingamemenu(); + self openmenu( game["menu_team"] ); + } + + if ( response == "changeclass_marines_splitscreen" ) + self openmenu( "changeclass_marines_splitscreen" ); + + if ( response == "changeclass_opfor_splitscreen" ) + self openmenu( "changeclass_opfor_splitscreen" ); + + if ( response == "endgame" ) + { + if ( self issplitscreen() ) + { + level.skipvote = 1; + + if ( !level.gameended ) + level thread maps\mp\gametypes_zm\_globallogic::forceend(); + } + + continue; + } + + if ( response == "killserverpc" ) + { + level thread maps\mp\gametypes_zm\_globallogic::killserverpc(); + continue; + } + + if ( response == "endround" ) + { + if ( !level.gameended ) + level thread maps\mp\gametypes_zm\_globallogic::forceend(); + else + { + self closemenu(); + self closeingamemenu(); + self iprintln( &"MP_HOST_ENDGAME_RESPONSE" ); + } + + continue; + } + + if ( menu == game["menu_team"] && level.allow_teamchange == "1" ) + { + switch ( response ) + { + case "autoassign": + self [[ level.autoassign ]]( 1 ); + break; + case "spectator": + self [[ level.spectator ]](); + break; + default: + self [[ level.teammenu ]]( response ); + break; + } + + continue; + } + + if ( menu == game["menu_changeclass"] || menu == game["menu_changeclass_offline"] || menu == game["menu_changeclass_wager"] || menu == game["menu_changeclass_custom"] || menu == game["menu_changeclass_barebones"] ) + { + self closemenu(); + self closeingamemenu(); + + if ( level.rankedmatch && issubstr( response, "custom" ) ) + { + if ( self isitemlocked( maps\mp\gametypes_zm\_rank::getitemindex( "feature_cac" ) ) ) + kick( self getentitynumber() ); + } + + self.selectedclass = 1; + self [[ level.class ]]( response ); + continue; + } + + if ( menu == "spectate" ) + { + player = getplayerfromclientnum( int( response ) ); + + if ( isdefined( player ) ) + self setcurrentspectatorclient( player ); + } + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_perplayer.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_perplayer.gsc new file mode 100644 index 0000000..eac9f10 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_perplayer.gsc @@ -0,0 +1,179 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +init( id, playerbegincallback, playerendcallback ) +{ + precacheshader( "objpoint_default" ); + handler = spawnstruct(); + handler.id = id; + handler.playerbegincallback = playerbegincallback; + handler.playerendcallback = playerendcallback; + handler.enabled = 0; + handler.players = []; + thread onplayerconnect( handler ); + level.handlerglobalflagval = 0; + return handler; +} + +enable( handler ) +{ + if ( handler.enabled ) + return; + + handler.enabled = 1; + level.handlerglobalflagval++; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i].handlerflagval = level.handlerglobalflagval; + + players = handler.players; + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].handlerflagval != level.handlerglobalflagval ) + continue; + + if ( players[i].handlers[handler.id].ready ) + players[i] handleplayer( handler ); + } +} + +disable( handler ) +{ + if ( !handler.enabled ) + return; + + handler.enabled = 0; + level.handlerglobalflagval++; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i].handlerflagval = level.handlerglobalflagval; + + players = handler.players; + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].handlerflagval != level.handlerglobalflagval ) + continue; + + if ( players[i].handlers[handler.id].ready ) + players[i] unhandleplayer( handler, 0, 0 ); + } +} + +onplayerconnect( handler ) +{ + for (;;) + { + level waittill( "connecting", player ); + + if ( !isdefined( player.handlers ) ) + player.handlers = []; + + player.handlers[handler.id] = spawnstruct(); + player.handlers[handler.id].ready = 0; + player.handlers[handler.id].handled = 0; + player.handlerflagval = -1; + handler.players[handler.players.size] = player; + player thread onplayerdisconnect( handler ); + player thread onplayerspawned( handler ); + player thread onjoinedteam( handler ); + player thread onjoinedspectators( handler ); + player thread onplayerkilled( handler ); + } +} + +onplayerdisconnect( handler ) +{ + self waittill( "disconnect" ); + + newplayers = []; + + for ( i = 0; i < handler.players.size; i++ ) + { + if ( handler.players[i] != self ) + newplayers[newplayers.size] = handler.players[i]; + } + + handler.players = newplayers; + self thread unhandleplayer( handler, 1, 1 ); +} + +onjoinedteam( handler ) +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "joined_team" ); + + self thread unhandleplayer( handler, 1, 0 ); + } +} + +onjoinedspectators( handler ) +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "joined_spectators" ); + + self thread unhandleplayer( handler, 1, 0 ); + } +} + +onplayerspawned( handler ) +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread handleplayer( handler ); + } +} + +onplayerkilled( handler ) +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "killed_player" ); + + self thread unhandleplayer( handler, 1, 0 ); + } +} + +handleplayer( handler ) +{ + self.handlers[handler.id].ready = 1; + + if ( !handler.enabled ) + return; + + if ( self.handlers[handler.id].handled ) + return; + + self.handlers[handler.id].handled = 1; + self thread [[ handler.playerbegincallback ]](); +} + +unhandleplayer( handler, unsetready, disconnected ) +{ + if ( !disconnected && unsetready ) + self.handlers[handler.id].ready = 0; + + if ( !self.handlers[handler.id].handled ) + return; + + if ( !disconnected ) + self.handlers[handler.id].handled = 0; + + self thread [[ handler.playerendcallback ]]( disconnected ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_scoreboard.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_scoreboard.gsc new file mode 100644 index 0000000..8b412b7 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_scoreboard.gsc @@ -0,0 +1,27 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +init() +{ + setdvar( "g_ScoresColor_Spectator", ".25 .25 .25" ); + setdvar( "g_ScoresColor_Free", ".76 .78 .10" ); + setdvar( "g_teamColor_MyTeam", ".4 .7 .4" ); + setdvar( "g_teamColor_EnemyTeam", "1 .315 0.35" ); + setdvar( "g_teamColor_MyTeamAlt", ".35 1 1" ); + setdvar( "g_teamColor_EnemyTeamAlt", "1 .5 0" ); + setdvar( "g_teamColor_Squad", ".315 0.35 1" ); + + if ( level.createfx_enabled ) + return; + + if ( sessionmodeiszombiesgame() ) + { + setdvar( "g_TeamIcon_Axis", "faction_cia" ); + setdvar( "g_TeamIcon_Allies", "faction_cdc" ); + } + else + { + setdvar( "g_TeamIcon_Axis", game["icons"]["axis"] ); + setdvar( "g_TeamIcon_Allies", game["icons"]["allies"] ); + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_serversettings.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_serversettings.gsc new file mode 100644 index 0000000..ff5002b --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_serversettings.gsc @@ -0,0 +1,191 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +init() +{ + level.hostname = getdvar( "sv_hostname" ); + + if ( level.hostname == "" ) + level.hostname = "CoDHost"; + + setdvar( "sv_hostname", level.hostname ); + setdvar( "ui_hostname", level.hostname ); + makedvarserverinfo( "ui_hostname", "CoDHost" ); + level.motd = getdvar( "scr_motd" ); + + if ( level.motd == "" ) + level.motd = ""; + + setdvar( "scr_motd", level.motd ); + setdvar( "ui_motd", level.motd ); + makedvarserverinfo( "ui_motd", "" ); + level.allowvote = getdvar( "g_allowVote" ); + + if ( level.allowvote == "" ) + level.allowvote = "1"; + + setdvar( "g_allowvote", level.allowvote ); + setdvar( "ui_allowvote", level.allowvote ); + makedvarserverinfo( "ui_allowvote", "1" ); + level.allow_teamchange = "0"; + + if ( sessionmodeisprivate() || !sessionmodeisonlinegame() ) + level.allow_teamchange = "1"; + + setdvar( "ui_allow_teamchange", level.allow_teamchange ); + level.friendlyfire = getgametypesetting( "friendlyfiretype" ); + setdvar( "ui_friendlyfire", level.friendlyfire ); + makedvarserverinfo( "ui_friendlyfire", "0" ); + + if ( getdvar( "scr_mapsize" ) == "" ) + setdvar( "scr_mapsize", "64" ); + else if ( getdvarfloat( "scr_mapsize" ) >= 64 ) + setdvar( "scr_mapsize", "64" ); + else if ( getdvarfloat( "scr_mapsize" ) >= 32 ) + setdvar( "scr_mapsize", "32" ); + else if ( getdvarfloat( "scr_mapsize" ) >= 16 ) + setdvar( "scr_mapsize", "16" ); + else + setdvar( "scr_mapsize", "8" ); + + level.mapsize = getdvarfloat( "scr_mapsize" ); + constraingametype( getdvar( "g_gametype" ) ); + constrainmapsize( level.mapsize ); + + for (;;) + { + updateserversettings(); + wait 5; + } +} + +updateserversettings() +{ + sv_hostname = getdvar( "sv_hostname" ); + + if ( level.hostname != sv_hostname ) + { + level.hostname = sv_hostname; + setdvar( "ui_hostname", level.hostname ); + } + + scr_motd = getdvar( "scr_motd" ); + + if ( level.motd != scr_motd ) + { + level.motd = scr_motd; + setdvar( "ui_motd", level.motd ); + } + + g_allowvote = getdvar( "g_allowVote" ); + + if ( level.allowvote != g_allowvote ) + { + level.allowvote = g_allowvote; + setdvar( "ui_allowvote", level.allowvote ); + } + + scr_friendlyfire = getgametypesetting( "friendlyfiretype" ); + + if ( level.friendlyfire != scr_friendlyfire ) + { + level.friendlyfire = scr_friendlyfire; + setdvar( "ui_friendlyfire", level.friendlyfire ); + } +} + +constraingametype( gametype ) +{ + entities = getentarray(); + + for ( i = 0; i < entities.size; i++ ) + { + entity = entities[i]; + + if ( gametype == "dm" ) + { + if ( isdefined( entity.script_gametype_dm ) && entity.script_gametype_dm != "1" ) + entity delete(); + + continue; + } + + if ( gametype == "tdm" ) + { + if ( isdefined( entity.script_gametype_tdm ) && entity.script_gametype_tdm != "1" ) + entity delete(); + + continue; + } + + if ( gametype == "ctf" ) + { + if ( isdefined( entity.script_gametype_ctf ) && entity.script_gametype_ctf != "1" ) + entity delete(); + + continue; + } + + if ( gametype == "hq" ) + { + if ( isdefined( entity.script_gametype_hq ) && entity.script_gametype_hq != "1" ) + entity delete(); + + continue; + } + + if ( gametype == "sd" ) + { + if ( isdefined( entity.script_gametype_sd ) && entity.script_gametype_sd != "1" ) + entity delete(); + + continue; + } + + if ( gametype == "koth" ) + { + if ( isdefined( entity.script_gametype_koth ) && entity.script_gametype_koth != "1" ) + entity delete(); + } + } +} + +constrainmapsize( mapsize ) +{ + entities = getentarray(); + + for ( i = 0; i < entities.size; i++ ) + { + entity = entities[i]; + + if ( int( mapsize ) == 8 ) + { + if ( isdefined( entity.script_mapsize_08 ) && entity.script_mapsize_08 != "1" ) + entity delete(); + + continue; + } + + if ( int( mapsize ) == 16 ) + { + if ( isdefined( entity.script_mapsize_16 ) && entity.script_mapsize_16 != "1" ) + entity delete(); + + continue; + } + + if ( int( mapsize ) == 32 ) + { + if ( isdefined( entity.script_mapsize_32 ) && entity.script_mapsize_32 != "1" ) + entity delete(); + + continue; + } + + if ( int( mapsize ) == 64 ) + { + if ( isdefined( entity.script_mapsize_64 ) && entity.script_mapsize_64 != "1" ) + entity delete(); + } + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_shellshock.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_shellshock.gsc new file mode 100644 index 0000000..31ded74 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_shellshock.gsc @@ -0,0 +1,56 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; + +init() +{ + precacheshellshock( "frag_grenade_mp" ); + precacheshellshock( "damage_mp" ); + precacherumble( "artillery_rumble" ); + precacherumble( "grenade_rumble" ); +} + +shellshockondamage( cause, damage ) +{ + if ( cause == "MOD_EXPLOSIVE" || cause == "MOD_GRENADE" || cause == "MOD_GRENADE_SPLASH" || cause == "MOD_PROJECTILE" || cause == "MOD_PROJECTILE_SPLASH" ) + { + time = 0; + + if ( damage >= 90 ) + time = 4; + else if ( damage >= 50 ) + time = 3; + else if ( damage >= 25 ) + time = 2; + else if ( damage > 10 ) + time = 2; + + if ( time ) + { + if ( self mayapplyscreeneffect() ) + self shellshock( "frag_grenade_mp", 0.5 ); + } + } +} + +endondeath() +{ + self waittill( "death" ); + + waittillframeend; + self notify( "end_explode" ); +} + +endontimer( timer ) +{ + self endon( "disconnect" ); + wait( timer ); + self notify( "end_on_timer" ); +} + +rcbomb_earthquake( position ) +{ + playrumbleonposition( "grenade_rumble", position ); + earthquake( 0.5, 0.5, self.origin, 512 ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_spawning.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_spawning.gsc new file mode 100644 index 0000000..4c6a62b --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_spawning.gsc @@ -0,0 +1,942 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\gametypes_zm\_spawnlogic; + +init() +{ + if ( !isdefined( level.gamemodespawndvars ) ) + level.gamemodespawndvars = ::default_gamemodespawndvars; + + level init_spawn_system(); + level.recently_deceased = []; + + foreach ( team in level.teams ) + level.recently_deceased[team] = spawn_array_struct(); + + level thread onplayerconnect(); + + if ( getdvar( _hash_AD6C19FE ) == "" ) + level.spawn_visibility_check_max = 20; + else + level.spawn_visibility_check_max = getdvarint( _hash_AD6C19FE ); + + level.spawnprotectiontime = getgametypesetting( "spawnprotectiontime" ); +/# + setdvar( "scr_debug_spawn_player", "" ); + setdvar( "scr_debug_render_spawn_data", "1" ); + setdvar( "scr_debug_render_snapshotmode", "0" ); + setdvar( "scr_spawn_point_test_mode", "0" ); + level.test_spawn_point_index = 0; + setdvar( "scr_debug_render_spawn_text", "1" ); +#/ +} + +default_gamemodespawndvars( reset_dvars ) +{ + +} + +init_spawn_system() +{ + level.spawnsystem = spawnstruct(); + spawnsystem = level.spawnsystem; + level get_player_spawning_dvars( 1 ); + level thread initialize_player_spawning_dvars(); + spawnsystem.einfluencer_shape_sphere = 0; + spawnsystem.einfluencer_shape_cylinder = 1; + spawnsystem.einfluencer_type_normal = 0; + spawnsystem.einfluencer_type_player = 1; + spawnsystem.einfluencer_type_weapon = 2; + spawnsystem.einfluencer_type_dog = 3; + spawnsystem.einfluencer_type_vehicle = 4; + spawnsystem.einfluencer_type_game_mode = 6; + spawnsystem.einfluencer_type_enemy_spawned = 7; + spawnsystem.einfluencer_curve_constant = 0; + spawnsystem.einfluencer_curve_linear = 1; + spawnsystem.einfluencer_curve_steep = 2; + spawnsystem.einfluencer_curve_inverse_linear = 3; + spawnsystem.einfluencer_curve_negative_to_positive = 4; + spawnsystem.ispawn_teammask = []; + spawnsystem.ispawn_teammask_free = 1; + spawnsystem.ispawn_teammask["free"] = spawnsystem.ispawn_teammask_free; + all = spawnsystem.ispawn_teammask_free; + count = 1; + + foreach ( team in level.teams ) + { + spawnsystem.ispawn_teammask[team] = 1 << count; + all |= spawnsystem.ispawn_teammask[team]; + count++; + } + + spawnsystem.ispawn_teammask["all"] = all; +} + +onplayerconnect() +{ + level endon( "game_ended" ); + + for (;;) + { + level waittill( "connecting", player ); + + player setentertime( gettime() ); + player thread onplayerspawned(); + player thread ondisconnect(); + player thread onteamchange(); + player thread ongrenadethrow(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + level endon( "game_ended" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread initialspawnprotection( "specialty_nottargetedbyairsupport", 1 ); + self thread initialspawnprotection( "specialty_nokillstreakreticle", 0 ); + self thread initialspawnprotection( "specialty_nottargettedbysentry", 0 ); + + if ( isdefined( self.pers["hasRadar"] ) && self.pers["hasRadar"] ) + self.hasspyplane = 1; + + self enable_player_influencers( 1 ); + self thread ondeath(); + } +} + +ondeath() +{ + self endon( "disconnect" ); + level endon( "game_ended" ); + + self waittill( "death" ); + + self enable_player_influencers( 0 ); + self create_body_influencers(); +} + +onteamchange() +{ + self endon( "disconnect" ); + level endon( "game_ended" ); + + while ( true ) + { + self waittill( "joined_team" ); + + self player_influencers_set_team(); + wait 0.05; + } +} + +ongrenadethrow() +{ + self endon( "disconnect" ); + level endon( "game_ended" ); + + while ( true ) + { + self waittill( "grenade_fire", grenade, weaponname ); + + level thread create_grenade_influencers( self.pers["team"], weaponname, grenade ); + wait 0.05; + } +} + +ondisconnect() +{ + level endon( "game_ended" ); + + self waittill( "disconnect" ); +} + +get_score_curve_index( curve ) +{ + switch ( curve ) + { + case "linear": + return level.spawnsystem.einfluencer_curve_linear; + case "steep": + return level.spawnsystem.einfluencer_curve_steep; + case "inverse_linear": + return level.spawnsystem.einfluencer_curve_linear; + case "negative_to_positive": + return level.spawnsystem.einfluencer_curve_negative_to_positive; + case "constant": + default: + return level.spawnsystem.einfluencer_curve_constant; + } +} + +get_influencer_type_index( curve ) +{ + +} + +create_player_influencers() +{ + assert( !isdefined( self.influencer_enemy_sphere ) ); + assert( !isdefined( self.influencer_weapon_cylinder ) ); + assert( !level.teambased || !isdefined( self.influencer_friendly_sphere ) ); + assert( !level.teambased || !isdefined( self.influencer_friendly_cylinder ) ); + + if ( !level.teambased ) + { + team_mask = level.spawnsystem.ispawn_teammask_free; + other_team_mask = level.spawnsystem.ispawn_teammask_free; + weapon_team_mask = level.spawnsystem.ispawn_teammask_free; + } + else if ( isdefined( self.pers["team"] ) ) + { + team = self.pers["team"]; + team_mask = getteammask( team ); + other_team_mask = getotherteamsmask( team ); + weapon_team_mask = getotherteamsmask( team ); + } + else + { + team_mask = 0; + other_team_mask = 0; + weapon_team_mask = 0; + } + + if ( level.hardcoremode ) + weapon_team_mask |= team_mask; + + angles = self.angles; + origin = self.origin; + up = ( 0, 0, 1 ); + forward = ( 1, 0, 0 ); + cylinder_forward = up; + cylinder_up = forward; + self.influencer_enemy_sphere = addsphereinfluencer( level.spawnsystem.einfluencer_type_player, origin, level.spawnsystem.enemy_influencer_radius, level.spawnsystem.enemy_influencer_score, other_team_mask, "enemy,r,s", get_score_curve_index( level.spawnsystem.enemy_influencer_score_curve ), 0, self ); + + if ( level.teambased ) + { + cylinder_up = -1.0 * forward; + self.influencer_friendly_sphere = addsphereinfluencer( level.spawnsystem.einfluencer_type_player, origin, level.spawnsystem.friend_weak_influencer_radius, level.spawnsystem.friend_weak_influencer_score, team_mask, "friend_weak,r,s", get_score_curve_index( level.spawnsystem.friend_weak_influencer_score_curve ), 0, self ); + } + + self.spawn_influencers_created = 1; + + if ( !isdefined( self.pers["team"] ) || self.pers["team"] == "spectator" ) + self enable_player_influencers( 0 ); +} + +remove_player_influencers() +{ + if ( level.teambased && isdefined( self.influencer_friendly_sphere ) ) + { + removeinfluencer( self.influencer_friendly_sphere ); + self.influencer_friendly_sphere = undefined; + } + + if ( level.teambased && isdefined( self.influencer_friendly_cylinder ) ) + { + removeinfluencer( self.influencer_friendly_cylinder ); + self.influencer_friendly_cylinder = undefined; + } + + if ( isdefined( self.influencer_enemy_sphere ) ) + { + removeinfluencer( self.influencer_enemy_sphere ); + self.influencer_enemy_sphere = undefined; + } + + if ( isdefined( self.influencer_weapon_cylinder ) ) + { + removeinfluencer( self.influencer_weapon_cylinder ); + self.influencer_weapon_cylinder = undefined; + } +} + +enable_player_influencers( enabled ) +{ + if ( !isdefined( self.spawn_influencers_created ) ) + self create_player_influencers(); + + if ( isdefined( self.influencer_friendly_sphere ) ) + enableinfluencer( self.influencer_friendly_sphere, enabled ); + + if ( isdefined( self.influencer_friendly_cylinder ) ) + enableinfluencer( self.influencer_friendly_cylinder, enabled ); + + if ( isdefined( self.influencer_enemy_sphere ) ) + enableinfluencer( self.influencer_enemy_sphere, enabled ); + + if ( isdefined( self.influencer_weapon_cylinder ) ) + enableinfluencer( self.influencer_weapon_cylinder, enabled ); +} + +player_influencers_set_team() +{ + if ( !level.teambased ) + { + team_mask = level.spawnsystem.ispawn_teammask_free; + other_team_mask = level.spawnsystem.ispawn_teammask_free; + weapon_team_mask = level.spawnsystem.ispawn_teammask_free; + } + else + { + team = self.pers["team"]; + team_mask = getteammask( team ); + other_team_mask = getotherteamsmask( team ); + weapon_team_mask = getotherteamsmask( team ); + } + + if ( level.friendlyfire != 0 && level.teambased ) + weapon_team_mask |= team_mask; + + if ( isdefined( self.influencer_friendly_sphere ) ) + setinfluencerteammask( self.influencer_friendly_sphere, team_mask ); + + if ( isdefined( self.influencer_friendly_cylinder ) ) + setinfluencerteammask( self.influencer_friendly_cylinder, team_mask ); + + if ( isdefined( self.influencer_enemy_sphere ) ) + setinfluencerteammask( self.influencer_enemy_sphere, other_team_mask ); + + if ( isdefined( self.influencer_weapon_cylinder ) ) + setinfluencerteammask( self.influencer_weapon_cylinder, weapon_team_mask ); +} + +create_body_influencers() +{ + if ( level.teambased ) + team_mask = getteammask( self.pers["team"] ); + else + team_mask = level.spawnsystem.ispawn_teammask_free; + + addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.dead_friend_influencer_radius, level.spawnsystem.dead_friend_influencer_score, team_mask, "dead_friend,r,s", get_score_curve_index( level.spawnsystem.dead_friend_influencer_score_curve ), level.spawnsystem.dead_friend_influencer_timeout_seconds ); +} + +create_grenade_influencers( parent_team, weaponname, grenade ) +{ + pixbeginevent( "create_grenade_influencers" ); + + if ( !level.teambased ) + weapon_team_mask = level.spawnsystem.ispawn_teammask_free; + else + { + weapon_team_mask = getotherteamsmask( parent_team ); + + if ( level.friendlyfire ) + weapon_team_mask |= getteammask( parent_team ); + } + + if ( issubstr( weaponname, "napalmblob" ) || issubstr( weaponname, "gl_" ) ) + { + pixendevent(); + return; + } + + timeout = 0; + + if ( weaponname == "tabun_gas_mp" ) + timeout = 7.0; + + if ( isdefined( grenade.origin ) ) + { + if ( weaponname == "claymore_mp" || weaponname == "bouncingbetty_mp" ) + addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, grenade.origin, level.spawnsystem.claymore_influencer_radius, level.spawnsystem.claymore_influencer_score, weapon_team_mask, "claymore,r,s", get_score_curve_index( level.spawnsystem.claymore_influencer_score_curve ), timeout, grenade ); + else + addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, grenade.origin, level.spawnsystem.grenade_influencer_radius, level.spawnsystem.grenade_influencer_score, weapon_team_mask, "grenade,r,s", get_score_curve_index( level.spawnsystem.grenade_influencer_score_curve ), timeout, grenade ); + } + + pixendevent(); +} + +create_napalm_fire_influencers( point, direction, parent_team, duration ) +{ + timeout = duration; + weapon_team_mask = 0; + offset = vectorscale( anglestoforward( direction ), 1100 ); + addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point + 2.0 * offset, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); + addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point + offset, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); + addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); + addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point - offset, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); +} + +create_auto_turret_influencer( point, parent_team, angles ) +{ + if ( !level.teambased ) + weapon_team_mask = level.spawnsystem.ispawn_teammask_free; + else + weapon_team_mask = getotherteamsmask( parent_team ); + + projected_point = point + vectorscale( anglestoforward( angles ), level.spawnsystem.auto_turret_influencer_radius * 0.7 ); + influencerid = addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, projected_point, level.spawnsystem.auto_turret_influencer_radius, level.spawnsystem.auto_turret_influencer_score, weapon_team_mask, "auto_turret,r,s", get_score_curve_index( level.spawnsystem.auto_turret_influencer_score_curve ) ); + return influencerid; +} + +create_dog_influencers() +{ + if ( !level.teambased ) + dog_enemy_team_mask = level.spawnsystem.ispawn_teammask_free; + else + dog_enemy_team_mask = getotherteamsmask( self.aiteam ); + + addsphereinfluencer( level.spawnsystem.einfluencer_type_dog, self.origin, level.spawnsystem.dog_influencer_radius, level.spawnsystem.dog_influencer_score, dog_enemy_team_mask, "dog,r,s", get_score_curve_index( level.spawnsystem.dog_influencer_score_curve ), 0, self ); +} + +create_helicopter_influencers( parent_team ) +{ + if ( !level.teambased ) + team_mask = level.spawnsystem.ispawn_teammask_free; + else + team_mask = getotherteamsmask( parent_team ); + + self.influencer_helicopter_cylinder = addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, ( 0, 0, 0 ), ( 0, 0, 0 ), level.spawnsystem.helicopter_influencer_radius, level.spawnsystem.helicopter_influencer_length, level.spawnsystem.helicopter_influencer_score, team_mask, "helicopter,r,s", get_score_curve_index( level.spawnsystem.helicopter_influencer_score_curve ), 0, self ); +} + +remove_helicopter_influencers() +{ + if ( isdefined( self.influencer_helicopter_cylinder ) ) + removeinfluencer( self.influencer_helicopter_cylinder ); + + self.influencer_helicopter_cylinder = undefined; +} + +create_tvmissile_influencers( parent_team ) +{ + if ( !level.teambased || is_hardcore() ) + team_mask = level.spawnsystem.ispawn_teammask_free; + else + team_mask = getotherteamsmask( parent_team ); + + self.influencer_tvmissile_cylinder = addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, ( 0, 0, 0 ), ( 0, 0, 0 ), level.spawnsystem.tvmissile_influencer_radius, level.spawnsystem.tvmissile_influencer_length, level.spawnsystem.tvmissile_influencer_score, team_mask, "tvmissile,r,s", get_score_curve_index( level.spawnsystem.tvmissile_influencer_score_curve ), 0, self ); +} + +remove_tvmissile_influencers() +{ + if ( isdefined( self.influencer_tvmissile_cylinder ) ) + removeinfluencer( self.influencer_tvmissile_cylinder ); + + self.influencer_tvmissile_cylinder = undefined; +} + +create_artillery_influencers( point, radius ) +{ + weapon_team_mask = 0; + + if ( radius < 0 ) + thisradius = level.spawnsystem.artillery_influencer_radius; + else + thisradius = radius; + + return addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, point + vectorscale( ( 0, 0, -1 ), 2000.0 ), ( 1, 0, 0 ), ( 0, 0, 1 ), thisradius, 5000, level.spawnsystem.artillery_influencer_score, weapon_team_mask, "artillery,s,r", get_score_curve_index( level.spawnsystem.artillery_influencer_score_curve ), 7 ); +} + +create_vehicle_influencers() +{ + weapon_team_mask = 0; + vehicleradius = 144; + cylinderlength = level.spawnsystem.vehicle_influencer_lead_seconds; + up = ( 0, 0, 1 ); + forward = ( 1, 0, 0 ); + cylinder_forward = up; + cylinder_up = forward; + return addcylinderinfluencer( level.spawnsystem.einfluencer_type_vehicle, self.origin, cylinder_forward, cylinder_up, vehicleradius, cylinderlength, level.spawnsystem.vehicle_influencer_score, weapon_team_mask, "vehicle,s", get_score_curve_index( level.spawnsystem.vehicle_influencer_score_curve ), 0, self ); +} + +create_rcbomb_influencers( team ) +{ + if ( !level.teambased ) + other_team_mask = level.spawnsystem.ispawn_teammask_free; + else + other_team_mask = getotherteamsmask( team ); + + return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.rcbomb_influencer_radius, level.spawnsystem.rcbomb_influencer_score, other_team_mask, "rcbomb,r,s", get_score_curve_index( level.spawnsystem.rcbomb_influencer_score_curve ), 0, self ); +} + +create_qrdrone_influencers( team ) +{ + if ( !level.teambased ) + other_team_mask = level.spawnsystem.ispawn_teammask_free; + else + other_team_mask = getotherteamsmask( team ); + + self.influencer_qrdrone_cylinder = addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, ( 0, 0, 0 ), ( 0, 0, 0 ), level.spawnsystem.qrdrone_cylinder_influencer_radius, level.spawnsystem.qrdrone_cylinder_influencer_length, level.spawnsystem.qrdrone_cylinder_influencer_score, other_team_mask, "qrdrone_cyl,r,s", get_score_curve_index( level.spawnsystem.qrdrone_cylinder_influencer_score_curve ), 0, self ); + return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.qrdrone_influencer_radius, level.spawnsystem.qrdrone_influencer_score, other_team_mask, "qrdrone,r,s", get_score_curve_index( level.spawnsystem.qrdrone_influencer_score_curve ), 0, self ); +} + +create_aitank_influencers( team ) +{ + if ( !level.teambased ) + other_team_mask = level.spawnsystem.ispawn_teammask_free; + else + other_team_mask = getotherteamsmask( team ); + + return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.aitank_influencer_radius, level.spawnsystem.aitank_influencer_score, other_team_mask, "aitank,r,s", get_score_curve_index( level.spawnsystem.aitank_influencer_score_curve ), 0, self ); +} + +create_pegasus_influencer( origin, team ) +{ + if ( !level.teambased ) + other_team_mask = level.spawnsystem.ispawn_teammask_free; + else + other_team_mask = getotherteamsmask( team ); + + return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, origin, level.spawnsystem.pegasus_influencer_radius, level.spawnsystem.pegasus_influencer_score, other_team_mask, "pegasus,r,s", get_score_curve_index( level.spawnsystem.pegasus_influencer_score_curve ), 0 ); +} + +create_map_placed_influencers() +{ + staticinfluencerents = getentarray( "mp_uspawn_influencer", "classname" ); + + for ( i = 0; i < staticinfluencerents.size; i++ ) + { + staticinfluencerent = staticinfluencerents[i]; + + if ( isdefined( staticinfluencerent.script_gameobjectname ) && staticinfluencerent.script_gameobjectname == "twar" ) + continue; + + create_map_placed_influencer( staticinfluencerent ); + } +} + +create_map_placed_influencer( influencer_entity, optional_score_override ) +{ + influencer_id = -1; + + if ( isdefined( influencer_entity.script_shape ) && isdefined( influencer_entity.script_score ) && isdefined( influencer_entity.script_score_curve ) ) + { + switch ( influencer_entity.script_shape ) + { + case "sphere": + if ( isdefined( influencer_entity.radius ) ) + { + if ( isdefined( optional_score_override ) ) + score = optional_score_override; + else + score = influencer_entity.script_score; + + influencer_id = addsphereinfluencer( level.spawnsystem.einfluencer_type_game_mode, influencer_entity.origin, influencer_entity.radius, score, getteammask( influencer_entity.script_team ), "*map_defined", get_score_curve_index( influencer_entity.script_score_curve ) ); + } + else + { +/# + assertmsg( "Radiant-placed sphere spawn influencers require 'radius' parameter" ); +#/ + } + + break; + case "cylinder": + if ( isdefined( influencer_entity.radius ) && isdefined( influencer_entity.height ) ) + { + if ( isdefined( optional_score_override ) ) + score = optional_score_override; + else + score = influencer_entity.script_score; + + influencer_id = addcylinderinfluencer( level.spawnsystem.einfluencer_type_game_mode, influencer_entity.origin, anglestoforward( influencer_entity.angles ), anglestoup( influencer_entity.angles ), influencer_entity.radius, influencer_entity.height, score, getteammask( influencer_entity.script_team ), "*map_defined", get_score_curve_index( influencer_entity.script_score_curve ) ); + } + else + { +/# + assertmsg( "Radiant-placed cylinder spawn influencers require 'radius' and 'height' parameters" ); +#/ + } + + break; + default: +/# + assertmsg( "Unsupported script_shape value (\"" + influencer_entity.script_shape + "\") for unified spawning system static influencer. Supported shapes are \"cylinder\" and \"sphere\"." ); +#/ + break; + } + } + else + { +/# + assertmsg( "Radiant-placed spawn influencers require 'script_shape', 'script_score' and 'script_score_curve' parameters" ); +#/ + } + + return influencer_id; +} + +create_enemy_spawned_influencers( origin, team ) +{ + if ( !level.teambased ) + other_team_mask = level.spawnsystem.ispawn_teammask_free; + else + other_team_mask = getotherteamsmask( team ); + + return addsphereinfluencer( level.spawnsystem.einfluencer_type_enemy_spawned, origin, level.spawnsystem.enemy_spawned_influencer_radius, level.spawnsystem.enemy_spawned_influencer_score, other_team_mask, "enemy_spawned,r,s", get_score_curve_index( level.spawnsystem.enemy_spawned_influencer_score_curve ), 7 ); +} + +updateallspawnpoints() +{ + foreach ( team in level.teams ) + gatherspawnentities( team ); + + clearspawnpoints(); + + if ( level.teambased ) + { + foreach ( team in level.teams ) + addspawnpoints( team, level.unified_spawn_points[team].a ); + } + else + { + foreach ( team in level.teams ) + addspawnpoints( "free", level.unified_spawn_points[team].a ); + } + + remove_unused_spawn_entities(); +} + +initialize_player_spawning_dvars() +{ +/# + reset_dvars = 1; + + while ( true ) + { + get_player_spawning_dvars( reset_dvars ); + reset_dvars = 0; + wait 2; + } +#/ +} + +get_player_spawning_dvars( reset_dvars ) +{ + k_player_height = get_player_height(); + player_height_times_10 = "" + 10.0 * k_player_height; + ss = level.spawnsystem; + player_influencer_radius = 15.0 * k_player_height; + player_influencer_score = 150.0; + dog_influencer_radius = 10.0 * k_player_height; + dog_influencer_score = 150.0; + ss.script_based_influencer_system = set_dvar_int_if_unset( "scr_script_based_influencer_system", "0", reset_dvars ); + ss.randomness_range = set_dvar_float_if_unset( "scr_spawn_randomness_range", "10", reset_dvars ); + ss.objective_facing_bonus = set_dvar_float_if_unset( "scr_spawn_objective_facing_bonus", "50", reset_dvars ); + ss.friend_weak_influencer_score = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_score", "10", reset_dvars ); + ss.friend_weak_influencer_score_curve = set_dvar_if_unset( "scr_spawn_friend_weak_influencer_score_curve", "steep", reset_dvars ); + ss.friend_weak_influencer_radius = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_radius", player_height_times_10, reset_dvars ); + ss.enemy_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_score", "-150", reset_dvars ); + ss.enemy_influencer_score_curve = set_dvar_if_unset( "scr_spawn_enemy_influencer_score_curve", "steep", reset_dvars ); + ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2600", reset_dvars ); + ss.dead_friend_influencer_timeout_seconds = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_timeout_seconds", "15", reset_dvars ); + ss.dead_friend_influencer_count = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_count", "7", reset_dvars ); + ss.dead_friend_influencer_score = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_score", "-100", reset_dvars ); + ss.dead_friend_influencer_score_curve = set_dvar_if_unset( "scr_spawn_dead_friend_influencer_score_curve", "steep", reset_dvars ); + ss.dead_friend_influencer_radius = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_radius", player_height_times_10, reset_dvars ); + ss.vehicle_influencer_score = set_dvar_float_if_unset( "scr_spawn_vehicle_influencer_score", "-50", reset_dvars ); + ss.vehicle_influencer_score_curve = set_dvar_if_unset( "scr_spawn_vehicle_influencer_score_curve", "linear", reset_dvars ); + ss.vehicle_influencer_lead_seconds = set_dvar_float_if_unset( "scr_spawn_vehicle_influencer_lead_seconds", "3", reset_dvars ); + ss.dog_influencer_score = set_dvar_float_if_unset( "scr_spawn_dog_influencer_score", "-150", reset_dvars ); + ss.dog_influencer_score_curve = set_dvar_if_unset( "scr_spawn_dog_influencer_score_curve", "steep", reset_dvars ); + ss.dog_influencer_radius = set_dvar_float_if_unset( "scr_spawn_dog_influencer_radius", "" + 15.0 * k_player_height, reset_dvars ); + ss.artillery_influencer_score = set_dvar_float_if_unset( "scr_spawn_artillery_influencer_score", "-600", reset_dvars ); + ss.artillery_influencer_score_curve = set_dvar_if_unset( "scr_spawn_artillery_influencer_score_curve", "linear", reset_dvars ); + ss.artillery_influencer_radius = set_dvar_float_if_unset( "scr_spawn_artillery_influencer_radius", "1200", reset_dvars ); + ss.grenade_influencer_score = set_dvar_float_if_unset( "scr_spawn_grenade_influencer_score", "-300", reset_dvars ); + ss.grenade_influencer_score_curve = set_dvar_if_unset( "scr_spawn_grenade_influencer_score_curve", "linear", reset_dvars ); + ss.grenade_influencer_radius = set_dvar_float_if_unset( "scr_spawn_grenade_influencer_radius", "" + 8.0 * k_player_height, reset_dvars ); + ss.grenade_endpoint_influencer_score = set_dvar_float_if_unset( "scr_spawn_grenade_endpoint_influencer_score", "-300", reset_dvars ); + ss.grenade_endpoint_influencer_score_curve = set_dvar_if_unset( "scr_spawn_grenade_endpoint_influencer_score_curve", "linear", reset_dvars ); + ss.grenade_endpoint_influencer_radius = set_dvar_float_if_unset( "scr_spawn_grenade_endpoint_influencer_radius", "" + 8.0 * k_player_height, reset_dvars ); + ss.claymore_influencer_score = set_dvar_float_if_unset( "scr_spawn_claymore_influencer_score", "-150", reset_dvars ); + ss.claymore_influencer_score_curve = set_dvar_if_unset( "scr_spawn_claymore_influencer_score_curve", "steep", reset_dvars ); + ss.claymore_influencer_radius = set_dvar_float_if_unset( "scr_spawn_claymore_influencer_radius", "" + 9.0 * k_player_height, reset_dvars ); + ss.napalm_influencer_score = set_dvar_float_if_unset( "scr_spawn_napalm_influencer_score", "-500", reset_dvars ); + ss.napalm_influencer_score_curve = set_dvar_if_unset( "scr_spawn_napalm_influencer_score_curve", "linear", reset_dvars ); + ss.napalm_influencer_radius = set_dvar_float_if_unset( "scr_spawn_napalm_influencer_radius", "" + 750, reset_dvars ); + ss.auto_turret_influencer_score = set_dvar_float_if_unset( "scr_spawn_auto_turret_influencer_score", "-650", reset_dvars ); + ss.auto_turret_influencer_score_curve = set_dvar_if_unset( "scr_spawn_auto_turret_influencer_score_curve", "linear", reset_dvars ); + ss.auto_turret_influencer_radius = set_dvar_float_if_unset( "scr_spawn_auto_turret_influencer_radius", "" + 1200, reset_dvars ); + ss.rcbomb_influencer_score = set_dvar_float_if_unset( "scr_spawn_rcbomb_influencer_score", "-200", reset_dvars ); + ss.rcbomb_influencer_score_curve = set_dvar_if_unset( "scr_spawn_rcbomb_influencer_score_curve", "steep", reset_dvars ); + ss.rcbomb_influencer_radius = set_dvar_float_if_unset( "scr_spawn_rcbomb_influencer_radius", "" + 25.0 * k_player_height, reset_dvars ); + ss.qrdrone_influencer_score = set_dvar_float_if_unset( "scr_spawn_qrdrone_influencer_score", "-200", reset_dvars ); + ss.qrdrone_influencer_score_curve = set_dvar_if_unset( "scr_spawn_qrdrone_influencer_score_curve", "steep", reset_dvars ); + ss.qrdrone_influencer_radius = set_dvar_float_if_unset( "scr_spawn_qrdrone_influencer_radius", "" + 25.0 * k_player_height, reset_dvars ); + ss.qrdrone_cylinder_influencer_score = set_dvar_float_if_unset( "scr_spawn_qrdrone_cylinder_influencer_score", "-300", reset_dvars ); + ss.qrdrone_cylinder_influencer_score_curve = set_dvar_if_unset( "scr_spawn_qrdrone_cylinder_influencer_score_curve", "linear", reset_dvars ); + ss.qrdrone_cylinder_influencer_radius = set_dvar_float_if_unset( "scr_spawn_qrdrone_cylinder_influencer_radius", 1000, reset_dvars ); + ss.qrdrone_cylinder_influencer_length = set_dvar_float_if_unset( "scr_spawn_qrdrone_cylinder_influencer_length", 2000, reset_dvars ); + ss.aitank_influencer_score = set_dvar_float_if_unset( "scr_spawn_aitank_influencer_score", "-200", reset_dvars ); + ss.aitank_influencer_score_curve = set_dvar_if_unset( "scr_spawn_aitank_influencer_score_curve", "linear", reset_dvars ); + ss.aitank_influencer_radius = set_dvar_float_if_unset( "scr_spawn_aitank_influencer_radius", "" + 25.0 * k_player_height, reset_dvars ); + ss.enemy_spawned_influencer_score_curve = set_dvar_if_unset( "scr_spawn_enemy_spawned_influencer_score_curve", "constant", reset_dvars ); + + if ( level.teambased ) + { + ss.enemy_spawned_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_score", "-200", reset_dvars ); + ss.enemy_spawned_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_radius", "" + 1100, reset_dvars ); + } + else + { + ss.enemy_spawned_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_score", "-100", reset_dvars ); + ss.enemy_spawned_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_radius", "" + 400, reset_dvars ); + } + + ss.helicopter_influencer_score = set_dvar_float_if_unset( "scr_spawn_helicopter_influencer_score", "-500", reset_dvars ); + ss.helicopter_influencer_score_curve = set_dvar_if_unset( "scr_spawn_helicopter_influencer_score_curve", "linear", reset_dvars ); + ss.helicopter_influencer_radius = set_dvar_float_if_unset( "scr_spawn_helicopter_influencer_radius", "" + 2000, reset_dvars ); + ss.helicopter_influencer_length = set_dvar_float_if_unset( "scr_spawn_helicopter_influencer_length", "" + 3500, reset_dvars ); + ss.tvmissile_influencer_score = set_dvar_float_if_unset( "scr_spawn_tvmissile_influencer_score", "-400", reset_dvars ); + ss.tvmissile_influencer_score_curve = set_dvar_if_unset( "scr_spawn_tvmissile_influencer_score_curve", "linear", reset_dvars ); + ss.tvmissile_influencer_radius = set_dvar_float_if_unset( "scr_spawn_tvmissile_influencer_radius", "" + 2000, reset_dvars ); + ss.tvmissile_influencer_length = set_dvar_float_if_unset( "scr_spawn_tvmissile_influencer_length", "" + 3000, reset_dvars ); + ss.pegasus_influencer_score = set_dvar_float_if_unset( "scr_spawn_pegasus_influencer_score", "-250", reset_dvars ); + ss.pegasus_influencer_score_curve = set_dvar_if_unset( "scr_spawn_pegasus_influencer_score_curve", "linear", reset_dvars ); + ss.pegasus_influencer_radius = set_dvar_float_if_unset( "scr_spawn_pegasus_influencer_radius", "" + 20.0 * k_player_height, reset_dvars ); + + if ( !isdefined( ss.unifiedsideswitching ) ) + ss.unifiedsideswitching = 1; + + set_dvar_int_if_unset( "spawnsystem_allow_non_team_spawns", "0", reset_dvars ); + [[ level.gamemodespawndvars ]]( reset_dvars ); + + if ( isdefined( level.levelspawndvars ) ) + [[ level.levelspawndvars ]]( reset_dvars ); + + setspawnpointrandomvariation( ss.randomness_range ); +} + +level_use_unified_spawning( use ) +{ + +} + +onspawnplayer_unified( predictedspawn = 0 ) +{ +/# + if ( getdvarint( "scr_spawn_point_test_mode" ) != 0 ) + { + spawn_point = get_debug_spawnpoint( self ); + self spawn( spawn_point.origin, spawn_point.angles ); + return; + } +#/ + use_new_spawn_system = 0; + initial_spawn = 1; + + if ( isdefined( self.uspawn_already_spawned ) ) + initial_spawn = !self.uspawn_already_spawned; + + if ( level.usestartspawns ) + use_new_spawn_system = 0; + + if ( level.gametype == "sd" ) + use_new_spawn_system = 0; + + set_dvar_if_unset( "scr_spawn_force_unified", "0" ); + [[ level.onspawnplayer ]]( predictedspawn ); + + if ( !predictedspawn ) + self.uspawn_already_spawned = 1; +} + +getspawnpoint( player_entity, predictedspawn = 0 ) +{ + if ( level.teambased ) + { + point_team = player_entity.pers["team"]; + influencer_team = player_entity.pers["team"]; + } + else + { + point_team = "free"; + influencer_team = "free"; + } + + if ( level.teambased && isdefined( game["switchedsides"] ) && game["switchedsides"] && level.spawnsystem.unifiedsideswitching ) + point_team = getotherteam( point_team ); + + best_spawn_entity = get_best_spawnpoint( point_team, influencer_team, player_entity, predictedspawn ); + + if ( !predictedspawn ) + player_entity.last_spawn_origin = best_spawn_entity.origin; + + return best_spawn_entity; +} + +get_debug_spawnpoint( player ) +{ + if ( level.teambased ) + team = player.pers["team"]; + else + team = "free"; + + index = level.test_spawn_point_index; + level.test_spawn_point_index++; + + if ( team == "free" ) + { + spawn_counts = 0; + + foreach ( team in level.teams ) + spawn_counts += level.unified_spawn_points[team].a.size; + + if ( level.test_spawn_point_index >= spawn_counts ) + level.test_spawn_point_index = 0; + + count = 0; + + foreach ( team in level.teams ) + { + size = level.unified_spawn_points[team].a.size; + + if ( level.test_spawn_point_index < count + size ) + return level.unified_spawn_points[team].a[level.test_spawn_point_index - count]; + + count += size; + } + } + else + { + if ( level.test_spawn_point_index >= level.unified_spawn_points[team].a.size ) + level.test_spawn_point_index = 0; + + return level.unified_spawn_points[team].a[level.test_spawn_point_index]; + } +} + +get_best_spawnpoint( point_team, influencer_team, player, predictedspawn ) +{ + if ( level.teambased ) + vis_team_mask = getotherteamsmask( player.pers["team"] ); + else + vis_team_mask = level.spawnsystem.ispawn_teammask_free; + + scored_spawn_points = getsortedspawnpoints( point_team, influencer_team, vis_team_mask, player, predictedspawn ); + assert( scored_spawn_points.size > 0 ); + assert( scored_spawn_points.size == 1 ); + + if ( !predictedspawn ) + bbprint( "mpspawnpointsused", "reason %s x %d y %d z %d", "point used", scored_spawn_points[0].origin ); + + return scored_spawn_points[0]; +} + +gatherspawnentities( player_team ) +{ + if ( !isdefined( level.unified_spawn_points ) ) + level.unified_spawn_points = []; + else if ( isdefined( level.unified_spawn_points[player_team] ) ) + return level.unified_spawn_points[player_team]; + + spawn_entities_s = spawn_array_struct(); + spawn_entities_s.a = getentarray( "mp_uspawn_point", "classname" ); + + if ( !isdefined( spawn_entities_s.a ) ) + spawn_entities_s.a = []; + + legacy_spawn_points = maps\mp\gametypes_zm\_spawnlogic::getteamspawnpoints( player_team ); + + for ( legacy_spawn_index = 0; legacy_spawn_index < legacy_spawn_points.size; legacy_spawn_index++ ) + spawn_entities_s.a[spawn_entities_s.a.size] = legacy_spawn_points[legacy_spawn_index]; + + level.unified_spawn_points[player_team] = spawn_entities_s; + return spawn_entities_s; +} + +is_hardcore() +{ + return isdefined( level.hardcoremode ) && level.hardcoremode; +} + +teams_have_enmity( team1, team2 ) +{ + if ( !isdefined( team1 ) || !isdefined( team2 ) || level.gametype == "dm" ) + return 1; + + return team1 != "neutral" && team2 != "neutral" && team1 != team2; +} + +remove_unused_spawn_entities() +{ + spawn_entity_types = []; + spawn_entity_types[spawn_entity_types.size] = "mp_dm_spawn"; + spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn_allies_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn_axis_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_tdm_spawn"; + spawn_entity_types[spawn_entity_types.size] = "mp_ctf_spawn_allies_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_ctf_spawn_axis_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_ctf_spawn_allies"; + spawn_entity_types[spawn_entity_types.size] = "mp_ctf_spawn_axis"; + spawn_entity_types[spawn_entity_types.size] = "mp_dom_spawn_allies_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_dom_spawn_axis_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_dom_spawn"; + spawn_entity_types[spawn_entity_types.size] = "mp_sab_spawn_allies_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_sab_spawn_axis_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_sab_spawn_allies"; + spawn_entity_types[spawn_entity_types.size] = "mp_sab_spawn_axis"; + spawn_entity_types[spawn_entity_types.size] = "mp_sd_spawn_attacker"; + spawn_entity_types[spawn_entity_types.size] = "mp_sd_spawn_defender"; + spawn_entity_types[spawn_entity_types.size] = "mp_twar_spawn_axis_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_twar_spawn_allies_start"; + spawn_entity_types[spawn_entity_types.size] = "mp_twar_spawn"; + + for ( i = 0; i < spawn_entity_types.size; i++ ) + { + if ( spawn_point_class_name_being_used( spawn_entity_types[i] ) ) + continue; + + spawnpoints = maps\mp\gametypes_zm\_spawnlogic::getspawnpointarray( spawn_entity_types[i] ); + delete_all_spawns( spawnpoints ); + } +} + +delete_all_spawns( spawnpoints ) +{ + for ( i = 0; i < spawnpoints.size; i++ ) + spawnpoints[i] delete(); +} + +spawn_point_class_name_being_used( name ) +{ + if ( !isdefined( level.spawn_point_class_names ) ) + return false; + + for ( i = 0; i < level.spawn_point_class_names.size; i++ ) + { + if ( level.spawn_point_class_names[i] == name ) + return true; + } + + return false; +} + +codecallback_updatespawnpoints() +{ + foreach ( team in level.teams ) + maps\mp\gametypes_zm\_spawnlogic::rebuildspawnpoints( team ); + + level.unified_spawn_points = undefined; + updateallspawnpoints(); +} + +initialspawnprotection( specialtyname, spawnmonitorspeed ) +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( !isdefined( level.spawnprotectiontime ) || level.spawnprotectiontime == 0 ) + return; + + if ( specialtyname == "specialty_nottargetedbyairsupport" ) + { + self.specialty_nottargetedbyairsupport = 1; + wait( level.spawnprotectiontime ); + self.specialty_nottargetedbyairsupport = undefined; + } + else if ( !self hasperk( specialtyname ) ) + { + self setperk( specialtyname ); + wait( level.spawnprotectiontime ); + self unsetperk( specialtyname ); + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_spawnlogic.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_spawnlogic.gsc new file mode 100644 index 0000000..2fd8801 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_spawnlogic.gsc @@ -0,0 +1,2157 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_callbacksetup; +#include maps\mp\gametypes_zm\_gameobjects; +#include maps\mp\gametypes_zm\_spawnlogic; + +onplayerconnect() +{ + for (;;) + level waittill( "connected", player ); +} + +findboxcenter( mins, maxs ) +{ + center = ( 0, 0, 0 ); + center = maxs - mins; + center = ( center[0] / 2, center[1] / 2, center[2] / 2 ) + mins; + return center; +} + +expandmins( mins, point ) +{ + if ( mins[0] > point[0] ) + mins = ( point[0], mins[1], mins[2] ); + + if ( mins[1] > point[1] ) + mins = ( mins[0], point[1], mins[2] ); + + if ( mins[2] > point[2] ) + mins = ( mins[0], mins[1], point[2] ); + + return mins; +} + +expandmaxs( maxs, point ) +{ + if ( maxs[0] < point[0] ) + maxs = ( point[0], maxs[1], maxs[2] ); + + if ( maxs[1] < point[1] ) + maxs = ( maxs[0], point[1], maxs[2] ); + + if ( maxs[2] < point[2] ) + maxs = ( maxs[0], maxs[1], point[2] ); + + return maxs; +} + +addspawnpointsinternal( team, spawnpointname ) +{ + oldspawnpoints = []; + + if ( level.teamspawnpoints[team].size ) + oldspawnpoints = level.teamspawnpoints[team]; + + level.teamspawnpoints[team] = getspawnpointarray( spawnpointname ); + + if ( !isdefined( level.spawnpoints ) ) + level.spawnpoints = []; + + for ( index = 0; index < level.teamspawnpoints[team].size; index++ ) + { + spawnpoint = level.teamspawnpoints[team][index]; + + if ( !isdefined( spawnpoint.inited ) ) + { + spawnpoint spawnpointinit(); + level.spawnpoints[level.spawnpoints.size] = spawnpoint; + } + } + + for ( index = 0; index < oldspawnpoints.size; index++ ) + { + origin = oldspawnpoints[index].origin; + level.spawnmins = expandmins( level.spawnmins, origin ); + level.spawnmaxs = expandmaxs( level.spawnmaxs, origin ); + level.teamspawnpoints[team][level.teamspawnpoints[team].size] = oldspawnpoints[index]; + } + + if ( !level.teamspawnpoints[team].size ) + { +/# + println( "^1ERROR: No " + spawnpointname + " spawnpoints found in level!" ); +#/ + maps\mp\gametypes_zm\_callbacksetup::abortlevel(); + wait 1; + return; + } +} + +clearspawnpoints() +{ + foreach ( team in level.teams ) + level.teamspawnpoints[team] = []; + + level.spawnpoints = []; + level.unified_spawn_points = undefined; +} + +addspawnpoints( team, spawnpointname ) +{ + addspawnpointclassname( spawnpointname ); + addspawnpointteamclassname( team, spawnpointname ); + addspawnpointsinternal( team, spawnpointname ); +} + +rebuildspawnpoints( team ) +{ + level.teamspawnpoints[team] = []; + + for ( index = 0; index < level.spawn_point_team_class_names[team].size; index++ ) + addspawnpointsinternal( team, level.spawn_point_team_class_names[team][index] ); +} + +placespawnpoints( spawnpointname ) +{ + addspawnpointclassname( spawnpointname ); + spawnpoints = getspawnpointarray( spawnpointname ); +/# + if ( !isdefined( level.extraspawnpointsused ) ) + level.extraspawnpointsused = []; +#/ + if ( !spawnpoints.size ) + { +/# + println( "^1No " + spawnpointname + " spawnpoints found in level!" ); +#/ + maps\mp\gametypes_zm\_callbacksetup::abortlevel(); + wait 1; + return; + } + + for ( index = 0; index < spawnpoints.size; index++ ) + { + spawnpoints[index] spawnpointinit(); +/# + spawnpoints[index].fakeclassname = spawnpointname; + level.extraspawnpointsused[level.extraspawnpointsused.size] = spawnpoints[index]; +#/ + } +} + +dropspawnpoints( spawnpointname ) +{ + spawnpoints = getspawnpointarray( spawnpointname ); + + if ( !spawnpoints.size ) + { +/# + println( "^1No " + spawnpointname + " spawnpoints found in level!" ); +#/ + return; + } + + for ( index = 0; index < spawnpoints.size; index++ ) + spawnpoints[index] placespawnpoint(); +} + +addspawnpointclassname( spawnpointclassname ) +{ + if ( !isdefined( level.spawn_point_class_names ) ) + level.spawn_point_class_names = []; + + level.spawn_point_class_names[level.spawn_point_class_names.size] = spawnpointclassname; +} + +addspawnpointteamclassname( team, spawnpointclassname ) +{ + level.spawn_point_team_class_names[team][level.spawn_point_team_class_names[team].size] = spawnpointclassname; +} + +getspawnpointarray( classname ) +{ + spawnpoints = getentarray( classname, "classname" ); + + if ( !isdefined( level.extraspawnpoints ) || !isdefined( level.extraspawnpoints[classname] ) ) + return spawnpoints; + + for ( i = 0; i < level.extraspawnpoints[classname].size; i++ ) + spawnpoints[spawnpoints.size] = level.extraspawnpoints[classname][i]; + + return spawnpoints; +} + +spawnpointinit() +{ + spawnpoint = self; + origin = spawnpoint.origin; + + if ( !level.spawnminsmaxsprimed ) + { + level.spawnmins = origin; + level.spawnmaxs = origin; + level.spawnminsmaxsprimed = 1; + } + else + { + level.spawnmins = expandmins( level.spawnmins, origin ); + level.spawnmaxs = expandmaxs( level.spawnmaxs, origin ); + } + + spawnpoint placespawnpoint(); + spawnpoint.forward = anglestoforward( spawnpoint.angles ); + spawnpoint.sighttracepoint = spawnpoint.origin + vectorscale( ( 0, 0, 1 ), 50.0 ); + spawnpoint.inited = 1; +} + +getteamspawnpoints( team ) +{ + return level.teamspawnpoints[team]; +} + +getspawnpoint_final( spawnpoints, useweights ) +{ + bestspawnpoint = undefined; + + if ( !isdefined( spawnpoints ) || spawnpoints.size == 0 ) + return undefined; + + if ( !isdefined( useweights ) ) + useweights = 1; + + if ( useweights ) + { + bestspawnpoint = getbestweightedspawnpoint( spawnpoints ); + thread spawnweightdebug( spawnpoints ); + } + else + { + for ( i = 0; i < spawnpoints.size; i++ ) + { + if ( isdefined( self.lastspawnpoint ) && self.lastspawnpoint == spawnpoints[i] ) + continue; + + if ( positionwouldtelefrag( spawnpoints[i].origin ) ) + continue; + + bestspawnpoint = spawnpoints[i]; + break; + } + + if ( !isdefined( bestspawnpoint ) ) + { + if ( isdefined( self.lastspawnpoint ) && !positionwouldtelefrag( self.lastspawnpoint.origin ) ) + { + for ( i = 0; i < spawnpoints.size; i++ ) + { + if ( spawnpoints[i] == self.lastspawnpoint ) + { + bestspawnpoint = spawnpoints[i]; + break; + } + } + } + } + } + + if ( !isdefined( bestspawnpoint ) ) + { + if ( useweights ) + bestspawnpoint = spawnpoints[randomint( spawnpoints.size )]; + else + bestspawnpoint = spawnpoints[0]; + } + + self finalizespawnpointchoice( bestspawnpoint ); +/# + self storespawndata( spawnpoints, useweights, bestspawnpoint ); +#/ + return bestspawnpoint; +} + +finalizespawnpointchoice( spawnpoint ) +{ + time = gettime(); + self.lastspawnpoint = spawnpoint; + self.lastspawntime = time; + spawnpoint.lastspawnedplayer = self; + spawnpoint.lastspawntime = time; +} + +getbestweightedspawnpoint( spawnpoints ) +{ + maxsighttracedspawnpoints = 3; + + for ( try = 0; try <= maxsighttracedspawnpoints; try++ ) + { + bestspawnpoints = []; + bestweight = undefined; + bestspawnpoint = undefined; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + if ( !isdefined( bestweight ) || spawnpoints[i].weight > bestweight ) + { + if ( positionwouldtelefrag( spawnpoints[i].origin ) ) + continue; + + bestspawnpoints = []; + bestspawnpoints[0] = spawnpoints[i]; + bestweight = spawnpoints[i].weight; + continue; + } + + if ( spawnpoints[i].weight == bestweight ) + { + if ( positionwouldtelefrag( spawnpoints[i].origin ) ) + continue; + + bestspawnpoints[bestspawnpoints.size] = spawnpoints[i]; + } + } + + if ( bestspawnpoints.size == 0 ) + return undefined; + + bestspawnpoint = bestspawnpoints[randomint( bestspawnpoints.size )]; + + if ( try == maxsighttracedspawnpoints ) + return bestspawnpoint; + + if ( isdefined( bestspawnpoint.lastsighttracetime ) && bestspawnpoint.lastsighttracetime == gettime() ) + return bestspawnpoint; + + if ( !lastminutesighttraces( bestspawnpoint ) ) + return bestspawnpoint; + + penalty = getlospenalty(); +/# + if ( level.storespawndata || level.debugspawning ) + bestspawnpoint.spawndata[bestspawnpoint.spawndata.size] = "Last minute sight trace: -" + penalty; +#/ + bestspawnpoint.weight -= penalty; + bestspawnpoint.lastsighttracetime = gettime(); + } +} + +checkbad( spawnpoint ) +{ +/# + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( !isalive( player ) || player.sessionstate != "playing" ) + continue; + + if ( level.teambased && player.team == self.team ) + continue; + + losexists = bullettracepassed( player.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), spawnpoint.sighttracepoint, 0, undefined ); + + if ( losexists ) + thread badspawnline( spawnpoint.sighttracepoint, player.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), self.name, player.name ); + } +#/ +} + +badspawnline( start, end, name1, name2 ) +{ +/# + dist = distance( start, end ); + + for ( i = 0; i < 200; i++ ) + { + line( start, end, ( 1, 0, 0 ) ); + print3d( start, "Bad spawn! " + name1 + ", dist = " + dist ); + print3d( end, name2 ); + wait 0.05; + } +#/ +} + +storespawndata( spawnpoints, useweights, bestspawnpoint ) +{ +/# + if ( !isdefined( level.storespawndata ) || !level.storespawndata ) + return; + + level.storespawndata = getdvarint( "scr_recordspawndata" ); + + if ( !level.storespawndata ) + return; + + if ( !isdefined( level.spawnid ) ) + { + level.spawngameid = randomint( 100 ); + level.spawnid = 0; + } + + if ( bestspawnpoint.classname == "mp_global_intermission" ) + return; + + level.spawnid++; + file = openfile( "spawndata.txt", "append" ); + fprintfields( file, level.spawngameid + "." + level.spawnid + "," + spawnpoints.size + "," + self.name ); + + for ( i = 0; i < spawnpoints.size; i++ ) + { + str = vectostr( spawnpoints[i].origin ) + ","; + + if ( spawnpoints[i] == bestspawnpoint ) + str += "1,"; + else + str += "0,"; + + if ( !useweights ) + str += "0,"; + else + str += ( spawnpoints[i].weight + "," ); + + if ( !isdefined( spawnpoints[i].spawndata ) ) + spawnpoints[i].spawndata = []; + + if ( !isdefined( spawnpoints[i].sightchecks ) ) + spawnpoints[i].sightchecks = []; + + str += ( spawnpoints[i].spawndata.size + "," ); + + for ( j = 0; j < spawnpoints[i].spawndata.size; j++ ) + str += ( spawnpoints[i].spawndata[j] + "," ); + + str += ( spawnpoints[i].sightchecks.size + "," ); + + for ( j = 0; j < spawnpoints[i].sightchecks.size; j++ ) + str += ( spawnpoints[i].sightchecks[j].penalty + "," + vectostr( spawnpoints[i].origin ) + "," ); + + fprintfields( file, str ); + } + + obj = spawnstruct(); + getallalliedandenemyplayers( obj ); + numallies = 0; + numenemies = 0; + str = ""; + + for ( i = 0; i < obj.allies.size; i++ ) + { + if ( obj.allies[i] == self ) + continue; + + numallies++; + str += ( vectostr( obj.allies[i].origin ) + "," ); + } + + for ( i = 0; i < obj.enemies.size; i++ ) + { + numenemies++; + str += ( vectostr( obj.enemies[i].origin ) + "," ); + } + + str = numallies + "," + numenemies + "," + str; + fprintfields( file, str ); + otherdata = []; + + if ( isdefined( level.bombguy ) ) + { + index = otherdata.size; + otherdata[index] = spawnstruct(); + otherdata[index].origin = level.bombguy.origin + vectorscale( ( 0, 0, 1 ), 20.0 ); + otherdata[index].text = "Bomb holder"; + } + else if ( isdefined( level.bombpos ) ) + { + index = otherdata.size; + otherdata[index] = spawnstruct(); + otherdata[index].origin = level.bombpos; + otherdata[index].text = "Bomb"; + } + + if ( isdefined( level.flags ) ) + { + for ( i = 0; i < level.flags.size; i++ ) + { + index = otherdata.size; + otherdata[index] = spawnstruct(); + otherdata[index].origin = level.flags[i].origin; + otherdata[index].text = level.flags[i].useobj maps\mp\gametypes_zm\_gameobjects::getownerteam() + " flag"; + } + } + + str = otherdata.size + ","; + + for ( i = 0; i < otherdata.size; i++ ) + str += ( vectostr( otherdata[i].origin ) + "," + otherdata[i].text + "," ); + + fprintfields( file, str ); + closefile( file ); + thisspawnid = level.spawngameid + "." + level.spawnid; + + if ( isdefined( self.thisspawnid ) ) + { + + } + + self.thisspawnid = thisspawnid; +#/ +} + +readspawndata( desiredid, relativepos ) +{ +/# + file = openfile( "spawndata.txt", "read" ); + + if ( file < 0 ) + return; + + oldspawndata = level.curspawndata; + level.curspawndata = undefined; + prev = undefined; + prevthisplayer = undefined; + lookingfornextthisplayer = 0; + lookingfornext = 0; + + if ( isdefined( relativepos ) && !isdefined( oldspawndata ) ) + return; + + while ( true ) + { + if ( freadln( file ) <= 0 ) + break; + + data = spawnstruct(); + data.id = fgetarg( file, 0 ); + numspawns = int( fgetarg( file, 1 ) ); + + if ( numspawns > 256 ) + break; + + data.playername = fgetarg( file, 2 ); + data.spawnpoints = []; + data.friends = []; + data.enemies = []; + data.otherdata = []; + + for ( i = 0; i < numspawns; i++ ) + { + if ( freadln( file ) <= 0 ) + break; + + spawnpoint = spawnstruct(); + spawnpoint.origin = strtovec( fgetarg( file, 0 ) ); + spawnpoint.winner = int( fgetarg( file, 1 ) ); + spawnpoint.weight = int( fgetarg( file, 2 ) ); + spawnpoint.data = []; + spawnpoint.sightchecks = []; + + if ( i == 0 ) + { + data.minweight = spawnpoint.weight; + data.maxweight = spawnpoint.weight; + } + else + { + if ( spawnpoint.weight < data.minweight ) + data.minweight = spawnpoint.weight; + + if ( spawnpoint.weight > data.maxweight ) + data.maxweight = spawnpoint.weight; + } + + argnum = 4; + numdata = int( fgetarg( file, 3 ) ); + + if ( numdata > 256 ) + break; + + for ( j = 0; j < numdata; j++ ) + { + spawnpoint.data[spawnpoint.data.size] = fgetarg( file, argnum ); + argnum++; + } + + numsightchecks = int( fgetarg( file, argnum ) ); + argnum++; + + if ( numsightchecks > 256 ) + break; + + for ( j = 0; j < numsightchecks; j++ ) + { + index = spawnpoint.sightchecks.size; + spawnpoint.sightchecks[index] = spawnstruct(); + spawnpoint.sightchecks[index].penalty = int( fgetarg( file, argnum ) ); + argnum++; + spawnpoint.sightchecks[index].origin = strtovec( fgetarg( file, argnum ) ); + argnum++; + } + + data.spawnpoints[data.spawnpoints.size] = spawnpoint; + } + + if ( !isdefined( data.minweight ) ) + { + data.minweight = -1; + data.maxweight = 0; + } + + if ( data.minweight == data.maxweight ) + data.minweight -= 1; + + if ( freadln( file ) <= 0 ) + break; + + numfriends = int( fgetarg( file, 0 ) ); + numenemies = int( fgetarg( file, 1 ) ); + + if ( numfriends > 32 || numenemies > 32 ) + break; + + argnum = 2; + + for ( i = 0; i < numfriends; i++ ) + { + data.friends[data.friends.size] = strtovec( fgetarg( file, argnum ) ); + argnum++; + } + + for ( i = 0; i < numenemies; i++ ) + { + data.enemies[data.enemies.size] = strtovec( fgetarg( file, argnum ) ); + argnum++; + } + + if ( freadln( file ) <= 0 ) + break; + + numotherdata = int( fgetarg( file, 0 ) ); + argnum = 1; + + for ( i = 0; i < numotherdata; i++ ) + { + otherdata = spawnstruct(); + otherdata.origin = strtovec( fgetarg( file, argnum ) ); + argnum++; + otherdata.text = fgetarg( file, argnum ); + argnum++; + data.otherdata[data.otherdata.size] = otherdata; + } + + if ( isdefined( relativepos ) ) + { + if ( relativepos == "prevthisplayer" ) + { + if ( data.id == oldspawndata.id ) + { + level.curspawndata = prevthisplayer; + break; + } + } + else if ( relativepos == "prev" ) + { + if ( data.id == oldspawndata.id ) + { + level.curspawndata = prev; + break; + } + } + else if ( relativepos == "nextthisplayer" ) + { + if ( lookingfornextthisplayer ) + { + level.curspawndata = data; + break; + } + else if ( data.id == oldspawndata.id ) + lookingfornextthisplayer = 1; + } + else if ( relativepos == "next" ) + { + if ( lookingfornext ) + { + level.curspawndata = data; + break; + } + else if ( data.id == oldspawndata.id ) + lookingfornext = 1; + } + } + else if ( data.id == desiredid ) + { + level.curspawndata = data; + break; + } + + prev = data; + + if ( isdefined( oldspawndata ) && data.playername == oldspawndata.playername ) + prevthisplayer = data; + } + + closefile( file ); +#/ +} + +drawspawndata() +{ +/# + level notify( "drawing_spawn_data" ); + level endon( "drawing_spawn_data" ); + textoffset = vectorscale( ( 0, 0, -1 ), 12.0 ); + + while ( true ) + { + if ( !isdefined( level.curspawndata ) ) + { + wait 0.5; + continue; + } + + for ( i = 0; i < level.curspawndata.friends.size; i++ ) + print3d( level.curspawndata.friends[i], "=)", ( 0.5, 1, 0.5 ), 1, 5 ); + + for ( i = 0; i < level.curspawndata.enemies.size; i++ ) + print3d( level.curspawndata.enemies[i], "=(", ( 1, 0.5, 0.5 ), 1, 5 ); + + for ( i = 0; i < level.curspawndata.otherdata.size; i++ ) + print3d( level.curspawndata.otherdata[i].origin, level.curspawndata.otherdata[i].text, ( 0.5, 0.75, 1 ), 1, 2 ); + + for ( i = 0; i < level.curspawndata.spawnpoints.size; i++ ) + { + sp = level.curspawndata.spawnpoints[i]; + orig = sp.sighttracepoint; + + if ( sp.winner ) + { + print3d( orig, level.curspawndata.playername + " spawned here", ( 0.5, 0.5, 1 ), 1, 2 ); + orig += textoffset; + } + + amnt = ( sp.weight - level.curspawndata.minweight ) / ( level.curspawndata.maxweight - level.curspawndata.minweight ); + print3d( orig, "Weight: " + sp.weight, ( 1 - amnt, amnt, 0.5 ) ); + orig += textoffset; + + for ( j = 0; j < sp.data.size; j++ ) + { + print3d( orig, sp.data[j], ( 1, 1, 1 ) ); + orig += textoffset; + } + + for ( j = 0; j < sp.sightchecks.size; j++ ) + { + print3d( orig, "Sightchecks: -" + sp.sightchecks[j].penalty, ( 1, 0.5, 0.5 ) ); + orig += textoffset; + } + } + + wait 0.05; + } +#/ +} + +vectostr( vec ) +{ +/# + return int( vec[0] ) + "/" + int( vec[1] ) + "/" + int( vec[2] ); +#/ +} + +strtovec( str ) +{ +/# + parts = strtok( str, "/" ); + + if ( parts.size != 3 ) + return ( 0, 0, 0 ); + + return ( int( parts[0] ), int( parts[1] ), int( parts[2] ) ); +#/ +} + +getspawnpoint_random( spawnpoints ) +{ + if ( !isdefined( spawnpoints ) ) + return undefined; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + j = randomint( spawnpoints.size ); + spawnpoint = spawnpoints[i]; + spawnpoints[i] = spawnpoints[j]; + spawnpoints[j] = spawnpoint; + } + + return getspawnpoint_final( spawnpoints, 0 ); +} + +getallotherplayers() +{ + aliveplayers = []; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( !isdefined( level.players[i] ) ) + continue; + + player = level.players[i]; + + if ( player.sessionstate != "playing" || player == self ) + continue; + + if ( isdefined( level.customalivecheck ) ) + { + if ( ![[ level.customalivecheck ]]( player ) ) + continue; + } + + aliveplayers[aliveplayers.size] = player; + } + + return aliveplayers; +} + +getallalliedandenemyplayers( obj ) +{ + if ( level.teambased ) + { + assert( isdefined( level.teams[self.team] ) ); + obj.allies = []; + obj.enemies = []; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( !isdefined( level.players[i] ) ) + continue; + + player = level.players[i]; + + if ( player.sessionstate != "playing" || player == self ) + continue; + + if ( isdefined( level.customalivecheck ) ) + { + if ( ![[ level.customalivecheck ]]( player ) ) + continue; + } + + if ( player.team == self.team ) + { + obj.allies[obj.allies.size] = player; + continue; + } + + obj.enemies[obj.enemies.size] = player; + } + } + else + { + obj.allies = []; + obj.enemies = level.activeplayers; + } +} + +initweights( spawnpoints ) +{ + for ( i = 0; i < spawnpoints.size; i++ ) + spawnpoints[i].weight = 0; +/# + if ( level.storespawndata || level.debugspawning ) + { + for ( i = 0; i < spawnpoints.size; i++ ) + { + spawnpoints[i].spawndata = []; + spawnpoints[i].sightchecks = []; + } + } +#/ +} + +spawnpointupdate_zm( spawnpoint ) +{ + foreach ( team in level.teams ) + { + spawnpoint.distsum[team] = 0; + spawnpoint.enemydistsum[team] = 0; + } + + players = get_players(); + spawnpoint.numplayersatlastupdate = players.size; + + foreach ( player in players ) + { + if ( !isdefined( player ) ) + continue; + + if ( player.sessionstate != "playing" ) + continue; + + if ( isdefined( level.customalivecheck ) ) + { + if ( ![[ level.customalivecheck ]]( player ) ) + continue; + } + + dist = distance( spawnpoint.origin, player.origin ); + spawnpoint.distsum[player.team] += dist; + + foreach ( team in level.teams ) + { + if ( team != player.team ) + spawnpoint.enemydistsum[team] += dist; + } + } +} + +getspawnpoint_nearteam( spawnpoints, favoredspawnpoints, forceallydistanceweight, forceenemydistanceweight ) +{ + if ( !isdefined( spawnpoints ) ) + return undefined; +/# + if ( getdvar( "scr_spawn_randomly" ) == "" ) + setdvar( "scr_spawn_randomly", "0" ); + + if ( getdvar( "scr_spawn_randomly" ) == "1" ) + return getspawnpoint_random( spawnpoints ); +#/ + if ( getdvarint( "scr_spawnsimple" ) > 0 ) + return getspawnpoint_random( spawnpoints ); + + spawnlogic_begin(); + k_favored_spawn_point_bonus = 25000; + initweights( spawnpoints ); + obj = spawnstruct(); + getallalliedandenemyplayers( obj ); + numplayers = obj.allies.size + obj.enemies.size; + allieddistanceweight = 2; + + if ( isdefined( forceallydistanceweight ) ) + allieddistanceweight = forceallydistanceweight; + + enemydistanceweight = 1; + + if ( isdefined( forceenemydistanceweight ) ) + enemydistanceweight = forceenemydistanceweight; + + myteam = self.team; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + spawnpoint = spawnpoints[i]; + spawnpointupdate_zm( spawnpoint ); + + if ( !isdefined( spawnpoint.numplayersatlastupdate ) ) + spawnpoint.numplayersatlastupdate = 0; + + if ( spawnpoint.numplayersatlastupdate > 0 ) + { + allydistsum = spawnpoint.distsum[myteam]; + enemydistsum = spawnpoint.enemydistsum[myteam]; + spawnpoint.weight = ( enemydistanceweight * enemydistsum - allieddistanceweight * allydistsum ) / spawnpoint.numplayersatlastupdate; +/# + if ( level.storespawndata || level.debugspawning ) + spawnpoint.spawndata[spawnpoint.spawndata.size] = "Base weight: " + int( spawnpoint.weight ) + " = (" + enemydistanceweight + "*" + int( enemydistsum ) + " - " + allieddistanceweight + "*" + int( allydistsum ) + ") / " + spawnpoint.numplayersatlastupdate; +#/ + continue; + } + + spawnpoint.weight = 0; +/# + if ( level.storespawndata || level.debugspawning ) + spawnpoint.spawndata[spawnpoint.spawndata.size] = "Base weight: 0"; +#/ + } + + if ( isdefined( favoredspawnpoints ) ) + { + for ( i = 0; i < favoredspawnpoints.size; i++ ) + { + if ( isdefined( favoredspawnpoints[i].weight ) ) + { + favoredspawnpoints[i].weight += k_favored_spawn_point_bonus; + continue; + } + + favoredspawnpoints[i].weight = k_favored_spawn_point_bonus; + } + } + + avoidsamespawn( spawnpoints ); + avoidspawnreuse( spawnpoints, 1 ); + avoidweapondamage( spawnpoints ); + avoidvisibleenemies( spawnpoints, 1 ); + result = getspawnpoint_final( spawnpoints ); +/# + if ( getdvar( "scr_spawn_showbad" ) == "" ) + setdvar( "scr_spawn_showbad", "0" ); + + if ( getdvar( "scr_spawn_showbad" ) == "1" ) + checkbad( result ); +#/ + return result; +} + +getspawnpoint_dm( spawnpoints ) +{ + if ( !isdefined( spawnpoints ) ) + return undefined; + + spawnlogic_begin(); + initweights( spawnpoints ); + aliveplayers = getallotherplayers(); + idealdist = 1600; + baddist = 1200; + + if ( aliveplayers.size > 0 ) + { + for ( i = 0; i < spawnpoints.size; i++ ) + { + totaldistfromideal = 0; + nearbybadamount = 0; + + for ( j = 0; j < aliveplayers.size; j++ ) + { + dist = distance( spawnpoints[i].origin, aliveplayers[j].origin ); + + if ( dist < baddist ) + nearbybadamount += ( baddist - dist ) / baddist; + + distfromideal = abs( dist - idealdist ); + totaldistfromideal += distfromideal; + } + + avgdistfromideal = totaldistfromideal / aliveplayers.size; + welldistancedamount = ( idealdist - avgdistfromideal ) / idealdist; + spawnpoints[i].weight = welldistancedamount - nearbybadamount * 2 + randomfloat( 0.2 ); + } + } + + avoidsamespawn( spawnpoints ); + avoidspawnreuse( spawnpoints, 0 ); + avoidweapondamage( spawnpoints ); + avoidvisibleenemies( spawnpoints, 0 ); + return getspawnpoint_final( spawnpoints ); +} + +getspawnpoint_turned( spawnpoints, idealdist, baddist, idealdistteam, baddistteam ) +{ + if ( !isdefined( spawnpoints ) ) + return undefined; + + spawnlogic_begin(); + initweights( spawnpoints ); + aliveplayers = getallotherplayers(); + + if ( !isdefined( idealdist ) ) + idealdist = 1600; + + if ( !isdefined( idealdistteam ) ) + idealdistteam = 1200; + + if ( !isdefined( baddist ) ) + baddist = 1200; + + if ( !isdefined( baddistteam ) ) + baddistteam = 600; + + myteam = self.team; + + if ( aliveplayers.size > 0 ) + { + for ( i = 0; i < spawnpoints.size; i++ ) + { + totaldistfromideal = 0; + nearbybadamount = 0; + + for ( j = 0; j < aliveplayers.size; j++ ) + { + dist = distance( spawnpoints[i].origin, aliveplayers[j].origin ); + distfromideal = 0; + + if ( aliveplayers[j].team == myteam ) + { + if ( dist < baddistteam ) + nearbybadamount += ( baddistteam - dist ) / baddistteam; + + distfromideal = abs( dist - idealdistteam ); + } + else + { + if ( dist < baddist ) + nearbybadamount += ( baddist - dist ) / baddist; + + distfromideal = abs( dist - idealdist ); + } + + totaldistfromideal += distfromideal; + } + + avgdistfromideal = totaldistfromideal / aliveplayers.size; + welldistancedamount = ( idealdist - avgdistfromideal ) / idealdist; + spawnpoints[i].weight = welldistancedamount - nearbybadamount * 2 + randomfloat( 0.2 ); + } + } + + avoidsamespawn( spawnpoints ); + avoidspawnreuse( spawnpoints, 0 ); + avoidweapondamage( spawnpoints ); + avoidvisibleenemies( spawnpoints, 0 ); + return getspawnpoint_final( spawnpoints ); +} + +spawnlogic_begin() +{ +/# + level.storespawndata = getdvarint( "scr_recordspawndata" ); + level.debugspawning = getdvarint( "scr_spawnpointdebug" ) > 0; +#/ +} + +init() +{ +/# + if ( getdvar( "scr_recordspawndata" ) == "" ) + setdvar( "scr_recordspawndata", 0 ); + + level.storespawndata = getdvarint( "scr_recordspawndata" ); + + if ( getdvar( "scr_killbots" ) == "" ) + setdvar( "scr_killbots", 0 ); + + if ( getdvar( "scr_killbottimer" ) == "" ) + setdvar( "scr_killbottimer", 0.25 ); + + thread loopbotspawns(); +#/ + level.spawnlogic_deaths = []; + level.spawnlogic_spawnkills = []; + level.players = []; + level.grenades = []; + level.pipebombs = []; + level.spawnmins = ( 0, 0, 0 ); + level.spawnmaxs = ( 0, 0, 0 ); + level.spawnminsmaxsprimed = 0; + + if ( isdefined( level.safespawns ) ) + { + for ( i = 0; i < level.safespawns.size; i++ ) + level.safespawns[i] spawnpointinit(); + } + + if ( getdvar( "scr_spawn_enemyavoiddist" ) == "" ) + setdvar( "scr_spawn_enemyavoiddist", "800" ); + + if ( getdvar( "scr_spawn_enemyavoidweight" ) == "" ) + setdvar( "scr_spawn_enemyavoidweight", "0" ); +/# + if ( getdvar( "scr_spawnsimple" ) == "" ) + setdvar( "scr_spawnsimple", "0" ); + + if ( getdvar( "scr_spawnpointdebug" ) == "" ) + setdvar( "scr_spawnpointdebug", "0" ); + + if ( getdvarint( "scr_spawnpointdebug" ) > 0 ) + { + thread showdeathsdebug(); + thread updatedeathinfodebug(); + thread profiledebug(); + } + + if ( level.storespawndata ) + thread allowspawndatareading(); + + if ( getdvar( "scr_spawnprofile" ) == "" ) + setdvar( "scr_spawnprofile", "0" ); + + thread watchspawnprofile(); + thread spawngraphcheck(); +#/ +} + +watchspawnprofile() +{ +/# + while ( true ) + { + while ( true ) + { + if ( getdvarint( "scr_spawnprofile" ) > 0 ) + break; + + wait 0.05; + } + + thread spawnprofile(); + + while ( true ) + { + if ( getdvarint( "scr_spawnprofile" ) <= 0 ) + break; + + wait 0.05; + } + + level notify( "stop_spawn_profile" ); + } +#/ +} + +spawnprofile() +{ +/# + level endon( "stop_spawn_profile" ); + + while ( true ) + { + if ( level.players.size > 0 && level.spawnpoints.size > 0 ) + { + playernum = randomint( level.players.size ); + player = level.players[playernum]; + attempt = 1; + + while ( !isdefined( player ) && attempt < level.players.size ) + { + playernum = ( playernum + 1 ) % level.players.size; + attempt++; + player = level.players[playernum]; + } + + player getspawnpoint_nearteam( level.spawnpoints ); + } + + wait 0.05; + } +#/ +} + +spawngraphcheck() +{ +/# + while ( true ) + { + if ( getdvarint( _hash_C25B6B47 ) < 1 ) + { + wait 3; + continue; + } + + thread spawngraph(); + return; + } +#/ +} + +spawngraph() +{ +/# + w = 20; + h = 20; + weightscale = 0.1; + fakespawnpoints = []; + corners = getentarray( "minimap_corner", "targetname" ); + + if ( corners.size != 2 ) + { + println( "^1 can't spawn graph: no minimap corners" ); + return; + } + + min = corners[0].origin; + max = corners[0].origin; + + if ( corners[1].origin[0] > max[0] ) + max = ( corners[1].origin[0], max[1], max[2] ); + else + min = ( corners[1].origin[0], min[1], min[2] ); + + if ( corners[1].origin[1] > max[1] ) + max = ( max[0], corners[1].origin[1], max[2] ); + else + min = ( min[0], corners[1].origin[1], min[2] ); + + i = 0; + + for ( y = 0; y < h; y++ ) + { + yamnt = y / ( h - 1 ); + + for ( x = 0; x < w; x++ ) + { + xamnt = x / ( w - 1 ); + fakespawnpoints[i] = spawnstruct(); + fakespawnpoints[i].origin = ( min[0] * xamnt + max[0] * ( 1 - xamnt ), min[1] * yamnt + max[1] * ( 1 - yamnt ), min[2] ); + fakespawnpoints[i].angles = ( 0, 0, 0 ); + fakespawnpoints[i].forward = anglestoforward( fakespawnpoints[i].angles ); + fakespawnpoints[i].sighttracepoint = fakespawnpoints[i].origin; + i++; + } + } + + didweights = 0; + + while ( true ) + { + spawni = 0; + numiters = 5; + + for ( i = 0; i < numiters; i++ ) + { + if ( !level.players.size || !isdefined( level.players[0].team ) || level.players[0].team == "spectator" || !isdefined( level.players[0].class ) ) + break; + + endspawni = spawni + fakespawnpoints.size / numiters; + + if ( i == numiters - 1 ) + endspawni = fakespawnpoints.size; + + while ( spawni < endspawni ) + { + spawnpointupdate( fakespawnpoints[spawni] ); + spawni++; + } + + if ( didweights ) + level.players[0] drawspawngraph( fakespawnpoints, w, h, weightscale ); + + wait 0.05; + } + + if ( !level.players.size || !isdefined( level.players[0].team ) || level.players[0].team == "spectator" || !isdefined( level.players[0].class ) ) + { + wait 1; + continue; + } + + level.players[0] getspawnpoint_nearteam( fakespawnpoints ); + + for ( i = 0; i < fakespawnpoints.size; i++ ) + setupspawngraphpoint( fakespawnpoints[i], weightscale ); + + didweights = 1; + level.players[0] drawspawngraph( fakespawnpoints, w, h, weightscale ); + wait 0.05; + } +#/ +} + +drawspawngraph( fakespawnpoints, w, h, weightscale ) +{ +/# + i = 0; + + for ( y = 0; y < h; y++ ) + { + yamnt = y / ( h - 1 ); + + for ( x = 0; x < w; x++ ) + { + xamnt = x / ( w - 1 ); + + if ( y > 0 ) + spawngraphline( fakespawnpoints[i], fakespawnpoints[i - w], weightscale ); + + if ( x > 0 ) + spawngraphline( fakespawnpoints[i], fakespawnpoints[i - 1], weightscale ); + + i++; + } + } +#/ +} + +setupspawngraphpoint( s1, weightscale ) +{ +/# + s1.visible = 1; + + if ( s1.weight < -1000 / weightscale ) + s1.visible = 0; +#/ +} + +spawngraphline( s1, s2, weightscale ) +{ +/# + if ( !s1.visible || !s2.visible ) + return; + + p1 = s1.origin + ( 0, 0, s1.weight * weightscale + 100 ); + p2 = s2.origin + ( 0, 0, s2.weight * weightscale + 100 ); + line( p1, p2, ( 1, 1, 1 ) ); +#/ +} + +loopbotspawns() +{ +/# + while ( true ) + { + if ( getdvarint( "scr_killbots" ) < 1 ) + { + wait 3; + continue; + } + + if ( !isdefined( level.players ) ) + { + wait 0.05; + continue; + } + + bots = []; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( !isdefined( level.players[i] ) ) + continue; + + if ( level.players[i].sessionstate == "playing" && issubstr( level.players[i].name, "bot" ) ) + bots[bots.size] = level.players[i]; + } + + if ( bots.size > 0 ) + { + if ( getdvarint( "scr_killbots" ) == 1 ) + { + killer = bots[randomint( bots.size )]; + victim = bots[randomint( bots.size )]; + victim thread [[ level.callbackplayerdamage ]]( killer, killer, 1000, 0, "MOD_RIFLE_BULLET", "none", ( 0, 0, 0 ), ( 0, 0, 0 ), "none", 0, 0 ); + } + else + { + numkills = getdvarint( "scr_killbots" ); + lastvictim = undefined; + + for ( index = 0; index < numkills; index++ ) + { + killer = bots[randomint( bots.size )]; + + for ( victim = bots[randomint( bots.size )]; isdefined( lastvictim ) && victim == lastvictim; victim = bots[randomint( bots.size )] ) + { + + } + + victim thread [[ level.callbackplayerdamage ]]( killer, killer, 1000, 0, "MOD_RIFLE_BULLET", "none", ( 0, 0, 0 ), ( 0, 0, 0 ), "none", 0, 0 ); + lastvictim = victim; + } + } + } + + if ( getdvar( "scr_killbottimer" ) != "" ) + wait( getdvarfloat( "scr_killbottimer" ) ); + else + wait 0.05; + } +#/ +} + +allowspawndatareading() +{ +/# + setdvar( "scr_showspawnid", "" ); + prevval = getdvar( "scr_showspawnid" ); + prevrelval = getdvar( "scr_spawnidcycle" ); + readthistime = 0; + + while ( true ) + { + val = getdvar( "scr_showspawnid" ); + relval = undefined; + + if ( !isdefined( val ) || val == prevval ) + { + relval = getdvar( "scr_spawnidcycle" ); + + if ( isdefined( relval ) && relval != "" ) + setdvar( "scr_spawnidcycle", "" ); + else + { + wait 0.5; + continue; + } + } + + prevval = val; + readthistime = 0; + readspawndata( val, relval ); + + if ( !isdefined( level.curspawndata ) ) + println( "No spawn data to draw." ); + else + println( "Drawing spawn ID " + level.curspawndata.id ); + + thread drawspawndata(); + } +#/ +} + +showdeathsdebug() +{ +/# + while ( true ) + { + if ( getdvar( "scr_spawnpointdebug" ) == "0" ) + { + wait 3; + continue; + } + + time = gettime(); + + for ( i = 0; i < level.spawnlogic_deaths.size; i++ ) + { + if ( isdefined( level.spawnlogic_deaths[i].los ) ) + line( level.spawnlogic_deaths[i].org, level.spawnlogic_deaths[i].killorg, ( 1, 0, 0 ) ); + else + line( level.spawnlogic_deaths[i].org, level.spawnlogic_deaths[i].killorg, ( 1, 1, 1 ) ); + + killer = level.spawnlogic_deaths[i].killer; + + if ( isdefined( killer ) && isalive( killer ) ) + line( level.spawnlogic_deaths[i].killorg, killer.origin, ( 0.4, 0.4, 0.8 ) ); + } + + for ( p = 0; p < level.players.size; p++ ) + { + if ( !isdefined( level.players[p] ) ) + continue; + + if ( isdefined( level.players[p].spawnlogic_killdist ) ) + print3d( level.players[p].origin + vectorscale( ( 0, 0, 1 ), 64.0 ), level.players[p].spawnlogic_killdist, ( 1, 1, 1 ) ); + } + + oldspawnkills = level.spawnlogic_spawnkills; + level.spawnlogic_spawnkills = []; + + for ( i = 0; i < oldspawnkills.size; i++ ) + { + spawnkill = oldspawnkills[i]; + + if ( spawnkill.dierwasspawner ) + { + line( spawnkill.spawnpointorigin, spawnkill.dierorigin, ( 0.4, 0.5, 0.4 ) ); + line( spawnkill.dierorigin, spawnkill.killerorigin, ( 0, 1, 1 ) ); + print3d( spawnkill.dierorigin + vectorscale( ( 0, 0, 1 ), 32.0 ), "SPAWNKILLED!", ( 0, 1, 1 ) ); + } + else + { + line( spawnkill.spawnpointorigin, spawnkill.killerorigin, ( 0.4, 0.5, 0.4 ) ); + line( spawnkill.killerorigin, spawnkill.dierorigin, ( 0, 1, 1 ) ); + print3d( spawnkill.dierorigin + vectorscale( ( 0, 0, 1 ), 32.0 ), "SPAWNDIED!", ( 0, 1, 1 ) ); + } + + if ( time - spawnkill.time < 60000 ) + level.spawnlogic_spawnkills[level.spawnlogic_spawnkills.size] = oldspawnkills[i]; + } + + wait 0.05; + } +#/ +} + +updatedeathinfodebug() +{ + while ( true ) + { + if ( getdvar( "scr_spawnpointdebug" ) == "0" ) + { + wait 3; + continue; + } + + updatedeathinfo(); + wait 3; + } +} + +spawnweightdebug( spawnpoints ) +{ + level notify( "stop_spawn_weight_debug" ); + level endon( "stop_spawn_weight_debug" ); +/# + while ( true ) + { + if ( getdvar( "scr_spawnpointdebug" ) == "0" ) + { + wait 3; + continue; + } + + textoffset = vectorscale( ( 0, 0, -1 ), 12.0 ); + + for ( i = 0; i < spawnpoints.size; i++ ) + { + amnt = 1 * ( 1 - spawnpoints[i].weight / -100000 ); + + if ( amnt < 0 ) + amnt = 0; + + if ( amnt > 1 ) + amnt = 1; + + orig = spawnpoints[i].origin + vectorscale( ( 0, 0, 1 ), 80.0 ); + print3d( orig, int( spawnpoints[i].weight ), ( 1, amnt, 0.5 ) ); + orig += textoffset; + + if ( isdefined( spawnpoints[i].spawndata ) ) + { + for ( j = 0; j < spawnpoints[i].spawndata.size; j++ ) + { + print3d( orig, spawnpoints[i].spawndata[j], vectorscale( ( 1, 1, 1 ), 0.5 ) ); + orig += textoffset; + } + } + + if ( isdefined( spawnpoints[i].sightchecks ) ) + { + for ( j = 0; j < spawnpoints[i].sightchecks.size; j++ ) + { + if ( spawnpoints[i].sightchecks[j].penalty == 0 ) + continue; + + print3d( orig, "Sight to enemy: -" + spawnpoints[i].sightchecks[j].penalty, vectorscale( ( 1, 1, 1 ), 0.5 ) ); + orig += textoffset; + } + } + } + + wait 0.05; + } +#/ +} + +profiledebug() +{ + while ( true ) + { + if ( getdvar( _hash_6A99E750 ) != "1" ) + { + wait 3; + continue; + } + + for ( i = 0; i < level.spawnpoints.size; i++ ) + level.spawnpoints[i].weight = randomint( 10000 ); + + if ( level.players.size > 0 ) + level.players[randomint( level.players.size )] getspawnpoint_nearteam( level.spawnpoints ); + + wait 0.05; + } +} + +debugnearbyplayers( players, origin ) +{ +/# + if ( getdvar( "scr_spawnpointdebug" ) == "0" ) + return; + + starttime = gettime(); + + while ( true ) + { + for ( i = 0; i < players.size; i++ ) + line( players[i].origin, origin, ( 0.5, 1, 0.5 ) ); + + if ( gettime() - starttime > 5000 ) + return; + + wait 0.05; + } +#/ +} + +deathoccured( dier, killer ) +{ + +} + +checkforsimilardeaths( deathinfo ) +{ + for ( i = 0; i < level.spawnlogic_deaths.size; i++ ) + { + if ( level.spawnlogic_deaths[i].killer == deathinfo.killer ) + { + dist = distance( level.spawnlogic_deaths[i].org, deathinfo.org ); + + if ( dist > 200 ) + continue; + + dist = distance( level.spawnlogic_deaths[i].killorg, deathinfo.killorg ); + + if ( dist > 200 ) + continue; + + level.spawnlogic_deaths[i].remove = 1; + } + } +} + +updatedeathinfo() +{ + time = gettime(); + + for ( i = 0; i < level.spawnlogic_deaths.size; i++ ) + { + deathinfo = level.spawnlogic_deaths[i]; + + if ( time - deathinfo.time > 90000 || !isdefined( deathinfo.killer ) || !isalive( deathinfo.killer ) || !isdefined( level.teams[deathinfo.killer.team] ) || distance( deathinfo.killer.origin, deathinfo.killorg ) > 400 ) + level.spawnlogic_deaths[i].remove = 1; + } + + oldarray = level.spawnlogic_deaths; + level.spawnlogic_deaths = []; + start = 0; + + if ( oldarray.size - 1024 > 0 ) + start = oldarray.size - 1024; + + for ( i = start; i < oldarray.size; i++ ) + { + if ( !isdefined( oldarray[i].remove ) ) + level.spawnlogic_deaths[level.spawnlogic_deaths.size] = oldarray[i]; + } +} + +ispointvulnerable( playerorigin ) +{ + pos = self.origin + level.bettymodelcenteroffset; + playerpos = playerorigin + vectorscale( ( 0, 0, 1 ), 32.0 ); + distsqrd = distancesquared( pos, playerpos ); + forward = anglestoforward( self.angles ); + + if ( distsqrd < level.bettydetectionradius * level.bettydetectionradius ) + { + playerdir = vectornormalize( playerpos - pos ); + angle = acos( vectordot( playerdir, forward ) ); + + if ( angle < level.bettydetectionconeangle ) + return true; + } + + return false; +} + +avoidweapondamage( spawnpoints ) +{ + if ( getdvar( _hash_FB71FB7 ) == "0" ) + return; + + weapondamagepenalty = 100000; + + if ( getdvar( _hash_76B8F046 ) != "" && getdvar( _hash_76B8F046 ) != "0" ) + weapondamagepenalty = getdvarfloat( _hash_76B8F046 ); + + mingrenadedistsquared = 62500; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + for ( j = 0; j < level.grenades.size; j++ ) + { + if ( !isdefined( level.grenades[j] ) ) + continue; + + if ( distancesquared( spawnpoints[i].origin, level.grenades[j].origin ) < mingrenadedistsquared ) + { + spawnpoints[i].weight -= weapondamagepenalty; +/# + if ( level.storespawndata || level.debugspawning ) + spawnpoints[i].spawndata[spawnpoints[i].spawndata.size] = "Was near grenade: -" + int( weapondamagepenalty ); +#/ + } + } + } +} + +spawnperframeupdate() +{ + spawnpointindex = 0; + + while ( true ) + { + wait 0.05; + + if ( !isdefined( level.spawnpoints ) ) + return; + + spawnpointindex = ( spawnpointindex + 1 ) % level.spawnpoints.size; + spawnpoint = level.spawnpoints[spawnpointindex]; + spawnpointupdate( spawnpoint ); + } +} + +getnonteamsum( skip_team, sums ) +{ + value = 0; + + foreach ( team in level.teams ) + { + if ( team == skip_team ) + continue; + + value += sums[team]; + } + + return value; +} + +getnonteammindist( skip_team, mindists ) +{ + dist = 9999999; + + foreach ( team in level.teams ) + { + if ( team == skip_team ) + continue; + + if ( dist > mindists[team] ) + dist = mindists[team]; + } + + return dist; +} + +spawnpointupdate( spawnpoint ) +{ + if ( level.teambased ) + { + sights = []; + + foreach ( team in level.teams ) + { + spawnpoint.enemysights[team] = 0; + sights[team] = 0; + spawnpoint.nearbyplayers[team] = []; + } + } + else + { + spawnpoint.enemysights = 0; + spawnpoint.nearbyplayers["all"] = []; + } + + spawnpointdir = spawnpoint.forward; + debug = 0; +/# + debug = getdvarint( "scr_spawnpointdebug" ) > 0; +#/ + mindist = []; + distsum = []; + + if ( !level.teambased ) + mindist["all"] = 9999999; + + foreach ( team in level.teams ) + { + spawnpoint.distsum[team] = 0; + spawnpoint.enemydistsum[team] = 0; + spawnpoint.minenemydist[team] = 9999999; + mindist[team] = 9999999; + } + + spawnpoint.numplayersatlastupdate = 0; + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( player.sessionstate != "playing" ) + continue; + + diff = player.origin - spawnpoint.origin; + diff = ( diff[0], diff[1], 0 ); + dist = length( diff ); + team = "all"; + + if ( level.teambased ) + team = player.team; + + if ( dist < 1024 ) + spawnpoint.nearbyplayers[team][spawnpoint.nearbyplayers[team].size] = player; + + if ( dist < mindist[team] ) + mindist[team] = dist; + + distsum[team] += dist; + spawnpoint.numplayersatlastupdate++; + pdir = anglestoforward( player.angles ); + + if ( vectordot( spawnpointdir, diff ) < 0 && vectordot( pdir, diff ) > 0 ) + continue; + + losexists = bullettracepassed( player.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), spawnpoint.sighttracepoint, 0, undefined ); + spawnpoint.lastsighttracetime = gettime(); + + if ( losexists ) + { + if ( level.teambased ) + sights[player.team]++; + else + spawnpoint.enemysights++; +/# + if ( debug ) + line( player.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), spawnpoint.sighttracepoint, ( 0.5, 1, 0.5 ) ); +#/ + } + } + + if ( level.teambased ) + { + foreach ( team in level.teams ) + { + spawnpoint.enemysights[team] = getnonteamsum( team, sights ); + spawnpoint.minenemydist[team] = getnonteammindist( team, mindist ); + spawnpoint.distsum[team] = distsum[team]; + spawnpoint.enemydistsum[team] = getnonteamsum( team, distsum ); + } + } + else + { + spawnpoint.distsum["all"] = distsum["all"]; + spawnpoint.enemydistsum["all"] = distsum["all"]; + spawnpoint.minenemydist["all"] = mindist["all"]; + } +} + +getlospenalty() +{ + if ( getdvar( _hash_CACDB8AA ) != "" && getdvar( _hash_CACDB8AA ) != "0" ) + return getdvarfloat( _hash_CACDB8AA ); + + return 100000; +} + +lastminutesighttraces( spawnpoint ) +{ + if ( !isdefined( spawnpoint.nearbyplayers ) ) + return false; + + closest = undefined; + closestdistsq = undefined; + secondclosest = undefined; + secondclosestdistsq = undefined; + + foreach ( team in spawnpoint.nearbyplayers ) + { + if ( team == self.team ) + continue; + + for ( i = 0; i < spawnpoint.nearbyplayers[team].size; i++ ) + { + player = spawnpoint.nearbyplayers[team][i]; + + if ( !isdefined( player ) ) + continue; + + if ( player.sessionstate != "playing" ) + continue; + + if ( player == self ) + continue; + + distsq = distancesquared( spawnpoint.origin, player.origin ); + + if ( !isdefined( closest ) || distsq < closestdistsq ) + { + secondclosest = closest; + secondclosestdistsq = closestdistsq; + closest = player; + closestdistsq = distsq; + continue; + } + + if ( !isdefined( secondclosest ) || distsq < secondclosestdistsq ) + { + secondclosest = player; + secondclosestdistsq = distsq; + } + } + } + + if ( isdefined( closest ) ) + { + if ( bullettracepassed( closest.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), spawnpoint.sighttracepoint, 0, undefined ) ) + return true; + } + + if ( isdefined( secondclosest ) ) + { + if ( bullettracepassed( secondclosest.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), spawnpoint.sighttracepoint, 0, undefined ) ) + return true; + } + + return false; +} + +avoidvisibleenemies( spawnpoints, teambased ) +{ + if ( getdvar( _hash_FB71FB7 ) == "0" ) + return; + + lospenalty = getlospenalty(); + mindistteam = self.team; + + if ( teambased ) + { + for ( i = 0; i < spawnpoints.size; i++ ) + { + if ( !isdefined( spawnpoints[i].enemysights ) ) + continue; + + penalty = lospenalty * spawnpoints[i].enemysights[self.team]; + spawnpoints[i].weight -= penalty; +/# + if ( level.storespawndata || level.debugspawning ) + { + index = spawnpoints[i].sightchecks.size; + spawnpoints[i].sightchecks[index] = spawnstruct(); + spawnpoints[i].sightchecks[index].penalty = penalty; + } +#/ + } + } + else + { + for ( i = 0; i < spawnpoints.size; i++ ) + { + if ( !isdefined( spawnpoints[i].enemysights ) ) + continue; + + penalty = lospenalty * spawnpoints[i].enemysights; + spawnpoints[i].weight -= penalty; +/# + if ( level.storespawndata || level.debugspawning ) + { + index = spawnpoints[i].sightchecks.size; + spawnpoints[i].sightchecks[index] = spawnstruct(); + spawnpoints[i].sightchecks[index].penalty = penalty; + } +#/ + } + + mindistteam = "all"; + } + + avoidweight = getdvarfloat( "scr_spawn_enemyavoidweight" ); + + if ( avoidweight != 0 ) + { + nearbyenemyouterrange = getdvarfloat( "scr_spawn_enemyavoiddist" ); + nearbyenemyouterrangesq = nearbyenemyouterrange * nearbyenemyouterrange; + nearbyenemypenalty = 1500 * avoidweight; + nearbyenemyminorpenalty = 800 * avoidweight; + lastattackerorigin = vectorscale( ( -1, -1, -1 ), 99999.0 ); + lastdeathpos = vectorscale( ( -1, -1, -1 ), 99999.0 ); + + if ( isalive( self.lastattacker ) ) + lastattackerorigin = self.lastattacker.origin; + + if ( isdefined( self.lastdeathpos ) ) + lastdeathpos = self.lastdeathpos; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + mindist = spawnpoints[i].minenemydist[mindistteam]; + + if ( mindist < nearbyenemyouterrange * 2 ) + { + penalty = nearbyenemyminorpenalty * ( 1 - mindist / nearbyenemyouterrange * 2 ); + + if ( mindist < nearbyenemyouterrange ) + penalty += nearbyenemypenalty * ( 1 - mindist / nearbyenemyouterrange ); + + if ( penalty > 0 ) + { + spawnpoints[i].weight -= penalty; +/# + if ( level.storespawndata || level.debugspawning ) + spawnpoints[i].spawndata[spawnpoints[i].spawndata.size] = "Nearest enemy at " + int( spawnpoints[i].minenemydist[mindistteam] ) + " units: -" + int( penalty ); +#/ + } + } + } + } +} + +avoidspawnreuse( spawnpoints, teambased ) +{ + if ( getdvar( _hash_FB71FB7 ) == "0" ) + return; + + time = gettime(); + maxtime = 10000; + maxdistsq = 1048576; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + spawnpoint = spawnpoints[i]; + + if ( !isdefined( spawnpoint.lastspawnedplayer ) || !isdefined( spawnpoint.lastspawntime ) || !isalive( spawnpoint.lastspawnedplayer ) ) + continue; + + if ( spawnpoint.lastspawnedplayer == self ) + continue; + + if ( teambased && spawnpoint.lastspawnedplayer.team == self.team ) + continue; + + timepassed = time - spawnpoint.lastspawntime; + + if ( timepassed < maxtime ) + { + distsq = distancesquared( spawnpoint.lastspawnedplayer.origin, spawnpoint.origin ); + + if ( distsq < maxdistsq ) + { + worsen = 5000 * ( 1 - distsq / maxdistsq ) * ( 1 - timepassed / maxtime ); + spawnpoint.weight -= worsen; +/# + if ( level.storespawndata || level.debugspawning ) + spawnpoint.spawndata[spawnpoint.spawndata.size] = "Was recently used: -" + worsen; +#/ + } + else + spawnpoint.lastspawnedplayer = undefined; + + continue; + } + + spawnpoint.lastspawnedplayer = undefined; + } +} + +avoidsamespawn( spawnpoints ) +{ + if ( getdvar( _hash_FB71FB7 ) == "0" ) + return; + + if ( !isdefined( self.lastspawnpoint ) ) + return; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + if ( spawnpoints[i] == self.lastspawnpoint ) + { + spawnpoints[i].weight -= 50000; +/# + if ( level.storespawndata || level.debugspawning ) + spawnpoints[i].spawndata[spawnpoints[i].spawndata.size] = "Was last spawnpoint: -50000"; +#/ + break; + } + } +} + +getrandomintermissionpoint() +{ + spawnpoints = getentarray( "mp_global_intermission", "classname" ); + + if ( !spawnpoints.size ) + spawnpoints = getentarray( "info_player_start", "classname" ); + + assert( spawnpoints.size ); + spawnpoint = maps\mp\gametypes_zm\_spawnlogic::getspawnpoint_random( spawnpoints ); + return spawnpoint; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_spectating.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_spectating.gsc new file mode 100644 index 0000000..b311728 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_spectating.gsc @@ -0,0 +1,228 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +init() +{ + foreach ( team in level.teams ) + level.spectateoverride[team] = spawnstruct(); + + level thread onplayerconnect(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread onjoinedteam(); + player thread onjoinedspectators(); + player thread onplayerspawned(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self setspectatepermissions(); + } +} + +onjoinedteam() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "joined_team" ); + + self setspectatepermissionsformachine(); + } +} + +onjoinedspectators() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "joined_spectators" ); + + self setspectatepermissionsformachine(); + } +} + +updatespectatesettings() +{ + level endon( "game_ended" ); + + for ( index = 0; index < level.players.size; index++ ) + level.players[index] setspectatepermissions(); +} + +getsplitscreenteam() +{ + for ( index = 0; index < level.players.size; index++ ) + { + if ( !isdefined( level.players[index] ) ) + continue; + + if ( level.players[index] == self ) + continue; + + if ( !self isplayeronsamemachine( level.players[index] ) ) + continue; + + team = level.players[index].sessionteam; + + if ( team != "spectator" ) + return team; + } + + return self.sessionteam; +} + +otherlocalplayerstillalive() +{ + for ( index = 0; index < level.players.size; index++ ) + { + if ( !isdefined( level.players[index] ) ) + continue; + + if ( level.players[index] == self ) + continue; + + if ( !self isplayeronsamemachine( level.players[index] ) ) + continue; + + if ( isalive( level.players[index] ) ) + return true; + } + + return false; +} + +allowspectateallteams( allow ) +{ + foreach ( team in level.teams ) + self allowspectateteam( team, allow ); +} + +allowspectateallteamsexceptteam( skip_team, allow ) +{ + foreach ( team in level.teams ) + { + if ( team == skip_team ) + continue; + + self allowspectateteam( team, allow ); + } +} + +setspectatepermissions() +{ + team = self.sessionteam; + + if ( team == "spectator" ) + { + if ( self issplitscreen() && !level.splitscreen ) + team = getsplitscreenteam(); + + if ( team == "spectator" ) + { + self allowspectateallteams( 1 ); + self allowspectateteam( "freelook", 0 ); + self allowspectateteam( "none", 1 ); + self allowspectateteam( "localplayers", 1 ); + return; + } + } + + spectatetype = level.spectatetype; + + switch ( spectatetype ) + { + case 0: + self allowspectateallteams( 0 ); + self allowspectateteam( "freelook", 0 ); + self allowspectateteam( "none", 1 ); + self allowspectateteam( "localplayers", 0 ); + break; + case 3: + if ( self issplitscreen() && self otherlocalplayerstillalive() ) + { + self allowspectateallteams( 0 ); + self allowspectateteam( "none", 0 ); + self allowspectateteam( "freelook", 0 ); + self allowspectateteam( "localplayers", 1 ); + break; + } + case 1: + if ( !level.teambased ) + { + self allowspectateallteams( 1 ); + self allowspectateteam( "none", 1 ); + self allowspectateteam( "freelook", 0 ); + self allowspectateteam( "localplayers", 1 ); + } + else if ( isdefined( team ) && isdefined( level.teams[team] ) ) + { + self allowspectateteam( team, 1 ); + self allowspectateallteamsexceptteam( team, 0 ); + self allowspectateteam( "freelook", 0 ); + self allowspectateteam( "none", 0 ); + self allowspectateteam( "localplayers", 1 ); + } + else + { + self allowspectateallteams( 0 ); + self allowspectateteam( "freelook", 0 ); + self allowspectateteam( "none", 0 ); + self allowspectateteam( "localplayers", 1 ); + } + + break; + case 2: + self allowspectateallteams( 1 ); + self allowspectateteam( "freelook", 1 ); + self allowspectateteam( "none", 1 ); + self allowspectateteam( "localplayers", 1 ); + break; + } + + if ( isdefined( team ) && isdefined( level.teams[team] ) ) + { + if ( isdefined( level.spectateoverride[team].allowfreespectate ) ) + self allowspectateteam( "freelook", 1 ); + + if ( isdefined( level.spectateoverride[team].allowenemyspectate ) ) + self allowspectateallteamsexceptteam( team, 1 ); + } +} + +setspectatepermissionsformachine() +{ + self setspectatepermissions(); + + if ( !self issplitscreen() ) + return; + + for ( index = 0; index < level.players.size; index++ ) + { + if ( !isdefined( level.players[index] ) ) + continue; + + if ( level.players[index] == self ) + continue; + + if ( !self isplayeronsamemachine( level.players[index] ) ) + continue; + + level.players[index] setspectatepermissions(); + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_tweakables.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_tweakables.gsc new file mode 100644 index 0000000..b36df38 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_tweakables.gsc @@ -0,0 +1,378 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +gettweakabledvarvalue( category, name ) +{ + switch ( category ) + { + case "rule": + dvar = level.rules[name].dvar; + break; + case "game": + dvar = level.gametweaks[name].dvar; + break; + case "team": + dvar = level.teamtweaks[name].dvar; + break; + case "player": + dvar = level.playertweaks[name].dvar; + break; + case "class": + dvar = level.classtweaks[name].dvar; + break; + case "weapon": + dvar = level.weapontweaks[name].dvar; + break; + case "killstreak": + dvar = level.hardpointtweaks[name].dvar; + break; + case "hud": + dvar = level.hudtweaks[name].dvar; + break; + default: + dvar = undefined; + break; + } + + assert( isdefined( dvar ) ); + value = getdvarint( dvar ); + return value; +} + +gettweakabledvar( category, name ) +{ + switch ( category ) + { + case "rule": + value = level.rules[name].dvar; + break; + case "game": + value = level.gametweaks[name].dvar; + break; + case "team": + value = level.teamtweaks[name].dvar; + break; + case "player": + value = level.playertweaks[name].dvar; + break; + case "class": + value = level.classtweaks[name].dvar; + break; + case "weapon": + value = level.weapontweaks[name].dvar; + break; + case "killstreak": + value = level.hardpointtweaks[name].dvar; + break; + case "hud": + value = level.hudtweaks[name].dvar; + break; + default: + value = undefined; + break; + } + + assert( isdefined( value ) ); + return value; +} + +gettweakablevalue( category, name ) +{ + switch ( category ) + { + case "rule": + value = level.rules[name].value; + break; + case "game": + value = level.gametweaks[name].value; + break; + case "team": + value = level.teamtweaks[name].value; + break; + case "player": + value = level.playertweaks[name].value; + break; + case "class": + value = level.classtweaks[name].value; + break; + case "weapon": + value = level.weapontweaks[name].value; + break; + case "killstreak": + value = level.hardpointtweaks[name].value; + break; + case "hud": + value = level.hudtweaks[name].value; + break; + default: + value = undefined; + break; + } + + overridedvar = "scr_" + level.gametype + "_" + category + "_" + name; + + if ( getdvar( overridedvar ) != "" ) + return getdvarint( overridedvar ); + + assert( isdefined( value ) ); + return value; +} + +gettweakablelastvalue( category, name ) +{ + switch ( category ) + { + case "rule": + value = level.rules[name].lastvalue; + break; + case "game": + value = level.gametweaks[name].lastvalue; + break; + case "team": + value = level.teamtweaks[name].lastvalue; + break; + case "player": + value = level.playertweaks[name].lastvalue; + break; + case "class": + value = level.classtweaks[name].lastvalue; + break; + case "weapon": + value = level.weapontweaks[name].lastvalue; + break; + case "killstreak": + value = level.hardpointtweaks[name].lastvalue; + break; + case "hud": + value = level.hudtweaks[name].lastvalue; + break; + default: + value = undefined; + break; + } + + assert( isdefined( value ) ); + return value; +} + +settweakablevalue( category, name, value ) +{ + switch ( category ) + { + case "rule": + dvar = level.rules[name].dvar; + break; + case "game": + dvar = level.gametweaks[name].dvar; + break; + case "team": + dvar = level.teamtweaks[name].dvar; + break; + case "player": + dvar = level.playertweaks[name].dvar; + break; + case "class": + dvar = level.classtweaks[name].dvar; + break; + case "weapon": + dvar = level.weapontweaks[name].dvar; + break; + case "killstreak": + dvar = level.hardpointtweaks[name].dvar; + break; + case "hud": + dvar = level.hudtweaks[name].dvar; + break; + default: + dvar = undefined; + break; + } + + setdvar( dvar, value ); +} + +settweakablelastvalue( category, name, value ) +{ + switch ( category ) + { + case "rule": + level.rules[name].lastvalue = value; + break; + case "game": + level.gametweaks[name].lastvalue = value; + break; + case "team": + level.teamtweaks[name].lastvalue = value; + break; + case "player": + level.playertweaks[name].lastvalue = value; + break; + case "class": + level.classtweaks[name].lastvalue = value; + break; + case "weapon": + level.weapontweaks[name].lastvalue = value; + break; + case "killstreak": + level.hardpointtweaks[name].lastvalue = value; + break; + case "hud": + level.hudtweaks[name].lastvalue = value; + break; + default: + break; + } +} + +registertweakable( category, name, dvar, value ) +{ + if ( isstring( value ) ) + { + if ( getdvar( dvar ) == "" ) + setdvar( dvar, value ); + else + value = getdvar( dvar ); + } + else if ( getdvar( dvar ) == "" ) + setdvar( dvar, value ); + else + value = getdvarint( dvar ); + + switch ( category ) + { + case "rule": + if ( !isdefined( level.rules[name] ) ) + level.rules[name] = spawnstruct(); + + level.rules[name].value = value; + level.rules[name].lastvalue = value; + level.rules[name].dvar = dvar; + break; + case "game": + if ( !isdefined( level.gametweaks[name] ) ) + level.gametweaks[name] = spawnstruct(); + + level.gametweaks[name].value = value; + level.gametweaks[name].lastvalue = value; + level.gametweaks[name].dvar = dvar; + break; + case "team": + if ( !isdefined( level.teamtweaks[name] ) ) + level.teamtweaks[name] = spawnstruct(); + + level.teamtweaks[name].value = value; + level.teamtweaks[name].lastvalue = value; + level.teamtweaks[name].dvar = dvar; + break; + case "player": + if ( !isdefined( level.playertweaks[name] ) ) + level.playertweaks[name] = spawnstruct(); + + level.playertweaks[name].value = value; + level.playertweaks[name].lastvalue = value; + level.playertweaks[name].dvar = dvar; + break; + case "class": + if ( !isdefined( level.classtweaks[name] ) ) + level.classtweaks[name] = spawnstruct(); + + level.classtweaks[name].value = value; + level.classtweaks[name].lastvalue = value; + level.classtweaks[name].dvar = dvar; + break; + case "weapon": + if ( !isdefined( level.weapontweaks[name] ) ) + level.weapontweaks[name] = spawnstruct(); + + level.weapontweaks[name].value = value; + level.weapontweaks[name].lastvalue = value; + level.weapontweaks[name].dvar = dvar; + break; + case "killstreak": + if ( !isdefined( level.hardpointtweaks[name] ) ) + level.hardpointtweaks[name] = spawnstruct(); + + level.hardpointtweaks[name].value = value; + level.hardpointtweaks[name].lastvalue = value; + level.hardpointtweaks[name].dvar = dvar; + break; + case "hud": + if ( !isdefined( level.hudtweaks[name] ) ) + level.hudtweaks[name] = spawnstruct(); + + level.hudtweaks[name].value = value; + level.hudtweaks[name].lastvalue = value; + level.hudtweaks[name].dvar = dvar; + break; + } +} + +init() +{ + level.clienttweakables = []; + level.tweakablesinitialized = 1; + level.rules = []; + level.gametweaks = []; + level.teamtweaks = []; + level.playertweaks = []; + level.classtweaks = []; + level.weapontweaks = []; + level.hardpointtweaks = []; + level.hudtweaks = []; + registertweakable( "game", "arcadescoring", "scr_game_arcadescoring", 0 ); + registertweakable( "game", "difficulty", "scr_game_difficulty", 1 ); + registertweakable( "game", "pinups", "scr_game_pinups", 0 ); + registertweakable( "team", "teamkillerplaylistbanquantum", "scr_team_teamkillerplaylistbanquantum", 0 ); + registertweakable( "team", "teamkillerplaylistbanpenalty", "scr_team_teamkillerplaylistbanpenalty", 0 ); + registertweakable( "player", "allowrevive", "scr_player_allowrevive", 1 ); + registertweakable( "weapon", "allowfrag", "scr_weapon_allowfrags", 1 ); + registertweakable( "weapon", "allowsmoke", "scr_weapon_allowsmoke", 1 ); + registertweakable( "weapon", "allowflash", "scr_weapon_allowflash", 1 ); + registertweakable( "weapon", "allowc4", "scr_weapon_allowc4", 1 ); + registertweakable( "weapon", "allowsatchel", "scr_weapon_allowsatchel", 1 ); + registertweakable( "weapon", "allowbetty", "scr_weapon_allowbetty", 1 ); + registertweakable( "weapon", "allowrpgs", "scr_weapon_allowrpgs", 1 ); + registertweakable( "weapon", "allowmines", "scr_weapon_allowmines", 1 ); + registertweakable( "hud", "showobjicons", "ui_hud_showobjicons", 1 ); + setclienttweakable( "hud", "showobjicons" ); + registertweakable( "killstreak", "allowradar", "scr_hardpoint_allowradar", 1 ); + registertweakable( "killstreak", "allowradardirection", "scr_hardpoint_allowradardirection", 1 ); + registertweakable( "killstreak", "allowcounteruav", "scr_hardpoint_allowcounteruav", 1 ); + registertweakable( "killstreak", "allowdogs", "scr_hardpoint_allowdogs", 1 ); + registertweakable( "killstreak", "allowhelicopter_comlink", "scr_hardpoint_allowhelicopter_comlink", 1 ); + registertweakable( "killstreak", "allowrcbomb", "scr_hardpoint_allowrcbomb", 1 ); + registertweakable( "killstreak", "allowauto_turret", "scr_hardpoint_allowauto_turret", 1 ); + level thread updateuitweakables(); +} + +setclienttweakable( category, name ) +{ + level.clienttweakables[level.clienttweakables.size] = name; +} + +updateuitweakables() +{ + for (;;) + { + for ( index = 0; index < level.clienttweakables.size; index++ ) + { + clienttweakable = level.clienttweakables[index]; + curvalue = gettweakabledvarvalue( "hud", clienttweakable ); + lastvalue = gettweakablelastvalue( "hud", clienttweakable ); + + if ( curvalue != lastvalue ) + { + updateserverdvar( gettweakabledvar( "hud", clienttweakable ), curvalue ); + settweakablelastvalue( "hud", clienttweakable, curvalue ); + } + } + + wait 1.0; + } +} + +updateserverdvar( dvar, value ) +{ + makedvarserverinfo( dvar, value ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_weapon_utils.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_weapon_utils.gsc new file mode 100644 index 0000000..d4dd932 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_weapon_utils.gsc @@ -0,0 +1,111 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; + +isgrenadelauncherweapon( weapon ) +{ + if ( getsubstr( weapon, 0, 3 ) == "gl_" ) + return true; + + switch ( weapon ) + { + case "xm25_mp": + case "china_lake_mp": + return true; + default: + return false; + } +} + +isdumbrocketlauncherweapon( weapon ) +{ + switch ( weapon ) + { + case "rpg_mp": + case "m220_tow_mp": + return true; + default: + return false; + } +} + +isguidedrocketlauncherweapon( weapon ) +{ + switch ( weapon ) + { + case "smaw_mp": + case "m72_law_mp": + case "m202_flash_mp": + case "javelin_mp": + case "fhj18_mp": + return true; + default: + return false; + } +} + +isrocketlauncherweapon( weapon ) +{ + if ( isdumbrocketlauncherweapon( weapon ) ) + return true; + + if ( isguidedrocketlauncherweapon( weapon ) ) + return true; + + return false; +} + +islauncherweapon( weapon ) +{ + if ( isrocketlauncherweapon( weapon ) ) + return true; + + if ( isgrenadelauncherweapon( weapon ) ) + return true; + + return false; +} + +isreducedteamkillweapon( weapon ) +{ + switch ( weapon ) + { + case "planemortar_mp": + return true; + default: + return false; + } +} + +ishackweapon( weapon ) +{ + return 0; +} + +ispistol( weapon ) +{ + return isdefined( level.side_arm_array[weapon] ); +} + +isflashorstunweapon( weapon ) +{ + if ( isdefined( weapon ) ) + { + switch ( weapon ) + { + case "proximity_grenade_mp": + case "proximity_grenade_aoe_mp": + case "flash_grenade_mp": + case "concussion_grenade_mp": + return true; + } + } + + return false; +} + +isflashorstundamage( weapon, meansofdeath ) +{ + return isflashorstunweapon( weapon ) && ( meansofdeath == "MOD_GRENADE_SPLASH" || meansofdeath == "MOD_GAS" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_weaponobjects.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_weaponobjects.gsc new file mode 100644 index 0000000..55ead3e --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_weaponobjects.gsc @@ -0,0 +1,2199 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\_ballistic_knife; +#include maps\mp\_challenges; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\gametypes_zm\_globallogic_player; +#include maps\mp\gametypes_zm\_damagefeedback; +#include maps\mp\gametypes_zm\_globallogic_audio; + +init() +{ +/# + debug = weapons_get_dvar_int( "scr_weaponobject_debug", "0" ); +#/ + coneangle = weapons_get_dvar_int( "scr_weaponobject_coneangle", "70" ); + mindist = weapons_get_dvar_int( "scr_weaponobject_mindist", "20" ); + graceperiod = weapons_get_dvar( "scr_weaponobject_graceperiod", "0.6" ); + radius = weapons_get_dvar_int( "scr_weaponobject_radius", "192" ); + level thread onplayerconnect(); + level.watcherweapons = []; + level.watcherweapons = getwatcherweapons(); + level.watcherweaponnames = []; + level.watcherweaponnames = getwatchernames( level.watcherweapons ); + level.retrievableweapons = []; + level.retrievableweapons = getretrievableweapons(); + level.retrievableweaponnames = []; + level.retrievableweaponnames = getwatchernames( level.retrievableweapons ); + level.weaponobjects_headicon_offset = []; + level.weaponobjects_headicon_offset["default"] = vectorscale( ( 0, 0, 1 ), 20.0 ); + level.weaponobjectexplodethisframe = 0; + + if ( getdvar( "scr_deleteexplosivesonspawn" ) == "" ) + setdvar( "scr_deleteexplosivesonspawn", 1 ); + + level.deleteexplosivesonspawn = getdvarint( "scr_deleteexplosivesonspawn" ); + + if ( sessionmodeiszombiesgame() ) + return; + + precachestring( &"MP_DEFUSING_EXPLOSIVE" ); + level.claymorefxid = loadfx( "weapon/claymore/fx_claymore_laser" ); + level._equipment_spark_fx = loadfx( "weapon/grenade/fx_spark_disabled_weapon" ); + level._equipment_emp_destroy_fx = loadfx( "weapon/emp/fx_emp_explosion_equip" ); + level._equipment_explode_fx = loadfx( "explosions/fx_exp_equipment" ); + level._equipment_explode_fx_lg = loadfx( "explosions/fx_exp_equipment_lg" ); + level._effect["powerLight"] = loadfx( "weapon/crossbow/fx_trail_crossbow_blink_red_os" ); + setupretrievablehintstrings(); + level.weaponobjects_headicon_offset["acoustic_sensor_mp"] = vectorscale( ( 0, 0, 1 ), 25.0 ); + level.weaponobjects_headicon_offset["sensor_grenade_mp"] = vectorscale( ( 0, 0, 1 ), 25.0 ); + level.weaponobjects_headicon_offset["camera_spike_mp"] = vectorscale( ( 0, 0, 1 ), 35.0 ); + level.weaponobjects_headicon_offset["claymore_mp"] = vectorscale( ( 0, 0, 1 ), 20.0 ); + level.weaponobjects_headicon_offset["bouncingbetty_mp"] = vectorscale( ( 0, 0, 1 ), 20.0 ); + level.weaponobjects_headicon_offset["satchel_charge_mp"] = vectorscale( ( 0, 0, 1 ), 10.0 ); + level.weaponobjects_headicon_offset["scrambler_mp"] = vectorscale( ( 0, 0, 1 ), 20.0 ); + level.weaponobjects_headicon_offset["trophy_system_mp"] = vectorscale( ( 0, 0, 1 ), 20.0 ); + level.weaponobjects_hacker_trigger_width = 32; + level.weaponobjects_hacker_trigger_height = 32; +} + +getwatchernames( weapons ) +{ + names = []; + + foreach ( index, weapon in weapons ) + names[index] = getsubstr( weapon, 0, weapon.size - 3 ); + + return names; +} + +weapons_get_dvar_int( dvar, def ) +{ + return int( weapons_get_dvar( dvar, def ) ); +} + +weapons_get_dvar( dvar, def ) +{ + if ( getdvar( dvar ) != "" ) + return getdvarfloat( dvar ); + else + { + setdvar( dvar, def ); + return def; + } +} + +setupretrievablehintstrings() +{ + createretrievablehint( "hatchet", &"MP_HATCHET_PICKUP" ); + createretrievablehint( "claymore", &"MP_CLAYMORE_PICKUP" ); + createretrievablehint( "bouncingbetty", &"MP_BOUNCINGBETTY_PICKUP" ); + createretrievablehint( "trophy_system", &"MP_TROPHY_SYSTEM_PICKUP" ); + createretrievablehint( "acoustic_sensor", &"MP_ACOUSTIC_SENSOR_PICKUP" ); + createretrievablehint( "camera_spike", &"MP_CAMERA_SPIKE_PICKUP" ); + createretrievablehint( "satchel_charge", &"MP_SATCHEL_CHARGE_PICKUP" ); + createretrievablehint( "scrambler", &"MP_SCRAMBLER_PICKUP" ); + createdestroyhint( "trophy_system", &"MP_TROPHY_SYSTEM_DESTROY" ); + createdestroyhint( "sensor_grenade", &"MP_SENSOR_GRENADE_DESTROY" ); + createhackerhint( "claymore_mp", &"MP_CLAYMORE_HACKING" ); + createhackerhint( "bouncingbetty_mp", &"MP_BOUNCINGBETTY_HACKING" ); + createhackerhint( "trophy_system_mp", &"MP_TROPHY_SYSTEM_HACKING" ); + createhackerhint( "acoustic_sensor_mp", &"MP_ACOUSTIC_SENSOR_HACKING" ); + createhackerhint( "camera_spike_mp", &"MP_CAMERA_SPIKE_HACKING" ); + createhackerhint( "satchel_charge_mp", &"MP_SATCHEL_CHARGE_HACKING" ); + createhackerhint( "scrambler_mp", &"MP_SCRAMBLER_HACKING" ); +} + +onplayerconnect() +{ + if ( isdefined( level._weaponobjects_on_player_connect_override ) ) + { + level thread [[ level._weaponobjects_on_player_connect_override ]](); + return; + } + + for (;;) + { + level waittill( "connecting", player ); + + player.usedweapons = 0; + player.hits = 0; + player thread onplayerspawned(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + pixbeginevent( "onPlayerSpawned" ); + + if ( !isdefined( self.watchersinitialized ) ) + { + self createbasewatchers(); + self setupretrievablewatcher(); + self thread watchweaponobjectusage(); + self.watchersinitialized = 1; + } + + self resetwatchers(); + pixendevent(); + } +} + +resetwatchers() +{ + if ( !isdefined( self.weaponobjectwatcherarray ) ) + return undefined; + + team = self.team; + + foreach ( watcher in self.weaponobjectwatcherarray ) + resetweaponobjectwatcher( watcher, team ); +} + +createbasewatchers() +{ + foreach ( index, weapon in level.watcherweapons ) + self createweaponobjectwatcher( level.watcherweaponnames[index], weapon, self.team ); + + foreach ( index, weapon in level.retrievableweapons ) + self createweaponobjectwatcher( level.retrievableweaponnames[index], weapon, self.team ); +} + +setupretrievablewatcher() +{ + for ( i = 0; i < level.retrievableweapons.size; i++ ) + { + watcher = getweaponobjectwatcherbyweapon( level.retrievableweapons[i] ); + + if ( !isdefined( watcher.onspawnretrievetriggers ) ) + watcher.onspawnretrievetriggers = ::onspawnretrievableweaponobject; + + if ( !isdefined( watcher.ondestroyed ) ) + watcher.ondestroyed = ::ondestroyed; + + if ( !isdefined( watcher.pickup ) ) + watcher.pickup = ::pickup; + } +} + +createballisticknifewatcher() +{ + watcher = self createuseweaponobjectwatcher( "knife_ballistic", "knife_ballistic_mp", self.team ); + watcher.onspawn = maps\mp\_ballistic_knife::onspawn; + watcher.detonate = ::deleteent; + watcher.onspawnretrievetriggers = maps\mp\_ballistic_knife::onspawnretrievetrigger; + watcher.storedifferentobject = 1; +} + +createhatchetwatcher() +{ + watcher = self createuseweaponobjectwatcher( "hatchet", "hatchet_mp", self.team ); + watcher.detonate = ::deleteent; + watcher.onspawn = ::voidonspawn; + watcher.onspawnretrievetriggers = ::onspawnhatchettrigger; +} + +createtactinsertwatcher() +{ + watcher = self createuseweaponobjectwatcher( "tactical_insertion", "tactical_insertion_mp", self.team ); + watcher.playdestroyeddialog = 0; +} + +creatercbombwatcher() +{ + +} + +createqrdronewatcher() +{ + +} + +createplayerhelicopterwatcher() +{ + watcher = self createuseweaponobjectwatcher( "helicopter_player", "helicopter_player_mp", self.team ); + watcher.altdetonate = 1; + watcher.headicon = 0; +} + +createclaymorewatcher() +{ + watcher = self createproximityweaponobjectwatcher( "claymore", "claymore_mp", self.team ); + watcher.watchforfire = 1; + watcher.detonate = ::claymoredetonate; + watcher.activatesound = "wpn_claymore_alert"; + watcher.hackable = 1; + watcher.hackertoolradius = level.claymorehackertoolradius; + watcher.hackertooltimems = level.claymorehackertooltimems; + watcher.reconmodel = "t6_wpn_claymore_world_detect"; + watcher.ownergetsassist = 1; + detectionconeangle = weapons_get_dvar_int( "scr_weaponobject_coneangle" ); + watcher.detectiondot = cos( detectionconeangle ); + watcher.detectionmindist = weapons_get_dvar_int( "scr_weaponobject_mindist" ); + watcher.detectiongraceperiod = weapons_get_dvar( "scr_weaponobject_graceperiod" ); + watcher.detonateradius = weapons_get_dvar_int( "scr_weaponobject_radius" ); + watcher.stun = ::weaponstun; + watcher.stuntime = 5; +} + +waittillnotmoving_and_notstunned() +{ + for ( prevorigin = self.origin; 1; prevorigin = self.origin ) + { + wait 0.15; + + if ( self.origin == prevorigin && !self isstunned() ) + break; + } +} + +voidonspawn( unused0, unused1 ) +{ + +} + +deleteent( attacker, emp ) +{ + self delete(); +} + +clearfxondeath( fx ) +{ + fx endon( "death" ); + self waittill_any( "death", "hacked" ); + fx delete(); +} + +deleteweaponobjectarray() +{ + if ( isdefined( self.objectarray ) ) + { + for ( i = 0; i < self.objectarray.size; i++ ) + { + if ( isdefined( self.objectarray[i] ) ) + self.objectarray[i] delete(); + } + } + + self.objectarray = []; +} + +claymoredetonate( attacker, weaponname ) +{ + from_emp = 0; + + if ( !isdefined( from_emp ) || !from_emp ) + { + if ( isdefined( attacker ) ) + { + if ( level.teambased && attacker.team != self.owner.team || attacker != self.owner ) + attacker maps\mp\_challenges::destroyedexplosive(); + } + } + + maps\mp\gametypes_zm\_weaponobjects::weapondetonate( attacker, weaponname ); +} + +weapondetonate( attacker, weaponname ) +{ + from_emp = 0; + + if ( from_emp ) + { + self delete(); + return; + } + + if ( isdefined( attacker ) ) + self detonate( attacker ); + else if ( isdefined( self.owner ) && isplayer( self.owner ) ) + self detonate( self.owner ); + else + self detonate(); +} + +waitanddetonate( object, delay, attacker, weaponname ) +{ + object endon( "death" ); + object endon( "hacked" ); + from_emp = 0; + + if ( from_emp ) + { + object setclientflag( 15 ); + object setclientflag( 9 ); + object.stun_fx = 1; + + if ( isdefined( object.name ) && object.name == "qrdrone_turret_mp" ) + playfx( level._equipment_emp_destroy_fx, object.origin + ( 0, 0, 0 ), ( 0, randomfloat( 360 ), 0 ) ); + else + playfx( level._equipment_emp_destroy_fx, object.origin + vectorscale( ( 0, 0, 1 ), 5.0 ), ( 0, randomfloat( 360 ), 0 ) ); + + delay = 1.1; + } + + if ( delay ) + wait( delay ); + + if ( isdefined( object.detonated ) && object.detonated == 1 ) + return; + + if ( !isdefined( self.detonate ) ) + return; + + if ( isdefined( attacker ) && isplayer( attacker ) && isdefined( attacker.pers["team"] ) && isdefined( object.owner ) && isdefined( object.owner.pers["team"] ) ) + { + if ( level.teambased ) + { + if ( attacker.pers["team"] != object.owner.pers["team"] ) + attacker notify( "destroyed_explosive" ); + } + else if ( attacker != object.owner ) + attacker notify( "destroyed_explosive" ); + } + + object.detonated = 1; + object [[ self.detonate ]]( attacker, weaponname ); +} + +detonateweaponobjectarray( forcedetonation, weapon ) +{ + undetonated = []; + + if ( isdefined( self.objectarray ) ) + { + for ( i = 0; i < self.objectarray.size; i++ ) + { + if ( isdefined( self.objectarray[i] ) ) + { + if ( self.objectarray[i] isstunned() && forcedetonation == 0 ) + { + undetonated[undetonated.size] = self.objectarray[i]; + continue; + } + + if ( isdefined( weapon ) ) + { + if ( weapon ishacked() && weapon.name != self.objectarray[i].name ) + { + undetonated[undetonated.size] = self.objectarray[i]; + continue; + } + else if ( self.objectarray[i] ishacked() && weapon.name != self.objectarray[i].name ) + { + undetonated[undetonated.size] = self.objectarray[i]; + continue; + } + } + + self thread waitanddetonate( self.objectarray[i], 0.1, undefined, weapon ); + } + } + } + + self.objectarray = undetonated; +} + +addweaponobjecttowatcher( watchername, weapon ) +{ + watcher = getweaponobjectwatcher( watchername ); + assert( isdefined( watcher ), "Weapon object watcher " + watchername + " does not exist" ); + self addweaponobject( watcher, weapon ); +} + +addweaponobject( watcher, weapon ) +{ + if ( !isdefined( watcher.storedifferentobject ) ) + watcher.objectarray[watcher.objectarray.size] = weapon; + + weapon.owner = self; + weapon.detonated = 0; + weapon.name = watcher.weapon; + + if ( isdefined( watcher.ondamage ) ) + weapon thread [[ watcher.ondamage ]]( watcher ); + else + weapon thread weaponobjectdamage( watcher ); + + weapon.ownergetsassist = watcher.ownergetsassist; + + if ( isdefined( watcher.onspawn ) ) + weapon thread [[ watcher.onspawn ]]( watcher, self ); + + if ( isdefined( watcher.onspawnfx ) ) + weapon thread [[ watcher.onspawnfx ]](); + + if ( isdefined( watcher.reconmodel ) ) + weapon thread attachreconmodel( watcher.reconmodel, self ); + + if ( isdefined( watcher.onspawnretrievetriggers ) ) + weapon thread [[ watcher.onspawnretrievetriggers ]]( watcher, self ); + + if ( watcher.hackable ) + weapon thread hackerinit( watcher ); + + if ( isdefined( watcher.stun ) ) + weapon thread watchscramble( watcher ); + + if ( watcher.playdestroyeddialog ) + { + weapon thread playdialogondeath( self ); + weapon thread watchobjectdamage( self ); + } + + if ( watcher.deleteonkillbrush ) + weapon thread deleteonkillbrush( self ); +} + +watchscramble( watcher ) +{ + +} + +deleteweaponobjecthelper( weapon_ent ) +{ + if ( !isdefined( weapon_ent.name ) ) + return; + + watcher = self getweaponobjectwatcherbyweapon( weapon_ent.name ); + + if ( !isdefined( watcher ) ) + return; + + watcher.objectarray = deleteweaponobject( watcher, weapon_ent ); +} + +deleteweaponobject( watcher, weapon_ent ) +{ + temp_objectarray = watcher.objectarray; + watcher.objectarray = []; + j = 0; + + for ( i = 0; i < temp_objectarray.size; i++ ) + { + if ( !isdefined( temp_objectarray[i] ) || temp_objectarray[i] == weapon_ent ) + continue; + + watcher.objectarray[j] = temp_objectarray[i]; + j++; + } + + return watcher.objectarray; +} + +weaponobjectdamage( watcher ) +{ + self endon( "death" ); + self endon( "hacked" ); + self setcandamage( 1 ); + self.maxhealth = 100000; + self.health = self.maxhealth; + attacker = undefined; + + while ( true ) + { + self waittill( "damage", damage, attacker, direction_vec, point, type, modelname, tagname, partname, weaponname, idflags ); + + if ( isdefined( weaponname ) ) + { + switch ( weaponname ) + { + case "proximity_grenade_mp": + case "flash_grenade_mp": + case "concussion_grenade_mp": + if ( watcher.stuntime > 0 ) + self thread stunstart( watcher, watcher.stuntime ); + + if ( level.teambased && self.owner.team != attacker.team ) + { + if ( maps\mp\gametypes_zm\_globallogic_player::dodamagefeedback( weaponname, attacker ) ) + attacker maps\mp\gametypes_zm\_damagefeedback::updatedamagefeedback(); + } + else if ( !level.teambased && self.owner != attacker ) + { + if ( maps\mp\gametypes_zm\_globallogic_player::dodamagefeedback( weaponname, attacker ) ) + attacker maps\mp\gametypes_zm\_damagefeedback::updatedamagefeedback(); + } + + continue; + case "willy_pete_mp": + continue; + case "emp_grenade_mp": + if ( level.teambased && self.owner.team != attacker.team ) + { + if ( maps\mp\gametypes_zm\_globallogic_player::dodamagefeedback( weaponname, attacker ) ) + attacker maps\mp\gametypes_zm\_damagefeedback::updatedamagefeedback(); + } + else if ( !level.teambased && self.owner != attacker ) + { + if ( maps\mp\gametypes_zm\_globallogic_player::dodamagefeedback( weaponname, attacker ) ) + attacker maps\mp\gametypes_zm\_damagefeedback::updatedamagefeedback(); + } + + break; + default: + break; + } + } + + if ( !isplayer( attacker ) && isdefined( attacker.owner ) ) + attacker = attacker.owner; + + if ( level.teambased && isplayer( attacker ) ) + { + if ( !level.hardcoremode && self.owner.team == attacker.pers["team"] && self.owner != attacker ) + continue; + } + + if ( maps\mp\gametypes_zm\_globallogic_player::dodamagefeedback( weaponname, attacker ) ) + attacker maps\mp\gametypes_zm\_damagefeedback::updatedamagefeedback(); + + if ( !isvehicle( self ) && !friendlyfirecheck( self.owner, attacker ) ) + continue; + + break; + } + + if ( level.weaponobjectexplodethisframe ) + wait( 0.1 + randomfloat( 0.4 ) ); + else + wait 0.05; + + if ( !isdefined( self ) ) + return; + + level.weaponobjectexplodethisframe = 1; + thread resetweaponobjectexplodethisframe(); + + if ( isdefined( type ) && ( issubstr( type, "MOD_GRENADE_SPLASH" ) || issubstr( type, "MOD_GRENADE" ) || issubstr( type, "MOD_EXPLOSIVE" ) ) ) + self.waschained = 1; + + if ( isdefined( idflags ) && idflags & level.idflags_penetration ) + self.wasdamagedfrombulletpenetration = 1; + + self.wasdamaged = 1; + watcher thread waitanddetonate( self, 0.0, attacker, weaponname ); +} + +playdialogondeath( owner ) +{ + owner endon( "death" ); + owner endon( "disconnect" ); + self endon( "hacked" ); + + self waittill( "death" ); + + if ( isdefined( self.playdialog ) && self.playdialog ) + owner maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "equipment_destroyed", "item_destroyed" ); +} + +watchobjectdamage( owner ) +{ + owner endon( "death" ); + owner endon( "disconnect" ); + self endon( "hacked" ); + self endon( "death" ); + + while ( true ) + { + self waittill( "damage", damage, attacker ); + + if ( isdefined( attacker ) && isplayer( attacker ) && attacker != owner ) + self.playdialog = 1; + else + self.playdialog = 0; + } +} + +stunstart( watcher, time ) +{ + self endon( "death" ); + + if ( self isstunned() ) + return; + + if ( isdefined( self.camerahead ) ) + self.camerahead setclientflag( 9 ); + + self setclientflag( 9 ); + + if ( isdefined( watcher.stun ) ) + self thread [[ watcher.stun ]](); + + if ( watcher.name == "rcbomb" ) + self.owner freezecontrolswrapper( 1 ); + + if ( isdefined( time ) ) + wait( time ); + else + return; + + if ( watcher.name == "rcbomb" ) + self.owner freezecontrolswrapper( 0 ); + + self stunstop(); +} + +stunstop() +{ + self notify( "not_stunned" ); + + if ( isdefined( self.camerahead ) ) + self.camerahead clearclientflag( 9 ); + + self clearclientflag( 9 ); +} + +weaponstun() +{ + self endon( "death" ); + self endon( "not_stunned" ); + origin = self gettagorigin( "tag_fx" ); + + if ( !isdefined( origin ) ) + origin = self.origin + vectorscale( ( 0, 0, 1 ), 10.0 ); + + self.stun_fx = spawn( "script_model", origin ); + self.stun_fx setmodel( "tag_origin" ); + self thread stunfxthink( self.stun_fx ); + wait 0.1; + playfxontag( level._equipment_spark_fx, self.stun_fx, "tag_origin" ); + self.stun_fx playsound( "dst_disable_spark" ); +} + +stunfxthink( fx ) +{ + fx endon( "death" ); + self waittill_any( "death", "not_stunned" ); + fx delete(); +} + +isstunned() +{ + return isdefined( self.stun_fx ); +} + +resetweaponobjectexplodethisframe() +{ + wait 0.05; + level.weaponobjectexplodethisframe = 0; +} + +getweaponobjectwatcher( name ) +{ + if ( !isdefined( self.weaponobjectwatcherarray ) ) + return undefined; + + for ( watcher = 0; watcher < self.weaponobjectwatcherarray.size; watcher++ ) + { + if ( self.weaponobjectwatcherarray[watcher].name == name ) + return self.weaponobjectwatcherarray[watcher]; + } + + return undefined; +} + +getweaponobjectwatcherbyweapon( weapon ) +{ + if ( !isdefined( self.weaponobjectwatcherarray ) ) + return undefined; + + for ( watcher = 0; watcher < self.weaponobjectwatcherarray.size; watcher++ ) + { + if ( isdefined( self.weaponobjectwatcherarray[watcher].weapon ) && self.weaponobjectwatcherarray[watcher].weapon == weapon ) + return self.weaponobjectwatcherarray[watcher]; + + if ( isdefined( self.weaponobjectwatcherarray[watcher].weapon ) && isdefined( self.weaponobjectwatcherarray[watcher].altweapon ) && self.weaponobjectwatcherarray[watcher].altweapon == weapon ) + return self.weaponobjectwatcherarray[watcher]; + } + + return undefined; +} + +resetweaponobjectwatcher( watcher, ownerteam ) +{ + if ( level.deleteexplosivesonspawn == 1 ) + { + self notify( "weapon_object_destroyed" ); + watcher deleteweaponobjectarray(); + } + + watcher.ownerteam = ownerteam; +} + +createweaponobjectwatcher( name, weapon, ownerteam ) +{ + if ( !isdefined( self.weaponobjectwatcherarray ) ) + self.weaponobjectwatcherarray = []; + + weaponobjectwatcher = getweaponobjectwatcher( name ); + + if ( !isdefined( weaponobjectwatcher ) ) + { + weaponobjectwatcher = spawnstruct(); + self.weaponobjectwatcherarray[self.weaponobjectwatcherarray.size] = weaponobjectwatcher; + weaponobjectwatcher.name = name; + weaponobjectwatcher.type = "use"; + weaponobjectwatcher.weapon = weapon; + weaponobjectwatcher.weaponidx = getweaponindexfromname( weapon ); + weaponobjectwatcher.watchforfire = 0; + weaponobjectwatcher.hackable = 0; + weaponobjectwatcher.altdetonate = 0; + weaponobjectwatcher.detectable = 1; + weaponobjectwatcher.headicon = 1; + weaponobjectwatcher.stuntime = 0; + weaponobjectwatcher.activatesound = undefined; + weaponobjectwatcher.ignoredirection = undefined; + weaponobjectwatcher.immediatedetonation = undefined; + weaponobjectwatcher.deploysound = getweaponfiresound( weaponobjectwatcher.weaponidx ); + weaponobjectwatcher.deploysoundplayer = getweaponfiresoundplayer( weaponobjectwatcher.weaponidx ); + weaponobjectwatcher.pickupsound = getweaponpickupsound( weaponobjectwatcher.weaponidx ); + weaponobjectwatcher.pickupsoundplayer = getweaponpickupsoundplayer( weaponobjectwatcher.weaponidx ); + weaponobjectwatcher.altweapon = undefined; + weaponobjectwatcher.ownergetsassist = 0; + weaponobjectwatcher.playdestroyeddialog = 1; + weaponobjectwatcher.deleteonkillbrush = 1; + weaponobjectwatcher.deleteondifferentobjectspawn = 1; + weaponobjectwatcher.enemydestroy = 0; + weaponobjectwatcher.onspawn = undefined; + weaponobjectwatcher.onspawnfx = undefined; + weaponobjectwatcher.onspawnretrievetriggers = undefined; + weaponobjectwatcher.ondetonated = undefined; + weaponobjectwatcher.detonate = undefined; + weaponobjectwatcher.stun = undefined; + weaponobjectwatcher.ondestroyed = undefined; + + if ( !isdefined( weaponobjectwatcher.objectarray ) ) + weaponobjectwatcher.objectarray = []; + } + + resetweaponobjectwatcher( weaponobjectwatcher, ownerteam ); + return weaponobjectwatcher; +} + +createuseweaponobjectwatcher( name, weapon, ownerteam ) +{ + weaponobjectwatcher = createweaponobjectwatcher( name, weapon, ownerteam ); + weaponobjectwatcher.type = "use"; + weaponobjectwatcher.onspawn = ::onspawnuseweaponobject; + return weaponobjectwatcher; +} + +createproximityweaponobjectwatcher( name, weapon, ownerteam ) +{ + weaponobjectwatcher = createweaponobjectwatcher( name, weapon, ownerteam ); + weaponobjectwatcher.type = "proximity"; + weaponobjectwatcher.onspawn = ::onspawnproximityweaponobject; + detectionconeangle = weapons_get_dvar_int( "scr_weaponobject_coneangle" ); + weaponobjectwatcher.detectiondot = cos( detectionconeangle ); + weaponobjectwatcher.detectionmindist = weapons_get_dvar_int( "scr_weaponobject_mindist" ); + weaponobjectwatcher.detectiongraceperiod = weapons_get_dvar( "scr_weaponobject_graceperiod" ); + weaponobjectwatcher.detonateradius = weapons_get_dvar_int( "scr_weaponobject_radius" ); + return weaponobjectwatcher; +} + +commononspawnuseweaponobject( watcher, owner ) +{ + if ( watcher.detectable ) + { + if ( isdefined( watcher.ismovable ) && watcher.ismovable ) + self thread weaponobjectdetectionmovable( owner.pers["team"] ); + else + self thread weaponobjectdetectiontrigger_wait( owner.pers["team"] ); + + if ( watcher.headicon && level.teambased ) + { + self waittillnotmoving(); + offset = level.weaponobjects_headicon_offset["default"]; + + if ( isdefined( level.weaponobjects_headicon_offset[self.name] ) ) + offset = level.weaponobjects_headicon_offset[self.name]; + } + } +} + +onspawnuseweaponobject( watcher, owner ) +{ + self commononspawnuseweaponobject( watcher, owner ); +} + +onspawnproximityweaponobject( watcher, owner ) +{ + self thread commononspawnuseweaponobject( watcher, owner ); + self thread proximityweaponobjectdetonation( watcher ); +/# + if ( getdvarint( "scr_weaponobject_debug" ) ) + self thread proximityweaponobjectdebug( watcher ); +#/ +} + +watchweaponobjectusage() +{ + self endon( "disconnect" ); + + if ( !isdefined( self.weaponobjectwatcherarray ) ) + self.weaponobjectwatcherarray = []; + + self thread watchweaponobjectspawn(); + self thread watchweaponprojectileobjectspawn(); + self thread watchweaponobjectdetonation(); + self thread watchweaponobjectaltdetonation(); + self thread watchweaponobjectaltdetonate(); + self thread deleteweaponobjectson(); +} + +watchweaponobjectspawn() +{ + self notify( "watchWeaponObjectSpawn" ); + self endon( "watchWeaponObjectSpawn" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "grenade_fire", weapon, weapname ); + + switch ( weapname ) + { + case "tactical_insertion_mp": + case "scrambler_mp": + case "camera_spike_mp": + case "bouncingbetty_mp": + case "acoustic_sensor_mp": + break; + case "trophy_system_mp": + case "sensor_grenade_mp": + case "satchel_charge_mp": + case "proximity_grenade_mp": + case "claymore_mp": + case "bouncingbetty_mp": + for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) + { + if ( self.weaponobjectwatcherarray[i].weapon != weapname ) + continue; + + objectarray_size = self.weaponobjectwatcherarray[i].objectarray.size; + + for ( j = 0; j < objectarray_size; j++ ) + { + if ( !isdefined( self.weaponobjectwatcherarray[i].objectarray[j] ) ) + self.weaponobjectwatcherarray[i].objectarray = deleteweaponobject( self.weaponobjectwatcherarray[i], weapon ); + } + + numallowed = 2; + + if ( weapname == "proximity_grenade_mp" ) + numallowed = weapons_get_dvar_int( "scr_proximityGrenadeMaxInstances" ); + + if ( isdefined( self.weaponobjectwatcherarray[i].detonate ) && self.weaponobjectwatcherarray[i].objectarray.size > numallowed - 1 ) + self.weaponobjectwatcherarray[i] thread waitanddetonate( self.weaponobjectwatcherarray[i].objectarray[0], 0.1, undefined, weapname ); + } + + break; + default: + break; + } + + if ( !self ishacked() ) + { + if ( weapname == "claymore_mp" || weapname == "satchel_charge_mp" || weapname == "bouncingbetty_mp" ) + self addweaponstat( weapname, "used", 1 ); + } + + watcher = getweaponobjectwatcherbyweapon( weapname ); + + if ( isdefined( watcher ) ) + self addweaponobject( watcher, weapon ); + } +} + +watchweaponprojectileobjectspawn() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "missile_fire", weapon, weapname ); + + watcher = getweaponobjectwatcherbyweapon( weapname ); + + if ( isdefined( watcher ) ) + { + self addweaponobject( watcher, weapon ); + objectarray_size = watcher.objectarray.size; + + for ( j = 0; j < objectarray_size; j++ ) + { + if ( !isdefined( watcher.objectarray[j] ) ) + watcher.objectarray = deleteweaponobject( watcher, weapon ); + } + + if ( isdefined( watcher.detonate ) && watcher.objectarray.size > 1 ) + watcher thread waitanddetonate( watcher.objectarray[0], 0.1 ); + } + } +} + +proximityweaponobjectdebug( watcher ) +{ +/# + self waittillnotmoving(); + self thread showcone( acos( watcher.detectiondot ), watcher.detonateradius, ( 1, 0.85, 0 ) ); + self thread showcone( 60, 256, ( 1, 0, 0 ) ); +#/ +} + +vectorcross( v1, v2 ) +{ +/# + return ( v1[1] * v2[2] - v1[2] * v2[1], v1[2] * v2[0] - v1[0] * v2[2], v1[0] * v2[1] - v1[1] * v2[0] ); +#/ +} + +showcone( angle, range, color ) +{ +/# + self endon( "death" ); + start = self.origin; + forward = anglestoforward( self.angles ); + right = vectorcross( forward, ( 0, 0, 1 ) ); + up = vectorcross( forward, right ); + fullforward = forward * range * cos( angle ); + sideamnt = range * sin( angle ); + + while ( true ) + { + prevpoint = ( 0, 0, 0 ); + + for ( i = 0; i <= 20; i++ ) + { + coneangle = i / 20.0 * 360; + point = start + fullforward + sideamnt * ( right * cos( coneangle ) + up * sin( coneangle ) ); + + if ( i > 0 ) + { + line( start, point, color ); + line( prevpoint, point, color ); + } + + prevpoint = point; + } + + wait 0.05; + } +#/ +} + +weaponobjectdetectionmovable( ownerteam ) +{ + self endon( "end_detection" ); + level endon( "game_ended" ); + self endon( "death" ); + self endon( "hacked" ); + + if ( level.oldschool ) + return; + + if ( !level.teambased ) + return; + + self.detectid = "rcBomb" + gettime() + randomint( 1000000 ); + + while ( !level.gameended ) + { + wait 1; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( isai( player ) ) + continue; + + if ( isdefined( self.model_name ) && player hasperk( "specialty_detectexplosive" ) ) + { + switch ( self.model_name ) + { + case "t6_wpn_claymore_world_detect": + case "t6_wpn_c4_world_detect": + break; + default: + continue; + } + } + else + continue; + + if ( player.team == ownerteam ) + continue; + + if ( isdefined( player.bombsquadids[self.detectid] ) ) + continue; + } + } +} + +seticonpos( item, icon, heightincrease ) +{ + icon.x = item.origin[0]; + icon.y = item.origin[1]; + icon.z = item.origin[2] + heightincrease; +} + +weaponobjectdetectiontrigger_wait( ownerteam ) +{ + self endon( "death" ); + self endon( "hacked" ); + waittillnotmoving(); + + if ( level.oldschool ) + return; + + self thread weaponobjectdetectiontrigger( ownerteam ); +} + +weaponobjectdetectiontrigger( ownerteam ) +{ + trigger = spawn( "trigger_radius", self.origin - vectorscale( ( 0, 0, 1 ), 128.0 ), 0, 512, 256 ); + trigger.detectid = "trigger" + gettime() + randomint( 1000000 ); + trigger sethintlowpriority( 1 ); + self waittill_any( "death", "hacked" ); + trigger notify( "end_detection" ); + + if ( isdefined( trigger.bombsquadicon ) ) + trigger.bombsquadicon destroy(); + + trigger delete(); +} + +hackertriggersetvisibility( owner ) +{ + self endon( "death" ); + assert( isplayer( owner ) ); + ownerteam = owner.pers["team"]; + + for (;;) + { + if ( level.teambased ) + { + self setvisibletoallexceptteam( ownerteam ); + self setexcludeteamfortrigger( ownerteam ); + } + else + { + self setvisibletoall(); + self setteamfortrigger( "none" ); + } + + self setinvisibletoplayer( owner ); + level waittill_any( "player_spawned", "joined_team" ); + } +} + +hackernotmoving() +{ + self endon( "death" ); + self waittillnotmoving(); + self notify( "landed" ); +} + +hackerinit( watcher ) +{ + self thread hackernotmoving(); + event = self waittill_any_return( "death", "landed" ); + + if ( event == "death" ) + return; + + triggerorigin = self.origin; + + if ( isdefined( self.name ) && self.name == "satchel_charge_mp" ) + triggerorigin = self gettagorigin( "tag_fx" ); + + self.hackertrigger = spawn( "trigger_radius_use", triggerorigin, level.weaponobjects_hacker_trigger_width, level.weaponobjects_hacker_trigger_height ); +/# + +#/ + self.hackertrigger sethintlowpriority( 1 ); + self.hackertrigger setcursorhint( "HINT_NOICON", self ); + self.hackertrigger setignoreentfortrigger( self ); + self.hackertrigger enablelinkto(); + self.hackertrigger linkto( self ); + + if ( isdefined( level.hackerhints[self.name] ) ) + self.hackertrigger sethintstring( level.hackerhints[self.name].hint ); + else + self.hackertrigger sethintstring( &"MP_GENERIC_HACKING" ); + + self.hackertrigger setperkfortrigger( "specialty_disarmexplosive" ); + self.hackertrigger thread hackertriggersetvisibility( self.owner ); + self thread hackerthink( self.hackertrigger, watcher ); +} + +hackerthink( trigger, watcher ) +{ + self endon( "death" ); + + for (;;) + { + trigger waittill( "trigger", player, instant ); + + if ( !isdefined( instant ) && !trigger hackerresult( player, self.owner ) ) + continue; + + self.owner hackerremoveweapon( self ); + self.owner maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "hacked_equip", "item_destroyed" ); + self.hacked = 1; + self setmissileowner( player ); + self setteam( player.pers["team"] ); + self.owner = player; + + if ( isweaponequipment( self.name ) ) + { + + } + + if ( self.name == "satchel_charge_mp" && isdefined( player.lowermessage ) ) + { + player.lowermessage settext( &"PLATFORM_SATCHEL_CHARGE_DOUBLE_TAP" ); + player.lowermessage.alpha = 1; + player.lowermessage fadeovertime( 2.0 ); + player.lowermessage.alpha = 0; + } + + self notify( "hacked", player ); + level notify( "hacked", self, player ); + + if ( self.name == "camera_spike_mp" && isdefined( self.camerahead ) ) + self.camerahead notify( "hacked", player ); +/# + +#/ + if ( isdefined( watcher.stun ) ) + { + self thread stunstart( watcher, 0.75 ); + wait 0.75; + } + else + wait 0.05; + + if ( isdefined( player ) && player.sessionstate == "playing" ) + player notify( "grenade_fire", self, self.name ); + else + watcher thread waitanddetonate( self, 0.0 ); + + return; + } +} + +ishacked() +{ + return isdefined( self.hacked ) && self.hacked; +} + +hackerunfreezeplayer( player ) +{ + self endon( "hack_done" ); + + self waittill( "death" ); + + if ( isdefined( player ) ) + { + player freeze_player_controls( 0 ); + player enableweapons(); + } +} + +hackerresult( player, owner ) +{ + success = 1; + time = gettime(); + hacktime = getdvarfloat( "perk_disarmExplosiveTime" ); + + if ( !canhack( player, owner, 1 ) ) + return 0; + + self thread hackerunfreezeplayer( player ); + + while ( time + hacktime * 1000 > gettime() ) + { + if ( !canhack( player, owner, 0 ) ) + { + success = 0; + break; + } + + if ( !player usebuttonpressed() ) + { + success = 0; + break; + } + + if ( !isdefined( self ) ) + { + success = 0; + break; + } + + player freeze_player_controls( 1 ); + player disableweapons(); + + if ( !isdefined( self.progressbar ) ) + { + self.progressbar = player createprimaryprogressbar(); + self.progressbar.lastuserate = -1; + self.progressbar showelem(); + self.progressbar updatebar( 0.01, 1 / hacktime ); + self.progresstext = player createprimaryprogressbartext(); + self.progresstext settext( &"MP_HACKING" ); + self.progresstext showelem(); + player playlocalsound( "evt_hacker_hacking" ); + } + + wait 0.05; + } + + if ( isdefined( player ) ) + { + player freeze_player_controls( 0 ); + player enableweapons(); + } + + if ( isdefined( self.progressbar ) ) + { + self.progressbar destroyelem(); + self.progresstext destroyelem(); + } + + if ( isdefined( self ) ) + self notify( "hack_done" ); + + return success; +} + +canhack( player, owner, weapon_check ) +{ + if ( !isdefined( player ) ) + return false; + + if ( !isplayer( player ) ) + return false; + + if ( !isalive( player ) ) + return false; + + if ( !isdefined( owner ) ) + return false; + + if ( owner == player ) + return false; + + if ( level.teambased && player.team == owner.team ) + return false; + + if ( isdefined( player.isdefusing ) && player.isdefusing ) + return false; + + if ( isdefined( player.isplanting ) && player.isplanting ) + return false; + + if ( isdefined( player.proxbar ) && !player.proxbar.hidden ) + return false; + + if ( isdefined( player.revivingteammate ) && player.revivingteammate == 1 ) + return false; + + if ( !player isonground() ) + return false; + + if ( player isinvehicle() ) + return false; + + if ( player isweaponviewonlylinked() ) + return false; + + if ( !player hasperk( "specialty_disarmexplosive" ) ) + return false; + + if ( player isempjammed() ) + return false; + + if ( isdefined( player.laststand ) && player.laststand ) + return false; + + if ( weapon_check ) + { + if ( player isthrowinggrenade() ) + return false; + + if ( player isswitchingweapons() ) + return false; + + if ( player ismeleeing() ) + return false; + + weapon = player getcurrentweapon(); + + if ( !isdefined( weapon ) ) + return false; + + if ( weapon == "none" ) + return false; + + if ( isweaponequipment( weapon ) && player isfiring() ) + return false; + + if ( isweaponspecificuse( weapon ) ) + return false; + } + + return true; +} + +hackerremoveweapon( weapon ) +{ + for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) + { + if ( self.weaponobjectwatcherarray[i].weapon != weapon.name ) + continue; + + objectarray_size = self.weaponobjectwatcherarray[i].objectarray.size; + + for ( j = 0; j < objectarray_size; j++ ) + self.weaponobjectwatcherarray[i].objectarray = deleteweaponobject( self.weaponobjectwatcherarray[i], weapon ); + + return; + } +} + +proximityweaponobjectdetonation( watcher ) +{ + self endon( "death" ); + self endon( "hacked" ); + self waittillnotmoving(); + + if ( isdefined( watcher.activationdelay ) ) + wait( watcher.activationdelay ); + + damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - watcher.detonateradius ), level.aitriggerspawnflags | level.vehicletriggerspawnflags, watcher.detonateradius, watcher.detonateradius * 2 ); + damagearea enablelinkto(); + damagearea linkto( self ); + self thread deleteondeath( damagearea ); + up = anglestoup( self.angles ); + traceorigin = self.origin + up; + + while ( true ) + { + damagearea waittill( "trigger", ent ); + + if ( getdvarint( "scr_weaponobject_debug" ) != 1 ) + { + if ( isdefined( self.owner ) && ent == self.owner ) + continue; + + if ( isdefined( self.owner ) && isvehicle( ent ) && isdefined( ent.owner ) && self.owner == ent.owner ) + continue; + + if ( !friendlyfirecheck( self.owner, ent, 0 ) ) + continue; + } + + if ( lengthsquared( ent getvelocity() ) < 10 && !isdefined( watcher.immediatedetonation ) ) + continue; + + if ( !ent shouldaffectweaponobject( self, watcher ) ) + continue; + + if ( self isstunned() ) + continue; + + if ( isplayer( ent ) && !isalive( ent ) ) + continue; + + if ( ent damageconetrace( traceorigin, self ) > 0 ) + break; + } + + if ( isdefined( watcher.activatesound ) ) + self playsound( watcher.activatesound ); + + if ( isdefined( watcher.activatefx ) ) + self setclientflag( 4 ); + + ent thread deathdodger( watcher.detectiongraceperiod ); + wait( watcher.detectiongraceperiod ); + + if ( isplayer( ent ) && ent hasperk( "specialty_delayexplosive" ) ) + wait( getdvarfloat( "perk_delayExplosiveTime" ) ); + + self.origin = traceorigin; + + if ( isdefined( self.owner ) && isplayer( self.owner ) ) + self [[ watcher.detonate ]]( self.owner ); + else + self [[ watcher.detonate ]](); +} + +shouldaffectweaponobject( object, watcher ) +{ + pos = self.origin + vectorscale( ( 0, 0, 1 ), 32.0 ); + + if ( isdefined( watcher.ignoredirection ) ) + return 1; + + dirtopos = pos - object.origin; + objectforward = anglestoforward( object.angles ); + dist = vectordot( dirtopos, objectforward ); + + if ( dist < watcher.detectionmindist ) + return 0; + + dirtopos = vectornormalize( dirtopos ); + dot = vectordot( dirtopos, objectforward ); + return dot > watcher.detectiondot; +} + +deathdodger( graceperiod ) +{ + self endon( "death" ); + self endon( "disconnect" ); + wait( 0.2 + graceperiod ); + self notify( "death_dodger" ); +} + +deleteondeath( ent ) +{ + self waittill_any( "death", "hacked" ); + wait 0.05; + + if ( isdefined( ent ) ) + ent delete(); +} + +deleteonkillbrush( player ) +{ + player endon( "disconnect" ); + self endon( "death" ); + self endon( "stationary" ); + killbrushes = getentarray( "trigger_hurt", "classname" ); + + while ( true ) + { + for ( i = 0; i < killbrushes.size; i++ ) + { + if ( self istouching( killbrushes[i] ) ) + { + if ( self.origin[2] > player.origin[2] ) + break; + + if ( isdefined( self ) ) + self delete(); + + return; + } + } + + wait 0.1; + } +} + +watchweaponobjectaltdetonation() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "alt_detonate" ); + + if ( !isalive( self ) ) + continue; + + for ( watcher = 0; watcher < self.weaponobjectwatcherarray.size; watcher++ ) + { + if ( self.weaponobjectwatcherarray[watcher].altdetonate ) + self.weaponobjectwatcherarray[watcher] detonateweaponobjectarray( 0 ); + } + } +} + +watchweaponobjectaltdetonate() +{ + self endon( "disconnect" ); + self endon( "detonated" ); + level endon( "game_ended" ); + buttontime = 0; + + for (;;) + { + self waittill( "doubletap_detonate" ); + + if ( !isalive( self ) ) + continue; + + self notify( "alt_detonate" ); + wait 0.05; + } +} + +watchweaponobjectdetonation() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "detonate" ); + + if ( self isusingoffhand() ) + weap = self getcurrentoffhand(); + else + weap = self getcurrentweapon(); + + watcher = getweaponobjectwatcherbyweapon( weap ); + + if ( isdefined( watcher ) ) + watcher detonateweaponobjectarray( 0 ); + } +} + +deleteweaponobjectson() +{ + while ( true ) + { + msg = self waittill_any_return( "disconnect", "joined_team", "joined_spectators", "death" ); + + if ( msg == "death" ) + continue; + + if ( !isdefined( self.weaponobjectwatcherarray ) ) + return; + + watchers = []; + + for ( watcher = 0; watcher < self.weaponobjectwatcherarray.size; watcher++ ) + { + weaponobjectwatcher = spawnstruct(); + watchers[watchers.size] = weaponobjectwatcher; + weaponobjectwatcher.objectarray = []; + + if ( isdefined( self.weaponobjectwatcherarray[watcher].objectarray ) ) + weaponobjectwatcher.objectarray = self.weaponobjectwatcherarray[watcher].objectarray; + } + + wait 0.05; + + for ( watcher = 0; watcher < watchers.size; watcher++ ) + watchers[watcher] deleteweaponobjectarray(); + + if ( msg == "disconnect" ) + return; + } +} + +saydamaged( orig, amount ) +{ +/# + for ( i = 0; i < 60; i++ ) + { + print3d( orig, "damaged! " + amount ); + wait 0.05; + } +#/ +} + +showheadicon( trigger ) +{ + triggerdetectid = trigger.detectid; + useid = -1; + + for ( index = 0; index < 4; index++ ) + { + detectid = self.bombsquadicons[index].detectid; + + if ( detectid == triggerdetectid ) + return; + + if ( detectid == "" ) + useid = index; + } + + if ( useid < 0 ) + return; + + self.bombsquadids[triggerdetectid] = 1; + self.bombsquadicons[useid].x = trigger.origin[0]; + self.bombsquadicons[useid].y = trigger.origin[1]; + self.bombsquadicons[useid].z = trigger.origin[2] + 24 + 128; + self.bombsquadicons[useid] fadeovertime( 0.25 ); + self.bombsquadicons[useid].alpha = 1; + self.bombsquadicons[useid].detectid = trigger.detectid; + + while ( isalive( self ) && isdefined( trigger ) && self istouching( trigger ) ) + wait 0.05; + + if ( !isdefined( self ) ) + return; + + self.bombsquadicons[useid].detectid = ""; + self.bombsquadicons[useid] fadeovertime( 0.25 ); + self.bombsquadicons[useid].alpha = 0; + self.bombsquadids[triggerdetectid] = undefined; +} + +friendlyfirecheck( owner, attacker, forcedfriendlyfirerule ) +{ + if ( !isdefined( owner ) ) + return true; + + if ( !level.teambased ) + return true; + + friendlyfirerule = level.friendlyfire; + + if ( isdefined( forcedfriendlyfirerule ) ) + friendlyfirerule = forcedfriendlyfirerule; + + if ( friendlyfirerule != 0 ) + return true; + + if ( attacker == owner ) + return true; + + if ( isplayer( attacker ) ) + { + if ( !isdefined( attacker.pers["team"] ) ) + return true; + + if ( attacker.pers["team"] != owner.pers["team"] ) + return true; + } + else if ( isai( attacker ) ) + { + if ( attacker.aiteam != owner.pers["team"] ) + return true; + } + else if ( isvehicle( attacker ) ) + { + if ( isdefined( attacker.owner ) && isplayer( attacker.owner ) ) + { + if ( attacker.owner.pers["team"] != owner.pers["team"] ) + return true; + } + } + + return false; +} + +onspawnhatchettrigger( watcher, player ) +{ + self endon( "death" ); + self setowner( player ); + self setteam( player.pers["team"] ); + self.owner = player; + self.oldangles = self.angles; + self waittillnotmoving(); + waittillframeend; + + if ( player.pers["team"] == "spectator" ) + return; + + triggerorigin = self.origin; + triggerparentent = undefined; + + if ( isdefined( self.stucktoplayer ) ) + { + if ( isalive( self.stucktoplayer ) || !isdefined( self.stucktoplayer.body ) ) + { + if ( isalive( self.stucktoplayer ) ) + { + triggerparentent = self; + self unlink(); + self.angles = self.oldangles; + self launch( vectorscale( ( 1, 1, 1 ), 5.0 ) ); + self waittillnotmoving(); + waittillframeend; + } + else + triggerparentent = self.stucktoplayer; + } + else + triggerparentent = self.stucktoplayer.body; + } + + if ( isdefined( triggerparentent ) ) + triggerorigin = triggerparentent.origin + vectorscale( ( 0, 0, 1 ), 10.0 ); + + self.hatchetpickuptrigger = spawn( "trigger_radius", triggerorigin, 0, 50, 50 ); + self.hatchetpickuptrigger enablelinkto(); + self.hatchetpickuptrigger linkto( self ); + + if ( isdefined( triggerparentent ) ) + self.hatchetpickuptrigger linkto( triggerparentent ); + + self thread watchhatchettrigger( self.hatchetpickuptrigger, watcher.pickup, watcher.pickupsoundplayer, watcher.pickupsound ); +/# + thread switch_team( self, watcher.weapon, player ); +#/ + self thread watchshutdown( player ); +} + +watchhatchettrigger( trigger, callback, playersoundonuse, npcsoundonuse ) +{ + self endon( "delete" ); + self endon( "hacked" ); + + while ( true ) + { + trigger waittill( "trigger", player ); + + if ( !isalive( player ) ) + continue; + + if ( !player isonground() ) + continue; + + if ( isdefined( trigger.claimedby ) && player != trigger.claimedby ) + continue; + + if ( !player hasweapon( self.name ) ) + continue; + + curr_ammo = player getweaponammostock( "hatchet_mp" ); + maxammo = weaponmaxammo( "hatchet_mp" ); + + if ( player.grenadetypeprimary == "hatchet_mp" ) + maxammo = player.grenadetypeprimarycount; + else if ( isdefined( player.grenadetypesecondary ) && player.grenadetypesecondary == "hatchet_mp" ) + maxammo = player.grenadetypesecondarycount; + + if ( curr_ammo >= maxammo ) + continue; + + if ( isdefined( playersoundonuse ) ) + player playlocalsound( playersoundonuse ); + + if ( isdefined( npcsoundonuse ) ) + player playsound( npcsoundonuse ); + + self thread [[ callback ]]( player ); + } +} + +onspawnretrievableweaponobject( watcher, player ) +{ + self endon( "death" ); + self endon( "hacked" ); + + if ( ishacked() ) + { + self thread watchshutdown( player ); + return; + } + + self setowner( player ); + self setteam( player.pers["team"] ); + self.owner = player; + self.oldangles = self.angles; + self waittillnotmoving(); + + if ( isdefined( watcher.activationdelay ) ) + wait( watcher.activationdelay ); + + waittillframeend; + + if ( player.pers["team"] == "spectator" ) + return; + + triggerorigin = self.origin; + triggerparentent = undefined; + + if ( isdefined( self.stucktoplayer ) ) + { + if ( isalive( self.stucktoplayer ) || !isdefined( self.stucktoplayer.body ) ) + triggerparentent = self.stucktoplayer; + else + triggerparentent = self.stucktoplayer.body; + } + + if ( isdefined( triggerparentent ) ) + triggerorigin = triggerparentent.origin + vectorscale( ( 0, 0, 1 ), 10.0 ); + else + { + up = anglestoup( self.angles ); + triggerorigin = self.origin + up; + } + + if ( isdefined( watcher.adjusttriggerorigin ) ) + triggerorigin = self [[ watcher.adjusttriggerorigin ]]( triggerorigin ); + + self.pickuptrigger = spawn( "trigger_radius_use", triggerorigin ); + self.pickuptrigger sethintlowpriority( 1 ); + self.pickuptrigger setcursorhint( "HINT_NOICON", self ); + self.pickuptrigger enablelinkto(); + self.pickuptrigger linkto( self ); + self.pickuptrigger setinvisibletoall(); + self.pickuptrigger setvisibletoplayer( player ); + + if ( isdefined( level.retrievehints[watcher.name] ) ) + self.pickuptrigger sethintstring( level.retrievehints[watcher.name].hint ); + else + self.pickuptrigger sethintstring( &"MP_GENERIC_PICKUP" ); + + if ( level.teambased ) + self.pickuptrigger setteamfortrigger( player.pers["team"] ); + else + self.pickuptrigger setteamfortrigger( "none" ); + + if ( isdefined( triggerparentent ) ) + self.pickuptrigger linkto( triggerparentent ); + + if ( watcher.enemydestroy ) + { + self.enemytrigger = spawn( "trigger_radius_use", triggerorigin ); + self.enemytrigger setcursorhint( "HINT_NOICON", self ); + self.enemytrigger enablelinkto(); + self.enemytrigger linkto( self ); + self.enemytrigger setinvisibletoplayer( player ); + + if ( level.teambased ) + { + self.enemytrigger setexcludeteamfortrigger( player.team ); + self.enemytrigger.triggerteamignore = self.team; + } + + if ( isdefined( level.destroyhints[watcher.name] ) ) + self.enemytrigger sethintstring( level.destroyhints[watcher.name].hint ); + else + self.enemytrigger sethintstring( &"MP_GENERIC_DESTROY" ); + + self thread watchusetrigger( self.enemytrigger, watcher.ondestroyed ); + } + + self thread watchusetrigger( self.pickuptrigger, watcher.pickup, watcher.pickupsoundplayer, watcher.pickupsound ); +/# + thread switch_team( self, watcher.weapon, player ); +#/ + if ( isdefined( watcher.pickup_trigger_listener ) ) + self thread [[ watcher.pickup_trigger_listener ]]( self.pickuptrigger, player ); + + self thread watchshutdown( player ); +} + +watch_trigger_visibility( triggers, weap_name ) +{ + self notify( "watchTriggerVisibility" ); + self endon( "watchTriggerVisibility" ); + self endon( "death" ); + self endon( "hacked" ); + max_ammo = weaponmaxammo( weap_name ); + start_ammo = weaponstartammo( weap_name ); + ammo_to_check = 0; + + while ( true ) + { + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] hasweapon( weap_name ) ) + { + ammo_to_check = max_ammo; + + if ( self.owner == players[i] ) + { + curr_ammo = players[i] getweaponammostock( weap_name ) + players[i] getweaponammoclip( weap_name ); + + if ( weap_name == "hatchet_mp" ) + curr_ammo = players[i] getweaponammostock( weap_name ); + + if ( curr_ammo < ammo_to_check ) + { + triggers["owner_pickup"] setvisibletoplayer( players[i] ); + triggers["enemy_pickup"] setinvisibletoplayer( players[i] ); + } + else + { + triggers["owner_pickup"] setinvisibletoplayer( players[i] ); + triggers["enemy_pickup"] setinvisibletoplayer( players[i] ); + } + } + else + { + curr_ammo = players[i] getweaponammostock( weap_name ) + players[i] getweaponammoclip( weap_name ); + + if ( weap_name == "hatchet_mp" ) + curr_ammo = players[i] getweaponammostock( weap_name ); + + if ( curr_ammo < ammo_to_check ) + { + triggers["owner_pickup"] setinvisibletoplayer( players[i] ); + triggers["enemy_pickup"] setvisibletoplayer( players[i] ); + } + else + { + triggers["owner_pickup"] setinvisibletoplayer( players[i] ); + triggers["enemy_pickup"] setinvisibletoplayer( players[i] ); + } + } + + continue; + } + + triggers["owner_pickup"] setinvisibletoplayer( players[i] ); + triggers["enemy_pickup"] setinvisibletoplayer( players[i] ); + } + + wait 0.05; + } +} + +destroyent() +{ + self delete(); +} + +pickup( player ) +{ + if ( self.name != "hatchet_mp" && isdefined( self.owner ) && self.owner != player ) + return; + + self.playdialog = 0; + self destroyent(); + player giveweapon( self.name ); + clip_ammo = player getweaponammoclip( self.name ); + clip_max_ammo = weaponclipsize( self.name ); + + if ( clip_ammo < clip_max_ammo ) + clip_ammo++; + + player setweaponammoclip( self.name, clip_ammo ); +} + +ondestroyed( attacker ) +{ + playfx( level._effect["tacticalInsertionFizzle"], self.origin ); + self playsound( "dst_tac_insert_break" ); + self.owner maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "equipment_destroyed", "item_destroyed" ); + self delete(); +} + +watchshutdown( player ) +{ + self waittill_any( "death", "hacked" ); + pickuptrigger = self.pickuptrigger; + hackertrigger = self.hackertrigger; + hatchetpickuptrigger = self.hatchetpickuptrigger; + enemytrigger = self.enemytrigger; + + if ( isdefined( pickuptrigger ) ) + pickuptrigger delete(); + + if ( isdefined( hackertrigger ) ) + { + if ( isdefined( hackertrigger.progressbar ) ) + { + hackertrigger.progressbar destroyelem(); + hackertrigger.progresstext destroyelem(); + } + + hackertrigger delete(); + } + + if ( isdefined( hatchetpickuptrigger ) ) + hatchetpickuptrigger delete(); + + if ( isdefined( enemytrigger ) ) + enemytrigger delete(); +} + +watchusetrigger( trigger, callback, playersoundonuse, npcsoundonuse ) +{ + self endon( "delete" ); + self endon( "hacked" ); + + while ( true ) + { + trigger waittill( "trigger", player ); + + if ( !isalive( player ) ) + continue; + + if ( !player isonground() ) + continue; + + if ( isdefined( trigger.triggerteam ) && player.pers["team"] != trigger.triggerteam ) + continue; + + if ( isdefined( trigger.triggerteamignore ) && player.team == trigger.triggerteamignore ) + continue; + + if ( isdefined( trigger.claimedby ) && player != trigger.claimedby ) + continue; + + grenade = player.throwinggrenade; + isequipment = isweaponequipment( player getcurrentweapon() ); + + if ( isdefined( isequipment ) && isequipment ) + grenade = 0; + + if ( player usebuttonpressed() && !grenade && !player meleebuttonpressed() ) + { + if ( isdefined( playersoundonuse ) ) + player playlocalsound( playersoundonuse ); + + if ( isdefined( npcsoundonuse ) ) + player playsound( npcsoundonuse ); + + self thread [[ callback ]]( player ); + } + } +} + +createretrievablehint( name, hint ) +{ + retrievehint = spawnstruct(); + retrievehint.name = name; + retrievehint.hint = hint; + level.retrievehints[name] = retrievehint; +} + +createhackerhint( name, hint ) +{ + hackerhint = spawnstruct(); + hackerhint.name = name; + hackerhint.hint = hint; + level.hackerhints[name] = hackerhint; +} + +createdestroyhint( name, hint ) +{ + destroyhint = spawnstruct(); + destroyhint.name = name; + destroyhint.hint = hint; + level.destroyhints[name] = destroyhint; +} + +attachreconmodel( modelname, owner ) +{ + if ( !isdefined( self ) ) + return; + + reconmodel = spawn( "script_model", self.origin ); + reconmodel.angles = self.angles; + reconmodel setmodel( modelname ); + reconmodel.model_name = modelname; + reconmodel linkto( self ); + reconmodel setcontents( 0 ); + reconmodel resetreconmodelvisibility( owner ); + reconmodel thread watchreconmodelfordeath( self ); + reconmodel thread resetreconmodelonevent( "joined_team", owner ); + reconmodel thread resetreconmodelonevent( "player_spawned", owner ); +} + +resetreconmodelvisibility( owner ) +{ + if ( !isdefined( self ) ) + return; + + self setinvisibletoall(); + self setforcenocull(); + + if ( !isdefined( owner ) ) + return; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( !level.players[i] hasperk( "specialty_detectexplosive" ) && !level.players[i] hasperk( "specialty_showenemyequipment" ) ) + continue; + + if ( level.players[i].team == "spectator" ) + continue; + + hasreconmodel = 0; + + if ( level.players[i] hasperk( "specialty_detectexplosive" ) ) + { + switch ( self.model_name ) + { + case "t6_wpn_claymore_world_detect": + case "t6_wpn_c4_world_detect": + hasreconmodel = 1; + break; + default: + break; + } + } + + if ( level.players[i] hasperk( "specialty_showenemyequipment" ) ) + { + switch ( self.model_name ) + { + case "t6_wpn_trophy_system_world_detect": + case "t6_wpn_taser_mine_world_detect": + case "t6_wpn_tac_insert_detect": + case "t6_wpn_motion_sensor_world_detect": + case "t6_wpn_claymore_world_detect": + case "t6_wpn_c4_world_detect": + case "t6_wpn_bouncing_betty_world_detect": + case "t5_weapon_scrambler_world_detect": + hasreconmodel = 1; + break; + default: + break; + } + } + + if ( !hasreconmodel ) + continue; + + isenemy = 1; + + if ( level.teambased ) + { + if ( level.players[i].team == owner.team ) + isenemy = 0; + } + else if ( level.players[i] == owner ) + isenemy = 0; + + if ( isenemy ) + self setvisibletoplayer( level.players[i] ); + } +} + +watchreconmodelfordeath( parentent ) +{ + self endon( "death" ); + parentent waittill_any( "death", "hacked" ); + self delete(); +} + +resetreconmodelonevent( eventname, owner ) +{ + self endon( "death" ); + + for (;;) + { + level waittill( eventname, newowner ); + + if ( isdefined( newowner ) ) + owner = newowner; + + self resetreconmodelvisibility( owner ); + } +} + +switch_team( entity, weapon_name, owner ) +{ +/# + +#/ +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_weapons.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_weapons.gsc new file mode 100644 index 0000000..8193c80 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_weapons.gsc @@ -0,0 +1,1902 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_weapon_utils; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\_sticky_grenade; +#include maps\mp\_bb; +#include maps\mp\gametypes_zm\_weapons; +#include maps\mp\_challenges; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\gametypes_zm\_globallogic_utils; +#include maps\mp\gametypes_zm\_shellshock; +#include maps\mp\gametypes_zm\_gameobjects; + +init() +{ + precacheitem( "knife_mp" ); + precacheitem( "knife_held_mp" ); + precacheitem( "dogs_mp" ); + precacheitem( "dog_bite_mp" ); + precacheitem( "explosive_bolt_mp" ); + precachemodel( "t6_wpn_claymore_world_detect" ); + precachemodel( "t6_wpn_c4_world_detect" ); + precachemodel( "t5_weapon_scrambler_world_detect" ); + precachemodel( "t6_wpn_tac_insert_detect" ); + precachemodel( "t6_wpn_taser_mine_world_detect" ); + precachemodel( "t6_wpn_motion_sensor_world_detect" ); + precachemodel( "t6_wpn_trophy_system_world_detect" ); + precachemodel( "t6_wpn_bouncing_betty_world_detect" ); + precachemodel( "t5_weapon_camera_head_world" ); + precacheitem( "scavenger_item_mp" ); + precacheitem( "scavenger_item_hack_mp" ); + precacheshader( "hud_scavenger_pickup" ); + precacheshellshock( "default" ); + precacheshellshock( "concussion_grenade_mp" ); + precacheshellshock( "tabun_gas_mp" ); + precacheshellshock( "tabun_gas_nokick_mp" ); + precacheshellshock( "proximity_grenade" ); + precacheshellshock( "proximity_grenade_exit" ); + level.missileentities = []; + level.hackertooltargets = []; + + if ( !isdefined( level.grenadelauncherdudtime ) ) + level.grenadelauncherdudtime = 0; + + if ( !isdefined( level.throwngrenadedudtime ) ) + level.throwngrenadedudtime = 0; + + level thread onplayerconnect(); + maps\mp\gametypes_zm\_weaponobjects::init(); + + if ( !is_false( level._uses_sticky_grenades ) ) + maps\mp\_sticky_grenade::init(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player.usedweapons = 0; + player.lastfiretime = 0; + player.hits = 0; + player scavenger_hud_create(); + player thread onplayerspawned(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self.concussionendtime = 0; + self.hasdonecombat = 0; + self.shielddamageblocked = 0; + self thread watchweaponusage(); + self thread watchgrenadeusage(); + self thread watchmissileusage(); + self thread watchweaponchange(); + self thread watchturretuse(); + self thread watchriotshielduse(); + self thread trackweapon(); + self.droppeddeathweapon = undefined; + self.tookweaponfrom = []; + self.pickedupweaponkills = []; + self thread updatestowedweapon(); + } +} + +watchturretuse() +{ + self endon( "death" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "turretownerchange", turret ); + + self thread watchfortowfire( turret ); + } +} + +watchfortowfire( turret ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "turretownerchange" ); + + while ( true ) + { + self waittill( "turret_tow_fire" ); + + self thread watchmissleunlink( turret ); + + self waittill( "turret_tow_unlink" ); + } +} + +watchmissleunlink( turret ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "turretownerchange" ); + + self waittill( "turret_tow_unlink" ); + + self relinktoturret( turret ); +} + +watchweaponchange() +{ + self endon( "death" ); + self endon( "disconnect" ); + self.lastdroppableweapon = self getcurrentweapon(); + self.hitsthismag = []; + weapon = self getcurrentweapon(); + + if ( isprimaryweapon( weapon ) && !isdefined( self.hitsthismag[weapon] ) ) + self.hitsthismag[weapon] = weaponclipsize( weapon ); + + while ( true ) + { + previous_weapon = self getcurrentweapon(); + + self waittill( "weapon_change", newweapon ); + + if ( maydropweapon( newweapon ) ) + self.lastdroppableweapon = newweapon; + + if ( newweapon != "none" ) + { + if ( ( isprimaryweapon( newweapon ) || issidearm( newweapon ) ) && !isdefined( self.hitsthismag[newweapon] ) ) + self.hitsthismag[newweapon] = weaponclipsize( newweapon ); + } + } +} + +watchriotshielduse() +{ + +} + +updatelastheldweapontimings( newtime ) +{ + if ( isdefined( self.currentweapon ) && isdefined( self.currentweaponstarttime ) ) + { + totaltime = int( ( newtime - self.currentweaponstarttime ) / 1000 ); + + if ( totaltime > 0 ) + { + self addweaponstat( self.currentweapon, "timeUsed", totaltime ); + self.currentweaponstarttime = newtime; + } + } +} + +updateweapontimings( newtime ) +{ + if ( self is_bot() ) + return; + + updatelastheldweapontimings( newtime ); + + if ( !isdefined( self.staticweaponsstarttime ) ) + return; + + totaltime = int( ( newtime - self.staticweaponsstarttime ) / 1000 ); + + if ( totaltime < 0 ) + return; + + self.staticweaponsstarttime = newtime; + + if ( isdefined( self.weapon_array_grenade ) ) + { + for ( i = 0; i < self.weapon_array_grenade.size; i++ ) + self addweaponstat( self.weapon_array_grenade[i], "timeUsed", totaltime ); + } + + if ( isdefined( self.weapon_array_inventory ) ) + { + for ( i = 0; i < self.weapon_array_inventory.size; i++ ) + self addweaponstat( self.weapon_array_inventory[i], "timeUsed", totaltime ); + } + + if ( isdefined( self.killstreak ) ) + { + for ( i = 0; i < self.killstreak.size; i++ ) + { + killstreakweapon = level.menureferenceforkillstreak[self.killstreak[i]]; + + if ( isdefined( killstreakweapon ) ) + self addweaponstat( killstreakweapon, "timeUsed", totaltime ); + } + } + + if ( level.rankedmatch && level.perksenabled ) + { + perksindexarray = []; + specialtys = self.specialty; + + if ( !isdefined( specialtys ) ) + return; + + if ( !isdefined( self.class ) ) + return; + + if ( isdefined( self.class_num ) ) + { + for ( numspecialties = 0; numspecialties < level.maxspecialties; numspecialties++ ) + { + perk = self getloadoutitem( self.class_num, "specialty" + ( numspecialties + 1 ) ); + + if ( perk != 0 ) + perksindexarray[perk] = 1; + } + + perkindexarraykeys = getarraykeys( perksindexarray ); + + for ( i = 0; i < perkindexarraykeys.size; i++ ) + { + if ( perksindexarray[perkindexarraykeys[i]] == 1 ) + self adddstat( "itemStats", perkindexarraykeys[i], "stats", "timeUsed", "statValue", totaltime ); + } + } + } +} + +trackweapon() +{ + currentweapon = self getcurrentweapon(); + currenttime = gettime(); + spawnid = getplayerspawnid( self ); + + while ( true ) + { + event = self waittill_any_return( "weapon_change", "death", "disconnect" ); + newtime = gettime(); + + if ( event == "weapon_change" ) + { + self maps\mp\_bb::commitweapondata( spawnid, currentweapon, currenttime ); + newweapon = self getcurrentweapon(); + + if ( newweapon != "none" && newweapon != currentweapon ) + { + updatelastheldweapontimings( newtime ); + currentweapon = newweapon; + currenttime = newtime; + } + } + else + { + if ( event != "disconnect" ) + { + self maps\mp\_bb::commitweapondata( spawnid, currentweapon, currenttime ); + updateweapontimings( newtime ); + } + + return; + } + } +} + +maydropweapon( weapon ) +{ + if ( level.disableweapondrop == 1 ) + return false; + + if ( weapon == "none" ) + return false; + + if ( ishackweapon( weapon ) ) + return false; + + invtype = weaponinventorytype( weapon ); + + if ( invtype != "primary" ) + return false; + + if ( weapon == "none" ) + return false; + + return true; +} + +dropweaponfordeath( attacker ) +{ + if ( level.disableweapondrop == 1 ) + return; + + weapon = self.lastdroppableweapon; + + if ( isdefined( self.droppeddeathweapon ) ) + return; + + if ( !isdefined( weapon ) ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: not defined" ); +#/ + return; + } + + if ( weapon == "none" ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: weapon == none" ); +#/ + return; + } + + if ( !self hasweapon( weapon ) ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: don't have it anymore (" + weapon + ")" ); +#/ + return; + } + + if ( !self anyammoforweaponmodes( weapon ) ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: no ammo for weapon modes" ); +#/ + return; + } + + if ( !shoulddroplimitedweapon( weapon, self ) ) + return; + + clipammo = self getweaponammoclip( weapon ); + stockammo = self getweaponammostock( weapon ); + clip_and_stock_ammo = clipammo + stockammo; + + if ( !clip_and_stock_ammo ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: no ammo" ); +#/ + return; + } + + stockmax = weaponmaxammo( weapon ); + + if ( stockammo > stockmax ) + stockammo = stockmax; + + item = self dropitem( weapon ); + + if ( !isdefined( item ) ) + { +/# + iprintlnbold( "dropItem: was not able to drop weapon " + weapon ); +#/ + return; + } +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "dropped weapon: " + weapon ); +#/ + droplimitedweapon( weapon, self, item ); + self.droppeddeathweapon = 1; + item itemweaponsetammo( clipammo, stockammo ); + item.owner = self; + item.ownersattacker = attacker; + item thread watchpickup(); + item thread deletepickupafterawhile(); +} + +dropweapontoground( weapon ) +{ + if ( !isdefined( weapon ) ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: not defined" ); +#/ + return; + } + + if ( weapon == "none" ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: weapon == none" ); +#/ + return; + } + + if ( !self hasweapon( weapon ) ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: don't have it anymore (" + weapon + ")" ); +#/ + return; + } + + if ( !self anyammoforweaponmodes( weapon ) ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: no ammo for weapon modes" ); +#/ + switch ( weapon ) + { + case "mp40_blinged_mp": + case "minigun_mp": + case "m32_mp": + case "m220_tow_mp": + case "m202_flash_mp": + self takeweapon( weapon ); + break; + default: + break; + } + + return; + } + + if ( !shoulddroplimitedweapon( weapon, self ) ) + return; + + clipammo = self getweaponammoclip( weapon ); + stockammo = self getweaponammostock( weapon ); + clip_and_stock_ammo = clipammo + stockammo; + + if ( !clip_and_stock_ammo ) + { +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "didn't drop weapon: no ammo" ); +#/ + return; + } + + stockmax = weaponmaxammo( weapon ); + + if ( stockammo > stockmax ) + stockammo = stockmax; + + item = self dropitem( weapon ); +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "dropped weapon: " + weapon ); +#/ + droplimitedweapon( weapon, self, item ); + item itemweaponsetammo( clipammo, stockammo ); + item.owner = self; + item thread watchpickup(); + item thread deletepickupafterawhile(); +} + +deletepickupafterawhile() +{ + self endon( "death" ); + wait 60; + + if ( !isdefined( self ) ) + return; + + self delete(); +} + +getitemweaponname() +{ + classname = self.classname; + assert( getsubstr( classname, 0, 7 ) == "weapon_" ); + weapname = getsubstr( classname, 7 ); + return weapname; +} + +watchpickup() +{ + self endon( "death" ); + weapname = self getitemweaponname(); + + while ( true ) + { + self waittill( "trigger", player, droppeditem ); + + if ( isdefined( droppeditem ) ) + break; + } +/# + if ( getdvar( _hash_8F7FC88 ) == "1" ) + println( "picked up weapon: " + weapname + ", " + isdefined( self.ownersattacker ) ); +#/ + assert( isdefined( player.tookweaponfrom ) ); + assert( isdefined( player.pickedupweaponkills ) ); + droppedweaponname = droppeditem getitemweaponname(); + + if ( isdefined( player.tookweaponfrom[droppedweaponname] ) ) + { + droppeditem.owner = player.tookweaponfrom[droppedweaponname]; + droppeditem.ownersattacker = player; + player.tookweaponfrom[droppedweaponname] = undefined; + } + + droppeditem thread watchpickup(); + + if ( isdefined( self.ownersattacker ) && self.ownersattacker == player ) + { + player.tookweaponfrom[weapname] = self.owner; + player.pickedupweaponkills[weapname] = 0; + } + else + { + player.tookweaponfrom[weapname] = undefined; + player.pickedupweaponkills[weapname] = undefined; + } +} + +itemremoveammofromaltmodes() +{ + origweapname = self getitemweaponname(); + curweapname = weaponaltweaponname( origweapname ); + + for ( altindex = 1; curweapname != "none" && curweapname != origweapname; altindex++ ) + { + self itemweaponsetammo( 0, 0, altindex ); + curweapname = weaponaltweaponname( curweapname ); + } +} + +dropoffhand() +{ + grenadetypes = []; + + for ( index = 0; index < grenadetypes.size; index++ ) + { + if ( !self hasweapon( grenadetypes[index] ) ) + continue; + + count = self getammocount( grenadetypes[index] ); + + if ( !count ) + continue; + + self dropitem( grenadetypes[index] ); + } +} + +watchweaponusage() +{ + self endon( "death" ); + self endon( "disconnect" ); + level endon( "game_ended" ); + self.usedkillstreakweapon = []; + self.usedkillstreakweapon["minigun_mp"] = 0; + self.usedkillstreakweapon["m32_mp"] = 0; + self.usedkillstreakweapon["m202_flash_mp"] = 0; + self.usedkillstreakweapon["m220_tow_mp"] = 0; + self.usedkillstreakweapon["mp40_blinged_mp"] = 0; + self.killstreaktype = []; + self.killstreaktype["minigun_mp"] = "minigun_mp"; + self.killstreaktype["m32_mp"] = "m32_mp"; + self.killstreaktype["m202_flash_mp"] = "m202_flash_mp"; + self.killstreaktype["m220_tow_mp"] = "m220_tow_mp"; + self.killstreaktype["mp40_blinged_mp"] = "mp40_blinged_drop_mp"; + + for (;;) + { + self waittill( "weapon_fired", curweapon ); + + self.lastfiretime = gettime(); + self.hasdonecombat = 1; + + if ( maps\mp\gametypes_zm\_weapons::isprimaryweapon( curweapon ) || maps\mp\gametypes_zm\_weapons::issidearm( curweapon ) ) + { + if ( isdefined( self.hitsthismag[curweapon] ) ) + self thread updatemagshots( curweapon ); + } + + switch ( weaponclass( curweapon ) ) + { + case "rifle": + if ( curweapon == "crossbow_explosive_mp" ) + { + level.globalcrossbowfired++; + self addweaponstat( curweapon, "shots", 1 ); + self thread begingrenadetracking(); + break; + } + case "spread": + case "smg": + case "pistol": + case "mg": + self trackweaponfire( curweapon ); + level.globalshotsfired++; + break; + case "rocketlauncher": + case "grenade": + self addweaponstat( curweapon, "shots", 1 ); + break; + default: + break; + } + } +} + +updatemagshots( weaponname ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "updateMagShots_" + weaponname ); + self.hitsthismag[weaponname]--; + wait 0.05; + self.hitsthismag[weaponname] = weaponclipsize( weaponname ); +} + +checkhitsthismag( weaponname ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self notify( "updateMagShots_" + weaponname ); + waittillframeend; + + if ( isdefined( self.hitsthismag[weaponname] ) && self.hitsthismag[weaponname] == 0 ) + { + if ( !sessionmodeiszombiesgame() ) + { + weaponclass = getweaponclass( weaponname ); + maps\mp\_challenges::fullclipnomisses( weaponclass, weaponname ); + } + + self.hitsthismag[weaponname] = weaponclipsize( weaponname ); + } +} + +trackweaponfire( curweapon ) +{ + shotsfired = 1; + + if ( isdefined( self.laststandparams ) && self.laststandparams.laststandstarttime == gettime() ) + { + self.hits = 0; + return; + } + + pixbeginevent( "trackWeaponFire" ); + + if ( is_true( level.pers_upgrade_sniper ) ) + maps\mp\zombies\_zm_pers_upgrades_functions::pers_sniper_player_fires( curweapon, self.hits ); + + self addweaponstat( curweapon, "shots", shotsfired ); + self addweaponstat( curweapon, "hits", self.hits ); + + if ( isdefined( level.add_client_stat ) ) + { + self [[ level.add_client_stat ]]( "total_shots", shotsfired ); + self [[ level.add_client_stat ]]( "hits", self.hits ); + } + else + { + self addplayerstat( "total_shots", shotsfired ); + self addplayerstat( "hits", self.hits ); + self addplayerstat( "misses", int( max( 0, shotsfired - self.hits ) ) ); + } + + self incrementplayerstat( "total_shots", shotsfired ); + self incrementplayerstat( "hits", self.hits ); + self incrementplayerstat( "misses", int( max( 0, shotsfired - self.hits ) ) ); + self maps\mp\_bb::bbaddtostat( "shots", shotsfired ); + self maps\mp\_bb::bbaddtostat( "hits", self.hits ); + self.hits = 0; + pixendevent(); +} + +checkhit( sweapon ) +{ + switch ( weaponclass( sweapon ) ) + { + case "smg": + case "rifle": + case "pistol": + case "mg": + self.hits++; + break; + case "spread": + case "pistol spread": + self.hits = 1; + break; + default: + break; + } + + waittillframeend; + + if ( isdefined( self.hitsthismag ) && isdefined( self.hitsthismag[sweapon] ) ) + self thread checkhitsthismag( sweapon ); + + if ( sweapon == "bazooka_mp" || isstrstart( sweapon, "t34" ) || isstrstart( sweapon, "panzer" ) ) + self addweaponstat( sweapon, "hits", 1 ); +} + +watchgrenadeusage() +{ + self endon( "death" ); + self endon( "disconnect" ); + self.throwinggrenade = 0; + self.gotpullbacknotify = 0; + self thread beginothergrenadetracking(); + self thread watchforthrowbacks(); + self thread watchforgrenadeduds(); + self thread watchforgrenadelauncherduds(); + + for (;;) + { + self waittill( "grenade_pullback", weaponname ); + + self addweaponstat( weaponname, "shots", 1 ); + self.hasdonecombat = 1; + self.throwinggrenade = 1; + self.gotpullbacknotify = 1; + + if ( weaponname == "satchel_charge_mp" ) + self thread beginsatcheltracking(); + + self thread begingrenadetracking(); + } +} + +watchmissileusage() +{ + self endon( "death" ); + self endon( "disconnect" ); + level endon( "game_ended" ); + + for (;;) + { + self waittill( "missile_fire", missile, weapon_name ); + + self.hasdonecombat = 1; + assert( isdefined( missile ) ); + level.missileentities[level.missileentities.size] = missile; + missile thread watchmissiledeath(); + } +} + +watchmissiledeath() +{ + self waittill( "death" ); + + arrayremovevalue( level.missileentities, self ); +} + +dropweaponstoground( origin, radius ) +{ + weapons = getdroppedweapons(); + + for ( i = 0; i < weapons.size; i++ ) + { + if ( distancesquared( origin, weapons[i].origin ) < radius * radius ) + { + trace = bullettrace( weapons[i].origin, weapons[i].origin + vectorscale( ( 0, 0, -1 ), 2000.0 ), 0, weapons[i] ); + weapons[i].origin = trace["position"]; + } + } +} + +dropgrenadestoground( origin, radius ) +{ + grenades = getentarray( "grenade", "classname" ); + + for ( i = 0; i < grenades.size; i++ ) + { + if ( distancesquared( origin, grenades[i].origin ) < radius * radius ) + grenades[i] launch( vectorscale( ( 1, 1, 1 ), 5.0 ) ); + } +} + +watchgrenadecancel() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "grenade_fire" ); + + self waittill( "weapon_change" ); + + self.throwinggrenade = 0; + self.gotpullbacknotify = 0; +} + +begingrenadetracking() +{ + self endon( "death" ); + self endon( "disconnect" ); + starttime = gettime(); + self thread watchgrenadecancel(); + + self waittill( "grenade_fire", grenade, weaponname ); + + assert( isdefined( grenade ) ); + level.missileentities[level.missileentities.size] = grenade; + grenade thread watchmissiledeath(); + + if ( grenade maps\mp\gametypes_zm\_weaponobjects::ishacked() ) + return; + + bbprint( "mpequipmentuses", "gametime %d spawnid %d weaponname %s", gettime(), getplayerspawnid( self ), weaponname ); + + if ( gettime() - starttime > 1000 ) + grenade.iscooked = 1; + + switch ( weaponname ) + { + case "sticky_grenade_zm": + case "frag_grenade_zm": + self addweaponstat( weaponname, "used", 1 ); + case "explosive_bolt_zm": + grenade.originalowner = self; + break; + } + + if ( weaponname == "sticky_grenade_zm" || weaponname == "frag_grenade_zm" ) + { + grenade setteam( self.pers["team"] ); + grenade setowner( self ); + } + + self.throwinggrenade = 0; +} + +beginothergrenadetracking() +{ + +} + +checkstucktoplayer( deleteonteamchange, awardscoreevent, weaponname ) +{ + self endon( "death" ); + + self waittill( "stuck_to_player", player ); + + if ( isdefined( player ) ) + { + if ( deleteonteamchange ) + self thread stucktoplayerteamchange( player ); + + if ( awardscoreevent && isdefined( self.originalowner ) ) + { + if ( self.originalowner isenemyplayer( player ) ) + { + + } + } + + self.stucktoplayer = player; + } +} + +checkhatchetbounce() +{ + self endon( "stuck_to_player" ); + self endon( "death" ); + + self waittill( "grenade_bounce" ); + + self.bounced = 1; +} + +stucktoplayerteamchange( player ) +{ + self endon( "death" ); + player endon( "disconnect" ); + originalteam = player.pers["team"]; + + while ( true ) + { + player waittill( "joined_team" ); + + if ( player.pers["team"] != originalteam ) + { + self detonate(); + return; + } + } +} + +beginsatcheltracking() +{ + self endon( "death" ); + self endon( "disconnect" ); + self waittill_any( "grenade_fire", "weapon_change" ); + self.throwinggrenade = 0; +} + +watchforthrowbacks() +{ + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "grenade_fire", grenade, weapname ); + + if ( self.gotpullbacknotify ) + { + self.gotpullbacknotify = 0; + continue; + } + + if ( !issubstr( weapname, "frag_" ) ) + continue; + + grenade.threwback = 1; + grenade.originalowner = self; + } +} + +registergrenadelauncherduddvar( dvarstring, defaultvalue, minvalue, maxvalue ) +{ + dvarstring = "scr_" + dvarstring + "_grenadeLauncherDudTime"; + + if ( getdvar( dvarstring ) == "" ) + setdvar( dvarstring, defaultvalue ); + + if ( getdvarint( dvarstring ) > maxvalue ) + setdvar( dvarstring, maxvalue ); + else if ( getdvarint( dvarstring ) < minvalue ) + setdvar( dvarstring, minvalue ); + + level.grenadelauncherdudtimedvar = dvarstring; + level.grenadelauncherdudtimemin = minvalue; + level.grenadelauncherdudtimemax = maxvalue; + level.grenadelauncherdudtime = getdvarint( level.grenadelauncherdudtimedvar ); +} + +registerthrowngrenadeduddvar( dvarstring, defaultvalue, minvalue, maxvalue ) +{ + dvarstring = "scr_" + dvarstring + "_thrownGrenadeDudTime"; + + if ( getdvar( dvarstring ) == "" ) + setdvar( dvarstring, defaultvalue ); + + if ( getdvarint( dvarstring ) > maxvalue ) + setdvar( dvarstring, maxvalue ); + else if ( getdvarint( dvarstring ) < minvalue ) + setdvar( dvarstring, minvalue ); + + level.throwngrenadedudtimedvar = dvarstring; + level.throwngrenadedudtimemin = minvalue; + level.throwngrenadedudtimemax = maxvalue; + level.throwngrenadedudtime = getdvarint( level.throwngrenadedudtimedvar ); +} + +registerkillstreakdelay( dvarstring, defaultvalue, minvalue, maxvalue ) +{ + dvarstring = "scr_" + dvarstring + "_killstreakDelayTime"; + + if ( getdvar( dvarstring ) == "" ) + setdvar( dvarstring, defaultvalue ); + + if ( getdvarint( dvarstring ) > maxvalue ) + setdvar( dvarstring, maxvalue ); + else if ( getdvarint( dvarstring ) < minvalue ) + setdvar( dvarstring, minvalue ); + + level.killstreakrounddelay = getdvarint( dvarstring ); +} + +turngrenadeintoadud( weapname, isthrowngrenade, player ) +{ + if ( level.grenadelauncherdudtime >= maps\mp\gametypes_zm\_globallogic_utils::gettimepassed() / 1000 && !isthrowngrenade ) + { + if ( issubstr( weapname, "gl_" ) || weapname == "china_lake_mp" ) + { + timeleft = int( level.grenadelauncherdudtime - maps\mp\gametypes_zm\_globallogic_utils::gettimepassed() / 1000 ); + + if ( !timeleft ) + timeleft = 1; + + player iprintlnbold( &"MP_LAUNCHER_UNAVAILABLE_FOR_N", " " + timeleft + " ", &"EXE_SECONDS" ); + self makegrenadedud(); + } + } + else if ( level.throwngrenadedudtime >= maps\mp\gametypes_zm\_globallogic_utils::gettimepassed() / 1000 && isthrowngrenade ) + { + if ( weapname == "frag_grenade_mp" || weapname == "sticky_grenade_mp" ) + { + if ( isdefined( player.suicide ) && player.suicide ) + return; + + timeleft = int( level.throwngrenadedudtime - maps\mp\gametypes_zm\_globallogic_utils::gettimepassed() / 1000 ); + + if ( !timeleft ) + timeleft = 1; + + player iprintlnbold( &"MP_GRENADE_UNAVAILABLE_FOR_N", " " + timeleft + " ", &"EXE_SECONDS" ); + self makegrenadedud(); + } + } +} + +watchforgrenadeduds() +{ + self endon( "spawned_player" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "grenade_fire", grenade, weapname ); + + grenade turngrenadeintoadud( weapname, 1, self ); + } +} + +watchforgrenadelauncherduds() +{ + self endon( "spawned_player" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "grenade_launcher_fire", grenade, weapname ); + + grenade turngrenadeintoadud( weapname, 0, self ); + } +} + +getdamageableents( pos, radius, dolos, startradius ) +{ + ents = []; + + if ( !isdefined( dolos ) ) + dolos = 0; + + if ( !isdefined( startradius ) ) + startradius = 0; + + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + if ( !isalive( players[i] ) || players[i].sessionstate != "playing" ) + continue; + + playerpos = players[i].origin + vectorscale( ( 0, 0, 1 ), 32.0 ); + distsq = distancesquared( pos, playerpos ); + + if ( distsq < radius * radius && ( !dolos || weapondamagetracepassed( pos, playerpos, startradius, undefined ) ) ) + { + newent = spawnstruct(); + newent.isplayer = 1; + newent.isadestructable = 0; + newent.isadestructible = 0; + newent.isactor = 0; + newent.entity = players[i]; + newent.damagecenter = playerpos; + ents[ents.size] = newent; + } + } + + grenades = getentarray( "grenade", "classname" ); + + for ( i = 0; i < grenades.size; i++ ) + { + entpos = grenades[i].origin; + distsq = distancesquared( pos, entpos ); + + if ( distsq < radius * radius && ( !dolos || weapondamagetracepassed( pos, entpos, startradius, grenades[i] ) ) ) + { + newent = spawnstruct(); + newent.isplayer = 0; + newent.isadestructable = 0; + newent.isadestructible = 0; + newent.isactor = 0; + newent.entity = grenades[i]; + newent.damagecenter = entpos; + ents[ents.size] = newent; + } + } + + destructibles = getentarray( "destructible", "targetname" ); + + for ( i = 0; i < destructibles.size; i++ ) + { + entpos = destructibles[i].origin; + distsq = distancesquared( pos, entpos ); + + if ( distsq < radius * radius && ( !dolos || weapondamagetracepassed( pos, entpos, startradius, destructibles[i] ) ) ) + { + newent = spawnstruct(); + newent.isplayer = 0; + newent.isadestructable = 0; + newent.isadestructible = 1; + newent.isactor = 0; + newent.entity = destructibles[i]; + newent.damagecenter = entpos; + ents[ents.size] = newent; + } + } + + destructables = getentarray( "destructable", "targetname" ); + + for ( i = 0; i < destructables.size; i++ ) + { + entpos = destructables[i].origin; + distsq = distancesquared( pos, entpos ); + + if ( distsq < radius * radius && ( !dolos || weapondamagetracepassed( pos, entpos, startradius, destructables[i] ) ) ) + { + newent = spawnstruct(); + newent.isplayer = 0; + newent.isadestructable = 1; + newent.isadestructible = 0; + newent.isactor = 0; + newent.entity = destructables[i]; + newent.damagecenter = entpos; + ents[ents.size] = newent; + } + } + + return ents; +} + +weapondamagetracepassed( from, to, startradius, ignore ) +{ + trace = weapondamagetrace( from, to, startradius, ignore ); + return trace["fraction"] == 1; +} + +weapondamagetrace( from, to, startradius, ignore ) +{ + midpos = undefined; + diff = to - from; + + if ( lengthsquared( diff ) < startradius * startradius ) + midpos = to; + + dir = vectornormalize( diff ); + midpos = from + ( dir[0] * startradius, dir[1] * startradius, dir[2] * startradius ); + trace = bullettrace( midpos, to, 0, ignore ); + + if ( getdvarint( _hash_A1C40B1 ) != 0 ) + { + if ( trace["fraction"] == 1 ) + thread debugline( midpos, to, ( 1, 1, 1 ) ); + else + { + thread debugline( midpos, trace["position"], ( 1, 0.9, 0.8 ) ); + thread debugline( trace["position"], to, ( 1, 0.4, 0.3 ) ); + } + } + + return trace; +} + +damageent( einflictor, eattacker, idamage, smeansofdeath, sweapon, damagepos, damagedir ) +{ + if ( self.isplayer ) + { + self.damageorigin = damagepos; + self.entity thread [[ level.callbackplayerdamage ]]( einflictor, eattacker, idamage, 0, smeansofdeath, sweapon, damagepos, damagedir, "none", 0, 0 ); + } + else if ( self.isactor ) + { + self.damageorigin = damagepos; + self.entity thread [[ level.callbackactordamage ]]( einflictor, eattacker, idamage, 0, smeansofdeath, sweapon, damagepos, damagedir, "none", 0, 0 ); + } + else if ( self.isadestructible ) + { + self.damageorigin = damagepos; + self.entity dodamage( idamage, damagepos, eattacker, einflictor, 0, smeansofdeath, 0, sweapon ); + } + else + { + if ( self.isadestructable && ( sweapon == "claymore_mp" || sweapon == "airstrike_mp" ) ) + return; + + self.entity damage_notify_wrapper( idamage, eattacker, ( 0, 0, 0 ), ( 0, 0, 0 ), "mod_explosive", "", "" ); + } +} + +debugline( a, b, color ) +{ +/# + for ( i = 0; i < 600; i++ ) + { + line( a, b, color ); + wait 0.05; + } +#/ +} + +onweapondamage( eattacker, einflictor, sweapon, meansofdeath, damage ) +{ + self endon( "death" ); + self endon( "disconnect" ); + + switch ( sweapon ) + { + case "concussion_grenade_mp": + radius = 512; + + if ( self == eattacker ) + radius *= 0.5; + + scale = 1 - distance( self.origin, einflictor.origin ) / radius; + + if ( scale < 0 ) + scale = 0; + + time = 2 + 4 * scale; + wait 0.05; + + if ( self hasperk( "specialty_stunprotection" ) ) + time *= 0.1; + + self thread playconcussionsound( time ); + + if ( self mayapplyscreeneffect() ) + self shellshock( "concussion_grenade_mp", time, 0 ); + + self.concussionendtime = gettime() + time * 1000; + break; + default: + maps\mp\gametypes_zm\_shellshock::shellshockondamage( meansofdeath, damage ); + break; + } +} + +playconcussionsound( duration ) +{ + self endon( "death" ); + self endon( "disconnect" ); + concussionsound = spawn( "script_origin", ( 0, 0, 1 ) ); + concussionsound.origin = self.origin; + concussionsound linkto( self ); + concussionsound thread deleteentonownerdeath( self ); + concussionsound playsound( "" ); + concussionsound playloopsound( "" ); + + if ( duration > 0.5 ) + wait( duration - 0.5 ); + + concussionsound playsound( "" ); + concussionsound stoploopsound( 0.5 ); + wait 0.5; + concussionsound notify( "delete" ); + concussionsound delete(); +} + +deleteentonownerdeath( owner ) +{ + self endon( "delete" ); + + owner waittill( "death" ); + + self delete(); +} + +monitor_dog_special_grenades() +{ + +} + +isprimaryweapon( weaponname ) +{ + return isdefined( level.primary_weapon_array[weaponname] ); +} + +issidearm( weaponname ) +{ + return isdefined( level.side_arm_array[weaponname] ); +} + +isinventory( weaponname ) +{ + return isdefined( level.inventory_array[weaponname] ); +} + +isgrenade( weaponname ) +{ + return isdefined( level.grenade_array[weaponname] ); +} + +isexplosivebulletweapon( weaponname ) +{ + if ( weaponname == "chopper_minigun_mp" || weaponname == "cobra_20mm_mp" || weaponname == "littlebird_guard_minigun_mp" || weaponname == "cobra_20mm_comlink_mp" ) + return true; + + return false; +} + +getweaponclass_array( current ) +{ + if ( isprimaryweapon( current ) ) + return level.primary_weapon_array; + else if ( issidearm( current ) ) + return level.side_arm_array; + else if ( isgrenade( current ) ) + return level.grenade_array; + else + return level.inventory_array; +} + +updatestowedweapon() +{ + self endon( "spawned" ); + self endon( "killed_player" ); + self endon( "disconnect" ); + self.tag_stowed_back = undefined; + self.tag_stowed_hip = undefined; + team = self.pers["team"]; + class = self.pers["class"]; + + while ( true ) + { + self waittill( "weapon_change", newweapon ); + + self.weapon_array_primary = []; + self.weapon_array_sidearm = []; + self.weapon_array_grenade = []; + self.weapon_array_inventory = []; + weaponslist = self getweaponslist(); + + for ( idx = 0; idx < weaponslist.size; idx++ ) + { + switch ( weaponslist[idx] ) + { + case "zipline_mp": + case "mp40_blinged_mp": + case "minigun_mp": + case "m32_mp": + case "m220_tow_mp": + case "m202_flash_mp": + continue; + default: + break; + } + + if ( isprimaryweapon( weaponslist[idx] ) ) + { + self.weapon_array_primary[self.weapon_array_primary.size] = weaponslist[idx]; + continue; + } + + if ( issidearm( weaponslist[idx] ) ) + { + self.weapon_array_sidearm[self.weapon_array_sidearm.size] = weaponslist[idx]; + continue; + } + + if ( isgrenade( weaponslist[idx] ) ) + { + self.weapon_array_grenade[self.weapon_array_grenade.size] = weaponslist[idx]; + continue; + } + + if ( isinventory( weaponslist[idx] ) ) + { + self.weapon_array_inventory[self.weapon_array_inventory.size] = weaponslist[idx]; + continue; + } + + if ( isweaponprimary( weaponslist[idx] ) ) + self.weapon_array_primary[self.weapon_array_primary.size] = weaponslist[idx]; + } + + detach_all_weapons(); + stow_on_back(); + stow_on_hip(); + } +} + +forcestowedweaponupdate() +{ + detach_all_weapons(); + stow_on_back(); + stow_on_hip(); +} + +detachcarryobjectmodel() +{ + if ( isdefined( self.carryobject ) && isdefined( self.carryobject maps\mp\gametypes_zm\_gameobjects::getvisiblecarriermodel() ) ) + { + if ( isdefined( self.tag_stowed_back ) ) + { + self detach( self.tag_stowed_back, "tag_stowed_back" ); + self.tag_stowed_back = undefined; + } + } +} + +detach_all_weapons() +{ + if ( isdefined( self.tag_stowed_back ) ) + { + clear_weapon = 1; + + if ( isdefined( self.carryobject ) ) + { + carriermodel = self.carryobject maps\mp\gametypes_zm\_gameobjects::getvisiblecarriermodel(); + + if ( isdefined( carriermodel ) && carriermodel == self.tag_stowed_back ) + { + self detach( self.tag_stowed_back, "tag_stowed_back" ); + clear_weapon = 0; + } + } + + if ( clear_weapon ) + self clearstowedweapon(); + + self.tag_stowed_back = undefined; + } + + if ( isdefined( self.tag_stowed_hip ) ) + { + detach_model = getweaponmodel( self.tag_stowed_hip ); + self detach( detach_model, "tag_stowed_hip_rear" ); + self.tag_stowed_hip = undefined; + } +} + +non_stowed_weapon( weapon ) +{ + if ( self hasweapon( "knife_ballistic_mp" ) && weapon != "knife_ballistic_mp" ) + return true; + + if ( self hasweapon( "knife_held_mp" ) && weapon != "knife_held_mp" ) + return true; + + return false; +} + +stow_on_back( current ) +{ + current = self getcurrentweapon(); + self.tag_stowed_back = undefined; + weaponoptions = 0; + index_weapon = ""; + + if ( isdefined( self.carryobject ) && isdefined( self.carryobject maps\mp\gametypes_zm\_gameobjects::getvisiblecarriermodel() ) ) + { + self.tag_stowed_back = self.carryobject maps\mp\gametypes_zm\_gameobjects::getvisiblecarriermodel(); + self attach( self.tag_stowed_back, "tag_stowed_back", 1 ); + return; + } + else if ( non_stowed_weapon( current ) || self.hasriotshield ) + return; + else + { + for ( idx = 0; idx < self.weapon_array_primary.size; idx++ ) + { + temp_index_weapon = self.weapon_array_primary[idx]; + assert( isdefined( temp_index_weapon ), "Primary weapon list corrupted." ); + + if ( temp_index_weapon == current ) + continue; + + if ( current == "none" ) + continue; + + if ( issubstr( current, "gl_" ) || issubstr( temp_index_weapon, "gl_" ) || issubstr( current, "mk_" ) || issubstr( temp_index_weapon, "mk_" ) || issubstr( current, "dualoptic_" ) || issubstr( temp_index_weapon, "dualoptic_" ) || issubstr( current, "ft_" ) || issubstr( temp_index_weapon, "ft_" ) ) + { + index_weapon_tok = strtok( temp_index_weapon, "_" ); + current_tok = strtok( current, "_" ); + + for ( i = 0; i < index_weapon_tok.size; i++ ) + { + if ( !issubstr( current, index_weapon_tok[i] ) || index_weapon_tok.size != current_tok.size ) + { + i = 0; + break; + } + } + + if ( i == index_weapon_tok.size ) + continue; + } + + index_weapon = temp_index_weapon; + assert( isdefined( self.curclass ), "Player missing current class" ); + + if ( issubstr( index_weapon, self.pers["primaryWeapon"] ) && issubstr( self.curclass, "CUSTOM" ) ) + self.tag_stowed_back = getweaponmodel( index_weapon, self getloadoutitem( self.class_num, "primarycamo" ) ); + else + { + stowedmodelindex = getweaponstowedmodel( index_weapon ); + self.tag_stowed_back = getweaponmodel( index_weapon, stowedmodelindex ); + } + + if ( issubstr( self.curclass, "CUSTOM" ) ) + weaponoptions = self calcweaponoptions( self.class_num, 0 ); + } + } + + if ( !isdefined( self.tag_stowed_back ) ) + return; + + self setstowedweapon( index_weapon ); +} + +stow_on_hip() +{ + current = self getcurrentweapon(); + self.tag_stowed_hip = undefined; + + for ( idx = 0; idx < self.weapon_array_inventory.size; idx++ ) + { + if ( self.weapon_array_inventory[idx] == current ) + continue; + + if ( !self getweaponammostock( self.weapon_array_inventory[idx] ) ) + continue; + + self.tag_stowed_hip = self.weapon_array_inventory[idx]; + } + + if ( !isdefined( self.tag_stowed_hip ) ) + return; + + if ( self.tag_stowed_hip == "satchel_charge_mp" || self.tag_stowed_hip == "claymore_mp" || self.tag_stowed_hip == "bouncingbetty_mp" ) + { + self.tag_stowed_hip = undefined; + return; + } + + weapon_model = getweaponmodel( self.tag_stowed_hip ); + self attach( weapon_model, "tag_stowed_hip_rear", 1 ); +} + +stow_inventory( inventories, current ) +{ + if ( isdefined( self.inventory_tag ) ) + { + detach_model = getweaponmodel( self.inventory_tag ); + self detach( detach_model, "tag_stowed_hip_rear" ); + self.inventory_tag = undefined; + } + + if ( !isdefined( inventories[0] ) || self getweaponammostock( inventories[0] ) == 0 ) + return; + + if ( inventories[0] != current ) + { + self.inventory_tag = inventories[0]; + weapon_model = getweaponmodel( self.inventory_tag ); + self attach( weapon_model, "tag_stowed_hip_rear", 1 ); + } +} + +weapons_get_dvar_int( dvar, def ) +{ + return int( weapons_get_dvar( dvar, def ) ); +} + +weapons_get_dvar( dvar, def ) +{ + if ( getdvar( dvar ) != "" ) + return getdvarfloat( dvar ); + else + { + setdvar( dvar, def ); + return def; + } +} + +player_is_driver() +{ + if ( !isalive( self ) ) + return false; + + if ( self isremotecontrolling() ) + return false; + + vehicle = self getvehicleoccupied(); + + if ( isdefined( vehicle ) ) + { + seat = vehicle getoccupantseat( self ); + + if ( isdefined( seat ) && seat == 0 ) + return true; + } + + return false; +} + +loadout_get_class_num() +{ + assert( isplayer( self ) ); + assert( isdefined( self.class ) ); + + if ( isdefined( level.classtoclassnum[self.class] ) ) + return level.classtoclassnum[self.class]; + + class_num = int( self.class[self.class.size - 1] ) - 1; + + if ( -1 == class_num ) + class_num = 9; + + return class_num; +} + +loadout_get_offhand_weapon( stat ) +{ + if ( isdefined( level.givecustomloadout ) ) + return "weapon_null_mp"; + + class_num = self loadout_get_class_num(); + index = 0; + + if ( isdefined( level.tbl_weaponids[index] ) && isdefined( level.tbl_weaponids[index]["reference"] ) ) + return level.tbl_weaponids[index]["reference"] + "_mp"; + + return "weapon_null_mp"; +} + +loadout_get_offhand_count( stat ) +{ + if ( isdefined( level.givecustomloadout ) ) + return 0; + + class_num = self loadout_get_class_num(); + count = 0; + return count; +} + +scavenger_think() +{ + self endon( "death" ); + + self waittill( "scavenger", player ); + + primary_weapons = player getweaponslistprimaries(); + offhand_weapons_and_alts = array_exclude( player getweaponslist( 1 ), primary_weapons ); + arrayremovevalue( offhand_weapons_and_alts, "knife_mp" ); + player playsound( "fly_equipment_pickup_npc" ); + player playlocalsound( "fly_equipment_pickup_plr" ); + player.scavenger_icon.alpha = 1; + player.scavenger_icon fadeovertime( 2.5 ); + player.scavenger_icon.alpha = 0; + scavenger_lethal_proc = 1; + scavenger_tactical_proc = 1; + + if ( !isdefined( player.scavenger_lethal_proc ) ) + { + player.scavenger_lethal_proc = 0; + player.scavenger_tactical_proc = 0; + } + + loadout_primary = player loadout_get_offhand_weapon( "primarygrenade" ); + loadout_primary_count = player loadout_get_offhand_count( "primarygrenadecount" ); + loadout_secondary = player loadout_get_offhand_weapon( "specialgrenade" ); + loadout_secondary_count = player loadout_get_offhand_count( "specialgrenadeCount" ); + + for ( i = 0; i < offhand_weapons_and_alts.size; i++ ) + { + weapon = offhand_weapons_and_alts[i]; + + if ( ishackweapon( weapon ) ) + continue; + + switch ( weapon ) + { + case "sticky_grenade_mp": + case "satchel_charge_mp": + case "hatchet_mp": + case "frag_grenade_mp": + case "claymore_mp": + case "bouncingbetty_mp": + if ( isdefined( player.grenadetypeprimarycount ) && player.grenadetypeprimarycount < 1 ) + break; + + if ( player getweaponammostock( weapon ) != loadout_primary_count ) + { + if ( player.scavenger_lethal_proc < scavenger_lethal_proc ) + { + player.scavenger_lethal_proc++; + break; + } + + player.scavenger_lethal_proc = 0; + player.scavenger_tactical_proc = 0; + } + case "willy_pete_mp": + case "trophy_system_mp": + case "tabun_gas_mp": + case "sensor_grenade_mp": + case "proximity_grenade_mp": + case "pda_hack_mp": + case "nightingale_mp": + case "flash_grenade_mp": + case "emp_grenade_mp": + case "concussion_grenade_mp": + if ( isdefined( player.grenadetypesecondarycount ) && player.grenadetypesecondarycount < 1 ) + break; + + if ( weapon == loadout_secondary && player getweaponammostock( weapon ) != loadout_secondary_count ) + { + if ( player.scavenger_tactical_proc < scavenger_tactical_proc ) + { + player.scavenger_tactical_proc++; + break; + } + + player.scavenger_tactical_proc = 0; + player.scavenger_lethal_proc = 0; + } + + maxammo = weaponmaxammo( weapon ); + stock = player getweaponammostock( weapon ); + + if ( isdefined( level.customloadoutscavenge ) ) + maxammo = self [[ level.customloadoutscavenge ]]( weapon ); + else if ( weapon == loadout_primary ) + maxammo = loadout_primary_count; + else if ( weapon == loadout_secondary ) + maxammo = loadout_secondary_count; + + if ( stock < maxammo ) + { + ammo = stock + 1; + + if ( ammo > maxammo ) + ammo = maxammo; + + player setweaponammostock( weapon, ammo ); + player thread maps\mp\_challenges::scavengedgrenade(); + } + + break; + default: + if ( islauncherweapon( weapon ) ) + { + stock = player getweaponammostock( weapon ); + start = player getfractionstartammo( weapon ); + clip = weaponclipsize( weapon ); + clip *= getdvarfloatdefault( "scavenger_clip_multiplier", 2 ); + clip = int( clip ); + maxammo = weaponmaxammo( weapon ); + + if ( stock < maxammo - clip ) + { + ammo = stock + clip; + player setweaponammostock( weapon, ammo ); + } + else + player setweaponammostock( weapon, maxammo ); + } + + break; + } + } + + for ( i = 0; i < primary_weapons.size; i++ ) + { + weapon = primary_weapons[i]; + + if ( ishackweapon( weapon ) || weapon == "kniferang_mp" ) + continue; + + stock = player getweaponammostock( weapon ); + start = player getfractionstartammo( weapon ); + clip = weaponclipsize( weapon ); + clip *= getdvarfloatdefault( "scavenger_clip_multiplier", 2 ); + clip = int( clip ); + maxammo = weaponmaxammo( weapon ); + + if ( stock < maxammo - clip ) + { + ammo = stock + clip; + player setweaponammostock( weapon, ammo ); + continue; + } + + player setweaponammostock( weapon, maxammo ); + } +} + +scavenger_hud_create() +{ + if ( level.wagermatch ) + return; + + self.scavenger_icon = newclienthudelem( self ); + self.scavenger_icon.horzalign = "center"; + self.scavenger_icon.vertalign = "middle"; + self.scavenger_icon.x = -16; + self.scavenger_icon.y = 16; + self.scavenger_icon.alpha = 0; + width = 32; + height = 16; + + if ( self issplitscreen() ) + { + width = int( width * 0.5 ); + height = int( height * 0.5 ); + self.scavenger_icon.x = -8; + } + + self.scavenger_icon setshader( "hud_scavenger_pickup", width, height ); +} + +dropscavengerfordeath( attacker ) +{ + if ( sessionmodeiszombiesgame() ) + return; + + if ( level.wagermatch ) + return; + + if ( !isdefined( attacker ) ) + return; + + if ( attacker == self ) + return; + + if ( level.gametype == "hack" ) + item = self dropscavengeritem( "scavenger_item_hack_mp" ); + else + item = self dropscavengeritem( "scavenger_item_mp" ); + + item thread scavenger_think(); +} + +addlimitedweapon( weapon_name, owner, num_drops ) +{ + limited_info = spawnstruct(); + limited_info.weapon = weapon_name; + limited_info.drops = num_drops; + owner.limited_info = limited_info; +} + +shoulddroplimitedweapon( weapon_name, owner ) +{ + limited_info = owner.limited_info; + + if ( !isdefined( limited_info ) ) + return true; + + if ( limited_info.weapon != weapon_name ) + return true; + + if ( limited_info.drops <= 0 ) + return false; + + return true; +} + +droplimitedweapon( weapon_name, owner, item ) +{ + limited_info = owner.limited_info; + + if ( !isdefined( limited_info ) ) + return; + + if ( limited_info.weapon != weapon_name ) + return; + + limited_info.drops -= 1; + owner.limited_info = undefined; + item thread limitedpickup( limited_info ); +} + +limitedpickup( limited_info ) +{ + self endon( "death" ); + + self waittill( "trigger", player, item ); + + if ( !isdefined( item ) ) + return; + + player.limited_info = limited_info; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_zm_gametype.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_zm_gametype.gsc new file mode 100644 index 0000000..2d71ad0 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/_zm_gametype.gsc @@ -0,0 +1,1938 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_globallogic; +#include maps\mp\gametypes_zm\_callbacksetup; +#include maps\mp\gametypes_zm\_weapons; +#include maps\mp\gametypes_zm\_gameobjects; +#include maps\mp\gametypes_zm\_globallogic_spawn; +#include maps\mp\gametypes_zm\_globallogic_defaults; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\gametypes_zm\_hud_message; +#include maps\mp\gametypes_zm\_globallogic_ui; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\gametypes_zm\_hud; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\gametypes_zm\_spawning; +#include maps\mp\zombies\_zm_blockers; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zombies\_zm_spawner; + +main() +{ + maps\mp\gametypes_zm\_globallogic::init(); + maps\mp\gametypes_zm\_callbacksetup::setupcallbacks(); + globallogic_setupdefault_zombiecallbacks(); + menu_init(); + registerroundlimit( 1, 1 ); + registertimelimit( 0, 0 ); + registerscorelimit( 0, 0 ); + registerroundwinlimit( 0, 0 ); + registernumlives( 1, 1 ); + maps\mp\gametypes_zm\_weapons::registergrenadelauncherduddvar( level.gametype, 10, 0, 1440 ); + maps\mp\gametypes_zm\_weapons::registerthrowngrenadeduddvar( level.gametype, 0, 0, 1440 ); + maps\mp\gametypes_zm\_weapons::registerkillstreakdelay( level.gametype, 0, 0, 1440 ); + maps\mp\gametypes_zm\_globallogic::registerfriendlyfiredelay( level.gametype, 15, 0, 1440 ); + level.takelivesondeath = 1; + level.teambased = 1; + level.disableprematchmessages = 1; + level.disablemomentum = 1; + level.overrideteamscore = 0; + level.overrideplayerscore = 0; + level.displayhalftimetext = 0; + level.displayroundendtext = 0; + level.allowannouncer = 0; + level.endgameonscorelimit = 0; + level.endgameontimelimit = 0; + level.resetplayerscoreeveryround = 1; + level.doprematch = 0; + level.nopersistence = 1; + level.scoreroundbased = 0; + level.forceautoassign = 1; + level.dontshowendreason = 1; + level.forceallallies = 0; + level.allow_teamchange = 0; + setdvar( "scr_disable_team_selection", 1 ); + makedvarserverinfo( "scr_disable_team_selection", 1 ); + setmatchflag( "hud_zombie", 1 ); + setdvar( "scr_disable_weapondrop", 1 ); + setdvar( "scr_xpscale", 0 ); + level.onstartgametype = ::onstartgametype; + level.onspawnplayer = ::blank; + level.onspawnplayerunified = ::onspawnplayerunified; + level.onroundendgame = ::onroundendgame; + level.mayspawn = ::mayspawn; + set_game_var( "ZM_roundLimit", 1 ); + set_game_var( "ZM_scoreLimit", 1 ); + set_game_var( "_team1_num", 0 ); + set_game_var( "_team2_num", 0 ); + map_name = level.script; + mode = getdvar( "ui_gametype" ); + + if ( ( !isdefined( mode ) || mode == "" ) && isdefined( level.default_game_mode ) ) + mode = level.default_game_mode; + + set_gamemode_var_once( "mode", mode ); + set_game_var_once( "side_selection", 1 ); + location = getdvar( "ui_zm_mapstartlocation" ); + + if ( location == "" && isdefined( level.default_start_location ) ) + location = level.default_start_location; + + set_gamemode_var_once( "location", location ); + set_gamemode_var_once( "randomize_mode", getdvarint( "zm_rand_mode" ) ); + set_gamemode_var_once( "randomize_location", getdvarint( "zm_rand_loc" ) ); + set_gamemode_var_once( "team_1_score", 0 ); + set_gamemode_var_once( "team_2_score", 0 ); + set_gamemode_var_once( "current_round", 0 ); + set_gamemode_var_once( "rules_read", 0 ); + set_game_var_once( "switchedsides", 0 ); + gametype = getdvar( "ui_gametype" ); + game["dialog"]["gametype"] = gametype + "_start"; + game["dialog"]["gametype_hardcore"] = gametype + "_start"; + game["dialog"]["offense_obj"] = "generic_boost"; + game["dialog"]["defense_obj"] = "generic_boost"; + set_gamemode_var( "pre_init_zombie_spawn_func", undefined ); + set_gamemode_var( "post_init_zombie_spawn_func", undefined ); + set_gamemode_var( "match_end_notify", undefined ); + set_gamemode_var( "match_end_func", undefined ); + setscoreboardcolumns( "score", "kills", "downs", "revives", "headshots" ); + onplayerconnect_callback( ::onplayerconnect_check_for_hotjoin ); +} + +game_objects_allowed( mode, location ) +{ + allowed[0] = mode; + entities = getentarray(); + + foreach ( entity in entities ) + { + if ( isdefined( entity.script_gameobjectname ) ) + { + isallowed = maps\mp\gametypes_zm\_gameobjects::entity_is_allowed( entity, allowed ); + isvalidlocation = maps\mp\gametypes_zm\_gameobjects::location_is_allowed( entity, location ); + + if ( !isallowed || !isvalidlocation && !is_classic() ) + { + if ( isdefined( entity.spawnflags ) && entity.spawnflags == 1 ) + { + if ( isdefined( entity.classname ) && entity.classname != "trigger_multiple" ) + entity connectpaths(); + } + + entity delete(); + continue; + } + + if ( isdefined( entity.script_vector ) ) + { + entity moveto( entity.origin + entity.script_vector, 0.05 ); + + entity waittill( "movedone" ); + + if ( isdefined( entity.spawnflags ) && entity.spawnflags == 1 ) + entity disconnectpaths(); + + continue; + } + + if ( isdefined( entity.spawnflags ) && entity.spawnflags == 1 ) + { + if ( isdefined( entity.classname ) && entity.classname != "trigger_multiple" ) + entity connectpaths(); + } + } + } +} + +post_init_gametype() +{ + if ( isdefined( level.gamemode_map_postinit ) ) + { + if ( isdefined( level.gamemode_map_postinit[level.scr_zm_ui_gametype] ) ) + [[ level.gamemode_map_postinit[level.scr_zm_ui_gametype] ]](); + } +} + +post_gametype_main( mode ) +{ + set_game_var( "ZM_roundWinLimit", get_game_var( "ZM_roundLimit" ) * 0.5 ); + level.roundlimit = get_game_var( "ZM_roundLimit" ); + + if ( isdefined( level.gamemode_map_preinit ) ) + { + if ( isdefined( level.gamemode_map_preinit[mode] ) ) + [[ level.gamemode_map_preinit[mode] ]](); + } +} + +globallogic_setupdefault_zombiecallbacks() +{ + level.spawnplayer = maps\mp\gametypes_zm\_globallogic_spawn::spawnplayer; + level.spawnplayerprediction = maps\mp\gametypes_zm\_globallogic_spawn::spawnplayerprediction; + level.spawnclient = maps\mp\gametypes_zm\_globallogic_spawn::spawnclient; + level.spawnspectator = maps\mp\gametypes_zm\_globallogic_spawn::spawnspectator; + level.spawnintermission = maps\mp\gametypes_zm\_globallogic_spawn::spawnintermission; + level.onplayerscore = ::blank; + level.onteamscore = ::blank; + level.wavespawntimer = ::wavespawntimer; + level.onspawnplayer = ::blank; + level.onspawnplayerunified = ::blank; + level.onspawnspectator = ::onspawnspectator; + level.onspawnintermission = ::onspawnintermission; + level.onrespawndelay = ::blank; + level.onforfeit = ::blank; + level.ontimelimit = ::blank; + level.onscorelimit = ::blank; + level.ondeadevent = ::ondeadevent; + level.ononeleftevent = ::blank; + level.giveteamscore = ::blank; + level.giveplayerscore = ::blank; + level.gettimelimit = maps\mp\gametypes_zm\_globallogic_defaults::default_gettimelimit; + level.getteamkillpenalty = ::blank; + level.getteamkillscore = ::blank; + level.iskillboosting = ::blank; + level._setteamscore = maps\mp\gametypes_zm\_globallogic_score::_setteamscore; + level._setplayerscore = ::blank; + level._getteamscore = ::blank; + level._getplayerscore = ::blank; + level.onprecachegametype = ::blank; + level.onstartgametype = ::blank; + level.onplayerconnect = ::blank; + level.onplayerdisconnect = ::onplayerdisconnect; + level.onplayerdamage = ::blank; + level.onplayerkilled = ::blank; + level.onplayerkilledextraunthreadedcbs = []; + level.onteamoutcomenotify = maps\mp\gametypes_zm\_hud_message::teamoutcomenotifyzombie; + level.onoutcomenotify = ::blank; + level.onteamwageroutcomenotify = ::blank; + level.onwageroutcomenotify = ::blank; + level.onendgame = ::onendgame; + level.onroundendgame = ::blank; + level.onmedalawarded = ::blank; + level.autoassign = maps\mp\gametypes_zm\_globallogic_ui::menuautoassign; + level.spectator = maps\mp\gametypes_zm\_globallogic_ui::menuspectator; + level.class = maps\mp\gametypes_zm\_globallogic_ui::menuclass; + level.allies = ::menuallieszombies; + level.teammenu = maps\mp\gametypes_zm\_globallogic_ui::menuteam; + level.callbackactorkilled = ::blank; + level.callbackvehicledamage = ::blank; +} + +setup_standard_objects( location ) +{ + structs = getstructarray( "game_mode_object" ); + + foreach ( struct in structs ) + { + if ( isdefined( struct.script_noteworthy ) && struct.script_noteworthy != location ) + continue; + + if ( isdefined( struct.script_string ) ) + { + keep = 0; + tokens = strtok( struct.script_string, " " ); + + foreach ( token in tokens ) + { + if ( token == level.scr_zm_ui_gametype && token != "zstandard" ) + { + keep = 1; + continue; + } + + if ( token == "zstandard" ) + keep = 1; + } + + if ( !keep ) + continue; + } + + barricade = spawn( "script_model", struct.origin ); + barricade.angles = struct.angles; + barricade setmodel( struct.script_parameters ); + } + + objects = getentarray(); + + foreach ( object in objects ) + { + if ( !object is_survival_object() ) + continue; + + if ( isdefined( object.spawnflags ) && object.spawnflags == 1 && object.classname != "trigger_multiple" ) + object connectpaths(); + + object delete(); + } + + if ( isdefined( level._classic_setup_func ) ) + [[ level._classic_setup_func ]](); +} + +is_survival_object() +{ + if ( !isdefined( self.script_parameters ) ) + return 0; + + tokens = strtok( self.script_parameters, " " ); + remove = 0; + + foreach ( token in tokens ) + { + if ( token == "survival_remove" ) + remove = 1; + } + + return remove; +} + +game_module_player_damage_callback( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + self.last_damage_from_zombie_or_player = 0; + + if ( isdefined( eattacker ) ) + { + if ( isplayer( eattacker ) && eattacker == self ) + return; + + if ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie || isplayer( eattacker ) ) + self.last_damage_from_zombie_or_player = 1; + } + + if ( isdefined( self._being_shellshocked ) && self._being_shellshocked || self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + return; + + if ( isplayer( eattacker ) && isdefined( eattacker._encounters_team ) && eattacker._encounters_team != self._encounters_team ) + { + if ( isdefined( self.hasriotshield ) && self.hasriotshield && isdefined( vdir ) ) + { + if ( isdefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped ) + { + if ( self maps\mp\zombies\_zm::player_shield_facing_attacker( vdir, 0.2 ) && isdefined( self.player_shield_apply_damage ) ) + return; + } + else if ( !isdefined( self.riotshieldentity ) ) + { + if ( !self maps\mp\zombies\_zm::player_shield_facing_attacker( vdir, -0.2 ) && isdefined( self.player_shield_apply_damage ) ) + return; + } + } + + if ( isdefined( level._game_module_player_damage_grief_callback ) ) + self [[ level._game_module_player_damage_grief_callback ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); + + if ( isdefined( level._effect["butterflies"] ) ) + { + if ( isdefined( sweapon ) && weapontype( sweapon ) == "grenade" ) + playfx( level._effect["butterflies"], self.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + else + playfx( level._effect["butterflies"], vpoint, vdir ); + } + + self thread do_game_mode_shellshock(); + self playsound( "zmb_player_hit_ding" ); + } +} + +do_game_mode_shellshock() +{ + self endon( "disconnect" ); + self._being_shellshocked = 1; + self shellshock( "grief_stab_zm", 0.75 ); + wait 0.75; + self._being_shellshocked = 0; +} + +add_map_gamemode( mode, preinit_func, precache_func, main_func ) +{ + if ( !isdefined( level.gamemode_map_location_init ) ) + level.gamemode_map_location_init = []; + + if ( !isdefined( level.gamemode_map_location_main ) ) + level.gamemode_map_location_main = []; + + if ( !isdefined( level.gamemode_map_preinit ) ) + level.gamemode_map_preinit = []; + + if ( !isdefined( level.gamemode_map_postinit ) ) + level.gamemode_map_postinit = []; + + if ( !isdefined( level.gamemode_map_precache ) ) + level.gamemode_map_precache = []; + + if ( !isdefined( level.gamemode_map_main ) ) + level.gamemode_map_main = []; + + level.gamemode_map_preinit[mode] = preinit_func; + level.gamemode_map_main[mode] = main_func; + level.gamemode_map_precache[mode] = precache_func; + level.gamemode_map_location_precache[mode] = []; + level.gamemode_map_location_main[mode] = []; +} + +add_map_location_gamemode( mode, location, precache_func, main_func ) +{ + if ( !isdefined( level.gamemode_map_location_precache[mode] ) ) + { +/# + println( "*** ERROR : " + mode + " has not been added to the map using add_map_gamemode." ); +#/ + return; + } + + level.gamemode_map_location_precache[mode][location] = precache_func; + level.gamemode_map_location_main[mode][location] = main_func; +} + +rungametypeprecache( gamemode ) +{ + if ( !isdefined( level.gamemode_map_location_main ) || !isdefined( level.gamemode_map_location_main[gamemode] ) ) + return; + + if ( isdefined( level.gamemode_map_precache ) ) + { + if ( isdefined( level.gamemode_map_precache[gamemode] ) ) + [[ level.gamemode_map_precache[gamemode] ]](); + } + + if ( isdefined( level.gamemode_map_location_precache ) ) + { + if ( isdefined( level.gamemode_map_location_precache[gamemode] ) ) + { + loc = getdvar( "ui_zm_mapstartlocation" ); + + if ( loc == "" && isdefined( level.default_start_location ) ) + loc = level.default_start_location; + + if ( isdefined( level.gamemode_map_location_precache[gamemode][loc] ) ) + [[ level.gamemode_map_location_precache[gamemode][loc] ]](); + } + } + + if ( isdefined( level.precachecustomcharacters ) ) + self [[ level.precachecustomcharacters ]](); +} + +rungametypemain( gamemode, mode_main_func, use_round_logic ) +{ + if ( !isdefined( level.gamemode_map_location_main ) || !isdefined( level.gamemode_map_location_main[gamemode] ) ) + return; + + level thread game_objects_allowed( get_gamemode_var( "mode" ), get_gamemode_var( "location" ) ); + + if ( isdefined( level.gamemode_map_main ) ) + { + if ( isdefined( level.gamemode_map_main[gamemode] ) ) + level thread [[ level.gamemode_map_main[gamemode] ]](); + } + + if ( isdefined( level.gamemode_map_location_main ) ) + { + if ( isdefined( level.gamemode_map_location_main[gamemode] ) ) + { + loc = getdvar( "ui_zm_mapstartlocation" ); + + if ( loc == "" && isdefined( level.default_start_location ) ) + loc = level.default_start_location; + + if ( isdefined( level.gamemode_map_location_main[gamemode][loc] ) ) + level thread [[ level.gamemode_map_location_main[gamemode][loc] ]](); + } + } + + if ( isdefined( mode_main_func ) ) + { + if ( isdefined( use_round_logic ) && use_round_logic ) + level thread round_logic( mode_main_func ); + else + level thread non_round_logic( mode_main_func ); + } + + level thread game_end_func(); +} + +round_logic( mode_logic_func ) +{ + level.skit_vox_override = 1; + + if ( isdefined( level.flag["start_zombie_round_logic"] ) ) + flag_wait( "start_zombie_round_logic" ); + + flag_wait( "start_encounters_match_logic" ); + + if ( !isdefined( game["gamemode_match"]["rounds"] ) ) + game["gamemode_match"]["rounds"] = []; + + set_gamemode_var_once( "current_round", 0 ); + set_gamemode_var_once( "team_1_score", 0 ); + set_gamemode_var_once( "team_2_score", 0 ); + + if ( isdefined( is_encounter() ) && is_encounter() ) + { + [[ level._setteamscore ]]( "allies", get_gamemode_var( "team_2_score" ) ); + [[ level._setteamscore ]]( "axis", get_gamemode_var( "team_1_score" ) ); + } + + flag_set( "pregame" ); + waittillframeend; + level.gameended = 0; + cur_round = get_gamemode_var( "current_round" ); + set_gamemode_var( "current_round", cur_round + 1 ); + game["gamemode_match"]["rounds"][cur_round] = spawnstruct(); + game["gamemode_match"]["rounds"][cur_round].mode = getdvar( "ui_gametype" ); + level thread [[ mode_logic_func ]](); + flag_wait( "start_encounters_match_logic" ); + level.gamestarttime = gettime(); + level.gamelengthtime = undefined; + level notify( "clear_hud_elems" ); + + level waittill( "game_module_ended", winner ); + + game["gamemode_match"]["rounds"][cur_round].winner = winner; + level thread kill_all_zombies(); + level.gameendtime = gettime(); + level.gamelengthtime = level.gameendtime - level.gamestarttime; + level.gameended = 1; + + if ( winner == "A" ) + { + score = get_gamemode_var( "team_1_score" ); + set_gamemode_var( "team_1_score", score + 1 ); + } + else + { + score = get_gamemode_var( "team_2_score" ); + set_gamemode_var( "team_2_score", score + 1 ); + } + + if ( isdefined( is_encounter() ) && is_encounter() ) + { + [[ level._setteamscore ]]( "allies", get_gamemode_var( "team_2_score" ) ); + [[ level._setteamscore ]]( "axis", get_gamemode_var( "team_1_score" ) ); + + if ( get_gamemode_var( "team_1_score" ) == get_gamemode_var( "team_2_score" ) ) + { + level thread maps\mp\zombies\_zm_audio::zmbvoxcrowdonteam( "win" ); + level thread maps\mp\zombies\_zm_audio_announcer::announceroundwinner( "tied" ); + } + else + { + level thread maps\mp\zombies\_zm_audio::zmbvoxcrowdonteam( "win", winner, "lose" ); + level thread maps\mp\zombies\_zm_audio_announcer::announceroundwinner( winner ); + } + } + + level thread delete_corpses(); + level delay_thread( 5, ::revive_laststand_players ); + level notify( "clear_hud_elems" ); + + if ( startnextzmround( winner ) ) + { + level clientnotify( "gme" ); + + while ( true ) + wait 1; + } + + level.match_is_ending = 1; + + if ( isdefined( is_encounter() ) && is_encounter() ) + { + matchwonteam = ""; + + if ( get_gamemode_var( "team_1_score" ) > get_gamemode_var( "team_2_score" ) ) + matchwonteam = "A"; + else + matchwonteam = "B"; + + level thread maps\mp\zombies\_zm_audio::zmbvoxcrowdonteam( "win", matchwonteam, "lose" ); + level thread maps\mp\zombies\_zm_audio_announcer::announcematchwinner( matchwonteam ); + level create_final_score(); + track_encounters_win_stats( matchwonteam ); + } + + maps\mp\zombies\_zm::intermission(); + level.can_revive_game_module = undefined; + level notify( "end_game" ); +} + +end_rounds_early( winner ) +{ + level.forcedend = 1; + cur_round = get_gamemode_var( "current_round" ); + set_gamemode_var( "ZM_roundLimit", cur_round ); + + if ( isdefined( winner ) ) + level notify( "game_module_ended", winner ); + else + level notify( "end_game" ); +} + +checkzmroundswitch() +{ + if ( !isdefined( level.zm_roundswitch ) || !level.zm_roundswitch ) + return false; + + assert( get_gamemode_var( "current_round" ) > 0 ); + return true; + return false; +} + +create_hud_scoreboard( duration, fade ) +{ + level endon( "end_game" ); + level thread module_hud_full_screen_overlay(); + level thread module_hud_team_1_score( duration, fade ); + level thread module_hud_team_2_score( duration, fade ); + level thread module_hud_round_num( duration, fade ); + respawn_spectators_and_freeze_players(); + waittill_any_or_timeout( duration, "clear_hud_elems" ); +} + +respawn_spectators_and_freeze_players() +{ + players = get_players(); + + foreach ( player in players ) + { + if ( player.sessionstate == "spectator" ) + { + if ( isdefined( player.spectate_hud ) ) + player.spectate_hud destroy(); + + player [[ level.spawnplayer ]](); + } + + player freeze_player_controls( 1 ); + } +} + +module_hud_team_1_score( duration, fade ) +{ + level._encounters_score_1 = newhudelem(); + level._encounters_score_1.x = 0; + level._encounters_score_1.y = 260; + level._encounters_score_1.alignx = "center"; + level._encounters_score_1.horzalign = "center"; + level._encounters_score_1.vertalign = "top"; + level._encounters_score_1.font = "default"; + level._encounters_score_1.fontscale = 2.3; + level._encounters_score_1.color = ( 1, 1, 1 ); + level._encounters_score_1.foreground = 1; + level._encounters_score_1 settext( "Team CIA: " + get_gamemode_var( "team_1_score" ) ); + level._encounters_score_1.alpha = 0; + level._encounters_score_1.sort = 11; + level._encounters_score_1 fadeovertime( fade ); + level._encounters_score_1.alpha = 1; + level waittill_any_or_timeout( duration, "clear_hud_elems" ); + level._encounters_score_1 fadeovertime( fade ); + level._encounters_score_1.alpha = 0; + wait( fade ); + level._encounters_score_1 destroy(); +} + +module_hud_team_2_score( duration, fade ) +{ + level._encounters_score_2 = newhudelem(); + level._encounters_score_2.x = 0; + level._encounters_score_2.y = 290; + level._encounters_score_2.alignx = "center"; + level._encounters_score_2.horzalign = "center"; + level._encounters_score_2.vertalign = "top"; + level._encounters_score_2.font = "default"; + level._encounters_score_2.fontscale = 2.3; + level._encounters_score_2.color = ( 1, 1, 1 ); + level._encounters_score_2.foreground = 1; + level._encounters_score_2 settext( "Team CDC: " + get_gamemode_var( "team_2_score" ) ); + level._encounters_score_2.alpha = 0; + level._encounters_score_2.sort = 12; + level._encounters_score_2 fadeovertime( fade ); + level._encounters_score_2.alpha = 1; + level waittill_any_or_timeout( duration, "clear_hud_elems" ); + level._encounters_score_2 fadeovertime( fade ); + level._encounters_score_2.alpha = 0; + wait( fade ); + level._encounters_score_2 destroy(); +} + +module_hud_round_num( duration, fade ) +{ + level._encounters_round_num = newhudelem(); + level._encounters_round_num.x = 0; + level._encounters_round_num.y = 60; + level._encounters_round_num.alignx = "center"; + level._encounters_round_num.horzalign = "center"; + level._encounters_round_num.vertalign = "top"; + level._encounters_round_num.font = "default"; + level._encounters_round_num.fontscale = 2.3; + level._encounters_round_num.color = ( 1, 1, 1 ); + level._encounters_round_num.foreground = 1; + level._encounters_round_num settext( "Round: ^5" + ( get_gamemode_var( "current_round" ) + 1 ) + " / " + get_game_var( "ZM_roundLimit" ) ); + level._encounters_round_num.alpha = 0; + level._encounters_round_num.sort = 13; + level._encounters_round_num fadeovertime( fade ); + level._encounters_round_num.alpha = 1; + level waittill_any_or_timeout( duration, "clear_hud_elems" ); + level._encounters_round_num fadeovertime( fade ); + level._encounters_round_num.alpha = 0; + wait( fade ); + level._encounters_round_num destroy(); +} + +createtimer() +{ + flag_waitopen( "pregame" ); + elem = newhudelem(); + elem.hidewheninmenu = 1; + elem.horzalign = "center"; + elem.vertalign = "top"; + elem.alignx = "center"; + elem.aligny = "middle"; + elem.x = 0; + elem.y = 0; + elem.foreground = 1; + elem.font = "default"; + elem.fontscale = 1.5; + elem.color = ( 1, 1, 1 ); + elem.alpha = 2; + elem thread maps\mp\gametypes_zm\_hud::fontpulseinit(); + + if ( isdefined( level.timercountdown ) && level.timercountdown ) + elem settenthstimer( level.timelimit * 60 ); + else + elem settenthstimerup( 0.1 ); + + level.game_module_timer = elem; + + level waittill( "game_module_ended" ); + + elem destroy(); +} + +revive_laststand_players() +{ + if ( isdefined( level.match_is_ending ) && level.match_is_ending ) + return; + + players = get_players(); + + foreach ( player in players ) + { + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + player thread maps\mp\zombies\_zm_laststand::auto_revive( player ); + } +} + +team_icon_winner( elem ) +{ + og_x = elem.x; + og_y = elem.y; + elem.sort = 1; + elem scaleovertime( 0.75, 150, 150 ); + elem moveovertime( 0.75 ); + elem.horzalign = "center"; + elem.vertalign = "middle"; + elem.x = 0; + elem.y = 0; + elem.alpha = 0.7; + wait 0.75; +} + +delete_corpses() +{ + corpses = getcorpsearray(); + + for ( x = 0; x < corpses.size; x++ ) + corpses[x] delete(); +} + +track_encounters_win_stats( matchwonteam ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i]._encounters_team == matchwonteam ) + { + players[i] maps\mp\zombies\_zm_stats::increment_client_stat( "wins" ); + players[i] maps\mp\zombies\_zm_stats::add_client_stat( "losses", -1 ); + players[i] adddstat( "skill_rating", 1.0 ); + players[i] setdstat( "skill_variance", 1.0 ); + + if ( gamemodeismode( level.gamemode_public_match ) ) + { + players[i] maps\mp\zombies\_zm_stats::add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "wins", 1 ); + players[i] maps\mp\zombies\_zm_stats::add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "losses", -1 ); + } + } + else + { + players[i] setdstat( "skill_rating", 0.0 ); + players[i] setdstat( "skill_variance", 1.0 ); + } + + players[i] updatestatratio( "wlratio", "wins", "losses" ); + } +} + +non_round_logic( mode_logic_func ) +{ + level thread [[ mode_logic_func ]](); +} + +game_end_func() +{ + if ( !isdefined( get_gamemode_var( "match_end_notify" ) ) && !isdefined( get_gamemode_var( "match_end_func" ) ) ) + return; + + level waittill( get_gamemode_var( "match_end_notify" ), winning_team ); + + level thread [[ get_gamemode_var( "match_end_func" ) ]]( winning_team ); +} + +setup_classic_gametype() +{ + ents = getentarray(); + + foreach ( ent in ents ) + { + if ( isdefined( ent.script_parameters ) ) + { + parameters = strtok( ent.script_parameters, " " ); + should_remove = 0; + + foreach ( parm in parameters ) + { + if ( parm == "survival_remove" ) + should_remove = 1; + } + + if ( should_remove ) + ent delete(); + } + } + + structs = getstructarray( "game_mode_object" ); + + foreach ( struct in structs ) + { + if ( !isdefined( struct.script_string ) ) + continue; + + tokens = strtok( struct.script_string, " " ); + spawn_object = 0; + + foreach ( parm in tokens ) + { + if ( parm == "survival" ) + spawn_object = 1; + } + + if ( !spawn_object ) + continue; + + barricade = spawn( "script_model", struct.origin ); + barricade.angles = struct.angles; + barricade setmodel( struct.script_parameters ); + } + + unlink_meat_traversal_nodes(); +} + +zclassic_main() +{ + level thread setup_classic_gametype(); + level thread maps\mp\zombies\_zm::round_start(); +} + +unlink_meat_traversal_nodes() +{ + meat_town_nodes = getnodearray( "meat_town_barrier_traversals", "targetname" ); + meat_tunnel_nodes = getnodearray( "meat_tunnel_barrier_traversals", "targetname" ); + meat_farm_nodes = getnodearray( "meat_farm_barrier_traversals", "targetname" ); + nodes = arraycombine( meat_town_nodes, meat_tunnel_nodes, 1, 0 ); + traversal_nodes = arraycombine( nodes, meat_farm_nodes, 1, 0 ); + + foreach ( node in traversal_nodes ) + { + end_node = getnode( node.target, "targetname" ); + unlink_nodes( node, end_node ); + } +} + +canplayersuicide() +{ + return self hasperk( "specialty_scavenger" ); +} + +onplayerdisconnect() +{ + if ( isdefined( level.game_mode_custom_onplayerdisconnect ) ) + level [[ level.game_mode_custom_onplayerdisconnect ]]( self ); + + level thread maps\mp\zombies\_zm::check_quickrevive_for_hotjoin( 1 ); + self maps\mp\zombies\_zm_laststand::add_weighted_down(); + level maps\mp\zombies\_zm::checkforalldead( self ); +} + +ondeadevent( team ) +{ + thread maps\mp\gametypes_zm\_globallogic::endgame( level.zombie_team, "" ); +} + +onspawnintermission() +{ + spawnpointname = "info_intermission"; + spawnpoints = getentarray( spawnpointname, "classname" ); + + if ( spawnpoints.size < 1 ) + { +/# + println( "NO " + spawnpointname + " SPAWNPOINTS IN MAP" ); +#/ + return; + } + + spawnpoint = spawnpoints[randomint( spawnpoints.size )]; + + if ( isdefined( spawnpoint ) ) + self spawn( spawnpoint.origin, spawnpoint.angles ); +} + +onspawnspectator( origin, angles ) +{ + +} + +mayspawn() +{ + if ( isdefined( level.custommayspawnlogic ) ) + return self [[ level.custommayspawnlogic ]](); + + if ( self.pers["lives"] == 0 ) + { + level notify( "player_eliminated" ); + self notify( "player_eliminated" ); + return 0; + } + + return 1; +} + +onstartgametype() +{ + setclientnamemode( "auto_change" ); + level.displayroundendtext = 0; + maps\mp\gametypes_zm\_spawning::create_map_placed_influencers(); + + if ( !isoneround() ) + { + level.displayroundendtext = 1; + + if ( isscoreroundbased() ) + maps\mp\gametypes_zm\_globallogic_score::resetteamscores(); + } +} + +module_hud_full_screen_overlay() +{ + fadetoblack = newhudelem(); + fadetoblack.x = 0; + fadetoblack.y = 0; + fadetoblack.horzalign = "fullscreen"; + fadetoblack.vertalign = "fullscreen"; + fadetoblack setshader( "black", 640, 480 ); + fadetoblack.color = ( 0, 0, 0 ); + fadetoblack.alpha = 1; + fadetoblack.foreground = 1; + fadetoblack.sort = 0; + + if ( is_encounter() || getdvar( "ui_gametype" ) == "zcleansed" ) + level waittill_any_or_timeout( 25, "start_fullscreen_fade_out" ); + else + level waittill_any_or_timeout( 25, "start_zombie_round_logic" ); + + fadetoblack fadeovertime( 2.0 ); + fadetoblack.alpha = 0; + wait 2.1; + fadetoblack destroy(); +} + +create_final_score() +{ + level endon( "end_game" ); + level thread module_hud_team_winer_score(); + wait 2; +} + +module_hud_team_winer_score() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + players[i] thread create_module_hud_team_winer_score(); + + if ( isdefined( players[i]._team_hud ) && isdefined( players[i]._team_hud["team"] ) ) + players[i] thread team_icon_winner( players[i]._team_hud["team"] ); + + if ( isdefined( level.lock_player_on_team_score ) && level.lock_player_on_team_score ) + { + players[i] freezecontrols( 1 ); + players[i] takeallweapons(); + players[i] setclientuivisibilityflag( "hud_visible", 0 ); + players[i].sessionstate = "spectator"; + players[i].spectatorclient = -1; + players[i].maxhealth = players[i].health; + players[i].shellshocked = 0; + players[i].inwater = 0; + players[i].friendlydamage = undefined; + players[i].hasspawned = 1; + players[i].spawntime = gettime(); + players[i].afk = 0; + players[i] detachall(); + } + } + + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "match_over" ); +} + +create_module_hud_team_winer_score() +{ + self._team_winer_score = newclienthudelem( self ); + self._team_winer_score.x = 0; + self._team_winer_score.y = 70; + self._team_winer_score.alignx = "center"; + self._team_winer_score.horzalign = "center"; + self._team_winer_score.vertalign = "middle"; + self._team_winer_score.font = "default"; + self._team_winer_score.fontscale = 15; + self._team_winer_score.color = ( 0, 1, 0 ); + self._team_winer_score.foreground = 1; + + if ( self._encounters_team == "B" && get_gamemode_var( "team_2_score" ) > get_gamemode_var( "team_1_score" ) ) + self._team_winer_score settext( &"ZOMBIE_MATCH_WON" ); + else if ( self._encounters_team == "B" && get_gamemode_var( "team_2_score" ) < get_gamemode_var( "team_1_score" ) ) + { + self._team_winer_score.color = ( 1, 0, 0 ); + self._team_winer_score settext( &"ZOMBIE_MATCH_LOST" ); + } + + if ( self._encounters_team == "A" && get_gamemode_var( "team_1_score" ) > get_gamemode_var( "team_2_score" ) ) + self._team_winer_score settext( &"ZOMBIE_MATCH_WON" ); + else if ( self._encounters_team == "A" && get_gamemode_var( "team_1_score" ) < get_gamemode_var( "team_2_score" ) ) + { + self._team_winer_score.color = ( 1, 0, 0 ); + self._team_winer_score settext( &"ZOMBIE_MATCH_LOST" ); + } + + self._team_winer_score.alpha = 0; + self._team_winer_score.sort = 12; + self._team_winer_score fadeovertime( 0.25 ); + self._team_winer_score.alpha = 1; + wait 2; + self._team_winer_score fadeovertime( 0.25 ); + self._team_winer_score.alpha = 0; + wait 0.25; + self._team_winer_score destroy(); +} + +displayroundend( round_winner ) +{ + players = get_players(); + + foreach ( player in players ) + { + player thread module_hud_round_end( round_winner ); + + if ( isdefined( player._team_hud ) && isdefined( player._team_hud["team"] ) ) + player thread team_icon_winner( player._team_hud["team"] ); + + player freeze_player_controls( 1 ); + } + + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "round_end" ); + level thread maps\mp\zombies\_zm_audio::zmbvoxcrowdonteam( "clap" ); + level thread play_sound_2d( "zmb_air_horn" ); + wait 2.0; +} + +module_hud_round_end( round_winner ) +{ + self endon( "disconnect" ); + self._team_winner_round = newclienthudelem( self ); + self._team_winner_round.x = 0; + self._team_winner_round.y = 50; + self._team_winner_round.alignx = "center"; + self._team_winner_round.horzalign = "center"; + self._team_winner_round.vertalign = "middle"; + self._team_winner_round.font = "default"; + self._team_winner_round.fontscale = 15; + self._team_winner_round.color = ( 1, 1, 1 ); + self._team_winner_round.foreground = 1; + + if ( self._encounters_team == round_winner ) + { + self._team_winner_round.color = ( 0, 1, 0 ); + self._team_winner_round settext( "YOU WIN" ); + } + else + { + self._team_winner_round.color = ( 1, 0, 0 ); + self._team_winner_round settext( "YOU LOSE" ); + } + + self._team_winner_round.alpha = 0; + self._team_winner_round.sort = 12; + self._team_winner_round fadeovertime( 0.25 ); + self._team_winner_round.alpha = 1; + wait 1.5; + self._team_winner_round fadeovertime( 0.25 ); + self._team_winner_round.alpha = 0; + wait 0.25; + self._team_winner_round destroy(); +} + +displayroundswitch() +{ + level._round_changing_sides = newhudelem(); + level._round_changing_sides.x = 0; + level._round_changing_sides.y = 60; + level._round_changing_sides.alignx = "center"; + level._round_changing_sides.horzalign = "center"; + level._round_changing_sides.vertalign = "middle"; + level._round_changing_sides.font = "default"; + level._round_changing_sides.fontscale = 2.3; + level._round_changing_sides.color = ( 1, 1, 1 ); + level._round_changing_sides.foreground = 1; + level._round_changing_sides.sort = 12; + fadetoblack = newhudelem(); + fadetoblack.x = 0; + fadetoblack.y = 0; + fadetoblack.horzalign = "fullscreen"; + fadetoblack.vertalign = "fullscreen"; + fadetoblack setshader( "black", 640, 480 ); + fadetoblack.color = ( 0, 0, 0 ); + fadetoblack.alpha = 1; + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "side_switch" ); + level._round_changing_sides settext( "CHANGING SIDES" ); + level._round_changing_sides fadeovertime( 0.25 ); + level._round_changing_sides.alpha = 1; + wait 1.0; + fadetoblack fadeovertime( 1.0 ); + level._round_changing_sides fadeovertime( 0.25 ); + level._round_changing_sides.alpha = 0; + fadetoblack.alpha = 0; + wait 0.25; + level._round_changing_sides destroy(); + fadetoblack destroy(); +} + +module_hud_create_team_name() +{ + if ( !is_encounter() ) + return; + + if ( !isdefined( self._team_hud ) ) + self._team_hud = []; + + if ( isdefined( self._team_hud["team"] ) ) + self._team_hud["team"] destroy(); + + elem = newclienthudelem( self ); + elem.hidewheninmenu = 1; + elem.alignx = "center"; + elem.aligny = "middle"; + elem.horzalign = "center"; + elem.vertalign = "middle"; + elem.x = 0; + elem.y = 0; + + if ( isdefined( level.game_module_team_name_override_og_x ) ) + elem.og_x = level.game_module_team_name_override_og_x; + else + elem.og_x = 85; + + elem.og_y = -40; + elem.foreground = 1; + elem.font = "default"; + elem.color = ( 1, 1, 1 ); + elem.sort = 1; + elem.alpha = 0.7; + elem setshader( game["icons"][self.team], 150, 150 ); + self._team_hud["team"] = elem; +} + +nextzmhud( winner ) +{ + displayroundend( winner ); + create_hud_scoreboard( 1.0, 0.25 ); + + if ( checkzmroundswitch() ) + displayroundswitch(); +} + +startnextzmround( winner ) +{ + if ( !isonezmround() ) + { + if ( !waslastzmround() ) + { + nextzmhud( winner ); + setmatchtalkflag( "DeadChatWithDead", level.voip.deadchatwithdead ); + setmatchtalkflag( "DeadChatWithTeam", level.voip.deadchatwithteam ); + setmatchtalkflag( "DeadHearTeamLiving", level.voip.deadhearteamliving ); + setmatchtalkflag( "DeadHearAllLiving", level.voip.deadhearallliving ); + setmatchtalkflag( "EveryoneHearsEveryone", level.voip.everyonehearseveryone ); + setmatchtalkflag( "DeadHearKiller", level.voip.deadhearkiller ); + setmatchtalkflag( "KillersHearVictim", level.voip.killershearvictim ); + game["state"] = "playing"; + level.allowbattlechatter = getgametypesetting( "allowBattleChatter" ); + + if ( isdefined( level.zm_switchsides_on_roundswitch ) && level.zm_switchsides_on_roundswitch ) + set_game_var( "switchedsides", !get_game_var( "switchedsides" ) ); + + map_restart( 1 ); + return true; + } + } + + return false; +} + +start_round() +{ + flag_clear( "start_encounters_match_logic" ); + + if ( !isdefined( level._module_round_hud ) ) + { + level._module_round_hud = newhudelem(); + level._module_round_hud.x = 0; + level._module_round_hud.y = 70; + level._module_round_hud.alignx = "center"; + level._module_round_hud.horzalign = "center"; + level._module_round_hud.vertalign = "middle"; + level._module_round_hud.font = "default"; + level._module_round_hud.fontscale = 2.3; + level._module_round_hud.color = ( 1, 1, 1 ); + level._module_round_hud.foreground = 1; + level._module_round_hud.sort = 0; + } + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] freeze_player_controls( 1 ); + + level._module_round_hud.alpha = 1; + label = &"Next Round Starting In ^2"; + level._module_round_hud.label = label; + level._module_round_hud settimer( 3 ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "countdown" ); + level thread maps\mp\zombies\_zm_audio::zmbvoxcrowdonteam( "clap" ); + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "round_start" ); + level notify( "start_fullscreen_fade_out" ); + wait 2; + level._module_round_hud fadeovertime( 1 ); + level._module_round_hud.alpha = 0; + wait 1; + level thread play_sound_2d( "zmb_air_horn" ); + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + players[i] freeze_player_controls( 0 ); + players[i] sprintuprequired(); + } + + flag_set( "start_encounters_match_logic" ); + flag_clear( "pregame" ); + level._module_round_hud destroy(); +} + +isonezmround() +{ + if ( get_game_var( "ZM_roundLimit" ) == 1 ) + return true; + + return false; +} + +waslastzmround() +{ + if ( isdefined( level.forcedend ) && level.forcedend ) + return true; + + if ( hitzmroundlimit() || hitzmscorelimit() || hitzmroundwinlimit() ) + return true; + + return false; +} + +hitzmroundlimit() +{ + if ( get_game_var( "ZM_roundLimit" ) <= 0 ) + return 0; + + return getzmroundsplayed() >= get_game_var( "ZM_roundLimit" ); +} + +hitzmroundwinlimit() +{ + if ( !isdefined( get_game_var( "ZM_roundWinLimit" ) ) || get_game_var( "ZM_roundWinLimit" ) <= 0 ) + return false; + + if ( get_gamemode_var( "team_1_score" ) >= get_game_var( "ZM_roundWinLimit" ) || get_gamemode_var( "team_2_score" ) >= get_game_var( "ZM_roundWinLimit" ) ) + return true; + + if ( get_gamemode_var( "team_1_score" ) >= get_game_var( "ZM_roundWinLimit" ) || get_gamemode_var( "team_2_score" ) >= get_game_var( "ZM_roundWinLimit" ) ) + { + if ( get_gamemode_var( "team_1_score" ) != get_gamemode_var( "team_2_score" ) ) + return true; + } + + return false; +} + +hitzmscorelimit() +{ + if ( get_game_var( "ZM_scoreLimit" ) <= 0 ) + return false; + + if ( is_encounter() ) + { + if ( get_gamemode_var( "team_1_score" ) >= get_game_var( "ZM_scoreLimit" ) || get_gamemode_var( "team_2_score" ) >= get_game_var( "ZM_scoreLimit" ) ) + return true; + } + + return false; +} + +getzmroundsplayed() +{ + return get_gamemode_var( "current_round" ); +} + +onspawnplayerunified() +{ + onspawnplayer( 0 ); +} + +onspawnplayer( predictedspawn = 0 ) +{ + pixbeginevent( "ZSURVIVAL:onSpawnPlayer" ); + self.usingobj = undefined; + self.is_zombie = 0; + + if ( isdefined( level.custom_spawnplayer ) && ( isdefined( self.player_initialized ) && self.player_initialized ) ) + { + self [[ level.custom_spawnplayer ]](); + return; + } + + if ( isdefined( level.customspawnlogic ) ) + { +/# + println( "ZM >> USE CUSTOM SPAWNING" ); +#/ + spawnpoint = self [[ level.customspawnlogic ]]( predictedspawn ); + + if ( predictedspawn ) + return; + } + else + { +/# + println( "ZM >> USE STANDARD SPAWNING" ); +#/ + if ( flag( "begin_spawning" ) ) + { + spawnpoint = maps\mp\zombies\_zm::check_for_valid_spawn_near_team( self, 1 ); +/# + if ( !isdefined( spawnpoint ) ) + println( "ZM >> WARNING UNABLE TO FIND RESPAWN POINT NEAR TEAM - USING INITIAL SPAWN POINTS" ); +#/ + } + + if ( !isdefined( spawnpoint ) ) + { + match_string = ""; + location = level.scr_zm_map_start_location; + + if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) ) + location = level.default_start_location; + + match_string = level.scr_zm_ui_gametype + "_" + location; + spawnpoints = []; + structs = getstructarray( "initial_spawn", "script_noteworthy" ); + + if ( isdefined( structs ) ) + { + foreach ( struct in structs ) + { + if ( isdefined( struct.script_string ) ) + { + tokens = strtok( struct.script_string, " " ); + + foreach ( token in tokens ) + { + if ( token == match_string ) + spawnpoints[spawnpoints.size] = struct; + } + } + } + } + + if ( !isdefined( spawnpoints ) || spawnpoints.size == 0 ) + spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); + + assert( isdefined( spawnpoints ), "Could not find initial spawn points!" ); + spawnpoint = maps\mp\zombies\_zm::getfreespawnpoint( spawnpoints, self ); + } + + if ( predictedspawn ) + { + self predictspawnpoint( spawnpoint.origin, spawnpoint.angles ); + return; + } + else + self spawn( spawnpoint.origin, spawnpoint.angles, "zsurvival" ); + } + + self.entity_num = self getentitynumber(); + self thread maps\mp\zombies\_zm::onplayerspawned(); + self thread maps\mp\zombies\_zm::player_revive_monitor(); + self freezecontrols( 1 ); + self.spectator_respawn = spawnpoint; + self.score = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "score" ); + self.pers["participation"] = 0; +/# + if ( getdvarint( _hash_FA81816F ) >= 1 ) + self.score = 100000; +#/ + self.score_total = self.score; + self.old_score = self.score; + self.player_initialized = 0; + self.zombification_time = 0; + self.enabletext = 1; + self thread maps\mp\zombies\_zm_blockers::rebuild_barrier_reward_reset(); + + if ( !( isdefined( level.host_ended_game ) && level.host_ended_game ) ) + { + self freeze_player_controls( 0 ); + self enableweapons(); + } + + if ( isdefined( level.game_mode_spawn_player_logic ) ) + { + spawn_in_spectate = [[ level.game_mode_spawn_player_logic ]](); + + if ( spawn_in_spectate ) + self delay_thread( 0.05, maps\mp\zombies\_zm::spawnspectator ); + } + + pixendevent(); +} + +get_player_spawns_for_gametype() +{ + match_string = ""; + location = level.scr_zm_map_start_location; + + if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) ) + location = level.default_start_location; + + match_string = level.scr_zm_ui_gametype + "_" + location; + player_spawns = []; + structs = getstructarray( "player_respawn_point", "targetname" ); + + foreach ( struct in structs ) + { + if ( isdefined( struct.script_string ) ) + { + tokens = strtok( struct.script_string, " " ); + + foreach ( token in tokens ) + { + if ( token == match_string ) + player_spawns[player_spawns.size] = struct; + } + + continue; + } + + player_spawns[player_spawns.size] = struct; + } + + return player_spawns; +} + +onendgame( winningteam ) +{ + +} + +onroundendgame( roundwinner ) +{ + if ( game["roundswon"]["allies"] == game["roundswon"]["axis"] ) + winner = "tie"; + else if ( game["roundswon"]["axis"] > game["roundswon"]["allies"] ) + winner = "axis"; + else + winner = "allies"; + + return winner; +} + +menu_init() +{ + game["menu_team"] = "team_marinesopfor"; + game["menu_changeclass_allies"] = "changeclass"; + game["menu_initteam_allies"] = "initteam_marines"; + game["menu_changeclass_axis"] = "changeclass"; + game["menu_initteam_axis"] = "initteam_opfor"; + game["menu_class"] = "class"; + game["menu_changeclass"] = "changeclass"; + game["menu_changeclass_offline"] = "changeclass"; + game["menu_wager_side_bet"] = "sidebet"; + game["menu_wager_side_bet_player"] = "sidebet_player"; + game["menu_changeclass_wager"] = "changeclass_wager"; + game["menu_changeclass_custom"] = "changeclass_custom"; + game["menu_changeclass_barebones"] = "changeclass_barebones"; + game["menu_controls"] = "ingame_controls"; + game["menu_options"] = "ingame_options"; + game["menu_leavegame"] = "popup_leavegame"; + game["menu_restartgamepopup"] = "restartgamepopup"; + precachemenu( game["menu_controls"] ); + precachemenu( game["menu_options"] ); + precachemenu( game["menu_leavegame"] ); + precachemenu( game["menu_restartgamepopup"] ); + precachemenu( "scoreboard" ); + precachemenu( game["menu_team"] ); + precachemenu( game["menu_changeclass_allies"] ); + precachemenu( game["menu_initteam_allies"] ); + precachemenu( game["menu_changeclass_axis"] ); + precachemenu( game["menu_class"] ); + precachemenu( game["menu_changeclass"] ); + precachemenu( game["menu_initteam_axis"] ); + precachemenu( game["menu_changeclass_offline"] ); + precachemenu( game["menu_changeclass_wager"] ); + precachemenu( game["menu_changeclass_custom"] ); + precachemenu( game["menu_changeclass_barebones"] ); + precachemenu( game["menu_wager_side_bet"] ); + precachemenu( game["menu_wager_side_bet_player"] ); + precachestring( &"MP_HOST_ENDED_GAME" ); + precachestring( &"MP_HOST_ENDGAME_RESPONSE" ); + level thread menu_onplayerconnect(); +} + +menu_onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread menu_onmenuresponse(); + } +} + +menu_onmenuresponse() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "menuresponse", menu, response ); + + if ( response == "back" ) + { + self closemenu(); + self closeingamemenu(); + + if ( level.console ) + { + if ( menu == game["menu_changeclass"] || menu == game["menu_changeclass_offline"] || menu == game["menu_team"] || menu == game["menu_controls"] ) + { + if ( self.pers["team"] == "allies" ) + self openmenu( game["menu_class"] ); + + if ( self.pers["team"] == "axis" ) + self openmenu( game["menu_class"] ); + } + } + + continue; + } + + if ( response == "changeteam" && level.allow_teamchange == "1" ) + { + self closemenu(); + self closeingamemenu(); + self openmenu( game["menu_team"] ); + } + + if ( response == "changeclass_marines" ) + { + self closemenu(); + self closeingamemenu(); + self openmenu( game["menu_changeclass_allies"] ); + continue; + } + + if ( response == "changeclass_opfor" ) + { + self closemenu(); + self closeingamemenu(); + self openmenu( game["menu_changeclass_axis"] ); + continue; + } + + if ( response == "changeclass_wager" ) + { + self closemenu(); + self closeingamemenu(); + self openmenu( game["menu_changeclass_wager"] ); + continue; + } + + if ( response == "changeclass_custom" ) + { + self closemenu(); + self closeingamemenu(); + self openmenu( game["menu_changeclass_custom"] ); + continue; + } + + if ( response == "changeclass_barebones" ) + { + self closemenu(); + self closeingamemenu(); + self openmenu( game["menu_changeclass_barebones"] ); + continue; + } + + if ( response == "changeclass_marines_splitscreen" ) + self openmenu( "changeclass_marines_splitscreen" ); + + if ( response == "changeclass_opfor_splitscreen" ) + self openmenu( "changeclass_opfor_splitscreen" ); + + if ( response == "endgame" ) + { + if ( self issplitscreen() ) + { + level.skipvote = 1; + + if ( !( isdefined( level.gameended ) && level.gameended ) ) + { + self maps\mp\zombies\_zm_laststand::add_weighted_down(); + self maps\mp\zombies\_zm_stats::increment_client_stat( "deaths" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "deaths" ); + self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat(); + level.host_ended_game = 1; + maps\mp\zombies\_zm_game_module::freeze_players( 1 ); + level notify( "end_game" ); + } + } + + continue; + } + + if ( response == "restart_level_zm" ) + { + self maps\mp\zombies\_zm_laststand::add_weighted_down(); + self maps\mp\zombies\_zm_stats::increment_client_stat( "deaths" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "deaths" ); + self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat(); + missionfailed(); + } + + if ( response == "killserverpc" ) + { + level thread maps\mp\gametypes_zm\_globallogic::killserverpc(); + continue; + } + + if ( response == "endround" ) + { + if ( !( isdefined( level.gameended ) && level.gameended ) ) + { + self maps\mp\gametypes_zm\_globallogic::gamehistoryplayerquit(); + self maps\mp\zombies\_zm_laststand::add_weighted_down(); + self closemenu(); + self closeingamemenu(); + level.host_ended_game = 1; + maps\mp\zombies\_zm_game_module::freeze_players( 1 ); + level notify( "end_game" ); + } + else + { + self closemenu(); + self closeingamemenu(); + self iprintln( &"MP_HOST_ENDGAME_RESPONSE" ); + } + + continue; + } + + if ( menu == game["menu_team"] && level.allow_teamchange == "1" ) + { + switch ( response ) + { + case "allies": + self [[ level.allies ]](); + break; + case "axis": + self [[ level.teammenu ]]( response ); + break; + case "autoassign": + self [[ level.autoassign ]]( 1 ); + break; + case "spectator": + self [[ level.spectator ]](); + break; + } + + continue; + } + + if ( menu == game["menu_changeclass"] || menu == game["menu_changeclass_offline"] || menu == game["menu_changeclass_wager"] || menu == game["menu_changeclass_custom"] || menu == game["menu_changeclass_barebones"] ) + { + self closemenu(); + self closeingamemenu(); + + if ( level.rankedmatch && issubstr( response, "custom" ) ) + { + + } + + self.selectedclass = 1; + self [[ level.class ]]( response ); + } + } +} + +menuallieszombies() +{ + self maps\mp\gametypes_zm\_globallogic_ui::closemenus(); + + if ( !level.console && level.allow_teamchange == "0" && ( isdefined( self.hasdonecombat ) && self.hasdonecombat ) ) + return; + + if ( self.pers["team"] != "allies" ) + { + if ( level.ingraceperiod && ( !isdefined( self.hasdonecombat ) || !self.hasdonecombat ) ) + self.hasspawned = 0; + + if ( self.sessionstate == "playing" ) + { + self.switching_teams = 1; + self.joining_team = "allies"; + self.leaving_team = self.pers["team"]; + self suicide(); + } + + self.pers["team"] = "allies"; + self.team = "allies"; + self.pers["class"] = undefined; + self.class = undefined; + self.pers["weapon"] = undefined; + self.pers["savedmodel"] = undefined; + self updateobjectivetext(); + + if ( level.teambased ) + self.sessionteam = "allies"; + else + { + self.sessionteam = "none"; + self.ffateam = "allies"; + } + + self setclientscriptmainmenu( game["menu_class"] ); + self notify( "joined_team" ); + level notify( "joined_team" ); + self notify( "end_respawn" ); + } +} + +custom_spawn_init_func() +{ + array_thread( level.zombie_spawners, ::add_spawn_function, maps\mp\zombies\_zm_spawner::zombie_spawn_init ); + array_thread( level.zombie_spawners, ::add_spawn_function, level._zombies_round_spawn_failsafe ); +} + +kill_all_zombies() +{ + ai = getaiarray( level.zombie_team ); + + foreach ( zombie in ai ) + { + if ( isdefined( zombie ) ) + { + zombie dodamage( zombie.maxhealth * 2, zombie.origin, zombie, zombie, "none", "MOD_SUICIDE" ); + wait 0.05; + } + } +} + +init() +{ + flag_init( "pregame" ); + flag_set( "pregame" ); + level thread onplayerconnect(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connected", player ); + + player thread onplayerspawned(); + + if ( isdefined( level.game_module_onplayerconnect ) ) + player [[ level.game_module_onplayerconnect ]](); + } +} + +onplayerspawned() +{ + level endon( "end_game" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill_either( "spawned_player", "fake_spawned_player" ); + + if ( isdefined( level.match_is_ending ) && level.match_is_ending ) + return; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + self thread maps\mp\zombies\_zm_laststand::auto_revive( self ); + + if ( isdefined( level.custom_player_fake_death_cleanup ) ) + self [[ level.custom_player_fake_death_cleanup ]](); + + self setstance( "stand" ); + self.zmbdialogqueue = []; + self.zmbdialogactive = 0; + self.zmbdialoggroups = []; + self.zmbdialoggroup = ""; + + if ( is_encounter() ) + { + if ( self.team == "axis" ) + { + self.characterindex = 0; + self._encounters_team = "A"; + self._team_name = &"ZOMBIE_RACE_TEAM_1"; + } + else + { + self.characterindex = 1; + self._encounters_team = "B"; + self._team_name = &"ZOMBIE_RACE_TEAM_2"; + } + } + + self takeallweapons(); + + if ( isdefined( level.givecustomcharacters ) ) + self [[ level.givecustomcharacters ]](); + + self giveweapon( "knife_zm" ); + + if ( isdefined( level.onplayerspawned_restore_previous_weapons ) && ( isdefined( level.isresetting_grief ) && level.isresetting_grief ) ) + weapons_restored = self [[ level.onplayerspawned_restore_previous_weapons ]](); + + if ( !( isdefined( weapons_restored ) && weapons_restored ) ) + self give_start_weapon( 1 ); + + weapons_restored = 0; + + if ( isdefined( level._team_loadout ) ) + { + self giveweapon( level._team_loadout ); + self switchtoweapon( level._team_loadout ); + } + + if ( isdefined( level.gamemode_post_spawn_logic ) ) + self [[ level.gamemode_post_spawn_logic ]](); + } +} + +wait_for_players() +{ + level endon( "end_race" ); + + if ( getdvarint( "party_playerCount" ) == 1 ) + { + flag_wait( "start_zombie_round_logic" ); + return; + } + + while ( !flag_exists( "start_zombie_round_logic" ) ) + wait 0.05; + + while ( !flag( "start_zombie_round_logic" ) && isdefined( level._module_connect_hud ) ) + { + level._module_connect_hud.alpha = 0; + level._module_connect_hud.sort = 12; + level._module_connect_hud fadeovertime( 1.0 ); + level._module_connect_hud.alpha = 1; + wait 1.5; + level._module_connect_hud fadeovertime( 1.0 ); + level._module_connect_hud.alpha = 0; + wait 1.5; + } + + if ( isdefined( level._module_connect_hud ) ) + level._module_connect_hud destroy(); +} + +onplayerconnect_check_for_hotjoin() +{ +/# + if ( getdvarint( _hash_EA6D219A ) > 0 ) + return; +#/ + map_logic_exists = level flag_exists( "start_zombie_round_logic" ); + map_logic_started = flag( "start_zombie_round_logic" ); + + if ( map_logic_exists && map_logic_started ) + self thread hide_gump_loading_for_hotjoiners(); +} + +hide_gump_loading_for_hotjoiners() +{ + self endon( "disconnect" ); + self.rebuild_barrier_reward = 1; + self.is_hotjoining = 1; + num = self getsnapshotackindex(); + + while ( num == self getsnapshotackindex() ) + wait 0.25; + + wait 0.5; + self maps\mp\zombies\_zm::spawnspectator(); + self.is_hotjoining = 0; + self.is_hotjoin = 1; + + if ( is_true( level.intermission ) || is_true( level.host_ended_game ) ) + { + setclientsysstate( "levelNotify", "zi", self ); + self setclientthirdperson( 0 ); + self resetfov(); + self.health = 100; + self thread [[ level.custom_intermission ]](); + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/zclassic.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/zclassic.gsc new file mode 100644 index 0000000..bb3a391 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/zclassic.gsc @@ -0,0 +1,31 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_stats; + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::main(); + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level._game_module_custom_spawn_init_func = maps\mp\gametypes_zm\_zm_gametype::custom_spawn_init_func; + level._game_module_stat_update_func = maps\mp\zombies\_zm_stats::survival_classic_custom_stat_update; + maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zclassic" ); +} + +onprecachegametype() +{ + level.playersuicideallowed = 1; + level.canplayersuicide = ::canplayersuicide; + level.suicide_weapon = "death_self_zm"; + precacheitem( "death_self_zm" ); + maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zclassic" ); +} + +onstartgametype() +{ + maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zclassic", maps\mp\gametypes_zm\_zm_gametype::zclassic_main ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/zcleansed.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/zcleansed.gsc new file mode 100644 index 0000000..acbdeb1 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/zcleansed.gsc @@ -0,0 +1,2048 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_turned; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\gametypes_zm\_weapons; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\gametypes_zm\_globallogic_utils; +#include maps\mp\zombies\_zm_blockers; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_weap_cymbal_monkey; +#include maps\mp\_visionset_mgr; + +main() +{ + level.using_zombie_powerups = 1; + level._game_mode_powerup_zombie_grab = ::zcleansed_zombie_powerup_grab; + level._zombiemode_powerup_grab = ::zcleansed_powerup_grab; + level._powerup_timeout_custom_time = ::zcleansed_powerup_custom_time_logic; + level._powerup_grab_check = ::powerup_can_player_grab; + setdvar( "aim_target_player_enabled", 1 ); + maps\mp\gametypes_zm\_zm_gametype::main(); + setscoreboardcolumns( "none", "score", "kills", "downs", "headshots" ); + level.cymbal_monkey_dual_view = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.custom_end_screen = ::custom_end_screen; + level._game_module_custom_spawn_init_func = maps\mp\gametypes_zm\_zm_gametype::custom_spawn_init_func; + level._game_module_state_update_func = maps\mp\zombies\_zm_stats::survival_classic_custom_stat_update; + level._effect["human_disappears"] = loadfx( "maps/zombie/fx_zmb_returned_spawn_puff" ); + level._effect["zombie_disappears"] = loadfx( "maps/zombie/fx_zmb_returned_spawn_puff" ); + level.human_finish_bonus_points = 250; + level.human_bonus_points = 10; + level.zombie_penalty_points = 5; + level.human_bonus_period = 1; + level.zombie_penalty_period = 10; + level.zombie_player_kill_points = 50; + level.human_player_kill_points = 50; + level.human_player_suicide_penalty = 0; + level.score_rank_bonus = array( 1.5, 0.75, 0.5, 0.25 ); + + if ( isdefined( level.should_use_cia ) && level.should_use_cia ) + level.characterindex = 0; + else + level.characterindex = 1; + + level.graceperiodfunc = ::waitforhumanselection; + level.customalivecheck = ::cleansed_alive_check; + level thread onplayerconnect(); + maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zcleansed" ); + init_cleansed_powerup_fx(); +} + +onprecachegametype() +{ + level.playersuicideallowed = 1; + level.canplayersuicide = ::canplayersuicide; + level.suicide_weapon = "death_self_zm"; + precacheitem( "death_self_zm" ); + precachemodel( "zombie_pickup_perk_bottle" ); + precache_trophy(); + precacheshader( "faction_cdc" ); + precacheshader( "faction_cia" ); + init_default_zcleansed_powerups(); + maps\mp\zombies\_zm_turned::init(); + level thread maps\mp\gametypes_zm\_zm_gametype::init(); + maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zcleansed" ); + init_cleansed_powerups(); +} + +init_default_zcleansed_powerups() +{ + maps\mp\zombies\_zm_powerups::include_zombie_powerup( "the_cure" ); + maps\mp\zombies\_zm_powerups::include_zombie_powerup( "blue_monkey" ); + maps\mp\zombies\_zm_powerups::add_zombie_powerup( "the_cure", "zombie_pickup_perk_bottle", &"ZOMBIE_POWERUP_MAX_AMMO", maps\mp\zombies\_zm_powerups::func_should_never_drop, 0, 0, 1 ); + maps\mp\zombies\_zm_powerups::add_zombie_powerup( "blue_monkey", level.cymbal_monkey_model, &"ZOMBIE_POWERUP_MAX_AMMO", maps\mp\zombies\_zm_powerups::func_should_never_drop, 1, 0, 0 ); +} + +init_cleansed_powerup_fx() +{ + level._effect["powerup_on_caution"] = loadfx( "misc/fx_zombie_powerup_on_blue" ); +} + +onstartgametype() +{ + maps\mp\gametypes_zm\_zm_gametype::setup_classic_gametype(); + level thread makefindfleshstructs(); + flag_init( "start_supersprint" ); + level.custom_player_fake_death = ::empty; + level.custom_player_fake_death_cleanup = ::empty; + level.overrideplayerdamage = ::cleanseddamagechecks; + level.playerlaststand_func = ::cleansed_player_laststand; + level.onendgame = ::cleansedonendgame; + level.ontimelimit = ::cleansedontimelimit; + level.powerup_player_valid = ::cleansed_alive_check; + level.nml_zombie_spawners = level.zombie_spawners; + level.dodge_score_highlight = 1; + level.dodge_show_revive_icon = 1; + level.custom_max_zombies = 6; + level.custom_zombie_health = 200; + level.nml_dogs_enabled = 0; + level.timercountdown = 1; + level.initial_spawn = 1; + level.nml_reaction_interval = 2000; + level.nml_min_reaction_dist_sq = 1024; + level.nml_max_reaction_dist_sq = 5760000; + level.min_humans = 1; + level.no_end_game_check = 1; + level.zombie_health = level.zombie_vars["zombie_health_start"]; + level._get_game_module_players = undefined; + level.powerup_drop_count = 0; + level.is_zombie_level = 1; + level.player_becomes_zombie = ::onzombifyplayer; + level.player_kills_player = ::player_kills_player; + set_zombie_var( "zombify_player", 1 ); + set_zombie_var( "penalty_died", 1.0 ); + set_zombie_var( "penalty_downed", 1.0 ); + + if ( isdefined( level._zcleansed_weapon_progression ) ) + { + for ( i = 0; i < level._zcleansed_weapon_progression.size; i++ ) + addguntoprogression( level._zcleansed_weapon_progression[i] ); + } + + maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zcleansed", ::zcleansed_logic ); +} + +turnedlog( text ) +{ +/# + println( "TURNEDLOG: " + text + "\\n" ); +#/ +} + +cleansed_player_laststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ +/# + +#/ + self maps\mp\zombies\_zm_score::player_downed_penalty(); + + if ( isdefined( attacker ) && isplayer( attacker ) && attacker != self ) + { + if ( isdefined( self.hide_owner ) && self.hide_owner ) + attacker notify( "invisible_player_killed" ); + } + + if ( isdefined( self.is_zombie ) && self.is_zombie && deathanimduration == 0 ) + self stopsounds(); +} + +cleansed_alive_check( player ) +{ + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.nuked ) && player.nuked || isdefined( player.is_in_process_of_zombify ) && player.is_in_process_of_zombify || isdefined( player.is_in_process_of_humanify ) && player.is_in_process_of_humanify ) + return false; + + return true; +} + +cleanseddamagechecks( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.is_in_process_of_zombify ) && self.is_in_process_of_zombify || isdefined( self.is_in_process_of_humanify ) && self.is_in_process_of_humanify ) + return 0; + + if ( isdefined( self.nuked ) && self.nuked && eattacker != self.nuker && eattacker != self ) + return 0; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && eattacker != self ) + { + if ( eattacker.team == self.team ) + return 0; + + if ( ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie ) == ( isdefined( self.is_zombie ) && self.is_zombie ) ) + return 0; + + if ( !cleansed_alive_check( eattacker ) ) + return 0; + + if ( isdefined( self.nuked ) && self.nuked && isdefined( self.nuker ) && eattacker != self.nuker ) + return 0; + + if ( isdefined( self.is_zombie ) && self.is_zombie && sweapon == "cymbal_monkey_zm" && smeansofdeath != "MOD_IMPACT" ) + { + level notify( "killed_by_decoy", eattacker, self ); + idamage = self.health + 666; + } + else + self.last_player_attacker = eattacker; +/# + +#/ + eattacker thread maps\mp\gametypes_zm\_weapons::checkhit( sweapon ); + + if ( !eattacker.is_zombie && eattacker maps\mp\zombies\_zm_powerups::is_insta_kill_active() ) + idamage = self.health + 666; + } + + if ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie ) + self playsoundtoplayer( "evt_player_swiped", self ); + + return self maps\mp\zombies\_zm::player_damage_override( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); +} + +custom_end_screen() +{ + players = get_players(); + winner = players[0]; + + foreach ( player in players ) + { + if ( isdefined( winner ) && player.score > winner.score ) + winner = player; + } + + if ( isdefined( level.last_human_standing ) ) + { + for ( i = 0; i < players.size; i++ ) + { + players[i].bonus_msg_hud = newclienthudelem( players[i] ); + players[i].bonus_msg_hud.alignx = "center"; + players[i].bonus_msg_hud.aligny = "middle"; + players[i].bonus_msg_hud.horzalign = "center"; + players[i].bonus_msg_hud.vertalign = "middle"; + players[i].bonus_msg_hud.y -= 130; + + if ( players[i] issplitscreen() ) + players[i].bonus_msg_hud.y += 70; + + players[i].bonus_msg_hud.foreground = 1; + players[i].bonus_msg_hud.fontscale = 5; + players[i].bonus_msg_hud.alpha = 0; + players[i].bonus_msg_hud.color = ( 1, 1, 1 ); + players[i].bonus_msg_hud.hidewheninmenu = 1; + players[i].bonus_msg_hud.font = "default"; + players[i].bonus_msg_hud settext( &"ZOMBIE_CLEANSED_SURVIVING_HUMAN_BONUS", level.last_human_standing.name ); + players[i].bonus_msg_hud changefontscaleovertime( 0.25 ); + players[i].bonus_msg_hud fadeovertime( 0.25 ); + players[i].bonus_msg_hud.alpha = 1; + players[i].bonus_msg_hud.fontscale = 2; + } + + wait 3.25; + } + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].bonus_msg_hud ) ) + { + players[i].bonus_msg_hud changefontscaleovertime( 0.5 ); + players[i].bonus_msg_hud fadeovertime( 0.5 ); + players[i].bonus_msg_hud.alpha = 0; + players[i].bonus_msg_hud.fontscale = 5; + } + } + + wait 0.5; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].bonus_msg_hud ) ) + players[i].bonus_msg_hud destroy(); + + players[i].game_over_hud = newclienthudelem( players[i] ); + players[i].game_over_hud.alignx = "center"; + players[i].game_over_hud.aligny = "middle"; + players[i].game_over_hud.horzalign = "center"; + players[i].game_over_hud.vertalign = "middle"; + players[i].game_over_hud.y -= 130; + players[i].game_over_hud.foreground = 1; + players[i].game_over_hud.fontscale = 3; + players[i].game_over_hud.alpha = 0; + players[i].game_over_hud.color = ( 1, 1, 1 ); + players[i].game_over_hud.hidewheninmenu = 1; + players[i].game_over_hud settext( &"ZOMBIE_GAME_OVER" ); + players[i].game_over_hud fadeovertime( 1 ); + players[i].game_over_hud.alpha = 1; + + if ( players[i] issplitscreen() ) + { + players[i].game_over_hud.fontscale = 2; + players[i].game_over_hud.y += 40; + } + + players[i].survived_hud = newclienthudelem( players[i] ); + players[i].survived_hud.alignx = "center"; + players[i].survived_hud.aligny = "middle"; + players[i].survived_hud.horzalign = "center"; + players[i].survived_hud.vertalign = "middle"; + players[i].survived_hud.y -= 100; + players[i].survived_hud.foreground = 1; + players[i].survived_hud.fontscale = 2; + players[i].survived_hud.alpha = 0; + players[i].survived_hud.color = ( 1, 1, 1 ); + players[i].survived_hud.hidewheninmenu = 1; + + if ( players[i] issplitscreen() ) + { + players[i].survived_hud.fontscale = 1.5; + players[i].survived_hud.y += 40; + } + + winner_text = &"ZOMBIE_CLEANSED_WIN"; + loser_text = &"ZOMBIE_CLEANSED_LOSE"; + + if ( isdefined( level.host_ended_game ) && level.host_ended_game ) + players[i].survived_hud settext( &"MP_HOST_ENDED_GAME" ); + else if ( players[i] == winner ) + players[i].survived_hud settext( winner_text ); + else + players[i].survived_hud settext( loser_text ); + + players[i].survived_hud fadeovertime( 1 ); + players[i].survived_hud.alpha = 1; + } +} + +allow_player_movement( allowed ) +{ + level.player_movement_suppressed = !allowed; + + foreach ( player in get_players() ) + { + if ( !( isdefined( player.in_zombify_call ) && player.in_zombify_call ) ) + player freezecontrolswrapper( level.player_movement_suppressed ); + } +} + +watch_game_start() +{ + level.start_audio_allowed = 1; + + level waittill( "cleansed_game_started" ); + + level.start_audio_allowed = 0; +} + +listen_to_the_doctor_pregame() +{ + thread watch_game_start(); + level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_start_single_0", undefined, undefined, 1, 4 ); + wait 4; + + if ( level.start_audio_allowed ) + { + level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_start_2", undefined, undefined, 1, 8 ); + wait 8; + } + + if ( level.start_audio_allowed ) + { + level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_start_3", undefined, undefined, 1, 8 ); + wait 4; + } + + if ( level.start_audio_allowed ) + level waittill( "cleansed_game_started" ); +} + +listen_to_the_doctor_started() +{ + level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_cure_found_line", undefined, undefined, 1, 8 ); + wait 8; +} + +listen_to_the_doctor_monkeys() +{ + level endon( "end_game" ); + + while ( true ) + { + level waittill( "killed_by_decoy", killer, killee ); + + if ( !isplayer( killee ) ) + continue; + + if ( isdefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) + continue; + + if ( !( isdefined( killer.heard_dr_monkey_killer ) && killer.heard_dr_monkey_killer ) ) + { + level.playing_turned_kill_vo = 1; + killer.heard_dr_monkey_killer = 1; + killer thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "dr_monkey_killer", undefined, undefined, 0 ); + } + + if ( !( isdefined( killee.heard_dr_monkey_killee ) && killee.heard_dr_monkey_killee ) ) + { + level.playing_turned_kill_vo = 1; + killee.heard_dr_monkey_killee = 1; + wait 0.25; + killee thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "dr_monkey_killee", undefined, undefined, 0 ); + } + + if ( isdefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) + { + wait 8; + level.playing_turned_kill_vo = 0; + } + } +} + +listen_to_the_doctor_human_deaths() +{ + level endon( "end_game" ); + + while ( true ) + { + level waittill( "killed_by_zombie", killer, killee ); + + wait 0.05; + + if ( isdefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) + continue; + + if ( !isdefined( killee.vo_human_killed_chance ) ) + killee.vo_human_killed_chance = 24; + + if ( randomint( 100 ) < killee.vo_human_killed_chance ) + { + level.playing_turned_kill_vo = 1; + killee thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "dr_human_killed", undefined, undefined, 0 ); + killee.vo_human_killed_chance = int( killee.vo_human_killed_chance * 0.5 ); + } + + if ( isdefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) + { + wait 4; + level.playing_turned_kill_vo = 0; + } + } +} + +listen_to_the_doctor_zombie_deaths() +{ + level endon( "end_game" ); + + while ( true ) + { + level waittill( "killed_by_human", killer, killee ); + + wait 0.05; + + if ( isdefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) + continue; + + if ( !isdefined( killer.vo_human_killer_chance ) ) + killer.vo_human_killer_chance = 24; + + if ( randomint( 100 ) < killer.vo_human_killer_chance ) + { + killer.vo_human_killer_chance = int( killer.vo_human_killer_chance * 0.5 ); + level.playing_turned_kill_vo = 1; + killer thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "dr_human_killer", undefined, undefined, 0 ); + } + + if ( isdefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) + { + wait 4; + level.playing_turned_kill_vo = 0; + } + } +} + +listen_to_the_doctor_endgame() +{ + wait 5; + + while ( maps\mp\gametypes_zm\_globallogic_utils::gettimeremaining() > 12000 ) + wait 1; + + r = randomint( 3 ); + + if ( r == 0 ) + level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_countdown0", undefined, undefined, 1, 4 ); + else if ( r == 1 ) + level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_countdown1", undefined, undefined, 1, 4 ); + else + level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_countdown2", undefined, undefined, 1, 4 ); + + while ( maps\mp\gametypes_zm\_globallogic_utils::gettimeremaining() > 500 ) + wait 1; + + level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_ending", undefined, undefined, 1, 4 ); +} + +anysplitscreen() +{ + foreach ( player in get_players() ) + { + if ( player issplitscreen() ) + return true; + } + + return false; +} + +listen_to_the_doctor() +{ + listen_to_the_doctor_pregame(); + + if ( !anysplitscreen() ) + { + listen_to_the_doctor_started(); + thread listen_to_the_doctor_human_deaths(); + thread listen_to_the_doctor_zombie_deaths(); + thread listen_to_the_doctor_monkeys(); + } + + thread listen_to_the_doctor_endgame(); +} + +watch_survival_time() +{ + level endon( "end_game" ); + level notify( "new_human_suviving" ); + level endon( "new_human_suviving" ); + self endon( "zombify" ); + wait 10; + + if ( !isdefined( self.vo_human_survival_chance ) ) + self.vo_human_survival_chance = 24; + + while ( true ) + { + if ( !( isdefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) ) + { + if ( randomint( 100 ) < self.vo_human_survival_chance ) + { + self.vo_human_survival_chance = int( self.vo_human_survival_chance * 0.25 ); + level.playing_turned_kill_vo = 1; + self thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "dr_survival", undefined, undefined, 0 ); + wait 4; + level.playing_turned_kill_vo = 0; + } + } + + wait 5; + } +} + +zcleansed_logic() +{ + setdvar( "player_lastStandBleedoutTime", "0.05" ); + setmatchtalkflag( "DeadChatWithDead", 1 ); + setmatchtalkflag( "DeadChatWithTeam", 1 ); + setmatchtalkflag( "DeadHearTeamLiving", 1 ); + setmatchtalkflag( "DeadHearAllLiving", 1 ); + setmatchtalkflag( "EveryoneHearsEveryone", 1 ); + level.zombie_include_powerups["carpenter"] = 0; + level.noroundnumber = 1; + level._supress_survived_screen = 1; + doors = getentarray( "zombie_door", "targetname" ); + + foreach ( door in doors ) + door setinvisibletoall(); + + level thread maps\mp\zombies\_zm_blockers::open_all_zbarriers(); + level thread delay_box_hide(); + flag_wait( "initial_players_connected" ); + level.gamestarttime = gettime(); + level.gamelengthtime = undefined; + level.custom_spawnplayer = ::respawn_cleansed_player; + allow_player_movement( 0 ); + setup_players(); + flag_wait( "initial_blackscreen_passed" ); + level thread listen_to_the_doctor(); + level thread playturnedmusic(); + level notify( "start_fullscreen_fade_out" ); + wait 1.5; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] thread create_match_start_message( &"ZOMBIE_FIND_THE_CURE", 3.0 ); + + allow_player_movement( 1 ); + spawn_initial_cure_powerup(); + waitforhumanselection(); + level notify( "cleansed_game_started" ); + level thread leaderwatch(); + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] thread create_match_start_message( &"ZOMBIE_MOST_TIME_AS_HUMAN_TO_WIN", 3.0 ); + + wait 1.2; + flag_clear( "pregame" ); + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] thread destroystartmsghud(); + + registertimelimit( 0, 1440 ); + level.discardtime = gettime() - level.starttime; + level thread watch_for_end_game(); + wait_for_round_end(); + allow_player_movement( 0 ); + wait_network_frame(); + award_round_end_bonus(); + level notify( "end_game" ); +} + +wait_for_round_end() +{ + level endon( "early_game_end" ); + level endon( "normal_game_end" ); + + while ( maps\mp\gametypes_zm\_globallogic_utils::gettimeremaining() > 0 ) + wait 1; +} + +end_game_early() +{ +/# + iprintlnbold( "SOLO GAME - RELEASE ONLY" ); + return; +#/ + level.forcedend = 1; + level notify( "early_game_end" ); + level notify( "end_game" ); +} + +watch_for_end_game() +{ + level waittill( "end_game" ); + + registertimelimit( 0, 0 ); + setgameendtime( 0 ); +} + +cleansedontimelimit() +{ + level notify( "normal_game_end" ); +} + +cleansedonendgame( winningteam ) +{ + +} + +create_match_start_message( text, duration ) +{ + level endon( "end_game" ); + self endon( "disconnect" ); + self notify( "kill_match_start_message" ); + self endon( "kill_match_start_message" ); + + if ( !isdefined( self.match_start_msg_hud ) ) + { + self.match_start_msg_hud = newclienthudelem( self ); + self.match_start_msg_hud.alignx = "center"; + self.match_start_msg_hud.aligny = "middle"; + self.match_start_msg_hud.horzalign = "center"; + self.match_start_msg_hud.vertalign = "middle"; + self.match_start_msg_hud.y -= 130; + self.match_start_msg_hud.fontscale = 5; + self.match_start_msg_hud.foreground = 1; + + if ( self issplitscreen() ) + self.match_start_msg_hud.y += 70; + + self.match_start_msg_hud.color = ( 1, 1, 1 ); + self.match_start_msg_hud.hidewheninmenu = 1; + self.match_start_msg_hud.font = "default"; + } + + self.match_start_msg_hud settext( text ); + self.match_start_msg_hud changefontscaleovertime( 0.25 ); + self.match_start_msg_hud fadeovertime( 0.25 ); + self.match_start_msg_hud.alpha = 1; + self.match_start_msg_hud.fontscale = 2; + + if ( self issplitscreen() ) + self.match_start_msg_hud.fontscale = 1.5; + + wait( duration ); + + if ( !isdefined( self.match_start_msg_hud ) ) + return; + + self.match_start_msg_hud changefontscaleovertime( 0.5 ); + self.match_start_msg_hud fadeovertime( 0.5 ); + self.match_start_msg_hud.alpha = 0; +} + +destroystartmsghud() +{ + level endon( "end_game" ); + self endon( "disconnect" ); + + if ( !isdefined( self.match_start_msg_hud ) ) + return; + + self.match_start_msg_hud destroy(); + self.match_start_msg_hud = undefined; +} + +delay_box_hide() +{ + wait 2.0; + start_chest = getstruct( "start_chest", "script_noteworthy" ); + + if ( isdefined( start_chest ) ) + start_chest maps\mp\zombies\_zm_magicbox::hide_chest(); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connected", player ); + + player thread onplayerlaststand(); + player thread onplayerdisconnect(); + player thread setup_player(); + player thread rewardsthink(); + } +} + +onplayerlaststand() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "player_downed" ); + + self takeallweapons(); + } +} + +onplayerdisconnect() +{ + level endon( "end_game" ); + + self waittill( "disconnect" ); + + if ( get_players().size <= 1 ) + end_game_early(); + else if ( !( isdefined( level.ingraceperiod ) && level.ingraceperiod ) ) + { + thread checkzombiehumanratio(); + wait 2; + players = get_players(); + + foreach ( player in players ) + player.nuked = undefined; + } +} + +zombie_ramp_up() +{ + self notify( "zombie_ramp_up" ); + self endon( "zombie_ramp_up" ); + self endon( "death_or_disconnect" ); + self endon( "humanify" ); + + if ( isdefined( level.cleansed_zombie_round ) ) + self.maxhealth = maps\mp\zombies\_zm::ai_zombie_health( level.cleansed_zombie_round ); + else + self.maxhealth = maps\mp\zombies\_zm::ai_zombie_health( 2 ); + + self.health = self.maxhealth; +} + +precache_trophy() +{ + +} + +create_trophy() +{ + +} + +give_trophy() +{ + if ( !self.has_trophy ) + { + self setclientfield( "player_eyes_special", 1 ); + self setclientfield( "player_has_eyes", 0 ); + wait_network_frame(); + + if ( cleansed_alive_check( self ) ) + self setclientfield( "player_has_eyes", self.is_zombie ); + + self.has_trophy = 1; + } +} + +remove_trophy() +{ + if ( self.has_trophy ) + { + self setclientfield( "player_eyes_special", 0 ); + self setclientfield( "player_has_eyes", 0 ); + wait_network_frame(); + + if ( cleansed_alive_check( self ) ) + self setclientfield( "player_has_eyes", self.is_zombie ); + + self.has_trophy = 0; + } +} + +enthrone( player ) +{ + player endon( "dethrone" ); + player endon( "disconnect" ); + + while ( true ) + { + if ( cleansed_alive_check( player ) && player.is_zombie ) + { + if ( !player.has_trophy ) + player give_trophy(); + } + else if ( player.has_trophy ) + player remove_trophy(); + + wait 0.1; + } +} + +dethrone( player ) +{ + player notify( "dethrone" ); + player remove_trophy(); +} + +cleansed_set_leader( leader ) +{ + if ( isdefined( leader ) && isdefined( level.cleansed_leader ) ) + { + if ( level.cleansed_leader != leader ) + { + dethrone( level.cleansed_leader ); + level.cleansed_leader = leader; + level thread enthrone( level.cleansed_leader ); + } + + return; + } + + if ( isdefined( leader ) && !isdefined( level.cleansed_leader ) ) + { + level.cleansed_leader = leader; + level thread enthrone( level.cleansed_leader ); + return; + } + + if ( !isdefined( leader ) && isdefined( level.cleansed_leader ) ) + { + if ( isdefined( level.cleansed_leader ) ) + dethrone( level.cleansed_leader ); + + level.cleansed_leader = leader; + return; + } +} + +leaderwatch() +{ + level endon( "early_game_end" ); + level endon( "normal_game_end" ); + create_trophy(); + cleansed_set_leader( undefined ); + + while ( true ) + { + hiscore = -1; + leader = undefined; + players = get_players(); + + foreach ( player in players ) + { + if ( player.score > hiscore ) + hiscore = player.score; + } + + foreach ( player in players ) + { + if ( player.score >= hiscore ) + { + if ( isdefined( leader ) ) + { + leader = undefined; + break; + } + + leader = player; + } + } + + cleansed_set_leader( leader ); + wait 0.25; + } +} + +cover_transition() +{ + self thread fadetoblackforxsec( 0, 0.15, 0.05, 0.1 ); + wait 0.1; +} + +disappear_in_flash( washuman ) +{ + playsoundatposition( "zmb_bolt", self.origin ); + + if ( washuman ) + playfx( level._effect["human_disappears"], self.origin ); + else + playfx( level._effect["zombie_disappears"], self.origin ); + + self ghost(); +} + +humanifyplayer( for_killing ) +{ +/# + +#/ + self freezecontrolswrapper( 1 ); + self thread cover_transition(); + self disappear_in_flash( 1 ); + self.team = self.prevteam; + self.pers["team"] = self.prevteam; + self.sessionteam = self.prevteam; + self turnedhuman(); + for_killing waittill_notify_or_timeout( "respawned", 0.75 ); + wait_network_frame(); + checkzombiehumanratio( self ); + self.last_player_attacker = undefined; + self freezecontrolswrapper( level.player_movement_suppressed ); + self thread watch_survival_time(); +/# + +#/ +} + +onzombifyplayer() +{ +/# + +#/ + if ( isdefined( self.in_zombify_call ) && self.in_zombify_call ) + return; + + self.in_zombify_call = 1; + + while ( isdefined( level.in_zombify_call ) && level.in_zombify_call ) + wait 0.1; + + level.in_zombify_call = 1; + self freezecontrolswrapper( 1 ); + + if ( isdefined( self.last_player_attacker ) && isplayer( self.last_player_attacker ) && ( isdefined( self.last_player_attacker.is_zombie ) && self.last_player_attacker.is_zombie ) ) + { + + } + + if ( isdefined( self.is_zombie ) && self.is_zombie ) + { +/# + +#/ + self check_for_drops( 0 ); + } + else if ( isdefined( self.last_player_attacker ) && isplayer( self.last_player_attacker ) && ( isdefined( self.last_player_attacker.is_zombie ) && self.last_player_attacker.is_zombie ) ) + { +/# + +#/ + self check_for_drops( 1 ); + self.team = level.zombie_team; + self.pers["team"] = level.zombie_team; + self.sessionteam = level.zombie_team; + self.last_player_attacker thread humanifyplayer( self ); + self.player_was_turned_by = self.last_player_attacker; + } + else + { +/# + +#/ + self check_for_drops( 1 ); + self player_suicide(); + checkzombiehumanratio( undefined, self ); + } + + self setclientfield( "player_has_eyes", 0 ); + + if ( isdefined( self.is_zombie ) && self.is_zombie ) + { + + } + + self notify( "zombified" ); + self disappear_in_flash( 0 ); + self cover_transition(); + self notify( "clear_red_flashing_overlay" ); + self.zombification_time = gettime() / 1000; + self.last_player_attacker = undefined; + self maps\mp\zombies\_zm_laststand::laststand_enable_player_weapons(); + self.ignoreme = 1; + + if ( isdefined( self.revivetrigger ) ) + self.revivetrigger delete(); + + self.revivetrigger = undefined; + self reviveplayer(); + self maps\mp\zombies\_zm_turned::turn_to_zombie(); + self freezecontrolswrapper( level.player_movement_suppressed ); + self thread zombie_ramp_up(); + level.in_zombify_call = 0; + self.in_zombify_call = 0; +/# + +#/ +} + +playerfakedeath( vdir ) +{ + if ( !( isdefined( self.is_zombie ) && self.is_zombie ) ) + { + self endon( "disconnect" ); + level endon( "game_module_ended" ); + level notify( "fake_death" ); + self notify( "fake_death" ); + self enableinvulnerability(); + self takeallweapons(); + self freezecontrolswrapper( 1 ); + self.ignoreme = 1; + origin = self.origin; + xyspeed = ( 0, 0, 0 ); + angles = self getplayerangles(); + angles = ( angles[0], angles[1], angles[2] + randomfloatrange( -5, 5 ) ); + + if ( isdefined( vdir ) && length( vdir ) > 0 ) + { + xyspeedmag = 40 + randomint( 12 ) + randomint( 12 ); + xyspeed = xyspeedmag * vectornormalize( ( vdir[0], vdir[1], 0 ) ); + } + + linker = spawn( "script_origin", ( 0, 0, 0 ) ); + linker.origin = origin; + linker.angles = angles; + self._fall_down_anchor = linker; + self playerlinkto( linker ); + self playsoundtoplayer( "zmb_player_death_fall", self ); + origin = playerphysicstrace( origin, origin + xyspeed ); + origin += vectorscale( ( 0, 0, -1 ), 52.0 ); + lerptime = 0.5; + linker moveto( origin, lerptime, lerptime ); + linker rotateto( angles, lerptime, lerptime ); + self freezecontrolswrapper( 1 ); + + linker waittill( "movedone" ); + + self giveweapon( "death_throe_zm" ); + self switchtoweapon( "death_throe_zm" ); + bounce = randomint( 4 ) + 8; + origin = origin + ( 0, 0, bounce ) - xyspeed * 0.1; + lerptime = bounce / 50.0; + linker moveto( origin, lerptime, 0, lerptime ); + + linker waittill( "movedone" ); + + origin = origin + ( 0, 0, bounce * -1 ) + xyspeed * 0.1; + lerptime /= 2.0; + linker moveto( origin, lerptime, lerptime ); + + linker waittill( "movedone" ); + + linker moveto( origin, 5, 0 ); + wait 5; + linker delete(); + self.ignoreme = 0; + self takeweapon( "death_throe_zm" ); + self disableinvulnerability(); + self freezecontrolswrapper( 0 ); + } +} + +onspawnzombie() +{ + +} + +makefindfleshstructs() +{ + structs = getstructarray( "spawn_location", "script_noteworthy" ); + + foreach ( struct in structs ) + struct.script_string = "find_flesh"; +} + +setup_players() +{ +/# + if ( getdvarint( _hash_99BF96D1 ) != 0 ) + { + foreach ( spawnpoint in level._turned_zombie_respawnpoints ) + { + text = ""; + color = ( 0, 1, 0 ); + + if ( !isdefined( spawnpoint.angles ) ) + { + text = "No Angles Defined"; + color = ( 1, 0, 0 ); + spawnpoint.angles = ( 0, 0, 0 ); + } + } + } +#/ +} + +setup_player() +{ + hotjoined = flag( "initial_players_connected" ); + flag_wait( "initial_players_connected" ); + wait 0.05; + self ghost(); + self freezecontrolswrapper( 1 ); + self.ignoreme = 0; + self.score = 0; + self.characterindex = level.characterindex; + self takeallweapons(); + self giveweapon( "knife_zm" ); + self give_start_weapon( 1 ); + self.prevteam = self.team; + self.no_revive_trigger = 1; + self.human_score = 0; + self thread player_score_update(); + self.is_zombie = 0; + self.has_trophy = 0; + self.home_team = self.team; + + if ( self.home_team == "axis" ) + self.home_team = "team3"; + + self thread wait_turn_to_zombie( hotjoined ); +} + +wait_turn_to_zombie( hot ) +{ + if ( hot ) + { + self thread fadetoblackforxsec( 0, 1.25, 0.05, 0.25 ); + wait 1; + } + + self.is_zombie = 0; + self turn_to_zombie(); + self freezecontrolswrapper( level.player_movement_suppressed ); +} + +addguntoprogression( gunname ) +{ + if ( !isdefined( level.gunprogression ) ) + level.gunprogression = []; + + level.gunprogression[level.gunprogression.size] = gunname; +} + +check_spawn_cymbal_monkey( origin, weapon ) +{ + chance = -0.05; + + if ( !self hasweapon( "cymbal_monkey_zm" ) || self getweaponammoclip( "cymbal_monkey_zm" ) < 1 ) + { + if ( weapon == "cymbal_monkey_zm" || randomfloat( 1 ) < chance ) + { + self notify( "awarded_cymbal_monkey" ); + level.spawned_cymbal_monkey = spawn_cymbalmonkey( origin ); + level.spawned_cymbal_monkey thread delete_spawned_monkey_on_turned( self ); + return true; + } + } + + return false; +} + +delete_spawned_monkey_on_turned( player ) +{ + wait 1; + + while ( isdefined( self ) && !( isdefined( player.is_zombie ) && player.is_zombie ) ) + wait_network_frame(); + + if ( isdefined( self ) ) + { + self maps\mp\zombies\_zm_powerups::powerup_delete(); + self notify( "powerup_timedout" ); + } +} + +rewardsthink() +{ + self endon( "_zombie_game_over" ); + self endon( "disconnect" ); + + while ( isdefined( self ) ) + { + self waittill( "killed_a_zombie_player", einflictor, target, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); + + if ( !( isdefined( self.is_zombie ) && self.is_zombie ) ) + { + if ( self check_spawn_cymbal_monkey( target.origin, sweapon ) ) + target.suppress_drops = 1; + } + } +} + +shotgunloadout() +{ + self endon( "_zombie_game_over" ); + self endon( "disconnect" ); + self endon( "bled_out" ); + self endon( "zombify" ); + level.cymbal_monkey_clone_weapon = "rottweil72_zm"; + + if ( !self hasweapon( "rottweil72_zm" ) ) + { + self giveweapon( "rottweil72_zm" ); + self switchtoweapon( "rottweil72_zm" ); + } + + if ( !( isdefined( self.is_zombie ) && self.is_zombie ) && !self hasweapon( level.start_weapon ) ) + { + if ( !self hasweapon( "knife_zm" ) ) + self giveweapon( "knife_zm" ); + + self give_start_weapon( 0 ); + } + + if ( self hasweapon( "rottweil72_zm" ) ) + { + self setweaponammoclip( "rottweil72_zm", 2 ); + self setweaponammostock( "rottweil72_zm", 0 ); + } + + if ( self hasweapon( level.start_weapon ) ) + self givemaxammo( level.start_weapon ); + + if ( self hasweapon( self get_player_lethal_grenade() ) ) + self getweaponammoclip( self get_player_lethal_grenade() ); + else + self giveweapon( self get_player_lethal_grenade() ); + + self setweaponammoclip( self get_player_lethal_grenade(), 2 ); + + if ( !( isdefined( self.random_human ) && self.random_human ) ) + { + + } +} + +gunprogressionthink() +{ + self endon( "_zombie_game_over" ); + self endon( "disconnect" ); + self endon( "bled_out" ); + self endon( "zombify" ); + counter = 0; + + if ( isdefined( level.gunprogression ) && !isdefined( level.cymbal_monkey_clone_weapon ) ) + level.cymbal_monkey_clone_weapon = level.gunprogression[0]; + + last = level.start_weapon; + + if ( !self hasweapon( self get_player_lethal_grenade() ) ) + self giveweapon( self get_player_lethal_grenade() ); + + self setweaponammoclip( self get_player_lethal_grenade(), 2 ); + + if ( !( isdefined( self.random_human ) && self.random_human ) ) + { + + } + + self disableweaponcycling(); + + while ( !( isdefined( self.is_zombie ) && self.is_zombie ) ) + { + if ( !isdefined( level.gunprogression[counter] ) ) + break; + + self disableweaponcycling(); + self giveweapon( level.gunprogression[counter] ); + self switchtoweapon( level.gunprogression[counter] ); + self waittill_notify_or_timeout( "weapon_change_complete", 0.5 ); + + if ( isdefined( last ) && self hasweapon( last ) ) + self takeweapon( last ); + + last = level.gunprogression[counter]; + + while ( true ) + { + self waittill( "killed_a_zombie_player", einflictor, target, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); + + if ( isdefined( sweapon ) && level.gunprogression[counter] == sweapon ) + break; + } + + counter++; + } + + self giveweapon( level.start_weapon ); + self switchtoweapon( level.start_weapon ); + + self waittill( "weapon_change_complete" ); + + if ( isdefined( last ) && self hasweapon( last ) ) + self takeweapon( last ); + + while ( true ) + { + self waittill( "killed_a_zombie_player", einflictor, target, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); + + if ( isdefined( sweapon ) && level.start_weapon == sweapon ) + { + self notify( "gun_game_achievement" ); + break; + } + } +} + +waitforhumanselection() +{ + level waittill( "initial_human_selected" ); +} + +checkzombiehumanratio( playertomove, playertoignore ) +{ + zombiecount = 0; + humancount = 0; + zombieexist = 0; + humanexist = 0; + earliestzombie = undefined; + earliestzombietime = 99999999; + + if ( get_players().size <= 1 ) + end_game_early(); + + while ( isdefined( level.checking_human_zombie_ratio ) && level.checking_human_zombie_ratio ) + wait 0.05; + + level.checking_human_zombie_ratio = 1; + + if ( isdefined( playertomove ) ) + { + someonebecominghuman = 0; + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( player.is_in_process_of_humanify ) && player.is_in_process_of_humanify ) + someonebecominghuman = 1; + } + + if ( !( isdefined( someonebecominghuman ) && someonebecominghuman ) ) + playertomove turn_to_human(); + + level.checking_human_zombie_ratio = 0; + return; + } + + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( playertoignore ) && playertoignore == player ) + continue; + + if ( !( isdefined( player.is_zombie ) && player.is_zombie ) && !( isdefined( player.is_in_process_of_zombify ) && player.is_in_process_of_zombify ) ) + { + humancount++; + humanexist = 1; + continue; + } + + zombiecount++; + zombieexist = 1; + + if ( isdefined( player.zombification_time ) && player.zombification_time < earliestzombietime ) + { + earliestzombie = player; + earliestzombietime = player.zombification_time; + } + } + + if ( humancount > 1 ) + { + players = get_players( "allies" ); + + if ( isdefined( players ) && players.size > 0 ) + { + player = random( players ); + player thread cover_transition(); + player disappear_in_flash( 1 ); +/# + +#/ + player turn_to_zombie(); + zombiecount++; + } + } + + if ( !humanexist ) + { + players = get_players( level.zombie_team ); + + if ( isdefined( players ) && players.size > 0 ) + { + player = random( players ); + player thread cover_transition(); + player disappear_in_flash( 0 ); + player.random_human = 1; +/# + +#/ + player turn_to_human(); + player.random_human = 0; + zombiecount--; + } + } + + level.checking_human_zombie_ratio = 0; +} + +get_player_rank() +{ + level.player_score_sort = []; + players = get_players(); + + foreach ( player in players ) + { + for ( index = 0; index < level.player_score_sort.size && player.score < level.player_score_sort[index].score; index++ ) + { + + } + + arrayinsert( level.player_score_sort, player, index ); + } + + for ( index = 0; index < level.player_score_sort.size; index++ ) + { + if ( self == level.player_score_sort[index] ) + return index; + } +/# + assertmsg( "This should not happen" ); +#/ + return 0; +} + +player_add_score( bonus ) +{ + mult = 1; + + if ( isdefined( self.is_zombie ) && self.is_zombie ) + mult = level.zombie_vars[level.zombie_team]["zombie_point_scalar"]; + else + mult = level.zombie_vars["allies"]["zombie_point_scalar"]; + + self maps\mp\zombies\_zm_score::add_to_player_score( bonus * mult ); +} + +player_sub_score( penalty ) +{ + penalty = int( min( self.score, penalty ) ); + self maps\mp\zombies\_zm_score::add_to_player_score( penalty * -1 ); +} + +player_suicide() +{ + self player_sub_score( level.human_player_suicide_penalty ); +/# + if ( get_players().size < 2 ) + { + self.intermission = 0; + thread spawn_initial_cure_powerup(); + } +#/ +} + +player_kills_player( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + score_multiplier = 1; + + if ( !( isdefined( eattacker.is_zombie ) && eattacker.is_zombie ) && isdefined( level.zombie_player_kill_points ) ) + { + level notify( "killed_by_human", eattacker, self ); + eattacker player_add_score( int( score_multiplier * level.zombie_player_kill_points ) ); + eattacker maps\mp\zombies\_zm_stats::add_global_stat( "PLAYER_KILLS", 1 ); + + if ( smeansofdeath == "MOD_GRENADE" || smeansofdeath == "MOD_GRENADE_SPLASH" ) + { + eattacker maps\mp\zombies\_zm_stats::increment_client_stat( "grenade_kills" ); + eattacker maps\mp\zombies\_zm_stats::increment_player_stat( "grenade_kills" ); + } + } + + if ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie && isdefined( level.human_player_kill_points ) ) + { + level notify( "killed_by_zombie", eattacker, self ); + eattacker player_add_score( int( score_multiplier * level.human_player_kill_points ) ); + eattacker maps\mp\zombies\_zm_stats::add_global_stat( "PLAYER_RETURNS", 1 ); + } +} + +award_round_end_bonus() +{ + level notify( "stop_player_scores" ); + wait 0.25; + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_time_line", undefined, undefined, 1 ); + + while ( maps\mp\zombies\_zm_laststand::player_any_player_in_laststand() || isdefined( level.in_zombify_call ) && level.in_zombify_call ) + wait 0.25; + + hiscore = -1; + + foreach ( player in get_players() ) + { + if ( !( isdefined( player.is_zombie ) && player.is_zombie ) ) + { + player player_add_score( level.human_finish_bonus_points ); + level.last_human_standing = player; + } + + if ( player.score > hiscore ) + hiscore = player.score; + } + + foreach ( player in get_players() ) + { + if ( player.score >= hiscore ) + { + player.team = player.prevteam; + player.pers["team"] = player.prevteam; + player.sessionteam = player.prevteam; + player maps\mp\zombies\_zm_stats::increment_client_stat( "wins" ); + player maps\mp\zombies\_zm_stats::add_client_stat( "losses", -1 ); + player adddstat( "skill_rating", 1.0 ); + player setdstat( "skill_variance", 1.0 ); + + if ( gamemodeismode( level.gamemode_public_match ) ) + { + player maps\mp\zombies\_zm_stats::add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "wins", 1 ); + player maps\mp\zombies\_zm_stats::add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "losses", -1 ); + } + + continue; + } + + player.team = level.zombie_team; + player.pers["team"] = level.zombie_team; + player.sessionteam = level.zombie_team; + player setdstat( "skill_rating", 0.0 ); + player setdstat( "skill_variance", 1.0 ); + } +} + +player_score_update() +{ + self endon( "_zombie_game_over" ); + self endon( "disconnect" ); + level endon( "stop_player_scores" ); + waittime = 0.05; + + while ( true ) + { + self waittill_any_or_timeout( waittime, "zombify", "humanify" ); + + if ( !( isdefined( self._can_score ) && self._can_score ) ) + continue; + + if ( isdefined( level.hostmigrationtimer ) && level.hostmigrationtimer ) + continue; + + if ( !( isdefined( level.ingraceperiod ) && level.ingraceperiod ) ) + { + if ( !cleansed_alive_check( self ) ) + waittime = 0.05; + else if ( isdefined( self.is_zombie ) && self.is_zombie ) + { + waittime = level.zombie_penalty_period; + self player_sub_score( level.zombie_penalty_points ); + } + else + { + waittime = level.human_bonus_period; + self player_add_score( level.human_bonus_points ); + } + } + } +} + +respawn_cleansed_player() +{ + spawnpoint = self maps\mp\zombies\_zm_turned::getspawnpoint(); + self.sessionstate = "playing"; + self allowspectateteam( "freelook", 0 ); + self spawn( spawnpoint.origin, spawnpoint.angles ); + self notify( "stop_flame_damage" ); + self reviveplayer(); + self.nuked = 0; + self.nuker = undefined; + self.suppress_drops = 0; + self.is_burning = 0; + self.is_zombie = 0; + self.ignoreme = 0; + self freezecontrolswrapper( level.player_movement_suppressed ); + self notify( "respawned" ); +} + +zcleansed_zombie_powerup_grab( powerup, zombie_player ) +{ + if ( !cleansed_alive_check( zombie_player ) ) + return 0; + + switch ( powerup.powerup_name ) + { + case "the_cure": + level notify( "initial_human_selected" ); + zombie_player freezecontrolswrapper( 1 ); + zombie_player disappear_in_flash( 0 ); + zombie_player turn_to_human(); + players = get_players(); + + foreach ( player in players ) + { + if ( player.is_zombie ) + player thread zombie_ramp_up(); + } + + break; + default: + if ( isdefined( level.cleansed_powerups[powerup.powerup_name] ) ) + { + if ( isdefined( level.cleansed_powerups[powerup.powerup_name].callback ) ) + powerup thread [[ level.cleansed_powerups[powerup.powerup_name].callback ]]( zombie_player ); + } + } +} + +zcleansed_powerup_grab( powerup, player ) +{ + if ( !cleansed_alive_check( player ) ) + return 0; + + switch ( powerup.powerup_name ) + { + case "blue_monkey": + player maps\mp\zombies\_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); + player setweaponammoclip( "cymbal_monkey_zm", 1 ); + player notify( "powerup_blue_monkey" ); + break; + default: + if ( isdefined( level.cleansed_powerups[powerup.powerup_name] ) ) + { + if ( isdefined( level.cleansed_powerups[powerup.powerup_name].callback ) ) + powerup thread [[ level.cleansed_powerups[powerup.powerup_name].callback ]]( player ); + } + } +} + +zcleansed_powerup_custom_time_logic( powerup ) +{ + if ( powerup.powerup_name == "the_cure" ) + return 0; + + return 15; +} + +spawn_initial_cure_powerup() +{ + struct = random( level._turned_powerup_spawnpoints ); + maps\mp\zombies\_zm_powerups::specific_powerup_drop( "the_cure", struct.origin ); +} + +spawn_cymbalmonkey( origin ) +{ + monkey = maps\mp\zombies\_zm_powerups::specific_powerup_drop( "blue_monkey", origin ); + return monkey; +} + +check_for_drops( washuman ) +{ + if ( !isdefined( level.cleansed_kills_for_drops ) ) + level.cleansed_kills_for_drops = 0; + + if ( isdefined( self.nuked ) && self.nuked || isdefined( self.suppress_drops ) && self.suppress_drops ) + return; + + level.cleansed_kills_for_drops++; + chance = ( level.cleansed_kills_for_drops - 2 ) / level.cleansed_kills_for_drops; + + if ( chance > 0 ) + { + r = randomfloatrange( 0, 1 ); + + if ( r < chance ) + { + self thread drop_powerup( washuman ); + level.cleansed_kills_for_drops = 0; + } + } +} + +add_cleansed_powerup( name, powerupmodel, text, team, zombie_death_frequency, human_death_frequency, callback ) +{ + if ( !isdefined( level.cleansed_powerups ) ) + level.cleansed_powerups = []; + + precachemodel( powerupmodel ); + + if ( !isdefined( level.zombie_powerups[name] ) ) + { + maps\mp\zombies\_zm_powerups::include_zombie_powerup( name ); + maps\mp\zombies\_zm_powerups::add_zombie_powerup( name, powerupmodel, text, maps\mp\zombies\_zm_powerups::func_should_never_drop, 0, team == 2, team == 1 ); + + if ( !isdefined( level.statless_powerups ) ) + level.statless_powerups = []; + + level.statless_powerups[name] = 1; + } + + powerup = spawnstruct(); + powerup.name = name; + powerup.model = powerupmodel; + powerup.team = team; + powerup.callback = callback; + powerup.zfrequency = zombie_death_frequency; + powerup.hfrequency = human_death_frequency; + level.cleansed_powerups[name] = powerup; +} + +init_cleansed_powerups() +{ + level._effect["powerup_on_solo"] = loadfx( "misc/fx_zombie_powerup_on_blue" ); + add_cleansed_powerup( "green_nuke", "zombie_bomb", &"ZOMBIE_THIS_IS_A_BUG", 0, 0.4, 0, ::turned_powerup_green_nuke ); + add_cleansed_powerup( "green_double", "zombie_x2_icon", &"ZOMBIE_THIS_IS_A_BUG", 0, 1, 0, ::turned_powerup_green_double ); + add_cleansed_powerup( "green_insta", "zombie_skull", &"ZOMBIE_THIS_IS_A_BUG", 0, 0.1, 0, ::turned_powerup_green_insta ); + add_cleansed_powerup( "green_ammo", "zombie_ammocan", &"ZOMBIE_POWERUP_MAX_AMMO", 0, 1, 0, ::turned_powerup_green_ammo ); + add_cleansed_powerup( "green_monkey", level.cymbal_monkey_model, &"ZOMBIE_THIS_IS_A_BUG", 0, 0.4, 0, ::turned_powerup_green_monkey ); + add_cleansed_powerup( "red_nuke", "zombie_bomb", &"ZOMBIE_THIS_IS_A_BUG", 1, 0, 0.4, ::turned_powerup_red_nuke ); + add_cleansed_powerup( "red_ammo", "zombie_ammocan", &"ZOMBIE_THIS_IS_A_BUG", 1, 0, 1, ::turned_powerup_red_ammo ); + add_cleansed_powerup( "red_double", "zombie_x2_icon", &"ZOMBIE_THIS_IS_A_BUG", 1, 0, 1, ::turned_powerup_red_double ); + add_cleansed_powerup( "yellow_double", "zombie_x2_icon", &"ZOMBIE_THIS_IS_A_BUG", 2, 0.1, 0.1, ::turned_powerup_yellow_double ); + add_cleansed_powerup( "yellow_nuke", "zombie_bomb", &"ZOMBIE_THIS_IS_A_BUG", 2, 0.01, 0.01, ::turned_powerup_yellow_nuke ); + level.cleansed_powerup_history_depth = []; + level.cleansed_powerup_history_depth[0] = 2; + level.cleansed_powerup_history_depth[1] = 1; + level.cleansed_powerup_history = []; + level.cleansed_powerup_history[0] = []; + level.cleansed_powerup_history[1] = []; + level.cleansed_powerup_history_last = []; + level.cleansed_powerup_history_last[0] = 0; + level.cleansed_powerup_history_last[1] = 0; + + for ( i = 0; i < level.cleansed_powerup_history_depth[0]; i++ ) + { + level.cleansed_powerup_history[0][i] = "none"; + level.cleansed_powerup_history[1][i] = "none"; + } +} + +pick_a_powerup( washuman ) +{ + total = 0; + + foreach ( powerup in level.cleansed_powerups ) + { + powerup.recent = 0; + + for ( i = 0; i < level.cleansed_powerup_history_depth[washuman]; i++ ) + { + if ( level.cleansed_powerup_history[washuman][i] == powerup.name ) + powerup.recent = 1; + } + + if ( powerup.recent ) + continue; + + if ( washuman ) + { + total += powerup.hfrequency; + continue; + } + + total += powerup.zfrequency; + } + + if ( total == 0 ) + return undefined; + + r = randomfloat( total ); + + foreach ( powerup in level.cleansed_powerups ) + { + if ( powerup.recent ) + continue; + + if ( washuman ) + r -= powerup.hfrequency; + else + r -= powerup.zfrequency; + + if ( r <= 0 ) + { + level.cleansed_powerup_history[washuman][level.cleansed_powerup_history_last[washuman]] = powerup.name; + level.cleansed_powerup_history_last[washuman]++; + + if ( level.cleansed_powerup_history_last[washuman] >= level.cleansed_powerup_history_depth[washuman] ) + level.cleansed_powerup_history_last[washuman] = 0; + + return powerup; + } + } + + return undefined; +} + +drop_powerup( washuman ) +{ + powerup = pick_a_powerup( washuman ); + + if ( isdefined( powerup ) ) + { + origin = self.origin; + wait 0.25; + maps\mp\zombies\_zm_powerups::specific_powerup_drop( powerup.name, origin ); + } +} + +powerup_can_player_grab( player ) +{ + if ( !cleansed_alive_check( player ) ) + return false; + + if ( isdefined( level.cleansed_powerups[self.powerup_name] ) ) + { + if ( level.cleansed_powerups[self.powerup_name].team == 0 && ( isdefined( player.is_zombie ) && player.is_zombie ) ) + return false; + + if ( level.cleansed_powerups[self.powerup_name].team == 1 && !( isdefined( player.is_zombie ) && player.is_zombie ) ) + return false; + } + else + { + if ( self.zombie_grabbable && !( isdefined( player.is_zombie ) && player.is_zombie ) ) + return false; + + if ( !self.zombie_grabbable && ( isdefined( player.is_zombie ) && player.is_zombie ) ) + return false; + } + + return true; +} + +player_nuke_fx() +{ + self endon( "death" ); + self endon( "respawned" ); + self endon( "stop_flame_damage" ); + + if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_torso"] ) ) + { + if ( !self.isdog ) + playfxontag( level._effect["character_fire_death_torso"], self, "J_SpineLower" ); + } + + if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_sm"] ) ) + { + wait 1; + tagarray = []; + tagarray[0] = "J_Elbow_LE"; + tagarray[1] = "J_Elbow_RI"; + tagarray[2] = "J_Knee_RI"; + tagarray[3] = "J_Knee_LE"; + tagarray = array_randomize( tagarray ); + playfxontag( level._effect["character_fire_death_sm"], self, tagarray[0] ); + wait 1; + tagarray[0] = "J_Wrist_RI"; + tagarray[1] = "J_Wrist_LE"; + + if ( !isdefined( self.a ) || !isdefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" ) + { + tagarray[2] = "J_Ankle_RI"; + tagarray[3] = "J_Ankle_LE"; + } + + tagarray = array_randomize( tagarray ); + playfxontag( level._effect["character_fire_death_sm"], self, tagarray[0] ); + playfxontag( level._effect["character_fire_death_sm"], self, tagarray[1] ); + } +} + +player_nuke( player ) +{ + nuke_time = 2; + self.isdog = 0; + self.nuked = 1; + self.nuker = player; + self freezecontrolswrapper( 1 ); + maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, nuke_time / 2, nuke_time ); + self thread player_nuke_fx(); + wait( nuke_time ); + + if ( isdefined( self ) ) + { + if ( isdefined( player ) ) + self dodamage( self.health + 666, player.origin, player, player, "none", "MOD_EXPLOSIVE", 0, "nuke_zm" ); + else + { + self.nuked = undefined; + self dodamage( self.health + 666, self.origin, self, self, "none", "MOD_EXPLOSIVE", 0, "nuke_zm" ); + } + } +} + +turned_powerup_green_nuke( player ) +{ + location = self.origin; + playfx( level.zombie_powerups["nuke"].fx, location ); + level thread maps\mp\zombies\_zm_powerups::nuke_flash(); + players = get_players(); + + foreach ( target in players ) + { + if ( !cleansed_alive_check( target ) ) + continue; + + if ( isdefined( target.is_zombie ) && target.is_zombie ) + { + target thread player_nuke( player ); + continue; + } + } +} + +turned_powerup_green_double( player ) +{ + level thread maps\mp\zombies\_zm_powerups::double_points_powerup( self, player ); +} + +turned_powerup_green_insta( player ) +{ + level thread maps\mp\zombies\_zm_powerups::insta_kill_powerup( self, player ); +} + +turned_powerup_green_ammo( player ) +{ + level thread maps\mp\zombies\_zm_powerups::full_ammo_powerup( self, player ); + weapon = player getcurrentweapon(); + player givestartammo( weapon ); +} + +turned_powerup_green_monkey( player ) +{ + player maps\mp\zombies\_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); + player setweaponammoclip( "cymbal_monkey_zm", 1 ); + player notify( "powerup_green_monkey" ); +} + +turned_powerup_red_nuke( player ) +{ + location = self.origin; + playfx( level.zombie_powerups["nuke"].fx, location ); + level thread maps\mp\zombies\_zm_powerups::nuke_flash(); + players = get_players(); + + foreach ( target in players ) + { + if ( !cleansed_alive_check( target ) ) + continue; + + if ( isdefined( target.is_zombie ) && target.is_zombie ) + continue; + + target thread player_nuke( player ); + } +} + +turned_powerup_red_ammo( player ) +{ + level thread maps\mp\zombies\_zm_powerups::empty_clip_powerup( self ); +} + +turned_powerup_red_double( player ) +{ + level thread maps\mp\zombies\_zm_powerups::double_points_powerup( self, player ); +} + +turned_powerup_yellow_double( player ) +{ + level thread maps\mp\zombies\_zm_powerups::double_points_powerup( self, player ); +} + +turned_powerup_yellow_nuke( player ) +{ + location = self.origin; + playfx( level.zombie_powerups["nuke"].fx, location ); + level thread maps\mp\zombies\_zm_powerups::nuke_flash(); + players = get_players(); + + foreach ( target in players ) + { + if ( !cleansed_alive_check( target ) ) + continue; + + if ( isdefined( target.team != player.team ) && target.team != player.team ) + target thread player_nuke( player ); + } +} + +playturnedmusic() +{ + ent = spawn( "script_origin", ( 0, 0, 0 ) ); + ent thread stopturnedmusic(); + playsoundatposition( "mus_zmb_gamemode_start", ( 0, 0, 0 ) ); + wait 5; + ent playloopsound( "mus_zmb_gamemode_loop", 5 ); +} + +stopturnedmusic() +{ + level waittill( "end_game" ); + + self stoploopsound( 1.5 ); + wait 1; + self delete(); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/zturned.gsc b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/zturned.gsc new file mode 100644 index 0000000..53207cb --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/gametypes_zm/zturned.gsc @@ -0,0 +1,29 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\gametypes_zm\_zm_gametype; + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::main(); + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level._game_module_player_damage_callback = maps\mp\gametypes_zm\_zm_gametype::game_module_player_damage_callback; + level._game_module_custom_spawn_init_func = maps\mp\gametypes_zm\_zm_gametype::custom_spawn_init_func; + maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zturned" ); +} + +onprecachegametype() +{ + precacheshellshock( "tabun_gas_mp" ); + level thread maps\mp\gametypes_zm\_zm_gametype::init(); + maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zturned" ); +} + +onstartgametype() +{ + maps\mp\gametypes_zm\_zm_gametype::setup_classic_gametype(); + maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zturned" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/teams/_teamset_cdc.gsc b/ZM/Maps/Tranzit Diner/maps/mp/teams/_teamset_cdc.gsc new file mode 100644 index 0000000..cef3a54 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/teams/_teamset_cdc.gsc @@ -0,0 +1,55 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +register() +{ + game["teamset"] = []; + game["teamset"]["cdc"] = ::cdc; +} + +level_init() +{ + game["allies"] = "cdc"; + game["axis"] = "cia"; + setdvar( "g_TeamName_Allies", &"ZMUI_CDC_SHORT" ); + setdvar( "g_TeamName_Axis", &"ZMUI_CIA_SHORT" ); + game["strings"]["allies_win"] = &"ZM_CDC_WIN_MATCH"; + game["strings"]["allies_win_round"] = &"ZM_CDC_WIN_ROUND"; + game["strings"]["allies_mission_accomplished"] = &"ZM_CDC_MISSION_ACCOMPLISHED"; + game["strings"]["allies_eliminated"] = &"ZM_CDC_ELIMINATED"; + game["strings"]["allies_forfeited"] = &"ZM_CDC_FORFEITED"; + game["strings"]["allies_name"] = &"ZM_CDC_NAME"; + game["music"]["spawn_allies"] = "SPAWN_OPS"; + game["music"]["victory_allies"] = "mus_victory_usa"; + game["icons"]["allies"] = "faction_cdc"; + game["colors"]["allies"] = ( 0, 0, 0 ); + game["voice"]["allies"] = "vox_st6_"; + setdvar( "scr_allies", "marines" ); + game["strings"]["axis_win"] = &"ZM_CIA_WIN_MATCH"; + game["strings"]["axis_win_round"] = &"ZM_CIA_WIN_ROUND"; + game["strings"]["axis_mission_accomplished"] = &"ZM_CIA_MISSION_ACCOMPLISHED"; + game["strings"]["axis_eliminated"] = &"ZM_CIA_ELIMINATED"; + game["strings"]["axis_forfeited"] = &"ZM_CIA_FORFEITED"; + game["strings"]["axis_name"] = &"ZM_CIA_NAME"; + game["music"]["spawn_axis"] = "SPAWN_RUS"; + game["music"]["victory_axis"] = "mus_victory_soviet"; + game["icons"]["axis"] = "faction_cia"; + game["colors"]["axis"] = ( 0.65, 0.57, 0.41 ); + game["voice"]["axis"] = "vox_pmc_"; +} + +cdc() +{ + allies(); + axis(); +} + +allies() +{ + +} + +axis() +{ + +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_ambush.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_ambush.gsc new file mode 100644 index 0000000..193c66d --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_ambush.gsc @@ -0,0 +1,282 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zm_transit_utility; +#include maps\mp\zm_transit_bus; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zombies\_zm_powerups; + +main() +{ + level.numroundssincelastambushround = 0; + level.numbusstopssincelastambushround = 0; + level.numambushrounds = 0; + level.ambushpercentageperstop = 10; + level.ambushpercentageperround = 25; + flag_init( "ambush_round", 0 ); + flag_init( "ambush_safe_area_active", 0 ); + initambusheffects(); + thread ambushroundkeeper(); +/# + adddebugcommand( "devgui_cmd \"Zombies:1/Bus:14/Ambush Round:6/Always:1\" \"zombie_devgui ambush_round always\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Bus:14/Ambush Round:6/Never:2\" \"zombie_devgui ambush_round never\"\n" ); +#/ +} + +initambusheffects() +{ + level._effect["ambush_bus_fire"] = loadfx( "env/fire/fx_fire_md" ); +} + +shouldstartambushround() +{ +/# + if ( level.ambushpercentageperstop == 100 ) + return true; + + if ( getdvarint( _hash_FA81816F ) == 2 ) + return false; +#/ + if ( level.numbusstopssincelastambushround < 2 ) + { + + } + + randint = randomintrange( 0, 100 ); + percentchance = level.numbusstopssincelastambushround * level.ambushpercentageperstop; + + if ( randint < percentchance ) + { + + } + + percentchance = level.numroundssincelastambushround * level.ambushpercentageperround; + + if ( randint < percentchance ) + { + + } + + if ( maps\mp\zm_transit_bus::busgasempty() ) + return true; + + return false; +} + +isambushroundactive() +{ + return flag_exists( "ambush_round" ) && flag( "ambush_round" ); +} + +is_ambush_round_spawning_active() +{ + return flag_exists( "ambush_safe_area_active" ) && flag( "ambush_safe_area_active" ); +} + +ambushstartround() +{ + flag_set( "ambush_round" ); + ambushroundthink(); +} + +ambushendround() +{ + level.the_bus.issafe = 1; + maps\mp\zm_transit_bus::busgasadd( 60 ); + level.numbusstopssincelastambushround = 0; + level.numroundssincelastambushround = 0; + flag_clear( "ambush_round" ); +} + +cancelambushround() +{ + flag_clear( "ambush_round" ); + flag_clear( "ambush_safe_area_active" ); + maps\mp\zm_transit_utility::try_resume_zombie_spawning(); + bbprint( "zombie_events", "category %s type %s round %d", "DOG", "stop", level.round_number ); + level.the_bus notify( "ambush_round_fail_safe" ); +} + +ambushroundspawning() +{ + level.numambushrounds++; + wait 6; + level.the_bus.issafe = 0; +} + +limitedambushspawn() +{ + if ( level.numambushrounds < 3 ) + dogcount = level.dog_targets.size * 6; + else + dogcount = level.dog_targets.size * 8; + + setupdogspawnlocs(); + level thread ambushroundspawnfailsafe( 20 ); + + while ( get_current_zombie_count() > 0 ) + wait 1.0; + + level notify( "end_ambushWaitFunction" ); +} + +ambushroundthink() +{ + module = maps\mp\zombies\_zm_game_module::get_game_module( level.game_module_nml_index ); + + if ( isdefined( module.hub_start_func ) ) + { + level thread [[ module.hub_start_func ]]( "nml" ); + level notify( "game_mode_started" ); + } + + level thread ambushroundspawning(); + ambushwaitfunction(); + ambushendround(); +} + +ambushwaitfunction() +{ + +} + +ambushpointfailsafe() +{ + level.the_bus endon( "ambush_point" ); + + level.the_bus waittill( "reached_stop_point" ); + + cancelambushround(); +} + +ambushroundspawnfailsafe( timer ) +{ + ambushroundtimelimit = timer; + + for ( currentambushtime = 0; currentambushtime < ambushroundtimelimit; currentambushtime++ ) + { + if ( !flag( "ambush_round" ) ) + return; + + wait 1.0; + } + + level notify( "end_ambushWaitFunction" ); + wait 5; + dogs = getaispeciesarray( "all", "zombie_dog" ); + + for ( i = 0; i < dogs.size; i++ ) + { + if ( isdefined( dogs[i].marked_for_death ) && dogs[i].marked_for_death ) + continue; + + if ( is_magic_bullet_shield_enabled( dogs[i] ) ) + continue; + + dogs[i] dodamage( dogs[i].health + 666, dogs[i].origin ); + } +} + +ambushdoghealthincrease() +{ + switch ( level.numambushrounds ) + { + case 1: + level.dog_health = 400; + break; + case 2: + level.dog_health = 900; + break; + case 3: + level.dog_health = 1300; + break; + case 4: + level.dog_health = 1600; + break; + default: + level.dog_health = 1600; + break; + } +} + +ambushroundaftermath() +{ + power_up_origin = level.the_bus gettagorigin( "tag_body" ); + + if ( isdefined( power_up_origin ) ) + level thread maps\mp\zombies\_zm_powerups::specific_powerup_drop( "full_ammo", power_up_origin ); +} + +ambushroundeffects() +{ + wait 2; + level thread ambushlightningeffect( "tag_body" ); + wait 0.5; + level thread ambushlightningeffect( "tag_wheel_back_left" ); + wait 0.5; + level thread ambushlightningeffect( "tag_wheel_back_right" ); + wait 0.5; + level thread ambushlightningeffect( "tag_wheel_front_left" ); + wait 0.5; + level thread ambushlightningeffect( "tag_wheel_front_right" ); + wait 1.5; + fxent0 = spawnandlinkfxtotag( level._effect["ambush_bus_fire"], level.the_bus, "tag_body" ); + fxent1 = spawnandlinkfxtotag( level._effect["ambush_bus_fire"], level.the_bus, "tag_wheel_back_left" ); + fxent2 = spawnandlinkfxtotag( level._effect["ambush_bus_fire"], level.the_bus, "tag_wheel_back_right" ); + fxent3 = spawnandlinkfxtotag( level._effect["ambush_bus_fire"], level.the_bus, "tag_wheel_front_left" ); + fxent4 = spawnandlinkfxtotag( level._effect["ambush_bus_fire"], level.the_bus, "tag_wheel_front_right" ); + + level waittill( "end_ambushWaitFunction" ); + + fxent0 delete(); + fxent1 delete(); + fxent2 delete(); + fxent3 delete(); + fxent4 delete(); +} + +ambushlightningeffect( tag ) +{ + fxentlighting = spawnandlinkfxtotag( level._effect["lightning_dog_spawn"], level.the_bus, tag ); + wait 5; + fxentlighting delete(); +} + +setupdogspawnlocs() +{ + level.enemy_dog_locations = []; + currentzone = undefined; + ambush_zones = getentarray( "ambush_volume", "script_noteworthy" ); + + for ( i = 0; i < ambush_zones.size; i++ ) + { + touching = 0; + + for ( b = 0; b < level.the_bus.bounds_origins.size && !touching; b++ ) + { + bounds = level.the_bus.bounds_origins[b]; + touching = bounds istouching( ambush_zones[i] ); + } + + if ( touching ) + { + currentzone = ambush_zones[i]; + break; + } + } + + assert( isdefined( currentzone ), "Bus needs to be in an ambush zone for an ambush round: " + level.the_bus.origin ); + level.enemy_dog_locations = getstructarray( currentzone.target, "targetname" ); +} + +ambushroundkeeper() +{ + while ( true ) + { + level waittill( "between_round_over" ); + + level.numroundssincelastambushround++; + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_classic.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_classic.gsc new file mode 100644 index 0000000..59bed18 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_classic.gsc @@ -0,0 +1,525 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zm_transit_utility; +#include maps\mp\zombies\_zm_ai_screecher; +#include maps\mp\zombies\_zm_ai_avogadro; +#include maps\mp\zm_transit_buildables; +#include maps\mp\zm_transit_sq; +#include maps\mp\zombies\_zm_equip_turbine; +#include maps\mp\zombies\_zm_equip_turret; +#include maps\mp\zombies\_zm_equip_electrictrap; +#include maps\mp\zm_transit_bus; +#include maps\mp\zm_transit_ai_screecher; +#include maps\mp\zombies\_zm_banking; +#include maps\mp\zm_transit_power; +#include maps\mp\zm_transit_ambush; +#include maps\mp\zm_transit; +#include maps\mp\zm_transit_distance_tracking; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_blockers; +#include maps\mp\zombies\_zm_weapon_locker; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_audio; + +precache() +{ + maps\mp\zombies\_zm_ai_screecher::precache(); + maps\mp\zombies\_zm_ai_avogadro::precache(); + maps\mp\zm_transit_buildables::include_buildables(); + maps\mp\zm_transit_buildables::init_buildables(); + maps\mp\zm_transit_sq::init(); + maps\mp\zombies\_zm_equip_turbine::init(); + maps\mp\zombies\_zm_equip_turret::init(); + maps\mp\zombies\_zm_equip_electrictrap::init(); + precachemodel( "zm_collision_transit_town_classic" ); + precachemodel( "p_glo_tools_chest_tall" ); + precachemodel( "fxanim_zom_bus_interior_mod" ); + precachemodel( "p6_anim_zm_barricade_board_collision" ); + precachemodel( "p6_anim_zm_barricade_board_bus_collision" ); + registerclientfield( "vehicle", "the_bus_spawned", 1, 1, "int" ); + registerclientfield( "vehicle", "bus_flashing_lights", 1, 1, "int" ); + registerclientfield( "vehicle", "bus_head_lights", 1, 1, "int" ); + registerclientfield( "vehicle", "bus_brake_lights", 1, 1, "int" ); + registerclientfield( "vehicle", "bus_turn_signal_left", 1, 1, "int" ); + registerclientfield( "vehicle", "bus_turn_signal_right", 1, 1, "int" ); + registerclientfield( "allplayers", "screecher_sq_lights", 1, 1, "int" ); + registerclientfield( "allplayers", "screecher_maxis_lights", 1, 1, "int" ); + registerclientfield( "allplayers", "sq_tower_sparks", 1, 1, "int" ); + onplayerconnect_callback( maps\mp\zm_transit_bus::onplayerconnect ); + onplayerconnect_callback( maps\mp\zm_transit_ai_screecher::portal_player_watcher ); + level thread maps\mp\zombies\_zm_banking::init(); +} + +main() +{ + level.ta_vaultfee = 100; + level.ta_tellerfee = 100; + + if ( !isdefined( level.custom_ai_type ) ) + level.custom_ai_type = []; + + level.custom_ai_type[level.custom_ai_type.size] = maps\mp\zombies\_zm_ai_screecher::init; + level.custom_ai_type[level.custom_ai_type.size] = maps\mp\zombies\_zm_ai_avogadro::init; + level.enemy_location_override_func = maps\mp\zm_transit_bus::enemy_location_override; + level.adjust_enemyoverride_func = maps\mp\zm_transit_bus::adjust_enemyoverride; + level.closest_player_override = ::closest_player_transit; + door_triggers = getentarray( "electric_door", "script_noteworthy" ); + + foreach ( trigger in door_triggers ) + { + if ( isdefined( trigger.script_flag ) && trigger.script_flag == "OnPowDoorWH" ) + continue; + + trigger.power_door_ignore_flag_wait = 1; + } + + door_triggers = getentarray( "local_electric_door", "script_noteworthy" ); + + foreach ( trigger in door_triggers ) + { + if ( isdefined( trigger.script_flag ) && trigger.script_flag == "OnPowDoorWH" ) + continue; + + trigger.power_door_ignore_flag_wait = 1; + } + + level.zm_traversal_override = ::zm_traversal_override; + level.the_bus = getent( "the_bus", "targetname" ); + level thread init_bus(); + level thread maps\mp\zm_transit_sq::start_transit_sidequest(); + level thread inert_zombies_init(); + level thread maps\mp\zm_transit_power::initializepower(); + level thread maps\mp\zm_transit_ambush::main(); + level thread maps\mp\zm_transit::falling_death_init(); + level.check_valid_spawn_override = maps\mp\zm_transit::transit_respawn_override; + level.zombie_check_suppress_gibs = maps\mp\zm_transit_bus::shouldsuppressgibs; + level thread transit_vault_breach_init(); + level thread maps\mp\zm_transit_distance_tracking::zombie_tracking_init(); + level thread solo_tombstone_removal(); + level thread collapsing_bridge_init(); + level thread banking_and_weapon_locker_main(); + level thread bus_roof_damage_init(); + level thread diner_hatch_access(); + level thread maps\mp\zombies\_zm_buildables::think_buildables(); + setdvar( "r_rimIntensity_debug", 1 ); + setdvar( "r_rimIntensity", 3.5 ); + level thread zm_traversal_override_ignores(); + level thread maps\mp\zombies\_zm::post_main(); + level.spectator_respawn_custom_score = ::callback_spectator_respawn_custom_score; + level.custom_pap_deny_vo_func = ::transit_custom_deny_vox; + level.custom_generic_deny_vo_func = ::transit_custom_deny_vox; + level.custom_player_death_vo_func = ::transit_custom_death_vox; + level.custom_powerup_vo_response = ::transit_custom_powerup_vo_response; + level.zombie_vars["zombie_intermission_time"] = 12; +} + +zm_traversal_override_ignores() +{ + +} + +zm_traversal_override( traversealias ) +{ + suffix = ""; + sndalias = undefined; + chance = 0; + sndchance = 0; + + if ( !( isdefined( self.isscreecher ) && self.isscreecher ) && !( isdefined( self.is_avogadro ) && self.is_avogadro ) ) + { + if ( isdefined( self.traversestartnode ) && isdefined( self.traversestartnode.script_string ) && self.traversestartnode.script_string == "ignore_traverse_override" ) + return traversealias; + + switch ( traversealias ) + { + case "jump_down_48": + if ( isdefined( self.has_legs ) && self.has_legs ) + { + suffix = "_stumble"; + chance = 0; + } + + break; + case "jump_down_90": + case "jump_down_222": + case "jump_down_190": + case "jump_down_127": + if ( isdefined( self.has_legs ) && self.has_legs ) + { + suffix = "_stumble"; + chance = 30; + } + + break; + case "jump_up_48": + case "jump_up_222": + case "jump_up_190": + case "jump_up_127": + sndalias = "vox_zmba_zombie_pickup_" + randomint( 2 ); + suffix = "_grabbed"; + chance = 6; + sndchance = 3; + break; + } + + if ( chance != 0 && randomint( 100 ) <= chance ) + { + if ( isdefined( sndalias ) && randomint( 100 ) <= sndchance ) + playsoundatposition( sndalias, self.origin ); + + traversealias += suffix; + } + } + + return traversealias; +} + +init_bus() +{ + flag_wait( "start_zombie_round_logic" ); + level.the_bus thread maps\mp\zm_transit_bus::bussetup(); +} + +closest_player_transit( origin, players ) +{ + if ( isdefined( level.the_bus ) && level.the_bus.numaliveplayersridingbus > 0 || !( isdefined( level.calc_closest_player_using_paths ) && level.calc_closest_player_using_paths ) ) + player = getclosest( origin, players ); + else + player = get_closest_player_using_paths( origin, players ); + + return player; +} + +transit_vault_breach_init() +{ + vault_doors = getentarray( "town_bunker_door", "targetname" ); + array_thread( vault_doors, ::transit_vault_breach ); +} + +transit_vault_breach() +{ + if ( isdefined( self ) ) + { + self.damage_state = 0; + + if ( isdefined( self.target ) ) + { + clip = getent( self.target, "targetname" ); + clip linkto( self ); + self.clip = clip; + } + + self thread vault_breach_think(); + } + else + return; +} + +vault_breach_think() +{ + level endon( "intermission" ); + self.health = 99999; + self setcandamage( 1 ); + self.damage_state = 0; + self.clip.health = 99999; + self.clip setcandamage( 1 ); + + while ( true ) + { + self thread track_clip_damage(); + + self waittill( "damage", amount, attacker, direction, point, dmg_type, modelname, tagname, partname, weaponname ); + + if ( isdefined( weaponname ) && ( weaponname == "emp_grenade_zm" || weaponname == "ray_gun_zm" || weaponname == "ray_gun_upgraded_zm" ) ) + continue; + + if ( isdefined( amount ) && amount <= 1 ) + continue; + + if ( isplayer( attacker ) && ( dmg_type == "MOD_PROJECTILE" || dmg_type == "MOD_PROJECTILE_SPLASH" || dmg_type == "MOD_EXPLOSIVE" || dmg_type == "MOD_EXPLOSIVE_SPLASH" || dmg_type == "MOD_GRENADE" || dmg_type == "MOD_GRENADE_SPLASH" ) ) + { + if ( self.damage_state == 0 ) + self.damage_state = 1; + + playfxontag( level._effect["def_explosion"], self, "tag_origin" ); + self playsound( "exp_vault_explode" ); + self bunkerdoorrotate( 1 ); + + if ( isdefined( self.script_flag ) ) + flag_set( self.script_flag ); + + if ( isdefined( self.clip ) ) + self.clip connectpaths(); + + wait 1; + playsoundatposition( "zmb_cha_ching_loud", self.origin ); + return; + } + } +} + +track_clip_damage() +{ + self endon( "damage" ); + + self.clip waittill( "damage", amount, attacker, direction, point, dmg_type ); + + self notify( "damage", amount, attacker, direction, point, dmg_type ); +} + +bunkerdoorrotate( open, time = 0.2 ) +{ + rotate = self.script_float; + + if ( !open ) + rotate *= -1; + + if ( isdefined( self.script_angles ) ) + { + self notsolid(); + self rotateto( self.script_angles, time, 0, 0 ); + self thread maps\mp\zombies\_zm_blockers::door_solid_thread(); + } +} + +collapsing_bridge_init() +{ + time = 1.5; + trig = getent( "bridge_trig", "targetname" ); + + if ( !isdefined( trig ) ) + return; + + bridge = getentarray( trig.target, "targetname" ); + + if ( !isdefined( bridge ) ) + return; + + trig waittill( "trigger", who ); + + trig playsound( "evt_bridge_collapse_start" ); + trig thread play_delayed_sound( time ); + + for ( i = 0; i < bridge.size; i++ ) + { + if ( isdefined( bridge[i].script_angles ) ) + rot_angle = bridge[i].script_angles; + else + rot_angle = ( 0, 0, 0 ); + + earthquake( randomfloatrange( 0.5, 1 ), 1.5, bridge[i].origin, 1000 ); + exploder( 150 ); + bridge[i] rotateto( rot_angle, time, 0, 0 ); + } + + wait 1; + + if ( !isdefined( level.collapse_vox_said ) ) + { + level thread automatonspeak( "inform", "bridge_collapse" ); + level.collapse_vox_said = 1; + } +} + +play_delayed_sound( time ) +{ + wait( time ); + self playsound( "evt_bridge_collapse_end" ); +} + +banking_and_weapon_locker_main() +{ + flag_wait( "start_zombie_round_logic" ); + weapon_locker = spawnstruct(); + weapon_locker.origin = ( 8236, -6844, 144 ); + weapon_locker.angles = vectorscale( ( 0, 1, 0 ), 30.0 ); + weapon_locker.script_length = 16; + weapon_locker.script_width = 32; + weapon_locker.script_height = 64; + deposit_spot = spawnstruct(); + deposit_spot.origin = ( 588, 402, 6 ); + deposit_spot.angles = ( 0, 0, 0 ); + deposit_spot.targetname = "bank_deposit"; + deposit_spot.script_unitrigger_type = "unitrigger_radius_use"; + deposit_spot.radius = 32; + withdraw_spot = spawnstruct(); + withdraw_spot.origin = ( 588, 496, 6 ); + withdraw_spot.angles = ( 0, 0, 0 ); + withdraw_spot.targetname = "bank_withdraw"; + withdraw_spot.script_unitrigger_type = "unitrigger_radius_use"; + withdraw_spot.radius = 32; + level thread maps\mp\zombies\_zm_weapon_locker::main(); + weapon_locker thread maps\mp\zombies\_zm_weapon_locker::triggerweaponslockerwatch(); + level thread maps\mp\zombies\_zm_banking::main(); + deposit_spot thread maps\mp\zombies\_zm_banking::bank_deposit_unitrigger(); + withdraw_spot thread maps\mp\zombies\_zm_banking::bank_withdraw_unitrigger(); +} + +bus_roof_damage_init() +{ + trigs = getentarray( "bus_knock_off", "targetname" ); + array_thread( trigs, ::bus_roof_damage ); +} + +bus_roof_damage() +{ + while ( true ) + { + self waittill( "trigger", who ); + + if ( isplayer( who ) ) + { + if ( who getstance() == "stand" ) + who dodamage( 1, who.origin ); + } + else if ( !( isdefined( who.marked_for_death ) && who.marked_for_death ) && ( isdefined( who.has_legs ) && who.has_legs ) ) + { + who dodamage( who.health + 100, who.origin ); + who.marked_for_death = 1; + level.zombie_total++; + } + + wait 0.1; + } +} + +diner_hatch_access() +{ + diner_hatch = getent( "diner_hatch", "targetname" ); + diner_hatch_col = getent( "diner_hatch_collision", "targetname" ); + diner_hatch_mantle = getent( "diner_hatch_mantle", "targetname" ); + + if ( !isdefined( diner_hatch ) || !isdefined( diner_hatch_col ) ) + return; + + diner_hatch hide(); + diner_hatch_mantle.start_origin = diner_hatch_mantle.origin; + diner_hatch_mantle.origin += vectorscale( ( 0, 0, 1 ), 500.0 ); + player = wait_for_buildable( "dinerhatch" ); + diner_hatch show(); + diner_hatch_col delete(); + diner_hatch_mantle.origin = diner_hatch_mantle.start_origin; + player maps\mp\zombies\_zm_buildables::track_placed_buildables( "dinerhatch" ); +} + +inert_zombies_init() +{ + inert_spawn_location = getstructarray( "inert_location", "script_noteworthy" ); + + if ( isdefined( inert_spawn_location ) ) + array_thread( inert_spawn_location, ::spawn_inert_zombies ); +} + +spawn_inert_zombies() +{ + if ( !isdefined( self.angles ) ) + self.angles = ( 0, 0, 0 ); + + wait 0.1; + + if ( isdefined( level.zombie_spawners ) ) + { + spawner = random( level.zombie_spawners ); + ai = spawn_zombie( spawner ); + } + + if ( isdefined( ai ) ) + { + ai forceteleport( self.origin, self.angles ); + ai.start_inert = 1; + } +} + +sparking_power_lines() +{ + lines = getentarray( "power_line_sparking", "targetname" ); +} + +callback_spectator_respawn_custom_score() +{ + difference = 1500 - self.score; + money_required = 1; + + if ( difference >= 1000 ) + money_required = 2; + + if ( !sessionmodeisonlinegame() ) + { + if ( !isdefined( self.account_val ) ) + self.account_val = 0; + + if ( self.account_val >= money_required ) + self.account_val -= money_required; + else + self.account_val = 0; + } + else + { + account_val = self maps\mp\zombies\_zm_stats::get_map_stat( "depositBox" ); + + if ( account_val >= money_required ) + self set_map_stat( "depositBox", account_val - money_required ); + else + self set_map_stat( "depositBox", 0 ); + } +} + +transit_custom_deny_vox( door_buy ) +{ + switch ( self.characterindex ) + { + case 0: + alias = randomintrange( 2, 5 ); + + if ( isdefined( door_buy ) && door_buy ) + alias = undefined; + + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "door_deny", undefined, alias ); + break; + case 1: + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); + break; + case 2: + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); + break; + case 3: + x = randomint( 100 ); + + if ( x > 66 ) + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); + else if ( x > 33 ) + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_box", undefined, 0 ); + else + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 0 ); + + break; + } +} + +transit_custom_death_vox() +{ + if ( self.characterindex != 2 ) + return false; + + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "pain_high" ); + return true; +} + +transit_custom_powerup_vo_response( powerup_player, powerup ) +{ + dist = 250000; + players = get_players(); + + foreach ( player in players ) + { + if ( player == powerup_player ) + continue; + else if ( distancesquared( player.origin, powerup_player.origin ) < dist ) + player do_player_general_vox( "general", "exert_laugh", 10, 5 ); + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_distance_tracking.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_distance_tracking.gsc new file mode 100644 index 0000000..3d5e091 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_distance_tracking.gsc @@ -0,0 +1,144 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_spawner; + +zombie_tracking_init() +{ + level.zombie_respawned_health = []; + + if ( !isdefined( level.zombie_tracking_dist ) ) + level.zombie_tracking_dist = 1500; + + if ( !isdefined( level.zombie_tracking_wait ) ) + level.zombie_tracking_wait = 10; + + while ( true ) + { + zombies = get_round_enemy_array(); + + if ( !isdefined( zombies ) || isdefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking ) + { + wait( level.zombie_tracking_wait ); + continue; + } + else + { + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i] ) && !( isdefined( zombies[i].ignore_distance_tracking ) && zombies[i].ignore_distance_tracking ) ) + zombies[i] thread delete_zombie_noone_looking( level.zombie_tracking_dist ); + } + } + + wait( level.zombie_tracking_wait ); + } +} + +delete_zombie_noone_looking( how_close ) +{ + self endon( "death" ); + + if ( !isdefined( how_close ) ) + how_close = 1000; + + distance_squared_check = how_close * how_close; + too_far_dist = distance_squared_check * 3; + + if ( isdefined( level.zombie_tracking_too_far_dist ) ) + too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist; + + self.inview = 0; + self.player_close = 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].sessionstate == "spectator" ) + continue; + + if ( isdefined( level.only_track_targeted_players ) ) + { + if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[i] ) + continue; + } + + can_be_seen = self player_can_see_me( players[i] ); + + if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist ) + self.inview++; + + if ( distancesquared( self.origin, players[i].origin ) < distance_squared_check ) + self.player_close++; + } + + wait 0.1; + + if ( self.inview == 0 && self.player_close == 0 ) + { + if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" ) + return; + + if ( isdefined( self.electrified ) && self.electrified == 1 ) + return; + + if ( isdefined( self.in_the_ground ) && self.in_the_ground == 1 ) + return; + + zombies = getaiarray( "axis" ); + + if ( ( !isdefined( self.damagemod ) || self.damagemod == "MOD_UNKNOWN" ) && self.health < self.maxhealth ) + { + if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) ) + { + level.zombie_total++; + level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health; + } + } + else if ( zombies.size + level.zombie_total > 24 || zombies.size + level.zombie_total <= 24 && self.health >= self.maxhealth ) + { + if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) ) + { + level.zombie_total++; + + if ( self.health < level.zombie_health ) + level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health; + } + } + + self maps\mp\zombies\_zm_spawner::reset_attack_spot(); + self notify( "zombie_delete" ); + self delete(); + recalc_zombie_array(); + } +} + +player_can_see_me( player ) +{ + playerangles = player getplayerangles(); + playerforwardvec = anglestoforward( playerangles ); + playerunitforwardvec = vectornormalize( playerforwardvec ); + banzaipos = self.origin; + playerpos = player getorigin(); + playertobanzaivec = banzaipos - playerpos; + playertobanzaiunitvec = vectornormalize( playertobanzaivec ); + forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec ); + + if ( forwarddotbanzai >= 1 ) + anglefromcenter = 0; + else if ( forwarddotbanzai <= -1 ) + anglefromcenter = 180; + else + anglefromcenter = acos( forwarddotbanzai ); + + playerfov = getdvarfloat( "cg_fov" ); + banzaivsplayerfovbuffer = getdvarfloat( _hash_BCB625CF ); + + if ( banzaivsplayerfovbuffer <= 0 ) + banzaivsplayerfovbuffer = 0.2; + + playercanseeme = anglefromcenter <= playerfov * 0.5 * ( 1 - banzaivsplayerfovbuffer ); + return playercanseeme; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_dr.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_dr.gsc new file mode 100644 index 0000000..618df07 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_dr.gsc @@ -0,0 +1,865 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zm_transit_utility; +#include maps\mp\zm_transit_dr_gamemodes; +#include maps\mp\_visionset_mgr; +#include maps\mp\zm_transit_dr_ffotd; +#include maps\mp\zm_transit_dr_fx; +#include maps\mp\zombies\_zm; +#include maps\mp\animscripts\zm_death; +#include maps\mp\_sticky_grenade; +#include maps\mp\zombies\_load; +#include maps\mp\gametypes_zm\_spawning; +#include maps\mp\zm_transit_lava; +#include maps\mp\zombies\_zm_weap_cymbal_monkey; +#include maps\mp\zm_transit_dr_achievement; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_devgui; +#include maps\mp\gametypes_zm\_globallogic_utils; + +gamemode_callback_setup() +{ + maps\mp\zm_transit_dr_gamemodes::init(); +} + +encounter_init() +{ + precacheshader( "sun_moon_zombie" ); + level.precachecustomcharacters = ::precache_team_characters; + level.givecustomcharacters = ::give_team_characters; +} + +zclassic_init() +{ + level._zcleansed_weapon_progression = array( "rpd_zm", "srm1216_zm", "judge_zm", "qcw05_zm", "kard_zm" ); + survival_init(); +} + +zclassic_preinit() +{ + zclassic_init(); +} + +zcleansed_preinit() +{ + level._zcleansed_weapon_progression = array( "judge_zm", "srm1216_zm", "hk416_zm", "qcw05_zm", "kard_zm" ); + level.cymbal_monkey_clone_weapon = "srm1216_zm"; + survival_init(); +} + +survival_init() +{ + level.force_team_characters = 1; + level.should_use_cia = 0; + + if ( randomint( 100 ) > 50 ) + level.should_use_cia = 1; + + level.precachecustomcharacters = ::precache_team_characters; + level.givecustomcharacters = ::give_team_characters; + flag_wait( "start_zombie_round_logic" ); + level.custom_intermission = ::transit_standard_intermission; +} + +transit_standard_intermission() +{ + self closemenu(); + self closeingamemenu(); + level endon( "stop_intermission" ); + self endon( "disconnect" ); + self endon( "death" ); + self notify( "_zombie_game_over" ); + self.score = self.score_total; + self.sessionstate = "intermission"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_transit_burn", self ); + self stopshellshock(); + points = getstructarray( "intermission", "targetname" ); + point = undefined; + + if ( !isdefined( points ) || points.size == 0 ) + { + points = getentarray( "info_intermission", "classname" ); + + if ( points.size < 1 ) + { +/# + println( "NO info_intermission POINTS IN MAP" ); +#/ + return; + } + } + + self.game_over_bg = newclienthudelem( self ); + self.game_over_bg.x = 0; + self.game_over_bg.y = 0; + self.game_over_bg.horzalign = "fullscreen"; + self.game_over_bg.vertalign = "fullscreen"; + self.game_over_bg.foreground = 1; + self.game_over_bg.sort = 1; + self.game_over_bg setshader( "black", 640, 480 ); + self.game_over_bg.alpha = 1; + org = undefined; + + while ( true ) + { + foreach ( struct in points ) + { + if ( isdefined( struct.script_string ) && struct.script_string == level.scr_zm_map_start_location ) + point = struct; + } + + if ( !isdefined( point ) ) + point = points[0]; + + if ( !isdefined( org ) ) + self spawn( point.origin, point.angles ); + + if ( isdefined( point.target ) ) + { + if ( !isdefined( org ) ) + { + org = spawn( "script_model", self.origin + vectorscale( ( 0, 0, -1 ), 60.0 ) ); + org setmodel( "tag_origin" ); + } + + org.origin = point.origin; + org.angles = point.angles; + + for ( j = 0; j < get_players().size; j++ ) + { + player = get_players()[j]; + player camerasetposition( org ); + player camerasetlookat(); + player cameraactivate( 1 ); + } + + speed = 20; + + if ( isdefined( point.speed ) ) + speed = point.speed; + + target_point = getstruct( point.target, "targetname" ); + dist = distance( point.origin, target_point.origin ); + time = dist / speed; + q_time = time * 0.25; + + if ( q_time > 1 ) + q_time = 1; + + self.game_over_bg fadeovertime( q_time ); + self.game_over_bg.alpha = 0; + org moveto( target_point.origin, time, q_time, q_time ); + org rotateto( target_point.angles, time, q_time, q_time ); + wait( time - q_time ); + self.game_over_bg fadeovertime( q_time ); + self.game_over_bg.alpha = 1; + wait( q_time ); + } + else + { + self.game_over_bg fadeovertime( 1 ); + self.game_over_bg.alpha = 0; + wait 5; + self.game_over_bg thread fade_up_over_time( 1 ); + } + } +} + +zturned_preinit() +{ + encounter_init(); +} + +createfx_callback() +{ + ents = getentarray(); + + for ( i = 0; i < ents.size; i++ ) + { + if ( ents[i].classname != "info_player_start" ) + ents[i] delete(); + } +} + +main() +{ + level thread maps\mp\zm_transit_dr_ffotd::main_start(); + level.level_createfx_callback_thread = ::createfx_callback; + level.default_game_mode = "zcleansed"; + level.default_start_location = "diner"; + level._get_random_encounter_func = maps\mp\zm_transit_utility::get_random_encounter_match; + setup_rex_starts(); + maps\mp\zm_transit_dr_fx::main(); + maps\mp\zombies\_zm::init_fx(); + maps\mp\animscripts\zm_death::precache_gib_fx(); + level.zombiemode = 1; + level._no_water_risers = 1; + + if ( !isdefined( level.zombie_surfing_kills ) ) + { + level.zombie_surfing_kills = 1; + level.zombie_surfing_kill_count = 6; + } + + maps\mp\_sticky_grenade::init(); + level.level_specific_stats_init = ::init_transit_dr_stats; + maps\mp\zombies\_load::main(); + init_clientflags(); + registerclientfield( "allplayers", "playerinfog", 1, 1, "int" ); + level.custom_breadcrumb_store_func = ::transit_breadcrumb_store_func; + + if ( getdvar( "createfx" ) == "1" ) + return; + + precacheshellshock( "lava" ); + precacheshellshock( "lava_small" ); + precache_survival_barricade_assets(); + include_game_modules(); + maps\mp\gametypes_zm\_spawning::level_use_unified_spawning( 1 ); + level.givecustomloadout = ::givecustomloadout; + initcharacterstartindex(); + level.initial_round_wait_func = ::initial_round_wait_func; + level.zombie_init_done = ::zombie_init_done; + level.zombiemode_using_pack_a_punch = 1; + level.zombiemode_reusing_pack_a_punch = 1; + level.pap_interaction_height = 47; + level.zombiemode_using_doubletap_perk = 1; + level.zombiemode_using_juggernaut_perk = 1; + level.zombiemode_using_marathon_perk = 1; + level.zombiemode_using_revive_perk = 1; + level.zombiemode_using_sleightofhand_perk = 1; + level.register_offhand_weapons_for_level_defaults_override = ::offhand_weapon_overrride; + level._zombie_custom_add_weapons = ::custom_add_weapons; + level._allow_melee_weapon_switching = 1; + level.uses_gumps = 1; + setdvar( "aim_target_fixed_actor_size", 1 ); + include_weapons(); + include_powerups(); + level thread maps\mp\zm_transit_lava::lava_damage_init(); + level.zm_transit_burn_max_duration = 2; + setup_zombie_init(); + maps\mp\zombies\_zm::init(); + level.legacy_cymbal_monkey = 1; + maps\mp\zombies\_zm_weap_cymbal_monkey::init(); + + if ( !isdefined( level.vsmgr_prio_overlay_zm_transit_burn ) ) + level.vsmgr_prio_overlay_zm_transit_burn = 20; + + maps\mp\_visionset_mgr::vsmgr_register_info( "overlay", "zm_transit_burn", 1, level.vsmgr_prio_overlay_zm_transit_burn, 15, 1, maps\mp\_visionset_mgr::vsmgr_duration_lerp_thread_per_player, 0 ); + level maps\mp\zm_transit_dr_achievement::init(); + precacheitem( "death_throe_zm" ); + level.zones = []; + level.zone_manager_init_func = ::transit_zone_init; + init_zones[0] = "zone_gas"; + level thread maps\mp\zombies\_zm_zonemgr::manage_zones( init_zones ); + level.zombie_ai_limit = 24; + setdvar( "zombiemode_path_minz_bias", 13 ); + level thread maps\mp\zm_transit_dr_ffotd::main_end(); + flag_wait( "start_zombie_round_logic" ); + level notify( "players_done_connecting" ); +/# + execdevgui( "devgui_zombie_transit_dr" ); + level.custom_devgui = ::zombie_transit_dr_devgui; +#/ + level thread set_transit_wind(); + level.speed_change_round = 15; + level.speed_change_max = 5; +} + +setup_rex_starts() +{ + add_gametype( "zcleansed", ::dummy, "zcleansed", ::dummy ); + add_gameloc( "diner", ::dummy, "diner", ::dummy ); +} + +dummy() +{ + +} + +init_clientflags() +{ + +} + +set_player_in_fog( onoff ) +{ + if ( onoff ) + self setclientfield( "playerinfog", 1 ); + else + self setclientfield( "playerinfog", 0 ); +} + +transit_breadcrumb_store_func( store_crumb ) +{ + if ( isdefined( self.isonbus ) && self.isonbus ) + return 0; + + return store_crumb; +} + +post_first_init() +{ + while ( !isdefined( anim.notfirsttime ) ) + wait 0.5; + + anim.meleerange = 36; + anim.meleerangesq = anim.meleerange * anim.meleerange; +} + +set_transit_wind() +{ + setdvar( "enable_global_wind", 1 ); + setdvar( "wind_global_vector", "-120 -115 -120" ); + setdvar( "wind_global_low_altitude", 0 ); + setdvar( "wind_global_hi_altitude", 2000 ); + setdvar( "wind_global_low_strength_percent", 0.5 ); +} + +precache_team_characters() +{ + precachemodel( "c_zom_player_cdc_dlc1_fb" ); + precachemodel( "c_zom_hazmat_viewhands" ); + precachemodel( "c_zom_player_cia_dlc1_fb" ); + precachemodel( "c_zom_suit_viewhands" ); +} + +precache_survival_barricade_assets() +{ + survival_barricades = getstructarray( "game_mode_object" ); + + for ( i = 0; i < survival_barricades.size; i++ ) + { + if ( isdefined( survival_barricades[i].script_string ) && survival_barricades[i].script_string == "survival" ) + { + if ( isdefined( survival_barricades[i].script_parameters ) ) + precachemodel( survival_barricades[i].script_parameters ); + } + } +} + +initcharacterstartindex() +{ + level.characterstartindex = 0; +/# + forcecharacter = getdvarint( _hash_FEE4CB69 ); + + if ( forcecharacter != 0 ) + level.characterstartindex = forcecharacter - 1; +#/ +} + +give_team_characters() +{ + self detachall(); + self set_player_is_female( 0 ); + + if ( !isdefined( self.characterindex ) ) + self.characterindex = 1; + + self setmodel( "c_zom_player_cdc_dlc1_fb" ); + self.voice = "american"; + self.skeleton = "base"; + self setviewmodel( "c_zom_hazmat_viewhands" ); + self.characterindex = 1; + self setmovespeedscale( 1 ); + self setsprintduration( 4 ); + self setsprintcooldown( 0 ); +} + +setup_personality_character_exerts() +{ + level.exert_sounds[1]["burp"][0] = "vox_plr_0_exert_burp_0"; + level.exert_sounds[1]["burp"][1] = "vox_plr_0_exert_burp_1"; + level.exert_sounds[1]["burp"][2] = "vox_plr_0_exert_burp_2"; + level.exert_sounds[1]["burp"][3] = "vox_plr_0_exert_burp_3"; + level.exert_sounds[1]["burp"][4] = "vox_plr_0_exert_burp_4"; + level.exert_sounds[1]["burp"][5] = "vox_plr_0_exert_burp_5"; + level.exert_sounds[1]["burp"][6] = "vox_plr_0_exert_burp_6"; + level.exert_sounds[2]["burp"][0] = "vox_plr_1_exert_burp_0"; + level.exert_sounds[2]["burp"][1] = "vox_plr_1_exert_burp_1"; + level.exert_sounds[2]["burp"][2] = "vox_plr_1_exert_burp_2"; + level.exert_sounds[2]["burp"][3] = "vox_plr_1_exert_burp_3"; + level.exert_sounds[3]["burp"][0] = "vox_plr_2_exert_burp_0"; + level.exert_sounds[3]["burp"][1] = "vox_plr_2_exert_burp_1"; + level.exert_sounds[3]["burp"][2] = "vox_plr_2_exert_burp_2"; + level.exert_sounds[3]["burp"][3] = "vox_plr_2_exert_burp_3"; + level.exert_sounds[3]["burp"][4] = "vox_plr_2_exert_burp_4"; + level.exert_sounds[3]["burp"][5] = "vox_plr_2_exert_burp_5"; + level.exert_sounds[3]["burp"][6] = "vox_plr_2_exert_burp_6"; + level.exert_sounds[4]["burp"][0] = "vox_plr_3_exert_burp_0"; + level.exert_sounds[4]["burp"][1] = "vox_plr_3_exert_burp_1"; + level.exert_sounds[4]["burp"][2] = "vox_plr_3_exert_burp_2"; + level.exert_sounds[4]["burp"][3] = "vox_plr_3_exert_burp_3"; + level.exert_sounds[4]["burp"][4] = "vox_plr_3_exert_burp_4"; + level.exert_sounds[4]["burp"][5] = "vox_plr_3_exert_burp_5"; + level.exert_sounds[4]["burp"][6] = "vox_plr_3_exert_burp_6"; + level.exert_sounds[1]["hitmed"][0] = "vox_plr_0_exert_pain_medium_0"; + level.exert_sounds[1]["hitmed"][1] = "vox_plr_0_exert_pain_medium_1"; + level.exert_sounds[1]["hitmed"][2] = "vox_plr_0_exert_pain_medium_2"; + level.exert_sounds[1]["hitmed"][3] = "vox_plr_0_exert_pain_medium_3"; + level.exert_sounds[2]["hitmed"][0] = "vox_plr_1_exert_pain_medium_0"; + level.exert_sounds[2]["hitmed"][1] = "vox_plr_1_exert_pain_medium_1"; + level.exert_sounds[2]["hitmed"][2] = "vox_plr_1_exert_pain_medium_2"; + level.exert_sounds[2]["hitmed"][3] = "vox_plr_1_exert_pain_medium_3"; + level.exert_sounds[3]["hitmed"][0] = "vox_plr_2_exert_pain_medium_0"; + level.exert_sounds[3]["hitmed"][1] = "vox_plr_2_exert_pain_medium_1"; + level.exert_sounds[3]["hitmed"][2] = "vox_plr_2_exert_pain_medium_2"; + level.exert_sounds[3]["hitmed"][3] = "vox_plr_2_exert_pain_medium_3"; + level.exert_sounds[4]["hitmed"][0] = "vox_plr_3_exert_pain_medium_0"; + level.exert_sounds[4]["hitmed"][1] = "vox_plr_3_exert_pain_medium_1"; + level.exert_sounds[4]["hitmed"][2] = "vox_plr_3_exert_pain_medium_2"; + level.exert_sounds[4]["hitmed"][3] = "vox_plr_3_exert_pain_medium_3"; + level.exert_sounds[1]["hitlrg"][0] = "vox_plr_0_exert_pain_high_0"; + level.exert_sounds[1]["hitlrg"][1] = "vox_plr_0_exert_pain_high_1"; + level.exert_sounds[1]["hitlrg"][2] = "vox_plr_0_exert_pain_high_2"; + level.exert_sounds[1]["hitlrg"][3] = "vox_plr_0_exert_pain_high_3"; + level.exert_sounds[2]["hitlrg"][0] = "vox_plr_1_exert_pain_high_0"; + level.exert_sounds[2]["hitlrg"][1] = "vox_plr_1_exert_pain_high_1"; + level.exert_sounds[2]["hitlrg"][2] = "vox_plr_1_exert_pain_high_2"; + level.exert_sounds[2]["hitlrg"][3] = "vox_plr_1_exert_pain_high_3"; + level.exert_sounds[3]["hitlrg"][0] = "vox_plr_2_exert_pain_high_0"; + level.exert_sounds[3]["hitlrg"][1] = "vox_plr_2_exert_pain_high_1"; + level.exert_sounds[3]["hitlrg"][2] = "vox_plr_2_exert_pain_high_2"; + level.exert_sounds[3]["hitlrg"][3] = "vox_plr_2_exert_pain_high_3"; + level.exert_sounds[4]["hitlrg"][0] = "vox_plr_3_exert_pain_high_0"; + level.exert_sounds[4]["hitlrg"][1] = "vox_plr_3_exert_pain_high_1"; + level.exert_sounds[4]["hitlrg"][2] = "vox_plr_3_exert_pain_high_2"; + level.exert_sounds[4]["hitlrg"][3] = "vox_plr_3_exert_pain_high_3"; +} + +givecustomloadout( takeallweapons, alreadyspawned ) +{ + self giveweapon( "knife_zm" ); + self give_start_weapon( 1 ); +} + +transit_intermission() +{ + self closemenu(); + self closeingamemenu(); + level endon( "stop_intermission" ); + self endon( "disconnect" ); + self endon( "death" ); + self notify( "_zombie_game_over" ); + self.score = self.score_total; + self.sessionstate = "intermission"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_transit_burn", self ); + self stopshellshock(); + self.game_over_bg = newclienthudelem( self ); + self.game_over_bg.x = 0; + self.game_over_bg.y = 0; + self.game_over_bg.horzalign = "fullscreen"; + self.game_over_bg.vertalign = "fullscreen"; + self.game_over_bg.foreground = 1; + self.game_over_bg.sort = 1; + self.game_over_bg setshader( "black", 640, 480 ); + self.game_over_bg.alpha = 1; + + if ( !isdefined( level.the_bus ) ) + { + self.game_over_bg fadeovertime( 1 ); + self.game_over_bg.alpha = 0; + wait 5; + self.game_over_bg thread maps\mp\zombies\_zm::fade_up_over_time( 1 ); + } + else + { + zonestocheck = []; + zonestocheck[zonestocheck.size] = "zone_amb_bridge"; + zonestocheck[zonestocheck.size] = "zone_trans_11"; + zonestocheck[zonestocheck.size] = "zone_town_west"; + zonestocheck[zonestocheck.size] = "zone_town_west2"; + zonestocheck[zonestocheck.size] = "zone_tow"; + near_bridge = 0; + + foreach ( zone in zonestocheck ) + { + if ( level.the_bus maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_amb_bridge" ) ) + near_bridge = 1; + } + + if ( near_bridge ) + { + trig = getent( "bridge_trig", "targetname" ); + trig notify( "trigger" ); + } + + org = spawn( "script_model", level.the_bus gettagorigin( "tag_camera" ) ); + org setmodel( "tag_origin" ); + org.angles = level.the_bus gettagangles( "tag_camera" ); + org linkto( level.the_bus ); + self setorigin( org.origin ); + self.angles = org.angles; + + if ( !flag( "OnPriDoorYar" ) || !flag( "OnPriDoorYar2" ) ) + { + flag_set( "OnPriDoorYar" ); + wait_network_frame(); + } + + if ( !level.the_bus.ismoving ) + { + level.the_bus.gracetimeatdestination = 0.1; + level.the_bus notify( "depart_early" ); + } + + players = get_players(); + + for ( j = 0; j < players.size; j++ ) + { + player = players[j]; + player camerasetposition( org ); + player camerasetlookat(); + player cameraactivate( 1 ); + } + + self.game_over_bg fadeovertime( 1 ); + self.game_over_bg.alpha = 0; + wait 12; + self.game_over_bg fadeovertime( 1 ); + self.game_over_bg.alpha = 1; + wait 1; + } +} + +transit_zone_init() +{ + flag_init( "always_on" ); + flag_set( "always_on" ); + add_adjacent_zone( "zone_roadside_west", "zone_din", "always_on" ); + add_adjacent_zone( "zone_roadside_west", "zone_gas", "always_on" ); + add_adjacent_zone( "zone_roadside_east", "zone_gas", "always_on" ); + add_adjacent_zone( "zone_roadside_east", "zone_gar", "always_on" ); + add_adjacent_zone( "zone_gas", "zone_din", "always_on" ); + add_adjacent_zone( "zone_gas", "zone_gar", "always_on" ); +} + +include_powerups() +{ + gametype = getdvar( "ui_gametype" ); + include_powerup( "nuke" ); + include_powerup( "insta_kill" ); + include_powerup( "double_points" ); + include_powerup( "full_ammo" ); + + if ( gametype != "zgrief" ) + include_powerup( "carpenter" ); +} + +claymore_safe_to_plant() +{ + if ( self maps\mp\zm_transit_lava::object_touching_lava() ) + return false; + + if ( self.owner maps\mp\zm_transit_lava::object_touching_lava() ) + return false; + + return true; +} + +grenade_safe_to_throw( player, weapname ) +{ + return 1; +} + +grenade_safe_to_bounce( player, weapname ) +{ + if ( !is_offhand_weapon( weapname ) && !is_grenade_launcher( weapname ) ) + return true; + + if ( self maps\mp\zm_transit_lava::object_touching_lava() ) + return false; + + return true; +} + +offhand_weapon_overrride() +{ + register_lethal_grenade_for_level( "frag_grenade_zm" ); + level.zombie_lethal_grenade_player_init = "frag_grenade_zm"; + register_tactical_grenade_for_level( "cymbal_monkey_zm" ); + level.zombie_tactical_grenade_player_init = undefined; + level.grenade_safe_to_throw = ::grenade_safe_to_throw; + level.grenade_safe_to_bounce = ::grenade_safe_to_bounce; + level.zombie_placeable_mine_player_init = undefined; + level.claymore_safe_to_plant = ::claymore_safe_to_plant; + register_melee_weapon_for_level( "knife_zm" ); + register_melee_weapon_for_level( "bowie_knife_zm" ); + level.zombie_melee_weapon_player_init = "knife_zm"; + level.zombie_equipment_player_init = undefined; +} + +include_weapons() +{ + gametype = getdvar( "ui_gametype" ); + include_weapon( "knife_zm", 0 ); + include_weapon( "frag_grenade_zm", 0 ); + include_weapon( "m1911_zm", 0 ); + include_weapon( "m1911_upgraded_zm", 0 ); + include_weapon( "python_zm" ); + include_weapon( "python_upgraded_zm", 0 ); + include_weapon( "judge_zm" ); + include_weapon( "judge_upgraded_zm", 0 ); + include_weapon( "kard_zm" ); + include_weapon( "kard_upgraded_zm", 0 ); + include_weapon( "fiveseven_zm" ); + include_weapon( "fiveseven_upgraded_zm", 0 ); + include_weapon( "beretta93r_zm", 0 ); + include_weapon( "beretta93r_upgraded_zm", 0 ); + include_weapon( "fivesevendw_zm" ); + include_weapon( "fivesevendw_upgraded_zm", 0 ); + include_weapon( "ak74u_zm", 0 ); + include_weapon( "ak74u_upgraded_zm", 0 ); + include_weapon( "mp5k_zm", 0 ); + include_weapon( "mp5k_upgraded_zm", 0 ); + include_weapon( "qcw05_zm" ); + include_weapon( "qcw05_upgraded_zm", 0 ); + include_weapon( "870mcs_zm", 0 ); + include_weapon( "870mcs_upgraded_zm", 0 ); + include_weapon( "rottweil72_zm", 0 ); + include_weapon( "rottweil72_upgraded_zm", 0 ); + include_weapon( "saiga12_zm" ); + include_weapon( "saiga12_upgraded_zm", 0 ); + include_weapon( "srm1216_zm" ); + include_weapon( "srm1216_upgraded_zm", 0 ); + include_weapon( "m14_zm", 0 ); + include_weapon( "m14_upgraded_zm", 0 ); + include_weapon( "saritch_zm" ); + include_weapon( "saritch_upgraded_zm", 0 ); + include_weapon( "m16_zm", 0 ); + include_weapon( "m16_gl_upgraded_zm", 0 ); + include_weapon( "xm8_zm" ); + include_weapon( "xm8_upgraded_zm", 0 ); + include_weapon( "type95_zm" ); + include_weapon( "type95_upgraded_zm", 0 ); + include_weapon( "tar21_zm" ); + include_weapon( "tar21_upgraded_zm", 0 ); + include_weapon( "galil_zm" ); + include_weapon( "galil_upgraded_zm", 0 ); + include_weapon( "fnfal_zm" ); + include_weapon( "fnfal_upgraded_zm", 0 ); + include_weapon( "dsr50_zm" ); + include_weapon( "dsr50_upgraded_zm", 0 ); + include_weapon( "barretm82_zm" ); + include_weapon( "barretm82_upgraded_zm", 0 ); + include_weapon( "rpd_zm" ); + include_weapon( "rpd_upgraded_zm", 0 ); + include_weapon( "hamr_zm" ); + include_weapon( "hamr_upgraded_zm", 0 ); + include_weapon( "usrpg_zm" ); + include_weapon( "usrpg_upgraded_zm", 0 ); + include_weapon( "m32_zm" ); + include_weapon( "m32_upgraded_zm", 0 ); + include_weapon( "hk416_zm" ); + include_weapon( "hk416_upgraded_zm", 0 ); + include_weapon( "cymbal_monkey_zm" ); + + if ( gametype != "zgrief" ) + { + include_weapon( "ray_gun_zm" ); + include_weapon( "ray_gun_upgraded_zm", 0 ); + add_limited_weapon( "ray_gun_zm", 4 ); + add_limited_weapon( "ray_gun_upgraded_zm", 4 ); + } + + add_limited_weapon( "m1911_zm", 0 ); +} + +less_than_normal() +{ + return 0.5; +} + +custom_add_weapons() +{ + add_zombie_weapon( "m1911_zm", "m1911_upgraded_zm", &"ZOMBIE_WEAPON_M1911", 50, "", "", undefined ); + add_zombie_weapon( "python_zm", "python_upgraded_zm", &"ZOMBIE_WEAPON_PYTHON", 50, "wpck_python", "", undefined, 1 ); + add_zombie_weapon( "judge_zm", "judge_upgraded_zm", &"ZOMBIE_WEAPON_JUDGE", 50, "wpck_judge", "", undefined, 1 ); + add_zombie_weapon( "kard_zm", "kard_upgraded_zm", &"ZOMBIE_WEAPON_KARD", 50, "wpck_kap", "", undefined, 1 ); + add_zombie_weapon( "fiveseven_zm", "fiveseven_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVEN", 50, "wpck_57", "", undefined, 1 ); + add_zombie_weapon( "beretta93r_zm", "beretta93r_upgraded_zm", &"ZOMBIE_WEAPON_BERETTA93r", 1000, "", "", undefined ); + add_zombie_weapon( "fivesevendw_zm", "fivesevendw_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVENDW", 50, "wpck_duel57", "", undefined, 1 ); + add_zombie_weapon( "ak74u_zm", "ak74u_upgraded_zm", &"ZOMBIE_WEAPON_AK74U", 1200, "smg", "", undefined ); + add_zombie_weapon( "mp5k_zm", "mp5k_upgraded_zm", &"ZOMBIE_WEAPON_MP5K", 1000, "smg", "", undefined ); + add_zombie_weapon( "qcw05_zm", "qcw05_upgraded_zm", &"ZOMBIE_WEAPON_QCW05", 50, "wpck_chicom", "", undefined, 1 ); + add_zombie_weapon( "870mcs_zm", "870mcs_upgraded_zm", &"ZOMBIE_WEAPON_870MCS", 1500, "shotgun", "", undefined ); + add_zombie_weapon( "rottweil72_zm", "rottweil72_upgraded_zm", &"ZOMBIE_WEAPON_ROTTWEIL72", 500, "shotgun", "", undefined ); + add_zombie_weapon( "saiga12_zm", "saiga12_upgraded_zm", &"ZOMBIE_WEAPON_SAIGA12", 50, "wpck_saiga12", "", undefined, 1 ); + add_zombie_weapon( "srm1216_zm", "srm1216_upgraded_zm", &"ZOMBIE_WEAPON_SRM1216", 50, "wpck_m1216", "", undefined, 1 ); + add_zombie_weapon( "m14_zm", "m14_upgraded_zm", &"ZOMBIE_WEAPON_M14", 500, "rifle", "", undefined ); + add_zombie_weapon( "saritch_zm", "saritch_upgraded_zm", &"ZOMBIE_WEAPON_SARITCH", 50, "wpck_sidr", "", undefined, 1 ); + add_zombie_weapon( "m16_zm", "m16_gl_upgraded_zm", &"ZOMBIE_WEAPON_M16", 1200, "burstrifle", "", undefined ); + add_zombie_weapon( "xm8_zm", "xm8_upgraded_zm", &"ZOMBIE_WEAPON_XM8", 50, "wpck_m8a1", "", undefined, 1 ); + add_zombie_weapon( "type95_zm", "type95_upgraded_zm", &"ZOMBIE_WEAPON_TYPE95", 50, "wpck_type25", "", undefined, 1 ); + add_zombie_weapon( "tar21_zm", "tar21_upgraded_zm", &"ZOMBIE_WEAPON_TAR21", 50, "wpck_x95l", "", undefined, 1 ); + add_zombie_weapon( "galil_zm", "galil_upgraded_zm", &"ZOMBIE_WEAPON_GALIL", 50, "wpck_galil", "", undefined, 1 ); + add_zombie_weapon( "fnfal_zm", "fnfal_upgraded_zm", &"ZOMBIE_WEAPON_FNFAL", 50, "wpck_fal", "", undefined, 1 ); + add_zombie_weapon( "dsr50_zm", "dsr50_upgraded_zm", &"ZOMBIE_WEAPON_DR50", 50, "wpck_dsr50", "", undefined, 1 ); + add_zombie_weapon( "barretm82_zm", "barretm82_upgraded_zm", &"ZOMBIE_WEAPON_BARRETM82", 50, "sniper", "", undefined ); + add_zombie_weapon( "rpd_zm", "rpd_upgraded_zm", &"ZOMBIE_WEAPON_RPD", 50, "wpck_rpd", "", undefined, 1 ); + add_zombie_weapon( "hamr_zm", "hamr_upgraded_zm", &"ZOMBIE_WEAPON_HAMR", 50, "wpck_hamr", "", undefined, 1 ); + add_zombie_weapon( "frag_grenade_zm", undefined, &"ZOMBIE_WEAPON_FRAG_GRENADE", 250, "grenade", "", 250 ); + add_zombie_weapon( "usrpg_zm", "usrpg_upgraded_zm", &"ZOMBIE_WEAPON_USRPG", 50, "wpck_rpg", "", undefined, 1 ); + add_zombie_weapon( "m32_zm", "m32_upgraded_zm", &"ZOMBIE_WEAPON_M32", 50, "wpck_m32", "", undefined, 1 ); + add_zombie_weapon( "cymbal_monkey_zm", undefined, &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 ); + add_zombie_weapon( "ray_gun_zm", "ray_gun_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN", 10000, "wpck_ray", "", undefined, 1 ); + add_zombie_weapon( "hk416_zm", "hk416_upgraded_zm", &"ZOMBIE_WEAPON_HK416", 100, "", "", undefined ); +} + +include_game_modules() +{ + +} + +initial_round_wait_func() +{ + flag_wait( "initial_blackscreen_passed" ); +} + +zombie_init_done() +{ + self.allowpain = 0; + self setphysparams( 15, 0, 48 ); +} + +setup_zombie_init() +{ + zombies = getentarray( "zombie_spawner", "script_noteworthy" ); +} + +assign_lowest_unused_character_index() +{ + charindexarray = []; + charindexarray[0] = 0; + charindexarray[1] = 1; + charindexarray[2] = 2; + charindexarray[3] = 3; + players = get_players(); + + if ( players.size == 1 ) + { + charindexarray = array_randomize( charindexarray ); + return charindexarray[0]; + } + else if ( players.size == 2 ) + { + foreach ( player in players ) + { + if ( isdefined( player.characterindex ) ) + { + if ( player.characterindex == 2 || player.characterindex == 0 ) + { + if ( randomint( 100 ) > 50 ) + return 1; + + return 3; + } + else if ( player.characterindex == 3 || player.characterindex == 1 ) + { + if ( randomint( 100 ) > 50 ) + return 0; + + return 2; + } + } + } + } + else + { + foreach ( player in players ) + { + if ( isdefined( player.characterindex ) ) + arrayremovevalue( charindexarray, player.characterindex, 0 ); + } + + if ( charindexarray.size > 0 ) + return charindexarray[0]; + } + + return 0; +} + +zombie_transit_dr_devgui( cmd ) +{ +/# + cmd_strings = strtok( cmd, " " ); + + switch ( cmd_strings[0] ) + { + case "yellow_nuke": + case "yellow_double": + case "red_nuke": + case "red_double": + case "red_ammo": + case "green_nuke": + case "green_monkey": + case "green_insta": + case "green_double": + case "green_ammo": + case "blue_monkey": + maps\mp\zombies\_zm_devgui::zombie_devgui_give_powerup( cmd_strings[0], 1 ); + break; + case "less_time": + less_time(); + break; + case "more_time": + more_time(); + break; + default: + break; + } +#/ +} + +less_time() +{ +/# + level.time_to_add = 30000.0; + + if ( !isdefined( level.time_to_remove ) ) + level.time_to_remove = 60000; + else + level.time_to_remove *= 2; + + if ( maps\mp\gametypes_zm\_globallogic_utils::gettimeremaining() < level.time_to_remove ) + level.time_to_remove = maps\mp\gametypes_zm\_globallogic_utils::gettimeremaining() / 2; + + level.discardtime -= level.time_to_remove; +#/ +} + +more_time() +{ +/# + level.time_to_remove = 30000.0; + + if ( !isdefined( level.time_to_add ) ) + level.time_to_add = 60000; + else + level.time_to_add *= 2; + + level.discardtime += level.time_to_add; +#/ +} + +init_transit_dr_stats() +{ + self maps\mp\zm_transit_dr_achievement::init_player_achievement_stats(); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_dr_achievement.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_dr_achievement.gsc new file mode 100644 index 0000000..aec4127 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_dr_achievement.gsc @@ -0,0 +1,70 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_globallogic_score; + +init() +{ + level.achievement_sound_func = ::achievement_sound_func; + onplayerconnect_callback( ::onplayerconnect ); +} + +achievement_sound_func( achievement_name_lower ) +{ + self thread do_player_general_vox( "general", "achievement" ); +} + +init_player_achievement_stats() +{ + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_polyarmory", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_monkey_see_monkey_doom", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_i_see_live_people", 0 ); +} + +onplayerconnect() +{ + if ( gamemodeismode( level.gamemode_public_match ) ) + { + self thread achievement_polyarmory(); + self thread achievement_monkey_see_monkey_doom(); + self thread achievement_i_see_live_people(); + } +} + +achievement_polyarmory() +{ + level endon( "end_game" ); + self endon( "disconnect" ); + + self waittill( "gun_game_achievement" ); +/# + +#/ + self giveachievement_wrapper( "ZM_DLC1_POLYARMORY" ); +} + +achievement_monkey_see_monkey_doom() +{ + level endon( "end_game" ); + self endon( "disconnect" ); + + self waittill( "powerup_blue_monkey" ); +/# + +#/ + self giveachievement_wrapper( "ZM_DLC1_MONKEY_SEE_MONKEY_DOOM" ); +} + +achievement_i_see_live_people() +{ + level endon( "end_game" ); + self endon( "disconnect" ); + + self waittill( "invisible_player_killed" ); +/# + +#/ + self giveachievement_wrapper( "ZM_DLC1_I_SEE_LIVE_PEOPLE" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_dr_ffotd.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_dr_ffotd.gsc new file mode 100644 index 0000000..2ebe7b8 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_dr_ffotd.gsc @@ -0,0 +1,15 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; + +main_start() +{ + +} + +main_end() +{ + +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_dr_fx.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_dr_fx.gsc new file mode 100644 index 0000000..13aed99 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_dr_fx.gsc @@ -0,0 +1,125 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\zm_transit_fx; +#include maps\mp\createart\zm_transit_art; + +main() +{ + precache_createfx_fx(); + precache_scripted_fx(); + maps\mp\createfx\zm_transit_fx::main(); + maps\mp\createart\zm_transit_art::main(); +} + +precache_scripted_fx() +{ + level._effect["switch_sparks"] = loadfx( "env/electrical/fx_elec_wire_spark_burst" ); + level._effect["maxis_sparks"] = loadfx( "maps/zombie/fx_zmb_race_trail_grief" ); + level._effect["richtofen_sparks"] = loadfx( "maps/zombie/fx_zmb_race_trail_neutral" ); + level._effect["sq_common_lightning"] = loadfx( "maps/zombie/fx_zmb_tranzit_sq_lightning_orb" ); + level._effect["zapper_light_ready"] = loadfx( "maps/zombie/fx_zombie_zapper_light_green" ); + level._effect["zapper_light_notready"] = loadfx( "maps/zombie/fx_zombie_zapper_light_red" ); + level._effect["lght_marker"] = loadfx( "maps/zombie/fx_zmb_tranzit_marker" ); + level._effect["lght_marker_flare"] = loadfx( "maps/zombie/fx_zmb_tranzit_marker_fl" ); + level._effect["poltergeist"] = loadfx( "misc/fx_zombie_couch_effect" ); + level._effect["zomb_gib"] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" ); + level._effect["fx_headlight"] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_headlight" ); + level._effect["fx_headlight_lenflares"] = loadfx( "lens_flares/fx_lf_zmb_tranzit_bus_headlight" ); + level._effect["fx_brakelight"] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_brakelights" ); + level._effect["fx_emergencylight"] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_flashing_lights" ); + level._effect["fx_turn_signal_right"] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_turnsignal_right" ); + level._effect["fx_turn_signal_left"] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_turnsignal_left" ); + level._effect["fx_zbus_trans_fog"] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_fog_intersect" ); + level._effect["bus_lava_driving"] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_fire_driving" ); + level._effect["bus_hatch_bust"] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_hatch_bust" ); + level._effect["elec_md"] = loadfx( "electrical/fx_elec_player_md" ); + level._effect["elec_sm"] = loadfx( "electrical/fx_elec_player_sm" ); + level._effect["elec_torso"] = loadfx( "electrical/fx_elec_player_torso" ); + level._effect["blue_eyes"] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" ); + level._effect["lava_burning"] = loadfx( "env/fire/fx_fire_lava_player_torso" ); + level._effect["mc_trafficlight"] = loadfx( "maps/zombie/fx_zmb_morsecode_traffic_loop" ); + level._effect["mc_towerlight"] = loadfx( "maps/zombie/fx_zmb_morsecode_loop" ); +} + +precache_createfx_fx() +{ + level._effect["fx_insects_swarm_md_light"] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); + level._effect["fx_zmb_tranzit_flourescent_flicker"] = loadfx( "maps/zombie/fx_zmb_tranzit_flourescent_flicker" ); + level._effect["fx_zmb_tranzit_flourescent_glow"] = loadfx( "maps/zombie/fx_zmb_tranzit_flourescent_glow" ); + level._effect["fx_zmb_tranzit_flourescent_glow_lg"] = loadfx( "maps/zombie/fx_zmb_tranzit_flourescent_glow_lg" ); + level._effect["fx_zmb_tranzit_flourescent_dbl_glow"] = loadfx( "maps/zombie/fx_zmb_tranzit_flourescent_dbl_glow" ); + level._effect["fx_zmb_tranzit_depot_map_flicker"] = loadfx( "maps/zombie/fx_zmb_tranzit_depot_map_flicker" ); + level._effect["fx_zmb_tranzit_light_bulb_xsm"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_bulb_xsm" ); + level._effect["fx_zmb_tranzit_light_glow"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_glow" ); + level._effect["fx_zmb_tranzit_light_glow_xsm"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_glow_xsm" ); + level._effect["fx_zmb_tranzit_light_glow_fog"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_glow_fog" ); + level._effect["fx_zmb_tranzit_light_depot_cans"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_depot_cans" ); + level._effect["fx_zmb_tranzit_light_desklamp"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_desklamp" ); + level._effect["fx_zmb_tranzit_light_town_cans"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_town_cans" ); + level._effect["fx_zmb_tranzit_light_town_cans_sm"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_town_cans_sm" ); + level._effect["fx_zmb_tranzit_light_street_tinhat"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_street_tinhat" ); + level._effect["fx_zmb_tranzit_street_lamp"] = loadfx( "maps/zombie/fx_zmb_tranzit_street_lamp" ); + level._effect["fx_zmb_tranzit_truck_light"] = loadfx( "maps/zombie/fx_zmb_tranzit_truck_light" ); + level._effect["fx_zmb_tranzit_spark_int_runner"] = loadfx( "maps/zombie/fx_zmb_tranzit_spark_int_runner" ); + level._effect["fx_zmb_tranzit_spark_ext_runner"] = loadfx( "maps/zombie/fx_zmb_tranzit_spark_ext_runner" ); + level._effect["fx_zmb_tranzit_spark_blue_lg_loop"] = loadfx( "maps/zombie/fx_zmb_tranzit_spark_blue_lg_loop" ); + level._effect["fx_zmb_tranzit_spark_blue_sm_loop"] = loadfx( "maps/zombie/fx_zmb_tranzit_spark_blue_sm_loop" ); + level._effect["fx_zmb_tranzit_bar_glow"] = loadfx( "maps/zombie/fx_zmb_tranzit_bar_glow" ); + level._effect["fx_zmb_tranzit_transformer_on"] = loadfx( "maps/zombie/fx_zmb_tranzit_transformer_on" ); + level._effect["fx_zmb_fog_closet"] = loadfx( "fog/fx_zmb_fog_closet" ); + level._effect["fx_zmb_fog_low_300x300"] = loadfx( "fog/fx_zmb_fog_low_300x300" ); + level._effect["fx_zmb_fog_thick_600x600"] = loadfx( "fog/fx_zmb_fog_thick_600x600" ); + level._effect["fx_zmb_fog_thick_1200x600"] = loadfx( "fog/fx_zmb_fog_thick_1200x600" ); + level._effect["fx_zmb_fog_transition_600x600"] = loadfx( "fog/fx_zmb_fog_transition_600x600" ); + level._effect["fx_zmb_fog_transition_1200x600"] = loadfx( "fog/fx_zmb_fog_transition_1200x600" ); + level._effect["fx_zmb_fog_transition_right_border"] = loadfx( "fog/fx_zmb_fog_transition_right_border" ); + level._effect["fx_zmb_tranzit_smk_interior_md"] = loadfx( "maps/zombie/fx_zmb_tranzit_smk_interior_md" ); + level._effect["fx_zmb_tranzit_smk_interior_heavy"] = loadfx( "maps/zombie/fx_zmb_tranzit_smk_interior_heavy" ); + level._effect["fx_zmb_ash_ember_1000x1000"] = loadfx( "maps/zombie/fx_zmb_ash_ember_1000x1000" ); + level._effect["fx_zmb_ash_ember_2000x1000"] = loadfx( "maps/zombie/fx_zmb_ash_ember_2000x1000" ); + level._effect["fx_zmb_ash_rising_md"] = loadfx( "maps/zombie/fx_zmb_ash_rising_md" ); + level._effect["fx_zmb_ash_windy_heavy_sm"] = loadfx( "maps/zombie/fx_zmb_ash_windy_heavy_sm" ); + level._effect["fx_zmb_ash_windy_heavy_md"] = loadfx( "maps/zombie/fx_zmb_ash_windy_heavy_md" ); + level._effect["fx_zmb_lava_detail"] = loadfx( "maps/zombie/fx_zmb_lava_detail" ); + level._effect["fx_zmb_lava_edge_100"] = loadfx( "maps/zombie/fx_zmb_lava_edge_100" ); + level._effect["fx_zmb_lava_50x50_sm"] = loadfx( "maps/zombie/fx_zmb_lava_50x50_sm" ); + level._effect["fx_zmb_lava_100x100"] = loadfx( "maps/zombie/fx_zmb_lava_100x100" ); + level._effect["fx_zmb_lava_river"] = loadfx( "maps/zombie/fx_zmb_lava_river" ); + level._effect["fx_zmb_lava_creek"] = loadfx( "maps/zombie/fx_zmb_lava_creek" ); + level._effect["fx_zmb_lava_crevice_glow_50"] = loadfx( "maps/zombie/fx_zmb_lava_crevice_glow_50" ); + level._effect["fx_zmb_lava_crevice_glow_100"] = loadfx( "maps/zombie/fx_zmb_lava_crevice_glow_100" ); + level._effect["fx_zmb_lava_crevice_smoke_100"] = loadfx( "maps/zombie/fx_zmb_lava_crevice_smoke_100" ); + level._effect["fx_zmb_lava_smoke_tall"] = loadfx( "maps/zombie/fx_zmb_lava_smoke_tall" ); + level._effect["fx_zmb_lava_smoke_pit"] = loadfx( "maps/zombie/fx_zmb_lava_smoke_pit" ); + level._effect["fx_zmb_tranzit_bowling_sign_fog"] = loadfx( "maps/zombie/fx_zmb_tranzit_bowling_sign_fog" ); + level._effect["fx_zmb_tranzit_lava_distort"] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_distort" ); + level._effect["fx_zmb_tranzit_lava_distort_sm"] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_distort_sm" ); + level._effect["fx_zmb_tranzit_lava_distort_detail"] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_distort_detail" ); + level._effect["fx_zmb_tranzit_fire_med"] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_med" ); + level._effect["fx_zmb_tranzit_fire_lrg"] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_lrg" ); + level._effect["fx_zmb_tranzit_smk_column_lrg"] = loadfx( "maps/zombie/fx_zmb_tranzit_smk_column_lrg" ); + level._effect["fx_zmb_papers_windy_slow"] = loadfx( "maps/zombie/fx_zmb_papers_windy_slow" ); + level._effect["fx_zmb_tranzit_god_ray_short_warm"] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_short_warm" ); + level._effect["fx_zmb_tranzit_god_ray_vault"] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_vault" ); + level._effect["fx_zmb_tranzit_key_glint"] = loadfx( "maps/zombie/fx_zmb_tranzit_key_glint" ); + level._effect["fx_zmb_tranzit_god_ray_interior_med"] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_interior_med" ); + level._effect["fx_zmb_tranzit_god_ray_interior_long"] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_interior_long" ); + level._effect["fx_zmb_tranzit_god_ray_depot_cool"] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_depot_cool" ); + level._effect["fx_zmb_tranzit_god_ray_depot_warm"] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_depot_warm" ); + level._effect["fx_zmb_tranzit_god_ray_tunnel_warm"] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_tunnel_warm" ); + level._effect["fx_zmb_tranzit_god_ray_pwr_station"] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_pwr_station" ); + level._effect["fx_zmb_tranzit_light_safety"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_safety" ); + level._effect["fx_zmb_tranzit_light_safety_off"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_safety_off" ); + level._effect["fx_zmb_tranzit_light_safety_max"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_safety_max" ); + level._effect["fx_zmb_tranzit_light_safety_ric"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_safety_ric" ); + level._effect["fx_zmb_tranzit_bridge_dest"] = loadfx( "maps/zombie/fx_zmb_tranzit_bridge_dest" ); + level._effect["fx_zmb_tranzit_power_pulse"] = loadfx( "maps/zombie/fx_zmb_tranzit_power_pulse" ); + level._effect["fx_zmb_tranzit_power_on"] = loadfx( "maps/zombie/fx_zmb_tranzit_power_on" ); + level._effect["fx_zmb_tranzit_power_rising"] = loadfx( "maps/zombie/fx_zmb_tranzit_power_rising" ); + level._effect["fx_zmb_avog_storm"] = loadfx( "maps/zombie/fx_zmb_avog_storm" ); + level._effect["fx_zmb_avog_storm_low"] = loadfx( "maps/zombie/fx_zmb_avog_storm_low" ); + level._effect["glass_impact"] = loadfx( "maps/zombie/fx_zmb_tranzit_window_dest_lg" ); + level._effect["fx_zmb_tranzit_spark_blue_lg_os"] = loadfx( "maps/zombie/fx_zmb_tranzit_spark_blue_lg_os" ); + level._effect["spawn_cloud"] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_dr_gamemodes.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_dr_gamemodes.gsc new file mode 100644 index 0000000..cd1ef05 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_dr_gamemodes.gsc @@ -0,0 +1,17 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zm_transit_utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zm_transit_dr; +#include maps\mp\zm_transit_turned_diner; + +init() +{ + add_map_gamemode( "zcleansed", maps\mp\zm_transit_dr::zcleansed_preinit, undefined, undefined ); + add_map_gamemode( "zturned", maps\mp\zm_transit_dr::zturned_preinit, undefined, undefined ); + add_map_location_gamemode( "zcleansed", "diner", maps\mp\zm_transit_turned_diner::precache, maps\mp\zm_transit_turned_diner::main ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_lava.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_lava.gsc new file mode 100644 index 0000000..62efcd0 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_lava.gsc @@ -0,0 +1,361 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\_visionset_mgr; +#include maps\mp\animscripts\zm_death; + +object_touching_lava() +{ + if ( !isdefined( level.lava ) ) + level.lava = getentarray( "lava_damage", "targetname" ); + + if ( !isdefined( level.lava ) || level.lava.size < 1 ) + return false; + + if ( isdefined( self.lasttouching ) && self istouching( self.lasttouching ) ) + return true; + + for ( i = 0; i < level.lava.size; i++ ) + { + if ( distancesquared( self.origin, level.lava[i].origin ) < 2250000 ) + { + if ( isdefined( level.lava[i].target ) ) + { + if ( self istouching( level.lava[i].volume ) ) + { + if ( isdefined( level.lava[i].script_float ) && level.lava[i].script_float <= 0.1 ) + return false; + + self.lasttouching = level.lava[i].volume; + return true; + } + } + else if ( self istouching( level.lava[i] ) ) + { + self.lasttouching = level.lava[i]; + return true; + } + } + } + + self.lasttouching = undefined; + return false; +} + +lava_damage_init() +{ + lava = getentarray( "lava_damage", "targetname" ); + + if ( !isdefined( lava ) ) + return; + + array_thread( lava, ::lava_damage_think ); +} + +lava_damage_think() +{ + self._trap_type = ""; + + if ( isdefined( self.script_noteworthy ) ) + self._trap_type = self.script_noteworthy; + + if ( isdefined( self.target ) ) + { + self.volume = getent( self.target, "targetname" ); + assert( isdefined( self.volume ), "No volume found for lava target " + self.target ); + } + + while ( true ) + { + self waittill( "trigger", ent ); + + if ( isdefined( ent.ignore_lava_damage ) && ent.ignore_lava_damage ) + continue; + + if ( isdefined( ent.is_burning ) ) + continue; + + if ( isdefined( self.target ) && !ent istouching( self.volume ) ) + continue; + + if ( isplayer( ent ) ) + { + switch ( self._trap_type ) + { + case "fire": + default: + if ( !isdefined( self.script_float ) || self.script_float >= 0.1 ) + ent thread player_lava_damage( self ); + + break; + } + } + else if ( !isdefined( ent.marked_for_death ) ) + { + switch ( self._trap_type ) + { + case "fire": + default: + if ( !isdefined( self.script_float ) || self.script_float >= 0.1 ) + ent thread zombie_lava_damage( self ); + + break; + } + } + } +} + +player_lava_damage( trig ) +{ + self endon( "zombified" ); + self endon( "death" ); + self endon( "disconnect" ); + max_dmg = 15; + min_dmg = 5; + burn_time = 1; + + if ( isdefined( self.is_zombie ) && self.is_zombie ) + return; + + self thread player_stop_burning(); + + if ( isdefined( trig.script_float ) ) + { + max_dmg *= trig.script_float; + min_dmg *= trig.script_float; + burn_time *= trig.script_float; + + if ( burn_time >= 1.5 ) + burn_time = 1.5; + } + + if ( !isdefined( self.is_burning ) && is_player_valid( self ) ) + { + self.is_burning = 1; + maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, burn_time, level.zm_transit_burn_max_duration ); + self notify( "burned" ); + + if ( isdefined( trig.script_float ) && trig.script_float >= 0.1 ) + self thread player_burning_fx(); + + if ( !self hasperk( "specialty_armorvest" ) || self.health - 100 < 1 ) + { + radiusdamage( self.origin, 10, max_dmg, min_dmg ); + wait 0.5; + self.is_burning = undefined; + } + else + { + if ( self hasperk( "specialty_armorvest" ) ) + self dodamage( 15, self.origin ); + else + self dodamage( 1, self.origin ); + + wait 0.5; + self.is_burning = undefined; + } + } +} + +player_stop_burning() +{ + self notify( "player_stop_burning" ); + self endon( "player_stop_burning" ); + self endon( "death_or_disconnect" ); + + self waittill( "zombified" ); + + self notify( "stop_flame_damage" ); + maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_transit_burn", self ); +} + +zombie_burning_fx() +{ + self endon( "death" ); + + if ( isdefined( self.is_on_fire ) && self.is_on_fire ) + return; + + self.is_on_fire = 1; + self thread maps\mp\animscripts\zm_death::on_fire_timeout(); + + if ( isdefined( level._effect ) && isdefined( level._effect["lava_burning"] ) ) + { + if ( !self.isdog ) + { + playfxontag( level._effect["lava_burning"], self, "J_SpineLower" ); + self thread zombie_burning_audio(); + } + } + + if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_sm"] ) ) + { + wait 1; + + if ( randomint( 2 ) > 1 ) + { + tagarray = []; + tagarray[0] = "J_Elbow_LE"; + tagarray[1] = "J_Elbow_RI"; + tagarray[2] = "J_Knee_RI"; + tagarray[3] = "J_Knee_LE"; + tagarray = randomize_array( tagarray ); + playfxontag( level._effect["character_fire_death_sm"], self, tagarray[0] ); + } + else + { + tagarray[0] = "J_Wrist_RI"; + tagarray[1] = "J_Wrist_LE"; + + if ( !isdefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" ) + { + tagarray[2] = "J_Ankle_RI"; + tagarray[3] = "J_Ankle_LE"; + } + + tagarray = randomize_array( tagarray ); + playfxontag( level._effect["character_fire_death_sm"], self, tagarray[0] ); + } + } +} + +zombie_burning_audio() +{ + self playloopsound( "zmb_fire_loop" ); + self waittill_either( "stop_flame_damage", "death" ); + + if ( isdefined( self ) && isalive( self ) ) + self stoploopsound( 0.25 ); +} + +player_burning_fx() +{ + self endon( "death" ); + + if ( isdefined( self.is_on_fire ) && self.is_on_fire ) + return; + + if ( !( isdefined( self.no_burning_sfx ) && self.no_burning_sfx ) ) + self thread player_burning_audio(); + + self.is_on_fire = 1; + self thread maps\mp\animscripts\zm_death::on_fire_timeout(); + + if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_sm"] ) ) + playfxontag( level._effect["character_fire_death_sm"], self, "J_SpineLower" ); +} + +player_burning_audio() +{ + fire_ent = spawn( "script_model", self.origin ); + wait_network_frame(); + fire_ent linkto( self ); + fire_ent playloopsound( "evt_plr_fire_loop" ); + self waittill_any( "stop_flame_damage", "stop_flame_sounds", "death", "discoonect" ); + fire_ent delete(); +} + +zombie_lava_damage( trap ) +{ + self endon( "death" ); + zombie_dmg = 1; + + if ( isdefined( self.script_float ) ) + zombie_dmg *= self.script_float; + + switch ( trap._trap_type ) + { + case "fire": + default: + if ( isdefined( self.animname ) && ( !isdefined( self.is_on_fire ) || !self.is_on_fire ) ) + { + if ( level.burning_zombies.size < 6 && zombie_dmg >= 1 ) + { + level.burning_zombies[level.burning_zombies.size] = self; + self playsound( "ignite" ); + self thread zombie_burning_fx(); + self thread zombie_burning_watch(); + self thread zombie_burning_dmg(); + self thread zombie_exploding_death( zombie_dmg, trap ); + wait( randomfloat( 1.25 ) ); + } + } + + if ( self.health > level.zombie_health / 2 && self.health > zombie_dmg ) + self dodamage( zombie_dmg, self.origin, trap ); + + break; + } +} + +zombie_burning_watch() +{ + self waittill_any( "stop_flame_damage", "death" ); + arrayremovevalue( level.burning_zombies, self ); +} + +zombie_exploding_death( zombie_dmg, trap ) +{ + self endon( "stop_flame_damage" ); + + if ( isdefined( self.isdog ) && self.isdog && isdefined( self.a.nodeath ) ) + return; + + while ( isdefined( self ) && self.health >= zombie_dmg && ( isdefined( self.is_on_fire ) && self.is_on_fire ) ) + wait 0.5; + + if ( !isdefined( self ) || !( isdefined( self.is_on_fire ) && self.is_on_fire ) || isdefined( self.damageweapon ) && ( self.damageweapon == "tazer_knuckles_zm" || self.damageweapon == "jetgun_zm" ) || isdefined( self.knuckles_extinguish_flames ) && self.knuckles_extinguish_flames ) + return; + + tag = "J_SpineLower"; + + if ( isdefined( self.animname ) && self.animname == "zombie_dog" ) + tag = "tag_origin"; + + if ( is_mature() ) + { + if ( isdefined( level._effect["zomb_gib"] ) ) + playfx( level._effect["zomb_gib"], self gettagorigin( tag ) ); + } + else if ( isdefined( level._effect["spawn_cloud"] ) ) + playfx( level._effect["spawn_cloud"], self gettagorigin( tag ) ); + + self radiusdamage( self.origin, 128, 30, 15, undefined, "MOD_EXPLOSIVE" ); + self ghost(); + + if ( isdefined( self.isdog ) && self.isdog ) + self hide(); + else + self delay_thread( 1, ::self_delete ); +} + +zombie_burning_dmg() +{ + self endon( "death" ); + damageradius = 25; + damage = 2; + + while ( isdefined( self.is_on_fire ) && self.is_on_fire ) + { + eyeorigin = self geteye(); + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( is_player_valid( players[i] ) ) + { + playereye = players[i] geteye(); + + if ( distancesquared( eyeorigin, playereye ) < damageradius * damageradius ) + { + players[i] dodamage( damage, self.origin, self ); + players[i] notify( "burned" ); + } + } + } + + wait 1.0; + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_power.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_power.gsc new file mode 100644 index 0000000..a38528b --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_power.gsc @@ -0,0 +1,559 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zm_transit_utility; +#include maps\mp\_visionset_mgr; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_audio; + +initializepower() +{ + level thread electricswitch(); + level thread powerevent(); + registerclientfield( "toplayer", "power_rumble", 1, 1, "int" ); + + if ( !isdefined( level.vsmgr_prio_visionset_zm_transit_power_high_low ) ) + level.vsmgr_prio_visionset_zm_transit_power_high_low = 20; + + maps\mp\_visionset_mgr::vsmgr_register_info( "visionset", "zm_power_high_low", 1, level.vsmgr_prio_visionset_zm_transit_power_high_low, 7, 1, ::vsmgr_lerp_power_up_down, 0 ); +} + +precache_models() +{ + +} + +elecswitchbuildable() +{ + lever = getent( "powerswitch_p6_zm_buildable_pswitch_lever", "targetname" ); + hand = getent( "powerswitch_p6_zm_buildable_pswitch_hand", "targetname" ); + hand linkto( lever ); + hand hide(); + getent( "powerswitch_p6_zm_buildable_pswitch_body", "targetname" ) hide(); + lever hide(); + wait_for_buildable( "powerswitch" ); +} + +electricswitch() +{ + flag_init( "switches_on" ); + level thread wait_for_power(); + trig = getent( "powerswitch_buildable_trigger_power", "targetname" ); + trig setinvisibletoall(); + elecswitchbuildable(); + master_switch = getent( "powerswitch_p6_zm_buildable_pswitch_lever", "targetname" ); + + while ( true ) + { + trig sethintstring( &"ZOMBIE_ELECTRIC_SWITCH" ); + trig setvisibletoall(); + + trig waittill( "trigger", user ); + + trig setinvisibletoall(); + master_switch rotateroll( -90, 0.3 ); + master_switch playsound( "zmb_switch_flip" ); + + master_switch waittill( "rotatedone" ); + + playfx( level._effect["switch_sparks"], getstruct( "elec_switch_fx", "targetname" ).origin ); + master_switch playsound( "zmb_turn_on" ); + level.power_event_in_progress = 1; + level thread power_event_rumble_and_quake(); + flag_set( "switches_on" ); + clientnotify( "pwr" ); + level thread avogadro_show_vox( user ); + + level waittill( "power_event_complete" ); + + clientnotify( "pwr" ); + flag_set( "power_on" ); + level.power_event_in_progress = 0; + level thread bus_station_pa_vox(); + + if ( isdefined( user ) ) + { + user maps\mp\zombies\_zm_stats::increment_client_stat( "power_turnedon", 0 ); + user maps\mp\zombies\_zm_stats::increment_player_stat( "power_turnedon" ); + } + + trig sethintstring( &"ZOMBIE_ELECTRIC_SWITCH_OFF" ); + trig setvisibletoall(); + + trig waittill( "trigger", user ); + + trig setinvisibletoall(); + master_switch rotateroll( 90, 0.3 ); + master_switch playsound( "zmb_switch_flip" ); + + master_switch waittill( "rotatedone" ); + + level.power_event_in_progress = 1; + level thread power_event_rumble_and_quake(); + flag_clear( "switches_on" ); + + level waittill( "power_event_complete" ); + + clientnotify( "pwo" ); + flag_clear( "power_on" ); + level.power_event_in_progress = 0; + level.power_cycled = 1; + + if ( isdefined( user ) ) + { + user maps\mp\zombies\_zm_stats::increment_client_stat( "power_turnedoff", 0 ); + user maps\mp\zombies\_zm_stats::increment_player_stat( "power_turnedoff" ); + } + } +} + +vsmgr_lerp_power_up_down( player, opt_param_1, opt_param_2 ) +{ + self vsmgr_set_state_active( player, opt_param_1 ); +} + +power_event_vision_set_post_event() +{ + self endon( "end_vision_set_power" ); + level endon( "end_game" ); + self endon( "disconnect" ); + + if ( flag( "power_on" ) ) + return; + + level waittill( "power_event_complete" ); + + maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_power_high_low", self, 0 ); +} + +power_event_vision_set() +{ + self endon( "end_vision_set_power" ); + level endon( "end_game" ); + level endon( "power_event_complete" ); + self endon( "disconnect" ); + + if ( flag( "power_on" ) ) + return; + + duration = 2; + startgoal = 1; + endgoal = 0; + self power_event_vision_set_lerp( duration, startgoal, endgoal ); + + while ( true ) + { + if ( randomint( 100 ) > 50 ) + { + duration = randomintrange( 2, 6 ) / 5; + startgoal = endgoal; + + if ( startgoal > 0.6 ) + endgoal = randomfloatrange( 0.0, 0.5 ); + else + endgoal = 1; + + self power_event_vision_set_lerp( duration, startgoal, endgoal ); + } + else if ( randomint( 100 ) > 75 ) + { + for ( x = 2; x > 0; x-- ) + { + duration = 0.2; + startgoal = endgoal; + + if ( startgoal > 0.6 ) + endgoal = 0.0; + else + endgoal = 1.0; + + self power_event_vision_set_lerp( duration, startgoal, endgoal ); + } + } + else + { + duration = 0.4; + startgoal = endgoal; + + if ( startgoal > 0.6 ) + endgoal = randomfloatrange( 0.0, 0.5 ); + else + endgoal = randomfloatrange( 0.5, 1.0 ); + + self power_event_vision_set_lerp( duration, startgoal, endgoal ); + } + + wait 0.05; + } +} + +power_event_vision_set_lerp( duration, startgoal, endgoal ) +{ + self endon( "end_vision_set_power" ); + level endon( "end_game" ); + level endon( "power_event_complete" ); + self endon( "disconnect" ); + incs = int( duration / 0.05 ); + + if ( incs == 0 ) + incs = 1; + + incsgoal = ( endgoal - startgoal ) / incs; + currentgoal = startgoal; + + for ( i = 0; i < incs; i++ ) + { + currentgoal += incsgoal; + maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_power_high_low", self, currentgoal ); + wait 0.05; + } + + maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_power_high_low", self, endgoal ); +} + +power_event_rumble_and_quake( power_on ) +{ + level endon( "end_game" ); + + while ( isdefined( level.power_event_in_progress ) && level.power_event_in_progress ) + { + players = get_players(); + + foreach ( player in players ) + { + if ( !is_player_valid( player ) ) + continue; + + if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) || player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_pcr", 1 ) ) + { + if ( !( isdefined( player.power_rumble_active ) && player.power_rumble_active ) ) + player thread power_event_rumble_and_quake_player(); + + continue; + } + + if ( isdefined( player.power_rumble_active ) && player.power_rumble_active ) + { + player setclientfieldtoplayer( "power_rumble", 0 ); + player.power_rumble_active = 0; + } + } + + wait 1; + } + + players = get_players(); + + foreach ( player in players ) + { + player setclientfieldtoplayer( "power_rumble", 0 ); + player notify( "end_vision_set_power" ); + maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_power_high_low", player ); + } +} + +power_event_rumble_and_quake_player() +{ + self endon( "disconnect" ); + self.power_rumble_active = 1; + self setclientfieldtoplayer( "power_rumble", 1 ); + self thread power_event_vision_set(); + self thread power_event_vision_set_post_event(); + + while ( ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) || self maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_pcr", 1 ) ) && ( isdefined( level.power_event_in_progress ) && level.power_event_in_progress ) ) + wait 1; + + self.power_rumble_active = 0; + self notify( "end_vision_set_power" ); + self setclientfieldtoplayer( "power_rumble", 0 ); +} + +avogadroreleasefromchamberevent() +{ + exploder( 500 ); + level.zones["zone_prr"].is_spawning_allowed = 0; + level.zones["zone_pcr"].is_spawning_allowed = 0; + level thread killzombiesinpowerstation(); + + while ( !flag( "power_on" ) ) + { + waittime = randomfloatrange( 1.5, 4.5 ); + players = get_players(); + + foreach ( player in players ) + { + if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) ) + { + player setelectrified( waittime - 1.0 ); + player shellshock( "electrocution", waittime ); + wait 0.05; + } + } + + waittime += 1.5; + level waittill_notify_or_timeout( "power_on", waittime ); + } + + players = get_players(); + + foreach ( player in players ) + { + if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) ) + { + player setelectrified( 0.25 ); + player shellshock( "electrocution", 1.5 ); + wait 0.05; + } + } + + level.zones["zone_prr"].is_spawning_allowed = 1; + level.zones["zone_pcr"].is_spawning_allowed = 1; + stop_exploder( 500 ); +} + +killzombiesinpowerstation() +{ + level endon( "power_on" ); + radiussq = 122500; + + while ( true ) + { + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( !isdefined( zombie ) ) + continue; + + if ( isdefined( zombie.is_avogadro ) && zombie.is_avogadro ) + continue; + + if ( distancesquared( ( 11344, 7590, -729 ), zombie.origin ) < radiussq ) + continue; + + if ( isdefined( zombie ) && zombie maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) || isdefined( zombie.zone_name ) && zombie.zone_name == "zone_prr" ) + { + if ( !( isdefined( zombie.has_been_damaged_by_player ) && zombie.has_been_damaged_by_player ) ) + level.zombie_total++; + + zombie dodamage( zombie.health + 100, zombie.origin ); + wait( randomfloatrange( 0.05, 0.15 ) ); + } + } + + wait 1; + } +} + +wait_for_power() +{ + while ( true ) + { + flag_wait( "power_on" ); + maps\mp\zombies\_zm_perks::perk_unpause_all_perks(); + wait_network_frame(); + level setclientfield( "zombie_power_on", 1 ); + enable_morse_code(); + raisepowerplantgates(); + flag_waitopen( "power_on" ); + level setclientfield( "zombie_power_on", 0 ); + disable_morse_code(); + } +} + +raisepowerplantgates() +{ + gate1 = []; + gate2 = []; + gate1 = getentarray( "security_booth_gate", "targetname" ); + gate2 = getentarray( "security_booth_gate_2", "targetname" ); + + if ( isdefined( gate1 ) ) + { + for ( i = 0; i < gate1.size; i++ ) + gate1[i] thread raisegate( -90 ); + } + + if ( isdefined( gate2 ) ) + { + for ( i = 0; i < gate2.size; i++ ) + gate2[i] thread raisegate( 90 ); + } + + level.the_bus notify( "OnPowerOn" ); +} + +raisegate( degrees ) +{ + self rotatepitch( degrees, 4 ); +} + +powerevent() +{ + reactor_core_mover = getent( "core_mover", "targetname" ); + reactor_core_audio = spawn( "script_origin", reactor_core_mover.origin ); + + if ( !isdefined( reactor_core_mover ) ) + return; + + thread blockstairs(); + thread linkentitiestocoremover( reactor_core_mover ); + + while ( true ) + { + flag_wait( "switches_on" ); + thread dropreactordoors(); + thread raisereactordoors(); + power_event_time = 30; + reactor_core_mover playsound( "zmb_power_rise_start" ); + reactor_core_mover playloopsound( "zmb_power_rise_loop", 0.75 ); + reactor_core_mover thread coremove( power_event_time ); + + if ( isdefined( level.avogadro ) && isdefined( level.avogadro.state ) && level.avogadro.state == "chamber" ) + level thread avogadroreleasefromchamberevent(); + + wait( power_event_time ); + reactor_core_mover stoploopsound( 0.5 ); + reactor_core_audio playloopsound( "zmb_power_on_loop", 2 ); + reactor_core_mover playsound( "zmb_power_rise_stop" ); + level notify( "power_event_complete" ); + flag_waitopen( "switches_on" ); + thread dropreactordoors(); + thread raisereactordoors(); + playsoundatposition( "zmb_power_off_quad", ( 0, 0, 0 ) ); + reactor_core_mover playsound( "zmb_power_rise_start" ); + reactor_core_mover playloopsound( "zmb_power_rise_loop", 0.75 ); + reactor_core_mover thread coremove( power_event_time, 1 ); + wait( power_event_time ); + reactor_core_mover stoploopsound( 0.5 ); + reactor_core_audio stoploopsound( 0.5 ); + reactor_core_mover playsound( "zmb_power_rise_stop" ); + level notify( "power_event_complete" ); + } +} + +corerotate( time ) +{ + self rotateyaw( 180, time ); +} + +coremove( time, down ) +{ + if ( isdefined( down ) && down ) + self movez( -160, time ); + else + self movez( 160, time ); +} + +blockstairs() +{ + stairs_blocker = getent( "reactor_core_stairs_blocker", "targetname" ); + + if ( !isdefined( stairs_blocker ) ) + return; + + stairs_blocker movez( -128, 1.0 ); +} + +linkentitiestocoremover( reactor_core_mover ) +{ + core_entities = getentarray( "core_entity", "script_noteworthy" ); + + for ( i = 0; i < core_entities.size; i++ ) + { + next_ent = core_entities[i]; + + if ( next_ent.classname == "trigger_use_touch" ) + next_ent enablelinkto(); + + next_ent linkto( reactor_core_mover, "tag_origin" ); + } +} + +dropreactordoors() +{ + doors = getentarray( "reactor_core_door", "targetname" ); + + if ( doors.size == 0 ) + return; + + for ( i = 0; i < doors.size; i++ ) + { + next_door = doors[i]; + next_door movez( -128, 1.0 ); + next_door disconnectpaths(); + } +} + +raisereactordoors() +{ + level waittill( "power_event_complete" ); + + doors = getentarray( "reactor_core_door", "targetname" ); + + if ( doors.size == 0 ) + return; + + for ( i = 0; i < doors.size; i++ ) + { + next_door = doors[i]; + next_door movez( 128, 1.0 ); + next_door connectpaths(); + } +} + +avogadro_show_vox( user ) +{ + wait 1; + + if ( isdefined( user ) ) + user thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "power", "power_on" ); + + wait 8; + players = get_players(); + players = array_randomize( players ); + + foreach ( player in players ) + { + if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) || player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_pcr", 1 ) ) + { + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "power", "power_core" ); + break; + } + } + + wait 15; + players = get_players(); + players = array_randomize( players ); + + foreach ( player in players ) + { + if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) || player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_pcr", 1 ) ) + { + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "avogadro_reveal" ); + break; + } + } +} + +bus_station_pa_vox() +{ + level endon( "power_off" ); + + while ( true ) + { + level.station_pa_vox = array_randomize( level.station_pa_vox ); + + foreach ( line in level.station_pa_vox ) + { + playsoundatposition( line, ( -6848, 5056, 56 ) ); + wait( randomintrange( 12, 15 ) ); + } + + wait 1; + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_turned_diner.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_turned_diner.gsc new file mode 100644 index 0000000..2137cbf --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_turned_diner.gsc @@ -0,0 +1,67 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\gametypes_zm\zcleansed; + +precache() +{ + +} + +main() +{ + getspawnpoints(); + maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "diner" ); + + if ( getdvar( "ui_gametype" ) == "zcleansed" ) + maps\mp\zombies\_zm_game_module::set_current_game_module( level.game_module_cleansed_index ); + else + maps\mp\zombies\_zm_game_module::set_current_game_module( level.game_module_turned_index ); + + setdvar( "aim_target_player_enabled", 1 ); + diner_front_door = getentarray( "auto2278", "targetname" ); + array_thread( diner_front_door, ::self_delete ); + diner_side_door = getentarray( "auto2278", "targetname" ); + array_thread( diner_side_door, ::self_delete ); + garage_all_door = getentarray( "auto2279", "targetname" ); + array_thread( garage_all_door, ::self_delete ); + level.cleansed_loadout = getgametypesetting( "cleansedLoadout" ); + + if ( level.cleansed_loadout ) + { + level.humanify_custom_loadout = maps\mp\gametypes_zm\zcleansed::gunprogressionthink; + level.cleansed_zombie_round = 5; + } + else + { + level.humanify_custom_loadout = maps\mp\gametypes_zm\zcleansed::shotgunloadout; + level.cleansed_zombie_round = 2; + } + + collision = spawn( "script_model", ( -5000, -6700, 0 ), 1 ); + collision setmodel( "zm_collision_transit_diner_survival" ); + collision disconnectpaths(); +} + +getspawnpoints() +{ + level._turned_zombie_respawnpoints = getstructarray( "initial_spawn_points", "targetname" ); + level._turned_powerup_spawnpoints = []; + level._turned_powerup_spawnpoints[0] = spawnstruct(); + level._turned_powerup_spawnpoints[0].origin = ( -6072, -7808, 8 ); + level._turned_powerup_spawnpoints[1] = spawnstruct(); + level._turned_powerup_spawnpoints[1].origin = ( -5408, -6824, -53.5431 ); + level._turned_powerup_spawnpoints[2] = spawnstruct(); + level._turned_powerup_spawnpoints[2].origin = ( -4760, -7144, -64 ); + level._turned_powerup_spawnpoints[3] = spawnstruct(); + level._turned_powerup_spawnpoints[3].origin = ( -4864, -7864, -62.35 ); +} + +onendgame() +{ + +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_utility.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_utility.gsc new file mode 100644 index 0000000..779f031 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zm_transit_utility.gsc @@ -0,0 +1,277 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\_compass; + +playercanafford( player, cost ) +{ + if ( !player usebuttonpressed() ) + return false; + + if ( player in_revive_trigger() ) + return false; + + if ( isdefined( cost ) ) + { + if ( player.score < cost ) + return false; + + player maps\mp\zombies\_zm_score::minus_to_player_score( cost ); + } + + return true; +} + +setinvisibletoall() +{ + players = get_players(); + + for ( playerindex = 0; playerindex < players.size; playerindex++ ) + self setinvisibletoplayer( players[playerindex] ); +} + +spawnandlinkfxtotag( effect, ent, tag ) +{ + fxent = spawn( "script_model", ent gettagorigin( tag ) ); + fxent setmodel( "tag_origin" ); + fxent linkto( ent, tag ); + wait_network_frame(); + playfxontag( effect, fxent, "tag_origin" ); + return fxent; +} + +spawnandlinkfxtooffset( effect, ent, offsetorigin, offsetangles ) +{ + fxent = spawn( "script_model", ( 0, 0, 0 ) ); + fxent setmodel( "tag_origin" ); + fxent linkto( ent, "", offsetorigin, offsetangles ); + wait_network_frame(); + playfxontag( effect, fxent, "tag_origin" ); + return fxent; +} + +custom_weapon_wall_prices() +{ + if ( !isdefined( level.zombie_include_weapons ) ) + return; + + weapon_spawns = []; + weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); + + for ( i = 0; i < weapon_spawns.size; i++ ) + { + if ( !isdefined( level.zombie_weapons[weapon_spawns[i].zombie_weapon_upgrade] ) ) + continue; + + if ( isdefined( weapon_spawns[i].script_int ) ) + { + cost = weapon_spawns[i].script_int; + level.zombie_weapons[weapon_spawns[i].zombie_weapon_upgrade].cost = cost; + } + } +} + +pause_zombie_spawning() +{ + if ( !isdefined( level.spawnpausecount ) ) + level.spawnpausecount = 0; + + level.spawnpausecount++; + flag_clear( "spawn_zombies" ); +} + +try_resume_zombie_spawning() +{ + if ( !isdefined( level.spawnpausecount ) ) + level.spawnpausecount = 0; + + level.spawnpausecount--; + + if ( level.spawnpausecount <= 0 ) + { + level.spawnpausecount = 0; + flag_set( "spawn_zombies" ); + } +} + +automatonspeak( category, type, response, force_variant, override ) +{ + if ( isdefined( level.automaton ) && !is_true( level.automaton.disabled_by_emp ) ) + { +/# + if ( getdvar( _hash_6DF184E8 ) == "" ) + iprintlnbold( "Automaton VO: " + type ); +#/ + if ( type != "leaving" && type != "leaving_warning" ) + { + level.automaton notify( "want_to_be_speaking", type ); + + level.automaton waittill( "startspeaking" ); + } + + level.automaton maps\mp\zombies\_zm_audio::create_and_play_dialog( category, type, response, force_variant, override ); + } +} + +is_thedouche() +{ + return self.characterindex == 0; +} + +is_theconspiracytheorist() +{ + return self.characterindex == 1; +} + +is_thefarmersdaughter() +{ + return self.characterindex == 2; +} + +is_theelectricalengineer() +{ + return self.characterindex == 3; +} + +get_random_encounter_match( location ) +{ + match_pool = []; + assert( match_pool.size > 0, "Could not find a random encounters match for " + location ); + return random( match_pool ); +} + +transit_breakable_glass_init() +{ + glass = getentarray( "transit_glass", "targetname" ); + + if ( level.splitscreen && getdvarint( "splitscreen_playerCount" ) > 2 ) + { + array_delete( glass ); + return; + } + + array_thread( glass, ::transit_breakable_glass ); +} + +transit_breakable_glass() +{ + level endon( "intermission" ); + self.health = 99999; + self setcandamage( 1 ); + self.damage_state = 0; + + while ( true ) + { + self waittill( "damage", amount, attacker, direction, point, dmg_type ); + + if ( isplayer( attacker ) ) + { + if ( self.damage_state == 0 ) + { + self glass_gets_destroyed(); + self.damage_state = 1; + self playsound( "fly_glass_break" ); + } + } + } +} + +glass_gets_destroyed() +{ + if ( isdefined( level._effect["glass_impact"] ) ) + playfx( level._effect["glass_impact"], self.origin, anglestoforward( self.angles ) ); + + wait 0.1; + + if ( isdefined( self.model ) && self.damage_state == 0 ) + { + self setmodel( self.model + "_broken" ); + self.damage_state = 1; + return; + } + else + { + self delete(); + return; + } +} + +solo_tombstone_removal() +{ + if ( getnumexpectedplayers() > 1 ) + return; + + level notify( "tombstone_removed" ); + level thread maps\mp\zombies\_zm_perks::perk_machine_removal( "specialty_scavenger" ); +} + +sparking_power_lines() +{ + lines = getentarray( "power_line_sparking", "targetname" ); +} + +disconnect_door_zones( zone_a, zone_b, flag_name ) +{ + level endon( "intermission" ); + level endon( "end_game" ); + + while ( true ) + { + flag_wait( flag_name ); + azone = level.zones[zone_a].adjacent_zones[zone_b]; + azone maps\mp\zombies\_zm_zonemgr::door_close_disconnect( flag_name ); + } +} + +enable_morse_code() +{ + level clientnotify( "mc1" ); +} + +disable_morse_code() +{ + level clientnotify( "mc0" ); +} + +transit_pathnode_spawning() +{ + precachemodel( "collision_wall_128x128x10_standard" ); + precachemodel( "collision_wall_256x256x10_standard" ); + precachemodel( "collision_clip_64x64x256" ); + minimap_upperl = spawn( "script_origin", ( -12248, 9496, 552 ) ); + minimap_upperl.targetname = "minimap_corner"; + minimap_lowerr = spawn( "script_origin", ( 14472, -8496, -776 ) ); + minimap_lowerr.targetname = "minimap_corner"; + maps\mp\_compass::setupminimap( "compass_map_zm_transit" ); + flag_wait( "start_zombie_round_logic" ); + collision1 = spawn( "script_model", ( 2273, -126, 143 ) ); + collision1 setmodel( "collision_wall_128x128x10_standard" ); + collision1.angles = ( 0, 0, 0 ); + collision1 ghost(); + collision2 = spawn( "script_model", ( 2096, -126, 143 ) ); + collision2 setmodel( "collision_wall_128x128x10_standard" ); + collision2.angles = ( 0, 0, 0 ); + collision2 ghost(); + collision3 = spawn( "script_model", ( 1959, -126, 143 ) ); + collision3 setmodel( "collision_wall_128x128x10_standard" ); + collision3.angles = ( 0, 0, 0 ); + collision3 ghost(); + collision4 = spawn( "script_model", ( 12239, 8509, -688 ) ); + collision4 setmodel( "collision_wall_128x128x10_standard" ); + collision4.angles = ( 0, 0, 0 ); + collision4 ghost(); + collision5 = spawn( "script_model", ( 8320, -6679, 362 ) ); + collision5 setmodel( "collision_wall_256x256x10_standard" ); + collision5.angles = vectorscale( ( 0, 1, 0 ), 300.0 ); + collision5 ghost(); + collision5 = spawn( "script_model", ( 10068, 7272, -67 ) ); + collision5 setmodel( "collision_clip_64x64x256" ); + collision5.angles = ( 0, 0, 0 ); + collision5 ghost(); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_load.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_load.gsc new file mode 100644 index 0000000..ab230de --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_load.gsc @@ -0,0 +1,478 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\_script_gen; +#include maps\mp\_interactive_objects; +#include maps\mp\_audio; +#include maps\mp\_busing; +#include maps\mp\_music; +#include maps\mp\_fxanim; +#include maps\mp\_serverfaceanim_mp; +#include maps\mp\_art; +#include maps\mp\_createfx; +#include maps\mp\_global_fx; +#include maps\mp\_demo; +#include maps\mp\zombies\_load; +#include maps\mp\animscripts\utility; +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\gametypes_zm\_spawnlogic; + +main( bscriptgened, bcsvgened, bsgenabled ) +{ + if ( !isdefined( level.script_gen_dump_reasons ) ) + level.script_gen_dump_reasons = []; + + if ( !isdefined( bsgenabled ) ) + level.script_gen_dump_reasons[level.script_gen_dump_reasons.size] = "First run"; + + if ( !isdefined( bcsvgened ) ) + bcsvgened = 0; + + level.bcsvgened = bcsvgened; + + if ( !isdefined( bscriptgened ) ) + bscriptgened = 0; + else + bscriptgened = 1; + + level.bscriptgened = bscriptgened; + level._loadstarted = 1; + struct_class_init(); + level.clientscripts = getdvar( "cg_usingClientScripts" ) != ""; + level._client_exploders = []; + level._client_exploder_ids = []; + + if ( !isdefined( level.flag ) ) + { + level.flag = []; + level.flags_lock = []; + } + + if ( !isdefined( level.timeofday ) ) + level.timeofday = "day"; + + flag_init( "scriptgen_done" ); + level.script_gen_dump_reasons = []; + + if ( !isdefined( level.script_gen_dump ) ) + { + level.script_gen_dump = []; + level.script_gen_dump_reasons[0] = "First run"; + } + + if ( !isdefined( level.script_gen_dump2 ) ) + level.script_gen_dump2 = []; + + if ( isdefined( level.createfxent ) && isdefined( level.script ) ) + script_gen_dump_addline( "maps\\mp\\createfx\\" + level.script + "_fx::main();", level.script + "_fx" ); + + if ( isdefined( level.script_gen_dump_preload ) ) + { + for ( i = 0; i < level.script_gen_dump_preload.size; i++ ) + script_gen_dump_addline( level.script_gen_dump_preload[i].string, level.script_gen_dump_preload[i].signature ); + } + + if ( getdvar( "scr_RequiredMapAspectratio" ) == "" ) + setdvar( "scr_RequiredMapAspectratio", "1" ); + + setdvar( "r_waterFogTest", 0 ); + precacherumble( "reload_small" ); + precacherumble( "reload_medium" ); + precacherumble( "reload_large" ); + precacherumble( "reload_clipin" ); + precacherumble( "reload_clipout" ); + precacherumble( "reload_rechamber" ); + precacherumble( "pullout_small" ); + precacherumble( "buzz_high" ); + precacherumble( "riotshield_impact" ); + registerclientsys( "levelNotify" ); + level.aitriggerspawnflags = getaitriggerflags(); + level.vehicletriggerspawnflags = getvehicletriggerflags(); + level.physicstracemaskphysics = 1; + level.physicstracemaskvehicle = 2; + level.physicstracemaskwater = 4; + level.physicstracemaskclip = 8; + level.physicstracecontentsvehicleclip = 16; + level.createfx_enabled = getdvar( "createfx" ) != ""; + level thread start_intro_screen_zm(); + thread maps\mp\_interactive_objects::init(); + maps\mp\_audio::init(); + thread maps\mp\_busing::businit(); + thread maps\mp\_music::music_init(); + thread maps\mp\_fxanim::init(); + thread maps\mp\_serverfaceanim_mp::init(); + + if ( level.createfx_enabled ) + setinitialplayersconnected(); + + visionsetnight( "default_night" ); + setup_traversals(); + maps\mp\_art::main(); + setupexploders(); + parse_structs(); + thread footsteps(); +/# + level thread level_notify_listener(); + level thread client_notify_listener(); +#/ + thread maps\mp\_createfx::fx_init(); + + if ( level.createfx_enabled ) + { + calculate_map_center(); + maps\mp\_createfx::createfx(); + } + + if ( getdvar( "r_reflectionProbeGenerate" ) == "1" ) + { + maps\mp\_global_fx::main(); + + level waittill( "eternity" ); + } + + thread maps\mp\_global_fx::main(); + maps\mp\_demo::init(); + + for ( p = 0; p < 6; p++ ) + { + switch ( p ) + { + case 0: + triggertype = "trigger_multiple"; + break; + case 1: + triggertype = "trigger_once"; + break; + case 2: + triggertype = "trigger_use"; + break; + case 3: + triggertype = "trigger_radius"; + break; + case 4: + triggertype = "trigger_lookat"; + break; + default: + assert( p == 5 ); + triggertype = "trigger_damage"; + break; + } + + triggers = getentarray( triggertype, "classname" ); + + for ( i = 0; i < triggers.size; i++ ) + { + if ( isdefined( triggers[i].script_prefab_exploder ) ) + triggers[i].script_exploder = triggers[i].script_prefab_exploder; + + if ( isdefined( triggers[i].script_exploder ) ) + level thread maps\mp\zombies\_load::exploder_load( triggers[i] ); + } + } +} + +level_notify_listener() +{ + while ( true ) + { + val = getdvar( "level_notify" ); + + if ( val != "" ) + { + level notify( val ); + setdvar( "level_notify", "" ); + } + + wait 0.2; + } +} + +client_notify_listener() +{ + while ( true ) + { + val = getdvar( "client_notify" ); + + if ( val != "" ) + { + clientnotify( val ); + setdvar( "client_notify", "" ); + } + + wait 0.2; + } +} + +footsteps() +{ + if ( is_true( level.fx_exclude_footsteps ) ) + return; + + maps\mp\animscripts\utility::setfootstepeffect( "asphalt", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "brick", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "carpet", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "cloth", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "concrete", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "dirt", loadfx( "bio/player/fx_footstep_sand" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "foliage", loadfx( "bio/player/fx_footstep_sand" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "gravel", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "grass", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "metal", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "mud", loadfx( "bio/player/fx_footstep_mud" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "paper", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "plaster", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "rock", loadfx( "bio/player/fx_footstep_dust" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "sand", loadfx( "bio/player/fx_footstep_sand" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "water", loadfx( "bio/player/fx_footstep_water" ) ); + maps\mp\animscripts\utility::setfootstepeffect( "wood", loadfx( "bio/player/fx_footstep_dust" ) ); +} + +parse_structs() +{ + for ( i = 0; i < level.struct.size; i++ ) + { + if ( isdefined( level.struct[i].targetname ) ) + { + if ( level.struct[i].targetname == "flak_fire_fx" ) + { + level._effect["flak20_fire_fx"] = loadfx( "weapon/tracer/fx_tracer_flak_single_noExp" ); + level._effect["flak38_fire_fx"] = loadfx( "weapon/tracer/fx_tracer_quad_20mm_Flak38_noExp" ); + level._effect["flak_cloudflash_night"] = loadfx( "weapon/flak/fx_flak_cloudflash_night" ); + level._effect["flak_burst_single"] = loadfx( "weapon/flak/fx_flak_single_day_dist" ); + } + + if ( level.struct[i].targetname == "fake_fire_fx" ) + level._effect["distant_muzzleflash"] = loadfx( "weapon/muzzleflashes/heavy" ); + + if ( level.struct[i].targetname == "spotlight_fx" ) + level._effect["spotlight_beam"] = loadfx( "env/light/fx_ray_spotlight_md" ); + } + } +} + +exploder_load( trigger ) +{ + level endon( "killexplodertridgers" + trigger.script_exploder ); + + trigger waittill( "trigger" ); + + if ( isdefined( trigger.script_chance ) && randomfloat( 1 ) > trigger.script_chance ) + { + if ( isdefined( trigger.script_delay ) ) + wait( trigger.script_delay ); + else + wait 4; + + level thread exploder_load( trigger ); + return; + } + + maps\mp\_utility::exploder( trigger.script_exploder ); + level notify( "killexplodertridgers" + trigger.script_exploder ); +} + +setupexploders() +{ + ents = getentarray( "script_brushmodel", "classname" ); + smodels = getentarray( "script_model", "classname" ); + + for ( i = 0; i < smodels.size; i++ ) + ents[ents.size] = smodels[i]; + + for ( i = 0; i < ents.size; i++ ) + { + if ( isdefined( ents[i].script_prefab_exploder ) ) + ents[i].script_exploder = ents[i].script_prefab_exploder; + + if ( isdefined( ents[i].script_exploder ) ) + { + if ( ents[i].model == "fx" && ( !isdefined( ents[i].targetname ) || ents[i].targetname != "exploderchunk" ) ) + { + ents[i] hide(); + continue; + } + + if ( isdefined( ents[i].targetname ) && ents[i].targetname == "exploder" ) + { + ents[i] hide(); + ents[i] notsolid(); + continue; + } + + if ( isdefined( ents[i].targetname ) && ents[i].targetname == "exploderchunk" ) + { + ents[i] hide(); + ents[i] notsolid(); + } + } + } + + script_exploders = []; + potentialexploders = getentarray( "script_brushmodel", "classname" ); + + for ( i = 0; i < potentialexploders.size; i++ ) + { + if ( isdefined( potentialexploders[i].script_prefab_exploder ) ) + potentialexploders[i].script_exploder = potentialexploders[i].script_prefab_exploder; + + if ( isdefined( potentialexploders[i].script_exploder ) ) + script_exploders[script_exploders.size] = potentialexploders[i]; + } + + potentialexploders = getentarray( "script_model", "classname" ); + + for ( i = 0; i < potentialexploders.size; i++ ) + { + if ( isdefined( potentialexploders[i].script_prefab_exploder ) ) + potentialexploders[i].script_exploder = potentialexploders[i].script_prefab_exploder; + + if ( isdefined( potentialexploders[i].script_exploder ) ) + script_exploders[script_exploders.size] = potentialexploders[i]; + } + + potentialexploders = getentarray( "item_health", "classname" ); + + for ( i = 0; i < potentialexploders.size; i++ ) + { + if ( isdefined( potentialexploders[i].script_prefab_exploder ) ) + potentialexploders[i].script_exploder = potentialexploders[i].script_prefab_exploder; + + if ( isdefined( potentialexploders[i].script_exploder ) ) + script_exploders[script_exploders.size] = potentialexploders[i]; + } + + if ( !isdefined( level.createfxent ) ) + level.createfxent = []; + + acceptabletargetnames = []; + acceptabletargetnames["exploderchunk visible"] = 1; + acceptabletargetnames["exploderchunk"] = 1; + acceptabletargetnames["exploder"] = 1; + + for ( i = 0; i < script_exploders.size; i++ ) + { + exploder = script_exploders[i]; + ent = createexploder( exploder.script_fxid ); + ent.v = []; + ent.v["origin"] = exploder.origin; + ent.v["angles"] = exploder.angles; + ent.v["delay"] = exploder.script_delay; + ent.v["firefx"] = exploder.script_firefx; + ent.v["firefxdelay"] = exploder.script_firefxdelay; + ent.v["firefxsound"] = exploder.script_firefxsound; + ent.v["firefxtimeout"] = exploder.script_firefxtimeout; + ent.v["earthquake"] = exploder.script_earthquake; + ent.v["damage"] = exploder.script_damage; + ent.v["damage_radius"] = exploder.script_radius; + ent.v["soundalias"] = exploder.script_soundalias; + ent.v["repeat"] = exploder.script_repeat; + ent.v["delay_min"] = exploder.script_delay_min; + ent.v["delay_max"] = exploder.script_delay_max; + ent.v["target"] = exploder.target; + ent.v["ender"] = exploder.script_ender; + ent.v["type"] = "exploder"; + + if ( !isdefined( exploder.script_fxid ) ) + ent.v["fxid"] = "No FX"; + else + ent.v["fxid"] = exploder.script_fxid; + + ent.v["exploder"] = exploder.script_exploder; + assert( isdefined( exploder.script_exploder ), "Exploder at origin " + exploder.origin + " has no script_exploder" ); + + if ( !isdefined( ent.v["delay"] ) ) + ent.v["delay"] = 0; + + if ( isdefined( exploder.target ) ) + { + org = getent( ent.v["target"], "targetname" ).origin; + ent.v["angles"] = vectortoangles( org - ent.v["origin"] ); + } + + if ( exploder.classname == "script_brushmodel" || isdefined( exploder.model ) ) + { + ent.model = exploder; + ent.model.disconnect_paths = exploder.script_disconnectpaths; + } + + if ( isdefined( exploder.targetname ) && isdefined( acceptabletargetnames[exploder.targetname] ) ) + ent.v["exploder_type"] = exploder.targetname; + else + ent.v["exploder_type"] = "normal"; + + ent maps\mp\_createfx::post_entity_creation_function(); + } + + level.createfxexploders = []; + + for ( i = 0; i < level.createfxent.size; i++ ) + { + ent = level.createfxent[i]; + + if ( ent.v["type"] != "exploder" ) + continue; + + ent.v["exploder_id"] = getexploderid( ent ); + + if ( !isdefined( level.createfxexploders[ent.v["exploder"]] ) ) + level.createfxexploders[ent.v["exploder"]] = []; + + level.createfxexploders[ent.v["exploder"]][level.createfxexploders[ent.v["exploder"]].size] = ent; + } +} + +setup_traversals() +{ + potential_traverse_nodes = getallnodes(); + + for ( i = 0; i < potential_traverse_nodes.size; i++ ) + { + node = potential_traverse_nodes[i]; + + if ( node.type == "Begin" ) + node maps\mp\animscripts\traverse\shared::init_traverse(); + } +} + +calculate_map_center() +{ + if ( !isdefined( level.mapcenter ) ) + { + level.nodesmins = ( 0, 0, 0 ); + level.nodesmaxs = ( 0, 0, 0 ); + level.mapcenter = maps\mp\gametypes_zm\_spawnlogic::findboxcenter( level.nodesmins, level.nodesmaxs ); +/# + println( "map center: ", level.mapcenter ); +#/ + setmapcenter( level.mapcenter ); + } +} + +start_intro_screen_zm() +{ + if ( level.createfx_enabled ) + return; + + if ( !isdefined( level.introscreen ) ) + { + level.introscreen = newhudelem(); + level.introscreen.x = 0; + level.introscreen.y = 0; + level.introscreen.horzalign = "fullscreen"; + level.introscreen.vertalign = "fullscreen"; + level.introscreen.foreground = 0; + level.introscreen setshader( "black", 640, 480 ); + level.introscreen.immunetodemogamehudsettings = 1; + level.introscreen.immunetodemofreecamera = 1; + wait 0.05; + } + + level.introscreen.alpha = 1; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] freezecontrols( 1 ); + + wait 1; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm.gsc new file mode 100644 index 0000000..9174c38 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm.gsc @@ -0,0 +1,5423 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_ffotd; +#include maps\mp\zombies\_zm; +#include maps\mp\_visionset_mgr; +#include maps\mp\zombies\_zm_devgui; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_blockers; +#include maps\mp\zombies\_zm_bot; +#include maps\mp\zombies\_zm_clone; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_playerhealth; +#include maps\mp\zombies\_zm_power; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_gump; +#include maps\mp\zombies\_zm_timer; +#include maps\mp\zombies\_zm_traps; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_tombstone; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_pers_upgrades; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\_demo; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\zombies\_zm_melee_weapon; +#include maps\mp\zombies\_zm_ai_dogs; +#include maps\mp\zombies\_zm_pers_upgrades_system; +#include maps\mp\gametypes_zm\_weapons; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zombies\_zm_game_module; + +init() +{ + level.player_out_of_playable_area_monitor = 1; + level.player_too_many_weapons_monitor = 1; + level.player_too_many_weapons_monitor_func = ::player_too_many_weapons_monitor; + level.player_too_many_players_check = 1; + level.player_too_many_players_check_func = ::player_too_many_players_check; + level._use_choke_weapon_hints = 1; + level._use_choke_blockers = 1; + level.passed_introscreen = 0; + + if ( !isdefined( level.custom_ai_type ) ) + level.custom_ai_type = []; + + level.custom_ai_spawn_check_funcs = []; + level.spawn_funcs = []; + level.spawn_funcs["allies"] = []; + level.spawn_funcs["axis"] = []; + level.spawn_funcs["team3"] = []; + level thread maps\mp\zombies\_zm_ffotd::main_start(); + level.zombiemode = 1; + level.revivefeature = 0; + level.swimmingfeature = 0; + level.calc_closest_player_using_paths = 0; + level.zombie_melee_in_water = 1; + level.put_timed_out_zombies_back_in_queue = 1; + level.use_alternate_poi_positioning = 1; + level.zmb_laugh_alias = "zmb_laugh_richtofen"; + level.sndannouncerisrich = 1; + level.scr_zm_ui_gametype = getdvar( "ui_gametype" ); + level.scr_zm_ui_gametype_group = getdvar( "ui_zm_gamemodegroup" ); + level.scr_zm_map_start_location = getdvar( "ui_zm_mapstartlocation" ); + level.curr_gametype_affects_rank = 0; + gametype = tolower( getdvar( "g_gametype" ) ); + + if ( "zclassic" == gametype || "zstandard" == gametype ) + level.curr_gametype_affects_rank = 1; + + level.grenade_multiattack_bookmark_count = 1; + level.rampage_bookmark_kill_times_count = 3; + level.rampage_bookmark_kill_times_msec = 6000; + level.rampage_bookmark_kill_times_delay = 6000; + level thread watch_rampage_bookmark(); + + if ( !isdefined( level._zombies_round_spawn_failsafe ) ) + level._zombies_round_spawn_failsafe = maps\mp\zombies\_zm::round_spawn_failsafe; + + level.zombie_visionset = "zombie_neutral"; + + if ( getdvar( _hash_5DF80895 ) == "1" ) + level.zombie_anim_intro = 1; + else + level.zombie_anim_intro = 0; + + precache_shaders(); + precache_models(); + precacherumble( "explosion_generic" ); + precacherumble( "dtp_rumble" ); + precacherumble( "slide_rumble" ); + precache_zombie_leaderboards(); + level._zombie_gib_piece_index_all = 0; + level._zombie_gib_piece_index_right_arm = 1; + level._zombie_gib_piece_index_left_arm = 2; + level._zombie_gib_piece_index_right_leg = 3; + level._zombie_gib_piece_index_left_leg = 4; + level._zombie_gib_piece_index_head = 5; + level._zombie_gib_piece_index_guts = 6; + level._zombie_gib_piece_index_hat = 7; + + if ( !isdefined( level.zombie_ai_limit ) ) + level.zombie_ai_limit = 24; + + if ( !isdefined( level.zombie_actor_limit ) ) + level.zombie_actor_limit = 31; + + maps\mp\_visionset_mgr::init(); + init_dvars(); + init_strings(); + init_levelvars(); + init_sounds(); + init_shellshocks(); + init_flags(); + init_client_flags(); + registerclientfield( "world", "zombie_power_on", 1, 1, "int" ); + + if ( !( isdefined( level._no_navcards ) && level._no_navcards ) ) + { + if ( level.scr_zm_ui_gametype_group == "zclassic" && !level.createfx_enabled ) + { + registerclientfield( "allplayers", "navcard_held", 1, 4, "int" ); + level.navcards = []; + level.navcards[0] = "navcard_held_zm_transit"; + level.navcards[1] = "navcard_held_zm_highrise"; + level.navcards[2] = "navcard_held_zm_buried"; + level thread setup_player_navcard_hud(); + } + } + + register_offhand_weapons_for_level_defaults(); + level thread drive_client_connected_notifies(); +/# + maps\mp\zombies\_zm_devgui::init(); +#/ + maps\mp\zombies\_zm_zonemgr::init(); + maps\mp\zombies\_zm_unitrigger::init(); + maps\mp\zombies\_zm_audio::init(); + maps\mp\zombies\_zm_blockers::init(); + maps\mp\zombies\_zm_bot::init(); + maps\mp\zombies\_zm_clone::init(); + maps\mp\zombies\_zm_buildables::init(); + maps\mp\zombies\_zm_equipment::init(); + maps\mp\zombies\_zm_laststand::init(); + maps\mp\zombies\_zm_magicbox::init(); + maps\mp\zombies\_zm_perks::init(); + maps\mp\zombies\_zm_playerhealth::init(); + maps\mp\zombies\_zm_power::init(); + maps\mp\zombies\_zm_powerups::init(); + maps\mp\zombies\_zm_score::init(); + maps\mp\zombies\_zm_spawner::init(); + maps\mp\zombies\_zm_gump::init(); + maps\mp\zombies\_zm_timer::init(); + maps\mp\zombies\_zm_traps::init(); + maps\mp\zombies\_zm_weapons::init(); + init_function_overrides(); + level thread last_stand_pistol_rank_init(); + level thread maps\mp\zombies\_zm_tombstone::init(); + level thread post_all_players_connected(); + init_utility(); + maps\mp\_utility::registerclientsys( "lsm" ); + maps\mp\zombies\_zm_stats::init(); + initializestattracking(); + + if ( get_players().size <= 1 ) + incrementcounter( "global_solo_games", 1 ); + else if ( level.systemlink ) + incrementcounter( "global_systemlink_games", 1 ); + else if ( getdvarint( "splitscreen_playerCount" ) == get_players().size ) + incrementcounter( "global_splitscreen_games", 1 ); + else + incrementcounter( "global_coop_games", 1 ); + + onplayerconnect_callback( ::zm_on_player_connect ); + maps\mp\zombies\_zm_pers_upgrades::pers_upgrade_init(); + set_demo_intermission_point(); + level thread maps\mp\zombies\_zm_ffotd::main_end(); + level thread track_players_intersection_tracker(); + level thread onallplayersready(); + level thread startunitriggers(); + level thread maps\mp\gametypes_zm\_zm_gametype::post_init_gametype(); +} + +post_main() +{ + level thread init_custom_ai_type(); +} + +startunitriggers() +{ + flag_wait_any( "start_zombie_round_logic", "start_encounters_match_logic" ); + level thread maps\mp\zombies\_zm_unitrigger::main(); +} + +drive_client_connected_notifies() +{ + while ( true ) + { + level waittill( "connected", player ); + + player reset_rampage_bookmark_kill_times(); + player callback( "on_player_connect" ); + } +} + +fade_out_intro_screen_zm( hold_black_time, fade_out_time, destroyed_afterwards ) +{ + if ( !isdefined( level.introscreen ) ) + { + level.introscreen = newhudelem(); + level.introscreen.x = 0; + level.introscreen.y = 0; + level.introscreen.horzalign = "fullscreen"; + level.introscreen.vertalign = "fullscreen"; + level.introscreen.foreground = 0; + level.introscreen setshader( "black", 640, 480 ); + level.introscreen.immunetodemogamehudsettings = 1; + level.introscreen.immunetodemofreecamera = 1; + wait 0.05; + } + + level.introscreen.alpha = 1; + + if ( isdefined( hold_black_time ) ) + wait( hold_black_time ); + else + wait 0.2; + + if ( !isdefined( fade_out_time ) ) + fade_out_time = 1.5; + + level.introscreen fadeovertime( fade_out_time ); + level.introscreen.alpha = 0; + wait 1.6; + level.passed_introscreen = 1; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + players[i] setclientuivisibilityflag( "hud_visible", 1 ); + + if ( !( isdefined( level.host_ended_game ) && level.host_ended_game ) ) + { + if ( isdefined( level.player_movement_suppressed ) ) + { + players[i] freezecontrols( level.player_movement_suppressed ); +/# + println( " Unfreeze controls 4" ); +#/ + continue; + } + + if ( !( isdefined( players[i].hostmigrationcontrolsfrozen ) && players[i].hostmigrationcontrolsfrozen ) ) + { + players[i] freezecontrols( 0 ); +/# + println( " Unfreeze controls 5" ); +#/ + } + } + } + + if ( destroyed_afterwards == 1 ) + level.introscreen destroy(); + + flag_set( "initial_blackscreen_passed" ); +} + +onallplayersready() +{ + timeout = gettime() + 5000; + + while ( getnumexpectedplayers() == 0 && gettime() < timeout ) + wait 0.1; +/# + println( "ZM >> player_count_expected=" + getnumexpectedplayers() ); +#/ + player_count_actual = 0; + + while ( getnumconnectedplayers() < getnumexpectedplayers() || player_count_actual != getnumexpectedplayers() ) + { + players = get_players(); + player_count_actual = 0; + + for ( i = 0; i < players.size; i++ ) + { + players[i] freezecontrols( 1 ); + + if ( players[i].sessionstate == "playing" ) + player_count_actual++; + } +/# + println( "ZM >> Num Connected =" + getnumconnectedplayers() + " Expected : " + getnumexpectedplayers() ); +#/ + wait 0.1; + } + + setinitialplayersconnected(); +/# + println( "ZM >> We have all players - START ZOMBIE LOGIC" ); +#/ + if ( 1 == getnumconnectedplayers() && getdvarint( "scr_zm_enable_bots" ) == 1 ) + { + level thread add_bots(); + flag_set( "initial_players_connected" ); + } + else + { + players = get_players(); + + if ( players.size == 1 ) + { + flag_set( "solo_game" ); + level.solo_lives_given = 0; + + foreach ( player in players ) + player.lives = 0; + + level maps\mp\zombies\_zm::set_default_laststand_pistol( 1 ); + } + + flag_set( "initial_players_connected" ); + + while ( !aretexturesloaded() ) + wait 0.05; + + thread start_zombie_logic_in_x_sec( 3.0 ); + } + + fade_out_intro_screen_zm( 5.0, 1.5, 1 ); +} + +start_zombie_logic_in_x_sec( time_to_wait ) +{ + wait( time_to_wait ); + flag_set( "start_zombie_round_logic" ); +} + +getallotherplayers() +{ + aliveplayers = []; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( !isdefined( level.players[i] ) ) + continue; + + player = level.players[i]; + + if ( player.sessionstate != "playing" || player == self ) + continue; + + aliveplayers[aliveplayers.size] = player; + } + + return aliveplayers; +} + +getfreespawnpoint( spawnpoints, player ) +{ + if ( !isdefined( spawnpoints ) ) + { +/# + iprintlnbold( "ZM >> No free spawn points in map" ); +#/ + return undefined; + } + + if ( !isdefined( game["spawns_randomized"] ) ) + { + game["spawns_randomized"] = 1; + spawnpoints = array_randomize( spawnpoints ); + random_chance = randomint( 100 ); + + if ( random_chance > 50 ) + set_game_var( "side_selection", 1 ); + else + set_game_var( "side_selection", 2 ); + } + + side_selection = get_game_var( "side_selection" ); + + if ( get_game_var( "switchedsides" ) ) + { + if ( side_selection == 2 ) + side_selection = 1; + else if ( side_selection == 1 ) + side_selection = 2; + } + + if ( isdefined( player ) && isdefined( player.team ) ) + { + i = 0; + + while ( isdefined( spawnpoints ) && i < spawnpoints.size ) + { + if ( side_selection == 1 ) + { + if ( player.team != "allies" && ( isdefined( spawnpoints[i].script_int ) && spawnpoints[i].script_int == 1 ) ) + { + arrayremovevalue( spawnpoints, spawnpoints[i] ); + i = 0; + } + else if ( player.team == "allies" && ( isdefined( spawnpoints[i].script_int ) && spawnpoints[i].script_int == 2 ) ) + { + arrayremovevalue( spawnpoints, spawnpoints[i] ); + i = 0; + } + else + i++; + } + else if ( player.team == "allies" && ( isdefined( spawnpoints[i].script_int ) && spawnpoints[i].script_int == 1 ) ) + { + arrayremovevalue( spawnpoints, spawnpoints[i] ); + i = 0; + } + else if ( player.team != "allies" && ( isdefined( spawnpoints[i].script_int ) && spawnpoints[i].script_int == 2 ) ) + { + arrayremovevalue( spawnpoints, spawnpoints[i] ); + i = 0; + } + else + i++; + } + } + + if ( !isdefined( self.playernum ) ) + { + if ( self.team == "allies" ) + { + self.playernum = get_game_var( "_team1_num" ); + set_game_var( "_team1_num", self.playernum + 1 ); + } + else + { + self.playernum = get_game_var( "_team2_num" ); + set_game_var( "_team2_num", self.playernum + 1 ); + } + } + + for ( j = 0; j < spawnpoints.size; j++ ) + { + if ( !isdefined( spawnpoints[j].en_num ) ) + { + for ( m = 0; m < spawnpoints.size; m++ ) + spawnpoints[m].en_num = m; + } + + if ( spawnpoints[j].en_num == self.playernum ) + return spawnpoints[j]; + } + + return spawnpoints[0]; +} + +delete_in_createfx() +{ + exterior_goals = getstructarray( "exterior_goal", "targetname" ); + + for ( i = 0; i < exterior_goals.size; i++ ) + { + if ( !isdefined( exterior_goals[i].target ) ) + continue; + + targets = getentarray( exterior_goals[i].target, "targetname" ); + + for ( j = 0; j < targets.size; j++ ) + targets[j] self_delete(); + } + + if ( isdefined( level.level_createfx_callback_thread ) ) + level thread [[ level.level_createfx_callback_thread ]](); +} + +add_bots() +{ + for ( host = gethostplayer(); !isdefined( host ); host = gethostplayer() ) + wait 0.05; + + wait 4.0; + zbot_spawn(); + setdvar( "bot_AllowMovement", "1" ); + setdvar( "bot_PressAttackBtn", "1" ); + setdvar( "bot_PressMeleeBtn", "1" ); + + while ( get_players().size < 2 ) + wait 0.05; + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + players[i] freezecontrols( 0 ); +/# + println( " Unfreeze controls 6" ); +#/ + } + + level.numberbotsadded = 1; + flag_set( "start_zombie_round_logic" ); +} + +zbot_spawn() +{ + player = gethostplayer(); + spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); + spawnpoint = getfreespawnpoint( spawnpoints ); + bot = addtestclient(); + + if ( !isdefined( bot ) ) + { +/# + println( "Could not add test client" ); +#/ + return; + } + + bot.pers["isBot"] = 1; + bot.equipment_enabled = 0; + yaw = spawnpoint.angles[1]; + bot thread zbot_spawn_think( spawnpoint.origin, yaw ); + return bot; +} + +zbot_spawn_think( origin, yaw ) +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self setorigin( origin ); + angles = ( 0, yaw, 0 ); + self setplayerangles( angles ); + } +} + +post_all_players_connected() +{ + level thread end_game(); + flag_wait( "start_zombie_round_logic" ); +/# + println( "sessions: mapname=", level.script, " gametype zom isserver 1 player_count=", get_players().size ); +#/ + level thread clear_mature_blood(); + level thread round_end_monitor(); + + if ( !level.zombie_anim_intro ) + { + if ( isdefined( level._round_start_func ) ) + level thread [[ level._round_start_func ]](); + } + + level thread players_playing(); + disablegrenadesuicide(); + level.startinvulnerabletime = getdvarint( _hash_4E44E32D ); + + if ( !isdefined( level.music_override ) ) + level.music_override = 0; +} + +init_custom_ai_type() +{ + if ( isdefined( level.custom_ai_type ) ) + { + for ( i = 0; i < level.custom_ai_type.size; i++ ) + [[ level.custom_ai_type[i] ]](); + } +} + +zombiemode_melee_miss() +{ + if ( isdefined( self.enemy.curr_pay_turret ) ) + self.enemy dodamage( getdvarint( "ai_meleeDamage" ), self.origin, self, self, "none", "melee" ); +} + +player_track_ammo_count() +{ + self notify( "stop_ammo_tracking" ); + self endon( "disconnect" ); + self endon( "stop_ammo_tracking" ); + ammolowcount = 0; + ammooutcount = 0; + + while ( true ) + { + wait 0.5; + weap = self getcurrentweapon(); + + if ( !isdefined( weap ) || weap == "none" || !can_track_ammo( weap ) ) + continue; + + if ( self getammocount( weap ) > 5 || self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + ammooutcount = 0; + ammolowcount = 0; + continue; + } + + if ( self getammocount( weap ) > 0 ) + { + if ( ammolowcount < 1 ) + { + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "ammo_low" ); + ammolowcount++; + } + } + else if ( ammooutcount < 1 ) + { + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "ammo_out" ); + ammooutcount++; + } + + wait 20; + } +} + +can_track_ammo( weap ) +{ + if ( !isdefined( weap ) ) + return false; + + switch ( weap ) + { + case "zombie_tazer_flourish": + case "zombie_sickle_flourish": + case "zombie_knuckle_crack": + case "zombie_fists_zm": + case "zombie_builder_zm": + case "zombie_bowie_flourish": + case "time_bomb_zm": + case "time_bomb_detonator_zm": + case "tazer_knuckles_zm": + case "tazer_knuckles_upgraded_zm": + case "slowgun_zm": + case "slowgun_upgraded_zm": + case "screecher_arms_zm": + case "riotshield_zm": + case "none": + case "no_hands_zm": + case "lower_equip_gasmask_zm": + case "humangun_zm": + case "humangun_upgraded_zm": + case "equip_gasmask_zm": + case "equip_dieseldrone_zm": + case "death_throe_zm": + case "chalk_draw_zm": + case "alcatraz_shield_zm": + return false; + default: + if ( is_zombie_perk_bottle( weap ) || is_placeable_mine( weap ) || is_equipment( weap ) || issubstr( weap, "knife_ballistic_" ) || getsubstr( weap, 0, 3 ) == "gl_" || weaponfuellife( weap ) > 0 || weap == level.revive_tool ) + return false; + } + + return true; +} + +spawn_vo() +{ + wait 1; + players = get_players(); + + if ( players.size > 1 ) + { + player = random( players ); + index = maps\mp\zombies\_zm_weapons::get_player_index( player ); + player thread spawn_vo_player( index, players.size ); + } +} + +spawn_vo_player( index, num ) +{ + sound = "plr_" + index + "_vox_" + num + "play"; + self playsoundwithnotify( sound, "sound_done" ); + + self waittill( "sound_done" ); +} + +precache_shaders() +{ + precacheshader( "hud_chalk_1" ); + precacheshader( "hud_chalk_2" ); + precacheshader( "hud_chalk_3" ); + precacheshader( "hud_chalk_4" ); + precacheshader( "hud_chalk_5" ); + precacheshader( "zom_icon_community_pot" ); + precacheshader( "zom_icon_community_pot_strip" ); + precacheshader( "zom_icon_player_life" ); + precacheshader( "waypoint_revive" ); +} + +precache_models() +{ + precachemodel( "p_zom_win_bars_01_vert04_bend_180" ); + precachemodel( "p_zom_win_bars_01_vert01_bend_180" ); + precachemodel( "p_zom_win_bars_01_vert04_bend" ); + precachemodel( "p_zom_win_bars_01_vert01_bend" ); + precachemodel( "p_zom_win_cell_bars_01_vert04_bent" ); + precachemodel( "p_zom_win_cell_bars_01_vert01_bent" ); + precachemodel( "tag_origin" ); + precachemodel( "zombie_z_money_icon" ); + + if ( isdefined( level.precachecustomcharacters ) ) + self [[ level.precachecustomcharacters ]](); +} + +init_shellshocks() +{ + level.player_killed_shellshock = "zombie_death"; + precacheshellshock( level.player_killed_shellshock ); + precacheshellshock( "pain" ); + precacheshellshock( "explosion" ); +} + +init_strings() +{ + precachestring( &"ZOMBIE_WEAPONCOSTAMMO" ); + precachestring( &"ZOMBIE_ROUND" ); + precachestring( &"SCRIPT_PLUS" ); + precachestring( &"ZOMBIE_GAME_OVER" ); + precachestring( &"ZOMBIE_SURVIVED_ROUND" ); + precachestring( &"ZOMBIE_SURVIVED_ROUNDS" ); + precachestring( &"ZOMBIE_SURVIVED_NOMANS" ); + precachestring( &"ZOMBIE_EXTRA_LIFE" ); + add_zombie_hint( "undefined", &"ZOMBIE_UNDEFINED" ); + add_zombie_hint( "default_treasure_chest", &"ZOMBIE_RANDOM_WEAPON_COST" ); + add_zombie_hint( "default_treasure_chest_950", &"ZOMBIE_RANDOM_WEAPON_950" ); + add_zombie_hint( "powerup_fire_sale_cost", &"ZOMBIE_FIRE_SALE_COST" ); + add_zombie_hint( "default_buy_barrier_piece_10", &"ZOMBIE_BUTTON_BUY_BACK_BARRIER_10" ); + add_zombie_hint( "default_buy_barrier_piece_20", &"ZOMBIE_BUTTON_BUY_BACK_BARRIER_20" ); + add_zombie_hint( "default_buy_barrier_piece_50", &"ZOMBIE_BUTTON_BUY_BACK_BARRIER_50" ); + add_zombie_hint( "default_buy_barrier_piece_100", &"ZOMBIE_BUTTON_BUY_BACK_BARRIER_100" ); + add_zombie_hint( "default_reward_barrier_piece", &"ZOMBIE_BUTTON_REWARD_BARRIER" ); + add_zombie_hint( "default_reward_barrier_piece_10", &"ZOMBIE_BUTTON_REWARD_BARRIER_10" ); + add_zombie_hint( "default_reward_barrier_piece_20", &"ZOMBIE_BUTTON_REWARD_BARRIER_20" ); + add_zombie_hint( "default_reward_barrier_piece_30", &"ZOMBIE_BUTTON_REWARD_BARRIER_30" ); + add_zombie_hint( "default_reward_barrier_piece_40", &"ZOMBIE_BUTTON_REWARD_BARRIER_40" ); + add_zombie_hint( "default_reward_barrier_piece_50", &"ZOMBIE_BUTTON_REWARD_BARRIER_50" ); + add_zombie_hint( "default_buy_debris", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_COST" ); + add_zombie_hint( "default_buy_debris_100", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_100" ); + add_zombie_hint( "default_buy_debris_200", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_200" ); + add_zombie_hint( "default_buy_debris_250", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_250" ); + add_zombie_hint( "default_buy_debris_500", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_500" ); + add_zombie_hint( "default_buy_debris_750", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_750" ); + add_zombie_hint( "default_buy_debris_1000", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_1000" ); + add_zombie_hint( "default_buy_debris_1250", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_1250" ); + add_zombie_hint( "default_buy_debris_1500", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_1500" ); + add_zombie_hint( "default_buy_debris_1750", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_1750" ); + add_zombie_hint( "default_buy_debris_2000", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_2000" ); + add_zombie_hint( "default_buy_debris_3000", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_3000" ); + add_zombie_hint( "default_buy_door", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_COST" ); + add_zombie_hint( "default_buy_door_close", &"ZOMBIE_BUTTON_BUY_CLOSE_DOOR" ); + add_zombie_hint( "default_buy_door_100", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_100" ); + add_zombie_hint( "default_buy_door_200", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_200" ); + add_zombie_hint( "default_buy_door_250", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_250" ); + add_zombie_hint( "default_buy_door_500", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_500" ); + add_zombie_hint( "default_buy_door_750", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_750" ); + add_zombie_hint( "default_buy_door_1000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_1000" ); + add_zombie_hint( "default_buy_door_1250", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_1250" ); + add_zombie_hint( "default_buy_door_1500", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_1500" ); + add_zombie_hint( "default_buy_door_1750", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_1750" ); + add_zombie_hint( "default_buy_door_2000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_2000" ); + add_zombie_hint( "default_buy_door_2500", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_2500" ); + add_zombie_hint( "default_buy_door_3000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_3000" ); + add_zombie_hint( "default_buy_door_4000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_4000" ); + add_zombie_hint( "default_buy_door_8000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_8000" ); + add_zombie_hint( "default_buy_door_16000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_16000" ); + add_zombie_hint( "default_buy_area", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_COST" ); + add_zombie_hint( "default_buy_area_100", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_100" ); + add_zombie_hint( "default_buy_area_200", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_200" ); + add_zombie_hint( "default_buy_area_250", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_250" ); + add_zombie_hint( "default_buy_area_500", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_500" ); + add_zombie_hint( "default_buy_area_750", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_750" ); + add_zombie_hint( "default_buy_area_1000", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_1000" ); + add_zombie_hint( "default_buy_area_1250", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_1250" ); + add_zombie_hint( "default_buy_area_1500", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_1500" ); + add_zombie_hint( "default_buy_area_1750", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_1750" ); + add_zombie_hint( "default_buy_area_2000", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_2000" ); +} + +init_sounds() +{ + add_sound( "end_of_round", "mus_zmb_round_over" ); + add_sound( "end_of_game", "mus_zmb_game_over" ); + add_sound( "chalk_one_up", "mus_zmb_chalk" ); + add_sound( "purchase", "zmb_cha_ching" ); + add_sound( "no_purchase", "zmb_no_cha_ching" ); + add_sound( "playerzombie_usebutton_sound", "zmb_zombie_vocals_attack" ); + add_sound( "playerzombie_attackbutton_sound", "zmb_zombie_vocals_attack" ); + add_sound( "playerzombie_adsbutton_sound", "zmb_zombie_vocals_attack" ); + add_sound( "zombie_head_gib", "zmb_zombie_head_gib" ); + add_sound( "rebuild_barrier_piece", "zmb_repair_boards" ); + add_sound( "rebuild_barrier_metal_piece", "zmb_metal_repair" ); + add_sound( "rebuild_barrier_hover", "zmb_boards_float" ); + add_sound( "debris_hover_loop", "zmb_couch_loop" ); + add_sound( "break_barrier_piece", "zmb_break_boards" ); + add_sound( "grab_metal_bar", "zmb_bar_pull" ); + add_sound( "break_metal_bar", "zmb_bar_break" ); + add_sound( "drop_metal_bar", "zmb_bar_drop" ); + add_sound( "blocker_end_move", "zmb_board_slam" ); + add_sound( "barrier_rebuild_slam", "zmb_board_slam" ); + add_sound( "bar_rebuild_slam", "zmb_bar_repair" ); + add_sound( "zmb_rock_fix", "zmb_break_rock_barrier_fix" ); + add_sound( "zmb_vent_fix", "evt_vent_slat_repair" ); + add_sound( "door_slide_open", "zmb_door_slide_open" ); + add_sound( "door_rotate_open", "zmb_door_slide_open" ); + add_sound( "debris_move", "zmb_weap_wall" ); + add_sound( "open_chest", "zmb_lid_open" ); + add_sound( "music_chest", "zmb_music_box" ); + add_sound( "close_chest", "zmb_lid_close" ); + add_sound( "weapon_show", "zmb_weap_wall" ); + add_sound( "break_stone", "break_stone" ); +} + +init_levelvars() +{ + level.is_zombie_level = 1; + level.laststandpistol = "m1911_zm"; + level.default_laststandpistol = "m1911_zm"; + level.default_solo_laststandpistol = "m1911_upgraded_zm"; + level.start_weapon = "m1911_zm"; + level.first_round = 1; + level.start_round = getgametypesetting( "startRound" ); + level.round_number = level.start_round; + level.enable_magic = getgametypesetting( "magic" ); + level.headshots_only = getgametypesetting( "headshotsonly" ); + level.player_starting_points = level.round_number * 500; + level.round_start_time = 0; + level.pro_tips_start_time = 0; + level.intermission = 0; + level.dog_intermission = 0; + level.zombie_total = 0; + level.total_zombies_killed = 0; + level.hudelem_count = 0; + level.zombie_spawn_locations = []; + level.zombie_rise_spawners = []; + level.current_zombie_array = []; + level.current_zombie_count = 0; + level.zombie_total_subtract = 0; + level.destructible_callbacks = []; + level.zombie_vars = []; + + foreach ( team in level.teams ) + level.zombie_vars[team] = []; + + difficulty = 1; + column = int( difficulty ) + 1; + set_zombie_var( "zombie_health_increase", 100, 0, column ); + set_zombie_var( "zombie_health_increase_multiplier", 0.1, 1, column ); + set_zombie_var( "zombie_health_start", 150, 0, column ); + set_zombie_var( "zombie_spawn_delay", 2.0, 1, column ); + set_zombie_var( "zombie_new_runner_interval", 10, 0, column ); + set_zombie_var( "zombie_move_speed_multiplier", 8, 0, column ); + set_zombie_var( "zombie_move_speed_multiplier_easy", 2, 0, column ); + set_zombie_var( "zombie_max_ai", 24, 0, column ); + set_zombie_var( "zombie_ai_per_player", 6, 0, column ); + set_zombie_var( "below_world_check", -1000 ); + set_zombie_var( "spectators_respawn", 1 ); + set_zombie_var( "zombie_use_failsafe", 1 ); + set_zombie_var( "zombie_between_round_time", 10 ); + set_zombie_var( "zombie_intermission_time", 15 ); + set_zombie_var( "game_start_delay", 0, 0, column ); + set_zombie_var( "penalty_no_revive", 0.1, 1, column ); + set_zombie_var( "penalty_died", 0.0, 1, column ); + set_zombie_var( "penalty_downed", 0.05, 1, column ); + set_zombie_var( "starting_lives", 1, 0, column ); + set_zombie_var( "zombie_score_kill_4player", 50 ); + set_zombie_var( "zombie_score_kill_3player", 50 ); + set_zombie_var( "zombie_score_kill_2player", 50 ); + set_zombie_var( "zombie_score_kill_1player", 50 ); + set_zombie_var( "zombie_score_kill_4p_team", 30 ); + set_zombie_var( "zombie_score_kill_3p_team", 35 ); + set_zombie_var( "zombie_score_kill_2p_team", 45 ); + set_zombie_var( "zombie_score_kill_1p_team", 0 ); + set_zombie_var( "zombie_score_damage_normal", 10 ); + set_zombie_var( "zombie_score_damage_light", 10 ); + set_zombie_var( "zombie_score_bonus_melee", 80 ); + set_zombie_var( "zombie_score_bonus_head", 50 ); + set_zombie_var( "zombie_score_bonus_neck", 20 ); + set_zombie_var( "zombie_score_bonus_torso", 10 ); + set_zombie_var( "zombie_score_bonus_burn", 10 ); + set_zombie_var( "zombie_flame_dmg_point_delay", 500 ); + set_zombie_var( "zombify_player", 0 ); + + if ( issplitscreen() ) + set_zombie_var( "zombie_timer_offset", 280 ); + + level thread init_player_levelvars(); + level.gamedifficulty = getgametypesetting( "zmDifficulty" ); + + if ( level.gamedifficulty == 0 ) + level.zombie_move_speed = level.round_number * level.zombie_vars["zombie_move_speed_multiplier_easy"]; + else + level.zombie_move_speed = level.round_number * level.zombie_vars["zombie_move_speed_multiplier"]; + + if ( level.round_number == 1 ) + level.zombie_move_speed = 1; + else + { + for ( i = 1; i <= level.round_number; i++ ) + { + timer = level.zombie_vars["zombie_spawn_delay"]; + + if ( timer > 0.08 ) + { + level.zombie_vars["zombie_spawn_delay"] = timer * 0.95; + continue; + } + + if ( timer < 0.08 ) + level.zombie_vars["zombie_spawn_delay"] = 0.08; + } + } + + level.speed_change_max = 0; + level.speed_change_num = 0; +} + +init_player_levelvars() +{ + flag_wait( "start_zombie_round_logic" ); + difficulty = 1; + column = int( difficulty ) + 1; + + for ( i = 0; i < 8; i++ ) + { + points = 500; + + if ( i > 3 ) + points = 3000; + + points = set_zombie_var( "zombie_score_start_" + ( i + 1 ) + "p", points, 0, column ); + } +} + +init_dvars() +{ + if ( getdvar( "zombie_debug" ) == "" ) + setdvar( "zombie_debug", "0" ); + + if ( getdvar( "scr_zm_enable_bots" ) == "" ) + setdvar( "scr_zm_enable_bots", "0" ); + + if ( getdvar( _hash_FA81816F ) == "" ) + setdvar( "zombie_cheat", "0" ); + + if ( level.script != "zombie_cod5_prototype" ) + setdvar( "magic_chest_movable", "1" ); + + setdvar( "revive_trigger_radius", "75" ); + setdvar( "player_lastStandBleedoutTime", "45" ); + setdvar( "scr_deleteexplosivesonspawn", "0" ); +} + +init_function_overrides() +{ + level.callbackplayerdamage = ::callback_playerdamage; + level.overrideplayerdamage = ::player_damage_override; + level.callbackplayerkilled = ::player_killed_override; + level.playerlaststand_func = ::player_laststand; + level.callbackplayerlaststand = ::callback_playerlaststand; + level.prevent_player_damage = ::player_prevent_damage; + level.callbackactorkilled = ::actor_killed_override; + level.callbackactordamage = ::actor_damage_override_wrapper; + level.custom_introscreen = ::zombie_intro_screen; + level.custom_intermission = ::player_intermission; + level.global_damage_func = maps\mp\zombies\_zm_spawner::zombie_damage; + level.global_damage_func_ads = maps\mp\zombies\_zm_spawner::zombie_damage_ads; + level.reset_clientdvars = ::onplayerconnect_clientdvars; + level.zombie_last_stand = ::last_stand_pistol_swap; + level.zombie_last_stand_pistol_memory = ::last_stand_save_pistol_ammo; + level.zombie_last_stand_ammo_return = ::last_stand_restore_pistol_ammo; + level.player_becomes_zombie = ::zombify_player; + level.validate_enemy_path_length = ::default_validate_enemy_path_length; +} + +callback_playerlaststand( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + self endon( "disconnect" ); + [[ maps\mp\zombies\_zm_laststand::playerlaststand ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); +} + +codecallback_destructibleevent( event, param1, param2, param3 ) +{ + if ( event == "broken" ) + { + notify_type = param1; + attacker = param2; + weapon = param3; + + if ( isdefined( level.destructible_callbacks[notify_type] ) ) + self thread [[ level.destructible_callbacks[notify_type] ]]( notify_type, attacker ); + + self notify( event, notify_type, attacker ); + } + else if ( event == "breakafter" ) + { + piece = param1; + time = param2; + damage = param3; + self thread breakafter( time, damage, piece ); + } +} + +breakafter( time, damage, piece ) +{ + self notify( "breakafter" ); + self endon( "breakafter" ); + wait( time ); + self dodamage( damage, self.origin, undefined, undefined ); +} + +callback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ +/# + println( "ZM Callback_PlayerDamage" + idamage + "\\n" ); +#/ + if ( isdefined( eattacker ) && isplayer( eattacker ) && eattacker.sessionteam == self.sessionteam && !eattacker hasperk( "specialty_noname" ) && !( isdefined( self.is_zombie ) && self.is_zombie ) ) + { + self process_friendly_fire_callbacks( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + + if ( self != eattacker ) + { +/# + println( "Exiting - players can't hurt each other." ); +#/ + return; + } + else if ( smeansofdeath != "MOD_GRENADE_SPLASH" && smeansofdeath != "MOD_GRENADE" && smeansofdeath != "MOD_EXPLOSIVE" && smeansofdeath != "MOD_PROJECTILE" && smeansofdeath != "MOD_PROJECTILE_SPLASH" && smeansofdeath != "MOD_BURNED" && smeansofdeath != "MOD_SUICIDE" ) + { +/# + println( "Exiting - damage type verbotten." ); +#/ + return; + } + } + + if ( isdefined( level.pers_upgrade_insta_kill ) && level.pers_upgrade_insta_kill ) + self maps\mp\zombies\_zm_pers_upgrades_functions::pers_insta_kill_melee_swipe( smeansofdeath, eattacker ); + + if ( isdefined( self.overrideplayerdamage ) ) + idamage = self [[ self.overrideplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); + else if ( isdefined( level.overrideplayerdamage ) ) + idamage = self [[ level.overrideplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); + + assert( isdefined( idamage ), "You must return a value from a damage override function." ); + + if ( isdefined( self.magic_bullet_shield ) && self.magic_bullet_shield ) + { + maxhealth = self.maxhealth; + self.health += idamage; + self.maxhealth = maxhealth; + } + + if ( isdefined( self.divetoprone ) && self.divetoprone == 1 ) + { + if ( smeansofdeath == "MOD_GRENADE_SPLASH" ) + { + dist = distance2d( vpoint, self.origin ); + + if ( dist > 32 ) + { + dot_product = vectordot( anglestoforward( self.angles ), vdir ); + + if ( dot_product > 0 ) + idamage = int( idamage * 0.5 ); + } + } + } +/# + println( "CB PD" ); +#/ + if ( isdefined( level.prevent_player_damage ) ) + { + if ( self [[ level.prevent_player_damage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) ) + return; + } + + idflags |= level.idflags_no_knockback; + + if ( idamage > 0 && shitloc == "riotshield" ) + shitloc = "torso_upper"; +/# + println( "Finishplayerdamage wrapper." ); +#/ + self finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); +} + +finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + self finishplayerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); +} + +register_player_friendly_fire_callback( callback ) +{ + if ( !isdefined( level.player_friendly_fire_callbacks ) ) + level.player_friendly_fire_callbacks = []; + + level.player_friendly_fire_callbacks[level.player_friendly_fire_callbacks.size] = callback; +} + +process_friendly_fire_callbacks( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + if ( isdefined( level.player_friendly_fire_callbacks ) ) + { + foreach ( callback in level.player_friendly_fire_callbacks ) + self [[ callback ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + } +} + +init_flags() +{ + flag_init( "solo_game" ); + flag_init( "start_zombie_round_logic" ); + flag_init( "start_encounters_match_logic" ); + flag_init( "spawn_point_override" ); + flag_init( "power_on" ); + flag_init( "crawler_round" ); + flag_init( "spawn_zombies", 1 ); + flag_init( "dog_round" ); + flag_init( "begin_spawning" ); + flag_init( "end_round_wait" ); + flag_init( "wait_and_revive" ); + flag_init( "instant_revive" ); + flag_init( "initial_blackscreen_passed" ); + flag_init( "initial_players_connected" ); +} + +init_client_flags() +{ + if ( isdefined( level.use_clientside_board_fx ) && level.use_clientside_board_fx ) + { + level._zombie_scriptmover_flag_board_horizontal_fx = 14; + level._zombie_scriptmover_flag_board_vertical_fx = 13; + } + + if ( isdefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) + level._zombie_scriptmover_flag_rock_fx = 12; + + level._zombie_player_flag_cloak_weapon = 14; + + if ( !( isdefined( level.disable_deadshot_clientfield ) && level.disable_deadshot_clientfield ) ) + registerclientfield( "toplayer", "deadshot_perk", 1, 1, "int" ); + + registerclientfield( "actor", "zombie_riser_fx", 1, 1, "int" ); + + if ( !( isdefined( level._no_water_risers ) && level._no_water_risers ) ) + registerclientfield( "actor", "zombie_riser_fx_water", 1, 1, "int" ); + + if ( isdefined( level._foliage_risers ) && level._foliage_risers ) + registerclientfield( "actor", "zombie_riser_fx_foliage", 12000, 1, "int" ); + + if ( isdefined( level.risers_use_low_gravity_fx ) && level.risers_use_low_gravity_fx ) + registerclientfield( "actor", "zombie_riser_fx_lowg", 1, 1, "int" ); +} + +init_fx() +{ + level.createfx_callback_thread = ::delete_in_createfx; + level._effect["wood_chunk_destory"] = loadfx( "impacts/fx_large_woodhit" ); + level._effect["fx_zombie_bar_break"] = loadfx( "maps/zombie/fx_zombie_bar_break" ); + level._effect["fx_zombie_bar_break_lite"] = loadfx( "maps/zombie/fx_zombie_bar_break_lite" ); + + if ( !( isdefined( level.fx_exclude_edge_fog ) && level.fx_exclude_edge_fog ) ) + level._effect["edge_fog"] = loadfx( "maps/zombie/fx_fog_zombie_amb" ); + + level._effect["chest_light"] = loadfx( "maps/zombie/fx_zmb_tranzit_marker_glow" ); + + if ( !( isdefined( level.fx_exclude_default_eye_glow ) && level.fx_exclude_default_eye_glow ) ) + level._effect["eye_glow"] = loadfx( "misc/fx_zombie_eye_single" ); + + level._effect["headshot"] = loadfx( "impacts/fx_flesh_hit" ); + level._effect["headshot_nochunks"] = loadfx( "misc/fx_zombie_bloodsplat" ); + level._effect["bloodspurt"] = loadfx( "misc/fx_zombie_bloodspurt" ); + + if ( !( isdefined( level.fx_exclude_tesla_head_light ) && level.fx_exclude_tesla_head_light ) ) + level._effect["tesla_head_light"] = loadfx( "maps/zombie/fx_zombie_tesla_neck_spurt" ); + + level._effect["zombie_guts_explosion"] = loadfx( "maps/zombie/fx_zmb_tranzit_torso_explo" ); + level._effect["rise_burst_water"] = loadfx( "maps/zombie/fx_mp_zombie_hand_dirt_burst" ); + level._effect["rise_billow_water"] = loadfx( "maps/zombie/fx_mp_zombie_body_dirt_billowing" ); + level._effect["rise_dust_water"] = loadfx( "maps/zombie/fx_mp_zombie_body_dust_falling" ); + level._effect["rise_burst"] = loadfx( "maps/zombie/fx_mp_zombie_hand_dirt_burst" ); + level._effect["rise_billow"] = loadfx( "maps/zombie/fx_mp_zombie_body_dirt_billowing" ); + level._effect["rise_dust"] = loadfx( "maps/zombie/fx_mp_zombie_body_dust_falling" ); + level._effect["fall_burst"] = loadfx( "maps/zombie/fx_mp_zombie_hand_dirt_burst" ); + level._effect["fall_billow"] = loadfx( "maps/zombie/fx_mp_zombie_body_dirt_billowing" ); + level._effect["fall_dust"] = loadfx( "maps/zombie/fx_mp_zombie_body_dust_falling" ); + level._effect["character_fire_death_sm"] = loadfx( "env/fire/fx_fire_zombie_md" ); + level._effect["character_fire_death_torso"] = loadfx( "env/fire/fx_fire_zombie_torso" ); + + if ( !( isdefined( level.fx_exclude_default_explosion ) && level.fx_exclude_default_explosion ) ) + level._effect["def_explosion"] = loadfx( "explosions/fx_default_explosion" ); + + if ( !( isdefined( level._uses_default_wallbuy_fx ) && !level._uses_default_wallbuy_fx ) ) + { + level._effect["870mcs_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_870mcs" ); + level._effect["ak74u_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_ak74u" ); + level._effect["beretta93r_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_berreta93r" ); + level._effect["bowie_knife_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_bowie" ); + level._effect["claymore_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_claymore" ); + level._effect["m14_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_m14" ); + level._effect["m16_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_m16" ); + level._effect["mp5k_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_mp5k" ); + level._effect["rottweil72_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_olympia" ); + } + + if ( !( isdefined( level._uses_sticky_grenades ) && !level._uses_sticky_grenades ) ) + { + if ( !( isdefined( level.disable_fx_zmb_wall_buy_semtex ) && level.disable_fx_zmb_wall_buy_semtex ) ) + level._effect["sticky_grenade_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_semtex" ); + } + + if ( !( isdefined( level._uses_taser_knuckles ) && !level._uses_taser_knuckles ) ) + level._effect["tazer_knuckles_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_taseknuck" ); + + if ( isdefined( level.buildable_wallbuy_weapons ) ) + level._effect["dynamic_wallbuy_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_question" ); + + if ( !( isdefined( level.disable_fx_upgrade_aquired ) && level.disable_fx_upgrade_aquired ) ) + level._effect["upgrade_aquired"] = loadfx( "maps/zombie/fx_zmb_tanzit_upgrade" ); +} + +zombie_intro_screen( string1, string2, string3, string4, string5 ) +{ + flag_wait( "start_zombie_round_logic" ); +} + +players_playing() +{ + players = get_players(); + level.players_playing = players.size; + wait 20; + players = get_players(); + level.players_playing = players.size; +} + +onplayerconnect_clientdvars() +{ + self setclientcompass( 0 ); + self setclientthirdperson( 0 ); + self resetfov(); + self setclientthirdpersonangle( 0 ); + self setclientammocounterhide( 1 ); + self setclientminiscoreboardhide( 1 ); + self setclienthudhardcore( 0 ); + self setclientplayerpushamount( 1 ); + self setdepthoffield( 0, 0, 512, 4000, 4, 0 ); + self setclientaimlockonpitchstrength( 0.0 ); + self maps\mp\zombies\_zm_laststand::player_getup_setup(); +} + +checkforalldead( excluded_player ) +{ + players = get_players(); + count = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( excluded_player ) && excluded_player == players[i] ) + continue; + + if ( !players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( players[i].sessionstate == "spectator" ) ) + count++; + } + + if ( count == 0 && !( isdefined( level.no_end_game_check ) && level.no_end_game_check ) ) + level notify( "end_game" ); +} + +onplayerspawned() +{ + self endon( "disconnect" ); + self notify( "stop_onPlayerSpawned" ); + self endon( "stop_onPlayerSpawned" ); + + for (;;) + { + self waittill( "spawned_player" ); + + if ( !( isdefined( level.host_ended_game ) && level.host_ended_game ) ) + { + self freezecontrols( 0 ); +/# + println( " Unfreeze controls 7" ); +#/ + } + + self.hits = 0; + self init_player_offhand_weapons(); + lethal_grenade = self get_player_lethal_grenade(); + + if ( !self hasweapon( lethal_grenade ) ) + { + self giveweapon( lethal_grenade ); + self setweaponammoclip( lethal_grenade, 0 ); + } + + self recordplayerrevivezombies( self ); +/# + if ( getdvarint( _hash_FA81816F ) >= 1 && getdvarint( _hash_FA81816F ) <= 3 ) + self enableinvulnerability(); +#/ + self setactionslot( 3, "altMode" ); + self playerknockback( 0 ); + self setclientthirdperson( 0 ); + self resetfov(); + self setclientthirdpersonangle( 0 ); + self setdepthoffield( 0, 0, 512, 4000, 4, 0 ); + self cameraactivate( 0 ); + self.num_perks = 0; + self.on_lander_last_stand = undefined; + self setblur( 0, 0.1 ); + self.zmbdialogqueue = []; + self.zmbdialogactive = 0; + self.zmbdialoggroups = []; + self.zmbdialoggroup = ""; + + if ( isdefined( level.player_out_of_playable_area_monitor ) && level.player_out_of_playable_area_monitor ) + self thread player_out_of_playable_area_monitor(); + + if ( isdefined( level.player_too_many_weapons_monitor ) && level.player_too_many_weapons_monitor ) + self thread [[ level.player_too_many_weapons_monitor_func ]](); + + if ( isdefined( level.player_too_many_players_check ) && level.player_too_many_players_check ) + level thread [[ level.player_too_many_players_check_func ]](); + + self.disabled_perks = []; + + if ( isdefined( self.player_initialized ) ) + { + if ( self.player_initialized == 0 ) + { + self.player_initialized = 1; + self giveweapon( self get_player_lethal_grenade() ); + self setweaponammoclip( self get_player_lethal_grenade(), 0 ); + self setclientammocounterhide( 0 ); + self setclientminiscoreboardhide( 0 ); + self.is_drinking = 0; + self thread player_zombie_breadcrumb(); + self thread player_monitor_travel_dist(); + self thread player_monitor_time_played(); + + if ( isdefined( level.custom_player_track_ammo_count ) ) + self thread [[ level.custom_player_track_ammo_count ]](); + else + self thread player_track_ammo_count(); + + self thread shock_onpain(); + self thread player_grenade_watcher(); + self maps\mp\zombies\_zm_laststand::revive_hud_create(); + + if ( isdefined( level.zm_gamemodule_spawn_func ) ) + self thread [[ level.zm_gamemodule_spawn_func ]](); + + self thread player_spawn_protection(); + + if ( !isdefined( self.lives ) ) + self.lives = 0; + } + } + } +} + +player_spawn_protection() +{ + self endon( "disconnect" ); + x = 0; + + while ( x < 60 ) + { + self.ignoreme = 1; + x++; + wait 0.05; + } + + self.ignoreme = 0; +} + +spawn_life_brush( origin, radius, height ) +{ + life_brush = spawn( "trigger_radius", origin, 0, radius, height ); + life_brush.script_noteworthy = "life_brush"; + return life_brush; +} + +in_life_brush() +{ + life_brushes = getentarray( "life_brush", "script_noteworthy" ); + + if ( !isdefined( life_brushes ) ) + return false; + + for ( i = 0; i < life_brushes.size; i++ ) + { + if ( self istouching( life_brushes[i] ) ) + return true; + } + + return false; +} + +spawn_kill_brush( origin, radius, height ) +{ + kill_brush = spawn( "trigger_radius", origin, 0, radius, height ); + kill_brush.script_noteworthy = "kill_brush"; + return kill_brush; +} + +in_kill_brush() +{ + kill_brushes = getentarray( "kill_brush", "script_noteworthy" ); + + if ( !isdefined( kill_brushes ) ) + return false; + + for ( i = 0; i < kill_brushes.size; i++ ) + { + if ( self istouching( kill_brushes[i] ) ) + return true; + } + + return false; +} + +in_enabled_playable_area() +{ + playable_area = getentarray( "player_volume", "script_noteworthy" ); + + if ( !isdefined( playable_area ) ) + return false; + + for ( i = 0; i < playable_area.size; i++ ) + { + if ( maps\mp\zombies\_zm_zonemgr::zone_is_enabled( playable_area[i].targetname ) && self istouching( playable_area[i] ) ) + return true; + } + + return false; +} + +get_player_out_of_playable_area_monitor_wait_time() +{ +/# + if ( isdefined( level.check_kill_thread_every_frame ) && level.check_kill_thread_every_frame ) + return 0.05; +#/ + return 3; +} + +player_out_of_playable_area_monitor() +{ + self notify( "stop_player_out_of_playable_area_monitor" ); + self endon( "stop_player_out_of_playable_area_monitor" ); + self endon( "disconnect" ); + level endon( "end_game" ); + + while ( !isdefined( self.characterindex ) ) + wait 0.05; + + wait( 0.15 * self.characterindex ); + + while ( true ) + { + if ( self.sessionstate == "spectator" ) + { + wait( get_player_out_of_playable_area_monitor_wait_time() ); + continue; + } + + if ( is_true( level.hostmigration_occured ) ) + { + wait( get_player_out_of_playable_area_monitor_wait_time() ); + continue; + } + + if ( !self in_life_brush() && ( self in_kill_brush() || !self in_enabled_playable_area() ) ) + { + if ( !isdefined( level.player_out_of_playable_area_monitor_callback ) || self [[ level.player_out_of_playable_area_monitor_callback ]]() ) + { +/# + if ( isdefined( level.kill_thread_test_mode ) && level.kill_thread_test_mode ) + { + iprintlnbold( "out of playable" ); + wait( get_player_out_of_playable_area_monitor_wait_time() ); + continue; + } + + if ( self isinmovemode( "ufo", "noclip" ) || isdefined( level.disable_kill_thread ) && level.disable_kill_thread || getdvarint( _hash_FA81816F ) > 0 ) + { + wait( get_player_out_of_playable_area_monitor_wait_time() ); + continue; + } +#/ + self maps\mp\zombies\_zm_stats::increment_map_cheat_stat( "cheat_out_of_playable" ); + self maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_out_of_playable", 0 ); + self maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); + self playlocalsound( level.zmb_laugh_alias ); + wait 0.5; + + if ( get_players().size == 1 && flag( "solo_game" ) && ( isdefined( self.waiting_to_revive ) && self.waiting_to_revive ) ) + level notify( "end_game" ); + else + { + self disableinvulnerability(); + self.lives = 0; + self dodamage( self.health + 1000, self.origin ); + self.bleedout_time = 0; + } + } + } + + wait( get_player_out_of_playable_area_monitor_wait_time() ); + } +} + +get_player_too_many_weapons_monitor_wait_time() +{ + return 3; +} + +player_too_many_weapons_monitor_takeaway_simultaneous( primary_weapons_to_take ) +{ + self endon( "player_too_many_weapons_monitor_takeaway_sequence_done" ); + self waittill_any( "player_downed", "replace_weapon_powerup" ); + + for ( i = 0; i < primary_weapons_to_take.size; i++ ) + self takeweapon( primary_weapons_to_take[i] ); + + self maps\mp\zombies\_zm_score::minus_to_player_score( self.score ); + self give_start_weapon( 0 ); + + if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + self decrement_is_drinking(); + else if ( flag( "solo_game" ) ) + self.score_lost_when_downed = 0; + + self notify( "player_too_many_weapons_monitor_takeaway_sequence_done" ); +} + +player_too_many_weapons_monitor_takeaway_sequence( primary_weapons_to_take ) +{ + self thread player_too_many_weapons_monitor_takeaway_simultaneous( primary_weapons_to_take ); + self endon( "player_downed" ); + self endon( "replace_weapon_powerup" ); + self increment_is_drinking(); + score_decrement = round_up_to_ten( int( self.score / ( primary_weapons_to_take.size + 1 ) ) ); + + for ( i = 0; i < primary_weapons_to_take.size; i++ ) + { + self playlocalsound( level.zmb_laugh_alias ); + self switchtoweapon( primary_weapons_to_take[i] ); + self maps\mp\zombies\_zm_score::minus_to_player_score( score_decrement ); + wait 3; + self takeweapon( primary_weapons_to_take[i] ); + } + + self playlocalsound( level.zmb_laugh_alias ); + self maps\mp\zombies\_zm_score::minus_to_player_score( self.score ); + wait 1; + self give_start_weapon( 1 ); + self decrement_is_drinking(); + self notify( "player_too_many_weapons_monitor_takeaway_sequence_done" ); +} + +player_too_many_weapons_monitor() +{ + self notify( "stop_player_too_many_weapons_monitor" ); + self endon( "stop_player_too_many_weapons_monitor" ); + self endon( "disconnect" ); + level endon( "end_game" ); + scalar = self.characterindex; + + if ( !isdefined( scalar ) ) + scalar = self getentitynumber(); + + wait( 0.15 * scalar ); + + while ( true ) + { + if ( self has_powerup_weapon() || self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || self.sessionstate == "spectator" ) + { + wait( get_player_too_many_weapons_monitor_wait_time() ); + continue; + } +/# + if ( getdvarint( _hash_FA81816F ) > 0 ) + { + wait( get_player_too_many_weapons_monitor_wait_time() ); + continue; + } +#/ + weapon_limit = get_player_weapon_limit( self ); + primaryweapons = self getweaponslistprimaries(); + + if ( primaryweapons.size > weapon_limit ) + { + self maps\mp\zombies\_zm_weapons::take_fallback_weapon(); + primaryweapons = self getweaponslistprimaries(); + } + + primary_weapons_to_take = []; + + for ( i = 0; i < primaryweapons.size; i++ ) + { + if ( maps\mp\zombies\_zm_weapons::is_weapon_included( primaryweapons[i] ) || maps\mp\zombies\_zm_weapons::is_weapon_upgraded( primaryweapons[i] ) ) + primary_weapons_to_take[primary_weapons_to_take.size] = primaryweapons[i]; + } + + if ( primary_weapons_to_take.size > weapon_limit ) + { + if ( !isdefined( level.player_too_many_weapons_monitor_callback ) || self [[ level.player_too_many_weapons_monitor_callback ]]( primary_weapons_to_take ) ) + { + self maps\mp\zombies\_zm_stats::increment_map_cheat_stat( "cheat_too_many_weapons" ); + self maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_too_many_weapons", 0 ); + self maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); + self thread player_too_many_weapons_monitor_takeaway_sequence( primary_weapons_to_take ); + + self waittill( "player_too_many_weapons_monitor_takeaway_sequence_done" ); + } + } + + wait( get_player_too_many_weapons_monitor_wait_time() ); + } +} + +player_monitor_travel_dist() +{ + self endon( "disconnect" ); + self notify( "stop_player_monitor_travel_dist" ); + self endon( "stop_player_monitor_travel_dist" ); + + for ( prevpos = self.origin; 1; prevpos = self.origin ) + { + wait 0.1; + self.pers["distance_traveled"] += distance( self.origin, prevpos ); + } +} + +player_monitor_time_played() +{ + self endon( "disconnect" ); + self notify( "stop_player_monitor_time_played" ); + self endon( "stop_player_monitor_time_played" ); + flag_wait( "start_zombie_round_logic" ); + + for (;;) + { + wait 1.0; + maps\mp\zombies\_zm_stats::increment_client_stat( "time_played_total" ); + } +} + +reset_rampage_bookmark_kill_times() +{ + if ( !isdefined( self.rampage_bookmark_kill_times ) ) + { + self.rampage_bookmark_kill_times = []; + self.ignore_rampage_kill_times = 0; + } + + for ( i = 0; i < level.rampage_bookmark_kill_times_count; i++ ) + self.rampage_bookmark_kill_times[i] = 0; +} + +add_rampage_bookmark_kill_time() +{ + now = gettime(); + + if ( now <= self.ignore_rampage_kill_times ) + return; + + oldest_index = 0; + oldest_time = now + 1; + + for ( i = 0; i < level.rampage_bookmark_kill_times_count; i++ ) + { + if ( !self.rampage_bookmark_kill_times[i] ) + { + oldest_index = i; + break; + } + else if ( oldest_time > self.rampage_bookmark_kill_times[i] ) + { + oldest_index = i; + oldest_time = self.rampage_bookmark_kill_times[i]; + } + } + + self.rampage_bookmark_kill_times[oldest_index] = now; +} + +watch_rampage_bookmark() +{ + while ( true ) + { + wait 0.05; + waittillframeend; + now = gettime(); + oldest_allowed = now - level.rampage_bookmark_kill_times_msec; + players = get_players(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + { + player = players[player_index]; +/# + if ( isdefined( player.pers["isBot"] ) && player.pers["isBot"] ) + continue; +#/ + for ( time_index = 0; time_index < level.rampage_bookmark_kill_times_count; time_index++ ) + { + if ( !player.rampage_bookmark_kill_times[time_index] ) + break; + else if ( oldest_allowed > player.rampage_bookmark_kill_times[time_index] ) + { + player.rampage_bookmark_kill_times[time_index] = 0; + break; + } + } + + if ( time_index >= level.rampage_bookmark_kill_times_count ) + { + maps\mp\_demo::bookmark( "zm_player_rampage", gettime(), player ); + player reset_rampage_bookmark_kill_times(); + player.ignore_rampage_kill_times = now + level.rampage_bookmark_kill_times_delay; + } + } + } +} + +player_grenade_multiattack_bookmark_watcher( grenade ) +{ + self endon( "disconnect" ); + waittillframeend; + + if ( !isdefined( grenade ) ) + return; + + inflictorentnum = grenade getentitynumber(); + inflictorenttype = grenade getentitytype(); + inflictorbirthtime = 0; + + if ( isdefined( grenade.birthtime ) ) + inflictorbirthtime = grenade.birthtime; + + ret_val = grenade waittill_any_timeout( 15, "explode" ); + + if ( !isdefined( self ) || isdefined( ret_val ) && "timeout" == ret_val ) + return; + + self.grenade_multiattack_count = 0; + self.grenade_multiattack_ent = undefined; + waittillframeend; + + if ( !isdefined( self ) ) + return; + + count = level.grenade_multiattack_bookmark_count; + + if ( isdefined( grenade.grenade_multiattack_bookmark_count ) && grenade.grenade_multiattack_bookmark_count ) + count = grenade.grenade_multiattack_bookmark_count; + + bookmark_string = "zm_player_grenade_multiattack"; + + if ( isdefined( grenade.use_grenade_special_long_bookmark ) && grenade.use_grenade_special_long_bookmark ) + bookmark_string = "zm_player_grenade_special_long"; + else if ( isdefined( grenade.use_grenade_special_bookmark ) && grenade.use_grenade_special_bookmark ) + bookmark_string = "zm_player_grenade_special"; + + if ( count <= self.grenade_multiattack_count && isdefined( self.grenade_multiattack_ent ) ) + adddemobookmark( level.bookmark[bookmark_string], gettime(), self getentitynumber(), 255, 0, inflictorentnum, inflictorenttype, inflictorbirthtime, 0, self.grenade_multiattack_ent getentitynumber() ); + + self.grenade_multiattack_count = 0; +} + +player_grenade_watcher() +{ + self endon( "disconnect" ); + self notify( "stop_player_grenade_watcher" ); + self endon( "stop_player_grenade_watcher" ); + self.grenade_multiattack_count = 0; + + while ( true ) + { + self waittill( "grenade_fire", grenade, weapname ); + + if ( isdefined( grenade ) && isalive( grenade ) ) + grenade.team = self.team; + + self thread player_grenade_multiattack_bookmark_watcher( grenade ); + + if ( isdefined( level.grenade_watcher ) ) + self [[ level.grenade_watcher ]]( grenade, weapname ); + } +} + +player_prevent_damage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + if ( !isdefined( einflictor ) || !isdefined( eattacker ) ) + return false; + + if ( einflictor == self || eattacker == self ) + return false; + + if ( isdefined( einflictor ) && isdefined( einflictor.team ) ) + { + if ( !( isdefined( einflictor.damage_own_team ) && einflictor.damage_own_team ) ) + { + if ( einflictor.team == self.team ) + return true; + } + } + + return false; +} + +player_revive_monitor() +{ + self endon( "disconnect" ); + self notify( "stop_player_revive_monitor" ); + self endon( "stop_player_revive_monitor" ); + + while ( true ) + { + self waittill( "player_revived", reviver ); + + self playsoundtoplayer( "zmb_character_revived", self ); + + if ( isdefined( level.isresetting_grief ) && level.isresetting_grief ) + continue; + + bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "revived", self.origin ); + + if ( isdefined( reviver ) ) + { + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "revive_up" ); + points = self.score_lost_when_downed; +/# + println( "ZM >> LAST STAND - points = " + points ); +#/ + reviver maps\mp\zombies\_zm_score::player_add_points( "reviver", points ); + self.score_lost_when_downed = 0; + } + } +} + +laststand_giveback_player_perks() +{ + if ( isdefined( self.laststand_perks ) ) + { + lost_perk_index = int( -1 ); + + if ( self.laststand_perks.size > 1 ) + lost_perk_index = randomint( self.laststand_perks.size - 1 ); + + for ( i = 0; i < self.laststand_perks.size; i++ ) + { + if ( self hasperk( self.laststand_perks[i] ) ) + continue; + + if ( i == lost_perk_index ) + continue; + + maps\mp\zombies\_zm_perks::give_perk( self.laststand_perks[i] ); + } + } +} + +remote_revive_watch() +{ + self endon( "death" ); + self endon( "player_revived" ); + keep_checking = 1; + + while ( keep_checking ) + { + self waittill( "remote_revive", reviver ); + + if ( reviver.team == self.team ) + keep_checking = 0; + } + + self maps\mp\zombies\_zm_laststand::remote_revive( reviver ); +} + +remove_deadshot_bottle() +{ + wait 0.05; + + if ( isdefined( self.lastactiveweapon ) && self.lastactiveweapon == "zombie_perk_bottle_deadshot" ) + self.lastactiveweapon = "none"; +} + +take_additionalprimaryweapon() +{ + weapon_to_take = undefined; + + if ( isdefined( self._retain_perks ) && self._retain_perks || isdefined( self._retain_perks_array ) && ( isdefined( self._retain_perks_array["specialty_additionalprimaryweapon"] ) && self._retain_perks_array["specialty_additionalprimaryweapon"] ) ) + return weapon_to_take; + + primary_weapons_that_can_be_taken = []; + primaryweapons = self getweaponslistprimaries(); + + for ( i = 0; i < primaryweapons.size; i++ ) + { + if ( maps\mp\zombies\_zm_weapons::is_weapon_included( primaryweapons[i] ) || maps\mp\zombies\_zm_weapons::is_weapon_upgraded( primaryweapons[i] ) ) + primary_weapons_that_can_be_taken[primary_weapons_that_can_be_taken.size] = primaryweapons[i]; + } + + pwtcbt = primary_weapons_that_can_be_taken.size; + + while ( pwtcbt >= 3 ) + { + weapon_to_take = primary_weapons_that_can_be_taken[pwtcbt - 1]; + pwtcbt--; + + if ( weapon_to_take == self getcurrentweapon() ) + self switchtoweapon( primary_weapons_that_can_be_taken[0] ); + + self takeweapon( weapon_to_take ); + } + + return weapon_to_take; +} + +player_laststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ +/# + println( "ZM >> LAST STAND - player_laststand called" ); +#/ + b_alt_visionset = 0; + self allowjump( 0 ); + currweapon = self getcurrentweapon(); + statweapon = currweapon; + + if ( is_alt_weapon( statweapon ) ) + statweapon = weaponaltweaponname( statweapon ); + + self addweaponstat( statweapon, "deathsDuringUse", 1 ); + + if ( isdefined( self.hasperkspecialtytombstone ) && self.hasperkspecialtytombstone ) + self.laststand_perks = maps\mp\zombies\_zm_tombstone::tombstone_save_perks( self ); + + if ( isdefined( self.pers_upgrades_awarded["perk_lose"] ) && self.pers_upgrades_awarded["perk_lose"] ) + self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_perk_lose_save(); + + players = get_players(); + + if ( players.size == 1 && flag( "solo_game" ) ) + { + if ( self.lives > 0 && self hasperk( "specialty_quickrevive" ) ) + self thread wait_and_revive(); + } + + if ( self hasperk( "specialty_additionalprimaryweapon" ) ) + self.weapon_taken_by_losing_specialty_additionalprimaryweapon = take_additionalprimaryweapon(); + + if ( isdefined( self.hasperkspecialtytombstone ) && self.hasperkspecialtytombstone ) + { + self [[ level.tombstone_laststand_func ]](); + self thread [[ level.tombstone_spawn_func ]](); + self.hasperkspecialtytombstone = undefined; + self notify( "specialty_scavenger_stop" ); + } + + self clear_is_drinking(); + self thread remove_deadshot_bottle(); + self thread remote_revive_watch(); + self maps\mp\zombies\_zm_score::player_downed_penalty(); + self disableoffhandweapons(); + self thread last_stand_grenade_save_and_return(); + + if ( smeansofdeath != "MOD_SUICIDE" && smeansofdeath != "MOD_FALLING" ) + { + if ( !( isdefined( self.intermission ) && self.intermission ) ) + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "revive_down" ); + else if ( isdefined( level.custom_player_death_vo_func ) && !self [[ level.custom_player_death_vo_func ]]() ) + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "exert_death" ); + } + + bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "downed", self.origin ); + + if ( isdefined( level._zombie_minigun_powerup_last_stand_func ) ) + self thread [[ level._zombie_minigun_powerup_last_stand_func ]](); + + if ( isdefined( level._zombie_tesla_powerup_last_stand_func ) ) + self thread [[ level._zombie_tesla_powerup_last_stand_func ]](); + + if ( self hasperk( "specialty_grenadepulldeath" ) ) + { + b_alt_visionset = 1; + + if ( isdefined( level.custom_laststand_func ) ) + self thread [[ level.custom_laststand_func ]](); + } + + if ( isdefined( self.intermission ) && self.intermission ) + { + bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "died", self.origin ); + wait 0.5; + self stopsounds(); + + level waittill( "forever" ); + } + + if ( !b_alt_visionset ) + visionsetlaststand( "zombie_last_stand", 1 ); +} + +failsafe_revive_give_back_weapons( excluded_player ) +{ + for ( i = 0; i < 10; i++ ) + { + wait 0.05; + players = get_players(); + + foreach ( player in players ) + { + if ( player == excluded_player || !isdefined( player.reviveprogressbar ) || player maps\mp\zombies\_zm_laststand::is_reviving_any() ) + continue; +/# + iprintlnbold( "FAILSAFE CLEANING UP REVIVE HUD AND GUN" ); +#/ + player maps\mp\zombies\_zm_laststand::revive_give_back_weapons( "none" ); + + if ( isdefined( player.reviveprogressbar ) ) + player.reviveprogressbar maps\mp\gametypes_zm\_hud_util::destroyelem(); + + if ( isdefined( player.revivetexthud ) ) + player.revivetexthud destroy(); + } + } +} + +spawnspectator() +{ + self endon( "disconnect" ); + self endon( "spawned_spectator" ); + self notify( "spawned" ); + self notify( "end_respawn" ); + + if ( level.intermission ) + return; + + if ( isdefined( level.no_spectator ) && level.no_spectator ) + { + wait 3; + exitlevel(); + } + + self.is_zombie = 1; + level thread failsafe_revive_give_back_weapons( self ); + self notify( "zombified" ); + + if ( isdefined( self.revivetrigger ) ) + { + self.revivetrigger delete(); + self.revivetrigger = undefined; + } + + self.zombification_time = gettime(); + resettimeout(); + self stopshellshock(); + self stoprumble( "damage_heavy" ); + self.sessionstate = "spectator"; + self.spectatorclient = -1; + self.maxhealth = self.health; + self.shellshocked = 0; + self.inwater = 0; + self.friendlydamage = undefined; + self.hasspawned = 1; + self.spawntime = gettime(); + self.afk = 0; +/# + println( "*************************Zombie Spectator***" ); +#/ + self detachall(); + + if ( isdefined( level.custom_spectate_permissions ) ) + self [[ level.custom_spectate_permissions ]](); + else + self setspectatepermissions( 1 ); + + self thread spectator_thread(); + self spawn( self.origin, self.angles ); + self notify( "spawned_spectator" ); +} + +setspectatepermissions( ison ) +{ + self allowspectateteam( "allies", ison && self.team == "allies" ); + self allowspectateteam( "axis", ison && self.team == "axis" ); + self allowspectateteam( "freelook", 0 ); + self allowspectateteam( "none", 0 ); +} + +spectator_thread() +{ + self endon( "disconnect" ); + self endon( "spawned_player" ); +} + +spectator_toggle_3rd_person() +{ + self endon( "disconnect" ); + self endon( "spawned_player" ); + third_person = 1; + self set_third_person( 1 ); +} + +set_third_person( value ) +{ + if ( value ) + { + self setclientthirdperson( 1 ); + self setclientthirdpersonangle( 354 ); + self setdepthoffield( 0, 128, 512, 4000, 6, 1.8 ); + } + else + { + self setclientthirdperson( 0 ); + self setclientthirdpersonangle( 0 ); + self setdepthoffield( 0, 0, 512, 4000, 4, 0 ); + } + + self resetfov(); +} + +last_stand_revive() +{ + level endon( "between_round_over" ); + players = get_players(); + laststand_count = 0; + + foreach ( player in players ) + { + if ( !is_player_valid( player ) ) + laststand_count++; + } + + if ( laststand_count == players.size ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() && players[i].revivetrigger.beingrevived == 0 ) + players[i] maps\mp\zombies\_zm_laststand::auto_revive( players[i] ); + } + } +} + +last_stand_pistol_rank_init() +{ + level.pistol_values = []; + level.pistol_values[level.pistol_values.size] = "m1911_zm"; + level.pistol_values[level.pistol_values.size] = "c96_zm"; + level.pistol_values[level.pistol_values.size] = "cz75_zm"; + level.pistol_values[level.pistol_values.size] = "cz75dw_zm"; + level.pistol_values[level.pistol_values.size] = "kard_zm"; + level.pistol_values[level.pistol_values.size] = "fiveseven_zm"; + level.pistol_values[level.pistol_values.size] = "beretta93r_zm"; + level.pistol_values[level.pistol_values.size] = "beretta93r_extclip_zm"; + level.pistol_values[level.pistol_values.size] = "fivesevendw_zm"; + level.pistol_values[level.pistol_values.size] = "rnma_zm"; + level.pistol_values[level.pistol_values.size] = "python_zm"; + level.pistol_values[level.pistol_values.size] = "judge_zm"; + level.pistol_values[level.pistol_values.size] = "cz75_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "cz75dw_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "kard_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "fiveseven_upgraded_zm"; + level.pistol_value_solo_replace_below = level.pistol_values.size - 1; + level.pistol_values[level.pistol_values.size] = "m1911_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "c96_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "beretta93r_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "beretta93r_extclip_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "fivesevendw_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "rnma_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "python_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "judge_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "ray_gun_zm"; + level.pistol_values[level.pistol_values.size] = "raygun_mark2_zm"; + level.pistol_values[level.pistol_values.size] = "freezegun_zm"; + level.pistol_values[level.pistol_values.size] = "ray_gun_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "raygun_mark2_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "freezegun_upgraded_zm"; + level.pistol_values[level.pistol_values.size] = "microwavegundw_zm"; + level.pistol_values[level.pistol_values.size] = "microwavegundw_upgraded_zm"; +} + +last_stand_pistol_swap() +{ + if ( self has_powerup_weapon() ) + self.lastactiveweapon = "none"; + + if ( !self hasweapon( self.laststandpistol ) ) + self giveweapon( self.laststandpistol ); + + ammoclip = weaponclipsize( self.laststandpistol ); + doubleclip = ammoclip * 2; + + if ( isdefined( self._special_solo_pistol_swap ) && self._special_solo_pistol_swap || self.laststandpistol == level.default_solo_laststandpistol && !self.hadpistol ) + { + self._special_solo_pistol_swap = 0; + self.hadpistol = 0; + self setweaponammostock( self.laststandpistol, doubleclip ); + } + else if ( flag( "solo_game" ) && self.laststandpistol == level.default_solo_laststandpistol ) + self setweaponammostock( self.laststandpistol, doubleclip ); + else if ( self.laststandpistol == level.default_laststandpistol ) + self setweaponammostock( self.laststandpistol, doubleclip ); + else if ( self.laststandpistol == "ray_gun_zm" || self.laststandpistol == "ray_gun_upgraded_zm" ) + { + if ( self.stored_weapon_info[self.laststandpistol].total_amt >= ammoclip ) + { + self setweaponammoclip( self.laststandpistol, ammoclip ); + self.stored_weapon_info[self.laststandpistol].given_amt = ammoclip; + } + else + { + self setweaponammoclip( self.laststandpistol, self.stored_weapon_info[self.laststandpistol].total_amt ); + self.stored_weapon_info[self.laststandpistol].given_amt = self.stored_weapon_info[self.laststandpistol].total_amt; + } + + self setweaponammostock( self.laststandpistol, 0 ); + } + else if ( self.stored_weapon_info[self.laststandpistol].stock_amt >= doubleclip ) + { + self setweaponammostock( self.laststandpistol, doubleclip ); + self.stored_weapon_info[self.laststandpistol].given_amt = doubleclip + self.stored_weapon_info[self.laststandpistol].clip_amt + self.stored_weapon_info[self.laststandpistol].left_clip_amt; + } + else + { + self setweaponammostock( self.laststandpistol, self.stored_weapon_info[self.laststandpistol].stock_amt ); + self.stored_weapon_info[self.laststandpistol].given_amt = self.stored_weapon_info[self.laststandpistol].total_amt; + } + + self switchtoweapon( self.laststandpistol ); +} + +last_stand_best_pistol() +{ + pistol_array = []; + current_weapons = self getweaponslistprimaries(); + + for ( i = 0; i < current_weapons.size; i++ ) + { + class = weaponclass( current_weapons[i] ); + + if ( issubstr( current_weapons[i], "knife_ballistic_" ) ) + class = "knife"; + + if ( class == "pistol" || class == "pistolspread" || class == "pistol spread" ) + { + if ( current_weapons[i] != level.default_laststandpistol && !flag( "solo_game" ) || !flag( "solo_game" ) && current_weapons[i] != level.default_solo_laststandpistol ) + { + if ( self getammocount( current_weapons[i] ) <= 0 ) + continue; + } + + pistol_array_index = pistol_array.size; + pistol_array[pistol_array_index] = spawnstruct(); + pistol_array[pistol_array_index].gun = current_weapons[i]; + pistol_array[pistol_array_index].value = 0; + + for ( j = 0; j < level.pistol_values.size; j++ ) + { + if ( level.pistol_values[j] == current_weapons[i] ) + { + pistol_array[pistol_array_index].value = j; + break; + } + } + } + } + + self.laststandpistol = last_stand_compare_pistols( pistol_array ); +} + +last_stand_compare_pistols( struct_array ) +{ + if ( !isarray( struct_array ) || struct_array.size <= 0 ) + { + self.hadpistol = 0; + + if ( isdefined( self.stored_weapon_info ) ) + { + stored_weapon_info = getarraykeys( self.stored_weapon_info ); + + for ( j = 0; j < stored_weapon_info.size; j++ ) + { + if ( stored_weapon_info[j] == level.laststandpistol ) + self.hadpistol = 1; + } + } + + return level.laststandpistol; + } + + highest_score_pistol = struct_array[0]; + + for ( i = 1; i < struct_array.size; i++ ) + { + if ( struct_array[i].value > highest_score_pistol.value ) + highest_score_pistol = struct_array[i]; + } + + if ( flag( "solo_game" ) ) + { + self._special_solo_pistol_swap = 0; + + if ( highest_score_pistol.value <= level.pistol_value_solo_replace_below ) + { + self.hadpistol = 0; + self._special_solo_pistol_swap = 1; + + if ( isdefined( level.force_solo_quick_revive ) && level.force_solo_quick_revive && ( !self hasperk( "specialty_quickrevive" ) && !self hasperk( "specialty_quickrevive" ) ) ) + return highest_score_pistol.gun; + else + return level.laststandpistol; + } + else + return highest_score_pistol.gun; + } + else + return highest_score_pistol.gun; +} + +last_stand_save_pistol_ammo() +{ + weapon_inventory = self getweaponslist( 1 ); + self.stored_weapon_info = []; + + for ( i = 0; i < weapon_inventory.size; i++ ) + { + weapon = weapon_inventory[i]; + class = weaponclass( weapon ); + + if ( issubstr( weapon, "knife_ballistic_" ) ) + class = "knife"; + + if ( class == "pistol" || class == "pistolspread" || class == "pistol spread" ) + { + self.stored_weapon_info[weapon] = spawnstruct(); + self.stored_weapon_info[weapon].clip_amt = self getweaponammoclip( weapon ); + self.stored_weapon_info[weapon].left_clip_amt = 0; + dual_wield_name = weapondualwieldweaponname( weapon ); + + if ( "none" != dual_wield_name ) + self.stored_weapon_info[weapon].left_clip_amt = self getweaponammoclip( dual_wield_name ); + + self.stored_weapon_info[weapon].stock_amt = self getweaponammostock( weapon ); + self.stored_weapon_info[weapon].total_amt = self.stored_weapon_info[weapon].clip_amt + self.stored_weapon_info[weapon].left_clip_amt + self.stored_weapon_info[weapon].stock_amt; + self.stored_weapon_info[weapon].given_amt = 0; + } + } + + self last_stand_best_pistol(); +} + +last_stand_restore_pistol_ammo() +{ + self.weapon_taken_by_losing_specialty_additionalprimaryweapon = undefined; + + if ( !isdefined( self.stored_weapon_info ) ) + return; + + weapon_inventory = self getweaponslist( 1 ); + weapon_to_restore = getarraykeys( self.stored_weapon_info ); + + for ( i = 0; i < weapon_inventory.size; i++ ) + { + weapon = weapon_inventory[i]; + + if ( weapon != self.laststandpistol ) + continue; + + for ( j = 0; j < weapon_to_restore.size; j++ ) + { + check_weapon = weapon_to_restore[j]; + + if ( weapon == check_weapon ) + { + dual_wield_name = weapondualwieldweaponname( weapon_to_restore[j] ); + + if ( weapon != level.default_laststandpistol ) + { + last_clip = self getweaponammoclip( weapon ); + last_left_clip = 0; + + if ( "none" != dual_wield_name ) + last_left_clip = self getweaponammoclip( dual_wield_name ); + + last_stock = self getweaponammostock( weapon ); + last_total = last_clip + last_left_clip + last_stock; + used_amt = self.stored_weapon_info[weapon].given_amt - last_total; + + if ( used_amt >= self.stored_weapon_info[weapon].stock_amt ) + { + used_amt -= self.stored_weapon_info[weapon].stock_amt; + self.stored_weapon_info[weapon].stock_amt = 0; + self.stored_weapon_info[weapon].clip_amt -= used_amt; + + if ( self.stored_weapon_info[weapon].clip_amt < 0 ) + self.stored_weapon_info[weapon].clip_amt = 0; + } + else + { + new_stock_amt = self.stored_weapon_info[weapon].stock_amt - used_amt; + + if ( new_stock_amt < self.stored_weapon_info[weapon].stock_amt ) + self.stored_weapon_info[weapon].stock_amt = new_stock_amt; + } + } + + self setweaponammoclip( weapon_to_restore[j], self.stored_weapon_info[weapon_to_restore[j]].clip_amt ); + + if ( "none" != dual_wield_name ) + self setweaponammoclip( dual_wield_name, self.stored_weapon_info[weapon_to_restore[j]].left_clip_amt ); + + self setweaponammostock( weapon_to_restore[j], self.stored_weapon_info[weapon_to_restore[j]].stock_amt ); + break; + } + } + } +} + +last_stand_take_thrown_grenade() +{ + self endon( "disconnect" ); + self endon( "bled_out" ); + self endon( "player_revived" ); + + self waittill( "grenade_fire", grenade, weaponname ); + + if ( isdefined( self.lsgsar_lethal ) && weaponname == self.lsgsar_lethal ) + self.lsgsar_lethal_nade_amt--; + + if ( isdefined( self.lsgsar_tactical ) && weaponname == self.lsgsar_tactical ) + self.lsgsar_tactical_nade_amt--; +} + +last_stand_grenade_save_and_return() +{ + if ( isdefined( level.isresetting_grief ) && level.isresetting_grief ) + return; + + self endon( "disconnect" ); + self endon( "bled_out" ); + level endon( "between_round_over" ); + self.lsgsar_lethal_nade_amt = 0; + self.lsgsar_has_lethal_nade = 0; + self.lsgsar_tactical_nade_amt = 0; + self.lsgsar_has_tactical_nade = 0; + self.lsgsar_lethal = undefined; + self.lsgsar_tactical = undefined; + + if ( self isthrowinggrenade() ) + self thread last_stand_take_thrown_grenade(); + + weapons_on_player = self getweaponslist( 1 ); + + for ( i = 0; i < weapons_on_player.size; i++ ) + { + if ( self is_player_lethal_grenade( weapons_on_player[i] ) ) + { + self.lsgsar_has_lethal_nade = 1; + self.lsgsar_lethal = self get_player_lethal_grenade(); + self.lsgsar_lethal_nade_amt = self getweaponammoclip( self get_player_lethal_grenade() ); + self setweaponammoclip( self get_player_lethal_grenade(), 0 ); + self takeweapon( self get_player_lethal_grenade() ); + continue; + } + + if ( self is_player_tactical_grenade( weapons_on_player[i] ) ) + { + self.lsgsar_has_tactical_nade = 1; + self.lsgsar_tactical = self get_player_tactical_grenade(); + self.lsgsar_tactical_nade_amt = self getweaponammoclip( self get_player_tactical_grenade() ); + self setweaponammoclip( self get_player_tactical_grenade(), 0 ); + self takeweapon( self get_player_tactical_grenade() ); + } + } + + self waittill( "player_revived" ); + + if ( self.lsgsar_has_lethal_nade ) + { + self set_player_lethal_grenade( self.lsgsar_lethal ); + self giveweapon( self.lsgsar_lethal ); + self setweaponammoclip( self.lsgsar_lethal, self.lsgsar_lethal_nade_amt ); + } + + if ( self.lsgsar_has_tactical_nade ) + { + self set_player_tactical_grenade( self.lsgsar_tactical ); + self giveweapon( self.lsgsar_tactical ); + self setweaponammoclip( self.lsgsar_tactical, self.lsgsar_tactical_nade_amt ); + } + + self.lsgsar_lethal_nade_amt = undefined; + self.lsgsar_has_lethal_nade = undefined; + self.lsgsar_tactical_nade_amt = undefined; + self.lsgsar_has_tactical_nade = undefined; + self.lsgsar_lethal = undefined; + self.lsgsar_tactical = undefined; +} + +spectators_respawn() +{ + level endon( "between_round_over" ); + + if ( !isdefined( level.zombie_vars["spectators_respawn"] ) || !level.zombie_vars["spectators_respawn"] ) + return; + + if ( !isdefined( level.custom_spawnplayer ) ) + level.custom_spawnplayer = ::spectator_respawn; + + while ( true ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].sessionstate == "spectator" && isdefined( players[i].spectator_respawn ) ) + { + players[i] [[ level.spawnplayer ]](); + thread refresh_player_navcard_hud(); + + if ( isdefined( level.script ) && level.round_number > 6 && players[i].score < 1500 ) + { + players[i].old_score = players[i].score; + + if ( isdefined( level.spectator_respawn_custom_score ) ) + players[i] [[ level.spectator_respawn_custom_score ]](); + + players[i].score = 1500; + } + } + } + + wait 1; + } +} + +spectator_respawn() +{ +/# + println( "*************************Respawn Spectator***" ); +#/ + assert( isdefined( self.spectator_respawn ) ); + origin = self.spectator_respawn.origin; + angles = self.spectator_respawn.angles; + self setspectatepermissions( 0 ); + new_origin = undefined; + + if ( isdefined( level.check_valid_spawn_override ) ) + new_origin = [[ level.check_valid_spawn_override ]]( self ); + + if ( !isdefined( new_origin ) ) + new_origin = check_for_valid_spawn_near_team( self, 1 ); + + if ( isdefined( new_origin ) ) + { + if ( !isdefined( new_origin.angles ) ) + angles = ( 0, 0, 0 ); + else + angles = new_origin.angles; + + self spawn( new_origin.origin, angles ); + } + else + self spawn( origin, angles ); + + if ( isdefined( self get_player_placeable_mine() ) ) + { + self takeweapon( self get_player_placeable_mine() ); + self set_player_placeable_mine( undefined ); + } + + self maps\mp\zombies\_zm_equipment::equipment_take(); + self.is_burning = undefined; + self.abilities = []; + self.is_zombie = 0; + self.ignoreme = 0; + setclientsysstate( "lsm", "0", self ); + self reviveplayer(); + self notify( "spawned_player" ); + + if ( isdefined( level._zombiemode_post_respawn_callback ) ) + self thread [[ level._zombiemode_post_respawn_callback ]](); + + self maps\mp\zombies\_zm_score::player_reduce_points( "died" ); + self maps\mp\zombies\_zm_melee_weapon::spectator_respawn_all(); + claymore_triggers = getentarray( "claymore_purchase", "targetname" ); + + for ( i = 0; i < claymore_triggers.size; i++ ) + { + claymore_triggers[i] setvisibletoplayer( self ); + claymore_triggers[i].claymores_triggered = 0; + } + + self thread player_zombie_breadcrumb(); + self thread return_retained_perks(); + return 1; +} + +check_for_valid_spawn_near_team( revivee, return_struct ) +{ + if ( isdefined( level.check_for_valid_spawn_near_team_callback ) ) + { + spawn_location = [[ level.check_for_valid_spawn_near_team_callback ]]( revivee, return_struct ); + return spawn_location; + } + else + { + players = get_players(); + spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); + closest_group = undefined; + closest_distance = 100000000; + backup_group = undefined; + backup_distance = 100000000; + + if ( spawn_points.size == 0 ) + return undefined; + + for ( i = 0; i < players.size; i++ ) + { + if ( is_player_valid( players[i], undefined, 1 ) && players[i] != self ) + { + for ( j = 0; j < spawn_points.size; j++ ) + { + if ( isdefined( spawn_points[j].script_int ) ) + ideal_distance = spawn_points[j].script_int; + else + ideal_distance = 1000; + + if ( spawn_points[j].locked == 0 ) + { + plyr_dist = distancesquared( players[i].origin, spawn_points[j].origin ); + + if ( plyr_dist < ideal_distance * ideal_distance ) + { + if ( plyr_dist < closest_distance ) + { + closest_distance = plyr_dist; + closest_group = j; + } + + continue; + } + + if ( plyr_dist < backup_distance ) + { + backup_group = j; + backup_distance = plyr_dist; + } + } + } + } + + if ( !isdefined( closest_group ) ) + closest_group = backup_group; + + if ( isdefined( closest_group ) ) + { + spawn_location = get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ); + + if ( isdefined( spawn_location ) ) + return spawn_location; + } + } + + return undefined; + } +} + +get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ) +{ + spawn_array = getstructarray( spawn_points[closest_group].target, "targetname" ); + spawn_array = array_randomize( spawn_array ); + + for ( k = 0; k < spawn_array.size; k++ ) + { + if ( isdefined( spawn_array[k].plyr ) && spawn_array[k].plyr == revivee getentitynumber() ) + { + if ( positionwouldtelefrag( spawn_array[k].origin ) ) + { + spawn_array[k].plyr = undefined; + break; + } + else if ( isdefined( return_struct ) && return_struct ) + return spawn_array[k]; + else + return spawn_array[k].origin; + } + } + + for ( k = 0; k < spawn_array.size; k++ ) + { + if ( positionwouldtelefrag( spawn_array[k].origin ) ) + continue; + + if ( !isdefined( spawn_array[k].plyr ) || spawn_array[k].plyr == revivee getentitynumber() ) + { + spawn_array[k].plyr = revivee getentitynumber(); + + if ( isdefined( return_struct ) && return_struct ) + return spawn_array[k]; + else + return spawn_array[k].origin; + } + } + + if ( isdefined( return_struct ) && return_struct ) + return spawn_array[0]; + + return spawn_array[0].origin; +} + +check_for_valid_spawn_near_position( revivee, v_position, return_struct ) +{ + spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); + + if ( spawn_points.size == 0 ) + return undefined; + + closest_group = undefined; + closest_distance = 100000000; + backup_group = undefined; + backup_distance = 100000000; + + for ( i = 0; i < spawn_points.size; i++ ) + { + if ( isdefined( spawn_points[i].script_int ) ) + ideal_distance = spawn_points[i].script_int; + else + ideal_distance = 1000; + + if ( spawn_points[i].locked == 0 ) + { + dist = distancesquared( v_position, spawn_points[i].origin ); + + if ( dist < ideal_distance * ideal_distance ) + { + if ( dist < closest_distance ) + { + closest_distance = dist; + closest_group = i; + } + } + else if ( dist < backup_distance ) + { + backup_group = i; + backup_distance = dist; + } + } + + if ( !isdefined( closest_group ) ) + closest_group = backup_group; + } + + if ( isdefined( closest_group ) ) + { + spawn_location = get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ); + + if ( isdefined( spawn_location ) ) + return spawn_location; + } + + return undefined; +} + +check_for_valid_spawn_within_range( revivee, v_position, return_struct, min_distance, max_distance ) +{ + spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); + + if ( spawn_points.size == 0 ) + return undefined; + + closest_group = undefined; + closest_distance = 100000000; + + for ( i = 0; i < spawn_points.size; i++ ) + { + if ( spawn_points[i].locked == 0 ) + { + dist = distance( v_position, spawn_points[i].origin ); + + if ( dist >= min_distance && dist <= max_distance ) + { + if ( dist < closest_distance ) + { + closest_distance = dist; + closest_group = i; + } + } + } + } + + if ( isdefined( closest_group ) ) + { + spawn_location = get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ); + + if ( isdefined( spawn_location ) ) + return spawn_location; + } + + return undefined; +} + +get_players_on_team( exclude ) +{ + teammates = []; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].spawn_side == self.spawn_side && !isdefined( players[i].revivetrigger ) && players[i] != exclude ) + teammates[teammates.size] = players[i]; + } + + return teammates; +} + +get_safe_breadcrumb_pos( player ) +{ + players = get_players(); + valid_players = []; + min_dist = 22500; + + for ( i = 0; i < players.size; i++ ) + { + if ( !is_player_valid( players[i] ) ) + continue; + + valid_players[valid_players.size] = players[i]; + } + + for ( i = 0; i < valid_players.size; i++ ) + { + count = 0; + + for ( q = 1; q < player.zombie_breadcrumbs.size; q++ ) + { + if ( distancesquared( player.zombie_breadcrumbs[q], valid_players[i].origin ) < min_dist ) + continue; + + count++; + + if ( count == valid_players.size ) + return player.zombie_breadcrumbs[q]; + } + } + + return undefined; +} + +default_max_zombie_func( max_num ) +{ +/# + count = getdvarint( _hash_CF687B54 ); + + if ( count > -1 ) + return count; +#/ + max = max_num; + + if ( level.round_number < 2 ) + max = int( max_num * 0.25 ); + else if ( level.round_number < 3 ) + max = int( max_num * 0.3 ); + else if ( level.round_number < 4 ) + max = int( max_num * 0.5 ); + else if ( level.round_number < 5 ) + max = int( max_num * 0.7 ); + else if ( level.round_number < 6 ) + max = int( max_num * 0.9 ); + + return max; +} + +round_spawning() +{ + level endon( "intermission" ); + level endon( "end_of_round" ); + level endon( "restart_round" ); +/# + level endon( "kill_round" ); +#/ + if ( level.intermission ) + return; +/# + if ( getdvarint( _hash_FA81816F ) == 2 || getdvarint( _hash_FA81816F ) >= 4 ) + return; +#/ + if ( level.zombie_spawn_locations.size < 1 ) + { +/# + assertmsg( "No active spawners in the map. Check to see if the zone is active and if it's pointing to spawners." ); +#/ + return; + } + + ai_calculate_health( level.round_number ); + count = 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i].zombification_time = 0; + + max = level.zombie_vars["zombie_max_ai"]; + multiplier = level.round_number / 5; + + if ( multiplier < 1 ) + multiplier = 1; + + if ( level.round_number >= 10 ) + multiplier *= ( level.round_number * 0.15 ); + + player_num = get_players().size; + + if ( player_num == 1 ) + max += int( 0.5 * level.zombie_vars["zombie_ai_per_player"] * multiplier ); + else + max += int( ( player_num - 1 ) * level.zombie_vars["zombie_ai_per_player"] * multiplier ); + + if ( !isdefined( level.max_zombie_func ) ) + level.max_zombie_func = ::default_max_zombie_func; + + if ( !( isdefined( level.kill_counter_hud ) && level.zombie_total > 0 ) ) + { + level.zombie_total = [[ level.max_zombie_func ]]( max ); + level notify( "zombie_total_set" ); + } + + if ( isdefined( level.zombie_total_set_func ) ) + level thread [[ level.zombie_total_set_func ]](); + + if ( level.round_number < 10 || level.speed_change_max > 0 ) + level thread zombie_speed_up(); + + mixed_spawns = 0; + old_spawn = undefined; + + while ( true ) + { + while ( get_current_zombie_count() >= level.zombie_ai_limit || level.zombie_total <= 0 ) + wait 0.1; + + while ( get_current_actor_count() >= level.zombie_actor_limit ) + { + clear_all_corpses(); + wait 0.1; + } + + flag_wait( "spawn_zombies" ); + + while ( level.zombie_spawn_locations.size <= 0 ) + wait 0.1; + + run_custom_ai_spawn_checks(); + spawn_point = level.zombie_spawn_locations[randomint( level.zombie_spawn_locations.size )]; + + if ( !isdefined( old_spawn ) ) + old_spawn = spawn_point; + else if ( spawn_point == old_spawn ) + spawn_point = level.zombie_spawn_locations[randomint( level.zombie_spawn_locations.size )]; + + old_spawn = spawn_point; + + if ( isdefined( level.mixed_rounds_enabled ) && level.mixed_rounds_enabled == 1 ) + { + spawn_dog = 0; + + if ( level.round_number > 30 ) + { + if ( randomint( 100 ) < 3 ) + spawn_dog = 1; + } + else if ( level.round_number > 25 && mixed_spawns < 3 ) + { + if ( randomint( 100 ) < 2 ) + spawn_dog = 1; + } + else if ( level.round_number > 20 && mixed_spawns < 2 ) + { + if ( randomint( 100 ) < 2 ) + spawn_dog = 1; + } + else if ( level.round_number > 15 && mixed_spawns < 1 ) + { + if ( randomint( 100 ) < 1 ) + spawn_dog = 1; + } + + if ( spawn_dog ) + { + keys = getarraykeys( level.zones ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( level.zones[keys[i]].is_occupied ) + { + akeys = getarraykeys( level.zones[keys[i]].adjacent_zones ); + + for ( k = 0; k < akeys.size; k++ ) + { + if ( level.zones[akeys[k]].is_active && !level.zones[akeys[k]].is_occupied && level.zones[akeys[k]].dog_locations.size > 0 ) + { + maps\mp\zombies\_zm_ai_dogs::special_dog_spawn( undefined, 1 ); + level.zombie_total--; + wait_network_frame(); + } + } + } + } + } + } + + if ( isdefined( level.zombie_spawners ) ) + { + if ( isdefined( level.use_multiple_spawns ) && level.use_multiple_spawns ) + { + if ( isdefined( spawn_point.script_int ) ) + { + if ( isdefined( level.zombie_spawn[spawn_point.script_int] ) && level.zombie_spawn[spawn_point.script_int].size ) + spawner = random( level.zombie_spawn[spawn_point.script_int] ); + else + { +/# + assertmsg( "Wanting to spawn from zombie group " + spawn_point.script_int + "but it doens't exist" ); +#/ + } + } + else if ( isdefined( level.zones[spawn_point.zone_name].script_int ) && level.zones[spawn_point.zone_name].script_int ) + spawner = random( level.zombie_spawn[level.zones[spawn_point.zone_name].script_int] ); + else if ( isdefined( level.spawner_int ) && ( isdefined( level.zombie_spawn[level.spawner_int].size ) && level.zombie_spawn[level.spawner_int].size ) ) + spawner = random( level.zombie_spawn[level.spawner_int] ); + else + spawner = random( level.zombie_spawners ); + } + else + spawner = random( level.zombie_spawners ); + + ai = spawn_zombie( spawner, spawner.targetname, spawn_point ); + } + + if ( isdefined( ai ) ) + { + level.zombie_total--; + ai thread round_spawn_failsafe(); + count++; + } + + wait( level.zombie_vars["zombie_spawn_delay"] ); + wait_network_frame(); + } +} + +run_custom_ai_spawn_checks() +{ + foreach ( str_id, s in level.custom_ai_spawn_check_funcs ) + { + if ( [[ s.func_check ]]() ) + { + a_spawners = [[ s.func_get_spawners ]](); + level.zombie_spawners = arraycombine( level.zombie_spawners, a_spawners, 0, 0 ); + + if ( isdefined( level.use_multiple_spawns ) && level.use_multiple_spawns ) + { + foreach ( sp in a_spawners ) + { + if ( isdefined( sp.script_int ) ) + { + if ( !isdefined( level.zombie_spawn[sp.script_int] ) ) + level.zombie_spawn[sp.script_int] = []; + + if ( !isinarray( level.zombie_spawn[sp.script_int], sp ) ) + level.zombie_spawn[sp.script_int][level.zombie_spawn[sp.script_int].size] = sp; + } + } + } + + if ( isdefined( s.func_get_locations ) ) + { + a_locations = [[ s.func_get_locations ]](); + level.zombie_spawn_locations = arraycombine( level.zombie_spawn_locations, a_locations, 0, 0 ); + } + + continue; + } + + a_spawners = [[ s.func_get_spawners ]](); + + foreach ( sp in a_spawners ) + arrayremovevalue( level.zombie_spawners, sp ); + + if ( isdefined( level.use_multiple_spawns ) && level.use_multiple_spawns ) + { + foreach ( sp in a_spawners ) + { + if ( isdefined( sp.script_int ) && isdefined( level.zombie_spawn[sp.script_int] ) ) + arrayremovevalue( level.zombie_spawn[sp.script_int], sp ); + } + } + + if ( isdefined( s.func_get_locations ) ) + { + a_locations = [[ s.func_get_locations ]](); + + foreach ( s_loc in a_locations ) + arrayremovevalue( level.zombie_spawn_locations, s_loc ); + } + } +} + +register_custom_ai_spawn_check( str_id, func_check, func_get_spawners, func_get_locations ) +{ + if ( !isdefined( level.custom_ai_spawn_check_funcs[str_id] ) ) + level.custom_ai_spawn_check_funcs[str_id] = spawnstruct(); + + level.custom_ai_spawn_check_funcs[str_id].func_check = func_check; + level.custom_ai_spawn_check_funcs[str_id].func_get_spawners = func_get_spawners; + level.custom_ai_spawn_check_funcs[str_id].func_get_locations = func_get_locations; +} + +zombie_speed_up() +{ + if ( level.round_number <= 3 ) + return; + + level endon( "intermission" ); + level endon( "end_of_round" ); + level endon( "restart_round" ); +/# + level endon( "kill_round" ); +#/ + while ( level.zombie_total > 4 ) + wait 2.0; + + for ( num_zombies = get_current_zombie_count(); num_zombies > 3; num_zombies = get_current_zombie_count() ) + wait 2.0; + + for ( zombies = get_round_enemy_array(); zombies.size > 0; zombies = get_round_enemy_array() ) + { + if ( zombies.size == 1 && ( isdefined( zombies[0].has_legs ) && zombies[0].has_legs ) ) + { + if ( isdefined( level.zombie_speed_up ) ) + zombies[0] thread [[ level.zombie_speed_up ]](); + else if ( zombies[0].zombie_move_speed != "sprint" ) + { + zombies[0] set_zombie_run_cycle( "sprint" ); + zombies[0].zombie_move_speed_original = zombies[0].zombie_move_speed; + } + } + + wait 0.5; + } +} + +round_spawning_test() +{ + while ( true ) + { + spawn_point = level.zombie_spawn_locations[randomint( level.zombie_spawn_locations.size )]; + spawner = random( level.zombie_spawners ); + ai = spawn_zombie( spawner, spawner.targetname, spawn_point ); + + ai waittill( "death" ); + + wait 5; + } +} + +round_pause( delay = 30 ) +{ + level.countdown_hud = create_counter_hud(); + level.countdown_hud setvalue( delay ); + level.countdown_hud.color = ( 1, 1, 1 ); + level.countdown_hud.alpha = 1; + level.countdown_hud fadeovertime( 2.0 ); + wait 2.0; + level.countdown_hud.color = vectorscale( ( 1, 0, 0 ), 0.21 ); + level.countdown_hud fadeovertime( 3.0 ); + wait 3; + + while ( delay >= 1 ) + { + wait 1; + delay--; + level.countdown_hud setvalue( delay ); + } + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] playlocalsound( "zmb_perks_packa_ready" ); + + level.countdown_hud fadeovertime( 1.0 ); + level.countdown_hud.color = ( 1, 1, 1 ); + level.countdown_hud.alpha = 0; + wait 1.0; + level.countdown_hud destroy_hud(); +} + +round_start() +{ +/# + println( "ZM >> round_start start" ); +#/ + if ( isdefined( level.round_prestart_func ) ) + [[ level.round_prestart_func ]](); + else + { + n_delay = 2; + + if ( isdefined( level.zombie_round_start_delay ) ) + n_delay = level.zombie_round_start_delay; + + wait( n_delay ); + } + + level.zombie_health = level.zombie_vars["zombie_health_start"]; + + if ( getdvarint( "scr_writeConfigStrings" ) == 1 ) + { + wait 5; + exitlevel(); + return; + } + + if ( level.zombie_vars["game_start_delay"] > 0 ) + round_pause( level.zombie_vars["game_start_delay"] ); + + flag_set( "begin_spawning" ); + + if ( !isdefined( level.round_spawn_func ) ) + level.round_spawn_func = ::round_spawning; +/# + if ( getdvarint( _hash_7688603C ) ) + level.round_spawn_func = ::round_spawning_test; +#/ + if ( !isdefined( level.round_wait_func ) ) + level.round_wait_func = ::round_wait; + + if ( !isdefined( level.round_think_func ) ) + level.round_think_func = ::round_think; + + level thread [[ level.round_think_func ]](); +} + +play_door_dialog() +{ + level endon( "power_on" ); + self endon( "warning_dialog" ); + timer = 0; + + while ( true ) + { + wait 0.05; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + dist = distancesquared( players[i].origin, self.origin ); + + if ( dist > 4900 ) + { + timer = 0; + continue; + } + + while ( dist < 4900 && timer < 3 ) + { + wait 0.5; + timer++; + } + + if ( dist > 4900 && timer >= 3 ) + { + self playsound( "door_deny" ); + players[i] maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "door_deny" ); + wait 3; + self notify( "warning_dialog" ); + } + } + } +} + +wait_until_first_player() +{ + players = get_players(); + + if ( !isdefined( players[0] ) ) + level waittill( "first_player_ready" ); +} + +round_one_up() +{ + level endon( "end_game" ); + + if ( isdefined( level.noroundnumber ) && level.noroundnumber == 1 ) + return; + + if ( !isdefined( level.doground_nomusic ) ) + level.doground_nomusic = 0; + + if ( level.first_round ) + { + intro = 1; + + if ( isdefined( level._custom_intro_vox ) ) + level thread [[ level._custom_intro_vox ]](); + else + level thread play_level_start_vox_delayed(); + } + else + intro = 0; + + if ( level.round_number == 5 || level.round_number == 10 || level.round_number == 20 || level.round_number == 35 || level.round_number == 50 ) + { + players = get_players(); + rand = randomintrange( 0, players.size ); + players[rand] thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "round_" + level.round_number ); + } + + if ( intro ) + { + if ( isdefined( level.host_ended_game ) && level.host_ended_game ) + return; + + wait 6.25; + level notify( "intro_hud_done" ); + wait 2; + } + else + wait 2.5; + + reportmtu( level.round_number ); +} + +round_over() +{ + if ( isdefined( level.noroundnumber ) && level.noroundnumber == 1 ) + return; + + time = level.zombie_vars["zombie_between_round_time"]; + players = getplayers(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + { + if ( !isdefined( players[player_index].pers["previous_distance_traveled"] ) ) + players[player_index].pers["previous_distance_traveled"] = 0; + + distancethisround = int( players[player_index].pers["distance_traveled"] - players[player_index].pers["previous_distance_traveled"] ); + players[player_index].pers["previous_distance_traveled"] = players[player_index].pers["distance_traveled"]; + players[player_index] incrementplayerstat( "distance_traveled", distancethisround ); + + if ( players[player_index].pers["team"] != "spectator" ) + { + zonename = players[player_index] get_current_zone(); + + if ( isdefined( zonename ) ) + players[player_index] recordzombiezone( "endingZone", zonename ); + } + } + + recordzombieroundend(); + wait( time ); +} + +round_think( restart = 0 ) +{ +/# + println( "ZM >> round_think start" ); +#/ + level endon( "end_round_think" ); + + if ( !( isdefined( restart ) && restart ) ) + { + if ( isdefined( level.initial_round_wait_func ) ) + [[ level.initial_round_wait_func ]](); + + if ( !( isdefined( level.host_ended_game ) && level.host_ended_game ) ) + { + players = get_players(); + + foreach ( player in players ) + { + if ( !( isdefined( player.hostmigrationcontrolsfrozen ) && player.hostmigrationcontrolsfrozen ) ) + { + player freezecontrols( 0 ); +/# + println( " Unfreeze controls 8" ); +#/ + } + + player maps\mp\zombies\_zm_stats::set_global_stat( "rounds", level.round_number ); + } + } + } + + setroundsplayed( level.round_number ); + + for (;;) + { + maxreward = 50 * level.round_number; + + if ( maxreward > 500 ) + maxreward = 500; + + level.zombie_vars["rebuild_barrier_cap_per_round"] = maxreward; + level.pro_tips_start_time = gettime(); + level.zombie_last_run_time = gettime(); + + if ( isdefined( level.zombie_round_change_custom ) ) + [[ level.zombie_round_change_custom ]](); + else + { + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "round_start" ); + round_one_up(); + } + + maps\mp\zombies\_zm_powerups::powerup_round_start(); + players = get_players(); + array_thread( players, maps\mp\zombies\_zm_blockers::rebuild_barrier_reward_reset ); + + if ( !( isdefined( level.headshots_only ) && level.headshots_only ) && !restart ) + level thread award_grenades_for_survivors(); + + bbprint( "zombie_rounds", "round %d player_count %d", level.round_number, players.size ); +/# + println( "ZM >> round_think, round=" + level.round_number + ", player_count=" + players.size ); +#/ + level.round_start_time = gettime(); + + while ( level.zombie_spawn_locations.size <= 0 ) + wait 0.1; + + level thread [[ level.round_spawn_func ]](); + level notify( "start_of_round" ); + recordzombieroundstart(); + players = getplayers(); + + for ( index = 0; index < players.size; index++ ) + { + zonename = players[index] get_current_zone(); + + if ( isdefined( zonename ) ) + players[index] recordzombiezone( "startingZone", zonename ); + } + + if ( isdefined( level.round_start_custom_func ) ) + [[ level.round_start_custom_func ]](); + + [[ level.round_wait_func ]](); + level.first_round = 0; + level notify( "end_of_round" ); + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "round_end" ); + uploadstats(); + + if ( isdefined( level.round_end_custom_logic ) ) + [[ level.round_end_custom_logic ]](); + + players = get_players(); + + if ( isdefined( level.no_end_game_check ) && level.no_end_game_check ) + { + level thread last_stand_revive(); + level thread spectators_respawn(); + } + else if ( 1 != players.size ) + level thread spectators_respawn(); + + players = get_players(); + array_thread( players, maps\mp\zombies\_zm_pers_upgrades_system::round_end ); + timer = level.zombie_vars["zombie_spawn_delay"]; + + if ( timer > 0.08 ) + level.zombie_vars["zombie_spawn_delay"] = timer * 0.95; + else if ( timer < 0.08 ) + level.zombie_vars["zombie_spawn_delay"] = 0.08; + + if ( level.gamedifficulty == 0 ) + level.zombie_move_speed = level.round_number * level.zombie_vars["zombie_move_speed_multiplier_easy"]; + else + level.zombie_move_speed = level.round_number * level.zombie_vars["zombie_move_speed_multiplier"]; + + level.round_number++; + + if ( 255 < level.round_number ) + level.round_number = 255; + + setroundsplayed( level.round_number ); + matchutctime = getutc(); + players = get_players(); + + foreach ( player in players ) + { + if ( level.curr_gametype_affects_rank && level.round_number > 3 + level.start_round ) + player maps\mp\zombies\_zm_stats::add_client_stat( "weighted_rounds_played", level.round_number ); + + player maps\mp\zombies\_zm_stats::set_global_stat( "rounds", level.round_number ); + player maps\mp\zombies\_zm_stats::update_playing_utc_time( matchutctime ); + } + + check_quickrevive_for_hotjoin(); + level round_over(); + level notify( "between_round_over" ); + restart = 0; + } +} + +award_grenades_for_survivors() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i].is_zombie ) + { + lethal_grenade = players[i] get_player_lethal_grenade(); + + if ( !players[i] hasweapon( lethal_grenade ) ) + { + players[i] giveweapon( lethal_grenade ); + players[i] setweaponammoclip( lethal_grenade, 0 ); + } + + if ( players[i] getfractionmaxammo( lethal_grenade ) < 0.25 ) + { + players[i] setweaponammoclip( lethal_grenade, 2 ); + continue; + } + + if ( players[i] getfractionmaxammo( lethal_grenade ) < 0.5 ) + { + players[i] setweaponammoclip( lethal_grenade, 3 ); + continue; + } + + players[i] setweaponammoclip( lethal_grenade, 4 ); + } + } +} + +ai_calculate_health( round_number ) +{ + level.zombie_health = level.zombie_vars["zombie_health_start"]; + + for ( i = 2; i <= round_number; i++ ) + { + if ( i >= 10 ) + { + old_health = level.zombie_health; + level.zombie_health += int( level.zombie_health * level.zombie_vars["zombie_health_increase_multiplier"] ); + + if ( level.zombie_health < old_health ) + { + level.zombie_health = old_health; + return; + } + } + else + level.zombie_health = int( level.zombie_health + level.zombie_vars["zombie_health_increase"] ); + } +} + +ai_zombie_health( round_number ) +{ + zombie_health = level.zombie_vars["zombie_health_start"]; + + for ( i = 2; i <= round_number; i++ ) + { + if ( i >= 10 ) + { + old_health = zombie_health; + zombie_health += int( zombie_health * level.zombie_vars["zombie_health_increase_multiplier"] ); + + if ( zombie_health < old_health ) + return old_health; + } + else + zombie_health = int( zombie_health + level.zombie_vars["zombie_health_increase"] ); + } + + return zombie_health; +} + +round_spawn_failsafe_debug() +{ +/# + level notify( "failsafe_debug_stop" ); + level endon( "failsafe_debug_stop" ); + start = gettime(); + level.chunk_time = 0; + + while ( true ) + { + level.failsafe_time = gettime() - start; + + if ( isdefined( self.lastchunk_destroy_time ) ) + level.chunk_time = gettime() - self.lastchunk_destroy_time; + + wait_network_frame(); + } +#/ +} + +round_spawn_failsafe() +{ + self endon( "death" ); + prevorigin = self.origin; + + while ( true ) + { + if ( !level.zombie_vars["zombie_use_failsafe"] ) + return; + + if ( isdefined( self.ignore_round_spawn_failsafe ) && self.ignore_round_spawn_failsafe ) + return; + + wait 30; + + if ( !self.has_legs ) + wait 10.0; + + if ( isdefined( self.is_inert ) && self.is_inert ) + continue; + + if ( isdefined( self.lastchunk_destroy_time ) ) + { + if ( gettime() - self.lastchunk_destroy_time < 8000 ) + continue; + } + + if ( self.origin[2] < level.zombie_vars["below_world_check"] ) + { + if ( isdefined( level.put_timed_out_zombies_back_in_queue ) && level.put_timed_out_zombies_back_in_queue && !flag( "dog_round" ) && !( isdefined( self.isscreecher ) && self.isscreecher ) ) + { + level.zombie_total++; + level.zombie_total_subtract++; + } +/# + +#/ + self dodamage( self.health + 100, ( 0, 0, 0 ) ); + break; + } + + if ( distancesquared( self.origin, prevorigin ) < 576 ) + { + if ( isdefined( level.put_timed_out_zombies_back_in_queue ) && level.put_timed_out_zombies_back_in_queue && !flag( "dog_round" ) ) + { + if ( !self.ignoreall && !( isdefined( self.nuked ) && self.nuked ) && !( isdefined( self.marked_for_death ) && self.marked_for_death ) && !( isdefined( self.isscreecher ) && self.isscreecher ) && ( isdefined( self.has_legs ) && self.has_legs ) ) + { + level.zombie_total++; + level.zombie_total_subtract++; + } + } + + level.zombies_timeout_playspace++; +/# + +#/ + self dodamage( self.health + 100, ( 0, 0, 0 ) ); + break; + } + + prevorigin = self.origin; + } +} + +round_wait() +{ + level endon( "restart_round" ); +/# + if ( getdvarint( _hash_7688603C ) ) + level waittill( "forever" ); +#/ +/# + if ( getdvarint( _hash_FA81816F ) == 2 || getdvarint( _hash_FA81816F ) >= 4 ) + level waittill( "forever" ); +#/ + wait 1; + + if ( flag( "dog_round" ) ) + { + wait 7; + + while ( level.dog_intermission ) + wait 0.5; + + increment_dog_round_stat( "finished" ); + } + else + { + while ( true ) + { + should_wait = 0; + + if ( isdefined( level.is_ghost_round_started ) && [[ level.is_ghost_round_started ]]() ) + should_wait = 1; + else + should_wait = get_current_zombie_count() > 0 || level.zombie_total > 0 || level.intermission; + + if ( !should_wait ) + return; + + if ( flag( "end_round_wait" ) ) + return; + + wait 1.0; + } + } +} + +zombify_player() +{ + self maps\mp\zombies\_zm_score::player_died_penalty(); + bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "died", self.origin ); + self recordplayerdeathzombies(); + + if ( isdefined( level.deathcard_spawn_func ) ) + self [[ level.deathcard_spawn_func ]](); + + if ( !isdefined( level.zombie_vars["zombify_player"] ) || !level.zombie_vars["zombify_player"] ) + { + self thread spawnspectator(); + return; + } + + self.ignoreme = 1; + self.is_zombie = 1; + self.zombification_time = gettime(); + self.team = level.zombie_team; + self notify( "zombified" ); + + if ( isdefined( self.revivetrigger ) ) + self.revivetrigger delete(); + + self.revivetrigger = undefined; + self setmovespeedscale( 0.3 ); + self reviveplayer(); + self takeallweapons(); + self giveweapon( "zombie_melee", 0 ); + self switchtoweapon( "zombie_melee" ); + self disableweaponcycling(); + self disableoffhandweapons(); + setclientsysstate( "zombify", 1, self ); + self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow(); + self thread playerzombie_player_damage(); + self thread playerzombie_soundboard(); +} + +playerzombie_player_damage() +{ + self endon( "death" ); + self endon( "disconnect" ); + self thread playerzombie_infinite_health(); + self.zombiehealth = level.zombie_health; + + while ( true ) + { + self waittill( "damage", amount, attacker, directionvec, point, type ); + + if ( !isdefined( attacker ) || !isplayer( attacker ) ) + { + wait 0.05; + continue; + } + + self.zombiehealth -= amount; + + if ( self.zombiehealth <= 0 ) + { + self thread playerzombie_downed_state(); + + self waittill( "playerzombie_downed_state_done" ); + + self.zombiehealth = level.zombie_health; + } + } +} + +playerzombie_downed_state() +{ + self endon( "death" ); + self endon( "disconnect" ); + downtime = 15; + starttime = gettime(); + endtime = starttime + downtime * 1000; + self thread playerzombie_downed_hud(); + self.playerzombie_soundboard_disable = 1; + self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow_stop(); + self disableweapons(); + self allowstand( 0 ); + self allowcrouch( 0 ); + self allowprone( 1 ); + + while ( gettime() < endtime ) + wait 0.05; + + self.playerzombie_soundboard_disable = 0; + self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow(); + self enableweapons(); + self allowstand( 1 ); + self allowcrouch( 0 ); + self allowprone( 0 ); + self notify( "playerzombie_downed_state_done" ); +} + +playerzombie_downed_hud() +{ + self endon( "death" ); + self endon( "disconnect" ); + text = newclienthudelem( self ); + text.alignx = "center"; + text.aligny = "middle"; + text.horzalign = "user_center"; + text.vertalign = "user_bottom"; + text.foreground = 1; + text.font = "default"; + text.fontscale = 1.8; + text.alpha = 0; + text.color = ( 1, 1, 1 ); + text settext( &"ZOMBIE_PLAYERZOMBIE_DOWNED" ); + text.y = -113; + + if ( self issplitscreen() ) + text.y = -137; + + text fadeovertime( 0.1 ); + text.alpha = 1; + + self waittill( "playerzombie_downed_state_done" ); + + text fadeovertime( 0.1 ); + text.alpha = 0; +} + +playerzombie_infinite_health() +{ + self endon( "death" ); + self endon( "disconnect" ); + bighealth = 100000; + + while ( true ) + { + if ( self.health < bighealth ) + self.health = bighealth; + + wait 0.1; + } +} + +playerzombie_soundboard() +{ + self endon( "death" ); + self endon( "disconnect" ); + self.playerzombie_soundboard_disable = 0; + self.buttonpressed_use = 0; + self.buttonpressed_attack = 0; + self.buttonpressed_ads = 0; + self.usesound_waittime = 3000; + self.usesound_nexttime = gettime(); + usesound = "playerzombie_usebutton_sound"; + self.attacksound_waittime = 3000; + self.attacksound_nexttime = gettime(); + attacksound = "playerzombie_attackbutton_sound"; + self.adssound_waittime = 3000; + self.adssound_nexttime = gettime(); + adssound = "playerzombie_adsbutton_sound"; + self.inputsound_nexttime = gettime(); + + while ( true ) + { + if ( self.playerzombie_soundboard_disable ) + { + wait 0.05; + continue; + } + + if ( self usebuttonpressed() ) + { + if ( self can_do_input( "use" ) ) + { + self thread playerzombie_play_sound( usesound ); + self thread playerzombie_waitfor_buttonrelease( "use" ); + self.usesound_nexttime = gettime() + self.usesound_waittime; + } + } + else if ( self attackbuttonpressed() ) + { + if ( self can_do_input( "attack" ) ) + { + self thread playerzombie_play_sound( attacksound ); + self thread playerzombie_waitfor_buttonrelease( "attack" ); + self.attacksound_nexttime = gettime() + self.attacksound_waittime; + } + } + else if ( self adsbuttonpressed() ) + { + if ( self can_do_input( "ads" ) ) + { + self thread playerzombie_play_sound( adssound ); + self thread playerzombie_waitfor_buttonrelease( "ads" ); + self.adssound_nexttime = gettime() + self.adssound_waittime; + } + } + + wait 0.05; + } +} + +can_do_input( inputtype ) +{ + if ( gettime() < self.inputsound_nexttime ) + return 0; + + cando = 0; + + switch ( inputtype ) + { + case "use": + if ( gettime() >= self.usesound_nexttime && !self.buttonpressed_use ) + cando = 1; + + break; + case "attack": + if ( gettime() >= self.attacksound_nexttime && !self.buttonpressed_attack ) + cando = 1; + + break; + case "ads": + if ( gettime() >= self.usesound_nexttime && !self.buttonpressed_ads ) + cando = 1; + + break; + default: +/# + assertmsg( "can_do_input(): didn't recognize inputType of " + inputtype ); +#/ + break; + } + + return cando; +} + +playerzombie_play_sound( alias ) +{ + self play_sound_on_ent( alias ); +} + +playerzombie_waitfor_buttonrelease( inputtype ) +{ + if ( inputtype != "use" && inputtype != "attack" && inputtype != "ads" ) + { +/# + assertmsg( "playerzombie_waitfor_buttonrelease(): inputType of " + inputtype + " is not recognized." ); +#/ + return; + } + + notifystring = "waitfor_buttonrelease_" + inputtype; + self notify( notifystring ); + self endon( notifystring ); + + if ( inputtype == "use" ) + { + self.buttonpressed_use = 1; + + while ( self usebuttonpressed() ) + wait 0.05; + + self.buttonpressed_use = 0; + } + else if ( inputtype == "attack" ) + { + self.buttonpressed_attack = 1; + + while ( self attackbuttonpressed() ) + wait 0.05; + + self.buttonpressed_attack = 0; + } + else if ( inputtype == "ads" ) + { + self.buttonpressed_ads = 1; + + while ( self adsbuttonpressed() ) + wait 0.05; + + self.buttonpressed_ads = 0; + } +} + +remove_ignore_attacker() +{ + self notify( "new_ignore_attacker" ); + self endon( "new_ignore_attacker" ); + self endon( "disconnect" ); + + if ( !isdefined( level.ignore_enemy_timer ) ) + level.ignore_enemy_timer = 0.4; + + wait( level.ignore_enemy_timer ); + self.ignoreattacker = undefined; +} + +player_shield_facing_attacker( vdir, limit ) +{ + orientation = self getplayerangles(); + forwardvec = anglestoforward( orientation ); + forwardvec2d = ( forwardvec[0], forwardvec[1], 0 ); + unitforwardvec2d = vectornormalize( forwardvec2d ); + tofaceevec = vdir * -1; + tofaceevec2d = ( tofaceevec[0], tofaceevec[1], 0 ); + unittofaceevec2d = vectornormalize( tofaceevec2d ); + dotproduct = vectordot( unitforwardvec2d, unittofaceevec2d ); + return dotproduct > limit; +} + +player_damage_override_cheat( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + player_damage_override( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); + return 0; +} + +player_damage_override( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + if ( isdefined( level._game_module_player_damage_callback ) ) + self [[ level._game_module_player_damage_callback ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); + + idamage = self check_player_damage_callbacks( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); + + if ( isdefined( self.use_adjusted_grenade_damage ) && self.use_adjusted_grenade_damage ) + { + self.use_adjusted_grenade_damage = undefined; + + if ( self.health > idamage ) + return idamage; + } + + if ( !idamage ) + return 0; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + return 0; + + if ( isdefined( einflictor ) ) + { + if ( isdefined( einflictor.water_damage ) && einflictor.water_damage ) + return 0; + } + + if ( isdefined( eattacker ) && ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie || isplayer( eattacker ) ) ) + { + if ( isdefined( self.hasriotshield ) && self.hasriotshield && isdefined( vdir ) ) + { + if ( isdefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped ) + { + if ( self player_shield_facing_attacker( vdir, 0.2 ) && isdefined( self.player_shield_apply_damage ) ) + { + self [[ self.player_shield_apply_damage ]]( 100, 0 ); + return 0; + } + } + else if ( !isdefined( self.riotshieldentity ) ) + { + if ( !self player_shield_facing_attacker( vdir, -0.2 ) && isdefined( self.player_shield_apply_damage ) ) + { + self [[ self.player_shield_apply_damage ]]( 100, 0 ); + return 0; + } + } + } + } + + if ( isdefined( eattacker ) ) + { + if ( isdefined( self.ignoreattacker ) && self.ignoreattacker == eattacker ) + return 0; + + if ( isdefined( self.is_zombie ) && self.is_zombie && ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie ) ) + return 0; + + if ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie ) + { + self.ignoreattacker = eattacker; + self thread remove_ignore_attacker(); + + if ( isdefined( eattacker.custom_damage_func ) ) + idamage = eattacker [[ eattacker.custom_damage_func ]]( self ); + else if ( isdefined( eattacker.meleedamage ) ) + idamage = eattacker.meleedamage; + else + idamage = 50; + } + + eattacker notify( "hit_player" ); + + if ( smeansofdeath != "MOD_FALLING" ) + { + self thread playswipesound( smeansofdeath, eattacker ); + + if ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie || isplayer( eattacker ) ) + self playrumbleonentity( "damage_heavy" ); + + canexert = 1; + + if ( isdefined( level.pers_upgrade_flopper ) && level.pers_upgrade_flopper ) + { + if ( isdefined( self.pers_upgrades_awarded["flopper"] ) && self.pers_upgrades_awarded["flopper"] ) + canexert = smeansofdeath != "MOD_PROJECTILE_SPLASH" && smeansofdeath != "MOD_GRENADE" && smeansofdeath != "MOD_GRENADE_SPLASH"; + } + + if ( isdefined( canexert ) && canexert ) + { + if ( randomintrange( 0, 1 ) == 0 ) + self thread maps\mp\zombies\_zm_audio::playerexert( "hitmed" ); + else + self thread maps\mp\zombies\_zm_audio::playerexert( "hitlrg" ); + } + } + } + + finaldamage = idamage; + + if ( is_placeable_mine( sweapon ) || sweapon == "freezegun_zm" || sweapon == "freezegun_upgraded_zm" ) + return 0; + + if ( isdefined( self.player_damage_override ) ) + self thread [[ self.player_damage_override ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); + + if ( smeansofdeath == "MOD_FALLING" ) + { + if ( self hasperk( "specialty_flakjacket" ) && isdefined( self.divetoprone ) && self.divetoprone == 1 ) + { + if ( isdefined( level.zombiemode_divetonuke_perk_func ) ) + [[ level.zombiemode_divetonuke_perk_func ]]( self, self.origin ); + + return 0; + } + + if ( isdefined( level.pers_upgrade_flopper ) && level.pers_upgrade_flopper ) + { + if ( self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_flopper_damage_check( smeansofdeath, idamage ) ) + return 0; + } + } + + if ( smeansofdeath == "MOD_PROJECTILE" || smeansofdeath == "MOD_PROJECTILE_SPLASH" || smeansofdeath == "MOD_GRENADE" || smeansofdeath == "MOD_GRENADE_SPLASH" ) + { + if ( self hasperk( "specialty_flakjacket" ) ) + return 0; + + if ( isdefined( level.pers_upgrade_flopper ) && level.pers_upgrade_flopper ) + { + if ( isdefined( self.pers_upgrades_awarded["flopper"] ) && self.pers_upgrades_awarded["flopper"] ) + return 0; + } + + if ( self.health > 75 && !( isdefined( self.is_zombie ) && self.is_zombie ) ) + return 75; + } + + if ( idamage < self.health ) + { + if ( isdefined( eattacker ) ) + { + if ( isdefined( level.custom_kill_damaged_vo ) ) + eattacker thread [[ level.custom_kill_damaged_vo ]]( self ); + else + eattacker.sound_damage_player = self; + + if ( isdefined( eattacker.has_legs ) && !eattacker.has_legs ) + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "crawl_hit" ); + else if ( isdefined( eattacker.animname ) && eattacker.animname == "monkey_zombie" ) + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "monkey_hit" ); + } + + return finaldamage; + } + + if ( isdefined( eattacker ) ) + { + if ( isdefined( eattacker.animname ) && eattacker.animname == "zombie_dog" ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "killed_by_zdog" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "killed_by_zdog" ); + } + else if ( isdefined( eattacker.is_avogadro ) && eattacker.is_avogadro ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "killed_by_avogadro", 0 ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "killed_by_avogadro" ); + } + } + + self thread clear_path_timers(); + + if ( level.intermission ) + level waittill( "forever" ); + + if ( level.scr_zm_ui_gametype == "zcleansed" && idamage > 0 ) + { + if ( isdefined( eattacker ) && isplayer( eattacker ) && eattacker.team != self.team && ( !( isdefined( self.laststand ) && self.laststand ) && !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || !isdefined( self.last_player_attacker ) ) ) + { + if ( isdefined( eattacker.maxhealth ) && ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie ) ) + eattacker.health = eattacker.maxhealth; + + if ( isdefined( level.player_kills_player ) ) + self thread [[ level.player_kills_player ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); + } + } + + if ( self.lives > 0 && self hasperk( "specialty_finalstand" ) ) + { + self.lives--; + + if ( isdefined( level.chugabud_laststand_func ) ) + { + self thread [[ level.chugabud_laststand_func ]](); + return 0; + } + } + + players = get_players(); + count = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] == self || players[i].is_zombie || players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() || players[i].sessionstate == "spectator" ) + count++; + } + + if ( count < players.size || isdefined( level._game_module_game_end_check ) && ![[ level._game_module_game_end_check ]]() ) + { + if ( isdefined( self.lives ) && self.lives > 0 && ( isdefined( level.force_solo_quick_revive ) && level.force_solo_quick_revive ) && self hasperk( "specialty_quickrevive" ) ) + self thread wait_and_revive(); + + return finaldamage; + } + + if ( players.size == 1 && flag( "solo_game" ) ) + { + if ( self.lives == 0 || !self hasperk( "specialty_quickrevive" ) ) + self.intermission = 1; + } + + solo_death = players.size == 1 && flag( "solo_game" ) && ( self.lives == 0 || !self hasperk( "specialty_quickrevive" ) ); + non_solo_death = count > 1 || players.size == 1 && !flag( "solo_game" ); + + if ( ( solo_death || non_solo_death ) && !( isdefined( level.no_end_game_check ) && level.no_end_game_check ) ) + { + level notify( "stop_suicide_trigger" ); + self thread maps\mp\zombies\_zm_laststand::playerlaststand( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ); + + if ( !isdefined( vdir ) ) + vdir = ( 1, 0, 0 ); + + self fakedamagefrom( vdir ); + + if ( isdefined( level.custom_player_fake_death ) ) + self thread [[ level.custom_player_fake_death ]]( vdir, smeansofdeath ); + else + self thread player_fake_death(); + } + + if ( count == players.size && !( isdefined( level.no_end_game_check ) && level.no_end_game_check ) ) + { + if ( players.size == 1 && flag( "solo_game" ) ) + { + if ( self.lives == 0 || !self hasperk( "specialty_quickrevive" ) ) + { + self.lives = 0; + level notify( "pre_end_game" ); + wait_network_frame(); + + if ( flag( "dog_round" ) ) + increment_dog_round_stat( "lost" ); + + level notify( "end_game" ); + } + else + return finaldamage; + } + else + { + level notify( "pre_end_game" ); + wait_network_frame(); + + if ( flag( "dog_round" ) ) + increment_dog_round_stat( "lost" ); + + level notify( "end_game" ); + } + + return 0; + } + else + { + surface = "flesh"; + return finaldamage; + } +} + +clear_path_timers() +{ + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( isdefined( zombie.favoriteenemy ) && zombie.favoriteenemy == self ) + zombie.zombie_path_timer = 0; + } +} + +check_player_damage_callbacks( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + if ( !isdefined( level.player_damage_callbacks ) ) + return idamage; + + for ( i = 0; i < level.player_damage_callbacks.size; i++ ) + { + newdamage = self [[ level.player_damage_callbacks[i] ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); + + if ( -1 != newdamage ) + return newdamage; + } + + return idamage; +} + +register_player_damage_callback( func ) +{ + if ( !isdefined( level.player_damage_callbacks ) ) + level.player_damage_callbacks = []; + + level.player_damage_callbacks[level.player_damage_callbacks.size] = func; +} + +wait_and_revive() +{ + flag_set( "wait_and_revive" ); + + if ( isdefined( self.waiting_to_revive ) && self.waiting_to_revive == 1 ) + return; + + if ( isdefined( self.pers_upgrades_awarded["perk_lose"] ) && self.pers_upgrades_awarded["perk_lose"] ) + self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_perk_lose_save(); + + self.waiting_to_revive = 1; + + if ( isdefined( level.exit_level_func ) ) + self thread [[ level.exit_level_func ]](); + else if ( get_players().size == 1 ) + self thread default_exit_level(); + + solo_revive_time = 10.0; + self.revive_hud settext( &"ZOMBIE_REVIVING_SOLO", self ); + self maps\mp\zombies\_zm_laststand::revive_hud_show_n_fade( solo_revive_time ); + flag_wait_or_timeout( "instant_revive", solo_revive_time ); + + if ( flag( "instant_revive" ) ) + self maps\mp\zombies\_zm_laststand::revive_hud_show_n_fade( 1.0 ); + + flag_clear( "wait_and_revive" ); + self maps\mp\zombies\_zm_laststand::auto_revive( self ); + self.lives--; + self.waiting_to_revive = 0; + + if ( isdefined( self.pers_upgrades_awarded["perk_lose"] ) && self.pers_upgrades_awarded["perk_lose"] ) + self thread maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_perk_lose_restore(); +} + +actor_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + if ( !isdefined( self ) || !isdefined( attacker ) ) + return damage; + + if ( weapon == "tazer_knuckles_zm" || weapon == "jetgun_zm" ) + self.knuckles_extinguish_flames = 1; + else if ( weapon != "none" ) + self.knuckles_extinguish_flames = undefined; + + if ( isdefined( attacker.animname ) && attacker.animname == "quad_zombie" ) + { + if ( isdefined( self.animname ) && self.animname == "quad_zombie" ) + return 0; + } + + if ( !isplayer( attacker ) && isdefined( self.non_attacker_func ) ) + { + if ( isdefined( self.non_attack_func_takes_attacker ) && self.non_attack_func_takes_attacker ) + return self [[ self.non_attacker_func ]]( damage, weapon, attacker ); + else + return self [[ self.non_attacker_func ]]( damage, weapon ); + } + + if ( !isplayer( attacker ) && !isplayer( self ) ) + return damage; + + if ( !isdefined( damage ) || !isdefined( meansofdeath ) ) + return damage; + + if ( meansofdeath == "" ) + return damage; + + old_damage = damage; + final_damage = damage; + + if ( isdefined( self.actor_damage_func ) ) + final_damage = [[ self.actor_damage_func ]]( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); +/# + if ( getdvarint( _hash_5ABA6445 ) ) + println( "Perk/> Damage Factor: " + final_damage / old_damage + " - Pre Damage: " + old_damage + " - Post Damage: " + final_damage ); +#/ + if ( attacker.classname == "script_vehicle" && isdefined( attacker.owner ) ) + attacker = attacker.owner; + + if ( isdefined( self.in_water ) && self.in_water ) + { + if ( int( final_damage ) >= self.health ) + self.water_damage = 1; + } + + attacker thread maps\mp\gametypes_zm\_weapons::checkhit( weapon ); + + if ( attacker maps\mp\zombies\_zm_pers_upgrades_functions::pers_mulit_kill_headshot_active() && is_headshot( weapon, shitloc, meansofdeath ) ) + final_damage *= 2; + + if ( isdefined( level.headshots_only ) && level.headshots_only && isdefined( attacker ) && isplayer( attacker ) ) + { + if ( meansofdeath == "MOD_MELEE" && ( shitloc == "head" || shitloc == "helmet" ) ) + return int( final_damage ); + + if ( is_explosive_damage( meansofdeath ) ) + return int( final_damage ); + else if ( !is_headshot( weapon, shitloc, meansofdeath ) ) + return 0; + } + + return int( final_damage ); +} + +actor_damage_override_wrapper( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + damage_override = self actor_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + + if ( damage_override < self.health || !( isdefined( self.dont_die_on_me ) && self.dont_die_on_me ) ) + self finishactordamage( inflictor, attacker, damage_override, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); +} + +actor_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) +{ + if ( game["state"] == "postgame" ) + return; + + if ( isai( attacker ) && isdefined( attacker.script_owner ) ) + { + if ( attacker.script_owner.team != self.aiteam ) + attacker = attacker.script_owner; + } + + if ( attacker.classname == "script_vehicle" && isdefined( attacker.owner ) ) + attacker = attacker.owner; + + if ( isdefined( attacker ) && isplayer( attacker ) ) + { + multiplier = 1; + + if ( is_headshot( sweapon, shitloc, smeansofdeath ) ) + multiplier = 1.5; + + type = undefined; + + if ( isdefined( self.animname ) ) + { + switch ( self.animname ) + { + case "quad_zombie": + type = "quadkill"; + break; + case "ape_zombie": + type = "apekill"; + break; + case "zombie": + type = "zombiekill"; + break; + case "zombie_dog": + type = "dogkill"; + break; + } + } + } + + if ( isdefined( self.is_ziplining ) && self.is_ziplining ) + self.deathanim = undefined; + + if ( isdefined( self.actor_killed_override ) ) + self [[ self.actor_killed_override ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ); +} + +round_end_monitor() +{ + while ( true ) + { + level waittill( "end_of_round" ); + + maps\mp\_demo::bookmark( "zm_round_end", gettime(), undefined, undefined, 1 ); + bbpostdemostreamstatsforround( level.round_number ); + wait 0.05; + } +} + +end_game() +{ + level waittill( "end_game" ); + + check_end_game_intermission_delay(); +/# + println( "end_game TRIGGERED " ); +#/ + clientnotify( "zesn" ); + + if ( isdefined( level.sndgameovermusicoverride ) ) + level thread maps\mp\zombies\_zm_audio::change_zombie_music( level.sndgameovermusicoverride ); + else + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "game_over" ); + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + setclientsysstate( "lsm", "0", players[i] ); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] player_is_in_laststand() ) + { + players[i] recordplayerdeathzombies(); + players[i] maps\mp\zombies\_zm_stats::increment_player_stat( "deaths" ); + players[i] maps\mp\zombies\_zm_stats::increment_client_stat( "deaths" ); + players[i] maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat(); + } + + if ( isdefined( players[i].revivetexthud ) ) + players[i].revivetexthud destroy(); + } + + stopallrumbles(); + level.intermission = 1; + level.zombie_vars["zombie_powerup_insta_kill_time"] = 0; + level.zombie_vars["zombie_powerup_fire_sale_time"] = 0; + level.zombie_vars["zombie_powerup_point_doubler_time"] = 0; + wait 0.1; + game_over = []; + survived = []; + players = get_players(); + setmatchflag( "disableIngameMenu", 1 ); + + foreach ( player in players ) + { + player closemenu(); + player closeingamemenu(); + } + + if ( !isdefined( level._supress_survived_screen ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( level.custom_game_over_hud_elem ) ) + game_over[i] = [[ level.custom_game_over_hud_elem ]]( players[i] ); + else + { + game_over[i] = newclienthudelem( players[i] ); + game_over[i].alignx = "center"; + game_over[i].aligny = "middle"; + game_over[i].horzalign = "center"; + game_over[i].vertalign = "middle"; + game_over[i].y -= 130; + game_over[i].foreground = 1; + game_over[i].fontscale = 3; + game_over[i].alpha = 0; + game_over[i].color = ( 1, 1, 1 ); + game_over[i].hidewheninmenu = 1; + game_over[i] settext( &"ZOMBIE_GAME_OVER" ); + game_over[i] fadeovertime( 1 ); + game_over[i].alpha = 1; + + if ( players[i] issplitscreen() ) + { + game_over[i].fontscale = 2; + game_over[i].y += 40; + } + } + + survived[i] = newclienthudelem( players[i] ); + survived[i].alignx = "center"; + survived[i].aligny = "middle"; + survived[i].horzalign = "center"; + survived[i].vertalign = "middle"; + survived[i].y -= 100; + survived[i].foreground = 1; + survived[i].fontscale = 2; + survived[i].alpha = 0; + survived[i].color = ( 1, 1, 1 ); + survived[i].hidewheninmenu = 1; + + if ( players[i] issplitscreen() ) + { + survived[i].fontscale = 1.5; + survived[i].y += 40; + } + + if ( level.round_number < 2 ) + { + if ( level.script == "zombie_moon" ) + { + if ( !isdefined( level.left_nomans_land ) ) + { + nomanslandtime = level.nml_best_time; + player_survival_time = int( nomanslandtime / 1000 ); + player_survival_time_in_mins = maps\mp\zombies\_zm::to_mins( player_survival_time ); + survived[i] settext( &"ZOMBIE_SURVIVED_NOMANS", player_survival_time_in_mins ); + } + else if ( level.left_nomans_land == 2 ) + survived[i] settext( &"ZOMBIE_SURVIVED_ROUND" ); + } + else + survived[i] settext( &"ZOMBIE_SURVIVED_ROUND" ); + } + else + survived[i] settext( &"ZOMBIE_SURVIVED_ROUNDS", level.round_number ); + + survived[i] fadeovertime( 1 ); + survived[i].alpha = 1; + } + } + + if ( isdefined( level.custom_end_screen ) ) + level [[ level.custom_end_screen ]](); + + for ( i = 0; i < players.size; i++ ) + { + players[i] setclientammocounterhide( 1 ); + players[i] setclientminiscoreboardhide( 1 ); + } + + uploadstats(); + maps\mp\zombies\_zm_stats::update_players_stats_at_match_end( players ); + maps\mp\zombies\_zm_stats::update_global_counters_on_match_end(); + wait 1; + wait 3.95; + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( player.sessionstate ) && player.sessionstate == "spectator" ) + player.sessionstate = "playing"; + } + + wait 0.05; + players = get_players(); + + if ( !isdefined( level._supress_survived_screen ) ) + { + for ( i = 0; i < players.size; i++ ) + { + survived[i] destroy(); + game_over[i] destroy(); + } + } + else + { + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].survived_hud ) ) + players[i].survived_hud destroy(); + + if ( isdefined( players[i].game_over_hud ) ) + players[i].game_over_hud destroy(); + } + } + + intermission(); + wait( level.zombie_vars["zombie_intermission_time"] ); + level notify( "stop_intermission" ); + array_thread( get_players(), ::player_exit_level ); + bbprint( "zombie_epilogs", "rounds %d", level.round_number ); + wait 1.5; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] cameraactivate( 0 ); + + exitlevel( 0 ); + wait 666; +} + +disable_end_game_intermission( delay ) +{ + level.disable_intermission = 1; + wait( delay ); + level.disable_intermission = undefined; +} + +check_end_game_intermission_delay() +{ + if ( isdefined( level.disable_intermission ) ) + { + while ( true ) + { + if ( !isdefined( level.disable_intermission ) ) + break; + + wait 0.01; + } + } +} + +upload_leaderboards() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] uploadleaderboards(); +} + +initializestattracking() +{ + level.global_zombies_killed = 0; + level.zombies_timeout_spawn = 0; + level.zombies_timeout_playspace = 0; + level.zombies_timeout_undamaged = 0; + level.zombie_player_killed_count = 0; + level.zombie_trap_killed_count = 0; + level.zombie_pathing_failed = 0; + level.zombie_breadcrumb_failed = 0; +} + +uploadglobalstatcounters() +{ + incrementcounter( "global_zombies_killed", level.global_zombies_killed ); + incrementcounter( "global_zombies_killed_by_players", level.zombie_player_killed_count ); + incrementcounter( "global_zombies_killed_by_traps", level.zombie_trap_killed_count ); +} + +player_fake_death() +{ + level notify( "fake_death" ); + self notify( "fake_death" ); + self takeallweapons(); + self allowstand( 0 ); + self allowcrouch( 0 ); + self allowprone( 1 ); + self.ignoreme = 1; + self enableinvulnerability(); + wait 1; + self freezecontrols( 1 ); +} + +player_exit_level() +{ + self allowstand( 1 ); + self allowcrouch( 0 ); + self allowprone( 0 ); + + if ( isdefined( self.game_over_bg ) ) + { + self.game_over_bg.foreground = 1; + self.game_over_bg.sort = 100; + self.game_over_bg fadeovertime( 1 ); + self.game_over_bg.alpha = 1; + } +} + +player_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + level waittill( "forever" ); +} + +player_zombie_breadcrumb() +{ + self notify( "stop_player_zombie_breadcrumb" ); + self endon( "stop_player_zombie_breadcrumb" ); + self endon( "disconnect" ); + self endon( "spawned_spectator" ); + level endon( "intermission" ); + self.zombie_breadcrumbs = []; + self.zombie_breadcrumb_distance = 576; + self.zombie_breadcrumb_area_num = 3; + self.zombie_breadcrumb_area_distance = 16; + self store_crumb( self.origin ); + last_crumb = self.origin; + self thread debug_breadcrumbs(); + + while ( true ) + { + wait_time = 0.1; + + if ( self.ignoreme ) + { + wait( wait_time ); + continue; + } + + store_crumb = 1; + airborne = 0; + crumb = self.origin; + + if ( !self isonground() && self isinvehicle() ) + { + trace = bullettrace( self.origin + vectorscale( ( 0, 0, 1 ), 10.0 ), self.origin, 0, undefined ); + crumb = trace["position"]; + } + + if ( !airborne && distancesquared( crumb, last_crumb ) < self.zombie_breadcrumb_distance ) + store_crumb = 0; + + if ( airborne && self isonground() ) + { + store_crumb = 1; + airborne = 0; + } + + if ( isdefined( level.custom_breadcrumb_store_func ) ) + store_crumb = self [[ level.custom_breadcrumb_store_func ]]( store_crumb ); + + if ( isdefined( level.custom_airborne_func ) ) + airborne = self [[ level.custom_airborne_func ]]( airborne ); + + if ( store_crumb ) + { + debug_print( "Player is storing breadcrumb " + crumb ); + + if ( isdefined( self.node ) ) + debug_print( "has closest node " ); + + last_crumb = crumb; + self store_crumb( crumb ); + } + + wait( wait_time ); + } +} + +store_crumb( origin ) +{ + offsets = []; + height_offset = 32; + index = 0; + + for ( j = 1; j <= self.zombie_breadcrumb_area_num; j++ ) + { + offset = j * self.zombie_breadcrumb_area_distance; + offsets[0] = ( origin[0] - offset, origin[1], origin[2] ); + offsets[1] = ( origin[0] + offset, origin[1], origin[2] ); + offsets[2] = ( origin[0], origin[1] - offset, origin[2] ); + offsets[3] = ( origin[0], origin[1] + offset, origin[2] ); + offsets[4] = ( origin[0] - offset, origin[1], origin[2] + height_offset ); + offsets[5] = ( origin[0] + offset, origin[1], origin[2] + height_offset ); + offsets[6] = ( origin[0], origin[1] - offset, origin[2] + height_offset ); + offsets[7] = ( origin[0], origin[1] + offset, origin[2] + height_offset ); + + for ( i = 0; i < offsets.size; i++ ) + { + self.zombie_breadcrumbs[index] = offsets[i]; + index++; + } + } +} + +to_mins( seconds ) +{ + hours = 0; + minutes = 0; + + if ( seconds > 59 ) + { + minutes = int( seconds / 60 ); + seconds = int( seconds * 1000 ) % 60000; + seconds *= 0.001; + + if ( minutes > 59 ) + { + hours = int( minutes / 60 ); + minutes = int( minutes * 1000 ) % 60000; + minutes *= 0.001; + } + } + + if ( hours < 10 ) + hours = "0" + hours; + + if ( minutes < 10 ) + minutes = "0" + minutes; + + seconds = int( seconds ); + + if ( seconds < 10 ) + seconds = "0" + seconds; + + combined = "" + hours + ":" + minutes + ":" + seconds; + return combined; +} + +intermission() +{ + level.intermission = 1; + level notify( "intermission" ); + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + setclientsysstate( "levelNotify", "zi", players[i] ); + players[i] setclientthirdperson( 0 ); + players[i] resetfov(); + players[i].health = 100; + players[i] thread [[ level.custom_intermission ]](); + players[i] stopsounds(); + } + + wait 0.25; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + setclientsysstate( "lsm", "0", players[i] ); + + level thread zombie_game_over_death(); +} + +zombie_game_over_death() +{ + zombies = getaiarray( level.zombie_team ); + + for ( i = 0; i < zombies.size; i++ ) + { + if ( !isalive( zombies[i] ) ) + continue; + + zombies[i] setgoalpos( zombies[i].origin ); + } + + for ( i = 0; i < zombies.size; i++ ) + { + if ( !isalive( zombies[i] ) ) + continue; + + if ( isdefined( zombies[i].ignore_game_over_death ) && zombies[i].ignore_game_over_death ) + continue; + + wait( 0.5 + randomfloat( 2 ) ); + + if ( isdefined( zombies[i] ) ) + { + zombies[i] maps\mp\zombies\_zm_spawner::zombie_head_gib(); + zombies[i] dodamage( zombies[i].health + 666, zombies[i].origin ); + } + } +} + +player_intermission() +{ + self closemenu(); + self closeingamemenu(); + level endon( "stop_intermission" ); + self endon( "disconnect" ); + self endon( "death" ); + self notify( "_zombie_game_over" ); + self.score = self.score_total; + self.sessionstate = "intermission"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + points = getstructarray( "intermission", "targetname" ); + + if ( !isdefined( points ) || points.size == 0 ) + { + points = getentarray( "info_intermission", "classname" ); + + if ( points.size < 1 ) + { +/# + println( "NO info_intermission POINTS IN MAP" ); +#/ + return; + } + } + + self.game_over_bg = newclienthudelem( self ); + self.game_over_bg.horzalign = "fullscreen"; + self.game_over_bg.vertalign = "fullscreen"; + self.game_over_bg setshader( "black", 640, 480 ); + self.game_over_bg.alpha = 1; + org = undefined; + + while ( true ) + { + points = array_randomize( points ); + + for ( i = 0; i < points.size; i++ ) + { + point = points[i]; + + if ( !isdefined( org ) ) + self spawn( point.origin, point.angles ); + + if ( isdefined( points[i].target ) ) + { + if ( !isdefined( org ) ) + { + org = spawn( "script_model", self.origin + vectorscale( ( 0, 0, -1 ), 60.0 ) ); + org setmodel( "tag_origin" ); + } + + org.origin = points[i].origin; + org.angles = points[i].angles; + + for ( j = 0; j < get_players().size; j++ ) + { + player = get_players()[j]; + player camerasetposition( org ); + player camerasetlookat(); + player cameraactivate( 1 ); + } + + speed = 20; + + if ( isdefined( points[i].speed ) ) + speed = points[i].speed; + + target_point = getstruct( points[i].target, "targetname" ); + dist = distance( points[i].origin, target_point.origin ); + time = dist / speed; + q_time = time * 0.25; + + if ( q_time > 1 ) + q_time = 1; + + self.game_over_bg fadeovertime( q_time ); + self.game_over_bg.alpha = 0; + org moveto( target_point.origin, time, q_time, q_time ); + org rotateto( target_point.angles, time, q_time, q_time ); + wait( time - q_time ); + self.game_over_bg fadeovertime( q_time ); + self.game_over_bg.alpha = 1; + wait( q_time ); + continue; + } + + self.game_over_bg fadeovertime( 1 ); + self.game_over_bg.alpha = 0; + wait 5; + self.game_over_bg thread fade_up_over_time( 1 ); + } + } +} + +fade_up_over_time( t ) +{ + self fadeovertime( t ); + self.alpha = 1; +} + +default_exit_level() +{ + zombies = getaiarray( level.zombie_team ); + + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i].ignore_solo_last_stand ) && zombies[i].ignore_solo_last_stand ) + continue; + + if ( isdefined( zombies[i].find_exit_point ) ) + { + zombies[i] thread [[ zombies[i].find_exit_point ]](); + continue; + } + + if ( zombies[i].ignoreme ) + { + zombies[i] thread default_delayed_exit(); + continue; + } + + zombies[i] thread default_find_exit_point(); + } +} + +default_delayed_exit() +{ + self endon( "death" ); + + while ( true ) + { + if ( !flag( "wait_and_revive" ) ) + return; + + if ( !self.ignoreme ) + break; + + wait 0.1; + } + + self thread default_find_exit_point(); +} + +default_find_exit_point() +{ + self endon( "death" ); + player = get_players()[0]; + dist_zombie = 0; + dist_player = 0; + dest = 0; + away = vectornormalize( self.origin - player.origin ); + endpos = self.origin + vectorscale( away, 600 ); + locs = array_randomize( level.enemy_dog_locations ); + + for ( i = 0; i < locs.size; i++ ) + { + dist_zombie = distancesquared( locs[i].origin, endpos ); + dist_player = distancesquared( locs[i].origin, player.origin ); + + if ( dist_zombie < dist_player ) + { + dest = i; + break; + } + } + + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + + if ( isdefined( locs[dest] ) ) + self setgoalpos( locs[dest].origin ); + + while ( true ) + { + b_passed_override = 1; + + if ( isdefined( level.default_find_exit_position_override ) ) + b_passed_override = [[ level.default_find_exit_position_override ]](); + + if ( !flag( "wait_and_revive" ) && b_passed_override ) + break; + + wait 0.1; + } + + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); +} + +play_level_start_vox_delayed() +{ + wait 3; + players = get_players(); + num = randomintrange( 0, players.size ); + players[num] maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "intro" ); +} + +register_sidequest( id, sidequest_stat ) +{ + if ( !isdefined( level.zombie_sidequest_stat ) ) + { + level.zombie_sidequest_previously_completed = []; + level.zombie_sidequest_stat = []; + } + + level.zombie_sidequest_stat[id] = sidequest_stat; + flag_wait( "start_zombie_round_logic" ); + level.zombie_sidequest_previously_completed[id] = 0; + + if ( level.systemlink || getdvarint( "splitscreen_playerCount" ) == get_players().size ) + return; + + if ( isdefined( level.zm_disable_recording_stats ) && level.zm_disable_recording_stats ) + return; + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] maps\mp\zombies\_zm_stats::get_global_stat( level.zombie_sidequest_stat[id] ) ) + { + level.zombie_sidequest_previously_completed[id] = 1; + return; + } + } +} + +is_sidequest_previously_completed( id ) +{ + return isdefined( level.zombie_sidequest_previously_completed[id] ) && level.zombie_sidequest_previously_completed[id]; +} + +set_sidequest_completed( id ) +{ + level notify( "zombie_sidequest_completed", id ); + level.zombie_sidequest_previously_completed[id] = 1; + + if ( level.systemlink ) + return; + + if ( getdvarint( "splitscreen_playerCount" ) == get_players().size ) + return; + + if ( isdefined( level.zm_disable_recording_stats ) && level.zm_disable_recording_stats ) + return; + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( level.zombie_sidequest_stat[id] ) ) + players[i] maps\mp\zombies\_zm_stats::add_global_stat( level.zombie_sidequest_stat[id], 1 ); + } +} + +playswipesound( mod, attacker ) +{ + if ( isdefined( attacker.is_zombie ) && attacker.is_zombie ) + { + self playsoundtoplayer( "evt_player_swiped", self ); + return; + } +} + +precache_zombie_leaderboards() +{ + if ( sessionmodeissystemlink() ) + return; + + globalleaderboards = "LB_ZM_GB_BULLETS_FIRED_AT "; + globalleaderboards += "LB_ZM_GB_BULLETS_HIT_AT "; + globalleaderboards += "LB_ZM_GB_DEATHS_AT "; + globalleaderboards += "LB_ZM_GB_DISTANCE_TRAVELED_AT "; + globalleaderboards += "LB_ZM_GB_DOORS_PURCHASED_AT "; + globalleaderboards += "LB_ZM_GB_DOWNS_AT "; + globalleaderboards += "LB_ZM_GB_GIBS_AT "; + globalleaderboards += "LB_ZM_GB_GRENADE_KILLS_AT "; + globalleaderboards += "LB_ZM_GB_HEADSHOTS_AT "; + globalleaderboards += "LB_ZM_GB_KILLS_AT "; + globalleaderboards += "LB_ZM_GB_PERKS_DRANK_AT "; + globalleaderboards += "LB_ZM_GB_REVIVES_AT "; + + if ( sessionmodeisprivateonlinegame() ) + { + precacheleaderboards( globalleaderboards ); + return; + } + + maplocationname = level.scr_zm_map_start_location; + + if ( ( maplocationname == "default" || maplocationname == "" ) && isdefined( level.default_start_location ) ) + maplocationname = level.default_start_location; + + if ( ( level.scr_zm_ui_gametype_group == "zclassic" || level.scr_zm_ui_gametype_group == "zsurvival" ) && level.scr_zm_ui_gametype != "zcleansed" ) + { + expectedplayernum = getnumexpectedplayers(); + + if ( expectedplayernum == 1 ) + gamemodeleaderboard = "LB_ZM_GM_" + level.scr_zm_ui_gametype + "_" + maplocationname + "_" + expectedplayernum + "PLAYER"; + else + gamemodeleaderboard = "LB_ZM_GM_" + level.scr_zm_ui_gametype + "_" + maplocationname + "_" + expectedplayernum + "PLAYERS"; + } + else + gamemodeleaderboard = "LB_ZM_GM_" + level.scr_zm_ui_gametype + "_" + maplocationname; + + precacheleaderboards( globalleaderboards + gamemodeleaderboard ); +} + +zm_on_player_connect() +{ + if ( level.passed_introscreen ) + self setclientuivisibilityflag( "hud_visible", 1 ); + + thread refresh_player_navcard_hud(); + self thread watchdisconnect(); +} + +zm_on_player_disconnect() +{ + thread refresh_player_navcard_hud(); +} + +watchdisconnect() +{ + self notify( "watchDisconnect" ); + self endon( "watchDisconnect" ); + + self waittill( "disconnect" ); + + zm_on_player_disconnect(); +} + +increment_dog_round_stat( stat ) +{ + players = get_players(); + + foreach ( player in players ) + player maps\mp\zombies\_zm_stats::increment_client_stat( "zdog_rounds_" + stat ); +} + +setup_player_navcard_hud() +{ + flag_wait( "start_zombie_round_logic" ); + thread refresh_player_navcard_hud(); +} + +refresh_player_navcard_hud() +{ + if ( !isdefined( level.navcards ) ) + return; + + players = get_players(); + + foreach ( player in players ) + { + navcard_bits = 0; + + for ( i = 0; i < level.navcards.size; i++ ) + { + hasit = player maps\mp\zombies\_zm_stats::get_global_stat( level.navcards[i] ); + + if ( isdefined( player.navcard_grabbed ) && player.navcard_grabbed == level.navcards[i] ) + hasit = 1; + + if ( hasit ) + navcard_bits += ( 1 << i ); + } + + wait_network_frame(); + player setclientfield( "navcard_held", 0 ); + + if ( navcard_bits > 0 ) + { + wait_network_frame(); + player setclientfield( "navcard_held", navcard_bits ); + } + } +} + +check_quickrevive_for_hotjoin( disconnecting_player ) +{ + solo_mode = 0; + subtract_num = 0; + should_update = 0; + + if ( isdefined( disconnecting_player ) ) + subtract_num = 1; + + players = get_players(); + + if ( players.size - subtract_num == 1 || isdefined( level.force_solo_quick_revive ) && level.force_solo_quick_revive ) + { + solo_mode = 1; + + if ( !flag( "solo_game" ) ) + should_update = 1; + + flag_set( "solo_game" ); + } + else + { + if ( flag( "solo_game" ) ) + should_update = 1; + + flag_clear( "solo_game" ); + } + + level.using_solo_revive = solo_mode; + level.revive_machine_is_solo = solo_mode; + set_default_laststand_pistol( solo_mode ); + + if ( should_update && isdefined( level.quick_revive_machine ) ) + update_quick_revive( solo_mode ); +} + +set_default_laststand_pistol( solo_mode ) +{ + if ( !solo_mode ) + level.laststandpistol = level.default_laststandpistol; + else + level.laststandpistol = level.default_solo_laststandpistol; +} + +update_quick_revive( solo_mode = 0 ) +{ + clip = undefined; + + if ( isdefined( level.quick_revive_machine_clip ) ) + clip = level.quick_revive_machine_clip; + + level.quick_revive_machine thread maps\mp\zombies\_zm_perks::reenable_quickrevive( clip, solo_mode ); +} + +player_too_many_players_check() +{ + max_players = 4; + + if ( level.scr_zm_ui_gametype == "zgrief" || level.scr_zm_ui_gametype == "zmeat" ) + max_players = 8; + + if ( get_players().size > max_players ) + { + maps\mp\zombies\_zm_game_module::freeze_players( 1 ); + level notify( "end_game" ); + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_ai_basic.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_ai_basic.gsc new file mode 100644 index 0000000..96dcfee --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_ai_basic.gsc @@ -0,0 +1,554 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\animscripts\zm_run; +#include maps\mp\animscripts\zm_shared; + +find_flesh() +{ + self endon( "death" ); + level endon( "intermission" ); + self endon( "stop_find_flesh" ); + + if ( level.intermission ) + return; + + self.ai_state = "find_flesh"; + self.helitarget = 1; + self.ignoreme = 0; + self.nododgemove = 1; + self.ignore_player = []; + self maps\mp\zombies\_zm_spawner::zombie_history( "find flesh -> start" ); + self.goalradius = 32; + + if ( isdefined( self.custom_goalradius_override ) ) + self.goalradius = self.custom_goalradius_override; + + while ( true ) + { + zombie_poi = undefined; + + if ( isdefined( level.zombietheaterteleporterseeklogicfunc ) ) + self [[ level.zombietheaterteleporterseeklogicfunc ]](); + + if ( isdefined( level._poi_override ) ) + zombie_poi = self [[ level._poi_override ]](); + + if ( !isdefined( zombie_poi ) ) + zombie_poi = self get_zombie_point_of_interest( self.origin ); + + players = get_players(); + + if ( !isdefined( self.ignore_player ) || players.size == 1 ) + self.ignore_player = []; + else if ( !isdefined( level._should_skip_ignore_player_logic ) || ![[ level._should_skip_ignore_player_logic ]]() ) + { + i = 0; + + while ( i < self.ignore_player.size ) + { + if ( isdefined( self.ignore_player[i] ) && isdefined( self.ignore_player[i].ignore_counter ) && self.ignore_player[i].ignore_counter > 3 ) + { + self.ignore_player[i].ignore_counter = 0; + self.ignore_player = arrayremovevalue( self.ignore_player, self.ignore_player[i] ); + + if ( !isdefined( self.ignore_player ) ) + self.ignore_player = []; + + i = 0; + continue; + } + + i++; + } + } + + player = get_closest_valid_player( self.origin, self.ignore_player ); + + if ( !isdefined( player ) && !isdefined( zombie_poi ) ) + { + self maps\mp\zombies\_zm_spawner::zombie_history( "find flesh -> can't find player, continue" ); + + if ( isdefined( self.ignore_player ) ) + { + if ( isdefined( level._should_skip_ignore_player_logic ) && [[ level._should_skip_ignore_player_logic ]]() ) + { + wait 1; + continue; + } + + self.ignore_player = []; + } + + wait 1; + continue; + } + + if ( !isdefined( level.check_for_alternate_poi ) || ![[ level.check_for_alternate_poi ]]() ) + { + self.enemyoverride = zombie_poi; + self.favoriteenemy = player; + } + + self thread zombie_pathing(); + + if ( players.size > 1 ) + { + for ( i = 0; i < self.ignore_player.size; i++ ) + { + if ( isdefined( self.ignore_player[i] ) ) + { + if ( !isdefined( self.ignore_player[i].ignore_counter ) ) + { + self.ignore_player[i].ignore_counter = 0; + continue; + } + + self.ignore_player[i].ignore_counter += 1; + } + } + } + + self thread attractors_generated_listener(); + + if ( isdefined( level._zombie_path_timer_override ) ) + self.zombie_path_timer = [[ level._zombie_path_timer_override ]](); + else + self.zombie_path_timer = gettime() + randomfloatrange( 1, 3 ) * 1000; + + while ( gettime() < self.zombie_path_timer ) + wait 0.1; + + self notify( "path_timer_done" ); + self maps\mp\zombies\_zm_spawner::zombie_history( "find flesh -> bottom of loop" ); + debug_print( "Zombie is re-acquiring enemy, ending breadcrumb search" ); + self notify( "zombie_acquire_enemy" ); + } +} + +init_inert_zombies() +{ + level init_inert_substates(); +} + +init_inert_substates() +{ + level.inert_substates = []; + level.inert_substates[level.inert_substates.size] = "inert1"; + level.inert_substates[level.inert_substates.size] = "inert2"; + level.inert_substates[level.inert_substates.size] = "inert3"; + level.inert_substates[level.inert_substates.size] = "inert4"; + level.inert_substates[level.inert_substates.size] = "inert5"; + level.inert_substates[level.inert_substates.size] = "inert6"; + level.inert_substates[level.inert_substates.size] = "inert7"; + level.inert_substates = array_randomize( level.inert_substates ); + level.inert_substate_index = 0; + level.inert_trans_walk = []; + level.inert_trans_walk[level.inert_trans_walk.size] = "inert_2_walk_1"; + level.inert_trans_walk[level.inert_trans_walk.size] = "inert_2_walk_2"; + level.inert_trans_walk[level.inert_trans_walk.size] = "inert_2_walk_3"; + level.inert_trans_walk[level.inert_trans_walk.size] = "inert_2_walk_4"; + level.inert_trans_run = []; + level.inert_trans_run[level.inert_trans_run.size] = "inert_2_run_1"; + level.inert_trans_run[level.inert_trans_run.size] = "inert_2_run_2"; + level.inert_trans_sprint = []; + level.inert_trans_sprint[level.inert_trans_sprint.size] = "inert_2_sprint_1"; + level.inert_trans_sprint[level.inert_trans_sprint.size] = "inert_2_sprint_2"; + level.inert_crawl_substates = []; + level.inert_crawl_substates[level.inert_crawl_substates.size] = "inert1"; + level.inert_crawl_substates[level.inert_crawl_substates.size] = "inert2"; + level.inert_crawl_substates[level.inert_crawl_substates.size] = "inert3"; + level.inert_crawl_substates[level.inert_crawl_substates.size] = "inert4"; + level.inert_crawl_substates[level.inert_crawl_substates.size] = "inert5"; + level.inert_crawl_substates[level.inert_crawl_substates.size] = "inert6"; + level.inert_crawl_substates[level.inert_crawl_substates.size] = "inert7"; + level.inert_crawl_trans_walk = []; + level.inert_crawl_trans_walk[level.inert_crawl_trans_walk.size] = "inert_2_walk_1"; + level.inert_crawl_trans_run = []; + level.inert_crawl_trans_run[level.inert_crawl_trans_run.size] = "inert_2_run_1"; + level.inert_crawl_trans_run[level.inert_crawl_trans_run.size] = "inert_2_run_2"; + level.inert_crawl_trans_sprint = []; + level.inert_crawl_trans_sprint[level.inert_crawl_trans_sprint.size] = "inert_2_sprint_1"; + level.inert_crawl_trans_sprint[level.inert_crawl_trans_sprint.size] = "inert_2_sprint_2"; + level.inert_crawl_substates = array_randomize( level.inert_crawl_substates ); + level.inert_crawl_substate_index = 0; +} + +get_inert_substate() +{ + substate = level.inert_substates[level.inert_substate_index]; + level.inert_substate_index++; + + if ( level.inert_substate_index >= level.inert_substates.size ) + { + level.inert_substates = array_randomize( level.inert_substates ); + level.inert_substate_index = 0; + } + + return substate; +} + +get_inert_crawl_substate() +{ + substate = level.inert_crawl_substates[level.inert_crawl_substate_index]; + level.inert_crawl_substate_index++; + + if ( level.inert_crawl_substate_index >= level.inert_crawl_substates.size ) + { + level.inert_crawl_substates = array_randomize( level.inert_crawl_substates ); + level.inert_crawl_substate_index = 0; + } + + return substate; +} + +start_inert( in_place ) +{ + self endon( "death" ); + + if ( isdefined( self.is_inert ) && self.is_inert ) + { + self maps\mp\zombies\_zm_spawner::zombie_history( "is_inert already set " + gettime() ); + return; + } + + self.is_inert = 1; + self notify( "start_inert" ); + self maps\mp\zombies\_zm_spawner::zombie_eye_glow_stop(); + self maps\mp\zombies\_zm_spawner::zombie_history( "is_inert set " + gettime() ); + self playsound( "zmb_zombie_go_inert" ); + + if ( isdefined( self.barricade_enter ) && self.barricade_enter ) + { + while ( isdefined( self.barricade_enter ) && self.barricade_enter ) + wait 0.1; + } + else if ( isdefined( self.ai_state ) && self.ai_state == "zombie_goto_entrance" ) + { + self notify( "stop_zombie_goto_entrance" ); + self maps\mp\zombies\_zm_spawner::reset_attack_spot(); + } + + if ( isdefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area ) + { + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + } + else + in_place = 1; + + if ( isdefined( self.in_the_ground ) && self.in_the_ground ) + { + self waittill( "risen", find_flesh_struct_string ); + + if ( self maps\mp\zombies\_zm_spawner::should_skip_teardown( find_flesh_struct_string ) ) + { + if ( !( isdefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area ) ) + self waittill( "completed_emerging_into_playable_area" ); + + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + } + } + + if ( isdefined( self.is_traversing ) && self.is_traversing ) + { + while ( self isinscriptedstate() ) + wait 0.1; + } + + if ( isdefined( self.doing_equipment_attack ) && self.doing_equipment_attack ) + self stopanimscripted(); + + if ( isdefined( self.inert_delay ) ) + { + self [[ self.inert_delay ]](); + self maps\mp\zombies\_zm_spawner::zombie_history( "inert_delay done " + gettime() ); + } + + self inert_think( in_place ); +} + +inert_think( in_place ) +{ + self endon( "death" ); + self.ignoreall = 1; + self animmode( "normal" ); + + if ( self.has_legs ) + { + if ( isdefined( in_place ) && in_place ) + { + self setgoalpos( self.origin ); + + if ( randomint( 100 ) > 50 ) + { + self maps\mp\zombies\_zm_spawner::zombie_history( "inert 1 " + gettime() ); + self setanimstatefromasd( "zm_inert", "inert1" ); + } + else + { + self maps\mp\zombies\_zm_spawner::zombie_history( "inert 2 " + gettime() ); + self setanimstatefromasd( "zm_inert", "inert2" ); + } + + self.in_place = 1; + } + else + { + substate = get_inert_substate(); + + if ( isdefined( level.inert_substate_override ) ) + substate = self [[ level.inert_substate_override ]]( substate ); + + self setanimstatefromasd( "zm_inert", substate ); + self maps\mp\zombies\_zm_spawner::zombie_history( "zm_inert ASD " + gettime() ); + + if ( substate == "inert3" || substate == "inert4" || substate == "inert5" || substate == "inert6" ) + self thread inert_watch_goal(); + else + self.in_place = 1; + } + } + else + { + self setanimstatefromasd( "zm_inert_crawl", get_inert_crawl_substate() ); + self maps\mp\zombies\_zm_spawner::zombie_history( "zm_inert_crawl ASD " + gettime() ); + } + + self thread inert_wakeup(); + + self waittill( "stop_zombie_inert" ); + + self maps\mp\zombies\_zm_spawner::zombie_history( "stop_zombie_inert " + gettime() ); + self playsound( "zmb_zombie_end_inert" ); + self inert_transition(); + self maps\mp\zombies\_zm_spawner::zombie_history( "inert transition done" ); + + if ( isdefined( self.ai_state ) && self.ai_state == "zombie_goto_entrance" ) + self thread maps\mp\zombies\_zm_spawner::zombie_goto_entrance( self.first_node ); + + if ( isdefined( self.inert_wakeup_override ) ) + self [[ self.inert_wakeup_override ]](); + else if ( isdefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area ) + { + self.ignoreall = 0; + + if ( isdefined( level.ignore_find_flesh ) && !self [[ level.ignore_find_flesh ]]() ) + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); + } + + self.becoming_inert = undefined; + self.is_inert = undefined; + self.in_place = undefined; + self maps\mp\animscripts\zm_run::needsupdate(); + self maps\mp\zombies\_zm_spawner::zombie_history( "is_inert cleared " + gettime() ); +} + +inert_watch_goal() +{ + self endon( "death" ); + self endon( "stop_zombie_inert" ); + + while ( true ) + { + self waittill( "goal" ); + + locs = array_randomize( level.enemy_dog_locations ); + + foreach ( loc in locs ) + { + dist_sq = distancesquared( self.origin, loc.origin ); + + if ( dist_sq > 90000 ) + { + self setgoalpos( loc.origin ); + continue; + } + } + + if ( locs.size > 0 ) + self setgoalpos( locs[0].origin ); + } +} + +inert_wakeup() +{ + self endon( "death" ); + self endon( "stop_zombie_inert" ); + wait 0.1; + self thread inert_damage(); + self thread inert_bump(); + + while ( true ) + { + current_time = gettime(); + players = get_players(); + + foreach ( player in players ) + { + dist_sq = distancesquared( self.origin, player.origin ); + + if ( dist_sq < 4096 ) + { + self stop_inert(); + return; + } + + if ( dist_sq < 360000 ) + { + if ( player issprinting() ) + { + self stop_inert(); + return; + } + } + + if ( dist_sq < 5760000 ) + { + if ( current_time - player.lastfiretime < 100 ) + { + self stop_inert(); + return; + } + } + } + + wait 0.1; + } +} + +inert_bump() +{ + self endon( "death" ); + self endon( "stop_zombie_inert" ); + + while ( true ) + { + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( zombie == self ) + continue; + + if ( isdefined( zombie.is_inert ) && zombie.is_inert ) + continue; + + if ( isdefined( zombie.becoming_inert ) && zombie.becoming_inert ) + continue; + + dist_sq = distancesquared( self.origin, zombie.origin ); + + if ( dist_sq < 1296 ) + { + self stop_inert(); + return; + } + } + + wait 0.2; + } +} + +inert_damage() +{ + self endon( "death" ); + self endon( "stop_zombie_inert" ); + + while ( true ) + { + self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); + + if ( weaponname == "emp_grenade_zm" ) + continue; + + if ( isdefined( inflictor ) ) + { + if ( isdefined( inflictor._trap_type ) && inflictor._trap_type == "fire" ) + continue; + } + } + + self stop_inert(); +} + +grenade_watcher( grenade ) +{ + grenade waittill( "explode", grenade_origin ); + + zombies = get_array_of_closest( grenade_origin, get_round_enemy_array(), undefined, undefined, 2400 ); + + if ( !isdefined( zombies ) ) + return; + + foreach ( zombie in zombies ) + zombie stop_inert(); +} + +stop_inert() +{ + self notify( "stop_zombie_inert" ); +} + +inert_transition() +{ + self endon( "death" ); + self endon( "stop_zombie_inert_transition" ); + trans_num = 4; + trans_set = level.inert_trans_walk; + animstate = "zm_inert_trans"; + + if ( !self.has_legs ) + { + trans_num = 1; + trans_set = level.inert_crawl_trans_walk; + animstate = "zm_inert_crawl_trans"; + } + + if ( self.zombie_move_speed == "run" ) + { + if ( self.has_legs ) + trans_set = level.inert_trans_run; + else + trans_set = level.inert_crawl_trans_run; + + trans_num = 2; + } + else if ( self.zombie_move_speed == "sprint" ) + { + if ( self.has_legs ) + trans_set = level.inert_trans_sprint; + else + trans_set = level.inert_crawl_trans_sprint; + + trans_num = 2; + } + + self thread inert_eye_glow(); + self setanimstatefromasd( animstate, trans_set[randomint( trans_num )] ); + self maps\mp\zombies\_zm_spawner::zombie_history( "inert_trans_anim " + gettime() ); + maps\mp\animscripts\zm_shared::donotetracks( "inert_trans_anim" ); +} + +inert_eye_glow() +{ + self endon( "death" ); + + while ( true ) + { + self waittill( "inert_trans_anim", note ); + + if ( note == "end" ) + return; + else if ( note == "zmb_awaken" ) + { + self maps\mp\zombies\_zm_spawner::zombie_eye_glow(); + return; + } + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_ai_dogs.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_ai_dogs.gsc new file mode 100644 index 0000000..4c008e8 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_ai_dogs.gsc @@ -0,0 +1,732 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_net; + +init() +{ + level.dogs_enabled = 1; + level.dog_rounds_enabled = 0; + level.dog_round_count = 1; + level.dog_spawners = []; + level.enemy_dog_spawns = []; + level.enemy_dog_locations = []; + flag_init( "dog_clips" ); + precacherumble( "explosion_generic" ); + precacheshellshock( "dog_bite" ); + + if ( getdvar( _hash_942939D4 ) == "" ) + setdvar( "zombie_dog_animset", "zombie" ); + + if ( getdvar( _hash_CAA5B74F ) == "" ) + setdvar( "scr_dog_health_walk_multiplier", "4.0" ); + + if ( getdvar( _hash_C7E63BA4 ) == "" ) + setdvar( "scr_dog_run_distance", "500" ); + + level.melee_range_sav = getdvar( "ai_meleeRange" ); + level.melee_width_sav = getdvar( "ai_meleeWidth" ); + level.melee_height_sav = getdvar( "ai_meleeHeight" ); + setdvar( "dog_MeleeDamage", "100" ); + set_zombie_var( "dog_fire_trail_percent", 50 ); + level._effect["lightning_dog_spawn"] = loadfx( "maps/zombie/fx_zombie_dog_lightning_buildup" ); + level._effect["dog_eye_glow"] = loadfx( "maps/zombie/fx_zombie_dog_eyes" ); + level._effect["dog_gib"] = loadfx( "maps/zombie/fx_zombie_dog_explosion" ); + level._effect["dog_trail_fire"] = loadfx( "maps/zombie/fx_zombie_dog_fire_trail" ); + level._effect["dog_trail_ash"] = loadfx( "maps/zombie/fx_zombie_dog_ash_trail" ); + dog_spawner_init(); + level thread dog_clip_monitor(); +} + +enable_dog_rounds() +{ + level.dog_rounds_enabled = 1; + + if ( !isdefined( level.dog_round_track_override ) ) + level.dog_round_track_override = ::dog_round_tracker; + + level thread [[ level.dog_round_track_override ]](); +} + +dog_spawner_init() +{ + level.dog_spawners = getentarray( "zombie_dog_spawner", "script_noteworthy" ); + later_dogs = getentarray( "later_round_dog_spawners", "script_noteworthy" ); + level.dog_spawners = arraycombine( level.dog_spawners, later_dogs, 1, 0 ); + + if ( level.dog_spawners.size == 0 ) + return; + + for ( i = 0; i < level.dog_spawners.size; i++ ) + { + if ( maps\mp\zombies\_zm_spawner::is_spawner_targeted_by_blocker( level.dog_spawners[i] ) ) + { + level.dog_spawners[i].is_enabled = 0; + continue; + } + + level.dog_spawners[i].is_enabled = 1; + level.dog_spawners[i].script_forcespawn = 1; + } + + assert( level.dog_spawners.size > 0 ); + level.dog_health = 100; + array_thread( level.dog_spawners, ::add_spawn_function, ::dog_init ); + level.enemy_dog_spawns = getentarray( "zombie_spawner_dog_init", "targetname" ); +} + +dog_round_spawning() +{ + level endon( "intermission" ); + level.dog_targets = getplayers(); + + for ( i = 0; i < level.dog_targets.size; i++ ) + level.dog_targets[i].hunted_by = 0; +/# + level endon( "kill_round" ); + + if ( getdvarint( _hash_FA81816F ) == 2 || getdvarint( _hash_FA81816F ) >= 4 ) + return; +#/ + if ( level.intermission ) + return; + + level.dog_intermission = 1; + level thread dog_round_aftermath(); + players = get_players(); + array_thread( players, ::play_dog_round ); + wait 1; + playsoundatposition( "vox_zmba_event_dogstart_0", ( 0, 0, 0 ) ); + wait 6; + + if ( level.dog_round_count < 3 ) + max = players.size * 6; + else + max = players.size * 8; +/# + if ( getdvar( _hash_4077D7E0 ) != "" ) + max = getdvarint( _hash_4077D7E0 ); +#/ + level.zombie_total = max; + dog_health_increase(); + count = 0; + + while ( count < max ) + { + for ( num_player_valid = get_number_of_valid_players(); get_current_zombie_count() >= num_player_valid * 2; num_player_valid = get_number_of_valid_players() ) + wait 2; + + players = get_players(); + favorite_enemy = get_favorite_enemy(); + + if ( isdefined( level.dog_spawn_func ) ) + { + spawn_loc = [[ level.dog_spawn_func ]]( level.dog_spawners, favorite_enemy ); + ai = spawn_zombie( level.dog_spawners[0] ); + + if ( isdefined( ai ) ) + { + ai.favoriteenemy = favorite_enemy; + spawn_loc thread dog_spawn_fx( ai, spawn_loc ); + level.zombie_total--; + count++; + } + } + else + { + spawn_point = dog_spawn_factory_logic( level.enemy_dog_spawns, favorite_enemy ); + ai = spawn_zombie( level.dog_spawners[0] ); + + if ( isdefined( ai ) ) + { + ai.favoriteenemy = favorite_enemy; + spawn_point thread dog_spawn_fx( ai, spawn_point ); + level.zombie_total--; + count++; + flag_set( "dog_clips" ); + } + } + + waiting_for_next_dog_spawn( count, max ); + } +} + +waiting_for_next_dog_spawn( count, max ) +{ + default_wait = 1.5; + + if ( level.dog_round_count == 1 ) + default_wait = 3; + else if ( level.dog_round_count == 2 ) + default_wait = 2.5; + else if ( level.dog_round_count == 3 ) + default_wait = 2; + else + default_wait = 1.5; + + default_wait -= count / max; + wait( default_wait ); +} + +dog_round_aftermath() +{ + level waittill( "last_dog_down" ); + + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "dog_end" ); + power_up_origin = level.last_dog_origin; + + if ( isdefined( power_up_origin ) ) + level thread maps\mp\zombies\_zm_powerups::specific_powerup_drop( "full_ammo", power_up_origin ); + + wait 2; + clientnotify( "dog_stop" ); + wait 6; + level.dog_intermission = 0; +} + +dog_spawn_fx( ai, ent ) +{ + ai endon( "death" ); + ai setfreecameralockonallowed( 0 ); + playfx( level._effect["lightning_dog_spawn"], ent.origin ); + playsoundatposition( "zmb_hellhound_prespawn", ent.origin ); + wait 1.5; + playsoundatposition( "zmb_hellhound_bolt", ent.origin ); + earthquake( 0.5, 0.75, ent.origin, 1000 ); + playrumbleonposition( "explosion_generic", ent.origin ); + playsoundatposition( "zmb_hellhound_spawn", ent.origin ); + angle = vectortoangles( ai.favoriteenemy.origin - ent.origin ); + angles = ( ai.angles[0], angle[1], ai.angles[2] ); + ai forceteleport( ent.origin, angles ); + assert( isdefined( ai ), "Ent isn't defined." ); + assert( isalive( ai ), "Ent is dead." ); + assert( ai.isdog, "Ent isn't a dog;" ); + assert( is_magic_bullet_shield_enabled( ai ), "Ent doesn't have a magic bullet shield." ); + ai zombie_setup_attack_properties_dog(); + ai stop_magic_bullet_shield(); + wait 0.1; + ai show(); + ai setfreecameralockonallowed( 1 ); + ai.ignoreme = 0; + ai notify( "visible" ); +} + +dog_spawn_sumpf_logic( dog_array, favorite_enemy ) +{ + assert( dog_array.size > 0, "Dog Spawner array is empty." ); + dog_array = array_randomize( dog_array ); + + for ( i = 0; i < dog_array.size; i++ ) + { + if ( isdefined( level.old_dog_spawn ) && level.old_dog_spawn == dog_array[i] ) + continue; + + if ( distancesquared( dog_array[i].origin, favorite_enemy.origin ) > 160000 && distancesquared( dog_array[i].origin, favorite_enemy.origin ) < 640000 ) + { + if ( distancesquared( ( 0, 0, dog_array[i].origin[2] ), ( 0, 0, favorite_enemy.origin[2] ) ) > 10000 ) + continue; + else + { + level.old_dog_spawn = dog_array[i]; + return dog_array[i]; + } + } + } + + return dog_array[0]; +} + +dog_spawn_factory_logic( dog_array, favorite_enemy ) +{ + dog_locs = array_randomize( level.enemy_dog_locations ); + + for ( i = 0; i < dog_locs.size; i++ ) + { + if ( isdefined( level.old_dog_spawn ) && level.old_dog_spawn == dog_locs[i] ) + continue; + + dist_squared = distancesquared( dog_locs[i].origin, favorite_enemy.origin ); + + if ( dist_squared > 160000 && dist_squared < 1000000 ) + { + level.old_dog_spawn = dog_locs[i]; + return dog_locs[i]; + } + } + + return dog_locs[0]; +} + +get_favorite_enemy() +{ + dog_targets = getplayers(); + least_hunted = dog_targets[0]; + + for ( i = 0; i < dog_targets.size; i++ ) + { + if ( !isdefined( dog_targets[i].hunted_by ) ) + dog_targets[i].hunted_by = 0; + + if ( !is_player_valid( dog_targets[i] ) ) + continue; + + if ( !is_player_valid( least_hunted ) ) + least_hunted = dog_targets[i]; + + if ( dog_targets[i].hunted_by < least_hunted.hunted_by ) + least_hunted = dog_targets[i]; + } + + least_hunted.hunted_by += 1; + return least_hunted; +} + +dog_health_increase() +{ + players = getplayers(); + + if ( level.dog_round_count == 1 ) + level.dog_health = 400; + else if ( level.dog_round_count == 2 ) + level.dog_health = 900; + else if ( level.dog_round_count == 3 ) + level.dog_health = 1300; + else if ( level.dog_round_count == 4 ) + level.dog_health = 1600; + + if ( level.dog_health > 1600 ) + level.dog_health = 1600; +} + +dog_round_tracker() +{ + level.dog_round_count = 1; + level.next_dog_round = level.round_number + randomintrange( 4, 7 ); + old_spawn_func = level.round_spawn_func; + old_wait_func = level.round_wait_func; + + while ( true ) + { + level waittill( "between_round_over" ); +/# + if ( getdvarint( _hash_4077D7E0 ) > 0 ) + level.next_dog_round = level.round_number; +#/ + if ( level.round_number == level.next_dog_round ) + { + level.music_round_override = 1; + old_spawn_func = level.round_spawn_func; + old_wait_func = level.round_wait_func; + dog_round_start(); + level.round_spawn_func = ::dog_round_spawning; + level.next_dog_round = level.round_number + randomintrange( 4, 6 ); +/# + get_players()[0] iprintln( "Next dog round: " + level.next_dog_round ); +#/ + } + else if ( flag( "dog_round" ) ) + { + dog_round_stop(); + level.round_spawn_func = old_spawn_func; + level.round_wait_func = old_wait_func; + level.music_round_override = 0; + level.dog_round_count += 1; + } + } +} + +dog_round_start() +{ + flag_set( "dog_round" ); + flag_set( "dog_clips" ); + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "dog_start" ); + + if ( !isdefined( level.doground_nomusic ) ) + level.doground_nomusic = 0; + + level.doground_nomusic = 1; + level notify( "dog_round_starting" ); + clientnotify( "dog_start" ); + + if ( isdefined( level.dog_melee_range ) ) + setdvar( "ai_meleeRange", level.dog_melee_range ); + else + setdvar( "ai_meleeRange", 100 ); +} + +dog_round_stop() +{ + flag_clear( "dog_round" ); + flag_clear( "dog_clips" ); + + if ( !isdefined( level.doground_nomusic ) ) + level.doground_nomusic = 0; + + level.doground_nomusic = 0; + level notify( "dog_round_ending" ); + clientnotify( "dog_stop" ); + setdvar( "ai_meleeRange", level.melee_range_sav ); + setdvar( "ai_meleeWidth", level.melee_width_sav ); + setdvar( "ai_meleeHeight", level.melee_height_sav ); +} + +play_dog_round() +{ + self playlocalsound( "zmb_dog_round_start" ); + variation_count = 5; + wait 4.5; + players = getplayers(); + num = randomintrange( 0, players.size ); + players[num] maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "dog_spawn" ); +} + +dog_init() +{ + self.targetname = "zombie_dog"; + self.script_noteworthy = undefined; + self.animname = "zombie_dog"; + self.ignoreall = 1; + self.ignoreme = 1; + self.allowdeath = 1; + self.allowpain = 0; + self.force_gib = 1; + self.is_zombie = 1; + self.has_legs = 1; + self.gibbed = 0; + self.head_gibbed = 0; + self.default_goalheight = 40; + self.ignore_inert = 1; + self.grenadeawareness = 0; + self.badplaceawareness = 0; + self.ignoresuppression = 1; + self.suppressionthreshold = 1; + self.nododgemove = 1; + self.dontshootwhilemoving = 1; + self.pathenemylookahead = 0; + self.badplaceawareness = 0; + self.chatinitialized = 0; + self.team = level.zombie_team; + health_multiplier = 1.0; + + if ( getdvar( _hash_CAA5B74F ) != "" ) + health_multiplier = getdvarfloat( _hash_CAA5B74F ); + + self.maxhealth = int( level.dog_health * health_multiplier ); + self.health = int( level.dog_health * health_multiplier ); + self.freezegun_damage = 0; + self.zombie_move_speed = "sprint"; + self thread dog_run_think(); + self thread dog_stalk_audio(); + self thread maps\mp\zombies\_zm::round_spawn_failsafe(); + self ghost(); + self thread magic_bullet_shield(); + self dog_fx_eye_glow(); + self dog_fx_trail(); + self thread dog_death(); + level thread maps\mp\zombies\_zm_spawner::zombie_death_event( self ); + self thread maps\mp\zombies\_zm_spawner::enemy_death_detection(); + self.a.disablepain = 1; + self disable_react(); + self clearenemy(); + self cleargoalvolume(); + self.flame_damage_time = 0; + self.meleedamage = 40; + self.thundergun_knockdown_func = ::dog_thundergun_knockdown; + self maps\mp\zombies\_zm_spawner::zombie_history( "zombie_dog_spawn_init -> Spawned = " + self.origin ); + + if ( isdefined( level.achievement_monitor_func ) ) + self [[ level.achievement_monitor_func ]](); +} + +dog_fx_eye_glow() +{ + self.fx_dog_eye = spawn( "script_model", self gettagorigin( "J_EyeBall_LE" ) ); + assert( isdefined( self.fx_dog_eye ) ); + self.fx_dog_eye.angles = self gettagangles( "J_EyeBall_LE" ); + self.fx_dog_eye setmodel( "tag_origin" ); + self.fx_dog_eye linkto( self, "J_EyeBall_LE" ); +} + +dog_fx_trail() +{ + if ( !is_mature() || randomint( 100 ) > level.zombie_vars["dog_fire_trail_percent"] ) + { + self.fx_dog_trail_type = level._effect["dog_trail_ash"]; + self.fx_dog_trail_sound = "zmb_hellhound_loop_breath"; + } + else + { + self.a.nodeath = 1; + self.fx_dog_trail_type = level._effect["dog_trail_fire"]; + self.fx_dog_trail_sound = "zmb_hellhound_loop_fire"; + } + + self.fx_dog_trail = spawn( "script_model", self gettagorigin( "tag_origin" ) ); + assert( isdefined( self.fx_dog_trail ) ); + self.fx_dog_trail.angles = self gettagangles( "tag_origin" ); + self.fx_dog_trail setmodel( "tag_origin" ); + self.fx_dog_trail linkto( self, "tag_origin" ); +} + +dog_death() +{ + self waittill( "death" ); + + if ( get_current_zombie_count() == 0 && level.zombie_total == 0 ) + { + level.last_dog_origin = self.origin; + level notify( "last_dog_down" ); + } + + if ( isplayer( self.attacker ) ) + { + event = "death"; + + if ( issubstr( self.damageweapon, "knife_ballistic_" ) ) + event = "ballistic_knife_death"; + + self.attacker maps\mp\zombies\_zm_score::player_add_points( event, self.damagemod, self.damagelocation, 1 ); + + if ( randomintrange( 0, 100 ) >= 80 ) + self.attacker maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "hellhound" ); + + self.attacker maps\mp\zombies\_zm_stats::increment_client_stat( "zdogs_killed" ); + self.attacker maps\mp\zombies\_zm_stats::increment_player_stat( "zdogs_killed" ); + } + + if ( isdefined( self.attacker ) && isai( self.attacker ) ) + self.attacker notify( "killed", self ); + + self stoploopsound(); + assert( isdefined( self.fx_dog_eye ) ); + self.fx_dog_eye delete(); + assert( isdefined( self.fx_dog_trail ) ); + self.fx_dog_trail delete(); + + if ( isdefined( self.a.nodeath ) ) + { + level thread dog_explode_fx( self.origin ); + self delete(); + } + else + self playsound( "zmb_hellhound_vocals_death" ); +} + +dog_explode_fx( origin ) +{ + playfx( level._effect["dog_gib"], origin ); + playsoundatposition( "zmb_hellhound_explode", origin ); +} + +zombie_setup_attack_properties_dog() +{ + self maps\mp\zombies\_zm_spawner::zombie_history( "zombie_setup_attack_properties()" ); + self thread dog_behind_audio(); + self.ignoreall = 0; + self.pathenemyfightdist = 64; + self.meleeattackdist = 64; + self.disablearrivals = 1; + self.disableexits = 1; +} + +stop_dog_sound_on_death() +{ + self waittill( "death" ); + + self stopsounds(); +} + +dog_behind_audio() +{ + self thread stop_dog_sound_on_death(); + self endon( "death" ); + self waittill_any( "dog_running", "dog_combat" ); + self playsound( "zmb_hellhound_vocals_close" ); + wait 3; + + while ( true ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + dogangle = angleclamp180( vectortoangles( self.origin - players[i].origin )[1] - players[i].angles[1] ); + + if ( isalive( players[i] ) && !isdefined( players[i].revivetrigger ) ) + { + if ( abs( dogangle ) > 90 && distance2d( self.origin, players[i].origin ) > 100 ) + { + self playsound( "zmb_hellhound_vocals_close" ); + wait 3; + } + } + } + + wait 0.75; + } +} + +dog_clip_monitor() +{ + clips_on = 0; + level.dog_clips = getentarray( "dog_clips", "targetname" ); + + while ( true ) + { + for ( i = 0; i < level.dog_clips.size; i++ ) + { + level.dog_clips[i] trigger_off(); + level.dog_clips[i] connectpaths(); + } + + flag_wait( "dog_clips" ); + + if ( isdefined( level.no_dog_clip ) && level.no_dog_clip == 1 ) + return; + + for ( i = 0; i < level.dog_clips.size; i++ ) + { + level.dog_clips[i] trigger_on(); + level.dog_clips[i] disconnectpaths(); + wait_network_frame(); + } + + dog_is_alive = 1; + + while ( dog_is_alive || flag( "dog_round" ) ) + { + dog_is_alive = 0; + dogs = getentarray( "zombie_dog", "targetname" ); + + for ( i = 0; i < dogs.size; i++ ) + { + if ( isalive( dogs[i] ) ) + dog_is_alive = 1; + } + + wait 1; + } + + flag_clear( "dog_clips" ); + wait 1; + } +} + +special_dog_spawn( spawners, num_to_spawn ) +{ + dogs = getaispeciesarray( "all", "zombie_dog" ); + + if ( isdefined( dogs ) && dogs.size >= 9 ) + return false; + + if ( !isdefined( num_to_spawn ) ) + num_to_spawn = 1; + + spawn_point = undefined; + count = 0; + + while ( count < num_to_spawn ) + { + players = get_players(); + favorite_enemy = get_favorite_enemy(); + + if ( isdefined( spawners ) ) + { + spawn_point = spawners[randomint( spawners.size )]; + ai = spawn_zombie( spawn_point ); + + if ( isdefined( ai ) ) + { + ai.favoriteenemy = favorite_enemy; + spawn_point thread dog_spawn_fx( ai ); + count++; + flag_set( "dog_clips" ); + } + } + else if ( isdefined( level.dog_spawn_func ) ) + { + spawn_loc = [[ level.dog_spawn_func ]]( level.dog_spawners, favorite_enemy ); + ai = spawn_zombie( level.dog_spawners[0] ); + + if ( isdefined( ai ) ) + { + ai.favoriteenemy = favorite_enemy; + spawn_loc thread dog_spawn_fx( ai, spawn_loc ); + count++; + flag_set( "dog_clips" ); + } + } + else + { + spawn_point = dog_spawn_factory_logic( level.enemy_dog_spawns, favorite_enemy ); + ai = spawn_zombie( level.dog_spawners[0] ); + + if ( isdefined( ai ) ) + { + ai.favoriteenemy = favorite_enemy; + spawn_point thread dog_spawn_fx( ai, spawn_point ); + count++; + flag_set( "dog_clips" ); + } + } + + waiting_for_next_dog_spawn( count, num_to_spawn ); + } + + return true; +} + +dog_run_think() +{ + self endon( "death" ); + + self waittill( "visible" ); + + if ( self.health > level.dog_health ) + { + self.maxhealth = level.dog_health; + self.health = level.dog_health; + } + + assert( isdefined( self.fx_dog_eye ) ); + maps\mp\zombies\_zm_net::network_safe_play_fx_on_tag( "dog_fx", 2, level._effect["dog_eye_glow"], self.fx_dog_eye, "tag_origin" ); + assert( isdefined( self.fx_dog_trail ) ); + maps\mp\zombies\_zm_net::network_safe_play_fx_on_tag( "dog_fx", 2, self.fx_dog_trail_type, self.fx_dog_trail, "tag_origin" ); + self playloopsound( self.fx_dog_trail_sound ); + + while ( true ) + { + if ( !is_player_valid( self.favoriteenemy ) ) + self.favoriteenemy = get_favorite_enemy(); + + wait 0.2; + } +} + +dog_stalk_audio() +{ + self endon( "death" ); + self endon( "dog_running" ); + self endon( "dog_combat" ); + + while ( true ) + { + self playsound( "zmb_hellhound_vocals_amb" ); + wait( randomfloatrange( 3, 6 ) ); + } +} + +dog_thundergun_knockdown( player, gib ) +{ + self endon( "death" ); + damage = int( self.maxhealth * 0.5 ); + self dodamage( damage, player.origin, player ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_ai_faller.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_ai_faller.gsc new file mode 100644 index 0000000..dda6c5d --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_ai_faller.gsc @@ -0,0 +1,626 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\zombies\_zm_laststand; + +zombie_faller_delete() +{ + level.zombie_total++; + self maps\mp\zombies\_zm_spawner::reset_attack_spot(); + + if ( isdefined( self.zombie_faller_location ) ) + { + self.zombie_faller_location.is_enabled = 1; + self.zombie_faller_location = undefined; + } + + self delete(); +} + +faller_script_parameters() +{ + if ( isdefined( self.script_parameters ) ) + { + parms = strtok( self.script_parameters, ";" ); + + if ( isdefined( parms ) && parms.size > 0 ) + { + for ( i = 0; i < parms.size; i++ ) + { + if ( parms[i] == "drop_now" ) + self.drop_now = 1; + + if ( parms[i] == "drop_not_occupied" ) + self.drop_not_occupied = 1; + + if ( parms[i] == "emerge_top" ) + self.emerge_top = 1; + + if ( parms[i] == "emerge_bottom" ) + self.emerge_bottom = 1; + } + } + } +} + +setup_deathfunc( func_name ) +{ + self endon( "death" ); + + while ( !( isdefined( self.zombie_init_done ) && self.zombie_init_done ) ) + wait_network_frame(); + + if ( isdefined( func_name ) ) + self.deathfunction = func_name; + else if ( isdefined( level.custom_faller_death ) ) + self.deathfunction = level.custom_faller_death; + else + self.deathfunction = ::zombie_fall_death_func; +} + +do_zombie_fall( spot ) +{ + self endon( "death" ); + self.zombie_faller_location = spot; + self.zombie_faller_location.is_enabled = 0; + self.zombie_faller_location faller_script_parameters(); + + if ( isdefined( self.zombie_faller_location.emerge_bottom ) && self.zombie_faller_location.emerge_bottom || isdefined( self.zombie_faller_location.emerge_top ) && self.zombie_faller_location.emerge_top ) + { + self do_zombie_emerge( spot ); + return; + } + + self thread setup_deathfunc(); + self.no_powerups = 1; + self.in_the_ceiling = 1; + self.anchor = spawn( "script_origin", self.origin ); + self.anchor.angles = self.angles; + self linkto( self.anchor ); + + if ( !isdefined( spot.angles ) ) + spot.angles = ( 0, 0, 0 ); + + anim_org = spot.origin; + anim_ang = spot.angles; + self ghost(); + self.anchor moveto( anim_org, 0.05 ); + + self.anchor waittill( "movedone" ); + + target_org = get_desired_origin(); + + if ( isdefined( target_org ) ) + { + anim_ang = vectortoangles( target_org - self.origin ); + self.anchor rotateto( ( 0, anim_ang[1], 0 ), 0.05 ); + + self.anchor waittill( "rotatedone" ); + } + + self unlink(); + + if ( isdefined( self.anchor ) ) + self.anchor delete(); + + self thread maps\mp\zombies\_zm_spawner::hide_pop(); + self thread zombie_fall_death( spot ); + self thread zombie_fall_fx( spot ); + self thread zombie_faller_death_wait(); + self thread zombie_faller_do_fall(); + self.no_powerups = 0; + self notify( "risen", spot.script_string ); +} + +zombie_faller_do_fall() +{ + self endon( "death" ); + self animscripted( self.origin, self.zombie_faller_location.angles, "zm_faller_emerge" ); + self maps\mp\animscripts\zm_shared::donotetracks( "emerge_anim", ::handle_fall_notetracks, self.zombie_faller_location ); + self.zombie_faller_wait_start = gettime(); + self.zombie_faller_should_drop = 0; + self thread zombie_fall_wait(); + self thread zombie_faller_watch_all_players(); + + while ( !self.zombie_faller_should_drop ) + { + if ( self zombie_fall_should_attack( self.zombie_faller_location ) ) + { + self animscripted( self.origin, self.zombie_faller_location.angles, "zm_faller_attack" ); + self maps\mp\animscripts\zm_shared::donotetracks( "attack_anim", ::handle_fall_notetracks, self.zombie_faller_location ); + + if ( !self zombie_faller_always_drop() && randomfloat( 1 ) > 0.5 ) + self.zombie_faller_should_drop = 1; + } + else if ( self zombie_faller_always_drop() ) + { + self.zombie_faller_should_drop = 1; + break; + } + else if ( gettime() >= self.zombie_faller_wait_start + 20000 ) + { + self.zombie_faller_should_drop = 1; + break; + } + else if ( self zombie_faller_drop_not_occupied() ) + { + self.zombie_faller_should_drop = 1; + break; + } + else + { + self animscripted( self.origin, self.zombie_faller_location.angles, "zm_faller_attack" ); + self maps\mp\animscripts\zm_shared::donotetracks( "attack_anim", ::handle_fall_notetracks, self.zombie_faller_location ); + } + } + + self notify( "falling" ); + spot = self.zombie_faller_location; + self zombie_faller_enable_location(); + self animscripted( self.origin, spot.angles, "zm_faller_fall" ); + self maps\mp\animscripts\zm_shared::donotetracks( "fall_anim", ::handle_fall_notetracks, spot ); + self.deathfunction = maps\mp\zombies\_zm_spawner::zombie_death_animscript; + self notify( "fall_anim_finished" ); + spot notify( "stop_zombie_fall_fx" ); + self stopanimscripted(); + landanimdelta = 15; + ground_pos = groundpos_ignore_water_new( self.origin ); + physdist = self.origin[2] - ground_pos[2] + landanimdelta; + + if ( physdist > 0 ) + { + self animcustom( ::zombie_fall_loop ); + + self waittill( "faller_on_ground" ); + + self animcustom( ::zombie_land ); + + self waittill( "zombie_land_done" ); + } + + self.in_the_ceiling = 0; + self traversemode( "gravity" ); + self.no_powerups = 0; +} + +zombie_fall_loop() +{ + self endon( "death" ); + self setanimstatefromasd( "zm_faller_fall_loop" ); + + while ( true ) + { + ground_pos = groundpos_ignore_water_new( self.origin ); + + if ( self.origin[2] - ground_pos[2] < 20 ) + { + self notify( "faller_on_ground" ); + break; + } + + wait 0.05; + } +} + +zombie_land() +{ + self setanimstatefromasd( "zm_faller_land" ); + maps\mp\animscripts\zm_shared::donotetracks( "land_anim" ); + self notify( "zombie_land_done" ); +} + +zombie_faller_always_drop() +{ + if ( isdefined( self.zombie_faller_location.drop_now ) && self.zombie_faller_location.drop_now ) + return true; + + return false; +} + +zombie_faller_drop_not_occupied() +{ + if ( isdefined( self.zombie_faller_location.drop_not_occupied ) && self.zombie_faller_location.drop_not_occupied ) + { + if ( isdefined( self.zone_name ) && isdefined( level.zones[self.zone_name] ) ) + return !level.zones[self.zone_name].is_occupied; + } + + return 0; +} + +zombie_faller_watch_all_players() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + self thread zombie_faller_watch_player( players[i] ); +} + +zombie_faller_watch_player( player ) +{ + self endon( "falling" ); + self endon( "death" ); + player endon( "disconnect" ); + range = 200; + rangesqr = range * range; + timer = 5000; + inrange = 0; + inrangetime = 0; + closerange = 60; + closerangesqr = closerange * closerange; + dirtoplayerenter = ( 0, 0, 0 ); + incloserange = 0; + + while ( true ) + { + distsqr = distance2dsquared( self.origin, player.origin ); + + if ( distsqr < rangesqr ) + { + if ( inrange ) + { + if ( inrangetime + timer < gettime() ) + { + self.zombie_faller_should_drop = 1; + break; + } + } + else + { + inrange = 1; + inrangetime = gettime(); + } + } + else + inrange = 0; + + if ( distsqr < closerangesqr ) + { + if ( !incloserange ) + { + dirtoplayerenter = player.origin - self.origin; + dirtoplayerenter = ( dirtoplayerenter[0], dirtoplayerenter[1], 0.0 ); + dirtoplayerenter = vectornormalize( dirtoplayerenter ); + } + + incloserange = 1; + } + else + { + if ( incloserange ) + { + dirtoplayerexit = player.origin - self.origin; + dirtoplayerexit = ( dirtoplayerexit[0], dirtoplayerexit[1], 0.0 ); + dirtoplayerexit = vectornormalize( dirtoplayerexit ); + + if ( vectordot( dirtoplayerenter, dirtoplayerexit ) < 0 ) + { + self.zombie_faller_should_drop = 1; + break; + } + } + + incloserange = 0; + } + + wait 0.1; + } +} + +zombie_fall_wait() +{ + self endon( "falling" ); + self endon( "death" ); + + if ( isdefined( self.zone_name ) ) + { + if ( isdefined( level.zones ) && isdefined( level.zones[self.zone_name] ) ) + { + zone = level.zones[self.zone_name]; + + while ( true ) + { + if ( !zone.is_enabled || !zone.is_active ) + { + if ( !self potentially_visible( 2250000 ) ) + { + if ( self.health != level.zombie_health ) + { + self.zombie_faller_should_drop = 1; + break; + } + else + { + self zombie_faller_delete(); + return; + } + } + } + + wait 0.5; + } + } + } +} + +zombie_fall_should_attack( spot ) +{ + victims = zombie_fall_get_vicitims( spot ); + return victims.size > 0; +} + +zombie_fall_get_vicitims( spot ) +{ + ret = []; + players = getplayers(); + checkdist2 = 40.0; + checkdist2 *= checkdist2; + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + continue; + + stance = player getstance(); + + if ( stance == "crouch" || stance == "prone" ) + continue; + + zcheck = self.origin[2] - player.origin[2]; + + if ( zcheck < 0.0 || zcheck > 120.0 ) + continue; + + dist2 = distance2dsquared( player.origin, self.origin ); + + if ( dist2 < checkdist2 ) + ret[ret.size] = player; + } + + return ret; +} + +get_fall_anim( spot ) +{ + return level._zombie_fall_anims[self.animname]["fall"]; +} + +zombie_faller_enable_location() +{ + if ( isdefined( self.zombie_faller_location ) ) + { + self.zombie_faller_location.is_enabled = 1; + self.zombie_faller_location = undefined; + } +} + +zombie_faller_death_wait( endon_notify ) +{ + self endon( "falling" ); + + if ( isdefined( endon_notify ) ) + self endon( endon_notify ); + + self waittill( "death" ); + + self zombie_faller_enable_location(); +} + +zombie_fall_death_func() +{ + self animmode( "noclip" ); + self.deathanim = "zm_faller_emerge_death"; + return self maps\mp\zombies\_zm_spawner::zombie_death_animscript(); +} + +zombie_fall_death( spot ) +{ + self endon( "fall_anim_finished" ); + + while ( self.health > 1 ) + self waittill( "damage", amount, attacker, dir, p, type ); + + self stopanimscripted(); + spot notify( "stop_zombie_fall_fx" ); +} + +_damage_mod_to_damage_type( type ) +{ + toks = strtok( type, "_" ); + + if ( toks.size < 2 ) + return type; + + returnstr = toks[1]; + + for ( i = 2; i < toks.size; i++ ) + returnstr += toks[i]; + + returnstr = tolower( returnstr ); + return returnstr; +} + +zombie_fall_fx( spot ) +{ + spot thread zombie_fall_dust_fx( self ); + spot thread zombie_fall_burst_fx(); + playsoundatposition( "zmb_zombie_spawn", spot.origin ); + self endon( "death" ); + spot endon( "stop_zombie_fall_fx" ); + wait 1; + + if ( self.zombie_move_speed != "sprint" ) + wait 1; +} + +zombie_fall_burst_fx() +{ + self endon( "stop_zombie_fall_fx" ); + self endon( "fall_anim_finished" ); + playfx( level._effect["rise_burst"], self.origin + ( 0, 0, randomintrange( 5, 10 ) ) ); + wait 0.25; + playfx( level._effect["rise_billow"], self.origin + ( randomintrange( -10, 10 ), randomintrange( -10, 10 ), randomintrange( 5, 10 ) ) ); +} + +zombie_fall_dust_fx( zombie ) +{ + dust_tag = "J_SpineUpper"; + self endon( "stop_zombie_fall_dust_fx" ); + self thread stop_zombie_fall_dust_fx( zombie ); + dust_time = 4.5; + dust_interval = 0.3; + + for ( t = 0; t < dust_time; t += dust_interval ) + { + playfxontag( level._effect["rise_dust"], zombie, dust_tag ); + wait( dust_interval ); + } +} + +stop_zombie_fall_dust_fx( zombie ) +{ + zombie waittill( "death" ); + + self notify( "stop_zombie_fall_dust_fx" ); +} + +handle_fall_notetracks( note, spot ) +{ + if ( note == "deathout" ) + self.deathfunction = ::faller_death_ragdoll; + else if ( note == "fire" ) + { + victims = zombie_fall_get_vicitims( spot ); + + for ( i = 0; i < victims.size; i++ ) + { + victims[i] dodamage( self.meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); + self.zombie_faller_should_drop = 1; + } + } +} + +faller_death_ragdoll() +{ + self startragdoll(); + self launchragdoll( ( 0, 0, -1 ) ); + return self maps\mp\zombies\_zm_spawner::zombie_death_animscript(); +} + +in_player_fov( player ) +{ + playerangles = player getplayerangles(); + playerforwardvec = anglestoforward( playerangles ); + playerunitforwardvec = vectornormalize( playerforwardvec ); + banzaipos = self.origin; + playerpos = player getorigin(); + playertobanzaivec = banzaipos - playerpos; + playertobanzaiunitvec = vectornormalize( playertobanzaivec ); + forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec ); + anglefromcenter = acos( forwarddotbanzai ); + playerfov = getdvarfloat( "cg_fov" ); + banzaivsplayerfovbuffer = getdvarfloat( _hash_BCB625CF ); + + if ( banzaivsplayerfovbuffer <= 0 ) + banzaivsplayerfovbuffer = 0.2; + + inplayerfov = anglefromcenter <= playerfov * 0.5 * ( 1 - banzaivsplayerfovbuffer ); + return inplayerfov; +} + +potentially_visible( how_close = 1000000 ) +{ + potentiallyvisible = 0; + players = getplayers(); + + for ( i = 0; i < players.size; i++ ) + { + dist = distancesquared( self.origin, players[i].origin ); + + if ( dist < how_close ) + { + inplayerfov = self in_player_fov( players[i] ); + + if ( inplayerfov ) + { + potentiallyvisible = 1; + break; + } + } + } + + return potentiallyvisible; +} + +do_zombie_emerge( spot ) +{ + self endon( "death" ); + self thread setup_deathfunc( ::faller_death_ragdoll ); + self.no_powerups = 1; + self.in_the_ceiling = 1; + anim_org = spot.origin; + anim_ang = spot.angles; + self thread zombie_emerge_fx( spot ); + self thread zombie_faller_death_wait( "risen" ); + + if ( isdefined( level.custom_faller_entrance_logic ) ) + self thread [[ level.custom_faller_entrance_logic ]](); + + self zombie_faller_emerge( spot ); + self.create_eyes = 1; + wait 0.1; + self notify( "risen", spot.script_string ); + self zombie_faller_enable_location(); +} + +zombie_faller_emerge( spot ) +{ + self endon( "death" ); + + if ( isdefined( self.zombie_faller_location.emerge_bottom ) && self.zombie_faller_location.emerge_bottom ) + self animscripted( self.zombie_faller_location.origin, self.zombie_faller_location.angles, "zombie_riser_elevator_from_floor" ); + else + self animscripted( self.zombie_faller_location.origin, self.zombie_faller_location.angles, "zombie_riser_elevator_from_ceiling" ); + + self maps\mp\animscripts\zm_shared::donotetracks( "rise_anim" ); + self.deathfunction = maps\mp\zombies\_zm_spawner::zombie_death_animscript; + self.in_the_ceiling = 0; + self.no_powerups = 0; +} + +zombie_emerge_fx( spot ) +{ + spot thread zombie_emerge_dust_fx( self ); + playsoundatposition( "zmb_zombie_spawn", spot.origin ); + self endon( "death" ); + spot endon( "stop_zombie_fall_fx" ); + wait 1; +} + +zombie_emerge_dust_fx( zombie ) +{ + dust_tag = "J_SpineUpper"; + self endon( "stop_zombie_fall_dust_fx" ); + self thread stop_zombie_fall_dust_fx( zombie ); + dust_time = 3.5; + dust_interval = 0.5; + + for ( t = 0; t < dust_time; t += dust_interval ) + { + playfxontag( level._effect["rise_dust"], zombie, dust_tag ); + wait( dust_interval ); + } +} + +stop_zombie_emerge_dust_fx( zombie ) +{ + zombie waittill( "death" ); + + self notify( "stop_zombie_fall_dust_fx" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_audio.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_audio.gsc new file mode 100644 index 0000000..176a59c --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_audio.gsc @@ -0,0 +1,1401 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\_music; +#include maps\mp\zombies\_zm_spawner; + +init() +{ + registerclientfield( "allplayers", "charindex", 1, 3, "int" ); + registerclientfield( "toplayer", "isspeaking", 1, 1, "int" ); +/# + println( "ZM >> Zombiemode Server Scripts Init (_zm_audio.gsc)" ); +#/ + level.audio_get_mod_type = ::get_mod_type; + level zmbvox(); + level init_music_states(); + level maps\mp\zombies\_zm_audio_announcer::init(); + onplayerconnect_callback( ::init_audio_functions ); +} + +setexertvoice( exert_id ) +{ + self.player_exert_id = exert_id; + self setclientfield( "charindex", self.player_exert_id ); +} + +playerexert( exert ) +{ + if ( isdefined( self.isspeaking ) && self.isspeaking || isdefined( self.isexerting ) && self.isexerting ) + return; + + id = level.exert_sounds[0][exert]; + + if ( isdefined( self.player_exert_id ) ) + { + if ( isarray( level.exert_sounds[self.player_exert_id][exert] ) ) + id = random( level.exert_sounds[self.player_exert_id][exert] ); + else + id = level.exert_sounds[self.player_exert_id][exert]; + } + + self.isexerting = 1; + self thread exert_timer(); + self playsound( id ); +} + +exert_timer() +{ + self endon( "disconnect" ); + wait( randomfloatrange( 1.5, 3 ) ); + self.isexerting = 0; +} + +zmbvox() +{ + level.votimer = []; + level.vox = zmbvoxcreate(); + init_standard_response_chances(); + level.vox zmbvoxadd( "player", "general", "crawl_spawn", "crawler_start", "resp_crawler_start" ); + level.vox zmbvoxadd( "player", "general", "hr_resp_crawler_start", "hr_resp_crawler_start", undefined ); + level.vox zmbvoxadd( "player", "general", "riv_resp_crawler_start", "riv_resp_crawler_start", undefined ); + level.vox zmbvoxadd( "player", "general", "ammo_low", "ammo_low", undefined ); + level.vox zmbvoxadd( "player", "general", "ammo_out", "ammo_out", undefined ); + level.vox zmbvoxadd( "player", "general", "door_deny", "nomoney_generic", undefined ); + level.vox zmbvoxadd( "player", "general", "perk_deny", "nomoney_perk", undefined ); + level.vox zmbvoxadd( "player", "general", "shoot_arm", "kill_limb", undefined ); + level.vox zmbvoxadd( "player", "general", "box_move", "box_move", undefined ); + level.vox zmbvoxadd( "player", "general", "no_money", "nomoney", undefined ); + level.vox zmbvoxadd( "player", "general", "oh_shit", "oh_shit", "resp_surrounded" ); + level.vox zmbvoxadd( "player", "general", "hr_resp_surrounded", "hr_resp_surrounded", undefined ); + level.vox zmbvoxadd( "player", "general", "riv_resp_surrounded", "riv_resp_surrounded", undefined ); + level.vox zmbvoxadd( "player", "general", "revive_down", "revive_down", undefined ); + level.vox zmbvoxadd( "player", "general", "revive_up", "revive_up", undefined ); + level.vox zmbvoxadd( "player", "general", "crawl_hit", "crawler_attack", undefined ); + level.vox zmbvoxadd( "player", "general", "sigh", "sigh", undefined ); + level.vox zmbvoxadd( "player", "general", "round_5", "round_5", undefined ); + level.vox zmbvoxadd( "player", "general", "round_20", "round_20", undefined ); + level.vox zmbvoxadd( "player", "general", "round_10", "round_10", undefined ); + level.vox zmbvoxadd( "player", "general", "round_35", "round_35", undefined ); + level.vox zmbvoxadd( "player", "general", "round_50", "round_50", undefined ); + level.vox zmbvoxadd( "player", "perk", "specialty_armorvest", "perk_jugga", undefined ); + level.vox zmbvoxadd( "player", "perk", "specialty_quickrevive", "perk_revive", undefined ); + level.vox zmbvoxadd( "player", "perk", "specialty_fastreload", "perk_speed", undefined ); + level.vox zmbvoxadd( "player", "perk", "specialty_rof", "perk_doubletap", undefined ); + level.vox zmbvoxadd( "player", "perk", "specialty_longersprint", "perk_stamine", undefined ); + level.vox zmbvoxadd( "player", "perk", "specialty_flakjacket", "perk_phdflopper", undefined ); + level.vox zmbvoxadd( "player", "perk", "specialty_deadshot", "perk_deadshot", undefined ); + level.vox zmbvoxadd( "player", "perk", "specialty_finalstand", "perk_who", undefined ); + level.vox zmbvoxadd( "player", "perk", "specialty_additionalprimaryweapon", "perk_mulekick", undefined ); + level.vox zmbvoxadd( "player", "powerup", "nuke", "powerup_nuke", undefined ); + level.vox zmbvoxadd( "player", "powerup", "insta_kill", "powerup_insta", undefined ); + level.vox zmbvoxadd( "player", "powerup", "full_ammo", "powerup_ammo", undefined ); + level.vox zmbvoxadd( "player", "powerup", "double_points", "powerup_double", undefined ); + level.vox zmbvoxadd( "player", "powerup", "carpenter", "powerup_carp", undefined ); + level.vox zmbvoxadd( "player", "powerup", "firesale", "powerup_firesale", undefined ); + level.vox zmbvoxadd( "player", "powerup", "minigun", "powerup_minigun", undefined ); + level.vox zmbvoxadd( "player", "kill", "melee", "kill_melee", undefined ); + level.vox zmbvoxadd( "player", "kill", "melee_instakill", "kill_insta", undefined ); + level.vox zmbvoxadd( "player", "kill", "weapon_instakill", "kill_insta", undefined ); + level.vox zmbvoxadd( "player", "kill", "closekill", "kill_close", undefined ); + level.vox zmbvoxadd( "player", "kill", "damage", "kill_damaged", undefined ); + level.vox zmbvoxadd( "player", "kill", "streak", "kill_streak", undefined ); + level.vox zmbvoxadd( "player", "kill", "headshot", "kill_headshot", "resp_kill_headshot" ); + level.vox zmbvoxadd( "player", "kill", "hr_resp_kill_headshot", "hr_resp_kill_headshot", undefined ); + level.vox zmbvoxadd( "player", "kill", "riv_resp_kill_headshot", "riv_resp_kill_headshot", undefined ); + level.vox zmbvoxadd( "player", "kill", "explosive", "kill_explo", undefined ); + level.vox zmbvoxadd( "player", "kill", "flame", "kill_flame", undefined ); + level.vox zmbvoxadd( "player", "kill", "raygun", "kill_ray", undefined ); + level.vox zmbvoxadd( "player", "kill", "bullet", "kill_streak", undefined ); + level.vox zmbvoxadd( "player", "kill", "tesla", "kill_tesla", undefined ); + level.vox zmbvoxadd( "player", "kill", "monkey", "kill_monkey", undefined ); + level.vox zmbvoxadd( "player", "kill", "thundergun", "kill_thunder", undefined ); + level.vox zmbvoxadd( "player", "kill", "freeze", "kill_freeze", undefined ); + level.vox zmbvoxadd( "player", "kill", "crawler", "crawler_kill", undefined ); + level.vox zmbvoxadd( "player", "kill", "hellhound", "kill_hellhound", undefined ); + level.vox zmbvoxadd( "player", "kill", "quad", "kill_quad", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "pistol", "wpck_crappy", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "smg", "wpck_smg", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "dualwield", "wpck_dual", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "shotgun", "wpck_shotgun", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "rifle", "wpck_sniper", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "burstrifle", "wpck_mg", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "assault", "wpck_mg", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "sniper", "wpck_sniper", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "mg", "wpck_mg", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "launcher", "wpck_launcher", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "grenade", "wpck_grenade", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "bowie", "wpck_bowie", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "raygun", "wpck_raygun", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "monkey", "wpck_monkey", "resp_wpck_monkey" ); + level.vox zmbvoxadd( "player", "weapon_pickup", "hr_resp_wpck_monkey", "hr_resp_wpck_monkey", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "riv_resp_wpck_monkey", "riv_resp_wpck_monkey", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "crossbow", "wpck_launcher", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "upgrade", "wpck_upgrade", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "favorite", "wpck_favorite", undefined ); + level.vox zmbvoxadd( "player", "weapon_pickup", "favorite_upgrade", "wpck_favorite_upgrade", undefined ); + level.vox zmbvoxadd( "player", "player_death", "player_death", "evt_player_final_hit", undefined ); + level.zmb_vox = []; + level.zmb_vox["prefix"] = "zmb_vocals_"; + level.zmb_vox["zombie"] = []; + level.zmb_vox["zombie"]["ambient"] = "zombie_ambience"; + level.zmb_vox["zombie"]["sprint"] = "zombie_sprint"; + level.zmb_vox["zombie"]["attack"] = "zombie_attack"; + level.zmb_vox["zombie"]["teardown"] = "zombie_teardown"; + level.zmb_vox["zombie"]["taunt"] = "zombie_taunt"; + level.zmb_vox["zombie"]["behind"] = "zombie_behind"; + level.zmb_vox["zombie"]["death"] = "zombie_death"; + level.zmb_vox["zombie"]["crawler"] = "zombie_crawler"; + level.zmb_vox["zombie"]["electrocute"] = "zombie_electrocute"; + level.zmb_vox["quad_zombie"] = []; + level.zmb_vox["quad_zombie"]["ambient"] = "quad_ambience"; + level.zmb_vox["quad_zombie"]["sprint"] = "quad_sprint"; + level.zmb_vox["quad_zombie"]["attack"] = "quad_attack"; + level.zmb_vox["quad_zombie"]["behind"] = "quad_behind"; + level.zmb_vox["quad_zombie"]["death"] = "quad_death"; + level.zmb_vox["thief_zombie"] = []; + level.zmb_vox["thief_zombie"]["ambient"] = "thief_ambience"; + level.zmb_vox["thief_zombie"]["sprint"] = "thief_sprint"; + level.zmb_vox["thief_zombie"]["steal"] = "thief_steal"; + level.zmb_vox["thief_zombie"]["death"] = "thief_death"; + level.zmb_vox["thief_zombie"]["anger"] = "thief_anger"; + level.zmb_vox["boss_zombie"] = []; + level.zmb_vox["boss_zombie"]["ambient"] = "boss_ambience"; + level.zmb_vox["boss_zombie"]["sprint"] = "boss_sprint"; + level.zmb_vox["boss_zombie"]["attack"] = "boss_attack"; + level.zmb_vox["boss_zombie"]["behind"] = "boss_behind"; + level.zmb_vox["boss_zombie"]["death"] = "boss_death"; + level.zmb_vox["leaper_zombie"] = []; + level.zmb_vox["leaper_zombie"]["ambient"] = "leaper_ambience"; + level.zmb_vox["leaper_zombie"]["sprint"] = "leaper_ambience"; + level.zmb_vox["leaper_zombie"]["attack"] = "leaper_attack"; + level.zmb_vox["leaper_zombie"]["behind"] = "leaper_close"; + level.zmb_vox["leaper_zombie"]["death"] = "leaper_death"; + level.zmb_vox["monkey_zombie"] = []; + level.zmb_vox["monkey_zombie"]["ambient"] = "monkey_ambience"; + level.zmb_vox["monkey_zombie"]["sprint"] = "monkey_sprint"; + level.zmb_vox["monkey_zombie"]["attack"] = "monkey_attack"; + level.zmb_vox["monkey_zombie"]["behind"] = "monkey_behind"; + level.zmb_vox["monkey_zombie"]["death"] = "monkey_death"; + level.zmb_vox["capzomb"] = []; + level.zmb_vox["capzomb"]["ambient"] = "capzomb_ambience"; + level.zmb_vox["capzomb"]["sprint"] = "capzomb_sprint"; + level.zmb_vox["capzomb"]["attack"] = "capzomb_attack"; + level.zmb_vox["capzomb"]["teardown"] = "capzomb_ambience"; + level.zmb_vox["capzomb"]["taunt"] = "capzomb_ambience"; + level.zmb_vox["capzomb"]["behind"] = "capzomb_behind"; + level.zmb_vox["capzomb"]["death"] = "capzomb_death"; + level.zmb_vox["capzomb"]["crawler"] = "capzomb_crawler"; + level.zmb_vox["capzomb"]["electrocute"] = "zombie_electrocute"; + + if ( isdefined( level._zmbvoxlevelspecific ) ) + level thread [[ level._zmbvoxlevelspecific ]](); + + if ( isdefined( level._zmbvoxgametypespecific ) ) + level thread [[ level._zmbvoxgametypespecific ]](); + + announcer_ent = spawn( "script_origin", ( 0, 0, 0 ) ); + level.vox zmbvoxinitspeaker( "announcer", "vox_zmba_", announcer_ent ); + level.exert_sounds[0]["burp"] = "evt_belch"; + level.exert_sounds[0]["hitmed"] = "null"; + level.exert_sounds[0]["hitlrg"] = "null"; + + if ( isdefined( level.setupcustomcharacterexerts ) ) + [[ level.setupcustomcharacterexerts ]](); +} + +init_standard_response_chances() +{ + level.response_chances = []; + add_vox_response_chance( "sickle", 40 ); + add_vox_response_chance( "melee", 40 ); + add_vox_response_chance( "melee_instakill", 99 ); + add_vox_response_chance( "weapon_instakill", 10 ); + add_vox_response_chance( "explosive", 60 ); + add_vox_response_chance( "monkey", 60 ); + add_vox_response_chance( "flame", 60 ); + add_vox_response_chance( "raygun", 75 ); + add_vox_response_chance( "headshot", 15 ); + add_vox_response_chance( "crawler", 30 ); + add_vox_response_chance( "quad", 30 ); + add_vox_response_chance( "astro", 99 ); + add_vox_response_chance( "closekill", 15 ); + add_vox_response_chance( "bullet", 1 ); + add_vox_response_chance( "claymore", 99 ); + add_vox_response_chance( "dolls", 99 ); + add_vox_response_chance( "default", 1 ); +} + +init_audio_functions() +{ + self thread zombie_behind_vox(); + self thread player_killstreak_timer(); + + if ( isdefined( level._custom_zombie_oh_shit_vox_func ) ) + self thread [[ level._custom_zombie_oh_shit_vox_func ]](); + else + self thread oh_shit_vox(); +} + +zombie_behind_vox() +{ + self endon( "death_or_disconnect" ); + + if ( !isdefined( level._zbv_vox_last_update_time ) ) + { + level._zbv_vox_last_update_time = 0; + level._audio_zbv_shared_ent_list = get_round_enemy_array(); + } + + while ( true ) + { + wait 1; + t = gettime(); + + if ( t > level._zbv_vox_last_update_time + 1000 ) + { + level._zbv_vox_last_update_time = t; + level._audio_zbv_shared_ent_list = get_round_enemy_array(); + } + + zombs = level._audio_zbv_shared_ent_list; + played_sound = 0; + + for ( i = 0; i < zombs.size; i++ ) + { + if ( !isdefined( zombs[i] ) ) + continue; + + if ( zombs[i].isdog ) + continue; + + dist = 200; + z_dist = 50; + alias = level.vox_behind_zombie; + + if ( isdefined( zombs[i].zombie_move_speed ) ) + { + switch ( zombs[i].zombie_move_speed ) + { + case "walk": + dist = 200; + break; + case "run": + dist = 250; + break; + case "sprint": + dist = 275; + break; + } + } + + if ( distancesquared( zombs[i].origin, self.origin ) < dist * dist ) + { + yaw = self maps\mp\zombies\_zm_utility::getyawtospot( zombs[i].origin ); + z_diff = self.origin[2] - zombs[i].origin[2]; + + if ( ( yaw < -95 || yaw > 95 ) && abs( z_diff ) < 50 ) + { + zombs[i] thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "behind", zombs[i].animname ); + played_sound = 1; + break; + } + } + } + + if ( played_sound ) + wait 5; + } +} + +attack_vox_network_choke() +{ + while ( true ) + { + level._num_attack_vox = 0; + wait_network_frame(); + } +} + +do_zombies_playvocals( alias_type, zombie_type ) +{ +/# + if ( getdvarint( _hash_6C610250 ) > 0 ) + return; +#/ + self endon( "death" ); + + if ( !isdefined( zombie_type ) ) + zombie_type = "zombie"; + + if ( isdefined( self.shrinked ) && self.shrinked ) + return; + + if ( isdefined( self.is_inert ) && self.is_inert ) + return; + + if ( !isdefined( self.talking ) ) + self.talking = 0; + + if ( isdefined( level.script ) && level.script == "zm_tomb" ) + { + if ( isdefined( self.script_int ) && self.script_int >= 2 ) + { + zombie_type = "capzomb"; + self.zmb_vocals_attack = "zmb_vocals_capzomb_attack"; + } + else if ( isdefined( self.sndname ) ) + zombie_type = self.sndname; + } + + if ( !isdefined( level.zmb_vox[zombie_type] ) ) + { +/# + println( "ZM >> AUDIO - ZOMBIE TYPE: " + zombie_type + " has NO aliases set up for it." ); +#/ + return; + } + + if ( !isdefined( level.zmb_vox[zombie_type][alias_type] ) ) + { +/# + println( "ZM >> AUDIO - ZOMBIE TYPE: " + zombie_type + " has NO aliases set up for ALIAS_TYPE: " + alias_type ); +#/ + return; + } + + switch ( alias_type ) + { + case "teardown": + case "sprint": + case "electrocute": + case "death": + case "crawler": + case "behind": + case "attack": + case "ambient": + if ( !sndisnetworksafe() ) + return; + + break; + } + + alias = level.zmb_vox["prefix"] + level.zmb_vox[zombie_type][alias_type]; + + if ( alias_type == "attack" || alias_type == "behind" || alias_type == "death" || alias_type == "anger" || alias_type == "steal" || alias_type == "taunt" || alias_type == "teardown" ) + { + if ( isdefined( level._custom_zombie_audio_func ) ) + self [[ level._custom_zombie_audio_func ]]( alias, alias_type ); + else + self playsound( alias ); + } + else if ( !self.talking ) + { + self.talking = 1; + + if ( self is_last_zombie() ) + alias += "_loud"; + + self playsoundwithnotify( alias, "sounddone" ); + + self waittill( "sounddone" ); + + self.talking = 0; + } +} + +sndisnetworksafe() +{ + if ( !isdefined( level._num_attack_vox ) ) + level thread attack_vox_network_choke(); + + if ( level._num_attack_vox > 4 ) + return false; + + level._num_attack_vox++; + return true; +} + +is_last_zombie() +{ + if ( get_current_zombie_count() <= 1 ) + return true; + + return false; +} + +oh_shit_vox() +{ + self endon( "death_or_disconnect" ); + + while ( true ) + { + wait 1; + players = get_players(); + zombs = get_round_enemy_array(); + + if ( players.size > 1 ) + { + close_zombs = 0; + + for ( i = 0; i < zombs.size; i++ ) + { + if ( isdefined( zombs[i].favoriteenemy ) && zombs[i].favoriteenemy == self || !isdefined( zombs[i].favoriteenemy ) ) + { + if ( distancesquared( zombs[i].origin, self.origin ) < 62500 ) + close_zombs++; + } + } + + if ( close_zombs > 4 ) + { + if ( randomint( 100 ) > 75 && !( isdefined( self.isonbus ) && self.isonbus ) ) + { + self create_and_play_dialog( "general", "oh_shit" ); + wait 4; + } + } + } + } +} + +create_and_play_dialog( category, type, response, force_variant, override ) +{ + waittime = 0.25; + + if ( !isdefined( self.zmbvoxid ) ) + { +/# + if ( getdvarint( _hash_AEB127D ) > 0 ) + iprintln( "DIALOG DEBUGGER: No zmbVoxID setup on this character. Run zmbVoxInitSpeaker on this character in order to play vox" ); +#/ + return; + } + + if ( isdefined( self.dontspeak ) && self.dontspeak ) + return; +/# + if ( getdvarint( _hash_AEB127D ) > 0 ) + self thread dialog_debugger( category, type ); +#/ + isresponse = 0; + alias_suffix = undefined; + index = undefined; + prefix = undefined; + + if ( !isdefined( level.vox.speaker[self.zmbvoxid].alias[category][type] ) ) + return; + + prefix = level.vox.speaker[self.zmbvoxid].prefix; + alias_suffix = level.vox.speaker[self.zmbvoxid].alias[category][type]; + + if ( self is_player() ) + { + if ( self.sessionstate != "playing" ) + return; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && ( type != "revive_down" || type != "revive_up" ) ) + return; + + index = maps\mp\zombies\_zm_weapons::get_player_index( self ); + prefix = prefix + index + "_"; + } + + if ( isdefined( response ) ) + { + if ( isdefined( level.vox.speaker[self.zmbvoxid].response[category][type] ) ) + alias_suffix = response + level.vox.speaker[self.zmbvoxid].response[category][type]; + + isresponse = 1; + } + + sound_to_play = self zmbvoxgetlinevariant( prefix, alias_suffix, force_variant, override ); + + if ( isdefined( sound_to_play ) ) + { + if ( isdefined( level._audio_custom_player_playvox ) ) + self thread [[ level._audio_custom_player_playvox ]]( prefix, index, sound_to_play, waittime, category, type, override ); + else + self thread do_player_or_npc_playvox( prefix, index, sound_to_play, waittime, category, type, override, isresponse ); + } + else + { +/# + if ( getdvarint( _hash_AEB127D ) > 0 ) + iprintln( "DIALOG DEBUGGER: SOUND_TO_PLAY is undefined" ); +#/ + } +} + +do_player_or_npc_playvox( prefix, index, sound_to_play, waittime, category, type, override, isresponse ) +{ + self endon( "death_or_disconnect" ); + + if ( isdefined( level.skit_vox_override ) && level.skit_vox_override && ( isdefined( override ) && !override ) ) + return; + + if ( !isdefined( self.isspeaking ) ) + self.isspeaking = 0; + + if ( isdefined( self.isspeaking ) && self.isspeaking ) + { +/# + println( "DIALOG DEBUGGER: Can't play (" + ( prefix + sound_to_play ) + ") because we are speaking already." ); +#/ + return; + } + + if ( !self arenearbyspeakersactive() || isdefined( self.ignorenearbyspkrs ) && self.ignorenearbyspkrs ) + { + self.speakingline = sound_to_play; + self.isspeaking = 1; + + if ( isplayer( self ) ) + self setclientfieldtoplayer( "isspeaking", 1 ); + + self notify( "speaking", type ); + playbacktime = soundgetplaybacktime( prefix + sound_to_play ); + + if ( !isdefined( playbacktime ) ) + return; + + if ( playbacktime >= 0 ) + playbacktime *= 0.001; + else + playbacktime = 1; + + self playsoundontag( prefix + sound_to_play, "J_Head" ); + wait( playbacktime ); + + if ( isplayer( self ) && !( isdefined( isresponse ) && isresponse ) && isdefined( self.last_vo_played_time ) ) + { + if ( gettime() < self.last_vo_played_time + 5000 ) + waittime = 15; + } + + wait( waittime ); + self notify( "done_speaking" ); + self.isspeaking = 0; + + if ( isplayer( self ) ) + self setclientfieldtoplayer( "isspeaking", 0 ); + + if ( isplayer( self ) ) + self.last_vo_played_time = gettime(); + + if ( isdefined( isresponse ) && isresponse ) + return; + + if ( isdefined( level.vox.speaker[self.zmbvoxid].response ) && isdefined( level.vox.speaker[self.zmbvoxid].response[category] ) && isdefined( level.vox.speaker[self.zmbvoxid].response[category][type] ) ) + { + if ( isdefined( self.isnpc ) && self.isnpc || !flag( "solo_game" ) ) + { + if ( isdefined( level._audio_custom_response_line ) ) + level thread [[ level._audio_custom_response_line ]]( self, index, category, type ); + else + level thread setup_response_line( self, index, category, type ); + } + } + } + else + { +/# + println( "DIALOG DEBUGGER: Can't play (" + ( prefix + sound_to_play ) + ") because someone is nearby speaking already." ); +#/ + } +} + +setup_response_line( player, index, category, type ) +{ + dempsey = 0; + nikolai = 1; + takeo = 2; + richtofen = 3; + + switch ( player.entity_num ) + { + case 0: + level setup_hero_rival( player, nikolai, richtofen, category, type ); + break; + case 1: + level setup_hero_rival( player, richtofen, takeo, category, type ); + break; + case 2: + level setup_hero_rival( player, dempsey, nikolai, category, type ); + break; + case 3: + level setup_hero_rival( player, takeo, dempsey, category, type ); + break; + } +} + +setup_hero_rival( player, hero, rival, category, type ) +{ + players = get_players(); + hero_player = undefined; + rival_player = undefined; + + foreach ( ent in players ) + { + if ( ent.characterindex == hero ) + { + hero_player = ent; + continue; + } + + if ( ent.characterindex == rival ) + rival_player = ent; + } + + if ( isdefined( hero_player ) && isdefined( rival_player ) ) + { + if ( randomint( 100 ) > 50 ) + hero_player = undefined; + else + rival_player = undefined; + } + + if ( isdefined( hero_player ) && distancesquared( player.origin, hero_player.origin ) < 250000 ) + hero_player create_and_play_dialog( category, type, "hr_" ); + else if ( isdefined( rival_player ) && distancesquared( player.origin, rival_player.origin ) < 250000 ) + rival_player create_and_play_dialog( category, type, "riv_" ); +} + +do_announcer_playvox( category, type, team ) +{ + if ( !isdefined( level.vox.speaker["announcer"].alias[category] ) || !isdefined( level.vox.speaker["announcer"].alias[category][type] ) ) + return; + + if ( !isdefined( level.devil_is_speaking ) ) + level.devil_is_speaking = 0; + + prefix = level.vox.speaker["announcer"].prefix; + suffix = level.vox.speaker["announcer"].ent zmbvoxgetlinevariant( prefix, level.vox.speaker["announcer"].alias[category][type] ); + + if ( !isdefined( suffix ) ) + return; + + alias = prefix + suffix; + + if ( level.devil_is_speaking == 0 ) + { + level.devil_is_speaking = 1; + + if ( !isdefined( team ) ) + level.vox.speaker["announcer"].ent playsoundwithnotify( alias, "sounddone" ); + else + level thread zmbvoxannouncertoteam( category, type, team ); + + level.vox.speaker["announcer"].ent waittill( "sounddone" ); + + level.devil_is_speaking = 0; + } +} + +zmbvoxannouncertoteam( category, type, team ) +{ + prefix = level.vox.speaker["announcer"].prefix; + alias_to_team = prefix + level.vox.speaker["announcer"].ent zmbvoxgetlinevariant( prefix, level.vox.speaker["announcer"].alias[category][type] ); + + if ( isdefined( level.vox.speaker["announcer"].response[category][type] ) ) + alias_to_rival = prefix + level.vox.speaker["announcer"].ent zmbvoxgetlinevariant( prefix, level.vox.speaker["announcer"].response[category][type] ); + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i]._encounters_team ) ) + continue; + + if ( players[i]._encounters_team == team ) + { + level.vox.speaker["announcer"].ent playsoundtoplayer( alias_to_team, players[i] ); + continue; + } + + if ( isdefined( alias_to_rival ) ) + level.vox.speaker["announcer"].ent playsoundtoplayer( alias_to_rival, players[i] ); + } + + wait 3; + level.vox.speaker["announcer"].ent notify( "sounddone" ); +} + +player_killstreak_timer() +{ + self endon( "disconnect" ); + self endon( "death" ); + + if ( getdvar( _hash_FB12F109 ) == "" ) + setdvar( "zombie_kills", "7" ); + + if ( getdvar( _hash_D0575D76 ) == "" ) + setdvar( "zombie_kill_timer", "5" ); + + kills = getdvarint( _hash_FB12F109 ); + time = getdvarint( _hash_D0575D76 ); + + if ( !isdefined( self.timerisrunning ) ) + { + self.timerisrunning = 0; + self.killcounter = 0; + } + + while ( true ) + { + self waittill( "zom_kill", zomb ); + + if ( isdefined( zomb._black_hole_bomb_collapse_death ) && zomb._black_hole_bomb_collapse_death == 1 ) + continue; + + if ( isdefined( zomb.microwavegun_death ) && zomb.microwavegun_death ) + continue; + + self.killcounter++; + + if ( self.timerisrunning != 1 ) + { + self.timerisrunning = 1; + self thread timer_actual( kills, time ); + } + } +} + +player_zombie_kill_vox( hit_location, player, mod, zombie ) +{ + weapon = player getcurrentweapon(); + dist = distancesquared( player.origin, zombie.origin ); + + if ( !isdefined( level.zombie_vars[player.team]["zombie_insta_kill"] ) ) + level.zombie_vars[player.team]["zombie_insta_kill"] = 0; + + instakill = level.zombie_vars[player.team]["zombie_insta_kill"]; + death = [[ level.audio_get_mod_type ]]( hit_location, mod, weapon, zombie, instakill, dist, player ); + chance = get_response_chance( death ); + + if ( chance > randomintrange( 1, 100 ) && !( isdefined( player.force_wait_on_kill_line ) && player.force_wait_on_kill_line ) ) + { + player.force_wait_on_kill_line = 1; + player create_and_play_dialog( "kill", death ); + wait 2; + + if ( isdefined( player ) ) + player.force_wait_on_kill_line = 0; + } +} + +get_response_chance( event ) +{ + if ( !isdefined( level.response_chances[event] ) ) + return 0; + + return level.response_chances[event]; +} + +get_mod_type( impact, mod, weapon, zombie, instakill, dist, player ) +{ + close_dist = 4096; + med_dist = 15376; + far_dist = 160000; + + if ( isdefined( zombie._black_hole_bomb_collapse_death ) && zombie._black_hole_bomb_collapse_death == 1 ) + return "default"; + + if ( zombie.animname == "screecher_zombie" && mod == "MOD_MELEE" ) + return "killed_screecher"; + + if ( is_placeable_mine( weapon ) ) + { + if ( !instakill ) + return "claymore"; + else + return "weapon_instakill"; + } + + if ( weapon == "jetgun_zm" || weapon == "jetgun_upgraded_zm" ) + { + if ( instakill ) + return "weapon_instakill"; + else + return "jetgun_kill"; + } + + if ( weapon == "slipgun_zm" || weapon == "slipgun_upgraded_zm" ) + { + if ( instakill ) + return "weapon_instakill"; + else + return "slipgun_kill"; + } + + if ( isdefined( zombie.damageweapon ) && zombie.damageweapon == "cymbal_monkey_zm" ) + { + if ( instakill ) + return "weapon_instakill"; + else + return "monkey"; + } + + if ( is_headshot( weapon, impact, mod ) && dist >= far_dist ) + return "headshot"; + + if ( ( mod == "MOD_MELEE" || mod == "MOD_BAYONET" || mod == "MOD_UNKNOWN" ) && dist < close_dist ) + { + if ( !instakill ) + { + if ( player hasweapon( "sickle_knife_zm" ) ) + return "sickle"; + else + return "melee"; + } + else + return "melee_instakill"; + } + + if ( isdefined( zombie.damageweapon ) && zombie.damageweapon == "zombie_nesting_doll_single" ) + { + if ( !instakill ) + return "dolls"; + else + return "weapon_instakill"; + } + + if ( is_explosive_damage( mod ) && weapon != "ray_gun_zm" && !( isdefined( zombie.is_on_fire ) && zombie.is_on_fire ) ) + { + if ( !instakill ) + return "explosive"; + else + return "weapon_instakill"; + } + + if ( ( issubstr( weapon, "flame" ) || issubstr( weapon, "molotov_" ) || issubstr( weapon, "napalmblob_" ) ) && ( mod == "MOD_BURNED" || mod == "MOD_GRENADE" || mod == "MOD_GRENADE_SPLASH" ) ) + { + if ( !instakill ) + return "flame"; + else + return "weapon_instakill"; + } + + if ( weapon == "ray_gun_zm" && dist > far_dist ) + { + if ( !instakill ) + return "raygun"; + else + return "weapon_instakill"; + } + + if ( !isdefined( impact ) ) + impact = ""; + + if ( mod == "MOD_RIFLE_BULLET" || mod == "MOD_PISTOL_BULLET" ) + { + if ( !instakill ) + return "bullet"; + else + return "weapon_instakill"; + } + + if ( instakill ) + return "default"; + + if ( mod != "MOD_MELEE" && zombie.animname == "quad_zombie" ) + return "quad"; + + if ( mod != "MOD_MELEE" && zombie.animname == "astro_zombie" ) + return "astro"; + + if ( mod != "MOD_MELEE" && !zombie.has_legs ) + return "crawler"; + + if ( mod != "MOD_BURNED" && dist < close_dist ) + return "closekill"; + + return "default"; +} + +timer_actual( kills, time ) +{ + self endon( "disconnect" ); + self endon( "death" ); + timer = gettime() + time * 1000; + + while ( gettime() < timer ) + { + if ( self.killcounter > kills ) + { + self create_and_play_dialog( "kill", "streak" ); + wait 1; + self.killcounter = 0; + timer = -1; + } + + wait 0.1; + } + + wait 10; + self.killcounter = 0; + self.timerisrunning = 0; +} + +perks_a_cola_jingle_timer() +{ + if ( isdefined( level.sndperksacolaloopoverride ) ) + { + self thread [[ level.sndperksacolaloopoverride ]](); + return; + } + + self endon( "death" ); + self thread play_random_broken_sounds(); + + while ( true ) + { + wait( randomfloatrange( 31, 45 ) ); + + if ( randomint( 100 ) < 15 ) + self thread play_jingle_or_stinger( self.script_sound ); + } +} + +play_jingle_or_stinger( perksacola ) +{ + if ( isdefined( level.sndperksacolajingleoverride ) ) + { + self thread [[ level.sndperksacolajingleoverride ]](); + return; + } + + playsoundatposition( "evt_electrical_surge", self.origin ); + + if ( !isdefined( self.jingle_is_playing ) ) + self.jingle_is_playing = 0; + + if ( isdefined( perksacola ) ) + { + if ( self.jingle_is_playing == 0 && level.music_override == 0 ) + { + self.jingle_is_playing = 1; + self playsoundontag( perksacola, "tag_origin", "sound_done" ); + + if ( issubstr( perksacola, "sting" ) ) + wait 10; + else if ( isdefined( self.longjinglewait ) ) + wait 60; + else + wait 30; + + self.jingle_is_playing = 0; + } + } +} + +play_random_broken_sounds() +{ + self endon( "death" ); + level endon( "jingle_playing" ); + + if ( !isdefined( self.script_sound ) ) + self.script_sound = "null"; + + if ( self.script_sound == "mus_perks_revive_jingle" ) + { + while ( true ) + { + wait( randomfloatrange( 7, 18 ) ); + playsoundatposition( "zmb_perks_broken_jingle", self.origin ); + playsoundatposition( "evt_electrical_surge", self.origin ); + } + } + else + { + while ( true ) + { + wait( randomfloatrange( 7, 18 ) ); + playsoundatposition( "evt_electrical_surge", self.origin ); + } + } +} + +perk_vox( perk ) +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( !isdefined( level.vox.speaker["player"].alias["perk"][perk] ) ) + { +/# + iprintlnbold( perk + " has no PLR VOX category set up." ); +#/ + return; + } + + self create_and_play_dialog( "perk", perk ); +} + +dialog_debugger( category, type ) +{ +/# + println( "DIALOG DEBUGGER: " + self.zmbvoxid + " attempting to speak" ); + + if ( !isdefined( level.vox.speaker[self.zmbvoxid].alias[category][type] ) ) + { + iprintlnbold( self.zmbvoxid + " tried to play a line, but no alias exists. Category: " + category + " Type: " + type ); + println( "DIALOG DEBUGGER ERROR: Alias Not Defined For " + category + " " + type ); + } + + if ( !isdefined( level.vox.speaker[self.zmbvoxid].response ) ) + println( "DIALOG DEBUGGER ERROR: Response Alias Not Defined For " + category + " " + type + "_response" ); +#/ +} + +init_music_states() +{ + level.music_override = 0; + level.music_round_override = 0; + level.old_music_state = undefined; + level.zmb_music_states = []; + level thread setupmusicstate( "round_start", "mus_zombie_round_start", 1, 1, 1, "WAVE" ); + level thread setupmusicstate( "round_end", "mus_zombie_round_over", 1, 1, 1, "SILENCE" ); + level thread setupmusicstate( "wave_loop", "WAVE", 0, 1, undefined, undefined ); + level thread setupmusicstate( "game_over", "mus_zombie_game_over", 1, 0, undefined, "SILENCE" ); + level thread setupmusicstate( "dog_start", "mus_zombie_dog_start", 1, 1, undefined, undefined ); + level thread setupmusicstate( "dog_end", "mus_zombie_dog_end", 1, 1, undefined, undefined ); + level thread setupmusicstate( "egg", "EGG", 0, 0, undefined, undefined ); + level thread setupmusicstate( "egg_safe", "EGG_SAFE", 0, 0, undefined, undefined ); + level thread setupmusicstate( "egg_a7x", "EGG_A7X", 0, 0, undefined, undefined ); + level thread setupmusicstate( "sam_reveal", "SAM", 0, 0, undefined, undefined ); + level thread setupmusicstate( "brutus_round_start", "mus_event_brutus_round_start", 1, 1, 0, "WAVE" ); + level thread setupmusicstate( "last_life", "LAST_LIFE", 0, 1, undefined, undefined ); +} + +setupmusicstate( state, alias, is_alias, override, round_override, musicstate ) +{ + if ( !isdefined( level.zmb_music_states[state] ) ) + level.zmb_music_states[state] = spawnstruct(); + + level.zmb_music_states[state].music = alias; + level.zmb_music_states[state].is_alias = is_alias; + level.zmb_music_states[state].override = override; + level.zmb_music_states[state].round_override = round_override; + level.zmb_music_states[state].musicstate = musicstate; +} + +change_zombie_music( state ) +{ + wait 0.05; + m = level.zmb_music_states[state]; + + if ( !isdefined( m ) ) + { +/# + iprintlnbold( "Called change_zombie_music on undefined state: " + state ); +#/ + return; + } + + do_logic = 1; + + if ( !isdefined( level.old_music_state ) ) + do_logic = 0; + + if ( do_logic ) + { + if ( level.old_music_state == m ) + return; + else if ( level.old_music_state.music == "mus_zombie_game_over" ) + return; + } + + if ( !isdefined( m.round_override ) ) + m.round_override = 0; + + if ( m.override == 1 && level.music_override == 1 ) + return; + + if ( m.round_override == 1 && level.music_round_override == 1 ) + return; + + if ( m.is_alias ) + { + if ( isdefined( m.musicstate ) ) + maps\mp\_music::setmusicstate( m.musicstate ); + + play_sound_2d( m.music ); + } + else + maps\mp\_music::setmusicstate( m.music ); + + level.old_music_state = m; +} + +weapon_toggle_vox( alias, weapon ) +{ + self notify( "audio_activated_trigger" ); + self endon( "audio_activated_trigger" ); + prefix = "vox_pa_switcher_"; + sound_to_play = prefix + alias; + type = undefined; + + if ( isdefined( weapon ) ) + { + type = get_weapon_num( weapon ); + + if ( !isdefined( type ) ) + return; + } + + self stopsounds(); + wait 0.05; + + if ( isdefined( type ) ) + { + self playsoundwithnotify( prefix + "weapon_" + type, "sounddone" ); + + self waittill( "sounddone" ); + } + + self playsound( sound_to_play + "_0" ); +} + +get_weapon_num( weapon ) +{ + weapon_num = undefined; + + switch ( weapon ) + { + case "humangun_zm": + weapon_num = 0; + break; + case "sniper_explosive_zm": + weapon_num = 1; + break; + case "tesla_gun_zm": + weapon_num = 2; + break; + } + + return weapon_num; +} + +addasspeakernpc( ignorenearbyspeakers ) +{ + if ( !isdefined( level.npcs ) ) + level.npcs = []; + + if ( isdefined( ignorenearbyspeakers ) && ignorenearbyspeakers ) + self.ignorenearbyspkrs = 1; + else + self.ignorenearbyspkrs = 0; + + self.isnpc = 1; + level.npcs[level.npcs.size] = self; +} + +arenearbyspeakersactive() +{ + radius = 1000; + nearbyspeakeractive = 0; + speakers = get_players(); + + if ( isdefined( level.npcs ) ) + speakers = arraycombine( speakers, level.npcs, 1, 0 ); + + foreach ( person in speakers ) + { + if ( self == person ) + continue; + + if ( person is_player() ) + { + if ( person.sessionstate != "playing" ) + continue; + + if ( person maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + continue; + } + else + { + + } + + if ( isdefined( person.isspeaking ) && person.isspeaking && !( isdefined( person.ignorenearbyspkrs ) && person.ignorenearbyspkrs ) ) + { + if ( distancesquared( self.origin, person.origin ) < radius * radius ) + nearbyspeakeractive = 1; + } + } + + return nearbyspeakeractive; +} + +zmbvoxcreate() +{ + vox = spawnstruct(); + vox.speaker = []; + return vox; +} + +zmbvoxinitspeaker( speaker, prefix, ent ) +{ + ent.zmbvoxid = speaker; + + if ( !isdefined( self.speaker[speaker] ) ) + { + self.speaker[speaker] = spawnstruct(); + self.speaker[speaker].alias = []; + } + + self.speaker[speaker].prefix = prefix; + self.speaker[speaker].ent = ent; +} + +zmbvoxadd( speaker, category, type, alias, response ) +{ + assert( isdefined( speaker ) ); + assert( isdefined( category ) ); + assert( isdefined( type ) ); + assert( isdefined( alias ) ); + + if ( !isdefined( self.speaker[speaker] ) ) + { + self.speaker[speaker] = spawnstruct(); + self.speaker[speaker].alias = []; + } + + if ( !isdefined( self.speaker[speaker].alias[category] ) ) + self.speaker[speaker].alias[category] = []; + + self.speaker[speaker].alias[category][type] = alias; + + if ( isdefined( response ) ) + { + if ( !isdefined( self.speaker[speaker].response ) ) + self.speaker[speaker].response = []; + + if ( !isdefined( self.speaker[speaker].response[category] ) ) + self.speaker[speaker].response[category] = []; + + self.speaker[speaker].response[category][type] = response; + } + + create_vox_timer( type ); +} + +zmbvoxgetlinevariant( prefix, alias_suffix, force_variant, override ) +{ + if ( !isdefined( self.sound_dialog ) ) + { + self.sound_dialog = []; + self.sound_dialog_available = []; + } + + if ( !isdefined( self.sound_dialog[alias_suffix] ) ) + { + num_variants = maps\mp\zombies\_zm_spawner::get_number_variants( prefix + alias_suffix ); + + if ( num_variants <= 0 ) + { +/# + if ( getdvarint( _hash_AEB127D ) > 0 ) + println( "DIALOG DEBUGGER: No variants found for - " + prefix + alias_suffix ); +#/ + return undefined; + } + + for ( i = 0; i < num_variants; i++ ) + self.sound_dialog[alias_suffix][i] = i; + + self.sound_dialog_available[alias_suffix] = []; + } + + if ( self.sound_dialog_available[alias_suffix].size <= 0 ) + { + for ( i = 0; i < self.sound_dialog[alias_suffix].size; i++ ) + self.sound_dialog_available[alias_suffix][i] = self.sound_dialog[alias_suffix][i]; + } + + variation = random( self.sound_dialog_available[alias_suffix] ); + arrayremovevalue( self.sound_dialog_available[alias_suffix], variation ); + + if ( isdefined( force_variant ) ) + variation = force_variant; + + if ( !isdefined( override ) ) + override = 0; + + return alias_suffix + "_" + variation; +} + +zmbvoxcrowdonteam( alias, team, other_alias ) +{ + alias = "vox_crowd_" + alias; + + if ( !isdefined( team ) ) + { + level play_sound_2d( alias ); + return; + } + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i]._encounters_team ) ) + continue; + + if ( players[i]._encounters_team == team ) + { + players[i] playsoundtoplayer( alias, players[i] ); + continue; + } + + if ( isdefined( other_alias ) ) + players[i] playsoundtoplayer( other_alias, players[i] ); + } +} + +playvoxtoplayer( category, type, force_variant ) +{ + if ( self.sessionstate != "playing" ) + return; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + return; + + prefix = level.vox.speaker[self.zmbvoxid].prefix; + alias_suffix = level.vox.speaker[self.zmbvoxid].alias[category][type]; + prefix = prefix + self.characterindex + "_"; + + if ( !isdefined( alias_suffix ) ) + return; + + sound_to_play = self zmbvoxgetlinevariant( prefix, alias_suffix, force_variant ); + + if ( isdefined( sound_to_play ) ) + { + sound = prefix + sound_to_play; + self playsoundtoplayer( sound, self ); + } +} + +sndmusicstingerevent( type, player ) +{ + if ( isdefined( level.sndmusicstingerevent ) ) + [[ level.sndmusicstingerevent ]]( type, player ); +} + +custom_kill_damaged_vo( player ) +{ + self notify( "sound_damage_player_updated" ); + self endon( "death" ); + self endon( "sound_damage_player_updated" ); + self.sound_damage_player = player; + wait 5; + self.sound_damage_player = undefined; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_audio_announcer.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_audio_announcer.gsc new file mode 100644 index 0000000..43d5473 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_audio_announcer.gsc @@ -0,0 +1,443 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_spawner; + +init() +{ + game["zmbdialog"] = []; + game["zmbdialog"]["prefix"] = "vox_zmba"; + createvox( "carpenter", "powerup_carpenter" ); + createvox( "insta_kill", "powerup_instakill" ); + createvox( "double_points", "powerup_doublepoints" ); + createvox( "nuke", "powerup_nuke" ); + createvox( "full_ammo", "powerup_maxammo" ); + createvox( "fire_sale", "powerup_firesale" ); + createvox( "minigun", "powerup_death_machine" ); + createvox( "zombie_blood", "powerup_zombie_blood" ); + createvox( "boxmove", "event_magicbox" ); + createvox( "dogstart", "event_dogstart" ); + thread init_gamemodespecificvox( getdvar( "ui_gametype" ), getdvar( "ui_zm_mapstartlocation" ) ); + level.allowzmbannouncer = 1; +} + +init_gamemodespecificvox( mode, location ) +{ + switch ( mode ) + { + case "zmeat": + init_meatvox( "meat" ); + break; + case "zrace": + init_racevox( "race", location ); + break; + case "zgrief": + init_griefvox( "grief" ); + break; + case "zcleansed": + init_cleansed( location ); + break; + default: + init_gamemodecommonvox(); + break; + } +} + +init_gamemodecommonvox( prefix ) +{ + createvox( "rules", "rules", prefix ); + createvox( "countdown", "intro", prefix ); + createvox( "side_switch", "side_switch", prefix ); + createvox( "round_win", "win_rd", prefix ); + createvox( "round_lose", "lose_rd", prefix ); + createvox( "round_tied", "tied_rd", prefix ); + createvox( "match_win", "win", prefix ); + createvox( "match_lose", "lose", prefix ); + createvox( "match_tied", "tied", prefix ); +} + +init_griefvox( prefix ) +{ + init_gamemodecommonvox( prefix ); + createvox( "1_player_down", "1rivdown", prefix ); + createvox( "2_player_down", "2rivdown", prefix ); + createvox( "3_player_down", "3rivdown", prefix ); + createvox( "4_player_down", "4rivdown", prefix ); + createvox( "grief_restarted", "restart", prefix ); + createvox( "grief_lost", "lose", prefix ); + createvox( "grief_won", "win", prefix ); + createvox( "1_player_left", "1rivup", prefix ); + createvox( "2_player_left", "2rivup", prefix ); + createvox( "3_player_left", "3rivup", prefix ); + createvox( "last_player", "solo", prefix ); +} + +init_cleansed( prefix ) +{ + init_gamemodecommonvox( prefix ); + createvox( "dr_start_single_0", "dr_start_0" ); + createvox( "dr_start_2", "dr_start_1" ); + createvox( "dr_start_3", "dr_start_2" ); + createvox( "dr_cure_found_line", "dr_cure_found" ); + createvox( "dr_monkey_killer", "dr_monkey_0" ); + createvox( "dr_monkey_killee", "dr_monkey_1" ); + createvox( "dr_human_killed", "dr_kill_plr" ); + createvox( "dr_human_killer", "dr_kill_plr_2" ); + createvox( "dr_survival", "dr_plr_survive_0" ); + createvox( "dr_zurvival", "dr_zmb_survive_2" ); + createvox( "dr_countdown0", "dr_plr_survive_1" ); + createvox( "dr_countdown1", "dr_plr_survive_2" ); + createvox( "dr_countdown2", "dr_plr_survive_3" ); + createvox( "dr_ending", "dr_time_0" ); +} + +init_meatvox( prefix ) +{ + init_gamemodecommonvox( prefix ); + createvox( "meat_drop", "drop", prefix ); + createvox( "meat_grab", "grab", prefix ); + createvox( "meat_grab_A", "team_cdc", prefix ); + createvox( "meat_grab_B", "team_cia", prefix ); + createvox( "meat_land", "land", prefix ); + createvox( "meat_hold", "hold", prefix ); + createvox( "meat_revive_1", "revive1", prefix ); + createvox( "meat_revive_2", "revive2", prefix ); + createvox( "meat_revive_3", "revive3", prefix ); + createvox( "meat_ring_splitter", "ring_tripple", prefix ); + createvox( "meat_ring_minigun", "ring_death", prefix ); + createvox( "meat_ring_ammo", "ring_ammo", prefix ); +} + +init_racevox( prefix, location ) +{ + init_gamemodecommonvox( prefix ); + + switch ( location ) + { + case "tunnel": + createvox( "rules", "rules_" + location, prefix ); + createvox( "countdown", "intro_" + location, prefix ); + break; + case "power": + createvox( "rules", "rules_" + location, prefix ); + createvox( "countdown", "intro_" + location, prefix ); + createvox( "lap1", "lap1", prefix ); + createvox( "lap2", "lap2", prefix ); + createvox( "lap_final", "lap_final", prefix ); + break; + case "farm": + createvox( "rules", "rules_" + location, prefix ); + createvox( "countdown", "intro_" + location, prefix ); + createvox( "hoop_area", "hoop_area", prefix ); + createvox( "hoop_miss", "hoop_miss", prefix ); + break; + default: + break; + } + + createvox( "race_room_2_ally", "room2_ally", prefix ); + createvox( "race_room_3_ally", "room3_ally", prefix ); + createvox( "race_room_4_ally", "room4_ally", prefix ); + createvox( "race_room_5_ally", "room5_ally", prefix ); + createvox( "race_room_2_axis", "room2_axis", prefix ); + createvox( "race_room_3_axis", "room3_axis", prefix ); + createvox( "race_room_4_axis", "room4_axis", prefix ); + createvox( "race_room_5_axis", "room5_axis", prefix ); + createvox( "race_ahead_1_ally", "ahead1_ally", prefix ); + createvox( "race_ahead_2_ally", "ahead2_ally", prefix ); + createvox( "race_ahead_3_ally", "ahead3_ally", prefix ); + createvox( "race_ahead_4_ally", "ahead4_ally", prefix ); + createvox( "race_ahead_1_axis", "ahead1_axis", prefix ); + createvox( "race_ahead_2_axis", "ahead2_axis", prefix ); + createvox( "race_ahead_3_axis", "ahead3_axis", prefix ); + createvox( "race_ahead_4_axis", "ahead4_axis", prefix ); + createvox( "race_kill_15", "door15", prefix ); + createvox( "race_kill_10", "door10", prefix ); + createvox( "race_kill_5", "door5", prefix ); + createvox( "race_kill_3", "door3", prefix ); + createvox( "race_kill_1", "door1", prefix ); + createvox( "race_door_open", "door_open", prefix ); + createvox( "race_door_nag", "door_nag", prefix ); + createvox( "race_grief_incoming", "grief_income_ammo", prefix ); + createvox( "race_grief_land", "grief_land", prefix ); + createvox( "race_laststand", "last_stand", prefix ); +} + +createvox( type, alias, gametype ) +{ + if ( !isdefined( gametype ) ) + gametype = ""; + else + gametype += "_"; + + game["zmbdialog"][type] = gametype + alias; +} + +announceroundwinner( winner, delay ) +{ + if ( isdefined( delay ) && delay > 0 ) + wait( delay ); + + if ( !isdefined( winner ) || isplayer( winner ) ) + return; + + if ( winner != "tied" ) + { + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( player._encounters_team ) && player._encounters_team == winner ) + { + winning_team = player.pers["team"]; + break; + } + } + + losing_team = getotherteam( winning_team ); + leaderdialog( "round_win", winning_team, undefined, 1 ); + leaderdialog( "round_lose", losing_team, undefined, 1 ); + } + else + leaderdialog( "round_tied", undefined, undefined, 1 ); +} + +announcematchwinner( winner, delay ) +{ + if ( isdefined( delay ) && delay > 0 ) + wait( delay ); + + if ( !isdefined( winner ) || isplayer( winner ) ) + return; + + if ( winner != "tied" ) + { + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( player._encounters_team ) && player._encounters_team == winner ) + { + winning_team = player.pers["team"]; + break; + } + } + + losing_team = getotherteam( winning_team ); + leaderdialog( "match_win", winning_team, undefined, 1 ); + leaderdialog( "match_lose", losing_team, undefined, 1 ); + } + else + leaderdialog( "match_tied", undefined, undefined, 1 ); +} + +announcegamemoderules() +{ + if ( getdvar( "ui_zm_mapstartlocation" ) == "town" ) + leaderdialog( "rules", undefined, undefined, undefined, 20 ); +} + +leaderdialog( dialog, team, group, queue, waittime ) +{ + assert( isdefined( level.players ) ); + + if ( !isdefined( team ) ) + { + leaderdialogbothteams( dialog, "allies", dialog, "axis", group, queue, waittime ); + return; + } + + if ( level.splitscreen ) + { + if ( level.players.size ) + level.players[0] leaderdialogonplayer( dialog, group, queue, waittime ); + + return; + } + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isdefined( player.pers["team"] ) && player.pers["team"] == team ) + player leaderdialogonplayer( dialog, group, queue, waittime ); + } +} + +leaderdialogbothteams( dialog1, team1, dialog2, team2, group, queue, waittime ) +{ + assert( isdefined( level.players ) ); + + if ( level.splitscreen ) + { + if ( level.players.size ) + level.players[0] leaderdialogonplayer( dialog1, group, queue, waittime ); + + return; + } + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + team = player.pers["team"]; + + if ( !isdefined( team ) ) + continue; + + if ( team == team1 ) + { + player leaderdialogonplayer( dialog1, group, queue, waittime ); + continue; + } + + if ( team == team2 ) + player leaderdialogonplayer( dialog2, group, queue, waittime ); + } +} + +leaderdialogonplayer( dialog, group, queue, waittime ) +{ + team = self.pers["team"]; + + if ( !isdefined( team ) ) + return; + + if ( team != "allies" && team != "axis" ) + return; + + if ( isdefined( group ) ) + { + if ( self.zmbdialoggroup == group ) + return; + + hadgroupdialog = isdefined( self.zmbdialoggroups[group] ); + self.zmbdialoggroups[group] = dialog; + dialog = group; + + if ( hadgroupdialog ) + return; + } + + if ( !self.zmbdialogactive ) + self thread playleaderdialogonplayer( dialog, team, waittime ); + else if ( isdefined( queue ) && queue ) + self.zmbdialogqueue[self.zmbdialogqueue.size] = dialog; +} + +playleaderdialogonplayer( dialog, team, waittime ) +{ + self endon( "disconnect" ); + + if ( level.allowzmbannouncer ) + { + if ( !isdefined( game["zmbdialog"][dialog] ) ) + { +/# + if ( getdvarint( _hash_AEB127D ) > 0 ) + println( "DIALOG DEBUGGER: No VOX created for - " + dialog ); +#/ + return; + } + } + + self.zmbdialogactive = 1; + + if ( isdefined( self.zmbdialoggroups[dialog] ) ) + { + group = dialog; + dialog = self.zmbdialoggroups[group]; + self.zmbdialoggroups[group] = undefined; + self.zmbdialoggroup = group; + } + + if ( level.allowzmbannouncer ) + { + alias = game["zmbdialog"]["prefix"] + "_" + game["zmbdialog"][dialog]; + variant = self getleaderdialogvariant( alias ); + + if ( !isdefined( variant ) ) + full_alias = alias; + else + full_alias = alias + "_" + variant; + + self playlocalsound( full_alias ); + } + + if ( isdefined( waittime ) ) + wait( waittime ); + else + wait 4.0; + + self.zmbdialogactive = 0; + self.zmbdialoggroup = ""; + + if ( self.zmbdialogqueue.size > 0 && level.allowzmbannouncer ) + { + nextdialog = self.zmbdialogqueue[0]; + + for ( i = 1; i < self.zmbdialogqueue.size; i++ ) + self.zmbdialogqueue[i - 1] = self.zmbdialogqueue[i]; + + self.zmbdialogqueue[i - 1] = undefined; + self thread playleaderdialogonplayer( nextdialog, team ); + } +} + +getleaderdialogvariant( alias ) +{ + if ( !isdefined( alias ) ) + return; + + if ( !isdefined( level.announcer_dialog ) ) + { + level.announcer_dialog = []; + level.announcer_dialog_available = []; + } + + num_variants = maps\mp\zombies\_zm_spawner::get_number_variants( alias ); + + if ( num_variants <= 0 ) + { +/# + if ( getdvarint( _hash_AEB127D ) > 0 ) + println( "DIALOG DEBUGGER: No variants found for - " + alias ); +#/ + return undefined; + } + + for ( i = 0; i < num_variants; i++ ) + level.announcer_dialog[alias][i] = i; + + level.announcer_dialog_available[alias] = []; + + if ( level.announcer_dialog_available[alias].size <= 0 ) + level.announcer_dialog_available[alias] = level.announcer_dialog[alias]; + + variation = random( level.announcer_dialog_available[alias] ); + level.announcer_dialog_available[alias] = arrayremovevalue( level.announcer_dialog_available[alias], variation ); + return variation; +} + +getroundswitchdialog( switchtype ) +{ + switch ( switchtype ) + { + case "halftime": + return "halftime"; + case "overtime": + return "overtime"; + default: + return "side_switch"; + } +} + +getotherteam( team ) +{ + if ( team == "allies" ) + return "axis"; + else + return "allies"; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_blockers.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_blockers.gsc new file mode 100644 index 0000000..da2f90f --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_blockers.gsc @@ -0,0 +1,2273 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\zombies\_zm_score; +#include maps\mp\_demo; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_unitrigger; + +init() +{ + init_blockers(); + + if ( isdefined( level.quantum_bomb_register_result_func ) ) + [[ level.quantum_bomb_register_result_func ]]( "open_nearest_door", ::quantum_bomb_open_nearest_door_result, 35, ::quantum_bomb_open_nearest_door_validation ); +} + +init_blockers() +{ + level.exterior_goals = getstructarray( "exterior_goal", "targetname" ); + array_thread( level.exterior_goals, ::blocker_init ); + zombie_doors = getentarray( "zombie_door", "targetname" ); + + if ( isdefined( zombie_doors ) ) + { + flag_init( "door_can_close" ); + array_thread( zombie_doors, ::door_init ); + } + + zombie_debris = getentarray( "zombie_debris", "targetname" ); + array_thread( zombie_debris, ::debris_init ); + flag_blockers = getentarray( "flag_blocker", "targetname" ); + array_thread( flag_blockers, ::flag_blocker ); +} + +door_init() +{ + self.type = undefined; + self.purchaser = undefined; + self._door_open = 0; + targets = getentarray( self.target, "targetname" ); + + if ( isdefined( self.script_flag ) && !isdefined( level.flag[self.script_flag] ) ) + { + if ( isdefined( self.script_flag ) ) + { + tokens = strtok( self.script_flag, "," ); + + for ( i = 0; i < tokens.size; i++ ) + flag_init( self.script_flag ); + } + } + + if ( !isdefined( self.script_noteworthy ) ) + self.script_noteworthy = "default"; + + self.doors = []; + + for ( i = 0; i < targets.size; i++ ) + { + targets[i] door_classify( self ); + + if ( !isdefined( targets[i].og_origin ) ) + { + targets[i].og_origin = targets[i].origin; + targets[i].og_angles = targets[i].angles; + } + } + + cost = 1000; + + if ( isdefined( self.zombie_cost ) ) + cost = self.zombie_cost; + + self setcursorhint( "HINT_NOICON" ); + self thread door_think(); + + if ( isdefined( self.script_noteworthy ) ) + { + if ( self.script_noteworthy == "electric_door" || self.script_noteworthy == "electric_buyable_door" ) + { + if ( getdvar( "ui_gametype" ) == "zgrief" ) + { + self setinvisibletoall(); + return; + } + + self sethintstring( &"ZOMBIE_NEED_POWER" ); + + if ( isdefined( level.door_dialog_function ) ) + self thread [[ level.door_dialog_function ]](); + + return; + } + else if ( self.script_noteworthy == "local_electric_door" ) + { + if ( getdvar( "ui_gametype" ) == "zgrief" ) + { + self setinvisibletoall(); + return; + } + + self sethintstring( &"ZOMBIE_NEED_LOCAL_POWER" ); + + if ( isdefined( level.door_dialog_function ) ) + self thread [[ level.door_dialog_function ]](); + + return; + } + else if ( self.script_noteworthy == "kill_counter_door" ) + { + self sethintstring( &"ZOMBIE_DOOR_ACTIVATE_COUNTER", cost ); + return; + } + } + + self set_hint_string( self, "default_buy_door", cost ); +} + +door_classify( parent_trig ) +{ + if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "clip" ) + { + parent_trig.clip = self; + parent_trig.script_string = "clip"; + } + else if ( !isdefined( self.script_string ) ) + { + if ( isdefined( self.script_angles ) ) + self.script_string = "rotate"; + else if ( isdefined( self.script_vector ) ) + self.script_string = "move"; + } + else + { + if ( !isdefined( self.script_string ) ) + self.script_string = ""; + + switch ( self.script_string ) + { + case "anim": + assert( isdefined( self.script_animname ), "Blocker_init: You must specify a script_animname for " + self.targetname ); + assert( isdefined( level.scr_anim[self.script_animname] ), "Blocker_init: You must define a level.scr_anim for script_anim -> " + self.script_animname ); + assert( isdefined( level.blocker_anim_func ), "Blocker_init: You must define a level.blocker_anim_func" ); + break; + case "counter_1s": + parent_trig.counter_1s = self; + return; + case "counter_10s": + parent_trig.counter_10s = self; + return; + case "counter_100s": + parent_trig.counter_100s = self; + return; + case "explosives": + if ( !isdefined( parent_trig.explosives ) ) + parent_trig.explosives = []; + + parent_trig.explosives[parent_trig.explosives.size] = self; + return; + } + } + + if ( self.classname == "script_brushmodel" ) + self disconnectpaths(); + + parent_trig.doors[parent_trig.doors.size] = self; +} + +door_buy() +{ + self waittill( "trigger", who, force ); + + if ( isdefined( level.custom_door_buy_check ) ) + { + if ( !who [[ level.custom_door_buy_check ]]( self ) ) + return false; + } + + if ( getdvarint( _hash_2ECA0C0E ) > 0 || isdefined( force ) && force ) + return true; + + if ( !who usebuttonpressed() ) + return false; + + if ( who in_revive_trigger() ) + return false; + + if ( is_player_valid( who ) ) + { + players = get_players(); + cost = self.zombie_cost; + + if ( who maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) + cost = who maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_double_points_cost( cost ); + + if ( self._door_open == 1 ) + self.purchaser = undefined; + else if ( who.score >= cost ) + { + who maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 ); + maps\mp\_demo::bookmark( "zm_player_door", gettime(), who ); + who maps\mp\zombies\_zm_stats::increment_client_stat( "doors_purchased" ); + who maps\mp\zombies\_zm_stats::increment_player_stat( "doors_purchased" ); + self.purchaser = who; + } + else + { + play_sound_at_pos( "no_purchase", self.doors[0].origin ); + + if ( isdefined( level.custom_generic_deny_vo_func ) ) + who thread [[ level.custom_generic_deny_vo_func ]]( 1 ); + else + who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "door_deny" ); + + return false; + } + } + + if ( isdefined( level._door_open_rumble_func ) ) + who thread [[ level._door_open_rumble_func ]](); + + return true; +} + +door_delay() +{ + if ( isdefined( self.explosives ) ) + { + for ( i = 0; i < self.explosives.size; i++ ) + self.explosives[i] show(); + } + + if ( !isdefined( self.script_int ) ) + self.script_int = 5; + + all_trigs = getentarray( self.target, "target" ); + + for ( i = 0; i < all_trigs.size; i++ ) + all_trigs[i] trigger_off(); + + wait( self.script_int ); + + for ( i = 0; i < self.script_int; i++ ) + { +/# + iprintln( self.script_int - i ); +#/ + wait 1; + } + + if ( isdefined( self.explosives ) ) + { + for ( i = 0; i < self.explosives.size; i++ ) + { + playfx( level._effect["def_explosion"], self.explosives[i].origin, anglestoforward( self.explosives[i].angles ) ); + self.explosives[i] hide(); + } + } +} + +door_activate( time, open = 1, quick, use_blocker_clip_for_pathing ) +{ + if ( !isdefined( time ) ) + { + time = 1; + + if ( isdefined( self.script_transition_time ) ) + time = self.script_transition_time; + } + + if ( isdefined( self.door_moving ) ) + { + if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "clip" || isdefined( self.script_string ) && self.script_string == "clip" ) + { + if ( !is_true( use_blocker_clip_for_pathing ) ) + { + if ( !open ) + return; + } + } + else + return; + } + + self.door_moving = 1; + + if ( open || !( isdefined( quick ) && quick ) ) + self notsolid(); + + if ( self.classname == "script_brushmodel" ) + { + if ( open ) + self connectpaths(); + } + + if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "clip" || isdefined( self.script_string ) && self.script_string == "clip" ) + { + if ( !open ) + { + self delay_thread( time, ::self_disconnectpaths ); + wait 0.1; + self solid(); + } + + return; + } + + if ( isdefined( self.script_sound ) ) + { + if ( open ) + playsoundatposition( self.script_sound, self.origin ); + else + playsoundatposition( self.script_sound + "_close", self.origin ); + } + else + play_sound_at_pos( "door_slide_open", self.origin ); + + scale = 1; + + if ( !open ) + scale = -1; + + switch ( self.script_string ) + { + case "rotate": + if ( isdefined( self.script_angles ) ) + { + rot_angle = self.script_angles; + + if ( !open ) + rot_angle = self.og_angles; + + self rotateto( rot_angle, time, 0, 0 ); + self thread door_solid_thread(); + + if ( !open ) + self thread disconnect_paths_when_done(); + } + + wait( randomfloat( 0.15 ) ); + break; + case "slide_apart": + case "move": + if ( isdefined( self.script_vector ) ) + { + vector = vectorscale( self.script_vector, scale ); + + if ( time >= 0.5 ) + self moveto( self.origin + vector, time, time * 0.25, time * 0.25 ); + else + self moveto( self.origin + vector, time ); + + self thread door_solid_thread(); + + if ( !open ) + self thread disconnect_paths_when_done(); + } + + wait( randomfloat( 0.15 ) ); + break; + case "anim": + self [[ level.blocker_anim_func ]]( self.script_animname ); + self thread door_solid_thread_anim(); + wait( randomfloat( 0.15 ) ); + break; + case "physics": + self thread physics_launch_door( self ); + wait 0.1; + break; + } + + if ( isdefined( self.script_firefx ) ) + playfx( level._effect[self.script_firefx], self.origin ); +} + +kill_trapped_zombies( trigger ) +{ + zombies = getaiarray( level.zombie_team ); + + if ( !isdefined( zombies ) ) + return; + + for ( i = 0; i < zombies.size; i++ ) + { + if ( !isdefined( zombies[i] ) ) + continue; + + if ( zombies[i] istouching( trigger ) ) + { + zombies[i].marked_for_recycle = 1; + zombies[i] dodamage( zombies[i].health + 666, trigger.origin, self ); + wait( randomfloat( 0.15 ) ); + continue; + } + + if ( isdefined( level.custom_trapped_zombies ) ) + { + zombies[i] thread [[ level.custom_trapped_zombies ]](); + wait( randomfloat( 0.15 ) ); + } + } +} + +any_player_touching( trigger ) +{ + foreach ( player in get_players() ) + { + if ( player istouching( trigger ) ) + return true; + + wait 0.01; + } + + return false; +} + +any_player_touching_any( trigger, more_triggers ) +{ + foreach ( player in get_players() ) + { + if ( is_player_valid( player, 0, 1 ) ) + { + if ( isdefined( trigger ) && player istouching( trigger ) ) + return true; + + if ( isdefined( more_triggers ) && more_triggers.size > 0 ) + { + foreach ( trig in more_triggers ) + { + if ( isdefined( trig ) && player istouching( trig ) ) + return true; + } + } + } + } + + return false; +} + +any_zombie_touching_any( trigger, more_triggers ) +{ + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( isdefined( trigger ) && zombie istouching( trigger ) ) + return true; + + if ( isdefined( more_triggers ) && more_triggers.size > 0 ) + { + foreach ( trig in more_triggers ) + { + if ( isdefined( trig ) && zombie istouching( trig ) ) + return true; + } + } + } + + return false; +} + +wait_trigger_clear( trigger, more_triggers, end_on ) +{ + self endon( end_on ); + + while ( any_player_touching_any( trigger, more_triggers ) || any_zombie_touching_any( trigger, more_triggers ) ) + wait 1; +/# + println( "ZM BLOCKER local door trigger clear\\n" ); +#/ + self notify( "trigger_clear" ); +} + +waittill_door_trigger_clear_local_power_off( trigger, all_trigs ) +{ + self endon( "trigger_clear" ); + + while ( true ) + { + if ( isdefined( self.local_power_on ) && self.local_power_on ) + self waittill( "local_power_off" ); +/# + println( "ZM BLOCKER local door power off\\n" ); +#/ + self wait_trigger_clear( trigger, all_trigs, "local_power_on" ); + } +} + +waittill_door_trigger_clear_global_power_off( trigger, all_trigs ) +{ + self endon( "trigger_clear" ); + + while ( true ) + { + if ( isdefined( self.power_on ) && self.power_on ) + self waittill( "power_off" ); +/# + println( "ZM BLOCKER global door power off\\n" ); +#/ + self wait_trigger_clear( trigger, all_trigs, "power_on" ); + } +} + +waittill_door_can_close() +{ + trigger = undefined; + + if ( isdefined( self.door_hold_trigger ) ) + trigger = getent( self.door_hold_trigger, "targetname" ); + + all_trigs = getentarray( self.target, "target" ); + + switch ( self.script_noteworthy ) + { + case "local_electric_door": + if ( isdefined( trigger ) || isdefined( all_trigs ) ) + { + self waittill_door_trigger_clear_local_power_off( trigger, all_trigs ); + self thread kill_trapped_zombies( trigger ); + } + else if ( isdefined( self.local_power_on ) && self.local_power_on ) + self waittill( "local_power_off" ); + + return; + case "electric_door": + if ( isdefined( trigger ) || isdefined( all_trigs ) ) + { + self waittill_door_trigger_clear_global_power_off( trigger, all_trigs ); + + if ( isdefined( trigger ) ) + self thread kill_trapped_zombies( trigger ); + } + else if ( isdefined( self.power_on ) && self.power_on ) + self waittill( "power_off" ); + + return; + } +} + +door_think() +{ + self endon( "kill_door_think" ); + cost = 1000; + + if ( isdefined( self.zombie_cost ) ) + cost = self.zombie_cost; + + self sethintlowpriority( 1 ); + + while ( true ) + { + switch ( self.script_noteworthy ) + { + case "local_electric_door": + if ( !( isdefined( self.local_power_on ) && self.local_power_on ) ) + self waittill( "local_power_on" ); + + if ( !( isdefined( self._door_open ) && self._door_open ) ) + { +/# + println( "ZM BLOCKER local door opened\\n" ); +#/ + self door_opened( cost, 1 ); + + if ( !isdefined( self.power_cost ) ) + self.power_cost = 0; + + self.power_cost += 200; + } + + self sethintstring( "" ); + + if ( isdefined( level.local_doors_stay_open ) && level.local_doors_stay_open ) + return; + + wait 3; + self waittill_door_can_close(); + self door_block(); + + if ( isdefined( self._door_open ) && self._door_open ) + { +/# + println( "ZM BLOCKER local door closed\\n" ); +#/ + self door_opened( cost, 1 ); + } + + self sethintstring( &"ZOMBIE_NEED_LOCAL_POWER" ); + wait 3; + continue; + case "electric_door": + if ( !( isdefined( self.power_on ) && self.power_on ) ) + self waittill( "power_on" ); + + if ( !( isdefined( self._door_open ) && self._door_open ) ) + { +/# + println( "ZM BLOCKER global door opened\\n" ); +#/ + self door_opened( cost, 1 ); + + if ( !isdefined( self.power_cost ) ) + self.power_cost = 0; + + self.power_cost += 200; + } + + self sethintstring( "" ); + + if ( isdefined( level.local_doors_stay_open ) && level.local_doors_stay_open ) + return; + + wait 3; + self waittill_door_can_close(); + self door_block(); + + if ( isdefined( self._door_open ) && self._door_open ) + { +/# + println( "ZM BLOCKER global door closed\\n" ); +#/ + self door_opened( cost, 1 ); + } + + self sethintstring( &"ZOMBIE_NEED_POWER" ); + wait 3; + continue; + case "electric_buyable_door": + flag_wait( "power_on" ); + self set_hint_string( self, "default_buy_door", cost ); + + if ( !self door_buy() ) + continue; + + break; + case "delay_door": + if ( !self door_buy() ) + continue; + + self door_delay(); + break; + default: + if ( isdefined( level._default_door_custom_logic ) ) + { + self [[ level._default_door_custom_logic ]](); + break; + } + + if ( !self door_buy() ) + continue; + + break; + } + + self door_opened( cost ); + + if ( !flag( "door_can_close" ) ) + break; + } +} + +self_and_flag_wait( msg ) +{ + self endon( msg ); + + if ( isdefined( self.power_door_ignore_flag_wait ) && self.power_door_ignore_flag_wait ) + level waittill( "forever" ); + else + flag_wait( msg ); +} + +door_block() +{ + if ( isdefined( self.doors ) ) + { + for ( i = 0; i < self.doors.size; i++ ) + { + if ( isdefined( self.doors[i].script_noteworthy ) && self.doors[i].script_noteworthy == "clip" || isdefined( self.doors[i].script_string ) && self.doors[i].script_string == "clip" ) + self.doors[i] solid(); + } + } +} + +door_opened( cost, quick_close ) +{ + if ( isdefined( self.door_is_moving ) && self.door_is_moving ) + return; + + self.has_been_opened = 1; + all_trigs = getentarray( self.target, "target" ); + self.door_is_moving = 1; + + foreach ( trig in all_trigs ) + { + trig.door_is_moving = 1; + trig trigger_off(); + trig.has_been_opened = 1; + + if ( !isdefined( trig._door_open ) || trig._door_open == 0 ) + { + trig._door_open = 1; + trig notify( "door_opened" ); + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "door_open" ); + } + else + trig._door_open = 0; + + if ( isdefined( trig.script_flag ) && trig._door_open == 1 ) + { + tokens = strtok( trig.script_flag, "," ); + + for ( i = 0; i < tokens.size; i++ ) + flag_set( tokens[i] ); + } + else if ( isdefined( trig.script_flag ) && trig._door_open == 0 ) + { + tokens = strtok( trig.script_flag, "," ); + + for ( i = 0; i < tokens.size; i++ ) + flag_clear( tokens[i] ); + } + + if ( isdefined( quick_close ) && quick_close ) + { + trig set_hint_string( trig, "" ); + continue; + } + + if ( trig._door_open == 1 && flag( "door_can_close" ) ) + { + trig set_hint_string( trig, "default_buy_door_close" ); + continue; + } + + if ( trig._door_open == 0 ) + trig set_hint_string( trig, "default_buy_door", cost ); + } + + level notify( "door_opened" ); + + if ( isdefined( self.doors ) ) + { + is_script_model_door = 0; + have_moving_clip_for_door = 0; + use_blocker_clip_for_pathing = 0; + + foreach ( door in self.doors ) + { + if ( is_true( door.ignore_use_blocker_clip_for_pathing_check ) ) + continue; + + if ( door.classname == "script_model" ) + { + is_script_model_door = 1; + continue; + } + + if ( door.classname == "script_brushmodel" && ( !isdefined( door.script_noteworthy ) || door.script_noteworthy != "clip" ) && ( !isdefined( door.script_string ) || door.script_string != "clip" ) ) + have_moving_clip_for_door = 1; + } + + use_blocker_clip_for_pathing = is_script_model_door && !have_moving_clip_for_door; + + for ( i = 0; i < self.doors.size; i++ ) + self.doors[i] thread door_activate( self.doors[i].script_transition_time, self._door_open, quick_close, use_blocker_clip_for_pathing ); + + if ( self.doors.size ) + play_sound_at_pos( "purchase", self.doors[0].origin ); + } + + level.active_zone_names = maps\mp\zombies\_zm_zonemgr::get_active_zone_names(); + wait 1; + self.door_is_moving = 0; + + foreach ( trig in all_trigs ) + trig.door_is_moving = 0; + + if ( isdefined( quick_close ) && quick_close ) + { + for ( i = 0; i < all_trigs.size; i++ ) + all_trigs[i] trigger_on(); + + return; + } + + if ( flag( "door_can_close" ) ) + { + wait 2.0; + + for ( i = 0; i < all_trigs.size; i++ ) + all_trigs[i] trigger_on(); + } +} + +physics_launch_door( door_trig ) +{ + vec = vectorscale( vectornormalize( self.script_vector ), 10 ); + self rotateroll( 5, 0.05 ); + wait 0.05; + self moveto( self.origin + vec, 0.1 ); + + self waittill( "movedone" ); + + self physicslaunch( self.origin, self.script_vector * 300 ); + wait 60; + self delete(); +} + +door_solid_thread() +{ + self waittill_either( "rotatedone", "movedone" ); + self.door_moving = undefined; + + while ( true ) + { + players = get_players(); + player_touching = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] istouching( self ) ) + { + player_touching = 1; + break; + } + } + + if ( !player_touching ) + { + self solid(); + return; + } + + wait 1; + } +} + +door_solid_thread_anim() +{ + self waittillmatch( "door_anim", "end" ); + + self.door_moving = undefined; + + while ( true ) + { + players = get_players(); + player_touching = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] istouching( self ) ) + { + player_touching = 1; + break; + } + } + + if ( !player_touching ) + { + self solid(); + return; + } + + wait 1; + } +} + +disconnect_paths_when_done() +{ + self waittill_either( "rotatedone", "movedone" ); + self disconnectpaths(); +} + +self_disconnectpaths() +{ + self disconnectpaths(); +} + +debris_init() +{ + cost = 1000; + + if ( isdefined( self.zombie_cost ) ) + cost = self.zombie_cost; + + self set_hint_string( self, "default_buy_debris", cost ); + self setcursorhint( "HINT_NOICON" ); + + if ( isdefined( self.script_flag ) && !isdefined( level.flag[self.script_flag] ) ) + flag_init( self.script_flag ); + + self thread debris_think(); +} + +debris_think() +{ + if ( isdefined( level.custom_debris_function ) ) + self [[ level.custom_debris_function ]](); + + while ( true ) + { + self waittill( "trigger", who, force ); + + if ( getdvarint( _hash_2ECA0C0E ) > 0 || isdefined( force ) && force ) + { + + } + else + { + if ( !who usebuttonpressed() ) + continue; + + if ( who in_revive_trigger() ) + continue; + } + + if ( is_player_valid( who ) ) + { + players = get_players(); + + if ( getdvarint( _hash_2ECA0C0E ) > 0 ) + { + + } + else if ( who.score >= self.zombie_cost ) + { + who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost ); + maps\mp\_demo::bookmark( "zm_player_door", gettime(), who ); + who maps\mp\zombies\_zm_stats::increment_client_stat( "doors_purchased" ); + who maps\mp\zombies\_zm_stats::increment_player_stat( "doors_purchased" ); + } + else + { + play_sound_at_pos( "no_purchase", self.origin ); + who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "door_deny" ); + continue; + } + + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", who.name, who.score, level.round_number, self.zombie_cost, self.script_flag, self.origin, "door" ); + junk = getentarray( self.target, "targetname" ); + + if ( isdefined( self.script_flag ) ) + { + tokens = strtok( self.script_flag, "," ); + + for ( i = 0; i < tokens.size; i++ ) + flag_set( tokens[i] ); + } + + play_sound_at_pos( "purchase", self.origin ); + level notify( "junk purchased" ); + move_ent = undefined; + clip = undefined; + + for ( i = 0; i < junk.size; i++ ) + { + junk[i] connectpaths(); + + if ( isdefined( junk[i].script_noteworthy ) ) + { + if ( junk[i].script_noteworthy == "clip" ) + { + clip = junk[i]; + continue; + } + } + + struct = undefined; + + if ( isdefined( junk[i].script_linkto ) ) + { + struct = getstruct( junk[i].script_linkto, "script_linkname" ); + + if ( isdefined( struct ) ) + { + move_ent = junk[i]; + junk[i] thread debris_move( struct ); + } + else + junk[i] delete(); + + continue; + } + + junk[i] delete(); + } + + all_trigs = getentarray( self.target, "target" ); + + for ( i = 0; i < all_trigs.size; i++ ) + all_trigs[i] delete(); + + if ( isdefined( clip ) ) + { + if ( isdefined( move_ent ) ) + move_ent waittill( "movedone" ); + + clip delete(); + } + + break; + } + } +} + +debris_move( struct ) +{ + self script_delay(); + self notsolid(); + self play_sound_on_ent( "debris_move" ); + playsoundatposition( "zmb_lightning_l", self.origin ); + + if ( isdefined( self.script_firefx ) ) + playfx( level._effect[self.script_firefx], self.origin ); + + if ( isdefined( self.script_noteworthy ) ) + { + if ( self.script_noteworthy == "jiggle" ) + { + num = randomintrange( 3, 5 ); + og_angles = self.angles; + + for ( i = 0; i < num; i++ ) + { + angles = og_angles + ( -5 + randomfloat( 10 ), -5 + randomfloat( 10 ), -5 + randomfloat( 10 ) ); + time = randomfloatrange( 0.1, 0.4 ); + self rotateto( angles, time ); + wait( time - 0.05 ); + } + } + } + + time = 0.5; + + if ( isdefined( self.script_transition_time ) ) + time = self.script_transition_time; + + self moveto( struct.origin, time, time * 0.5 ); + self rotateto( struct.angles, time * 0.75 ); + + self waittill( "movedone" ); + + if ( isdefined( self.script_fxid ) ) + { + playfx( level._effect[self.script_fxid], self.origin ); + playsoundatposition( "zmb_zombie_spawn", self.origin ); + } + + self delete(); +} + +blocker_disconnect_paths( start_node, end_node, two_way ) +{ + +} + +blocker_connect_paths( start_node, end_node, two_way ) +{ + +} + +blocker_init() +{ + if ( !isdefined( self.target ) ) + return; + + targets = getentarray( self.target, "targetname" ); + self.barrier_chunks = []; + + for ( j = 0; j < targets.size; j++ ) + { + if ( targets[j] iszbarrier() ) + { + if ( isdefined( level.zbarrier_override ) ) + { + self thread [[ level.zbarrier_override ]]( targets[j] ); + continue; + } + + self.zbarrier = targets[j]; + + if ( isdefined( level.zbarrier_script_string_sets_collision ) && level.zbarrier_script_string_sets_collision ) + m_collision = isdefined( self.zbarrier.script_string ) ? self.zbarrier.script_string : "p6_anim_zm_barricade_board_collision"; + else + m_collision = "p6_anim_zm_barricade_board_collision"; + + precachemodel( m_collision ); + self.zbarrier setzbarriercolmodel( m_collision ); + self.zbarrier.chunk_health = []; + + for ( i = 0; i < self.zbarrier getnumzbarrierpieces(); i++ ) + self.zbarrier.chunk_health[i] = 0; + + continue; + } + + if ( isdefined( targets[j].script_string ) && targets[j].script_string == "rock" ) + targets[j].material = "rock"; + + if ( isdefined( targets[j].script_parameters ) ) + { + if ( targets[j].script_parameters == "grate" ) + { + if ( isdefined( targets[j].script_noteworthy ) ) + { + if ( targets[j].script_noteworthy == "2" || targets[j].script_noteworthy == "3" || targets[j].script_noteworthy == "4" || targets[j].script_noteworthy == "5" || targets[j].script_noteworthy == "6" ) + { + targets[j] hide(); +/# + iprintlnbold( " Hide " ); +#/ + } + } + } + else if ( targets[j].script_parameters == "repair_board" ) + { + targets[j].unbroken_section = getent( targets[j].target, "targetname" ); + + if ( isdefined( targets[j].unbroken_section ) ) + { + targets[j].unbroken_section linkto( targets[j] ); + targets[j] hide(); + targets[j] notsolid(); + targets[j].unbroken = 1; + + if ( isdefined( targets[j].unbroken_section.script_noteworthy ) && targets[j].unbroken_section.script_noteworthy == "glass" ) + { + targets[j].material = "glass"; + targets[j] thread destructible_glass_barricade( targets[j].unbroken_section, self ); + } + else if ( isdefined( targets[j].unbroken_section.script_noteworthy ) && targets[j].unbroken_section.script_noteworthy == "metal" ) + targets[j].material = "metal"; + } + } + else if ( targets[j].script_parameters == "barricade_vents" ) + targets[j].material = "metal_vent"; + } + + if ( isdefined( targets[j].targetname ) ) + { + if ( targets[j].targetname == "auto2" ) + { + + } + } + + targets[j] update_states( "repaired" ); + targets[j].destroyed = 0; + targets[j] show(); + targets[j].claimed = 0; + targets[j].anim_grate_index = 0; + targets[j].og_origin = targets[j].origin; + targets[j].og_angles = targets[j].angles; + self.barrier_chunks[self.barrier_chunks.size] = targets[j]; + } + + target_nodes = getnodearray( self.target, "targetname" ); + + for ( j = 0; j < target_nodes.size; j++ ) + { + if ( target_nodes[j].type == "Begin" ) + { + self.neg_start = target_nodes[j]; + + if ( isdefined( self.neg_start.target ) ) + self.neg_end = getnode( self.neg_start.target, "targetname" ); + + blocker_disconnect_paths( self.neg_start, self.neg_end ); + } + } + + if ( isdefined( self.zbarrier ) ) + { + if ( isdefined( self.barrier_chunks ) ) + { + for ( i = 0; i < self.barrier_chunks.size; i++ ) + self.barrier_chunks[i] delete(); + + self.barrier_chunks = []; + } + } + + if ( isdefined( self.zbarrier ) && should_delete_zbarriers() ) + { + self.zbarrier delete(); + self.zbarrier = undefined; + return; + } + + self blocker_attack_spots(); + self.trigger_location = getstruct( self.target, "targetname" ); + self thread blocker_think(); +} + +should_delete_zbarriers() +{ + gametype = getdvar( "ui_gametype" ); + + if ( !is_classic() && !is_standard() && gametype != "zgrief" ) + return true; + + return false; +} + +destructible_glass_barricade( unbroken_section, node ) +{ + unbroken_section setcandamage( 1 ); + unbroken_section.health = 99999; + + unbroken_section waittill( "damage", amount, who ); + + if ( is_player_valid( who ) || who maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + self thread maps\mp\zombies\_zm_spawner::zombie_boardtear_offset_fx_horizontle( self, node ); + level thread remove_chunk( self, node, 1 ); + self update_states( "destroyed" ); + self notify( "destroyed" ); + self.unbroken = 0; + } +} + +blocker_attack_spots() +{ + spots = []; + numslots = self.zbarrier getzbarriernumattackslots(); + numslots = int( max( numslots, 1 ) ); + + if ( numslots % 2 ) + spots[spots.size] = groundpos_ignore_water_new( self.zbarrier.origin + vectorscale( ( 0, 0, 1 ), 60.0 ) ); + + if ( numslots > 1 ) + { + reps = floor( numslots / 2 ); + slot = 1; + + for ( i = 0; i < reps; i++ ) + { + offset = self.zbarrier getzbarrierattackslothorzoffset() * ( i + 1 ); + spots[spots.size] = groundpos_ignore_water_new( spots[0] + anglestoright( self.angles ) * offset + vectorscale( ( 0, 0, 1 ), 60.0 ) ); + slot++; + + if ( slot < numslots ) + { + spots[spots.size] = groundpos_ignore_water_new( spots[0] + anglestoright( self.angles ) * ( offset * -1 ) + vectorscale( ( 0, 0, 1 ), 60.0 ) ); + slot++; + } + } + } + + taken = []; + + for ( i = 0; i < spots.size; i++ ) + taken[i] = 0; + + self.attack_spots_taken = taken; + self.attack_spots = spots; +/# + self thread debug_attack_spots_taken(); +#/ +} + +blocker_choke() +{ + level._blocker_choke = 0; + level endon( "stop_blocker_think" ); + + while ( true ) + { + wait 0.05; + level._blocker_choke = 0; + } +} + +blocker_think() +{ + level endon( "stop_blocker_think" ); + + if ( !isdefined( level._blocker_choke ) ) + level thread blocker_choke(); + + use_choke = 0; + + if ( isdefined( level._use_choke_blockers ) && level._use_choke_blockers == 1 ) + use_choke = 1; + + while ( true ) + { + wait 0.5; + + if ( use_choke ) + { + if ( level._blocker_choke > 3 ) + wait 0.05; + } + + level._blocker_choke++; + + if ( all_chunks_intact( self, self.barrier_chunks ) ) + continue; + + if ( no_valid_repairable_boards( self, self.barrier_chunks ) ) + continue; + + self blocker_trigger_think(); + } +} + +player_fails_blocker_repair_trigger_preamble( player, players, trigger, hold_required ) +{ + if ( !isdefined( trigger ) ) + return true; + + if ( !is_player_valid( player ) ) + return true; + + if ( players.size == 1 && isdefined( players[0].intermission ) && players[0].intermission == 1 ) + return true; + + if ( hold_required && !player usebuttonpressed() ) + return true; + + if ( !hold_required && !player use_button_held() ) + return true; + + if ( player in_revive_trigger() ) + return true; + + return false; +} + +has_blocker_affecting_perk() +{ + has_perk = undefined; + + if ( self hasperk( "specialty_fastreload" ) ) + has_perk = "specialty_fastreload"; + + return has_perk; +} + +do_post_chunk_repair_delay( has_perk ) +{ + if ( !self script_delay() ) + wait 1; +} + +handle_post_board_repair_rewards( cost, zbarrier ) +{ + self maps\mp\zombies\_zm_stats::increment_client_stat( "boards" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "boards" ); + + if ( isdefined( self.pers["boards"] ) && self.pers["boards"] % 10 == 0 ) + self thread do_player_general_vox( "general", "reboard", 90 ); + + self maps\mp\zombies\_zm_pers_upgrades_functions::pers_boards_updated( zbarrier ); + self.rebuild_barrier_reward += cost; + + if ( self.rebuild_barrier_reward < level.zombie_vars["rebuild_barrier_cap_per_round"] ) + { + self maps\mp\zombies\_zm_score::player_add_points( "rebuild_board", cost ); + self play_sound_on_ent( "purchase" ); + } + + if ( isdefined( self.board_repair ) ) + self.board_repair += 1; +} + +blocker_unitrigger_think() +{ + self endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "trigger", player ); + + self.stub.trigger_target notify( "trigger", player ); + } +} + +blocker_trigger_think() +{ + self endon( "blocker_hacked" ); + + if ( isdefined( level.no_board_repair ) && level.no_board_repair ) + return; +/# + println( "ZM >> TRIGGER blocker_trigger_think " ); +#/ + level endon( "stop_blocker_think" ); + cost = 10; + + if ( isdefined( self.zombie_cost ) ) + cost = self.zombie_cost; + + original_cost = cost; + + if ( !isdefined( self.unitrigger_stub ) ) + { + radius = 94.21; + height = 94.21; + + if ( isdefined( self.trigger_location ) ) + trigger_location = self.trigger_location; + else + trigger_location = self; + + if ( isdefined( trigger_location.radius ) ) + radius = trigger_location.radius; + + if ( isdefined( trigger_location.height ) ) + height = trigger_location.height; + + trigger_pos = groundpos( trigger_location.origin ) + vectorscale( ( 0, 0, 1 ), 4.0 ); + self.unitrigger_stub = spawnstruct(); + self.unitrigger_stub.origin = trigger_pos; + self.unitrigger_stub.radius = radius; + self.unitrigger_stub.height = height; + self.unitrigger_stub.script_unitrigger_type = "unitrigger_radius"; + self.unitrigger_stub.hint_string = get_hint_string( self, "default_reward_barrier_piece" ); + self.unitrigger_stub.cursor_hint = "HINT_NOICON"; + self.unitrigger_stub.trigger_target = self; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::blocker_unitrigger_think ); + maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); + + if ( !isdefined( trigger_location.angles ) ) + trigger_location.angles = ( 0, 0, 0 ); + + self.unitrigger_stub.origin = groundpos( trigger_location.origin ) + vectorscale( ( 0, 0, 1 ), 4.0 ) + anglestoforward( trigger_location.angles ) * -11; + } + + self thread trigger_delete_on_repair(); + thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::blocker_unitrigger_think ); +/# + if ( getdvarint( "zombie_debug" ) > 0 ) + thread debug_blocker( trigger_pos, radius, height ); +#/ + while ( true ) + { + self waittill( "trigger", player ); + + has_perk = player has_blocker_affecting_perk(); + + if ( all_chunks_intact( self, self.barrier_chunks ) ) + { + self notify( "all_boards_repaired" ); + return; + } + + if ( no_valid_repairable_boards( self, self.barrier_chunks ) ) + { + self notify( "no valid boards" ); + return; + } + + if ( isdefined( level._zm_blocker_trigger_think_return_override ) ) + { + if ( self [[ level._zm_blocker_trigger_think_return_override ]]( player ) ) + return; + } + + while ( true ) + { + players = get_players(); + + if ( player_fails_blocker_repair_trigger_preamble( player, players, self.unitrigger_stub.trigger, 0 ) ) + break; + + if ( isdefined( self.zbarrier ) ) + { + chunk = get_random_destroyed_chunk( self, self.barrier_chunks ); + self thread replace_chunk( self, chunk, has_perk, isdefined( player.pers_upgrades_awarded["board"] ) && player.pers_upgrades_awarded["board"] ); + } + else + { + chunk = get_random_destroyed_chunk( self, self.barrier_chunks ); + + if ( isdefined( chunk.script_parameter ) && chunk.script_parameters == "repair_board" || chunk.script_parameters == "barricade_vents" ) + { + if ( isdefined( chunk.unbroken_section ) ) + { + chunk show(); + chunk solid(); + chunk.unbroken_section self_delete(); + } + } + else + chunk show(); + + if ( !isdefined( chunk.script_parameters ) || chunk.script_parameters == "board" || chunk.script_parameters == "repair_board" || chunk.script_parameters == "barricade_vents" ) + { + if ( !( isdefined( level.use_clientside_board_fx ) && level.use_clientside_board_fx ) ) + { + if ( !isdefined( chunk.material ) || isdefined( chunk.material ) && chunk.material != "rock" ) + chunk play_sound_on_ent( "rebuild_barrier_piece" ); + + playsoundatposition( "zmb_cha_ching", ( 0, 0, 0 ) ); + } + } + + if ( chunk.script_parameters == "bar" ) + { + chunk play_sound_on_ent( "rebuild_barrier_piece" ); + playsoundatposition( "zmb_cha_ching", ( 0, 0, 0 ) ); + } + + if ( isdefined( chunk.script_parameters ) ) + { + if ( chunk.script_parameters == "bar" ) + { + if ( isdefined( chunk.script_noteworthy ) ) + { + if ( chunk.script_noteworthy == "5" ) + chunk hide(); + else if ( chunk.script_noteworthy == "3" ) + chunk hide(); + } + } + } + + self thread replace_chunk( self, chunk, has_perk, isdefined( player.pers_upgrades_awarded["board"] ) && player.pers_upgrades_awarded["board"] ); + } + + if ( isdefined( self.clip ) ) + { + self.clip enable_trigger(); + self.clip disconnectpaths(); + } + else + blocker_disconnect_paths( self.neg_start, self.neg_end ); + + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, original_cost, self.target, self.origin, "repair" ); + self do_post_chunk_repair_delay( has_perk ); + + if ( !is_player_valid( player ) ) + break; + + player handle_post_board_repair_rewards( cost, self ); + + if ( all_chunks_intact( self, self.barrier_chunks ) ) + { + self notify( "all_boards_repaired" ); + return; + } + + if ( no_valid_repairable_boards( self, self.barrier_chunks ) ) + { + self notify( "no valid boards" ); + return; + } + } + } +} + +random_destroyed_chunk_show() +{ + wait 0.5; + self show(); +} + +door_repaired_rumble_n_sound() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( distance( players[i].origin, self.origin ) < 150 ) + { + if ( isalive( players[i] ) ) + players[i] thread board_completion(); + } + } +} + +board_completion() +{ + self endon( "disconnect" ); +} + +trigger_delete_on_repair() +{ + while ( true ) + { + self waittill_either( "all_boards_repaired", "no valid boards" ); + maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); + break; + } +} + +rebuild_barrier_reward_reset() +{ + self.rebuild_barrier_reward = 0; +} + +remove_chunk( chunk, node, destroy_immediately, zomb ) +{ + chunk update_states( "mid_tear" ); + + if ( isdefined( chunk.script_parameters ) ) + { + if ( chunk.script_parameters == "board" || chunk.script_parameters == "repair_board" || chunk.script_parameters == "barricade_vents" ) + chunk thread zombie_boardtear_audio_offset( chunk ); + } + + if ( isdefined( chunk.script_parameters ) ) + { + if ( chunk.script_parameters == "bar" ) + chunk thread zombie_bartear_audio_offset( chunk ); + } + + chunk notsolid(); + fx = "wood_chunk_destory"; + + if ( isdefined( self.script_fxid ) ) + fx = self.script_fxid; + + if ( isdefined( chunk.script_moveoverride ) && chunk.script_moveoverride ) + chunk hide(); + + if ( isdefined( chunk.script_parameters ) && chunk.script_parameters == "bar" ) + { + if ( isdefined( chunk.script_noteworthy ) && chunk.script_noteworthy == "4" ) + { + ent = spawn( "script_origin", chunk.origin ); + ent.angles = node.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); + dist = 100; + + if ( isdefined( chunk.script_move_dist ) ) + { + dist_max = chunk.script_move_dist - 100; + dist = 100 + randomint( dist_max ); + } + else + dist = 100 + randomint( 100 ); + + dest = ent.origin + anglestoforward( ent.angles ) * dist; + trace = bullettrace( dest + vectorscale( ( 0, 0, 1 ), 16.0 ), dest + vectorscale( ( 0, 0, -1 ), 200.0 ), 0, undefined ); + + if ( trace["fraction"] == 1 ) + dest += vectorscale( ( 0, 0, -1 ), 200.0 ); + else + dest = trace["position"]; + + chunk linkto( ent ); + time = ent fake_physicslaunch( dest, 300 + randomint( 100 ) ); + + if ( randomint( 100 ) > 40 ) + ent rotatepitch( 180, time * 0.5 ); + else + ent rotatepitch( 90, time, time * 0.5 ); + + wait( time ); + chunk hide(); + wait 0.1; + ent delete(); + } + else + { + ent = spawn( "script_origin", chunk.origin ); + ent.angles = node.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); + dist = 100; + + if ( isdefined( chunk.script_move_dist ) ) + { + dist_max = chunk.script_move_dist - 100; + dist = 100 + randomint( dist_max ); + } + else + dist = 100 + randomint( 100 ); + + dest = ent.origin + anglestoforward( ent.angles ) * dist; + trace = bullettrace( dest + vectorscale( ( 0, 0, 1 ), 16.0 ), dest + vectorscale( ( 0, 0, -1 ), 200.0 ), 0, undefined ); + + if ( trace["fraction"] == 1 ) + dest += vectorscale( ( 0, 0, -1 ), 200.0 ); + else + dest = trace["position"]; + + chunk linkto( ent ); + time = ent fake_physicslaunch( dest, 260 + randomint( 100 ) ); + + if ( randomint( 100 ) > 40 ) + ent rotatepitch( 180, time * 0.5 ); + else + ent rotatepitch( 90, time, time * 0.5 ); + + wait( time ); + chunk hide(); + wait 0.1; + ent delete(); + } + + chunk update_states( "destroyed" ); + chunk notify( "destroyed" ); + } + + if ( isdefined( chunk.script_parameters ) && chunk.script_parameters == "board" || chunk.script_parameters == "repair_board" || chunk.script_parameters == "barricade_vents" ) + { + ent = spawn( "script_origin", chunk.origin ); + ent.angles = node.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); + dist = 100; + + if ( isdefined( chunk.script_move_dist ) ) + { + dist_max = chunk.script_move_dist - 100; + dist = 100 + randomint( dist_max ); + } + else + dist = 100 + randomint( 100 ); + + dest = ent.origin + anglestoforward( ent.angles ) * dist; + trace = bullettrace( dest + vectorscale( ( 0, 0, 1 ), 16.0 ), dest + vectorscale( ( 0, 0, -1 ), 200.0 ), 0, undefined ); + + if ( trace["fraction"] == 1 ) + dest += vectorscale( ( 0, 0, -1 ), 200.0 ); + else + dest = trace["position"]; + + chunk linkto( ent ); + time = ent fake_physicslaunch( dest, 200 + randomint( 100 ) ); + + if ( isdefined( chunk.unbroken_section ) ) + { + if ( !isdefined( chunk.material ) || chunk.material != "metal" ) + chunk.unbroken_section self_delete(); + } + + if ( randomint( 100 ) > 40 ) + ent rotatepitch( 180, time * 0.5 ); + else + ent rotatepitch( 90, time, time * 0.5 ); + + wait( time ); + + if ( isdefined( chunk.unbroken_section ) ) + { + if ( isdefined( chunk.material ) && chunk.material == "metal" ) + chunk.unbroken_section self_delete(); + } + + chunk hide(); + wait 0.1; + ent delete(); + chunk update_states( "destroyed" ); + chunk notify( "destroyed" ); + } + + if ( isdefined( chunk.script_parameters ) && chunk.script_parameters == "grate" ) + { + if ( isdefined( chunk.script_noteworthy ) && chunk.script_noteworthy == "6" ) + { + ent = spawn( "script_origin", chunk.origin ); + ent.angles = node.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); + dist = 100 + randomint( 100 ); + dest = ent.origin + anglestoforward( ent.angles ) * dist; + trace = bullettrace( dest + vectorscale( ( 0, 0, 1 ), 16.0 ), dest + vectorscale( ( 0, 0, -1 ), 200.0 ), 0, undefined ); + + if ( trace["fraction"] == 1 ) + dest += vectorscale( ( 0, 0, -1 ), 200.0 ); + else + dest = trace["position"]; + + chunk linkto( ent ); + time = ent fake_physicslaunch( dest, 200 + randomint( 100 ) ); + + if ( randomint( 100 ) > 40 ) + ent rotatepitch( 180, time * 0.5 ); + else + ent rotatepitch( 90, time, time * 0.5 ); + + wait( time ); + chunk hide(); + ent delete(); + chunk update_states( "destroyed" ); + chunk notify( "destroyed" ); + } + else + { + chunk hide(); + chunk update_states( "destroyed" ); + chunk notify( "destroyed" ); + } + } +} + +remove_chunk_rotate_grate( chunk ) +{ + if ( isdefined( chunk.script_parameters ) && chunk.script_parameters == "grate" ) + { + chunk vibrate( vectorscale( ( 0, 1, 0 ), 270.0 ), 0.2, 0.4, 0.4 ); + return; + } +} + +zombie_boardtear_audio_offset( chunk ) +{ + if ( isdefined( chunk.material ) && !isdefined( chunk.already_broken ) ) + chunk.already_broken = 0; + + if ( isdefined( chunk.material ) && chunk.material == "glass" && chunk.already_broken == 0 ) + { + chunk playsound( "zmb_break_glass_barrier" ); + wait( randomfloatrange( 0.3, 0.6 ) ); + chunk playsound( "zmb_break_glass_barrier" ); + chunk.already_broken = 1; + } + else if ( isdefined( chunk.material ) && chunk.material == "metal" && chunk.already_broken == 0 ) + { + chunk playsound( "grab_metal_bar" ); + wait( randomfloatrange( 0.3, 0.6 ) ); + chunk playsound( "break_metal_bar" ); + chunk.already_broken = 1; + } + else if ( isdefined( chunk.material ) && chunk.material == "rock" ) + { + if ( !( isdefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) ) + { + chunk playsound( "zmb_break_rock_barrier" ); + wait( randomfloatrange( 0.3, 0.6 ) ); + chunk playsound( "zmb_break_rock_barrier" ); + } + + chunk.already_broken = 1; + } + else if ( isdefined( chunk.material ) && chunk.material == "metal_vent" ) + { + if ( !( isdefined( level.use_clientside_board_fx ) && level.use_clientside_board_fx ) ) + chunk playsound( "evt_vent_slat_remove" ); + } + else + { + if ( !( isdefined( level.use_clientside_board_fx ) && level.use_clientside_board_fx ) ) + { + chunk play_sound_on_ent( "break_barrier_piece" ); + wait( randomfloatrange( 0.3, 0.6 ) ); + chunk play_sound_on_ent( "break_barrier_piece" ); + } + + chunk.already_broken = 1; + } +} + +zombie_bartear_audio_offset( chunk ) +{ + chunk play_sound_on_ent( "grab_metal_bar" ); + wait( randomfloatrange( 0.3, 0.6 ) ); + chunk play_sound_on_ent( "break_metal_bar" ); + wait( randomfloatrange( 1.0, 1.3 ) ); + chunk play_sound_on_ent( "drop_metal_bar" ); +} + +ensure_chunk_is_back_to_origin( chunk ) +{ + if ( chunk.origin != chunk.og_origin ) + { + chunk notsolid(); + + chunk waittill( "movedone" ); + } +} + +replace_chunk( barrier, chunk, perk, upgrade, via_powerup ) +{ + if ( !isdefined( barrier.zbarrier ) ) + { + chunk update_states( "mid_repair" ); + assert( isdefined( chunk.og_origin ) ); + assert( isdefined( chunk.og_angles ) ); + sound = "rebuild_barrier_hover"; + + if ( isdefined( chunk.script_presound ) ) + sound = chunk.script_presound; + } + + has_perk = 0; + + if ( isdefined( perk ) ) + has_perk = 1; + + if ( !isdefined( via_powerup ) && isdefined( sound ) ) + play_sound_at_pos( sound, chunk.origin ); + + if ( upgrade ) + { + barrier.zbarrier zbarrierpieceuseupgradedmodel( chunk ); + barrier.zbarrier.chunk_health[chunk] = barrier.zbarrier getupgradedpiecenumlives( chunk ); + } + else + { + barrier.zbarrier zbarrierpieceusedefaultmodel( chunk ); + barrier.zbarrier.chunk_health[chunk] = 0; + } + + scalar = 1.0; + + if ( has_perk ) + { + if ( "speciality_fastreload" == perk ) + scalar = 0.31; + else if ( "speciality_fastreload_upgrade" == perk ) + scalar = 0.2112; + } + + barrier.zbarrier showzbarrierpiece( chunk ); + barrier.zbarrier setzbarrierpiecestate( chunk, "closing", scalar ); + waitduration = barrier.zbarrier getzbarrierpieceanimlengthforstate( chunk, "closing", scalar ); + wait( waitduration ); +} + +open_all_zbarriers() +{ + foreach ( barrier in level.exterior_goals ) + { + if ( isdefined( barrier.zbarrier ) ) + { + for ( x = 0; x < barrier.zbarrier getnumzbarrierpieces(); x++ ) + barrier.zbarrier setzbarrierpiecestate( x, "opening" ); + } + + if ( isdefined( barrier.clip ) ) + { + barrier.clip disable_trigger(); + barrier.clip connectpaths(); + continue; + } + + blocker_connect_paths( barrier.neg_start, barrier.neg_end ); + } +} + +zombie_boardtear_audio_plus_fx_offset_repair_horizontal( chunk ) +{ + if ( isdefined( chunk.material ) && chunk.material == "rock" ) + { + if ( isdefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) + chunk clearclientflag( level._zombie_scriptmover_flag_rock_fx ); + else + { + earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), chunk.origin, 150 ); + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( 0, 0, 1 ), 30.0 ) ); + wait( randomfloatrange( 0.3, 0.6 ) ); + chunk play_sound_on_ent( "break_barrier_piece" ); + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( 0, 0, -1 ), 30.0 ) ); + } + } + else if ( isdefined( level.use_clientside_board_fx ) && level.use_clientside_board_fx ) + chunk clearclientflag( level._zombie_scriptmover_flag_board_horizontal_fx ); + else + { + earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), chunk.origin, 150 ); + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( 0, 0, 1 ), 30.0 ) ); + wait( randomfloatrange( 0.3, 0.6 ) ); + chunk play_sound_on_ent( "break_barrier_piece" ); + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( 0, 0, -1 ), 30.0 ) ); + } +} + +zombie_boardtear_audio_plus_fx_offset_repair_verticle( chunk ) +{ + if ( isdefined( chunk.material ) && chunk.material == "rock" ) + { + if ( isdefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) + chunk clearclientflag( level._zombie_scriptmover_flag_rock_fx ); + else + { + earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), chunk.origin, 150 ); + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( 1, 0, 0 ), 30.0 ) ); + wait( randomfloatrange( 0.3, 0.6 ) ); + chunk play_sound_on_ent( "break_barrier_piece" ); + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + } + } + else if ( isdefined( level.use_clientside_board_fx ) && level.use_clientside_board_fx ) + chunk clearclientflag( level._zombie_scriptmover_flag_board_vertical_fx ); + else + { + earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), chunk.origin, 150 ); + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( 1, 0, 0 ), 30.0 ) ); + wait( randomfloatrange( 0.3, 0.6 ) ); + chunk play_sound_on_ent( "break_barrier_piece" ); + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + } +} + +zombie_gratetear_audio_plus_fx_offset_repair_horizontal( chunk ) +{ + earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), chunk.origin, 150 ); + chunk play_sound_on_ent( "bar_rebuild_slam" ); + + switch ( randomint( 9 ) ) + { + case 0: + playfx( level._effect["fx_zombie_bar_break"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfx( level._effect["fx_zombie_bar_break_lite"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + break; + case 1: + playfx( level._effect["fx_zombie_bar_break"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfx( level._effect["fx_zombie_bar_break"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + break; + case 2: + playfx( level._effect["fx_zombie_bar_break_lite"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfx( level._effect["fx_zombie_bar_break"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + break; + case 3: + playfx( level._effect["fx_zombie_bar_break"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfx( level._effect["fx_zombie_bar_break_lite"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + break; + case 4: + playfx( level._effect["fx_zombie_bar_break_lite"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfx( level._effect["fx_zombie_bar_break_lite"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + break; + case 5: + playfx( level._effect["fx_zombie_bar_break_lite"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + break; + case 6: + playfx( level._effect["fx_zombie_bar_break_lite"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + break; + case 7: + playfx( level._effect["fx_zombie_bar_break"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + break; + case 8: + playfx( level._effect["fx_zombie_bar_break"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + break; + } +} + +zombie_bartear_audio_plus_fx_offset_repair_horizontal( chunk ) +{ + earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), chunk.origin, 150 ); + chunk play_sound_on_ent( "bar_rebuild_slam" ); + + switch ( randomint( 9 ) ) + { + case 0: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_left" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_right" ); + break; + case 1: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_left" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_right" ); + break; + case 2: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_left" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_right" ); + break; + case 3: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_left" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_right" ); + break; + case 4: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_left" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_right" ); + break; + case 5: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_left" ); + break; + case 6: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_right" ); + break; + case 7: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_left" ); + break; + case 8: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_right" ); + break; + } +} + +zombie_bartear_audio_plus_fx_offset_repair_verticle( chunk ) +{ + earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), chunk.origin, 150 ); + chunk play_sound_on_ent( "bar_rebuild_slam" ); + + switch ( randomint( 9 ) ) + { + case 0: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_top" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_bottom" ); + break; + case 1: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_top" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_bottom" ); + break; + case 2: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_top" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_bottom" ); + break; + case 3: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_top" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_bottom" ); + break; + case 4: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_top" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_bottom" ); + break; + case 5: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_top" ); + break; + case 6: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_bottom" ); + break; + case 7: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_top" ); + break; + case 8: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_bottom" ); + break; + } +} + +add_new_zombie_spawners() +{ + if ( isdefined( self.target ) ) + self.possible_spawners = getentarray( self.target, "targetname" ); + + if ( isdefined( self.script_string ) ) + { + spawners = getentarray( self.script_string, "targetname" ); + self.possible_spawners = arraycombine( self.possible_spawners, spawners, 1, 0 ); + } + + if ( !isdefined( self.possible_spawners ) ) + return; + + zombies_to_add = self.possible_spawners; + + for ( i = 0; i < self.possible_spawners.size; i++ ) + { + self.possible_spawners[i].is_enabled = 1; + add_spawner( self.possible_spawners[i] ); + } +} + +flag_blocker() +{ + if ( !isdefined( self.script_flag_wait ) ) + { +/# + assertmsg( "Flag Blocker at " + self.origin + " does not have a script_flag_wait key value pair" ); +#/ + return; + } + + if ( !isdefined( level.flag[self.script_flag_wait] ) ) + flag_init( self.script_flag_wait ); + + type = "connectpaths"; + + if ( isdefined( self.script_noteworthy ) ) + type = self.script_noteworthy; + + flag_wait( self.script_flag_wait ); + self script_delay(); + + if ( type == "connectpaths" ) + { + self connectpaths(); + self disable_trigger(); + return; + } + + if ( type == "disconnectpaths" ) + { + self disconnectpaths(); + self disable_trigger(); + return; + } +/# + assertmsg( "flag blocker at " + self.origin + ", the type \"" + type + "\" is not recognized" ); +#/ +} + +update_states( states ) +{ + assert( isdefined( states ) ); + self.state = states; +} + +quantum_bomb_open_nearest_door_validation( position ) +{ + range_squared = 32400; + zombie_doors = getentarray( "zombie_door", "targetname" ); + + for ( i = 0; i < zombie_doors.size; i++ ) + { + if ( distancesquared( zombie_doors[i].origin, position ) < range_squared ) + return true; + } + + zombie_airlock_doors = getentarray( "zombie_airlock_buy", "targetname" ); + + for ( i = 0; i < zombie_airlock_doors.size; i++ ) + { + if ( distancesquared( zombie_airlock_doors[i].origin, position ) < range_squared ) + return true; + } + + zombie_debris = getentarray( "zombie_debris", "targetname" ); + + for ( i = 0; i < zombie_debris.size; i++ ) + { + if ( distancesquared( zombie_debris[i].origin, position ) < range_squared ) + return true; + } + + return false; +} + +quantum_bomb_open_nearest_door_result( position ) +{ + range_squared = 32400; + zombie_doors = getentarray( "zombie_door", "targetname" ); + + for ( i = 0; i < zombie_doors.size; i++ ) + { + if ( distancesquared( zombie_doors[i].origin, position ) < range_squared ) + { + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "quant_good" ); + zombie_doors[i] notify( "trigger", self, 1 ); + [[ level.quantum_bomb_play_area_effect_func ]]( position ); + return; + } + } + + zombie_airlock_doors = getentarray( "zombie_airlock_buy", "targetname" ); + + for ( i = 0; i < zombie_airlock_doors.size; i++ ) + { + if ( distancesquared( zombie_airlock_doors[i].origin, position ) < range_squared ) + { + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "quant_good" ); + zombie_airlock_doors[i] notify( "trigger", self, 1 ); + [[ level.quantum_bomb_play_area_effect_func ]]( position ); + return; + } + } + + zombie_debris = getentarray( "zombie_debris", "targetname" ); + + for ( i = 0; i < zombie_debris.size; i++ ) + { + if ( distancesquared( zombie_debris[i].origin, position ) < range_squared ) + { + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "quant_good" ); + zombie_debris[i] notify( "trigger", self, 1 ); + [[ level.quantum_bomb_play_area_effect_func ]]( position ); + return; + } + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_bot.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_bot.gsc new file mode 100644 index 0000000..ba070ac --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_bot.gsc @@ -0,0 +1,12 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; + +init() +{ +/# + println( "ZM >> Zombiemode Server Scripts Init (_zm_bot.gsc)" ); +#/ +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_buildables.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_buildables.gsc new file mode 100644 index 0000000..9176e98 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_buildables.gsc @@ -0,0 +1,2895 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\_demo; + +init() +{ + precachestring( &"ZOMBIE_BUILDING" ); + precachestring( &"ZOMBIE_BUILD_PIECE_MISSING" ); + precachestring( &"ZOMBIE_BUILD_PIECE_GRAB" ); + precacheitem( "zombie_builder_zm" ); + precacheitem( "buildable_piece_zm" ); + level.gameobjswapping = 1; + zombie_buildables_callbacks = []; + level.buildablepickups = []; + level.buildables_built = []; + level.buildable_stubs = []; + level.buildable_piece_count = 0; + level._effect["building_dust"] = loadfx( "maps/zombie/fx_zmb_buildable_assemble_dust" ); + + if ( isdefined( level.init_buildables ) ) + [[ level.init_buildables ]](); + + if ( isdefined( level.use_swipe_protection ) ) + onplayerconnect_callback( ::buildables_watch_swipes ); +} + +anystub_update_prompt( player ) +{ + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || player in_revive_trigger() ) + { + self.hint_string = ""; + return false; + } + + if ( player isthrowinggrenade() ) + { + self.hint_string = ""; + return false; + } + + if ( isdefined( player.is_drinking ) && player.is_drinking > 0 ) + { + self.hint_string = ""; + return false; + } + + if ( isdefined( player.screecher_weapon ) ) + { + self.hint_string = ""; + return false; + } + + return true; +} + +anystub_get_unitrigger_origin() +{ + if ( isdefined( self.origin_parent ) ) + return self.origin_parent.origin; + + return self.origin; +} + +anystub_on_spawn_trigger( trigger ) +{ + if ( isdefined( self.link_parent ) ) + { + trigger enablelinkto(); + trigger linkto( self.link_parent ); + trigger setmovingplatformenabled( 1 ); + } +} + +buildables_watch_swipes() +{ + self endon( "disconnect" ); + self notify( "buildables_watch_swipes" ); + self endon( "buildables_watch_swipes" ); + + while ( true ) + { + self waittill( "melee_swipe", zombie ); + + if ( distancesquared( zombie.origin, self.origin ) > zombie.meleeattackdist * zombie.meleeattackdist ) + continue; + + trigger = level._unitriggers.trigger_pool[self getentitynumber()]; + + if ( isdefined( trigger ) && isdefined( trigger.stub.piece ) ) + { + piece = trigger.stub.piece; + + if ( !isdefined( piece.damage ) ) + piece.damage = 0; + + piece.damage++; + + if ( piece.damage > 12 ) + { + thread maps\mp\zombies\_zm_equipment::equipment_disappear_fx( trigger.stub maps\mp\zombies\_zm_unitrigger::unitrigger_origin() ); + piece maps\mp\zombies\_zm_buildables::piece_unspawn(); + self maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); + + if ( isalive( self ) ) + self playlocalsound( level.zmb_laugh_alias ); + } + } + } +} + +explosiondamage( damage, pos ) +{ +/# + println( "ZM BUILDABLE Explode do " + damage + " damage to " + self.name + "\\n" ); +#/ + self dodamage( damage, pos ); +} + +add_zombie_buildable( buildable_name, hint, building, bought ) +{ + if ( !isdefined( level.zombie_include_buildables ) ) + level.zombie_include_buildables = []; + + if ( isdefined( level.zombie_include_buildables ) && !isdefined( level.zombie_include_buildables[buildable_name] ) ) + return; + + precachestring( hint ); + + if ( isdefined( building ) ) + precachestring( building ); + + if ( isdefined( bought ) ) + precachestring( bought ); + + buildable_struct = level.zombie_include_buildables[buildable_name]; + + if ( !isdefined( level.zombie_buildables ) ) + level.zombie_buildables = []; + + buildable_struct.hint = hint; + buildable_struct.building = building; + buildable_struct.bought = bought; +/# + println( "ZM >> Looking for buildable - " + buildable_struct.name ); +#/ + level.zombie_buildables[buildable_struct.name] = buildable_struct; + + if ( !level.createfx_enabled ) + { + if ( level.zombie_buildables.size == 1 ) + register_clientfields(); + } +} + +register_clientfields() +{ + if ( isdefined( level.buildable_slot_count ) ) + { + for ( i = 0; i < level.buildable_slot_count; i++ ) + { + bits = getminbitcountfornum( level.buildable_piece_counts[i] ); + registerclientfield( "toplayer", level.buildable_clientfields[i], 12000, bits, "int" ); + } + } + else + { + bits = getminbitcountfornum( level.buildable_piece_count ); + registerclientfield( "toplayer", "buildable", 1, bits, "int" ); + } +} + +set_buildable_clientfield( slot, newvalue ) +{ + if ( isdefined( level.buildable_slot_count ) ) + self setclientfieldtoplayer( level.buildable_clientfields[slot], newvalue ); + else + self setclientfieldtoplayer( "buildable", newvalue ); +} + +clear_buildable_clientfield( slot ) +{ + self set_buildable_clientfield( slot, 0 ); +} + +include_zombie_buildable( buiildable_struct ) +{ + if ( !isdefined( level.zombie_include_buildables ) ) + level.zombie_include_buildables = []; +/# + println( "ZM >> Including buildable - " + buiildable_struct.name ); +#/ + level.zombie_include_buildables[buiildable_struct.name] = buiildable_struct; +} + +generate_zombie_buildable_piece( buildablename, modelname, radius, height, drop_offset, hud_icon, onpickup, ondrop, use_spawn_num, part_name, can_reuse, client_field_state, buildable_slot ) +{ + precachemodel( modelname ); + + if ( isdefined( hud_icon ) ) + precacheshader( hud_icon ); + + piece = spawnstruct(); + buildable_pieces = []; + buildable_pieces_structs = getstructarray( buildablename + "_" + modelname, "targetname" ); +/# + if ( buildable_pieces_structs.size < 1 ) + println( "ERROR: Missing buildable piece <" + buildablename + "> <" + modelname + ">\\n" ); +#/ + foreach ( index, struct in buildable_pieces_structs ) + { + buildable_pieces[index] = struct; + buildable_pieces[index].hasspawned = 0; + } + + piece.spawns = buildable_pieces; + piece.buildablename = buildablename; + piece.modelname = modelname; + piece.hud_icon = hud_icon; + piece.radius = radius; + piece.height = height; + piece.part_name = part_name; + piece.can_reuse = can_reuse; + piece.drop_offset = drop_offset; + piece.max_instances = 256; + + if ( isdefined( buildable_slot ) ) + piece.buildable_slot = buildable_slot; + else + piece.buildable_slot = 0; + + piece.onpickup = onpickup; + piece.ondrop = ondrop; + piece.use_spawn_num = use_spawn_num; + piece.client_field_state = client_field_state; + return piece; +} + +manage_multiple_pieces( max_instances, min_instances ) +{ + self.max_instances = max_instances; + self.min_instances = min_instances; + self.managing_pieces = 1; + self.piece_allocated = []; +} + +buildable_set_force_spawn_location( str_kvp, str_name ) +{ + self.str_force_spawn_kvp = str_kvp; + self.str_force_spawn_name = str_name; +} + +buildable_use_cyclic_spawns( randomize_start_location ) +{ + self.use_cyclic_spawns = 1; + self.randomize_cyclic_index = randomize_start_location; +} + +combine_buildable_pieces( piece1, piece2, piece3 ) +{ + spawns1 = piece1.spawns; + spawns2 = piece2.spawns; + spawns = arraycombine( spawns1, spawns2, 1, 0 ); + + if ( isdefined( piece3 ) ) + { + spawns3 = piece3.spawns; + spawns = arraycombine( spawns, spawns3, 1, 0 ); + spawns = array_randomize( spawns ); + piece3.spawns = spawns; + } + else + spawns = array_randomize( spawns ); + + piece1.spawns = spawns; + piece2.spawns = spawns; +} + +add_buildable_piece( piece, part_name, can_reuse ) +{ + if ( !isdefined( self.buildablepieces ) ) + self.buildablepieces = []; + + if ( isdefined( part_name ) ) + piece.part_name = part_name; + + if ( isdefined( can_reuse ) ) + piece.can_reuse = can_reuse; + + self.buildablepieces[self.buildablepieces.size] = piece; + + if ( !isdefined( self.buildable_slot ) ) + self.buildable_slot = piece.buildable_slot; + else + assert( self.buildable_slot == piece.buildable_slot ); +} + +create_zombie_buildable_piece( modelname, radius, height, hud_icon ) +{ + piece = generate_zombie_buildable_piece( self.name, modelname, radius, height, hud_icon ); + self add_buildable_piece( piece ); +} + +onplayerlaststand() +{ + pieces = self player_get_buildable_pieces(); + spawn_pos = []; + spawn_pos[0] = self.origin; + + if ( pieces.size >= 2 ) + { + nodes = getnodesinradiussorted( self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), 120, 30, 72, "path", 5 ); + + for ( i = 0; i < pieces.size; i++ ) + { + if ( i < nodes.size && check_point_in_playable_area( nodes[i].origin ) ) + { + spawn_pos[i] = nodes[i].origin; + continue; + } + + spawn_pos[i] = self.origin + vectorscale( ( 1, 1, 0 ), 5.0 ); + } + } + + spawnidx = 0; + + foreach ( piece in pieces ) + { + slot = piece.buildable_slot; + + if ( isdefined( piece ) ) + { + return_to_start_pos = 0; + + if ( isdefined( level.safe_place_for_buildable_piece ) ) + { + if ( !self [[ level.safe_place_for_buildable_piece ]]( piece ) ) + return_to_start_pos = 1; + } + + if ( return_to_start_pos ) + piece piece_spawn_at(); + else if ( pieces.size < 2 ) + piece piece_spawn_at( self.origin + vectorscale( ( 1, 1, 0 ), 5.0 ), self.angles ); + else + piece piece_spawn_at( spawn_pos[spawnidx], self.angles ); + + if ( isdefined( piece.ondrop ) ) + piece [[ piece.ondrop ]]( self ); + + self clear_buildable_clientfield( slot ); + spawnidx++; + } + + self player_set_buildable_piece( undefined, slot ); + self notify( "piece_released" + slot ); + } +} + +piecestub_get_unitrigger_origin() +{ + if ( isdefined( self.origin_parent ) ) + return self.origin_parent.origin + vectorscale( ( 0, 0, 1 ), 12.0 ); + + return self.origin; +} + +generate_piece_unitrigger( classname, origin, angles, flags, radius = 64, script_height = 64, moving ) +{ + script_width = script_height; + + if ( !isdefined( script_width ) ) + script_width = 64; + + script_length = script_height; + + if ( !isdefined( script_length ) ) + script_length = 64; + + unitrigger_stub = spawnstruct(); + unitrigger_stub.origin = origin; + + if ( isdefined( script_length ) ) + unitrigger_stub.script_length = script_length; + else + unitrigger_stub.script_length = 13.5; + + if ( isdefined( script_width ) ) + unitrigger_stub.script_width = script_width; + else + unitrigger_stub.script_width = 27.5; + + if ( isdefined( script_height ) ) + unitrigger_stub.script_height = script_height; + else + unitrigger_stub.script_height = 24; + + unitrigger_stub.radius = radius; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + unitrigger_stub.hint_string = &"ZOMBIE_BUILD_PIECE_GRAB"; + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.require_look_at = 0; + + switch ( classname ) + { + case "trigger_radius": + unitrigger_stub.script_unitrigger_type = "unitrigger_radius"; + break; + case "trigger_radius_use": + unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + break; + case "trigger_box": + unitrigger_stub.script_unitrigger_type = "unitrigger_box"; + break; + case "trigger_box_use": + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + break; + } + + unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + unitrigger_stub.prompt_and_visibility_func = ::piecetrigger_update_prompt; + unitrigger_stub.originfunc = ::piecestub_get_unitrigger_origin; + unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; + + if ( isdefined( moving ) && moving ) + maps\mp\zombies\_zm_unitrigger::register_unitrigger( unitrigger_stub, ::piece_unitrigger_think ); + else + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::piece_unitrigger_think ); + + return unitrigger_stub; +} + +piecetrigger_update_prompt( player ) +{ + can_use = self.stub piecestub_update_prompt( player ); + self setinvisibletoplayer( player, !can_use ); + + if ( isdefined( self.stub.hint_parm1 ) ) + self sethintstring( self.stub.hint_string, self.stub.hint_parm1 ); + else + self sethintstring( self.stub.hint_string ); + + if ( isdefined( self.stub.cursor_hint ) ) + { + if ( self.stub.cursor_hint == "HINT_WEAPON" && isdefined( self.stub.cursor_hint_weapon ) ) + self setcursorhint( self.stub.cursor_hint, self.stub.cursor_hint_weapon ); + else + self setcursorhint( self.stub.cursor_hint ); + } + + return can_use; +} + +piecestub_update_prompt( player ) +{ + if ( !self anystub_update_prompt( player ) ) + { + self.cursor_hint = "HINT_NOICON"; + return false; + } + + if ( isdefined( player player_get_buildable_piece( self.piece.buildable_slot ) ) ) + { + spiece = self.piece; + cpiece = player player_get_buildable_piece( self.piece.buildable_slot ); + + if ( spiece.modelname == cpiece.modelname && spiece.buildablename == cpiece.buildablename && ( !isdefined( spiece.script_noteworthy ) || !isdefined( cpiece.script_noteworthy ) || spiece.script_noteworthy == cpiece.script_noteworthy ) ) + { + self.hint_string = ""; + return false; + } + + if ( isdefined( spiece.hint_swap ) ) + { + self.hint_string = spiece.hint_swap; + self.hint_parm1 = self.piece.hint_swap_parm1; + } + else + self.hint_string = &"ZOMBIE_BUILD_PIECE_SWITCH"; + + if ( isdefined( self.piece.cursor_hint ) ) + self.cursor_hint = self.piece.cursor_hint; + + if ( isdefined( self.piece.cursor_hint_weapon ) ) + self.cursor_hint_weapon = self.piece.cursor_hint_weapon; + } + else + { + if ( isdefined( self.piece.hint_grab ) ) + { + self.hint_string = self.piece.hint_grab; + self.hint_parm1 = self.piece.hint_grab_parm1; + } + else + self.hint_string = &"ZOMBIE_BUILD_PIECE_GRAB"; + + if ( isdefined( self.piece.cursor_hint ) ) + self.cursor_hint = self.piece.cursor_hint; + + if ( isdefined( self.piece.cursor_hint_weapon ) ) + self.cursor_hint_weapon = self.piece.cursor_hint_weapon; + } + + return true; +} + +piece_unitrigger_think() +{ + self endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "trigger", player ); + + if ( player != self.parent_player ) + continue; + + if ( isdefined( player.screecher_weapon ) ) + continue; + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + status = player player_can_take_piece( self.stub.piece ); + + if ( !status ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + } + else + player thread player_take_piece( self.stub.piece ); + } +} + +player_get_buildable_pieces() +{ + if ( !isdefined( self.current_buildable_pieces ) ) + self.current_buildable_pieces = []; + + return self.current_buildable_pieces; +} + +player_get_buildable_piece( slot = 0 ) +{ + if ( !isdefined( self.current_buildable_pieces ) ) + self.current_buildable_pieces = []; + + return self.current_buildable_pieces[slot]; +} + +player_set_buildable_piece( piece, slot = 0 ) +{ +/# + if ( isdefined( slot ) && isdefined( piece ) && isdefined( piece.buildable_slot ) ) + assert( slot == piece.buildable_slot ); +#/ + if ( !isdefined( self.current_buildable_pieces ) ) + self.current_buildable_pieces = []; + + self.current_buildable_pieces[slot] = piece; +} + +player_can_take_piece( piece ) +{ + if ( !isdefined( piece ) ) + return false; + + return true; +} + +dbline( from, to ) +{ +/# + time = 20; + + while ( time > 0 ) + { + line( from, to, ( 0, 0, 1 ), 0, 1 ); + time -= 0.05; + wait 0.05; + } +#/ +} + +player_throw_piece( piece, origin, dir, return_to_spawn, return_time, endangles ) +{ + assert( isdefined( piece ) ); + + if ( isdefined( piece ) ) + { +/# + thread dbline( origin, origin + dir ); +#/ + pass = 0; + done = 0; + altmodel = undefined; + + while ( pass < 2 && !done ) + { + grenade = self magicgrenadetype( "buildable_piece_zm", origin, dir, 30000 ); + grenade thread watch_hit_players(); + grenade ghost(); + + if ( !isdefined( altmodel ) ) + { + altmodel = spawn( "script_model", grenade.origin ); + altmodel setmodel( piece.modelname ); + } + + altmodel.origin = grenade.angles; + altmodel.angles = grenade.angles; + altmodel linkto( grenade, "", ( 0, 0, 0 ), ( 0, 0, 0 ) ); + grenade.altmodel = altmodel; + + grenade waittill( "stationary" ); + + grenade_origin = grenade.origin; + grenade_angles = grenade.angles; + landed_on = grenade getgroundent(); + grenade delete(); + + if ( isdefined( landed_on ) && landed_on == level ) + done = 1; + else + { + origin = grenade_origin; + dir = ( dir[0] * -1 / 10, dir[1] * -1 / 10, -1 ); + pass++; + } + } + + if ( !isdefined( endangles ) ) + endangles = grenade_angles; + + piece piece_spawn_at( grenade_origin, endangles ); + + if ( isdefined( altmodel ) ) + altmodel delete(); + + if ( isdefined( piece.ondrop ) ) + piece [[ piece.ondrop ]]( self ); + + if ( isdefined( return_to_spawn ) && return_to_spawn ) + piece piece_wait_and_return( return_time ); + } +} + +watch_hit_players() +{ + self endon( "death" ); + self endon( "stationary" ); + + while ( isdefined( self ) ) + { + self waittill( "grenade_bounce", pos, normal, ent ); + + if ( isplayer( ent ) ) + ent explosiondamage( 25, pos ); + } +} + +piece_wait_and_return( return_time ) +{ + self endon( "pickup" ); + wait 0.15; + + if ( isdefined( level.exploding_jetgun_fx ) ) + playfxontag( level.exploding_jetgun_fx, self.model, "tag_origin" ); + else + playfxontag( level._effect["powerup_on"], self.model, "tag_origin" ); + + wait( return_time - 6 ); + self piece_hide(); + wait 1; + self piece_show(); + wait 1; + self piece_hide(); + wait 1; + self piece_show(); + wait 1; + self piece_hide(); + wait 1; + self piece_show(); + wait 1; + self notify( "respawn" ); + self piece_unspawn(); + self piece_spawn_at(); +} + +player_return_piece_to_original_spawn( slot = 0 ) +{ + self notify( "piece_released" + slot ); + piece = self player_get_buildable_piece( slot ); + self player_set_buildable_piece( undefined, slot ); + + if ( isdefined( piece ) ) + { + piece piece_spawn_at(); + self clear_buildable_clientfield( slot ); + } +} + +player_drop_piece_on_death( slot ) +{ + self notify( "piece_released" + slot ); + self endon( "piece_released" + slot ); + origin = self.origin; + angles = self.angles; + piece = self player_get_buildable_piece( slot ); + + self waittill( "death_or_disconnect" ); + + piece piece_spawn_at( origin, angles ); + + if ( isdefined( self ) ) + self clear_buildable_clientfield( slot ); + + if ( isdefined( piece.ondrop ) ) + piece [[ piece.ondrop ]]( self ); +} + +player_drop_piece( piece, slot = 0 ) +{ + if ( !isdefined( piece ) ) + piece = self player_get_buildable_piece( slot ); + else + slot = piece.buildable_slot; + + if ( isdefined( piece ) ) + { + origin = self.origin; + origintrace = groundtrace( origin + vectorscale( ( 0, 0, 1 ), 5.0 ), origin - vectorscale( ( 0, 0, 1 ), 999999.0 ), 0, self ); + + if ( isdefined( origintrace["entity"] ) ) + origintrace = groundtrace( origintrace["entity"].origin, origintrace["entity"].origin - vectorscale( ( 0, 0, 1 ), 999999.0 ), 0, origintrace["entity"] ); + + if ( isdefined( origintrace["position"] ) ) + origin = origintrace["position"]; + + piece.damage = 0; + piece piece_spawn_at( origin, self.angles ); + + if ( isplayer( self ) ) + self clear_buildable_clientfield( slot ); + + if ( isdefined( piece.ondrop ) ) + piece [[ piece.ondrop ]]( self ); + } + + self player_set_buildable_piece( undefined, slot ); + self notify( "piece_released" + slot ); +} + +player_take_piece( piece ) +{ + piece_slot = piece.buildable_slot; + damage = piece.damage; + + if ( isdefined( self player_get_buildable_piece( piece_slot ) ) ) + { + other_piece = self player_get_buildable_piece( piece_slot ); + self player_drop_piece( self player_get_buildable_piece( piece_slot ), piece_slot ); + other_piece.damage = damage; + self do_player_general_vox( "general", "build_swap" ); + } + + if ( isdefined( piece.onpickup ) ) + piece [[ piece.onpickup ]]( self ); + + piece piece_unspawn(); + piece notify( "pickup" ); + + if ( isplayer( self ) ) + { + if ( isdefined( piece.client_field_state ) ) + self set_buildable_clientfield( piece_slot, piece.client_field_state ); + + self player_set_buildable_piece( piece, piece_slot ); + self thread player_drop_piece_on_death( piece_slot ); + self track_buildable_piece_pickedup( piece ); + } +} + +player_destroy_piece( piece = self player_get_buildable_piece() ) +{ + if ( isplayer( self ) ) + { + slot = piece.buildable_slot; + + if ( isdefined( piece ) ) + { + piece piece_destroy(); + self clear_buildable_clientfield( slot ); + } + + self player_set_buildable_piece( undefined, slot ); + self notify( "piece_released" + slot ); + } +} + +claim_location( location ) +{ + if ( !isdefined( level.buildable_claimed_locations ) ) + level.buildable_claimed_locations = []; + + if ( !isdefined( level.buildable_claimed_locations[location] ) ) + { + level.buildable_claimed_locations[location] = 1; + return true; + } + + return false; +} + +is_point_in_build_trigger( point ) +{ + candidate_list = []; + + foreach ( zone in level.zones ) + { + if ( isdefined( zone.unitrigger_stubs ) ) + candidate_list = arraycombine( candidate_list, zone.unitrigger_stubs, 1, 0 ); + } + + valid_range = 128; + closest = maps\mp\zombies\_zm_unitrigger::get_closest_unitriggers( point, candidate_list, valid_range ); + + for ( index = 0; index < closest.size; index++ ) + { + if ( isdefined( closest[index].registered ) && closest[index].registered && isdefined( closest[index].piece ) ) + return true; + } + + return false; +} + +piece_allocate_spawn( piecespawn ) +{ + self.current_spawn = 0; + self.managed_spawn = 1; + self.piecespawn = piecespawn; + + if ( isdefined( piecespawn.str_force_spawn_kvp ) ) + { + s_struct = getstruct( piecespawn.str_force_spawn_name, piecespawn.str_force_spawn_kvp ); + + if ( isdefined( s_struct ) ) + { + for ( i = 0; i < self.spawns.size; i++ ) + { + if ( s_struct == self.spawns[i] ) + { + self.current_spawn = i; + piecespawn.piece_allocated[self.current_spawn] = 1; + piecespawn.str_force_spawn_kvp = undefined; + piecespawn.str_force_spawn_name = undefined; + return; + } + } + } + } + + if ( isdefined( piecespawn.use_cyclic_spawns ) ) + { + piece_allocate_cyclic( piecespawn ); + return; + } + + if ( self.spawns.size >= 1 && self.spawns.size > 1 ) + { + any_good = 0; + any_okay = 0; + totalweight = 0; + spawnweights = []; + + for ( i = 0; i < self.spawns.size; i++ ) + { + if ( isdefined( piecespawn.piece_allocated[i] ) && piecespawn.piece_allocated[i] ) + spawnweights[i] = 0; + else if ( isdefined( self.spawns[i].script_forcespawn ) && self.spawns[i].script_forcespawn ) + { + switch ( self.spawns[i].script_forcespawn ) + { + case 4: + spawnweights[i] = 0.0; + break; + case 1: + self.spawns[i].script_forcespawn = 0; + case 2: + self.current_spawn = i; + piecespawn.piece_allocated[self.current_spawn] = 1; + return; + case 3: + self.spawns[i].script_forcespawn = 4; + self.current_spawn = i; + piecespawn.piece_allocated[self.current_spawn] = 1; + return; + default: + any_okay = 1; + spawnweights[i] = 0.01; + break; + } + } + else if ( is_point_in_build_trigger( self.spawns[i].origin ) ) + { + any_okay = 1; + spawnweights[i] = 0.01; + } + else + { + any_good = 1; + spawnweights[i] = 1.0; + } + + totalweight += spawnweights[i]; + } + + assert( any_good || any_okay, "There is nowhere to spawn this piece" ); + + if ( any_good ) + totalweight = float( int( totalweight ) ); + + r = randomfloat( totalweight ); + + for ( i = 0; i < self.spawns.size; i++ ) + { + if ( !any_good || spawnweights[i] >= 1.0 ) + { + r -= spawnweights[i]; + + if ( r < 0 ) + { + self.current_spawn = i; + piecespawn.piece_allocated[self.current_spawn] = 1; + return; + } + } + } + + self.current_spawn = randomint( self.spawns.size ); + piecespawn.piece_allocated[self.current_spawn] = 1; + } +} + +piece_allocate_cyclic( piecespawn ) +{ + if ( self.spawns.size > 1 ) + { + if ( isdefined( piecespawn.randomize_cyclic_index ) ) + { + piecespawn.randomize_cyclic_index = undefined; + piecespawn.cyclic_index = randomint( self.spawns.size ); + } + + if ( !isdefined( piecespawn.cyclic_index ) ) + piecespawn.cyclic_index = 0; + + piecespawn.cyclic_index++; + + if ( piecespawn.cyclic_index >= self.spawns.size ) + piecespawn.cyclic_index = 0; + } + else + piecespawn.cyclic_index = 0; + + self.current_spawn = piecespawn.cyclic_index; + piecespawn.piece_allocated[self.current_spawn] = 1; +} + +piece_deallocate_spawn() +{ + if ( isdefined( self.current_spawn ) ) + { + self.piecespawn.piece_allocated[self.current_spawn] = 0; + self.current_spawn = undefined; + } + + self.start_origin = undefined; +} + +piece_pick_random_spawn() +{ + self.current_spawn = 0; + + if ( self.spawns.size >= 1 && self.spawns.size > 1 ) + { + for ( self.current_spawn = randomint( self.spawns.size ); isdefined( self.spawns[self.current_spawn].claim_location ) && !claim_location( self.spawns[self.current_spawn].claim_location ); self.current_spawn = randomint( self.spawns.size ) ) + { + arrayremoveindex( self.spawns, self.current_spawn ); + + if ( self.spawns.size < 1 ) + { + self.current_spawn = 0; +/# + println( "ERROR: All buildable spawn locations claimed" ); +#/ + return; + } + } + } +} + +piece_set_spawn( num ) +{ + self.current_spawn = 0; + + if ( self.spawns.size >= 1 && self.spawns.size > 1 ) + self.current_spawn = int( min( num, self.spawns.size - 1 ) ); +} + +piece_spawn_in( piecespawn ) +{ + if ( self.spawns.size < 1 ) + return; + + if ( isdefined( self.managed_spawn ) && self.managed_spawn ) + { + if ( !isdefined( self.current_spawn ) ) + self piece_allocate_spawn( self.piecespawn ); + } + + if ( !isdefined( self.current_spawn ) ) + self.current_spawn = 0; + + spawndef = self.spawns[self.current_spawn]; + self.script_noteworthy = spawndef.script_noteworthy; + self.script_parameters = spawndef.script_parameters; + self.unitrigger = generate_piece_unitrigger( "trigger_radius_use", spawndef.origin + vectorscale( ( 0, 0, 1 ), 12.0 ), spawndef.angles, 0, piecespawn.radius, piecespawn.height, 0 ); + self.unitrigger.piece = self; + self.buildable_slot = piecespawn.buildable_slot; + self.radius = piecespawn.radius; + self.height = piecespawn.height; + self.buildablename = piecespawn.buildablename; + self.modelname = piecespawn.modelname; + self.hud_icon = piecespawn.hud_icon; + self.part_name = piecespawn.part_name; + self.drop_offset = piecespawn.drop_offset; + self.start_origin = spawndef.origin; + self.start_angles = spawndef.angles; + self.client_field_state = piecespawn.client_field_state; + self.hint_grab = piecespawn.hint_grab; + self.hint_swap = piecespawn.hint_swap; + self.model = spawn( "script_model", self.start_origin ); + + if ( isdefined( self.start_angles ) ) + self.model.angles = self.start_angles; + + self.model setmodel( piecespawn.modelname ); + self.model ghostindemo(); + self.model.hud_icon = piecespawn.hud_icon; + self.piecespawn = piecespawn; + self.unitrigger.origin_parent = self.model; + self.building = undefined; + self.onunspawn = piecespawn.onunspawn; + self.ondestroy = piecespawn.ondestroy; + + if ( isdefined( piecespawn.onspawn ) ) + { + self.onspawn = piecespawn.onspawn; + self [[ piecespawn.onspawn ]](); + } +} + +piece_spawn_at_with_notify_delay( origin, angles, str_notify, unbuild_respawn_fn ) +{ + level waittill( str_notify ); + + piece_spawn_at( origin, angles ); + + if ( isdefined( unbuild_respawn_fn ) ) + self [[ unbuild_respawn_fn ]](); +} + +piece_spawn_at( origin, angles ) +{ + if ( self.spawns.size < 1 ) + return; + + if ( isdefined( self.managed_spawn ) && self.managed_spawn ) + { + if ( !isdefined( self.current_spawn ) && !isdefined( origin ) ) + { + self piece_allocate_spawn( self.piecespawn ); + spawndef = self.spawns[self.current_spawn]; + self.start_origin = spawndef.origin; + self.start_angles = spawndef.angles; + } + } + else if ( !isdefined( self.current_spawn ) ) + self.current_spawn = 0; + + unitrigger_offset = vectorscale( ( 0, 0, 1 ), 12.0 ); + + if ( !isdefined( origin ) ) + origin = self.start_origin; + else + { + origin += ( 0, 0, self.drop_offset ); + unitrigger_offset -= ( 0, 0, self.drop_offset ); + } + + if ( !isdefined( angles ) ) + angles = self.start_angles; +/# + if ( !isdefined( level.drop_offset ) ) + level.drop_offset = 0; + + origin += ( 0, 0, level.drop_offset ); + unitrigger_offset -= ( 0, 0, level.drop_offset ); +#/ + self.model = spawn( "script_model", origin ); + + if ( isdefined( angles ) ) + self.model.angles = angles; + + self.model setmodel( self.modelname ); + + if ( isdefined( level.equipment_safe_to_drop ) ) + { + if ( ![[ level.equipment_safe_to_drop ]]( self.model ) ) + { + origin = self.start_origin; + angles = self.start_angles; + self.model.origin = origin; + self.model.angles = angles; + } + } + + self.unitrigger = generate_piece_unitrigger( "trigger_radius_use", origin + unitrigger_offset, angles, 0, self.radius, self.height, isdefined( self.model.canmove ) && self.model.canmove ); + self.unitrigger.piece = self; + self.model.hud_icon = self.hud_icon; + self.unitrigger.origin_parent = self.model; + self.building = undefined; + + if ( isdefined( self.onspawn ) ) + self [[ self.onspawn ]](); +} + +piece_unspawn() +{ + if ( isdefined( self.onunspawn ) ) + self [[ self.onunspawn ]](); + + if ( isdefined( self.managed_spawn ) && self.managed_spawn ) + self piece_deallocate_spawn(); + + if ( isdefined( self.model ) ) + self.model delete(); + + self.model = undefined; + + if ( isdefined( self.unitrigger ) ) + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger ); + + self.unitrigger = undefined; +} + +piece_hide() +{ + if ( isdefined( self.model ) ) + self.model ghost(); +} + +piece_show() +{ + if ( isdefined( self.model ) ) + self.model show(); +} + +piece_destroy() +{ + if ( isdefined( self.ondestroy ) ) + self [[ self.ondestroy ]](); +} + +generate_piece( buildable_piece_spawns ) +{ + piece = spawnstruct(); + piece.spawns = buildable_piece_spawns.spawns; + + if ( isdefined( buildable_piece_spawns.managing_pieces ) && buildable_piece_spawns.managing_pieces ) + piece piece_allocate_spawn( buildable_piece_spawns ); + else if ( isdefined( buildable_piece_spawns.use_spawn_num ) ) + piece piece_set_spawn( buildable_piece_spawns.use_spawn_num ); + else + piece piece_pick_random_spawn(); + + piece piece_spawn_in( buildable_piece_spawns ); + + if ( piece.spawns.size >= 1 ) + piece.hud_icon = buildable_piece_spawns.hud_icon; + + if ( isdefined( buildable_piece_spawns.onpickup ) ) + piece.onpickup = buildable_piece_spawns.onpickup; + else + piece.onpickup = ::onpickuputs; + + if ( isdefined( buildable_piece_spawns.ondrop ) ) + piece.ondrop = buildable_piece_spawns.ondrop; + else + piece.ondrop = ::ondroputs; + + return piece; +} + +buildable_piece_unitriggers( buildable_name, origin ) +{ + assert( isdefined( buildable_name ) ); + assert( isdefined( level.zombie_buildables[buildable_name] ), "Called buildable_think() without including the buildable - " + buildable_name ); + buildable = level.zombie_buildables[buildable_name]; + + if ( !isdefined( buildable.buildablepieces ) ) + buildable.buildablepieces = []; + + flag_wait( "start_zombie_round_logic" ); + buildablezone = spawnstruct(); + buildablezone.buildable_name = buildable_name; + buildablezone.buildable_slot = buildable.buildable_slot; + + if ( !isdefined( buildablezone.pieces ) ) + buildablezone.pieces = []; + + buildablepickups = []; + + foreach ( buildablepiece in buildable.buildablepieces ) + { + if ( !isdefined( buildablepiece.generated_instances ) ) + buildablepiece.generated_instances = 0; + + if ( isdefined( buildablepiece.generated_piece ) && ( isdefined( buildablepiece.can_reuse ) && buildablepiece.can_reuse ) ) + piece = buildablepiece.generated_piece; + else if ( buildablepiece.generated_instances >= buildablepiece.max_instances ) + piece = buildablepiece.generated_piece; + else + { + piece = generate_piece( buildablepiece ); + buildablepiece.generated_piece = piece; + buildablepiece.generated_instances++; + + if ( isdefined( buildablepiece.min_instances ) ) + { + while ( buildablepiece.generated_instances < buildablepiece.min_instances ) + { + piece = generate_piece( buildablepiece ); + buildablepiece.generated_piece = piece; + buildablepiece.generated_instances++; + } + } + } + + buildablezone.pieces[buildablezone.pieces.size] = piece; + } + + buildablezone.stub = self; + return buildablezone; +} + +hide_buildable_table_model( trigger_targetname ) +{ + trig = getent( trigger_targetname, "targetname" ); + + if ( !isdefined( trig ) ) + return; + + if ( isdefined( trig.target ) ) + { + model = getent( trig.target, "targetname" ); + + if ( isdefined( model ) ) + { + model hide(); + model notsolid(); + } + } +} + +setup_unitrigger_buildable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + trig = getent( trigger_targetname, "targetname" ); + + if ( !isdefined( trig ) ) + return; + + return setup_unitrigger_buildable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); +} + +setup_unitrigger_buildable_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + triggers = getentarray( trigger_targetname, "targetname" ); + stubs = []; + + foreach ( trig in triggers ) + stubs[stubs.size] = setup_unitrigger_buildable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); + + return stubs; +} + +setup_unitrigger_buildable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + if ( !isdefined( trig ) ) + return; + + unitrigger_stub = spawnstruct(); + unitrigger_stub.buildablestruct = level.zombie_include_buildables[equipname]; + angles = trig.script_angles; + + if ( !isdefined( angles ) ) + angles = ( 0, 0, 0 ); + + unitrigger_stub.origin = trig.origin + anglestoright( angles ) * -6; + unitrigger_stub.angles = trig.angles; + + if ( isdefined( trig.script_angles ) ) + unitrigger_stub.angles = trig.script_angles; + + unitrigger_stub.equipname = equipname; + unitrigger_stub.weaponname = weaponname; + unitrigger_stub.trigger_hintstring = trigger_hintstring; + unitrigger_stub.delete_trigger = delete_trigger; + unitrigger_stub.built = 0; + unitrigger_stub.persistent = persistent; + unitrigger_stub.usetime = int( 3000 ); + unitrigger_stub.onbeginuse = ::onbeginuseuts; + unitrigger_stub.onenduse = ::onenduseuts; + unitrigger_stub.onuse = ::onuseplantobjectuts; + unitrigger_stub.oncantuse = ::oncantuseuts; + + if ( isdefined( trig.script_length ) ) + unitrigger_stub.script_length = trig.script_length; + else + unitrigger_stub.script_length = 32; + + if ( isdefined( trig.script_width ) ) + unitrigger_stub.script_width = trig.script_width; + else + unitrigger_stub.script_width = 100; + + if ( isdefined( trig.script_height ) ) + unitrigger_stub.script_height = trig.script_height; + else + unitrigger_stub.script_height = 64; + + unitrigger_stub.target = trig.target; + unitrigger_stub.targetname = trig.targetname; + unitrigger_stub.script_noteworthy = trig.script_noteworthy; + unitrigger_stub.script_parameters = trig.script_parameters; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + + if ( isdefined( level.zombie_buildables[equipname].hint ) ) + unitrigger_stub.hint_string = level.zombie_buildables[equipname].hint; + + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.require_look_at = 1; + unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + unitrigger_stub.prompt_and_visibility_func = ::buildabletrigger_update_prompt; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::buildable_place_think ); + unitrigger_stub.piece_trigger = trig; + trig.trigger_stub = unitrigger_stub; + unitrigger_stub.zombie_weapon_upgrade = trig.zombie_weapon_upgrade; + + if ( isdefined( unitrigger_stub.target ) ) + { + unitrigger_stub.model = getent( unitrigger_stub.target, "targetname" ); + + if ( isdefined( unitrigger_stub.model ) ) + { + if ( isdefined( unitrigger_stub.zombie_weapon_upgrade ) ) + unitrigger_stub.model useweaponhidetags( unitrigger_stub.zombie_weapon_upgrade ); + + unitrigger_stub.model hide(); + unitrigger_stub.model notsolid(); + } + } + + unitrigger_stub.buildablezone = unitrigger_stub buildable_piece_unitriggers( equipname, unitrigger_stub.origin ); + + if ( delete_trigger ) + trig delete(); + + level.buildable_stubs[level.buildable_stubs.size] = unitrigger_stub; + return unitrigger_stub; +} + +buildable_has_piece( piece ) +{ + for ( i = 0; i < self.pieces.size; i++ ) + { + if ( self.pieces[i].modelname == piece.modelname && self.pieces[i].buildablename == piece.buildablename ) + return true; + } + + return false; +} + +buildable_set_piece_built( piece ) +{ + for ( i = 0; i < self.pieces.size; i++ ) + { + if ( self.pieces[i].modelname == piece.modelname && self.pieces[i].buildablename == piece.buildablename ) + self.pieces[i].built = 1; + } +} + +buildable_set_piece_building( piece ) +{ + for ( i = 0; i < self.pieces.size; i++ ) + { + if ( self.pieces[i].modelname == piece.modelname && self.pieces[i].buildablename == piece.buildablename ) + { + self.pieces[i] = piece; + self.pieces[i].building = 1; + } + } +} + +buildable_clear_piece_building( piece ) +{ + if ( isdefined( piece ) ) + piece.building = 0; +} + +buildable_is_piece_built( piece ) +{ + for ( i = 0; i < self.pieces.size; i++ ) + { + if ( self.pieces[i].modelname == piece.modelname && self.pieces[i].buildablename == piece.buildablename ) + return isdefined( self.pieces[i].built ) && self.pieces[i].built; + } + + return 0; +} + +buildable_is_piece_building( piece ) +{ + for ( i = 0; i < self.pieces.size; i++ ) + { + if ( self.pieces[i].modelname == piece.modelname && self.pieces[i].buildablename == piece.buildablename ) + return isdefined( self.pieces[i].building ) && self.pieces[i].building && self.pieces[i] == piece; + } + + return 0; +} + +buildable_is_piece_built_or_building( piece ) +{ + for ( i = 0; i < self.pieces.size; i++ ) + { + if ( self.pieces[i].modelname == piece.modelname && self.pieces[i].buildablename == piece.buildablename ) + return isdefined( self.pieces[i].built ) && self.pieces[i].built || isdefined( self.pieces[i].building ) && self.pieces[i].building; + } + + return 0; +} + +buildable_all_built() +{ + for ( i = 0; i < self.pieces.size; i++ ) + { + if ( !( isdefined( self.pieces[i].built ) && self.pieces[i].built ) ) + return false; + } + + return true; +} + +player_can_build( buildable, continuing ) +{ + if ( !isdefined( buildable ) ) + return false; + + if ( !isdefined( self player_get_buildable_piece( buildable.buildable_slot ) ) ) + return false; + + if ( !buildable buildable_has_piece( self player_get_buildable_piece( buildable.buildable_slot ) ) ) + return false; + + if ( isdefined( continuing ) && continuing ) + { + if ( buildable buildable_is_piece_built( self player_get_buildable_piece( buildable.buildable_slot ) ) ) + return false; + } + else if ( buildable buildable_is_piece_built_or_building( self player_get_buildable_piece( buildable.buildable_slot ) ) ) + return false; + + if ( isdefined( buildable.stub ) && isdefined( buildable.stub.custom_buildablestub_update_prompt ) && isdefined( buildable.stub.playertrigger[0] ) && isdefined( buildable.stub.playertrigger[0].stub ) && !buildable.stub.playertrigger[0].stub [[ buildable.stub.custom_buildablestub_update_prompt ]]( self, 1, buildable.stub.playertrigger[0] ) ) + return false; + + return true; +} + +player_build( buildable, pieces ) +{ + if ( isdefined( pieces ) ) + { + for ( i = 0; i < pieces.size; i++ ) + { + buildable buildable_set_piece_built( pieces[i] ); + player_destroy_piece( pieces[i] ); + } + } + else + { + buildable buildable_set_piece_built( self player_get_buildable_piece( buildable.buildable_slot ) ); + player_destroy_piece( self player_get_buildable_piece( buildable.buildable_slot ) ); + } + + if ( isdefined( buildable.stub.model ) ) + { + for ( i = 0; i < buildable.pieces.size; i++ ) + { + if ( isdefined( buildable.pieces[i].part_name ) ) + { + buildable.stub.model notsolid(); + + if ( !( isdefined( buildable.pieces[i].built ) && buildable.pieces[i].built ) ) + { + buildable.stub.model hidepart( buildable.pieces[i].part_name ); + continue; + } + + buildable.stub.model show(); + buildable.stub.model showpart( buildable.pieces[i].part_name ); + } + } + } + + if ( isplayer( self ) ) + self track_buildable_pieces_built( buildable ); + + if ( buildable buildable_all_built() ) + { + self player_finish_buildable( buildable ); + buildable.stub buildablestub_finish_build( self ); + + if ( isplayer( self ) ) + self track_buildables_built( buildable ); + + if ( isdefined( level.buildable_built_custom_func ) ) + self thread [[ level.buildable_built_custom_func ]]( buildable ); + + alias = sndbuildablecompletealias( buildable.buildable_name ); + self playsound( alias ); + } + else + { + self playsound( "zmb_buildable_piece_add" ); + assert( isdefined( level.zombie_buildables[buildable.buildable_name].building ), "Missing builing hint" ); + + if ( isdefined( level.zombie_buildables[buildable.buildable_name].building ) ) + return level.zombie_buildables[buildable.buildable_name].building; + } + + return ""; +} + +sndbuildablecompletealias( name ) +{ + alias = undefined; + + switch ( name ) + { + case "chalk": + alias = "zmb_chalk_complete"; + break; + default: + alias = "zmb_buildable_complete"; + break; + } + + return alias; +} + +player_finish_buildable( buildable ) +{ + buildable.built = 1; + buildable.stub.built = 1; + buildable notify( "built", self ); + level.buildables_built[buildable.buildable_name] = 1; + level notify( buildable.buildable_name + "_built", self ); +} + +buildablestub_finish_build( player ) +{ + player player_finish_buildable( self.buildablezone ); +} + +buildablestub_remove() +{ + arrayremovevalue( level.buildable_stubs, self ); +} + +buildabletrigger_update_prompt( player ) +{ + can_use = self.stub buildablestub_update_prompt( player ); + self sethintstring( self.stub.hint_string ); + + if ( isdefined( self.stub.cursor_hint ) ) + { + if ( self.stub.cursor_hint == "HINT_WEAPON" && isdefined( self.stub.cursor_hint_weapon ) ) + self setcursorhint( self.stub.cursor_hint, self.stub.cursor_hint_weapon ); + else + self setcursorhint( self.stub.cursor_hint ); + } + + return can_use; +} + +buildablestub_update_prompt( player ) +{ + if ( !self anystub_update_prompt( player ) ) + return false; + + can_use = 1; + + if ( isdefined( self.buildablestub_reject_func ) ) + { + rval = self [[ self.buildablestub_reject_func ]]( player ); + + if ( rval ) + return false; + } + + if ( isdefined( self.custom_buildablestub_update_prompt ) && !self [[ self.custom_buildablestub_update_prompt ]]( player ) ) + return false; + + self.cursor_hint = "HINT_NOICON"; + self.cursor_hint_weapon = undefined; + + if ( !( isdefined( self.built ) && self.built ) ) + { + slot = self.buildablestruct.buildable_slot; + + if ( !isdefined( player player_get_buildable_piece( slot ) ) ) + { + if ( isdefined( level.zombie_buildables[self.equipname].hint_more ) ) + self.hint_string = level.zombie_buildables[self.equipname].hint_more; + else + self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE"; + + return false; + } + else if ( !self.buildablezone buildable_has_piece( player player_get_buildable_piece( slot ) ) ) + { + if ( isdefined( level.zombie_buildables[self.equipname].hint_wrong ) ) + self.hint_string = level.zombie_buildables[self.equipname].hint_wrong; + else + self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG"; + + return false; + } + else + { + assert( isdefined( level.zombie_buildables[self.equipname].hint ), "Missing buildable hint" ); + + if ( isdefined( level.zombie_buildables[self.equipname].hint ) ) + self.hint_string = level.zombie_buildables[self.equipname].hint; + else + self.hint_string = "Missing buildable hint"; + } + } + else if ( self.persistent == 1 ) + { + if ( maps\mp\zombies\_zm_equipment::is_limited_equipment( self.weaponname ) && maps\mp\zombies\_zm_equipment::limited_equipment_in_use( self.weaponname ) ) + { + self.hint_string = &"ZOMBIE_BUILD_PIECE_ONLY_ONE"; + return false; + } + + if ( player has_player_equipment( self.weaponname ) ) + { + self.hint_string = &"ZOMBIE_BUILD_PIECE_HAVE_ONE"; + return false; + } + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) ) + { + self.cursor_hint = "HINT_WEAPON"; + self.cursor_hint_weapon = self.weaponname; + } + + self.hint_string = self.trigger_hintstring; + } + else if ( self.persistent == 2 ) + { + if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.weaponname, undefined ) ) + { + self.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; + return false; + } + else if ( isdefined( self.bought ) && self.bought ) + { + self.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; + return false; + } + + self.hint_string = self.trigger_hintstring; + } + else + { + self.hint_string = ""; + return false; + } + + return true; +} + +player_continue_building( buildablezone, build_stub = buildablezone.stub ) +{ + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || self in_revive_trigger() ) + return false; + + if ( self isthrowinggrenade() ) + return false; + + if ( !self player_can_build( buildablezone, 1 ) ) + return false; + + if ( isdefined( self.screecher ) ) + return false; + + if ( !self usebuttonpressed() ) + return false; + + slot = build_stub.buildablestruct.buildable_slot; + + if ( !buildablezone buildable_is_piece_building( self player_get_buildable_piece( slot ) ) ) + return false; + + trigger = build_stub maps\mp\zombies\_zm_unitrigger::unitrigger_trigger( self ); + + if ( build_stub.script_unitrigger_type == "unitrigger_radius_use" ) + { + torigin = build_stub unitrigger_origin(); + porigin = self geteye(); + radius_sq = 2.25 * build_stub.test_radius_sq; + + if ( distance2dsquared( torigin, porigin ) > radius_sq ) + return false; + } + else if ( !isdefined( trigger ) || !trigger istouching( self ) ) + return false; + + if ( isdefined( build_stub.require_look_at ) && build_stub.require_look_at && !self is_player_looking_at( trigger.origin, 0.4 ) ) + return false; + + return true; +} + +player_progress_bar_update( start_time, build_time ) +{ + self endon( "entering_last_stand" ); + self endon( "death" ); + self endon( "disconnect" ); + self endon( "buildable_progress_end" ); + + while ( isdefined( self ) && gettime() - start_time < build_time ) + { + progress = ( gettime() - start_time ) / build_time; + + if ( progress < 0 ) + progress = 0; + + if ( progress > 1 ) + progress = 1; + + self.usebar updatebar( progress ); + wait 0.05; + } +} + +player_progress_bar( start_time, build_time, building_prompt ) +{ + self.usebar = self createprimaryprogressbar(); + self.usebartext = self createprimaryprogressbartext(); + + if ( isdefined( building_prompt ) ) + self.usebartext settext( building_prompt ); + else + self.usebartext settext( &"ZOMBIE_BUILDING" ); + + if ( isdefined( self ) && isdefined( start_time ) && isdefined( build_time ) ) + self player_progress_bar_update( start_time, build_time ); + + self.usebartext destroyelem(); + self.usebar destroyelem(); +} + +buildable_use_hold_think_internal( player, bind_stub = self.stub ) +{ + wait 0.01; + + if ( !isdefined( self ) ) + { + self notify( "build_failed" ); + + if ( isdefined( player.buildableaudio ) ) + { + player.buildableaudio delete(); + player.buildableaudio = undefined; + } + + return; + } + + if ( !isdefined( self.usetime ) ) + self.usetime = int( 3000 ); + + self.build_time = self.usetime; + self.build_start_time = gettime(); + build_time = self.build_time; + build_start_time = self.build_start_time; + player disable_player_move_states( 1 ); + player increment_is_drinking(); + orgweapon = player getcurrentweapon(); + build_weapon = "zombie_builder_zm"; + + if ( isdefined( bind_stub.build_weapon ) ) + build_weapon = bind_stub.build_weapon; + + player giveweapon( build_weapon ); + player switchtoweapon( build_weapon ); + slot = bind_stub.buildablestruct.buildable_slot; + bind_stub.buildablezone buildable_set_piece_building( player player_get_buildable_piece( slot ) ); + player thread player_progress_bar( build_start_time, build_time, bind_stub.building_prompt ); + + if ( isdefined( level.buildable_build_custom_func ) ) + player thread [[ level.buildable_build_custom_func ]]( self.stub ); + + while ( isdefined( self ) && player player_continue_building( bind_stub.buildablezone, self.stub ) && gettime() - self.build_start_time < self.build_time ) + wait 0.05; + + player notify( "buildable_progress_end" ); + player maps\mp\zombies\_zm_weapons::switch_back_primary_weapon( orgweapon ); + player takeweapon( "zombie_builder_zm" ); + + if ( isdefined( player.is_drinking ) && player.is_drinking ) + player decrement_is_drinking(); + + player enable_player_move_states(); + + if ( isdefined( self ) && player player_continue_building( bind_stub.buildablezone, self.stub ) && gettime() - self.build_start_time >= self.build_time ) + { + buildable_clear_piece_building( player player_get_buildable_piece( slot ) ); + self notify( "build_succeed" ); + } + else + { + if ( isdefined( player.buildableaudio ) ) + { + player.buildableaudio delete(); + player.buildableaudio = undefined; + } + + buildable_clear_piece_building( player player_get_buildable_piece( slot ) ); + self notify( "build_failed" ); + } +} + +buildable_play_build_fx( player ) +{ + self endon( "kill_trigger" ); + self endon( "build_succeed" ); + self endon( "build_failed" ); + + while ( true ) + { + playfx( level._effect["building_dust"], player getplayercamerapos(), player.angles ); + wait 0.5; + } +} + +buildable_use_hold_think( player, bind_stub = self.stub ) +{ + self thread buildable_play_build_fx( player ); + self thread buildable_use_hold_think_internal( player, bind_stub ); + retval = self waittill_any_return( "build_succeed", "build_failed" ); + + if ( retval == "build_succeed" ) + return true; + + return false; +} + +buildable_place_think() +{ + self endon( "kill_trigger" ); + player_built = undefined; + + while ( !( isdefined( self.stub.built ) && self.stub.built ) ) + { + self waittill( "trigger", player ); + + if ( player != self.parent_player ) + continue; + + if ( isdefined( player.screecher_weapon ) ) + continue; + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + status = player player_can_build( self.stub.buildablezone ); + + if ( !status ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + + if ( isdefined( self.stub.oncantuse ) ) + self.stub [[ self.stub.oncantuse ]]( player ); + } + else + { + if ( isdefined( self.stub.onbeginuse ) ) + self.stub [[ self.stub.onbeginuse ]]( player ); + + result = self buildable_use_hold_think( player ); + team = player.pers["team"]; + + if ( isdefined( self.stub.onenduse ) ) + self.stub [[ self.stub.onenduse ]]( team, player, result ); + + if ( !result ) + continue; + + if ( isdefined( self.stub.onuse ) ) + self.stub [[ self.stub.onuse ]]( player ); + + slot = self.stub.buildablestruct.buildable_slot; + + if ( isdefined( player player_get_buildable_piece( slot ) ) ) + { + prompt = player player_build( self.stub.buildablezone ); + player_built = player; + self.stub.hint_string = prompt; + } + + self sethintstring( self.stub.hint_string ); + } + } + + if ( isdefined( player_built ) ) + { + + } + + switch ( self.stub.persistent ) + { + case 1: + self bptrigger_think_persistent( player_built ); + break; + case 0: + self bptrigger_think_one_time( player_built ); + break; + case 3: + self bptrigger_think_unbuild( player_built ); + break; + case 2: + self bptrigger_think_one_use_and_fly( player_built ); + break; + case 4: + self [[ self.stub.custom_completion_callback ]]( player_built ); + break; + } +} + +bptrigger_think_one_time( player_built ) +{ + self.stub buildablestub_remove(); + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub ); +} + +bptrigger_think_unbuild( player_built ) +{ + stub_unbuild_buildable( self.stub, 1 ); +} + +bptrigger_think_one_use_and_fly( player_built ) +{ + if ( isdefined( player_built ) ) + self buildabletrigger_update_prompt( player_built ); + + if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) + { + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; + self sethintstring( self.stub.hint_string ); + return; + } + + if ( isdefined( self.stub.bought ) && self.stub.bought ) + { + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; + self sethintstring( self.stub.hint_string ); + return; + } + + if ( isdefined( self.stub.model ) ) + { + self.stub.model notsolid(); + self.stub.model show(); + } + + while ( self.stub.persistent == 2 ) + { + self waittill( "trigger", player ); + + if ( isdefined( player.screecher_weapon ) ) + continue; + + if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) + { + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; + self sethintstring( self.stub.hint_string ); + return; + } + + if ( !( isdefined( self.stub.built ) && self.stub.built ) ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + return; + } + + if ( player != self.parent_player ) + continue; + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + self.stub.bought = 1; + + if ( isdefined( self.stub.model ) ) + self.stub.model thread model_fly_away(); + + player maps\mp\zombies\_zm_weapons::weapon_give( self.stub.weaponname ); + + if ( isdefined( level.zombie_include_buildables[self.stub.equipname].onbuyweapon ) ) + self [[ level.zombie_include_buildables[self.stub.equipname].onbuyweapon ]]( player ); + + if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; + else + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; + + self sethintstring( self.stub.hint_string ); + player track_buildables_pickedup( self.stub.weaponname ); + } +} + +bptrigger_think_persistent( player_built ) +{ + if ( !isdefined( player_built ) || self [[ self.stub.prompt_and_visibility_func ]]( player_built ) ) + { + if ( isdefined( self.stub.model ) ) + { + self.stub.model notsolid(); + self.stub.model show(); + } + + while ( self.stub.persistent == 1 ) + { + self waittill( "trigger", player ); + + if ( isdefined( player.screecher_weapon ) ) + continue; + + if ( !( isdefined( self.stub.built ) && self.stub.built ) ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + self setcursorhint( "HINT_NOICON" ); + return; + } + + if ( player != self.parent_player ) + continue; + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + if ( player has_player_equipment( self.stub.weaponname ) ) + continue; + + if ( isdefined( self.stub.buildablestruct.onbought ) ) + self [[ self.stub.buildablestruct.onbought ]]( player ); + else if ( !maps\mp\zombies\_zm_equipment::is_limited_equipment( self.stub.weaponname ) || !maps\mp\zombies\_zm_equipment::limited_equipment_in_use( self.stub.weaponname ) ) + { + player maps\mp\zombies\_zm_equipment::equipment_buy( self.stub.weaponname ); + player giveweapon( self.stub.weaponname ); + player setweaponammoclip( self.stub.weaponname, 1 ); + + if ( isdefined( level.zombie_include_buildables[self.stub.equipname].onbuyweapon ) ) + self [[ level.zombie_include_buildables[self.stub.equipname].onbuyweapon ]]( player ); + + if ( self.stub.weaponname != "keys_zm" ) + player setactionslot( 1, "weapon", self.stub.weaponname ); + + self.stub.cursor_hint = "HINT_NOICON"; + self.stub.cursor_hint_weapon = undefined; + self setcursorhint( self.stub.cursor_hint ); + + if ( isdefined( level.zombie_buildables[self.stub.equipname].bought ) ) + self.stub.hint_string = level.zombie_buildables[self.stub.equipname].bought; + else + self.stub.hint_string = ""; + + self sethintstring( self.stub.hint_string ); + player track_buildables_pickedup( self.stub.weaponname ); + } + else + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + self.stub.cursor_hint = "HINT_NOICON"; + self.stub.cursor_hint_weapon = undefined; + self setcursorhint( self.stub.cursor_hint ); + } + } + } +} + +bptrigger_think_unbuild_no_return( player ) +{ + stub_unbuild_buildable( self.stub, 0 ); +} + +bpstub_set_custom_think_callback( callback ) +{ + self.persistent = 4; + self.custom_completion_callback = callback; +} + +model_fly_away() +{ + self moveto( self.origin + vectorscale( ( 0, 0, 1 ), 40.0 ), 3 ); + direction = self.origin; + direction = ( direction[1], direction[0], 0 ); + + if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 ) + direction = ( direction[0], direction[1] * -1, 0 ); + else if ( direction[0] < 0 ) + direction = ( direction[0] * -1, direction[1], 0 ); + + self vibrate( direction, 10, 0.5, 4 ); + + self waittill( "movedone" ); + + self hide(); + playfx( level._effect["poltergeist"], self.origin ); +} + +find_buildable_stub( equipname ) +{ + foreach ( stub in level.buildable_stubs ) + { + if ( stub.equipname == equipname ) + return stub; + } + + return undefined; +} + +unbuild_buildable( equipname, return_pieces, origin, angles ) +{ + stub = find_buildable_stub( equipname ); + stub_unbuild_buildable( stub, return_pieces, origin, angles ); +} + +stub_unbuild_buildable( stub, return_pieces, origin, angles ) +{ + if ( isdefined( stub ) ) + { + buildable = stub.buildablezone; + buildable.built = 0; + buildable.stub.built = 0; + buildable notify( "unbuilt" ); + level.buildables_built[buildable.buildable_name] = 0; + level notify( buildable.buildable_name + "_unbuilt" ); + + for ( i = 0; i < buildable.pieces.size; i++ ) + { + buildable.pieces[i].built = 0; + + if ( isdefined( buildable.pieces[i].part_name ) ) + { + buildable.stub.model notsolid(); + + if ( !( isdefined( buildable.pieces[i].built ) && buildable.pieces[i].built ) ) + buildable.stub.model hidepart( buildable.pieces[i].part_name ); + else + { + buildable.stub.model show(); + buildable.stub.model showpart( buildable.pieces[i].part_name ); + } + } + + if ( isdefined( return_pieces ) && return_pieces ) + { + if ( isdefined( buildable.stub.str_unbuild_notify ) ) + { + buildable.pieces[i] thread piece_spawn_at_with_notify_delay( origin, angles, buildable.stub.str_unbuild_notify, buildable.stub.unbuild_respawn_fn ); + continue; + } + + buildable.pieces[i] piece_spawn_at( origin, angles ); + } + } + + if ( isdefined( buildable.stub.model ) ) + buildable.stub.model hide(); + } +} + +player_explode_buildable( equipname, origin, speed, return_to_spawn, return_time ) +{ + self explosiondamage( 50, origin ); + stub = find_buildable_stub( equipname ); + + if ( isdefined( stub ) ) + { + buildable = stub.buildablezone; + buildable.built = 0; + buildable.stub.built = 0; + buildable notify( "unbuilt" ); + level.buildables_built[buildable.buildable_name] = 0; + level notify( buildable.buildable_name + "_unbuilt" ); + + for ( i = 0; i < buildable.pieces.size; i++ ) + { + buildable.pieces[i].built = 0; + + if ( isdefined( buildable.pieces[i].part_name ) ) + { + buildable.stub.model notsolid(); + + if ( !( isdefined( buildable.pieces[i].built ) && buildable.pieces[i].built ) ) + buildable.stub.model hidepart( buildable.pieces[i].part_name ); + else + { + buildable.stub.model show(); + buildable.stub.model showpart( buildable.pieces[i].part_name ); + } + } + + ang = randomfloat( 360 ); + h = 0.25 + randomfloat( 0.5 ); + dir = ( sin( ang ), cos( ang ), h ); + self thread player_throw_piece( buildable.pieces[i], origin, speed * dir, return_to_spawn, return_time ); + } + + buildable.stub.model hide(); + } +} + +think_buildables() +{ + foreach ( buildable in level.zombie_include_buildables ) + { + if ( isdefined( buildable.triggerthink ) ) + { + level [[ buildable.triggerthink ]](); + wait_network_frame(); + } + } + + level notify( "buildables_setup" ); +} + +buildable_trigger_think( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + return setup_unitrigger_buildable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); +} + +buildable_trigger_think_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + return setup_unitrigger_buildable_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); +} + +buildable_set_unbuild_notify_delay( str_equipname, str_unbuild_notify, unbuild_respawn_fn ) +{ + stub = find_buildable_stub( str_equipname ); + stub.str_unbuild_notify = str_unbuild_notify; + stub.unbuild_respawn_fn = unbuild_respawn_fn; +} + +setup_vehicle_unitrigger_buildable( parent, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + trig = getent( trigger_targetname, "targetname" ); + + if ( !isdefined( trig ) ) + return; + + unitrigger_stub = spawnstruct(); + unitrigger_stub.buildablestruct = level.zombie_include_buildables[equipname]; + unitrigger_stub.link_parent = parent; + unitrigger_stub.origin_parent = trig; + unitrigger_stub.trigger_targetname = trigger_targetname; + unitrigger_stub.originfunc = ::anystub_get_unitrigger_origin; + unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; + unitrigger_stub.origin = trig.origin; + unitrigger_stub.angles = trig.angles; + unitrigger_stub.equipname = equipname; + unitrigger_stub.weaponname = weaponname; + unitrigger_stub.trigger_hintstring = trigger_hintstring; + unitrigger_stub.delete_trigger = delete_trigger; + unitrigger_stub.built = 0; + unitrigger_stub.persistent = persistent; + unitrigger_stub.usetime = int( 3000 ); + unitrigger_stub.onbeginuse = ::onbeginuseuts; + unitrigger_stub.onenduse = ::onenduseuts; + unitrigger_stub.onuse = ::onuseplantobjectuts; + unitrigger_stub.oncantuse = ::oncantuseuts; + + if ( isdefined( trig.script_length ) ) + unitrigger_stub.script_length = trig.script_length; + else + unitrigger_stub.script_length = 24; + + if ( isdefined( trig.script_width ) ) + unitrigger_stub.script_width = trig.script_width; + else + unitrigger_stub.script_width = 64; + + if ( isdefined( trig.script_height ) ) + unitrigger_stub.script_height = trig.script_height; + else + unitrigger_stub.script_height = 24; + + if ( isdefined( trig.radius ) ) + unitrigger_stub.radius = trig.radius; + else + unitrigger_stub.radius = 64; + + unitrigger_stub.target = trig.target; + unitrigger_stub.targetname = trig.targetname + "_trigger"; + unitrigger_stub.script_noteworthy = trig.script_noteworthy; + unitrigger_stub.script_parameters = trig.script_parameters; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + + if ( isdefined( level.zombie_buildables[equipname].hint ) ) + unitrigger_stub.hint_string = level.zombie_buildables[equipname].hint; + + unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + unitrigger_stub.require_look_at = 1; + unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + unitrigger_stub.prompt_and_visibility_func = ::buildabletrigger_update_prompt; + maps\mp\zombies\_zm_unitrigger::register_unitrigger( unitrigger_stub, ::buildable_place_think ); + unitrigger_stub.piece_trigger = trig; + trig.trigger_stub = unitrigger_stub; + unitrigger_stub.buildablezone = unitrigger_stub buildable_piece_unitriggers( equipname, unitrigger_stub.origin ); + + if ( delete_trigger ) + trig delete(); + + level.buildable_stubs[level.buildable_stubs.size] = unitrigger_stub; + return unitrigger_stub; +} + +vehicle_buildable_trigger_think( vehicle, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) +{ + return setup_vehicle_unitrigger_buildable( vehicle, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); +} + +ai_buildable_trigger_think( parent, equipname, weaponname, trigger_hintstring, persistent ) +{ + unitrigger_stub = spawnstruct(); + unitrigger_stub.buildablestruct = level.zombie_include_buildables[equipname]; + unitrigger_stub.link_parent = parent; + unitrigger_stub.origin_parent = parent; + unitrigger_stub.originfunc = ::anystub_get_unitrigger_origin; + unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; + unitrigger_stub.origin = parent.origin; + unitrigger_stub.angles = parent.angles; + unitrigger_stub.equipname = equipname; + unitrigger_stub.weaponname = weaponname; + unitrigger_stub.trigger_hintstring = trigger_hintstring; + unitrigger_stub.delete_trigger = 1; + unitrigger_stub.built = 0; + unitrigger_stub.persistent = persistent; + unitrigger_stub.usetime = int( 3000 ); + unitrigger_stub.onbeginuse = ::onbeginuseuts; + unitrigger_stub.onenduse = ::onenduseuts; + unitrigger_stub.onuse = ::onuseplantobjectuts; + unitrigger_stub.oncantuse = ::oncantuseuts; + unitrigger_stub.script_length = 64; + unitrigger_stub.script_width = 64; + unitrigger_stub.script_height = 54; + unitrigger_stub.radius = 64; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + + if ( isdefined( level.zombie_buildables[equipname].hint ) ) + unitrigger_stub.hint_string = level.zombie_buildables[equipname].hint; + + unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + unitrigger_stub.require_look_at = 0; + unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + unitrigger_stub.prompt_and_visibility_func = ::buildabletrigger_update_prompt; + maps\mp\zombies\_zm_unitrigger::register_unitrigger( unitrigger_stub, ::buildable_place_think ); + unitrigger_stub.buildablezone = unitrigger_stub buildable_piece_unitriggers( equipname, unitrigger_stub.origin ); + level.buildable_stubs[level.buildable_stubs.size] = unitrigger_stub; + return unitrigger_stub; +} + +onpickuputs( player ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Buildable piece recovered by - " + player.name ); +#/ +} + +ondroputs( player ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Buildable piece dropped by - " + player.name ); +#/ + player notify( "event_ended" ); +} + +onbeginuseuts( player ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Buildable piece begin use by - " + player.name ); +#/ + if ( isdefined( self.buildablestruct.onbeginuse ) ) + self [[ self.buildablestruct.onbeginuse ]]( player ); + + if ( isdefined( player ) && !isdefined( player.buildableaudio ) ) + { + alias = sndbuildableusealias( self.targetname ); + player.buildableaudio = spawn( "script_origin", player.origin ); + player.buildableaudio playloopsound( alias ); + } +} + +sndbuildableusealias( name ) +{ + alias = undefined; + + switch ( name ) + { + case "cell_door_trigger": + alias = "zmb_jail_buildable"; + break; + case "generator_use_trigger": + alias = "zmb_generator_buildable"; + break; + case "chalk_buildable_trigger": + alias = "zmb_chalk_loop"; + break; + default: + alias = "zmb_buildable_loop"; + break; + } + + return alias; +} + +onenduseuts( team, player, result ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Buildable piece end use by - " + player.name ); +#/ + if ( !isdefined( player ) ) + return; + + if ( isdefined( player.buildableaudio ) ) + { + player.buildableaudio delete(); + player.buildableaudio = undefined; + } + + if ( isdefined( self.buildablestruct.onenduse ) ) + self [[ self.buildablestruct.onenduse ]]( team, player, result ); + + player notify( "event_ended" ); +} + +oncantuseuts( player ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Buildable piece can't use by - " + player.name ); +#/ + if ( isdefined( self.buildablestruct.oncantuse ) ) + self [[ self.buildablestruct.oncantuse ]]( player ); +} + +onuseplantobjectuts( player ) +{ +/# + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Buildable piece crafted by - " + player.name ); +#/ + if ( isdefined( self.buildablestruct.onuseplantobject ) ) + self [[ self.buildablestruct.onuseplantobject ]]( player ); + + player notify( "bomb_planted" ); +} + +add_zombie_buildable_vox_category( buildable_name, vox_id ) +{ + buildable_struct = level.zombie_include_buildables[buildable_name]; + buildable_struct.vox_id = vox_id; +} + +add_zombie_buildable_piece_vox_category( buildable_name, vox_id, timer ) +{ + buildable_struct = level.zombie_include_buildables[buildable_name]; + buildable_struct.piece_vox_id = vox_id; + buildable_struct.piece_vox_timer = timer; +} + +is_buildable() +{ + if ( !isdefined( level.zombie_buildables ) ) + return false; + + if ( isdefined( self.zombie_weapon_upgrade ) && isdefined( level.zombie_buildables[self.zombie_weapon_upgrade] ) ) + return true; + + if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "specialty_weapupgrade" ) + { + if ( isdefined( level.buildables_built["pap"] ) && level.buildables_built["pap"] ) + return false; + + return true; + } + + return false; +} + +buildable_crafted() +{ + self.pieces--; +} + +buildable_complete() +{ + if ( self.pieces <= 0 ) + return true; + + return false; +} + +get_buildable_hint( buildable_name ) +{ + assert( isdefined( level.zombie_buildables[buildable_name] ), buildable_name + " was not included or is not part of the zombie weapon list." ); + return level.zombie_buildables[buildable_name].hint; +} + +delete_on_disconnect( buildable, self_notify, skip_delete ) +{ + buildable endon( "death" ); + + self waittill( "disconnect" ); + + if ( isdefined( self_notify ) ) + self notify( self_notify ); + + if ( !( isdefined( skip_delete ) && skip_delete ) ) + { + if ( isdefined( buildable.stub ) ) + { + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( buildable.stub ); + buildable.stub = undefined; + } + + if ( isdefined( buildable ) ) + buildable delete(); + } +} + +get_buildable_pickup( buildablename, modelname ) +{ + foreach ( buildablepickup in level.buildablepickups ) + { + if ( buildablepickup[0].buildablestruct.name == buildablename && buildablepickup[0].visuals[0].model == modelname ) + return buildablepickup[0]; + } + + return undefined; +} + +track_buildable_piece_pickedup( piece ) +{ + if ( !isdefined( piece ) || !isdefined( piece.buildablename ) ) + { +/# + println( "STAT TRACKING FAILURE: NOT DEFINED IN track_buildable_piece_pickedup() \\n" ); +#/ + return; + } + + self add_map_buildable_stat( piece.buildablename, "pieces_pickedup", 1 ); + buildable_struct = level.zombie_include_buildables[piece.buildablename]; + + if ( isdefined( buildable_struct.piece_vox_id ) ) + { + if ( isdefined( self.a_buildable_piece_pickedup_vox_cooldown ) && isinarray( self.a_buildable_piece_pickedup_vox_cooldown, buildable_struct.piece_vox_id ) ) + return; + + self thread do_player_general_vox( "general", buildable_struct.piece_vox_id + "_pickup" ); + + if ( isdefined( buildable_struct.piece_vox_timer ) ) + self thread buildable_piece_pickedup_vox_cooldown( buildable_struct.piece_vox_id, buildable_struct.piece_vox_timer ); + } + else + self thread do_player_general_vox( "general", "build_pickup" ); +} + +buildable_piece_pickedup_vox_cooldown( piece_vox_id, timer ) +{ + self endon( "disconnect" ); + + if ( !isdefined( self.a_buildable_piece_pickedup_vox_cooldown ) ) + self.a_buildable_piece_pickedup_vox_cooldown = []; + + self.a_buildable_piece_pickedup_vox_cooldown[self.a_buildable_piece_pickedup_vox_cooldown.size] = piece_vox_id; + wait( timer ); + arrayremovevalue( self.a_buildable_piece_pickedup_vox_cooldown, piece_vox_id ); +} + +track_buildable_pieces_built( buildable ) +{ + if ( !isdefined( buildable ) || !isdefined( buildable.buildable_name ) ) + { +/# + println( "STAT TRACKING FAILURE: NOT DEFINED IN track_buildable_pieces_built() \\n" ); +#/ + return; + } + + bname = buildable.buildable_name; + + if ( isdefined( buildable.stat_name ) ) + bname = buildable.stat_name; + + self add_map_buildable_stat( bname, "pieces_built", 1 ); + + if ( !buildable buildable_all_built() ) + { + if ( isdefined( level.zombie_include_buildables[buildable.buildable_name] ) && isdefined( level.zombie_include_buildables[buildable.buildable_name].snd_build_add_vo_override ) ) + self thread [[ level.zombie_include_buildables[buildable.buildable_name].snd_build_add_vo_override ]](); + else + self thread do_player_general_vox( "general", "build_add" ); + } +} + +track_buildables_built( buildable ) +{ + if ( !isdefined( buildable ) || !isdefined( buildable.buildable_name ) ) + { +/# + println( "STAT TRACKING FAILURE: NOT DEFINED IN track_buildables_built() \\n" ); +#/ + return; + } + + bname = buildable.buildable_name; + + if ( isdefined( buildable.stat_name ) ) + bname = buildable.stat_name; + + self add_map_buildable_stat( bname, "buildable_built", 1 ); + self maps\mp\zombies\_zm_stats::increment_client_stat( "buildables_built", 0 ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "buildables_built" ); + + if ( isdefined( buildable.stub.buildablestruct.vox_id ) ) + self thread do_player_general_vox( "general", "build_" + buildable.stub.buildablestruct.vox_id + "_final" ); +} + +track_buildables_pickedup( buildable ) +{ + if ( !isdefined( buildable ) ) + { +/# + println( "STAT TRACKING FAILURE: NOT DEFINED IN track_buildables_pickedup() \\n" ); +#/ + return; + } + + stat_name = get_buildable_stat_name( buildable ); + + if ( !isdefined( stat_name ) ) + { +/# + println( "STAT TRACKING FAILURE: NO STAT NAME FOR " + buildable + "\\n" ); +#/ + return; + } + + self add_map_buildable_stat( stat_name, "buildable_pickedup", 1 ); + self say_pickup_buildable_vo( buildable, 0 ); +} + +track_buildables_planted( equipment ) +{ + if ( !isdefined( equipment ) ) + { +/# + println( "STAT TRACKING FAILURE: NOT DEFINED for track_buildables_planted() \\n" ); +#/ + return; + } + + buildable_name = undefined; + + if ( isdefined( equipment.name ) ) + buildable_name = get_buildable_stat_name( equipment.name ); + + if ( !isdefined( buildable_name ) ) + { +/# + println( "STAT TRACKING FAILURE: NO BUILDABLE NAME FOR track_buildables_planted() " + equipment.name + "\\n" ); +#/ + return; + } + + maps\mp\_demo::bookmark( "zm_player_buildable_placed", gettime(), self ); + self add_map_buildable_stat( buildable_name, "buildable_placed", 1 ); + vo_name = "build_plc_" + buildable_name; + + if ( buildable_name == "electric_trap" ) + vo_name = "build_plc_trap"; + + if ( !( isdefined( self.buildable_timer ) && self.buildable_timer ) ) + { + self thread do_player_general_vox( "general", vo_name ); + self thread placed_buildable_vo_timer(); + } +} + +placed_buildable_vo_timer() +{ + self endon( "disconnect" ); + self.buildable_timer = 1; + wait 60; + self.buildable_timer = 0; +} + +buildable_pickedup_timer() +{ + self endon( "disconnect" ); + self.buildable_pickedup_timer = 1; + wait 60; + self.buildable_pickedup_timer = 0; +} + +track_planted_buildables_pickedup( equipment ) +{ + if ( !isdefined( equipment ) ) + return; + + if ( equipment == "equip_turbine_zm" || equipment == "equip_turret_zm" || equipment == "equip_electrictrap_zm" || equipment == "riotshield_zm" ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "planted_buildables_pickedup", 0 ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "planted_buildables_pickedup" ); + } + + if ( !( isdefined( self.buildable_pickedup_timer ) && self.buildable_pickedup_timer ) ) + { + self say_pickup_buildable_vo( equipment, 1 ); + self thread buildable_pickedup_timer(); + } +} + +track_placed_buildables( buildable_name ) +{ + if ( !isdefined( buildable_name ) ) + return; + + self add_map_buildable_stat( buildable_name, "buildable_placed", 1 ); + vo_name = undefined; + + if ( buildable_name == level.riotshield_name ) + vo_name = "build_plc_shield"; + + if ( !isdefined( vo_name ) ) + return; + + self thread do_player_general_vox( "general", vo_name ); +} + +add_map_buildable_stat( piece_name, stat_name, value ) +{ + if ( !isdefined( piece_name ) || piece_name == "sq_common" || piece_name == "keys_zm" || piece_name == "oillamp_zm" ) + return; + + if ( isdefined( level.zm_disable_recording_stats ) && level.zm_disable_recording_stats || isdefined( level.zm_disable_recording_buildable_stats ) && level.zm_disable_recording_buildable_stats ) + return; + + self adddstat( "buildables", piece_name, stat_name, value ); +} + +say_pickup_buildable_vo( buildable_name, world ) +{ + if ( isdefined( self.buildable_pickedup_timer ) && self.buildable_pickedup_timer ) + return; + + name = get_buildable_vo_name( buildable_name ); + + if ( !isdefined( name ) ) + return; + + vo_name = "build_pck_b" + name; + + if ( isdefined( world ) && world ) + vo_name = "build_pck_w" + name; + + if ( !isdefined( level.transit_buildable_vo_override ) || !self [[ level.transit_buildable_vo_override ]]( name, world ) ) + { + self thread do_player_general_vox( "general", vo_name ); + self thread buildable_pickedup_timer(); + } +} + +get_buildable_vo_name( buildable_name ) +{ + switch ( buildable_name ) + { + case "equip_turbine_zm": + return "turbine"; + case "equip_turret_zm": + return "turret"; + case "equip_electrictrap_zm": + return "trap"; + case "riotshield_zm": + return "shield"; + case "jetgun_zm": + return "jetgun"; + case "equip_springpad_zm": + return "springpad_zm"; + case "equip_slipgun_zm": + return "slipgun_zm"; + case "equip_headchopper_zm": + return "headchopper_zm"; + case "equip_subwoofer_zm": + return "subwoofer_zm"; + } + + return undefined; +} + +get_buildable_stat_name( buildable ) +{ + if ( isdefined( buildable ) ) + { + switch ( buildable ) + { + case "equip_turbine_zm": + return "turbine"; + case "equip_turret_zm": + return "turret"; + case "equip_electrictrap_zm": + return "electric_trap"; + case "equip_springpad_zm": + return "springpad_zm"; + case "equip_slipgun_zm": + return "slipgun_zm"; + case "equip_headchopper_zm": + return "headchopper_zm"; + case "equip_subwoofer_zm": + return "subwoofer_zm"; + } + + return undefined; + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_chugabud.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_chugabud.gsc new file mode 100644 index 0000000..0063578 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_chugabud.gsc @@ -0,0 +1,791 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_chugabud; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_clone; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_weap_cymbal_monkey; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm; +#include maps\mp\_visionset_mgr; + +init() +{ + level.chugabud_laststand_func = ::chugabud_laststand; + level thread chugabud_hostmigration(); + level._effect["chugabud_revive_fx"] = loadfx( "weapon/quantum_bomb/fx_player_position_effect" ); + level._effect["chugabud_bleedout_fx"] = loadfx( "weapon/quantum_bomb/fx_player_position_effect" ); + add_custom_limited_weapon_check( ::is_weapon_available_in_chugabud_corpse ); +} + +chugabug_precache() +{ + +} + +chugabud_player_init() +{ + +} + +chugabud_laststand() +{ + self endon( "player_suicide" ); + self endon( "disconnect" ); + self endon( "chugabud_bleedout" ); + self maps\mp\zombies\_zm_laststand::increment_downed_stat(); + self.ignore_insta_kill = 1; + self.health = self.maxhealth; + self maps\mp\zombies\_zm_chugabud::chugabud_save_loadout(); + self maps\mp\zombies\_zm_chugabud::chugabud_fake_death(); + wait 3; + + if ( isdefined( self.insta_killed ) && self.insta_killed || isdefined( self.disable_chugabud_corpse ) ) + create_corpse = 0; + else + create_corpse = 1; + + if ( create_corpse == 1 ) + { + if ( isdefined( level._chugabug_reject_corpse_override_func ) ) + { + reject_corpse = self [[ level._chugabug_reject_corpse_override_func ]]( self.origin ); + + if ( reject_corpse ) + create_corpse = 0; + } + } + + if ( create_corpse == 1 ) + { + self thread activate_chugabud_effects_and_audio(); + corpse = self chugabud_spawn_corpse(); + corpse thread chugabud_corpse_revive_icon( self ); + self.e_chugabud_corpse = corpse; + corpse thread chugabud_corpse_cleanup_on_spectator( self ); + + if ( isdefined( level.whos_who_client_setup ) ) + corpse setclientfield( "clientfield_whos_who_clone_glow_shader", 1 ); + } + + self chugabud_fake_revive(); + wait 0.1; + self.ignore_insta_kill = undefined; + self.disable_chugabud_corpse = undefined; + + if ( create_corpse == 0 ) + { + self notify( "chugabud_effects_cleanup" ); + return; + } + + bleedout_time = getdvarfloat( "player_lastStandBleedoutTime" ); + self thread chugabud_bleed_timeout( bleedout_time, corpse ); + self thread chugabud_handle_multiple_instances( corpse ); + + corpse waittill( "player_revived", e_reviver ); + + if ( isdefined( e_reviver ) && e_reviver == self ) + self notify( "whos_who_self_revive" ); + + self perk_abort_drinking( 0.1 ); + self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); + self setorigin( corpse.origin ); + self setplayerangles( corpse.angles ); + + if ( self player_is_in_laststand() ) + { + self thread chugabud_laststand_cleanup( corpse, "player_revived" ); + self enableweaponcycling(); + self enableoffhandweapons(); + self auto_revive( self, 1 ); + return; + } + + self chugabud_laststand_cleanup( corpse, undefined ); +} + +chugabud_laststand_cleanup( corpse, str_notify ) +{ + if ( isdefined( str_notify ) ) + self waittill( str_notify ); + + self chugabud_give_loadout(); + self chugabud_corpse_cleanup( corpse, 1 ); +} + +chugabud_bleed_timeout( delay, corpse ) +{ + self endon( "player_suicide" ); + self endon( "disconnect" ); + corpse endon( "death" ); + wait( delay ); + + if ( isdefined( corpse.revivetrigger ) ) + { + while ( corpse.revivetrigger.beingrevived ) + wait 0.01; + } + + if ( isdefined( self.loadout.perks ) && flag( "solo_game" ) ) + { + for ( i = 0; i < self.loadout.perks.size; i++ ) + { + perk = self.loadout.perks[i]; + + if ( perk == "specialty_quickrevive" ) + { + arrayremovevalue( self.loadout.perks, self.loadout.perks[i] ); + corpse notify( "player_revived", self ); + return; + } + } + } + + self chugabud_corpse_cleanup( corpse, 0 ); +} + +chugabud_corpse_cleanup( corpse, was_revived ) +{ + self notify( "chugabud_effects_cleanup" ); + + if ( was_revived ) + { + playsoundatposition( "evt_ww_appear", corpse.origin ); + playfx( level._effect["chugabud_revive_fx"], corpse.origin ); + } + else + { + playsoundatposition( "evt_ww_disappear", corpse.origin ); + playfx( level._effect["chugabud_bleedout_fx"], corpse.origin ); + self notify( "chugabud_bleedout" ); + } + + if ( isdefined( corpse.revivetrigger ) ) + { + corpse notify( "stop_revive_trigger" ); + corpse.revivetrigger delete(); + corpse.revivetrigger = undefined; + } + + if ( isdefined( corpse.revive_hud_elem ) ) + { + corpse.revive_hud_elem destroy(); + corpse.revive_hud_elem = undefined; + } + + self.loadout = undefined; + wait 0.1; + corpse delete(); + self.e_chugabud_corpse = undefined; +} + +chugabud_handle_multiple_instances( corpse ) +{ + corpse endon( "death" ); + + self waittill( "perk_chugabud_activated" ); + + self chugabud_corpse_cleanup( corpse, 0 ); +} + +chugabud_spawn_corpse() +{ + corpse = maps\mp\zombies\_zm_clone::spawn_player_clone( self, self.origin, undefined, self.whos_who_shader ); + corpse.angles = self.angles; + corpse maps\mp\zombies\_zm_clone::clone_give_weapon( "m1911_zm" ); + corpse maps\mp\zombies\_zm_clone::clone_animate( "laststand" ); + corpse.revive_hud = self chugabud_revive_hud_create(); + corpse thread maps\mp\zombies\_zm_laststand::revive_trigger_spawn(); + return corpse; +} + +chugabud_revive_hud_create() +{ + self.revive_hud = newclienthudelem( self ); + self.revive_hud.alignx = "center"; + self.revive_hud.aligny = "middle"; + self.revive_hud.horzalign = "center"; + self.revive_hud.vertalign = "bottom"; + self.revive_hud.y = -50; + self.revive_hud.foreground = 1; + self.revive_hud.font = "default"; + self.revive_hud.fontscale = 1.5; + self.revive_hud.alpha = 0; + self.revive_hud.color = ( 1, 1, 1 ); + self.revive_hud settext( "" ); + return self.revive_hud; +} + +chugabud_save_loadout() +{ + primaries = self getweaponslistprimaries(); + currentweapon = self getcurrentweapon(); + self.loadout = spawnstruct(); + self.loadout.player = self; + self.loadout.weapons = []; + self.loadout.score = self.score; + self.loadout.current_weapon = -1; + + foreach ( index, weapon in primaries ) + { + self.loadout.weapons[index] = maps\mp\zombies\_zm_weapons::get_player_weapondata( self, weapon ); + + if ( weapon == currentweapon || self.loadout.weapons[index]["alt_name"] == currentweapon ) + self.loadout.current_weapon = index; + } + + self.loadout.equipment = self get_player_equipment(); + + if ( isdefined( self.loadout.equipment ) ) + self equipment_take( self.loadout.equipment ); + + self.loadout save_weapons_for_chugabud( self ); + + if ( self hasweapon( "claymore_zm" ) ) + { + self.loadout.hasclaymore = 1; + self.loadout.claymoreclip = self getweaponammoclip( "claymore_zm" ); + } + + self.loadout.perks = chugabud_save_perks( self ); + self chugabud_save_grenades(); + + if ( maps\mp\zombies\_zm_weap_cymbal_monkey::cymbal_monkey_exists() ) + self.loadout.zombie_cymbal_monkey_count = self getweaponammoclip( "cymbal_monkey_zm" ); +} + +chugabud_save_grenades() +{ + if ( self hasweapon( "emp_grenade_zm" ) ) + { + self.loadout.hasemp = 1; + self.loadout.empclip = self getweaponammoclip( "emp_grenade_zm" ); + } + + lethal_grenade = self get_player_lethal_grenade(); + + if ( self hasweapon( lethal_grenade ) ) + { + self.loadout.lethal_grenade = lethal_grenade; + self.loadout.lethal_grenade_count = self getweaponammoclip( lethal_grenade ); + } + else + self.loadout.lethal_grenade = undefined; +} + +chugabud_give_loadout() +{ + self takeallweapons(); + loadout = self.loadout; + primaries = self getweaponslistprimaries(); + + if ( loadout.weapons.size > 1 || primaries.size > 1 ) + { + foreach ( weapon in primaries ) + self takeweapon( weapon ); + } + + for ( i = 0; i < loadout.weapons.size; i++ ) + { + if ( !isdefined( loadout.weapons[i] ) ) + continue; + + if ( loadout.weapons[i]["name"] == "none" ) + continue; + + self maps\mp\zombies\_zm_weapons::weapondata_give( loadout.weapons[i] ); + } + + if ( loadout.current_weapon >= 0 && isdefined( loadout.weapons[loadout.current_weapon]["name"] ) ) + self switchtoweapon( loadout.weapons[loadout.current_weapon]["name"] ); + + self giveweapon( "knife_zm" ); + self maps\mp\zombies\_zm_equipment::equipment_give( self.loadout.equipment ); + loadout restore_weapons_for_chugabud( self ); + self chugabud_restore_claymore(); + self.score = loadout.score; + self.pers["score"] = loadout.score; + perk_array = maps\mp\zombies\_zm_perks::get_perk_array( 1 ); + + for ( i = 0; i < perk_array.size; i++ ) + { + perk = perk_array[i]; + self unsetperk( perk ); + self.num_perks--; + self set_perk_clientfield( perk, 0 ); + } + + if ( isdefined( loadout.perks ) && loadout.perks.size > 0 ) + { + for ( i = 0; i < loadout.perks.size; i++ ) + { + if ( self hasperk( loadout.perks[i] ) ) + continue; + + if ( loadout.perks[i] == "specialty_quickrevive" && flag( "solo_game" ) ) + level.solo_game_free_player_quickrevive = 1; + + if ( loadout.perks[i] == "specialty_finalstand" ) + continue; + + maps\mp\zombies\_zm_perks::give_perk( loadout.perks[i] ); + } + } + + self chugabud_restore_grenades(); + + if ( maps\mp\zombies\_zm_weap_cymbal_monkey::cymbal_monkey_exists() ) + { + if ( loadout.zombie_cymbal_monkey_count ) + { + self maps\mp\zombies\_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); + self setweaponammoclip( "cymbal_monkey_zm", loadout.zombie_cymbal_monkey_count ); + } + } +} + +chugabud_restore_grenades() +{ + if ( isdefined( self.loadout.hasemp ) && self.loadout.hasemp ) + { + self giveweapon( "emp_grenade_zm" ); + self setweaponammoclip( "emp_grenade_zm", self.loadout.empclip ); + } + + if ( isdefined( self.loadout.lethal_grenade ) ) + { + self giveweapon( self.loadout.lethal_grenade ); + self setweaponammoclip( self.loadout.lethal_grenade, self.loadout.lethal_grenade_count ); + } +} + +chugabud_restore_claymore() +{ + if ( isdefined( self.loadout.hasclaymore ) && self.loadout.hasclaymore && !self hasweapon( "claymore_zm" ) ) + { + self giveweapon( "claymore_zm" ); + self set_player_placeable_mine( "claymore_zm" ); + self setactionslot( 4, "weapon", "claymore_zm" ); + self setweaponammoclip( "claymore_zm", self.loadout.claymoreclip ); + } +} + +chugabud_fake_death() +{ + level notify( "fake_death" ); + self notify( "fake_death" ); + self takeallweapons(); + self allowstand( 0 ); + self allowcrouch( 0 ); + self allowprone( 1 ); + self.ignoreme = 1; + self enableinvulnerability(); + wait 0.1; + self freezecontrols( 1 ); + wait 0.9; +} + +chugabud_fake_revive() +{ + level notify( "fake_revive" ); + self notify( "fake_revive" ); + playsoundatposition( "evt_ww_disappear", self.origin ); + playfx( level._effect["chugabud_revive_fx"], self.origin ); + spawnpoint = chugabud_get_spawnpoint(); + + if ( isdefined( level._chugabud_post_respawn_override_func ) ) + self [[ level._chugabud_post_respawn_override_func ]]( spawnpoint.origin ); + + if ( isdefined( level.chugabud_force_corpse_position ) ) + { + if ( isdefined( self.e_chugabud_corpse ) ) + self.e_chugabud_corpse forceteleport( level.chugabud_force_corpse_position ); + + level.chugabud_force_corpse_position = undefined; + } + + if ( isdefined( level.chugabud_force_player_position ) ) + { + spawnpoint.origin = level.chugabud_force_player_position; + level.chugabud_force_player_position = undefined; + } + + self setorigin( spawnpoint.origin ); + self setplayerangles( spawnpoint.angles ); + playsoundatposition( "evt_ww_appear", spawnpoint.origin ); + playfx( level._effect["chugabud_revive_fx"], spawnpoint.origin ); + self allowstand( 1 ); + self allowcrouch( 1 ); + self allowprone( 1 ); + self.ignoreme = 0; + self setstance( "stand" ); + self freezecontrols( 0 ); + self giveweapon( "knife_zm" ); + self give_start_weapon( 1 ); + self.score = self.loadout.score; + self.pers["score"] = self.loadout.score; + self giveweapon( "frag_grenade_zm" ); + self setweaponammoclip( "frag_grenade_zm", 2 ); + self chugabud_restore_claymore(); + wait 1; + self disableinvulnerability(); +} + +chugabud_get_spawnpoint() +{ + spawnpoint = undefined; + + if ( get_chugabug_spawn_point_from_nodes( self.origin, 500, 700, 64, 1 ) ) + spawnpoint = level.chugabud_spawn_struct; + + if ( !isdefined( spawnpoint ) ) + { + if ( get_chugabug_spawn_point_from_nodes( self.origin, 100, 400, 64, 1 ) ) + spawnpoint = level.chugabud_spawn_struct; + } + + if ( !isdefined( spawnpoint ) ) + { + if ( get_chugabug_spawn_point_from_nodes( self.origin, 50, 400, 256, 0 ) ) + spawnpoint = level.chugabud_spawn_struct; + } + + if ( !isdefined( spawnpoint ) ) + spawnpoint = maps\mp\zombies\_zm::check_for_valid_spawn_near_team( self, 1 ); + + if ( !isdefined( spawnpoint ) ) + { + match_string = ""; + location = level.scr_zm_map_start_location; + + if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) ) + location = level.default_start_location; + + match_string = level.scr_zm_ui_gametype + "_" + location; + spawnpoints = []; + structs = getstructarray( "initial_spawn", "script_noteworthy" ); + + if ( isdefined( structs ) ) + { + foreach ( struct in structs ) + { + if ( isdefined( struct.script_string ) ) + { + tokens = strtok( struct.script_string, " " ); + + foreach ( token in tokens ) + { + if ( token == match_string ) + spawnpoints[spawnpoints.size] = struct; + } + } + } + } + + if ( !isdefined( spawnpoints ) || spawnpoints.size == 0 ) + spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); + + assert( isdefined( spawnpoints ), "Could not find initial spawn points!" ); + spawnpoint = maps\mp\zombies\_zm::getfreespawnpoint( spawnpoints, self ); + } + + return spawnpoint; +} + +get_chugabug_spawn_point_from_nodes( v_origin, min_radius, max_radius, max_height, ignore_targetted_nodes ) +{ + if ( !isdefined( level.chugabud_spawn_struct ) ) + level.chugabud_spawn_struct = spawnstruct(); + + found_node = undefined; + a_nodes = getnodesinradiussorted( v_origin, max_radius, min_radius, max_height, "pathnodes" ); + + if ( isdefined( a_nodes ) && a_nodes.size > 0 ) + { + a_player_volumes = getentarray( "player_volume", "script_noteworthy" ); + index = a_nodes.size - 1; + + for ( i = index; i >= 0; i-- ) + { + n_node = a_nodes[i]; + + if ( ignore_targetted_nodes == 1 ) + { + if ( isdefined( n_node.target ) ) + continue; + } + + if ( !positionwouldtelefrag( n_node.origin ) ) + { + if ( maps\mp\zombies\_zm_utility::check_point_in_enabled_zone( n_node.origin, 1, a_player_volumes ) ) + { + v_start = ( n_node.origin[0], n_node.origin[1], n_node.origin[2] + 30 ); + v_end = ( n_node.origin[0], n_node.origin[1], n_node.origin[2] - 30 ); + trace = bullettrace( v_start, v_end, 0, undefined ); + + if ( trace["fraction"] < 1 ) + { + override_abort = 0; + + if ( isdefined( level._chugabud_reject_node_override_func ) ) + override_abort = [[ level._chugabud_reject_node_override_func ]]( v_origin, n_node ); + + if ( !override_abort ) + { + found_node = n_node; + break; + } + } + } + } + } + } + + if ( isdefined( found_node ) ) + { + level.chugabud_spawn_struct.origin = found_node.origin; + v_dir = vectornormalize( v_origin - level.chugabud_spawn_struct.origin ); + level.chugabud_spawn_struct.angles = vectortoangles( v_dir ); + return true; + } + + return false; +} + +force_corpse_respawn_position( forced_corpse_position ) +{ + level.chugabud_force_corpse_position = forced_corpse_position; +} + +force_player_respawn_position( forced_player_position ) +{ + level.chugabud_force_player_position = forced_player_position; +} + +save_weapons_for_chugabud( player ) +{ + self.chugabud_melee_weapons = []; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + self save_weapon_for_chugabud( player, level._melee_weapons[i].weapon_name ); +} + +save_weapon_for_chugabud( player, weapon_name ) +{ + if ( player hasweapon( weapon_name ) ) + self.chugabud_melee_weapons[weapon_name] = 1; +} + +restore_weapons_for_chugabud( player ) +{ + for ( i = 0; i < level._melee_weapons.size; i++ ) + self restore_weapon_for_chugabud( player, level._melee_weapons[i].weapon_name ); + + self.chugabud_melee_weapons = undefined; +} + +restore_weapon_for_chugabud( player, weapon_name ) +{ + if ( !isdefined( weapon_name ) || !isdefined( self.chugabud_melee_weapons ) || !isdefined( self.chugabud_melee_weapons[weapon_name] ) ) + return; + + if ( isdefined( self.chugabud_melee_weapons[weapon_name] ) && self.chugabud_melee_weapons[weapon_name] ) + { + player giveweapon( weapon_name ); + player set_player_melee_weapon( weapon_name ); + self.chugabud_melee_weapons[weapon_name] = 0; + } +} + +chugabud_save_perks( ent ) +{ + perk_array = ent get_perk_array( 1 ); + + foreach ( perk in perk_array ) + ent unsetperk( perk ); + + return perk_array; +} + +playchugabudtimeraudio() +{ + self endon( "chugabud_grabbed" ); + self endon( "chugabud_timedout" ); + player = self.player; + self thread playchugabudtimerout( player ); + + while ( true ) + { + player playsoundtoplayer( "zmb_chugabud_timer_count", player ); + wait 1; + } +} + +playchugabudtimerout( player ) +{ + self endon( "chugabud_grabbed" ); + + self waittill( "chugabud_timedout" ); + + player playsoundtoplayer( "zmb_chugabud_timer_out", player ); +} + +chugabud_hostmigration() +{ + level endon( "end_game" ); + level notify( "chugabud_hostmigration" ); + level endon( "chugabud_hostmigration" ); + + while ( true ) + { + level waittill( "host_migration_end" ); + + chugabuds = getentarray( "player_chugabud_model", "script_noteworthy" ); + + foreach ( model in chugabuds ) + playfxontag( level._effect["powerup_on"], model, "tag_origin" ); + } +} + +player_revived_cleanup_chugabud_corpse() +{ + +} + +player_has_chugabud_corpse() +{ + if ( isdefined( self.e_chugabud_corpse ) ) + return true; + + return false; +} + +is_weapon_available_in_chugabud_corpse( weapon, player_to_check ) +{ + count = 0; + upgradedweapon = weapon; + + if ( isdefined( level.zombie_weapons[weapon] ) && isdefined( level.zombie_weapons[weapon].upgrade_name ) ) + upgradedweapon = level.zombie_weapons[weapon].upgrade_name; + + players = getplayers(); + + if ( isdefined( players ) ) + { + for ( player_index = 0; player_index < players.size; player_index++ ) + { + player = players[player_index]; + + if ( isdefined( player_to_check ) && player != player_to_check ) + continue; + + if ( player player_has_chugabud_corpse() ) + { + if ( isdefined( player.loadout ) && isdefined( player.loadout.weapons ) ) + { + for ( i = 0; i < player.loadout.weapons.size; i++ ) + { + chugabud_weapon = player.loadout.weapons[i]; + + if ( isdefined( chugabud_weapon ) && ( chugabud_weapon["name"] == weapon || chugabud_weapon["name"] == upgradedweapon ) ) + count++; + } + } + } + } + } + + return count; +} + +chugabud_corpse_cleanup_on_spectator( player ) +{ + self endon( "death" ); + player endon( "disconnect" ); + + while ( true ) + { + if ( player.sessionstate == "spectator" ) + break; + + wait 0.01; + } + + player chugabud_corpse_cleanup( self, 0 ); +} + +chugabud_corpse_revive_icon( player ) +{ + self endon( "death" ); + height_offset = 30; + index = player.clientid; + hud_elem = newhudelem(); + self.revive_hud_elem = hud_elem; + hud_elem.x = self.origin[0]; + hud_elem.y = self.origin[1]; + hud_elem.z = self.origin[2] + height_offset; + hud_elem.alpha = 1; + hud_elem.archived = 1; + hud_elem setshader( "waypoint_revive", 5, 5 ); + hud_elem setwaypoint( 1 ); + hud_elem.hidewheninmenu = 1; + hud_elem.immunetodemogamehudsettings = 1; + + while ( true ) + { + if ( !isdefined( self.revive_hud_elem ) ) + break; + + hud_elem.x = self.origin[0]; + hud_elem.y = self.origin[1]; + hud_elem.z = self.origin[2] + height_offset; + wait 0.01; + } +} + +activate_chugabud_effects_and_audio() +{ + if ( isdefined( level.whos_who_client_setup ) ) + { + if ( !isdefined( self.whos_who_effects_active ) ) + { + if ( isdefined( level.chugabud_shellshock ) ) + self shellshock( "whoswho", 60 ); + + if ( isdefined( level.vsmgr_prio_visionset_zm_whos_who ) ) + maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_whos_who", self ); + + self setclientfieldtoplayer( "clientfield_whos_who_audio", 1 ); + self setclientfieldtoplayer( "clientfield_whos_who_filter", 1 ); + self.whos_who_effects_active = 1; + self thread deactivate_chugabud_effects_and_audio(); + } + } +} + +deactivate_chugabud_effects_and_audio() +{ + self waittill_any( "death", "chugabud_effects_cleanup" ); + + if ( isdefined( level.whos_who_client_setup ) ) + { + if ( isdefined( self.whos_who_effects_active ) && self.whos_who_effects_active == 1 ) + { + if ( isdefined( level.chugabud_shellshock ) ) + self stopshellshock(); + + if ( isdefined( level.vsmgr_prio_visionset_zm_whos_who ) ) + maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_whos_who", self ); + + self setclientfieldtoplayer( "clientfield_whos_who_audio", 0 ); + self setclientfieldtoplayer( "clientfield_whos_who_filter", 0 ); + } + + self.whos_who_effects_active = undefined; + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_clone.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_clone.gsc new file mode 100644 index 0000000..dfabc22 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_clone.gsc @@ -0,0 +1,134 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; + +init() +{ + init_mover_tree(); +} + +spawn_player_clone( player, origin = player.origin, forceweapon, forcemodel ) +{ + primaryweapons = player getweaponslistprimaries(); + + if ( isdefined( forceweapon ) ) + weapon = forceweapon; + else if ( primaryweapons.size ) + weapon = primaryweapons[0]; + else + weapon = player getcurrentweapon(); + + weaponmodel = getweaponmodel( weapon ); + spawner = getent( "fake_player_spawner", "targetname" ); + + if ( isdefined( spawner ) ) + { + clone = spawner spawnactor(); + clone.origin = origin; + clone.isactor = 1; + } + else + { + clone = spawn( "script_model", origin ); + clone.isactor = 0; + } + + if ( isdefined( forcemodel ) ) + clone setmodel( forcemodel ); + else + { + clone setmodel( self.model ); + + if ( isdefined( player.headmodel ) ) + { + clone.headmodel = player.headmodel; + clone attach( clone.headmodel, "", 1 ); + } + } + + if ( weaponmodel != "" && weaponmodel != "none" ) + clone attach( weaponmodel, "tag_weapon_right" ); + + clone.team = player.team; + clone.is_inert = 1; + clone.zombie_move_speed = "walk"; + clone.script_noteworthy = "corpse_clone"; + clone.actor_damage_func = ::clone_damage_func; + return clone; +} + +clone_damage_func( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + idamage = 0; + + if ( sweapon == "knife_ballistic_upgraded_zm" || sweapon == "knife_ballistic_bowie_upgraded_zm" || sweapon == "knife_ballistic_no_melee_upgraded_zm" || sweapon == "knife_ballistic_sickle_upgraded_zm" ) + self notify( "player_revived", eattacker ); + + return idamage; +} + +clone_give_weapon( weapon ) +{ + weaponmodel = getweaponmodel( weapon ); + + if ( weaponmodel != "" && weaponmodel != "none" ) + self attach( weaponmodel, "tag_weapon_right" ); +} + +clone_animate( animtype ) +{ + if ( self.isactor ) + self thread clone_actor_animate( animtype ); + else + self thread clone_mover_animate( animtype ); +} + +clone_actor_animate( animtype ) +{ + wait 0.1; + + switch ( animtype ) + { + case "laststand": + self setanimstatefromasd( "laststand" ); + break; + case "idle": + default: + self setanimstatefromasd( "idle" ); + break; + } +} + +#using_animtree("zm_ally"); + +init_mover_tree() +{ + scriptmodelsuseanimtree( #animtree ); +} + +clone_mover_animate( animtype ) +{ + self useanimtree( #animtree ); + + switch ( animtype ) + { + case "laststand": + self setanim( %pb_laststand_idle ); + break; + case "afterlife": + self setanim( %pb_afterlife_laststand_idle ); + break; + case "chair": + self setanim( %ai_actor_elec_chair_idle ); + break; + case "falling": + self setanim( %pb_falling_loop ); + break; + case "idle": + default: + self setanim( %pb_stand_alert ); + break; + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_devgui.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_devgui.gsc new file mode 100644 index 0000000..eddded2 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_devgui.gsc @@ -0,0 +1,2259 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_turned; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_weap_claymore; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_laststand; + +init() +{ +/# + setdvar( "zombie_devgui", "" ); + setdvar( "scr_force_weapon", "" ); + setdvar( "scr_zombie_round", "1" ); + setdvar( "scr_zombie_dogs", "1" ); + setdvar( "scr_spawn_tesla", "" ); + setdvar( "scr_force_quantum_bomb_result", "" ); + level.devgui_add_weapon = ::devgui_add_weapon; + level.devgui_add_ability = ::devgui_add_ability; + level thread zombie_devgui_think(); + thread zombie_devgui_player_commands(); + thread diable_fog_in_noclip(); + thread zombie_weapon_devgui_think(); + thread devgui_zombie_healthbar(); +#/ +} + +zombie_devgui_player_commands() +{ +/# + flag_wait( "start_zombie_round_logic" ); + wait 1; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + ip1 = i + 1; + adddebugcommand( "devgui_cmd \"Zombies:1/Players:1/Player:1/" + players[i].name + "/Give Money:1\" \"set zombie_devgui player" + ip1 + "_money\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Players:1/Player:1/" + players[i].name + "/Invulnerable:2\" \"set zombie_devgui player" + ip1 + "_invul_on\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Players:1/Player:1/" + players[i].name + "/Vulnerable:3\" \"set zombie_devgui player" + ip1 + "_invul_off\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Players:1/Player:1/" + players[i].name + "/Toggle Ignored:4\" \"set zombie_devgui player" + ip1 + "_ignore\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Players:1/Player:1/" + players[i].name + "/Mega Health:5\" \"set zombie_devgui player" + ip1 + "_health\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Players:1/Player:1/" + players[i].name + "/Down:6\" \"set zombie_devgui player" + ip1 + "_kill\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Players:1/Player:1/" + players[i].name + "/Revive:7\" \"set zombie_devgui player" + ip1 + "_revive\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Players:1/Player:1/" + players[i].name + "/Turn Player:8\" \"set zombie_devgui player" + ip1 + "_turnplayer\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Players:1/Player:1/" + players[i].name + "/Debug Pers:9\" \"set zombie_devgui player" + ip1 + "_debug_pers\" \\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Players:1/Player:1/" + players[i].name + "/Take Money:10\" \"set zombie_devgui player" + ip1 + "_moneydown\" \\n" ); + } +#/ +} + +devgui_add_weapon_entry( hint, up, weapon_name, root ) +{ +/# + rootslash = ""; + + if ( isdefined( root ) && root.size ) + rootslash = root + "/"; + + uppath = "/" + up; + + if ( up.size < 1 ) + uppath = ""; + + cmd = "devgui_cmd \"Zombies:1/Weapons:10/" + rootslash + hint + uppath + "\" \"set zombie_devgui_gun " + weapon_name + "\" \\n"; + adddebugcommand( cmd ); +#/ +} + +devgui_add_weapon_and_attachments( hint, up, weapon_name, root ) +{ +/# + devgui_add_weapon_entry( hint, up, weapon_name, root ); +#/ +} + +devgui_add_weapon( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp, ammo_cost ) +{ +/# + if ( is_offhand_weapon( weapon_name ) && !is_melee_weapon( weapon_name ) ) + return; + + if ( !isdefined( level.devgui_weapons_added ) ) + level.devgui_weapons_added = 0; + + level.devgui_weapons_added++; + + if ( is_melee_weapon( weapon_name ) ) + devgui_add_weapon_and_attachments( weapon_name, "", weapon_name, "Melee:8" ); + else + devgui_add_weapon_and_attachments( weapon_name, "", weapon_name, "" ); +#/ +} + +zombie_weapon_devgui_think() +{ +/# + level.zombie_devgui_gun = getdvar( _hash_CE4F9F97 ); + level.zombie_devgui_att = getdvar( _hash_A965F402 ); + + for (;;) + { + wait 0.25; + cmd = getdvar( _hash_CE4F9F97 ); + + if ( !isdefined( level.zombie_devgui_gun ) || level.zombie_devgui_gun != cmd ) + { + level.zombie_devgui_gun = cmd; + array_thread( get_players(), ::zombie_devgui_weapon_give, level.zombie_devgui_gun ); + } + + wait 0.25; + att = getdvar( _hash_A965F402 ); + + if ( !isdefined( level.zombie_devgui_att ) || level.zombie_devgui_att != att ) + { + level.zombie_devgui_att = att; + array_thread( get_players(), ::zombie_devgui_attachment_give, level.zombie_devgui_att ); + } + } +#/ +} + +zombie_devgui_weapon_give( gun ) +{ +/# + self maps\mp\zombies\_zm_weapons::weapon_give( gun, is_weapon_upgraded( gun ), 0 ); +#/ +} + +zombie_devgui_attachment_give( gun ) +{ +/# + newgun = maps\mp\zombies\_zm_weapons::get_base_name( self getcurrentweapon() ) + "+" + gun; + self maps\mp\zombies\_zm_weapons::weapon_give( newgun, is_weapon_upgraded( gun ), 0 ); +#/ +} + +devgui_add_ability( name, upgrade_active_func, stat_name, stat_desired_value, game_end_reset_if_not_achieved ) +{ +/# + online_game = sessionmodeisonlinegame(); + + if ( !online_game ) + return; + + if ( !is_true( level.devgui_watch_abilities ) ) + { + cmd = "devgui_cmd \"Zombies:1/Players:1/Abilities:3/Disable All:1\" \"set zombie_devgui_give_ability _disable\" \\n"; + adddebugcommand( cmd ); + cmd = "devgui_cmd \"Zombies:1/Players:1/Abilities:3/Enable All:2\" \"set zombie_devgui_give_ability _enable\" \\n"; + adddebugcommand( cmd ); + level thread zombie_ability_devgui_think(); + level.devgui_watch_abilities = 1; + } + + cmd = "devgui_cmd \"Zombies:1/Players:1/Abilities:3/" + name + "\" \"set zombie_devgui_give_ability " + name + "\" \\n"; + adddebugcommand( cmd ); + cmd = "devgui_cmd \"Zombies:1/Players:1/Abilities:3/Take:3/" + name + "\" \"set zombie_devgui_take_ability " + name + "\" \\n"; + adddebugcommand( cmd ); +#/ +} + +zombie_devgui_ability_give( name ) +{ +/# + pers_upgrade = level.pers_upgrades[name]; + + if ( isdefined( pers_upgrade ) ) + { + for ( i = 0; i < pers_upgrade.stat_names.size; i++ ) + { + stat_name = pers_upgrade.stat_names[i]; + stat_value = pers_upgrade.stat_desired_values[i]; + self maps\mp\zombies\_zm_stats::set_global_stat( stat_name, stat_value ); + self.pers_upgrade_force_test = 1; + } + } +#/ +} + +zombie_devgui_ability_take( name ) +{ +/# + pers_upgrade = level.pers_upgrades[name]; + + if ( isdefined( pers_upgrade ) ) + { + for ( i = 0; i < pers_upgrade.stat_names.size; i++ ) + { + stat_name = pers_upgrade.stat_names[i]; + stat_value = 0; + self maps\mp\zombies\_zm_stats::set_global_stat( stat_name, stat_value ); + self.pers_upgrade_force_test = 1; + } + } +#/ +} + +zombie_ability_devgui_think() +{ +/# + level.zombie_devgui_give_ability = getdvar( _hash_E2245F05 ); + level.zombie_devgui_take_ability = getdvar( _hash_726367F ); + + for (;;) + { + wait 0.25; + cmd = getdvar( _hash_E2245F05 ); + + if ( !isdefined( level.zombie_devgui_give_ability ) || level.zombie_devgui_give_ability != cmd ) + { + if ( cmd == "_disable" ) + flag_set( "sq_minigame_active" ); + else if ( cmd == "_enable" ) + flag_clear( "sq_minigame_active" ); + else + { + level.zombie_devgui_give_ability = cmd; + array_thread( get_players(), ::zombie_devgui_ability_give, level.zombie_devgui_give_ability ); + } + } + + wait 0.25; + cmd = getdvar( _hash_726367F ); + + if ( !isdefined( level.zombie_devgui_take_ability ) || level.zombie_devgui_take_ability != cmd ) + { + level.zombie_devgui_take_ability = cmd; + array_thread( get_players(), ::zombie_devgui_ability_take, level.zombie_devgui_take_ability ); + } + } +#/ +} + +zombie_healthbar( pos, dsquared ) +{ +/# + if ( distancesquared( pos, self.origin ) > dsquared ) + return; + + rate = 1; + + if ( isdefined( self.maxhealth ) ) + rate = self.health / self.maxhealth; + + color = ( 1 - rate, rate, 0 ); + text = "" + int( self.health ); + print3d( self.origin + ( 0, 0, 0 ), text, color, 1, 0.5, 1 ); +#/ +} + +devgui_zombie_healthbar() +{ +/# + while ( true ) + { + if ( getdvarint( _hash_5B45DCAF ) == 1 ) + { + lp = get_players()[0]; + zombies = getaispeciesarray( "all", "all" ); + + if ( isdefined( zombies ) ) + { + foreach ( zombie in zombies ) + zombie zombie_healthbar( lp.origin, 360000 ); + } + } + + wait 0.05; + } +#/ +} + +zombie_devgui_watch_input() +{ +/# + flag_wait( "start_zombie_round_logic" ); + wait 1; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] thread watch_debug_input(); +#/ +} + +damage_player() +{ +/# + self disableinvulnerability(); + self dodamage( self.health / 2, self.origin ); +#/ +} + +kill_player() +{ +/# + self disableinvulnerability(); + death_from = ( randomfloatrange( -20, 20 ), randomfloatrange( -20, 20 ), randomfloatrange( -20, 20 ) ); + self dodamage( self.health + 666, self.origin + death_from ); +#/ +} + +force_drink() +{ +/# + wait 0.01; + lean = self allowlean( 0 ); + ads = self allowads( 0 ); + sprint = self allowsprint( 0 ); + crouch = self allowcrouch( 1 ); + prone = self allowprone( 0 ); + melee = self allowmelee( 0 ); + self increment_is_drinking(); + orgweapon = self getcurrentweapon(); + self giveweapon( "zombie_builder_zm" ); + self switchtoweapon( "zombie_builder_zm" ); + self.build_time = self.usetime; + self.build_start_time = gettime(); + wait 2; + self maps\mp\zombies\_zm_weapons::switch_back_primary_weapon( orgweapon ); + self takeweapon( "zombie_builder_zm" ); + + if ( is_true( self.is_drinking ) ) + self decrement_is_drinking(); + + self allowlean( lean ); + self allowads( ads ); + self allowsprint( sprint ); + self allowprone( prone ); + self allowcrouch( crouch ); + self allowmelee( melee ); +#/ +} + +zombie_devgui_dpad_none() +{ +/# + self thread watch_debug_input(); +#/ +} + +zombie_devgui_dpad_death() +{ +/# + self thread watch_debug_input( ::kill_player ); +#/ +} + +zombie_devgui_dpad_damage() +{ +/# + self thread watch_debug_input( ::damage_player ); +#/ +} + +zombie_devgui_dpad_changeweapon() +{ +/# + self thread watch_debug_input( ::force_drink ); +#/ +} + +watch_debug_input( callback ) +{ +/# + self endon( "disconnect" ); + self notify( "watch_debug_input" ); + self endon( "watch_debug_input" ); + level.devgui_dpad_watch = 0; + + if ( isdefined( callback ) ) + { + level.devgui_dpad_watch = 1; + + for (;;) + { + if ( self actionslottwobuttonpressed() ) + { + self thread [[ callback ]](); + + while ( self actionslottwobuttonpressed() ) + wait 0.05; + } + + wait 0.05; + } + } +#/ +} + +zombie_devgui_think() +{ +/# + for (;;) + { + cmd = getdvar( "zombie_devgui" ); + + switch ( cmd ) + { + case "money": + players = get_players(); + array_thread( players, ::zombie_devgui_give_money ); + break; + case "player1_money": + players = get_players(); + + if ( players.size >= 1 ) + players[0] thread zombie_devgui_give_money(); + + break; + case "player2_money": + players = get_players(); + + if ( players.size >= 2 ) + players[1] thread zombie_devgui_give_money(); + + break; + case "player3_money": + players = get_players(); + + if ( players.size >= 3 ) + players[2] thread zombie_devgui_give_money(); + + break; + case "player4_money": + players = get_players(); + + if ( players.size >= 4 ) + players[3] thread zombie_devgui_give_money(); + + break; + case "moneydown": + players = get_players(); + array_thread( players, ::zombie_devgui_take_money ); + break; + case "player1_moneydown": + players = get_players(); + + if ( players.size >= 1 ) + players[0] thread zombie_devgui_take_money(); + + break; + case "player2_moneydown": + players = get_players(); + + if ( players.size >= 2 ) + players[1] thread zombie_devgui_take_money(); + + break; + case "player3_moneydown": + players = get_players(); + + if ( players.size >= 3 ) + players[2] thread zombie_devgui_take_money(); + + break; + case "player4_moneydown": + players = get_players(); + + if ( players.size >= 4 ) + players[3] thread zombie_devgui_take_money(); + + break; + case "health": + array_thread( get_players(), ::zombie_devgui_give_health ); + break; + case "player1_health": + players = get_players(); + + if ( players.size >= 1 ) + players[0] thread zombie_devgui_give_health(); + + break; + case "player2_health": + players = get_players(); + + if ( players.size >= 2 ) + players[1] thread zombie_devgui_give_health(); + + break; + case "player3_health": + players = get_players(); + + if ( players.size >= 3 ) + players[2] thread zombie_devgui_give_health(); + + break; + case "player4_health": + players = get_players(); + + if ( players.size >= 4 ) + players[3] thread zombie_devgui_give_health(); + + break; + case "ammo": + array_thread( get_players(), ::zombie_devgui_toggle_ammo ); + break; + case "ignore": + array_thread( get_players(), ::zombie_devgui_toggle_ignore ); + break; + case "player1_ignore": + players = get_players(); + + if ( players.size >= 1 ) + players[0] thread zombie_devgui_toggle_ignore(); + + break; + case "player2_ignore": + players = get_players(); + + if ( players.size >= 2 ) + players[1] thread zombie_devgui_toggle_ignore(); + + break; + case "player3_ignore": + players = get_players(); + + if ( players.size >= 3 ) + players[2] thread zombie_devgui_toggle_ignore(); + + break; + case "player4_ignore": + players = get_players(); + + if ( players.size >= 4 ) + players[3] thread zombie_devgui_toggle_ignore(); + + break; + case "invul_on": + zombie_devgui_invulnerable( undefined, 1 ); + break; + case "invul_off": + zombie_devgui_invulnerable( undefined, 0 ); + break; + case "player1_invul_on": + zombie_devgui_invulnerable( 0, 1 ); + break; + case "player1_invul_off": + zombie_devgui_invulnerable( 0, 0 ); + break; + case "player2_invul_on": + zombie_devgui_invulnerable( 1, 1 ); + break; + case "player2_invul_off": + zombie_devgui_invulnerable( 1, 0 ); + break; + case "player3_invul_on": + zombie_devgui_invulnerable( 2, 1 ); + break; + case "player3_invul_off": + zombie_devgui_invulnerable( 2, 0 ); + break; + case "player4_invul_on": + zombie_devgui_invulnerable( 3, 1 ); + break; + case "player4_invul_off": + zombie_devgui_invulnerable( 3, 0 ); + break; + case "revive_all": + array_thread( get_players(), ::zombie_devgui_revive ); + break; + case "player1_revive": + players = get_players(); + + if ( players.size >= 1 ) + players[0] thread zombie_devgui_revive(); + + break; + case "player2_revive": + players = get_players(); + + if ( players.size >= 2 ) + players[1] thread zombie_devgui_revive(); + + break; + case "player3_revive": + players = get_players(); + + if ( players.size >= 3 ) + players[2] thread zombie_devgui_revive(); + + break; + case "player4_revive": + players = get_players(); + + if ( players.size >= 4 ) + players[3] thread zombie_devgui_revive(); + + break; + case "player1_kill": + players = get_players(); + + if ( players.size >= 1 ) + players[0] thread zombie_devgui_kill(); + + break; + case "player2_kill": + players = get_players(); + + if ( players.size >= 2 ) + players[1] thread zombie_devgui_kill(); + + break; + case "player3_kill": + players = get_players(); + + if ( players.size >= 3 ) + players[2] thread zombie_devgui_kill(); + + break; + case "player4_kill": + players = get_players(); + + if ( players.size >= 4 ) + players[3] thread zombie_devgui_kill(); + + break; + case "spawn_friendly_bot": + player = gethostplayer(); + team = player.team; + devgui_bot_spawn( team ); + break; + case "specialty_quickrevive": + level.solo_lives_given = 0; + case "specialty_showonradar": + case "specialty_scavenger": + case "specialty_rof": + case "specialty_nomotionsensor": + case "specialty_longersprint": + case "specialty_grenadepulldeath": + case "specialty_flakjacket": + case "specialty_finalstand": + case "specialty_fastreload": + case "specialty_fastmeleerecovery": + case "specialty_deadshot": + case "specialty_armorvest": + case "specialty_additionalprimaryweapon": + zombie_devgui_give_perk( cmd ); + break; + case "turnplayer": + zombie_devgui_turn_player(); + break; + case "player1_turnplayer": + zombie_devgui_turn_player( 0 ); + break; + case "player2_turnplayer": + zombie_devgui_turn_player( 1 ); + break; + case "player3_turnplayer": + zombie_devgui_turn_player( 2 ); + break; + case "player4_turnplayer": + zombie_devgui_turn_player( 3 ); + break; + case "player1_debug_pers": + zombie_devgui_debug_pers( 0 ); + break; + case "player2_debug_pers": + zombie_devgui_debug_pers( 1 ); + break; + case "player3_debug_pers": + zombie_devgui_debug_pers( 2 ); + break; + case "player4_debug_pers": + zombie_devgui_debug_pers( 3 ); + break; + case "tesla": + case "random_weapon": + case "nuke": + case "minigun": + case "meat_stink": + case "lose_points_team": + case "lose_perk": + case "insta_kill": + case "full_ammo": + case "free_perk": + case "fire_sale": + case "empty_clip": + case "double_points": + case "carpenter": + case "bonus_points_team": + case "bonus_points_player": + case "bonfire_sale": + zombie_devgui_give_powerup( cmd, 1 ); + break; + case "next_tesla": + case "next_random_weapon": + case "next_nuke": + case "next_minigun": + case "next_meat_stink": + case "next_lose_points_team": + case "next_lose_perk": + case "next_insta_kill": + case "next_full_ammo": + case "next_free_perk": + case "next_fire_sale": + case "next_empty_clip": + case "next_double_points": + case "next_carpenter": + case "next_bonus_points_team": + case "next_bonus_points_player": + case "next_bonfire_sale": + zombie_devgui_give_powerup( getsubstr( cmd, 5 ), 0 ); + break; + case "round": + zombie_devgui_goto_round( getdvarint( _hash_D81B6E19 ) ); + break; + case "round_next": + zombie_devgui_goto_round( level.round_number + 1 ); + break; + case "round_prev": + zombie_devgui_goto_round( level.round_number - 1 ); + break; + case "chest_move": + if ( isdefined( level.chest_accessed ) ) + { + level notify( "devgui_chest_end_monitor" ); + level.chest_accessed = 100; + } + + break; + case "chest_never_move": + if ( isdefined( level.chest_accessed ) ) + level thread zombie_devgui_chest_never_move(); + + break; + case "chest": + if ( isdefined( level.zombie_weapons[getdvar( _hash_45ED7744 )] ) ) + { + + } + + break; + case "quantum_bomb_random_result": + setdvar( "scr_force_quantum_bomb_result", "" ); + break; + case "give_gasmask": + array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_gasmask_zm" ); + break; + case "give_hacker": + array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_hacker_zm" ); + break; + case "give_turbine": + array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_turbine_zm" ); + break; + case "give_turret": + array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_turret_zm" ); + break; + case "give_electrictrap": + array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_electrictrap_zm" ); + break; + case "give_riotshield": + array_thread( get_players(), ::zombie_devgui_equipment_give, "riotshield_zm" ); + break; + case "give_jetgun": + array_thread( get_players(), ::zombie_devgui_equipment_give, "jetgun_zm" ); + break; + case "give_springpad": + array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_springpad_zm" ); + break; + case "give_subwoofer": + array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_subwoofer_zm" ); + break; + case "give_headchopper": + array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_headchopper_zm" ); + break; + case "cool_jetgun": + array_thread( get_players(), ::zombie_devgui_cool_jetgun ); + break; + case "preserve_turbines": + array_thread( get_players(), ::zombie_devgui_preserve_turbines ); + break; + case "healthy_equipment": + array_thread( get_players(), ::zombie_devgui_equipment_stays_healthy ); + break; + case "disown_equipment": + array_thread( get_players(), ::zombie_devgui_disown_equipment ); + break; + case "buildable_drop": + array_thread( get_players(), ::zombie_devgui_buildable_drop ); + break; + case "build_busladder": + zombie_devgui_build( "busladder" ); + break; + case "build_bushatch": + zombie_devgui_build( "bushatch" ); + break; + case "build_dinerhatch": + zombie_devgui_build( "dinerhatch" ); + break; + case "build_cattlecatcher": + zombie_devgui_build( "cattlecatcher" ); + break; + case "build_pap": + zombie_devgui_build( "pap" ); + break; + case "build_riotshield_zm": + zombie_devgui_build( "riotshield_zm" ); + break; + case "build_powerswitch": + zombie_devgui_build( "powerswitch" ); + break; + case "build_turbine": + zombie_devgui_build( "turbine" ); + break; + case "build_turret": + zombie_devgui_build( "turret" ); + break; + case "build_electric_trap": + zombie_devgui_build( "electric_trap" ); + break; + case "build_jetgun_zm": + zombie_devgui_build( "jetgun_zm" ); + break; + case "build_sq_common": + zombie_devgui_build( "sq_common" ); + break; + case "build_springpad": + zombie_devgui_build( "springpad_zm" ); + break; + case "build_slipgun": + zombie_devgui_build( "slipgun_zm" ); + break; + case "build_keys": + zombie_devgui_build( "keys_zm" ); + break; + case "give_claymores": + array_thread( get_players(), ::zombie_devgui_give_claymores ); + break; + case "give_frags": + array_thread( get_players(), ::zombie_devgui_give_frags ); + break; + case "give_sticky": + array_thread( get_players(), ::zombie_devgui_give_sticky ); + break; + case "give_monkey": + array_thread( get_players(), ::zombie_devgui_give_monkey ); + break; + case "give_beacon": + array_thread( get_players(), ::zombie_devgui_give_beacon ); + break; + case "give_time_bomb": + array_thread( get_players(), ::zombie_devgui_give_time_bomb ); + break; + case "give_black_hole_bomb": + array_thread( get_players(), ::zombie_devgui_give_black_hole_bomb ); + break; + case "give_dolls": + array_thread( get_players(), ::zombie_devgui_give_dolls ); + break; + case "give_quantum_bomb": + array_thread( get_players(), ::zombie_devgui_give_quantum_bomb ); + break; + case "give_emp_bomb": + array_thread( get_players(), ::zombie_devgui_give_emp_bomb ); + break; + case "monkey_round": + zombie_devgui_monkey_round(); + break; + case "thief_round": + zombie_devgui_thief_round(); + break; + case "dog_round": + zombie_devgui_dog_round( getdvarint( _hash_3CD25BFE ) ); + break; + case "dog_round_skip": + zombie_devgui_dog_round_skip(); + break; + case "print_variables": + zombie_devgui_dump_zombie_vars(); + break; + case "pack_current_weapon": + zombie_devgui_pack_current_weapon(); + break; + case "unpack_current_weapon": + zombie_devgui_unpack_current_weapon(); + break; + case "reopt_current_weapon": + zombie_devgui_reopt_current_weapon(); + break; + case "weapon_take_all_fallback": + zombie_devgui_take_weapons( 1 ); + break; + case "weapon_take_all": + zombie_devgui_take_weapons( 0 ); + break; + case "weapon_take_current": + zombie_devgui_take_weapon(); + break; + case "power_on": + flag_set( "power_on" ); + break; + case "power_off": + flag_clear( "power_on" ); + break; + case "zombie_dpad_none": + array_thread( get_players(), ::zombie_devgui_dpad_none ); + break; + case "zombie_dpad_damage": + array_thread( get_players(), ::zombie_devgui_dpad_damage ); + break; + case "zombie_dpad_kill": + array_thread( get_players(), ::zombie_devgui_dpad_death ); + break; + case "zombie_dpad_drink": + array_thread( get_players(), ::zombie_devgui_dpad_changeweapon ); + break; + case "director_easy": + zombie_devgui_director_easy(); + break; + case "open_sesame": + zombie_devgui_open_sesame(); + break; + case "allow_fog": + zombie_devgui_allow_fog(); + break; + case "disable_kill_thread_toggle": + zombie_devgui_disable_kill_thread_toggle(); + break; + case "check_kill_thread_every_frame_toggle": + zombie_devgui_check_kill_thread_every_frame_toggle(); + break; + case "kill_thread_test_mode_toggle": + zombie_devgui_kill_thread_test_mode_toggle(); + break; + case "zombie_failsafe_debug_flush": + level notify( "zombie_failsafe_debug_flush" ); + break; + case "spawn": + devgui_zombie_spawn(); + break; + case "spawn_all": + devgui_all_spawn(); + break; + case "toggle_show_spawn_locations": + devgui_toggle_show_spawn_locations(); + break; + case "debug_hud": + array_thread( get_players(), ::devgui_debug_hud ); + break; + case "": + break; + default: + if ( isdefined( level.custom_devgui ) ) + { + if ( isarray( level.custom_devgui ) ) + { + i = 0; + + do + { + b_found_entry = is_true( [[ level.custom_devgui[i] ]]( cmd ) ); + i++; + } + while ( !b_found_entry && i < level.custom_devgui.size ); + } + else + [[ level.custom_devgui ]]( cmd ); + } + else + { + + } + + break; + } + + setdvar( "zombie_devgui", "" ); + wait 0.5; + } +#/ +} + +devgui_all_spawn() +{ +/# + player = gethostplayer(); + devgui_bot_spawn( player.team ); + wait 0.1; + devgui_bot_spawn( player.team ); + wait 0.1; + devgui_bot_spawn( player.team ); + wait 0.1; + zombie_devgui_goto_round( 8 ); +#/ +} + +devgui_toggle_show_spawn_locations() +{ +/# + if ( !isdefined( level.toggle_show_spawn_locations ) ) + level.toggle_show_spawn_locations = 1; + else + level.toggle_show_spawn_locations = !level.toggle_show_spawn_locations; +#/ +} + +devgui_zombie_spawn() +{ +/# + player = get_players()[0]; + spawnername = undefined; + spawnername = "zombie_spawner"; + direction = player getplayerangles(); + direction_vec = anglestoforward( direction ); + eye = player geteye(); + scale = 8000; + direction_vec = ( direction_vec[0] * scale, direction_vec[1] * scale, direction_vec[2] * scale ); + trace = bullettrace( eye, eye + direction_vec, 0, undefined ); + guy = undefined; + spawners = getentarray( spawnername, "script_noteworthy" ); + spawner = spawners[0]; + guy = maps\mp\zombies\_zm_utility::spawn_zombie( spawner ); + + if ( isdefined( guy ) ) + { + wait 0.5; + guy.origin = trace["position"]; + guy.angles = player.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); + guy forceteleport( trace["position"], player.angles + vectorscale( ( 0, 1, 0 ), 180.0 ) ); + guy thread maps\mp\zombies\_zm_ai_basic::find_flesh(); + } +#/ +} + +devgui_bot_spawn( team ) +{ +/# + player = gethostplayer(); + direction = player getplayerangles(); + direction_vec = anglestoforward( direction ); + eye = player geteye(); + scale = 8000; + direction_vec = ( direction_vec[0] * scale, direction_vec[1] * scale, direction_vec[2] * scale ); + trace = bullettrace( eye, eye + direction_vec, 0, undefined ); + direction_vec = player.origin - trace["position"]; + direction = vectortoangles( direction_vec ); + bot = addtestclient(); + + if ( !isdefined( bot ) ) + { + println( "Could not add test client" ); + return; + } + + bot.pers["isBot"] = 1; + bot.equipment_enabled = 0; + bot maps\mp\zombies\_zm::reset_rampage_bookmark_kill_times(); + bot.team = "allies"; + bot._player_entnum = bot getentitynumber(); + yaw = direction[1]; + bot thread devgui_bot_spawn_think( trace["position"], yaw ); +#/ +} + +devgui_bot_spawn_think( origin, yaw ) +{ +/# + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self setorigin( origin ); + angles = ( 0, yaw, 0 ); + self setplayerangles( angles ); + } +#/ +} + +zombie_devgui_open_sesame() +{ +/# + setdvar( "zombie_unlock_all", 1 ); + flag_set( "power_on" ); + players = get_players(); + array_thread( players, ::zombie_devgui_give_money ); + zombie_doors = getentarray( "zombie_door", "targetname" ); + + for ( i = 0; i < zombie_doors.size; i++ ) + { + zombie_doors[i] notify( "trigger", players[0] ); + + if ( is_true( zombie_doors[i].power_door_ignore_flag_wait ) ) + zombie_doors[i] notify( "power_on" ); + + wait 0.05; + } + + zombie_airlock_doors = getentarray( "zombie_airlock_buy", "targetname" ); + + for ( i = 0; i < zombie_airlock_doors.size; i++ ) + { + zombie_airlock_doors[i] notify( "trigger", players[0] ); + wait 0.05; + } + + zombie_debris = getentarray( "zombie_debris", "targetname" ); + + for ( i = 0; i < zombie_debris.size; i++ ) + { + zombie_debris[i] notify( "trigger", players[0] ); + wait 0.05; + } + + zombie_devgui_build( undefined ); + level notify( "open_sesame" ); + wait 1; + setdvar( "zombie_unlock_all", 0 ); +#/ +} + +any_player_in_noclip() +{ +/# + foreach ( player in get_players() ) + { + if ( player isinmovemode( "ufo", "noclip" ) ) + return true; + } + + return false; +#/ +} + +diable_fog_in_noclip() +{ +/# + level.fog_disabled_in_noclip = 1; + level endon( "allowfoginnoclip" ); + flag_wait( "start_zombie_round_logic" ); + + while ( true ) + { + while ( !any_player_in_noclip() ) + wait 1; + + setdvar( "scr_fog_disable", "1" ); + setdvar( "r_fog_disable", "1" ); + + if ( isdefined( level.culldist ) ) + setculldist( 0 ); + + while ( any_player_in_noclip() ) + wait 1; + + setdvar( "scr_fog_disable", "0" ); + setdvar( "r_fog_disable", "0" ); + + if ( isdefined( level.culldist ) ) + setculldist( level.culldist ); + } +#/ +} + +zombie_devgui_allow_fog() +{ +/# + if ( level.fog_disabled_in_noclip ) + { + level notify( "allowfoginnoclip" ); + level.fog_disabled_in_noclip = 0; + setdvar( "scr_fog_disable", "0" ); + setdvar( "r_fog_disable", "0" ); + } + else + thread diable_fog_in_noclip(); +#/ +} + +zombie_devgui_give_money() +{ +/# + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + self maps\mp\zombies\_zm_score::add_to_player_score( 100000 ); +#/ +} + +zombie_devgui_take_money() +{ +/# + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + + if ( self.score > 100 ) + self maps\mp\zombies\_zm_score::minus_to_player_score( int( self.score / 2 ) ); + else + self maps\mp\zombies\_zm_score::minus_to_player_score( self.score ); +#/ +} + +zombie_devgui_turn_player( index ) +{ +/# + players = get_players(); + + if ( !isdefined( index ) || index >= players.size ) + player = players[0]; + else + player = players[index]; + + assert( isdefined( player ) ); + assert( isplayer( player ) ); + assert( isalive( player ) ); + level.devcheater = 1; + + if ( player hasperk( "specialty_noname" ) ) + { + println( "Player turned HUMAN" ); + player maps\mp\zombies\_zm_turned::turn_to_human(); + } + else + { + println( "Player turned ZOMBIE" ); + player maps\mp\zombies\_zm_turned::turn_to_zombie(); + } +#/ +} + +zombie_devgui_debug_pers( index ) +{ +/# + players = get_players(); + + if ( !isdefined( index ) || index >= players.size ) + player = players[0]; + else + player = players[index]; + + assert( isdefined( player ) ); + assert( isplayer( player ) ); + assert( isalive( player ) ); + level.devcheater = 1; + println( "\\n\\n----------------------------------------------------------------------------------------------" ); + println( "Active Persistent upgrades [count=" + level.pers_upgrades_keys.size + "]" ); + + for ( pers_upgrade_index = 0; pers_upgrade_index < level.pers_upgrades_keys.size; pers_upgrade_index++ ) + { + name = level.pers_upgrades_keys[pers_upgrade_index]; + println( pers_upgrade_index + ">pers_upgrade name = " + name ); + pers_upgrade = level.pers_upgrades[name]; + + for ( i = 0; i < pers_upgrade.stat_names.size; i++ ) + { + stat_name = pers_upgrade.stat_names[i]; + stat_desired_value = pers_upgrade.stat_desired_values[i]; + player_current_stat_value = player maps\mp\zombies\_zm_stats::get_global_stat( stat_name ); + println( " " + i + ")stat_name = " + stat_name ); + println( " " + i + ")stat_desired_values = " + stat_desired_value ); + println( " " + i + ")player_current_stat_value = " + player_current_stat_value ); + } + + if ( is_true( player.pers_upgrades_awarded[name] ) ) + { + println( "PLAYER HAS - " + name ); + continue; + } + + println( "PLAYER DOES NOT HAVE - " + name ); + } + + println( "----------------------------------------------------------------------------------------------\\n\\n" ); +#/ +} + +zombie_devgui_cool_jetgun() +{ +/# + if ( isdefined( level.zm_devgui_jetgun_never_overheat ) ) + self thread [[ level.zm_devgui_jetgun_never_overheat ]](); +#/ +} + +zombie_devgui_preserve_turbines() +{ +/# + self endon( "disconnect" ); + self notify( "preserve_turbines" ); + self endon( "preserve_turbines" ); + + if ( !is_true( self.preserving_turbines ) ) + { + self.preserving_turbines = 1; + + while ( true ) + { + self.turbine_health = 1200; + wait 1; + } + } + + self.preserving_turbines = 0; +#/ +} + +zombie_devgui_equipment_stays_healthy() +{ +/# + self endon( "disconnect" ); + self notify( "preserve_equipment" ); + self endon( "preserve_equipment" ); + + if ( !is_true( self.preserving_equipment ) ) + { + self.preserving_equipment = 1; + + while ( true ) + { + self.equipment_damage = []; + self.shielddamagetaken = 0; + + if ( isdefined( level.destructible_equipment ) ) + { + foreach ( equip in level.destructible_equipment ) + { + if ( isdefined( equip ) ) + { + equip.shielddamagetaken = 0; + equip.damage = 0; + equip.headchopper_kills = 0; + equip.springpad_kills = 0; + equip.subwoofer_kills = 0; + } + } + } + + wait 0.1; + } + } + + self.preserving_equipment = 0; +#/ +} + +zombie_devgui_disown_equipment() +{ +/# + self.deployed_equipment = []; +#/ +} + +zombie_devgui_equipment_give( equipment ) +{ +/# + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + + if ( is_equipment_included( equipment ) ) + self maps\mp\zombies\_zm_equipment::equipment_buy( equipment ); +#/ +} + +zombie_devgui_buildable_drop() +{ +/# + if ( isdefined( level.buildable_slot_count ) ) + { + for ( i = 0; i < level.buildable_slot_count; i++ ) + self maps\mp\zombies\_zm_buildables::player_drop_piece( undefined, i ); + } + else + self maps\mp\zombies\_zm_buildables::player_drop_piece(); +#/ +} + +zombie_devgui_build( buildable ) +{ +/# + player = get_players()[0]; + + for ( i = 0; i < level.buildable_stubs.size; i++ ) + { + if ( !isdefined( buildable ) || level.buildable_stubs[i].equipname == buildable ) + { + if ( !isdefined( buildable ) && is_true( level.buildable_stubs[i].ignore_open_sesame ) ) + continue; + + if ( isdefined( buildable ) || level.buildable_stubs[i].persistent != 3 ) + level.buildable_stubs[i] maps\mp\zombies\_zm_buildables::buildablestub_finish_build( player ); + } + } +#/ +} + +zombie_devgui_give_claymores() +{ +/# + self endon( "disconnect" ); + self notify( "give_planted_grenade_thread" ); + self endon( "give_planted_grenade_thread" ); + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + + if ( isdefined( self get_player_placeable_mine() ) ) + self takeweapon( self get_player_placeable_mine() ); + + self thread maps\mp\zombies\_zm_weap_claymore::claymore_setup(); + + while ( true ) + { + self givemaxammo( "claymore_zm" ); + wait 1; + } +#/ +} + +zombie_devgui_give_lethal( weapon ) +{ +/# + self endon( "disconnect" ); + self notify( "give_lethal_grenade_thread" ); + self endon( "give_lethal_grenade_thread" ); + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + + if ( isdefined( self get_player_lethal_grenade() ) ) + self takeweapon( self get_player_lethal_grenade() ); + + self giveweapon( weapon ); + self set_player_lethal_grenade( weapon ); + + while ( true ) + { + self givemaxammo( weapon ); + wait 1; + } +#/ +} + +zombie_devgui_give_frags() +{ +/# + zombie_devgui_give_lethal( "frag_grenade_zm" ); +#/ +} + +zombie_devgui_give_sticky() +{ +/# + zombie_devgui_give_lethal( "sticky_grenade_zm" ); +#/ +} + +zombie_devgui_give_monkey() +{ +/# + self endon( "disconnect" ); + self notify( "give_tactical_grenade_thread" ); + self endon( "give_tactical_grenade_thread" ); + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + + if ( isdefined( self get_player_tactical_grenade() ) ) + self takeweapon( self get_player_tactical_grenade() ); + + if ( isdefined( level.zombiemode_devgui_cymbal_monkey_give ) ) + { + self [[ level.zombiemode_devgui_cymbal_monkey_give ]](); + + while ( true ) + { + self givemaxammo( "cymbal_monkey_zm" ); + wait 1; + } + } +#/ +} + +zombie_devgui_give_beacon() +{ +/# + self endon( "disconnect" ); + self notify( "give_tactical_grenade_thread" ); + self endon( "give_tactical_grenade_thread" ); + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + + if ( isdefined( self get_player_tactical_grenade() ) ) + self takeweapon( self get_player_tactical_grenade() ); + + if ( isdefined( level.zombiemode_devgui_beacon_give ) ) + { + self [[ level.zombiemode_devgui_beacon_give ]](); + + while ( true ) + { + self givemaxammo( "beacon_zm" ); + wait 1; + } + } +#/ +} + +zombie_devgui_give_time_bomb() +{ +/# + self endon( "disconnect" ); + self notify( "give_tactical_grenade_thread" ); + self endon( "give_tactical_grenade_thread" ); + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + + if ( isdefined( self get_player_tactical_grenade() ) ) + self takeweapon( self get_player_tactical_grenade() ); + + if ( isdefined( level.zombiemode_time_bomb_give_func ) ) + self [[ level.zombiemode_time_bomb_give_func ]](); +#/ +} + +zombie_devgui_give_black_hole_bomb() +{ +/# + self endon( "disconnect" ); + self notify( "give_tactical_grenade_thread" ); + self endon( "give_tactical_grenade_thread" ); + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + + if ( isdefined( self get_player_tactical_grenade() ) ) + self takeweapon( self get_player_tactical_grenade() ); + + if ( isdefined( level.zombiemode_devgui_black_hole_bomb_give ) ) + { + self [[ level.zombiemode_devgui_black_hole_bomb_give ]](); + + while ( true ) + { + self givemaxammo( "zombie_black_hole_bomb" ); + wait 1; + } + } +#/ +} + +zombie_devgui_give_dolls() +{ +/# + self endon( "disconnect" ); + self notify( "give_tactical_grenade_thread" ); + self endon( "give_tactical_grenade_thread" ); + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + + if ( isdefined( self get_player_tactical_grenade() ) ) + self takeweapon( self get_player_tactical_grenade() ); + + if ( isdefined( level.zombiemode_devgui_nesting_dolls_give ) ) + { + self [[ level.zombiemode_devgui_nesting_dolls_give ]](); + + while ( true ) + { + self givemaxammo( "zombie_nesting_dolls" ); + wait 1; + } + } +#/ +} + +zombie_devgui_give_quantum_bomb() +{ +/# + self endon( "disconnect" ); + self notify( "give_tactical_grenade_thread" ); + self endon( "give_tactical_grenade_thread" ); + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + + if ( isdefined( self get_player_tactical_grenade() ) ) + self takeweapon( self get_player_tactical_grenade() ); + + if ( isdefined( level.zombiemode_devgui_quantum_bomb_give ) ) + { + self [[ level.zombiemode_devgui_quantum_bomb_give ]](); + + while ( true ) + { + self givemaxammo( "zombie_quantum_bomb" ); + wait 1; + } + } +#/ +} + +zombie_devgui_give_emp_bomb() +{ +/# + self endon( "disconnect" ); + self notify( "give_tactical_grenade_thread" ); + self endon( "give_tactical_grenade_thread" ); + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + level.devcheater = 1; + + if ( isdefined( self get_player_tactical_grenade() ) ) + self takeweapon( self get_player_tactical_grenade() ); + + if ( isdefined( level.zombiemode_devgui_emp_bomb_give ) ) + { + self [[ level.zombiemode_devgui_emp_bomb_give ]](); + + while ( true ) + { + self givemaxammo( "emp_grenade_zm" ); + wait 1; + } + } +#/ +} + +zombie_devgui_invulnerable( playerindex, onoff ) +{ +/# + players = get_players(); + + if ( !isdefined( playerindex ) ) + { + for ( i = 0; i < players.size; i++ ) + zombie_devgui_invulnerable( i, onoff ); + } + else if ( players.size > playerindex ) + { + if ( onoff ) + players[playerindex] enableinvulnerability(); + else + players[playerindex] disableinvulnerability(); + } +#/ +} + +zombie_devgui_kill() +{ +/# + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + self disableinvulnerability(); + death_from = ( randomfloatrange( -20, 20 ), randomfloatrange( -20, 20 ), randomfloatrange( -20, 20 ) ); + self dodamage( self.health + 666, self.origin + death_from ); +#/ +} + +zombie_devgui_toggle_ammo() +{ +/# + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + self notify( "devgui_toggle_ammo" ); + self endon( "devgui_toggle_ammo" ); + self.ammo4evah = !is_true( self.ammo4evah ); + + while ( isdefined( self ) && self.ammo4evah ) + { + weapon = self getcurrentweapon(); + + if ( weapon != "none" ) + { + self setweaponoverheating( 0, 0 ); + max = weaponmaxammo( weapon ); + + if ( isdefined( max ) ) + self setweaponammostock( weapon, max ); + + if ( isdefined( self get_player_tactical_grenade() ) ) + self givemaxammo( self get_player_tactical_grenade() ); + + if ( isdefined( self get_player_lethal_grenade() ) ) + self givemaxammo( self get_player_lethal_grenade() ); + } + + wait 1; + } +#/ +} + +zombie_devgui_toggle_ignore() +{ +/# + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + self.ignoreme = !self.ignoreme; + + if ( self.ignoreme ) + setdvar( "ai_showFailedPaths", 0 ); +#/ +} + +zombie_devgui_revive() +{ +/# + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + self reviveplayer(); + self notify( "stop_revive_trigger" ); + + if ( isdefined( self.revivetrigger ) ) + { + self.revivetrigger delete(); + self.revivetrigger = undefined; + } + + self allowjump( 1 ); + self.ignoreme = 0; + self.laststand = undefined; + self notify( "player_revived", self ); +#/ +} + +zombie_devgui_give_health() +{ +/# + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( isalive( self ) ); + self notify( "devgui_health" ); + self endon( "devgui_health" ); + self endon( "disconnect" ); + self endon( "death" ); + level.devcheater = 1; + + while ( true ) + { + self.maxhealth = 100000; + self.health = 100000; + self waittill_any( "player_revived", "perk_used", "spawned_player" ); + wait 2; + } +#/ +} + +zombie_devgui_give_perk( perk ) +{ +/# + vending_triggers = getentarray( "zombie_vending", "targetname" ); + player = get_players()[0]; + level.devcheater = 1; + + if ( vending_triggers.size < 1 ) + return; + + for ( i = 0; i < vending_triggers.size; i++ ) + { + if ( vending_triggers[i].script_noteworthy == perk ) + { + vending_triggers[i] notify( "trigger", player ); + return; + } + } +#/ +} + +zombie_devgui_give_powerup( powerup_name, now, origin ) +{ +/# + player = get_players()[0]; + found = 0; + level.devcheater = 1; + + for ( i = 0; i < level.zombie_powerup_array.size; i++ ) + { + if ( level.zombie_powerup_array[i] == powerup_name ) + { + level.zombie_powerup_index = i; + found = 1; + break; + } + } + + if ( !found ) + return; + + direction = player getplayerangles(); + direction_vec = anglestoforward( direction ); + eye = player geteye(); + scale = 8000; + direction_vec = ( direction_vec[0] * scale, direction_vec[1] * scale, direction_vec[2] * scale ); + trace = bullettrace( eye, eye + direction_vec, 0, undefined ); + level.zombie_devgui_power = 1; + level.zombie_vars["zombie_drop_item"] = 1; + level.powerup_drop_count = 0; + + if ( isdefined( origin ) ) + level thread maps\mp\zombies\_zm_powerups::powerup_drop( origin ); + else if ( !isdefined( now ) || now ) + level thread maps\mp\zombies\_zm_powerups::powerup_drop( trace["position"] ); +#/ +} + +zombie_devgui_goto_round( target_round ) +{ +/# + player = get_players()[0]; + + if ( target_round < 1 ) + target_round = 1; + + level.devcheater = 1; + level.zombie_total = 0; + maps\mp\zombies\_zm::ai_calculate_health( target_round ); + level.round_number = target_round - 1; + level notify( "kill_round" ); + wait 1; + zombies = get_round_enemy_array(); + + if ( isdefined( zombies ) ) + { + for ( i = 0; i < zombies.size; i++ ) + { + if ( is_true( zombies[i].ignore_devgui_death ) ) + continue; + + zombies[i] dodamage( zombies[i].health + 666, zombies[i].origin ); + } + } +#/ +} + +zombie_devgui_monkey_round() +{ +/# + if ( isdefined( level.next_monkey_round ) ) + zombie_devgui_goto_round( level.next_monkey_round ); +#/ +} + +zombie_devgui_thief_round() +{ +/# + if ( isdefined( level.next_thief_round ) ) + zombie_devgui_goto_round( level.next_thief_round ); +#/ +} + +zombie_devgui_dog_round( num_dogs ) +{ +/# + if ( !isdefined( level.dogs_enabled ) || !level.dogs_enabled ) + return; + + if ( !isdefined( level.dog_rounds_enabled ) || !level.dog_rounds_enabled ) + return; + + if ( !isdefined( level.enemy_dog_spawns ) || level.enemy_dog_spawns.size < 1 ) + return; + + if ( !flag( "dog_round" ) ) + setdvar( "force_dogs", num_dogs ); + else + { + + } + + zombie_devgui_goto_round( level.round_number + 1 ); +#/ +} + +zombie_devgui_dog_round_skip() +{ +/# + if ( isdefined( level.next_dog_round ) ) + zombie_devgui_goto_round( level.next_dog_round ); +#/ +} + +zombie_devgui_dump_zombie_vars() +{ +/# + if ( !isdefined( level.zombie_vars ) ) + return; + + if ( level.zombie_vars.size > 0 ) + println( "#### Zombie Variables ####" ); + else + return; + + var_names = getarraykeys( level.zombie_vars ); + + for ( i = 0; i < level.zombie_vars.size; i++ ) + { + key = var_names[i]; + println( key + ": " + level.zombie_vars[key] ); + } + + println( "##### End Zombie Variables #####" ); +#/ +} + +zombie_devgui_pack_current_weapon() +{ +/# + players = get_players(); + reviver = players[0]; + level.devcheater = 1; + + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + weap = maps\mp\zombies\_zm_weapons::get_base_name( players[i] getcurrentweapon() ); + weapon = get_upgrade( weap ); + + if ( isdefined( weapon ) ) + { + players[i] takeweapon( weap ); + players[i] giveweapon( weapon, 0, players[i] maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); + players[i] givestartammo( weapon ); + players[i] switchtoweapon( weapon ); + } + } + } +#/ +} + +zombie_devgui_unpack_current_weapon() +{ +/# + players = get_players(); + reviver = players[0]; + level.devcheater = 1; + + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + weap = players[i] getcurrentweapon(); + weapon = maps\mp\zombies\_zm_weapons::get_base_weapon_name( weap, 1 ); + + if ( isdefined( weapon ) ) + { + players[i] takeweapon( weap ); + players[i] giveweapon( weapon, 0, players[i] maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); + players[i] givestartammo( weapon ); + players[i] switchtoweapon( weapon ); + } + } + } +#/ +} + +zombie_devgui_reopt_current_weapon() +{ +/# + players = get_players(); + reviver = players[0]; + level.devcheater = 1; + + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + weap = players[i] getcurrentweapon(); + weapon = weap; + + if ( isdefined( weapon ) ) + { + if ( isdefined( players[i].pack_a_punch_weapon_options ) ) + players[i].pack_a_punch_weapon_options[weapon] = undefined; + + players[i] takeweapon( weap ); + players[i] giveweapon( weapon, 0, players[i] maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); + players[i] givestartammo( weapon ); + players[i] switchtoweapon( weapon ); + } + } + } +#/ +} + +zombie_devgui_take_weapon() +{ +/# + players = get_players(); + reviver = players[0]; + level.devcheater = 1; + + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + weap = players[i] getcurrentweapon(); + weapon = weap; + + if ( isdefined( weapon ) ) + { + players[i] takeweapon( weap ); + players[i] switch_back_primary_weapon( undefined ); + } + } + } +#/ +} + +zombie_devgui_take_weapons( give_fallback ) +{ +/# + players = get_players(); + reviver = players[0]; + level.devcheater = 1; + + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + players[i] takeallweapons(); + + if ( give_fallback ) + players[i] give_fallback_weapon(); + } + } +#/ +} + +get_upgrade( weaponname ) +{ +/# + if ( isdefined( level.zombie_weapons[weaponname] ) && isdefined( level.zombie_weapons[weaponname].upgrade_name ) ) + return maps\mp\zombies\_zm_weapons::get_upgrade_weapon( weaponname, 0 ); + else + return maps\mp\zombies\_zm_weapons::get_upgrade_weapon( weaponname, 1 ); +#/ +} + +zombie_devgui_director_easy() +{ +/# + if ( isdefined( level.director_devgui_health ) ) + [[ level.director_devgui_health ]](); +#/ +} + +zombie_devgui_chest_never_move() +{ +/# + level notify( "devgui_chest_end_monitor" ); + level endon( "devgui_chest_end_monitor" ); + + for (;;) + { + level.chest_accessed = 0; + wait 5; + } +#/ +} + +zombie_devgui_disable_kill_thread_toggle() +{ +/# + if ( !is_true( level.disable_kill_thread ) ) + level.disable_kill_thread = 1; + else + level.disable_kill_thread = 0; +#/ +} + +zombie_devgui_check_kill_thread_every_frame_toggle() +{ +/# + if ( !is_true( level.check_kill_thread_every_frame ) ) + level.check_kill_thread_every_frame = 1; + else + level.check_kill_thread_every_frame = 0; +#/ +} + +zombie_devgui_kill_thread_test_mode_toggle() +{ +/# + if ( !is_true( level.kill_thread_test_mode ) ) + level.kill_thread_test_mode = 1; + else + level.kill_thread_test_mode = 0; +#/ +} + +showonespawnpoint( spawn_point, color, notification, height, print ) +{ +/# + if ( !isdefined( height ) || height <= 0 ) + height = get_player_height(); + + if ( !isdefined( print ) ) + print = spawn_point.classname; + + center = spawn_point.origin; + forward = anglestoforward( spawn_point.angles ); + right = anglestoright( spawn_point.angles ); + forward = vectorscale( forward, 16 ); + right = vectorscale( right, 16 ); + a = center + forward - right; + b = center + forward + right; + c = center - forward + right; + d = center - forward - right; + thread lineuntilnotified( a, b, color, 0, notification ); + thread lineuntilnotified( b, c, color, 0, notification ); + thread lineuntilnotified( c, d, color, 0, notification ); + thread lineuntilnotified( d, a, color, 0, notification ); + thread lineuntilnotified( a, a + ( 0, 0, height ), color, 0, notification ); + thread lineuntilnotified( b, b + ( 0, 0, height ), color, 0, notification ); + thread lineuntilnotified( c, c + ( 0, 0, height ), color, 0, notification ); + thread lineuntilnotified( d, d + ( 0, 0, height ), color, 0, notification ); + a += ( 0, 0, height ); + b += ( 0, 0, height ); + c += ( 0, 0, height ); + d += ( 0, 0, height ); + thread lineuntilnotified( a, b, color, 0, notification ); + thread lineuntilnotified( b, c, color, 0, notification ); + thread lineuntilnotified( c, d, color, 0, notification ); + thread lineuntilnotified( d, a, color, 0, notification ); + center += ( 0, 0, height / 2 ); + arrow_forward = anglestoforward( spawn_point.angles ); + arrowhead_forward = anglestoforward( spawn_point.angles ); + arrowhead_right = anglestoright( spawn_point.angles ); + arrow_forward = vectorscale( arrow_forward, 32 ); + arrowhead_forward = vectorscale( arrowhead_forward, 24 ); + arrowhead_right = vectorscale( arrowhead_right, 8 ); + a = center + arrow_forward; + b = center + arrowhead_forward - arrowhead_right; + c = center + arrowhead_forward + arrowhead_right; + thread lineuntilnotified( center, a, color, 0, notification ); + thread lineuntilnotified( a, b, color, 0, notification ); + thread lineuntilnotified( a, c, color, 0, notification ); + thread print3duntilnotified( spawn_point.origin + ( 0, 0, height ), print, color, 1, 1, notification ); + return; +#/ +} + +print3duntilnotified( origin, text, color, alpha, scale, notification ) +{ +/# + level endon( notification ); + + for (;;) + { + print3d( origin, text, color, alpha, scale ); + wait 0.05; + } +#/ +} + +lineuntilnotified( start, end, color, depthtest, notification ) +{ +/# + level endon( notification ); + + for (;;) + { + line( start, end, color, depthtest ); + wait 0.05; + } +#/ +} + +devgui_debug_hud() +{ +/# + if ( isdefined( self get_player_lethal_grenade() ) ) + self givemaxammo( self get_player_lethal_grenade() ); + + self thread maps\mp\zombies\_zm_weap_claymore::claymore_setup(); + + if ( isdefined( level.zombiemode_time_bomb_give_func ) ) + { + if ( isdefined( self get_player_tactical_grenade() ) ) + self takeweapon( self get_player_tactical_grenade() ); + + self [[ level.zombiemode_time_bomb_give_func ]](); + } + else if ( isdefined( level.zombiemode_devgui_cymbal_monkey_give ) ) + { + if ( isdefined( self get_player_tactical_grenade() ) ) + self takeweapon( self get_player_tactical_grenade() ); + + self [[ level.zombiemode_devgui_cymbal_monkey_give ]](); + } + else if ( isdefined( self get_player_tactical_grenade() ) ) + self givemaxammo( self get_player_tactical_grenade() ); + + if ( isdefined( level.zombie_include_equipment ) && !isdefined( self get_player_equipment() ) ) + { + equipment = getarraykeys( level.zombie_include_equipment ); + + if ( isdefined( equipment[0] ) ) + self zombie_devgui_equipment_give( equipment[0] ); + } + + candidate_list = []; + + foreach ( zone in level.zones ) + { + if ( isdefined( zone.unitrigger_stubs ) ) + candidate_list = arraycombine( candidate_list, zone.unitrigger_stubs, 1, 0 ); + } + + foreach ( stub in candidate_list ) + { + if ( isdefined( stub.piece ) && isdefined( stub.piece.buildable_slot ) ) + { + if ( !isdefined( self player_get_buildable_piece( stub.piece.buildable_slot ) ) ) + self thread maps\mp\zombies\_zm_buildables::player_take_piece( stub.piece ); + } + } + + for ( i = 0; i < 10; i++ ) + { + zombie_devgui_give_powerup( "free_perk", 1, self.origin ); + wait 0.25; + } + + zombie_devgui_give_powerup( "insta_kill", 1, self.origin ); + wait 0.25; + zombie_devgui_give_powerup( "double_points", 1, self.origin ); + wait 0.25; + zombie_devgui_give_powerup( "fire_sale", 1, self.origin ); + wait 0.25; + zombie_devgui_give_powerup( "minigun", 1, self.origin ); + wait 0.25; + zombie_devgui_give_powerup( "bonfire_sale", 1, self.origin ); + wait 0.25; + self weapon_give( "tar21_upgraded_zm+gl" ); +#/ +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_equip_electrictrap.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_equip_electrictrap.gsc new file mode 100644 index 0000000..038582a --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_equip_electrictrap.gsc @@ -0,0 +1,417 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_power; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_traps; + +init() +{ + if ( !maps\mp\zombies\_zm_equipment::is_equipment_included( "equip_electrictrap_zm" ) ) + return; + + level.electrictrap_name = "equip_electrictrap_zm"; + maps\mp\zombies\_zm_equipment::register_equipment( "equip_electrictrap_zm", &"ZOMBIE_EQUIP_ELECTRICTRAP_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_ELECTRICTRAP_HOWTO", "etrap_zm_icon", "electrictrap", undefined, ::transfertrap, ::droptrap, ::pickuptrap, ::placetrap ); + maps\mp\zombies\_zm_equipment::add_placeable_equipment( "equip_electrictrap_zm", "p6_anim_zm_buildable_etrap" ); + level thread onplayerconnect(); + maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "equip_electrictrap", &"ZOMBIE_EQUIP_ELECTRICTRAP_PICKUP_HINT_STRING" ); + level._effect["etrap_on"] = loadfx( "maps/zombie/fx_zmb_tranzit_electric_trap_on" ); + thread wait_init_damage(); +} + +wait_init_damage() +{ + while ( !isdefined( level.zombie_vars ) || !isdefined( level.zombie_vars["zombie_health_start"] ) ) + wait 1; + + level.etrap_damage = maps\mp\zombies\_zm::ai_zombie_health( 50 ); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread onplayerspawned(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + self thread setupwatchers(); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread watchelectrictrapuse(); + } +} + +setupwatchers() +{ + self waittill( "weapon_watchers_created" ); + + watcher = maps\mp\gametypes_zm\_weaponobjects::getweaponobjectwatcher( "equip_electrictrap" ); + watcher.onspawnretrievetriggers = maps\mp\zombies\_zm_equipment::equipment_onspawnretrievableweaponobject; +} + +watchelectrictrapuse() +{ + self notify( "watchElectricTrapUse" ); + self endon( "watchElectricTrapUse" ); + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "equipment_placed", weapon, weapname ); + + if ( weapname == level.electrictrap_name ) + { + self cleanupoldtrap(); + self.buildableelectrictrap = weapon; + self thread startelectrictrapdeploy( weapon ); + } + } +} + +cleanupoldtrap() +{ + if ( isdefined( self.buildableelectrictrap ) ) + { + if ( isdefined( self.buildableelectrictrap.stub ) ) + { + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildableelectrictrap.stub ); + self.buildableelectrictrap.stub = undefined; + } + + self.buildableelectrictrap delete(); + } + + if ( isdefined( level.electrap_sound_ent ) ) + { + level.electrap_sound_ent delete(); + level.electrap_sound_ent = undefined; + } +} + +watchforcleanup() +{ + self notify( "etrap_cleanup" ); + self endon( "etrap_cleanup" ); + self waittill_any( "death_or_disconnect", "equip_electrictrap_zm_taken", "equip_electrictrap_zm_pickup" ); + cleanupoldtrap(); +} + +placetrap( origin, angles ) +{ + item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_etrap", "equip_electrictrap_zm", origin, angles ); + + if ( isdefined( item ) ) + { + item.owner = self; + item.zombie_attack_callback = ::zombie_attacked_trap; + } + + return item; +} + +droptrap() +{ + item = self maps\mp\zombies\_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_etrap", "equip_electrictrap_zm", self.origin, self.angles ); + + if ( isdefined( item ) ) + item.electrictrap_health = self.electrictrap_health; + + self.electrictrap_health = undefined; + return item; +} + +pickuptrap( item ) +{ + item.owner = self; + self.electrictrap_health = item.electrictrap_health; + item.electrictrap_health = undefined; +} + +transfertrap( fromplayer, toplayer ) +{ + buildableelectrictrap = toplayer.buildableelectrictrap; + electrictrap_health = toplayer.electrictrap_health; + toplayer.buildableelectrictrap = fromplayer.buildableelectrictrap; + toplayer.buildableelectrictrap.original_owner = toplayer; + toplayer notify( "equip_electrictrap_zm_taken" ); + toplayer thread startelectrictrapdeploy( toplayer.buildableelectrictrap ); + toplayer.electrictrap_health = fromplayer.electrictrap_health; + fromplayer.buildableelectrictrap = buildableelectrictrap; + fromplayer notify( "equip_electrictrap_zm_taken" ); + + if ( isdefined( fromplayer.buildableelectrictrap ) ) + { + fromplayer thread startelectrictrapdeploy( fromplayer.buildableelectrictrap ); + fromplayer.buildableelectrictrap.original_owner = fromplayer; + fromplayer.buildableelectrictrap.owner = fromplayer; + } + else + fromplayer maps\mp\zombies\_zm_equipment::equipment_release( "equip_electrictrap_zm" ); + + fromplayer.electrictrap_health = electrictrap_health; +} + +startelectrictrapdeploy( weapon ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_electrictrap_zm_taken" ); + self thread watchforcleanup(); + electricradius = 45; + + if ( !isdefined( self.electrictrap_health ) ) + self.electrictrap_health = 60; + + if ( isdefined( weapon ) ) + { +/# + weapon thread debugelectrictrap( electricradius ); +#/ + if ( isdefined( level.equipment_etrap_needs_power ) && level.equipment_etrap_needs_power ) + { + weapon.power_on = 0; + maps\mp\zombies\_zm_power::add_temp_powered_item( ::trap_power_on, ::trap_power_off, ::trap_in_range, maps\mp\zombies\_zm_power::cost_high, 1, weapon.power_on, weapon ); + } + else + weapon.power_on = 1; + + if ( !weapon.power_on ) + self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" ); + + self thread electrictrapthink( weapon, electricradius ); + + if ( !( isdefined( level.equipment_etrap_needs_power ) && level.equipment_etrap_needs_power ) ) + self thread electrictrapdecay( weapon ); + + self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( weapon ); + + weapon waittill( "death" ); + + if ( isdefined( level.electrap_sound_ent ) ) + { + level.electrap_sound_ent playsound( "wpn_zmb_electrap_stop" ); + level.electrap_sound_ent delete(); + level.electrap_sound_ent = undefined; + } + + self notify( "etrap_cleanup" ); + } +} + +trap_in_range( delta, origin, radius ) +{ + if ( distancesquared( self.target.origin, origin ) < radius * radius ) + return true; + + return false; +} + +trap_power_on( origin, radius ) +{ +/# + println( "^1ZM POWER: trap on\\n" ); +#/ + if ( !isdefined( self.target ) ) + return; + + self.target.power_on = 1; + self.target.power_on_time = gettime(); + self.target notify( "stop_attracting_zombies" ); + + if ( !isdefined( level.electrap_sound_ent ) ) + level.electrap_sound_ent = spawn( "script_origin", self.target.origin ); + + level.electrap_sound_ent playsound( "wpn_zmb_electrap_start" ); + level.electrap_sound_ent playloopsound( "wpn_zmb_electrap_loop", 2 ); + self.target thread trapfx(); +} + +trap_power_off( origin, radius ) +{ +/# + println( "^1ZM POWER: trap off\\n" ); +#/ + if ( !isdefined( self.target ) ) + return; + + self.target.power_on = 0; + self.target thread item_attract_zombies(); + + if ( isdefined( level.electrap_sound_ent ) ) + { + level.electrap_sound_ent playsound( "wpn_zmb_electrap_stop" ); + level.electrap_sound_ent delete(); + level.electrap_sound_ent = undefined; + } +} + +trapfx() +{ + self endon( "disconnect" ); + + while ( isdefined( self ) && ( isdefined( self.power_on ) && self.power_on ) ) + { + playfxontag( level._effect["etrap_on"], self, "tag_origin" ); + wait 0.3; + } +} + +zombie_attacked_trap( zombie ) +{ + if ( isdefined( self.power_on ) && self.power_on ) + self zap_zombie( zombie ); +} + +electrocution_lockout( time ) +{ + level.electrocuting_zombie = 1; + wait( time ); + level.electrocuting_zombie = 0; +} + +zap_zombie( zombie ) +{ + if ( isdefined( zombie.ignore_electric_trap ) && zombie.ignore_electric_trap ) + return; + + if ( zombie.health > level.etrap_damage ) + { + zombie dodamage( level.etrap_damage, self.origin ); + zombie.ignore_electric_trap = 1; + return; + } + + self playsound( "wpn_zmb_electrap_zap" ); + + if ( !( isdefined( level.electrocuting_zombie ) && level.electrocuting_zombie ) ) + { + thread electrocution_lockout( 2 ); + zombie thread play_elec_vocals(); + zombie thread maps\mp\zombies\_zm_traps::electroctute_death_fx(); + zombie.is_on_fire = 0; + zombie notify( "stop_flame_damage" ); + } + + zombie thread electrictrapkill( self ); +} + +etrap_choke() +{ + if ( !isdefined( level.etrap_choke_count ) ) + level.etrap_choke_count = 0; + + level.etrap_choke_count++; + + if ( !( level.etrap_choke_count >= 5 ) ) + { + wait 0.05; + level.etrap_choke_count = 0; + } +} + +electrictrapthink( weapon, electricradius ) +{ + weapon endon( "death" ); + radiussquared = electricradius * electricradius; + + while ( isdefined( weapon ) ) + { + if ( weapon.power_on && gettime() - weapon.power_on_time > 2000 ) + { + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( !isdefined( zombie ) || !isalive( zombie ) ) + continue; + + if ( isdefined( zombie.ignore_electric_trap ) && zombie.ignore_electric_trap ) + continue; + + if ( distancesquared( weapon.origin, zombie.origin ) < radiussquared ) + { + weapon zap_zombie( zombie ); + wait 0.15; + } + + etrap_choke(); + } + + players = get_players(); + + foreach ( player in players ) + { + if ( is_player_valid( player ) && distancesquared( weapon.origin, player.origin ) < radiussquared ) + { + player thread maps\mp\zombies\_zm_traps::player_elec_damage(); + etrap_choke(); + } + + etrap_choke(); + } + } + + wait 0.1; + } +} + +electrictrapkill( weapon ) +{ + self endon( "death" ); + wait( randomfloatrange( 0.1, 0.4 ) ); + self dodamage( self.health + 666, self.origin ); +} + +electrictrapdecay( weapon ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_electrictrap_zm_taken" ); + + while ( isdefined( weapon ) ) + { + if ( weapon.power_on ) + { + self.electrictrap_health--; + + if ( self.electrictrap_health <= 0 ) + { + self cleanupoldtrap(); + self.electrictrap_health = undefined; + self thread maps\mp\zombies\_zm_equipment::equipment_release( "equip_electrictrap_zm" ); + return; + } + } + + wait 1; + } +} + +debugelectrictrap( radius ) +{ +/# + while ( isdefined( self ) ) + { + if ( getdvarint( _hash_EB512CB7 ) ) + circle( self.origin, radius, ( 1, 1, 1 ), 0, 1, 1 ); + + wait 0.05; + } +#/ +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_equip_gasmask.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_equip_gasmask.gsc new file mode 100644 index 0000000..bdf6897 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_equip_gasmask.gsc @@ -0,0 +1,215 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_laststand; + +init() +{ + if ( !maps\mp\zombies\_zm_equipment::is_equipment_included( "equip_gasmask_zm" ) ) + return; + + registerclientfield( "toplayer", "gasmaskoverlay", 16000, 1, "int" ); + maps\mp\zombies\_zm_equipment::register_equipment( "equip_gasmask_zm", &"ZOMBIE_EQUIP_GASMASK_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_GASMASK_HOWTO", undefined, "gasmask", ::gasmask_activation_watcher_thread ); + level.deathcard_spawn_func = ::remove_gasmask_on_player_bleedout; + precacheitem( "lower_equip_gasmask_zm" ); + onplayerconnect_callback( ::gasmask_on_player_connect ); +} + +gasmask_on_player_connect() +{ + +} + +gasmask_removed_watcher_thread() +{ + self notify( "only_one_gasmask_removed_thread" ); + self endon( "only_one_gasmask_removed_thread" ); + self endon( "disconnect" ); + + self waittill( "equip_gasmask_zm_taken" ); + + if ( isdefined( level.zombiemode_gasmask_reset_player_model ) ) + { + ent_num = self.characterindex; + + if ( isdefined( self.zm_random_char ) ) + ent_num = self.zm_random_char; + + self [[ level.zombiemode_gasmask_reset_player_model ]]( ent_num ); + } + + if ( isdefined( level.zombiemode_gasmask_reset_player_viewmodel ) ) + { + ent_num = self.characterindex; + + if ( isdefined( self.zm_random_char ) ) + ent_num = self.zm_random_char; + + self [[ level.zombiemode_gasmask_reset_player_viewmodel ]]( ent_num ); + } + + self setclientfieldtoplayer( "gasmaskoverlay", 0 ); +} + +gasmask_activation_watcher_thread() +{ + self endon( "zombified" ); + self endon( "disconnect" ); + self endon( "equip_gasmask_zm_taken" ); + self thread gasmask_removed_watcher_thread(); + self thread remove_gasmask_on_game_over(); + + if ( isdefined( level.zombiemode_gasmask_set_player_model ) ) + { + ent_num = self.characterindex; + + if ( isdefined( self.zm_random_char ) ) + ent_num = self.zm_random_char; + + self [[ level.zombiemode_gasmask_set_player_model ]]( ent_num ); + } + + if ( isdefined( level.zombiemode_gasmask_set_player_viewmodel ) ) + { + ent_num = self.characterindex; + + if ( isdefined( self.zm_random_char ) ) + ent_num = self.zm_random_char; + + self [[ level.zombiemode_gasmask_set_player_viewmodel ]]( ent_num ); + } + + while ( true ) + { + self waittill_either( "equip_gasmask_zm_activate", "equip_gasmask_zm_deactivate" ); + + if ( self maps\mp\zombies\_zm_equipment::is_equipment_active( "equip_gasmask_zm" ) ) + { + self increment_is_drinking(); + self setactionslot( 1, "" ); + + if ( isdefined( level.zombiemode_gasmask_set_player_model ) ) + { + ent_num = self.characterindex; + + if ( isdefined( self.zm_random_char ) ) + ent_num = self.zm_random_char; + + self [[ level.zombiemode_gasmask_change_player_headmodel ]]( ent_num, 1 ); + } + + clientnotify( "gmsk2" ); + + self waittill( "weapon_change_complete" ); + + self setclientfieldtoplayer( "gasmaskoverlay", 1 ); + } + else + { + self increment_is_drinking(); + self setactionslot( 1, "" ); + + if ( isdefined( level.zombiemode_gasmask_set_player_model ) ) + { + ent_num = self.characterindex; + + if ( isdefined( self.zm_random_char ) ) + ent_num = self.zm_random_char; + + self [[ level.zombiemode_gasmask_change_player_headmodel ]]( ent_num, 0 ); + } + + self takeweapon( "equip_gasmask_zm" ); + self giveweapon( "lower_equip_gasmask_zm" ); + self switchtoweapon( "lower_equip_gasmask_zm" ); + wait 0.05; + self setclientfieldtoplayer( "gasmaskoverlay", 0 ); + + self waittill( "weapon_change_complete" ); + + self takeweapon( "lower_equip_gasmask_zm" ); + self giveweapon( "equip_gasmask_zm" ); + } + + if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + if ( self is_multiple_drinking() ) + { + self decrement_is_drinking(); + self setactionslot( 1, "weapon", "equip_gasmask_zm" ); + self notify( "equipment_select_response_done" ); + continue; + } + else if ( isdefined( self.prev_weapon_before_equipment_change ) && self hasweapon( self.prev_weapon_before_equipment_change ) ) + { + if ( self.prev_weapon_before_equipment_change != self getcurrentweapon() ) + { + self switchtoweapon( self.prev_weapon_before_equipment_change ); + + self waittill( "weapon_change_complete" ); + } + } + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + { + if ( primaryweapons[0] != self getcurrentweapon() ) + { + self switchtoweapon( primaryweapons[0] ); + + self waittill( "weapon_change_complete" ); + } + } + else + self switchtoweapon( get_player_melee_weapon() ); + } + } + + self setactionslot( 1, "weapon", "equip_gasmask_zm" ); + + if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) ) + self decrement_is_drinking(); + + self notify( "equipment_select_response_done" ); + } +} + +remove_gasmask_on_player_bleedout() +{ + self setclientfieldtoplayer( "gasmaskoverlay", 0 ); + wait_network_frame(); + wait_network_frame(); + self setclientfieldtoplayer( "gasmaskoverlay", 1 ); +} + +remove_gasmask_on_game_over() +{ + self endon( "equip_gasmask_zm_taken" ); + + level waittill( "pre_end_game" ); + + self setclientfieldtoplayer( "gasmaskoverlay", 0 ); +} + +gasmask_active() +{ + return self maps\mp\zombies\_zm_equipment::is_equipment_active( "equip_gasmask_zm" ); +} + +gasmask_debug_print( msg, color ) +{ +/# + if ( !getdvarint( _hash_4D1BCA99 ) ) + return; + + if ( !isdefined( color ) ) + color = ( 1, 1, 1 ); + + print3d( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), msg, color, 1, 1, 40 ); +#/ +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_equip_hacker.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_equip_hacker.gsc new file mode 100644 index 0000000..0e4a55c --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_equip_hacker.gsc @@ -0,0 +1,808 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_equip_hacker; + +init() +{ + if ( !maps\mp\zombies\_zm_equipment::is_equipment_included( "equip_hacker_zm" ) ) + return; + + maps\mp\zombies\_zm_equipment::register_equipment( "equip_hacker_zm", &"ZOMBIE_EQUIP_HACKER_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_HACKER_HOWTO", undefined, "hacker" ); + level._hackable_objects = []; + level._pooled_hackable_objects = []; + onplayerconnect_callback( ::hacker_on_player_connect ); + level thread hack_trigger_think(); + level thread hacker_trigger_pool_think(); + level thread hacker_round_reward(); + + if ( getdvarint( _hash_53BD7080 ) == 1 ) + level thread hacker_debug(); +} + +hacker_round_reward() +{ + while ( true ) + { + level waittill( "end_of_round" ); + + if ( !isdefined( level._from_nml ) ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i] get_player_equipment() ) && players[i] get_player_equipment() == "equip_hacker_zm" ) + { + if ( isdefined( players[i].equipment_got_in_round["equip_hacker_zm"] ) ) + { + got_in_round = players[i].equipment_got_in_round["equip_hacker_zm"]; + rounds_kept = level.round_number - got_in_round; + rounds_kept -= 1; + + if ( rounds_kept > 0 ) + { + rounds_kept = min( rounds_kept, 5 ); + score = rounds_kept * 500; + players[i] maps\mp\zombies\_zm_score::add_to_player_score( int( score ) ); + } + } + } + } + } + else + level._from_nml = undefined; + } +} + +hacker_debug() +{ + while ( true ) + { + for ( i = 0; i < level._hackable_objects.size; i++ ) + { + hackable = level._hackable_objects[i]; + + if ( isdefined( hackable.pooled ) && hackable.pooled ) + { + if ( isdefined( hackable._trigger ) ) + { + col = vectorscale( ( 0, 1, 0 ), 255.0 ); + + if ( isdefined( hackable.custom_debug_color ) ) + col = hackable.custom_debug_color; +/# + print3d( hackable.origin, "+", col, 1, 1 ); +#/ + } + else + { +/# + print3d( hackable.origin, "+", vectorscale( ( 0, 0, 1 ), 255.0 ), 1, 1 ); +#/ + } + + continue; + } +/# + print3d( hackable.origin, "+", vectorscale( ( 1, 0, 0 ), 255.0 ), 1, 1 ); +#/ + } + + wait 0.1; + } +} + +hacker_trigger_pool_think() +{ + if ( !isdefined( level._zombie_hacker_trigger_pool_size ) ) + level._zombie_hacker_trigger_pool_size = 8; + + pool_active = 0; + level._hacker_pool = []; + + while ( true ) + { + if ( pool_active ) + { + if ( !any_hackers_active() ) + destroy_pooled_items(); + else + { + sweep_pooled_items(); + add_eligable_pooled_items(); + } + } + else if ( any_hackers_active() ) + pool_active = 1; + + wait 0.1; + } +} + +destroy_pooled_items() +{ + pool_active = 0; + + for ( i = 0; i < level._hacker_pool.size; i++ ) + { + level._hacker_pool[i]._trigger delete(); + level._hacker_pool[i]._trigger = undefined; + } + + level._hacker_pool = []; +} + +sweep_pooled_items() +{ + new_hacker_pool = []; + + for ( i = 0; i < level._hacker_pool.size; i++ ) + { + if ( level._hacker_pool[i] should_pooled_object_exist() ) + { + new_hacker_pool[new_hacker_pool.size] = level._hacker_pool[i]; + continue; + } + + if ( isdefined( level._hacker_pool[i]._trigger ) ) + level._hacker_pool[i]._trigger delete(); + + level._hacker_pool[i]._trigger = undefined; + } + + level._hacker_pool = new_hacker_pool; +} + +should_pooled_object_exist() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] hacker_active() ) + { + if ( isdefined( self.entity ) ) + { + if ( self.entity != players[i] ) + { + if ( distance2dsquared( players[i].origin, self.entity.origin ) <= self.radius * self.radius ) + return true; + } + } + else if ( distance2dsquared( players[i].origin, self.origin ) <= self.radius * self.radius ) + return true; + } + } + + return false; +} + +add_eligable_pooled_items() +{ + candidates = []; + + for ( i = 0; i < level._hackable_objects.size; i++ ) + { + hackable = level._hackable_objects[i]; + + if ( isdefined( hackable.pooled ) && hackable.pooled && !isdefined( hackable._trigger ) ) + { + if ( !isinarray( level._hacker_pool, hackable ) ) + { + if ( hackable should_pooled_object_exist() ) + candidates[candidates.size] = hackable; + } + } + } + + for ( i = 0; i < candidates.size; i++ ) + { + candidate = candidates[i]; + height = 72; + radius = 32; + + if ( isdefined( candidate.radius ) ) + radius = candidate.radius; + + if ( isdefined( candidate.height ) ) + height = candidate.height; + + trigger = spawn( "trigger_radius_use", candidate.origin, 0, radius, height ); + trigger usetriggerrequirelookat(); + trigger triggerignoreteam(); + trigger setcursorhint( "HINT_NOICON" ); + trigger.radius = radius; + trigger.height = height; + trigger.beinghacked = 0; + candidate._trigger = trigger; + level._hacker_pool[level._hacker_pool.size] = candidate; + } +} + +get_hackable_trigger() +{ + if ( isdefined( self.door ) ) + return self.door; + else if ( isdefined( self.perk ) ) + return self.perk; + else if ( isdefined( self.window ) ) + return self.window.unitrigger_stub.trigger; + else if ( isdefined( self.classname ) && getsubstr( self.classname, 0, 7 ) == "trigger_" ) + return self; +} + +any_hackers_active() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] hacker_active() ) + return true; + } + + return false; +} + +register_hackable( name, callback_func, qualifier_func ) +{ + structs = getstructarray( name, "script_noteworthy" ); + + if ( !isdefined( structs ) ) + { +/# + println( "Error: register_hackable called on script_noteworthy " + name + " but no such structs exist." ); +#/ + return; + } + + for ( i = 0; i < structs.size; i++ ) + { + if ( !isinarray( level._hackable_objects, structs[i] ) ) + { + structs[i]._hack_callback_func = callback_func; + structs[i]._hack_qualifier_func = qualifier_func; + structs[i].pooled = level._hacker_pooled; + + if ( isdefined( structs[i].targetname ) ) + structs[i].hacker_target = getent( structs[i].targetname, "targetname" ); + + level._hackable_objects[level._hackable_objects.size] = structs[i]; + + if ( isdefined( level._hacker_pooled ) ) + level._pooled_hackable_objects[level._pooled_hackable_objects.size] = structs[i]; + + structs[i] thread hackable_object_thread(); + wait_network_frame(); + } + } +} + +register_hackable_struct( struct, callback_func, qualifier_func ) +{ + if ( !isinarray( level._hackable_objects, struct ) ) + { + struct._hack_callback_func = callback_func; + struct._hack_qualifier_func = qualifier_func; + struct.pooled = level._hacker_pooled; + + if ( isdefined( struct.targetname ) ) + struct.hacker_target = getent( struct.targetname, "targetname" ); + + level._hackable_objects[level._hackable_objects.size] = struct; + + if ( isdefined( level._hacker_pooled ) ) + level._pooled_hackable_objects[level._pooled_hackable_objects.size] = struct; + + struct thread hackable_object_thread(); + } +} + +register_pooled_hackable_struct( struct, callback_func, qualifier_func ) +{ + level._hacker_pooled = 1; + register_hackable_struct( struct, callback_func, qualifier_func ); + level._hacker_pooled = undefined; +} + +register_pooled_hackable( name, callback_func, qualifier_func ) +{ + level._hacker_pooled = 1; + register_hackable( name, callback_func, qualifier_func ); + level._hacker_pooled = undefined; +} + +deregister_hackable_struct( struct ) +{ + if ( isinarray( level._hackable_objects, struct ) ) + { + new_list = []; + + for ( i = 0; i < level._hackable_objects.size; i++ ) + { + if ( level._hackable_objects[i] != struct ) + { + new_list[new_list.size] = level._hackable_objects[i]; + continue; + } + + level._hackable_objects[i] notify( "hackable_deregistered" ); + + if ( isdefined( level._hackable_objects[i]._trigger ) ) + level._hackable_objects[i]._trigger delete(); + + if ( isdefined( level._hackable_objects[i].pooled ) && level._hackable_objects[i].pooled ) + { + arrayremovevalue( level._hacker_pool, level._hackable_objects[i] ); + arrayremovevalue( level._pooled_hackable_objects, level._hackable_objects[i] ); + } + } + + level._hackable_objects = new_list; + } +} + +deregister_hackable( noteworthy ) +{ + new_list = []; + + for ( i = 0; i < level._hackable_objects.size; i++ ) + { + if ( !isdefined( level._hackable_objects[i].script_noteworthy ) || level._hackable_objects[i].script_noteworthy != noteworthy ) + new_list[new_list.size] = level._hackable_objects[i]; + else + { + level._hackable_objects[i] notify( "hackable_deregistered" ); + + if ( isdefined( level._hackable_objects[i]._trigger ) ) + level._hackable_objects[i]._trigger delete(); + } + + if ( isdefined( level._hackable_objects[i].pooled ) && level._hackable_objects[i].pooled ) + arrayremovevalue( level._hacker_pool, level._hackable_objects[i] ); + } + + level._hackable_objects = new_list; +} + +hack_trigger_think() +{ + while ( true ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + for ( j = 0; j < level._hackable_objects.size; j++ ) + { + hackable = level._hackable_objects[j]; + + if ( isdefined( hackable._trigger ) ) + { + qualifier_passed = 1; + + if ( isdefined( hackable._hack_qualifier_func ) ) + qualifier_passed = hackable [[ hackable._hack_qualifier_func ]]( player ); + + if ( player hacker_active() && qualifier_passed && !hackable._trigger.beinghacked ) + { + hackable._trigger setinvisibletoplayer( player, 0 ); + continue; + } + + hackable._trigger setinvisibletoplayer( player, 1 ); + } + } + } + + wait 0.1; + } +} + +is_facing( facee ) +{ + orientation = self getplayerangles(); + forwardvec = anglestoforward( orientation ); + forwardvec2d = ( forwardvec[0], forwardvec[1], 0 ); + unitforwardvec2d = vectornormalize( forwardvec2d ); + tofaceevec = facee.origin - self.origin; + tofaceevec2d = ( tofaceevec[0], tofaceevec[1], 0 ); + unittofaceevec2d = vectornormalize( tofaceevec2d ); + dotproduct = vectordot( unitforwardvec2d, unittofaceevec2d ); + dot_limit = 0.8; + + if ( isdefined( facee.dot_limit ) ) + dot_limit = facee.dot_limit; + + return dotproduct > dot_limit; +} + +can_hack( hackable ) +{ + if ( !isalive( self ) ) + return false; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + return false; + + if ( !self hacker_active() ) + return false; + + if ( !isdefined( hackable._trigger ) ) + return false; + + if ( isdefined( hackable.player ) ) + { + if ( hackable.player != self ) + return false; + } + + if ( self throwbuttonpressed() ) + return false; + + if ( self fragbuttonpressed() ) + return false; + + if ( isdefined( hackable._hack_qualifier_func ) ) + { + if ( !hackable [[ hackable._hack_qualifier_func ]]( self ) ) + return false; + } + + if ( !isinarray( level._hackable_objects, hackable ) ) + return false; + + radsquared = 1024; + + if ( isdefined( hackable.radius ) ) + radsquared = hackable.radius * hackable.radius; + + origin = hackable.origin; + + if ( isdefined( hackable.entity ) ) + origin = hackable.entity.origin; + + if ( distance2dsquared( self.origin, origin ) > radsquared ) + return false; + + if ( !isdefined( hackable.no_touch_check ) && !self istouching( hackable._trigger ) ) + return false; + + if ( !self is_facing( hackable ) ) + return false; + + if ( !isdefined( hackable.no_sight_check ) && !sighttracepassed( self.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), origin, 0, undefined ) ) + return false; + + if ( !isdefined( hackable.no_bullet_trace ) && !bullettracepassed( self.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), origin, 0, undefined ) ) + return false; + + return true; +} + +is_hacking( hackable ) +{ + return can_hack( hackable ) && self usebuttonpressed(); +} + +set_hack_hint_string() +{ + if ( isdefined( self._trigger ) ) + { + if ( isdefined( self.custom_string ) ) + self._trigger sethintstring( self.custom_string ); + else if ( !isdefined( self.script_int ) || self.script_int <= 0 ) + self._trigger sethintstring( &"ZOMBIE_HACK_NO_COST" ); + else + self._trigger sethintstring( &"ZOMBIE_HACK", self.script_int ); + } +} + +tidy_on_deregister( hackable ) +{ + self endon( "clean_up_tidy_up" ); + + hackable waittill( "hackable_deregistered" ); + + if ( isdefined( self.hackerprogressbar ) ) + self.hackerprogressbar maps\mp\gametypes_zm\_hud_util::destroyelem(); + + if ( isdefined( self.hackertexthud ) ) + self.hackertexthud destroy(); +} + +hacker_do_hack( hackable ) +{ + timer = 0; + hacked = 0; + hackable._trigger.beinghacked = 1; + + if ( !isdefined( self.hackerprogressbar ) ) + self.hackerprogressbar = self maps\mp\gametypes_zm\_hud_util::createprimaryprogressbar(); + + if ( !isdefined( self.hackertexthud ) ) + self.hackertexthud = newclienthudelem( self ); + + hack_duration = hackable.script_float; + + if ( self hasperk( "specialty_fastreload" ) ) + hack_duration *= 0.66; + + hack_duration = max( 1.5, hack_duration ); + self thread tidy_on_deregister( hackable ); + self.hackerprogressbar maps\mp\gametypes_zm\_hud_util::updatebar( 0.01, 1 / hack_duration ); + self.hackertexthud.alignx = "center"; + self.hackertexthud.aligny = "middle"; + self.hackertexthud.horzalign = "center"; + self.hackertexthud.vertalign = "bottom"; + self.hackertexthud.y = -113; + + if ( issplitscreen() ) + self.hackertexthud.y = -107; + + self.hackertexthud.foreground = 1; + self.hackertexthud.font = "default"; + self.hackertexthud.fontscale = 1.8; + self.hackertexthud.alpha = 1; + self.hackertexthud.color = ( 1, 1, 1 ); + self.hackertexthud settext( &"ZOMBIE_HACKING" ); + self playloopsound( "zmb_progress_bar", 0.5 ); + + while ( self is_hacking( hackable ) ) + { + wait 0.05; + timer += 0.05; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + break; + + if ( timer >= hack_duration ) + { + hacked = 1; + break; + } + } + + self stoploopsound( 0.5 ); + + if ( hacked ) + self playsound( "vox_mcomp_hack_success" ); + else + self playsound( "vox_mcomp_hack_fail" ); + + if ( isdefined( self.hackerprogressbar ) ) + self.hackerprogressbar maps\mp\gametypes_zm\_hud_util::destroyelem(); + + if ( isdefined( self.hackertexthud ) ) + self.hackertexthud destroy(); + + hackable set_hack_hint_string(); + + if ( isdefined( hackable._trigger ) ) + hackable._trigger.beinghacked = 0; + + self notify( "clean_up_tidy_up" ); + return hacked; +} + +lowreadywatcher( player ) +{ + player endon( "disconnected" ); + self endon( "kill_lowreadywatcher" ); + + self waittill( "hackable_deregistered" ); +} + +hackable_object_thread() +{ + self endon( "hackable_deregistered" ); + height = 72; + radius = 64; + + if ( isdefined( self.radius ) ) + radius = self.radius; + + if ( isdefined( self.height ) ) + height = self.height; + + if ( !isdefined( self.pooled ) ) + { + trigger = spawn( "trigger_radius_use", self.origin, 0, radius, height ); + trigger usetriggerrequirelookat(); + trigger setcursorhint( "HINT_NOICON" ); + trigger.radius = radius; + trigger.height = height; + trigger.beinghacked = 0; + self._trigger = trigger; + } + + cost = 0; + + if ( isdefined( self.script_int ) ) + cost = self.script_int; + + duration = 1.0; + + if ( isdefined( self.script_float ) ) + duration = self.script_float; + + while ( true ) + { + wait 0.1; + + if ( !isdefined( self._trigger ) ) + continue; + + players = get_players(); + + if ( isdefined( self._trigger ) ) + { + if ( isdefined( self.entity ) ) + { + self.origin = self.entity.origin; + self._trigger.origin = self.entity.origin; + + if ( isdefined( self.trigger_offset ) ) + self._trigger.origin += self.trigger_offset; + } + } + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] can_hack( self ) ) + { + self set_hack_hint_string(); + break; + } + } + + for ( i = 0; i < players.size; i++ ) + { + hacker = players[i]; + + if ( !hacker is_hacking( self ) ) + continue; + + if ( hacker.score >= cost || cost <= 0 ) + { + self thread lowreadywatcher( hacker ); + hack_success = hacker hacker_do_hack( self ); + self notify( "kill_lowreadywatcher" ); + + if ( isdefined( hacker ) ) + { + + } + + if ( isdefined( hacker ) && hack_success ) + { + if ( cost ) + { + if ( cost > 0 ) + hacker maps\mp\zombies\_zm_score::minus_to_player_score( cost ); + else + hacker maps\mp\zombies\_zm_score::add_to_player_score( cost * -1 ); + } + + hacker notify( "successful_hack" ); + + if ( isdefined( self._hack_callback_func ) ) + self thread [[ self._hack_callback_func ]]( hacker ); + } + + continue; + } + + hacker play_sound_on_ent( "no_purchase" ); + hacker maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money", undefined, 1 ); + } + } +} + +hacker_on_player_connect() +{ + struct = spawnstruct(); + struct.origin = self.origin; + struct.radius = 48; + struct.height = 64; + struct.script_float = 10; + struct.script_int = 500; + struct.entity = self; + struct.trigger_offset = vectorscale( ( 0, 0, 1 ), 48.0 ); + register_pooled_hackable_struct( struct, ::player_hack, ::player_qualifier ); + struct thread player_hack_disconnect_watcher( self ); +} + +player_hack_disconnect_watcher( player ) +{ + player waittill( "disconnect" ); + + deregister_hackable_struct( self ); +} + +player_hack( hacker ) +{ + if ( isdefined( self.entity ) ) + self.entity maps\mp\zombies\_zm_score::player_add_points( "hacker_transfer", 500 ); + + if ( isdefined( hacker ) ) + hacker thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "hack_plr" ); +} + +player_qualifier( player ) +{ + if ( player == self.entity ) + return false; + + if ( self.entity maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + return false; + + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + return false; + + if ( isdefined( self.entity.sessionstate == "spectator" ) && self.entity.sessionstate == "spectator" ) + return false; + + return true; +} + +hide_hint_when_hackers_active( custom_logic_func, custom_logic_func_param ) +{ + invis_to_any = 0; + + while ( true ) + { + if ( isdefined( custom_logic_func ) ) + self [[ custom_logic_func ]]( custom_logic_func_param ); + + if ( maps\mp\zombies\_zm_equip_hacker::any_hackers_active() ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] hacker_active() ) + { + self setinvisibletoplayer( players[i], 1 ); + invis_to_any = 1; + continue; + } + + self setinvisibletoplayer( players[i], 0 ); + } + } + else if ( invis_to_any ) + { + invis_to_any = 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + self setinvisibletoplayer( players[i], 0 ); + } + + wait 0.1; + } +} + +hacker_debug_print( msg, color ) +{ +/# + if ( !getdvarint( _hash_428DE100 ) ) + return; + + if ( !isdefined( color ) ) + color = ( 1, 1, 1 ); + + print3d( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), msg, color, 1, 1, 40 ); +#/ +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_equip_turbine.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_equip_turbine.gsc new file mode 100644 index 0000000..a08929c --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_equip_turbine.gsc @@ -0,0 +1,754 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\zombies\_zm_power; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_buildables; + +init( hint = &"ZOMBIE_EQUIP_TURBINE_PICKUP_HINT_STRING", howto = &"ZOMBIE_EQUIP_TURBINE_HOWTO" ) +{ + if ( !maps\mp\zombies\_zm_equipment::is_equipment_included( "equip_turbine_zm" ) ) + return; + + level.turbine_name = "equip_turbine_zm"; + maps\mp\zombies\_zm_equipment::register_equipment( "equip_turbine_zm", hint, howto, "turbine_zm_icon", "turbine", undefined, ::transferturbine, ::dropturbine, ::pickupturbine, ::placeturbine ); + maps\mp\zombies\_zm_equipment::add_placeable_equipment( "equip_turbine_zm", "p6_anim_zm_buildable_turbine", ::destroy_placed_turbine ); + level thread onplayerconnect(); + maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "equip_turbine", hint ); + level._effect["turbine_on"] = loadfx( "maps/zombie/fx_zmb_tranzit_wind_turbine_on" ); + level._effect["turbine_med"] = loadfx( "maps/zombie/fx_zmb_tranzit_wind_turbine_med" ); + level._effect["turbine_low"] = loadfx( "maps/zombie/fx_zmb_tranzit_wind_turbine_low" ); + level._effect["turbine_aoe"] = loadfx( "maps/zombie/fx_zmb_tranzit_wind_turbine_aoe" ); + level._turbine_disappear_fx = loadfx( "maps/zombie/fx_zmb_tranzit_turbine_explo" ); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread onplayerspawned(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + self thread setupwatchers(); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread watchturbineuse(); + } +} + +setupwatchers() +{ + self waittill( "weapon_watchers_created" ); + + watcher = maps\mp\gametypes_zm\_weaponobjects::getweaponobjectwatcher( "equip_turbine" ); + watcher.onspawnretrievetriggers = maps\mp\zombies\_zm_equipment::equipment_onspawnretrievableweaponobject; +} + +watchturbineuse() +{ + self notify( "watchTurbineUse" ); + self endon( "watchTurbineUse" ); + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "equipment_placed", weapon, weapname ); + + if ( weapname == level.turbine_name ) + { + self cleanupoldturbine(); + self.buildableturbine = weapon; + self thread startturbinedeploy( weapon ); + level notify( "turbine_deployed" ); + } + } +} + +cleanupoldturbine( preserve_state ) +{ + if ( isdefined( self.localpower ) ) + { + maps\mp\zombies\_zm_power::end_local_power( self.localpower ); + self notify( "depower_on_disconnect" ); + self.localpower = undefined; + self.turbine_power_is_on = 0; + } + + self.turbine_is_powering_on = 0; + + if ( isdefined( self.buildableturbine ) ) + { + if ( isdefined( self.buildableturbine.stub ) ) + { + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildableturbine.stub ); + self.buildableturbine.stub = undefined; + } + + self.buildableturbine stoploopsound(); + self.buildableturbine delete(); + + if ( !( isdefined( preserve_state ) && preserve_state ) ) + { + self.turbine_health = undefined; + self.turbine_emped = undefined; + self.turbine_emp_time = undefined; + } + } +} + +watchforcleanup() +{ + self notify( "turbine_cleanup" ); + self endon( "turbine_cleanup" ); + evt = self waittill_any_return( "death_or_disconnect", "equip_turbine_zm_taken", "equip_turbine_zm_pickup" ); + + if ( isdefined( self ) ) + self cleanupoldturbine( evt == "equip_turbine_zm_pickup" ); +} + +depower_on_disconnect( localpower ) +{ + self notify( "depower_on_disconnect" ); + self endon( "depower_on_disconnect" ); + + self waittill( "disconnect" ); + + if ( isdefined( localpower ) ) + maps\mp\zombies\_zm_power::end_local_power( localpower ); +} + +placeturbine( origin, angles ) +{ + item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_turbine", "equip_turbine_zm", origin, angles ); + return item; +} + +dropturbine() +{ + item = thread maps\mp\zombies\_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_turbine", "equip_turbine_zm", self.origin, self.angles ); + + if ( isdefined( item ) ) + { + item.turbine_power_on = self.turbine_power_on; + item.turbine_power_level = self.turbine_power_level; + item.turbine_round_start = self.turbine_round_start; + item.turbine_health = self.turbine_health; + item.turbine_emped = self.turbine_emped; + item.turbine_emp_time = self.turbine_emp_time; + } + + self.turbine_is_powering_on = undefined; + self.turbine_power_on = undefined; + self.turbine_power_level = undefined; + self.turbine_round_start = undefined; + self.turbine_health = undefined; + self.turbine_emped = undefined; + self.turbine_emp_time = undefined; + return item; +} + +pickupturbine( item ) +{ + item.owner = self; + self.turbine_power_on = item.turbine_power_on; + item.turbine_power_on = undefined; + self.turbine_power_level = item.turbine_power_level; + self.turbine_round_start = item.turbine_round_start; + self.turbine_health = item.turbine_health; + item.turbine_health = undefined; + item.turbine_power_level = undefined; + item.turbine_round_start = undefined; + self.turbine_emped = item.turbine_emped; + self.turbine_emp_time = item.turbine_emp_time; + item.turbine_emped = undefined; + item.turbine_emp_time = undefined; + self.turbine_is_powering_on = undefined; +} + +transferturbine( fromplayer, toplayer ) +{ + while ( isdefined( toplayer.turbine_is_powering_on ) && toplayer.turbine_is_powering_on || isdefined( fromplayer.turbine_is_powering_on ) && fromplayer.turbine_is_powering_on ) + wait 0.05; + + if ( isdefined( fromplayer.buildableturbine ) && ( isdefined( fromplayer.buildableturbine.dying ) && fromplayer.buildableturbine.dying ) ) + fromplayer cleanupoldturbine( 0 ); + + if ( isdefined( toplayer.buildableturbine ) && ( isdefined( toplayer.buildableturbine.dying ) && toplayer.buildableturbine.dying ) ) + toplayer cleanupoldturbine( 0 ); + + buildableturbine = toplayer.buildableturbine; + localpower = toplayer.localpower; + turbine_power_on = toplayer.turbine_power_on; + turbine_power_is_on = toplayer.turbine_power_is_on; + turbine_power_level = toplayer.turbine_power_level; + turbine_round_start = toplayer.turbine_round_start; + turbine_health = toplayer.turbine_health; + turbine_emped = toplayer.turbine_emped; + turbine_emp_time = toplayer.turbine_emp_time; + toplayer.buildableturbine = fromplayer.buildableturbine; + fromplayer.buildableturbine = buildableturbine; + toplayer.localpower = fromplayer.localpower; + fromplayer.localpower = localpower; + toplayer.turbine_power_on = fromplayer.turbine_power_on; + fromplayer.turbine_power_on = turbine_power_on; + toplayer.turbine_power_is_on = fromplayer.turbine_power_is_on; + fromplayer.turbine_power_is_on = turbine_power_is_on; + toplayer.turbine_power_level = fromplayer.turbine_power_level; + toplayer.turbine_round_start = fromplayer.turbine_round_start; + fromplayer.turbine_power_level = turbine_power_level; + fromplayer.turbine_round_start = turbine_round_start; + toplayer.turbine_health = fromplayer.turbine_health; + fromplayer.turbine_health = turbine_health; + toplayer.turbine_emped = fromplayer.turbine_emped; + fromplayer.turbine_emped = turbine_emped; + toplayer.turbine_emp_time = fromplayer.turbine_emp_time; + fromplayer.turbine_emp_time = turbine_emp_time; + toplayer.turbine_is_powering_on = undefined; + fromplayer.turbine_is_powering_on = undefined; + toplayer notify( "equip_turbine_zm_taken" ); + toplayer.buildableturbine.original_owner = toplayer; + toplayer thread startturbinedeploy( toplayer.buildableturbine ); + fromplayer notify( "equip_turbine_zm_taken" ); + + if ( isdefined( fromplayer.buildableturbine ) ) + { + fromplayer thread startturbinedeploy( fromplayer.buildableturbine ); + fromplayer.buildableturbine.original_owner = fromplayer; + fromplayer.buildableturbine.owner = fromplayer; + } + else + fromplayer maps\mp\zombies\_zm_equipment::equipment_release( "equip_turbine_zm" ); +} + +startturbinedeploy( weapon ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_turbine_zm_taken" ); + self thread watchforcleanup(); + origin = weapon.origin; + powerradius = 335; + + if ( !isdefined( self.turbine_health ) ) + { + self.turbine_health = 1200; + self.turbine_power_level = 4; + self.turbine_power_on = 1; + self.turbine_is_powering_on = undefined; + } + + if ( !isdefined( self.turbine_round_start ) ) + { + self.turbine_round_start = level.round_number; + self.turbine_power_on = 1; + } + + self thread turbinedecay(); + self thread turbinepowerdiminish( origin, powerradius ); + + if ( isdefined( weapon ) ) + { +/# + self thread debugturbine( powerradius ); +#/ + self thread turbineaudio(); + self thread turbineanim(); + self thread turbinepowerthink( weapon, powerradius ); + + if ( isdefined( weapon.equipment_can_move ) && weapon.equipment_can_move ) + self thread turbinepowermove( weapon ); + + self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( weapon ); + + weapon waittill( "death" ); + + self thread turbinepoweroff( origin, powerradius ); + self notify( "turbine_cleanup" ); + } +} + +turbine_watch_for_emp( weapon, powerradius ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_turbine_zm_taken" ); + self.buildableturbine endon( "death" ); + + if ( !should_watch_for_emp() ) + return; + + while ( true ) + { + level waittill( "emp_detonate", origin, radius ); + + if ( distancesquared( origin, self.buildableturbine.origin ) < radius * radius ) + break; + } + + self.turbine_emped = 1; + self.turbine_emp_time = gettime(); + self notify( "turbine_power_change" ); +} + +turbinepowerthink( weapon, powerradius ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_turbine_zm_taken" ); + self.buildableturbine endon( "death" ); + origin = weapon.origin; + self thread turbine_watch_for_emp( weapon, powerradius ); + + if ( isdefined( self.turbine_power_on ) && self.turbine_power_on || isdefined( self.turbine_emped ) && self.turbine_emped ) + self thread turbinepoweron( origin, powerradius ); + + while ( isdefined( self.buildableturbine ) ) + { + self waittill( "turbine_power_change" ); + + if ( isdefined( self.turbine_emped ) && self.turbine_emped ) + { + self thread turbinepoweroff( origin, powerradius ); + + if ( isdefined( weapon ) ) + origin = weapon.origin; + + self thread turbinepoweron( origin, powerradius ); + } + else if ( !( isdefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) ) + self thread turbinepoweroff( origin, powerradius ); + else + { + if ( isdefined( weapon ) ) + origin = weapon.origin; + + self thread turbinepoweron( origin, powerradius ); + } + } +} + +turbinepowermove( weapon ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_turbine_zm_taken" ); + self.buildableturbine endon( "death" ); + origin = weapon.origin; + + while ( true ) + { + if ( origin != weapon.origin ) + { + if ( isdefined( self.localpower ) ) + self.localpower = maps\mp\zombies\_zm_power::move_local_power( self.localpower, origin ); + + origin = weapon.origin; + } + + wait 0.5; + } +} + +turbinewarmup() +{ + if ( isdefined( self.turbine_emped ) && self.turbine_emped ) + { + emp_time = level.zombie_vars["emp_perk_off_time"]; + now = gettime(); + emp_time_left = emp_time - ( now - self.turbine_emp_time ) / 1000; + + if ( emp_time_left > 0 ) + wait( emp_time_left ); + + self.turbine_emped = undefined; + self.turbine_emp_time = undefined; + } + + self.buildableturbine maps\mp\zombies\_zm_equipment::signal_equipment_activated( 3 ); + wait 0.5; + self.buildableturbine maps\mp\zombies\_zm_equipment::signal_equipment_activated( 2 ); + wait 0.5; + self.buildableturbine maps\mp\zombies\_zm_equipment::signal_equipment_activated( 1 ); + wait 0.5; +} + +turbinepoweron( origin, powerradius ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_turbine_zm_taken" ); + self.buildableturbine endon( "death" ); + + if ( !( isdefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) && !( isdefined( self.turbine_is_powering_on ) && self.turbine_is_powering_on ) && !( isdefined( self.buildableturbine.dying ) && self.buildableturbine.dying ) ) + { + self.turbine_is_powering_on = 1; + self.buildableturbine playloopsound( "zmb_turbine_loop", 2 ); + self turbinewarmup(); + + if ( isdefined( self.localpower ) ) + maps\mp\zombies\_zm_power::end_local_power( self.localpower ); + + self.localpower = undefined; + self.turbine_power_is_on = 0; + + if ( !( isdefined( self.turbine_emped ) && self.turbine_emped ) ) + { + self.localpower = maps\mp\zombies\_zm_power::add_local_power( origin, powerradius ); + self thread depower_on_disconnect( self.localpower ); + self.turbine_power_is_on = 1; + self thread turbineaudio(); + } + + self.turbine_is_powering_on = 0; + self thread turbinefx(); + self thread turbinedecay(); + } +} + +turbinepoweroff( origin, powerradius ) +{ + if ( isdefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) + { + if ( isdefined( self.localpower ) ) + maps\mp\zombies\_zm_power::end_local_power( self.localpower ); + + self notify( "depower_on_disconnect" ); + self.localpower = undefined; + self.turbine_power_is_on = 0; + self thread turbineaudio(); + + if ( !( isdefined( self.buildableturbine.dying ) && self.buildableturbine.dying ) ) + self thread turbineanim(); + } +} + +turbine_disappear_fx( origin, waittime ) +{ + if ( isdefined( waittime ) && waittime > 0 ) + wait( waittime ); + + playfx( level._turbine_disappear_fx, origin ); + + if ( isdefined( self.buildableturbine ) ) + playsoundatposition( "zmb_turbine_explo", self.buildableturbine.origin ); +} + +turbinefxonce( withaoe ) +{ + if ( isdefined( self ) && isdefined( self.buildableturbine ) && ( isdefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) ) + { + value = 0; + + switch ( self.turbine_power_level ) + { + case 4: + case 3: + value = 1; + break; + case 2: + value = 2; + break; + case 1: + value = 3; + break; + } + + if ( withaoe ) + { + if ( isdefined( self.buildableturbine.equipment_can_move ) && self.buildableturbine.equipment_can_move && ( isdefined( self.buildableturbine.move_parent.ismoving ) && self.buildableturbine.move_parent.ismoving ) ) + value |= 4; + else + value |= 8; + } + + if ( value && isdefined( self.buildableturbine ) && ( isdefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) ) + self.buildableturbine thread maps\mp\zombies\_zm_equipment::signal_equipment_activated( value ); + } +} + +turbinefx() +{ + self endon( "disconnect" ); + self endon( "equip_turbine_zm_taken" ); + + while ( isdefined( self ) && isdefined( self.buildableturbine ) && ( isdefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) ) + { + self turbinefxonce( 1 ); + wait 0.5; + self turbinefxonce( 0 ); + wait 0.5; + } +} + +turbineaudio() +{ + if ( !isdefined( self.buildableturbine ) ) + return; + + if ( !( isdefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) || isdefined( self.turbine_emped ) && self.turbine_emped ) + { + self.buildableturbine stoploopsound(); + return; + } + + self.buildableturbine playloopsound( "zmb_turbine_loop", 2 ); +} + +#using_animtree("zombie_turbine"); + +init_animtree() +{ + scriptmodelsuseanimtree( #animtree ); +} + +turbineanim( wait_for_end ) +{ + if ( !isdefined( self.buildableturbine ) ) + return; + + animlength = 0; + self.buildableturbine useanimtree( #animtree ); + + if ( isdefined( self.buildableturbine.dying ) && self.buildableturbine.dying ) + { + animlength = getanimlength( %o_zombie_buildable_turbine_death ); + self.buildableturbine setanim( %o_zombie_buildable_turbine_death ); + } + else if ( isdefined( self.turbine_emped ) && self.turbine_emped ) + { + self.buildableturbine clearanim( %o_zombie_buildable_turbine_fullpower, 0 ); + return; + } + else + { + switch ( self.turbine_power_level ) + { + case 4: + case 3: + animlength = getanimlength( %o_zombie_buildable_turbine_fullpower ); + self.buildableturbine setanim( %o_zombie_buildable_turbine_fullpower ); + break; + case 2: + animlength = getanimlength( %o_zombie_buildable_turbine_halfpower ); + self.buildableturbine setanim( %o_zombie_buildable_turbine_halfpower ); + break; + case 1: + animlength = getanimlength( %o_zombie_buildable_turbine_neardeath ); + self.buildableturbine setanim( %o_zombie_buildable_turbine_neardeath ); + break; + } + } + + if ( isdefined( wait_for_end ) && wait_for_end ) + wait( animlength ); +} + +turbinedecay() +{ + self notify( "turbineDecay" ); + self endon( "turbineDecay" ); + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_turbine_zm_taken" ); + self.buildableturbine endon( "death" ); + roundlives = 4; + + if ( !isdefined( self.turbine_power_level ) ) + self.turbine_power_level = roundlives; + + while ( self.turbine_health > 0 ) + { + old_power_level = self.turbine_power_level; + + if ( isdefined( self.turbine_emped ) && self.turbine_emped && !!( isdefined( self.turbine_is_powering_on ) && self.turbine_is_powering_on ) ) + { + emp_time = level.zombie_vars["emp_perk_off_time"]; + now = gettime(); + emp_time_left = emp_time - ( now - self.turbine_emp_time ) / 1000; + + if ( emp_time_left <= 0 ) + { + self.turbine_emped = undefined; + self.turbine_emp_time = undefined; + self.turbine_power_is_on = 0; + old_power_level = -1; + } + } + + if ( isdefined( self.turbine_emped ) && self.turbine_emped ) + self.turbine_power_level = 0; + else if ( isdefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) + { + cost = 1; + + if ( isdefined( self.localpower ) ) + cost += maps\mp\zombies\_zm_power::get_local_power_cost( self.localpower ); + + self.turbine_health -= cost; + + if ( self.turbine_health < 200 ) + self.turbine_power_level = 1; + else if ( self.turbine_health < 600 ) + self.turbine_power_level = 2; + else + self.turbine_power_level = 4; + } + + if ( old_power_level != self.turbine_power_level ) + { + self notify( "turbine_power_change" ); + self thread turbineaudio(); + + if ( !( isdefined( self.buildableturbine.dying ) && self.buildableturbine.dying ) ) + self thread turbineanim(); + } + + wait 1; + } + + self destroy_placed_turbine(); + + if ( isdefined( self.buildableturbine ) ) + turbine_disappear_fx( self.buildableturbine.origin ); + + self thread wait_and_take_equipment(); + self.turbine_health = undefined; + self.turbine_power_level = undefined; + self.turbine_round_start = undefined; + self.turbine_power_on = undefined; + self.turbine_emped = undefined; + self.turbine_emp_time = undefined; + self cleanupoldturbine(); +} + +destroy_placed_turbine() +{ + if ( isdefined( self.buildableturbine ) ) + { + if ( isdefined( self.buildableturbine.dying ) && self.buildableturbine.dying ) + { + while ( isdefined( self.buildableturbine ) ) + wait 0.05; + + return; + } + + if ( isdefined( self.buildableturbine.stub ) ) + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildableturbine.stub ); + + thread turbine_disappear_fx( self.buildableturbine.origin, 0.75 ); + self.buildableturbine.dying = 1; + self turbineanim( 1 ); + } +} + +wait_and_take_equipment() +{ + wait 0.05; + self thread maps\mp\zombies\_zm_equipment::equipment_release( "equip_turbine_zm" ); +} + +turbinepowerdiminish( origin, powerradius ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_turbine_zm_taken" ); + self.buildableturbine endon( "death" ); + + while ( !( isdefined( self.buildableturbine.dying ) && self.buildableturbine.dying ) ) + { + if ( isdefined( self.turbine_power_level ) && isdefined( self.buildableturbine ) ) + { + switch ( self.turbine_power_level ) + { + case 4: + break; + case 3: + break; + case 2: + self.turbine_power_on = 1; + wait( randomintrange( 12, 20 ) ); + self turbinepoweroff( origin, powerradius ); + self.turbine_power_on = 0; + wait( randomintrange( 3, 8 ) ); + self turbinepoweron( origin, powerradius ); + break; + case 1: + self.turbine_power_on = 1; + wait( randomintrange( 3, 7 ) ); + self turbinepoweroff( origin, powerradius ); + self.turbine_power_on = 0; + wait( randomintrange( 6, 12 ) ); + self turbinepoweron( origin, powerradius ); + break; + } + } + + wait 0.05; + } +} + +debugturbine( radius ) +{ +/# + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_turbine_zm_taken" ); + self.buildableturbine endon( "death" ); + + while ( isdefined( self.buildableturbine ) ) + { + if ( getdvarint( _hash_EB512CB7 ) ) + { + color = ( 0, 1, 0 ); + text = ""; + + if ( isdefined( self.turbine_health ) ) + text = "" + self.turbine_health + ""; + + if ( isdefined( self.buildableturbine.dying ) && self.buildableturbine.dying ) + { + text = "dying"; + color = ( 0, 0, 0 ); + } + else if ( isdefined( self.turbine_emped ) && self.turbine_emped ) + { + color = ( 0, 0, 1 ); + emp_time = level.zombie_vars["emp_perk_off_time"]; + now = gettime(); + emp_time_left = int( emp_time - ( now - self.turbine_emp_time ) / 1000 ); + text = text + " emp(" + emp_time_left + ")"; + } + else if ( isdefined( self.turbine_is_powering_on ) && self.turbine_is_powering_on ) + text += " warmup"; + else if ( isdefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) + { + if ( self.turbine_health < 200 ) + color = ( 1, 0, 0 ); + else if ( self.turbine_health < 600 ) + color = ( 1, 0.7, 0 ); + else + color = ( 1, 1, 0 ); + } + + print3d( self.buildableturbine.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), text, color, 1, 0.5, 1 ); + } + + wait 0.05; + } +#/ +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_equip_turret.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_equip_turret.gsc new file mode 100644 index 0000000..250c971 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_equip_turret.gsc @@ -0,0 +1,358 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_power; +#include maps\mp\zombies\_zm_mgturret; +#include maps\mp\zombies\_zm_buildables; + +init() +{ + if ( !maps\mp\zombies\_zm_equipment::is_equipment_included( "equip_turret_zm" ) ) + return; + + precachemodel( "p6_anim_zm_buildable_turret" ); + precacheturret( "zombie_bullet_crouch_zm" ); + level.turret_name = "equip_turret_zm"; + maps\mp\zombies\_zm_equipment::register_equipment( "equip_turret_zm", &"ZOMBIE_EQUIP_TURRET_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_TURRET_HOWTO", "turret_zm_icon", "turret", undefined, ::transferturret, ::dropturret, ::pickupturret, ::placeturret ); + maps\mp\zombies\_zm_equipment::add_placeable_equipment( "equip_turret_zm", "p6_anim_zm_buildable_turret" ); + level thread onplayerconnect(); + maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "equip_turret", &"ZOMBIE_EQUIP_TURRET_PICKUP_HINT_STRING" ); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread onplayerspawned(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + self thread setupwatchers(); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread watchturretuse(); + } +} + +setupwatchers() +{ + self waittill( "weapon_watchers_created" ); + + watcher = maps\mp\gametypes_zm\_weaponobjects::getweaponobjectwatcher( "equip_turret" ); + watcher.onspawnretrievetriggers = maps\mp\zombies\_zm_equipment::equipment_onspawnretrievableweaponobject; +} + +watchturretuse() +{ + self notify( "watchTurretUse" ); + self endon( "watchTurretUse" ); + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "equipment_placed", weapon, weapname ); + + if ( weapname == level.turret_name ) + { + self cleanupoldturret(); + self.buildableturret = weapon; + self thread startturretdeploy( weapon ); + } + } +} + +cleanupoldturret() +{ + if ( isdefined( self.buildableturret ) ) + { + if ( isdefined( self.buildableturret.stub ) ) + { + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildableturret.stub ); + self.buildableturret.stub = undefined; + } + + if ( isdefined( self.buildableturret.turret ) ) + { + if ( isdefined( self.buildableturret.turret.sound_ent ) ) + self.buildableturret.turret.sound_ent delete(); + + self.buildableturret.turret delete(); + } + + if ( isdefined( self.buildableturret.sound_ent ) ) + { + self.buildableturret.sound_ent delete(); + self.buildableturret.sound_ent = undefined; + } + + self.buildableturret delete(); + self.turret_health = undefined; + } + else if ( isdefined( self.turret ) ) + { + self.turret notify( "stop_burst_fire_unmanned" ); + self.turret delete(); + } + + self.turret = undefined; + self notify( "turret_cleanup" ); +} + +watchforcleanup() +{ + self notify( "turret_cleanup" ); + self endon( "turret_cleanup" ); + self waittill_any( "death_or_disconnect", "equip_turret_zm_taken", "equip_turret_zm_pickup" ); + cleanupoldturret(); +} + +placeturret( origin, angles ) +{ + item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_turret", "equip_turret_zm", origin, angles ); + + if ( isdefined( item ) ) + item.owner = self; + + return item; +} + +dropturret() +{ + item = self maps\mp\zombies\_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_turret", "equip_turret_zm", self.origin, self.angles ); + + if ( isdefined( item ) ) + item.turret_health = self.turret_health; + + self.turret_health = undefined; + return item; +} + +pickupturret( item ) +{ + item.owner = self; + self.turret_health = item.turret_health; + item.turret_health = undefined; +} + +transferturret( fromplayer, toplayer ) +{ + buildableturret = toplayer.buildableturret; + turret = toplayer.turret; + toplayer.buildableturret = fromplayer.buildableturret; + toplayer.turret = fromplayer.turret; + fromplayer.buildableturret = buildableturret; + fromplayer.turret = turret; + toplayer.buildableturret.original_owner = toplayer; + toplayer notify( "equip_turret_zm_taken" ); + toplayer thread startturretdeploy( toplayer.buildableturret ); + fromplayer notify( "equip_turret_zm_taken" ); + + if ( isdefined( fromplayer.buildableturret ) ) + { + fromplayer thread startturretdeploy( fromplayer.buildableturret ); + fromplayer.buildableturret.original_owner = fromplayer; + fromplayer.buildableturret.owner = fromplayer; + } + else + fromplayer maps\mp\zombies\_zm_equipment::equipment_release( "equip_turret_zm" ); + + turret_health = toplayer.turret_health; + toplayer.turret_health = fromplayer.turret_health; + fromplayer.turret_health = turret_health; +} + +startturretdeploy( weapon ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_turret_zm_taken" ); + self thread watchforcleanup(); + + if ( !isdefined( self.turret_health ) ) + self.turret_health = 60; + + if ( isdefined( weapon ) ) + { + weapon hide(); + wait 0.1; + + if ( isdefined( weapon.power_on ) && weapon.power_on ) + weapon.turret notify( "stop_burst_fire_unmanned" ); + + if ( !isdefined( weapon ) ) + return; + + if ( isdefined( self.turret ) ) + { + self.turret notify( "stop_burst_fire_unmanned" ); + self.turret notify( "turret_deactivated" ); + self.turret delete(); + } + + turret = spawnturret( "misc_turret", weapon.origin, "zombie_bullet_crouch_zm" ); + turret.turrettype = "sentry"; + turret setturrettype( turret.turrettype ); + turret setmodel( "p6_anim_zm_buildable_turret" ); + turret.origin = weapon.origin; + turret.angles = weapon.angles; + turret linkto( weapon ); + turret makeunusable(); + turret.owner = self; + turret setowner( turret.owner ); + turret maketurretunusable(); + turret setmode( "auto_nonai" ); + turret setdefaultdroppitch( 45.0 ); + turret setconvergencetime( 0.3 ); + turret setturretteam( self.team ); + turret.team = self.team; + turret.damage_own_team = 1; + turret.turret_active = 1; + weapon.turret = turret; + self.turret = turret; + + if ( isdefined( level.equipment_turret_needs_power ) && level.equipment_turret_needs_power ) + { + weapon.power_on = 0; + maps\mp\zombies\_zm_power::add_temp_powered_item( ::turret_power_on, ::turret_power_off, ::turret_in_range, maps\mp\zombies\_zm_power::cost_high, 1, weapon.power_on, weapon ); + } + else + weapon.power_on = 1; + + if ( weapon.power_on ) + turret thread maps\mp\zombies\_zm_mgturret::burst_fire_unmanned(); + else + self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" ); + + if ( !( isdefined( level.equipment_turret_needs_power ) && level.equipment_turret_needs_power ) ) + self thread turretdecay( weapon ); + + self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( weapon ); + + while ( isdefined( weapon ) ) + { + if ( !is_true( weapon.power_on ) ) + { + if ( isdefined( self.buildableturret.sound_ent ) ) + { + self.buildableturret.sound_ent playsound( "wpn_zmb_turret_stop" ); + self.buildableturret.sound_ent delete(); + self.buildableturret.sound_ent = undefined; + } + } + + wait 0.1; + } + + if ( isdefined( self.buildableturret.sound_ent ) ) + { + self.buildableturret.sound_ent playsound( "wpn_zmb_turret_stop" ); + self.buildableturret.sound_ent delete(); + self.buildableturret.sound_ent = undefined; + } + + if ( isdefined( turret ) ) + { + turret notify( "stop_burst_fire_unmanned" ); + turret notify( "turret_deactivated" ); + turret delete(); + } + + self.turret = undefined; + self notify( "turret_cleanup" ); + } +} + +turret_in_range( delta, origin, radius ) +{ + if ( distancesquared( self.target.origin, origin ) < radius * radius ) + return true; + + return false; +} + +turret_power_on( origin, radius ) +{ +/# + println( "^1ZM POWER: turret on\\n" ); +#/ + if ( !isdefined( self.target ) ) + return; + + self.target.power_on = 1; + self.target.turret thread maps\mp\zombies\_zm_mgturret::burst_fire_unmanned(); + player = self.target.turret.owner; + + if ( !isdefined( player.buildableturret.sound_ent ) ) + player.buildableturret.sound_ent = spawn( "script_origin", self.target.turret.origin ); + + player.buildableturret.sound_ent playsound( "wpn_zmb_turret_start" ); + player.buildableturret.sound_ent playloopsound( "wpn_zmb_turret_loop", 2 ); +} + +turret_power_off( origin, radius ) +{ +/# + println( "^1ZM POWER: turret off\\n" ); +#/ + if ( !isdefined( self.target ) ) + return; + + self.target.power_on = 0; + self.target.turret notify( "stop_burst_fire_unmanned" ); + player = self.target.turret.owner; + + if ( isdefined( player.buildableturret.sound_ent ) ) + { + player.buildableturret.sound_ent playsound( "wpn_zmb_turret_stop" ); + player.buildableturret.sound_ent delete(); + player.buildableturret.sound_ent = undefined; + } +} + +turretdecay( weapon ) +{ + self endon( "death" ); + self endon( "disconnect" ); + + while ( isdefined( weapon ) ) + { + if ( weapon.power_on ) + { + self.turret_health--; + + if ( self.turret_health <= 0 ) + { + self cleanupoldturret(); + self thread maps\mp\zombies\_zm_equipment::equipment_release( "equip_turret_zm" ); + return; + } + } + + wait 1; + } +} + +debugturret( radius ) +{ +/# + while ( isdefined( self ) ) + { + circle( self.origin, radius, ( 1, 1, 1 ), 0, 1, 1 ); + wait 0.05; + } +#/ +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_equipment.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_equipment.gsc new file mode 100644 index 0000000..3ea6fd1 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_equipment.gsc @@ -0,0 +1,1707 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_spawner; + +init() +{ + init_equipment_upgrade(); + onplayerconnect_callback( ::equipment_placement_watcher ); + level._equipment_disappear_fx = loadfx( "maps/zombie/fx_zmb_tranzit_electrap_explo" ); + + if ( !( isdefined( level.disable_fx_zmb_tranzit_shield_explo ) && level.disable_fx_zmb_tranzit_shield_explo ) ) + level._riotshield_dissapear_fx = loadfx( "maps/zombie/fx_zmb_tranzit_shield_explo" ); + + level.placeable_equipment_destroy_fn = []; + + if ( !( isdefined( level._no_equipment_activated_clientfield ) && level._no_equipment_activated_clientfield ) ) + registerclientfield( "scriptmover", "equipment_activated", 12000, 4, "int" ); +} + +signal_equipment_activated( val = 1 ) +{ + if ( isdefined( level._no_equipment_activated_clientfield ) && level._no_equipment_activated_clientfield ) + return; + + self endon( "death" ); + self setclientfield( "equipment_activated", val ); + + for ( i = 0; i < 2; i++ ) + wait_network_frame(); + + self setclientfield( "equipment_activated", 0 ); +} + +register_equipment( equipment_name, hint, howto_hint, hint_icon, equipmentvo, watcher_thread, transfer_fn, drop_fn, pickup_fn, place_fn ) +{ + if ( !isdefined( level.zombie_include_equipment ) || !( isdefined( level.zombie_include_equipment[equipment_name] ) && level.zombie_include_equipment[equipment_name] ) ) + return; + + precachestring( hint ); + + if ( isdefined( hint_icon ) ) + precacheshader( hint_icon ); + + struct = spawnstruct(); + + if ( !isdefined( level.zombie_equipment ) ) + level.zombie_equipment = []; + + struct.equipment_name = equipment_name; + struct.hint = hint; + struct.howto_hint = howto_hint; + struct.hint_icon = hint_icon; + struct.vox = equipmentvo; + struct.triggers = []; + struct.models = []; + struct.watcher_thread = watcher_thread; + struct.transfer_fn = transfer_fn; + struct.drop_fn = drop_fn; + struct.pickup_fn = pickup_fn; + struct.place_fn = place_fn; + level.zombie_equipment[equipment_name] = struct; +} + +is_equipment_included( equipment_name ) +{ + if ( !isdefined( level.zombie_include_equipment ) ) + return 0; + + return isdefined( level.zombie_include_equipment[equipment_name] ); +} + +include_zombie_equipment( equipment_name ) +{ + if ( !isdefined( level.zombie_include_equipment ) ) + level.zombie_include_equipment = []; + + level.zombie_include_equipment[equipment_name] = 1; + precacheitem( equipment_name ); +} + +limit_zombie_equipment( equipment_name, limited ) +{ + if ( !isdefined( level._limited_equipment ) ) + level._limited_equipment = []; + + if ( limited ) + level._limited_equipment[level._limited_equipment.size] = equipment_name; + else + arrayremovevalue( level._limited_equipment, equipment_name, 0 ); +} + +init_equipment_upgrade() +{ + equipment_spawns = []; + equipment_spawns = getentarray( "zombie_equipment_upgrade", "targetname" ); + + for ( i = 0; i < equipment_spawns.size; i++ ) + { + hint_string = get_equipment_hint( equipment_spawns[i].zombie_equipment_upgrade ); + equipment_spawns[i] sethintstring( hint_string ); + equipment_spawns[i] setcursorhint( "HINT_NOICON" ); + equipment_spawns[i] usetriggerrequirelookat(); + equipment_spawns[i] add_to_equipment_trigger_list( equipment_spawns[i].zombie_equipment_upgrade ); + equipment_spawns[i] thread equipment_spawn_think(); + } +} + +get_equipment_hint( equipment_name ) +{ + assert( isdefined( level.zombie_equipment[equipment_name] ), equipment_name + " was not included or is not registered with the equipment system." ); + return level.zombie_equipment[equipment_name].hint; +} + +get_equipment_howto_hint( equipment_name ) +{ + assert( isdefined( level.zombie_equipment[equipment_name] ), equipment_name + " was not included or is not registered with the equipment system." ); + return level.zombie_equipment[equipment_name].howto_hint; +} + +get_equipment_icon( equipment_name ) +{ + assert( isdefined( level.zombie_equipment[equipment_name] ), equipment_name + " was not included or is not registered with the equipment system." ); + return level.zombie_equipment[equipment_name].hint_icon; +} + +add_to_equipment_trigger_list( equipment_name ) +{ + assert( isdefined( level.zombie_equipment[equipment_name] ), equipment_name + " was not included or is not registered with the equipment system." ); + level.zombie_equipment[equipment_name].triggers[level.zombie_equipment[equipment_name].triggers.size] = self; + level.zombie_equipment[equipment_name].models[level.zombie_equipment[equipment_name].models.size] = getent( self.target, "targetname" ); +} + +equipment_spawn_think() +{ + for (;;) + { + self waittill( "trigger", player ); + + if ( player in_revive_trigger() || player.is_drinking > 0 ) + { + wait 0.1; + continue; + } + + if ( is_limited_equipment( self.zombie_equipment_upgrade ) ) + { + player setup_limited_equipment( self.zombie_equipment_upgrade ); + + if ( isdefined( level.hacker_tool_positions ) ) + { + new_pos = random( level.hacker_tool_positions ); + self.origin = new_pos.trigger_org; + model = getent( self.target, "targetname" ); + model.origin = new_pos.model_org; + model.angles = new_pos.model_ang; + } + } + + player equipment_give( self.zombie_equipment_upgrade ); + } +} + +set_equipment_invisibility_to_player( equipment, invisible ) +{ + triggers = level.zombie_equipment[equipment].triggers; + + for ( i = 0; i < triggers.size; i++ ) + { + if ( isdefined( triggers[i] ) ) + triggers[i] setinvisibletoplayer( self, invisible ); + } + + models = level.zombie_equipment[equipment].models; + + for ( i = 0; i < models.size; i++ ) + { + if ( isdefined( models[i] ) ) + models[i] setinvisibletoplayer( self, invisible ); + } +} + +equipment_take( equipment = self get_player_equipment() ) +{ + if ( !isdefined( equipment ) ) + return; + + if ( !self has_player_equipment( equipment ) ) + return; + + current = 0; + current_weapon = 0; + + if ( isdefined( self get_player_equipment() ) && equipment == self get_player_equipment() ) + current = 1; + + if ( equipment == self getcurrentweapon() ) + current_weapon = 1; +/# + println( "ZM EQUIPMENT: " + self.name + " lost " + equipment + "\\n" ); +#/ + if ( isdefined( self.current_equipment_active[equipment] ) && self.current_equipment_active[equipment] ) + { + self.current_equipment_active[equipment] = 0; + self notify( equipment + "_deactivate" ); + } + + self notify( equipment + "_taken" ); + self takeweapon( equipment ); + + if ( !is_limited_equipment( equipment ) || is_limited_equipment( equipment ) && !limited_equipment_in_use( equipment ) ) + self set_equipment_invisibility_to_player( equipment, 0 ); + + if ( current ) + { + self set_player_equipment( undefined ); + self setactionslot( 1, "" ); + } + else + arrayremovevalue( self.deployed_equipment, equipment ); + + if ( current_weapon ) + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + } +} + +equipment_give( equipment ) +{ + if ( !isdefined( equipment ) ) + return; + + if ( !isdefined( level.zombie_equipment[equipment] ) ) + return; + + if ( self has_player_equipment( equipment ) ) + return; +/# + println( "ZM EQUIPMENT: " + self.name + " got " + equipment + "\\n" ); +#/ + curr_weapon = self getcurrentweapon(); + curr_weapon_was_curr_equipment = self is_player_equipment( curr_weapon ); + self equipment_take(); + self set_player_equipment( equipment ); + self giveweapon( equipment ); + self setweaponammoclip( equipment, 1 ); + self thread show_equipment_hint( equipment ); + self notify( equipment + "_given" ); + self set_equipment_invisibility_to_player( equipment, 1 ); + self setactionslot( 1, "weapon", equipment ); + + if ( isdefined( level.zombie_equipment[equipment].watcher_thread ) ) + self thread [[ level.zombie_equipment[equipment].watcher_thread ]](); + + self thread equipment_slot_watcher( equipment ); + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", level.zombie_equipment[equipment].vox ); +} + +equipment_slot_watcher( equipment ) +{ + self notify( "kill_equipment_slot_watcher" ); + self endon( "kill_equipment_slot_watcher" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "weapon_change", curr_weapon, prev_weapon ); + + self.prev_weapon_before_equipment_change = undefined; + + if ( isdefined( prev_weapon ) && "none" != prev_weapon ) + { + prev_weapon_type = weaponinventorytype( prev_weapon ); + + if ( "primary" == prev_weapon_type || "altmode" == prev_weapon_type ) + self.prev_weapon_before_equipment_change = prev_weapon; + } + + if ( isdefined( level.zombie_equipment[equipment].watcher_thread ) ) + { + if ( curr_weapon == equipment ) + { + if ( self.current_equipment_active[equipment] == 1 ) + { + self notify( equipment + "_deactivate" ); + self.current_equipment_active[equipment] = 0; + } + else if ( self.current_equipment_active[equipment] == 0 ) + { + self notify( equipment + "_activate" ); + self.current_equipment_active[equipment] = 1; + } + + self waittill( "equipment_select_response_done" ); + } + } + else if ( curr_weapon == equipment && !self.current_equipment_active[equipment] ) + { + self notify( equipment + "_activate" ); + self.current_equipment_active[equipment] = 1; + } + else if ( curr_weapon != equipment && self.current_equipment_active[equipment] ) + { + self notify( equipment + "_deactivate" ); + self.current_equipment_active[equipment] = 0; + } + } +} + +is_limited_equipment( equipment ) +{ + if ( isdefined( level._limited_equipment ) ) + { + for ( i = 0; i < level._limited_equipment.size; i++ ) + { + if ( level._limited_equipment[i] == equipment ) + return true; + } + } + + return false; +} + +limited_equipment_in_use( equipment ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + current_equipment = players[i] get_player_equipment(); + + if ( isdefined( current_equipment ) && current_equipment == equipment ) + return true; + } + + if ( isdefined( level.dropped_equipment ) && isdefined( level.dropped_equipment[equipment] ) ) + return true; + + return false; +} + +setup_limited_equipment( equipment ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] set_equipment_invisibility_to_player( equipment, 1 ); + + self thread release_limited_equipment_on_disconnect( equipment ); + self thread release_limited_equipment_on_equipment_taken( equipment ); +} + +release_limited_equipment_on_equipment_taken( equipment ) +{ + self endon( "disconnect" ); + self waittill_either( equipment + "_taken", "spawned_spectator" ); + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] set_equipment_invisibility_to_player( equipment, 0 ); +} + +release_limited_equipment_on_disconnect( equipment ) +{ + self endon( equipment + "_taken" ); + + self waittill( "disconnect" ); + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isalive( players[i] ) ) + players[i] set_equipment_invisibility_to_player( equipment, 0 ); + } +} + +is_equipment_active( equipment ) +{ + if ( !isdefined( self.current_equipment_active ) || !isdefined( self.current_equipment_active[equipment] ) ) + return 0; + + return self.current_equipment_active[equipment]; +} + +init_equipment_hint_hudelem( x, y, alignx, aligny, fontscale, alpha ) +{ + self.x = x; + self.y = y; + self.alignx = alignx; + self.aligny = aligny; + self.fontscale = fontscale; + self.alpha = alpha; + self.sort = 20; +} + +setup_equipment_client_hintelem() +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( !isdefined( self.hintelem ) ) + self.hintelem = newclienthudelem( self ); + + if ( level.splitscreen ) + self.hintelem init_equipment_hint_hudelem( 160, 90, "center", "middle", 1.6, 1.0 ); + else + self.hintelem init_equipment_hint_hudelem( 320, 220, "center", "bottom", 1.6, 1.0 ); +} + +show_equipment_hint( equipment ) +{ + self notify( "kill_previous_show_equipment_hint_thread" ); + self endon( "kill_previous_show_equipment_hint_thread" ); + self endon( "death" ); + self endon( "disconnect" ); + + if ( isdefined( self.do_not_display_equipment_pickup_hint ) && self.do_not_display_equipment_pickup_hint ) + return; + + wait 0.5; + text = get_equipment_howto_hint( equipment ); + self show_equipment_hint_text( text ); +} + +show_equipment_hint_text( text ) +{ + self notify( "hide_equipment_hint_text" ); + wait 0.05; + self setup_equipment_client_hintelem(); + self.hintelem settext( text ); + self.hintelem.alpha = 1; + self.hintelem.font = "small"; + self.hintelem.fontscale = 1.25; + self.hintelem.hidewheninmenu = 1; + time = self waittill_notify_or_timeout( "hide_equipment_hint_text", 3.2 ); + + if ( isdefined( time ) ) + { + self.hintelem fadeovertime( 0.25 ); + self.hintelem.alpha = 0; + self waittill_notify_or_timeout( "hide_equipment_hint_text", 0.25 ); + } + + self.hintelem settext( "" ); + self.hintelem destroy(); +} + +equipment_onspawnretrievableweaponobject( watcher, player ) +{ + self.plant_parent = self; + iswallmount = isdefined( level.placeable_equipment_type[self.name] ) && level.placeable_equipment_type[self.name] == "wallmount"; + + if ( !isdefined( player.turret_placement ) || !player.turret_placement["result"] ) + { + if ( iswallmount || !getdvarint( "tu11_zombie_turret_placement_ignores_bodies" ) ) + { + self waittill( "stationary" ); + + waittillframeend; + + if ( iswallmount ) + { + if ( isdefined( player.planted_wallmount_on_a_zombie ) && player.planted_wallmount_on_a_zombie ) + { + equip_name = self.name; + thread equipment_disappear_fx( self.origin, undefined, self.angles ); + self delete(); + + if ( player hasweapon( equip_name ) ) + player setweaponammoclip( equip_name, 1 ); + + player.planted_wallmount_on_a_zombie = undefined; + return; + } + } + } + else + { + self.plant_parent = player; + self.origin = player.origin; + self.angles = player.angles; + wait_network_frame(); + } + } + + equipment = watcher.name + "_zm"; +/# + if ( !isdefined( player.current_equipment ) || player.current_equipment != equipment ) + { + assert( player has_deployed_equipment( equipment ) ); + assert( !isdefined( player.current_equipment ) ); + } +#/ + if ( isdefined( player.current_equipment ) && player.current_equipment == equipment ) + player equipment_to_deployed( equipment ); + + if ( isdefined( level.zombie_equipment[equipment].place_fn ) ) + { + if ( isdefined( player.turret_placement ) && player.turret_placement["result"] ) + { + plant_origin = player.turret_placement["origin"]; + plant_angles = player.turret_placement["angles"]; + } + else if ( isdefined( level.placeable_equipment_type[self.name] ) && level.placeable_equipment_type[self.name] == "wallmount" ) + { + plant_origin = self.origin; + plant_angles = self.angles; + } + else + { + plant_origin = self.origin; + plant_angles = self.angles; + } + + if ( isdefined( level.check_force_deploy_origin ) ) + { + if ( player [[ level.check_force_deploy_origin ]]( self, plant_origin, plant_angles ) ) + { + plant_origin = player.origin; + plant_angles = player.angles; + self.plant_parent = player; + } + } + else if ( isdefined( level.check_force_deploy_z ) ) + { + if ( player [[ level.check_force_deploy_z ]]( self, plant_origin, plant_angles ) ) + plant_origin = ( plant_origin[0], plant_origin[1], player.origin[2] + 10 ); + } + + if ( isdefined( iswallmount ) && iswallmount ) + self ghost(); + + replacement = player [[ level.zombie_equipment[equipment].place_fn ]]( plant_origin, plant_angles ); + + if ( isdefined( replacement ) ) + { + replacement.owner = player; + replacement.original_owner = player; + replacement.name = self.name; + player notify( "equipment_placed", replacement, self.name ); + + if ( isdefined( level.equipment_planted ) ) + player [[ level.equipment_planted ]]( replacement, equipment, self.plant_parent ); + + player maps\mp\zombies\_zm_buildables::track_buildables_planted( self ); + } + + if ( isdefined( self ) ) + self delete(); + } +} + +equipment_retrieve( player ) +{ + if ( isdefined( self ) ) + { + self stoploopsound(); + original_owner = self.original_owner; + weaponname = self.name; + + if ( !isdefined( original_owner ) ) + { + player equipment_give( weaponname ); + self.owner = player; + } + else + { + if ( player != original_owner ) + { + equipment_transfer( weaponname, original_owner, player ); + self.owner = player; + } + + player equipment_from_deployed( weaponname ); + } + + if ( isdefined( self.requires_pickup ) && self.requires_pickup ) + { + if ( isdefined( level.zombie_equipment[weaponname].pickup_fn ) ) + { + self.owner = player; + + if ( isdefined( self.damage ) ) + player player_set_equipment_damage( weaponname, self.damage ); + + player [[ level.zombie_equipment[weaponname].pickup_fn ]]( self ); + } + } + + self.playdialog = 0; + weaponname = self.name; + self delete(); + + if ( !player hasweapon( weaponname ) ) + { + player giveweapon( weaponname ); + clip_ammo = player getweaponammoclip( weaponname ); + clip_max_ammo = weaponclipsize( weaponname ); + + if ( clip_ammo < clip_max_ammo ) + clip_ammo++; + + player setweaponammoclip( weaponname, clip_ammo ); + } + + player maps\mp\zombies\_zm_buildables::track_planted_buildables_pickedup( weaponname ); + } +} + +equipment_drop_to_planted( equipment, player ) +{ +/# + if ( !isdefined( player.current_equipment ) || player.current_equipment != equipment ) + { + assert( player has_deployed_equipment( equipment ) ); + assert( !isdefined( player.current_equipment ) ); + } +#/ + if ( isdefined( player.current_equipment ) && player.current_equipment == equipment ) + player equipment_to_deployed( equipment ); + + if ( isdefined( level.zombie_equipment[equipment].place_fn ) ) + { + replacement = player [[ level.zombie_equipment[equipment].place_fn ]]( player.origin, player.angles ); + + if ( isdefined( replacement ) ) + { + replacement.owner = player; + replacement.original_owner = player; + replacement.name = equipment; + + if ( isdefined( level.equipment_planted ) ) + player [[ level.equipment_planted ]]( replacement, equipment, player ); + + player notify( "equipment_placed", replacement, equipment ); + player maps\mp\zombies\_zm_buildables::track_buildables_planted( replacement ); + } + } +} + +equipment_transfer( weaponname, fromplayer, toplayer ) +{ + if ( is_limited_equipment( weaponname ) ) + { +/# + println( "ZM EQUIPMENT: " + weaponname + " transferred from " + fromplayer.name + " to " + toplayer.name + "\\n" ); +#/ + toplayer equipment_orphaned( weaponname ); + wait 0.05; + assert( !toplayer has_player_equipment( weaponname ) ); + assert( fromplayer has_player_equipment( weaponname ) ); + toplayer equipment_give( weaponname ); + toplayer equipment_to_deployed( weaponname ); + + if ( isdefined( level.zombie_equipment[weaponname].transfer_fn ) ) + [[ level.zombie_equipment[weaponname].transfer_fn ]]( fromplayer, toplayer ); + + fromplayer equipment_release( weaponname ); + assert( toplayer has_player_equipment( weaponname ) ); + assert( !fromplayer has_player_equipment( weaponname ) ); + equipment_damage = 0; + toplayer player_set_equipment_damage( weaponname, fromplayer player_get_equipment_damage( weaponname ) ); + fromplayer player_set_equipment_damage( equipment_damage ); + } + else + { +/# + println( "ZM EQUIPMENT: " + weaponname + " swapped from " + fromplayer.name + " to " + toplayer.name + "\\n" ); +#/ + toplayer equipment_give( weaponname ); + + if ( isdefined( toplayer.current_equipment ) && toplayer.current_equipment == weaponname ) + toplayer equipment_to_deployed( weaponname ); + + if ( isdefined( level.zombie_equipment[weaponname].transfer_fn ) ) + [[ level.zombie_equipment[weaponname].transfer_fn ]]( fromplayer, toplayer ); + + equipment_damage = toplayer player_get_equipment_damage( weaponname ); + toplayer player_set_equipment_damage( weaponname, fromplayer player_get_equipment_damage( weaponname ) ); + fromplayer player_set_equipment_damage( weaponname, equipment_damage ); + } +} + +equipment_release( equipment ) +{ +/# + println( "ZM EQUIPMENT: " + self.name + " release " + equipment + "\\n" ); +#/ + self equipment_take( equipment ); +} + +equipment_drop( equipment ) +{ + if ( isdefined( level.zombie_equipment[equipment].place_fn ) ) + { + equipment_drop_to_planted( equipment, self ); +/# + println( "ZM EQUIPMENT: " + self.name + " drop to planted " + equipment + "\\n" ); +#/ + } + else if ( isdefined( level.zombie_equipment[equipment].drop_fn ) ) + { + if ( isdefined( self.current_equipment ) && self.current_equipment == equipment ) + self equipment_to_deployed( equipment ); + + item = self [[ level.zombie_equipment[equipment].drop_fn ]](); + + if ( isdefined( item ) ) + { + if ( isdefined( level.equipment_planted ) ) + self [[ level.equipment_planted ]]( item, equipment, self ); + + item.owner = undefined; + item.damage = self player_get_equipment_damage( equipment ); + } +/# + println( "ZM EQUIPMENT: " + self.name + " dropped " + equipment + "\\n" ); +#/ + } + else + self equipment_take(); + + self notify( "equipment_dropped", equipment ); +} + +equipment_grab( equipment, item ) +{ +/# + println( "ZM EQUIPMENT: " + self.name + " picked up " + equipment + "\\n" ); +#/ + self equipment_give( equipment ); + + if ( isdefined( level.zombie_equipment[equipment].pickup_fn ) ) + { + item.owner = self; + self player_set_equipment_damage( equipment, item.damage ); + self [[ level.zombie_equipment[equipment].pickup_fn ]]( item ); + } +} + +equipment_orphaned( equipment ) +{ +/# + println( "ZM EQUIPMENT: " + self.name + " orphaned " + equipment + "\\n" ); +#/ + self equipment_take( equipment ); +} + +equipment_to_deployed( equipment ) +{ +/# + println( "ZM EQUIPMENT: " + self.name + " deployed " + equipment + "\\n" ); +#/ + if ( !isdefined( self.deployed_equipment ) ) + self.deployed_equipment = []; + + assert( self.current_equipment == equipment ); + self.deployed_equipment[self.deployed_equipment.size] = equipment; + self.current_equipment = undefined; + + if ( !isdefined( level.riotshield_name ) || equipment != level.riotshield_name ) + self takeweapon( equipment ); + + self setactionslot( 1, "" ); +} + +equipment_from_deployed( equipment = "none" ) +{ +/# + println( "ZM EQUIPMENT: " + self.name + " retrieved " + equipment + "\\n" ); +#/ + if ( isdefined( self.current_equipment ) && equipment != self.current_equipment ) + self equipment_drop( self.current_equipment ); + + assert( self has_deployed_equipment( equipment ) ); + self.current_equipment = equipment; + + if ( isdefined( level.riotshield_name ) && equipment != level.riotshield_name ) + self giveweapon( equipment ); + + if ( self hasweapon( equipment ) ) + self setweaponammoclip( equipment, 1 ); + + self setactionslot( 1, "weapon", equipment ); + arrayremovevalue( self.deployed_equipment, equipment ); + self notify( equipment + "_pickup" ); +} + +eqstub_get_unitrigger_origin() +{ + if ( isdefined( self.origin_parent ) ) + return self.origin_parent.origin; + + tup = anglestoup( self.angles ); + eq_unitrigger_offset = 12 * tup; + return self.origin + eq_unitrigger_offset; +} + +eqstub_on_spawn_trigger( trigger ) +{ + if ( isdefined( self.link_parent ) ) + { + trigger enablelinkto(); + trigger linkto( self.link_parent ); + trigger setmovingplatformenabled( 1 ); + } +} + +equipment_buy( equipment ) +{ +/# + println( "ZM EQUIPMENT: " + self.name + " bought " + equipment + "\\n" ); +#/ + if ( isdefined( self.current_equipment ) && equipment != self.current_equipment ) + self equipment_drop( self.current_equipment ); + + if ( ( equipment == "riotshield_zm" || equipment == "alcatraz_shield_zm" ) && isdefined( self.player_shield_reset_health ) ) + self [[ self.player_shield_reset_health ]](); + else + self player_set_equipment_damage( equipment, 0 ); + + self equipment_give( equipment ); +} + +generate_equipment_unitrigger( classname, origin, angles, flags, radius = 64, script_height = 64, hint, icon, think, moving ) +{ + script_width = script_height; + + if ( !isdefined( script_width ) ) + script_width = 64; + + script_length = script_height; + + if ( !isdefined( script_length ) ) + script_length = 64; + + unitrigger_stub = spawnstruct(); + unitrigger_stub.origin = origin; + + if ( isdefined( angles ) ) + unitrigger_stub.angles = angles; + + if ( isdefined( script_length ) ) + unitrigger_stub.script_length = script_length; + else + unitrigger_stub.script_length = 13.5; + + if ( isdefined( script_width ) ) + unitrigger_stub.script_width = script_width; + else + unitrigger_stub.script_width = 27.5; + + if ( isdefined( script_height ) ) + unitrigger_stub.script_height = script_height; + else + unitrigger_stub.script_height = 24; + + unitrigger_stub.radius = radius; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + unitrigger_stub.hint_string = hint; + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) ) + { + unitrigger_stub.cursor_hint = "HINT_WEAPON"; + unitrigger_stub.cursor_hint_weapon = icon; + } + + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.require_look_at = 0; + + switch ( classname ) + { + case "trigger_radius": + unitrigger_stub.script_unitrigger_type = "unitrigger_radius"; + break; + case "trigger_radius_use": + unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + break; + case "trigger_box": + unitrigger_stub.script_unitrigger_type = "unitrigger_box"; + break; + case "trigger_box_use": + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + break; + } + + unitrigger_stub.originfunc = ::eqstub_get_unitrigger_origin; + unitrigger_stub.onspawnfunc = ::eqstub_on_spawn_trigger; + + if ( isdefined( moving ) && moving ) + maps\mp\zombies\_zm_unitrigger::register_unitrigger( unitrigger_stub, think ); + else + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, think ); + + return unitrigger_stub; +} + +can_pick_up_equipment( equipment_name, equipment_trigger ) +{ + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || self in_revive_trigger() ) + return false; + + if ( self isthrowinggrenade() ) + return false; + + if ( isdefined( self.screecher_weapon ) ) + return false; + + if ( self is_jumping() ) + return false; + + if ( self is_player_equipment( equipment_name ) ) + return false; + + if ( isdefined( self.pickup_equipment ) && self.pickup_equipment ) + return false; + + if ( isdefined( level.equipment_team_pick_up ) && level.equipment_team_pick_up && !self same_team_placed_equipment( equipment_trigger ) ) + return false; + + return true; +} + +same_team_placed_equipment( equipment_trigger ) +{ + return isdefined( equipment_trigger ) && isdefined( equipment_trigger.stub ) && isdefined( equipment_trigger.stub.model ) && isdefined( equipment_trigger.stub.model.owner ) && equipment_trigger.stub.model.owner.pers["team"] == self.pers["team"]; +} + +placed_equipment_think( model, equipname, origin, angles, tradius, toffset ) +{ + pickupmodel = spawn( "script_model", origin ); + + if ( isdefined( angles ) ) + pickupmodel.angles = angles; + + pickupmodel setmodel( model ); + + if ( isdefined( level.equipment_safe_to_drop ) ) + { + if ( !self [[ level.equipment_safe_to_drop ]]( pickupmodel ) ) + { + equipment_disappear_fx( pickupmodel.origin, undefined, pickupmodel.angles ); + pickupmodel delete(); + self equipment_take( equipname ); + return undefined; + } + } + + watchername = getsubstr( equipname, 0, equipname.size - 3 ); + + if ( isdefined( level.retrievehints[watchername] ) ) + hint = level.retrievehints[watchername].hint; + else + hint = &"MP_GENERIC_PICKUP"; + + icon = get_equipment_icon( equipname ); + + if ( !isdefined( tradius ) ) + tradius = 32; + + torigin = origin; + + if ( isdefined( toffset ) ) + { + tforward = anglestoforward( angles ); + torigin += toffset * tforward; + } + + tup = anglestoup( angles ); + eq_unitrigger_offset = 12 * tup; + pickupmodel.stub = generate_equipment_unitrigger( "trigger_radius_use", torigin + eq_unitrigger_offset, angles, 0, tradius, 64, hint, equipname, ::placed_equipment_unitrigger_think, isdefined( pickupmodel.canmove ) && pickupmodel.canmove ); + pickupmodel.stub.model = pickupmodel; + pickupmodel.stub.equipname = equipname; + pickupmodel.equipname = equipname; + pickupmodel thread item_attract_zombies(); + pickupmodel thread item_watch_explosions(); + + if ( is_limited_equipment( equipname ) ) + { + if ( !isdefined( level.dropped_equipment ) ) + level.dropped_equipment = []; + + if ( isdefined( level.dropped_equipment[equipname] ) && isdefined( level.dropped_equipment[equipname].model ) ) + level.dropped_equipment[equipname].model dropped_equipment_destroy( 1 ); + + level.dropped_equipment[equipname] = pickupmodel.stub; + } + + destructible_equipment_list_add( pickupmodel ); + return pickupmodel; +} + +watch_player_visibility( equipment ) +{ + self endon( "kill_trigger" ); + self setinvisibletoall(); + + while ( isdefined( self ) ) + { + players = getplayers(); + + foreach ( player in players ) + { + if ( !isdefined( player ) ) + continue; + + invisible = !player can_pick_up_equipment( equipment, self ); + + if ( isdefined( self ) ) + self setinvisibletoplayer( player, invisible ); + + wait 0.05; + } + + wait 1; + } +} + +placed_equipment_unitrigger_think() +{ + self endon( "kill_trigger" ); + self thread watch_player_visibility( self.stub.equipname ); + + while ( true ) + { + self waittill( "trigger", player ); + + if ( !player can_pick_up_equipment( self.stub.equipname, self ) ) + continue; + + self thread pickup_placed_equipment( player ); + return; + } +} + +pickup_placed_equipment( player ) +{ + assert( !( isdefined( player.pickup_equipment ) && player.pickup_equipment ) ); + player.pickup_equipment = 1; + stub = self.stub; + + if ( isdefined( player.current_equipment ) && stub.equipname != player.current_equipment ) + player equipment_drop( player.current_equipment ); + + if ( is_limited_equipment( stub.equipname ) ) + { + if ( isdefined( level.dropped_equipment ) && isdefined( level.dropped_equipment[stub.equipname] ) && level.dropped_equipment[stub.equipname] == stub ) + level.dropped_equipment[stub.equipname] = undefined; + } + + if ( isdefined( stub.model ) ) + stub.model equipment_retrieve( player ); + + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( stub ); + wait 3; + player.pickup_equipment = 0; +} + +dropped_equipment_think( model, equipname, origin, angles, tradius, toffset ) +{ + pickupmodel = spawn( "script_model", origin ); + + if ( isdefined( angles ) ) + pickupmodel.angles = angles; + + pickupmodel setmodel( model ); + + if ( isdefined( level.equipment_safe_to_drop ) ) + { + if ( !self [[ level.equipment_safe_to_drop ]]( pickupmodel ) ) + { + equipment_disappear_fx( pickupmodel.origin, undefined, pickupmodel.angles ); + pickupmodel delete(); + self equipment_take( equipname ); + return; + } + } + + watchername = getsubstr( equipname, 0, equipname.size - 3 ); + + if ( isdefined( level.retrievehints[watchername] ) ) + hint = level.retrievehints[watchername].hint; + else + hint = &"MP_GENERIC_PICKUP"; + + icon = get_equipment_icon( equipname ); + + if ( !isdefined( tradius ) ) + tradius = 32; + + torigin = origin; + + if ( isdefined( toffset ) ) + { + offset = 64; + tforward = anglestoforward( angles ); + torigin = torigin + toffset * tforward + vectorscale( ( 0, 0, 1 ), 8.0 ); + } + + pickupmodel.stub = generate_equipment_unitrigger( "trigger_radius_use", torigin, angles, 0, tradius, 64, hint, equipname, ::dropped_equipment_unitrigger_think, isdefined( pickupmodel.canmove ) && pickupmodel.canmove ); + pickupmodel.stub.model = pickupmodel; + pickupmodel.stub.equipname = equipname; + pickupmodel.equipname = equipname; + + if ( isdefined( level.equipment_planted ) ) + self [[ level.equipment_planted ]]( pickupmodel, equipname, self ); + + if ( !isdefined( level.dropped_equipment ) ) + level.dropped_equipment = []; + + if ( isdefined( level.dropped_equipment[equipname] ) ) + level.dropped_equipment[equipname].model dropped_equipment_destroy( 1 ); + + level.dropped_equipment[equipname] = pickupmodel.stub; + destructible_equipment_list_add( pickupmodel ); + pickupmodel thread item_attract_zombies(); + return pickupmodel; +} + +dropped_equipment_unitrigger_think() +{ + self endon( "kill_trigger" ); + self thread watch_player_visibility( self.stub.equipname ); + + while ( true ) + { + self waittill( "trigger", player ); + + if ( !player can_pick_up_equipment( self.stub.equipname, self ) ) + continue; + + self thread pickup_dropped_equipment( player ); + return; + } +} + +pickup_dropped_equipment( player ) +{ + player.pickup_equipment = 1; + stub = self.stub; + + if ( isdefined( player.current_equipment ) && stub.equipname != player.current_equipment ) + player equipment_drop( player.current_equipment ); + + player equipment_grab( stub.equipname, stub.model ); + stub.model dropped_equipment_destroy(); + wait 3; + player.pickup_equipment = 0; +} + +dropped_equipment_destroy( gusto ) +{ + stub = self.stub; + + if ( isdefined( gusto ) && gusto ) + equipment_disappear_fx( self.origin, undefined, self.angles ); + + if ( isdefined( level.dropped_equipment ) ) + level.dropped_equipment[stub.equipname] = undefined; + + if ( isdefined( stub.model ) ) + stub.model delete(); + + if ( isdefined( self.original_owner ) && ( is_limited_equipment( stub.equipname ) || maps\mp\zombies\_zm_weapons::is_weapon_included( stub.equipname ) ) ) + self.original_owner equipment_take( stub.equipname ); + + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( stub ); +} + +add_placeable_equipment( equipment, modelname, destroy_fn, type ) +{ + if ( !isdefined( level.placeable_equipment ) ) + level.placeable_equipment = []; + + level.placeable_equipment[equipment] = modelname; + precachemodel( modelname ); + precacheitem( equipment + "_turret" ); + + if ( !isdefined( level.placeable_equipment_destroy_fn ) ) + level.placeable_equipment_destroy_fn = []; + + level.placeable_equipment_destroy_fn[equipment] = destroy_fn; + + if ( !isdefined( level.placeable_equipment_type ) ) + level.placeable_equipment_type = []; + + level.placeable_equipment_type[equipment] = type; +} + +is_placeable_equipment( equipment ) +{ + if ( isdefined( level.placeable_equipment ) && isdefined( level.placeable_equipment[equipment] ) ) + return true; + + return false; +} + +equipment_placement_watcher() +{ + self endon( "death_or_disconnect" ); + + for (;;) + { + self waittill( "weapon_change", weapon ); + + if ( self.sessionstate != "spectator" && is_placeable_equipment( weapon ) ) + self thread equipment_watch_placement( weapon ); + } +} + +equipment_watch_placement( equipment ) +{ + self.turret_placement = undefined; + carry_offset = vectorscale( ( 1, 0, 0 ), 22.0 ); + carry_angles = ( 0, 0, 0 ); + placeturret = spawnturret( "auto_turret", self.origin, equipment + "_turret" ); + placeturret.angles = self.angles; + placeturret setmodel( level.placeable_equipment[equipment] ); + placeturret setturretcarried( 1 ); + placeturret setturretowner( self ); + + if ( isdefined( level.placeable_equipment_type[equipment] ) ) + placeturret setturrettype( level.placeable_equipment_type[equipment] ); + + self carryturret( placeturret, carry_offset, carry_angles ); + + if ( isdefined( level.use_swipe_protection ) ) + self thread watch_melee_swipes( equipment, placeturret ); + + self notify( "create_equipment_turret", equipment, placeturret ); + ended = self waittill_any_return( "weapon_change", "grenade_fire", "death_or_disconnect" ); + + if ( !( isdefined( level.use_legacy_equipment_placement ) && level.use_legacy_equipment_placement ) ) + self.turret_placement = self canplayerplaceturret( placeturret ); + + if ( ended == "weapon_change" ) + { + self.turret_placement = undefined; + + if ( self hasweapon( equipment ) ) + self setweaponammoclip( equipment, 1 ); + } + + self notify( "destroy_equipment_turret", equipment, placeturret ); + self stopcarryturret( placeturret ); + placeturret setturretcarried( 0 ); + placeturret delete(); +} + +watch_melee_swipes( equipment, turret ) +{ + self endon( "weapon_change" ); + self endon( "grenade_fire" ); + self endon( "death" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "melee_swipe", zombie ); + + if ( distancesquared( zombie.origin, self.origin ) > zombie.meleeattackdist * zombie.meleeattackdist ) + continue; + + tpos = turret.origin; + tangles = turret.angles; + self player_damage_equipment( equipment, 200, zombie.origin ); + + if ( self.equipment_damage[equipment] >= 1500 ) + { + thread equipment_disappear_fx( tpos, undefined, tangles ); + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons[0] ) ) + self switchtoweapon( primaryweapons[0] ); + + if ( isalive( self ) ) + self playlocalsound( level.zmb_laugh_alias ); + + self maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); + self equipment_release( equipment ); + return; + } + } +} + +player_get_equipment_damage( equipment ) +{ + if ( isdefined( self.equipment_damage ) && isdefined( self.equipment_damage[equipment] ) ) + return self.equipment_damage[equipment]; + + return 0; +} + +player_set_equipment_damage( equipment, damage ) +{ + if ( !isdefined( self.equipment_damage ) ) + self.equipment_damage = []; + + self.equipment_damage[equipment] = damage; +} + +player_damage_equipment( equipment, damage, origin ) +{ + if ( !isdefined( self.equipment_damage ) ) + self.equipment_damage = []; + + if ( !isdefined( self.equipment_damage[equipment] ) ) + self.equipment_damage[equipment] = 0; + + self.equipment_damage[equipment] += damage; + + if ( self.equipment_damage[equipment] > 1500 ) + { + if ( isdefined( level.placeable_equipment_destroy_fn[equipment] ) ) + self [[ level.placeable_equipment_destroy_fn[equipment] ]](); + else + equipment_disappear_fx( origin ); + + self equipment_release( equipment ); + } +} + +item_damage( damage ) +{ + if ( isdefined( self.isriotshield ) && self.isriotshield ) + { + if ( isdefined( level.riotshield_damage_callback ) && isdefined( self.owner ) ) + self.owner [[ level.riotshield_damage_callback ]]( damage, 0 ); + else if ( isdefined( level.deployed_riotshield_damage_callback ) ) + self [[ level.deployed_riotshield_damage_callback ]]( damage ); + } + else if ( isdefined( self.owner ) ) + self.owner player_damage_equipment( self.equipname, damage, self.origin ); + else + { + if ( !isdefined( self.damage ) ) + self.damage = 0; + + self.damage += damage; + + if ( self.damage > 1500 ) + self thread dropped_equipment_destroy( 1 ); + } +} + +item_watch_damage() +{ + self endon( "death" ); + self setcandamage( 1 ); + self.health = 1500; + + while ( true ) + { + self waittill( "damage", amount ); + + self item_damage( amount ); + } +} + +item_watch_explosions() +{ + self endon( "death" ); + + while ( true ) + { + level waittill( "grenade_exploded", position, radius, idamage, odamage ); + + wait( randomfloatrange( 0.05, 0.3 ) ); + distsqrd = distancesquared( self.origin, position ); + + if ( distsqrd < radius * radius ) + { + dist = sqrt( distsqrd ); + dist /= radius; + damage = odamage + ( idamage - odamage ) * ( 1 - dist ); + self item_damage( damage * 5 ); + } + } +} + +get_item_health() +{ +/# + damage = 0; + + if ( isdefined( self.isriotshield ) && self.isriotshield ) + { + damagemax = level.zombie_vars["riotshield_hit_points"]; + + if ( isdefined( self.owner ) ) + damage = self.owner.shielddamagetaken; + else if ( isdefined( level.deployed_riotshield_damage_callback ) ) + damage = self.shielddamagetaken; + } + else if ( isdefined( self.owner ) ) + { + damagemax = 1500; + damage = self.owner player_get_equipment_damage( self.equipname ); + } + else + { + damagemax = 1500; + + if ( isdefined( self.damage ) ) + damage = self.damage; + } + + return ( damagemax - damage ) / damagemax; +#/ +} + +debughealth() +{ +/# + self endon( "death" ); + self endon( "stop_attracting_zombies" ); + + while ( true ) + { + if ( getdvarint( _hash_EB512CB7 ) ) + { + health = self get_item_health(); + color = ( 1 - health, health, 0 ); + text = "" + health * 100 + ""; + print3d( self.origin, text, color, 1, 0.5, 1 ); + } + + wait 0.05; + } +#/ +} + +item_choke() +{ + if ( !isdefined( level.item_choke_count ) ) + level.item_choke_count = 0; + + level.item_choke_count++; + + if ( !( level.item_choke_count >= 10 ) ) + { + wait 0.05; + level.item_choke_count = 0; + } +} + +is_equipment_ignored( equipname ) +{ + if ( isdefined( level.equipment_ignored_by_zombies ) && isdefined( equipname ) && isdefined( level.equipment_ignored_by_zombies[equipname] ) ) + return true; + + return false; +} + +enemies_ignore_equipment( equipname ) +{ + if ( !isdefined( level.equipment_ignored_by_zombies ) ) + level.equipment_ignored_by_zombies = []; + + level.equipment_ignored_by_zombies[equipname] = equipname; +} + +item_attract_zombies() +{ + self endon( "death" ); + self notify( "stop_attracting_zombies" ); + self endon( "stop_attracting_zombies" ); +/# + self thread debughealth(); +#/ + if ( is_equipment_ignored( self.equipname ) ) + return; + + while ( true ) + { + if ( isdefined( level.vert_equipment_attack_range ) ) + vdistmax = level.vert_equipment_attack_range; + else + vdistmax = 36; + + if ( isdefined( level.max_equipment_attack_range ) ) + distmax = level.max_equipment_attack_range * level.max_equipment_attack_range; + else + distmax = 4096; + + if ( isdefined( level.min_equipment_attack_range ) ) + distmin = level.min_equipment_attack_range * level.min_equipment_attack_range; + else + distmin = 2025; + + ai = getaiarray( level.zombie_team ); + + for ( i = 0; i < ai.size; i++ ) + { + if ( !isdefined( ai[i] ) ) + continue; + + if ( isdefined( ai[i].ignore_equipment ) && ai[i].ignore_equipment ) + continue; + + if ( isdefined( level.ignore_equipment ) ) + { + if ( self [[ level.ignore_equipment ]]( ai[i] ) ) + continue; + } + + if ( isdefined( ai[i].is_inert ) && ai[i].is_inert ) + continue; + + if ( isdefined( ai[i].is_traversing ) && ai[i].is_traversing ) + continue; + + vdist = abs( ai[i].origin[2] - self.origin[2] ); + distsqrd = distance2dsquared( ai[i].origin, self.origin ); + + if ( isdefined( self.equipname ) && ( self.equipname == "riotshield_zm" || self.equipname == "alcatraz_shield_zm" ) ) + vdistmax = 108; + + should_attack = 0; + + if ( isdefined( level.should_attack_equipment ) ) + should_attack = self [[ level.should_attack_equipment ]]( distsqrd ); + + if ( distsqrd < distmax && distsqrd > distmin && vdist < vdistmax || should_attack ) + { + if ( !( isdefined( ai[i].isscreecher ) && ai[i].isscreecher ) && !ai[i] is_quad() && !ai[i] is_leaper() ) + { + ai[i] thread attack_item( self ); + item_choke(); + } + } + + item_choke(); + } + + wait 0.1; + } +} + +attack_item( item ) +{ + self endon( "death" ); + item endon( "death" ); + self endon( "start_inert" ); + + if ( isdefined( self.doing_equipment_attack ) && self.doing_equipment_attack ) + return 0; + + if ( isdefined( self.not_interruptable ) && self.not_interruptable ) + return 0; + + self thread attack_item_stop( item ); + self thread attack_item_interrupt( item ); + + if ( getdvar( _hash_FA9CEAA6 ) == "" ) + setdvar( "zombie_equipment_attack_freq", "15" ); + + freq = getdvarint( _hash_FA9CEAA6 ); + self.doing_equipment_attack = 1; + self maps\mp\zombies\_zm_spawner::zombie_history( "doing equipment attack 1 - " + gettime() ); + self.item = item; + + if ( !isdefined( self ) || !isalive( self ) ) + return; + + if ( isdefined( item.zombie_attack_callback ) ) + item [[ item.zombie_attack_callback ]]( self ); + + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "attack", self.animname ); + + if ( isdefined( level.attack_item ) ) + self [[ level.attack_item ]](); + + melee_anim = "zm_window_melee"; + + if ( !self.has_legs ) + { + melee_anim = "zm_walk_melee_crawl"; + + if ( self.a.gib_ref == "no_legs" ) + melee_anim = "zm_stumpy_melee"; + else if ( self.zombie_move_speed == "run" || self.zombie_move_speed == "sprint" ) + melee_anim = "zm_run_melee_crawl"; + } + + self orientmode( "face point", item.origin ); + self animscripted( self.origin, flat_angle( vectortoangles( item.origin - self.origin ) ), melee_anim ); + self notify( "item_attack" ); + + if ( isdefined( self.custom_item_dmg ) ) + item thread item_damage( self.custom_item_dmg ); + else + item thread item_damage( 100 ); + + item playsound( "fly_riotshield_zm_impact_flesh" ); + wait( randomint( 100 ) / 100.0 ); + self.doing_equipment_attack = 0; + self maps\mp\zombies\_zm_spawner::zombie_history( "doing equipment attack 0 from wait - " + gettime() ); + self orientmode( "face default" ); +} + +attack_item_interrupt( item ) +{ + if ( !( isdefined( self.has_legs ) && self.has_legs ) ) + return; + + self notify( "attack_item_interrupt" ); + self endon( "attack_item_interrupt" ); + self endon( "death" ); + + while ( isdefined( self.has_legs ) && self.has_legs ) + self waittill( "damage" ); + + self stopanimscripted(); + self.doing_equipment_attack = 0; + self maps\mp\zombies\_zm_spawner::zombie_history( "doing equipment attack 0 from death - " + gettime() ); + self.item = undefined; +} + +attack_item_stop( item ) +{ + self notify( "attack_item_stop" ); + self endon( "attack_item_stop" ); + self endon( "death" ); + + item waittill( "death" ); + + self stopanimscripted(); + self.doing_equipment_attack = 0; + self maps\mp\zombies\_zm_spawner::zombie_history( "doing equipment attack 0 from death - " + gettime() ); + self.item = undefined; + + if ( isdefined( level.attack_item_stop ) ) + self [[ level.attack_item_stop ]](); +} + +window_notetracks( msg, equipment ) +{ + self endon( "death" ); + equipment endon( "death" ); + + while ( self.doing_equipment_attack ) + { + self waittill( msg, notetrack ); + + if ( notetrack == "end" ) + return; + + if ( notetrack == "fire" ) + equipment item_damage( 100 ); + } +} + +destructible_equipment_list_check() +{ + if ( !isdefined( level.destructible_equipment ) ) + level.destructible_equipment = []; + + i = 0; + + while ( i < level.destructible_equipment.size ) + { + if ( !isdefined( level.destructible_equipment[i] ) ) + arrayremoveindex( level.destructible_equipment, i ); + else + i++; + } +} + +destructible_equipment_list_add( item ) +{ + destructible_equipment_list_check(); + level.destructible_equipment[level.destructible_equipment.size] = item; +} + +get_destructible_equipment_list() +{ + destructible_equipment_list_check(); + return level.destructible_equipment; +} + +equipment_disappear_fx( origin, fx, angles ) +{ + effect = level._equipment_disappear_fx; + + if ( isdefined( fx ) ) + effect = fx; + + if ( isdefined( angles ) ) + playfx( effect, origin, anglestoforward( angles ) ); + else + playfx( effect, origin ); + + wait 1.1; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_ffotd.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_ffotd.gsc new file mode 100644 index 0000000..c0df62d --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_ffotd.gsc @@ -0,0 +1,214 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_stats; + +main_start() +{ + mapname = tolower( getdvar( "mapname" ) ); + gametype = getdvar( "ui_gametype" ); + + if ( "zm_transit" == tolower( getdvar( "mapname" ) ) && "zclassic" == getdvar( "ui_gametype" ) ) + level thread transit_navcomputer_remove_card_on_success(); + + if ( "zm_prison" == tolower( getdvar( "mapname" ) ) && "zgrief" == getdvar( "ui_gametype" ) ) + level.zbarrier_script_string_sets_collision = 1; + + if ( ( "zm_transit" == mapname || "zm_highrise" == mapname ) && "zclassic" == gametype ) + { + level.pers_upgrade_sniper = 1; + level.pers_upgrade_pistol_points = 1; + level.pers_upgrade_perk_lose = 1; + level.pers_upgrade_double_points = 1; + level.pers_upgrade_nube = 1; + } +} + +main_end() +{ + onfinalizeinitialization_callback( ::force_navcomputer_trigger_think ); + level.original_melee_miss_func = level.melee_miss_func; + level.melee_miss_func = ::ffotd_melee_miss_func; +} + +force_navcomputer_trigger_think() +{ + if ( !isdefined( level.zombie_include_buildables ) || !level.zombie_include_buildables.size ) + return; + + foreach ( buildable in level.zombie_include_buildables ) + { + if ( "sq_common" == buildable.name ) + { + if ( isdefined( buildable.triggerthink ) ) + { + level [[ buildable.triggerthink ]](); + trigger_think_func = buildable.triggerthink; + buildable.triggerthink = undefined; + + level waittill( "buildables_setup" ); + + buildable.triggerthink = trigger_think_func; + return; + } + } + } +} + +transit_navcomputer_remove_card_on_success() +{ + wait_for_buildable( "sq_common" ); + wait_network_frame(); + trig_pos = getstruct( "sq_common_key", "targetname" ); + trigs = getentarray( "trigger_radius_use", "classname" ); + nav_trig = undefined; + + foreach ( trig in trigs ) + { + if ( trig.origin == trig_pos.origin ) + nav_trig = trig; + } + + if ( isdefined( nav_trig ) ) + { + while ( true ) + { + nav_trig waittill( "trigger", who ); + + if ( isplayer( who ) && is_player_valid( who ) && does_player_have_correct_navcard( who ) ) + break; + } + + players = get_players(); + + foreach ( player in players ) + player maps\mp\zombies\_zm_stats::set_global_stat( level.navcard_needed, 0 ); + + level thread sq_refresh_player_navcard_hud(); + } +} + +sq_refresh_player_navcard_hud() +{ + if ( !isdefined( level.navcards ) ) + return; + + players = get_players(); + + foreach ( player in players ) + { + navcard_bits = 0; + + for ( i = 0; i < level.navcards.size; i++ ) + { + hasit = player maps\mp\zombies\_zm_stats::get_global_stat( level.navcards[i] ); + + if ( isdefined( player.navcard_grabbed ) && player.navcard_grabbed == level.navcards[i] ) + hasit = 1; + + if ( hasit ) + navcard_bits += ( 1 << i ); + } + + wait_network_frame(); + player setclientfield( "navcard_held", 0 ); + + if ( navcard_bits > 0 ) + { + wait_network_frame(); + player setclientfield( "navcard_held", navcard_bits ); + } + } +} + +player_in_exploit_area( player_trigger_origin, player_trigger_radius ) +{ + if ( distancesquared( player_trigger_origin, self.origin ) < player_trigger_radius * player_trigger_radius ) + { +/# + iprintlnbold( "player exploit detectect" ); +#/ + return true; + } + + return false; +} + +path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ) +{ + spawnflags = 9; + zombie_trigger = spawn( "trigger_radius", zombie_trigger_origin, spawnflags, zombie_trigger_radius, zombie_trigger_height ); + zombie_trigger setteamfortrigger( level.zombie_team ); +/# + thread debug_exploit( zombie_trigger_origin, zombie_trigger_radius, player_trigger_origin, player_trigger_radius, zombie_goto_point ); +#/ + while ( true ) + { + zombie_trigger waittill( "trigger", who ); + + if ( !is_true( who.reroute ) ) + who thread exploit_reroute( zombie_trigger, player_trigger_origin, player_trigger_radius, zombie_goto_point ); + } +} + +exploit_reroute( zombie_trigger, player_trigger_origin, player_trigger_radius, zombie_goto_point ) +{ + self endon( "death" ); + self.reroute = 1; + + while ( true ) + { + if ( self istouching( zombie_trigger ) ) + { + player = self.favoriteenemy; + + if ( isdefined( player ) && player player_in_exploit_area( player_trigger_origin, player_trigger_radius ) ) + self.reroute_origin = zombie_goto_point; + else + break; + } + else + break; + + wait 0.2; + } + + self.reroute = 0; +} + +debug_exploit( player_origin, player_radius, enemy_origin, enemy_radius, zombie_goto_point ) +{ +/# + while ( isdefined( self ) ) + { + circle( player_origin, player_radius, ( 0, 0, 1 ), 0, 1, 1 ); + circle( enemy_origin, enemy_radius, ( 1, 0, 0 ), 0, 1, 1 ); + line( player_origin, enemy_origin, ( 1, 0, 0 ), 1 ); + line( enemy_origin, zombie_goto_point, ( 1, 1, 0 ), 1 ); + wait 0.05; + } +#/ +} + +ffotd_melee_miss_func() +{ + if ( isdefined( self.enemy ) ) + { + if ( isplayer( self.enemy ) && self.enemy getcurrentweapon() == "claymore_zm" ) + { + dist_sq = distancesquared( self.enemy.origin, self.origin ); + melee_dist_sq = self.meleeattackdist * self.meleeattackdist; + + if ( dist_sq < melee_dist_sq ) + { + self.enemy dodamage( self.meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); + return; + } + } + } + + if ( isdefined( level.original_melee_miss_func ) ) + self [[ level.original_melee_miss_func ]](); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module.gsc new file mode 100644 index 0000000..6d54e3e --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module.gsc @@ -0,0 +1,440 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\gametypes_zm\_zm_gametype; + +register_game_module( index, module_name, pre_init_func, post_init_func, pre_init_zombie_spawn_func, post_init_zombie_spawn_func, hub_start_func ) +{ + if ( !isdefined( level._game_modules ) ) + { + level._game_modules = []; + level._num_registered_game_modules = 0; + } + + for ( i = 0; i < level._num_registered_game_modules; i++ ) + { + if ( !isdefined( level._game_modules[i] ) ) + continue; + + if ( isdefined( level._game_modules[i].index ) && level._game_modules[i].index == index ) + assert( level._game_modules[i].index != index, "A Game module is already registered for index (" + index + ")" ); + } + + level._game_modules[level._num_registered_game_modules] = spawnstruct(); + level._game_modules[level._num_registered_game_modules].index = index; + level._game_modules[level._num_registered_game_modules].module_name = module_name; + level._game_modules[level._num_registered_game_modules].pre_init_func = pre_init_func; + level._game_modules[level._num_registered_game_modules].post_init_func = post_init_func; + level._game_modules[level._num_registered_game_modules].pre_init_zombie_spawn_func = pre_init_zombie_spawn_func; + level._game_modules[level._num_registered_game_modules].post_init_zombie_spawn_func = post_init_zombie_spawn_func; + level._game_modules[level._num_registered_game_modules].hub_start_func = hub_start_func; + level._num_registered_game_modules++; +} + +set_current_game_module( game_module_index ) +{ + if ( !isdefined( game_module_index ) ) + { + level.current_game_module = level.game_module_classic_index; + level.scr_zm_game_module = level.game_module_classic_index; + return; + } + + game_module = get_game_module( game_module_index ); + + if ( !isdefined( game_module ) ) + { + assert( isdefined( game_module ), "unknown game module (" + game_module_index + ")" ); + return; + } + + level.current_game_module = game_module_index; +} + +get_current_game_module() +{ + return get_game_module( level.current_game_module ); +} + +get_game_module( game_module_index ) +{ + if ( !isdefined( game_module_index ) ) + return undefined; + + for ( i = 0; i < level._game_modules.size; i++ ) + { + if ( level._game_modules[i].index == game_module_index ) + return level._game_modules[i]; + } + + return undefined; +} + +game_module_pre_zombie_spawn_init() +{ + current_module = get_current_game_module(); + + if ( !isdefined( current_module ) || !isdefined( current_module.pre_init_zombie_spawn_func ) ) + return; + + self [[ current_module.pre_init_zombie_spawn_func ]](); +} + +game_module_post_zombie_spawn_init() +{ + current_module = get_current_game_module(); + + if ( !isdefined( current_module ) || !isdefined( current_module.post_init_zombie_spawn_func ) ) + return; + + self [[ current_module.post_init_zombie_spawn_func ]](); +} + +kill_all_zombies() +{ + ai = get_round_enemy_array(); + + foreach ( zombie in ai ) + { + if ( isdefined( zombie ) ) + { + zombie dodamage( zombie.maxhealth * 2, zombie.origin, zombie, zombie, "none", "MOD_SUICIDE" ); + wait 0.05; + } + } +} + +freeze_players( freeze ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] freeze_player_controls( freeze ); +} + +turn_power_on_and_open_doors() +{ + level.local_doors_stay_open = 1; + level.power_local_doors_globally = 1; + flag_set( "power_on" ); + level setclientfield( "zombie_power_on", 1 ); + zombie_doors = getentarray( "zombie_door", "targetname" ); + + foreach ( door in zombie_doors ) + { + if ( isdefined( door.script_noteworthy ) && door.script_noteworthy == "electric_door" ) + { + door notify( "power_on" ); + continue; + } + + if ( isdefined( door.script_noteworthy ) && door.script_noteworthy == "local_electric_door" ) + door notify( "local_power_on" ); + } +} + +respawn_spectators_and_freeze_players() +{ + players = get_players(); + + foreach ( player in players ) + { + if ( player.sessionstate == "spectator" ) + { + if ( isdefined( player.spectate_hud ) ) + player.spectate_hud destroy(); + + player [[ level.spawnplayer ]](); + } + + player freeze_player_controls( 1 ); + } +} + +damage_callback_no_pvp_damage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + if ( isdefined( eattacker ) && isplayer( eattacker ) && eattacker == self ) + return idamage; + + if ( isdefined( eattacker ) && !isplayer( eattacker ) ) + return idamage; + + if ( !isdefined( eattacker ) ) + return idamage; + + return 0; +} + +respawn_players() +{ + players = get_players(); + + foreach ( player in players ) + { + player [[ level.spawnplayer ]](); + player freeze_player_controls( 1 ); + } +} + +zombie_goto_round( target_round ) +{ + level notify( "restart_round" ); + + if ( target_round < 1 ) + target_round = 1; + + level.zombie_total = 0; + maps\mp\zombies\_zm::ai_calculate_health( target_round ); + zombies = get_round_enemy_array(); + + if ( isdefined( zombies ) ) + { + for ( i = 0; i < zombies.size; i++ ) + zombies[i] dodamage( zombies[i].health + 666, zombies[i].origin ); + } + + respawn_players(); + wait 1; +} + +wait_for_team_death_and_round_end() +{ + level endon( "game_module_ended" ); + level endon( "end_game" ); + checking_for_round_end = 0; + level.isresetting_grief = 0; + + while ( true ) + { + cdc_alive = 0; + cia_alive = 0; + players = get_players(); + + foreach ( player in players ) + { + if ( !isdefined( player._encounters_team ) ) + continue; + + if ( player._encounters_team == "A" ) + { + if ( is_player_valid( player ) ) + cia_alive++; + + continue; + } + + if ( is_player_valid( player ) ) + cdc_alive++; + } + + if ( cia_alive == 0 && cdc_alive == 0 && !level.isresetting_grief && !( isdefined( level.host_ended_game ) && level.host_ended_game ) ) + { + wait 0.5; + + if ( isdefined( level._grief_reset_message ) ) + level thread [[ level._grief_reset_message ]](); + + level.isresetting_grief = 1; + level notify( "end_round_think" ); + level.zombie_vars["spectators_respawn"] = 1; + level notify( "keep_griefing" ); + checking_for_round_end = 0; + zombie_goto_round( level.round_number ); + level thread reset_grief(); + level thread maps\mp\zombies\_zm::round_think( 1 ); + } + else if ( !checking_for_round_end ) + { + if ( cia_alive == 0 ) + { + level thread check_for_round_end( "B" ); + checking_for_round_end = 1; + } + else if ( cdc_alive == 0 ) + { + level thread check_for_round_end( "A" ); + checking_for_round_end = 1; + } + } + + if ( cia_alive > 0 && cdc_alive > 0 ) + { + level notify( "stop_round_end_check" ); + checking_for_round_end = 0; + } + + wait 0.05; + } +} + +reset_grief() +{ + wait 1; + level.isresetting_grief = 0; +} + +check_for_round_end( winner ) +{ + level endon( "keep_griefing" ); + level endon( "stop_round_end_check" ); + + level waittill( "end_of_round" ); + + level.gamemodulewinningteam = winner; + level.zombie_vars["spectators_respawn"] = 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + players[i] freezecontrols( 1 ); + + if ( players[i]._encounters_team == winner ) + { + players[i] thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "grief_won" ); + continue; + } + + players[i] thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "grief_lost" ); + } + + level notify( "game_module_ended", winner ); + level._game_module_game_end_check = undefined; + maps\mp\gametypes_zm\_zm_gametype::track_encounters_win_stats( level.gamemodulewinningteam ); + level notify( "end_game" ); +} + +wait_for_team_death() +{ + wait 15; + winner = undefined; + + while ( !isdefined( winner ) ) + { + cdc_alive = 0; + cia_alive = 0; + players = get_players(); + + foreach ( player in players ) + { + if ( player._encounters_team == "A" ) + { + if ( is_player_valid( player ) || isdefined( level.force_solo_quick_revive ) && level.force_solo_quick_revive && isdefined( player.lives ) && player.lives > 0 ) + cia_alive++; + + continue; + } + + if ( is_player_valid( player ) || isdefined( level.force_solo_quick_revive ) && level.force_solo_quick_revive && isdefined( player.lives ) && player.lives > 0 ) + cdc_alive++; + } + + if ( cia_alive == 0 ) + winner = "B"; + else if ( cdc_alive == 0 ) + winner = "A"; + + wait 0.05; + } + + level notify( "game_module_ended", winner ); +} + +make_supersprinter() +{ + self set_zombie_run_cycle( "super_sprint" ); +} + +game_module_custom_intermission( intermission_struct ) +{ + self closemenu(); + self closeingamemenu(); + level endon( "stop_intermission" ); + self endon( "disconnect" ); + self endon( "death" ); + self notify( "_zombie_game_over" ); + self.score = self.score_total; + self.sessionstate = "intermission"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + s_point = getstruct( intermission_struct, "targetname" ); + + if ( !isdefined( level.intermission_cam_model ) ) + { + level.intermission_cam_model = spawn( "script_model", s_point.origin ); + level.intermission_cam_model.angles = s_point.angles; + level.intermission_cam_model setmodel( "tag_origin" ); + } + + self.game_over_bg = newclienthudelem( self ); + self.game_over_bg.horzalign = "fullscreen"; + self.game_over_bg.vertalign = "fullscreen"; + self.game_over_bg setshader( "black", 640, 480 ); + self.game_over_bg.alpha = 1; + self spawn( level.intermission_cam_model.origin, level.intermission_cam_model.angles ); + self camerasetposition( level.intermission_cam_model ); + self camerasetlookat(); + self cameraactivate( 1 ); + self linkto( level.intermission_cam_model ); + level.intermission_cam_model moveto( getstruct( s_point.target, "targetname" ).origin, 12 ); + + if ( isdefined( level.intermission_cam_model.angles ) ) + level.intermission_cam_model rotateto( getstruct( s_point.target, "targetname" ).angles, 12 ); + + self.game_over_bg fadeovertime( 2 ); + self.game_over_bg.alpha = 0; + wait 2; + self.game_over_bg thread maps\mp\zombies\_zm::fade_up_over_time( 1 ); +} + +create_fireworks( launch_spots, min_wait, max_wait, randomize ) +{ + level endon( "stop_fireworks" ); + + while ( true ) + { + if ( isdefined( randomize ) && randomize ) + launch_spots = array_randomize( launch_spots ); + + foreach ( spot in launch_spots ) + { + level thread fireworks_launch( spot ); + wait( randomfloatrange( min_wait, max_wait ) ); + } + + wait( randomfloatrange( min_wait, max_wait ) ); + } +} + +fireworks_launch( launch_spot ) +{ + firework = spawn( "script_model", launch_spot.origin + ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ) ); + firework setmodel( "tag_origin" ); + wait_network_frame(); + playfxontag( level._effect["fw_trail_cheap"], firework, "tag_origin" ); + firework playloopsound( "zmb_souls_loop", 0.75 ); + dest = launch_spot; + + while ( isdefined( dest ) && isdefined( dest.target ) ) + { + random_offset = ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ); + new_dests = getstructarray( dest.target, "targetname" ); + new_dest = random( new_dests ); + dest = new_dest; + dist = distance( new_dest.origin + random_offset, firework.origin ); + time = dist / 700; + firework moveto( new_dest.origin + random_offset, time ); + + firework waittill( "movedone" ); + } + + firework playsound( "zmb_souls_end" ); + playfx( level._effect["fw_pre_burst"], firework.origin ); + firework delete(); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module_cleansed.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module_cleansed.gsc new file mode 100644 index 0000000..0a95380 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module_cleansed.gsc @@ -0,0 +1,22 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_turned; + +register_game_module() +{ + +} + +onstartgametype( name ) +{ + +} + +onstartcleansedgametype() +{ + +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module_grief.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module_grief.gsc new file mode 100644 index 0000000..739c351 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module_grief.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_game_module_utility; +#include maps\mp\zombies\_zm_game_module; + +register_game_module() +{ + level.game_module_grief_index = 9; + maps\mp\zombies\_zm_game_module::register_game_module( level.game_module_grief_index, "zgrief", ::onpreinitgametype, ::onpostinitgametype, undefined, ::onspawnzombie, ::onstartgametype ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module_meat.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module_meat.gsc new file mode 100644 index 0000000..09cd690 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module_meat.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_game_module_meat_utility; +#include maps\mp\zombies\_zm_game_module_utility; + diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module_meat_utility.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module_meat_utility.gsc new file mode 100644 index 0000000..f9b9ab1 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module_meat_utility.gsc @@ -0,0 +1,666 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_game_module_utility; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\gametypes_zm\zmeat; +#include maps\mp\zombies\_zm_powerups; + +award_grenades_for_team( team ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team ) + continue; + + lethal_grenade = players[i] get_player_lethal_grenade(); + players[i] giveweapon( lethal_grenade ); + players[i] setweaponammoclip( lethal_grenade, 4 ); + } +} + +get_players_on_meat_team( team ) +{ + players = get_players(); + players_on_team = []; + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team ) + continue; + + players_on_team[players_on_team.size] = players[i]; + } + + return players_on_team; +} + +get_alive_players_on_meat_team( team ) +{ + players = get_players(); + players_on_team = []; + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team ) + continue; + + if ( players[i].sessionstate == "spectator" || players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + continue; + + players_on_team[players_on_team.size] = players[i]; + } + + return players_on_team; +} + +init_minigun_ring() +{ + if ( isdefined( level._minigun_ring ) ) + return; + + ring_pos = getstruct( level._meat_location + "_meat_minigun", "script_noteworthy" ); + + if ( !isdefined( ring_pos ) ) + return; + + level._minigun_ring = spawn( "script_model", ring_pos.origin ); + level._minigun_ring.angles = ring_pos.angles; + level._minigun_ring setmodel( ring_pos.script_parameters ); + level._minigun_ring_clip = getent( level._meat_location + "_meat_minigun_clip", "script_noteworthy" ); + + if ( isdefined( level._minigun_ring_clip ) ) + level._minigun_ring_clip linkto( level._minigun_ring ); + else + iprintlnbold( "BUG: no level._minigun_ring_clip" ); + + level._minigun_ring_trig = getent( level._meat_location + "_meat_minigun_trig", "targetname" ); + + if ( isdefined( level._minigun_ring_trig ) ) + { + level._minigun_ring_trig enablelinkto(); + level._minigun_ring_trig linkto( level._minigun_ring ); + level._minigun_icon = spawn( "script_model", level._minigun_ring_trig.origin ); + level._minigun_icon setmodel( getweaponmodel( "minigun_zm" ) ); + level._minigun_icon linkto( level._minigun_ring ); + level._minigun_icon setclientfield( "ring_glowfx", 1 ); + level thread ring_toss( level._minigun_ring_trig, "minigun" ); + } + else + iprintlnbold( "BUG: no level._minigun_ring_trig" ); + + level._minigun_ring thread move_ring( ring_pos ); + level._minigun_ring thread rotate_ring( 1 ); +} + +init_ammo_ring() +{ + if ( isdefined( level._ammo_ring ) ) + return; + + name = level._meat_location + "_meat_ammo"; + ring_pos = getstruct( name, "script_noteworthy" ); + + if ( !isdefined( ring_pos ) ) + return; + + level._ammo_ring = spawn( "script_model", ring_pos.origin ); + level._ammo_ring.angles = ring_pos.angles; + level._ammo_ring setmodel( ring_pos.script_parameters ); + name = level._meat_location + "_meat_ammo_clip"; + level._ammo_ring_clip = getent( name, "script_noteworthy" ); + + if ( isdefined( level._ammo_ring_clip ) ) + level._ammo_ring_clip linkto( level._ammo_ring ); + else + iprintlnbold( "BUG: no level._ammo_ring_clip" ); + + name = level._meat_location + "_meat_ammo_trig"; + level._ammo_ring_trig = getent( name, "targetname" ); + + if ( isdefined( level._ammo_ring_clip ) ) + { + level._ammo_ring_trig enablelinkto(); + level._ammo_ring_trig linkto( level._ammo_ring ); + level._ammo_icon = spawn( "script_model", level._ammo_ring_trig.origin ); + level._ammo_icon setmodel( "zombie_ammocan" ); + level._ammo_icon linkto( level._ammo_ring ); + level._ammo_icon setclientfield( "ring_glowfx", 1 ); + level thread ring_toss( level._ammo_ring_trig, "ammo" ); + } + else + iprintlnbold( "BUG: no level._ammo_ring_trig" ); + + level._ammo_ring thread move_ring( ring_pos ); + level._ammo_ring thread rotate_ring( 1 ); +} + +init_splitter_ring() +{ + if ( isdefined( level._splitter_ring ) ) + return; + + ring_pos = getstruct( level._meat_location + "_meat_splitter", "script_noteworthy" ); + + if ( !isdefined( ring_pos ) ) + return; + + level._splitter_ring = spawn( "script_model", ring_pos.origin ); + level._splitter_ring.angles = ring_pos.angles; + level._splitter_ring setmodel( ring_pos.script_parameters ); + level._splitter_ring_trig1 = getent( level._meat_location + "_meat_splitter_trig_1", "targetname" ); + level._splitter_ring_trig2 = getent( level._meat_location + "_meat_splitter_trig_2", "targetname" ); + + if ( isdefined( level._splitter_ring_trig1 ) && isdefined( level._splitter_ring_trig2 ) ) + { + level._splitter_ring_trig1 enablelinkto(); + level._splitter_ring_trig2 enablelinkto(); + } + else + iprintlnbold( "BUG: missing at least one level._splitter_ring_trig" ); + + level._splitter_ring notsolid(); + level._meat_icon = spawn( "script_model", level._splitter_ring.origin ); + level._meat_icon setmodel( getweaponmodel( get_gamemode_var( "item_meat_name" ) ) ); + level._meat_icon linkto( level._splitter_ring ); + level._meat_icon setclientfield( "ring_glow_meatfx", 1 ); + + if ( isdefined( level._splitter_ring_trig1 ) && isdefined( level._splitter_ring_trig2 ) ) + { + level._splitter_ring_trig1 linkto( level._splitter_ring ); + level._splitter_ring_trig2 linkto( level._splitter_ring ); + level thread ring_toss( level._splitter_ring_trig1, "splitter" ); + level thread ring_toss( level._splitter_ring_trig2, "splitter" ); + } + + level._splitter_ring thread move_ring( ring_pos ); +} + +ring_toss( trig, type ) +{ + level endon( "end_game" ); + + while ( true ) + { + if ( isdefined( level._ring_triggered ) && level._ring_triggered ) + { + wait 0.05; + continue; + } + + if ( isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving ) ) + { + if ( level.item_meat istouching( trig ) ) + { + level thread ring_toss_prize( type, trig ); + level._ring_triggered = 1; + level thread ring_cooldown(); + } + } + + wait 0.05; + } +} + +ring_cooldown() +{ + wait 3; + level._ring_triggered = 0; +} + +ring_toss_prize( type, trig ) +{ + switch ( type ) + { + case "splitter": + level thread meat_splitter( trig ); + break; + case "minigun": + level thread minigun_prize( trig ); + break; + case "ammo": + level thread ammo_prize( trig ); + break; + } +} + +meat_splitter( trig ) +{ + level endon( "meat_grabbed" ); + level endon( "meat_kicked" ); + + while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) ) + wait 0.05; + + exit_trig = getent( trig.target, "targetname" ); + exit_struct = getstruct( trig.target, "targetname" ); + + while ( isdefined( level.item_meat ) && !level.item_meat istouching( exit_trig ) ) + wait 0.05; + + while ( isdefined( level.item_meat ) && level.item_meat istouching( exit_trig ) ) + wait 0.05; + + if ( !isdefined( level.item_meat ) ) + return; + + playfx( level._effect["fw_burst"], exit_trig.origin ); + flare_dir = vectornormalize( anglestoforward( exit_struct.angles ) ); + velocity = vectorscale( flare_dir, randomintrange( 400, 600 ) ); + velocity1 = ( velocity[0] + 75, velocity[1] + 75, randomintrange( 75, 125 ) ); + velocity2 = ( velocity[0] - 75, velocity[1] - 75, randomintrange( 75, 125 ) ); + velocity3 = ( velocity[0], velocity[1], 100 ); + level._fake_meats = []; + level._meat_splitter_activated = 1; + org = exit_trig.origin; + player = get_players()[0]; + player._spawning_meat = 1; + player endon( "disconnect" ); + thread split_meat( player, org, velocity1, velocity2, velocity ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_splitter", undefined, undefined, 1 ); + wait 0.1; + + while ( isdefined( level.splitting_meat ) && level.splitting_meat ) + wait 0.05; + + player._spawning_meat = 0; +} + +split_meat( player, org, vel1, vel2, vel3 ) +{ + level.splitting_meat = 1; + level.item_meat cleanup_meat(); + wait_network_frame(); + level._fake_meats[level._fake_meats.size] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel1 ); + wait_network_frame(); + level._fake_meats[level._fake_meats.size] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel2 ); + wait_network_frame(); + level._fake_meats[level._fake_meats.size] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel3 ); + real_meat = random( level._fake_meats ); + + foreach ( meat in level._fake_meats ) + { + if ( real_meat != meat ) + { + meat._fake_meat = 1; + meat thread maps\mp\gametypes_zm\zmeat::delete_on_real_meat_pickup(); + continue; + } + + meat._fake_meat = 0; + level.item_meat = meat; + } + + level.splitting_meat = 0; +} + +minigun_prize( trig ) +{ + while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) ) + wait 0.05; + + if ( !isdefined( level.item_meat ) ) + return; + + if ( isdefined( level._minigun_toss_cooldown ) && level._minigun_toss_cooldown ) + return; + + level thread minigun_toss_cooldown(); + + if ( !is_player_valid( level._last_person_to_throw_meat ) ) + return; + + level._last_person_to_throw_meat thread maps\mp\zombies\_zm_powerups::powerup_vo( "minigun" ); + level thread maps\mp\zombies\_zm_powerups::minigun_weapon_powerup( level._last_person_to_throw_meat ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_minigun", undefined, undefined, 1 ); +} + +ammo_prize( trig ) +{ + while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) ) + wait 0.05; + + if ( !isdefined( level.item_meat ) ) + return; + + if ( isdefined( level._ammo_toss_cooldown ) && level._ammo_toss_cooldown ) + return; + + playfx( level._effect["poltergeist"], trig.origin ); + level thread ammo_toss_cooldown(); + level._last_person_to_throw_meat thread maps\mp\zombies\_zm_powerups::powerup_vo( "full_ammo" ); + level thread maps\mp\zombies\_zm_powerups::full_ammo_powerup( undefined, level._last_person_to_throw_meat ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_ammo", undefined, undefined, 1 ); +} + +minigun_toss_cooldown() +{ + level._minigun_toss_cooldown = 1; + + if ( isdefined( level._minigun_icon ) ) + level._minigun_icon delete(); + + waittill_any_or_timeout( 120, "meat_end" ); + playfx( level._effect["poltergeist"], level._minigun_ring_trig.origin ); + level._minigun_icon = spawn( "script_model", level._minigun_ring_trig.origin ); + level._minigun_icon setmodel( getweaponmodel( "minigun_zm" ) ); + level._minigun_icon linkto( level._minigun_ring ); + level._minigun_icon setclientfield( "ring_glowfx", 1 ); + level._minigun_toss_cooldown = 0; +} + +ammo_toss_cooldown() +{ + level._ammo_toss_cooldown = 1; + + if ( isdefined( level._ammo_icon ) ) + level._ammo_icon delete(); + + waittill_any_or_timeout( 60, "meat_end" ); + playfx( level._effect["poltergeist"], level._ammo_ring_trig.origin ); + level._ammo_icon = spawn( "script_model", level._ammo_ring_trig.origin ); + level._ammo_icon setmodel( "zombie_ammocan" ); + level._ammo_icon linkto( level._ammo_ring ); + level._ammo_icon setclientfield( "ring_glowfx", 1 ); + level._ammo_toss_cooldown = 0; +} + +wait_for_team_death( team ) +{ + level endon( "meat_end" ); + encounters_team = undefined; + + while ( true ) + { + wait 1; + + while ( isdefined( level._checking_for_save ) && level._checking_for_save ) + wait 0.1; + + alive_team_players = get_alive_players_on_meat_team( team ); + + if ( alive_team_players.size > 0 ) + { + encounters_team = alive_team_players[0]._encounters_team; + continue; + } + + break; + } + + if ( !isdefined( encounters_team ) ) + return; + + winning_team = "A"; + + if ( encounters_team == "A" ) + winning_team = "B"; + + level notify( "meat_end", winning_team ); +} + +check_should_save_player( team ) +{ + if ( !isdefined( level._meat_on_team ) ) + return false; + + level._checking_for_save = 1; + players = get_players_on_meat_team( team ); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( isdefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player ) + { + while ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving || isdefined( level._meat_splitter_activated ) && level._meat_splitter_activated || isdefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying ) + { + if ( level._meat_on_team != player._meat_team ) + break; + + if ( isdefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling && level._meat_on_team == player._meat_team ) + break; + + wait 0.05; + } + + if ( !isdefined( player ) ) + { + level._checking_for_save = 0; + return false; + } + + if ( !( isdefined( player.last_damage_from_zombie_or_player ) && player.last_damage_from_zombie_or_player ) ) + { + level._checking_for_save = 0; + return false; + } + + if ( level._meat_on_team != player._meat_team && isdefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player ) + { + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + level thread revive_saved_player( player ); + return true; + } + } + } + } + + level._checking_for_save = 0; + return false; +} + +watch_save_player() +{ + if ( !isdefined( level._meat_on_team ) ) + return false; + + if ( !isdefined( level._last_person_to_throw_meat ) || level._last_person_to_throw_meat != self ) + return false; + + level._checking_for_save = 1; + + while ( isdefined( level.splitting_meat ) && level.splitting_meat || isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving || isdefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying ) ) + { + if ( level._meat_on_team != self._meat_team ) + break; + + if ( isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling ) && level._meat_on_team == self._meat_team ) + break; + + wait 0.05; + } + + if ( level._meat_on_team != self._meat_team && isdefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == self ) + { + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + level thread revive_saved_player( self ); + return true; + } + } + + level._checking_for_save = 0; + return false; +} + +revive_saved_player( player ) +{ + player endon( "disconnect" ); + player iprintlnbold( &"ZOMBIE_PLAYER_SAVED" ); + player playsound( level.zmb_laugh_alias ); + wait 0.25; + playfx( level._effect["poltergeist"], player.origin ); + playsoundatposition( "zmb_bolt", player.origin ); + earthquake( 0.5, 0.75, player.origin, 1000 ); + player thread maps\mp\zombies\_zm_laststand::auto_revive( player ); + player._saved_by_throw++; + level._checking_for_save = 0; +} + +get_game_module_players( player ) +{ + return get_players_on_meat_team( player._meat_team ); +} + +item_meat_spawn( origin ) +{ + org = origin; + player = get_players()[0]; + player._spawning_meat = 1; + player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( 0, 0, 0 ) ); + playsoundatposition( "zmb_spawn_powerup", org ); + wait 0.1; + player._spawning_meat = undefined; +} + +init_item_meat( gametype ) +{ + if ( gametype == "zgrief" ) + { + set_gamemode_var_once( "item_meat_name", "item_meat_zm" ); + set_gamemode_var_once( "item_meat_model", "t6_wpn_zmb_meat_world" ); + } + else + { + set_gamemode_var_once( "item_meat_name", "item_head_zm" ); + set_gamemode_var_once( "item_meat_model", "t6_wpn_zmb_severedhead_world" ); + } + + precacheitem( get_gamemode_var( "item_meat_name" ) ); + set_gamemode_var_once( "start_item_meat_name", get_gamemode_var( "item_meat_name" ) ); + level.meat_weaponidx = getweaponindexfromname( get_gamemode_var( "item_meat_name" ) ); + level.meat_pickupsound = getweaponpickupsound( level.meat_weaponidx ); + level.meat_pickupsoundplayer = getweaponpickupsoundplayer( level.meat_weaponidx ); +} + +meat_intro( launch_spot ) +{ + flag_wait( "start_encounters_match_logic" ); + wait 3; + level thread multi_launch( launch_spot ); + launch_meat( launch_spot ); + drop_meat( level._meat_start_point ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_drop", undefined, undefined, 1 ); +} + +launch_meat( launch_spot ) +{ + level waittill( "launch_meat" ); + + spots = getstructarray( launch_spot, "targetname" ); + + if ( isdefined( spots ) && spots.size > 0 ) + { + spot = random( spots ); + meat = spawn( "script_model", spot.origin ); + meat setmodel( "tag_origin" ); + wait_network_frame(); + playfxontag( level._effect["fw_trail"], meat, "tag_origin" ); + meat playloopsound( "zmb_souls_loop", 0.75 ); + dest = spot; + + while ( isdefined( dest ) && isdefined( dest.target ) ) + { + new_dest = getstruct( dest.target, "targetname" ); + dest = new_dest; + dist = distance( new_dest.origin, meat.origin ); + time = dist / 700; + meat moveto( new_dest.origin, time ); + + meat waittill( "movedone" ); + } + + meat playsound( "zmb_souls_end" ); + playfx( level._effect["fw_burst"], meat.origin ); + wait( randomfloatrange( 0.2, 0.5 ) ); + meat playsound( "zmb_souls_end" ); + playfx( level._effect["fw_burst"], meat.origin + ( randomintrange( 50, 150 ), randomintrange( 50, 150 ), randomintrange( -20, 20 ) ) ); + wait( randomfloatrange( 0.5, 0.75 ) ); + meat playsound( "zmb_souls_end" ); + playfx( level._effect["fw_burst"], meat.origin + ( randomintrange( -150, -50 ), randomintrange( -150, 50 ), randomintrange( -20, 20 ) ) ); + wait( randomfloatrange( 0.5, 0.75 ) ); + meat playsound( "zmb_souls_end" ); + playfx( level._effect["fw_burst"], meat.origin ); + meat delete(); + } +} + +multi_launch( launch_spot ) +{ + spots = getstructarray( launch_spot, "targetname" ); + + if ( isdefined( spots ) && spots.size > 0 ) + { + for ( x = 0; x < 3; x++ ) + { + for ( i = 0; i < spots.size; i++ ) + { + delay = randomfloatrange( 0.1, 0.25 ); + level thread fake_launch( spots[i], delay ); + } + + wait( randomfloatrange( 0.25, 0.75 ) ); + + if ( x > 1 ) + level notify( "launch_meat" ); + } + } + else + { + wait( randomfloatrange( 0.25, 0.75 ) ); + level notify( "launch_meat" ); + } +} + +fake_launch( launch_spot, delay ) +{ + wait( delay ); + wait( randomfloatrange( 0.1, 4 ) ); + meat = spawn( "script_model", launch_spot.origin + ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ) ); + meat setmodel( "tag_origin" ); + wait_network_frame(); + playfxontag( level._effect["fw_trail_cheap"], meat, "tag_origin" ); + meat playloopsound( "zmb_souls_loop", 0.75 ); + dest = launch_spot; + + while ( isdefined( dest ) && isdefined( dest.target ) ) + { + random_offset = ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ); + new_dest = getstruct( dest.target, "targetname" ); + dest = new_dest; + dist = distance( new_dest.origin + random_offset, meat.origin ); + time = dist / 700; + meat moveto( new_dest.origin + random_offset, time ); + + meat waittill( "movedone" ); + } + + meat playsound( "zmb_souls_end" ); + playfx( level._effect["fw_pre_burst"], meat.origin ); + meat delete(); +} + +drop_meat( drop_spot ) +{ + meat = spawn( "script_model", drop_spot + vectorscale( ( 0, 0, 1 ), 600.0 ) ); + meat setmodel( "tag_origin" ); + dist = distance( meat.origin, drop_spot ); + time = dist / 400; + wait 2; + meat moveto( drop_spot, time ); + wait_network_frame(); + playfxontag( level._effect["fw_drop"], meat, "tag_origin" ); + + meat waittill( "movedone" ); + + playfx( level._effect["fw_impact"], drop_spot ); + level notify( "reset_meat" ); + meat delete(); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module_standard.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module_standard.gsc new file mode 100644 index 0000000..df94d58 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module_standard.gsc @@ -0,0 +1,3 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module_turned.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module_turned.gsc new file mode 100644 index 0000000..0c3e8f6 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module_turned.gsc @@ -0,0 +1,59 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_turned; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zombies\_zm_game_module_cleansed; + +register_game_module() +{ + level.game_module_turned_index = 6; + maps\mp\zombies\_zm_game_module::register_game_module( level.game_module_turned_index, "zturned", maps\mp\zombies\_zm_game_module_cleansed::onpreinitgametype, ::onpostinitgametype, undefined, maps\mp\zombies\_zm_game_module_cleansed::onspawnzombie, maps\mp\zombies\_zm_game_module_cleansed::onstartgametype ); +} + +register_turned_match( start_func, end_func, name ) +{ + if ( !isdefined( level._registered_turned_matches ) ) + level._registered_turned_matches = []; + + match = spawnstruct(); + match.match_name = name; + match.match_start_func = start_func; + match.match_end_func = end_func; + level._registered_turned_matches[level._registered_turned_matches.size] = match; +} + +get_registered_turned_match( name ) +{ + foreach ( struct in level._registered_turned_matches ) + { + if ( struct.match_name == name ) + return struct; + } +} + +set_current_turned_match( name ) +{ + level._current_turned_match = name; +} + +get_current_turned_match() +{ + return level._current_turned_match; +} + +init_zombie_weapon() +{ + maps\mp\zombies\_zm_turned::init(); +} + +onpostinitgametype() +{ + if ( level.scr_zm_game_module != level.game_module_turned_index ) + return; + + level thread init_zombie_weapon(); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module_utility.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module_utility.gsc new file mode 100644 index 0000000..aa16bce --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_game_module_utility.gsc @@ -0,0 +1,46 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_game_module_meat_utility; +#include maps\mp\zombies\_zm_game_module_meat; + +init_item_meat() +{ + level.item_meat_name = "item_meat_zm"; + precacheitem( level.item_meat_name ); +} + +move_ring( ring ) +{ + positions = getstructarray( ring.target, "targetname" ); + positions = array_randomize( positions ); + level endon( "end_game" ); + + while ( true ) + { + foreach ( position in positions ) + { + self moveto( position.origin, randomintrange( 30, 45 ) ); + + self waittill( "movedone" ); + } + } +} + +rotate_ring( forward ) +{ + level endon( "end_game" ); + dir = -360; + + if ( forward ) + dir = 360; + + while ( true ) + { + self rotateyaw( dir, 9 ); + wait 9; + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_gump.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_gump.gsc new file mode 100644 index 0000000..ee0a6a1 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_gump.gsc @@ -0,0 +1,76 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; + +init() +{ + if ( !( isdefined( level.disable_blackscreen_clientfield ) && level.disable_blackscreen_clientfield ) ) + registerclientfield( "toplayer", "blackscreen", 1, 1, "int" ); + + if ( !isdefined( level.uses_gumps ) ) + level.uses_gumps = 0; + + if ( isdefined( level.uses_gumps ) && level.uses_gumps ) + onplayerconnect_callback( ::player_connect_gump ); +} + +player_teleport_blackscreen_on() +{ + if ( isdefined( level.disable_blackscreen_clientfield ) && level.disable_blackscreen_clientfield ) + return; + + if ( isdefined( level.uses_gumps ) && level.uses_gumps ) + { + self setclientfieldtoplayer( "blackscreen", 1 ); + wait 0.05; + self setclientfieldtoplayer( "blackscreen", 0 ); + } +} + +player_connect_gump() +{ + +} + +player_watch_spectate_change() +{ + if ( isdefined( level.disable_blackscreen_clientfield ) && level.disable_blackscreen_clientfield ) + return; + + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "spectator_cycle" ); + + self setclientfieldtoplayer( "blackscreen", 1 ); + wait 0.05; + self setclientfieldtoplayer( "blackscreen", 0 ); + } +} + +gump_test() +{ +/# + wait 10; + pos1 = ( -4904, -7657, 4 ); + pos3 = ( 7918, -6506, 177 ); + pos2 = ( 1986, -73, 4 ); + players = get_players(); + + if ( isdefined( players[0] ) ) + players[0] setorigin( pos1 ); + + wait 0.05; + + if ( isdefined( players[1] ) ) + players[1] setorigin( pos2 ); + + wait 0.05; + + if ( isdefined( players[2] ) ) + players[2] setorigin( pos3 ); +#/ +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_hackables_boards.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_hackables_boards.gsc new file mode 100644 index 0000000..2d7654d --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_hackables_boards.gsc @@ -0,0 +1,126 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equip_hacker; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_blockers; + +hack_boards() +{ + windows = getstructarray( "exterior_goal", "targetname" ); + + for ( i = 0; i < windows.size; i++ ) + { + window = windows[i]; + struct = spawnstruct(); + spot = window; + + if ( isdefined( window.trigger_location ) ) + spot = window.trigger_location; + + org = groundpos( spot.origin ) + vectorscale( ( 0, 0, 1 ), 4.0 ); + r = 96; + h = 96; + + if ( isdefined( spot.radius ) ) + r = spot.radius; + + if ( isdefined( spot.height ) ) + h = spot.height; + + struct.origin = org + vectorscale( ( 0, 0, 1 ), 48.0 ); + struct.radius = r; + struct.height = h; + struct.script_float = 2; + struct.script_int = 0; + struct.window = window; + struct.no_bullet_trace = 1; + struct.no_sight_check = 1; + struct.dot_limit = 0.7; + struct.no_touch_check = 1; + struct.last_hacked_round = 0; + struct.num_hacks = 0; + maps\mp\zombies\_zm_equip_hacker::register_pooled_hackable_struct( struct, ::board_hack, ::board_qualifier ); + } +} + +board_hack( hacker ) +{ + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( self ); + num_chunks_checked = 0; + last_repaired_chunk = undefined; + + if ( self.last_hacked_round != level.round_number ) + { + self.last_hacked_round = level.round_number; + self.num_hacks = 0; + } + + self.num_hacks++; + + if ( self.num_hacks < 3 ) + hacker maps\mp\zombies\_zm_score::add_to_player_score( 100 ); + else + { + cost = int( min( 300, hacker.score ) ); + + if ( cost ) + hacker maps\mp\zombies\_zm_score::minus_to_player_score( cost ); + } + + while ( true ) + { + if ( all_chunks_intact( self.window, self.window.barrier_chunks ) ) + break; + + chunk = get_random_destroyed_chunk( self.window, self.window.barrier_chunks ); + + if ( !isdefined( chunk ) ) + break; + + self.window thread maps\mp\zombies\_zm_blockers::replace_chunk( self.window, chunk, undefined, 0, 1 ); + last_repaired_chunk = chunk; + + if ( isdefined( self.clip ) ) + { + self.window.clip enable_trigger(); + self.window.clip disconnectpaths(); + } + else + blocker_disconnect_paths( self.window.neg_start, self.window.neg_end ); + + wait_network_frame(); + num_chunks_checked++; + + if ( num_chunks_checked >= 20 ) + break; + } + + if ( isdefined( self.window.zbarrier ) ) + { + if ( isdefined( last_repaired_chunk ) ) + { + while ( self.window.zbarrier getzbarrierpiecestate( last_repaired_chunk ) == "closing" ) + wait 0.05; + } + } + else + { + while ( isdefined( last_repaired_chunk ) && last_repaired_chunk.state == "mid_repair" ) + wait 0.05; + } + + maps\mp\zombies\_zm_equip_hacker::register_pooled_hackable_struct( self, ::board_hack, ::board_qualifier ); + self.window notify( "blocker_hacked" ); + self.window notify( "no valid boards" ); +} + +board_qualifier( player ) +{ + if ( all_chunks_intact( self.window, self.window.barrier_chunks ) || no_valid_repairable_boards( self.window, self.window.barrier_chunks ) ) + return false; + + return true; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_hackables_box.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_hackables_box.gsc new file mode 100644 index 0000000..e9e2fb3 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_hackables_box.gsc @@ -0,0 +1,349 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_equip_hacker; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_audio; + +box_hacks() +{ + boxes = getstructarray( "treasure_chest_use", "targetname" ); + + for ( i = 0; i < boxes.size; i++ ) + { + box = boxes[i]; + box.box_hacks["respin"] = ::init_box_respin; + box.box_hacks["respin_respin"] = ::init_box_respin_respin; + box.box_hacks["summon_box"] = ::init_summon_box; + box.last_hacked_round = 0; + } + + level._zombiemode_chest_joker_chance_override_func = ::check_for_free_locations; + level._zombiemode_custom_box_move_logic = ::custom_box_move_logic; + level._zombiemode_check_firesale_loc_valid_func = ::custom_check_firesale_loc_valid_func; + init_summon_hacks(); +} + +custom_check_firesale_loc_valid_func() +{ + if ( isdefined( self.unitrigger_stub ) ) + box = self.unitrigger_stub.trigger_target; + else if ( isdefined( self.stub ) ) + box = self.stub.trigger_target; + + if ( box.last_hacked_round >= level.round_number ) + return false; + + return true; +} + +custom_box_move_logic() +{ + num_hacked_locs = 0; + + for ( i = 0; i < level.chests.size; i++ ) + { + if ( level.chests[i].last_hacked_round >= level.round_number ) + num_hacked_locs++; + } + + if ( num_hacked_locs == 0 ) + { + maps\mp\zombies\_zm_magicbox::default_box_move_logic(); + return; + } + + found_loc = 0; + original_spot = level.chest_index; + + while ( !found_loc ) + { + level.chest_index++; + + if ( original_spot == level.chest_index ) + level.chest_index++; + + level.chest_index %= level.chests.size; + + if ( level.chests[level.chest_index].last_hacked_round < level.round_number ) + found_loc = 1; + } +} + +check_for_free_locations( chance ) +{ + boxes = level.chests; + stored_chance = chance; + chance = -1; + + for ( i = 0; i < boxes.size; i++ ) + { + if ( i == level.chest_index ) + continue; + + if ( boxes[i].last_hacked_round < level.round_number ) + { + chance = stored_chance; + break; + } + } + + return chance; +} + +init_box_respin( chest, player ) +{ + self thread box_respin_think( chest, player ); +} + +box_respin_think( chest, player ) +{ + respin_hack = spawnstruct(); + respin_hack.origin = self.origin + vectorscale( ( 0, 0, 1 ), 24.0 ); + respin_hack.radius = 48; + respin_hack.height = 72; + respin_hack.script_int = 600; + respin_hack.script_float = 1.5; + respin_hack.player = player; + respin_hack.no_bullet_trace = 1; + respin_hack.chest = chest; + maps\mp\zombies\_zm_equip_hacker::register_pooled_hackable_struct( respin_hack, ::respin_box, ::hack_box_qualifier ); + self.weapon_model waittill_either( "death", "kill_respin_think_thread" ); + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( respin_hack ); +} + +respin_box_thread( hacker ) +{ + if ( isdefined( self.chest.zbarrier.weapon_model ) ) + self.chest.zbarrier.weapon_model notify( "kill_respin_think_thread" ); + + self.chest.no_fly_away = 1; + self.chest.zbarrier notify( "box_hacked_respin" ); + self.chest disable_trigger(); + play_sound_at_pos( "open_chest", self.chest.zbarrier.origin ); + play_sound_at_pos( "music_chest", self.chest.zbarrier.origin ); + maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( self.chest.zbarrier.weapon_string ); + self.chest.zbarrier thread maps\mp\zombies\_zm_magicbox::treasure_chest_weapon_spawn( self.chest, hacker, 1 ); + + self.chest.zbarrier waittill( "randomization_done" ); + + self.chest.no_fly_away = undefined; + + if ( !flag( "moving_chest_now" ) ) + { + self.chest enable_trigger(); + self.chest thread maps\mp\zombies\_zm_magicbox::treasure_chest_timeout(); + } +} + +respin_box( hacker ) +{ + self thread respin_box_thread( hacker ); +} + +hack_box_qualifier( player ) +{ + if ( player == self.chest.chest_user && isdefined( self.chest.weapon_out ) ) + return true; + + return false; +} + +init_box_respin_respin( chest, player ) +{ + self thread box_respin_respin_think( chest, player ); +} + +box_respin_respin_think( chest, player ) +{ + respin_hack = spawnstruct(); + respin_hack.origin = self.origin + vectorscale( ( 0, 0, 1 ), 24.0 ); + respin_hack.radius = 48; + respin_hack.height = 72; + respin_hack.script_int = -950; + respin_hack.script_float = 1.5; + respin_hack.player = player; + respin_hack.no_bullet_trace = 1; + respin_hack.chest = chest; + maps\mp\zombies\_zm_equip_hacker::register_pooled_hackable_struct( respin_hack, ::respin_respin_box, ::hack_box_qualifier ); + self.weapon_model waittill_either( "death", "kill_respin_respin_think_thread" ); + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( respin_hack ); +} + +respin_respin_box( hacker ) +{ + org = self.chest.zbarrier.origin; + + if ( isdefined( self.chest.zbarrier.weapon_model ) ) + { + self.chest.zbarrier.weapon_model notify( "kill_respin_respin_think_thread" ); + self.chest.zbarrier.weapon_model notify( "kill_weapon_movement" ); + self.chest.zbarrier.weapon_model moveto( org + vectorscale( ( 0, 0, 1 ), 40.0 ), 0.5 ); + } + + if ( isdefined( self.chest.zbarrier.weapon_model_dw ) ) + { + self.chest.zbarrier.weapon_model_dw notify( "kill_weapon_movement" ); + self.chest.zbarrier.weapon_model_dw moveto( org + vectorscale( ( 0, 0, 1 ), 40.0 ) - vectorscale( ( 1, 1, 1 ), 3.0 ), 0.5 ); + } + + self.chest.zbarrier notify( "box_hacked_rerespin" ); + self.chest.box_rerespun = 1; + self thread fake_weapon_powerup_thread( self.chest.zbarrier.weapon_model, self.chest.zbarrier.weapon_model_dw ); +} + +fake_weapon_powerup_thread( weapon1, weapon2 ) +{ + weapon1 endon( "death" ); + playfxontag( level._effect["powerup_on_solo"], weapon1, "tag_origin" ); + playsoundatposition( "zmb_spawn_powerup", weapon1.origin ); + weapon1 playloopsound( "zmb_spawn_powerup_loop" ); + self thread fake_weapon_powerup_timeout( weapon1, weapon2 ); + + while ( isdefined( weapon1 ) ) + { + waittime = randomfloatrange( 2.5, 5 ); + yaw = randomint( 360 ); + + if ( yaw > 300 ) + yaw = 300; + else if ( yaw < 60 ) + yaw = 60; + + yaw = weapon1.angles[1] + yaw; + weapon1 rotateto( ( -60 + randomint( 120 ), yaw, -45 + randomint( 90 ) ), waittime, waittime * 0.5, waittime * 0.5 ); + + if ( isdefined( weapon2 ) ) + weapon2 rotateto( ( -60 + randomint( 120 ), yaw, -45 + randomint( 90 ) ), waittime, waittime * 0.5, waittime * 0.5 ); + + wait( randomfloat( waittime - 0.1 ) ); + } +} + +fake_weapon_powerup_timeout( weapon1, weapon2 ) +{ + weapon1 endon( "death" ); + wait 15; + + for ( i = 0; i < 40; i++ ) + { + if ( i % 2 ) + { + weapon1 hide(); + + if ( isdefined( weapon2 ) ) + weapon2 hide(); + } + else + { + weapon1 show(); + + if ( isdefined( weapon2 ) ) + weapon2 hide(); + } + + if ( i < 15 ) + { + wait 0.5; + continue; + } + + if ( i < 25 ) + { + wait 0.25; + continue; + } + + wait 0.1; + } + + self.chest notify( "trigger", level ); + + if ( isdefined( weapon1 ) ) + weapon1 delete(); + + if ( isdefined( weapon2 ) ) + weapon2 delete(); +} + +init_summon_hacks() +{ + chests = getstructarray( "treasure_chest_use", "targetname" ); + + for ( i = 0; i < chests.size; i++ ) + { + chest = chests[i]; + chest init_summon_box( chest.hidden ); + } +} + +init_summon_box( create ) +{ + if ( create ) + { + if ( isdefined( self._summon_hack_struct ) ) + { + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( self._summon_hack_struct ); + self._summon_hack_struct = undefined; + } + + struct = spawnstruct(); + struct.origin = self.chest_box.origin + vectorscale( ( 0, 0, 1 ), 24.0 ); + struct.radius = 48; + struct.height = 72; + struct.script_int = 1200; + struct.script_float = 5; + struct.no_bullet_trace = 1; + struct.chest = self; + self._summon_hack_struct = struct; + maps\mp\zombies\_zm_equip_hacker::register_pooled_hackable_struct( struct, ::summon_box, ::summon_box_qualifier ); + } + else if ( isdefined( self._summon_hack_struct ) ) + { + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( self._summon_hack_struct ); + self._summon_hack_struct = undefined; + } +} + +summon_box_thread( hacker ) +{ + self.chest.last_hacked_round = level.round_number + randomintrange( 2, 5 ); + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( self ); + self.chest thread maps\mp\zombies\_zm_magicbox::show_chest(); + self.chest notify( "kill_chest_think" ); + self.chest.auto_open = 1; + self.chest.no_charge = 1; + self.chest.no_fly_away = 1; + self.chest.forced_user = hacker; + self.chest thread maps\mp\zombies\_zm_magicbox::treasure_chest_think(); + + self.chest.zbarrier waittill( "closed" ); + + self.chest.forced_user = undefined; + self.chest.auto_open = undefined; + self.chest.no_charge = undefined; + self.chest.no_fly_away = undefined; + self.chest thread maps\mp\zombies\_zm_magicbox::hide_chest(); +} + +summon_box( hacker ) +{ + self thread summon_box_thread( hacker ); + + if ( isdefined( hacker ) ) + hacker thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "hack_box" ); +} + +summon_box_qualifier( player ) +{ + if ( self.chest.last_hacked_round > level.round_number ) + return false; + + if ( isdefined( self.chest.zbarrier.chest_moving ) && self.chest.zbarrier.chest_moving ) + return false; + + return true; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_hackables_doors.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_hackables_doors.gsc new file mode 100644 index 0000000..c56448a --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_hackables_doors.gsc @@ -0,0 +1,97 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_blockers; +#include maps\mp\zombies\_zm_equip_hacker; + +door_struct_debug() +{ + while ( true ) + { + wait 0.1; + origin = self.origin; + point = origin; + + for ( i = 1; i < 5; i++ ) + { + point = origin + anglestoforward( self.door.angles ) * ( i * 2 ); + passed = bullettracepassed( point, origin, 0, undefined ); + color = vectorscale( ( 0, 1, 0 ), 255.0 ); + + if ( !passed ) + color = vectorscale( ( 1, 0, 0 ), 255.0 ); +/# + print3d( point, "+", color, 1, 1 ); +#/ + } + } +} + +hack_doors( targetname = "zombie_door", door_activate_func ) +{ + doors = getentarray( targetname, "targetname" ); + + if ( !isdefined( door_activate_func ) ) + door_activate_func = maps\mp\zombies\_zm_blockers::door_opened; + + for ( i = 0; i < doors.size; i++ ) + { + door = doors[i]; + struct = spawnstruct(); + struct.origin = door.origin + anglestoforward( door.angles ) * 2; + struct.radius = 48; + struct.height = 72; + struct.script_float = 32.7; + struct.script_int = 200; + struct.door = door; + struct.no_bullet_trace = 1; + struct.door_activate_func = door_activate_func; + trace_passed = 0; + door thread hide_door_buy_when_hacker_active( struct ); + maps\mp\zombies\_zm_equip_hacker::register_pooled_hackable_struct( struct, ::door_hack ); + door thread watch_door_for_open( struct ); + } +} + +hide_door_buy_when_hacker_active( door_struct ) +{ + self endon( "death" ); + self endon( "door_hacked" ); + self endon( "door_opened" ); + maps\mp\zombies\_zm_equip_hacker::hide_hint_when_hackers_active(); +} + +watch_door_for_open( door_struct ) +{ + self waittill( "door_opened" ); + + self endon( "door_hacked" ); + remove_all_door_hackables_that_target_door( door_struct.door ); +} + +door_hack( hacker ) +{ + self.door notify( "door_hacked" ); + self.door notify( "kill_door_think" ); + remove_all_door_hackables_that_target_door( self.door ); + self.door [[ self.door_activate_func ]](); + self.door._door_open = 1; +} + +remove_all_door_hackables_that_target_door( door ) +{ + candidates = []; + + for ( i = 0; i < level._hackable_objects.size; i++ ) + { + obj = level._hackable_objects[i]; + + if ( isdefined( obj.door ) && obj.door.target == door.target ) + candidates[candidates.size] = obj; + } + + for ( i = 0; i < candidates.size; i++ ) + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( candidates[i] ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_hackables_packapunch.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_hackables_packapunch.gsc new file mode 100644 index 0000000..bf17999 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_hackables_packapunch.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equip_hacker; + +hack_packapunch() +{ + vending_weapon_upgrade_trigger = getentarray( "specialty_weapupgrade", "script_noteworthy" ); + perk = getent( vending_weapon_upgrade_trigger[0].target, "targetname" ); + + if ( isdefined( perk ) ) + { + struct = spawnstruct(); + struct.origin = perk.origin + anglestoright( perk.angles ) * 26 + vectorscale( ( 0, 0, 1 ), 48.0 ); + struct.radius = 48; + struct.height = 48; + struct.script_float = 5; + struct.script_int = -1000; + level._pack_hack_struct = struct; + maps\mp\zombies\_zm_equip_hacker::register_pooled_hackable_struct( level._pack_hack_struct, ::packapunch_hack ); + level._pack_hack_struct pack_trigger_think(); + } +} + +pack_trigger_think() +{ + if ( !flag_exists( "enter_nml" ) ) + return; + + while ( true ) + { + flag_wait( "enter_nml" ); + self.script_int = -1000; + + while ( flag( "enter_nml" ) ) + wait 1.0; + } +} + +packapunch_hack( hacker ) +{ + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( level._pack_hack_struct ); + level._pack_hack_struct.script_int = 0; + level notify( "packapunch_hacked" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_hackables_perks.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_hackables_perks.gsc new file mode 100644 index 0000000..1591790 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_hackables_perks.gsc @@ -0,0 +1,80 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equip_hacker; + +hack_perks() +{ + vending_triggers = getentarray( "zombie_vending", "targetname" ); + + for ( i = 0; i < vending_triggers.size; i++ ) + { + struct = spawnstruct(); + + if ( isdefined( vending_triggers[i].machine ) ) + machine[0] = vending_triggers[i].machine; + else + machine = getentarray( vending_triggers[i].target, "targetname" ); + + struct.origin = machine[0].origin + anglestoright( machine[0].angles ) * 18 + vectorscale( ( 0, 0, 1 ), 48.0 ); + struct.radius = 48; + struct.height = 64; + struct.script_float = 5; + + while ( !isdefined( vending_triggers[i].cost ) ) + wait 0.05; + + struct.script_int = int( vending_triggers[i].cost * -1 ); + struct.perk = vending_triggers[i]; + + if ( isdefined( level._hack_perks_override ) ) + struct = struct [[ level._hack_perks_override ]](); + + vending_triggers[i].hackable = struct; + maps\mp\zombies\_zm_equip_hacker::register_pooled_hackable_struct( struct, ::perk_hack, ::perk_hack_qualifier ); + } + + level._solo_revive_machine_expire_func = ::solo_revive_expire_func; +} + +solo_revive_expire_func() +{ + if ( isdefined( self.hackable ) ) + { + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( self.hackable ); + self.hackable = undefined; + } +} + +perk_hack_qualifier( player ) +{ + if ( isdefined( player._retain_perks ) ) + return false; + + if ( isdefined( self.perk ) && isdefined( self.perk.script_noteworthy ) ) + { + if ( player hasperk( self.perk.script_noteworthy ) ) + return true; + } + + return false; +} + +perk_hack( hacker ) +{ + if ( flag( "solo_game" ) && self.perk.script_noteworthy == "specialty_quickrevive" ) + hacker.lives--; + + hacker notify( self.perk.script_noteworthy + "_stop" ); + hacker playsoundtoplayer( "evt_perk_throwup", hacker ); + + if ( isdefined( hacker.perk_hud ) ) + { + keys = getarraykeys( hacker.perk_hud ); + + for ( i = 0; i < hacker.perk_hud.size; i++ ) + hacker.perk_hud[keys[i]].x = i * 30; + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_hackables_powerups.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_hackables_powerups.gsc new file mode 100644 index 0000000..a1aedc6 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_hackables_powerups.gsc @@ -0,0 +1,82 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equip_hacker; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_powerups; + +unhackable_powerup( name ) +{ + ret = 0; + + switch ( name ) + { + case "random_weapon": + case "lose_points_team": + case "bonus_points_team": + case "bonus_points_player": + ret = 1; + break; + } + + return ret; +} + +hack_powerups() +{ + while ( true ) + { + level waittill( "powerup_dropped", powerup ); + + if ( !unhackable_powerup( powerup.powerup_name ) ) + { + struct = spawnstruct(); + struct.origin = powerup.origin; + struct.radius = 65; + struct.height = 72; + struct.script_float = 5; + struct.script_int = 5000; + struct.powerup = powerup; + powerup thread powerup_pickup_watcher( struct ); + maps\mp\zombies\_zm_equip_hacker::register_pooled_hackable_struct( struct, ::powerup_hack ); + } + } +} + +powerup_pickup_watcher( powerup_struct ) +{ + self endon( "hacked" ); + + self waittill( "death" ); + + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( powerup_struct ); +} + +powerup_hack( hacker ) +{ + self.powerup notify( "hacked" ); + + if ( isdefined( self.powerup.zombie_grabbable ) && self.powerup.zombie_grabbable ) + { + self.powerup notify( "powerup_timedout" ); + origin = self.powerup.origin; + self.powerup delete(); + self.powerup = maps\mp\zombies\_zm_net::network_safe_spawn( "powerup", 1, "script_model", origin ); + + if ( isdefined( self.powerup ) ) + { + self.powerup maps\mp\zombies\_zm_powerups::powerup_setup( "full_ammo" ); + self.powerup thread maps\mp\zombies\_zm_powerups::powerup_timeout(); + self.powerup thread maps\mp\zombies\_zm_powerups::powerup_wobble(); + self.powerup thread maps\mp\zombies\_zm_powerups::powerup_grab(); + } + } + else if ( self.powerup.powerup_name == "full_ammo" ) + self.powerup maps\mp\zombies\_zm_powerups::powerup_setup( "fire_sale" ); + else + self.powerup maps\mp\zombies\_zm_powerups::powerup_setup( "full_ammo" ); + + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( self ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_hackables_wallbuys.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_hackables_wallbuys.gsc new file mode 100644 index 0000000..e82eadf --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_hackables_wallbuys.gsc @@ -0,0 +1,46 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equip_hacker; + +hack_wallbuys() +{ + weapon_spawns = getstructarray( "weapon_upgrade", "targetname" ); + + for ( i = 0; i < weapon_spawns.size; i++ ) + { + if ( weapontype( weapon_spawns[i].zombie_weapon_upgrade ) == "grenade" ) + continue; + + if ( weapontype( weapon_spawns[i].zombie_weapon_upgrade ) == "melee" ) + continue; + + if ( weapontype( weapon_spawns[i].zombie_weapon_upgrade ) == "mine" ) + continue; + + if ( weapontype( weapon_spawns[i].zombie_weapon_upgrade ) == "bomb" ) + continue; + + struct = spawnstruct(); + struct.origin = weapon_spawns[i].origin; + struct.radius = 48; + struct.height = 48; + struct.script_float = 2; + struct.script_int = 3000; + struct.wallbuy = weapon_spawns[i]; + maps\mp\zombies\_zm_equip_hacker::register_pooled_hackable_struct( struct, ::wallbuy_hack ); + } + + bowie_triggers = getentarray( "bowie_upgrade", "targetname" ); + array_thread( bowie_triggers, maps\mp\zombies\_zm_equip_hacker::hide_hint_when_hackers_active ); +} + +wallbuy_hack( hacker ) +{ + self.wallbuy.hacked = 1; + self.clientfieldname = self.wallbuy.zombie_weapon_upgrade + "_" + self.origin; + level setclientfield( self.clientfieldname, 2 ); + maps\mp\zombies\_zm_equip_hacker::deregister_hackable_struct( self ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_jump_pad.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_jump_pad.gsc new file mode 100644 index 0000000..8dd9032 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_jump_pad.gsc @@ -0,0 +1,530 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_audio; + +init() +{ + if ( is_true( level._uses_jump_pads ) ) + level jump_pad_init(); +} + +jump_pad_init() +{ + level._jump_pad_override = []; + jump_pad_triggers = getentarray( "trig_jump_pad", "targetname" ); + + if ( !isdefined( jump_pad_triggers ) ) + return; + + for ( i = 0; i < jump_pad_triggers.size; i++ ) + { + jump_pad_triggers[i].start = getstruct( jump_pad_triggers[i].target, "targetname" ); + jump_pad_triggers[i].destination = getstructarray( jump_pad_triggers[i].start.target, "targetname" ); + + if ( isdefined( jump_pad_triggers[i].script_string ) ) + jump_pad_triggers[i].overrides = strtok( jump_pad_triggers[i].script_string, "," ); + + jump_pad_triggers[i] thread jump_pad_think(); + } + + onplayerconnect_callback( ::jump_pad_player_variables ); +} + +jump_pad_player_variables() +{ + self._padded = 0; + self.lander = 0; +} + +jump_pad_think() +{ + self endon( "destroyed" ); + end_point = undefined; + start_point = undefined; + z_velocity = undefined; + z_dist = undefined; + fling_this_way = undefined; + jump_time = undefined; + world_gravity = getdvarint( "bg_gravity" ); + gravity_pulls = -13.3; + top_velocity_sq = 810000; + forward_scaling = 1.0; + + if ( isdefined( self.script_flag_wait ) ) + { + if ( !isdefined( level.flag[self.script_flag_wait] ) ) + flag_init( self.script_flag_wait ); + + flag_wait( self.script_flag_wait ); + } + + while ( isdefined( self ) ) + { + self waittill( "trigger", who ); + + if ( isplayer( who ) ) + self thread trigger_thread( who, ::jump_pad_start, ::jump_pad_cancel ); + } +} + +jump_pad_start( ent_player, endon_condition ) +{ + self endon( "endon_condition" ); + ent_player endon( "left_jump_pad" ); + ent_player endon( "death" ); + ent_player endon( "disconnect" ); + end_point = undefined; + start_point = undefined; + z_velocity = undefined; + z_dist = undefined; + fling_this_way = undefined; + jump_time = undefined; + world_gravity = getdvarint( "bg_gravity" ); + gravity_pulls = -13.3; + top_velocity_sq = 810000; + forward_scaling = 1.0; + start_point = self.start; + + if ( isdefined( self.name ) ) + { + self._action_overrides = strtok( self.name, "," ); + + if ( isdefined( self._action_overrides ) ) + { + for ( i = 0; i < self._action_overrides.size; i++ ) + ent_player jump_pad_player_overrides( self._action_overrides[i] ); + } + } + + if ( isdefined( self.script_wait ) ) + { + if ( self.script_wait < 1 ) + self playsound( "evt_jump_pad_charge_short" ); + else + self playsound( "evt_jump_pad_charge" ); + + wait( self.script_wait ); + } + else + { + self playsound( "evt_jump_pad_charge" ); + wait 1.0; + } + + if ( isdefined( self.script_parameters ) && isdefined( level._jump_pad_override[self.script_parameters] ) ) + end_point = self [[ level._jump_pad_override[self.script_parameters] ]]( ent_player ); + + if ( !isdefined( end_point ) ) + end_point = self.destination[randomint( self.destination.size )]; + + if ( isdefined( self.script_string ) && isdefined( level._jump_pad_override[self.script_string] ) ) + { + info_array = self [[ level._jump_pad_override[self.script_string] ]]( start_point, end_point ); + fling_this_way = info_array[0]; + jump_time = info_array[1]; + } + else + { + end_spot = end_point.origin; + + if ( !is_true( self.script_airspeed ) ) + { + rand_end = ( randomfloatrange( -1, 1 ), randomfloatrange( -1, 1 ), 0 ); + rand_scale = randomint( 100 ); + rand_spot = vectorscale( rand_end, rand_scale ); + end_spot = end_point.origin + rand_spot; + } + + pad_dist = distance( start_point.origin, end_spot ); + z_dist = end_spot[2] - start_point.origin[2]; + jump_velocity = end_spot - start_point.origin; + + if ( z_dist > 40 && z_dist < 135 ) + { + z_dist *= 2.5; + forward_scaling = 1.1; +/# + if ( getdvarint( _hash_D5FD01C3 ) ) + { + if ( getdvar( _hash_E2494021 ) != "" ) + z_dist *= getdvarfloat( _hash_E2494021 ); + + if ( getdvar( _hash_4E3BC729 ) != "" ) + forward_scaling = getdvarfloat( _hash_4E3BC729 ); + } +#/ + } + else if ( z_dist >= 135 ) + { + z_dist *= 2.7; + forward_scaling = 1.3; +/# + if ( getdvarint( _hash_D5FD01C3 ) ) + { + if ( getdvar( _hash_E2494021 ) != "" ) + z_dist *= getdvarfloat( _hash_E2494021 ); + + if ( getdvar( _hash_4E3BC729 ) != "" ) + forward_scaling = getdvarfloat( _hash_4E3BC729 ); + } +#/ + } + else if ( z_dist < 0 ) + { + z_dist *= 2.4; + forward_scaling = 1.0; +/# + if ( getdvarint( _hash_D5FD01C3 ) ) + { + if ( getdvar( _hash_E2494021 ) != "" ) + z_dist *= getdvarfloat( _hash_E2494021 ); + + if ( getdvar( _hash_4E3BC729 ) != "" ) + forward_scaling = getdvarfloat( _hash_4E3BC729 ); + } +#/ + } + + z_velocity = 2 * z_dist * world_gravity; + + if ( z_velocity < 0 ) + z_velocity *= -1; + + if ( z_dist < 0 ) + z_dist *= -1; + + jump_time = sqrt( 2 * pad_dist / world_gravity ); + jump_time_2 = sqrt( 2 * z_dist / world_gravity ); + jump_time += jump_time_2; + + if ( jump_time < 0 ) + jump_time *= -1; + + x = jump_velocity[0] * forward_scaling / jump_time; + y = jump_velocity[1] * forward_scaling / jump_time; + z = z_velocity / jump_time; + fling_this_way = ( x, y, z ); + } + + if ( isdefined( end_point.target ) ) + poi_spot = getstruct( end_point.target, "targetname" ); + else + poi_spot = end_point; + + if ( !isdefined( self.script_index ) ) + ent_player.script_index = undefined; + else + ent_player.script_index = self.script_index; + + if ( isdefined( self.script_start ) && self.script_start == 1 ) + { + if ( !is_true( ent_player._padded ) ) + { + self playsound( "evt_jump_pad_launch" ); + playfx( level._effect["jump_pad_jump"], self.origin ); + ent_player thread jump_pad_move( fling_this_way, jump_time, poi_spot, self ); + + if ( isdefined( self.script_label ) ) + level notify( self.script_label ); + + return; + } + } + else if ( ent_player isonground() && !is_true( ent_player._padded ) ) + { + self playsound( "evt_jump_pad_launch" ); + playfx( level._effect["jump_pad_jump"], self.origin ); + ent_player thread jump_pad_move( fling_this_way, jump_time, poi_spot, self ); + + if ( isdefined( self.script_label ) ) + level notify( self.script_label ); + + return; + } + + wait 0.5; + + if ( ent_player istouching( self ) ) + self jump_pad_start( ent_player, endon_condition ); +} + +jump_pad_cancel( ent_player ) +{ + ent_player notify( "left_jump_pad" ); + + if ( isdefined( ent_player.poi_spot ) && !is_true( ent_player._padded ) ) + { + + } + + if ( isdefined( self.name ) ) + { + self._action_overrides = strtok( self.name, "," ); + + if ( isdefined( self._action_overrides ) ) + { + for ( i = 0; i < self._action_overrides.size; i++ ) + ent_player jump_pad_player_overrides( self._action_overrides[i] ); + } + } +} + +jump_pad_move( vec_direction, flt_time, struct_poi, trigger ) +{ + self endon( "death" ); + self endon( "disconnect" ); + start_time = gettime(); + jump_time = flt_time * 500; + attract_dist = undefined; + num_attractors = 30; + added_poi_value = 0; + start_turned_on = 1; + poi_start_func = undefined; + + while ( is_true( self.divetoprone ) || is_true( self._padded ) ) + wait 0.05; + + self._padded = 1; + self.lander = 1; + self setstance( "stand" ); + wait 0.1; + + if ( isdefined( trigger.script_label ) ) + { + if ( issubstr( trigger.script_label, "low" ) ) + { + self.jump_pad_current = undefined; + self.jump_pad_previous = undefined; + } + else if ( !isdefined( self.jump_pad_current ) ) + self.jump_pad_current = trigger; + else + { + self.jump_pad_previous = self.jump_pad_current; + self.jump_pad_current = trigger; + } + } + + if ( isdefined( self.poi_spot ) ) + { + level jump_pad_ignore_poi_cleanup( self.poi_spot ); + self.poi_spot deactivate_zombie_point_of_interest(); + self.poi_spot delete(); + } + + if ( isdefined( struct_poi ) ) + { + self.poi_spot = spawn( "script_origin", struct_poi.origin ); + + if ( isdefined( level._pad_poi_ignore ) ) + level [[ level._pad_poi_ignore ]]( self.poi_spot ); + + self thread jump_pad_enemy_follow_or_ignore( self.poi_spot ); + + if ( isdefined( level._jump_pad_poi_start_override ) && !is_true( self.script_index ) ) + poi_start_func = level._jump_pad_poi_start_override; + + if ( isdefined( level._jump_pad_poi_end_override ) ) + poi_end_func = level._jump_pad_poi_end_override; + + self.poi_spot create_zombie_point_of_interest( attract_dist, num_attractors, added_poi_value, start_turned_on, poi_start_func ); + self thread disconnect_failsafe_pad_poi_clean(); + } + + self setorigin( self.origin + ( 0, 0, 1 ) ); + + if ( 20 >= randomintrange( 0, 101 ) ) + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "jumppad" ); + + while ( gettime() - start_time < jump_time ) + { + self setvelocity( vec_direction ); + wait 0.05; + } + + while ( !self isonground() ) + wait 0.05; + + self._padded = 0; + self.lander = 0; + jump_pad_triggers = getentarray( "trig_jump_pad", "targetname" ); + + for ( i = 0; i < jump_pad_triggers.size; i++ ) + { + if ( self istouching( jump_pad_triggers[i] ) ) + { + level thread failsafe_pad_poi_clean( jump_pad_triggers[i], self.poi_spot ); + return; + } + } + + if ( isdefined( self.poi_spot ) ) + { + level jump_pad_ignore_poi_cleanup( self.poi_spot ); + self.poi_spot delete(); + } +} + +disconnect_failsafe_pad_poi_clean() +{ + self notify( "kill_disconnect_failsafe_pad_poi_clean" ); + self endon( "kill_disconnect_failsafe_pad_poi_clean" ); + self.poi_spot endon( "death" ); + + self waittill( "disconnect" ); + + if ( isdefined( self.poi_spot ) ) + { + level jump_pad_ignore_poi_cleanup( self.poi_spot ); + self.poi_spot deactivate_zombie_point_of_interest(); + self.poi_spot delete(); + } +} + +failsafe_pad_poi_clean( ent_trig, ent_poi ) +{ + if ( isdefined( ent_trig.script_wait ) ) + wait( ent_trig.script_wait ); + else + wait 0.5; + + if ( isdefined( ent_poi ) ) + { + level jump_pad_ignore_poi_cleanup( ent_poi ); + ent_poi deactivate_zombie_point_of_interest(); + ent_poi delete(); + } +} + +jump_pad_enemy_follow_or_ignore( ent_poi ) +{ + self endon( "death" ); + self endon( "disconnect" ); + zombies = getaiarray( level.zombie_team ); + players = getplayers(); + valid_players = 0; + + for ( p = 0; p < players.size; p++ ) + { + if ( is_player_valid( players[p] ) ) + valid_players++; + } + + for ( i = 0; i < zombies.size; i++ ) + { + ignore_poi = 0; + + if ( !isdefined( zombies[i] ) ) + continue; + + enemy = zombies[i].favoriteenemy; + + if ( isdefined( enemy ) ) + { + if ( players.size > 1 && valid_players > 1 ) + { + if ( enemy != self || isdefined( enemy.jump_pad_previous ) && enemy.jump_pad_previous == enemy.jump_pad_current ) + ignore_poi = 1; + } + } + + if ( is_true( ignore_poi ) ) + { + zombies[i] thread add_poi_to_ignore_list( ent_poi ); + continue; + } + + zombies[i].ignore_distance_tracking = 1; + zombies[i]._pad_follow = 1; + zombies[i] thread stop_chasing_the_sky( ent_poi ); + } +} + +jump_pad_ignore_poi_cleanup( ent_poi ) +{ + zombies = getaiarray( level.zombie_team ); + + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i] ) ) + { + if ( is_true( zombies[i]._pad_follow ) ) + { + zombies[i]._pad_follow = 0; + zombies[i] notify( "stop_chasing_the_sky" ); + zombies[i].ignore_distance_tracking = 0; + } + + if ( isdefined( ent_poi ) ) + zombies[i] thread remove_poi_from_ignore_list( ent_poi ); + } + } +} + +stop_chasing_the_sky( ent_poi ) +{ + self endon( "death" ); + self endon( "stop_chasing_the_sky" ); + + while ( is_true( self._pad_follow ) ) + { + if ( isdefined( self.favoriteenemy ) ) + { + players = getplayers(); + + for ( i = 0; i < players.size; i++ ) + { + if ( is_player_valid( players[i] ) && players[i] != self.favoriteenemy ) + { + if ( distance2dsquared( players[i].origin, self.origin ) < 10000 ) + { + self add_poi_to_ignore_list( ent_poi ); + return; + } + } + } + } + + wait 0.1; + } + + self._pad_follow = 0; + self.ignore_distance_tracking = 0; + self notify( "stop_chasing_the_sky" ); +} + +jump_pad_player_overrides( st_behavior, int_clean ) +{ + if ( !isdefined( st_behavior ) || !isstring( st_behavior ) ) + return; + + if ( !isdefined( int_clean ) ) + int_clean = 0; + + switch ( st_behavior ) + { + case "no_sprint": + if ( !int_clean ) + { + + } + else + { + + } + + break; + default: + if ( isdefined( level._jump_pad_level_behavior ) ) + self [[ level._jump_pad_level_behavior ]]( st_behavior, int_clean ); + else + { + + } + + break; + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_laststand.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_laststand.gsc new file mode 100644 index 0000000..5630482 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_laststand.gsc @@ -0,0 +1,1322 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\_demo; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\gametypes_zm\_gameobjects; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_chugabud; +#include maps\mp\zombies\_zm_perks; + +laststand_global_init() +{ + level.const_laststand_getup_count_start = 0; + level.const_laststand_getup_bar_start = 0.5; + level.const_laststand_getup_bar_regen = 0.0025; + level.const_laststand_getup_bar_damage = 0.1; +} + +init() +{ + if ( level.script == "frontend" ) + return; + + laststand_global_init(); + level.revive_tool = "syrette_zm"; + precacheitem( level.revive_tool ); + precachestring( &"ZOMBIE_BUTTON_TO_REVIVE_PLAYER" ); + precachestring( &"ZOMBIE_PLAYER_NEEDS_TO_BE_REVIVED" ); + precachestring( &"ZOMBIE_PLAYER_IS_REVIVING_YOU" ); + precachestring( &"ZOMBIE_REVIVING" ); + + if ( !isdefined( level.laststandpistol ) ) + { + level.laststandpistol = "m1911"; + precacheitem( level.laststandpistol ); + } + + level thread revive_hud_think(); + level.primaryprogressbarx = 0; + level.primaryprogressbary = 110; + level.primaryprogressbarheight = 4; + level.primaryprogressbarwidth = 120; + level.primaryprogressbary_ss = 280; + + if ( getdvar( _hash_A17166B0 ) == "" ) + setdvar( "revive_trigger_radius", "40" ); + + level.laststandgetupallowed = 0; +} + +player_is_in_laststand() +{ + if ( !( isdefined( self.no_revive_trigger ) && self.no_revive_trigger ) ) + return isdefined( self.revivetrigger ); + else + return isdefined( self.laststand ) && self.laststand; +} + +player_num_in_laststand() +{ + num = 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] player_is_in_laststand() ) + num++; + } + + return num; +} + +player_all_players_in_laststand() +{ + return player_num_in_laststand() == get_players().size; +} + +player_any_player_in_laststand() +{ + return player_num_in_laststand() > 0; +} + +player_last_stand_stats( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + if ( isdefined( attacker ) && isplayer( attacker ) && attacker != self ) + { + if ( "zcleansed" == level.gametype ) + maps\mp\_demo::bookmark( "kill", gettime(), self, attacker, 0, einflictor ); + + if ( "zcleansed" == level.gametype ) + { + if ( isdefined( attacker.is_zombie ) && !attacker.is_zombie ) + attacker.kills++; + else + attacker.downs++; + } + else + attacker.kills++; + + attacker maps\mp\zombies\_zm_stats::increment_client_stat( "kills" ); + attacker maps\mp\zombies\_zm_stats::increment_player_stat( "kills" ); + + if ( isdefined( sweapon ) ) + { + dmgweapon = sweapon; + + if ( is_alt_weapon( dmgweapon ) ) + dmgweapon = weaponaltweaponname( dmgweapon ); + + attacker addweaponstat( dmgweapon, "kills", 1 ); + } + + if ( is_headshot( sweapon, shitloc, smeansofdeath ) ) + { + attacker.headshots++; + attacker maps\mp\zombies\_zm_stats::increment_client_stat( "headshots" ); + attacker addweaponstat( sweapon, "headshots", 1 ); + attacker maps\mp\zombies\_zm_stats::increment_player_stat( "headshots" ); + } + } + + self increment_downed_stat(); + + if ( flag( "solo_game" ) && !self.lives && getnumconnectedplayers() < 2 ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "deaths" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "deaths" ); + self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat(); + } +} + +increment_downed_stat() +{ + if ( "zcleansed" != level.gametype ) + self.downs++; + + self maps\mp\zombies\_zm_stats::increment_client_stat( "downs" ); + self add_weighted_down(); + self maps\mp\zombies\_zm_stats::increment_player_stat( "downs" ); + zonename = self get_current_zone(); + + if ( !isdefined( zonename ) ) + zonename = ""; + + self recordplayerdownzombies( zonename ); +} + +playerlaststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + self notify( "entering_last_stand" ); + + if ( isdefined( level._game_module_player_laststand_callback ) ) + self [[ level._game_module_player_laststand_callback ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); + + if ( self player_is_in_laststand() ) + return; + + if ( isdefined( self.in_zombify_call ) && self.in_zombify_call ) + return; + + self thread player_last_stand_stats( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); + + if ( isdefined( level.playerlaststand_func ) ) + [[ level.playerlaststand_func ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); + + self.health = 1; + self.laststand = 1; + self.ignoreme = 1; + self thread maps\mp\gametypes_zm\_gameobjects::onplayerlaststand(); + self thread maps\mp\zombies\_zm_buildables::onplayerlaststand(); + + if ( !( isdefined( self.no_revive_trigger ) && self.no_revive_trigger ) ) + self revive_trigger_spawn(); + else + self undolaststand(); + + if ( isdefined( self.is_zombie ) && self.is_zombie ) + { + self takeallweapons(); + + if ( isdefined( attacker ) && isplayer( attacker ) && attacker != self ) + attacker notify( "killed_a_zombie_player", einflictor, self, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); + } + else + { + self laststand_disable_player_weapons(); + self laststand_give_pistol(); + } + + if ( isdefined( level.playersuicideallowed ) && level.playersuicideallowed && get_players().size > 1 ) + { + if ( !isdefined( level.canplayersuicide ) || self [[ level.canplayersuicide ]]() ) + self thread suicide_trigger_spawn(); + } + + if ( isdefined( self.disabled_perks ) ) + self.disabled_perks = []; + + if ( level.laststandgetupallowed ) + self thread laststand_getup(); + else + { + bleedout_time = getdvarfloat( "player_lastStandBleedoutTime" ); + self thread laststand_bleedout( bleedout_time ); + } + + if ( "zcleansed" != level.gametype ) + maps\mp\_demo::bookmark( "zm_player_downed", gettime(), self ); + + self notify( "player_downed" ); + self thread refire_player_downed(); + self thread cleanup_laststand_on_disconnect(); +} + +refire_player_downed() +{ + self endon( "player_revived" ); + self endon( "death" ); + self endon( "disconnect" ); + wait 1.0; + + if ( self.num_perks ) + self notify( "player_downed" ); +} + +laststand_allowed( sweapon, smeansofdeath, shitloc ) +{ + if ( level.laststandpistol == "none" ) + return false; + + return true; +} + +laststand_disable_player_weapons() +{ + weaponinventory = self getweaponslist( 1 ); + self.lastactiveweapon = self getcurrentweapon(); + + if ( self isthrowinggrenade() && is_offhand_weapon( self.lastactiveweapon ) ) + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + { + self.lastactiveweapon = primaryweapons[0]; + self switchtoweaponimmediate( self.lastactiveweapon ); + } + } + + self setlaststandprevweap( self.lastactiveweapon ); + self.laststandpistol = undefined; + self.hadpistol = 0; + + if ( isdefined( self.weapon_taken_by_losing_specialty_additionalprimaryweapon ) && self.lastactiveweapon == self.weapon_taken_by_losing_specialty_additionalprimaryweapon ) + { + self.lastactiveweapon = "none"; + self.weapon_taken_by_losing_specialty_additionalprimaryweapon = undefined; + } + + for ( i = 0; i < weaponinventory.size; i++ ) + { + weapon = weaponinventory[i]; + class = weaponclass( weapon ); + + if ( issubstr( weapon, "knife_ballistic_" ) ) + class = "knife"; + + if ( ( class == "pistol" || class == "pistol spread" || class == "pistolspread" ) && !isdefined( self.laststandpistol ) ) + { + self.laststandpistol = weapon; + self.hadpistol = 1; + } + + if ( weapon == "syrette_zm" ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "failed_sacrifices" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "failed_sacrifices" ); + } + else if ( is_zombie_perk_bottle( weapon ) ) + { + self takeweapon( weapon ); + self.lastactiveweapon = "none"; + continue; + } + + if ( isdefined( get_gamemode_var( "item_meat_name" ) ) ) + { + if ( weapon == get_gamemode_var( "item_meat_name" ) ) + { + self takeweapon( weapon ); + self.lastactiveweapon = "none"; + continue; + } + } + } + + if ( isdefined( self.hadpistol ) && self.hadpistol == 1 && isdefined( level.zombie_last_stand_pistol_memory ) ) + self [[ level.zombie_last_stand_pistol_memory ]](); + + if ( !isdefined( self.laststandpistol ) ) + self.laststandpistol = level.laststandpistol; + + self disableweaponcycling(); + self notify( "weapons_taken_for_last_stand" ); +} + +laststand_enable_player_weapons() +{ + if ( isdefined( self.hadpistol ) && !self.hadpistol && isdefined( self.laststandpistol ) ) + self takeweapon( self.laststandpistol ); + + if ( isdefined( self.hadpistol ) && self.hadpistol == 1 && isdefined( level.zombie_last_stand_ammo_return ) ) + [[ level.zombie_last_stand_ammo_return ]](); + + self enableweaponcycling(); + self enableoffhandweapons(); + + if ( isdefined( self.lastactiveweapon ) && self.lastactiveweapon != "none" && self hasweapon( self.lastactiveweapon ) && !is_placeable_mine( self.lastactiveweapon ) && !is_equipment( self.lastactiveweapon ) ) + self switchtoweapon( self.lastactiveweapon ); + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + } +} + +laststand_clean_up_on_disconnect( playerbeingrevived, revivergun ) +{ + self endon( "do_revive_ended_normally" ); + revivetrigger = playerbeingrevived.revivetrigger; + + playerbeingrevived waittill( "disconnect" ); + + if ( isdefined( revivetrigger ) ) + revivetrigger delete(); + + self cleanup_suicide_hud(); + + if ( isdefined( self.reviveprogressbar ) ) + self.reviveprogressbar destroyelem(); + + if ( isdefined( self.revivetexthud ) ) + self.revivetexthud destroy(); + + self revive_give_back_weapons( revivergun ); +} + +laststand_clean_up_reviving_any( playerbeingrevived ) +{ + self endon( "do_revive_ended_normally" ); + playerbeingrevived waittill_any( "disconnect", "zombified", "stop_revive_trigger" ); + self.is_reviving_any--; + + if ( 0 > self.is_reviving_any ) + self.is_reviving_any = 0; +} + +laststand_give_pistol() +{ + assert( isdefined( self.laststandpistol ) ); + assert( self.laststandpistol != "none" ); + + if ( isdefined( level.zombie_last_stand ) ) + [[ level.zombie_last_stand ]](); + else + { + self giveweapon( self.laststandpistol ); + self givemaxammo( self.laststandpistol ); + self switchtoweapon( self.laststandpistol ); + } +} + +laststand_bleedout( delay ) +{ + self endon( "player_revived" ); + self endon( "player_suicide" ); + self endon( "zombified" ); + self endon( "disconnect" ); + + if ( isdefined( self.is_zombie ) && self.is_zombie || isdefined( self.no_revive_trigger ) && self.no_revive_trigger ) + { + self notify( "bled_out" ); + wait_network_frame(); + self bleed_out(); + return; + } + + setclientsysstate( "lsm", "1", self ); + self.bleedout_time = delay; + + while ( self.bleedout_time > int( delay * 0.5 ) ) + { + self.bleedout_time -= 1; + wait 1; + } + + visionsetlaststand( "zombie_death", delay * 0.5 ); + + while ( self.bleedout_time > 0 ) + { + self.bleedout_time -= 1; + wait 1; + } + + while ( isdefined( self.revivetrigger ) && isdefined( self.revivetrigger.beingrevived ) && self.revivetrigger.beingrevived == 1 ) + wait 0.1; + + self notify( "bled_out" ); + wait_network_frame(); + self bleed_out(); +} + +bleed_out() +{ + self cleanup_suicide_hud(); + + if ( isdefined( self.revivetrigger ) ) + self.revivetrigger delete(); + + self.revivetrigger = undefined; + setclientsysstate( "lsm", "0", self ); + self maps\mp\zombies\_zm_stats::increment_client_stat( "deaths" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "deaths" ); + self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat(); + self recordplayerdeathzombies(); + self maps\mp\zombies\_zm_equipment::equipment_take(); + + if ( "zcleansed" != level.gametype ) + maps\mp\_demo::bookmark( "zm_player_bledout", gettime(), self, undefined, 1 ); + + level notify( "bleed_out", self.characterindex ); + self undolaststand(); + + if ( isdefined( level.is_zombie_level ) && level.is_zombie_level ) + self thread [[ level.player_becomes_zombie ]](); + else if ( isdefined( level.is_specops_level ) && level.is_specops_level ) + self thread [[ level.spawnspectator ]](); + else + self.ignoreme = 0; +} + +cleanup_suicide_hud() +{ + if ( isdefined( self.suicideprompt ) ) + self.suicideprompt destroy(); + + self.suicideprompt = undefined; +} + +clean_up_suicide_hud_on_end_game() +{ + self endon( "disconnect" ); + self endon( "zombified" ); + self endon( "stop_revive_trigger" ); + self endon( "player_revived" ); + self endon( "bled_out" ); + level waittill_any( "end_game", "stop_suicide_trigger" ); + self cleanup_suicide_hud(); + + if ( isdefined( self.suicidetexthud ) ) + self.suicidetexthud destroy(); + + if ( isdefined( self.suicideprogressbar ) ) + self.suicideprogressbar destroyelem(); +} + +clean_up_suicide_hud_on_bled_out() +{ + self endon( "disconnect" ); + self endon( "zombified" ); + self endon( "stop_revive_trigger" ); + self waittill_any( "bled_out", "player_revived", "fake_death" ); + self cleanup_suicide_hud(); + + if ( isdefined( self.suicideprogressbar ) ) + self.suicideprogressbar destroyelem(); + + if ( isdefined( self.suicidetexthud ) ) + self.suicidetexthud destroy(); +} + +suicide_trigger_spawn() +{ + radius = getdvarint( _hash_A17166B0 ); + self.suicideprompt = newclienthudelem( self ); + self.suicideprompt.alignx = "center"; + self.suicideprompt.aligny = "middle"; + self.suicideprompt.horzalign = "center"; + self.suicideprompt.vertalign = "bottom"; + self.suicideprompt.y = -170; + + if ( self issplitscreen() ) + self.suicideprompt.y = -132; + + self.suicideprompt.foreground = 1; + self.suicideprompt.font = "default"; + self.suicideprompt.fontscale = 1.5; + self.suicideprompt.alpha = 1; + self.suicideprompt.color = ( 1, 1, 1 ); + self.suicideprompt.hidewheninmenu = 1; + self thread suicide_trigger_think(); +} + +suicide_trigger_think() +{ + self endon( "disconnect" ); + self endon( "zombified" ); + self endon( "stop_revive_trigger" ); + self endon( "player_revived" ); + self endon( "bled_out" ); + self endon( "fake_death" ); + level endon( "end_game" ); + level endon( "stop_suicide_trigger" ); + self thread clean_up_suicide_hud_on_end_game(); + self thread clean_up_suicide_hud_on_bled_out(); + + while ( self usebuttonpressed() ) + wait 1; + + if ( !isdefined( self.suicideprompt ) ) + return; + + while ( true ) + { + wait 0.1; + + if ( !isdefined( self.suicideprompt ) ) + continue; + + self.suicideprompt settext( &"ZOMBIE_BUTTON_TO_SUICIDE" ); + + if ( !self is_suiciding() ) + continue; + + self.pre_suicide_weapon = self getcurrentweapon(); + self giveweapon( level.suicide_weapon ); + self switchtoweapon( level.suicide_weapon ); + duration = self docowardswayanims(); + suicide_success = suicide_do_suicide( duration ); + self.laststand = undefined; + self takeweapon( level.suicide_weapon ); + + if ( suicide_success ) + { + self notify( "player_suicide" ); + wait_network_frame(); + self maps\mp\zombies\_zm_stats::increment_client_stat( "suicides" ); + self bleed_out(); + return; + } + + self switchtoweapon( self.pre_suicide_weapon ); + self.pre_suicide_weapon = undefined; + } +} + +suicide_do_suicide( duration ) +{ + level endon( "end_game" ); + level endon( "stop_suicide_trigger" ); + suicidetime = duration; + timer = 0; + suicided = 0; + self.suicideprompt settext( "" ); + + if ( !isdefined( self.suicideprogressbar ) ) + self.suicideprogressbar = self createprimaryprogressbar(); + + if ( !isdefined( self.suicidetexthud ) ) + self.suicidetexthud = newclienthudelem( self ); + + self.suicideprogressbar updatebar( 0.01, 1 / suicidetime ); + self.suicidetexthud.alignx = "center"; + self.suicidetexthud.aligny = "middle"; + self.suicidetexthud.horzalign = "center"; + self.suicidetexthud.vertalign = "bottom"; + self.suicidetexthud.y = -173; + + if ( self issplitscreen() ) + self.suicidetexthud.y = -147; + + self.suicidetexthud.foreground = 1; + self.suicidetexthud.font = "default"; + self.suicidetexthud.fontscale = 1.8; + self.suicidetexthud.alpha = 1; + self.suicidetexthud.color = ( 1, 1, 1 ); + self.suicidetexthud.hidewheninmenu = 1; + self.suicidetexthud settext( &"ZOMBIE_SUICIDING" ); + + while ( self is_suiciding() ) + { + wait 0.05; + timer += 0.05; + + if ( timer >= suicidetime ) + { + suicided = 1; + break; + } + } + + if ( isdefined( self.suicideprogressbar ) ) + self.suicideprogressbar destroyelem(); + + if ( isdefined( self.suicidetexthud ) ) + self.suicidetexthud destroy(); + + if ( isdefined( self.suicideprompt ) ) + self.suicideprompt settext( &"ZOMBIE_BUTTON_TO_SUICIDE" ); + + return suicided; +} + +can_suicide() +{ + if ( !isalive( self ) ) + return false; + + if ( !self player_is_in_laststand() ) + return false; + + if ( !isdefined( self.suicideprompt ) ) + return false; + + if ( isdefined( self.is_zombie ) && self.is_zombie ) + return false; + + if ( isdefined( level.intermission ) && level.intermission ) + return false; + + return true; +} + +is_suiciding( revivee ) +{ + return self usebuttonpressed() && can_suicide(); +} + +revive_trigger_spawn() +{ + if ( isdefined( level.revive_trigger_spawn_override_link ) ) + [[ level.revive_trigger_spawn_override_link ]]( self ); + else + { + radius = getdvarint( _hash_A17166B0 ); + self.revivetrigger = spawn( "trigger_radius", ( 0, 0, 0 ), 0, radius, radius ); + self.revivetrigger sethintstring( "" ); + self.revivetrigger setcursorhint( "HINT_NOICON" ); + self.revivetrigger setmovingplatformenabled( 1 ); + self.revivetrigger enablelinkto(); + self.revivetrigger.origin = self.origin; + self.revivetrigger linkto( self ); + self.revivetrigger.beingrevived = 0; + self.revivetrigger.createtime = gettime(); + } + + self thread revive_trigger_think(); +} + +revive_trigger_think() +{ + self endon( "disconnect" ); + self endon( "zombified" ); + self endon( "stop_revive_trigger" ); + level endon( "end_game" ); + self endon( "death" ); + + while ( true ) + { + wait 0.1; + self.revivetrigger sethintstring( "" ); + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + d = 0; + d = self depthinwater(); + + if ( players[i] can_revive( self ) || d > 20 ) + { + self.revivetrigger setrevivehintstring( &"ZOMBIE_BUTTON_TO_REVIVE_PLAYER", self.team ); + break; + } + } + + for ( i = 0; i < players.size; i++ ) + { + reviver = players[i]; + + if ( self == reviver || !reviver is_reviving( self ) ) + continue; + + gun = reviver getcurrentweapon(); + assert( isdefined( gun ) ); + + if ( gun == level.revive_tool ) + continue; + + reviver giveweapon( level.revive_tool ); + reviver switchtoweapon( level.revive_tool ); + reviver setweaponammostock( level.revive_tool, 1 ); + revive_success = reviver revive_do_revive( self, gun ); + reviver revive_give_back_weapons( gun ); + + if ( isplayer( self ) ) + self allowjump( 1 ); + + self.laststand = undefined; + + if ( revive_success ) + { + if ( isplayer( self ) ) + maps\mp\zombies\_zm_chugabud::player_revived_cleanup_chugabud_corpse(); + + self thread revive_success( reviver ); + self cleanup_suicide_hud(); + return; + } + } + } +} + +revive_give_back_weapons( gun ) +{ + self takeweapon( level.revive_tool ); + + if ( self player_is_in_laststand() ) + return; + + if ( gun != "none" && !is_placeable_mine( gun ) && gun != "equip_gasmask_zm" && gun != "lower_equip_gasmask_zm" && self hasweapon( gun ) ) + self switchtoweapon( gun ); + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + } +} + +can_revive( revivee ) +{ + if ( !isdefined( revivee.revivetrigger ) ) + return false; + + if ( !isalive( self ) ) + return false; + + if ( self player_is_in_laststand() ) + return false; + + if ( self.team != revivee.team ) + return false; + + if ( isdefined( self.is_zombie ) && self.is_zombie ) + return false; + + if ( self has_powerup_weapon() ) + return false; + + if ( isdefined( level.can_revive_use_depthinwater_test ) && level.can_revive_use_depthinwater_test && revivee depthinwater() > 10 ) + return true; + + if ( isdefined( level.can_revive ) && ![[ level.can_revive ]]( revivee ) ) + return false; + + if ( isdefined( level.can_revive_game_module ) && ![[ level.can_revive_game_module ]]( revivee ) ) + return false; + + ignore_sight_checks = 0; + ignore_touch_checks = 0; + + if ( isdefined( level.revive_trigger_should_ignore_sight_checks ) ) + { + ignore_sight_checks = [[ level.revive_trigger_should_ignore_sight_checks ]]( self ); + + if ( ignore_sight_checks && isdefined( revivee.revivetrigger.beingrevived ) && revivee.revivetrigger.beingrevived == 1 ) + ignore_touch_checks = 1; + } + + if ( !ignore_touch_checks ) + { + if ( !self istouching( revivee.revivetrigger ) ) + return false; + } + + if ( !ignore_sight_checks ) + { + if ( !self is_facing( revivee ) ) + return false; + + if ( !sighttracepassed( self.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), revivee.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), 0, undefined ) ) + return false; + + if ( !bullettracepassed( self.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), revivee.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), 0, undefined ) ) + return false; + } + + return true; +} + +is_reviving( revivee ) +{ + return self usebuttonpressed() && can_revive( revivee ); +} + +is_reviving_any() +{ + return isdefined( self.is_reviving_any ) && self.is_reviving_any; +} + +is_facing( facee ) +{ + orientation = self getplayerangles(); + forwardvec = anglestoforward( orientation ); + forwardvec2d = ( forwardvec[0], forwardvec[1], 0 ); + unitforwardvec2d = vectornormalize( forwardvec2d ); + tofaceevec = facee.origin - self.origin; + tofaceevec2d = ( tofaceevec[0], tofaceevec[1], 0 ); + unittofaceevec2d = vectornormalize( tofaceevec2d ); + dotproduct = vectordot( unitforwardvec2d, unittofaceevec2d ); + return dotproduct > 0.9; +} + +revive_do_revive( playerbeingrevived, revivergun ) +{ + assert( self is_reviving( playerbeingrevived ) ); + revivetime = 3; + + if ( self hasperk( "specialty_quickrevive" ) ) + revivetime /= 2; + + if ( self maps\mp\zombies\_zm_pers_upgrades_functions::pers_revive_active() ) + revivetime *= 0.5; + + timer = 0; + revived = 0; + playerbeingrevived.revivetrigger.beingrevived = 1; + playerbeingrevived.revive_hud settext( &"ZOMBIE_PLAYER_IS_REVIVING_YOU", self ); + playerbeingrevived revive_hud_show_n_fade( 3.0 ); + playerbeingrevived.revivetrigger sethintstring( "" ); + + if ( isplayer( playerbeingrevived ) ) + playerbeingrevived startrevive( self ); + + if ( !isdefined( self.reviveprogressbar ) ) + self.reviveprogressbar = self createprimaryprogressbar(); + + if ( !isdefined( self.revivetexthud ) ) + self.revivetexthud = newclienthudelem( self ); + + self thread laststand_clean_up_on_disconnect( playerbeingrevived, revivergun ); + + if ( !isdefined( self.is_reviving_any ) ) + self.is_reviving_any = 0; + + self.is_reviving_any++; + self thread laststand_clean_up_reviving_any( playerbeingrevived ); + self.reviveprogressbar updatebar( 0.01, 1 / revivetime ); + self.revivetexthud.alignx = "center"; + self.revivetexthud.aligny = "middle"; + self.revivetexthud.horzalign = "center"; + self.revivetexthud.vertalign = "bottom"; + self.revivetexthud.y = -113; + + if ( self issplitscreen() ) + self.revivetexthud.y = -347; + + self.revivetexthud.foreground = 1; + self.revivetexthud.font = "default"; + self.revivetexthud.fontscale = 1.8; + self.revivetexthud.alpha = 1; + self.revivetexthud.color = ( 1, 1, 1 ); + self.revivetexthud.hidewheninmenu = 1; + + if ( self maps\mp\zombies\_zm_pers_upgrades_functions::pers_revive_active() ) + self.revivetexthud.color = ( 0.5, 0.5, 1.0 ); + + self.revivetexthud settext( &"ZOMBIE_REVIVING" ); + self thread check_for_failed_revive( playerbeingrevived ); + + while ( self is_reviving( playerbeingrevived ) ) + { + wait 0.05; + timer += 0.05; + + if ( self player_is_in_laststand() ) + break; + + if ( isdefined( playerbeingrevived.revivetrigger.auto_revive ) && playerbeingrevived.revivetrigger.auto_revive == 1 ) + break; + + if ( timer >= revivetime ) + { + revived = 1; + break; + } + } + + if ( isdefined( self.reviveprogressbar ) ) + self.reviveprogressbar destroyelem(); + + if ( isdefined( self.revivetexthud ) ) + self.revivetexthud destroy(); + + if ( isdefined( playerbeingrevived.revivetrigger.auto_revive ) && playerbeingrevived.revivetrigger.auto_revive == 1 ) + { + + } + else if ( !revived ) + { + if ( isplayer( playerbeingrevived ) ) + playerbeingrevived stoprevive( self ); + } + + playerbeingrevived.revivetrigger sethintstring( &"ZOMBIE_BUTTON_TO_REVIVE_PLAYER" ); + playerbeingrevived.revivetrigger.beingrevived = 0; + self notify( "do_revive_ended_normally" ); + self.is_reviving_any--; + + if ( !revived ) + playerbeingrevived thread checkforbleedout( self ); + + return revived; +} + +checkforbleedout( player ) +{ + self endon( "player_revived" ); + self endon( "player_suicide" ); + self endon( "disconnect" ); + player endon( "disconnect" ); + + if ( is_classic() ) + { + player.failed_revives++; + player notify( "player_failed_revive" ); + } +} + +auto_revive( reviver, dont_enable_weapons ) +{ + if ( isdefined( self.revivetrigger ) ) + { + self.revivetrigger.auto_revive = 1; + + if ( self.revivetrigger.beingrevived == 1 ) + { + while ( true ) + { + if ( self.revivetrigger.beingrevived == 0 ) + break; + + wait_network_frame(); + } + } + + self.revivetrigger.auto_trigger = 0; + } + + self reviveplayer(); + self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); + setclientsysstate( "lsm", "0", self ); + self notify( "stop_revive_trigger" ); + + if ( isdefined( self.revivetrigger ) ) + { + self.revivetrigger delete(); + self.revivetrigger = undefined; + } + + self cleanup_suicide_hud(); + + if ( !isdefined( dont_enable_weapons ) || dont_enable_weapons == 0 ) + self laststand_enable_player_weapons(); + + self allowjump( 1 ); + self.ignoreme = 0; + self.laststand = undefined; + + if ( !( isdefined( level.isresetting_grief ) && level.isresetting_grief ) ) + { + reviver.revives++; + reviver maps\mp\zombies\_zm_stats::increment_client_stat( "revives" ); + reviver maps\mp\zombies\_zm_stats::increment_player_stat( "revives" ); + self recordplayerrevivezombies( reviver ); + maps\mp\_demo::bookmark( "zm_player_revived", gettime(), self, reviver ); + } + + self notify( "player_revived", reviver ); +} + +remote_revive( reviver ) +{ + if ( !self player_is_in_laststand() ) + return; + + self auto_revive( reviver ); +} + +revive_success( reviver, b_track_stats = 1 ) +{ + if ( !isplayer( self ) ) + { + self notify( "player_revived", reviver ); + return; + } + + if ( isdefined( b_track_stats ) && b_track_stats ) + maps\mp\_demo::bookmark( "zm_player_revived", gettime(), self, reviver ); + + self notify( "player_revived", reviver ); + self reviveplayer(); + self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); + + if ( isdefined( self.pers_upgrades_awarded["perk_lose"] ) && self.pers_upgrades_awarded["perk_lose"] ) + self thread maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_perk_lose_restore(); + + if ( !( isdefined( level.isresetting_grief ) && level.isresetting_grief ) && ( isdefined( b_track_stats ) && b_track_stats ) ) + { + reviver.revives++; + reviver maps\mp\zombies\_zm_stats::increment_client_stat( "revives" ); + reviver maps\mp\zombies\_zm_stats::increment_player_stat( "revives" ); + self recordplayerrevivezombies( reviver ); + reviver.upgrade_fx_origin = self.origin; + } + + if ( is_classic() && ( isdefined( b_track_stats ) && b_track_stats ) ) + maps\mp\zombies\_zm_pers_upgrades_functions::pers_increment_revive_stat( reviver ); + + if ( isdefined( b_track_stats ) && b_track_stats ) + reviver thread check_for_sacrifice(); + + if ( isdefined( level.missioncallbacks ) ) + { + + } + + setclientsysstate( "lsm", "0", self ); + self.revivetrigger delete(); + self.revivetrigger = undefined; + self cleanup_suicide_hud(); + self laststand_enable_player_weapons(); + self.ignoreme = 0; +} + +revive_force_revive( reviver ) +{ + assert( isdefined( self ) ); + assert( isplayer( self ) ); + assert( self player_is_in_laststand() ); + self thread revive_success( reviver ); +} + +revive_hud_create() +{ + self.revive_hud = newclienthudelem( self ); + self.revive_hud.alignx = "center"; + self.revive_hud.aligny = "middle"; + self.revive_hud.horzalign = "center"; + self.revive_hud.vertalign = "bottom"; + self.revive_hud.foreground = 1; + self.revive_hud.font = "default"; + self.revive_hud.fontscale = 1.5; + self.revive_hud.alpha = 0; + self.revive_hud.color = ( 1, 1, 1 ); + self.revive_hud.hidewheninmenu = 1; + self.revive_hud settext( "" ); + self.revive_hud.y = -160; +} + +revive_hud_think() +{ + self endon( "disconnect" ); + + while ( true ) + { + wait 0.1; + + if ( !player_any_player_in_laststand() ) + continue; + + players = get_players(); + playertorevive = undefined; + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i].revivetrigger ) || !isdefined( players[i].revivetrigger.createtime ) ) + continue; + + if ( !isdefined( playertorevive ) || playertorevive.revivetrigger.createtime > players[i].revivetrigger.createtime ) + playertorevive = players[i]; + } + + if ( isdefined( playertorevive ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] player_is_in_laststand() ) + continue; + + if ( getdvar( "g_gametype" ) == "vs" ) + { + if ( players[i].team != playertorevive.team ) + continue; + } + + if ( is_encounter() ) + { + if ( players[i].sessionteam != playertorevive.sessionteam ) + continue; + + if ( isdefined( level.hide_revive_message ) && level.hide_revive_message ) + continue; + } + + players[i] thread faderevivemessageover( playertorevive, 3.0 ); + } + + playertorevive.revivetrigger.createtime = undefined; + wait 3.5; + } + } +} + +faderevivemessageover( playertorevive, time ) +{ + revive_hud_show(); + self.revive_hud settext( &"ZOMBIE_PLAYER_NEEDS_TO_BE_REVIVED", playertorevive ); + self.revive_hud fadeovertime( time ); + self.revive_hud.alpha = 0; +} + +revive_hud_show() +{ + assert( isdefined( self ) ); + assert( isdefined( self.revive_hud ) ); + self.revive_hud.alpha = 1; +} + +revive_hud_show_n_fade( time ) +{ + revive_hud_show(); + self.revive_hud fadeovertime( time ); + self.revive_hud.alpha = 0; +} + +drawcylinder( pos, rad, height ) +{ +/# + currad = rad; + curheight = height; + + for ( r = 0; r < 20; r++ ) + { + theta = r / 20 * 360; + theta2 = ( r + 1 ) / 20 * 360; + line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, 0 ) ); + line( pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, curheight ) ); + line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ) ); + } +#/ +} + +get_lives_remaining() +{ + assert( level.laststandgetupallowed, "Lives only exist in the Laststand type GETUP." ); + + if ( level.laststandgetupallowed && isdefined( self.laststand_info ) && isdefined( self.laststand_info.type_getup_lives ) ) + return max( 0, self.laststand_info.type_getup_lives ); + + return 0; +} + +update_lives_remaining( increment ) +{ + assert( level.laststandgetupallowed, "Lives only exist in the Laststand type GETUP." ); + assert( isdefined( increment ), "Must specify increment true or false" ); + increment = isdefined( increment ) ? increment : 0; + self.laststand_info.type_getup_lives = max( 0, increment ? self.laststand_info.type_getup_lives + 1 : self.laststand_info.type_getup_lives - 1 ); + self notify( "laststand_lives_updated" ); +} + +player_getup_setup() +{ +/# + println( "ZM >> player_getup_setup called" ); +#/ + self.laststand_info = spawnstruct(); + self.laststand_info.type_getup_lives = level.const_laststand_getup_count_start; +} + +laststand_getup() +{ + self endon( "player_revived" ); + self endon( "disconnect" ); +/# + println( "ZM >> laststand_getup called" ); +#/ + self update_lives_remaining( 0 ); + setclientsysstate( "lsm", "1", self ); + self.laststand_info.getup_bar_value = level.const_laststand_getup_bar_start; + self thread laststand_getup_hud(); + self thread laststand_getup_damage_watcher(); + + while ( self.laststand_info.getup_bar_value < 1 ) + { + self.laststand_info.getup_bar_value += level.const_laststand_getup_bar_regen; + wait 0.05; + } + + self auto_revive( self ); + setclientsysstate( "lsm", "0", self ); +} + +laststand_getup_damage_watcher() +{ + self endon( "player_revived" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "damage" ); + + self.laststand_info.getup_bar_value -= level.const_laststand_getup_bar_damage; + + if ( self.laststand_info.getup_bar_value < 0 ) + self.laststand_info.getup_bar_value = 0; + } +} + +laststand_getup_hud() +{ + self endon( "player_revived" ); + self endon( "disconnect" ); + hudelem = newclienthudelem( self ); + hudelem.alignx = "left"; + hudelem.aligny = "middle"; + hudelem.horzalign = "left"; + hudelem.vertalign = "middle"; + hudelem.x = 5; + hudelem.y = 170; + hudelem.font = "big"; + hudelem.fontscale = 1.5; + hudelem.foreground = 1; + hudelem.hidewheninmenu = 1; + hudelem.hidewhendead = 1; + hudelem.sort = 2; + hudelem.label = &"SO_WAR_LASTSTAND_GETUP_BAR"; + self thread laststand_getup_hud_destroy( hudelem ); + + while ( true ) + { + hudelem setvalue( self.laststand_info.getup_bar_value ); + wait 0.05; + } +} + +laststand_getup_hud_destroy( hudelem ) +{ + self waittill_either( "player_revived", "disconnect" ); + hudelem destroy(); +} + +check_for_sacrifice() +{ + self delay_notify( "sacrifice_denied", 1 ); + self endon( "sacrifice_denied" ); + + self waittill( "player_downed" ); + + self maps\mp\zombies\_zm_stats::increment_client_stat( "sacrifices" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "sacrifices" ); +} + +check_for_failed_revive( playerbeingrevived ) +{ + self endon( "disconnect" ); + playerbeingrevived endon( "disconnect" ); + playerbeingrevived endon( "player_suicide" ); + self notify( "checking_for_failed_revive" ); + self endon( "checking_for_failed_revive" ); + playerbeingrevived endon( "player_revived" ); + + playerbeingrevived waittill( "bled_out" ); + + self maps\mp\zombies\_zm_stats::increment_client_stat( "failed_revives" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "failed_revives" ); +} + +add_weighted_down() +{ + if ( !level.curr_gametype_affects_rank ) + return; + + weighted_down = 1000; + + if ( level.round_number > 0 ) + weighted_down = int( 1000.0 / ceil( level.round_number / 5.0 ) ); + + self addplayerstat( "weighted_downs", weighted_down ); +} + +cleanup_laststand_on_disconnect() +{ + self endon( "player_revived" ); + self endon( "player_suicide" ); + self endon( "bled_out" ); + trig = self.revivetrigger; + + self waittill( "disconnect" ); + + if ( isdefined( trig ) ) + trig delete(); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_magicbox.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_magicbox.gsc new file mode 100644 index 0000000..4a9f609 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_magicbox.gsc @@ -0,0 +1,1540 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_magicbox_lock; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\_demo; +#include maps\mp\zombies\_zm_stats; + +init() +{ + if ( !isdefined( level.chest_joker_model ) ) + { + level.chest_joker_model = "zombie_teddybear"; + precachemodel( level.chest_joker_model ); + } + + if ( !isdefined( level.magic_box_zbarrier_state_func ) ) + level.magic_box_zbarrier_state_func = ::process_magic_box_zbarrier_state; + + if ( isdefined( level.using_locked_magicbox ) && level.using_locked_magicbox ) + maps\mp\zombies\_zm_magicbox_lock::init(); + + if ( is_classic() ) + { + level.chests = getstructarray( "treasure_chest_use", "targetname" ); + treasure_chest_init( "start_chest" ); + } + + if ( level.createfx_enabled ) + return; + + registerclientfield( "zbarrier", "magicbox_glow", 1000, 1, "int" ); + registerclientfield( "zbarrier", "zbarrier_show_sounds", 9000, 1, "int" ); + registerclientfield( "zbarrier", "zbarrier_leave_sounds", 9000, 1, "int" ); + + if ( !isdefined( level.magic_box_check_equipment ) ) + level.magic_box_check_equipment = ::default_magic_box_check_equipment; + + level thread magicbox_host_migration(); +} + +treasure_chest_init( start_chest_name ) +{ + flag_init( "moving_chest_enabled" ); + flag_init( "moving_chest_now" ); + flag_init( "chest_has_been_used" ); + level.chest_moves = 0; + level.chest_level = 0; + + if ( level.chests.size == 0 ) + return; + + for ( i = 0; i < level.chests.size; i++ ) + { + level.chests[i].box_hacks = []; + level.chests[i].orig_origin = level.chests[i].origin; + level.chests[i] get_chest_pieces(); + + if ( isdefined( level.chests[i].zombie_cost ) ) + { + level.chests[i].old_cost = level.chests[i].zombie_cost; + continue; + } + + level.chests[i].old_cost = 950; + } + + if ( !level.enable_magic ) + { + foreach ( chest in level.chests ) + chest hide_chest(); + + return; + } + + level.chest_accessed = 0; + + if ( level.chests.size > 1 ) + { + flag_set( "moving_chest_enabled" ); + level.chests = array_randomize( level.chests ); + } + else + { + level.chest_index = 0; + level.chests[0].no_fly_away = 1; + } + + init_starting_chest_location( start_chest_name ); + array_thread( level.chests, ::treasure_chest_think ); +} + +init_starting_chest_location( start_chest_name ) +{ + level.chest_index = 0; + start_chest_found = 0; + + if ( level.chests.size == 1 ) + { + start_chest_found = 1; + + if ( isdefined( level.chests[level.chest_index].zbarrier ) ) + level.chests[level.chest_index].zbarrier set_magic_box_zbarrier_state( "initial" ); + } + else + { + for ( i = 0; i < level.chests.size; i++ ) + { + if ( isdefined( level.random_pandora_box_start ) && level.random_pandora_box_start == 1 ) + { + if ( start_chest_found || isdefined( level.chests[i].start_exclude ) && level.chests[i].start_exclude == 1 ) + level.chests[i] hide_chest(); + else + { + level.chest_index = i; + level.chests[level.chest_index].hidden = 0; + + if ( isdefined( level.chests[level.chest_index].zbarrier ) ) + level.chests[level.chest_index].zbarrier set_magic_box_zbarrier_state( "initial" ); + + start_chest_found = 1; + } + + continue; + } + + if ( start_chest_found || !isdefined( level.chests[i].script_noteworthy ) || !issubstr( level.chests[i].script_noteworthy, start_chest_name ) ) + { + level.chests[i] hide_chest(); + continue; + } + + level.chest_index = i; + level.chests[level.chest_index].hidden = 0; + + if ( isdefined( level.chests[level.chest_index].zbarrier ) ) + level.chests[level.chest_index].zbarrier set_magic_box_zbarrier_state( "initial" ); + + start_chest_found = 1; + } + } + + if ( !isdefined( level.pandora_show_func ) ) + level.pandora_show_func = ::default_pandora_show_func; + + level.chests[level.chest_index] thread [[ level.pandora_show_func ]](); +} + +set_treasure_chest_cost( cost ) +{ + level.zombie_treasure_chest_cost = cost; +} + +get_chest_pieces() +{ + self.chest_box = getent( self.script_noteworthy + "_zbarrier", "script_noteworthy" ); + self.chest_rubble = []; + rubble = getentarray( self.script_noteworthy + "_rubble", "script_noteworthy" ); + + for ( i = 0; i < rubble.size; i++ ) + { + if ( distancesquared( self.origin, rubble[i].origin ) < 10000 ) + self.chest_rubble[self.chest_rubble.size] = rubble[i]; + } + + self.zbarrier = getent( self.script_noteworthy + "_zbarrier", "script_noteworthy" ); + + if ( isdefined( self.zbarrier ) ) + { + self.zbarrier zbarrierpieceuseboxriselogic( 3 ); + self.zbarrier zbarrierpieceuseboxriselogic( 4 ); + } + + self.unitrigger_stub = spawnstruct(); + self.unitrigger_stub.origin = self.origin + anglestoright( self.angles ) * -22.5; + self.unitrigger_stub.angles = self.angles; + self.unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + self.unitrigger_stub.script_width = 104; + self.unitrigger_stub.script_height = 50; + self.unitrigger_stub.script_length = 45; + self.unitrigger_stub.trigger_target = self; + unitrigger_force_per_player_triggers( self.unitrigger_stub, 1 ); + self.unitrigger_stub.prompt_and_visibility_func = ::boxtrigger_update_prompt; + self.zbarrier.owner = self; +} + +boxtrigger_update_prompt( player ) +{ + can_use = self boxstub_update_prompt( player ); + + if ( isdefined( self.hint_string ) ) + { + if ( isdefined( self.hint_parm1 ) ) + self sethintstring( self.hint_string, self.hint_parm1 ); + else + self sethintstring( self.hint_string ); + } + + return can_use; +} + +boxstub_update_prompt( player ) +{ + self setcursorhint( "HINT_NOICON" ); + + if ( !self trigger_visible_to_player( player ) ) + return false; + + self.hint_parm1 = undefined; + + if ( isdefined( self.stub.trigger_target.grab_weapon_hint ) && self.stub.trigger_target.grab_weapon_hint ) + { + if ( isdefined( level.magic_box_check_equipment ) && [[ level.magic_box_check_equipment ]]( self.stub.trigger_target.grab_weapon_name ) ) + self.hint_string = &"ZOMBIE_TRADE_EQUIP"; + else + self.hint_string = &"ZOMBIE_TRADE_WEAPON"; + } + else if ( isdefined( level.using_locked_magicbox ) && level.using_locked_magicbox && ( isdefined( self.stub.trigger_target.is_locked ) && self.stub.trigger_target.is_locked ) ) + self.hint_string = get_hint_string( self, "locked_magic_box_cost" ); + else + { + self.hint_parm1 = self.stub.trigger_target.zombie_cost; + self.hint_string = get_hint_string( self, "default_treasure_chest" ); + } + + return true; +} + +default_magic_box_check_equipment( weapon ) +{ + return is_offhand_weapon( weapon ); +} + +trigger_visible_to_player( player ) +{ + self setinvisibletoplayer( player ); + visible = 1; + + if ( isdefined( self.stub.trigger_target.chest_user ) && !isdefined( self.stub.trigger_target.box_rerespun ) ) + { + if ( player != self.stub.trigger_target.chest_user || is_placeable_mine( self.stub.trigger_target.chest_user getcurrentweapon() ) || self.stub.trigger_target.chest_user hacker_active() ) + visible = 0; + } + else if ( !player can_buy_weapon() ) + visible = 0; + + if ( !visible ) + return false; + + self setvisibletoplayer( player ); + return true; +} + +magicbox_unitrigger_think() +{ + self endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "trigger", player ); + + self.stub.trigger_target notify( "trigger", player ); + } +} + +play_crazi_sound() +{ + self playlocalsound( level.zmb_laugh_alias ); +} + +show_chest_sound_thread() +{ + self.zbarrier setclientfield( "zbarrier_show_sounds", 1 ); + wait 1.0; + self.zbarrier setclientfield( "zbarrier_show_sounds", 0 ); +} + +show_chest() +{ + self.zbarrier set_magic_box_zbarrier_state( "arriving" ); + + self.zbarrier waittill( "arrived" ); + + self thread [[ level.pandora_show_func ]](); + thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think ); + self thread show_chest_sound_thread(); + self.hidden = 0; + + if ( isdefined( self.box_hacks["summon_box"] ) ) + self [[ self.box_hacks["summon_box"] ]]( 0 ); +} + +hide_chest_sound_thread() +{ + self.zbarrier setclientfield( "zbarrier_leave_sounds", 1 ); + wait 1.0; + self.zbarrier setclientfield( "zbarrier_leave_sounds", 0 ); +} + +hide_chest( doboxleave ) +{ + if ( isdefined( self.unitrigger_stub ) ) + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); + + if ( isdefined( self.pandora_light ) ) + self.pandora_light delete(); + + self.hidden = 1; + + if ( isdefined( self.box_hacks ) && isdefined( self.box_hacks["summon_box"] ) ) + self [[ self.box_hacks["summon_box"] ]]( 1 ); + + if ( isdefined( self.zbarrier ) ) + { + if ( isdefined( doboxleave ) && doboxleave ) + { + self thread hide_chest_sound_thread(); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "boxmove" ); + self.zbarrier thread magic_box_zbarrier_leave(); + + self.zbarrier waittill( "left" ); + + playfx( level._effect["poltergeist"], self.zbarrier.origin, anglestoup( self.angles ), anglestoforward( self.angles ) ); + playsoundatposition( "zmb_box_poof", self.zbarrier.origin ); + } + else + self.zbarrier thread set_magic_box_zbarrier_state( "away" ); + } +} + +magic_box_zbarrier_leave() +{ + self set_magic_box_zbarrier_state( "leaving" ); + + self waittill( "left" ); + + self set_magic_box_zbarrier_state( "away" ); +} + +default_pandora_fx_func() +{ + self endon( "death" ); + self.pandora_light = spawn( "script_model", self.zbarrier.origin ); + self.pandora_light.angles = self.zbarrier.angles + vectorscale( ( -1, 0, -1 ), 90.0 ); + self.pandora_light setmodel( "tag_origin" ); + + if ( !( isdefined( level._box_initialized ) && level._box_initialized ) ) + { + flag_wait( "start_zombie_round_logic" ); + level._box_initialized = 1; + } + + wait 1; + + if ( isdefined( self ) && isdefined( self.pandora_light ) ) + playfxontag( level._effect["lght_marker"], self.pandora_light, "tag_origin" ); +} + +default_pandora_show_func( anchor, anchortarget, pieces ) +{ + if ( !isdefined( self.pandora_light ) ) + { + if ( !isdefined( level.pandora_fx_func ) ) + level.pandora_fx_func = ::default_pandora_fx_func; + + self thread [[ level.pandora_fx_func ]](); + } + + playfx( level._effect["lght_marker_flare"], self.pandora_light.origin ); +} + +unregister_unitrigger_on_kill_think() +{ + self notify( "unregister_unitrigger_on_kill_think" ); + self endon( "unregister_unitrigger_on_kill_think" ); + + self waittill( "kill_chest_think" ); + + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); +} + +treasure_chest_think() +{ + self endon( "kill_chest_think" ); + user = undefined; + user_cost = undefined; + self.box_rerespun = undefined; + self.weapon_out = undefined; + self thread unregister_unitrigger_on_kill_think(); + + while ( true ) + { + if ( !isdefined( self.forced_user ) ) + { + self waittill( "trigger", user ); + + if ( user == level ) + continue; + } + else + user = self.forced_user; + + if ( user in_revive_trigger() ) + { + wait 0.1; + continue; + } + + if ( user.is_drinking > 0 ) + { + wait 0.1; + continue; + } + + if ( isdefined( self.disabled ) && self.disabled ) + { + wait 0.1; + continue; + } + + if ( user getcurrentweapon() == "none" ) + { + wait 0.1; + continue; + } + + reduced_cost = undefined; + + if ( is_player_valid( user ) && user maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) + reduced_cost = int( self.zombie_cost / 2 ); + + if ( isdefined( level.using_locked_magicbox ) && level.using_locked_magicbox && ( isdefined( self.is_locked ) && self.is_locked ) ) + { + if ( user.score >= level.locked_magic_box_cost ) + { + user maps\mp\zombies\_zm_score::minus_to_player_score( level.locked_magic_box_cost ); + self.zbarrier set_magic_box_zbarrier_state( "unlocking" ); + self.unitrigger_stub run_visibility_function_for_all_triggers(); + } + else + user maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_box" ); + + wait 0.1; + continue; + } + else if ( isdefined( self.auto_open ) && is_player_valid( user ) ) + { + if ( !isdefined( self.no_charge ) ) + { + user maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost ); + user_cost = self.zombie_cost; + } + else + user_cost = 0; + + self.chest_user = user; + break; + } + else if ( is_player_valid( user ) && user.score >= self.zombie_cost ) + { + user maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost ); + user_cost = self.zombie_cost; + self.chest_user = user; + break; + } + else if ( isdefined( reduced_cost ) && user.score >= reduced_cost ) + { + user maps\mp\zombies\_zm_score::minus_to_player_score( reduced_cost ); + user_cost = reduced_cost; + self.chest_user = user; + break; + } + else if ( user.score < self.zombie_cost ) + { + play_sound_at_pos( "no_purchase", self.origin ); + user maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_box" ); + continue; + } + + wait 0.05; + } + + flag_set( "chest_has_been_used" ); + maps\mp\_demo::bookmark( "zm_player_use_magicbox", gettime(), user ); + user maps\mp\zombies\_zm_stats::increment_client_stat( "use_magicbox" ); + user maps\mp\zombies\_zm_stats::increment_player_stat( "use_magicbox" ); + + if ( isdefined( level._magic_box_used_vo ) ) + user thread [[ level._magic_box_used_vo ]](); + + self thread watch_for_emp_close(); + + if ( isdefined( level.using_locked_magicbox ) && level.using_locked_magicbox ) + self thread maps\mp\zombies\_zm_magicbox_lock::watch_for_lock(); + + self._box_open = 1; + self._box_opened_by_fire_sale = 0; + + if ( isdefined( level.zombie_vars["zombie_powerup_fire_sale_on"] ) && level.zombie_vars["zombie_powerup_fire_sale_on"] && !isdefined( self.auto_open ) && self [[ level._zombiemode_check_firesale_loc_valid_func ]]() ) + self._box_opened_by_fire_sale = 1; + + if ( isdefined( self.chest_lid ) ) + self.chest_lid thread treasure_chest_lid_open(); + + if ( isdefined( self.zbarrier ) ) + { + play_sound_at_pos( "open_chest", self.origin ); + play_sound_at_pos( "music_chest", self.origin ); + self.zbarrier set_magic_box_zbarrier_state( "open" ); + } + + self.timedout = 0; + self.weapon_out = 1; + self.zbarrier thread treasure_chest_weapon_spawn( self, user ); + self.zbarrier thread treasure_chest_glowfx(); + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); + self.zbarrier waittill_any( "randomization_done", "box_hacked_respin" ); + + if ( flag( "moving_chest_now" ) && !self._box_opened_by_fire_sale && isdefined( user_cost ) ) + user maps\mp\zombies\_zm_score::add_to_player_score( user_cost, 0 ); + + if ( flag( "moving_chest_now" ) && !level.zombie_vars["zombie_powerup_fire_sale_on"] && !self._box_opened_by_fire_sale ) + self thread treasure_chest_move( self.chest_user ); + else + { + self.grab_weapon_hint = 1; + self.grab_weapon_name = self.zbarrier.weapon_string; + self.chest_user = user; + thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think ); + + if ( isdefined( self.zbarrier ) && !is_true( self.zbarrier.closed_by_emp ) ) + self thread treasure_chest_timeout(); + + while ( !( isdefined( self.closed_by_emp ) && self.closed_by_emp ) ) + { + self waittill( "trigger", grabber ); + + self.weapon_out = undefined; + + if ( isdefined( level.magic_box_grab_by_anyone ) && level.magic_box_grab_by_anyone ) + { + if ( isplayer( grabber ) ) + user = grabber; + } + + if ( isdefined( level.pers_upgrade_box_weapon ) && level.pers_upgrade_box_weapon ) + self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_box_weapon_used( user, grabber ); + + if ( isdefined( grabber.is_drinking ) && grabber.is_drinking > 0 ) + { + wait 0.1; + continue; + } + + if ( grabber == user && user getcurrentweapon() == "none" ) + { + wait 0.1; + continue; + } + + if ( grabber != level && ( isdefined( self.box_rerespun ) && self.box_rerespun ) ) + user = grabber; + + if ( grabber == user || grabber == level ) + { + self.box_rerespun = undefined; + current_weapon = "none"; + + if ( is_player_valid( user ) ) + current_weapon = user getcurrentweapon(); + + if ( grabber == user && is_player_valid( user ) && !( user.is_drinking > 0 ) && !is_placeable_mine( current_weapon ) && !is_equipment( current_weapon ) && level.revive_tool != current_weapon ) + { + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", user.name, user.score, level.round_number, self.zombie_cost, self.zbarrier.weapon_string, self.origin, "magic_accept" ); + self notify( "user_grabbed_weapon" ); + user notify( "user_grabbed_weapon" ); + user thread treasure_chest_give_weapon( self.zbarrier.weapon_string ); + maps\mp\_demo::bookmark( "zm_player_grabbed_magicbox", gettime(), user ); + user maps\mp\zombies\_zm_stats::increment_client_stat( "grabbed_from_magicbox" ); + user maps\mp\zombies\_zm_stats::increment_player_stat( "grabbed_from_magicbox" ); + break; + } + else if ( grabber == level ) + { + unacquire_weapon_toggle( self.zbarrier.weapon_string ); + self.timedout = 1; + + if ( is_player_valid( user ) ) + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %S", user.name, user.score, level.round_number, self.zombie_cost, self.zbarrier.weapon_string, self.origin, "magic_reject" ); + + break; + } + } + + wait 0.05; + } + + self.grab_weapon_hint = 0; + self.zbarrier notify( "weapon_grabbed" ); + + if ( !( isdefined( self._box_opened_by_fire_sale ) && self._box_opened_by_fire_sale ) ) + level.chest_accessed += 1; + + if ( level.chest_moves > 0 && isdefined( level.pulls_since_last_ray_gun ) ) + level.pulls_since_last_ray_gun += 1; + + if ( isdefined( level.pulls_since_last_tesla_gun ) ) + level.pulls_since_last_tesla_gun += 1; + + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); + + if ( isdefined( self.chest_lid ) ) + self.chest_lid thread treasure_chest_lid_close( self.timedout ); + + if ( isdefined( self.zbarrier ) ) + { + self.zbarrier set_magic_box_zbarrier_state( "close" ); + play_sound_at_pos( "close_chest", self.origin ); + + self.zbarrier waittill( "closed" ); + + wait 1; + } + else + wait 3.0; + + if ( isdefined( level.zombie_vars["zombie_powerup_fire_sale_on"] ) && level.zombie_vars["zombie_powerup_fire_sale_on"] && self [[ level._zombiemode_check_firesale_loc_valid_func ]]() || self == level.chests[level.chest_index] ) + thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think ); + } + + self._box_open = 0; + self._box_opened_by_fire_sale = 0; + self.chest_user = undefined; + self notify( "chest_accessed" ); + self thread treasure_chest_think(); +} + +watch_for_emp_close() +{ + self endon( "chest_accessed" ); + self.closed_by_emp = 0; + + if ( !should_watch_for_emp() ) + return; + + if ( isdefined( self.zbarrier ) ) + self.zbarrier.closed_by_emp = 0; + + while ( true ) + { + level waittill( "emp_detonate", origin, radius ); + + if ( distancesquared( origin, self.origin ) < radius * radius ) + break; + } + + if ( flag( "moving_chest_now" ) ) + return; + + self.closed_by_emp = 1; + + if ( isdefined( self.zbarrier ) ) + { + self.zbarrier.closed_by_emp = 1; + self.zbarrier notify( "box_hacked_respin" ); + + if ( isdefined( self.zbarrier.weapon_model ) ) + self.zbarrier.weapon_model notify( "kill_weapon_movement" ); + + if ( isdefined( self.zbarrier.weapon_model_dw ) ) + self.zbarrier.weapon_model_dw notify( "kill_weapon_movement" ); + } + + wait 0.1; + self notify( "trigger", level ); +} + +can_buy_weapon() +{ + if ( isdefined( self.is_drinking ) && self.is_drinking > 0 ) + return false; + + if ( self hacker_active() ) + return false; + + current_weapon = self getcurrentweapon(); + + if ( is_placeable_mine( current_weapon ) || is_equipment_that_blocks_purchase( current_weapon ) ) + return false; + + if ( self in_revive_trigger() ) + return false; + + if ( current_weapon == "none" ) + return false; + + return true; +} + +default_box_move_logic() +{ + index = -1; + + for ( i = 0; i < level.chests.size; i++ ) + { + if ( issubstr( level.chests[i].script_noteworthy, "move" + ( level.chest_moves + 1 ) ) && i != level.chest_index ) + { + index = i; + break; + } + } + + if ( index != -1 ) + level.chest_index = index; + else + level.chest_index++; + + if ( level.chest_index >= level.chests.size ) + { + temp_chest_name = level.chests[level.chest_index - 1].script_noteworthy; + level.chest_index = 0; + level.chests = array_randomize( level.chests ); + + if ( temp_chest_name == level.chests[level.chest_index].script_noteworthy ) + level.chest_index++; + } +} + +treasure_chest_move( player_vox ) +{ + level waittill( "weapon_fly_away_start" ); + + players = get_players(); + array_thread( players, ::play_crazi_sound ); + + if ( isdefined( player_vox ) ) + player_vox delay_thread( randomintrange( 2, 7 ), maps\mp\zombies\_zm_audio::create_and_play_dialog, "general", "box_move" ); + + level waittill( "weapon_fly_away_end" ); + + if ( isdefined( self.zbarrier ) ) + self hide_chest( 1 ); + + wait 0.1; + post_selection_wait_duration = 7; + + if ( level.zombie_vars["zombie_powerup_fire_sale_on"] == 1 && self [[ level._zombiemode_check_firesale_loc_valid_func ]]() ) + { + current_sale_time = level.zombie_vars["zombie_powerup_fire_sale_time"]; + wait_network_frame(); + self thread fire_sale_fix(); + level.zombie_vars["zombie_powerup_fire_sale_time"] = current_sale_time; + + while ( level.zombie_vars["zombie_powerup_fire_sale_time"] > 0 ) + wait 0.1; + } + else + post_selection_wait_duration += 5; + + level.verify_chest = 0; + + if ( isdefined( level._zombiemode_custom_box_move_logic ) ) + [[ level._zombiemode_custom_box_move_logic ]](); + else + default_box_move_logic(); + + if ( isdefined( level.chests[level.chest_index].box_hacks["summon_box"] ) ) + level.chests[level.chest_index] [[ level.chests[level.chest_index].box_hacks["summon_box"] ]]( 0 ); + + wait( post_selection_wait_duration ); + playfx( level._effect["poltergeist"], level.chests[level.chest_index].zbarrier.origin ); + level.chests[level.chest_index] show_chest(); + flag_clear( "moving_chest_now" ); + self.zbarrier.chest_moving = 0; +} + +fire_sale_fix() +{ + if ( !isdefined( level.zombie_vars["zombie_powerup_fire_sale_on"] ) ) + return; + + if ( level.zombie_vars["zombie_powerup_fire_sale_on"] ) + { + self.old_cost = 950; + self thread show_chest(); + self.zombie_cost = 10; + self.unitrigger_stub unitrigger_set_hint_string( self, "default_treasure_chest", self.zombie_cost ); + wait_network_frame(); + + level waittill( "fire_sale_off" ); + + while ( isdefined( self._box_open ) && self._box_open ) + wait 0.1; + + self hide_chest( 1 ); + self.zombie_cost = self.old_cost; + } +} + +check_for_desirable_chest_location() +{ + if ( !isdefined( level.desirable_chest_location ) ) + return level.chest_index; + + if ( level.chests[level.chest_index].script_noteworthy == level.desirable_chest_location ) + { + level.desirable_chest_location = undefined; + return level.chest_index; + } + + for ( i = 0; i < level.chests.size; i++ ) + { + if ( level.chests[i].script_noteworthy == level.desirable_chest_location ) + { + level.desirable_chest_location = undefined; + return i; + } + } +/# + iprintln( level.desirable_chest_location + " is an invalid box location!" ); +#/ + level.desirable_chest_location = undefined; + return level.chest_index; +} + +rotateroll_box() +{ + angles = 40; + angles2 = 0; + + while ( isdefined( self ) ) + { + self rotateroll( angles + angles2, 0.5 ); + wait 0.7; + angles2 = 40; + self rotateroll( angles * -2, 0.5 ); + wait 0.7; + } +} + +verify_chest_is_open() +{ + for ( i = 0; i < level.open_chest_location.size; i++ ) + { + if ( isdefined( level.open_chest_location[i] ) ) + { + if ( level.open_chest_location[i] == level.chests[level.chest_index].script_noteworthy ) + { + level.verify_chest = 1; + return; + } + } + } + + level.verify_chest = 0; +} + +treasure_chest_timeout() +{ + self endon( "user_grabbed_weapon" ); + self.zbarrier endon( "box_hacked_respin" ); + self.zbarrier endon( "box_hacked_rerespin" ); + wait 12; + self notify( "trigger", level ); +} + +treasure_chest_lid_open() +{ + openroll = 105; + opentime = 0.5; + self rotateroll( 105, opentime, opentime * 0.5 ); + play_sound_at_pos( "open_chest", self.origin ); + play_sound_at_pos( "music_chest", self.origin ); +} + +treasure_chest_lid_close( timedout ) +{ + closeroll = -105; + closetime = 0.5; + self rotateroll( closeroll, closetime, closetime * 0.5 ); + play_sound_at_pos( "close_chest", self.origin ); + self notify( "lid_closed" ); +} + +treasure_chest_chooserandomweapon( player ) +{ + keys = getarraykeys( level.zombie_weapons ); + return keys[randomint( keys.size )]; +} + +treasure_chest_canplayerreceiveweapon( player, weapon, pap_triggers ) +{ + if ( !get_is_in_box( weapon ) ) + return 0; + + if ( isdefined( player ) && player has_weapon_or_upgrade( weapon ) ) + return 0; + + if ( !limited_weapon_below_quota( weapon, player, pap_triggers ) ) + return 0; + + if ( !player player_can_use_content( weapon ) ) + return 0; + + if ( isdefined( level.custom_magic_box_selection_logic ) ) + { + if ( ![[ level.custom_magic_box_selection_logic ]]( weapon, player, pap_triggers ) ) + return 0; + } + + if ( isdefined( player ) && isdefined( level.special_weapon_magicbox_check ) ) + return player [[ level.special_weapon_magicbox_check ]]( weapon ); + + return 1; +} + +treasure_chest_chooseweightedrandomweapon( player ) +{ + keys = array_randomize( getarraykeys( level.zombie_weapons ) ); + + if ( isdefined( level.customrandomweaponweights ) ) + keys = player [[ level.customrandomweaponweights ]]( keys ); +/# + forced_weapon = getdvar( _hash_45ED7744 ); + + if ( forced_weapon != "" && isdefined( level.zombie_weapons[forced_weapon] ) ) + arrayinsert( keys, forced_weapon, 0 ); +#/ + pap_triggers = getentarray( "specialty_weapupgrade", "script_noteworthy" ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( treasure_chest_canplayerreceiveweapon( player, keys[i], pap_triggers ) ) + return keys[i]; + } + + return keys[0]; +} + +weapon_is_dual_wield( name ) +{ + switch ( name ) + { + case "pm63_upgraded_zm": + case "microwavegundw_zm": + case "microwavegundw_upgraded_zm": + case "m1911_upgraded_zm": + case "hs10_upgraded_zm": + case "fivesevendw_zm": + case "fivesevendw_upgraded_zm": + case "cz75dw_zm": + case "cz75dw_upgraded_zm": + return true; + default: + return false; + } +} + +weapon_show_hint_choke() +{ + for ( level._weapon_show_hint_choke = 0; 1; level._weapon_show_hint_choke = 0 ) + wait 0.05; +} + +decide_hide_show_hint( endon_notify, second_endon_notify, onlyplayer ) +{ + self endon( "death" ); + + if ( isdefined( endon_notify ) ) + self endon( endon_notify ); + + if ( isdefined( second_endon_notify ) ) + self endon( second_endon_notify ); + + if ( !isdefined( level._weapon_show_hint_choke ) ) + level thread weapon_show_hint_choke(); + + use_choke = 0; + + if ( isdefined( level._use_choke_weapon_hints ) && level._use_choke_weapon_hints == 1 ) + use_choke = 1; + + while ( true ) + { + last_update = gettime(); + + if ( isdefined( self.chest_user ) && !isdefined( self.box_rerespun ) ) + { + if ( is_placeable_mine( self.chest_user getcurrentweapon() ) || self.chest_user hacker_active() ) + self setinvisibletoplayer( self.chest_user ); + else + self setvisibletoplayer( self.chest_user ); + } + else if ( isdefined( onlyplayer ) ) + { + if ( onlyplayer can_buy_weapon() ) + self setinvisibletoplayer( onlyplayer, 0 ); + else + self setinvisibletoplayer( onlyplayer, 1 ); + } + else + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] can_buy_weapon() ) + { + self setinvisibletoplayer( players[i], 0 ); + continue; + } + + self setinvisibletoplayer( players[i], 1 ); + } + } + + if ( use_choke ) + { + while ( level._weapon_show_hint_choke > 4 && gettime() < last_update + 150 ) + wait 0.05; + } + else + wait 0.1; + + level._weapon_show_hint_choke++; + } +} + +get_left_hand_weapon_model_name( name ) +{ + switch ( name ) + { + case "microwavegundw_zm": + return getweaponmodel( "microwavegunlh_zm" ); + case "microwavegundw_upgraded_zm": + return getweaponmodel( "microwavegunlh_upgraded_zm" ); + default: + return getweaponmodel( name ); + } +} + +clean_up_hacked_box() +{ + self waittill( "box_hacked_respin" ); + + self endon( "box_spin_done" ); + + if ( isdefined( self.weapon_model ) ) + { + self.weapon_model delete(); + self.weapon_model = undefined; + } + + if ( isdefined( self.weapon_model_dw ) ) + { + self.weapon_model_dw delete(); + self.weapon_model_dw = undefined; + } + + self hidezbarrierpiece( 3 ); + self hidezbarrierpiece( 4 ); + self setzbarrierpiecestate( 3, "closed" ); + self setzbarrierpiecestate( 4, "closed" ); +} + +treasure_chest_weapon_spawn( chest, player, respin ) +{ + if ( isdefined( level.using_locked_magicbox ) && level.using_locked_magicbox ) + { + self.owner endon( "box_locked" ); + self thread maps\mp\zombies\_zm_magicbox_lock::clean_up_locked_box(); + } + + self endon( "box_hacked_respin" ); + self thread clean_up_hacked_box(); + assert( isdefined( player ) ); + self.weapon_string = undefined; + modelname = undefined; + rand = undefined; + number_cycles = 40; + + if ( isdefined( chest.zbarrier ) ) + { + if ( isdefined( level.custom_magic_box_do_weapon_rise ) ) + chest.zbarrier thread [[ level.custom_magic_box_do_weapon_rise ]](); + else + chest.zbarrier thread magic_box_do_weapon_rise(); + } + + for ( i = 0; i < number_cycles; i++ ) + { + if ( i < 20 ) + { + wait 0.05; + continue; + } + + if ( i < 30 ) + { + wait 0.1; + continue; + } + + if ( i < 35 ) + { + wait 0.2; + continue; + } + + if ( i < 38 ) + wait 0.3; + } + + if ( isdefined( level.custom_magic_box_weapon_wait ) ) + [[ level.custom_magic_box_weapon_wait ]](); + + if ( isdefined( player.pers_upgrades_awarded["box_weapon"] ) && player.pers_upgrades_awarded["box_weapon"] ) + rand = maps\mp\zombies\_zm_pers_upgrades_functions::pers_treasure_chest_choosespecialweapon( player ); + else + rand = treasure_chest_chooseweightedrandomweapon( player ); + + self.weapon_string = rand; + wait 0.1; + + if ( isdefined( level.custom_magicbox_float_height ) ) + v_float = anglestoup( self.angles ) * level.custom_magicbox_float_height; + else + v_float = anglestoup( self.angles ) * 40; + + self.model_dw = undefined; + self.weapon_model = spawn_weapon_model( rand, undefined, self.origin + v_float, self.angles + vectorscale( ( 0, 1, 0 ), 180.0 ) ); + + if ( weapon_is_dual_wield( rand ) ) + self.weapon_model_dw = spawn_weapon_model( rand, get_left_hand_weapon_model_name( rand ), self.weapon_model.origin - vectorscale( ( 1, 1, 1 ), 3.0 ), self.weapon_model.angles ); + + if ( getdvar( "magic_chest_movable" ) == "1" && !( isdefined( chest._box_opened_by_fire_sale ) && chest._box_opened_by_fire_sale ) && !( isdefined( level.zombie_vars["zombie_powerup_fire_sale_on"] ) && level.zombie_vars["zombie_powerup_fire_sale_on"] && self [[ level._zombiemode_check_firesale_loc_valid_func ]]() ) ) + { + random = randomint( 100 ); + + if ( !isdefined( level.chest_min_move_usage ) ) + level.chest_min_move_usage = 4; + + if ( level.chest_accessed < level.chest_min_move_usage ) + chance_of_joker = -1; + else + { + chance_of_joker = level.chest_accessed + 20; + + if ( level.chest_moves == 0 && level.chest_accessed >= 8 ) + chance_of_joker = 100; + + if ( level.chest_accessed >= 4 && level.chest_accessed < 8 ) + { + if ( random < 15 ) + chance_of_joker = 100; + else + chance_of_joker = -1; + } + + if ( level.chest_moves > 0 ) + { + if ( level.chest_accessed >= 8 && level.chest_accessed < 13 ) + { + if ( random < 30 ) + chance_of_joker = 100; + else + chance_of_joker = -1; + } + + if ( level.chest_accessed >= 13 ) + { + if ( random < 50 ) + chance_of_joker = 100; + else + chance_of_joker = -1; + } + } + } + + if ( isdefined( chest.no_fly_away ) ) + chance_of_joker = -1; + + if ( isdefined( level._zombiemode_chest_joker_chance_override_func ) ) + chance_of_joker = [[ level._zombiemode_chest_joker_chance_override_func ]]( chance_of_joker ); + + if ( chance_of_joker > random ) + { + self.weapon_string = undefined; + self.weapon_model setmodel( level.chest_joker_model ); + self.weapon_model.angles = self.angles + vectorscale( ( 0, 1, 0 ), 90.0 ); + + if ( isdefined( self.weapon_model_dw ) ) + { + self.weapon_model_dw delete(); + self.weapon_model_dw = undefined; + } + + self.chest_moving = 1; + flag_set( "moving_chest_now" ); + level.chest_accessed = 0; + level.chest_moves++; + } + } + + self notify( "randomization_done" ); + + if ( flag( "moving_chest_now" ) && !( level.zombie_vars["zombie_powerup_fire_sale_on"] && self [[ level._zombiemode_check_firesale_loc_valid_func ]]() ) ) + { + if ( isdefined( level.chest_joker_custom_movement ) ) + self [[ level.chest_joker_custom_movement ]](); + else + { + wait 0.5; + level notify( "weapon_fly_away_start" ); + wait 2; + + if ( isdefined( self.weapon_model ) ) + { + v_fly_away = self.origin + anglestoup( self.angles ) * 500; + self.weapon_model moveto( v_fly_away, 4, 3 ); + } + + if ( isdefined( self.weapon_model_dw ) ) + { + v_fly_away = self.origin + anglestoup( self.angles ) * 500; + self.weapon_model_dw moveto( v_fly_away, 4, 3 ); + } + + self.weapon_model waittill( "movedone" ); + + self.weapon_model delete(); + + if ( isdefined( self.weapon_model_dw ) ) + { + self.weapon_model_dw delete(); + self.weapon_model_dw = undefined; + } + + self notify( "box_moving" ); + level notify( "weapon_fly_away_end" ); + } + } + else + { + acquire_weapon_toggle( rand, player ); + + if ( rand == "tesla_gun_zm" || rand == "ray_gun_zm" ) + { + if ( rand == "ray_gun_zm" ) + level.pulls_since_last_ray_gun = 0; + + if ( rand == "tesla_gun_zm" ) + { + level.pulls_since_last_tesla_gun = 0; + level.player_seen_tesla_gun = 1; + } + } + + if ( !isdefined( respin ) ) + { + if ( isdefined( chest.box_hacks["respin"] ) ) + self [[ chest.box_hacks["respin"] ]]( chest, player ); + } + else if ( isdefined( chest.box_hacks["respin_respin"] ) ) + self [[ chest.box_hacks["respin_respin"] ]]( chest, player ); + + if ( isdefined( level.custom_magic_box_timer_til_despawn ) ) + self.weapon_model thread [[ level.custom_magic_box_timer_til_despawn ]]( self ); + else + self.weapon_model thread timer_til_despawn( v_float ); + + if ( isdefined( self.weapon_model_dw ) ) + { + if ( isdefined( level.custom_magic_box_timer_til_despawn ) ) + self.weapon_model_dw thread [[ level.custom_magic_box_timer_til_despawn ]]( self ); + else + self.weapon_model_dw thread timer_til_despawn( v_float ); + } + + self waittill( "weapon_grabbed" ); + + if ( !chest.timedout ) + { + if ( isdefined( self.weapon_model ) ) + self.weapon_model delete(); + + if ( isdefined( self.weapon_model_dw ) ) + self.weapon_model_dw delete(); + } + } + + self.weapon_string = undefined; + self notify( "box_spin_done" ); +} + +chest_get_min_usage() +{ + min_usage = 4; + return min_usage; +} + +chest_get_max_usage() +{ + max_usage = 6; + players = get_players(); + + if ( level.chest_moves == 0 ) + { + if ( players.size == 1 ) + max_usage = 3; + else if ( players.size == 2 ) + max_usage = 4; + else if ( players.size == 3 ) + max_usage = 5; + else + max_usage = 6; + } + else if ( players.size == 1 ) + max_usage = 4; + else if ( players.size == 2 ) + max_usage = 4; + else if ( players.size == 3 ) + max_usage = 5; + else + max_usage = 7; + + return max_usage; +} + +timer_til_despawn( v_float ) +{ + self endon( "kill_weapon_movement" ); + putbacktime = 12; + self moveto( self.origin - v_float * 0.85, putbacktime, putbacktime * 0.5 ); + wait( putbacktime ); + + if ( isdefined( self ) ) + self delete(); +} + +treasure_chest_glowfx() +{ + self setclientfield( "magicbox_glow", 1 ); + self waittill_any( "weapon_grabbed", "box_moving" ); + self setclientfield( "magicbox_glow", 0 ); +} + +treasure_chest_give_weapon( weapon_string ) +{ + self.last_box_weapon = gettime(); + self maps\mp\zombies\_zm_weapons::weapon_give( weapon_string, 0, 1 ); +} + +magic_box_teddy_twitches() +{ + self endon( "zbarrier_state_change" ); + self setzbarrierpiecestate( 0, "closed" ); + + while ( true ) + { + wait( randomfloatrange( 180, 1800 ) ); + self setzbarrierpiecestate( 0, "opening" ); + wait( randomfloatrange( 180, 1800 ) ); + self setzbarrierpiecestate( 0, "closing" ); + } +} + +magic_box_initial() +{ + self setzbarrierpiecestate( 1, "open" ); +} + +magic_box_arrives() +{ + self setzbarrierpiecestate( 1, "opening" ); + + while ( self getzbarrierpiecestate( 1 ) == "opening" ) + wait 0.05; + + self notify( "arrived" ); +} + +magic_box_leaves() +{ + self setzbarrierpiecestate( 1, "closing" ); + + while ( self getzbarrierpiecestate( 1 ) == "closing" ) + wait 0.1; + + self notify( "left" ); +} + +magic_box_opens() +{ + self setzbarrierpiecestate( 2, "opening" ); + + while ( self getzbarrierpiecestate( 2 ) == "opening" ) + wait 0.1; + + self notify( "opened" ); +} + +magic_box_closes() +{ + self setzbarrierpiecestate( 2, "closing" ); + + while ( self getzbarrierpiecestate( 2 ) == "closing" ) + wait 0.1; + + self notify( "closed" ); +} + +magic_box_do_weapon_rise() +{ + self endon( "box_hacked_respin" ); + self setzbarrierpiecestate( 3, "closed" ); + self setzbarrierpiecestate( 4, "closed" ); + wait_network_frame(); + self zbarrierpieceuseboxriselogic( 3 ); + self zbarrierpieceuseboxriselogic( 4 ); + self showzbarrierpiece( 3 ); + self showzbarrierpiece( 4 ); + self setzbarrierpiecestate( 3, "opening" ); + self setzbarrierpiecestate( 4, "opening" ); + + while ( self getzbarrierpiecestate( 3 ) != "open" ) + wait 0.5; + + self hidezbarrierpiece( 3 ); + self hidezbarrierpiece( 4 ); +} + +magic_box_do_teddy_flyaway() +{ + self showzbarrierpiece( 3 ); + self setzbarrierpiecestate( 3, "closing" ); +} + +is_chest_active() +{ + curr_state = self.zbarrier get_magic_box_zbarrier_state(); + + if ( flag( "moving_chest_now" ) ) + return false; + + if ( curr_state == "open" || curr_state == "close" ) + return true; + + return false; +} + +get_magic_box_zbarrier_state() +{ + return self.state; +} + +set_magic_box_zbarrier_state( state ) +{ + for ( i = 0; i < self getnumzbarrierpieces(); i++ ) + self hidezbarrierpiece( i ); + + self notify( "zbarrier_state_change" ); + self [[ level.magic_box_zbarrier_state_func ]]( state ); +} + +process_magic_box_zbarrier_state( state ) +{ + switch ( state ) + { + case "away": + self showzbarrierpiece( 0 ); + self thread magic_box_teddy_twitches(); + self.state = "away"; + break; + case "arriving": + self showzbarrierpiece( 1 ); + self thread magic_box_arrives(); + self.state = "arriving"; + break; + case "initial": + self showzbarrierpiece( 1 ); + self thread magic_box_initial(); + thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.owner.unitrigger_stub, ::magicbox_unitrigger_think ); + self.state = "initial"; + break; + case "open": + self showzbarrierpiece( 2 ); + self thread magic_box_opens(); + self.state = "open"; + break; + case "close": + self showzbarrierpiece( 2 ); + self thread magic_box_closes(); + self.state = "close"; + break; + case "leaving": + self showzbarrierpiece( 1 ); + self thread magic_box_leaves(); + self.state = "leaving"; + break; + default: + if ( isdefined( level.custom_magicbox_state_handler ) ) + self [[ level.custom_magicbox_state_handler ]]( state ); + + break; + } +} + +magicbox_host_migration() +{ + level endon( "end_game" ); + level notify( "mb_hostmigration" ); + level endon( "mb_hostmigration" ); + + while ( true ) + { + level waittill( "host_migration_end" ); + + if ( !isdefined( level.chests ) ) + continue; + + foreach ( chest in level.chests ) + { + if ( !is_true( chest.hidden ) ) + { + if ( isdefined( chest ) && isdefined( chest.pandora_light ) ) + playfxontag( level._effect["lght_marker"], chest.pandora_light, "tag_origin" ); + } + + wait_network_frame(); + } + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_magicbox_lock.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_magicbox_lock.gsc new file mode 100644 index 0000000..c4101f7 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_magicbox_lock.gsc @@ -0,0 +1,106 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_magicbox_lock; +#include maps\mp\zombies\_zm_unitrigger; + +init() +{ + precachemodel( "p6_anim_zm_al_magic_box_lock_red" ); + level.locked_magic_box_cost = 2000; + level.custom_magicbox_state_handler = maps\mp\zombies\_zm_magicbox_lock::set_locked_magicbox_state; + add_zombie_hint( "locked_magic_box_cost", &"ZOMBIE_LOCKED_COST_2000" ); +} + +watch_for_lock() +{ + self endon( "user_grabbed_weapon" ); + self endon( "chest_accessed" ); + + self waittill( "box_locked" ); + + self notify( "kill_chest_think" ); + self.grab_weapon_hint = 0; + self.chest_user = undefined; + wait 0.1; + self thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think ); + self.unitrigger_stub run_visibility_function_for_all_triggers(); + self thread treasure_chest_think(); +} + +clean_up_locked_box() +{ + self endon( "box_spin_done" ); + + self.owner waittill( "box_locked" ); + + if ( isdefined( self.weapon_model ) ) + { + self.weapon_model delete(); + self.weapon_model = undefined; + } + + if ( isdefined( self.weapon_model_dw ) ) + { + self.weapon_model_dw delete(); + self.weapon_model_dw = undefined; + } + + self hidezbarrierpiece( 3 ); + self hidezbarrierpiece( 4 ); + self setzbarrierpiecestate( 3, "closed" ); + self setzbarrierpiecestate( 4, "closed" ); +} + +magic_box_locks() +{ + self.owner.is_locked = 1; + self.owner notify( "box_locked" ); + self playsound( "zmb_hellbox_lock" ); + self setclientfield( "magicbox_open_fx", 0 ); + self setclientfield( "magicbox_amb_fx", 2 ); + self setzbarrierpiecestate( 5, "closing" ); + + while ( self getzbarrierpiecestate( 5 ) == "closing" ) + wait 0.5; + + self notify( "locked" ); +} + +magic_box_unlocks() +{ + maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.owner.unitrigger_stub ); + self playsound( "zmb_hellbox_unlock" ); + self setzbarrierpiecestate( 5, "opening" ); + + while ( self getzbarrierpiecestate( 5 ) == "opening" ) + wait 0.5; + + self setzbarrierpiecestate( 2, "closed" ); + self showzbarrierpiece( 2 ); + self hidezbarrierpiece( 5 ); + self notify( "unlocked" ); + self.owner.is_locked = 0; + maps\mp\zombies\_zm_unitrigger::register_unitrigger( self.owner.unitrigger_stub ); + self setclientfield( "magicbox_amb_fx", 1 ); +} + +set_locked_magicbox_state( state ) +{ + switch ( state ) + { + case "locking": + self showzbarrierpiece( 5 ); + self thread magic_box_locks(); + self.state = "locking"; + break; + case "unlocking": + self showzbarrierpiece( 5 ); + self magic_box_unlocks(); + self.state = "close"; + break; + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_melee_weapon.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_melee_weapon.gsc new file mode 100644 index 0000000..4bc83cd --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_melee_weapon.gsc @@ -0,0 +1,576 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_audio; + +init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) +{ + precacheitem( weapon_name ); + precacheitem( flourish_weapon_name ); + add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); + melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_weapon_triggers.size; i++ ) + { + knife_model = getent( melee_weapon_triggers[i].target, "targetname" ); + + if ( isdefined( knife_model ) ) + knife_model hide(); + + melee_weapon_triggers[i] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); + + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + melee_weapon_triggers[i] sethintstring( hint_string, cost ); + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + cursor_hint = "HINT_WEAPON"; + cursor_hint_weapon = weapon_name; + melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); + } + else + melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); + } + else + { + weapon_display = get_weapon_display_name( weapon_name ); + hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + melee_weapon_triggers[i] sethintstring( hint_string, weapon_display, cost ); + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + cursor_hint = "HINT_WEAPON"; + cursor_hint_weapon = weapon_name; + melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); + } + else + melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); + } + + melee_weapon_triggers[i] usetriggerrequirelookat(); + } + + melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_weapon_structs.size; i++ ) + prepare_stub( melee_weapon_structs[i].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); + + register_melee_weapon_for_level( weapon_name ); + + if ( !isdefined( level.ballistic_weapon_name ) ) + level.ballistic_weapon_name = []; + + level.ballistic_weapon_name[weapon_name] = ballistic_weapon_name; + + if ( !isdefined( level.ballistic_upgraded_weapon_name ) ) + level.ballistic_upgraded_weapon_name = []; + + level.ballistic_upgraded_weapon_name[weapon_name] = ballistic_upgraded_weapon_name; +/# + if ( !isdefined( level.zombie_weapons[weapon_name] ) ) + { + if ( isdefined( level.devgui_add_weapon ) ) + [[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost ); + } +#/ +} + +prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) +{ + if ( isdefined( stub ) ) + { + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + stub.hint_string = hint_string; + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + stub.cursor_hint = "HINT_WEAPON"; + stub.cursor_hint_weapon = weapon_name; + } + else + { + stub.cursor_hint = "HINT_NOICON"; + stub.cursor_hint_weapon = undefined; + } + } + else + { + stub.hint_parm1 = get_weapon_display_name( weapon_name ); + stub.hint_parm2 = cost; + stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + stub.cursor_hint = "HINT_WEAPON"; + stub.cursor_hint_weapon = weapon_name; + } + else + { + stub.cursor_hint = "HINT_NOICON"; + stub.cursor_hint_weapon = undefined; + } + } + + stub.cost = cost; + stub.weapon_name = weapon_name; + stub.vo_dialog_id = vo_dialog_id; + stub.flourish_weapon_name = flourish_weapon_name; + stub.ballistic_weapon_name = ballistic_weapon_name; + stub.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; + stub.trigger_func = ::melee_weapon_think; + stub.flourish_fn = flourish_fn; + } +} + +add_stub( stub, weapon_name ) +{ + melee_weapon = undefined; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( level._melee_weapons[i].weapon_name == weapon_name ) + { + melee_weapon = level._melee_weapons[i]; + break; + } + } + + if ( isdefined( stub ) && isdefined( melee_weapon ) ) + prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn ); +} + +give_melee_weapon_by_name( weapon_name ) +{ + melee_weapon = undefined; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( level._melee_weapons[i].weapon_name == weapon_name ) + { + melee_weapon = level._melee_weapons[i]; + break; + } + } + + if ( isdefined( melee_weapon ) ) + self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined ); +} + +add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) +{ + melee_weapon = spawnstruct(); + melee_weapon.weapon_name = weapon_name; + melee_weapon.flourish_weapon_name = flourish_weapon_name; + melee_weapon.ballistic_weapon_name = ballistic_weapon_name; + melee_weapon.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; + melee_weapon.cost = cost; + melee_weapon.wallbuy_targetname = wallbuy_targetname; + melee_weapon.hint_string = hint_string; + melee_weapon.vo_dialog_id = vo_dialog_id; + melee_weapon.flourish_fn = flourish_fn; + + if ( !isdefined( level._melee_weapons ) ) + level._melee_weapons = []; + + level._melee_weapons[level._melee_weapons.size] = melee_weapon; +} + +player_can_see_weapon_prompt( weapon_name ) +{ + if ( is_true( level._allow_melee_weapon_switching ) ) + return true; + + if ( isdefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) ) + return false; + + return true; +} + +spectator_respawn_all() +{ + for ( i = 0; i < level._melee_weapons.size; i++ ) + self spectator_respawn( level._melee_weapons[i].wallbuy_targetname, level._melee_weapons[i].weapon_name ); +} + +spectator_respawn( wallbuy_targetname, weapon_name ) +{ + melee_triggers = getentarray( wallbuy_targetname, "targetname" ); + players = get_players(); + + for ( i = 0; i < melee_triggers.size; i++ ) + { + melee_triggers[i] setvisibletoall(); + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + for ( j = 0; j < players.size; j++ ) + { + if ( !players[j] player_can_see_weapon_prompt( weapon_name ) ) + melee_triggers[i] setinvisibletoplayer( players[j] ); + } + } + } +} + +trigger_hide_all() +{ + for ( i = 0; i < level._melee_weapons.size; i++ ) + self trigger_hide( level._melee_weapons[i].wallbuy_targetname ); +} + +trigger_hide( wallbuy_targetname ) +{ + melee_triggers = getentarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_triggers.size; i++ ) + melee_triggers[i] setinvisibletoplayer( self ); +} + +has_any_ballistic_knife() +{ + if ( self hasweapon( "knife_ballistic_zm" ) ) + return true; + + if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) + return true; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) ) + return true; + + if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) + return true; + } + + return false; +} + +has_upgraded_ballistic_knife() +{ + if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) + return true; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) + return true; + } + + return false; +} + +give_ballistic_knife( weapon_string, upgraded ) +{ + current_melee_weapon = self get_player_melee_weapon(); + + if ( isdefined( current_melee_weapon ) ) + { + if ( upgraded && isdefined( level.ballistic_upgraded_weapon_name ) && isdefined( level.ballistic_upgraded_weapon_name[current_melee_weapon] ) ) + weapon_string = level.ballistic_upgraded_weapon_name[current_melee_weapon]; + + if ( !upgraded && isdefined( level.ballistic_weapon_name ) && isdefined( level.ballistic_weapon_name[current_melee_weapon] ) ) + weapon_string = level.ballistic_weapon_name[current_melee_weapon]; + } + + return weapon_string; +} + +change_melee_weapon( weapon_name, current_weapon ) +{ + current_melee_weapon = self get_player_melee_weapon(); + + if ( isdefined( current_melee_weapon ) && current_melee_weapon != weapon_name ) + { + self takeweapon( current_melee_weapon ); + unacquire_weapon_toggle( current_melee_weapon ); + } + + self set_player_melee_weapon( weapon_name ); + had_ballistic = 0; + had_ballistic_upgraded = 0; + ballistic_was_primary = 0; + primaryweapons = self getweaponslistprimaries(); + + for ( i = 0; i < primaryweapons.size; i++ ) + { + primary_weapon = primaryweapons[i]; + + if ( issubstr( primary_weapon, "knife_ballistic_" ) ) + { + had_ballistic = 1; + + if ( primary_weapon == current_weapon ) + ballistic_was_primary = 1; + + self notify( "zmb_lost_knife" ); + self takeweapon( primary_weapon ); + unacquire_weapon_toggle( primary_weapon ); + + if ( issubstr( primary_weapon, "upgraded" ) ) + had_ballistic_upgraded = 1; + } + } + + if ( had_ballistic ) + { + if ( had_ballistic_upgraded ) + { + new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name]; + + if ( ballistic_was_primary ) + current_weapon = new_ballistic; + + self giveweapon( new_ballistic, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) ); + } + else + { + new_ballistic = level.ballistic_weapon_name[weapon_name]; + + if ( ballistic_was_primary ) + current_weapon = new_ballistic; + + self giveweapon( new_ballistic, 0 ); + } + } + + return current_weapon; +} + +melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) +{ + self.first_time_triggered = 0; + + if ( isdefined( self.stub ) ) + { + self endon( "kill_trigger" ); + + if ( isdefined( self.stub.first_time_triggered ) ) + self.first_time_triggered = self.stub.first_time_triggered; + + weapon_name = self.stub.weapon_name; + cost = self.stub.cost; + flourish_fn = self.stub.flourish_fn; + vo_dialog_id = self.stub.vo_dialog_id; + flourish_weapon_name = self.stub.flourish_weapon_name; + ballistic_weapon_name = self.stub.ballistic_weapon_name; + ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name; + players = getplayers(); + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] player_can_see_weapon_prompt( weapon_name ) ) + self setinvisibletoplayer( players[i] ); + } + } + } + + for (;;) + { + self waittill( "trigger", player ); + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + if ( player in_revive_trigger() ) + { + wait 0.1; + continue; + } + + if ( player isthrowinggrenade() ) + { + wait 0.1; + continue; + } + + if ( player.is_drinking > 0 ) + { + wait 0.1; + continue; + } + + if ( player hasweapon( weapon_name ) || player has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( player isswitchingweapons() ) + { + wait 0.1; + continue; + } + + current_weapon = player getcurrentweapon(); + + if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) || player has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission ) + { + wait 0.1; + continue; + } + + player_has_weapon = player hasweapon( weapon_name ); + + if ( !player_has_weapon ) + { + cost = self.stub.cost; + + if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) + cost = int( cost / 2 ); + + if ( player.score >= cost ) + { + if ( self.first_time_triggered == 0 ) + { + model = getent( self.target, "targetname" ); + + if ( isdefined( model ) ) + model thread melee_weapon_show( player ); + else if ( isdefined( self.clientfieldname ) ) + level setclientfield( self.clientfieldname, 1 ); + + self.first_time_triggered = 1; + + if ( isdefined( self.stub ) ) + self.stub.first_time_triggered = 1; + } + + player maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 ); + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" ); + player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self ); + } + else + { + play_sound_on_ent( "no_purchase" ); + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 ); + } + + continue; + } + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + self setinvisibletoplayer( player ); + } +} + +melee_weapon_show( player ) +{ + player_angles = vectortoangles( player.origin - self.origin ); + player_yaw = player_angles[1]; + weapon_yaw = self.angles[1]; + yaw_diff = angleclamp180( player_yaw - weapon_yaw ); + + if ( yaw_diff > 0 ) + yaw = weapon_yaw - 90; + else + yaw = weapon_yaw + 90; + + self.og_origin = self.origin; + self.origin += anglestoforward( ( 0, yaw, 0 ) ) * 8; + wait 0.05; + self show(); + play_sound_at_pos( "weapon_show", self.origin, self ); + time = 1; + self moveto( self.og_origin, time ); +} + +give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger ) +{ + if ( isdefined( flourish_fn ) ) + self thread [[ flourish_fn ]](); + + gun = self do_melee_weapon_flourish_begin( flourish_weapon_name ); + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id ); + self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); + self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + return; + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + if ( isdefined( trigger ) ) + trigger setinvisibletoplayer( self ); + + self trigger_hide_all(); + } +} + +do_melee_weapon_flourish_begin( flourish_weapon_name ) +{ + self increment_is_drinking(); + self disable_player_move_states( 1 ); + gun = self getcurrentweapon(); + weapon = flourish_weapon_name; + self giveweapon( weapon ); + self switchtoweapon( weapon ); + return gun; +} + +do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) +{ + assert( !is_zombie_perk_bottle( gun ) ); + assert( gun != level.revive_tool ); + self enable_player_move_states(); + weapon = flourish_weapon_name; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + { + self takeweapon( weapon ); + self.lastactiveweapon = "none"; + return; + } + + self takeweapon( weapon ); + self giveweapon( weapon_name ); + gun = change_melee_weapon( weapon_name, gun ); + + if ( self hasweapon( "knife_zm" ) ) + self takeweapon( "knife_zm" ); + + if ( self is_multiple_drinking() ) + { + self decrement_is_drinking(); + return; + } + else if ( gun == "knife_zm" ) + { + self switchtoweapon( weapon_name ); + self decrement_is_drinking(); + return; + } + else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) + self switchtoweapon( gun ); + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + } + + self waittill( "weapon_change_complete" ); + + if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) ) + self decrement_is_drinking(); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_mgturret.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_mgturret.gsc new file mode 100644 index 0000000..c44750a --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_mgturret.gsc @@ -0,0 +1,291 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; + +main() +{ + if ( getdvar( _hash_7C9A91DF ) == "" ) + setdvar( "mgTurret", "off" ); + + level.magic_distance = 24; + turretinfos = getentarray( "turretInfo", "targetname" ); + + for ( index = 0; index < turretinfos.size; index++ ) + turretinfos[index] delete(); +} + +set_difficulty( difficulty ) +{ + init_turret_difficulty_settings(); + turrets = getentarray( "misc_turret", "classname" ); + + for ( index = 0; index < turrets.size; index++ ) + { + if ( isdefined( turrets[index].script_skilloverride ) ) + { + switch ( turrets[index].script_skilloverride ) + { + case "easy": + difficulty = "easy"; + break; + case "medium": + difficulty = "medium"; + break; + case "hard": + difficulty = "hard"; + break; + case "fu": + difficulty = "fu"; + break; + default: + continue; + } + } + + turret_set_difficulty( turrets[index], difficulty ); + } +} + +init_turret_difficulty_settings() +{ + level.mgturretsettings["easy"]["convergenceTime"] = 2.5; + level.mgturretsettings["easy"]["suppressionTime"] = 3.0; + level.mgturretsettings["easy"]["accuracy"] = 0.38; + level.mgturretsettings["easy"]["aiSpread"] = 2; + level.mgturretsettings["easy"]["playerSpread"] = 0.5; + level.mgturretsettings["medium"]["convergenceTime"] = 1.5; + level.mgturretsettings["medium"]["suppressionTime"] = 3.0; + level.mgturretsettings["medium"]["accuracy"] = 0.38; + level.mgturretsettings["medium"]["aiSpread"] = 2; + level.mgturretsettings["medium"]["playerSpread"] = 0.5; + level.mgturretsettings["hard"]["convergenceTime"] = 0.8; + level.mgturretsettings["hard"]["suppressionTime"] = 3.0; + level.mgturretsettings["hard"]["accuracy"] = 0.38; + level.mgturretsettings["hard"]["aiSpread"] = 2; + level.mgturretsettings["hard"]["playerSpread"] = 0.5; + level.mgturretsettings["fu"]["convergenceTime"] = 0.4; + level.mgturretsettings["fu"]["suppressionTime"] = 3.0; + level.mgturretsettings["fu"]["accuracy"] = 0.38; + level.mgturretsettings["fu"]["aiSpread"] = 2; + level.mgturretsettings["fu"]["playerSpread"] = 0.5; +} + +turret_set_difficulty( turret, difficulty ) +{ + turret.convergencetime = level.mgturretsettings[difficulty]["convergenceTime"]; + turret.suppressiontime = level.mgturretsettings[difficulty]["suppressionTime"]; + turret.accuracy = level.mgturretsettings[difficulty]["accuracy"]; + turret.aispread = level.mgturretsettings[difficulty]["aiSpread"]; + turret.playerspread = level.mgturretsettings[difficulty]["playerSpread"]; +} + +turret_suppression_fire( targets ) +{ + self endon( "death" ); + self endon( "stop_suppression_fire" ); + + if ( !isdefined( self.suppresionfire ) ) + self.suppresionfire = 1; + + for (;;) + { + while ( self.suppresionfire ) + { + self settargetentity( targets[randomint( targets.size )] ); + wait( 2 + randomfloat( 2 ) ); + } + + self cleartargetentity(); + + while ( !self.suppresionfire ) + wait 1; + } +} + +burst_fire_settings( setting ) +{ + if ( setting == "delay" ) + return 0.2; + else if ( setting == "delay_range" ) + return 0.5; + else if ( setting == "burst" ) + return 0.5; + else if ( setting == "burst_range" ) + return 4; +} + +burst_fire( turret, manual_target ) +{ + turret endon( "death" ); + turret endon( "stopfiring" ); + self endon( "stop_using_built_in_burst_fire" ); + + if ( isdefined( turret.script_delay_min ) ) + turret_delay = turret.script_delay_min; + else + turret_delay = burst_fire_settings( "delay" ); + + if ( isdefined( turret.script_delay_max ) ) + turret_delay_range = turret.script_delay_max - turret_delay; + else + turret_delay_range = burst_fire_settings( "delay_range" ); + + if ( isdefined( turret.script_burst_min ) ) + turret_burst = turret.script_burst_min; + else + turret_burst = burst_fire_settings( "burst" ); + + if ( isdefined( turret.script_burst_max ) ) + turret_burst_range = turret.script_burst_max - turret_burst; + else + turret_burst_range = burst_fire_settings( "burst_range" ); + + while ( true ) + { + turret startfiring(); + + if ( isdefined( manual_target ) ) + turret thread random_spread( manual_target ); + + turret do_shoot(); + wait( turret_burst + randomfloat( turret_burst_range ) ); + turret stopshootturret(); + turret stopfiring(); + wait( turret_delay + randomfloat( turret_delay_range ) ); + } +} + +burst_fire_unmanned() +{ + self notify( "stop_burst_fire_unmanned" ); + self endon( "stop_burst_fire_unmanned" ); + self endon( "death" ); + self endon( "remote_start" ); + level endon( "game_ended" ); + + if ( isdefined( self.controlled ) && self.controlled ) + return; + + if ( isdefined( self.script_delay_min ) ) + turret_delay = self.script_delay_min; + else + turret_delay = burst_fire_settings( "delay" ); + + if ( isdefined( self.script_delay_max ) ) + turret_delay_range = self.script_delay_max - turret_delay; + else + turret_delay_range = burst_fire_settings( "delay_range" ); + + if ( isdefined( self.script_burst_min ) ) + turret_burst = self.script_burst_min; + else + turret_burst = burst_fire_settings( "burst" ); + + if ( isdefined( self.script_burst_max ) ) + turret_burst_range = self.script_burst_max - turret_burst; + else + turret_burst_range = burst_fire_settings( "burst_range" ); + + pauseuntiltime = gettime(); + turretstate = "start"; + self.script_shooting = 0; + + for (;;) + { + if ( isdefined( self.manual_targets ) ) + { + self cleartargetentity(); + self settargetentity( self.manual_targets[randomint( self.manual_targets.size )] ); + } + + duration = ( pauseuntiltime - gettime() ) * 0.001; + + if ( self isfiringturret() && duration <= 0 ) + { + if ( turretstate != "fire" ) + { + turretstate = "fire"; + self playsound( "mpl_turret_alert" ); + self thread do_shoot(); + self.script_shooting = 1; + } + + duration = turret_burst + randomfloat( turret_burst_range ); + self thread turret_timer( duration ); + + self waittill( "turretstatechange" ); + + self.script_shooting = 0; + duration = turret_delay + randomfloat( turret_delay_range ); + pauseuntiltime = gettime() + int( duration * 1000 ); + continue; + } + + if ( turretstate != "aim" ) + turretstate = "aim"; + + self thread turret_timer( duration ); + + self waittill( "turretstatechange" ); + } +} + +avoid_synchronization( time ) +{ + if ( !isdefined( level._zm_mgturret_firing ) ) + level._zm_mgturret_firing = 0; + + level._zm_mgturret_firing++; + wait( time ); + level._zm_mgturret_firing--; +} + +do_shoot() +{ + self endon( "death" ); + self endon( "turretstatechange" ); + + for (;;) + { + while ( is_true( level._zm_mgturret_firing ) ) + wait 0.1; + + thread avoid_synchronization( 0.1 ); + self shootturret(); + wait 0.112; + } +} + +turret_timer( duration ) +{ + if ( duration <= 0 ) + return; + + self endon( "turretstatechange" ); + wait( duration ); + + if ( isdefined( self ) ) + self notify( "turretstatechange" ); +} + +random_spread( ent ) +{ + self endon( "death" ); + self notify( "stop random_spread" ); + self endon( "stop random_spread" ); + self endon( "stopfiring" ); + self settargetentity( ent ); + self.manual_target = ent; + + while ( true ) + { + if ( isplayer( ent ) ) + ent.origin = self.manual_target getorigin(); + else + ent.origin = self.manual_target.origin; + + ent.origin += ( 20 - randomfloat( 40 ), 20 - randomfloat( 40 ), 20 - randomfloat( 60 ) ); + wait 0.2; + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_net.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_net.gsc new file mode 100644 index 0000000..a0a4bb4 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_net.gsc @@ -0,0 +1,93 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; + +network_choke_init( id, max ) +{ + if ( !isdefined( level.zombie_network_choke_ids_max ) ) + { + level.zombie_network_choke_ids_max = []; + level.zombie_network_choke_ids_count = []; + } + + level.zombie_network_choke_ids_max[id] = max; + level.zombie_network_choke_ids_count[id] = 0; + level thread network_choke_thread( id ); +} + +network_choke_thread( id ) +{ + while ( true ) + { + wait_network_frame(); + wait_network_frame(); + level.zombie_network_choke_ids_count[id] = 0; + } +} + +network_choke_safe( id ) +{ + return level.zombie_network_choke_ids_count[id] < level.zombie_network_choke_ids_max[id]; +} + +network_choke_action( id, choke_action, arg1, arg2, arg3 ) +{ + assert( isdefined( level.zombie_network_choke_ids_max[id] ), "Network Choke: " + id + " undefined" ); + + while ( !network_choke_safe( id ) ) + wait 0.05; + + level.zombie_network_choke_ids_count[id]++; + + if ( !isdefined( arg1 ) ) + return [[ choke_action ]](); + + if ( !isdefined( arg2 ) ) + return [[ choke_action ]]( arg1 ); + + if ( !isdefined( arg3 ) ) + return [[ choke_action ]]( arg1, arg2 ); + + return [[ choke_action ]]( arg1, arg2, arg3 ); +} + +network_entity_valid( entity ) +{ + if ( !isdefined( entity ) ) + return false; + + return true; +} + +network_safe_init( id, max ) +{ + if ( !isdefined( level.zombie_network_choke_ids_max ) || !isdefined( level.zombie_network_choke_ids_max[id] ) ) + network_choke_init( id, max ); + + assert( max == level.zombie_network_choke_ids_max[id] ); +} + +_network_safe_spawn( classname, origin ) +{ + return spawn( classname, origin ); +} + +network_safe_spawn( id, max, classname, origin ) +{ + network_safe_init( id, max ); + return network_choke_action( id, ::_network_safe_spawn, classname, origin ); +} + +_network_safe_play_fx_on_tag( fx, entity, tag ) +{ + if ( network_entity_valid( entity ) ) + playfxontag( fx, entity, tag ); +} + +network_safe_play_fx_on_tag( id, max, fx, entity, tag ) +{ + network_safe_init( id, max ); + network_choke_action( id, ::_network_safe_play_fx_on_tag, fx, entity, tag ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_perk_electric_cherry.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_perk_electric_cherry.gsc new file mode 100644 index 0000000..d99fe6a --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_perk_electric_cherry.gsc @@ -0,0 +1,395 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_score; +#include maps\mp\animscripts\shared; +#include maps\mp\zombies\_zm_ai_basic; + +enable_electric_cherry_perk_for_level() +{ + maps\mp\zombies\_zm_perks::register_perk_basic_info( "specialty_grenadepulldeath", "electric_cherry", 2000, &"ZM_PRISON_PERK_CHERRY", "zombie_perk_bottle_cherry" ); + maps\mp\zombies\_zm_perks::register_perk_precache_func( "specialty_grenadepulldeath", ::electic_cherry_precache ); + maps\mp\zombies\_zm_perks::register_perk_clientfields( "specialty_grenadepulldeath", ::electric_cherry_register_clientfield, ::electric_cherry_set_clientfield ); + maps\mp\zombies\_zm_perks::register_perk_threads( "specialty_grenadepulldeath", ::electric_cherry_reload_attack, ::electric_cherry_perk_lost ); + maps\mp\zombies\_zm_perks::register_perk_machine( "specialty_grenadepulldeath", ::electric_cherry_perk_machine_setup, ::electric_cherry_perk_machine_think ); + maps\mp\zombies\_zm_perks::register_perk_host_migration_func( "specialty_grenadepulldeath", ::electric_cherry_host_migration_func ); + + if ( isdefined( level.custom_electric_cherry_perk_threads ) && level.custom_electric_cherry_perk_threads ) + level thread [[ level.custom_electric_cherry_perk_threads ]](); +} + +init_electric_cherry() +{ + level.custom_laststand_func = ::electric_cherry_laststand; + set_zombie_var( "tesla_head_gib_chance", 50 ); + registerclientfield( "allplayers", "electric_cherry_reload_fx", 9000, 2, "int" ); +} + +electic_cherry_precache() +{ + precacheitem( "zombie_perk_bottle_cherry" ); + precacheshader( "specialty_fastreload_zombies" ); + precachemodel( "p6_zm_vending_electric_cherry_off" ); + precachemodel( "p6_zm_vending_electric_cherry_on" ); + precachestring( &"ZM_PRISON_PERK_CHERRY" ); + level._effect["electriccherry"] = loadfx( "misc/fx_zombie_cola_on" ); + level._effect["electric_cherry_explode"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_down" ); + level._effect["electric_cherry_reload_small"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_sm" ); + level._effect["electric_cherry_reload_medium"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_player" ); + level._effect["electric_cherry_reload_large"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_lg" ); + level._effect["tesla_shock"] = loadfx( "maps/zombie/fx_zombie_tesla_shock" ); + level._effect["tesla_shock_secondary"] = loadfx( "maps/zombie/fx_zombie_tesla_shock_secondary" ); +} + +electric_cherry_register_clientfield() +{ + registerclientfield( "toplayer", "perk_electric_cherry", 9000, 1, "int" ); +} + +electric_cherry_set_clientfield( state ) +{ + self setclientfieldtoplayer( "perk_electric_cherry", state ); +} + +electric_cherry_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collision ) +{ + use_trigger.script_sound = "mus_perks_cherry_jingle"; + use_trigger.script_string = "electric_cherry_perk"; + use_trigger.script_label = "mus_perks_cherry_sting"; + use_trigger.target = "vending_electriccherry"; + perk_machine.script_string = "electriccherry_perk"; + perk_machine.targetname = "vendingelectric_cherry"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "electriccherry_perk"; +} + +electric_cherry_perk_machine_think() +{ + init_electric_cherry(); + + while ( true ) + { + machine = getentarray( "vendingelectric_cherry", "targetname" ); + machine_triggers = getentarray( "vending_electriccherry", "target" ); + + for ( i = 0; i < machine.size; i++ ) + machine[i] setmodel( "p6_zm_vending_electric_cherry_off" ); + + level thread do_initial_power_off_callback( machine, "electriccherry" ); + array_thread( machine_triggers, maps\mp\zombies\_zm_perks::set_power_on, 0 ); + + level waittill( "electric_cherry_on" ); + + for ( i = 0; i < machine.size; i++ ) + { + machine[i] setmodel( "p6_zm_vending_electric_cherry_on" ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] thread perk_fx( "electriccherry" ); + machine[i] thread play_loop_on_machine(); + } + + level notify( "specialty_grenadepulldeath_power_on" ); + array_thread( machine_triggers, maps\mp\zombies\_zm_perks::set_power_on, 1 ); + + level waittill( "electric_cherry_off" ); + + array_thread( machine, maps\mp\zombies\_zm_perks::turn_perk_off ); + } +} + +electric_cherry_host_migration_func() +{ + a_electric_cherry_perk_machines = getentarray( "vending_electriccherry", "targetname" ); + + foreach ( perk_machine in a_electric_cherry_perk_machines ) + { + if ( isdefined( perk_machine.model ) && perk_machine.model == "p6_zm_vending_electric_cherry_on" ) + { + perk_machine perk_fx( undefined, 1 ); + perk_machine thread perk_fx( "electriccherry" ); + } + } +} + +electric_cherry_laststand() +{ + visionsetlaststand( "zombie_last_stand", 1 ); + + if ( isdefined( self ) ) + { + playfx( level._effect["electric_cherry_explode"], self.origin ); + self playsound( "zmb_cherry_explode" ); + self notify( "electric_cherry_start" ); + wait 0.05; + a_zombies = get_round_enemy_array(); + a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, 500 ); + + for ( i = 0; i < a_zombies.size; i++ ) + { + if ( isalive( self ) ) + { + if ( a_zombies[i].health <= 1000 ) + { + a_zombies[i] thread electric_cherry_death_fx(); + + if ( isdefined( self.cherry_kills ) ) + self.cherry_kills++; + + self maps\mp\zombies\_zm_score::add_to_player_score( 40 ); + } + else + { + a_zombies[i] thread electric_cherry_stun(); + a_zombies[i] thread electric_cherry_shock_fx(); + } + + wait 0.1; + a_zombies[i] dodamage( 1000, self.origin, self, self, "none" ); + } + } + + self notify( "electric_cherry_end" ); + } +} + +electric_cherry_death_fx() +{ + self endon( "death" ); + tag = "J_SpineUpper"; + fx = "tesla_shock"; + + if ( self.isdog ) + tag = "J_Spine1"; + + self playsound( "zmb_elec_jib_zombie" ); + network_safe_play_fx_on_tag( "tesla_death_fx", 2, level._effect[fx], self, tag ); + + if ( isdefined( self.tesla_head_gib_func ) && !self.head_gibbed ) + [[ self.tesla_head_gib_func ]](); +} + +electric_cherry_shock_fx() +{ + self endon( "death" ); + tag = "J_SpineUpper"; + fx = "tesla_shock_secondary"; + + if ( self.isdog ) + tag = "J_Spine1"; + + self playsound( "zmb_elec_jib_zombie" ); + network_safe_play_fx_on_tag( "tesla_shock_fx", 2, level._effect[fx], self, tag ); +} + +electric_cherry_stun() +{ + self endon( "death" ); + self notify( "stun_zombie" ); + self endon( "stun_zombie" ); + + if ( self.health <= 0 ) + { +/# + iprintln( "trying to stun a dead zombie" ); +#/ + return; + } + + if ( self.ai_state != "find_flesh" ) + return; + + self.forcemovementscriptstate = 1; + self.ignoreall = 1; + + for ( i = 0; i < 2; i++ ) + { + self animscripted( self.origin, self.angles, "zm_afterlife_stun" ); + self maps\mp\animscripts\shared::donotetracks( "stunned" ); + } + + self.forcemovementscriptstate = 0; + self.ignoreall = 0; + self setgoalpos( self.origin ); + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); +} + +electric_cherry_reload_attack() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "stop_electric_cherry_reload_attack" ); + self.wait_on_reload = []; + self.consecutive_electric_cherry_attacks = 0; + + while ( true ) + { + self waittill( "reload_start" ); + + str_current_weapon = self getcurrentweapon(); + + if ( isinarray( self.wait_on_reload, str_current_weapon ) ) + continue; + + self.wait_on_reload[self.wait_on_reload.size] = str_current_weapon; + self.consecutive_electric_cherry_attacks++; + n_clip_current = self getweaponammoclip( str_current_weapon ); + n_clip_max = weaponclipsize( str_current_weapon ); + n_fraction = n_clip_current / n_clip_max; + perk_radius = linear_map( n_fraction, 1.0, 0.0, 32, 128 ); + perk_dmg = linear_map( n_fraction, 1.0, 0.0, 1, 1045 ); + self thread check_for_reload_complete( str_current_weapon ); + + if ( isdefined( self ) ) + { + switch ( self.consecutive_electric_cherry_attacks ) + { + case 1: + case 0: + n_zombie_limit = undefined; + break; + case 2: + n_zombie_limit = 8; + break; + case 3: + n_zombie_limit = 4; + break; + case 4: + n_zombie_limit = 2; + break; + default: + n_zombie_limit = 0; + } + + self thread electric_cherry_cooldown_timer( str_current_weapon ); + + if ( isdefined( n_zombie_limit ) && n_zombie_limit == 0 ) + continue; + + self thread electric_cherry_reload_fx( n_fraction ); + self notify( "electric_cherry_start" ); + self playsound( "zmb_cherry_explode" ); + a_zombies = get_round_enemy_array(); + a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, perk_radius ); + n_zombies_hit = 0; + + for ( i = 0; i < a_zombies.size; i++ ) + { + if ( isalive( self ) ) + { + if ( isdefined( n_zombie_limit ) ) + { + if ( n_zombies_hit < n_zombie_limit ) + n_zombies_hit++; + else + break; + } + + if ( a_zombies[i].health <= perk_dmg ) + { + a_zombies[i] thread electric_cherry_death_fx(); + + if ( isdefined( self.cherry_kills ) ) + self.cherry_kills++; + + self maps\mp\zombies\_zm_score::add_to_player_score( 40 ); + } + else + { + if ( !isdefined( a_zombies[i].is_brutus ) ) + a_zombies[i] thread electric_cherry_stun(); + + a_zombies[i] thread electric_cherry_shock_fx(); + } + + wait 0.1; + a_zombies[i] dodamage( perk_dmg, self.origin, self, self, "none" ); + } + } + + self notify( "electric_cherry_end" ); + } + } +} + +electric_cherry_cooldown_timer( str_current_weapon ) +{ + self notify( "electric_cherry_cooldown_started" ); + self endon( "electric_cherry_cooldown_started" ); + self endon( "death" ); + self endon( "disconnect" ); + n_reload_time = weaponreloadtime( str_current_weapon ); + + if ( self hasperk( "specialty_fastreload" ) ) + n_reload_time *= getdvarfloat( "perk_weapReloadMultiplier" ); + + n_cooldown_time = n_reload_time + 3; + wait( n_cooldown_time ); + self.consecutive_electric_cherry_attacks = 0; +} + +check_for_reload_complete( weapon ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "player_lost_weapon_" + weapon ); + self thread weapon_replaced_monitor( weapon ); + + while ( true ) + { + self waittill( "reload" ); + + str_current_weapon = self getcurrentweapon(); + + if ( str_current_weapon == weapon ) + { + arrayremovevalue( self.wait_on_reload, weapon ); + self notify( "weapon_reload_complete_" + weapon ); + break; + } + } +} + +weapon_replaced_monitor( weapon ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "weapon_reload_complete_" + weapon ); + + while ( true ) + { + self waittill( "weapon_change" ); + + primaryweapons = self getweaponslistprimaries(); + + if ( !isinarray( primaryweapons, weapon ) ) + { + self notify( "player_lost_weapon_" + weapon ); + arrayremovevalue( self.wait_on_reload, weapon ); + break; + } + } +} + +electric_cherry_reload_fx( n_fraction ) +{ + if ( n_fraction >= 0.67 ) + self setclientfield( "electric_cherry_reload_fx", 1 ); + else if ( n_fraction >= 0.33 && n_fraction < 0.67 ) + self setclientfield( "electric_cherry_reload_fx", 2 ); + else + self setclientfield( "electric_cherry_reload_fx", 3 ); + + wait 1.0; + self setclientfield( "electric_cherry_reload_fx", 0 ); +} + +electric_cherry_perk_lost() +{ + self notify( "stop_electric_cherry_reload_attack" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_perks.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_perks.gsc new file mode 100644 index 0000000..3adc500 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_perks.gsc @@ -0,0 +1,3763 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_power; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\_demo; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_chugabud; +#include maps\mp\_visionset_mgr; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm; + +init() +{ + level.additionalprimaryweapon_limit = 3; + level.perk_purchase_limit = 4; + + if ( !level.createfx_enabled ) + perks_register_clientfield(); + + if ( !level.enable_magic ) + return; + + initialize_custom_perk_arrays(); + perk_machine_spawn_init(); + vending_weapon_upgrade_trigger = []; + vending_triggers = getentarray( "zombie_vending", "targetname" ); + + for ( i = 0; i < vending_triggers.size; i++ ) + { + if ( isdefined( vending_triggers[i].script_noteworthy ) && vending_triggers[i].script_noteworthy == "specialty_weapupgrade" ) + { + vending_weapon_upgrade_trigger[vending_weapon_upgrade_trigger.size] = vending_triggers[i]; + arrayremovevalue( vending_triggers, vending_triggers[i] ); + } + } + + old_packs = getentarray( "zombie_vending_upgrade", "targetname" ); + + for ( i = 0; i < old_packs.size; i++ ) + vending_weapon_upgrade_trigger[vending_weapon_upgrade_trigger.size] = old_packs[i]; + + flag_init( "pack_machine_in_use" ); + + if ( vending_triggers.size < 1 ) + return; + + if ( vending_weapon_upgrade_trigger.size >= 1 ) + array_thread( vending_weapon_upgrade_trigger, ::vending_weapon_upgrade ); + + level.machine_assets = []; + + if ( !isdefined( level.custom_vending_precaching ) ) + level.custom_vending_precaching = ::default_vending_precaching; + + [[ level.custom_vending_precaching ]](); + + if ( !isdefined( level.packapunch_timeout ) ) + level.packapunch_timeout = 15; + + set_zombie_var( "zombie_perk_cost", 2000 ); + set_zombie_var( "zombie_perk_juggernaut_health", 160 ); + set_zombie_var( "zombie_perk_juggernaut_health_upgrade", 190 ); + array_thread( vending_triggers, ::vending_trigger_think ); + array_thread( vending_triggers, ::electric_perks_dialog ); + + if ( isdefined( level.zombiemode_using_doubletap_perk ) && level.zombiemode_using_doubletap_perk ) + level thread turn_doubletap_on(); + + if ( isdefined( level.zombiemode_using_marathon_perk ) && level.zombiemode_using_marathon_perk ) + level thread turn_marathon_on(); + + if ( isdefined( level.zombiemode_using_juggernaut_perk ) && level.zombiemode_using_juggernaut_perk ) + level thread turn_jugger_on(); + + if ( isdefined( level.zombiemode_using_revive_perk ) && level.zombiemode_using_revive_perk ) + level thread turn_revive_on(); + + if ( isdefined( level.zombiemode_using_sleightofhand_perk ) && level.zombiemode_using_sleightofhand_perk ) + level thread turn_sleight_on(); + + if ( isdefined( level.zombiemode_using_deadshot_perk ) && level.zombiemode_using_deadshot_perk ) + level thread turn_deadshot_on(); + + if ( isdefined( level.zombiemode_using_tombstone_perk ) && level.zombiemode_using_tombstone_perk ) + level thread turn_tombstone_on(); + + if ( isdefined( level.zombiemode_using_additionalprimaryweapon_perk ) && level.zombiemode_using_additionalprimaryweapon_perk ) + level thread turn_additionalprimaryweapon_on(); + + if ( isdefined( level.zombiemode_using_chugabud_perk ) && level.zombiemode_using_chugabud_perk ) + level thread turn_chugabud_on(); + + if ( level._custom_perks.size > 0 ) + { + a_keys = getarraykeys( level._custom_perks ); + + for ( i = 0; i < a_keys.size; i++ ) + { + if ( isdefined( level._custom_perks[a_keys[i]].perk_machine_thread ) ) + level thread [[ level._custom_perks[a_keys[i]].perk_machine_thread ]](); + } + } + + if ( isdefined( level._custom_turn_packapunch_on ) ) + level thread [[ level._custom_turn_packapunch_on ]](); + else + level thread turn_packapunch_on(); + + if ( isdefined( level.quantum_bomb_register_result_func ) ) + [[ level.quantum_bomb_register_result_func ]]( "give_nearest_perk", ::quantum_bomb_give_nearest_perk_result, 10, ::quantum_bomb_give_nearest_perk_validation ); + + level thread perk_hostmigration(); +} + +default_vending_precaching() +{ + if ( isdefined( level.zombiemode_using_pack_a_punch ) && level.zombiemode_using_pack_a_punch ) + { + precacheitem( "zombie_knuckle_crack" ); + precachemodel( "p6_anim_zm_buildable_pap" ); + precachemodel( "p6_anim_zm_buildable_pap_on" ); + precachestring( &"ZOMBIE_PERK_PACKAPUNCH" ); + precachestring( &"ZOMBIE_PERK_PACKAPUNCH_ATT" ); + level._effect["packapunch_fx"] = loadfx( "maps/zombie/fx_zombie_packapunch" ); + level.machine_assets["packapunch"] = spawnstruct(); + level.machine_assets["packapunch"].weapon = "zombie_knuckle_crack"; + level.machine_assets["packapunch"].off_model = "p6_anim_zm_buildable_pap"; + level.machine_assets["packapunch"].on_model = "p6_anim_zm_buildable_pap_on"; + } + + if ( isdefined( level.zombiemode_using_additionalprimaryweapon_perk ) && level.zombiemode_using_additionalprimaryweapon_perk ) + { + precacheitem( "zombie_perk_bottle_additionalprimaryweapon" ); + precacheshader( "specialty_additionalprimaryweapon_zombies" ); + precachemodel( "zombie_vending_three_gun" ); + precachemodel( "zombie_vending_three_gun_on" ); + precachestring( &"ZOMBIE_PERK_ADDITIONALWEAPONPERK" ); + level._effect["additionalprimaryweapon_light"] = loadfx( "misc/fx_zombie_cola_arsenal_on" ); + level.machine_assets["additionalprimaryweapon"] = spawnstruct(); + level.machine_assets["additionalprimaryweapon"].weapon = "zombie_perk_bottle_additionalprimaryweapon"; + level.machine_assets["additionalprimaryweapon"].off_model = "zombie_vending_three_gun"; + level.machine_assets["additionalprimaryweapon"].on_model = "zombie_vending_three_gun_on"; + } + + if ( isdefined( level.zombiemode_using_deadshot_perk ) && level.zombiemode_using_deadshot_perk ) + { + precacheitem( "zombie_perk_bottle_deadshot" ); + precacheshader( "specialty_ads_zombies" ); + precachemodel( "zombie_vending_ads" ); + precachemodel( "zombie_vending_ads_on" ); + precachestring( &"ZOMBIE_PERK_DEADSHOT" ); + level._effect["deadshot_light"] = loadfx( "misc/fx_zombie_cola_dtap_on" ); + level.machine_assets["deadshot"] = spawnstruct(); + level.machine_assets["deadshot"].weapon = "zombie_perk_bottle_deadshot"; + level.machine_assets["deadshot"].off_model = "zombie_vending_ads"; + level.machine_assets["deadshot"].on_model = "zombie_vending_ads_on"; + } + + if ( isdefined( level.zombiemode_using_doubletap_perk ) && level.zombiemode_using_doubletap_perk ) + { + precacheitem( "zombie_perk_bottle_doubletap" ); + precacheshader( "specialty_doubletap_zombies" ); + precachemodel( "zombie_vending_doubletap2" ); + precachemodel( "zombie_vending_doubletap2_on" ); + precachestring( &"ZOMBIE_PERK_DOUBLETAP" ); + level._effect["doubletap_light"] = loadfx( "misc/fx_zombie_cola_dtap_on" ); + level.machine_assets["doubletap"] = spawnstruct(); + level.machine_assets["doubletap"].weapon = "zombie_perk_bottle_doubletap"; + level.machine_assets["doubletap"].off_model = "zombie_vending_doubletap2"; + level.machine_assets["doubletap"].on_model = "zombie_vending_doubletap2_on"; + } + + if ( isdefined( level.zombiemode_using_juggernaut_perk ) && level.zombiemode_using_juggernaut_perk ) + { + precacheitem( "zombie_perk_bottle_jugg" ); + precacheshader( "specialty_juggernaut_zombies" ); + precachemodel( "zombie_vending_jugg" ); + precachemodel( "zombie_vending_jugg_on" ); + precachestring( &"ZOMBIE_PERK_JUGGERNAUT" ); + level._effect["jugger_light"] = loadfx( "misc/fx_zombie_cola_jugg_on" ); + level.machine_assets["juggernog"] = spawnstruct(); + level.machine_assets["juggernog"].weapon = "zombie_perk_bottle_jugg"; + level.machine_assets["juggernog"].off_model = "zombie_vending_jugg"; + level.machine_assets["juggernog"].on_model = "zombie_vending_jugg_on"; + } + + if ( isdefined( level.zombiemode_using_marathon_perk ) && level.zombiemode_using_marathon_perk ) + { + precacheitem( "zombie_perk_bottle_marathon" ); + precacheshader( "specialty_marathon_zombies" ); + precachemodel( "zombie_vending_marathon" ); + precachemodel( "zombie_vending_marathon_on" ); + precachestring( &"ZOMBIE_PERK_MARATHON" ); + level._effect["marathon_light"] = loadfx( "maps/zombie/fx_zmb_cola_staminup_on" ); + level.machine_assets["marathon"] = spawnstruct(); + level.machine_assets["marathon"].weapon = "zombie_perk_bottle_marathon"; + level.machine_assets["marathon"].off_model = "zombie_vending_marathon"; + level.machine_assets["marathon"].on_model = "zombie_vending_marathon_on"; + } + + if ( isdefined( level.zombiemode_using_revive_perk ) && level.zombiemode_using_revive_perk ) + { + precacheitem( "zombie_perk_bottle_revive" ); + precacheshader( "specialty_quickrevive_zombies" ); + precachemodel( "zombie_vending_revive" ); + precachemodel( "zombie_vending_revive_on" ); + precachestring( &"ZOMBIE_PERK_QUICKREVIVE" ); + level._effect["revive_light"] = loadfx( "misc/fx_zombie_cola_revive_on" ); + level._effect["revive_light_flicker"] = loadfx( "maps/zombie/fx_zmb_cola_revive_flicker" ); + level.machine_assets["revive"] = spawnstruct(); + level.machine_assets["revive"].weapon = "zombie_perk_bottle_revive"; + level.machine_assets["revive"].off_model = "zombie_vending_revive"; + level.machine_assets["revive"].on_model = "zombie_vending_revive_on"; + } + + if ( isdefined( level.zombiemode_using_sleightofhand_perk ) && level.zombiemode_using_sleightofhand_perk ) + { + precacheitem( "zombie_perk_bottle_sleight" ); + precacheshader( "specialty_fastreload_zombies" ); + precachemodel( "zombie_vending_sleight" ); + precachemodel( "zombie_vending_sleight_on" ); + precachestring( &"ZOMBIE_PERK_FASTRELOAD" ); + level._effect["sleight_light"] = loadfx( "misc/fx_zombie_cola_on" ); + level.machine_assets["speedcola"] = spawnstruct(); + level.machine_assets["speedcola"].weapon = "zombie_perk_bottle_sleight"; + level.machine_assets["speedcola"].off_model = "zombie_vending_sleight"; + level.machine_assets["speedcola"].on_model = "zombie_vending_sleight_on"; + } + + if ( isdefined( level.zombiemode_using_tombstone_perk ) && level.zombiemode_using_tombstone_perk ) + { + precacheitem( "zombie_perk_bottle_tombstone" ); + precacheshader( "specialty_tombstone_zombies" ); + precachemodel( "zombie_vending_tombstone" ); + precachemodel( "zombie_vending_tombstone_on" ); + precachemodel( "ch_tombstone1" ); + precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); + level._effect["tombstone_light"] = loadfx( "misc/fx_zombie_cola_on" ); + level.machine_assets["tombstone"] = spawnstruct(); + level.machine_assets["tombstone"].weapon = "zombie_perk_bottle_tombstone"; + level.machine_assets["tombstone"].off_model = "zombie_vending_tombstone"; + level.machine_assets["tombstone"].on_model = "zombie_vending_tombstone_on"; + } + + if ( isdefined( level.zombiemode_using_chugabud_perk ) && level.zombiemode_using_chugabud_perk ) + { + precacheitem( "zombie_perk_bottle_whoswho" ); + precacheshader( "specialty_quickrevive_zombies" ); + precachemodel( "p6_zm_vending_chugabud" ); + precachemodel( "p6_zm_vending_chugabud_on" ); + precachemodel( "ch_tombstone1" ); + precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); + level._effect["tombstone_light"] = loadfx( "misc/fx_zombie_cola_on" ); + level.machine_assets["whoswho"] = spawnstruct(); + level.machine_assets["whoswho"].weapon = "zombie_perk_bottle_whoswho"; + level.machine_assets["whoswho"].off_model = "p6_zm_vending_chugabud"; + level.machine_assets["whoswho"].on_model = "p6_zm_vending_chugabud_on"; + } + + if ( level._custom_perks.size > 0 ) + { + a_keys = getarraykeys( level._custom_perks ); + + for ( i = 0; i < a_keys.size; i++ ) + { + if ( isdefined( level._custom_perks[a_keys[i]].precache_func ) ) + level [[ level._custom_perks[a_keys[i]].precache_func ]](); + } + } +} + +pap_weapon_move_in( trigger, origin_offset, angles_offset ) +{ + level endon( "Pack_A_Punch_off" ); + trigger endon( "pap_player_disconnected" ); + trigger.worldgun rotateto( self.angles + angles_offset + vectorscale( ( 0, 1, 0 ), 90.0 ), 0.35, 0, 0 ); + offsetdw = vectorscale( ( 1, 1, 1 ), 3.0 ); + + if ( isdefined( trigger.worldgun.worldgundw ) ) + trigger.worldgun.worldgundw rotateto( self.angles + angles_offset + vectorscale( ( 0, 1, 0 ), 90.0 ), 0.35, 0, 0 ); + + wait 0.5; + trigger.worldgun moveto( self.origin + origin_offset, 0.5, 0, 0 ); + + if ( isdefined( trigger.worldgun.worldgundw ) ) + trigger.worldgun.worldgundw moveto( self.origin + origin_offset + offsetdw, 0.5, 0, 0 ); +} + +pap_weapon_move_out( trigger, origin_offset, interact_offset ) +{ + level endon( "Pack_A_Punch_off" ); + trigger endon( "pap_player_disconnected" ); + offsetdw = vectorscale( ( 1, 1, 1 ), 3.0 ); + + if ( !isdefined( trigger.worldgun ) ) + return; + + trigger.worldgun moveto( self.origin + interact_offset, 0.5, 0, 0 ); + + if ( isdefined( trigger.worldgun.worldgundw ) ) + trigger.worldgun.worldgundw moveto( self.origin + interact_offset + offsetdw, 0.5, 0, 0 ); + + wait 0.5; + + if ( !isdefined( trigger.worldgun ) ) + return; + + trigger.worldgun moveto( self.origin + origin_offset, level.packapunch_timeout, 0, 0 ); + + if ( isdefined( trigger.worldgun.worldgundw ) ) + trigger.worldgun.worldgundw moveto( self.origin + origin_offset + offsetdw, level.packapunch_timeout, 0, 0 ); +} + +fx_ent_failsafe() +{ + wait 25; + self delete(); +} + +third_person_weapon_upgrade( current_weapon, upgrade_weapon, packa_rollers, perk_machine, trigger ) +{ + level endon( "Pack_A_Punch_off" ); + trigger endon( "pap_player_disconnected" ); + rel_entity = trigger.perk_machine; + origin_offset = ( 0, 0, 0 ); + angles_offset = ( 0, 0, 0 ); + origin_base = self.origin; + angles_base = self.angles; + + if ( isdefined( rel_entity ) ) + { + if ( isdefined( level.pap_interaction_height ) ) + origin_offset = ( 0, 0, level.pap_interaction_height ); + else + origin_offset = vectorscale( ( 0, 0, 1 ), 35.0 ); + + angles_offset = vectorscale( ( 0, 1, 0 ), 90.0 ); + origin_base = rel_entity.origin; + angles_base = rel_entity.angles; + } + else + rel_entity = self; + + forward = anglestoforward( angles_base + angles_offset ); + interact_offset = origin_offset + forward * -25; + + if ( !isdefined( perk_machine.fx_ent ) ) + { + perk_machine.fx_ent = spawn( "script_model", origin_base + origin_offset + ( 0, 1, -34 ) ); + perk_machine.fx_ent.angles = angles_base + angles_offset; + perk_machine.fx_ent setmodel( "tag_origin" ); + perk_machine.fx_ent linkto( perk_machine ); + } + + if ( isdefined( level._effect["packapunch_fx"] ) ) + fx = playfxontag( level._effect["packapunch_fx"], perk_machine.fx_ent, "tag_origin" ); + + offsetdw = vectorscale( ( 1, 1, 1 ), 3.0 ); + weoptions = self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( current_weapon ); + trigger.worldgun = spawn_weapon_model( current_weapon, undefined, origin_base + interact_offset, self.angles, weoptions ); + worldgundw = undefined; + + if ( maps\mp\zombies\_zm_magicbox::weapon_is_dual_wield( current_weapon ) ) + worldgundw = spawn_weapon_model( current_weapon, maps\mp\zombies\_zm_magicbox::get_left_hand_weapon_model_name( current_weapon ), origin_base + interact_offset + offsetdw, self.angles, weoptions ); + + trigger.worldgun.worldgundw = worldgundw; + + if ( isdefined( level.custom_pap_move_in ) ) + perk_machine [[ level.custom_pap_move_in ]]( trigger, origin_offset, angles_offset, perk_machine ); + else + perk_machine pap_weapon_move_in( trigger, origin_offset, angles_offset ); + + self playsound( "zmb_perks_packa_upgrade" ); + + if ( isdefined( perk_machine.wait_flag ) ) + perk_machine.wait_flag rotateto( perk_machine.wait_flag.angles + vectorscale( ( 1, 0, 0 ), 179.0 ), 0.25, 0, 0 ); + + wait 0.35; + trigger.worldgun delete(); + + if ( isdefined( worldgundw ) ) + worldgundw delete(); + + wait 3; + + if ( isdefined( self ) ) + self playsound( "zmb_perks_packa_ready" ); + else + return; + + upoptions = self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( upgrade_weapon ); + trigger.current_weapon = current_weapon; + trigger.upgrade_name = upgrade_weapon; + trigger.worldgun = spawn_weapon_model( upgrade_weapon, undefined, origin_base + origin_offset, angles_base + angles_offset + vectorscale( ( 0, 1, 0 ), 90.0 ), upoptions ); + worldgundw = undefined; + + if ( maps\mp\zombies\_zm_magicbox::weapon_is_dual_wield( upgrade_weapon ) ) + worldgundw = spawn_weapon_model( upgrade_weapon, maps\mp\zombies\_zm_magicbox::get_left_hand_weapon_model_name( upgrade_weapon ), origin_base + origin_offset + offsetdw, angles_base + angles_offset + vectorscale( ( 0, 1, 0 ), 90.0 ), upoptions ); + + trigger.worldgun.worldgundw = worldgundw; + + if ( isdefined( perk_machine.wait_flag ) ) + perk_machine.wait_flag rotateto( perk_machine.wait_flag.angles - vectorscale( ( 1, 0, 0 ), 179.0 ), 0.25, 0, 0 ); + + if ( isdefined( level.custom_pap_move_out ) ) + rel_entity thread [[ level.custom_pap_move_out ]]( trigger, origin_offset, interact_offset ); + else + rel_entity thread pap_weapon_move_out( trigger, origin_offset, interact_offset ); + + return trigger.worldgun; +} + +can_pack_weapon( weaponname ) +{ + if ( "riotshield_zm" == weaponname ) + return false; + + if ( flag( "pack_machine_in_use" ) ) + return true; + + weaponname = self get_nonalternate_weapon( weaponname ); + + if ( !maps\mp\zombies\_zm_weapons::is_weapon_or_base_included( weaponname ) ) + return false; + + if ( !self maps\mp\zombies\_zm_weapons::can_upgrade_weapon( weaponname ) ) + return false; + + return true; +} + +player_use_can_pack_now() +{ + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission || self isthrowinggrenade() ) + return false; + + if ( !self can_buy_weapon() ) + return false; + + if ( self hacker_active() ) + return false; + + if ( !self can_pack_weapon( self getcurrentweapon() ) ) + return false; + + return true; +} + +vending_machine_trigger_think() +{ + self endon( "death" ); + self endon( "Pack_A_Punch_off" ); + + while ( true ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( self.pack_player ) && self.pack_player != players[i] || !players[i] player_use_can_pack_now() ) + { + self setinvisibletoplayer( players[i], 1 ); + continue; + } + + self setinvisibletoplayer( players[i], 0 ); + } + + wait 0.1; + } +} + +vending_weapon_upgrade() +{ + level endon( "Pack_A_Punch_off" ); + wait 0.01; + perk_machine = getent( self.target, "targetname" ); + self.perk_machine = perk_machine; + perk_machine_sound = getentarray( "perksacola", "targetname" ); + packa_rollers = spawn( "script_origin", self.origin ); + packa_timer = spawn( "script_origin", self.origin ); + packa_rollers linkto( self ); + packa_timer linkto( self ); + + if ( isdefined( perk_machine.target ) ) + perk_machine.wait_flag = getent( perk_machine.target, "targetname" ); + + pap_is_buildable = self is_buildable(); + + if ( pap_is_buildable ) + { + self trigger_off(); + perk_machine hide(); + + if ( isdefined( perk_machine.wait_flag ) ) + perk_machine.wait_flag hide(); + + wait_for_buildable( "pap" ); + self trigger_on(); + perk_machine show(); + + if ( isdefined( perk_machine.wait_flag ) ) + perk_machine.wait_flag show(); + } + + self usetriggerrequirelookat(); + self sethintstring( &"ZOMBIE_NEED_POWER" ); + self setcursorhint( "HINT_NOICON" ); + power_off = !self maps\mp\zombies\_zm_power::pap_is_on(); + + if ( power_off ) + { + pap_array = []; + pap_array[0] = perk_machine; + level thread do_initial_power_off_callback( pap_array, "packapunch" ); + + level waittill( "Pack_A_Punch_on" ); + } + + self enable_trigger(); + + if ( isdefined( level.machine_assets["packapunch"].power_on_callback ) ) + perk_machine thread [[ level.machine_assets["packapunch"].power_on_callback ]](); + + self thread vending_machine_trigger_think(); + perk_machine playloopsound( "zmb_perks_packa_loop" ); + self thread shutoffpapsounds( perk_machine, packa_rollers, packa_timer ); + self thread vending_weapon_upgrade_cost(); + + for (;;) + { + self.pack_player = undefined; + + self waittill( "trigger", player ); + + index = maps\mp\zombies\_zm_weapons::get_player_index( player ); + current_weapon = player getcurrentweapon(); + + if ( "microwavegun_zm" == current_weapon ) + current_weapon = "microwavegundw_zm"; + + current_weapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( current_weapon ); + + if ( isdefined( level.custom_pap_validation ) ) + { + valid = self [[ level.custom_pap_validation ]]( player ); + + if ( !valid ) + continue; + } + + if ( !player maps\mp\zombies\_zm_magicbox::can_buy_weapon() || player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission || player isthrowinggrenade() || !player maps\mp\zombies\_zm_weapons::can_upgrade_weapon( current_weapon ) ) + { + wait 0.1; + continue; + } + + if ( isdefined( level.pap_moving ) && level.pap_moving ) + continue; + + if ( player isswitchingweapons() ) + { + wait 0.1; + + if ( player isswitchingweapons() ) + continue; + } + + if ( !maps\mp\zombies\_zm_weapons::is_weapon_or_base_included( current_weapon ) ) + continue; + + current_cost = self.cost; + player.restore_ammo = undefined; + player.restore_clip = undefined; + player.restore_stock = undefined; + player_restore_clip_size = undefined; + player.restore_max = undefined; + upgrade_as_attachment = will_upgrade_weapon_as_attachment( current_weapon ); + + if ( upgrade_as_attachment ) + { + current_cost = self.attachment_cost; + player.restore_ammo = 1; + player.restore_clip = player getweaponammoclip( current_weapon ); + player.restore_clip_size = weaponclipsize( current_weapon ); + player.restore_stock = player getweaponammostock( current_weapon ); + player.restore_max = weaponmaxammo( current_weapon ); + } + + if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) + current_cost = player maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_double_points_cost( current_cost ); + + if ( player.score < current_cost ) + { + self playsound( "deny" ); + + if ( isdefined( level.custom_pap_deny_vo_func ) ) + player [[ level.custom_pap_deny_vo_func ]](); + else + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); + + continue; + } + + self.pack_player = player; + flag_set( "pack_machine_in_use" ); + maps\mp\_demo::bookmark( "zm_player_use_packapunch", gettime(), player ); + player maps\mp\zombies\_zm_stats::increment_client_stat( "use_pap" ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "use_pap" ); + self thread destroy_weapon_in_blackout( player ); + self thread destroy_weapon_on_disconnect( player ); + player maps\mp\zombies\_zm_score::minus_to_player_score( current_cost, 1 ); + sound = "evt_bottle_dispense"; + playsoundatposition( sound, self.origin ); + self thread maps\mp\zombies\_zm_audio::play_jingle_or_stinger( "mus_perks_packa_sting" ); + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "upgrade_wait" ); + self disable_trigger(); + + if ( !( isdefined( upgrade_as_attachment ) && upgrade_as_attachment ) ) + player thread do_player_general_vox( "general", "pap_wait", 10, 100 ); + else + player thread do_player_general_vox( "general", "pap_wait2", 10, 100 ); + + player thread do_knuckle_crack(); + self.current_weapon = current_weapon; + upgrade_name = maps\mp\zombies\_zm_weapons::get_upgrade_weapon( current_weapon, upgrade_as_attachment ); + player third_person_weapon_upgrade( current_weapon, upgrade_name, packa_rollers, perk_machine, self ); + self enable_trigger(); + self sethintstring( &"ZOMBIE_GET_UPGRADED" ); + + if ( isdefined( player ) ) + { + self setinvisibletoall(); + self setvisibletoplayer( player ); + self thread wait_for_player_to_take( player, current_weapon, packa_timer, upgrade_as_attachment ); + } + + self thread wait_for_timeout( current_weapon, packa_timer, player ); + self waittill_any( "pap_timeout", "pap_taken", "pap_player_disconnected" ); + self.current_weapon = ""; + + if ( isdefined( self.worldgun ) && isdefined( self.worldgun.worldgundw ) ) + self.worldgun.worldgundw delete(); + + if ( isdefined( self.worldgun ) ) + self.worldgun delete(); + + if ( isdefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) + self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH_ATT", self.cost ); + else + self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH", self.cost ); + + self setvisibletoall(); + self.pack_player = undefined; + flag_clear( "pack_machine_in_use" ); + } +} + +shutoffpapsounds( ent1, ent2, ent3 ) +{ + while ( true ) + { + level waittill( "Pack_A_Punch_off" ); + + level thread turnonpapsounds( ent1 ); + ent1 stoploopsound( 0.1 ); + ent2 stoploopsound( 0.1 ); + ent3 stoploopsound( 0.1 ); + } +} + +turnonpapsounds( ent ) +{ + level waittill( "Pack_A_Punch_on" ); + + ent playloopsound( "zmb_perks_packa_loop" ); +} + +vending_weapon_upgrade_cost() +{ + level endon( "Pack_A_Punch_off" ); + + while ( true ) + { + self.cost = 5000; + self.attachment_cost = 2000; + + if ( isdefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) + self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH_ATT", self.cost ); + else + self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH", self.cost ); + + level waittill( "powerup bonfire sale" ); + + self.cost = 1000; + self.attachment_cost = 1000; + + if ( isdefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) + self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH_ATT", self.cost ); + else + self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH", self.cost ); + + level waittill( "bonfire_sale_off" ); + } +} + +wait_for_player_to_take( player, weapon, packa_timer, upgrade_as_attachment ) +{ + current_weapon = self.current_weapon; + upgrade_name = self.upgrade_name; + assert( isdefined( current_weapon ), "wait_for_player_to_take: weapon does not exist" ); + assert( isdefined( upgrade_name ), "wait_for_player_to_take: upgrade_weapon does not exist" ); + upgrade_weapon = upgrade_name; + self endon( "pap_timeout" ); + level endon( "Pack_A_Punch_off" ); + + while ( true ) + { + packa_timer playloopsound( "zmb_perks_packa_ticktock" ); + + self waittill( "trigger", trigger_player ); + + if ( isdefined( level.pap_grab_by_anyone ) && level.pap_grab_by_anyone ) + player = trigger_player; + + packa_timer stoploopsound( 0.05 ); + + if ( trigger_player == player ) + { + player maps\mp\zombies\_zm_stats::increment_client_stat( "pap_weapon_grabbed" ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "pap_weapon_grabbed" ); + current_weapon = player getcurrentweapon(); +/# + if ( "none" == current_weapon ) + iprintlnbold( "WEAPON IS NONE, PACKAPUNCH RETRIEVAL DENIED" ); +#/ + if ( is_player_valid( player ) && !( player.is_drinking > 0 ) && !is_placeable_mine( current_weapon ) && !is_equipment( current_weapon ) && level.revive_tool != current_weapon && "none" != current_weapon && !player hacker_active() ) + { + maps\mp\_demo::bookmark( "zm_player_grabbed_packapunch", gettime(), player ); + self notify( "pap_taken" ); + player notify( "pap_taken" ); + player.pap_used = 1; + + if ( !( isdefined( upgrade_as_attachment ) && upgrade_as_attachment ) ) + player thread do_player_general_vox( "general", "pap_arm", 15, 100 ); + else + player thread do_player_general_vox( "general", "pap_arm2", 15, 100 ); + + weapon_limit = get_player_weapon_limit( player ); + player maps\mp\zombies\_zm_weapons::take_fallback_weapon(); + primaries = player getweaponslistprimaries(); + + if ( isdefined( primaries ) && primaries.size >= weapon_limit ) + player maps\mp\zombies\_zm_weapons::weapon_give( upgrade_weapon ); + else + { + player giveweapon( upgrade_weapon, 0, player maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( upgrade_weapon ) ); + player givestartammo( upgrade_weapon ); + } + + player switchtoweapon( upgrade_weapon ); + + if ( isdefined( player.restore_ammo ) && player.restore_ammo ) + { + new_clip = player.restore_clip + weaponclipsize( upgrade_weapon ) - player.restore_clip_size; + new_stock = player.restore_stock + weaponmaxammo( upgrade_weapon ) - player.restore_max; + player setweaponammostock( upgrade_weapon, new_stock ); + player setweaponammoclip( upgrade_weapon, new_clip ); + } + + player.restore_ammo = undefined; + player.restore_clip = undefined; + player.restore_stock = undefined; + player.restore_max = undefined; + player.restore_clip_size = undefined; + player maps\mp\zombies\_zm_weapons::play_weapon_vo( upgrade_weapon ); + return; + } + } + + wait 0.05; + } +} + +wait_for_timeout( weapon, packa_timer, player ) +{ + self endon( "pap_taken" ); + self endon( "pap_player_disconnected" ); + self thread wait_for_disconnect( player ); + wait( level.packapunch_timeout ); + self notify( "pap_timeout" ); + packa_timer stoploopsound( 0.05 ); + packa_timer playsound( "zmb_perks_packa_deny" ); + maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( weapon ); + + if ( isdefined( player ) ) + { + player maps\mp\zombies\_zm_stats::increment_client_stat( "pap_weapon_not_grabbed" ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "pap_weapon_not_grabbed" ); + } +} + +wait_for_disconnect( player ) +{ + self endon( "pap_taken" ); + self endon( "pap_timeout" ); + + while ( isdefined( player ) ) + wait 0.1; +/# + println( "*** PAP : User disconnected." ); +#/ + self notify( "pap_player_disconnected" ); +} + +destroy_weapon_on_disconnect( player ) +{ + self endon( "pap_timeout" ); + self endon( "pap_taken" ); + level endon( "Pack_A_Punch_off" ); + + player waittill( "disconnect" ); + + if ( isdefined( self.worldgun ) ) + { + if ( isdefined( self.worldgun.worldgundw ) ) + self.worldgun.worldgundw delete(); + + self.worldgun delete(); + } +} + +destroy_weapon_in_blackout( player ) +{ + self endon( "pap_timeout" ); + self endon( "pap_taken" ); + self endon( "pap_player_disconnected" ); + + level waittill( "Pack_A_Punch_off" ); + + if ( isdefined( self.worldgun ) ) + { + self.worldgun rotateto( self.worldgun.angles + ( randomint( 90 ) - 45, 0, randomint( 360 ) - 180 ), 1.5, 0, 0 ); + player playlocalsound( level.zmb_laugh_alias ); + wait 1.5; + + if ( isdefined( self.worldgun.worldgundw ) ) + self.worldgun.worldgundw delete(); + + self.worldgun delete(); + } +} + +do_knuckle_crack() +{ + self endon( "disconnect" ); + gun = self upgrade_knuckle_crack_begin(); + self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); + self upgrade_knuckle_crack_end( gun ); +} + +upgrade_knuckle_crack_begin() +{ + self increment_is_drinking(); + self disable_player_move_states( 1 ); + primaries = self getweaponslistprimaries(); + gun = self getcurrentweapon(); + weapon = level.machine_assets["packapunch"].weapon; + + if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) + { + self notify( "zmb_lost_knife" ); + self takeweapon( gun ); + } + else + return; + + self giveweapon( weapon ); + self switchtoweapon( weapon ); + return gun; +} + +upgrade_knuckle_crack_end( gun ) +{ + assert( !is_zombie_perk_bottle( gun ) ); + assert( gun != level.revive_tool ); + self enable_player_move_states(); + weapon = level.machine_assets["packapunch"].weapon; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + { + self takeweapon( weapon ); + return; + } + + self decrement_is_drinking(); + self takeweapon( weapon ); + primaries = self getweaponslistprimaries(); + + if ( self.is_drinking > 0 ) + return; + else if ( isdefined( primaries ) && primaries.size > 0 ) + self switchtoweapon( primaries[0] ); + else if ( self hasweapon( level.laststandpistol ) ) + self switchtoweapon( level.laststandpistol ); + else + self maps\mp\zombies\_zm_weapons::give_fallback_weapon(); +} + +turn_packapunch_on() +{ + vending_weapon_upgrade_trigger = getentarray( "specialty_weapupgrade", "script_noteworthy" ); + level.pap_triggers = vending_weapon_upgrade_trigger; + + for ( i = 0; i < vending_weapon_upgrade_trigger.size; i++ ) + { + perk = getent( vending_weapon_upgrade_trigger[i].target, "targetname" ); + + if ( isdefined( perk ) ) + perk setmodel( level.machine_assets["packapunch"].off_model ); + } + + for (;;) + { + level waittill( "Pack_A_Punch_on" ); + + for ( i = 0; i < vending_weapon_upgrade_trigger.size; i++ ) + { + perk = getent( vending_weapon_upgrade_trigger[i].target, "targetname" ); + + if ( isdefined( perk ) ) + perk thread activate_packapunch(); + } + + level waittill( "Pack_A_Punch_off" ); + + for ( i = 0; i < vending_weapon_upgrade_trigger.size; i++ ) + { + perk = getent( vending_weapon_upgrade_trigger[i].target, "targetname" ); + + if ( isdefined( perk ) ) + perk thread deactivate_packapunch(); + } + } +} + +activate_packapunch() +{ + self setmodel( level.machine_assets["packapunch"].on_model ); + self playsound( "zmb_perks_power_on" ); + self vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + timer = 0; + duration = 0.05; +} + +deactivate_packapunch() +{ + self setmodel( level.machine_assets["packapunch"].off_model ); +} + +do_initial_power_off_callback( machine_array, perkname ) +{ + if ( !isdefined( level.machine_assets[perkname] ) ) + { +/# + println( "Error: doing setup for a machine with no level.machine_assets! Check your perk initialization!" ); +#/ + return; + } + + if ( !isdefined( level.machine_assets[perkname].power_off_callback ) ) + return; + + wait 0.05; + array_thread( machine_array, level.machine_assets[perkname].power_off_callback ); +} + +turn_sleight_on() +{ + while ( true ) + { + machine = getentarray( "vending_sleight", "targetname" ); + machine_triggers = getentarray( "vending_sleight", "target" ); + + for ( i = 0; i < machine.size; i++ ) + machine[i] setmodel( level.machine_assets["speedcola"].off_model ); + + level thread do_initial_power_off_callback( machine, "speedcola" ); + array_thread( machine_triggers, ::set_power_on, 0 ); + + level waittill( "sleight_on" ); + + for ( i = 0; i < machine.size; i++ ) + { + machine[i] setmodel( level.machine_assets["speedcola"].on_model ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] thread perk_fx( "sleight_light" ); + machine[i] thread play_loop_on_machine(); + } + + array_thread( machine_triggers, ::set_power_on, 1 ); + + if ( isdefined( level.machine_assets["speedcola"].power_on_callback ) ) + array_thread( machine, level.machine_assets["speedcola"].power_on_callback ); + + level notify( "specialty_fastreload_power_on" ); + + level waittill( "sleight_off" ); + + array_thread( machine, ::turn_perk_off ); + + if ( isdefined( level.machine_assets["speedcola"].power_off_callback ) ) + array_thread( machine, level.machine_assets["speedcola"].power_off_callback ); + } +} + +use_solo_revive() +{ + if ( isdefined( level.using_solo_revive ) ) + return level.using_solo_revive; + + players = get_players(); + solo_mode = 0; + + if ( players.size == 1 || isdefined( level.force_solo_quick_revive ) && level.force_solo_quick_revive ) + solo_mode = 1; + + level.using_solo_revive = solo_mode; + return solo_mode; +} + +turn_revive_on() +{ + level endon( "stop_quickrevive_logic" ); + machine = getentarray( "vending_revive", "targetname" ); + machine_triggers = getentarray( "vending_revive", "target" ); + machine_model = undefined; + machine_clip = undefined; + + if ( !( isdefined( level.zombiemode_using_revive_perk ) && level.zombiemode_using_revive_perk ) ) + return; + + flag_wait( "start_zombie_round_logic" ); + players = get_players(); + solo_mode = 0; + + if ( use_solo_revive() ) + solo_mode = 1; + + start_state = 0; + start_state = solo_mode; + + while ( true ) + { + machine = getentarray( "vending_revive", "targetname" ); + machine_triggers = getentarray( "vending_revive", "target" ); + + for ( i = 0; i < machine.size; i++ ) + { + if ( flag_exists( "solo_game" ) && flag_exists( "solo_revive" ) && flag( "solo_game" ) && flag( "solo_revive" ) ) + machine[i] hide(); + + machine[i] setmodel( level.machine_assets["revive"].off_model ); + + if ( isdefined( level.quick_revive_final_pos ) ) + level.quick_revive_default_origin = level.quick_revive_final_pos; + + if ( !isdefined( level.quick_revive_default_origin ) ) + { + level.quick_revive_default_origin = machine[i].origin; + level.quick_revive_default_angles = machine[i].angles; + } + + level.quick_revive_machine = machine[i]; + } + + array_thread( machine_triggers, ::set_power_on, 0 ); + + if ( !( isdefined( start_state ) && start_state ) ) + level waittill( "revive_on" ); + + start_state = 0; + + for ( i = 0; i < machine.size; i++ ) + { + if ( isdefined( machine[i].classname ) && machine[i].classname == "script_model" ) + { + if ( isdefined( machine[i].script_noteworthy ) && machine[i].script_noteworthy == "clip" ) + { + machine_clip = machine[i]; + continue; + } + + machine[i] setmodel( level.machine_assets["revive"].on_model ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine_model = machine[i]; + machine[i] thread perk_fx( "revive_light" ); + machine[i] notify( "stop_loopsound" ); + machine[i] thread play_loop_on_machine(); + + if ( isdefined( machine_triggers[i] ) ) + machine_clip = machine_triggers[i].clip; + + if ( isdefined( machine_triggers[i] ) ) + blocker_model = machine_triggers[i].blocker_model; + } + } + + wait_network_frame(); + + if ( solo_mode && isdefined( machine_model ) && !is_true( machine_model.ishidden ) ) + machine_model thread revive_solo_fx( machine_clip, blocker_model ); + + array_thread( machine_triggers, ::set_power_on, 1 ); + + if ( isdefined( level.machine_assets["revive"].power_on_callback ) ) + array_thread( machine, level.machine_assets["revive"].power_on_callback ); + + level notify( "specialty_quickrevive_power_on" ); + + if ( isdefined( machine_model ) ) + machine_model.ishidden = 0; + + notify_str = level waittill_any_return( "revive_off", "revive_hide" ); + should_hide = 0; + + if ( notify_str == "revive_hide" ) + should_hide = 1; + + if ( isdefined( level.machine_assets["revive"].power_off_callback ) ) + array_thread( machine, level.machine_assets["revive"].power_off_callback ); + + for ( i = 0; i < machine.size; i++ ) + { + if ( isdefined( machine[i].classname ) && machine[i].classname == "script_model" ) + machine[i] turn_perk_off( should_hide ); + } + } +} + +revive_solo_fx( machine_clip, blocker_model ) +{ + if ( level flag_exists( "solo_revive" ) && flag( "solo_revive" ) && !flag( "solo_game" ) ) + return; + + if ( isdefined( machine_clip ) ) + level.quick_revive_machine_clip = machine_clip; + + if ( !isdefined( level.solo_revive_init ) ) + { + level.solo_revive_init = 1; + flag_init( "solo_revive" ); + } + + level notify( "revive_solo_fx" ); + level endon( "revive_solo_fx" ); + self endon( "death" ); + flag_wait( "solo_revive" ); + + if ( isdefined( level.revive_solo_fx_func ) ) + level thread [[ level.revive_solo_fx_func ]](); + + wait 2.0; + self playsound( "zmb_box_move" ); + playsoundatposition( "zmb_whoosh", self.origin ); + + if ( isdefined( self._linked_ent ) ) + self unlink(); + + self moveto( self.origin + vectorscale( ( 0, 0, 1 ), 40.0 ), 3 ); + + if ( isdefined( level.custom_vibrate_func ) ) + [[ level.custom_vibrate_func ]]( self ); + else + { + direction = self.origin; + direction = ( direction[1], direction[0], 0 ); + + if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 ) + direction = ( direction[0], direction[1] * -1, 0 ); + else if ( direction[0] < 0 ) + direction = ( direction[0] * -1, direction[1], 0 ); + + self vibrate( direction, 10, 0.5, 5 ); + } + + self waittill( "movedone" ); + + playfx( level._effect["poltergeist"], self.origin ); + playsoundatposition( "zmb_box_poof", self.origin ); + level clientnotify( "drb" ); + + if ( isdefined( self.fx ) ) + { + self.fx unlink(); + self.fx delete(); + } + + if ( isdefined( machine_clip ) ) + { + machine_clip trigger_off(); + machine_clip connectpaths(); + } + + if ( isdefined( blocker_model ) ) + blocker_model show(); + + level notify( "revive_hide" ); +} + +turn_jugger_on() +{ + while ( true ) + { + machine = getentarray( "vending_jugg", "targetname" ); + machine_triggers = getentarray( "vending_jugg", "target" ); + + for ( i = 0; i < machine.size; i++ ) + machine[i] setmodel( level.machine_assets["juggernog"].off_model ); + + level thread do_initial_power_off_callback( machine, "juggernog" ); + array_thread( machine_triggers, ::set_power_on, 0 ); + + level waittill( "juggernog_on" ); + + for ( i = 0; i < machine.size; i++ ) + { + machine[i] setmodel( level.machine_assets["juggernog"].on_model ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] thread perk_fx( "jugger_light" ); + machine[i] thread play_loop_on_machine(); + } + + level notify( "specialty_armorvest_power_on" ); + array_thread( machine_triggers, ::set_power_on, 1 ); + + if ( isdefined( level.machine_assets["juggernog"].power_on_callback ) ) + array_thread( machine, level.machine_assets["juggernog"].power_on_callback ); + + level waittill( "juggernog_off" ); + + if ( isdefined( level.machine_assets["juggernog"].power_off_callback ) ) + array_thread( machine, level.machine_assets["juggernog"].power_off_callback ); + + array_thread( machine, ::turn_perk_off ); + } +} + +turn_doubletap_on() +{ + while ( true ) + { + machine = getentarray( "vending_doubletap", "targetname" ); + machine_triggers = getentarray( "vending_doubletap", "target" ); + + for ( i = 0; i < machine.size; i++ ) + machine[i] setmodel( level.machine_assets["doubletap"].off_model ); + + level thread do_initial_power_off_callback( machine, "doubletap" ); + array_thread( machine_triggers, ::set_power_on, 0 ); + + level waittill( "doubletap_on" ); + + for ( i = 0; i < machine.size; i++ ) + { + machine[i] setmodel( level.machine_assets["doubletap"].on_model ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] thread perk_fx( "doubletap_light" ); + machine[i] thread play_loop_on_machine(); + } + + level notify( "specialty_rof_power_on" ); + array_thread( machine_triggers, ::set_power_on, 1 ); + + if ( isdefined( level.machine_assets["doubletap"].power_on_callback ) ) + array_thread( machine, level.machine_assets["doubletap"].power_on_callback ); + + level waittill( "doubletap_off" ); + + if ( isdefined( level.machine_assets["doubletap"].power_off_callback ) ) + array_thread( machine, level.machine_assets["doubletap"].power_off_callback ); + + array_thread( machine, ::turn_perk_off ); + } +} + +turn_marathon_on() +{ + while ( true ) + { + machine = getentarray( "vending_marathon", "targetname" ); + machine_triggers = getentarray( "vending_marathon", "target" ); + + for ( i = 0; i < machine.size; i++ ) + machine[i] setmodel( level.machine_assets["marathon"].off_model ); + + array_thread( machine_triggers, ::set_power_on, 0 ); + level thread do_initial_power_off_callback( machine, "marathon" ); + + level waittill( "marathon_on" ); + + for ( i = 0; i < machine.size; i++ ) + { + machine[i] setmodel( level.machine_assets["marathon"].on_model ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] thread perk_fx( "marathon_light" ); + machine[i] thread play_loop_on_machine(); + } + + level notify( "specialty_longersprint_power_on" ); + array_thread( machine_triggers, ::set_power_on, 1 ); + + if ( isdefined( level.machine_assets["marathon"].power_on_callback ) ) + array_thread( machine, level.machine_assets["marathon"].power_on_callback ); + + level waittill( "marathon_off" ); + + if ( isdefined( level.machine_assets["marathon"].power_off_callback ) ) + array_thread( machine, level.machine_assets["marathon"].power_off_callback ); + + array_thread( machine, ::turn_perk_off ); + } +} + +turn_deadshot_on() +{ + while ( true ) + { + machine = getentarray( "vending_deadshot_model", "targetname" ); + machine_triggers = getentarray( "vending_deadshot", "target" ); + + for ( i = 0; i < machine.size; i++ ) + machine[i] setmodel( level.machine_assets["deadshot"].off_model ); + + level thread do_initial_power_off_callback( machine, "deadshot" ); + array_thread( machine_triggers, ::set_power_on, 0 ); + + level waittill( "deadshot_on" ); + + for ( i = 0; i < machine.size; i++ ) + { + machine[i] setmodel( level.machine_assets["deadshot"].on_model ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] thread perk_fx( "deadshot_light" ); + machine[i] thread play_loop_on_machine(); + } + + level notify( "specialty_deadshot_power_on" ); + array_thread( machine_triggers, ::set_power_on, 1 ); + + if ( isdefined( level.machine_assets["deadshot"].power_on_callback ) ) + array_thread( machine, level.machine_assets["deadshot"].power_on_callback ); + + level waittill( "deadshot_off" ); + + if ( isdefined( level.machine_assets["deadshot"].power_off_callback ) ) + array_thread( machine, level.machine_assets["deadshot"].power_off_callback ); + + array_thread( machine, ::turn_perk_off ); + } +} + +turn_tombstone_on() +{ + level endon( "tombstone_removed" ); + + while ( true ) + { + machine = getentarray( "vending_tombstone", "targetname" ); + machine_triggers = getentarray( "vending_tombstone", "target" ); + + for ( i = 0; i < machine.size; i++ ) + machine[i] setmodel( level.machine_assets["tombstone"].off_model ); + + level thread do_initial_power_off_callback( machine, "tombstone" ); + array_thread( machine_triggers, ::set_power_on, 0 ); + + level waittill( "tombstone_on" ); + + for ( i = 0; i < machine.size; i++ ) + { + machine[i] setmodel( level.machine_assets["tombstone"].on_model ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] thread perk_fx( "tombstone_light" ); + machine[i] thread play_loop_on_machine(); + } + + level notify( "specialty_scavenger_power_on" ); + array_thread( machine_triggers, ::set_power_on, 1 ); + + if ( isdefined( level.machine_assets["tombstone"].power_on_callback ) ) + array_thread( machine, level.machine_assets["tombstone"].power_on_callback ); + + level waittill( "tombstone_off" ); + + if ( isdefined( level.machine_assets["tombstone"].power_off_callback ) ) + array_thread( machine, level.machine_assets["tombstone"].power_off_callback ); + + array_thread( machine, ::turn_perk_off ); + players = get_players(); + + foreach ( player in players ) + player.hasperkspecialtytombstone = undefined; + } +} + +turn_additionalprimaryweapon_on() +{ + while ( true ) + { + machine = getentarray( "vending_additionalprimaryweapon", "targetname" ); + machine_triggers = getentarray( "vending_additionalprimaryweapon", "target" ); + + for ( i = 0; i < machine.size; i++ ) + machine[i] setmodel( level.machine_assets["additionalprimaryweapon"].off_model ); + + level thread do_initial_power_off_callback( machine, "additionalprimaryweapon" ); + array_thread( machine_triggers, ::set_power_on, 0 ); + + level waittill( "additionalprimaryweapon_on" ); + + for ( i = 0; i < machine.size; i++ ) + { + machine[i] setmodel( level.machine_assets["additionalprimaryweapon"].on_model ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] thread perk_fx( "additionalprimaryweapon_light" ); + machine[i] thread play_loop_on_machine(); + } + + level notify( "specialty_additionalprimaryweapon_power_on" ); + array_thread( machine_triggers, ::set_power_on, 1 ); + + if ( isdefined( level.machine_assets["additionalprimaryweapon"].power_on_callback ) ) + array_thread( machine, level.machine_assets["additionalprimaryweapon"].power_on_callback ); + + level waittill( "additionalprimaryweapon_off" ); + + if ( isdefined( level.machine_assets["additionalprimaryweapon"].power_off_callback ) ) + array_thread( machine, level.machine_assets["additionalprimaryweapon"].power_off_callback ); + + array_thread( machine, ::turn_perk_off ); + } +} + +turn_chugabud_on() +{ + maps\mp\zombies\_zm_chugabud::init(); + + if ( isdefined( level.vsmgr_prio_visionset_zm_whos_who ) ) + maps\mp\_visionset_mgr::vsmgr_register_info( "visionset", "zm_whos_who", 5000, level.vsmgr_prio_visionset_zm_whos_who, 1, 1 ); + + while ( true ) + { + machine = getentarray( "vending_chugabud", "targetname" ); + machine_triggers = getentarray( "vending_chugabud", "target" ); + + for ( i = 0; i < machine.size; i++ ) + machine[i] setmodel( level.machine_assets["whoswho"].off_model ); + + level thread do_initial_power_off_callback( machine, "whoswho" ); + array_thread( machine_triggers, ::set_power_on, 0 ); + + level waittill( "chugabud_on" ); + + for ( i = 0; i < machine.size; i++ ) + { + machine[i] setmodel( level.machine_assets["whoswho"].on_model ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] thread perk_fx( "tombstone_light" ); + machine[i] thread play_loop_on_machine(); + } + + level notify( "specialty_finalstand_power_on" ); + array_thread( machine_triggers, ::set_power_on, 1 ); + + if ( isdefined( level.machine_assets["whoswho"].power_on_callback ) ) + array_thread( machine, level.machine_assets["whoswho"].power_on_callback ); + + level waittill( "chugabud_off" ); + + if ( isdefined( level.machine_assets["whoswho"].power_off_callback ) ) + array_thread( machine, level.machine_assets["whoswho"].power_off_callback ); + + array_thread( machine, ::turn_perk_off ); + players = get_players(); + + foreach ( player in players ) + player.hasperkspecialtychugabud = undefined; + } +} + +set_power_on( state ) +{ + self.power_on = state; +} + +turn_perk_off( ishidden ) +{ + self notify( "stop_loopsound" ); + newmachine = spawn( "script_model", self.origin ); + newmachine.angles = self.angles; + newmachine.targetname = self.targetname; + + if ( is_true( ishidden ) ) + { + newmachine.ishidden = 1; + newmachine hide(); + } + + self delete(); +} + +play_loop_on_machine() +{ + if ( isdefined( level.sndperksacolaloopoverride ) ) + return; + + sound_ent = spawn( "script_origin", self.origin ); + sound_ent playloopsound( "zmb_perks_machine_loop" ); + sound_ent linkto( self ); + + self waittill( "stop_loopsound" ); + + sound_ent unlink(); + sound_ent delete(); +} + +perk_fx( fx, turnofffx ) +{ + if ( isdefined( turnofffx ) ) + self.perk_fx = 0; + else + { + wait 3; + + if ( isdefined( self ) && !is_true( self.perk_fx ) ) + { + playfxontag( level._effect[fx], self, "tag_origin" ); + self.perk_fx = 1; + } + } +} + +electric_perks_dialog() +{ + self endon( "death" ); + wait 0.01; + flag_wait( "start_zombie_round_logic" ); + players = get_players(); + + if ( players.size == 1 ) + return; + + self endon( "warning_dialog" ); + level endon( "switch_flipped" ); + timer = 0; + + while ( true ) + { + wait 0.5; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i] ) ) + continue; + + dist = distancesquared( players[i].origin, self.origin ); + + if ( dist > 4900 ) + { + timer = 0; + continue; + } + + if ( dist < 4900 && timer < 3 ) + { + wait 0.5; + timer++; + } + + if ( dist < 4900 && timer == 3 ) + { + if ( !isdefined( players[i] ) ) + continue; + + players[i] thread do_player_vo( "vox_start", 5 ); + wait 3; + self notify( "warning_dialog" ); +/# + iprintlnbold( "warning_given" ); +#/ + } + } + } +} + +reset_vending_hint_string() +{ + perk = self.script_noteworthy; + solo = maps\mp\zombies\_zm_perks::use_solo_revive(); + + switch ( perk ) + { + case "specialty_armorvest_upgrade": + case "specialty_armorvest": + self sethintstring( &"ZOMBIE_PERK_JUGGERNAUT", self.cost ); + break; + case "specialty_quickrevive_upgrade": + case "specialty_quickrevive": + if ( solo ) + self sethintstring( &"ZOMBIE_PERK_QUICKREVIVE_SOLO", self.cost ); + else + self sethintstring( &"ZOMBIE_PERK_QUICKREVIVE", self.cost ); + + break; + case "specialty_fastreload_upgrade": + case "specialty_fastreload": + self sethintstring( &"ZOMBIE_PERK_FASTRELOAD", self.cost ); + break; + case "specialty_rof_upgrade": + case "specialty_rof": + self sethintstring( &"ZOMBIE_PERK_DOUBLETAP", self.cost ); + break; + case "specialty_longersprint_upgrade": + case "specialty_longersprint": + self sethintstring( &"ZOMBIE_PERK_MARATHON", self.cost ); + break; + case "specialty_deadshot_upgrade": + case "specialty_deadshot": + self sethintstring( &"ZOMBIE_PERK_DEADSHOT", self.cost ); + break; + case "specialty_additionalprimaryweapon_upgrade": + case "specialty_additionalprimaryweapon": + self sethintstring( &"ZOMBIE_PERK_ADDITIONALPRIMARYWEAPON", self.cost ); + break; + case "specialty_scavenger_upgrade": + case "specialty_scavenger": + self sethintstring( &"ZOMBIE_PERK_TOMBSTONE", self.cost ); + break; + case "specialty_finalstand_upgrade": + case "specialty_finalstand": + self sethintstring( &"ZOMBIE_PERK_CHUGABUD", self.cost ); + break; + default: + self sethintstring( perk + " Cost: " + level.zombie_vars["zombie_perk_cost"] ); + } + + if ( isdefined( level._custom_perks ) ) + { + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].cost ) && isdefined( level._custom_perks[perk].hint_string ) ) + self sethintstring( level._custom_perks[perk].hint_string, level._custom_perks[perk].cost ); + } +} + +vending_trigger_think() +{ + self endon( "death" ); + wait 0.01; + perk = self.script_noteworthy; + solo = 0; + start_on = 0; + level.revive_machine_is_solo = 0; + + if ( isdefined( perk ) && ( perk == "specialty_quickrevive" || perk == "specialty_quickrevive_upgrade" ) ) + { + flag_wait( "start_zombie_round_logic" ); + solo = use_solo_revive(); + self endon( "stop_quickrevive_logic" ); + level.quick_revive_trigger = self; + + if ( solo ) + { + if ( !is_true( level.revive_machine_is_solo ) ) + { + start_on = 1; + players = get_players(); + + foreach ( player in players ) + { + if ( !isdefined( player.lives ) ) + player.lives = 0; + } + + level maps\mp\zombies\_zm::set_default_laststand_pistol( 1 ); + } + + level.revive_machine_is_solo = 1; + } + } + + self sethintstring( &"ZOMBIE_NEED_POWER" ); + self setcursorhint( "HINT_NOICON" ); + self usetriggerrequirelookat(); + cost = level.zombie_vars["zombie_perk_cost"]; + + switch ( perk ) + { + case "specialty_armorvest_upgrade": + case "specialty_armorvest": + cost = 2500; + break; + case "specialty_quickrevive_upgrade": + case "specialty_quickrevive": + if ( solo ) + cost = 500; + else + cost = 1500; + + break; + case "specialty_fastreload_upgrade": + case "specialty_fastreload": + cost = 3000; + break; + case "specialty_rof_upgrade": + case "specialty_rof": + cost = 2000; + break; + case "specialty_longersprint_upgrade": + case "specialty_longersprint": + cost = 2000; + break; + case "specialty_deadshot_upgrade": + case "specialty_deadshot": + cost = 1500; + break; + case "specialty_additionalprimaryweapon_upgrade": + case "specialty_additionalprimaryweapon": + cost = 4000; + break; + } + + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].cost ) ) + cost = level._custom_perks[perk].cost; + + self.cost = cost; + + if ( !start_on ) + { + notify_name = perk + "_power_on"; + + level waittill( notify_name ); + } + + start_on = 0; + + if ( !isdefined( level._perkmachinenetworkchoke ) ) + level._perkmachinenetworkchoke = 0; + else + level._perkmachinenetworkchoke++; + + for ( i = 0; i < level._perkmachinenetworkchoke; i++ ) + wait_network_frame(); + + self thread maps\mp\zombies\_zm_audio::perks_a_cola_jingle_timer(); + self thread check_player_has_perk( perk ); + + switch ( perk ) + { + case "specialty_armorvest_upgrade": + case "specialty_armorvest": + self sethintstring( &"ZOMBIE_PERK_JUGGERNAUT", cost ); + break; + case "specialty_quickrevive_upgrade": + case "specialty_quickrevive": + if ( solo ) + self sethintstring( &"ZOMBIE_PERK_QUICKREVIVE_SOLO", cost ); + else + self sethintstring( &"ZOMBIE_PERK_QUICKREVIVE", cost ); + + break; + case "specialty_fastreload_upgrade": + case "specialty_fastreload": + self sethintstring( &"ZOMBIE_PERK_FASTRELOAD", cost ); + break; + case "specialty_rof_upgrade": + case "specialty_rof": + self sethintstring( &"ZOMBIE_PERK_DOUBLETAP", cost ); + break; + case "specialty_longersprint_upgrade": + case "specialty_longersprint": + self sethintstring( &"ZOMBIE_PERK_MARATHON", cost ); + break; + case "specialty_deadshot_upgrade": + case "specialty_deadshot": + self sethintstring( &"ZOMBIE_PERK_DEADSHOT", cost ); + break; + case "specialty_additionalprimaryweapon_upgrade": + case "specialty_additionalprimaryweapon": + self sethintstring( &"ZOMBIE_PERK_ADDITIONALPRIMARYWEAPON", cost ); + break; + case "specialty_scavenger_upgrade": + case "specialty_scavenger": + self sethintstring( &"ZOMBIE_PERK_TOMBSTONE", cost ); + break; + case "specialty_finalstand_upgrade": + case "specialty_finalstand": + self sethintstring( &"ZOMBIE_PERK_CHUGABUD", cost ); + break; + default: + self sethintstring( perk + " Cost: " + level.zombie_vars["zombie_perk_cost"] ); + } + + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].hint_string ) ) + self sethintstring( level._custom_perks[perk].hint_string, cost ); + + for (;;) + { + self waittill( "trigger", player ); + + index = maps\mp\zombies\_zm_weapons::get_player_index( player ); + + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission ) + continue; + + if ( player in_revive_trigger() ) + continue; + + if ( !player maps\mp\zombies\_zm_magicbox::can_buy_weapon() ) + { + wait 0.1; + continue; + } + + if ( player isthrowinggrenade() ) + { + wait 0.1; + continue; + } + + if ( player isswitchingweapons() ) + { + wait 0.1; + continue; + } + + if ( player.is_drinking > 0 ) + { + wait 0.1; + continue; + } + + if ( player hasperk( perk ) || player has_perk_paused( perk ) ) + { + cheat = 0; +/# + if ( getdvarint( _hash_FA81816F ) >= 5 ) + cheat = 1; +#/ + if ( cheat != 1 ) + { + self playsound( "deny" ); + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 1 ); + continue; + } + } + + if ( isdefined( level.custom_perk_validation ) ) + { + valid = self [[ level.custom_perk_validation ]]( player ); + + if ( !valid ) + continue; + } + + current_cost = cost; + + if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) + current_cost = player maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_double_points_cost( current_cost ); + + if ( player.score < current_cost ) + { + self playsound( "evt_perk_deny" ); + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); + continue; + } + + if ( player.num_perks >= player get_player_perk_purchase_limit() ) + { + self playsound( "evt_perk_deny" ); + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "sigh" ); + continue; + } + + sound = "evt_bottle_dispense"; + playsoundatposition( sound, self.origin ); + player maps\mp\zombies\_zm_score::minus_to_player_score( current_cost, 1 ); + player.perk_purchased = perk; + self thread maps\mp\zombies\_zm_audio::play_jingle_or_stinger( self.script_label ); + self thread vending_trigger_post_think( player, perk ); + } +} + +vending_trigger_post_think( player, perk ) +{ + player endon( "disconnect" ); + player endon( "end_game" ); + player endon( "perk_abort_drinking" ); + gun = player perk_give_bottle_begin( perk ); + evt = player waittill_any_return( "fake_death", "death", "player_downed", "weapon_change_complete" ); + + if ( evt == "weapon_change_complete" ) + player thread wait_give_perk( perk, 1 ); + + player perk_give_bottle_end( gun, perk ); + + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission ) + return; + + player notify( "burp" ); + + if ( isdefined( level.pers_upgrade_cash_back ) && level.pers_upgrade_cash_back ) + player maps\mp\zombies\_zm_pers_upgrades_functions::cash_back_player_drinks_perk(); + + if ( isdefined( level.pers_upgrade_perk_lose ) && level.pers_upgrade_perk_lose ) + player thread maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_perk_lose_bought(); + + if ( isdefined( level.perk_bought_func ) ) + player [[ level.perk_bought_func ]]( perk ); + + player.perk_purchased = undefined; + + if ( is_false( self.power_on ) ) + { + wait 1; + perk_pause( self.script_noteworthy ); + } + + bbprint( "zombie_uses", "playername %s playerscore %d round %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, perk, self.origin, "perk" ); +} + +solo_revive_buy_trigger_move( revive_trigger_noteworthy ) +{ + self endon( "death" ); + revive_perk_triggers = getentarray( revive_trigger_noteworthy, "script_noteworthy" ); + + foreach ( revive_perk_trigger in revive_perk_triggers ) + self thread solo_revive_buy_trigger_move_trigger( revive_perk_trigger ); +} + +solo_revive_buy_trigger_move_trigger( revive_perk_trigger ) +{ + self endon( "death" ); + revive_perk_trigger setinvisibletoplayer( self ); + + if ( level.solo_lives_given >= 3 ) + { + revive_perk_trigger trigger_off(); + + if ( isdefined( level._solo_revive_machine_expire_func ) ) + revive_perk_trigger [[ level._solo_revive_machine_expire_func ]](); + + return; + } + + while ( self.lives > 0 ) + wait 0.1; + + revive_perk_trigger setvisibletoplayer( self ); +} + +wait_give_perk( perk, bought ) +{ + self endon( "player_downed" ); + self endon( "disconnect" ); + self endon( "end_game" ); + self endon( "perk_abort_drinking" ); + self waittill_notify_or_timeout( "burp", 0.5 ); + self give_perk( perk, bought ); +} + +return_retained_perks() +{ + if ( isdefined( self._retain_perks_array ) ) + { + keys = getarraykeys( self._retain_perks_array ); + + foreach ( perk in keys ) + { + if ( isdefined( self._retain_perks_array[perk] ) && self._retain_perks_array[perk] ) + self give_perk( perk, 0 ); + } + } +} + +give_perk( perk, bought ) +{ + self setperk( perk ); + self.num_perks++; + + if ( isdefined( bought ) && bought ) + { + self maps\mp\zombies\_zm_audio::playerexert( "burp" ); + + if ( isdefined( level.remove_perk_vo_delay ) && level.remove_perk_vo_delay ) + self maps\mp\zombies\_zm_audio::perk_vox( perk ); + else + self delay_thread( 1.5, maps\mp\zombies\_zm_audio::perk_vox, perk ); + + self setblur( 4, 0.1 ); + wait 0.1; + self setblur( 0, 0.1 ); + self notify( "perk_bought", perk ); + } + + self perk_set_max_health_if_jugg( perk, 1, 0 ); + + if ( !( isdefined( level.disable_deadshot_clientfield ) && level.disable_deadshot_clientfield ) ) + { + if ( perk == "specialty_deadshot" ) + self setclientfieldtoplayer( "deadshot_perk", 1 ); + else if ( perk == "specialty_deadshot_upgrade" ) + self setclientfieldtoplayer( "deadshot_perk", 1 ); + } + + if ( perk == "specialty_scavenger" ) + self.hasperkspecialtytombstone = 1; + + players = get_players(); + + if ( use_solo_revive() && perk == "specialty_quickrevive" ) + { + self.lives = 1; + + if ( !isdefined( level.solo_lives_given ) ) + level.solo_lives_given = 0; + + if ( isdefined( level.solo_game_free_player_quickrevive ) ) + level.solo_game_free_player_quickrevive = undefined; + else + level.solo_lives_given++; + + if ( level.solo_lives_given >= 3 ) + flag_set( "solo_revive" ); + + self thread solo_revive_buy_trigger_move( perk ); + } + + if ( perk == "specialty_finalstand" ) + { + self.lives = 1; + self.hasperkspecialtychugabud = 1; + self notify( "perk_chugabud_activated" ); + } + + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].player_thread_give ) ) + self thread [[ level._custom_perks[perk].player_thread_give ]](); + + self set_perk_clientfield( perk, 1 ); + maps\mp\_demo::bookmark( "zm_player_perk", gettime(), self ); + self maps\mp\zombies\_zm_stats::increment_client_stat( "perks_drank" ); + self maps\mp\zombies\_zm_stats::increment_client_stat( perk + "_drank" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( perk + "_drank" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "perks_drank" ); + + if ( !isdefined( self.perk_history ) ) + self.perk_history = []; + + self.perk_history = add_to_array( self.perk_history, perk, 0 ); + + if ( !isdefined( self.perks_active ) ) + self.perks_active = []; + + self.perks_active[self.perks_active.size] = perk; + self notify( "perk_acquired" ); + self thread perk_think( perk ); +} + +perk_set_max_health_if_jugg( perk, set_premaxhealth, clamp_health_to_max_health ) +{ + max_total_health = undefined; + + if ( perk == "specialty_armorvest" ) + { + if ( set_premaxhealth ) + self.premaxhealth = self.maxhealth; + + max_total_health = level.zombie_vars["zombie_perk_juggernaut_health"]; + } + else if ( perk == "specialty_armorvest_upgrade" ) + { + if ( set_premaxhealth ) + self.premaxhealth = self.maxhealth; + + max_total_health = level.zombie_vars["zombie_perk_juggernaut_health_upgrade"]; + } + else if ( perk == "jugg_upgrade" ) + { + if ( set_premaxhealth ) + self.premaxhealth = self.maxhealth; + + if ( self hasperk( "specialty_armorvest" ) ) + max_total_health = level.zombie_vars["zombie_perk_juggernaut_health"]; + else + max_total_health = 100; + } + else if ( perk == "health_reboot" ) + max_total_health = 100; + + if ( isdefined( max_total_health ) ) + { + if ( self maps\mp\zombies\_zm_pers_upgrades_functions::pers_jugg_active() ) + max_total_health += level.pers_jugg_upgrade_health_bonus; + + self setmaxhealth( max_total_health ); + + if ( isdefined( clamp_health_to_max_health ) && clamp_health_to_max_health == 1 ) + { + if ( self.health > self.maxhealth ) + self.health = self.maxhealth; + } + } +} + +check_player_has_perk( perk ) +{ + self endon( "death" ); +/# + if ( getdvarint( _hash_FA81816F ) >= 5 ) + return; +#/ + dist = 16384; + + while ( true ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( distancesquared( players[i].origin, self.origin ) < dist ) + { + if ( !players[i] hasperk( perk ) && !players[i] has_perk_paused( perk ) && !players[i] in_revive_trigger() && !is_equipment_that_blocks_purchase( players[i] getcurrentweapon() ) && !players[i] hacker_active() ) + { + self setinvisibletoplayer( players[i], 0 ); + continue; + } + + self setinvisibletoplayer( players[i], 1 ); + } + } + + wait 0.1; + } +} + +vending_set_hintstring( perk ) +{ + switch ( perk ) + { + case "specialty_armorvest_upgrade": + case "specialty_armorvest": + break; + } +} + +perk_think( perk ) +{ +/# + if ( getdvarint( _hash_FA81816F ) >= 5 ) + { + if ( isdefined( self.perk_hud[perk] ) ) + return; + } +#/ + perk_str = perk + "_stop"; + result = self waittill_any_return( "fake_death", "death", "player_downed", perk_str ); + do_retain = 1; + + if ( use_solo_revive() && perk == "specialty_quickrevive" ) + do_retain = 0; + + if ( do_retain ) + { + if ( isdefined( self._retain_perks ) && self._retain_perks ) + return; + else if ( isdefined( self._retain_perks_array ) && ( isdefined( self._retain_perks_array[perk] ) && self._retain_perks_array[perk] ) ) + return; + } + + self unsetperk( perk ); + self.num_perks--; + + switch ( perk ) + { + case "specialty_armorvest": + self setmaxhealth( 100 ); + break; + case "specialty_additionalprimaryweapon": + if ( result == perk_str ) + self maps\mp\zombies\_zm::take_additionalprimaryweapon(); + + break; + case "specialty_deadshot": + if ( !( isdefined( level.disable_deadshot_clientfield ) && level.disable_deadshot_clientfield ) ) + self setclientfieldtoplayer( "deadshot_perk", 0 ); + + break; + case "specialty_deadshot_upgrade": + if ( !( isdefined( level.disable_deadshot_clientfield ) && level.disable_deadshot_clientfield ) ) + self setclientfieldtoplayer( "deadshot_perk", 0 ); + + break; + } + + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].player_thread_take ) ) + self thread [[ level._custom_perks[perk].player_thread_take ]](); + + self set_perk_clientfield( perk, 0 ); + self.perk_purchased = undefined; + + if ( isdefined( level.perk_lost_func ) ) + self [[ level.perk_lost_func ]]( perk ); + + if ( isdefined( self.perks_active ) && isinarray( self.perks_active, perk ) ) + arrayremovevalue( self.perks_active, perk, 0 ); + + self notify( "perk_lost" ); +} + +set_perk_clientfield( perk, state ) +{ + switch ( perk ) + { + case "specialty_additionalprimaryweapon": + self setclientfieldtoplayer( "perk_additional_primary_weapon", state ); + break; + case "specialty_deadshot": + self setclientfieldtoplayer( "perk_dead_shot", state ); + break; + case "specialty_flakjacket": + self setclientfieldtoplayer( "perk_dive_to_nuke", state ); + break; + case "specialty_rof": + self setclientfieldtoplayer( "perk_double_tap", state ); + break; + case "specialty_armorvest": + self setclientfieldtoplayer( "perk_juggernaut", state ); + break; + case "specialty_longersprint": + self setclientfieldtoplayer( "perk_marathon", state ); + break; + case "specialty_quickrevive": + self setclientfieldtoplayer( "perk_quick_revive", state ); + break; + case "specialty_fastreload": + self setclientfieldtoplayer( "perk_sleight_of_hand", state ); + break; + case "specialty_scavenger": + self setclientfieldtoplayer( "perk_tombstone", state ); + break; + case "specialty_finalstand": + self setclientfieldtoplayer( "perk_chugabud", state ); + break; + default: + break; + } + + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].clientfield_set ) ) + self [[ level._custom_perks[perk].clientfield_set ]]( state ); +} + +perk_hud_destroy( perk ) +{ + self.perk_hud[perk] destroy_hud(); + self.perk_hud[perk] = undefined; +} + +perk_hud_grey( perk, grey_on_off ) +{ + if ( grey_on_off ) + self.perk_hud[perk].alpha = 0.3; + else + self.perk_hud[perk].alpha = 1.0; +} + +perk_hud_flash() +{ + self endon( "death" ); + self.flash = 1; + self scaleovertime( 0.05, 32, 32 ); + wait 0.3; + self scaleovertime( 0.05, 24, 24 ); + wait 0.3; + self.flash = 0; +} + +perk_flash_audio( perk ) +{ + alias = undefined; + + switch ( perk ) + { + case "specialty_armorvest": + alias = "zmb_hud_flash_jugga"; + break; + case "specialty_quickrevive": + alias = "zmb_hud_flash_revive"; + break; + case "specialty_fastreload": + alias = "zmb_hud_flash_speed"; + break; + case "specialty_longersprint": + alias = "zmb_hud_flash_stamina"; + break; + case "specialty_flakjacket": + alias = "zmb_hud_flash_phd"; + break; + case "specialty_deadshot": + alias = "zmb_hud_flash_deadshot"; + break; + case "specialty_additionalprimaryweapon": + alias = "zmb_hud_flash_additionalprimaryweapon"; + break; + } + + if ( isdefined( alias ) ) + self playlocalsound( alias ); +} + +perk_hud_start_flash( perk ) +{ + if ( self hasperk( perk ) && isdefined( self.perk_hud ) ) + { + hud = self.perk_hud[perk]; + + if ( isdefined( hud ) ) + { + if ( !( isdefined( hud.flash ) && hud.flash ) ) + { + hud thread perk_hud_flash(); + self thread perk_flash_audio( perk ); + } + } + } +} + +perk_hud_stop_flash( perk, taken ) +{ + if ( self hasperk( perk ) && isdefined( self.perk_hud ) ) + { + hud = self.perk_hud[perk]; + + if ( isdefined( hud ) ) + { + hud.flash = undefined; + + if ( isdefined( taken ) ) + hud notify( "stop_flash_perk" ); + } + } +} + +perk_give_bottle_begin( perk ) +{ + self increment_is_drinking(); + self disable_player_move_states( 1 ); + gun = self getcurrentweapon(); + weapon = ""; + + switch ( perk ) + { + case "specialty_armorvest": + case " _upgrade": + weapon = level.machine_assets["juggernog"].weapon; + break; + case "specialty_quickrevive_upgrade": + case "specialty_quickrevive": + weapon = level.machine_assets["revive"].weapon; + break; + case "specialty_fastreload_upgrade": + case "specialty_fastreload": + weapon = level.machine_assets["speedcola"].weapon; + break; + case "specialty_rof_upgrade": + case "specialty_rof": + weapon = level.machine_assets["doubletap"].weapon; + break; + case "specialty_longersprint_upgrade": + case "specialty_longersprint": + weapon = level.machine_assets["marathon"].weapon; + break; + case "specialty_flakjacket_upgrade": + case "specialty_flakjacket": + weapon = level.machine_assets["divetonuke"].weapon; + break; + case "specialty_deadshot_upgrade": + case "specialty_deadshot": + weapon = level.machine_assets["deadshot"].weapon; + break; + case "specialty_additionalprimaryweapon_upgrade": + case "specialty_additionalprimaryweapon": + weapon = level.machine_assets["additionalprimaryweapon"].weapon; + break; + case "specialty_scavenger_upgrade": + case "specialty_scavenger": + weapon = level.machine_assets["tombstone"].weapon; + break; + case "specialty_finalstand_upgrade": + case "specialty_finalstand": + weapon = level.machine_assets["whoswho"].weapon; + break; + } + + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].perk_bottle ) ) + weapon = level._custom_perks[perk].perk_bottle; + + self giveweapon( weapon ); + self switchtoweapon( weapon ); + return gun; +} + +perk_give_bottle_end( gun, perk ) +{ + self endon( "perk_abort_drinking" ); + assert( !is_zombie_perk_bottle( gun ) ); + assert( gun != level.revive_tool ); + self enable_player_move_states(); + weapon = ""; + + switch ( perk ) + { + case "specialty_rof_upgrade": + case "specialty_rof": + weapon = level.machine_assets["doubletap"].weapon; + break; + case "specialty_longersprint_upgrade": + case "specialty_longersprint": + weapon = level.machine_assets["marathon"].weapon; + break; + case "specialty_flakjacket_upgrade": + case "specialty_flakjacket": + weapon = level.machine_assets["divetonuke"].weapon; + break; + case "specialty_armorvest_upgrade": + case "specialty_armorvest": + weapon = level.machine_assets["juggernog"].weapon; + self.jugg_used = 1; + break; + case "specialty_quickrevive_upgrade": + case "specialty_quickrevive": + weapon = level.machine_assets["revive"].weapon; + break; + case "specialty_fastreload_upgrade": + case "specialty_fastreload": + weapon = level.machine_assets["speedcola"].weapon; + self.speed_used = 1; + break; + case "specialty_deadshot_upgrade": + case "specialty_deadshot": + weapon = level.machine_assets["deadshot"].weapon; + break; + case "specialty_additionalprimaryweapon_upgrade": + case "specialty_additionalprimaryweapon": + weapon = level.machine_assets["additionalprimaryweapon"].weapon; + break; + case "specialty_scavenger_upgrade": + case "specialty_scavenger": + weapon = level.machine_assets["tombstone"].weapon; + break; + case "specialty_finalstand_upgrade": + case "specialty_finalstand": + weapon = level.machine_assets["whoswho"].weapon; + break; + } + + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].perk_bottle ) ) + weapon = level._custom_perks[perk].perk_bottle; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + { + self takeweapon( weapon ); + return; + } + + self takeweapon( weapon ); + + if ( self is_multiple_drinking() ) + { + self decrement_is_drinking(); + return; + } + else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment_that_blocks_purchase( gun ) ) + { + self switchtoweapon( gun ); + + if ( is_melee_weapon( gun ) ) + { + self decrement_is_drinking(); + return; + } + } + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + } + + self waittill( "weapon_change_complete" ); + + if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) ) + self decrement_is_drinking(); +} + +perk_abort_drinking( post_delay ) +{ + if ( self.is_drinking ) + { + self notify( "perk_abort_drinking" ); + self decrement_is_drinking(); + self enable_player_move_states(); + + if ( isdefined( post_delay ) ) + wait( post_delay ); + } +} + +give_random_perk() +{ + random_perk = undefined; + vending_triggers = getentarray( "zombie_vending", "targetname" ); + perks = []; + + for ( i = 0; i < vending_triggers.size; i++ ) + { + perk = vending_triggers[i].script_noteworthy; + + if ( isdefined( self.perk_purchased ) && self.perk_purchased == perk ) + continue; + + if ( perk == "specialty_weapupgrade" ) + continue; + + if ( !self hasperk( perk ) && !self has_perk_paused( perk ) ) + perks[perks.size] = perk; + } + + if ( perks.size > 0 ) + { + perks = array_randomize( perks ); + random_perk = perks[0]; + self give_perk( random_perk ); + } + else + self playsoundtoplayer( level.zmb_laugh_alias, self ); + + return random_perk; +} + +lose_random_perk() +{ + vending_triggers = getentarray( "zombie_vending", "targetname" ); + perks = []; + + for ( i = 0; i < vending_triggers.size; i++ ) + { + perk = vending_triggers[i].script_noteworthy; + + if ( isdefined( self.perk_purchased ) && self.perk_purchased == perk ) + continue; + + if ( self hasperk( perk ) || self has_perk_paused( perk ) ) + perks[perks.size] = perk; + } + + if ( perks.size > 0 ) + { + perks = array_randomize( perks ); + perk = perks[0]; + perk_str = perk + "_stop"; + self notify( perk_str ); + + if ( use_solo_revive() && perk == "specialty_quickrevive" ) + self.lives--; + } +} + +update_perk_hud() +{ + if ( isdefined( self.perk_hud ) ) + { + keys = getarraykeys( self.perk_hud ); + + for ( i = 0; i < self.perk_hud.size; i++ ) + self.perk_hud[keys[i]].x = i * 30; + } +} + +quantum_bomb_give_nearest_perk_validation( position ) +{ + vending_triggers = getentarray( "zombie_vending", "targetname" ); + range_squared = 32400; + + for ( i = 0; i < vending_triggers.size; i++ ) + { + if ( distancesquared( vending_triggers[i].origin, position ) < range_squared ) + return true; + } + + return false; +} + +quantum_bomb_give_nearest_perk_result( position ) +{ + [[ level.quantum_bomb_play_mystery_effect_func ]]( position ); + vending_triggers = getentarray( "zombie_vending", "targetname" ); + nearest = 0; + + for ( i = 1; i < vending_triggers.size; i++ ) + { + if ( distancesquared( vending_triggers[i].origin, position ) < distancesquared( vending_triggers[nearest].origin, position ) ) + nearest = i; + } + + players = get_players(); + perk = vending_triggers[nearest].script_noteworthy; + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( player.sessionstate == "spectator" || player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + continue; + + if ( !player hasperk( perk ) && ( !isdefined( player.perk_purchased ) || player.perk_purchased != perk ) && randomint( 5 ) ) + { + if ( player == self ) + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "quant_good" ); + + player give_perk( perk ); + player [[ level.quantum_bomb_play_player_effect_func ]](); + } + } +} + +perk_pause( perk ) +{ + if ( perk == "Pack_A_Punch" || perk == "specialty_weapupgrade" ) + return; + + for ( j = 0; j < get_players().size; j++ ) + { + player = get_players()[j]; + + if ( !isdefined( player.disabled_perks ) ) + player.disabled_perks = []; + + player.disabled_perks[perk] = isdefined( player.disabled_perks[perk] ) && player.disabled_perks[perk] || player hasperk( perk ); + + if ( player.disabled_perks[perk] ) + { + player unsetperk( perk ); + player set_perk_clientfield( perk, 2 ); + + if ( perk == "specialty_armorvest" || perk == "specialty_armorvest_upgrade" ) + { + player setmaxhealth( player.premaxhealth ); + + if ( player.health > player.maxhealth ) + player.health = player.maxhealth; + } + + if ( perk == "specialty_additionalprimaryweapon" || perk == "specialty_additionalprimaryweapon_upgrade" ) + player maps\mp\zombies\_zm::take_additionalprimaryweapon(); + + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].player_thread_take ) ) + player thread [[ level._custom_perks[perk].player_thread_take ]](); +/# + println( " ZM PERKS " + player.name + " paused perk " + perk + "\\n" ); +#/ + } + } +} + +perk_unpause( perk ) +{ + if ( !isdefined( perk ) ) + return; + + if ( perk == "Pack_A_Punch" ) + return; + + for ( j = 0; j < get_players().size; j++ ) + { + player = get_players()[j]; + + if ( isdefined( player.disabled_perks ) && ( isdefined( player.disabled_perks[perk] ) && player.disabled_perks[perk] ) ) + { + player.disabled_perks[perk] = 0; + player set_perk_clientfield( perk, 1 ); + player setperk( perk ); +/# + println( " ZM PERKS " + player.name + " unpaused perk " + perk + "\\n" ); +#/ + if ( issubstr( perk, "specialty_scavenger" ) ) + player.hasperkspecialtytombstone = 1; + + player perk_set_max_health_if_jugg( perk, 0, 0 ); + + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].player_thread_give ) ) + player thread [[ level._custom_perks[perk].player_thread_give ]](); + } + } +} + +perk_pause_all_perks() +{ + vending_triggers = getentarray( "zombie_vending", "targetname" ); + + foreach ( trigger in vending_triggers ) + maps\mp\zombies\_zm_perks::perk_pause( trigger.script_noteworthy ); +} + +perk_unpause_all_perks() +{ + vending_triggers = getentarray( "zombie_vending", "targetname" ); + + foreach ( trigger in vending_triggers ) + maps\mp\zombies\_zm_perks::perk_unpause( trigger.script_noteworthy ); +} + +has_perk_paused( perk ) +{ + if ( isdefined( self.disabled_perks ) && isdefined( self.disabled_perks[perk] ) && self.disabled_perks[perk] ) + return true; + + return false; +} + +getvendingmachinenotify() +{ + if ( !isdefined( self ) ) + return ""; + + switch ( self.script_noteworthy ) + { + case "specialty_armorvest_upgrade": + case "specialty_armorvest": + return "juggernog"; + break; + case "specialty_quickrevive_upgrade": + case "specialty_quickrevive": + return "revive"; + break; + case "specialty_fastreload_upgrade": + case "specialty_fastreload": + return "sleight"; + break; + case "specialty_rof_upgrade": + case "specialty_rof": + return "doubletap"; + break; + case "specialty_longersprint_upgrade": + case "specialty_longersprint": + return "marathon"; + break; + case "specialty_flakjacket_upgrade": + case "specialty_flakjacket": + return "divetonuke"; + break; + case "specialty_deadshot_upgrade": + case "specialty_deadshot": + return "deadshot"; + break; + case "specialty_additionalprimaryweapon_upgrade": + case "specialty_additionalprimaryweapon": + return "additionalprimaryweapon"; + break; + case "specialty_scavenger_upgrade": + case "specialty_scavenger": + return "tombstone"; + break; + case "specialty_finalstand_upgrade": + case "specialty_finalstand": + return "chugabud"; + break; + case "specialty_weapupgrade": + return "Pack_A_Punch"; + } + + str_perk = undefined; + + if ( isdefined( level._custom_perks[self.script_noteworthy] ) && isdefined( isdefined( level._custom_perks[self.script_noteworthy].alias ) ) ) + str_perk = level._custom_perks[self.script_noteworthy].alias; + + return str_perk; +} + +perk_machine_removal( machine, replacement_model ) +{ + if ( !isdefined( machine ) ) + return; + + trig = getent( machine, "script_noteworthy" ); + machine_model = undefined; + + if ( isdefined( trig ) ) + { + trig notify( "warning_dialog" ); + + if ( isdefined( trig.target ) ) + { + parts = getentarray( trig.target, "targetname" ); + + for ( i = 0; i < parts.size; i++ ) + { + if ( isdefined( parts[i].classname ) && parts[i].classname == "script_model" ) + { + machine_model = parts[i]; + continue; + } + + if ( isdefined( parts[i].script_noteworthy && parts[i].script_noteworthy == "clip" ) ) + { + model_clip = parts[i]; + continue; + } + + parts[i] delete(); + } + } + + if ( isdefined( replacement_model ) && isdefined( machine_model ) ) + machine_model setmodel( replacement_model ); + else if ( !isdefined( replacement_model ) && isdefined( machine_model ) ) + { + machine_model delete(); + + if ( isdefined( model_clip ) ) + model_clip delete(); + + if ( isdefined( trig.clip ) ) + trig.clip delete(); + } + + if ( isdefined( trig.bump ) ) + trig.bump delete(); + + trig delete(); + } +} + +perk_machine_spawn_init() +{ + match_string = ""; + location = level.scr_zm_map_start_location; + + if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) ) + location = level.default_start_location; + + match_string = level.scr_zm_ui_gametype + "_perks_" + location; + pos = []; + + if ( isdefined( level.override_perk_targetname ) ) + structs = getstructarray( level.override_perk_targetname, "targetname" ); + else + structs = getstructarray( "zm_perk_machine", "targetname" ); + + foreach ( struct in structs ) + { + if ( isdefined( struct.script_string ) ) + { + tokens = strtok( struct.script_string, " " ); + + foreach ( token in tokens ) + { + if ( token == match_string ) + pos[pos.size] = struct; + } + + continue; + } + + pos[pos.size] = struct; + } + + if ( !isdefined( pos ) || pos.size == 0 ) + return; + + precachemodel( "zm_collision_perks1" ); + + for ( i = 0; i < pos.size; i++ ) + { + perk = pos[i].script_noteworthy; + + if ( isdefined( perk ) && isdefined( pos[i].model ) ) + { + use_trigger = spawn( "trigger_radius_use", pos[i].origin + vectorscale( ( 0, 0, 1 ), 30.0 ), 0, 40, 70 ); + use_trigger.targetname = "zombie_vending"; + use_trigger.script_noteworthy = perk; + use_trigger triggerignoreteam(); + perk_machine = spawn( "script_model", pos[i].origin ); + perk_machine.angles = pos[i].angles; + perk_machine setmodel( pos[i].model ); + + if ( isdefined( level._no_vending_machine_bump_trigs ) && level._no_vending_machine_bump_trigs ) + bump_trigger = undefined; + else + { + bump_trigger = spawn( "trigger_radius", pos[i].origin, 0, 35, 64 ); + bump_trigger.script_activated = 1; + bump_trigger.script_sound = "zmb_perks_bump_bottle"; + bump_trigger.targetname = "audio_bump_trigger"; + + if ( perk != "specialty_weapupgrade" ) + bump_trigger thread thread_bump_trigger(); + } + + collision = spawn( "script_model", pos[i].origin, 1 ); + collision.angles = pos[i].angles; + collision setmodel( "zm_collision_perks1" ); + collision.script_noteworthy = "clip"; + collision disconnectpaths(); + use_trigger.clip = collision; + use_trigger.machine = perk_machine; + use_trigger.bump = bump_trigger; + + if ( isdefined( pos[i].blocker_model ) ) + use_trigger.blocker_model = pos[i].blocker_model; + + if ( isdefined( pos[i].script_int ) ) + perk_machine.script_int = pos[i].script_int; + + if ( isdefined( pos[i].turn_on_notify ) ) + perk_machine.turn_on_notify = pos[i].turn_on_notify; + + switch ( perk ) + { + case "specialty_quickrevive_upgrade": + case "specialty_quickrevive": + use_trigger.script_sound = "mus_perks_revive_jingle"; + use_trigger.script_string = "revive_perk"; + use_trigger.script_label = "mus_perks_revive_sting"; + use_trigger.target = "vending_revive"; + perk_machine.script_string = "revive_perk"; + perk_machine.targetname = "vending_revive"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "revive_perk"; + + break; + case "specialty_fastreload_upgrade": + case "specialty_fastreload": + use_trigger.script_sound = "mus_perks_speed_jingle"; + use_trigger.script_string = "speedcola_perk"; + use_trigger.script_label = "mus_perks_speed_sting"; + use_trigger.target = "vending_sleight"; + perk_machine.script_string = "speedcola_perk"; + perk_machine.targetname = "vending_sleight"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "speedcola_perk"; + + break; + case "specialty_longersprint_upgrade": + case "specialty_longersprint": + use_trigger.script_sound = "mus_perks_stamin_jingle"; + use_trigger.script_string = "marathon_perk"; + use_trigger.script_label = "mus_perks_stamin_sting"; + use_trigger.target = "vending_marathon"; + perk_machine.script_string = "marathon_perk"; + perk_machine.targetname = "vending_marathon"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "marathon_perk"; + + break; + case "specialty_armorvest_upgrade": + case "specialty_armorvest": + use_trigger.script_sound = "mus_perks_jugganog_jingle"; + use_trigger.script_string = "jugg_perk"; + use_trigger.script_label = "mus_perks_jugganog_sting"; + use_trigger.longjinglewait = 1; + use_trigger.target = "vending_jugg"; + perk_machine.script_string = "jugg_perk"; + perk_machine.targetname = "vending_jugg"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "jugg_perk"; + + break; + case "specialty_scavenger_upgrade": + case "specialty_scavenger": + use_trigger.script_sound = "mus_perks_tombstone_jingle"; + use_trigger.script_string = "tombstone_perk"; + use_trigger.script_label = "mus_perks_tombstone_sting"; + use_trigger.target = "vending_tombstone"; + perk_machine.script_string = "tombstone_perk"; + perk_machine.targetname = "vending_tombstone"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "tombstone_perk"; + + break; + case "specialty_rof_upgrade": + case "specialty_rof": + use_trigger.script_sound = "mus_perks_doubletap_jingle"; + use_trigger.script_string = "tap_perk"; + use_trigger.script_label = "mus_perks_doubletap_sting"; + use_trigger.target = "vending_doubletap"; + perk_machine.script_string = "tap_perk"; + perk_machine.targetname = "vending_doubletap"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "tap_perk"; + + break; + case "specialty_finalstand_upgrade": + case "specialty_finalstand": + use_trigger.script_sound = "mus_perks_whoswho_jingle"; + use_trigger.script_string = "tap_perk"; + use_trigger.script_label = "mus_perks_whoswho_sting"; + use_trigger.target = "vending_chugabud"; + perk_machine.script_string = "tap_perk"; + perk_machine.targetname = "vending_chugabud"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "tap_perk"; + + break; + case "specialty_additionalprimaryweapon_upgrade": + case "specialty_additionalprimaryweapon": + use_trigger.script_sound = "mus_perks_mulekick_jingle"; + use_trigger.script_string = "tap_perk"; + use_trigger.script_label = "mus_perks_mulekick_sting"; + use_trigger.target = "vending_additionalprimaryweapon"; + perk_machine.script_string = "tap_perk"; + perk_machine.targetname = "vending_additionalprimaryweapon"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "tap_perk"; + + break; + case "specialty_weapupgrade": + use_trigger.target = "vending_packapunch"; + use_trigger.script_sound = "mus_perks_packa_jingle"; + use_trigger.script_label = "mus_perks_packa_sting"; + use_trigger.longjinglewait = 1; + perk_machine.targetname = "vending_packapunch"; + flag_pos = getstruct( pos[i].target, "targetname" ); + + if ( isdefined( flag_pos ) ) + { + perk_machine_flag = spawn( "script_model", flag_pos.origin ); + perk_machine_flag.angles = flag_pos.angles; + perk_machine_flag setmodel( flag_pos.model ); + perk_machine_flag.targetname = "pack_flag"; + perk_machine.target = "pack_flag"; + } + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "perks_rattle"; + + break; + case "specialty_deadshot_upgrade": + case "specialty_deadshot": + use_trigger.script_sound = "mus_perks_deadshot_jingle"; + use_trigger.script_string = "deadshot_perk"; + use_trigger.script_label = "mus_perks_deadshot_sting"; + use_trigger.target = "vending_deadshot"; + perk_machine.script_string = "deadshot_vending"; + perk_machine.targetname = "vending_deadshot_model"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "deadshot_vending"; + + break; + default: + use_trigger.script_sound = "mus_perks_speed_jingle"; + use_trigger.script_string = "speedcola_perk"; + use_trigger.script_label = "mus_perks_speed_sting"; + use_trigger.target = "vending_sleight"; + perk_machine.script_string = "speedcola_perk"; + perk_machine.targetname = "vending_sleight"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "speedcola_perk"; + + break; + } + + if ( isdefined( level._custom_perks[perk] ) && isdefined( level._custom_perks[perk].perk_machine_set_kvps ) ) + [[ level._custom_perks[perk].perk_machine_set_kvps ]]( use_trigger, perk_machine, bump_trigger, collision ); + } + } +} + +get_perk_machine_start_state( perk ) +{ + if ( isdefined( level.vending_machines_powered_on_at_start ) && level.vending_machines_powered_on_at_start ) + return 1; + + if ( perk == "specialty_quickrevive" || perk == "specialty_quickrevive_upgrade" ) + { + assert( isdefined( level.revive_machine_is_solo ) ); + return level.revive_machine_is_solo; + } + + return 0; +} + +perks_register_clientfield() +{ + if ( isdefined( level.zombiemode_using_additionalprimaryweapon_perk ) && level.zombiemode_using_additionalprimaryweapon_perk ) + registerclientfield( "toplayer", "perk_additional_primary_weapon", 1, 2, "int" ); + + if ( isdefined( level.zombiemode_using_deadshot_perk ) && level.zombiemode_using_deadshot_perk ) + registerclientfield( "toplayer", "perk_dead_shot", 1, 2, "int" ); + + if ( isdefined( level.zombiemode_using_doubletap_perk ) && level.zombiemode_using_doubletap_perk ) + registerclientfield( "toplayer", "perk_double_tap", 1, 2, "int" ); + + if ( isdefined( level.zombiemode_using_juggernaut_perk ) && level.zombiemode_using_juggernaut_perk ) + registerclientfield( "toplayer", "perk_juggernaut", 1, 2, "int" ); + + if ( isdefined( level.zombiemode_using_marathon_perk ) && level.zombiemode_using_marathon_perk ) + registerclientfield( "toplayer", "perk_marathon", 1, 2, "int" ); + + if ( isdefined( level.zombiemode_using_revive_perk ) && level.zombiemode_using_revive_perk ) + registerclientfield( "toplayer", "perk_quick_revive", 1, 2, "int" ); + + if ( isdefined( level.zombiemode_using_sleightofhand_perk ) && level.zombiemode_using_sleightofhand_perk ) + registerclientfield( "toplayer", "perk_sleight_of_hand", 1, 2, "int" ); + + if ( isdefined( level.zombiemode_using_tombstone_perk ) && level.zombiemode_using_tombstone_perk ) + registerclientfield( "toplayer", "perk_tombstone", 1, 2, "int" ); + + if ( isdefined( level.zombiemode_using_perk_intro_fx ) && level.zombiemode_using_perk_intro_fx ) + registerclientfield( "scriptmover", "clientfield_perk_intro_fx", 1000, 1, "int" ); + + if ( isdefined( level.zombiemode_using_chugabud_perk ) && level.zombiemode_using_chugabud_perk ) + registerclientfield( "toplayer", "perk_chugabud", 1000, 1, "int" ); + + if ( isdefined( level._custom_perks ) ) + { + a_keys = getarraykeys( level._custom_perks ); + + for ( i = 0; i < a_keys.size; i++ ) + { + if ( isdefined( level._custom_perks[a_keys[i]].clientfield_register ) ) + level [[ level._custom_perks[a_keys[i]].clientfield_register ]](); + } + } +} + +thread_bump_trigger() +{ + for (;;) + { + self waittill( "trigger", trigplayer ); + + trigplayer playsound( self.script_sound ); + + while ( is_player_valid( trigplayer ) && trigplayer istouching( self ) ) + wait 0.5; + } +} + +reenable_quickrevive( machine_clip, solo_mode ) +{ + if ( isdefined( level.revive_machine_spawned ) && !is_true( level.revive_machine_spawned ) ) + return; + + wait 0.1; + power_state = 0; + + if ( is_true( solo_mode ) ) + { + power_state = 1; + should_pause = 1; + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( player.lives ) && player.lives > 0 && power_state ) + { + should_pause = 0; + continue; + } + + if ( isdefined( player.lives ) && player.lives < 1 ) + should_pause = 1; + } + + if ( should_pause ) + perk_pause( "specialty_quickrevive" ); + else + perk_unpause( "specialty_quickrevive" ); + + if ( isdefined( level.solo_revive_init ) && level.solo_revive_init && flag( "solo_revive" ) ) + { + disable_quickrevive( machine_clip ); + return; + } + + update_quickrevive_power_state( 1 ); + unhide_quickrevive(); + restart_quickrevive(); + level notify( "revive_off" ); + wait 0.1; + level notify( "stop_quickrevive_logic" ); + } + else + { + if ( !( isdefined( level._dont_unhide_quickervive_on_hotjoin ) && level._dont_unhide_quickervive_on_hotjoin ) ) + { + unhide_quickrevive(); + level notify( "revive_off" ); + wait 0.1; + } + + level notify( "revive_hide" ); + level notify( "stop_quickrevive_logic" ); + restart_quickrevive(); + + if ( flag( "power_on" ) ) + power_state = 1; + + update_quickrevive_power_state( power_state ); + } + + level thread turn_revive_on(); + + if ( power_state ) + { + perk_unpause( "specialty_quickrevive" ); + level notify( "revive_on" ); + wait 0.1; + level notify( "specialty_quickrevive_power_on" ); + } + else + perk_pause( "specialty_quickrevive" ); + + if ( !is_true( solo_mode ) ) + return; + + should_pause = 1; + players = get_players(); + + foreach ( player in players ) + { + if ( !is_player_valid( player ) ) + continue; + + if ( player hasperk( "specialty_quickrevive" ) ) + { + if ( !isdefined( player.lives ) ) + player.lives = 0; + + if ( !isdefined( level.solo_lives_given ) ) + level.solo_lives_given = 0; + + level.solo_lives_given++; + player.lives++; + + if ( isdefined( player.lives ) && player.lives > 0 && power_state ) + { + should_pause = 0; + continue; + } + + should_pause = 1; + } + } + + if ( should_pause ) + perk_pause( "specialty_quickrevive" ); + else + perk_unpause( "specialty_quickrevive" ); +} + +update_quickrevive_power_state( poweron ) +{ + foreach ( item in level.powered_items ) + { + if ( isdefined( item.target ) && isdefined( item.target.script_noteworthy ) && item.target.script_noteworthy == "specialty_quickrevive" ) + { + if ( item.power && !poweron ) + { + if ( !isdefined( item.powered_count ) ) + item.powered_count = 0; + else if ( item.powered_count > 0 ) + item.powered_count--; + } + else if ( !item.power && poweron ) + { + if ( !isdefined( item.powered_count ) ) + item.powered_count = 0; + + item.powered_count++; + } + + if ( !isdefined( item.depowered_count ) ) + item.depowered_count = 0; + + item.power = poweron; + } + } +} + +restart_quickrevive() +{ + triggers = getentarray( "zombie_vending", "targetname" ); + + foreach ( trigger in triggers ) + { + if ( !isdefined( trigger.script_noteworthy ) ) + continue; + + if ( trigger.script_noteworthy == "specialty_quickrevive" || trigger.script_noteworthy == "specialty_quickrevive_upgrade" ) + { + trigger notify( "stop_quickrevive_logic" ); + trigger thread vending_trigger_think(); + trigger trigger_on(); + } + } +} + +disable_quickrevive( machine_clip ) +{ + if ( is_true( level.solo_revive_init ) && flag( "solo_revive" ) && isdefined( level.quick_revive_machine ) ) + { + triggers = getentarray( "zombie_vending", "targetname" ); + + foreach ( trigger in triggers ) + { + if ( !isdefined( trigger.script_noteworthy ) ) + continue; + + if ( trigger.script_noteworthy == "specialty_quickrevive" || trigger.script_noteworthy == "specialty_quickrevive_upgrade" ) + trigger trigger_off(); + } + + foreach ( item in level.powered_items ) + { + if ( isdefined( item.target ) && isdefined( item.target.script_noteworthy ) && item.target.script_noteworthy == "specialty_quickrevive" ) + { + item.power = 1; + item.self_powered = 1; + } + } + + if ( isdefined( level.quick_revive_machine.original_pos ) ) + { + level.quick_revive_default_origin = level.quick_revive_machine.original_pos; + level.quick_revive_default_angles = level.quick_revive_machine.original_angles; + } + + move_org = level.quick_revive_default_origin; + + if ( isdefined( level.quick_revive_linked_ent ) ) + { + move_org = level.quick_revive_linked_ent.origin; + + if ( isdefined( level.quick_revive_linked_ent_offset ) ) + move_org += level.quick_revive_linked_ent_offset; + + level.quick_revive_machine unlink(); + } + + level.quick_revive_machine moveto( move_org + vectorscale( ( 0, 0, 1 ), 40.0 ), 3 ); + direction = level.quick_revive_machine.origin; + direction = ( direction[1], direction[0], 0 ); + + if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 ) + direction = ( direction[0], direction[1] * -1, 0 ); + else if ( direction[0] < 0 ) + direction = ( direction[0] * -1, direction[1], 0 ); + + level.quick_revive_machine vibrate( direction, 10, 0.5, 4 ); + + level.quick_revive_machine waittill( "movedone" ); + + level.quick_revive_machine hide(); + level.quick_revive_machine.ishidden = 1; + + if ( isdefined( level.quick_revive_machine_clip ) ) + { + level.quick_revive_machine_clip connectpaths(); + level.quick_revive_machine_clip trigger_off(); + } + + playfx( level._effect["poltergeist"], level.quick_revive_machine.origin ); + + if ( isdefined( level.quick_revive_trigger ) && isdefined( level.quick_revive_trigger.blocker_model ) ) + level.quick_revive_trigger.blocker_model show(); + + level notify( "revive_hide" ); + } +} + +unhide_quickrevive() +{ + while ( players_are_in_perk_area( level.quick_revive_machine ) ) + wait 0.1; + + if ( isdefined( level.quick_revive_machine_clip ) ) + { + level.quick_revive_machine_clip trigger_on(); + level.quick_revive_machine_clip disconnectpaths(); + } + + if ( isdefined( level.quick_revive_final_pos ) ) + level.quick_revive_machine.origin = level.quick_revive_final_pos; + + playfx( level._effect["poltergeist"], level.quick_revive_machine.origin ); + + if ( isdefined( level.quick_revive_trigger ) && isdefined( level.quick_revive_trigger.blocker_model ) ) + level.quick_revive_trigger.blocker_model hide(); + + level.quick_revive_machine show(); + + if ( isdefined( level.quick_revive_machine.original_pos ) ) + { + level.quick_revive_default_origin = level.quick_revive_machine.original_pos; + level.quick_revive_default_angles = level.quick_revive_machine.original_angles; + } + + direction = level.quick_revive_machine.origin; + direction = ( direction[1], direction[0], 0 ); + + if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 ) + direction = ( direction[0], direction[1] * -1, 0 ); + else if ( direction[0] < 0 ) + direction = ( direction[0] * -1, direction[1], 0 ); + + org = level.quick_revive_default_origin; + + if ( isdefined( level.quick_revive_linked_ent ) ) + { + org = level.quick_revive_linked_ent.origin; + + if ( isdefined( level.quick_revive_linked_ent_offset ) ) + org += level.quick_revive_linked_ent_offset; + } + + if ( !( isdefined( level.quick_revive_linked_ent_moves ) && level.quick_revive_linked_ent_moves ) && level.quick_revive_machine.origin != org ) + { + level.quick_revive_machine moveto( org, 3 ); + level.quick_revive_machine vibrate( direction, 10, 0.5, 2.9 ); + + level.quick_revive_machine waittill( "movedone" ); + + level.quick_revive_machine.angles = level.quick_revive_default_angles; + } + else + { + if ( isdefined( level.quick_revive_linked_ent ) ) + { + org = level.quick_revive_linked_ent.origin; + + if ( isdefined( level.quick_revive_linked_ent_offset ) ) + org += level.quick_revive_linked_ent_offset; + + level.quick_revive_machine.origin = org; + } + + level.quick_revive_machine vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + } + + if ( isdefined( level.quick_revive_linked_ent ) ) + level.quick_revive_machine linkto( level.quick_revive_linked_ent ); + + level.quick_revive_machine.ishidden = 0; +} + +players_are_in_perk_area( perk_machine ) +{ + perk_area_origin = level.quick_revive_default_origin; + + if ( isdefined( perk_machine._linked_ent ) ) + { + perk_area_origin = perk_machine._linked_ent.origin; + + if ( isdefined( perk_machine._linked_ent_offset ) ) + perk_area_origin += perk_machine._linked_ent_offset; + } + + in_area = 0; + players = get_players(); + dist_check = 9216; + + foreach ( player in players ) + { + if ( distancesquared( player.origin, perk_area_origin ) < dist_check ) + return true; + } + + return false; +} + +perk_hostmigration() +{ + level endon( "end_game" ); + level notify( "perk_hostmigration" ); + level endon( "perk_hostmigration" ); + + while ( true ) + { + level waittill( "host_migration_end" ); + + jug = getentarray( "vending_jugg", "targetname" ); + tap = getentarray( "vending_doubletap", "targetname" ); + mar = getentarray( "vending_marathon", "targetname" ); + deadshot = getentarray( "vending_deadshot", "targetname" ); + tomb = getentarray( "vending_tombstone", "targetname" ); + extraweap = getentarray( "vending_additionalprimaryweapon", "targetname" ); + sleight = getentarray( "vending_sleight", "targetname" ); + revive = getentarray( "vending_revive", "targetname" ); + chugabud = getentarray( "vending_chugabud", "targetname" ); + + foreach ( perk in jug ) + { + if ( isdefined( perk.model ) && perk.model == level.machine_assets["juggernog"].on_model ) + { + perk perk_fx( undefined, 1 ); + perk thread perk_fx( "jugger_light" ); + } + } + + foreach ( perk in tap ) + { + if ( isdefined( perk.model ) && perk.model == level.machine_assets["doubletap"].on_model ) + { + perk perk_fx( undefined, 1 ); + perk thread perk_fx( "doubletap_light" ); + } + } + + foreach ( perk in mar ) + { + if ( isdefined( perk.model ) && perk.model == level.machine_assets["marathon"].on_model ) + { + perk perk_fx( undefined, 1 ); + perk thread perk_fx( "marathon_light" ); + } + } + + foreach ( perk in deadshot ) + { + if ( isdefined( perk.model ) && perk.model == level.machine_assets["deadshot"].on_model ) + { + perk perk_fx( undefined, 1 ); + perk thread perk_fx( "deadshot_light" ); + } + } + + foreach ( perk in tomb ) + { + if ( isdefined( perk.model ) && perk.model == level.machine_assets["tombstone"].on_model ) + { + perk perk_fx( undefined, 1 ); + perk thread perk_fx( "tombstone_light" ); + } + } + + foreach ( perk in extraweap ) + { + if ( isdefined( perk.model ) && perk.model == level.machine_assets["additionalprimaryweapon"].on_model ) + { + perk perk_fx( undefined, 1 ); + perk thread perk_fx( "additionalprimaryweapon_light" ); + } + } + + foreach ( perk in sleight ) + { + if ( isdefined( perk.model ) && perk.model == level.machine_assets["speedcola"].on_model ) + { + perk perk_fx( undefined, 1 ); + perk thread perk_fx( "sleight_light" ); + } + } + + foreach ( perk in revive ) + { + if ( isdefined( perk.model ) && perk.model == level.machine_assets["revive"].on_model ) + { + perk perk_fx( undefined, 1 ); + perk thread perk_fx( "revive_light" ); + } + } + + foreach ( perk in chugabud ) + { + if ( isdefined( perk.model ) && perk.model == level.machine_assets["revive"].on_model ) + { + perk perk_fx( undefined, 1 ); + perk thread perk_fx( "tombstone_light" ); + } + } + + if ( level._custom_perks.size > 0 ) + { + a_keys = getarraykeys( level._custom_perks ); + + for ( i = 0; i < a_keys.size; i++ ) + { + if ( isdefined( level._custom_perks[a_keys[i]].host_migration_func ) ) + level thread [[ level._custom_perks[a_keys[i]].host_migration_func ]](); + } + } + } +} + +get_perk_array( ignore_chugabud ) +{ + perk_array = []; + + if ( self hasperk( "specialty_armorvest" ) ) + perk_array[perk_array.size] = "specialty_armorvest"; + + if ( self hasperk( "specialty_deadshot" ) ) + perk_array[perk_array.size] = "specialty_deadshot"; + + if ( self hasperk( "specialty_fastreload" ) ) + perk_array[perk_array.size] = "specialty_fastreload"; + + if ( self hasperk( "specialty_flakjacket" ) ) + perk_array[perk_array.size] = "specialty_flakjacket"; + + if ( self hasperk( "specialty_longersprint" ) ) + perk_array[perk_array.size] = "specialty_longersprint"; + + if ( self hasperk( "specialty_quickrevive" ) ) + perk_array[perk_array.size] = "specialty_quickrevive"; + + if ( self hasperk( "specialty_rof" ) ) + perk_array[perk_array.size] = "specialty_rof"; + + if ( self hasperk( "specialty_additionalprimaryweapon" ) ) + perk_array[perk_array.size] = "specialty_additionalprimaryweapon"; + + if ( !isdefined( ignore_chugabud ) || ignore_chugabud == 0 ) + { + if ( self hasperk( "specialty_finalstand" ) ) + perk_array[perk_array.size] = "specialty_finalstand"; + } + + if ( level._custom_perks.size > 0 ) + { + a_keys = getarraykeys( level._custom_perks ); + + for ( i = 0; i < a_keys.size; i++ ) + { + if ( self hasperk( a_keys[i] ) ) + perk_array[perk_array.size] = a_keys[i]; + } + } + + return perk_array; +} + +initialize_custom_perk_arrays() +{ + if ( !isdefined( level._custom_perks ) ) + level._custom_perks = []; +} + +register_perk_basic_info( str_perk, str_alias, n_perk_cost, str_hint_string, str_perk_bottle_weapon ) +{ + assert( isdefined( str_perk ), "str_perk is a required argument for register_perk_basic_info!" ); + assert( isdefined( str_alias ), "str_alias is a required argument for register_perk_basic_info!" ); + assert( isdefined( n_perk_cost ), "n_perk_cost is a required argument for register_perk_basic_info!" ); + assert( isdefined( str_hint_string ), "str_hint_string is a required argument for register_perk_basic_info!" ); + assert( isdefined( str_perk_bottle_weapon ), "str_perk_bottle_weapon is a required argument for register_perk_basic_info!" ); + _register_undefined_perk( str_perk ); + level._custom_perks[str_perk].alias = str_perk; + level._custom_perks[str_perk].cost = n_perk_cost; + level._custom_perks[str_perk].hint_string = str_hint_string; + level._custom_perks[str_perk].perk_bottle = str_perk_bottle_weapon; +} + +register_perk_machine( str_perk, func_perk_machine_setup, func_perk_machine_thread ) +{ + assert( isdefined( str_perk ), "str_perk is a required argument for register_perk_machine!" ); + assert( isdefined( func_perk_machine_setup ), "func_perk_machine_setup is a required argument for register_perk_machine!" ); + assert( isdefined( func_perk_machine_thread ), "func_perk_machine_thread is a required argument for register_perk_machine!" ); + _register_undefined_perk( str_perk ); + + if ( !isdefined( level._custom_perks[str_perk].perk_machine_set_kvps ) ) + level._custom_perks[str_perk].perk_machine_set_kvps = func_perk_machine_setup; + + if ( !isdefined( level._custom_perks[str_perk].perk_machine_thread ) ) + level._custom_perks[str_perk].perk_machine_thread = func_perk_machine_thread; +} + +register_perk_precache_func( str_perk, func_precache ) +{ + assert( isdefined( str_perk ), "str_perk is a required argument for register_perk_precache_func!" ); + assert( isdefined( func_precache ), "func_precache is a required argument for register_perk_precache_func!" ); + _register_undefined_perk( str_perk ); + + if ( !isdefined( level._custom_perks[str_perk].precache_func ) ) + level._custom_perks[str_perk].precache_func = func_precache; +} + +register_perk_threads( str_perk, func_give_player_perk, func_take_player_perk ) +{ + assert( isdefined( str_perk ), "str_perk is a required argument for register_perk_threads!" ); + assert( isdefined( func_give_player_perk ), "func_give_player_perk is a required argument for register_perk_threads!" ); + _register_undefined_perk( str_perk ); + + if ( !isdefined( level._custom_perks[str_perk].player_thread_give ) ) + level._custom_perks[str_perk].player_thread_give = func_give_player_perk; + + if ( isdefined( func_take_player_perk ) ) + { + if ( !isdefined( level._custom_perks[str_perk].player_thread_take ) ) + level._custom_perks[str_perk].player_thread_take = func_take_player_perk; + } +} + +register_perk_clientfields( str_perk, func_clientfield_register, func_clientfield_set ) +{ + assert( isdefined( str_perk ), "str_perk is a required argument for register_perk_clientfields!" ); + assert( isdefined( func_clientfield_register ), "func_clientfield_register is a required argument for register_perk_clientfields!" ); + assert( isdefined( func_clientfield_set ), "func_clientfield_set is a required argument for register_perk_clientfields!" ); + _register_undefined_perk( str_perk ); + + if ( !isdefined( level._custom_perks[str_perk].clientfield_register ) ) + level._custom_perks[str_perk].clientfield_register = func_clientfield_register; + + if ( !isdefined( level._custom_perks[str_perk].clientfield_set ) ) + level._custom_perks[str_perk].clientfield_set = func_clientfield_set; +} + +register_perk_host_migration_func( str_perk, func_host_migration ) +{ + assert( isdefined( str_perk ), "str_perk is a required argument for register_perk_host_migration_func!" ); + assert( isdefined( func_host_migration ), "func_host_migration is a required argument for register_perk_host_migration_func!" ); + _register_undefined_perk( str_perk ); + + if ( !isdefined( level._custom_perks[str_perk].host_migration_func ) ) + level._custom_perks[str_perk].host_migration_func = func_host_migration; +} + +_register_undefined_perk( str_perk ) +{ + if ( !isdefined( level._custom_perks ) ) + level._custom_perks = []; + + if ( !isdefined( level._custom_perks[str_perk] ) ) + level._custom_perks[str_perk] = spawnstruct(); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_pers_upgrades.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_pers_upgrades.gsc new file mode 100644 index 0000000..29557ea --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_pers_upgrades.gsc @@ -0,0 +1,684 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_pers_upgrades_system; +#include maps\mp\zombies\_zm_pers_upgrades; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_pers_upgrades_functions; + +pers_upgrade_init() +{ + setup_pers_upgrade_boards(); + setup_pers_upgrade_revive(); + setup_pers_upgrade_multi_kill_headshots(); + setup_pers_upgrade_cash_back(); + setup_pers_upgrade_insta_kill(); + setup_pers_upgrade_jugg(); + setup_pers_upgrade_carpenter(); + setup_pers_upgrade_flopper(); + setup_pers_upgrade_perk_lose(); + setup_pers_upgrade_pistol_points(); + setup_pers_upgrade_double_points(); + setup_pers_upgrade_sniper(); + setup_pers_upgrade_box_weapon(); + setup_pers_upgrade_nube(); + level thread pers_upgrades_monitor(); +} + +pers_abilities_init_globals() +{ + self.successful_revives = 0; + self.failed_revives = 0; + self.failed_cash_back_prones = 0; + self.pers["last_headshot_kill_time"] = gettime(); + self.pers["zombies_multikilled"] = 0; + self.non_headshot_kill_counter = 0; + + if ( isdefined( level.pers_upgrade_box_weapon ) && level.pers_upgrade_box_weapon ) + self.pers_box_weapon_awarded = undefined; + + if ( isdefined( level.pers_upgrade_nube ) && level.pers_upgrade_nube ) + self thread pers_nube_unlock_watcher(); +} + +is_pers_system_active() +{ + if ( !is_classic() ) + return false; + + if ( is_pers_system_disabled() ) + return false; + + return true; +} + +is_pers_system_disabled() +{ + if ( level flag_exists( "sq_minigame_active" ) && flag( "sq_minigame_active" ) ) + return true; + + return false; +} + +setup_pers_upgrade_boards() +{ + if ( isdefined( level.pers_upgrade_boards ) && level.pers_upgrade_boards ) + { + level.pers_boarding_round_start = 10; + level.pers_boarding_number_of_boards_required = 74; + pers_register_upgrade( "board", ::pers_upgrade_boards_active, "pers_boarding", level.pers_boarding_number_of_boards_required, 0 ); + } +} + +setup_pers_upgrade_revive() +{ + if ( isdefined( level.pers_upgrade_revive ) && level.pers_upgrade_revive ) + { + level.pers_revivenoperk_number_of_revives_required = 17; + level.pers_revivenoperk_number_of_chances_to_keep = 1; + pers_register_upgrade( "revive", ::pers_upgrade_revive_active, "pers_revivenoperk", level.pers_revivenoperk_number_of_revives_required, 1 ); + } +} + +setup_pers_upgrade_multi_kill_headshots() +{ + if ( isdefined( level.pers_upgrade_multi_kill_headshots ) && level.pers_upgrade_multi_kill_headshots ) + { + level.pers_multikill_headshots_required = 5; + level.pers_multikill_headshots_upgrade_reset_counter = 25; + pers_register_upgrade( "multikill_headshots", ::pers_upgrade_headshot_active, "pers_multikill_headshots", level.pers_multikill_headshots_required, 0 ); + } +} + +setup_pers_upgrade_cash_back() +{ + if ( isdefined( level.pers_upgrade_cash_back ) && level.pers_upgrade_cash_back ) + { + level.pers_cash_back_num_perks_required = 50; + level.pers_cash_back_perk_buys_prone_required = 15; + level.pers_cash_back_failed_prones = 1; + level.pers_cash_back_money_reward = 1000; + pers_register_upgrade( "cash_back", ::pers_upgrade_cash_back_active, "pers_cash_back_bought", level.pers_cash_back_num_perks_required, 0 ); + add_pers_upgrade_stat( "cash_back", "pers_cash_back_prone", level.pers_cash_back_perk_buys_prone_required ); + } +} + +setup_pers_upgrade_insta_kill() +{ + if ( isdefined( level.pers_upgrade_insta_kill ) && level.pers_upgrade_insta_kill ) + { + level.pers_insta_kill_num_required = 2; + level.pers_insta_kill_upgrade_active_time = 18; + pers_register_upgrade( "insta_kill", ::pers_upgrade_insta_kill_active, "pers_insta_kill", level.pers_insta_kill_num_required, 0 ); + } +} + +setup_pers_upgrade_jugg() +{ + if ( isdefined( level.pers_upgrade_jugg ) && level.pers_upgrade_jugg ) + { + level.pers_jugg_hit_and_die_total = 3; + level.pers_jugg_hit_and_die_round_limit = 2; + level.pers_jugg_round_reached_max = 1; + level.pers_jugg_round_lose_target = 15; + level.pers_jugg_upgrade_health_bonus = 90; + pers_register_upgrade( "jugg", ::pers_upgrade_jugg_active, "pers_jugg", level.pers_jugg_hit_and_die_total, 0 ); + } +} + +setup_pers_upgrade_carpenter() +{ + if ( isdefined( level.pers_upgrade_carpenter ) && level.pers_upgrade_carpenter ) + { + level.pers_carpenter_zombie_kills = 1; + pers_register_upgrade( "carpenter", ::pers_upgrade_carpenter_active, "pers_carpenter", level.pers_carpenter_zombie_kills, 0 ); + } +} + +setup_pers_upgrade_flopper() +{ + if ( isdefined( level.pers_upgrade_flopper ) && level.pers_upgrade_flopper ) + { + level.pers_flopper_damage_counter = 6; + level.pers_flopper_counter = 1; + level.pers_flopper_min_fall_damage_activate = 30; + level.pers_flopper_min_fall_damage_deactivate = 50; + pers_register_upgrade( "flopper", ::pers_upgrade_flopper_active, "pers_flopper_counter", level.pers_flopper_counter, 0 ); + } +} + +setup_pers_upgrade_perk_lose() +{ + if ( isdefined( level.pers_upgrade_perk_lose ) && level.pers_upgrade_perk_lose ) + { + level.pers_perk_round_reached_max = 6; + level.pers_perk_lose_counter = 3; + pers_register_upgrade( "perk_lose", ::pers_upgrade_perk_lose_active, "pers_perk_lose_counter", level.pers_perk_lose_counter, 0 ); + } +} + +setup_pers_upgrade_pistol_points() +{ + if ( isdefined( level.pers_upgrade_pistol_points ) && level.pers_upgrade_pistol_points ) + { + level.pers_pistol_points_num_kills_in_game = 8; + level.pers_pistol_points_accuracy = 0.25; + level.pers_pistol_points_counter = 1; + pers_register_upgrade( "pistol_points", ::pers_upgrade_pistol_points_active, "pers_pistol_points_counter", level.pers_pistol_points_counter, 0 ); + } +} + +setup_pers_upgrade_double_points() +{ + if ( isdefined( level.pers_upgrade_double_points ) && level.pers_upgrade_double_points ) + { + level.pers_double_points_score = 2500; + level.pers_double_points_counter = 1; + pers_register_upgrade( "double_points", ::pers_upgrade_double_points_active, "pers_double_points_counter", level.pers_double_points_counter, 0 ); + } +} + +setup_pers_upgrade_sniper() +{ + if ( isdefined( level.pers_upgrade_sniper ) && level.pers_upgrade_sniper ) + { + level.pers_sniper_round_kills_counter = 5; + level.pers_sniper_kill_distance = 800; + level.pers_sniper_counter = 1; + level.pers_sniper_misses = 3; + pers_register_upgrade( "sniper", ::pers_upgrade_sniper_active, "pers_sniper_counter", level.pers_sniper_counter, 0 ); + } +} + +setup_pers_upgrade_box_weapon() +{ + if ( isdefined( level.pers_upgrade_box_weapon ) && level.pers_upgrade_box_weapon ) + { + level.pers_box_weapon_counter = 5; + level.pers_box_weapon_lose_round = 10; + pers_register_upgrade( "box_weapon", ::pers_upgrade_box_weapon_active, "pers_box_weapon_counter", level.pers_box_weapon_counter, 0 ); + } +} + +setup_pers_upgrade_nube() +{ + if ( isdefined( level.pers_upgrade_nube ) && level.pers_upgrade_nube ) + { + level.pers_nube_counter = 1; + level.pers_nube_lose_round = 10; + level.pers_numb_num_kills_unlock = 5; + pers_register_upgrade( "nube", ::pers_upgrade_nube_active, "pers_nube_counter", level.pers_nube_counter, 0 ); + } +} + +pers_upgrade_boards_active() +{ + self endon( "disconnect" ); + + for ( last_round_number = level.round_number; 1; last_round_number = level.round_number ) + { + self waittill( "pers_stats_end_of_round" ); + + if ( level.round_number >= last_round_number ) + { + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( self.rebuild_barrier_reward == 0 ) + { + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_boarding", 0 ); + return; + } + } + } + } +} + +pers_upgrade_revive_active() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "player_failed_revive" ); + + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( self.failed_revives >= level.pers_revivenoperk_number_of_chances_to_keep ) + { + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_revivenoperk", 0 ); + self.failed_revives = 0; + return; + } + } + } +} + +pers_upgrade_headshot_active() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "zombie_death_no_headshot" ); + + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + self.non_headshot_kill_counter++; + + if ( self.non_headshot_kill_counter >= level.pers_multikill_headshots_upgrade_reset_counter ) + { + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_multikill_headshots", 0 ); + self.non_headshot_kill_counter = 0; + return; + } + } + } +} + +pers_upgrade_cash_back_active() +{ + self endon( "disconnect" ); + wait 0.5; +/# + +#/ + wait 0.5; + + while ( true ) + { + self waittill( "cash_back_failed_prone" ); + + wait 0.1; +/# + +#/ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + self.failed_cash_back_prones++; + + if ( self.failed_cash_back_prones >= level.pers_cash_back_failed_prones ) + { + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_cash_back_bought", 0 ); + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_cash_back_prone", 0 ); + self.failed_cash_back_prones = 0; + wait 0.4; +/# + +#/ + return; + } + } + } +} + +pers_upgrade_insta_kill_active() +{ + self endon( "disconnect" ); + wait 0.2; +/# + +#/ + wait 0.2; + + while ( true ) + { + self waittill( "pers_melee_swipe" ); + + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( isdefined( level.pers_melee_swipe_zombie_swiper ) ) + { + e_zombie = level.pers_melee_swipe_zombie_swiper; + + if ( isalive( e_zombie ) && ( isdefined( e_zombie.is_zombie ) && e_zombie.is_zombie ) ) + { + e_zombie.marked_for_insta_upgraded_death = 1; + e_zombie dodamage( e_zombie.health + 666, e_zombie.origin, self, self, "none", "MOD_PISTOL_BULLET", 0, "knife_zm" ); + } + + level.pers_melee_swipe_zombie_swiper = undefined; + } + + break; + } + } + + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_insta_kill", 0 ); + self kill_insta_kill_upgrade_hud_icon(); + wait 0.4; +/# + +#/ +} + +is_insta_kill_upgraded_and_active() +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( self maps\mp\zombies\_zm_powerups::is_insta_kill_active() ) + { + if ( isdefined( self.pers_upgrades_awarded["insta_kill"] ) && self.pers_upgrades_awarded["insta_kill"] ) + return true; + } + } + + return false; +} + +pers_upgrade_jugg_active() +{ + self endon( "disconnect" ); + wait 0.5; +/# + +#/ + wait 0.5; + self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( "jugg_upgrade", 1, 0 ); + + while ( true ) + { + level waittill( "start_of_round" ); + + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( level.round_number == level.pers_jugg_round_lose_target ) + { +/# + +#/ + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_jugg_downgrade_count", 0 ); + wait 0.5; + + if ( self.pers["pers_jugg_downgrade_count"] >= level.pers_jugg_round_reached_max ) + break; + } + } + } + + self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( "jugg_upgrade", 1, 1 ); +/# + +#/ + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_jugg", 0 ); + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_jugg_downgrade_count", 0 ); +} + +pers_upgrade_carpenter_active() +{ + self endon( "disconnect" ); + wait 0.2; +/# + +#/ + wait 0.2; + + level waittill( "carpenter_finished" ); + + for ( self.pers_carpenter_kill = undefined; 1; self.pers_carpenter_kill = undefined ) + { + self waittill( "carpenter_zombie_killed_check_finished" ); + + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( !isdefined( self.pers_carpenter_kill ) ) + break; +/# + +#/ + } + } + + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_carpenter", 0 ); + wait 0.4; +/# + +#/ +} + +persistent_carpenter_ability_check() +{ + if ( isdefined( level.pers_upgrade_carpenter ) && level.pers_upgrade_carpenter ) + { + self endon( "disconnect" ); +/# + +#/ + if ( isdefined( self.pers_upgrades_awarded["carpenter"] ) && self.pers_upgrades_awarded["carpenter"] ) + level.pers_carpenter_boards_active = 1; + + self.pers_carpenter_zombie_check_active = 1; + self.pers_carpenter_kill = undefined; + carpenter_extra_time = 3.0; + carpenter_finished_start_time = undefined; + level.carpenter_finished_start_time = undefined; + + while ( true ) + { + if ( !is_pers_system_disabled() ) + { + if ( !isdefined( level.carpenter_powerup_active ) ) + { + if ( !isdefined( level.carpenter_finished_start_time ) ) + level.carpenter_finished_start_time = gettime(); + + time = gettime(); + dt = ( time - level.carpenter_finished_start_time ) / 1000; + + if ( dt >= carpenter_extra_time ) + break; + } + + if ( isdefined( self.pers_carpenter_kill ) ) + { + if ( isdefined( self.pers_upgrades_awarded["carpenter"] ) && self.pers_upgrades_awarded["carpenter"] ) + break; + else + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_carpenter", 0 ); + } + } + + wait 0.01; + } + + self notify( "carpenter_zombie_killed_check_finished" ); + self.pers_carpenter_zombie_check_active = undefined; + level.pers_carpenter_boards_active = undefined; + } +} + +pers_zombie_death_location_check( attacker, v_pos ) +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( is_player_valid( attacker ) ) + { + if ( isdefined( attacker.pers_carpenter_zombie_check_active ) ) + { + if ( !check_point_in_playable_area( v_pos ) ) + attacker.pers_carpenter_kill = 1; + } + } + } +} + +insta_kill_pers_upgrade_icon() +{ + if ( self.zombie_vars["zombie_powerup_insta_kill_ug_on"] ) + { + self.zombie_vars["zombie_powerup_insta_kill_ug_time"] = level.pers_insta_kill_upgrade_active_time; + return; + } + + self.zombie_vars["zombie_powerup_insta_kill_ug_on"] = 1; + self._show_solo_hud = 1; + self thread time_remaining_pers_upgrade(); +} + +time_remaining_pers_upgrade() +{ + self endon( "disconnect" ); + self endon( "kill_insta_kill_upgrade_hud_icon" ); + + while ( self.zombie_vars["zombie_powerup_insta_kill_ug_time"] >= 0 ) + { + wait 0.05; + self.zombie_vars["zombie_powerup_insta_kill_ug_time"] -= 0.05; + } + + self kill_insta_kill_upgrade_hud_icon(); +} + +kill_insta_kill_upgrade_hud_icon() +{ + self.zombie_vars["zombie_powerup_insta_kill_ug_on"] = 0; + self._show_solo_hud = 0; + self.zombie_vars["zombie_powerup_insta_kill_ug_time"] = level.pers_insta_kill_upgrade_active_time; + self notify( "kill_insta_kill_upgrade_hud_icon" ); +} + +pers_upgrade_flopper_active() +{ + self endon( "disconnect" ); + wait 0.5; +/# + iprintlnbold( "*** WE'VE GOT FLOPPER UPGRADED ***" ); +#/ + wait 0.5; + self thread maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_flopper_watcher(); + + self waittill( "pers_flopper_lost" ); +/# + iprintlnbold( "*** OH NO: Lost FLOPPER Upgrade ***" ); +#/ + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_flopper_counter", 0 ); + self.pers_num_flopper_damages = 0; +} + +pers_upgrade_perk_lose_active() +{ + self endon( "disconnect" ); + wait 0.5; +/# + iprintlnbold( "*** WE'VE GOT PERK LOSE UPGRADED ***" ); +#/ + wait 0.5; + self.pers_perk_lose_start_round = level.round_number; + + self waittill( "pers_perk_lose_lost" ); +/# + iprintlnbold( "*** OH NO: Lost PERK LOSE Upgrade ***" ); +#/ + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_perk_lose_counter", 0 ); +} + +pers_upgrade_pistol_points_active() +{ + self endon( "disconnect" ); + wait 0.5; +/# + iprintlnbold( "*** WE'VE GOT PISTOL POINTS UPGRADED ***" ); +#/ + wait 0.5; + + while ( true ) + { + self waittill( "pers_pistol_points_kill" ); + + accuracy = self maps\mp\zombies\_zm_pers_upgrades_functions::pers_get_player_accuracy(); + + if ( accuracy > level.pers_pistol_points_accuracy ) + break; + } +/# + iprintlnbold( "*** OH NO: Lost PISTOL POINTS Upgrade ***" ); +#/ + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_pistol_points_counter", 0 ); +} + +pers_upgrade_double_points_active() +{ + self endon( "disconnect" ); + wait 0.5; +/# + iprintlnbold( "*** WE'VE GOT DOUBLE POINTS UPGRADED ***" ); +#/ + wait 0.5; + + self waittill( "double_points_lost" ); +/# + iprintlnbold( "*** OH NO: Lost DOUBLE POINTS Upgrade ***" ); +#/ + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_double_points_counter", 0 ); +} + +pers_upgrade_sniper_active() +{ + self endon( "disconnect" ); + wait 0.5; +/# + iprintlnbold( "*** WE'VE GOT SNIPER UPGRADED ***" ); +#/ + wait 0.5; + + self waittill( "pers_sniper_lost" ); +/# + iprintlnbold( "*** OH NO: Lost SNIPER Upgrade ***" ); +#/ + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_sniper_counter", 0 ); +} + +pers_upgrade_box_weapon_active() +{ + self endon( "disconnect" ); + wait 0.5; +/# + iprintlnbold( "*** WE'VE GOT BOX WEAPON UPGRADED ***" ); +#/ + self thread maps\mp\zombies\_zm_pers_upgrades_functions::pers_magic_box_teddy_bear(); + wait 0.5; + self.pers_box_weapon_awarded = 1; + + while ( true ) + { + level waittill( "start_of_round" ); + + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( level.round_number >= level.pers_box_weapon_lose_round ) + break; + } + } +/# + iprintlnbold( "*** OH NO: Lost BOX WEAPON Upgrade ***" ); +#/ + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_box_weapon_counter", 0 ); +} + +pers_upgrade_nube_active() +{ + self endon( "disconnect" ); + wait 0.5; +/# + iprintlnbold( "*** WE'VE GOT NUBE UPGRADED ***" ); +#/ + wait 0.5; + + while ( true ) + { + level waittill( "start_of_round" ); + + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( level.round_number >= level.pers_nube_lose_round ) + break; + } + } +/# + iprintlnbold( "*** OH NO: Lost NUBE Upgrade ***" ); +#/ + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_nube_counter", 0 ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_pers_upgrades_functions.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_pers_upgrades_functions.gsc new file mode 100644 index 0000000..2693bca --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_pers_upgrades_functions.gsc @@ -0,0 +1,1305 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_pers_upgrades; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_score; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\_visionset_mgr; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_magicbox; + +pers_boards_updated( zbarrier ) +{ + if ( isdefined( level.pers_upgrade_boards ) && level.pers_upgrade_boards ) + { + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( !( isdefined( self.pers_upgrades_awarded["board"] ) && self.pers_upgrades_awarded["board"] ) ) + { + if ( level.round_number >= level.pers_boarding_round_start ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_boarding", 0 ); + + if ( self.pers["pers_boarding"] >= level.pers_boarding_number_of_boards_required ) + { + if ( isdefined( zbarrier ) ) + self.upgrade_fx_origin = zbarrier.origin; + } + } + } + } + } +} + +pers_revive_active() +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( isdefined( self.pers_upgrades_awarded["revive"] ) && self.pers_upgrades_awarded["revive"] ) + return true; + } + + return false; +} + +pers_increment_revive_stat( reviver ) +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + reviver maps\mp\zombies\_zm_stats::increment_client_stat( "pers_revivenoperk", 0 ); +} + +pers_mulit_kill_headshot_active() +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( isdefined( self.pers_upgrades_awarded["multikill_headshots"] ) && self.pers_upgrades_awarded["multikill_headshots"] ) + return true; + } + + return false; +} + +pers_check_for_pers_headshot( time_of_death, zombie ) +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( self.pers["last_headshot_kill_time"] == time_of_death ) + self.pers["zombies_multikilled"]++; + else + self.pers["zombies_multikilled"] = 1; + + self.pers["last_headshot_kill_time"] = time_of_death; + + if ( self.pers["zombies_multikilled"] == 2 ) + { + if ( isdefined( zombie ) ) + self.upgrade_fx_origin = zombie.origin; + + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_multikill_headshots", 0 ); + self.non_headshot_kill_counter = 0; + } + } +} + +cash_back_player_drinks_perk() +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( isdefined( level.pers_upgrade_cash_back ) && level.pers_upgrade_cash_back ) + { + if ( isdefined( self.pers_upgrades_awarded["cash_back"] ) && self.pers_upgrades_awarded["cash_back"] ) + { + self thread cash_back_money_reward(); + self thread cash_back_player_prone_check( 1 ); + } + else if ( self.pers["pers_cash_back_bought"] < level.pers_cash_back_num_perks_required ) + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_cash_back_bought", 0 ); + else + self thread cash_back_player_prone_check( 0 ); + } + } +} + +cash_back_money_reward() +{ + self endon( "death" ); + step = 5; + amount_per_step = int( level.pers_cash_back_money_reward / step ); + + for ( i = 0; i < step; i++ ) + { + self maps\mp\zombies\_zm_score::add_to_player_score( amount_per_step ); + wait 0.2; + } +} + +cash_back_player_prone_check( got_ability ) +{ + self endon( "death" ); + prone_time = 2.5; + start_time = gettime(); + + while ( true ) + { + time = gettime(); + dt = ( time - start_time ) / 1000; + + if ( dt > prone_time ) + break; + + if ( self getstance() == "prone" ) + { + if ( !got_ability ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_cash_back_prone", 0 ); + wait 0.8; + } + + return; + } + + wait 0.01; + } + + if ( got_ability ) + self notify( "cash_back_failed_prone" ); +} + +pers_upgrade_insta_kill_upgrade_check() +{ + if ( isdefined( level.pers_upgrade_insta_kill ) && level.pers_upgrade_insta_kill ) + { + self endon( "death" ); + + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return; + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + e_player = players[i]; + + if ( isdefined( e_player.pers_upgrades_awarded["insta_kill"] ) && e_player.pers_upgrades_awarded["insta_kill"] ) + e_player thread insta_kill_upgraded_player_kill_func( level.pers_insta_kill_upgrade_active_time ); + } + + if ( !( isdefined( self.pers_upgrades_awarded["insta_kill"] ) && self.pers_upgrades_awarded["insta_kill"] ) ) + { + kills_start = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "kills" ); + + self waittill( "insta_kill_over" ); + + kills_end = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "kills" ); + num_killed = kills_end - kills_start; + + if ( num_killed > 0 ) + self maps\mp\zombies\_zm_stats::zero_client_stat( "pers_insta_kill", 0 ); + else + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_insta_kill", 0 ); + } + } +} + +insta_kill_upgraded_player_kill_func( active_time ) +{ + self endon( "death" ); + wait 0.25; + + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_disabled() ) + return; + + self thread maps\mp\zombies\_zm_pers_upgrades::insta_kill_pers_upgrade_icon(); + start_time = gettime(); + zombie_collide_radius = 50; + zombie_player_height_test = 100; + + while ( true ) + { + time = gettime(); + dt = ( time - start_time ) / 1000; + + if ( dt > active_time ) + break; + + if ( !maps\mp\zombies\_zm_powerups::is_insta_kill_active() ) + break; + + a_zombies = getaiarray( level.zombie_team ); + e_closest = undefined; + + for ( i = 0; i < a_zombies.size; i++ ) + { + e_zombie = a_zombies[i]; + + if ( isdefined( e_zombie.marked_for_insta_upgraded_death ) ) + continue; + + height_diff = abs( self.origin[2] - e_zombie.origin[2] ); + + if ( height_diff < zombie_player_height_test ) + { + dist = distance2d( self.origin, e_zombie.origin ); + + if ( dist < zombie_collide_radius ) + { + dist_max = dist; + e_closest = e_zombie; + } + } + } + + if ( isdefined( e_closest ) ) + { + e_closest.marked_for_insta_upgraded_death = 1; + e_closest dodamage( e_closest.health + 666, e_closest.origin, self, self, "none", "MOD_PISTOL_BULLET", 0, "knife_zm" ); + } + + wait 0.01; + } +} + +pers_insta_kill_melee_swipe( smeansofdeath, eattacker ) +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( isdefined( smeansofdeath ) && smeansofdeath == "MOD_MELEE" ) + { + if ( isplayer( self ) && maps\mp\zombies\_zm_pers_upgrades::is_insta_kill_upgraded_and_active() ) + { + self notify( "pers_melee_swipe" ); + level.pers_melee_swipe_zombie_swiper = eattacker; + } + } + } +} + +pers_upgrade_jugg_player_death_stat() +{ + if ( isdefined( level.pers_upgrade_jugg ) && level.pers_upgrade_jugg ) + { + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( !( isdefined( self.pers_upgrades_awarded["jugg"] ) && self.pers_upgrades_awarded["jugg"] ) ) + { + if ( level.round_number <= level.pers_jugg_hit_and_die_round_limit ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_jugg", 0 ); +/# + +#/ + } + } + } + } +} + +pers_jugg_active() +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( isdefined( self.pers_upgrades_awarded["jugg"] ) && self.pers_upgrades_awarded["jugg"] ) + return true; + } + + return false; +} + +pers_upgrade_flopper_damage_check( smeansofdeath, idamage ) +{ + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return false; + + if ( !isdefined( smeansofdeath ) || smeansofdeath != "MOD_FALLING" ) + return false; + + if ( !( isdefined( self.pers_upgrades_awarded["flopper"] ) && self.pers_upgrades_awarded["flopper"] ) ) + { + if ( idamage < level.pers_flopper_min_fall_damage_activate ) + return false; + + if ( !isdefined( self.pers_num_flopper_damages ) ) + self.pers_num_flopper_damages = 0; + + self.pers_num_flopper_damages++; + + if ( self.pers_num_flopper_damages >= level.pers_flopper_damage_counter ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_flopper_counter", 0 ); +/# + iprintlnbold( "FLOPPER STAT: INCREMENTED" ); +#/ + } + } + else + { + if ( !( isdefined( self.pers_flopper_active ) && self.pers_flopper_active ) ) + { + if ( idamage >= level.pers_flopper_min_fall_damage_deactivate ) + self notify( "pers_flopper_lost" ); + + return false; + } + + if ( idamage > 0 ) + { + self notify( "activate_pers_flopper_effect" ); + return true; + } + } + + return false; +} + +divetonuke_precache_override_func() +{ + precacheshader( "specialty_divetonuke_zombies" ); + level._effect["divetonuke_light"] = loadfx( "misc/fx_zombie_cola_dtap_on" ); +} + +pers_upgrade_flopper_watcher() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "pers_flopper_lost" ); + + while ( true ) + { + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_disabled() ) + wait 0.01; + else + { + self waittill( "dtp_start" ); + + self.pers_flopper_active = 1; + self thread pers_flopper_dtn(); + + self waittill( "dtp_end" ); + + self.pers_flopper_active = undefined; + } + } +} + +pers_flopper_dtn() +{ + self endon( "disconnect" ); + + self waittill( "activate_pers_flopper_effect" ); + + if ( isdefined( level.pers_flopper_divetonuke_func ) ) + self thread [[ level.pers_flopper_divetonuke_func ]]( self, self.origin ); +} + +pers_flopper_explode( attacker, origin ) +{ + self endon( "disconnect" ); + radius = level.zombie_vars["zombie_perk_divetonuke_radius"]; + min_damage = level.zombie_vars["zombie_perk_divetonuke_min_damage"]; + max_damage = level.zombie_vars["zombie_perk_divetonuke_max_damage"]; + + if ( isdefined( level.pers_flopper_network_optimized ) && level.pers_flopper_network_optimized ) + attacker thread pers_flopper_damage_network_optimized( origin, radius, max_damage, min_damage, "MOD_GRENADE_SPLASH" ); + else + radiusdamage( origin, radius, max_damage, min_damage, attacker, "MOD_GRENADE_SPLASH" ); + + attacker setclientfield( "phd_flopper_effects", 1 ); + maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker ); + wait 1; + maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker ); + attacker setclientfield( "phd_flopper_effects", 0 ); +} + +pers_flopper_damage_network_optimized( origin, radius, max_damage, min_damage, damage_mod ) +{ + self endon( "disconnect" ); + a_zombies = get_array_of_closest( origin, get_round_enemy_array(), undefined, undefined, radius ); + network_stall_counter = 0; + + if ( isdefined( a_zombies ) ) + { + for ( i = 0; i < a_zombies.size; i++ ) + { + e_zombie = a_zombies[i]; + + if ( !isdefined( e_zombie ) || !isalive( e_zombie ) ) + continue; + + dist = distance( e_zombie.origin, origin ); + damage = min_damage + ( max_damage - min_damage ) * ( 1.0 - dist / radius ); + e_zombie dodamage( damage, e_zombie.origin, self, self, 0, damage_mod ); + network_stall_counter--; + + if ( network_stall_counter <= 0 ) + { + wait_network_frame(); + network_stall_counter = randomintrange( 1, 3 ); + } + } + } +} + +pers_upgrade_pistol_points_kill() +{ + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return; + + if ( !isdefined( self.pers_num_zombies_killed_in_game ) ) + self.pers_num_zombies_killed_in_game = 0; + + self.pers_num_zombies_killed_in_game++; + + if ( !( isdefined( self.pers_upgrades_awarded["pistol_points"] ) && self.pers_upgrades_awarded["pistol_points"] ) ) + { + if ( self.pers_num_zombies_killed_in_game >= level.pers_pistol_points_num_kills_in_game ) + { + accuracy = self pers_get_player_accuracy(); + + if ( accuracy <= level.pers_pistol_points_accuracy ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_pistol_points_counter", 0 ); +/# + iprintlnbold( "PISTOL POINTS STAT: INCREMENTED" ); +#/ + } + } + } + else + self notify( "pers_pistol_points_kill" ); +} + +pers_upgrade_pistol_points_set_score( score, event, mod, damage_weapon ) +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( isdefined( self.pers_upgrades_awarded["pistol_points"] ) && self.pers_upgrades_awarded["pistol_points"] ) + { + if ( isdefined( event ) ) + { + if ( event == "rebuild_board" ) + return score; + + if ( isdefined( damage_weapon ) ) + { + weapon_class = getweaponclasszm( damage_weapon ); + + if ( weapon_class != "weapon_pistol" ) + return score; + } + + if ( isdefined( mod ) && isstring( mod ) && mod == "MOD_PISTOL_BULLET" ) + score *= 2; + } + } + } + + return score; +} + +pers_upgrade_double_points_pickup_start() +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return; + + if ( isdefined( self.double_points_ability_check_active ) && self.double_points_ability_check_active ) + { + self.double_points_ability_start_time = gettime(); + return; + } + + self.double_points_ability_check_active = 1; + level.pers_double_points_active = 1; + start_points = self.score; + + if ( isdefined( self.account_value ) ) + bank_account_value_start = self.account_value; + else + bank_account_value_start = 0; + + self.double_points_ability_start_time = gettime(); + last_score = self.score; + ability_lost = 0; + + while ( true ) + { + if ( self.score > last_score ) + ability_lost = 1; + + last_score = self.score; + time = gettime(); + dt = ( time - self.double_points_ability_start_time ) / 1000; + + if ( dt >= 30 ) + break; + + wait 0.1; + } + + level.pers_double_points_active = undefined; + + if ( isdefined( self.account_value ) ) + bank_account_value_end = self.account_value; + else + bank_account_value_end = 0; + + if ( bank_account_value_end < bank_account_value_start ) + { + withdrawal_number = bank_account_value_start - bank_account_value_end; + withdrawal_fees = level.ta_vaultfee * withdrawal_number; + withdrawal_amount = level.bank_deposit_ddl_increment_amount * withdrawal_number; + bank_withdrawal_total = withdrawal_amount - withdrawal_fees; + } + else + bank_withdrawal_total = 0; + + if ( isdefined( self.pers_upgrades_awarded["double_points"] ) && self.pers_upgrades_awarded["double_points"] ) + { + if ( ability_lost == 1 ) + self notify( "double_points_lost" ); + } + else + { + total_points = self.score - start_points; + total_points -= bank_withdrawal_total; + + if ( total_points >= level.pers_double_points_score ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_double_points_counter", 0 ); +/# + iprintlnbold( "PISTOL POINTS STAT: INCREMENTED" ); +#/ + } + } + + self.double_points_ability_check_active = undefined; +} + +pers_upgrade_double_points_set_score( score ) +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( isdefined( self.pers_upgrades_awarded["double_points"] ) && self.pers_upgrades_awarded["double_points"] ) + { + if ( isdefined( level.pers_double_points_active ) && level.pers_double_points_active ) + { +/# + +#/ + score = int( score * 0.5 ); + } + } + } + + return score; +} + +pers_upgrade_double_points_cost( current_cost ) +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( isdefined( self.pers_upgrades_awarded["double_points"] ) && self.pers_upgrades_awarded["double_points"] ) + current_cost = int( current_cost / 2 ); + } + + return current_cost; +} + +is_pers_double_points_active() +{ + if ( isdefined( self.pers_upgrades_awarded["double_points"] ) && self.pers_upgrades_awarded["double_points"] ) + { + if ( isdefined( level.pers_double_points_active ) && level.pers_double_points_active ) + return true; + } + + return false; +} + +pers_upgrade_perk_lose_bought() +{ + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return; + + wait 1; + + if ( !( isdefined( self.pers_upgrades_awarded["perk_lose"] ) && self.pers_upgrades_awarded["perk_lose"] ) ) + { + if ( level.round_number <= level.pers_perk_round_reached_max ) + { + if ( !isdefined( self.bought_all_perks ) ) + { + a_perks = self get_perk_array( 0 ); + + if ( isdefined( a_perks ) && a_perks.size == 4 ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_perk_lose_counter", 0 ); +/# + iprintlnbold( "PERK LOSE STAT: INCREMENTED" ); +#/ + self.bought_all_perks = 1; + } + } + } + } + else if ( isdefined( self.pers_perk_lose_start_round ) ) + { + if ( level.round_number > 1 && self.pers_perk_lose_start_round == level.round_number ) + self notify( "pers_perk_lose_lost" ); + } +} + +pers_upgrade_perk_lose_save() +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( isdefined( self.perks_active ) ) + { + self.a_saved_perks = []; + self.a_saved_perks = arraycopy( self.perks_active ); + } + else + self.a_saved_perks = self get_perk_array( 0 ); + + self.a_saved_primaries = self getweaponslistprimaries(); + self.a_saved_primaries_weapons = []; + index = 0; + + foreach ( weapon in self.a_saved_primaries ) + { + self.a_saved_primaries_weapons[index] = maps\mp\zombies\_zm_weapons::get_player_weapondata( self, weapon ); + index++; + } + } +} + +pers_upgrade_perk_lose_restore() +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + player_has_mule_kick = 0; + discard_quickrevive = 0; + + if ( isdefined( self.a_saved_perks ) && self.a_saved_perks.size >= 2 ) + { + for ( i = 0; i < self.a_saved_perks.size; i++ ) + { + perk = self.a_saved_perks[i]; + + if ( perk == "specialty_quickrevive" ) + discard_quickrevive = 1; + } + + if ( discard_quickrevive == 1 ) + size = self.a_saved_perks.size; + else + size = self.a_saved_perks.size - 1; + + for ( i = 0; i < size; i++ ) + { + perk = self.a_saved_perks[i]; + + if ( discard_quickrevive == 1 && perk == "specialty_quickrevive" ) + continue; + + if ( perk == "specialty_additionalprimaryweapon" ) + player_has_mule_kick = 1; + + if ( self hasperk( perk ) ) + continue; + + self maps\mp\zombies\_zm_perks::give_perk( perk ); + wait_network_frame(); + } + } + + if ( player_has_mule_kick ) + { + a_current_weapons = self getweaponslistprimaries(); + + for ( i = 0; i < self.a_saved_primaries_weapons.size; i++ ) + { + saved_weapon = self.a_saved_primaries_weapons[i]; + found = 0; + + for ( j = 0; j < a_current_weapons.size; j++ ) + { + current_weapon = a_current_weapons[j]; + + if ( current_weapon == saved_weapon["name"] ) + { + found = 1; + break; + } + } + + if ( found == 0 ) + { + self maps\mp\zombies\_zm_weapons::weapondata_give( self.a_saved_primaries_weapons[i] ); + self switchtoweapon( a_current_weapons[0] ); + break; + } + } + } + + self.a_saved_perks = undefined; + self.a_saved_primaries = undefined; + self.a_saved_primaries_weapons = undefined; + } +} + +pers_upgrade_sniper_kill_check( zombie, attacker ) +{ + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return; + + if ( !isdefined( zombie ) || !isdefined( attacker ) || !isdefined( zombie.damageweapon ) ) + return; + + if ( isdefined( zombie.marked_for_insta_upgraded_death ) && zombie.marked_for_insta_upgraded_death ) + return; + + weapon = zombie.damageweapon; + + if ( !is_sniper_weapon( weapon ) ) + return; + + if ( isdefined( self.pers_upgrades_awarded["sniper"] ) && self.pers_upgrades_awarded["sniper"] ) + self thread pers_sniper_score_reward(); + else + { + dist = distance( zombie.origin, attacker.origin ); + + if ( dist < level.pers_sniper_kill_distance ) + return; + + if ( !isdefined( self.pers_sniper_round ) ) + { + self.pers_sniper_round = level.round_number; + self.pers_sniper_kills = 0; + } + else if ( self.pers_sniper_round != level.round_number ) + { + self.pers_sniper_round = level.round_number; + self.pers_sniper_kills = 0; + } + + self.pers_sniper_kills++; +/# + iprintlnbold( "Pers: Long range Sniper Kill" ); +#/ + if ( self.pers_sniper_kills >= level.pers_sniper_round_kills_counter ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "pers_sniper_counter", 0 ); +/# + iprintlnbold( "SNIPER STAT: INCREMENTED" ); +#/ + } + } +} + +pers_sniper_score_reward() +{ + self endon( "disconnect" ); + self endon( "death" ); + + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + total_score = 300; + steps = 10; + score_inc = int( total_score / steps ); + + for ( i = 0; i < steps; i++ ) + { + self maps\mp\zombies\_zm_score::add_to_player_score( score_inc ); + wait 0.25; + } + } +} + +pers_sniper_player_fires( weapon, hit ) +{ + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return; + + if ( isdefined( weapon ) && isdefined( hit ) ) + { + if ( isdefined( self.pers_upgrades_awarded["sniper"] ) && self.pers_upgrades_awarded["sniper"] ) + { + if ( is_sniper_weapon( weapon ) ) + { + if ( !isdefined( self.num_sniper_misses ) ) + self.num_sniper_misses = 0; + + if ( hit ) + self.num_sniper_misses = 0; + else + { + self.num_sniper_misses++; + + if ( self.num_sniper_misses >= level.pers_sniper_misses ) + { + self notify( "pers_sniper_lost" ); + self.num_sniper_misses = 0; + } + } + } + } + } +} + +pers_get_player_accuracy() +{ + accuracy = 1.0; + total_shots = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "total_shots" ); + total_hits = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "hits" ); + + if ( total_shots > 0 ) + accuracy = total_hits / total_shots; + + return accuracy; +} + +is_sniper_weapon( weapon ) +{ + if ( !isdefined( weapon ) ) + return false; + + if ( !isstring( weapon ) ) + return false; + + if ( getsubstr( weapon, 0, 4 ) == "svu_" ) + return true; + + if ( getsubstr( weapon, 0, 6 ) == "dsr50_" ) + return true; + + if ( getsubstr( weapon, 0, 10 ) == "barretm82_" ) + return true; + + return false; +} + +pers_upgrade_box_weapon_used( e_user, e_grabber ) +{ + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return; + + if ( level.round_number >= level.pers_box_weapon_lose_round ) + return; + + if ( isdefined( e_grabber ) && isplayer( e_grabber ) ) + { + if ( is_true( e_grabber.pers_box_weapon_awarded ) ) + return; + + if ( isdefined( e_grabber.pers_upgrades_awarded["box_weapon"] ) && e_grabber.pers_upgrades_awarded["box_weapon"] ) + return; + + e_grabber maps\mp\zombies\_zm_stats::increment_client_stat( "pers_box_weapon_counter", 0 ); +/# + +#/ + } + else if ( isdefined( e_user ) && isplayer( e_user ) ) + { + if ( isdefined( e_user.pers_upgrades_awarded["box_weapon"] ) && e_user.pers_upgrades_awarded["box_weapon"] ) + return; + + e_user maps\mp\zombies\_zm_stats::zero_client_stat( "pers_box_weapon_counter", 0 ); +/# + +#/ + } +} + +pers_magic_box_teddy_bear() +{ + self endon( "disconnect" ); + + if ( isdefined( level.pers_magic_box_firesale ) && level.pers_magic_box_firesale ) + self thread pers_magic_box_firesale(); + + m_bear = spawn( "script_model", self.origin ); + m_bear setmodel( level.chest_joker_model ); + m_bear pers_magic_box_set_teddy_location( level.chest_index ); + self.pers_magix_box_teddy_bear = m_bear; + m_bear setinvisibletoall(); + wait 0.1; + m_bear setvisibletoplayer( self ); + + while ( true ) + { + box = level.chests[level.chest_index]; + + if ( level.round_number >= level.pers_box_weapon_lose_round ) + break; + + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_disabled() ) + { + m_bear setinvisibletoall(); + + while ( true ) + { + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_disabled() ) + break; + + wait 0.01; + } + + m_bear setvisibletoplayer( self ); + } + + if ( flag( "moving_chest_now" ) ) + { + m_bear setinvisibletoall(); + + while ( flag( "moving_chest_now" ) ) + wait 0.1; + + m_bear pers_magic_box_set_teddy_location( level.chest_index ); + wait 0.1; + m_bear setvisibletoplayer( self ); + } + + if ( isdefined( level.sloth_moving_box ) && level.sloth_moving_box ) + { + m_bear setinvisibletoall(); + + while ( isdefined( level.sloth_moving_box ) && level.sloth_moving_box ) + wait 0.1; + + m_bear pers_magic_box_set_teddy_location( level.chest_index ); + wait 0.1; + m_bear setvisibletoplayer( self ); + } + + if ( isdefined( box._box_open ) && box._box_open ) + { + m_bear setinvisibletoall(); + + while ( true ) + { + if ( !( isdefined( box._box_open ) && box._box_open ) ) + break; + + wait 0.01; + } + + m_bear setvisibletoplayer( self ); + } + + wait 0.01; + } + + m_bear delete(); +} + +pers_magic_box_set_teddy_location( box_index ) +{ + box = level.chests[box_index]; + + if ( isdefined( box.zbarrier ) ) + { + v_origin = box.zbarrier.origin; + v_angles = box.zbarrier.angles; + } + else + { + v_origin = box.origin; + v_angles = box.angles; + } + + v_up = anglestoup( v_angles ); + height_offset = 22; + self.origin = v_origin + v_up * height_offset; + dp = vectordot( v_up, ( 0, 0, 1 ) ); + + if ( dp > 0 ) + v_angles_offset = vectorscale( ( 0, 1, 0 ), 90.0 ); + else + v_angles_offset = ( 0, -90, -10 ); + + self.angles = v_angles + v_angles_offset; +} + +pers_treasure_chest_choosespecialweapon( player ) +{ + rval = randomfloat( 1 ); + + if ( !isdefined( player.pers_magic_box_weapon_count ) ) + player.pers_magic_box_weapon_count = 0; + + if ( player.pers_magic_box_weapon_count < 2 && ( player.pers_magic_box_weapon_count == 0 || rval < 0.6 ) ) + { +/# + +#/ + player.pers_magic_box_weapon_count++; + + if ( isdefined( level.pers_treasure_chest_get_weapons_array_func ) ) + [[ level.pers_treasure_chest_get_weapons_array_func ]](); + else + pers_treasure_chest_get_weapons_array(); + + keys = array_randomize( level.pers_box_weapons ); +/# + forced_weapon = getdvar( _hash_45ED7744 ); + + if ( forced_weapon != "" && isdefined( level.zombie_weapons[forced_weapon] ) ) + arrayinsert( keys, forced_weapon, 0 ); +#/ + pap_triggers = getentarray( "specialty_weapupgrade", "script_noteworthy" ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( maps\mp\zombies\_zm_magicbox::treasure_chest_canplayerreceiveweapon( player, keys[i], pap_triggers ) ) + return keys[i]; + } + + return keys[0]; + } + else + { +/# + +#/ + player.pers_magic_box_weapon_count = 0; + weapon = maps\mp\zombies\_zm_magicbox::treasure_chest_chooseweightedrandomweapon( player ); + return weapon; + } +} + +pers_treasure_chest_get_weapons_array() +{ + if ( !isdefined( level.pers_box_weapons ) ) + { + level.pers_box_weapons = []; + level.pers_box_weapons[level.pers_box_weapons.size] = "ray_gun_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "galil_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "knife_ballistic_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "srm1216_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "hamr_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "tar21_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "raygun_mark2_zm"; + } +} + +pers_magic_box_firesale() +{ + self endon( "disconnect" ); + wait 1; + + while ( true ) + { + if ( level.zombie_vars["zombie_powerup_fire_sale_on"] == 1 ) + { + wait 5; + + for ( i = 0; i < level.chests.size; i++ ) + { + if ( i == level.chest_index ) + continue; + + box = level.chests[i]; + self thread box_firesale_teddy_bear( box, i ); + } + + while ( true ) + { + if ( level.zombie_vars["zombie_powerup_fire_sale_on"] == 0 ) + break; + + wait 0.01; + } + } + + if ( level.round_number >= level.pers_box_weapon_lose_round ) + return; + + wait 0.5; + } +} + +box_firesale_teddy_bear( box, box_index ) +{ + self endon( "disconnect" ); + m_bear = spawn( "script_model", self.origin ); + m_bear setmodel( level.chest_joker_model ); + m_bear pers_magic_box_set_teddy_location( box_index ); + m_bear setinvisibletoall(); + wait 0.1; + m_bear setvisibletoplayer( self ); + + while ( true ) + { + if ( isdefined( box._box_open ) && box._box_open ) + { + m_bear setinvisibletoall(); + + while ( true ) + { + if ( !( isdefined( box._box_open ) && box._box_open ) ) + break; + + wait 0.01; + } + + m_bear setvisibletoplayer( self ); + } + + if ( level.zombie_vars["zombie_powerup_fire_sale_on"] == 0 ) + break; + + wait 0.01; + } + + m_bear delete(); +} + +pers_nube_unlock_watcher() +{ + self endon( "disconnect" ); + + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return; + + self.pers_num_nube_kills = 0; + + if ( self.pers["pers_max_round_reached"] >= level.pers_nube_lose_round ) + return; + + num_melee_kills = self.pers["melee_kills"]; + num_headshot_kills = self.pers["headshots"]; + num_boards = self.pers["boards"]; + + while ( true ) + { + self waittill( "pers_player_zombie_kill" ); + + if ( self.pers["pers_max_round_reached"] >= level.pers_nube_lose_round ) + { + self.pers_num_nube_kills = 0; + return; + } + + if ( num_melee_kills == self.pers["melee_kills"] && num_headshot_kills == self.pers["headshots"] && num_boards == self.pers["boards"] ) + self.pers_num_nube_kills++; + else + { + self.pers_num_nube_kills = 0; + num_melee_kills = self.pers["melee_kills"]; + num_headshot_kills = self.pers["headshots"]; + num_boards = self.pers["boards"]; + } + } +} + +pers_nube_player_ranked_as_nube( player ) +{ + if ( player.pers_num_nube_kills >= level.pers_numb_num_kills_unlock ) + return true; + + return false; +} + +pers_nube_weapon_upgrade_check( player, str_weapon ) +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( getsubstr( str_weapon, 0, 11 ) == "rottweil72_" ) + { + if ( !( isdefined( player.pers_upgrades_awarded["nube"] ) && player.pers_upgrades_awarded["nube"] ) ) + { + if ( pers_nube_player_ranked_as_nube( player ) ) + { + player maps\mp\zombies\_zm_stats::increment_client_stat( "pers_nube_counter", 0 ); + str_weapon = "ray_gun_zm"; + fx_org = player.origin; + v_dir = anglestoforward( player getplayerangles() ); + v_up = anglestoup( player getplayerangles() ); + fx_org = fx_org + v_dir * 5 + v_up * 12; + player.upgrade_fx_origin = fx_org; + } + } + else + str_weapon = "ray_gun_zm"; + } + } + + return str_weapon; +} + +pers_nube_weapon_ammo_check( player, str_weapon ) +{ + if ( maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + { + if ( getsubstr( str_weapon, 0, 11 ) == "rottweil72_" ) + { + if ( isdefined( player.pers_upgrades_awarded["nube"] ) && player.pers_upgrades_awarded["nube"] ) + { + if ( player hasweapon( "ray_gun_zm" ) ) + str_weapon = "ray_gun_zm"; + + if ( player hasweapon( "ray_gun_upgraded_zm" ) ) + str_weapon = "ray_gun_upgraded_zm"; + } + } + } + + return str_weapon; +} + +pers_nube_should_we_give_raygun( player_has_weapon, player, weapon_buy ) +{ + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return player_has_weapon; + + if ( player.pers["pers_max_round_reached"] >= level.pers_nube_lose_round ) + return player_has_weapon; + + if ( !pers_nube_player_ranked_as_nube( player ) ) + return player_has_weapon; + + if ( isdefined( weapon_buy ) && getsubstr( weapon_buy, 0, 11 ) != "rottweil72_" ) + return player_has_weapon; + + player_has_olympia = player hasweapon( "rottweil72_zm" ) || player hasweapon( "rottweil72_upgraded_zm" ); + player_has_raygun = player hasweapon( "ray_gun_zm" ) || player hasweapon( "ray_gun_upgraded_zm" ); + + if ( player_has_olympia && player_has_raygun ) + player_has_weapon = 1; + else if ( pers_nube_player_ranked_as_nube( player ) && player_has_olympia && player_has_raygun == 0 ) + player_has_weapon = 0; + else if ( isdefined( player.pers_upgrades_awarded["nube"] ) && player.pers_upgrades_awarded["nube"] && player_has_raygun ) + player_has_weapon = 1; + + return player_has_weapon; +} + +pers_nube_ammo_hint_string( player, weapon ) +{ + ammo_cost = 0; + + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return false; + + if ( getsubstr( weapon, 0, 11 ) == "rottweil72_" ) + ammo_cost = pers_nube_ammo_cost( player, ammo_cost ); + + if ( !ammo_cost ) + return false; + + self.stub.hint_string = &"ZOMBIE_WEAPONAMMOONLY"; + self sethintstring( self.stub.hint_string, ammo_cost ); + return true; +} + +pers_nube_ammo_cost( player, ammo_cost ) +{ + if ( player hasweapon( "ray_gun_zm" ) ) + ammo_cost = 250; + + if ( player hasweapon( "ray_gun_upgraded_zm" ) ) + ammo_cost = 4500; + + return ammo_cost; +} + +pers_nube_override_ammo_cost( player, weapon, ammo_cost ) +{ + if ( !maps\mp\zombies\_zm_pers_upgrades::is_pers_system_active() ) + return ammo_cost; + + if ( getsubstr( weapon, 0, 11 ) == "rottweil72_" ) + ammo_cost = pers_nube_ammo_cost( player, ammo_cost ); + + return ammo_cost; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_pers_upgrades_system.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_pers_upgrades_system.gsc new file mode 100644 index 0000000..50bbe85 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_pers_upgrades_system.gsc @@ -0,0 +1,235 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_stats; + +pers_register_upgrade( name, upgrade_active_func, stat_name, stat_desired_value, game_end_reset_if_not_achieved ) +{ + if ( !isdefined( level.pers_upgrades ) ) + { + level.pers_upgrades = []; + level.pers_upgrades_keys = []; + } + + if ( isdefined( level.pers_upgrades[name] ) ) + assert( 0, "A persistent upgrade is already registered for name: " + name ); + + level.pers_upgrades_keys[level.pers_upgrades_keys.size] = name; + level.pers_upgrades[name] = spawnstruct(); + level.pers_upgrades[name].stat_names = []; + level.pers_upgrades[name].stat_desired_values = []; + level.pers_upgrades[name].upgrade_active_func = upgrade_active_func; + level.pers_upgrades[name].game_end_reset_if_not_achieved = game_end_reset_if_not_achieved; + add_pers_upgrade_stat( name, stat_name, stat_desired_value ); +/# + if ( isdefined( level.devgui_add_ability ) ) + [[ level.devgui_add_ability ]]( name, upgrade_active_func, stat_name, stat_desired_value, game_end_reset_if_not_achieved ); +#/ +} + +add_pers_upgrade_stat( name, stat_name, stat_desired_value ) +{ + if ( !isdefined( level.pers_upgrades[name] ) ) + assert( 0, name + " - Persistent upgrade is not registered yet." ); + + stats_size = level.pers_upgrades[name].stat_names.size; + level.pers_upgrades[name].stat_names[stats_size] = stat_name; + level.pers_upgrades[name].stat_desired_values[stats_size] = stat_desired_value; +} + +pers_upgrades_monitor() +{ + if ( !isdefined( level.pers_upgrades ) ) + return; + + if ( !is_classic() ) + return; + + level thread wait_for_game_end(); + + while ( true ) + { + waittillframeend; + players = getplayers(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + { + player = players[player_index]; + + if ( is_player_valid( player ) && isdefined( player.stats_this_frame ) ) + { + if ( !player.stats_this_frame.size && !( isdefined( player.pers_upgrade_force_test ) && player.pers_upgrade_force_test ) ) + continue; + + for ( pers_upgrade_index = 0; pers_upgrade_index < level.pers_upgrades_keys.size; pers_upgrade_index++ ) + { + pers_upgrade = level.pers_upgrades[level.pers_upgrades_keys[pers_upgrade_index]]; + is_stat_updated = player is_any_pers_upgrade_stat_updated( pers_upgrade ); + + if ( is_stat_updated ) + { + should_award = player check_pers_upgrade( pers_upgrade ); + + if ( should_award ) + { + if ( isdefined( player.pers_upgrades_awarded[level.pers_upgrades_keys[pers_upgrade_index]] ) && player.pers_upgrades_awarded[level.pers_upgrades_keys[pers_upgrade_index]] ) + continue; + + player.pers_upgrades_awarded[level.pers_upgrades_keys[pers_upgrade_index]] = 1; + + if ( flag( "initial_blackscreen_passed" ) && !is_true( player.is_hotjoining ) ) + { + type = "upgrade"; + + if ( isdefined( level.snd_pers_upgrade_force_type ) ) + type = level.snd_pers_upgrade_force_type; + + player playsoundtoplayer( "evt_player_upgrade", player ); + + if ( isdefined( level.pers_upgrade_vo_spoken ) && level.pers_upgrade_vo_spoken ) + player delay_thread( 1, maps\mp\zombies\_zm_audio::create_and_play_dialog, "general", type, undefined, level.snd_pers_upgrade_force_variant ); + else + player delay_thread( 1, ::play_vox_to_player, "general", type, level.snd_pers_upgrade_force_variant ); + + if ( isdefined( player.upgrade_fx_origin ) ) + { + fx_org = player.upgrade_fx_origin; + player.upgrade_fx_origin = undefined; + } + else + { + fx_org = player.origin; + v_dir = anglestoforward( player getplayerangles() ); + v_up = anglestoup( player getplayerangles() ); + fx_org = fx_org + v_dir * 30 + v_up * 12; + } + + playfx( level._effect["upgrade_aquired"], fx_org ); + level thread maps\mp\zombies\_zm::disable_end_game_intermission( 1.5 ); + } +/# + player iprintlnbold( "Upgraded!" ); +#/ + if ( isdefined( pers_upgrade.upgrade_active_func ) ) + player thread [[ pers_upgrade.upgrade_active_func ]](); + + continue; + } + + if ( isdefined( player.pers_upgrades_awarded[level.pers_upgrades_keys[pers_upgrade_index]] ) && player.pers_upgrades_awarded[level.pers_upgrades_keys[pers_upgrade_index]] ) + { + if ( flag( "initial_blackscreen_passed" ) && !is_true( player.is_hotjoining ) ) + player playsoundtoplayer( "evt_player_downgrade", player ); +/# + player iprintlnbold( "Downgraded!" ); +#/ + } + + player.pers_upgrades_awarded[level.pers_upgrades_keys[pers_upgrade_index]] = 0; + } + } + + player.pers_upgrade_force_test = 0; + player.stats_this_frame = []; + } + } + + wait 0.05; + } +} + +wait_for_game_end() +{ + if ( !is_classic() ) + return; + + level waittill( "end_game" ); + + players = getplayers(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + { + player = players[player_index]; + + for ( index = 0; index < level.pers_upgrades_keys.size; index++ ) + { + str_name = level.pers_upgrades_keys[index]; + game_end_reset_if_not_achieved = level.pers_upgrades[str_name].game_end_reset_if_not_achieved; + + if ( isdefined( game_end_reset_if_not_achieved ) && game_end_reset_if_not_achieved == 1 ) + { + if ( !( isdefined( player.pers_upgrades_awarded[str_name] ) && player.pers_upgrades_awarded[str_name] ) ) + { + for ( stat_index = 0; stat_index < level.pers_upgrades[str_name].stat_names.size; stat_index++ ) + player maps\mp\zombies\_zm_stats::zero_client_stat( level.pers_upgrades[str_name].stat_names[stat_index], 0 ); + } + } + } + } +} + +check_pers_upgrade( pers_upgrade ) +{ + should_award = 1; + + for ( i = 0; i < pers_upgrade.stat_names.size; i++ ) + { + stat_name = pers_upgrade.stat_names[i]; + should_award = self check_pers_upgrade_stat( stat_name, pers_upgrade.stat_desired_values[i] ); + + if ( !should_award ) + break; + } + + return should_award; +} + +is_any_pers_upgrade_stat_updated( pers_upgrade ) +{ + if ( isdefined( self.pers_upgrade_force_test ) && self.pers_upgrade_force_test ) + return 1; + + result = 0; + + for ( i = 0; i < pers_upgrade.stat_names.size; i++ ) + { + stat_name = pers_upgrade.stat_names[i]; + + if ( isdefined( self.stats_this_frame[stat_name] ) ) + { + result = 1; + break; + } + } + + return result; +} + +check_pers_upgrade_stat( stat_name, stat_desired_value ) +{ + should_award = 1; + current_stat_value = self maps\mp\zombies\_zm_stats::get_global_stat( stat_name ); + + if ( current_stat_value < stat_desired_value ) + should_award = 0; + + return should_award; +} + +round_end() +{ + if ( !is_classic() ) + return; + + self notify( "pers_stats_end_of_round" ); + + if ( isdefined( self.pers["pers_max_round_reached"] ) ) + { + if ( level.round_number > self.pers["pers_max_round_reached"] ) + self maps\mp\zombies\_zm_stats::set_client_stat( "pers_max_round_reached", level.round_number, 0 ); + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_playerhealth.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_playerhealth.gsc new file mode 100644 index 0000000..4c7796f --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_playerhealth.gsc @@ -0,0 +1,572 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_perks; + +init() +{ + if ( !isdefined( level.script ) ) + level.script = tolower( getdvar( "mapname" ) ); + + precacheshader( "overlay_low_health" ); + level.global_damage_func_ads = ::empty_kill_func; + level.global_damage_func = ::empty_kill_func; + level.difficultytype[0] = "easy"; + level.difficultytype[1] = "normal"; + level.difficultytype[2] = "hardened"; + level.difficultytype[3] = "veteran"; + level.difficultystring["easy"] = &"GAMESKILL_EASY"; + level.difficultystring["normal"] = &"GAMESKILL_NORMAL"; + level.difficultystring["hardened"] = &"GAMESKILL_HARDENED"; + level.difficultystring["veteran"] = &"GAMESKILL_VETERAN"; +/# + thread playerhealthdebug(); +#/ + level.gameskill = 1; + + switch ( level.gameskill ) + { + case 0: + setdvar( "currentDifficulty", "easy" ); + break; + case 1: + setdvar( "currentDifficulty", "normal" ); + break; + case 2: + setdvar( "currentDifficulty", "hardened" ); + break; + case 3: + setdvar( "currentDifficulty", "veteran" ); + break; + } + + logstring( "difficulty: " + level.gameskill ); + level.player_deathinvulnerabletime = 1700; + level.longregentime = 5000; + level.healthoverlaycutoff = 0.2; + level.invultime_preshield = 0.35; + level.invultime_onshield = 0.5; + level.invultime_postshield = 0.3; + level.playerhealth_regularregendelay = 2400; + level.worthydamageratio = 0.1; + setdvar( "player_meleeDamageMultiplier", 0.4 ); + onplayerconnect_callback( ::onplayerconnect ); +} + +onplayerconnect() +{ + self thread onplayerspawned(); +} + +onplayerspawned() +{ + for (;;) + { + self waittill( "spawned_player" ); + + self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); + + if ( level.createfx_enabled ) + continue; + + self notify( "noHealthOverlay" ); + self thread playerhealthregen(); + } +} + +playerhurtcheck() +{ + self endon( "noHealthOverlay" ); + self.hurtagain = 0; + + for (;;) + { + self waittill( "damage", amount, attacker, dir, point, mod ); + + if ( isdefined( attacker ) && isplayer( attacker ) && attacker.team == self.team ) + continue; + + self.hurtagain = 1; + self.damagepoint = point; + self.damageattacker = attacker; + } +} + +playerhealthregen() +{ + self notify( "playerHealthRegen" ); + self endon( "playerHealthRegen" ); + self endon( "death" ); + self endon( "disconnect" ); + + if ( !isdefined( self.flag ) ) + { + self.flag = []; + self.flags_lock = []; + } + + if ( !isdefined( self.flag["player_has_red_flashing_overlay"] ) ) + { + self player_flag_init( "player_has_red_flashing_overlay" ); + self player_flag_init( "player_is_invulnerable" ); + } + + self player_flag_clear( "player_has_red_flashing_overlay" ); + self player_flag_clear( "player_is_invulnerable" ); + self thread healthoverlay(); + oldratio = 1; + health_add = 0; + regenrate = 0.1; + veryhurt = 0; + playerjustgotredflashing = 0; + invultime = 0; + hurttime = 0; + newhealth = 0; + lastinvulratio = 1; + self thread playerhurtcheck(); + + if ( !isdefined( self.veryhurt ) ) + self.veryhurt = 0; + + self.bolthit = 0; + + if ( getdvar( _hash_FCECE67E ) == "" ) + setdvar( "scr_playerInvulTimeScale", 1.0 ); + + playerinvultimescale = getdvarfloat( _hash_FCECE67E ); + + for (;;) + { + wait 0.05; + waittillframeend; + + if ( self.health == self.maxhealth ) + { + if ( self player_flag( "player_has_red_flashing_overlay" ) ) + player_flag_clear( "player_has_red_flashing_overlay" ); + + lastinvulratio = 1; + playerjustgotredflashing = 0; + veryhurt = 0; + continue; + } + + if ( self.health <= 0 ) + { +/# + showhitlog(); +#/ + return; + } + + wasveryhurt = veryhurt; + health_ratio = self.health / self.maxhealth; + + if ( health_ratio <= level.healthoverlaycutoff ) + { + veryhurt = 1; + + if ( !wasveryhurt ) + { + hurttime = gettime(); + self startfadingblur( 3.6, 2 ); + self player_flag_set( "player_has_red_flashing_overlay" ); + playerjustgotredflashing = 1; + } + } + + if ( self.hurtagain ) + { + hurttime = gettime(); + self.hurtagain = 0; + } + + if ( health_ratio >= oldratio ) + { + if ( gettime() - hurttime < level.playerhealth_regularregendelay ) + continue; + + if ( veryhurt ) + { + self.veryhurt = 1; + newhealth = health_ratio; + + if ( gettime() > hurttime + level.longregentime ) + newhealth += regenrate; + } + else + { + newhealth = 1; + self.veryhurt = 0; + } + + if ( newhealth > 1.0 ) + newhealth = 1.0; + + if ( newhealth <= 0 ) + return; +/# + if ( newhealth > health_ratio ) + logregen( newhealth ); +#/ + self setnormalhealth( newhealth ); + oldratio = self.health / self.maxhealth; + continue; + } + + invulworthyhealthdrop = lastinvulratio - health_ratio > level.worthydamageratio; + + if ( self.health <= 1 ) + { + self setnormalhealth( 2 / self.maxhealth ); + invulworthyhealthdrop = 1; +/# + if ( !isdefined( level.player_deathinvulnerabletimeout ) ) + level.player_deathinvulnerabletimeout = 0; + + if ( level.player_deathinvulnerabletimeout < gettime() ) + level.player_deathinvulnerabletimeout = gettime() + getdvarint( _hash_4E44E32D ); +#/ + } + + oldratio = self.health / self.maxhealth; + level notify( "hit_again" ); + health_add = 0; + hurttime = gettime(); + self startfadingblur( 3, 0.8 ); + + if ( !invulworthyhealthdrop || playerinvultimescale <= 0.0 ) + { +/# + loghit( self.health, 0 ); +#/ + continue; + } + + if ( self player_flag( "player_is_invulnerable" ) ) + continue; + + self player_flag_set( "player_is_invulnerable" ); + level notify( "player_becoming_invulnerable" ); + + if ( playerjustgotredflashing ) + { + invultime = level.invultime_onshield; + playerjustgotredflashing = 0; + } + else if ( veryhurt ) + invultime = level.invultime_postshield; + else + invultime = level.invultime_preshield; + + invultime *= playerinvultimescale; +/# + loghit( self.health, invultime ); +#/ + lastinvulratio = self.health / self.maxhealth; + self thread playerinvul( invultime ); + } +} + +playerinvul( timer ) +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( timer > 0 ) + { +/# + level.playerinvultimeend = gettime() + timer * 1000; +#/ + wait( timer ); + } + + self player_flag_clear( "player_is_invulnerable" ); +} + +healthoverlay() +{ + self endon( "disconnect" ); + self endon( "noHealthOverlay" ); + + if ( !isdefined( self._health_overlay ) ) + { + self._health_overlay = newclienthudelem( self ); + self._health_overlay.x = 0; + self._health_overlay.y = 0; + self._health_overlay setshader( "overlay_low_health", 640, 480 ); + self._health_overlay.alignx = "left"; + self._health_overlay.aligny = "top"; + self._health_overlay.horzalign = "fullscreen"; + self._health_overlay.vertalign = "fullscreen"; + self._health_overlay.alpha = 0; + } + + overlay = self._health_overlay; + self thread healthoverlay_remove( overlay ); + self thread watchhideredflashingoverlay( overlay ); + pulsetime = 0.8; + + for (;;) + { + if ( overlay.alpha > 0 ) + overlay fadeovertime( 0.5 ); + + overlay.alpha = 0; + self player_flag_wait( "player_has_red_flashing_overlay" ); + self redflashingoverlay( overlay ); + } +} + +fadefunc( overlay, severity, mult, hud_scaleonly ) +{ + pulsetime = 0.8; + scalemin = 0.5; + fadeintime = pulsetime * 0.1; + stayfulltime = pulsetime * ( 0.1 + severity * 0.2 ); + fadeouthalftime = pulsetime * ( 0.1 + severity * 0.1 ); + fadeoutfulltime = pulsetime * 0.3; + remainingtime = pulsetime - fadeintime - stayfulltime - fadeouthalftime - fadeoutfulltime; + assert( remainingtime >= -0.001 ); + + if ( remainingtime < 0 ) + remainingtime = 0; + + halfalpha = 0.8 + severity * 0.1; + leastalpha = 0.5 + severity * 0.3; + overlay fadeovertime( fadeintime ); + overlay.alpha = mult * 1.0; + wait( fadeintime + stayfulltime ); + overlay fadeovertime( fadeouthalftime ); + overlay.alpha = mult * halfalpha; + wait( fadeouthalftime ); + overlay fadeovertime( fadeoutfulltime ); + overlay.alpha = mult * leastalpha; + wait( fadeoutfulltime ); + wait( remainingtime ); +} + +watchhideredflashingoverlay( overlay ) +{ + self endon( "death_or_disconnect" ); + + while ( isdefined( overlay ) ) + { + self waittill( "clear_red_flashing_overlay" ); + + self player_flag_clear( "player_has_red_flashing_overlay" ); + overlay fadeovertime( 0.05 ); + overlay.alpha = 0; + setclientsysstate( "levelNotify", "rfo3", self ); + self notify( "hit_again" ); + } +} + +redflashingoverlay( overlay ) +{ + self endon( "hit_again" ); + self endon( "damage" ); + self endon( "death" ); + self endon( "disconnect" ); + self endon( "clear_red_flashing_overlay" ); + self.stopflashingbadlytime = gettime() + level.longregentime; + + if ( !( isdefined( self.is_in_process_of_zombify ) && self.is_in_process_of_zombify ) && !( isdefined( self.is_zombie ) && self.is_zombie ) ) + { + fadefunc( overlay, 1, 1, 0 ); + + while ( gettime() < self.stopflashingbadlytime && isalive( self ) && ( !( isdefined( self.is_in_process_of_zombify ) && self.is_in_process_of_zombify ) && !( isdefined( self.is_zombie ) && self.is_zombie ) ) ) + fadefunc( overlay, 0.9, 1, 0 ); + + if ( !( isdefined( self.is_in_process_of_zombify ) && self.is_in_process_of_zombify ) && !( isdefined( self.is_zombie ) && self.is_zombie ) ) + { + if ( isalive( self ) ) + fadefunc( overlay, 0.65, 0.8, 0 ); + + fadefunc( overlay, 0, 0.6, 1 ); + } + } + + overlay fadeovertime( 0.5 ); + overlay.alpha = 0; + self player_flag_clear( "player_has_red_flashing_overlay" ); + setclientsysstate( "levelNotify", "rfo3", self ); + wait 0.5; + self notify( "hit_again" ); +} + +healthoverlay_remove( overlay ) +{ + self endon( "disconnect" ); + self waittill_any( "noHealthOverlay", "death" ); + overlay fadeovertime( 3.5 ); + overlay.alpha = 0; +} + +empty_kill_func( type, loc, point, attacker, amount ) +{ + +} + +loghit( newhealth, invultime ) +{ +/# + +#/ +} + +logregen( newhealth ) +{ +/# + +#/ +} + +showhitlog() +{ +/# + +#/ +} + +playerhealthdebug() +{ +/# + if ( getdvar( "scr_health_debug" ) == "" ) + setdvar( "scr_health_debug", "0" ); + + waittillframeend; + + while ( true ) + { + while ( true ) + { + if ( getdvar( "scr_health_debug" ) != "0" ) + break; + + wait 0.5; + } + + thread printhealthdebug(); + + while ( true ) + { + if ( getdvar( "scr_health_debug" ) == "0" ) + break; + + wait 0.5; + } + + level notify( "stop_printing_grenade_timers" ); + destroyhealthdebug(); + } +#/ +} + +printhealthdebug() +{ +/# + level notify( "stop_printing_health_bars" ); + level endon( "stop_printing_health_bars" ); + x = 40; + y = 40; + level.healthbarhudelems = []; + level.healthbarkeys[0] = "Health"; + level.healthbarkeys[1] = "No Hit Time"; + level.healthbarkeys[2] = "No Die Time"; + + if ( !isdefined( level.playerinvultimeend ) ) + level.playerinvultimeend = 0; + + if ( !isdefined( level.player_deathinvulnerabletimeout ) ) + level.player_deathinvulnerabletimeout = 0; + + for ( i = 0; i < level.healthbarkeys.size; i++ ) + { + key = level.healthbarkeys[i]; + textelem = newhudelem(); + textelem.x = x; + textelem.y = y; + textelem.alignx = "left"; + textelem.aligny = "top"; + textelem.horzalign = "fullscreen"; + textelem.vertalign = "fullscreen"; + textelem settext( key ); + bgbar = newhudelem(); + bgbar.x = x + 79; + bgbar.y = y + 1; + bgbar.alignx = "left"; + bgbar.aligny = "top"; + bgbar.horzalign = "fullscreen"; + bgbar.vertalign = "fullscreen"; + bgbar.maxwidth = 3; + bgbar setshader( "white", bgbar.maxwidth, 10 ); + bgbar.color = vectorscale( ( 1, 1, 1 ), 0.5 ); + bar = newhudelem(); + bar.x = x + 80; + bar.y = y + 2; + bar.alignx = "left"; + bar.aligny = "top"; + bar.horzalign = "fullscreen"; + bar.vertalign = "fullscreen"; + bar setshader( "black", 1, 8 ); + textelem.bar = bar; + textelem.bgbar = bgbar; + textelem.key = key; + y += 10; + level.healthbarhudelems[key] = textelem; + } + + flag_wait( "start_zombie_round_logic" ); + + while ( true ) + { + wait 0.05; + players = get_players(); + + for ( i = 0; i < level.healthbarkeys.size && players.size > 0; i++ ) + { + key = level.healthbarkeys[i]; + player = players[0]; + width = 0; + + if ( i == 0 ) + width = player.health / player.maxhealth * 300; + else if ( i == 1 ) + width = ( level.playerinvultimeend - gettime() ) / 1000 * 40; + else if ( i == 2 ) + width = ( level.player_deathinvulnerabletimeout - gettime() ) / 1000 * 40; + + width = int( max( width, 1 ) ); + width = int( min( width, 300 ) ); + bar = level.healthbarhudelems[key].bar; + bar setshader( "black", width, 8 ); + bgbar = level.healthbarhudelems[key].bgbar; + + if ( width + 2 > bgbar.maxwidth ) + { + bgbar.maxwidth = width + 2; + bgbar setshader( "white", bgbar.maxwidth, 10 ); + bgbar.color = vectorscale( ( 1, 1, 1 ), 0.5 ); + } + } + } +#/ +} + +destroyhealthdebug() +{ +/# + if ( !isdefined( level.healthbarhudelems ) ) + return; + + for ( i = 0; i < level.healthbarkeys.size; i++ ) + { + level.healthbarhudelems[level.healthbarkeys[i]].bgbar destroy(); + level.healthbarhudelems[level.healthbarkeys[i]].bar destroy(); + level.healthbarhudelems[level.healthbarkeys[i]] destroy(); + } +#/ +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_power.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_power.gsc new file mode 100644 index 0000000..22b8d8c --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_power.gsc @@ -0,0 +1,676 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\_demo; +#include maps\mp\zombies\_zm_ai_basic; + +init() +{ + if ( !isdefined( level.powered_items ) ) + level.powered_items = []; + + if ( !isdefined( level.local_power ) ) + level.local_power = []; + + thread standard_powered_items(); +/# + thread debug_powered_items(); +#/ +} + +debug_powered_items() +{ +/# + while ( true ) + { + if ( getdvarint( _hash_EB512CB7 ) ) + { + if ( isdefined( level.local_power ) ) + { + foreach ( localpower in level.local_power ) + circle( localpower.origin, localpower.radius, ( 1, 0, 0 ), 0, 1, 1 ); + } + } + + wait 0.05; + } +#/ +} + +watch_global_power() +{ + while ( true ) + { + flag_wait( "power_on" ); + level thread set_global_power( 1 ); + flag_waitopen( "power_on" ); + level thread set_global_power( 0 ); + } +} + +standard_powered_items() +{ + flag_wait( "start_zombie_round_logic" ); + vending_triggers = getentarray( "zombie_vending", "targetname" ); + + foreach ( trigger in vending_triggers ) + { + if ( trigger.script_noteworthy == "specialty_weapupgrade" ) + continue; + + powered_on = maps\mp\zombies\_zm_perks::get_perk_machine_start_state( trigger.script_noteworthy ); + add_powered_item( ::perk_power_on, ::perk_power_off, ::perk_range, ::cost_low_if_local, 0, powered_on, trigger ); + } + + pack_a_punch = getentarray( "specialty_weapupgrade", "script_noteworthy" ); + + foreach ( trigger in pack_a_punch ) + { + powered_on = maps\mp\zombies\_zm_perks::get_perk_machine_start_state( trigger.script_noteworthy ); + trigger.powered = add_powered_item( ::pap_power_on, ::pap_power_off, ::pap_range, ::cost_low_if_local, 0, powered_on, trigger ); + } + + zombie_doors = getentarray( "zombie_door", "targetname" ); + + foreach ( door in zombie_doors ) + { + if ( isdefined( door.script_noteworthy ) && door.script_noteworthy == "electric_door" ) + { + add_powered_item( ::door_power_on, ::door_power_off, ::door_range, ::cost_door, 0, 0, door ); + continue; + } + + if ( isdefined( door.script_noteworthy ) && door.script_noteworthy == "local_electric_door" ) + { + power_sources = 0; + + if ( !( isdefined( level.power_local_doors_globally ) && level.power_local_doors_globally ) ) + power_sources = 1; + + add_powered_item( ::door_local_power_on, ::door_local_power_off, ::door_range, ::cost_door, power_sources, 0, door ); + } + } + + thread watch_global_power(); +} + +add_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target ) +{ + powered = spawnstruct(); + powered.power_on_func = power_on_func; + powered.power_off_func = power_off_func; + powered.range_func = range_func; + powered.power_sources = power_sources; + powered.self_powered = self_powered; + powered.target = target; + powered.cost_func = cost_func; + powered.power = self_powered; + powered.powered_count = self_powered; + powered.depowered_count = 0; + + if ( !isdefined( level.powered_items ) ) + level.powered_items = []; + + level.powered_items[level.powered_items.size] = powered; + return powered; +} + +remove_powered_item( powered ) +{ + arrayremovevalue( level.powered_items, powered, 0 ); +} + +add_temp_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target ) +{ + powered = add_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target ); + + if ( isdefined( level.local_power ) ) + { + foreach ( localpower in level.local_power ) + { + if ( powered [[ powered.range_func ]]( 1, localpower.origin, localpower.radius ) ) + { + powered change_power( 1, localpower.origin, localpower.radius ); + + if ( !isdefined( localpower.added_list ) ) + localpower.added_list = []; + + localpower.added_list[localpower.added_list.size] = powered; + } + } + } + + thread watch_temp_powered_item( powered ); + return powered; +} + +watch_temp_powered_item( powered ) +{ + powered.target waittill( "death" ); + + remove_powered_item( powered ); + + if ( isdefined( level.local_power ) ) + { + foreach ( localpower in level.local_power ) + { + if ( isdefined( localpower.added_list ) ) + arrayremovevalue( localpower.added_list, powered, 0 ); + + if ( isdefined( localpower.enabled_list ) ) + arrayremovevalue( localpower.enabled_list, powered, 0 ); + } + } +} + +change_power_in_radius( delta, origin, radius ) +{ + changed_list = []; + + for ( i = 0; i < level.powered_items.size; i++ ) + { + powered = level.powered_items[i]; + + if ( powered.power_sources != 2 ) + { + if ( powered [[ powered.range_func ]]( delta, origin, radius ) ) + { + powered change_power( delta, origin, radius ); + changed_list[changed_list.size] = powered; + } + } + } + + return changed_list; +} + +change_power( delta, origin, radius ) +{ + if ( delta > 0 ) + { + if ( !self.power ) + { + self.power = 1; + self [[ self.power_on_func ]]( origin, radius ); + } + + self.powered_count++; + } + else if ( delta < 0 ) + { + if ( self.power ) + { + self.power = 0; + self [[ self.power_off_func ]]( origin, radius ); + } + + self.depowered_count++; + } +} + +revert_power_to_list( delta, origin, radius, powered_list ) +{ + for ( i = 0; i < powered_list.size; i++ ) + { + powered = powered_list[i]; + powered revert_power( delta, origin, radius ); + } +} + +revert_power( delta, origin, radius, powered_list ) +{ + if ( delta > 0 ) + { + self.depowered_count--; + assert( self.depowered_count >= 0, "Depower underflow in power system" ); + + if ( self.depowered_count == 0 && self.powered_count > 0 && !self.power ) + { + self.power = 1; + self [[ self.power_on_func ]]( origin, radius ); + } + } + else if ( delta < 0 ) + { + self.powered_count--; + assert( self.powered_count >= 0, "Repower underflow in power system" ); + + if ( self.powered_count == 0 && self.power ) + { + self.power = 0; + self [[ self.power_off_func ]]( origin, radius ); + } + } +} + +add_local_power( origin, radius ) +{ + localpower = spawnstruct(); +/# + println( "ZM POWER: local power on at " + origin + " radius " + radius + "\\n" ); +#/ + localpower.origin = origin; + localpower.radius = radius; + localpower.enabled_list = change_power_in_radius( 1, origin, radius ); + + if ( !isdefined( level.local_power ) ) + level.local_power = []; + + level.local_power[level.local_power.size] = localpower; + return localpower; +} + +move_local_power( localpower, origin ) +{ + changed_list = []; + + for ( i = 0; i < level.powered_items.size; i++ ) + { + powered = level.powered_items[i]; + + if ( powered.power_sources == 2 ) + continue; + + waspowered = isinarray( localpower.enabled_list, powered ); + ispowered = powered [[ powered.range_func ]]( 1, origin, localpower.radius ); + + if ( ispowered && !waspowered ) + { + powered change_power( 1, origin, localpower.radius ); + localpower.enabled_list[localpower.enabled_list.size] = powered; + continue; + } + + if ( !ispowered && waspowered ) + { + powered revert_power( -1, localpower.origin, localpower.radius, localpower.enabled_list ); + arrayremovevalue( localpower.enabled_list, powered, 0 ); + } + } + + localpower.origin = origin; + return localpower; +} + +end_local_power( localpower ) +{ +/# + println( "ZM POWER: local power off at " + localpower.origin + " radius " + localpower.radius + "\\n" ); +#/ + if ( isdefined( localpower.enabled_list ) ) + revert_power_to_list( -1, localpower.origin, localpower.radius, localpower.enabled_list ); + + localpower.enabled_list = undefined; + + if ( isdefined( localpower.added_list ) ) + revert_power_to_list( -1, localpower.origin, localpower.radius, localpower.added_list ); + + localpower.added_list = undefined; + arrayremovevalue( level.local_power, localpower, 0 ); +} + +has_local_power( origin ) +{ + if ( isdefined( level.local_power ) ) + { + foreach ( localpower in level.local_power ) + { + if ( distancesquared( localpower.origin, origin ) < localpower.radius * localpower.radius ) + return true; + } + } + + return false; +} + +get_powered_item_cost() +{ + if ( !( isdefined( self.power ) && self.power ) ) + return 0; + + if ( isdefined( level._power_global ) && level._power_global && !( self.power_sources == 1 ) ) + return 0; + + cost = [[ self.cost_func ]](); + power_sources = self.powered_count; + + if ( power_sources < 1 ) + power_sources = 1; + + return cost / power_sources; +} + +get_local_power_cost( localpower ) +{ + cost = 0; + + if ( isdefined( localpower ) && isdefined( localpower.enabled_list ) ) + { + foreach ( powered in localpower.enabled_list ) + cost += powered get_powered_item_cost(); + } + + if ( isdefined( localpower ) && isdefined( localpower.added_list ) ) + { + foreach ( powered in localpower.added_list ) + cost += powered get_powered_item_cost(); + } + + return cost; +} + +set_global_power( on_off ) +{ + maps\mp\_demo::bookmark( "zm_power", gettime(), undefined, undefined, 1 ); + level._power_global = on_off; + + for ( i = 0; i < level.powered_items.size; i++ ) + { + powered = level.powered_items[i]; + + if ( isdefined( powered.target ) && powered.power_sources != 1 ) + { + powered global_power( on_off ); + wait_network_frame(); + } + } +} + +global_power( on_off ) +{ + if ( on_off ) + { +/# + println( "ZM POWER: global power on\\n" ); +#/ + if ( !self.power ) + { + self.power = 1; + self [[ self.power_on_func ]](); + } + + self.powered_count++; + } + else + { +/# + println( "ZM POWER: global power off\\n" ); +#/ + self.powered_count--; + assert( self.powered_count >= 0, "Repower underflow in power system" ); + + if ( self.powered_count == 0 && self.power ) + { + self.power = 0; + self [[ self.power_off_func ]](); + } + } +} + +never_power_on( origin, radius ) +{ + +} + +never_power_off( origin, radius ) +{ + +} + +cost_negligible() +{ + if ( isdefined( self.one_time_cost ) ) + { + cost = self.one_time_cost; + self.one_time_cost = undefined; + return cost; + } + + return 0; +} + +cost_low_if_local() +{ + if ( isdefined( self.one_time_cost ) ) + { + cost = self.one_time_cost; + self.one_time_cost = undefined; + return cost; + } + + if ( isdefined( level._power_global ) && level._power_global ) + return 0; + + if ( isdefined( self.self_powered ) && self.self_powered ) + return 0; + + return 1; +} + +cost_high() +{ + if ( isdefined( self.one_time_cost ) ) + { + cost = self.one_time_cost; + self.one_time_cost = undefined; + return cost; + } + + return 10; +} + +door_range( delta, origin, radius ) +{ + if ( delta < 0 ) + return false; + + if ( distancesquared( self.target.origin, origin ) < radius * radius ) + return true; + + return false; +} + +door_power_on( origin, radius ) +{ +/# + println( "^1ZM POWER: door on\\n" ); +#/ + self.target.power_on = 1; + self.target notify( "power_on" ); +} + +door_power_off( origin, radius ) +{ +/# + println( "^1ZM POWER: door off\\n" ); +#/ + self.target notify( "power_off" ); + self.target.power_on = 0; +} + +door_local_power_on( origin, radius ) +{ +/# + println( "^1ZM POWER: door on (local)\\n" ); +#/ + self.target.local_power_on = 1; + self.target notify( "local_power_on" ); +} + +door_local_power_off( origin, radius ) +{ +/# + println( "^1ZM POWER: door off (local)\\n" ); +#/ + self.target notify( "local_power_off" ); + self.target.local_power_on = 0; +} + +cost_door() +{ + if ( isdefined( self.target.power_cost ) ) + { + if ( !isdefined( self.one_time_cost ) ) + self.one_time_cost = 0; + + self.one_time_cost += self.target.power_cost; + self.target.power_cost = 0; + } + + if ( isdefined( self.one_time_cost ) ) + { + cost = self.one_time_cost; + self.one_time_cost = undefined; + return cost; + } + + return 0; +} + +zombie_range( delta, origin, radius ) +{ + if ( delta > 0 ) + return false; + + self.zombies = get_array_of_closest( origin, get_round_enemy_array(), undefined, undefined, radius ); + + if ( !isdefined( self.zombies ) ) + return false; + + self.power = 1; + return true; +} + +zombie_power_off( origin, radius ) +{ +/# + println( "^1ZM POWER: zombies off\\n" ); +#/ + for ( i = 0; i < self.zombies.size; i++ ) + { + self.zombies[i] thread stun_zombie(); + wait 0.05; + } +} + +stun_zombie() +{ + self endon( "death" ); + self notify( "stun_zombie" ); + self endon( "stun_zombie" ); + + if ( self.health <= 0 ) + { +/# + iprintln( "trying to stun a dead zombie" ); +#/ + return; + } + + if ( isdefined( self.ignore_inert ) && self.ignore_inert ) + return; + + if ( isdefined( self.stun_zombie ) ) + { + self thread [[ self.stun_zombie ]](); + return; + } + + self thread maps\mp\zombies\_zm_ai_basic::start_inert(); +} + +perk_range( delta, origin, radius ) +{ + if ( isdefined( self.target ) ) + { + perkorigin = self.target.origin; + + if ( isdefined( self.target.trigger_off ) && self.target.trigger_off ) + perkorigin = self.target.realorigin; + else if ( isdefined( self.target.disabled ) && self.target.disabled ) + perkorigin += vectorscale( ( 0, 0, 1 ), 10000.0 ); + + if ( distancesquared( perkorigin, origin ) < radius * radius ) + return true; + } + + return false; +} + +perk_power_on( origin, radius ) +{ +/# + println( "^1ZM POWER: perk " + self.target maps\mp\zombies\_zm_perks::getvendingmachinenotify() + " on\\n" ); +#/ + level notify( self.target maps\mp\zombies\_zm_perks::getvendingmachinenotify() + "_on" ); + maps\mp\zombies\_zm_perks::perk_unpause( self.target.script_noteworthy ); +} + +perk_power_off( origin, radius ) +{ + notify_name = self.target maps\mp\zombies\_zm_perks::getvendingmachinenotify(); + + if ( isdefined( notify_name ) && notify_name == "revive" ) + { + if ( level flag_exists( "solo_game" ) && flag( "solo_game" ) ) + return; + } +/# + println( "^1ZM POWER: perk " + self.target.script_noteworthy + " off\\n" ); +#/ + self.target notify( "death" ); + self.target thread maps\mp\zombies\_zm_perks::vending_trigger_think(); + + if ( isdefined( self.target.perk_hum ) ) + self.target.perk_hum delete(); + + maps\mp\zombies\_zm_perks::perk_pause( self.target.script_noteworthy ); + level notify( self.target maps\mp\zombies\_zm_perks::getvendingmachinenotify() + "_off" ); +} + +pap_range( delta, origin, radius ) +{ + if ( isdefined( self.target ) ) + { + paporigin = self.target.origin; + + if ( isdefined( self.target.trigger_off ) && self.target.trigger_off ) + paporigin = self.target.realorigin; + else if ( isdefined( self.target.disabled ) && self.target.disabled ) + paporigin += vectorscale( ( 0, 0, 1 ), 10000.0 ); + + if ( distancesquared( paporigin, origin ) < radius * radius ) + return true; + } + + return false; +} + +pap_power_on( origin, radius ) +{ +/# + println( "^1ZM POWER: PaP on\\n" ); +#/ + level notify( "Pack_A_Punch_on" ); +} + +pap_power_off( origin, radius ) +{ +/# + println( "^1ZM POWER: PaP off\\n" ); +#/ + level notify( "Pack_A_Punch_off" ); + self.target notify( "death" ); + self.target thread maps\mp\zombies\_zm_perks::vending_weapon_upgrade(); +} + +pap_is_on() +{ + if ( isdefined( self.powered ) ) + return self.powered.power; + + return 0; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_powerups.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_powerups.gsc new file mode 100644 index 0000000..54d2c8a --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_powerups.gsc @@ -0,0 +1,2785 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\_demo; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_pers_upgrades; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\zombies\_zm_blockers; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_score; +#include maps\mp\animscripts\zm_death; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_melee_weapon; + +init() +{ + precacheshader( "specialty_doublepoints_zombies" ); + precacheshader( "specialty_instakill_zombies" ); + precacheshader( "specialty_firesale_zombies" ); + precacheshader( "zom_icon_bonfire" ); + precacheshader( "zom_icon_minigun" ); + precacheshader( "black" ); + set_zombie_var( "zombie_insta_kill", 0, undefined, undefined, 1 ); + set_zombie_var( "zombie_point_scalar", 1, undefined, undefined, 1 ); + set_zombie_var( "zombie_drop_item", 0 ); + set_zombie_var( "zombie_timer_offset", 350 ); + set_zombie_var( "zombie_timer_offset_interval", 30 ); + set_zombie_var( "zombie_powerup_fire_sale_on", 0 ); + set_zombie_var( "zombie_powerup_fire_sale_time", 30 ); + set_zombie_var( "zombie_powerup_bonfire_sale_on", 0 ); + set_zombie_var( "zombie_powerup_bonfire_sale_time", 30 ); + set_zombie_var( "zombie_powerup_insta_kill_on", 0, undefined, undefined, 1 ); + set_zombie_var( "zombie_powerup_insta_kill_time", 30, undefined, undefined, 1 ); + set_zombie_var( "zombie_powerup_point_doubler_on", 0, undefined, undefined, 1 ); + set_zombie_var( "zombie_powerup_point_doubler_time", 30, undefined, undefined, 1 ); + set_zombie_var( "zombie_powerup_drop_increment", 2000 ); + set_zombie_var( "zombie_powerup_drop_max_per_round", 4 ); + onplayerconnect_callback( ::init_player_zombie_vars ); + level._effect["powerup_on"] = loadfx( "misc/fx_zombie_powerup_on" ); + level._effect["powerup_off"] = loadfx( "misc/fx_zombie_powerup_off" ); + level._effect["powerup_grabbed"] = loadfx( "misc/fx_zombie_powerup_grab" ); + level._effect["powerup_grabbed_wave"] = loadfx( "misc/fx_zombie_powerup_wave" ); + + if ( isdefined( level.using_zombie_powerups ) && level.using_zombie_powerups ) + { + level._effect["powerup_on_red"] = loadfx( "misc/fx_zombie_powerup_on_red" ); + level._effect["powerup_grabbed_red"] = loadfx( "misc/fx_zombie_powerup_red_grab" ); + level._effect["powerup_grabbed_wave_red"] = loadfx( "misc/fx_zombie_powerup_red_wave" ); + } + + level._effect["powerup_on_solo"] = loadfx( "misc/fx_zombie_powerup_solo_on" ); + level._effect["powerup_grabbed_solo"] = loadfx( "misc/fx_zombie_powerup_solo_grab" ); + level._effect["powerup_grabbed_wave_solo"] = loadfx( "misc/fx_zombie_powerup_solo_wave" ); + level._effect["powerup_on_caution"] = loadfx( "misc/fx_zombie_powerup_caution_on" ); + level._effect["powerup_grabbed_caution"] = loadfx( "misc/fx_zombie_powerup_caution_grab" ); + level._effect["powerup_grabbed_wave_caution"] = loadfx( "misc/fx_zombie_powerup_caution_wave" ); + init_powerups(); + + if ( !level.enable_magic ) + return; + + thread watch_for_drop(); + thread setup_firesale_audio(); + thread setup_bonfiresale_audio(); + level.use_new_carpenter_func = ::start_carpenter_new; + level.board_repair_distance_squared = 562500; +} + +init_powerups() +{ + flag_init( "zombie_drop_powerups" ); + + if ( isdefined( level.enable_magic ) && level.enable_magic ) + flag_set( "zombie_drop_powerups" ); + + if ( !isdefined( level.active_powerups ) ) + level.active_powerups = []; + + if ( !isdefined( level.zombie_powerup_array ) ) + level.zombie_powerup_array = []; + + if ( !isdefined( level.zombie_special_drop_array ) ) + level.zombie_special_drop_array = []; + + add_zombie_powerup( "nuke", "zombie_bomb", &"ZOMBIE_POWERUP_NUKE", ::func_should_always_drop, 0, 0, 0, "misc/fx_zombie_mini_nuke_hotness" ); + add_zombie_powerup( "insta_kill", "zombie_skull", &"ZOMBIE_POWERUP_INSTA_KILL", ::func_should_always_drop, 0, 0, 0, undefined, "powerup_instant_kill", "zombie_powerup_insta_kill_time", "zombie_powerup_insta_kill_on" ); + add_zombie_powerup( "full_ammo", "zombie_ammocan", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_always_drop, 0, 0, 0 ); + add_zombie_powerup( "double_points", "zombie_x2_icon", &"ZOMBIE_POWERUP_DOUBLE_POINTS", ::func_should_always_drop, 0, 0, 0, undefined, "powerup_double_points", "zombie_powerup_point_doubler_time", "zombie_powerup_point_doubler_on" ); + add_zombie_powerup( "carpenter", "zombie_carpenter", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_drop_carpenter, 0, 0, 0 ); + add_zombie_powerup( "fire_sale", "zombie_firesale", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_drop_fire_sale, 0, 0, 0, undefined, "powerup_fire_sale", "zombie_powerup_fire_sale_time", "zombie_powerup_fire_sale_on" ); + add_zombie_powerup( "bonfire_sale", "zombie_pickup_bonfire", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_never_drop, 0, 0, 0, undefined, "powerup_bon_fire", "zombie_powerup_bonfire_sale_time", "zombie_powerup_bonfire_sale_on" ); + add_zombie_powerup( "minigun", "zombie_pickup_minigun", &"ZOMBIE_POWERUP_MINIGUN", ::func_should_drop_minigun, 1, 0, 0, undefined, "powerup_mini_gun", "zombie_powerup_minigun_time", "zombie_powerup_minigun_on" ); + add_zombie_powerup( "free_perk", "zombie_pickup_perk_bottle", &"ZOMBIE_POWERUP_FREE_PERK", ::func_should_never_drop, 0, 0, 0 ); + add_zombie_powerup( "tesla", "zombie_pickup_minigun", &"ZOMBIE_POWERUP_MINIGUN", ::func_should_never_drop, 1, 0, 0, undefined, "powerup_tesla", "zombie_powerup_tesla_time", "zombie_powerup_tesla_on" ); + add_zombie_powerup( "random_weapon", "zombie_pickup_minigun", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_never_drop, 1, 0, 0 ); + add_zombie_powerup( "bonus_points_player", "zombie_z_money_icon", &"ZOMBIE_POWERUP_BONUS_POINTS", ::func_should_never_drop, 1, 0, 0 ); + add_zombie_powerup( "bonus_points_team", "zombie_z_money_icon", &"ZOMBIE_POWERUP_BONUS_POINTS", ::func_should_never_drop, 0, 0, 0 ); + add_zombie_powerup( "lose_points_team", "zombie_z_money_icon", &"ZOMBIE_POWERUP_LOSE_POINTS", ::func_should_never_drop, 0, 0, 1 ); + add_zombie_powerup( "lose_perk", "zombie_pickup_perk_bottle", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_never_drop, 0, 0, 1 ); + add_zombie_powerup( "empty_clip", "zombie_ammocan", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_never_drop, 0, 0, 1 ); + add_zombie_powerup( "insta_kill_ug", "zombie_skull", &"ZOMBIE_POWERUP_INSTA_KILL", ::func_should_never_drop, 1, 0, 0, undefined, "powerup_instant_kill_ug", "zombie_powerup_insta_kill_ug_time", "zombie_powerup_insta_kill_ug_on", 5000 ); + + if ( isdefined( level.level_specific_init_powerups ) ) + [[ level.level_specific_init_powerups ]](); + + randomize_powerups(); + level.zombie_powerup_index = 0; + randomize_powerups(); + level.rare_powerups_active = 0; + level.firesale_vox_firstime = 0; + level thread powerup_hud_monitor(); + + if ( isdefined( level.quantum_bomb_register_result_func ) ) + { + [[ level.quantum_bomb_register_result_func ]]( "random_powerup", ::quantum_bomb_random_powerup_result, 5, level.quantum_bomb_in_playable_area_validation_func ); + [[ level.quantum_bomb_register_result_func ]]( "random_zombie_grab_powerup", ::quantum_bomb_random_zombie_grab_powerup_result, 5, level.quantum_bomb_in_playable_area_validation_func ); + [[ level.quantum_bomb_register_result_func ]]( "random_weapon_powerup", ::quantum_bomb_random_weapon_powerup_result, 60, level.quantum_bomb_in_playable_area_validation_func ); + [[ level.quantum_bomb_register_result_func ]]( "random_bonus_or_lose_points_powerup", ::quantum_bomb_random_bonus_or_lose_points_powerup_result, 25, level.quantum_bomb_in_playable_area_validation_func ); + } + + registerclientfield( "scriptmover", "powerup_fx", 1000, 3, "int" ); +} + +init_player_zombie_vars() +{ + self.zombie_vars["zombie_powerup_minigun_on"] = 0; + self.zombie_vars["zombie_powerup_minigun_time"] = 0; + self.zombie_vars["zombie_powerup_tesla_on"] = 0; + self.zombie_vars["zombie_powerup_tesla_time"] = 0; + self.zombie_vars["zombie_powerup_insta_kill_ug_on"] = 0; + self.zombie_vars["zombie_powerup_insta_kill_ug_time"] = 18; +} + +set_weapon_ignore_max_ammo( str_weapon ) +{ + if ( !isdefined( level.zombie_weapons_no_max_ammo ) ) + level.zombie_weapons_no_max_ammo = []; + + level.zombie_weapons_no_max_ammo[str_weapon] = 1; +} + +powerup_hud_monitor() +{ + flag_wait( "start_zombie_round_logic" ); + + if ( isdefined( level.current_game_module ) && level.current_game_module == 2 ) + return; + + flashing_timers = []; + flashing_values = []; + flashing_timer = 10; + flashing_delta_time = 0; + flashing_is_on = 0; + flashing_value = 3; + flashing_min_timer = 0.15; + + while ( flashing_timer >= flashing_min_timer ) + { + if ( flashing_timer < 5 ) + flashing_delta_time = 0.1; + else + flashing_delta_time = 0.2; + + if ( flashing_is_on ) + { + flashing_timer = flashing_timer - flashing_delta_time - 0.05; + flashing_value = 2; + } + else + { + flashing_timer -= flashing_delta_time; + flashing_value = 3; + } + + flashing_timers[flashing_timers.size] = flashing_timer; + flashing_values[flashing_values.size] = flashing_value; + flashing_is_on = !flashing_is_on; + } + + client_fields = []; + powerup_keys = getarraykeys( level.zombie_powerups ); + + for ( powerup_key_index = 0; powerup_key_index < powerup_keys.size; powerup_key_index++ ) + { + if ( isdefined( level.zombie_powerups[powerup_keys[powerup_key_index]].client_field_name ) ) + { + powerup_name = powerup_keys[powerup_key_index]; + client_fields[powerup_name] = spawnstruct(); + client_fields[powerup_name].client_field_name = level.zombie_powerups[powerup_name].client_field_name; + client_fields[powerup_name].solo = level.zombie_powerups[powerup_name].solo; + client_fields[powerup_name].time_name = level.zombie_powerups[powerup_name].time_name; + client_fields[powerup_name].on_name = level.zombie_powerups[powerup_name].on_name; + } + } + + client_field_keys = getarraykeys( client_fields ); + + while ( true ) + { + wait 0.05; + waittillframeend; + players = get_players(); + + for ( playerindex = 0; playerindex < players.size; playerindex++ ) + { + for ( client_field_key_index = 0; client_field_key_index < client_field_keys.size; client_field_key_index++ ) + { + player = players[playerindex]; +/# + if ( isdefined( player.pers["isBot"] ) && player.pers["isBot"] ) + continue; +#/ + if ( isdefined( level.powerup_player_valid ) ) + { + if ( ![[ level.powerup_player_valid ]]( player ) ) + continue; + } + + client_field_name = client_fields[client_field_keys[client_field_key_index]].client_field_name; + time_name = client_fields[client_field_keys[client_field_key_index]].time_name; + on_name = client_fields[client_field_keys[client_field_key_index]].on_name; + powerup_timer = undefined; + powerup_on = undefined; + + if ( client_fields[client_field_keys[client_field_key_index]].solo ) + { + if ( isdefined( player._show_solo_hud ) && player._show_solo_hud == 1 ) + { + powerup_timer = player.zombie_vars[time_name]; + powerup_on = player.zombie_vars[on_name]; + } + } + else if ( isdefined( level.zombie_vars[player.team][time_name] ) ) + { + powerup_timer = level.zombie_vars[player.team][time_name]; + powerup_on = level.zombie_vars[player.team][on_name]; + } + else if ( isdefined( level.zombie_vars[time_name] ) ) + { + powerup_timer = level.zombie_vars[time_name]; + powerup_on = level.zombie_vars[on_name]; + } + + if ( isdefined( powerup_timer ) && isdefined( powerup_on ) ) + { + player set_clientfield_powerups( client_field_name, powerup_timer, powerup_on, flashing_timers, flashing_values ); + continue; + } + + player setclientfieldtoplayer( client_field_name, 0 ); + } + } + } +} + +set_clientfield_powerups( clientfield_name, powerup_timer, powerup_on, flashing_timers, flashing_values ) +{ + if ( powerup_on ) + { + if ( powerup_timer < 10 ) + { + flashing_value = 3; + + for ( i = flashing_timers.size - 1; i > 0; i-- ) + { + if ( powerup_timer < flashing_timers[i] ) + { + flashing_value = flashing_values[i]; + break; + } + } + + self setclientfieldtoplayer( clientfield_name, flashing_value ); + } + else + self setclientfieldtoplayer( clientfield_name, 1 ); + } + else + self setclientfieldtoplayer( clientfield_name, 0 ); +} + +randomize_powerups() +{ + level.zombie_powerup_array = array_randomize( level.zombie_powerup_array ); +} + +get_next_powerup() +{ + powerup = level.zombie_powerup_array[level.zombie_powerup_index]; + level.zombie_powerup_index++; + + if ( level.zombie_powerup_index >= level.zombie_powerup_array.size ) + { + level.zombie_powerup_index = 0; + randomize_powerups(); + } + + return powerup; +} + +get_valid_powerup() +{ +/# + if ( isdefined( level.zombie_devgui_power ) && level.zombie_devgui_power == 1 ) + return level.zombie_powerup_array[level.zombie_powerup_index]; +#/ + if ( isdefined( level.zombie_powerup_boss ) ) + { + i = level.zombie_powerup_boss; + level.zombie_powerup_boss = undefined; + return level.zombie_powerup_array[i]; + } + + if ( isdefined( level.zombie_powerup_ape ) ) + { + powerup = level.zombie_powerup_ape; + level.zombie_powerup_ape = undefined; + return powerup; + } + + powerup = get_next_powerup(); + + while ( true ) + { + if ( ![[ level.zombie_powerups[powerup].func_should_drop_with_regular_powerups ]]() ) + { + powerup = get_next_powerup(); + continue; + } + + return powerup; + } +} + +minigun_no_drop() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].zombie_vars["zombie_powerup_minigun_on"] == 1 ) + return true; + } + + if ( !flag( "power_on" ) ) + { + if ( flag( "solo_game" ) ) + { + if ( level.solo_lives_given == 0 ) + return true; + } + else + return true; + } + + return false; +} + +get_num_window_destroyed() +{ + num = 0; + + for ( i = 0; i < level.exterior_goals.size; i++ ) + { + if ( all_chunks_destroyed( level.exterior_goals[i], level.exterior_goals[i].barrier_chunks ) ) + num += 1; + } + + return num; +} + +watch_for_drop() +{ + flag_wait( "start_zombie_round_logic" ); + flag_wait( "begin_spawning" ); + players = get_players(); + score_to_drop = players.size * level.zombie_vars["zombie_score_start_" + players.size + "p"] + level.zombie_vars["zombie_powerup_drop_increment"]; + + while ( true ) + { + flag_wait( "zombie_drop_powerups" ); + players = get_players(); + curr_total_score = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].score_total ) ) + curr_total_score += players[i].score_total; + } + + if ( curr_total_score > score_to_drop ) + { + level.zombie_vars["zombie_powerup_drop_increment"] *= 1.14; + score_to_drop = curr_total_score + level.zombie_vars["zombie_powerup_drop_increment"]; + level.zombie_vars["zombie_drop_item"] = 1; + } + + wait 0.5; + } +} + +add_zombie_powerup( powerup_name, model_name, hint, func_should_drop_with_regular_powerups, solo, caution, zombie_grabbable, fx, client_field_name, time_name, on_name, clientfield_version = 1 ) +{ + if ( isdefined( level.zombie_include_powerups ) && !isdefined( level.zombie_include_powerups[powerup_name] ) ) + return; + + precachemodel( model_name ); + precachestring( hint ); + struct = spawnstruct(); + + if ( !isdefined( level.zombie_powerups ) ) + level.zombie_powerups = []; + + struct.powerup_name = powerup_name; + struct.model_name = model_name; + struct.weapon_classname = "script_model"; + struct.hint = hint; + struct.func_should_drop_with_regular_powerups = func_should_drop_with_regular_powerups; + struct.solo = solo; + struct.caution = caution; + struct.zombie_grabbable = zombie_grabbable; + + if ( isdefined( fx ) ) + struct.fx = loadfx( fx ); + + level.zombie_powerups[powerup_name] = struct; + level.zombie_powerup_array[level.zombie_powerup_array.size] = powerup_name; + add_zombie_special_drop( powerup_name ); + + if ( !level.createfx_enabled ) + { + if ( isdefined( client_field_name ) ) + { + registerclientfield( "toplayer", client_field_name, clientfield_version, 2, "int" ); + struct.client_field_name = client_field_name; + struct.time_name = time_name; + struct.on_name = on_name; + } + } +} + +powerup_set_can_pick_up_in_last_stand( powerup_name, b_can_pick_up ) +{ + level.zombie_powerups[powerup_name].can_pick_up_in_last_stand = b_can_pick_up; +} + +add_zombie_special_drop( powerup_name ) +{ + level.zombie_special_drop_array[level.zombie_special_drop_array.size] = powerup_name; +} + +include_zombie_powerup( powerup_name ) +{ + if ( !isdefined( level.zombie_include_powerups ) ) + level.zombie_include_powerups = []; + + level.zombie_include_powerups[powerup_name] = 1; +} + +powerup_round_start() +{ + level.powerup_drop_count = 0; +} + +powerup_drop( drop_point ) +{ + if ( level.powerup_drop_count >= level.zombie_vars["zombie_powerup_drop_max_per_round"] ) + { +/# + println( "^3POWERUP DROP EXCEEDED THE MAX PER ROUND!" ); +#/ + return; + } + + if ( !isdefined( level.zombie_include_powerups ) || level.zombie_include_powerups.size == 0 ) + return; + + rand_drop = randomint( 100 ); + + if ( rand_drop > 2 ) + { + if ( !level.zombie_vars["zombie_drop_item"] ) + return; + + debug = "score"; + } + else + debug = "random"; + + playable_area = getentarray( "player_volume", "script_noteworthy" ); + level.powerup_drop_count++; + powerup = maps\mp\zombies\_zm_net::network_safe_spawn( "powerup", 1, "script_model", drop_point + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + valid_drop = 0; + + for ( i = 0; i < playable_area.size; i++ ) + { + if ( powerup istouching( playable_area[i] ) ) + valid_drop = 1; + } + + if ( valid_drop && level.rare_powerups_active ) + { + pos = ( drop_point[0], drop_point[1], drop_point[2] + 42 ); + + if ( check_for_rare_drop_override( pos ) ) + { + level.zombie_vars["zombie_drop_item"] = 0; + valid_drop = 0; + } + } + + if ( !valid_drop ) + { + level.powerup_drop_count--; + powerup delete(); + return; + } + + powerup powerup_setup(); + print_powerup_drop( powerup.powerup_name, debug ); + powerup thread powerup_timeout(); + powerup thread powerup_wobble(); + powerup thread powerup_grab(); + powerup thread powerup_move(); + powerup thread powerup_emp(); + level.zombie_vars["zombie_drop_item"] = 0; + level notify( "powerup_dropped", powerup ); +} + +specific_powerup_drop( powerup_name, drop_spot, powerup_team, powerup_location ) +{ + powerup = maps\mp\zombies\_zm_net::network_safe_spawn( "powerup", 1, "script_model", drop_spot + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + level notify( "powerup_dropped", powerup ); + + if ( isdefined( powerup ) ) + { + powerup powerup_setup( powerup_name, powerup_team, powerup_location ); + powerup thread powerup_timeout(); + powerup thread powerup_wobble(); + powerup thread powerup_grab( powerup_team ); + powerup thread powerup_move(); + powerup thread powerup_emp(); + return powerup; + } +} + +quantum_bomb_random_powerup_result( position ) +{ + if ( !isdefined( level.zombie_include_powerups ) || !level.zombie_include_powerups.size ) + return; + + keys = getarraykeys( level.zombie_include_powerups ); + + while ( keys.size ) + { + index = randomint( keys.size ); + + if ( !level.zombie_powerups[keys[index]].zombie_grabbable ) + { + skip = 0; + + switch ( keys[index] ) + { + case "random_weapon": + case "bonus_points_team": + case "bonus_points_player": + skip = 1; + break; + case "minigun": + case "insta_kill": + case "full_ammo": + case "fire_sale": + if ( randomint( 4 ) ) + skip = 1; + + break; + case "tesla": + case "free_perk": + case "bonfire_sale": + if ( randomint( 20 ) ) + skip = 1; + + break; + default: + } + + if ( skip ) + { + arrayremovevalue( keys, keys[index] ); + continue; + } + + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "quant_good" ); + [[ level.quantum_bomb_play_player_effect_at_position_func ]]( position ); + level specific_powerup_drop( keys[index], position ); + return; + } + else + arrayremovevalue( keys, keys[index] ); + } +} + +quantum_bomb_random_zombie_grab_powerup_result( position ) +{ + if ( !isdefined( level.zombie_include_powerups ) || !level.zombie_include_powerups.size ) + return; + + keys = getarraykeys( level.zombie_include_powerups ); + + while ( keys.size ) + { + index = randomint( keys.size ); + + if ( level.zombie_powerups[keys[index]].zombie_grabbable ) + { + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "quant_bad" ); + [[ level.quantum_bomb_play_player_effect_at_position_func ]]( position ); + level specific_powerup_drop( keys[index], position ); + return; + } + else + arrayremovevalue( keys, keys[index] ); + } +} + +quantum_bomb_random_weapon_powerup_result( position ) +{ + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "quant_good" ); + [[ level.quantum_bomb_play_player_effect_at_position_func ]]( position ); + level specific_powerup_drop( "random_weapon", position ); +} + +quantum_bomb_random_bonus_or_lose_points_powerup_result( position ) +{ + rand = randomint( 10 ); + powerup = "bonus_points_team"; + + switch ( rand ) + { + case 1: + case 0: + powerup = "lose_points_team"; + + if ( isdefined( level.zombie_include_powerups[powerup] ) ) + { + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "quant_bad" ); + break; + } + case 4: + case 3: + case 2: + powerup = "bonus_points_player"; + + if ( isdefined( level.zombie_include_powerups[powerup] ) ) + break; + default: + powerup = "bonus_points_team"; + break; + } + + [[ level.quantum_bomb_play_player_effect_at_position_func ]]( position ); + level specific_powerup_drop( powerup, position ); +} + +special_powerup_drop( drop_point ) +{ + if ( !isdefined( level.zombie_include_powerups ) || level.zombie_include_powerups.size == 0 ) + return; + + powerup = spawn( "script_model", drop_point + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + playable_area = getentarray( "player_volume", "script_noteworthy" ); + valid_drop = 0; + + for ( i = 0; i < playable_area.size; i++ ) + { + if ( powerup istouching( playable_area[i] ) ) + { + valid_drop = 1; + break; + } + } + + if ( !valid_drop ) + { + powerup delete(); + return; + } + + powerup special_drop_setup(); +} + +cleanup_random_weapon_list() +{ + self waittill( "death" ); + + arrayremovevalue( level.random_weapon_powerups, self ); +} + +powerup_setup( powerup_override, powerup_team, powerup_location ) +{ + powerup = undefined; + + if ( !isdefined( powerup_override ) ) + powerup = get_valid_powerup(); + else + { + powerup = powerup_override; + + if ( "tesla" == powerup && tesla_powerup_active() ) + powerup = "minigun"; + } + + struct = level.zombie_powerups[powerup]; + + if ( powerup == "random_weapon" ) + { + players = get_players(); + self.weapon = maps\mp\zombies\_zm_magicbox::treasure_chest_chooseweightedrandomweapon( players[0] ); +/# + weapon = getdvar( _hash_45ED7744 ); + + if ( weapon != "" && isdefined( level.zombie_weapons[weapon] ) ) + { + self.weapon = weapon; + setdvar( "scr_force_weapon", "" ); + } +#/ + self.base_weapon = self.weapon; + + if ( !isdefined( level.random_weapon_powerups ) ) + level.random_weapon_powerups = []; + + level.random_weapon_powerups[level.random_weapon_powerups.size] = self; + self thread cleanup_random_weapon_list(); + + if ( isdefined( level.zombie_weapons[self.weapon].upgrade_name ) && !randomint( 4 ) ) + self.weapon = level.zombie_weapons[self.weapon].upgrade_name; + + self setmodel( getweaponmodel( self.weapon ) ); + self useweaponhidetags( self.weapon ); + offsetdw = vectorscale( ( 1, 1, 1 ), 3.0 ); + self.worldgundw = undefined; + + if ( maps\mp\zombies\_zm_magicbox::weapon_is_dual_wield( self.weapon ) ) + { + self.worldgundw = spawn( "script_model", self.origin + offsetdw ); + self.worldgundw.angles = self.angles; + self.worldgundw setmodel( maps\mp\zombies\_zm_magicbox::get_left_hand_weapon_model_name( self.weapon ) ); + self.worldgundw useweaponhidetags( self.weapon ); + self.worldgundw linkto( self, "tag_weapon", offsetdw, ( 0, 0, 0 ) ); + } + } + else + self setmodel( struct.model_name ); + + maps\mp\_demo::bookmark( "zm_powerup_dropped", gettime(), undefined, undefined, 1 ); + playsoundatposition( "zmb_spawn_powerup", self.origin ); + + if ( isdefined( powerup_team ) ) + self.powerup_team = powerup_team; + + if ( isdefined( powerup_location ) ) + self.powerup_location = powerup_location; + + self.powerup_name = struct.powerup_name; + self.hint = struct.hint; + self.solo = struct.solo; + self.caution = struct.caution; + self.zombie_grabbable = struct.zombie_grabbable; + self.func_should_drop_with_regular_powerups = struct.func_should_drop_with_regular_powerups; + + if ( isdefined( struct.fx ) ) + self.fx = struct.fx; + + if ( isdefined( struct.can_pick_up_in_last_stand ) ) + self.can_pick_up_in_last_stand = struct.can_pick_up_in_last_stand; + + self playloopsound( "zmb_spawn_powerup_loop" ); + level.active_powerups[level.active_powerups.size] = self; +} + +special_drop_setup() +{ + powerup = undefined; + is_powerup = 1; + + if ( level.round_number <= 10 ) + powerup = get_valid_powerup(); + else + { + powerup = level.zombie_special_drop_array[randomint( level.zombie_special_drop_array.size )]; + + if ( level.round_number > 15 && randomint( 100 ) < ( level.round_number - 15 ) * 5 ) + powerup = "nothing"; + } + + switch ( powerup ) + { + case "zombie_blood": + case "tesla": + case "random_weapon": + case "nuke": + case "minigun": + case "lose_points_team": + case "lose_perk": + case "insta_kill": + case "free_perk": + case "fire_sale": + case "empty_clip": + case "double_points": + case "carpenter": + case "bonus_points_team": + case "bonus_points_player": + case "bonfire_sale": + case "all_revive": + break; + case "full_ammo": + if ( level.round_number > 10 && randomint( 100 ) < ( level.round_number - 10 ) * 5 ) + powerup = level.zombie_powerup_array[randomint( level.zombie_powerup_array.size )]; + + break; + case "dog": + if ( level.round_number >= 15 ) + { + is_powerup = 0; + dog_spawners = getentarray( "special_dog_spawner", "targetname" ); + thread play_sound_2d( "sam_nospawn" ); + } + else + powerup = get_valid_powerup(); + + break; + default: + if ( isdefined( level._zombiemode_special_drop_setup ) ) + is_powerup = [[ level._zombiemode_special_drop_setup ]]( powerup ); + else + { + is_powerup = 0; + playfx( level._effect["lightning_dog_spawn"], self.origin ); + playsoundatposition( "pre_spawn", self.origin ); + wait 1.5; + playsoundatposition( "zmb_bolt", self.origin ); + earthquake( 0.5, 0.75, self.origin, 1000 ); + playrumbleonposition( "explosion_generic", self.origin ); + playsoundatposition( "spawn", self.origin ); + wait 1.0; + thread play_sound_2d( "sam_nospawn" ); + self delete(); + } + } + + if ( is_powerup ) + { + playfx( level._effect["lightning_dog_spawn"], self.origin ); + playsoundatposition( "pre_spawn", self.origin ); + wait 1.5; + playsoundatposition( "zmb_bolt", self.origin ); + earthquake( 0.5, 0.75, self.origin, 1000 ); + playrumbleonposition( "explosion_generic", self.origin ); + playsoundatposition( "spawn", self.origin ); + self powerup_setup( powerup ); + self thread powerup_timeout(); + self thread powerup_wobble(); + self thread powerup_grab(); + self thread powerup_move(); + self thread powerup_emp(); + } +} + +powerup_zombie_grab_trigger_cleanup( trigger ) +{ + self waittill_any( "powerup_timedout", "powerup_grabbed", "hacked" ); + trigger delete(); +} + +powerup_zombie_grab( powerup_team ) +{ + self endon( "powerup_timedout" ); + self endon( "powerup_grabbed" ); + self endon( "hacked" ); + zombie_grab_trigger = spawn( "trigger_radius", self.origin - vectorscale( ( 0, 0, 1 ), 40.0 ), 4, 32, 72 ); + zombie_grab_trigger enablelinkto(); + zombie_grab_trigger linkto( self ); + zombie_grab_trigger setteamfortrigger( level.zombie_team ); + self thread powerup_zombie_grab_trigger_cleanup( zombie_grab_trigger ); + poi_dist = 300; + + if ( isdefined( level._zombie_grabbable_poi_distance_override ) ) + poi_dist = level._zombie_grabbable_poi_distance_override; + + zombie_grab_trigger create_zombie_point_of_interest( poi_dist, 2, 0, 1, undefined, undefined, powerup_team ); + + while ( isdefined( self ) ) + { + zombie_grab_trigger waittill( "trigger", who ); + + if ( isdefined( level._powerup_grab_check ) ) + { + if ( !self [[ level._powerup_grab_check ]]( who ) ) + continue; + } + else if ( !isdefined( who ) || !isai( who ) ) + continue; + + playfx( level._effect["powerup_grabbed_red"], self.origin ); + playfx( level._effect["powerup_grabbed_wave_red"], self.origin ); + + switch ( self.powerup_name ) + { + case "lose_points_team": + level thread lose_points_team_powerup( self ); + players = get_players(); + players[randomintrange( 0, players.size )] thread powerup_vo( "lose_points" ); + break; + case "lose_perk": + level thread lose_perk_powerup( self ); + break; + case "empty_clip": + level thread empty_clip_powerup( self ); + break; + default: + if ( isdefined( level._zombiemode_powerup_zombie_grab ) ) + level thread [[ level._zombiemode_powerup_zombie_grab ]]( self ); + + if ( isdefined( level._game_mode_powerup_zombie_grab ) ) + level thread [[ level._game_mode_powerup_zombie_grab ]]( self, who ); + else + { +/# + println( "Unrecognized poweup." ); +#/ + } + + break; + } + + level thread maps\mp\zombies\_zm_audio::do_announcer_playvox( "powerup", self.powerup_name ); + wait 0.1; + playsoundatposition( "zmb_powerup_grabbed", self.origin ); + self stoploopsound(); + self powerup_delete(); + self notify( "powerup_grabbed" ); + } +} + +powerup_grab( powerup_team ) +{ + if ( isdefined( self ) && self.zombie_grabbable ) + { + self thread powerup_zombie_grab( powerup_team ); + return; + } + + self endon( "powerup_timedout" ); + self endon( "powerup_grabbed" ); + range_squared = 4096; + + while ( isdefined( self ) ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( ( self.powerup_name == "minigun" || self.powerup_name == "tesla" || self.powerup_name == "random_weapon" || self.powerup_name == "meat_stink" ) && ( players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() || players[i] usebuttonpressed() && players[i] in_revive_trigger() ) ) + continue; + + if ( isdefined( self.can_pick_up_in_last_stand ) && !self.can_pick_up_in_last_stand && players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + continue; + + ignore_range = 0; + + if ( isdefined( players[i].ignore_range_powerup ) && players[i].ignore_range_powerup == self ) + { + players[i].ignore_range_powerup = undefined; + ignore_range = 1; + } + + if ( distancesquared( players[i].origin, self.origin ) < range_squared || ignore_range ) + { + if ( isdefined( level._powerup_grab_check ) ) + { + if ( !self [[ level._powerup_grab_check ]]( players[i] ) ) + continue; + } + + if ( isdefined( level.zombie_powerup_grab_func ) ) + level thread [[ level.zombie_powerup_grab_func ]](); + else + { + switch ( self.powerup_name ) + { + case "nuke": + level thread nuke_powerup( self, players[i].team ); + players[i] thread powerup_vo( "nuke" ); + zombies = getaiarray( level.zombie_team ); + players[i].zombie_nuked = arraysort( zombies, self.origin ); + players[i] notify( "nuke_triggered" ); + break; + case "full_ammo": + level thread full_ammo_powerup( self, players[i] ); + players[i] thread powerup_vo( "full_ammo" ); + break; + case "double_points": + level thread double_points_powerup( self, players[i] ); + players[i] thread powerup_vo( "double_points" ); + break; + case "insta_kill": + level thread insta_kill_powerup( self, players[i] ); + players[i] thread powerup_vo( "insta_kill" ); + break; + case "carpenter": + if ( is_classic() ) + players[i] thread maps\mp\zombies\_zm_pers_upgrades::persistent_carpenter_ability_check(); + + if ( isdefined( level.use_new_carpenter_func ) ) + level thread [[ level.use_new_carpenter_func ]]( self.origin ); + else + level thread start_carpenter( self.origin ); + + players[i] thread powerup_vo( "carpenter" ); + break; + case "fire_sale": + level thread start_fire_sale( self ); + players[i] thread powerup_vo( "firesale" ); + break; + case "bonfire_sale": + level thread start_bonfire_sale( self ); + players[i] thread powerup_vo( "firesale" ); + break; + case "minigun": + level thread minigun_weapon_powerup( players[i] ); + players[i] thread powerup_vo( "minigun" ); + break; + case "free_perk": + level thread free_perk_powerup( self ); + break; + case "tesla": + level thread tesla_weapon_powerup( players[i] ); + players[i] thread powerup_vo( "tesla" ); + break; + case "random_weapon": + if ( !level random_weapon_powerup( self, players[i] ) ) + continue; + + break; + case "bonus_points_player": + level thread bonus_points_player_powerup( self, players[i] ); + players[i] thread powerup_vo( "bonus_points_solo" ); + break; + case "bonus_points_team": + level thread bonus_points_team_powerup( self ); + players[i] thread powerup_vo( "bonus_points_team" ); + break; + case "teller_withdrawl": + level thread teller_withdrawl( self, players[i] ); + break; + default: + if ( isdefined( level._zombiemode_powerup_grab ) ) + level thread [[ level._zombiemode_powerup_grab ]]( self, players[i] ); + else + { +/# + println( "Unrecognized poweup." ); +#/ + } + + break; + } + } + + maps\mp\_demo::bookmark( "zm_player_powerup_grabbed", gettime(), players[i] ); + + if ( should_award_stat( self.powerup_name ) ) + { + players[i] maps\mp\zombies\_zm_stats::increment_client_stat( "drops" ); + players[i] maps\mp\zombies\_zm_stats::increment_player_stat( "drops" ); + players[i] maps\mp\zombies\_zm_stats::increment_client_stat( self.powerup_name + "_pickedup" ); + players[i] maps\mp\zombies\_zm_stats::increment_player_stat( self.powerup_name + "_pickedup" ); + } + + if ( self.solo ) + { + playfx( level._effect["powerup_grabbed_solo"], self.origin ); + playfx( level._effect["powerup_grabbed_wave_solo"], self.origin ); + } + else if ( self.caution ) + { + playfx( level._effect["powerup_grabbed_caution"], self.origin ); + playfx( level._effect["powerup_grabbed_wave_caution"], self.origin ); + } + else + { + playfx( level._effect["powerup_grabbed"], self.origin ); + playfx( level._effect["powerup_grabbed_wave"], self.origin ); + } + + if ( isdefined( self.stolen ) && self.stolen ) + level notify( "monkey_see_monkey_dont_achieved" ); + + if ( isdefined( self.grabbed_level_notify ) ) + level notify( self.grabbed_level_notify ); + + self.claimed = 1; + self.power_up_grab_player = players[i]; + wait 0.1; + playsoundatposition( "zmb_powerup_grabbed", self.origin ); + self stoploopsound(); + self hide(); + + if ( self.powerup_name != "fire_sale" ) + { + if ( isdefined( self.power_up_grab_player ) ) + { + if ( isdefined( level.powerup_intro_vox ) ) + { + level thread [[ level.powerup_intro_vox ]]( self ); + return; + } + else if ( isdefined( level.powerup_vo_available ) ) + { + can_say_vo = [[ level.powerup_vo_available ]](); + + if ( !can_say_vo ) + { + self powerup_delete(); + self notify( "powerup_grabbed" ); + return; + } + } + } + } + + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( self.powerup_name, self.power_up_grab_player.pers["team"] ); + self powerup_delete(); + self notify( "powerup_grabbed" ); + } + } + + wait 0.1; + } +} + +start_fire_sale( item ) +{ + if ( level.zombie_vars["zombie_powerup_fire_sale_time"] > 0 && is_true( level.zombie_vars["zombie_powerup_fire_sale_on"] ) ) + { + level.zombie_vars["zombie_powerup_fire_sale_time"] += 30; + return; + } + + level notify( "powerup fire sale" ); + level endon( "powerup fire sale" ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "fire_sale" ); + level.zombie_vars["zombie_powerup_fire_sale_on"] = 1; + level thread toggle_fire_sale_on(); + + for ( level.zombie_vars["zombie_powerup_fire_sale_time"] = 30; level.zombie_vars["zombie_powerup_fire_sale_time"] > 0; level.zombie_vars["zombie_powerup_fire_sale_time"] -= 0.05 ) + wait 0.05; + + level.zombie_vars["zombie_powerup_fire_sale_on"] = 0; + level notify( "fire_sale_off" ); +} + +start_bonfire_sale( item ) +{ + level notify( "powerup bonfire sale" ); + level endon( "powerup bonfire sale" ); + temp_ent = spawn( "script_origin", ( 0, 0, 0 ) ); + temp_ent playloopsound( "zmb_double_point_loop" ); + level.zombie_vars["zombie_powerup_bonfire_sale_on"] = 1; + level thread toggle_bonfire_sale_on(); + + for ( level.zombie_vars["zombie_powerup_bonfire_sale_time"] = 30; level.zombie_vars["zombie_powerup_bonfire_sale_time"] > 0; level.zombie_vars["zombie_powerup_bonfire_sale_time"] -= 0.05 ) + wait 0.05; + + level.zombie_vars["zombie_powerup_bonfire_sale_on"] = 0; + level notify( "bonfire_sale_off" ); + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] playsound( "zmb_points_loop_off" ); + + temp_ent delete(); +} + +start_carpenter( origin ) +{ + window_boards = getstructarray( "exterior_goal", "targetname" ); + total = level.exterior_goals.size; + carp_ent = spawn( "script_origin", ( 0, 0, 0 ) ); + carp_ent playloopsound( "evt_carpenter" ); + + while ( true ) + { + windows = get_closest_window_repair( window_boards, origin ); + + if ( !isdefined( windows ) ) + { + carp_ent stoploopsound( 1 ); + carp_ent playsoundwithnotify( "evt_carpenter_end", "sound_done" ); + + carp_ent waittill( "sound_done" ); + + break; + } + else + arrayremovevalue( window_boards, windows ); + + while ( true ) + { + if ( all_chunks_intact( windows, windows.barrier_chunks ) ) + break; + + chunk = get_random_destroyed_chunk( windows, windows.barrier_chunks ); + + if ( !isdefined( chunk ) ) + break; + + windows thread maps\mp\zombies\_zm_blockers::replace_chunk( windows, chunk, undefined, maps\mp\zombies\_zm_powerups::is_carpenter_boards_upgraded(), 1 ); + + if ( isdefined( windows.clip ) ) + { + windows.clip enable_trigger(); + windows.clip disconnectpaths(); + } + else + blocker_disconnect_paths( windows.neg_start, windows.neg_end ); + + wait_network_frame(); + wait 0.05; + } + + wait_network_frame(); + } + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] maps\mp\zombies\_zm_score::player_add_points( "carpenter_powerup", 200 ); + + carp_ent delete(); +} + +get_closest_window_repair( windows, origin ) +{ + current_window = undefined; + shortest_distance = undefined; + + for ( i = 0; i < windows.size; i++ ) + { + if ( all_chunks_intact( windows, windows[i].barrier_chunks ) ) + continue; + + if ( !isdefined( current_window ) ) + { + current_window = windows[i]; + shortest_distance = distancesquared( current_window.origin, origin ); + continue; + } + + if ( distancesquared( windows[i].origin, origin ) < shortest_distance ) + { + current_window = windows[i]; + shortest_distance = distancesquared( windows[i].origin, origin ); + } + } + + return current_window; +} + +powerup_vo( type ) +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( isdefined( level.powerup_vo_available ) ) + { + if ( ![[ level.powerup_vo_available ]]() ) + return; + } + + wait( randomfloatrange( 2, 2.5 ) ); + + if ( type == "tesla" ) + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", type ); + else + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "powerup", type ); + + if ( isdefined( level.custom_powerup_vo_response ) ) + level [[ level.custom_powerup_vo_response ]]( self, type ); +} + +powerup_wobble_fx() +{ + self endon( "death" ); + + if ( !isdefined( self ) ) + return; + + if ( isdefined( level.powerup_fx_func ) ) + { + self thread [[ level.powerup_fx_func ]](); + return; + } + + if ( self.solo ) + self setclientfield( "powerup_fx", 2 ); + else if ( self.caution ) + self setclientfield( "powerup_fx", 4 ); + else if ( self.zombie_grabbable ) + self setclientfield( "powerup_fx", 3 ); + else + self setclientfield( "powerup_fx", 1 ); +} + +powerup_wobble() +{ + self endon( "powerup_grabbed" ); + self endon( "powerup_timedout" ); + self thread powerup_wobble_fx(); + + while ( isdefined( self ) ) + { + waittime = randomfloatrange( 2.5, 5 ); + yaw = randomint( 360 ); + + if ( yaw > 300 ) + yaw = 300; + else if ( yaw < 60 ) + yaw = 60; + + yaw = self.angles[1] + yaw; + new_angles = ( -60 + randomint( 120 ), yaw, -45 + randomint( 90 ) ); + self rotateto( new_angles, waittime, waittime * 0.5, waittime * 0.5 ); + + if ( isdefined( self.worldgundw ) ) + self.worldgundw rotateto( new_angles, waittime, waittime * 0.5, waittime * 0.5 ); + + wait( randomfloat( waittime - 0.1 ) ); + } +} + +powerup_timeout() +{ + if ( isdefined( level._powerup_timeout_override ) && !isdefined( self.powerup_team ) ) + { + self thread [[ level._powerup_timeout_override ]](); + return; + } + + self endon( "powerup_grabbed" ); + self endon( "death" ); + self endon( "powerup_reset" ); + self show(); + wait_time = 15; + + if ( isdefined( level._powerup_timeout_custom_time ) ) + { + time = [[ level._powerup_timeout_custom_time ]]( self ); + + if ( time == 0 ) + return; + + wait_time = time; + } + + wait( wait_time ); + + for ( i = 0; i < 40; i++ ) + { + if ( i % 2 ) + { + self ghost(); + + if ( isdefined( self.worldgundw ) ) + self.worldgundw ghost(); + } + else + { + self show(); + + if ( isdefined( self.worldgundw ) ) + self.worldgundw show(); + } + + if ( i < 15 ) + { + wait 0.5; + continue; + } + + if ( i < 25 ) + { + wait 0.25; + continue; + } + + wait 0.1; + } + + self notify( "powerup_timedout" ); + self powerup_delete(); +} + +powerup_delete() +{ + arrayremovevalue( level.active_powerups, self, 0 ); + + if ( isdefined( self.worldgundw ) ) + self.worldgundw delete(); + + self delete(); +} + +powerup_delete_delayed( time ) +{ + if ( isdefined( time ) ) + wait( time ); + else + wait 0.01; + + self powerup_delete(); +} + +nuke_powerup( drop_item, player_team ) +{ + location = drop_item.origin; + playfx( drop_item.fx, location ); + level thread nuke_flash( player_team ); + wait 0.5; + zombies = getaiarray( level.zombie_team ); + zombies = arraysort( zombies, location ); + zombies_nuked = []; + + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i].ignore_nuke ) && zombies[i].ignore_nuke ) + continue; + + if ( isdefined( zombies[i].marked_for_death ) && zombies[i].marked_for_death ) + continue; + + if ( isdefined( zombies[i].nuke_damage_func ) ) + { + zombies[i] thread [[ zombies[i].nuke_damage_func ]](); + continue; + } + + if ( is_magic_bullet_shield_enabled( zombies[i] ) ) + continue; + + zombies[i].marked_for_death = 1; + zombies[i].nuked = 1; + zombies_nuked[zombies_nuked.size] = zombies[i]; + } + + for ( i = 0; i < zombies_nuked.size; i++ ) + { + wait( randomfloatrange( 0.1, 0.7 ) ); + + if ( !isdefined( zombies_nuked[i] ) ) + continue; + + if ( is_magic_bullet_shield_enabled( zombies_nuked[i] ) ) + continue; + + if ( i < 5 && !zombies_nuked[i].isdog ) + zombies_nuked[i] thread maps\mp\animscripts\zm_death::flame_death_fx(); + + if ( !zombies_nuked[i].isdog ) + { + if ( !( isdefined( zombies_nuked[i].no_gib ) && zombies_nuked[i].no_gib ) ) + zombies_nuked[i] maps\mp\zombies\_zm_spawner::zombie_head_gib(); + + zombies_nuked[i] playsound( "evt_nuked" ); + } + + zombies_nuked[i] dodamage( zombies_nuked[i].health + 666, zombies_nuked[i].origin ); + } + + players = get_players( player_team ); + + for ( i = 0; i < players.size; i++ ) + players[i] maps\mp\zombies\_zm_score::player_add_points( "nuke_powerup", 400 ); +} + +nuke_flash( team ) +{ + if ( isdefined( team ) ) + get_players()[0] playsoundtoteam( "evt_nuke_flash", team ); + else + get_players()[0] playsound( "evt_nuke_flash" ); + + fadetowhite = newhudelem(); + fadetowhite.x = 0; + fadetowhite.y = 0; + fadetowhite.alpha = 0; + fadetowhite.horzalign = "fullscreen"; + fadetowhite.vertalign = "fullscreen"; + fadetowhite.foreground = 1; + fadetowhite setshader( "white", 640, 480 ); + fadetowhite fadeovertime( 0.2 ); + fadetowhite.alpha = 0.8; + wait 0.5; + fadetowhite fadeovertime( 1.0 ); + fadetowhite.alpha = 0; + wait 1.1; + fadetowhite destroy(); +} + +double_points_powerup( drop_item, player ) +{ + level notify( "powerup points scaled_" + player.team ); + level endon( "powerup points scaled_" + player.team ); + team = player.team; + level thread point_doubler_on_hud( drop_item, team ); + + if ( isdefined( level.pers_upgrade_double_points ) && level.pers_upgrade_double_points ) + player thread maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_double_points_pickup_start(); + + if ( isdefined( level.current_game_module ) && level.current_game_module == 2 ) + { + if ( isdefined( player._race_team ) ) + { + if ( player._race_team == 1 ) + level._race_team_double_points = 1; + else + level._race_team_double_points = 2; + } + } + + level.zombie_vars[team]["zombie_point_scalar"] = 2; + players = get_players(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + { + if ( team == players[player_index].team ) + players[player_index] setclientfield( "score_cf_double_points_active", 1 ); + } + + wait 30; + level.zombie_vars[team]["zombie_point_scalar"] = 1; + level._race_team_double_points = undefined; + players = get_players(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + { + if ( team == players[player_index].team ) + players[player_index] setclientfield( "score_cf_double_points_active", 0 ); + } +} + +full_ammo_powerup( drop_item, player ) +{ + players = get_players( player.team ); + + if ( isdefined( level._get_game_module_players ) ) + players = [[ level._get_game_module_players ]]( player ); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + continue; + + primary_weapons = players[i] getweaponslist( 1 ); + players[i] notify( "zmb_max_ammo" ); + players[i] notify( "zmb_lost_knife" ); + players[i] notify( "zmb_disable_claymore_prompt" ); + players[i] notify( "zmb_disable_spikemore_prompt" ); + + for ( x = 0; x < primary_weapons.size; x++ ) + { + if ( level.headshots_only && is_lethal_grenade( primary_weapons[x] ) ) + continue; + + if ( isdefined( level.zombie_include_equipment ) && isdefined( level.zombie_include_equipment[primary_weapons[x]] ) ) + continue; + + if ( isdefined( level.zombie_weapons_no_max_ammo ) && isdefined( level.zombie_weapons_no_max_ammo[primary_weapons[x]] ) ) + continue; + + if ( players[i] hasweapon( primary_weapons[x] ) ) + players[i] givemaxammo( primary_weapons[x] ); + } + } + + level thread full_ammo_on_hud( drop_item, player.team ); +} + +insta_kill_powerup( drop_item, player ) +{ + level notify( "powerup instakill_" + player.team ); + level endon( "powerup instakill_" + player.team ); + + if ( isdefined( level.insta_kill_powerup_override ) ) + { + level thread [[ level.insta_kill_powerup_override ]]( drop_item, player ); + return; + } + + if ( is_classic() ) + player thread maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_insta_kill_upgrade_check(); + + team = player.team; + level thread insta_kill_on_hud( drop_item, team ); + level.zombie_vars[team]["zombie_insta_kill"] = 1; + wait 30; + level.zombie_vars[team]["zombie_insta_kill"] = 0; + players = get_players( team ); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i] ) ) + players[i] notify( "insta_kill_over" ); + } +} + +is_insta_kill_active() +{ + return level.zombie_vars[self.team]["zombie_insta_kill"]; +} + +check_for_instakill( player, mod, hit_location ) +{ + if ( isdefined( player ) && isalive( player ) && isdefined( level.check_for_instakill_override ) ) + { + if ( !self [[ level.check_for_instakill_override ]]( player ) ) + return; + + if ( player.use_weapon_type == "MOD_MELEE" ) + player.last_kill_method = "MOD_MELEE"; + else + player.last_kill_method = "MOD_UNKNOWN"; + + modname = remove_mod_from_methodofdeath( mod ); + + if ( !( isdefined( self.no_gib ) && self.no_gib ) ) + self maps\mp\zombies\_zm_spawner::zombie_head_gib(); + + self.health = 1; + self dodamage( self.health + 666, self.origin, player, self, hit_location, modname ); + player notify( "zombie_killed" ); + } + + if ( isdefined( player ) && isalive( player ) && ( level.zombie_vars[player.team]["zombie_insta_kill"] || isdefined( player.personal_instakill ) && player.personal_instakill ) ) + { + if ( is_magic_bullet_shield_enabled( self ) ) + return; + + if ( isdefined( self.instakill_func ) ) + { + self thread [[ self.instakill_func ]](); + return; + } + + if ( player.use_weapon_type == "MOD_MELEE" ) + player.last_kill_method = "MOD_MELEE"; + else + player.last_kill_method = "MOD_UNKNOWN"; + + modname = remove_mod_from_methodofdeath( mod ); + + if ( flag( "dog_round" ) ) + { + self.health = 1; + self dodamage( self.health + 666, self.origin, player, self, hit_location, modname ); + player notify( "zombie_killed" ); + } + else + { + if ( !( isdefined( self.no_gib ) && self.no_gib ) ) + self maps\mp\zombies\_zm_spawner::zombie_head_gib(); + + self.health = 1; + self dodamage( self.health + 666, self.origin, player, self, hit_location, modname ); + player notify( "zombie_killed" ); + } + } +} + +insta_kill_on_hud( drop_item, player_team ) +{ + if ( level.zombie_vars[player_team]["zombie_powerup_insta_kill_on"] ) + { + level.zombie_vars[player_team]["zombie_powerup_insta_kill_time"] = 30; + return; + } + + level.zombie_vars[player_team]["zombie_powerup_insta_kill_on"] = 1; + level thread time_remaning_on_insta_kill_powerup( player_team ); +} + +time_remaning_on_insta_kill_powerup( player_team ) +{ + temp_enta = spawn( "script_origin", ( 0, 0, 0 ) ); + temp_enta playloopsound( "zmb_insta_kill_loop" ); + + while ( level.zombie_vars[player_team]["zombie_powerup_insta_kill_time"] >= 0 ) + { + wait 0.05; + level.zombie_vars[player_team]["zombie_powerup_insta_kill_time"] -= 0.05; + } + + get_players()[0] playsoundtoteam( "zmb_insta_kill", player_team ); + temp_enta stoploopsound( 2 ); + level.zombie_vars[player_team]["zombie_powerup_insta_kill_on"] = 0; + level.zombie_vars[player_team]["zombie_powerup_insta_kill_time"] = 30; + temp_enta delete(); +} + +point_doubler_on_hud( drop_item, player_team ) +{ + self endon( "disconnect" ); + + if ( level.zombie_vars[player_team]["zombie_powerup_point_doubler_on"] ) + { + level.zombie_vars[player_team]["zombie_powerup_point_doubler_time"] = 30; + return; + } + + level.zombie_vars[player_team]["zombie_powerup_point_doubler_on"] = 1; + level thread time_remaining_on_point_doubler_powerup( player_team ); +} + +time_remaining_on_point_doubler_powerup( player_team ) +{ + temp_ent = spawn( "script_origin", ( 0, 0, 0 ) ); + temp_ent playloopsound( "zmb_double_point_loop" ); + + while ( level.zombie_vars[player_team]["zombie_powerup_point_doubler_time"] >= 0 ) + { + wait 0.05; + level.zombie_vars[player_team]["zombie_powerup_point_doubler_time"] -= 0.05; + } + + level.zombie_vars[player_team]["zombie_powerup_point_doubler_on"] = 0; + players = get_players( player_team ); + + for ( i = 0; i < players.size; i++ ) + players[i] playsound( "zmb_points_loop_off" ); + + temp_ent stoploopsound( 2 ); + level.zombie_vars[player_team]["zombie_powerup_point_doubler_time"] = 30; + temp_ent delete(); +} + +toggle_bonfire_sale_on() +{ + level endon( "powerup bonfire sale" ); + + if ( !isdefined( level.zombie_vars["zombie_powerup_bonfire_sale_on"] ) ) + return; + + if ( level.zombie_vars["zombie_powerup_bonfire_sale_on"] ) + { + if ( isdefined( level.bonfire_init_func ) ) + level thread [[ level.bonfire_init_func ]](); + + level waittill( "bonfire_sale_off" ); + } +} + +toggle_fire_sale_on() +{ + level endon( "powerup fire sale" ); + + if ( !isdefined( level.zombie_vars["zombie_powerup_fire_sale_on"] ) ) + return; + + if ( level.zombie_vars["zombie_powerup_fire_sale_on"] ) + { + for ( i = 0; i < level.chests.size; i++ ) + { + show_firesale_box = level.chests[i] [[ level._zombiemode_check_firesale_loc_valid_func ]](); + + if ( show_firesale_box ) + { + level.chests[i].zombie_cost = 10; + + if ( level.chest_index != i ) + { + level.chests[i].was_temp = 1; + + if ( is_true( level.chests[i].hidden ) ) + level.chests[i] thread maps\mp\zombies\_zm_magicbox::show_chest(); + + wait_network_frame(); + } + } + } + + level waittill( "fire_sale_off" ); + + waittillframeend; + + for ( i = 0; i < level.chests.size; i++ ) + { + show_firesale_box = level.chests[i] [[ level._zombiemode_check_firesale_loc_valid_func ]](); + + if ( show_firesale_box ) + { + if ( level.chest_index != i && isdefined( level.chests[i].was_temp ) ) + { + level.chests[i].was_temp = undefined; + level thread remove_temp_chest( i ); + } + + level.chests[i].zombie_cost = level.chests[i].old_cost; + } + } + } +} + +fire_sale_weapon_wait() +{ + self.zombie_cost = self.old_cost; + + while ( isdefined( self.chest_user ) ) + wait_network_frame(); + + self set_hint_string( self, "default_treasure_chest", self.zombie_cost ); +} + +remove_temp_chest( chest_index ) +{ + while ( isdefined( level.chests[chest_index].chest_user ) || isdefined( level.chests[chest_index]._box_open ) && level.chests[chest_index]._box_open == 1 ) + wait_network_frame(); + + if ( level.zombie_vars["zombie_powerup_fire_sale_on"] ) + { + level.chests[chest_index].was_temp = 1; + level.chests[chest_index].zombie_cost = 10; + return; + } + + for ( i = 0; i < chest_index; i++ ) + wait_network_frame(); + + playfx( level._effect["poltergeist"], level.chests[chest_index].orig_origin ); + level.chests[chest_index].zbarrier playsound( "zmb_box_poof_land" ); + level.chests[chest_index].zbarrier playsound( "zmb_couch_slam" ); + wait_network_frame(); + level.chests[chest_index] maps\mp\zombies\_zm_magicbox::hide_chest(); +} + +devil_dialog_delay() +{ + wait 1.0; +} + +full_ammo_on_hud( drop_item, player_team ) +{ + self endon( "disconnect" ); + hudelem = maps\mp\gametypes_zm\_hud_util::createserverfontstring( "objective", 2, player_team ); + hudelem maps\mp\gametypes_zm\_hud_util::setpoint( "TOP", undefined, 0, level.zombie_vars["zombie_timer_offset"] - level.zombie_vars["zombie_timer_offset_interval"] * 2 ); + hudelem.sort = 0.5; + hudelem.alpha = 0; + hudelem fadeovertime( 0.5 ); + hudelem.alpha = 1; + + if ( isdefined( drop_item ) ) + hudelem.label = drop_item.hint; + + hudelem thread full_ammo_move_hud( player_team ); +} + +full_ammo_move_hud( player_team ) +{ + players = get_players( player_team ); + players[0] playsoundtoteam( "zmb_full_ammo", player_team ); + wait 0.5; + move_fade_time = 1.5; + self fadeovertime( move_fade_time ); + self moveovertime( move_fade_time ); + self.y = 270; + self.alpha = 0; + wait( move_fade_time ); + self destroy(); +} + +check_for_rare_drop_override( pos ) +{ + if ( isdefined( flag( "ape_round" ) ) && flag( "ape_round" ) ) + return false; + + return false; +} + +setup_firesale_audio() +{ + wait 2; + intercom = getentarray( "intercom", "targetname" ); + + while ( true ) + { + while ( level.zombie_vars["zombie_powerup_fire_sale_on"] == 0 ) + wait 0.2; + + for ( i = 0; i < intercom.size; i++ ) + intercom[i] thread play_firesale_audio(); + + while ( level.zombie_vars["zombie_powerup_fire_sale_on"] == 1 ) + wait 0.1; + + level notify( "firesale_over" ); + } +} + +play_firesale_audio() +{ + if ( isdefined( level.sndfiresalemusoff ) && level.sndfiresalemusoff ) + return; + + if ( isdefined( level.sndannouncerisrich ) && level.sndannouncerisrich ) + self playloopsound( "mus_fire_sale_rich" ); + else + self playloopsound( "mus_fire_sale" ); + + level waittill( "firesale_over" ); + + self stoploopsound(); +} + +setup_bonfiresale_audio() +{ + wait 2; + intercom = getentarray( "intercom", "targetname" ); + + while ( true ) + { + while ( level.zombie_vars["zombie_powerup_fire_sale_on"] == 0 ) + wait 0.2; + + for ( i = 0; i < intercom.size; i++ ) + intercom[i] thread play_bonfiresale_audio(); + + while ( level.zombie_vars["zombie_powerup_fire_sale_on"] == 1 ) + wait 0.1; + + level notify( "firesale_over" ); + } +} + +play_bonfiresale_audio() +{ + if ( isdefined( level.sndfiresalemusoff ) && level.sndfiresalemusoff ) + return; + + if ( isdefined( level.sndannouncerisrich ) && level.sndannouncerisrich ) + self playloopsound( "mus_fire_sale_rich" ); + else + self playloopsound( "mus_fire_sale" ); + + level waittill( "firesale_over" ); + + self stoploopsound(); +} + +free_perk_powerup( item ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( players[i].sessionstate == "spectator" ) ) + { + player = players[i]; + + if ( isdefined( item.ghost_powerup ) ) + { + player maps\mp\zombies\_zm_stats::increment_client_stat( "buried_ghost_perk_acquired", 0 ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "buried_ghost_perk_acquired" ); + player notify( "player_received_ghost_round_free_perk" ); + } + + free_perk = player maps\mp\zombies\_zm_perks::give_random_perk(); + + if ( isdefined( level.disable_free_perks_before_power ) && level.disable_free_perks_before_power ) + player thread disable_perk_before_power( free_perk ); + } + } +} + +disable_perk_before_power( perk ) +{ + self endon( "disconnect" ); + + if ( isdefined( perk ) ) + { + wait 0.1; + + if ( !flag( "power_on" ) ) + { + a_players = get_players(); + + if ( isdefined( a_players ) && a_players.size == 1 && perk == "specialty_quickrevive" ) + return; + + self perk_pause( perk ); + flag_wait( "power_on" ); + self perk_unpause( perk ); + } + } +} + +random_weapon_powerup_throttle() +{ + self.random_weapon_powerup_throttle = 1; + wait 0.25; + self.random_weapon_powerup_throttle = 0; +} + +random_weapon_powerup( item, player ) +{ + if ( player.sessionstate == "spectator" || player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + return false; + + if ( isdefined( player.random_weapon_powerup_throttle ) && player.random_weapon_powerup_throttle || player isswitchingweapons() || player.is_drinking > 0 ) + return false; + + current_weapon = player getcurrentweapon(); + current_weapon_type = weaponinventorytype( current_weapon ); + + if ( !is_tactical_grenade( item.weapon ) ) + { + if ( "primary" != current_weapon_type && "altmode" != current_weapon_type ) + return false; + + if ( !isdefined( level.zombie_weapons[current_weapon] ) && !maps\mp\zombies\_zm_weapons::is_weapon_upgraded( current_weapon ) && "altmode" != current_weapon_type ) + return false; + } + + player thread random_weapon_powerup_throttle(); + weapon_string = item.weapon; + + if ( weapon_string == "knife_ballistic_zm" ) + weapon = player maps\mp\zombies\_zm_melee_weapon::give_ballistic_knife( weapon_string, 0 ); + else if ( weapon_string == "knife_ballistic_upgraded_zm" ) + weapon = player maps\mp\zombies\_zm_melee_weapon::give_ballistic_knife( weapon_string, 1 ); + + player thread maps\mp\zombies\_zm_weapons::weapon_give( weapon_string ); + return true; +} + +bonus_points_player_powerup( item, player ) +{ + points = randomintrange( 1, 25 ) * 100; + + if ( isdefined( level.bonus_points_powerup_override ) ) + points = [[ level.bonus_points_powerup_override ]](); + + if ( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( player.sessionstate == "spectator" ) ) + player maps\mp\zombies\_zm_score::player_add_points( "bonus_points_powerup", points ); +} + +bonus_points_team_powerup( item ) +{ + points = randomintrange( 1, 25 ) * 100; + + if ( isdefined( level.bonus_points_powerup_override ) ) + points = [[ level.bonus_points_powerup_override ]](); + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( players[i].sessionstate == "spectator" ) ) + players[i] maps\mp\zombies\_zm_score::player_add_points( "bonus_points_powerup", points ); + } +} + +lose_points_team_powerup( item ) +{ + points = randomintrange( 1, 25 ) * 100; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( players[i].sessionstate == "spectator" ) ) + { + if ( 0 > players[i].score - points ) + { + players[i] maps\mp\zombies\_zm_score::minus_to_player_score( players[i].score ); + continue; + } + + players[i] maps\mp\zombies\_zm_score::minus_to_player_score( points ); + } + } +} + +lose_perk_powerup( item ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( player.sessionstate == "spectator" ) ) + player maps\mp\zombies\_zm_perks::lose_random_perk(); + } +} + +empty_clip_powerup( item ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( player.sessionstate == "spectator" ) ) + { + weapon = player getcurrentweapon(); + player setweaponammoclip( weapon, 0 ); + } + } +} + +minigun_weapon_powerup( ent_player, time ) +{ + ent_player endon( "disconnect" ); + ent_player endon( "death" ); + ent_player endon( "player_downed" ); + + if ( !isdefined( time ) ) + time = 30; + + if ( isdefined( level._minigun_time_override ) ) + time = level._minigun_time_override; + + if ( ent_player.zombie_vars["zombie_powerup_minigun_on"] && ( "minigun_zm" == ent_player getcurrentweapon() || isdefined( ent_player.has_minigun ) && ent_player.has_minigun ) ) + { + if ( ent_player.zombie_vars["zombie_powerup_minigun_time"] < time ) + ent_player.zombie_vars["zombie_powerup_minigun_time"] = time; + + return; + } + + ent_player notify( "replace_weapon_powerup" ); + ent_player._show_solo_hud = 1; + level._zombie_minigun_powerup_last_stand_func = ::minigun_watch_gunner_downed; + ent_player.has_minigun = 1; + ent_player.has_powerup_weapon = 1; + ent_player increment_is_drinking(); + ent_player._zombie_gun_before_minigun = ent_player getcurrentweapon(); + ent_player giveweapon( "minigun_zm" ); + ent_player switchtoweapon( "minigun_zm" ); + ent_player.zombie_vars["zombie_powerup_minigun_on"] = 1; + level thread minigun_weapon_powerup_countdown( ent_player, "minigun_time_over", time ); + level thread minigun_weapon_powerup_replace( ent_player, "minigun_time_over" ); +} + +minigun_weapon_powerup_countdown( ent_player, str_gun_return_notify, time ) +{ + ent_player endon( "death" ); + ent_player endon( "disconnect" ); + ent_player endon( "player_downed" ); + ent_player endon( str_gun_return_notify ); + ent_player endon( "replace_weapon_powerup" ); + setclientsysstate( "levelNotify", "minis", ent_player ); + + for ( ent_player.zombie_vars["zombie_powerup_minigun_time"] = time; ent_player.zombie_vars["zombie_powerup_minigun_time"] > 0; ent_player.zombie_vars["zombie_powerup_minigun_time"] -= 0.05 ) + wait 0.05; + + setclientsysstate( "levelNotify", "minie", ent_player ); + level thread minigun_weapon_powerup_remove( ent_player, str_gun_return_notify ); +} + +minigun_weapon_powerup_replace( ent_player, str_gun_return_notify ) +{ + ent_player endon( "death" ); + ent_player endon( "disconnect" ); + ent_player endon( "player_downed" ); + ent_player endon( str_gun_return_notify ); + + ent_player waittill( "replace_weapon_powerup" ); + + ent_player takeweapon( "minigun_zm" ); + ent_player.zombie_vars["zombie_powerup_minigun_on"] = 0; + ent_player.has_minigun = 0; + ent_player decrement_is_drinking(); +} + +minigun_weapon_powerup_remove( ent_player, str_gun_return_notify ) +{ + ent_player endon( "death" ); + ent_player endon( "player_downed" ); + ent_player takeweapon( "minigun_zm" ); + ent_player.zombie_vars["zombie_powerup_minigun_on"] = 0; + ent_player._show_solo_hud = 0; + ent_player.has_minigun = 0; + ent_player.has_powerup_weapon = 0; + ent_player notify( str_gun_return_notify ); + ent_player decrement_is_drinking(); + + if ( isdefined( ent_player._zombie_gun_before_minigun ) ) + { + player_weapons = ent_player getweaponslistprimaries(); + + for ( i = 0; i < player_weapons.size; i++ ) + { + if ( player_weapons[i] == ent_player._zombie_gun_before_minigun ) + { + ent_player switchtoweapon( ent_player._zombie_gun_before_minigun ); + return; + } + } + } + + primaryweapons = ent_player getweaponslistprimaries(); + + if ( primaryweapons.size > 0 ) + ent_player switchtoweapon( primaryweapons[0] ); + else + { + allweapons = ent_player getweaponslist( 1 ); + + for ( i = 0; i < allweapons.size; i++ ) + { + if ( is_melee_weapon( allweapons[i] ) ) + { + ent_player switchtoweapon( allweapons[i] ); + return; + } + } + } +} + +minigun_weapon_powerup_off() +{ + self.zombie_vars["zombie_powerup_minigun_time"] = 0; +} + +minigun_watch_gunner_downed() +{ + if ( !( isdefined( self.has_minigun ) && self.has_minigun ) ) + return; + + primaryweapons = self getweaponslistprimaries(); + + for ( i = 0; i < primaryweapons.size; i++ ) + { + if ( primaryweapons[i] == "minigun_zm" ) + self takeweapon( "minigun_zm" ); + } + + self notify( "minigun_time_over" ); + self.zombie_vars["zombie_powerup_minigun_on"] = 0; + self._show_solo_hud = 0; + wait 0.05; + self.has_minigun = 0; + self.has_powerup_weapon = 0; +} + +tesla_weapon_powerup( ent_player, time ) +{ + ent_player endon( "disconnect" ); + ent_player endon( "death" ); + ent_player endon( "player_downed" ); + + if ( !isdefined( time ) ) + time = 11; + + if ( ent_player.zombie_vars["zombie_powerup_tesla_on"] && ( "tesla_gun_zm" == ent_player getcurrentweapon() || isdefined( ent_player.has_tesla ) && ent_player.has_tesla ) ) + { + ent_player givemaxammo( "tesla_gun_zm" ); + + if ( ent_player.zombie_vars["zombie_powerup_tesla_time"] < time ) + ent_player.zombie_vars["zombie_powerup_tesla_time"] = time; + + return; + } + + ent_player notify( "replace_weapon_powerup" ); + ent_player._show_solo_hud = 1; + level._zombie_tesla_powerup_last_stand_func = ::tesla_watch_gunner_downed; + ent_player.has_tesla = 1; + ent_player.has_powerup_weapon = 1; + ent_player increment_is_drinking(); + ent_player._zombie_gun_before_tesla = ent_player getcurrentweapon(); + ent_player giveweapon( "tesla_gun_zm" ); + ent_player givemaxammo( "tesla_gun_zm" ); + ent_player switchtoweapon( "tesla_gun_zm" ); + ent_player.zombie_vars["zombie_powerup_tesla_on"] = 1; + level thread tesla_weapon_powerup_countdown( ent_player, "tesla_time_over", time ); + level thread tesla_weapon_powerup_replace( ent_player, "tesla_time_over" ); +} + +tesla_weapon_powerup_countdown( ent_player, str_gun_return_notify, time ) +{ + ent_player endon( "death" ); + ent_player endon( "player_downed" ); + ent_player endon( str_gun_return_notify ); + ent_player endon( "replace_weapon_powerup" ); + setclientsysstate( "levelNotify", "minis", ent_player ); + ent_player.zombie_vars["zombie_powerup_tesla_time"] = time; + + while ( true ) + { + ent_player waittill_any( "weapon_fired", "reload", "zmb_max_ammo" ); + + if ( !ent_player getweaponammostock( "tesla_gun_zm" ) ) + { + clip_count = ent_player getweaponammoclip( "tesla_gun_zm" ); + + if ( !clip_count ) + break; + else if ( 1 == clip_count ) + ent_player.zombie_vars["zombie_powerup_tesla_time"] = 1; + else if ( 3 == clip_count ) + ent_player.zombie_vars["zombie_powerup_tesla_time"] = 6; + } + else + ent_player.zombie_vars["zombie_powerup_tesla_time"] = 11; + } + + setclientsysstate( "levelNotify", "minie", ent_player ); + level thread tesla_weapon_powerup_remove( ent_player, str_gun_return_notify ); +} + +tesla_weapon_powerup_replace( ent_player, str_gun_return_notify ) +{ + ent_player endon( "death" ); + ent_player endon( "disconnect" ); + ent_player endon( "player_downed" ); + ent_player endon( str_gun_return_notify ); + + ent_player waittill( "replace_weapon_powerup" ); + + ent_player takeweapon( "tesla_gun_zm" ); + ent_player.zombie_vars["zombie_powerup_tesla_on"] = 0; + ent_player.has_tesla = 0; + ent_player decrement_is_drinking(); +} + +tesla_weapon_powerup_remove( ent_player, str_gun_return_notify ) +{ + ent_player endon( "death" ); + ent_player endon( "player_downed" ); + ent_player takeweapon( "tesla_gun_zm" ); + ent_player.zombie_vars["zombie_powerup_tesla_on"] = 0; + ent_player._show_solo_hud = 0; + ent_player.has_tesla = 0; + ent_player.has_powerup_weapon = 0; + ent_player notify( str_gun_return_notify ); + ent_player decrement_is_drinking(); + + if ( isdefined( ent_player._zombie_gun_before_tesla ) ) + { + player_weapons = ent_player getweaponslistprimaries(); + + for ( i = 0; i < player_weapons.size; i++ ) + { + if ( player_weapons[i] == ent_player._zombie_gun_before_tesla ) + { + ent_player switchtoweapon( ent_player._zombie_gun_before_tesla ); + return; + } + } + } + + primaryweapons = ent_player getweaponslistprimaries(); + + if ( primaryweapons.size > 0 ) + ent_player switchtoweapon( primaryweapons[0] ); + else + { + allweapons = ent_player getweaponslist( 1 ); + + for ( i = 0; i < allweapons.size; i++ ) + { + if ( is_melee_weapon( allweapons[i] ) ) + { + ent_player switchtoweapon( allweapons[i] ); + return; + } + } + } +} + +tesla_weapon_powerup_off() +{ + self.zombie_vars["zombie_powerup_tesla_time"] = 0; +} + +tesla_watch_gunner_downed() +{ + if ( !( isdefined( self.has_tesla ) && self.has_tesla ) ) + return; + + primaryweapons = self getweaponslistprimaries(); + + for ( i = 0; i < primaryweapons.size; i++ ) + { + if ( primaryweapons[i] == "tesla_gun_zm" ) + self takeweapon( "tesla_gun_zm" ); + } + + self notify( "tesla_time_over" ); + self.zombie_vars["zombie_powerup_tesla_on"] = 0; + self._show_solo_hud = 0; + wait 0.05; + self.has_tesla = 0; + self.has_powerup_weapon = 0; +} + +tesla_powerup_active() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].zombie_vars["zombie_powerup_tesla_on"] ) + return true; + } + + return false; +} + +print_powerup_drop( powerup, type ) +{ +/# + if ( !isdefined( level.powerup_drop_time ) ) + { + level.powerup_drop_time = 0; + level.powerup_random_count = 0; + level.powerup_score_count = 0; + } + + time = ( gettime() - level.powerup_drop_time ) * 0.001; + level.powerup_drop_time = gettime(); + + if ( type == "random" ) + level.powerup_random_count++; + else + level.powerup_score_count++; + + println( "========== POWER UP DROPPED ==========" ); + println( "DROPPED: " + powerup ); + println( "HOW IT DROPPED: " + type ); + println( "--------------------" ); + println( "Drop Time: " + time ); + println( "Random Powerup Count: " + level.powerup_random_count ); + println( "Random Powerup Count: " + level.powerup_score_count ); + println( "======================================" ); +#/ +} + +register_carpenter_node( node, callback ) +{ + if ( !isdefined( level._additional_carpenter_nodes ) ) + level._additional_carpenter_nodes = []; + + node._post_carpenter_callback = callback; + level._additional_carpenter_nodes[level._additional_carpenter_nodes.size] = node; +} + +start_carpenter_new( origin ) +{ + level.carpenter_powerup_active = 1; + window_boards = getstructarray( "exterior_goal", "targetname" ); + + if ( isdefined( level._additional_carpenter_nodes ) ) + window_boards = arraycombine( window_boards, level._additional_carpenter_nodes, 0, 0 ); + + carp_ent = spawn( "script_origin", ( 0, 0, 0 ) ); + carp_ent playloopsound( "evt_carpenter" ); + boards_near_players = get_near_boards( window_boards ); + boards_far_from_players = get_far_boards( window_boards ); + level repair_far_boards( boards_far_from_players, maps\mp\zombies\_zm_powerups::is_carpenter_boards_upgraded() ); + + for ( i = 0; i < boards_near_players.size; i++ ) + { + window = boards_near_players[i]; + num_chunks_checked = 0; + last_repaired_chunk = undefined; + + while ( true ) + { + if ( all_chunks_intact( window, window.barrier_chunks ) ) + break; + + chunk = get_random_destroyed_chunk( window, window.barrier_chunks ); + + if ( !isdefined( chunk ) ) + break; + + window thread maps\mp\zombies\_zm_blockers::replace_chunk( window, chunk, undefined, maps\mp\zombies\_zm_powerups::is_carpenter_boards_upgraded(), 1 ); + last_repaired_chunk = chunk; + + if ( isdefined( window.clip ) ) + { + window.clip enable_trigger(); + window.clip disconnectpaths(); + } + else + blocker_disconnect_paths( window.neg_start, window.neg_end ); + + wait_network_frame(); + num_chunks_checked++; + + if ( num_chunks_checked >= 20 ) + break; + } + + if ( isdefined( window.zbarrier ) ) + { + if ( isdefined( last_repaired_chunk ) ) + { + while ( window.zbarrier getzbarrierpiecestate( last_repaired_chunk ) == "closing" ) + wait 0.05; + + if ( isdefined( window._post_carpenter_callback ) ) + window [[ window._post_carpenter_callback ]](); + } + + continue; + } + + while ( isdefined( last_repaired_chunk ) && last_repaired_chunk.state == "mid_repair" ) + wait 0.05; + } + + carp_ent stoploopsound( 1 ); + carp_ent playsoundwithnotify( "evt_carpenter_end", "sound_done" ); + + carp_ent waittill( "sound_done" ); + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] maps\mp\zombies\_zm_score::player_add_points( "carpenter_powerup", 200 ); + + carp_ent delete(); + level notify( "carpenter_finished" ); + level.carpenter_powerup_active = undefined; +} + +is_carpenter_boards_upgraded() +{ + if ( isdefined( level.pers_carpenter_boards_active ) && level.pers_carpenter_boards_active == 1 ) + return true; + + return false; +} + +get_near_boards( windows ) +{ + players = get_players(); + boards_near_players = []; + + for ( j = 0; j < windows.size; j++ ) + { + close = 0; + + for ( i = 0; i < players.size; i++ ) + { + origin = undefined; + + if ( isdefined( windows[j].zbarrier ) ) + origin = windows[j].zbarrier.origin; + else + origin = windows[j].origin; + + if ( distancesquared( players[i].origin, origin ) <= level.board_repair_distance_squared ) + { + close = 1; + break; + } + } + + if ( close ) + boards_near_players[boards_near_players.size] = windows[j]; + } + + return boards_near_players; +} + +get_far_boards( windows ) +{ + players = get_players(); + boards_far_from_players = []; + + for ( j = 0; j < windows.size; j++ ) + { + close = 0; + + for ( i = 0; i < players.size; i++ ) + { + origin = undefined; + + if ( isdefined( windows[j].zbarrier ) ) + origin = windows[j].zbarrier.origin; + else + origin = windows[j].origin; + + if ( distancesquared( players[i].origin, origin ) >= level.board_repair_distance_squared ) + { + close = 1; + break; + } + } + + if ( close ) + boards_far_from_players[boards_far_from_players.size] = windows[j]; + } + + return boards_far_from_players; +} + +repair_far_boards( barriers, upgrade ) +{ + for ( i = 0; i < barriers.size; i++ ) + { + barrier = barriers[i]; + + if ( all_chunks_intact( barrier, barrier.barrier_chunks ) ) + continue; + + if ( isdefined( barrier.zbarrier ) ) + { + a_pieces = barrier.zbarrier getzbarrierpieceindicesinstate( "open" ); + + if ( isdefined( a_pieces ) ) + { + for ( xx = 0; xx < a_pieces.size; xx++ ) + { + chunk = a_pieces[xx]; + + if ( upgrade ) + { + barrier.zbarrier zbarrierpieceuseupgradedmodel( chunk ); + barrier.zbarrier.chunk_health[chunk] = barrier.zbarrier getupgradedpiecenumlives( chunk ); + continue; + } + + barrier.zbarrier zbarrierpieceusedefaultmodel( chunk ); + barrier.zbarrier.chunk_health[chunk] = 0; + } + } + + for ( x = 0; x < barrier.zbarrier getnumzbarrierpieces(); x++ ) + { + barrier.zbarrier setzbarrierpiecestate( x, "closed" ); + barrier.zbarrier showzbarrierpiece( x ); + } + } + + if ( isdefined( barrier.clip ) ) + { + barrier.clip enable_trigger(); + barrier.clip disconnectpaths(); + } + else + blocker_disconnect_paths( barrier.neg_start, barrier.neg_end ); + + if ( i % 4 == 0 ) + wait_network_frame(); + } +} + +func_should_never_drop() +{ + return 0; +} + +func_should_always_drop() +{ + return 1; +} + +func_should_drop_minigun() +{ + if ( minigun_no_drop() ) + return false; + + return true; +} + +func_should_drop_carpenter() +{ + if ( get_num_window_destroyed() < 5 ) + return false; + + return true; +} + +func_should_drop_fire_sale() +{ + if ( level.zombie_vars["zombie_powerup_fire_sale_on"] == 1 || level.chest_moves < 1 || isdefined( level.disable_firesale_drop ) && level.disable_firesale_drop ) + return false; + + return true; +} + +powerup_move() +{ + self endon( "powerup_timedout" ); + self endon( "powerup_grabbed" ); + drag_speed = 75; + + while ( true ) + { + self waittill( "move_powerup", moveto, distance ); + + drag_vector = moveto - self.origin; + range_squared = lengthsquared( drag_vector ); + + if ( range_squared > distance * distance ) + { + drag_vector = vectornormalize( drag_vector ); + drag_vector = distance * drag_vector; + moveto = self.origin + drag_vector; + } + + self.origin = moveto; + } +} + +powerup_emp() +{ + self endon( "powerup_timedout" ); + self endon( "powerup_grabbed" ); + + if ( !should_watch_for_emp() ) + return; + + while ( true ) + { + level waittill( "emp_detonate", origin, radius ); + + if ( distancesquared( origin, self.origin ) < radius * radius ) + { + playfx( level._effect["powerup_off"], self.origin ); + self thread powerup_delete_delayed(); + self notify( "powerup_timedout" ); + } + } +} + +get_powerups( origin, radius ) +{ + if ( isdefined( origin ) && isdefined( radius ) ) + { + powerups = []; + + foreach ( powerup in level.active_powerups ) + { + if ( distancesquared( origin, powerup.origin ) < radius * radius ) + powerups[powerups.size] = powerup; + } + + return powerups; + } + + return level.active_powerups; +} + +should_award_stat( powerup_name ) +{ + if ( powerup_name == "teller_withdrawl" || powerup_name == "blue_monkey" || powerup_name == "free_perk" || powerup_name == "bonus_points_player" ) + return false; + + if ( isdefined( level.statless_powerups ) && isdefined( level.statless_powerups[powerup_name] ) ) + return false; + + return true; +} + +teller_withdrawl( powerup, player ) +{ + player maps\mp\zombies\_zm_score::add_to_player_score( powerup.value ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_riotshield.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_riotshield.gsc new file mode 100644 index 0000000..1fff6f4 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_riotshield.gsc @@ -0,0 +1,618 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_weap_riotshield; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_weapons; + +init() +{ + level.riotshield_name = "riotshield_zm"; + level.deployedshieldmodel = []; + level.stowedshieldmodel = []; + level.carriedshieldmodel = []; + level.deployedshieldmodel[0] = "t6_wpn_zmb_shield_world"; + level.deployedshieldmodel[2] = "t6_wpn_zmb_shield_dmg1_world"; + level.deployedshieldmodel[3] = "t6_wpn_zmb_shield_dmg2_world"; + level.stowedshieldmodel[0] = "t6_wpn_zmb_shield_stow"; + level.stowedshieldmodel[2] = "t6_wpn_zmb_shield_dmg1_stow"; + level.stowedshieldmodel[3] = "t6_wpn_zmb_shield_dmg2_stow"; + level.carriedshieldmodel[0] = "t6_wpn_zmb_shield_world"; + level.carriedshieldmodel[2] = "t6_wpn_zmb_shield_dmg1_world"; + level.carriedshieldmodel[3] = "t6_wpn_zmb_shield_dmg2_world"; + level.viewshieldmodel[0] = "t6_wpn_zmb_shield_view"; + level.viewshieldmodel[2] = "t6_wpn_zmb_shield_dmg1_view"; + level.viewshieldmodel[3] = "t6_wpn_zmb_shield_dmg2_view"; + precachemodel( level.stowedshieldmodel[0] ); + precachemodel( level.stowedshieldmodel[2] ); + precachemodel( level.stowedshieldmodel[3] ); + precachemodel( level.carriedshieldmodel[0] ); + precachemodel( level.carriedshieldmodel[2] ); + precachemodel( level.carriedshieldmodel[3] ); + precachemodel( level.viewshieldmodel[0] ); + precachemodel( level.viewshieldmodel[2] ); + precachemodel( level.viewshieldmodel[3] ); + level.riotshield_placement_zoffset = 26; +} + +attachriotshield( model, tag ) +{ + if ( isdefined( self.prev_shield_model ) && isdefined( self.prev_shield_tag ) ) + self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); + + self.prev_shield_model = model; + self.prev_shield_tag = tag; + + if ( isdefined( self.prev_shield_model ) && isdefined( self.prev_shield_tag ) ) + self attachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); +} + +removeriotshield() +{ + if ( isdefined( self.prev_shield_model ) && isdefined( self.prev_shield_tag ) ) + self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); + + self.prev_shield_model = undefined; + self.prev_shield_tag = undefined; + + if ( self getcurrentweapon() != level.riotshield_name ) + return; + + self setheldweaponmodel( 0 ); +} + +setriotshieldviewmodel( modelnum ) +{ + self.prev_shield_viewmodel = modelnum; + + if ( self getcurrentweapon() != level.riotshield_name ) + return; + + if ( isdefined( self.prev_shield_viewmodel ) ) + self setheldweaponmodel( self.prev_shield_viewmodel ); + else + self setheldweaponmodel( 0 ); +} + +specialriotshieldviewmodel() +{ + if ( self getcurrentweapon() != level.riotshield_name ) + return; + + self setheldweaponmodel( 3 ); +} + +restoreriotshieldviewmodel() +{ + if ( self getcurrentweapon() != level.riotshield_name ) + return; + + if ( isdefined( self.prev_shield_viewmodel ) ) + self setheldweaponmodel( self.prev_shield_viewmodel ); + else + self setheldweaponmodel( 0 ); +} + +updateriotshieldmodel() +{ + if ( !isdefined( self.shield_damage_level ) ) + { + if ( isdefined( self.player_shield_reset_health ) ) + self [[ self.player_shield_reset_health ]](); + } + + update = 0; + + if ( !isdefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level ) + { + self.prev_shield_damage_level = self.shield_damage_level; + update = 1; + } + + if ( !isdefined( self.prev_shield_placement ) || self.prev_shield_placement != self.shield_placement ) + { + self.prev_shield_placement = self.shield_placement; + update = 1; + } + + if ( update ) + { + if ( self.prev_shield_placement == 0 ) + self attachriotshield(); + else if ( self.prev_shield_placement == 1 ) + { + self attachriotshield( level.carriedshieldmodel[self.prev_shield_damage_level], "tag_weapon_left" ); + self setriotshieldviewmodel( self.prev_shield_damage_level ); + } + else if ( self.prev_shield_placement == 2 ) + self attachriotshield( level.stowedshieldmodel[self.prev_shield_damage_level], "tag_stowed_back" ); + else if ( self.prev_shield_placement == 3 ) + { + self attachriotshield(); + + if ( isdefined( self.shield_ent ) ) + self.shield_ent setmodel( level.deployedshieldmodel[self.prev_shield_damage_level] ); + } + } +} + +updatestandaloneriotshieldmodel() +{ + update = 0; + + if ( !isdefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level ) + { + self.prev_shield_damage_level = self.shield_damage_level; + update = 1; + } + + if ( update ) + self setmodel( level.deployedshieldmodel[self.prev_shield_damage_level] ); +} + +watchshieldlaststand() +{ + self endon( "death" ); + self endon( "disconnect" ); + self notify( "watchShieldLastStand" ); + self endon( "watchShieldLastStand" ); + + while ( true ) + { + self waittill( "weapons_taken_for_last_stand" ); + + self.riotshield_hidden = 0; + + if ( isdefined( self.hasriotshield ) && self.hasriotshield ) + { + if ( self.prev_shield_placement == 1 || self.prev_shield_placement == 2 ) + { + self.riotshield_hidden = 2; + self.shield_placement = 0; + self updateriotshieldmodel(); + } + } + + str_notify = self waittill_any_return( "player_revived", "bled_out" ); + + if ( str_notify == "player_revived" ) + { + if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden > 0 ) + { + self.shield_placement = self.riotshield_hidden; + self updateriotshieldmodel(); + } + } + else + self maps\mp\zombies\_zm_weap_riotshield::player_take_riotshield(); + + self.riotshield_hidden = undefined; + } +} + +trackriotshield() +{ + self endon( "death" ); + self endon( "disconnect" ); + self.hasriotshield = self hasweapon( level.riotshield_name ); + self.hasriotshieldequipped = self getcurrentweapon() == level.riotshield_name; + self.shield_placement = 0; + + if ( self.hasriotshield ) + { + if ( self.hasriotshieldequipped ) + { + self.shield_placement = 1; + self updateriotshieldmodel(); + } + else + { + self.shield_placement = 2; + self updateriotshieldmodel(); + } + } + + for (;;) + { + self waittill( "weapon_change", newweapon ); + + if ( newweapon == level.riotshield_name ) + { + if ( self.hasriotshieldequipped ) + continue; + + if ( isdefined( self.riotshieldentity ) ) + self notify( "destroy_riotshield" ); + + self.shield_placement = 1; + self updateriotshieldmodel(); + + if ( self.hasriotshield ) + { + + } + else + { + + } + + self.hasriotshield = 1; + self.hasriotshieldequipped = 1; + continue; + } + + if ( self ismantling() && newweapon == "none" ) + continue; + + if ( self.hasriotshieldequipped ) + { + assert( self.hasriotshield ); + self.hasriotshield = self hasweapon( level.riotshield_name ); + + if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden ) + { + + } + else if ( self.hasriotshield ) + self.shield_placement = 2; + else if ( isdefined( self.shield_ent ) ) + assert( self.shield_placement == 3 ); + else + self.shield_placement = 0; + + self updateriotshieldmodel(); + self.hasriotshieldequipped = 0; + continue; + } + + if ( self.hasriotshield ) + { + if ( !self hasweapon( level.riotshield_name ) ) + { + self.shield_placement = 0; + self updateriotshieldmodel(); + self.hasriotshield = 0; + } + + continue; + } + + if ( self hasweapon( level.riotshield_name ) ) + { + self.shield_placement = 2; + self updateriotshieldmodel(); + self.hasriotshield = 1; + } + } +} + +trackequipmentchange() +{ + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "equipment_dropped", equipname ); + + self notify( "weapon_change", self getcurrentweapon() ); + } +} + +updateriotshieldplacement() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "deploy_riotshield" ); + self endon( "start_riotshield_deploy" ); + self endon( "weapon_change" ); + + while ( true ) + { + placement = self canplaceriotshield( "raise_riotshield" ); + + if ( placement["result"] && riotshielddistancetest( placement["origin"] ) ) + { + self restoreriotshieldviewmodel(); + self setplacementhint( 1 ); + } + else + { + self specialriotshieldviewmodel(); + self setplacementhint( 0 ); + } + + wait 0.05; + } +} + +startriotshielddeploy() +{ + self notify( "start_riotshield_deploy" ); + self thread updateriotshieldplacement(); + self thread watchriotshielddeploy(); +} + +spawnriotshieldcover( origin, angles ) +{ + shield_ent = spawn( "script_model", origin, 1 ); + shield_ent.angles = angles; + shield_ent setowner( self ); + shield_ent.owner = self; + shield_ent.owner.shield_ent = shield_ent; + shield_ent.isriotshield = 1; + self.shield_placement = 3; + self updateriotshieldmodel(); + shield_ent setscriptmoverflag( 0 ); + self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( shield_ent, "destroy_riotshield", 1 ); + maps\mp\zombies\_zm_equipment::destructible_equipment_list_add( shield_ent ); + return shield_ent; +} + +watchriotshielddeploy() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "start_riotshield_deploy" ); + + self waittill( "deploy_riotshield", deploy_attempt ); + + self restoreriotshieldviewmodel(); + self setplacementhint( 1 ); + placement_hint = 0; + + if ( deploy_attempt ) + { + placement = self canplaceriotshield( "deploy_riotshield" ); + + if ( placement["result"] && riotshielddistancetest( placement["origin"] ) && self check_plant_position( placement["origin"], placement["angles"] ) ) + self doriotshielddeploy( placement["origin"], placement["angles"] ); + else + { + placement_hint = 1; + clip_max_ammo = weaponclipsize( level.riotshield_name ); + self setweaponammoclip( level.riotshield_name, clip_max_ammo ); + } + } + else + placement_hint = 1; + + if ( placement_hint ) + self setriotshieldfailhint(); +} + +check_plant_position( origin, angles ) +{ + if ( isdefined( level.equipment_safe_to_drop ) ) + { + ret = 1; + test_ent = spawn( "script_model", origin ); + test_ent setmodel( level.deployedshieldmodel[0] ); + test_ent.angles = angles; + + if ( !self [[ level.equipment_safe_to_drop ]]( test_ent ) ) + ret = 0; + + test_ent delete(); + return ret; + } + + return 1; +} + +doriotshielddeploy( origin, angles ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "start_riotshield_deploy" ); + self notify( "deployed_riotshield" ); + self maps\mp\zombies\_zm_buildables::track_placed_buildables( level.riotshield_name ); + + if ( isdefined( self.current_equipment ) && self.current_equipment == level.riotshield_name ) + self maps\mp\zombies\_zm_equipment::equipment_to_deployed( level.riotshield_name ); + + zoffset = level.riotshield_placement_zoffset; + shield_ent = self spawnriotshieldcover( origin + ( 0, 0, zoffset ), angles ); + item_ent = deployriotshield( self, shield_ent ); + primaries = self getweaponslistprimaries(); +/# + assert( isdefined( item_ent ) ); + assert( !isdefined( self.riotshieldretrievetrigger ) ); + assert( !isdefined( self.riotshieldentity ) ); +#/ + self maps\mp\zombies\_zm_weapons::switch_back_primary_weapon( primaries[0] ); + + if ( isdefined( level.equipment_planted ) ) + self [[ level.equipment_planted ]]( shield_ent, level.riotshield_name, self ); + + if ( isdefined( level.equipment_safe_to_drop ) ) + { + if ( !self [[ level.equipment_safe_to_drop ]]( shield_ent ) ) + { + self notify( "destroy_riotshield" ); + shield_ent delete(); + item_ent delete(); + return; + } + } + + self.riotshieldretrievetrigger = item_ent; + self.riotshieldentity = shield_ent; + self thread watchdeployedriotshieldents(); + self thread deleteshieldondamage( self.riotshieldentity ); + self thread deleteshieldmodelonweaponpickup( self.riotshieldretrievetrigger ); + self thread deleteriotshieldonplayerdeath(); + self thread watchshieldtriggervisibility( self.riotshieldretrievetrigger ); + self.riotshieldentity thread watchdeployedriotshielddamage(); + return shield_ent; +} + +riotshielddistancetest( origin ) +{ + assert( isdefined( origin ) ); + min_dist_squared = getdvarfloat( "riotshield_deploy_limit_radius" ); + min_dist_squared *= min_dist_squared; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( isdefined( level.players[i].riotshieldentity ) ) + { + dist_squared = distancesquared( level.players[i].riotshieldentity.origin, origin ); + + if ( min_dist_squared > dist_squared ) + { +/# + println( "Shield placement denied! Failed distance check to other riotshields." ); +#/ + return false; + } + } + } + + return true; +} + +watchdeployedriotshieldents() +{ +/# + assert( isdefined( self.riotshieldretrievetrigger ) ); + assert( isdefined( self.riotshieldentity ) ); +#/ + riotshieldretrievetrigger = self.riotshieldretrievetrigger; + riotshieldentity = self.riotshieldentity; + self waittill_any( "destroy_riotshield", "disconnect", "riotshield_zm_taken" ); + + if ( isdefined( self ) ) + { + self.shield_placement = 0; + self updateriotshieldmodel(); + } + + if ( isdefined( riotshieldretrievetrigger ) ) + riotshieldretrievetrigger delete(); + + if ( isdefined( riotshieldentity ) ) + riotshieldentity delete(); +} + +watchdeployedriotshielddamage() +{ + self endon( "death" ); + damagemax = getdvarint( "riotshield_deployed_health" ); + self.damagetaken = 0; + + while ( true ) + { + self.maxhealth = 100000; + self.health = self.maxhealth; + + self waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, idflags ); + + if ( !( isdefined( level.players_can_damage_riotshields ) && level.players_can_damage_riotshields ) ) + continue; + + if ( !isdefined( attacker ) || !isplayer( attacker ) ) + continue; + + assert( isdefined( self.owner ) && isdefined( self.owner.team ) ); + + if ( is_encounter() && attacker.team == self.owner.team && attacker != self.owner ) + continue; + + if ( isdefined( level.riotshield_damage_callback ) ) + self.owner [[ level.riotshield_damage_callback ]]( damage, 0 ); + else + { + if ( type == "MOD_MELEE" ) + damage *= getdvarfloat( "riotshield_melee_damage_scale" ); + else if ( type == "MOD_PISTOL_BULLET" || type == "MOD_RIFLE_BULLET" ) + damage *= getdvarfloat( "riotshield_bullet_damage_scale" ); + else if ( type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" || type == "MOD_EXPLOSIVE" || type == "MOD_EXPLOSIVE_SPLASH" || type == "MOD_PROJECTILE" || type == "MOD_PROJECTILE_SPLASH" ) + damage *= getdvarfloat( "riotshield_explosive_damage_scale" ); + else if ( type == "MOD_IMPACT" ) + damage *= getdvarfloat( "riotshield_projectile_damage_scale" ); + + self.damagetaken += damage; + + if ( self.damagetaken >= damagemax ) + self damagethendestroyriotshield(); + } + } +} + +damagethendestroyriotshield() +{ + self endon( "death" ); + self.owner.riotshieldretrievetrigger delete(); + self notsolid(); + self setclientflag( 14 ); + wait( getdvarfloat( "riotshield_destroyed_cleanup_time" ) ); + self.owner notify( "destroy_riotshield" ); +} + +deleteshieldondamage( shield_ent ) +{ + shield_ent waittill( "death" ); + + self notify( "destroy_riotshield" ); +} + +deleteshieldmodelonweaponpickup( shield_trigger ) +{ + shield_trigger waittill( "trigger", player ); + + self maps\mp\zombies\_zm_equipment::equipment_from_deployed( level.riotshield_name ); + self notify( "destroy_riotshield" ); + + if ( self != player ) + { + if ( isdefined( level.transferriotshield ) ) + [[ level.transferriotshield ]]( self, player ); + } +} + +watchshieldtriggervisibility( trigger ) +{ + self endon( "death" ); + trigger endon( "death" ); + + while ( isdefined( trigger ) ) + { + players = get_players(); + + foreach ( player in players ) + { + pickup = 1; + + if ( !isdefined( player ) ) + continue; + + if ( isdefined( level.cantransferriotshield ) ) + pickup = [[ level.cantransferriotshield ]]( self, player ); + + if ( !isdefined( trigger ) ) + return; + + if ( pickup ) + trigger setvisibletoplayer( player ); + else + trigger setinvisibletoplayer( player ); + + wait 0.05; + } + + wait 0.05; + } +} + +deleteriotshieldonplayerdeath() +{ + self.riotshieldentity endon( "death" ); + + self waittill( "death" ); + + self notify( "destroy_riotshield" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_score.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_score.gsc new file mode 100644 index 0000000..e16f27c --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_score.gsc @@ -0,0 +1,368 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_pers_upgrades_functions; + +init() +{ + level.score_cf_info = []; + score_cf_register_info( "damage", 1, 7 ); + score_cf_register_info( "death_normal", 1, 3 ); + score_cf_register_info( "death_torso", 1, 3 ); + score_cf_register_info( "death_neck", 1, 3 ); + score_cf_register_info( "death_head", 1, 3 ); + score_cf_register_info( "death_melee", 1, 3 ); + + if ( !level.createfx_enabled ) + registerclientfield( "allplayers", "score_cf_double_points_active", 1, 1, "int" ); +} + +score_cf_register_info( name, version, max_count ) +{ + if ( level.createfx_enabled ) + return; + + info = spawnstruct(); + info.name = name; + info.cf_field = "score_cf_" + name; + info.version = version; + info.max_count = max_count; + info.bit_count = getminbitcountfornum( max_count ); + info.players = []; + level.score_cf_info[name] = info; + registerclientfield( "allplayers", info.cf_field, info.version, info.bit_count, "int" ); +} + +score_cf_increment_info( name ) +{ + info = level.score_cf_info[name]; + player_ent_index = self getentitynumber(); + + if ( !isdefined( info.players[player_ent_index] ) ) + info.players[player_ent_index] = 0; + + info.players[player_ent_index]++; + + if ( info.players[player_ent_index] > info.max_count ) + info.players[player_ent_index] = 0; + + self setclientfield( info.cf_field, info.players[player_ent_index] ); +} + +score_cf_monitor() +{ + if ( level.createfx_enabled ) + return; + + info_keys = getarraykeys( level.score_cf_info ); + + while ( true ) + { + wait_network_frame(); + players = get_players(); + + for ( player_index = 0; player_index < players.size; player_index++ ) + { + player = players[player_index]; + player_ent_index = player getentitynumber(); + + for ( info_index = 0; info_index < info_keys.size; info_index++ ) + { + info = level.score_cf_info[info_keys[info_index]]; + info.players[player_ent_index] = 0; + player setclientfield( info.cf_field, 0 ); + } + } + } +} + +player_add_points( event, mod, hit_location, is_dog, zombie_team, damage_weapon ) +{ + if ( level.intermission ) + return; + + if ( !is_player_valid( self ) ) + return; + + player_points = 0; + team_points = 0; + multiplier = get_points_multiplier( self ); + + switch ( event ) + { + case "death": + player_points = get_zombie_death_player_points(); + team_points = get_zombie_death_team_points(); + points = self player_add_points_kill_bonus( mod, hit_location ); + + if ( level.zombie_vars[self.team]["zombie_powerup_insta_kill_on"] == 1 && mod == "MOD_UNKNOWN" ) + points *= 2; + + player_points += points; + + if ( team_points > 0 ) + team_points += points; + + if ( mod == "MOD_GRENADE" || mod == "MOD_GRENADE_SPLASH" ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "grenade_kills" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "grenade_kills" ); + } + + break; + case "ballistic_knife_death": + player_points = get_zombie_death_player_points() + level.zombie_vars["zombie_score_bonus_melee"]; + self score_cf_increment_info( "death_melee" ); + break; + case "damage_light": + player_points = level.zombie_vars["zombie_score_damage_light"]; + self score_cf_increment_info( "damage" ); + break; + case "damage": + player_points = level.zombie_vars["zombie_score_damage_normal"]; + self score_cf_increment_info( "damage" ); + break; + case "damage_ads": + player_points = int( level.zombie_vars["zombie_score_damage_normal"] * 1.25 ); + self score_cf_increment_info( "damage" ); + break; + case "rebuild_board": + case "carpenter_powerup": + player_points = mod; + break; + case "bonus_points_powerup": + player_points = mod; + break; + case "nuke_powerup": + player_points = mod; + team_points = mod; + break; + case "thundergun_fling": + case "riotshield_fling": + case "jetgun_fling": + player_points = mod; + break; + case "hacker_transfer": + player_points = mod; + break; + case "reviver": + player_points = mod; + break; + case "vulture": + player_points = mod; + break; + case "build_wallbuy": + player_points = mod; + break; + default: + assert( 0, "Unknown point event" ); + break; + } + + player_points = multiplier * round_up_score( player_points, 5 ); + team_points = multiplier * round_up_score( team_points, 5 ); + + if ( isdefined( self.point_split_receiver ) && ( event == "death" || event == "ballistic_knife_death" ) ) + { + split_player_points = player_points - round_up_score( player_points * self.point_split_keep_percent, 10 ); + self.point_split_receiver add_to_player_score( split_player_points ); + player_points -= split_player_points; + } + + if ( is_true( level.pers_upgrade_pistol_points ) ) + player_points = self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_pistol_points_set_score( player_points, event, mod, damage_weapon ); + + self add_to_player_score( player_points ); + self.pers["score"] = self.score; + + if ( isdefined( level._game_module_point_adjustment ) ) + level [[ level._game_module_point_adjustment ]]( self, zombie_team, player_points ); +} + +get_points_multiplier( player ) +{ + multiplier = level.zombie_vars[player.team]["zombie_point_scalar"]; + + if ( isdefined( level.current_game_module ) && level.current_game_module == 2 ) + { + if ( isdefined( level._race_team_double_points ) && level._race_team_double_points == player._race_team ) + return multiplier; + else + return 1; + } + + return multiplier; +} + +get_zombie_death_player_points() +{ + players = get_players(); + + if ( players.size == 1 ) + points = level.zombie_vars["zombie_score_kill_1player"]; + else if ( players.size == 2 ) + points = level.zombie_vars["zombie_score_kill_2player"]; + else if ( players.size == 3 ) + points = level.zombie_vars["zombie_score_kill_3player"]; + else + points = level.zombie_vars["zombie_score_kill_4player"]; + + return points; +} + +get_zombie_death_team_points() +{ + players = get_players(); + + if ( players.size == 1 ) + points = level.zombie_vars["zombie_score_kill_1p_team"]; + else if ( players.size == 2 ) + points = level.zombie_vars["zombie_score_kill_2p_team"]; + else if ( players.size == 3 ) + points = level.zombie_vars["zombie_score_kill_3p_team"]; + else + points = level.zombie_vars["zombie_score_kill_4p_team"]; + + return points; +} + +player_add_points_kill_bonus( mod, hit_location ) +{ + if ( mod == "MOD_MELEE" ) + { + self score_cf_increment_info( "death_melee" ); + return level.zombie_vars["zombie_score_bonus_melee"]; + } + + if ( mod == "MOD_BURNED" ) + { + self score_cf_increment_info( "death_torso" ); + return level.zombie_vars["zombie_score_bonus_burn"]; + } + + score = 0; + + if ( isdefined( hit_location ) ) + { + switch ( hit_location ) + { + case "helmet": + case "head": + self score_cf_increment_info( "death_head" ); + score = level.zombie_vars["zombie_score_bonus_head"]; + break; + case "neck": + self score_cf_increment_info( "death_neck" ); + score = level.zombie_vars["zombie_score_bonus_neck"]; + break; + case "torso_upper": + case "torso_lower": + self score_cf_increment_info( "death_torso" ); + score = level.zombie_vars["zombie_score_bonus_torso"]; + break; + default: + self score_cf_increment_info( "death_normal" ); + break; + } + } + + return score; +} + +player_reduce_points( event, mod, hit_location ) +{ + if ( level.intermission ) + return; + + points = 0; + + switch ( event ) + { + case "no_revive_penalty": + percent = level.zombie_vars["penalty_no_revive"]; + points = self.score * percent; + break; + case "died": + percent = level.zombie_vars["penalty_died"]; + points = self.score * percent; + break; + case "downed": + percent = level.zombie_vars["penalty_downed"]; + self notify( "I_am_down" ); + points = self.score * percent; + self.score_lost_when_downed = round_up_to_ten( int( points ) ); + break; + default: + assert( 0, "Unknown point event" ); + break; + } + + points = self.score - round_up_to_ten( int( points ) ); + + if ( points < 0 ) + points = 0; + + self.score = points; +} + +add_to_player_score( points, add_to_total = 1 ) +{ + if ( !isdefined( points ) || level.intermission ) + return; + + self.score += points; + self.pers["score"] = self.score; + + if ( add_to_total ) + self.score_total += points; + + self incrementplayerstat( "score", points ); +} + +minus_to_player_score( points, ignore_double_points_upgrade ) +{ + if ( !isdefined( points ) || level.intermission ) + return; + + if ( !is_true( ignore_double_points_upgrade ) ) + { + if ( is_true( level.pers_upgrade_double_points ) ) + points = maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_double_points_set_score( points ); + } + + self.score -= points; + self.pers["score"] = self.score; + level notify( "spent_points", self, points ); +} + +add_to_team_score( points ) +{ + +} + +minus_to_team_score( points ) +{ + +} + +player_died_penalty() +{ + players = get_players( self.team ); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] != self && !players[i].is_zombie ) + players[i] player_reduce_points( "no_revive_penalty" ); + } +} + +player_downed_penalty() +{ +/# + println( "ZM >> LAST STAND - player_downed_penalty " ); +#/ + self player_reduce_points( "downed" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_server_throttle.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_server_throttle.gsc new file mode 100644 index 0000000..9860a2d --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_server_throttle.gsc @@ -0,0 +1,90 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; + +server_choke_init( id, max ) +{ + if ( !isdefined( level.zombie_server_choke_ids_max ) ) + { + level.zombie_server_choke_ids_max = []; + level.zombie_server_choke_ids_count = []; + } + + level.zombie_server_choke_ids_max[id] = max; + level.zombie_server_choke_ids_count[id] = 0; + level thread server_choke_thread( id ); +} + +server_choke_thread( id ) +{ + while ( true ) + { + wait 0.05; + level.zombie_server_choke_ids_count[id] = 0; + } +} + +server_choke_safe( id ) +{ + return level.zombie_server_choke_ids_count[id] < level.zombie_server_choke_ids_max[id]; +} + +server_choke_action( id, choke_action, arg1, arg2, arg3 ) +{ + assert( isdefined( level.zombie_server_choke_ids_max[id] ), "server Choke: " + id + " undefined" ); + + while ( !server_choke_safe( id ) ) + wait 0.05; + + level.zombie_server_choke_ids_count[id]++; + + if ( !isdefined( arg1 ) ) + return [[ choke_action ]](); + + if ( !isdefined( arg2 ) ) + return [[ choke_action ]]( arg1 ); + + if ( !isdefined( arg3 ) ) + return [[ choke_action ]]( arg1, arg2 ); + + return [[ choke_action ]]( arg1, arg2, arg3 ); +} + +server_entity_valid( entity ) +{ + if ( !isdefined( entity ) ) + return false; + + return true; +} + +server_safe_init( id, max ) +{ + if ( !isdefined( level.zombie_server_choke_ids_max ) || !isdefined( level.zombie_server_choke_ids_max[id] ) ) + server_choke_init( id, max ); + + assert( max == level.zombie_server_choke_ids_max[id] ); +} + +_server_safe_ground_trace( pos ) +{ + return groundpos( pos ); +} + +server_safe_ground_trace( id, max, origin ) +{ + server_safe_init( id, max ); + return server_choke_action( id, ::_server_safe_ground_trace, origin ); +} + +_server_safe_ground_trace_ignore_water( pos ) +{ + return groundpos_ignore_water( pos ); +} + +server_safe_ground_trace_ignore_water( id, max, origin ) +{ + server_safe_init( id, max ); + return server_choke_action( id, ::_server_safe_ground_trace_ignore_water, origin ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_sidequests.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_sidequests.gsc new file mode 100644 index 0000000..0d75a15 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_sidequests.gsc @@ -0,0 +1,1076 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; + +init_sidequests() +{ + level._sidequest_icons_base_x = -225; + level._zombie_sidequests = []; +/# + level thread sidequest_debug(); +#/ +} + +is_sidequest_allowed( a_gametypes ) +{ + if ( isdefined( level.gamedifficulty ) && level.gamedifficulty == 0 ) + return 0; + + b_is_gametype_active = 0; + + if ( !isarray( a_gametypes ) ) + a_gametypes = array( a_gametypes ); + + for ( i = 0; i < a_gametypes.size; i++ ) + { + if ( getdvar( "g_gametype" ) == a_gametypes[i] ) + b_is_gametype_active = 1; + } + + return b_is_gametype_active; +} + +sidequest_debug() +{ +/# + if ( getdvar( _hash_A7AC338D ) != "1" ) + return; + + while ( true ) + wait 1; +#/ +} + +damager_trigger_thread( dam_types, trigger_func ) +{ + while ( true ) + { + self waittill( "damage", amount, attacker, dir, point, type ); + + self.dam_amount = amount; + self.attacker = attacker; + self.dam_dir = dir; + self.dam_point = point; + self.dam_type = type; + + for ( i = 0; i < dam_types.size; i++ ) + { + if ( type == dam_types[i] ) + break; + } + } + + if ( isdefined( trigger_func ) ) + self [[ trigger_func ]](); + + self notify( "triggered" ); +} + +damage_trigger_thread() +{ + self endon( "death" ); + + while ( true ) + { + self waittill( "damage" ); + + self.owner_ent notify( "triggered" ); + } +} + +sidequest_uses_teleportation( name ) +{ + level._zombie_sidequests[name].uses_teleportation = 1; +} + +declare_sidequest_icon( sidequest_name, icon_name, shader_name ) +{ + sidequest = level._zombie_sidequests[sidequest_name]; + sidequest.icons[icon_name] = shader_name; +} + +create_icon( shader_name, x ) +{ + icon = create_simple_hud( self ); + icon.foreground = 1; + icon.sort = 2; + icon.hidewheninmenu = 0; + icon.alignx = "center"; + icon.aligny = "bottom"; + icon.horzalign = "user_right"; + icon.vertalign = "user_bottom"; + icon.x = x; + icon.y = 0; + icon.alpha = 1; + icon setshader( shader_name, 32, 32 ); + return icon; +} + +add_sidequest_icon( sidequest_name, icon_name ) +{ + if ( !isdefined( self.sidequest_icons ) ) + self.sidequest_icons = []; + + if ( isdefined( self.sidequest_icons[icon_name] ) ) + return; + + sq = level._zombie_sidequests[sidequest_name]; + base_x = level._sidequest_icons_base_x; + + if ( isdefined( level._zombiemode_sidequest_icon_offset ) ) + base_x += level._zombiemode_sidequest_icon_offset; + + self.sidequest_icons[icon_name] = self create_icon( sq.icons[icon_name], base_x + self.sidequest_icons.size * 34 ); +} + +remove_sidequest_icon( sidequest_name, icon_name ) +{ + if ( !isdefined( self.sidequest_icons ) ) + return; + + if ( !isdefined( self.sidequest_icons[icon_name] ) ) + return; + + icon = self.sidequest_icons[icon_name]; + new_array = []; + keys = getarraykeys( self.sidequest_icons ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( keys[i] != icon_name ) + new_array[keys[i]] = self.sidequest_icons[keys[i]]; + } + + self.sidequest_icons = new_array; + icon destroy(); + keys = getarraykeys( self.sidequest_icons ); + base_x = level._sidequest_icons_base_x; + + if ( isdefined( level._zombiemode_sidequest_icon_offset ) ) + base_x += level._zombiemode_sidequest_icon_offset; + + for ( i = 0; i < keys.size; i++ ) + self.sidequest_icons[keys[i]].x = base_x + i * 34; +} + +declare_sidequest( name, init_func, logic_func, complete_func, generic_stage_start_func, generic_stage_end_func ) +{ + if ( !isdefined( level._zombie_sidequests ) ) + init_sidequests(); +/# + if ( isdefined( level._zombie_sidequests[name] ) ) + { + println( "*** ERROR: Attempt to re-declare sidequest with name " + name ); + return; + } +#/ + sq = spawnstruct(); + sq.name = name; + sq.stages = []; + sq.last_completed_stage = -1; + sq.active_stage = -1; + sq.sidequest_complete = 0; + sq.init_func = init_func; + sq.logic_func = logic_func; + sq.complete_func = complete_func; + sq.generic_stage_start_func = generic_stage_start_func; + sq.generic_stage_end_func = generic_stage_end_func; + sq.assets = []; + sq.uses_teleportation = 0; + sq.active_assets = []; + sq.icons = []; + sq.num_reps = 0; + level._zombie_sidequests[name] = sq; +} + +declare_sidequest_stage( sidequest_name, stage_name, init_func, logic_func, exit_func ) +{ +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt to declare a side quest stage before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to add stage " + stage_name + " to side quest " + sidequest_name + " but no such side quest exists." ); + return; + } + + if ( isdefined( level._zombie_sidequests[sidequest_name].stages[stage_name] ) ) + { + println( "*** ERROR: Sidequest " + sidequest_name + " already has a stage called " + stage_name ); + return; + } +#/ + stage = spawnstruct(); + stage.name = stage_name; + stage.stage_number = level._zombie_sidequests[sidequest_name].stages.size; + stage.assets = []; + stage.active_assets = []; + stage.logic_func = logic_func; + stage.init_func = init_func; + stage.exit_func = exit_func; + stage.completed = 0; + stage.time_limit = 0; + level._zombie_sidequests[sidequest_name].stages[stage_name] = stage; +} + +set_stage_time_limit( sidequest_name, stage_name, time_limit, timer_func ) +{ +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt to set a side quest stage time limit before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to add timelimit to stage " + stage_name + " in side quest " + sidequest_name + " but no such side quest exists." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name].stages[stage_name] ) ) + { + println( "*** ERROR: Attempt to add timelimit to stage " + stage_name + " in Sidequest " + sidequest_name + " but stage does not exist." ); + return; + } +#/ + level._zombie_sidequests[sidequest_name].stages[stage_name].time_limit = time_limit; + level._zombie_sidequests[sidequest_name].stages[stage_name].time_limit_func = timer_func; +} + +declare_stage_asset_from_struct( sidequest_name, stage_name, target_name, thread_func, trigger_thread_func ) +{ + structs = getstructarray( target_name, "targetname" ); +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt to declare a side quest asset " + target_name + " before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " but no such side quest exists." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name].stages[stage_name] ) ) + { + println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " : " + stage_name + " but no such stage exists." ); + return; + } + + if ( !structs.size ) + { + println( "*** ERROR: No Structs with " + target_name + " not found." ); + return; + } +#/ + for ( i = 0; i < structs.size; i++ ) + { + asset = spawnstruct(); + asset.type = "struct"; + asset.struct = structs[i]; + asset.thread_func = thread_func; + asset.trigger_thread_func = trigger_thread_func; + level._zombie_sidequests[sidequest_name].stages[stage_name].assets[level._zombie_sidequests[sidequest_name].stages[stage_name].assets.size] = asset; + } +} + +declare_stage_title( sidequest_name, stage_name, title ) +{ +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt to declare a stage title " + title + " before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to declare a stage title " + title + " to side quest " + sidequest_name + " but no such side quest exists." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name].stages[stage_name] ) ) + { + println( "*** ERROR: Attempt to declare stage title " + title + " to side quest " + sidequest_name + " : " + stage_name + " but no such stage exists." ); + return; + } +#/ + level._zombie_sidequests[sidequest_name].stages[stage_name].title = title; +} + +declare_stage_asset( sidequest_name, stage_name, target_name, thread_func, trigger_thread_func ) +{ + ents = getentarray( target_name, "targetname" ); +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt to declare a side quest asset " + target_name + " before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " but no such side quest exists." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name].stages[stage_name] ) ) + { + println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " : " + stage_name + " but no such stage exists." ); + return; + } + + if ( !ents.size ) + { + println( "*** ERROR: No Ents with " + target_name + " not found." ); + return; + } +#/ + for ( i = 0; i < ents.size; i++ ) + { + asset = spawnstruct(); + asset.type = "entity"; + asset.ent = ents[i]; + asset.thread_func = thread_func; + asset.trigger_thread_func = trigger_thread_func; + level._zombie_sidequests[sidequest_name].stages[stage_name].assets[level._zombie_sidequests[sidequest_name].stages[stage_name].assets.size] = asset; + } +} + +declare_sidequest_asset( sidequest_name, target_name, thread_func, trigger_thread_func ) +{ + ents = getentarray( target_name, "targetname" ); +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt to declare a side quest asset " + target_name + " before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " but no such side quest exists." ); + return; + } + + if ( !ents.size ) + { + println( "*** ERROR: No Ents with " + target_name + " not found." ); + return; + } +#/ + for ( i = 0; i < ents.size; i++ ) + { + asset = spawnstruct(); + asset.type = "entity"; + asset.ent = ents[i]; + asset.thread_func = thread_func; + asset.trigger_thread_func = trigger_thread_func; + asset.ent.thread_func = thread_func; + asset.ent.trigger_thread_func = trigger_thread_func; + level._zombie_sidequests[sidequest_name].assets[level._zombie_sidequests[sidequest_name].assets.size] = asset; + } +} + +declare_sidequest_asset_from_struct( sidequest_name, target_name, thread_func, trigger_thread_func ) +{ + structs = getstructarray( target_name, "targetname" ); +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt to declare a side quest asset " + target_name + " before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " but no such side quest exists." ); + return; + } + + if ( !structs.size ) + { + println( "*** ERROR: No Structs with " + target_name + " not found." ); + return; + } +#/ + for ( i = 0; i < structs.size; i++ ) + { + asset = spawnstruct(); + asset.type = "struct"; + asset.struct = structs[i]; + asset.thread_func = thread_func; + asset.trigger_thread_func = trigger_thread_func; + level._zombie_sidequests[sidequest_name].assets[level._zombie_sidequests[sidequest_name].assets.size] = asset; + } +} + +build_asset_from_struct( asset, parent_struct ) +{ + ent = spawn( "script_model", asset.origin ); + + if ( isdefined( asset.model ) ) + ent setmodel( asset.model ); + + if ( isdefined( asset.angles ) ) + ent.angles = asset.angles; + + ent.script_noteworthy = asset.script_noteworthy; + ent.type = "struct"; + ent.radius = asset.radius; + ent.thread_func = parent_struct.thread_func; + ent.trigger_thread_func = parent_struct.trigger_thread_func; + ent.script_vector = parent_struct.script_vector; + asset.trigger_thread_func = parent_struct.trigger_thread_func; + asset.script_vector = parent_struct.script_vector; + ent.target = asset.target; + ent.script_float = asset.script_float; + ent.script_int = asset.script_int; + ent.script_trigger_spawnflags = asset.script_trigger_spawnflags; + ent.targetname = asset.targetname; + return ent; +} + +delete_stage_assets() +{ + for ( i = 0; i < self.active_assets.size; i++ ) + { + asset = self.active_assets[i]; + + switch ( asset.type ) + { + case "struct": + if ( isdefined( asset.trigger ) ) + { +/# + println( "Deleting trigger from struct type asset." ); +#/ + asset.trigger delete(); + asset.trigger = undefined; + } + + asset delete(); + break; + case "entity": + if ( isdefined( asset.trigger ) ) + { +/# + println( "Deleting trigger from ent type asset." ); +#/ + asset.trigger delete(); + asset.trigger = undefined; + } + + break; + } + } + + remaining_assets = []; + + for ( i = 0; i < self.active_assets.size; i++ ) + { + if ( isdefined( self.active_assets[i] ) ) + remaining_assets[remaining_assets.size] = self.active_assets[i]; + } + + self.active_assets = remaining_assets; +} + +build_assets() +{ + for ( i = 0; i < self.assets.size; i++ ) + { + asset = undefined; + + switch ( self.assets[i].type ) + { + case "struct": + asset = self.assets[i].struct; + self.active_assets[self.active_assets.size] = build_asset_from_struct( asset, self.assets[i] ); + break; + case "entity": + for ( j = 0; j < self.active_assets.size; j++ ) + { + if ( self.active_assets[j] == self.assets[i].ent ) + { + asset = self.active_assets[j]; + break; + } + } + + asset = self.assets[i].ent; + asset.type = "entity"; + self.active_assets[self.active_assets.size] = asset; + break; + default: +/# + println( "*** ERROR: Don't know how to build asset of type " + self.assets.type ); +#/ + break; + } + + if ( isdefined( asset.script_noteworthy ) && ( self.assets[i].type == "entity" && !isdefined( asset.trigger ) ) || isdefined( asset.script_noteworthy ) ) + { + trigger_radius = 15; + trigger_height = 72; + + if ( isdefined( asset.radius ) ) + trigger_radius = asset.radius; + + if ( isdefined( asset.height ) ) + trigger_height = asset.height; + + trigger_spawnflags = 0; + + if ( isdefined( asset.script_trigger_spawnflags ) ) + trigger_spawnflags = asset.script_trigger_spawnflags; + + trigger_offset = ( 0, 0, 0 ); + + if ( isdefined( asset.script_vector ) ) + trigger_offset = asset.script_vector; + + switch ( asset.script_noteworthy ) + { + case "trigger_radius_use": + use_trigger = spawn( "trigger_radius_use", asset.origin + trigger_offset, trigger_spawnflags, trigger_radius, trigger_height ); + use_trigger setcursorhint( "HINT_NOICON" ); + use_trigger triggerignoreteam(); + + if ( isdefined( asset.radius ) ) + use_trigger.radius = asset.radius; + + use_trigger.owner_ent = self.active_assets[self.active_assets.size - 1]; + + if ( isdefined( asset.trigger_thread_func ) ) + use_trigger thread [[ asset.trigger_thread_func ]](); + else + use_trigger thread use_trigger_thread(); + + self.active_assets[self.active_assets.size - 1].trigger = use_trigger; + break; + case "trigger_radius_damage": + damage_trigger = spawn( "trigger_damage", asset.origin + trigger_offset, trigger_spawnflags, trigger_radius, trigger_height ); + + if ( isdefined( asset.radius ) ) + damage_trigger.radius = asset.radius; + + damage_trigger.owner_ent = self.active_assets[self.active_assets.size - 1]; + + if ( isdefined( asset.trigger_thread_func ) ) + damage_trigger thread [[ asset.trigger_thread_func ]](); + else + damage_trigger thread damage_trigger_thread(); + + self.active_assets[self.active_assets.size - 1].trigger = damage_trigger; + break; + case "trigger_radius": + radius_trigger = spawn( "trigger_radius", asset.origin + trigger_offset, trigger_spawnflags, trigger_radius, trigger_height ); + + if ( isdefined( asset.radius ) ) + radius_trigger.radius = asset.radius; + + radius_trigger.owner_ent = self.active_assets[self.active_assets.size - 1]; + + if ( isdefined( asset.trigger_thread_func ) ) + radius_trigger thread [[ asset.trigger_thread_func ]](); + else + radius_trigger thread radius_trigger_thread(); + + self.active_assets[self.active_assets.size - 1].trigger = radius_trigger; + break; + } + } + + if ( isdefined( self.assets[i].thread_func ) && !isdefined( self.active_assets[self.active_assets.size - 1].dont_rethread ) ) + self.active_assets[self.active_assets.size - 1] thread [[ self.assets[i].thread_func ]](); + + if ( i % 2 == 0 ) + wait_network_frame(); + } +} + +radius_trigger_thread() +{ + self endon( "death" ); + + while ( true ) + { + self waittill( "trigger", player ); + + if ( !isplayer( player ) ) + continue; + + self.owner_ent notify( "triggered" ); + + while ( player istouching( self ) ) + wait 0.05; + + self.owner_ent notify( "untriggered" ); + } +} + +thread_on_assets( target_name, thread_func ) +{ + for ( i = 0; i < self.active_assets.size; i++ ) + { + if ( self.active_assets[i].targetname == target_name ) + self.active_assets[i] thread [[ thread_func ]](); + } +} + +stage_logic_func_wrapper( sidequest, stage ) +{ + if ( isdefined( stage.logic_func ) ) + { + level endon( sidequest.name + "_" + stage.name + "_over" ); + stage [[ stage.logic_func ]](); + } +} + +sidequest_start( sidequest_name ) +{ +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt start a side quest asset " + sidequest_name + " before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to start " + sidequest_name + " but no such side quest exists." ); + return; + } +#/ + sidequest = level._zombie_sidequests[sidequest_name]; + sidequest build_assets(); + + if ( isdefined( sidequest.init_func ) ) + sidequest [[ sidequest.init_func ]](); + + if ( isdefined( sidequest.logic_func ) ) + sidequest thread [[ sidequest.logic_func ]](); +} + +stage_start( sidequest, stage ) +{ + if ( isstring( sidequest ) ) + sidequest = level._zombie_sidequests[sidequest]; + + if ( isstring( stage ) ) + stage = sidequest.stages[stage]; + + stage build_assets(); + sidequest.active_stage = stage.stage_number; + level notify( sidequest.name + "_" + stage.name + "_started" ); + stage.completed = 0; + + if ( isdefined( sidequest.generic_stage_start_func ) ) + stage [[ sidequest.generic_stage_start_func ]](); + + if ( isdefined( stage.init_func ) ) + stage [[ stage.init_func ]](); + + level._last_stage_started = stage.name; + level thread stage_logic_func_wrapper( sidequest, stage ); + + if ( stage.time_limit > 0 ) + stage thread time_limited_stage( sidequest ); + + if ( isdefined( stage.title ) ) + stage thread display_stage_title( sidequest.uses_teleportation ); +} + +display_stage_title( wait_for_teleport_done_notify ) +{ + if ( wait_for_teleport_done_notify ) + { + level waittill( "teleport_done" ); + + wait 2.0; + } + + stage_text = newhudelem(); + stage_text.location = 0; + stage_text.alignx = "center"; + stage_text.aligny = "middle"; + stage_text.foreground = 1; + stage_text.fontscale = 1.6; + stage_text.sort = 20; + stage_text.x = 320; + stage_text.y = 300; + stage_text.og_scale = 1; + stage_text.color = vectorscale( ( 1, 0, 0 ), 128.0 ); + stage_text.alpha = 0; + stage_text.fontstyle3d = "shadowedmore"; + stage_text settext( self.title ); + stage_text fadeovertime( 0.5 ); + stage_text.alpha = 1; + wait 5.0; + stage_text fadeovertime( 1.0 ); + stage_text.alpha = 0; + wait 1.0; + stage_text destroy(); +} + +time_limited_stage( sidequest ) +{ +/# + println( "*** Starting timer for sidequest " + sidequest.name + " stage " + self.name + " : " + self.time_limit + " seconds." ); +#/ + level endon( sidequest.name + "_" + self.name + "_over" ); + level endon( "suspend_timer" ); + level endon( "end_game" ); + time_limit = undefined; + + if ( isdefined( self.time_limit_func ) ) + time_limit = [[ self.time_limit_func ]]() * 0.25; + else + time_limit = self.time_limit * 0.25; + + wait( time_limit ); + level notify( "timed_stage_75_percent" ); + wait( time_limit ); + level notify( "timed_stage_50_percent" ); + wait( time_limit ); + level notify( "timed_stage_25_percent" ); + wait( time_limit - 10 ); + level notify( "timed_stage_10_seconds_to_go" ); + wait 10; + stage_failed( sidequest, self ); +} + +sidequest_println( str ) +{ +/# + if ( getdvar( _hash_A7AC338D ) != "1" ) + return; + + println( str ); +#/ +} + +precache_sidequest_assets() +{ + sidequest_names = getarraykeys( level._zombie_sidequests ); + + for ( i = 0; i < sidequest_names.size; i++ ) + { + sq = level._zombie_sidequests[sidequest_names[i]]; + icon_keys = getarraykeys( sq.icons ); + + for ( j = 0; j < icon_keys.size; j++ ) + precacheshader( sq.icons[icon_keys[j]] ); + + stage_names = getarraykeys( sq.stages ); + + for ( j = 0; j < stage_names.size; j++ ) + { + stage = sq.stages[stage_names[j]]; + + for ( k = 0; k < stage.assets.size; k++ ) + { + asset = stage.assets[k]; + + if ( isdefined( asset.type ) && asset.type == "struct" ) + { + if ( isdefined( asset.model ) ) + precachemodel( asset.model ); + } + } + } + } +} + +sidequest_complete( sidequest_name ) +{ +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt to call sidequest_complete for sidequest " + sidequest_name + " before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to call sidequest_complete for sidequest " + sidequest_name + " but no such side quest exists." ); + return; + } +#/ + return level._zombie_sidequests[sidequest_name].sidequest_complete; +} + +stage_completed( sidequest_name, stage_name ) +{ +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt to call stage_complete for sidequest " + sidequest_name + " before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to call stage_complete for sidequest " + sidequest_name + " but no such side quest exists." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name].stages[stage_name] ) ) + { + println( "*** ERROR: Attempt to call stage_complete in sq " + sidequest_name + " : " + stage_name + " but no such stage exists." ); + return; + } + + println( "*** stage completed called." ); +#/ + sidequest = level._zombie_sidequests[sidequest_name]; + stage = sidequest.stages[stage_name]; + level thread stage_completed_internal( sidequest, stage ); +} + +stage_completed_internal( sidequest, stage ) +{ + level notify( sidequest.name + "_" + stage.name + "_over" ); + level notify( sidequest.name + "_" + stage.name + "_completed" ); + + if ( isdefined( sidequest.generic_stage_end_func ) ) + { +/# + println( "Calling generic end func." ); +#/ + stage [[ sidequest.generic_stage_end_func ]](); + } + + if ( isdefined( stage.exit_func ) ) + { +/# + println( "Calling stage end func." ); +#/ + stage [[ stage.exit_func ]]( 1 ); + } + + stage.completed = 1; + sidequest.last_completed_stage = sidequest.active_stage; + sidequest.active_stage = -1; + stage delete_stage_assets(); + all_complete = 1; + stage_names = getarraykeys( sidequest.stages ); + + for ( i = 0; i < stage_names.size; i++ ) + { + if ( sidequest.stages[stage_names[i]].completed == 0 ) + { + all_complete = 0; + break; + } + } + + if ( all_complete == 1 ) + { + if ( isdefined( sidequest.complete_func ) ) + sidequest thread [[ sidequest.complete_func ]](); + + level notify( "sidequest_" + sidequest.name + "_complete" ); + sidequest.sidequest_completed = 1; + } +} + +stage_failed_internal( sidequest, stage ) +{ + level notify( sidequest.name + "_" + stage.name + "_over" ); + level notify( sidequest.name + "_" + stage.name + "_failed" ); + + if ( isdefined( sidequest.generic_stage_end_func ) ) + stage [[ sidequest.generic_stage_end_func ]](); + + if ( isdefined( stage.exit_func ) ) + stage [[ stage.exit_func ]]( 0 ); + + sidequest.active_stage = -1; + stage delete_stage_assets(); +} + +stage_failed( sidequest, stage ) +{ +/# + println( "*** Stage failed called." ); +#/ + if ( isstring( sidequest ) ) + sidequest = level._zombie_sidequests[sidequest]; + + if ( isstring( stage ) ) + stage = sidequest.stages[stage]; + + level thread stage_failed_internal( sidequest, stage ); +} + +get_sidequest_stage( sidequest, stage_number ) +{ + stage = undefined; + stage_names = getarraykeys( sidequest.stages ); + + for ( i = 0; i < stage_names.size; i++ ) + { + if ( sidequest.stages[stage_names[i]].stage_number == stage_number ) + { + stage = sidequest.stages[stage_names[i]]; + break; + } + } + + return stage; +} + +get_damage_trigger( radius, origin, damage_types ) +{ + trig = spawn( "trigger_damage", origin, 0, radius, 72 ); + trig thread dam_trigger_thread( damage_types ); + return trig; +} + +dam_trigger_thread( damage_types ) +{ + self endon( "death" ); + damage_type = "NONE"; + + while ( true ) + { + self waittill( "damage", amount, attacker, dir, point, mod ); + + for ( i = 0; i < damage_types.size; i++ ) + { + if ( mod == damage_types[i] ) + self notify( "triggered" ); + } + } +} + +use_trigger_thread() +{ + self endon( "death" ); + + while ( true ) + { + self waittill( "trigger", player ); + + self.owner_ent notify( "triggered", player ); + wait 0.1; + } +} + +sidequest_stage_active( sidequest_name, stage_name ) +{ + sidequest = level._zombie_sidequests[sidequest_name]; + stage = sidequest.stages[stage_name]; + + if ( sidequest.active_stage == stage.stage_number ) + return true; + else + return false; +} + +sidequest_start_next_stage( sidequest_name ) +{ +/# + if ( !isdefined( level._zombie_sidequests ) ) + { + println( "*** ERROR: Attempt start next stage in side quest asset " + sidequest_name + " before sidequests declared." ); + return; + } + + if ( !isdefined( level._zombie_sidequests[sidequest_name] ) ) + { + println( "*** ERROR: Attempt to start next sidequest in sidequest " + sidequest_name + " but no such side quest exists." ); + return; + } +#/ + sidequest = level._zombie_sidequests[sidequest_name]; + + if ( sidequest.sidequest_complete == 1 ) + return; + + last_completed = sidequest.last_completed_stage; + + if ( last_completed == -1 ) + last_completed = 0; + else + last_completed++; + + stage = get_sidequest_stage( sidequest, last_completed ); + + if ( !isdefined( stage ) ) + { +/# + println( "*** ERROR: Sidequest " + sidequest_name + " has no stage number " + last_completed ); +#/ + return; + } + + stage_start( sidequest, stage ); + return stage; +} + +main() +{ + +} + +is_facing( facee ) +{ + orientation = self getplayerangles(); + forwardvec = anglestoforward( orientation ); + forwardvec2d = ( forwardvec[0], forwardvec[1], 0 ); + unitforwardvec2d = vectornormalize( forwardvec2d ); + tofaceevec = facee.origin - self.origin; + tofaceevec2d = ( tofaceevec[0], tofaceevec[1], 0 ); + unittofaceevec2d = vectornormalize( tofaceevec2d ); + dotproduct = vectordot( unitforwardvec2d, unittofaceevec2d ); + return dotproduct > 0.9; +} + +fake_use( notify_string, qualifier_func ) +{ + waittillframeend; + + while ( true ) + { + if ( !isdefined( self ) ) + return; +/# + print3d( self.origin, "+", vectorscale( ( 0, 1, 0 ), 255.0 ), 1 ); +#/ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + qualifier_passed = 1; + + if ( isdefined( qualifier_func ) ) + qualifier_passed = players[i] [[ qualifier_func ]](); + + if ( qualifier_passed && distancesquared( self.origin, players[i].origin ) < 4096 ) + { + if ( players[i] is_facing( self ) ) + { + if ( players[i] usebuttonpressed() ) + { + self notify( notify_string, players[i] ); + return; + } + } + } + } + + wait 0.1; + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_spawner.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_spawner.gsc new file mode 100644 index 0000000..1b354a0 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_spawner.gsc @@ -0,0 +1,3069 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_blockers; +#include maps\mp\animscripts\zm_death; +#include maps\mp\animscripts\zm_run; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_pers_upgrades; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_ai_faller; + +init() +{ + level._contextual_grab_lerp_time = 0.3; + level.zombie_spawners = getentarray( "zombie_spawner", "script_noteworthy" ); + + if ( isdefined( level.use_multiple_spawns ) && level.use_multiple_spawns ) + { + level.zombie_spawn = []; + + for ( i = 0; i < level.zombie_spawners.size; i++ ) + { + if ( isdefined( level.zombie_spawners[i].script_int ) ) + { + int = level.zombie_spawners[i].script_int; + + if ( !isdefined( level.zombie_spawn[int] ) ) + level.zombie_spawn[int] = []; + + level.zombie_spawn[int][level.zombie_spawn[int].size] = level.zombie_spawners[i]; + } + } + } + + precachemodel( "p6_anim_zm_barricade_board_01_upgrade" ); + precachemodel( "p6_anim_zm_barricade_board_02_upgrade" ); + precachemodel( "p6_anim_zm_barricade_board_03_upgrade" ); + precachemodel( "p6_anim_zm_barricade_board_04_upgrade" ); + precachemodel( "p6_anim_zm_barricade_board_05_upgrade" ); + precachemodel( "p6_anim_zm_barricade_board_06_upgrade" ); + + if ( isdefined( level.ignore_spawner_func ) ) + { + for ( i = 0; i < level.zombie_spawners.size; i++ ) + { + ignore = [[ level.ignore_spawner_func ]]( level.zombie_spawners[i] ); + + if ( ignore ) + arrayremovevalue( level.zombie_spawners, level.zombie_spawners[i] ); + } + } + + gametype = getdvar( "ui_gametype" ); + + if ( !isdefined( level.attack_player_thru_boards_range ) ) + level.attack_player_thru_boards_range = 109.8; + + if ( isdefined( level._game_module_custom_spawn_init_func ) ) + [[ level._game_module_custom_spawn_init_func ]](); + + registerclientfield( "actor", "zombie_has_eyes", 1, 1, "int" ); + registerclientfield( "actor", "zombie_ragdoll_explode", 1, 1, "int" ); + registerclientfield( "actor", "zombie_gut_explosion", 9000, 1, "int" ); +} + +add_cusom_zombie_spawn_logic( func ) +{ + if ( !isdefined( level._zombie_custom_spawn_logic ) ) + level._zombie_custom_spawn_logic = []; + + level._zombie_custom_spawn_logic[level._zombie_custom_spawn_logic.size] = func; +} + +player_attacks_enemy( player, amount, type, point ) +{ + team = undefined; + + if ( isdefined( self._race_team ) ) + team = self._race_team; + + if ( !isads( player ) ) + { + [[ level.global_damage_func ]]( type, self.damagelocation, point, player, amount, team ); + return false; + } + + if ( !bullet_attack( type ) ) + { + [[ level.global_damage_func ]]( type, self.damagelocation, point, player, amount, team ); + return false; + } + + [[ level.global_damage_func_ads ]]( type, self.damagelocation, point, player, amount, team ); + return true; +} + +player_attacker( attacker ) +{ + if ( isplayer( attacker ) ) + return true; + + return false; +} + +enemy_death_detection() +{ + self endon( "death" ); + + for (;;) + { + self waittill( "damage", amount, attacker, direction_vec, point, type ); + + if ( !isdefined( amount ) ) + continue; + + if ( !isalive( self ) || self.delayeddeath ) + return; + + if ( !player_attacker( attacker ) ) + continue; + + self.has_been_damaged_by_player = 1; + self player_attacks_enemy( attacker, amount, type, point ); + } +} + +is_spawner_targeted_by_blocker( ent ) +{ + if ( isdefined( ent.targetname ) ) + { + targeters = getentarray( ent.targetname, "target" ); + + for ( i = 0; i < targeters.size; i++ ) + { + if ( targeters[i].targetname == "zombie_door" || targeters[i].targetname == "zombie_debris" ) + return true; + + result = is_spawner_targeted_by_blocker( targeters[i] ); + + if ( result ) + return true; + } + } + + return false; +} + +add_custom_zombie_spawn_logic( func ) +{ + if ( !isdefined( level._zombie_custom_spawn_logic ) ) + level._zombie_custom_spawn_logic = []; + + level._zombie_custom_spawn_logic[level._zombie_custom_spawn_logic.size] = func; +} + +zombie_spawn_init( animname_set = 0 ) +{ + self.targetname = "zombie"; + self.script_noteworthy = undefined; + recalc_zombie_array(); + + if ( !animname_set ) + self.animname = "zombie"; + + if ( isdefined( get_gamemode_var( "pre_init_zombie_spawn_func" ) ) ) + self [[ get_gamemode_var( "pre_init_zombie_spawn_func" ) ]](); + + self thread play_ambient_zombie_vocals(); + self.zmb_vocals_attack = "zmb_vocals_zombie_attack"; + self.ignoreall = 1; + self.ignoreme = 1; + self.allowdeath = 1; + self.force_gib = 1; + self.is_zombie = 1; + self.has_legs = 1; + self allowedstances( "stand" ); + self.zombie_damaged_by_bar_knockdown = 0; + self.gibbed = 0; + self.head_gibbed = 0; + self setphysparams( 15, 0, 72 ); + self.disablearrivals = 1; + self.disableexits = 1; + self.grenadeawareness = 0; + self.badplaceawareness = 0; + self.ignoresuppression = 1; + self.suppressionthreshold = 1; + self.nododgemove = 1; + self.dontshootwhilemoving = 1; + self.pathenemylookahead = 0; + self.badplaceawareness = 0; + self.chatinitialized = 0; + self.a.disablepain = 1; + self disable_react(); + + if ( isdefined( level.zombie_health ) ) + { + self.maxhealth = level.zombie_health; + + if ( isdefined( level.zombie_respawned_health ) && level.zombie_respawned_health.size > 0 ) + { + self.health = level.zombie_respawned_health[0]; + arrayremovevalue( level.zombie_respawned_health, level.zombie_respawned_health[0] ); + } + else + self.health = level.zombie_health; + } + else + { + self.maxhealth = level.zombie_vars["zombie_health_start"]; + self.health = self.maxhealth; + } + + self.freezegun_damage = 0; + self.dropweapon = 0; + level thread zombie_death_event( self ); + self init_zombie_run_cycle(); + self thread zombie_think(); + self thread zombie_gib_on_damage(); + self thread zombie_damage_failsafe(); + self thread enemy_death_detection(); + + if ( isdefined( level._zombie_custom_spawn_logic ) ) + { + if ( isarray( level._zombie_custom_spawn_logic ) ) + { + for ( i = 0; i < level._zombie_custom_spawn_logic.size; i++ ) + self thread [[ level._zombie_custom_spawn_logic[i] ]](); + } + else + self thread [[ level._zombie_custom_spawn_logic ]](); + } + + if ( !isdefined( self.no_eye_glow ) || !self.no_eye_glow ) + { + if ( !( isdefined( self.is_inert ) && self.is_inert ) ) + self thread delayed_zombie_eye_glow(); + } + + self.deathfunction = ::zombie_death_animscript; + self.flame_damage_time = 0; + self.meleedamage = 60; + self.no_powerups = 1; + self zombie_history( "zombie_spawn_init -> Spawned = " + self.origin ); + self.thundergun_knockdown_func = level.basic_zombie_thundergun_knockdown; + self.tesla_head_gib_func = ::zombie_tesla_head_gib; + self.team = level.zombie_team; + + if ( isdefined( level.achievement_monitor_func ) ) + self [[ level.achievement_monitor_func ]](); + + if ( isdefined( get_gamemode_var( "post_init_zombie_spawn_func" ) ) ) + self [[ get_gamemode_var( "post_init_zombie_spawn_func" ) ]](); + + if ( isdefined( level.zombie_init_done ) ) + self [[ level.zombie_init_done ]](); + + self.zombie_init_done = 1; + self notify( "zombie_init_done" ); +} + +delayed_zombie_eye_glow() +{ + self endon( "zombie_delete" ); + + if ( isdefined( self.in_the_ground ) && self.in_the_ground || isdefined( self.in_the_ceiling ) && self.in_the_ceiling ) + { + while ( !isdefined( self.create_eyes ) ) + wait 0.1; + } + else + wait 0.5; + + self zombie_eye_glow(); +} + +zombie_damage_failsafe() +{ + self endon( "death" ); + continue_failsafe_damage = 0; + + while ( true ) + { + wait 0.5; + + if ( !isdefined( self.enemy ) || !isplayer( self.enemy ) ) + continue; + + if ( self istouching( self.enemy ) ) + { + old_org = self.origin; + + if ( !continue_failsafe_damage ) + wait 5; + + if ( !isdefined( self.enemy ) || !isplayer( self.enemy ) || self.enemy hasperk( "specialty_armorvest" ) ) + continue; + + if ( self istouching( self.enemy ) && !self.enemy maps\mp\zombies\_zm_laststand::player_is_in_laststand() && isalive( self.enemy ) ) + { + if ( distancesquared( old_org, self.origin ) < 3600 ) + { + self.enemy dodamage( self.enemy.health + 1000, self.enemy.origin, self, self, "none", "MOD_RIFLE_BULLET" ); + continue_failsafe_damage = 1; + } + } + } + else + continue_failsafe_damage = 0; + } +} + +should_skip_teardown( find_flesh_struct_string ) +{ + if ( isdefined( find_flesh_struct_string ) && find_flesh_struct_string == "find_flesh" ) + return true; + + if ( isdefined( self.script_string ) && self.script_string == "zombie_chaser" ) + return true; + + return false; +} + +zombie_think() +{ + self endon( "death" ); + assert( !self.isdog ); + self.ai_state = "zombie_think"; + find_flesh_struct_string = undefined; + + if ( isdefined( level.zombie_custom_think_logic ) ) + { + shouldwait = self [[ level.zombie_custom_think_logic ]](); + + if ( shouldwait ) + self waittill( "zombie_custom_think_done", find_flesh_struct_string ); + } + else if ( isdefined( self.start_inert ) && self.start_inert ) + find_flesh_struct_string = "find_flesh"; + else + { + if ( isdefined( self.custom_location ) ) + self thread [[ self.custom_location ]](); + else + self thread do_zombie_spawn(); + + self waittill( "risen", find_flesh_struct_string ); + } + + node = undefined; + desired_nodes = []; + self.entrance_nodes = []; + + if ( isdefined( level.max_barrier_search_dist_override ) ) + max_dist = level.max_barrier_search_dist_override; + else + max_dist = 500; + + if ( !isdefined( find_flesh_struct_string ) && isdefined( self.target ) && self.target != "" ) + { + desired_origin = get_desired_origin(); + assert( isdefined( desired_origin ), "Spawner @ " + self.origin + " has a .target but did not find a target" ); + origin = desired_origin; + node = getclosest( origin, level.exterior_goals ); + self.entrance_nodes[self.entrance_nodes.size] = node; + self zombie_history( "zombie_think -> #1 entrance (script_forcegoal) origin = " + self.entrance_nodes[0].origin ); + } + else if ( self should_skip_teardown( find_flesh_struct_string ) ) + { + self zombie_setup_attack_properties(); + + if ( isdefined( self.target ) ) + { + end_at_node = getnode( self.target, "targetname" ); + + if ( isdefined( end_at_node ) ) + { + self setgoalnode( end_at_node ); + + self waittill( "goal" ); + } + } + + if ( isdefined( self.start_inert ) && self.start_inert ) + { + self thread maps\mp\zombies\_zm_ai_basic::start_inert( 1 ); + self zombie_complete_emerging_into_playable_area(); + } + else + { + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); + self thread zombie_entered_playable(); + } + + return; + } + else if ( isdefined( find_flesh_struct_string ) ) + { + assert( isdefined( find_flesh_struct_string ) ); + + for ( i = 0; i < level.exterior_goals.size; i++ ) + { + if ( isdefined( level.exterior_goals[i].script_string ) && level.exterior_goals[i].script_string == find_flesh_struct_string ) + { + node = level.exterior_goals[i]; + break; + } + } + + self.entrance_nodes[self.entrance_nodes.size] = node; + self zombie_history( "zombie_think -> #1 entrance origin = " + node.origin ); + self thread zombie_assure_node(); + } + else + { + origin = self.origin; + desired_origin = get_desired_origin(); + + if ( isdefined( desired_origin ) ) + origin = desired_origin; + + nodes = get_array_of_closest( origin, level.exterior_goals, undefined, 3 ); + desired_nodes[0] = nodes[0]; + prev_dist = distance( self.origin, nodes[0].origin ); + + for ( i = 1; i < nodes.size; i++ ) + { + dist = distance( self.origin, nodes[i].origin ); + + if ( dist - prev_dist > max_dist ) + break; + + prev_dist = dist; + desired_nodes[i] = nodes[i]; + } + + node = desired_nodes[0]; + + if ( desired_nodes.size > 1 ) + node = desired_nodes[randomint( desired_nodes.size )]; + + self.entrance_nodes = desired_nodes; + self zombie_history( "zombie_think -> #1 entrance origin = " + node.origin ); + self thread zombie_assure_node(); + } + + assert( isdefined( node ), "Did not find a node!!! [Should not see this!]" ); + level thread draw_line_ent_to_pos( self, node.origin, "goal" ); + self.first_node = node; + self thread zombie_goto_entrance( node ); +} + +zombie_entered_playable() +{ + self endon( "death" ); + + if ( !isdefined( level.playable_areas ) ) + level.playable_areas = getentarray( "player_volume", "script_noteworthy" ); + + while ( true ) + { + foreach ( area in level.playable_areas ) + { + if ( self istouching( area ) ) + { + self zombie_complete_emerging_into_playable_area(); + return; + } + } + + wait 1; + } +} + +get_desired_origin() +{ + if ( isdefined( self.target ) ) + { + ent = getent( self.target, "targetname" ); + + if ( !isdefined( ent ) ) + ent = getstruct( self.target, "targetname" ); + + if ( !isdefined( ent ) ) + ent = getnode( self.target, "targetname" ); + + assert( isdefined( ent ), "Cannot find the targeted ent/node/struct, \"" + self.target + "\" at " + self.origin ); + return ent.origin; + } + + return undefined; +} + +zombie_goto_entrance( node, endon_bad_path ) +{ + assert( !self.isdog ); + self endon( "death" ); + self endon( "stop_zombie_goto_entrance" ); + level endon( "intermission" ); + self.ai_state = "zombie_goto_entrance"; + + if ( isdefined( endon_bad_path ) && endon_bad_path ) + self endon( "bad_path" ); + + self zombie_history( "zombie_goto_entrance -> start goto entrance " + node.origin ); + self.got_to_entrance = 0; + self.goalradius = 128; + self setgoalpos( node.origin ); + + self waittill( "goal" ); + + self.got_to_entrance = 1; + self zombie_history( "zombie_goto_entrance -> reached goto entrance " + node.origin ); + self tear_into_building(); + + if ( isdefined( level.pre_aggro_pathfinding_func ) ) + self [[ level.pre_aggro_pathfinding_func ]](); + + barrier_pos = []; + barrier_pos[0] = "m"; + barrier_pos[1] = "r"; + barrier_pos[2] = "l"; + self.barricade_enter = 1; + animstate = maps\mp\animscripts\zm_utility::append_missing_legs_suffix( "zm_barricade_enter" ); + substate = "barrier_" + self.zombie_move_speed + "_" + barrier_pos[self.attacking_spot_index]; + self animscripted( self.first_node.zbarrier.origin, self.first_node.zbarrier.angles, animstate, substate ); + maps\mp\animscripts\zm_shared::donotetracks( "barricade_enter_anim" ); + self zombie_setup_attack_properties(); + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); + self.pathenemyfightdist = 4; + self zombie_complete_emerging_into_playable_area(); + self.pathenemyfightdist = 64; + self.barricade_enter = 0; +} + +zombie_assure_node() +{ + self endon( "death" ); + self endon( "goal" ); + level endon( "intermission" ); + start_pos = self.origin; + + if ( isdefined( self.entrance_nodes ) ) + { + for ( i = 0; i < self.entrance_nodes.size; i++ ) + { + if ( self zombie_bad_path() ) + { + self zombie_history( "zombie_assure_node -> assigned assured node = " + self.entrance_nodes[i].origin ); +/# + println( "^1Zombie @ " + self.origin + " did not move for 1 second. Going to next closest node @ " + self.entrance_nodes[i].origin ); +#/ + level thread draw_line_ent_to_pos( self, self.entrance_nodes[i].origin, "goal" ); + self.first_node = self.entrance_nodes[i]; + self setgoalpos( self.entrance_nodes[i].origin ); + continue; + } + + return; + } + } + + wait 2; + nodes = get_array_of_closest( self.origin, level.exterior_goals, undefined, 20 ); + + if ( isdefined( nodes ) ) + { + self.entrance_nodes = nodes; + + for ( i = 0; i < self.entrance_nodes.size; i++ ) + { + if ( self zombie_bad_path() ) + { + self zombie_history( "zombie_assure_node -> assigned assured node = " + self.entrance_nodes[i].origin ); +/# + println( "^1Zombie @ " + self.origin + " did not move for 1 second. Going to next closest node @ " + self.entrance_nodes[i].origin ); +#/ + level thread draw_line_ent_to_pos( self, self.entrance_nodes[i].origin, "goal" ); + self.first_node = self.entrance_nodes[i]; + self setgoalpos( self.entrance_nodes[i].origin ); + continue; + } + + return; + } + } + + self zombie_history( "zombie_assure_node -> failed to find a good entrance point" ); + wait 20; + self dodamage( self.health + 10, self.origin ); + level.zombies_timeout_spawn++; +} + +zombie_bad_path() +{ + self endon( "death" ); + self endon( "goal" ); + self thread zombie_bad_path_notify(); + self thread zombie_bad_path_timeout(); + self.zombie_bad_path = undefined; + + while ( !isdefined( self.zombie_bad_path ) ) + wait 0.05; + + self notify( "stop_zombie_bad_path" ); + return self.zombie_bad_path; +} + +zombie_bad_path_notify() +{ + self endon( "death" ); + self endon( "stop_zombie_bad_path" ); + + self waittill( "bad_path" ); + + self.zombie_bad_path = 1; +} + +zombie_bad_path_timeout() +{ + self endon( "death" ); + self endon( "stop_zombie_bad_path" ); + wait 2; + self.zombie_bad_path = 0; +} + +tear_into_building() +{ + self endon( "death" ); + self endon( "teleporting" ); + self zombie_history( "tear_into_building -> start" ); + + while ( true ) + { + if ( isdefined( self.first_node.script_noteworthy ) ) + { + if ( self.first_node.script_noteworthy == "no_blocker" ) + return; + } + + if ( !isdefined( self.first_node.target ) ) + return; + + if ( all_chunks_destroyed( self.first_node, self.first_node.barrier_chunks ) ) + self zombie_history( "tear_into_building -> all chunks destroyed" ); + + if ( !get_attack_spot( self.first_node ) ) + { + self zombie_history( "tear_into_building -> Could not find an attack spot" ); + self thread do_a_taunt(); + wait 0.5; + continue; + } + + self.goalradius = 2; + + if ( isdefined( level.tear_into_position ) ) + self [[ level.tear_into_position ]](); + else + { + angles = self.first_node.zbarrier.angles; + self setgoalpos( self.attacking_spot, angles ); + } + + self waittill( "goal" ); + + if ( isdefined( level.tear_into_wait ) ) + self [[ level.tear_into_wait ]](); + else + self waittill_notify_or_timeout( "orientdone", 1 ); + + self zombie_history( "tear_into_building -> Reach position and orientated" ); + + if ( all_chunks_destroyed( self.first_node, self.first_node.barrier_chunks ) ) + { + self zombie_history( "tear_into_building -> all chunks destroyed" ); + + for ( i = 0; i < self.first_node.attack_spots_taken.size; i++ ) + self.first_node.attack_spots_taken[i] = 0; + + return; + } + + while ( true ) + { + if ( isdefined( self.zombie_board_tear_down_callback ) ) + self [[ self.zombie_board_tear_down_callback ]](); + + chunk = get_closest_non_destroyed_chunk( self.origin, self.first_node, self.first_node.barrier_chunks ); + + if ( !isdefined( chunk ) ) + { + if ( !all_chunks_destroyed( self.first_node, self.first_node.barrier_chunks ) ) + { + attack = self should_attack_player_thru_boards(); + + if ( isdefined( attack ) && !attack && self.has_legs ) + self do_a_taunt(); + else + wait 0.1; + + continue; + } + + for ( i = 0; i < self.first_node.attack_spots_taken.size; i++ ) + self.first_node.attack_spots_taken[i] = 0; + + return; + } + + self zombie_history( "tear_into_building -> animating" ); + self.first_node.zbarrier setzbarrierpiecestate( chunk, "targetted_by_zombie" ); + self.first_node thread check_zbarrier_piece_for_zombie_inert( chunk, self.first_node.zbarrier, self ); + self.first_node thread check_zbarrier_piece_for_zombie_death( chunk, self.first_node.zbarrier, self ); + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "teardown", self.animname ); + + if ( isdefined( level.zbarrier_override_tear_in ) ) + animstatebase = self [[ level.zbarrier_override_tear_in ]]( chunk ); + else + animstatebase = self.first_node.zbarrier getzbarrierpieceanimstate( chunk ); + + animsubstate = "spot_" + self.attacking_spot_index + "_piece_" + self.first_node.zbarrier getzbarrierpieceanimsubstate( chunk ); + anim_sub_index = self getanimsubstatefromasd( animstatebase + "_in", animsubstate ); + self animscripted( self.first_node.zbarrier.origin, self.first_node.zbarrier.angles, maps\mp\animscripts\zm_utility::append_missing_legs_suffix( animstatebase + "_in" ), anim_sub_index ); + self zombie_tear_notetracks( "tear_anim", chunk, self.first_node ); + + while ( 0 < self.first_node.zbarrier.chunk_health[chunk] ) + { + self animscripted( self.first_node.zbarrier.origin, self.first_node.zbarrier.angles, maps\mp\animscripts\zm_utility::append_missing_legs_suffix( animstatebase + "_loop" ), anim_sub_index ); + self zombie_tear_notetracks( "tear_anim", chunk, self.first_node ); + self.first_node.zbarrier.chunk_health[chunk]--; + } + + self animscripted( self.first_node.zbarrier.origin, self.first_node.zbarrier.angles, maps\mp\animscripts\zm_utility::append_missing_legs_suffix( animstatebase + "_out" ), anim_sub_index ); + self zombie_tear_notetracks( "tear_anim", chunk, self.first_node ); + self.lastchunk_destroy_time = gettime(); + attack = self should_attack_player_thru_boards(); + + if ( isdefined( attack ) && !attack && self.has_legs ) + self do_a_taunt(); + + if ( all_chunks_destroyed( self.first_node, self.first_node.barrier_chunks ) ) + { + for ( i = 0; i < self.first_node.attack_spots_taken.size; i++ ) + self.first_node.attack_spots_taken[i] = 0; + + level notify( "last_board_torn", self.first_node.zbarrier.origin ); + return; + } + } + + self reset_attack_spot(); + } +} + +do_a_taunt() +{ + self endon( "death" ); + + if ( !self.has_legs ) + return 0; + + if ( !self.first_node.zbarrier zbarriersupportszombietaunts() ) + return; + + self.old_origin = self.origin; + + if ( getdvar( _hash_6896A7C3 ) == "" ) + setdvar( "zombie_taunt_freq", "5" ); + + freq = getdvarint( _hash_6896A7C3 ); + + if ( freq >= randomint( 100 ) ) + { + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "taunt", self.animname ); + tauntstate = "zm_taunt"; + + if ( isdefined( self.first_node.zbarrier ) && self.first_node.zbarrier getzbarriertauntanimstate() != "" ) + tauntstate = self.first_node.zbarrier getzbarriertauntanimstate(); + + self animscripted( self.origin, self.angles, tauntstate ); + self taunt_notetracks( "taunt_anim" ); + } +} + +taunt_notetracks( msg ) +{ + self endon( "death" ); + + while ( true ) + { + self waittill( msg, notetrack ); + + if ( notetrack == "end" ) + { + self forceteleport( self.old_origin ); + return; + } + } +} + +should_attack_player_thru_boards() +{ + if ( !self.has_legs ) + return false; + + if ( isdefined( self.first_node.zbarrier ) ) + { + if ( !self.first_node.zbarrier zbarriersupportszombiereachthroughattacks() ) + return false; + } + + if ( getdvar( _hash_4A4203B1 ) == "" ) + setdvar( "zombie_reachin_freq", "50" ); + + freq = getdvarint( _hash_4A4203B1 ); + players = get_players(); + attack = 0; + self.player_targets = []; + + for ( i = 0; i < players.size; i++ ) + { + if ( isalive( players[i] ) && !isdefined( players[i].revivetrigger ) && distance2d( self.origin, players[i].origin ) <= level.attack_player_thru_boards_range && !( isdefined( players[i].zombie_vars["zombie_powerup_zombie_blood_on"] ) && players[i].zombie_vars["zombie_powerup_zombie_blood_on"] ) ) + { + self.player_targets[self.player_targets.size] = players[i]; + attack = 1; + } + } + + if ( !attack || freq < randomint( 100 ) ) + return false; + + self.old_origin = self.origin; + attackanimstate = "zm_window_melee"; + + if ( isdefined( self.first_node.zbarrier ) && self.first_node.zbarrier getzbarrierreachthroughattackanimstate() != "" ) + attackanimstate = self.first_node.zbarrier getzbarrierreachthroughattackanimstate(); + + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "attack", self.animname ); + self animscripted( self.origin, self.angles, attackanimstate, self.attacking_spot_index - 1 ); + self window_notetracks( "window_melee_anim" ); + return true; +} + +window_notetracks( msg ) +{ + self endon( "death" ); + + while ( true ) + { + self waittill( msg, notetrack ); + + if ( notetrack == "end" ) + { + self teleport( self.old_origin ); + return; + } + + if ( notetrack == "fire" ) + { + if ( self.ignoreall ) + self.ignoreall = 0; + + if ( isdefined( self.first_node ) ) + { + _melee_dist_sq = 8100; + + if ( isdefined( level.attack_player_thru_boards_range ) ) + _melee_dist_sq = level.attack_player_thru_boards_range * level.attack_player_thru_boards_range; + + _trigger_dist_sq = 2601; + + for ( i = 0; i < self.player_targets.size; i++ ) + { + playerdistsq = distance2dsquared( self.player_targets[i].origin, self.origin ); + heightdiff = abs( self.player_targets[i].origin[2] - self.origin[2] ); + + if ( playerdistsq < _melee_dist_sq && heightdiff * heightdiff < _melee_dist_sq ) + { + triggerdistsq = distance2dsquared( self.player_targets[i].origin, self.first_node.trigger_location.origin ); + heightdiff = abs( self.player_targets[i].origin[2] - self.first_node.trigger_location.origin[2] ); + + if ( triggerdistsq < _trigger_dist_sq && heightdiff * heightdiff < _trigger_dist_sq ) + { + self.player_targets[i] dodamage( self.meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); + break; + } + } + } + } + else + self melee(); + } + } +} + +reset_attack_spot() +{ + if ( isdefined( self.attacking_node ) ) + { + node = self.attacking_node; + index = self.attacking_spot_index; + node.attack_spots_taken[index] = 0; + self.attacking_node = undefined; + self.attacking_spot_index = undefined; + } +} + +get_attack_spot( node ) +{ + index = get_attack_spot_index( node ); + + if ( !isdefined( index ) ) + return false; + + self.attacking_node = node; + self.attacking_spot_index = index; + node.attack_spots_taken[index] = 1; + self.attacking_spot = node.attack_spots[index]; + return true; +} + +get_attack_spot_index( node ) +{ + indexes = []; + + for ( i = 0; i < node.attack_spots.size; i++ ) + { + if ( !node.attack_spots_taken[i] ) + indexes[indexes.size] = i; + } + + if ( indexes.size == 0 ) + return undefined; + + return indexes[randomint( indexes.size )]; +} + +zombie_tear_notetracks( msg, chunk, node ) +{ + self endon( "death" ); + + while ( true ) + { + self waittill( msg, notetrack ); + + if ( notetrack == "end" ) + return; + + if ( notetrack == "board" || notetrack == "destroy_piece" || notetrack == "bar" ) + { + if ( isdefined( level.zbarrier_zombie_tear_notetrack_override ) ) + self thread [[ level.zbarrier_zombie_tear_notetrack_override ]]( node, chunk ); + + node.zbarrier setzbarrierpiecestate( chunk, "opening" ); + } + } +} + +zombie_boardtear_offset_fx_horizontle( chunk, node ) +{ + if ( isdefined( chunk.script_parameters ) && ( chunk.script_parameters == "repair_board" || chunk.script_parameters == "board" ) ) + { + if ( isdefined( chunk.unbroken ) && chunk.unbroken == 1 ) + { + if ( isdefined( chunk.material ) && chunk.material == "glass" ) + { + playfx( level._effect["glass_break"], chunk.origin, node.angles ); + chunk.unbroken = 0; + } + else if ( isdefined( chunk.material ) && chunk.material == "metal" ) + { + playfx( level._effect["fx_zombie_bar_break"], chunk.origin ); + chunk.unbroken = 0; + } + else if ( isdefined( chunk.material ) && chunk.material == "rock" ) + { + if ( isdefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) + chunk setclientflag( level._zombie_scriptmover_flag_rock_fx ); + else + playfx( level._effect["wall_break"], chunk.origin ); + + chunk.unbroken = 0; + } + } + } + + if ( isdefined( chunk.script_parameters ) && chunk.script_parameters == "barricade_vents" ) + { + if ( isdefined( level.use_clientside_board_fx ) && level.use_clientside_board_fx ) + chunk setclientflag( level._zombie_scriptmover_flag_board_horizontal_fx ); + else + playfx( level._effect["fx_zombie_bar_break"], chunk.origin ); + } + else if ( isdefined( chunk.material ) && chunk.material == "rock" ) + { + if ( isdefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) + chunk setclientflag( level._zombie_scriptmover_flag_rock_fx ); + } + else if ( isdefined( level.use_clientside_board_fx ) ) + chunk setclientflag( level._zombie_scriptmover_flag_board_horizontal_fx ); + else + { + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( 0, 0, 1 ), 30.0 ) ); + wait( randomfloatrange( 0.2, 0.4 ) ); + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( 0, 0, -1 ), 30.0 ) ); + } +} + +zombie_boardtear_offset_fx_verticle( chunk, node ) +{ + if ( isdefined( chunk.script_parameters ) && ( chunk.script_parameters == "repair_board" || chunk.script_parameters == "board" ) ) + { + if ( isdefined( chunk.unbroken ) && chunk.unbroken == 1 ) + { + if ( isdefined( chunk.material ) && chunk.material == "glass" ) + { + playfx( level._effect["glass_break"], chunk.origin, node.angles ); + chunk.unbroken = 0; + } + else if ( isdefined( chunk.material ) && chunk.material == "metal" ) + { + playfx( level._effect["fx_zombie_bar_break"], chunk.origin ); + chunk.unbroken = 0; + } + else if ( isdefined( chunk.material ) && chunk.material == "rock" ) + { + if ( isdefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) + chunk setclientflag( level._zombie_scriptmover_flag_rock_fx ); + else + playfx( level._effect["wall_break"], chunk.origin ); + + chunk.unbroken = 0; + } + } + } + + if ( isdefined( chunk.script_parameters ) && chunk.script_parameters == "barricade_vents" ) + { + if ( isdefined( level.use_clientside_board_fx ) ) + chunk setclientflag( level._zombie_scriptmover_flag_board_vertical_fx ); + else + playfx( level._effect["fx_zombie_bar_break"], chunk.origin ); + } + else if ( isdefined( chunk.material ) && chunk.material == "rock" ) + { + if ( isdefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) + chunk setclientflag( level._zombie_scriptmover_flag_rock_fx ); + } + else if ( isdefined( level.use_clientside_board_fx ) ) + chunk setclientflag( level._zombie_scriptmover_flag_board_vertical_fx ); + else + { + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( 1, 0, 0 ), 30.0 ) ); + wait( randomfloatrange( 0.2, 0.4 ) ); + playfx( level._effect["wood_chunk_destory"], chunk.origin + vectorscale( ( -1, 0, 0 ), 30.0 ) ); + } +} + +zombie_bartear_offset_fx_verticle( chunk ) +{ + if ( isdefined( chunk.script_parameters ) && chunk.script_parameters == "bar" || chunk.script_noteworthy == "board" ) + { + possible_tag_array_1 = []; + possible_tag_array_1[0] = "Tag_fx_top"; + possible_tag_array_1[1] = ""; + possible_tag_array_1[2] = "Tag_fx_top"; + possible_tag_array_1[3] = ""; + possible_tag_array_2 = []; + possible_tag_array_2[0] = ""; + possible_tag_array_2[1] = "Tag_fx_bottom"; + possible_tag_array_2[2] = ""; + possible_tag_array_2[3] = "Tag_fx_bottom"; + possible_tag_array_2 = array_randomize( possible_tag_array_2 ); + random_fx = []; + random_fx[0] = level._effect["fx_zombie_bar_break"]; + random_fx[1] = level._effect["fx_zombie_bar_break_lite"]; + random_fx[2] = level._effect["fx_zombie_bar_break"]; + random_fx[3] = level._effect["fx_zombie_bar_break_lite"]; + random_fx = array_randomize( random_fx ); + + switch ( randomint( 9 ) ) + { + case 0: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_top" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_bottom" ); + break; + case 1: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_top" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_bottom" ); + break; + case 2: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_top" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_bottom" ); + break; + case 3: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_top" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_bottom" ); + break; + case 4: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_top" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_bottom" ); + break; + case 5: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_top" ); + break; + case 6: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_bottom" ); + break; + case 7: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_top" ); + break; + case 8: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_bottom" ); + break; + } + } +} + +zombie_bartear_offset_fx_horizontle( chunk ) +{ + if ( isdefined( chunk.script_parameters ) && chunk.script_parameters == "bar" || chunk.script_noteworthy == "board" ) + { + switch ( randomint( 10 ) ) + { + case 0: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_left" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_right" ); + break; + case 1: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_left" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_right" ); + break; + case 2: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_left" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_right" ); + break; + case 3: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_left" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_right" ); + break; + case 4: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_left" ); + wait( randomfloatrange( 0.0, 0.3 ) ); + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_right" ); + break; + case 5: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_left" ); + break; + case 6: + playfxontag( level._effect["fx_zombie_bar_break_lite"], chunk, "Tag_fx_right" ); + break; + case 7: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_right" ); + break; + case 8: + playfxontag( level._effect["fx_zombie_bar_break"], chunk, "Tag_fx_right" ); + break; + } + } +} + +check_zbarrier_piece_for_zombie_inert( chunk_index, zbarrier, zombie ) +{ + zombie endon( "completed_emerging_into_playable_area" ); + + zombie waittill( "stop_zombie_goto_entrance" ); + + if ( zbarrier getzbarrierpiecestate( chunk_index ) == "targetted_by_zombie" ) + zbarrier setzbarrierpiecestate( chunk_index, "closed" ); +} + +check_zbarrier_piece_for_zombie_death( chunk_index, zbarrier, zombie ) +{ + while ( true ) + { + if ( zbarrier getzbarrierpiecestate( chunk_index ) != "targetted_by_zombie" ) + return; + + if ( !isdefined( zombie ) || !isalive( zombie ) ) + { + zbarrier setzbarrierpiecestate( chunk_index, "closed" ); + return; + } + + wait 0.05; + } +} + +check_for_zombie_death( zombie ) +{ + self endon( "destroyed" ); + wait 2.5; + self maps\mp\zombies\_zm_blockers::update_states( "repaired" ); +} + +zombie_hat_gib( attacker, means_of_death ) +{ + self endon( "death" ); + + if ( !is_mature() ) + return 0; + + if ( isdefined( self.hat_gibbed ) && self.hat_gibbed ) + return; + + if ( !isdefined( self.gibspawn5 ) || !isdefined( self.gibspawntag5 ) ) + return; + + self.hat_gibbed = 1; + + if ( isdefined( self.hatmodel ) ) + self detach( self.hatmodel, "" ); + + temp_array = []; + temp_array[0] = level._zombie_gib_piece_index_hat; + self gib( "normal", temp_array ); + + if ( isdefined( level.track_gibs ) ) + level [[ level.track_gibs ]]( self, temp_array ); +} + +zombie_head_gib( attacker, means_of_death ) +{ + self endon( "death" ); + + if ( !is_mature() ) + return 0; + + if ( isdefined( self.head_gibbed ) && self.head_gibbed ) + return; + + self.head_gibbed = 1; + self zombie_eye_glow_stop(); + size = self getattachsize(); + + for ( i = 0; i < size; i++ ) + { + model = self getattachmodelname( i ); + + if ( issubstr( model, "head" ) ) + { + if ( isdefined( self.hatmodel ) ) + self detach( self.hatmodel, "" ); + + self detach( model, "" ); + + if ( isdefined( self.torsodmg5 ) ) + self attach( self.torsodmg5, "", 1 ); + + break; + } + } + + temp_array = []; + temp_array[0] = level._zombie_gib_piece_index_head; + + if ( !( isdefined( self.hat_gibbed ) && self.hat_gibbed ) && isdefined( self.gibspawn5 ) && isdefined( self.gibspawntag5 ) ) + temp_array[1] = level._zombie_gib_piece_index_hat; + + self.hat_gibbed = 1; + self gib( "normal", temp_array ); + + if ( isdefined( level.track_gibs ) ) + level [[ level.track_gibs ]]( self, temp_array ); + + self thread damage_over_time( ceil( self.health * 0.2 ), 1, attacker, means_of_death ); +} + +damage_over_time( dmg, delay, attacker, means_of_death ) +{ + self endon( "death" ); + self endon( "exploding" ); + + if ( !isalive( self ) ) + return; + + if ( !isplayer( attacker ) ) + attacker = self; + + if ( !isdefined( means_of_death ) ) + means_of_death = "MOD_UNKNOWN"; + + while ( true ) + { + if ( isdefined( delay ) ) + wait( delay ); + + if ( isdefined( self ) ) + self dodamage( dmg, self gettagorigin( "j_neck" ), attacker, self, self.damagelocation, means_of_death, 0, self.damageweapon ); + } +} + +head_should_gib( attacker, type, point ) +{ + if ( !is_mature() ) + return false; + + if ( self.head_gibbed ) + return false; + + if ( !isdefined( attacker ) || !isplayer( attacker ) ) + return false; + + weapon = attacker getcurrentweapon(); + + if ( type != "MOD_RIFLE_BULLET" && type != "MOD_PISTOL_BULLET" ) + { + if ( type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" ) + { + if ( distance( point, self gettagorigin( "j_head" ) ) > 55 ) + return false; + else + return true; + } + else if ( type == "MOD_PROJECTILE" ) + { + if ( distance( point, self gettagorigin( "j_head" ) ) > 10 ) + return false; + else + return true; + } + else if ( weaponclass( weapon ) != "spread" ) + return false; + } + + if ( !self maps\mp\animscripts\zm_utility::damagelocationisany( "head", "helmet", "neck" ) ) + return false; + + if ( weapon == "none" || weapon == level.start_weapon || weaponisgasweapon( self.weapon ) ) + return false; + + low_health_percent = self.health / self.maxhealth * 100; + + if ( low_health_percent > 10 ) + { + self zombie_hat_gib( attacker, type ); + return false; + } + + return true; +} + +headshot_blood_fx() +{ + if ( !isdefined( self ) ) + return; + + if ( !is_mature() ) + return; + + fxtag = "j_neck"; + fxorigin = self gettagorigin( fxtag ); + upvec = anglestoup( self gettagangles( fxtag ) ); + forwardvec = anglestoforward( self gettagangles( fxtag ) ); + playfx( level._effect["headshot"], fxorigin, forwardvec, upvec ); + playfx( level._effect["headshot_nochunks"], fxorigin, forwardvec, upvec ); + wait 0.3; + + if ( isdefined( self ) ) + playfxontag( level._effect["bloodspurt"], self, fxtag ); +} + +zombie_gib_on_damage() +{ + while ( true ) + { + self waittill( "damage", amount, attacker, direction_vec, point, type, tagname, modelname, partname, weaponname ); + + if ( !isdefined( self ) ) + return; + + if ( !self zombie_should_gib( amount, attacker, type ) ) + continue; + + if ( self head_should_gib( attacker, type, point ) && type != "MOD_BURNED" ) + { + self zombie_head_gib( attacker, type ); + continue; + } + + if ( !self.gibbed ) + { + if ( self maps\mp\animscripts\zm_utility::damagelocationisany( "head", "helmet", "neck" ) ) + continue; + + refs = []; + + switch ( self.damagelocation ) + { + case "torso_upper": + case "torso_lower": + refs[refs.size] = "guts"; + refs[refs.size] = "right_arm"; + break; + case "right_hand": + case "right_arm_upper": + case "right_arm_lower": + refs[refs.size] = "right_arm"; + break; + case "left_hand": + case "left_arm_upper": + case "left_arm_lower": + refs[refs.size] = "left_arm"; + break; + case "right_leg_upper": + case "right_leg_lower": + case "right_foot": + if ( self.health <= 0 ) + { + refs[refs.size] = "right_leg"; + refs[refs.size] = "right_leg"; + refs[refs.size] = "right_leg"; + refs[refs.size] = "no_legs"; + } + + break; + case "left_leg_upper": + case "left_leg_lower": + case "left_foot": + if ( self.health <= 0 ) + { + refs[refs.size] = "left_leg"; + refs[refs.size] = "left_leg"; + refs[refs.size] = "left_leg"; + refs[refs.size] = "no_legs"; + } + + break; + default: + if ( self.damagelocation == "none" ) + { + if ( type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" || type == "MOD_PROJECTILE" || type == "MOD_PROJECTILE_SPLASH" ) + { + refs = self derive_damage_refs( point ); + break; + } + } + else + { + refs[refs.size] = "guts"; + refs[refs.size] = "right_arm"; + refs[refs.size] = "left_arm"; + refs[refs.size] = "right_leg"; + refs[refs.size] = "left_leg"; + refs[refs.size] = "no_legs"; + break; + } + } + + if ( isdefined( level.custom_derive_damage_refs ) ) + refs = self [[ level.custom_derive_damage_refs ]]( refs, point, weaponname ); + + if ( refs.size ) + { + self.a.gib_ref = maps\mp\animscripts\zm_death::get_random( refs ); + + if ( ( self.a.gib_ref == "no_legs" || self.a.gib_ref == "right_leg" || self.a.gib_ref == "left_leg" ) && self.health > 0 ) + { + self.has_legs = 0; + self allowedstances( "crouch" ); + self setphysparams( 15, 0, 24 ); + self allowpitchangle( 1 ); + self setpitchorient(); + health = self.health; + health *= 0.1; + self thread maps\mp\animscripts\zm_run::needsdelayedupdate(); + + if ( isdefined( self.crawl_anim_override ) ) + self [[ self.crawl_anim_override ]](); + } + } + + if ( self.health > 0 ) + { + self thread maps\mp\animscripts\zm_death::do_gib(); + + if ( isdefined( level.gib_on_damage ) ) + self thread [[ level.gib_on_damage ]](); + } + } + } +} + +zombie_should_gib( amount, attacker, type ) +{ + if ( !is_mature() ) + return false; + + if ( !isdefined( type ) ) + return false; + + if ( isdefined( self.is_on_fire ) && self.is_on_fire ) + return false; + + if ( isdefined( self.no_gib ) && self.no_gib == 1 ) + return false; + + switch ( type ) + { + case "MOD_UNKNOWN": + case "MOD_TRIGGER_HURT": + case "MOD_TELEFRAG": + case "MOD_SUICIDE": + case "MOD_FALLING": + case "MOD_CRUSH": + case "MOD_BURNED": + return false; + case "MOD_MELEE": + return false; + } + + if ( type == "MOD_PISTOL_BULLET" || type == "MOD_RIFLE_BULLET" ) + { + if ( !isdefined( attacker ) || !isplayer( attacker ) ) + return false; + + weapon = attacker getcurrentweapon(); + + if ( weapon == "none" || weapon == level.start_weapon ) + return false; + + if ( weaponisgasweapon( self.weapon ) ) + return false; + } + else if ( type == "MOD_PROJECTILE" ) + { + if ( isdefined( attacker ) && isplayer( attacker ) ) + { + weapon = attacker getcurrentweapon(); + + if ( weapon == "slipgun_zm" || weapon == "slipgun_upgraded_zm" ) + return false; + } + } + + prev_health = amount + self.health; + + if ( prev_health <= 0 ) + prev_health = 1; + + damage_percent = amount / prev_health * 100; + + if ( damage_percent < 10 ) + return false; + + return true; +} + +derive_damage_refs( point ) +{ + if ( !isdefined( level.gib_tags ) ) + init_gib_tags(); + + closesttag = undefined; + + for ( i = 0; i < level.gib_tags.size; i++ ) + { + if ( !isdefined( closesttag ) ) + { + closesttag = level.gib_tags[i]; + continue; + } + + if ( distancesquared( point, self gettagorigin( level.gib_tags[i] ) ) < distancesquared( point, self gettagorigin( closesttag ) ) ) + closesttag = level.gib_tags[i]; + } + + refs = []; + + if ( closesttag == "J_SpineLower" || closesttag == "J_SpineUpper" || closesttag == "J_Spine4" ) + { + refs[refs.size] = "guts"; + refs[refs.size] = "right_arm"; + } + else if ( closesttag == "J_Shoulder_LE" || closesttag == "J_Elbow_LE" || closesttag == "J_Wrist_LE" ) + refs[refs.size] = "left_arm"; + else if ( closesttag == "J_Shoulder_RI" || closesttag == "J_Elbow_RI" || closesttag == "J_Wrist_RI" ) + refs[refs.size] = "right_arm"; + else if ( closesttag == "J_Hip_LE" || closesttag == "J_Knee_LE" || closesttag == "J_Ankle_LE" ) + { + refs[refs.size] = "left_leg"; + refs[refs.size] = "no_legs"; + } + else if ( closesttag == "J_Hip_RI" || closesttag == "J_Knee_RI" || closesttag == "J_Ankle_RI" ) + { + refs[refs.size] = "right_leg"; + refs[refs.size] = "no_legs"; + } + + assert( array_validate( refs ), "get_closest_damage_refs(): couldn't derive refs from closestTag " + closesttag ); + return refs; +} + +init_gib_tags() +{ + tags = []; + tags[tags.size] = "J_SpineLower"; + tags[tags.size] = "J_SpineUpper"; + tags[tags.size] = "J_Spine4"; + tags[tags.size] = "J_Shoulder_LE"; + tags[tags.size] = "J_Elbow_LE"; + tags[tags.size] = "J_Wrist_LE"; + tags[tags.size] = "J_Shoulder_RI"; + tags[tags.size] = "J_Elbow_RI"; + tags[tags.size] = "J_Wrist_RI"; + tags[tags.size] = "J_Hip_LE"; + tags[tags.size] = "J_Knee_LE"; + tags[tags.size] = "J_Ankle_LE"; + tags[tags.size] = "J_Hip_RI"; + tags[tags.size] = "J_Knee_RI"; + tags[tags.size] = "J_Ankle_RI"; + level.gib_tags = tags; +} + +zombie_can_drop_powerups( zombie ) +{ + if ( is_tactical_grenade( zombie.damageweapon ) || !flag( "zombie_drop_powerups" ) ) + return false; + + if ( isdefined( zombie.no_powerups ) && zombie.no_powerups ) + return false; + + return true; +} + +zombie_delay_powerup_drop( origin ) +{ + wait_network_frame(); + level thread maps\mp\zombies\_zm_powerups::powerup_drop( origin ); +} + +zombie_death_points( origin, mod, hit_location, attacker, zombie, team ) +{ + if ( !isdefined( attacker ) || !isplayer( attacker ) ) + return; + + if ( zombie_can_drop_powerups( zombie ) ) + { + if ( isdefined( zombie.in_the_ground ) && zombie.in_the_ground == 1 ) + { + trace = bullettrace( zombie.origin + vectorscale( ( 0, 0, 1 ), 100.0 ), zombie.origin + vectorscale( ( 0, 0, -1 ), 100.0 ), 0, undefined ); + origin = trace["position"]; + level thread zombie_delay_powerup_drop( origin ); + } + else + { + trace = groundtrace( zombie.origin + vectorscale( ( 0, 0, 1 ), 5.0 ), zombie.origin + vectorscale( ( 0, 0, -1 ), 300.0 ), 0, undefined ); + origin = trace["position"]; + level thread zombie_delay_powerup_drop( origin ); + } + } + + level thread maps\mp\zombies\_zm_audio::player_zombie_kill_vox( hit_location, attacker, mod, zombie ); + event = "death"; + + if ( isdefined( zombie.damageweapon ) && issubstr( zombie.damageweapon, "knife_ballistic_" ) && ( mod == "MOD_MELEE" || mod == "MOD_IMPACT" ) ) + event = "ballistic_knife_death"; + + if ( isdefined( zombie.deathpoints_already_given ) && zombie.deathpoints_already_given ) + return; + + zombie.deathpoints_already_given = 1; + + if ( isdefined( zombie.damageweapon ) && is_equipment( zombie.damageweapon ) ) + return; + + attacker maps\mp\zombies\_zm_score::player_add_points( event, mod, hit_location, undefined, team, attacker.currentweapon ); +} + +get_number_variants( aliasprefix ) +{ + for ( i = 0; i < 100; i++ ) + { + if ( !soundexists( aliasprefix + "_" + i ) ) + return i; + } +} + +dragons_breath_flame_death_fx() +{ + if ( self.isdog ) + return; + + if ( !isdefined( level._effect ) || !isdefined( level._effect["character_fire_death_sm"] ) ) + { +/# + println( "^3ANIMSCRIPT WARNING: You are missing level._effect[\"character_fire_death_sm\"], please set it in your levelname_fx.gsc. Use \"env/fire/fx_fire_zombie_md\"" ); +#/ + return; + } + + playfxontag( level._effect["character_fire_death_sm"], self, "J_SpineLower" ); + tagarray = []; + + if ( !isdefined( self.a.gib_ref ) || self.a.gib_ref != "left_arm" ) + { + tagarray[tagarray.size] = "J_Elbow_LE"; + tagarray[tagarray.size] = "J_Wrist_LE"; + } + + if ( !isdefined( self.a.gib_ref ) || self.a.gib_ref != "right_arm" ) + { + tagarray[tagarray.size] = "J_Elbow_RI"; + tagarray[tagarray.size] = "J_Wrist_RI"; + } + + if ( !isdefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" && self.a.gib_ref != "left_leg" ) + { + tagarray[tagarray.size] = "J_Knee_LE"; + tagarray[tagarray.size] = "J_Ankle_LE"; + } + + if ( !isdefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" && self.a.gib_ref != "right_leg" ) + { + tagarray[tagarray.size] = "J_Knee_RI"; + tagarray[tagarray.size] = "J_Ankle_RI"; + } + + tagarray = array_randomize( tagarray ); + playfxontag( level._effect["character_fire_death_sm"], self, tagarray[0] ); +} + +zombie_ragdoll_then_explode( launchvector, attacker ) +{ + if ( !isdefined( self ) ) + return; + + self zombie_eye_glow_stop(); + self setclientfield( "zombie_ragdoll_explode", 1 ); + self notify( "exploding" ); + self notify( "end_melee" ); + self notify( "death", attacker ); + self.dont_die_on_me = 1; + self.exploding = 1; + self.a.nodeath = 1; + self.dont_throw_gib = 1; + self startragdoll(); + self setplayercollision( 0 ); + self reset_attack_spot(); + + if ( isdefined( launchvector ) ) + self launchragdoll( launchvector ); + + wait 2.1; + + if ( isdefined( self ) ) + { + self ghost(); + self delay_thread( 0.25, ::self_delete ); + } +} + +zombie_death_animscript() +{ + team = undefined; + recalc_zombie_array(); + + if ( isdefined( self._race_team ) ) + team = self._race_team; + + self reset_attack_spot(); + + if ( self check_zombie_death_animscript_callbacks() ) + return false; + + if ( isdefined( level.zombie_death_animscript_override ) ) + self [[ level.zombie_death_animscript_override ]](); + + if ( self.has_legs && isdefined( self.a.gib_ref ) && self.a.gib_ref == "no_legs" ) + self.deathanim = "zm_death"; + + self.grenadeammo = 0; + + if ( isdefined( self.nuked ) ) + { + if ( zombie_can_drop_powerups( self ) ) + { + if ( isdefined( self.in_the_ground ) && self.in_the_ground == 1 ) + { + trace = bullettrace( self.origin + vectorscale( ( 0, 0, 1 ), 100.0 ), self.origin + vectorscale( ( 0, 0, -1 ), 100.0 ), 0, undefined ); + origin = trace["position"]; + level thread zombie_delay_powerup_drop( origin ); + } + else + { + trace = groundtrace( self.origin + vectorscale( ( 0, 0, 1 ), 5.0 ), self.origin + vectorscale( ( 0, 0, -1 ), 300.0 ), 0, undefined ); + origin = trace["position"]; + level thread zombie_delay_powerup_drop( self.origin ); + } + } + } + else + level zombie_death_points( self.origin, self.damagemod, self.damagelocation, self.attacker, self, team ); + + if ( isdefined( self.attacker ) && isai( self.attacker ) ) + self.attacker notify( "killed", self ); + + if ( "rottweil72_upgraded_zm" == self.damageweapon && "MOD_RIFLE_BULLET" == self.damagemod ) + self thread dragons_breath_flame_death_fx(); + + if ( "tazer_knuckles_zm" == self.damageweapon && "MOD_MELEE" == self.damagemod ) + { + self.is_on_fire = 0; + self notify( "stop_flame_damage" ); + } + + if ( self.damagemod == "MOD_BURNED" ) + self thread maps\mp\animscripts\zm_death::flame_death_fx(); + + if ( self.damagemod == "MOD_GRENADE" || self.damagemod == "MOD_GRENADE_SPLASH" ) + level notify( "zombie_grenade_death", self.origin ); + + return false; +} + +check_zombie_death_animscript_callbacks() +{ + if ( !isdefined( level.zombie_death_animscript_callbacks ) ) + return false; + + for ( i = 0; i < level.zombie_death_animscript_callbacks.size; i++ ) + { + if ( self [[ level.zombie_death_animscript_callbacks[i] ]]() ) + return true; + } + + return false; +} + +register_zombie_death_animscript_callback( func ) +{ + if ( !isdefined( level.zombie_death_animscript_callbacks ) ) + level.zombie_death_animscript_callbacks = []; + + level.zombie_death_animscript_callbacks[level.zombie_death_animscript_callbacks.size] = func; +} + +damage_on_fire( player ) +{ + self endon( "death" ); + self endon( "stop_flame_damage" ); + wait 2; + + while ( isdefined( self.is_on_fire ) && self.is_on_fire ) + { + if ( level.round_number < 6 ) + dmg = level.zombie_health * randomfloatrange( 0.2, 0.3 ); + else if ( level.round_number < 9 ) + dmg = level.zombie_health * randomfloatrange( 0.15, 0.25 ); + else if ( level.round_number < 11 ) + dmg = level.zombie_health * randomfloatrange( 0.1, 0.2 ); + else + dmg = level.zombie_health * randomfloatrange( 0.1, 0.15 ); + + if ( isdefined( player ) && isalive( player ) ) + self dodamage( dmg, self.origin, player ); + else + self dodamage( dmg, self.origin, level ); + + wait( randomfloatrange( 1.0, 3.0 ) ); + } +} + +player_using_hi_score_weapon( player ) +{ + weapon = player getcurrentweapon(); + + if ( weapon == "none" || weaponissemiauto( weapon ) ) + return true; + + return false; +} + +zombie_damage( mod, hit_location, hit_origin, player, amount, team ) +{ + if ( is_magic_bullet_shield_enabled( self ) ) + return; + + player.use_weapon_type = mod; + + if ( isdefined( self.marked_for_death ) ) + return; + + if ( !isdefined( player ) ) + return; + + if ( isdefined( hit_origin ) ) + self.damagehit_origin = hit_origin; + else + self.damagehit_origin = player getweaponmuzzlepoint(); + + if ( self check_zombie_damage_callbacks( mod, hit_location, hit_origin, player, amount ) ) + return; + else if ( self zombie_flame_damage( mod, player ) ) + { + if ( self zombie_give_flame_damage_points() ) + player maps\mp\zombies\_zm_score::player_add_points( "damage", mod, hit_location, self.isdog, team ); + } + else + { + if ( player_using_hi_score_weapon( player ) ) + damage_type = "damage"; + else + damage_type = "damage_light"; + + if ( !( isdefined( self.no_damage_points ) && self.no_damage_points ) ) + player maps\mp\zombies\_zm_score::player_add_points( damage_type, mod, hit_location, self.isdog, team, self.damageweapon ); + } + + if ( isdefined( self.zombie_damage_fx_func ) ) + self [[ self.zombie_damage_fx_func ]]( mod, hit_location, hit_origin, player ); + + modname = remove_mod_from_methodofdeath( mod ); + + if ( is_placeable_mine( self.damageweapon ) ) + { + if ( isdefined( self.zombie_damage_claymore_func ) ) + self [[ self.zombie_damage_claymore_func ]]( mod, hit_location, hit_origin, player ); + else if ( isdefined( player ) && isalive( player ) ) + self dodamage( level.round_number * randomintrange( 100, 200 ), self.origin, player, self, hit_location, mod ); + else + self dodamage( level.round_number * randomintrange( 100, 200 ), self.origin, undefined, self, hit_location, mod ); + } + else if ( mod == "MOD_GRENADE" || mod == "MOD_GRENADE_SPLASH" ) + { + if ( isdefined( player ) && isalive( player ) ) + { + player.grenade_multiattack_count++; + player.grenade_multiattack_ent = self; + self dodamage( level.round_number + randomintrange( 100, 200 ), self.origin, player, self, hit_location, modname ); + } + else + self dodamage( level.round_number + randomintrange( 100, 200 ), self.origin, undefined, self, hit_location, modname ); + } + else if ( mod == "MOD_PROJECTILE" || mod == "MOD_EXPLOSIVE" || mod == "MOD_PROJECTILE_SPLASH" ) + { + if ( isdefined( player ) && isalive( player ) ) + self dodamage( level.round_number * randomintrange( 0, 100 ), self.origin, player, self, hit_location, modname ); + else + self dodamage( level.round_number * randomintrange( 0, 100 ), self.origin, undefined, self, hit_location, modname ); + } + + if ( isdefined( self.a.gib_ref ) && self.a.gib_ref == "no_legs" && isalive( self ) ) + { + if ( isdefined( player ) ) + { + rand = randomintrange( 0, 100 ); + + if ( rand < 10 ) + player create_and_play_dialog( "general", "crawl_spawn" ); + } + } + else if ( isdefined( self.a.gib_ref ) && ( self.a.gib_ref == "right_arm" || self.a.gib_ref == "left_arm" ) ) + { + if ( self.has_legs && isalive( self ) ) + { + if ( isdefined( player ) ) + { + rand = randomintrange( 0, 100 ); + + if ( rand < 7 ) + player create_and_play_dialog( "general", "shoot_arm" ); + } + } + } + + self thread maps\mp\zombies\_zm_powerups::check_for_instakill( player, mod, hit_location ); +} + +zombie_damage_ads( mod, hit_location, hit_origin, player, amount, team ) +{ + if ( is_magic_bullet_shield_enabled( self ) ) + return; + + player.use_weapon_type = mod; + + if ( !isdefined( player ) ) + return; + + if ( isdefined( hit_origin ) ) + self.damagehit_origin = hit_origin; + else + self.damagehit_origin = player getweaponmuzzlepoint(); + + if ( self check_zombie_damage_callbacks( mod, hit_location, hit_origin, player, amount ) ) + return; + else if ( self zombie_flame_damage( mod, player ) ) + { + if ( self zombie_give_flame_damage_points() ) + player maps\mp\zombies\_zm_score::player_add_points( "damage_ads", mod, hit_location, undefined, team ); + } + else + { + if ( player_using_hi_score_weapon( player ) ) + damage_type = "damage"; + else + damage_type = "damage_light"; + + if ( !( isdefined( self.no_damage_points ) && self.no_damage_points ) ) + player maps\mp\zombies\_zm_score::player_add_points( damage_type, mod, hit_location, undefined, team, self.damageweapon ); + } + + self thread maps\mp\zombies\_zm_powerups::check_for_instakill( player, mod, hit_location ); +} + +check_zombie_damage_callbacks( mod, hit_location, hit_origin, player, amount ) +{ + if ( !isdefined( level.zombie_damage_callbacks ) ) + return false; + + for ( i = 0; i < level.zombie_damage_callbacks.size; i++ ) + { + if ( self [[ level.zombie_damage_callbacks[i] ]]( mod, hit_location, hit_origin, player, amount ) ) + return true; + } + + return false; +} + +register_zombie_damage_callback( func ) +{ + if ( !isdefined( level.zombie_damage_callbacks ) ) + level.zombie_damage_callbacks = []; + + level.zombie_damage_callbacks[level.zombie_damage_callbacks.size] = func; +} + +zombie_give_flame_damage_points() +{ + if ( gettime() > self.flame_damage_time ) + { + self.flame_damage_time = gettime() + level.zombie_vars["zombie_flame_dmg_point_delay"]; + return true; + } + + return false; +} + +zombie_flame_damage( mod, player ) +{ + if ( mod == "MOD_BURNED" ) + { + if ( !isdefined( self.is_on_fire ) || isdefined( self.is_on_fire ) && !self.is_on_fire ) + self thread damage_on_fire( player ); + + do_flame_death = 1; + dist = 10000; + ai = getaiarray( level.zombie_team ); + + for ( i = 0; i < ai.size; i++ ) + { + if ( isdefined( ai[i].is_on_fire ) && ai[i].is_on_fire ) + { + if ( distancesquared( ai[i].origin, self.origin ) < dist ) + { + do_flame_death = 0; + break; + } + } + } + + if ( do_flame_death ) + self thread maps\mp\animscripts\zm_death::flame_death_fx(); + + return true; + } + + return false; +} + +is_weapon_shotgun( sweapon ) +{ + if ( isdefined( sweapon ) && weaponclass( sweapon ) == "spread" ) + return true; + + return false; +} + +zombie_death_event( zombie ) +{ + zombie.marked_for_recycle = 0; + force_explode = 0; + force_head_gib = 0; + + zombie waittill( "death", attacker ); + + time_of_death = gettime(); + + if ( isdefined( zombie ) ) + zombie stopsounds(); + + if ( isdefined( zombie ) && isdefined( zombie.marked_for_insta_upgraded_death ) ) + force_head_gib = 1; + + if ( !isdefined( zombie.damagehit_origin ) && isdefined( attacker ) ) + zombie.damagehit_origin = attacker getweaponmuzzlepoint(); + + if ( isdefined( attacker ) && isplayer( attacker ) ) + { + if ( isdefined( level.pers_upgrade_carpenter ) && level.pers_upgrade_carpenter ) + maps\mp\zombies\_zm_pers_upgrades::pers_zombie_death_location_check( attacker, zombie.origin ); + + if ( isdefined( level.pers_upgrade_sniper ) && level.pers_upgrade_sniper ) + attacker pers_upgrade_sniper_kill_check( zombie, attacker ); + + if ( isdefined( zombie ) && isdefined( zombie.damagelocation ) ) + { + if ( is_headshot( zombie.damageweapon, zombie.damagelocation, zombie.damagemod ) ) + { + attacker.headshots++; + attacker maps\mp\zombies\_zm_stats::increment_client_stat( "headshots" ); + attacker addweaponstat( zombie.damageweapon, "headshots", 1 ); + attacker maps\mp\zombies\_zm_stats::increment_player_stat( "headshots" ); + + if ( is_classic() ) + attacker maps\mp\zombies\_zm_pers_upgrades_functions::pers_check_for_pers_headshot( time_of_death, zombie ); + } + else + attacker notify( "zombie_death_no_headshot" ); + } + + if ( isdefined( zombie ) && isdefined( zombie.damagemod ) && zombie.damagemod == "MOD_MELEE" ) + { + attacker maps\mp\zombies\_zm_stats::increment_client_stat( "melee_kills" ); + attacker maps\mp\zombies\_zm_stats::increment_player_stat( "melee_kills" ); + attacker notify( "melee_kill" ); + + if ( attacker maps\mp\zombies\_zm_pers_upgrades::is_insta_kill_upgraded_and_active() ) + force_explode = 1; + } + + attacker maps\mp\zombies\_zm::add_rampage_bookmark_kill_time(); + attacker.kills++; + attacker maps\mp\zombies\_zm_stats::increment_client_stat( "kills" ); + attacker maps\mp\zombies\_zm_stats::increment_player_stat( "kills" ); + + if ( isdefined( level.pers_upgrade_pistol_points ) && level.pers_upgrade_pistol_points ) + attacker maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_pistol_points_kill(); + + dmgweapon = zombie.damageweapon; + + if ( is_alt_weapon( dmgweapon ) ) + dmgweapon = weaponaltweaponname( dmgweapon ); + + attacker addweaponstat( dmgweapon, "kills", 1 ); + + if ( attacker maps\mp\zombies\_zm_pers_upgrades_functions::pers_mulit_kill_headshot_active() || force_head_gib ) + zombie maps\mp\zombies\_zm_spawner::zombie_head_gib(); + + if ( isdefined( level.pers_upgrade_nube ) && level.pers_upgrade_nube ) + attacker notify( "pers_player_zombie_kill" ); + } + + zombie_death_achievement_sliquifier_check( attacker, zombie ); + recalc_zombie_array(); + + if ( !isdefined( zombie ) ) + return; + + level.global_zombies_killed++; + + if ( isdefined( zombie.marked_for_death ) && !isdefined( zombie.nuked ) ) + level.zombie_trap_killed_count++; + + zombie check_zombie_death_event_callbacks(); + name = zombie.animname; + + if ( isdefined( zombie.sndname ) ) + name = zombie.sndname; + + zombie thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "death", name ); + zombie thread zombie_eye_glow_stop(); + + if ( isdefined( zombie.damageweapon ) && is_weapon_shotgun( zombie.damageweapon ) && maps\mp\zombies\_zm_weapons::is_weapon_upgraded( zombie.damageweapon ) || isdefined( zombie.damageweapon ) && is_placeable_mine( zombie.damageweapon ) || zombie.damagemod == "MOD_GRENADE" || zombie.damagemod == "MOD_GRENADE_SPLASH" || zombie.damagemod == "MOD_EXPLOSIVE" || force_explode == 1 ) + { + splode_dist = 180; + + if ( isdefined( zombie.damagehit_origin ) && distancesquared( zombie.origin, zombie.damagehit_origin ) < splode_dist * splode_dist ) + { + tag = "J_SpineLower"; + + if ( isdefined( zombie.isdog ) && zombie.isdog ) + tag = "tag_origin"; + + if ( !( isdefined( zombie.is_on_fire ) && zombie.is_on_fire ) && !( isdefined( zombie.guts_explosion ) && zombie.guts_explosion ) ) + zombie thread zombie_gut_explosion(); + } + } + + if ( zombie.damagemod == "MOD_GRENADE" || zombie.damagemod == "MOD_GRENADE_SPLASH" ) + { + if ( isdefined( attacker ) && isalive( attacker ) ) + { + attacker.grenade_multiattack_count++; + attacker.grenade_multiattack_ent = zombie; + } + } + + if ( !( isdefined( zombie.has_been_damaged_by_player ) && zombie.has_been_damaged_by_player ) && ( isdefined( zombie.marked_for_recycle ) && zombie.marked_for_recycle ) ) + { + level.zombie_total++; + level.zombie_total_subtract++; + } + else if ( isdefined( zombie.attacker ) && isplayer( zombie.attacker ) ) + { + level.zombie_player_killed_count++; + + if ( isdefined( zombie.sound_damage_player ) && zombie.sound_damage_player == zombie.attacker ) + { + chance = get_response_chance( "damage" ); + + if ( chance != 0 ) + { + if ( chance > randomintrange( 1, 100 ) ) + zombie.attacker maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "damage" ); + } + else + zombie.attacker maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "damage" ); + } + + zombie.attacker notify( "zom_kill", zombie ); + damageloc = zombie.damagelocation; + damagemod = zombie.damagemod; + attacker = zombie.attacker; + weapon = zombie.damageweapon; + bbprint( "zombie_kills", "round %d zombietype %s damagetype %s damagelocation %s playername %s playerweapon %s playerx %f playery %f playerz %f zombiex %f zombiey %f zombiez %f", level.round_number, zombie.animname, damagemod, damageloc, attacker.name, weapon, attacker.origin, zombie.origin ); + } + else if ( zombie.ignoreall && !( isdefined( zombie.marked_for_death ) && zombie.marked_for_death ) ) + level.zombies_timeout_spawn++; + + level notify( "zom_kill" ); + level.total_zombies_killed++; +} + +zombie_gut_explosion() +{ + self.guts_explosion = 1; + + if ( is_mature() ) + self setclientfield( "zombie_gut_explosion", 1 ); + + if ( !( isdefined( self.isdog ) && self.isdog ) ) + wait 0.1; + + if ( isdefined( self ) ) + self ghost(); +} + +zombie_death_achievement_sliquifier_check( e_player, e_zombie ) +{ + if ( !isplayer( e_player ) ) + return; + + if ( isdefined( e_zombie ) ) + { + if ( isdefined( e_zombie.damageweapon ) && e_zombie.damageweapon == "slipgun_zm" ) + { + if ( !isdefined( e_player.num_sliquifier_kills ) ) + e_player.num_sliquifier_kills = 0; + + e_player.num_sliquifier_kills++; + e_player notify( "sliquifier_kill" ); + } + } +} + +check_zombie_death_event_callbacks() +{ + if ( !isdefined( level.zombie_death_event_callbacks ) ) + return; + + for ( i = 0; i < level.zombie_death_event_callbacks.size; i++ ) + self [[ level.zombie_death_event_callbacks[i] ]](); +} + +register_zombie_death_event_callback( func ) +{ + if ( !isdefined( level.zombie_death_event_callbacks ) ) + level.zombie_death_event_callbacks = []; + + level.zombie_death_event_callbacks[level.zombie_death_event_callbacks.size] = func; +} + +deregister_zombie_death_event_callback( func ) +{ + if ( isdefined( level.zombie_death_event_callbacks ) ) + arrayremovevalue( level.zombie_death_event_callbacks, func ); +} + +zombie_setup_attack_properties() +{ + self zombie_history( "zombie_setup_attack_properties()" ); + self.ignoreall = 0; + self.pathenemyfightdist = 64; + self.meleeattackdist = 64; + self.maxsightdistsqrd = 16384; + self.disablearrivals = 1; + self.disableexits = 1; +} + +attractors_generated_listener() +{ + self endon( "death" ); + level endon( "intermission" ); + self endon( "stop_find_flesh" ); + self endon( "path_timer_done" ); + + level waittill( "attractor_positions_generated" ); + + self.zombie_path_timer = 0; +} + +zombie_pathing() +{ + self endon( "death" ); + self endon( "zombie_acquire_enemy" ); + level endon( "intermission" ); + assert( isdefined( self.favoriteenemy ) || isdefined( self.enemyoverride ) ); + self._skip_pathing_first_delay = 1; + self thread zombie_follow_enemy(); + + self waittill( "bad_path" ); + + level.zombie_pathing_failed++; + + if ( isdefined( self.enemyoverride ) ) + { + debug_print( "Zombie couldn't path to point of interest at origin: " + self.enemyoverride[0] + " Falling back to breadcrumb system" ); + + if ( isdefined( self.enemyoverride[1] ) ) + { + self.enemyoverride = self.enemyoverride[1] invalidate_attractor_pos( self.enemyoverride, self ); + self.zombie_path_timer = 0; + return; + } + } + else if ( isdefined( self.favoriteenemy ) ) + debug_print( "Zombie couldn't path to player at origin: " + self.favoriteenemy.origin + " Falling back to breadcrumb system" ); + else + debug_print( "Zombie couldn't path to a player ( the other 'prefered' player might be ignored for encounters mode ). Falling back to breadcrumb system" ); + + if ( !isdefined( self.favoriteenemy ) ) + { + self.zombie_path_timer = 0; + return; + } + else + self.favoriteenemy endon( "disconnect" ); + + players = get_players(); + valid_player_num = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( is_player_valid( players[i], 1 ) ) + valid_player_num += 1; + } + + if ( players.size > 1 ) + { + if ( isdefined( level._should_skip_ignore_player_logic ) && [[ level._should_skip_ignore_player_logic ]]() ) + { + self.zombie_path_timer = 0; + return; + } + + if ( array_check_for_dupes( self.ignore_player, self.favoriteenemy ) ) + self.ignore_player[self.ignore_player.size] = self.favoriteenemy; + + if ( self.ignore_player.size < valid_player_num ) + { + self.zombie_path_timer = 0; + return; + } + } + + crumb_list = self.favoriteenemy.zombie_breadcrumbs; + bad_crumbs = []; + + while ( true ) + { + if ( !is_player_valid( self.favoriteenemy, 1 ) ) + { + self.zombie_path_timer = 0; + return; + } + + goal = zombie_pathing_get_breadcrumb( self.favoriteenemy.origin, crumb_list, bad_crumbs, randomint( 100 ) < 20 ); + + if ( !isdefined( goal ) ) + { + debug_print( "Zombie exhausted breadcrumb search" ); + level.zombie_breadcrumb_failed++; + goal = self.favoriteenemy.spectator_respawn.origin; + } + + debug_print( "Setting current breadcrumb to " + goal ); + self.zombie_path_timer += 100; + self setgoalpos( goal ); + + self waittill( "bad_path" ); + + debug_print( "Zombie couldn't path to breadcrumb at " + goal + " Finding next breadcrumb" ); + + for ( i = 0; i < crumb_list.size; i++ ) + { + if ( goal == crumb_list[i] ) + { + bad_crumbs[bad_crumbs.size] = i; + break; + } + } + } +} + +zombie_pathing_get_breadcrumb( origin, breadcrumbs, bad_crumbs, pick_random ) +{ + assert( isdefined( origin ) ); + assert( isdefined( breadcrumbs ) ); + assert( isarray( breadcrumbs ) ); +/# + if ( pick_random ) + debug_print( "Finding random breadcrumb" ); +#/ + for ( i = 0; i < breadcrumbs.size; i++ ) + { + if ( pick_random ) + crumb_index = randomint( breadcrumbs.size ); + else + crumb_index = i; + + if ( crumb_is_bad( crumb_index, bad_crumbs ) ) + continue; + + return breadcrumbs[crumb_index]; + } + + return undefined; +} + +crumb_is_bad( crumb, bad_crumbs ) +{ + for ( i = 0; i < bad_crumbs.size; i++ ) + { + if ( bad_crumbs[i] == crumb ) + return true; + } + + return false; +} + +jitter_enemies_bad_breadcrumbs( start_crumb ) +{ + trace_distance = 35; + jitter_distance = 2; + index = start_crumb; + + while ( isdefined( self.favoriteenemy.zombie_breadcrumbs[index + 1] ) ) + { + current_crumb = self.favoriteenemy.zombie_breadcrumbs[index]; + next_crumb = self.favoriteenemy.zombie_breadcrumbs[index + 1]; + angles = vectortoangles( current_crumb - next_crumb ); + right = anglestoright( angles ); + left = anglestoright( angles + vectorscale( ( 0, 1, 0 ), 180.0 ) ); + dist_pos = current_crumb + vectorscale( right, trace_distance ); + trace = bullettrace( current_crumb, dist_pos, 1, undefined ); + vector = trace["position"]; + + if ( distance( vector, current_crumb ) < 17 ) + { + self.favoriteenemy.zombie_breadcrumbs[index] = current_crumb + vectorscale( left, jitter_distance ); + continue; + } + + dist_pos = current_crumb + vectorscale( left, trace_distance ); + trace = bullettrace( current_crumb, dist_pos, 1, undefined ); + vector = trace["position"]; + + if ( distance( vector, current_crumb ) < 17 ) + { + self.favoriteenemy.zombie_breadcrumbs[index] = current_crumb + vectorscale( right, jitter_distance ); + continue; + } + + index++; + } +} + +zombie_repath_notifier() +{ + note = 0; + notes = []; + + for ( i = 0; i < 4; i++ ) + notes[notes.size] = "zombie_repath_notify_" + i; + + while ( true ) + { + level notify( notes[note] ); + note = ( note + 1 ) % 4; + wait 0.05; + } +} + +zombie_follow_enemy() +{ + self endon( "death" ); + self endon( "zombie_acquire_enemy" ); + self endon( "bad_path" ); + level endon( "intermission" ); + + if ( !isdefined( level.repathnotifierstarted ) ) + { + level.repathnotifierstarted = 1; + level thread zombie_repath_notifier(); + } + + if ( !isdefined( self.zombie_repath_notify ) ) + self.zombie_repath_notify = "zombie_repath_notify_" + self getentitynumber() % 4; + + while ( true ) + { + if ( !isdefined( self._skip_pathing_first_delay ) ) + level waittill( self.zombie_repath_notify ); + else + self._skip_pathing_first_delay = undefined; + + if ( !( isdefined( self.ignore_enemyoverride ) && self.ignore_enemyoverride ) && isdefined( self.enemyoverride ) && isdefined( self.enemyoverride[1] ) ) + { + if ( distancesquared( self.origin, self.enemyoverride[0] ) > 1 ) + self orientmode( "face motion" ); + else + self orientmode( "face point", self.enemyoverride[1].origin ); + + self.ignoreall = 1; + goalpos = self.enemyoverride[0]; + + if ( isdefined( level.adjust_enemyoverride_func ) ) + goalpos = self [[ level.adjust_enemyoverride_func ]](); + + self setgoalpos( goalpos ); + } + else if ( isdefined( self.favoriteenemy ) ) + { + self.ignoreall = 0; + self orientmode( "face default" ); + goalpos = self.favoriteenemy.origin; + + if ( isdefined( level.enemy_location_override_func ) ) + goalpos = [[ level.enemy_location_override_func ]]( self, self.favoriteenemy ); + + self setgoalpos( goalpos ); + + if ( !isdefined( level.ignore_path_delays ) ) + { + distsq = distancesquared( self.origin, self.favoriteenemy.origin ); + + if ( distsq > 10240000 ) + wait( 2.0 + randomfloat( 1.0 ) ); + else if ( distsq > 4840000 ) + wait( 1.0 + randomfloat( 0.5 ) ); + else if ( distsq > 1440000 ) + wait( 0.5 + randomfloat( 0.5 ) ); + } + } + + if ( isdefined( level.inaccesible_player_func ) ) + self [[ level.inaccessible_player_func ]](); + } +} + +zombie_eye_glow() +{ + if ( !isdefined( self ) ) + return; + + if ( !isdefined( self.no_eye_glow ) || !self.no_eye_glow ) + self setclientfield( "zombie_has_eyes", 1 ); +} + +zombie_eye_glow_stop() +{ + if ( !isdefined( self ) ) + return; + + if ( !isdefined( self.no_eye_glow ) || !self.no_eye_glow ) + self setclientfield( "zombie_has_eyes", 0 ); +} + +zombie_history( msg ) +{ +/# + if ( !isdefined( self.zombie_history ) || 32 <= self.zombie_history.size ) + self.zombie_history = []; + + self.zombie_history[self.zombie_history.size] = msg; +#/ +} + +do_zombie_spawn() +{ + self endon( "death" ); + spots = []; + + if ( isdefined( self._rise_spot ) ) + { + spot = self._rise_spot; + self thread do_zombie_rise( spot ); + return; + } + + if ( isdefined( level.zombie_spawn_locations ) ) + { + for ( i = 0; i < level.zombie_spawn_locations.size; i++ ) + { + if ( isdefined( level.use_multiple_spawns ) && level.use_multiple_spawns && isdefined( self.script_int ) ) + { + if ( !( isdefined( level.spawner_int ) && level.spawner_int == self.script_int ) && !( isdefined( level.zombie_spawn_locations[i].script_int ) || isdefined( level.zones[level.zombie_spawn_locations[i].zone_name].script_int ) ) ) + continue; + + if ( isdefined( level.zombie_spawn_locations[i].script_int ) && level.zombie_spawn_locations[i].script_int != self.script_int ) + continue; + else if ( isdefined( level.zones[level.zombie_spawn_locations[i].zone_name].script_int ) && level.zones[level.zombie_spawn_locations[i].zone_name].script_int != self.script_int ) + continue; + } + + spots[spots.size] = level.zombie_spawn_locations[i]; + } + } +/# + if ( getdvarint( _hash_A8C231AA ) ) + { + if ( isdefined( level.zombie_spawn_locations ) ) + { + player = get_players()[0]; + spots = []; + + for ( i = 0; i < level.zombie_spawn_locations.size; i++ ) + { + player_vec = vectornormalize( anglestoforward( player.angles ) ); + player_spawn = vectornormalize( level.zombie_spawn_locations[i].origin - player.origin ); + dot = vectordot( player_vec, player_spawn ); + + if ( dot > 0.707 ) + { + spots[spots.size] = level.zombie_spawn_locations[i]; + debugstar( level.zombie_spawn_locations[i].origin, 1000, ( 1, 1, 1 ) ); + } + } + + if ( spots.size <= 0 ) + { + spots[spots.size] = level.zombie_spawn_locations[0]; + iprintln( "no spawner in view" ); + } + } + } +#/ + assert( spots.size > 0, "No spawn locations found" ); + spot = random( spots ); + self.spawn_point = spot; +/# + if ( isdefined( level.toggle_show_spawn_locations ) && level.toggle_show_spawn_locations ) + { + debugstar( spot.origin, getdvarint( _hash_BB9101B2 ), ( 0, 1, 0 ) ); + host_player = gethostplayer(); + distance = distance( spot.origin, host_player.origin ); + iprintln( "Distance to player: " + distance / 12 + "feet" ); + } +#/ + if ( isdefined( spot.target ) ) + self.target = spot.target; + + if ( isdefined( spot.zone_name ) ) + self.zone_name = spot.zone_name; + + if ( isdefined( spot.script_parameters ) ) + self.script_parameters = spot.script_parameters; + + tokens = strtok( spot.script_noteworthy, " " ); + + foreach ( index, token in tokens ) + { + if ( isdefined( self.spawn_point_override ) ) + { + spot = self.spawn_point_override; + token = spot.script_noteworthy; + } + + if ( token == "custom_spawner_entry" ) + { + next_token = index + 1; + + if ( isdefined( tokens[next_token] ) ) + { + str_spawn_entry = tokens[next_token]; + + if ( isdefined( level.custom_spawner_entry ) && isdefined( level.custom_spawner_entry[str_spawn_entry] ) ) + { + self thread [[ level.custom_spawner_entry[str_spawn_entry] ]]( spot ); + continue; + } + } + } + + if ( token == "riser_location" ) + { + self thread do_zombie_rise( spot ); + continue; + } + + if ( token == "faller_location" ) + { + self thread maps\mp\zombies\_zm_ai_faller::do_zombie_fall( spot ); + continue; + } + + if ( token == "dog_location" ) + continue; + else if ( token == "screecher_location" ) + continue; + else if ( token == "leaper_location" ) + continue; + else + { + if ( isdefined( self.anchor ) ) + return; + + self.anchor = spawn( "script_origin", self.origin ); + self.anchor.angles = self.angles; + self linkto( self.anchor ); + + if ( !isdefined( spot.angles ) ) + spot.angles = ( 0, 0, 0 ); + + self ghost(); + self.anchor moveto( spot.origin, 0.05 ); + + self.anchor waittill( "movedone" ); + + target_org = get_desired_origin(); + + if ( isdefined( target_org ) ) + { + anim_ang = vectortoangles( target_org - self.origin ); + self.anchor rotateto( ( 0, anim_ang[1], 0 ), 0.05 ); + + self.anchor waittill( "rotatedone" ); + } + + if ( isdefined( level.zombie_spawn_fx ) ) + playfx( level.zombie_spawn_fx, spot.origin ); + + self unlink(); + + if ( isdefined( self.anchor ) ) + self.anchor delete(); + + self show(); + self notify( "risen", spot.script_string ); + } + } +} + +do_zombie_rise( spot ) +{ + self endon( "death" ); + self.in_the_ground = 1; + + if ( isdefined( self.anchor ) ) + self.anchor delete(); + + self.anchor = spawn( "script_origin", self.origin ); + self.anchor.angles = self.angles; + self linkto( self.anchor ); + + if ( !isdefined( spot.angles ) ) + spot.angles = ( 0, 0, 0 ); + + anim_org = spot.origin; + anim_ang = spot.angles; + anim_org += ( 0, 0, 0 ); + self ghost(); + self.anchor moveto( anim_org, 0.05 ); + + self.anchor waittill( "movedone" ); + + target_org = get_desired_origin(); + + if ( isdefined( target_org ) ) + { + anim_ang = vectortoangles( target_org - self.origin ); + self.anchor rotateto( ( 0, anim_ang[1], 0 ), 0.05 ); + + self.anchor waittill( "rotatedone" ); + } + + self unlink(); + + if ( isdefined( self.anchor ) ) + self.anchor delete(); + + self thread hide_pop(); + level thread zombie_rise_death( self, spot ); + spot thread zombie_rise_fx( self ); + substate = 0; + + if ( self.zombie_move_speed == "walk" ) + substate = randomint( 2 ); + else if ( self.zombie_move_speed == "run" ) + substate = 2; + else if ( self.zombie_move_speed == "sprint" ) + substate = 3; + + self orientmode( "face default" ); + self animscripted( self.origin, spot.angles, "zm_rise", substate ); + self maps\mp\animscripts\zm_shared::donotetracks( "rise_anim", ::handle_rise_notetracks, spot ); + self notify( "rise_anim_finished" ); + spot notify( "stop_zombie_rise_fx" ); + self.in_the_ground = 0; + self notify( "risen", spot.script_string ); +} + +hide_pop() +{ + self endon( "death" ); + wait 0.5; + + if ( isdefined( self ) ) + { + self show(); + wait_network_frame(); + + if ( isdefined( self ) ) + self.create_eyes = 1; + } +} + +handle_rise_notetracks( note, spot ) +{ + if ( note == "deathout" || note == "deathhigh" ) + { + self.zombie_rise_death_out = 1; + self notify( "zombie_rise_death_out" ); + wait 2; + spot notify( "stop_zombie_rise_fx" ); + } +} + +zombie_rise_death( zombie, spot ) +{ + zombie.zombie_rise_death_out = 0; + zombie endon( "rise_anim_finished" ); + + while ( isdefined( zombie ) && isdefined( zombie.health ) && zombie.health > 1 ) + zombie waittill( "damage", amount ); + + spot notify( "stop_zombie_rise_fx" ); + + if ( isdefined( zombie ) ) + { + zombie.deathanim = zombie get_rise_death_anim(); + zombie stopanimscripted(); + } +} + +zombie_rise_fx( zombie ) +{ + if ( !( isdefined( level.riser_fx_on_client ) && level.riser_fx_on_client ) ) + { + self thread zombie_rise_dust_fx( zombie ); + self thread zombie_rise_burst_fx( zombie ); + } + else + self thread zombie_rise_burst_fx( zombie ); + + zombie endon( "death" ); + self endon( "stop_zombie_rise_fx" ); + wait 1; + + if ( zombie.zombie_move_speed != "sprint" ) + wait 1; +} + +zombie_rise_burst_fx( zombie ) +{ + self endon( "stop_zombie_rise_fx" ); + self endon( "rise_anim_finished" ); + + if ( isdefined( self.script_parameters ) && self.script_parameters == "in_water" && !( isdefined( level._no_water_risers ) && level._no_water_risers ) ) + zombie setclientfield( "zombie_riser_fx_water", 1 ); + else if ( isdefined( self.script_parameters ) && self.script_parameters == "in_foliage" && ( isdefined( level._foliage_risers ) && level._foliage_risers ) ) + zombie setclientfield( "zombie_riser_fx_foliage", 1 ); + else if ( isdefined( self.script_parameters ) && self.script_parameters == "in_snow" ) + zombie setclientfield( "zombie_riser_fx", 1 ); + else if ( isdefined( zombie.zone_name ) && isdefined( level.zones[zombie.zone_name] ) ) + { + low_g_zones = getentarray( zombie.zone_name, "targetname" ); + + if ( isdefined( low_g_zones[0].script_string ) && low_g_zones[0].script_string == "lowgravity" ) + zombie setclientfield( "zombie_riser_fx_lowg", 1 ); + else + zombie setclientfield( "zombie_riser_fx", 1 ); + } + else + zombie setclientfield( "zombie_riser_fx", 1 ); +} + +zombie_rise_dust_fx( zombie ) +{ + dust_tag = "J_SpineUpper"; + self endon( "stop_zombie_rise_dust_fx" ); + self thread stop_zombie_rise_dust_fx( zombie ); + wait 2; + dust_time = 5.5; + dust_interval = 0.3; + + if ( isdefined( self.script_string ) && self.script_string == "in_water" ) + { + for ( t = 0; t < dust_time; t += dust_interval ) + { + playfxontag( level._effect["rise_dust_water"], zombie, dust_tag ); + wait( dust_interval ); + } + } + else if ( isdefined( self.script_string ) && self.script_string == "in_snow" ) + { + for ( t = 0; t < dust_time; t += dust_interval ) + { + playfxontag( level._effect["rise_dust_snow"], zombie, dust_tag ); + wait( dust_interval ); + } + } + else if ( isdefined( self.script_string ) && self.script_string == "in_foliage" ) + { + for ( t = 0; t < dust_time; t += dust_interval ) + { + playfxontag( level._effect["rise_dust_foliage"], zombie, dust_tag ); + wait( dust_interval ); + } + } + else + { + for ( t = 0; t < dust_time; t += dust_interval ) + { + playfxontag( level._effect["rise_dust"], zombie, dust_tag ); + wait( dust_interval ); + } + } +} + +stop_zombie_rise_dust_fx( zombie ) +{ + zombie waittill( "death" ); + + self notify( "stop_zombie_rise_dust_fx" ); +} + +get_rise_death_anim() +{ + if ( self.zombie_rise_death_out ) + return "zm_rise_death_out"; + + self.noragdoll = 1; + self.nodeathragdoll = 1; + return "zm_rise_death_in"; +} + +zombie_tesla_head_gib() +{ + self endon( "death" ); + + if ( self.animname == "quad_zombie" ) + return; + + if ( randomint( 100 ) < level.zombie_vars["tesla_head_gib_chance"] ) + { + wait( randomfloatrange( 0.53, 1.0 ) ); + self zombie_head_gib(); + } + else + network_safe_play_fx_on_tag( "tesla_death_fx", 2, level._effect["tesla_shock_eyes"], self, "J_Eyeball_LE" ); +} + +play_ambient_zombie_vocals() +{ + self endon( "death" ); + + if ( self.animname == "monkey_zombie" || isdefined( self.is_avogadro ) && self.is_avogadro ) + return; + + while ( true ) + { + type = "ambient"; + float = 2; + + if ( !isdefined( self.zombie_move_speed ) ) + { + wait 0.5; + continue; + } + + switch ( self.zombie_move_speed ) + { + case "walk": + type = "ambient"; + float = 4; + break; + case "run": + type = "sprint"; + float = 4; + break; + case "sprint": + type = "sprint"; + float = 4; + break; + } + + if ( self.animname == "zombie" && !self.has_legs ) + type = "crawler"; + else if ( self.animname == "thief_zombie" || self.animname == "leaper_zombie" ) + float = 1.2; + + name = self.animname; + + if ( isdefined( self.sndname ) ) + name = self.sndname; + + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( type, name ); + wait( randomfloatrange( 1, float ) ); + } +} + +zombie_complete_emerging_into_playable_area() +{ + self.completed_emerging_into_playable_area = 1; + self notify( "completed_emerging_into_playable_area" ); + self.no_powerups = 0; + self thread zombie_free_cam_allowed(); +} + +zombie_free_cam_allowed() +{ + self endon( "death" ); + wait 1.5; + self setfreecameralockonallowed( 1 ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_stats.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_stats.gsc new file mode 100644 index 0000000..55f8469 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_stats.gsc @@ -0,0 +1,981 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\zombies\_zm_pers_upgrades; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\gametypes_zm\_globallogic; + +init() +{ + level.player_stats_init = ::player_stats_init; + level.add_client_stat = ::add_client_stat; + level.increment_client_stat = ::increment_client_stat; + level.track_gibs = ::do_stats_for_gibs; +} + +player_stats_init() +{ + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "kills", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "suicides", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "downs", 0 ); + self.downs = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "downs" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "revives", 0 ); + self.revives = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "revives" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "perks_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "headshots", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "gibs", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "head_gibs", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "right_arm_gibs", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "left_arm_gibs", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "right_leg_gibs", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "left_leg_gibs", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "melee_kills", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "grenade_kills", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "doors_purchased", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "distance_traveled", 0 ); + self.distance_traveled = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "distance_traveled" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "total_shots", 0 ); + self.total_shots = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "total_shots" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "hits", 0 ); + self.hits = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "hits" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "deaths", 0 ); + self.deaths = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "deaths" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "boards", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "wins", 0 ); + self.totalwins = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "totalwins" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "losses", 0 ); + self.totallosses = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "totallosses" ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "failed_revives", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sacrifices", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "failed_sacrifices", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "drops", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "nuke_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "insta_kill_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "full_ammo_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "double_points_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "meat_stink_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "carpenter_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "fire_sale_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zombie_blood_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "time_bomb_ammo_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "use_magicbox", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "grabbed_from_magicbox", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "use_perk_random", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "grabbed_from_perk_random", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "use_pap", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pap_weapon_grabbed", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pap_weapon_not_grabbed", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_armorvest_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_quickrevive_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_rof_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_fastreload_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_flakjacket_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_additionalprimaryweapon_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_longersprint_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_deadshot_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_scavenger_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_finalstand_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_grenadepulldeath_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "specialty_nomotionsensor" + "_drank", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "claymores_planted", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "claymores_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "ballistic_knives_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "wallbuy_weapons_purchased", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "ammo_purchased", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "upgraded_ammo_purchased", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "power_turnedon", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "power_turnedoff", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "planted_buildables_pickedup", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buildables_built", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "time_played_total", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "weighted_rounds_played", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "contaminations_received", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "contaminations_given", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zdogs_killed", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zdog_rounds_finished", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zdog_rounds_lost", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "killed_by_zdog", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "screecher_minigames_won", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "screecher_minigames_lost", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "screechers_killed", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "screecher_teleporters_used", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "avogadro_defeated", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "killed_by_avogadro", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "cheat_too_many_weapons", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "cheat_out_of_playable", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "cheat_too_friendly", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "cheat_total", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "prison_tomahawk_acquired", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "prison_fan_trap_used", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "prison_acid_trap_used", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "prison_sniper_tower_used", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "prison_ee_good_ending", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "prison_ee_bad_ending", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "prison_ee_spoon_acquired", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "prison_brutus_killed", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_lsat_purchased", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_fountain_transporter_used", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_ghost_killed", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_ghost_drained_player", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_ghost_perk_acquired", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_booze_given", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_booze_break_barricade", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_given", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_protect", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_build_buildable", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_wallbuy", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_fetch_buildable", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_box_lock", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_box_move", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_box_spin", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_powerup_cycle", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_dance", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_sloth_candy_crawler", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_wallbuy_placed", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_wallbuy_placed_ak74u_zm", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_wallbuy_placed_an94_zm", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_wallbuy_placed_pdw57_zm", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_wallbuy_placed_svu_zm", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_wallbuy_placed_tazer_knuckles_zm", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "buried_wallbuy_placed_870mcs_zm", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomb_mechz_killed", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomb_giant_robot_stomped", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomb_giant_robot_accessed", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomb_generator_captured", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomb_generator_defended", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomb_generator_lost", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomb_dig", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomb_golden_shovel", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomb_golden_hard_hat", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "tomb_perk_extension", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_boarding", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_revivenoperk", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_multikill_headshots", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_cash_back_bought", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_cash_back_prone", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_insta_kill", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_nube_5_times", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_jugg", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_jugg_downgrade_count", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_carpenter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_max_round_reached", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_flopper_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_perk_lose_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_pistol_points_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_double_points_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_sniper_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_marathon_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_box_weapon_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_zombie_kiting_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_max_ammo_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_melee_bonus_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_nube_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_last_man_standing_counter", 0, 1 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "pers_reload_speed_counter", 0, 1 ); + self maps\mp\zombies\_zm_pers_upgrades::pers_abilities_init_globals(); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "score", 0 ); + + if ( level.resetplayerscoreeveryround ) + self.pers["score"] = 0; + + self.pers["score"] = level.player_starting_points; + self.score = self.pers["score"]; + self incrementplayerstat( "score", self.score ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zteam", 0 ); + + if ( isdefined( level.level_specific_stats_init ) ) + [[ level.level_specific_stats_init ]](); + + if ( !isdefined( self.stats_this_frame ) ) + { + self.pers_upgrade_force_test = 1; + self.stats_this_frame = []; + self.pers_upgrades_awarded = []; + } +} + +update_players_stats_at_match_end( players ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + game_mode = getdvar( "ui_gametype" ); + game_mode_group = level.scr_zm_ui_gametype_group; + map_location_name = level.scr_zm_map_start_location; + + if ( map_location_name == "" ) + map_location_name = "default"; + + if ( isdefined( level.gamemodulewinningteam ) ) + { + if ( level.gamemodulewinningteam == "B" ) + matchrecorderincrementheaderstat( "winningTeam", 1 ); + else if ( level.gamemodulewinningteam == "A" ) + matchrecorderincrementheaderstat( "winningTeam", 2 ); + } + + recordmatchsummaryzombieendgamedata( game_mode, game_mode_group, map_location_name, level.round_number ); + newtime = gettime(); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( player is_bot() ) + continue; + + distance = player get_stat_distance_traveled(); + player addplayerstatwithgametype( "distance_traveled", distance ); + player add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "time_played_total", player.pers["time_played_total"] ); + recordplayermatchend( player ); + recordplayerstats( player, "presentAtEnd", 1 ); + player maps\mp\zombies\_zm_weapons::updateweapontimingszm( newtime ); + + if ( isdefined( level._game_module_stat_update_func ) ) + player [[ level._game_module_stat_update_func ]](); + + old_high_score = player get_game_mode_stat( game_mode, "score" ); + + if ( player.score_total > old_high_score ) + player set_game_mode_stat( game_mode, "score", player.score_total ); + + if ( gamemodeismode( level.gamemode_public_match ) ) + { + player gamehistoryfinishmatch( 4, 0, 0, 0, 0, 0 ); + + if ( isdefined( player.pers["matchesPlayedStatsTracked"] ) ) + { + gamemode = maps\mp\gametypes_zm\_globallogic::getcurrentgamemode(); + player maps\mp\gametypes_zm\_globallogic::incrementmatchcompletionstat( gamemode, "played", "completed" ); + + if ( isdefined( player.pers["matchesHostedStatsTracked"] ) ) + { + player maps\mp\gametypes_zm\_globallogic::incrementmatchcompletionstat( gamemode, "hosted", "completed" ); + player.pers["matchesHostedStatsTracked"] = undefined; + } + + player.pers["matchesPlayedStatsTracked"] = undefined; + } + } + + if ( !isdefined( player.pers["previous_distance_traveled"] ) ) + player.pers["previous_distance_traveled"] = 0; + + distancethisround = int( player.pers["distance_traveled"] - player.pers["previous_distance_traveled"] ); + player.pers["previous_distance_traveled"] = player.pers["distance_traveled"]; + player incrementplayerstat( "distance_traveled", distancethisround ); + } +} + +update_playing_utc_time( matchendutctime ) +{ + current_days = int( matchendutctime / 86400 ); + last_days = self get_global_stat( "TIMESTAMPLASTDAY1" ); + last_days = int( last_days / 86400 ); + diff_days = current_days - last_days; + timestamp_name = ""; + + if ( diff_days > 0 ) + { + for ( i = 5; i > diff_days; i-- ) + { + timestamp_name = "TIMESTAMPLASTDAY" + i - diff_days; + timestamp_name_to = "TIMESTAMPLASTDAY" + i; + timestamp_value = self get_global_stat( timestamp_name ); + self set_global_stat( timestamp_name_to, timestamp_value ); + } + + for ( i = 2; i <= diff_days && i < 6; i++ ) + { + timestamp_name = "TIMESTAMPLASTDAY" + i; + self set_global_stat( timestamp_name, 0 ); + } + + self set_global_stat( "TIMESTAMPLASTDAY1", matchendutctime ); + } +} + +survival_classic_custom_stat_update() +{ + +} + +grief_custom_stat_update() +{ + +} + +add_game_mode_group_stat( game_mode, stat_name, value ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self adddstat( "PlayerStatsByGameTypeGroup", game_mode, stat_name, "statValue", value ); +} + +set_game_mode_group_stat( game_mode, stat_name, value ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self setdstat( "PlayerStatsByGameTypeGroup", game_mode, stat_name, "statValue", value ); +} + +get_game_mode_group_stat( game_mode, stat_name ) +{ + return self getdstat( "PlayerStatsByGameTypeGroup", game_mode, stat_name, "statValue" ); +} + +add_game_mode_stat( game_mode, stat_name, value ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self adddstat( "PlayerStatsByGameType", game_mode, stat_name, "statValue", value ); +} + +set_game_mode_stat( game_mode, stat_name, value ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self setdstat( "PlayerStatsByGameType", game_mode, stat_name, "statValue", value ); +} + +get_game_mode_stat( game_mode, stat_name ) +{ + return self getdstat( "PlayerStatsByGameType", game_mode, stat_name, "statValue" ); +} + +get_global_stat( stat_name ) +{ + return self getdstat( "PlayerStatsList", stat_name, "StatValue" ); +} + +set_global_stat( stat_name, value ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self setdstat( "PlayerStatsList", stat_name, "StatValue", value ); +} + +add_global_stat( stat_name, value ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self adddstat( "PlayerStatsList", stat_name, "StatValue", value ); +} + +get_map_stat( stat_name, map = level.script ) +{ + return self getdstat( "PlayerStatsByMap", map, stat_name ); +} + +set_map_stat( stat_name, value, map = level.script ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self setdstat( "PlayerStatsByMap", map, stat_name, value ); +} + +add_map_stat( stat_name, value, map = level.script ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self adddstat( "PlayerStatsByMap", map, stat_name, value ); +} + +get_location_gametype_stat( start_location, game_type, stat_name ) +{ + return self getdstat( "PlayerStatsByStartLocation", start_location, "startLocationGameTypeStats", game_type, "stats", stat_name, "StatValue" ); +} + +set_location_gametype_stat( start_location, game_type, stat_name, value ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self setdstat( "PlayerStatsByStartLocation", start_location, "startLocationGameTypeStats", game_type, "stats", stat_name, "StatValue", value ); +} + +add_location_gametype_stat( start_location, game_type, stat_name, value ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self adddstat( "PlayerStatsByStartLocation", start_location, "startLocationGameTypeStats", game_type, "stats", stat_name, "StatValue", value ); +} + +get_map_weaponlocker_stat( stat_name, map = level.script ) +{ + return self getdstat( "PlayerStatsByMap", map, "weaponLocker", stat_name ); +} + +set_map_weaponlocker_stat( stat_name, value, map = level.script ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + if ( isdefined( value ) ) + self setdstat( "PlayerStatsByMap", map, "weaponLocker", stat_name, value ); + else + self setdstat( "PlayerStatsByMap", map, "weaponLocker", stat_name, 0 ); +} + +add_map_weaponlocker_stat( stat_name, value, map = level.script ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self adddstat( "PlayerStatsByMap", map, "weaponLocker", stat_name, value ); +} + +has_stored_weapondata( map = level.script ) +{ + storedweapon = self get_map_weaponlocker_stat( "name", map ); + + if ( !isdefined( storedweapon ) || isstring( storedweapon ) && storedweapon == "" || isint( storedweapon ) && storedweapon == 0 ) + return false; + + return true; +} + +get_stored_weapondata( map = level.script ) +{ + if ( self has_stored_weapondata( map ) ) + { + weapondata = []; + weapondata["name"] = self get_map_weaponlocker_stat( "name", map ); + weapondata["lh_clip"] = self get_map_weaponlocker_stat( "lh_clip", map ); + weapondata["clip"] = self get_map_weaponlocker_stat( "clip", map ); + weapondata["stock"] = self get_map_weaponlocker_stat( "stock", map ); + weapondata["alt_clip"] = self get_map_weaponlocker_stat( "alt_clip", map ); + weapondata["alt_stock"] = self get_map_weaponlocker_stat( "alt_stock", map ); + return weapondata; + } + + return undefined; +} + +clear_stored_weapondata( map = level.script ) +{ + self set_map_weaponlocker_stat( "name", "", map ); + self set_map_weaponlocker_stat( "lh_clip", 0, map ); + self set_map_weaponlocker_stat( "clip", 0, map ); + self set_map_weaponlocker_stat( "stock", 0, map ); + self set_map_weaponlocker_stat( "alt_clip", 0, map ); + self set_map_weaponlocker_stat( "alt_stock", 0, map ); +} + +set_stored_weapondata( weapondata, map = level.script ) +{ + self set_map_weaponlocker_stat( "name", weapondata["name"], map ); + self set_map_weaponlocker_stat( "lh_clip", weapondata["lh_clip"], map ); + self set_map_weaponlocker_stat( "clip", weapondata["clip"], map ); + self set_map_weaponlocker_stat( "stock", weapondata["stock"], map ); + self set_map_weaponlocker_stat( "alt_clip", weapondata["alt_clip"], map ); + self set_map_weaponlocker_stat( "alt_stock", weapondata["alt_stock"], map ); +} + +add_client_stat( stat_name, stat_value, include_gametype ) +{ + if ( getdvar( "ui_zm_mapstartlocation" ) == "" || is_true( level.zm_disable_recording_stats ) ) + return; + + if ( !isdefined( include_gametype ) ) + include_gametype = 1; + + self maps\mp\gametypes_zm\_globallogic_score::incpersstat( stat_name, stat_value, 0, include_gametype ); + self.stats_this_frame[stat_name] = 1; +} + +increment_player_stat( stat_name ) +{ + if ( getdvar( "ui_zm_mapstartlocation" ) == "" || is_true( level.zm_disable_recording_stats ) ) + return; + + self incrementplayerstat( stat_name, 1 ); +} + +increment_root_stat( stat_name, stat_value ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self adddstat( stat_name, stat_value ); +} + +increment_client_stat( stat_name, include_gametype ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + add_client_stat( stat_name, 1, include_gametype ); +} + +set_client_stat( stat_name, stat_value, include_gametype ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + current_stat_count = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( stat_name ); + self maps\mp\gametypes_zm\_globallogic_score::incpersstat( stat_name, stat_value - current_stat_count, 0, include_gametype ); + self.stats_this_frame[stat_name] = 1; +} + +zero_client_stat( stat_name, include_gametype ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + current_stat_count = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( stat_name ); + self maps\mp\gametypes_zm\_globallogic_score::incpersstat( stat_name, current_stat_count * -1, 0, include_gametype ); + self.stats_this_frame[stat_name] = 1; +} + +increment_map_cheat_stat( stat_name ) +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + self adddstat( "PlayerStatsByMap", level.script, "cheats", stat_name, 1 ); +} + +get_stat_distance_traveled() +{ + miles = int( self.pers["distance_traveled"] / 63360 ); + remainder = self.pers["distance_traveled"] / 63360 - miles; + + if ( miles < 1 && remainder < 0.5 ) + miles = 1; + else if ( remainder >= 0.5 ) + miles++; + + return miles; +} + +get_stat_round_number() +{ + return level.round_number; +} + +get_stat_combined_rank_value_survival_classic() +{ + rounds = get_stat_round_number(); + kills = self.pers["kills"]; + + if ( rounds > 99 ) + rounds = 99; + + result = rounds * 10000000 + kills; + return result; +} + +get_stat_combined_rank_value_grief() +{ + wins = self.pers["wins"]; + losses = self.pers["losses"]; + + if ( wins > 9999 ) + wins = 9999; + + if ( losses > 9999 ) + losses = 9999; + + losses_value = 9999 - losses; + result = wins * 10000 + losses_value; + return result; +} + +update_global_counters_on_match_end() +{ + if ( is_true( level.zm_disable_recording_stats ) ) + return; + + deaths = 0; + kills = 0; + melee_kills = 0; + headshots = 0; + suicides = 0; + downs = 0; + revives = 0; + perks_drank = 0; + gibs = 0; + doors_purchased = 0; + distance_traveled = 0; + total_shots = 0; + boards = 0; + sacrifices = 0; + drops = 0; + nuke_pickedup = 0; + insta_kill_pickedup = 0; + full_ammo_pickedup = 0; + double_points_pickedup = 0; + meat_stink_pickedup = 0; + carpenter_pickedup = 0; + fire_sale_pickedup = 0; + zombie_blood_pickedup = 0; + use_magicbox = 0; + grabbed_from_magicbox = 0; + use_perk_random = 0; + grabbed_from_perk_random = 0; + use_pap = 0; + pap_weapon_grabbed = 0; + specialty_armorvest_drank = 0; + specialty_quickrevive_drank = 0; + specialty_fastreload_drank = 0; + specialty_longersprint_drank = 0; + specialty_scavenger_drank = 0; + specialty_rof_drank = 0; + specialty_deadshot_drank = 0; + specialty_flakjacket_drank = 0; + specialty_additionalprimaryweapon_drank = 0; + specialty_finalstand_drank = 0; + specialty_grenadepulldeath_drank = 0; + specialty_nomotionsensor_drank = 0; + claymores_planted = 0; + claymores_pickedup = 0; + ballistic_knives_pickedup = 0; + wallbuy_weapons_purchased = 0; + power_turnedon = 0; + power_turnedoff = 0; + planted_buildables_pickedup = 0; + ammo_purchased = 0; + upgraded_ammo_purchased = 0; + buildables_built = 0; + time_played = 0; + contaminations_received = 0; + contaminations_given = 0; + cheat_too_many_weapons = 0; + cheat_out_of_playable_area = 0; + cheat_too_friendly = 0; + cheat_total = 0; + prison_tomahawk_acquired = 0; + prison_fan_trap_used = 0; + prison_acid_trap_used = 0; + prison_sniper_tower_used = 0; + prison_ee_good_ending = 0; + prison_ee_bad_ending = 0; + prison_ee_spoon_acquired = 0; + prison_brutus_killed = 0; + buried_lsat_purchased = 0; + buried_fountain_transporter_used = 0; + buried_ghost_killed = 0; + buried_ghost_drained_player = 0; + buried_ghost_perk_acquired = 0; + buried_sloth_booze_given = 0; + buried_sloth_booze_break_barricade = 0; + buried_sloth_candy_given = 0; + buried_sloth_candy_protect = 0; + buried_sloth_candy_build_buildable = 0; + buried_sloth_candy_wallbuy = 0; + buried_sloth_candy_fetch_buildable = 0; + buried_sloth_candy_box_lock = 0; + buried_sloth_candy_box_move = 0; + buried_sloth_candy_box_spin = 0; + buried_sloth_candy_powerup_cycle = 0; + buried_sloth_candy_dance = 0; + buried_sloth_candy_crawler = 0; + buried_wallbuy_placed = 0; + buried_wallbuy_placed_ak74u_zm = 0; + buried_wallbuy_placed_an94_zm = 0; + buried_wallbuy_placed_pdw57_zm = 0; + buried_wallbuy_placed_svu_zm = 0; + buried_wallbuy_placed_tazer_knuckles_zm = 0; + buried_wallbuy_placed_870mcs_zm = 0; + tomb_mechz_killed = 0; + tomb_giant_robot_stomped = 0; + tomb_giant_robot_accessed = 0; + tomb_generator_captured = 0; + tomb_generator_defended = 0; + tomb_generator_lost = 0; + tomb_dig = 0; + tomb_golden_shovel = 0; + tomb_golden_hard_hat = 0; + tomb_perk_extension = 0; + players = get_players(); + + foreach ( player in players ) + { + deaths += player.pers["deaths"]; + kills += player.pers["kills"]; + headshots += player.pers["headshots"]; + suicides += player.pers["suicides"]; + melee_kills += player.pers["melee_kills"]; + downs += player.pers["downs"]; + revives += player.pers["revives"]; + perks_drank += player.pers["perks_drank"]; + specialty_armorvest_drank += player.pers["specialty_armorvest_drank"]; + specialty_quickrevive_drank += player.pers["specialty_quickrevive_drank"]; + specialty_fastreload_drank += player.pers["specialty_fastreload_drank"]; + specialty_longersprint_drank += player.pers["specialty_longersprint_drank"]; + specialty_rof_drank += player.pers["specialty_rof_drank"]; + specialty_deadshot_drank += player.pers["specialty_deadshot_drank"]; + specialty_scavenger_drank += player.pers["specialty_scavenger_drank"]; + specialty_flakjacket_drank += player.pers["specialty_flakjacket_drank"]; + specialty_additionalprimaryweapon_drank += player.pers["specialty_additionalprimaryweapon_drank"]; + specialty_finalstand_drank += player.pers["specialty_finalstand_drank"]; + specialty_grenadepulldeath_drank += player.pers["specialty_grenadepulldeath_drank"]; + specialty_nomotionsensor_drank += player.pers["specialty_nomotionsensor" + "_drank"]; + gibs += player.pers["gibs"]; + doors_purchased += player.pers["doors_purchased"]; + distance_traveled += player get_stat_distance_traveled(); + boards += player.pers["boards"]; + sacrifices += player.pers["sacrifices"]; + drops += player.pers["drops"]; + nuke_pickedup += player.pers["nuke_pickedup"]; + insta_kill_pickedup += player.pers["insta_kill_pickedup"]; + full_ammo_pickedup += player.pers["full_ammo_pickedup"]; + double_points_pickedup += player.pers["double_points_pickedup"]; + meat_stink_pickedup += player.pers["meat_stink_pickedup"]; + carpenter_pickedup += player.pers["carpenter_pickedup"]; + fire_sale_pickedup += player.pers["fire_sale_pickedup"]; + zombie_blood_pickedup += player.pers["zombie_blood_pickedup"]; + use_magicbox += player.pers["use_magicbox"]; + grabbed_from_magicbox += player.pers["grabbed_from_magicbox"]; + use_perk_random += player.pers["use_perk_random"]; + grabbed_from_perk_random += player.pers["grabbed_from_perk_random"]; + use_pap += player.pers["use_pap"]; + pap_weapon_grabbed += player.pers["pap_weapon_grabbed"]; + claymores_planted += player.pers["claymores_planted"]; + claymores_pickedup += player.pers["claymores_pickedup"]; + ballistic_knives_pickedup += player.pers["ballistic_knives_pickedup"]; + wallbuy_weapons_purchased += player.pers["wallbuy_weapons_purchased"]; + power_turnedon += player.pers["power_turnedon"]; + power_turnedoff += player.pers["power_turnedoff"]; + planted_buildables_pickedup += player.pers["planted_buildables_pickedup"]; + buildables_built += player.pers["buildables_built"]; + ammo_purchased += player.pers["ammo_purchased"]; + upgraded_ammo_purchased += player.pers["upgraded_ammo_purchased"]; + total_shots += player.total_shots; + time_played += player.pers["time_played_total"]; + contaminations_received += player.pers["contaminations_received"]; + contaminations_given += player.pers["contaminations_given"]; + cheat_too_many_weapons += player.pers["cheat_too_many_weapons"]; + cheat_out_of_playable_area += player.pers["cheat_out_of_playable"]; + cheat_too_friendly += player.pers["cheat_too_friendly"]; + cheat_total += player.pers["cheat_total"]; + prison_tomahawk_acquired += player.pers["prison_tomahawk_acquired"]; + prison_fan_trap_used += player.pers["prison_fan_trap_used"]; + prison_acid_trap_used += player.pers["prison_acid_trap_used"]; + prison_sniper_tower_used += player.pers["prison_sniper_tower_used"]; + prison_ee_good_ending += player.pers["prison_ee_good_ending"]; + prison_ee_bad_ending += player.pers["prison_ee_bad_ending"]; + prison_ee_spoon_acquired += player.pers["prison_ee_spoon_acquired"]; + prison_brutus_killed += player.pers["prison_brutus_killed"]; + buried_lsat_purchased += player.pers["buried_lsat_purchased"]; + buried_fountain_transporter_used += player.pers["buried_fountain_transporter_used"]; + buried_ghost_killed += player.pers["buried_ghost_killed"]; + buried_ghost_drained_player += player.pers["buried_ghost_drained_player"]; + buried_ghost_perk_acquired += player.pers["buried_ghost_perk_acquired"]; + buried_sloth_booze_given += player.pers["buried_sloth_booze_given"]; + buried_sloth_booze_break_barricade += player.pers["buried_sloth_booze_break_barricade"]; + buried_sloth_candy_given += player.pers["buried_sloth_candy_given"]; + buried_sloth_candy_protect += player.pers["buried_sloth_candy_protect"]; + buried_sloth_candy_build_buildable += player.pers["buried_sloth_candy_build_buildable"]; + buried_sloth_candy_wallbuy += player.pers["buried_sloth_candy_wallbuy"]; + buried_sloth_candy_fetch_buildable += player.pers["buried_sloth_candy_fetch_buildable"]; + buried_sloth_candy_box_lock += player.pers["buried_sloth_candy_box_lock"]; + buried_sloth_candy_box_move += player.pers["buried_sloth_candy_box_move"]; + buried_sloth_candy_box_spin += player.pers["buried_sloth_candy_box_spin"]; + buried_sloth_candy_powerup_cycle += player.pers["buried_sloth_candy_powerup_cycle"]; + buried_sloth_candy_dance += player.pers["buried_sloth_candy_dance"]; + buried_sloth_candy_crawler += player.pers["buried_sloth_candy_crawler"]; + buried_wallbuy_placed += player.pers["buried_wallbuy_placed"]; + buried_wallbuy_placed_ak74u_zm += player.pers["buried_wallbuy_placed_ak74u_zm"]; + buried_wallbuy_placed_an94_zm += player.pers["buried_wallbuy_placed_an94_zm"]; + buried_wallbuy_placed_pdw57_zm += player.pers["buried_wallbuy_placed_pdw57_zm"]; + buried_wallbuy_placed_svu_zm += player.pers["buried_wallbuy_placed_svu_zm"]; + buried_wallbuy_placed_tazer_knuckles_zm += player.pers["buried_wallbuy_placed_tazer_knuckles_zm"]; + buried_wallbuy_placed_870mcs_zm += player.pers["buried_wallbuy_placed_870mcs_zm"]; + tomb_mechz_killed += player.pers["tomb_mechz_killed"]; + tomb_giant_robot_stomped += player.pers["tomb_giant_robot_stomped"]; + tomb_giant_robot_accessed += player.pers["tomb_giant_robot_accessed"]; + tomb_generator_captured += player.pers["tomb_generator_captured"]; + tomb_generator_defended += player.pers["tomb_generator_defended"]; + tomb_generator_lost += player.pers["tomb_generator_lost"]; + tomb_dig += player.pers["tomb_dig"]; + tomb_golden_shovel += player.pers["tomb_golden_shovel"]; + tomb_golden_hard_hat += player.pers["tomb_golden_hard_hat"]; + tomb_perk_extension += player.pers["tomb_perk_extension"]; + } + + game_mode = getdvar( "ui_gametype" ); + incrementcounter( "global_zm_" + game_mode, 1 ); + incrementcounter( "global_zm_games", 1 ); + + if ( "zclassic" == game_mode || "zm_nuked" == level.script ) + incrementcounter( "global_zm_games_" + level.script, 1 ); + + incrementcounter( "global_zm_killed", level.global_zombies_killed ); + incrementcounter( "global_zm_killed_by_players", kills ); + incrementcounter( "global_zm_killed_by_traps", level.zombie_trap_killed_count ); + incrementcounter( "global_zm_headshots", headshots ); + incrementcounter( "global_zm_suicides", suicides ); + incrementcounter( "global_zm_melee_kills", melee_kills ); + incrementcounter( "global_zm_downs", downs ); + incrementcounter( "global_zm_deaths", deaths ); + incrementcounter( "global_zm_revives", revives ); + incrementcounter( "global_zm_perks_drank", perks_drank ); + incrementcounter( "global_zm_specialty_armorvest_drank", specialty_armorvest_drank ); + incrementcounter( "global_zm_specialty_quickrevive_drank", specialty_quickrevive_drank ); + incrementcounter( "global_zm_specialty_fastreload_drank", specialty_fastreload_drank ); + incrementcounter( "global_zm_specialty_longersprint_drank", specialty_longersprint_drank ); + incrementcounter( "global_zm_specialty_rof_drank", specialty_rof_drank ); + incrementcounter( "global_zm_specialty_deadshot_drank", specialty_deadshot_drank ); + incrementcounter( "global_zm_specialty_scavenger_drank", specialty_scavenger_drank ); + incrementcounter( "global_zm_specialty_flakjacket_drank", specialty_flakjacket_drank ); + incrementcounter( "global_zm_specialty_additionalprimaryweapon_drank", specialty_additionalprimaryweapon_drank ); + incrementcounter( "global_zm_specialty_finalstand_drank", specialty_finalstand_drank ); + incrementcounter( "global_zm_specialty_grenadepulldeath_drank", specialty_grenadepulldeath_drank ); + incrementcounter( "global_zm_" + "specialty_nomotionsensor" + "_drank", specialty_nomotionsensor_drank ); + incrementcounter( "global_zm_gibs", gibs ); + incrementcounter( "global_zm_distance_traveled", int( distance_traveled ) ); + incrementcounter( "global_zm_doors_purchased", doors_purchased ); + incrementcounter( "global_zm_boards", boards ); + incrementcounter( "global_zm_sacrifices", sacrifices ); + incrementcounter( "global_zm_drops", drops ); + incrementcounter( "global_zm_total_nuke_pickedup", nuke_pickedup ); + incrementcounter( "global_zm_total_insta_kill_pickedup", insta_kill_pickedup ); + incrementcounter( "global_zm_total_full_ammo_pickedup", full_ammo_pickedup ); + incrementcounter( "global_zm_total_double_points_pickedup", double_points_pickedup ); + incrementcounter( "global_zm_total_meat_stink_pickedup", double_points_pickedup ); + incrementcounter( "global_zm_total_carpenter_pickedup", carpenter_pickedup ); + incrementcounter( "global_zm_total_fire_sale_pickedup", fire_sale_pickedup ); + incrementcounter( "global_zm_total_zombie_blood_pickedup", zombie_blood_pickedup ); + incrementcounter( "global_zm_use_magicbox", use_magicbox ); + incrementcounter( "global_zm_grabbed_from_magicbox", grabbed_from_magicbox ); + incrementcounter( "global_zm_use_perk_random", use_perk_random ); + incrementcounter( "global_zm_grabbed_from_perk_random", grabbed_from_perk_random ); + incrementcounter( "global_zm_use_pap", use_pap ); + incrementcounter( "global_zm_pap_weapon_grabbed", pap_weapon_grabbed ); + incrementcounter( "global_zm_claymores_planted", claymores_planted ); + incrementcounter( "global_zm_claymores_pickedup", claymores_pickedup ); + incrementcounter( "global_zm_ballistic_knives_pickedup", ballistic_knives_pickedup ); + incrementcounter( "global_zm_wallbuy_weapons_purchased", wallbuy_weapons_purchased ); + incrementcounter( "global_zm_power_turnedon", power_turnedon ); + incrementcounter( "global_zm_power_turnedoff", power_turnedoff ); + incrementcounter( "global_zm_planted_buildables_pickedup", planted_buildables_pickedup ); + incrementcounter( "global_zm_buildables_built", buildables_built ); + incrementcounter( "global_zm_ammo_purchased", ammo_purchased ); + incrementcounter( "global_zm_upgraded_ammo_purchased", upgraded_ammo_purchased ); + incrementcounter( "global_zm_total_shots", total_shots ); + incrementcounter( "global_zm_time_played", time_played ); + incrementcounter( "global_zm_contaminations_received", contaminations_received ); + incrementcounter( "global_zm_contaminations_given", contaminations_given ); + incrementcounter( "global_zm_cheat_players_too_friendly", cheat_too_friendly ); + incrementcounter( "global_zm_cheats_cheat_too_many_weapons", cheat_too_many_weapons ); + incrementcounter( "global_zm_cheats_out_of_playable", cheat_out_of_playable_area ); + incrementcounter( "global_zm_total_cheats", cheat_total ); + incrementcounter( "global_zm_prison_tomahawk_acquired", prison_tomahawk_acquired ); + incrementcounter( "global_zm_prison_fan_trap_used", prison_fan_trap_used ); + incrementcounter( "global_zm_prison_acid_trap_used", prison_acid_trap_used ); + incrementcounter( "global_zm_prison_sniper_tower_used", prison_sniper_tower_used ); + incrementcounter( "global_zm_prison_ee_good_ending", prison_ee_good_ending ); + incrementcounter( "global_zm_prison_ee_bad_ending", prison_ee_bad_ending ); + incrementcounter( "global_zm_prison_ee_spoon_acquired", prison_ee_spoon_acquired ); + incrementcounter( "global_zm_prison_brutus_killed", prison_brutus_killed ); + incrementcounter( "global_zm_buried_lsat_purchased", buried_lsat_purchased ); + incrementcounter( "global_zm_buried_fountain_transporter_used", buried_fountain_transporter_used ); + incrementcounter( "global_zm_buried_ghost_killed", buried_ghost_killed ); + incrementcounter( "global_zm_buried_ghost_drained_player", buried_ghost_drained_player ); + incrementcounter( "global_zm_buried_ghost_perk_acquired", buried_ghost_perk_acquired ); + incrementcounter( "global_zm_buried_sloth_booze_given", buried_sloth_booze_given ); + incrementcounter( "global_zm_buried_sloth_booze_break_barricade", buried_sloth_booze_break_barricade ); + incrementcounter( "global_zm_buried_sloth_candy_given", buried_sloth_candy_given ); + incrementcounter( "global_zm_buried_sloth_candy_protect", buried_sloth_candy_protect ); + incrementcounter( "global_zm_buried_sloth_candy_build_buildable", buried_sloth_candy_build_buildable ); + incrementcounter( "global_zm_buried_sloth_candy_wallbuy", buried_sloth_candy_wallbuy ); + incrementcounter( "global_zm_buried_sloth_candy_fetch_buildable", buried_sloth_candy_fetch_buildable ); + incrementcounter( "global_zm_buried_sloth_candy_box_lock", buried_sloth_candy_box_lock ); + incrementcounter( "global_zm_buried_sloth_candy_box_move", buried_sloth_candy_box_move ); + incrementcounter( "global_zm_buried_sloth_candy_box_spin", buried_sloth_candy_box_spin ); + incrementcounter( "global_zm_buried_sloth_candy_powerup_cycle", buried_sloth_candy_powerup_cycle ); + incrementcounter( "global_zm_buried_sloth_candy_dance", buried_sloth_candy_dance ); + incrementcounter( "global_zm_buried_sloth_candy_crawler", buried_sloth_candy_crawler ); + incrementcounter( "global_zm_buried_wallbuy_placed", buried_wallbuy_placed ); + incrementcounter( "global_zm_buried_wallbuy_placed_ak74u_zm", buried_wallbuy_placed_ak74u_zm ); + incrementcounter( "global_zm_buried_wallbuy_placed_an94_zm", buried_wallbuy_placed_an94_zm ); + incrementcounter( "global_zm_buried_wallbuy_placed_pdw57_zm", buried_wallbuy_placed_pdw57_zm ); + incrementcounter( "global_zm_buried_wallbuy_placed_svu_zm", buried_wallbuy_placed_svu_zm ); + incrementcounter( "global_zm_buried_wallbuy_placed_tazer_knuckles_zm", buried_wallbuy_placed_tazer_knuckles_zm ); + incrementcounter( "global_zm_buried_wallbuy_placed_870mcs_zm", buried_wallbuy_placed_870mcs_zm ); + incrementcounter( "global_zm_tomb_mechz_killed", tomb_mechz_killed ); + incrementcounter( "global_zm_tomb_giant_robot_stomped", tomb_giant_robot_stomped ); + incrementcounter( "global_zm_tomb_giant_robot_accessed", tomb_giant_robot_accessed ); + incrementcounter( "global_zm_tomb_generator_captured", tomb_generator_captured ); + incrementcounter( "global_zm_tomb_generator_defended", tomb_generator_defended ); + incrementcounter( "global_zm_tomb_generator_lost", tomb_generator_lost ); + incrementcounter( "global_zm_tomb_dig", tomb_dig ); + incrementcounter( "global_zm_tomb_golden_shovel", tomb_golden_shovel ); + incrementcounter( "global_zm_tomb_golden_hard_hat", tomb_golden_hard_hat ); + incrementcounter( "global_zm_tomb_perk_extension", tomb_perk_extension ); +} + +get_specific_stat( stat_category, stat_name ) +{ + return self getdstat( stat_category, stat_name, "StatValue" ); +} + +do_stats_for_gibs( zombie, limb_tags_array ) +{ + if ( isdefined( zombie ) && isdefined( zombie.attacker ) && isplayer( zombie.attacker ) ) + { + foreach ( limb in limb_tags_array ) + { + stat_name = undefined; + + if ( limb == level._zombie_gib_piece_index_right_arm ) + stat_name = "right_arm_gibs"; + else if ( limb == level._zombie_gib_piece_index_left_arm ) + stat_name = "left_arm_gibs"; + else if ( limb == level._zombie_gib_piece_index_right_leg ) + stat_name = "right_leg_gibs"; + else if ( limb == level._zombie_gib_piece_index_left_leg ) + stat_name = "left_leg_gibs"; + else if ( limb == level._zombie_gib_piece_index_head ) + stat_name = "head_gibs"; + + if ( !isdefined( stat_name ) ) + continue; + + zombie.attacker increment_client_stat( stat_name, 0 ); + zombie.attacker increment_client_stat( "gibs" ); + } + } +} + +initializematchstats() +{ + if ( !level.onlinegame || !gamemodeismode( level.gamemode_public_match ) ) + return; + + self.pers["lastHighestScore"] = self getdstat( "HighestStats", "highest_score" ); + currgametype = level.gametype; + self gamehistorystartmatch( getgametypeenumfromname( currgametype, 0 ) ); +} + +adjustrecentstats() +{ +/# + if ( getdvarint( "scr_writeConfigStrings" ) == 1 || getdvarint( "scr_hostmigrationtest" ) == 1 ) + return; +#/ + initializematchstats(); +} + +uploadstatssoon() +{ + self notify( "upload_stats_soon" ); + self endon( "upload_stats_soon" ); + self endon( "disconnect" ); + wait 1; + uploadstats( self ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_timer.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_timer.gsc new file mode 100644 index 0000000..09a6d97 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_timer.gsc @@ -0,0 +1,84 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; + +init() +{ + precacheshader( "zombie_stopwatchneedle" ); + precacheshader( "zombie_stopwatch" ); + precacheshader( "zombie_stopwatch_glass" ); + + if ( !isdefined( level.stopwatch_length_width ) ) + level.stopwatch_length_width = 96; +} + +start_timer( time, stop_notify ) +{ + self notify( "stop_prev_timer" ); + self endon( "stop_prev_timer" ); + + if ( !isdefined( self.stopwatch_elem ) ) + { + self.stopwatch_elem = newclienthudelem( self ); + self.stopwatch_elem.horzalign = "left"; + self.stopwatch_elem.vertalign = "top"; + self.stopwatch_elem.alignx = "left"; + self.stopwatch_elem.aligny = "top"; + self.stopwatch_elem.x = 10; + self.stopwatch_elem.alpha = 0; + self.stopwatch_elem.sort = 2; + self.stopwatch_elem_glass = newclienthudelem( self ); + self.stopwatch_elem_glass.horzalign = "left"; + self.stopwatch_elem_glass.vertalign = "top"; + self.stopwatch_elem_glass.alignx = "left"; + self.stopwatch_elem_glass.aligny = "top"; + self.stopwatch_elem_glass.x = 10; + self.stopwatch_elem_glass.alpha = 0; + self.stopwatch_elem_glass.sort = 3; + self.stopwatch_elem_glass setshader( "zombie_stopwatch_glass", level.stopwatch_length_width, level.stopwatch_length_width ); + } + + self thread update_hud_position(); + + if ( isdefined( stop_notify ) ) + self thread wait_for_stop_notify( stop_notify ); + + if ( time > 60 ) + time = 0; + + self.stopwatch_elem setclock( time, 60, "zombie_stopwatch", level.stopwatch_length_width, level.stopwatch_length_width ); + self.stopwatch_elem.alpha = 1; + self.stopwatch_elem_glass.alpha = 1; + wait( time ); + self notify( "countdown_finished" ); + wait 1; + self.stopwatch_elem.alpha = 0; + self.stopwatch_elem_glass.alpha = 0; +} + +wait_for_stop_notify( stop_notify ) +{ + self endon( "stop_prev_timer" ); + self endon( "countdown_finished" ); + + self waittill( stop_notify ); + + self.stopwatch_elem.alpha = 0; + self.stopwatch_elem_glass.alpha = 0; +} + +update_hud_position() +{ + self endon( "disconnect" ); + self endon( "stop_prev_timer" ); + self endon( "countdown_finished" ); + + while ( true ) + { + self.stopwatch_elem.y = 20; + self.stopwatch_elem_glass.y = 20; + wait 0.05; + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_tombstone.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_tombstone.gsc new file mode 100644 index 0000000..215fa3f --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_tombstone.gsc @@ -0,0 +1,477 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_melee_weapon; +#include maps\mp\zombies\_zm_weap_cymbal_monkey; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_perks; + +init() +{ + onplayerconnect_callback( ::tombstone_player_init ); + level.tombstone_laststand_func = ::tombstone_laststand; + level.tombstone_spawn_func = ::tombstone_spawn; + level thread tombstone_hostmigration(); + + if ( isdefined( level.zombiemode_using_tombstone_perk ) && level.zombiemode_using_tombstone_perk ) + add_custom_limited_weapon_check( ::is_weapon_available_in_tombstone ); +} + +tombstone_player_init() +{ + while ( !isdefined( self.tombstone_index ) ) + wait 0.1; + + level.tombstones[self.tombstone_index] = spawnstruct(); +} + +tombstone_spawn() +{ + dc = spawn( "script_model", self.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + dc.angles = self.angles; + dc setmodel( "tag_origin" ); + dc_icon = spawn( "script_model", self.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + dc_icon.angles = self.angles; + dc_icon setmodel( "ch_tombstone1" ); + dc_icon linkto( dc ); + dc.icon = dc_icon; + dc.script_noteworthy = "player_tombstone_model"; + dc.player = self; + self thread tombstone_clear(); + dc thread tombstone_wobble(); + dc thread tombstone_revived( self ); + result = self waittill_any_return( "player_revived", "spawned_player", "disconnect" ); + + if ( result == "player_revived" || result == "disconnect" ) + { + dc notify( "tombstone_timedout" ); + dc_icon unlink(); + dc_icon delete(); + dc delete(); + return; + } + + dc thread tombstone_timeout(); + dc thread tombstone_grab(); +} + +tombstone_clear() +{ + result = self waittill_any_return( "tombstone_timedout", "tombstone_grabbed" ); + level.tombstones[self.tombstone_index] = spawnstruct(); +} + +tombstone_revived( player ) +{ + self endon( "tombstone_timedout" ); + player endon( "disconnect" ); + shown = 1; + + while ( isdefined( self ) && isdefined( player ) ) + { + if ( isdefined( player.revivetrigger ) && ( isdefined( player.revivetrigger.beingrevived ) && player.revivetrigger.beingrevived ) ) + { + if ( shown ) + { + shown = 0; + self.icon hide(); + } + } + else if ( !shown ) + { + shown = 1; + self.icon show(); + } + + wait 0.05; + } +} + +tombstone_laststand() +{ + primaries = self getweaponslistprimaries(); + currentweapon = self getcurrentweapon(); + dc = level.tombstones[self.tombstone_index]; + dc.player = self; + dc.weapon = []; + dc.current_weapon = -1; + + foreach ( index, weapon in primaries ) + { + dc.weapon[index] = weapon; + dc.stockcount[index] = self getweaponammostock( weapon ); + + if ( weapon == currentweapon ) + dc.current_weapon = index; + } + + if ( isdefined( self.hasriotshield ) && self.hasriotshield ) + dc.hasriotshield = 1; + + dc save_weapons_for_tombstone( self ); + + if ( self hasweapon( "claymore_zm" ) ) + { + dc.hasclaymore = 1; + dc.claymoreclip = self getweaponammoclip( "claymore_zm" ); + } + + if ( self hasweapon( "emp_grenade_zm" ) ) + { + dc.hasemp = 1; + dc.empclip = self getweaponammoclip( "emp_grenade_zm" ); + } + + dc.perk = tombstone_save_perks( self ); + lethal_grenade = self get_player_lethal_grenade(); + + if ( self hasweapon( lethal_grenade ) ) + dc.grenade = self getweaponammoclip( lethal_grenade ); + else + dc.grenade = 0; + + if ( maps\mp\zombies\_zm_weap_cymbal_monkey::cymbal_monkey_exists() ) + dc.zombie_cymbal_monkey_count = self getweaponammoclip( "cymbal_monkey_zm" ); +} + +tombstone_save_perks( ent ) +{ + perk_array = []; + + if ( ent hasperk( "specialty_armorvest" ) ) + perk_array[perk_array.size] = "specialty_armorvest"; + + if ( ent hasperk( "specialty_deadshot" ) ) + perk_array[perk_array.size] = "specialty_deadshot"; + + if ( ent hasperk( "specialty_fastreload" ) ) + perk_array[perk_array.size] = "specialty_fastreload"; + + if ( ent hasperk( "specialty_flakjacket" ) ) + perk_array[perk_array.size] = "specialty_flakjacket"; + + if ( ent hasperk( "specialty_longersprint" ) ) + perk_array[perk_array.size] = "specialty_longersprint"; + + if ( ent hasperk( "specialty_quickrevive" ) ) + perk_array[perk_array.size] = "specialty_quickrevive"; + + if ( ent hasperk( "specialty_rof" ) ) + perk_array[perk_array.size] = "specialty_rof"; + + return perk_array; +} + +tombstone_grab() +{ + self endon( "tombstone_timedout" ); + wait 1; + + while ( isdefined( self ) ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].is_zombie ) + continue; + + if ( isdefined( self.player ) && players[i] == self.player ) + { + tombstone_machine_triggers = getentarray( "specialty_scavenger", "script_noteworthy" ); + istombstonepowered = 0; + + foreach ( trigger in tombstone_machine_triggers ) + { + if ( isdefined( trigger.power_on ) && trigger.power_on || isdefined( trigger.turbine_power_on ) && trigger.turbine_power_on ) + istombstonepowered = 1; + } + + if ( istombstonepowered ) + { + dist = distance( players[i].origin, self.origin ); + + if ( dist < 64 ) + { + playfx( level._effect["powerup_grabbed"], self.origin ); + playfx( level._effect["powerup_grabbed_wave"], self.origin ); + players[i] tombstone_give(); + wait 0.1; + playsoundatposition( "zmb_tombstone_grab", self.origin ); + self stoploopsound(); + self.icon unlink(); + self.icon delete(); + self delete(); + self notify( "tombstone_grabbed" ); + players[i] clientnotify( "dc0" ); + players[i] notify( "dance_on_my_grave" ); + } + } + } + } + + wait_network_frame(); + } +} + +tombstone_give() +{ + dc = level.tombstones[self.tombstone_index]; + + if ( !flag( "solo_game" ) ) + { + primaries = self getweaponslistprimaries(); + + if ( dc.weapon.size > 1 || primaries.size > 1 ) + { + foreach ( weapon in primaries ) + self takeweapon( weapon ); + } + + for ( i = 0; i < dc.weapon.size; i++ ) + { + if ( !isdefined( dc.weapon[i] ) ) + continue; + + if ( dc.weapon[i] == "none" ) + continue; + + weapon = dc.weapon[i]; + stock = dc.stockcount[i]; + + if ( !self hasweapon( weapon ) ) + { + self giveweapon( weapon, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); + self setweaponammoclip( weapon, weaponclipsize( weapon ) ); + self setweaponammostock( weapon, stock ); + + if ( i == dc.current_weapon ) + self switchtoweapon( weapon ); + } + } + } + + if ( isdefined( dc.hasriotshield ) && dc.hasriotshield ) + { + self maps\mp\zombies\_zm_equipment::equipment_give( "riotshield_zm" ); + + if ( isdefined( self.player_shield_reset_health ) ) + self [[ self.player_shield_reset_health ]](); + } + + dc restore_weapons_for_tombstone( self ); + + if ( isdefined( dc.hasclaymore ) && dc.hasclaymore && !self hasweapon( "claymore_zm" ) ) + { + self giveweapon( "claymore_zm" ); + self set_player_placeable_mine( "claymore_zm" ); + self setactionslot( 4, "weapon", "claymore_zm" ); + self setweaponammoclip( "claymore_zm", dc.claymoreclip ); + } + + if ( isdefined( dc.hasemp ) && dc.hasemp ) + { + self giveweapon( "emp_grenade_zm" ); + self setweaponammoclip( "emp_grenade_zm", dc.empclip ); + } + + if ( isdefined( dc.perk ) && dc.perk.size > 0 ) + { + for ( i = 0; i < dc.perk.size; i++ ) + { + if ( self hasperk( dc.perk[i] ) ) + continue; + + if ( dc.perk[i] == "specialty_quickrevive" && flag( "solo_game" ) ) + continue; + + maps\mp\zombies\_zm_perks::give_perk( dc.perk[i] ); + } + } + + if ( dc.grenade > 0 && !flag( "solo_game" ) ) + { + curgrenadecount = 0; + + if ( self hasweapon( self get_player_lethal_grenade() ) ) + self getweaponammoclip( self get_player_lethal_grenade() ); + else + self giveweapon( self get_player_lethal_grenade() ); + + self setweaponammoclip( self get_player_lethal_grenade(), dc.grenade + curgrenadecount ); + } + + if ( maps\mp\zombies\_zm_weap_cymbal_monkey::cymbal_monkey_exists() && !flag( "solo_game" ) ) + { + if ( dc.zombie_cymbal_monkey_count ) + { + self maps\mp\zombies\_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); + self setweaponammoclip( "cymbal_monkey_zm", dc.zombie_cymbal_monkey_count ); + } + } +} + +tombstone_wobble() +{ + self endon( "tombstone_grabbed" ); + self endon( "tombstone_timedout" ); + + if ( isdefined( self ) ) + { + wait 1; + playfxontag( level._effect["powerup_on"], self, "tag_origin" ); + self playsound( "zmb_tombstone_spawn" ); + self playloopsound( "zmb_tombstone_looper" ); + } + + while ( isdefined( self ) ) + { + self rotateyaw( 360, 3 ); + wait 2.9; + } +} + +tombstone_timeout() +{ + self endon( "tombstone_grabbed" ); + self thread playtombstonetimeraudio(); + wait 48.5; + + for ( i = 0; i < 40; i++ ) + { + if ( i % 2 ) + self.icon ghost(); + else + self.icon show(); + + if ( i < 15 ) + { + wait 0.5; + continue; + } + + if ( i < 25 ) + { + wait 0.25; + continue; + } + + wait 0.1; + } + + self notify( "tombstone_timedout" ); + self.icon unlink(); + self.icon delete(); + self delete(); +} + +playtombstonetimeraudio() +{ + self endon( "tombstone_grabbed" ); + self endon( "tombstone_timedout" ); + player = self.player; + self thread playtombstonetimerout( player ); + + while ( true ) + { + player playsoundtoplayer( "zmb_tombstone_timer_count", player ); + wait 1; + } +} + +playtombstonetimerout( player ) +{ + self endon( "tombstone_grabbed" ); + + self waittill( "tombstone_timedout" ); + + player playsoundtoplayer( "zmb_tombstone_timer_out", player ); +} + +save_weapons_for_tombstone( player ) +{ + self.tombstone_melee_weapons = []; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + self save_weapon_for_tombstone( player, level._melee_weapons[i].weapon_name ); +} + +save_weapon_for_tombstone( player, weapon_name ) +{ + if ( player hasweapon( weapon_name ) ) + self.tombstone_melee_weapons[weapon_name] = 1; +} + +restore_weapons_for_tombstone( player ) +{ + for ( i = 0; i < level._melee_weapons.size; i++ ) + self restore_weapon_for_tombstone( player, level._melee_weapons[i].weapon_name ); + + self.tombstone_melee_weapons = undefined; +} + +restore_weapon_for_tombstone( player, weapon_name ) +{ + if ( !isdefined( weapon_name ) || !isdefined( self.tombstone_melee_weapons ) || !isdefined( self.tombstone_melee_weapons[weapon_name] ) ) + return; + + if ( isdefined( self.tombstone_melee_weapons[weapon_name] ) && self.tombstone_melee_weapons[weapon_name] ) + { + player giveweapon( weapon_name ); + player change_melee_weapon( weapon_name, "none" ); + self.tombstone_melee_weapons[weapon_name] = 0; + } +} + +tombstone_hostmigration() +{ + level endon( "end_game" ); + level notify( "tombstone_hostmigration" ); + level endon( "tombstone_hostmigration" ); + + while ( true ) + { + level waittill( "host_migration_end" ); + + tombstones = getentarray( "player_tombstone_model", "script_noteworthy" ); + + foreach ( model in tombstones ) + playfxontag( level._effect["powerup_on"], model, "tag_origin" ); + } +} + +is_weapon_available_in_tombstone( weapon, player_to_check ) +{ + count = 0; + upgradedweapon = weapon; + + if ( isdefined( level.zombie_weapons[weapon] ) && isdefined( level.zombie_weapons[weapon].upgrade_name ) ) + upgradedweapon = level.zombie_weapons[weapon].upgrade_name; + + for ( tombstone_index = 0; tombstone_index < level.tombstones.size; tombstone_index++ ) + { + dc = level.tombstones[tombstone_index]; + + if ( !isdefined( dc.weapon ) ) + continue; + + if ( isdefined( player_to_check ) && dc.player != player_to_check ) + continue; + + for ( weapon_index = 0; weapon_index < dc.weapon.size; weapon_index++ ) + { + if ( !isdefined( dc.weapon[weapon_index] ) ) + continue; + + tombstone_weapon = dc.weapon[weapon_index]; + + if ( tombstone_weapon == weapon || tombstone_weapon == upgradedweapon ) + count++; + } + } + + return count; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_traps.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_traps.gsc new file mode 100644 index 0000000..2afacfb --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_traps.gsc @@ -0,0 +1,877 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_net; +#include maps\mp\_visionset_mgr; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\animscripts\zm_death; +#include maps\mp\zombies\_zm_weapons; + +init() +{ + level.trap_kills = 0; + traps = getentarray( "zombie_trap", "targetname" ); + array_thread( traps, ::trap_init ); + level thread register_visionsets( traps ); + level.burning_zombies = []; + level.elec_trap_time = 40; + level.elec_trap_cooldown_time = 60; +} + +trap_init() +{ + self ent_flag_init( "flag_active" ); + self ent_flag_init( "flag_cooldown" ); + self._trap_type = ""; + + if ( isdefined( self.script_noteworthy ) ) + { + self._trap_type = self.script_noteworthy; + + if ( isdefined( level._zombiemode_trap_activate_funcs ) && isdefined( level._zombiemode_trap_activate_funcs[self._trap_type] ) ) + self._trap_activate_func = level._zombiemode_trap_activate_funcs[self._trap_type]; + else + { + switch ( self.script_noteworthy ) + { + case "rotating": + self._trap_activate_func = ::trap_activate_rotating; + break; + case "electric": + self._trap_activate_func = ::trap_activate_electric; + break; + case "flipper": + self._trap_activate_func = ::trap_activate_flipper; + break; + case "fire": + default: + self._trap_activate_func = ::trap_activate_fire; + } + } + + if ( isdefined( level._zombiemode_trap_use_funcs ) && isdefined( level._zombiemode_trap_use_funcs[self._trap_type] ) ) + self._trap_use_func = level._zombiemode_trap_use_funcs[self._trap_type]; + else + self._trap_use_func = ::trap_use_think; + } + + self trap_model_type_init(); + self._trap_use_trigs = []; + self._trap_lights = []; + self._trap_movers = []; + self._trap_switches = []; + components = getentarray( self.target, "targetname" ); + + for ( i = 0; i < components.size; i++ ) + { + if ( isdefined( components[i].script_noteworthy ) ) + { + switch ( components[i].script_noteworthy ) + { + case "counter_1s": + self.counter_1s = components[i]; + continue; + case "counter_10s": + self.counter_10s = components[i]; + continue; + case "counter_100s": + self.counter_100s = components[i]; + continue; + case "mover": + self._trap_movers[self._trap_movers.size] = components[i]; + continue; + case "switch": + self._trap_switches[self._trap_switches.size] = components[i]; + continue; + case "light": + self._trap_lightes[self._trap_lightes.size] = components[i]; + continue; + } + } + + if ( isdefined( components[i].script_string ) ) + { + switch ( components[i].script_string ) + { + case "flipper1": + self.flipper1 = components[i]; + continue; + case "flipper2": + self.flipper2 = components[i]; + continue; + case "flipper1_radius_check": + self.flipper1_radius_check = components[i]; + continue; + case "flipper2_radius_check": + self.flipper2_radius_check = components[i]; + continue; + case "target1": + self.target1 = components[i]; + continue; + case "target2": + self.target2 = components[i]; + continue; + case "target3": + self.target3 = components[i]; + continue; + } + } + + switch ( components[i].classname ) + { + case "trigger_use": + self._trap_use_trigs[self._trap_use_trigs.size] = components[i]; + break; + case "script_model": + if ( components[i].model == self._trap_light_model_off ) + self._trap_lights[self._trap_lights.size] = components[i]; + else if ( components[i].model == self._trap_switch_model ) + self._trap_switches[self._trap_switches.size] = components[i]; + } + } + + self._trap_fx_structs = []; + components = getstructarray( self.target, "targetname" ); + + for ( i = 0; i < components.size; i++ ) + { + if ( isdefined( components[i].script_string ) && components[i].script_string == "use_this_angle" ) + { + self.use_this_angle = components[i]; + continue; + } + + self._trap_fx_structs[self._trap_fx_structs.size] = components[i]; + } + + assert( self._trap_use_trigs.size > 0, "_zm_traps::init no use triggers found for " + self.target ); + + if ( !isdefined( self.zombie_cost ) ) + self.zombie_cost = 1000; + + self._trap_in_use = 0; + self._trap_cooling_down = 0; + self thread trap_dialog(); + flag_wait( "start_zombie_round_logic" ); + self trap_lights_red(); + + for ( i = 0; i < self._trap_use_trigs.size; i++ ) + self._trap_use_trigs[i] setcursorhint( "HINT_NOICON" ); + + if ( !isdefined( self.script_flag_wait ) ) + { + self trap_set_string( &"ZOMBIE_NEED_POWER" ); + flag_wait( "power_on" ); + } + else + { + if ( !isdefined( level.flag[self.script_flag_wait] ) ) + flag_init( self.script_flag_wait ); + + flag_wait( self.script_flag_wait ); + } + + self trap_set_string( &"ZOMBIE_BUTTON_BUY_TRAP", self.zombie_cost ); + self trap_lights_green(); + + for ( i = 0; i < self._trap_use_trigs.size; i++ ) + self._trap_use_trigs[i] thread [[ self._trap_use_func ]]( self ); +} + +trap_use_think( trap ) +{ + while ( true ) + { + self waittill( "trigger", who ); + + if ( who in_revive_trigger() ) + continue; + + if ( is_player_valid( who ) && !trap._trap_in_use ) + { + if ( who.score >= trap.zombie_cost ) + who maps\mp\zombies\_zm_score::minus_to_player_score( trap.zombie_cost ); + else + continue; + + trap._trap_in_use = 1; + trap trap_set_string( &"ZOMBIE_TRAP_ACTIVE" ); + play_sound_at_pos( "purchase", who.origin ); + + if ( trap._trap_switches.size ) + { + trap thread trap_move_switches(); + + trap waittill( "switch_activated" ); + } + + trap trigger_on(); + trap thread [[ trap._trap_activate_func ]](); + + trap waittill( "trap_done" ); + + trap trigger_off(); + trap._trap_cooling_down = 1; + trap trap_set_string( &"ZOMBIE_TRAP_COOLDOWN" ); +/# + if ( getdvarint( _hash_FA81816F ) >= 1 ) + trap._trap_cooldown_time = 5; +#/ + wait( trap._trap_cooldown_time ); + trap._trap_cooling_down = 0; + trap notify( "available" ); + trap._trap_in_use = 0; + trap trap_set_string( &"ZOMBIE_BUTTON_BUY_TRAP", trap.zombie_cost ); + } + } +} + +trap_lights_red() +{ + for ( i = 0; i < self._trap_lights.size; i++ ) + { + light = self._trap_lights[i]; + light setmodel( self._trap_light_model_red ); + + if ( isdefined( light.fx ) ) + light.fx delete(); + + light.fx = maps\mp\zombies\_zm_net::network_safe_spawn( "trap_lights_red", 2, "script_model", light.origin ); + light.fx setmodel( "tag_origin" ); + light.fx.angles = light.angles; + playfxontag( level._effect["zapper_light_notready"], light.fx, "tag_origin" ); + } +} + +trap_lights_green() +{ + for ( i = 0; i < self._trap_lights.size; i++ ) + { + light = self._trap_lights[i]; + + if ( isdefined( light._switch_disabled ) ) + continue; + + light setmodel( self._trap_light_model_green ); + + if ( isdefined( light.fx ) ) + light.fx delete(); + + light.fx = maps\mp\zombies\_zm_net::network_safe_spawn( "trap_lights_green", 2, "script_model", light.origin ); + light.fx setmodel( "tag_origin" ); + light.fx.angles = light.angles; + playfxontag( level._effect["zapper_light_ready"], light.fx, "tag_origin" ); + } +} + +trap_set_string( string, param1, param2 ) +{ + for ( i = 0; i < self._trap_use_trigs.size; i++ ) + { + if ( !isdefined( param1 ) ) + { + self._trap_use_trigs[i] sethintstring( string ); + continue; + } + + if ( !isdefined( param2 ) ) + { + self._trap_use_trigs[i] sethintstring( string, param1 ); + continue; + } + + self._trap_use_trigs[i] sethintstring( string, param1, param2 ); + } +} + +trap_move_switches() +{ + self trap_lights_red(); + + for ( i = 0; i < self._trap_switches.size; i++ ) + { + self._trap_switches[i] rotatepitch( 180, 0.5 ); + self._trap_switches[i] playsound( "amb_sparks_l_b" ); + } + + self._trap_switches[0] waittill( "rotatedone" ); + + self notify( "switch_activated" ); + + self waittill( "available" ); + + for ( i = 0; i < self._trap_switches.size; i++ ) + self._trap_switches[i] rotatepitch( -180, 0.5 ); + + self._trap_switches[0] waittill( "rotatedone" ); + + self trap_lights_green(); +} + +trap_activate_electric() +{ + self._trap_duration = 40; + self._trap_cooldown_time = 60; + self notify( "trap_activate" ); + + if ( isdefined( self.script_string ) ) + { + number = int( self.script_string ); + + if ( number != 0 ) + exploder( number ); + else + clientnotify( self.script_string + "1" ); + } + + fx_points = getstructarray( self.target, "targetname" ); + + for ( i = 0; i < fx_points.size; i++ ) + { + wait_network_frame(); + fx_points[i] thread trap_audio_fx( self ); + } + + self thread trap_damage(); + wait( self._trap_duration ); + self notify( "trap_done" ); + + if ( isdefined( self.script_string ) ) + clientnotify( self.script_string + "0" ); +} + +trap_activate_fire() +{ + self._trap_duration = 40; + self._trap_cooldown_time = 60; + clientnotify( self.script_string + "1" ); + clientnotify( self.script_parameters ); + fx_points = getstructarray( self.target, "targetname" ); + + for ( i = 0; i < fx_points.size; i++ ) + { + wait_network_frame(); + fx_points[i] thread trap_audio_fx( self ); + } + + self thread trap_damage(); + wait( self._trap_duration ); + self notify( "trap_done" ); + clientnotify( self.script_string + "0" ); + clientnotify( self.script_parameters ); +} + +trap_activate_rotating() +{ + self endon( "trap_done" ); + self._trap_duration = 30; + self._trap_cooldown_time = 60; + self thread trap_damage(); + self thread trig_update( self._trap_movers[0] ); + old_angles = self._trap_movers[0].angles; + + for ( i = 0; i < self._trap_movers.size; i++ ) + self._trap_movers[i] rotateyaw( 360, 5.0, 4.5 ); + + wait 5.0; + step = 1.5; + + for ( t = 0; t < self._trap_duration; t += step ) + { + for ( i = 0; i < self._trap_movers.size; i++ ) + self._trap_movers[i] rotateyaw( 360, step ); + + wait( step ); + } + + for ( i = 0; i < self._trap_movers.size; i++ ) + self._trap_movers[i] rotateyaw( 360, 5.0, 0.0, 4.5 ); + + wait 5.0; + + for ( i = 0; i < self._trap_movers.size; i++ ) + self._trap_movers[i].angles = old_angles; + + self notify( "trap_done" ); +} + +trap_activate_flipper() +{ + +} + +trap_audio_fx( trap ) +{ + sound_origin = undefined; + + if ( trap.script_noteworthy == "electric" ) + { + sound_origin = spawn( "script_origin", self.origin ); + sound_origin playsound( "zmb_elec_start" ); + sound_origin playloopsound( "zmb_elec_loop" ); + self thread play_electrical_sound( trap ); + } + else if ( trap.script_noteworthy == "fire" ) + { + sound_origin = spawn( "script_origin", self.origin ); + sound_origin playsound( "zmb_firetrap_start" ); + sound_origin playloopsound( "zmb_firetrap_loop" ); + } + + trap waittill_any_or_timeout( trap._trap_duration, "trap_done" ); + + if ( isdefined( sound_origin ) ) + { + if ( trap.script_noteworthy == "fire" ) + playsoundatposition( "zmb_firetrap_end", sound_origin.origin ); + + sound_origin stoploopsound(); + wait 0.05; + sound_origin delete(); + } +} + +play_electrical_sound( trap ) +{ + trap endon( "trap_done" ); + + while ( true ) + { + wait( randomfloatrange( 0.1, 0.5 ) ); + playsoundatposition( "zmb_elec_arc", self.origin ); + } +} + +trap_damage() +{ + self endon( "trap_done" ); + + while ( true ) + { + self waittill( "trigger", ent ); + + if ( isplayer( ent ) ) + { + switch ( self._trap_type ) + { + case "electric": + ent thread player_elec_damage(); + break; + case "rocket": + case "fire": + ent thread player_fire_damage(); + break; + case "rotating": + if ( ent getstance() == "stand" ) + { + ent dodamage( 50, ent.origin + vectorscale( ( 0, 0, 1 ), 20.0 ) ); + ent setstance( "crouch" ); + } + + break; + } + } + else if ( !isdefined( ent.marked_for_death ) ) + { + switch ( self._trap_type ) + { + case "rocket": + ent thread zombie_trap_death( self, 100 ); + break; + case "rotating": + ent thread zombie_trap_death( self, 200 ); + break; + case "fire": + case "electric": + default: + ent thread zombie_trap_death( self, randomint( 100 ) ); + break; + } + } + } +} + +trig_update( parent ) +{ + self endon( "trap_done" ); + start_angles = self.angles; + + while ( true ) + { + self.angles = parent.angles; + wait 0.05; + } +} + +player_elec_damage() +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( !isdefined( level.elec_loop ) ) + level.elec_loop = 0; + + if ( !isdefined( self.is_burning ) && is_player_valid( self ) ) + { + self.is_burning = 1; + + if ( is_true( level.trap_electric_visionset_registered ) ) + maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_trap_electric", self, 1.25, 1.25 ); + else + self setelectrified( 1.25 ); + + shocktime = 2.5; + self shellshock( "electrocution", shocktime ); + + if ( level.elec_loop == 0 ) + { + elec_loop = 1; + self playsound( "zmb_zombie_arc" ); + } + + if ( !self hasperk( "specialty_armorvest" ) || self.health - 100 < 1 ) + { + radiusdamage( self.origin, 10, self.health + 100, self.health + 100 ); + self.is_burning = undefined; + } + else + { + self dodamage( 50, self.origin ); + wait 0.1; + self.is_burning = undefined; + } + } +} + +player_fire_damage() +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( !isdefined( self.is_burning ) && !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + self.is_burning = 1; + + if ( is_true( level.trap_fire_visionset_registered ) ) + maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_trap_burn", self, 1.25, 1.25 ); + else + self setburn( 1.25 ); + + self notify( "burned" ); + + if ( !self hasperk( "specialty_armorvest" ) || self.health - 100 < 1 ) + { + radiusdamage( self.origin, 10, self.health + 100, self.health + 100 ); + self.is_burning = undefined; + } + else + { + self dodamage( 50, self.origin ); + wait 0.1; + self.is_burning = undefined; + } + } +} + +zombie_trap_death( trap, param ) +{ + self endon( "death" ); + self.marked_for_death = 1; + + switch ( trap._trap_type ) + { + case "rocket": + case "fire": + case "electric": + if ( isdefined( self.animname ) && self.animname != "zombie_dog" ) + { + if ( param > 90 && level.burning_zombies.size < 6 ) + { + level.burning_zombies[level.burning_zombies.size] = self; + self thread zombie_flame_watch(); + self playsound( "ignite" ); + self thread maps\mp\animscripts\zm_death::flame_death_fx(); + playfxontag( level._effect["character_fire_death_torso"], self, "J_SpineLower" ); + wait( randomfloat( 1.25 ) ); + } + else + { + refs[0] = "guts"; + refs[1] = "right_arm"; + refs[2] = "left_arm"; + refs[3] = "right_leg"; + refs[4] = "left_leg"; + refs[5] = "no_legs"; + refs[6] = "head"; + self.a.gib_ref = refs[randomint( refs.size )]; + playsoundatposition( "zmb_zombie_arc", self.origin ); + + if ( trap._trap_type == "electric" ) + { + if ( randomint( 100 ) > 50 ) + { + self thread electroctute_death_fx(); + self thread play_elec_vocals(); + } + } + + wait( randomfloat( 1.25 ) ); + self playsound( "zmb_zombie_arc" ); + } + } + + if ( isdefined( self.fire_damage_func ) ) + self [[ self.fire_damage_func ]]( trap ); + else + { + level notify( "trap_kill", self, trap ); + self dodamage( self.health + 666, self.origin, trap ); + } + + break; + case "rotating": + case "centrifuge": + ang = vectortoangles( trap.origin - self.origin ); + direction_vec = vectorscale( anglestoright( ang ), param ); + + if ( isdefined( self.trap_reaction_func ) ) + self [[ self.trap_reaction_func ]]( trap ); + + level notify( "trap_kill", self, trap ); + self startragdoll(); + self launchragdoll( direction_vec ); + wait_network_frame(); + self.a.gib_ref = "head"; + self dodamage( self.health, self.origin, trap ); + break; + } +} + +zombie_flame_watch() +{ + self waittill( "death" ); + + self stoploopsound(); + arrayremovevalue( level.burning_zombies, self ); +} + +play_elec_vocals() +{ + if ( isdefined( self ) ) + { + org = self.origin; + wait 0.15; + playsoundatposition( "zmb_elec_vocals", org ); + playsoundatposition( "zmb_zombie_arc", org ); + playsoundatposition( "zmb_exp_jib_zombie", org ); + } +} + +electroctute_death_fx() +{ + self endon( "death" ); + + if ( isdefined( self.is_electrocuted ) && self.is_electrocuted ) + return; + + self.is_electrocuted = 1; + self thread electrocute_timeout(); + + if ( self.team == level.zombie_team ) + { + level.bconfiretime = gettime(); + level.bconfireorg = self.origin; + } + + if ( isdefined( level._effect["elec_torso"] ) ) + playfxontag( level._effect["elec_torso"], self, "J_SpineLower" ); + + self playsound( "zmb_elec_jib_zombie" ); + wait 1; + tagarray = []; + tagarray[0] = "J_Elbow_LE"; + tagarray[1] = "J_Elbow_RI"; + tagarray[2] = "J_Knee_RI"; + tagarray[3] = "J_Knee_LE"; + tagarray = array_randomize( tagarray ); + + if ( isdefined( level._effect["elec_md"] ) ) + playfxontag( level._effect["elec_md"], self, tagarray[0] ); + + self playsound( "zmb_elec_jib_zombie" ); + wait 1; + self playsound( "zmb_elec_jib_zombie" ); + tagarray[0] = "J_Wrist_RI"; + tagarray[1] = "J_Wrist_LE"; + + if ( !isdefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" ) + { + tagarray[2] = "J_Ankle_RI"; + tagarray[3] = "J_Ankle_LE"; + } + + tagarray = array_randomize( tagarray ); + + if ( isdefined( level._effect["elec_sm"] ) ) + { + playfxontag( level._effect["elec_sm"], self, tagarray[0] ); + playfxontag( level._effect["elec_sm"], self, tagarray[1] ); + } +} + +electrocute_timeout() +{ + self endon( "death" ); + self playloopsound( "fire_manager_0" ); + wait 12; + self stoploopsound(); + + if ( isdefined( self ) && isalive( self ) ) + { + self.is_electrocuted = 0; + self notify( "stop_flame_damage" ); + } +} + +trap_dialog() +{ + self endon( "warning_dialog" ); + level endon( "switch_flipped" ); + timer = 0; + + while ( true ) + { + wait 0.5; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + dist = distancesquared( players[i].origin, self.origin ); + + if ( dist > 4900 ) + { + timer = 0; + continue; + } + + if ( dist < 4900 && timer < 3 ) + { + wait 0.5; + timer++; + } + + if ( dist < 4900 && timer == 3 ) + { + index = maps\mp\zombies\_zm_weapons::get_player_index( players[i] ); + plr = "plr_" + index + "_"; + wait 3; + self notify( "warning_dialog" ); + } + } + } +} + +get_trap_array( trap_type ) +{ + ents = getentarray( "zombie_trap", "targetname" ); + traps = []; + + for ( i = 0; i < ents.size; i++ ) + { + if ( ents[i].script_noteworthy == trap_type ) + traps[traps.size] = ents[i]; + } + + return traps; +} + +trap_disable() +{ + cooldown = self._trap_cooldown_time; + + if ( self._trap_in_use ) + { + self notify( "trap_done" ); + self._trap_cooldown_time = 0.05; + + self waittill( "available" ); + } + + array_thread( self._trap_use_trigs, ::trigger_off ); + self trap_lights_red(); + self._trap_cooldown_time = cooldown; +} + +trap_enable() +{ + array_thread( self._trap_use_trigs, ::trigger_on ); + self trap_lights_green(); +} + +trap_model_type_init() +{ + if ( !isdefined( self.script_parameters ) ) + self.script_parameters = "default"; + + switch ( self.script_parameters ) + { + case "pentagon_electric": + self._trap_light_model_off = "zombie_trap_switch_light"; + self._trap_light_model_green = "zombie_trap_switch_light_on_green"; + self._trap_light_model_red = "zombie_trap_switch_light_on_red"; + self._trap_switch_model = "zombie_trap_switch_handle"; + break; + case "default": + default: + self._trap_light_model_off = "zombie_zapper_cagelight"; + self._trap_light_model_green = "zombie_zapper_cagelight_green"; + self._trap_light_model_red = "zombie_zapper_cagelight_red"; + self._trap_switch_model = "zombie_zapper_handle"; + break; + } +} + +register_visionsets( a_traps ) +{ + a_registered_traps = []; + + foreach ( trap in a_traps ) + { + if ( isdefined( trap.script_noteworthy ) ) + { + if ( !trap is_trap_registered( a_registered_traps ) ) + a_registered_traps[trap.script_noteworthy] = 1; + } + } + + keys = getarraykeys( a_registered_traps ); + + foreach ( key in keys ) + { + switch ( key ) + { + case "electric": + if ( !isdefined( level.vsmgr_prio_overlay_zm_trap_electrified ) ) + level.vsmgr_prio_overlay_zm_trap_electrified = 60; + + maps\mp\_visionset_mgr::vsmgr_register_info( "overlay", "zm_trap_electric", 16000, level.vsmgr_prio_overlay_zm_trap_electrified, 15, 1, maps\mp\_visionset_mgr::vsmgr_duration_lerp_thread_per_player, 0 ); + level.trap_electric_visionset_registered = 1; + break; + case "fire": + if ( !isdefined( level.vsmgr_prio_overlay_zm_trap_burn ) ) + level.vsmgr_prio_overlay_zm_trap_burn = 61; + + maps\mp\_visionset_mgr::vsmgr_register_info( "overlay", "zm_trap_burn", 16000, level.vsmgr_prio_overlay_zm_trap_burn, 15, 1, maps\mp\_visionset_mgr::vsmgr_duration_lerp_thread_per_player, 0 ); + level.trap_fire_visionset_registered = 1; + break; + } + } +} + +is_trap_registered( a_registered_traps ) +{ + return isdefined( a_registered_traps[self.script_noteworthy] ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_turned.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_turned.gsc new file mode 100644 index 0000000..767a99b --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_turned.gsc @@ -0,0 +1,419 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\_visionset_mgr; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\gametypes_zm\_spawnlogic; + +init() +{ + level.turnedmeleeweapon = "zombiemelee_zm"; + level.turnedmeleeweapon_dw = "zombiemelee_dw"; + precacheitem( level.turnedmeleeweapon ); + precacheitem( level.turnedmeleeweapon_dw ); + + if ( !( isdefined( level.custom_zombie_player_loadout_init ) && level.custom_zombie_player_loadout_init ) ) + { + precachemodel( "c_zom_player_zombie_fb" ); + precachemodel( "c_zom_zombie_viewhands" ); + } + + if ( !isdefined( level.vsmgr_prio_visionset_zombie_turned ) ) + level.vsmgr_prio_visionset_zombie_turned = 123; + + maps\mp\_visionset_mgr::vsmgr_register_info( "visionset", "zm_turned", 3000, level.vsmgr_prio_visionset_zombie_turned, 1, 1 ); + registerclientfield( "toplayer", "turned_ir", 3000, 1, "int" ); + registerclientfield( "allplayers", "player_has_eyes", 3000, 1, "int" ); + registerclientfield( "allplayers", "player_eyes_special", 5000, 1, "int" ); + level._effect["player_eye_glow"] = loadfx( "maps/zombie/fx_zombie_eye_returned_blue" ); + level._effect["player_eye_glow_orng"] = loadfx( "maps/zombie/fx_zombie_eye_returned_orng" ); + thread setup_zombie_exerts(); +} + +setup_zombie_exerts() +{ + wait 0.05; + level.exert_sounds[1]["burp"] = "null"; + level.exert_sounds[1]["hitmed"] = "null"; + level.exert_sounds[1]["hitlrg"] = "null"; +} + +delay_turning_on_eyes() +{ + self endon( "death" ); + self endon( "disconnect" ); + wait_network_frame(); + wait 0.1; + self setclientfield( "player_has_eyes", 1 ); +} + +turn_to_zombie() +{ + if ( self.sessionstate == "playing" && ( isdefined( self.is_zombie ) && self.is_zombie ) && !( isdefined( self.laststand ) && self.laststand ) ) + return; + + if ( isdefined( self.is_in_process_of_zombify ) && self.is_in_process_of_zombify ) + return; + + while ( isdefined( self.is_in_process_of_humanify ) && self.is_in_process_of_humanify ) + wait 0.1; + + if ( !flag( "pregame" ) ) + { + self playsoundtoplayer( "evt_spawn", self ); + playsoundatposition( "evt_disappear_3d", self.origin ); + + if ( !self.is_zombie ) + playsoundatposition( "vox_plr_" + randomintrange( 0, 4 ) + "_exert_death_high_" + randomintrange( 0, 4 ), self.origin ); + } + + self._can_score = 1; + self setclientfield( "player_has_eyes", 0 ); + self ghost(); + self turned_disable_player_weapons(); + self notify( "clear_red_flashing_overlay" ); + self notify( "zombify" ); + self.is_in_process_of_zombify = 1; + self.team = level.zombie_team; + self.pers["team"] = level.zombie_team; + self.sessionteam = level.zombie_team; + wait_network_frame(); + self maps\mp\gametypes_zm\_zm_gametype::onspawnplayer(); + self freezecontrols( 1 ); + self.is_zombie = 1; + self setburn( 0 ); + + if ( isdefined( self.turned_visionset ) && self.turned_visionset ) + { + maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_turned", self ); + wait_network_frame(); + wait_network_frame(); + + if ( !isdefined( self ) ) + return; + } + + maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_turned", self ); + self.turned_visionset = 1; + self setclientfieldtoplayer( "turned_ir", 1 ); + self maps\mp\zombies\_zm_audio::setexertvoice( 1 ); + self.laststand = undefined; + wait_network_frame(); + + if ( !isdefined( self ) ) + return; + + self enableweapons(); + self show(); + playsoundatposition( "evt_appear_3d", self.origin ); + playsoundatposition( "zmb_zombie_spawn", self.origin ); + self thread delay_turning_on_eyes(); + self thread turned_player_buttons(); + self setperk( "specialty_noname" ); + self setperk( "specialty_unlimitedsprint" ); + self setperk( "specialty_fallheight" ); + self turned_give_melee_weapon(); + self setmovespeedscale( 1.0 ); + self.animname = "zombie"; + self disableoffhandweapons(); + self allowstand( 1 ); + self allowprone( 0 ); + self allowcrouch( 0 ); + self allowads( 0 ); + self allowjump( 0 ); + self disableweaponcycling(); + self setmovespeedscale( 1 ); + self setsprintduration( 4 ); + self setsprintcooldown( 0 ); + self stopshellshock(); + self.maxhealth = 256; + self.health = 256; + self.meleedamage = 1000; + self detachall(); + + if ( isdefined( level.custom_zombie_player_loadout ) ) + self [[ level.custom_zombie_player_loadout ]](); + else + { + self setmodel( "c_zom_player_zombie_fb" ); + self.voice = "american"; + self.skeleton = "base"; + self setviewmodel( "c_zom_zombie_viewhands" ); + } + + self.shock_onpain = 0; + self disableinvulnerability(); + + if ( isdefined( level.player_movement_suppressed ) ) + self freezecontrols( level.player_movement_suppressed ); + else if ( !( isdefined( self.hostmigrationcontrolsfrozen ) && self.hostmigrationcontrolsfrozen ) ) + self freezecontrols( 0 ); + + self.is_in_process_of_zombify = 0; +} + +turn_to_human() +{ + if ( self.sessionstate == "playing" && !( isdefined( self.is_zombie ) && self.is_zombie ) && !( isdefined( self.laststand ) && self.laststand ) ) + return; + + if ( isdefined( self.is_in_process_of_humanify ) && self.is_in_process_of_humanify ) + return; + + while ( isdefined( self.is_in_process_of_zombify ) && self.is_in_process_of_zombify ) + wait 0.1; + + self playsoundtoplayer( "evt_spawn", self ); + playsoundatposition( "evt_disappear_3d", self.origin ); + self setclientfield( "player_has_eyes", 0 ); + self ghost(); + self notify( "humanify" ); + self.is_in_process_of_humanify = 1; + self.is_zombie = 0; + self notify( "clear_red_flashing_overlay" ); + self.team = self.prevteam; + self.pers["team"] = self.prevteam; + self.sessionteam = self.prevteam; + wait_network_frame(); + self maps\mp\gametypes_zm\_zm_gametype::onspawnplayer(); + self.maxhealth = 100; + self.health = 100; + self freezecontrols( 1 ); + + if ( self hasweapon( "death_throe_zm" ) ) + self takeweapon( "death_throe_zm" ); + + self unsetperk( "specialty_noname" ); + self unsetperk( "specialty_unlimitedsprint" ); + self unsetperk( "specialty_fallheight" ); + self turned_enable_player_weapons(); + self maps\mp\zombies\_zm_audio::setexertvoice( 0 ); + self.turned_visionset = 0; + maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_turned", self ); + self setclientfieldtoplayer( "turned_ir", 0 ); + self setmovespeedscale( 1.0 ); + self.ignoreme = 0; + self.shock_onpain = 1; + self enableweaponcycling(); + self allowstand( 1 ); + self allowprone( 1 ); + self allowcrouch( 1 ); + self allowads( 1 ); + self allowjump( 1 ); + self turnedhuman(); + self enableoffhandweapons(); + self stopshellshock(); + self.laststand = undefined; + self.is_burning = undefined; + self.meleedamage = undefined; + self detachall(); + self [[ level.givecustomcharacters ]](); + + if ( !self hasweapon( "knife_zm" ) ) + self giveweapon( "knife_zm" ); + + wait_network_frame(); + + if ( !isdefined( self ) ) + return; + + self disableinvulnerability(); + + if ( isdefined( level.player_movement_suppressed ) ) + self freezecontrols( level.player_movement_suppressed ); + else if ( !( isdefined( self.hostmigrationcontrolsfrozen ) && self.hostmigrationcontrolsfrozen ) ) + self freezecontrols( 0 ); + + self show(); + playsoundatposition( "evt_appear_3d", self.origin ); + self.is_in_process_of_humanify = 0; +} + +deletezombiesinradius( origin ) +{ + zombies = get_round_enemy_array(); + maxradius = 128; + + foreach ( zombie in zombies ) + { + if ( isdefined( zombie ) && isalive( zombie ) && !( isdefined( zombie.is_being_used_as_spawner ) && zombie.is_being_used_as_spawner ) ) + { + if ( distancesquared( zombie.origin, origin ) < maxradius * maxradius ) + { + playfx( level._effect["wood_chunk_destory"], zombie.origin ); + zombie thread silentlyremovezombie(); + } + + wait 0.05; + } + } +} + +turned_give_melee_weapon() +{ + assert( isdefined( self.turnedmeleeweapon ) ); + assert( self.turnedmeleeweapon != "none" ); + self.turned_had_knife = self hasweapon( "knife_zm" ); + + if ( isdefined( self.turned_had_knife ) && self.turned_had_knife ) + self takeweapon( "knife_zm" ); + + self giveweapon( self.turnedmeleeweapon_dw ); + self givemaxammo( self.turnedmeleeweapon_dw ); + self giveweapon( self.turnedmeleeweapon ); + self givemaxammo( self.turnedmeleeweapon ); + self switchtoweapon( self.turnedmeleeweapon_dw ); + self switchtoweapon( self.turnedmeleeweapon ); +} + +turned_player_buttons() +{ + self endon( "disconnect" ); + self endon( "humanify" ); + level endon( "end_game" ); + + while ( isdefined( self.is_zombie ) && self.is_zombie ) + { + if ( self attackbuttonpressed() || self adsbuttonpressed() || self meleebuttonpressed() ) + { + if ( cointoss() ) + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "attack", undefined ); + + while ( self attackbuttonpressed() || self adsbuttonpressed() || self meleebuttonpressed() ) + wait 0.05; + } + + if ( self usebuttonpressed() ) + { + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "taunt", undefined ); + + while ( self usebuttonpressed() ) + wait 0.05; + } + + if ( self issprinting() ) + { + while ( self issprinting() ) + { + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "sprint", undefined ); + wait 0.05; + } + } + + wait 0.05; + } +} + +turned_disable_player_weapons() +{ + if ( isdefined( self.is_zombie ) && self.is_zombie ) + return; + + weaponinventory = self getweaponslist(); + self.lastactiveweapon = self getcurrentweapon(); + self setlaststandprevweap( self.lastactiveweapon ); + self.laststandpistol = undefined; + self.hadpistol = 0; + + if ( !isdefined( self.turnedmeleeweapon ) ) + self.turnedmeleeweapon = level.turnedmeleeweapon; + + if ( !isdefined( self.turnedmeleeweapon_dw ) ) + self.turnedmeleeweapon_dw = level.turnedmeleeweapon_dw; + + self takeallweapons(); + self disableweaponcycling(); +} + +turned_enable_player_weapons() +{ + self takeallweapons(); + self enableweaponcycling(); + self enableoffhandweapons(); + self.turned_had_knife = undefined; + + if ( isdefined( level.humanify_custom_loadout ) ) + { + self thread [[ level.humanify_custom_loadout ]](); + return; + } + else if ( !self hasweapon( "rottweil72_zm" ) ) + { + self giveweapon( "rottweil72_zm" ); + self switchtoweapon( "rottweil72_zm" ); + } + + if ( !( isdefined( self.is_zombie ) && self.is_zombie ) && !self hasweapon( level.start_weapon ) ) + { + if ( !self hasweapon( "knife_zm" ) ) + self giveweapon( "knife_zm" ); + + self give_start_weapon( 0 ); + } + + if ( self hasweapon( "rottweil72_zm" ) ) + { + self setweaponammoclip( "rottweil72_zm", 2 ); + self setweaponammostock( "rottweil72_zm", 0 ); + } + + if ( self hasweapon( level.start_weapon ) ) + self givemaxammo( level.start_weapon ); + + if ( self hasweapon( self get_player_lethal_grenade() ) ) + self getweaponammoclip( self get_player_lethal_grenade() ); + else + self giveweapon( self get_player_lethal_grenade() ); + + self setweaponammoclip( self get_player_lethal_grenade(), 2 ); +} + +get_farthest_available_zombie( player ) +{ + while ( true ) + { + zombies = get_array_of_closest( player.origin, getaiarray( level.zombie_team ) ); + + for ( x = 0; x < zombies.size; x++ ) + { + zombie = zombies[x]; + + if ( isdefined( zombie ) && isalive( zombie ) && !( isdefined( zombie.in_the_ground ) && zombie.in_the_ground ) && !( isdefined( zombie.gibbed ) && zombie.gibbed ) && !( isdefined( zombie.head_gibbed ) && zombie.head_gibbed ) && !( isdefined( zombie.is_being_used_as_spawnpoint ) && zombie.is_being_used_as_spawnpoint ) && zombie in_playable_area() ) + { + zombie.is_being_used_as_spawnpoint = 1; + return zombie; + } + } + + wait 0.05; + } +} + +get_available_human() +{ + players = get_players(); + + foreach ( player in players ) + { + if ( !( isdefined( player.is_zombie ) && player.is_zombie ) ) + return player; + } +} + +silentlyremovezombie() +{ + self.skip_death_notetracks = 1; + self.nodeathragdoll = 1; + self dodamage( self.maxhealth * 2, self.origin, self, self, "none", "MOD_SUICIDE" ); + self self_delete(); +} + +getspawnpoint() +{ + spawnpoint = self maps\mp\gametypes_zm\_spawnlogic::getspawnpoint_dm( level._turned_zombie_respawnpoints ); + return spawnpoint; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_unitrigger.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_unitrigger.gsc new file mode 100644 index 0000000..6c7a736 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_unitrigger.gsc @@ -0,0 +1,711 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_zonemgr; + +init() +{ + level._unitriggers = spawnstruct(); + level._unitriggers._deferredinitlist = []; + level._unitriggers.trigger_pool = []; + level._unitriggers.trigger_stubs = []; + level._unitriggers.dynamic_stubs = []; + level._unitriggers.system_trigger_funcs = []; + level._unitriggers.largest_radius = 64; + stubs_keys = array( "unitrigger_radius", "unitrigger_radius_use", "unitrigger_box", "unitrigger_box_use" ); + stubs = []; + + for ( i = 0; i < stubs_keys.size; i++ ) + stubs = arraycombine( stubs, getstructarray( stubs_keys[i], "script_unitrigger_type" ), 1, 0 ); + + for ( i = 0; i < stubs.size; i++ ) + register_unitrigger( stubs[i] ); +} + +register_unitrigger_system_func( system, trigger_func ) +{ + level._unitriggers.system_trigger_funcs[system] = trigger_func; +} + +unitrigger_force_per_player_triggers( unitrigger_stub, opt_on_off = 1 ) +{ + unitrigger_stub.trigger_per_player = opt_on_off; +} + +unitrigger_trigger( player ) +{ + if ( self.trigger_per_player ) + return self.playertrigger[player getentitynumber()]; + else + return self.trigger; +} + +unitrigger_origin() +{ + if ( isdefined( self.originfunc ) ) + origin = self [[ self.originfunc ]](); + else + origin = self.origin; + + return origin; +} + +register_unitrigger_internal( unitrigger_stub, trigger_func ) +{ + if ( !isdefined( unitrigger_stub.script_unitrigger_type ) ) + { +/# + println( "Cannot register a unitrigger with no script_unitrigger_type. Ignoring." ); +#/ + return; + } + + if ( isdefined( trigger_func ) ) + unitrigger_stub.trigger_func = trigger_func; + else if ( isdefined( unitrigger_stub.unitrigger_system ) && isdefined( level._unitriggers.system_trigger_funcs[unitrigger_stub.unitrigger_system] ) ) + unitrigger_stub.trigger_func = level._unitriggers.system_trigger_funcs[unitrigger_stub.unitrigger_system]; + + switch ( unitrigger_stub.script_unitrigger_type ) + { + case "unitrigger_radius_use": + case "unitrigger_radius": + if ( !isdefined( unitrigger_stub.radius ) ) + unitrigger_stub.radius = 32; + + if ( !isdefined( unitrigger_stub.script_height ) ) + unitrigger_stub.script_height = 64; + + unitrigger_stub.test_radius_sq = ( unitrigger_stub.radius + 15.0 ) * ( unitrigger_stub.radius + 15.0 ); + break; + case "unitrigger_box_use": + case "unitrigger_box": + if ( !isdefined( unitrigger_stub.script_width ) ) + unitrigger_stub.script_width = 64; + + if ( !isdefined( unitrigger_stub.script_height ) ) + unitrigger_stub.script_height = 64; + + if ( !isdefined( unitrigger_stub.script_length ) ) + unitrigger_stub.script_length = 64; + + box_radius = length( ( unitrigger_stub.script_width / 2, unitrigger_stub.script_length / 2, unitrigger_stub.script_height / 2 ) ); + + if ( !isdefined( unitrigger_stub.radius ) || unitrigger_stub.radius < box_radius ) + unitrigger_stub.radius = box_radius; + + unitrigger_stub.test_radius_sq = ( box_radius + 15.0 ) * ( box_radius + 15.0 ); + break; + default: +/# + println( "Unknown unitrigger type registered : " + unitrigger_stub.targetname + " - ignoring." ); +#/ + return; + } + + if ( unitrigger_stub.radius > level._unitriggers.largest_radius ) + { + level._unitriggers.largest_radius = min( 113.0, unitrigger_stub.radius ); + + if ( isdefined( level.fixed_max_player_use_radius ) ) + { + if ( level.fixed_max_player_use_radius > getdvarfloat( "player_useRadius_zm" ) ) + setdvar( "player_useRadius_zm", level.fixed_max_player_use_radius ); + } + else if ( level._unitriggers.largest_radius > getdvarfloat( "player_useRadius_zm" ) ) + setdvar( "player_useRadius_zm", level._unitriggers.largest_radius ); + } + + level._unitriggers.trigger_stubs[level._unitriggers.trigger_stubs.size] = unitrigger_stub; + unitrigger_stub.registered = 1; +} + +register_unitrigger( unitrigger_stub, trigger_func ) +{ + register_unitrigger_internal( unitrigger_stub, trigger_func ); + level._unitriggers.dynamic_stubs[level._unitriggers.dynamic_stubs.size] = unitrigger_stub; +} + +unregister_unitrigger( unitrigger_stub ) +{ + thread unregister_unitrigger_internal( unitrigger_stub ); +} + +unregister_unitrigger_internal( unitrigger_stub ) +{ + if ( !isdefined( unitrigger_stub ) ) + return; + + unitrigger_stub.registered = 0; + + if ( isdefined( unitrigger_stub.trigger_per_player ) && unitrigger_stub.trigger_per_player ) + { + if ( isdefined( unitrigger_stub.playertrigger ) && unitrigger_stub.playertrigger.size > 0 ) + { + keys = getarraykeys( unitrigger_stub.playertrigger ); + + foreach ( key in keys ) + { + trigger = unitrigger_stub.playertrigger[key]; + trigger notify( "kill_trigger" ); + + if ( isdefined( trigger ) ) + trigger delete(); + } + + unitrigger_stub.playertrigger = []; + } + } + else if ( isdefined( unitrigger_stub.trigger ) ) + { + trigger = unitrigger_stub.trigger; + trigger notify( "kill_trigger" ); + trigger.stub.trigger = undefined; + trigger delete(); + } + + if ( isdefined( unitrigger_stub.in_zone ) ) + { + arrayremovevalue( level.zones[unitrigger_stub.in_zone].unitrigger_stubs, unitrigger_stub ); + unitrigger_stub.in_zone = undefined; + } + + arrayremovevalue( level._unitriggers.trigger_stubs, unitrigger_stub ); + arrayremovevalue( level._unitriggers.dynamic_stubs, unitrigger_stub ); +} + +delay_delete_contact_ent() +{ + self.last_used_time = 0; + + while ( true ) + { + wait 1; + + if ( gettime() - self.last_used_time > 1000 ) + { + self delete(); + level._unitriggers.contact_ent = undefined; + return; + } + } +} + +register_static_unitrigger( unitrigger_stub, trigger_func, recalculate_zone ) +{ + if ( level.zones.size == 0 ) + { + unitrigger_stub.trigger_func = trigger_func; + level._unitriggers._deferredinitlist[level._unitriggers._deferredinitlist.size] = unitrigger_stub; + return; + } + + if ( !isdefined( level._unitriggers.contact_ent ) ) + { + level._unitriggers.contact_ent = spawn( "script_origin", ( 0, 0, 0 ) ); + level._unitriggers.contact_ent thread delay_delete_contact_ent(); + } + + register_unitrigger_internal( unitrigger_stub, trigger_func ); + + if ( !isdefined( level._no_static_unitriggers ) ) + { + level._unitriggers.contact_ent.last_used_time = gettime(); + level._unitriggers.contact_ent.origin = unitrigger_stub.origin; + + if ( isdefined( unitrigger_stub.in_zone ) && !isdefined( recalculate_zone ) ) + { + level.zones[unitrigger_stub.in_zone].unitrigger_stubs[level.zones[unitrigger_stub.in_zone].unitrigger_stubs.size] = unitrigger_stub; + return; + } + + keys = getarraykeys( level.zones ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( level._unitriggers.contact_ent maps\mp\zombies\_zm_zonemgr::entity_in_zone( keys[i], 1 ) ) + { + if ( !isdefined( level.zones[keys[i]].unitrigger_stubs ) ) + level.zones[keys[i]].unitrigger_stubs = []; + + level.zones[keys[i]].unitrigger_stubs[level.zones[keys[i]].unitrigger_stubs.size] = unitrigger_stub; + unitrigger_stub.in_zone = keys[i]; + return; + } + } + } + + level._unitriggers.dynamic_stubs[level._unitriggers.dynamic_stubs.size] = unitrigger_stub; + unitrigger_stub.registered = 1; +} + +reregister_unitrigger_as_dynamic( unitrigger_stub ) +{ + unregister_unitrigger_internal( unitrigger_stub ); + register_unitrigger( unitrigger_stub, unitrigger_stub.trigger_func ); +} + +debug_unitriggers() +{ +/# + while ( true ) + { + if ( getdvarint( _hash_D256F24B ) > 0 ) + { + for ( i = 0; i < level._unitriggers.trigger_stubs.size; i++ ) + { + triggerstub = level._unitriggers.trigger_stubs[i]; + color = vectorscale( ( 1, 0, 0 ), 0.75 ); + + if ( !isdefined( triggerstub.in_zone ) ) + color = vectorscale( ( 1, 1, 0 ), 0.65 ); + else if ( level.zones[triggerstub.in_zone].is_active ) + color = ( 1, 1, 0 ); + + if ( isdefined( triggerstub.trigger ) || isdefined( triggerstub.playertrigger ) && triggerstub.playertrigger.size > 0 ) + { + color = ( 0, 1, 0 ); + + if ( isdefined( triggerstub.playertrigger ) && triggerstub.playertrigger.size > 0 ) + print3d( triggerstub.origin, triggerstub.playertrigger.size, color, 1, 1, 1 ); + } + + origin = triggerstub unitrigger_origin(); + + switch ( triggerstub.script_unitrigger_type ) + { + case "unitrigger_radius_use": + case "unitrigger_radius": + if ( triggerstub.radius ) + circle( origin, triggerstub.radius, color, 0, 0, 1 ); + + if ( triggerstub.script_height ) + line( origin, origin + ( 0, 0, triggerstub.script_height ), color, 0, 1 ); + + break; + case "unitrigger_box_use": + case "unitrigger_box": + vec = ( triggerstub.script_width / 2, triggerstub.script_length / 2, triggerstub.script_height / 2 ); + box( origin, vec * -1, vec, triggerstub.angles[1], color, 1, 0, 1 ); + break; + } + } + } + + wait 0.05; + } +#/ +} + +cleanup_trigger( trigger, player ) +{ + trigger notify( "kill_trigger" ); + + if ( isdefined( trigger.stub.trigger_per_player ) && trigger.stub.trigger_per_player ) + trigger.stub.playertrigger[player getentitynumber()] = undefined; + else + trigger.stub.trigger = undefined; + + trigger delete(); + level._unitriggers.trigger_pool[player getentitynumber()] = undefined; +} + +assess_and_apply_visibility( trigger, stub, player, default_keep ) +{ + if ( !isdefined( trigger ) || !isdefined( stub ) ) + return 0; + + keep_thread = default_keep; + + if ( !isdefined( stub.prompt_and_visibility_func ) || trigger [[ stub.prompt_and_visibility_func ]]( player ) ) + { + keep_thread = 1; + + if ( !( isdefined( trigger.thread_running ) && trigger.thread_running ) ) + trigger thread trigger_thread( trigger.stub.trigger_func ); + + trigger.thread_running = 1; + + if ( isdefined( trigger.reassess_time ) && trigger.reassess_time <= 0.0 ) + trigger.reassess_time = undefined; + } + else + { + if ( isdefined( trigger.thread_running ) && trigger.thread_running ) + keep_thread = 0; + + trigger.thread_running = 0; + + if ( isdefined( stub.inactive_reasses_time ) ) + trigger.reassess_time = stub.inactive_reasses_time; + else + trigger.reassess_time = 1.0; + } + + return keep_thread; +} + +main() +{ + level thread debug_unitriggers(); + + if ( level._unitriggers._deferredinitlist.size ) + { + for ( i = 0; i < level._unitriggers._deferredinitlist.size; i++ ) + register_static_unitrigger( level._unitriggers._deferredinitlist[i], level._unitriggers._deferredinitlist[i].trigger_func ); + + for ( i = 0; i < level._unitriggers._deferredinitlist.size; i++ ) + level._unitriggers._deferredinitlist[i] = undefined; + + level._unitriggers._deferredinitlist = undefined; + } + + valid_range = level._unitriggers.largest_radius + 15.0; + valid_range_sq = valid_range * valid_range; + + while ( !isdefined( level.active_zone_names ) ) + wait 0.1; + + while ( true ) + { + waited = 0; + active_zone_names = level.active_zone_names; + candidate_list = []; + + for ( j = 0; j < active_zone_names.size; j++ ) + { + if ( isdefined( level.zones[active_zone_names[j]].unitrigger_stubs ) ) + candidate_list = arraycombine( candidate_list, level.zones[active_zone_names[j]].unitrigger_stubs, 1, 0 ); + } + + candidate_list = arraycombine( candidate_list, level._unitriggers.dynamic_stubs, 1, 0 ); + players = getplayers(); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( !isdefined( player ) ) + continue; + + player_origin = player.origin + vectorscale( ( 0, 0, 1 ), 35.0 ); + trigger = level._unitriggers.trigger_pool[player getentitynumber()]; + closest = []; + + if ( isdefined( trigger ) ) + { + dst = valid_range_sq; + origin = trigger unitrigger_origin(); + dst = trigger.stub.test_radius_sq; + time_to_ressess = 0; + + if ( distance2dsquared( player_origin, origin ) < dst ) + { + if ( isdefined( trigger.reassess_time ) ) + { + trigger.reassess_time -= 0.05; + + if ( trigger.reassess_time > 0.0 ) + continue; + + time_to_ressess = 1; + } + else + continue; + } + + closest = get_closest_unitriggers( player_origin, candidate_list, valid_range ); + + if ( isdefined( trigger ) && time_to_ressess && ( closest.size < 2 || isdefined( trigger.thread_running ) && trigger.thread_running ) ) + { + if ( assess_and_apply_visibility( trigger, trigger.stub, player, 1 ) ) + continue; + } + + if ( isdefined( trigger ) ) + cleanup_trigger( trigger, player ); + } + else + closest = get_closest_unitriggers( player_origin, candidate_list, valid_range ); + + index = 0; + last_trigger = undefined; + + while ( index < closest.size ) + { + if ( !is_player_valid( player ) && !( isdefined( closest[index].ignore_player_valid ) && closest[index].ignore_player_valid ) ) + { + index++; + continue; + } + + if ( !( isdefined( closest[index].registered ) && closest[index].registered ) ) + { + index++; + continue; + } + + if ( isdefined( last_trigger ) ) + { + cleanup_trigger( last_trigger, player ); + last_trigger = undefined; + } + + trigger = undefined; + + if ( isdefined( closest[index].trigger_per_player ) && closest[index].trigger_per_player ) + { + if ( !isdefined( closest[index].playertrigger ) ) + closest[index].playertrigger = []; + + if ( !isdefined( closest[index].playertrigger[player getentitynumber()] ) ) + { + trigger = build_trigger_from_unitrigger_stub( closest[index], player ); + level._unitriggers.trigger_pool[player getentitynumber()] = trigger; + } + } + else if ( !isdefined( closest[index].trigger ) ) + { + trigger = build_trigger_from_unitrigger_stub( closest[index], player ); + level._unitriggers.trigger_pool[player getentitynumber()] = trigger; + } + + if ( isdefined( trigger ) ) + { + trigger.parent_player = player; + + if ( assess_and_apply_visibility( trigger, closest[index], player, 0 ) ) + break; + + last_trigger = trigger; + } + + index++; + waited = 1; + wait 0.05; + } + } + + if ( !waited ) + wait 0.05; + } +} + +run_visibility_function_for_all_triggers() +{ + if ( !isdefined( self.prompt_and_visibility_func ) ) + return; + + if ( isdefined( self.trigger_per_player ) && self.trigger_per_player ) + { + if ( !isdefined( self.playertrigger ) ) + return; + + players = getplayers(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( self.playertrigger[players[i] getentitynumber()] ) ) + self.playertrigger[players[i] getentitynumber()] [[ self.prompt_and_visibility_func ]]( players[i] ); + } + } + else if ( isdefined( self.trigger ) ) + self.trigger [[ self.prompt_and_visibility_func ]]( getplayers()[0] ); +} + +build_trigger_from_unitrigger_stub( stub, player ) +{ + if ( isdefined( level._zm_build_trigger_from_unitrigger_stub_override ) ) + { + if ( stub [[ level._zm_build_trigger_from_unitrigger_stub_override ]]( player ) ) + return; + } + + radius = stub.radius; + + if ( !isdefined( radius ) ) + radius = 64; + + script_height = stub.script_height; + + if ( !isdefined( script_height ) ) + script_height = 64; + + script_width = stub.script_width; + + if ( !isdefined( script_width ) ) + script_width = 64; + + script_length = stub.script_length; + + if ( !isdefined( script_length ) ) + script_length = 64; + + trigger = undefined; + origin = stub unitrigger_origin(); + + switch ( stub.script_unitrigger_type ) + { + case "unitrigger_radius": + trigger = spawn( "trigger_radius", origin, 0, radius, script_height ); + break; + case "unitrigger_radius_use": + trigger = spawn( "trigger_radius_use", origin, 0, radius, script_height ); + break; + case "unitrigger_box": + trigger = spawn( "trigger_box", origin, 0, script_width, script_length, script_height ); + break; + case "unitrigger_box_use": + trigger = spawn( "trigger_box_use", origin, 0, script_width, script_length, script_height ); + break; + } + + if ( isdefined( trigger ) ) + { + if ( isdefined( stub.angles ) ) + trigger.angles = stub.angles; + + if ( isdefined( stub.onspawnfunc ) ) + stub [[ stub.onspawnfunc ]]( trigger ); + + if ( isdefined( stub.cursor_hint ) ) + { + if ( stub.cursor_hint == "HINT_WEAPON" && isdefined( stub.cursor_hint_weapon ) ) + trigger setcursorhint( stub.cursor_hint, stub.cursor_hint_weapon ); + else + trigger setcursorhint( stub.cursor_hint ); + } + + trigger triggerignoreteam(); + + if ( isdefined( stub.require_look_at ) && stub.require_look_at ) + trigger usetriggerrequirelookat(); + + if ( isdefined( stub.hint_string ) ) + { + if ( isdefined( stub.hint_parm2 ) ) + trigger sethintstring( stub.hint_string, stub.hint_parm1, stub.hint_parm2 ); + else if ( isdefined( stub.hint_parm1 ) ) + trigger sethintstring( stub.hint_string, stub.hint_parm1 ); + else if ( isdefined( stub.cost ) ) + trigger sethintstring( stub.hint_string, stub.cost ); + else + trigger sethintstring( stub.hint_string ); + } + + trigger.stub = stub; + } + + copy_zombie_keys_onto_trigger( trigger, stub ); + + if ( isdefined( stub.trigger_per_player ) && stub.trigger_per_player ) + { + if ( isdefined( trigger ) ) + { + trigger setinvisibletoall(); + trigger setvisibletoplayer( player ); + } + + if ( !isdefined( stub.playertrigger ) ) + stub.playertrigger = []; + + stub.playertrigger[player getentitynumber()] = trigger; + } + else + stub.trigger = trigger; + + trigger.thread_running = 0; + return trigger; +} + +copy_zombie_keys_onto_trigger( trig, stub ) +{ + trig.script_noteworthy = stub.script_noteworthy; + trig.targetname = stub.targetname; + trig.target = stub.target; + trig.zombie_weapon_upgrade = stub.zombie_weapon_upgrade; + trig.clientfieldname = stub.clientfieldname; + trig.usetime = stub.usetime; +} + +trigger_thread( trigger_func ) +{ + self endon( "kill_trigger" ); + + if ( isdefined( trigger_func ) ) + self [[ trigger_func ]](); +} + +get_closest_unitrigger_index( org, array, dist = 9999999 ) +{ + distsq = dist * dist; + + if ( array.size < 1 ) + return; + + index = undefined; + + for ( i = 0; i < array.size; i++ ) + { + origin = array[i] unitrigger_origin(); + radius_sq = array[i].test_radius_sq; + newdistsq = distance2dsquared( origin, org ); + + if ( newdistsq >= radius_sq ) + continue; + + if ( newdistsq >= distsq ) + continue; + + distsq = newdistsq; + index = i; + } + + return index; +} + +get_closest_unitriggers( org, array, dist ) +{ + triggers = []; + + if ( !isdefined( dist ) ) + dist = 9999999; + + distsq = dist * dist; + + if ( array.size < 1 ) + return triggers; + + index = undefined; + + for ( i = 0; i < array.size; i++ ) + { + if ( !isdefined( array[i] ) ) + continue; + + origin = array[i] unitrigger_origin(); + radius_sq = array[i].test_radius_sq; + newdistsq = distance2dsquared( origin, org ); + + if ( newdistsq >= radius_sq ) + continue; + + if ( abs( origin[2] - org[2] ) > 42 ) + continue; + + array[i].dsquared = newdistsq; + + for ( j = 0; j < triggers.size && newdistsq > triggers[j].dsquared; j++ ) + { + + } + + arrayinsert( triggers, array[i], j ); + + if ( 9 == i % 10 ) + wait 0.05; + } + + return triggers; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_utility.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_utility.gsc new file mode 100644 index 0000000..af5a66f --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_utility.gsc @@ -0,0 +1,5036 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\animscripts\zm_run; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\zombies\_zm_server_throttle; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_power; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\gametypes_zm\_hud_message; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_audio; + +init_utility() +{ + +} + +is_classic() +{ + var = getdvar( "ui_zm_gamemodegroup" ); + + if ( var == "zclassic" ) + return true; + + return false; +} + +is_standard() +{ + var = getdvar( "ui_gametype" ); + + if ( var == "zstandard" ) + return true; + + return false; +} + +convertsecondstomilliseconds( seconds ) +{ + return seconds * 1000; +} + +is_player() +{ + return isplayer( self ) || isdefined( self.pers ) && ( isdefined( self.pers["isBot"] ) && self.pers["isBot"] ); +} + +lerp( chunk ) +{ + link = spawn( "script_origin", self getorigin() ); + link.angles = self.first_node.angles; + self linkto( link ); + link rotateto( self.first_node.angles, level._contextual_grab_lerp_time ); + link moveto( self.attacking_spot, level._contextual_grab_lerp_time ); + link waittill_multiple( "rotatedone", "movedone" ); + self unlink(); + link delete(); +} + +clear_mature_blood() +{ + blood_patch = getentarray( "mature_blood", "targetname" ); + + if ( is_mature() ) + return; + + if ( isdefined( blood_patch ) ) + { + for ( i = 0; i < blood_patch.size; i++ ) + blood_patch[i] delete(); + } +} + +recalc_zombie_array() +{ + +} + +clear_all_corpses() +{ + corpse_array = getcorpsearray(); + + for ( i = 0; i < corpse_array.size; i++ ) + { + if ( isdefined( corpse_array[i] ) ) + corpse_array[i] delete(); + } +} + +get_current_corpse_count() +{ + corpse_array = getcorpsearray(); + + if ( isdefined( corpse_array ) ) + return corpse_array.size; + + return 0; +} + +get_current_actor_count() +{ + count = 0; + actors = getaispeciesarray( level.zombie_team, "all" ); + + if ( isdefined( actors ) ) + count += actors.size; + + count += get_current_corpse_count(); + return count; +} + +get_current_zombie_count() +{ + enemies = get_round_enemy_array(); + return enemies.size; +} + +get_round_enemy_array() +{ + enemies = []; + valid_enemies = []; + enemies = getaispeciesarray( level.zombie_team, "all" ); + + for ( i = 0; i < enemies.size; i++ ) + { + if ( isdefined( enemies[i].ignore_enemy_count ) && enemies[i].ignore_enemy_count ) + continue; + + valid_enemies[valid_enemies.size] = enemies[i]; + } + + return valid_enemies; +} + +init_zombie_run_cycle() +{ + if ( isdefined( level.speed_change_round ) ) + { + if ( level.round_number >= level.speed_change_round ) + { + speed_percent = 0.2 + ( level.round_number - level.speed_change_round ) * 0.2; + speed_percent = min( speed_percent, 1 ); + change_round_max = int( level.speed_change_max * speed_percent ); + change_left = change_round_max - level.speed_change_num; + + if ( change_left == 0 ) + { + self set_zombie_run_cycle(); + return; + } + + change_speed = randomint( 100 ); + + if ( change_speed > 80 ) + { + self change_zombie_run_cycle(); + return; + } + + zombie_count = get_current_zombie_count(); + zombie_left = level.zombie_ai_limit - zombie_count; + + if ( zombie_left == change_left ) + { + self change_zombie_run_cycle(); + return; + } + } + } + + self set_zombie_run_cycle(); +} + +change_zombie_run_cycle() +{ + level.speed_change_num++; + + if ( level.gamedifficulty == 0 ) + self set_zombie_run_cycle( "sprint" ); + else + self set_zombie_run_cycle( "walk" ); + + self thread speed_change_watcher(); +} + +speed_change_watcher() +{ + self waittill( "death" ); + + if ( level.speed_change_num > 0 ) + level.speed_change_num--; +} + +set_zombie_run_cycle( new_move_speed ) +{ + self.zombie_move_speed_original = self.zombie_move_speed; + + if ( isdefined( new_move_speed ) ) + self.zombie_move_speed = new_move_speed; + else if ( level.gamedifficulty == 0 ) + self set_run_speed_easy(); + else + self set_run_speed(); + + self maps\mp\animscripts\zm_run::needsupdate(); + self.deathanim = self maps\mp\animscripts\zm_utility::append_missing_legs_suffix( "zm_death" ); +} + +set_run_speed() +{ + rand = randomintrange( level.zombie_move_speed, level.zombie_move_speed + 35 ); + + if ( rand <= 35 ) + self.zombie_move_speed = "walk"; + else if ( rand <= 70 ) + self.zombie_move_speed = "run"; + else + self.zombie_move_speed = "sprint"; +} + +set_run_speed_easy() +{ + rand = randomintrange( level.zombie_move_speed, level.zombie_move_speed + 25 ); + + if ( rand <= 35 ) + self.zombie_move_speed = "walk"; + else + self.zombie_move_speed = "run"; +} + +spawn_zombie( spawner, target_name, spawn_point, round_number ) +{ + if ( !isdefined( spawner ) ) + { +/# + println( "ZM >> spawn_zombie - NO SPAWNER DEFINED" ); +#/ + return undefined; + } + + while ( getfreeactorcount() < 1 ) + wait 0.05; + + spawner.script_moveoverride = 1; + + if ( isdefined( spawner.script_forcespawn ) && spawner.script_forcespawn ) + { + guy = spawner spawnactor(); + + if ( isdefined( level.giveextrazombies ) ) + guy [[ level.giveextrazombies ]](); + + guy enableaimassist(); + + if ( isdefined( round_number ) ) + guy._starting_round_number = round_number; + + guy.aiteam = level.zombie_team; + guy clearentityowner(); + level.zombiemeleeplayercounter = 0; + guy thread run_spawn_functions(); + guy forceteleport( spawner.origin ); + guy show(); + } + + spawner.count = 666; + + if ( !spawn_failed( guy ) ) + { + if ( isdefined( target_name ) ) + guy.targetname = target_name; + + return guy; + } + + return undefined; +} + +run_spawn_functions() +{ + self endon( "death" ); + waittillframeend; + + for ( i = 0; i < level.spawn_funcs[self.team].size; i++ ) + { + func = level.spawn_funcs[self.team][i]; + single_thread( self, func["function"], func["param1"], func["param2"], func["param3"], func["param4"], func["param5"] ); + } + + if ( isdefined( self.spawn_funcs ) ) + { + for ( i = 0; i < self.spawn_funcs.size; i++ ) + { + func = self.spawn_funcs[i]; + single_thread( self, func["function"], func["param1"], func["param2"], func["param3"], func["param4"] ); + } +/# + self.saved_spawn_functions = self.spawn_funcs; +#/ + self.spawn_funcs = undefined; +/# + self.spawn_funcs = self.saved_spawn_functions; + self.saved_spawn_functions = undefined; +#/ + self.spawn_funcs = undefined; + } +} + +create_simple_hud( client, team ) +{ + if ( isdefined( team ) ) + { + hud = newteamhudelem( team ); + hud.team = team; + } + else if ( isdefined( client ) ) + hud = newclienthudelem( client ); + else + hud = newhudelem(); + + level.hudelem_count++; + hud.foreground = 1; + hud.sort = 1; + hud.hidewheninmenu = 0; + return hud; +} + +destroy_hud() +{ + level.hudelem_count--; + self destroy(); +} + +all_chunks_intact( barrier, barrier_chunks ) +{ + if ( isdefined( barrier.zbarrier ) ) + { + pieces = barrier.zbarrier getzbarrierpieceindicesinstate( "closed" ); + + if ( pieces.size != barrier.zbarrier getnumzbarrierpieces() ) + return false; + } + else + { + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( barrier_chunks[i] get_chunk_state() != "repaired" ) + return false; + } + } + + return true; +} + +no_valid_repairable_boards( barrier, barrier_chunks ) +{ + if ( isdefined( barrier.zbarrier ) ) + { + pieces = barrier.zbarrier getzbarrierpieceindicesinstate( "open" ); + + if ( pieces.size ) + return false; + } + else + { + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( barrier_chunks[i] get_chunk_state() == "destroyed" ) + return false; + } + } + + return true; +} + +is_survival() +{ + var = getdvar( "ui_zm_gamemodegroup" ); + + if ( var == "zsurvival" ) + return true; + + return false; +} + +is_encounter() +{ + if ( isdefined( level._is_encounter ) && level._is_encounter ) + return true; + + var = getdvar( "ui_zm_gamemodegroup" ); + + if ( var == "zencounter" ) + { + level._is_encounter = 1; + return true; + } + + return false; +} + +all_chunks_destroyed( barrier, barrier_chunks ) +{ + if ( isdefined( barrier.zbarrier ) ) + { + pieces = arraycombine( barrier.zbarrier getzbarrierpieceindicesinstate( "open" ), barrier.zbarrier getzbarrierpieceindicesinstate( "opening" ), 1, 0 ); + + if ( pieces.size != barrier.zbarrier getnumzbarrierpieces() ) + return false; + } + else if ( isdefined( barrier_chunks ) ) + { + assert( isdefined( barrier_chunks ), "_zm_utility::all_chunks_destroyed - Barrier chunks undefined" ); + + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( barrier_chunks[i] get_chunk_state() != "destroyed" ) + return false; + } + } + + return true; +} + +check_point_in_playable_area( origin ) +{ + playable_area = getentarray( "player_volume", "script_noteworthy" ); + check_model = spawn( "script_model", origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + valid_point = 0; + + for ( i = 0; i < playable_area.size; i++ ) + { + if ( check_model istouching( playable_area[i] ) ) + valid_point = 1; + } + + check_model delete(); + return valid_point; +} + +check_point_in_enabled_zone( origin, zone_is_active, player_zones = getentarray( "player_volume", "script_noteworthy" ) ) +{ + if ( !isdefined( level.zones ) || !isdefined( player_zones ) ) + return 1; + + scr_org = spawn( "script_origin", origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ); + one_valid_zone = 0; + + for ( i = 0; i < player_zones.size; i++ ) + { + if ( scr_org istouching( player_zones[i] ) ) + { + zone = level.zones[player_zones[i].targetname]; + + if ( isdefined( zone ) && ( isdefined( zone.is_enabled ) && zone.is_enabled ) ) + { + if ( isdefined( zone_is_active ) && zone_is_active == 1 && !( isdefined( zone.is_active ) && zone.is_active ) ) + continue; + + one_valid_zone = 1; + break; + } + } + } + + scr_org delete(); + return one_valid_zone; +} + +round_up_to_ten( score ) +{ + new_score = score - score % 10; + + if ( new_score < score ) + new_score += 10; + + return new_score; +} + +round_up_score( score, value ) +{ + score = int( score ); + new_score = score - score % value; + + if ( new_score < score ) + new_score += value; + + return new_score; +} + +random_tan() +{ + rand = randomint( 100 ); + + if ( isdefined( level.char_percent_override ) ) + percentnotcharred = level.char_percent_override; + else + percentnotcharred = 65; +} + +places_before_decimal( num ) +{ + abs_num = abs( num ); + count = 0; + + while ( true ) + { + abs_num *= 0.1; + count += 1; + + if ( abs_num < 1 ) + return count; + } +} + +create_zombie_point_of_interest( attract_dist, num_attractors, added_poi_value, start_turned_on, initial_attract_func, arrival_attract_func, poi_team ) +{ + if ( !isdefined( added_poi_value ) ) + self.added_poi_value = 0; + else + self.added_poi_value = added_poi_value; + + if ( !isdefined( start_turned_on ) ) + start_turned_on = 1; + + self.script_noteworthy = "zombie_poi"; + self.poi_active = start_turned_on; + + if ( isdefined( attract_dist ) ) + self.poi_radius = attract_dist * attract_dist; + else + self.poi_radius = undefined; + + self.num_poi_attracts = num_attractors; + self.attract_to_origin = 1; + self.attractor_array = []; + self.initial_attract_func = undefined; + self.arrival_attract_func = undefined; + + if ( isdefined( poi_team ) ) + self._team = poi_team; + + if ( isdefined( initial_attract_func ) ) + self.initial_attract_func = initial_attract_func; + + if ( isdefined( arrival_attract_func ) ) + self.arrival_attract_func = arrival_attract_func; +} + +create_zombie_point_of_interest_attractor_positions( num_attract_dists, diff_per_dist, attractor_width ) +{ + self endon( "death" ); + forward = ( 0, 1, 0 ); + + if ( !isdefined( self.num_poi_attracts ) || isdefined( self.script_noteworthy ) && self.script_noteworthy != "zombie_poi" ) + return; + + if ( !isdefined( num_attract_dists ) ) + num_attract_dists = 4; + + if ( !isdefined( diff_per_dist ) ) + diff_per_dist = 45; + + if ( !isdefined( attractor_width ) ) + attractor_width = 45; + + self.attract_to_origin = 0; + self.num_attract_dists = num_attract_dists; + self.last_index = []; + + for ( i = 0; i < num_attract_dists; i++ ) + self.last_index[i] = -1; + + self.attract_dists = []; + + for ( i = 0; i < self.num_attract_dists; i++ ) + self.attract_dists[i] = diff_per_dist * ( i + 1 ); + + max_positions = []; + + for ( i = 0; i < self.num_attract_dists; i++ ) + max_positions[i] = int( 6.28 * self.attract_dists[i] / attractor_width ); + + num_attracts_per_dist = self.num_poi_attracts / self.num_attract_dists; + self.max_attractor_dist = self.attract_dists[self.attract_dists.size - 1] * 1.1; + diff = 0; + actual_num_positions = []; + + for ( i = 0; i < self.num_attract_dists; i++ ) + { + if ( num_attracts_per_dist > max_positions[i] + diff ) + { + actual_num_positions[i] = max_positions[i]; + diff += num_attracts_per_dist - max_positions[i]; + continue; + } + + actual_num_positions[i] = num_attracts_per_dist + diff; + diff = 0; + } + + self.attractor_positions = []; + failed = 0; + angle_offset = 0; + prev_last_index = -1; + + for ( j = 0; j < 4; j++ ) + { + if ( actual_num_positions[j] + failed < max_positions[j] ) + { + actual_num_positions[j] += failed; + failed = 0; + } + else if ( actual_num_positions[j] < max_positions[j] ) + { + actual_num_positions[j] = max_positions[j]; + failed = max_positions[j] - actual_num_positions[j]; + } + + failed += self generated_radius_attract_positions( forward, angle_offset, actual_num_positions[j], self.attract_dists[j] ); + angle_offset += 15; + self.last_index[j] = int( actual_num_positions[j] - failed + prev_last_index ); + prev_last_index = self.last_index[j]; + } + + self notify( "attractor_positions_generated" ); + level notify( "attractor_positions_generated" ); +} + +generated_radius_attract_positions( forward, offset, num_positions, attract_radius ) +{ + self endon( "death" ); + epsilon = 0.1; + failed = 0; + degs_per_pos = 360 / num_positions; + + for ( i = offset; i < 360 + offset; i += degs_per_pos ) + { + altforward = forward * attract_radius; + rotated_forward = ( cos( i ) * altforward[0] - sin( i ) * altforward[1], sin( i ) * altforward[0] + cos( i ) * altforward[1], altforward[2] ); + + if ( isdefined( level.poi_positioning_func ) ) + pos = [[ level.poi_positioning_func ]]( self.origin, rotated_forward ); + else if ( isdefined( level.use_alternate_poi_positioning ) && level.use_alternate_poi_positioning ) + pos = maps\mp\zombies\_zm_server_throttle::server_safe_ground_trace( "poi_trace", 10, self.origin + rotated_forward + vectorscale( ( 0, 0, 1 ), 10.0 ) ); + else + pos = maps\mp\zombies\_zm_server_throttle::server_safe_ground_trace( "poi_trace", 10, self.origin + rotated_forward + vectorscale( ( 0, 0, 1 ), 100.0 ) ); + + if ( !isdefined( pos ) ) + { + failed++; + continue; + } + + if ( isdefined( level.use_alternate_poi_positioning ) && level.use_alternate_poi_positioning ) + { + if ( isdefined( self ) && isdefined( self.origin ) ) + { + if ( self.origin[2] >= pos[2] - epsilon && self.origin[2] - pos[2] <= 150 ) + { + pos_array = []; + pos_array[0] = pos; + pos_array[1] = self; + self.attractor_positions[self.attractor_positions.size] = pos_array; + } + } + else + failed++; + + continue; + } + + if ( abs( pos[2] - self.origin[2] ) < 60 ) + { + pos_array = []; + pos_array[0] = pos; + pos_array[1] = self; + self.attractor_positions[self.attractor_positions.size] = pos_array; + continue; + } + + failed++; + } + + return failed; +} + +debug_draw_attractor_positions() +{ +/# + while ( true ) + { + while ( !isdefined( self.attractor_positions ) ) + { + wait 0.05; + continue; + } + + for ( i = 0; i < self.attractor_positions.size; i++ ) + line( self.origin, self.attractor_positions[i][0], ( 1, 0, 0 ), 1, 1 ); + + wait 0.05; + + if ( !isdefined( self ) ) + return; + } +#/ +} + +get_zombie_point_of_interest( origin, poi_array ) +{ + if ( isdefined( self.ignore_all_poi ) && self.ignore_all_poi ) + return undefined; + + curr_radius = undefined; + + if ( isdefined( poi_array ) ) + ent_array = poi_array; + else + ent_array = getentarray( "zombie_poi", "script_noteworthy" ); + + best_poi = undefined; + position = undefined; + best_dist = 100000000; + + for ( i = 0; i < ent_array.size; i++ ) + { + if ( !isdefined( ent_array[i].poi_active ) || !ent_array[i].poi_active ) + continue; + + if ( isdefined( self.ignore_poi_targetname ) && self.ignore_poi_targetname.size > 0 ) + { + if ( isdefined( ent_array[i].targetname ) ) + { + ignore = 0; + + for ( j = 0; j < self.ignore_poi_targetname.size; j++ ) + { + if ( ent_array[i].targetname == self.ignore_poi_targetname[j] ) + { + ignore = 1; + break; + } + } + + if ( ignore ) + continue; + } + } + + if ( isdefined( self.ignore_poi ) && self.ignore_poi.size > 0 ) + { + ignore = 0; + + for ( j = 0; j < self.ignore_poi.size; j++ ) + { + if ( self.ignore_poi[j] == ent_array[i] ) + { + ignore = 1; + break; + } + } + + if ( ignore ) + continue; + } + + dist = distancesquared( origin, ent_array[i].origin ); + dist -= ent_array[i].added_poi_value; + + if ( isdefined( ent_array[i].poi_radius ) ) + curr_radius = ent_array[i].poi_radius; + + if ( ( !isdefined( curr_radius ) || dist < curr_radius ) && dist < best_dist && ent_array[i] can_attract( self ) ) + { + best_poi = ent_array[i]; + best_dist = dist; + } + } + + if ( isdefined( best_poi ) ) + { + if ( isdefined( best_poi._team ) ) + { + if ( isdefined( self._race_team ) && self._race_team != best_poi._team ) + return undefined; + } + + if ( isdefined( best_poi._new_ground_trace ) && best_poi._new_ground_trace ) + { + position = []; + position[0] = groundpos_ignore_water_new( best_poi.origin + vectorscale( ( 0, 0, 1 ), 100.0 ) ); + position[1] = self; + } + else if ( isdefined( best_poi.attract_to_origin ) && best_poi.attract_to_origin ) + { + position = []; + position[0] = groundpos( best_poi.origin + vectorscale( ( 0, 0, 1 ), 100.0 ) ); + position[1] = self; + } + else + position = self add_poi_attractor( best_poi ); + + if ( isdefined( best_poi.initial_attract_func ) ) + self thread [[ best_poi.initial_attract_func ]]( best_poi ); + + if ( isdefined( best_poi.arrival_attract_func ) ) + self thread [[ best_poi.arrival_attract_func ]]( best_poi ); + } + + return position; +} + +activate_zombie_point_of_interest() +{ + if ( self.script_noteworthy != "zombie_poi" ) + return; + + self.poi_active = 1; +} + +deactivate_zombie_point_of_interest() +{ + if ( self.script_noteworthy != "zombie_poi" ) + return; + + for ( i = 0; i < self.attractor_array.size; i++ ) + self.attractor_array[i] notify( "kill_poi" ); + + self.attractor_array = []; + self.claimed_attractor_positions = []; + self.poi_active = 0; +} + +assign_zombie_point_of_interest( origin, poi ) +{ + position = undefined; + doremovalthread = 0; + + if ( isdefined( poi ) && poi can_attract( self ) ) + { + if ( !isdefined( poi.attractor_array ) || isdefined( poi.attractor_array ) && array_check_for_dupes( poi.attractor_array, self ) ) + doremovalthread = 1; + + position = self add_poi_attractor( poi ); + + if ( isdefined( position ) && doremovalthread && !array_check_for_dupes( poi.attractor_array, self ) ) + self thread update_on_poi_removal( poi ); + } + + return position; +} + +remove_poi_attractor( zombie_poi ) +{ + if ( !isdefined( zombie_poi.attractor_array ) ) + return; + + for ( i = 0; i < zombie_poi.attractor_array.size; i++ ) + { + if ( zombie_poi.attractor_array[i] == self ) + { + self notify( "kill_poi" ); + arrayremovevalue( zombie_poi.attractor_array, zombie_poi.attractor_array[i] ); + arrayremovevalue( zombie_poi.claimed_attractor_positions, zombie_poi.claimed_attractor_positions[i] ); + } + } +} + +array_check_for_dupes_using_compare( array, single, is_equal_fn ) +{ + for ( i = 0; i < array.size; i++ ) + { + if ( [[ is_equal_fn ]]( array[i], single ) ) + return false; + } + + return true; +} + +poi_locations_equal( loc1, loc2 ) +{ + return loc1[0] == loc2[0]; +} + +add_poi_attractor( zombie_poi ) +{ + if ( !isdefined( zombie_poi ) ) + return; + + if ( !isdefined( zombie_poi.attractor_array ) ) + zombie_poi.attractor_array = []; + + if ( array_check_for_dupes( zombie_poi.attractor_array, self ) ) + { + if ( !isdefined( zombie_poi.claimed_attractor_positions ) ) + zombie_poi.claimed_attractor_positions = []; + + if ( !isdefined( zombie_poi.attractor_positions ) || zombie_poi.attractor_positions.size <= 0 ) + return undefined; + + start = -1; + end = -1; + last_index = -1; + + for ( i = 0; i < 4; i++ ) + { + if ( zombie_poi.claimed_attractor_positions.size < zombie_poi.last_index[i] ) + { + start = last_index + 1; + end = zombie_poi.last_index[i]; + break; + } + + last_index = zombie_poi.last_index[i]; + } + + best_dist = 100000000; + best_pos = undefined; + + if ( start < 0 ) + start = 0; + + if ( end < 0 ) + return undefined; + + for ( i = int( start ); i <= int( end ); i++ ) + { + if ( !isdefined( zombie_poi.attractor_positions[i] ) ) + continue; + + if ( array_check_for_dupes_using_compare( zombie_poi.claimed_attractor_positions, zombie_poi.attractor_positions[i], ::poi_locations_equal ) ) + { + if ( isdefined( zombie_poi.attractor_positions[i][0] ) && isdefined( self.origin ) ) + { + dist = distancesquared( zombie_poi.attractor_positions[i][0], self.origin ); + + if ( dist < best_dist || !isdefined( best_pos ) ) + { + best_dist = dist; + best_pos = zombie_poi.attractor_positions[i]; + } + } + } + } + + if ( !isdefined( best_pos ) ) + return undefined; + + zombie_poi.attractor_array[zombie_poi.attractor_array.size] = self; + self thread update_poi_on_death( zombie_poi ); + zombie_poi.claimed_attractor_positions[zombie_poi.claimed_attractor_positions.size] = best_pos; + return best_pos; + } + else + { + for ( i = 0; i < zombie_poi.attractor_array.size; i++ ) + { + if ( zombie_poi.attractor_array[i] == self ) + { + if ( isdefined( zombie_poi.claimed_attractor_positions ) && isdefined( zombie_poi.claimed_attractor_positions[i] ) ) + return zombie_poi.claimed_attractor_positions[i]; + } + } + } + + return undefined; +} + +can_attract( attractor ) +{ + if ( !isdefined( self.attractor_array ) ) + self.attractor_array = []; + + if ( isdefined( self.attracted_array ) && !isinarray( self.attracted_array, attractor ) ) + return false; + + if ( !array_check_for_dupes( self.attractor_array, attractor ) ) + return true; + + if ( isdefined( self.num_poi_attracts ) && self.attractor_array.size >= self.num_poi_attracts ) + return false; + + return true; +} + +update_poi_on_death( zombie_poi ) +{ + self endon( "kill_poi" ); + + self waittill( "death" ); + + self remove_poi_attractor( zombie_poi ); +} + +update_on_poi_removal( zombie_poi ) +{ + zombie_poi waittill( "death" ); + + if ( !isdefined( zombie_poi.attractor_array ) ) + return; + + for ( i = 0; i < zombie_poi.attractor_array.size; i++ ) + { + if ( zombie_poi.attractor_array[i] == self ) + { + arrayremoveindex( zombie_poi.attractor_array, i ); + arrayremoveindex( zombie_poi.claimed_attractor_positions, i ); + } + } +} + +invalidate_attractor_pos( attractor_pos, zombie ) +{ + if ( !isdefined( self ) || !isdefined( attractor_pos ) ) + { + wait 0.1; + return undefined; + } + + if ( isdefined( self.attractor_positions ) && !array_check_for_dupes_using_compare( self.attractor_positions, attractor_pos, ::poi_locations_equal ) ) + { + index = 0; + + for ( i = 0; i < self.attractor_positions.size; i++ ) + { + if ( poi_locations_equal( self.attractor_positions[i], attractor_pos ) ) + index = i; + } + + for ( i = 0; i < self.last_index.size; i++ ) + { + if ( index <= self.last_index[i] ) + self.last_index[i]--; + } + + arrayremovevalue( self.attractor_array, zombie ); + arrayremovevalue( self.attractor_positions, attractor_pos ); + + for ( i = 0; i < self.claimed_attractor_positions.size; i++ ) + { + if ( self.claimed_attractor_positions[i][0] == attractor_pos[0] ) + arrayremovevalue( self.claimed_attractor_positions, self.claimed_attractor_positions[i] ); + } + } + else + wait 0.1; + + return get_zombie_point_of_interest( zombie.origin ); +} + +remove_poi_from_ignore_list( poi ) +{ + if ( isdefined( self.ignore_poi ) && self.ignore_poi.size > 0 ) + { + for ( i = 0; i < self.ignore_poi.size; i++ ) + { + if ( self.ignore_poi[i] == poi ) + { + arrayremovevalue( self.ignore_poi, self.ignore_poi[i] ); + return; + } + } + } +} + +add_poi_to_ignore_list( poi ) +{ + if ( !isdefined( self.ignore_poi ) ) + self.ignore_poi = []; + + add_poi = 1; + + if ( self.ignore_poi.size > 0 ) + { + for ( i = 0; i < self.ignore_poi.size; i++ ) + { + if ( self.ignore_poi[i] == poi ) + { + add_poi = 0; + break; + } + } + } + + if ( add_poi ) + self.ignore_poi[self.ignore_poi.size] = poi; +} + +default_validate_enemy_path_length( player ) +{ + max_dist = 1296; + d = distancesquared( self.origin, player.origin ); + + if ( d <= max_dist ) + return true; + + return false; +} + +get_path_length_to_enemy( enemy ) +{ + path_length = self calcpathlength( enemy.origin ); + return path_length; +} + +get_closest_player_using_paths( origin, players ) +{ + min_length_to_player = 9999999; + n_2d_distance_squared = 9999999; + player_to_return = undefined; + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + length_to_player = get_path_length_to_enemy( player ); + + if ( isdefined( level.validate_enemy_path_length ) ) + { + if ( length_to_player == 0 ) + { + valid = self thread [[ level.validate_enemy_path_length ]]( player ); + + if ( !valid ) + continue; + } + } + + if ( length_to_player < min_length_to_player ) + { + min_length_to_player = length_to_player; + player_to_return = player; + n_2d_distance_squared = distance2dsquared( self.origin, player.origin ); + continue; + } + + if ( length_to_player == min_length_to_player && length_to_player <= 5 ) + { + n_new_distance = distance2dsquared( self.origin, player.origin ); + + if ( n_new_distance < n_2d_distance_squared ) + { + min_length_to_player = length_to_player; + player_to_return = player; + n_2d_distance_squared = n_new_distance; + } + } + } + + return player_to_return; +} + +get_closest_valid_player( origin, ignore_player ) +{ + valid_player_found = 0; + players = get_players(); + + if ( isdefined( level._zombie_using_humangun ) && level._zombie_using_humangun ) + players = arraycombine( players, level._zombie_human_array, 0, 0 ); + + if ( isdefined( ignore_player ) ) + { + for ( i = 0; i < ignore_player.size; i++ ) + arrayremovevalue( players, ignore_player[i] ); + } + + done = 0; + + while ( players.size && !done ) + { + done = 1; + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( !is_player_valid( player, 1 ) ) + { + arrayremovevalue( players, player ); + done = 0; + break; + } + } + } + + if ( players.size == 0 ) + return undefined; + + while ( !valid_player_found ) + { + if ( isdefined( self.closest_player_override ) ) + player = [[ self.closest_player_override ]]( origin, players ); + else if ( isdefined( level.closest_player_override ) ) + player = [[ level.closest_player_override ]]( origin, players ); + else if ( isdefined( level.calc_closest_player_using_paths ) && level.calc_closest_player_using_paths ) + player = get_closest_player_using_paths( origin, players ); + else + player = getclosest( origin, players ); + + if ( !isdefined( player ) || players.size == 0 ) + return undefined; + + if ( isdefined( level._zombie_using_humangun ) && level._zombie_using_humangun && isai( player ) ) + return player; + + if ( !is_player_valid( player, 1 ) ) + { + arrayremovevalue( players, player ); + + if ( players.size == 0 ) + return undefined; + + continue; + } + + return player; + } +} + +is_player_valid( player, checkignoremeflag, ignore_laststand_players ) +{ + if ( !isdefined( player ) ) + return 0; + + if ( !isalive( player ) ) + return 0; + + if ( !isplayer( player ) ) + return 0; + + if ( isdefined( player.is_zombie ) && player.is_zombie == 1 ) + return 0; + + if ( player.sessionstate == "spectator" ) + return 0; + + if ( player.sessionstate == "intermission" ) + return 0; + + if ( isdefined( self.intermission ) && self.intermission ) + return 0; + + if ( !( isdefined( ignore_laststand_players ) && ignore_laststand_players ) ) + { + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + return 0; + } + + if ( isdefined( checkignoremeflag ) && checkignoremeflag && player.ignoreme ) + return 0; + + if ( isdefined( level.is_player_valid_override ) ) + return [[ level.is_player_valid_override ]]( player ); + + return 1; +} + +get_number_of_valid_players() +{ + players = get_players(); + num_player_valid = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( is_player_valid( players[i] ) ) + num_player_valid += 1; + } + + return num_player_valid; +} + +in_revive_trigger() +{ + if ( isdefined( self.rt_time ) && self.rt_time + 100 >= gettime() ) + return self.in_rt_cached; + + self.rt_time = gettime(); + players = level.players; + + for ( i = 0; i < players.size; i++ ) + { + current_player = players[i]; + + if ( isdefined( current_player ) && isdefined( current_player.revivetrigger ) && isalive( current_player ) ) + { + if ( self istouching( current_player.revivetrigger ) ) + { + self.in_rt_cached = 1; + return 1; + } + } + } + + self.in_rt_cached = 0; + return 0; +} + +get_closest_node( org, nodes ) +{ + return getclosest( org, nodes ); +} + +non_destroyed_bar_board_order( origin, chunks ) +{ + first_bars = []; + first_bars1 = []; + first_bars2 = []; + + for ( i = 0; i < chunks.size; i++ ) + { + if ( isdefined( chunks[i].script_team ) && chunks[i].script_team == "classic_boards" ) + { + if ( isdefined( chunks[i].script_parameters ) && chunks[i].script_parameters == "board" ) + return get_closest_2d( origin, chunks ); + else if ( isdefined( chunks[i].script_team ) && chunks[i].script_team == "bar_board_variant1" || chunks[i].script_team == "bar_board_variant2" || chunks[i].script_team == "bar_board_variant4" || chunks[i].script_team == "bar_board_variant5" ) + return undefined; + } + else if ( isdefined( chunks[i].script_team ) && chunks[i].script_team == "new_barricade" ) + { + if ( isdefined( chunks[i].script_parameters ) && ( chunks[i].script_parameters == "repair_board" || chunks[i].script_parameters == "barricade_vents" ) ) + return get_closest_2d( origin, chunks ); + } + } + + for ( i = 0; i < chunks.size; i++ ) + { + if ( isdefined( chunks[i].script_team ) && chunks[i].script_team == "6_bars_bent" || chunks[i].script_team == "6_bars_prestine" ) + { + if ( isdefined( chunks[i].script_parameters ) && chunks[i].script_parameters == "bar" ) + { + if ( isdefined( chunks[i].script_noteworthy ) ) + { + if ( chunks[i].script_noteworthy == "4" || chunks[i].script_noteworthy == "6" ) + first_bars[first_bars.size] = chunks[i]; + } + } + } + } + + for ( i = 0; i < first_bars.size; i++ ) + { + if ( isdefined( chunks[i].script_team ) && chunks[i].script_team == "6_bars_bent" || chunks[i].script_team == "6_bars_prestine" ) + { + if ( isdefined( chunks[i].script_parameters ) && chunks[i].script_parameters == "bar" ) + { + if ( !first_bars[i].destroyed ) + return first_bars[i]; + } + } + } + + for ( i = 0; i < chunks.size; i++ ) + { + if ( isdefined( chunks[i].script_team ) && chunks[i].script_team == "6_bars_bent" || chunks[i].script_team == "6_bars_prestine" ) + { + if ( isdefined( chunks[i].script_parameters ) && chunks[i].script_parameters == "bar" ) + { + if ( !chunks[i].destroyed ) + return get_closest_2d( origin, chunks ); + } + } + } +} + +non_destroyed_grate_order( origin, chunks_grate ) +{ + grate_order = []; + grate_order1 = []; + grate_order2 = []; + grate_order3 = []; + grate_order4 = []; + grate_order5 = []; + grate_order6 = []; + + if ( isdefined( chunks_grate ) ) + { + for ( i = 0; i < chunks_grate.size; i++ ) + { + if ( isdefined( chunks_grate[i].script_parameters ) && chunks_grate[i].script_parameters == "grate" ) + { + if ( isdefined( chunks_grate[i].script_noteworthy ) && chunks_grate[i].script_noteworthy == "1" ) + grate_order1[grate_order1.size] = chunks_grate[i]; + + if ( isdefined( chunks_grate[i].script_noteworthy ) && chunks_grate[i].script_noteworthy == "2" ) + grate_order2[grate_order2.size] = chunks_grate[i]; + + if ( isdefined( chunks_grate[i].script_noteworthy ) && chunks_grate[i].script_noteworthy == "3" ) + grate_order3[grate_order3.size] = chunks_grate[i]; + + if ( isdefined( chunks_grate[i].script_noteworthy ) && chunks_grate[i].script_noteworthy == "4" ) + grate_order4[grate_order4.size] = chunks_grate[i]; + + if ( isdefined( chunks_grate[i].script_noteworthy ) && chunks_grate[i].script_noteworthy == "5" ) + grate_order5[grate_order5.size] = chunks_grate[i]; + + if ( isdefined( chunks_grate[i].script_noteworthy ) && chunks_grate[i].script_noteworthy == "6" ) + grate_order6[grate_order6.size] = chunks_grate[i]; + } + } + + for ( i = 0; i < chunks_grate.size; i++ ) + { + if ( isdefined( chunks_grate[i].script_parameters ) && chunks_grate[i].script_parameters == "grate" ) + { + if ( isdefined( grate_order1[i] ) ) + { + if ( grate_order1[i].state == "repaired" ) + { + grate_order2[i] thread show_grate_pull(); + return grate_order1[i]; + } + + if ( grate_order2[i].state == "repaired" ) + { +/# + iprintlnbold( " pull bar2 " ); +#/ + grate_order3[i] thread show_grate_pull(); + return grate_order2[i]; + } + else if ( grate_order3[i].state == "repaired" ) + { +/# + iprintlnbold( " pull bar3 " ); +#/ + grate_order4[i] thread show_grate_pull(); + return grate_order3[i]; + } + else if ( grate_order4[i].state == "repaired" ) + { +/# + iprintlnbold( " pull bar4 " ); +#/ + grate_order5[i] thread show_grate_pull(); + return grate_order4[i]; + } + else if ( grate_order5[i].state == "repaired" ) + { +/# + iprintlnbold( " pull bar5 " ); +#/ + grate_order6[i] thread show_grate_pull(); + return grate_order5[i]; + } + else if ( grate_order6[i].state == "repaired" ) + return grate_order6[i]; + } + } + } + } +} + +non_destroyed_variant1_order( origin, chunks_variant1 ) +{ + variant1_order = []; + variant1_order1 = []; + variant1_order2 = []; + variant1_order3 = []; + variant1_order4 = []; + variant1_order5 = []; + variant1_order6 = []; + + if ( isdefined( chunks_variant1 ) ) + { + for ( i = 0; i < chunks_variant1.size; i++ ) + { + if ( isdefined( chunks_variant1[i].script_team ) && chunks_variant1[i].script_team == "bar_board_variant1" ) + { + if ( isdefined( chunks_variant1[i].script_noteworthy ) ) + { + if ( chunks_variant1[i].script_noteworthy == "1" ) + variant1_order1[variant1_order1.size] = chunks_variant1[i]; + + if ( chunks_variant1[i].script_noteworthy == "2" ) + variant1_order2[variant1_order2.size] = chunks_variant1[i]; + + if ( chunks_variant1[i].script_noteworthy == "3" ) + variant1_order3[variant1_order3.size] = chunks_variant1[i]; + + if ( chunks_variant1[i].script_noteworthy == "4" ) + variant1_order4[variant1_order4.size] = chunks_variant1[i]; + + if ( chunks_variant1[i].script_noteworthy == "5" ) + variant1_order5[variant1_order5.size] = chunks_variant1[i]; + + if ( chunks_variant1[i].script_noteworthy == "6" ) + variant1_order6[variant1_order6.size] = chunks_variant1[i]; + } + } + } + + for ( i = 0; i < chunks_variant1.size; i++ ) + { + if ( isdefined( chunks_variant1[i].script_team ) && chunks_variant1[i].script_team == "bar_board_variant1" ) + { + if ( isdefined( variant1_order2[i] ) ) + { + if ( variant1_order2[i].state == "repaired" ) + return variant1_order2[i]; + else if ( variant1_order3[i].state == "repaired" ) + return variant1_order3[i]; + else if ( variant1_order4[i].state == "repaired" ) + return variant1_order4[i]; + else if ( variant1_order6[i].state == "repaired" ) + return variant1_order6[i]; + else if ( variant1_order5[i].state == "repaired" ) + return variant1_order5[i]; + else if ( variant1_order1[i].state == "repaired" ) + return variant1_order1[i]; + } + } + } + } +} + +non_destroyed_variant2_order( origin, chunks_variant2 ) +{ + variant2_order = []; + variant2_order1 = []; + variant2_order2 = []; + variant2_order3 = []; + variant2_order4 = []; + variant2_order5 = []; + variant2_order6 = []; + + if ( isdefined( chunks_variant2 ) ) + { + for ( i = 0; i < chunks_variant2.size; i++ ) + { + if ( isdefined( chunks_variant2[i].script_team ) && chunks_variant2[i].script_team == "bar_board_variant2" ) + { + if ( isdefined( chunks_variant2[i].script_noteworthy ) && chunks_variant2[i].script_noteworthy == "1" ) + variant2_order1[variant2_order1.size] = chunks_variant2[i]; + + if ( isdefined( chunks_variant2[i].script_noteworthy ) && chunks_variant2[i].script_noteworthy == "2" ) + variant2_order2[variant2_order2.size] = chunks_variant2[i]; + + if ( isdefined( chunks_variant2[i].script_noteworthy ) && chunks_variant2[i].script_noteworthy == "3" ) + variant2_order3[variant2_order3.size] = chunks_variant2[i]; + + if ( isdefined( chunks_variant2[i].script_noteworthy ) && chunks_variant2[i].script_noteworthy == "4" ) + variant2_order4[variant2_order4.size] = chunks_variant2[i]; + + if ( isdefined( chunks_variant2[i].script_noteworthy ) && chunks_variant2[i].script_noteworthy == "5" && isdefined( chunks_variant2[i].script_location ) && chunks_variant2[i].script_location == "5" ) + variant2_order5[variant2_order5.size] = chunks_variant2[i]; + + if ( isdefined( chunks_variant2[i].script_noteworthy ) && chunks_variant2[i].script_noteworthy == "5" && isdefined( chunks_variant2[i].script_location ) && chunks_variant2[i].script_location == "6" ) + variant2_order6[variant2_order6.size] = chunks_variant2[i]; + } + } + + for ( i = 0; i < chunks_variant2.size; i++ ) + { + if ( isdefined( chunks_variant2[i].script_team ) && chunks_variant2[i].script_team == "bar_board_variant2" ) + { + if ( isdefined( variant2_order1[i] ) ) + { + if ( variant2_order1[i].state == "repaired" ) + return variant2_order1[i]; + else if ( variant2_order2[i].state == "repaired" ) + return variant2_order2[i]; + else if ( variant2_order3[i].state == "repaired" ) + return variant2_order3[i]; + else if ( variant2_order5[i].state == "repaired" ) + return variant2_order5[i]; + else if ( variant2_order4[i].state == "repaired" ) + return variant2_order4[i]; + else if ( variant2_order6[i].state == "repaired" ) + return variant2_order6[i]; + } + } + } + } +} + +non_destroyed_variant4_order( origin, chunks_variant4 ) +{ + variant4_order = []; + variant4_order1 = []; + variant4_order2 = []; + variant4_order3 = []; + variant4_order4 = []; + variant4_order5 = []; + variant4_order6 = []; + + if ( isdefined( chunks_variant4 ) ) + { + for ( i = 0; i < chunks_variant4.size; i++ ) + { + if ( isdefined( chunks_variant4[i].script_team ) && chunks_variant4[i].script_team == "bar_board_variant4" ) + { + if ( isdefined( chunks_variant4[i].script_noteworthy ) && chunks_variant4[i].script_noteworthy == "1" && !isdefined( chunks_variant4[i].script_location ) ) + variant4_order1[variant4_order1.size] = chunks_variant4[i]; + + if ( isdefined( chunks_variant4[i].script_noteworthy ) && chunks_variant4[i].script_noteworthy == "2" ) + variant4_order2[variant4_order2.size] = chunks_variant4[i]; + + if ( isdefined( chunks_variant4[i].script_noteworthy ) && chunks_variant4[i].script_noteworthy == "3" ) + variant4_order3[variant4_order3.size] = chunks_variant4[i]; + + if ( isdefined( chunks_variant4[i].script_noteworthy ) && chunks_variant4[i].script_noteworthy == "1" && isdefined( chunks_variant4[i].script_location ) && chunks_variant4[i].script_location == "3" ) + variant4_order4[variant4_order4.size] = chunks_variant4[i]; + + if ( isdefined( chunks_variant4[i].script_noteworthy ) && chunks_variant4[i].script_noteworthy == "5" ) + variant4_order5[variant4_order5.size] = chunks_variant4[i]; + + if ( isdefined( chunks_variant4[i].script_noteworthy ) && chunks_variant4[i].script_noteworthy == "6" ) + variant4_order6[variant4_order6.size] = chunks_variant4[i]; + } + } + + for ( i = 0; i < chunks_variant4.size; i++ ) + { + if ( isdefined( chunks_variant4[i].script_team ) && chunks_variant4[i].script_team == "bar_board_variant4" ) + { + if ( isdefined( variant4_order1[i] ) ) + { + if ( variant4_order1[i].state == "repaired" ) + return variant4_order1[i]; + else if ( variant4_order6[i].state == "repaired" ) + return variant4_order6[i]; + else if ( variant4_order3[i].state == "repaired" ) + return variant4_order3[i]; + else if ( variant4_order4[i].state == "repaired" ) + return variant4_order4[i]; + else if ( variant4_order2[i].state == "repaired" ) + return variant4_order2[i]; + else if ( variant4_order5[i].state == "repaired" ) + return variant4_order5[i]; + } + } + } + } +} + +non_destroyed_variant5_order( origin, chunks_variant5 ) +{ + variant5_order = []; + variant5_order1 = []; + variant5_order2 = []; + variant5_order3 = []; + variant5_order4 = []; + variant5_order5 = []; + variant5_order6 = []; + + if ( isdefined( chunks_variant5 ) ) + { + for ( i = 0; i < chunks_variant5.size; i++ ) + { + if ( isdefined( chunks_variant5[i].script_team ) && chunks_variant5[i].script_team == "bar_board_variant5" ) + { + if ( isdefined( chunks_variant5[i].script_noteworthy ) ) + { + if ( chunks_variant5[i].script_noteworthy == "1" && !isdefined( chunks_variant5[i].script_location ) ) + variant5_order1[variant5_order1.size] = chunks_variant5[i]; + + if ( chunks_variant5[i].script_noteworthy == "2" ) + variant5_order2[variant5_order2.size] = chunks_variant5[i]; + + if ( isdefined( chunks_variant5[i].script_noteworthy ) && chunks_variant5[i].script_noteworthy == "1" && isdefined( chunks_variant5[i].script_location ) && chunks_variant5[i].script_location == "3" ) + variant5_order3[variant5_order3.size] = chunks_variant5[i]; + + if ( chunks_variant5[i].script_noteworthy == "4" ) + variant5_order4[variant5_order4.size] = chunks_variant5[i]; + + if ( chunks_variant5[i].script_noteworthy == "5" ) + variant5_order5[variant5_order5.size] = chunks_variant5[i]; + + if ( chunks_variant5[i].script_noteworthy == "6" ) + variant5_order6[variant5_order6.size] = chunks_variant5[i]; + } + } + } + + for ( i = 0; i < chunks_variant5.size; i++ ) + { + if ( isdefined( chunks_variant5[i].script_team ) && chunks_variant5[i].script_team == "bar_board_variant5" ) + { + if ( isdefined( variant5_order1[i] ) ) + { + if ( variant5_order1[i].state == "repaired" ) + return variant5_order1[i]; + else if ( variant5_order6[i].state == "repaired" ) + return variant5_order6[i]; + else if ( variant5_order3[i].state == "repaired" ) + return variant5_order3[i]; + else if ( variant5_order2[i].state == "repaired" ) + return variant5_order2[i]; + else if ( variant5_order5[i].state == "repaired" ) + return variant5_order5[i]; + else if ( variant5_order4[i].state == "repaired" ) + return variant5_order4[i]; + } + } + } + } +} + +show_grate_pull() +{ + wait 0.53; + self show(); + self vibrate( vectorscale( ( 0, 1, 0 ), 270.0 ), 0.2, 0.4, 0.4 ); +} + +get_closest_2d( origin, ents ) +{ + if ( !isdefined( ents ) ) + return undefined; + + dist = distance2d( origin, ents[0].origin ); + index = 0; + temp_array = []; + + for ( i = 1; i < ents.size; i++ ) + { + if ( isdefined( ents[i].unbroken ) && ents[i].unbroken == 1 ) + { + ents[i].index = i; + temp_array[temp_array.size] = ents[i]; + } + } + + if ( temp_array.size > 0 ) + { + index = temp_array[randomintrange( 0, temp_array.size )].index; + return ents[index]; + } + else + { + for ( i = 1; i < ents.size; i++ ) + { + temp_dist = distance2d( origin, ents[i].origin ); + + if ( temp_dist < dist ) + { + dist = temp_dist; + index = i; + } + } + + return ents[index]; + } +} + +disable_trigger() +{ + if ( !isdefined( self.disabled ) || !self.disabled ) + { + self.disabled = 1; + self.origin -= vectorscale( ( 0, 0, 1 ), 10000.0 ); + } +} + +enable_trigger() +{ + if ( !isdefined( self.disabled ) || !self.disabled ) + return; + + self.disabled = 0; + self.origin += vectorscale( ( 0, 0, 1 ), 10000.0 ); +} + +in_playable_area() +{ + playable_area = getentarray( "player_volume", "script_noteworthy" ); + + if ( !isdefined( playable_area ) ) + { +/# + println( "No playable area playable_area found! Assume EVERYWHERE is PLAYABLE" ); +#/ + return true; + } + + for ( i = 0; i < playable_area.size; i++ ) + { + if ( self istouching( playable_area[i] ) ) + return true; + } + + return false; +} + +get_closest_non_destroyed_chunk( origin, barrier, barrier_chunks ) +{ + chunks = undefined; + chunks_grate = undefined; + chunks_grate = get_non_destroyed_chunks_grate( barrier, barrier_chunks ); + chunks = get_non_destroyed_chunks( barrier, barrier_chunks ); + + if ( isdefined( barrier.zbarrier ) ) + { + if ( isdefined( chunks ) ) + return array_randomize( chunks )[0]; + + if ( isdefined( chunks_grate ) ) + return array_randomize( chunks_grate )[0]; + } + else if ( isdefined( chunks ) ) + return non_destroyed_bar_board_order( origin, chunks ); + else if ( isdefined( chunks_grate ) ) + return non_destroyed_grate_order( origin, chunks_grate ); + + return undefined; +} + +get_random_destroyed_chunk( barrier, barrier_chunks ) +{ + if ( isdefined( barrier.zbarrier ) ) + { + ret = undefined; + pieces = barrier.zbarrier getzbarrierpieceindicesinstate( "open" ); + + if ( pieces.size ) + ret = array_randomize( pieces )[0]; + + return ret; + } + else + { + chunk = undefined; + chunks_repair_grate = undefined; + chunks = get_destroyed_chunks( barrier_chunks ); + chunks_repair_grate = get_destroyed_repair_grates( barrier_chunks ); + + if ( isdefined( chunks ) ) + return chunks[randomint( chunks.size )]; + else if ( isdefined( chunks_repair_grate ) ) + return grate_order_destroyed( chunks_repair_grate ); + + return undefined; + } +} + +get_destroyed_repair_grates( barrier_chunks ) +{ + array = []; + + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( isdefined( barrier_chunks[i] ) ) + { + if ( isdefined( barrier_chunks[i].script_parameters ) && barrier_chunks[i].script_parameters == "grate" ) + array[array.size] = barrier_chunks[i]; + } + } + + if ( array.size == 0 ) + return undefined; + + return array; +} + +get_non_destroyed_chunks( barrier, barrier_chunks ) +{ + if ( isdefined( barrier.zbarrier ) ) + return barrier.zbarrier getzbarrierpieceindicesinstate( "closed" ); + else + { + array = []; + + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( isdefined( barrier_chunks[i].script_team ) && barrier_chunks[i].script_team == "classic_boards" ) + { + if ( isdefined( barrier_chunks[i].script_parameters ) && barrier_chunks[i].script_parameters == "board" ) + { + if ( barrier_chunks[i] get_chunk_state() == "repaired" ) + { + if ( barrier_chunks[i].origin == barrier_chunks[i].og_origin ) + array[array.size] = barrier_chunks[i]; + } + } + } + + if ( isdefined( barrier_chunks[i].script_team ) && barrier_chunks[i].script_team == "new_barricade" ) + { + if ( isdefined( barrier_chunks[i].script_parameters ) && ( barrier_chunks[i].script_parameters == "repair_board" || barrier_chunks[i].script_parameters == "barricade_vents" ) ) + { + if ( barrier_chunks[i] get_chunk_state() == "repaired" ) + { + if ( barrier_chunks[i].origin == barrier_chunks[i].og_origin ) + array[array.size] = barrier_chunks[i]; + } + } + + continue; + } + + if ( isdefined( barrier_chunks[i].script_team ) && barrier_chunks[i].script_team == "6_bars_bent" ) + { + if ( isdefined( barrier_chunks[i].script_parameters ) && barrier_chunks[i].script_parameters == "bar" ) + { + if ( barrier_chunks[i] get_chunk_state() == "repaired" ) + { + if ( barrier_chunks[i].origin == barrier_chunks[i].og_origin ) + array[array.size] = barrier_chunks[i]; + } + } + + continue; + } + + if ( isdefined( barrier_chunks[i].script_team ) && barrier_chunks[i].script_team == "6_bars_prestine" ) + { + if ( isdefined( barrier_chunks[i].script_parameters ) && barrier_chunks[i].script_parameters == "bar" ) + { + if ( barrier_chunks[i] get_chunk_state() == "repaired" ) + { + if ( barrier_chunks[i].origin == barrier_chunks[i].og_origin ) + array[array.size] = barrier_chunks[i]; + } + } + } + } + + if ( array.size == 0 ) + return undefined; + + return array; + } +} + +get_non_destroyed_chunks_grate( barrier, barrier_chunks ) +{ + if ( isdefined( barrier.zbarrier ) ) + return barrier.zbarrier getzbarrierpieceindicesinstate( "closed" ); + else + { + array = []; + + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( isdefined( barrier_chunks[i].script_parameters ) && barrier_chunks[i].script_parameters == "grate" ) + { + if ( isdefined( barrier_chunks[i] ) ) + array[array.size] = barrier_chunks[i]; + } + } + + if ( array.size == 0 ) + return undefined; + + return array; + } +} + +get_non_destroyed_variant1( barrier_chunks ) +{ + array = []; + + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( isdefined( barrier_chunks[i].script_team ) && barrier_chunks[i].script_team == "bar_board_variant1" ) + { + if ( isdefined( barrier_chunks[i] ) ) + array[array.size] = barrier_chunks[i]; + } + } + + if ( array.size == 0 ) + return undefined; + + return array; +} + +get_non_destroyed_variant2( barrier_chunks ) +{ + array = []; + + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( isdefined( barrier_chunks[i].script_team ) && barrier_chunks[i].script_team == "bar_board_variant2" ) + { + if ( isdefined( barrier_chunks[i] ) ) + array[array.size] = barrier_chunks[i]; + } + } + + if ( array.size == 0 ) + return undefined; + + return array; +} + +get_non_destroyed_variant4( barrier_chunks ) +{ + array = []; + + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( isdefined( barrier_chunks[i].script_team ) && barrier_chunks[i].script_team == "bar_board_variant4" ) + { + if ( isdefined( barrier_chunks[i] ) ) + array[array.size] = barrier_chunks[i]; + } + } + + if ( array.size == 0 ) + return undefined; + + return array; +} + +get_non_destroyed_variant5( barrier_chunks ) +{ + array = []; + + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( isdefined( barrier_chunks[i].script_team ) && barrier_chunks[i].script_team == "bar_board_variant5" ) + { + if ( isdefined( barrier_chunks[i] ) ) + array[array.size] = barrier_chunks[i]; + } + } + + if ( array.size == 0 ) + return undefined; + + return array; +} + +get_destroyed_chunks( barrier_chunks ) +{ + array = []; + + for ( i = 0; i < barrier_chunks.size; i++ ) + { + if ( barrier_chunks[i] get_chunk_state() == "destroyed" ) + { + if ( isdefined( barrier_chunks[i].script_parameters ) && barrier_chunks[i].script_parameters == "board" ) + { + array[array.size] = barrier_chunks[i]; + continue; + } + + if ( isdefined( barrier_chunks[i].script_parameters ) && barrier_chunks[i].script_parameters == "repair_board" || barrier_chunks[i].script_parameters == "barricade_vents" ) + { + array[array.size] = barrier_chunks[i]; + continue; + } + + if ( isdefined( barrier_chunks[i].script_parameters ) && barrier_chunks[i].script_parameters == "bar" ) + { + array[array.size] = barrier_chunks[i]; + continue; + } + + if ( isdefined( barrier_chunks[i].script_parameters ) && barrier_chunks[i].script_parameters == "grate" ) + return undefined; + } + } + + if ( array.size == 0 ) + return undefined; + + return array; +} + +grate_order_destroyed( chunks_repair_grate ) +{ + grate_repair_order = []; + grate_repair_order1 = []; + grate_repair_order2 = []; + grate_repair_order3 = []; + grate_repair_order4 = []; + grate_repair_order5 = []; + grate_repair_order6 = []; + + for ( i = 0; i < chunks_repair_grate.size; i++ ) + { + if ( isdefined( chunks_repair_grate[i].script_parameters ) && chunks_repair_grate[i].script_parameters == "grate" ) + { + if ( isdefined( chunks_repair_grate[i].script_noteworthy ) && chunks_repair_grate[i].script_noteworthy == "1" ) + grate_repair_order1[grate_repair_order1.size] = chunks_repair_grate[i]; + + if ( isdefined( chunks_repair_grate[i].script_noteworthy ) && chunks_repair_grate[i].script_noteworthy == "2" ) + grate_repair_order2[grate_repair_order2.size] = chunks_repair_grate[i]; + + if ( isdefined( chunks_repair_grate[i].script_noteworthy ) && chunks_repair_grate[i].script_noteworthy == "3" ) + grate_repair_order3[grate_repair_order3.size] = chunks_repair_grate[i]; + + if ( isdefined( chunks_repair_grate[i].script_noteworthy ) && chunks_repair_grate[i].script_noteworthy == "4" ) + grate_repair_order4[grate_repair_order4.size] = chunks_repair_grate[i]; + + if ( isdefined( chunks_repair_grate[i].script_noteworthy ) && chunks_repair_grate[i].script_noteworthy == "5" ) + grate_repair_order5[grate_repair_order5.size] = chunks_repair_grate[i]; + + if ( isdefined( chunks_repair_grate[i].script_noteworthy ) && chunks_repair_grate[i].script_noteworthy == "6" ) + grate_repair_order6[grate_repair_order6.size] = chunks_repair_grate[i]; + } + } + + for ( i = 0; i < chunks_repair_grate.size; i++ ) + { + if ( isdefined( chunks_repair_grate[i].script_parameters ) && chunks_repair_grate[i].script_parameters == "grate" ) + { + if ( isdefined( grate_repair_order1[i] ) ) + { + if ( grate_repair_order6[i].state == "destroyed" ) + { +/# + iprintlnbold( " Fix grate6 " ); +#/ + return grate_repair_order6[i]; + } + + if ( grate_repair_order5[i].state == "destroyed" ) + { +/# + iprintlnbold( " Fix grate5 " ); +#/ + grate_repair_order6[i] thread show_grate_repair(); + return grate_repair_order5[i]; + } + else if ( grate_repair_order4[i].state == "destroyed" ) + { +/# + iprintlnbold( " Fix grate4 " ); +#/ + grate_repair_order5[i] thread show_grate_repair(); + return grate_repair_order4[i]; + } + else if ( grate_repair_order3[i].state == "destroyed" ) + { +/# + iprintlnbold( " Fix grate3 " ); +#/ + grate_repair_order4[i] thread show_grate_repair(); + return grate_repair_order3[i]; + } + else if ( grate_repair_order2[i].state == "destroyed" ) + { +/# + iprintlnbold( " Fix grate2 " ); +#/ + grate_repair_order3[i] thread show_grate_repair(); + return grate_repair_order2[i]; + } + else if ( grate_repair_order1[i].state == "destroyed" ) + { +/# + iprintlnbold( " Fix grate1 " ); +#/ + grate_repair_order2[i] thread show_grate_repair(); + return grate_repair_order1[i]; + } + } + } + } +} + +show_grate_repair() +{ + wait 0.34; + self hide(); +} + +get_chunk_state() +{ + assert( isdefined( self.state ) ); + return self.state; +} + +is_float( num ) +{ + val = num - int( num ); + + if ( val != 0 ) + return true; + else + return false; +} + +array_limiter( array, total ) +{ + new_array = []; + + for ( i = 0; i < array.size; i++ ) + { + if ( i < total ) + new_array[new_array.size] = array[i]; + } + + return new_array; +} + +array_validate( array ) +{ + if ( isdefined( array ) && array.size > 0 ) + return true; + else + return false; +} + +add_spawner( spawner ) +{ + if ( isdefined( spawner.script_start ) && level.round_number < spawner.script_start ) + return; + + if ( isdefined( spawner.is_enabled ) && !spawner.is_enabled ) + return; + + if ( isdefined( spawner.has_been_added ) && spawner.has_been_added ) + return; + + spawner.has_been_added = 1; + level.zombie_spawn_locations[level.zombie_spawn_locations.size] = spawner; +} + +fake_physicslaunch( target_pos, power ) +{ + start_pos = self.origin; + gravity = getdvarint( "bg_gravity" ) * -1; + dist = distance( start_pos, target_pos ); + time = dist / power; + delta = target_pos - start_pos; + drop = 0.5 * gravity * ( time * time ); + velocity = ( delta[0] / time, delta[1] / time, ( delta[2] - drop ) / time ); + level thread draw_line_ent_to_pos( self, target_pos ); + self movegravity( velocity, time ); + return time; +} + +add_zombie_hint( ref, text ) +{ + if ( !isdefined( level.zombie_hints ) ) + level.zombie_hints = []; + + precachestring( text ); + level.zombie_hints[ref] = text; +} + +get_zombie_hint( ref ) +{ + if ( isdefined( level.zombie_hints[ref] ) ) + return level.zombie_hints[ref]; +/# + println( "UNABLE TO FIND HINT STRING " + ref ); +#/ + return level.zombie_hints["undefined"]; +} + +set_hint_string( ent, default_ref, cost ) +{ + ref = default_ref; + + if ( isdefined( ent.script_hint ) ) + ref = ent.script_hint; + + if ( isdefined( level.legacy_hint_system ) && level.legacy_hint_system ) + { + ref = ref + "_" + cost; + self sethintstring( get_zombie_hint( ref ) ); + } + else + { + hint = get_zombie_hint( ref ); + + if ( isdefined( cost ) ) + self sethintstring( hint, cost ); + else + self sethintstring( hint ); + } +} + +get_hint_string( ent, default_ref, cost ) +{ + ref = default_ref; + + if ( isdefined( ent.script_hint ) ) + ref = ent.script_hint; + + if ( isdefined( level.legacy_hint_system ) && level.legacy_hint_system && isdefined( cost ) ) + ref = ref + "_" + cost; + + return get_zombie_hint( ref ); +} + +unitrigger_set_hint_string( ent, default_ref, cost ) +{ + triggers = []; + + if ( self.trigger_per_player ) + triggers = self.playertrigger; + else + triggers[0] = self.trigger; + + foreach ( trigger in triggers ) + { + ref = default_ref; + + if ( isdefined( ent.script_hint ) ) + ref = ent.script_hint; + + if ( isdefined( level.legacy_hint_system ) && level.legacy_hint_system ) + { + ref = ref + "_" + cost; + trigger sethintstring( get_zombie_hint( ref ) ); + continue; + } + + hint = get_zombie_hint( ref ); + + if ( isdefined( cost ) ) + { + trigger sethintstring( hint, cost ); + continue; + } + + trigger sethintstring( hint ); + } +} + +add_sound( ref, alias ) +{ + if ( !isdefined( level.zombie_sounds ) ) + level.zombie_sounds = []; + + level.zombie_sounds[ref] = alias; +} + +play_sound_at_pos( ref, pos, ent ) +{ + if ( isdefined( ent ) ) + { + if ( isdefined( ent.script_soundalias ) ) + { + playsoundatposition( ent.script_soundalias, pos ); + return; + } + + if ( isdefined( self.script_sound ) ) + ref = self.script_sound; + } + + if ( ref == "none" ) + return; + + if ( !isdefined( level.zombie_sounds[ref] ) ) + { +/# + assertmsg( "Sound \"" + ref + "\" was not put to the zombie sounds list, please use add_sound( ref, alias ) at the start of your level." ); +#/ + return; + } + + playsoundatposition( level.zombie_sounds[ref], pos ); +} + +play_sound_on_ent( ref ) +{ + if ( isdefined( self.script_soundalias ) ) + { + self playsound( self.script_soundalias ); + return; + } + + if ( isdefined( self.script_sound ) ) + ref = self.script_sound; + + if ( ref == "none" ) + return; + + if ( !isdefined( level.zombie_sounds[ref] ) ) + { +/# + assertmsg( "Sound \"" + ref + "\" was not put to the zombie sounds list, please use add_sound( ref, alias ) at the start of your level." ); +#/ + return; + } + + self playsound( level.zombie_sounds[ref] ); +} + +play_loopsound_on_ent( ref ) +{ + if ( isdefined( self.script_firefxsound ) ) + ref = self.script_firefxsound; + + if ( ref == "none" ) + return; + + if ( !isdefined( level.zombie_sounds[ref] ) ) + { +/# + assertmsg( "Sound \"" + ref + "\" was not put to the zombie sounds list, please use add_sound( ref, alias ) at the start of your level." ); +#/ + return; + } + + self playsound( level.zombie_sounds[ref] ); +} + +string_to_float( string ) +{ + floatparts = strtok( string, "." ); + + if ( floatparts.size == 1 ) + return int( floatparts[0] ); + + whole = int( floatparts[0] ); + decimal = 0; + + for ( i = floatparts[1].size - 1; i >= 0; i-- ) + decimal = decimal / 10 + int( floatparts[1][i] ) / 10; + + if ( whole >= 0 ) + return whole + decimal; + else + return whole - decimal; +} + +onplayerconnect_callback( func ) +{ + addcallback( "on_player_connect", func ); +} + +onplayerdisconnect_callback( func ) +{ + addcallback( "on_player_disconnect", func ); +} + +set_zombie_var( var, value, is_float = 0, column = 1, is_team_based ) +{ + table = "mp/zombiemode.csv"; + table_value = tablelookup( table, 0, var, column ); + + if ( isdefined( table_value ) && table_value != "" ) + { + if ( is_float ) + value = float( table_value ); + else + value = int( table_value ); + } + + if ( isdefined( is_team_based ) && is_team_based ) + { + foreach ( team in level.teams ) + level.zombie_vars[team][var] = value; + } + else + level.zombie_vars[var] = value; + + return value; +} + +get_table_var( table = "mp/zombiemode.csv", var_name, value, is_float = 0, column = 1 ) +{ + table_value = tablelookup( table, 0, var_name, column ); + + if ( isdefined( table_value ) && table_value != "" ) + { + if ( is_float ) + value = string_to_float( table_value ); + else + value = int( table_value ); + } + + return value; +} + +hudelem_count() +{ +/# + max = 0; + curr_total = 0; + + while ( true ) + { + if ( level.hudelem_count > max ) + max = level.hudelem_count; + + println( "HudElems: " + level.hudelem_count + "[Peak: " + max + "]" ); + wait 0.05; + } +#/ +} + +debug_round_advancer() +{ +/# + while ( true ) + { + zombs = get_round_enemy_array(); + + for ( i = 0; i < zombs.size; i++ ) + { + zombs[i] dodamage( zombs[i].health + 666, ( 0, 0, 0 ) ); + wait 0.5; + } + } +#/ +} + +print_run_speed( speed ) +{ +/# + self endon( "death" ); + + while ( true ) + { + print3d( self.origin + vectorscale( ( 0, 0, 1 ), 64.0 ), speed, ( 1, 1, 1 ) ); + wait 0.05; + } +#/ +} + +draw_line_ent_to_ent( ent1, ent2 ) +{ +/# + if ( getdvarint( "zombie_debug" ) != 1 ) + return; + + ent1 endon( "death" ); + ent2 endon( "death" ); + + while ( true ) + { + line( ent1.origin, ent2.origin ); + wait 0.05; + } +#/ +} + +draw_line_ent_to_pos( ent, pos, end_on ) +{ +/# + if ( getdvarint( "zombie_debug" ) != 1 ) + return; + + ent endon( "death" ); + ent notify( "stop_draw_line_ent_to_pos" ); + ent endon( "stop_draw_line_ent_to_pos" ); + + if ( isdefined( end_on ) ) + ent endon( end_on ); + + while ( true ) + { + line( ent.origin, pos ); + wait 0.05; + } +#/ +} + +debug_print( msg ) +{ +/# + if ( getdvarint( "zombie_debug" ) > 0 ) + println( "######### ZOMBIE: " + msg ); +#/ +} + +debug_blocker( pos, rad, height ) +{ +/# + self notify( "stop_debug_blocker" ); + self endon( "stop_debug_blocker" ); + + for (;;) + { + if ( getdvarint( "zombie_debug" ) != 1 ) + return; + + wait 0.05; + drawcylinder( pos, rad, height ); + } +#/ +} + +drawcylinder( pos, rad, height ) +{ +/# + currad = rad; + curheight = height; + + for ( r = 0; r < 20; r++ ) + { + theta = r / 20 * 360; + theta2 = ( r + 1 ) / 20 * 360; + line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, 0 ) ); + line( pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, curheight ) ); + line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ) ); + } +#/ +} + +print3d_at_pos( msg, pos, thread_endon, offset ) +{ +/# + self endon( "death" ); + + if ( isdefined( thread_endon ) ) + { + self notify( thread_endon ); + self endon( thread_endon ); + } + + if ( !isdefined( offset ) ) + offset = ( 0, 0, 0 ); + + while ( true ) + { + print3d( self.origin + offset, msg ); + wait 0.05; + } +#/ +} + +debug_breadcrumbs() +{ +/# + self endon( "disconnect" ); + self notify( "stop_debug_breadcrumbs" ); + self endon( "stop_debug_breadcrumbs" ); + + while ( true ) + { + if ( getdvarint( "zombie_debug" ) != 1 ) + { + wait 1; + continue; + } + + for ( i = 0; i < self.zombie_breadcrumbs.size; i++ ) + drawcylinder( self.zombie_breadcrumbs[i], 5, 5 ); + + wait 0.05; + } +#/ +} + +debug_attack_spots_taken() +{ +/# + self notify( "stop_debug_breadcrumbs" ); + self endon( "stop_debug_breadcrumbs" ); + + while ( true ) + { + if ( getdvarint( "zombie_debug" ) != 2 ) + { + wait 1; + continue; + } + + wait 0.05; + count = 0; + + for ( i = 0; i < self.attack_spots_taken.size; i++ ) + { + if ( self.attack_spots_taken[i] ) + { + count++; + circle( self.attack_spots[i], 12, ( 1, 0, 0 ), 0, 1, 1 ); + continue; + } + + circle( self.attack_spots[i], 12, ( 0, 1, 0 ), 0, 1, 1 ); + } + + msg = "" + count + " / " + self.attack_spots_taken.size; + print3d( self.origin, msg ); + } +#/ +} + +float_print3d( msg, time ) +{ +/# + self endon( "death" ); + time = gettime() + time * 1000; + offset = vectorscale( ( 0, 0, 1 ), 72.0 ); + + while ( gettime() < time ) + { + offset += vectorscale( ( 0, 0, 1 ), 2.0 ); + print3d( self.origin + offset, msg, ( 1, 1, 1 ) ); + wait 0.05; + } +#/ +} + +do_player_vo( snd, variation_count ) +{ + index = maps\mp\zombies\_zm_weapons::get_player_index( self ); + sound = "zmb_vox_plr_" + index + "_" + snd; + + if ( isdefined( variation_count ) ) + sound = sound + "_" + randomintrange( 0, variation_count ); + + if ( !isdefined( level.player_is_speaking ) ) + level.player_is_speaking = 0; + + if ( level.player_is_speaking == 0 ) + { + level.player_is_speaking = 1; + self playsoundwithnotify( sound, "sound_done" ); + + self waittill( "sound_done" ); + + wait 2; + level.player_is_speaking = 0; + } +} + +stop_magic_bullet_shield() +{ + self.attackeraccuracy = 1; + self notify( "stop_magic_bullet_shield" ); + self.magic_bullet_shield = undefined; + self._mbs = undefined; +} + +magic_bullet_shield() +{ + if ( !( isdefined( self.magic_bullet_shield ) && self.magic_bullet_shield ) ) + { + if ( isai( self ) || isplayer( self ) ) + { + self.magic_bullet_shield = 1; +/# + level thread debug_magic_bullet_shield_death( self ); +#/ + if ( !isdefined( self._mbs ) ) + self._mbs = spawnstruct(); + + if ( isai( self ) ) + { + assert( isalive( self ), "Tried to do magic_bullet_shield on a dead or undefined guy." ); + self._mbs.last_pain_time = 0; + self._mbs.ignore_time = 2; + self._mbs.turret_ignore_time = 5; + } + + self.attackeraccuracy = 0.1; + } + else + { +/# + assertmsg( "magic_bullet_shield does not support entity of classname '" + self.classname + "'." ); +#/ + } + } +} + +debug_magic_bullet_shield_death( guy ) +{ + targetname = "none"; + + if ( isdefined( guy.targetname ) ) + targetname = guy.targetname; + + guy endon( "stop_magic_bullet_shield" ); + + guy waittill( "death" ); + + assert( !isdefined( guy ), "Guy died with magic bullet shield on with targetname: " + targetname ); +} + +is_magic_bullet_shield_enabled( ent ) +{ + if ( !isdefined( ent ) ) + return 0; + + return isdefined( ent.magic_bullet_shield ) && ent.magic_bullet_shield == 1; +} + +really_play_2d_sound( sound ) +{ + temp_ent = spawn( "script_origin", ( 0, 0, 0 ) ); + temp_ent playsoundwithnotify( sound, sound + "wait" ); + + temp_ent waittill( sound + "wait" ); + + wait 0.05; + temp_ent delete(); +} + +play_sound_2d( sound ) +{ + level thread really_play_2d_sound( sound ); +} + +include_weapon( weapon_name, in_box, collector, weighting_func ) +{ +/# + println( "ZM >> include_weapon = " + weapon_name ); +#/ + if ( !isdefined( in_box ) ) + in_box = 1; + + if ( !isdefined( collector ) ) + collector = 0; + + maps\mp\zombies\_zm_weapons::include_zombie_weapon( weapon_name, in_box, collector, weighting_func ); +} + +include_buildable( buildable_struct ) +{ +/# + println( "ZM >> include_buildable = " + buildable_struct.name ); +#/ + maps\mp\zombies\_zm_buildables::include_zombie_buildable( buildable_struct ); +} + +is_buildable_included( name ) +{ + if ( isdefined( level.zombie_include_buildables[name] ) ) + return true; + + return false; +} + +create_zombie_buildable_piece( modelname, radius, height, hud_icon ) +{ +/# + println( "ZM >> create_zombie_buildable_piece = " + modelname ); +#/ + self maps\mp\zombies\_zm_buildables::create_zombie_buildable_piece( modelname, radius, height, hud_icon ); +} + +is_buildable() +{ + return self maps\mp\zombies\_zm_buildables::is_buildable(); +} + +wait_for_buildable( buildable_name ) +{ + level waittill( buildable_name + "_built", player ); + + return player; +} + +include_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, start_power, target ) +{ + return maps\mp\zombies\_zm_power::add_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, start_power, target ); +} + +include_powerup( powerup_name ) +{ + maps\mp\zombies\_zm_powerups::include_zombie_powerup( powerup_name ); +} + +include_equipment( equipment_name ) +{ + maps\mp\zombies\_zm_equipment::include_zombie_equipment( equipment_name ); +} + +limit_equipment( equipment_name, limited ) +{ + maps\mp\zombies\_zm_equipment::limit_zombie_equipment( equipment_name, limited ); +} + +trigger_invisible( enable ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i] ) ) + self setinvisibletoplayer( players[i], enable ); + } +} + +print3d_ent( text, color, scale, offset, end_msg, overwrite ) +{ + self endon( "death" ); + + if ( isdefined( overwrite ) && overwrite && isdefined( self._debug_print3d_msg ) ) + { + self notify( "end_print3d" ); + wait 0.05; + } + + self endon( "end_print3d" ); + + if ( !isdefined( color ) ) + color = ( 1, 1, 1 ); + + if ( !isdefined( scale ) ) + scale = 1.0; + + if ( !isdefined( offset ) ) + offset = ( 0, 0, 0 ); + + if ( isdefined( end_msg ) ) + self endon( end_msg ); + + self._debug_print3d_msg = text; +/# + while ( true ) + { + print3d( self.origin + offset, self._debug_print3d_msg, color, scale ); + wait 0.05; + } +#/ +} + +isexplosivedamage( meansofdeath ) +{ + explosivedamage = "MOD_GRENADE MOD_GRENADE_SPLASH MOD_PROJECTILE_SPLASH MOD_EXPLOSIVE"; + + if ( issubstr( explosivedamage, meansofdeath ) ) + return true; + + return false; +} + +isprimarydamage( meansofdeath ) +{ + if ( meansofdeath == "MOD_RIFLE_BULLET" || meansofdeath == "MOD_PISTOL_BULLET" ) + return true; + + return false; +} + +isfiredamage( weapon, meansofdeath ) +{ + if ( ( issubstr( weapon, "flame" ) || issubstr( weapon, "molotov_" ) || issubstr( weapon, "napalmblob_" ) ) && ( meansofdeath == "MOD_BURNED" || meansofdeath == "MOD_GRENADE" || meansofdeath == "MOD_GRENADE_SPLASH" ) ) + return true; + + return false; +} + +isplayerexplosiveweapon( weapon, meansofdeath ) +{ + if ( !isexplosivedamage( meansofdeath ) ) + return false; + + if ( weapon == "artillery_mp" ) + return false; + + if ( issubstr( weapon, "turret" ) ) + return false; + + return true; +} + +create_counter_hud( x = 0 ) +{ + hud = create_simple_hud(); + hud.alignx = "left"; + hud.aligny = "top"; + hud.horzalign = "user_left"; + hud.vertalign = "user_top"; + hud.color = ( 1, 1, 1 ); + hud.fontscale = 32; + hud.x = x; + hud.alpha = 0; + hud setshader( "hud_chalk_1", 64, 64 ); + return hud; +} + +get_current_zone( return_zone ) +{ + flag_wait( "zones_initialized" ); + + for ( z = 0; z < level.zone_keys.size; z++ ) + { + zone_name = level.zone_keys[z]; + zone = level.zones[zone_name]; + + for ( i = 0; i < zone.volumes.size; i++ ) + { + if ( self istouching( zone.volumes[i] ) ) + { + if ( isdefined( return_zone ) && return_zone ) + return zone; + + return zone_name; + } + } + } + + return undefined; +} + +remove_mod_from_methodofdeath( mod ) +{ + return mod; +} + +clear_fog_threads() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + players[i] notify( "stop_fog" ); +} + +display_message( titletext, notifytext, duration ) +{ + notifydata = spawnstruct(); + notifydata.titletext = notifytext; + notifydata.notifytext = titletext; + notifydata.sound = "mus_level_up"; + notifydata.duration = duration; + notifydata.glowcolor = ( 1, 0, 0 ); + notifydata.color = ( 0, 0, 0 ); + notifydata.iconname = "hud_zombies_meat"; + self thread maps\mp\gametypes_zm\_hud_message::notifymessage( notifydata ); +} + +is_quad() +{ + return self.animname == "quad_zombie"; +} + +is_leaper() +{ + return self.animname == "leaper_zombie"; +} + +shock_onpain() +{ + self endon( "death" ); + self endon( "disconnect" ); + self notify( "stop_shock_onpain" ); + self endon( "stop_shock_onpain" ); + + if ( getdvar( "blurpain" ) == "" ) + setdvar( "blurpain", "on" ); + + while ( true ) + { + oldhealth = self.health; + + self waittill( "damage", damage, attacker, direction_vec, point, mod ); + + if ( isdefined( level.shock_onpain ) && !level.shock_onpain ) + continue; + + if ( isdefined( self.shock_onpain ) && !self.shock_onpain ) + continue; + + if ( self.health < 1 ) + continue; + + if ( mod == "MOD_PROJECTILE" || mod == "MOD_PROJECTILE_SPLASH" ) + continue; + else if ( mod == "MOD_GRENADE_SPLASH" || mod == "MOD_GRENADE" || mod == "MOD_EXPLOSIVE" ) + { + shocktype = undefined; + shocklight = undefined; + + if ( isdefined( self.is_burning ) && self.is_burning ) + { + shocktype = "lava"; + shocklight = "lava_small"; + } + + self shock_onexplosion( damage, shocktype, shocklight ); + } + else if ( getdvar( "blurpain" ) == "on" ) + self shellshock( "pain", 0.5 ); + } +} + +shock_onexplosion( damage, shocktype, shocklight ) +{ + time = 0; + scaled_damage = 100 * damage / self.maxhealth; + + if ( scaled_damage >= 90 ) + time = 4; + else if ( scaled_damage >= 50 ) + time = 3; + else if ( scaled_damage >= 25 ) + time = 2; + else if ( scaled_damage > 10 ) + time = 1; + + if ( time ) + { + if ( !isdefined( shocktype ) ) + shocktype = "explosion"; + + self shellshock( shocktype, time ); + } + else if ( isdefined( shocklight ) ) + self shellshock( shocklight, time ); +} + +increment_is_drinking() +{ +/# + if ( isdefined( level.devgui_dpad_watch ) && level.devgui_dpad_watch ) + { + self.is_drinking++; + return; + } +#/ + if ( !isdefined( self.is_drinking ) ) + self.is_drinking = 0; + + if ( self.is_drinking == 0 ) + { + self disableoffhandweapons(); + self disableweaponcycling(); + } + + self.is_drinking++; +} + +is_multiple_drinking() +{ + return self.is_drinking > 1; +} + +decrement_is_drinking() +{ + if ( self.is_drinking > 0 ) + self.is_drinking--; + else + { +/# + assertmsg( "making is_drinking less than 0" ); +#/ + } + + if ( self.is_drinking == 0 ) + { + self enableoffhandweapons(); + self enableweaponcycling(); + } +} + +clear_is_drinking() +{ + self.is_drinking = 0; + self enableoffhandweapons(); + self enableweaponcycling(); +} + +getweaponclasszm( weapon ) +{ + assert( isdefined( weapon ) ); + + if ( !isdefined( weapon ) ) + return undefined; + + if ( !isdefined( level.weaponclassarray ) ) + level.weaponclassarray = []; + + if ( isdefined( level.weaponclassarray[weapon] ) ) + return level.weaponclassarray[weapon]; + + baseweaponindex = getbaseweaponitemindex( weapon ) + 1; + weaponclass = tablelookupcolumnforrow( "zm/zm_statstable.csv", baseweaponindex, 2 ); + level.weaponclassarray[weapon] = weaponclass; + return weaponclass; +} + +spawn_weapon_model( weapon, model = getweaponmodel( weapon ), origin, angles, options ) +{ + weapon_model = spawn( "script_model", origin ); + + if ( isdefined( angles ) ) + weapon_model.angles = angles; + + if ( isdefined( options ) ) + weapon_model useweaponmodel( weapon, model, options ); + else + weapon_model useweaponmodel( weapon, model ); + + return weapon_model; +} + +is_limited_weapon( weapname ) +{ + if ( isdefined( level.limited_weapons ) ) + { + if ( isdefined( level.limited_weapons[weapname] ) ) + return true; + } + + return false; +} + +is_alt_weapon( weapname ) +{ + if ( getsubstr( weapname, 0, 3 ) == "gl_" ) + return true; + + if ( getsubstr( weapname, 0, 3 ) == "sf_" ) + return true; + + if ( getsubstr( weapname, 0, 10 ) == "dualoptic_" ) + return true; + + return false; +} + +is_grenade_launcher( weapname ) +{ + return weapname == "m32_zm" || weapname == "m32_upgraded_zm"; +} + +register_lethal_grenade_for_level( weaponname ) +{ + if ( is_lethal_grenade( weaponname ) ) + return; + + if ( !isdefined( level.zombie_lethal_grenade_list ) ) + level.zombie_lethal_grenade_list = []; + + level.zombie_lethal_grenade_list[weaponname] = weaponname; +} + +is_lethal_grenade( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( level.zombie_lethal_grenade_list ) ) + return 0; + + return isdefined( level.zombie_lethal_grenade_list[weaponname] ); +} + +is_player_lethal_grenade( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( self.current_lethal_grenade ) ) + return 0; + + return self.current_lethal_grenade == weaponname; +} + +get_player_lethal_grenade() +{ + grenade = ""; + + if ( isdefined( self.current_lethal_grenade ) ) + grenade = self.current_lethal_grenade; + + return grenade; +} + +set_player_lethal_grenade( weaponname ) +{ + self.current_lethal_grenade = weaponname; +} + +init_player_lethal_grenade() +{ + self set_player_lethal_grenade( level.zombie_lethal_grenade_player_init ); +} + +register_tactical_grenade_for_level( weaponname ) +{ + if ( is_tactical_grenade( weaponname ) ) + return; + + if ( !isdefined( level.zombie_tactical_grenade_list ) ) + level.zombie_tactical_grenade_list = []; + + level.zombie_tactical_grenade_list[weaponname] = weaponname; +} + +is_tactical_grenade( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( level.zombie_tactical_grenade_list ) ) + return 0; + + return isdefined( level.zombie_tactical_grenade_list[weaponname] ); +} + +is_player_tactical_grenade( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( self.current_tactical_grenade ) ) + return 0; + + return self.current_tactical_grenade == weaponname; +} + +get_player_tactical_grenade() +{ + tactical = ""; + + if ( isdefined( self.current_tactical_grenade ) ) + tactical = self.current_tactical_grenade; + + return tactical; +} + +set_player_tactical_grenade( weaponname ) +{ + self notify( "new_tactical_grenade", weaponname ); + self.current_tactical_grenade = weaponname; +} + +init_player_tactical_grenade() +{ + self set_player_tactical_grenade( level.zombie_tactical_grenade_player_init ); +} + +register_placeable_mine_for_level( weaponname ) +{ + if ( is_placeable_mine( weaponname ) ) + return; + + if ( !isdefined( level.zombie_placeable_mine_list ) ) + level.zombie_placeable_mine_list = []; + + level.zombie_placeable_mine_list[weaponname] = weaponname; +} + +is_placeable_mine( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( level.zombie_placeable_mine_list ) ) + return 0; + + return isdefined( level.zombie_placeable_mine_list[weaponname] ); +} + +is_player_placeable_mine( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( self.current_placeable_mine ) ) + return 0; + + return self.current_placeable_mine == weaponname; +} + +get_player_placeable_mine() +{ + return self.current_placeable_mine; +} + +set_player_placeable_mine( weaponname ) +{ + self.current_placeable_mine = weaponname; +} + +init_player_placeable_mine() +{ + self set_player_placeable_mine( level.zombie_placeable_mine_player_init ); +} + +register_melee_weapon_for_level( weaponname ) +{ + if ( is_melee_weapon( weaponname ) ) + return; + + if ( !isdefined( level.zombie_melee_weapon_list ) ) + level.zombie_melee_weapon_list = []; + + level.zombie_melee_weapon_list[weaponname] = weaponname; +} + +is_melee_weapon( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( level.zombie_melee_weapon_list ) ) + return 0; + + return isdefined( level.zombie_melee_weapon_list[weaponname] ); +} + +is_player_melee_weapon( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( self.current_melee_weapon ) ) + return 0; + + return self.current_melee_weapon == weaponname; +} + +get_player_melee_weapon() +{ + return self.current_melee_weapon; +} + +set_player_melee_weapon( weaponname ) +{ + self.current_melee_weapon = weaponname; +} + +init_player_melee_weapon() +{ + self set_player_melee_weapon( level.zombie_melee_weapon_player_init ); +} + +should_watch_for_emp() +{ + return isdefined( level.zombie_weapons["emp_grenade_zm"] ); +} + +register_equipment_for_level( weaponname ) +{ + if ( is_equipment( weaponname ) ) + return; + + if ( !isdefined( level.zombie_equipment_list ) ) + level.zombie_equipment_list = []; + + level.zombie_equipment_list[weaponname] = weaponname; +} + +is_equipment( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( level.zombie_equipment_list ) ) + return 0; + + return isdefined( level.zombie_equipment_list[weaponname] ); +} + +is_equipment_that_blocks_purchase( weaponname ) +{ + return is_equipment( weaponname ); +} + +is_player_equipment( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( self.current_equipment ) ) + return 0; + + return self.current_equipment == weaponname; +} + +has_deployed_equipment( weaponname ) +{ + if ( !isdefined( weaponname ) || !isdefined( self.deployed_equipment ) || self.deployed_equipment.size < 1 ) + return false; + + for ( i = 0; i < self.deployed_equipment.size; i++ ) + { + if ( self.deployed_equipment[i] == weaponname ) + return true; + } + + return false; +} + +has_player_equipment( weaponname ) +{ + return self is_player_equipment( weaponname ) || self has_deployed_equipment( weaponname ); +} + +get_player_equipment() +{ + return self.current_equipment; +} + +hacker_active() +{ + return self maps\mp\zombies\_zm_equipment::is_equipment_active( "equip_hacker_zm" ); +} + +set_player_equipment( weaponname ) +{ + if ( !isdefined( self.current_equipment_active ) ) + self.current_equipment_active = []; + + if ( isdefined( weaponname ) ) + self.current_equipment_active[weaponname] = 0; + + if ( !isdefined( self.equipment_got_in_round ) ) + self.equipment_got_in_round = []; + + if ( isdefined( weaponname ) ) + self.equipment_got_in_round[weaponname] = level.round_number; + + self.current_equipment = weaponname; +} + +init_player_equipment() +{ + self set_player_equipment( level.zombie_equipment_player_init ); +} + +register_offhand_weapons_for_level_defaults() +{ + if ( isdefined( level.register_offhand_weapons_for_level_defaults_override ) ) + { + [[ level.register_offhand_weapons_for_level_defaults_override ]](); + return; + } + + register_lethal_grenade_for_level( "frag_grenade_zm" ); + level.zombie_lethal_grenade_player_init = "frag_grenade_zm"; + register_tactical_grenade_for_level( "cymbal_monkey_zm" ); + level.zombie_tactical_grenade_player_init = undefined; + register_placeable_mine_for_level( "claymore_zm" ); + level.zombie_placeable_mine_player_init = undefined; + register_melee_weapon_for_level( "knife_zm" ); + register_melee_weapon_for_level( "bowie_knife_zm" ); + level.zombie_melee_weapon_player_init = "knife_zm"; + level.zombie_equipment_player_init = undefined; +} + +init_player_offhand_weapons() +{ + init_player_lethal_grenade(); + init_player_tactical_grenade(); + init_player_placeable_mine(); + init_player_melee_weapon(); + init_player_equipment(); +} + +is_offhand_weapon( weaponname ) +{ + return is_lethal_grenade( weaponname ) || is_tactical_grenade( weaponname ) || is_placeable_mine( weaponname ) || is_melee_weapon( weaponname ) || is_equipment( weaponname ); +} + +is_player_offhand_weapon( weaponname ) +{ + return self is_player_lethal_grenade( weaponname ) || self is_player_tactical_grenade( weaponname ) || self is_player_placeable_mine( weaponname ) || self is_player_melee_weapon( weaponname ) || self is_player_equipment( weaponname ); +} + +has_powerup_weapon() +{ + return isdefined( self.has_powerup_weapon ) && self.has_powerup_weapon; +} + +give_start_weapon( switch_to_weapon ) +{ + self giveweapon( level.start_weapon ); + self givestartammo( level.start_weapon ); + + if ( isdefined( switch_to_weapon ) && switch_to_weapon ) + self switchtoweapon( level.start_weapon ); +} + +array_flag_wait_any( flag_array ) +{ + if ( !isdefined( level._array_flag_wait_any_calls ) ) + level._n_array_flag_wait_any_calls = 0; + else + level._n_array_flag_wait_any_calls++; + + str_condition = "array_flag_wait_call_" + level._n_array_flag_wait_any_calls; + + for ( index = 0; index < flag_array.size; index++ ) + level thread array_flag_wait_any_thread( flag_array[index], str_condition ); + + level waittill( str_condition ); +} + +array_flag_wait_any_thread( flag_name, condition ) +{ + level endon( condition ); + flag_wait( flag_name ); + level notify( condition ); +} + +array_removedead( array ) +{ + newarray = []; + + if ( !isdefined( array ) ) + return undefined; + + for ( i = 0; i < array.size; i++ ) + { + if ( !isalive( array[i] ) || isdefined( array[i].isacorpse ) && array[i].isacorpse ) + continue; + + newarray[newarray.size] = array[i]; + } + + return newarray; +} + +groundpos( origin ) +{ + return bullettrace( origin, origin + vectorscale( ( 0, 0, -1 ), 100000.0 ), 0, self )["position"]; +} + +groundpos_ignore_water( origin ) +{ + return bullettrace( origin, origin + vectorscale( ( 0, 0, -1 ), 100000.0 ), 0, self, 1 )["position"]; +} + +groundpos_ignore_water_new( origin ) +{ + return groundtrace( origin, origin + vectorscale( ( 0, 0, -1 ), 100000.0 ), 0, self, 1 )["position"]; +} + +waittill_notify_or_timeout( msg, timer ) +{ + self endon( msg ); + wait( timer ); + return timer; +} + +self_delete() +{ + if ( isdefined( self ) ) + self delete(); +} + +script_delay() +{ + if ( isdefined( self.script_delay ) ) + { + wait( self.script_delay ); + return true; + } + else if ( isdefined( self.script_delay_min ) && isdefined( self.script_delay_max ) ) + { + wait( randomfloatrange( self.script_delay_min, self.script_delay_max ) ); + return true; + } + + return false; +} + +button_held_think( which_button ) +{ + self endon( "disconnect" ); + + if ( !isdefined( self._holding_button ) ) + self._holding_button = []; + + self._holding_button[which_button] = 0; + time_started = 0; + use_time = 250; + + while ( true ) + { + if ( self._holding_button[which_button] ) + { + if ( !self [[ level._button_funcs[which_button] ]]() ) + self._holding_button[which_button] = 0; + } + else if ( self [[ level._button_funcs[which_button] ]]() ) + { + if ( time_started == 0 ) + time_started = gettime(); + + if ( gettime() - time_started > use_time ) + self._holding_button[which_button] = 1; + } + else if ( time_started != 0 ) + time_started = 0; + + wait 0.05; + } +} + +use_button_held() +{ + init_button_wrappers(); + + if ( !isdefined( self._use_button_think_threaded ) ) + { + self thread button_held_think( level.button_use ); + self._use_button_think_threaded = 1; + } + + return self._holding_button[level.button_use]; +} + +ads_button_held() +{ + init_button_wrappers(); + + if ( !isdefined( self._ads_button_think_threaded ) ) + { + self thread button_held_think( level.button_ads ); + self._ads_button_think_threaded = 1; + } + + return self._holding_button[level.button_ads]; +} + +attack_button_held() +{ + init_button_wrappers(); + + if ( !isdefined( self._attack_button_think_threaded ) ) + { + self thread button_held_think( level.button_attack ); + self._attack_button_think_threaded = 1; + } + + return self._holding_button[level.button_attack]; +} + +use_button_pressed() +{ + return self usebuttonpressed(); +} + +ads_button_pressed() +{ + return self adsbuttonpressed(); +} + +attack_button_pressed() +{ + return self attackbuttonpressed(); +} + +init_button_wrappers() +{ + if ( !isdefined( level._button_funcs ) ) + { + level.button_use = 0; + level.button_ads = 1; + level.button_attack = 2; + level._button_funcs[level.button_use] = ::use_button_pressed; + level._button_funcs[level.button_ads] = ::ads_button_pressed; + level._button_funcs[level.button_attack] = ::attack_button_pressed; + } +} + +wait_network_frame() +{ + if ( numremoteclients() ) + { + snapshot_ids = getsnapshotindexarray(); + + for ( acked = undefined; !isdefined( acked ); acked = snapshotacknowledged( snapshot_ids ) ) + level waittill( "snapacknowledged" ); + } + else + wait 0.1; +} + +ignore_triggers( timer ) +{ + self endon( "death" ); + self.ignoretriggers = 1; + + if ( isdefined( timer ) ) + wait( timer ); + else + wait 0.5; + + self.ignoretriggers = 0; +} + +giveachievement_wrapper( achievement, all_players ) +{ + if ( achievement == "" ) + return; + + if ( isdefined( level.zm_disable_recording_stats ) && level.zm_disable_recording_stats ) + return; + + achievement_lower = tolower( achievement ); + global_counter = 0; + + if ( isdefined( all_players ) && all_players ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + players[i] giveachievement( achievement ); + has_achievement = players[i] maps\mp\zombies\_zm_stats::get_global_stat( achievement_lower ); + + if ( !( isdefined( has_achievement ) && has_achievement ) ) + global_counter++; + + players[i] maps\mp\zombies\_zm_stats::increment_client_stat( achievement_lower, 0 ); + + if ( issplitscreen() && i == 0 || !issplitscreen() ) + { + if ( isdefined( level.achievement_sound_func ) ) + players[i] thread [[ level.achievement_sound_func ]]( achievement_lower ); + } + } + } + else + { + if ( !isplayer( self ) ) + { +/# + println( "^1self needs to be a player for _utility::giveachievement_wrapper()" ); +#/ + return; + } + + self giveachievement( achievement ); + has_achievement = self maps\mp\zombies\_zm_stats::get_global_stat( achievement_lower ); + + if ( !( isdefined( has_achievement ) && has_achievement ) ) + global_counter++; + + self maps\mp\zombies\_zm_stats::increment_client_stat( achievement_lower, 0 ); + + if ( isdefined( level.achievement_sound_func ) ) + self thread [[ level.achievement_sound_func ]]( achievement_lower ); + } + + if ( global_counter ) + incrementcounter( "global_" + achievement_lower, global_counter ); +} + +spawn_failed( spawn ) +{ + if ( isdefined( spawn ) && isalive( spawn ) ) + { + if ( isalive( spawn ) ) + return false; + } + + return true; +} + +getyaw( org ) +{ + angles = vectortoangles( org - self.origin ); + return angles[1]; +} + +getyawtospot( spot ) +{ + pos = spot; + yaw = self.angles[1] - getyaw( pos ); + yaw = angleclamp180( yaw ); + return yaw; +} + +add_spawn_function( function, param1, param2, param3, param4 ) +{ + assert( !isdefined( level._loadstarted ) || !isalive( self ), "Tried to add_spawn_function to a living guy." ); + func = []; + func["function"] = function; + func["param1"] = param1; + func["param2"] = param2; + func["param3"] = param3; + func["param4"] = param4; + + if ( !isdefined( self.spawn_funcs ) ) + self.spawn_funcs = []; + + self.spawn_funcs[self.spawn_funcs.size] = func; +} + +disable_react() +{ + assert( isalive( self ), "Tried to disable react on a non ai" ); + self.a.disablereact = 1; + self.allowreact = 0; +} + +enable_react() +{ + assert( isalive( self ), "Tried to enable react on a non ai" ); + self.a.disablereact = 0; + self.allowreact = 1; +} + +flag_wait_or_timeout( flagname, timer ) +{ + start_time = gettime(); + + for (;;) + { + if ( level.flag[flagname] ) + break; + + if ( gettime() >= start_time + timer * 1000 ) + break; + + wait_for_flag_or_time_elapses( flagname, timer ); + } +} + +wait_for_flag_or_time_elapses( flagname, timer ) +{ + level endon( flagname ); + wait( timer ); +} + +isads( player ) +{ + return player playerads() > 0.5; +} + +bullet_attack( type ) +{ + if ( type == "MOD_PISTOL_BULLET" ) + return 1; + + return type == "MOD_RIFLE_BULLET"; +} + +pick_up() +{ + player = self.owner; + self destroy_ent(); + clip_ammo = player getweaponammoclip( self.name ); + clip_max_ammo = weaponclipsize( self.name ); + + if ( clip_ammo < clip_max_ammo ) + clip_ammo++; + + player setweaponammoclip( self.name, clip_ammo ); +} + +destroy_ent() +{ + self delete(); +} + +waittill_not_moving() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "detonated" ); + level endon( "game_ended" ); + + if ( self.classname == "grenade" ) + self waittill( "stationary" ); + else + { + for ( prevorigin = self.origin; 1; prevorigin = self.origin ) + { + wait 0.15; + + if ( self.origin == prevorigin ) + break; + } + } +} + +get_closest_player( org ) +{ + players = []; + players = get_players(); + return getclosest( org, players ); +} + +ent_flag_wait( msg ) +{ + self endon( "death" ); + + while ( !self.ent_flag[msg] ) + self waittill( msg ); +} + +ent_flag_wait_either( flag1, flag2 ) +{ + self endon( "death" ); + + for (;;) + { + if ( ent_flag( flag1 ) ) + return; + + if ( ent_flag( flag2 ) ) + return; + + self waittill_either( flag1, flag2 ); + } +} + +ent_wait_for_flag_or_time_elapses( flagname, timer ) +{ + self endon( flagname ); + wait( timer ); +} + +ent_flag_wait_or_timeout( flagname, timer ) +{ + self endon( "death" ); + start_time = gettime(); + + for (;;) + { + if ( self.ent_flag[flagname] ) + break; + + if ( gettime() >= start_time + timer * 1000 ) + break; + + self ent_wait_for_flag_or_time_elapses( flagname, timer ); + } +} + +ent_flag_waitopen( msg ) +{ + self endon( "death" ); + + while ( self.ent_flag[msg] ) + self waittill( msg ); +} + +ent_flag_init( message, val ) +{ + if ( !isdefined( self.ent_flag ) ) + { + self.ent_flag = []; + self.ent_flags_lock = []; + } + + if ( !isdefined( level.first_frame ) ) + assert( !isdefined( self.ent_flag[message] ), "Attempt to reinitialize existing flag '" + message + "' on entity." ); + + if ( isdefined( val ) && val ) + { + self.ent_flag[message] = 1; +/# + self.ent_flags_lock[message] = 1; +#/ + } + else + { + self.ent_flag[message] = 0; +/# + self.ent_flags_lock[message] = 0; +#/ + } +} + +ent_flag_exist( message ) +{ + if ( isdefined( self.ent_flag ) && isdefined( self.ent_flag[message] ) ) + return true; + + return false; +} + +ent_flag_set_delayed( message, delay ) +{ + wait( delay ); + self ent_flag_set( message ); +} + +ent_flag_set( message ) +{ +/# + assert( isdefined( self ), "Attempt to set a flag on entity that is not defined" ); + assert( isdefined( self.ent_flag[message] ), "Attempt to set a flag before calling flag_init: '" + message + "'." ); + assert( self.ent_flag[message] == self.ent_flags_lock[message] ); + self.ent_flags_lock[message] = 1; +#/ + self.ent_flag[message] = 1; + self notify( message ); +} + +ent_flag_toggle( message ) +{ + if ( self ent_flag( message ) ) + self ent_flag_clear( message ); + else + self ent_flag_set( message ); +} + +ent_flag_clear( message ) +{ +/# + assert( isdefined( self ), "Attempt to clear a flag on entity that is not defined" ); + assert( isdefined( self.ent_flag[message] ), "Attempt to set a flag before calling flag_init: '" + message + "'." ); + assert( self.ent_flag[message] == self.ent_flags_lock[message] ); + self.ent_flags_lock[message] = 0; +#/ + if ( self.ent_flag[message] ) + { + self.ent_flag[message] = 0; + self notify( message ); + } +} + +ent_flag_clear_delayed( message, delay ) +{ + wait( delay ); + self ent_flag_clear( message ); +} + +ent_flag( message ) +{ + assert( isdefined( message ), "Tried to check flag but the flag was not defined." ); + assert( isdefined( self.ent_flag[message] ), "Tried to check entity flag '" + message + "', but the flag was not initialized." ); + + if ( !self.ent_flag[message] ) + return false; + + return true; +} + +ent_flag_init_ai_standards() +{ + message_array = []; + message_array[message_array.size] = "goal"; + message_array[message_array.size] = "damage"; + + for ( i = 0; i < message_array.size; i++ ) + { + self ent_flag_init( message_array[i] ); + self thread ent_flag_wait_ai_standards( message_array[i] ); + } +} + +ent_flag_wait_ai_standards( message ) +{ + self endon( "death" ); + + self waittill( message ); + + self.ent_flag[message] = 1; +} + +flat_angle( angle ) +{ + rangle = ( 0, angle[1], 0 ); + return rangle; +} + +waittill_any_or_timeout( timer, string1, string2, string3, string4, string5 ) +{ + assert( isdefined( string1 ) ); + self endon( string1 ); + + if ( isdefined( string2 ) ) + self endon( string2 ); + + if ( isdefined( string3 ) ) + self endon( string3 ); + + if ( isdefined( string4 ) ) + self endon( string4 ); + + if ( isdefined( string5 ) ) + self endon( string5 ); + + wait( timer ); +} + +clear_run_anim() +{ + self.alwaysrunforward = undefined; + self.a.combatrunanim = undefined; + self.run_noncombatanim = undefined; + self.walk_combatanim = undefined; + self.walk_noncombatanim = undefined; + self.precombatrunenabled = 1; +} + +track_players_intersection_tracker() +{ + self endon( "disconnect" ); + self endon( "death" ); + level endon( "end_game" ); + wait 5; + + while ( true ) + { + killed_players = 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() || "playing" != players[i].sessionstate ) + continue; + + for ( j = 0; j < players.size; j++ ) + { + if ( i == j || players[j] maps\mp\zombies\_zm_laststand::player_is_in_laststand() || "playing" != players[j].sessionstate ) + continue; + + if ( isdefined( level.player_intersection_tracker_override ) ) + { + if ( players[i] [[ level.player_intersection_tracker_override ]]( players[j] ) ) + continue; + } + + playeri_origin = players[i].origin; + playerj_origin = players[j].origin; + + if ( abs( playeri_origin[2] - playerj_origin[2] ) > 60 ) + continue; + + distance_apart = distance2d( playeri_origin, playerj_origin ); + + if ( abs( distance_apart ) > 18 ) + continue; +/# + iprintlnbold( "PLAYERS ARE TOO FRIENDLY!!!!!" ); +#/ + players[i] dodamage( 1000, ( 0, 0, 0 ) ); + players[j] dodamage( 1000, ( 0, 0, 0 ) ); + + if ( !killed_players ) + players[i] playlocalsound( level.zmb_laugh_alias ); + + players[i] maps\mp\zombies\_zm_stats::increment_map_cheat_stat( "cheat_too_friendly" ); + players[i] maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_too_friendly", 0 ); + players[i] maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); + players[j] maps\mp\zombies\_zm_stats::increment_map_cheat_stat( "cheat_too_friendly" ); + players[j] maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_too_friendly", 0 ); + players[j] maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); + killed_players = 1; + } + } + + wait 0.5; + } +} + +get_eye() +{ + if ( isplayer( self ) ) + { + linked_ent = self getlinkedent(); + + if ( isdefined( linked_ent ) && getdvarint( _hash_5AEFD7E9 ) > 0 ) + { + camera = linked_ent gettagorigin( "tag_camera" ); + + if ( isdefined( camera ) ) + return camera; + } + } + + pos = self geteye(); + return pos; +} + +is_player_looking_at( origin, dot, do_trace, ignore_ent ) +{ + assert( isplayer( self ), "player_looking_at must be called on a player." ); + + if ( !isdefined( dot ) ) + dot = 0.7; + + if ( !isdefined( do_trace ) ) + do_trace = 1; + + eye = self get_eye(); + delta_vec = anglestoforward( vectortoangles( origin - eye ) ); + view_vec = anglestoforward( self getplayerangles() ); + new_dot = vectordot( delta_vec, view_vec ); + + if ( new_dot >= dot ) + { + if ( do_trace ) + return bullettracepassed( origin, eye, 0, ignore_ent ); + else + return 1; + } + + return 0; +} + +add_gametype( gt, dummy1, name, dummy2 ) +{ + +} + +add_gameloc( gl, dummy1, name, dummy2 ) +{ + +} + +get_closest_index( org, array, dist = 9999999 ) +{ + distsq = dist * dist; + + if ( array.size < 1 ) + return; + + index = undefined; + + for ( i = 0; i < array.size; i++ ) + { + newdistsq = distancesquared( array[i].origin, org ); + + if ( newdistsq >= distsq ) + continue; + + distsq = newdistsq; + index = i; + } + + return index; +} + +is_valid_zombie_spawn_point( point ) +{ + liftedorigin = point.origin + vectorscale( ( 0, 0, 1 ), 5.0 ); + size = 48; + height = 64; + mins = ( -1 * size, -1 * size, 0 ); + maxs = ( size, size, height ); + absmins = liftedorigin + mins; + absmaxs = liftedorigin + maxs; + + if ( boundswouldtelefrag( absmins, absmaxs ) ) + return false; + + return true; +} + +get_closest_index_to_entity( entity, array, dist, extra_check ) +{ + org = entity.origin; + + if ( !isdefined( dist ) ) + dist = 9999999; + + distsq = dist * dist; + + if ( array.size < 1 ) + return; + + index = undefined; + + for ( i = 0; i < array.size; i++ ) + { + if ( isdefined( extra_check ) && ![[ extra_check ]]( entity, array[i] ) ) + continue; + + newdistsq = distancesquared( array[i].origin, org ); + + if ( newdistsq >= distsq ) + continue; + + distsq = newdistsq; + index = i; + } + + return index; +} + +set_gamemode_var( var, val ) +{ + if ( !isdefined( game["gamemode_match"] ) ) + game["gamemode_match"] = []; + + game["gamemode_match"][var] = val; +} + +set_gamemode_var_once( var, val ) +{ + if ( !isdefined( game["gamemode_match"] ) ) + game["gamemode_match"] = []; + + if ( !isdefined( game["gamemode_match"][var] ) ) + game["gamemode_match"][var] = val; +} + +set_game_var( var, val ) +{ + game[var] = val; +} + +set_game_var_once( var, val ) +{ + if ( !isdefined( game[var] ) ) + game[var] = val; +} + +get_game_var( var ) +{ + if ( isdefined( game[var] ) ) + return game[var]; + + return undefined; +} + +get_gamemode_var( var ) +{ + if ( isdefined( game["gamemode_match"] ) && isdefined( game["gamemode_match"][var] ) ) + return game["gamemode_match"][var]; + + return undefined; +} + +waittill_subset( min_num, string1, string2, string3, string4, string5 ) +{ + self endon( "death" ); + ent = spawnstruct(); + ent.threads = 0; + returned_threads = 0; + + if ( isdefined( string1 ) ) + { + self thread waittill_string( string1, ent ); + ent.threads++; + } + + if ( isdefined( string2 ) ) + { + self thread waittill_string( string2, ent ); + ent.threads++; + } + + if ( isdefined( string3 ) ) + { + self thread waittill_string( string3, ent ); + ent.threads++; + } + + if ( isdefined( string4 ) ) + { + self thread waittill_string( string4, ent ); + ent.threads++; + } + + if ( isdefined( string5 ) ) + { + self thread waittill_string( string5, ent ); + ent.threads++; + } + + while ( ent.threads ) + { + ent waittill( "returned" ); + + ent.threads--; + returned_threads++; + + if ( returned_threads >= min_num ) + break; + } + + ent notify( "die" ); +} + +is_headshot( sweapon, shitloc, smeansofdeath ) +{ + if ( shitloc != "head" && shitloc != "helmet" ) + return 0; + + if ( smeansofdeath == "MOD_IMPACT" && issubstr( sweapon, "knife_ballistic" ) ) + return 1; + + return smeansofdeath != "MOD_MELEE" && smeansofdeath != "MOD_BAYONET" && smeansofdeath != "MOD_IMPACT" && smeansofdeath != "MOD_UNKNOWN"; +} + +is_jumping() +{ + ground_ent = self getgroundent(); + return !isdefined( ground_ent ); +} + +is_explosive_damage( mod ) +{ + if ( !isdefined( mod ) ) + return false; + + if ( mod == "MOD_GRENADE" || mod == "MOD_GRENADE_SPLASH" || mod == "MOD_PROJECTILE" || mod == "MOD_PROJECTILE_SPLASH" || mod == "MOD_EXPLOSIVE" ) + return true; + + return false; +} + +sndswitchannouncervox( who ) +{ + switch ( who ) + { + case "sam": + game["zmbdialog"]["prefix"] = "vox_zmba_sam"; + level.zmb_laugh_alias = "zmb_laugh_sam"; + level.sndannouncerisrich = 0; + break; + case "richtofen": + game["zmbdialog"]["prefix"] = "vox_zmba"; + level.zmb_laugh_alias = "zmb_laugh_richtofen"; + level.sndannouncerisrich = 1; + break; + } +} + +do_player_general_vox( category, type, timer, chance ) +{ + if ( isdefined( timer ) && isdefined( level.votimer[type] ) && level.votimer[type] > 0 ) + return; + + if ( !isdefined( chance ) ) + chance = maps\mp\zombies\_zm_audio::get_response_chance( type ); + + if ( chance > randomint( 100 ) ) + { + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( category, type ); + + if ( isdefined( timer ) ) + { + level.votimer[type] = timer; + level thread general_vox_timer( level.votimer[type], type ); + } + } +} + +general_vox_timer( timer, type ) +{ + level endon( "end_game" ); +/# + println( "ZM >> VOX TIMER STARTED FOR " + type + " ( " + timer + ")" ); +#/ + while ( timer > 0 ) + { + wait 1; + timer--; + } + + level.votimer[type] = timer; +/# + println( "ZM >> VOX TIMER ENDED FOR " + type + " ( " + timer + ")" ); +#/ +} + +create_vox_timer( type ) +{ + level.votimer[type] = 0; +} + +play_vox_to_player( category, type, force_variant ) +{ + self thread maps\mp\zombies\_zm_audio::playvoxtoplayer( category, type, force_variant ); +} + +is_favorite_weapon( weapon_to_check ) +{ + if ( !isdefined( self.favorite_wall_weapons_list ) ) + return false; + + foreach ( weapon in self.favorite_wall_weapons_list ) + { + if ( weapon_to_check == weapon ) + return true; + } + + return false; +} + +add_vox_response_chance( event, chance ) +{ + level.response_chances[event] = chance; +} + +set_demo_intermission_point() +{ + spawnpoints = getentarray( "mp_global_intermission", "classname" ); + + if ( !spawnpoints.size ) + return; + + spawnpoint = spawnpoints[0]; + match_string = ""; + location = level.scr_zm_map_start_location; + + if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) ) + location = level.default_start_location; + + match_string = level.scr_zm_ui_gametype + "_" + location; + + for ( i = 0; i < spawnpoints.size; i++ ) + { + if ( isdefined( spawnpoints[i].script_string ) ) + { + tokens = strtok( spawnpoints[i].script_string, " " ); + + foreach ( token in tokens ) + { + if ( token == match_string ) + { + spawnpoint = spawnpoints[i]; + i = spawnpoints.size; + break; + } + } + } + } + + setdemointermissionpoint( spawnpoint.origin, spawnpoint.angles ); +} + +register_map_navcard( navcard_on_map, navcard_needed_for_computer ) +{ + level.navcard_needed = navcard_needed_for_computer; + level.map_navcard = navcard_on_map; +} + +does_player_have_map_navcard( player ) +{ + return player maps\mp\zombies\_zm_stats::get_global_stat( level.map_navcard ); +} + +does_player_have_correct_navcard( player ) +{ + if ( !isdefined( level.navcard_needed ) ) + return 0; + + return player maps\mp\zombies\_zm_stats::get_global_stat( level.navcard_needed ); +} + +place_navcard( str_model, str_stat, org, angles ) +{ + navcard = spawn( "script_model", org ); + navcard setmodel( str_model ); + navcard.angles = angles; + wait 1; + navcard_pickup_trig = spawn( "trigger_radius_use", org, 0, 84, 72 ); + navcard_pickup_trig setcursorhint( "HINT_NOICON" ); + navcard_pickup_trig sethintstring( &"ZOMBIE_NAVCARD_PICKUP" ); + navcard_pickup_trig triggerignoreteam(); + a_navcard_stats = array( "navcard_held_zm_transit", "navcard_held_zm_highrise", "navcard_held_zm_buried" ); + is_holding_card = 0; + str_placing_stat = undefined; + + while ( true ) + { + navcard_pickup_trig waittill( "trigger", who ); + + if ( is_player_valid( who ) ) + { + foreach ( str_cur_stat in a_navcard_stats ) + { + if ( who maps\mp\zombies\_zm_stats::get_global_stat( str_cur_stat ) ) + { + str_placing_stat = str_cur_stat; + is_holding_card = 1; + who maps\mp\zombies\_zm_stats::set_global_stat( str_cur_stat, 0 ); + } + } + + who playsound( "zmb_buildable_piece_add" ); + who maps\mp\zombies\_zm_stats::set_global_stat( str_stat, 1 ); + who.navcard_grabbed = str_stat; + wait_network_frame(); + is_stat = who maps\mp\zombies\_zm_stats::get_global_stat( str_stat ); + thread sq_refresh_player_navcard_hud(); + break; + } + } + + navcard delete(); + navcard_pickup_trig delete(); + + if ( is_holding_card ) + level thread place_navcard( str_model, str_placing_stat, org, angles ); +} + +sq_refresh_player_navcard_hud() +{ + if ( !isdefined( level.navcards ) ) + return; + + players = get_players(); + + foreach ( player in players ) + player thread sq_refresh_player_navcard_hud_internal(); +} + +sq_refresh_player_navcard_hud_internal() +{ + self endon( "disconnect" ); + navcard_bits = 0; + + for ( i = 0; i < level.navcards.size; i++ ) + { + hasit = self maps\mp\zombies\_zm_stats::get_global_stat( level.navcards[i] ); + + if ( isdefined( self.navcard_grabbed ) && self.navcard_grabbed == level.navcards[i] ) + hasit = 1; + + if ( hasit ) + navcard_bits += ( 1 << i ); + } + + wait_network_frame(); + self setclientfield( "navcard_held", 0 ); + + if ( navcard_bits > 0 ) + { + wait_network_frame(); + self setclientfield( "navcard_held", navcard_bits ); + } +} + +set_player_is_female( onoff ) +{ + if ( isdefined( level.use_female_animations ) && level.use_female_animations ) + { + female_perk = "specialty_gpsjammer"; + + if ( onoff ) + self setperk( female_perk ); + else + self unsetperk( female_perk ); + } +} + +disable_player_move_states( forcestancechange ) +{ + self allowcrouch( 1 ); + self allowlean( 0 ); + self allowads( 0 ); + self allowsprint( 0 ); + self allowprone( 0 ); + self allowmelee( 0 ); + + if ( isdefined( forcestancechange ) && forcestancechange == 1 ) + { + if ( self getstance() == "prone" ) + self setstance( "crouch" ); + } +} + +enable_player_move_states() +{ + if ( !isdefined( self._allow_lean ) || self._allow_lean == 1 ) + self allowlean( 1 ); + + if ( !isdefined( self._allow_ads ) || self._allow_ads == 1 ) + self allowads( 1 ); + + if ( !isdefined( self._allow_sprint ) || self._allow_sprint == 1 ) + self allowsprint( 1 ); + + if ( !isdefined( self._allow_prone ) || self._allow_prone == 1 ) + self allowprone( 1 ); + + if ( !isdefined( self._allow_melee ) || self._allow_melee == 1 ) + self allowmelee( 1 ); +} + +check_and_create_node_lists() +{ + if ( !isdefined( level._link_node_list ) ) + level._link_node_list = []; + + if ( !isdefined( level._unlink_node_list ) ) + level._unlink_node_list = []; +} + +link_nodes( a, b, bdontunlinkonmigrate = 0 ) +{ + if ( nodesarelinked( a, b ) ) + return; + + check_and_create_node_lists(); + a_index_string = "" + a.origin; + b_index_string = "" + b.origin; + + if ( !isdefined( level._link_node_list[a_index_string] ) ) + { + level._link_node_list[a_index_string] = spawnstruct(); + level._link_node_list[a_index_string].node = a; + level._link_node_list[a_index_string].links = []; + level._link_node_list[a_index_string].ignore_on_migrate = []; + } + + if ( !isdefined( level._link_node_list[a_index_string].links[b_index_string] ) ) + { + level._link_node_list[a_index_string].links[b_index_string] = b; + level._link_node_list[a_index_string].ignore_on_migrate[b_index_string] = bdontunlinkonmigrate; + } + + if ( isdefined( level._unlink_node_list[a_index_string] ) ) + { + if ( isdefined( level._unlink_node_list[a_index_string].links[b_index_string] ) ) + { + level._unlink_node_list[a_index_string].links[b_index_string] = undefined; + level._unlink_node_list[a_index_string].ignore_on_migrate[b_index_string] = undefined; + } + } + + linknodes( a, b ); +} + +unlink_nodes( a, b, bdontlinkonmigrate = 0 ) +{ + if ( !nodesarelinked( a, b ) ) + return; + + check_and_create_node_lists(); + a_index_string = "" + a.origin; + b_index_string = "" + b.origin; + + if ( !isdefined( level._unlink_node_list[a_index_string] ) ) + { + level._unlink_node_list[a_index_string] = spawnstruct(); + level._unlink_node_list[a_index_string].node = a; + level._unlink_node_list[a_index_string].links = []; + level._unlink_node_list[a_index_string].ignore_on_migrate = []; + } + + if ( !isdefined( level._unlink_node_list[a_index_string].links[b_index_string] ) ) + { + level._unlink_node_list[a_index_string].links[b_index_string] = b; + level._unlink_node_list[a_index_string].ignore_on_migrate[b_index_string] = bdontlinkonmigrate; + } + + if ( isdefined( level._link_node_list[a_index_string] ) ) + { + if ( isdefined( level._link_node_list[a_index_string].links[b_index_string] ) ) + { + level._link_node_list[a_index_string].links[b_index_string] = undefined; + level._link_node_list[a_index_string].ignore_on_migrate[b_index_string] = undefined; + } + } + + unlinknodes( a, b ); +} + +spawn_path_node( origin, angles, k1, v1, k2, v2 ) +{ + if ( !isdefined( level._spawned_path_nodes ) ) + level._spawned_path_nodes = []; + + node = spawnstruct(); + node.origin = origin; + node.angles = angles; + node.k1 = k1; + node.v1 = v1; + node.k2 = k2; + node.v2 = v2; + node.node = spawn_path_node_internal( origin, angles, k1, v1, k2, v2 ); + level._spawned_path_nodes[level._spawned_path_nodes.size] = node; + return node.node; +} + +spawn_path_node_internal( origin, angles, k1, v1, k2, v2 ) +{ + if ( isdefined( k2 ) ) + return spawnpathnode( "node_pathnode", origin, angles, k1, v1, k2, v2 ); + else if ( isdefined( k1 ) ) + return spawnpathnode( "node_pathnode", origin, angles, k1, v1 ); + else + return spawnpathnode( "node_pathnode", origin, angles ); + + return undefined; +} + +delete_spawned_path_nodes() +{ + +} + +respawn_path_nodes() +{ + if ( !isdefined( level._spawned_path_nodes ) ) + return; + + for ( i = 0; i < level._spawned_path_nodes.size; i++ ) + { + node_struct = level._spawned_path_nodes[i]; +/# + println( "Re-spawning spawned path node @ " + node_struct.origin ); +#/ + node_struct.node = spawn_path_node_internal( node_struct.origin, node_struct.angles, node_struct.k1, node_struct.v1, node_struct.k2, node_struct.v2 ); + } +} + +link_changes_internal_internal( list, func ) +{ + keys = getarraykeys( list ); + + for ( i = 0; i < keys.size; i++ ) + { + node = list[keys[i]].node; + node_keys = getarraykeys( list[keys[i]].links ); + + for ( j = 0; j < node_keys.size; j++ ) + { + if ( isdefined( list[keys[i]].links[node_keys[j]] ) ) + { + if ( isdefined( list[keys[i]].ignore_on_migrate[node_keys[j]] ) && list[keys[i]].ignore_on_migrate[node_keys[j]] ) + { +/# + println( "Node at " + keys[i] + " to node at " + node_keys[j] + " - IGNORED" ); +#/ + continue; + } +/# + println( "Node at " + keys[i] + " to node at " + node_keys[j] ); +#/ + [[ func ]]( node, list[keys[i]].links[node_keys[j]] ); + } + } + } +} + +link_changes_internal( func_for_link_list, func_for_unlink_list ) +{ + if ( isdefined( level._link_node_list ) ) + { +/# + println( "Link List" ); +#/ + link_changes_internal_internal( level._link_node_list, func_for_link_list ); + } + + if ( isdefined( level._unlink_node_list ) ) + { +/# + println( "UnLink List" ); +#/ + link_changes_internal_internal( level._unlink_node_list, func_for_unlink_list ); + } +} + +link_nodes_wrapper( a, b ) +{ + if ( !nodesarelinked( a, b ) ) + linknodes( a, b ); +} + +unlink_nodes_wrapper( a, b ) +{ + if ( nodesarelinked( a, b ) ) + unlinknodes( a, b ); +} + +undo_link_changes() +{ +/# + println( "***" ); + println( "***" ); + println( "*** Undoing link changes" ); +#/ + link_changes_internal( ::unlink_nodes_wrapper, ::link_nodes_wrapper ); + delete_spawned_path_nodes(); +} + +redo_link_changes() +{ +/# + println( "***" ); + println( "***" ); + println( "*** Redoing link changes" ); +#/ + respawn_path_nodes(); + link_changes_internal( ::link_nodes_wrapper, ::unlink_nodes_wrapper ); +} + +set_player_tombstone_index() +{ + if ( !isdefined( level.tombstone_index ) ) + level.tombstone_index = 0; + + if ( !isdefined( self.tombstone_index ) ) + { + self.tombstone_index = level.tombstone_index; + level.tombstone_index++; + } +} + +hotjoin_setup_player( viewmodel ) +{ + if ( is_true( level.passed_introscreen ) && !isdefined( self.first_spawn ) && !isdefined( self.characterindex ) ) + { + self.first_spawn = 1; + self setviewmodel( viewmodel ); + return true; + } + + return false; +} + +is_temporary_zombie_weapon( str_weapon ) +{ + return is_zombie_perk_bottle( str_weapon ) || str_weapon == level.revive_tool || str_weapon == "zombie_builder_zm" || str_weapon == "chalk_draw_zm" || str_weapon == "no_hands_zm" || str_weapon == level.machine_assets["packapunch"].weapon; +} + +is_gametype_active( a_gametypes ) +{ + b_is_gametype_active = 0; + + if ( !isarray( a_gametypes ) ) + a_gametypes = array( a_gametypes ); + + for ( i = 0; i < a_gametypes.size; i++ ) + { + if ( getdvar( "g_gametype" ) == a_gametypes[i] ) + b_is_gametype_active = 1; + } + + return b_is_gametype_active; +} + +is_createfx_active() +{ + if ( !isdefined( level.createfx_enabled ) ) + level.createfx_enabled = getdvar( "createfx" ) != ""; + + return level.createfx_enabled; +} + +is_zombie_perk_bottle( str_weapon ) +{ + switch ( str_weapon ) + { + case "zombie_perk_bottle_whoswho": + case "zombie_perk_bottle_vulture": + case "zombie_perk_bottle_tombstone": + case "zombie_perk_bottle_sleight": + case "zombie_perk_bottle_sixth_sense": + case "zombie_perk_bottle_revive": + case "zombie_perk_bottle_oneinch": + case "zombie_perk_bottle_nuke": + case "zombie_perk_bottle_marathon": + case "zombie_perk_bottle_jugg": + case "zombie_perk_bottle_doubletap": + case "zombie_perk_bottle_deadshot": + case "zombie_perk_bottle_cherry": + case "zombie_perk_bottle_additionalprimaryweapon": + b_is_perk_bottle = 1; + break; + default: + b_is_perk_bottle = 0; + break; + } + + return b_is_perk_bottle; +} + +register_custom_spawner_entry( spot_noteworthy, func ) +{ + if ( !isdefined( level.custom_spawner_entry ) ) + level.custom_spawner_entry = []; + + level.custom_spawner_entry[spot_noteworthy] = func; +} + +get_player_weapon_limit( player ) +{ + if ( isdefined( level.get_player_weapon_limit ) ) + return [[ level.get_player_weapon_limit ]]( player ); + + weapon_limit = 2; + + if ( player hasperk( "specialty_additionalprimaryweapon" ) ) + weapon_limit = level.additionalprimaryweapon_limit; + + return weapon_limit; +} + +get_player_perk_purchase_limit() +{ + if ( isdefined( level.get_player_perk_purchase_limit ) ) + return self [[ level.get_player_perk_purchase_limit ]](); + + return level.perk_purchase_limit; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_ballistic_knife.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_ballistic_knife.gsc new file mode 100644 index 0000000..d83c091 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_ballistic_knife.gsc @@ -0,0 +1,302 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_stats; + +init() +{ + if ( !isdefined( level.ballistic_knife_autorecover ) ) + level.ballistic_knife_autorecover = 1; + + if ( isdefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 ) + { + precachemodel( "t5_weapon_ballistic_knife_projectile" ); + precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" ); + } +} + +on_spawn( watcher, player ) +{ + player endon( "death" ); + player endon( "disconnect" ); + player endon( "zmb_lost_knife" ); + level endon( "game_ended" ); + + self waittill( "stationary", endpos, normal, angles, attacker, prey, bone ); + + isfriendly = 0; + + if ( isdefined( endpos ) ) + { + retrievable_model = spawn( "script_model", endpos ); + retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); + retrievable_model setowner( player ); + retrievable_model.owner = player; + retrievable_model.angles = angles; + retrievable_model.name = watcher.weapon; + + if ( isdefined( prey ) ) + { + if ( isplayer( prey ) && player.team == prey.team ) + isfriendly = 1; + else if ( isai( prey ) && player.team == prey.team ) + isfriendly = 1; + + if ( !isfriendly ) + { + retrievable_model linkto( prey, bone ); + retrievable_model thread force_drop_knives_to_ground_on_death( player, prey ); + } + else if ( isfriendly ) + { + retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) ); + normal = ( 0, 0, 1 ); + } + } + + watcher.objectarray[watcher.objectarray.size] = retrievable_model; + + if ( isfriendly ) + retrievable_model waittill( "stationary" ); + + retrievable_model thread drop_knives_to_ground( player ); + + if ( isfriendly ) + player notify( "ballistic_knife_stationary", retrievable_model, normal ); + else + player notify( "ballistic_knife_stationary", retrievable_model, normal, prey ); + + retrievable_model thread wait_to_show_glowing_model( prey ); + } +} + +wait_to_show_glowing_model( prey ) +{ + level endon( "game_ended" ); + self endon( "death" ); + wait 2; + self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); +} + +on_spawn_retrieve_trigger( watcher, player ) +{ + player endon( "death" ); + player endon( "disconnect" ); + player endon( "zmb_lost_knife" ); + level endon( "game_ended" ); + + player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey ); + + if ( !isdefined( retrievable_model ) ) + return; + + trigger_pos = []; + + if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) ) + { + trigger_pos[0] = prey.origin[0]; + trigger_pos[1] = prey.origin[1]; + trigger_pos[2] = prey.origin[2] + 10; + } + else + { + trigger_pos[0] = retrievable_model.origin[0] + 10 * normal[0]; + trigger_pos[1] = retrievable_model.origin[1] + 10 * normal[1]; + trigger_pos[2] = retrievable_model.origin[2] + 10 * normal[2]; + } + + if ( is_true( level.ballistic_knife_autorecover ) ) + { + trigger_pos[2] -= 50.0; + pickup_trigger = spawn( "trigger_radius", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ), 0, 50, 100 ); + } + else + { + pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ) ); + pickup_trigger setcursorhint( "HINT_NOICON" ); + } + + pickup_trigger.owner = player; + retrievable_model.retrievabletrigger = pickup_trigger; + hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP"; + + if ( isdefined( hint_string ) ) + pickup_trigger sethintstring( hint_string ); + else + pickup_trigger sethintstring( &"GENERIC_PICKUP" ); + + pickup_trigger setteamfortrigger( player.team ); + player clientclaimtrigger( pickup_trigger ); + pickup_trigger enablelinkto(); + + if ( isdefined( prey ) ) + pickup_trigger linkto( prey ); + else + pickup_trigger linkto( retrievable_model ); + + if ( isdefined( level.knife_planted ) ) + [[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey ); + + retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound ); + player thread watch_shutdown( pickup_trigger, retrievable_model ); +} + +debug_print( endpos ) +{ +/# + self endon( "death" ); + + while ( true ) + { + print3d( endpos, "pickup_trigger" ); + wait 0.05; + } +#/ +} + +watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse ) +{ + self endon( "death" ); + self endon( "delete" ); + level endon( "game_ended" ); + max_ammo = weaponmaxammo( weapon ) + 1; + autorecover = is_true( level.ballistic_knife_autorecover ); + + while ( true ) + { + trigger waittill( "trigger", player ); + + if ( !isalive( player ) ) + continue; + + if ( !player isonground() && !is_true( trigger.force_pickup ) ) + continue; + + if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam ) + continue; + + if ( isdefined( trigger.claimedby ) && player != trigger.claimedby ) + continue; + + ammo_stock = player getweaponammostock( weapon ); + ammo_clip = player getweaponammoclip( weapon ); + current_weapon = player getcurrentweapon(); + total_ammo = ammo_stock + ammo_clip; + hasreloaded = 1; + + if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon ) + hasreloaded = 0; + + if ( total_ammo >= max_ammo || !hasreloaded ) + continue; + + if ( autorecover || player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() || is_true( trigger.force_pickup ) ) + { + if ( isdefined( playersoundonuse ) ) + player playlocalsound( playersoundonuse ); + + if ( isdefined( npcsoundonuse ) ) + player playsound( npcsoundonuse ); + + player thread [[ callback ]]( weapon, model, trigger ); + break; + } + } +} + +pick_up( weapon, model, trigger ) +{ + if ( self hasweapon( weapon ) ) + { + current_weapon = self getcurrentweapon(); + + if ( current_weapon != weapon ) + { + clip_ammo = self getweaponammoclip( weapon ); + + if ( !clip_ammo ) + self setweaponammoclip( weapon, 1 ); + else + { + new_ammo_stock = self getweaponammostock( weapon ) + 1; + self setweaponammostock( weapon, new_ammo_stock ); + } + } + else + { + new_ammo_stock = self getweaponammostock( weapon ) + 1; + self setweaponammostock( weapon, new_ammo_stock ); + } + } + + self maps\mp\zombies\_zm_stats::increment_client_stat( "ballistic_knives_pickedup" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "ballistic_knives_pickedup" ); + model destroy_ent(); + trigger destroy_ent(); +} + +destroy_ent() +{ + if ( isdefined( self ) ) + { + if ( isdefined( self.glowing_model ) ) + self.glowing_model delete(); + + self delete(); + } +} + +watch_shutdown( trigger, model ) +{ + self waittill_any( "death_or_disconnect", "zmb_lost_knife" ); + trigger destroy_ent(); + model destroy_ent(); +} + +drop_knives_to_ground( player ) +{ + player endon( "death" ); + player endon( "zmb_lost_knife" ); + + for (;;) + { + level waittill( "drop_objects_to_ground", origin, radius ); + + if ( distancesquared( origin, self.origin ) < radius * radius ) + { + self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) ); + self thread update_retrieve_trigger( player ); + } + } +} + +force_drop_knives_to_ground_on_death( player, prey ) +{ + self endon( "death" ); + player endon( "zmb_lost_knife" ); + + prey waittill( "death" ); + + self unlink(); + self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) ); + self thread update_retrieve_trigger( player ); +} + +update_retrieve_trigger( player ) +{ + self endon( "death" ); + player endon( "zmb_lost_knife" ); + + if ( isdefined( level.custom_update_retrieve_trigger ) ) + { + self [[ level.custom_update_retrieve_trigger ]]( player ); + return; + } + + self waittill( "stationary" ); + + trigger = self.retrievabletrigger; + trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 ); + trigger linkto( self ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_bowie.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_bowie.gsc new file mode 100644 index 0000000..5896087 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_bowie.gsc @@ -0,0 +1,19 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_melee_weapon; +#include maps\mp\zombies\_zm_weapons; + +init() +{ + if ( isdefined( level.bowie_cost ) ) + cost = level.bowie_cost; + else + cost = 3000; + + maps\mp\zombies\_zm_melee_weapon::init( "bowie_knife_zm", "zombie_bowie_flourish", "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", cost, "bowie_upgrade", &"ZOMBIE_WEAPON_BOWIE_BUY", "bowie", undefined ); + maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie" ); + maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie_upgraded" ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_claymore.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_claymore.gsc new file mode 100644 index 0000000..4c5d3f8 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_claymore.gsc @@ -0,0 +1,466 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\gametypes_zm\_weaponobjects; + +init() +{ + if ( !isdefined( level.claymores_max_per_player ) ) + level.claymores_max_per_player = 12; + + trigs = getentarray( "claymore_purchase", "targetname" ); + + for ( i = 0; i < trigs.size; i++ ) + { + model = getent( trigs[i].target, "targetname" ); + + if ( isdefined( model ) ) + model hide(); + } + + array_thread( trigs, ::buy_claymores ); + level thread give_claymores_after_rounds(); + level.claymores_on_damage = ::satchel_damage; + level.pickup_claymores = ::pickup_claymores; + level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener; + level.claymore_detectiondot = cos( 70 ); + level.claymore_detectionmindist = 20; + level._effect["claymore_laser"] = loadfx( "weapon/claymore/fx_claymore_laser" ); +} + +buy_claymores() +{ + self.zombie_cost = 1000; + self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); + self setcursorhint( "HINT_WEAPON", "claymore_zm" ); + self endon( "kill_trigger" ); + + if ( !isdefined( self.stub ) ) + return; + + if ( isdefined( self.stub ) && !isdefined( self.stub.claymores_triggered ) ) + self.stub.claymores_triggered = 0; + + self.claymores_triggered = self.stub.claymores_triggered; + + while ( true ) + { + self waittill( "trigger", who ); + + if ( who in_revive_trigger() ) + continue; + + if ( who has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( is_player_valid( who ) ) + { + if ( who.score >= self.zombie_cost ) + { + if ( !who is_player_placeable_mine( "claymore_zm" ) ) + { + play_sound_at_pos( "purchase", self.origin ); + who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost ); + who thread claymore_setup(); + who thread show_claymore_hint( "claymore_purchased" ); + who thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" ); + + if ( isdefined( self.stub ) ) + self.claymores_triggered = self.stub.claymores_triggered; + + if ( self.claymores_triggered == 0 ) + { + model = getent( self.target, "targetname" ); + + if ( isdefined( model ) ) + model thread maps\mp\zombies\_zm_weapons::weapon_show( who ); + else if ( isdefined( self.clientfieldname ) ) + level setclientfield( self.clientfieldname, 1 ); + + self.claymores_triggered = 1; + + if ( isdefined( self.stub ) ) + self.stub.claymores_triggered = 1; + } + + trigs = getentarray( "claymore_purchase", "targetname" ); + + for ( i = 0; i < trigs.size; i++ ) + trigs[i] setinvisibletoplayer( who ); + } + else + who thread show_claymore_hint( "already_purchased" ); + } + else + { + who play_sound_on_ent( "no_purchase" ); + who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); + } + } + } +} + +claymore_unitrigger_update_prompt( player ) +{ + if ( player is_player_placeable_mine( "claymore_zm" ) ) + { + self sethintstring( "" ); + self setcursorhint( "HINT_NOICON" ); + return false; + } + + self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); + self setcursorhint( "HINT_WEAPON", "claymore_zm" ); + return true; +} + +set_claymore_visible() +{ + players = get_players(); + trigs = getentarray( "claymore_purchase", "targetname" ); + + while ( true ) + { + for ( j = 0; j < players.size; j++ ) + { + if ( !players[j] is_player_placeable_mine( "claymore_zm" ) ) + { + for ( i = 0; i < trigs.size; i++ ) + trigs[i] setinvisibletoplayer( players[j], 0 ); + } + } + + wait 1; + players = get_players(); + } +} + +claymore_safe_to_plant() +{ + if ( self.owner.claymores.size >= level.claymores_max_per_player ) + return 0; + + if ( isdefined( level.claymore_safe_to_plant ) ) + return self [[ level.claymore_safe_to_plant ]](); + + return 1; +} + +claymore_wait_and_detonate() +{ + wait 0.1; + self detonate( self.owner ); +} + +claymore_watch() +{ + self endon( "death" ); + self notify( "claymore_watch" ); + self endon( "claymore_watch" ); + + while ( true ) + { + self waittill( "grenade_fire", claymore, weapname ); + + if ( weapname == "claymore_zm" ) + { + claymore.owner = self; + claymore.team = self.team; + self notify( "zmb_enable_claymore_prompt" ); + + if ( claymore claymore_safe_to_plant() ) + { + if ( isdefined( level.claymore_planted ) ) + self thread [[ level.claymore_planted ]]( claymore ); + + claymore thread claymore_detonation(); + claymore thread play_claymore_effects(); + self maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_planted" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_planted" ); + } + else + claymore thread claymore_wait_and_detonate(); + } + } +} + +claymore_setup() +{ + if ( !isdefined( self.claymores ) ) + self.claymores = []; + + self thread claymore_watch(); + self giveweapon( "claymore_zm" ); + self set_player_placeable_mine( "claymore_zm" ); + self setactionslot( 4, "weapon", "claymore_zm" ); + self setweaponammostock( "claymore_zm", 2 ); +} + +adjust_trigger_origin( origin ) +{ + origin += vectorscale( ( 0, 0, 1 ), 20.0 ); + return origin; +} + +on_spawn_retrieve_trigger( watcher, player ) +{ + self maps\mp\gametypes_zm\_weaponobjects::onspawnretrievableweaponobject( watcher, player ); + + if ( isdefined( self.pickuptrigger ) ) + self.pickuptrigger sethintlowpriority( 0 ); +} + +pickup_claymores() +{ + player = self.owner; + + if ( !player hasweapon( "claymore_zm" ) ) + { + player thread claymore_watch(); + player giveweapon( "claymore_zm" ); + player set_player_placeable_mine( "claymore_zm" ); + player setactionslot( 4, "weapon", "claymore_zm" ); + player setweaponammoclip( "claymore_zm", 0 ); + player notify( "zmb_enable_claymore_prompt" ); + } + else + { + clip_ammo = player getweaponammoclip( self.name ); + clip_max_ammo = weaponclipsize( self.name ); + + if ( clip_ammo >= clip_max_ammo ) + { + self destroy_ent(); + player notify( "zmb_disable_claymore_prompt" ); + return; + } + } + + self pick_up(); + clip_ammo = player getweaponammoclip( self.name ); + clip_max_ammo = weaponclipsize( self.name ); + + if ( clip_ammo >= clip_max_ammo ) + player notify( "zmb_disable_claymore_prompt" ); + + player maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_pickedup" ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_pickedup" ); +} + +pickup_claymores_trigger_listener( trigger, player ) +{ + self thread pickup_claymores_trigger_listener_enable( trigger, player ); + self thread pickup_claymores_trigger_listener_disable( trigger, player ); +} + +pickup_claymores_trigger_listener_enable( trigger, player ) +{ + self endon( "delete" ); + self endon( "death" ); + + while ( true ) + { + player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" ); + + if ( !isdefined( trigger ) ) + return; + + trigger trigger_on(); + trigger linkto( self ); + } +} + +pickup_claymores_trigger_listener_disable( trigger, player ) +{ + self endon( "delete" ); + self endon( "death" ); + + while ( true ) + { + player waittill( "zmb_disable_claymore_prompt" ); + + if ( !isdefined( trigger ) ) + return; + + trigger unlink(); + trigger trigger_off(); + } +} + +shouldaffectweaponobject( object ) +{ + pos = self.origin + vectorscale( ( 0, 0, 1 ), 32.0 ); + dirtopos = pos - object.origin; + objectforward = anglestoforward( object.angles ); + dist = vectordot( dirtopos, objectforward ); + + if ( dist < level.claymore_detectionmindist ) + return 0; + + dirtopos = vectornormalize( dirtopos ); + dot = vectordot( dirtopos, objectforward ); + return dot > level.claymore_detectiondot; +} + +claymore_detonation() +{ + self endon( "death" ); + self waittill_not_moving(); + detonateradius = 96; + damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 ); + damagearea setexcludeteamfortrigger( self.team ); + damagearea enablelinkto(); + damagearea linkto( self ); + + if ( is_true( self.isonbus ) ) + damagearea setmovingplatformenabled( 1 ); + + self.damagearea = damagearea; + self thread delete_claymores_on_death( self.owner, damagearea ); + self.owner.claymores[self.owner.claymores.size] = self; + + while ( true ) + { + damagearea waittill( "trigger", ent ); + + if ( isdefined( self.owner ) && ent == self.owner ) + continue; + + if ( isdefined( ent.pers ) && isdefined( ent.pers["team"] ) && ent.pers["team"] == self.team ) + continue; + + if ( isdefined( ent.ignore_claymore ) && ent.ignore_claymore ) + continue; + + if ( !ent shouldaffectweaponobject( self ) ) + continue; + + if ( ent damageconetrace( self.origin, self ) > 0 ) + { + self playsound( "wpn_claymore_alert" ); + wait 0.4; + + if ( isdefined( self.owner ) ) + self detonate( self.owner ); + else + self detonate( undefined ); + + return; + } + } +} + +delete_claymores_on_death( player, ent ) +{ + self waittill( "death" ); + + if ( isdefined( player ) ) + arrayremovevalue( player.claymores, self ); + + wait 0.05; + + if ( isdefined( ent ) ) + ent delete(); +} + +satchel_damage() +{ + self endon( "death" ); + self setcandamage( 1 ); + self.health = 100000; + self.maxhealth = self.health; + attacker = undefined; + + while ( true ) + { + self waittill( "damage", amount, attacker ); + + if ( !isdefined( self ) ) + return; + + self.health = self.maxhealth; + + if ( !isplayer( attacker ) ) + continue; + + if ( isdefined( self.owner ) && attacker == self.owner ) + continue; + + if ( isdefined( attacker.pers ) && isdefined( attacker.pers["team"] ) && attacker.pers["team"] != level.zombie_team ) + continue; + + break; + } + + if ( level.satchelexplodethisframe ) + wait( 0.1 + randomfloat( 0.4 ) ); + else + wait 0.05; + + if ( !isdefined( self ) ) + return; + + level.satchelexplodethisframe = 1; + thread reset_satchel_explode_this_frame(); + self detonate( attacker ); +} + +reset_satchel_explode_this_frame() +{ + wait 0.05; + level.satchelexplodethisframe = 0; +} + +play_claymore_effects() +{ + self endon( "death" ); + self waittill_not_moving(); + playfxontag( level._effect["claymore_laser"], self, "tag_fx" ); +} + +give_claymores_after_rounds() +{ + while ( true ) + { + level waittill( "between_round_over" ); + + if ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] is_player_placeable_mine( "claymore_zm" ) ) + { + players[i] giveweapon( "claymore_zm" ); + players[i] set_player_placeable_mine( "claymore_zm" ); + players[i] setactionslot( 4, "weapon", "claymore_zm" ); + players[i] setweaponammoclip( "claymore_zm", 2 ); + } + } + } + } +} + +show_claymore_hint( string ) +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( string == "claymore_purchased" ) + text = &"ZOMBIE_CLAYMORE_HOWTO"; + else + text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED"; + + show_equipment_hint_text( text ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc new file mode 100644 index 0000000..eeb581c --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc @@ -0,0 +1,559 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_clone; + +#using_animtree("zombie_cymbal_monkey"); + +init() +{ + if ( !cymbal_monkey_exists() ) + return; +/# + level.zombiemode_devgui_cymbal_monkey_give = ::player_give_cymbal_monkey; +#/ + if ( isdefined( level.legacy_cymbal_monkey ) && level.legacy_cymbal_monkey ) + level.cymbal_monkey_model = "weapon_zombie_monkey_bomb"; + else + level.cymbal_monkey_model = "t6_wpn_zmb_monkey_bomb_world"; + + level._effect["monkey_glow"] = loadfx( "maps/zombie/fx_zombie_monkey_light" ); + level._effect["grenade_samantha_steal"] = loadfx( "maps/zombie/fx_zmb_blackhole_trap_end" ); + level.cymbal_monkeys = []; + scriptmodelsuseanimtree( #animtree ); +} + +player_give_cymbal_monkey() +{ + self giveweapon( "cymbal_monkey_zm" ); + self set_player_tactical_grenade( "cymbal_monkey_zm" ); + self thread player_handle_cymbal_monkey(); +} + +player_handle_cymbal_monkey() +{ + self notify( "starting_monkey_watch" ); + self endon( "disconnect" ); + self endon( "starting_monkey_watch" ); + attract_dist_diff = level.monkey_attract_dist_diff; + + if ( !isdefined( attract_dist_diff ) ) + attract_dist_diff = 45; + + num_attractors = level.num_monkey_attractors; + + if ( !isdefined( num_attractors ) ) + num_attractors = 96; + + max_attract_dist = level.monkey_attract_dist; + + if ( !isdefined( max_attract_dist ) ) + max_attract_dist = 1536; + + while ( true ) + { + grenade = get_thrown_monkey(); + self player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff ); + wait 0.05; + } +} + +watch_for_dud( model, actor ) +{ + self endon( "death" ); + + self waittill( "grenade_dud" ); + + model.dud = 1; + self playsound( "zmb_vox_monkey_scream" ); + self.monk_scream_vox = 1; + wait 3; + + if ( isdefined( model ) ) + model delete(); + + if ( isdefined( actor ) ) + actor delete(); + + if ( isdefined( self.damagearea ) ) + self.damagearea delete(); + + if ( isdefined( self ) ) + self delete(); +} + +watch_for_emp( model, actor ) +{ + self endon( "death" ); + + if ( !should_watch_for_emp() ) + return; + + while ( true ) + { + level waittill( "emp_detonate", origin, radius ); + + if ( distancesquared( origin, self.origin ) < radius * radius ) + break; + } + + self.stun_fx = 1; + + if ( isdefined( level._equipment_emp_destroy_fx ) ) + playfx( level._equipment_emp_destroy_fx, self.origin + vectorscale( ( 0, 0, 1 ), 5.0 ), ( 0, randomfloat( 360 ), 0 ) ); + + wait 0.15; + self.attract_to_origin = 0; + self deactivate_zombie_point_of_interest(); + model clearanim( %o_monkey_bomb, 0 ); + wait 1; + self detonate(); + wait 1; + + if ( isdefined( model ) ) + model delete(); + + if ( isdefined( actor ) ) + actor delete(); + + if ( isdefined( self.damagearea ) ) + self.damagearea delete(); + + if ( isdefined( self ) ) + self delete(); +} + +clone_player_angles( owner ) +{ + self endon( "death" ); + owner endon( "death" ); + + while ( isdefined( self ) ) + { + self.angles = owner.angles; + wait 0.05; + } +} + +show_briefly( showtime ) +{ + self endon( "show_owner" ); + + if ( isdefined( self.show_for_time ) ) + { + self.show_for_time = showtime; + return; + } + + self.show_for_time = showtime; + self setvisibletoall(); + + while ( self.show_for_time > 0 ) + { + self.show_for_time -= 0.05; + wait 0.05; + } + + self setvisibletoallexceptteam( level.zombie_team ); + self.show_for_time = undefined; +} + +show_owner_on_attack( owner ) +{ + owner endon( "hide_owner" ); + owner endon( "show_owner" ); + self endon( "explode" ); + self endon( "death" ); + self endon( "grenade_dud" ); + owner.show_for_time = undefined; + + for (;;) + { + owner waittill( "weapon_fired" ); + + owner thread show_briefly( 0.5 ); + } +} + +hide_owner( owner ) +{ + owner notify( "hide_owner" ); + owner endon( "hide_owner" ); + owner setperk( "specialty_immunemms" ); + owner.no_burning_sfx = 1; + owner notify( "stop_flame_sounds" ); + owner setvisibletoallexceptteam( level.zombie_team ); + owner.hide_owner = 1; + + if ( isdefined( level._effect["human_disappears"] ) ) + playfx( level._effect["human_disappears"], owner.origin ); + + self thread show_owner_on_attack( owner ); + evt = self waittill_any_return( "explode", "death", "grenade_dud" ); +/# + println( "ZMCLONE: Player visible again because of " + evt ); +#/ + owner notify( "show_owner" ); + owner unsetperk( "specialty_immunemms" ); + + if ( isdefined( level._effect["human_disappears"] ) ) + playfx( level._effect["human_disappears"], owner.origin ); + + owner.no_burning_sfx = undefined; + owner setvisibletoall(); + owner.hide_owner = undefined; + owner show(); +} + +proximity_detonate( owner ) +{ + wait 1.5; + + if ( !isdefined( self ) ) + return; + + detonateradius = 96; + explosionradius = detonateradius * 2; + damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 1.5 ); + damagearea setexcludeteamfortrigger( owner.team ); + damagearea enablelinkto(); + damagearea linkto( self ); + self.damagearea = damagearea; + + while ( isdefined( self ) ) + { + damagearea waittill( "trigger", ent ); + + if ( isdefined( owner ) && ent == owner ) + continue; + + if ( isdefined( ent.team ) && ent.team == owner.team ) + continue; + + self playsound( "wpn_claymore_alert" ); + dist = distance( self.origin, ent.origin ); + radiusdamage( self.origin + vectorscale( ( 0, 0, 1 ), 12.0 ), explosionradius, 1, 1, owner, "MOD_GRENADE_SPLASH", "cymbal_monkey_zm" ); + + if ( isdefined( owner ) ) + self detonate( owner ); + else + self detonate( undefined ); + + break; + } + + if ( isdefined( damagearea ) ) + damagearea delete(); +} + +player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff ) +{ + self endon( "disconnect" ); + self endon( "starting_monkey_watch" ); + + if ( isdefined( grenade ) ) + { + grenade endon( "death" ); + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + if ( isdefined( grenade.damagearea ) ) + grenade.damagearea delete(); + + grenade delete(); + return; + } + + grenade hide(); + model = spawn( "script_model", grenade.origin ); + model setmodel( level.cymbal_monkey_model ); + model useanimtree( #animtree ); + model linkto( grenade ); + model.angles = grenade.angles; + model thread monkey_cleanup( grenade ); + clone = undefined; + + if ( isdefined( level.cymbal_monkey_dual_view ) && level.cymbal_monkey_dual_view ) + { + model setvisibletoallexceptteam( level.zombie_team ); + clone = maps\mp\zombies\_zm_clone::spawn_player_clone( self, vectorscale( ( 0, 0, -1 ), 999.0 ), level.cymbal_monkey_clone_weapon, undefined ); + model.simulacrum = clone; + clone maps\mp\zombies\_zm_clone::clone_animate( "idle" ); + clone thread clone_player_angles( self ); + clone notsolid(); + clone ghost(); + } + + grenade thread watch_for_dud( model, clone ); + grenade thread watch_for_emp( model, clone ); + info = spawnstruct(); + info.sound_attractors = []; + grenade thread monitor_zombie_groans( info ); + + grenade waittill( "stationary" ); + + if ( isdefined( level.grenade_planted ) ) + self thread [[ level.grenade_planted ]]( grenade, model ); + + if ( isdefined( grenade ) ) + { + if ( isdefined( model ) ) + { + model setanim( %o_monkey_bomb ); + + if ( !( isdefined( grenade.backlinked ) && grenade.backlinked ) ) + { + model unlink(); + model.origin = grenade.origin; + model.angles = grenade.angles; + } + } + + if ( isdefined( clone ) ) + { + clone forceteleport( grenade.origin, grenade.angles ); + clone thread hide_owner( self ); + grenade thread proximity_detonate( self ); + clone show(); + clone setinvisibletoall(); + clone setvisibletoteam( level.zombie_team ); + } + + grenade resetmissiledetonationtime(); + playfxontag( level._effect["monkey_glow"], model, "origin_animate_jnt" ); + valid_poi = check_point_in_enabled_zone( grenade.origin, undefined, undefined ); + + if ( isdefined( level.check_valid_poi ) ) + valid_poi = grenade [[ level.check_valid_poi ]]( valid_poi ); + + if ( valid_poi ) + { + grenade create_zombie_point_of_interest( max_attract_dist, num_attractors, 10000 ); + grenade.attract_to_origin = 1; + grenade thread create_zombie_point_of_interest_attractor_positions( 4, attract_dist_diff ); + grenade thread wait_for_attractor_positions_complete(); + grenade thread do_monkey_sound( model, info ); + level.cymbal_monkeys[level.cymbal_monkeys.size] = grenade; + } + else + { + grenade.script_noteworthy = undefined; + level thread grenade_stolen_by_sam( grenade, model, clone ); + } + } + else + { + grenade.script_noteworthy = undefined; + level thread grenade_stolen_by_sam( grenade, model, clone ); + } + } +} + +grenade_stolen_by_sam( ent_grenade, ent_model, ent_actor ) +{ + if ( !isdefined( ent_model ) ) + return; + + direction = ent_model.origin; + direction = ( direction[1], direction[0], 0 ); + + if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 ) + direction = ( direction[0], direction[1] * -1, 0 ); + else if ( direction[0] < 0 ) + direction = ( direction[0] * -1, direction[1], 0 ); + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isalive( players[i] ) ) + players[i] playlocalsound( level.zmb_laugh_alias ); + } + + playfxontag( level._effect["grenade_samantha_steal"], ent_model, "tag_origin" ); + ent_model movez( 60, 1.0, 0.25, 0.25 ); + ent_model vibrate( direction, 1.5, 2.5, 1.0 ); + + ent_model waittill( "movedone" ); + + if ( isdefined( self.damagearea ) ) + self.damagearea delete(); + + ent_model delete(); + + if ( isdefined( ent_actor ) ) + ent_actor delete(); + + if ( isdefined( ent_grenade ) ) + { + if ( isdefined( ent_grenade.damagearea ) ) + ent_grenade.damagearea delete(); + + ent_grenade delete(); + } +} + +wait_for_attractor_positions_complete() +{ + self waittill( "attractor_positions_generated" ); + + self.attract_to_origin = 0; +} + +monkey_cleanup( parent ) +{ + while ( true ) + { + if ( !isdefined( parent ) ) + { + if ( isdefined( self ) && ( isdefined( self.dud ) && self.dud ) ) + wait 6; + + if ( isdefined( self.simulacrum ) ) + self.simulacrum delete(); + + self_delete(); + return; + } + + wait 0.05; + } +} + +do_monkey_sound( model, info ) +{ + self.monk_scream_vox = 0; + + if ( isdefined( level.grenade_safe_to_bounce ) ) + { + if ( ![[ level.grenade_safe_to_bounce ]]( self.owner, "cymbal_monkey_zm" ) ) + { + self playsound( "zmb_vox_monkey_scream" ); + self.monk_scream_vox = 1; + } + } + + if ( !self.monk_scream_vox && level.music_override == 0 ) + { + if ( isdefined( level.cymbal_monkey_dual_view ) && level.cymbal_monkey_dual_view ) + self playsoundtoteam( "zmb_monkey_song", "allies" ); + else + self playsound( "zmb_monkey_song" ); + } + + if ( !self.monk_scream_vox ) + self thread play_delayed_explode_vox(); + + self waittill( "explode", position ); + + level notify( "grenade_exploded", position, 100, 5000, 450 ); + monkey_index = -1; + + for ( i = 0; i < level.cymbal_monkeys.size; i++ ) + { + if ( !isdefined( level.cymbal_monkeys[i] ) ) + { + monkey_index = i; + break; + } + } + + if ( monkey_index >= 0 ) + arrayremoveindex( level.cymbal_monkeys, monkey_index ); + + if ( isdefined( model ) ) + model clearanim( %o_monkey_bomb, 0.2 ); + + for ( i = 0; i < info.sound_attractors.size; i++ ) + { + if ( isdefined( info.sound_attractors[i] ) ) + info.sound_attractors[i] notify( "monkey_blown_up" ); + } +} + +play_delayed_explode_vox() +{ + wait 6.5; + + if ( isdefined( self ) ) + self playsound( "zmb_vox_monkey_explode" ); +} + +get_thrown_monkey() +{ + self endon( "disconnect" ); + self endon( "starting_monkey_watch" ); + + while ( true ) + { + self waittill( "grenade_fire", grenade, weapname ); + + if ( weapname == "cymbal_monkey_zm" ) + { + grenade.use_grenade_special_long_bookmark = 1; + grenade.grenade_multiattack_bookmark_count = 1; + return grenade; + } + + wait 0.05; + } +} + +monitor_zombie_groans( info ) +{ + self endon( "explode" ); + + while ( true ) + { + if ( !isdefined( self ) ) + return; + + if ( !isdefined( self.attractor_array ) ) + { + wait 0.05; + continue; + } + + for ( i = 0; i < self.attractor_array.size; i++ ) + { + if ( array_check_for_dupes( info.sound_attractors, self.attractor_array[i] ) ) + { + if ( isdefined( self.origin ) && isdefined( self.attractor_array[i].origin ) ) + { + if ( distancesquared( self.origin, self.attractor_array[i].origin ) < 250000 ) + { + info.sound_attractors[info.sound_attractors.size] = self.attractor_array[i]; + self.attractor_array[i] thread play_zombie_groans(); + } + } + } + } + + wait 0.05; + } +} + +play_zombie_groans() +{ + self endon( "death" ); + self endon( "monkey_blown_up" ); + + while ( true ) + { + if ( isdefined( self ) ) + { + self playsound( "zmb_vox_zombie_groan" ); + wait( randomfloatrange( 2, 3 ) ); + } + else + return; + } +} + +cymbal_monkey_exists() +{ + return isdefined( level.zombie_weapons["cymbal_monkey_zm"] ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_emp_bomb.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_emp_bomb.gsc new file mode 100644 index 0000000..4afe237 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_emp_bomb.gsc @@ -0,0 +1,320 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_power; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zombies\_zm_equipment; + +init() +{ + if ( !emp_bomb_exists() ) + return; + + set_zombie_var( "emp_stun_range", 600 ); + set_zombie_var( "emp_stun_time", 20 ); + set_zombie_var( "emp_perk_off_range", 420 ); + set_zombie_var( "emp_perk_off_time", 90 ); + precacheshellshock( "frag_grenade_mp" ); +/# + level.zombiemode_devgui_emp_bomb_give = ::player_give_emp_bomb; +#/ + level thread onplayerconnect(); + level._equipment_emp_destroy_fx = loadfx( "weapon/emp/fx_emp_explosion_equip" ); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread watch_for_grenade_throw(); + } +} + +player_give_emp_bomb() +{ + self giveweapon( "emp_grenade_zm" ); + self set_player_tactical_grenade( "emp_grenade_zm" ); +} + +emp_bomb_exists() +{ + return isdefined( level.zombie_weapons["emp_grenade_zm"] ); +} + +watch_for_grenade_throw() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "grenade_fire", grenade, weapname ); + + if ( weapname != "emp_grenade_zm" ) + continue; + + grenade.use_grenade_special_bookmark = 1; + grenade.grenade_multiattack_bookmark_count = 1; + grenade.owner = self; + self thread emp_detonate( grenade ); + } +} + +emp_detonate( grenade ) +{ + grenade_owner = undefined; + + if ( isdefined( grenade.owner ) ) + grenade_owner = grenade.owner; + + grenade waittill( "explode", grenade_origin ); + + emp_radius = level.zombie_vars["emp_perk_off_range"]; + emp_time = level.zombie_vars["emp_perk_off_time"]; + origin = grenade_origin; + + if ( !isdefined( origin ) ) + return; + + level notify( "emp_detonate", origin, emp_radius ); + self thread emp_detonate_zombies( grenade_origin, grenade_owner ); + + if ( isdefined( level.custom_emp_detonate ) ) + thread [[ level.custom_emp_detonate ]]( grenade_origin ); + + if ( isdefined( grenade_owner ) ) + grenade_owner thread destroyequipment( origin, emp_radius ); + + players_emped = emp_players( origin, emp_radius ); + disabled_list = maps\mp\zombies\_zm_power::change_power_in_radius( -1, origin, emp_radius ); + wait( emp_time ); + maps\mp\zombies\_zm_power::revert_power_to_list( 1, origin, emp_radius, disabled_list ); + unemp_players( players_emped ); +} + +emp_detonate_zombies( grenade_origin, grenade_owner ) +{ + zombies = get_array_of_closest( grenade_origin, getaispeciesarray( level.zombie_team, "all" ), undefined, undefined, level.zombie_vars["emp_stun_range"] ); + + if ( !isdefined( zombies ) ) + return; + + for ( i = 0; i < zombies.size; i++ ) + { + if ( !isdefined( zombies[i] ) || isdefined( zombies[i].ignore_inert ) && zombies[i].ignore_inert ) + continue; + + zombies[i].becoming_inert = 1; + } + + stunned = 0; + + for ( i = 0; i < zombies.size; i++ ) + { + if ( !isdefined( zombies[i] ) || isdefined( zombies[i].ignore_inert ) && zombies[i].ignore_inert ) + continue; + + stunned++; + zombies[i] thread stun_zombie(); + wait 0.05; + } + + if ( stunned >= 10 && isdefined( grenade_owner ) ) + grenade_owner notify( "the_lights_of_their_eyes" ); +} + +stun_zombie() +{ + self endon( "death" ); + self notify( "stun_zombie" ); + self endon( "stun_zombie" ); + + if ( self.health <= 0 ) + { +/# + iprintln( "trying to stun a dead zombie" ); +#/ + return; + } + + if ( isdefined( self.stun_zombie ) ) + { + self thread [[ self.stun_zombie ]](); + return; + } + + self thread maps\mp\zombies\_zm_ai_basic::start_inert(); +} + +emp_players( origin, radius ) +{ + players_emped = []; + players = get_players(); + rsquared = radius * radius; + + foreach ( player in players ) + { + if ( isalive( player ) && distancesquared( origin, player.origin ) < rsquared ) + { + player player_emp_on(); + players_emped[players_emped.size] = player; + } + } + + return players_emped; +} + +unemp_players( players_emped ) +{ + foreach ( player in players_emped ) + player player_emp_off(); +} + +player_emp_on() +{ + self.empgrenaded = 1; + self setempjammed( 1 ); + self shellshock( "frag_grenade_mp", 2 ); +} + +player_emp_off() +{ + if ( isdefined( self ) ) + { + self stopshellshock(); + self setempjammed( 0 ); + self.empgrenaded = undefined; + } +} + +getwatcherforweapon( weapname ) +{ + if ( !isdefined( self ) ) + return undefined; + + if ( !isplayer( self ) ) + return undefined; + + for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) + { + if ( self.weaponobjectwatcherarray[i].weapon != weapname ) + continue; + + return self.weaponobjectwatcherarray[i]; + } + + return undefined; +} + +destroyequipment( origin, radius ) +{ + grenades = getentarray( "grenade", "classname" ); + rsquared = radius * radius; + + for ( i = 0; i < grenades.size; i++ ) + { + item = grenades[i]; + + if ( distancesquared( origin, item.origin ) > rsquared ) + continue; + + if ( !isdefined( item.name ) ) + continue; + + if ( !is_offhand_weapon( item.name ) ) + continue; + + watcher = item.owner getwatcherforweapon( item.name ); + + if ( !isdefined( watcher ) ) + continue; + + watcher thread waitanddetonate( item, 0.0, self, "emp_grenade_zm" ); + } + + equipment = maps\mp\zombies\_zm_equipment::get_destructible_equipment_list(); + + for ( i = 0; i < equipment.size; i++ ) + { + item = equipment[i]; + + if ( !isdefined( item ) ) + continue; + + if ( distancesquared( origin, item.origin ) > rsquared ) + continue; + + if ( isdefined( item.isriotshield ) && item.isriotshield ) + continue; + + waitanddamage( item, 505 ); + } +} + +isempweapon( weaponname ) +{ + if ( isdefined( weaponname ) && ( weaponname == "emp_mp" || weaponname == "emp_grenade_mp" || weaponname == "emp_grenade_zm" ) ) + return true; + + return false; +} + +waitanddetonate( object, delay, attacker, weaponname ) +{ + object endon( "death" ); + object endon( "hacked" ); + from_emp = isempweapon( weaponname ); + + if ( from_emp ) + { + object.stun_fx = 1; + + if ( isdefined( level._equipment_emp_destroy_fx ) ) + playfx( level._equipment_emp_destroy_fx, object.origin + vectorscale( ( 0, 0, 1 ), 5.0 ), ( 0, randomfloat( 360 ), 0 ) ); + + delay = 1.1; + } + + if ( delay ) + wait( delay ); + + if ( isdefined( object.detonated ) && object.detonated == 1 ) + return; + + if ( !isdefined( self.detonate ) ) + return; + + if ( isdefined( attacker ) && isplayer( attacker ) && isdefined( attacker.pers["team"] ) && isdefined( object.owner ) && isdefined( object.owner.pers["team"] ) ) + { + if ( level.teambased ) + { + if ( attacker.pers["team"] != object.owner.pers["team"] ) + attacker notify( "destroyed_explosive" ); + } + else if ( attacker != object.owner ) + attacker notify( "destroyed_explosive" ); + } + + object.detonated = 1; + object [[ self.detonate ]]( attacker, weaponname ); +} + +waitanddamage( object, damage ) +{ + object endon( "death" ); + object endon( "hacked" ); + object.stun_fx = 1; + + if ( isdefined( level._equipment_emp_destroy_fx ) ) + playfx( level._equipment_emp_destroy_fx, object.origin + vectorscale( ( 0, 0, 1 ), 5.0 ), ( 0, randomfloat( 360 ), 0 ) ); + + delay = 1.1; + + if ( delay ) + wait( delay ); + + object maps\mp\zombies\_zm_equipment::item_damage( damage ); +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_jetgun.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_jetgun.gsc new file mode 100644 index 0000000..e549198 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_jetgun.gsc @@ -0,0 +1,847 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\animscripts\zm_death; +#include maps\mp\animscripts\zm_run; + +init() +{ + if ( !maps\mp\zombies\_zm_weapons::is_weapon_included( "jetgun_zm" ) ) + return; + + maps\mp\zombies\_zm_equipment::register_equipment( "jetgun_zm", &"ZOMBIE_EQUIP_JETGUN_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_JETGUN_HOWTO", "jetgun_zm_icon", "jetgun", ::jetgun_activation_watcher_thread, undefined, ::dropjetgun, ::pickupjetgun ); + maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "jetgun", &"ZOMBIE_EQUIP_JETGUN_PICKUP_HINT_STRING" ); + level._effect["jetgun_smoke_cloud"] = loadfx( "weapon/thunder_gun/fx_thundergun_smoke_cloud" ); + level._effect["jetgun_overheat"] = loadfx( "weapon/jet_gun/fx_jetgun_overheat" ); + level._effect["jetgun_vortex"] = loadfx( "weapon/jet_gun/fx_jetgun_on" ); + level._effect["jetgun_meat_grinder"] = loadfx( "weapon/jet_gun/fx_jetgun_kill" ); + set_zombie_var( "jetgun_cylinder_radius", 1024 ); + set_zombie_var( "jetgun_grind_range", 128 ); + set_zombie_var( "jetgun_gib_range", 256 ); + set_zombie_var( "jetgun_gib_damage", 50 ); + set_zombie_var( "jetgun_knockdown_range", 256 ); + set_zombie_var( "jetgun_drag_range", 2048 ); + set_zombie_var( "jetgun_knockdown_damage", 15 ); + set_zombie_var( "powerup_move_dist", 50 ); + set_zombie_var( "powerup_drag_range", 500 ); + level.jetgun_pulled_in_range = int( level.zombie_vars["jetgun_drag_range"] / 8 ) * level.zombie_vars["jetgun_drag_range"] / 8; + level.jetgun_pulling_in_range = int( level.zombie_vars["jetgun_drag_range"] / 4 ) * level.zombie_vars["jetgun_drag_range"] / 4; + level.jetgun_inner_range = int( level.zombie_vars["jetgun_drag_range"] / 2 ) * level.zombie_vars["jetgun_drag_range"] / 2; + level.jetgun_outer_edge = int( level.zombie_vars["jetgun_drag_range"] * level.zombie_vars["jetgun_drag_range"] ); + level.jetgun_gib_refs = []; + level.jetgun_gib_refs[level.jetgun_gib_refs.size] = "guts"; + level.jetgun_gib_refs[level.jetgun_gib_refs.size] = "right_arm"; + level.jetgun_gib_refs[level.jetgun_gib_refs.size] = "left_arm"; + level.jetgun_gib_refs[level.jetgun_gib_refs.size] = "right_leg"; + level.jetgun_gib_refs[level.jetgun_gib_refs.size] = "left_leg"; + level.jetgun_gib_refs[level.jetgun_gib_refs.size] = "no_legs"; +/# + level thread jetgun_devgui_dvar_think(); + level.zm_devgui_jetgun_never_overheat = ::never_overheat; +#/ + onplayerconnect_callback( ::jetgun_on_player_connect ); +} + +dropjetgun() +{ + item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "t6_wpn_zmb_jet_gun_world", "jetgun_zm", self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), self.angles ); + + if ( isdefined( item ) ) + { + item.overheating = self.jetgun_overheating; + item.heatval = self.jetgun_heatval; + item.original_owner = self; + item.owner = undefined; + item.name = "jetgun_zm"; + item.requires_pickup = 1; + } + + self.jetgun_overheating = undefined; + self.jetgun_heatval = undefined; + self takeweapon( "jetgun_zm" ); + return item; +} + +pickupjetgun( item ) +{ + item.owner = self; + + if ( isdefined( item.overheating ) && isdefined( item.heatval ) ) + { + self.jetgun_overheating = item.overheating; + self.jetgun_heatval = item.heatval; + } + + item.overheating = undefined; + item.heatval = undefined; + self setcurrentweaponspinlerp( 0 ); +} + +jetgun_activation_watcher_thread() +{ + self endon( "zombified" ); + self endon( "disconnect" ); + self endon( "jetgun_zm_taken" ); + + while ( true ) + self waittill_either( "jetgun_zm_activate", "jetgun_zm_deactivate" ); +} + +jetgun_devgui_dvar_think() +{ +/# + if ( !maps\mp\zombies\_zm_weapons::is_weapon_included( "jetgun_zm" ) ) + return; + + setdvar( "scr_jetgun_cylinder_radius", level.zombie_vars["jetgun_cylinder_radius"] ); + setdvar( "scr_jetgun_grind_range", level.zombie_vars["jetgun_grind_range"] ); + setdvar( "scr_jetgun_drag_range", level.zombie_vars["jetgun_drag_range"] ); + setdvar( "scr_jetgun_gib_range", level.zombie_vars["jetgun_gib_range"] ); + setdvar( "scr_jetgun_gib_damage", level.zombie_vars["jetgun_gib_damage"] ); + setdvar( "scr_jetgun_knockdown_range", level.zombie_vars["jetgun_knockdown_range"] ); + setdvar( "scr_jetgun_knockdown_damage", level.zombie_vars["jetgun_knockdown_damage"] ); + + for (;;) + { + level.zombie_vars["jetgun_cylinder_radius"] = getdvarint( _hash_6ECD5E99 ); + level.zombie_vars["jetgun_grind_range"] = getdvarint( _hash_8562CAD8 ); + level.zombie_vars["jetgun_drag_range"] = getdvarint( _hash_ECC8AEC2 ); + level.zombie_vars["jetgun_gib_range"] = getdvarint( _hash_D5D25B16 ); + level.zombie_vars["jetgun_gib_damage"] = getdvarint( _hash_6F74DFC8 ); + level.zombie_vars["jetgun_knockdown_range"] = getdvarint( _hash_B7484BD2 ); + level.zombie_vars["jetgun_knockdown_damage"] = getdvarint( _hash_7FA8E804 ); + wait 0.5; + } +#/ +} + +jetgun_on_player_connect() +{ + self thread wait_for_jetgun_fired(); + self thread watch_weapon_changes(); + self thread handle_overheated_jetgun(); +} + +get_jetgun_engine_direction() +{ + return self getcurrentweaponspinlerp(); +} + +set_jetgun_engine_direction( nv ) +{ + self setcurrentweaponspinlerp( nv ); +} + +never_overheat() +{ +/# + self notify( "never_overheat" ); + self endon( "never_overheat" ); + self endon( "death_or_disconnect" ); + + while ( true ) + { + if ( self getcurrentweapon() == "jetgun_zm" ) + self setweaponoverheating( 0, 0 ); + + wait 0.05; + } +#/ +} + +watch_overheat() +{ + self endon( "death_or_disconnect" ); + self endon( "weapon_change" ); + + if ( self getcurrentweapon() == "jetgun_zm" && isdefined( self.jetgun_overheating ) && isdefined( self.jetgun_heatval ) ) + self setweaponoverheating( self.jetgun_overheating, self.jetgun_heatval ); + + while ( true ) + { + if ( self getcurrentweapon() == "jetgun_zm" ) + { + overheating = self isweaponoverheating( 0 ); + heat = self isweaponoverheating( 1 ); + self.jetgun_overheating = overheating; + self.jetgun_heatval = heat; + + if ( overheating ) + self notify( "jetgun_overheated" ); + + if ( heat > 75 ) + self thread play_overheat_fx(); + } + + wait 0.05; + } +} + +play_overheat_fx() +{ + if ( !( isdefined( self.overheat_fx_playing ) && self.overheat_fx_playing ) ) + { + self.overheat_fx_playing = 1; + playfxontag( level._effect["jetgun_overheat"], self, "tag_flash" ); + wait 5; + + if ( isdefined( self ) ) + self.overheat_fx_playing = 0; + } +} + +handle_overheated_jetgun() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "jetgun_overheated" ); + + if ( self getcurrentweapon() == "jetgun_zm" ) + { + if ( isdefined( level.explode_overheated_jetgun ) && level.explode_overheated_jetgun ) + { + self thread maps\mp\zombies\_zm_equipment::equipment_release( "jetgun_zm" ); + weapon_org = self gettagorigin( "tag_weapon" ); + pcount = get_players().size; + pickup_time = 360 / pcount; + maps\mp\zombies\_zm_buildables::player_explode_buildable( "jetgun_zm", weapon_org, 250, 1, pickup_time ); + self.jetgun_overheating = undefined; + self.jetgun_heatval = undefined; + self playsound( "wpn_jetgun_explo" ); + } + else if ( isdefined( level.unbuild_overheated_jetgun ) && level.unbuild_overheated_jetgun ) + { + self thread maps\mp\zombies\_zm_equipment::equipment_release( "jetgun_zm" ); + maps\mp\zombies\_zm_buildables::unbuild_buildable( "jetgun_zm", 1 ); + self.jetgun_overheating = undefined; + self.jetgun_heatval = undefined; + } + else if ( isdefined( level.take_overheated_jetgun ) && level.take_overheated_jetgun ) + { + self thread maps\mp\zombies\_zm_equipment::equipment_release( "jetgun_zm" ); + self.jetgun_overheating = undefined; + self.jetgun_heatval = undefined; + } + } + } +} + +watch_weapon_changes() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "weapon_change", weapon ); + + if ( weapon == "jetgun_zm" ) + { +/# + if ( getdvarint( _hash_BCDDAAFF ) > 0 ) + self thread zombie_drag_radius(); +#/ + self thread watch_overheat(); + } + } +} + +wait_for_jetgun_fired() +{ + self endon( "disconnect" ); + + self waittill( "spawned_player" ); + + for (;;) + { + self waittill( "weapon_fired" ); + + currentweapon = self getcurrentweapon(); + + if ( currentweapon == "jetgun_zm" || currentweapon == "jetgun_upgraded_zm" ) + self jetgun_firing(); + } +} + +jetgun_network_choke() +{ + level.jetgun_network_choke_count++; + + if ( !( level.jetgun_network_choke_count % 10 ) ) + { + wait_network_frame(); + wait_network_frame(); + wait_network_frame(); + } +} + +is_jetgun_firing() +{ + return abs( self get_jetgun_engine_direction() ) > 0.2; +} + +jetgun_firing() +{ + if ( !isdefined( self.jetsound_ent ) ) + { + self.jetsound_ent = spawn( "script_origin", self.origin ); + self.jetsound_ent linkto( self, "tag_origin" ); + } + + jetgun_fired = 0; + + if ( self is_jetgun_firing() && jetgun_fired == 0 ) + { + self.jetsound_ent playloopsound( "wpn_jetgun_effect_plr_loop", 0.8 ); + self.jetsound_ent playsound( "wpn_jetgun_effect_plr_start" ); + self notify( "jgun_snd" ); + } + + while ( self is_jetgun_firing() ) + { + jetgun_fired = 1; + self thread jetgun_fired(); + view_pos = self gettagorigin( "tag_flash" ); + view_angles = self gettagangles( "tag_flash" ); + + if ( self get_jetgun_engine_direction() < 0 ) + playfx( level._effect["jetgun_smoke_cloud"], view_pos - self getplayerviewheight(), anglestoforward( view_angles ), anglestoup( view_angles ) ); + else + playfx( level._effect["jetgun_smoke_cloud"], view_pos - self getplayerviewheight(), anglestoforward( view_angles ) * -1, anglestoup( view_angles ) ); + + wait 0.25; + } + + if ( jetgun_fired == 1 ) + { + self.jetsound_ent stoploopsound( 0.5 ); + self.jetsound_ent playsound( "wpn_jetgun_effect_plr_end" ); + self.jetsound_ent thread sound_ent_cleanup(); + jetgun_fired = 0; + } +} + +sound_ent_cleanup() +{ + self endon( "jgun_snd" ); + wait 4; + + if ( isdefined( self.jetsound_ent ) ) + self delete(); +} + +jetgun_fired() +{ + if ( !self is_jetgun_firing() ) + return; + + origin = self getweaponmuzzlepoint(); + physicsjetthrust( origin, self getweaponforwarddir() * -1, level.zombie_vars["jetgun_grind_range"], self get_jetgun_engine_direction(), 0.85 ); + + if ( !isdefined( level.jetgun_knockdown_enemies ) ) + { + level.jetgun_knockdown_enemies = []; + level.jetgun_knockdown_gib = []; + level.jetgun_drag_enemies = []; + level.jetgun_fling_enemies = []; + level.jetgun_grind_enemies = []; + } + + powerups = maps\mp\zombies\_zm_powerups::get_powerups(); + + if ( isdefined( powerups ) && powerups.size ) + self thread try_pull_powerups( powerups ); + + self jetgun_get_enemies_in_range( self get_jetgun_engine_direction() ); + level.jetgun_network_choke_count = 0; + + foreach ( index, zombie in level.jetgun_fling_enemies ) + { + jetgun_network_choke(); + + if ( isdefined( zombie ) ) + zombie thread jetgun_fling_zombie( self, index ); + } + + foreach ( zombie in level.jetgun_drag_enemies ) + { + jetgun_network_choke(); + + if ( isdefined( zombie ) ) + { + zombie.jetgun_owner = self; + zombie thread jetgun_drag_zombie( origin, -1 * self get_jetgun_engine_direction() ); + } + } + + level.jetgun_knockdown_enemies = []; + level.jetgun_knockdown_gib = []; + level.jetgun_drag_enemies = []; + level.jetgun_fling_enemies = []; + level.jetgun_grind_enemies = []; +} + +try_pull_powerups( powerups ) +{ + powerup_move_dist = level.zombie_vars["powerup_move_dist"] * -1 * self get_jetgun_engine_direction(); + powerup_range_squared = level.zombie_vars["powerup_drag_range"] * level.zombie_vars["powerup_drag_range"]; + view_pos = self getweaponmuzzlepoint(); + forward_view_angles = self getweaponforwarddir(); + + foreach ( powerup in powerups ) + { + if ( distancesquared( view_pos, powerup.origin ) > powerup_range_squared ) + continue; + + normal = vectornormalize( powerup.origin - view_pos ); + dot = vectordot( forward_view_angles, normal ); + + if ( abs( dot ) < 0.7 ) + continue; + + powerup notify( "move_powerup", view_pos, powerup_move_dist ); + } +} + +jetgun_get_enemies_in_range( invert ) +{ + view_pos = self getweaponmuzzlepoint(); + zombies = get_array_of_closest( view_pos, get_round_enemy_array(), undefined, 3, level.zombie_vars["jetgun_drag_range"] ); + + if ( !isdefined( zombies ) ) + { + + } + + knockdown_range_squared = level.zombie_vars["jetgun_knockdown_range"] * level.zombie_vars["jetgun_knockdown_range"]; + drag_range_squared = level.zombie_vars["jetgun_drag_range"] * level.zombie_vars["jetgun_drag_range"]; + gib_range_squared = level.zombie_vars["jetgun_gib_range"] * level.zombie_vars["jetgun_gib_range"]; + grind_range_squared = level.zombie_vars["jetgun_grind_range"] * level.zombie_vars["jetgun_grind_range"]; + cylinder_radius_squared = level.zombie_vars["jetgun_cylinder_radius"] * level.zombie_vars["jetgun_cylinder_radius"]; + forward_view_angles = self getweaponforwarddir(); + end_pos = view_pos + vectorscale( forward_view_angles, level.zombie_vars["jetgun_knockdown_range"] ); +/# + if ( 2 == getdvarint( _hash_BCDDAAFF ) ) + { + near_circle_pos = view_pos + vectorscale( forward_view_angles, 2 ); + circle( near_circle_pos, level.zombie_vars["jetgun_cylinder_radius"], ( 1, 0, 0 ), 0, 0, 100 ); + line( near_circle_pos, end_pos, ( 0, 0, 1 ), 1, 0, 100 ); + circle( end_pos, level.zombie_vars["jetgun_cylinder_radius"], ( 1, 0, 0 ), 0, 0, 100 ); + } +#/ + for ( i = 0; i < zombies.size; i++ ) + self jetgun_check_enemies_in_range( zombies[i], view_pos, drag_range_squared, gib_range_squared, grind_range_squared, cylinder_radius_squared, forward_view_angles, end_pos, invert ); +} + +jetgun_check_enemies_in_range( zombie, view_pos, drag_range_squared, gib_range_squared, grind_range_squared, cylinder_radius_squared, forward_view_angles, end_pos, invert ) +{ + if ( !isdefined( zombie ) ) + return; + + if ( !isdefined( zombie ) ) + return; + + if ( zombie enemy_killed_by_jetgun() ) + return; + + if ( !isdefined( zombie.ai_state ) || zombie.ai_state != "find_flesh" && zombie.ai_state != "zombieMoveOnBus" ) + return; + + if ( isdefined( zombie.in_the_ground ) && zombie.in_the_ground ) + return; + + if ( isdefined( zombie.is_avogadro ) && zombie.is_avogadro ) + return; + + if ( isdefined( zombie.isdog ) && zombie.isdog ) + return; + + if ( isdefined( zombie.isscreecher ) && zombie.isscreecher ) + return; + + if ( isdefined( self.animname ) && self.animname == "quad_zombie" ) + return; + + test_origin = zombie getcentroid(); + test_range_squared = distancesquared( view_pos, test_origin ); + + if ( test_range_squared > drag_range_squared ) + { + zombie jetgun_debug_print( "range", ( 1, 0, 0 ) ); + return; + } + + normal = vectornormalize( test_origin - view_pos ); + dot = vectordot( forward_view_angles, normal ); + + if ( abs( dot ) < 0.7 ) + { + zombie jetgun_debug_print( "dot", ( 1, 0, 0 ) ); + return; + } + + radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin ); + + if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared ) + { + zombie jetgun_debug_print( "cylinder", ( 1, 0, 0 ) ); + return; + } + + if ( 0 == zombie damageconetrace( view_pos, self ) ) + { + zombie jetgun_debug_print( "cone", ( 1, 0, 0 ) ); + return; + } + + jetgun_blow_suck = invert; + + if ( 0 > dot ) + jetgun_blow_suck *= -1; + + if ( test_range_squared < grind_range_squared ) + { + level.jetgun_fling_enemies[level.jetgun_fling_enemies.size] = zombie; + level.jetgun_grind_enemies[level.jetgun_grind_enemies.size] = dot < 0; + } + else if ( test_range_squared < drag_range_squared && dot > 0 ) + level.jetgun_drag_enemies[level.jetgun_drag_enemies.size] = zombie; +} + +jetgun_debug_print( msg, color ) +{ +/# + if ( !getdvarint( _hash_BCDDAAFF ) ) + return; + + if ( !isdefined( color ) ) + color = ( 1, 1, 1 ); + + print3d( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), msg, color, 1, 1, 40 ); +#/ +} + +jetgun_debug_print_on_ent( msg, color ) +{ +/# + if ( !getdvarint( _hash_BCDDAAFF ) ) + return; + + if ( !isdefined( color ) ) + color = ( 1, 1, 1 ); + + self notify( "new_jetgun_debug_print_on_ent" ); + self endon( "death" ); + self endon( "jetgun_end_drag_state" ); + self endon( "new_jetgun_debug_print_on_ent" ); + + while ( true ) + { + print3d( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), msg, color, 1, 1 ); + wait 0.05; + } +#/ +} + +try_gibbing() +{ + if ( isdefined( self ) && isdefined( self.a ) && !( isdefined( self.isscreecher ) && self.isscreecher ) ) + { + self.a.gib_ref = random( level.jetgun_gib_refs ); + self thread maps\mp\animscripts\zm_death::do_gib(); + } +} + +jetgun_handle_death_notetracks( note ) +{ + if ( note == "jetgunned" ) + self thread jetgun_grind_death_ending(); +} + +jetgun_grind_death_ending() +{ + if ( !isdefined( self ) ) + return; + + self hide(); + wait 0.1; + self self_delete(); +} + +jetgun_grind_zombie( player ) +{ + player endon( "death" ); + player endon( "disconnect" ); + self endon( "death" ); + + if ( !isdefined( self.jetgun_grind ) ) + { + self.jetgun_grind = 1; + self notify( "grinding" ); + player set_jetgun_engine_direction( 0.5 * player get_jetgun_engine_direction() ); + + if ( is_mature() ) + { + if ( isdefined( level._effect["zombie_guts_explosion"] ) ) + playfx( level._effect["zombie_guts_explosion"], self gettagorigin( "J_SpineLower" ) ); + } + + self.nodeathragdoll = 1; + self.handle_death_notetracks = ::jetgun_handle_death_notetracks; + self dodamage( self.health + 666, player.origin, player ); + } +} + +jetgun_fling_zombie( player, index ) +{ + if ( !isdefined( self ) ) + return; + + if ( isdefined( self.jetgun_fling_func ) ) + { + self [[ self.jetgun_fling_func ]]( player ); + return; + } + + was_alive = isalive( self ); + + if ( was_alive ) + { + self.jetgun_fling = 1; + self notify( "flinging" ); + deathanim = undefined; + + if ( is_mature() ) + player weaponplayejectbrass(); + + if ( isdefined( self.has_legs ) && self.has_legs ) + { + if ( isdefined( self.jetgun_drag_state ) && self.jetgun_drag_state == "jetgun_sprint" ) + deathanim = "zm_jetgun_sprint_death"; + else + deathanim = "zm_jetgun_death"; + } + else + deathanim = "zm_jetgun_death_crawl"; + + self.deathanim = deathanim; + player playsound( "evt_jetgun_zmb_suck" ); + } + + self thread jetgun_grind_zombie( player ); +} + +jetgun_drag_zombie( vdir, speed ) +{ + if ( isdefined( self.jetgun_drag_func ) ) + { + self [[ self.jetgun_drag_func ]]( vdir, speed ); + return; + } + + self zombie_do_drag( vdir, speed ); +} + +jetgun_knockdown_zombie( player, gib ) +{ + self endon( "death" ); + return; + + if ( isdefined( self.jetgun_knockdown_func ) ) + self [[ self.jetgun_knockdown_func ]]( player, gib ); + else + self dodamage( level.zombie_vars["jetgun_knockdown_damage"], player.origin, player ); + + if ( gib ) + { + self.a.gib_ref = random( level.jetgun_gib_refs ); + self thread maps\mp\animscripts\zm_death::do_gib(); + } + + self.jetgun_handle_pain_notetracks = ::handle_jetgun_pain_notetracks; + self dodamage( level.zombie_vars["jetgun_knockdown_damage"], player.origin, player ); +} + +handle_jetgun_pain_notetracks( note ) +{ + if ( note == "zombie_knockdown_ground_impact" ) + playfx( level._effect["jetgun_knockdown_ground"], self.origin, anglestoforward( self.angles ), anglestoup( self.angles ) ); +} + +is_jetgun_damage() +{ + return isdefined( self.damageweapon ) && ( self.damageweapon == "jetgun_zm" || self.damageweapon == "jetgun_upgraded_zm" ) && ( self.damagemod != "MOD_GRENADE" && self.damagemod != "MOD_GRENADE_SPLASH" ); +} + +enemy_killed_by_jetgun() +{ + return isdefined( self.jetgun_fling ) && self.jetgun_fling || isdefined( self.jetgun_grind ) && self.jetgun_grind; +} + +zombie_do_drag( vdir, speed ) +{ + if ( !self zombie_is_in_drag_state() ) + { + self zombie_enter_drag_state( vdir, speed ); + self thread zombie_drag_think(); + } + else + self zombie_keep_in_drag_state( vdir, speed ); +} + +zombie_is_in_drag_state() +{ + return isdefined( self.drag_state ) && self.drag_state; +} + +zombie_should_stay_in_drag_state() +{ + if ( !isdefined( self ) || !isalive( self ) ) + return false; + + if ( !isdefined( self.jetgun_owner ) || self.jetgun_owner getcurrentweapon() != "jetgun_zm" || !self.jetgun_owner is_jetgun_firing() ) + return false; + + if ( isdefined( self.drag_state ) && self.drag_state ) + return true; + + return false; +} + +zombie_keep_in_drag_state( vdir, speed ) +{ + self.drag_start_time = gettime(); + self.drag_target = vdir; +} + +zombie_enter_drag_state( vdir, speed ) +{ + self.drag_state = 1; + self.jetgun_drag_state = "unaffected"; + self.was_traversing = isdefined( self.is_traversing ) && self.is_traversing; + self notify( "killanimscript" ); + self zombie_keep_in_drag_state( vdir, speed ); + self.zombie_move_speed_pre_jetgun_drag = self.zombie_move_speed; +} + +zombie_exit_drag_state() +{ + self notify( "jetgun_end_drag_state" ); + self.drag_state = 0; + self.jetgun_drag_state = "unaffected"; + self.needs_run_update = 1; + + if ( isdefined( self.zombie_move_speed_pre_jetgun_drag ) ) + { + self set_zombie_run_cycle( self.zombie_move_speed_pre_jetgun_drag ); + self.zombie_move_speed_pre_jetgun_drag = undefined; + } + else + self set_zombie_run_cycle(); + + if ( !( isdefined( self.isdog ) && self.isdog ) ) + self maps\mp\animscripts\zm_run::moverun(); + + if ( isdefined( self.was_traversing ) && self.was_traversing ) + { + self traversemode( "gravity" ); + self.a.nodeath = 0; + self maps\mp\animscripts\zm_run::needsupdate(); + + if ( !self.isdog ) + self maps\mp\animscripts\zm_run::moverun(); + + self.is_traversing = 0; + self notify( "zombie_end_traverse" ); + + if ( is_mature() ) + { + if ( isdefined( level._effect["zombie_guts_explosion"] ) ) + playfx( level._effect["zombie_guts_explosion"], self gettagorigin( "J_SpineLower" ) ); + } + + self.nodeathragdoll = 1; + self dodamage( self.health + 666, self.origin, self ); + } +} + +aiphysicstrace( start, end ) +{ + result = physicstrace( start, end, ( 0, 0, 0 ), ( 0, 0, 0 ), self ); + return result["position"]; +} + +zombie_drag_think() +{ + self endon( "death" ); + self endon( "flinging" ); + self endon( "grinding" ); + + while ( self zombie_should_stay_in_drag_state() ) + { + self._distance_to_jetgun_owner = distancesquared( self.origin, self.jetgun_owner.origin ); + jetgun_network_choke(); + + if ( self.zombie_move_speed == "sprint" || self._distance_to_jetgun_owner < level.jetgun_pulled_in_range ) + self jetgun_drag_set( "jetgun_sprint", "jetgun_walk_fast_crawl" ); + else if ( self._distance_to_jetgun_owner < level.jetgun_pulling_in_range ) + self jetgun_drag_set( "jetgun_walk_fast", "jetgun_walk_fast" ); + else if ( self._distance_to_jetgun_owner < level.jetgun_inner_range ) + self jetgun_drag_set( "jetgun_walk", "jetgun_walk_slow_crawl" ); + else if ( self._distance_to_jetgun_owner < level.jetgun_outer_edge ) + self jetgun_drag_set( "jetgun_walk_slow", "jetgun_walk_slow_crawl" ); + + wait 0.1; + } + + self thread zombie_exit_drag_state(); +} + +jetgun_drag_set( legsanim, crawlanim ) +{ + self endon( "death" ); + self.needs_run_update = 1; + + if ( self.has_legs ) + { + self._had_legs = 1; + self set_zombie_run_cycle( legsanim ); + } + else + { + self._had_legs = 0; + self set_zombie_run_cycle( crawlanim ); + } +/# + if ( self.jetgun_drag_state != legsanim ) + self thread jetgun_debug_print_on_ent( legsanim, ( 0, 0, 1 ) ); +#/ + self.jetgun_drag_state = legsanim; +} + +zombie_drag_radius() +{ +/# + self endon( "death_or_disconnect" ); + self endon( "weapon_change" ); + + while ( true ) + { + circle( self.origin, level.zombie_vars["jetgun_grind_range"], vectorscale( ( 1, 1, 1 ), 0.5 ) ); + circle( self.origin, level.zombie_vars["jetgun_drag_range"] / 8, ( 0, 0, 1 ) ); + circle( self.origin, level.zombie_vars["jetgun_drag_range"] / 4, ( 0, 1, 0 ) ); + circle( self.origin, level.zombie_vars["jetgun_drag_range"] / 2, ( 1, 0, 0 ) ); + circle( self.origin, level.zombie_vars["jetgun_drag_range"], ( 1, 0, 1 ) ); + wait 0.05; + } +#/ +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_riotshield.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_riotshield.gsc new file mode 100644 index 0000000..a1b71c9 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_riotshield.gsc @@ -0,0 +1,768 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_riotshield; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\animscripts\zm_death; +#include maps\mp\zombies\_zm_audio; + +init() +{ + maps\mp\zombies\_zm_riotshield::init(); + set_zombie_var( "riotshield_cylinder_radius", 360 ); + set_zombie_var( "riotshield_fling_range", 90 ); + set_zombie_var( "riotshield_gib_range", 90 ); + set_zombie_var( "riotshield_gib_damage", 75 ); + set_zombie_var( "riotshield_knockdown_range", 90 ); + set_zombie_var( "riotshield_knockdown_damage", 15 ); + set_zombie_var( "riotshield_hit_points", 2250 ); + set_zombie_var( "riotshield_fling_damage_shield", 100 ); + set_zombie_var( "riotshield_knockdown_damage_shield", 15 ); + level.riotshield_network_choke_count = 0; + level.riotshield_gib_refs = []; + level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "guts"; + level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "right_arm"; + level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "left_arm"; + level.riotshield_damage_callback = ::player_damage_shield; + level.deployed_riotshield_damage_callback = ::deployed_damage_shield; + level.transferriotshield = ::transferriotshield; + level.cantransferriotshield = ::cantransferriotshield; + maps\mp\zombies\_zm_spawner::register_zombie_damage_callback( ::riotshield_zombie_damage_response ); + maps\mp\zombies\_zm_equipment::register_equipment( "riotshield_zm", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_RIOTSHIELD_HOWTO", "riotshield_zm_icon", "riotshield", ::riotshield_activation_watcher_thread, undefined, ::dropshield, ::pickupshield ); + maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "riotshield", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING" ); + onplayerconnect_callback( ::onplayerconnect ); +} + +onplayerconnect() +{ + self.player_shield_reset_health = ::player_init_shield_health; + self.player_shield_apply_damage = ::player_damage_shield; + self.player_shield_reset_location = ::player_init_shield_location; + self thread watchriotshielduse(); + self thread watchriotshieldmelee(); + self thread player_watch_laststand(); +} + +dropshield() +{ + self.shield_placement = 0; + self maps\mp\zombies\_zm_riotshield::updateriotshieldmodel(); + item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "t6_wpn_zmb_shield_world", "riotshield_zm", self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), self.angles ); + + if ( isdefined( item ) ) + { + item.shielddamagetaken = self.shielddamagetaken; + item.original_owner = self; + item.owner = undefined; + item.name = level.riotshield_name; + item.isriotshield = 1; + item deployed_damage_shield( 0 ); + item setscriptmoverflag( 0 ); + item.requires_pickup = 1; + item thread watchtoofriendly( self ); + } + + self takeweapon( level.riotshield_name ); + return item; +} + +watchtoofriendly( player ) +{ + wait 1; + + if ( isdefined( self ) && isdefined( player ) && distance2dsquared( self.origin, player.origin ) < 36 ) + { + if ( isalive( player ) ) + player playlocalsound( level.zmb_laugh_alias ); + + player maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); + self deployed_damage_shield( 2000 ); + } +} + +pickupshield( item ) +{ + item.owner = self; + damage = item.shielddamagetaken; + damagemax = level.zombie_vars["riotshield_hit_points"]; + self.shielddamagetaken = damage; + self player_set_shield_health( damage, damagemax ); +} + +placeshield( origin, angles ) +{ + if ( self getcurrentweapon() != level.riotshield_name ) + { + self switchtoweapon( level.riotshield_name ); + + self waittill( "weapon_change" ); + } + + item = self maps\mp\zombies\_zm_riotshield::doriotshielddeploy( origin, angles ); + + if ( isdefined( item ) ) + { + item.origin = self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ); + item.angles = self.angles; + item.owner = self; + } + + return item; +} + +cantransferriotshield( fromplayer, toplayer ) +{ + if ( isdefined( toplayer.screecher_weapon ) ) + return false; + + if ( isdefined( toplayer.is_drinking ) && toplayer.is_drinking > 0 ) + return false; + + if ( toplayer maps\mp\zombies\_zm_laststand::player_is_in_laststand() || toplayer in_revive_trigger() ) + return false; + + if ( toplayer isthrowinggrenade() ) + return false; + + if ( fromplayer == toplayer ) + return true; + + if ( toplayer is_player_equipment( level.riotshield_name ) && toplayer.shield_placement != 3 ) + return false; + + if ( fromplayer.session_team != toplayer.session_team ) + return false; + + return true; +} + +transferriotshield( fromplayer, toplayer ) +{ + damage = fromplayer.shielddamagetaken; + toplayer player_take_riotshield(); + fromplayer player_take_riotshield(); + toplayer.shielddamagetaken = damage; + toplayer.shield_placement = 3; + toplayer.shield_damage_level = 0; + toplayer maps\mp\zombies\_zm_equipment::equipment_give( "riotshield_zm" ); + toplayer switchtoweapon( "riotshield_zm" ); + damagemax = level.zombie_vars["riotshield_hit_points"]; + toplayer player_set_shield_health( damage, damagemax ); +} + +player_take_riotshield() +{ + self notify( "destroy_riotshield" ); + + if ( self getcurrentweapon() == "riotshield_zm" ) + { + new_primary = ""; + + if ( isdefined( self.laststand ) && self.laststand ) + { + new_primary = self.laststandpistol; + self giveweapon( new_primary ); + } + else + { + primaryweapons = self getweaponslistprimaries(); + + for ( i = 0; i < primaryweapons.size; i++ ) + { + if ( primaryweapons[i] != "riotshield_zm" ) + { + new_primary = primaryweapons[i]; + break; + } + } + + if ( new_primary == "" ) + { + self maps\mp\zombies\_zm_weapons::give_fallback_weapon(); + new_primary = "zombie_fists_zm"; + } + } + + self switchtoweaponimmediate( new_primary ); + self playsound( "wpn_riotshield_zm_destroy" ); + + self waittill( "weapon_change" ); + } + + self maps\mp\zombies\_zm_riotshield::removeriotshield(); + self maps\mp\zombies\_zm_equipment::equipment_take( "riotshield_zm" ); + self.hasriotshield = 0; + self.hasriotshieldequipped = 0; +} + +player_watch_laststand() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "entering_last_stand" ); + + if ( self getcurrentweapon() == "riotshield_zm" ) + { + new_primary = self.laststandpistol; + self giveweapon( new_primary ); + self switchtoweaponimmediate( new_primary ); + } + } +} + +player_init_shield_health() +{ + retval = self.shielddamagetaken > 0; + self.shielddamagetaken = 0; + self.shield_damage_level = 0; + self maps\mp\zombies\_zm_riotshield::updateriotshieldmodel(); + return retval; +} + +player_init_shield_location() +{ + self.hasriotshield = 1; + self.hasriotshieldequipped = 0; + self.shield_placement = 2; + self maps\mp\zombies\_zm_riotshield::updateriotshieldmodel(); +} + +player_set_shield_health( damage, max_damage ) +{ + shieldhealth = int( 100 * ( max_damage - damage ) / max_damage ); + + if ( shieldhealth >= 50 ) + self.shield_damage_level = 0; + else if ( shieldhealth >= 25 ) + self.shield_damage_level = 2; + else + self.shield_damage_level = 3; + + self maps\mp\zombies\_zm_riotshield::updateriotshieldmodel(); +} + +deployed_set_shield_health( damage, max_damage ) +{ + shieldhealth = int( 100 * ( max_damage - damage ) / max_damage ); + + if ( shieldhealth >= 50 ) + self.shield_damage_level = 0; + else if ( shieldhealth >= 25 ) + self.shield_damage_level = 2; + else + self.shield_damage_level = 3; + + self maps\mp\zombies\_zm_riotshield::updatestandaloneriotshieldmodel(); +} + +player_damage_shield( idamage, bheld ) +{ + damagemax = level.zombie_vars["riotshield_hit_points"]; + + if ( !isdefined( self.shielddamagetaken ) ) + self.shielddamagetaken = 0; + + self.shielddamagetaken += idamage; + + if ( self.shielddamagetaken >= damagemax ) + { + if ( bheld || !isdefined( self.shield_ent ) ) + { + self playrumbleonentity( "damage_heavy" ); + earthquake( 1.0, 0.75, self.origin, 100 ); + } + else if ( isdefined( self.shield_ent ) ) + { + if ( is_true( self.shield_ent.destroy_begun ) ) + return; + + self.shield_ent.destroy_begun = 1; + shield_origin = self.shield_ent.origin; + level thread maps\mp\zombies\_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx ); + wait 1; + playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin ); + } + + self thread player_take_riotshield(); + } + else + { + if ( bheld ) + { + self playrumbleonentity( "damage_light" ); + earthquake( 0.5, 0.5, self.origin, 100 ); + } + + self player_set_shield_health( self.shielddamagetaken, damagemax ); + self playsound( "fly_riotshield_zm_impact_zombies" ); + } +} + +deployed_damage_shield( idamage ) +{ + damagemax = level.zombie_vars["riotshield_hit_points"]; + + if ( !isdefined( self.shielddamagetaken ) ) + self.shielddamagetaken = 0; + + self.shielddamagetaken += idamage; + + if ( self.shielddamagetaken >= damagemax ) + { + shield_origin = self.origin; + + if ( isdefined( self.stub ) ) + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub ); + + if ( isdefined( self.original_owner ) ) + self.original_owner maps\mp\zombies\_zm_equipment::equipment_take( "riotshield_zm" ); + + maps\mp\zombies\_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx ); + playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin ); + self_delete(); + } + else + self deployed_set_shield_health( self.shielddamagetaken, damagemax ); +} + +riotshield_activation_watcher_thread() +{ + self endon( "zombified" ); + self endon( "disconnect" ); + self endon( "riotshield_zm_taken" ); + + while ( true ) + self waittill_either( "riotshield_zm_activate", "riotshield_zm_deactivate" ); +} + +watchriotshielduse() +{ + self endon( "death" ); + self endon( "disconnect" ); + self.shielddamagetaken = 0; + self thread maps\mp\zombies\_zm_riotshield::trackriotshield(); + self thread maps\mp\zombies\_zm_riotshield::trackequipmentchange(); + self thread maps\mp\zombies\_zm_riotshield::watchshieldlaststand(); + self thread trackstuckzombies(); + + for (;;) + { + self waittill( "raise_riotshield" ); + + self thread maps\mp\zombies\_zm_riotshield::startriotshielddeploy(); + } +} + +watchriotshieldmelee() +{ + for (;;) + { + self waittill( "weapon_melee", weapon ); + + if ( weapon == level.riotshield_name ) + self riotshield_melee(); + } +} + +is_riotshield_damage( mod, player, amount ) +{ + if ( mod == "MOD_MELEE" && player hasweapon( level.riotshield_name ) && amount < 10 ) + return true; + + return false; +} + +riotshield_damage( amount ) +{ + +} + +riotshield_fling_zombie( player, fling_vec, index ) +{ + if ( !isdefined( self ) || !isalive( self ) ) + return; + + if ( isdefined( self.ignore_riotshield ) && self.ignore_riotshield ) + return; + + if ( isdefined( self.riotshield_fling_func ) ) + { + self [[ self.riotshield_fling_func ]]( player ); + return; + } + + damage = 2500; + self dodamage( damage, player.origin, player, player, "", "MOD_IMPACT" ); + + if ( self.health < 1 ) + { + self.riotshield_death = 1; + self startragdoll(); + self launchragdoll( fling_vec ); + } +} + +zombie_knockdown( player, gib ) +{ + damage = level.zombie_vars["riotshield_knockdown_damage"]; + + if ( isdefined( level.override_riotshield_damage_func ) ) + self [[ level.override_riotshield_damage_func ]]( player, gib ); + else + { + if ( gib ) + { + self.a.gib_ref = random( level.riotshield_gib_refs ); + self thread maps\mp\animscripts\zm_death::do_gib(); + } + + self dodamage( damage, player.origin, player ); + } +} + +riotshield_knockdown_zombie( player, gib ) +{ + self endon( "death" ); + playsoundatposition( "vox_riotshield_forcehit", self.origin ); + playsoundatposition( "wpn_riotshield_proj_impact", self.origin ); + + if ( !isdefined( self ) || !isalive( self ) ) + return; + + if ( isdefined( self.riotshield_knockdown_func ) ) + self [[ self.riotshield_knockdown_func ]]( player, gib ); + else + self zombie_knockdown( player, gib ); + + self dodamage( level.zombie_vars["riotshield_knockdown_damage"], player.origin, player ); + self playsound( "fly_riotshield_forcehit" ); +} + +riotshield_get_enemies_in_range() +{ + view_pos = self geteye(); + zombies = get_array_of_closest( view_pos, get_round_enemy_array(), undefined, undefined, 2 * level.zombie_vars["riotshield_knockdown_range"] ); + + if ( !isdefined( zombies ) ) + return; + + knockdown_range_squared = level.zombie_vars["riotshield_knockdown_range"] * level.zombie_vars["riotshield_knockdown_range"]; + gib_range_squared = level.zombie_vars["riotshield_gib_range"] * level.zombie_vars["riotshield_gib_range"]; + fling_range_squared = level.zombie_vars["riotshield_fling_range"] * level.zombie_vars["riotshield_fling_range"]; + cylinder_radius_squared = level.zombie_vars["riotshield_cylinder_radius"] * level.zombie_vars["riotshield_cylinder_radius"]; + forward_view_angles = self getweaponforwarddir(); + end_pos = view_pos + vectorscale( forward_view_angles, level.zombie_vars["riotshield_knockdown_range"] ); +/# + if ( 2 == getdvarint( _hash_BF480CE9 ) ) + { + near_circle_pos = view_pos + vectorscale( forward_view_angles, 2 ); + circle( near_circle_pos, level.zombie_vars["riotshield_cylinder_radius"], ( 1, 0, 0 ), 0, 0, 100 ); + line( near_circle_pos, end_pos, ( 0, 0, 1 ), 1, 0, 100 ); + circle( end_pos, level.zombie_vars["riotshield_cylinder_radius"], ( 1, 0, 0 ), 0, 0, 100 ); + } +#/ + for ( i = 0; i < zombies.size; i++ ) + { + if ( !isdefined( zombies[i] ) || !isalive( zombies[i] ) ) + continue; + + test_origin = zombies[i] getcentroid(); + test_range_squared = distancesquared( view_pos, test_origin ); + + if ( test_range_squared > knockdown_range_squared ) + { + zombies[i] riotshield_debug_print( "range", ( 1, 0, 0 ) ); + return; + } + + normal = vectornormalize( test_origin - view_pos ); + dot = vectordot( forward_view_angles, normal ); + + if ( 0 > dot ) + { + zombies[i] riotshield_debug_print( "dot", ( 1, 0, 0 ) ); + continue; + } + + radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin ); + + if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared ) + { + zombies[i] riotshield_debug_print( "cylinder", ( 1, 0, 0 ) ); + continue; + } + + if ( 0 == zombies[i] damageconetrace( view_pos, self ) ) + { + zombies[i] riotshield_debug_print( "cone", ( 1, 0, 0 ) ); + continue; + } + + if ( test_range_squared < fling_range_squared ) + { + level.riotshield_fling_enemies[level.riotshield_fling_enemies.size] = zombies[i]; + dist_mult = ( fling_range_squared - test_range_squared ) / fling_range_squared; + fling_vec = vectornormalize( test_origin - view_pos ); + + if ( 5000 < test_range_squared ) + fling_vec += vectornormalize( test_origin - radial_origin ); + + fling_vec = ( fling_vec[0], fling_vec[1], abs( fling_vec[2] ) ); + fling_vec = vectorscale( fling_vec, 100 + 100 * dist_mult ); + level.riotshield_fling_vecs[level.riotshield_fling_vecs.size] = fling_vec; + zombies[i] riotshield_debug_print( "fling", ( 0, 1, 0 ) ); + continue; + } + + level.riotshield_knockdown_enemies[level.riotshield_knockdown_enemies.size] = zombies[i]; + level.riotshield_knockdown_gib[level.riotshield_knockdown_gib.size] = 0; + zombies[i] riotshield_debug_print( "knockdown", ( 1, 1, 0 ) ); + } +} + +riotshield_network_choke() +{ + level.riotshield_network_choke_count++; + + if ( !( level.riotshield_network_choke_count % 10 ) ) + { + wait_network_frame(); + wait_network_frame(); + wait_network_frame(); + } +} + +riotshield_melee() +{ + if ( !isdefined( level.riotshield_knockdown_enemies ) ) + { + level.riotshield_knockdown_enemies = []; + level.riotshield_knockdown_gib = []; + level.riotshield_fling_enemies = []; + level.riotshield_fling_vecs = []; + } + + self riotshield_get_enemies_in_range(); + shield_damage = 0; + level.riotshield_network_choke_count = 0; + + for ( i = 0; i < level.riotshield_fling_enemies.size; i++ ) + { + riotshield_network_choke(); + + if ( isdefined( level.riotshield_fling_enemies[i] ) ) + { + level.riotshield_fling_enemies[i] thread riotshield_fling_zombie( self, level.riotshield_fling_vecs[i], i ); + shield_damage += level.zombie_vars["riotshield_fling_damage_shield"]; + } + } + + for ( i = 0; i < level.riotshield_knockdown_enemies.size; i++ ) + { + riotshield_network_choke(); + level.riotshield_knockdown_enemies[i] thread riotshield_knockdown_zombie( self, level.riotshield_knockdown_gib[i] ); + shield_damage += level.zombie_vars["riotshield_knockdown_damage_shield"]; + } + + level.riotshield_knockdown_enemies = []; + level.riotshield_knockdown_gib = []; + level.riotshield_fling_enemies = []; + level.riotshield_fling_vecs = []; + + if ( shield_damage ) + self player_damage_shield( shield_damage, 0 ); +} + +trackstuckzombies() +{ + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "deployed_riotshield" ); + + if ( isdefined( self.riotshieldentity ) ) + self thread watchstuckzombies(); + } +} + +attack_shield( shield ) +{ + self endon( "death" ); + shield.owner endon( "death" ); + shield.owner endon( "disconnect" ); + shield.owner endon( "start_riotshield_deploy" ); + shield.owner endon( "destroy_riotshield" ); + + if ( isdefined( self.doing_shield_attack ) && self.doing_shield_attack ) + return 0; + + self.old_origin = self.origin; + + if ( getdvar( _hash_B253DFE7 ) == "" ) + setdvar( "zombie_shield_attack_freq", "15" ); + + freq = getdvarint( _hash_B253DFE7 ); + self.doing_shield_attack = 1; + self.enemyoverride[0] = shield.origin; + self.enemyoverride[1] = shield; + wait( randomint( 100 ) / 100.0 ); + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "attack", self.animname ); + attackanim = "zm_riotshield_melee"; + + if ( !self.has_legs ) + attackanim += "_crawl"; + + self orientmode( "face point", shield.origin ); + self animscripted( self.origin, flat_angle( vectortoangles( shield.origin - self.origin ) ), attackanim ); + + if ( isdefined( shield.owner.player_shield_apply_damage ) ) + shield.owner [[ shield.owner.player_shield_apply_damage ]]( 100, 0 ); + else + shield.owner player_damage_shield( 100, 0 ); + + self thread attack_shield_stop( shield ); + wait( randomint( 100 ) / 100.0 ); + self.doing_shield_attack = 0; + self orientmode( "face default" ); +} + +attack_shield_stop( shield ) +{ + self notify( "attack_shield_stop" ); + self endon( "attack_shield_stop" ); + self endon( "death" ); + + shield waittill( "death" ); + + self stopanimscripted(); + + if ( isdefined( self.doing_shield_attack ) && self.doing_shield_attack ) + { + breachanim = "zm_riotshield_breakthrough"; + + if ( !self.has_legs ) + breachanim += "_crawl"; + + self animscripted( self.origin, flat_angle( self.angles ), breachanim ); + } +} + +window_notetracks( msg, player ) +{ + self endon( "death" ); + + while ( true ) + { + self waittill( msg, notetrack ); + + if ( notetrack == "end" ) + return; + + if ( notetrack == "fire" ) + player player_damage_shield( 100, 0 ); + } +} + +watchstuckzombies() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "start_riotshield_deploy" ); + self endon( "destroy_riotshield" ); + self endon( "deployed_riotshield" ); + level endon( "intermission" ); + self.riotshieldentity maps\mp\zombies\_zm_equipment::item_attract_zombies(); +} + +riotshield_active() +{ + return self maps\mp\zombies\_zm_equipment::is_equipment_active( "riotshield_zm" ); +} + +riotshield_debug_print( msg, color ) +{ +/# + if ( !getdvarint( _hash_BF480CE9 ) ) + return; + + if ( !isdefined( color ) ) + color = ( 1, 1, 1 ); + + print3d( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), msg, color, 1, 1, 40 ); +#/ +} + +shield_zombie_attract_func( poi ) +{ + +} + +shield_zombie_arrive_func( poi ) +{ + self endon( "death" ); + self endon( "zombie_acquire_enemy" ); + self endon( "path_timer_done" ); + + self waittill( "goal" ); + + if ( isdefined( poi.owner ) ) + { + poi.owner player_damage_shield( 100, 0 ); + + if ( isdefined( poi.owner.player_shield_apply_damage ) ) + poi.owner [[ poi.owner.player_shield_apply_damage ]]( 100, 0 ); + } +} + +createriotshieldattractor() +{ + self create_zombie_point_of_interest( 50, 8, 0, 1, ::shield_zombie_attract_func, ::shield_zombie_arrive_func ); + self thread create_zombie_point_of_interest_attractor_positions( 4, 15, 15 ); + return get_zombie_point_of_interest( self.origin ); +} + +riotshield_zombie_damage_response( mod, hit_location, hit_origin, player, amount ) +{ + if ( self is_riotshield_damage( mod, player, amount ) ) + { + self riotshield_damage( amount ); + return true; + } + + return false; +} + +watchriotshieldattractor() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "start_riotshield_deploy" ); + self endon( "destroy_riotshield" ); + self endon( "deployed_riotshield" ); + poi = self.riotshieldentity createriotshieldattractor(); +} + +trackriotshieldattractor() +{ + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "deployed_riotshield" ); + + self thread watchriotshieldattractor(); + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc new file mode 100644 index 0000000..956abc8 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc @@ -0,0 +1,123 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_melee_weapon; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_audio; + +init() +{ + registerclientfield( "toplayer", "tazer_flourish", 1, 1, "int" ); + register_melee_weapon_for_level( "tazer_knuckles_zm" ); + + if ( isdefined( level.tazer_cost ) ) + cost = level.tazer_cost; + else + cost = 6000; + + level.use_tazer_impact_fx = 0; + maps\mp\zombies\_zm_melee_weapon::init( "tazer_knuckles_zm", "zombie_tazer_flourish", "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", cost, "tazer_upgrade", &"ZOMBIE_WEAPON_TAZER_BUY", "tazerknuckles", ::tazer_flourish_fx ); + maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee" ); + maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee_upgraded" ); + maps\mp\zombies\_zm_spawner::add_cusom_zombie_spawn_logic( ::watch_bodily_functions ); + level._effect["fx_zmb_taser_vomit"] = loadfx( "maps/zombie/fx_zmb_taser_vomit" ); + level._effect["fx_zmb_taser_flourish"] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" ); + + if ( level.script != "zm_transit" ) + { + level._effect["fx_zmb_tazer_impact"] = loadfx( "weapon/taser/fx_taser_knuckles_impact_zmb" ); + level.use_tazer_impact_fx = 1; + } + + level.tazer_flourish_delay = 0.5; +} + +watch_bodily_functions() +{ + if ( isdefined( self.isscreecher ) && self.isscreecher || isdefined( self.is_avogadro ) && self.is_avogadro ) + return; + + while ( isdefined( self ) && isalive( self ) ) + { + self waittill( "damage", amount, attacker, direction_vec, point, type ); + + if ( !isdefined( self ) ) + return; + + if ( !isdefined( attacker ) || !isplayer( attacker ) ) + continue; + + if ( type != "MOD_MELEE" ) + continue; + + if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isdefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped ) + continue; + + ch = randomint( 100 ); + + if ( ch < 4 ) + playfxontag( level._effect["fx_zmb_taser_vomit"], self, "j_neck" ); + + if ( level.use_tazer_impact_fx ) + { + tags = []; + tags[0] = "J_Head"; + tags[1] = "J_Neck"; + playfxontag( level._effect["fx_zmb_tazer_impact"], self, random( tags ) ); + } + } +} + +onplayerconnect() +{ + self thread onplayerspawned(); +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread watchtazerknucklemelee(); + } +} + +watchtazerknucklemelee() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "weapon_melee", weapon ); + + if ( weapon == "tazer_knuckles_zm" ) + self tazerknuckle_melee(); + } +} + +tazerknuckle_melee() +{ + +} + +tazer_flourish_fx() +{ + self waittill( "weapon_change", newweapon ); + + if ( newweapon == "zombie_tazer_flourish" ) + { + self endon( "weapon_change" ); + wait( level.tazer_flourish_delay ); + self thread maps\mp\zombies\_zm_audio::playerexert( "hitmed" ); + self setclientfieldtoplayer( "tazer_flourish", 1 ); + wait_network_frame(); + self setclientfieldtoplayer( "tazer_flourish", 0 ); + } +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weapons.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weapons.gsc new file mode 100644 index 0000000..7ba8a05 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_weapons.gsc @@ -0,0 +1,2732 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\gametypes_zm\_weapons; +#include maps\mp\zombies\_zm_weap_claymore; +#include maps\mp\zombies\_zm_weap_ballistic_knife; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_melee_weapon; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_weap_cymbal_monkey; + +init() +{ +/# + println( "ZM >> init (_zm_weapons.gsc)" ); +#/ + init_weapons(); + init_weapon_upgrade(); + init_weapon_toggle(); + precacheshader( "minimap_icon_mystery_box" ); + precacheshader( "specialty_instakill_zombies" ); + precacheshader( "specialty_firesale_zombies" ); + precacheitem( "zombie_fists_zm" ); + level._weaponobjects_on_player_connect_override = ::weaponobjects_on_player_connect_override; + level._zombiemode_check_firesale_loc_valid_func = ::default_check_firesale_loc_valid_func; + level.missileentities = []; + setupretrievablehintstrings(); + level thread onplayerconnect(); +} + +setupretrievablehintstrings() +{ + maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "claymore", &"ZOMBIE_CLAYMORE_PICKUP" ); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread onplayerspawned(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread watchforgrenadeduds(); + self thread watchforgrenadelauncherduds(); + self.staticweaponsstarttime = gettime(); + } +} + +watchforgrenadeduds() +{ + self endon( "spawned_player" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "grenade_fire", grenade, weapname ); + + if ( !is_equipment( weapname ) && weapname != "claymore_zm" ) + { + grenade thread checkgrenadefordud( weapname, 1, self ); + grenade thread watchforscriptexplosion( weapname, 1, self ); + } + } +} + +watchforgrenadelauncherduds() +{ + self endon( "spawned_player" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "grenade_launcher_fire", grenade, weapname ); + + grenade thread checkgrenadefordud( weapname, 0, self ); + grenade thread watchforscriptexplosion( weapname, 0, self ); + } +} + +grenade_safe_to_throw( player, weapname ) +{ + if ( isdefined( level.grenade_safe_to_throw ) ) + return self [[ level.grenade_safe_to_throw ]]( player, weapname ); + + return 1; +} + +grenade_safe_to_bounce( player, weapname ) +{ + if ( isdefined( level.grenade_safe_to_bounce ) ) + return self [[ level.grenade_safe_to_bounce ]]( player, weapname ); + + return 1; +} + +makegrenadedudanddestroy() +{ + self endon( "death" ); + self notify( "grenade_dud" ); + self makegrenadedud(); + wait 3; + + if ( isdefined( self ) ) + self delete(); +} + +checkgrenadefordud( weapname, isthrowngrenade, player ) +{ + self endon( "death" ); + player endon( "zombify" ); + + if ( !self grenade_safe_to_throw( player, weapname ) ) + { + self thread makegrenadedudanddestroy(); + return; + } + + for (;;) + { + self waittill_any_timeout( 0.25, "grenade_bounce", "stationary" ); + + if ( !self grenade_safe_to_bounce( player, weapname ) ) + { + self thread makegrenadedudanddestroy(); + return; + } + } +} + +wait_explode() +{ + self endon( "grenade_dud" ); + self endon( "done" ); + + self waittill( "explode", position ); + + level.explode_position = position; + level.explode_position_valid = 1; + self notify( "done" ); +} + +wait_timeout( time ) +{ + self endon( "grenade_dud" ); + self endon( "done" ); + wait( time ); + self notify( "done" ); +} + +wait_for_explosion( time ) +{ + level.explode_position = ( 0, 0, 0 ); + level.explode_position_valid = 0; + self thread wait_explode(); + self thread wait_timeout( time ); + + self waittill( "done" ); + + self notify( "death_or_explode", level.explode_position_valid, level.explode_position ); +} + +watchforscriptexplosion( weapname, isthrowngrenade, player ) +{ + self endon( "grenade_dud" ); + + if ( is_lethal_grenade( weapname ) || is_grenade_launcher( weapname ) ) + { + self thread wait_for_explosion( 20 ); + + self waittill( "death_or_explode", exploded, position ); + + if ( exploded ) + level notify( "grenade_exploded", position, 256, 300, 75 ); + } +} + +get_nonalternate_weapon( altweapon ) +{ + if ( is_alt_weapon( altweapon ) ) + { + alt = weaponaltweaponname( altweapon ); + + if ( alt == "none" ) + { + primaryweapons = self getweaponslistprimaries(); + alt = primaryweapons[0]; + + foreach ( weapon in primaryweapons ) + { + if ( weaponaltweaponname( weapon ) == altweapon ) + { + alt = weapon; + break; + } + } + } + + return alt; + } + + return altweapon; +} + +switch_from_alt_weapon( current_weapon ) +{ + if ( is_alt_weapon( current_weapon ) ) + { + alt = weaponaltweaponname( current_weapon ); + + if ( alt == "none" ) + { + primaryweapons = self getweaponslistprimaries(); + alt = primaryweapons[0]; + + foreach ( weapon in primaryweapons ) + { + if ( weaponaltweaponname( weapon ) == current_weapon ) + { + alt = weapon; + break; + } + } + } + + self switchtoweaponimmediate( alt ); + self waittill_notify_or_timeout( "weapon_change_complete", 1 ); + return alt; + } + + return current_weapon; +} + +give_fallback_weapon() +{ + self giveweapon( "zombie_fists_zm" ); + self switchtoweapon( "zombie_fists_zm" ); +} + +take_fallback_weapon() +{ + if ( self hasweapon( "zombie_fists_zm" ) ) + self takeweapon( "zombie_fists_zm" ); +} + +switch_back_primary_weapon( oldprimary ) +{ + if ( isdefined( self.laststand ) && self.laststand ) + return; + + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( oldprimary ) && isinarray( primaryweapons, oldprimary ) ) + self switchtoweapon( oldprimary ); + else if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); +} + +add_retrievable_knife_init_name( name ) +{ + if ( !isdefined( level.retrievable_knife_init_names ) ) + level.retrievable_knife_init_names = []; + + level.retrievable_knife_init_names[level.retrievable_knife_init_names.size] = name; +} + +watchweaponusagezm() +{ + self endon( "death" ); + self endon( "disconnect" ); + level endon( "game_ended" ); + + for (;;) + { + self waittill( "weapon_fired", curweapon ); + + self.lastfiretime = gettime(); + self.hasdonecombat = 1; + + if ( isdefined( self.hitsthismag[curweapon] ) ) + self thread updatemagshots( curweapon ); + + switch ( weaponclass( curweapon ) ) + { + case "rifle": + if ( curweapon == "crossbow_explosive_mp" ) + { + level.globalcrossbowfired++; + self addweaponstat( curweapon, "shots", 1 ); + self thread begingrenadetracking(); + break; + } + case "spread": + case "smg": + case "pistolspread": + case "pistol spread": + case "pistol": + case "mg": + self trackweaponfire( curweapon ); + level.globalshotsfired++; + break; + case "rocketlauncher": + case "grenade": + if ( is_alt_weapon( curweapon ) ) + curweapon = weaponaltweaponname( curweapon ); + + self addweaponstat( curweapon, "shots", 1 ); + break; + default: + break; + } + + switch ( curweapon ) + { + case "mp40_blinged_mp": + case "minigun_mp": + case "m32_mp": + case "m220_tow_mp": + case "m202_flash_mp": + self.usedkillstreakweapon[curweapon] = 1; + break; + default: + break; + } + } +} + +trackweaponzm() +{ + self.currentweapon = self getcurrentweapon(); + self.currenttime = gettime(); + spawnid = getplayerspawnid( self ); + + while ( true ) + { + event = self waittill_any_return( "weapon_change", "death", "disconnect", "bled_out" ); + newtime = gettime(); + + if ( event == "weapon_change" ) + { + newweapon = self getcurrentweapon(); + + if ( newweapon != "none" && newweapon != self.currentweapon ) + { + updatelastheldweapontimingszm( newtime ); + self.currentweapon = newweapon; + self.currenttime = newtime; + } + } + else + { + if ( event != "disconnect" ) + updateweapontimingszm( newtime ); + + return; + } + } +} + +updatelastheldweapontimingszm( newtime ) +{ + if ( isdefined( self.currentweapon ) && isdefined( self.currenttime ) ) + { + curweapon = self.currentweapon; + totaltime = int( ( newtime - self.currenttime ) / 1000 ); + + if ( totaltime > 0 ) + { + if ( is_alt_weapon( curweapon ) ) + curweapon = weaponaltweaponname( curweapon ); + + self addweaponstat( curweapon, "timeUsed", totaltime ); + } + } +} + +updateweapontimingszm( newtime ) +{ + if ( self is_bot() ) + return; + + updatelastheldweapontimingszm( newtime ); + + if ( !isdefined( self.staticweaponsstarttime ) ) + return; + + totaltime = int( ( newtime - self.staticweaponsstarttime ) / 1000 ); + + if ( totaltime < 0 ) + return; + + self.staticweaponsstarttime = newtime; +} + +watchweaponchangezm() +{ + self endon( "death" ); + self endon( "disconnect" ); + self.lastdroppableweapon = self getcurrentweapon(); + self.hitsthismag = []; + weapon = self getcurrentweapon(); + + if ( isdefined( weapon ) && weapon != "none" && !isdefined( self.hitsthismag[weapon] ) ) + self.hitsthismag[weapon] = weaponclipsize( weapon ); + + while ( true ) + { + previous_weapon = self getcurrentweapon(); + + self waittill( "weapon_change", newweapon ); + + if ( maydropweapon( newweapon ) ) + self.lastdroppableweapon = newweapon; + + if ( newweapon != "none" ) + { + if ( !isdefined( self.hitsthismag[newweapon] ) ) + self.hitsthismag[newweapon] = weaponclipsize( newweapon ); + } + } +} + +weaponobjects_on_player_connect_override_internal() +{ + self maps\mp\gametypes_zm\_weaponobjects::createbasewatchers(); + self createclaymorewatcher_zm(); + + for ( i = 0; i < level.retrievable_knife_init_names.size; i++ ) + self createballisticknifewatcher_zm( level.retrievable_knife_init_names[i], level.retrievable_knife_init_names[i] + "_zm" ); + + self maps\mp\gametypes_zm\_weaponobjects::setupretrievablewatcher(); + + if ( !isdefined( self.weaponobjectwatcherarray ) ) + self.weaponobjectwatcherarray = []; + + self thread maps\mp\gametypes_zm\_weaponobjects::watchweaponobjectspawn(); + self thread maps\mp\gametypes_zm\_weaponobjects::watchweaponprojectileobjectspawn(); + self thread maps\mp\gametypes_zm\_weaponobjects::deleteweaponobjectson(); + self.concussionendtime = 0; + self.hasdonecombat = 0; + self.lastfiretime = 0; + self thread watchweaponusagezm(); + self thread maps\mp\gametypes_zm\_weapons::watchgrenadeusage(); + self thread maps\mp\gametypes_zm\_weapons::watchmissileusage(); + self thread watchweaponchangezm(); + self thread maps\mp\gametypes_zm\_weapons::watchturretuse(); + self thread trackweaponzm(); + self notify( "weapon_watchers_created" ); +} + +weaponobjects_on_player_connect_override() +{ + add_retrievable_knife_init_name( "knife_ballistic" ); + add_retrievable_knife_init_name( "knife_ballistic_upgraded" ); + onplayerconnect_callback( ::weaponobjects_on_player_connect_override_internal ); +} + +createclaymorewatcher_zm() +{ + watcher = self maps\mp\gametypes_zm\_weaponobjects::createuseweaponobjectwatcher( "claymore", "claymore_zm", self.team ); + watcher.onspawnretrievetriggers = maps\mp\zombies\_zm_weap_claymore::on_spawn_retrieve_trigger; + watcher.adjusttriggerorigin = maps\mp\zombies\_zm_weap_claymore::adjust_trigger_origin; + watcher.pickup = level.pickup_claymores; + watcher.pickup_trigger_listener = level.pickup_claymores_trigger_listener; + watcher.skip_weapon_object_damage = 1; + watcher.headicon = 0; + watcher.watchforfire = 1; + watcher.detonate = ::claymoredetonate; + watcher.ondamage = level.claymores_on_damage; +} + +createballisticknifewatcher_zm( name, weapon ) +{ + watcher = self maps\mp\gametypes_zm\_weaponobjects::createuseweaponobjectwatcher( name, weapon, self.team ); + watcher.onspawn = maps\mp\zombies\_zm_weap_ballistic_knife::on_spawn; + watcher.onspawnretrievetriggers = maps\mp\zombies\_zm_weap_ballistic_knife::on_spawn_retrieve_trigger; + watcher.storedifferentobject = 1; + watcher.headicon = 0; +} + +isempweapon( weaponname ) +{ + if ( isdefined( weaponname ) && ( weaponname == "emp_mp" || weaponname == "emp_grenade_mp" || weaponname == "emp_grenade_zm" ) ) + return true; + + return false; +} + +claymoredetonate( attacker, weaponname ) +{ + from_emp = isempweapon( weaponname ); + + if ( from_emp ) + { + self delete(); + return; + } + + if ( isdefined( attacker ) ) + self detonate( attacker ); + else if ( isdefined( self.owner ) && isplayer( self.owner ) ) + self detonate( self.owner ); + else + self detonate(); +} + +default_check_firesale_loc_valid_func() +{ + return 1; +} + +add_zombie_weapon( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp, ammo_cost, create_vox ) +{ + if ( isdefined( level.zombie_include_weapons ) && !isdefined( level.zombie_include_weapons[weapon_name] ) ) + return; + + table = "mp/zombiemode.csv"; + table_cost = tablelookup( table, 0, weapon_name, 1 ); + table_ammo_cost = tablelookup( table, 0, weapon_name, 2 ); + + if ( isdefined( table_cost ) && table_cost != "" ) + cost = round_up_to_ten( int( table_cost ) ); + + if ( isdefined( table_ammo_cost ) && table_ammo_cost != "" ) + ammo_cost = round_up_to_ten( int( table_ammo_cost ) ); + + precachestring( hint ); + struct = spawnstruct(); + + if ( !isdefined( level.zombie_weapons ) ) + level.zombie_weapons = []; + + if ( !isdefined( level.zombie_weapons_upgraded ) ) + level.zombie_weapons_upgraded = []; + + if ( isdefined( upgrade_name ) ) + level.zombie_weapons_upgraded[upgrade_name] = weapon_name; + + struct.weapon_name = weapon_name; + struct.upgrade_name = upgrade_name; + struct.weapon_classname = "weapon_" + weapon_name; + struct.hint = hint; + struct.cost = cost; + struct.vox = weaponvo; + struct.vox_response = weaponvoresp; +/# + println( "ZM >> Looking for weapon - " + weapon_name ); +#/ + struct.is_in_box = level.zombie_include_weapons[weapon_name]; + + if ( !isdefined( ammo_cost ) ) + ammo_cost = round_up_to_ten( int( cost * 0.5 ) ); + + struct.ammo_cost = ammo_cost; + level.zombie_weapons[weapon_name] = struct; + + if ( isdefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch && isdefined( upgrade_name ) ) + add_attachments( weapon_name, upgrade_name ); + + if ( isdefined( create_vox ) ) + level.vox maps\mp\zombies\_zm_audio::zmbvoxadd( "player", "weapon_pickup", weapon_name, weaponvo, undefined ); +/# + if ( isdefined( level.devgui_add_weapon ) ) + [[ level.devgui_add_weapon ]]( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp, ammo_cost ); +#/ +} + +add_attachments( weapon_name, upgrade_name ) +{ + table = "zm/pap_attach.csv"; + + if ( isdefined( level.weapon_attachment_table ) ) + table = level.weapon_attachment_table; + + row = tablelookuprownum( table, 0, upgrade_name ); + + if ( row > -1 ) + { + level.zombie_weapons[weapon_name].default_attachment = tablelookup( table, 0, upgrade_name, 1 ); + level.zombie_weapons[weapon_name].addon_attachments = []; + index = 2; + + for ( next_addon = tablelookup( table, 0, upgrade_name, index ); isdefined( next_addon ) && next_addon.size > 0; next_addon = tablelookup( table, 0, upgrade_name, index ) ) + { + level.zombie_weapons[weapon_name].addon_attachments[level.zombie_weapons[weapon_name].addon_attachments.size] = next_addon; + index++; + } + } +} + +default_weighting_func() +{ + return 1; +} + +default_tesla_weighting_func() +{ + num_to_add = 1; + + if ( isdefined( level.pulls_since_last_tesla_gun ) ) + { + if ( isdefined( level.player_drops_tesla_gun ) && level.player_drops_tesla_gun == 1 ) + num_to_add += int( 0.2 * level.zombie_include_weapons.size ); + + if ( !isdefined( level.player_seen_tesla_gun ) || level.player_seen_tesla_gun == 0 ) + { + if ( level.round_number > 10 ) + num_to_add += int( 0.2 * level.zombie_include_weapons.size ); + else if ( level.round_number > 5 ) + num_to_add += int( 0.15 * level.zombie_include_weapons.size ); + } + } + + return num_to_add; +} + +default_1st_move_weighting_func() +{ + if ( level.chest_moves > 0 ) + { + num_to_add = 1; + return num_to_add; + } + else + return 0; +} + +default_upgrade_weapon_weighting_func() +{ + if ( level.chest_moves > 1 ) + return true; + else + return false; +} + +default_cymbal_monkey_weighting_func() +{ + players = get_players(); + count = 0; + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] has_weapon_or_upgrade( "cymbal_monkey_zm" ) ) + count++; + } + + if ( count > 0 ) + return 1; + else if ( level.round_number < 10 ) + return 3; + else + return 5; +} + +is_weapon_included( weapon_name ) +{ + if ( !isdefined( level.zombie_weapons ) ) + return 0; + + return isdefined( level.zombie_weapons[weapon_name] ); +} + +is_weapon_or_base_included( weapon_name ) +{ + if ( !isdefined( level.zombie_weapons ) ) + return false; + + if ( isdefined( level.zombie_weapons[weapon_name] ) ) + return true; + + base = get_base_weapon_name( weapon_name, 1 ); + + if ( isdefined( level.zombie_weapons[base] ) ) + return true; + + return false; +} + +include_zombie_weapon( weapon_name, in_box, collector, weighting_func ) +{ + if ( !isdefined( level.zombie_include_weapons ) ) + level.zombie_include_weapons = []; + + if ( !isdefined( in_box ) ) + in_box = 1; +/# + println( "ZM >> Including weapon - " + weapon_name ); +#/ + level.zombie_include_weapons[weapon_name] = in_box; + precacheitem( weapon_name ); + + if ( !isdefined( weighting_func ) ) + level.weapon_weighting_funcs[weapon_name] = ::default_weighting_func; + else + level.weapon_weighting_funcs[weapon_name] = weighting_func; +} + +init_weapons() +{ + if ( isdefined( level._zombie_custom_add_weapons ) ) + [[ level._zombie_custom_add_weapons ]](); + + precachemodel( "zombie_teddybear" ); +} + +add_limited_weapon( weapon_name, amount ) +{ + if ( !isdefined( level.limited_weapons ) ) + level.limited_weapons = []; + + level.limited_weapons[weapon_name] = amount; +} + +limited_weapon_below_quota( weapon, ignore_player, pap_triggers ) +{ + if ( isdefined( level.limited_weapons[weapon] ) ) + { + if ( !isdefined( pap_triggers ) ) + { + if ( !isdefined( level.pap_triggers ) ) + pap_triggers = getentarray( "specialty_weapupgrade", "script_noteworthy" ); + else + pap_triggers = level.pap_triggers; + } + + if ( is_true( level.no_limited_weapons ) ) + return false; + + upgradedweapon = weapon; + + if ( isdefined( level.zombie_weapons[weapon] ) && isdefined( level.zombie_weapons[weapon].upgrade_name ) ) + upgradedweapon = level.zombie_weapons[weapon].upgrade_name; + + players = get_players(); + count = 0; + limit = level.limited_weapons[weapon]; + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( ignore_player ) && ignore_player == players[i] ) + continue; + + if ( players[i] has_weapon_or_upgrade( weapon ) ) + { + count++; + + if ( count >= limit ) + return false; + } + } + + for ( k = 0; k < pap_triggers.size; k++ ) + { + if ( isdefined( pap_triggers[k].current_weapon ) && ( pap_triggers[k].current_weapon == weapon || pap_triggers[k].current_weapon == upgradedweapon ) ) + { + count++; + + if ( count >= limit ) + return false; + } + } + + for ( chestindex = 0; chestindex < level.chests.size; chestindex++ ) + { + if ( isdefined( level.chests[chestindex].zbarrier.weapon_string ) && level.chests[chestindex].zbarrier.weapon_string == weapon ) + { + count++; + + if ( count >= limit ) + return false; + } + } + + if ( isdefined( level.custom_limited_weapon_checks ) ) + { + foreach ( check in level.custom_limited_weapon_checks ) + count += [[ check ]]( weapon ); + + if ( count >= limit ) + return false; + } + + if ( isdefined( level.random_weapon_powerups ) ) + { + for ( powerupindex = 0; powerupindex < level.random_weapon_powerups.size; powerupindex++ ) + { + if ( isdefined( level.random_weapon_powerups[powerupindex] ) && level.random_weapon_powerups[powerupindex].base_weapon == weapon ) + { + count++; + + if ( count >= limit ) + return false; + } + } + } + } + + return true; +} + +add_custom_limited_weapon_check( callback ) +{ + if ( !isdefined( level.custom_limited_weapon_checks ) ) + level.custom_limited_weapon_checks = []; + + level.custom_limited_weapon_checks[level.custom_limited_weapon_checks.size] = callback; +} + +add_weapon_to_content( weapon_name, package ) +{ + if ( !isdefined( level.content_weapons ) ) + level.content_weapons = []; + + level.content_weapons[weapon_name] = package; +} + +player_can_use_content( weapon ) +{ + if ( isdefined( level.content_weapons ) ) + { + if ( isdefined( level.content_weapons[weapon] ) ) + return self hasdlcavailable( level.content_weapons[weapon] ); + } + + return 1; +} + +init_spawnable_weapon_upgrade() +{ + spawn_list = []; + spawnable_weapon_spawns = getstructarray( "weapon_upgrade", "targetname" ); + spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "bowie_upgrade", "targetname" ), 1, 0 ); + spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "sickle_upgrade", "targetname" ), 1, 0 ); + spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "tazer_upgrade", "targetname" ), 1, 0 ); + spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "buildable_wallbuy", "targetname" ), 1, 0 ); + + if ( !is_true( level.headshots_only ) ) + spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "claymore_purchase", "targetname" ), 1, 0 ); + + match_string = ""; + location = level.scr_zm_map_start_location; + + if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) ) + location = level.default_start_location; + + match_string = level.scr_zm_ui_gametype; + + if ( "" != location ) + match_string = match_string + "_" + location; + + match_string_plus_space = " " + match_string; + + for ( i = 0; i < spawnable_weapon_spawns.size; i++ ) + { + spawnable_weapon = spawnable_weapon_spawns[i]; + + if ( isdefined( spawnable_weapon.zombie_weapon_upgrade ) && spawnable_weapon.zombie_weapon_upgrade == "sticky_grenade_zm" && is_true( level.headshots_only ) ) + continue; + + if ( !isdefined( spawnable_weapon.script_noteworthy ) || spawnable_weapon.script_noteworthy == "" ) + { + spawn_list[spawn_list.size] = spawnable_weapon; + continue; + } + + matches = strtok( spawnable_weapon.script_noteworthy, "," ); + + for ( j = 0; j < matches.size; j++ ) + { + if ( matches[j] == match_string || matches[j] == match_string_plus_space ) + spawn_list[spawn_list.size] = spawnable_weapon; + } + } + + tempmodel = spawn( "script_model", ( 0, 0, 0 ) ); + + for ( i = 0; i < spawn_list.size; i++ ) + { + clientfieldname = spawn_list[i].zombie_weapon_upgrade + "_" + spawn_list[i].origin; + numbits = 2; + + if ( isdefined( level._wallbuy_override_num_bits ) ) + numbits = level._wallbuy_override_num_bits; + + registerclientfield( "world", clientfieldname, 1, numbits, "int" ); + target_struct = getstruct( spawn_list[i].target, "targetname" ); + + if ( spawn_list[i].targetname == "buildable_wallbuy" ) + { + bits = 4; + + if ( isdefined( level.buildable_wallbuy_weapons ) ) + bits = getminbitcountfornum( level.buildable_wallbuy_weapons.size + 1 ); + + registerclientfield( "world", clientfieldname + "_idx", 12000, bits, "int" ); + spawn_list[i].clientfieldname = clientfieldname; + continue; + } + + precachemodel( target_struct.model ); + unitrigger_stub = spawnstruct(); + unitrigger_stub.origin = spawn_list[i].origin; + unitrigger_stub.angles = spawn_list[i].angles; + tempmodel.origin = spawn_list[i].origin; + tempmodel.angles = spawn_list[i].angles; + mins = undefined; + maxs = undefined; + absmins = undefined; + absmaxs = undefined; + tempmodel setmodel( target_struct.model ); + tempmodel useweaponhidetags( spawn_list[i].zombie_weapon_upgrade ); + mins = tempmodel getmins(); + maxs = tempmodel getmaxs(); + absmins = tempmodel getabsmins(); + absmaxs = tempmodel getabsmaxs(); + bounds = absmaxs - absmins; + unitrigger_stub.script_length = bounds[0] * 0.25; + unitrigger_stub.script_width = bounds[1]; + unitrigger_stub.script_height = bounds[2]; + unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * ( unitrigger_stub.script_length * 0.4 ); + unitrigger_stub.target = spawn_list[i].target; + unitrigger_stub.targetname = spawn_list[i].targetname; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + + if ( spawn_list[i].targetname == "weapon_upgrade" ) + { + unitrigger_stub.cost = get_weapon_cost( spawn_list[i].zombie_weapon_upgrade ); + + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + unitrigger_stub.hint_string = get_weapon_hint( spawn_list[i].zombie_weapon_upgrade ); + unitrigger_stub.hint_parm1 = unitrigger_stub.cost; + } + else + { + unitrigger_stub.hint_parm1 = get_weapon_display_name( spawn_list[i].zombie_weapon_upgrade ); + + if ( !isdefined( unitrigger_stub.hint_parm1 ) || unitrigger_stub.hint_parm1 == "" || unitrigger_stub.hint_parm1 == "none" ) + unitrigger_stub.hint_parm1 = "missing weapon name " + spawn_list[i].zombie_weapon_upgrade; + + unitrigger_stub.hint_parm2 = unitrigger_stub.cost; + unitrigger_stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + } + } + + unitrigger_stub.weapon_upgrade = spawn_list[i].zombie_weapon_upgrade; + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.require_look_at = 1; + + if ( isdefined( spawn_list[i].require_look_from ) && spawn_list[i].require_look_from ) + unitrigger_stub.require_look_from = 1; + + unitrigger_stub.zombie_weapon_upgrade = spawn_list[i].zombie_weapon_upgrade; + unitrigger_stub.clientfieldname = clientfieldname; + maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + + if ( is_melee_weapon( unitrigger_stub.zombie_weapon_upgrade ) ) + { + if ( unitrigger_stub.zombie_weapon_upgrade == "tazer_knuckles_zm" && isdefined( level.taser_trig_adjustment ) ) + unitrigger_stub.origin += level.taser_trig_adjustment; + + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think ); + } + else if ( unitrigger_stub.zombie_weapon_upgrade == "claymore_zm" ) + { + unitrigger_stub.prompt_and_visibility_func = maps\mp\zombies\_zm_weap_claymore::claymore_unitrigger_update_prompt; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, maps\mp\zombies\_zm_weap_claymore::buy_claymores ); + } + else + { + unitrigger_stub.prompt_and_visibility_func = ::wall_weapon_update_prompt; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think ); + } + + spawn_list[i].trigger_stub = unitrigger_stub; + } + + level._spawned_wallbuys = spawn_list; + tempmodel delete(); +} + +add_dynamic_wallbuy( weapon, wallbuy, pristine ) +{ + spawned_wallbuy = undefined; + + for ( i = 0; i < level._spawned_wallbuys.size; i++ ) + { + if ( level._spawned_wallbuys[i].target == wallbuy ) + { + spawned_wallbuy = level._spawned_wallbuys[i]; + break; + } + } + + if ( !isdefined( spawned_wallbuy ) ) + { +/# + assertmsg( "Cannot find dynamic wallbuy" ); +#/ + return; + } + + if ( isdefined( spawned_wallbuy.trigger_stub ) ) + { +/# + assertmsg( "Dynamic wallbuy already added" ); +#/ + return; + } + + target_struct = getstruct( wallbuy, "targetname" ); + wallmodel = spawn_weapon_model( weapon, undefined, target_struct.origin, target_struct.angles ); + clientfieldname = spawned_wallbuy.clientfieldname; + model = getweaponmodel( weapon ); + unitrigger_stub = spawnstruct(); + unitrigger_stub.origin = target_struct.origin; + unitrigger_stub.angles = target_struct.angles; + wallmodel.origin = target_struct.origin; + wallmodel.angles = target_struct.angles; + mins = undefined; + maxs = undefined; + absmins = undefined; + absmaxs = undefined; + wallmodel setmodel( model ); + wallmodel useweaponhidetags( weapon ); + mins = wallmodel getmins(); + maxs = wallmodel getmaxs(); + absmins = wallmodel getabsmins(); + absmaxs = wallmodel getabsmaxs(); + bounds = absmaxs - absmins; + unitrigger_stub.script_length = bounds[0] * 0.25; + unitrigger_stub.script_width = bounds[1]; + unitrigger_stub.script_height = bounds[2]; + unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * ( unitrigger_stub.script_length * 0.4 ); + unitrigger_stub.target = spawned_wallbuy.target; + unitrigger_stub.targetname = "weapon_upgrade"; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + unitrigger_stub.first_time_triggered = !pristine; + + if ( !is_melee_weapon( weapon ) ) + { + if ( pristine || weapon == "claymore_zm" ) + unitrigger_stub.hint_string = get_weapon_hint( weapon ); + else + unitrigger_stub.hint_string = get_weapon_hint_ammo(); + + unitrigger_stub.cost = get_weapon_cost( weapon ); + unitrigger_stub.hint_parm1 = unitrigger_stub.cost; + } + + unitrigger_stub.weapon_upgrade = weapon; + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.require_look_at = 1; + unitrigger_stub.zombie_weapon_upgrade = weapon; + unitrigger_stub.clientfieldname = clientfieldname; + unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + + if ( is_melee_weapon( weapon ) ) + { + if ( weapon == "tazer_knuckles_zm" && isdefined( level.taser_trig_adjustment ) ) + unitrigger_stub.origin += level.taser_trig_adjustment; + + maps\mp\zombies\_zm_melee_weapon::add_stub( unitrigger_stub, weapon ); + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, maps\mp\zombies\_zm_melee_weapon::melee_weapon_think ); + } + else if ( weapon == "claymore_zm" ) + { + unitrigger_stub.prompt_and_visibility_func = maps\mp\zombies\_zm_weap_claymore::claymore_unitrigger_update_prompt; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, maps\mp\zombies\_zm_weap_claymore::buy_claymores ); + } + else + { + unitrigger_stub.prompt_and_visibility_func = ::wall_weapon_update_prompt; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think ); + } + + spawned_wallbuy.trigger_stub = unitrigger_stub; + weaponidx = undefined; + + if ( isdefined( level.buildable_wallbuy_weapons ) ) + { + for ( i = 0; i < level.buildable_wallbuy_weapons.size; i++ ) + { + if ( weapon == level.buildable_wallbuy_weapons[i] ) + { + weaponidx = i; + break; + } + } + } + + if ( isdefined( weaponidx ) ) + { + level setclientfield( clientfieldname + "_idx", weaponidx + 1 ); + wallmodel delete(); + + if ( !pristine ) + level setclientfield( clientfieldname, 1 ); + } + else + { + level setclientfield( clientfieldname, 1 ); + wallmodel show(); + } +} + +wall_weapon_update_prompt( player ) +{ + weapon = self.stub.zombie_weapon_upgrade; + + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + player_has_weapon = player has_weapon_or_upgrade( weapon ); + + if ( !player_has_weapon && ( isdefined( level.weapons_using_ammo_sharing ) && level.weapons_using_ammo_sharing ) ) + { + shared_ammo_weapon = player get_shared_ammo_weapon( self.zombie_weapon_upgrade ); + + if ( isdefined( shared_ammo_weapon ) ) + { + weapon = shared_ammo_weapon; + player_has_weapon = 1; + } + } + + if ( !player_has_weapon ) + { + cost = get_weapon_cost( weapon ); + self.stub.hint_string = get_weapon_hint( weapon ); + self sethintstring( self.stub.hint_string, cost ); + } + else if ( isdefined( level.use_legacy_weapon_prompt_format ) && level.use_legacy_weapon_prompt_format ) + { + cost = get_weapon_cost( weapon ); + ammo_cost = get_ammo_cost( weapon ); + self.stub.hint_string = get_weapon_hint_ammo(); + self sethintstring( self.stub.hint_string, cost, ammo_cost ); + } + else + { + if ( player has_upgrade( weapon ) ) + ammo_cost = get_upgraded_ammo_cost( weapon ); + else + ammo_cost = get_ammo_cost( weapon ); + + self.stub.hint_string = &"ZOMBIE_WEAPONAMMOONLY"; + self sethintstring( self.stub.hint_string, ammo_cost ); + } + } + else if ( !player has_weapon_or_upgrade( weapon ) ) + { + string_override = 0; + + if ( isdefined( player.pers_upgrades_awarded["nube"] ) && player.pers_upgrades_awarded["nube"] ) + string_override = maps\mp\zombies\_zm_pers_upgrades_functions::pers_nube_ammo_hint_string( player, weapon ); + + if ( !string_override ) + { + cost = get_weapon_cost( weapon ); + weapon_display = get_weapon_display_name( weapon ); + + if ( !isdefined( weapon_display ) || weapon_display == "" || weapon_display == "none" ) + weapon_display = "missing weapon name " + weapon; + + self.stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + self sethintstring( self.stub.hint_string, weapon_display, cost ); + } + } + else + { + if ( player has_upgrade( weapon ) ) + ammo_cost = get_upgraded_ammo_cost( weapon ); + else + ammo_cost = get_ammo_cost( weapon ); + + self.stub.hint_string = &"ZOMBIE_WEAPONAMMOONLY"; + self sethintstring( self.stub.hint_string, ammo_cost ); + } + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) ) + { + self.stub.cursor_hint = "HINT_WEAPON"; + self.stub.cursor_hint_weapon = weapon; + self setcursorhint( self.stub.cursor_hint, self.stub.cursor_hint_weapon ); + } + else + { + self.stub.cursor_hint = "HINT_NOICON"; + self.stub.cursor_hint_weapon = undefined; + self setcursorhint( self.stub.cursor_hint ); + } + + return 1; +} + +reset_wallbuy_internal( set_hint_string ) +{ + if ( isdefined( self.first_time_triggered ) && self.first_time_triggered == 1 ) + { + self.first_time_triggered = 0; + + if ( isdefined( self.clientfieldname ) ) + level setclientfield( self.clientfieldname, 0 ); + + if ( set_hint_string ) + { + hint_string = get_weapon_hint( self.zombie_weapon_upgrade ); + cost = get_weapon_cost( self.zombie_weapon_upgrade ); + self sethintstring( hint_string, cost ); + } + } +} + +reset_wallbuys() +{ + weapon_spawns = []; + weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); + melee_and_grenade_spawns = []; + melee_and_grenade_spawns = getentarray( "bowie_upgrade", "targetname" ); + melee_and_grenade_spawns = arraycombine( melee_and_grenade_spawns, getentarray( "sickle_upgrade", "targetname" ), 1, 0 ); + melee_and_grenade_spawns = arraycombine( melee_and_grenade_spawns, getentarray( "tazer_upgrade", "targetname" ), 1, 0 ); + + if ( !is_true( level.headshots_only ) ) + melee_and_grenade_spawns = arraycombine( melee_and_grenade_spawns, getentarray( "claymore_purchase", "targetname" ), 1, 0 ); + + for ( i = 0; i < weapon_spawns.size; i++ ) + weapon_spawns[i] reset_wallbuy_internal( 1 ); + + for ( i = 0; i < melee_and_grenade_spawns.size; i++ ) + melee_and_grenade_spawns[i] reset_wallbuy_internal( 0 ); + + if ( isdefined( level._unitriggers ) ) + { + candidates = []; + + for ( i = 0; i < level._unitriggers.trigger_stubs.size; i++ ) + { + stub = level._unitriggers.trigger_stubs[i]; + tn = stub.targetname; + + if ( tn == "weapon_upgrade" || tn == "bowie_upgrade" || tn == "sickle_upgrade" || tn == "tazer_upgrade" || tn == "claymore_purchase" ) + { + stub.first_time_triggered = 0; + + if ( isdefined( stub.clientfieldname ) ) + level setclientfield( stub.clientfieldname, 0 ); + + if ( tn == "weapon_upgrade" ) + { + stub.hint_string = get_weapon_hint( stub.zombie_weapon_upgrade ); + stub.cost = get_weapon_cost( stub.zombie_weapon_upgrade ); + stub.hint_parm1 = stub.cost; + } + } + } + } +} + +init_weapon_upgrade() +{ + init_spawnable_weapon_upgrade(); + weapon_spawns = []; + weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); + + for ( i = 0; i < weapon_spawns.size; i++ ) + { + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + hint_string = get_weapon_hint( weapon_spawns[i].zombie_weapon_upgrade ); + cost = get_weapon_cost( weapon_spawns[i].zombie_weapon_upgrade ); + weapon_spawns[i] sethintstring( hint_string, cost ); + weapon_spawns[i] setcursorhint( "HINT_NOICON" ); + } + else + { + cost = get_weapon_cost( weapon_spawns[i].zombie_weapon_upgrade ); + weapon_display = get_weapon_display_name( weapon_spawns[i].zombie_weapon_upgrade ); + + if ( !isdefined( weapon_display ) || weapon_display == "" || weapon_display == "none" ) + weapon_display = "missing weapon name " + weapon_spawns[i].zombie_weapon_upgrade; + + hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + weapon_spawns[i] sethintstring( hint_string, weapon_display, cost ); + } + + weapon_spawns[i] usetriggerrequirelookat(); + weapon_spawns[i] thread weapon_spawn_think(); + model = getent( weapon_spawns[i].target, "targetname" ); + + if ( isdefined( model ) ) + { + model useweaponhidetags( weapon_spawns[i].zombie_weapon_upgrade ); + model hide(); + } + } +} + +init_weapon_toggle() +{ + if ( !isdefined( level.magic_box_weapon_toggle_init_callback ) ) + return; + + level.zombie_weapon_toggles = []; + level.zombie_weapon_toggle_max_active_count = 0; + level.zombie_weapon_toggle_active_count = 0; + precachestring( &"ZOMBIE_WEAPON_TOGGLE_DISABLED" ); + precachestring( &"ZOMBIE_WEAPON_TOGGLE_ACTIVATE" ); + precachestring( &"ZOMBIE_WEAPON_TOGGLE_DEACTIVATE" ); + precachestring( &"ZOMBIE_WEAPON_TOGGLE_ACQUIRED" ); + level.zombie_weapon_toggle_disabled_hint = &"ZOMBIE_WEAPON_TOGGLE_DISABLED"; + level.zombie_weapon_toggle_activate_hint = &"ZOMBIE_WEAPON_TOGGLE_ACTIVATE"; + level.zombie_weapon_toggle_deactivate_hint = &"ZOMBIE_WEAPON_TOGGLE_DEACTIVATE"; + level.zombie_weapon_toggle_acquired_hint = &"ZOMBIE_WEAPON_TOGGLE_ACQUIRED"; + precachemodel( "zombie_zapper_cagelight" ); + precachemodel( "zombie_zapper_cagelight_green" ); + precachemodel( "zombie_zapper_cagelight_red" ); + precachemodel( "zombie_zapper_cagelight_on" ); + level.zombie_weapon_toggle_disabled_light = "zombie_zapper_cagelight"; + level.zombie_weapon_toggle_active_light = "zombie_zapper_cagelight_green"; + level.zombie_weapon_toggle_inactive_light = "zombie_zapper_cagelight_red"; + level.zombie_weapon_toggle_acquired_light = "zombie_zapper_cagelight_on"; + weapon_toggle_ents = []; + weapon_toggle_ents = getentarray( "magic_box_weapon_toggle", "targetname" ); + + for ( i = 0; i < weapon_toggle_ents.size; i++ ) + { + struct = spawnstruct(); + struct.trigger = weapon_toggle_ents[i]; + struct.weapon_name = struct.trigger.script_string; + struct.upgrade_name = level.zombie_weapons[struct.trigger.script_string].upgrade_name; + struct.enabled = 0; + struct.active = 0; + struct.acquired = 0; + target_array = []; + target_array = getentarray( struct.trigger.target, "targetname" ); + + for ( j = 0; j < target_array.size; j++ ) + { + switch ( target_array[j].script_string ) + { + case "light": + struct.light = target_array[j]; + struct.light setmodel( level.zombie_weapon_toggle_disabled_light ); + break; + case "weapon": + struct.weapon_model = target_array[j]; + struct.weapon_model hide(); + break; + } + } + + struct.trigger sethintstring( level.zombie_weapon_toggle_disabled_hint ); + struct.trigger setcursorhint( "HINT_NOICON" ); + struct.trigger usetriggerrequirelookat(); + struct thread weapon_toggle_think(); + level.zombie_weapon_toggles[struct.weapon_name] = struct; + } + + level thread [[ level.magic_box_weapon_toggle_init_callback ]](); +} + +get_weapon_toggle( weapon_name ) +{ + if ( !isdefined( level.zombie_weapon_toggles ) ) + return undefined; + + if ( isdefined( level.zombie_weapon_toggles[weapon_name] ) ) + return level.zombie_weapon_toggles[weapon_name]; + + keys = getarraykeys( level.zombie_weapon_toggles ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( weapon_name == level.zombie_weapon_toggles[keys[i]].upgrade_name ) + return level.zombie_weapon_toggles[keys[i]]; + } + + return undefined; +} + +is_weapon_toggle( weapon_name ) +{ + return isdefined( get_weapon_toggle( weapon_name ) ); +} + +disable_weapon_toggle( weapon_name ) +{ + toggle = get_weapon_toggle( weapon_name ); + + if ( !isdefined( toggle ) ) + return; + + if ( toggle.active ) + level.zombie_weapon_toggle_active_count--; + + toggle.enabled = 0; + toggle.active = 0; + toggle.light setmodel( level.zombie_weapon_toggle_disabled_light ); + toggle.weapon_model hide(); + toggle.trigger sethintstring( level.zombie_weapon_toggle_disabled_hint ); +} + +enable_weapon_toggle( weapon_name ) +{ + toggle = get_weapon_toggle( weapon_name ); + + if ( !isdefined( toggle ) ) + return; + + toggle.enabled = 1; + toggle.weapon_model show(); + toggle.weapon_model useweaponhidetags( weapon_name ); + deactivate_weapon_toggle( weapon_name ); +} + +activate_weapon_toggle( weapon_name, trig_for_vox ) +{ + if ( level.zombie_weapon_toggle_active_count >= level.zombie_weapon_toggle_max_active_count ) + { + if ( isdefined( trig_for_vox ) ) + trig_for_vox thread maps\mp\zombies\_zm_audio::weapon_toggle_vox( "max" ); + + return; + } + + toggle = get_weapon_toggle( weapon_name ); + + if ( !isdefined( toggle ) ) + return; + + if ( isdefined( trig_for_vox ) ) + trig_for_vox thread maps\mp\zombies\_zm_audio::weapon_toggle_vox( "activate", weapon_name ); + + level.zombie_weapon_toggle_active_count++; + toggle.active = 1; + toggle.light setmodel( level.zombie_weapon_toggle_active_light ); + toggle.trigger sethintstring( level.zombie_weapon_toggle_deactivate_hint ); +} + +deactivate_weapon_toggle( weapon_name, trig_for_vox ) +{ + toggle = get_weapon_toggle( weapon_name ); + + if ( !isdefined( toggle ) ) + return; + + if ( isdefined( trig_for_vox ) ) + trig_for_vox thread maps\mp\zombies\_zm_audio::weapon_toggle_vox( "deactivate", weapon_name ); + + if ( toggle.active ) + level.zombie_weapon_toggle_active_count--; + + toggle.active = 0; + toggle.light setmodel( level.zombie_weapon_toggle_inactive_light ); + toggle.trigger sethintstring( level.zombie_weapon_toggle_activate_hint ); +} + +acquire_weapon_toggle( weapon_name, player ) +{ + toggle = get_weapon_toggle( weapon_name ); + + if ( !isdefined( toggle ) ) + return; + + if ( !toggle.active || toggle.acquired ) + return; + + toggle.acquired = 1; + toggle.light setmodel( level.zombie_weapon_toggle_acquired_light ); + toggle.trigger sethintstring( level.zombie_weapon_toggle_acquired_hint ); + toggle thread unacquire_weapon_toggle_on_death_or_disconnect_thread( player ); +} + +unacquire_weapon_toggle_on_death_or_disconnect_thread( player ) +{ + self notify( "end_unacquire_weapon_thread" ); + self endon( "end_unacquire_weapon_thread" ); + player waittill_any( "spawned_spectator", "disconnect" ); + unacquire_weapon_toggle( self.weapon_name ); +} + +unacquire_weapon_toggle( weapon_name ) +{ + toggle = get_weapon_toggle( weapon_name ); + + if ( !isdefined( toggle ) ) + return; + + if ( !toggle.active || !toggle.acquired ) + return; + + toggle.acquired = 0; + toggle.light setmodel( level.zombie_weapon_toggle_active_light ); + toggle.trigger sethintstring( level.zombie_weapon_toggle_deactivate_hint ); + toggle notify( "end_unacquire_weapon_thread" ); +} + +weapon_toggle_think() +{ + for (;;) + { + self.trigger waittill( "trigger", player ); + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + if ( !self.enabled || self.acquired ) + { + self.trigger thread maps\mp\zombies\_zm_audio::weapon_toggle_vox( "max" ); + continue; + } + + if ( !self.active ) + { + activate_weapon_toggle( self.weapon_name, self.trigger ); + continue; + } + + deactivate_weapon_toggle( self.weapon_name, self.trigger ); + } +} + +get_weapon_hint( weapon_name ) +{ + assert( isdefined( level.zombie_weapons[weapon_name] ), weapon_name + " was not included or is not part of the zombie weapon list." ); + return level.zombie_weapons[weapon_name].hint; +} + +get_weapon_cost( weapon_name ) +{ + assert( isdefined( level.zombie_weapons[weapon_name] ), weapon_name + " was not included or is not part of the zombie weapon list." ); + return level.zombie_weapons[weapon_name].cost; +} + +get_ammo_cost( weapon_name ) +{ + assert( isdefined( level.zombie_weapons[weapon_name] ), weapon_name + " was not included or is not part of the zombie weapon list." ); + return level.zombie_weapons[weapon_name].ammo_cost; +} + +get_upgraded_ammo_cost( weapon_name ) +{ + assert( isdefined( level.zombie_weapons[weapon_name] ), weapon_name + " was not included or is not part of the zombie weapon list." ); + + if ( isdefined( level.zombie_weapons[weapon_name].upgraded_ammo_cost ) ) + return level.zombie_weapons[weapon_name].upgraded_ammo_cost; + + return 4500; +} + +get_weapon_display_name( weapon_name ) +{ + weapon_display = getweapondisplayname( weapon_name ); + + if ( !isdefined( weapon_display ) || weapon_display == "" || weapon_display == "none" ) + { + weapon_display = &"MPUI_NONE"; +/# + weapon_display = "missing weapon name " + weapon_name; +#/ + } + + return weapon_display; +} + +get_is_in_box( weapon_name ) +{ + assert( isdefined( level.zombie_weapons[weapon_name] ), weapon_name + " was not included or is not part of the zombie weapon list." ); + return level.zombie_weapons[weapon_name].is_in_box; +} + +weapon_supports_default_attachment( weaponname ) +{ + weaponname = get_base_weapon_name( weaponname ); + + if ( isdefined( weaponname ) ) + attachment = level.zombie_weapons[weaponname].default_attachment; + + return isdefined( attachment ); +} + +default_attachment( weaponname ) +{ + weaponname = get_base_weapon_name( weaponname ); + + if ( isdefined( weaponname ) ) + attachment = level.zombie_weapons[weaponname].default_attachment; + + if ( isdefined( attachment ) ) + return attachment; + else + return "none"; +} + +weapon_supports_attachments( weaponname ) +{ + weaponname = get_base_weapon_name( weaponname ); + + if ( isdefined( weaponname ) ) + attachments = level.zombie_weapons[weaponname].addon_attachments; + + return isdefined( attachments ) && attachments.size > 1; +} + +random_attachment( weaponname, exclude ) +{ + lo = 0; + + if ( isdefined( level.zombie_weapons[weaponname].addon_attachments ) && level.zombie_weapons[weaponname].addon_attachments.size > 0 ) + attachments = level.zombie_weapons[weaponname].addon_attachments; + else + { + attachments = getweaponsupportedattachments( weaponname ); + lo = 1; + } + + minatt = lo; + + if ( isdefined( exclude ) && exclude != "none" ) + minatt = lo + 1; + + if ( attachments.size > minatt ) + { + while ( true ) + { + idx = randomint( attachments.size - lo ) + lo; + + if ( !isdefined( exclude ) || attachments[idx] != exclude ) + return attachments[idx]; + } + } + + return "none"; +} + +get_base_name( weaponname ) +{ + split = strtok( weaponname, "+" ); + + if ( split.size > 1 ) + return split[0]; + + return weaponname; +} + +get_attachment_name( weaponname, att_id ) +{ + split = strtok( weaponname, "+" ); + + if ( isdefined( att_id ) ) + { + attachment = att_id + 1; + + if ( split.size > attachment ) + return split[attachment]; + } + else if ( split.size > 1 ) + { + att = split[1]; + + for ( idx = 2; split.size > idx; idx++ ) + att = att + "+" + split[idx]; + + return att; + } + + return undefined; +} + +get_attachment_index( weapon ) +{ + att = get_attachment_name( weapon ); + + if ( att == "none" ) + return -1; + + base = get_base_name( weapon ); + + if ( att == level.zombie_weapons[base].default_attachment ) + return 0; + + if ( isdefined( level.zombie_weapons[base].addon_attachments ) ) + { + for ( i = 0; i < level.zombie_weapons[base].addon_attachments.size; i++ ) + { + if ( level.zombie_weapons[base].addon_attachments[i] == att ) + return i + 1; + } + } +/# + println( "ZM WEAPON ERROR: Unrecognized attachment in weapon " + weapon ); +#/ + return -1; +} + +weapon_supports_this_attachment( weapon, att ) +{ + base = get_base_name( weapon ); + + if ( att == level.zombie_weapons[base].default_attachment ) + return true; + + if ( isdefined( level.zombie_weapons[base].addon_attachments ) ) + { + for ( i = 0; i < level.zombie_weapons[base].addon_attachments.size; i++ ) + { + if ( level.zombie_weapons[base].addon_attachments[i] == att ) + return true; + } + } + + return false; +} + +has_attachment( weaponname, att ) +{ + split = strtok( weaponname, "+" ); + idx = 1; + + while ( split.size > idx ) + { + if ( att == split[idx] ) + return true; + } + + return false; +} + +get_base_weapon_name( upgradedweaponname, base_if_not_upgraded ) +{ + if ( !isdefined( upgradedweaponname ) || upgradedweaponname == "" ) + return undefined; + + upgradedweaponname = tolower( upgradedweaponname ); + upgradedweaponname = get_base_name( upgradedweaponname ); + + if ( isdefined( level.zombie_weapons_upgraded[upgradedweaponname] ) ) + return level.zombie_weapons_upgraded[upgradedweaponname]; + + if ( isdefined( base_if_not_upgraded ) && base_if_not_upgraded ) + return upgradedweaponname; + + return undefined; +} + +get_upgrade_weapon( weaponname, add_attachment ) +{ + rootweaponname = tolower( weaponname ); + rootweaponname = get_base_name( rootweaponname ); + baseweaponname = get_base_weapon_name( rootweaponname, 1 ); + newweapon = rootweaponname; + + if ( !is_weapon_upgraded( rootweaponname ) ) + newweapon = level.zombie_weapons[rootweaponname].upgrade_name; + + if ( isdefined( add_attachment ) && add_attachment && ( isdefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) ) + { + oldatt = get_attachment_name( weaponname ); + att = random_attachment( baseweaponname, oldatt ); + newweapon = newweapon + "+" + att; + } + else if ( isdefined( level.zombie_weapons[rootweaponname] ) && isdefined( level.zombie_weapons[rootweaponname].default_attachment ) ) + { + att = level.zombie_weapons[rootweaponname].default_attachment; + newweapon = newweapon + "+" + att; + } + + return newweapon; +} + +can_upgrade_weapon( weaponname ) +{ + if ( !isdefined( weaponname ) || weaponname == "" || weaponname == "zombie_fists_zm" ) + return 0; + + weaponname = tolower( weaponname ); + weaponname = get_base_name( weaponname ); + + if ( !is_weapon_upgraded( weaponname ) ) + return isdefined( level.zombie_weapons[weaponname].upgrade_name ); + + if ( isdefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch && weapon_supports_attachments( weaponname ) ) + return 1; + + return 0; +} + +will_upgrade_weapon_as_attachment( weaponname ) +{ + if ( !isdefined( weaponname ) || weaponname == "" || weaponname == "zombie_fists_zm" ) + return false; + + weaponname = tolower( weaponname ); + weaponname = get_base_name( weaponname ); + + if ( !is_weapon_upgraded( weaponname ) ) + return false; + + if ( isdefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch && weapon_supports_attachments( weaponname ) ) + return true; + + return false; +} + +is_weapon_upgraded( weaponname ) +{ + if ( !isdefined( weaponname ) || weaponname == "" || weaponname == "zombie_fists_zm" ) + return false; + + weaponname = tolower( weaponname ); + weaponname = get_base_name( weaponname ); + + if ( isdefined( level.zombie_weapons_upgraded[weaponname] ) ) + return true; + + return false; +} + +get_weapon_with_attachments( weaponname ) +{ + if ( self hasweapon( weaponname ) ) + return weaponname; + + if ( isdefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) + { + weaponname = tolower( weaponname ); + weaponname = get_base_name( weaponname ); + weapons = self getweaponslist( 1 ); + + foreach ( weapon in weapons ) + { + weapon = tolower( weapon ); + weapon_base = get_base_name( weapon ); + + if ( weaponname == weapon_base ) + return weapon; + } + } + + return undefined; +} + +has_weapon_or_attachments( weaponname ) +{ + if ( self hasweapon( weaponname ) ) + return true; + + if ( isdefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) + { + weaponname = tolower( weaponname ); + weaponname = get_base_name( weaponname ); + weapons = self getweaponslist( 1 ); + + foreach ( weapon in weapons ) + { + weapon = tolower( weapon ); + weapon = get_base_name( weapon ); + + if ( weaponname == weapon ) + return true; + } + } + + return false; +} + +has_upgrade( weaponname ) +{ + weaponname = get_base_name( weaponname ); + has_upgrade = 0; + + if ( isdefined( level.zombie_weapons[weaponname] ) && isdefined( level.zombie_weapons[weaponname].upgrade_name ) ) + has_upgrade = self has_weapon_or_attachments( level.zombie_weapons[weaponname].upgrade_name ); + + if ( !has_upgrade && "knife_ballistic_zm" == weaponname ) + has_weapon = self maps\mp\zombies\_zm_melee_weapon::has_upgraded_ballistic_knife(); + + return has_upgrade; +} + +has_weapon_or_upgrade( weaponname ) +{ + weaponname = get_base_name( weaponname ); + upgradedweaponname = weaponname; + + if ( isdefined( level.zombie_weapons[weaponname] ) && isdefined( level.zombie_weapons[weaponname].upgrade_name ) ) + upgradedweaponname = level.zombie_weapons[weaponname].upgrade_name; + + has_weapon = 0; + + if ( isdefined( level.zombie_weapons[weaponname] ) ) + has_weapon = self has_weapon_or_attachments( weaponname ) || self has_upgrade( weaponname ); + + if ( !has_weapon && "knife_ballistic_zm" == weaponname ) + has_weapon = self maps\mp\zombies\_zm_melee_weapon::has_any_ballistic_knife(); + + if ( !has_weapon && is_equipment( weaponname ) ) + has_weapon = self is_equipment_active( weaponname ); + + return has_weapon; +} + +add_shared_ammo_weapon( str_weapon, str_base_weapon ) +{ + level.zombie_weapons[str_weapon].shared_ammo_weapon = str_base_weapon; +} + +get_shared_ammo_weapon( base_weapon ) +{ + base_weapon = get_base_name( base_weapon ); + weapons = self getweaponslist( 1 ); + + foreach ( weapon in weapons ) + { + weapon = tolower( weapon ); + weapon = get_base_name( weapon ); + + if ( !isdefined( level.zombie_weapons[weapon] ) && isdefined( level.zombie_weapons_upgraded[weapon] ) ) + weapon = level.zombie_weapons_upgraded[weapon]; + + if ( isdefined( level.zombie_weapons[weapon] ) && isdefined( level.zombie_weapons[weapon].shared_ammo_weapon ) && level.zombie_weapons[weapon].shared_ammo_weapon == base_weapon ) + return weapon; + } + + return undefined; +} + +get_player_weapon_with_same_base( weaponname ) +{ + weaponname = tolower( weaponname ); + weaponname = get_base_name( weaponname ); + retweapon = get_weapon_with_attachments( weaponname ); + + if ( !isdefined( retweapon ) ) + { + if ( isdefined( level.zombie_weapons[weaponname] ) ) + retweapon = get_weapon_with_attachments( level.zombie_weapons[weaponname].upgrade_name ); + else if ( isdefined( level.zombie_weapons_upgraded[weaponname] ) ) + return get_weapon_with_attachments( level.zombie_weapons_upgraded[weaponname] ); + } + + return retweapon; +} + +get_weapon_hint_ammo() +{ + if ( isdefined( level.has_pack_a_punch ) && !level.has_pack_a_punch ) + return &"ZOMBIE_WEAPONCOSTAMMO"; + else + return &"ZOMBIE_WEAPONCOSTAMMO_UPGRADE"; +} + +weapon_set_first_time_hint( cost, ammo_cost ) +{ + self sethintstring( get_weapon_hint_ammo(), cost, ammo_cost ); +} + +weapon_spawn_think() +{ + cost = get_weapon_cost( self.zombie_weapon_upgrade ); + ammo_cost = get_ammo_cost( self.zombie_weapon_upgrade ); + is_grenade = weapontype( self.zombie_weapon_upgrade ) == "grenade"; + shared_ammo_weapon = undefined; + second_endon = undefined; + + if ( isdefined( self.stub ) ) + { + second_endon = "kill_trigger"; + self.first_time_triggered = self.stub.first_time_triggered; + } + + if ( isdefined( self.stub ) && ( isdefined( self.stub.trigger_per_player ) && self.stub.trigger_per_player ) ) + self thread decide_hide_show_hint( "stop_hint_logic", second_endon, self.parent_player ); + else + self thread decide_hide_show_hint( "stop_hint_logic", second_endon ); + + if ( is_grenade ) + { + self.first_time_triggered = 0; + hint = get_weapon_hint( self.zombie_weapon_upgrade ); + self sethintstring( hint, cost ); + } + else if ( !isdefined( self.first_time_triggered ) ) + { + self.first_time_triggered = 0; + + if ( isdefined( self.stub ) ) + self.stub.first_time_triggered = 0; + } + else if ( self.first_time_triggered ) + { + if ( isdefined( level.use_legacy_weapon_prompt_format ) && level.use_legacy_weapon_prompt_format ) + self weapon_set_first_time_hint( cost, get_ammo_cost( self.zombie_weapon_upgrade ) ); + } + + for (;;) + { + self waittill( "trigger", player ); + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + if ( !player can_buy_weapon() ) + { + wait 0.1; + continue; + } + + if ( isdefined( self.stub ) && ( isdefined( self.stub.require_look_from ) && self.stub.require_look_from ) ) + { + toplayer = player get_eye() - self.origin; + forward = -1 * anglestoright( self.angles ); + dot = vectordot( toplayer, forward ); + + if ( dot < 0 ) + continue; + } + + if ( player has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + player_has_weapon = player has_weapon_or_upgrade( self.zombie_weapon_upgrade ); + + if ( !player_has_weapon && ( isdefined( level.weapons_using_ammo_sharing ) && level.weapons_using_ammo_sharing ) ) + { + shared_ammo_weapon = player get_shared_ammo_weapon( self.zombie_weapon_upgrade ); + + if ( isdefined( shared_ammo_weapon ) ) + player_has_weapon = 1; + } + + if ( isdefined( level.pers_upgrade_nube ) && level.pers_upgrade_nube ) + player_has_weapon = maps\mp\zombies\_zm_pers_upgrades_functions::pers_nube_should_we_give_raygun( player_has_weapon, player, self.zombie_weapon_upgrade ); + + cost = get_weapon_cost( self.zombie_weapon_upgrade ); + + if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) + cost = int( cost / 2 ); + + if ( !player_has_weapon ) + { + if ( player.score >= cost ) + { + if ( self.first_time_triggered == 0 ) + self show_all_weapon_buys( player, cost, ammo_cost, is_grenade ); + + player maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 ); + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, self.zombie_weapon_upgrade, self.origin, "weapon" ); + level notify( "weapon_bought", player, self.zombie_weapon_upgrade ); + + if ( self.zombie_weapon_upgrade == "riotshield_zm" ) + { + player maps\mp\zombies\_zm_equipment::equipment_give( "riotshield_zm" ); + + if ( isdefined( player.player_shield_reset_health ) ) + player [[ player.player_shield_reset_health ]](); + } + else if ( self.zombie_weapon_upgrade == "jetgun_zm" ) + player maps\mp\zombies\_zm_equipment::equipment_give( "jetgun_zm" ); + else + { + if ( is_lethal_grenade( self.zombie_weapon_upgrade ) ) + { + player takeweapon( player get_player_lethal_grenade() ); + player set_player_lethal_grenade( self.zombie_weapon_upgrade ); + } + + str_weapon = self.zombie_weapon_upgrade; + + if ( isdefined( level.pers_upgrade_nube ) && level.pers_upgrade_nube ) + str_weapon = maps\mp\zombies\_zm_pers_upgrades_functions::pers_nube_weapon_upgrade_check( player, str_weapon ); + + player weapon_give( str_weapon ); + } + + player maps\mp\zombies\_zm_stats::increment_client_stat( "wallbuy_weapons_purchased" ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "wallbuy_weapons_purchased" ); + } + else + { + play_sound_on_ent( "no_purchase" ); + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); + } + } + else + { + str_weapon = self.zombie_weapon_upgrade; + + if ( isdefined( shared_ammo_weapon ) ) + str_weapon = shared_ammo_weapon; + + if ( isdefined( level.pers_upgrade_nube ) && level.pers_upgrade_nube ) + str_weapon = maps\mp\zombies\_zm_pers_upgrades_functions::pers_nube_weapon_ammo_check( player, str_weapon ); + + if ( isdefined( self.hacked ) && self.hacked ) + { + if ( !player has_upgrade( str_weapon ) ) + ammo_cost = 4500; + else + ammo_cost = get_ammo_cost( str_weapon ); + } + else if ( player has_upgrade( str_weapon ) ) + ammo_cost = 4500; + else + ammo_cost = get_ammo_cost( str_weapon ); + + if ( isdefined( player.pers_upgrades_awarded["nube"] ) && player.pers_upgrades_awarded["nube"] ) + ammo_cost = maps\mp\zombies\_zm_pers_upgrades_functions::pers_nube_override_ammo_cost( player, self.zombie_weapon_upgrade, ammo_cost ); + + if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) + ammo_cost = int( ammo_cost / 2 ); + + if ( str_weapon == "riotshield_zm" ) + play_sound_on_ent( "no_purchase" ); + else if ( player.score >= ammo_cost ) + { + if ( self.first_time_triggered == 0 ) + self show_all_weapon_buys( player, cost, ammo_cost, is_grenade ); + + if ( player has_upgrade( str_weapon ) ) + { + player maps\mp\zombies\_zm_stats::increment_client_stat( "upgraded_ammo_purchased" ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "upgraded_ammo_purchased" ); + } + else + { + player maps\mp\zombies\_zm_stats::increment_client_stat( "ammo_purchased" ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "ammo_purchased" ); + } + + if ( str_weapon == "riotshield_zm" ) + { + if ( isdefined( player.player_shield_reset_health ) ) + ammo_given = player [[ player.player_shield_reset_health ]](); + else + ammo_given = 0; + } + else if ( player has_upgrade( str_weapon ) ) + ammo_given = player ammo_give( level.zombie_weapons[str_weapon].upgrade_name ); + else + ammo_given = player ammo_give( str_weapon ); + + if ( ammo_given ) + { + player maps\mp\zombies\_zm_score::minus_to_player_score( ammo_cost, 1 ); + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, ammo_cost, str_weapon, self.origin, "ammo" ); + } + } + else + { + play_sound_on_ent( "no_purchase" ); + + if ( isdefined( level.custom_generic_deny_vo_func ) ) + player [[ level.custom_generic_deny_vo_func ]](); + else + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); + } + } + + if ( isdefined( self.stub ) && isdefined( self.stub.prompt_and_visibility_func ) ) + self [[ self.stub.prompt_and_visibility_func ]]( player ); + } +} + +show_all_weapon_buys( player, cost, ammo_cost, is_grenade ) +{ + model = getent( self.target, "targetname" ); + + if ( isdefined( model ) ) + model thread weapon_show( player ); + else if ( isdefined( self.clientfieldname ) ) + level setclientfield( self.clientfieldname, 1 ); + + self.first_time_triggered = 1; + + if ( isdefined( self.stub ) ) + self.stub.first_time_triggered = 1; + + if ( !is_grenade ) + self weapon_set_first_time_hint( cost, ammo_cost ); + + if ( !( isdefined( level.dont_link_common_wallbuys ) && level.dont_link_common_wallbuys ) && isdefined( level._spawned_wallbuys ) ) + { + for ( i = 0; i < level._spawned_wallbuys.size; i++ ) + { + wallbuy = level._spawned_wallbuys[i]; + + if ( isdefined( self.stub ) && isdefined( wallbuy.trigger_stub ) && self.stub.clientfieldname == wallbuy.trigger_stub.clientfieldname ) + continue; + + if ( self.zombie_weapon_upgrade == wallbuy.zombie_weapon_upgrade ) + { + if ( isdefined( wallbuy.trigger_stub ) && isdefined( wallbuy.trigger_stub.clientfieldname ) ) + level setclientfield( wallbuy.trigger_stub.clientfieldname, 1 ); + else if ( isdefined( wallbuy.target ) ) + { + model = getent( wallbuy.target, "targetname" ); + + if ( isdefined( model ) ) + model thread weapon_show( player ); + } + + if ( isdefined( wallbuy.trigger_stub ) ) + { + wallbuy.trigger_stub.first_time_triggered = 1; + + if ( isdefined( wallbuy.trigger_stub.trigger ) ) + { + wallbuy.trigger_stub.trigger.first_time_triggered = 1; + + if ( !is_grenade ) + wallbuy.trigger_stub.trigger weapon_set_first_time_hint( cost, ammo_cost ); + } + + continue; + } + + if ( !is_grenade ) + wallbuy weapon_set_first_time_hint( cost, ammo_cost ); + } + } + } +} + +weapon_show( player ) +{ + player_angles = vectortoangles( player.origin - self.origin ); + player_yaw = player_angles[1]; + weapon_yaw = self.angles[1]; + + if ( isdefined( self.script_int ) ) + weapon_yaw -= self.script_int; + + yaw_diff = angleclamp180( player_yaw - weapon_yaw ); + + if ( yaw_diff > 0 ) + yaw = weapon_yaw - 90; + else + yaw = weapon_yaw + 90; + + self.og_origin = self.origin; + self.origin += anglestoforward( ( 0, yaw, 0 ) ) * 8; + wait 0.05; + self show(); + play_sound_at_pos( "weapon_show", self.origin, self ); + time = 1; + + if ( !isdefined( self._linked_ent ) ) + self moveto( self.og_origin, time ); +} + +get_pack_a_punch_weapon_options( weapon ) +{ + if ( !isdefined( self.pack_a_punch_weapon_options ) ) + self.pack_a_punch_weapon_options = []; + + if ( !is_weapon_upgraded( weapon ) ) + return self calcweaponoptions( 0, 0, 0, 0, 0 ); + + if ( isdefined( self.pack_a_punch_weapon_options[weapon] ) ) + return self.pack_a_punch_weapon_options[weapon]; + + smiley_face_reticle_index = 1; + base = get_base_name( weapon ); + camo_index = 39; + + if ( "zm_prison" == level.script ) + camo_index = 40; + else if ( "zm_tomb" == level.script ) + camo_index = 45; + + lens_index = randomintrange( 0, 6 ); + reticle_index = randomintrange( 0, 16 ); + reticle_color_index = randomintrange( 0, 6 ); + plain_reticle_index = 16; + r = randomint( 10 ); + use_plain = r < 3; + + if ( "saritch_upgraded_zm" == base ) + reticle_index = smiley_face_reticle_index; + else if ( use_plain ) + reticle_index = plain_reticle_index; +/# + if ( getdvarint( _hash_471F9AB9 ) >= 0 ) + reticle_index = getdvarint( _hash_471F9AB9 ); +#/ + scary_eyes_reticle_index = 8; + purple_reticle_color_index = 3; + + if ( reticle_index == scary_eyes_reticle_index ) + reticle_color_index = purple_reticle_color_index; + + letter_a_reticle_index = 2; + pink_reticle_color_index = 6; + + if ( reticle_index == letter_a_reticle_index ) + reticle_color_index = pink_reticle_color_index; + + letter_e_reticle_index = 7; + green_reticle_color_index = 1; + + if ( reticle_index == letter_e_reticle_index ) + reticle_color_index = green_reticle_color_index; + + self.pack_a_punch_weapon_options[weapon] = self calcweaponoptions( camo_index, lens_index, reticle_index, reticle_color_index ); + return self.pack_a_punch_weapon_options[weapon]; +} + +weapon_give( weapon, is_upgrade, magic_box, nosound ) +{ + primaryweapons = self getweaponslistprimaries(); + current_weapon = self getcurrentweapon(); + current_weapon = self maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( current_weapon ); + assert( self player_can_use_content( weapon ) ); + + if ( !isdefined( is_upgrade ) ) + is_upgrade = 0; + + weapon_limit = get_player_weapon_limit( self ); + + if ( is_equipment( weapon ) ) + self maps\mp\zombies\_zm_equipment::equipment_give( weapon ); + + if ( weapon == "riotshield_zm" ) + { + if ( isdefined( self.player_shield_reset_health ) ) + self [[ self.player_shield_reset_health ]](); + } + + if ( self hasweapon( weapon ) ) + { + if ( issubstr( weapon, "knife_ballistic_" ) ) + self notify( "zmb_lost_knife" ); + + self givestartammo( weapon ); + + if ( !is_offhand_weapon( weapon ) ) + self switchtoweapon( weapon ); + + return; + } + + if ( is_melee_weapon( weapon ) ) + current_weapon = maps\mp\zombies\_zm_melee_weapon::change_melee_weapon( weapon, current_weapon ); + else if ( is_lethal_grenade( weapon ) ) + { + old_lethal = self get_player_lethal_grenade(); + + if ( isdefined( old_lethal ) && old_lethal != "" ) + { + self takeweapon( old_lethal ); + unacquire_weapon_toggle( old_lethal ); + } + + self set_player_lethal_grenade( weapon ); + } + else if ( is_tactical_grenade( weapon ) ) + { + old_tactical = self get_player_tactical_grenade(); + + if ( isdefined( old_tactical ) && old_tactical != "" ) + { + self takeweapon( old_tactical ); + unacquire_weapon_toggle( old_tactical ); + } + + self set_player_tactical_grenade( weapon ); + } + else if ( is_placeable_mine( weapon ) ) + { + old_mine = self get_player_placeable_mine(); + + if ( isdefined( old_mine ) ) + { + self takeweapon( old_mine ); + unacquire_weapon_toggle( old_mine ); + } + + self set_player_placeable_mine( weapon ); + } + + if ( !is_offhand_weapon( weapon ) ) + self maps\mp\zombies\_zm_weapons::take_fallback_weapon(); + + if ( primaryweapons.size >= weapon_limit ) + { + if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) ) + current_weapon = undefined; + + if ( isdefined( current_weapon ) ) + { + if ( !is_offhand_weapon( weapon ) ) + { + if ( current_weapon == "tesla_gun_zm" ) + level.player_drops_tesla_gun = 1; + + if ( issubstr( current_weapon, "knife_ballistic_" ) ) + self notify( "zmb_lost_knife" ); + + self takeweapon( current_weapon ); + unacquire_weapon_toggle( current_weapon ); + } + } + } + + if ( isdefined( level.zombiemode_offhand_weapon_give_override ) ) + { + if ( self [[ level.zombiemode_offhand_weapon_give_override ]]( weapon ) ) + return; + } + + if ( weapon == "cymbal_monkey_zm" ) + { + self maps\mp\zombies\_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); + self play_weapon_vo( weapon, magic_box ); + return; + } + else if ( issubstr( weapon, "knife_ballistic_" ) ) + weapon = self maps\mp\zombies\_zm_melee_weapon::give_ballistic_knife( weapon, issubstr( weapon, "upgraded" ) ); + else if ( weapon == "claymore_zm" ) + { + self thread maps\mp\zombies\_zm_weap_claymore::claymore_setup(); + self play_weapon_vo( weapon, magic_box ); + return; + } + + if ( isdefined( level.zombie_weapons_callbacks ) && isdefined( level.zombie_weapons_callbacks[weapon] ) ) + { + self thread [[ level.zombie_weapons_callbacks[weapon] ]](); + play_weapon_vo( weapon, magic_box ); + return; + } + + if ( !( isdefined( nosound ) && nosound ) ) + self play_sound_on_ent( "purchase" ); + + if ( weapon == "ray_gun_zm" ) + playsoundatposition( "mus_raygun_stinger", ( 0, 0, 0 ) ); + + if ( !is_weapon_upgraded( weapon ) ) + self giveweapon( weapon ); + else + self giveweapon( weapon, 0, self get_pack_a_punch_weapon_options( weapon ) ); + + acquire_weapon_toggle( weapon, self ); + self givestartammo( weapon ); + + if ( !is_offhand_weapon( weapon ) ) + { + if ( !is_melee_weapon( weapon ) ) + self switchtoweapon( weapon ); + else + self switchtoweapon( current_weapon ); + } + + self play_weapon_vo( weapon, magic_box ); +} + +play_weapon_vo( weapon, magic_box ) +{ + if ( isdefined( level._audio_custom_weapon_check ) ) + type = self [[ level._audio_custom_weapon_check ]]( weapon, magic_box ); + else + type = self weapon_type_check( weapon ); + + if ( type == "crappy" ) + return; + + if ( type != "favorite" && type != "upgrade" ) + type = weapon; + + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", type ); +} + +weapon_type_check( weapon ) +{ + if ( !isdefined( self.entity_num ) ) + return "crappy"; + + weapon = get_base_name( weapon ); + + if ( self is_favorite_weapon( weapon ) ) + return "favorite"; + + if ( issubstr( weapon, "upgraded" ) ) + return "upgrade"; + else + return level.zombie_weapons[weapon].vox; +} + +get_player_index( player ) +{ + assert( isplayer( player ) ); + assert( isdefined( player.characterindex ) ); +/# + if ( player.entity_num == 0 && getdvar( _hash_2222BA21 ) != "" ) + { + new_vo_index = getdvarint( _hash_2222BA21 ); + return new_vo_index; + } +#/ + return player.characterindex; +} + +ammo_give( weapon ) +{ + give_ammo = 0; + + if ( !is_offhand_weapon( weapon ) ) + { + weapon = get_weapon_with_attachments( weapon ); + + if ( isdefined( weapon ) ) + { + stockmax = 0; + stockmax = weaponstartammo( weapon ); + clipcount = self getweaponammoclip( weapon ); + currstock = self getammocount( weapon ); + + if ( currstock - clipcount >= stockmax ) + give_ammo = 0; + else + give_ammo = 1; + } + } + else if ( self has_weapon_or_upgrade( weapon ) ) + { + if ( self getammocount( weapon ) < weaponmaxammo( weapon ) ) + give_ammo = 1; + } + + if ( give_ammo ) + { + self play_sound_on_ent( "purchase" ); + self givemaxammo( weapon ); + alt_weap = weaponaltweaponname( weapon ); + + if ( "none" != alt_weap ) + self givemaxammo( alt_weap ); + + return true; + } + + if ( !give_ammo ) + return false; +} + +get_player_weapondata( player, weapon ) +{ + weapondata = []; + + if ( !isdefined( weapon ) ) + weapondata["name"] = player getcurrentweapon(); + else + weapondata["name"] = weapon; + + weapondata["dw_name"] = weapondualwieldweaponname( weapondata["name"] ); + weapondata["alt_name"] = weaponaltweaponname( weapondata["name"] ); + + if ( weapondata["name"] != "none" ) + { + weapondata["clip"] = player getweaponammoclip( weapondata["name"] ); + weapondata["stock"] = player getweaponammostock( weapondata["name"] ); + weapondata["fuel"] = player getweaponammofuel( weapondata["name"] ); + weapondata["heat"] = player isweaponoverheating( 1, weapondata["name"] ); + weapondata["overheat"] = player isweaponoverheating( 0, weapondata["name"] ); + } + else + { + weapondata["clip"] = 0; + weapondata["stock"] = 0; + weapondata["fuel"] = 0; + weapondata["heat"] = 0; + weapondata["overheat"] = 0; + } + + if ( weapondata["dw_name"] != "none" ) + weapondata["lh_clip"] = player getweaponammoclip( weapondata["dw_name"] ); + else + weapondata["lh_clip"] = 0; + + if ( weapondata["alt_name"] != "none" ) + { + weapondata["alt_clip"] = player getweaponammoclip( weapondata["alt_name"] ); + weapondata["alt_stock"] = player getweaponammostock( weapondata["alt_name"] ); + } + else + { + weapondata["alt_clip"] = 0; + weapondata["alt_stock"] = 0; + } + + return weapondata; +} + +weapon_is_better( left, right ) +{ + if ( left != right ) + { + left_upgraded = !isdefined( level.zombie_weapons[left] ); + right_upgraded = !isdefined( level.zombie_weapons[right] ); + + if ( left_upgraded && right_upgraded ) + { + leftatt = get_attachment_index( left ); + rightatt = get_attachment_index( right ); + return leftatt > rightatt; + } + else if ( left_upgraded ) + return 1; + } + + return 0; +} + +merge_weapons( oldweapondata, newweapondata ) +{ + weapondata = []; + weapondata["name"] = "none"; + + if ( weapon_is_better( oldweapondata["name"], newweapondata["name"] ) ) + weapondata["name"] = oldweapondata["name"]; + else + weapondata["name"] = newweapondata["name"]; + + name = weapondata["name"]; + dw_name = weapondualwieldweaponname( name ); + alt_name = weaponaltweaponname( name ); + + if ( name != "none" ) + { + weapondata["clip"] = newweapondata["clip"] + oldweapondata["clip"]; + weapondata["clip"] = int( min( weapondata["clip"], weaponclipsize( name ) ) ); + weapondata["stock"] = newweapondata["stock"] + oldweapondata["stock"]; + weapondata["stock"] = int( min( weapondata["stock"], weaponmaxammo( name ) ) ); + weapondata["fuel"] = newweapondata["fuel"] + oldweapondata["fuel"]; + weapondata["fuel"] = int( min( weapondata["fuel"], weaponfuellife( name ) ) ); + weapondata["heat"] = int( min( newweapondata["heat"], oldweapondata["heat"] ) ); + weapondata["overheat"] = int( min( newweapondata["overheat"], oldweapondata["overheat"] ) ); + } + + if ( dw_name != "none" ) + { + weapondata["lh_clip"] = newweapondata["lh_clip"] + oldweapondata["lh_clip"]; + weapondata["lh_clip"] = int( min( weapondata["lh_clip"], weaponclipsize( dw_name ) ) ); + } + + if ( alt_name != "none" ) + { + weapondata["alt_clip"] = newweapondata["alt_clip"] + oldweapondata["alt_clip"]; + weapondata["alt_clip"] = int( min( weapondata["alt_clip"], weaponclipsize( alt_name ) ) ); + weapondata["alt_stock"] = newweapondata["alt_stock"] + oldweapondata["alt_stock"]; + weapondata["alt_stock"] = int( min( weapondata["alt_stock"], weaponmaxammo( alt_name ) ) ); + } + + return weapondata; +} + +weapondata_give( weapondata ) +{ + current = get_player_weapon_with_same_base( weapondata["name"] ); + + if ( isdefined( current ) ) + { + curweapondata = get_player_weapondata( self, current ); + self takeweapon( current ); + weapondata = merge_weapons( curweapondata, weapondata ); + } + + name = weapondata["name"]; + weapon_give( name, undefined, undefined, 1 ); + dw_name = weapondualwieldweaponname( name ); + alt_name = weaponaltweaponname( name ); + + if ( name != "none" ) + { + self setweaponammoclip( name, weapondata["clip"] ); + self setweaponammostock( name, weapondata["stock"] ); + + if ( isdefined( weapondata["fuel"] ) ) + self setweaponammofuel( name, weapondata["fuel"] ); + + if ( isdefined( weapondata["heat"] ) && isdefined( weapondata["overheat"] ) ) + self setweaponoverheating( weapondata["overheat"], weapondata["heat"], name ); + } + + if ( dw_name != "none" ) + self setweaponammoclip( dw_name, weapondata["lh_clip"] ); + + if ( alt_name != "none" ) + { + self setweaponammoclip( alt_name, weapondata["alt_clip"] ); + self setweaponammostock( alt_name, weapondata["alt_stock"] ); + } +} + +register_zombie_weapon_callback( str_weapon, func ) +{ + if ( !isdefined( level.zombie_weapons_callbacks ) ) + level.zombie_weapons_callbacks = []; + + if ( !isdefined( level.zombie_weapons_callbacks[str_weapon] ) ) + level.zombie_weapons_callbacks[str_weapon] = func; +} diff --git a/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_zonemgr.gsc b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_zonemgr.gsc new file mode 100644 index 0000000..308c9e2 --- /dev/null +++ b/ZM/Maps/Tranzit Diner/maps/mp/zombies/_zm_zonemgr.gsc @@ -0,0 +1,1166 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_zonemgr; + +init() +{ +/# + println( "ZM >> Zombiemode Server Scripts Init (_zm_zonemgr.gsc)" ); +#/ + flag_init( "zones_initialized" ); + level.zones = []; + level.zone_flags = []; + level.zone_scanning_active = 0; + + if ( !isdefined( level.create_spawner_list_func ) ) + level.create_spawner_list_func = ::create_spawner_list; +} + +zone_is_enabled( zone_name ) +{ + if ( !isdefined( level.zones ) || !isdefined( level.zones[zone_name] ) || !level.zones[zone_name].is_enabled ) + return false; + + return true; +} + +get_player_zone() +{ + player_zone = undefined; + keys = getarraykeys( level.zones ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( self entity_in_zone( keys[i] ) ) + { + player_zone = keys[i]; + break; + } + } + + return player_zone; +} + +get_zone_from_position( v_pos, ignore_enabled_check ) +{ + zone = undefined; + scr_org = spawn( "script_origin", v_pos ); + keys = getarraykeys( level.zones ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( scr_org entity_in_zone( keys[i], ignore_enabled_check ) ) + { + zone = keys[i]; + break; + } + } + + scr_org delete(); + return zone; +} + +get_zone_magic_boxes( zone_name ) +{ + if ( isdefined( zone_name ) && !zone_is_enabled( zone_name ) ) + return undefined; + + zone = level.zones[zone_name]; + assert( isdefined( zone_name ) ); + return zone.magic_boxes; +} + +get_zone_zbarriers( zone_name ) +{ + if ( isdefined( zone_name ) && !zone_is_enabled( zone_name ) ) + return undefined; + + zone = level.zones[zone_name]; + assert( isdefined( zone_name ) ); + return zone.zbarriers; +} + +get_players_in_zone( zone_name, return_players ) +{ + if ( !zone_is_enabled( zone_name ) ) + return 0; + + zone = level.zones[zone_name]; + num_in_zone = 0; + players_in_zone = []; + players = get_players(); + + for ( i = 0; i < zone.volumes.size; i++ ) + { + for ( j = 0; j < players.size; j++ ) + { + if ( players[j] istouching( zone.volumes[i] ) ) + { + num_in_zone++; + players_in_zone[players_in_zone.size] = players[j]; + } + } + } + + if ( isdefined( return_players ) ) + return players_in_zone; + + return num_in_zone; +} + +player_in_zone( zone_name ) +{ + if ( !zone_is_enabled( zone_name ) ) + return false; + + zone = level.zones[zone_name]; + + for ( i = 0; i < zone.volumes.size; i++ ) + { + players = get_players(); + + for ( j = 0; j < players.size; j++ ) + { + if ( players[j] istouching( zone.volumes[i] ) && !( players[j].sessionstate == "spectator" ) ) + return true; + } + } + + return false; +} + +entity_in_zone( zone_name, ignore_enabled_check ) +{ + if ( !zone_is_enabled( zone_name ) && !( isdefined( ignore_enabled_check ) && ignore_enabled_check ) ) + return false; + + zone = level.zones[zone_name]; + + for ( i = 0; i < zone.volumes.size; i++ ) + { + if ( self istouching( zone.volumes[i] ) ) + return true; + } + + return false; +} + +deactivate_initial_barrier_goals() +{ + special_goals = getstructarray( "exterior_goal", "targetname" ); + + for ( i = 0; i < special_goals.size; i++ ) + { + if ( isdefined( special_goals[i].script_noteworthy ) ) + { + special_goals[i].is_active = 0; + special_goals[i] trigger_off(); + } + } +} + +zone_init( zone_name ) +{ + if ( isdefined( level.zones[zone_name] ) ) + return; +/# + println( "ZM >> zone_init (1) = " + zone_name ); +#/ + level.zones[zone_name] = spawnstruct(); + zone = level.zones[zone_name]; + zone.is_enabled = 0; + zone.is_occupied = 0; + zone.is_active = 0; + zone.adjacent_zones = []; + zone.is_spawning_allowed = 0; + zone.volumes = []; + volumes = getentarray( zone_name, "targetname" ); +/# + println( "ZM >> zone_init (2) = " + volumes.size ); +#/ + for ( i = 0; i < volumes.size; i++ ) + { + if ( volumes[i].classname == "info_volume" ) + zone.volumes[zone.volumes.size] = volumes[i]; + } + + assert( isdefined( zone.volumes[0] ), "zone_init: No volumes found for zone: " + zone_name ); + + if ( isdefined( zone.volumes[0].target ) ) + { + spots = getstructarray( zone.volumes[0].target, "targetname" ); + zone.spawn_locations = []; + zone.dog_locations = []; + zone.screecher_locations = []; + zone.avogadro_locations = []; + zone.inert_locations = []; + zone.quad_locations = []; + zone.leaper_locations = []; + zone.brutus_locations = []; + zone.mechz_locations = []; + zone.astro_locations = []; + zone.napalm_locations = []; + zone.zbarriers = []; + zone.magic_boxes = []; + barricades = getstructarray( "exterior_goal", "targetname" ); + box_locs = getstructarray( "treasure_chest_use", "targetname" ); + + for ( i = 0; i < spots.size; i++ ) + { + spots[i].zone_name = zone_name; + + if ( !( isdefined( spots[i].is_blocked ) && spots[i].is_blocked ) ) + spots[i].is_enabled = 1; + else + spots[i].is_enabled = 0; + + tokens = strtok( spots[i].script_noteworthy, " " ); + + foreach ( token in tokens ) + { + if ( token == "dog_location" ) + { + zone.dog_locations[zone.dog_locations.size] = spots[i]; + continue; + } + + if ( token == "screecher_location" ) + { + zone.screecher_locations[zone.screecher_locations.size] = spots[i]; + continue; + } + + if ( token == "avogadro_location" ) + { + zone.avogadro_locations[zone.avogadro_locations.size] = spots[i]; + continue; + } + + if ( token == "inert_location" ) + { + zone.inert_locations[zone.inert_locations.size] = spots[i]; + continue; + } + + if ( token == "quad_location" ) + { + zone.quad_locations[zone.quad_locations.size] = spots[i]; + continue; + } + + if ( token == "leaper_location" ) + { + zone.leaper_locations[zone.leaper_locations.size] = spots[i]; + continue; + } + + if ( token == "brutus_location" ) + { + zone.brutus_locations[zone.brutus_locations.size] = spots[i]; + continue; + } + + if ( token == "mechz_location" ) + { + zone.mechz_locations[zone.mechz_locations.size] = spots[i]; + continue; + } + + if ( token == "astro_location" ) + { + zone.astro_locations[zone.astro_locations.size] = spots[i]; + continue; + } + + if ( token == "napalm_location" ) + { + zone.napalm_locations[zone.napalm_locations.size] = spots[i]; + continue; + } + + zone.spawn_locations[zone.spawn_locations.size] = spots[i]; + } + + if ( isdefined( spots[i].script_string ) ) + { + barricade_id = spots[i].script_string; + + for ( k = 0; k < barricades.size; k++ ) + { + if ( isdefined( barricades[k].script_string ) && barricades[k].script_string == barricade_id ) + { + nodes = getnodearray( barricades[k].target, "targetname" ); + + for ( j = 0; j < nodes.size; j++ ) + { + if ( isdefined( nodes[j].type ) && nodes[j].type == "Begin" ) + spots[i].target = nodes[j].targetname; + } + } + } + } + } + + for ( i = 0; i < barricades.size; i++ ) + { + targets = getentarray( barricades[i].target, "targetname" ); + + for ( j = 0; j < targets.size; j++ ) + { + if ( targets[j] iszbarrier() && isdefined( targets[j].script_string ) && targets[j].script_string == zone_name ) + zone.zbarriers[zone.zbarriers.size] = targets[j]; + } + } + + for ( i = 0; i < box_locs.size; i++ ) + { + chest_ent = getent( box_locs[i].script_noteworthy + "_zbarrier", "script_noteworthy" ); + + if ( chest_ent entity_in_zone( zone_name, 1 ) ) + zone.magic_boxes[zone.magic_boxes.size] = box_locs[i]; + } + } +} + +reinit_zone_spawners() +{ + zkeys = getarraykeys( level.zones ); + + for ( i = 0; i < level.zones.size; i++ ) + { + zone = level.zones[zkeys[i]]; + + if ( isdefined( zone.volumes[0].target ) ) + { + spots = getstructarray( zone.volumes[0].target, "targetname" ); + zone.spawn_locations = []; + zone.dog_locations = []; + zone.screecher_locations = []; + zone.avogadro_locations = []; + zone.quad_locations = []; + zone.leaper_locations = []; + zone.brutus_locations = []; + zone.mechz_locations = []; + zone.astro_locations = []; + zone.napalm_locations = []; + + for ( j = 0; j < spots.size; j++ ) + { + spots[j].zone_name = zkeys[j]; + + if ( !( isdefined( spots[j].is_blocked ) && spots[j].is_blocked ) ) + spots[j].is_enabled = 1; + else + spots[j].is_enabled = 0; + + tokens = strtok( spots[j].script_noteworthy, " " ); + + foreach ( token in tokens ) + { + if ( token == "dog_location" ) + { + zone.dog_locations[zone.dog_locations.size] = spots[j]; + continue; + } + + if ( token == "screecher_location" ) + { + zone.screecher_locations[zone.screecher_locations.size] = spots[j]; + continue; + } + + if ( token == "avogadro_location" ) + { + zone.avogadro_locations[zone.avogadro_locations.size] = spots[j]; + continue; + } + + if ( token == "quad_location" ) + { + zone.quad_locations[zone.quad_locations.size] = spots[j]; + continue; + } + + if ( token == "leaper_location" ) + { + zone.leaper_locations[zone.leaper_locations.size] = spots[j]; + continue; + } + + if ( token == "brutus_location" ) + { + zone.brutus_locations[zone.brutus_locations.size] = spots[j]; + continue; + } + + if ( token == "mechz_location" ) + { + zone.mechz_locations[zone.mechz_locations.size] = spots[j]; + continue; + } + + if ( token == "astro_location" ) + { + zone.astro_locations[zone.astro_locations.size] = spots[j]; + continue; + } + + if ( token == "napalm_location" ) + { + zone.napalm_locations[zone.napalm_locations.size] = spots[j]; + continue; + } + + zone.spawn_locations[zone.spawn_locations.size] = spots[j]; + } + } + } + } +} + +enable_zone( zone_name ) +{ + assert( isdefined( level.zones ) && isdefined( level.zones[zone_name] ), "enable_zone: zone has not been initialized" ); + + if ( level.zones[zone_name].is_enabled ) + return; + + level.zones[zone_name].is_enabled = 1; + level.zones[zone_name].is_spawning_allowed = 1; + level notify( zone_name ); + spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); + + for ( i = 0; i < spawn_points.size; i++ ) + { + if ( spawn_points[i].script_noteworthy == zone_name ) + spawn_points[i].locked = 0; + } + + entry_points = getstructarray( zone_name + "_barriers", "script_noteworthy" ); + + for ( i = 0; i < entry_points.size; i++ ) + { + entry_points[i].is_active = 1; + entry_points[i] trigger_on(); + } +} + +make_zone_adjacent( main_zone_name, adj_zone_name, flag_name ) +{ + main_zone = level.zones[main_zone_name]; + + if ( !isdefined( main_zone.adjacent_zones[adj_zone_name] ) ) + { + main_zone.adjacent_zones[adj_zone_name] = spawnstruct(); + adj_zone = main_zone.adjacent_zones[adj_zone_name]; + adj_zone.is_connected = 0; + adj_zone.flags_do_or_check = 0; + + if ( isarray( flag_name ) ) + adj_zone.flags = flag_name; + else + adj_zone.flags[0] = flag_name; + } + else + { + assert( !isarray( flag_name ), "make_zone_adjacent: can't mix single and arrays of flags" ); + adj_zone = main_zone.adjacent_zones[adj_zone_name]; + size = adj_zone.flags.size; + adj_zone.flags_do_or_check = 1; + adj_zone.flags[size] = flag_name; + } +} + +add_zone_flags( wait_flag, add_flags ) +{ + if ( !isarray( add_flags ) ) + { + temp = add_flags; + add_flags = []; + add_flags[0] = temp; + } + + keys = getarraykeys( level.zone_flags ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( keys[i] == wait_flag ) + { + level.zone_flags[keys[i]] = arraycombine( level.zone_flags[keys[i]], add_flags, 1, 0 ); + return; + } + } + + level.zone_flags[wait_flag] = add_flags; +} + +add_adjacent_zone( zone_name_a, zone_name_b, flag_name, one_way = 0 ) +{ + if ( !isdefined( level.flag[flag_name] ) ) + flag_init( flag_name ); + + zone_init( zone_name_a ); + zone_init( zone_name_b ); + make_zone_adjacent( zone_name_a, zone_name_b, flag_name ); + + if ( !one_way ) + make_zone_adjacent( zone_name_b, zone_name_a, flag_name ); +} + +setup_zone_flag_waits() +{ + flags = []; + zkeys = getarraykeys( level.zones ); + + for ( z = 0; z < level.zones.size; z++ ) + { + zone = level.zones[zkeys[z]]; + azkeys = getarraykeys( zone.adjacent_zones ); + + for ( az = 0; az < zone.adjacent_zones.size; az++ ) + { + azone = zone.adjacent_zones[azkeys[az]]; + + for ( f = 0; f < azone.flags.size; f++ ) + flags = add_to_array( flags, azone.flags[f], 0 ); + } + } + + for ( i = 0; i < flags.size; i++ ) + level thread zone_flag_wait( flags[i] ); +} + +zone_flag_wait( flag_name ) +{ + if ( !isdefined( level.flag[flag_name] ) ) + flag_init( flag_name ); + + flag_wait( flag_name ); + flags_set = 0; + + for ( z = 0; z < level.zones.size; z++ ) + { + zkeys = getarraykeys( level.zones ); + zone = level.zones[zkeys[z]]; + + for ( az = 0; az < zone.adjacent_zones.size; az++ ) + { + azkeys = getarraykeys( zone.adjacent_zones ); + azone = zone.adjacent_zones[azkeys[az]]; + + if ( !azone.is_connected ) + { + if ( azone.flags_do_or_check ) + { + flags_set = 0; + + for ( f = 0; f < azone.flags.size; f++ ) + { + if ( flag( azone.flags[f] ) ) + { + flags_set = 1; + break; + } + } + } + else + { + flags_set = 1; + + for ( f = 0; f < azone.flags.size; f++ ) + { + if ( !flag( azone.flags[f] ) ) + flags_set = 0; + } + } + + if ( flags_set ) + { + enable_zone( zkeys[z] ); + azone.is_connected = 1; + + if ( !level.zones[azkeys[az]].is_enabled ) + enable_zone( azkeys[az] ); + + if ( flag( "door_can_close" ) ) + azone thread door_close_disconnect( flag_name ); + } + } + } + } + + keys = getarraykeys( level.zone_flags ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( keys[i] == flag_name ) + { + check_flag = level.zone_flags[keys[i]]; + + for ( k = 0; k < check_flag.size; k++ ) + flag_set( check_flag[k] ); + + break; + } + } +} + +door_close_disconnect( flag_name ) +{ + while ( flag( flag_name ) ) + wait 1.0; + + self.is_connected = 0; + level thread zone_flag_wait( flag_name ); +} + +connect_zones( zone_name_a, zone_name_b, one_way = 0 ) +{ + zone_init( zone_name_a ); + zone_init( zone_name_b ); + enable_zone( zone_name_a ); + enable_zone( zone_name_b ); + + if ( !isdefined( level.zones[zone_name_a].adjacent_zones[zone_name_b] ) ) + { + level.zones[zone_name_a].adjacent_zones[zone_name_b] = spawnstruct(); + level.zones[zone_name_a].adjacent_zones[zone_name_b].is_connected = 1; + } + + if ( !one_way ) + { + if ( !isdefined( level.zones[zone_name_b].adjacent_zones[zone_name_a] ) ) + { + level.zones[zone_name_b].adjacent_zones[zone_name_a] = spawnstruct(); + level.zones[zone_name_b].adjacent_zones[zone_name_a].is_connected = 1; + } + } +} + +manage_zones( initial_zone ) +{ + assert( isdefined( initial_zone ), "You must specify an initial zone to manage" ); + deactivate_initial_barrier_goals(); + zone_choke = 0; + spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); + + for ( i = 0; i < spawn_points.size; i++ ) + { + assert( isdefined( spawn_points[i].script_noteworthy ), "player_respawn_point: You must specify a script noteworthy with the zone name" ); + spawn_points[i].locked = 1; + } + + if ( isdefined( level.zone_manager_init_func ) ) + [[ level.zone_manager_init_func ]](); +/# + println( "ZM >> zone_init bbbb (_zm_zonemgr.gsc) = " + initial_zone.size ); +#/ + if ( isarray( initial_zone ) ) + { +/# + println( "ZM >> zone_init aaaa (_zm_zonemgr.gsc) = " + initial_zone[0] ); +#/ + for ( i = 0; i < initial_zone.size; i++ ) + { + zone_init( initial_zone[i] ); + enable_zone( initial_zone[i] ); + } + } + else + { +/# + println( "ZM >> zone_init (_zm_zonemgr.gsc) = " + initial_zone ); +#/ + zone_init( initial_zone ); + enable_zone( initial_zone ); + } + + setup_zone_flag_waits(); + zkeys = getarraykeys( level.zones ); + level.zone_keys = zkeys; + level.newzones = []; + + for ( z = 0; z < zkeys.size; z++ ) + level.newzones[zkeys[z]] = spawnstruct(); + + oldzone = undefined; + flag_set( "zones_initialized" ); + flag_wait( "begin_spawning" ); +/# + level thread _debug_zones(); +#/ + while ( getdvarint( _hash_10873CCA ) == 0 || getdvarint( _hash_762F1309 ) != 0 ) + { + for ( z = 0; z < zkeys.size; z++ ) + { + level.newzones[zkeys[z]].is_active = 0; + level.newzones[zkeys[z]].is_occupied = 0; + } + + a_zone_is_active = 0; + a_zone_is_spawning_allowed = 0; + level.zone_scanning_active = 1; + + for ( z = 0; z < zkeys.size; z++ ) + { + zone = level.zones[zkeys[z]]; + newzone = level.newzones[zkeys[z]]; + + if ( !zone.is_enabled ) + continue; + + if ( isdefined( level.zone_occupied_func ) ) + newzone.is_occupied = [[ level.zone_occupied_func ]]( zkeys[z] ); + else + newzone.is_occupied = player_in_zone( zkeys[z] ); + + if ( newzone.is_occupied ) + { + newzone.is_active = 1; + a_zone_is_active = 1; + + if ( zone.is_spawning_allowed ) + a_zone_is_spawning_allowed = 1; + + if ( !isdefined( oldzone ) || oldzone != newzone ) + { + level notify( "newzoneActive", zkeys[z] ); + oldzone = newzone; + } + + azkeys = getarraykeys( zone.adjacent_zones ); + + for ( az = 0; az < zone.adjacent_zones.size; az++ ) + { + if ( zone.adjacent_zones[azkeys[az]].is_connected && level.zones[azkeys[az]].is_enabled ) + { + level.newzones[azkeys[az]].is_active = 1; + + if ( level.zones[azkeys[az]].is_spawning_allowed ) + a_zone_is_spawning_allowed = 1; + } + } + } + + zone_choke++; + + if ( zone_choke >= 3 ) + { + zone_choke = 0; + wait 0.05; + } + } + + level.zone_scanning_active = 0; + + for ( z = 0; z < zkeys.size; z++ ) + { + level.zones[zkeys[z]].is_active = level.newzones[zkeys[z]].is_active; + level.zones[zkeys[z]].is_occupied = level.newzones[zkeys[z]].is_occupied; + } + + if ( !a_zone_is_active || !a_zone_is_spawning_allowed ) + { + if ( isarray( initial_zone ) ) + { + level.zones[initial_zone[0]].is_active = 1; + level.zones[initial_zone[0]].is_occupied = 1; + level.zones[initial_zone[0]].is_spawning_allowed = 1; + } + else + { + level.zones[initial_zone].is_active = 1; + level.zones[initial_zone].is_occupied = 1; + level.zones[initial_zone].is_spawning_allowed = 1; + } + } + + [[ level.create_spawner_list_func ]]( zkeys ); +/# + debug_show_spawn_locations(); +#/ + level.active_zone_names = maps\mp\zombies\_zm_zonemgr::get_active_zone_names(); + wait 1; + } +} + +debug_show_spawn_locations() +{ +/# + if ( isdefined( level.toggle_show_spawn_locations ) && level.toggle_show_spawn_locations ) + { + host_player = gethostplayer(); + + foreach ( location in level.zombie_spawn_locations ) + { + distance = distance( location.origin, host_player.origin ); + color = ( 0, 0, 1 ); + + if ( distance > getdvarint( _hash_85E6B1CE ) * 12 ) + color = ( 1, 0, 0 ); + + debugstar( location.origin, getdvarint( _hash_BB9101B2 ), color ); + } + } +#/ +} + +old_manage_zones( initial_zone ) +{ + assert( isdefined( initial_zone ), "You must specify an initial zone to manage" ); + deactivate_initial_barrier_goals(); + spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); + + for ( i = 0; i < spawn_points.size; i++ ) + { + assert( isdefined( spawn_points[i].script_noteworthy ), "player_respawn_point: You must specify a script noteworthy with the zone name" ); + spawn_points[i].locked = 1; + } + + if ( isdefined( level.zone_manager_init_func ) ) + [[ level.zone_manager_init_func ]](); +/# + println( "ZM >> zone_init bbbb (_zm_zonemgr.gsc) = " + initial_zone.size ); +#/ + if ( isarray( initial_zone ) ) + { +/# + println( "ZM >> zone_init aaaa (_zm_zonemgr.gsc) = " + initial_zone[0] ); +#/ + for ( i = 0; i < initial_zone.size; i++ ) + { + zone_init( initial_zone[i] ); + enable_zone( initial_zone[i] ); + } + } + else + { +/# + println( "ZM >> zone_init (_zm_zonemgr.gsc) = " + initial_zone ); +#/ + zone_init( initial_zone ); + enable_zone( initial_zone ); + } + + setup_zone_flag_waits(); + zkeys = getarraykeys( level.zones ); + level.zone_keys = zkeys; + flag_set( "zones_initialized" ); + flag_wait( "begin_spawning" ); +/# + level thread _debug_zones(); +#/ + while ( getdvarint( _hash_10873CCA ) == 0 || getdvarint( _hash_762F1309 ) != 0 ) + { + for ( z = 0; z < zkeys.size; z++ ) + { + level.zones[zkeys[z]].is_active = 0; + level.zones[zkeys[z]].is_occupied = 0; + } + + a_zone_is_active = 0; + a_zone_is_spawning_allowed = 0; + + for ( z = 0; z < zkeys.size; z++ ) + { + zone = level.zones[zkeys[z]]; + + if ( !zone.is_enabled ) + continue; + + if ( isdefined( level.zone_occupied_func ) ) + zone.is_occupied = [[ level.zone_occupied_func ]]( zkeys[z] ); + else + zone.is_occupied = player_in_zone( zkeys[z] ); + + if ( zone.is_occupied ) + { + zone.is_active = 1; + a_zone_is_active = 1; + + if ( zone.is_spawning_allowed ) + a_zone_is_spawning_allowed = 1; + + azkeys = getarraykeys( zone.adjacent_zones ); + + for ( az = 0; az < zone.adjacent_zones.size; az++ ) + { + if ( zone.adjacent_zones[azkeys[az]].is_connected && level.zones[azkeys[az]].is_enabled ) + { + level.zones[azkeys[az]].is_active = 1; + + if ( level.zones[azkeys[az]].is_spawning_allowed ) + a_zone_is_spawning_allowed = 1; + } + } + } + } + + if ( !a_zone_is_active || !a_zone_is_spawning_allowed ) + { + if ( isarray( initial_zone ) ) + { + level.zones[initial_zone[0]].is_active = 1; + level.zones[initial_zone[0]].is_occupied = 1; + level.zones[initial_zone[0]].is_spawning_allowed = 1; + } + else + { + level.zones[initial_zone].is_active = 1; + level.zones[initial_zone].is_occupied = 1; + level.zones[initial_zone].is_spawning_allowed = 1; + } + } + + [[ level.create_spawner_list_func ]]( zkeys ); + level.active_zone_names = maps\mp\zombies\_zm_zonemgr::get_active_zone_names(); + wait 1; + } +} + +create_spawner_list( zkeys ) +{ + level.zombie_spawn_locations = []; + level.inert_locations = []; + level.enemy_dog_locations = []; + level.zombie_screecher_locations = []; + level.zombie_avogadro_locations = []; + level.quad_locations = []; + level.zombie_leaper_locations = []; + level.zombie_astro_locations = []; + level.zombie_brutus_locations = []; + level.zombie_mechz_locations = []; + level.zombie_napalm_locations = []; + + for ( z = 0; z < zkeys.size; z++ ) + { + zone = level.zones[zkeys[z]]; + + if ( zone.is_enabled && zone.is_active && zone.is_spawning_allowed ) + { + for ( i = 0; i < zone.spawn_locations.size; i++ ) + { + if ( zone.spawn_locations[i].is_enabled ) + level.zombie_spawn_locations[level.zombie_spawn_locations.size] = zone.spawn_locations[i]; + } + + for ( x = 0; x < zone.inert_locations.size; x++ ) + { + if ( zone.inert_locations[x].is_enabled ) + level.inert_locations[level.inert_locations.size] = zone.inert_locations[x]; + } + + for ( x = 0; x < zone.dog_locations.size; x++ ) + { + if ( zone.dog_locations[x].is_enabled ) + level.enemy_dog_locations[level.enemy_dog_locations.size] = zone.dog_locations[x]; + } + + for ( x = 0; x < zone.screecher_locations.size; x++ ) + { + if ( zone.screecher_locations[x].is_enabled ) + level.zombie_screecher_locations[level.zombie_screecher_locations.size] = zone.screecher_locations[x]; + } + + for ( x = 0; x < zone.avogadro_locations.size; x++ ) + { + if ( zone.avogadro_locations[x].is_enabled ) + level.zombie_avogadro_locations[level.zombie_avogadro_locations.size] = zone.avogadro_locations[x]; + } + + for ( x = 0; x < zone.quad_locations.size; x++ ) + { + if ( zone.quad_locations[x].is_enabled ) + level.quad_locations[level.quad_locations.size] = zone.quad_locations[x]; + } + + for ( x = 0; x < zone.leaper_locations.size; x++ ) + { + if ( zone.leaper_locations[x].is_enabled ) + level.zombie_leaper_locations[level.zombie_leaper_locations.size] = zone.leaper_locations[x]; + } + + for ( x = 0; x < zone.astro_locations.size; x++ ) + { + if ( zone.astro_locations[x].is_enabled ) + level.zombie_astro_locations[level.zombie_astro_locations.size] = zone.astro_locations[x]; + } + + for ( x = 0; x < zone.napalm_locations.size; x++ ) + { + if ( zone.napalm_locations[x].is_enabled ) + level.zombie_napalm_locations[level.zombie_napalm_locations.size] = zone.napalm_locations[x]; + } + + for ( x = 0; x < zone.brutus_locations.size; x++ ) + { + if ( zone.brutus_locations[x].is_enabled ) + level.zombie_brutus_locations[level.zombie_brutus_locations.size] = zone.brutus_locations[x]; + } + + for ( x = 0; x < zone.mechz_locations.size; x++ ) + { + if ( zone.mechz_locations[x].is_enabled ) + level.zombie_mechz_locations[level.zombie_mechz_locations.size] = zone.mechz_locations[x]; + } + } + } +} + +get_active_zone_names() +{ + ret_list = []; + + if ( !isdefined( level.zone_keys ) ) + return ret_list; + + while ( level.zone_scanning_active ) + wait 0.05; + + for ( i = 0; i < level.zone_keys.size; i++ ) + { + if ( level.zones[level.zone_keys[i]].is_active ) + ret_list[ret_list.size] = level.zone_keys[i]; + } + + return ret_list; +} + +_init_debug_zones() +{ + current_y = 30; + current_x = 20; + xloc = []; + xloc[0] = 50; + xloc[1] = 60; + xloc[2] = 100; + xloc[3] = 130; + xloc[4] = 170; + zkeys = getarraykeys( level.zones ); + + for ( i = 0; i < zkeys.size; i++ ) + { + zonename = zkeys[i]; + zone = level.zones[zonename]; + zone.debug_hud = []; + + for ( j = 0; j < 5; j++ ) + { + zone.debug_hud[j] = newdebughudelem(); + + if ( !j ) + zone.debug_hud[j].alignx = "right"; + else + zone.debug_hud[j].alignx = "left"; + + zone.debug_hud[j].x = xloc[j]; + zone.debug_hud[j].y = current_y; + } + + current_y += 10; + zone.debug_hud[0] settext( zonename ); + } +} + +_destroy_debug_zones() +{ + zkeys = getarraykeys( level.zones ); + + for ( i = 0; i < zkeys.size; i++ ) + { + zonename = zkeys[i]; + zone = level.zones[zonename]; + + for ( j = 0; j < 5; j++ ) + { + zone.debug_hud[j] destroy(); + zone.debug_hud[j] = undefined; + } + } +} + +_debug_zones() +{ + enabled = 0; + + if ( getdvar( _hash_10E35BC4 ) == "" ) + setdvar( "zombiemode_debug_zones", "0" ); + + while ( true ) + { + wasenabled = enabled; + enabled = getdvarint( _hash_10E35BC4 ); + + if ( enabled && !wasenabled ) + _init_debug_zones(); + else if ( !enabled && wasenabled ) + _destroy_debug_zones(); + + if ( enabled ) + { + zkeys = getarraykeys( level.zones ); + + for ( i = 0; i < zkeys.size; i++ ) + { + zonename = zkeys[i]; + zone = level.zones[zonename]; + text = zonename; + zone.debug_hud[0] settext( text ); + + if ( zone.is_enabled ) + { + text += " Enabled"; + zone.debug_hud[1] settext( "Enabled" ); + } + else + zone.debug_hud[1] settext( "" ); + + if ( zone.is_active ) + { + text += " Active"; + zone.debug_hud[2] settext( "Active" ); + } + else + zone.debug_hud[2] settext( "" ); + + if ( zone.is_occupied ) + { + text += " Occupied"; + zone.debug_hud[3] settext( "Occupied" ); + } + else + zone.debug_hud[3] settext( "" ); + + if ( zone.is_spawning_allowed ) + { + text += " SpawningAllowed"; + zone.debug_hud[4] settext( "SpawningAllowed" ); + } + else + zone.debug_hud[4] settext( "" ); +/# + println( "ZM >> DEBUG=" + text ); +#/ + } + } + + wait 0.1; + } +} + +is_player_in_zone( zone_name ) +{ + zone = level.zones[zone_name]; + + for ( i = 0; i < zone.volumes.size; i++ ) + { + if ( self istouching( level.zones[zone_name].volumes[i] ) && !( self.sessionstate == "spectator" ) ) + return true; + } + + return false; +} diff --git a/ZM/Maps/Tranzit/aitype/zm_transit_avogadro.gsc b/ZM/Maps/Tranzit/aitype/zm_transit_avogadro.gsc new file mode 100644 index 0000000..9b05b29 --- /dev/null +++ b/ZM/Maps/Tranzit/aitype/zm_transit_avogadro.gsc @@ -0,0 +1,121 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\c_zom_avogadro; + +#using_animtree("zm_transit_avogadro"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_avogadro_arrival; + dummy_anim_ref = %ai_zombie_avogadro_exit; + dummy_anim_ref = %ai_zombie_avogadro_bus_attack_back; + dummy_anim_ref = %ai_zombie_avogadro_bus_attack_front; + dummy_anim_ref = %ai_zombie_avogadro_bus_attack_left; + dummy_anim_ref = %ai_zombie_avogadro_bus_attack_right; + dummy_anim_ref = %ai_zombie_avogadro_bus_attack_knocked_off; + dummy_anim_ref = %ai_zombie_avogadro_bus_pain_long; + dummy_anim_ref = %ai_zombie_avogadro_bus_pain_med; + dummy_anim_ref = %ai_zombie_avogadro_bus_pain_short; + dummy_anim_ref = %ai_zombie_avogadro_bus_back_pain_long; + dummy_anim_ref = %ai_zombie_avogadro_bus_back_pain_med; + dummy_anim_ref = %ai_zombie_avogadro_bus_back_pain_short; + dummy_anim_ref = %ai_zombie_avogadro_chamber_idle; + dummy_anim_ref = %ai_zombie_avogadro_chamber_trans_out; + dummy_anim_ref = %ai_zombie_avogadro_idle_v1; + dummy_anim_ref = %ai_zombie_avogadro_melee_attack_v1; + dummy_anim_ref = %ai_zombie_avogadro_pain_long; + dummy_anim_ref = %ai_zombie_avogadro_pain_med; + dummy_anim_ref = %ai_zombie_avogadro_pain_short; + dummy_anim_ref = %ai_zombie_avogadro_ranged_attack_v1; + dummy_anim_ref = %ai_zombie_avogadro_ranged_attack_v1_loop; + dummy_anim_ref = %ai_zombie_avogadro_ranged_attack_v1_end; + dummy_anim_ref = %ai_zombie_avogadro_run_v1; + dummy_anim_ref = %ai_zombie_avogadro_run_v1_twitch; + dummy_anim_ref = %ai_zombie_avogadro_sprint_v1; + dummy_anim_ref = %ai_zombie_avogadro_sprint_v1_twitch; + dummy_anim_ref = %ai_zombie_avogadro_walk_v1; + dummy_anim_ref = %ai_zombie_avogadro_walk_v1_twitch; + dummy_anim_ref = %ai_zombie_avogadro_teleport_forward_long; + dummy_anim_ref = %ai_zombie_avogadro_teleport_forward_med; + dummy_anim_ref = %ai_zombie_avogadro_teleport_forward_short; + dummy_anim_ref = %ai_zombie_avogadro_teleport_left_long; + dummy_anim_ref = %ai_zombie_avogadro_teleport_left_med; + dummy_anim_ref = %ai_zombie_avogadro_teleport_left_short; + dummy_anim_ref = %ai_zombie_avogadro_teleport_right_long; + dummy_anim_ref = %ai_zombie_avogadro_teleport_right_med; + dummy_anim_ref = %ai_zombie_avogadro_teleport_right_short; + dummy_anim_ref = %ai_zombie_avogadro_teleport_back_long; + dummy_anim_ref = %ai_zombie_avogadro_teleport_back_med; + dummy_anim_ref = %ai_zombie_avogadro_teleport_back_short; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_climb_down_pothole; + dummy_anim_ref = %ai_zombie_climb_up_pothole; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_190; + dummy_anim_ref = %ai_zombie_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_222; + dummy_anim_ref = %ai_zombie_avogadro_jump_across_120; + dummy_anim_ref = %ai_zombie_diner_roof_hatch_jump_up; + dummy_anim_ref = %ai_zombie_traverse_diner_roof; + dummy_anim_ref = %ai_zombie_jump_up_diner_roof; + dummy_anim_ref = %ai_zombie_traverse_garage_roll; + dummy_anim_ref = %ai_zombie_traverse_diner_counter_from_stools; + dummy_anim_ref = %ai_zombie_traverse_diner_counter_to_stools; + dummy_anim_ref = %ai_zombie_traverse_car; + dummy_anim_ref = %ai_zombie_traverse_car_sprint; + dummy_anim_ref = %ai_zombie_traverse_car_run; + dummy_anim_ref = %ai_zombie_traverse_car_pass_to_driver_side; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_transit_avogadro.asd"; + self.animtree = "zm_transit_avogadro.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 70; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\c_zom_avogadro::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_transit_avogadro" ); + character\c_zom_avogadro::precache(); +} diff --git a/ZM/Maps/Tranzit/aitype/zm_transit_basic_01.gsc b/ZM/Maps/Tranzit/aitype/zm_transit_basic_01.gsc new file mode 100644 index 0000000..db1d4b5 --- /dev/null +++ b/ZM/Maps/Tranzit/aitype/zm_transit_basic_01.gsc @@ -0,0 +1,496 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_zombie1_01; +#include character\c_zom_zombie1_02; + +#using_animtree("zm_transit_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_inert_v4; + dummy_anim_ref = %ai_zombie_inert_v6; + dummy_anim_ref = %ai_zombie_inert_stagger_v1; + dummy_anim_ref = %ai_zombie_inert_stagger_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v3; + dummy_anim_ref = %ai_zombie_inert_stagger_v4; + dummy_anim_ref = %ai_zombie_inert_circle_v1; + dummy_anim_ref = %ai_zombie_inert_2_awake_v1; + dummy_anim_ref = %ai_zombie_inert_2_awake_v2; + dummy_anim_ref = %ai_zombie_inert_2_awake_v3; + dummy_anim_ref = %ai_zombie_inert_2_awake_v4; + dummy_anim_ref = %ai_zombie_inert_2_awake_v5; + dummy_anim_ref = %ai_zombie_inert_2_awake_v6; + dummy_anim_ref = %ai_zombie_inert_2_awake_v7; + dummy_anim_ref = %ai_zombie_inert_2_awake_v8; + dummy_anim_ref = %ai_zombie_crawl_inert_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_v5; + dummy_anim_ref = %ai_zombie_crawl_inert_v6; + dummy_anim_ref = %ai_zombie_crawl_inert_v7; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v5; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_climb_down_pothole; + dummy_anim_ref = %ai_zombie_crawl_climb_down_pothole; + dummy_anim_ref = %ai_zombie_climb_up_pothole; + dummy_anim_ref = %ai_zombie_crawl_climb_up_pothole; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_stumble_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_stumble_90; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_stumble_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_190; + dummy_anim_ref = %ai_zombie_jump_down_stumble_190; + dummy_anim_ref = %ai_zombie_crawl_jump_down_189; + dummy_anim_ref = %ai_zombie_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_down_stumble_222; + dummy_anim_ref = %ai_zombie_crawl_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_127; + dummy_anim_ref = %ai_zombie_jump_up_222; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_222; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_crawl_jump_across_120; + dummy_anim_ref = %ai_zombie_jump_across_120; + dummy_anim_ref = %ai_zombie_diner_roof_hatch_jump_up; + dummy_anim_ref = %ai_zombie_crawl_diner_roof_hatch_jump_up; + dummy_anim_ref = %ai_zombie_traverse_diner_roof; + dummy_anim_ref = %ai_zombie_crawl_traverse_diner_roof; + dummy_anim_ref = %ai_zombie_traverse_garage_roll; + dummy_anim_ref = %ai_zombie_crawl_jump_up_diner_roof; + dummy_anim_ref = %ai_zombie_jump_up_diner_roof; + dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_from_stools; + dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_to_stools; + dummy_anim_ref = %ai_zombie_traverse_diner_counter_from_stools; + dummy_anim_ref = %ai_zombie_traverse_diner_counter_to_stools; + dummy_anim_ref = %ai_zombie_traverse_car; + dummy_anim_ref = %ai_zombie_crawl_traverse_car; + dummy_anim_ref = %ai_zombie_traverse_car_pass_to_driver_side; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_run; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_sprint; + dummy_anim_ref = %ai_zombie_traverse_car_sprint; + dummy_anim_ref = %ai_zombie_traverse_car_run; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side_sprint; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_walk_bus_v1; + dummy_anim_ref = %ai_zombie_walk_bus_v2; + dummy_anim_ref = %ai_zombie_walk_bus_v3; + dummy_anim_ref = %ai_zombie_walk_bus_v4; + dummy_anim_ref = %ai_zombie_bus_jump_door; + dummy_anim_ref = %ai_zombie_bus_jump_door_exit; + dummy_anim_ref = %ai_zombie_bus_jump_window_to_l; + dummy_anim_ref = %ai_zombie_bus_jump_window_to_r; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_l; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_r; + dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_l; + dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_r; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_l; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_r; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1_fast; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1_fast; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1_fast; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1_fast; + dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_v1; + dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_fast_v1; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_pull; + dummy_anim_ref = %ai_zombie_bus_hatch_tear; + dummy_anim_ref = %ai_zombie_bus_hatch_tear_fromback; + dummy_anim_ref = %ai_zombie_bus_hatch_jump_down; + dummy_anim_ref = %ai_zombie_bus_window_idle_l; + dummy_anim_ref = %ai_zombie_bus_window_idle_r; + dummy_anim_ref = %ai_zombie_bus_front_window_idle_l; + dummy_anim_ref = %ai_zombie_bus_front_window_idle_r; + dummy_anim_ref = %ai_zombie_bus_window_attack_l; + dummy_anim_ref = %ai_zombie_bus_window_attack_r; + dummy_anim_ref = %ai_zombie_bus_front_window_attack_l; + dummy_anim_ref = %ai_zombie_bus_front_window_attack_r; + dummy_anim_ref = %ai_zombie_bus_window_climbup_from_l; + dummy_anim_ref = %ai_zombie_bus_window_climbup_from_r; + dummy_anim_ref = %ai_zombie_bus_window_dismount_l; + dummy_anim_ref = %ai_zombie_bus_window_dismount_r; + dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_l; + dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_r; + dummy_anim_ref = %ai_zombie_bus_front_window_dismount_l; + dummy_anim_ref = %ai_zombie_bus_front_window_dismount_r; + dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_l; + dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_r; + dummy_anim_ref = %ai_zombie_bus_window_exit_back_l; + dummy_anim_ref = %ai_zombie_bus_window_exit_back_r; + dummy_anim_ref = %ai_zombie_bus_window_exit_front; + dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_l; + dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_r; + dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_front; + dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_b; + dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_f; + dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_b; + dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_f; + dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_b; + dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_f; + dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_b; + dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_f; + dummy_anim_ref = %ai_zombie_bus_front_window_climbup_from_inside; + dummy_anim_ref = %ai_zombie_bus_rear_window_climbup_from_inside; + dummy_anim_ref = %ai_zombie_sprint_v6; + dummy_anim_ref = %ai_zombie_sprint_v7; + dummy_anim_ref = %ai_zombie_sprint_v8; + dummy_anim_ref = %ai_zombie_sprint_v9; + dummy_anim_ref = %ai_zombie_sprint_v10; + dummy_anim_ref = %ai_zombie_sprint_v11; + dummy_anim_ref = %ai_zombie_sprint_v12; + dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v1; + dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v2; + dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v3; + dummy_anim_ref = %ai_zombie_jetgun_walk_v1; + dummy_anim_ref = %ai_zombie_jetgun_walk_v2; + dummy_anim_ref = %ai_zombie_jetgun_walk_v3; + dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v1; + dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v2; + dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v3; + dummy_anim_ref = %ai_zombie_jetgun_death_v1; + dummy_anim_ref = %ai_zombie_jetgun_death_v2; + dummy_anim_ref = %ai_zombie_jetgun_death_v3; + dummy_anim_ref = %ai_zombie_jetgun_sprint_v1; + dummy_anim_ref = %ai_zombie_jetgun_sprint_v2; + dummy_anim_ref = %ai_zombie_jetgun_sprint_v3; + dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v1; + dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v2; + dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v3; + dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v1; + dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v2; + dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v1; + dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v2; + dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v3; + dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v1; + dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v2; + dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v3; + dummy_anim_ref = %ai_zombie_riotshield_loop_v1; + dummy_anim_ref = %ai_zombie_riotshield_breakthrough_v1; + dummy_anim_ref = %ai_zombie_crawl_riotshield_loop_v1; + dummy_anim_ref = %ai_zombie_crawl_riotshield_breakthrough_v1; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_transit_basic.asd"; + self.animtree = "zm_transit_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 2 ); + + switch ( randchar ) + { + case 0: + character\c_zom_zombie1_01::main(); + break; + case 1: + character\c_zom_zombie1_02::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_transit_basic" ); + character\c_zom_zombie1_01::precache(); + character\c_zom_zombie1_02::precache(); +} diff --git a/ZM/Maps/Tranzit/aitype/zm_transit_basic_02.gsc b/ZM/Maps/Tranzit/aitype/zm_transit_basic_02.gsc new file mode 100644 index 0000000..c192b9e --- /dev/null +++ b/ZM/Maps/Tranzit/aitype/zm_transit_basic_02.gsc @@ -0,0 +1,501 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_zombie2_01; +#include character\c_zom_zombie2_02; +#include character\c_zom_zombie2_03; + +#using_animtree("zm_transit_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_inert_v4; + dummy_anim_ref = %ai_zombie_inert_v6; + dummy_anim_ref = %ai_zombie_inert_stagger_v1; + dummy_anim_ref = %ai_zombie_inert_stagger_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v3; + dummy_anim_ref = %ai_zombie_inert_stagger_v4; + dummy_anim_ref = %ai_zombie_inert_circle_v1; + dummy_anim_ref = %ai_zombie_inert_2_awake_v1; + dummy_anim_ref = %ai_zombie_inert_2_awake_v2; + dummy_anim_ref = %ai_zombie_inert_2_awake_v3; + dummy_anim_ref = %ai_zombie_inert_2_awake_v4; + dummy_anim_ref = %ai_zombie_inert_2_awake_v5; + dummy_anim_ref = %ai_zombie_inert_2_awake_v6; + dummy_anim_ref = %ai_zombie_inert_2_awake_v7; + dummy_anim_ref = %ai_zombie_inert_2_awake_v8; + dummy_anim_ref = %ai_zombie_crawl_inert_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_v5; + dummy_anim_ref = %ai_zombie_crawl_inert_v6; + dummy_anim_ref = %ai_zombie_crawl_inert_v7; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v5; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_climb_down_pothole; + dummy_anim_ref = %ai_zombie_crawl_climb_down_pothole; + dummy_anim_ref = %ai_zombie_climb_up_pothole; + dummy_anim_ref = %ai_zombie_crawl_climb_up_pothole; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_stumble_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_stumble_90; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_stumble_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_190; + dummy_anim_ref = %ai_zombie_jump_down_stumble_190; + dummy_anim_ref = %ai_zombie_crawl_jump_down_189; + dummy_anim_ref = %ai_zombie_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_down_stumble_222; + dummy_anim_ref = %ai_zombie_crawl_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_127; + dummy_anim_ref = %ai_zombie_jump_up_222; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_222; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_crawl_jump_across_120; + dummy_anim_ref = %ai_zombie_jump_across_120; + dummy_anim_ref = %ai_zombie_diner_roof_hatch_jump_up; + dummy_anim_ref = %ai_zombie_crawl_diner_roof_hatch_jump_up; + dummy_anim_ref = %ai_zombie_traverse_diner_roof; + dummy_anim_ref = %ai_zombie_crawl_traverse_diner_roof; + dummy_anim_ref = %ai_zombie_traverse_garage_roll; + dummy_anim_ref = %ai_zombie_crawl_jump_up_diner_roof; + dummy_anim_ref = %ai_zombie_jump_up_diner_roof; + dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_from_stools; + dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_to_stools; + dummy_anim_ref = %ai_zombie_traverse_diner_counter_from_stools; + dummy_anim_ref = %ai_zombie_traverse_diner_counter_to_stools; + dummy_anim_ref = %ai_zombie_traverse_car; + dummy_anim_ref = %ai_zombie_crawl_traverse_car; + dummy_anim_ref = %ai_zombie_traverse_car_pass_to_driver_side; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_run; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_sprint; + dummy_anim_ref = %ai_zombie_traverse_car_sprint; + dummy_anim_ref = %ai_zombie_traverse_car_run; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side_sprint; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_walk_bus_v1; + dummy_anim_ref = %ai_zombie_walk_bus_v2; + dummy_anim_ref = %ai_zombie_walk_bus_v3; + dummy_anim_ref = %ai_zombie_walk_bus_v4; + dummy_anim_ref = %ai_zombie_bus_jump_door; + dummy_anim_ref = %ai_zombie_bus_jump_door_exit; + dummy_anim_ref = %ai_zombie_bus_jump_window_to_l; + dummy_anim_ref = %ai_zombie_bus_jump_window_to_r; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_l; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_r; + dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_l; + dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_r; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_l; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_r; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1_fast; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1_fast; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1_fast; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1_fast; + dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_v1; + dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_fast_v1; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_pull; + dummy_anim_ref = %ai_zombie_bus_hatch_tear; + dummy_anim_ref = %ai_zombie_bus_hatch_tear_fromback; + dummy_anim_ref = %ai_zombie_bus_hatch_jump_down; + dummy_anim_ref = %ai_zombie_bus_window_idle_l; + dummy_anim_ref = %ai_zombie_bus_window_idle_r; + dummy_anim_ref = %ai_zombie_bus_front_window_idle_l; + dummy_anim_ref = %ai_zombie_bus_front_window_idle_r; + dummy_anim_ref = %ai_zombie_bus_window_attack_l; + dummy_anim_ref = %ai_zombie_bus_window_attack_r; + dummy_anim_ref = %ai_zombie_bus_front_window_attack_l; + dummy_anim_ref = %ai_zombie_bus_front_window_attack_r; + dummy_anim_ref = %ai_zombie_bus_window_climbup_from_l; + dummy_anim_ref = %ai_zombie_bus_window_climbup_from_r; + dummy_anim_ref = %ai_zombie_bus_window_dismount_l; + dummy_anim_ref = %ai_zombie_bus_window_dismount_r; + dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_l; + dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_r; + dummy_anim_ref = %ai_zombie_bus_front_window_dismount_l; + dummy_anim_ref = %ai_zombie_bus_front_window_dismount_r; + dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_l; + dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_r; + dummy_anim_ref = %ai_zombie_bus_window_exit_back_l; + dummy_anim_ref = %ai_zombie_bus_window_exit_back_r; + dummy_anim_ref = %ai_zombie_bus_window_exit_front; + dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_l; + dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_r; + dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_front; + dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_b; + dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_f; + dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_b; + dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_f; + dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_b; + dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_f; + dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_b; + dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_f; + dummy_anim_ref = %ai_zombie_bus_front_window_climbup_from_inside; + dummy_anim_ref = %ai_zombie_bus_rear_window_climbup_from_inside; + dummy_anim_ref = %ai_zombie_sprint_v6; + dummy_anim_ref = %ai_zombie_sprint_v7; + dummy_anim_ref = %ai_zombie_sprint_v8; + dummy_anim_ref = %ai_zombie_sprint_v9; + dummy_anim_ref = %ai_zombie_sprint_v10; + dummy_anim_ref = %ai_zombie_sprint_v11; + dummy_anim_ref = %ai_zombie_sprint_v12; + dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v1; + dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v2; + dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v3; + dummy_anim_ref = %ai_zombie_jetgun_walk_v1; + dummy_anim_ref = %ai_zombie_jetgun_walk_v2; + dummy_anim_ref = %ai_zombie_jetgun_walk_v3; + dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v1; + dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v2; + dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v3; + dummy_anim_ref = %ai_zombie_jetgun_death_v1; + dummy_anim_ref = %ai_zombie_jetgun_death_v2; + dummy_anim_ref = %ai_zombie_jetgun_death_v3; + dummy_anim_ref = %ai_zombie_jetgun_sprint_v1; + dummy_anim_ref = %ai_zombie_jetgun_sprint_v2; + dummy_anim_ref = %ai_zombie_jetgun_sprint_v3; + dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v1; + dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v2; + dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v3; + dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v1; + dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v2; + dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v1; + dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v2; + dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v3; + dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v1; + dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v2; + dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v3; + dummy_anim_ref = %ai_zombie_riotshield_loop_v1; + dummy_anim_ref = %ai_zombie_riotshield_breakthrough_v1; + dummy_anim_ref = %ai_zombie_crawl_riotshield_loop_v1; + dummy_anim_ref = %ai_zombie_crawl_riotshield_breakthrough_v1; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_transit_basic.asd"; + self.animtree = "zm_transit_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 3 ); + + switch ( randchar ) + { + case 0: + character\c_zom_zombie2_01::main(); + break; + case 1: + character\c_zom_zombie2_02::main(); + break; + case 2: + character\c_zom_zombie2_03::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_transit_basic" ); + character\c_zom_zombie2_01::precache(); + character\c_zom_zombie2_02::precache(); + character\c_zom_zombie2_03::precache(); +} diff --git a/ZM/Maps/Tranzit/aitype/zm_transit_basic_03.gsc b/ZM/Maps/Tranzit/aitype/zm_transit_basic_03.gsc new file mode 100644 index 0000000..485c922 --- /dev/null +++ b/ZM/Maps/Tranzit/aitype/zm_transit_basic_03.gsc @@ -0,0 +1,511 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_zombie3_01; +#include character\c_zom_zombie3_02; +#include character\c_zom_zombie3_03; +#include character\c_zom_zombie3_04; +#include character\c_zom_zombie3_05; + +#using_animtree("zm_transit_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_inert_v4; + dummy_anim_ref = %ai_zombie_inert_v6; + dummy_anim_ref = %ai_zombie_inert_stagger_v1; + dummy_anim_ref = %ai_zombie_inert_stagger_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v3; + dummy_anim_ref = %ai_zombie_inert_stagger_v4; + dummy_anim_ref = %ai_zombie_inert_circle_v1; + dummy_anim_ref = %ai_zombie_inert_2_awake_v1; + dummy_anim_ref = %ai_zombie_inert_2_awake_v2; + dummy_anim_ref = %ai_zombie_inert_2_awake_v3; + dummy_anim_ref = %ai_zombie_inert_2_awake_v4; + dummy_anim_ref = %ai_zombie_inert_2_awake_v5; + dummy_anim_ref = %ai_zombie_inert_2_awake_v6; + dummy_anim_ref = %ai_zombie_inert_2_awake_v7; + dummy_anim_ref = %ai_zombie_inert_2_awake_v8; + dummy_anim_ref = %ai_zombie_crawl_inert_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_v5; + dummy_anim_ref = %ai_zombie_crawl_inert_v6; + dummy_anim_ref = %ai_zombie_crawl_inert_v7; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v5; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_climb_down_pothole; + dummy_anim_ref = %ai_zombie_crawl_climb_down_pothole; + dummy_anim_ref = %ai_zombie_climb_up_pothole; + dummy_anim_ref = %ai_zombie_crawl_climb_up_pothole; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_stumble_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_stumble_90; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_stumble_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_190; + dummy_anim_ref = %ai_zombie_jump_down_stumble_190; + dummy_anim_ref = %ai_zombie_crawl_jump_down_189; + dummy_anim_ref = %ai_zombie_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_down_stumble_222; + dummy_anim_ref = %ai_zombie_crawl_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_127; + dummy_anim_ref = %ai_zombie_jump_up_222; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_222; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_crawl_jump_across_120; + dummy_anim_ref = %ai_zombie_jump_across_120; + dummy_anim_ref = %ai_zombie_diner_roof_hatch_jump_up; + dummy_anim_ref = %ai_zombie_crawl_diner_roof_hatch_jump_up; + dummy_anim_ref = %ai_zombie_traverse_diner_roof; + dummy_anim_ref = %ai_zombie_crawl_traverse_diner_roof; + dummy_anim_ref = %ai_zombie_traverse_garage_roll; + dummy_anim_ref = %ai_zombie_crawl_jump_up_diner_roof; + dummy_anim_ref = %ai_zombie_jump_up_diner_roof; + dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_from_stools; + dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_to_stools; + dummy_anim_ref = %ai_zombie_traverse_diner_counter_from_stools; + dummy_anim_ref = %ai_zombie_traverse_diner_counter_to_stools; + dummy_anim_ref = %ai_zombie_traverse_car; + dummy_anim_ref = %ai_zombie_crawl_traverse_car; + dummy_anim_ref = %ai_zombie_traverse_car_pass_to_driver_side; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_run; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_sprint; + dummy_anim_ref = %ai_zombie_traverse_car_sprint; + dummy_anim_ref = %ai_zombie_traverse_car_run; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side_sprint; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_walk_bus_v1; + dummy_anim_ref = %ai_zombie_walk_bus_v2; + dummy_anim_ref = %ai_zombie_walk_bus_v3; + dummy_anim_ref = %ai_zombie_walk_bus_v4; + dummy_anim_ref = %ai_zombie_bus_jump_door; + dummy_anim_ref = %ai_zombie_bus_jump_door_exit; + dummy_anim_ref = %ai_zombie_bus_jump_window_to_l; + dummy_anim_ref = %ai_zombie_bus_jump_window_to_r; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_l; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_r; + dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_l; + dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_r; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_l; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_r; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1_fast; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1_fast; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1_fast; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1_fast; + dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_v1; + dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_fast_v1; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_pull; + dummy_anim_ref = %ai_zombie_bus_hatch_tear; + dummy_anim_ref = %ai_zombie_bus_hatch_tear_fromback; + dummy_anim_ref = %ai_zombie_bus_hatch_jump_down; + dummy_anim_ref = %ai_zombie_bus_window_idle_l; + dummy_anim_ref = %ai_zombie_bus_window_idle_r; + dummy_anim_ref = %ai_zombie_bus_front_window_idle_l; + dummy_anim_ref = %ai_zombie_bus_front_window_idle_r; + dummy_anim_ref = %ai_zombie_bus_window_attack_l; + dummy_anim_ref = %ai_zombie_bus_window_attack_r; + dummy_anim_ref = %ai_zombie_bus_front_window_attack_l; + dummy_anim_ref = %ai_zombie_bus_front_window_attack_r; + dummy_anim_ref = %ai_zombie_bus_window_climbup_from_l; + dummy_anim_ref = %ai_zombie_bus_window_climbup_from_r; + dummy_anim_ref = %ai_zombie_bus_window_dismount_l; + dummy_anim_ref = %ai_zombie_bus_window_dismount_r; + dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_l; + dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_r; + dummy_anim_ref = %ai_zombie_bus_front_window_dismount_l; + dummy_anim_ref = %ai_zombie_bus_front_window_dismount_r; + dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_l; + dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_r; + dummy_anim_ref = %ai_zombie_bus_window_exit_back_l; + dummy_anim_ref = %ai_zombie_bus_window_exit_back_r; + dummy_anim_ref = %ai_zombie_bus_window_exit_front; + dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_l; + dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_r; + dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_front; + dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_b; + dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_f; + dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_b; + dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_f; + dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_b; + dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_f; + dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_b; + dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_f; + dummy_anim_ref = %ai_zombie_bus_front_window_climbup_from_inside; + dummy_anim_ref = %ai_zombie_bus_rear_window_climbup_from_inside; + dummy_anim_ref = %ai_zombie_sprint_v6; + dummy_anim_ref = %ai_zombie_sprint_v7; + dummy_anim_ref = %ai_zombie_sprint_v8; + dummy_anim_ref = %ai_zombie_sprint_v9; + dummy_anim_ref = %ai_zombie_sprint_v10; + dummy_anim_ref = %ai_zombie_sprint_v11; + dummy_anim_ref = %ai_zombie_sprint_v12; + dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v1; + dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v2; + dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v3; + dummy_anim_ref = %ai_zombie_jetgun_walk_v1; + dummy_anim_ref = %ai_zombie_jetgun_walk_v2; + dummy_anim_ref = %ai_zombie_jetgun_walk_v3; + dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v1; + dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v2; + dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v3; + dummy_anim_ref = %ai_zombie_jetgun_death_v1; + dummy_anim_ref = %ai_zombie_jetgun_death_v2; + dummy_anim_ref = %ai_zombie_jetgun_death_v3; + dummy_anim_ref = %ai_zombie_jetgun_sprint_v1; + dummy_anim_ref = %ai_zombie_jetgun_sprint_v2; + dummy_anim_ref = %ai_zombie_jetgun_sprint_v3; + dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v1; + dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v2; + dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v3; + dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v1; + dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v2; + dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v1; + dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v2; + dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v3; + dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v1; + dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v2; + dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v3; + dummy_anim_ref = %ai_zombie_riotshield_loop_v1; + dummy_anim_ref = %ai_zombie_riotshield_breakthrough_v1; + dummy_anim_ref = %ai_zombie_crawl_riotshield_loop_v1; + dummy_anim_ref = %ai_zombie_crawl_riotshield_breakthrough_v1; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_transit_basic.asd"; + self.animtree = "zm_transit_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 5 ); + + switch ( randchar ) + { + case 0: + character\c_zom_zombie3_01::main(); + break; + case 1: + character\c_zom_zombie3_02::main(); + break; + case 2: + character\c_zom_zombie3_03::main(); + break; + case 3: + character\c_zom_zombie3_04::main(); + break; + case 4: + character\c_zom_zombie3_05::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_transit_basic" ); + character\c_zom_zombie3_01::precache(); + character\c_zom_zombie3_02::precache(); + character\c_zom_zombie3_03::precache(); + character\c_zom_zombie3_04::precache(); + character\c_zom_zombie3_05::precache(); +} diff --git a/ZM/Maps/Tranzit/aitype/zm_transit_basic_05.gsc b/ZM/Maps/Tranzit/aitype/zm_transit_basic_05.gsc new file mode 100644 index 0000000..4eb477e --- /dev/null +++ b/ZM/Maps/Tranzit/aitype/zm_transit_basic_05.gsc @@ -0,0 +1,501 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_zombie5_01; +#include character\c_zom_zombie5_02; +#include character\c_zom_zombie5_03; + +#using_animtree("zm_transit_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_inert_v4; + dummy_anim_ref = %ai_zombie_inert_v6; + dummy_anim_ref = %ai_zombie_inert_stagger_v1; + dummy_anim_ref = %ai_zombie_inert_stagger_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v3; + dummy_anim_ref = %ai_zombie_inert_stagger_v4; + dummy_anim_ref = %ai_zombie_inert_circle_v1; + dummy_anim_ref = %ai_zombie_inert_2_awake_v1; + dummy_anim_ref = %ai_zombie_inert_2_awake_v2; + dummy_anim_ref = %ai_zombie_inert_2_awake_v3; + dummy_anim_ref = %ai_zombie_inert_2_awake_v4; + dummy_anim_ref = %ai_zombie_inert_2_awake_v5; + dummy_anim_ref = %ai_zombie_inert_2_awake_v6; + dummy_anim_ref = %ai_zombie_inert_2_awake_v7; + dummy_anim_ref = %ai_zombie_inert_2_awake_v8; + dummy_anim_ref = %ai_zombie_crawl_inert_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_v5; + dummy_anim_ref = %ai_zombie_crawl_inert_v6; + dummy_anim_ref = %ai_zombie_crawl_inert_v7; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v5; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_climb_down_pothole; + dummy_anim_ref = %ai_zombie_crawl_climb_down_pothole; + dummy_anim_ref = %ai_zombie_climb_up_pothole; + dummy_anim_ref = %ai_zombie_crawl_climb_up_pothole; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_stumble_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_stumble_90; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_stumble_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_190; + dummy_anim_ref = %ai_zombie_jump_down_stumble_190; + dummy_anim_ref = %ai_zombie_crawl_jump_down_189; + dummy_anim_ref = %ai_zombie_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_down_stumble_222; + dummy_anim_ref = %ai_zombie_crawl_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_127; + dummy_anim_ref = %ai_zombie_jump_up_222; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_222; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_crawl_jump_across_120; + dummy_anim_ref = %ai_zombie_jump_across_120; + dummy_anim_ref = %ai_zombie_diner_roof_hatch_jump_up; + dummy_anim_ref = %ai_zombie_crawl_diner_roof_hatch_jump_up; + dummy_anim_ref = %ai_zombie_traverse_diner_roof; + dummy_anim_ref = %ai_zombie_crawl_traverse_diner_roof; + dummy_anim_ref = %ai_zombie_traverse_garage_roll; + dummy_anim_ref = %ai_zombie_crawl_jump_up_diner_roof; + dummy_anim_ref = %ai_zombie_jump_up_diner_roof; + dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_from_stools; + dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_to_stools; + dummy_anim_ref = %ai_zombie_traverse_diner_counter_from_stools; + dummy_anim_ref = %ai_zombie_traverse_diner_counter_to_stools; + dummy_anim_ref = %ai_zombie_traverse_car; + dummy_anim_ref = %ai_zombie_crawl_traverse_car; + dummy_anim_ref = %ai_zombie_traverse_car_pass_to_driver_side; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_run; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_sprint; + dummy_anim_ref = %ai_zombie_traverse_car_sprint; + dummy_anim_ref = %ai_zombie_traverse_car_run; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side_sprint; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_walk_bus_v1; + dummy_anim_ref = %ai_zombie_walk_bus_v2; + dummy_anim_ref = %ai_zombie_walk_bus_v3; + dummy_anim_ref = %ai_zombie_walk_bus_v4; + dummy_anim_ref = %ai_zombie_bus_jump_door; + dummy_anim_ref = %ai_zombie_bus_jump_door_exit; + dummy_anim_ref = %ai_zombie_bus_jump_window_to_l; + dummy_anim_ref = %ai_zombie_bus_jump_window_to_r; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_l; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_r; + dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_l; + dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_r; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_l; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_r; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1_fast; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1_fast; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1_fast; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1_fast; + dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_v1; + dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_fast_v1; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_pull; + dummy_anim_ref = %ai_zombie_bus_hatch_tear; + dummy_anim_ref = %ai_zombie_bus_hatch_tear_fromback; + dummy_anim_ref = %ai_zombie_bus_hatch_jump_down; + dummy_anim_ref = %ai_zombie_bus_window_idle_l; + dummy_anim_ref = %ai_zombie_bus_window_idle_r; + dummy_anim_ref = %ai_zombie_bus_front_window_idle_l; + dummy_anim_ref = %ai_zombie_bus_front_window_idle_r; + dummy_anim_ref = %ai_zombie_bus_window_attack_l; + dummy_anim_ref = %ai_zombie_bus_window_attack_r; + dummy_anim_ref = %ai_zombie_bus_front_window_attack_l; + dummy_anim_ref = %ai_zombie_bus_front_window_attack_r; + dummy_anim_ref = %ai_zombie_bus_window_climbup_from_l; + dummy_anim_ref = %ai_zombie_bus_window_climbup_from_r; + dummy_anim_ref = %ai_zombie_bus_window_dismount_l; + dummy_anim_ref = %ai_zombie_bus_window_dismount_r; + dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_l; + dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_r; + dummy_anim_ref = %ai_zombie_bus_front_window_dismount_l; + dummy_anim_ref = %ai_zombie_bus_front_window_dismount_r; + dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_l; + dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_r; + dummy_anim_ref = %ai_zombie_bus_window_exit_back_l; + dummy_anim_ref = %ai_zombie_bus_window_exit_back_r; + dummy_anim_ref = %ai_zombie_bus_window_exit_front; + dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_l; + dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_r; + dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_front; + dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_b; + dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_f; + dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_b; + dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_f; + dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_b; + dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_f; + dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_b; + dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_f; + dummy_anim_ref = %ai_zombie_bus_front_window_climbup_from_inside; + dummy_anim_ref = %ai_zombie_bus_rear_window_climbup_from_inside; + dummy_anim_ref = %ai_zombie_sprint_v6; + dummy_anim_ref = %ai_zombie_sprint_v7; + dummy_anim_ref = %ai_zombie_sprint_v8; + dummy_anim_ref = %ai_zombie_sprint_v9; + dummy_anim_ref = %ai_zombie_sprint_v10; + dummy_anim_ref = %ai_zombie_sprint_v11; + dummy_anim_ref = %ai_zombie_sprint_v12; + dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v1; + dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v2; + dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v3; + dummy_anim_ref = %ai_zombie_jetgun_walk_v1; + dummy_anim_ref = %ai_zombie_jetgun_walk_v2; + dummy_anim_ref = %ai_zombie_jetgun_walk_v3; + dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v1; + dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v2; + dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v3; + dummy_anim_ref = %ai_zombie_jetgun_death_v1; + dummy_anim_ref = %ai_zombie_jetgun_death_v2; + dummy_anim_ref = %ai_zombie_jetgun_death_v3; + dummy_anim_ref = %ai_zombie_jetgun_sprint_v1; + dummy_anim_ref = %ai_zombie_jetgun_sprint_v2; + dummy_anim_ref = %ai_zombie_jetgun_sprint_v3; + dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v1; + dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v2; + dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v3; + dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v1; + dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v2; + dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v1; + dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v2; + dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v3; + dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v1; + dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v2; + dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v3; + dummy_anim_ref = %ai_zombie_riotshield_loop_v1; + dummy_anim_ref = %ai_zombie_riotshield_breakthrough_v1; + dummy_anim_ref = %ai_zombie_crawl_riotshield_loop_v1; + dummy_anim_ref = %ai_zombie_crawl_riotshield_breakthrough_v1; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_transit_basic.asd"; + self.animtree = "zm_transit_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 3 ); + + switch ( randchar ) + { + case 0: + character\c_zom_zombie5_01::main(); + break; + case 1: + character\c_zom_zombie5_02::main(); + break; + case 2: + character\c_zom_zombie5_03::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_transit_basic" ); + character\c_zom_zombie5_01::precache(); + character\c_zom_zombie5_02::precache(); + character\c_zom_zombie5_03::precache(); +} diff --git a/ZM/Maps/Tranzit/aitype/zm_transit_basic_08.gsc b/ZM/Maps/Tranzit/aitype/zm_transit_basic_08.gsc new file mode 100644 index 0000000..acc1e11 --- /dev/null +++ b/ZM/Maps/Tranzit/aitype/zm_transit_basic_08.gsc @@ -0,0 +1,501 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_zombie8_01; +#include character\c_zom_zombie8_02; +#include character\c_zom_zombie8_03; + +#using_animtree("zm_transit_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_inert_v4; + dummy_anim_ref = %ai_zombie_inert_v6; + dummy_anim_ref = %ai_zombie_inert_stagger_v1; + dummy_anim_ref = %ai_zombie_inert_stagger_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v3; + dummy_anim_ref = %ai_zombie_inert_stagger_v4; + dummy_anim_ref = %ai_zombie_inert_circle_v1; + dummy_anim_ref = %ai_zombie_inert_2_awake_v1; + dummy_anim_ref = %ai_zombie_inert_2_awake_v2; + dummy_anim_ref = %ai_zombie_inert_2_awake_v3; + dummy_anim_ref = %ai_zombie_inert_2_awake_v4; + dummy_anim_ref = %ai_zombie_inert_2_awake_v5; + dummy_anim_ref = %ai_zombie_inert_2_awake_v6; + dummy_anim_ref = %ai_zombie_inert_2_awake_v7; + dummy_anim_ref = %ai_zombie_inert_2_awake_v8; + dummy_anim_ref = %ai_zombie_crawl_inert_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_v5; + dummy_anim_ref = %ai_zombie_crawl_inert_v6; + dummy_anim_ref = %ai_zombie_crawl_inert_v7; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v5; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_climb_down_pothole; + dummy_anim_ref = %ai_zombie_crawl_climb_down_pothole; + dummy_anim_ref = %ai_zombie_climb_up_pothole; + dummy_anim_ref = %ai_zombie_crawl_climb_up_pothole; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_stumble_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_stumble_90; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_stumble_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_190; + dummy_anim_ref = %ai_zombie_jump_down_stumble_190; + dummy_anim_ref = %ai_zombie_crawl_jump_down_189; + dummy_anim_ref = %ai_zombie_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_down_stumble_222; + dummy_anim_ref = %ai_zombie_crawl_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_127; + dummy_anim_ref = %ai_zombie_jump_up_222; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_222; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_crawl_jump_across_120; + dummy_anim_ref = %ai_zombie_jump_across_120; + dummy_anim_ref = %ai_zombie_diner_roof_hatch_jump_up; + dummy_anim_ref = %ai_zombie_crawl_diner_roof_hatch_jump_up; + dummy_anim_ref = %ai_zombie_traverse_diner_roof; + dummy_anim_ref = %ai_zombie_crawl_traverse_diner_roof; + dummy_anim_ref = %ai_zombie_traverse_garage_roll; + dummy_anim_ref = %ai_zombie_crawl_jump_up_diner_roof; + dummy_anim_ref = %ai_zombie_jump_up_diner_roof; + dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_from_stools; + dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_to_stools; + dummy_anim_ref = %ai_zombie_traverse_diner_counter_from_stools; + dummy_anim_ref = %ai_zombie_traverse_diner_counter_to_stools; + dummy_anim_ref = %ai_zombie_traverse_car; + dummy_anim_ref = %ai_zombie_crawl_traverse_car; + dummy_anim_ref = %ai_zombie_traverse_car_pass_to_driver_side; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_run; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_sprint; + dummy_anim_ref = %ai_zombie_traverse_car_sprint; + dummy_anim_ref = %ai_zombie_traverse_car_run; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side_sprint; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_walk_bus_v1; + dummy_anim_ref = %ai_zombie_walk_bus_v2; + dummy_anim_ref = %ai_zombie_walk_bus_v3; + dummy_anim_ref = %ai_zombie_walk_bus_v4; + dummy_anim_ref = %ai_zombie_bus_jump_door; + dummy_anim_ref = %ai_zombie_bus_jump_door_exit; + dummy_anim_ref = %ai_zombie_bus_jump_window_to_l; + dummy_anim_ref = %ai_zombie_bus_jump_window_to_r; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_l; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_r; + dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_l; + dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_r; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_l; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_r; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1_fast; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1_fast; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1_fast; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1_fast; + dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_v1; + dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_fast_v1; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_pull; + dummy_anim_ref = %ai_zombie_bus_hatch_tear; + dummy_anim_ref = %ai_zombie_bus_hatch_tear_fromback; + dummy_anim_ref = %ai_zombie_bus_hatch_jump_down; + dummy_anim_ref = %ai_zombie_bus_window_idle_l; + dummy_anim_ref = %ai_zombie_bus_window_idle_r; + dummy_anim_ref = %ai_zombie_bus_front_window_idle_l; + dummy_anim_ref = %ai_zombie_bus_front_window_idle_r; + dummy_anim_ref = %ai_zombie_bus_window_attack_l; + dummy_anim_ref = %ai_zombie_bus_window_attack_r; + dummy_anim_ref = %ai_zombie_bus_front_window_attack_l; + dummy_anim_ref = %ai_zombie_bus_front_window_attack_r; + dummy_anim_ref = %ai_zombie_bus_window_climbup_from_l; + dummy_anim_ref = %ai_zombie_bus_window_climbup_from_r; + dummy_anim_ref = %ai_zombie_bus_window_dismount_l; + dummy_anim_ref = %ai_zombie_bus_window_dismount_r; + dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_l; + dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_r; + dummy_anim_ref = %ai_zombie_bus_front_window_dismount_l; + dummy_anim_ref = %ai_zombie_bus_front_window_dismount_r; + dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_l; + dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_r; + dummy_anim_ref = %ai_zombie_bus_window_exit_back_l; + dummy_anim_ref = %ai_zombie_bus_window_exit_back_r; + dummy_anim_ref = %ai_zombie_bus_window_exit_front; + dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_l; + dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_r; + dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_front; + dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_b; + dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_f; + dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_b; + dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_f; + dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_b; + dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_f; + dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_b; + dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_f; + dummy_anim_ref = %ai_zombie_bus_front_window_climbup_from_inside; + dummy_anim_ref = %ai_zombie_bus_rear_window_climbup_from_inside; + dummy_anim_ref = %ai_zombie_sprint_v6; + dummy_anim_ref = %ai_zombie_sprint_v7; + dummy_anim_ref = %ai_zombie_sprint_v8; + dummy_anim_ref = %ai_zombie_sprint_v9; + dummy_anim_ref = %ai_zombie_sprint_v10; + dummy_anim_ref = %ai_zombie_sprint_v11; + dummy_anim_ref = %ai_zombie_sprint_v12; + dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v1; + dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v2; + dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v3; + dummy_anim_ref = %ai_zombie_jetgun_walk_v1; + dummy_anim_ref = %ai_zombie_jetgun_walk_v2; + dummy_anim_ref = %ai_zombie_jetgun_walk_v3; + dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v1; + dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v2; + dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v3; + dummy_anim_ref = %ai_zombie_jetgun_death_v1; + dummy_anim_ref = %ai_zombie_jetgun_death_v2; + dummy_anim_ref = %ai_zombie_jetgun_death_v3; + dummy_anim_ref = %ai_zombie_jetgun_sprint_v1; + dummy_anim_ref = %ai_zombie_jetgun_sprint_v2; + dummy_anim_ref = %ai_zombie_jetgun_sprint_v3; + dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v1; + dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v2; + dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v3; + dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v1; + dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v2; + dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v1; + dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v2; + dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v3; + dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v1; + dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v2; + dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v3; + dummy_anim_ref = %ai_zombie_riotshield_loop_v1; + dummy_anim_ref = %ai_zombie_riotshield_breakthrough_v1; + dummy_anim_ref = %ai_zombie_crawl_riotshield_loop_v1; + dummy_anim_ref = %ai_zombie_crawl_riotshield_breakthrough_v1; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_transit_basic.asd"; + self.animtree = "zm_transit_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 3 ); + + switch ( randchar ) + { + case 0: + character\c_zom_zombie8_01::main(); + break; + case 1: + character\c_zom_zombie8_02::main(); + break; + case 2: + character\c_zom_zombie8_03::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_transit_basic" ); + character\c_zom_zombie8_01::precache(); + character\c_zom_zombie8_02::precache(); + character\c_zom_zombie8_03::precache(); +} diff --git a/ZM/Maps/Tranzit/aitype/zm_transit_basic_09.gsc b/ZM/Maps/Tranzit/aitype/zm_transit_basic_09.gsc new file mode 100644 index 0000000..ee597eb --- /dev/null +++ b/ZM/Maps/Tranzit/aitype/zm_transit_basic_09.gsc @@ -0,0 +1,501 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\c_zom_zombie9_01; +#include character\c_zom_zombie9_02; +#include character\c_zom_zombie9_03; + +#using_animtree("zm_transit_basic"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_idle_v1_delta; + dummy_anim_ref = %ai_zombie_idle_crawl_delta; + dummy_anim_ref = %ai_zombie_walk_v1; + dummy_anim_ref = %ai_zombie_walk_v2; + dummy_anim_ref = %ai_zombie_walk_v3; + dummy_anim_ref = %ai_zombie_walk_v4; + dummy_anim_ref = %ai_zombie_walk_v6; + dummy_anim_ref = %ai_zombie_walk_v7; + dummy_anim_ref = %ai_zombie_walk_v9; + dummy_anim_ref = %ai_zombie_crawl; + dummy_anim_ref = %ai_zombie_crawl_v1; + dummy_anim_ref = %ai_zombie_crawl_v2; + dummy_anim_ref = %ai_zombie_crawl_v3; + dummy_anim_ref = %ai_zombie_crawl_v4; + dummy_anim_ref = %ai_zombie_crawl_v5; + dummy_anim_ref = %ai_zombie_walk_fast_v1; + dummy_anim_ref = %ai_zombie_walk_fast_v2; + dummy_anim_ref = %ai_zombie_walk_fast_v3; + dummy_anim_ref = %ai_zombie_run_v2; + dummy_anim_ref = %ai_zombie_run_v4; + dummy_anim_ref = %ai_zombie_run_v3; + dummy_anim_ref = %ai_zombie_sprint_v1; + dummy_anim_ref = %ai_zombie_sprint_v2; + dummy_anim_ref = %ai_zombie_crawl_sprint; + dummy_anim_ref = %ai_zombie_crawl_sprint_1; + dummy_anim_ref = %ai_zombie_crawl_sprint_2; + dummy_anim_ref = %ai_zombie_fast_sprint_01; + dummy_anim_ref = %ai_zombie_fast_sprint_02; + dummy_anim_ref = %ai_zombie_walk_on_hands_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_b; + dummy_anim_ref = %ai_zombie_attack_v2; + dummy_anim_ref = %ai_zombie_attack_v4; + dummy_anim_ref = %ai_zombie_attack_v6; + dummy_anim_ref = %ai_zombie_attack_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v1; + dummy_anim_ref = %ai_zombie_attack_forward_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v1; + dummy_anim_ref = %ai_zombie_walk_attack_v2; + dummy_anim_ref = %ai_zombie_walk_attack_v3; + dummy_anim_ref = %ai_zombie_walk_attack_v4; + dummy_anim_ref = %ai_zombie_run_attack_v1; + dummy_anim_ref = %ai_zombie_run_attack_v2; + dummy_anim_ref = %ai_zombie_run_attack_v3; + dummy_anim_ref = %ai_zombie_attack_crawl; + dummy_anim_ref = %ai_zombie_attack_crawl_lunge; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; + dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; + dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; + dummy_anim_ref = %ai_zombie_spets_roll_a; + dummy_anim_ref = %ai_zombie_spets_roll_b; + dummy_anim_ref = %ai_zombie_spets_roll_c; + dummy_anim_ref = %ai_zombie_taunts_4; + dummy_anim_ref = %ai_zombie_taunts_7; + dummy_anim_ref = %ai_zombie_taunts_9; + dummy_anim_ref = %ai_zombie_taunts_5b; + dummy_anim_ref = %ai_zombie_taunts_5c; + dummy_anim_ref = %ai_zombie_taunts_5d; + dummy_anim_ref = %ai_zombie_taunts_5e; + dummy_anim_ref = %ai_zombie_taunts_5f; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; + dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; + dummy_anim_ref = %ai_zombie_inert_v4; + dummy_anim_ref = %ai_zombie_inert_v6; + dummy_anim_ref = %ai_zombie_inert_stagger_v1; + dummy_anim_ref = %ai_zombie_inert_stagger_v2; + dummy_anim_ref = %ai_zombie_inert_stagger_v3; + dummy_anim_ref = %ai_zombie_inert_stagger_v4; + dummy_anim_ref = %ai_zombie_inert_circle_v1; + dummy_anim_ref = %ai_zombie_inert_2_awake_v1; + dummy_anim_ref = %ai_zombie_inert_2_awake_v2; + dummy_anim_ref = %ai_zombie_inert_2_awake_v3; + dummy_anim_ref = %ai_zombie_inert_2_awake_v4; + dummy_anim_ref = %ai_zombie_inert_2_awake_v5; + dummy_anim_ref = %ai_zombie_inert_2_awake_v6; + dummy_anim_ref = %ai_zombie_inert_2_awake_v7; + dummy_anim_ref = %ai_zombie_inert_2_awake_v8; + dummy_anim_ref = %ai_zombie_crawl_inert_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_v5; + dummy_anim_ref = %ai_zombie_crawl_inert_v6; + dummy_anim_ref = %ai_zombie_crawl_inert_v7; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v1; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v2; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v3; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v4; + dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v5; + dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; + dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; + dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; + dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; + dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; + dummy_anim_ref = %ai_zombie_ceiling_attack_01; + dummy_anim_ref = %ai_zombie_ceiling_attack_02; + dummy_anim_ref = %ai_zombie_ceiling_emerge_01; + dummy_anim_ref = %ai_zombie_ceiling_death; + dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; + dummy_anim_ref = %ai_zombie_ceiling_fall_loop; + dummy_anim_ref = %ai_zombie_ceiling_fall_land; + dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; + dummy_anim_ref = %ch_dazed_a_death; + dummy_anim_ref = %ch_dazed_b_death; + dummy_anim_ref = %ch_dazed_c_death; + dummy_anim_ref = %ch_dazed_d_death; + dummy_anim_ref = %ai_zombie_crawl_death_v1; + dummy_anim_ref = %ai_zombie_crawl_death_v2; + dummy_anim_ref = %ai_zombie_traverse_v1; + dummy_anim_ref = %ai_zombie_traverse_v2; + dummy_anim_ref = %ai_zombie_traverse_v5; + dummy_anim_ref = %ai_zombie_traverse_v6; + dummy_anim_ref = %ai_zombie_traverse_v7; + dummy_anim_ref = %ai_zombie_traverse_crawl_v1; + dummy_anim_ref = %ai_zombie_traverse_v4; + dummy_anim_ref = %ai_zombie_climb_down_pothole; + dummy_anim_ref = %ai_zombie_crawl_climb_down_pothole; + dummy_anim_ref = %ai_zombie_climb_up_pothole; + dummy_anim_ref = %ai_zombie_crawl_climb_up_pothole; + dummy_anim_ref = %ai_zombie_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_stumble_48; + dummy_anim_ref = %ai_zombie_crawl_jump_down_48; + dummy_anim_ref = %ai_zombie_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_stumble_90; + dummy_anim_ref = %ai_zombie_crawl_jump_down_96; + dummy_anim_ref = %ai_zombie_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_stumble_127; + dummy_anim_ref = %ai_zombie_crawl_jump_down_127; + dummy_anim_ref = %ai_zombie_jump_down_190; + dummy_anim_ref = %ai_zombie_jump_down_stumble_190; + dummy_anim_ref = %ai_zombie_crawl_jump_down_189; + dummy_anim_ref = %ai_zombie_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_down_stumble_222; + dummy_anim_ref = %ai_zombie_crawl_jump_down_222; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; + dummy_anim_ref = %ai_zombie_jump_up_127; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_127; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_127; + dummy_anim_ref = %ai_zombie_jump_up_222; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_222; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_222; + dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; + dummy_anim_ref = %ai_zombie_crawl_jump_across_120; + dummy_anim_ref = %ai_zombie_jump_across_120; + dummy_anim_ref = %ai_zombie_diner_roof_hatch_jump_up; + dummy_anim_ref = %ai_zombie_crawl_diner_roof_hatch_jump_up; + dummy_anim_ref = %ai_zombie_traverse_diner_roof; + dummy_anim_ref = %ai_zombie_crawl_traverse_diner_roof; + dummy_anim_ref = %ai_zombie_traverse_garage_roll; + dummy_anim_ref = %ai_zombie_crawl_jump_up_diner_roof; + dummy_anim_ref = %ai_zombie_jump_up_diner_roof; + dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_from_stools; + dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_to_stools; + dummy_anim_ref = %ai_zombie_traverse_diner_counter_from_stools; + dummy_anim_ref = %ai_zombie_traverse_diner_counter_to_stools; + dummy_anim_ref = %ai_zombie_traverse_car; + dummy_anim_ref = %ai_zombie_crawl_traverse_car; + dummy_anim_ref = %ai_zombie_traverse_car_pass_to_driver_side; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_run; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_sprint; + dummy_anim_ref = %ai_zombie_traverse_car_sprint; + dummy_anim_ref = %ai_zombie_traverse_car_run; + dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side_sprint; + dummy_anim_ref = %ai_zombie_barricade_enter_l; + dummy_anim_ref = %ai_zombie_barricade_enter_r; + dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; + dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; + dummy_anim_ref = %ai_zombie_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; + dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; + dummy_anim_ref = %ai_zombie_walk_bus_v1; + dummy_anim_ref = %ai_zombie_walk_bus_v2; + dummy_anim_ref = %ai_zombie_walk_bus_v3; + dummy_anim_ref = %ai_zombie_walk_bus_v4; + dummy_anim_ref = %ai_zombie_bus_jump_door; + dummy_anim_ref = %ai_zombie_bus_jump_door_exit; + dummy_anim_ref = %ai_zombie_bus_jump_window_to_l; + dummy_anim_ref = %ai_zombie_bus_jump_window_to_r; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_l; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_r; + dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_l; + dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_r; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_l; + dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_r; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1_fast; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1; + dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1_fast; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1_fast; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1; + dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1_fast; + dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_v1; + dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_fast_v1; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_pull; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_grab; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_hold; + dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_pull; + dummy_anim_ref = %ai_zombie_bus_hatch_tear; + dummy_anim_ref = %ai_zombie_bus_hatch_tear_fromback; + dummy_anim_ref = %ai_zombie_bus_hatch_jump_down; + dummy_anim_ref = %ai_zombie_bus_window_idle_l; + dummy_anim_ref = %ai_zombie_bus_window_idle_r; + dummy_anim_ref = %ai_zombie_bus_front_window_idle_l; + dummy_anim_ref = %ai_zombie_bus_front_window_idle_r; + dummy_anim_ref = %ai_zombie_bus_window_attack_l; + dummy_anim_ref = %ai_zombie_bus_window_attack_r; + dummy_anim_ref = %ai_zombie_bus_front_window_attack_l; + dummy_anim_ref = %ai_zombie_bus_front_window_attack_r; + dummy_anim_ref = %ai_zombie_bus_window_climbup_from_l; + dummy_anim_ref = %ai_zombie_bus_window_climbup_from_r; + dummy_anim_ref = %ai_zombie_bus_window_dismount_l; + dummy_anim_ref = %ai_zombie_bus_window_dismount_r; + dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_l; + dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_r; + dummy_anim_ref = %ai_zombie_bus_front_window_dismount_l; + dummy_anim_ref = %ai_zombie_bus_front_window_dismount_r; + dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_l; + dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_r; + dummy_anim_ref = %ai_zombie_bus_window_exit_back_l; + dummy_anim_ref = %ai_zombie_bus_window_exit_back_r; + dummy_anim_ref = %ai_zombie_bus_window_exit_front; + dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_l; + dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_r; + dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_front; + dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_b; + dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_f; + dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_b; + dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_f; + dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_b; + dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_f; + dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_b; + dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_f; + dummy_anim_ref = %ai_zombie_bus_front_window_climbup_from_inside; + dummy_anim_ref = %ai_zombie_bus_rear_window_climbup_from_inside; + dummy_anim_ref = %ai_zombie_sprint_v6; + dummy_anim_ref = %ai_zombie_sprint_v7; + dummy_anim_ref = %ai_zombie_sprint_v8; + dummy_anim_ref = %ai_zombie_sprint_v9; + dummy_anim_ref = %ai_zombie_sprint_v10; + dummy_anim_ref = %ai_zombie_sprint_v11; + dummy_anim_ref = %ai_zombie_sprint_v12; + dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v1; + dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v2; + dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v3; + dummy_anim_ref = %ai_zombie_jetgun_walk_v1; + dummy_anim_ref = %ai_zombie_jetgun_walk_v2; + dummy_anim_ref = %ai_zombie_jetgun_walk_v3; + dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v1; + dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v2; + dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v3; + dummy_anim_ref = %ai_zombie_jetgun_death_v1; + dummy_anim_ref = %ai_zombie_jetgun_death_v2; + dummy_anim_ref = %ai_zombie_jetgun_death_v3; + dummy_anim_ref = %ai_zombie_jetgun_sprint_v1; + dummy_anim_ref = %ai_zombie_jetgun_sprint_v2; + dummy_anim_ref = %ai_zombie_jetgun_sprint_v3; + dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v1; + dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v2; + dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v3; + dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v1; + dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v2; + dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v1; + dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v2; + dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v3; + dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v1; + dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v2; + dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v3; + dummy_anim_ref = %ai_zombie_riotshield_loop_v1; + dummy_anim_ref = %ai_zombie_riotshield_breakthrough_v1; + dummy_anim_ref = %ai_zombie_crawl_riotshield_loop_v1; + dummy_anim_ref = %ai_zombie_crawl_riotshield_breakthrough_v1; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_transit_basic.asd"; + self.animtree = "zm_transit_basic.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 60; + self.demolockonviewheightoffset2 = 30; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = -15; + self.demolockonviewpitchmin2 = -5; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + randchar = codescripts\character::get_random_character( 3 ); + + switch ( randchar ) + { + case 0: + character\c_zom_zombie9_01::main(); + break; + case 1: + character\c_zom_zombie9_02::main(); + break; + case 2: + character\c_zom_zombie9_03::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_transit_basic" ); + character\c_zom_zombie9_01::precache(); + character\c_zom_zombie9_02::precache(); + character\c_zom_zombie9_03::precache(); +} diff --git a/ZM/Maps/Tranzit/aitype/zm_transit_screecher.gsc b/ZM/Maps/Tranzit/aitype/zm_transit_screecher.gsc new file mode 100644 index 0000000..fe57977 --- /dev/null +++ b/ZM/Maps/Tranzit/aitype/zm_transit_screecher.gsc @@ -0,0 +1,78 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include character\c_zom_screecher; + +#using_animtree("zm_transit_screecher"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %ai_zombie_screecher_burrow_into_ground; + dummy_anim_ref = %ai_zombie_screecher_climb_down_pothole; + dummy_anim_ref = %ai_zombie_screecher_climb_up_pothole; + dummy_anim_ref = %ai_zombie_screecher_cower_v1; + dummy_anim_ref = %ai_zombie_screecher_death_v1; + dummy_anim_ref = %ai_zombie_screecher_headpull; + dummy_anim_ref = %ai_zombie_screecher_headpull_fail; + dummy_anim_ref = %ai_zombie_screecher_headpull_success; + dummy_anim_ref = %ai_zombie_screecher_jump_land_fail; + dummy_anim_ref = %ai_zombie_screecher_jump_land_success_fromback; + dummy_anim_ref = %ai_zombie_screecher_jump_land_success_fromfront; + dummy_anim_ref = %ai_zombie_screecher_jump_loop; + dummy_anim_ref = %ai_zombie_screecher_jump_up; + dummy_anim_ref = %ai_zombie_screecher_run; + dummy_anim_ref = %ai_zombie_screecher_run_bounce; + dummy_anim_ref = %ai_zombie_screecher_run_hop; + dummy_anim_ref = %ai_zombie_screecher_run_zigzag; + dummy_anim_ref = %ai_zombie_screecher_tunnel_traversal; + dummy_anim_ref = %ai_zombie_screecher_diner_roof_hatch_jump_up; + dummy_anim_ref = %ai_zombie_screecher_traverse_car; + dummy_anim_ref = %ai_zombie_screecher_traverse_car_pass_to_driver_side; + dummy_anim_ref = %ai_zombie_screecher_traverse_ground_v1; + dummy_anim_ref = %ai_zombie_screecher_jump_down_96; + dummy_anim_ref = %ai_zombie_screecher_jump_down_127; + dummy_anim_ref = %ai_zombie_screecher_jump_up_127; +} + +main() +{ + self.accuracy = 1; + self.animstatedef = "zm_transit_screecher.asd"; + self.animtree = "zm_transit_screecher.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 18; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie"; + self.weapon = ""; + self setengagementmindist( 0.0, 0.0 ); + self setengagementmaxdist( 100.0, 300.0 ); + character\c_zom_screecher::main(); + self setcharacterindex( 0 ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_transit_screecher" ); + character\c_zom_screecher::precache(); +} diff --git a/ZM/Maps/Tranzit/aitype/zombie_dog.gsc b/ZM/Maps/Tranzit/aitype/zombie_dog.gsc new file mode 100644 index 0000000..35faf8b --- /dev/null +++ b/ZM/Maps/Tranzit/aitype/zombie_dog.gsc @@ -0,0 +1,99 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include character\character_sp_zombie_dog; + +#using_animtree("zm_transit_dog"); + +reference_anims_from_animtree() +{ + dummy_anim_ref = %zombie_dog_idle; + dummy_anim_ref = %zombie_dog_attackidle_growl; + dummy_anim_ref = %zombie_dog_attackidle; + dummy_anim_ref = %zombie_dog_attackidle_bark; + dummy_anim_ref = %zombie_dog_run_stop; + dummy_anim_ref = %zombie_dog_run; + dummy_anim_ref = %zombie_dog_trot; + dummy_anim_ref = %zombie_dog_run_start; + dummy_anim_ref = %zombie_dog_turn_90_left; + dummy_anim_ref = %zombie_dog_turn_90_right; + dummy_anim_ref = %zombie_dog_turn_180_left; + dummy_anim_ref = %zombie_dog_turn_180_right; + dummy_anim_ref = %zombie_dog_run_turn_90_left; + dummy_anim_ref = %zombie_dog_run_turn_90_right; + dummy_anim_ref = %zombie_dog_run_turn_180_left; + dummy_anim_ref = %zombie_dog_run_turn_180_right; + dummy_anim_ref = %zombie_dog_death_front; + dummy_anim_ref = %zombie_dog_death_hit_back; + dummy_anim_ref = %zombie_dog_death_hit_left; + dummy_anim_ref = %zombie_dog_death_hit_right; + dummy_anim_ref = %zombie_dog_run_attack; + dummy_anim_ref = %zombie_dog_run_attack_low; + dummy_anim_ref = %ai_zombie_dog_traverse_car; + dummy_anim_ref = %ai_zombie_dog_traverse_car_pass_to_driver; + dummy_anim_ref = %zombie_dog_traverse_down_40; + dummy_anim_ref = %zombie_dog_traverse_down_96; + dummy_anim_ref = %zombie_dog_traverse_down_126; + dummy_anim_ref = %zombie_dog_traverse_down_190; + dummy_anim_ref = %zombie_dog_traverse_up_40; + dummy_anim_ref = %zombie_dog_traverse_up_80; + dummy_anim_ref = %ai_zombie_dog_jump_across_120; + dummy_anim_ref = %zombie_dog_traverse_down_127; + dummy_anim_ref = %zombie_dog_traverse_up_127; +} + +main() +{ + self.accuracy = 0.2; + self.animstatedef = "zm_transit_dog.asd"; + self.animtree = "zm_transit_dog.atr"; + self.csvinclude = ""; + self.demolockonhighlightdistance = 100; + self.demolockonviewheightoffset1 = 8; + self.demolockonviewheightoffset2 = 8; + self.demolockonviewpitchmax1 = 60; + self.demolockonviewpitchmax2 = 60; + self.demolockonviewpitchmin1 = 0; + self.demolockonviewpitchmin2 = 0; + self.footstepfxtable = ""; + self.footstepprepend = ""; + self.footstepscriptcallback = 0; + self.grenadeammo = 0; + self.grenadeweapon = ""; + self.health = 200; + self.precachescript = ""; + self.secondaryweapon = ""; + self.sidearm = ""; + self.subclass = "regular"; + self.team = "axis"; + self.type = "zombie_dog"; + self.weapon = ""; + self setengagementmindist( 256.0, 0.0 ); + self setengagementmaxdist( 768.0, 1024.0 ); + randchar = codescripts\character::get_random_character( 2 ); + + switch ( randchar ) + { + case 0: + character\character_sp_zombie_dog::main(); + break; + case 1: + character\character_sp_zombie_dog::main(); + break; + } + + self setcharacterindex( randchar ); +} + +spawner() +{ + self setspawnerteam( "axis" ); +} + +precache( ai_index ) +{ + level thread reference_anims_from_animtree(); + precacheanimstatedef( ai_index, #animtree, "zm_transit_dog" ); + character\character_sp_zombie_dog::precache(); + character\character_sp_zombie_dog::precache(); +} diff --git a/ZM/Maps/Tranzit/character/c_transit_player_engineer.gsc b/ZM/Maps/Tranzit/character/c_transit_player_engineer.gsc new file mode 100644 index 0000000..51d3866 --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_transit_player_engineer.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_player_engineer_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_player_engineer_fb" ); +} diff --git a/ZM/Maps/Tranzit/character/c_transit_player_farmgirl.gsc b/ZM/Maps/Tranzit/character/c_transit_player_farmgirl.gsc new file mode 100644 index 0000000..b9268ab --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_transit_player_farmgirl.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_player_farmgirl_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_player_farmgirl_fb" ); +} diff --git a/ZM/Maps/Tranzit/character/c_transit_player_oldman.gsc b/ZM/Maps/Tranzit/character/c_transit_player_oldman.gsc new file mode 100644 index 0000000..97f93a1 --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_transit_player_oldman.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_player_oldman_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_player_oldman_fb" ); +} diff --git a/ZM/Maps/Tranzit/character/c_transit_player_reporter.gsc b/ZM/Maps/Tranzit/character/c_transit_player_reporter.gsc new file mode 100644 index 0000000..1645893 --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_transit_player_reporter.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_player_reporter_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_player_reporter_fb" ); +} diff --git a/ZM/Maps/Tranzit/character/c_zom_avogadro.gsc b/ZM/Maps/Tranzit/character/c_zom_avogadro.gsc new file mode 100644 index 0000000..fea9e0e --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_zom_avogadro.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_avagadro_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_avagadro_fb" ); +} diff --git a/ZM/Maps/Tranzit/character/c_zom_screecher.gsc b/ZM/Maps/Tranzit/character/c_zom_screecher.gsc new file mode 100644 index 0000000..7af7c5e --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_zom_screecher.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "c_zom_screecher_fb" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "c_zom_screecher_fb" ); +} diff --git a/ZM/Maps/Tranzit/character/c_zom_zombie1_01.gsc b/ZM/Maps/Tranzit/character/c_zom_zombie1_01.gsc new file mode 100644 index 0000000..96cf0c1 --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_zom_zombie1_01.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_head_als; + +main() +{ + self setmodel( "c_zom_zombie1_body01" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie1_body01_g_upclean"; + self.torsodmg2 = "c_zom_zombie1_body01_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie1_body01_g_larmoff"; + self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; + self.legdmg1 = "c_zom_zombie1_body01_g_lowclean"; + self.legdmg2 = "c_zom_zombie1_body01_g_rlegoff"; + self.legdmg3 = "c_zom_zombie1_body01_g_llegoff"; + self.legdmg4 = "c_zom_zombie1_body01_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie1_body01" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_head_als::main() ); + precachemodel( "c_zom_zombie1_body01_g_upclean" ); + precachemodel( "c_zom_zombie1_body01_g_rarmoff" ); + precachemodel( "c_zom_zombie1_body01_g_larmoff" ); + precachemodel( "c_zom_zombie2_body01_g_behead" ); + precachemodel( "c_zom_zombie1_body01_g_lowclean" ); + precachemodel( "c_zom_zombie1_body01_g_rlegoff" ); + precachemodel( "c_zom_zombie1_body01_g_llegoff" ); + precachemodel( "c_zom_zombie1_body01_g_legsoff" ); + precachemodel( "c_zom_zombie_g_rarmspawn" ); + precachemodel( "c_zom_zombie_g_larmspawn" ); + precachemodel( "c_zom_zombie_g_rlegspawn" ); + precachemodel( "c_zom_zombie_g_llegspawn" ); +} diff --git a/ZM/Maps/Tranzit/character/c_zom_zombie1_02.gsc b/ZM/Maps/Tranzit/character/c_zom_zombie1_02.gsc new file mode 100644 index 0000000..b7bc8d0 --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_zom_zombie1_02.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_head_als; + +main() +{ + self setmodel( "c_zom_zombie1_body02" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie1_body02_g_upclean"; + self.torsodmg2 = "c_zom_zombie1_body02_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie1_body02_g_larmoff"; + self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; + self.legdmg1 = "c_zom_zombie1_body02_g_lowclean"; + self.legdmg2 = "c_zom_zombie1_body02_g_rlegoff"; + self.legdmg3 = "c_zom_zombie1_body02_g_llegoff"; + self.legdmg4 = "c_zom_zombie1_body02_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie1_body02" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_head_als::main() ); + precachemodel( "c_zom_zombie1_body02_g_upclean" ); + precachemodel( "c_zom_zombie1_body02_g_rarmoff" ); + precachemodel( "c_zom_zombie1_body02_g_larmoff" ); + precachemodel( "c_zom_zombie2_body01_g_behead" ); + precachemodel( "c_zom_zombie1_body02_g_lowclean" ); + precachemodel( "c_zom_zombie1_body02_g_rlegoff" ); + precachemodel( "c_zom_zombie1_body02_g_llegoff" ); + precachemodel( "c_zom_zombie1_body02_g_legsoff" ); + precachemodel( "c_zom_zombie_g_rarmspawn" ); + precachemodel( "c_zom_zombie_g_larmspawn" ); + precachemodel( "c_zom_zombie_g_rlegspawn" ); + precachemodel( "c_zom_zombie_g_llegspawn" ); +} diff --git a/ZM/Maps/Tranzit/character/c_zom_zombie2_01.gsc b/ZM/Maps/Tranzit/character/c_zom_zombie2_01.gsc new file mode 100644 index 0000000..e51f49e --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_zom_zombie2_01.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_head_als; + +main() +{ + self setmodel( "c_zom_zombie2_body01" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie2_body01_g_upclean"; + self.torsodmg2 = "c_zom_zombie2_body01_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie2_body01_g_larmoff"; + self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; + self.legdmg1 = "c_zom_zombie2_body01_g_lowclean"; + self.legdmg2 = "c_zom_zombie2_body01_g_rlegoff"; + self.legdmg3 = "c_zom_zombie2_body01_g_llegoff"; + self.legdmg4 = "c_zom_zombie2_body01_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie2_body01" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_head_als::main() ); + precachemodel( "c_zom_zombie2_body01_g_upclean" ); + precachemodel( "c_zom_zombie2_body01_g_rarmoff" ); + precachemodel( "c_zom_zombie2_body01_g_larmoff" ); + precachemodel( "c_zom_zombie2_body01_g_behead" ); + precachemodel( "c_zom_zombie2_body01_g_lowclean" ); + precachemodel( "c_zom_zombie2_body01_g_rlegoff" ); + precachemodel( "c_zom_zombie2_body01_g_llegoff" ); + precachemodel( "c_zom_zombie2_body01_g_legsoff" ); + precachemodel( "c_zom_zombie_g_rarmspawn" ); + precachemodel( "c_zom_zombie_g_larmspawn" ); + precachemodel( "c_zom_zombie_g_rlegspawn" ); + precachemodel( "c_zom_zombie_g_llegspawn" ); +} diff --git a/ZM/Maps/Tranzit/character/c_zom_zombie2_02.gsc b/ZM/Maps/Tranzit/character/c_zom_zombie2_02.gsc new file mode 100644 index 0000000..716b494 --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_zom_zombie2_02.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_head_als; + +main() +{ + self setmodel( "c_zom_zombie2_body02" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie2_body02_g_upclean"; + self.torsodmg2 = "c_zom_zombie2_body02_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie2_body02_g_larmoff"; + self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; + self.legdmg1 = "c_zom_zombie2_body01_g_lowclean"; + self.legdmg2 = "c_zom_zombie2_body01_g_rlegoff"; + self.legdmg3 = "c_zom_zombie2_body01_g_llegoff"; + self.legdmg4 = "c_zom_zombie2_body01_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie2_body02" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_head_als::main() ); + precachemodel( "c_zom_zombie2_body02_g_upclean" ); + precachemodel( "c_zom_zombie2_body02_g_rarmoff" ); + precachemodel( "c_zom_zombie2_body02_g_larmoff" ); + precachemodel( "c_zom_zombie2_body01_g_behead" ); + precachemodel( "c_zom_zombie2_body01_g_lowclean" ); + precachemodel( "c_zom_zombie2_body01_g_rlegoff" ); + precachemodel( "c_zom_zombie2_body01_g_llegoff" ); + precachemodel( "c_zom_zombie2_body01_g_legsoff" ); + precachemodel( "c_zom_zombie_g_rarmspawn" ); + precachemodel( "c_zom_zombie_g_larmspawn" ); + precachemodel( "c_zom_zombie_g_rlegspawn" ); + precachemodel( "c_zom_zombie_g_llegspawn" ); +} diff --git a/ZM/Maps/Tranzit/character/c_zom_zombie2_03.gsc b/ZM/Maps/Tranzit/character/c_zom_zombie2_03.gsc new file mode 100644 index 0000000..60affef --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_zom_zombie2_03.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_head_als; + +main() +{ + self setmodel( "c_zom_zombie2_body03" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie2_body03_g_upclean"; + self.torsodmg2 = "c_zom_zombie2_body03_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie2_body03_g_larmoff"; + self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; + self.legdmg1 = "c_zom_zombie2_body01_g_lowclean"; + self.legdmg2 = "c_zom_zombie2_body01_g_rlegoff"; + self.legdmg3 = "c_zom_zombie2_body01_g_llegoff"; + self.legdmg4 = "c_zom_zombie2_body01_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie2_body03" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_head_als::main() ); + precachemodel( "c_zom_zombie2_body03_g_upclean" ); + precachemodel( "c_zom_zombie2_body03_g_rarmoff" ); + precachemodel( "c_zom_zombie2_body03_g_larmoff" ); + precachemodel( "c_zom_zombie2_body01_g_behead" ); + precachemodel( "c_zom_zombie2_body01_g_lowclean" ); + precachemodel( "c_zom_zombie2_body01_g_rlegoff" ); + precachemodel( "c_zom_zombie2_body01_g_llegoff" ); + precachemodel( "c_zom_zombie2_body01_g_legsoff" ); + precachemodel( "c_zom_zombie_g_rarmspawn" ); + precachemodel( "c_zom_zombie_g_larmspawn" ); + precachemodel( "c_zom_zombie_g_rlegspawn" ); + precachemodel( "c_zom_zombie_g_llegspawn" ); +} diff --git a/ZM/Maps/Tranzit/character/c_zom_zombie3_01.gsc b/ZM/Maps/Tranzit/character/c_zom_zombie3_01.gsc new file mode 100644 index 0000000..b2b7168 --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_zom_zombie3_01.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_head_als; + +main() +{ + self setmodel( "c_zom_zombie3_body01" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie3_body01_g_upclean"; + self.torsodmg2 = "c_zom_zombie3_body01_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie3_body01_g_larmoff"; + self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; + self.legdmg1 = "c_zom_zombie3_body01_g_lowclean"; + self.legdmg2 = "c_zom_zombie3_body01_g_rlegoff"; + self.legdmg3 = "c_zom_zombie3_body01_g_llegoff"; + self.legdmg4 = "c_zom_zombie3_body01_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie3_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie3_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie3_body01" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_head_als::main() ); + precachemodel( "c_zom_zombie3_body01_g_upclean" ); + precachemodel( "c_zom_zombie3_body01_g_rarmoff" ); + precachemodel( "c_zom_zombie3_body01_g_larmoff" ); + precachemodel( "c_zom_zombie2_body01_g_behead" ); + precachemodel( "c_zom_zombie3_body01_g_lowclean" ); + precachemodel( "c_zom_zombie3_body01_g_rlegoff" ); + precachemodel( "c_zom_zombie3_body01_g_llegoff" ); + precachemodel( "c_zom_zombie3_body01_g_legsoff" ); + precachemodel( "c_zom_zombie_g_rarmspawn" ); + precachemodel( "c_zom_zombie_g_larmspawn" ); + precachemodel( "c_zom_zombie3_g_rlegspawn" ); + precachemodel( "c_zom_zombie3_g_llegspawn" ); +} diff --git a/ZM/Maps/Tranzit/character/c_zom_zombie3_02.gsc b/ZM/Maps/Tranzit/character/c_zom_zombie3_02.gsc new file mode 100644 index 0000000..6d8cffd --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_zom_zombie3_02.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_head_als; + +main() +{ + self setmodel( "c_zom_zombie3_body02" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie3_body02_g_upclean"; + self.torsodmg2 = "c_zom_zombie3_body02_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie3_body02_g_larmoff"; + self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; + self.legdmg1 = "c_zom_zombie3_body02_g_lowclean"; + self.legdmg2 = "c_zom_zombie3_body02_g_rlegoff"; + self.legdmg3 = "c_zom_zombie3_body02_g_llegoff"; + self.legdmg4 = "c_zom_zombie3_body02_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie3_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie3_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie3_body02" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_head_als::main() ); + precachemodel( "c_zom_zombie3_body02_g_upclean" ); + precachemodel( "c_zom_zombie3_body02_g_rarmoff" ); + precachemodel( "c_zom_zombie3_body02_g_larmoff" ); + precachemodel( "c_zom_zombie2_body01_g_behead" ); + precachemodel( "c_zom_zombie3_body02_g_lowclean" ); + precachemodel( "c_zom_zombie3_body02_g_rlegoff" ); + precachemodel( "c_zom_zombie3_body02_g_llegoff" ); + precachemodel( "c_zom_zombie3_body02_g_legsoff" ); + precachemodel( "c_zom_zombie_g_rarmspawn" ); + precachemodel( "c_zom_zombie_g_larmspawn" ); + precachemodel( "c_zom_zombie3_g_rlegspawn" ); + precachemodel( "c_zom_zombie3_g_llegspawn" ); +} diff --git a/ZM/Maps/Tranzit/character/c_zom_zombie3_03.gsc b/ZM/Maps/Tranzit/character/c_zom_zombie3_03.gsc new file mode 100644 index 0000000..8a74745 --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_zom_zombie3_03.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_head_als; + +main() +{ + self setmodel( "c_zom_zombie3_body03" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie3_body03_g_upclean"; + self.torsodmg2 = "c_zom_zombie3_body03_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie3_body03_g_larmoff"; + self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; + self.legdmg1 = "c_zom_zombie3_body03_g_lowclean"; + self.legdmg2 = "c_zom_zombie3_body03_g_rlegoff"; + self.legdmg3 = "c_zom_zombie3_body03_g_llegoff"; + self.legdmg4 = "c_zom_zombie3_body03_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie3_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie3_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie3_body03" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_head_als::main() ); + precachemodel( "c_zom_zombie3_body03_g_upclean" ); + precachemodel( "c_zom_zombie3_body03_g_rarmoff" ); + precachemodel( "c_zom_zombie3_body03_g_larmoff" ); + precachemodel( "c_zom_zombie2_body01_g_behead" ); + precachemodel( "c_zom_zombie3_body03_g_lowclean" ); + precachemodel( "c_zom_zombie3_body03_g_rlegoff" ); + precachemodel( "c_zom_zombie3_body03_g_llegoff" ); + precachemodel( "c_zom_zombie3_body03_g_legsoff" ); + precachemodel( "c_zom_zombie_g_rarmspawn" ); + precachemodel( "c_zom_zombie_g_larmspawn" ); + precachemodel( "c_zom_zombie3_g_rlegspawn" ); + precachemodel( "c_zom_zombie3_g_llegspawn" ); +} diff --git a/ZM/Maps/Tranzit/character/c_zom_zombie3_04.gsc b/ZM/Maps/Tranzit/character/c_zom_zombie3_04.gsc new file mode 100644 index 0000000..7aa8e9c --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_zom_zombie3_04.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_head_als; + +main() +{ + self setmodel( "c_zom_zombie3_body04" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie3_body04_g_upclean"; + self.torsodmg2 = "c_zom_zombie3_body04_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie3_body04_g_larmoff"; + self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; + self.legdmg1 = "c_zom_zombie3_body04_g_lowclean"; + self.legdmg2 = "c_zom_zombie3_body04_g_rlegoff"; + self.legdmg3 = "c_zom_zombie3_body04_g_llegoff"; + self.legdmg4 = "c_zom_zombie3_body04_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie3_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie3_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie3_body04" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_head_als::main() ); + precachemodel( "c_zom_zombie3_body04_g_upclean" ); + precachemodel( "c_zom_zombie3_body04_g_rarmoff" ); + precachemodel( "c_zom_zombie3_body04_g_larmoff" ); + precachemodel( "c_zom_zombie2_body01_g_behead" ); + precachemodel( "c_zom_zombie3_body04_g_lowclean" ); + precachemodel( "c_zom_zombie3_body04_g_rlegoff" ); + precachemodel( "c_zom_zombie3_body04_g_llegoff" ); + precachemodel( "c_zom_zombie3_body04_g_legsoff" ); + precachemodel( "c_zom_zombie_g_rarmspawn" ); + precachemodel( "c_zom_zombie_g_larmspawn" ); + precachemodel( "c_zom_zombie3_g_rlegspawn" ); + precachemodel( "c_zom_zombie3_g_llegspawn" ); +} diff --git a/ZM/Maps/Tranzit/character/c_zom_zombie3_05.gsc b/ZM/Maps/Tranzit/character/c_zom_zombie3_05.gsc new file mode 100644 index 0000000..7f54962 --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_zom_zombie3_05.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_head_als; + +main() +{ + self setmodel( "c_zom_zombie3_body05" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie3_body05_g_upclean"; + self.torsodmg2 = "c_zom_zombie3_body05_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie3_body05_g_larmoff"; + self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; + self.legdmg1 = "c_zom_zombie3_body05_g_lowclean"; + self.legdmg2 = "c_zom_zombie3_body05_g_rlegoff"; + self.legdmg3 = "c_zom_zombie3_body05_g_llegoff"; + self.legdmg4 = "c_zom_zombie3_body05_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie3_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie3_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie3_body05" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_head_als::main() ); + precachemodel( "c_zom_zombie3_body05_g_upclean" ); + precachemodel( "c_zom_zombie3_body05_g_rarmoff" ); + precachemodel( "c_zom_zombie3_body05_g_larmoff" ); + precachemodel( "c_zom_zombie2_body01_g_behead" ); + precachemodel( "c_zom_zombie3_body05_g_lowclean" ); + precachemodel( "c_zom_zombie3_body05_g_rlegoff" ); + precachemodel( "c_zom_zombie3_body05_g_llegoff" ); + precachemodel( "c_zom_zombie3_body05_g_legsoff" ); + precachemodel( "c_zom_zombie_g_rarmspawn" ); + precachemodel( "c_zom_zombie_g_larmspawn" ); + precachemodel( "c_zom_zombie3_g_rlegspawn" ); + precachemodel( "c_zom_zombie3_g_llegspawn" ); +} diff --git a/ZM/Maps/Tranzit/character/c_zom_zombie5_01.gsc b/ZM/Maps/Tranzit/character/c_zom_zombie5_01.gsc new file mode 100644 index 0000000..e3f0248 --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_zom_zombie5_01.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_head_als; + +main() +{ + self setmodel( "c_zom_zombie5_body01" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie5_body01_g_upclean"; + self.torsodmg2 = "c_zom_zombie5_body01_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie5_body01_g_larmoff"; + self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; + self.legdmg1 = "c_zom_zombie5_body01_g_lowclean"; + self.legdmg2 = "c_zom_zombie5_body01_g_rlegoff"; + self.legdmg3 = "c_zom_zombie5_body01_g_llegoff"; + self.legdmg4 = "c_zom_zombie5_body01_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie5_body01" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_head_als::main() ); + precachemodel( "c_zom_zombie5_body01_g_upclean" ); + precachemodel( "c_zom_zombie5_body01_g_rarmoff" ); + precachemodel( "c_zom_zombie5_body01_g_larmoff" ); + precachemodel( "c_zom_zombie2_body01_g_behead" ); + precachemodel( "c_zom_zombie5_body01_g_lowclean" ); + precachemodel( "c_zom_zombie5_body01_g_rlegoff" ); + precachemodel( "c_zom_zombie5_body01_g_llegoff" ); + precachemodel( "c_zom_zombie5_body01_g_legsoff" ); + precachemodel( "c_zom_zombie_g_rarmspawn" ); + precachemodel( "c_zom_zombie_g_larmspawn" ); + precachemodel( "c_zom_zombie_g_rlegspawn" ); + precachemodel( "c_zom_zombie_g_llegspawn" ); +} diff --git a/ZM/Maps/Tranzit/character/c_zom_zombie5_02.gsc b/ZM/Maps/Tranzit/character/c_zom_zombie5_02.gsc new file mode 100644 index 0000000..5ad8c76 --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_zom_zombie5_02.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_head_als; + +main() +{ + self setmodel( "c_zom_zombie5_body02" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie5_body02_g_upclean"; + self.torsodmg2 = "c_zom_zombie5_body02_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie5_body02_g_larmoff"; + self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; + self.legdmg1 = "c_zom_zombie5_body02_g_lowclean"; + self.legdmg2 = "c_zom_zombie5_body02_g_rlegoff"; + self.legdmg3 = "c_zom_zombie5_body02_g_llegoff"; + self.legdmg4 = "c_zom_zombie5_body02_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie5_body02" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_head_als::main() ); + precachemodel( "c_zom_zombie5_body02_g_upclean" ); + precachemodel( "c_zom_zombie5_body02_g_rarmoff" ); + precachemodel( "c_zom_zombie5_body02_g_larmoff" ); + precachemodel( "c_zom_zombie2_body01_g_behead" ); + precachemodel( "c_zom_zombie5_body02_g_lowclean" ); + precachemodel( "c_zom_zombie5_body02_g_rlegoff" ); + precachemodel( "c_zom_zombie5_body02_g_llegoff" ); + precachemodel( "c_zom_zombie5_body02_g_legsoff" ); + precachemodel( "c_zom_zombie_g_rarmspawn" ); + precachemodel( "c_zom_zombie_g_larmspawn" ); + precachemodel( "c_zom_zombie_g_rlegspawn" ); + precachemodel( "c_zom_zombie_g_llegspawn" ); +} diff --git a/ZM/Maps/Tranzit/character/c_zom_zombie5_03.gsc b/ZM/Maps/Tranzit/character/c_zom_zombie5_03.gsc new file mode 100644 index 0000000..f80c8d5 --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_zom_zombie5_03.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_head_als; + +main() +{ + self setmodel( "c_zom_zombie5_body03" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie5_body03_g_upclean"; + self.torsodmg2 = "c_zom_zombie5_body03_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie5_body03_g_larmoff"; + self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; + self.legdmg1 = "c_zom_zombie5_body03_g_lowclean"; + self.legdmg2 = "c_zom_zombie5_body03_g_rlegoff"; + self.legdmg3 = "c_zom_zombie5_body03_g_llegoff"; + self.legdmg4 = "c_zom_zombie5_body03_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie5_body03" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_head_als::main() ); + precachemodel( "c_zom_zombie5_body03_g_upclean" ); + precachemodel( "c_zom_zombie5_body03_g_rarmoff" ); + precachemodel( "c_zom_zombie5_body03_g_larmoff" ); + precachemodel( "c_zom_zombie2_body01_g_behead" ); + precachemodel( "c_zom_zombie5_body03_g_lowclean" ); + precachemodel( "c_zom_zombie5_body03_g_rlegoff" ); + precachemodel( "c_zom_zombie5_body03_g_llegoff" ); + precachemodel( "c_zom_zombie5_body03_g_legsoff" ); + precachemodel( "c_zom_zombie_g_rarmspawn" ); + precachemodel( "c_zom_zombie_g_larmspawn" ); + precachemodel( "c_zom_zombie_g_rlegspawn" ); + precachemodel( "c_zom_zombie_g_llegspawn" ); +} diff --git a/ZM/Maps/Tranzit/character/c_zom_zombie8_01.gsc b/ZM/Maps/Tranzit/character/c_zom_zombie8_01.gsc new file mode 100644 index 0000000..f3c3c85 --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_zom_zombie8_01.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_female_head_als; + +main() +{ + self setmodel( "c_zom_zombie8_body01" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_female_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie8_body01_g_upclean"; + self.torsodmg2 = "c_zom_zombie8_body01_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie8_body01_g_larmoff"; + self.torsodmg5 = "c_zom_zombie8_body01_g_behead"; + self.legdmg1 = "c_zom_zombie8_body01_g_lowclean"; + self.legdmg2 = "c_zom_zombie8_body01_g_rlegoff"; + self.legdmg3 = "c_zom_zombie8_body01_g_llegoff"; + self.legdmg4 = "c_zom_zombie8_body01_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie8_body01" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_female_head_als::main() ); + precachemodel( "c_zom_zombie8_body01_g_upclean" ); + precachemodel( "c_zom_zombie8_body01_g_rarmoff" ); + precachemodel( "c_zom_zombie8_body01_g_larmoff" ); + precachemodel( "c_zom_zombie8_body01_g_behead" ); + precachemodel( "c_zom_zombie8_body01_g_lowclean" ); + precachemodel( "c_zom_zombie8_body01_g_rlegoff" ); + precachemodel( "c_zom_zombie8_body01_g_llegoff" ); + precachemodel( "c_zom_zombie8_body01_g_legsoff" ); + precachemodel( "c_zom_zombie_g_rarmspawn" ); + precachemodel( "c_zom_zombie_g_larmspawn" ); + precachemodel( "c_zom_zombie_g_rlegspawn" ); + precachemodel( "c_zom_zombie_g_llegspawn" ); +} diff --git a/ZM/Maps/Tranzit/character/c_zom_zombie8_02.gsc b/ZM/Maps/Tranzit/character/c_zom_zombie8_02.gsc new file mode 100644 index 0000000..f0f1dba --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_zom_zombie8_02.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_female_head_als; + +main() +{ + self setmodel( "c_zom_zombie8_body02" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_female_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie8_body02_g_upclean"; + self.torsodmg2 = "c_zom_zombie8_body02_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie8_body02_g_larmoff"; + self.torsodmg5 = "c_zom_zombie8_body01_g_behead"; + self.legdmg1 = "c_zom_zombie8_body02_g_lowclean"; + self.legdmg2 = "c_zom_zombie8_body02_g_rlegoff"; + self.legdmg3 = "c_zom_zombie8_body02_g_llegoff"; + self.legdmg4 = "c_zom_zombie8_body02_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie8_body02" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_female_head_als::main() ); + precachemodel( "c_zom_zombie8_body02_g_upclean" ); + precachemodel( "c_zom_zombie8_body02_g_rarmoff" ); + precachemodel( "c_zom_zombie8_body02_g_larmoff" ); + precachemodel( "c_zom_zombie8_body01_g_behead" ); + precachemodel( "c_zom_zombie8_body02_g_lowclean" ); + precachemodel( "c_zom_zombie8_body02_g_rlegoff" ); + precachemodel( "c_zom_zombie8_body02_g_llegoff" ); + precachemodel( "c_zom_zombie8_body02_g_legsoff" ); + precachemodel( "c_zom_zombie_g_rarmspawn" ); + precachemodel( "c_zom_zombie_g_larmspawn" ); + precachemodel( "c_zom_zombie_g_rlegspawn" ); + precachemodel( "c_zom_zombie_g_llegspawn" ); +} diff --git a/ZM/Maps/Tranzit/character/c_zom_zombie8_03.gsc b/ZM/Maps/Tranzit/character/c_zom_zombie8_03.gsc new file mode 100644 index 0000000..d2d0206 --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_zom_zombie8_03.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_female_head_als; + +main() +{ + self setmodel( "c_zom_zombie8_body03" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_female_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie8_body03_g_upclean"; + self.torsodmg2 = "c_zom_zombie8_body03_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie8_body03_g_larmoff"; + self.torsodmg5 = "c_zom_zombie8_body01_g_behead"; + self.legdmg1 = "c_zom_zombie8_body03_g_lowclean"; + self.legdmg2 = "c_zom_zombie8_body03_g_rlegoff"; + self.legdmg3 = "c_zom_zombie8_body03_g_llegoff"; + self.legdmg4 = "c_zom_zombie8_body03_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie8_body03" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_female_head_als::main() ); + precachemodel( "c_zom_zombie8_body03_g_upclean" ); + precachemodel( "c_zom_zombie8_body03_g_rarmoff" ); + precachemodel( "c_zom_zombie8_body03_g_larmoff" ); + precachemodel( "c_zom_zombie8_body01_g_behead" ); + precachemodel( "c_zom_zombie8_body03_g_lowclean" ); + precachemodel( "c_zom_zombie8_body03_g_rlegoff" ); + precachemodel( "c_zom_zombie8_body03_g_llegoff" ); + precachemodel( "c_zom_zombie8_body03_g_legsoff" ); + precachemodel( "c_zom_zombie_g_rarmspawn" ); + precachemodel( "c_zom_zombie_g_larmspawn" ); + precachemodel( "c_zom_zombie_g_rlegspawn" ); + precachemodel( "c_zom_zombie_g_llegspawn" ); +} diff --git a/ZM/Maps/Tranzit/character/c_zom_zombie9_01.gsc b/ZM/Maps/Tranzit/character/c_zom_zombie9_01.gsc new file mode 100644 index 0000000..b24709f --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_zom_zombie9_01.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_female_head_als; + +main() +{ + self setmodel( "c_zom_zombie9_body01" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_female_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie9_body01_g_upclean"; + self.torsodmg2 = "c_zom_zombie9_body01_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie9_body01_g_larmoff"; + self.torsodmg5 = "c_zom_zombie9_body01_g_behead"; + self.legdmg1 = "c_zom_zombie9_body01_g_lowclean"; + self.legdmg2 = "c_zom_zombie9_body01_g_rlegoff"; + self.legdmg3 = "c_zom_zombie9_body01_g_llegoff"; + self.legdmg4 = "c_zom_zombie9_body01_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie9_body01" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_female_head_als::main() ); + precachemodel( "c_zom_zombie9_body01_g_upclean" ); + precachemodel( "c_zom_zombie9_body01_g_rarmoff" ); + precachemodel( "c_zom_zombie9_body01_g_larmoff" ); + precachemodel( "c_zom_zombie9_body01_g_behead" ); + precachemodel( "c_zom_zombie9_body01_g_lowclean" ); + precachemodel( "c_zom_zombie9_body01_g_rlegoff" ); + precachemodel( "c_zom_zombie9_body01_g_llegoff" ); + precachemodel( "c_zom_zombie9_body01_g_legsoff" ); + precachemodel( "c_zom_zombie_g_rarmspawn" ); + precachemodel( "c_zom_zombie_g_larmspawn" ); + precachemodel( "c_zom_zombie_g_rlegspawn" ); + precachemodel( "c_zom_zombie_g_llegspawn" ); +} diff --git a/ZM/Maps/Tranzit/character/c_zom_zombie9_02.gsc b/ZM/Maps/Tranzit/character/c_zom_zombie9_02.gsc new file mode 100644 index 0000000..dc2cce3 --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_zom_zombie9_02.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_female_head_als; + +main() +{ + self setmodel( "c_zom_zombie9_body02" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_female_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie9_body02_g_upclean"; + self.torsodmg2 = "c_zom_zombie9_body02_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie9_body02_g_larmoff"; + self.torsodmg5 = "c_zom_zombie9_body01_g_behead"; + self.legdmg1 = "c_zom_zombie9_body02_g_lowclean"; + self.legdmg2 = "c_zom_zombie9_body02_g_rlegoff"; + self.legdmg3 = "c_zom_zombie9_body02_g_llegoff"; + self.legdmg4 = "c_zom_zombie9_body02_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie9_body02" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_female_head_als::main() ); + precachemodel( "c_zom_zombie9_body02_g_upclean" ); + precachemodel( "c_zom_zombie9_body02_g_rarmoff" ); + precachemodel( "c_zom_zombie9_body02_g_larmoff" ); + precachemodel( "c_zom_zombie9_body01_g_behead" ); + precachemodel( "c_zom_zombie9_body02_g_lowclean" ); + precachemodel( "c_zom_zombie9_body02_g_rlegoff" ); + precachemodel( "c_zom_zombie9_body02_g_llegoff" ); + precachemodel( "c_zom_zombie9_body02_g_legsoff" ); + precachemodel( "c_zom_zombie_g_rarmspawn" ); + precachemodel( "c_zom_zombie_g_larmspawn" ); + precachemodel( "c_zom_zombie_g_rlegspawn" ); + precachemodel( "c_zom_zombie_g_llegspawn" ); +} diff --git a/ZM/Maps/Tranzit/character/c_zom_zombie9_03.gsc b/ZM/Maps/Tranzit/character/c_zom_zombie9_03.gsc new file mode 100644 index 0000000..63f6192 --- /dev/null +++ b/ZM/Maps/Tranzit/character/c_zom_zombie9_03.gsc @@ -0,0 +1,47 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include codescripts\character; +#include xmodelalias\c_zom_zombie_female_head_als; + +main() +{ + self setmodel( "c_zom_zombie9_body03" ); + self.headmodel = codescripts\character::randomelement( xmodelalias\c_zom_zombie_female_head_als::main() ); + self attach( self.headmodel, "", 1 ); + self.voice = "american"; + self.skeleton = "base"; + self.torsodmg1 = "c_zom_zombie9_body03_g_upclean"; + self.torsodmg2 = "c_zom_zombie9_body03_g_rarmoff"; + self.torsodmg3 = "c_zom_zombie9_body03_g_larmoff"; + self.torsodmg5 = "c_zom_zombie9_body01_g_behead"; + self.legdmg1 = "c_zom_zombie9_body03_g_lowclean"; + self.legdmg2 = "c_zom_zombie9_body03_g_rlegoff"; + self.legdmg3 = "c_zom_zombie9_body03_g_llegoff"; + self.legdmg4 = "c_zom_zombie9_body03_g_legsoff"; + self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; + self.gibspawntag1 = "J_Elbow_RI"; + self.gibspawn2 = "c_zom_zombie_g_larmspawn"; + self.gibspawntag2 = "J_Elbow_LE"; + self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; + self.gibspawntag3 = "J_Knee_RI"; + self.gibspawn4 = "c_zom_zombie_g_llegspawn"; + self.gibspawntag4 = "J_Knee_LE"; +} + +precache() +{ + precachemodel( "c_zom_zombie9_body03" ); + codescripts\character::precachemodelarray( xmodelalias\c_zom_zombie_female_head_als::main() ); + precachemodel( "c_zom_zombie9_body03_g_upclean" ); + precachemodel( "c_zom_zombie9_body03_g_rarmoff" ); + precachemodel( "c_zom_zombie9_body03_g_larmoff" ); + precachemodel( "c_zom_zombie9_body01_g_behead" ); + precachemodel( "c_zom_zombie9_body03_g_lowclean" ); + precachemodel( "c_zom_zombie9_body03_g_rlegoff" ); + precachemodel( "c_zom_zombie9_body03_g_llegoff" ); + precachemodel( "c_zom_zombie9_body03_g_legsoff" ); + precachemodel( "c_zom_zombie_g_rarmspawn" ); + precachemodel( "c_zom_zombie_g_larmspawn" ); + precachemodel( "c_zom_zombie_g_rlegspawn" ); + precachemodel( "c_zom_zombie_g_llegspawn" ); +} diff --git a/ZM/Maps/Tranzit/character/character_sp_zombie_dog.gsc b/ZM/Maps/Tranzit/character/character_sp_zombie_dog.gsc new file mode 100644 index 0000000..43f598a --- /dev/null +++ b/ZM/Maps/Tranzit/character/character_sp_zombie_dog.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + self setmodel( "zombie_wolf" ); + self.voice = "american"; + self.skeleton = "base"; +} + +precache() +{ + precachemodel( "zombie_wolf" ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_climb_down_pothole.gsc b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_climb_down_pothole.gsc new file mode 100644 index 0000000..c3e9bb4 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_climb_down_pothole.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "climb_down_pothole" ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_climb_up_pothole.gsc b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_climb_up_pothole.gsc new file mode 100644 index 0000000..2f95ced --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_climb_up_pothole.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "climb_up_pothole" ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_across_120.gsc b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_across_120.gsc new file mode 100644 index 0000000..b919516 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_across_120.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_across_120" ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_down_127.gsc b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_down_127.gsc new file mode 100644 index 0000000..5b1c8da --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_down_127.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_127" ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_down_190.gsc b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_down_190.gsc new file mode 100644 index 0000000..63e4ca8 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_down_190.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_190" ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_down_222.gsc b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_down_222.gsc new file mode 100644 index 0000000..e56cb57 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_down_222.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_222" ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_down_48.gsc b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_down_48.gsc new file mode 100644 index 0000000..3886fb1 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_down_48.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_down_48" ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_down_96.gsc b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_down_96.gsc new file mode 100644 index 0000000..a051331 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_down_96.gsc @@ -0,0 +1,12 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + if ( isdefined( self.isdog ) && self.isdog ) + dog_jump_down( 96, 7 ); + else + dosimpletraverse( "jump_down_96" ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_up_127.gsc b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_up_127.gsc new file mode 100644 index 0000000..30fbdd3 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_up_127.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_127" ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_up_222.gsc b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_up_222.gsc new file mode 100644 index 0000000..9041804 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_jump_up_222.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "jump_up_222" ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc new file mode 100644 index 0000000..a9c2823 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + self dosimpletraverse( "mantle_over_40_hurdle" ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_car.gsc b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_car.gsc new file mode 100644 index 0000000..9ba9add --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_car.gsc @@ -0,0 +1,32 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + speed = ""; + + if ( !isdefined( self.isdog ) || !self.isdog ) + { + switch ( self.zombie_move_speed ) + { + case "walk_slide": + case "walk": + speed = ""; + break; + case "run_slide": + case "run": + speed = "_run"; + break; + case "super_sprint": + case "sprint_slide": + case "sprint": + speed = "_sprint"; + break; + default: + } + } + + dosimpletraverse( "traverse_car" + speed, 1 ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_car_reverse.gsc b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_car_reverse.gsc new file mode 100644 index 0000000..b2ac641 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_car_reverse.gsc @@ -0,0 +1,24 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + speed = ""; + + if ( !self.has_legs ) + { + switch ( self.zombie_move_speed ) + { + case "super_sprint": + case "sprint_slide": + case "sprint": + speed = "_sprint"; + break; + default: + } + } + + dosimpletraverse( "traverse_car_reverse" + speed, 1 ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_diner_counter.gsc b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_diner_counter.gsc new file mode 100644 index 0000000..29cc89e --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_diner_counter.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "traverse_diner_counter", 1 ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_diner_counter_reverse.gsc b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_diner_counter_reverse.gsc new file mode 100644 index 0000000..d563110 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_diner_counter_reverse.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "traverse_diner_counter_reverse", 1 ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_diner_roof.gsc b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_diner_roof.gsc new file mode 100644 index 0000000..b4d8920 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_diner_roof.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "traverse_diner_roof" ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_diner_roof_hatch_up.gsc b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_diner_roof_hatch_up.gsc new file mode 100644 index 0000000..f96d77f --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_diner_roof_hatch_up.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "traverse_diner_roof_hatch_up" ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_diner_roof_up.gsc b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_diner_roof_up.gsc new file mode 100644 index 0000000..d01b4a8 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_diner_roof_up.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "traverse_diner_roof_up" ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_garage_door.gsc b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_garage_door.gsc new file mode 100644 index 0000000..8aa0fca --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/animscripts/traverse/zm_traverse_garage_door.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; + +main() +{ + dosimpletraverse( "traverse_garage_door", 1 ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/createart/zm_transit_art.gsc b/ZM/Maps/Tranzit/maps/mp/createart/zm_transit_art.gsc new file mode 100644 index 0000000..902a0ff --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/createart/zm_transit_art.gsc @@ -0,0 +1,46 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + level.tweakfile = 1; + setdvar( "scr_fog_exp_halfplane", "639.219" ); + setdvar( "scr_fog_exp_halfheight", "18691.3" ); + setdvar( "scr_fog_nearplane", "138.679" ); + setdvar( "scr_fog_red", "0.806694" ); + setdvar( "scr_fog_green", "0.962521" ); + setdvar( "scr_fog_blue", "0.9624" ); + setdvar( "scr_fog_baseheight", "1145.21" ); + setdvar( "visionstore_glowTweakEnable", "0" ); + setdvar( "visionstore_glowTweakRadius0", "5" ); + setdvar( "visionstore_glowTweakRadius1", "" ); + setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); + setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); + setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); + setdvar( "visionstore_glowTweakBloomIntensity1", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); + setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); + start_dist = 138.679; + half_dist = 1011.62; + half_height = 10834.5; + base_height = 1145.21; + fog_r = 0.501961; + fog_g = 0.501961; + fog_b = 0.501961; + fog_scale = 7.5834; + sun_col_r = 0.501961; + sun_col_g = 0.501961; + sun_col_b = 0.501961; + sun_dir_x = -0.99; + sun_dir_y = 0.06; + sun_dir_z = -0.11; + sun_start_ang = 0; + sun_stop_ang = 0; + time = 0; + max_fog_opacity = 0.8546; + setvolfog( start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale, sun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, sun_stop_ang, time, max_fog_opacity ); + visionsetnaked( "zm_transit", 0 ); + setdvar( "r_lightGridEnableTweaks", 1 ); + setdvar( "r_lightGridIntensity", 1.4 ); + setdvar( "r_lightGridContrast", 0.2 ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/createfx/zm_transit_fx.gsc b/ZM/Maps/Tranzit/maps/mp/createfx/zm_transit_fx.gsc new file mode 100644 index 0000000..c60abfe --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/createfx/zm_transit_fx.gsc @@ -0,0 +1,3932 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; + +main() +{ + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_thick_1200x600" ); + ent.v["origin"] = ( -5964.8, 5958.68, -56.5457 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 278.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_thick_1200x600" ); + ent.v["origin"] = ( -7115.4, 6131.36, -52 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 263.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_thick_1200x600" ); + ent.v["origin"] = ( -8140.71, 6172, -40.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 281.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); + ent.v["origin"] = ( -5614.79, -6468.82, -39.2142 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 264.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); + ent.v["origin"] = ( -4165.66, -6434.5, -21.0351 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -6463.47, 4442.16, -54.2825 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -8085.35, 5126.36, -55.5562 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -5441.89, 2910.1, 86.6898 ); + ent.v["angles"] = ( 0, 181, 4 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -5012.74, 4.19914, 92.9997 ); + ent.v["angles"] = ( 360, 237, -5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_1000x1000" ); + ent.v["origin"] = ( -5294.92, 1435.37, 193 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -8375.91, -6880.29, 169.426 ); + ent.v["angles"] = ( 0, 62, 3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -693.86, -434.302, -62 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 1307.61, -433.515, -61.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 3301.23, -433.48, -61.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 1443.74, -1912.92, -49.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 1496.75, 951.473, -61.75 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 2317.07, 2920.76, -61.1957 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 326.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 4034.7, 4213.02, -121.687 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 291.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 5863.49, 4856.8, -90.6416 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 165.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 6425.89, 6793.82, -244.747 ); + ent.v["angles"] = ( 0, 165, 6 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 7658.88, 8594.01, -462.611 ); + ent.v["angles"] = ( 0.7299, 115.044, 6.96203 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 9492.26, 8859.12, -575.761 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 10248, 7411.77, -572.63 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 9370.34, 6265.97, -566.254 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 9363.72, 5259.97, -561.195 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 8247.62, 3780.29, -204.463 ); + ent.v["angles"] = vectorscale( ( 0, 0, -1 ), 9.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 8454.29, 1816.51, -91.9754 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 12.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_1000x1000" ); + ent.v["origin"] = ( -9435.63, 3725.57, 129.632 ); + ent.v["angles"] = ( 0, 328, -8 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -6295.03, -6855.52, -43.3133 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -5503.32, -5950.27, -33.7949 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -4278.1, -6853.2, -47.9013 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -2226.38, -6476.4, -111.832 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 151.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -430.571, -4777.94, -61 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 1354.92, -4343.55, 8.28402 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 154.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 2374.83, -5587.02, 2.17561 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 263.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 6376.43, -6175.54, -33.8548 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 263.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 8345.75, -6327.09, 106.432 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 226.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 10086.9, -6470.41, 118 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 354.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 7864.23, -7747.09, -22.7953 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 236.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 7372.48, -4745.95, -16.153 ); + ent.v["angles"] = ( 5, 177, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 6344.74, -4691.46, -51.8628 ); + ent.v["angles"] = ( 360, 177, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 7338.11, -2595.86, -111.322 ); + ent.v["angles"] = ( 359.907, 136.037, 4.87958 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 8825, -1201.03, -194.996 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 131.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 9725.72, -1742.09, -32.561 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 131.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 8174.97, -105.473, -61.5243 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 297.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 7784.83, 6029.76, -345.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 155.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_1000x1000" ); + ent.v["origin"] = ( 4116.25, 5645.36, -1 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 98.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_1000x1000" ); + ent.v["origin"] = ( -5802.88, 5634.9, 84.3632 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 360.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_thick_1200x600" ); + ent.v["origin"] = ( -5148.4, 4832.7, 0.312576 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 200.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -5934.56, 4918.4, -62.8867 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 187.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -6027.78, 5040.17, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 242.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -6079.08, 5289.99, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 144.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -7600.2, 4227.16, -56.4433 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 46.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -8537.89, 4162.49, -12.8317 ); + ent.v["angles"] = ( 360, 140, 10 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -8467.74, 4197.83, -25.7767 ); + ent.v["angles"] = ( 0, 88, 5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -8667.97, 4150.55, 4.24724 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 63.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -5642.84, 5224.15, -46.4991 ); + ent.v["angles"] = ( 4, 190, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -5655.12, 5116.59, -45.489 ); + ent.v["angles"] = ( 3.28795, 202.949, 2.74547 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -8029.04, 3834.02, -0.54985 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -7892.28, 3799.24, -3.22023 ); + ent.v["angles"] = ( 0, 353, -6 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); + ent.v["origin"] = ( 10156.4, 7081.81, -569.368 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 94.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -7670.71, 4400.04, -52.4712 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 25.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -7632.2, 4335.27, -53.4487 ); + ent.v["angles"] = ( 8.99508, 3.31666, 2.0246 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( -6662.13, 4291.07, -64 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( -6154.93, 4677.49, -57.6558 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 332.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( -7509.32, 4764.04, -61 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 3.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( -6443.25, 5252.53, -46.875 ); + ent.v["angles"] = ( 4.46701, 145.564, -11.1489 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( -7010.67, 5058.05, -46.875 ); + ent.v["angles"] = ( 0, 30, -4 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( -6236.39, 5096.6, -64.875 ); + ent.v["angles"] = ( 337, 270, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( -6263.69, 5186.76, -110.875 ); + ent.v["angles"] = ( 337, 270, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( -6935.05, 3992.15, -44.575 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 54.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( -6387.72, 5200.47, -45.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 111.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( -6228.73, 5271.98, -138.875 ); + ent.v["angles"] = ( 0, 320, 26 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( -7025.25, 5020.08, -47.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 12.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( -6990.59, 3917.48, -35.575 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 28.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); + ent.v["origin"] = ( -6482.02, -6922.66, -20.2632 ); + ent.v["angles"] = ( 5.58951, 0.151229, -1.77637 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_right_border" ); + ent.v["origin"] = ( -3783.49, -6804.15, -57.0054 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 189.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); + ent.v["origin"] = ( -5772.58, 4495.25, -45.7761 ); + ent.v["angles"] = ( 4.55882, 136.126, 0.230205 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( -6664.46, 4282.63, -63 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( -6419.69, 5968, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 182.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( -6794.75, 5895.12, -63 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( -7130.02, 5875.24, -61 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( -7035.44, 6092.55, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = 30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( -7019.59, 4360.48, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -7984.94, 4200.7, -40.8316 ); + ent.v["angles"] = ( 359.649, 23.5878, -7.38978 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -6164.4, 6207.33, -62 ); + ent.v["angles"] = ( 0, 265, 3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -6611.77, 6255.7, -64.056 ); + ent.v["angles"] = ( 355.996, 257.157, 2.98491 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -5905.66, 6053.11, -62.1083 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 243.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -7777.88, 5432.39, -67.6399 ); + ent.v["angles"] = ( 20.9872, 250.768, 2.14186 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -8977.1, 4620.45, -7.94255 ); + ent.v["angles"] = ( 0, 328, -8 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -9194.46, 4472.11, 27.7692 ); + ent.v["angles"] = ( 358.071, 314.131, -11.7653 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -9968.48, 3966.82, 141.149 ); + ent.v["angles"] = ( 360, 320, -2 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -9330.22, 3636.74, 143.33 ); + ent.v["angles"] = ( 1.2114, 128.06, 6.8825 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_flicker" ); + ent.v["origin"] = ( -7058.84, 5241.95, 114.025 ); + ent.v["angles"] = ( 304, 90, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -6702.67, 4030.74, -21.2888 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -7174.47, 4179.63, 52 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); + ent.v["origin"] = ( 1543.09, 1046.91, -49 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 262.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); + ent.v["origin"] = ( -7823.94, 4726.57, -55.4636 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 349.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( -6255.49, 5934.51, -55 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( -7111.76, 5851.47, -42 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( -6651.29, 3918.42, -41 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_thick_600x600" ); + ent.v["origin"] = ( -6584.17, 3681.87, -4.99999 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 15.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_thick_600x600" ); + ent.v["origin"] = ( -7886.28, 3889.4, 82.5849 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 15.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_depot_map_flicker" ); + ent.v["origin"] = ( -6713.64, 5321.71, -9.66086 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_depot_map_flicker" ); + ent.v["origin"] = ( -6723.23, 5313.91, -8.18646 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 225.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety" ); + ent.v["origin"] = ( -6365.04, 4578.04, 109.9 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 100; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -5517.59, 5241.44, -11 ); + ent.v["angles"] = ( 28, 182, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_50x50_sm" ); + ent.v["origin"] = ( -6758.41, 4766.59, -92.7686 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_50x50_sm" ); + ent.v["origin"] = ( -6689.7, 4768.01, -92.7002 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -5980.96, 6261.54, -36.3953 ); + ent.v["angles"] = ( 0, 175, -8 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -5845.6, 6191.34, -35.9 ); + ent.v["angles"] = ( 358.005, 179.002, -0.139585 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_50x50_sm" ); + ent.v["origin"] = ( -7810.49, 5420.54, -74.2103 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 154.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_50x50_sm" ); + ent.v["origin"] = ( -7819.04, 4111.9, -37.6549 ); + ent.v["angles"] = ( 12.9361, 13.2884, -8.13303 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_spark_ext_runner" ); + ent.v["origin"] = ( -7674.39, 5156.76, 166.697 ); + ent.v["angles"] = ( 63, 269, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 500; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_dbl_glow" ); + ent.v["origin"] = ( -6801.44, 5517.77, 76.125 ); + ent.v["angles"] = ( 330, 180, -90 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); + ent.v["origin"] = ( -6583.75, 5403.93, -32.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -300; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); + ent.v["origin"] = ( -6968.95, 5308.98, -32.875 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -360; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_column_lrg" ); + ent.v["origin"] = ( -6197.68, 3183.08, 15 ); + ent.v["angles"] = ( 271, 187, -84 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_column_lrg" ); + ent.v["origin"] = ( -4725.65, 4685.73, 338.88 ); + ent.v["angles"] = ( 271, 97, 72 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); + ent.v["origin"] = ( -4793.84, 4708.26, 346.094 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -7246.23, 4589.33, 78.025 ); + ent.v["angles"] = ( 90, 2, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -6951.36, 4934.45, 91.0322 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -6751.02, 4934.64, 85.425 ); + ent.v["angles"] = ( 31.9413, 329.602, 91 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -6847.37, 5022.5, 91 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety" ); + ent.v["origin"] = ( -3946.86, -7250.19, 107 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 102; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety" ); + ent.v["origin"] = ( -4418.11, -626.9, 192.003 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 79.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 114; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety" ); + ent.v["origin"] = ( 8133.65, 4787.75, -194.479 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 108; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety" ); + ent.v["origin"] = ( 10160.1, -1748.62, -45.9508 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 106; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety" ); + ent.v["origin"] = ( -45.2307, -5452.06, 92.5112 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 104; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -6724.03, 4589.1, 81.9 ); + ent.v["angles"] = ( 87, 182, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); + ent.v["origin"] = ( 287.427, -453.374, -62 ); + ent.v["angles"] = ( 1.9859, 356.008, -0.59234 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_right_border" ); + ent.v["origin"] = ( 10191, 8408.74, -566.847 ); + ent.v["angles"] = ( 3.6542, 275.052, 1.6294 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); + ent.v["origin"] = ( 6127.06, -6034.52, -70.4416 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 43.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); + ent.v["origin"] = ( 6552.9, -4715.76, -58.9995 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_thick_600x600" ); + ent.v["origin"] = ( 7804.15, -4507.67, 76 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 273.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); + ent.v["origin"] = ( 7466.6, -4570.16, 32.1187 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 299.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( -6879.38, 4404.41, -55.7499 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 345.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( -6865.54, 4337.65, -56.7845 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 24.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( -6803.27, 4294.82, -59.5574 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 83.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( 1397.35, -485.659, -67.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( 2955.11, -447.745, -129.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 183.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_town_cans" ); + ent.v["origin"] = ( 2318.31, -669.672, 132.6 ); + ent.v["angles"] = ( 82, 90, 90 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_town_cans" ); + ent.v["origin"] = ( 2393.33, -669.067, 133.725 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( 2475.69, -4.57658, 197.512 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( 591.712, -1224.22, 247.125 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_fog" ); + ent.v["origin"] = ( -385.805, -200.682, 110.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_fog" ); + ent.v["origin"] = ( 1232.59, -1724.85, 188.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 172.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_fog" ); + ent.v["origin"] = ( 1782.94, -2158.76, 109.262 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_street_lamp" ); + ent.v["origin"] = ( 2424, -200, 104 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_fog" ); + ent.v["origin"] = ( 3264.9, -684.243, 110 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 179.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( -7174.46, 4182.06, 86.8813 ); + ent.v["angles"] = ( 87, 182, 180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( 1916.05, -1534.34, -55.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 150.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( 742.165, -500.51, -61.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( 1584.48, 61.4287, -62 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( 1643.6, 239.56, -62.0999 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( 1956.58, -684.969, -55.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( -7162.7, 4430.93, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( -5961.17, 4659.68, -56.1655 ); + ent.v["angles"] = ( 0, 177, 3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( 1984.16, -477.682, -61.0387 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 152.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( 1529.72, -1378.9, -60 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 2076.71, -1639.77, 6.14304 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow" ); + ent.v["origin"] = ( 2284.66, 80.3072, 73.0331 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 2353.79, -515.486, -60.3616 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 104.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 2426.85, -478.694, -58.3936 ); + ent.v["angles"] = ( 9, 139, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 702.614, -1449.61, 161.693 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( 1721.63, -90.9005, -55.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( 1476.19, -161.862, -58.502 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( 1601.25, 381.192, -62 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( 2249.23, -374.64, -62 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 160.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( 1313.09, -749.727, -62 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 144.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 2990.83, -473.678, -129.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 129.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); + ent.v["origin"] = ( -6365.25, 4577.86, 109.8 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 101; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); + ent.v["origin"] = ( -3946.92, -7250.32, 107.1 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 103; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); + ent.v["origin"] = ( -4418.04, -626.987, 191.91 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 79.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 115; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); + ent.v["origin"] = ( 6300.89, 5078.98, 67.4032 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 111; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); + ent.v["origin"] = ( 8133.62, 4787.71, -194.497 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 109; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); + ent.v["origin"] = ( 10160, -1748.7, -45.9436 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 107; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); + ent.v["origin"] = ( -45.1183, -5452.09, 92.4005 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 105; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_bridge_dest" ); + ent.v["origin"] = ( -2790.06, -446.644, 162.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 150; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 754.692, -1143.89, 212.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_short_warm" ); + ent.v["origin"] = ( 969.776, -997.644, 97.8737 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 286.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_short_warm" ); + ent.v["origin"] = ( 1037.18, -956.931, 110.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 303.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_short_warm" ); + ent.v["origin"] = ( 920.384, -991.542, 115.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 281.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_short_warm" ); + ent.v["origin"] = ( 988.555, -841.342, 117.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 289.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 787.978, -855.479, -51.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 355.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( 808.764, -1044.17, -54.6895 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 917.617, -1052.28, 94.2635 ); + ent.v["angles"] = ( 29, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 850.388, -949.561, 94 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( 695.336, -1140.64, 174.388 ); + ent.v["angles"] = ( 0, 358.745, 90.3158 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_column_lrg" ); + ent.v["origin"] = ( -397.618, -1279.07, 159.194 ); + ent.v["angles"] = ( 271, 187, -84 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_town_cans" ); + ent.v["origin"] = ( 1144.58, -1476.87, 73.125 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( 1075.85, -1008.77, -61 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 47.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( 855.703, -1077.52, -55.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 978.234, -1004.41, 95.8515 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 112.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 1026.46, -1141.13, 177.669 ); + ent.v["angles"] = ( 24, 193, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( 11566, 7369.17, -754.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 65.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm" ); + ent.v["origin"] = ( -7002.24, 4782.52, -63 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 200; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm" ); + ent.v["origin"] = ( -5071.79, -7163.23, -58.3008 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 220; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm" ); + ent.v["origin"] = ( 8637.74, -6861.16, 100.781 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 230; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm" ); + ent.v["origin"] = ( 10217, -809.125, -216.77 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 240; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm" ); + ent.v["origin"] = ( 10777.6, 7700.74, -579.817 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm" ); + ent.v["origin"] = ( 1256.2, -477.919, -61 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 260; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort" ); + ent.v["origin"] = ( -5772.88, 5116.44, -43.0053 ); + ent.v["angles"] = ( 270, 217.395, 178.605 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_detail" ); + ent.v["origin"] = ( -6706.07, 4768.48, -92.5561 ); + ent.v["angles"] = ( 270, 0, 92 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_detail" ); + ent.v["origin"] = ( -7616.51, 4365.68, -58 ); + ent.v["angles"] = ( 270, 0.65106, -162.651 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_sm" ); + ent.v["origin"] = ( -5185.59, -6893.63, -65 ); + ent.v["angles"] = ( 270, 0, -3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_sm" ); + ent.v["origin"] = ( -5455.46, -6802.14, -65 ); + ent.v["angles"] = ( 270, 356.906, -30.9059 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_sm" ); + ent.v["origin"] = ( 7051.84, -6104.46, -126 ); + ent.v["angles"] = ( 270, 359.914, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_sm" ); + ent.v["origin"] = ( 7097.11, -6375.92, -126 ); + ent.v["angles"] = ( 270, 359.914, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_sm" ); + ent.v["origin"] = ( 2790.44, -423.149, -80.455 ); + ent.v["angles"] = ( 270, 0.692906, 178.307 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); + ent.v["origin"] = ( 6100.79, -5285.34, -32.8692 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 337.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_right_border" ); + ent.v["origin"] = ( 10382.8, 8961.99, -422.321 ); + ent.v["angles"] = ( 358.271, 9.94811, 0.507869 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); + ent.v["origin"] = ( 10049.7, 8042.2, -572.673 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); + ent.v["origin"] = ( 10070.1, 7465.39, -576 ); + ent.v["angles"] = ( 358.698, 359.957, 0.783675 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( 7062.86, -6152.26, -126 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 107.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_spark_ext_runner" ); + ent.v["origin"] = ( -3843.32, -7122.23, 150.713 ); + ent.v["angles"] = ( 63, 269, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 500; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_spark_ext_runner" ); + ent.v["origin"] = ( 8854.15, -5938.39, 310.653 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 500; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_spark_ext_runner" ); + ent.v["origin"] = ( 1293.97, -1569.38, 275.83 ); + ent.v["angles"] = ( 90, 0.337619, 0.337609 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 500; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow" ); + ent.v["origin"] = ( -6837.05, 5106.9, 122.125 ); + ent.v["angles"] = ( 288.982, 88.5178, 1.46959 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); + ent.v["origin"] = ( 2038.82, 145.766, 43.9131 ); + ent.v["angles"] = ( 284.035, 94.1266, -94.0038 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_bowling_sign_fog" ); + ent.v["origin"] = ( 2357.64, -719.063, 369.31 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); + ent.v["origin"] = ( 2837.4, -435.051, 11.5 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 181.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1889.32, 763.731, -56.6942 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 1791.17, 740.252, -55.0558 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 163.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 1979.87, 761.433, -47.4833 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 90.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 7818.75, -5992.71, 60.2811 ); + ent.v["angles"] = ( 20, 84, -6 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 7988.32, -6044.29, 75.9195 ); + ent.v["angles"] = ( 4, 35, -11 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 8334.09, -6302.3, 93.7967 ); + ent.v["angles"] = ( 359.913, 359.004, -5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 8353.75, -6383, 98.6189 ); + ent.v["angles"] = ( 354.382, 346.891, -3.27537 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 8404.03, -6366.25, 98.1088 ); + ent.v["angles"] = ( 354.374, 344.526, -1.56396 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 8393.64, -6460.92, 102.788 ); + ent.v["angles"] = ( 1.29256, 14.9455, -2.83045 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 8438.13, -6582.85, 105.293 ); + ent.v["angles"] = ( 359.328, 191.965, -2.0986 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 8363.87, -7077.4, 92.5037 ); + ent.v["angles"] = ( 7.08973, 260.142, -1.31736 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 8398.26, -7131.53, 83.5329 ); + ent.v["angles"] = ( 355.945, 6.61279, 7.42273 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 8406.2, -7050.16, 95.9016 ); + ent.v["angles"] = ( 4.76812, 319.449, 5.4151 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 8418.49, -6955.4, 101.044 ); + ent.v["angles"] = ( 1.65899, 333.337, -1.42441 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5503.15, 6388.21, -72.5321 ); + ent.v["angles"] = ( 0.109414, 292.37, -8.15952 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5514.5, 6422.25, -73.5282 ); + ent.v["angles"] = ( 356.025, 262.626, -7.13254 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 5388.57, 6425.25, -64.7438 ); + ent.v["angles"] = ( 356.766, 272.615, -3.7523 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5337.66, 6389.44, -64.8271 ); + ent.v["angles"] = ( 358.904, 187.573, -0.430535 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5324.97, 6019.33, -64.9331 ); + ent.v["angles"] = ( 359.844, 311.516, -4.94951 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5377.87, 6091.1, -67.7557 ); + ent.v["angles"] = ( 0.239705, 148.415, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5359.91, 6133.77, -69 ); + ent.v["angles"] = ( 0.243594, 80.4189, 1.7854 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5280.21, 6157.39, -65.9638 ); + ent.v["angles"] = ( 2.09653, 38.445, 1.85192 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5298.75, 6236.24, -67.6985 ); + ent.v["angles"] = ( 0.512533, 76.4233, 0.749736 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5481, 6340.94, -69.9456 ); + ent.v["angles"] = ( 354.217, 246.67, -5.76663 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5469.72, 6431.43, -71.8224 ); + ent.v["angles"] = ( 356.025, 262.626, -5.13254 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 5313.89, 6374.04, -68.4139 ); + ent.v["angles"] = ( 352.852, 230.625, -1.9477 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 1744.42, 704.608, -57.139 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 267.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); + ent.v["origin"] = ( -5879.18, 5132.33, -54.9188 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 203.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); + ent.v["origin"] = ( -5679.99, 5029.36, -38.0459 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 224.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( 191.569, 618.303, -38 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( 53.7307, 538.679, -35.3064 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 250.113, 567.747, -34.6563 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 132.32, 591.904, 85.6072 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 318.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 234.855, 648.418, 85.125 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 141.005, 552.795, -33.0726 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 304.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_vault" ); + ent.v["origin"] = ( 466.399, 540.849, 24.125 ); + ent.v["angles"] = ( 2, 330, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_key_glint" ); + ent.v["origin"] = ( 589.29, 440.722, 11.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 233.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_key_glint" ); + ent.v["origin"] = ( 589.064, 449.555, 11.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 233.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( 100.097, 339.198, -46.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 174.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( 256.422, 349.21, -54.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( 178.717, 413.692, -29.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 178.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_bar_glow" ); + ent.v["origin"] = ( 1777.99, 156.13, 151.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( 2523.8, 374.808, 69.625 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 1114.07, 20.5454, 41.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 313.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_town_cans" ); + ent.v["origin"] = ( 502.541, 765.832, 83.125 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 991.306, -95.3722, 40.5243 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 313.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( 1970.15, 167.957, 163.938 ); + ent.v["angles"] = ( 335, 251, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_med" ); + ent.v["origin"] = ( 2239.96, 185.098, 139.125 ); + ent.v["angles"] = ( 336.247, 251.383, 8.33834 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_med" ); + ent.v["origin"] = ( 1969.63, -25.7143, 91.125 ); + ent.v["angles"] = ( 335.016, 245.207, -0.932351 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( 1873.95, 168.875, 165.392 ); + ent.v["angles"] = ( 332.003, 249.879, 0.387281 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( 1941.61, 167.23, 198.192 ); + ent.v["angles"] = ( 336, 251, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( 2003.46, 42.8896, 92.125 ); + ent.v["angles"] = ( 337.004, 241.914, 0.424438 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( 2350.84, 34.2896, 88.125 ); + ent.v["angles"] = ( 333.004, 244.121, -0.474286 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( 1888.03, 168.875, 202.429 ); + ent.v["angles"] = ( 336, 251, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_med" ); + ent.v["origin"] = ( 2324.61, -20.7978, 88.125 ); + ent.v["angles"] = ( 334, 243, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( 2179.62, -1804.56, 249.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 173.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( 2212.67, -1670.11, 208.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 174.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( 1264.63, -3157.28, 28.125 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 70.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); + ent.v["origin"] = ( -627.572, -615.202, 116.432 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 113; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety" ); + ent.v["origin"] = ( -627.359, -615.075, 116.432 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 112; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( 1927.64, -1060.33, 131.881 ); + ent.v["angles"] = ( 67, 269.911, 87.9181 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1645.32, 694.99, -64.1414 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 359.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1602.48, 476.257, -68.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 324.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1535.94, 497.874, -64.9919 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 23.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1374.88, 782.003, -65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1603.51, -262.848, -65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 324.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 584.114, -459.174, -67 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 205.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 775.721, -690.862, -57.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 353.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1026.73, -502.666, -64.9585 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 304.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1165.88, -310.769, -65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 250.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1592.68, -972.327, -64.8077 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 31.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1515.33, -822.148, -62.2515 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 20.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1533.38, -1139.12, -60.4293 ); + ent.v["angles"] = ( 0.278291, 274.981, -5.99519 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 1359.65, -1213.52, -63.1614 ); + ent.v["angles"] = ( 356.345, 160.109, -1.41514 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 1535.79, -1334.63, -63.8559 ); + ent.v["angles"] = ( 0.73816, 38.0882, 3.84916 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 1492.83, -1288.81, -50.9464 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 344.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 1479.57, -1249.33, -55.1658 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 48.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 1493.56, -1314.7, -54.8906 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 279.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1386.95, 261.349, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 252.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1247.14, 178.805, -65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 356.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1431.34, 155.715, -66 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 1540.99, -68.7187, -64.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 60.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 1482.47, -63.7589, -62 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 103.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 1343.41, 77.0003, -68.1872 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 102.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1562.34, -1135.27, -60.6276 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 283.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( 1452.5, -218.951, -70 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( 1361.91, -551.798, -67 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 230.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 2441.27, -547.621, -59.6587 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 208.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 1248.59, -1279.85, -58 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 294.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 1343.33, -1237.01, -55.7566 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 67.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -6869.17, 5342.61, -62.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 350.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 3; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -6869.78, 5464.68, -61.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 15.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 3; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( -6835.64, 5264.04, -66.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 53.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 3; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( -6762.79, 5228.51, -63.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 52.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 3; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( -6720.24, 5171.85, -61.3532 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 23.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 3; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( -6896.93, 5375.32, -63.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 244.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 3; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_power_pulse" ); + ent.v["origin"] = ( 12204.4, 7587.57, -641 ); + ent.v["angles"] = ( 270, 0, -95 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 500; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_power_on" ); + ent.v["origin"] = ( 12204.4, 7587.57, -640 ); + ent.v["angles"] = ( 270, 0, -95 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0.25; + ent.v["exploder"] = 500; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_power_rising" ); + ent.v["origin"] = ( 12204.4, 7587.57, -639 ); + ent.v["angles"] = ( 270, 0, -95 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 30.25; + ent.v["exploder"] = 500; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_crevice_smoke_100" ); + ent.v["origin"] = ( -6865.77, 5449.35, -63.7096 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 18.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_crevice_smoke_100" ); + ent.v["origin"] = ( -6865.9, 5353.17, -64.4128 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 352.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_crevice_smoke_100" ); + ent.v["origin"] = ( -6821.72, 5257.82, -62.8765 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 68.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_crevice_smoke_100" ); + ent.v["origin"] = ( -6752.63, 5222.43, -66.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 50.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 2; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety" ); + ent.v["origin"] = ( 6301.07, 5079.12, 67.4271 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 110; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( -10128.1, 3411.46, 196 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 331.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( -10497, 2685.14, 219.741 ); + ent.v["angles"] = ( 0, 331, -15 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( -10539.3, 1146.3, 311.719 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 316.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( -9678.57, 2737.65, 192 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 54.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( -11488.2, 521.303, 192 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 27.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( -10739.5, -2162.63, 240.948 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 150.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( -9363.38, -6107.72, 196 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 230.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_thick_600x600" ); + ent.v["origin"] = ( -10126.6, -6035.96, 192 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_thick_600x600" ); + ent.v["origin"] = ( -10747.4, -3914.96, 192 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -11077, -1101.23, 180 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 171.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort" ); + ent.v["origin"] = ( -11210, -1129.64, 180 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); + ent.v["origin"] = ( -11220.5, -1101.46, 180 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 203.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -11149.5, -1196.82, 180 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -11188.2, -1050.69, 180 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 170.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -11279.7, -1155.05, 180 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -11278.8, -1268.24, 180 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 93.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -11296.1, -909.062, 185 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 78.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -11309.7, -2014.81, 180 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 126.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); + ent.v["origin"] = ( -11311, -2020.2, 180 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 314.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -11375, -1964.33, 185.879 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 346.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -11234.5, -2090.5, 180 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 155.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( -11220.4, -3193.42, 268.293 ); + ent.v["angles"] = ( 333.018, 206.982, 2.24406 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -11104.8, -983.586, 194.026 ); + ent.v["angles"] = ( 7, 190, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); + ent.v["origin"] = ( -10657.8, 889.003, 305.817 ); + ent.v["angles"] = ( 0, 316, -4 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_dbl_glow" ); + ent.v["origin"] = ( -6247.77, 5197.74, 35.125 ); + ent.v["angles"] = ( 297.939, 94.5663, -94.2372 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -9936.09, 2851.18, 441 ); + ent.v["angles"] = ( 270, 0, -30 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -10224.1, 2342.43, 440 ); + ent.v["angles"] = ( 270, 0, -30 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -10610.4, 1486.71, 430.812 ); + ent.v["angles"] = ( 289, 249, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -11120, -312.414, 440.9 ); + ent.v["angles"] = ( 270, 359.089, -12.0888 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -11249.9, -1465.12, 439.2 ); + ent.v["angles"] = ( 270, 359.951, -1.95138 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -11173.1, -3034.18, 441.161 ); + ent.v["angles"] = ( 270, 340.77, 26.2299 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -10797.9, -4638.33, 439.9 ); + ent.v["angles"] = ( 270, 1.54295, 17.457 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -10121.4, -5933.87, 433.345 ); + ent.v["angles"] = ( 289.524, 274.491, 104.913 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -9680.11, -6367.1, 433 ); + ent.v["angles"] = ( 289.455, 68.9812, -16.4659 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( -10003.3, 3224.71, 192 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 259.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow" ); + ent.v["origin"] = ( -11779.3, -1125.37, 375 ); + ent.v["angles"] = ( 270, 0.906503, -1.90651 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_flicker" ); + ent.v["origin"] = ( -11778, -1677.58, 373.371 ); + ent.v["angles"] = ( 270, 0.906503, -1.90651 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); + ent.v["origin"] = ( -11778.4, -2244.37, 374.1 ); + ent.v["angles"] = ( 270, 0.906503, -1.90651 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); + ent.v["origin"] = ( -10951.7, -5454.94, 374 ); + ent.v["angles"] = ( 270, 358.512, 26.4878 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -10710.7, -855.473, 370 ); + ent.v["angles"] = ( 271, 264.002, 89.9978 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); + ent.v["origin"] = ( -6163.17, 3293.78, -13.9583 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 119.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); + ent.v["origin"] = ( -11303.5, -3354.03, 302.04 ); + ent.v["angles"] = ( 337.721, 5.86313, -15.1555 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); + ent.v["origin"] = ( -7381.73, 6748.78, -55 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 284.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); + ent.v["origin"] = ( -7490.71, 6520.46, -71 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 276.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); + ent.v["origin"] = ( -7307.65, 6961.87, -79 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 276.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_column_lrg" ); + ent.v["origin"] = ( -7412.36, 7034.42, -45 ); + ent.v["angles"] = ( 290.014, 195.476, -92.6171 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); + ent.v["origin"] = ( -5794.23, 6978.67, -44 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 152.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -6355.24, 5714, 8.125 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -7184.36, 5600.22, 15.125 ); + ent.v["angles"] = ( 270, 180, 180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 177.625, -530.665, -48.3973 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 313.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 1295.93, 882.596, -25.875 ); + ent.v["angles"] = ( 35, 342, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 1284.46, 875.951, -32.7092 ); + ent.v["angles"] = ( 327, 156, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -5459.9, -6788, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 337.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -5230.88, -6999.87, -65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 85.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -5145.21, -6915.75, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 337.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -5050.25, -6921.37, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 169.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -5501.02, -6704.36, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 263.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -5473.88, -7476.84, 127.125 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -5429.98, -7531.46, 128 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -5429.21, -7664.66, 128.125 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -5429.52, -7799.99, 127.814 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -5429.63, -7933.89, 128 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -5644.89, -7549.17, 134.291 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -6031.36, -7550.77, 136.125 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -6314.79, -7549.68, 134.879 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -6469.19, -7789.98, 136.641 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -5938.95, -7417.7, 127.125 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -5846.87, -7476.07, 126.967 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -5656.66, -7476.06, 128 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -5483.61, -7432.77, -34.6377 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 290.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 5435.05, 6878.72, -9.113 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 187.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -5974.13, -7261.3, -48.2301 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 64.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -5972.29, -7281.63, -66.268 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 324.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( -5851.29, -7067.3, -54.1333 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 136.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( -4366.17, -7273.86, -52.8879 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 122.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( -5148.85, -7273.66, -63.5983 ); + ent.v["angles"] = ( 357, 120.999, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( -5090.66, -7323.27, -64 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 122.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( -4380.11, -7148.49, -58.148 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 122.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); + ent.v["origin"] = ( -5862.85, -7050.07, -52.8316 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 122.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); + ent.v["origin"] = ( -5969.18, -7734.27, 10.025 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( -5698.49, -8378.1, -12.3228 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_glow_fog" ); + ent.v["origin"] = ( -4568.29, -7225.78, 151.693 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 117.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -4737.35, -7412.11, 197.275 ); + ent.v["angles"] = ( 270, 0, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -4833.49, -7840.76, 125.125 ); + ent.v["angles"] = ( 271, 359.999, -178.999 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -4625.94, -7868.51, 124.025 ); + ent.v["angles"] = ( 295.505, 181.435, 177.976 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -4410.87, -7797.71, 114.26 ); + ent.v["angles"] = ( 283.337, 346.888, 12.8218 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5409.75, -7279.42, 276.181 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5408.13, -7411.31, 275.423 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5409.11, -7211.45, 276.35 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5412.33, -7144.55, 274.523 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5412.82, -7113.89, 274.643 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5409.51, -7012.87, 276.361 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5408.54, -6967.22, 509.706 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5408.04, -6942.82, 606.032 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5336.28, -7378.8, 275.297 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5337.65, -7312.61, 275.796 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5336.82, -7245.57, 275.566 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5336.31, -7143.39, 276.066 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5337.79, -7013.92, 275.057 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5336.85, -6971.21, 475.647 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( -5337.16, -6957.33, 539.584 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( -4834.79, -7458.79, 128.325 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -6306.31, -7943.28, 77.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -5775.25, -7866.32, 54.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -5729.95, -7877.56, 63.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -5625.83, -7543.92, 61.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -5268.45, -7968.52, 4.89243 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( -5142.25, -7958.67, -20.1334 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_bulb_xsm" ); + ent.v["origin"] = ( 7894.84, -6552.52, 202.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_bulb_xsm" ); + ent.v["origin"] = ( 7889.8, -6318.81, 315.925 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_bulb_xsm" ); + ent.v["origin"] = ( 8013.75, -6642.93, 361.925 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 8328.49, -5015.29, 161.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 7882.26, -5207.24, 151.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 8503.42, -4804.02, 162.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 8059.34, -5204.01, 333.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_bulb_xsm" ); + ent.v["origin"] = ( 8317.79, -6683.08, 180.206 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_bulb_xsm" ); + ent.v["origin"] = ( 8234.94, -6586.04, 178 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_bulb_xsm" ); + ent.v["origin"] = ( 8137.48, -6959.37, 211.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 8057.41, -4806.99, 161.725 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 7374.98, -5426.44, 49.3118 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( -4220.64, -7799.22, -1.875 ); + ent.v["angles"] = ( 316.689, 259.962, 13.0518 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( -4189.21, -7705.66, 7.66019 ); + ent.v["angles"] = ( 317.814, 249.191, 10.3636 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( -4295.9, -7802.49, 21.125 ); + ent.v["angles"] = ( 320.075, 258.325, 14.3308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( -4308.83, -7683.01, 32.8659 ); + ent.v["angles"] = ( 325.068, 264.852, 10.8459 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( -5017.99, -7879.03, -56.875 ); + ent.v["angles"] = ( 340.408, 259.106, 4.31522 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( -5003.87, -7838.04, -30.3927 ); + ent.v["angles"] = ( 342.331, 260.31, 3.91311 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( -5494.71, -7831.96, 3.125 ); + ent.v["angles"] = ( 335.016, 248.207, -0.932351 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( -5523.54, -7862.26, 0.125 ); + ent.v["angles"] = ( 336, 246, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( 9040.04, -6391.29, 273.2 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( 8419.09, -5744.22, 249.051 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( 8242.84, -6849.96, 259.625 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( 8240.02, -6532.87, 209.525 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 87.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( 6587.59, -5127.09, -55.2822 ); + ent.v["angles"] = ( 353, 160, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( 6987.8, -5763.06, -51.5495 ); + ent.v["angles"] = ( 2, 136, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( 7858.56, -5805.03, 8.45168 ); + ent.v["angles"] = ( 2, 136, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( 7792.54, -5443.05, 36.5811 ); + ent.v["angles"] = ( 359, 136, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( 7442.47, -5125.89, -4.7008 ); + ent.v["angles"] = ( 359, 136, -5 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( 8739.61, -6983.54, 86.5683 ); + ent.v["angles"] = ( 0.545573, 157.823, 1.29891 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8027.21, -6432.62, 165.375 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8225.35, -6613.31, 178.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8140.59, -6889.03, 168.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8033.01, -6470.27, 294.896 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 9029.53, -6393.49, 249.093 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8416.65, -5742.4, 224.177 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8357.57, -6682.99, 183.255 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8100.48, -5243.8, 114.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 7910.7, -5209.15, 151.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8050.46, -5221.8, 334.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8484.12, -4806.32, 166.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8055.05, -4795.58, 161.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8328.53, -5033.75, 165.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 7854.08, -5055.63, 126.147 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 7803.41, -4567.1, 111.113 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 8591.82, -5402.47, 117 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 7135.13, -5638.24, 30.9983 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( 9978.39, -1767.15, -212.32 ); + ent.v["angles"] = ( 358, 160, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( 10242, -133.225, -213.655 ); + ent.v["angles"] = ( 2, 160, 2 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( 10185, -1131.84, -210.081 ); + ent.v["angles"] = ( 2, 160, 2 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 10419.3, 7366.19, -557.286 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 223.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 10426.2, 7362.67, -556.087 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 10576.4, 7867.03, -534.373 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 21.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 10561.8, 7854.68, -546.776 ); + ent.v["angles"] = ( 24, 21, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( 10543.1, 7838.16, -564.906 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 287.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 11244.2, 7598.05, -529.002 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 11273.6, 7566.38, -510.46 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 11197.5, 7581.58, -554.377 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 11102.1, 7582.38, -521.847 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( 11534.9, 7043.33, -422.437 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 125.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); + ent.v["origin"] = ( 11695.4, 6972.81, -417.525 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 121.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( 10772.1, 7534.6, -579.322 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 134.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); + ent.v["origin"] = ( 10293.5, 8161.56, -576.661 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 157.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); + ent.v["origin"] = ( 11284.2, 7782.37, -549.009 ); + ent.v["angles"] = ( 8.89267, 132.773, -10.1167 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -15; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); + ent.v["origin"] = ( 10545.1, 7987.11, -542.084 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 213.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); + ent.v["origin"] = ( -7274.63, 4216.52, -7.79429 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); + ent.v["origin"] = ( -4655.73, -7718.2, -46.2181 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 124.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); + ent.v["origin"] = ( 1772.67, -134.847, -26.9184 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 177.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); + ent.v["origin"] = ( 10482.5, 8077.43, -551.016 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 176.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); + ent.v["origin"] = ( 10779.7, 7998.21, -540.07 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 257.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); + ent.v["origin"] = ( 11134.3, 8093.66, -505.788 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 290.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( 11518.6, 7313.49, -755.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 32.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); + ent.v["origin"] = ( 11535.9, 7320.47, -712.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( 12544.7, 8367.86, -747.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 217.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( 12619.1, 8410.46, -751.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 250.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); + ent.v["origin"] = ( 11077.4, 8147.23, -472.382 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 85.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( 10627.8, 8984.05, -351.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 244.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_closet" ); + ent.v["origin"] = ( 10671.7, 9056.4, -351.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 221.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); + ent.v["origin"] = ( 12185.1, 8300.09, -747.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); + ent.v["origin"] = ( 10667.5, 8857.24, -566.312 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 320.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); + ent.v["origin"] = ( 11829.2, 7033.91, -366.52 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 142.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); + ent.v["origin"] = ( 11000.5, 8592.98, -721.228 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 263.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -50; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -3523.91, 4145.58, 1026 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 164.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 200; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -5822.61, 8161.55, 1665.98 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 255.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 200; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -10419.6, 2878.18, 1302.32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 33.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 200; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -10422.2, 5513.57, 1108.93 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 351.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 200; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -7579.71, 2412.15, 1076.04 ); + ent.v["angles"] = ( 20.9875, 82.1415, 0.732403 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 200; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -8591.58, 7883.01, 1434.96 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 300.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 200; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -5183.81, 1971.44, 1380.88 ); + ent.v["angles"] = ( 8.93236, 125.086, 1.10578 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 200; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -3907.73, 6244.31, 1277.76 ); + ent.v["angles"] = ( 4.95198, 216.03, 0.697713 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 200; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -7994.63, -5467.26, 1488 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 338.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 220; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -6248.9, -4383.96, 1488.83 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 283.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 220; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -3637.03, -5318.07, 994.45 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 232.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 220; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -2982.77, -8985.62, 1217.37 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 142.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 220; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -4789.43, -10429.2, 1615.09 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 107.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 220; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -2144.48, -6671.63, 1097.34 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 189.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 220; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -7283.26, -9141.06, 1439.81 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 54.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 220; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -8253.71, -7187.61, 1204.71 ); + ent.v["angles"] = ( 357, 7, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 220; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 11039.7, -5731.09, 1349.86 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 185.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 230; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 4491.1, -6164.51, 1530.32 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 5.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 230; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 9613.27, -3527.74, 1697.05 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 238.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 230; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 4882.98, -3611.48, 1455.78 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 322.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 230; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 7145.47, -2628.27, 1418.72 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 230; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 10641, -8278.11, 1550.91 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 137.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 230; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 5867.88, -8161.48, 1505.91 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 45.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 230; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 8045.36, -9511.34, 1941.18 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 82.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 230; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 6852.87, -2262.35, 1264.09 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 23.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 240; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 13859, -645.96, 1348.54 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 183.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 240; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 8118.81, 2009.01, 1412.57 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 303.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 240; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 10501.1, 2270.69, 1535.92 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 271.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 240; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 6154.19, 223.038, 1606.08 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 349.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 240; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 10606.6, -4038.92, 1467.82 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 104.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 240; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 13138.8, -3032.95, 1329.48 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 139.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 240; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 12600.4, 1246.54, 1347.77 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 231.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 240; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 8452.68, -3056.77, 1074.09 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 55.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 240; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 14766.4, 6814.59, 1098.18 ); + ent.v["angles"] = ( 12, 174, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 10339.2, 3964.06, 1379.25 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 82.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 12754.5, 4793.53, 1107.25 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 132.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 14340.3, 9177.31, 663.407 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 197.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 8179.63, 4723.92, 896.714 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 51.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 8458.11, 10639.4, 1231.62 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 307.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 7094.67, 8425.25, 1257 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 353.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 7202.75, 6339.84, 765.131 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 17.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 10729.5, 11122.9, 1151.78 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 266.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 13325.6, 10557.6, 1366.97 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 235.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 250; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -207.347, 1856.37, 1500.13 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 302.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 260; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -1247.2, -2498.41, 1408 ); + ent.v["angles"] = ( 360, 36, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 260; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 1625.45, 3225.11, 1105 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 268.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 260; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 4274.06, -1538.84, 1177 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 153.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 260; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( -1889.24, 66.6515, 1399 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 348.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 260; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 4525.94, 665.024, 1126 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 197.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 260; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 2974.66, -3206.25, 1577 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 111.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 260; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 694.038, -3737.93, 1409 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 79.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 260; + ent = maps\mp\_utility::createexploder( "fx_zmb_avog_storm_low" ); + ent.v["origin"] = ( 3769.33, 2230.93, 904 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 232.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 260; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_truck_light" ); + ent.v["origin"] = ( 1164.06, 310.847, -0.95 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 200.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); + ent.v["origin"] = ( 2050.55, -1176.95, 92.625 ); + ent.v["angles"] = ( 282, 270, 90 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_town_cans_sm" ); + ent.v["origin"] = ( 888.034, -1532.84, 80.125 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_town_cans_sm" ); + ent.v["origin"] = ( 888.055, -1424.17, 80.0051 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_town_cans_sm" ); + ent.v["origin"] = ( 1058.12, -1424.92, 80.725 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); + ent.v["origin"] = ( -6494.99, 5193.01, 55.225 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -6004.73, 4178.79, -39.7161 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 99.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -6007.56, 4183.18, -46.8613 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 99.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -97; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); + ent.v["origin"] = ( -7256.49, 5356.49, 76.625 ); + ent.v["angles"] = ( 300.56, 56.1976, -63.4146 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_spark_blue_lg_loop" ); + ent.v["origin"] = ( 11224.3, 7631.21, -757.475 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_spark_blue_lg_loop" ); + ent.v["origin"] = ( 11166.9, 7525.87, -755.374 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( 1510.96, -426.276, -67.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_50x50_sm" ); + ent.v["origin"] = ( -5982.84, -6804.63, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -5858.36, -7105.72, -65 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 289.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -5694.71, -6884.39, -68 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 350.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( -5823.62, -6768.1, -65.2136 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 97.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_cool" ); + ent.v["origin"] = ( -7178.46, 5386.18, -43.6839 ); + ent.v["angles"] = ( 346, 41, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_cool" ); + ent.v["origin"] = ( -7176.71, 5393.31, -9.00734 ); + ent.v["angles"] = ( 346, 41, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_cool" ); + ent.v["origin"] = ( -7177.88, 5334.54, 45.5397 ); + ent.v["angles"] = ( 356, 55, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_cool" ); + ent.v["origin"] = ( -7061.11, 5401.32, -55.875 ); + ent.v["angles"] = ( 341, 56, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_cool" ); + ent.v["origin"] = ( -7108.24, 5323.87, -55.875 ); + ent.v["angles"] = ( 341, 55, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( -6364.25, 5404.07, -54.2979 ); + ent.v["angles"] = ( 327.291, 180.677, 4.76528 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( -6450.47, 5366.94, -55.875 ); + ent.v["angles"] = ( 317.576, 183.05, -3.56625 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( -6324.56, 5391.09, 23.3601 ); + ent.v["angles"] = ( 339.99, 181.99, -0.275328 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -6526.78, 5027.04, -32.4411 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 279.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -6536.44, 5005.17, -38.2548 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 272.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -6550.6, 5011.6, -33.6877 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 269.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( 10085.8, 7660.61, -580 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 156.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( 10099.7, 7278.2, -583 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 77.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( 10029.6, 7897.85, -584 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 206.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 10093.3, 7472.53, -583 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 10199.8, 7421.3, -573 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 88.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 10161.9, 7815.92, -576 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 81.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -2752.23, -202.843, -61.0126 ); + ent.v["angles"] = ( 10.9441, 272.285, 67.3066 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 150; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -2748.37, -203.92, -10.2652 ); + ent.v["angles"] = ( 0, 273, 9 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 150; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_flicker" ); + ent.v["origin"] = ( 1901.03, 564.856, 67.125 ); + ent.v["angles"] = ( 311.502, 195.461, 157.008 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( 9992.94, -1245.49, -217.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 130.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 10052.3, -1175.39, -223.625 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 276.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 10168.1, -1213.8, -221.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 180.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); + ent.v["origin"] = ( 10061.8, -1368.94, -222.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 70.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( 11263.9, 8174.39, -337.162 ); + ent.v["angles"] = ( 52, 12, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_bulb_xsm" ); + ent.v["origin"] = ( 11773.7, 8485.59, -469.375 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 290.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( 11333.8, 8107.72, -378.181 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 74.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( 10530.4, 8345.07, -413.424 ); + ent.v["angles"] = ( 90, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( -4437.91, -7528.95, 99.8901 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); + ent.v["origin"] = ( -4625.7, -7827.94, 124.725 ); + ent.v["angles"] = ( 295.505, 181.435, 177.976 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( -6346.4, -7804.18, -13.2077 ); + ent.v["angles"] = ( 338, 245, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( -6346.4, -7804.18, -13.2077 ); + ent.v["angles"] = ( 338, 245, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); + ent.v["origin"] = ( -6144.54, -7824.85, 130.125 ); + ent.v["angles"] = ( 282, 90, -180 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); + ent.v["origin"] = ( -5761.02, -7822.95, 130.125 ); + ent.v["angles"] = ( 270, 30.9987, -120.999 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_town_cans_sm" ); + ent.v["origin"] = ( -3834.8, -7320.06, 61.125 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( 2224.68, 104.286, 155.125 ); + ent.v["angles"] = ( 336.062, 255.377, -1.77889 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( 2202.63, 108.655, 148.125 ); + ent.v["angles"] = ( 336, 251, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); + ent.v["origin"] = ( 2182.71, 167.009, 152.125 ); + ent.v["angles"] = ( 336, 251, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_bulb_xsm" ); + ent.v["origin"] = ( 7144.94, -5606.8, 70.4908 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 13759.9, -1380.82, -92.9938 ); + ent.v["angles"] = ( 314, 229, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 13870.7, -722.317, -222.776 ); + ent.v["angles"] = ( 306, 229, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 13863.9, -341.626, -212.875 ); + ent.v["angles"] = ( 306, 229, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 13808.1, -628.646, -252.875 ); + ent.v["angles"] = ( 298, 229, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 13859.6, -974.169, -94 ); + ent.v["angles"] = ( 326, 229, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 13805.1, -1449.76, -132.375 ); + ent.v["angles"] = ( 317.174, 237.094, 15.7036 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 13558.1, -1418.66, -180.875 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); + ent.v["origin"] = ( 13987.6, -365.533, -152.199 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); + ent.v["origin"] = ( 13795.6, -429.569, -188.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( 13819.1, -1026.6, -185.938 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 3.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); + ent.v["origin"] = ( 13763.8, -1373.05, -181.438 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); + ent.v["origin"] = ( 14249.4, -1138.75, -195.847 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); + ent.v["origin"] = ( 13147.5, -1608.93, -198.477 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); + ent.v["origin"] = ( 13355.5, -236.408, -194.069 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( 14144.1, -1050.49, -192.334 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 3.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( 13846.6, -1797.74, -179.776 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 3.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( 13715.6, -740.508, -188.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 3.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); + ent.v["origin"] = ( 13280.2, -758.48, -202.824 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 33.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( 11569.6, 7207.64, -627.375 ); + ent.v["angles"] = ( 65, 90, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_spark_blue_lg_loop" ); + ent.v["origin"] = ( 11097.3, 8370.78, -472.312 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_spark_blue_lg_loop" ); + ent.v["origin"] = ( 11065.7, 8350.09, -480.76 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_transformer_on" ); + ent.v["origin"] = ( 11096.1, 8349.73, -498.022 ); + ent.v["angles"] = ( 10.9932, 163.963, -8.38868 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_spark_blue_sm_loop" ); + ent.v["origin"] = ( 11062.9, 8351.89, -475.091 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); + ent.v["origin"] = ( -11249.7, 904.058, 192 ); + ent.v["angles"] = ( 299.251, 356.208, -7.17259 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); + ent.v["origin"] = ( -11060.9, 836.008, 327.885 ); + ent.v["angles"] = ( 299.251, 356.208, -7.17259 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); + ent.v["origin"] = ( -10848.1, 727.41, 262.305 ); + ent.v["angles"] = ( 299.251, 356.208, -7.17259 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( -11453.1, -2704.04, 238 ); + ent.v["angles"] = ( 312.147, 207.959, -4.21566 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( -11447.1, -2717.45, 320 ); + ent.v["angles"] = ( 316.137, 207.551, -3.92308 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_detail" ); + ent.v["origin"] = ( -11237.1, -2774.08, 205.693 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 184.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); + ent.v["origin"] = ( -11065.4, -3093.87, 210.48 ); + ent.v["angles"] = ( 313, 209, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); + ent.v["origin"] = ( -11085.3, -3572.2, 238.785 ); + ent.v["angles"] = ( 323, 209, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); + ent.v["origin"] = ( -10751.6, 548.387, 281.46 ); + ent.v["angles"] = ( 298.016, 48.8707, 1.87996 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); + ent.v["origin"] = ( 11026.4, 8418.04, -452.626 ); + ent.v["angles"] = ( 319, 238, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); + ent.v["origin"] = ( 11047.5, 8544.31, -407.409 ); + ent.v["angles"] = ( 321.972, 238.53, -82.3373 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); + ent.v["origin"] = ( 10965.8, 8541.46, -361.01 ); + ent.v["angles"] = ( 319, 232, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); + ent.v["origin"] = ( 10784.7, 8598.1, -382.159 ); + ent.v["angles"] = ( 312, 253, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); + ent.v["origin"] = ( 11284.5, 8803.95, -209.321 ); + ent.v["angles"] = ( 71.1934, 180.803, -87.4102 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); + ent.v["origin"] = ( 10895.9, 8866.25, -196.195 ); + ent.v["angles"] = ( 73, 258, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); + ent.v["origin"] = ( 10781.7, 8702.04, -222.415 ); + ent.v["angles"] = ( 88, 267, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); + ent.v["origin"] = ( 10799.1, 8575.29, -500.938 ); + ent.v["angles"] = ( 79, 87, 90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); + ent.v["origin"] = ( 10979.3, 8831.12, -420.153 ); + ent.v["angles"] = ( 73, 267, -90 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( 7976.72, -4577.1, 193.859 ); + ent.v["angles"] = ( 18.9006, 87.1581, -14.8078 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 8107.3, -4901.58, 390.125 ); + ent.v["angles"] = ( 322.027, 247.537, -1.56188 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 8254.05, -4975.36, 463.125 ); + ent.v["angles"] = ( 322.434, 234.888, 6.2056 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 8194.13, -4983.58, 441.125 ); + ent.v["angles"] = ( 322.109, 239.929, 3.1195 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 8249.4, -4832.61, 434.125 ); + ent.v["angles"] = ( 322, 245, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 8226.89, -5241.31, 421.125 ); + ent.v["angles"] = ( 322, 245, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 8046.06, -4860.87, 413.125 ); + ent.v["angles"] = ( 322.677, 257.613, -7.72609 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 635.54, 407.845, 91.125 ); + ent.v["angles"] = ( 16, 71, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 628.125, 406.734, 43.7233 ); + ent.v["angles"] = ( 3, 71, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 638.811, 426.54, -18.875 ); + ent.v["angles"] = ( 349, 71, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 784.565, 726.997, -33.8978 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 270.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); + ent.v["origin"] = ( 811.849, 729.36, -35.0041 ); + ent.v["angles"] = ( 0, 270, -2 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); + ent.v["origin"] = ( 942.825, 799.82, -52.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 223.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_river" ); + ent.v["origin"] = ( -1148.16, -1138.11, -41.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 80.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_river" ); + ent.v["origin"] = ( -2664.01, -1345.03, -346.451 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 104.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_river" ); + ent.v["origin"] = ( -2674.54, 433.639, -359.784 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_river" ); + ent.v["origin"] = ( -1124.75, 259.523, -48.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 69.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -863.312, -745.248, -48.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -1196.8, -787.911, -47.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -1381.38, -46.0962, -47.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_river" ); + ent.v["origin"] = ( -2645.12, 9.70624, -357.904 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 87.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_river" ); + ent.v["origin"] = ( -2719.28, -285.725, -334.581 ); + ent.v["angles"] = ( 1, 87, 3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_river" ); + ent.v["origin"] = ( -2685.84, -997.132, -346.559 ); + ent.v["angles"] = ( 358.157, 83.9017, 1.94423 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -37; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_smoke_tall" ); + ent.v["origin"] = ( -2770.44, -707.874, -115.875 ); + ent.v["angles"] = ( 12, 275, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 150; + ent = maps\mp\_utility::createexploder( "fx_zmb_lava_smoke_tall" ); + ent.v["origin"] = ( -2778.19, -155.061, -94.875 ); + ent.v["angles"] = ( 29, 80, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 150; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); + ent.v["origin"] = ( -2291.93, -758.164, -101.161 ); + ent.v["angles"] = ( 11, 214, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); + ent.v["origin"] = ( -1255.13, -1277.79, -34.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 83.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_river" ); + ent.v["origin"] = ( -2742.09, -665.677, -333.1 ); + ent.v["angles"] = ( 1, 87, 3 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -1508.17, -320.626, -58.369 ); + ent.v["angles"] = ( 355, 187, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -1452.09, -720.211, -60.0286 ); + ent.v["angles"] = ( 359.993, 186.739, -2.98858 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -1415.76, -1177.25, -62.1707 ); + ent.v["angles"] = ( 356.67, 156.949, -0.497783 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -704.822, -246.538, -58.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 22.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -779.445, -1098.9, -61.8023 ); + ent.v["angles"] = ( 0.993918, 9.99335, -0.738612 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -699.587, -705.189, -57.1237 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 345.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -1140.42, -15.2616, -48.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -1273.82, -1205.47, -42.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 84.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -2204.13, -5739.66, -80.9468 ); + ent.v["angles"] = ( 7, 307, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -1994.56, -5882.45, -95.6035 ); + ent.v["angles"] = ( 7, 307, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -1875.72, -6466.37, -98.9131 ); + ent.v["angles"] = ( 7, 307, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -1610.46, -6120.94, -92.074 ); + ent.v["angles"] = ( 7, 307, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( -2214.93, -6067.3, -102.865 ); + ent.v["angles"] = ( 7, 307, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -1708.85, -6610.85, -95.0234 ); + ent.v["angles"] = ( 355.794, 73.794, -4.39947 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -2318.27, -6315.39, -107.815 ); + ent.v["angles"] = ( 353.394, 27.6107, 4.95295 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -1948.05, -6554.84, -111.909 ); + ent.v["angles"] = ( 356.111, 77.7913, -4.68174 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -1528.88, -5886.45, -91.5689 ); + ent.v["angles"] = ( 356.621, 83.7816, -5.0618 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -2024.68, -5586.57, -68.3597 ); + ent.v["angles"] = ( 356.111, 77.7913, -4.68174 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_river" ); + ent.v["origin"] = ( 8336.11, -8461.36, -126.254 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 135.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_river" ); + ent.v["origin"] = ( 7440.73, -8528.75, -124.913 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 81.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( 7171.28, -6397.54, -126 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 107.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( 7054.04, -6397.21, -126 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 86.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( 7094.94, -6285.23, -126 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 107.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 8662.38, -5640.09, 124.292 ); + ent.v["angles"] = ( 323, 318, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 8599.65, -5634.21, 153.303 ); + ent.v["angles"] = ( 321.616, 319.338, -39.0353 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 5262.91, 7044.48, 43.9142 ); + ent.v["angles"] = ( 316.21, 262.066, 4.81097 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); + ent.v["origin"] = ( 5174.93, 7053.13, 41.125 ); + ent.v["angles"] = ( 316.411, 278.687, -6.71217 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_desklamp" ); + ent.v["origin"] = ( -7101.92, 5147.13, -0.163522 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 86.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( -4683.65, -7970.08, 52.9438 ); + ent.v["angles"] = ( 68, 180, -180 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_desklamp" ); + ent.v["origin"] = ( 12139.1, 8505.25, -696.157 ); + ent.v["angles"] = ( 85.685, 136.004, 133.029 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -64; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_spark_int_runner" ); + ent.v["origin"] = ( 7967.02, -464.256, 1429.54 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 416; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_spark_int_runner" ); + ent.v["origin"] = ( 7264.27, -458.783, 1045.58 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 305.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 416; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_spark_int_runner" ); + ent.v["origin"] = ( 7964.59, -462.798, 663.232 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 59.0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 416; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); + ent.v["origin"] = ( -6365.04, 4578.04, 109.9 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 400; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); + ent.v["origin"] = ( -6365.1, 4578.04, 109.746 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 401; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); + ent.v["origin"] = ( -3946.92, -7250.32, 107.1 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 403; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); + ent.v["origin"] = ( -3946.86, -7250.19, 107 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 402; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); + ent.v["origin"] = ( -45.1183, -5452.09, 92.4005 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 405; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); + ent.v["origin"] = ( -45.2307, -5452.06, 92.5112 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 404; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); + ent.v["origin"] = ( 10160, -1748.7, -45.9436 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 406; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); + ent.v["origin"] = ( 10160.1, -1748.62, -45.9508 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 407; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); + ent.v["origin"] = ( 8133.62, 4787.71, -194.497 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 409; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); + ent.v["origin"] = ( 8133.65, 4787.75, -194.479 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 408; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); + ent.v["origin"] = ( 6301.07, 5079.12, 67.4271 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 410; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); + ent.v["origin"] = ( 6300.89, 5078.98, 67.4032 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 411; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); + ent.v["origin"] = ( -627.359, -615.075, 116.432 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 412; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); + ent.v["origin"] = ( -627.572, -615.202, 116.432 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 413; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); + ent.v["origin"] = ( -4418.11, -626.9, 192.003 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 415; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); + ent.v["origin"] = ( -4418.04, -626.987, 191.91 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 414; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); + ent.v["origin"] = ( -6917.44, 3891.27, 81.125 ); + ent.v["angles"] = ( 90, 359.662, -0.33762 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); + ent.v["origin"] = ( -9032.52, 4222.59, 40.0809 ); + ent.v["angles"] = ( 0.716713, 61.9889, -1.86754 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_creek" ); + ent.v["origin"] = ( 11131.7, 8831.49, -894.668 ); + ent.v["angles"] = ( 81.0228, 227.719, -27.4136 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_smoke_pit" ); + ent.v["origin"] = ( 10945.1, 8621.79, -1116.88 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 61.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_creek" ); + ent.v["origin"] = ( 11178.6, 8859.45, -715.452 ); + ent.v["angles"] = ( 63.6007, 216.198, -13.3547 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_creek" ); + ent.v["origin"] = ( 10953.1, 8914.32, -688.637 ); + ent.v["angles"] = ( 53.9874, 292.702, 1.41178 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_creek" ); + ent.v["origin"] = ( 10983, 8838.08, -841.275 ); + ent.v["angles"] = ( 66.6739, 293.054, 17.3617 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_creek" ); + ent.v["origin"] = ( 10999, 8819.35, -930.992 ); + ent.v["angles"] = ( 74.6464, 318.518, 15.5448 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_smoke_pit" ); + ent.v["origin"] = ( 11118.6, 8507.76, -1176.88 ); + ent.v["angles"] = ( 340, 61, 0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); + ent.v["origin"] = ( 1417.38, -341.936, -67.875 ); + ent.v["angles"] = vectorscale( ( 0, 1, 0 ), 175.0 ); + ent.v["type"] = "oneshotfx"; + ent.v["delay"] = -74; + ent = maps\mp\_utility::createexploder( "fx_zmb_tranzit_flourescent_flicker" ); + ent.v["origin"] = ( 1927.64, -1060.33, 131.881 ); + ent.v["angles"] = ( 67, 269.911, 87.9181 ); + ent.v["type"] = "exploder"; + ent.v["delay"] = 0; + ent.v["exploder"] = 490; +} diff --git a/ZM/Maps/Tranzit/maps/mp/gametypes_zm/zgrief.gsc b/ZM/Maps/Tranzit/maps/mp/gametypes_zm/zgrief.gsc new file mode 100644 index 0000000..9138fd2 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/gametypes_zm/zgrief.gsc @@ -0,0 +1,814 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\gametypes_zm\zmeat; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_game_module_meat_utility; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_weap_cymbal_monkey; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\_demo; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_equipment; + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::main(); + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.custom_spectate_permissions = ::setspectatepermissionsgrief; + level._game_module_custom_spawn_init_func = maps\mp\gametypes_zm\_zm_gametype::custom_spawn_init_func; + level._game_module_stat_update_func = maps\mp\zombies\_zm_stats::grief_custom_stat_update; + level._game_module_player_damage_callback = maps\mp\gametypes_zm\_zm_gametype::game_module_player_damage_callback; + level.custom_end_screen = ::custom_end_screen; + level.gamemode_map_postinit["zgrief"] = ::postinit_func; + level._supress_survived_screen = 1; + level.game_module_team_name_override_og_x = 155; + level.prevent_player_damage = ::player_prevent_damage; + level._game_module_player_damage_grief_callback = ::game_module_player_damage_grief_callback; + level._grief_reset_message = ::grief_reset_message; + level._game_module_player_laststand_callback = ::grief_laststand_weapon_save; + level.onplayerspawned_restore_previous_weapons = ::grief_laststand_weapons_return; + level.game_module_onplayerconnect = ::grief_onplayerconnect; + level.game_mode_spawn_player_logic = ::game_mode_spawn_player_logic; + level.game_mode_custom_onplayerdisconnect = ::grief_onplayerdisconnect; + maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zgrief" ); +} + +grief_onplayerconnect() +{ + self thread move_team_icons(); + self thread maps\mp\gametypes_zm\zmeat::create_item_meat_watcher(); + self thread zgrief_player_bled_out_msg(); +} + +grief_onplayerdisconnect( disconnecting_player ) +{ + level thread update_players_on_bleedout_or_disconnect( disconnecting_player ); +} + +setspectatepermissionsgrief() +{ + self allowspectateteam( "allies", 1 ); + self allowspectateteam( "axis", 1 ); + self allowspectateteam( "freelook", 0 ); + self allowspectateteam( "none", 1 ); +} + +custom_end_screen() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + players[i].game_over_hud = newclienthudelem( players[i] ); + players[i].game_over_hud.alignx = "center"; + players[i].game_over_hud.aligny = "middle"; + players[i].game_over_hud.horzalign = "center"; + players[i].game_over_hud.vertalign = "middle"; + players[i].game_over_hud.y -= 130; + players[i].game_over_hud.foreground = 1; + players[i].game_over_hud.fontscale = 3; + players[i].game_over_hud.alpha = 0; + players[i].game_over_hud.color = ( 1, 1, 1 ); + players[i].game_over_hud.hidewheninmenu = 1; + players[i].game_over_hud settext( &"ZOMBIE_GAME_OVER" ); + players[i].game_over_hud fadeovertime( 1 ); + players[i].game_over_hud.alpha = 1; + + if ( players[i] issplitscreen() ) + { + players[i].game_over_hud.fontscale = 2; + players[i].game_over_hud.y += 40; + } + + players[i].survived_hud = newclienthudelem( players[i] ); + players[i].survived_hud.alignx = "center"; + players[i].survived_hud.aligny = "middle"; + players[i].survived_hud.horzalign = "center"; + players[i].survived_hud.vertalign = "middle"; + players[i].survived_hud.y -= 100; + players[i].survived_hud.foreground = 1; + players[i].survived_hud.fontscale = 2; + players[i].survived_hud.alpha = 0; + players[i].survived_hud.color = ( 1, 1, 1 ); + players[i].survived_hud.hidewheninmenu = 1; + + if ( players[i] issplitscreen() ) + { + players[i].survived_hud.fontscale = 1.5; + players[i].survived_hud.y += 40; + } + + winner_text = &"ZOMBIE_GRIEF_WIN"; + loser_text = &"ZOMBIE_GRIEF_LOSE"; + + if ( level.round_number < 2 ) + { + winner_text = &"ZOMBIE_GRIEF_WIN_SINGLE"; + loser_text = &"ZOMBIE_GRIEF_LOSE_SINGLE"; + } + + if ( isdefined( level.host_ended_game ) && level.host_ended_game ) + players[i].survived_hud settext( &"MP_HOST_ENDED_GAME" ); + else if ( isdefined( level.gamemodulewinningteam ) && players[i]._encounters_team == level.gamemodulewinningteam ) + players[i].survived_hud settext( winner_text, level.round_number ); + else + players[i].survived_hud settext( loser_text, level.round_number ); + + players[i].survived_hud fadeovertime( 1 ); + players[i].survived_hud.alpha = 1; + } +} + +postinit_func() +{ + level.min_humans = 1; + level.zombie_ai_limit = 24; + level.prevent_player_damage = ::player_prevent_damage; + level.lock_player_on_team_score = 1; + level._zombiemode_powerup_grab = ::meat_stink_powerup_grab; + level.meat_bounce_override = ::meat_bounce_override; + level._zombie_spawning = 0; + level._get_game_module_players = undefined; + level.powerup_drop_count = 0; + level.is_zombie_level = 1; + level._effect["meat_impact"] = loadfx( "maps/zombie/fx_zmb_meat_impact" ); + level._effect["spawn_cloud"] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); + level._effect["meat_stink_camera"] = loadfx( "maps/zombie/fx_zmb_meat_stink_camera" ); + level._effect["meat_stink_torso"] = loadfx( "maps/zombie/fx_zmb_meat_stink_torso" ); + include_powerup( "meat_stink" ); + maps\mp\zombies\_zm_powerups::add_zombie_powerup( "meat_stink", "t6_wpn_zmb_meat_world", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_drop_meat, 0, 0, 0 ); + setmatchtalkflag( "DeadChatWithDead", 1 ); + setmatchtalkflag( "DeadChatWithTeam", 1 ); + setmatchtalkflag( "DeadHearTeamLiving", 1 ); + setmatchtalkflag( "DeadHearAllLiving", 1 ); + setmatchtalkflag( "EveryoneHearsEveryone", 1 ); +} + +func_should_drop_meat() +{ + if ( minigun_no_drop() ) + return false; + + return true; +} + +minigun_no_drop() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].ignoreme == 1 ) + return true; + } + + if ( isdefined( level.meat_on_ground ) && level.meat_on_ground ) + return true; + + return false; +} + +grief_game_end_check_func() +{ + return 0; +} + +player_prevent_damage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + if ( isdefined( eattacker ) && isplayer( eattacker ) && self != eattacker && !eattacker hasperk( "specialty_noname" ) && !( isdefined( self.is_zombie ) && self.is_zombie ) ) + return true; + + return false; +} + +game_module_player_damage_grief_callback( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + penalty = 10; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && eattacker != self && eattacker.team != self.team && smeansofdeath == "MOD_MELEE" ) + self applyknockback( idamage, vdir ); +} + +onprecachegametype() +{ + level.playersuicideallowed = 1; + level.canplayersuicide = ::canplayersuicide; + level.suicide_weapon = "death_self_zm"; + precacheitem( "death_self_zm" ); + precacheshellshock( "grief_stab_zm" ); + precacheshader( "faction_cdc" ); + precacheshader( "faction_cia" ); + precacheshader( "waypoint_revive_cdc_zm" ); + precacheshader( "waypoint_revive_cia_zm" ); + level._effect["butterflies"] = loadfx( "maps/zombie/fx_zmb_impact_noharm" ); + level thread maps\mp\zombies\_zm_game_module_meat_utility::init_item_meat( "zgrief" ); + level thread maps\mp\gametypes_zm\_zm_gametype::init(); + maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zgrief" ); +} + +onstartgametype() +{ + level.no_end_game_check = 1; + level._game_module_game_end_check = ::grief_game_end_check_func; + level.round_end_custom_logic = ::grief_round_end_custom_logic; + maps\mp\gametypes_zm\_zm_gametype::setup_classic_gametype(); + maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zgrief", ::zgrief_main ); +} + +zgrief_main() +{ + level thread maps\mp\zombies\_zm::round_start(); + level thread maps\mp\gametypes_zm\_zm_gametype::kill_all_zombies(); + flag_wait( "initial_blackscreen_passed" ); + level thread maps\mp\zombies\_zm_game_module::wait_for_team_death_and_round_end(); + players = get_players(); + + foreach ( player in players ) + player.is_hotjoin = 0; + + wait 1; + playsoundatposition( "vox_zmba_grief_intro_0", ( 0, 0, 0 ) ); +} + +move_team_icons() +{ + self endon( "disconnect" ); + flag_wait( "initial_blackscreen_passed" ); + wait 0.5; +} + +kill_start_chest() +{ + flag_wait( "initial_blackscreen_passed" ); + wait 2; + start_chest = getstruct( "start_chest", "script_noteworthy" ); + start_chest maps\mp\zombies\_zm_magicbox::hide_chest(); +} + +meat_stink_powerup_grab( powerup, who ) +{ + switch ( powerup.powerup_name ) + { + case "meat_stink": + level thread meat_stink( who ); + break; + } +} + +meat_stink( who ) +{ + weapons = who getweaponslist(); + has_meat = 0; + + foreach ( weapon in weapons ) + { + if ( weapon == "item_meat_zm" ) + has_meat = 1; + } + + if ( has_meat ) + return; + + who.pre_meat_weapon = who getcurrentweapon(); + level notify( "meat_grabbed" ); + who notify( "meat_grabbed" ); + who playsound( "zmb_pickup_meat" ); + who increment_is_drinking(); + who giveweapon( "item_meat_zm" ); + who switchtoweapon( "item_meat_zm" ); + who setweaponammoclip( "item_meat_zm", 1 ); +} + +meat_stink_on_ground( position_to_play ) +{ + level.meat_on_ground = 1; + attractor_point = spawn( "script_model", position_to_play ); + attractor_point setmodel( "tag_origin" ); + attractor_point playsound( "zmb_land_meat" ); + wait 0.2; + playfxontag( level._effect["meat_stink_torso"], attractor_point, "tag_origin" ); + attractor_point playloopsound( "zmb_meat_flies" ); + attractor_point create_zombie_point_of_interest( 1536, 32, 10000 ); + attractor_point.attract_to_origin = 1; + attractor_point thread create_zombie_point_of_interest_attractor_positions( 4, 45 ); + attractor_point thread maps\mp\zombies\_zm_weap_cymbal_monkey::wait_for_attractor_positions_complete(); + attractor_point delay_thread( 15, ::self_delete ); + wait 16.0; + level.meat_on_ground = undefined; +} + +meat_bounce_override( pos, normal, ent ) +{ + if ( isdefined( ent ) && isplayer( ent ) ) + { + if ( !ent maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + level thread meat_stink_player( ent ); + + if ( isdefined( self.owner ) ) + { + maps\mp\_demo::bookmark( "zm_player_meat_stink", gettime(), ent, self.owner, 0, self ); + self.owner maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_given" ); + } + } + } + else + { + players = getplayers(); + closest_player = undefined; + closest_player_dist = 10000.0; + + for ( player_index = 0; player_index < players.size; player_index++ ) + { + player_to_check = players[player_index]; + + if ( self.owner == player_to_check ) + continue; + + if ( player_to_check maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + continue; + + distsq = distancesquared( pos, player_to_check.origin ); + + if ( distsq < closest_player_dist ) + { + closest_player = player_to_check; + closest_player_dist = distsq; + } + } + + if ( isdefined( closest_player ) ) + { + level thread meat_stink_player( closest_player ); + + if ( isdefined( self.owner ) ) + { + maps\mp\_demo::bookmark( "zm_player_meat_stink", gettime(), closest_player, self.owner, 0, self ); + self.owner maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_given" ); + } + } + else + { + valid_poi = check_point_in_enabled_zone( pos, undefined, undefined ); + + if ( valid_poi ) + { + self hide(); + level thread meat_stink_on_ground( self.origin ); + } + } + + playfx( level._effect["meat_impact"], self.origin ); + } + + self delete(); +} + +meat_stink_player( who ) +{ + level notify( "new_meat_stink_player" ); + level endon( "new_meat_stink_player" ); + who.ignoreme = 0; + players = get_players(); + + foreach ( player in players ) + { + player thread meat_stink_player_cleanup(); + + if ( player != who ) + player.ignoreme = 1; + } + + who thread meat_stink_player_create(); + who waittill_any_or_timeout( 30, "disconnect", "player_downed", "bled_out" ); + players = get_players(); + + foreach ( player in players ) + { + player thread meat_stink_player_cleanup(); + player.ignoreme = 0; + } +} + +meat_stink_player_create() +{ + self maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_received" ); + self endon( "disconnect" ); + self endon( "death" ); + tagname = "J_SpineLower"; + self.meat_stink_3p = spawn( "script_model", self gettagorigin( tagname ) ); + self.meat_stink_3p setmodel( "tag_origin" ); + self.meat_stink_3p linkto( self, tagname ); + wait 0.5; + playfxontag( level._effect["meat_stink_torso"], self.meat_stink_3p, "tag_origin" ); + self setclientfieldtoplayer( "meat_stink", 1 ); +} + +meat_stink_player_cleanup() +{ + if ( isdefined( self.meat_stink_3p ) ) + { + self.meat_stink_3p unlink(); + self.meat_stink_3p delete(); + } + + self setclientfieldtoplayer( "meat_stink", 0 ); +} + +door_close_zombie_think() +{ + self endon( "death" ); + + while ( isalive( self ) ) + { + if ( isdefined( self.enemy ) && isplayer( self.enemy ) ) + { + insamezone = 0; + keys = getarraykeys( level.zones ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( keys[i] ) && self.enemy maps\mp\zombies\_zm_zonemgr::entity_in_zone( keys[i] ) ) + insamezone = 1; + } + + if ( insamezone ) + { + wait 3; + continue; + } + + nearestzombienode = getnearestnode( self.origin ); + nearestplayernode = getnearestnode( self.enemy.origin ); + + if ( isdefined( nearestzombienode ) && isdefined( nearestplayernode ) ) + { + if ( !nodesvisible( nearestzombienode, nearestplayernode ) && !nodescanpath( nearestzombienode, nearestplayernode ) ) + self silentlyremovezombie(); + } + } + + wait 1; + } +} + +silentlyremovezombie() +{ + level.zombie_total++; + playfx( level._effect["spawn_cloud"], self.origin ); + self.skip_death_notetracks = 1; + self.nodeathragdoll = 1; + self dodamage( self.maxhealth * 2, self.origin, self, self, "none", "MOD_SUICIDE" ); + self self_delete(); +} + +zgrief_player_bled_out_msg() +{ + level endon( "end_game" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "bled_out" ); + + level thread update_players_on_bleedout_or_disconnect( self ); + } +} + +show_grief_hud_msg( msg, msg_parm, offset, cleanup_end_game ) +{ + self endon( "disconnect" ); + + while ( isdefined( level.hostmigrationtimer ) ) + wait 0.05; + + zgrief_hudmsg = newclienthudelem( self ); + zgrief_hudmsg.alignx = "center"; + zgrief_hudmsg.aligny = "middle"; + zgrief_hudmsg.horzalign = "center"; + zgrief_hudmsg.vertalign = "middle"; + zgrief_hudmsg.y -= 130; + + if ( self issplitscreen() ) + zgrief_hudmsg.y += 70; + + if ( isdefined( offset ) ) + zgrief_hudmsg.y += offset; + + zgrief_hudmsg.foreground = 1; + zgrief_hudmsg.fontscale = 5; + zgrief_hudmsg.alpha = 0; + zgrief_hudmsg.color = ( 1, 1, 1 ); + zgrief_hudmsg.hidewheninmenu = 1; + zgrief_hudmsg.font = "default"; + + if ( isdefined( cleanup_end_game ) && cleanup_end_game ) + { + level endon( "end_game" ); + zgrief_hudmsg thread show_grief_hud_msg_cleanup(); + } + + if ( isdefined( msg_parm ) ) + zgrief_hudmsg settext( msg, msg_parm ); + else + zgrief_hudmsg settext( msg ); + + zgrief_hudmsg changefontscaleovertime( 0.25 ); + zgrief_hudmsg fadeovertime( 0.25 ); + zgrief_hudmsg.alpha = 1; + zgrief_hudmsg.fontscale = 2; + wait 3.25; + zgrief_hudmsg changefontscaleovertime( 1 ); + zgrief_hudmsg fadeovertime( 1 ); + zgrief_hudmsg.alpha = 0; + zgrief_hudmsg.fontscale = 5; + wait 1; + zgrief_hudmsg notify( "death" ); + + if ( isdefined( zgrief_hudmsg ) ) + zgrief_hudmsg destroy(); +} + +show_grief_hud_msg_cleanup() +{ + self endon( "death" ); + + level waittill( "end_game" ); + + if ( isdefined( self ) ) + self destroy(); +} + +grief_reset_message() +{ + msg = &"ZOMBIE_GRIEF_RESET"; + players = get_players(); + + if ( isdefined( level.hostmigrationtimer ) ) + { + while ( isdefined( level.hostmigrationtimer ) ) + wait 0.05; + + wait 4; + } + + foreach ( player in players ) + player thread show_grief_hud_msg( msg ); + + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "grief_restarted" ); +} + +grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + self.grief_savedweapon_weapons = self getweaponslist(); + self.grief_savedweapon_weaponsammo_stock = []; + self.grief_savedweapon_weaponsammo_clip = []; + self.grief_savedweapon_currentweapon = self getcurrentweapon(); + self.grief_savedweapon_grenades = self get_player_lethal_grenade(); + + if ( isdefined( self.grief_savedweapon_grenades ) ) + self.grief_savedweapon_grenades_clip = self getweaponammoclip( self.grief_savedweapon_grenades ); + + self.grief_savedweapon_tactical = self get_player_tactical_grenade(); + + if ( isdefined( self.grief_savedweapon_tactical ) ) + self.grief_savedweapon_tactical_clip = self getweaponammoclip( self.grief_savedweapon_tactical ); + + for ( i = 0; i < self.grief_savedweapon_weapons.size; i++ ) + { + self.grief_savedweapon_weaponsammo_clip[i] = self getweaponammoclip( self.grief_savedweapon_weapons[i] ); + self.grief_savedweapon_weaponsammo_stock[i] = self getweaponammostock( self.grief_savedweapon_weapons[i] ); + } + + if ( isdefined( self.hasriotshield ) && self.hasriotshield ) + self.grief_hasriotshield = 1; + + if ( self hasweapon( "claymore_zm" ) ) + { + self.grief_savedweapon_claymore = 1; + self.grief_savedweapon_claymore_clip = self getweaponammoclip( "claymore_zm" ); + } + + if ( isdefined( self.current_equipment ) ) + self.grief_savedweapon_equipment = self.current_equipment; +} + +grief_laststand_weapons_return() +{ + if ( !( isdefined( level.isresetting_grief ) && level.isresetting_grief ) ) + return false; + + if ( !isdefined( self.grief_savedweapon_weapons ) ) + return false; + + primary_weapons_returned = 0; + + foreach ( index, weapon in self.grief_savedweapon_weapons ) + { + if ( isdefined( self.grief_savedweapon_grenades ) && weapon == self.grief_savedweapon_grenades || isdefined( self.grief_savedweapon_tactical ) && weapon == self.grief_savedweapon_tactical ) + continue; + + if ( isweaponprimary( weapon ) ) + { + if ( primary_weapons_returned >= 2 ) + continue; + + primary_weapons_returned++; + } + + if ( "item_meat_zm" == weapon ) + continue; + + self giveweapon( weapon, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); + + if ( isdefined( self.grief_savedweapon_weaponsammo_clip[index] ) ) + self setweaponammoclip( weapon, self.grief_savedweapon_weaponsammo_clip[index] ); + + if ( isdefined( self.grief_savedweapon_weaponsammo_stock[index] ) ) + self setweaponammostock( weapon, self.grief_savedweapon_weaponsammo_stock[index] ); + } + + if ( isdefined( self.grief_savedweapon_grenades ) ) + { + self giveweapon( self.grief_savedweapon_grenades ); + + if ( isdefined( self.grief_savedweapon_grenades_clip ) ) + self setweaponammoclip( self.grief_savedweapon_grenades, self.grief_savedweapon_grenades_clip ); + } + + if ( isdefined( self.grief_savedweapon_tactical ) ) + { + self giveweapon( self.grief_savedweapon_tactical ); + + if ( isdefined( self.grief_savedweapon_tactical_clip ) ) + self setweaponammoclip( self.grief_savedweapon_tactical, self.grief_savedweapon_tactical_clip ); + } + + if ( isdefined( self.current_equipment ) ) + self maps\mp\zombies\_zm_equipment::equipment_take( self.current_equipment ); + + if ( isdefined( self.grief_savedweapon_equipment ) ) + { + self.do_not_display_equipment_pickup_hint = 1; + self maps\mp\zombies\_zm_equipment::equipment_give( self.grief_savedweapon_equipment ); + self.do_not_display_equipment_pickup_hint = undefined; + } + + if ( isdefined( self.grief_hasriotshield ) && self.grief_hasriotshield ) + { + if ( isdefined( self.player_shield_reset_health ) ) + self [[ self.player_shield_reset_health ]](); + } + + if ( isdefined( self.grief_savedweapon_claymore ) && self.grief_savedweapon_claymore ) + { + self giveweapon( "claymore_zm" ); + self set_player_placeable_mine( "claymore_zm" ); + self setactionslot( 4, "weapon", "claymore_zm" ); + self setweaponammoclip( "claymore_zm", self.grief_savedweapon_claymore_clip ); + } + + primaries = self getweaponslistprimaries(); + + foreach ( weapon in primaries ) + { + if ( isdefined( self.grief_savedweapon_currentweapon ) && self.grief_savedweapon_currentweapon == weapon ) + { + self switchtoweapon( weapon ); + return true; + } + } + + if ( primaries.size > 0 ) + { + self switchtoweapon( primaries[0] ); + return true; + } + + assert( primaries.size > 0, "GRIEF: There was a problem restoring the weapons" ); + return false; +} + +grief_store_player_scores() +{ + players = get_players(); + + foreach ( player in players ) + player._pre_round_score = player.score; +} + +grief_restore_player_score() +{ + if ( !isdefined( self._pre_round_score ) ) + self._pre_round_score = self.score; + + if ( isdefined( self._pre_round_score ) ) + { + self.score = self._pre_round_score; + self.pers["score"] = self._pre_round_score; + } +} + +game_mode_spawn_player_logic() +{ + if ( flag( "start_zombie_round_logic" ) && !isdefined( self.is_hotjoin ) ) + { + self.is_hotjoin = 1; + return true; + } + + return false; +} + +update_players_on_bleedout_or_disconnect( excluded_player ) +{ + other_team = undefined; + players = get_players(); + players_remaining = 0; + + foreach ( player in players ) + { + if ( player == excluded_player ) + continue; + + if ( player.team == excluded_player.team ) + { + if ( is_player_valid( player ) ) + players_remaining++; + + continue; + } + } + + foreach ( player in players ) + { + if ( player == excluded_player ) + continue; + + if ( player.team != excluded_player.team ) + { + other_team = player.team; + + if ( players_remaining < 1 ) + { + player thread show_grief_hud_msg( &"ZOMBIE_ZGRIEF_ALL_PLAYERS_DOWN", undefined, undefined, 1 ); + player delay_thread_watch_host_migrate( 2, ::show_grief_hud_msg, &"ZOMBIE_ZGRIEF_SURVIVE", undefined, 30, 1 ); + continue; + } + + player thread show_grief_hud_msg( &"ZOMBIE_ZGRIEF_PLAYER_BLED_OUT", players_remaining ); + } + } + + if ( players_remaining == 1 ) + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "last_player", excluded_player.team ); + + if ( !isdefined( other_team ) ) + return; + + if ( players_remaining < 1 ) + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "4_player_down", other_team ); + else + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( players_remaining + "_player_left", other_team ); +} + +delay_thread_watch_host_migrate( timer, func, param1, param2, param3, param4, param5, param6 ) +{ + self thread _delay_thread_watch_host_migrate_proc( func, timer, param1, param2, param3, param4, param5, param6 ); +} + +_delay_thread_watch_host_migrate_proc( func, timer, param1, param2, param3, param4, param5, param6 ) +{ + self endon( "death" ); + self endon( "disconnect" ); + wait( timer ); + + if ( isdefined( level.hostmigrationtimer ) ) + { + while ( isdefined( level.hostmigrationtimer ) ) + wait 0.05; + + wait( timer ); + } + + single_thread( self, func, param1, param2, param3, param4, param5, param6 ); +} + +grief_round_end_custom_logic() +{ + waittillframeend; + + if ( isdefined( level.gamemodulewinningteam ) ) + level notify( "end_round_think" ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/gametypes_zm/zmeat.gsc b/ZM/Maps/Tranzit/maps/mp/gametypes_zm/zmeat.gsc new file mode 100644 index 0000000..072980c --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/gametypes_zm/zmeat.gsc @@ -0,0 +1,2289 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_game_module_meat_utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_spawner; + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::main(); + registerclientfield( "allplayers", "holding_meat", 7000, 1, "int" ); + registerclientfield( "scriptmover", "ring_glowfx", 7000, 1, "int" ); + registerclientfield( "scriptmover", "ring_glow_meatfx", 7000, 1, "int" ); + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + set_game_var( "ZM_roundLimit", 5 ); + set_game_var( "ZM_scoreLimit", 5 ); + set_gamemode_var( "post_init_zombie_spawn_func", ::meat_zombie_post_spawn_init ); + set_gamemode_var( "match_end_notify", "meat_end" ); + set_gamemode_var( "match_end_func", ::meat_end_match ); + level._no_static_unitriggers = 1; + level._game_module_player_damage_callback = maps\mp\gametypes_zm\_zm_gametype::game_module_player_damage_callback; + level._game_module_player_laststand_callback = ::meat_last_stand_callback; + level.no_end_game_check = 1; + maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zmeat" ); + level thread maps\mp\gametypes_zm\_zm_gametype::init(); + level.zm_roundswitch = 1; + level.zm_switchsides_on_roundswitch = 1; + level._effect["meat_marker"] = loadfx( "maps/zombie/fx_zmb_meat_marker" ); + level._effect["butterflies"] = loadfx( "maps/zombie/fx_zmb_impact_noharm" ); + level._effect["meat_glow"] = loadfx( "maps/zombie/fx_zmb_meat_glow" ); + level._effect["meat_glow3p"] = loadfx( "maps/zombie/fx_zmb_meat_glow_3p" ); + level._effect["spawn_cloud"] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); + level._effect["fw_burst"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_burst_center" ); + level._effect["fw_impact"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_drop_impact" ); + level._effect["fw_drop"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_drop_trail" ); + level._effect["fw_trail"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_trail" ); + level._effect["fw_trail_cheap"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_trail_intro" ); + level._effect["fw_pre_burst"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_burst_small" ); + level._effect["meat_bounce"] = loadfx( "maps/zombie/fx_zmb_meat_collision_glow" ); + level._effect["ring_glow"] = loadfx( "misc/fx_zombie_powerup_on" ); + level.can_revive_game_module = ::can_revive; + onplayerconnect_callback( ::meat_on_player_connect ); + spawn_level_meat_manager(); + init_animtree(); +} + +onprecachegametype() +{ + level thread maps\mp\zombies\_zm_game_module_meat_utility::init_item_meat( "zmeat" ); + maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zmeat" ); + game_mode_objects = getstructarray( "game_mode_object", "targetname" ); + meat_objects = getstructarray( "meat_object", "targetname" ); + all_structs = arraycombine( game_mode_objects, meat_objects, 1, 0 ); + + for ( i = 0; i < all_structs.size; i++ ) + { + if ( isdefined( all_structs[i].script_parameters ) ) + precachemodel( all_structs[i].script_parameters ); + } + + precacheshellshock( "grief_stab_zm" ); + precacheitem( "minigun_zm" ); + precacheshader( "faction_cdc" ); + precacheshader( "faction_cia" ); + precachemodel( "p6_zm_sign_meat_01_step1" ); + precachemodel( "p6_zm_sign_meat_01_step2" ); + precachemodel( "p6_zm_sign_meat_01_step3" ); + precachemodel( "p6_zm_sign_meat_01_step4" ); +} + +meat_hub_start_func() +{ + level thread meat_player_initial_spawn(); + level thread item_meat_reset( level._meat_start_point ); + level thread spawn_meat_zombies(); + level thread monitor_meat_on_team(); + level thread init_minigun_ring(); + level thread init_splitter_ring(); + level thread init_ammo_ring(); + level thread hide_non_meat_objects(); + level thread setup_meat_world_objects(); + level._zombie_path_timer_override = ::zombie_path_timer_override; + level.zombie_health = level.zombie_vars["zombie_health_start"]; + level._zombie_spawning = 0; + level._poi_override = ::meat_poi_override_func; + level._meat_on_team = undefined; + level._meat_zombie_spawn_timer = 2; + level._meat_zombie_spawn_health = 1; + level._minigun_time_override = 15; + level._get_game_module_players = ::get_game_module_players; + level.powerup_drop_count = 0; + level.meat_spawners = level.zombie_spawners; + + if ( !( isdefined( level._meat_callback_initialized ) && level._meat_callback_initialized ) ) + { + maps\mp\zombies\_zm::register_player_damage_callback( maps\mp\zombies\_zm_game_module::damage_callback_no_pvp_damage ); + level._meat_callback_initialized = 1; + } + + setmatchtalkflag( "DeadChatWithDead", 1 ); + setmatchtalkflag( "DeadChatWithTeam", 1 ); + setmatchtalkflag( "DeadHearTeamLiving", 1 ); + setmatchtalkflag( "DeadHearAllLiving", 1 ); + setmatchtalkflag( "EveryoneHearsEveryone", 1 ); + setteamhasmeat( "allies", 0 ); + setteamhasmeat( "axis", 0 ); + level thread zmbmusicsetupmeat(); + level.zombie_spawn_fx = level._effect["spawn_cloud"]; + weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); + + for ( i = 0; i < weapon_spawns.size; i++ ) + weapon_spawns[i] trigger_off(); + + level thread monitor_meat_on_side(); + level thread item_meat_watch_for_throw(); + level thread hold_meat_monitor(); + flag_wait( "start_encounters_match_logic" ); + level thread wait_for_team_death( 1 ); + level thread wait_for_team_death( 2 ); + level.team_a_downed = 0; + level.team_b_downed = 0; +} + +meat_on_player_connect() +{ + hotjoined = flag( "initial_players_connected" ); + self thread spawn_player_meat_manager(); + self thread wait_for_player_disconnect(); + self thread wait_for_player_downed(); +/# + self thread watch_debug_input(); +#/ + if ( hotjoined ) + { + one = 1; + two = 2; + + if ( get_game_var( "switchedsides" ) ) + { + one = 2; + two = 1; + } + + if ( get_game_var( "side_selection" ) == 1 ) + { + if ( self.team == "allies" ) + self._meat_team = one; + else + self._meat_team = two; + } + else if ( self.team == "allies" ) + self._meat_team = two; + else + self._meat_team = one; + + self meat_player_setup(); + } +} + +meat_on_player_disconnect() +{ + team0 = 1; + team1 = 2; + team_counts = []; + team_counts[team0] = 0; + team_counts[team1] = 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + team_counts[players[i]._meat_team] += 1; + + if ( team_counts[team0] == 0 ) + maps\mp\gametypes_zm\_zm_gametype::end_rounds_early( "B" ); + + if ( team_counts[team1] == 0 ) + maps\mp\gametypes_zm\_zm_gametype::end_rounds_early( "A" ); +} + +wait_for_player_disconnect() +{ + level endon( "end_game" ); + + self waittill( "disconnect" ); + + meat_on_player_disconnect(); +} + +watch_debug_input() +{ +/# + self endon( "disconnect" ); + + for (;;) + { + if ( self actionslottwobuttonpressed() ) + { + if ( getdvar( _hash_B188A91 ) != "" ) + { + self disableinvulnerability(); + self dodamage( self.health + 666, self.origin ); + } + } + + wait 0.05; + } +#/ +} + +zmbmusicsetupmeat() +{ + level.zmb_music_states["game_over"] = undefined; + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "waiting", "ENC_WAITING", 0, 0, 0, undefined ); + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "round_start", "ENC_ROUND_START", 0, 0, 0, undefined ); + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "round_end", "ENC_ROUND_END", 0, 0, 0, undefined ); + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "halftime", "ENC_HALFTIME", 0, 0, 0, undefined ); + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "match_over", "ENC_MATCH_OVER", 0, 0, 0, undefined ); +} + +monitor_meat_on_side() +{ + level endon( "meat_end" ); + + level waittill( "meat_grabbed" ); + + last_team = level._meat_on_team; + level.meat_lost_time_limit = 5000; + + while ( true ) + { + if ( isdefined( level.item_meat ) ) + { + if ( !isdefined( level._meat_team_1_volume ) || !isdefined( level._meat_team_2_volume ) ) + iprintlnbold( "BUG: There is something wrong with the team volumes" ); + + if ( isdefined( level._meat_team_1_volume ) && level.item_meat istouching( level._meat_team_1_volume ) ) + { + level._meat_on_team = 1; + level.meat_lost_time = undefined; + } + else if ( isdefined( level._meat_team_2_volume ) && level.item_meat istouching( level._meat_team_2_volume ) ) + { + level._meat_on_team = 2; + level.meat_lost_time = undefined; + } + else if ( isdefined( last_team ) ) + { + if ( !isdefined( level.meat_lost_time ) ) + level.meat_lost_time = gettime(); + else if ( gettime() - level.meat_lost_time > level.meat_lost_time_limit ) + { + add_meat_event( "level_lost_meat" ); + level thread item_meat_reset( level._meat_start_point, 1 ); + level.meat_lost_time = undefined; + + level waittill( "meat_grabbed" ); + } + } + } + else + { + player_with_meat = get_player_with_meat(); + + if ( !isdefined( player_with_meat ) ) + { + if ( !isdefined( level.meat_lost_time ) ) + level.meat_lost_time = gettime(); + else if ( gettime() - level.meat_lost_time > level.meat_lost_time_limit ) + { + add_meat_event( "level_lost_meat" ); + level thread item_meat_reset( level._meat_start_point, 1 ); + level.meat_lost_time = undefined; + + level waittill( "meat_grabbed" ); + } + } + else + level.meat_lost_time = undefined; + } + + if ( isdefined( level._meat_on_team ) && isdefined( last_team ) && level._meat_on_team != last_team ) + { + level notify( "clear_ignore_all" ); + add_meat_event( "level_meat_team", level._meat_on_team ); + last_team = level._meat_on_team; + assign_meat_to_team( undefined, level._meat_on_team ); +/# + if ( isdefined( level.item_meat ) ) + playfx( level._effect["spawn_cloud"], level.item_meat.origin ); +#/ + } + + wait 0.05; + } +} + +item_meat_watch_for_throw() +{ + level endon( "meat_end" ); + + for (;;) + { + level waittill( "meat_thrown", who ); + + add_meat_event( "player_thrown", who ); + + if ( isdefined( who._spawning_meat ) && who._spawning_meat ) + continue; + + if ( randomintrange( 1, 101 ) <= 10 ) + { + + } + + who._has_meat = 0; + + if ( isdefined( who._has_meat_hud ) ) + who._has_meat_hud destroy(); + + assign_meat_to_team( undefined, level._meat_on_team ); + } +} + +hold_meat_monitor() +{ + level endon( "meat_end" ); + + level waittill( "meat_grabbed" ); + + while ( true ) + { + player = get_player_with_meat(); + + if ( !isdefined( player ) ) + { + wait 0.2; + continue; + } + + if ( !should_try_to_bring_back_teammate( player._meat_team ) ) + { + wait 0.2; + continue; + } + + if ( !( isdefined( player._bringing_back_teammate ) && player._bringing_back_teammate ) ) + player thread bring_back_teammate_progress(); + + wait 0.2; + } +} + +meat_zombie_post_spawn_init() +{ + +} + +create_item_meat_watcher() +{ + wait 0.05; + watcher = self maps\mp\gametypes_zm\_weaponobjects::createuseweaponobjectwatcher( "item_meat", get_gamemode_var( "item_meat_name" ), self.team ); + watcher.pickup = ::item_meat_on_pickup; + watcher.onspawn = ::item_meat_spawned; + watcher.onspawnretrievetriggers = ::play_item_meat_on_spawn_retrieve_trigger; + watcher.headicon = 0; +} + +item_meat_spawned( unused0, unused1 ) +{ + maps\mp\gametypes_zm\_weaponobjects::voidonspawn( unused0, unused1 ); + self.meat_is_moving = 0; + self.meat_is_flying = 0; +} + +wait_for_player_downed() +{ + self endon( "disconnect" ); + + while ( isdefined( self ) ) + { + self waittill_any( "player_downed", "fake_death", "death" ); + add_meat_event( "player_down", self ); + wait 0.1; + + if ( isdefined( self._meat_team ) ) + { + self thread watch_save_player(); + players = get_players_on_meat_team( self._meat_team ); + + if ( players.size >= 2 ) + { + + } + } + } +} + +item_meat_watch_stationary() +{ + self endon( "death" ); + self endon( "picked_up" ); + self.meat_is_moving = 1; + + self waittill( "stationary" ); + + self playloopsound( "zmb_meat_looper", 2 ); + + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + add_meat_event( "meat_stationary", self ); + else + add_meat_event( "fake_meat_stationary", self ); + + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + { + level._meat_moving = 0; + level._meat_splitter_activated = 0; + level._last_person_to_throw_meat = undefined; + } + + self.meat_is_moving = 0; + + if ( isdefined( level._meat_on_team ) ) + { + teamplayers = get_players_on_meat_team( level._meat_on_team ); + + for ( i = 0; i < teamplayers.size; i++ ) + { + if ( isdefined( teamplayers[i] ) && isdefined( teamplayers[i]._encounters_team ) ) + { + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_land", teamplayers[i]._encounters_team ); + break; + } + } + } +} + +item_meat_watch_bounce() +{ + self endon( "death" ); + self endon( "picked_up" ); + self.meat_is_flying = 1; + + self waittill( "grenade_bounce", pos, normal, ent ); + + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + add_meat_event( "meat_bounce", self, pos, normal, ent ); + else + add_meat_event( "fake_meat_bounce", self, pos, normal, ent ); + + if ( isdefined( level.meat_bounce_override ) ) + { + self thread [[ level.meat_bounce_override ]]( pos, normal, ent ); + return; + } + + if ( isdefined( level.spawned_collmap ) ) + { + if ( isdefined( ent ) && ent == level.spawned_collmap ) + playfx( level._effect["meat_bounce"], pos, normal ); + } + + if ( isdefined( ent ) && isplayer( ent ) ) + { + add_meat_event( "player_hit_player", self.owner, ent ); + self.owner hit_player_with_meat( ent ); + } + + self.meat_is_flying = 0; + self thread watch_for_roll(); + playfxontag( level._effect["meat_marker"], self, "tag_origin" ); +} + +watch_for_roll() +{ + self endon( "stationary" ); + self endon( "death" ); + self endon( "picked_up" ); + self.meat_is_rolling = 0; + + while ( true ) + { + old_z = self.origin[2]; + wait 1; + + if ( abs( old_z - self.origin[2] ) < 10 ) + { + self.meat_is_rolling = 1; + self playloopsound( "zmb_meat_looper", 2 ); + } + } +} + +stop_rolling() +{ + self.origin = self.origin; + self.angles = self.angles; +} + +hit_player_with_meat( hit_player ) +{ +/# + println( "MEAT: Player " + self.name + " hit " + hit_player.name + " with the meat\\n" ); +#/ +} + +item_meat_pickup() +{ + self.meat_is_moving = 0; + self.meat_is_flying = 0; + level._meat_moving = 0; + level._meat_splitter_activated = 0; + self notify( "picked_up" ); +} + +player_wait_take_meat( meat_name ) +{ + self.dont_touch_the_meat = 1; + + if ( isdefined( self.pre_meat_weapon ) && self hasweapon( self.pre_meat_weapon ) ) + self switchtoweapon( self.pre_meat_weapon ); + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + else + { + assert( 0, "Player has no weapon" ); + self maps\mp\zombies\_zm_weapons::give_fallback_weapon(); + } + } + + self waittill_notify_or_timeout( "weapon_change_complete", 3 ); + self takeweapon( meat_name ); + self.pre_meat_weapon = undefined; + + if ( self.is_drinking ) + self decrement_is_drinking(); + + self.dont_touch_the_meat = 0; +} + +cleanup_meat() +{ + if ( isdefined( self.altmodel ) ) + self.altmodel delete(); + + self delete(); +} + +#using_animtree("zombie_meat"); + +init_animtree() +{ + scriptmodelsuseanimtree( #animtree ); +} + +animate_meat( grenade ) +{ + grenade waittill_any( "bounce", "stationary", "death" ); + waittillframeend; + + if ( isdefined( grenade ) ) + { + grenade hide(); + altmodel = spawn( "script_model", grenade.origin ); + altmodel setmodel( get_gamemode_var( "item_meat_model" ) ); + altmodel useanimtree( #animtree ); + altmodel.angles = grenade.angles; + altmodel linkto( grenade, "", ( 0, 0, 0 ), ( 0, 0, 0 ) ); + altmodel setanim( %o_zombie_head_idle_v1 ); + grenade.altmodel = altmodel; + + while ( isdefined( grenade ) ) + wait 0.05; + + if ( isdefined( altmodel ) ) + altmodel delete(); + } +} + +indexinarray( array, value ) +{ + if ( !isdefined( array ) || !isarray( array ) || !isdefined( value ) || !isinarray( array, value ) ) + return undefined; + + foreach ( index, item in array ) + { + if ( item == value ) + return index; + } + + return undefined; +} + +item_meat_on_spawn_retrieve_trigger( watcher, player, weaponname ) +{ + self endon( "death" ); + add_meat_event( "meat_spawn", self ); + thread animate_meat( self ); + + while ( isdefined( level.splitting_meat ) && level.splitting_meat ) + wait 0.15; + + if ( isdefined( player ) ) + { + self setowner( player ); + self setteam( player.pers["team"] ); + self.owner = player; + self.oldangles = self.angles; + + if ( player hasweapon( weaponname ) ) + { + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + player thread player_wait_take_meat( weaponname ); + else + { + player takeweapon( weaponname ); + player decrement_is_drinking(); + } + } + + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + { + if ( !( isdefined( self._respawned_meat ) && self._respawned_meat ) ) + { + level notify( "meat_thrown", player ); + level._last_person_to_throw_meat = player; + level._last_person_to_throw_meat_time = gettime(); + } + } + } + + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + { + level._meat_moving = 1; + + if ( isdefined( level.item_meat ) && level.item_meat != self ) + level.item_meat cleanup_meat(); + + level.item_meat = self; + } + + self thread item_meat_watch_stationary(); + self thread item_meat_watch_bounce(); + self.item_meat_pick_up_trigger = spawn( "trigger_radius_use", self.origin, 0, 36, 72 ); + self.item_meat_pick_up_trigger setcursorhint( "HINT_NOICON" ); + self.item_meat_pick_up_trigger sethintstring( &"ZOMBIE_MEAT_PICKUP" ); + self.item_meat_pick_up_trigger enablelinkto(); + self.item_meat_pick_up_trigger linkto( self ); + self.item_meat_pick_up_trigger triggerignoreteam(); + level.item_meat_pick_up_trigger = self.item_meat_pick_up_trigger; + self thread item_meat_watch_shutdown(); + self.meat_id = indexinarray( level._fake_meats, self ); + + if ( !isdefined( self.meat_id ) ) + self.meat_id = 0; + + if ( isdefined( level.dont_allow_meat_interaction ) && level.dont_allow_meat_interaction ) + self.item_meat_pick_up_trigger setinvisibletoall(); + else + { + self thread item_meat_watch_trigger( self.meat_id, self.item_meat_pick_up_trigger, ::item_meat_on_pickup, level.meat_pickupsoundplayer, level.meat_pickupsound ); + self thread kick_meat_monitor(); + self thread last_stand_meat_nudge(); + } + + self._respawned_meat = undefined; +} + +last_stand_meat_nudge() +{ + level endon( "meat_grabbed" ); + level endon( "end_meat" ); + self endon( "death" ); + wait 0.15; + + while ( true ) + { + players = get_players(); + + foreach ( player in players ) + { + if ( distancesquared( player.origin, self.origin ) < 2304 && player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + player thread kick_the_meat( self, 1 ); + } + + wait 0.05; + } +} + +kick_meat_monitor() +{ + level endon( "meat_grabbed" ); + level endon( "end_meat" ); + self endon( "death" ); + kick_meat_timeout = 150; + + while ( true ) + { + players = get_players(); + curr_time = gettime(); + + foreach ( player in players ) + { + if ( isdefined( level._last_person_to_throw_meat ) && player == level._last_person_to_throw_meat && curr_time - level._last_person_to_throw_meat_time <= kick_meat_timeout ) + continue; + + if ( distancesquared( player.origin, self.origin ) < 2304 && player issprinting() && !player usebuttonpressed() ) + { + if ( isdefined( player._meat_team ) && isdefined( level._meat_on_team ) && level._meat_on_team == player._meat_team ) + { + add_meat_event( "player_kick_meat", player, self ); + player thread kick_the_meat( self ); + } + } + } + + wait 0.05; + } +} + +is_meat( weapon ) +{ + return weapon == get_gamemode_var( "item_meat_name" ); +} + +spike_the_meat( meat ) +{ + if ( isdefined( self._kicking_meat ) && self._kicking_meat ) + return; + + fake_meat = 0; + self._kicking_meat = 1; + self._spawning_meat = 1; + org = self getweaponmuzzlepoint(); + vel = meat getvelocity(); + + if ( !( isdefined( meat._fake_meat ) && meat._fake_meat ) ) + { + meat cleanup_meat(); + level._last_person_to_throw_meat = self; + level._last_person_to_throw_meat_time = gettime(); + level._meat_splitter_activated = 0; + } + else + { + fake_meat = 1; + meat cleanup_meat(); + } + + kickangles = self.angles; + kickangles += ( randomfloatrange( -30, -20 ), randomfloatrange( -5, 5 ), 0 ); + launchdir = anglestoforward( kickangles ); + speed = length( vel ) * 1.5; + launchvel = vectorscale( launchdir, speed ); + grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( launchvel[0], launchvel[1], 380 ) ); + grenade playsound( "zmb_meat_meat_tossed" ); + grenade thread waittill_loopstart(); + + if ( fake_meat ) + { + grenade._fake_meat = 1; + grenade thread delete_on_real_meat_pickup(); + level._kicked_meat = grenade; + } + + wait 0.1; + self._spawning_meat = 0; + self._kicking_meat = 0; + + if ( !fake_meat ) + { + level notify( "meat_thrown", self ); + level notify( "meat_kicked" ); + } +} + +show_meat_throw_hint() +{ + level endon( "meat_thrown" ); + self endon( "player_downed" ); + self thread meat_screen_message_delete_on_death(); + wait 1; + self meat_create_hint_message( &"ZOMBIE_THROW_MEAT_HINT" ); + self thread meat_screen_message_delete(); +} + +meat_create_hint_message( string_message_1, string_message_2, string_message_3, n_offset_y = 0 ) +{ + if ( !isdefined( self._screen_message_1 ) ) + { + self._screen_message_1 = newclienthudelem( self ); + self._screen_message_1.elemtype = "font"; + self._screen_message_1.font = "objective"; + self._screen_message_1.fontscale = 1.8; + self._screen_message_1.horzalign = "center"; + self._screen_message_1.vertalign = "middle"; + self._screen_message_1.alignx = "center"; + self._screen_message_1.aligny = "middle"; + self._screen_message_1.y = -60 + n_offset_y; + self._screen_message_1.sort = 2; + self._screen_message_1.color = ( 1, 1, 1 ); + self._screen_message_1.alpha = 0.7; + self._screen_message_1.hidewheninmenu = 1; + } + + self._screen_message_1 settext( string_message_1 ); + + if ( isdefined( string_message_2 ) ) + { + if ( !isdefined( self._screen_message_2 ) ) + { + self._screen_message_2 = newclienthudelem( self ); + self._screen_message_2.elemtype = "font"; + self._screen_message_2.font = "objective"; + self._screen_message_2.fontscale = 1.8; + self._screen_message_2.horzalign = "center"; + self._screen_message_2.vertalign = "middle"; + self._screen_message_2.alignx = "center"; + self._screen_message_2.aligny = "middle"; + self._screen_message_2.y = -33 + n_offset_y; + self._screen_message_2.sort = 2; + self._screen_message_2.color = ( 1, 1, 1 ); + self._screen_message_2.alpha = 0.7; + self._screen_message_2.hidewheninmenu = 1; + } + + level._screen_message_2 settext( string_message_2 ); + } + else if ( isdefined( self._screen_message_2 ) ) + self._screen_message_2 destroy(); + + if ( isdefined( string_message_3 ) ) + { + if ( !isdefined( self._screen_message_3 ) ) + { + self._screen_message_3 = newclienthudelem( self ); + self._screen_message_3.elemtype = "font"; + self._screen_message_3.font = "objective"; + self._screen_message_3.fontscale = 1.8; + self._screen_message_3.horzalign = "center"; + self._screen_message_3.vertalign = "middle"; + self._screen_message_3.alignx = "center"; + self._screen_message_3.aligny = "middle"; + self._screen_message_3.y = -6 + n_offset_y; + self._screen_message_3.sort = 2; + self._screen_message_3.color = ( 1, 1, 1 ); + self._screen_message_3.alpha = 0.7; + self._screen_message_3.hidewheninmenu = 1; + } + + self._screen_message_3 settext( string_message_3 ); + } + else if ( isdefined( self._screen_message_3 ) ) + self._screen_message_3 destroy(); +} + +meat_screen_message_delete() +{ + self endon( "disconnect" ); + level waittill_notify_or_timeout( "meat_thrown", 5 ); + + if ( isdefined( self._screen_message_1 ) ) + self._screen_message_1 destroy(); + + if ( isdefined( self._screen_message_2 ) ) + self._screen_message_2 destroy(); + + if ( isdefined( self._screen_message_3 ) ) + self._screen_message_3 destroy(); +} + +meat_screen_message_delete_on_death() +{ + level endon( "meat_thrown" ); + self endon( "disconnect" ); + + self waittill( "player_downed" ); + + if ( isdefined( self._screen_message_1 ) ) + self._screen_message_1 destroy(); + + if ( isdefined( self._screen_message_2 ) ) + self._screen_message_2 destroy(); + + if ( isdefined( self._screen_message_3 ) ) + self._screen_message_3 destroy(); +} + +set_ignore_all() +{ + level endon( "clear_ignore_all" ); + + if ( isdefined( level._zombies_ignoring_all ) && level._zombies_ignoring_all ) + return; + + level._zombies_ignoring_all = 1; + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( isdefined( zombie ) ) + zombie.ignoreall = 1; + } + + wait 0.5; + clear_ignore_all(); +} + +clear_ignore_all() +{ + if ( !( isdefined( level._zombies_ignoring_all ) && level._zombies_ignoring_all ) ) + return; + + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( isdefined( zombie ) ) + zombie.ignoreall = 0; + } + + level._zombies_ignoring_all = 0; +} + +bring_back_teammate_progress() +{ + self notify( "bring_back_teammate_progress" ); + self endon( "bring_back_teammate_progress" ); + self endon( "disconnect" ); + player = self; + player._bringing_back_teammate = 1; + revivetime = 15; + progress = 0; + + while ( player_has_meat( player ) && is_player_valid( player ) && progress >= 0 ) + { + if ( !isdefined( player.revive_team_progressbar ) ) + { + player.revive_team_progressbar = player createprimaryprogressbar(); + player.revive_team_progressbar updatebar( 0.01, 1 / revivetime ); + player.revive_team_progressbar.progresstext = player createprimaryprogressbartext(); + player.revive_team_progressbar.progresstext settext( &"ZOMBIE_MEAT_RESPAWN_TEAMMATE" ); + player thread destroy_revive_progress_on_downed(); + } + + progress++; + + if ( progress > revivetime * 10 ) + { + level bring_back_dead_teammate( player._meat_team ); + player destroy_revive_progress(); + wait 1; + player._bringing_back_teammate = 0; + progress = -1; + } + + wait 0.1; + } + + player._bringing_back_teammate = 0; + player destroy_revive_progress(); +} + +should_try_to_bring_back_teammate( team ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i]._meat_team == team && players[i].sessionstate == "spectator" ) + return true; + } + + return false; +} + +bring_back_dead_teammate( team ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i]._meat_team == team && players[i].sessionstate == "spectator" ) + { + player = players[i]; + break; + } + } + + if ( !isdefined( player ) ) + return; + + player playsound( level.zmb_laugh_alias ); + wait 0.25; + playfx( level._effect["poltergeist"], player.spectator_respawn.origin ); + playsoundatposition( "zmb_bolt", player.spectator_respawn.origin ); + earthquake( 0.5, 0.75, player.spectator_respawn.origin, 1000 ); + level.custom_spawnplayer = ::respawn_meat_player; + player.pers["spectator_respawn"] = player.spectator_respawn; + player [[ level.spawnplayer ]](); + level.custom_spawnplayer = undefined; +} + +respawn_meat_player() +{ + spawnpoint = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "meat_spectator_respawn" ); + self spawn( spawnpoint.origin, spawnpoint.angles ); + self._meat_team = self.pers["zteam"]; + self._encounters_team = self.pers["encounters_team"]; + self.characterindex = self.pers["characterindex"]; + self._team_name = self.pers["team_name"]; + self.spectator_respawn = self.pers["meat_spectator_respawn"]; + self reviveplayer(); + self.is_burning = 0; + self.is_zombie = 0; + self.ignoreme = 0; +} + +destroy_revive_progress_on_downed() +{ + level endon( "end_game" ); + level endon( "meat_end" ); + self waittill_any( "fake_death", "player_downed", "death" ); + self destroy_revive_progress(); +} + +destroy_revive_progress() +{ + if ( isdefined( self.revive_team_progressbar ) ) + { + self.revive_team_progressbar destroyelem(); + self.revive_team_progressbar.progresstext destroyelem(); + } +} + +kick_the_meat( meat, laststand_nudge ) +{ + if ( isdefined( self._kicking_meat ) && self._kicking_meat ) + return; + + fake_meat = 0; + self._kicking_meat = 1; + self._spawning_meat = 1; + org = meat.origin; + + if ( !( isdefined( meat._fake_meat ) && meat._fake_meat ) ) + { + meat cleanup_meat(); + level._last_person_to_throw_meat = self; + level._last_person_to_throw_meat_time = gettime(); + level._meat_splitter_activated = 0; + } + else + { + fake_meat = 1; + meat cleanup_meat(); + } + + kickangles = self.angles; + kickangles += ( randomfloatrange( -30, -20 ), randomfloatrange( -5, 5 ), 0 ); + launchdir = anglestoforward( kickangles ); + vel = self getvelocity(); + speed = length( vel ) * 1.5; + height_boost = 380; + + if ( isdefined( laststand_nudge ) && laststand_nudge ) + { + if ( vel == ( 0, 0, 0 ) ) + vel = ( 30, 30, 5 ); + + speed = length( vel ) * 2; + height_boost = 120; + } + + launchvel = vectorscale( launchdir, speed ); + grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( launchvel[0], launchvel[1], height_boost ) ); + grenade playsound( "zmb_meat_meat_tossed" ); + grenade thread waittill_loopstart(); + + if ( fake_meat ) + { + grenade._fake_meat = 1; + grenade thread delete_on_real_meat_pickup(); + level._kicked_meat = grenade; + } + + wait 0.1; + self._spawning_meat = 0; + self._kicking_meat = 0; + + if ( !fake_meat ) + { + level notify( "meat_thrown", self ); + level notify( "meat_kicked" ); + } +} + +delete_on_real_meat_pickup() +{ + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + return; + + self endon( "death" ); + level waittill_any( "meat_grabbed", "end_game", "meat_kicked" ); + add_meat_event( "fake_meat_killed_by_real", self ); + + if ( isdefined( level._kicked_meat ) && level._kicked_meat == self ) + level._kicked_meat = undefined; + + if ( isdefined( self ) ) + self cleanup_meat(); +} + +play_item_meat_on_spawn_retrieve_trigger( watcher, player ) +{ + self item_meat_on_spawn_retrieve_trigger( watcher, player, get_gamemode_var( "item_meat_name" ) ); +} + +can_revive( revivee ) +{ + if ( self hasweapon( get_gamemode_var( "item_meat_name" ) ) ) + return false; + + if ( !self maps\mp\zombies\_zm_laststand::is_reviving_any() && isdefined( level.item_meat_pick_up_trigger ) && self istouching( level.item_meat_pick_up_trigger ) ) + return false; + + return true; +} + +pickup_origin() +{ + origin = self get_eye(); + + if ( !isdefined( origin ) ) + origin = self gettagorigin( "tag_weapon" ); + + if ( !isdefined( origin ) ) + origin = self gettagorigin( "tag_weapon_right" ); + + if ( !isdefined( origin ) ) + origin = self.origin; + + return origin; +} + +can_spike_meat() +{ + if ( isdefined( level._last_person_to_throw_meat ) && self == level._last_person_to_throw_meat ) + return false; + + meat = level.item_meat; + meat_spike_dist_sq = 4096; + meat_spike_dot = 0.1; + + if ( isdefined( meat ) ) + { + view_pos = self getweaponmuzzlepoint(); + + if ( distancesquared( view_pos, meat.origin ) < meat_spike_dist_sq ) + return true; + } + + return false; +} + +start_encounters_round_logic() +{ + if ( isdefined( level.flag["start_zombie_round_logic"] ) ) + flag_wait( "start_zombie_round_logic" ); + + flag_wait( "initial_players_connected" ); + + if ( !flag( "start_encounters_match_logic" ) ) + flag_set( "start_encounters_match_logic" ); +} + +onstartgametype() +{ + thread start_encounters_round_logic(); + maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zmeat", ::meat_hub_start_func, 1 ); +} + +hide_non_meat_objects() +{ + door_trigs = getentarray( "zombie_door", "targetname" ); + + for ( i = 0; i < door_trigs.size; i++ ) + { + if ( isdefined( door_trigs[i] ) ) + door_trigs[i] delete(); + } + + objects = getentarray(); + + for ( i = 0; i < objects.size; i++ ) + { + if ( objects[i] is_meat_object() ) + continue; + + if ( objects[i] iszbarrier() ) + continue; + + if ( isdefined( objects[i].spawnflags ) && objects[i].spawnflags == 1 ) + objects[i] connectpaths(); + + objects[i] notsolid(); + objects[i] hide(); + } +} + +is_meat_object() +{ + if ( !isdefined( self.script_parameters ) ) + return true; + + tokens = strtok( self.script_parameters, " " ); + + for ( i = 0; i < tokens.size; i++ ) + { + if ( tokens[i] == "meat_remove" ) + return false; + } + + return true; +} + +setup_meat_world_objects() +{ + objects = getentarray( level.scr_zm_map_start_location, "script_noteworthy" ); + + for ( i = 0; i < objects.size; i++ ) + { + if ( !objects[i] is_meat_object() ) + continue; + + if ( isdefined( objects[i].script_gameobjectname ) ) + continue; + + if ( isdefined( objects[i].script_vector ) ) + { + objects[i] moveto( objects[i].origin + objects[i].script_vector, 0.05 ); + + objects[i] waittill( "movedone" ); + } + + if ( isdefined( objects[i].spawnflags ) && objects[i].spawnflags == 1 && !( isdefined( level._dont_reconnect_paths ) && level._dont_reconnect_paths ) ) + objects[i] disconnectpaths(); + } + + level clientnotify( "meat_" + level.scr_zm_map_start_location ); +} + +spawn_meat_zombies() +{ + level endon( "meat_end" ); + force_riser = 0; + force_chaser = 0; + num = 0; + max_ai_num = 15; + + if ( getdvarint( _hash_CD22CF55 ) > 0 ) + max_ai_num = 0; + + if ( getdvarint( _hash_FA81816F ) == 2 ) + max_ai_num = -1; + + level waittill( "meat_grabbed" ); + + while ( true ) + { + ai = getaiarray( level.zombie_team ); + + if ( ai.size > max_ai_num ) + wait 0.1; + else + { + if ( num % 2 == 0 ) + spawn_points = level._meat_team_1_zombie_spawn_points; + else + spawn_points = level._meat_team_2_zombie_spawn_points; + + num++; + spawn_point = undefined; + dist = 512; + distcheck = dist * dist; + startindex = randomint( spawn_points.size ); + + while ( !isdefined( spawn_point ) ) + { + for ( i = 0; i < spawn_points.size; i++ ) + { + index = ( startindex + i ) % spawn_points.size; + point = spawn_points[index]; + + if ( num % 2 == 0 ) + players = get_players_on_meat_team( 1 ); + else + players = get_players_on_meat_team( 2 ); + + clear = 1; + + foreach ( player in players ) + { + if ( distancesquared( player.origin, point.origin ) < distcheck ) + clear = 0; + } + + if ( clear ) + { + spawn_point = point; + break; + } + } + + if ( dist <= 128 ) + spawn_point = point; + else + { + dist /= 4; + distcheck = dist * dist; + } + + wait 0.05; + } + + zombie = spawn_meat_zombie( level.meat_spawners[0], "meat_zombie", spawn_point, level._meat_zombie_spawn_health ); + + if ( isdefined( zombie ) ) + zombie maps\mp\zombies\_zm_game_module::make_supersprinter(); + } + + wait( level._meat_zombie_spawn_timer ); + } +} + +spawn_meat_zombie( spawner, target_name, spawn_point, round_number ) +{ + level endon( "meat_end" ); + + if ( !isdefined( spawner ) ) + { + iprintlnbold( "BUG: There is something wrong with the zombie spawners" ); + return; + } + + while ( isdefined( level._meat_zombie_spawning ) && level._meat_zombie_spawning ) + wait 0.05; + + level._meat_zombie_spawning = 1; + level.zombie_spawn_locations = []; + level.zombie_spawn_locations[level.zombie_spawn_locations.size] = spawn_point; + zombie = maps\mp\zombies\_zm_utility::spawn_zombie( spawner, target_name, spawn_point, round_number ); + + if ( isdefined( zombie ) ) + { + zombie thread maps\mp\zombies\_zm_spawner::zombie_spawn_init(); + zombie thread maps\mp\zombies\_zm::round_spawn_failsafe(); + } + else + iprintlnbold( "BUG: There is something wrong with the zombie spawning" ); + + spawner._spawning = undefined; + level._meat_zombie_spawning = 0; + return zombie; +} + +monitor_meat_on_team() +{ + level endon( "meat_end" ); + + while ( true ) + { + players = get_players(); + + if ( isdefined( level._meat_on_team ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i] ) ) + continue; + + if ( players[i]._meat_team == level._meat_on_team ) + { + if ( players[i].ignoreme ) + players[i].ignoreme = 0; + } + else if ( !players[i].ignoreme ) + players[i].ignoreme = 1; + + wait 0.05; + } + } + else + { + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i] ) ) + continue; + + if ( players[i].ignoreme ) + players[i].ignoreme = 0; + + wait 0.05; + } + } + + wait 0.1; + } +} + +item_meat_reset( origin, immediate ) +{ + level notify( "new_meat" ); + level endon( "new_meat" ); + + if ( isdefined( level.item_meat ) ) + { + level.item_meat cleanup_meat(); + level.item_meat = undefined; + } + + if ( !( isdefined( immediate ) && immediate ) ) + level waittill( "reset_meat" ); + + item_meat_clear(); + + if ( isdefined( origin ) ) + item_meat_spawn( origin ); +} + +meat_player_initial_spawn() +{ + players = get_players(); + one = 1; + two = 2; + + if ( get_game_var( "switchedsides" ) ) + { + one = 2; + two = 1; + } + + for ( i = 0; i < players.size; i++ ) + { + if ( get_game_var( "side_selection" ) == 1 ) + { + if ( players[i].team == "allies" ) + players[i]._meat_team = one; + else + players[i]._meat_team = two; + } + else if ( players[i].team == "allies" ) + players[i]._meat_team = two; + else + players[i]._meat_team = one; + + if ( isdefined( level.custom_player_fake_death_cleanup ) ) + players[i] [[ level.custom_player_fake_death_cleanup ]](); + + players[i] setstance( "stand" ); + + if ( isdefined( players[i]._meat_team ) ) + { + if ( players[i]._meat_team == one ) + players[i]._meat_team = one; + else + players[i]._meat_team = two; + } + else if ( players[i].team == "axis" ) + players[i]._meat_team = one; + else + players[i]._meat_team = two; + + players[i] meat_player_setup(); + } + + waittillframeend; + maps\mp\gametypes_zm\_zm_gametype::start_round(); + award_grenades_for_team( 1 ); + award_grenades_for_team( 2 ); +} + +meat_player_setup() +{ + self.pers["zteam"] = self._meat_team; + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "encounters_team", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "characterindex", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "team_name", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "spectator_respawn", 0 ); + self.pers["encounters_team"] = self._encounters_team; + self.pers["characterindex"] = self.characterindex; + self.pers["team_name"] = self._team_name; + self.pers["meat_spectator_respawn"] = self.spectator_respawn; + self.score = 1000; + self.pers["score"] = 1000; + self takeallweapons(); + self giveweapon( "knife_zm" ); + self give_start_weapon( 1 ); + + if ( !isdefined( self._saved_by_throw ) ) + self._saved_by_throw = 0; + + self setmovespeedscale( 1 ); + self._has_meat = 0; + self setclientfield( "holding_meat", 0 ); + self freeze_player_controls( 1 ); +} + +can_touch_meat() +{ + if ( isdefined( self.dont_touch_the_meat ) && self.dont_touch_the_meat ) + return 0; + + meat = level.item_meat; + + if ( isdefined( meat ) ) + { + meatorg = meat.origin + vectorscale( ( 0, 0, 1 ), 8.0 ); + trace = bullettrace( self pickup_origin(), meatorg, 0, meat ); + return distancesquared( trace["position"], meatorg ) < 1; + } + + return 0; +} + +trying_to_use() +{ + self.use_ever_released |= !self usebuttonpressed(); + return self.use_ever_released && self usebuttonpressed(); +} + +trying_to_spike( item ) +{ + return item.meat_is_flying && self meleebuttonpressed(); +} + +item_quick_trigger( meat_id, trigger ) +{ + self endon( "death" ); + meat_trigger_time = 150; + + if ( isdefined( trigger.radius ) ) + radius = trigger.radius + 15.0; + else + radius = 51.0; + + trigrad2 = radius * radius; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + player.use_ever_released = !player usebuttonpressed(); + } + + while ( isdefined( trigger ) ) + { + trigorg = trigger.origin; + players = get_players(); + + if ( players.size ) + { + random_start_point = randomint( players.size ); + + for ( i = 0; i < players.size; i++ ) + { + player = players[( i + random_start_point ) % players.size]; + + if ( !isdefined( player.trying_to_trigger_meat ) ) + player.trying_to_trigger_meat = []; + + if ( !isdefined( player.trying_to_trigger_meat_time ) ) + player.trying_to_trigger_meat_time = []; + + if ( player maps\mp\zombies\_zm_laststand::is_reviving_any() ) + continue; + + meleeing = player ismeleeing(); + + if ( isdefined( trigger ) && player istouching( trigger ) && distance2dsquared( player.origin, trigorg ) < trigrad2 && !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && ( player trying_to_use() || self.meat_is_flying && meleeing ) && player can_touch_meat() ) + { + if ( self.meat_is_flying && meleeing ) + { + if ( player can_spike_meat() ) + { + player.trying_to_trigger_meat[meat_id] = 0; + trigger notify( "usetrigger", player ); + } + } + else if ( !( isdefined( player.trying_to_trigger_meat[meat_id] ) && player.trying_to_trigger_meat[meat_id] ) ) + { + player.trying_to_trigger_meat[meat_id] = 1; + player.trying_to_trigger_meat_time[meat_id] = gettime(); + } + else if ( gettime() - player.trying_to_trigger_meat_time[meat_id] >= meat_trigger_time ) + { + player.trying_to_trigger_meat[meat_id] = 0; + trigger notify( "usetrigger", player ); + } + + continue; + } + + player.trying_to_trigger_meat[meat_id] = 0; + player.trying_to_trigger_meat_time[meat_id] = undefined; + } + } + + wait 0.05; + } +} + +item_meat_watch_trigger( meat_id, trigger, callback, playersoundonuse, npcsoundonuse ) +{ + self endon( "death" ); + self thread item_quick_trigger( meat_id, trigger ); + + while ( true ) + { + trigger waittill( "usetrigger", player ); + + if ( !isalive( player ) ) + continue; + + if ( !is_player_valid( player ) ) + continue; + + if ( player has_powerup_weapon() ) + continue; + + if ( player maps\mp\zombies\_zm_laststand::is_reviving_any() ) + continue; + + volley = self.meat_is_flying && player meleebuttonpressed(); + player.volley_meat = volley; + + if ( isdefined( self._fake_meat ) && self._fake_meat ) + add_meat_event( "player_fake_take", player, self ); + else if ( volley ) + add_meat_event( "player_volley", player, self ); + else if ( self.meat_is_moving ) + add_meat_event( "player_catch", player, self ); + else + add_meat_event( "player_take", player, self ); + + if ( isdefined( self._fake_meat ) && self._fake_meat ) + { + player playlocalsound( level.zmb_laugh_alias ); + wait_network_frame(); + + if ( !isdefined( self ) ) + return; + + self cleanup_meat(); + return; + } + + curr_weap = player getcurrentweapon(); + + if ( !is_meat( curr_weap ) ) + player.pre_meat_weapon = curr_weap; + + if ( self.meat_is_moving ) + { + if ( volley ) + self item_meat_volley( player ); + else + self item_meat_caught( player, self.meat_is_flying ); + } + + self item_meat_pickup(); + + if ( isdefined( playersoundonuse ) ) + player playlocalsound( playersoundonuse ); + + if ( isdefined( npcsoundonuse ) ) + player playsound( npcsoundonuse ); + + if ( volley ) + player thread spike_the_meat( self ); + else + { + self thread [[ callback ]]( player ); + + if ( !isdefined( player._meat_hint_shown ) ) + { + player thread show_meat_throw_hint(); + player._meat_hint_shown = 1; + } + } + } +} + +item_meat_volley( player ) +{ +/# + println( "MEAT: Spiked the meat\\n" ); +#/ +} + +item_meat_caught( player, in_air ) +{ + if ( in_air ) + { +/# + println( "MEAT: Caught the meat on the fly\\n" ); +#/ + } + else + { +/# + println( "MEAT: Caught the meat while moving\\n" ); +#/ + } +} + +item_meat_on_pickup( player ) +{ + assert( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand(), "Player in last stand triggered meat pickup" ); + player maps\mp\gametypes_zm\_weaponobjects::deleteweaponobjecthelper( self ); + self cleanup_meat(); + level.item_meat = undefined; + level._last_person_to_throw_meat = undefined; + assign_meat_to_team( player ); + level notify( "meat_grabbed" ); + player notify( "meat_grabbed" ); + level thread zmbvoxmeatonteamspecific( player._encounters_team ); + + if ( !player hasweapon( get_gamemode_var( "item_meat_name" ) ) ) + player giveweapon( get_gamemode_var( "item_meat_name" ) ); + + player increment_is_drinking(); + player switchtoweapon( get_gamemode_var( "item_meat_name" ) ); + player setweaponammoclip( get_gamemode_var( "item_meat_name" ), 2 ); + player thread waittill_thrown(); +} + +waittill_thrown() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "reset_downed" ); + + self waittill( "grenade_fire", grenade ); + + grenade playsound( "zmb_meat_meat_tossed" ); + grenade thread waittill_loopstart(); +} + +waittill_loopstart() +{ + self endon( "stationary" ); + self endon( "death" ); + level endon( "meat_grabbed" ); + level endon( "end_game" ); + level endon( "meat_kicked" ); + + while ( true ) + { + self waittill( "grenade_bounce", pos, normal, ent ); + + self stopsounds(); + wait 0.05; + self playsound( "zmb_meat_bounce" ); + } +} + +item_meat_watch_shutdown() +{ + self waittill( "death" ); + + if ( isdefined( self.item_meat_pick_up_trigger ) ) + { + self.item_meat_pick_up_trigger delete(); + level.item_meat_pick_up_trigger = undefined; + } +} + +item_meat_clear() +{ + if ( isdefined( level.item_meat ) ) + { + level.item_meat cleanup_meat(); + level.item_meat = undefined; + } + + if ( isdefined( level._fake_meats ) ) + { + foreach ( meat in level._fake_meats ) + { + if ( isdefined( meat ) ) + meat cleanup_meat(); + } + + level._fake_meats = undefined; + } +} + +zombie_path_timer_override() +{ + return gettime() + randomfloatrange( 0.35, 1 ) * 1000; +} + +meat_poi_override_func() +{ + if ( isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving ) ) + { + if ( abs( level.item_meat.origin[2] - groundpos( level.item_meat.origin )[2] ) < 35 ) + { + level._zombies_ignoring_all = 0; + level notify( "clear_ignore_all" ); + return undefined; + } + + level thread set_ignore_all(); + meat_poi = []; + meat_poi[0] = groundpos( level.item_meat.origin ); + meat_poi[1] = level.item_meat; + return meat_poi; + } + + level._zombies_ignoring_all = 0; + return undefined; +} + +meat_end_match( winning_team ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].has_minigun ) && players[i].has_minigun ) + { + primaryweapons = players[i] getweaponslistprimaries(); + + for ( x = 0; x < primaryweapons.size; x++ ) + { + if ( primaryweapons[x] == "minigun_zm" ) + players[i] takeweapon( "minigun_zm" ); + } + + players[i] notify( "minigun_time_over" ); + players[i].zombie_vars["zombie_powerup_minigun_on"] = 0; + players[i]._show_solo_hud = 0; + players[i].has_minigun = 0; + players[i].has_powerup_weapon = 0; + } + + if ( isdefined( players[i]._has_meat_hud ) ) + players[i]._has_meat_hud destroy(); + + if ( players[i] hasweapon( get_gamemode_var( "item_meat_name" ) ) ) + { + players[i] takeweapon( get_gamemode_var( "item_meat_name" ) ); + players[i] decrement_is_drinking(); + } + } + + level notify( "game_module_ended", winning_team ); + wait 0.1; + level delay_thread( 2, ::item_meat_clear ); + + if ( isdefined( level.gameended ) && level.gameended ) + level clientnotify( "end_meat" ); +} + +updatedownedcounters() +{ + if ( self._encounters_team == "A" ) + { + level.team_a_downed++; + self thread waitforrevive( "A" ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_revive_" + level.team_a_downed, "A" ); + } + else + { + level.team_b_downed++; + self thread waitforrevive( "B" ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_revive_" + level.team_b_downed, "B" ); + } +} + +waitforrevive( team ) +{ + self endon( "death" ); + + self waittill( "player_revived" ); + + if ( team == "A" ) + level.team_a_downed--; + else + level.team_b_downed--; +} + +assign_meat_to_team( player, team_num ) +{ + meat_team = undefined; + players = get_players(); + + if ( isdefined( player ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i] ) ) + continue; + + if ( players[i] != player || isdefined( player._meat_hint_shown ) && player._meat_hint_shown ) + players[i] iprintlnbold( &"ZOMBIE_GRABBED_MEAT", player.name ); + } + + meat_team = player._meat_team; + } + else if ( isdefined( team_num ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( players[i]._meat_team == team_num ) + { + players[i] iprintlnbold( &"ZOMBIE_YOUR_TEAM_MEAT" ); + continue; + } + + players[i] iprintlnbold( &"ZOMBIE_OTHER_TEAM_MEAT" ); + } + + meat_team = team_num; + } + + level._meat_on_team = meat_team; + teamplayers = get_players_on_meat_team( meat_team ); + + if ( isdefined( teamplayers ) && teamplayers.size > 0 ) + { + if ( teamplayers[0]._encounters_team == "B" ) + { + setteamhasmeat( "allies", 1 ); + setteamhasmeat( "axis", 0 ); + } + else if ( teamplayers[0]._encounters_team == "A" ) + { + setteamhasmeat( "allies", 0 ); + setteamhasmeat( "axis", 1 ); + } + } + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i] ) ) + continue; + + if ( isdefined( player ) && players[i] == player ) + { + if ( isdefined( players[i]._has_meat ) && players[i]._has_meat ) + continue; + + players[i]._has_meat = 1; + players[i] thread slow_down_player_with_meat(); + players[i] thread reset_meat_when_player_downed(); + players[i] thread reset_meat_when_player_disconnected(); + continue; + } + } +} + +zmbvoxmeatonteamspecific( team ) +{ + if ( !isdefined( level.zmbvoxteamlasthadmeat ) ) + level.zmbvoxteamlasthadmeat = team; + + if ( level.zmbvoxteamlasthadmeat == team ) + return; + + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_grab", team ); + level.zmbvoxteamlasthadmeat = team; + otherteam = maps\mp\zombies\_zm_audio_announcer::getotherteam( team ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_grab_" + otherteam, otherteam ); +} + +create_meat_team_hud( meat_team, destroy_only ) +{ + if ( isdefined( self._has_meat_hud ) ) + { + self._has_meat_hud destroy(); + + if ( isdefined( destroy_only ) ) + return; + } + + if ( !isdefined( meat_team ) ) + return; + + elem = newclienthudelem( self ); + elem.hidewheninmenu = 1; + elem.horzalign = "LEFT"; + elem.vertalign = "BOTTOM"; + elem.alignx = "left"; + elem.aligny = "middle"; + elem.x = 10; + elem.y = -10; + elem.foreground = 1; + elem.font = "default"; + elem.fontscale = 1.4; + elem.color = vectorscale( ( 1, 1, 0 ), 0.9 ); + elem.alpha = 1.0; + + if ( isdefined( self._meat_team ) && self._meat_team == meat_team ) + elem.label = &"ZOMBIE_TEAM_HAS_MEAT"; + else + elem.label = &"ZOMBIE_OTHER_TEAM_HAS_MEAT"; + + self._has_meat_hud = elem; +} + +create_meat_player_hud() +{ + if ( isdefined( self._has_meat_hud ) ) + self._has_meat_hud destroy(); + + elem = newclienthudelem( self ); + elem.hidewheninmenu = 1; + elem.horzalign = "LEFT"; + elem.vertalign = "BOTTOM"; + elem.alignx = "left"; + elem.aligny = "middle"; + elem.x = 10; + elem.y = -10; + elem.foreground = 1; + elem.font = "default"; + elem.fontscale = 1.4; + elem.color = vectorscale( ( 1, 1, 0 ), 0.9 ); + elem.alpha = 1.0; + elem.label = &"ZOMBIE_PLAYER_HAS_MEAT"; + self._has_meat_hud = elem; +} + +slow_down_player_with_meat() +{ + self endon( "disconnect" ); + self setclientfield( "holding_meat", 1 ); + self setmovespeedscale( 0.6 ); + self thread zmbvoxstartholdcounter(); + + while ( isdefined( self._has_meat ) && self._has_meat ) + { + level._meat_player_tracker_origin = self.origin; + wait 0.2; + } + + self setmovespeedscale( 1 ); + self setclientfield( "holding_meat", 0 ); +} + +zmbvoxstartholdcounter() +{ + for ( meat_hold_counter = 0; isdefined( self._has_meat ) && self._has_meat; meat_hold_counter++ ) + { + if ( meat_hold_counter >= 15 ) + { + self thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "meat_hold" ); + break; + } + + wait 0.5; + } +} + +reset_meat_when_player_downed() +{ + self notify( "reset_downed" ); + self endon( "reset_downed" ); + level endon( "meat_reset" ); + level endon( "meat_thrown" ); + self waittill_any( "player_downed", "death", "fake_death", "replace_weapon_powerup" ); + self._has_meat = 0; + self._spawning_meat = 1; + grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), self.origin + ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 15 ), ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 0 ) ); + grenade._respawned_meat = 1; + level._last_person_to_throw_meat = undefined; + playsoundatposition( "zmb_spawn_powerup", self.origin ); + wait 0.1; + self._spawning_meat = undefined; + level notify( "meat_reset" ); +} + +meat_last_stand_callback( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) +{ + if ( isdefined( self._has_meat ) && self._has_meat ) + level thread item_meat_drop( self.origin, self._meat_team ); +} + +reset_meat_when_player_disconnected() +{ + level endon( "meat_thrown" ); + level endon( "meat_reset" ); + level endon( "meat_end" ); + team = self._meat_team; + + self waittill( "disconnect" ); + + level thread item_meat_drop( level._meat_player_tracker_origin, team ); +} + +item_meat_drop( org, team ) +{ + players = get_alive_players_on_meat_team( team ); + + if ( players.size > 0 ) + { + player = players[0]; + player endon( "disconnect" ); + player._spawning_meat = 1; + grenade = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org + ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 15 ), ( 0, 0, 0 ) ); + grenade._respawned_meat = 1; + level._last_person_to_throw_meat = undefined; + playsoundatposition( "zmb_spawn_powerup", grenade.origin ); + wait 0.1; + player._spawning_meat = undefined; + level notify( "meat_reset" ); + } +} + +player_has_meat( player ) +{ + return player getcurrentweapon() == get_gamemode_var( "item_meat_name" ); +} + +get_player_with_meat() +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i]._has_meat ) && players[i]._has_meat ) + return players[i]; + } + + return undefined; +} + +spawn_player_meat_manager() +{ + self thread player_watch_weapon_change(); + self thread player_watch_grenade_throw(); +} + +player_watch_weapon_change() +{ + self endon( "death_or_disconnect" ); + + for (;;) + { + self waittill( "weapon_change", weapon ); + + if ( weapon == get_gamemode_var( "item_meat_name" ) ) + { + add_meat_event( "player_meat", self ); + continue; + } + + add_meat_event( "player_no_meat", self ); + } +} + +player_watch_grenade_throw() +{ + self endon( "death_or_disconnect" ); + + for (;;) + { + self waittill( "grenade_fire", weapon, weapname ); + + if ( weapname == get_gamemode_var( "item_meat_name" ) ) + { + add_meat_event( "player_grenade_fire", self, weapon ); + weapon thread item_meat_on_spawn_retrieve_trigger( undefined, self, get_gamemode_var( "item_meat_name" ) ); + } + } +} + +spawn_level_meat_manager() +{ +/# + level.meat_manager = spawnstruct(); + level.meat_manager.events = []; + level.meat_manager thread handle_meat_events(); +#/ +} + +add_meat_event( e, p1, p2, p3, p4 ) +{ +/# + event = spawnstruct(); + event.e = e; + event.numparams = 0; + event.param = []; + + if ( isdefined( p1 ) ) + { + event.param[0] = p1; + event.numparams = 1; + } + + if ( isdefined( p2 ) ) + { + event.param[1] = p2; + event.numparams = 2; + } + + if ( isdefined( p3 ) ) + { + event.param[2] = p3; + event.numparams = 3; + } + + if ( isdefined( p4 ) ) + { + event.param[3] = p4; + event.numparams = 4; + } + + if ( isdefined( level.meat_manager ) ) + level.meat_manager.events[level.meat_manager.events.size] = event; +#/ +} + +handle_meat_events() +{ + while ( true ) + { + while ( self.events.size ) + { + self handle_meat_event( self.events[0] ); + arrayremoveindex( self.events, 0 ); + } + + wait 0.05; + } +} + +paramstr( param ) +{ +/# + if ( !isdefined( param ) ) + return "undefined"; + + if ( isplayer( param ) ) + return param.name; + + if ( isstring( param ) || isint( param ) || isfloat( param ) || isvec( param ) ) + return param; + + if ( isarray( param ) ) + return "[]"; + + return ""; +#/ +} + +handle_meat_event( event ) +{ +/# + estr = "ZM MEAT: [" + event.e + "]("; + + for ( i = 0; i < event.numparams; i++ ) + { + estr += paramstr( event.param[i] ); + + if ( i < event.numparams - 1 ) + estr += ","; + } + + estr += ") \\n"; + println( estr ); +#/ +} diff --git a/ZM/Maps/Tranzit/maps/mp/gametypes_zm/zstandard.gsc b/ZM/Maps/Tranzit/maps/mp/gametypes_zm/zstandard.gsc new file mode 100644 index 0000000..eb15237 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/gametypes_zm/zstandard.gsc @@ -0,0 +1,46 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_ai_dogs; +#include maps\mp\zombies\_zm; + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::main(); + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level._game_module_custom_spawn_init_func = maps\mp\gametypes_zm\_zm_gametype::custom_spawn_init_func; + level._game_module_stat_update_func = maps\mp\zombies\_zm_stats::survival_classic_custom_stat_update; + maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zstandard" ); +} + +onprecachegametype() +{ + level.playersuicideallowed = 1; + level.canplayersuicide = ::canplayersuicide; + level.suicide_weapon = "death_self_zm"; + precacheitem( "death_self_zm" ); + maps\mp\zombies\_zm_ai_dogs::init(); + maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zstandard" ); +} + +onstartgametype() +{ + maps\mp\gametypes_zm\_zm_gametype::setup_classic_gametype(); + maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zstandard", ::zstandard_main ); +} + +zstandard_main() +{ + level.dog_rounds_allowed = getgametypesetting( "allowdogs" ); + + if ( level.dog_rounds_allowed ) + maps\mp\zombies\_zm_ai_dogs::enable_dog_rounds(); + + level thread maps\mp\zombies\_zm::round_start(); + level thread maps\mp\gametypes_zm\_zm_gametype::kill_all_zombies(); +} diff --git a/ZM/Maps/Tranzit/maps/mp/teams/_teamset_cdc.gsc b/ZM/Maps/Tranzit/maps/mp/teams/_teamset_cdc.gsc new file mode 100644 index 0000000..cef3a54 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/teams/_teamset_cdc.gsc @@ -0,0 +1,55 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +register() +{ + game["teamset"] = []; + game["teamset"]["cdc"] = ::cdc; +} + +level_init() +{ + game["allies"] = "cdc"; + game["axis"] = "cia"; + setdvar( "g_TeamName_Allies", &"ZMUI_CDC_SHORT" ); + setdvar( "g_TeamName_Axis", &"ZMUI_CIA_SHORT" ); + game["strings"]["allies_win"] = &"ZM_CDC_WIN_MATCH"; + game["strings"]["allies_win_round"] = &"ZM_CDC_WIN_ROUND"; + game["strings"]["allies_mission_accomplished"] = &"ZM_CDC_MISSION_ACCOMPLISHED"; + game["strings"]["allies_eliminated"] = &"ZM_CDC_ELIMINATED"; + game["strings"]["allies_forfeited"] = &"ZM_CDC_FORFEITED"; + game["strings"]["allies_name"] = &"ZM_CDC_NAME"; + game["music"]["spawn_allies"] = "SPAWN_OPS"; + game["music"]["victory_allies"] = "mus_victory_usa"; + game["icons"]["allies"] = "faction_cdc"; + game["colors"]["allies"] = ( 0, 0, 0 ); + game["voice"]["allies"] = "vox_st6_"; + setdvar( "scr_allies", "marines" ); + game["strings"]["axis_win"] = &"ZM_CIA_WIN_MATCH"; + game["strings"]["axis_win_round"] = &"ZM_CIA_WIN_ROUND"; + game["strings"]["axis_mission_accomplished"] = &"ZM_CIA_MISSION_ACCOMPLISHED"; + game["strings"]["axis_eliminated"] = &"ZM_CIA_ELIMINATED"; + game["strings"]["axis_forfeited"] = &"ZM_CIA_FORFEITED"; + game["strings"]["axis_name"] = &"ZM_CIA_NAME"; + game["music"]["spawn_axis"] = "SPAWN_RUS"; + game["music"]["victory_axis"] = "mus_victory_soviet"; + game["icons"]["axis"] = "faction_cia"; + game["colors"]["axis"] = ( 0.65, 0.57, 0.41 ); + game["voice"]["axis"] = "vox_pmc_"; +} + +cdc() +{ + allies(); + axis(); +} + +allies() +{ + +} + +axis() +{ + +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit.gsc new file mode 100644 index 0000000..a9d2387 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit.gsc @@ -0,0 +1,3431 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zm_transit_utility; +#include maps\mp\zombies\_zm_weapon_locker; +#include maps\mp\zm_transit_gamemodes; +#include maps\mp\zombies\_zm_banking; +#include maps\mp\zm_transit_ffotd; +#include maps\mp\zm_transit_bus; +#include maps\mp\zm_transit_automaton; +#include maps\mp\zombies\_zm_equip_turbine; +#include maps\mp\zm_transit_fx; +#include maps\mp\zombies\_zm; +#include maps\mp\animscripts\zm_death; +#include maps\mp\teams\_teamset_cdc; +#include maps\mp\_sticky_grenade; +#include maps\mp\zombies\_load; +#include maps\mp\zm_transit_ai_screecher; +#include maps\mp\gametypes_zm\_spawning; +#include maps\mp\zm_transit_lava; +#include maps\mp\zm_transit_power; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zombies\_zm_weap_riotshield; +#include maps\mp\zombies\_zm_weap_jetgun; +#include maps\mp\zombies\_zm_weap_emp_bomb; +#include maps\mp\zombies\_zm_weap_cymbal_monkey; +#include maps\mp\zombies\_zm_weap_tazer_knuckles; +#include maps\mp\zombies\_zm_weap_bowie; +#include maps\mp\zombies\_zm_weap_claymore; +#include maps\mp\zombies\_zm_weap_ballistic_knife; +#include maps\mp\_visionset_mgr; +#include maps\mp\zm_transit_achievement; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\zm_transit_openings; +#include character\c_transit_player_farmgirl; +#include character\c_transit_player_oldman; +#include character\c_transit_player_engineer; +#include character\c_transit_player_reporter; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_blockers; +#include maps\mp\zombies\_zm_power; +#include maps\mp\zombies\_zm_devgui; +#include maps\mp\zm_transit_cling; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zm_transit_sq; +#include maps\mp\zm_transit_distance_tracking; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zombies\_zm_tombstone; + +gamemode_callback_setup() +{ + maps\mp\zm_transit_gamemodes::init(); +} + +encounter_init() +{ + precacheshader( "sun_moon_zombie" ); + level.precachecustomcharacters = ::precache_team_characters; + level.givecustomcharacters = ::give_team_characters; +} + +zgrief_init() +{ + encounter_init(); + level thread maps\mp\zombies\_zm_banking::delete_bank_teller(); + flag_wait( "start_zombie_round_logic" ); + level.custom_intermission = ::transit_standard_intermission; + + if ( isdefined( level.scr_zm_map_start_location ) && level.scr_zm_map_start_location == "transit" ) + level thread lava_damage_depot(); +} + +survival_init() +{ + level.force_team_characters = 1; + level.should_use_cia = 0; + + if ( randomint( 100 ) > 50 ) + level.should_use_cia = 1; + + level.precachecustomcharacters = ::precache_team_characters; + level.givecustomcharacters = ::give_team_characters; + level.dog_spawn_func = ::dog_spawn_transit_logic; + level thread maps\mp\zombies\_zm_banking::delete_bank_teller(); + flag_wait( "start_zombie_round_logic" ); + level.custom_intermission = ::transit_standard_intermission; + + if ( isdefined( level.scr_zm_map_start_location ) && level.scr_zm_map_start_location == "transit" ) + level thread lava_damage_depot(); +} + +zclassic_init() +{ + level.precachecustomcharacters = ::precache_personality_characters; + level.givecustomcharacters = ::give_personality_characters; + level.setupcustomcharacterexerts = ::setup_personality_character_exerts; + level.level_specific_init_powerups = ::add_transit_powerups; + level.powerup_intro_vox = ::powerup_intro_vox; + level.powerup_vo_available = ::powerup_vo_available; + level.buildable_build_custom_func = ::buildable_build_custom_func; + level.custom_update_retrieve_trigger = ::transit_bus_update_retrieve_trigger; + level.buildable_pickup_vo_override = ::transit_buildable_vo_override; + precachemodel( "p6_zm_window_dest_glass_small_broken" ); + precachemodel( "p6_zm_window_dest_glass_big_broken" ); + precachemodel( "p6_zm_keycard" ); + flag_wait( "start_zombie_round_logic" ); + level.custom_intermission = ::transit_intermission; + level.custom_trapped_zombies = ::kill_zombies_depot; + level thread lava_damage_depot(); + level thread bank_teller_init(); + level thread transit_breakable_glass_init(); + level thread sndsetupmusiceasteregg(); + level thread bank_pap_hint(); + level thread power_pap_hint(); + level thread sndtoiletflush(); +} + +zclassic_preinit() +{ + zclassic_init(); +} + +zcleansed_preinit() +{ + level._zcleansed_weapon_progression = array( "rpd_zm", "srm1216_zm", "judge_zm", "qcw05_zm", "kard_zm" ); + survival_init(); +} + +zcontainment_preinit() +{ + survival_init(); +} + +zdeadpool_preinit() +{ + encounter_init(); +} + +zgrief_preinit() +{ + registerclientfield( "toplayer", "meat_stink", 1, 1, "int" ); + zgrief_init(); + level thread delete_bus_pieces(); +} + +zmeat_preinit() +{ + encounter_init(); +} + +znml_preinit() +{ + survival_init(); +} + +zpitted_preinit() +{ + encounter_init(); +} + +zrace_preinit() +{ + encounter_init(); +} + +zstandard_preinit() +{ + survival_init(); + level thread delete_bus_pieces(); +} + +zturned_preinit() +{ + encounter_init(); +} + +createfx_callback() +{ + ents = getentarray(); + + for ( i = 0; i < ents.size; i++ ) + { + if ( ents[i].classname != "info_player_start" ) + ents[i] delete(); + } +} + +main() +{ + level thread maps\mp\zm_transit_ffotd::main_start(); + level.hotjoin_player_setup = ::hotjoin_setup_player; + level.level_createfx_callback_thread = ::createfx_callback; + level.ignore_spawner_func = ::transit_ignore_spawner; + level.default_game_mode = "zclassic"; + level.default_start_location = "transit"; + level._get_random_encounter_func = maps\mp\zm_transit_utility::get_random_encounter_match; + setup_rex_starts(); + maps\mp\zm_transit_bus::init_animtree(); + maps\mp\zm_transit_bus::init_props_animtree(); + maps\mp\zm_transit_automaton::init_animtree(); + maps\mp\zombies\_zm_equip_turbine::init_animtree(); + maps\mp\zm_transit_fx::main(); + maps\mp\zombies\_zm::init_fx(); + maps\mp\animscripts\zm_death::precache_gib_fx(); + level.zombiemode = 1; + level._no_water_risers = 1; + level.riser_fx_on_client = 1; + + if ( !isdefined( level.zombie_surfing_kills ) ) + { + level.zombie_surfing_kills = 1; + level.zombie_surfing_kill_count = 6; + } + + maps\mp\teams\_teamset_cdc::register(); + maps\mp\_sticky_grenade::init(); + level.level_specific_stats_init = ::init_transit_stats; + maps\mp\zombies\_load::main(); + init_clientflags(); + level thread transit_pathnode_spawning(); + registerclientfield( "allplayers", "playerinfog", 1, 1, "int" ); + level.set_player_in_fog = ::set_player_in_fog; + level.custom_breadcrumb_store_func = ::transit_breadcrumb_store_func; + register_screecher_lights(); + + if ( getdvar( "createfx" ) == "1" ) + return; + + maps\mp\teams\_teamset_cdc::level_init(); + maps\mp\zm_transit_ai_screecher::init(); + level.is_player_in_screecher_zone = ::is_player_in_screecher_zone; + level.revive_trigger_spawn_override_link = ::revive_trigger_spawn_override_link; + level.revive_trigger_should_ignore_sight_checks = ::revive_trigger_should_ignore_sight_checks; + level.allow_move_in_laststand = ::allow_move_in_laststand; + level.can_revive = ::can_revive; + level.melee_miss_func = ::melee_miss_func; + level.grenade_watcher = ::grenade_watcher; + level.ignore_find_flesh = ::ignore_find_flesh; + level.ignore_equipment = ::ignore_equipment; + level.should_attack_equipment = ::should_attack_equipment; + level.gib_on_damage = ::gib_on_damage; + level.melee_anim_state = ::melee_anim_state; + level.ignore_stop_func = ::ignore_stop_func; + level.can_melee = ::can_melee; + level.ignore_traverse = ::ignore_traverse; + level.exit_level_func = ::exit_level_func; + level.inert_substate_override = ::inert_substate_override; + level.attack_item = ::attack_item; + level.attack_item_stop = ::attack_item_stop; + level.check_valid_poi = ::check_valid_poi; + level.dog_melee_miss = ::dog_melee_miss; + precacheshellshock( "lava" ); + precacheshellshock( "lava_small" ); + precache_survival_barricade_assets(); + include_game_modules(); + maps\mp\gametypes_zm\_spawning::level_use_unified_spawning( 1 ); + level.givecustomloadout = ::givecustomloadout; + level.giveextrazombies = ::giveextrazombies; + initcharacterstartindex(); + + if ( level.xenon ) + { + level.giveextrazombies = ::giveextrazombies; + precacheextrazombies(); + } + + level.custom_player_fake_death = ::transit_player_fake_death; + level.custom_player_fake_death_cleanup = ::transit_player_fake_death_cleanup; + level.initial_round_wait_func = ::initial_round_wait_func; + level.zombie_speed_up = ::zombie_speed_up; + level.zombie_init_done = ::zombie_init_done; + level.zombiemode_using_pack_a_punch = 1; + level.zombiemode_reusing_pack_a_punch = 1; + level.pap_interaction_height = 47; + level.zombiemode_using_doubletap_perk = 1; + level.zombiemode_using_juggernaut_perk = 1; + level.zombiemode_using_marathon_perk = 1; + level.zombiemode_using_revive_perk = 1; + level.zombiemode_using_sleightofhand_perk = 1; + level.zombiemode_using_tombstone_perk = 1; + init_persistent_abilities(); + level.register_offhand_weapons_for_level_defaults_override = ::offhand_weapon_overrride; + + if ( is_classic() ) + { + level.player_intersection_tracker_override = ::zombie_transit_player_intersection_tracker_override; + level.taser_trig_adjustment = ( 2, 7, 0 ); + } + + level.player_too_many_weapons_monitor_callback = ::zombie_transit_player_too_many_weapons_monitor_callback; + level._zmbvoxlevelspecific = ::zombie_transit_audio_alias_override; + level._zombie_custom_add_weapons = ::custom_add_weapons; + level._allow_melee_weapon_switching = 1; + level.disable_melee_wallbuy_icons = 1; + level.uses_gumps = 1; + setdvar( "aim_target_fixed_actor_size", 1 ); + level.banking_update_enabled = 1; + level.raygun2_included = 1; + include_weapons(); + include_powerups(); + include_equipment_for_level(); + include_powered_items(); + level.powerup_bus_range = 500; + level.pay_turret_cost = 300; + level.auto_turret_cost = 500; + setup_dvars(); + onplayerconnect_callback( ::setup_players ); + level thread disable_triggers(); + level thread maps\mp\zm_transit_lava::lava_damage_init(); + level.zm_transit_burn_max_duration = 2; + level thread maps\mp\zm_transit_power::precache_models(); + setup_zombie_init(); + maps\mp\zombies\_zm::init(); + maps\mp\zombies\_zm_ai_basic::init_inert_zombies(); + maps\mp\zombies\_zm_weap_riotshield::init(); + maps\mp\zombies\_zm_weap_jetgun::init(); + level.special_weapon_magicbox_check = ::transit_special_weapon_magicbox_check; + maps\mp\zombies\_zm_weap_emp_bomb::init(); + zm_transit_emp_init(); + level.legacy_cymbal_monkey = 1; + maps\mp\zombies\_zm_weap_cymbal_monkey::init(); + maps\mp\zombies\_zm_weap_tazer_knuckles::init(); + maps\mp\zombies\_zm_weap_bowie::init(); + maps\mp\zombies\_zm_weap_claymore::init(); + maps\mp\zombies\_zm_weap_ballistic_knife::init(); + + if ( !isdefined( level.vsmgr_prio_overlay_zm_transit_burn ) ) + level.vsmgr_prio_overlay_zm_transit_burn = 20; + + maps\mp\_visionset_mgr::vsmgr_register_info( "overlay", "zm_transit_burn", 1, level.vsmgr_prio_overlay_zm_transit_burn, 15, 1, maps\mp\_visionset_mgr::vsmgr_duration_lerp_thread_per_player, 0 ); + level maps\mp\zm_transit_achievement::init(); + precacheitem( "death_throe_zm" ); + + if ( level.splitscreen && getdvarint( "splitscreen_playerCount" ) > 2 ) + level.optimise_for_splitscreen = 1; + else + level.optimise_for_splitscreen = 0; + + if ( level.ps3 ) + { + if ( isdefined( level.optimise_for_splitscreen ) && level.optimise_for_splitscreen ) + level.culldist = 1500; + else + level.culldist = 4500; + } + else if ( isdefined( level.optimise_for_splitscreen ) && level.optimise_for_splitscreen ) + level.culldist = 2500; + else + level.culldist = 5500; + + setculldist( level.culldist ); + level.zones = []; + level.zone_manager_init_func = ::transit_zone_init; + init_zones[0] = "zone_pri"; + init_zones[1] = "zone_station_ext"; + init_zones[2] = "zone_tow"; + + if ( is_classic() ) + { + init_zones[3] = "zone_far"; + init_zones[4] = "zone_pow"; + init_zones[5] = "zone_trans_1"; + init_zones[6] = "zone_trans_2"; + init_zones[7] = "zone_trans_3"; + init_zones[8] = "zone_trans_4"; + init_zones[9] = "zone_trans_5"; + init_zones[10] = "zone_trans_6"; + init_zones[11] = "zone_trans_7"; + init_zones[12] = "zone_trans_8"; + init_zones[13] = "zone_trans_9"; + init_zones[14] = "zone_trans_10"; + init_zones[15] = "zone_trans_11"; + init_zones[16] = "zone_amb_tunnel"; + init_zones[17] = "zone_amb_forest"; + init_zones[18] = "zone_amb_cornfield"; + init_zones[19] = "zone_amb_power2town"; + init_zones[20] = "zone_amb_bridge"; + } + else + { + init_zones[3] = "zone_far_ext"; + init_zones[4] = "zone_brn"; + } + + level thread maps\mp\zombies\_zm_zonemgr::manage_zones( init_zones ); + + if ( isdefined( level.optimise_for_splitscreen ) && level.optimise_for_splitscreen ) + { + if ( is_classic() ) + level.zombie_ai_limit = 20; + + setdvar( "fx_marks_draw", 0 ); + setdvar( "disable_rope", 1 ); + setdvar( "cg_disableplayernames", 1 ); + setdvar( "disableLookAtEntityLogic", 1 ); + } + else + level.zombie_ai_limit = 24; + + setdvar( "zombiemode_path_minz_bias", 13 ); + level thread maps\mp\zm_transit_ffotd::main_end(); + flag_wait( "start_zombie_round_logic" ); + level notify( "players_done_connecting" ); +/# + execdevgui( "devgui_zombie_transit" ); + level.custom_devgui = ::zombie_transit_devgui; +#/ + level thread set_transit_wind(); + + if ( is_classic() ) + level thread player_name_fade_control(); + + level._audio_custom_response_line = ::transit_audio_custom_response_line; + level.speed_change_round = 15; + level.speed_change_max = 5; + init_screecher_zones(); + elec_door_triggers = getentarray( "local_electric_door", "script_noteworthy" ); + + foreach ( trigger in elec_door_triggers ) + { + if ( isdefined( trigger.door_hold_trigger ) && trigger.door_hold_trigger == "zombie_door_hold_farm" ) + { + if ( isdefined( trigger.doors ) ) + { + foreach ( door in trigger.doors ) + { + if ( door.origin == ( 8833, -5697, 135 ) ) + door.ignore_use_blocker_clip_for_pathing_check = 1; + } + } + } + } +} + +init_persistent_abilities() +{ + if ( is_classic() ) + { + level.pers_upgrade_boards = 1; + level.pers_upgrade_revive = 1; + level.pers_upgrade_multi_kill_headshots = 1; + level.pers_upgrade_cash_back = 1; + level.pers_upgrade_insta_kill = 1; + level.pers_upgrade_jugg = 1; + level.pers_upgrade_carpenter = 1; + level.pers_upgrade_box_weapon = 1; + level.pers_magic_box_firesale = 1; + level.pers_treasure_chest_get_weapons_array_func = ::pers_treasure_chest_get_weapons_array_transit; + level.pers_upgrade_sniper = 1; + level.pers_upgrade_pistol_points = 1; + level.pers_upgrade_perk_lose = 1; + level.pers_upgrade_double_points = 1; + level.pers_upgrade_nube = 1; + } +} + +pers_treasure_chest_get_weapons_array_transit() +{ + if ( !isdefined( level.pers_box_weapons ) ) + { + level.pers_box_weapons = []; + level.pers_box_weapons[level.pers_box_weapons.size] = "knife_ballistic_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "cymbal_monkey_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "judge_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "emp_grenade_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "galil_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "hamr_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "ray_gun_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "rpd_zm"; + } +} + +setup_rex_starts() +{ + add_gametype( "zclassic", ::dummy, "zclassic", ::dummy ); + add_gametype( "zstandard", ::dummy, "zstandard", ::dummy ); + add_gametype( "zgrief", ::dummy, "zgrief", ::dummy ); + add_gameloc( "transit", ::dummy, "transit", ::dummy ); + add_gameloc( "town", ::dummy, "town", ::dummy ); + add_gameloc( "farm", ::dummy, "farm", ::dummy ); +} + +dummy() +{ + +} + +init_clientflags() +{ + level._clientflag_vehicle_bus_flashing_lights = 0; + level._clientflag_vehicle_bus_head_lights = 1; + level._clientflag_vehicle_bus_brake_lights = 2; + level._clientflag_vehicle_bus_turn_signal_left_lights = 3; + level._clientflag_vehicle_bus_turn_signal_right_lights = 4; +} + +set_player_in_fog( onoff ) +{ + if ( onoff ) + self setclientfield( "playerinfog", 1 ); + else + self setclientfield( "playerinfog", 0 ); +} + +transit_breadcrumb_store_func( store_crumb ) +{ + if ( isdefined( self.isonbus ) && self.isonbus ) + return 0; + + return store_crumb; +} + +transit_ignore_spawner( spawner ) +{ + if ( spawner.classname == "actor_zm_zombie_transit_screecher" ) + return true; + + return false; +} + +allow_move_in_laststand( player_down ) +{ + if ( isdefined( player_down.isonbus ) && player_down.isonbus ) + return false; + + return true; +} + +can_revive( player_down ) +{ + if ( isdefined( self.screecher ) ) + return false; + + return true; +} + +melee_miss_func() +{ + if ( isdefined( self.enemy ) ) + { + if ( isdefined( self.enemy.screecher ) || self.enemy getstance() == "prone" || self.enemy maps\mp\zombies\_zm_laststand::is_reviving_any() ) + { + dist_sq = distancesquared( self.enemy.origin, self.origin ); + melee_dist_sq = self.meleeattackdist * self.meleeattackdist; + + if ( dist_sq < melee_dist_sq ) + self.enemy dodamage( self.meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); + } + } +} + +grenade_watcher( grenade, weapname ) +{ + if ( weapname == "frag_grenade_zm" || weapname == "claymore_zm" || weapname == "sticky_grenade_zm" ) + self thread maps\mp\zombies\_zm_ai_basic::grenade_watcher( grenade ); +} + +ignore_find_flesh() +{ + if ( isdefined( self.isonbus ) && self.isonbus ) + return true; + + return false; +} + +ignore_equipment( zombie ) +{ + if ( !( isdefined( zombie.completed_emerging_into_playable_area ) && zombie.completed_emerging_into_playable_area ) ) + return true; + + if ( isdefined( zombie.is_avogadro ) && zombie.is_avogadro ) + return true; + + if ( isdefined( zombie.is_inert ) && zombie.is_inert ) + return true; + + if ( isdefined( zombie.inert_delay ) ) + return true; + + return false; +} + +should_attack_equipment( dist ) +{ + if ( !isdefined( level.door_triggers ) ) + level.door_triggers = getentarray( "bus_door_trigger", "targetname" ); + + for ( i = 0; i < level.door_triggers.size; i++ ) + { + if ( self istouching( level.door_triggers[i] ) ) + { + if ( dist < 4096 ) + return true; + } + } + + return false; +} + +gib_on_damage() +{ + opening = self.opening; + + if ( isdefined( opening ) ) + { + if ( isdefined( self.a.gib_ref ) && ( self.a.gib_ref == "left_arm" || self.a.gib_ref == "right_arm" ) ) + { + level maps\mp\zombies\_zm_spawner::zombie_death_points( self.origin, self.damagemod, self.a.gib_ref, self.attacker, self ); + opening.zombie = undefined; + launchvector = ( 0, 0, -1 ); + self thread maps\mp\zombies\_zm_spawner::zombie_ragdoll_then_explode( launchvector, self.attacker ); + self notify( "killanimscript" ); + return; + } + } + + if ( isdefined( self.is_inert ) && self.is_inert ) + { + if ( !( isdefined( self.has_legs ) && self.has_legs ) ) + { + self notify( "stop_zombie_inert_transition" ); + self setanimstatefromasd( "zm_inert_crawl", maps\mp\zombies\_zm_ai_basic::get_inert_crawl_substate() ); + } + } +} + +melee_anim_state() +{ + if ( self.zombie_move_speed == "bus_walk" ) + return maps\mp\animscripts\zm_utility::append_missing_legs_suffix( "zm_walk_melee" ); + + return undefined; +} + +ignore_stop_func() +{ + if ( isdefined( self.is_inert ) && self.is_inert ) + return true; + + if ( isdefined( self.opening ) ) + return true; + + if ( isdefined( self.entering_bus ) ) + return true; + + return false; +} + +can_melee() +{ + if ( isdefined( self.dont_die_on_me ) && self.dont_die_on_me ) + return false; + + if ( isdefined( self.isonbus ) && self.isonbus || isdefined( self.isonbusroof ) && self.isonbusroof ) + { + if ( self.enemydistancesq > anim.meleerangesq ) + return false; + } + + return true; +} + +ignore_traverse() +{ + if ( isdefined( self.is_inert ) && self.is_inert ) + { + if ( !( isdefined( self.in_place ) && self.in_place ) ) + { + self setgoalpos( self.origin ); + + if ( randomint( 100 ) > 50 ) + self setanimstatefromasd( "zm_inert", "inert1" ); + else + self setanimstatefromasd( "zm_inert", "inert2" ); + + self.in_place = 1; + } + + return true; + } + + return false; +} + +exit_level_func() +{ + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( isdefined( zombie.ignore_solo_last_stand ) && zombie.ignore_solo_last_stand ) + continue; + + if ( isdefined( zombie.find_exit_point ) ) + { + zombie thread [[ zombie.find_exit_point ]](); + continue; + } + + if ( isdefined( zombie.isonbus ) && zombie.isonbus ) + { + zombie thread find_exit_bus(); + continue; + } + + if ( zombie.ignoreme ) + { + zombie thread maps\mp\zombies\_zm::default_delayed_exit(); + continue; + } + + zombie thread maps\mp\zombies\_zm::default_find_exit_point(); + } +} + +inert_substate_override( substate ) +{ + in_bar = 0; + + if ( flag( "OnTowDoorBar" ) ) + { + if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_bar" ) ) + in_bar = 1; + } + + if ( isdefined( self.isonbus ) && self.isonbus || in_bar ) + { + if ( randomint( 100 ) > 50 ) + substate = "inert1"; + else + substate = "inert2"; + } + + return substate; +} + +attack_item() +{ + if ( isdefined( self.isonbus ) && self.isonbus ) + self linkto( level.the_bus ); +} + +attack_item_stop() +{ + if ( isdefined( self.isonbus ) && self.isonbus ) + self unlink(); +} + +check_valid_poi( valid ) +{ + if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_bar" ) ) + { + if ( !flag( "OnTowDoorBar" ) ) + return 0; + } + else if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_town_barber" ) ) + { + if ( !flag( "OnTowDoorBarber" ) ) + return 0; + } + + return valid; +} + +dog_melee_miss() +{ + if ( isdefined( self.enemy ) ) + { + stance = self.enemy getstance(); + + if ( stance == "prone" || stance == "crouch" ) + { + dist_sq = distancesquared( self.enemy.origin, self.origin ); + + if ( dist_sq < 10000 ) + { + meleedamage = getdvarint( "dog_MeleeDamage" ); + self.enemy dodamage( meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); + } + } + } +} + +find_exit_loc() +{ + player = self.favoriteenemy; + dist_zombie = 0; + dist_player = 0; + dest = 0; + away = vectornormalize( self.origin - player.origin ); + endpos = self.origin + vectorscale( away, 600 ); + locs = array_randomize( level.enemy_dog_locations ); + + for ( i = 0; i < locs.size; i++ ) + { + dist_zombie = distancesquared( locs[i].origin, endpos ); + dist_player = distancesquared( locs[i].origin, player.origin ); + + if ( dist_zombie < dist_player ) + { + dest = i; + break; + } + } + + if ( isdefined( locs[dest] ) ) + self.solo_revive_exit_pos = locs[dest].origin; +} + +find_exit_bus() +{ + self endon( "death" ); + self.solo_revive_exit = 1; + self notify( "endOnBus" ); + self thread maps\mp\zm_transit_openings::zombieexitbus(); + self find_exit_loc(); + off_the_bus = 0; + + while ( flag( "wait_and_revive" ) ) + { + if ( !off_the_bus && self.ai_state == "find_flesh" ) + { + off_the_bus = 1; + self thread maps\mp\zombies\_zm::default_find_exit_point(); + } + + wait 0.1; + } + + self.solo_revive_exit = 0; + + if ( !( isdefined( self.exiting_window ) && self.exiting_window ) ) + { + if ( isdefined( self.isonbus ) && self.isonbus ) + { + self notify( "stop_zombieExitBus" ); + self.walk_to_exit = 0; + self thread zombiemoveonbus(); + } + } +} + +post_first_init() +{ + while ( !isdefined( anim.notfirsttime ) ) + wait 0.5; + + anim.meleerange = 36; + anim.meleerangesq = anim.meleerange * anim.meleerange; +} + +set_transit_wind() +{ + setdvar( "enable_global_wind", 1 ); + setdvar( "wind_global_vector", "-120 -115 -120" ); + setdvar( "wind_global_low_altitude", 0 ); + setdvar( "wind_global_hi_altitude", 2000 ); + setdvar( "wind_global_low_strength_percent", 0.5 ); +} + +revive_trigger_move_with_player() +{ + self endon( "stop_revive_trigger" ); + self endon( "death" ); + + while ( isdefined( self.revivetrigger ) ) + { + my_position = self gettagorigin( "J_SpineLower" ); + self.revivetrigger unlink(); + self.revivetrigger.origin = my_position; + self.revivetrigger linkto( level.the_bus ); + wait 0.1; + } +} + +revive_trigger_should_ignore_sight_checks( player_down ) +{ + if ( isdefined( player_down.isonbus ) && player_down.isonbus && level.the_bus.ismoving ) + return true; + + return false; +} + +revive_trigger_spawn_override_link( player_down ) +{ + radius = getdvarint( _hash_A17166B0 ); + player_down.revivetrigger = spawn( "trigger_radius", ( 0, 0, 0 ), 0, radius, radius ); + player_down.revivetrigger sethintstring( "" ); + player_down.revivetrigger setcursorhint( "HINT_NOICON" ); + player_down.revivetrigger setmovingplatformenabled( 1 ); + player_down.revivetrigger enablelinkto(); + + if ( isdefined( player_down.isonbus ) && player_down.isonbus ) + { + player_down.revivetrigger linkto( level.the_bus ); + player_down thread revive_trigger_move_with_player(); + } + else + { + player_down.revivetrigger.origin = player_down.origin; + player_down.revivetrigger linkto( player_down ); + } + + player_down.revivetrigger.beingrevived = 0; + player_down.revivetrigger.createtime = gettime(); +} + +init_screecher_zones() +{ + foreach ( key in level.zone_keys ) + { + if ( issubstr( key, "_trans_" ) || issubstr( key, "_amb_" ) ) + { + level.zones[key].screecher_zone = 1; + continue; + } + + level.zones[key].screecher_zone = 0; + } +} + +is_player_in_screecher_zone( player ) +{ + if ( isdefined( player.isonbus ) && player.isonbus ) + return false; + + if ( player_entered_safety_zone( player ) ) + return false; + + if ( player_entered_safety_light( player ) ) + return false; + + curr_zone = player get_current_zone( 1 ); + + if ( isdefined( curr_zone ) && !( isdefined( curr_zone.screecher_zone ) && curr_zone.screecher_zone ) ) + return false; + + return true; +} + +player_entered_safety_zone( player ) +{ + if ( !isdefined( level.safety_volumes ) ) + level.safety_volumes = getentarray( "screecher_volume", "targetname" ); + + if ( isdefined( player.last_safety_volume ) ) + { + if ( player istouching( player.last_safety_volume ) ) + return true; + } + + if ( isdefined( level.safety_volumes ) ) + { + for ( i = 0; i < level.safety_volumes.size; i++ ) + { + if ( player istouching( level.safety_volumes[i] ) ) + { + player.last_safety_volume = level.safety_volumes[i]; + return true; + } + } + } + + player.last_safety_volume = undefined; + return false; +} + +player_entered_safety_light( player ) +{ + safety = getstructarray( "screecher_escape", "targetname" ); + + if ( !isdefined( safety ) ) + return false; + + player.green_light = undefined; + + for ( i = 0; i < safety.size; i++ ) + { + if ( !( isdefined( safety[i].power_on ) && safety[i].power_on ) ) + continue; + + if ( !isdefined( safety[i].radius ) ) + safety[i].radius = 256; + + plyr_dist = distancesquared( player.origin, safety[i].origin ); + + if ( plyr_dist < safety[i].radius * safety[i].radius ) + { + player.green_light = safety[i]; + return true; + } + } + + return false; +} + +zombie_transit_player_intersection_tracker_override( other_player ) +{ + if ( isdefined( self.isonbus ) && self.isonbus || isdefined( self.isonbus ) && self.isonbus ) + return true; + + if ( isdefined( other_player.isonbus ) && other_player.isonbus || isdefined( other_player.isonbus ) && other_player.isonbus ) + return true; + + return false; +} + +precache_team_characters() +{ + precachemodel( "c_zom_player_cdc_fb" ); + precachemodel( "c_zom_hazmat_viewhands" ); + precachemodel( "c_zom_player_cia_fb" ); + precachemodel( "c_zom_suit_viewhands" ); +} + +precache_personality_characters() +{ + character\c_transit_player_farmgirl::precache(); + character\c_transit_player_oldman::precache(); + character\c_transit_player_engineer::precache(); + character\c_transit_player_reporter::precache(); + precachemodel( "c_zom_farmgirl_viewhands" ); + precachemodel( "c_zom_oldman_viewhands" ); + precachemodel( "c_zom_engineer_viewhands" ); + precachemodel( "c_zom_reporter_viewhands" ); +} + +precache_survival_barricade_assets() +{ + survival_barricades = getstructarray( "game_mode_object" ); + + for ( i = 0; i < survival_barricades.size; i++ ) + { + if ( isdefined( survival_barricades[i].script_string ) && survival_barricades[i].script_string == "survival" ) + { + if ( isdefined( survival_barricades[i].script_parameters ) ) + precachemodel( survival_barricades[i].script_parameters ); + } + } +} + +initcharacterstartindex() +{ + level.characterstartindex = 0; +/# + forcecharacter = getdvarint( _hash_FEE4CB69 ); + + if ( forcecharacter != 0 ) + level.characterstartindex = forcecharacter - 1; +#/ +} + +precacheextrazombies() +{ + +} + +giveextrazombies() +{ + +} + +give_team_characters() +{ + if ( isdefined( level.hotjoin_player_setup ) && [[ level.hotjoin_player_setup ]]( "c_zom_suit_viewhands" ) ) + return; + + self detachall(); + self set_player_is_female( 0 ); + + if ( isdefined( level.should_use_cia ) ) + { + if ( level.should_use_cia ) + { + self setmodel( "c_zom_player_cia_fb" ); + self setviewmodel( "c_zom_suit_viewhands" ); + self.characterindex = 0; + } + else + { + self setmodel( "c_zom_player_cdc_fb" ); + self setviewmodel( "c_zom_hazmat_viewhands" ); + self.characterindex = 1; + } + } + else + { + if ( !isdefined( self.characterindex ) ) + { + self.characterindex = 1; + + if ( self.team == "axis" ) + self.characterindex = 0; + } + + switch ( self.characterindex ) + { + case 2: + case 0: + self setmodel( "c_zom_player_cia_fb" ); + self.voice = "american"; + self.skeleton = "base"; + self setviewmodel( "c_zom_suit_viewhands" ); + self.characterindex = 0; + break; + case 3: + case 1: + self setmodel( "c_zom_player_cdc_fb" ); + self.voice = "american"; + self.skeleton = "base"; + self setviewmodel( "c_zom_hazmat_viewhands" ); + self.characterindex = 1; + break; + } + } + + self setmovespeedscale( 1 ); + self setsprintduration( 4 ); + self setsprintcooldown( 0 ); + self set_player_tombstone_index(); +} + +give_personality_characters() +{ + if ( isdefined( level.hotjoin_player_setup ) && [[ level.hotjoin_player_setup ]]( "c_zom_farmgirl_viewhands" ) ) + return; + + self detachall(); + + if ( !isdefined( self.characterindex ) ) + self.characterindex = assign_lowest_unused_character_index(); + + self.favorite_wall_weapons_list = []; + self.talks_in_danger = 0; +/# + if ( getdvar( _hash_40772CF1 ) != "" ) + self.characterindex = getdvarint( _hash_40772CF1 ); +#/ + switch ( self.characterindex ) + { + case 2: + self character\c_transit_player_farmgirl::main(); + self setviewmodel( "c_zom_farmgirl_viewhands" ); + level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); + self.favorite_wall_weapons_list[self.favorite_wall_weapons_list.size] = "rottweil72_zm"; + self.favorite_wall_weapons_list[self.favorite_wall_weapons_list.size] = "870mcs_zm"; + self set_player_is_female( 1 ); + break; + case 0: + self character\c_transit_player_oldman::main(); + self setviewmodel( "c_zom_oldman_viewhands" ); + level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); + self.favorite_wall_weapons_list[self.favorite_wall_weapons_list.size] = "frag_grenade_zm"; + self.favorite_wall_weapons_list[self.favorite_wall_weapons_list.size] = "claymore_zm"; + self set_player_is_female( 0 ); + break; + case 3: + self character\c_transit_player_engineer::main(); + self setviewmodel( "c_zom_engineer_viewhands" ); + level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); + self.favorite_wall_weapons_list[self.favorite_wall_weapons_list.size] = "m14_zm"; + self.favorite_wall_weapons_list[self.favorite_wall_weapons_list.size] = "m16_zm"; + self set_player_is_female( 0 ); + break; + case 1: + self character\c_transit_player_reporter::main(); + self setviewmodel( "c_zom_reporter_viewhands" ); + level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); + self.talks_in_danger = 1; + level.rich_sq_player = self; + self.favorite_wall_weapons_list[self.favorite_wall_weapons_list.size] = "beretta93r_zm"; + self set_player_is_female( 0 ); + break; + } + + self setmovespeedscale( 1 ); + self setsprintduration( 4 ); + self setsprintcooldown( 0 ); + self set_player_tombstone_index(); + self thread set_exert_id(); +} + +set_exert_id() +{ + self endon( "disconnect" ); + wait_network_frame(); + wait_network_frame(); + self maps\mp\zombies\_zm_audio::setexertvoice( self.characterindex + 1 ); +} + +setup_personality_character_exerts() +{ + level.exert_sounds[1]["burp"][0] = "vox_plr_0_exert_burp_0"; + level.exert_sounds[1]["burp"][1] = "vox_plr_0_exert_burp_1"; + level.exert_sounds[1]["burp"][2] = "vox_plr_0_exert_burp_2"; + level.exert_sounds[1]["burp"][3] = "vox_plr_0_exert_burp_3"; + level.exert_sounds[1]["burp"][4] = "vox_plr_0_exert_burp_4"; + level.exert_sounds[1]["burp"][5] = "vox_plr_0_exert_burp_5"; + level.exert_sounds[1]["burp"][6] = "vox_plr_0_exert_burp_6"; + level.exert_sounds[2]["burp"][0] = "vox_plr_1_exert_burp_0"; + level.exert_sounds[2]["burp"][1] = "vox_plr_1_exert_burp_1"; + level.exert_sounds[2]["burp"][2] = "vox_plr_1_exert_burp_2"; + level.exert_sounds[2]["burp"][3] = "vox_plr_1_exert_burp_3"; + level.exert_sounds[3]["burp"][0] = "vox_plr_2_exert_burp_0"; + level.exert_sounds[3]["burp"][1] = "vox_plr_2_exert_burp_1"; + level.exert_sounds[3]["burp"][2] = "vox_plr_2_exert_burp_2"; + level.exert_sounds[3]["burp"][3] = "vox_plr_2_exert_burp_3"; + level.exert_sounds[3]["burp"][4] = "vox_plr_2_exert_burp_4"; + level.exert_sounds[3]["burp"][5] = "vox_plr_2_exert_burp_5"; + level.exert_sounds[3]["burp"][6] = "vox_plr_2_exert_burp_6"; + level.exert_sounds[4]["burp"][0] = "vox_plr_3_exert_burp_0"; + level.exert_sounds[4]["burp"][1] = "vox_plr_3_exert_burp_1"; + level.exert_sounds[4]["burp"][2] = "vox_plr_3_exert_burp_2"; + level.exert_sounds[4]["burp"][3] = "vox_plr_3_exert_burp_3"; + level.exert_sounds[4]["burp"][4] = "vox_plr_3_exert_burp_4"; + level.exert_sounds[4]["burp"][5] = "vox_plr_3_exert_burp_5"; + level.exert_sounds[4]["burp"][6] = "vox_plr_3_exert_burp_6"; + level.exert_sounds[1]["hitmed"][0] = "vox_plr_0_exert_pain_medium_0"; + level.exert_sounds[1]["hitmed"][1] = "vox_plr_0_exert_pain_medium_1"; + level.exert_sounds[1]["hitmed"][2] = "vox_plr_0_exert_pain_medium_2"; + level.exert_sounds[1]["hitmed"][3] = "vox_plr_0_exert_pain_medium_3"; + level.exert_sounds[2]["hitmed"][0] = "vox_plr_1_exert_pain_medium_0"; + level.exert_sounds[2]["hitmed"][1] = "vox_plr_1_exert_pain_medium_1"; + level.exert_sounds[2]["hitmed"][2] = "vox_plr_1_exert_pain_medium_2"; + level.exert_sounds[2]["hitmed"][3] = "vox_plr_1_exert_pain_medium_3"; + level.exert_sounds[3]["hitmed"][0] = "vox_plr_2_exert_pain_medium_0"; + level.exert_sounds[3]["hitmed"][1] = "vox_plr_2_exert_pain_medium_1"; + level.exert_sounds[3]["hitmed"][2] = "vox_plr_2_exert_pain_medium_2"; + level.exert_sounds[3]["hitmed"][3] = "vox_plr_2_exert_pain_medium_3"; + level.exert_sounds[4]["hitmed"][0] = "vox_plr_3_exert_pain_medium_0"; + level.exert_sounds[4]["hitmed"][1] = "vox_plr_3_exert_pain_medium_1"; + level.exert_sounds[4]["hitmed"][2] = "vox_plr_3_exert_pain_medium_2"; + level.exert_sounds[4]["hitmed"][3] = "vox_plr_3_exert_pain_medium_3"; + level.exert_sounds[1]["hitlrg"][0] = "vox_plr_0_exert_pain_high_0"; + level.exert_sounds[1]["hitlrg"][1] = "vox_plr_0_exert_pain_high_1"; + level.exert_sounds[1]["hitlrg"][2] = "vox_plr_0_exert_pain_high_2"; + level.exert_sounds[1]["hitlrg"][3] = "vox_plr_0_exert_pain_high_3"; + level.exert_sounds[2]["hitlrg"][0] = "vox_plr_1_exert_pain_high_0"; + level.exert_sounds[2]["hitlrg"][1] = "vox_plr_1_exert_pain_high_1"; + level.exert_sounds[2]["hitlrg"][2] = "vox_plr_1_exert_pain_high_2"; + level.exert_sounds[2]["hitlrg"][3] = "vox_plr_1_exert_pain_high_3"; + level.exert_sounds[3]["hitlrg"][0] = "vox_plr_2_exert_pain_high_0"; + level.exert_sounds[3]["hitlrg"][1] = "vox_plr_2_exert_pain_high_1"; + level.exert_sounds[3]["hitlrg"][2] = "vox_plr_2_exert_pain_high_2"; + level.exert_sounds[3]["hitlrg"][3] = "vox_plr_2_exert_pain_high_3"; + level.exert_sounds[4]["hitlrg"][0] = "vox_plr_3_exert_pain_high_0"; + level.exert_sounds[4]["hitlrg"][1] = "vox_plr_3_exert_pain_high_1"; + level.exert_sounds[4]["hitlrg"][2] = "vox_plr_3_exert_pain_high_2"; + level.exert_sounds[4]["hitlrg"][3] = "vox_plr_3_exert_pain_high_3"; +} + +givecustomloadout( takeallweapons, alreadyspawned ) +{ + self giveweapon( "knife_zm" ); + self give_start_weapon( 1 ); +} + +transit_intermission() +{ + self closemenu(); + self closeingamemenu(); + level endon( "stop_intermission" ); + self endon( "disconnect" ); + self endon( "death" ); + self notify( "_zombie_game_over" ); + self.score = self.score_total; + self.sessionstate = "intermission"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_transit_burn", self ); + self stopshellshock(); + self.game_over_bg = newclienthudelem( self ); + self.game_over_bg.x = 0; + self.game_over_bg.y = 0; + self.game_over_bg.horzalign = "fullscreen"; + self.game_over_bg.vertalign = "fullscreen"; + self.game_over_bg.foreground = 1; + self.game_over_bg.sort = 1; + self.game_over_bg setshader( "black", 640, 480 ); + self.game_over_bg.alpha = 1; + + if ( !isdefined( level.the_bus ) ) + { + self.game_over_bg fadeovertime( 1 ); + self.game_over_bg.alpha = 0; + wait 5; + self.game_over_bg thread maps\mp\zombies\_zm::fade_up_over_time( 1 ); + } + else + { + zonestocheck = []; + zonestocheck[zonestocheck.size] = "zone_amb_bridge"; + zonestocheck[zonestocheck.size] = "zone_trans_11"; + zonestocheck[zonestocheck.size] = "zone_town_west"; + zonestocheck[zonestocheck.size] = "zone_town_west2"; + zonestocheck[zonestocheck.size] = "zone_tow"; + near_bridge = 0; + + foreach ( zone in zonestocheck ) + { + if ( level.the_bus maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_amb_bridge" ) ) + near_bridge = 1; + } + + if ( near_bridge ) + { + trig = getent( "bridge_trig", "targetname" ); + trig notify( "trigger" ); + } + + org = spawn( "script_model", level.the_bus gettagorigin( "tag_camera" ) ); + org setmodel( "tag_origin" ); + org.angles = level.the_bus gettagangles( "tag_camera" ); + org linkto( level.the_bus ); + self setorigin( org.origin ); + self.angles = org.angles; + + if ( !flag( "OnPriDoorYar" ) || !flag( "OnPriDoorYar2" ) ) + { + flag_set( "OnPriDoorYar" ); + wait_network_frame(); + } + + if ( !level.the_bus.ismoving ) + { + level.the_bus.gracetimeatdestination = 0.1; + level.the_bus notify( "depart_early" ); + } + + players = get_players(); + + for ( j = 0; j < players.size; j++ ) + { + player = players[j]; + player camerasetposition( org ); + player camerasetlookat(); + player cameraactivate( 1 ); + } + + self.game_over_bg fadeovertime( 1 ); + self.game_over_bg.alpha = 0; + wait 12; + self.game_over_bg fadeovertime( 1 ); + self.game_over_bg.alpha = 1; + wait 1; + } +} + +transit_standard_intermission() +{ + self closemenu(); + self closeingamemenu(); + level endon( "stop_intermission" ); + self endon( "disconnect" ); + self endon( "death" ); + self notify( "_zombie_game_over" ); + self.score = self.score_total; + self.sessionstate = "intermission"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_transit_burn", self ); + self stopshellshock(); + points = getstructarray( "intermission", "targetname" ); + point = undefined; + + if ( !isdefined( points ) || points.size == 0 ) + { + points = getentarray( "info_intermission", "classname" ); + + if ( points.size < 1 ) + { +/# + println( "NO info_intermission POINTS IN MAP" ); +#/ + return; + } + } + + self.game_over_bg = newclienthudelem( self ); + self.game_over_bg.x = 0; + self.game_over_bg.y = 0; + self.game_over_bg.horzalign = "fullscreen"; + self.game_over_bg.vertalign = "fullscreen"; + self.game_over_bg.foreground = 1; + self.game_over_bg.sort = 1; + self.game_over_bg setshader( "black", 640, 480 ); + self.game_over_bg.alpha = 1; + org = undefined; + + while ( true ) + { + foreach ( struct in points ) + { + if ( isdefined( struct.script_string ) && struct.script_string == level.scr_zm_map_start_location ) + point = struct; + } + + if ( !isdefined( point ) ) + point = points[0]; + + if ( !isdefined( org ) ) + self spawn( point.origin, point.angles ); + + if ( isdefined( point.target ) ) + { + if ( !isdefined( org ) ) + { + org = spawn( "script_model", self.origin + vectorscale( ( 0, 0, -1 ), 60.0 ) ); + org setmodel( "tag_origin" ); + } + + org.origin = point.origin; + org.angles = point.angles; + + for ( j = 0; j < get_players().size; j++ ) + { + player = get_players()[j]; + player camerasetposition( org ); + player camerasetlookat(); + player cameraactivate( 1 ); + } + + speed = 20; + + if ( isdefined( point.speed ) ) + speed = point.speed; + + target_point = getstruct( point.target, "targetname" ); + dist = distance( point.origin, target_point.origin ); + time = dist / speed; + q_time = time * 0.25; + + if ( q_time > 1 ) + q_time = 1; + + self.game_over_bg fadeovertime( q_time ); + self.game_over_bg.alpha = 0; + org moveto( target_point.origin, time, q_time, q_time ); + org rotateto( target_point.angles, time, q_time, q_time ); + wait( time - q_time ); + self.game_over_bg fadeovertime( q_time ); + self.game_over_bg.alpha = 1; + wait( q_time ); + } + else + { + self.game_over_bg fadeovertime( 1 ); + self.game_over_bg.alpha = 0; + wait 5; + self.game_over_bg thread fade_up_over_time( 1 ); + } + } +} + +meetupwithothercharacters() +{ + self endon( "disconnect" ); + isalone = 1; + flag_wait( "begin_spawning" ); + + while ( isalone ) + { + players = get_players(); + + if ( flag( "solo_game" ) ) + break; + + foreach ( player in players ) + { + if ( player == self ) + continue; + + if ( distancesquared( self.origin, player.origin ) < 1048576 ) + { +/# + println( "^2Transit Debug: " + self.name + " met up with " + player.name ); +#/ + isalone = 0; + } + } + + wait 1; + } + + self.characterrespawnpoint = undefined; +} + +transit_respawn_override( player ) +{ + if ( isdefined( player.characterrespawnpoint ) ) + { +/# + println( "^2Transit Debug: Using character respawn point for " + player.name ); +#/ + return player.characterrespawnpoint.origin; + } + + return undefined; +} + +disable_triggers() +{ + trig = getentarray( "trigger_Keys", "targetname" ); + + for ( i = 0; i < trig.size; i++ ) + trig[i] trigger_off(); +} + +transit_zone_init() +{ + flag_init( "always_on" ); + flag_init( "init_classic_adjacencies" ); + flag_set( "always_on" ); + + if ( is_classic() ) + { + flag_set( "init_classic_adjacencies" ); + add_adjacent_zone( "zone_trans_2", "zone_trans_2b", "init_classic_adjacencies" ); + add_adjacent_zone( "zone_station_ext", "zone_trans_2b", "init_classic_adjacencies", 1 ); + add_adjacent_zone( "zone_town_west2", "zone_town_west", "init_classic_adjacencies" ); + add_adjacent_zone( "zone_town_south", "zone_town_church", "init_classic_adjacencies" ); + add_adjacent_zone( "zone_trans_pow_ext1", "zone_trans_7", "init_classic_adjacencies" ); + add_adjacent_zone( "zone_far", "zone_far_ext", "OnFarm_enter" ); + } + else + { + playable_area = getentarray( "player_volume", "script_noteworthy" ); + + foreach ( area in playable_area ) + { + add_adjacent_zone( "zone_station_ext", "zone_trans_2b", "always_on" ); + + if ( isdefined( area.script_parameters ) && area.script_parameters == "classic_only" ) + area delete(); + } + } + + add_adjacent_zone( "zone_pri2", "zone_station_ext", "OnPriDoorYar", 1 ); + add_adjacent_zone( "zone_pri2", "zone_pri", "OnPriDoorYar3", 1 ); + + if ( getdvar( "ui_zm_mapstartlocation" ) == "transit" ) + { + level thread disconnect_door_zones( "zone_pri2", "zone_station_ext", "OnPriDoorYar" ); + level thread disconnect_door_zones( "zone_pri2", "zone_pri", "OnPriDoorYar3" ); + } + + add_adjacent_zone( "zone_station_ext", "zone_pri", "OnPriDoorYar2" ); + add_adjacent_zone( "zone_roadside_west", "zone_din", "OnGasDoorDin" ); + add_adjacent_zone( "zone_roadside_west", "zone_gas", "always_on" ); + add_adjacent_zone( "zone_roadside_east", "zone_gas", "always_on" ); + add_adjacent_zone( "zone_roadside_east", "zone_gar", "OnGasDoorGar" ); + add_adjacent_zone( "zone_trans_diner", "zone_roadside_west", "always_on", 1 ); + add_adjacent_zone( "zone_trans_diner", "zone_gas", "always_on", 1 ); + add_adjacent_zone( "zone_trans_diner2", "zone_roadside_east", "always_on", 1 ); + add_adjacent_zone( "zone_gas", "zone_din", "OnGasDoorDin" ); + add_adjacent_zone( "zone_gas", "zone_gar", "OnGasDoorGar" ); + add_adjacent_zone( "zone_diner_roof", "zone_din", "OnGasDoorDin", 1 ); + add_adjacent_zone( "zone_amb_cornfield", "zone_cornfield_prototype", "always_on" ); + add_adjacent_zone( "zone_tow", "zone_bar", "always_on", 1 ); + add_adjacent_zone( "zone_bar", "zone_tow", "OnTowDoorBar", 1 ); + add_adjacent_zone( "zone_tow", "zone_ban", "OnTowDoorBan" ); + add_adjacent_zone( "zone_ban", "zone_ban_vault", "OnTowBanVault" ); + add_adjacent_zone( "zone_tow", "zone_town_north", "always_on" ); + add_adjacent_zone( "zone_town_north", "zone_ban", "OnTowDoorBan" ); + add_adjacent_zone( "zone_tow", "zone_town_west", "always_on" ); + add_adjacent_zone( "zone_tow", "zone_town_south", "always_on" ); + add_adjacent_zone( "zone_town_south", "zone_town_barber", "always_on", 1 ); + add_adjacent_zone( "zone_tow", "zone_town_east", "always_on" ); + add_adjacent_zone( "zone_town_east", "zone_bar", "OnTowDoorBar" ); + add_adjacent_zone( "zone_tow", "zone_town_barber", "always_on", 1 ); + add_adjacent_zone( "zone_town_barber", "zone_tow", "OnTowDoorBarber", 1 ); + add_adjacent_zone( "zone_town_barber", "zone_town_west", "OnTowDoorBarber" ); + add_adjacent_zone( "zone_far_ext", "zone_brn", "OnFarm_enter" ); + add_adjacent_zone( "zone_far_ext", "zone_farm_house", "open_farmhouse" ); + add_adjacent_zone( "zone_prr", "zone_pow", "OnPowDoorRR", 1 ); + add_adjacent_zone( "zone_pcr", "zone_prr", "OnPowDoorRR" ); + add_adjacent_zone( "zone_pcr", "zone_pow_warehouse", "OnPowDoorWH" ); + add_adjacent_zone( "zone_pow", "zone_pow_warehouse", "OnPowDoorWH" ); + add_adjacent_zone( "zone_tbu", "zone_tow", "vault_opened", 1 ); +} + +include_powerups() +{ + gametype = getdvar( "ui_gametype" ); + include_powerup( "nuke" ); + include_powerup( "insta_kill" ); + include_powerup( "double_points" ); + include_powerup( "full_ammo" ); + include_powerup( "insta_kill_ug" ); + + if ( gametype != "zgrief" ) + include_powerup( "carpenter" ); + + if ( is_encounter() && gametype != "zgrief" ) + include_powerup( "minigun" ); + + include_powerup( "teller_withdrawl" ); +} + +add_transit_powerups() +{ + maps\mp\zombies\_zm_powerups::add_zombie_powerup( "teller_withdrawl", "zombie_z_money_icon", &"ZOMBIE_TELLER_PICKUP_DEPOSIT", maps\mp\zombies\_zm_powerups::func_should_never_drop, 1, 0, 0 ); +} + +include_equipment_for_level() +{ + level.equipment_turret_needs_power = 1; + level.equipment_etrap_needs_power = 1; + include_equipment( "jetgun_zm" ); + include_equipment( "riotshield_zm" ); + include_equipment( "equip_turbine_zm" ); + include_equipment( "equip_turret_zm" ); + include_equipment( "equip_electrictrap_zm" ); + level.equipment_planted = ::equipment_planted; + level.equipment_safe_to_drop = ::equipment_safe_to_drop; + level.check_force_deploy_origin = ::use_safe_spawn_on_bus; + limit_equipment( "jetgun_zm", 1 ); + level.explode_overheated_jetgun = 1; + level.exploding_jetgun_fx = level._effect["lava_burning"]; +} + +transit_bus_update_retrieve_trigger( player ) +{ + self endon( "death" ); + player endon( "zmb_lost_knife" ); + + if ( isdefined( level.the_bus ) && ( isdefined( player.isonbus ) && player.isonbus ) ) + { + wait 2.0; + trigger = self.retrievabletrigger; + trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 ); + self linkto( level.the_bus ); + trigger linkto( self ); + } + else + { + self waittill( "stationary" ); + + trigger = self.retrievabletrigger; + trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 ); + trigger linkto( self ); + } +} + +claymore_safe_to_plant() +{ + if ( self maps\mp\zm_transit_lava::object_touching_lava() ) + return false; + + if ( self.owner maps\mp\zm_transit_lava::object_touching_lava() ) + return false; + + return true; +} + +claymore_planted( weapon ) +{ + weapon waittill( "stationary" ); + + if ( !isdefined( weapon ) ) + return; + + weaponbus = weapon maps\mp\zm_transit_bus::object_is_on_bus(); + + if ( weaponbus ) + { + if ( isdefined( weapon ) ) + { + weapon setmovingplatformenabled( 1 ); + weapon.equipment_can_move = 1; + weapon.isonbus = 1; + weapon.move_parent = level.the_bus; + + if ( isdefined( weapon.damagearea ) ) + weapon.damagearea setmovingplatformenabled( 1 ); + } + } +} + +fakelinkto( linkee ) +{ + self.backlinked = 1; + + while ( isdefined( self ) && isdefined( linkee ) ) + { + self.origin = linkee.origin; + self.angles = linkee.angles; + wait 0.05; + } +} + +knife_planted( knife, trigger, parent ) +{ + if ( !isdefined( knife ) ) + return; + + weaponbus = knife maps\mp\zm_transit_bus::object_is_on_bus(); + + if ( weaponbus ) + { + trigger linkto( knife ); + trigger setmovingplatformenabled( 1 ); + trigger.isonbus = 1; + knife setmovingplatformenabled( 1 ); + knife.isonbus = 1; + } +} + +grenade_planted( grenade, model ) +{ + if ( !isdefined( grenade ) ) + return; + + weaponbus = grenade maps\mp\zm_transit_bus::object_is_on_bus(); + + if ( weaponbus ) + { + if ( isdefined( grenade ) ) + { + grenade setmovingplatformenabled( 1 ); + grenade.equipment_can_move = 1; + grenade.isonbus = 1; + grenade.move_parent = level.the_bus; + + if ( isdefined( model ) ) + { + model setmovingplatformenabled( 1 ); + model linkto( level.the_bus ); + model.isonbus = 1; + grenade fakelinkto( model ); + } + } + } +} + +grenade_safe_to_throw( player, weapname ) +{ + return 1; +} + +grenade_safe_to_bounce( player, weapname ) +{ + if ( !is_offhand_weapon( weapname ) && !is_grenade_launcher( weapname ) ) + return true; + + if ( self maps\mp\zm_transit_lava::object_touching_lava() ) + return false; + + return true; +} + +equipment_safe_to_drop( weapon ) +{ + if ( !isdefined( weapon.canmove ) ) + weapon.canmove = weapon maps\mp\zm_transit_bus::object_is_on_bus(); + + if ( isdefined( weapon.canmove ) && weapon.canmove ) + return true; + + if ( weapon maps\mp\zm_transit_lava::object_touching_lava() ) + return false; + + return true; +} + +use_safe_spawn_on_bus( weapon, origin, angles ) +{ + if ( isdefined( self.isonbus ) && self.isonbus && level.the_bus.ismoving ) + { + weapon.canmove = 1; + return true; + } + + return false; +} + +equipment_planted( weapon, equipname, groundfrom ) +{ + weaponbus = groundfrom maps\mp\zm_transit_bus::object_is_on_bus(); + + if ( !weaponbus && weapon maps\mp\zm_transit_lava::object_touching_lava() ) + { + self maps\mp\zombies\_zm_equipment::equipment_take( equipname ); + wait 0.05; + self notify( equipname + "_taken" ); + return; + } + + if ( isdefined( self ) && weaponbus ) + { + if ( isdefined( weapon ) ) + { + if ( isdefined( weapon.canmove ) && !weapon.canmove ) + { + weapon.canmove = 1; + reregister_unitrigger_as_dynamic( weapon.stub ); + } + + weapon linkto( level.the_bus ); + weapon setmovingplatformenabled( 1 ); + + if ( isdefined( weapon.stub ) ) + { + weapon.stub.link_parent = level.the_bus; + weapon.stub.origin_parent = weapon; + } + + weapon.equipment_can_move = 1; + weapon.isonbus = 1; + weapon.move_parent = level.the_bus; + } + } +} + +offhand_weapon_overrride() +{ + register_lethal_grenade_for_level( "frag_grenade_zm" ); + level.zombie_lethal_grenade_player_init = "frag_grenade_zm"; + register_lethal_grenade_for_level( "sticky_grenade_zm" ); + register_tactical_grenade_for_level( "cymbal_monkey_zm" ); + register_tactical_grenade_for_level( "emp_grenade_zm" ); + level.zombie_tactical_grenade_player_init = undefined; + level.grenade_safe_to_throw = ::grenade_safe_to_throw; + level.grenade_safe_to_bounce = ::grenade_safe_to_bounce; + level.grenade_planted = ::grenade_planted; + level.knife_planted = ::knife_planted; + register_placeable_mine_for_level( "claymore_zm" ); + level.zombie_placeable_mine_player_init = undefined; + level.claymore_safe_to_plant = ::claymore_safe_to_plant; + level.claymore_planted = ::claymore_planted; + register_melee_weapon_for_level( "knife_zm" ); + register_melee_weapon_for_level( "bowie_knife_zm" ); + register_melee_weapon_for_level( "tazer_knuckles_zm" ); + level.zombie_melee_weapon_player_init = "knife_zm"; + register_equipment_for_level( "jetgun_zm" ); + register_equipment_for_level( "riotshield_zm" ); + register_equipment_for_level( "equip_turbine_zm" ); + register_equipment_for_level( "equip_turret_zm" ); + register_equipment_for_level( "equip_electrictrap_zm" ); + level.zombie_equipment_player_init = undefined; +} + +include_weapons() +{ + gametype = getdvar( "ui_gametype" ); + include_weapon( "knife_zm", 0 ); + include_weapon( "frag_grenade_zm", 0 ); + include_weapon( "claymore_zm", 0 ); + include_weapon( "sticky_grenade_zm", 0 ); + include_weapon( "m1911_zm", 0 ); + include_weapon( "m1911_upgraded_zm", 0 ); + include_weapon( "python_zm" ); + include_weapon( "python_upgraded_zm", 0 ); + include_weapon( "judge_zm" ); + include_weapon( "judge_upgraded_zm", 0 ); + include_weapon( "kard_zm" ); + include_weapon( "kard_upgraded_zm", 0 ); + include_weapon( "fiveseven_zm" ); + include_weapon( "fiveseven_upgraded_zm", 0 ); + include_weapon( "beretta93r_zm", 0 ); + include_weapon( "beretta93r_upgraded_zm", 0 ); + include_weapon( "fivesevendw_zm" ); + include_weapon( "fivesevendw_upgraded_zm", 0 ); + include_weapon( "ak74u_zm", 0 ); + include_weapon( "ak74u_upgraded_zm", 0 ); + include_weapon( "mp5k_zm", 0 ); + include_weapon( "mp5k_upgraded_zm", 0 ); + include_weapon( "qcw05_zm" ); + include_weapon( "qcw05_upgraded_zm", 0 ); + include_weapon( "870mcs_zm", 0 ); + include_weapon( "870mcs_upgraded_zm", 0 ); + include_weapon( "rottweil72_zm", 0 ); + include_weapon( "rottweil72_upgraded_zm", 0 ); + include_weapon( "saiga12_zm" ); + include_weapon( "saiga12_upgraded_zm", 0 ); + include_weapon( "srm1216_zm" ); + include_weapon( "srm1216_upgraded_zm", 0 ); + include_weapon( "m14_zm", 0 ); + include_weapon( "m14_upgraded_zm", 0 ); + include_weapon( "saritch_zm" ); + include_weapon( "saritch_upgraded_zm", 0 ); + include_weapon( "m16_zm", 0 ); + include_weapon( "m16_gl_upgraded_zm", 0 ); + include_weapon( "xm8_zm" ); + include_weapon( "xm8_upgraded_zm", 0 ); + include_weapon( "type95_zm" ); + include_weapon( "type95_upgraded_zm", 0 ); + include_weapon( "tar21_zm" ); + include_weapon( "tar21_upgraded_zm", 0 ); + include_weapon( "galil_zm" ); + include_weapon( "galil_upgraded_zm", 0 ); + include_weapon( "fnfal_zm" ); + include_weapon( "fnfal_upgraded_zm", 0 ); + include_weapon( "dsr50_zm" ); + include_weapon( "dsr50_upgraded_zm", 0 ); + include_weapon( "barretm82_zm" ); + include_weapon( "barretm82_upgraded_zm", 0 ); + include_weapon( "rpd_zm" ); + include_weapon( "rpd_upgraded_zm", 0 ); + include_weapon( "hamr_zm" ); + include_weapon( "hamr_upgraded_zm", 0 ); + include_weapon( "usrpg_zm" ); + include_weapon( "usrpg_upgraded_zm", 0 ); + include_weapon( "m32_zm" ); + include_weapon( "m32_upgraded_zm", 0 ); + include_weapon( "cymbal_monkey_zm" ); + include_weapon( "emp_grenade_zm", 1, undefined, ::less_than_normal ); + + if ( is_classic() ) + include_weapon( "screecher_arms_zm", 0 ); + + if ( gametype != "zgrief" ) + { + include_weapon( "ray_gun_zm" ); + include_weapon( "ray_gun_upgraded_zm", 0 ); + include_weapon( "jetgun_zm", 0, undefined, ::less_than_normal ); + include_weapon( "riotshield_zm", 0 ); + include_weapon( "tazer_knuckles_zm", 0 ); + include_weapon( "knife_ballistic_no_melee_zm", 0 ); + include_weapon( "knife_ballistic_no_melee_upgraded_zm", 0 ); + include_weapon( "knife_ballistic_zm" ); + include_weapon( "knife_ballistic_upgraded_zm", 0 ); + include_weapon( "knife_ballistic_bowie_zm", 0 ); + include_weapon( "knife_ballistic_bowie_upgraded_zm", 0 ); + level._uses_retrievable_ballisitic_knives = 1; + add_limited_weapon( "knife_ballistic_zm", 1 ); + add_limited_weapon( "jetgun_zm", 1 ); + add_limited_weapon( "ray_gun_zm", 4 ); + add_limited_weapon( "ray_gun_upgraded_zm", 4 ); + add_limited_weapon( "knife_ballistic_upgraded_zm", 0 ); + add_limited_weapon( "knife_ballistic_no_melee_zm", 0 ); + add_limited_weapon( "knife_ballistic_no_melee_upgraded_zm", 0 ); + add_limited_weapon( "knife_ballistic_bowie_zm", 0 ); + add_limited_weapon( "knife_ballistic_bowie_upgraded_zm", 0 ); + + if ( isdefined( level.raygun2_included ) && level.raygun2_included ) + { + include_weapon( "raygun_mark2_zm" ); + include_weapon( "raygun_mark2_upgraded_zm", 0 ); + add_weapon_to_content( "raygun_mark2_zm", "dlc3" ); + add_limited_weapon( "raygun_mark2_zm", 1 ); + add_limited_weapon( "raygun_mark2_upgraded_zm", 1 ); + } + } + + add_limited_weapon( "m1911_zm", 0 ); + add_weapon_locker_mapping( "lsat_zm", "hamr_zm" ); + add_weapon_locker_mapping( "lsat_upgraded_zm", "hamr_upgraded_zm" ); + add_weapon_locker_mapping( "svu_zm", "fnfal_zm" ); + add_weapon_locker_mapping( "svu_upgraded_zm", "fnfal_upgraded_zm" ); + add_weapon_locker_mapping( "pdw57_zm", "qcw05_zm" ); + add_weapon_locker_mapping( "pdw57_upgraded_zm", "qcw05_upgraded_zm" ); + add_weapon_locker_mapping( "an94_zm", "galil_zm" ); + add_weapon_locker_mapping( "an94_upgraded_zm", "galil_upgraded_zm" ); + add_weapon_locker_mapping( "rnma_zm", "python_zm" ); + add_weapon_locker_mapping( "rnma_upgraded_zm", "python_upgraded_zm" ); +} + +less_than_normal() +{ + return 0.5; +} + +custom_add_weapons() +{ + add_zombie_weapon( "m1911_zm", "m1911_upgraded_zm", &"ZOMBIE_WEAPON_M1911", 50, "", "", undefined ); + add_zombie_weapon( "python_zm", "python_upgraded_zm", &"ZOMBIE_WEAPON_PYTHON", 50, "wpck_python", "", undefined, 1 ); + add_zombie_weapon( "judge_zm", "judge_upgraded_zm", &"ZOMBIE_WEAPON_JUDGE", 50, "wpck_judge", "", undefined, 1 ); + add_zombie_weapon( "kard_zm", "kard_upgraded_zm", &"ZOMBIE_WEAPON_KARD", 50, "wpck_kap", "", undefined, 1 ); + add_zombie_weapon( "fiveseven_zm", "fiveseven_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVEN", 50, "wpck_57", "", undefined, 1 ); + add_zombie_weapon( "beretta93r_zm", "beretta93r_upgraded_zm", &"ZOMBIE_WEAPON_BERETTA93r", 1000, "", "", undefined ); + add_zombie_weapon( "fivesevendw_zm", "fivesevendw_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVENDW", 50, "wpck_duel57", "", undefined, 1 ); + add_zombie_weapon( "ak74u_zm", "ak74u_upgraded_zm", &"ZOMBIE_WEAPON_AK74U", 1200, "smg", "", undefined ); + add_zombie_weapon( "mp5k_zm", "mp5k_upgraded_zm", &"ZOMBIE_WEAPON_MP5K", 1000, "smg", "", undefined ); + add_zombie_weapon( "qcw05_zm", "qcw05_upgraded_zm", &"ZOMBIE_WEAPON_QCW05", 50, "wpck_chicom", "", undefined, 1 ); + add_zombie_weapon( "870mcs_zm", "870mcs_upgraded_zm", &"ZOMBIE_WEAPON_870MCS", 1500, "shotgun", "", undefined ); + add_zombie_weapon( "rottweil72_zm", "rottweil72_upgraded_zm", &"ZOMBIE_WEAPON_ROTTWEIL72", 500, "shotgun", "", undefined ); + add_zombie_weapon( "saiga12_zm", "saiga12_upgraded_zm", &"ZOMBIE_WEAPON_SAIGA12", 50, "wpck_saiga12", "", undefined, 1 ); + add_zombie_weapon( "srm1216_zm", "srm1216_upgraded_zm", &"ZOMBIE_WEAPON_SRM1216", 50, "wpck_m1216", "", undefined, 1 ); + add_zombie_weapon( "m14_zm", "m14_upgraded_zm", &"ZOMBIE_WEAPON_M14", 500, "rifle", "", undefined ); + add_zombie_weapon( "saritch_zm", "saritch_upgraded_zm", &"ZOMBIE_WEAPON_SARITCH", 50, "wpck_sidr", "", undefined, 1 ); + add_zombie_weapon( "m16_zm", "m16_gl_upgraded_zm", &"ZOMBIE_WEAPON_M16", 1200, "burstrifle", "", undefined ); + add_zombie_weapon( "xm8_zm", "xm8_upgraded_zm", &"ZOMBIE_WEAPON_XM8", 50, "wpck_m8a1", "", undefined, 1 ); + add_zombie_weapon( "type95_zm", "type95_upgraded_zm", &"ZOMBIE_WEAPON_TYPE95", 50, "wpck_type25", "", undefined, 1 ); + add_zombie_weapon( "tar21_zm", "tar21_upgraded_zm", &"ZOMBIE_WEAPON_TAR21", 50, "wpck_x95l", "", undefined, 1 ); + add_zombie_weapon( "galil_zm", "galil_upgraded_zm", &"ZOMBIE_WEAPON_GALIL", 50, "wpck_galil", "", undefined, 1 ); + add_zombie_weapon( "fnfal_zm", "fnfal_upgraded_zm", &"ZOMBIE_WEAPON_FNFAL", 50, "wpck_fal", "", undefined, 1 ); + add_zombie_weapon( "dsr50_zm", "dsr50_upgraded_zm", &"ZOMBIE_WEAPON_DR50", 50, "wpck_dsr50", "", undefined, 1 ); + add_zombie_weapon( "barretm82_zm", "barretm82_upgraded_zm", &"ZOMBIE_WEAPON_BARRETM82", 50, "sniper", "", undefined ); + add_zombie_weapon( "rpd_zm", "rpd_upgraded_zm", &"ZOMBIE_WEAPON_RPD", 50, "wpck_rpd", "", undefined, 1 ); + add_zombie_weapon( "hamr_zm", "hamr_upgraded_zm", &"ZOMBIE_WEAPON_HAMR", 50, "wpck_hamr", "", undefined, 1 ); + add_zombie_weapon( "frag_grenade_zm", undefined, &"ZOMBIE_WEAPON_FRAG_GRENADE", 250, "grenade", "", 250 ); + add_zombie_weapon( "sticky_grenade_zm", undefined, &"ZOMBIE_WEAPON_STICKY_GRENADE", 250, "grenade", "", 250 ); + add_zombie_weapon( "claymore_zm", undefined, &"ZOMBIE_WEAPON_CLAYMORE", 1000, "grenade", "", undefined ); + add_zombie_weapon( "usrpg_zm", "usrpg_upgraded_zm", &"ZOMBIE_WEAPON_USRPG", 50, "wpck_rpg", "", undefined, 1 ); + add_zombie_weapon( "m32_zm", "m32_upgraded_zm", &"ZOMBIE_WEAPON_M32", 50, "wpck_m32", "", undefined, 1 ); + add_zombie_weapon( "cymbal_monkey_zm", undefined, &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 ); + add_zombie_weapon( "emp_grenade_zm", undefined, &"ZOMBIE_WEAPON_EMP_GRENADE", 2000, "wpck_emp", "", undefined, 1 ); + add_zombie_weapon( "ray_gun_zm", "ray_gun_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN", 10000, "wpck_ray", "", undefined, 1 ); + add_zombie_weapon( "knife_ballistic_zm", "knife_ballistic_upgraded_zm", &"ZOMBIE_WEAPON_KNIFE_BALLISTIC", 10, "sickle", "", undefined ); + add_zombie_weapon( "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", &"ZOMBIE_WEAPON_KNIFE_BALLISTIC", 10, "wpck_knife", "", undefined, 1 ); + add_zombie_weapon( "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", &"ZOMBIE_WEAPON_KNIFE_BALLISTIC", 10, "sickle", "", undefined ); + add_zombie_weapon( "riotshield_zm", undefined, &"ZOMBIE_WEAPON_RIOTSHIELD", 2000, "riot", "", undefined ); + add_zombie_weapon( "jetgun_zm", undefined, &"ZOMBIE_WEAPON_JETGUN", 2000, "jet", "", undefined ); + add_zombie_weapon( "tazer_knuckles_zm", undefined, &"ZOMBIE_WEAPON_TAZER_KNUCKLES", 100, "tazerknuckles", "", undefined ); + + if ( isdefined( level.raygun2_included ) && level.raygun2_included ) + add_zombie_weapon( "raygun_mark2_zm", "raygun_mark2_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN_MARK2", 10000, "raygun_mark2", "", undefined ); +} + +include_game_modules() +{ + +} + +initial_round_wait_func() +{ + flag_wait( "initial_blackscreen_passed" ); +} + +zombie_speed_up() +{ + if ( isdefined( self.isonbus ) && self.isonbus ) + return; + + if ( self.zombie_move_speed != "sprint" ) + self set_zombie_run_cycle( "sprint" ); +} + +zombie_init_done() +{ + self.allowpain = 0; + self setphysparams( 15, 0, 48 ); +} + +setup_dvars() +{ +/# + dvars = []; + dvars[dvars.size] = "zombie_bus_debug_path"; + dvars[dvars.size] = "zombie_bus_debug_speed"; + dvars[dvars.size] = "zombie_bus_debug_near"; + dvars[dvars.size] = "zombie_bus_debug_attach"; + dvars[dvars.size] = "zombie_bus_skip_objectives"; + dvars[dvars.size] = "zombie_bus_debug_spawners"; + + for ( i = 0; i < dvars.size; i++ ) + { + if ( getdvar( dvars[i] ) == "" ) + setdvar( dvars[i], "0" ); + } +#/ +} + +setup_zombie_init() +{ + zombies = getentarray( "zombie_spawner", "script_noteworthy" ); + array_thread( zombies, ::add_spawn_function, ::custom_zombie_setup ); +} + +setup_players() +{ + self.isonbus = 0; + self.isonbusroof = 0; + self.isinhub = 1; + self.insafearea = 1; +} + +transit_player_fake_death( vdir ) +{ + level notify( "fake_death" ); + self notify( "fake_death" ); + + if ( isdefined( self.isonbus ) && self.isonbus ) + level thread transit_player_fake_death_zombies(); + + stance = self getstance(); + self.ignoreme = 1; + self enableinvulnerability(); + self takeallweapons(); + + if ( isdefined( self.insta_killed ) && self.insta_killed || self istouching( getent( "depot_lava_pit", "targetname" ) ) || isdefined( self.isonbus ) && self.isonbus && level.the_bus.ismoving ) + { + self maps\mp\zombies\_zm::player_fake_death(); + self allowprone( 1 ); + self allowcrouch( 0 ); + self allowstand( 0 ); + wait 0.25; + self freezecontrols( 1 ); + } + else + { + self freezecontrols( 1 ); + self thread fall_down( vdir, stance ); + wait 1; + } +} + +transit_player_fake_death_zombies() +{ + zombies = getaiarray( level.zombie_team ); + + foreach ( index, zombie in zombies ) + { + if ( !isalive( zombie ) ) + continue; + + if ( isdefined( zombie.ignore_game_over_death ) && zombie.ignore_game_over_death ) + continue; + + if ( isdefined( zombie ) ) + zombie dodamage( zombie.health + 666, zombie.origin ); + + if ( index % 3 == 0 ) + wait_network_frame(); + } +} + +fall_down( vdir, stance ) +{ + self endon( "disconnect" ); + level endon( "game_module_ended" ); + self ghost(); + origin = self.origin; + xyspeed = ( 0, 0, 0 ); + angles = self getplayerangles(); + angles = ( angles[0], angles[1], angles[2] + randomfloatrange( -5, 5 ) ); + + if ( isdefined( vdir ) && length( vdir ) > 0 ) + { + xyspeedmag = 40 + randomint( 12 ) + randomint( 12 ); + xyspeed = xyspeedmag * vectornormalize( ( vdir[0], vdir[1], 0 ) ); + } + + linker = spawn( "script_origin", ( 0, 0, 0 ) ); + linker.origin = origin; + linker.angles = angles; + self._fall_down_anchor = linker; + self playerlinkto( linker ); + self playsoundtoplayer( "zmb_player_death_fall", self ); + falling = stance != "prone"; + + if ( falling ) + { + origin = playerphysicstrace( origin, origin + xyspeed ); + eye = self get_eye(); + floor_height = 10 + origin[2] - eye[2]; + origin += ( 0, 0, floor_height ); + lerptime = 0.5; + linker moveto( origin, lerptime, lerptime ); + linker rotateto( angles, lerptime, lerptime ); + } + + self freezecontrols( 1 ); + + if ( falling ) + linker waittill( "movedone" ); + + if ( isdefined( self.isonbus ) && self.isonbus ) + linker linkto( level.the_bus ); + + self giveweapon( "death_throe_zm" ); + self switchtoweapon( "death_throe_zm" ); + + if ( falling && !( isdefined( self.isonbus ) && self.isonbus ) ) + { + bounce = randomint( 4 ) + 8; + origin = origin + ( 0, 0, bounce ) - xyspeed * 0.1; + lerptime = bounce / 50.0; + linker moveto( origin, lerptime, 0, lerptime ); + + linker waittill( "movedone" ); + + origin = origin + ( 0, 0, bounce * -1 ) + xyspeed * 0.1; + lerptime /= 2.0; + linker moveto( origin, lerptime, lerptime ); + + linker waittill( "movedone" ); + + linker moveto( origin, 5, 0 ); + } + + wait 15; + linker delete(); +} + +transit_player_fake_death_cleanup() +{ + if ( isdefined( self._fall_down_anchor ) ) + { + self._fall_down_anchor delete(); + self._fall_down_anchor = undefined; + } +} + +custom_zombie_setup() +{ + if ( is_survival() && !is_standard() ) + { + self.nearbus = 0; + self.isonbus = 0; + self.isonbusroof = 0; + self.was_walking = 0; + self.candropsafekey = 1; + self.candropbuskey = 1; + self.custom_points_on_turret_damage = 0; + } +} + +bunkerdoorrotate( open, time = 0.2 ) +{ + rotate = self.script_float; + + if ( !open ) + rotate *= -1; + + if ( isdefined( self.script_angles ) ) + { + self notsolid(); + self rotateto( self.script_angles, time, 0, 0 ); + self thread maps\mp\zombies\_zm_blockers::door_solid_thread(); + } +} + +zm_transit_emp_init() +{ + level.custom_emp_detonate = ::zm_transit_emp_detonate; + set_zombie_var( "emp_bus_off_range", 1200 ); + set_zombie_var( "emp_bus_off_time", 45 ); +} + +zm_transit_emp_detonate( grenade_origin ) +{ + test_ent = spawn( "script_origin", grenade_origin ); + + if ( test_ent maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr" ) ) + { + if ( flag( "power_on" ) ) + { + trig = getent( "powerswitch_buildable_trigger_power", "targetname" ); + trig notify( "trigger" ); + } + } + + test_ent delete(); +} + +emp_detonate_boss( grenade_origin ) +{ + +} + +register_screecher_lights() +{ + level.safety_lights = getstructarray( "screecher_escape", "targetname" ); + + for ( i = 0; i < level.safety_lights.size; i++ ) + { + safety = level.safety_lights[i]; + name = safety.script_noteworthy; + + if ( !isdefined( name ) ) + { +/# + println( "ERROR Unnamed screecher light detected" ); +#/ + name = "light_" + i; + } + + clientfieldname = "screecher_light_" + name; + level.safety_lights[i].clientfieldname = clientfieldname; + registerclientfield( "world", clientfieldname, 1, 1, "int" ); + } +} + +include_powered_items() +{ + if ( is_classic() ) + { + include_powered_item( ::bus_power_on, ::bus_power_off, ::bus_range, maps\mp\zombies\_zm_power::cost_negligible, 1, 1, undefined ); + + if ( isdefined( level.safety_lights ) ) + { + for ( i = 0; i < level.safety_lights.size; i++ ) + include_powered_item( ::safety_light_power_on, ::safety_light_power_off, ::safety_light_range, maps\mp\zombies\_zm_power::cost_low_if_local, 0, 0, level.safety_lights[i] ); + } + } +} + +bus_range( delta, origin, radius ) +{ + if ( isdefined( level.the_bus ) ) + { + if ( distance2dsquared( origin, level.the_bus.origin ) < radius * radius ) + return true; + + forward = anglestoforward( level.the_bus.angles ); + forward = vectorscale( forward, 275 ); + bus_front = level.the_bus.origin + forward; + + if ( distance2dsquared( origin, bus_front ) < radius * radius ) + return true; + } + + return false; +} + +bus_power_on( origin, radius ) +{ +/# + println( "^1ZM POWER: bus on\\n" ); +#/ + level.the_bus thread maps\mp\zm_transit_bus::bus_power_on(); +} + +bus_power_off( origin, radius ) +{ +/# + println( "^1ZM POWER: bus off\\n" ); +#/ + level.the_bus thread maps\mp\zm_transit_bus::bus_power_off(); +} + +safety_light_range( delta, origin, radius ) +{ + if ( distancesquared( self.target.origin, origin ) < radius * radius ) + return true; + + return false; +} + +safety_light_power_on( origin, radius ) +{ +/# + println( "^1ZM POWER: bus on\\n" ); +#/ + self.target.power_on = 1; + self.target notify( "power_on" ); + + if ( isdefined( self.target.clientfieldname ) ) + level setclientfield( self.target.clientfieldname, 1 ); + + level notify( "safety_light_power_on", self ); +} + +safety_light_power_off( origin, radius ) +{ +/# + println( "^1ZM POWER: bus off\\n" ); +#/ + self.target.power_on = 0; + self.target notify( "power_off" ); + + if ( isdefined( self.target.clientfieldname ) ) + level setclientfield( self.target.clientfieldname, 0 ); + + level notify( "safety_light_power_off", self ); +} + +zombie_transit_devgui( cmd ) +{ +/# + cmd_strings = strtok( cmd, " " ); + + switch ( cmd_strings[0] ) + { + case "pickup": + if ( !level.the_bus.upgrades[cmd_strings[1]].pickedup ) + level.the_bus.upgrades[cmd_strings[1]].trigger notify( "trigger", get_players()[0] ); + + break; + case "spawn": + player = get_players()[0]; + spawnername = undefined; + + if ( cmd_strings[1] == "regular" ) + spawnername = "zombie_spawner"; + else if ( cmd_strings[1] == "screecher" ) + { + + } + else + return; + + direction = player getplayerangles(); + direction_vec = anglestoforward( direction ); + eye = player geteye(); + scale = 8000; + direction_vec = ( direction_vec[0] * scale, direction_vec[1] * scale, direction_vec[2] * scale ); + trace = bullettrace( eye, eye + direction_vec, 0, undefined ); + guy = undefined; + + if ( cmd_strings[1] == "screecher" ) + { + spawner = level.screecher_spawners[0]; + guy = maps\mp\zombies\_zm_utility::spawn_zombie( spawner ); + } + else if ( cmd_strings[1] == "regular" ) + { + spawners = getentarray( spawnername, "script_noteworthy" ); + spawner = spawners[0]; + guy = maps\mp\zombies\_zm_utility::spawn_zombie( spawner ); + guy.favoriteenemy = player; + guy.script_string = "zombie_chaser"; + guy thread maps\mp\zombies\_zm_spawner::zombie_spawn_init(); + guy custom_zombie_setup(); + } + + guy forceteleport( trace["position"], player.angles + vectorscale( ( 0, 1, 0 ), 180.0 ) ); + break; + case "test_attach": + attach_name = getdvar( _hash_61FFB6CE ); + opening = level.the_bus maps\mp\zm_transit_openings::busgetopeningfortag( attach_name ); + jump = level.the_bus maps\mp\zm_transit_openings::_busgetjumptagfrombindtag( attach_name ); + + if ( isdefined( opening ) ) + { + if ( isdefined( opening.zombie ) ) + iprintln( "Zombie already attached to opening: " + attach_name ); + else + { + origin = level.the_bus gettagorigin( attach_name ); + + if ( isdefined( jump ) ) + { + jump_origin = level.the_bus gettagorigin( jump ); + + if ( isdefined( opening.enabled ) && opening.enabled ) + debugstar( jump_origin, 1000, ( 0, 1, 0 ) ); + else + debugstar( jump_origin, 1000, ( 1, 0, 0 ) ); + } + + zombie_spawners = getentarray( "zombie_spawner", "script_noteworthy" ); + zombie = spawn_zombie( zombie_spawners[0] ); + zombie.cannotattachtobus = 1; + zombie thread maps\mp\zm_transit_openings::zombieattachtobus( level.the_bus, opening, 0 ); + } + } + else + iprintln( "Couldn't find opening for tag: " + attach_name ); + + break; + case "attach_tag": + setdvar( "zombie_bus_debug_attach", cmd_strings[1] ); + break; + case "hatch_available": + if ( isdefined( level.the_bus ) ) + level.the_bus notify( "hatch_mantle_allowed" ); + + break; + case "ambush_round": + if ( isdefined( level.ambushpercentageperstop ) ) + { + if ( cmd_strings[1] == "always" ) + level.ambushpercentageperstop = 100; + else if ( cmd_strings[1] == "never" ) + level.ambushpercentageperstop = 0; + } + + break; + case "gas": + if ( cmd_strings[1] == "add" ) + level.the_bus maps\mp\zm_transit_bus::busgasadd( getdvarint( _hash_69C4D2C1 ) ); + else if ( cmd_strings[1] == "remove" ) + level.the_bus maps\mp\zm_transit_bus::busgasremove( getdvarint( _hash_69C4D2C1 ) ); + + break; + case "force_bus_to_leave": + level.the_bus notify( "depart_early" ); + + if ( isdefined( level.bus_leave_hud ) ) + level.bus_leave_hud.alpha = 0; + + break; + case "teleport_to_bus": + get_players()[0] setorigin( level.the_bus localtoworldcoords( vectorscale( ( 0, 0, 1 ), 25.0 ) ) ); + break; + case "teleport_bus": + node = getvehiclenode( cmd_strings[1], "script_noteworthy" ); + + if ( isdefined( node ) ) + { + level.the_bus thread buspathblockerdisable(); + wait 0.1; + level.the_bus attachpath( node ); + level.the_bus maps\mp\zm_transit_bus::busstopmoving( 1 ); + wait 0.1; + level.the_bus thread buspathblockerenable(); + } + + break; + case "avogadro_round_skip": + if ( isdefined( level.next_avogadro_round ) ) + maps\mp\zombies\_zm_devgui::zombie_devgui_goto_round( level.next_avogadro_round ); + + break; + case "debug_print_emp_points": + if ( !( isdefined( level.debug_print_emp_points ) && level.debug_print_emp_points ) ) + { + level.debug_print_emp_points = 1; + vehnodes = getvehiclenodearray( "emp_stop_point", "script_noteworthy" ); + + foreach ( node in vehnodes ) + maps\mp\zombies\_zm_devgui::showonespawnpoint( node, ( 0, 0, 1 ), "kill_debug_print_emp_points", undefined, "EMP STOP" ); + } + + break; + case "debug_stop_print_emp_points": + if ( isdefined( level.debug_print_emp_points ) && level.debug_print_emp_points ) + { + level notify( "kill_debug_print_emp_points" ); + level.debug_print_emp_points = undefined; + } + + break; + default: + break; + } +#/ +} + +is_valid_powerup_location( powerup ) +{ + valid = 0; + + if ( !isdefined( level.powerup_areas ) ) + level.powerup_areas = getentarray( "powerup_area", "script_noteworthy" ); + + if ( !isdefined( level.playable_areas ) ) + level.playable_areas = getentarray( "player_volume", "script_noteworthy" ); + + for ( i = 0; i < level.powerup_areas.size && !valid; i++ ) + { + area = level.powerup_areas[i]; + valid = powerup istouching( area ); + } + + for ( i = 0; i < level.playable_areas.size && !valid; i++ ) + { + area = level.playable_areas[i]; + valid = powerup istouching( area ); + } + + return valid; +} + +zombie_transit_player_too_many_weapons_monitor_callback( weapon ) +{ + if ( self maps\mp\zm_transit_cling::playerisclingingtobus() ) + return false; + + return true; +} + +zombie_transit_audio_alias_override() +{ + maps\mp\zm_transit_automaton::initaudioaliases(); + init_transit_player_dialogue(); + add_transit_response_chance(); +} + +falling_death_init() +{ + trig = getent( "transit_falling_death", "targetname" ); + + if ( isdefined( trig ) ) + { + while ( true ) + { + trig waittill( "trigger", who ); + + if ( !( isdefined( who.insta_killed ) && who.insta_killed ) ) + who thread insta_kill_player(); + } + } +} + +insta_kill_player() +{ + self endon( "disconnect" ); + + if ( isdefined( self.insta_killed ) && self.insta_killed ) + return; + + self maps\mp\zombies\_zm_buildables::player_return_piece_to_original_spawn(); + + if ( is_player_killable( self ) ) + { + self.insta_killed = 1; + in_last_stand = 0; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + in_last_stand = 1; + + if ( getnumconnectedplayers() == 1 ) + { + if ( isdefined( self.lives ) && self.lives > 0 ) + { + self.waiting_to_revive = 1; + points = getstruct( "zone_pcr", "script_noteworthy" ); + spawn_points = getstructarray( points.target, "targetname" ); + point = spawn_points[0]; + self dodamage( self.health + 1000, ( 0, 0, 0 ) ); + maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, 1, level.zm_transit_burn_max_duration ); + wait 0.5; + self freezecontrols( 1 ); + wait 0.25; + self setorigin( point.origin + vectorscale( ( 0, 0, 1 ), 20.0 ) ); + self.angles = point.angles; + + if ( in_last_stand ) + { + flag_set( "instant_revive" ); + wait_network_frame(); + flag_clear( "instant_revive" ); + } + else + { + self thread maps\mp\zombies\_zm_laststand::auto_revive( self ); + self.waiting_to_revive = 0; + self.solo_respawn = 0; + self.lives = 0; + } + + self freezecontrols( 0 ); + self.insta_killed = 0; + } + else + { + self dodamage( self.health + 1000, ( 0, 0, 0 ) ); + maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, 2, level.zm_transit_burn_max_duration ); + } + } + else + { + self dodamage( self.health + 1000, ( 0, 0, 0 ) ); + maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, 1, level.zm_transit_burn_max_duration ); + wait_network_frame(); + self.bleedout_time = 0; + } + + self notify( "burned" ); + self.insta_killed = 0; + } +} + +is_player_killable( player, checkignoremeflag ) +{ + if ( !isdefined( player ) ) + return false; + + if ( !isalive( player ) ) + return false; + + if ( !isplayer( player ) ) + return false; + + if ( player.sessionstate == "spectator" ) + return false; + + if ( player.sessionstate == "intermission" ) + return false; + + if ( isdefined( checkignoremeflag ) && player.ignoreme ) + return false; + + return true; +} + +delete_bus_pieces() +{ + wait 3; + + if ( isdefined( level._bus_pieces_deleted ) && level._bus_pieces_deleted ) + return; + + level._bus_pieces_deleted = 1; + hatch_mantle = getent( "hatch_mantle", "targetname" ); + + if ( isdefined( hatch_mantle ) ) + hatch_mantle delete(); + + hatch_clip = getentarray( "hatch_clip", "targetname" ); + array_thread( hatch_clip, ::self_delete ); + plow_clip = getentarray( "plow_clip", "targetname" ); + array_thread( plow_clip, ::self_delete ); + light = getent( "busLight2", "targetname" ); + + if ( isdefined( light ) ) + light delete(); + + light = getent( "busLight1", "targetname" ); + + if ( isdefined( light ) ) + light delete(); + + blocker = getent( "bus_path_blocker", "targetname" ); + + if ( isdefined( blocker ) ) + blocker delete(); + + lights = getentarray( "bus_break_lights", "targetname" ); + array_thread( lights, ::self_delete ); + orgs = getentarray( "bus_bounds_origin", "targetname" ); + array_thread( orgs, ::self_delete ); + door_blocker = getentarray( "bus_door_blocker", "targetname" ); + array_thread( door_blocker, ::self_delete ); + driver = getent( "bus_driver_head", "targetname" ); + + if ( isdefined( driver ) ) + driver delete(); + + plow = getent( "trigger_plow", "targetname" ); + + if ( isdefined( plow ) ) + plow delete(); + + plow_attach_point = getent( "plow_attach_point", "targetname" ); + + if ( isdefined( plow_attach_point ) ) + plow_attach_point delete(); + + bus = getent( "the_bus", "targetname" ); + + if ( isdefined( bus ) ) + bus delete(); + + barriers = getzbarrierarray(); + + foreach ( barrier in barriers ) + { + if ( isdefined( barrier.classname ) && issubstr( barrier.classname, "zb_bus" ) ) + { + for ( x = 0; x < barrier getnumzbarrierpieces(); x++ ) + barrier setzbarrierpiecestate( x, "opening" ); + + barrier hide(); + } + } +} + +init_transit_stats() +{ + self maps\mp\zm_transit_sq::init_player_sidequest_stats(); + self maps\mp\zm_transit_achievement::init_player_achievement_stats(); +} + +kill_zombies_depot() +{ + if ( level.zones["zone_pri"].is_occupied == 1 || flag( "OnPriDoorYar2" ) ) + return; + + if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_pri" ) ) + { + self.marked_for_recycle = 1; + self dodamage( self.health + 666, self.origin, self ); + return; + } + + if ( isdefined( self.zone_name ) && ( self.zone_name == "zone_pri" || self.zone_name == "zone_pri2" ) && ( self.ignoreall || !self in_playable_zone() ) ) + { + self.marked_for_recycle = 1; + self dodamage( self.health + 666, self.origin, self ); + return; + } +} + +in_playable_zone() +{ + if ( !isdefined( level.playable_areas ) ) + level.playable_areas = getentarray( "player_volume", "script_noteworthy" ); + + foreach ( zone in level.playable_areas ) + { + if ( self istouching( zone ) ) + return true; + } + + return false; +} + +lava_damage_depot() +{ + trigs = getentarray( "lava_damage", "targetname" ); + volume = getent( "depot_lava_volume", "targetname" ); + exploder( 2 ); + + foreach ( trigger in trigs ) + { + if ( isdefined( trigger.script_string ) && trigger.script_string == "depot_lava" ) + trig = trigger; + } + + if ( isdefined( trig ) ) + trig.script_float = 0.05; + + while ( level.round_number < 3 ) + level waittill( "start_of_round" ); + + while ( !volume depot_lava_seen() ) + wait 2; + + if ( isdefined( trig ) ) + { + trig.script_float = 0.4; + earthquake( 0.5, 1.5, trig.origin, 1000 ); + level clientnotify( "earth_crack" ); + crust = getent( "depot_black_lava", "targetname" ); + crust delete(); + } + + stop_exploder( 2 ); + exploder( 3 ); +} + +depot_lava_seen() +{ + check_volume = getent( "depot_lava_check", "targetname" ); + players = get_players(); + + foreach ( player in players ) + { + if ( player istouching( check_volume ) ) + { + seen = self maps\mp\zm_transit_distance_tracking::player_can_see_me( player ); + + if ( seen ) + return true; + } + } + + return false; +} + +assign_lowest_unused_character_index() +{ + charindexarray = []; + charindexarray[0] = 0; + charindexarray[1] = 1; + charindexarray[2] = 2; + charindexarray[3] = 3; + players = get_players(); + + if ( players.size == 1 ) + { + charindexarray = array_randomize( charindexarray ); + return charindexarray[0]; + } + else if ( players.size == 2 ) + { + foreach ( player in players ) + { + if ( isdefined( player.characterindex ) ) + { + if ( player.characterindex == 2 || player.characterindex == 0 ) + { + if ( randomint( 100 ) > 50 ) + return 1; + + return 3; + } + else if ( player.characterindex == 3 || player.characterindex == 1 ) + { + if ( randomint( 100 ) > 50 ) + return 0; + + return 2; + } + } + } + } + else + { + foreach ( player in players ) + { + if ( isdefined( player.characterindex ) ) + arrayremovevalue( charindexarray, player.characterindex, 0 ); + } + + if ( charindexarray.size > 0 ) + return charindexarray[0]; + } + + return 0; +} + +dog_spawn_transit_logic( dog_array, favorite_enemy ) +{ + dog_locs = array_randomize( level.enemy_dog_locations ); + + for ( i = 0; i < dog_locs.size; i++ ) + { + if ( isdefined( level.old_dog_spawn ) && level.old_dog_spawn == dog_locs[i] ) + continue; + + canuse = 1; + players = get_players(); + + foreach ( player in players ) + { + if ( !canuse ) + continue; + + dist_squared = distancesquared( dog_locs[i].origin, player.origin ); + + if ( dist_squared < 160000 || dist_squared > 1322500 ) + canuse = 0; + } + + if ( canuse ) + { + level.old_dog_spawn = dog_locs[i]; + return dog_locs[i]; + } + } + + return dog_locs[0]; +} + +bank_teller_init() +{ + playfx( level._effect["fx_zmb_tranzit_key_glint"], ( 760, 461, -30 ), vectorscale( ( 0, -1, 0 ), 90.0 ) ); + playfx( level._effect["fx_zmb_tranzit_key_glint"], ( 760, 452, -30 ), vectorscale( ( 0, -1, 0 ), 90.0 ) ); +} + +player_name_fade_control() +{ + while ( true ) + { + players = get_players(); + + foreach ( player in players ) + { + if ( !isdefined( player.infog ) ) + { + player.infog = 0; + player.old_infog = 0; + player.infogtimer = 0; + } + + player.old_infog = player.infog; + infog = is_player_in_fog( player ); + + if ( infog ) + player.infogtimer++; + + player.infog = infog; + + if ( player.infog != player.old_infog && !( isdefined( player.isonbus ) && player.isonbus ) ) + { + if ( infog ) + { + if ( player.infogtimer < 5 ) + continue; + + line = "in_fog"; + } + else + { + if ( player.infogtimer < 15 ) + continue; + + line = "out_of_fog"; + player.infogtimer = 0; + } + + if ( maps\mp\zombies\_zm_audio::get_response_chance( line ) > randomint( 100 ) && !isdefined( player.screecher ) ) + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", line ); + } + + if ( isdefined( level.set_player_in_fog ) ) + player thread [[ level.set_player_in_fog ]]( infog ); + } + + wait 1; + } +} + +is_player_in_fog( player ) +{ + if ( player_entered_safety_zone( player ) ) + return false; + + if ( player_entered_safety_light( player ) ) + return false; + + curr_zone = player get_current_zone( 1 ); + + if ( isdefined( curr_zone ) && !( isdefined( curr_zone.screecher_zone ) && curr_zone.screecher_zone ) ) + return false; + + return true; +} + +add_transit_response_chance() +{ + add_vox_response_chance( "in_fog", 100 ); + add_vox_response_chance( "out_of_fog", 65 ); + add_vox_response_chance( "killed_screecher", 20 ); + add_vox_response_chance( "screecher_attack", 5 ); + add_vox_response_chance( "screecher_flee", 50 ); + add_vox_response_chance( "screecher_cut", 15 ); + add_vox_response_chance( "screecher_flee_green", 75 ); + add_vox_response_chance( "crawl_spawn", 10 ); + add_vox_response_chance( "screecher_jumpoff", 50 ); + add_vox_response_chance( "reboard", 5 ); + add_vox_response_chance( "jetgun_kill", 10 ); + add_vox_response_chance( "achievement", 100 ); + add_vox_response_chance( "power_on", 100 ); + add_vox_response_chance( "power_off", 100 ); + add_vox_response_chance( "power_core", 100 ); + add_vox_response_chance( "upgrade", 100 ); + add_vox_response_chance( "build_pck_bshield", 45 ); + add_vox_response_chance( "build_pck_bturret", 45 ); + add_vox_response_chance( "build_pck_btrap", 45 ); + add_vox_response_chance( "build_pck_bturbine", 45 ); + add_vox_response_chance( "build_pck_bjetgun", 45 ); + add_vox_response_chance( "build_pck_wshield", 45 ); + add_vox_response_chance( "build_pck_wturret", 45 ); + add_vox_response_chance( "build_pck_wtrap", 45 ); + add_vox_response_chance( "build_pck_wturbine", 45 ); + add_vox_response_chance( "build_pck_wjetgun", 45 ); + add_vox_response_chance( "build_plc_shield", 45 ); + add_vox_response_chance( "build_plc_turret", 45 ); + add_vox_response_chance( "build_plc_trap", 45 ); + add_vox_response_chance( "build_plc_turbine", 45 ); + add_vox_response_chance( "build_pickup", 45 ); + add_vox_response_chance( "build_swap", 45 ); + add_vox_response_chance( "build_add", 45 ); + add_vox_response_chance( "build_final", 45 ); +} + +init_transit_player_dialogue() +{ + level.vox zmbvoxadd( "player", "general", "in_fog", "map_in_fog", undefined ); + level.vox zmbvoxadd( "player", "general", "out_of_fog", "map_out_fog", undefined ); + level.vox zmbvoxadd( "player", "perk", "specialty_scavenger", "perk_tombstone", undefined ); + level.vox zmbvoxadd( "player", "general", "revive_down", "bus_down", undefined ); + level.vox zmbvoxadd( "player", "general", "revive_up", "heal_revived", undefined ); + level.vox zmbvoxadd( "player", "general", "screecher_attack", "screecher_attack", "resp_screecher_attack" ); + level.vox zmbvoxadd( "player", "general", "hr_resp_screecher_attack", "hr_resp_screecher_attack", undefined ); + level.vox zmbvoxadd( "player", "general", "riv_resp_screecher_attack", "riv_resp_screecher_attack", undefined ); + level.vox zmbvoxadd( "player", "general", "screecher_flee", "screecher_flee", undefined ); + level.vox zmbvoxadd( "player", "general", "screecher_jumpoff", "screecher_off", undefined ); + level.vox zmbvoxadd( "player", "general", "screecher_flee_green", "screecher_teleport", undefined ); + level.vox zmbvoxadd( "player", "kill", "screecher", "kill_screecher", undefined ); + level.vox zmbvoxadd( "player", "general", "screecher_cut", "screecher_cut", undefined ); + level.vox zmbvoxadd( "player", "general", "achievement", "earn_acheivement", undefined ); + level.vox zmbvoxadd( "player", "general", "no_money_weapon", "nomoney_weapon", undefined ); + level.vox zmbvoxadd( "player", "general", "no_money_box", "nomoney_box", undefined ); + level.vox zmbvoxadd( "player", "general", "exert_sigh", "exert_sigh", undefined ); + level.vox zmbvoxadd( "player", "general", "exert_laugh", "exert_laugh", undefined ); + level.vox zmbvoxadd( "player", "general", "pain_high", "pain_high", undefined ); + level.vox zmbvoxadd( "player", "general", "build_pck_bshield", "build_pck_bshield", undefined ); + level.vox zmbvoxadd( "player", "general", "build_pck_bturret", "build_pck_bturret", undefined ); + level.vox zmbvoxadd( "player", "general", "build_pck_btrap", "build_pck_btrap", undefined ); + level.vox zmbvoxadd( "player", "general", "build_pck_bturbine", "build_pck_bturbine", undefined ); + level.vox zmbvoxadd( "player", "general", "build_pck_bjetgun", "build_pck_bjetgun", undefined ); + level.vox zmbvoxadd( "player", "general", "build_pck_wshield", "build_pck_wshield", undefined ); + level.vox zmbvoxadd( "player", "general", "build_pck_wturret", "build_pck_wturret", undefined ); + level.vox zmbvoxadd( "player", "general", "build_pck_wtrap", "build_pck_wtrap", undefined ); + level.vox zmbvoxadd( "player", "general", "build_pck_wturbine", "build_pck_wturbine", undefined ); + level.vox zmbvoxadd( "player", "general", "build_pck_wjetgun", "build_pck_wjetgun", undefined ); + level.vox zmbvoxadd( "player", "general", "build_plc_shield", "build_plc_shield", undefined ); + level.vox zmbvoxadd( "player", "general", "build_plc_turret", "build_plc_turret", undefined ); + level.vox zmbvoxadd( "player", "general", "build_plc_trap", "build_plc_trap", undefined ); + level.vox zmbvoxadd( "player", "general", "build_plc_turbine", "build_plc_turbine", undefined ); + level.vox zmbvoxadd( "player", "general", "build_pickup", "build_pickup", undefined ); + level.vox zmbvoxadd( "player", "general", "build_swap", "build_swap", undefined ); + level.vox zmbvoxadd( "player", "general", "build_add", "build_add", undefined ); + level.vox zmbvoxadd( "player", "general", "build_final", "build_final", undefined ); + level.vox zmbvoxadd( "player", "general", "intro", "power_off", undefined ); + level.vox zmbvoxadd( "player", "power", "power_on", "power_on", undefined ); + level.vox zmbvoxadd( "player", "power", "power_core", "power_core", undefined ); + level.vox zmbvoxadd( "player", "general", "reboard", "rebuild_boards", undefined ); + level.vox zmbvoxadd( "player", "general", "upgrade", "find_secret", undefined ); + level.vox zmbvoxadd( "player", "general", "map_out_bus", "map_out_bus", undefined ); + level.vox zmbvoxadd( "player", "general", "map_out_tunnel", "map_out_tunnel", undefined ); + level.vox zmbvoxadd( "player", "general", "map_out_diner", "map_out_diner", undefined ); + level.vox zmbvoxadd( "player", "general", "map_out_1forest", "map_out_1forest", undefined ); + level.vox zmbvoxadd( "player", "general", "map_out_farm", "map_out_farm", undefined ); + level.vox zmbvoxadd( "player", "general", "map_out_corn", "map_out_corn", undefined ); + level.vox zmbvoxadd( "player", "general", "map_out_power", "map_out_power", undefined ); + level.vox zmbvoxadd( "player", "general", "map_out_2forest", "map_out_2forest", undefined ); + level.vox zmbvoxadd( "player", "general", "map_out_town", "map_out_town", undefined ); + level.vox zmbvoxadd( "player", "general", "map_out_bridge", "map_out_bridge", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_bus1", "map_in_bus1", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_tunnel1", "map_in_tunnel1", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_diner1", "map_in_diner1", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_1forest1", "map_in_1forest1", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_farm1", "map_in_farm1", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_corn1", "map_in_corn1", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_power1", "map_in_power1", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_2forest1", "map_in_2forest1", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_town1", "map_in_town1", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_bridge1", "map_in_bridge1", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_bus2", "map_in_bus2", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_tunnel2", "map_in_tunnel2", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_diner2", "map_in_diner2", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_1forest2", "map_in_1forest2", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_farm2", "map_in_farm2", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_corn2", "map_in_corn2", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_power2", "map_in_power2", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_2forest2", "map_in_2forest2", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_town2", "map_in_town2", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_bridge2", "map_in_bridge2", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_bus3", "map_in_bus3", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_tunnel3", "map_in_tunnel3", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_diner3", "map_in_diner3", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_1forest3", "map_in_1forest3", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_farm3", "map_in_farm3", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_corn3", "map_in_corn3", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_power3", "map_in_power3", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_2forest3", "map_in_2forest3", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_town3", "map_in_town3", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_bridge3", "map_in_bridge3", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_bus4", "map_in_bus4", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_tunnel4", "map_in_tunnel4", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_diner4", "map_in_diner4", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_1forest4", "map_in_1forest4", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_farm4", "map_in_farm4", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_corn4", "map_in_corn4", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_power4", "map_in_power4", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_2forest4", "map_in_2forest4", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_town4", "map_in_town4", undefined ); + level.vox zmbvoxadd( "player", "general", "map_in_bridge4", "map_in_bridge4", undefined ); + level.vox zmbvoxadd( "player", "general", "bus_zom_roof", "bus_zom_roof", undefined ); + level.vox zmbvoxadd( "player", "general", "bus_zom_climb", "bus_zom_climb", undefined ); + level.vox zmbvoxadd( "player", "general", "bus_zom_atk", "bus_zom_atk", undefined ); + level.vox zmbvoxadd( "player", "general", "bus_zom_ent", "bus_zom_ent", undefined ); + level.vox zmbvoxadd( "player", "general", "bus_zom_none", "bus_zom_none", undefined ); + level.vox zmbvoxadd( "player", "general", "bus_zom_chase", "bus_zom_chase", undefined ); + level.vox zmbvoxadd( "player", "general", "bus_stop", "bus_stop", undefined ); + level.vox zmbvoxadd( "player", "general", "bus_ride", "bus_ride", undefined ); + level.vox zmbvoxadd( "player", "general", "avogadro_reveal", "avogadro_reveal", undefined ); + level.vox zmbvoxadd( "player", "general", "avogadro_above", "avogadro_above", undefined ); + level.vox zmbvoxadd( "player", "general", "avogadro_storm", "avogadro_storm", undefined ); + level.vox zmbvoxadd( "player", "general", "avogadro_arrive", "avogadro_arrive", undefined ); + level.vox zmbvoxadd( "player", "general", "avogadro_attack", "avogadro_attack", "resp_avogadro_attack" ); + level.vox zmbvoxadd( "player", "general", "hr_resp_avogadro_attack", "hr_resp_avogadro_attack", undefined ); + level.vox zmbvoxadd( "player", "general", "riv_resp_avogadro_attack", "riv_resp_avogadro_attack", undefined ); + level.vox zmbvoxadd( "player", "general", "avogadro_wound", "avogadro_wound", undefined ); + level.vox zmbvoxadd( "player", "general", "avogadro_flee", "avogadro_flee", undefined ); + level.vox zmbvoxadd( "player", "general", "avogadro_onbus", "avogadro_onbus", undefined ); + level.vox zmbvoxadd( "player", "general", "avogadro_atkbus", "avogadro_atkbus", undefined ); + level.vox zmbvoxadd( "player", "general", "avogadro_stopbus", "avogadro_stopbus", undefined ); + level.vox zmbvoxadd( "player", "general", "exert_death", "exert_death_high", undefined ); + level.vox zmbvoxadd( "player", "kill", "jetgun_kill", "kill_jet", undefined ); + level.vox zmbvoxadd( "player", "general", "pap_wait", "pap_wait", undefined ); + level.vox zmbvoxadd( "player", "general", "pap_wait2", "pap_wait2", undefined ); + level.vox zmbvoxadd( "player", "general", "pap_arm", "pap_arm", undefined ); + level.vox zmbvoxadd( "player", "general", "pap_arm2", "pap_arm2", undefined ); + level.vox zmbvoxadd( "player", "general", "pap_hint", "pap_hint", undefined ); + maps\mp\zombies\_zm_audio_announcer::createvox( "first_drop", "first_drop" ); + level.station_pa_vox = []; + + for ( i = 0; i < 10; i++ ) + level.station_pa_vox[i] = "vox_stat_pa_generic_" + i; + + level.survivor_vox = []; + + for ( i = 0; i < 5; i++ ) + level.survivor_vox[i] = "vox_radi_distress_message_" + i; +} + +transit_audio_custom_response_line( player, index, category, type ) +{ + russman = 0; + samuel = 1; + misty = 2; + marlton = 3; + + switch ( player.characterindex ) + { + case 0: + level maps\mp\zombies\_zm_audio::setup_hero_rival( player, samuel, marlton, category, type ); + break; + case 1: + level maps\mp\zombies\_zm_audio::setup_hero_rival( player, russman, misty, category, type ); + break; + case 2: + level maps\mp\zombies\_zm_audio::setup_hero_rival( player, marlton, samuel, category, type ); + break; + case 3: + level maps\mp\zombies\_zm_audio::setup_hero_rival( player, misty, russman, category, type ); + break; + } +} + +powerup_intro_vox( powerup ) +{ + say_intro = 0; + players = get_players(); + + foreach ( player in players ) + { + if ( player maps\mp\zombies\_zm_stats::get_global_stat( "POWERUP_INTRO_PLAYED" ) == 1 ) + continue; + else + { + player maps\mp\zombies\_zm_stats::set_global_stat( "powerup_intro_played", 1 ); + say_intro = 1; + } + } + + level.powerup_intro_vox = undefined; + powerup_name = powerup.powerup_name; + powerup thread maps\mp\zombies\_zm_powerups::powerup_delete(); + powerup notify( "powerup_grabbed" ); + + if ( !say_intro ) + { + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( powerup_name ); + level.powerup_vo_available = undefined; + return; + } + + flag_clear( "zombie_drop_powerups" ); + level.powerup_intro = 1; + org = spawn( "script_origin", get_players()[0].origin ); + org playsoundwithnotify( "vox_zmba_first_drop_0", "first_powerup_intro_done" ); + + org waittill( "first_powerup_intro_done" ); + + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( powerup_name ); + org delete(); + flag_set( "zombie_drop_powerups" ); + level.powerup_intro = 0; + level.powerup_vo_available = undefined; +} + +powerup_vo_available() +{ + wait 0.1; + + if ( isdefined( level.powerup_intro ) && level.powerup_intro ) + return false; + + return true; +} + +buildable_build_custom_func( stub ) +{ + buildable = stub.buildablezone; + counter = 0; + + for ( i = 0; i < buildable.pieces.size; i++ ) + { + if ( isdefined( buildable.pieces[i].built ) && buildable.pieces[i].built ) + counter++; + } + + if ( counter == buildable.pieces.size - 1 ) + self thread do_player_general_vox( "general", "build_final", 45 ); +} + +bank_pap_hint() +{ + volume = getent( "zone_ban", "targetname" ); + + while ( true ) + { + players = get_players(); + + foreach ( player in players ) + { + if ( player istouching( volume ) && is_player_valid( player ) ) + { + player thread do_player_general_vox( "general", "pap_hint", undefined, 100 ); + return; + } + } + + wait 10; + } +} + +power_pap_hint() +{ + trigs = getentarray( "local_electric_door", "script_noteworthy" ); + lab_trig = undefined; + + foreach ( trig in trigs ) + { + if ( isdefined( trig.target ) && trig.target == "lab_secret_hatch" ) + lab_trig = trig; + } + + if ( !isdefined( lab_trig ) ) + return; + + while ( true ) + { + lab_trig waittill( "trigger", who ); + + if ( isplayer( who ) && is_player_valid( who ) ) + { + who thread do_player_general_vox( "general", "pap_hint", undefined, 100 ); + return; + } + } +} + +transit_buildable_vo_override( name, from_world ) +{ + if ( isdefined( level.power_cycled ) && level.power_cycled && name == "turbine" && !( isdefined( from_world ) && from_world ) && !flag( "power_on" ) ) + { + level.maxis_turbine_pickedup_vox = 1; + level thread maps\mp\zm_transit_sq::maxissay( "vox_maxi_build_complete_0", ( -6848, 5056, 56 ) ); + return true; + } + + return false; +} + +sndsetupmusiceasteregg() +{ + origins = []; + origins[0] = ( -7562, 4570, -19 ); + origins[1] = ( 7914, -6557, 269 ); + origins[2] = ( 1864, -7, -19 ); + level.meteor_counter = 0; + level.music_override = 0; + + for ( i = 0; i < origins.size; i++ ) + level thread sndmusicegg( origins[i] ); +} + +sndmusicegg( bear_origin ) +{ + temp_ent = spawn( "script_origin", bear_origin ); + temp_ent playloopsound( "zmb_meteor_loop" ); + temp_ent thread maps\mp\zombies\_zm_sidequests::fake_use( "main_music_egg_hit", ::waitfor_override ); + + temp_ent waittill( "main_music_egg_hit", player ); + + temp_ent stoploopsound( 1 ); + player playsound( "zmb_meteor_activate" ); + level.meteor_counter += 1; + + if ( level.meteor_counter == 3 ) + level thread sndplaymusicegg( player, temp_ent ); + else + { + wait 1.5; + temp_ent delete(); + } +} + +waitfor_override() +{ + if ( isdefined( level.music_override ) && level.music_override ) + return false; + + return true; +} + +sndplaymusicegg( player, ent ) +{ + wait 1; + ent playsound( "mus_zmb_secret_song" ); + + level waittill( "end_game" ); + + ent stopsounds(); + wait 0.05; + ent delete(); +} + +sndtoiletflush() +{ + toilettrig = spawn( "trigger_radius", ( 11182, 7584, -596 ), 0, 150, 5 ); + toilettrig sethintstring( "" ); + toilettrig setcursorhint( "HINT_NOICON" ); + + while ( true ) + { + toilettrig waittill( "trigger", who ); + + if ( who is_player() ) + { + toilettrig playsound( "zmb_toilet_flush" ); + wait 5; + } + + wait 0.1; + } +} + +transit_special_weapon_magicbox_check( weapon ) +{ + if ( isdefined( level.raygun2_included ) && level.raygun2_included ) + { + if ( weapon == "ray_gun_zm" ) + { + if ( self has_weapon_or_upgrade( "raygun_mark2_zm" ) || maps\mp\zombies\_zm_tombstone::is_weapon_available_in_tombstone( "raygun_mark2_zm", self ) ) + return false; + } + + if ( weapon == "raygun_mark2_zm" ) + { + if ( self has_weapon_or_upgrade( "ray_gun_zm" ) || maps\mp\zombies\_zm_tombstone::is_weapon_available_in_tombstone( "ray_gun_zm", self ) ) + return false; + + if ( randomint( 100 ) >= 33 ) + return false; + } + } + + return true; +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_achievement.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_achievement.gsc new file mode 100644 index 0000000..58053eb --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_achievement.gsc @@ -0,0 +1,194 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_globallogic_score; + +init() +{ + if ( is_classic() ) + { + level thread achievement_transit_sidequest(); + level thread achievement_undead_mans_party_bus(); + } + + level.achievement_sound_func = ::achievement_sound_func; + onplayerconnect_callback( ::onplayerconnect ); +} + +init_player_achievement_stats() +{ + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dont_fire_until_you_see", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_the_lights_of_their_eyes", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dance_on_my_grave", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_standard_equipment_may_vary", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_you_have_no_power_over_me", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_i_dont_think_they_exist", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_fuel_efficient", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_happy_hour", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_transit_sidequest", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_undead_mans_party_bus", 0 ); +} + +onplayerconnect() +{ + self thread achievement_the_lights_of_their_eyes(); + self thread achievement_dance_on_my_grave(); + + if ( is_classic() ) + { + self thread achievement_dont_fire_until_you_see(); + self thread achievement_standard_equipment_may_vary(); + self thread achievement_you_have_no_power_over_me(); + self thread achievement_i_dont_think_they_exist(); + self thread achievement_fuel_efficient(); + self thread achievement_zm_happy_hour(); + } +} + +achievement_transit_sidequest() +{ + level endon( "end_game" ); + + level waittill( "transit_sidequest_achieved" ); + + level giveachievement_wrapper( "ZM_TRANSIT_SIDEQUEST", 1 ); +} + +achievement_undead_mans_party_bus() +{ + level endon( "end_game" ); + flag_wait( "start_zombie_round_logic" ); + wait 0.05; + flag_wait( "ladder_attached" ); + flag_wait( "catcher_attached" ); + flag_wait( "hatch_attached" ); +/# + +#/ + level giveachievement_wrapper( "ZM_UNDEAD_MANS_PARTY_BUS", 1 ); +} + +achievement_dont_fire_until_you_see() +{ + level endon( "end_game" ); + self endon( "burned" ); + zombie_doors = getentarray( "zombie_door", "targetname" ); + + while ( true ) + { + level waittill( "door_opened" ); + + num_left = 0; + all_opened = 1; + + foreach ( door in zombie_doors ) + { + if ( !( isdefined( door.has_been_opened ) && door.has_been_opened ) ) + { + num_left++; + all_opened = 0; + } + } + + if ( all_opened ) + break; +/# + +#/ + } +/# + +#/ + self giveachievement_wrapper( "ZM_DONT_FIRE_UNTIL_YOU_SEE" ); +} + +achievement_the_lights_of_their_eyes() +{ + level endon( "end_game" ); + + self waittill( "the_lights_of_their_eyes" ); +/# + +#/ + self giveachievement_wrapper( "ZM_THE_LIGHTS_OF_THEIR_EYES" ); +} + +achievement_dance_on_my_grave() +{ + level endon( "end_game" ); + + self waittill( "dance_on_my_grave" ); +/# + +#/ + self giveachievement_wrapper( "ZM_DANCE_ON_MY_GRAVE" ); +} + +achievement_standard_equipment_may_vary() +{ + level endon( "end_game" ); + self waittill_subset( 4, "equip_electrictrap_zm_given", "riotshield_zm_given", "equip_turbine_zm_given", "equip_turret_zm_given", "jetgun_zm_given" ); +/# + +#/ + self giveachievement_wrapper( "ZM_STANDARD_EQUIPMENT_MAY_VARY" ); +} + +achievement_you_have_no_power_over_me() +{ + level endon( "end_game" ); + self endon( "avogadro_damage_taken" ); + + level waittill( "avogadro_defeated" ); +/# + +#/ + self giveachievement_wrapper( "ZM_YOU_HAVE_NO_POWER_OVER_ME" ); +} + +achievement_i_dont_think_they_exist() +{ + level endon( "end_game" ); + + self waittill( "i_dont_think_they_exist" ); +/# + +#/ + self giveachievement_wrapper( "ZM_I_DONT_THINK_THEY_EXIST" ); +} + +achievement_fuel_efficient() +{ + level endon( "end_game" ); + + self waittill( "used_screecher_hole" ); +/# + +#/ + self giveachievement_wrapper( "ZM_FUEL_EFFICIENT" ); +} + +achievement_zm_happy_hour() +{ + level endon( "end_game" ); + level endon( "power_on" ); + + while ( true ) + { + self waittill( "perk_acquired" ); + + if ( isdefined( self.perk_history ) && self.perk_history.size >= 2 ) + break; + } +/# + +#/ + self giveachievement_wrapper( "ZM_HAPPY_HOUR" ); +} + +achievement_sound_func( achievement_name_lower ) +{ + self thread do_player_general_vox( "general", "achievement" ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_ai_screecher.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_ai_screecher.gsc new file mode 100644 index 0000000..a6f67f1 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_ai_screecher.gsc @@ -0,0 +1,292 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_ai_screecher; +#include maps\mp\zm_transit_utility; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\zombies\_zm_gump; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zm_transit; + +init() +{ + level.screecher_should_burrow = ::screecher_should_burrow; + level.screecher_should_runaway = ::screecher_should_runaway; + level.screecher_cleanup = ::transit_screecher_cleanup; + level.screecher_init_done = ::screecher_init_done; + level.portals = []; +} + +screecher_should_burrow() +{ + green_light = self.green_light; + + if ( isdefined( green_light ) ) + { + if ( isdefined( green_light.burrow_active ) && green_light.burrow_active ) + { +/# + screecher_print( "burrow: already active" ); +#/ + return false; + } + + if ( isdefined( green_light.claimed ) && green_light.claimed ) + { +/# + screecher_print( "burrow: already claimed" ); +#/ + return false; + } + + ground_pos = groundpos( green_light.origin ); + self.ignoreall = 1; + green_light.claimed = 1; + self setgoalpos( ground_pos ); + + self waittill( "goal" ); + + self.state = "burrow_started"; + self setfreecameralockonallowed( 0 ); + self animscripted( ground_pos, self.angles, "zm_burrow" ); + self playsound( "zmb_screecher_dig" ); + + if ( !( isdefined( green_light.burrow_active ) && green_light.burrow_active ) && ( isdefined( green_light.power_on ) && green_light.power_on ) ) + green_light thread create_portal(); + + maps\mp\animscripts\zm_shared::donotetracks( "burrow_anim" ); + green_light notify( "burrow_done" ); + self.state = "burrow_finished"; + self delete(); + return true; + } + + return false; +} + +create_portal() +{ + self endon( "portal_stopped" ); + self.burrow_active = 1; + ground_pos = groundpos( self.origin ); + + if ( !isdefined( self.hole ) ) + { + self.hole = spawn( "script_model", ground_pos + vectorscale( ( 0, 0, -1 ), 20.0 ) ); + self.hole.start_origin = self.hole.origin; + self.hole setmodel( "p6_zm_screecher_hole" ); + self.hole playsound( "zmb_screecher_portal_spawn" ); + } + + if ( !isdefined( self.hole_fx ) ) + { + self.hole_fx = spawn( "script_model", ground_pos ); + self.hole_fx setmodel( "tag_origin" ); + } + + wait 0.1; + playfxontag( level._effect["screecher_hole"], self.hole_fx, "tag_origin" ); + self.hole moveto( self.hole.origin + vectorscale( ( 0, 0, 1 ), 20.0 ), 1.0 ); + + self waittill( "burrow_done" ); + + self thread portal_think(); +} + +portal_think() +{ + playfxontag( level._effect["screecher_vortex"], self.hole, "tag_origin" ); + self.hole_fx delete(); + self.hole playloopsound( "zmb_screecher_portal_loop", 2 ); + level.portals[level.portals.size] = self; +} + +portal_player_watcher() +{ + self endon( "disconnect" ); + + while ( true ) + { + if ( !self isonground() ) + self player_wait_land(); + + wait 0.1; + } +} + +player_wait_land() +{ + self endon( "disconnect" ); + + while ( !self isonground() ) + wait 0.1; + + if ( level.portals.size > 0 ) + { + remove_portal = undefined; + + foreach ( portal in level.portals ) + { + dist_sq = distance2dsquared( self.origin, portal.origin ); + + if ( dist_sq < 4096 ) + { + remove_portal = portal; + break; + } + } + + if ( isdefined( remove_portal ) ) + { + arrayremovevalue( level.portals, remove_portal ); + portal portal_use( self ); + wait 0.5; + } + } +} + +portal_use( player ) +{ + player playsoundtoplayer( "zmb_screecher_portal_warp_2d", player ); + self thread teleport_player( player ); + playsoundatposition( "zmb_screecher_portal_end", self.hole.origin ); + self.hole delete(); + self.burrow_active = 0; +} + +teleport_player( player ) +{ + lights = getstructarray( "screecher_escape", "targetname" ); + lights = array_randomize( lights ); + dest_light = undefined; + + foreach ( light in lights ) + { + if ( light == self ) + continue; + + if ( light other_players_close_to_light( player ) ) + continue; + + dest_light = light; + break; + } + + if ( isdefined( dest_light ) ) + { + playsoundatposition( "zmb_screecher_portal_arrive", dest_light.origin ); + player maps\mp\zombies\_zm_gump::player_teleport_blackscreen_on(); + player setorigin( dest_light.origin ); + player notify( "used_screecher_hole" ); + player maps\mp\zombies\_zm_stats::increment_client_stat( "screecher_teleporters_used", 0 ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "screecher_teleporters_used" ); + } +} + +other_players_close_to_light( ignore_player ) +{ + players = get_players(); + + if ( players.size > 1 ) + { + foreach ( player in players ) + { + if ( player == ignore_player ) + continue; + + dist_sq = distance2dsquared( player.origin, self.origin ); + + if ( dist_sq < 14400 ) + return true; + } + } + + return false; +} + +screecher_should_runaway( player ) +{ + if ( maps\mp\zm_transit::player_entered_safety_light( player ) ) + { +/# + screecher_print( "runaway: green light" ); +#/ + if ( !isdefined( player.screecher ) ) + player thread do_player_general_vox( "general", "screecher_flee_green" ); + + return true; + } + + if ( maps\mp\zm_transit::player_entered_safety_zone( player ) ) + { +/# + screecher_print( "runaway: safety zone" ); +#/ + if ( !isdefined( player.screecher ) ) + player thread do_player_general_vox( "general", "screecher_flee" ); + + return true; + } + + bus_dist_sq = distancesquared( player.origin, level.the_bus.origin ); + + if ( bus_dist_sq < 62500 ) + { +/# + screecher_print( "runaway: bus" ); +#/ + if ( !isdefined( player.screecher ) ) + player thread do_player_general_vox( "general", "screecher_flee" ); + + return true; + } + + return false; +} + +transit_screecher_cleanup() +{ + green_light = self.green_light; + + if ( isdefined( green_light ) ) + { + if ( isdefined( green_light.claimed ) ) + green_light.claimed = undefined; + + if ( self.state == "burrow_started" ) + { +/# + screecher_print( "clean up portal" ); +#/ + green_light notify( "portal_stopped" ); + green_light.hole moveto( green_light.hole.start_origin, 1.0 ); + green_light.burrow_active = 0; + + if ( isdefined( green_light.hole_fx ) ) + green_light.hole_fx delete(); + } + } +} + +screecher_init_done() +{ + self endon( "death" ); + + while ( true ) + { + ground_ent = self getgroundent(); + + if ( isdefined( ground_ent ) && ground_ent == level.the_bus ) + { + self dodamage( self.health + 666, self.origin ); +/# + screecher_print( "Died on bus" ); +#/ + } + + wait 0.1; + } +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_ambush.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_ambush.gsc new file mode 100644 index 0000000..193c66d --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_ambush.gsc @@ -0,0 +1,282 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zm_transit_utility; +#include maps\mp\zm_transit_bus; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zombies\_zm_powerups; + +main() +{ + level.numroundssincelastambushround = 0; + level.numbusstopssincelastambushround = 0; + level.numambushrounds = 0; + level.ambushpercentageperstop = 10; + level.ambushpercentageperround = 25; + flag_init( "ambush_round", 0 ); + flag_init( "ambush_safe_area_active", 0 ); + initambusheffects(); + thread ambushroundkeeper(); +/# + adddebugcommand( "devgui_cmd \"Zombies:1/Bus:14/Ambush Round:6/Always:1\" \"zombie_devgui ambush_round always\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Bus:14/Ambush Round:6/Never:2\" \"zombie_devgui ambush_round never\"\n" ); +#/ +} + +initambusheffects() +{ + level._effect["ambush_bus_fire"] = loadfx( "env/fire/fx_fire_md" ); +} + +shouldstartambushround() +{ +/# + if ( level.ambushpercentageperstop == 100 ) + return true; + + if ( getdvarint( _hash_FA81816F ) == 2 ) + return false; +#/ + if ( level.numbusstopssincelastambushround < 2 ) + { + + } + + randint = randomintrange( 0, 100 ); + percentchance = level.numbusstopssincelastambushround * level.ambushpercentageperstop; + + if ( randint < percentchance ) + { + + } + + percentchance = level.numroundssincelastambushround * level.ambushpercentageperround; + + if ( randint < percentchance ) + { + + } + + if ( maps\mp\zm_transit_bus::busgasempty() ) + return true; + + return false; +} + +isambushroundactive() +{ + return flag_exists( "ambush_round" ) && flag( "ambush_round" ); +} + +is_ambush_round_spawning_active() +{ + return flag_exists( "ambush_safe_area_active" ) && flag( "ambush_safe_area_active" ); +} + +ambushstartround() +{ + flag_set( "ambush_round" ); + ambushroundthink(); +} + +ambushendround() +{ + level.the_bus.issafe = 1; + maps\mp\zm_transit_bus::busgasadd( 60 ); + level.numbusstopssincelastambushround = 0; + level.numroundssincelastambushround = 0; + flag_clear( "ambush_round" ); +} + +cancelambushround() +{ + flag_clear( "ambush_round" ); + flag_clear( "ambush_safe_area_active" ); + maps\mp\zm_transit_utility::try_resume_zombie_spawning(); + bbprint( "zombie_events", "category %s type %s round %d", "DOG", "stop", level.round_number ); + level.the_bus notify( "ambush_round_fail_safe" ); +} + +ambushroundspawning() +{ + level.numambushrounds++; + wait 6; + level.the_bus.issafe = 0; +} + +limitedambushspawn() +{ + if ( level.numambushrounds < 3 ) + dogcount = level.dog_targets.size * 6; + else + dogcount = level.dog_targets.size * 8; + + setupdogspawnlocs(); + level thread ambushroundspawnfailsafe( 20 ); + + while ( get_current_zombie_count() > 0 ) + wait 1.0; + + level notify( "end_ambushWaitFunction" ); +} + +ambushroundthink() +{ + module = maps\mp\zombies\_zm_game_module::get_game_module( level.game_module_nml_index ); + + if ( isdefined( module.hub_start_func ) ) + { + level thread [[ module.hub_start_func ]]( "nml" ); + level notify( "game_mode_started" ); + } + + level thread ambushroundspawning(); + ambushwaitfunction(); + ambushendround(); +} + +ambushwaitfunction() +{ + +} + +ambushpointfailsafe() +{ + level.the_bus endon( "ambush_point" ); + + level.the_bus waittill( "reached_stop_point" ); + + cancelambushround(); +} + +ambushroundspawnfailsafe( timer ) +{ + ambushroundtimelimit = timer; + + for ( currentambushtime = 0; currentambushtime < ambushroundtimelimit; currentambushtime++ ) + { + if ( !flag( "ambush_round" ) ) + return; + + wait 1.0; + } + + level notify( "end_ambushWaitFunction" ); + wait 5; + dogs = getaispeciesarray( "all", "zombie_dog" ); + + for ( i = 0; i < dogs.size; i++ ) + { + if ( isdefined( dogs[i].marked_for_death ) && dogs[i].marked_for_death ) + continue; + + if ( is_magic_bullet_shield_enabled( dogs[i] ) ) + continue; + + dogs[i] dodamage( dogs[i].health + 666, dogs[i].origin ); + } +} + +ambushdoghealthincrease() +{ + switch ( level.numambushrounds ) + { + case 1: + level.dog_health = 400; + break; + case 2: + level.dog_health = 900; + break; + case 3: + level.dog_health = 1300; + break; + case 4: + level.dog_health = 1600; + break; + default: + level.dog_health = 1600; + break; + } +} + +ambushroundaftermath() +{ + power_up_origin = level.the_bus gettagorigin( "tag_body" ); + + if ( isdefined( power_up_origin ) ) + level thread maps\mp\zombies\_zm_powerups::specific_powerup_drop( "full_ammo", power_up_origin ); +} + +ambushroundeffects() +{ + wait 2; + level thread ambushlightningeffect( "tag_body" ); + wait 0.5; + level thread ambushlightningeffect( "tag_wheel_back_left" ); + wait 0.5; + level thread ambushlightningeffect( "tag_wheel_back_right" ); + wait 0.5; + level thread ambushlightningeffect( "tag_wheel_front_left" ); + wait 0.5; + level thread ambushlightningeffect( "tag_wheel_front_right" ); + wait 1.5; + fxent0 = spawnandlinkfxtotag( level._effect["ambush_bus_fire"], level.the_bus, "tag_body" ); + fxent1 = spawnandlinkfxtotag( level._effect["ambush_bus_fire"], level.the_bus, "tag_wheel_back_left" ); + fxent2 = spawnandlinkfxtotag( level._effect["ambush_bus_fire"], level.the_bus, "tag_wheel_back_right" ); + fxent3 = spawnandlinkfxtotag( level._effect["ambush_bus_fire"], level.the_bus, "tag_wheel_front_left" ); + fxent4 = spawnandlinkfxtotag( level._effect["ambush_bus_fire"], level.the_bus, "tag_wheel_front_right" ); + + level waittill( "end_ambushWaitFunction" ); + + fxent0 delete(); + fxent1 delete(); + fxent2 delete(); + fxent3 delete(); + fxent4 delete(); +} + +ambushlightningeffect( tag ) +{ + fxentlighting = spawnandlinkfxtotag( level._effect["lightning_dog_spawn"], level.the_bus, tag ); + wait 5; + fxentlighting delete(); +} + +setupdogspawnlocs() +{ + level.enemy_dog_locations = []; + currentzone = undefined; + ambush_zones = getentarray( "ambush_volume", "script_noteworthy" ); + + for ( i = 0; i < ambush_zones.size; i++ ) + { + touching = 0; + + for ( b = 0; b < level.the_bus.bounds_origins.size && !touching; b++ ) + { + bounds = level.the_bus.bounds_origins[b]; + touching = bounds istouching( ambush_zones[i] ); + } + + if ( touching ) + { + currentzone = ambush_zones[i]; + break; + } + } + + assert( isdefined( currentzone ), "Bus needs to be in an ambush zone for an ambush round: " + level.the_bus.origin ); + level.enemy_dog_locations = getstructarray( currentzone.target, "targetname" ); +} + +ambushroundkeeper() +{ + while ( true ) + { + level waittill( "between_round_over" ); + + level.numroundssincelastambushround++; + } +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_automaton.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_automaton.gsc new file mode 100644 index 0000000..5ee347c --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_automaton.gsc @@ -0,0 +1,611 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zm_transit_utility; +#include maps\mp\zm_transit_bus; + +#using_animtree("zm_transit_automaton"); + +init_animtree() +{ + scriptmodelsuseanimtree( #animtree ); +} + +initaudioaliases() +{ + level.vox zmbvoxadd( "automaton", "scripted", "discover_bus", "near_station1", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "leaving_warning", "warning_out", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "leaving", "warning_leaving", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "emp_disable", "stop_generic", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "out_of_gas", "gas_out", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "refueled_gas", "gas_full", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "doors_open", "doors_open", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "doors_close", "doors_close", undefined ); + level.vox zmbvoxadd( "automaton", "convo", "player_enter", "player_enter", undefined ); + level.vox zmbvoxadd( "automaton", "convo", "player_leave", "player_exit", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "zombie_on_board", "zombie_enter", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "zombie_at_window", "zombie_attack", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "zombie_on_roof", "zombie_roof", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "player_attack_1", "player_1attack", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "player_attack_2", "player_2attack", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "player_attack_3", "player_3attack", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "hint_upgrade", "hint_upgrade", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "ride_generic", "ride_generic", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_station1", "near_station2", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_station2", "near_station2", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_station3", "near_station3", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_station4", "near_station4", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_station5", "near_station5", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_diner1", "near_diner1", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_diner2", "near_diner2", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_diner3", "near_diner3", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_diner4", "near_diner4", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_diner5", "near_diner5", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_tunnel1", "near_tunnel1", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_tunnel2", "near_tunnel2", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_tunnel3", "near_tunnel3", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_tunnel4", "near_tunnel4", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_tunnel5", "near_tunnel5", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_forest1_1", "near_1forest1", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_forest1_2", "near_1forest2", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_forest1_3", "near_1forest3", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_forest1_4", "near_1forest4", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_forest1_5", "near_1forest5", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_forest2_1", "near_2forest1", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_forest2_2", "near_2forest2", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_forest2_3", "near_2forest3", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_forest2_4", "near_2forest4", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_forest2_5", "near_2forest5", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_farm1", "near_farm1", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_farm2", "near_farm2", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_farm3", "near_farm3", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_farm4", "near_farm4", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_farm5", "near_farm5", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_corn1", "near_corn1", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_corn2", "near_corn2", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_corn3", "near_corn3", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_corn4", "near_corn4", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_corn5", "near_corn5", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_power1", "near_power1", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_power2", "near_power2", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_power3", "near_power3", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_power4", "near_power4", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_power5", "near_power5", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_town1", "near_town1", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_town2", "near_town2", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_town3", "near_town3", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_town4", "near_town4", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_town5", "near_town5", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_bridge1", "near_bridge1", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_bridge2", "near_bridge2", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_bridge3", "near_bridge3", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_bridge4", "near_bridge4", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "near_bridge5", "near_bridge5", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "leave_tunnel", "exit_tunnel1", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "bridge_collapse", "bridge_collapse", undefined ); + level.vox zmbvoxadd( "automaton", "inform", "player_pissed", "player_pissed", undefined ); +} + +main() +{ + level.automaton = getent( "bus_driver_head", "targetname" ); + level.automaton thread automatonsetup(); + level.timesplayerattackingautomaton = 0; + level.automaton.greeting_timer = 0; +} + +automatonsetup() +{ + self linkto( level.the_bus ); + self setmovingplatformenabled( 1 ); + self useanimtree( #animtree ); + self setanim( %ai_zombie_bus_driver_idle ); + self addasspeakernpc( 1 ); + level.vox zmbvoxinitspeaker( "automaton", "vox_bus_", self ); + self thread automatondamagecallback(); + self thread automatonanimationsspeaking(); + self thread automatonemp(); + level thread bus_upgrade_vox(); +} + +automatondamagecallback() +{ + self setcandamage( 1 ); + self.health = 100000; + triggers = getentarray( "bus_door_trigger", "targetname" ); + + while ( true ) + { + self waittill( "damage", amount, attacker, directionvec, point, type ); + + self.health = 100000; + wait 1; + + if ( isdefined( self.disabled_by_emp ) && self.disabled_by_emp || isdefined( self.isspeaking ) && self.isspeaking || isdefined( level.playerattackingautomaton ) && level.playerattackingautomaton ) + continue; + + self say_player_attack_vox(); + + if ( level.timesplayerattackingautomaton < 3 ) + continue; + + level.timesplayerattackingautomaton = 0; + + if ( isdefined( attacker ) && isplayer( attacker ) ) + { + wait 5; + + if ( !isdefined( self.dmgfxorigin ) ) + { + self.dmgfxorigin = spawn( "script_model", point ); + self.dmgfxorigin setmodel( "tag_origin" ); + + if ( isdefined( type ) && type == "MOD_GRENADE_SPLASH" ) + self.dmgfxorigin.origin = self gettagorigin( "tag_origin" ) + vectorscale( ( 0, 0, 1 ), 40.0 ); + + self.dmgfxorigin linkto( self, "J_neck" ); + } + + wait 0.5; + playfxontag( level._effect["switch_sparks"], self.dmgfxorigin, "tag_origin" ); + + foreach ( trigger in triggers ) + trigger setinvisibletoall(); + + level.the_bus.force_lock_doors = 1; + + if ( randomint( 100 ) > 50 ) + { + if ( !( isdefined( level.the_bus.skip_next_destination ) && level.the_bus.skip_next_destination ) ) + level thread bus_skip_destination(); + + level thread automatonspeak( "inform", "player_pissed", undefined, 0 ); + } + else + level thread automatonspeak( "inform", "player_pissed", undefined, 1 ); + + if ( level.the_bus.doorsclosed ) + { + triggers[0] playsound( "zmb_bus_door_open" ); + level.the_bus maps\mp\zm_transit_bus::busdoorsopen(); + wait 1.25; + shove_players_off_bus(); + wait 1.25; + triggers[0] playsound( "zmb_bus_door_close" ); + level.the_bus maps\mp\zm_transit_bus::busdoorsclose(); + } + else + { + shove_players_off_bus(); + wait 1.25; + triggers[0] playsound( "zmb_bus_door_close" ); + level.the_bus maps\mp\zm_transit_bus::busdoorsclose(); + } + + wait 3.5; + level thread automatonspeak( "inform", "player_pissed", undefined, 2 ); + wait 28; + + foreach ( trigger in triggers ) + trigger setvisibletoall(); + + level.the_bus.force_lock_doors = 0; + } + + if ( isdefined( self.dmgfxorigin ) ) + { + self.dmgfxorigin unlink(); + self.dmgfxorigin delete(); + self.dmgfxorigin = undefined; + } + } +} + +bus_skip_destination() +{ + level.the_bus.skip_next_destination = 1; + + level.the_bus waittill( "skipping_destination" ); + + level.the_bus.skip_next_destination = 0; +} + +automatonanimationsspeaking() +{ + self thread bus_driver_idle(); + + while ( true ) + { + self waittill( "want_to_be_speaking", speakingline ); + + self.isplayingspeakinganim = 1; + + while ( isdefined( self.isplayingidleanim ) && self.isplayingidleanim ) + wait 0.05; + + self notify( "startspeaking" ); + + if ( isdefined( self.disabled_by_emp ) && self.disabled_by_emp ) + { + self.isplayingspeakinganim = 0; + continue; + } + + speakinganim = %ai_zombie_bus_driver_idle_dialog; + speakingnum = 0; + + if ( issubstr( speakingline, "attack" ) || issubstr( speakingline, "pissed" ) ) + { + speakinganim = %ai_zombie_bus_driver_idle_dialog_angry; + speakingnum = 1; + } + else if ( issubstr( speakingline, "warning_out" ) || is_true( level.bus_driver_focused ) ) + { + speakinganim = %ai_zombie_bus_driver_idle_dialog_focused; + speakingnum = 2; + } + else if ( issubstr( speakingline, "zombie_enter" ) || isdefined( level.bus_zombie_danger ) && level.bus_zombie_danger ) + { + speakinganim = %ai_zombie_bus_driver_idle_dialog_panicked; + speakingnum = 3; + } + else if ( issubstr( speakingline, "stop_generic" ) || issubstr( speakingline, "warning_leaving" ) ) + { + speakinganim = %ai_zombie_bus_driver_idle_dialog_panicked; + speakingnum = 3; + } + else if ( issubstr( speakingline, "player_enter" ) ) + { + speakinganim = %ai_zombie_bus_driver_player_enter; + speakingnum = 4; + } + else if ( issubstr( speakingline, "player_leave" ) ) + { + speakinganim = %ai_zombie_bus_driver_player_exit; + speakingnum = 5; + } + else if ( issubstr( speakingline, "generic" ) ) + { + if ( randomint( 100 ) > 50 ) + { + speakinganim = %ai_zombie_bus_driver_forward_short_dialog; + speakingnum = 7; + } + else + { + speakinganim = %ai_zombie_bus_driver_turnback_short_dialog; + speakingnum = 6; + } + } + else if ( issubstr( speakingline, "discover" ) ) + { + speakinganim = %ai_zombie_bus_driver_idle_dialog; + speakingnum = 0; + } + else if ( isdefined( level.stops ) && isdefined( level.stops["depot"] ) && level.stops["depot"] < 1 && issubstr( speakingline, "near_" ) ) + { + speakinganim = %ai_zombie_bus_driver_forward_short_dialog; + speakingnum = 7; + } + + self setanim( speakinganim ); + self thread sndspeakinganimaudio( speakingnum ); +/# + if ( getdvar( _hash_96F6EBD9 ) != "" ) + iprintlnbold( "" + speakinganim ); +#/ + wait( getanimlength( speakinganim ) ); + self.isplayingspeakinganim = 0; + } +} + +bus_driver_idle() +{ + danger_anims = []; + danger_anims[0] = %ai_zombie_bus_driver_idle_twitch_a; + danger_anims[1] = %ai_zombie_bus_driver_idle_twitch_focused; + danger_anims[2] = %ai_zombie_bus_driver_idle_twitch_panicked; + danger_anims[3] = %ai_zombie_bus_driver_idle_twitch_b; + focused_anims = []; + focused_anims[0] = %ai_zombie_bus_driver_idle_twitch_panicked; + focused_anims[1] = %ai_zombie_bus_driver_idle_twitch_focused; + twitch_anims = []; + twitch_anims[0] = %ai_zombie_bus_driver_idle_twitch_a; + twitch_anims[1] = %ai_zombie_bus_driver_idle_twitch_b; + idle_anims = []; + idle_anims[0] = %ai_zombie_bus_driver_idle_a; + idle_anims[1] = %ai_zombie_bus_driver_idle_b; + idle_anims[2] = %ai_zombie_bus_driver_idle_c; + idle_anims[3] = %ai_zombie_bus_driver_idle_d; + idle_anims[4] = %ai_zombie_bus_driver_idle; + + while ( true ) + { + if ( isdefined( self.isplayingspeakinganim ) && self.isplayingspeakinganim || isdefined( self.disabled_by_emp ) && self.disabled_by_emp ) + { + wait 0.05; + continue; + } + + if ( isdefined( level.bus_zombie_danger ) && level.bus_zombie_danger ) + driveranim = random( danger_anims ); + else if ( is_true( level.bus_driver_focused ) ) + driveranim = random( focused_anims ); + else if ( randomint( 100 ) > 90 ) + driveranim = random( twitch_anims ); + else + driveranim = random( idle_anims ); + + if ( isdefined( self.previous_anim ) && self.previous_anim == driveranim && driveranim != %ai_zombie_bus_driver_idle ) + driveranim = %ai_zombie_bus_driver_idle; +/# + if ( getdvar( _hash_6DF184E8 ) != "" ) + iprintlnbold( "Idle:" + driveranim ); +#/ + self.isplayingidleanim = 1; + self setanim( driveranim ); + self thread sndplaydriveranimsnd( driveranim ); + wait( getanimlength( driveranim ) ); + self.previous_anim = driveranim; + self.isplayingidleanim = 0; + } +} + +automatonemp() +{ + while ( true ) + { + if ( !( isdefined( level.the_bus.disabled_by_emp ) && level.the_bus.disabled_by_emp ) ) + level.the_bus waittill( "pre_power_off" ); + + level.automaton.disabled_by_emp = 1; + level.automaton setanim( %ai_zombie_bus_driver_emp_powerdown ); + self thread sndplaydriveranimsnd( %ai_zombie_bus_driver_emp_powerdown ); + level.automaton maps\mp\zombies\_zm_audio::create_and_play_dialog( "inform", "emp_disable" ); + wait( getanimlength( %ai_zombie_bus_driver_emp_powerdown ) ); + level.automaton setanim( %ai_zombie_bus_driver_emp_powerdown_idle ); + + if ( isdefined( level.the_bus.pre_disabled_by_emp ) && level.the_bus.pre_disabled_by_emp || isdefined( level.the_bus.disabled_by_emp ) && level.the_bus.disabled_by_emp ) + level.the_bus waittill( "power_on" ); + + level.automaton setanim( %ai_zombie_bus_driver_emp_powerup ); + self thread sndplaydriveranimsnd( %ai_zombie_bus_driver_emp_powerup ); + wait( getanimlength( %ai_zombie_bus_driver_emp_powerup ) ); + level.automaton.disabled_by_emp = 0; + self setanim( %ai_zombie_bus_driver_idle ); + } +} + +say_player_attack_vox() +{ + if ( isdefined( level.the_bus.force_lock_doors ) && level.the_bus.force_lock_doors ) + { + level.timesplayerattackingautomaton = 0; + return; + } + else if ( isdefined( level.playerattackingautomaton ) && level.playerattackingautomaton ) + return; + + level.playerattackingautomaton = 1; + + if ( level.timesplayerattackingautomaton == 0 ) + level thread automaton_attack_reset_timer(); + + level.timesplayerattackingautomaton++; + level thread automatonspeak( "inform", "player_attack_" + level.timesplayerattackingautomaton ); + + if ( level.timesplayerattackingautomaton >= 3 ) + level notify( "automaton_threshold_reached" ); + + level thread automaton_attack_choke_timer(); +} + +automaton_attack_choke_timer() +{ + wait 10; + level.playerattackingautomaton = 0; +} + +automaton_attack_reset_timer() +{ + level endon( "automaton_threshold_reached" ); + wait 60; + level.timesplayerattackingautomaton = 0; +} + +bus_upgrade_vox() +{ + ladder_trig = getent( "bus_ladder_trigger", "targetname" ); + plow_trig = getent( "trigger_plow", "targetname" ); + hatch_trig = getent( "bus_hatch_bottom_trigger", "targetname" ); + + while ( true ) + { + if ( isdefined( level.stops ) && isdefined( level.stops["depot"] ) && level.stops["depot"] < 1 ) + { + wait 1; + continue; + } + + should_say_upgrade = -1; + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( player.isonbus ) && player.isonbus ) + { + if ( distancesquared( player.origin, hatch_trig.origin ) < 5184 && !flag( "hatch_attached" ) ) + should_say_upgrade = 2; + + continue; + } + + if ( distancesquared( player.origin, plow_trig.origin ) < 9216 && !flag( "catcher_attached" ) ) + { + should_say_upgrade = 1; + continue; + } + + if ( distancesquared( player.origin, ladder_trig.origin ) < 9216 && !flag( "ladder_attached" ) ) + should_say_upgrade = 0; + } + + if ( should_say_upgrade > -1 ) + { + level thread automatonspeak( "inform", "hint_upgrade", undefined, should_say_upgrade ); + wait 60; + } + + wait 1; + } +} + +shove_players_off_bus() +{ + playfxontag( level._effect["turbine_on"], level.automaton, "J_neck" ); + wait 0.25; + level.automaton playsound( "zmb_powerup_grabbed" ); + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( player.isonbus ) && player.isonbus ) + { + dir = anglestoright( level.the_bus.angles ); + dir = vectornormalize( dir ); + player_velocity = dir * 900; + player setvelocity( player_velocity ); + earthquake( 0.25, 1.0, player.origin, 256, player ); + } + } +} + +sndspeakinganimaudio( num ) +{ + switch ( num ) + { + case 0: + wait 0.4; + self playsound( "evt_zmb_robot_jerk" ); + wait 2.4; + self playsound( "evt_zmb_robot_jerk" ); + wait 2.25; + self playsound( "evt_zmb_robot_jerk" ); + wait 1.1; + self playsound( "evt_zmb_robot_jerk" ); + break; + case 1: + wait 0.31; + self playsound( "evt_zmb_robot_jerk" ); + wait 3.55; + self playsound( "evt_zmb_robot_jerk" ); + break; + case 2: + wait 0.18; + self playsound( "evt_zmb_robot_jerk" ); + wait 4.83; + self playsound( "evt_zmb_robot_jerk" ); + break; + case 3: + wait 0.23; + self playsound( "evt_zmb_robot_jerk" ); + wait 0.77; + self playsound( "evt_zmb_robot_jerk" ); + wait 1.4; + self playsound( "evt_zmb_robot_jerk" ); + wait 0.15; + self playsound( "evt_zmb_robot_spin" ); + wait 0.53; + self playsound( "evt_zmb_robot_hat" ); + break; + case 4: + wait 0.3; + self playsound( "evt_zmb_robot_jerk" ); + wait 3.64; + self playsound( "evt_zmb_robot_jerk" ); + break; + case 5: + wait 0.38; + self playsound( "evt_zmb_robot_jerk" ); + wait 3.4; + self playsound( "evt_zmb_robot_jerk" ); + break; + case 6: + wait 0.3; + self playsound( "evt_zmb_robot_jerk" ); + break; + case 7: + break; + } +} + +sndplaydriveranimsnd( the_anim ) +{ + if ( the_anim == %ai_zombie_bus_driver_idle_twitch_a ) + { + wait 0.55; + self playsound( "evt_zmb_robot_jerk" ); + wait 1.2; + self playsound( "evt_zmb_robot_hat" ); + wait 0.79; + self playsound( "evt_zmb_robot_spin" ); + wait 1.1; + self playsound( "evt_zmb_robot_hat" ); + self playsound( "evt_zmb_robot_spin" ); + } + else if ( the_anim == %ai_zombie_bus_driver_idle_twitch_focused ) + { + wait 0.25; + self playsound( "evt_zmb_robot_jerk" ); + wait 4.8; + self playsound( "evt_zmb_robot_jerk" ); + } + else if ( the_anim == %ai_zombie_bus_driver_idle_twitch_panicked ) + { + wait 0.31; + self playsound( "evt_zmb_robot_jerk" ); + wait 0.79; + self playsound( "evt_zmb_robot_jerk" ); + wait 1.3; + self playsound( "evt_zmb_robot_jerk" ); + wait 0.18; + self playsound( "evt_zmb_robot_spin" ); + wait 0.52; + self playsound( "evt_zmb_robot_hat" ); + } + else if ( the_anim == %ai_zombie_bus_driver_idle_twitch_b ) + { + wait 0.22; + self playsound( "evt_zmb_robot_hat" ); + wait 1.06; + self playsound( "evt_zmb_robot_spin" ); + wait 1.05; + self playsound( "evt_zmb_robot_hat" ); + wait 1.07; + self playsound( "evt_zmb_robot_spin" ); + wait 0.59; + self playsound( "evt_zmb_robot_hat" ); + } + else if ( the_anim == %ai_zombie_bus_driver_idle_d ) + { + wait 0.24; + self playsound( "evt_zmb_robot_spin" ); + wait 1.04; + self playsound( "evt_zmb_robot_hat" ); + } + else if ( the_anim == %ai_zombie_bus_driver_emp_powerdown ) + { + wait 0.1; + self playsound( "evt_zmb_robot_jerk" ); + wait 0.9; + self playsound( "evt_zmb_robot_jerk" ); + } + else if ( the_anim == %ai_zombie_bus_driver_emp_powerup ) + { + wait 0.63; + self playsound( "evt_zmb_robot_jerk" ); + } +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_buildables.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_buildables.gsc new file mode 100644 index 0000000..7ee19d4 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_buildables.gsc @@ -0,0 +1,413 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zm_transit_utility; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zm_transit_sq; + +init_buildables() +{ + level.buildable_piece_count = 27; + add_zombie_buildable( "riotshield_zm", &"ZOMBIE_BUILD_RIOT", &"ZOMBIE_BUILDING_RIOT", &"ZOMBIE_BOUGHT_RIOT" ); + add_zombie_buildable( "jetgun_zm", &"ZOMBIE_BUILD_JETGUN", &"ZOMBIE_BUILDING_JETGUN", &"ZOMBIE_BOUGHT_JETGUN" ); + add_zombie_buildable( "turret", &"ZOMBIE_BUILD_TURRET", &"ZOMBIE_BUILDING_TURRET", &"ZOMBIE_BOUGHT_TURRET" ); + add_zombie_buildable( "electric_trap", &"ZOMBIE_BUILD_ELECTRIC_TRAP", &"ZOMBIE_BUILDING_ELECTRIC_TRAP", &"ZOMBIE_BOUGHT_ELECTRIC_TRAP" ); + add_zombie_buildable( "cattlecatcher", &"ZOMBIE_BUILD_CATTLE_CATCHER", &"ZOMBIE_BUILDING_CATTLE_CATCHER" ); + add_zombie_buildable( "bushatch", &"ZOMBIE_BUILD_BUSHATCH", &"ZOMBIE_BUILDING_BUSHATCH" ); + add_zombie_buildable( "dinerhatch", &"ZOMBIE_BUILD_DINERHATCH", &"ZOMBIE_BUILDING_DINERHATCH" ); + add_zombie_buildable( "busladder", &"ZOMBIE_BUILD_BUSLADDER", &"ZOMBIE_BUILDING_BUSLADDER" ); + add_zombie_buildable( "powerswitch", &"ZOMBIE_BUILD_POWER_SWITCH", &"ZOMBIE_BUILDING_POWER_SWITCH" ); + add_zombie_buildable( "pap", &"ZOMBIE_BUILD_PAP", &"ZOMBIE_BUILDING_PAP" ); + add_zombie_buildable( "turbine", &"ZOMBIE_BUILD_TURBINE", &"ZOMBIE_BUILDING_TURBINE", &"ZOMBIE_BOUGHT_TURBINE" ); + add_zombie_buildable( "sq_common", &"ZOMBIE_BUILD_SQ_COMMON", &"ZOMBIE_BUILDING_SQ_COMMON" ); +} + +include_buildables() +{ + battery = generate_zombie_buildable_piece( "pap", "p6_zm_buildable_battery", 32, 64, 0, "zm_hud_icon_battery", ::onpickup_common, ::ondrop_common, undefined, "tag_part_03", undefined, 1 ); + riotshield_dolly = generate_zombie_buildable_piece( "riotshield_zm", "t6_wpn_zmb_shield_dolly", 32, 64, 0, "zm_hud_icon_dolly", ::onpickup_common, ::ondrop_common, undefined, "TAG_RIOT_SHIELD_DOLLY", undefined, 2 ); + riotshield_door = generate_zombie_buildable_piece( "riotshield_zm", "t6_wpn_zmb_shield_door", 48, 15, 25, "zm_hud_icon_cardoor", ::onpickup_common, ::ondrop_common, undefined, "TAG_RIOT_SHIELD_DOOR", undefined, 3 ); + riotshield = spawnstruct(); + riotshield.name = "riotshield_zm"; + riotshield add_buildable_piece( riotshield_dolly ); + riotshield add_buildable_piece( riotshield_door ); + riotshield.onbuyweapon = ::onbuyweapon_riotshield; + riotshield.triggerthink = ::riotshieldbuildable; + include_buildable( riotshield ); + maps\mp\zombies\_zm_buildables::hide_buildable_table_model( "riotshield_zm_buildable_trigger" ); + powerswitch_arm = generate_zombie_buildable_piece( "powerswitch", "p6_zm_buildable_pswitch_hand", 32, 64, 10, "zm_hud_icon_arm", ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, 4 ); + powerswitch_lever = generate_zombie_buildable_piece( "powerswitch", "p6_zm_buildable_pswitch_body", 48, 64, 0, "zm_hud_icon_panel", ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, 5 ); + powerswitch_box = generate_zombie_buildable_piece( "powerswitch", "p6_zm_buildable_pswitch_lever", 32, 15, 0, "zm_hud_icon_lever", ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, 6 ); + powerswitch = spawnstruct(); + powerswitch.name = "powerswitch"; + powerswitch add_buildable_piece( powerswitch_arm ); + powerswitch add_buildable_piece( powerswitch_lever ); + powerswitch add_buildable_piece( powerswitch_box ); + powerswitch.onuseplantobject = ::onuseplantobject_powerswitch; + powerswitch.triggerthink = ::powerswitchbuildable; + include_buildable( powerswitch ); + packapunch_machine = generate_zombie_buildable_piece( "pap", "p6_zm_buildable_pap_body", 48, 64, 0, "zm_hud_icon_papbody", ::onpickup_common, ::ondrop_common, undefined, "tag_part_02", undefined, 7 ); + packapunch_legs = generate_zombie_buildable_piece( "pap", "p6_zm_buildable_pap_table", 48, 15, 0, "zm_hud_icon_chairleg", ::onpickup_common, ::ondrop_common, undefined, "tag_part_01", undefined, 8 ); + packapunch = spawnstruct(); + packapunch.name = "pap"; + packapunch add_buildable_piece( battery, "tag_part_03", 0 ); + packapunch add_buildable_piece( packapunch_machine ); + packapunch add_buildable_piece( packapunch_legs ); + packapunch.triggerthink = ::papbuildable; + include_buildable( packapunch ); + maps\mp\zombies\_zm_buildables::hide_buildable_table_model( "pap_buildable_trigger" ); + turbine_fan = generate_zombie_buildable_piece( "turbine", "p6_zm_buildable_turbine_fan", 32, 64, 0, "zm_hud_icon_fan", ::onpickup_common, ::ondrop_common, undefined, "tag_part_03", undefined, 9 ); + turbine_panel = generate_zombie_buildable_piece( "turbine", "p6_zm_buildable_turbine_rudder", 32, 64, 0, "zm_hud_icon_rudder", ::onpickup_common, ::ondrop_common, undefined, "tag_part_04", undefined, 10 ); + turbine_body = generate_zombie_buildable_piece( "turbine", "p6_zm_buildable_turbine_mannequin", 32, 15, 0, "zm_hud_icon_mannequin", ::onpickup_common, ::ondrop_common, undefined, "tag_part_01", undefined, 11 ); + turbine = spawnstruct(); + turbine.name = "turbine"; + turbine add_buildable_piece( turbine_fan ); + turbine add_buildable_piece( turbine_panel ); + turbine add_buildable_piece( turbine_body ); + turbine.onuseplantobject = ::onuseplantobject_turbine; + turbine.triggerthink = ::turbinebuildable; + include_buildable( turbine ); + maps\mp\zombies\_zm_buildables::hide_buildable_table_model( "turbine_buildable_trigger" ); + turret_barrel = generate_zombie_buildable_piece( "turret", "t6_wpn_lmg_rpd_world", 32, 64, 10, "zm_hud_icon_turrethead", ::onpickup_common, ::ondrop_common, undefined, "tag_aim", undefined, 12 ); + turret_body = generate_zombie_buildable_piece( "turret", "p6_zm_buildable_turret_mower", 48, 64, 0, "zm_hud_icon_lawnmower", ::onpickup_common, ::ondrop_common, undefined, "tag_part_01", undefined, 13 ); + turret_ammo = generate_zombie_buildable_piece( "turret", "p6_zm_buildable_turret_ammo", 32, 15, 0, "zm_hud_icon_ammobox", ::onpickup_common, ::ondrop_common, undefined, "tag_part_02", undefined, 14 ); + turret = spawnstruct(); + turret.name = "turret"; + turret add_buildable_piece( turret_barrel ); + turret add_buildable_piece( turret_body ); + turret add_buildable_piece( turret_ammo ); + turret.triggerthink = ::turretbuildable; + include_buildable( turret ); + maps\mp\zombies\_zm_buildables::hide_buildable_table_model( "turret_buildable_trigger" ); + electric_trap_spool = generate_zombie_buildable_piece( "electric_trap", "p6_zm_buildable_etrap_base", 32, 64, 0, "zm_hud_icon_coil", ::onpickup_common, ::ondrop_common, undefined, "tag_part_02", undefined, 15 ); + electric_trap_coil = generate_zombie_buildable_piece( "electric_trap", "p6_zm_buildable_etrap_tvtube", 32, 64, 10, "zm_hud_icon_tvtube", ::onpickup_common, ::ondrop_common, undefined, "tag_part_01", undefined, 16 ); + electric_trap = spawnstruct(); + electric_trap.name = "electric_trap"; + electric_trap add_buildable_piece( electric_trap_spool ); + electric_trap add_buildable_piece( electric_trap_coil ); + electric_trap add_buildable_piece( battery, "tag_part_03", 0 ); + electric_trap.triggerthink = ::electrictrapbuildable; + include_buildable( electric_trap ); + maps\mp\zombies\_zm_buildables::hide_buildable_table_model( "electric_trap_buildable_trigger" ); + jetgun_wires = generate_zombie_buildable_piece( "jetgun_zm", "p6_zm_buildable_jetgun_wires", 32, 64, 0, "zm_hud_icon_jetgun_wires", ::onpickup_common, ::ondrop_common, undefined, "TAG_WIRES", undefined, 17 ); + jetgun_engine = generate_zombie_buildable_piece( "jetgun_zm", "p6_zm_buildable_jetgun_engine", 48, 64, 0, "zm_hud_icon_jetgun_engine", ::onpickup_common, ::ondrop_common, undefined, "TAG_ENGINE", undefined, 18 ); + jetgun_gauges = generate_zombie_buildable_piece( "jetgun_zm", "p6_zm_buildable_jetgun_guages", 32, 15, 0, "zm_hud_icon_jetgun_gauges", ::onpickup_common, ::ondrop_common, undefined, "TAG_DIALS", undefined, 19 ); + jetgun_handle = generate_zombie_buildable_piece( "jetgun_zm", "p6_zm_buildable_jetgun_handles", 32, 15, 0, "zm_hud_icon_jetgun_handles", ::onpickup_common, ::ondrop_common, undefined, "TAG_HANDLES", undefined, 20 ); + jetgun = spawnstruct(); + jetgun.name = "jetgun_zm"; + jetgun add_buildable_piece( jetgun_wires ); + jetgun add_buildable_piece( jetgun_engine ); + jetgun add_buildable_piece( jetgun_gauges ); + jetgun add_buildable_piece( jetgun_handle ); + jetgun.onbuyweapon = ::onbuyweapon_jetgun; + jetgun.triggerthink = ::jetgunbuildable; + include_buildable( jetgun ); + maps\mp\zombies\_zm_buildables::hide_buildable_table_model( "jetgun_zm_buildable_trigger" ); + cattlecatcher_plow = generate_zombie_buildable_piece( "cattlecatcher", "veh_t6_civ_bus_zombie_cow_catcher", 72, 100, 20, "zm_hud_icon_plow", ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, 21 ); + bushatch_hatch = generate_zombie_buildable_piece( "bushatch", "veh_t6_civ_bus_zombie_roof_hatch", 32, 64, 5, "zm_hud_icon_hatch", ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, 22 ); + busladder_ladder = generate_zombie_buildable_piece( "busladder", "com_stepladder_large_closed", 32, 64, 0, "zm_hud_icon_ladder", ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, 23 ); + cattlecatcher = spawnstruct(); + cattlecatcher.name = "cattlecatcher"; + cattlecatcher add_buildable_piece( cattlecatcher_plow ); + cattlecatcher.triggerthink = ::cattlecatcherbuildable; + include_buildable( cattlecatcher ); + bushatch = spawnstruct(); + bushatch.name = "bushatch"; + bushatch add_buildable_piece( bushatch_hatch, undefined, 1 ); + bushatch.triggerthink = ::bushatchbuildable; + include_buildable( bushatch ); + dinerhatch = spawnstruct(); + dinerhatch.name = "dinerhatch"; + dinerhatch add_buildable_piece( bushatch_hatch, undefined, 1 ); + dinerhatch.triggerthink = ::dinerhatchbuildable; + include_buildable( dinerhatch ); + busladder = spawnstruct(); + busladder.name = "busladder"; + busladder add_buildable_piece( busladder_ladder ); + busladder.triggerthink = ::busladderbuildable; + include_buildable( busladder ); + + if ( !isdefined( level.gamedifficulty ) || level.gamedifficulty != 0 ) + { + sq_common_electricbox = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_electric_box", 32, 64, 0, "zm_hud_icon_sq_powerbox", ::onpickup_common, ::ondrop_common, undefined, "tag_part_02", undefined, 24 ); + sq_common_meteor = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_meteor", 76, 64, 0, "zm_hud_icon_sq_meteor", ::onpickup_common, ::ondrop_common, undefined, "tag_part_04", undefined, 25 ); + sq_common_scaffolding = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_scaffolding", 64, 96, 0, "zm_hud_icon_sq_scafold", ::onpickup_common, ::ondrop_common, undefined, "tag_part_01", undefined, 26 ); + sq_common_transceiver = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_transceiver", 64, 96, 0, "zm_hud_icon_sq_tranceiver", ::onpickup_common, ::ondrop_common, undefined, "tag_part_03", undefined, 27 ); + sqcommon = spawnstruct(); + sqcommon.name = "sq_common"; + sqcommon add_buildable_piece( sq_common_electricbox ); + sqcommon add_buildable_piece( sq_common_meteor ); + sqcommon add_buildable_piece( sq_common_scaffolding ); + sqcommon add_buildable_piece( sq_common_transceiver ); + sqcommon.triggerthink = ::sqcommonbuildable; + include_buildable( sqcommon ); + maps\mp\zombies\_zm_buildables::hide_buildable_table_model( "sq_common_buildable_trigger" ); + } +} + +sqcommonbuildable() +{ + level.sq_buildable = maps\mp\zombies\_zm_buildables::buildable_trigger_think( "sq_common_buildable_trigger", "sq_common", "sq_common", "", 1, 0 ); +} + +busladderbuildable() +{ + blb = maps\mp\zombies\_zm_buildables::vehicle_buildable_trigger_think( level.the_bus, "bus_ladder_trigger", "busladder", "busladder", "", 0, 0 ); + blb.require_look_at = 0; + blb.custom_buildablestub_update_prompt = ::busisonormovingbuildableupdateprompt; +} + +busisonormovingbuildableupdateprompt( player, sethintstringnow, buildabletrigger ) +{ + if ( isdefined( player.isonbus ) && player.isonbus || level.the_bus getspeedmph() > 0.0 ) + { + if ( isdefined( self ) ) + { + self.hint_string = ""; + + if ( isdefined( sethintstringnow ) && sethintstringnow && isdefined( buildabletrigger ) ) + buildabletrigger sethintstring( self.hint_string ); + } + + return false; + } + + return true; +} + +bushatchbuildable() +{ + bhb = maps\mp\zombies\_zm_buildables::vehicle_buildable_trigger_think( level.the_bus, "bus_hatch_bottom_trigger", "bushatch", "bushatch", "", 0, 0 ); + bhb.require_look_at = 0; +} + +dinerhatchbuildable() +{ + dhb = maps\mp\zombies\_zm_buildables::buildable_trigger_think( "diner_hatch_trigger", "dinerhatch", "dinerhatch", "", 1, 0 ); + dhb.require_look_at = 0; +} + +cattlecatcherbuildable() +{ + ccb = maps\mp\zombies\_zm_buildables::vehicle_buildable_trigger_think( level.the_bus, "trigger_plow", "cattlecatcher", "cattlecatcher", "", 0, 0 ); + ccb.require_look_at = 0; + ccb.custom_buildablestub_update_prompt = ::busisonormovingbuildableupdateprompt; +} + +papbuildable() +{ + maps\mp\zombies\_zm_buildables::buildable_trigger_think( "pap_buildable_trigger", "pap", "pap", "", 1, 0 ); +} + +riotshieldbuildable() +{ + maps\mp\zombies\_zm_buildables::buildable_trigger_think( "riotshield_zm_buildable_trigger", "riotshield_zm", "riotshield_zm", &"ZOMBIE_GRAB_RIOTSHIELD", 1, 1 ); +} + +powerswitchbuildable() +{ + maps\mp\zombies\_zm_buildables::buildable_trigger_think( "powerswitch_buildable_trigger", "powerswitch", "powerswitch", "", 1, 0 ); +} + +turbinebuildable() +{ + level.turbine_buildable = maps\mp\zombies\_zm_buildables::buildable_trigger_think( "turbine_buildable_trigger", "turbine", "equip_turbine_zm", &"ZOMBIE_GRAB_TURBINE_PICKUP_HINT_STRING", 1, 1 ); +} + +turretbuildable() +{ + maps\mp\zombies\_zm_buildables::buildable_trigger_think( "turret_buildable_trigger", "turret", "equip_turret_zm", &"ZOMBIE_GRAB_TURRET_PICKUP_HINT_STRING", 1, 1 ); +} + +electrictrapbuildable() +{ + maps\mp\zombies\_zm_buildables::buildable_trigger_think( "electric_trap_buildable_trigger", "electric_trap", "equip_electrictrap_zm", &"ZOMBIE_GRAB_ELECTRICTRAP", 1, 1 ); +} + +jetgunbuildable() +{ + level.jetgun_buildable = maps\mp\zombies\_zm_buildables::buildable_trigger_think( "jetgun_zm_buildable_trigger", "jetgun_zm", "jetgun_zm", &"ZOMBIE_GRAB_JETGUN", 1, 1 ); +} + +ondrop_common( player ) +{ +/# + println( "ZM >> Common part callback onDrop()" ); +#/ + self droponbus( player ); + self.piece_owner = undefined; +} + +onpickup_common( player ) +{ +/# + println( "ZM >> Common part callback onPickup()" ); +#/ + player playsound( "zmb_buildable_pickup" ); + self pickupfrombus(); + self.piece_owner = player; + + if ( isdefined( self.buildablename ) ) + { + if ( self.buildablename == "turbine" ) + check_for_buildable_turbine_vox( level.turbine_buildable, 0 ); + else if ( self.buildablename == "jetgun_zm" ) + check_for_buildable_jetgun_vox( level.jetgun_buildable, 0 ); + } +} + +onbuyweapon_riotshield( player ) +{ + if ( isdefined( player.player_shield_reset_health ) ) + player [[ player.player_shield_reset_health ]](); + + if ( isdefined( player.player_shield_reset_location ) ) + player [[ player.player_shield_reset_location ]](); +} + +onuseplantobject_powerswitch( player ) +{ +/# + println( "ZM >> PowerSwitch Buildable CallBack onUsePlantObject()" ); +#/ + if ( !isdefined( player player_get_buildable_piece() ) ) + return; + + switch ( player player_get_buildable_piece().modelname ) + { + case "p6_zm_buildable_pswitch_hand": + getent( "powerswitch_p6_zm_buildable_pswitch_hand", "targetname" ) show(); + break; + case "p6_zm_buildable_pswitch_body": + panel = getent( "powerswitch_p6_zm_buildable_pswitch_body", "targetname" ); + panel show(); + break; + case "p6_zm_buildable_pswitch_lever": + getent( "powerswitch_p6_zm_buildable_pswitch_lever", "targetname" ) show(); + break; + } +} + +onuseplantobject_turbine( player ) +{ +/# + println( "ZM >> Turbine Buildable CallBack onUsePlantObject()" ); +#/ + buildable = self.buildablezone; + first_part = "tag_part_03"; + second_part = "tag_part_02"; + + for ( i = 0; i < buildable.pieces.size; i++ ) + { + if ( buildable.pieces[i].part_name == first_part ) + { + if ( isdefined( buildable.pieces[i].built ) && buildable.pieces[i].built || player player_get_buildable_piece().part_name == first_part ) + { + buildable.stub.model showpart( second_part ); + continue; + } + + buildable.stub.model hidepart( second_part ); + } + } + + check_for_buildable_turbine_vox( level.turbine_buildable, 1 ); +} + +check_for_buildable_turbine_vox( stub, start_build_counter ) +{ + if ( isdefined( level.maxis_turbine_vox_played ) && level.maxis_turbine_vox_played ) + return; + + buildable = stub.buildablezone; + piece_counter = 0; + build_counter = start_build_counter; + + for ( i = 0; i < buildable.pieces.size; i++ ) + { + if ( isdefined( buildable.pieces[i].built ) && buildable.pieces[i].built || isdefined( buildable.pieces[i].piece_owner ) ) + piece_counter++; + + if ( isdefined( buildable.pieces[i].built ) && buildable.pieces[i].built ) + build_counter++; + } + + if ( build_counter >= 2 && piece_counter == 3 ) + { + if ( !flag( "power_on" ) ) + { + level.maxis_turbine_vox_played = 1; + level thread maps\mp\zm_transit_sq::maxissay( "vox_maxi_turbine_final_0", stub.origin ); + } + } +} + +onbuyweapon_jetgun( player ) +{ + player switchtoweapon( self.stub.weaponname ); +} + +check_for_buildable_jetgun_vox( stub, start_build_counter ) +{ + if ( isdefined( level.rich_jetgun_vox_played ) && level.rich_jetgun_vox_played || !flag( "power_on" ) ) + return; + + buildable = stub.buildablezone; + piece_counter = 0; + build_counter = start_build_counter; + + for ( i = 0; i < buildable.pieces.size; i++ ) + { + if ( isdefined( buildable.pieces[i].built ) && buildable.pieces[i].built || isdefined( buildable.pieces[i].piece_owner ) ) + piece_counter++; + + if ( isdefined( buildable.pieces[i].built ) && buildable.pieces[i].built ) + build_counter++; + } + + if ( build_counter == 3 && piece_counter == 4 ) + level thread maps\mp\zm_transit_sq::richtofensay( "vox_zmba_sidequest_jet_last_0" ); + else if ( build_counter == 4 ) + level thread maps\mp\zm_transit_sq::richtofensay( "vox_zmba_sidequest_jet_complete_0" ); +} + +onenduse_sidequestcommon( team, player, result ) +{ + if ( isdefined( result ) && result ) + { + if ( isdefined( level.sq_clip ) ) + { + level.sq_clip trigger_on(); + level.sq_clip connectpaths(); + } + } +} + +droponbus( player ) +{ + if ( isdefined( player ) && ( isdefined( player.isonbus ) && player.isonbus ) ) + { + self.model linkto( level.the_bus ); + self.linked_to_bus = 1; + self.unitrigger.link_parent = level.the_bus; + } + else + self.unitrigger.link_parent = undefined; +} + +pickupfrombus() +{ + if ( isdefined( self.linked_to_bus ) && self.linked_to_bus ) + { + if ( isdefined( self.model ) ) + self.model unlink(); + + self.linked_to_bus = undefined; + } + + if ( isdefined( self.unitrigger ) ) + self.unitrigger.link_parent = undefined; +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_bus.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_bus.gsc new file mode 100644 index 0000000..1c1e307 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_bus.gsc @@ -0,0 +1,3359 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zm_transit_utility; +#include maps\mp\zm_transit_automaton; +#include maps\mp\zm_transit_cling; +#include maps\mp\zm_transit_openings; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zm_transit_ambush; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_weap_emp_bomb; +#include maps\mp\zm_transit_lava; +#include maps\mp\zombies\_zm_audio; + +#using_animtree("zombie_bus"); + +bussetup() +{ + flag_init( "ladder_attached" ); + flag_init( "catcher_attached" ); + flag_init( "hatch_attached" ); + self.immediatespeed = 0; + self.currentspeed = 0; + self.targetspeed = 0; + self.ismoving = 0; + self.isstopping = 0; + self.gas = 100; + self.accel = 10; + self.decel = 30; + self.radius = 88; + self.height = 240; + self.frontdist = 340; + self.backdist = 55; + self.floor = 36; + self.frontlocal = ( self.frontdist - self.radius / 2.0, 0, 0 ); + self.backlocal = ( self.backdist * -1 + self.radius / 2.0, 0, 0 ); + self.drivepath = 0; + self.zone = "zone_pri"; + self.roadzone = self.zone; + self.zombiesinside = 0; + self.zombiesatwindow = 0; + self.zombiesonroof = 0; + self.numplayers = 0; + self.numplayerson = 0; + self.numplayersonroof = 0; + self.numplayersinsidebus = 0; + self.numplayersnear = 0; + self.numaliveplayersridingbus = 0; + self.numflattires = 0; + self.doorsclosed = 1; + self.doorsdisabledfortime = 0; + self.stalled = 0; + self.issafe = 1; + self.waittimeatdestination = 0; + self.gracetimeatdestination = 10; + self.path_blocking = 0; + self.chase_pos = self.origin; + self.chase_pos_time = 0; + self.istouchingignorewindowsvolume = 0; + level.zm_mantle_over_40_move_speed_override = ::zm_mantle_over_40_move_speed_override; + self setmovingplatformenabled( 1 ); + self.supportsanimscripted = 1; + self setvehmaxspeed( 25 ); + self useanimtree( #animtree ); + level.callbackactordamage = ::transit_actor_damage_override_wrapper; + self maps\mp\zm_transit_automaton::main(); + maps\mp\zm_transit_cling::initializecling(); + self maps\mp\zm_transit_openings::main(); + self bus_upgrades(); + self thread busplowsetup(); + self buslightssetup(); + self busdoorssetup(); + self buspathblockersetup(); + self bussetupbounds(); + self bus_roof_watch(); + self bus_set_nodes(); + self bus_set_exit_triggers(); + self thread bus_audio_setup(); + level thread init_bus_door_anims(); + level thread init_bus_props_anims(); + self thread bususeanimtree(); + self thread bususedoor( 0 ); + self thread busidledoor(); + self thread play_lava_audio(); + self thread busthink(); + self thread busopeningscene(); + busschedule(); + self thread busschedulethink(); + self thread bus_bridge_speedcontrol(); + self.door_nodes_linked = 1; + self thread bussetdoornodes( 0 ); +} + +bus_upgrades() +{ + self.upgrades = []; + self.ladder_local_offset = ( 142, -50, 100 ); + self.upgrades["Plow"] = spawnstruct(); + self.upgrades["Plow"].installed = 0; +} + +bus_debug() +{ + while ( true ) + { + bus_forward = vectornormalize( anglestoforward( level.the_bus.angles ) ); + ret = level.the_bus.origin + vectorscale( bus_forward, -144 ); + groundpos = groundpos_ignore_water_new( ret + vectorscale( ( 0, 0, 1 ), 60.0 ) ); +/# + debugstar( groundpos, 1000, ( 1, 1, 1 ) ); +#/ + wait 0.5; + } +} + +bus_set_nodes() +{ + self.front_door_inside = getnode( "front_door_inside_node", "targetname" ); + self.front_door = getnode( "front_door_node", "targetname" ); + self.back_door_inside1 = getnode( "back_door_inside_node1", "targetname" ); + self.back_door_inside2 = getnode( "back_door_inside_node2", "targetname" ); + self.back_door = getnode( "back_door_node", "targetname" ); + self.exit_back_l = getnode( "exit_back_l_node", "targetname" ); + self.exit_back_r = getnode( "exit_back_r_node", "targetname" ); +} + +bus_set_exit_triggers() +{ + spawnflags = 9; + trigger_exit = []; + trigger_exit[trigger_exit.size] = spawn( "trigger_radius", self.front_door_inside.origin, spawnflags, 32, 72 ); + trigger_exit[trigger_exit.size] = spawn( "trigger_radius", self.exit_back_l.origin, spawnflags, 32, 72 ); + trigger_exit[trigger_exit.size] = spawn( "trigger_radius", self.exit_back_r.origin, spawnflags, 32, 72 ); + tags = []; + tags[0] = "window_right_front_jnt"; + tags[1] = "window_left_rear_jnt"; + tags[2] = "window_right_rear_jnt"; + + for ( i = 0; i < trigger_exit.size; i++ ) + { + trigger = trigger_exit[i]; + trigger enablelinkto(); + trigger linkto( self, "", self worldtolocalcoords( trigger.origin ), ( 0, 0, 0 ) ); + trigger setmovingplatformenabled( 1 ); + trigger setteamfortrigger( level.zombie_team ); + trigger.tag = tags[i]; + trigger.substate = i; + self thread maps\mp\zm_transit_openings::busexitthink( trigger ); + } +} + +onplayerconnect() +{ + getent( "the_bus", "targetname" ) setclientfield( "the_bus_spawned", 1 ); +} + +zm_mantle_over_40_move_speed_override() +{ + traversealias = "barrier_walk"; + + switch ( self.zombie_move_speed ) + { + case "chase_bus": + traversealias = "barrier_sprint"; + break; + default: +/# + assertmsg( "Zombie move speed of '" + self.zombie_move_speed + "' is not supported for mantle_over_40." ); +#/ + } + + return traversealias; +} + +follow_path( node ) +{ + self endon( "death" ); + assert( isdefined( node ), "vehicle_path() called without a path" ); + self notify( "newpath" ); + + if ( isdefined( node ) ) + self.attachedpath = node; + + pathstart = self.attachedpath; + self.currentnode = self.attachedpath; + + if ( !isdefined( pathstart ) ) + return; + + self attachpath( pathstart ); + self startpath(); + self endon( "newpath" ); + nextpoint = pathstart; + + while ( isdefined( nextpoint ) ) + { + self waittill( "reached_node", nextpoint ); + + self.currentnode = nextpoint; + nextpoint notify( "trigger", self ); + + if ( isdefined( nextpoint.script_noteworthy ) ) + { + self notify( nextpoint.script_noteworthy ); + self notify( "noteworthy", nextpoint.script_noteworthy, nextpoint ); + } + + if ( isdefined( nextpoint.script_string ) ) + { + if ( issubstr( nextpoint.script_string, "map_" ) ) + level thread do_player_bus_location_vox( nextpoint.script_string ); + else + level thread do_automoton_vox( nextpoint.script_string ); + } + + waittillframeend; + } +} + +busopeningscene() +{ + startnode = getvehiclenode( "BUS_OPENING", "targetname" ); + self.currentnode = startnode; + self thread follow_path( startnode ); + self.targetspeed = 0; + flag_wait( "start_zombie_round_logic" ); + self busstartmoving( 12 ); + self busstartwait(); + + self waittill( "opening_end_path" ); + + self busstopmoving(); + startnode = getvehiclenode( "BUS_START", "targetname" ); + self.currentnode = startnode; + self thread follow_path( startnode ); + + while ( !flag( "OnPriDoorYar" ) && !flag( "OnPriDoorYar2" ) ) + wait 0.5; + + level.automaton notify( "start_head_think" ); + self notify( "noteworthy", "depot", self.currentnode ); +} + +busschedule() +{ + level.busschedule = busschedulecreate(); + level.busschedule busscheduleadd( "depot", 0, randomintrange( 40, 180 ), 19, 15 ); + level.busschedule busscheduleadd( "tunnel", 1, 10, 27, 5 ); + level.busschedule busscheduleadd( "diner", 0, randomintrange( 40, 180 ), 18, 20 ); + level.busschedule busscheduleadd( "forest", 1, 10, 18, 5 ); + level.busschedule busscheduleadd( "farm", 0, randomintrange( 40, 180 ), 26, 25 ); + level.busschedule busscheduleadd( "cornfields", 1, 10, 23, 10 ); + level.busschedule busscheduleadd( "power", 0, randomintrange( 40, 180 ), 19, 15 ); + level.busschedule busscheduleadd( "power2town", 1, 10, 26, 5 ); + level.busschedule busscheduleadd( "town", 0, randomintrange( 40, 180 ), 18, 20 ); + level.busschedule busscheduleadd( "bridge", 1, 10, 23, 10 ); +/# + foreach ( index, stop in level.busschedule.destinations ) + adddebugcommand( "devgui_cmd \"Zombies:1/Bus:14/Teleport Bus:4/" + stop.name + ":" + index + "\" \"zombie_devgui teleport_bus " + stop.name + "\\n" ); +#/ +} + +busschedulethink() +{ + self endon( "death" ); + + while ( true ) + { + self waittill( "noteworthy", noteworthy, noteworthynode ); + + zoneisempty = 1; + shouldremovegas = 0; + destinationindex = level.busschedule busschedulegetdestinationindex( noteworthy ); + + if ( !isdefined( destinationindex ) || !isdefined( noteworthynode ) ) + { +/# + if ( isdefined( noteworthy ) ) + println( "^2Bus Debug: Not A Valid Destination (" + noteworthy + ")" ); + else + println( "^2Bus Debug: Not A Valid Destination" ); +#/ + continue; + } + + self.destinationindex = destinationindex; + self.waittimeatdestination = level.busschedule busschedulegetmaxwaittimebeforeleaving( self.destinationindex ); + self.currentnode = noteworthynode; + targetspeed = level.busschedule busschedulegetbusspeedleaving( self.destinationindex ); + + foreach ( zone in level.zones ) + { + if ( !isdefined( zone.volumes ) || zone.volumes.size == 0 ) + continue; + + zonename = zone.volumes[0].targetname; + + if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( zonename ) ) + { +/# + println( "^2Bus Debug: Bus Is Touching Zone (" + zonename + ")" ); +#/ + self.zone = zonename; + zonestocheck = []; + zonestocheck[zonestocheck.size] = zonename; + + switch ( zonename ) + { + case "zone_station_ext": + zonestocheck[zonestocheck.size] = "zone_trans_1"; + zonestocheck[zonestocheck.size] = "zone_pri"; + zonestocheck[zonestocheck.size] = "zone_pri2"; + zonestocheck[zonestocheck.size] = "zone_amb_bridge"; + zonestocheck[zonestocheck.size] = "zone_trans_2b"; + break; + case "zone_gas": + zonestocheck[zonestocheck.size] = "zone_trans_2"; + zonestocheck[zonestocheck.size] = "zone_amb_tunnel"; + zonestocheck[zonestocheck.size] = "zone_gar"; + zonestocheck[zonestocheck.size] = "zone_trans_diner"; + zonestocheck[zonestocheck.size] = "zone_trans_diner2"; + zonestocheck[zonestocheck.size] = "zone_diner_roof"; + zonestocheck[zonestocheck.size] = "zone_din"; + zonestocheck[zonestocheck.size] = "zone_roadside_west"; + zonestocheck[zonestocheck.size] = "zone_roadside_east"; + zonestocheck[zonestocheck.size] = "zone_trans_3"; + break; + case "zone_far": + zonestocheck[zonestocheck.size] = "zone_amb_forest"; + zonestocheck[zonestocheck.size] = "zone_far_ext"; + zonestocheck[zonestocheck.size] = "zone_farm_house"; + zonestocheck[zonestocheck.size] = "zone_brn"; + zonestocheck[zonestocheck.size] = "zone_trans_5"; + zonestocheck[zonestocheck.size] = "zone_trans_6"; + break; + case "zone_pow": + zonestocheck[zonestocheck.size] = "zone_trans_6"; + zonestocheck[zonestocheck.size] = "zone_amb_cornfield"; + zonestocheck[zonestocheck.size] = "zone_trans_7"; + zonestocheck[zonestocheck.size] = "zone_pow_ext1"; + zonestocheck[zonestocheck.size] = "zone_prr"; + zonestocheck[zonestocheck.size] = "zone_pcr"; + zonestocheck[zonestocheck.size] = "zone_pow_warehouse"; + break; + case "zone_town_north": + zonestocheck[zonestocheck.size] = "zone_trans_8"; + zonestocheck[zonestocheck.size] = "zone_amb_power2town"; + zonestocheck[zonestocheck.size] = "zone_tbu"; + zonestocheck[zonestocheck.size] = "zone_town_church"; + zonestocheck[zonestocheck.size] = "zone_bar"; + zonestocheck[zonestocheck.size] = "zone_town_east"; + zonestocheck[zonestocheck.size] = "zone_tow"; + zonestocheck[zonestocheck.size] = "zone_ban"; + zonestocheck[zonestocheck.size] = "zone_ban_vault"; + zonestocheck[zonestocheck.size] = "zone_town_west"; + zonestocheck[zonestocheck.size] = "zone_town_west2"; + zonestocheck[zonestocheck.size] = "zone_town_barber"; + zonestocheck[zonestocheck.size] = "zone_town_south"; + zonestocheck[zonestocheck.size] = "zone_trans_9"; + break; + } + + foreach ( zone in zonestocheck ) + { + if ( !( isdefined( zoneisempty ) && zoneisempty ) ) + continue; + + if ( maps\mp\zombies\_zm_zonemgr::player_in_zone( zone ) ) + { +/# + println( "^2Bus Debug: Player(s) Detected Near Bus In The Zone (" + zone + ")" ); +#/ + zoneisempty = 0; + } + } + + if ( isdefined( zoneisempty ) && zoneisempty ) + { +/# + println( "^2Bus Debug: No Player(s) Are In The Same Zone As Bus (" + zonename + ")" ); +#/ + continue; + } +/# + println( "^2Bus Debug: Player(s) Are In The Same Zone As Bus (" + zonename + ")" ); +#/ + } + } + + if ( isdefined( shouldremovegas ) && shouldremovegas ) + self busgasremove( level.busschedule busschedulegetbusgasusage( self.destinationindex ) ); + + if ( isdefined( zoneisempty ) && zoneisempty ) + { +/# + println( "^2Bus Debug: Bus Won't Consider Stopping Since Zone Is Empty." ); +#/ + self busstartmoving( targetspeed ); + continue; + } + + if ( isdefined( self.skip_next_destination ) && self.skip_next_destination ) + { +/# + println( "^2Bus Debug: Bus Won't Consider Stopping Since It's Skipping Destination." ); +#/ + self notify( "skipping_destination" ); + self busstartmoving( targetspeed ); + continue; + } + else + { +/# + println( "^2Bus Debug: Bus Will Consider Stopping, Someone Is Nearby." ); +#/ + } + + if ( level.busschedule busschedulegetisambushstop( self.destinationindex ) ) + { +/# + println( "^2Bus Debug: Arrived At Ambush Point." ); +#/ + if ( maps\mp\zm_transit_ambush::shouldstartambushround() && self.numplayersinsidebus != 0 ) + { +/# + println( "^2Bus Debug: Ambush Triggering" ); +#/ + self busstopmoving( 1 ); + level.nml_zone_name = "zone_amb_" + noteworthy; + thread maps\mp\zm_transit_ambush::ambushstartround(); + thread automatonspeak( "inform", "out_of_gas" ); + flag_waitopen( "ambush_round" ); + shouldremovegas = 1; + thread automatonspeak( "inform", "refueled_gas" ); + } + else + { +/# + println( "^2Bus Debug: Over Ambush Point But No BreakDown Triggered." ); +#/ + continue; + } + } + else + { +/# + println( "^2Bus Debug: Arrived At Destination" ); +#/ + self notify( "reached_destination" ); + shouldremovegas = 1; + thread do_automaton_arrival_vox( noteworthy ); + + if ( noteworthy == "diner" || noteworthy == "town" || noteworthy == "power" ) + { + self busstopmoving( 1 ); + + if ( noteworthy == "diner" ) + self bussetdineropenings( 0 ); + else if ( noteworthy == "power" ) + self bussetpoweropenings( 0 ); + else if ( noteworthy == "town" ) + self bussettownopenings( 0 ); + } + else + self busstopmoving(); + + self thread busscheduledepartearly(); + } + + waittimeatdestination = self.waittimeatdestination; +/# + if ( getdvarint( _hash_1CF9CD76 ) != 0 ) + { + println( "^2Bus Debug: Using custom wait time of: " + getdvarint( _hash_1CF9CD76 ) + " seconds." ); + waittimeatdestination = getdvarint( _hash_1CF9CD76 ); + } + + if ( getdvarint( _hash_FA81816F ) > 0 ) + thread busshowleavinghud( waittimeatdestination ); +#/ + self waittill_any_timeout( waittimeatdestination, "depart_early" ); +/# + while ( getdvarint( _hash_F7C16264 ) ) + wait 0.1; +#/ + self notify( "ready_to_depart" ); + self thread buslightsflash(); + self thread buslightsignal( "turn_signal_left" ); + thread automatonspeak( "inform", "leaving_warning" ); + self thread play_bus_audio( "grace" ); + wait( self.gracetimeatdestination ); + thread automatonspeak( "inform", "leaving" ); + self.accel = 1; + self busstartmoving( targetspeed ); + self notify( "departing" ); + self setclientfield( "bus_flashing_lights", 0 ); + } +} + +busscheduledepartearly() +{ + self endon( "ready_to_depart" ); + wait 15; + triggerbuswait = 0; + + while ( true ) + { + if ( isdefined( self.disabled_by_emp ) && self.disabled_by_emp ) + { + wait 1; + continue; + } + + players = get_players(); + nearbyplayers = 0; + readytoleaveplayers = 0; + + foreach ( player in players ) + { + if ( !is_player_valid( player ) ) + continue; + + if ( distancesquared( self.origin, player.origin ) < 262144 ) + { + nearbyplayers++; + + if ( player.isonbus ) + readytoleaveplayers++; + } + } + + if ( readytoleaveplayers != 0 && readytoleaveplayers == nearbyplayers ) + { + if ( !triggerbuswait ) + { + wait 5; + triggerbuswait = 1; + } + else + { + self notify( "depart_early" ); +/# + if ( isdefined( level.bus_leave_hud ) ) + level.bus_leave_hud.alpha = 0; +#/ + return; + } + } + else if ( triggerbuswait ) + triggerbuswait = 0; + + wait 1; + } +} + +busschedulecreate() +{ + schedule = spawnstruct(); + schedule.destinations = []; + return schedule; +} + +busscheduleadd( stopname, isambush, maxwaittimebeforeleaving, busspeedleaving, gasusage ) +{ + assert( isdefined( stopname ) ); + assert( isdefined( isambush ) ); + assert( isdefined( maxwaittimebeforeleaving ) ); + assert( isdefined( busspeedleaving ) ); + destinationindex = self.destinations.size; + self.destinations[destinationindex] = spawnstruct(); + self.destinations[destinationindex].name = stopname; + self.destinations[destinationindex].isambush = isambush; + self.destinations[destinationindex].maxwaittimebeforeleaving = maxwaittimebeforeleaving; + self.destinations[destinationindex].busspeedleaving = busspeedleaving; + self.destinations[destinationindex].gasusage = gasusage; +} + +busschedulegetdestinationindex( stopname ) +{ + foreach ( index, stop in self.destinations ) + { + if ( stop.name != stopname ) + continue; + + return index; + } + + return undefined; +} + +busschedulegetstopname( destinationindex ) +{ + return self.destinations[destinationindex].name; +} + +busschedulegetisambushstop( destinationindex ) +{ + return self.destinations[destinationindex].isambush; +} + +busschedulegetmaxwaittimebeforeleaving( destinationindex ) +{ + return self.destinations[destinationindex].maxwaittimebeforeleaving; +} + +busschedulegetbusspeedleaving( destinationindex ) +{ + return self.destinations[destinationindex].busspeedleaving; +} + +busschedulegetbusgasusage( destinationindex ) +{ + return self.destinations[destinationindex].gasusage; +} + +transit_actor_damage_override_wrapper( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + if ( damage > self.health && ( isdefined( self.isonbus ) && self.isonbus ) ) + { + ret = self maps\mp\zombies\_zm::actor_damage_override_wrapper( inflictor, attacker, self.health - 1, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + self zombie_in_bus_death_animscript_callback( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + return ret; + } + + return self maps\mp\zombies\_zm::actor_damage_override_wrapper( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); +} + +zombie_in_bus_death_animscript_callback( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + if ( isdefined( self ) && isdefined( self.opening ) ) + self.opening.zombie = undefined; + + if ( isdefined( self.exploding ) && self.exploding ) + { + self notify( "killanimscript" ); + self maps\mp\zombies\_zm_spawner::reset_attack_spot(); + return true; + } + + if ( isdefined( self ) && ( isdefined( self.isonbus ) && self.isonbus || isdefined( self.onbuswindow ) && self.onbuswindow || isdefined( self.climbing_into_bus ) && self.climbing_into_bus || isdefined( self.climbing_onto_bus ) && self.climbing_onto_bus ) ) + { + level maps\mp\zombies\_zm_spawner::zombie_death_points( self.origin, meansofdeath, shitloc, attacker, self ); + launchvector = undefined; + + if ( isdefined( self.onbuswindow ) && self.onbuswindow && !( isdefined( self.climbing_into_bus ) && self.climbing_into_bus ) || isdefined( self.climbing_onto_bus ) && self.climbing_onto_bus ) + { + fwd = anglestoforward( flat_angle( self.angles * -1 ) ); + my_velocity = vectorscale( fwd, 50 ); + launchvector = ( my_velocity[0], my_velocity[1], 20 ); + } + + self thread maps\mp\zombies\_zm_spawner::zombie_ragdoll_then_explode( launchvector, attacker ); + self notify( "killanimscript" ); + self maps\mp\zombies\_zm_spawner::reset_attack_spot(); + return true; + } + + return false; +} + +debug_busnear() +{ +/# + if ( getdvarint( _hash_29B9C39F ) > 0 ) + { + zombie_front_dist = 1200.0; + zombie_side_dist = self.radius + 50.0; + zombie_inside_dist = 240.0; + zombie_plow_dist = 340.0; + forward_dir = anglestoforward( self.angles ); + forward_proj = vectorscale( forward_dir, zombie_front_dist ); + forward_pos = self.origin + forward_proj; + backward_proj = vectorscale( forward_dir, zombie_inside_dist * -1.0 ); + backward_pos = self.origin + backward_proj; + bus_front_dist = 225.0; + bus_back_dist = 235.0; + bus_width = 120.0; + side_dir = anglestoforward( self.angles + vectorscale( ( 0, 1, 0 ), 90.0 ) ); + side_proj = vectorscale( side_dir, zombie_side_dist ); + inside_pos = self.origin + vectorscale( forward_dir, zombie_inside_dist ); + plow_pos = self.origin + vectorscale( forward_dir, zombie_plow_dist ); + line( backward_pos, forward_pos, ( 1, 1, 1 ), 1, 0, 2 ); + line( inside_pos - side_proj, inside_pos + side_proj, ( 1, 1, 1 ), 1, 0, 2 ); + line( plow_pos - side_proj, plow_pos + side_proj, ( 1, 1, 1 ), 1, 0, 2 ); + } +#/ +} + +debug_zombieonbus( zombie ) +{ +/# + if ( getdvarint( _hash_29B9C39F ) > 0 ) + { + zombie_front_dist = 1200.0; + zombie_side_dist = self.radius + 50.0; + zombie_inside_dist = 240.0; + zombie_plow_dist = 340.0; + forward_dir = anglestoforward( self.angles ); + forward_proj = vectorscale( forward_dir, zombie_front_dist ); + forward_pos = self.origin + forward_proj; + backward_proj = vectorscale( forward_dir, zombie_inside_dist * -1.0 ); + backward_pos = self.origin + backward_proj; + zombie_origin = zombie.origin; + zombie_origin_proj = pointonsegmentnearesttopoint( backward_pos, forward_pos, zombie_origin ); + + if ( isdefined( zombie.isonbus ) && zombie.isonbus ) + line( zombie_origin_proj, zombie_origin, ( 0, 1, 0 ), 1, 0, 2 ); + else + line( zombie_origin_proj, zombie_origin, ( 1, 0, 0 ), 1, 0, 2 ); + } +#/ +} + +busupdatenearzombies() +{ + level endon( "end_game" ); + audiozomonbus_old = 0; + audiozomonbus_new = 0; + zombiesatwindow_old = 0; + zombiesatwindow_new = 0; + zombiesonroof_old = 0; + zombiesonroof_new = 0; + zombiesclimbing_new = 0; + zombiesclimbing_old = 0; + + while ( true ) + { + self.zombiesinside = 0; + self.zombies_climbing = 0; + self.zombies_chasing_bus = 0; + self.zombiesatwindow = 0; + self.zombiesonroof = 0; + self.zombies_near_bus = 0; +/# + self debug_busnear(); +#/ + zombies = get_round_enemy_array(); + + if ( isdefined( zombies ) ) + { + for ( i = 0; i < zombies.size; i++ ) + { + if ( !isdefined( zombies[i] ) ) + continue; + + zombie = zombies[i]; + + if ( !( isdefined( zombie.completed_emerging_into_playable_area ) && zombie.completed_emerging_into_playable_area ) ) + continue; + + if ( isdefined( zombie.isscreecher ) && zombie.isscreecher || isdefined( zombie.is_avogadro ) && zombie.is_avogadro ) + continue; + + if ( !isdefined( zombie.isonbus ) ) + zombie.isonbus = 0; + + zombie.ground_ent = zombie getgroundent(); + + if ( isdefined( zombie.ground_ent ) ) + { + if ( isdefined( zombie.ground_ent.isonbus ) && zombie.ground_ent.isonbus ) + zombie.isonbus = 1; + else + { + groundname = zombie.ground_ent.targetname; + + if ( isdefined( groundname ) ) + { + if ( groundname == level.the_bus.targetname || groundname == "bus_path_blocker" || groundname == "hatch_clip" ) + { + zombie.dont_throw_gib = 1; + zombie.isonbus = 1; + + if ( isdefined( zombie.entering_bus ) && zombie.entering_bus ) + zombie.entering_bus = undefined; + } + else + zombie.isonbus = 0; + } + else + zombie.isonbus = 0; + } + } + + if ( isdefined( zombie.entering_bus ) && zombie.entering_bus ) + zombie.isonbus = 1; + + zombie.isonbusroof = zombie _entityisonroof(); + + if ( isdefined( zombie.isonbusroof ) && zombie.isonbusroof ) + zombie thread play_zmbonbusroof_sound(); + + if ( isdefined( zombie.isonbus ) && zombie.isonbus ) + { + if ( !( isdefined( zombie.entering_bus ) && zombie.entering_bus ) ) + { + if ( !isdefined( zombie.onbusfunc ) ) + { + zombie.onbusfunc = maps\mp\zm_transit_openings::zombiemoveonbus; + zombie thread [[ zombie.onbusfunc ]](); + } + } + } + else if ( isdefined( zombie.onbusfunc ) ) + { + zombie.onbusfunc = undefined; + zombie notify( "endOnBus" ); + zombie animmode( "normal" ); + zombie orientmode( "face enemy" ); + zombie.forcemovementscriptstate = 0; + zombie thread maps\mp\zombies\_zm_ai_basic::find_flesh(); + } + + if ( isdefined( zombie.isonbus ) && zombie.isonbus ) + self.zombiesinside++; + else if ( isdefined( zombie.onbuswindow ) && zombie.onbuswindow ) + self.zombiesatwindow++; + else if ( isdefined( zombie.isonbusroof ) && zombie.isonbusroof ) + self.zombiesonroof++; + else if ( isdefined( zombie.climbing_into_bus ) && zombie.climbing_into_bus ) + self.zombies_climbing++; + else if ( distancesquared( zombie.origin, self.origin ) < 122500 ) + { + if ( zombie.zombie_move_speed == "chase_bus" ) + self.zombies_chasing_bus++; + + self.zombies_near_bus++; + } + + if ( self.zombies_near_bus && !self.zombiesinside && !self.zombiesatwindow && !self.zombies_climbing & !self.zombiesonroof ) + level.bus_driver_focused = 1; + else + level.bus_driver_focused = 0; + + if ( self.zombiesinside || self.zombiesatwindow || self.zombies_climbing || self.zombiesonroof || self.zombies_near_bus ) + level.bus_zombie_danger = 1; + else + level.bus_zombie_danger = 0; + + if ( self.ismoving && self getspeedmph() > 5 ) + { + if ( isdefined( self.plowtrigger ) ) + { + if ( zombie istouching( self.plowtrigger ) ) + { +/# + println( "^2Transit Debug: Plow killing zombie." ); +#/ + self thread busplowkillzombie( zombie ); + continue; + } + } + else if ( isdefined( self.bussmashtrigger ) ) + { + if ( !isdefined( zombie.opening ) && !( isdefined( zombie.isonbus ) && zombie.isonbus ) && zombie istouching( self.bussmashtrigger ) ) + { +/# + println( "^2Transit Debug: Plow pushing zombie." ); +#/ + self thread buspushzombie( zombie, self.bussmashtrigger ); + continue; + } + } + } + + self update_zombie_move_speed( zombie ); +/# + self debug_zombieonbus( zombie ); +#/ + if ( i % 4 == 3 ) + wait 0.05; + } + } + + audiozomonbus_new = self.zombiesinside; + zombiesatwindow_new = self.zombiesatwindow; + zombiesonroof_new = self.zombiesonroof; + zombiesclimbing_new = self.zombies_climbing; + self zomonbusvox( audiozomonbus_old, audiozomonbus_new ); + self zomatwindowvox( zombiesatwindow_old, zombiesatwindow_new ); + self zomonroofvox( zombiesonroof_old, zombiesonroof_new ); + self zomclimbingvox( zombiesclimbing_old, zombiesclimbing_new ); + self zomchasingvox(); + audiozomonbus_old = audiozomonbus_new; + zombiesatwindow_old = zombiesatwindow_new; + zombiesonroof_old = zombiesonroof_new; + zombiesclimbing_old = zombiesclimbing_new; + wait 0.05; + } +} + +entity_is_on_bus( use_cache ) +{ + if ( isdefined( self.isonbus ) && ( isdefined( use_cache ) && use_cache ) ) + return self.isonbus; + + self.isonbus = 0; + self.ground_ent = self getgroundent(); + + if ( isdefined( self.ground_ent ) ) + { + groundname = self.ground_ent.targetname; + + if ( isdefined( groundname ) ) + { + if ( groundname == level.the_bus.targetname || groundname == "bus_path_blocker" || groundname == "hatch_clip" ) + self.isonbus = 1; + } + } + + return self.isonbus; +} + +busupdatechasers() +{ + while ( true ) + { + if ( isdefined( self.ismoving ) && self.ismoving && ( isdefined( self.exceed_chase_speed ) && self.exceed_chase_speed ) ) + { + max_speed = 0; + zombies = getaiarray( level.zombie_team ); + slow_zombies = []; + + foreach ( zombie in zombies ) + { + if ( isdefined( zombie.zombie_move_speed ) && zombie.zombie_move_speed == "chase_bus" && !( isdefined( zombie.close_to_bus ) && zombie.close_to_bus ) && !isdefined( zombie.opening ) ) + { + substate = zombie getanimsubstatefromasd(); + + if ( substate == 6 ) + { + max_speed++; + continue; + } + + slow_zombies[slow_zombies.size] = zombie; + } + } + + if ( max_speed < 3 ) + { + speed_up = 3 - max_speed; + + if ( speed_up > slow_zombies.size ) + speed_up = slow_zombies.size; + + foreach ( zombie in slow_zombies ) + { + zombie setanimstatefromasd( "zm_move_chase_bus", 6 ); + speed_up--; + + if ( speed_up <= 0 ) + break; + } + } + } + + wait 0.25; + } +} + +play_zmbonbusroof_sound() +{ + if ( !( isdefined( self.sndbusroofplayed ) && self.sndbusroofplayed ) ) + { + self playsound( "fly_step_zombie_bus" ); + self.sndbusroofplayed = 1; + } +} + +object_is_on_bus() +{ + ground_ent = self getgroundent(); + + for ( depth = 0; isdefined( ground_ent ) && depth < 2; depth++ ) + { + groundname = ground_ent.targetname; + + if ( isdefined( groundname ) ) + { + if ( groundname == level.the_bus.targetname || groundname == "bus_path_blocker" || groundname == "hatch_clip" ) + return true; + } + + new_ground_ent = ground_ent getgroundent(); + + if ( !isdefined( new_ground_ent ) || new_ground_ent == ground_ent ) + break; + + ground_ent = new_ground_ent; + } + + return false; +} + +busupdatenearequipment() +{ + equipment = maps\mp\zombies\_zm_equipment::get_destructible_equipment_list(); + + for ( i = 0; i < equipment.size; i++ ) + { + item = equipment[i]; + + if ( !isdefined( item ) ) + continue; + + if ( isdefined( item.isonbus ) && item.isonbus ) + continue; + + if ( isdefined( self.bussmashtrigger ) && item istouching( self.bussmashtrigger ) ) + { + item maps\mp\zombies\_zm_equipment::item_damage( 10000 ); +/# + println( "^2Bus hit an item." ); +#/ + } + } +} + +update_zombie_move_speed( zombie ) +{ + if ( !( isdefined( zombie.completed_emerging_into_playable_area ) && zombie.completed_emerging_into_playable_area ) ) + return; + + if ( !isdefined( zombie.normal_move_speed ) ) + zombie.normal_move_speed = 1; + + if ( !zombie.has_legs ) + return; + + enemyonbus = isdefined( zombie.favoriteenemy ) && ( isdefined( zombie.favoriteenemy.isonbus ) && zombie.favoriteenemy.isonbus ); + + if ( isdefined( zombie.isonbus ) && zombie.isonbus ) + { + if ( zombie.normal_move_speed ) + zombie.normal_move_speed = 0; + + walk_state = zombie.zombie_move_speed; + + if ( self.ismoving && !( isdefined( self.disabled_by_emp ) && self.disabled_by_emp ) ) + { + if ( zombie.zombie_move_speed != "bus_walk" ) + walk_state = "bus_walk"; + } + else if ( zombie.zombie_move_speed != "walk" ) + walk_state = "walk"; + + if ( zombie.zombie_move_speed != walk_state ) + zombie set_zombie_run_cycle( walk_state ); + + return; + } + else if ( enemyonbus && !isdefined( zombie.opening ) ) + { + if ( self should_chase_bus( zombie ) ) + { + if ( zombie.zombie_move_speed != "chase_bus" ) + { + zombie.normal_move_speed = 0; + zombie set_zombie_run_cycle( "chase_bus" ); + zombie.crawl_anim_override = ::normal_move_speed; + } + + return; + } + else if ( zombie.zombie_move_speed == "chase_bus" ) + { + dist_sq = distance2dsquared( self.origin, level.the_bus.origin ); + + if ( dist_sq > 90000 ) + return; + } + } + + if ( !zombie.normal_move_speed ) + zombie normal_move_speed(); +} + +should_chase_bus( zombie ) +{ + if ( !self.ismoving ) + return false; + + if ( !( isdefined( self.exceed_chase_speed ) && self.exceed_chase_speed ) ) + return false; + + if ( isdefined( self.disabled_by_emp ) && self.disabled_by_emp ) + return false; + + if ( isdefined( zombie.is_inert ) && zombie.is_inert ) + return false; + + if ( isdefined( zombie.is_traversing ) && zombie.is_traversing ) + return false; + + if ( !flag( "OnPriDoorYar2" ) ) + { + if ( !flag( "OnPriDoorYar" ) || !flag( "OnPriDoorYar3" ) ) + { + if ( zombie maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_pri" ) ) + return false; + } + } + + return true; +} + +normal_move_speed() +{ + self.normal_move_speed = 1; + self set_zombie_run_cycle(); +} + +plowhudfade( text ) +{ + level endon( "plowHudUpdate" ); + fadein = 0.1; + fadeout = 3; + level.hudbuscount fadeovertime( fadein ); + level.hudbuscount.alpha = 1.0; + level.hudbuscount settext( text ); + wait( fadein ); + level.hudbuscount fadeovertime( 3.0 ); + level.hudbuscount.alpha = 0.0; +} + +busupdatespeed() +{ + targetspeed = self.targetspeed; + + if ( is_false( self.ismoving ) ) + targetspeed = 0; + + if ( isdefined( self.forcestop ) && self.forcestop ) + targetspeed = 0; + + if ( isdefined( self.stalled ) && self.stalled ) + targetspeed = 0; + + if ( isdefined( self.disabled_by_emp ) && self.disabled_by_emp ) + targetspeed = 0; + + if ( targetspeed < 0 ) + targetspeed = 0; + + if ( self.currentspeed != targetspeed ) + { + self.currentspeed = targetspeed; + + if ( isdefined( self.immediatespeed ) && self.immediatespeed ) + { + self setspeedimmediate( targetspeed, self.accel, self.decel ); + self.immediatespeed = undefined; + } + else if ( targetspeed == 0 ) + self setspeed( 0, 30, 30 ); + else + self setspeed( targetspeed, self.accel, self.decel ); + } +/# + if ( getdvarint( _hash_6152C9EA ) > 0 ) + { + msgorigin = self localtoworldcoords( vectorscale( ( 0, 0, 1 ), 100.0 ) ); + msgtext = "speed " + self getspeedmph(); + print3d( msgorigin, msgtext, ( 1, 1, 1 ), 1, 0.5, 2 ); + } +#/ +} + +bus_power_off() +{ + self endon( "power_on" ); + self.pre_disabled_by_emp = 1; + self thread play_bus_audio( "emp" ); + self buslightsdisableall(); + self notify( "pre_power_off" ); + + if ( isdefined( self.ismoving ) && self.ismoving ) + { + while ( isdefined( self.istouchingignorewindowsvolume ) && self.istouchingignorewindowsvolume ) + wait 0.1; + } + + self.disabled_by_emp = 1; + self thread buspathblockerenable(); + self notify( "power_off" ); +} + +bus_power_on() +{ + self buslightsenableall(); + wait 2; + self.pre_disabled_by_emp = 0; + self.disabled_by_emp = 0; + self thread buspathblockerdisable(); + self notify( "power_on" ); + wait 0.25; + self thread play_bus_audio( "leaving" ); + wait 3; + level.automaton automatonspeak( "inform", "doors_open" ); +} + +bus_disabled_by_emp( disable_time ) +{ + self bus_power_off(); + wait( disable_time - 2 ); + self bus_power_on(); +} + +busispointinside( entitypos ) +{ + entityposinbus = pointonsegmentnearesttopoint( self.frontworld, self.backworld, entitypos ); + entityposzdelta = entitypos[2] - entityposinbus[2]; + entityposdist2 = distance2dsquared( entitypos, entityposinbus ); + + if ( entityposdist2 > self.radius * self.radius ) + return false; + + return true; +} + +busupdateignorewindows() +{ + if ( self getspeed() <= 0 ) + return; + + if ( !isdefined( level.bus_ignore_windows ) ) + level.bus_ignore_windows = getentarray( "bus_ignore_windows", "targetname" ); + + ignorewindowsvolume = undefined; + istouchingignorewindowsvolume = 0; + + if ( isdefined( level.bus_ignore_windows ) && level.bus_ignore_windows.size > 0 ) + { + foreach ( volume in level.bus_ignore_windows ) + { + if ( isdefined( istouchingignorewindowsvolume ) && istouchingignorewindowsvolume ) + continue; + + if ( self istouching( volume ) ) + { + ignorewindowsvolume = volume; + istouchingignorewindowsvolume = 1; + } + } + } + + self.ignorewindowsvolume = ignorewindowsvolume; + self.istouchingignorewindowsvolume = istouchingignorewindowsvolume; +} + +zombie_surf( zombie ) +{ + if ( !isdefined( self.zombie_surf_count ) ) + self.zombie_surf_count = 0; + + damage = int( self.maxhealth / 10 ); + + if ( isdefined( zombie.isonbusroof ) && zombie.isonbusroof && self.origin[2] - zombie.origin[2] >= 35 && !( isdefined( zombie.climbing_onto_bus ) && zombie.climbing_onto_bus ) && !( isdefined( self.hatch_jump ) && self.hatch_jump ) ) + { + damage = int( self.maxhealth / 8 ); + self.zombie_surf_count++; + + if ( isdefined( level.zombie_surfing_kills ) && level.zombie_surfing_kills && self.zombie_surf_count > level.zombie_surfing_kill_count ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); + self playlocalsound( level.zmb_laugh_alias ); + self dodamage( self.maxhealth + 1, zombie.origin ); + } + } + + self applyknockback( damage, ( 0, 1, 0 ) ); +} + +busupdateplayers() +{ + level endon( "end_game" ); + + while ( true ) + { + self.numplayers = 0; + self.numplayerson = 0; + self.numplayersonroof = 0; + self.numplayersinsidebus = 0; + self.numplayersnear = 0; + self.numaliveplayersridingbus = 0; + self.frontworld = self localtoworldcoords( self.frontlocal ); + self.backworld = self localtoworldcoords( self.backlocal ); + self.bus_riders_alive = []; +/# + if ( getdvarint( _hash_10AC3C99 ) > 0 ) + { + line( self.frontworld + ( 0, 0, self.floor ), self.backworld + ( 0, 0, self.floor ), ( 1, 1, 1 ), 1, 0, 4 ); + line( self.frontworld + ( 0, 0, self.floor ), self.frontworld + ( 0, 0, self.height ), ( 1, 1, 1 ), 1, 0, 4 ); + circle( self.backworld + ( 0, 0, self.floor ), self.radius, ( 1, 1, 1 ), 0, 1, 4 ); + circle( self.frontworld + ( 0, 0, self.floor ), self.radius, ( 1, 1, 1 ), 0, 1, 4 ); + } +#/ + players = get_players(); + + foreach ( player in players ) + { + if ( !isalive( player ) ) + continue; + + self.numplayers++; + + if ( distance2d( player.origin, self.origin ) < 1700 ) + self.numplayersnear++; + + playerisinbus = 0; + mover = player getmoverent(); + + if ( isdefined( mover ) ) + { + if ( isdefined( mover.targetname ) ) + { + if ( mover.targetname == "the_bus" || mover.targetname == "bus_path_blocker" || mover.targetname == "hatch_clip" || mover.targetname == "ladder_mantle" ) + playerisinbus = 1; + } + + if ( isdefined( mover.equipname ) ) + { + if ( mover.equipname == "riotshield_zm" ) + { + if ( isdefined( mover.isonbus ) && mover.isonbus ) + playerisinbus = 1; + } + } + + if ( isdefined( mover.is_zombie ) && mover.is_zombie && ( isdefined( mover.isonbus ) && mover.isonbus ) ) + playerisinbus = 1; + } + + if ( playerisinbus ) + { + self.numplayerson++; + + if ( is_player_valid( player ) ) + { + self.numaliveplayersridingbus++; + self.bus_riders_alive[self.bus_riders_alive.size] = player; + } + } + + ground_ent = player getgroundent(); + + if ( player isonladder() ) + ground_ent = mover; + + if ( isdefined( ground_ent ) ) + { + if ( isdefined( ground_ent.is_zombie ) && ground_ent.is_zombie ) + player thread zombie_surf( ground_ent ); + else + { + if ( playerisinbus && !( isdefined( player.isonbus ) && player.isonbus ) ) + { + bbprint( "zombie_events", "category %s type %s round %d playername %s", "BUS", "player_enter", level.round_number, player.name ); + player thread bus_audio_interior_loop( self ); + player clientnotify( "OBS" ); + player setclientplayerpushamount( 0 ); + player allowsprint( 0 ); + player allowprone( 0 ); + player._allow_sprint = 0; + player._allow_prone = 0; + isdivingtoprone = player getstance() == "prone"; + + if ( isdivingtoprone ) + player thread playerdelayturnoffdivetoprone(); + else + { + + } + + if ( randomint( 100 ) > 80 && level.automaton.greeting_timer == 0 ) + { + thread automatonspeak( "convo", "player_enter" ); + level.automaton thread greeting_timer(); + } + } + + if ( !playerisinbus && ( isdefined( player.isonbus ) && player.isonbus ) ) + { + bbprint( "zombie_events", "category %s type %s round %d playername %s", "BUS", "player_exit", level.round_number, player.name ); + self.buyable_weapon setinvisibletoplayer( player ); + player setclientplayerpushamount( 1 ); + player allowsprint( 1 ); + player allowprone( 1 ); + player._allow_sprint = undefined; + player._allow_prone = undefined; + player notify( "left bus" ); + player clientnotify( "LBS" ); + + if ( randomint( 100 ) > 80 && level.automaton.greeting_timer == 0 ) + { + thread automatonspeak( "convo", "player_leave" ); + level.automaton thread greeting_timer(); + } + } + + player.isonbus = playerisinbus; + player.isonbusroof = player _entityisonroof(); + } + } + + if ( isdefined( player.isonbusroof ) && player.isonbusroof ) + { + self.buyable_weapon setinvisibletoplayer( player ); + self.numplayersonroof++; + } + else if ( isdefined( player.isonbus ) && player.isonbus ) + { + self.buyable_weapon setvisibletoplayer( player ); + self.numplayersinsidebus++; + } + + wait 0.05; + } + + wait 0.05; + } +} + +_entityisonroof() +{ + if ( !isdefined( level.roof_trig ) ) + level.roof_trig = getent( "bus_roof_watch", "targetname" ); + + if ( !self.isonbus ) + return false; + + if ( self istouching( level.roof_trig ) ) + return true; + + return false; +} + +greeting_timer() +{ + if ( level.automaton.greeting_timer > 0 ) + return; + + level.automaton.greeting_timer = 1; + wait 20; + level.automaton.greeting_timer = 0; +} + +_updateplayersinsafearea() +{ + players = get_players(); + + if ( !isdefined( level._safeareacachevalid ) || !level._safeareacachevalid ) + { + level.playable_areas = getentarray( "player_volume", "script_noteworthy" ); + level.nogas_areas = getentarray( "no_gas", "targetname" ); + level.ambush_areas = getentarray( "ambush_volume", "script_noteworthy" ); + level._safeareacachevaild = 1; + } + + for ( p = 0; p < players.size; p++ ) + { + players[p].insafearea = _isplayerinsafearea( players[p] ); + players[p] _playercheckpoison(); + } +} + +_isplayerinsafearea( player ) +{ + if ( isdefined( player.isonbus ) && player.isonbus ) + return level.the_bus.issafe; + + if ( player _playertouchingsafearea( level.playable_areas ) ) + return 1; + + if ( player _playertouchingsafearea( level.nogas_areas ) ) + return 1; + + if ( flag( "ambush_safe_area_active" ) ) + return player _playertouchingsafearea( level.ambush_areas ); + + return 0; +} + +_playertouchingsafearea( areas ) +{ + for ( i = 0; i < areas.size; i++ ) + { + touching = self istouching( areas[i] ); + + if ( touching ) + return true; + } + + return false; +} + +_playercheckpoison() +{ + if ( !isalive( self ) || self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + return; + + if ( isdefined( self.poisoned ) && self.poisoned ) + return; + + canbepoisoned = self playercanbepoisoned(); + + if ( !canbepoisoned ) + return; + + if ( !isdefined( self.insafearea ) || self.insafearea ) + return; + + self thread _playerpoison(); +} + +playercanbepoisoned() +{ + god_mode = isgodmode( self ); + free_move = self isinmovemode( "ufo", "noclip" ); + zombie_cheat_num = getdvarint( _hash_FA81816F ); + is_invunerable = zombie_cheat_num == 1 || zombie_cheat_num == 2 || zombie_cheat_num == 3; + return !god_mode && !isdefined( free_move ) && !is_invunerable; +} + +_playerpoison() +{ + self.poisoned = 1; + self startpoisoning(); + self playsound( "evt_gas_cough" ); + wait 1; + damage = 15.0; + + while ( true ) + { + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || !isalive( self ) ) + { + self stoppoisoning(); + self.poisoned = 0; + return; + } + + canbepoisoned = self playercanbepoisoned(); + + if ( self.insafearea || !canbepoisoned ) + { + self stoppoisoning(); + self.poisoned = 0; + return; + } + + if ( randomfloat( 100.0 ) < 60.0 ) + { + + } + else + { + + } + + self dodamage( damage, self.origin ); + damage += 1; + wait 1; + } +} + +_updateplayersinhubs() +{ + players = get_players(); + hubs = getentarray( "bus_hub", "script_noteworthy" ); + + for ( h = 0; h < hubs.size; h++ ) + { + hubs[h].active = 0; + + for ( p = 0; p < players.size && !hubs[h].active; p++ ) + hubs[h].active = players[p] istouching( hubs[h] ); + } +} + +playerdelayturnoffdivetoprone() +{ + self endon( "left bus" ); + wait 1.5; +} + +busgivepowerup( location ) +{ + currentzone = level.zones[self.zone]; + + if ( isdefined( currentzone.target2 ) ) + { + spawndestent = getent( currentzone.target2, "targetname" ); + + if ( isdefined( spawndestent ) ) + { + level thread maps\mp\zombies\_zm_powerups::specific_powerup_drop( "full_ammo", spawndestent.origin ); + level.powerup_drop_count = 0; + } + } +} + +buslightssetup() +{ + self setclientfield( "bus_head_lights", 1 ); +} + +buslightsflash() +{ + self endon( "departing" ); + + while ( true ) + { + self buslightwaitenabled(); + self setclientfield( "bus_flashing_lights", 1 ); + wait 2.5; + self setclientfield( "bus_flashing_lights", 0 ); + wait 2.5; + } +} + +buslightsbrake() +{ + self buslightwaitenabled(); + self setclientfield( "bus_brake_lights", 1 ); + wait 5; + + while ( is_false( self.ismoving ) ) + { + self buslightwaitenabled(); + self setclientfield( "bus_brake_lights", 1 ); + wait 0.8; + self setclientfield( "bus_brake_lights", 0 ); + wait 0.8; + } + + self setclientfield( "bus_brake_lights", 0 ); +} + +buslightwaitenabled() +{ + while ( isdefined( self.bus_lights_disabled ) && self.bus_lights_disabled ) + wait 0.2; +} + +buslightdisable( light_name ) +{ + self.oldlights[light_name] = self getclientfield( light_name ); + self setclientfield( light_name, 0 ); +} + +buslightenable( light_name ) +{ + if ( self.oldlights[light_name] ) + self setclientfield( light_name, 1 ); +} + +buslightsignal( turn_signal_side ) +{ + self endon( "pre_power_off" ); + self endon( "power_off" ); + blink = 4; + + for ( x = 0; x < blink; x++ ) + { + wait 1; + self setclientfield( "bus_" + turn_signal_side, 1 ); + wait 1; + self setclientfield( "bus_" + turn_signal_side, 0 ); + } +} + +buslightsdisableall() +{ + if ( !isdefined( self.oldlights ) ) + self.oldlights = []; + + self buslightdisable( "bus_flashing_lights" ); + self buslightdisable( "bus_head_lights" ); + self buslightdisable( "bus_brake_lights" ); + self buslightdisable( "bus_turn_signal_left" ); + self buslightdisable( "bus_turn_signal_right" ); + self.bus_lights_disabled = 1; +} + +buslightsenableall() +{ + self.bus_lights_disabled = 0; + self buslightenable( "bus_flashing_lights" ); + self buslightenable( "bus_head_lights" ); + self buslightenable( "bus_brake_lights" ); + self buslightenable( "bus_turn_signal_left" ); + self buslightenable( "bus_turn_signal_right" ); +} + +busdoorssetup() +{ + self.doorblockers = []; + self.doorblockers = getentarray( "bus_door_blocker", "targetname" ); + doorstrigger = getentarray( "bus_door_trigger", "targetname" ); + + for ( i = 0; i < self.doorblockers.size; i++ ) + { + self.doorblockers[i].offset = self worldtolocalcoords( self.doorblockers[i].origin ); + self.doorblockers[i] linkto( self, "", self.doorblockers[i].offset, ( 0, 0, 0 ) ); + self.doorblockers[i] setmovingplatformenabled( 1 ); + } + + for ( i = 0; i < doorstrigger.size; i++ ) + { + doorstrigger[i] enablelinkto(); + doorstrigger[i] linkto( self, "", self worldtolocalcoords( doorstrigger[i].origin ), ( 0, 0, 0 ) ); + doorstrigger[i] setcursorhint( "HINT_NOICON" ); + doorstrigger[i] sethintstring( &"ZOMBIE_TRANSIT_OPEN_BUS_DOOR" ); + doorstrigger[i] setmovingplatformenabled( 1 ); + doorstrigger[i] sethintlowpriority( 1 ); + self thread busdoorthink( doorstrigger[i] ); + } + + self maps\mp\zm_transit_openings::busopeningsetenabled( "door", 0 ); +} + +busdoorsopen() +{ + if ( !self.doorsclosed || self.doorsdisabledfortime ) + return; + + self.doorsclosed = 0; + self thread bussetdoornodes( 1 ); + doorstrigger = getentarray( "bus_door_trigger", "targetname" ); + + for ( i = 0; i < self.doorblockers.size; i++ ) + { + self.doorblockers[i] notsolid(); + self.doorblockers[i] playsound( "zmb_bus_door_open" ); + } + + for ( i = 0; i < doorstrigger.size; i++ ) + doorstrigger[i] sethintstring( &"ZOMBIE_TRANSIT_CLOSE_BUS_DOOR" ); + + self bususeanimtree(); + self bususedoor( 1 ); + self maps\mp\zm_transit_openings::busopeningsetenabled( "door", 1 ); +} + +busdoorsclose() +{ + if ( self.doorsclosed || self.doorsdisabledfortime ) + return; + + self.doorsclosed = 1; + self thread bussetdoornodes( 0 ); + level.the_bus showpart( "doors_front_left_2_jnt" ); + level.the_bus showpart( "doors_front_right_2_jnt" ); + level.the_bus showpart( "doors_rear_left_2_jnt" ); + level.the_bus showpart( "doors_rear_right_2_jnt" ); + doorstrigger = getentarray( "bus_door_trigger", "targetname" ); + + for ( i = 0; i < self.doorblockers.size; i++ ) + { + self.doorblockers[i] solid(); + self.doorblockers[i] playsound( "zmb_bus_door_close" ); + } + + for ( i = 0; i < doorstrigger.size; i++ ) + doorstrigger[i] sethintstring( &"ZOMBIE_TRANSIT_OPEN_BUS_DOOR" ); + + self bususeanimtree(); + self bususedoor( 0 ); + self maps\mp\zm_transit_openings::busopeningsetenabled( "door", 0 ); +} + +busdoorsdisablefortime( time ) +{ + doorstrigger = getentarray( "bus_door_trigger", "targetname" ); + + for ( i = 0; i < doorstrigger.size; i++ ) + doorstrigger[i] setinvisibletoall(); + + self.doorsdisabledfortime = 1; + wait( time ); + self.doorsdisabledfortime = 0; + + for ( i = 0; i < doorstrigger.size; i++ ) + doorstrigger[i] setvisibletoall(); +} + +init_animtree() +{ + scriptmodelsuseanimtree( #animtree ); +} + +init_bus_door_anims() +{ + level.bus_door_open_state = %v_zombie_bus_all_doors_open; + level.bus_door_close_state = %v_zombie_bus_all_doors_close; + level.bus_door_open_idle_state = %v_zombie_bus_all_doors_idle_open; + level.bus_door_close_idle_state = %v_zombie_bus_all_doors_idle_closed; +} + +bususeanimtree() +{ + self useanimtree( #animtree ); +} + +bususedoor( set ) +{ + self endon( "death" ); + animtime = 1.0; + + if ( set ) + { + self.door_state = set; + self setanim( level.bus_door_open_state, 1, animtime, 1 ); + } + else + { + self.door_state = set; + self playsound( "zmb_bus_door_close" ); + self setanim( level.bus_door_close_state, 1, animtime, 1 ); + } + + self notify( "BusUseDoor" ); +} + +busidledoor() +{ + while ( true ) + { + notifystring = self waittill_any_return( "departing", "BusUseDoor", "stopping" ); + + if ( notifystring == "departing" || notifystring == "BusUseDoor" ) + { + if ( isdefined( self.ismoving ) && self.ismoving && isdefined( self.door_state ) ) + { + wait 1; + + if ( self.door_state ) + self setanim( level.bus_door_open_idle_state ); + else + self setanim( level.bus_door_close_idle_state ); + } + } + else if ( notifystring == "stopping" ) + { + + } + } +} + +#using_animtree("zombie_bus_props"); + +init_props_animtree() +{ + scriptmodelsuseanimtree( #animtree ); +} + +init_bus_props_anims() +{ + level.bus_props_start_state = %fxanim_zom_bus_interior_start_anim; + level.bus_props_idle_state = %fxanim_zom_bus_interior_idle_anim; + level.bus_props_end_state = %fxanim_zom_bus_interior_end_anim; +} + +busfxanims() +{ + self.fxanimmodel = spawn( "script_model", self gettagorigin( "tag_body" ) ); + self.fxanimmodel setmodel( "fxanim_zom_bus_interior_mod" ); + self.fxanimmodel linkto( self, "tag_body" ); + self.fxanimmodel useanimtree( #animtree ); +} + +busfxanims_start() +{ + if ( !isdefined( self.fxanimmodel ) ) + return; + + self.fxanimmodel setanim( level.bus_props_start_state ); + wait( getanimlength( level.bus_props_start_state ) ); + + if ( isdefined( self.ismoving ) && self.ismoving ) + self.fxanimmodel setanim( level.bus_props_idle_state ); +} + +busfxanims_end() +{ + if ( !isdefined( self.fxanimmodel ) ) + return; + + self.fxanimmodel setanim( level.bus_props_start_state ); +} + +busdoorthink( trigger ) +{ + while ( true ) + { + trigger waittill( "trigger", player ); + + if ( isdefined( self.force_lock_doors ) && self.force_lock_doors ) + continue; + + if ( self.doorsclosed ) + { + if ( !( isdefined( level.bus_intro_done ) && level.bus_intro_done ) ) + { + thread automatonspeak( "scripted", "discover_bus" ); + level.bus_intro_done = 1; + } + else if ( randomint( 100 ) > 75 && !isdefined( level.automaton.dmgfxorigin ) ) + thread automatonspeak( "inform", "doors_open" ); + + self busdoorsopen(); + } + else + { + if ( randomint( 100 ) > 75 && !isdefined( level.automaton.dmgfxorigin ) ) + thread automatonspeak( "inform", "doors_close" ); + + self busdoorsclose(); + } + + wait 1; + } +} + +busfueltanksetup() +{ + script_origin = spawn( "script_origin", self.origin + ( -193, 75, 48 ) ); + script_origin.angles = vectorscale( ( 0, 1, 0 ), 180.0 ); + script_origin linkto( self ); + self.fueltankmodelpoint = script_origin; + script_origin = spawn( "script_origin", self.origin + ( -193, 128, 48 ) ); + script_origin linkto( self ); + self.fueltanktriggerpoint = script_origin; +} + +busdeferredinitplowclip( clip ) +{ + origin = self worldtolocalcoords( clip.origin ); + clip.origin = vectorscale( ( 0, 0, -1 ), 100.0 ); + wait_for_buildable( "cattlecatcher" ); + trigger = getent( "trigger_plow", "targetname" ); + + while ( true ) + { + canbreak = 1; + players = get_players(); + + foreach ( player in players ) + { + if ( player istouching( trigger ) ) + canbreak = 0; + } + + if ( canbreak ) + break; + + wait 0.05; + } + + self.plow_clip_attached = 1; + clip linkto( self, "", origin, ( 0, 0, 0 ) ); + clip setmovingplatformenabled( 1 ); +} + +busplowupdatesolid() +{ + if ( isdefined( self.cow_catcher_blocker ) ) + { + if ( !( isdefined( self.ismoving ) && self.ismoving ) && ( isdefined( self.plow_attached ) && self.plow_attached ) ) + { + self.cow_catcher_blocker solid(); + self.cow_catcher_blocker disconnectpaths(); + } + else + { + self.cow_catcher_blocker notsolid(); + self.cow_catcher_blocker connectpaths(); + } + } +} + +busplowsetup() +{ + clipbrush = getentarray( "plow_clip", "targetname" ); + + if ( isdefined( clipbrush ) && clipbrush.size > 0 ) + { + for ( i = 0; i < clipbrush.size; i++ ) + self thread busdeferredinitplowclip( clipbrush[i] ); + } + + level.the_bus.plow_clip = clipbrush; + level.the_bus hidepart( "tag_plow_attach" ); + trigger = getent( "trigger_plow", "targetname" ); + trigger linkto( level.the_bus ); + trigger setmovingplatformenabled( 1 ); + self thread busplowmoveplayeronbuilt(); + self thread busplowmoveplayer(); + self.bussmashtrigger = trigger; + cow_catcher_blocker = getent( "cow_catcher_path_blocker", "targetname" ); + + if ( isdefined( cow_catcher_blocker ) ) + { + self.cow_catcher_blocker = cow_catcher_blocker; + + if ( !isdefined( self.path_blockers ) ) + self.path_blockers = []; + + self.path_blockers[self.path_blockers.size] = cow_catcher_blocker; + self busplowupdatesolid(); + } + + player = wait_for_buildable( "cattlecatcher" ); + flag_set( "catcher_attached" ); + self.plow_attached = 1; + self busplowupdatesolid(); + self.plowtrigger = trigger; + level.the_bus showpart( "tag_plow_attach" ); + level.the_bus.upgrades["Plow"].installed = 1; + level.the_bus maps\mp\zm_transit_openings::busopeningsetenabled( "front", 0 ); + player maps\mp\zombies\_zm_buildables::track_placed_buildables( "cattlecatcher" ); +} + +busplowmoveplayeronbuilt() +{ + wait_for_buildable( "cattlecatcher" ); + + while ( !( isdefined( self.plow_clip_attached ) && self.plow_clip_attached ) ) + { + self busplowmoveplayerthink(); + wait 0.05; + } +} + +busplowmoveplayer() +{ + while ( true ) + { + if ( is_false( self.ismoving ) || isdefined( self.disabled_by_emp ) && self.disabled_by_emp ) + { + wait 0.1; + continue; + } + + self busplowmoveplayerthink(); + wait 0.05; + } +} + +busplowmoveplayerthink() +{ + if ( !isdefined( level.triggerplow ) ) + level.triggerplow = getent( "trigger_plow", "targetname" ); + + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( player.isonbus ) && player.isonbus ) + continue; + + if ( player istouching( level.triggerplow ) ) + { + rightdistance = distancesquared( player.origin, self gettagorigin( "tag_wheel_front_right" ) ); + leftdistance = distancesquared( player.origin, self gettagorigin( "tag_wheel_front_left" ) ); + bus_dir = undefined; + + if ( isdefined( player.is_burning ) && player getstance() == "stand" ) + player setstance( "crouch" ); + + if ( rightdistance < leftdistance ) + bus_dir = vectorscale( anglestoforward( self.angles + ( -60, -60, 30 ) ), 512 ); + else + bus_dir = vectorscale( anglestoforward( self.angles + ( 60, 60, 30 ) ), 512 ); + + bus_vel = self getvelocity(); + boost_velocity = bus_vel + bus_dir; + player setvelocity( boost_velocity ); + } + } +} + +buspushzombie( zombie, trigger ) +{ + opening = level.the_bus maps\mp\zm_transit_openings::busopeningbyname( "front" ); + + if ( !isdefined( opening ) || isdefined( opening.zombie ) && opening.zombie != zombie || isdefined( zombie.is_inert ) && zombie.is_inert ) + busplowkillzombie( zombie ); + else + zombie thread zombieattachtobus( level.the_bus, opening, 0 ); +} + +busplowkillzombie( zombie ) +{ + zombie.killedbyplow = 1; + + if ( isdefined( zombie.busplowkillzombie ) ) + { + zombie thread [[ zombie.busplowkillzombie ]](); + return; + } + + if ( is_mature() ) + { + if ( isdefined( level._effect["zomb_gib"] ) ) + playfxontag( level._effect["zomb_gib"], zombie, "J_SpineLower" ); + } + else if ( isdefined( level._effect["spawn_cloud"] ) ) + playfxontag( level._effect["spawn_cloud"], zombie, "J_SpineLower" ); + + zombie thread busplowkillzombieuntildeath(); + wait 1; + + if ( isdefined( zombie ) ) + zombie hide(); + + if ( !isdefined( self.upgrades["Plow"].killcount ) ) + self.upgrades["Plow"].killcount = 0; + + self.upgrades["Plow"].killcount++; +} + +busplowkillzombieuntildeath() +{ + self endon( "death" ); + + while ( isdefined( self ) && isalive( self ) ) + { + if ( isdefined( self.health ) ) + { + self.marked_for_recycle = 1; + self dodamage( self.health + 666, self.origin, self, self, "none", "MOD_SUICIDE" ); + } + + wait 1; + } +} + +bus_roof_watch() +{ + roof_trig = getent( "bus_roof_watch", "targetname" ); + roof_trig enablelinkto(); + roof_trig linkto( self, "", self worldtolocalcoords( roof_trig.origin ), roof_trig.angles + self.angles ); + roof_trig setmovingplatformenabled( 1 ); +} + +busroofjumpoffpositionssetup() +{ + jump_positions = getentarray( "roof_jump_off_positions", "targetname" ); + assert( jump_positions.size > 0 ); + + for ( i = 0; i < jump_positions.size; i++ ) + jump_positions[i] linkto( self, "", self worldtolocalcoords( jump_positions[i].origin ), jump_positions[i].angles + self.angles ); +} + +bussideladderssetup() +{ + side_ladders = getentarray( "roof_ladder_outside", "targetname" ); + + for ( i = 0; i < side_ladders.size; i++ ) + { + side_ladders[i].trigger = getent( side_ladders[i].target, "targetname" ); + + if ( !isdefined( side_ladders[i].trigger ) ) + { + side_ladders[i] delete(); + continue; + } + + side_ladders[i] linkto( self, "", self worldtolocalcoords( side_ladders[i].origin ), side_ladders[i].angles + self.angles ); + side_ladders[i].trigger enablelinkto(); + side_ladders[i].trigger linkto( self, "", self worldtolocalcoords( side_ladders[i].trigger.origin ), side_ladders[i].trigger.angles + self.angles ); + self thread bussideladderthink( side_ladders[i], side_ladders[i].trigger ); + } +} + +bussideladderthink( ladder, trigger ) +{ + if ( 1 ) + { + trigger delete(); + return; + } + + trigger setcursorhint( "HINT_NOICON" ); + trigger sethintstring( &"ZOMBIE_TRANSIT_BUS_CLIMB_ROOF" ); + + while ( true ) + { + trigger waittill( "trigger", player ); + + teleport_location = self localtoworldcoords( ladder.script_vector ); + player setorigin( teleport_location ); + trigger setinvisibletoall(); + wait 1.0; + trigger setvisibletoall(); + } +} + +buspathblockersetup() +{ + self.path_blockers = getentarray( "bus_path_blocker", "targetname" ); + + for ( i = 0; i < self.path_blockers.size; i++ ) + self.path_blockers[i] linkto( self, "", self worldtolocalcoords( self.path_blockers[i].origin ), self.path_blockers[i].angles + self.angles ); + + cow_catcher_blocker = getent( "cow_catcher_path_blocker", "targetname" ); + + if ( isdefined( cow_catcher_blocker ) ) + cow_catcher_blocker linkto( self, "", self worldtolocalcoords( cow_catcher_blocker.origin ), cow_catcher_blocker.angles + self.angles ); + + trig = getent( "bus_buyable_weapon1", "script_noteworthy" ); + trig enablelinkto(); + trig linkto( self, "", self worldtolocalcoords( trig.origin ), ( 0, 0, 0 ) ); + trig setinvisibletoall(); + self.buyable_weapon = trig; + level._spawned_wallbuys[level._spawned_wallbuys.size] = trig; + weapon_model = getent( trig.target, "targetname" ); + weapon_model linkto( self, "", self worldtolocalcoords( weapon_model.origin ), weapon_model.angles + self.angles ); + weapon_model setmovingplatformenabled( 1 ); + weapon_model._linked_ent = trig; +} + +bussetdoornodes( enable ) +{ + if ( isdefined( self.door_nodes_avoid_linking ) && self.door_nodes_avoid_linking ) + return; + + if ( enable ) + { + if ( !self.door_nodes_linked ) + { + link_nodes( self.front_door_inside, self.front_door ); + link_nodes( self.front_door, self.front_door_inside ); + link_nodes( self.back_door_inside1, self.back_door ); + link_nodes( self.back_door, self.back_door_inside1 ); + link_nodes( self.back_door_inside2, self.back_door ); + link_nodes( self.back_door, self.back_door_inside2 ); + self.door_nodes_linked = 1; + } + } + else if ( self.door_nodes_linked ) + { + unlink_nodes( self.front_door_inside, self.front_door ); + unlink_nodes( self.front_door, self.front_door_inside ); + unlink_nodes( self.back_door_inside1, self.back_door ); + unlink_nodes( self.back_door, self.back_door_inside1 ); + unlink_nodes( self.back_door_inside2, self.back_door ); + unlink_nodes( self.back_door, self.back_door_inside2 ); + self.door_nodes_linked = 0; + } +} + +buspathblockerenable() +{ + if ( !isdefined( self.path_blockers ) ) + return; + + if ( self.path_blocking ) + return; + + while ( level.the_bus getspeed() > 0 ) + wait 0.1; + + for ( i = 0; i < self.path_blockers.size; i++ ) + self.path_blockers[i] disconnectpaths(); + + self.link_start = []; + self.link_end = []; + self buslinkdoornodes( "front_door_node" ); + self buslinkdoornodes( "back_door_node" ); + self.path_blocking = 1; +} + +buslinkdoornodes( node_name ) +{ + start_node = getnode( node_name, "targetname" ); + start_node.links = []; + + if ( isdefined( start_node ) ) + { + near_nodes = getnodesinradiussorted( start_node.origin, 128, 0, 64, "pathnodes" ); + links = 0; + + foreach ( node in near_nodes ) + { + if ( !isdefined( node.target ) || node.target != "the_bus" ) + { + self.link_start[self.link_start.size] = start_node; + self.link_end[self.link_end.size] = node; + link_nodes( start_node, node ); + link_nodes( node, start_node ); + start_node.links[start_node.links.size] = node; + links++; + + if ( links == 2 ) + break; + } + } + } +} + +busunlinkdoornodes( node_name ) +{ + start_node = getnode( node_name, "targetname" ); + + if ( isdefined( start_node ) && isdefined( start_node.links ) ) + { + linked_nodes = start_node.links; + + foreach ( node in linked_nodes ) + { + if ( !isdefined( node.target ) || node.target != "the_bus" ) + { + unlink_nodes( start_node, node ); + unlink_nodes( node, start_node ); + } + } + } +} + +buspathblockerdisable() +{ + if ( !isdefined( self.path_blockers ) ) + return; + + if ( !self.path_blocking ) + return; + + for ( i = 0; i < self.path_blockers.size; i++ ) + self.path_blockers[i] connectpaths(); + + self.link_start = []; + self.link_end = []; + self busunlinkdoornodes( "front_door_node" ); + self busunlinkdoornodes( "back_door_node" ); + self.path_blocking = 0; + self bussetdineropenings( 1 ); + self bussetpoweropenings( 1 ); + self bussettownopenings( 1 ); +} + +bussetupbounds() +{ + self.bounds_origins = getentarray( "bus_bounds_origin", "targetname" ); + + for ( i = 0; i < self.bounds_origins.size; i++ ) + self.bounds_origins[i] linkto( self, "", self worldtolocalcoords( self.bounds_origins[i].origin ), self.angles ); +} + +busstartwait() +{ + while ( self getspeed() == 0 ) + wait 0.1; +} + +busshowleavinghud( time ) +{ + if ( !isdefined( level.bus_leave_hud ) ) + { + level.bus_leave_hud = newhudelem(); + level.bus_leave_hud.color = ( 1, 1, 1 ); + level.bus_leave_hud.fontscale = 4; + level.bus_leave_hud.x = -300; + level.bus_leave_hud.y = 100; + level.bus_leave_hud.alignx = "center"; + level.bus_leave_hud.aligny = "bottom"; + level.bus_leave_hud.horzalign = "center"; + level.bus_leave_hud.vertalign = "middle"; + level.bus_leave_hud.font = "objective"; + level.bus_leave_hud.glowcolor = ( 0.3, 0.6, 0.3 ); + level.bus_leave_hud.glowalpha = 1; + level.bus_leave_hud.foreground = 1; + level.bus_leave_hud.hidewheninmenu = 1; + } + + level.bus_leave_hud.alpha = 0.3; + level.bus_leave_hud settimer( time ); + wait( time ); + level.bus_leave_hud.alpha = 0; +} + +busstartmoving( targetspeed ) +{ + if ( !self.ismoving ) + { + self.ismoving = 1; + self.isstopping = 0; + self thread busexceedchasespeed(); + bbprint( "zombie_events", "%s", "bus_start" ); + self setclientfield( "bus_brake_lights", 0 ); + self buspathblockerdisable(); + self thread busfxanims_start(); + self busplowupdatesolid(); + + if ( !flag( "ambush_round" ) ) + level.numbusstopssincelastambushround++; + } + + if ( isdefined( targetspeed ) ) + self.targetspeed = targetspeed; + + self notify( "OnKeysUsed" ); + self thread play_bus_audio( "leaving" ); +} + +busexceedchasespeed() +{ + self notify( "exceed_chase_speed" ); + self endon( "exceed_chase_speed" ); + + while ( isdefined( self.ismoving ) && self.ismoving ) + { + if ( self getspeedmph() > 12 ) + { + self.exceed_chase_speed = 1; + return; + } + + wait 0.1; + } +} + +busstopwait() +{ + if ( self.ismoving && !self.isstopping ) + { + self.isstopping = 1; + bbprint( "zombie_events", "%s", "bus_stop" ); + + while ( self getspeed() > 0 ) + wait 0.1; + } +} + +busstopmoving( immediatestop ) +{ + if ( self.ismoving ) + { + if ( isdefined( immediatestop ) && immediatestop ) + self.immediatespeed = 1; + + self notify( "stopping" ); + self thread play_bus_audio( "stopping" ); + self.targetspeed = 0; + self setspeedimmediate( self.targetspeed, 30, 30 ); + self.ismoving = 0; + self.isstopping = 0; + self.exceed_chase_speed = 0; + self busplowupdatesolid(); + self thread buslightsbrake(); + self thread buspathblockerenable(); + self thread shakeplayersonbus(); + self thread busfxanims_end(); + } +} + +shakeplayersonbus() +{ + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( player.isonbus ) && player.isonbus ) + earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), player.origin + vectorscale( ( 0, 0, 1 ), 32.0 ), 150 ); + } +} + +busgasadd( percent ) +{ + newgaslevel = level.the_bus.gas + percent; +/# + println( "^2Bus Debug: Old Gas Level is " + newgaslevel ); +#/ + if ( newgaslevel < 0 ) + newgaslevel = 0; + else if ( newgaslevel > 100 ) + newgaslevel = 100; + + level.the_bus.gas = newgaslevel; +/# + println( "^2Bus Debug: New Gas Level is " + newgaslevel ); +#/ +} + +busgasremove( percent ) +{ + busgasadd( percent * -1 ); +} + +busgasempty() +{ + if ( level.the_bus.gas <= 0 ) + return true; + + return false; +} + +busrestartzombiespawningaftertime( seconds ) +{ + wait( seconds ); + maps\mp\zm_transit_utility::try_resume_zombie_spawning(); +} + +busthink() +{ + no_danger = 0; + self thread busupdatechasers(); + self.buyable_weapon notify( "stop_hint_logic" ); + self thread busupdateplayers(); + self thread busupdatenearzombies(); + + while ( true ) + { + waittillframeend; + self busupdatespeed(); + self busupdateignorewindows(); + + if ( self.ismoving ) + self busupdatenearequipment(); + + if ( !( isdefined( level.bus_zombie_danger ) && level.bus_zombie_danger ) && ( self.numplayersonroof || self.numplayersinsidebus ) ) + { + no_danger++; + + if ( no_danger > 40 ) + { + level thread do_player_bus_zombie_vox( "bus_zom_none", 40, 60 ); + no_danger = 0; + } + } + else + no_danger = 0; + + wait 0.1; + } +} + +zomclimbingvox( old, new ) +{ + if ( new <= old ) + return; + + if ( new == 1 || new == 3 ) + level thread do_player_bus_zombie_vox( "bus_zom_climb", 30 ); +} + +zomchasingvox() +{ + if ( self.zombies_chasing_bus > 2 ) + level thread do_player_bus_zombie_vox( "bus_zom_chase", 15 ); +} + +zomonbusvox( old, new ) +{ + if ( new == old ) + return; + + if ( ( new == 1 || new == 4 || new == 8 ) && randomint( 100 ) < 20 ) + level thread automatonspeak( "inform", "zombie_on_board" ); + else if ( new >= 1 ) + level thread do_player_bus_zombie_vox( "bus_zom_ent", 25 ); +} + +zomatwindowvox( old, new ) +{ + if ( new <= old ) + return; + + if ( ( new == 1 || new == 3 || new == 5 ) && randomint( 100 ) < 35 ) + level thread automatonspeak( "inform", "zombie_at_window" ); + else if ( new >= 1 ) + level thread do_player_bus_zombie_vox( "bus_zom_atk", 25 ); +} + +zomonroofvox( old, new ) +{ + if ( new <= old ) + return; + + if ( ( new == 1 || new == 4 || new == 8 ) && randomint( 100 ) < 35 ) + level thread automatonspeak( "inform", "zombie_on_roof" ); + else if ( new >= 1 ) + level thread do_player_bus_zombie_vox( "bus_zom_roof", 25 ); +} + +bussetdineropenings( enable ) +{ + foreach ( opening in self.openings ) + { + if ( opening.bindtag == "window_right_2_jnt" || opening.bindtag == "window_right_3_jnt" || opening.bindtag == "window_left_2_jnt" || opening.bindtag == "window_left_3_jnt" ) + opening.enabled = enable; + } +} + +bussetpoweropenings( enable ) +{ + foreach ( opening in self.openings ) + { + if ( opening.bindtag == "window_right_4_jnt" ) + opening.enabled = enable; + } +} + +bussettownopenings( enable ) +{ + foreach ( opening in self.openings ) + { + if ( opening.bindtag == "window_right_4_jnt" ) + opening.enabled = enable; + } +} + +busgetclosestopening() +{ + enemy = self.favoriteenemy; + closestorigin = undefined; + closestopeningtozombie = undefined; + closestdisttozombie = -1.0; + closestorigintozombie = undefined; + closestopeningtoplayer = undefined; + closestdisttoplayer = -1.0; + closestorigintoplayer = undefined; + + for ( i = 0; i < level.the_bus.openings.size; i++ ) + { + opening = level.the_bus.openings[i]; + + if ( !opening.enabled ) + continue; + + if ( maps\mp\zm_transit_openings::_isopeningdoor( opening.bindtag ) ) + continue; + + jump_origin = maps\mp\zm_transit_openings::_determinejumpfromorigin( opening ); + dist2 = distancesquared( enemy.origin, jump_origin ); + + if ( !isdefined( closestopeningtoplayer ) || dist2 < closestdisttoplayer ) + { + closestopeningtoplayer = opening; + closestorigintoplayer = jump_origin; + closestdisttoplayer = dist2; + } + + if ( isdefined( opening.zombie ) ) + continue; + + dist2 = distancesquared( self.origin, jump_origin ); + + if ( !isdefined( closestopeningtozombie ) || dist2 < closestdisttozombie ) + { + closestopeningtozombie = opening; + closestorigintozombie = jump_origin; + closestdisttozombie = dist2; + } + } + + if ( isdefined( closestopeningtozombie ) ) + closestorigin = closestorigintozombie; + else + closestorigin = closestorigintoplayer; + + return closestorigin; +} + +busgetclosestexit() +{ + enemy = self.favoriteenemy; + goal_node = level.the_bus.front_door_inside; + + if ( isdefined( enemy ) ) + { + dist_f = distancesquared( enemy.origin, level.the_bus.front_door_inside ); + dist_bl = distancesquared( enemy.origin, level.the_bus.exit_back_l ); + dist_br = distancesquared( enemy.origin, level.the_bus.exit_back_r ); + + if ( dist_bl < dist_br ) + { + if ( dist_bl < dist_f ) + goal_node = dist_bl; + } + else if ( dist_br < dist_f ) + goal_node = dist_br; + } + + return goal_node.origin; +} + +enemy_location_override() +{ + enemy = self.favoriteenemy; + location = enemy.origin; + bus = level.the_bus; + + if ( isdefined( self.isscreecher ) && self.isscreecher || isdefined( self.is_avogadro ) && self.is_avogadro ) + return location; + + if ( isdefined( self.item ) ) + return self.origin; + + if ( is_true( self.reroute ) ) + { + if ( isdefined( self.reroute_origin ) ) + location = self.reroute_origin; + } + + if ( isdefined( enemy.isonbus ) && enemy.isonbus && !( isdefined( self.solo_revive_exit ) && self.solo_revive_exit ) ) + { + if ( !( isdefined( self.isonbus ) && self.isonbus ) ) + { + if ( isdefined( bus.ismoving ) && bus.ismoving && !( isdefined( bus.disabled_by_emp ) && bus.disabled_by_emp ) ) + { + self.ignoreall = 1; + + if ( isdefined( self.close_to_bus ) && self.close_to_bus && !( isdefined( bus.istouchingignorewindowsvolume ) && bus.istouchingignorewindowsvolume ) ) + { + self.goalradius = 2; + location = self busgetclosestopening(); + location = groundpos_ignore_water_new( location + vectorscale( ( 0, 0, 1 ), 60.0 ) ); + } + else + { + self.goalradius = 32; + + if ( gettime() != bus.chase_pos_time ) + { + bus.chase_pos_time = gettime(); + bus.chase_pos_index = 0; + bus_forward = vectornormalize( anglestoforward( level.the_bus.angles ) ); + bus_right = vectornormalize( anglestoright( level.the_bus.angles ) ); + bus.chase_pos = []; + bus.chase_pos[0] = level.the_bus.origin + vectorscale( bus_forward, -144 ); + bus.chase_pos[1] = bus.chase_pos[0] + vectorscale( bus_right, 64 ); + bus.chase_pos[2] = bus.chase_pos[0] + vectorscale( bus_right, -64 ); + + foreach ( pos in bus.chase_pos ) + pos = groundpos_ignore_water_new( pos + vectorscale( ( 0, 0, 1 ), 60.0 ) ); + } + + location = bus.chase_pos[bus.chase_pos_index]; + bus.chase_pos_index++; + + if ( bus.chase_pos_index >= 3 ) + bus.chase_pos_index = 0; + + dist_sq = distancesquared( self.origin, location ); + + if ( dist_sq < 2304 ) + self.close_to_bus = 1; + } + + return location; + } + + self.close_to_bus = 0; + + if ( isdefined( bus.doorsclosed ) && bus.doorsclosed ) + { + self.ignoreall = 1; + self.goalradius = 2; + location = self busgetclosestopening(); + } + else if ( isdefined( enemy.isonbusroof ) && enemy.isonbusroof ) + { + self.ignoreall = 1; + self.goalradius = 2; + location = self busgetclosestopening(); + } + else + { + front_dist = distance2dsquared( enemy.origin, level.the_bus.front_door.origin ); + back_dist = distance2dsquared( enemy.origin, level.the_bus.back_door.origin ); + + if ( front_dist < back_dist ) + location = level.the_bus.front_door_inside.origin; + else + location = level.the_bus.back_door_inside1.origin; + + self.ignoreall = 0; + self.goalradius = 32; + } + } + } + + return location; +} + +adjust_enemyoverride() +{ + location = self.enemyoverride[0]; + bus = level.the_bus; + ent = self.enemyoverride[1]; + + if ( isdefined( ent ) ) + { + if ( ent entity_is_on_bus( 1 ) ) + { + if ( !( isdefined( self.isonbus ) && self.isonbus ) ) + { + if ( isdefined( bus.doorsclosed ) && bus.doorsclosed ) + { + self.goalradius = 2; + location = self busgetclosestopening(); + } + } + else + self.goalradius = 32; + } + } + + return location; +} + +attachpoweruptobus( powerup ) +{ + if ( !isdefined( powerup ) || !isdefined( level.the_bus ) ) + return; + + distanceoutsideofbus = 50.0; + heightofroofpowerup = 60; + heightoffloorpowerup = 25; + originofbus = level.the_bus gettagorigin( "tag_origin" ); + floorofbus = originofbus[2] + level.the_bus.floor; + adjustup = 0; + adjustdown = 0; + adjustin = 0; + pos = powerup.origin; + posinbus = pointonsegmentnearesttopoint( level.the_bus.frontworld, level.the_bus.backworld, pos ); + posdist2 = distance2dsquared( pos, posinbus ); + + if ( posdist2 > level.the_bus.radius * level.the_bus.radius ) + { + radiusplus = level.the_bus.radius + distanceoutsideofbus; + + if ( posdist2 > radiusplus * radiusplus ) + return; + + adjustin = 1; + } + + if ( !adjustin ) + { + bus_front_local = ( 276, 28, 0 ); + bus_front_local_world = level.the_bus localtoworldcoords( bus_front_local ); + bus_front_radius2 = 10000; + front_dist2 = distance2dsquared( powerup.origin, bus_front_local_world ); + + if ( front_dist2 < bus_front_radius2 ) + adjustin = 1; + } + + if ( adjustin ) + { + directiontobus = posinbus - pos; + directiontobusn = vectornormalize( directiontobus ); + howfarintobus = distanceoutsideofbus + 10; + powerup.origin += directiontobusn * howfarintobus; + } + + poszdelta = powerup.origin[2] - posinbus[2]; + + if ( poszdelta < level.the_bus.floor + heightoffloorpowerup ) + adjustup = 1; + else if ( poszdelta > level.the_bus.height - 20.0 ) + adjustdown = 1; + + if ( adjustup ) + powerup.origin = ( powerup.origin[0], powerup.origin[1], floorofbus + heightoffloorpowerup ); + else if ( adjustdown ) + powerup.origin = ( powerup.origin[0], powerup.origin[1], floorofbus + heightofroofpowerup ); + + powerup linkto( level.the_bus, "", level.the_bus worldtolocalcoords( powerup.origin ), powerup.angles - level.the_bus.angles ); +} + +shouldsuppressgibs( zombie ) +{ + if ( !isdefined( zombie ) || !isdefined( level.the_bus ) ) + return false; + + pos = zombie.origin; + posinbus = pointonsegmentnearesttopoint( level.the_bus.frontworld, level.the_bus.backworld, pos ); + poszdelta = pos[2] - posinbus[2]; + + if ( poszdelta < level.the_bus.floor - 10.0 ) + return false; + + posdist2 = distance2dsquared( pos, posinbus ); + + if ( posdist2 > level.the_bus.radius * level.the_bus.radius ) + return false; + + return true; +} + +bus_bridge_speedcontrol() +{ + while ( true ) + { + self waittill( "reached_node", nextpoint ); +/# + if ( getdvarint( _hash_583AF524 ) != 0 ) + { + if ( isdefined( nextpoint.target ) ) + { + futurenode = getvehiclenode( nextpoint.target, "targetname" ); + + if ( isdefined( futurenode.script_noteworthy ) && futurenode.script_noteworthy == "emp_stop_point" ) + { + player = get_players()[0]; + player thread maps\mp\zombies\_zm_weap_emp_bomb::emp_detonate( player magicgrenadetype( "emp_grenade_zm", self.origin + vectorscale( ( 0, 0, 1 ), 10.0 ), ( 0, 0, 0 ), 0.05 ) ); + } + } + } +#/ + if ( isdefined( nextpoint.script_string ) ) + { + if ( nextpoint.script_string == "arrival_slowdown" ) + self thread start_stopping_bus(); + + if ( nextpoint.script_string == "arrival_slowdown_fast" ) + self thread start_stopping_bus( 1 ); + } + + if ( isdefined( nextpoint.script_noteworthy ) ) + { + if ( nextpoint.script_noteworthy == "slow_down" ) + { + self.targetspeed = 10; + + if ( isdefined( nextpoint.script_float ) ) + self.targetspeed = nextpoint.script_float; + + self setspeed( self.targetspeed, 80, 5 ); + } + else if ( nextpoint.script_noteworthy == "turn_signal_left" || nextpoint.script_noteworthy == "turn_signal_right" ) + self thread buslightsignal( nextpoint.script_noteworthy ); + else if ( nextpoint.script_noteworthy == "resume_speed" ) + { + self.targetspeed = 12; + + if ( isdefined( nextpoint.script_float ) ) + self.targetspeed = nextpoint.script_float; + + self setspeed( self.targetspeed, 60, 60 ); + } + else if ( nextpoint.script_noteworthy == "emp_stop_point" ) + self notify( "reached_emp_stop_point" ); + else if ( nextpoint.script_noteworthy == "start_lava" ) + playfxontag( level._effect["bus_lava_driving"], self, "tag_origin" ); + else if ( nextpoint.script_noteworthy == "stop_lava" ) + { + + } + else if ( nextpoint.script_noteworthy == "bus_scrape" ) + self playsound( "zmb_bus_car_scrape" ); + else if ( nextpoint.script_noteworthy == "arriving" ) + { + self thread begin_arrival_slowdown(); + self thread play_bus_audio( "arriving" ); + level thread do_player_bus_zombie_vox( "bus_stop", 10 ); + self thread buslightsignal( "turn_signal_right" ); + } + else if ( nextpoint.script_noteworthy == "enter_transition" ) + playfxontag( level._effect["fx_zbus_trans_fog"], self, "tag_headlights" ); + else if ( nextpoint.script_noteworthy == "bridge" ) + { + level thread do_automaton_arrival_vox( "bridge" ); + player_near = 0; + node = getvehiclenode( "bridge_accel_point", "script_noteworthy" ); + + if ( isdefined( node ) ) + { + players = get_players(); + + foreach ( player in players ) + { + if ( player.isonbus ) + continue; + + if ( distancesquared( player.origin, node.origin ) < 6760000 ) + player_near = 1; + } + } + + if ( player_near ) + { + trig = getent( "bridge_trig", "targetname" ); + trig notify( "trigger" ); + } + } + else if ( nextpoint.script_noteworthy == "depot" ) + { + volume = getent( "depot_lava_pit", "targetname" ); + traverse_volume = getent( "depot_pit_traverse", "targetname" ); + + if ( isdefined( volume ) ) + { + zombies = getaiarray( level.zombie_team ); + + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i].depot_lava_pit ) ) + { + if ( zombies[i] istouching( volume ) ) + zombies[i] thread [[ zombies[i].depot_lava_pit ]](); + + continue; + } + + if ( zombies[i] istouching( volume ) ) + { + zombies[i] dodamage( zombies[i].health + 100, zombies[i].origin ); + continue; + } + + if ( zombies[i] istouching( traverse_volume ) ) + zombies[i] dodamage( zombies[i].health + 100, zombies[i].origin ); + } + } + } + } + + waittillframeend; + } +} + +bus_audio_setup() +{ + if ( !isdefined( self ) ) + return; + + self.engine_ent_1 = spawn( "script_origin", self.origin ); + self.engine_ent_1 linkto( self, "tag_wheel_back_left" ); + self.engine_ent_2 = spawn( "script_origin", self.origin ); + self.engine_ent_2 linkto( self, "tag_wheel_back_left" ); +} + +play_bus_audio( type ) +{ + level notify( "playing_bus_audio" ); + level endon( "playing_bus_audio" ); + + if ( isdefined( self.disabled_by_emp ) && self.disabled_by_emp && type != "emp" ) + { + self notify( "stop_bus_audio" ); + self.engine_ent_1 stoploopsound( 0.5 ); + self.engine_ent_2 stoploopsound( 0.5 ); + return; + } + + switch ( type ) + { + case "grace": + self.engine_ent_1 playloopsound( "zmb_bus_start_idle", 0.05 ); + level.automaton playsound( "zmb_bus_horn_warn" ); + break; + case "leaving": + level.automaton playsound( "zmb_bus_horn_leave" ); + self.engine_ent_2 playloopsound( "zmb_bus_start_move", 0.05 ); + self.engine_ent_1 stoploopsound( 2 ); + wait 7; + + if ( !( isdefined( self.disabled_by_emp ) && self.disabled_by_emp ) ) + { + self.engine_ent_1 playloopsound( "zmb_bus_exterior_loop", 2 ); + self.engine_ent_2 stoploopsound( 3 ); + } + + break; + case "arriving": + level.automaton playsound( "zmb_bus_horn_leave" ); + break; + case "stopping": + self notify( "stop_bus_audio" ); + level.automaton playsound( "zmb_bus_horn_leave" ); + self.engine_ent_1 stoploopsound( 3 ); + self.engine_ent_2 stoploopsound( 3 ); + self.engine_ent_2 playsound( "zmb_bus_stop_move" ); + self playsound( "zmb_bus_car_scrape" ); + break; + case "emp": + self notify( "stop_bus_audio" ); + self.engine_ent_1 stoploopsound( 0.5 ); + self.engine_ent_2 stoploopsound( 0.5 ); + self.engine_ent_2 playsound( "zmb_bus_emp_shutdown" ); + break; + } +} + +bus_audio_interior_loop( bus ) +{ + self endon( "left bus" ); + + while ( !bus.ismoving || isdefined( bus.disabled_by_emp ) && bus.disabled_by_emp ) + wait 0.1; + + self clientnotify( "buslps" ); + self thread bus_audio_turnoff_interior_player( bus ); + self thread bus_audio_turnoff_interior_bus( bus ); +} + +bus_audio_turnoff_interior_player( bus ) +{ + bus endon( "stop_bus_audio" ); + self waittill_any( "left bus", "death", "player_suicide", "bled_out" ); + self clientnotify( "buslpe" ); +} + +bus_audio_turnoff_interior_bus( bus ) +{ + self endon( "left bus" ); + self endon( "death" ); + self endon( "player_suicide" ); + self endon( "bled_out" ); + + bus waittill( "stop_bus_audio" ); + + self clientnotify( "buslpe" ); +} + +play_lava_audio() +{ + ent_back = spawn( "script_origin", self gettagorigin( "tag_wheel_back_left" ) ); + ent_back linkto( self, "tag_wheel_back_left" ); + ent_front = spawn( "script_origin", self gettagorigin( "tag_wheel_front_right" ) ); + ent_front linkto( self, "tag_wheel_front_right" ); + + while ( true ) + { + if ( !( isdefined( self.ismoving ) && self.ismoving ) ) + { + wait 1; + continue; + } + + if ( self maps\mp\zm_transit_lava::object_touching_lava() && ( self.zone != "zone_station_ext" && self.zone != "zone_pri" ) ) + { + ent_front playloopsound( "zmb_bus_lava_wheels_loop", 0.5 ); + ent_back playloopsound( "zmb_bus_lava_wheels_loop", 0.5 ); + wait 2; + + while ( self maps\mp\zm_transit_lava::object_touching_lava() ) + wait 2; + } + + if ( isdefined( ent_back ) && isdefined( ent_front ) ) + { + ent_front stoploopsound( 1 ); + ent_back stoploopsound( 1 ); + } + + wait 2; + } +} + +delete_lava_audio_ents( ent1, ent2 ) +{ + self waittill( "stop_bus_audio" ); + + ent1 delete(); + ent2 delete(); +} + +start_stopping_bus( stop_fast ) +{ + if ( isdefined( stop_fast ) && stop_fast ) + self setspeed( 4, 15 ); + else + self setspeed( 4, 5 ); +} + +begin_arrival_slowdown() +{ + self setspeed( 5 ); +} + +do_automoton_vox( name ) +{ + if ( !issubstr( name, "vox_" ) ) + return; + + if ( !isdefined( level.stops ) ) + level.stops = []; + + if ( !isdefined( level.stops[name] ) ) + level.stops[name] = 0; + + level.stops[name]++; + + if ( level.stops[name] > 5 ) + level.stops[name] = 4; + + switch ( name ) + { + case "vox_enter_tunnel": + level thread automatonspeak( "inform", "near_tunnel" + level.stops[name] ); + break; + case "vox_ride_generic": + if ( isdefined( level.stops ) && isdefined( level.stops["depot"] ) && level.stops["depot"] < 1 ) + return; + + level thread automatonspeak( "inform", "ride_generic" ); + break; + case "vox_exit_tunnel": + if ( !( isdefined( level.tunnel_exit_vox_played ) && level.tunnel_exit_vox_played ) ) + { + level thread automatonspeak( "inform", "leave_tunnel" ); + level.tunnel_exit_vox_played = 1; + } + + break; + case "vox_cornfield": + level thread automatonspeak( "inform", "near_corn" + level.stops[name] ); + break; + case "vox_forest1": + level thread automatonspeak( "inform", "near_forest1_" + level.stops[name] ); + break; + case "vox_forest2": + level thread automatonspeak( "inform", "near_forest2_" + level.stops[name] ); + break; + } +} + +do_automaton_arrival_vox( destination ) +{ + if ( !isdefined( level.stops ) ) + level.stops = []; + + if ( !isdefined( level.stops[destination] ) ) + level.stops[destination] = 0; + + if ( destination == "depot" && !( isdefined( level.bus_intro_done ) && level.bus_intro_done ) ) + return; + + level.stops[destination]++; + + if ( level.stops[destination] > 5 ) + level.stops[destination] = 4; + + switch ( destination ) + { + case "depot": + if ( !( isdefined( level.bus_intro_done ) && level.bus_intro_done ) ) + break; + + level thread automatonspeak( "inform", "near_station" + level.stops[destination] ); + break; + case "town": + case "power": + case "farm": + case "diner": + level thread automatonspeak( "inform", "near_" + destination + level.stops[destination] ); + break; + case "bridge": + if ( isdefined( level.collapse_vox_said ) && level.collapse_vox_said ) + level thread automatonspeak( "inform", "near_" + destination + level.stops[destination] ); + + break; + } +} + +do_player_bus_location_vox( node_info ) +{ + players = get_players(); + players = array_randomize( players ); + valid_player = undefined; + + foreach ( player in players ) + { + if ( isdefined( player.isonbus ) && player.isonbus ) + { + valid_player = player; + break; + } + } + + if ( !isdefined( valid_player ) ) + return; + + if ( isdefined( level.bus_zombie_danger ) && level.bus_zombie_danger && !valid_player.talks_in_danger ) + return; + + vo_line = undefined; + + if ( issubstr( node_info, "map_in" ) ) + { + if ( !isdefined( level.arrivals ) ) + level.arrivals = []; + + if ( !isdefined( level.arrivals[node_info] ) ) + level.arrivals[node_info] = 0; + + level.arrivals[node_info]++; + + if ( level.arrivals[node_info] > 4 ) + level.arrivals[node_info] = 4; + + vo_line = node_info + level.arrivals[node_info]; + } + else + { + vo_line = node_info; + + if ( randomint( 100 ) > 75 ) + vo_line = "bus_ride"; + } + + if ( !isdefined( vo_line ) ) + return; + + if ( randomint( 100 ) < 25 ) + valid_player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", vo_line ); +} + +do_player_bus_zombie_vox( event, chance, timer ) +{ + if ( isdefined( level.doing_bus_zombie_vox ) && level.doing_bus_zombie_vox || !isdefined( event ) ) + return; + + if ( !isdefined( chance ) ) + chance = 100; + + time = 30; + + if ( isdefined( timer ) ) + time = timer; + + players = get_players(); + players = array_randomize( players ); + valid_player = undefined; + + foreach ( player in players ) + { + if ( isdefined( player.isonbus ) && player.isonbus ) + { + valid_player = player; + break; + } + } + + if ( isdefined( valid_player ) ) + { + valid_player thread do_player_general_vox( "general", event, time, chance ); + level.doing_bus_zombie_vox = 1; + wait 10; + level.doing_bus_zombie_vox = 0; + } +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_classic.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_classic.gsc new file mode 100644 index 0000000..59bed18 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_classic.gsc @@ -0,0 +1,525 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zm_transit_utility; +#include maps\mp\zombies\_zm_ai_screecher; +#include maps\mp\zombies\_zm_ai_avogadro; +#include maps\mp\zm_transit_buildables; +#include maps\mp\zm_transit_sq; +#include maps\mp\zombies\_zm_equip_turbine; +#include maps\mp\zombies\_zm_equip_turret; +#include maps\mp\zombies\_zm_equip_electrictrap; +#include maps\mp\zm_transit_bus; +#include maps\mp\zm_transit_ai_screecher; +#include maps\mp\zombies\_zm_banking; +#include maps\mp\zm_transit_power; +#include maps\mp\zm_transit_ambush; +#include maps\mp\zm_transit; +#include maps\mp\zm_transit_distance_tracking; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_blockers; +#include maps\mp\zombies\_zm_weapon_locker; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_audio; + +precache() +{ + maps\mp\zombies\_zm_ai_screecher::precache(); + maps\mp\zombies\_zm_ai_avogadro::precache(); + maps\mp\zm_transit_buildables::include_buildables(); + maps\mp\zm_transit_buildables::init_buildables(); + maps\mp\zm_transit_sq::init(); + maps\mp\zombies\_zm_equip_turbine::init(); + maps\mp\zombies\_zm_equip_turret::init(); + maps\mp\zombies\_zm_equip_electrictrap::init(); + precachemodel( "zm_collision_transit_town_classic" ); + precachemodel( "p_glo_tools_chest_tall" ); + precachemodel( "fxanim_zom_bus_interior_mod" ); + precachemodel( "p6_anim_zm_barricade_board_collision" ); + precachemodel( "p6_anim_zm_barricade_board_bus_collision" ); + registerclientfield( "vehicle", "the_bus_spawned", 1, 1, "int" ); + registerclientfield( "vehicle", "bus_flashing_lights", 1, 1, "int" ); + registerclientfield( "vehicle", "bus_head_lights", 1, 1, "int" ); + registerclientfield( "vehicle", "bus_brake_lights", 1, 1, "int" ); + registerclientfield( "vehicle", "bus_turn_signal_left", 1, 1, "int" ); + registerclientfield( "vehicle", "bus_turn_signal_right", 1, 1, "int" ); + registerclientfield( "allplayers", "screecher_sq_lights", 1, 1, "int" ); + registerclientfield( "allplayers", "screecher_maxis_lights", 1, 1, "int" ); + registerclientfield( "allplayers", "sq_tower_sparks", 1, 1, "int" ); + onplayerconnect_callback( maps\mp\zm_transit_bus::onplayerconnect ); + onplayerconnect_callback( maps\mp\zm_transit_ai_screecher::portal_player_watcher ); + level thread maps\mp\zombies\_zm_banking::init(); +} + +main() +{ + level.ta_vaultfee = 100; + level.ta_tellerfee = 100; + + if ( !isdefined( level.custom_ai_type ) ) + level.custom_ai_type = []; + + level.custom_ai_type[level.custom_ai_type.size] = maps\mp\zombies\_zm_ai_screecher::init; + level.custom_ai_type[level.custom_ai_type.size] = maps\mp\zombies\_zm_ai_avogadro::init; + level.enemy_location_override_func = maps\mp\zm_transit_bus::enemy_location_override; + level.adjust_enemyoverride_func = maps\mp\zm_transit_bus::adjust_enemyoverride; + level.closest_player_override = ::closest_player_transit; + door_triggers = getentarray( "electric_door", "script_noteworthy" ); + + foreach ( trigger in door_triggers ) + { + if ( isdefined( trigger.script_flag ) && trigger.script_flag == "OnPowDoorWH" ) + continue; + + trigger.power_door_ignore_flag_wait = 1; + } + + door_triggers = getentarray( "local_electric_door", "script_noteworthy" ); + + foreach ( trigger in door_triggers ) + { + if ( isdefined( trigger.script_flag ) && trigger.script_flag == "OnPowDoorWH" ) + continue; + + trigger.power_door_ignore_flag_wait = 1; + } + + level.zm_traversal_override = ::zm_traversal_override; + level.the_bus = getent( "the_bus", "targetname" ); + level thread init_bus(); + level thread maps\mp\zm_transit_sq::start_transit_sidequest(); + level thread inert_zombies_init(); + level thread maps\mp\zm_transit_power::initializepower(); + level thread maps\mp\zm_transit_ambush::main(); + level thread maps\mp\zm_transit::falling_death_init(); + level.check_valid_spawn_override = maps\mp\zm_transit::transit_respawn_override; + level.zombie_check_suppress_gibs = maps\mp\zm_transit_bus::shouldsuppressgibs; + level thread transit_vault_breach_init(); + level thread maps\mp\zm_transit_distance_tracking::zombie_tracking_init(); + level thread solo_tombstone_removal(); + level thread collapsing_bridge_init(); + level thread banking_and_weapon_locker_main(); + level thread bus_roof_damage_init(); + level thread diner_hatch_access(); + level thread maps\mp\zombies\_zm_buildables::think_buildables(); + setdvar( "r_rimIntensity_debug", 1 ); + setdvar( "r_rimIntensity", 3.5 ); + level thread zm_traversal_override_ignores(); + level thread maps\mp\zombies\_zm::post_main(); + level.spectator_respawn_custom_score = ::callback_spectator_respawn_custom_score; + level.custom_pap_deny_vo_func = ::transit_custom_deny_vox; + level.custom_generic_deny_vo_func = ::transit_custom_deny_vox; + level.custom_player_death_vo_func = ::transit_custom_death_vox; + level.custom_powerup_vo_response = ::transit_custom_powerup_vo_response; + level.zombie_vars["zombie_intermission_time"] = 12; +} + +zm_traversal_override_ignores() +{ + +} + +zm_traversal_override( traversealias ) +{ + suffix = ""; + sndalias = undefined; + chance = 0; + sndchance = 0; + + if ( !( isdefined( self.isscreecher ) && self.isscreecher ) && !( isdefined( self.is_avogadro ) && self.is_avogadro ) ) + { + if ( isdefined( self.traversestartnode ) && isdefined( self.traversestartnode.script_string ) && self.traversestartnode.script_string == "ignore_traverse_override" ) + return traversealias; + + switch ( traversealias ) + { + case "jump_down_48": + if ( isdefined( self.has_legs ) && self.has_legs ) + { + suffix = "_stumble"; + chance = 0; + } + + break; + case "jump_down_90": + case "jump_down_222": + case "jump_down_190": + case "jump_down_127": + if ( isdefined( self.has_legs ) && self.has_legs ) + { + suffix = "_stumble"; + chance = 30; + } + + break; + case "jump_up_48": + case "jump_up_222": + case "jump_up_190": + case "jump_up_127": + sndalias = "vox_zmba_zombie_pickup_" + randomint( 2 ); + suffix = "_grabbed"; + chance = 6; + sndchance = 3; + break; + } + + if ( chance != 0 && randomint( 100 ) <= chance ) + { + if ( isdefined( sndalias ) && randomint( 100 ) <= sndchance ) + playsoundatposition( sndalias, self.origin ); + + traversealias += suffix; + } + } + + return traversealias; +} + +init_bus() +{ + flag_wait( "start_zombie_round_logic" ); + level.the_bus thread maps\mp\zm_transit_bus::bussetup(); +} + +closest_player_transit( origin, players ) +{ + if ( isdefined( level.the_bus ) && level.the_bus.numaliveplayersridingbus > 0 || !( isdefined( level.calc_closest_player_using_paths ) && level.calc_closest_player_using_paths ) ) + player = getclosest( origin, players ); + else + player = get_closest_player_using_paths( origin, players ); + + return player; +} + +transit_vault_breach_init() +{ + vault_doors = getentarray( "town_bunker_door", "targetname" ); + array_thread( vault_doors, ::transit_vault_breach ); +} + +transit_vault_breach() +{ + if ( isdefined( self ) ) + { + self.damage_state = 0; + + if ( isdefined( self.target ) ) + { + clip = getent( self.target, "targetname" ); + clip linkto( self ); + self.clip = clip; + } + + self thread vault_breach_think(); + } + else + return; +} + +vault_breach_think() +{ + level endon( "intermission" ); + self.health = 99999; + self setcandamage( 1 ); + self.damage_state = 0; + self.clip.health = 99999; + self.clip setcandamage( 1 ); + + while ( true ) + { + self thread track_clip_damage(); + + self waittill( "damage", amount, attacker, direction, point, dmg_type, modelname, tagname, partname, weaponname ); + + if ( isdefined( weaponname ) && ( weaponname == "emp_grenade_zm" || weaponname == "ray_gun_zm" || weaponname == "ray_gun_upgraded_zm" ) ) + continue; + + if ( isdefined( amount ) && amount <= 1 ) + continue; + + if ( isplayer( attacker ) && ( dmg_type == "MOD_PROJECTILE" || dmg_type == "MOD_PROJECTILE_SPLASH" || dmg_type == "MOD_EXPLOSIVE" || dmg_type == "MOD_EXPLOSIVE_SPLASH" || dmg_type == "MOD_GRENADE" || dmg_type == "MOD_GRENADE_SPLASH" ) ) + { + if ( self.damage_state == 0 ) + self.damage_state = 1; + + playfxontag( level._effect["def_explosion"], self, "tag_origin" ); + self playsound( "exp_vault_explode" ); + self bunkerdoorrotate( 1 ); + + if ( isdefined( self.script_flag ) ) + flag_set( self.script_flag ); + + if ( isdefined( self.clip ) ) + self.clip connectpaths(); + + wait 1; + playsoundatposition( "zmb_cha_ching_loud", self.origin ); + return; + } + } +} + +track_clip_damage() +{ + self endon( "damage" ); + + self.clip waittill( "damage", amount, attacker, direction, point, dmg_type ); + + self notify( "damage", amount, attacker, direction, point, dmg_type ); +} + +bunkerdoorrotate( open, time = 0.2 ) +{ + rotate = self.script_float; + + if ( !open ) + rotate *= -1; + + if ( isdefined( self.script_angles ) ) + { + self notsolid(); + self rotateto( self.script_angles, time, 0, 0 ); + self thread maps\mp\zombies\_zm_blockers::door_solid_thread(); + } +} + +collapsing_bridge_init() +{ + time = 1.5; + trig = getent( "bridge_trig", "targetname" ); + + if ( !isdefined( trig ) ) + return; + + bridge = getentarray( trig.target, "targetname" ); + + if ( !isdefined( bridge ) ) + return; + + trig waittill( "trigger", who ); + + trig playsound( "evt_bridge_collapse_start" ); + trig thread play_delayed_sound( time ); + + for ( i = 0; i < bridge.size; i++ ) + { + if ( isdefined( bridge[i].script_angles ) ) + rot_angle = bridge[i].script_angles; + else + rot_angle = ( 0, 0, 0 ); + + earthquake( randomfloatrange( 0.5, 1 ), 1.5, bridge[i].origin, 1000 ); + exploder( 150 ); + bridge[i] rotateto( rot_angle, time, 0, 0 ); + } + + wait 1; + + if ( !isdefined( level.collapse_vox_said ) ) + { + level thread automatonspeak( "inform", "bridge_collapse" ); + level.collapse_vox_said = 1; + } +} + +play_delayed_sound( time ) +{ + wait( time ); + self playsound( "evt_bridge_collapse_end" ); +} + +banking_and_weapon_locker_main() +{ + flag_wait( "start_zombie_round_logic" ); + weapon_locker = spawnstruct(); + weapon_locker.origin = ( 8236, -6844, 144 ); + weapon_locker.angles = vectorscale( ( 0, 1, 0 ), 30.0 ); + weapon_locker.script_length = 16; + weapon_locker.script_width = 32; + weapon_locker.script_height = 64; + deposit_spot = spawnstruct(); + deposit_spot.origin = ( 588, 402, 6 ); + deposit_spot.angles = ( 0, 0, 0 ); + deposit_spot.targetname = "bank_deposit"; + deposit_spot.script_unitrigger_type = "unitrigger_radius_use"; + deposit_spot.radius = 32; + withdraw_spot = spawnstruct(); + withdraw_spot.origin = ( 588, 496, 6 ); + withdraw_spot.angles = ( 0, 0, 0 ); + withdraw_spot.targetname = "bank_withdraw"; + withdraw_spot.script_unitrigger_type = "unitrigger_radius_use"; + withdraw_spot.radius = 32; + level thread maps\mp\zombies\_zm_weapon_locker::main(); + weapon_locker thread maps\mp\zombies\_zm_weapon_locker::triggerweaponslockerwatch(); + level thread maps\mp\zombies\_zm_banking::main(); + deposit_spot thread maps\mp\zombies\_zm_banking::bank_deposit_unitrigger(); + withdraw_spot thread maps\mp\zombies\_zm_banking::bank_withdraw_unitrigger(); +} + +bus_roof_damage_init() +{ + trigs = getentarray( "bus_knock_off", "targetname" ); + array_thread( trigs, ::bus_roof_damage ); +} + +bus_roof_damage() +{ + while ( true ) + { + self waittill( "trigger", who ); + + if ( isplayer( who ) ) + { + if ( who getstance() == "stand" ) + who dodamage( 1, who.origin ); + } + else if ( !( isdefined( who.marked_for_death ) && who.marked_for_death ) && ( isdefined( who.has_legs ) && who.has_legs ) ) + { + who dodamage( who.health + 100, who.origin ); + who.marked_for_death = 1; + level.zombie_total++; + } + + wait 0.1; + } +} + +diner_hatch_access() +{ + diner_hatch = getent( "diner_hatch", "targetname" ); + diner_hatch_col = getent( "diner_hatch_collision", "targetname" ); + diner_hatch_mantle = getent( "diner_hatch_mantle", "targetname" ); + + if ( !isdefined( diner_hatch ) || !isdefined( diner_hatch_col ) ) + return; + + diner_hatch hide(); + diner_hatch_mantle.start_origin = diner_hatch_mantle.origin; + diner_hatch_mantle.origin += vectorscale( ( 0, 0, 1 ), 500.0 ); + player = wait_for_buildable( "dinerhatch" ); + diner_hatch show(); + diner_hatch_col delete(); + diner_hatch_mantle.origin = diner_hatch_mantle.start_origin; + player maps\mp\zombies\_zm_buildables::track_placed_buildables( "dinerhatch" ); +} + +inert_zombies_init() +{ + inert_spawn_location = getstructarray( "inert_location", "script_noteworthy" ); + + if ( isdefined( inert_spawn_location ) ) + array_thread( inert_spawn_location, ::spawn_inert_zombies ); +} + +spawn_inert_zombies() +{ + if ( !isdefined( self.angles ) ) + self.angles = ( 0, 0, 0 ); + + wait 0.1; + + if ( isdefined( level.zombie_spawners ) ) + { + spawner = random( level.zombie_spawners ); + ai = spawn_zombie( spawner ); + } + + if ( isdefined( ai ) ) + { + ai forceteleport( self.origin, self.angles ); + ai.start_inert = 1; + } +} + +sparking_power_lines() +{ + lines = getentarray( "power_line_sparking", "targetname" ); +} + +callback_spectator_respawn_custom_score() +{ + difference = 1500 - self.score; + money_required = 1; + + if ( difference >= 1000 ) + money_required = 2; + + if ( !sessionmodeisonlinegame() ) + { + if ( !isdefined( self.account_val ) ) + self.account_val = 0; + + if ( self.account_val >= money_required ) + self.account_val -= money_required; + else + self.account_val = 0; + } + else + { + account_val = self maps\mp\zombies\_zm_stats::get_map_stat( "depositBox" ); + + if ( account_val >= money_required ) + self set_map_stat( "depositBox", account_val - money_required ); + else + self set_map_stat( "depositBox", 0 ); + } +} + +transit_custom_deny_vox( door_buy ) +{ + switch ( self.characterindex ) + { + case 0: + alias = randomintrange( 2, 5 ); + + if ( isdefined( door_buy ) && door_buy ) + alias = undefined; + + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "door_deny", undefined, alias ); + break; + case 1: + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); + break; + case 2: + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); + break; + case 3: + x = randomint( 100 ); + + if ( x > 66 ) + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); + else if ( x > 33 ) + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_box", undefined, 0 ); + else + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 0 ); + + break; + } +} + +transit_custom_death_vox() +{ + if ( self.characterindex != 2 ) + return false; + + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "pain_high" ); + return true; +} + +transit_custom_powerup_vo_response( powerup_player, powerup ) +{ + dist = 250000; + players = get_players(); + + foreach ( player in players ) + { + if ( player == powerup_player ) + continue; + else if ( distancesquared( player.origin, powerup_player.origin ) < dist ) + player do_player_general_vox( "general", "exert_laugh", 10, 5 ); + } +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_cling.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_cling.gsc new file mode 100644 index 0000000..d5fa94f --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_cling.gsc @@ -0,0 +1,315 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; + +initializecling() +{ + setupclingtrigger(); +} + +setupclingtrigger() +{ + if ( !isdefined( level.the_bus ) ) + return; + + enablecling(); + triggers = []; + level.cling_triggers = []; + triggers = getentarray( "cling_trigger", "script_noteworthy" ); + + for ( i = 0; i < triggers.size; i++ ) + { + level.cling_triggers[i] = spawnstruct(); + level.cling_triggers[i].trigger = triggers[i]; + trigger = level.cling_triggers[i].trigger; + trigger sethintstring( "Hold [{+activate}] To Cling To The Bus." ); + trigger setcursorhint( "HINT_NOICON" ); + makevisibletoall( trigger ); + trigger enablelinkto(); + trigger linkto( level.the_bus, "", level.the_bus worldtolocalcoords( trigger.origin ), trigger.angles - level.the_bus.angles ); + trigger thread setclingtriggervisibility( i ); + trigger thread clingtriggerusethink( i ); + level.cling_triggers[i].position = getent( trigger.target, "targetname" ); + position = level.cling_triggers[i].position; + position linkto( level.the_bus, "", level.the_bus worldtolocalcoords( position.origin ), position.angles - level.the_bus.angles ); + level.cling_triggers[i].player = undefined; + } + + disablecling(); +} + +enablecling() +{ + level.cling_enabled = 1; + + if ( isdefined( level.cling_triggers ) ) + { + foreach ( struct in level.cling_triggers ) + { + struct.trigger sethintstring( "Hold [{+activate}] To Cling To The Bus." ); + struct.trigger setteamfortrigger( "allies" ); + } + } +} + +disablecling() +{ + level.cling_enabled = 0; + detachallplayersfromclinging(); + + if ( isdefined( level.cling_triggers ) ) + { + foreach ( struct in level.cling_triggers ) + { + struct.trigger sethintstring( "" ); + struct.trigger setteamfortrigger( "none" ); + } + } +} + +makevisibletoall( trigger ) +{ + players = get_players(); + + for ( playerindex = 0; playerindex < players.size; playerindex++ ) + trigger setinvisibletoplayer( players[playerindex], 0 ); +} + +clingtriggerusethink( positionindex ) +{ + while ( true ) + { + self waittill( "trigger", who ); + + if ( !level.cling_enabled ) + continue; + + if ( !who usebuttonpressed() ) + continue; + + if ( who in_revive_trigger() ) + continue; + + if ( isdefined( who.is_drinking ) && who.is_drinking == 1 ) + continue; + + if ( isdefined( level.cling_triggers[positionindex].player ) ) + { + if ( level.cling_triggers[positionindex].player == who ) + dettachplayerfrombus( who, positionindex ); + + continue; + } + + attachplayertobus( who, positionindex ); + thread detachfrombusonevent( who, positionindex ); + } +} + +setclingtriggervisibility( positionindex ) +{ + while ( true ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + is_player_clinging = isdefined( level.cling_triggers[positionindex].player ) && level.cling_triggers[positionindex].player == players[i]; + no_player_clinging = !isdefined( level.cling_triggers[positionindex].player ); + + if ( is_player_clinging || no_player_clinging && level.cling_enabled ) + { + self setinvisibletoplayer( players[i], 0 ); + continue; + } + + self setinvisibletoplayer( players[i], 1 ); + } + + wait 0.1; + } +} + +detachallplayersfromclinging() +{ + for ( positionindex = 0; positionindex < level.cling_triggers.size; positionindex++ ) + { + if ( !isdefined( level.cling_triggers[positionindex] ) || !isdefined( level.cling_triggers[positionindex].player ) ) + continue; + + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( level.cling_triggers[positionindex].player == players[i] ) + { + dettachplayerfrombus( players[i], positionindex ); + break; + } + } + } +} + +attachplayertobus( player, positionindex ) +{ + turn_angle = 130; + pitch_up = 25; + + if ( positionisupgraded( positionindex ) ) + { + turn_angle = 180; + pitch_up = 120; + } + + level.cling_triggers[positionindex].player = player; + + if ( positionisbl( positionindex ) ) + player playerlinktodelta( level.cling_triggers[positionindex].position, "tag_origin", 1, 180, turn_angle, pitch_up, 120, 1 ); + else if ( positionisbr( positionindex ) ) + player playerlinktodelta( level.cling_triggers[positionindex].position, "tag_origin", 1, turn_angle, 180, pitch_up, 120, 1 ); + else + { + level.cling_triggers[positionindex].player = undefined; + return; + } + + level.cling_triggers[positionindex].trigger sethintstring( "Hold [{+activate}] To Let Go Of The Bus." ); + player disableplayerweapons( positionindex ); +} + +positionisbl( positionindex ) +{ + return level.cling_triggers[positionindex].position.script_string == "back_left"; +} + +positionisbr( positionindex ) +{ + return level.cling_triggers[positionindex].position.script_string == "back_right"; +} + +positionisupgraded( positionindex ) +{ + return positionisbl( positionindex ) && isdefined( level.the_bus.upgrades["PlatformL"] ) && level.the_bus.upgrades["PlatformL"].installed || positionisbr( positionindex ) && isdefined( level.the_bus.upgrades["PlatformR"] ) && level.the_bus.upgrades["PlatformR"].installed; +} + +dettachplayerfrombus( player, positionindex ) +{ + level.cling_triggers[positionindex].trigger sethintstring( "Hold [{+activate}] To Cling To The Bus." ); + + if ( !isdefined( level.cling_triggers[positionindex].player ) ) + return; + + player unlink(); + level.cling_triggers[positionindex].player = undefined; + player enableplayerweapons( positionindex ); + player notify( "cling_dettached" ); +} + +detachfrombusonevent( player, positionindex ) +{ + player endon( "cling_dettached" ); + player waittill_any( "fake_death", "death", "player_downed" ); + dettachplayerfrombus( player, positionindex ); +} + +disableplayerweapons( positionindex ) +{ + weaponinventory = self getweaponslist( 1 ); + self.lastactiveweapon = self getcurrentweapon(); + self.clingpistol = undefined; + self.hadclingpistol = 0; + + if ( !positionisupgraded( positionindex ) ) + { + for ( i = 0; i < weaponinventory.size; i++ ) + { + weapon = weaponinventory[i]; + + if ( weaponclass( weapon ) == "pistol" && ( !isdefined( self.clingpistol ) || weapon == self.lastactiveweapon || self.clingpistol == "m1911_zm" ) ) + { + self.clingpistol = weapon; + self.hadclingpistol = 1; + } + } + + if ( !isdefined( self.clingpistol ) ) + { + self giveweapon( "m1911_zm" ); + self.clingpistol = "m1911_zm"; + } + + self switchtoweapon( self.clingpistol ); + self disableweaponcycling(); + self disableoffhandweapons(); + self allowcrouch( 0 ); + } + + self allowlean( 0 ); + self allowsprint( 0 ); + self allowprone( 0 ); +} + +enableplayerweapons( positionindex ) +{ + self allowlean( 1 ); + self allowsprint( 1 ); + self allowprone( 1 ); + + if ( !positionisupgraded( positionindex ) ) + { + if ( !self.hadclingpistol ) + self takeweapon( "m1911_zm" ); + + self enableweaponcycling(); + self enableoffhandweapons(); + self allowcrouch( 1 ); + + if ( self.lastactiveweapon != "none" && self.lastactiveweapon != "mortar_round" && self.lastactiveweapon != "mine_bouncing_betty" && self.lastactiveweapon != "claymore_zm" ) + self switchtoweapon( self.lastactiveweapon ); + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + } + } +} + +playerisclingingtobus() +{ + if ( !isdefined( level.cling_triggers ) ) + return false; + + for ( i = 0; i < level.cling_triggers.size; i++ ) + { + if ( !isdefined( level.cling_triggers[i] ) || !isdefined( level.cling_triggers[i].player ) ) + continue; + + if ( level.cling_triggers[i].player == self ) + return true; + } + + return false; +} + +_getnumplayersclinging() +{ + num_clinging = 0; + + for ( i = 0; i < level.cling_triggers.size; i++ ) + { + if ( isdefined( level.cling_triggers[i] ) && isdefined( level.cling_triggers[i].player ) ) + num_clinging++; + } + + return num_clinging; +} + +_getbusattackposition( player ) +{ + pos = ( -208, 0, 48 ); + return level.the_bus localtoworldcoords( pos ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_distance_tracking.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_distance_tracking.gsc new file mode 100644 index 0000000..3d5e091 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_distance_tracking.gsc @@ -0,0 +1,144 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_spawner; + +zombie_tracking_init() +{ + level.zombie_respawned_health = []; + + if ( !isdefined( level.zombie_tracking_dist ) ) + level.zombie_tracking_dist = 1500; + + if ( !isdefined( level.zombie_tracking_wait ) ) + level.zombie_tracking_wait = 10; + + while ( true ) + { + zombies = get_round_enemy_array(); + + if ( !isdefined( zombies ) || isdefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking ) + { + wait( level.zombie_tracking_wait ); + continue; + } + else + { + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i] ) && !( isdefined( zombies[i].ignore_distance_tracking ) && zombies[i].ignore_distance_tracking ) ) + zombies[i] thread delete_zombie_noone_looking( level.zombie_tracking_dist ); + } + } + + wait( level.zombie_tracking_wait ); + } +} + +delete_zombie_noone_looking( how_close ) +{ + self endon( "death" ); + + if ( !isdefined( how_close ) ) + how_close = 1000; + + distance_squared_check = how_close * how_close; + too_far_dist = distance_squared_check * 3; + + if ( isdefined( level.zombie_tracking_too_far_dist ) ) + too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist; + + self.inview = 0; + self.player_close = 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].sessionstate == "spectator" ) + continue; + + if ( isdefined( level.only_track_targeted_players ) ) + { + if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[i] ) + continue; + } + + can_be_seen = self player_can_see_me( players[i] ); + + if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist ) + self.inview++; + + if ( distancesquared( self.origin, players[i].origin ) < distance_squared_check ) + self.player_close++; + } + + wait 0.1; + + if ( self.inview == 0 && self.player_close == 0 ) + { + if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" ) + return; + + if ( isdefined( self.electrified ) && self.electrified == 1 ) + return; + + if ( isdefined( self.in_the_ground ) && self.in_the_ground == 1 ) + return; + + zombies = getaiarray( "axis" ); + + if ( ( !isdefined( self.damagemod ) || self.damagemod == "MOD_UNKNOWN" ) && self.health < self.maxhealth ) + { + if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) ) + { + level.zombie_total++; + level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health; + } + } + else if ( zombies.size + level.zombie_total > 24 || zombies.size + level.zombie_total <= 24 && self.health >= self.maxhealth ) + { + if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) ) + { + level.zombie_total++; + + if ( self.health < level.zombie_health ) + level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health; + } + } + + self maps\mp\zombies\_zm_spawner::reset_attack_spot(); + self notify( "zombie_delete" ); + self delete(); + recalc_zombie_array(); + } +} + +player_can_see_me( player ) +{ + playerangles = player getplayerangles(); + playerforwardvec = anglestoforward( playerangles ); + playerunitforwardvec = vectornormalize( playerforwardvec ); + banzaipos = self.origin; + playerpos = player getorigin(); + playertobanzaivec = banzaipos - playerpos; + playertobanzaiunitvec = vectornormalize( playertobanzaivec ); + forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec ); + + if ( forwarddotbanzai >= 1 ) + anglefromcenter = 0; + else if ( forwarddotbanzai <= -1 ) + anglefromcenter = 180; + else + anglefromcenter = acos( forwarddotbanzai ); + + playerfov = getdvarfloat( "cg_fov" ); + banzaivsplayerfovbuffer = getdvarfloat( _hash_BCB625CF ); + + if ( banzaivsplayerfovbuffer <= 0 ) + banzaivsplayerfovbuffer = 0.2; + + playercanseeme = anglefromcenter <= playerfov * 0.5 * ( 1 - banzaivsplayerfovbuffer ); + return playercanseeme; +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_ffotd.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_ffotd.gsc new file mode 100644 index 0000000..68d6e2b --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_ffotd.gsc @@ -0,0 +1,293 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_ffotd; +#include maps\mp\zm_transit; + +main_start() +{ + precachemodel( "collision_wall_256x256x10_standard" ); + precachemodel( "collision_geo_32x32x10_standard" ); + precachemodel( "collision_wall_128x128x10_standard" ); + precachemodel( "collision_wall_64x64x10_standard" ); + precachemodel( "collision_wall_512x512x10_standard" ); + precachemodel( "collision_player_32x32x128" ); + precachemodel( "collision_player_256x256x256" ); + old_roof_trig = getent( "bus_roof_watch", "targetname" ); + level.roof_trig = spawn( "trigger_box", old_roof_trig.origin, 0, 464, 180, 120 ); + level.roof_trig.targetname = "bus_roof_watch"; + old_roof_trig delete(); + + if ( isdefined( level.use_swipe_protection ) ) + onplayerconnect_callback( ::claymore_watch_swipes ); + + powerdoors = getentarray( "local_electric_door", "script_noteworthy" ); + + foreach ( door in powerdoors ) + { + if ( isdefined( door.door_hold_trigger ) && door.door_hold_trigger == "zombie_door_hold_diner" ) + { + if ( isdefined( door.script_flag ) && door.script_flag == "OnPriDoorYar" ) + door.script_flag = undefined; + } + } +} + +main_end() +{ + if ( !is_true( level.optimise_for_splitscreen ) ) + { + maps\mp\zombies\_zm::spawn_kill_brush( ( 33, -450, -90 ), 982, 15 ); + location = level.scr_zm_map_start_location; + type = level.scr_zm_ui_gametype; + collision4 = spawn( "script_model", ( 12240, 8480, -720 ) ); + collision4 setmodel( "collision_wall_64x64x10_standard" ); + collision4.angles = ( 0, 0, 0 ); + collision4 ghost(); + collision5 = spawn( "script_model", ( 8320, -6679, 362 ) ); + collision5 setmodel( "collision_wall_256x256x10_standard" ); + collision5.angles = vectorscale( ( 0, 1, 0 ), 300.0 ); + collision5 ghost(); + collision6 = spawn( "script_model", ( 8340, -5018, 191 ) ); + collision6 setmodel( "collision_geo_32x32x10_standard" ); + collision6.angles = vectorscale( ( 0, 1, 0 ), 270.0 ); + collision6 ghost(); + collision7 = spawn( "script_model", ( 8340, -5018, 219 ) ); + collision7 setmodel( "collision_geo_32x32x10_standard" ); + collision7.angles = vectorscale( ( 0, 1, 0 ), 270.0 ); + collision7 ghost(); + collision8 = spawn( "script_model", ( 8044, -5018, 191 ) ); + collision8 setmodel( "collision_geo_32x32x10_standard" ); + collision8.angles = vectorscale( ( 0, 1, 0 ), 270.0 ); + collision8 ghost(); + collision9 = spawn( "script_model", ( 8044, -5018, 219 ) ); + collision9 setmodel( "collision_geo_32x32x10_standard" ); + collision9.angles = vectorscale( ( 0, 1, 0 ), 270.0 ); + collision9 ghost(); + + if ( location == "town" && type == "zstandard" ) + { + collision10 = spawn( "script_model", ( 1820, 126, 152 ) ); + collision10 setmodel( "collision_wall_128x128x10_standard" ); + collision10.angles = vectorscale( ( 0, 1, 0 ), 262.0 ); + collision10 ghost(); + } + + collision11 = spawn( "script_model", ( 11216.3, 8188, -432 ) ); + collision11 setmodel( "collision_wall_128x128x10_standard" ); + collision11.angles = vectorscale( ( 0, 0, 1 ), 180.0 ); + collision11 ghost(); + collision12 = spawn( "script_model", ( -454, 620.25, -1.75 ) ); + collision12 setmodel( "collision_wall_128x128x10_standard" ); + collision12.angles = vectorscale( ( 0, 1, 0 ), 330.0 ); + collision12 ghost(); + collision13 = spawn( "script_model", ( 11798, 8410, -734 ) ); + collision13 setmodel( "collision_wall_128x128x10_standard" ); + collision13.angles = ( 90, 260.589, -10.311 ); + collision13 ghost(); + collision14 = spawn( "script_model", ( 652, 240, 124 ) ); + collision14 setmodel( "collision_wall_128x128x10_standard" ); + collision14.angles = vectorscale( ( 0, 1, 0 ), 105.0 ); + collision14 ghost(); + + if ( location == "farm" && type == "zgrief" ) + { + collision15 = spawn( "script_model", ( 8052, -5204, 380 ) ); + collision15 setmodel( "collision_wall_64x64x10_standard" ); + collision15.angles = vectorscale( ( 0, 1, 0 ), 180.0 ); + collision15 ghost(); + } + + collision16 = spawn( "script_model", ( -448, 328, 112 ) ); + collision16 setmodel( "collision_wall_512x512x10_standard" ); + collision16.angles = ( 270, 67.822, 22.1776 ); + collision16 ghost(); + collision17 = spawn( "script_model", ( 6040, -5744, 240 ) ); + collision17 setmodel( "collision_player_256x256x256" ); + collision17.angles = vectorscale( ( 0, 0, 1 ), 90.0 ); + collision17 ghost(); + collision18 = spawn( "script_model", ( -6744, 4184, 64 ) ); + collision18 setmodel( "collision_wall_128x128x10_standard" ); + collision18.angles = vectorscale( ( 0, 0, 1 ), 90.0 ); + collision18 ghost(); + collision19 = spawn( "script_model", ( -6328, -7168, 264 ) ); + collision19 setmodel( "collision_player_256x256x256" ); + collision19.angles = vectorscale( ( 0, 0, 1 ), 90.0 ); + collision19 ghost(); + collision20 = spawn( "script_model", ( 9960, 7352, -136 ) ); + collision20 setmodel( "collision_player_256x256x256" ); + collision20.angles = vectorscale( ( 0, 0, 1 ), 90.0 ); + collision20 ghost(); + collision21 = spawn( "script_model", ( -4656, -7373, 0 ) ); + collision21 setmodel( "collision_player_32x32x128" ); + collision21.angles = vectorscale( ( 0, 1, 0 ), 341.6 ); + collision21 ghost(); + } + + apartment_exploit(); + town_truck_exploit(); + farm_porch_exploit(); + power_station_exploit(); + nacht_exploit(); + level.equipment_dead_zone_pos = []; + level.equipment_dead_zone_rad2 = []; + level.equipment_dead_zone_type = []; + level.equipment_dead_zone_pos[0] = ( -6252.98, -7947.23, 149.125 ); + level.equipment_dead_zone_rad2[0] = 3600; + level.equipment_dead_zone_pos[1] = ( -11752, -2515, 288 ); + level.equipment_dead_zone_rad2[1] = 14400; + level.equipment_dead_zone_type[1] = "t6_wpn_zmb_shield_world"; + level.equipment_dead_zone_pos[2] = ( -6664, 4592, -48 ); + level.equipment_dead_zone_rad2[2] = 2304; + level.equipment_dead_zone_type[2] = "t6_wpn_zmb_shield_world"; + level.equipment_dead_zone_pos[3] = ( 7656, -4741, 38 ); + level.equipment_dead_zone_rad2[3] = 2304; + level.equipment_dead_zone_type[3] = "t6_wpn_zmb_shield_world"; + level.equipment_dead_zone_pos[4] = ( -11712, -776, 224 ); + level.equipment_dead_zone_rad2[4] = 16384; + level.equipment_dead_zone_type[4] = "t6_wpn_zmb_shield_world"; + level.equipment_dead_zone_pos[5] = ( -4868, -7713, -42 ); + level.equipment_dead_zone_rad2[5] = 256; + level.equipment_dead_zone_type[5] = "t6_wpn_zmb_shield_world"; + level.equipment_safe_to_drop = ::equipment_safe_to_drop_ffotd; +} + +apartment_exploit() +{ + zombie_trigger_origin = ( 994, -1145, 130 ); + zombie_trigger_radius = 32; + zombie_trigger_height = 64; + player_trigger_origin = ( 1068, -1085, 130 ); + player_trigger_radius = 72; + zombie_goto_point = ( 1024, -1024, 136 ); + level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); +} + +nacht_exploit() +{ + zombie_trigger_origin = ( 13720, -639, -188 ); + zombie_trigger_radius = 64; + zombie_trigger_height = 128; + player_trigger_origin = ( 13605, -651, -188 ); + player_trigger_radius = 64; + zombie_goto_point = ( 13671, -745, -188 ); + level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); +} + +town_truck_exploit() +{ + zombie_trigger_origin = ( 1414, -1921, -42 ); + zombie_trigger_radius = 50; + zombie_trigger_height = 64; + player_trigger_origin = ( 1476, -1776, -42 ); + player_trigger_radius = 76; + zombie_goto_point = ( 1476, -1867, -42 ); + level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); +} + +farm_porch_exploit() +{ + zombie_trigger_origin = ( 7864, -6088, 104 ); + zombie_trigger_radius = 85.5; + zombie_trigger_height = 64; + player_trigger_origin = ( 7984, -6128, 168 ); + player_trigger_radius = 44; + zombie_goto_point = ( 7960, -6072, 96 ); + level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); + zombie_trigger_origin = ( 7996, -6169, 132 ); + zombie_trigger_radius = 200.1; + zombie_trigger_height = 64; + player_trigger_origin = ( 7893, -6078, 121 ); + player_trigger_radius = 50; + zombie_goto_point = ( 7828, -6052.5, 125 ); + level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); +} + +power_station_exploit() +{ + zombie_trigger_origin = ( 11248, 8504, -560 ); + zombie_trigger_radius = 125; + zombie_trigger_height = 64; + player_trigger_origin = ( 11368, 8624, -560 ); + player_trigger_radius = 65; + zombie_goto_point = ( 11352, 8560, -560 ); + level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); + zombie_trigger_origin = ( 11168, 8880, -568 ); + zombie_trigger_radius = 78; + zombie_trigger_height = 64; + player_trigger_origin = ( 11048, 8888, -568 ); + player_trigger_radius = 79; + zombie_goto_point = ( 11072, 8912, -568 ); + level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); +} + +equipment_safe_to_drop_ffotd( weapon ) +{ + for ( i = 0; i < level.equipment_dead_zone_pos.size; i++ ) + { + if ( distancesquared( level.equipment_dead_zone_pos[i], weapon.origin ) < level.equipment_dead_zone_rad2[i] ) + { + if ( !isdefined( level.equipment_dead_zone_type[i] ) || !isdefined( weapon.model ) || level.equipment_dead_zone_type[i] == weapon.model ) + return 0; + } + } + + return self maps\mp\zm_transit::equipment_safe_to_drop( weapon ); +} + +claymore_watch_swipes() +{ + self endon( "disconnect" ); + self notify( "claymore_watch_swipes" ); + self endon( "claymore_watch_swipes" ); + + while ( true ) + { + self waittill( "weapon_change", weapon ); + + if ( is_placeable_mine( weapon ) ) + { + self.mine_damage = 0; + self thread watch_melee_swipes( weapon ); + } + } +} + +watch_melee_swipes( weapname ) +{ + self endon( "weapon_change" ); + self endon( "death" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "melee_swipe", zombie ); + + self.mine_damage++; + + if ( self.mine_damage > 5 ) + { + self.mine_damage = 0; + ammo = self getweaponammoclip( weapname ); + + if ( ammo >= 1 ) + { + self setweaponammoclip( weapname, ammo - 1 ); + + if ( ammo == 1 ) + { + self setweaponammoclip( weapname, ammo - 1 ); + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons[0] ) ) + self switchtoweapon( primaryweapons[0] ); + } + } + else + self takeweapon( weapname ); + } + } +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_fx.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_fx.gsc new file mode 100644 index 0000000..13aed99 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_fx.gsc @@ -0,0 +1,125 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\zm_transit_fx; +#include maps\mp\createart\zm_transit_art; + +main() +{ + precache_createfx_fx(); + precache_scripted_fx(); + maps\mp\createfx\zm_transit_fx::main(); + maps\mp\createart\zm_transit_art::main(); +} + +precache_scripted_fx() +{ + level._effect["switch_sparks"] = loadfx( "env/electrical/fx_elec_wire_spark_burst" ); + level._effect["maxis_sparks"] = loadfx( "maps/zombie/fx_zmb_race_trail_grief" ); + level._effect["richtofen_sparks"] = loadfx( "maps/zombie/fx_zmb_race_trail_neutral" ); + level._effect["sq_common_lightning"] = loadfx( "maps/zombie/fx_zmb_tranzit_sq_lightning_orb" ); + level._effect["zapper_light_ready"] = loadfx( "maps/zombie/fx_zombie_zapper_light_green" ); + level._effect["zapper_light_notready"] = loadfx( "maps/zombie/fx_zombie_zapper_light_red" ); + level._effect["lght_marker"] = loadfx( "maps/zombie/fx_zmb_tranzit_marker" ); + level._effect["lght_marker_flare"] = loadfx( "maps/zombie/fx_zmb_tranzit_marker_fl" ); + level._effect["poltergeist"] = loadfx( "misc/fx_zombie_couch_effect" ); + level._effect["zomb_gib"] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" ); + level._effect["fx_headlight"] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_headlight" ); + level._effect["fx_headlight_lenflares"] = loadfx( "lens_flares/fx_lf_zmb_tranzit_bus_headlight" ); + level._effect["fx_brakelight"] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_brakelights" ); + level._effect["fx_emergencylight"] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_flashing_lights" ); + level._effect["fx_turn_signal_right"] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_turnsignal_right" ); + level._effect["fx_turn_signal_left"] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_turnsignal_left" ); + level._effect["fx_zbus_trans_fog"] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_fog_intersect" ); + level._effect["bus_lava_driving"] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_fire_driving" ); + level._effect["bus_hatch_bust"] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_hatch_bust" ); + level._effect["elec_md"] = loadfx( "electrical/fx_elec_player_md" ); + level._effect["elec_sm"] = loadfx( "electrical/fx_elec_player_sm" ); + level._effect["elec_torso"] = loadfx( "electrical/fx_elec_player_torso" ); + level._effect["blue_eyes"] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" ); + level._effect["lava_burning"] = loadfx( "env/fire/fx_fire_lava_player_torso" ); + level._effect["mc_trafficlight"] = loadfx( "maps/zombie/fx_zmb_morsecode_traffic_loop" ); + level._effect["mc_towerlight"] = loadfx( "maps/zombie/fx_zmb_morsecode_loop" ); +} + +precache_createfx_fx() +{ + level._effect["fx_insects_swarm_md_light"] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); + level._effect["fx_zmb_tranzit_flourescent_flicker"] = loadfx( "maps/zombie/fx_zmb_tranzit_flourescent_flicker" ); + level._effect["fx_zmb_tranzit_flourescent_glow"] = loadfx( "maps/zombie/fx_zmb_tranzit_flourescent_glow" ); + level._effect["fx_zmb_tranzit_flourescent_glow_lg"] = loadfx( "maps/zombie/fx_zmb_tranzit_flourescent_glow_lg" ); + level._effect["fx_zmb_tranzit_flourescent_dbl_glow"] = loadfx( "maps/zombie/fx_zmb_tranzit_flourescent_dbl_glow" ); + level._effect["fx_zmb_tranzit_depot_map_flicker"] = loadfx( "maps/zombie/fx_zmb_tranzit_depot_map_flicker" ); + level._effect["fx_zmb_tranzit_light_bulb_xsm"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_bulb_xsm" ); + level._effect["fx_zmb_tranzit_light_glow"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_glow" ); + level._effect["fx_zmb_tranzit_light_glow_xsm"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_glow_xsm" ); + level._effect["fx_zmb_tranzit_light_glow_fog"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_glow_fog" ); + level._effect["fx_zmb_tranzit_light_depot_cans"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_depot_cans" ); + level._effect["fx_zmb_tranzit_light_desklamp"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_desklamp" ); + level._effect["fx_zmb_tranzit_light_town_cans"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_town_cans" ); + level._effect["fx_zmb_tranzit_light_town_cans_sm"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_town_cans_sm" ); + level._effect["fx_zmb_tranzit_light_street_tinhat"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_street_tinhat" ); + level._effect["fx_zmb_tranzit_street_lamp"] = loadfx( "maps/zombie/fx_zmb_tranzit_street_lamp" ); + level._effect["fx_zmb_tranzit_truck_light"] = loadfx( "maps/zombie/fx_zmb_tranzit_truck_light" ); + level._effect["fx_zmb_tranzit_spark_int_runner"] = loadfx( "maps/zombie/fx_zmb_tranzit_spark_int_runner" ); + level._effect["fx_zmb_tranzit_spark_ext_runner"] = loadfx( "maps/zombie/fx_zmb_tranzit_spark_ext_runner" ); + level._effect["fx_zmb_tranzit_spark_blue_lg_loop"] = loadfx( "maps/zombie/fx_zmb_tranzit_spark_blue_lg_loop" ); + level._effect["fx_zmb_tranzit_spark_blue_sm_loop"] = loadfx( "maps/zombie/fx_zmb_tranzit_spark_blue_sm_loop" ); + level._effect["fx_zmb_tranzit_bar_glow"] = loadfx( "maps/zombie/fx_zmb_tranzit_bar_glow" ); + level._effect["fx_zmb_tranzit_transformer_on"] = loadfx( "maps/zombie/fx_zmb_tranzit_transformer_on" ); + level._effect["fx_zmb_fog_closet"] = loadfx( "fog/fx_zmb_fog_closet" ); + level._effect["fx_zmb_fog_low_300x300"] = loadfx( "fog/fx_zmb_fog_low_300x300" ); + level._effect["fx_zmb_fog_thick_600x600"] = loadfx( "fog/fx_zmb_fog_thick_600x600" ); + level._effect["fx_zmb_fog_thick_1200x600"] = loadfx( "fog/fx_zmb_fog_thick_1200x600" ); + level._effect["fx_zmb_fog_transition_600x600"] = loadfx( "fog/fx_zmb_fog_transition_600x600" ); + level._effect["fx_zmb_fog_transition_1200x600"] = loadfx( "fog/fx_zmb_fog_transition_1200x600" ); + level._effect["fx_zmb_fog_transition_right_border"] = loadfx( "fog/fx_zmb_fog_transition_right_border" ); + level._effect["fx_zmb_tranzit_smk_interior_md"] = loadfx( "maps/zombie/fx_zmb_tranzit_smk_interior_md" ); + level._effect["fx_zmb_tranzit_smk_interior_heavy"] = loadfx( "maps/zombie/fx_zmb_tranzit_smk_interior_heavy" ); + level._effect["fx_zmb_ash_ember_1000x1000"] = loadfx( "maps/zombie/fx_zmb_ash_ember_1000x1000" ); + level._effect["fx_zmb_ash_ember_2000x1000"] = loadfx( "maps/zombie/fx_zmb_ash_ember_2000x1000" ); + level._effect["fx_zmb_ash_rising_md"] = loadfx( "maps/zombie/fx_zmb_ash_rising_md" ); + level._effect["fx_zmb_ash_windy_heavy_sm"] = loadfx( "maps/zombie/fx_zmb_ash_windy_heavy_sm" ); + level._effect["fx_zmb_ash_windy_heavy_md"] = loadfx( "maps/zombie/fx_zmb_ash_windy_heavy_md" ); + level._effect["fx_zmb_lava_detail"] = loadfx( "maps/zombie/fx_zmb_lava_detail" ); + level._effect["fx_zmb_lava_edge_100"] = loadfx( "maps/zombie/fx_zmb_lava_edge_100" ); + level._effect["fx_zmb_lava_50x50_sm"] = loadfx( "maps/zombie/fx_zmb_lava_50x50_sm" ); + level._effect["fx_zmb_lava_100x100"] = loadfx( "maps/zombie/fx_zmb_lava_100x100" ); + level._effect["fx_zmb_lava_river"] = loadfx( "maps/zombie/fx_zmb_lava_river" ); + level._effect["fx_zmb_lava_creek"] = loadfx( "maps/zombie/fx_zmb_lava_creek" ); + level._effect["fx_zmb_lava_crevice_glow_50"] = loadfx( "maps/zombie/fx_zmb_lava_crevice_glow_50" ); + level._effect["fx_zmb_lava_crevice_glow_100"] = loadfx( "maps/zombie/fx_zmb_lava_crevice_glow_100" ); + level._effect["fx_zmb_lava_crevice_smoke_100"] = loadfx( "maps/zombie/fx_zmb_lava_crevice_smoke_100" ); + level._effect["fx_zmb_lava_smoke_tall"] = loadfx( "maps/zombie/fx_zmb_lava_smoke_tall" ); + level._effect["fx_zmb_lava_smoke_pit"] = loadfx( "maps/zombie/fx_zmb_lava_smoke_pit" ); + level._effect["fx_zmb_tranzit_bowling_sign_fog"] = loadfx( "maps/zombie/fx_zmb_tranzit_bowling_sign_fog" ); + level._effect["fx_zmb_tranzit_lava_distort"] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_distort" ); + level._effect["fx_zmb_tranzit_lava_distort_sm"] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_distort_sm" ); + level._effect["fx_zmb_tranzit_lava_distort_detail"] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_distort_detail" ); + level._effect["fx_zmb_tranzit_fire_med"] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_med" ); + level._effect["fx_zmb_tranzit_fire_lrg"] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_lrg" ); + level._effect["fx_zmb_tranzit_smk_column_lrg"] = loadfx( "maps/zombie/fx_zmb_tranzit_smk_column_lrg" ); + level._effect["fx_zmb_papers_windy_slow"] = loadfx( "maps/zombie/fx_zmb_papers_windy_slow" ); + level._effect["fx_zmb_tranzit_god_ray_short_warm"] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_short_warm" ); + level._effect["fx_zmb_tranzit_god_ray_vault"] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_vault" ); + level._effect["fx_zmb_tranzit_key_glint"] = loadfx( "maps/zombie/fx_zmb_tranzit_key_glint" ); + level._effect["fx_zmb_tranzit_god_ray_interior_med"] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_interior_med" ); + level._effect["fx_zmb_tranzit_god_ray_interior_long"] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_interior_long" ); + level._effect["fx_zmb_tranzit_god_ray_depot_cool"] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_depot_cool" ); + level._effect["fx_zmb_tranzit_god_ray_depot_warm"] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_depot_warm" ); + level._effect["fx_zmb_tranzit_god_ray_tunnel_warm"] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_tunnel_warm" ); + level._effect["fx_zmb_tranzit_god_ray_pwr_station"] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_pwr_station" ); + level._effect["fx_zmb_tranzit_light_safety"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_safety" ); + level._effect["fx_zmb_tranzit_light_safety_off"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_safety_off" ); + level._effect["fx_zmb_tranzit_light_safety_max"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_safety_max" ); + level._effect["fx_zmb_tranzit_light_safety_ric"] = loadfx( "maps/zombie/fx_zmb_tranzit_light_safety_ric" ); + level._effect["fx_zmb_tranzit_bridge_dest"] = loadfx( "maps/zombie/fx_zmb_tranzit_bridge_dest" ); + level._effect["fx_zmb_tranzit_power_pulse"] = loadfx( "maps/zombie/fx_zmb_tranzit_power_pulse" ); + level._effect["fx_zmb_tranzit_power_on"] = loadfx( "maps/zombie/fx_zmb_tranzit_power_on" ); + level._effect["fx_zmb_tranzit_power_rising"] = loadfx( "maps/zombie/fx_zmb_tranzit_power_rising" ); + level._effect["fx_zmb_avog_storm"] = loadfx( "maps/zombie/fx_zmb_avog_storm" ); + level._effect["fx_zmb_avog_storm_low"] = loadfx( "maps/zombie/fx_zmb_avog_storm_low" ); + level._effect["glass_impact"] = loadfx( "maps/zombie/fx_zmb_tranzit_window_dest_lg" ); + level._effect["fx_zmb_tranzit_spark_blue_lg_os"] = loadfx( "maps/zombie/fx_zmb_tranzit_spark_blue_lg_os" ); + level._effect["spawn_cloud"] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_gamemodes.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_gamemodes.gsc new file mode 100644 index 0000000..9401adf --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_gamemodes.gsc @@ -0,0 +1,30 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zm_transit_utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zm_transit; +#include maps\mp\zm_transit_classic; +#include maps\mp\zm_transit_standard_station; +#include maps\mp\zm_transit_standard_farm; +#include maps\mp\zm_transit_standard_town; +#include maps\mp\zm_transit_grief_station; +#include maps\mp\zm_transit_grief_farm; +#include maps\mp\zm_transit_grief_town; + +init() +{ + add_map_gamemode( "zclassic", maps\mp\zm_transit::zclassic_preinit, undefined, undefined ); + add_map_gamemode( "zgrief", maps\mp\zm_transit::zgrief_preinit, undefined, undefined ); + add_map_gamemode( "zstandard", maps\mp\zm_transit::zstandard_preinit, undefined, undefined ); + add_map_location_gamemode( "zclassic", "transit", maps\mp\zm_transit_classic::precache, maps\mp\zm_transit_classic::main ); + add_map_location_gamemode( "zstandard", "transit", maps\mp\zm_transit_standard_station::precache, maps\mp\zm_transit_standard_station::main ); + add_map_location_gamemode( "zstandard", "farm", maps\mp\zm_transit_standard_farm::precache, maps\mp\zm_transit_standard_farm::main ); + add_map_location_gamemode( "zstandard", "town", maps\mp\zm_transit_standard_town::precache, maps\mp\zm_transit_standard_town::main ); + add_map_location_gamemode( "zgrief", "transit", maps\mp\zm_transit_grief_station::precache, maps\mp\zm_transit_grief_station::main ); + add_map_location_gamemode( "zgrief", "farm", maps\mp\zm_transit_grief_farm::precache, maps\mp\zm_transit_grief_farm::main ); + add_map_location_gamemode( "zgrief", "town", maps\mp\zm_transit_grief_town::precache, maps\mp\zm_transit_grief_town::main ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_grief_farm.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_grief_farm.gsc new file mode 100644 index 0000000..e9b1d63 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_grief_farm.gsc @@ -0,0 +1,91 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\gametypes_zm\zmeat; + +precache() +{ + +} + +farm_treasure_chest_init() +{ + chest1 = getstruct( "farm_chest", "script_noteworthy" ); + level.chests = []; + level.chests[level.chests.size] = chest1; + maps\mp\zombies\_zm_magicbox::treasure_chest_init( "farm_chest" ); +} + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "farm" ); + init_standard_farm(); + farm_treasure_chest_init(); + level.enemy_location_override_func = ::enemy_location_override; + flag_wait( "initial_blackscreen_passed" ); + level thread maps\mp\zombies\_zm_zonemgr::enable_zone( "zone_far_ext" ); + level thread maps\mp\zombies\_zm_zonemgr::enable_zone( "zone_brn" ); + maps\mp\zombies\_zm_game_module::turn_power_on_and_open_doors(); + flag_wait( "start_zombie_round_logic" ); + wait 1; + level notify( "revive_on" ); + wait_network_frame(); + level notify( "doubletap_on" ); + wait_network_frame(); + level notify( "juggernog_on" ); + wait_network_frame(); + level notify( "sleight_on" ); + wait_network_frame(); +/# + level thread maps\mp\gametypes_zm\zmeat::spawn_level_meat_manager(); +#/ +} + +init_standard_farm() +{ + maps\mp\zombies\_zm_game_module::set_current_game_module( level.game_module_standard_index ); + ents = getentarray(); + + foreach ( ent in ents ) + { + if ( isdefined( ent.script_flag ) && ent.script_flag == "OnFarm_enter" ) + { + ent delete(); + continue; + } + + if ( isdefined( ent.script_parameters ) ) + { + tokens = strtok( ent.script_parameters, " " ); + remove = 0; + + foreach ( token in tokens ) + { + if ( token == "standard_remove" ) + remove = 1; + } + + if ( remove ) + ent delete(); + } + } +} + +enemy_location_override( zombie, enemy ) +{ + location = enemy.origin; + + if ( is_true( self.reroute ) ) + { + if ( isdefined( self.reroute_origin ) ) + location = self.reroute_origin; + } + + return location; +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_grief_station.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_grief_station.gsc new file mode 100644 index 0000000..dfdc9fa --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_grief_station.gsc @@ -0,0 +1,57 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\gametypes_zm\zmeat; + +precache() +{ + precachemodel( "zm_collision_transit_busdepot_survival" ); +} + +station_treasure_chest_init() +{ + chest1 = getstruct( "depot_chest", "script_noteworthy" ); + level.chests = []; + level.chests[level.chests.size] = chest1; + maps\mp\zombies\_zm_magicbox::treasure_chest_init( "depot_chest" ); +} + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "station" ); + station_treasure_chest_init(); + level.enemy_location_override_func = ::enemy_location_override; + collision = spawn( "script_model", ( -6896, 4744, 0 ), 1 ); + collision setmodel( "zm_collision_transit_busdepot_survival" ); + collision disconnectpaths(); + flag_wait( "initial_blackscreen_passed" ); + nodes = getnodearray( "classic_only_traversal", "targetname" ); + + foreach ( node in nodes ) + unlink_nodes( node, getnode( node.target, "targetname" ) ); + + level thread maps\mp\zombies\_zm_perks::perk_machine_removal( "specialty_quickrevive", "p_glo_tools_chest_tall" ); + maps\mp\zombies\_zm_game_module::turn_power_on_and_open_doors(); +/# + level thread maps\mp\gametypes_zm\zmeat::spawn_level_meat_manager(); +#/ +} + +enemy_location_override( zombie, enemy ) +{ + location = enemy.origin; + + if ( is_true( self.reroute ) ) + { + if ( isdefined( self.reroute_origin ) ) + location = self.reroute_origin; + } + + return location; +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_grief_town.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_grief_town.gsc new file mode 100644 index 0000000..3b1acc3 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_grief_town.gsc @@ -0,0 +1,68 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_race_utility; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\gametypes_zm\zmeat; + +precache() +{ + precachemodel( "zm_collision_transit_town_survival" ); +} + +town_treasure_chest_init() +{ + chest1 = getstruct( "town_chest", "script_noteworthy" ); + chest2 = getstruct( "town_chest_2", "script_noteworthy" ); + setdvar( "disable_rope", 1 ); + setdvar( "disableLookAtEntityLogic", 1 ); + level.chests = []; + level.chests[level.chests.size] = chest1; + level.chests[level.chests.size] = chest2; + maps\mp\zombies\_zm_magicbox::treasure_chest_init( "town_chest" ); +} + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "town" ); + town_treasure_chest_init(); + level.enemy_location_override_func = ::enemy_location_override; + collision = spawn( "script_model", ( 1363, 471, 0 ), 1 ); + collision setmodel( "zm_collision_transit_town_survival" ); + collision disconnectpaths(); + flag_wait( "initial_blackscreen_passed" ); + maps\mp\zombies\_zm_game_module::turn_power_on_and_open_doors(); + flag_wait( "start_zombie_round_logic" ); + wait 1; + level notify( "revive_on" ); + wait_network_frame(); + level notify( "doubletap_on" ); + wait_network_frame(); + level notify( "marathon_on" ); + wait_network_frame(); + level notify( "juggernog_on" ); + wait_network_frame(); + level notify( "sleight_on" ); + wait_network_frame(); + level notify( "Pack_A_Punch_on" ); +/# + level thread maps\mp\gametypes_zm\zmeat::spawn_level_meat_manager(); +#/ +} + +enemy_location_override( zombie, enemy ) +{ + location = enemy.origin; + + if ( is_true( self.reroute ) ) + { + if ( isdefined( self.reroute_origin ) ) + location = self.reroute_origin; + } + + return location; +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_lava.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_lava.gsc new file mode 100644 index 0000000..62efcd0 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_lava.gsc @@ -0,0 +1,361 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\_visionset_mgr; +#include maps\mp\animscripts\zm_death; + +object_touching_lava() +{ + if ( !isdefined( level.lava ) ) + level.lava = getentarray( "lava_damage", "targetname" ); + + if ( !isdefined( level.lava ) || level.lava.size < 1 ) + return false; + + if ( isdefined( self.lasttouching ) && self istouching( self.lasttouching ) ) + return true; + + for ( i = 0; i < level.lava.size; i++ ) + { + if ( distancesquared( self.origin, level.lava[i].origin ) < 2250000 ) + { + if ( isdefined( level.lava[i].target ) ) + { + if ( self istouching( level.lava[i].volume ) ) + { + if ( isdefined( level.lava[i].script_float ) && level.lava[i].script_float <= 0.1 ) + return false; + + self.lasttouching = level.lava[i].volume; + return true; + } + } + else if ( self istouching( level.lava[i] ) ) + { + self.lasttouching = level.lava[i]; + return true; + } + } + } + + self.lasttouching = undefined; + return false; +} + +lava_damage_init() +{ + lava = getentarray( "lava_damage", "targetname" ); + + if ( !isdefined( lava ) ) + return; + + array_thread( lava, ::lava_damage_think ); +} + +lava_damage_think() +{ + self._trap_type = ""; + + if ( isdefined( self.script_noteworthy ) ) + self._trap_type = self.script_noteworthy; + + if ( isdefined( self.target ) ) + { + self.volume = getent( self.target, "targetname" ); + assert( isdefined( self.volume ), "No volume found for lava target " + self.target ); + } + + while ( true ) + { + self waittill( "trigger", ent ); + + if ( isdefined( ent.ignore_lava_damage ) && ent.ignore_lava_damage ) + continue; + + if ( isdefined( ent.is_burning ) ) + continue; + + if ( isdefined( self.target ) && !ent istouching( self.volume ) ) + continue; + + if ( isplayer( ent ) ) + { + switch ( self._trap_type ) + { + case "fire": + default: + if ( !isdefined( self.script_float ) || self.script_float >= 0.1 ) + ent thread player_lava_damage( self ); + + break; + } + } + else if ( !isdefined( ent.marked_for_death ) ) + { + switch ( self._trap_type ) + { + case "fire": + default: + if ( !isdefined( self.script_float ) || self.script_float >= 0.1 ) + ent thread zombie_lava_damage( self ); + + break; + } + } + } +} + +player_lava_damage( trig ) +{ + self endon( "zombified" ); + self endon( "death" ); + self endon( "disconnect" ); + max_dmg = 15; + min_dmg = 5; + burn_time = 1; + + if ( isdefined( self.is_zombie ) && self.is_zombie ) + return; + + self thread player_stop_burning(); + + if ( isdefined( trig.script_float ) ) + { + max_dmg *= trig.script_float; + min_dmg *= trig.script_float; + burn_time *= trig.script_float; + + if ( burn_time >= 1.5 ) + burn_time = 1.5; + } + + if ( !isdefined( self.is_burning ) && is_player_valid( self ) ) + { + self.is_burning = 1; + maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, burn_time, level.zm_transit_burn_max_duration ); + self notify( "burned" ); + + if ( isdefined( trig.script_float ) && trig.script_float >= 0.1 ) + self thread player_burning_fx(); + + if ( !self hasperk( "specialty_armorvest" ) || self.health - 100 < 1 ) + { + radiusdamage( self.origin, 10, max_dmg, min_dmg ); + wait 0.5; + self.is_burning = undefined; + } + else + { + if ( self hasperk( "specialty_armorvest" ) ) + self dodamage( 15, self.origin ); + else + self dodamage( 1, self.origin ); + + wait 0.5; + self.is_burning = undefined; + } + } +} + +player_stop_burning() +{ + self notify( "player_stop_burning" ); + self endon( "player_stop_burning" ); + self endon( "death_or_disconnect" ); + + self waittill( "zombified" ); + + self notify( "stop_flame_damage" ); + maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_transit_burn", self ); +} + +zombie_burning_fx() +{ + self endon( "death" ); + + if ( isdefined( self.is_on_fire ) && self.is_on_fire ) + return; + + self.is_on_fire = 1; + self thread maps\mp\animscripts\zm_death::on_fire_timeout(); + + if ( isdefined( level._effect ) && isdefined( level._effect["lava_burning"] ) ) + { + if ( !self.isdog ) + { + playfxontag( level._effect["lava_burning"], self, "J_SpineLower" ); + self thread zombie_burning_audio(); + } + } + + if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_sm"] ) ) + { + wait 1; + + if ( randomint( 2 ) > 1 ) + { + tagarray = []; + tagarray[0] = "J_Elbow_LE"; + tagarray[1] = "J_Elbow_RI"; + tagarray[2] = "J_Knee_RI"; + tagarray[3] = "J_Knee_LE"; + tagarray = randomize_array( tagarray ); + playfxontag( level._effect["character_fire_death_sm"], self, tagarray[0] ); + } + else + { + tagarray[0] = "J_Wrist_RI"; + tagarray[1] = "J_Wrist_LE"; + + if ( !isdefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" ) + { + tagarray[2] = "J_Ankle_RI"; + tagarray[3] = "J_Ankle_LE"; + } + + tagarray = randomize_array( tagarray ); + playfxontag( level._effect["character_fire_death_sm"], self, tagarray[0] ); + } + } +} + +zombie_burning_audio() +{ + self playloopsound( "zmb_fire_loop" ); + self waittill_either( "stop_flame_damage", "death" ); + + if ( isdefined( self ) && isalive( self ) ) + self stoploopsound( 0.25 ); +} + +player_burning_fx() +{ + self endon( "death" ); + + if ( isdefined( self.is_on_fire ) && self.is_on_fire ) + return; + + if ( !( isdefined( self.no_burning_sfx ) && self.no_burning_sfx ) ) + self thread player_burning_audio(); + + self.is_on_fire = 1; + self thread maps\mp\animscripts\zm_death::on_fire_timeout(); + + if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_sm"] ) ) + playfxontag( level._effect["character_fire_death_sm"], self, "J_SpineLower" ); +} + +player_burning_audio() +{ + fire_ent = spawn( "script_model", self.origin ); + wait_network_frame(); + fire_ent linkto( self ); + fire_ent playloopsound( "evt_plr_fire_loop" ); + self waittill_any( "stop_flame_damage", "stop_flame_sounds", "death", "discoonect" ); + fire_ent delete(); +} + +zombie_lava_damage( trap ) +{ + self endon( "death" ); + zombie_dmg = 1; + + if ( isdefined( self.script_float ) ) + zombie_dmg *= self.script_float; + + switch ( trap._trap_type ) + { + case "fire": + default: + if ( isdefined( self.animname ) && ( !isdefined( self.is_on_fire ) || !self.is_on_fire ) ) + { + if ( level.burning_zombies.size < 6 && zombie_dmg >= 1 ) + { + level.burning_zombies[level.burning_zombies.size] = self; + self playsound( "ignite" ); + self thread zombie_burning_fx(); + self thread zombie_burning_watch(); + self thread zombie_burning_dmg(); + self thread zombie_exploding_death( zombie_dmg, trap ); + wait( randomfloat( 1.25 ) ); + } + } + + if ( self.health > level.zombie_health / 2 && self.health > zombie_dmg ) + self dodamage( zombie_dmg, self.origin, trap ); + + break; + } +} + +zombie_burning_watch() +{ + self waittill_any( "stop_flame_damage", "death" ); + arrayremovevalue( level.burning_zombies, self ); +} + +zombie_exploding_death( zombie_dmg, trap ) +{ + self endon( "stop_flame_damage" ); + + if ( isdefined( self.isdog ) && self.isdog && isdefined( self.a.nodeath ) ) + return; + + while ( isdefined( self ) && self.health >= zombie_dmg && ( isdefined( self.is_on_fire ) && self.is_on_fire ) ) + wait 0.5; + + if ( !isdefined( self ) || !( isdefined( self.is_on_fire ) && self.is_on_fire ) || isdefined( self.damageweapon ) && ( self.damageweapon == "tazer_knuckles_zm" || self.damageweapon == "jetgun_zm" ) || isdefined( self.knuckles_extinguish_flames ) && self.knuckles_extinguish_flames ) + return; + + tag = "J_SpineLower"; + + if ( isdefined( self.animname ) && self.animname == "zombie_dog" ) + tag = "tag_origin"; + + if ( is_mature() ) + { + if ( isdefined( level._effect["zomb_gib"] ) ) + playfx( level._effect["zomb_gib"], self gettagorigin( tag ) ); + } + else if ( isdefined( level._effect["spawn_cloud"] ) ) + playfx( level._effect["spawn_cloud"], self gettagorigin( tag ) ); + + self radiusdamage( self.origin, 128, 30, 15, undefined, "MOD_EXPLOSIVE" ); + self ghost(); + + if ( isdefined( self.isdog ) && self.isdog ) + self hide(); + else + self delay_thread( 1, ::self_delete ); +} + +zombie_burning_dmg() +{ + self endon( "death" ); + damageradius = 25; + damage = 2; + + while ( isdefined( self.is_on_fire ) && self.is_on_fire ) + { + eyeorigin = self geteye(); + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( is_player_valid( players[i] ) ) + { + playereye = players[i] geteye(); + + if ( distancesquared( eyeorigin, playereye ) < damageradius * damageradius ) + { + players[i] dodamage( damage, self.origin, self ); + players[i] notify( "burned" ); + } + } + } + + wait 1.0; + } +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_openings.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_openings.gsc new file mode 100644 index 0000000..efcb717 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_openings.gsc @@ -0,0 +1,2314 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_blockers; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zm_transit_utility; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zm_transit_bus; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\animscripts\zm_run; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zm_transit_cling; + +main() +{ + self _businittags(); + self _setupnumattachtable(); + self.openings = []; + + for ( x = 1; x <= 10; x++ ) + { + script_noteworthy = undefined; + + switch ( x ) + { + case 10: + script_noteworthy = "front"; + break; + case 12: + case 11: + script_noteworthy = "door"; + break; + } + + self busaddopening( "tag_entry_point" + x, script_noteworthy ); + } + + self bussetupladder(); + self bussetuproofopening(); + self businitmantle(); + self businitrightandleft(); +} + +busaddopening( tag_name, script_noteworthy ) +{ + index = self.openings.size; + self.openings[index] = spawnstruct(); + opening = self.openings[index]; + opening.name = script_noteworthy; + opening.enabled = 1; + opening.zombie = undefined; + opening.boards = []; + opening.boardsnum = 0; + opening.blockertrigger = undefined; + opening.zombietrigger = undefined; + opening.rebuildtrigger = undefined; + opening.tagname = tag_name; + opening.bindtag = _busfindclosesttag( self gettagorigin( tag_name ) ); + assert( isdefined( opening.bindtag ) ); + opening.jumptag = _busgetjumptagfrombindtag( opening.bindtag ); + opening.jumpent = level.the_bus; + opening.roofjoint = _busgetroofjointfrombindtag( opening.bindtag ); + opening.origin = level.the_bus gettagorigin( opening.bindtag ); + opening.angles = self gettagangles( opening.bindtag ); + targets = getentarray( tag_name, "targetname" ); + + if ( !isdefined( targets ) ) + { + assert( 0 ); + return; + } + + if ( !is_classic() ) + { + for ( i = 0; i < targets.size; i++ ) + { + if ( targets[i] iszbarrier() ) + targets[i] delete(); + } + + return; + } + + for ( i = 0; i < targets.size; i++ ) + { + target = targets[i]; + + if ( target iszbarrier() ) + { + hasbarriers = 1; + + if ( isdefined( script_noteworthy ) && script_noteworthy == "front" ) + hasbarriers = 0; + + opening.zbarrier = target; + opening.zbarrier setmovingplatformenabled( 1 ); + + if ( hasbarriers ) + { + opening.zbarrier.chunk_health = []; + opening.zbarrier setzbarriercolmodel( "p6_anim_zm_barricade_board_bus_collision" ); + maps\mp\zombies\_zm_powerups::register_carpenter_node( opening, ::post_carpenter_callback ); + + for ( j = 0; j < opening.zbarrier getnumzbarrierpieces(); j++ ) + opening.zbarrier.chunk_health[j] = 0; + } + + target.origin = level.the_bus gettagorigin( opening.bindtag ); + } + else if ( target.script_noteworthy == "blocker" ) + { + target delete(); + continue; + } + else if ( target.script_noteworthy == "rebuild" ) + { + opening.rebuildtrigger = target; + opening.rebuildtrigger enablelinkto(); + opening.rebuildtrigger linkto( self ); + opening.rebuildtrigger setcursorhint( "HINT_NOICON" ); + opening.rebuildtrigger set_hint_string( self, "default_reward_barrier_piece" ); + opening.rebuildtrigger triggerignoreteam(); + opening.rebuildtrigger setinvisibletoall(); + opening.rebuildtrigger setmovingplatformenabled( 1 ); + self thread busopeningrebuildthink( opening ); + continue; + } + else if ( target.script_noteworthy == "zombie" ) + { + opening.zombietrigger = target; + opening.zombietrigger enablelinkto(); + opening.zombietrigger linkto( self ); + opening.zombietrigger setmovingplatformenabled( 1 ); + opening.zombietrigger setteamfortrigger( level.zombie_team ); + self thread busopeningzombiethink( opening ); + } + + target linkto( self, "", self worldtolocalcoords( target.origin ), target.angles - self.angles ); + } + + if ( isdefined( opening.zbarrier ) ) + opening blocker_attack_spots(); + + opening notify( "opening_init_complete" ); + assert( opening.boardsnum == 0 || opening.boardsnum == opening.boards.size ); +} + +post_carpenter_callback() +{ + if ( isdefined( self.rebuildtrigger ) ) + self.rebuildtrigger setinvisibletoall(); +} + +businitmantle() +{ + mantlebrush = getentarray( "window_mantle", "targetname" ); + + if ( isdefined( mantlebrush ) && mantlebrush.size > 0 ) + { + for ( i = 0; i < mantlebrush.size; i++ ) + mantlebrush[i] delete(); + } +} + +busattachjumpent( ent, opening ) +{ + jump_origin = self gettagorigin( opening.jumptag ); + jump_angles = self gettagangles( opening.jumptag ); + ent.origin = jump_origin; + ent.angles = jump_angles; + ent linkto( self, "", self worldtolocalcoords( ent.origin ), ent.angles - self.angles ); +} + +busopeningbyname( name ) +{ + for ( i = 0; i < self.openings.size; i++ ) + { + opening = self.openings[i]; + + if ( isdefined( opening.name ) && opening.name == name ) + return opening; + } + + return undefined; +} + +busopeningsetenabled( name, enabled ) +{ + for ( i = 0; i < self.openings.size; i++ ) + { + opening = self.openings[i]; + + if ( isdefined( opening.name ) && opening.name == name ) + opening.enabled = enabled; + } +} + +_businittags() +{ + self.openingtags = []; + self.openingtags[self.openingtags.size] = "window_right_front_jnt"; + self.openingtags[self.openingtags.size] = "window_left_front_jnt"; + self.openingtags[self.openingtags.size] = "door_front_jnt"; + self.openingtags[self.openingtags.size] = "door_rear_jnt"; + self.openingtags[self.openingtags.size] = "window_right_1_jnt"; + self.openingtags[self.openingtags.size] = "window_right_2_jnt"; + self.openingtags[self.openingtags.size] = "window_right_3_jnt"; + self.openingtags[self.openingtags.size] = "window_right_4_jnt"; + self.openingtags[self.openingtags.size] = "window_right_rear_jnt"; + self.openingtags[self.openingtags.size] = "window_left_rear_jnt"; + self.openingtags[self.openingtags.size] = "window_left_1_jnt"; + self.openingtags[self.openingtags.size] = "window_left_2_jnt"; + self.openingtags[self.openingtags.size] = "window_left_3_jnt"; + self.openingtags[self.openingtags.size] = "window_left_4_jnt"; + self.openingtags[self.openingtags.size] = "window_left_5_jnt"; +/# + for ( i = 0; i < self.openingtags.size; i++ ) + adddebugcommand( "devgui_cmd \"Zombies:1/Bus:14/Window Openings:3/Select Tag:1/" + self.openingtags[i] + ":" + self.openingtags.size + "\" \"zombie_devgui attach_tag " + self.openingtags[i] + "\"\n" ); +#/ +} + +_busfindclosesttag( checkpos ) +{ + closest = undefined; + closestdist = -1.0; + assert( isdefined( self.openingtags ) ); + + for ( i = 0; i < self.openingtags.size; i++ ) + { + tag = self.openingtags[i]; + pos = self gettagorigin( tag ); + dist2 = distancesquared( checkpos, pos ); + + if ( !isdefined( closest ) || dist2 < closestdist ) + { + closest = tag; + closestdist = dist2; + } + } + + return closest; +} + +_busgetjumptagfrombindtag( tag ) +{ + jump_tag = undefined; + + switch ( tag ) + { + case "window_right_1_jnt": + jump_tag = "window_right_1_jmp_jnt"; + break; + case "window_right_2_jnt": + jump_tag = "window_right_2_jmp_jnt"; + break; + case "window_right_3_jnt": + jump_tag = "window_right_3_jmp_jnt"; + break; + case "window_right_4_jnt": + jump_tag = "window_right_4_jmp_jnt"; + break; + case "window_left_1_jnt": + jump_tag = "window_left_1_jmp_jnt"; + break; + case "window_left_2_jnt": + jump_tag = "window_left_2_jmp_jnt"; + break; + case "window_left_3_jnt": + jump_tag = "window_left_3_jmp_jnt"; + break; + case "window_left_4_jnt": + jump_tag = "window_left_4_jmp_jnt"; + break; + case "window_left_5_jnt": + jump_tag = "window_left_5_jmp_jnt"; + break; + case "window_right_rear_jnt": + jump_tag = "window_right_rear_jmp_jnt"; + break; + case "window_left_rear_jnt": + jump_tag = "window_left_rear_jmp_jnt"; + break; + case "window_right_front_jnt": + jump_tag = "window_right_front_jmp_jnt"; + break; + case "window_left_front_jnt": + jump_tag = "window_left_front_jmp_jnt"; + break; + case "door_rear_jnt": + jump_tag = "door_rear_jmp_jnt"; + break; + case "door_front_jnt": + jump_tag = "door_front_jmp_jnt"; + break; + default: + break; + } + + return jump_tag; +} + +_busgetroofjointfrombindtag( tag ) +{ + roofjoint = undefined; + + switch ( tag ) + { + case "window_right_front_jnt": + case "window_right_1_jnt": + case "window_left_front_jnt": + case "window_left_1_jnt": + roofjoint = "window_roof_1_jnt"; + break; + case "window_right_rear_jnt": + case "window_right_4_jnt": + case "window_right_3_jnt": + case "window_right_2_jnt": + case "window_left_rear_jnt": + case "window_left_5_jnt": + case "window_left_4_jnt": + case "window_left_3_jnt": + case "window_left_2_jnt": + roofjoint = "window_roof_2_jnt"; + default: + break; + } + + return roofjoint; +} + +_setupnumattachtable() +{ + level.numattachtable = []; + level.numattachtable[0] = -1; + level.numattachtable[1] = 6; + level.numattachtable[2] = 8; + level.numattachtable[3] = 10; + level.numattachtable[4] = -1; +} + +busgetopeningfortag( tagname ) +{ + for ( i = 0; i < self.openings.size; i++ ) + { + if ( self.openings[i].bindtag == tagname ) + return self.openings[i]; + } + + return undefined; +} + +zombieanimnotetrackthink( notifystring, chunk, node ) +{ + self endon( "death" ); + + while ( true ) + { + self waittill( notifystring, notetrack ); + + if ( notetrack == "end" ) + return; + else if ( notetrack == "board" || notetrack == "destroy_piece" ) + { + node.zbarrier setzbarrierpiecestate( chunk, "opening" ); + + if ( isdefined( node.rebuildtrigger ) ) + node.rebuildtrigger setvisibletoall(); + } + else if ( notetrack == "fire" ) + { + attackplayers = self zombiegetplayerstoattack(); + + if ( attackplayers.size ) + { + for ( i = 0; i < attackplayers.size; i++ ) + attackplayers[i] dodamage( self.meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); + } + } + } +} + +busopeningblockerthink( opening ) +{ + self endon( "intermission" ); + + while ( true ) + { + opening.blockertrigger waittill( "trigger", player ); + + if ( isdefined( opening.zombie ) ) + continue; + + break; + } + + self notify( "OnBlockerPlaced", opening ); +} + +buswatchtriggervisibility( opening ) +{ + self endon( "intermission" ); + + opening waittill( "opening_init_complete" ); + + if ( !isdefined( opening.zbarrier ) || opening.zbarrier getnumzbarrierpieces() < 1 ) + return; + + if ( !isdefined( level.buswatchtriggervisibility_spread ) ) + level.buswatchtriggervisibility_spread = 0; + else + { + level.buswatchtriggervisibility_spread++; + wait( 0.05 * level.buswatchtriggervisibility_spread ); + } + + while ( true ) + { + if ( no_valid_repairable_boards( opening ) ) + opening.rebuildtrigger setinvisibletoall(); + else + opening.rebuildtrigger setvisibletoall(); + + wait 1; + } +} + +busopeningrebuildthink( opening ) +{ + self endon( "intermission" ); + self thread buswatchtriggervisibility( opening ); + cost = 10; + + if ( isdefined( opening.rebuildtrigger.zombie_cost ) ) + cost = opening.rebuildtrigger.zombie_cost; + + while ( true ) + { + opening.rebuildtrigger waittill( "trigger", player ); + + players = get_players(); + has_perk = player has_blocker_affecting_perk(); + + if ( player_fails_blocker_repair_trigger_preamble( player, players, opening.rebuildtrigger, 0 ) ) + continue; + + if ( all_chunks_intact( opening ) ) + continue; + + if ( no_valid_repairable_boards( opening ) ) + continue; + + chunk = get_random_destroyed_chunk( opening ); + self thread replace_chunk( opening, chunk, has_perk, isdefined( player.pers_upgrades_awarded["board"] ) && player.pers_upgrades_awarded["board"] ); + opening do_post_chunk_repair_delay( has_perk ); + + if ( !is_player_valid( player ) ) + { + if ( no_valid_repairable_boards( opening ) ) + opening.rebuildtrigger setinvisibletoall(); + + continue; + } + + player handle_post_board_repair_rewards( cost ); + + if ( no_valid_repairable_boards( opening ) ) + opening.rebuildtrigger setinvisibletoall(); + } +} + +_determinejumpfromorigin( opening ) +{ + return level.the_bus gettagorigin( opening.jumptag ); +} + +_getsideofbusopeningison( opening_tag ) +{ + side = undefined; + + switch ( opening_tag ) + { + case "window_right_4_jnt": + case "window_right_3_jnt": + case "window_right_2_jnt": + case "window_right_1_jnt": + case "door_rear_jnt": + case "door_front_jnt": + side = "right"; + break; + case "window_left_5_jnt": + case "window_left_4_jnt": + case "window_left_3_jnt": + case "window_left_2_jnt": + case "window_left_1_jnt": + side = "left"; + break; + case "window_right_front_jnt": + case "window_left_front_jnt": + side = "front"; + break; + case "window_right_rear_jnt": + case "window_left_rear_jnt": + side = "back"; + break; + } + + return side; +} + +busopeningzombiethink( opening ) +{ + self endon( "intermission" ); + + if ( _isopeningdoor( opening.bindtag ) ) + { + opening.enabled = 0; + return; + } + + while ( true ) + { + opening.zombietrigger waittill( "trigger", zombie ); + + if ( zombie.isdog ) + continue; + + if ( isdefined( zombie.isscreecher ) && zombie.isscreecher ) + continue; + + if ( isdefined( zombie.is_avogadro ) && zombie.is_avogadro ) + continue; + + if ( !isalive( zombie ) ) + continue; + + if ( !opening.enabled ) + continue; + + if ( _isopeningdoor( opening.bindtag ) && self.doorsclosed ) + continue; + + enemy_on_roof = isdefined( zombie.favoriteenemy ) && zombie.favoriteenemy.isonbusroof; + + if ( ( !self.ismoving || isdefined( self.disabled_by_emp ) && self.disabled_by_emp ) && !self.doorsclosed && !enemy_on_roof ) + continue; + + monkey = undefined; + + if ( isdefined( zombie.enemyoverride ) ) + monkey = zombie.enemyoverride[1]; + + if ( isdefined( monkey ) && !monkey maps\mp\zm_transit_bus::entity_is_on_bus( 1 ) ) + continue; + + if ( !isdefined( zombie.favoriteenemy ) || !zombie.favoriteenemy.isonbus ) + continue; + + if ( isdefined( zombie.isonbus ) && zombie.isonbus ) + continue; + + if ( isdefined( zombie.opening ) ) + continue; + + if ( isdefined( opening.zombie ) ) + continue; + + if ( isdefined( zombie.is_inert ) && zombie.is_inert ) + continue; + + if ( isdefined( zombie.cannotattachtobus ) && zombie.cannotattachtobus ) + continue; + + if ( !level.the_bus.ismoving ) + { + jump_origin = _determinejumpfromorigin( opening ); + distance_from_jump_origin2 = distance2dsquared( jump_origin, zombie.origin ); + + if ( distance_from_jump_origin2 > 256 ) + continue; + } + + if ( isdefined( zombie.dismount_start ) && zombie.dismount_start ) + continue; + + zombie thread zombieattachtobus( self, opening ); + } +} + +_buscanzombieattach( zombie ) +{ + currentlyattached = 0; + + for ( i = 0; i < self.openings.size; i++ ) + { + if ( isdefined( self.openings[i].zombie ) ) + currentlyattached++; + } + + players = get_players(); + maxattach = level.numattachtable[players.size]; + return maxattach < 0 || currentlyattached < maxattach; +} + +zombieplayattachedanim( animname ) +{ + self endon( "death" ); + anim_index = self getanimsubstatefromasd( "zm_bus_attached", animname ); + animationid = self getanimfromasd( "zm_bus_attached", anim_index ); + tag_origin = self.attachent gettagorigin( self.attachtag ); + tag_angles = self.attachent gettagangles( self.attachtag ); + start_origin = getstartorigin( tag_origin, tag_angles, animationid ); + start_angles = getstartangles( tag_origin, tag_angles, animationid ); + self animscripted( start_origin, start_angles, "zm_bus_attached", anim_index ); + self zombieanimnotetrackthink( "bus_attached_anim" ); +} + +debugline( frompoint, color, durationframes ) +{ +/# + for ( i = 0; i < durationframes; i++ ) + { + line( frompoint, ( frompoint[0], frompoint[1], frompoint[2] + 50 ), color ); + wait 0.05; + } +#/ +} + +debugbox( frompoint, color, durationframes ) +{ +/# + for ( i = 0; i < durationframes; i++ ) + { + box( frompoint, ( -1, -1, -1 ), ( 1, 1, 1 ), 0, color ); + wait 0.05; + } +#/ +} + +_isopeningdoor( opening_tag ) +{ + is_door = 0; + + switch ( opening_tag ) + { + case "door_rear_jnt": + case "door_front_jnt": + is_door = 1; + break; + default: + break; + } + + return is_door; +} + +busexitthink( trigger ) +{ + while ( true ) + { + trigger waittill( "trigger", zombie ); + + if ( isdefined( zombie.is_inert ) && zombie.is_inert ) + continue; + + if ( !( isdefined( zombie.walk_to_exit ) && zombie.walk_to_exit ) ) + continue; + + if ( isdefined( zombie.exiting_window ) && zombie.exiting_window ) + continue; + + going_to_roof = 0; + + if ( isdefined( zombie.favoriteenemy ) && zombie.favoriteenemy.isonbusroof == 1 ) + { + going_to_roof = 1; + + if ( trigger.substate == 2 ) + continue; + } + + if ( !going_to_roof && !( isdefined( level.the_bus.doorsclosed ) && level.the_bus.doorsclosed ) && zombie.ai_state != "zombieWindowToRoof" ) + continue; + + zombie thread zombieexitwindow( self, trigger, going_to_roof ); + } +} + +zombieexitwindow( bus, trigger, going_to_roof ) +{ + self endon( "death" ); + self.ai_state = "zombieExitWindow"; + self.inert_delay = ::zombieexitwindowdelay; + self.exiting_window = 1; + self linkto( bus, trigger.tag ); + tag_origin = bus gettagorigin( trigger.tag ); + tag_angles = bus gettagangles( trigger.tag ); + exit_anim = "zm_window_exit"; + + if ( going_to_roof ) + exit_anim = "zm_bus_window2roof"; + + animstate = maps\mp\animscripts\zm_utility::append_missing_legs_suffix( exit_anim ); + self animscripted( tag_origin, tag_angles, animstate, trigger.substate ); + maps\mp\animscripts\zm_shared::donotetracks( "window_exit_anim" ); + self.exiting_window = undefined; + self.walk_to_exit = undefined; + self unlink(); + self setgoalpos( self.origin ); + self.inert_delay = undefined; + + if ( going_to_roof ) + return; + + self animmode( "normal" ); + self orientmode( "face enemy" ); + self.forcemovementscriptstate = 0; + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); +} + +zombieexitwindowdelay() +{ + self endon( "death" ); + + while ( isdefined( self.exiting_window ) && self.exiting_window ) + wait 0.1; + + while ( true ) + { + if ( self.ai_state == "find_flesh" ) + break; + + wait 0.1; + } + + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + self.inert_delay = undefined; +} + +teleportthreadex( verticaloffset, delay, frames ) +{ + amount = verticaloffset / frames; + + if ( amount > 10.0 ) + amount = 10.0; + else if ( amount < -10.0 ) + amount = -10.0; + + offset = ( 0, 0, amount ); + + for ( i = 0; i < frames; i++ ) + { + self teleport( self.origin + offset ); + wait 0.05; + } +} + +zombieopeningdelay() +{ + self endon( "death" ); + self maps\mp\zombies\_zm_spawner::zombie_history( "opening delay detach " + gettime() ); + + if ( isdefined( self.jumpingtowindow ) && self.jumpingtowindow ) + { + while ( true ) + { + if ( !( isdefined( self.jumpingtowindow ) && self.jumpingtowindow ) ) + break; + + wait 0.1; + } + } + + self zombiedetachfrombus( self.left_or_right ); + + while ( true ) + { + if ( self.ai_state == "find_flesh" ) + break; + + wait 0.1; + } + + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + self.inert_delay = undefined; +} + +zombieattachtobus( thebus, opening, removeafterdone ) +{ + self endon( "death" ); + self endon( "removed" ); + self endon( "sonicBoom" ); + level endon( "intermission" ); + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + self endon( "detach_on_window" ); + self endon( "exploding" ); + self.ai_state = "zombieAttachToBus"; + self maps\mp\zombies\_zm_spawner::zombie_history( "zombieAttachToBus " + gettime() ); + opening.zombie = self; + self.dont_throw_gib = 1; + self.forcemovementscriptstate = 1; + self.opening = opening; + self.left_or_right = self zombieattachleftorright( thebus ); + self.attachent = level.the_bus; + self.attachtag = self.opening.bindtag; + self linkto( self.attachent, self.attachtag ); + from_front = 0; + from_rear = 0; + self.inert_delay = ::zombieopeningdelay; + + if ( _isopeningdoor( opening.bindtag ) ) + { + self animscripted( self.origin, self.angles, "zm_jump_on_bus", 0 ); + + if ( opening.bindtag == "door_front_jnt" ) + from_front = 1; + else + from_rear = 1; + } + else + { + self.jumpingtowindow = 1; + asd_name = "zm_zbarrier_jump_on_bus"; + side = _getsideofbusopeningison( opening.bindtag ); + + if ( isdefined( side ) && side == "front" ) + asd_name = "zm_zbarrier_jump_on_bus_front"; + + animstate = maps\mp\animscripts\zm_utility::append_missing_legs_suffix( asd_name ); + tag_origin = self.attachent gettagorigin( self.attachtag ); + tag_angles = self.attachent gettagangles( self.attachtag ); + self animmode( "noclip" ); + self animscripted( tag_origin, tag_angles, animstate, "jump_window" + self.left_or_right ); + } + + self zombieanimnotetrackthink( "jump_on_bus_anim" ); + self animmode( "gravity" ); + self.jumpingtowindow = 0; + + if ( isdefined( self.a.gib_ref ) && ( self.a.gib_ref == "left_arm" || self.a.gib_ref == "right_arm" ) ) + { + self dodamage( self.health + 666, self.origin ); + self startragdoll(); + self launchragdoll( ( 0, 0, -1 ) ); + opening.zombie = undefined; + } + + if ( 1 ) + { + hitpos = self.attachent gettagorigin( self.attachtag ); + hitposinbus = pointonsegmentnearesttopoint( thebus.frontworld, thebus.backworld, hitpos ); + hitdir = vectornormalize( hitposinbus - hitpos ); + hitforce = vectorscale( hitdir, 100.0 ); + hitpos += vectorscale( ( 0, 0, 1 ), 50.0 ); + earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), hitpos, 150 ); + play_sound_at_pos( "grab_metal_bar", hitpos ); + } + + if ( self zombiecanjumponroof( opening ) ) + { + self zombiejumponroof( thebus, opening, removeafterdone, self.left_or_right ); + self zombiesetnexttimetojumponroof(); + self maps\mp\animscripts\zm_run::needsupdate(); + + if ( !self.isdog ) + self maps\mp\animscripts\zm_run::moverun(); + } + else + { + while ( true ) + { + if ( !isdefined( opening.zbarrier ) || maps\mp\zombies\_zm_spawner::get_attack_spot( opening ) ) + break; +/# + println( "Zombie failed to get bus attack spot" ); +#/ + wait 0.5; + continue; + } + + while ( !all_chunks_destroyed( opening ) ) + { + if ( zombieshoulddetachfromwindow() ) + { + zombiedetachfrombus( self.left_or_right ); + return; + } + + self.onbuswindow = 1; + chunk = get_closest_non_destroyed_chunk( self.origin, opening ); + waited = 0; + + if ( isdefined( chunk ) ) + { + waited = 1; + opening.zbarrier setzbarrierpiecestate( chunk, "targetted_by_zombie" ); + opening thread check_zbarrier_piece_for_zombie_death( chunk, opening.zbarrier, self ); + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "teardown", self.animname ); + animstatebase = opening.zbarrier getzbarrierpieceanimstate( chunk ); + animsubstate = "spot_" + self.attacking_spot_index + self.left_or_right + "_piece_" + opening.zbarrier getzbarrierpieceanimsubstate( chunk ); + anim_sub_index = self getanimsubstatefromasd( animstatebase + "_in", animsubstate ); + tag_origin = self.attachent gettagorigin( self.attachtag ); + tag_angles = self.attachent gettagangles( self.attachtag ); + self animscripted( tag_origin, tag_angles, maps\mp\animscripts\zm_utility::append_missing_legs_suffix( animstatebase + "_in" ), anim_sub_index ); + self zombieanimnotetrackthink( "board_tear_bus_anim", chunk, opening ); + + while ( 0 < opening.zbarrier.chunk_health[chunk] ) + { + tag_origin = self.attachent gettagorigin( self.attachtag ); + tag_angles = self.attachent gettagangles( self.attachtag ); + self animscripted( tag_origin, tag_angles, maps\mp\animscripts\zm_utility::append_missing_legs_suffix( animstatebase + "_loop" ), anim_sub_index ); + self zombieanimnotetrackthink( "board_tear_bus_anim", chunk, opening ); + opening.zbarrier.chunk_health[chunk]--; + } + + tag_origin = self.attachent gettagorigin( self.attachtag ); + tag_angles = self.attachent gettagangles( self.attachtag ); + self animscripted( tag_origin, tag_angles, maps\mp\animscripts\zm_utility::append_missing_legs_suffix( animstatebase + "_out" ), anim_sub_index ); + self zombieanimnotetrackthink( "board_tear_bus_anim", chunk, opening ); + } + + tried_attack = self zombietryattackthroughwindow( 1, self.left_or_right ); + + if ( !tried_attack && !waited ) + wait 0.1; + } + + self.onbuswindow = undefined; + + if ( !_isopeningdoor( opening.bindtag ) ) + { + self zombiekeepattackingthroughwindow( self.left_or_right ); + side = _getsideofbusopeningison( opening.bindtag ); + + if ( side == "front" ) + from_front = 1; + + anim_state = "window_climbin"; + + if ( from_front ) + { + anim_state += "_front"; + anim_state += self.left_or_right; + } + else if ( from_rear ) + anim_state += "_back"; + else + anim_state += self.left_or_right; + + min_chance_at_round = 5; + max_chance_at_round = 12; + + if ( level.round_number >= min_chance_at_round ) + { + round = min( level.round_number, max_chance_at_round ); + range = max_chance_at_round - min_chance_at_round; + chance = 100 / range * ( round - min_chance_at_round ); + + if ( randomintrange( 0, 100 ) <= chance ) + anim_state += "_fast"; + } + + anim_index = self getanimsubstatefromasd( "zm_zbarrier_climbin_bus", anim_state ); + enter_anim = self getanimfromasd( "zm_zbarrier_climbin_bus", anim_index ); + tag_origin = self.attachent gettagorigin( self.attachtag ); + tag_angles = self.attachent gettagangles( self.attachtag ); + self.climbing_into_bus = 1; + self.entering_bus = 1; + self animmode( "noclip" ); + self animscripted( tag_origin, tag_angles, "zm_zbarrier_climbin_bus", anim_index ); + self zombieanimnotetrackthink( "climbin_bus_anim" ); + self animmode( "gravity" ); + self maps\mp\animscripts\zm_run::needsupdate(); + + if ( !self.isdog ) + self maps\mp\animscripts\zm_run::moverun(); + } + + opening.zombie = undefined; + self.opening = undefined; + self unlink(); + self setgoalpos( self.origin ); + } + + self reset_attack_spot(); + self.climbing_into_bus = 0; + + if ( isdefined( removeafterdone ) && removeafterdone ) + { + self delete(); + return; + } + + self.inert_delay = undefined; +} + +zombieattachleftorright( bus ) +{ + tag = self.opening.bindtag; + + if ( !( isdefined( bus.doorsclosed ) && bus.doorsclosed ) ) + { + if ( tag == "window_right_1_jnt" || tag == "window_right_2_jnt" || tag == "window_right_3_jnt" ) + return "_r"; + else if ( tag == "window_right_4_jnt" ) + return "_l"; + } + + side = getopeningside( tag ); + + if ( isdefined( side ) ) + { + if ( side == "right" ) + openings = bus.openingright; + else if ( side == "left" ) + openings = bus.openingleft; + + foreach ( opening in openings ) + { + if ( opening == self.opening ) + continue; + + if ( isdefined( opening.zombie ) ) + return opening.zombie.left_or_right; + } + } + + left_or_right = "_l"; + + if ( randomint( 10 ) > 5 ) + left_or_right = "_r"; + + return left_or_right; +} + +businitrightandleft() +{ + self.openingright = []; + self.openingleft = []; + + foreach ( opening in self.openings ) + { + side = getopeningside( opening.bindtag ); + + if ( isdefined( side ) ) + { + if ( side == "right" ) + { + self.openingright[self.openingright.size] = opening; + continue; + } + + if ( side == "left" ) + self.openingleft[self.openingleft.size] = opening; + } + } +} + +getopeningside( tag ) +{ + for ( i = 1; i <= 4; i++ ) + { + window_tag = "window_right_" + i + "_jnt"; + + if ( tag == window_tag ) + return "right"; + } + + for ( i = 1; i <= 5; i++ ) + { + window_tag = "window_left_" + i + "_jnt"; + + if ( tag == window_tag ) + return "left"; + } + + return undefined; +} + +zombiegetwindowanimrate() +{ + animrate = 1.0; + animrateroundscalar = 0.0; + players = get_players(); + + if ( players.size > 1 ) + { + target_rate = 1.5; + target_round = 25; + target_num_players = 4; + rate = ( target_rate - 1.0 ) / target_round / target_num_players; + animrateroundscalar = rate * players.size; + animrate = 1.0 + animrateroundscalar * level.round_number; + + if ( animrate > target_rate ) + animrate = target_rate; + } + + return animrate; +} + +zombiedetachfrombus( postfix ) +{ + if ( !isdefined( self.opening ) ) + return; + + if ( isdefined( self.opening.zombie ) && self.opening.zombie == self ) + self.opening.zombie = undefined; + + is_right = 0; + + if ( postfix == "_r" ) + is_right = 1; + + bindtag = self.opening.bindtag; + side = _getsideofbusopeningison( bindtag ); + tag_origin = level.the_bus gettagorigin( bindtag ); + tag_angles = level.the_bus gettagangles( bindtag ); + self.opening = undefined; + self.isonbusroof = 0; + self.onbuswindow = undefined; + self.ai_state = "zombieDetachFromBus"; + self.entering_bus = 0; + self.isonbus = 0; + asd_name = "zm_window_dismount"; + + if ( isdefined( side ) && side == "front" ) + asd_name = "zm_front_window_dismount"; + + animstate = maps\mp\animscripts\zm_utility::append_missing_legs_suffix( asd_name ); + self animscripted( tag_origin, tag_angles, animstate, is_right ); + self.dismount_start = 1; + self thread dismount_timer(); + maps\mp\animscripts\zm_shared::donotetracks( "window_dismount_anim" ); + self unlink(); + self reset_attack_spot(); + self.dismount_start = 0; + self.forcemovementscriptstate = 0; + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); + self.dont_throw_gib = undefined; + self notify( "detach_on_window" ); +} + +dismount_timer() +{ + self endon( "death" ); + wait 1.5; + self.dismount_start = 0; +} + +zombiegetcymbalmonkey() +{ + if ( isdefined( self.monkey_time ) && gettime() < self.monkey_time ) + return self.monkey; + + poi = undefined; + + if ( level.cymbal_monkeys.size > 0 ) + poi = self get_zombie_point_of_interest( self.origin, level.cymbal_monkeys ); + + if ( isdefined( poi ) ) + { + self.monkey = poi[1]; + self.monkey_time = gettime() + 250; + return poi[1]; + } + + return undefined; +} + +zombieshoulddetachfromwindow() +{ + monkey = self zombiegetcymbalmonkey(); + + if ( isdefined( monkey ) ) + { + if ( monkey maps\mp\zm_transit_bus::entity_is_on_bus( 1 ) ) + return false; + else + return true; + } + + enemy = self.favoriteenemy; + + if ( isdefined( enemy ) && !self.favoriteenemy.isonbus ) + return true; + + return false; +} + +zombiecanjumponroof( opening ) +{ + if ( level.the_bus.numplayersonroof == 0 ) + { + if ( all_chunks_destroyed( opening ) ) + return false; + + if ( isdefined( level.bus_zombie_on_roof ) ) + return false; + + if ( level.bus_roof_next_time > gettime() ) + return false; + } + + percentchance = 0; + + if ( level.round_number <= 5 ) + percentchance = 5; + else if ( level.round_number <= 10 ) + percentchance = 20; + else if ( level.round_number <= 20 ) + percentchance = 30; + else if ( level.round_number <= 25 ) + percentchance = 40; + else + percentchance = 50; + + percentofplayersonroof = 1; + + if ( level.the_bus.numplayersnear > 0 ) + percentofplayersonroof = level.the_bus.numplayersonroof / level.the_bus.numplayersnear; + + percentofplayersonroof *= 100.0; + + if ( percentchance < percentofplayersonroof ) + percentchance = percentofplayersonroof; + + if ( randomint( 100 ) < percentchance ) + return true; + + return false; +} + +zombiesetnexttimetojumponroof() +{ + level.bus_roof_next_time = gettime() + level.bus_roof_min_interval_time + randomint( level.bus_roof_max_interval_time - level.bus_roof_min_interval_time ); +} + +zombiejumponroof( thebus, opening, removeafterdone, postfix ) +{ + level.bus_zombie_on_roof = self; + self.climbing_onto_bus = 1; + self.entering_bus = 1; + self animscripted( self.opening.zbarrier.origin, self.opening.zbarrier.angles, "zm_zbarrier_window_climbup", "window_climbup" + postfix ); + self zombieanimnotetrackthink( "bus_window_climbup" ); + play_sound_at_pos( "grab_metal_bar", self.origin ); + opening.zombie = undefined; + self.opening = undefined; + self unlink(); + self setgoalpos( self.origin ); + self.climbing_onto_bus = 0; + + if ( level.the_bus.numplayersonroof > 0 ) + level.bus_zombie_on_roof = undefined; +} + +bussetupladder() +{ + trigger = getent( "bus_ladder_trigger", "targetname" ); + + if ( !isdefined( trigger ) ) + return; + + trigger enablelinkto(); + trigger linkto( level.the_bus ); + trigger setmovingplatformenabled( 1 ); + trigger setinvisibletoall(); + mantlebrush = getentarray( "ladder_mantle", "targetname" ); + + if ( isdefined( mantlebrush ) && mantlebrush.size > 0 ) + { + for ( i = 0; i < mantlebrush.size; i++ ) + self thread busdeferredinitladdermantle( mantlebrush[i] ); + } + + thread busladderthink(); +} + +busdeferredinitladdermantle( mantle ) +{ + origin = self worldtolocalcoords( mantle.origin ); + mantle linkto( self, "", origin, ( 0, 0, 0 ) ); + mantle setmovingplatformenabled( 1 ); + wait_for_buildable( "busladder" ); + mantle delete(); +} + +busladderthink() +{ + origin = level.the_bus gettagorigin( "tag_ladder_attach" ); + origin += ( 10, 3, -30 ); + angles = level.the_bus gettagangles( "tag_ladder_attach" ); + angles += vectorscale( ( 0, 1, 0 ), 90.0 ); + level.the_bus.ladder = spawn( "script_model", origin ); + level.the_bus.ladder.angles = angles; + level.the_bus.ladder setmodel( "com_stepladder_large_closed" ); + level.the_bus.ladder notsolid(); + level.the_bus.ladder linkto( level.the_bus, "tag_ladder_attach" ); + level.the_bus.ladder setmovingplatformenabled( 1 ); + level.the_bus.ladder hide(); + player = wait_for_buildable( "busladder" ); + flag_set( "ladder_attached" ); + level.the_bus.ladder show(); + player maps\mp\zombies\_zm_buildables::track_placed_buildables( "busladder" ); +} + +bussetuproofopening() +{ + level.bus_roof_open = 0; + level.bus_zombie_on_roof = undefined; + level.bus_roof_next_time = 0; + level.bus_roof_min_interval_time = 10000; + level.bus_roof_max_interval_time = 20000; + trigger = getent( "bus_hatch_bottom_trigger", "targetname" ); + + if ( !isdefined( trigger ) ) + return; + + trigger enablelinkto(); + trigger linkto( level.the_bus ); + trigger setmovingplatformenabled( 1 ); + self thread bus_hatch_wait(); + self thread bus_hatch_tearin_wait(); + clipbrush = getentarray( "hatch_clip", "targetname" ); + + if ( isdefined( clipbrush ) && clipbrush.size > 0 ) + { + for ( i = 0; i < clipbrush.size; i++ ) + self thread businithatchclip( clipbrush[i] ); + } + + mantlebrush = getentarray( "hatch_mantle", "targetname" ); + + if ( isdefined( mantlebrush ) && mantlebrush.size > 0 ) + { + for ( i = 0; i < mantlebrush.size; i++ ) + self thread busdeferredinithatchmantle( mantlebrush[i] ); + } + + hatch_location = spawn( "script_origin", level.the_bus localtoworldcoords( ( 227, -1.7, 48 ) ) ); + hatch_location enablelinkto(); + hatch_location linkto( level.the_bus ); + hatch_location setmovingplatformenabled( 1 ); + level.the_bus.hatch_location = hatch_location; +/# + adddebugcommand( "devgui_cmd \"Zombies:1/Bus:14/Hatch:4/Allow Traverse:1\" \"zombie_devgui hatch_available\"\n" ); + self thread wait_open_sesame(); +#/ +} + +wait_open_sesame() +{ + level waittill( "open_sesame" ); + + self notify( "hatch_mantle_allowed" ); + + if ( isdefined( level.bus_tearin_roof ) ) + level.bus_tearin_roof hide(); + + level.the_bus showpart( "tag_hatch_attach_ladder" ); + level.the_bus hidepart( "tag_hatch_pristine" ); + level.the_bus hidepart( "tag_hatch_damaged" ); + level.bus_roof_open = 1; + level.bus_roof_tearing = 0; +} + +bus_hatch_wait() +{ + level.the_bus hidepart( "tag_hatch_attach_ladder" ); + player = wait_for_buildable( "bushatch" ); + flag_set( "hatch_attached" ); + level.the_bus showpart( "tag_hatch_attach_ladder" ); + level.the_bus hidepart( "tag_hatch_pristine" ); + level.the_bus hidepart( "tag_hatch_damaged" ); + level.bus_roof_open = 1; + level.bus_roof_tearing = 0; + self notify( "hatch_mantle_allowed" ); + player maps\mp\zombies\_zm_buildables::track_placed_buildables( "bushatch" ); +} + +bus_hatch_tearin_wait() +{ + self endon( "hatch_mantle_allowed" ); + level.the_bus hidepart( "tag_hatch_damaged" ); + + self waittill( "hatch_ripped_open" ); + + level.the_bus hidepart( "tag_hatch_pristine" ); + level.the_bus showpart( "tag_hatch_damaged" ); + self notify( "hatch_drop_allowed" ); + playfxontag( level._effect["bus_hatch_bust"], self, "tag_headlights" ); +} + +businithatchclip( clip ) +{ + origin = self worldtolocalcoords( clip.origin ); + clip linkto( self, "", origin, ( 0, 0, 0 ) ); + clip setmovingplatformenabled( 1 ); + self waittill_any( "hatch_mantle_allowed", "hatch_drop_allowed" ); + clip delete(); +} + +busdeferredinithatchmantle( mantle ) +{ + origin = self worldtolocalcoords( mantle.origin ); + mantle.origin = vectorscale( ( 0, 0, -1 ), 100.0 ); + + self waittill( "hatch_mantle_allowed" ); + + mantle linkto( self, "", origin, ( 0, 0, 0 ) ); + mantle setmovingplatformenabled( 1 ); +} + +zombieonbusenemy() +{ + new_enemy = undefined; + + if ( isdefined( level.the_bus.bus_riders_alive ) && level.the_bus.bus_riders_alive.size > 0 ) + new_enemy = getclosest( self.origin, level.the_bus.bus_riders_alive ); + + if ( isdefined( new_enemy ) && isdefined( self.favoriteenemy ) && isdefined( new_enemy ) && self.favoriteenemy != new_enemy ) + { + if ( !( isdefined( self.favoriteenemy.isonbus ) && self.favoriteenemy.isonbus ) ) + self.favoriteenemy = new_enemy; + else if ( self.isonbusroof == new_enemy.isonbusroof ) + self.favoriteenemy = new_enemy; + } +} + +zombiemoveonbus() +{ + self endon( "death" ); + self endon( "removed" ); + level endon( "intermission" ); + self notify( "endOnBus" ); + self endon( "endOnBus" ); + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + wait 0.05; + self orientmode( "face enemy" ); + self.goalradius = 32; + self.forcemovementscriptstate = 1; + self.ai_state = "zombieMoveOnBus"; + self maps\mp\zombies\_zm_spawner::zombie_history( "zombieMoveOnBus " + gettime() ); + bus_nodes = getnodearray( "the_bus", "target" ); + + while ( true ) + { + self zombieonbusenemy(); + + if ( !isdefined( self.favoriteenemy ) ) + break; + + self_on_bus = isdefined( self.isonbus ) && self.isonbus; + self_is_on_bus_roof = isdefined( self.isonbusroof ) && self.isonbusroof; + + if ( !self_on_bus ) + break; + + if ( isdefined( self.is_inert ) && self.is_inert ) + { + self.ignoreall = 1; + + while ( isdefined( self.is_inert ) && self.is_inert ) + wait 0.1; + + self.ignoreall = 0; + } + + poi_override = 0; + + if ( self.forcemovementscriptstate ) + { + monkey = self zombiegetcymbalmonkey(); + + if ( isdefined( monkey ) ) + { + poi_override = 1; + self.ignoreall = 1; + self animmode( "normal" ); + self orientmode( "face motion" ); + + if ( !level.the_bus maps\mp\zm_transit_bus::busispointinside( monkey.origin ) ) + self zombiewalktoexit(); + else + self setgoalpos( monkey.origin ); + } + else + { + self.ignoreall = 0; + self animmode( "gravity" ); + self orientmode( "face enemy" ); + + if ( !( isdefined( level.the_bus.doorsclosed ) && level.the_bus.doorsclosed ) ) + { + doorstrigger = getentarray( "bus_door_trigger", "targetname" ); + + foreach ( trigger in doorstrigger ) + { + if ( self istouching( trigger ) ) + { + self orientmode( "face motion" ); + break; + } + } + } + + dist_sq = distancesquared( self.favoriteenemy.origin, bus_nodes[0].origin ); + goal_node = bus_nodes[0]; + + for ( i = 1; i < bus_nodes.size; i++ ) + { + bus_sq = distancesquared( self.favoriteenemy.origin, bus_nodes[i].origin ); + + if ( bus_sq < dist_sq ) + { + dist_sq = bus_sq; + goal_node = bus_nodes[i]; + } + } + + if ( self_is_on_bus_roof ) + self.goalradius = 16; + else + self.goalradius = 32; + + self setgoalnode( goal_node ); + } + } + + enemy = self.favoriteenemy; + enemy_on_bus = isdefined( enemy ) && enemy.isonbus; + enemy_on_roof = enemy_on_bus && isdefined( enemy.isonbusroof ) && enemy.isonbusroof; + + if ( !enemy_on_bus && !self_is_on_bus_roof ) + { + monkey = self zombiegetcymbalmonkey(); + + if ( !isdefined( monkey ) || !monkey maps\mp\zm_transit_bus::entity_is_on_bus( 1 ) ) + { + self thread zombieexitbus(); + return; + } + } + else if ( enemy_on_bus && self_is_on_bus_roof != enemy_on_roof ) + { + self thread zombieheighttraverse(); + return; + } + else if ( self_is_on_bus_roof && !enemy_on_bus ) + { + self thread zombiejumpoffroof(); + return; + } + else if ( !( isdefined( poi_override ) && poi_override ) ) + { + disttoenemy = distance2d( self.origin, self.favoriteenemy.origin ); + shouldbeinforcemovement = disttoenemy > 32.0; + + if ( !shouldbeinforcemovement && self.forcemovementscriptstate ) + { + self.forcemovementscriptstate = 0; + self animmode( "normal" ); + self orientmode( "face enemy" ); + } + + if ( shouldbeinforcemovement && !self.forcemovementscriptstate ) + { + self.forcemovementscriptstate = 1; + self animmode( "gravity" ); + self orientmode( "face enemy" ); + } + } + + wait 0.1; + } + + self animmode( "normal" ); + self orientmode( "face enemy" ); + self.forcemovementscriptstate = 0; + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); +} + +zombiewalktoexit() +{ + self endon( "death" ); + bus = level.the_bus; + self.walk_to_exit = 1; + check_pos = self.origin; + enemy = self.favoriteenemy; + + if ( isdefined( enemy ) ) + check_pos = enemy.origin; + + if ( !level.the_bus.doorsclosed ) + { + front_dist = distance2dsquared( check_pos, level.the_bus.front_door.origin ); + back_dist = distance2dsquared( check_pos, level.the_bus.back_door.origin ); + link_one = undefined; + link_two = undefined; + door_node = undefined; + door_dist = undefined; + + if ( front_dist < back_dist ) + { + door_dist = distance2dsquared( self.origin, level.the_bus.front_door.origin ); + + if ( door_dist < 256 ) + door_node = level.the_bus.front_door; + } + else + { + door_dist = distance2dsquared( self.origin, level.the_bus.back_door.origin ); + + if ( door_dist < 256 ) + door_node = level.the_bus.back_door; + } + + if ( isdefined( door_node ) ) + { + if ( isdefined( door_node.links ) ) + { + if ( isdefined( door_node.links[0] ) ) + link_one = door_node.links[0]; + + if ( isdefined( door_node.links[1] ) ) + link_two = door_node.links[1]; + } + + link_goal = undefined; + + if ( isdefined( link_one ) ) + link_goal = link_one; + + if ( isdefined( link_one ) && isdefined( link_two ) ) + { + link_one_dist = distance2dsquared( check_pos, link_one.origin ); + link_two_dist = distance2dsquared( check_pos, link_two.origin ); + link_goal = link_one; + + if ( link_two_dist < link_one_dist ) + link_goal = link_two; + } + + if ( isdefined( link_goal ) ) + { + self setgoalnode( link_goal ); + return; + } + } + + door_goal = level.the_bus.front_door; + + if ( back_dist < front_dist ) + door_goal = level.the_bus.back_door; + + self setgoalnode( door_goal ); + } + else + { + dist_f = distancesquared( check_pos, bus.front_door_inside.origin ); + dist_bl = distancesquared( check_pos, bus.exit_back_l.origin ); + dist_br = distancesquared( check_pos, bus.exit_back_r.origin ); + goal_node = bus.front_door_inside; + + if ( dist_bl < dist_br ) + { + if ( dist_bl < dist_f ) + goal_node = bus.exit_back_l; + } + else if ( dist_br < dist_f ) + goal_node = bus.exit_back_r; + + self setgoalnode( goal_node ); + } +} + +zombiewindowtoroof() +{ + self endon( "death" ); + self animmode( "normal" ); + self orientmode( "face motion" ); + self.ai_state = "zombieWindowToRoof"; + self maps\mp\zombies\_zm_spawner::zombie_history( "zombieWindowToRoof " + gettime() ); + + while ( true ) + { + self zombiewalktowindow(); + + if ( isdefined( self.exiting_window ) && self.exiting_window ) + break; + + if ( !( isdefined( self.isonbus ) && self.isonbus ) || isdefined( self.ai_state == "find_flesh" ) && self.ai_state == "find_flesh" ) + return; + + wait 0.1; + } + + while ( isdefined( self.exiting_window ) && self.exiting_window ) + wait 0.1; +} + +zombiewalktowindow() +{ + self endon( "death" ); + bus = level.the_bus; + self.walk_to_exit = 1; + check_pos = self.origin; + dist_f = distancesquared( check_pos, bus.front_door_inside.origin ); + dist_bl = distancesquared( check_pos, bus.exit_back_l.origin ); + goal_node = bus.front_door_inside; + + if ( dist_bl < dist_f ) + goal_node = bus.exit_back_l; + + self setgoalnode( goal_node ); +} + +zombieattackplayerclinging( player ) +{ + self endon( "death" ); + level endon( "intermission" ); + self.goalradius = 15; + enemy_clinging = 1; + + while ( enemy_clinging ) + { + best_attack_pos = maps\mp\zm_transit_cling::_getbusattackposition( player ); + dist_from_pos2 = distance2dsquared( best_attack_pos, self.origin ); + enemy_origin = player _playergetorigin(); + direction = enemy_origin - self.origin; + direction_angles = vectortoangles( direction ); + direction_angles = ( direction_angles[0], direction_angles[1], 0 ); + + if ( dist_from_pos2 > 400 ) + { + self orientmode( "face point", best_attack_pos ); + self setgoalpos( best_attack_pos ); + } + else + self zombiescriptedattack( player, direction_angles, ::zombiedamageplayercling ); + + enemy_clinging = player maps\mp\zm_transit_cling::playerisclingingtobus(); + wait 0.1; + } + + self.goalradius = 32; +} + +zombieattackplayeronturret( player ) +{ + self endon( "death" ); + level endon( "intermission" ); + + for ( enemy_on_turret = 1; enemy_on_turret; enemy_on_turret = isdefined( self.favoriteenemy.onbusturret ) && isdefined( self.favoriteenemy.busturret ) && self.favoriteenemy.onbusturret ) + { + enemy_origin = self.favoriteenemy _playergetorigin(); + dist_from_turret2 = distance2dsquared( enemy_origin, self.origin ); + direction = enemy_origin - self.origin; + direction_angles = vectortoangles( direction ); + direction_angles = ( direction_angles[0], direction_angles[1], 0 ); + + if ( dist_from_turret2 > 1024 ) + self setgoalpos( enemy_origin, direction_angles ); + else + self zombiescriptedattack( player, direction_angles, ::zombiedamageplayerturret ); + + wait 0.1; + } +} + +zombiescriptedattack( player, direction_angles, damage_func ) +{ + self orientmode( "face angle", direction_angles[1] ); + zombie_attack_anim = self zombiepickunmovingattackanim(); + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "attack", self.animname ); + + while ( true ) + { + self waittill( "meleeanim", note ); + + if ( note == "end" || note == "stop" ) + break; + else if ( note == "fire" ) + { + if ( isdefined( damage_func ) ) + [[ damage_func ]]( player ); + } + } +} + +zombiedamageplayerturret( player ) +{ + if ( player.onbusturret ) + player dodamage( self.meleedamage, self.origin, self ); +} + +zombiedamageplayercling( player ) +{ + if ( player maps\mp\zm_transit_cling::playerisclingingtobus() ) + player dodamage( self.meleedamage, self.origin, self ); +} + +_playergetorigin() +{ + if ( isdefined( self.onbusturret ) && isdefined( self.busturret ) && self.onbusturret ) + { + turret = self.busturret; + turret_exit = getent( turret.target, "targetname" ); + return turret_exit.origin; + } + + return self.origin; +} + +zombiepickunmovingattackanim() +{ + melee_anim = undefined; + + if ( self.has_legs ) + { + rand_num = randomint( 4 ); + melee_anim = level._zombie_melee[self.animname][rand_num]; + } + else if ( self.a.gib_ref == "no_legs" ) + melee_anim = random( level._zombie_stumpy_melee[self.animname] ); + else + melee_anim = level._zombie_melee_crawl[self.animname][0]; + + return melee_anim; +} + +zombieexitbus() +{ + self endon( "death" ); + self endon( "stop_zombieExitBus" ); + level endon( "intermission" ); + self animmode( "normal" ); + self orientmode( "face motion" ); + self maps\mp\zombies\_zm_spawner::zombie_history( "zombieExitBus " + gettime() ); + + while ( true ) + { + if ( isdefined( self.exiting_window ) && self.exiting_window ) + break; + + if ( !( isdefined( self.isonbus ) && self.isonbus ) ) + { + self.walk_to_exit = 0; + return; + } + + if ( !( isdefined( self.solo_revive_exit ) && self.solo_revive_exit ) ) + { + monkey = undefined; + + if ( isdefined( self.enemyoverride ) ) + monkey = self.enemyoverride[1]; + + ignore_enemy = 0; + + if ( isdefined( monkey ) && !monkey maps\mp\zm_transit_bus::entity_is_on_bus( 1 ) ) + ignore_enemy = 1; + + if ( !ignore_enemy ) + { + enemy = self.favoriteenemy; + + if ( isdefined( enemy ) ) + { + if ( enemy.isonbus ) + { + self.walk_to_exit = 0; + self thread zombiemoveonbus(); + return; + } + } + } + } + + self zombiewalktoexit(); + wait 0.1; + } + + while ( isdefined( self.exiting_window ) && self.exiting_window ) + wait 0.1; + + self.dont_throw_gib = undefined; + self orientmode( "face enemy" ); + self.forcemovementscriptstate = 0; + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); +} + +zombiejumpoffroof() +{ + self endon( "death" ); + self endon( "removed" ); + level endon( "intermission" ); + self animmode( "gravity" ); + self orientmode( "face goal" ); + self maps\mp\zombies\_zm_spawner::zombie_history( "zombieJumpOffRoof " + gettime() ); + + while ( true ) + { + enemy = self.favoriteenemy; + enemy_on_bus = isdefined( enemy ) && enemy.isonbus; + enemiesonbus = level.the_bus.numaliveplayersridingbus > 0; + selfisonbus = isdefined( self.isonbus ) && self.isonbus; + + if ( enemy_on_bus ) + { + self thread zombiemoveonbus(); + return; + } + + if ( !selfisonbus ) + break; + + closest_jump_tag = self zombiegetclosestroofjumptag(); + goal_pos = level.the_bus gettagorigin( closest_jump_tag ); + + if ( distance2dsquared( self.origin, goal_pos ) <= 1024 ) + { + self.attachent = level.the_bus; + self.attachtag = closest_jump_tag; + self linkto( self.attachent, self.attachtag, ( 0, 0, 0 ), ( 0, 0, 0 ) ); + wait 0.1; + self zombieplayattachedanim( "jump_down_127" ); + self setgoalpos( self.origin ); + self unlink(); + break; + } + + self setgoalpos( goal_pos ); + self orientmode( "face point", goal_pos ); + wait 0.1; + } +} + +zombieheighttraverse() +{ + level endon( "intermission" ); + self endon( "death" ); + self endon( "removed" ); + self endon( "zombieHeightTraverseStop" ); + self animmode( "gravity" ); + self orientmode( "face goal" ); + self.zombie_ladder_stage = 1; + self.goal_local_offset = level.the_bus.ladder_local_offset; + self.goal_local_offset = ( self.goal_local_offset[0], self.goal_local_offset[1], level.the_bus.floor ); + self.goal_local_angles = vectorscale( ( 0, -1, 0 ), 90.0 ); + self maps\mp\zombies\_zm_spawner::zombie_history( "zombieHeightTraverse " + gettime() ); + + if ( !isdefined( self.isonbusroof ) || !self.isonbusroof ) + { + bus = level.the_bus; + hatch_dist = distancesquared( self.origin, bus.hatch_location.origin ); + front_dist = distancesquared( self.origin, bus.front_door_inside.origin ); + back_dist = distancesquared( self.origin, bus.exit_back_l.origin ); + closer_to_hatch = 1; + + if ( front_dist < hatch_dist || back_dist < hatch_dist ) + closer_to_hatch = 0; + + if ( !( isdefined( level.bus_roof_open ) && level.bus_roof_open ) || isdefined( level.bus_roof_tearing ) && level.bus_roof_tearing || !closer_to_hatch ) + self zombiewindowtoroof(); + else if ( self zombiepathtoladder() ) + self zombieclimbtoroof(); + } + else if ( self zombiepathtoroofopening() ) + self zombiejumpdownhatch(); + else + { + enemy = self.favoriteenemy; + + if ( isdefined( enemy ) && !( isdefined( enemy.isonbus ) && enemy.isonbus ) ) + { + self thread zombiejumpoffroof(); + return; + } + } + + if ( isdefined( self.isonbus ) && self.isonbus ) + self thread zombiemoveonbus(); +} + +zombiepathtoladder() +{ + self.goalradius = 2; + + while ( isdefined( self.enemy ) && self.enemy.isonbusroof ) + { + if ( !self.isonbus ) + { + self.goalradius = 32; + return false; + } + + goal_dir = anglestoforward( level.the_bus.angles + self.goal_local_angles ); + goal_pos = level.the_bus.hatch_location.origin; + + if ( distancesquared( self.origin, goal_pos ) <= 1600 ) + { + self.goalradius = 32; + self.ladder_pos = goal_pos; + return true; + } + + self setgoalpos( goal_pos ); + self orientmode( "face point", goal_pos ); + wait 0.1; + } + + self.goalradius = 32; + return false; +} + +zombiepathtoroofopening() +{ + self.goalradius = 2; + goal_tag = self zombiegetclosestroofopeningjumptag(); + + while ( true ) + { + self zombieonbusenemy(); + enemy = self.favoriteenemy; + + if ( isdefined( enemy ) && ( isdefined( enemy.isonbusroof ) && enemy.isonbusroof ) ) + break; + + if ( isdefined( enemy ) && !( isdefined( enemy.isonbus ) && enemy.isonbus ) ) + break; + + if ( !self.isonbus ) + break; + + goal_dir = level.the_bus gettagangles( goal_tag ); + goal_pos = level.the_bus gettagorigin( goal_tag ); + + if ( distance2d( self.origin, goal_pos ) <= 32.0 ) + { + self.goalradius = 32; + return true; + } + + self setgoalpos( goal_pos ); + self orientmode( "face point", goal_pos ); + wait 0.1; + } + + self.goalradius = 32; + return false; +} + +zombiejumpdownhatch() +{ + self endon( "death" ); + self thread zombiejumpdownhatchkilled(); + enemy = self.favoriteenemy; + + if ( isdefined( enemy ) && ( isdefined( enemy.isonbusroof ) && enemy.isonbusroof ) ) + { + self unlink(); + return; + } + + while ( isdefined( level.bus_roof_tearing ) && level.bus_roof_tearing ) + wait 0.1; + + roof_tag = self zombiegetclosestroofopeningjumptag(); + + if ( !level.bus_roof_open ) + { + self.inert_delay = ::zombieroofteardelay; + level.bus_roof_open = 1; + level.bus_roof_tearing = 1; + self linkto( level.the_bus, roof_tag ); + tag_origin = level.the_bus gettagorigin( roof_tag ); + tag_angles = level.the_bus gettagangles( roof_tag ); + substate = 1; + + if ( roof_tag == "window_roof_2_jnt" ) + substate = 2; + + animstate = "zm_bus_attached"; + self animscripted( tag_origin, tag_angles, animstate, substate ); + maps\mp\animscripts\zm_shared::donotetracks( "bus_attached_anim" ); + self.inert_delay = undefined; + level.bus_roof_tearing = 0; + level.the_bus notify( "hatch_ripped_open" ); + } + + self.hatch_jump = 1; + self.inert_delay = ::zombiehatchjumpdelay; + hatch_tag = "tag_hatch_attach_ladder"; + self linkto( level.the_bus, hatch_tag ); + tag_origin = level.the_bus gettagorigin( hatch_tag ); + tag_angles = level.the_bus gettagangles( hatch_tag ); + substate = 0; + + if ( roof_tag == "window_roof_1_jnt" ) + substate = 1; + + animstate = maps\mp\animscripts\zm_utility::append_missing_legs_suffix( "zm_bus_hatch_jump_down" ); + self animscripted( tag_origin, tag_angles, animstate, substate ); + maps\mp\animscripts\zm_shared::donotetracks( "bus_hatch_jump_anim" ); + self unlink(); + self.hatch_jump = 0; + self.inert_delay = undefined; + self setgoalpos( self.origin ); + level.bus_zombie_on_roof = undefined; +} + +zombiehatchjumpdelay() +{ +/# + iprintln( "hatch delay" ); +#/ + while ( isdefined( self.hatch_jump ) && self.hatch_jump ) + wait 0.1; +} + +zombieroofteardelay() +{ + self endon( "death" ); + self notify( "zombieHeightTraverseStop" ); + self unlink(); + level.bus_roof_open = 0; + level.bus_roof_tearing = 0; + self.inert_wakeup_override = ::zombierooftearwakeup; +} + +zombierooftearwakeup() +{ + self endon( "death" ); + self.inert_wakeup_override = undefined; + self thread zombieheighttraverse(); +} + +zombiejumpdownhatchkilled() +{ + while ( isdefined( level.bus_roof_tearing ) && level.bus_roof_tearing ) + { + if ( !isdefined( self ) ) + { + level.bus_roof_tearing = 0; + break; + } + + wait 0.1; + } +} + +zombieclimbtoroof() +{ + self endon( "death" ); + hatch_tag = "tag_hatch_attach_ladder"; + self linkto( level.the_bus, hatch_tag ); + tag_origin = level.the_bus gettagorigin( hatch_tag ); + tag_angles = level.the_bus gettagangles( hatch_tag ); + hatch_vec = vectornormalize( anglestoforward( tag_angles ) ); + player = self.favoriteenemy; + player_vec = vectornormalize( player.origin - tag_origin ); + substate = 0; + dot = vectordot( hatch_vec, player_vec ); + + if ( dot > 0 ) + substate = 1; + + animstate = maps\mp\animscripts\zm_utility::append_missing_legs_suffix( "zm_bus_hatch_jump_up" ); + self animscripted( tag_origin, tag_angles, animstate, substate ); + maps\mp\animscripts\zm_shared::donotetracks( "bus_hatch_jump_anim" ); + self unlink(); + self setgoalpos( self.origin ); +} + +zombiegetclosestroofjumptag() +{ + root = "tag_roof_jump_off"; + best = root + "1"; + best_pos = level.the_bus gettagorigin( best ); + best_pos_dist2 = distance2dsquared( self.origin, best_pos ); + + for ( i = 1; i <= 4; i++ ) + { + next_pos = level.the_bus gettagorigin( root + i ); + next_pos_dist2 = distance2dsquared( self.origin, next_pos ); + + if ( next_pos_dist2 < best_pos_dist2 ) + { + best = root + i; + best_pos = next_pos; + best_pos_dist2 = next_pos_dist2; + } + } + + return best; +} + +zombiegetclosestroofopeningjumptag() +{ + pos1 = level.the_bus gettagorigin( "window_roof_1_jnt" ); + pos2 = level.the_bus gettagorigin( "window_roof_2_jnt" ); + closest = "window_roof_1_jnt"; + pos1_dist2 = distance2dsquared( self.origin, pos1 ); + pos2_dist2 = distance2dsquared( self.origin, pos2 ); + + if ( pos2_dist2 < pos1_dist2 ) + closest = "window_roof_2_jnt"; + + return closest; +} + +zombiegetclosestdoortag() +{ + pos1 = level.the_bus gettagorigin( "door_rear_jnt" ); + pos2 = level.the_bus gettagorigin( "door_front_jnt" ); + closest = "door_rear_jnt"; + pos1_dist2 = distance2dsquared( self.origin, pos1 ); + pos2_dist2 = distance2dsquared( self.origin, pos2 ); + + if ( pos2_dist2 < pos1_dist2 ) + closest = "door_front_jnt"; + + return closest; +} + +zombiekeepattackingthroughwindow( left_or_right ) +{ + while ( self zombietryattackthroughwindow( 0, left_or_right ) ) + { + tag_origin = self.attachent gettagorigin( self.attachtag ); + tag_angles = self.attachent gettagangles( self.attachtag ); + asd_name = "zm_zbarrier_window_idle"; + side = _getsideofbusopeningison( self.attachtag ); + + if ( side == "front" ) + asd_name = "zm_zbarrier_front_window_idle"; + + self animscripted( tag_origin, tag_angles, asd_name, "window_idle" + left_or_right ); + self zombieanimnotetrackthink( "bus_window_idle" ); + } +} + +zombietryattackthroughwindow( is_random, postfix ) +{ + attackplayers = self zombiegetplayerstoattack(); + + if ( attackplayers.size == 0 ) + return false; + + should_attack = 1; + + if ( is_random ) + { + rand = randomint( 100 ); + should_attack = rand < 80; + } + + if ( should_attack ) + { + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "attack", self.animname ); + tag_origin = self.attachent gettagorigin( self.attachtag ); + tag_angles = self.attachent gettagangles( self.attachtag ); + asd_name = "zm_zbarrier_window_attack"; + side = _getsideofbusopeningison( self.attachtag ); + + if ( isdefined( side ) && side == "front" ) + asd_name = "zm_zbarrier_front_window_attack"; + + self animscripted( tag_origin, tag_angles, asd_name, "window_attack" + postfix ); + self zombieanimnotetrackthink( "bus_window_attack" ); + return true; + } + + return false; +} + +zombiegetplayerstoattack() +{ + playerstoattack = []; + players = get_players(); + attackrange = 72; + attackrange *= attackrange; + attackheight = 37; + attackheight *= attackheight; + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( self.opening ) && isdefined( self.opening.rebuildtrigger ) ) + { + if ( players[i] istouching( self.opening.rebuildtrigger ) ) + playerstoattack[playerstoattack.size] = players[i]; + + continue; + } + + xydist = distance2dsquared( self.origin, players[i].origin ); + zdist = self.origin[2] - players[i].origin[2]; + zdist2 = zdist * zdist; + + if ( xydist <= attackrange && zdist2 <= attackheight ) + playerstoattack[playerstoattack.size] = players[i]; + } + + return playerstoattack; +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_power.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_power.gsc new file mode 100644 index 0000000..a38528b --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_power.gsc @@ -0,0 +1,559 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zm_transit_utility; +#include maps\mp\_visionset_mgr; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_audio; + +initializepower() +{ + level thread electricswitch(); + level thread powerevent(); + registerclientfield( "toplayer", "power_rumble", 1, 1, "int" ); + + if ( !isdefined( level.vsmgr_prio_visionset_zm_transit_power_high_low ) ) + level.vsmgr_prio_visionset_zm_transit_power_high_low = 20; + + maps\mp\_visionset_mgr::vsmgr_register_info( "visionset", "zm_power_high_low", 1, level.vsmgr_prio_visionset_zm_transit_power_high_low, 7, 1, ::vsmgr_lerp_power_up_down, 0 ); +} + +precache_models() +{ + +} + +elecswitchbuildable() +{ + lever = getent( "powerswitch_p6_zm_buildable_pswitch_lever", "targetname" ); + hand = getent( "powerswitch_p6_zm_buildable_pswitch_hand", "targetname" ); + hand linkto( lever ); + hand hide(); + getent( "powerswitch_p6_zm_buildable_pswitch_body", "targetname" ) hide(); + lever hide(); + wait_for_buildable( "powerswitch" ); +} + +electricswitch() +{ + flag_init( "switches_on" ); + level thread wait_for_power(); + trig = getent( "powerswitch_buildable_trigger_power", "targetname" ); + trig setinvisibletoall(); + elecswitchbuildable(); + master_switch = getent( "powerswitch_p6_zm_buildable_pswitch_lever", "targetname" ); + + while ( true ) + { + trig sethintstring( &"ZOMBIE_ELECTRIC_SWITCH" ); + trig setvisibletoall(); + + trig waittill( "trigger", user ); + + trig setinvisibletoall(); + master_switch rotateroll( -90, 0.3 ); + master_switch playsound( "zmb_switch_flip" ); + + master_switch waittill( "rotatedone" ); + + playfx( level._effect["switch_sparks"], getstruct( "elec_switch_fx", "targetname" ).origin ); + master_switch playsound( "zmb_turn_on" ); + level.power_event_in_progress = 1; + level thread power_event_rumble_and_quake(); + flag_set( "switches_on" ); + clientnotify( "pwr" ); + level thread avogadro_show_vox( user ); + + level waittill( "power_event_complete" ); + + clientnotify( "pwr" ); + flag_set( "power_on" ); + level.power_event_in_progress = 0; + level thread bus_station_pa_vox(); + + if ( isdefined( user ) ) + { + user maps\mp\zombies\_zm_stats::increment_client_stat( "power_turnedon", 0 ); + user maps\mp\zombies\_zm_stats::increment_player_stat( "power_turnedon" ); + } + + trig sethintstring( &"ZOMBIE_ELECTRIC_SWITCH_OFF" ); + trig setvisibletoall(); + + trig waittill( "trigger", user ); + + trig setinvisibletoall(); + master_switch rotateroll( 90, 0.3 ); + master_switch playsound( "zmb_switch_flip" ); + + master_switch waittill( "rotatedone" ); + + level.power_event_in_progress = 1; + level thread power_event_rumble_and_quake(); + flag_clear( "switches_on" ); + + level waittill( "power_event_complete" ); + + clientnotify( "pwo" ); + flag_clear( "power_on" ); + level.power_event_in_progress = 0; + level.power_cycled = 1; + + if ( isdefined( user ) ) + { + user maps\mp\zombies\_zm_stats::increment_client_stat( "power_turnedoff", 0 ); + user maps\mp\zombies\_zm_stats::increment_player_stat( "power_turnedoff" ); + } + } +} + +vsmgr_lerp_power_up_down( player, opt_param_1, opt_param_2 ) +{ + self vsmgr_set_state_active( player, opt_param_1 ); +} + +power_event_vision_set_post_event() +{ + self endon( "end_vision_set_power" ); + level endon( "end_game" ); + self endon( "disconnect" ); + + if ( flag( "power_on" ) ) + return; + + level waittill( "power_event_complete" ); + + maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_power_high_low", self, 0 ); +} + +power_event_vision_set() +{ + self endon( "end_vision_set_power" ); + level endon( "end_game" ); + level endon( "power_event_complete" ); + self endon( "disconnect" ); + + if ( flag( "power_on" ) ) + return; + + duration = 2; + startgoal = 1; + endgoal = 0; + self power_event_vision_set_lerp( duration, startgoal, endgoal ); + + while ( true ) + { + if ( randomint( 100 ) > 50 ) + { + duration = randomintrange( 2, 6 ) / 5; + startgoal = endgoal; + + if ( startgoal > 0.6 ) + endgoal = randomfloatrange( 0.0, 0.5 ); + else + endgoal = 1; + + self power_event_vision_set_lerp( duration, startgoal, endgoal ); + } + else if ( randomint( 100 ) > 75 ) + { + for ( x = 2; x > 0; x-- ) + { + duration = 0.2; + startgoal = endgoal; + + if ( startgoal > 0.6 ) + endgoal = 0.0; + else + endgoal = 1.0; + + self power_event_vision_set_lerp( duration, startgoal, endgoal ); + } + } + else + { + duration = 0.4; + startgoal = endgoal; + + if ( startgoal > 0.6 ) + endgoal = randomfloatrange( 0.0, 0.5 ); + else + endgoal = randomfloatrange( 0.5, 1.0 ); + + self power_event_vision_set_lerp( duration, startgoal, endgoal ); + } + + wait 0.05; + } +} + +power_event_vision_set_lerp( duration, startgoal, endgoal ) +{ + self endon( "end_vision_set_power" ); + level endon( "end_game" ); + level endon( "power_event_complete" ); + self endon( "disconnect" ); + incs = int( duration / 0.05 ); + + if ( incs == 0 ) + incs = 1; + + incsgoal = ( endgoal - startgoal ) / incs; + currentgoal = startgoal; + + for ( i = 0; i < incs; i++ ) + { + currentgoal += incsgoal; + maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_power_high_low", self, currentgoal ); + wait 0.05; + } + + maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_power_high_low", self, endgoal ); +} + +power_event_rumble_and_quake( power_on ) +{ + level endon( "end_game" ); + + while ( isdefined( level.power_event_in_progress ) && level.power_event_in_progress ) + { + players = get_players(); + + foreach ( player in players ) + { + if ( !is_player_valid( player ) ) + continue; + + if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) || player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_pcr", 1 ) ) + { + if ( !( isdefined( player.power_rumble_active ) && player.power_rumble_active ) ) + player thread power_event_rumble_and_quake_player(); + + continue; + } + + if ( isdefined( player.power_rumble_active ) && player.power_rumble_active ) + { + player setclientfieldtoplayer( "power_rumble", 0 ); + player.power_rumble_active = 0; + } + } + + wait 1; + } + + players = get_players(); + + foreach ( player in players ) + { + player setclientfieldtoplayer( "power_rumble", 0 ); + player notify( "end_vision_set_power" ); + maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_power_high_low", player ); + } +} + +power_event_rumble_and_quake_player() +{ + self endon( "disconnect" ); + self.power_rumble_active = 1; + self setclientfieldtoplayer( "power_rumble", 1 ); + self thread power_event_vision_set(); + self thread power_event_vision_set_post_event(); + + while ( ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) || self maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_pcr", 1 ) ) && ( isdefined( level.power_event_in_progress ) && level.power_event_in_progress ) ) + wait 1; + + self.power_rumble_active = 0; + self notify( "end_vision_set_power" ); + self setclientfieldtoplayer( "power_rumble", 0 ); +} + +avogadroreleasefromchamberevent() +{ + exploder( 500 ); + level.zones["zone_prr"].is_spawning_allowed = 0; + level.zones["zone_pcr"].is_spawning_allowed = 0; + level thread killzombiesinpowerstation(); + + while ( !flag( "power_on" ) ) + { + waittime = randomfloatrange( 1.5, 4.5 ); + players = get_players(); + + foreach ( player in players ) + { + if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) ) + { + player setelectrified( waittime - 1.0 ); + player shellshock( "electrocution", waittime ); + wait 0.05; + } + } + + waittime += 1.5; + level waittill_notify_or_timeout( "power_on", waittime ); + } + + players = get_players(); + + foreach ( player in players ) + { + if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) ) + { + player setelectrified( 0.25 ); + player shellshock( "electrocution", 1.5 ); + wait 0.05; + } + } + + level.zones["zone_prr"].is_spawning_allowed = 1; + level.zones["zone_pcr"].is_spawning_allowed = 1; + stop_exploder( 500 ); +} + +killzombiesinpowerstation() +{ + level endon( "power_on" ); + radiussq = 122500; + + while ( true ) + { + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( !isdefined( zombie ) ) + continue; + + if ( isdefined( zombie.is_avogadro ) && zombie.is_avogadro ) + continue; + + if ( distancesquared( ( 11344, 7590, -729 ), zombie.origin ) < radiussq ) + continue; + + if ( isdefined( zombie ) && zombie maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) || isdefined( zombie.zone_name ) && zombie.zone_name == "zone_prr" ) + { + if ( !( isdefined( zombie.has_been_damaged_by_player ) && zombie.has_been_damaged_by_player ) ) + level.zombie_total++; + + zombie dodamage( zombie.health + 100, zombie.origin ); + wait( randomfloatrange( 0.05, 0.15 ) ); + } + } + + wait 1; + } +} + +wait_for_power() +{ + while ( true ) + { + flag_wait( "power_on" ); + maps\mp\zombies\_zm_perks::perk_unpause_all_perks(); + wait_network_frame(); + level setclientfield( "zombie_power_on", 1 ); + enable_morse_code(); + raisepowerplantgates(); + flag_waitopen( "power_on" ); + level setclientfield( "zombie_power_on", 0 ); + disable_morse_code(); + } +} + +raisepowerplantgates() +{ + gate1 = []; + gate2 = []; + gate1 = getentarray( "security_booth_gate", "targetname" ); + gate2 = getentarray( "security_booth_gate_2", "targetname" ); + + if ( isdefined( gate1 ) ) + { + for ( i = 0; i < gate1.size; i++ ) + gate1[i] thread raisegate( -90 ); + } + + if ( isdefined( gate2 ) ) + { + for ( i = 0; i < gate2.size; i++ ) + gate2[i] thread raisegate( 90 ); + } + + level.the_bus notify( "OnPowerOn" ); +} + +raisegate( degrees ) +{ + self rotatepitch( degrees, 4 ); +} + +powerevent() +{ + reactor_core_mover = getent( "core_mover", "targetname" ); + reactor_core_audio = spawn( "script_origin", reactor_core_mover.origin ); + + if ( !isdefined( reactor_core_mover ) ) + return; + + thread blockstairs(); + thread linkentitiestocoremover( reactor_core_mover ); + + while ( true ) + { + flag_wait( "switches_on" ); + thread dropreactordoors(); + thread raisereactordoors(); + power_event_time = 30; + reactor_core_mover playsound( "zmb_power_rise_start" ); + reactor_core_mover playloopsound( "zmb_power_rise_loop", 0.75 ); + reactor_core_mover thread coremove( power_event_time ); + + if ( isdefined( level.avogadro ) && isdefined( level.avogadro.state ) && level.avogadro.state == "chamber" ) + level thread avogadroreleasefromchamberevent(); + + wait( power_event_time ); + reactor_core_mover stoploopsound( 0.5 ); + reactor_core_audio playloopsound( "zmb_power_on_loop", 2 ); + reactor_core_mover playsound( "zmb_power_rise_stop" ); + level notify( "power_event_complete" ); + flag_waitopen( "switches_on" ); + thread dropreactordoors(); + thread raisereactordoors(); + playsoundatposition( "zmb_power_off_quad", ( 0, 0, 0 ) ); + reactor_core_mover playsound( "zmb_power_rise_start" ); + reactor_core_mover playloopsound( "zmb_power_rise_loop", 0.75 ); + reactor_core_mover thread coremove( power_event_time, 1 ); + wait( power_event_time ); + reactor_core_mover stoploopsound( 0.5 ); + reactor_core_audio stoploopsound( 0.5 ); + reactor_core_mover playsound( "zmb_power_rise_stop" ); + level notify( "power_event_complete" ); + } +} + +corerotate( time ) +{ + self rotateyaw( 180, time ); +} + +coremove( time, down ) +{ + if ( isdefined( down ) && down ) + self movez( -160, time ); + else + self movez( 160, time ); +} + +blockstairs() +{ + stairs_blocker = getent( "reactor_core_stairs_blocker", "targetname" ); + + if ( !isdefined( stairs_blocker ) ) + return; + + stairs_blocker movez( -128, 1.0 ); +} + +linkentitiestocoremover( reactor_core_mover ) +{ + core_entities = getentarray( "core_entity", "script_noteworthy" ); + + for ( i = 0; i < core_entities.size; i++ ) + { + next_ent = core_entities[i]; + + if ( next_ent.classname == "trigger_use_touch" ) + next_ent enablelinkto(); + + next_ent linkto( reactor_core_mover, "tag_origin" ); + } +} + +dropreactordoors() +{ + doors = getentarray( "reactor_core_door", "targetname" ); + + if ( doors.size == 0 ) + return; + + for ( i = 0; i < doors.size; i++ ) + { + next_door = doors[i]; + next_door movez( -128, 1.0 ); + next_door disconnectpaths(); + } +} + +raisereactordoors() +{ + level waittill( "power_event_complete" ); + + doors = getentarray( "reactor_core_door", "targetname" ); + + if ( doors.size == 0 ) + return; + + for ( i = 0; i < doors.size; i++ ) + { + next_door = doors[i]; + next_door movez( 128, 1.0 ); + next_door connectpaths(); + } +} + +avogadro_show_vox( user ) +{ + wait 1; + + if ( isdefined( user ) ) + user thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "power", "power_on" ); + + wait 8; + players = get_players(); + players = array_randomize( players ); + + foreach ( player in players ) + { + if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) || player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_pcr", 1 ) ) + { + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "power", "power_core" ); + break; + } + } + + wait 15; + players = get_players(); + players = array_randomize( players ); + + foreach ( player in players ) + { + if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) || player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_pcr", 1 ) ) + { + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "avogadro_reveal" ); + break; + } + } +} + +bus_station_pa_vox() +{ + level endon( "power_off" ); + + while ( true ) + { + level.station_pa_vox = array_randomize( level.station_pa_vox ); + + foreach ( line in level.station_pa_vox ) + { + playsoundatposition( line, ( -6848, 5056, 56 ) ); + wait( randomintrange( 12, 15 ) ); + } + + wait 1; + } +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_sq.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_sq.gsc new file mode 100644 index 0000000..cb3ce19 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_sq.gsc @@ -0,0 +1,1502 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_transit_utility; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_unitrigger; + +init() +{ + if ( level.createfx_enabled ) + return; + + if ( isdefined( level.gamedifficulty ) && level.gamedifficulty == 0 ) + { + level thread sq_easy_cleanup(); + return; + } + + level.sq_volume = getent( "sq_common_area", "targetname" ); + level.sq_clip = getent( "sq_common_clip", "targetname" ); + register_map_navcard( "navcard_held_zm_transit", "navcard_held_zm_buried" ); + + if ( isdefined( level.sq_clip ) ) + { + level.sq_clip connectpaths(); + level.sq_clip trigger_off(); + } + + maps\mp\zombies\_zm_spawner::register_zombie_death_event_callback( ::sq_zombie_death_event_response ); + declare_sidequest( "sq", ::init_sidequest, ::sidequest_logic, ::complete_sidequest, ::generic_stage_start, ::generic_stage_complete ); + init_sidequest_vo(); + precache_sidequest_assets(); + level thread survivor_vox(); + level thread avogadro_is_near_tower(); + level thread avogadro_far_from_tower(); + level thread avogadro_stab_watch(); + level thread init_navcard(); + level thread init_navcomputer(); + level.buildable_built_custom_func = ::builable_built_custom_func; + level thread richtofen_sidequest_power_state(); +} + +sq_easy_cleanup() +{ + computer_buildable_trig = getent( "sq_common_buildable_trigger", "targetname" ); + computer_buildable_trig delete(); + sq_buildables = getentarray( "buildable_sq_common", "targetname" ); + + foreach ( item in sq_buildables ) + item delete(); +} + +init_player_sidequest_stats() +{ + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sq_transit_started", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sq_transit_maxis_reset", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sq_transit_rich_reset", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sq_transit_rich_stage_1", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sq_transit_rich_stage_2", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sq_transit_rich_stage_3", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sq_transit_rich_complete", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sq_transit_maxis_stage_1", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sq_transit_maxis_stage_2", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sq_transit_maxis_stage_3", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sq_transit_maxis_complete", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sq_transit_last_completed", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "navcard_held_zm_transit", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "navcard_held_zm_highrise", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "navcard_held_zm_buried", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "navcard_applied_zm_transit", 0 ); +} + +init_sidequest_vo() +{ + level.power_station_zones = []; + level.power_station_zones[level.power_station_zones.size] = "zone_trans_6"; + level.power_station_zones[level.power_station_zones.size] = "zone_amb_cornfield"; + level.power_station_zones[level.power_station_zones.size] = "zone_trans_7"; + level.power_station_zones[level.power_station_zones.size] = "zone_pow_ext1"; + level.power_station_zones[level.power_station_zones.size] = "zone_prr"; + level.power_station_zones[level.power_station_zones.size] = "zone_pcr"; + level.power_station_zones[level.power_station_zones.size] = "zone_pow_warehouse"; +} + +init_sidequest() +{ + players = get_players(); +} + +start_transit_sidequest() +{ + if ( level.gamedifficulty == 0 ) + return; + + sidequest_start( "sq" ); +} + +sidequest_logic() +{ + level thread sidequest_main(); + wait_for_buildable( "sq_common" ); + + if ( !( isdefined( level.navcomputer_spawned ) && level.navcomputer_spawned ) ) + update_sidequest_stats( "sq_transit_started" ); + + level thread navcomputer_waitfor_navcard(); + + if ( flag( "power_on" ) ) + level thread richtofensay( "vox_zmba_sidequest_jet_terminal_0" ); + + hint_said = 0; + + while ( !hint_said ) + { + level waittill( "maxi_terminal_vox" ); + + if ( flag( "power_on" ) ) + hint_said = 1; + + wait 0.05; + } + + maxissay( "vox_maxi_turbine_terminal_0", ( 11360, 8489, -576 ) ); +} + +complete_sidequest() +{ + +} + +sidequest_main() +{ + sidequest_init_tracker(); + flag_wait( "start_zombie_round_logic" ); + level.maxcompleted = 0; + level.richcompleted = 0; + players = get_players(); + + foreach ( player in players ) + { + player.transit_sq_started = 1; + lastcompleted = player maps\mp\zombies\_zm_stats::get_global_stat( "sq_transit_last_completed" ); + + if ( lastcompleted == 1 ) + { + level.richcompleted = 1; + continue; + } + + if ( lastcompleted == 2 ) + level.maxcompleted = 1; + } + + if ( level.richcompleted ) + { + clientnotify( "sqrc" ); + wait 1; + } + + if ( level.maxcompleted ) + { + clientnotify( "sqmc" ); + wait 1; + } + + if ( level.richcompleted && level.maxcompleted ) + { + clientnotify( "sqkl" ); + return; + } + + while ( true ) + { + level thread maxis_sidequest(); + flag_wait( "power_on" ); + + if ( !( isdefined( level.maxcompleted ) && level.maxcompleted ) ) + update_sidequest_stats( "sq_transit_maxis_reset" ); + + if ( !( isdefined( level.maxis_sq_intro_said ) && level.maxis_sq_intro_said ) && !( isdefined( level.maxcompleted ) && level.maxcompleted ) ) + { + wait 2; + level.maxis_sq_intro_said = 1; + level thread maxissay( "vox_maxi_power_on_0", ( 12072, 8496, -704 ), undefined, undefined, 1 ); + } + + level thread richtofen_sidequest(); + flag_waitopen( "power_on" ); + + if ( !( isdefined( level.richcompleted ) && level.richcompleted ) ) + update_sidequest_stats( "sq_transit_rich_reset" ); + } +} + +sidequest_init_tracker() +{ + level.sq_progress = []; + level.sq_progress = []; + level.sq_progress["maxis"] = []; + level.sq_progress["maxis"]["A_turbine_1"] = 0; + level.sq_progress["maxis"]["A_turbine_2"] = 0; + level.sq_progress["maxis"]["A_complete"] = 0; + level.sq_progress["maxis"]["B_complete"] = 0; + level.sq_progress["maxis"]["C_turbine_1"] = 0; + level.sq_progress["maxis"]["C_screecher_1"] = 0; + level.sq_progress["maxis"]["C_turbine_2"] = 0; + level.sq_progress["maxis"]["C_screecher_2"] = 0; + level.sq_progress["maxis"]["C_complete"] = 0; + level.sq_progress["maxis"]["FINISHED"] = 0; + level.sq_progress["rich"] = []; + level.sq_progress["rich"]["A_jetgun_built"] = 0; + level.sq_progress["rich"]["A_jetgun_tower"] = 0; + level.sq_progress["rich"]["A_complete"] = 0; + level.sq_progress["rich"]["B_zombies_tower"] = 0; + level.sq_progress["rich"]["B_complete"] = 0; + level.sq_progress["rich"]["C_screecher_light"] = 0; + level.sq_progress["rich"]["C_complete"] = 0; + level.sq_progress["rich"]["FINISHED"] = 0; +/# + if ( getdvarint( _hash_113D490F ) > 0 ) + level thread sidequest_debug_tracker(); +#/ +} + +sidequest_debug_tracker() +{ +/# + arraymainkeys = getarraykeys( level.sq_progress ); + index = 0; + + for ( x = 0; x < arraymainkeys.size; x++ ) + { + arraysubkeys = getarraykeys( level.sq_progress[arraymainkeys[x]] ); + + foreach ( key in arraysubkeys ) + { + hudelem = newhudelem(); + hudelem.alignx = "left"; + hudelem.location = 0; + hudelem.foreground = 1; + hudelem.fontscale = 1.1; + hudelem.sort = 20 - index; + hudelem.alpha = 1; + hudelem.x = 0; + hudelem.y = 60 + index * 15; + hudelem thread sidequest_debug_tracker_update( arraymainkeys[x], key ); + index++; + } + } +#/ +} + +sidequest_debug_tracker_update( mainkey, subkey ) +{ +/# + while ( true ) + { + value = level.sq_progress[mainkey][subkey]; + str = mainkey + " -- " + subkey + ": "; + + if ( isdefined( value ) && !isint( value ) && isdefined( value.classname ) ) + self settext( str + "[X]" ); + else if ( isdefined( value ) ) + { + if ( !isint( value ) && !isdefined( value.classname ) && isdefined( value.targetname ) && value.targetname == "screecher_escape" ) + self settext( str + "[X]" ); + else + self settext( str + value ); + } + else + self settext( str + "0" ); + + wait 1; + } +#/ +} + +generic_stage_start() +{ + level._stage_active = 1; +} + +generic_stage_complete() +{ + level._stage_active = 0; +} + +maxis_sidequest() +{ + level endon( "power_on" ); + + if ( flag( "power_on" ) || isdefined( level.maxcompleted ) && level.maxcompleted ) + return; + + update_sidequest_stats( "sq_transit_maxis_stage_1" ); + level thread maxis_sidequest_a(); + level thread maxis_sidequest_b(); + level thread maxis_sidequest_c(); + level thread avogadro_stunned_vo(); +} + +turbine_power_watcher( player ) +{ + level endon( "end_avogadro_turbines" ); + self endon( "death" ); + self.powered = undefined; + turbine_failed_vo = undefined; + + while ( isdefined( self ) ) + { + wait 2; + + if ( is_true( player.turbine_power_is_on ) && !is_true( player.turbine_emped ) ) + self.powered = 1; + else if ( is_true( player.turbine_emped ) || !is_true( player.turbine_power_is_on ) ) + { + wait 2; + self.powered = 0; + + if ( !isdefined( turbine_failed_vo ) ) + { + level thread maxissay( "vox_maxi_turbines_out_0", self.origin ); + turbine_failed_vo = 1; + } + } + } +} + +maxis_sidequest_a() +{ + level endon( "power_on" ); + level.sq_progress["maxis"]["A_turbine_1"] = undefined; + level.sq_progress["maxis"]["A_turbine_2"] = undefined; + + if ( !( isdefined( level.sq_progress["maxis"]["B_complete"] ) && level.sq_progress["maxis"]["B_complete"] ) ) + level.sq_progress["maxis"]["A_complete"] = 0; + + while ( true ) + { + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( player.buildableturbine ) && player.buildableturbine istouching( level.sq_volume ) ) + { + level notify( "maxi_terminal_vox" ); + player.buildableturbine thread turbine_watch_cleanup(); + + if ( !isdefined( level.sq_progress["maxis"]["A_turbine_1"] ) ) + { + level.sq_progress["maxis"]["A_turbine_1"] = player.buildableturbine; + level.sq_progress["maxis"]["A_turbine_1"] thread turbine_power_watcher( player ); + continue; + } + + if ( !isdefined( level.sq_progress["maxis"]["A_turbine_2"] ) ) + { + level.sq_progress["maxis"]["A_turbine_2"] = player.buildableturbine; + level.sq_progress["maxis"]["A_turbine_2"] thread turbine_power_watcher( player ); + } + } + } + + if ( get_how_many_progressed_from( "maxis", "A_turbine_1", "A_turbine_2" ) == 1 ) + level thread maxissay( "vox_maxi_turbine_1tower_0", ( 7737, -416, -142 ) ); + + if ( get_how_many_progressed_from( "maxis", "A_turbine_1", "A_turbine_2" ) == 2 ) + { + if ( avogadro_at_tower() ) + level thread maxissay( "vox_maxi_turbine_2tower_avo_0", ( 7737, -416, -142 ) ); + else + level thread maxissay( "vox_maxi_turbine_2tower_0", ( 7737, -416, -142 ) ); + + update_sidequest_stats( "sq_transit_maxis_stage_2" ); + level thread maxis_sidequest_complete_check( "A_complete" ); + } + + level waittill_either( "turbine_deployed", "equip_turbine_zm_cleaned_up" ); + + if ( !level.sq_progress["maxis"]["B_complete"] ) + level.sq_progress["maxis"]["A_complete"] = 0; + else + break; + } +} + +maxis_sidequest_b() +{ + level endon( "power_on" ); + + while ( true ) + { + level waittill( "stun_avogadro", avogadro ); + + if ( isdefined( level.sq_progress["maxis"]["A_turbine_1"] ) && is_true( level.sq_progress["maxis"]["A_turbine_1"].powered ) && ( isdefined( level.sq_progress["maxis"]["A_turbine_2"] ) && is_true( level.sq_progress["maxis"]["A_turbine_2"].powered ) ) ) + { + if ( isdefined( avogadro ) && avogadro istouching( level.sq_volume ) ) + { + level notify( "end_avogadro_turbines" ); + break; + } + } + } + + level notify( "maxis_stage_b" ); + level thread maxissay( "vox_maxi_avogadro_emp_0", ( 7737, -416, -142 ) ); + update_sidequest_stats( "sq_transit_maxis_stage_3" ); + player = get_players(); + player[0] setclientfield( "sq_tower_sparks", 1 ); + player[0] setclientfield( "screecher_maxis_lights", 1 ); + level thread maxis_sidequest_complete_check( "B_complete" ); +} + +maxis_sidequest_c() +{ + flag_wait( "power_on" ); + flag_waitopen( "power_on" ); + level endon( "power_on" ); + level.sq_progress["maxis"]["C_turbine_1"] = undefined; + level.sq_progress["maxis"]["C_turbine_2"] = undefined; + level.sq_progress["maxis"]["C_screecher_1"] = undefined; + level.sq_progress["maxis"]["C_screecher_2"] = undefined; + level.sq_progress["maxis"]["C_complete"] = 0; + turbine_1_talked = 0; + turbine_2_talked = 0; + screech_zones = getstructarray( "screecher_escape", "targetname" ); + + while ( true ) + { + if ( !isdefined( level.sq_progress["maxis"]["C_turbine_1"] ) ) + level.sq_progress["maxis"]["C_screecher_1"] = undefined; + + if ( !isdefined( level.sq_progress["maxis"]["C_turbine_2"] ) ) + level.sq_progress["maxis"]["C_screecher_2"] = undefined; + + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( player.buildableturbine ) ) + { + for ( x = 0; x < screech_zones.size; x++ ) + { + zone = screech_zones[x]; + + if ( distancesquared( player.buildableturbine.origin, zone.origin ) < zone.radius * zone.radius ) + { + player.buildableturbine thread turbine_watch_cleanup(); + + if ( !isdefined( level.sq_progress["maxis"]["C_turbine_1"] ) ) + { + if ( !isdefined( level.sq_progress["maxis"]["C_screecher_2"] ) || zone != level.sq_progress["maxis"]["C_screecher_2"] ) + { + level.sq_progress["maxis"]["C_turbine_1"] = player.buildableturbine; + level.sq_progress["maxis"]["C_screecher_1"] = zone; + } + + continue; + } + + if ( !isdefined( level.sq_progress["maxis"]["C_turbine_2"] ) ) + { + if ( !isdefined( level.sq_progress["maxis"]["C_screecher_1"] ) || zone != level.sq_progress["maxis"]["C_screecher_1"] ) + { + level.sq_progress["maxis"]["C_turbine_2"] = player.buildableturbine; + level.sq_progress["maxis"]["C_screecher_2"] = zone; + } + } + } + } + } + } + + if ( get_how_many_progressed_from( "maxis", "C_turbine_1", "C_turbine_2" ) == 1 ) + { + zone = undefined; + + if ( isdefined( level.sq_progress["maxis"]["C_turbine_1"] ) ) + zone = level.sq_progress["maxis"]["C_screecher_1"]; + else + zone = level.sq_progress["maxis"]["C_screecher_2"]; + + if ( isdefined( zone ) && !turbine_1_talked ) + { + turbine_1_talked = 1; + level thread maxissay( "vox_maxi_turbine_1light_0", zone.origin ); + } + } + + if ( get_how_many_progressed_from( "maxis", "C_turbine_1", "C_turbine_2" ) == 2 ) + { + zone = undefined; + + if ( isdefined( level.sq_progress["maxis"]["C_turbine_1"] ) ) + zone = level.sq_progress["maxis"]["C_screecher_1"]; + else + zone = level.sq_progress["maxis"]["C_screecher_2"]; + + if ( isdefined( zone ) ) + { + if ( level.sq_progress["maxis"]["B_complete"] && level.sq_progress["maxis"]["A_complete"] ) + { + if ( !turbine_2_talked ) + { + level thread maxissay( "vox_maxi_turbine_2light_on_0", zone.origin ); + turbine_2_talked = 1; + } + + player = get_players(); + player[0] setclientfield( "screecher_maxis_lights", 0 ); + level maxis_sidequest_complete_check( "C_complete" ); + return; + } + else + level thread maxissay( "vox_maxi_turbine_2light_off_0", zone.origin ); + } + } + + level waittill_either( "turbine_deployed", "equip_turbine_zm_cleaned_up" ); + level.sq_progress["maxis"]["C_complete"] = 0; + } +} + +maxis_sidequest_complete_check( nowcomplete ) +{ + level.sq_progress["maxis"][nowcomplete] = 1; + + if ( level.sq_progress["maxis"]["A_complete"] && level.sq_progress["maxis"]["B_complete"] && level.sq_progress["maxis"]["C_complete"] ) + level maxis_sidequest_complete(); +} + +maxis_sidequest_complete() +{ + turbinescriptnoteworthy1 = undefined; + turbinescriptnoteworthy2 = undefined; + + if ( isdefined( level.sq_progress["maxis"]["C_screecher_1"] ) && isdefined( level.sq_progress["maxis"]["C_screecher_1"].script_noteworthy ) ) + turbinescriptnoteworthy1 = level.sq_progress["maxis"]["C_screecher_1"].script_noteworthy; + + if ( isdefined( level.sq_progress["maxis"]["C_screecher_2"] ) && isdefined( level.sq_progress["maxis"]["C_screecher_2"].script_noteworthy ) ) + turbinescriptnoteworthy2 = level.sq_progress["maxis"]["C_screecher_2"].script_noteworthy; + + update_sidequest_stats( "sq_transit_maxis_complete" ); + level sidequest_complete( "maxis" ); + level.sq_progress["maxis"]["FINISHED"] = 1; + level.maxcompleted = 1; + clientnotify( "sq_kfx" ); + + if ( isdefined( level.richcompleted ) && level.richcompleted ) + level clientnotify( "sq_krt" ); + + wait 1; + clientnotify( "sqm" ); + wait 1; + level set_screecher_zone_origin( turbinescriptnoteworthy1 ); + wait 1; + clientnotify( "sq_max" ); + wait 1; + level set_screecher_zone_origin( turbinescriptnoteworthy2 ); + wait 1; + clientnotify( "sq_max" ); + level thread droppowerup( "maxis" ); +} + +richtofen_sidequest() +{ + level endon( "power_turned_off" ); + + if ( !flag( "power_on" ) || isdefined( level.richcompleted ) && level.richcompleted ) + return; + + if ( !( isdefined( level.richtofen_sq_intro_said ) && level.richtofen_sq_intro_said ) ) + level thread wait_for_richtoffen_intro(); + + update_sidequest_stats( "sq_transit_rich_stage_1" ); + level thread richtofen_sidequest_a(); + level thread richtofen_sidequest_b(); + level thread richtofen_sidequest_c(); +} + +richtofen_sidequest_power_state() +{ + flag_wait( "power_on" ); + + while ( true ) + { + flag_waitopen( "power_on" ); + level notify( "power_turned_off" ); + level notify( "power_off" ); + level thread maxissay( "vox_maxi_power_off_0", ( 12072, 8496, -704 ), undefined, undefined, 1 ); + wait 7; + level thread richtofensay( "vox_zmba_sidequest_power_off_0", undefined, 1, 15 ); + flag_wait( "power_on" ); + level thread richtofensay( "vox_zmba_sidequest_emp_off_0", undefined, 1, 15 ); + wait 7; + level thread maxissay( "vox_maxi_emp_off_0", ( 12072, 8496, -704 ), undefined, undefined, 1 ); + } +} + +richtofen_sidequest_a() +{ + level endon( "power_off" ); + level.sq_progress["rich"]["A_jetgun_built"] = 0; + level.sq_progress["rich"]["A_jetgun_tower"] = 0; + level.sq_progress["rich"]["A_complete"] = 0; + ric_fail_out = undefined; + ric_fail_heat = undefined; + + if ( !( isdefined( level.buildables_built["jetgun_zm"] ) && level.buildables_built["jetgun_zm"] ) ) + wait_for_buildable( "jetgun_zm" ); + + level.sq_progress["rich"]["A_jetgun_built"] = 1; + + while ( true ) + { + level.sq_volume waittill( "trigger", who ); + + if ( isplayer( who ) && isalive( who ) && who getcurrentweapon() == "jetgun_zm" && ( !isdefined( who.jetgun_heatval ) || who.jetgun_heatval < 1 ) ) + { + who thread left_sq_area_watcher( level.sq_volume ); + notifystring = who waittill_any_return( "disconnect", "weapon_change", "death", "player_downed", "jetgun_overheated", "left_sg_area" ); + + if ( notifystring == "jetgun_overheated" && isdefined( who ) && who istouching( level.sq_volume ) ) + { + self.checking_jetgun_fire = 0; + break; + } + else + { + if ( !isdefined( ric_fail_out ) ) + { + ric_fail_out = 1; + level thread richtofensay( "vox_zmba_sidequest_jet_low_0", undefined, 0, 10 ); + } + + self.checking_jetgun_fire = 0; + } + } + else if ( isplayer( who ) && isalive( who ) && who getcurrentweapon() == "jetgun_zm" && ( isdefined( who.jetgun_heatval ) && who.jetgun_heatval > 1 ) ) + { + if ( !isdefined( ric_fail_heat ) ) + { + ric_fail_heat = 1; + level thread richtofensay( "vox_zmba_sidequest_jet_low_0", undefined, 0, 10 ); + } + } + } + + level thread richtofensay( "vox_zmba_sidequest_jet_empty_0", undefined, 0, 16 ); + player = get_players(); + player[0] setclientfield( "screecher_sq_lights", 1 ); + update_sidequest_stats( "sq_transit_rich_stage_2" ); + level thread richtofen_sidequest_complete_check( "A_complete" ); + level.sq_progress["rich"]["A_jetgun_tower"] = 1; +} + +left_sq_area_watcher( volume ) +{ + while ( self istouching( volume ) ) + wait 0.5; + + self notify( "left_sg_area" ); +} + +richtofen_sidequest_b() +{ + level endon( "power_off" ); + level.sq_progress["rich"]["B_zombies_tower"] = 25; + level thread lure_zombies_to_tower_hint(); + + while ( level.sq_progress["rich"]["B_zombies_tower"] > 0 ) + { + level waittill( "zombie_died_in_sq_volume" ); + + if ( !level.sq_progress["rich"]["A_complete"] ) + { + level thread richtofensay( "vox_zmba_sidequest_blow_mag_0" ); + continue; + } + + level.sq_progress["rich"]["B_zombies_tower"]--; + + if ( level.sq_progress["rich"]["B_zombies_tower"] > 0 ) + { + + } + } + + level thread richtofensay( "vox_zmba_sidequest_blow_nomag_0" ); + update_sidequest_stats( "sq_transit_rich_stage_3" ); + level notify( "sq_stage_3complete" ); + level thread richtofen_sidequest_complete_check( "B_complete" ); +} + +lure_zombies_to_tower_hint() +{ + level endon( "power_on" ); + level endon( "sq_stage_3complete" ); + zombie_train = 0; + lure_distance = 722500; + + while ( !zombie_train ) + { + zombies = getaiarray(); + counter = 0; + + foreach ( zombie in zombies ) + { + if ( distancesquared( zombie.origin, level.sq_volume.origin ) < lure_distance ) + counter++; + } + + if ( counter >= 5 ) + zombie_train = 1; + + wait 3; + } + + level thread richtofensay( "vox_zmba_sidequest_zom_lure_0" ); +} + +richtofen_sidequest_c() +{ + level endon( "power_off" ); + level endon( "richtofen_sq_complete" ); + screech_zones = getstructarray( "screecher_escape", "targetname" ); + level thread screecher_light_hint(); + level thread screecher_light_on_sq(); + level.sq_richtofen_c_screecher_lights = []; + + while ( true ) + { + level waittill( "safety_light_power_off", screecher_zone ); + + if ( !level.sq_progress["rich"]["A_complete"] || !level.sq_progress["rich"]["B_complete"] ) + { + level thread richtofensay( "vox_zmba_sidequest_emp_nomag_0" ); + continue; + } + + level.sq_richtofen_c_screecher_lights[level.sq_richtofen_c_screecher_lights.size] = screecher_zone; + level.sq_progress["rich"]["C_screecher_light"]++; + + if ( level.sq_progress["rich"]["C_screecher_light"] >= 4 ) + break; + + if ( !( isdefined( level.checking_for_richtofen_c_failure ) && level.checking_for_richtofen_c_failure ) ) + level thread check_for_richtofen_c_failure(); + } + + level thread richtofensay( "vox_zmba_sidequest_4emp_mag_0" ); + level notify( "richtofen_c_complete" ); + player = get_players(); + player[0] setclientfield( "screecher_sq_lights", 0 ); + level thread richtofen_sidequest_complete_check( "C_complete" ); +} + +check_for_richtofen_c_failure() +{ + if ( !( isdefined( level.checking_for_richtofen_c_failure ) && level.checking_for_richtofen_c_failure ) ) + { + level.checking_for_richtofen_c_failure = 1; + wait 5; + + if ( level.sq_progress["rich"]["C_screecher_light"] < 4 ) + { + level thread richtofensay( "vox_zmba_sidequest_3emp_mag_0" ); + level.sq_progress["rich"]["C_screecher_light"] = 0; + } + + level.checking_for_richtofen_c_failure = 0; + } +} + +screecher_light_on_sq() +{ + while ( true ) + { + level waittill( "safety_light_power_on", screecher_zone ); + + arrayremovevalue( level.sq_richtofen_c_screecher_lights, screecher_zone ); + + if ( level.sq_progress["rich"]["C_screecher_light"] > 0 ) + level.sq_progress["rich"]["C_screecher_light"]--; + } +} + +richtofen_sidequest_complete_check( nowcomplete ) +{ + level.sq_progress["rich"][nowcomplete] = 1; + + if ( level.sq_progress["rich"]["A_complete"] && level.sq_progress["rich"]["B_complete"] && level.sq_progress["rich"]["C_complete"] ) + level thread richtofen_sidequest_complete(); +} + +richtofen_sidequest_complete() +{ + update_sidequest_stats( "sq_transit_rich_complete" ); + level thread sidequest_complete( "richtofen" ); + level.sq_progress["rich"]["FINISHED"] = 1; + level.richcompleted = 1; + clientnotify( "sq_kfx" ); + + if ( isdefined( level.maxcompleted ) && level.maxcompleted ) + level clientnotify( "sq_kmt" ); + + wait 1; + clientnotify( "sqr" ); + + foreach ( zone in level.sq_richtofen_c_screecher_lights ) + { + level set_screecher_zone_origin( zone.target.script_noteworthy ); + wait 1; + clientnotify( "sq_rich" ); + wait 1; + } + + level thread droppowerup( "richtofen" ); +} + +set_screecher_zone_origin( script_noteworthy ) +{ + if ( !isdefined( script_noteworthy ) ) + return; + + switch ( script_noteworthy ) + { + case "cornfield": + clientnotify( "zsc" ); + break; + case "diner": + clientnotify( "zsd" ); + break; + case "forest": + clientnotify( "zsf" ); + break; + case "busdepot": + clientnotify( "zsb" ); + break; + case "bridgedepot": + clientnotify( "zsbd" ); + break; + case "townbridge": + clientnotify( "zsbt" ); + break; + case "huntershack": + clientnotify( "zsh" ); + break; + case "powerstation": + clientnotify( "zsp" ); + break; + } +} + +turbine_watch_cleanup() +{ + if ( isdefined( self.turbine_watch_cleanup ) && self.turbine_watch_cleanup ) + return; + + self.turbine_watch_cleanup = 1; + + self waittill( "death" ); + + level notify( "equip_turbine_zm_cleaned_up" ); +} + +get_how_many_progressed_from( story, a, b ) +{ + if ( isdefined( level.sq_progress[story][a] ) && !isdefined( level.sq_progress[story][b] ) || !isdefined( level.sq_progress[story][a] ) && isdefined( level.sq_progress[story][b] ) ) + return 1; + else if ( isdefined( level.sq_progress[story][a] ) && isdefined( level.sq_progress[story][b] ) ) + return 2; + + return 0; +} + +sq_zombie_death_event_response() +{ + if ( distancesquared( self.origin, level.sq_volume.origin ) < 176400 && isdefined( self.damagemod ) ) + { + mod = self.damagemod; + + if ( mod == "MOD_GRENADE" || mod == "MOD_GRENADE_SPLASH" || mod == "MOD_EXPLOSIVE" || mod == "MOD_EXPLOSIVE_SPLASH" || mod == "MOD_PROJECTILE" || mod == "MOD_PROJECTILE_SPLASH" ) + level notify( "zombie_died_in_sq_volume" ); + } +} + +update_sidequest_stats( stat_name ) +{ + maxis_complete = 0; + rich_complete = 0; + started = 0; + + if ( stat_name == "sq_transit_maxis_complete" ) + maxis_complete = 1; + else if ( stat_name == "sq_transit_rich_complete" ) + rich_complete = 1; + + players = get_players(); + + foreach ( player in players ) + { + if ( stat_name == "sq_transit_started" ) + player.transit_sq_started = 1; + else if ( stat_name == "navcard_applied_zm_transit" ) + { + player maps\mp\zombies\_zm_stats::set_global_stat( level.navcard_needed, 0 ); + thread sq_refresh_player_navcard_hud(); + } + else if ( !( isdefined( player.transit_sq_started ) && player.transit_sq_started ) ) + continue; + + if ( rich_complete ) + { + player maps\mp\zombies\_zm_stats::set_global_stat( "sq_transit_last_completed", 1 ); + incrementcounter( "global_zm_total_rich_sq_complete_transit", 1 ); + } + else if ( maxis_complete ) + { + player maps\mp\zombies\_zm_stats::set_global_stat( "sq_transit_last_completed", 2 ); + incrementcounter( "global_zm_total_max_sq_complete_transit", 1 ); + } + + player maps\mp\zombies\_zm_stats::increment_client_stat( stat_name, 0 ); + } + + if ( rich_complete || maxis_complete ) + level notify( "transit_sidequest_achieved" ); +} + +richtofensay( vox_line, intro, ignore_power_state, time ) +{ + level endon( "end_game" ); + level endon( "intermission" ); + + if ( isdefined( level.intermission ) && level.intermission ) + return; + + if ( isdefined( level.richcompleted ) && level.richcompleted ) + return; + + level endon( "richtofen_c_complete" ); + + if ( !isdefined( time ) ) + time = 45; + + while ( isdefined( level.richtofen_talking_to_samuel ) && level.richtofen_talking_to_samuel || !( isdefined( level.richtofen_sq_intro_said ) && level.richtofen_sq_intro_said ) ) + wait 1; + + if ( isdefined( level.rich_sq_player ) && is_player_valid( level.rich_sq_player ) ) + { +/# + iprintlnbold( "Richtoffen Says: " + vox_line ); +#/ + if ( ( !flag( "power_on" ) || !flag( "switches_on" ) ) && !( isdefined( ignore_power_state ) && ignore_power_state ) ) + return; + + level.rich_sq_player playsoundtoplayer( vox_line, level.rich_sq_player ); + + if ( !( isdefined( level.richtofen_talking_to_samuel ) && level.richtofen_talking_to_samuel ) ) + level thread richtofen_talking( time ); + } +} + +richtofen_talking( time ) +{ + level.rich_sq_player.dontspeak = 1; + level.richtofen_talking_to_samuel = 1; + wait( time ); + level.richtofen_talking_to_samuel = 0; + + if ( isdefined( level.rich_sq_player ) ) + level.rich_sq_player.dontspeak = 0; +} + +maxissay( line, org, playonent, playonenttag, ignore_power_state ) +{ + level endon( "end_game" ); + level endon( "intermission" ); + + if ( isdefined( level.intermission ) && level.intermission ) + return; + + if ( isdefined( level.maxcompleted ) && level.maxcompleted ) + return; + + if ( ( flag( "power_on" ) || flag( "switches_on" ) ) && !( isdefined( ignore_power_state ) && ignore_power_state ) ) + return; + + while ( isdefined( level.maxis_talking ) && level.maxis_talking ) + wait 0.05; + + level.maxis_talking = 1; +/# + iprintlnbold( "Maxis Says: " + line ); +#/ + if ( isdefined( playonent ) ) + playonent playsoundontag( line, playonenttag ); + else + playsoundatposition( line, org ); + + wait 10; + level.maxis_talking = 0; +} + +wait_for_richtoffen_intro() +{ + level endon( "intermission" ); + power_occupied = 1; + + while ( power_occupied ) + { + inzone = 0; + + foreach ( zone in level.power_station_zones ) + { + if ( isdefined( maps\mp\zombies\_zm_zonemgr::player_in_zone( zone ) ) && maps\mp\zombies\_zm_zonemgr::player_in_zone( zone ) ) + inzone = 1; + } + + if ( !inzone ) + power_occupied = 0; + + wait 0.1; + } + + wait 5; + + if ( !isdefined( level.rich_sq_player ) || !flag( "power_on" ) || !flag( "switches_on" ) ) + return; + + if ( isdefined( level.intermission ) && level.intermission ) + return; + + level.rich_sq_player playsoundtoplayer( "vox_zmba_sidequest_power_on_0", level.rich_sq_player ); + richtofen_talking( 45 ); + level.richtofen_sq_intro_said = 1; +} + +survivor_vox() +{ + initiated = 0; + + while ( !initiated ) + { + players = get_players(); + + foreach ( player in players ) + { + if ( distance2dsquared( player.origin, ( 8000, -6656, 160 ) ) < 1225 ) + { + if ( player usebuttonpressed() ) + { + playsoundatposition( "zmb_zombie_arc", ( 8000, -6656, 160 ) ); + start_time = gettime(); + end_time = start_time + 5000; + + while ( player usebuttonpressed() && distance2dsquared( player.origin, ( 8000, -6656, 160 ) ) < 1225 && is_player_valid( player ) ) + { + if ( gettime() > end_time ) + initiated = 1; + + wait 0.05; + } + + playsoundatposition( "zmb_buildable_piece_add", ( 8000, -6656, 160 ) ); + } + } + } + + wait 1; + } + + playsoundatposition( "zmb_weap_wall", ( 8000, -6656, 160 ) ); + i = -1; + + while ( true ) + { + players = get_players(); + + foreach ( player in players ) + { + if ( distance2dsquared( player.origin, ( 8000, -6656, 160 ) ) < 1225 ) + { + if ( player usebuttonpressed() && is_player_valid( player ) ) + { + if ( flag( "power_on" ) ) + { + if ( i == -1 || i > 4 ) + playsoundatposition( "vox_maxi_tv_distress_0", ( 8000, -6656, 160 ) ); + else if ( i < 4 ) + playsoundatposition( level.survivor_vox[i], ( 8000, -6656, 160 ) ); + + i++; + } + + wait 60; + } + } + } + + wait 1; + } +} + +builable_built_custom_func( buildable ) +{ + if ( buildable.buildable_name == "jetgun_zm" ) + { + if ( flag( "power_on" ) || flag( "switches_on" ) ) + { + level thread richtofensay( "vox_zmba_sidequest_jet_complete_0" ); + level.sq_jetgun_built = 1; + } + } +} + +screecher_light_hint() +{ + level endon( "power_off" ); + level endon( "richtofen_c_complete" ); + + while ( !level.sq_progress["rich"]["A_jetgun_tower"] ) + wait 1; + + screech_zones = getstructarray( "screecher_escape", "targetname" ); + dist = 122500; + + while ( true ) + { + count = 0; + players = get_players(); + + foreach ( player in players ) + { + foreach ( zone in screech_zones ) + { + if ( distancesquared( player.origin, zone.origin ) < dist ) + { + if ( player maps\mp\zombies\_zm_weapons::has_weapon_or_upgrade( "emp_grenade_zm" ) ) + count++; + } + } + } + + if ( count >= players.size ) + { + richtofensay( "vox_zmba_sidequest_near_light_0" ); + return; + } + + wait 2; + } +} + +maxi_near_corn_hint() +{ + level endon( "power_on" ); + say_hint = 0; + + while ( !say_hint ) + { + players = get_players(); + + foreach ( player in players ) + { + if ( !player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_amb_cornfield" ) ) + continue; + + if ( isdefined( player.buildableturbine ) && ( isdefined( player.buildableturbine.equipment_can_move ) && player.buildableturbine.equipment_can_move ) && ( isdefined( player.isonbus ) && player.isonbus ) ) + { + say_hint = 1; + continue; + } + + if ( isdefined( player.buildableturbine ) && ( isdefined( player.isonbus ) && player.isonbus ) ) + say_hint = 1; + } + + wait 2; + } + + level thread maxissay( "vox_maxi_near_corn_0", undefined, level.automaton, "J_neck" ); +} + +avogadro_far_from_tower() +{ + if ( isdefined( level.maxcompleted ) && level.maxcompleted ) + return; + + level waittill( "power_on" ); + + level endon( "power_on" ); + say_hint = 0; + + while ( !say_hint ) + { + players = get_players(); + + foreach ( player in players ) + { + if ( !( isdefined( player.isonbus ) && player.isonbus ) ) + continue; + + if ( !avogadro_near_tower() && player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_amb_cornfield" ) ) + say_hint = 1; + } + + wait 1; + } + + level thread maxissay( "vox_maxi_avogadro_far_0", undefined, level.automaton, "J_neck" ); +} + +avogadro_near_tower() +{ + if ( isdefined( level.avogadro ) && level.avogadro maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_amb_cornfield" ) ) + return true; + + return false; +} + +avogadro_stab_watch() +{ + if ( isdefined( level.maxcompleted ) && level.maxcompleted ) + return; + + level waittill( "avogadro_stabbed", avogadro ); + + if ( !flag( "power_on" ) ) + level thread maxissay( "vox_maxi_avogadro_stab_0", avogadro.origin ); +} + +avogadro_is_near_tower() +{ + if ( isdefined( level.maxcompleted ) && level.maxcompleted ) + return; + + level waittill( "power_on" ); + + level endon( "power_on" ); + say_hint = 0; + + while ( !say_hint ) + { + if ( avogadro_near_tower() ) + say_hint = 1; + + wait 1; + } + + level thread maxissay( "vox_maxi_avogadro_near_0", ( 7737, -416, -142 ) ); +} + +avogadro_at_tower() +{ + if ( isdefined( level.avogadro ) && level.avogadro istouching( level.sq_volume ) ) + return true; + + return false; +} + +droppowerup( story ) +{ + center_struct = getstruct( "sq_common_tower_fx", "targetname" ); + trace = bullettrace( center_struct.origin, center_struct.origin - vectorscale( ( 0, 0, 1 ), 999999.0 ), 0, undefined ); + poweruporigin = trace["position"] + vectorscale( ( 0, 0, 1 ), 25.0 ); + mintime = 240; + maxtime = 720; + + while ( true ) + { + trail = spawn( "script_model", center_struct.origin ); + trail setmodel( "tag_origin" ); + wait 0.5; + playfxontag( level._effect[story + "_sparks"], trail, "tag_origin" ); + trail moveto( poweruporigin, 10 ); + + trail waittill( "movedone" ); + + level thread droppoweruptemptation( story, poweruporigin ); + wait 1; + trail delete(); + wait( randomintrange( mintime, maxtime ) ); + } +} + +droppoweruptemptation( story, origin ) +{ + powerup = spawn( "script_model", origin ); + powerup endon( "powerup_grabbed" ); + powerup endon( "powerup_timedout" ); + temptation_array = array( "insta_kill", "nuke", "double_points", "carpenter" ); + temptation_index = 0; + first_time = 1; + rotation = 0; + temptation_array = array_randomize( temptation_array ); + + while ( isdefined( powerup ) ) + { + powerup maps\mp\zombies\_zm_powerups::powerup_setup( temptation_array[temptation_index] ); + + if ( first_time ) + { + powerup thread maps\mp\zombies\_zm_powerups::powerup_timeout(); + powerup thread maps\mp\zombies\_zm_powerups::powerup_wobble(); + powerup thread maps\mp\zombies\_zm_powerups::powerup_grab(); + first_time = 0; + } + + if ( rotation == 0 ) + { + wait 15.0; + rotation++; + } + else if ( rotation == 1 ) + { + wait 7.5; + rotation++; + } + else if ( rotation == 2 ) + { + wait 2.5; + rotation++; + } + else + { + wait 1.5; + rotation++; + } + + temptation_index++; + + if ( temptation_index >= temptation_array.size ) + temptation_index = 0; + } +} + +init_navcard() +{ + flag_wait( "start_zombie_round_logic" ); + spawn_card = 1; + players = get_players(); + + foreach ( player in players ) + { + has_card = does_player_have_map_navcard( player ); + + if ( has_card ) + { + player.navcard_grabbed = level.map_navcard; + spawn_card = 0; + } + } + + thread sq_refresh_player_navcard_hud(); + + if ( !spawn_card ) + return; + + model = "p6_zm_keycard"; + org = ( -6245, 5479.5, -55.35 ); + angles = ( 0, 0, 0 ); + maps\mp\zombies\_zm_utility::place_navcard( model, level.map_navcard, org, angles ); +} + +init_navcomputer() +{ + flag_wait( "start_zombie_round_logic" ); + spawn_navcomputer = 1; + players = get_players(); + + foreach ( player in players ) + { + built_comptuer = player maps\mp\zombies\_zm_stats::get_global_stat( "sq_transit_started" ); + + if ( !built_comptuer ) + { + spawn_navcomputer = 0; + break; + } + } + + if ( !spawn_navcomputer ) + return; + + level.navcomputer_spawned = 1; + get_players()[0] maps\mp\zombies\_zm_buildables::player_finish_buildable( level.sq_buildable.buildablezone ); + + if ( isdefined( level.sq_buildable ) && isdefined( level.sq_buildable.model ) ) + { + buildable = level.sq_buildable.buildablezone; + + for ( i = 0; i < buildable.pieces.size; i++ ) + { + if ( isdefined( buildable.pieces[i].model ) ) + { + buildable.pieces[i].model delete(); + maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( buildable.pieces[i].unitrigger ); + } + + if ( isdefined( buildable.pieces[i].part_name ) ) + { + buildable.stub.model notsolid(); + buildable.stub.model show(); + buildable.stub.model showpart( buildable.pieces[i].part_name ); + } + } + } + + level thread navcomputer_waitfor_navcard(); +} + +navcomputer_waitfor_navcard() +{ + computer_buildable_trig = getent( "sq_common_buildable_trigger", "targetname" ); + trig_pos = getstruct( "sq_common_key", "targetname" ); + navcomputer_use_trig = spawn( "trigger_radius_use", trig_pos.origin, 0, 48, 48 ); + navcomputer_use_trig setcursorhint( "HINT_NOICON" ); + navcomputer_use_trig sethintstring( &"ZOMBIE_NAVCARD_USE" ); + navcomputer_use_trig triggerignoreteam(); + + while ( true ) + { + navcomputer_use_trig waittill( "trigger", who ); + + if ( isplayer( who ) && is_player_valid( who ) ) + { + if ( does_player_have_correct_navcard( who ) ) + { + navcomputer_use_trig sethintstring( &"ZOMBIE_NAVCARD_SUCCESS" ); + who playsound( "zmb_sq_navcard_success" ); + update_sidequest_stats( "navcard_applied_zm_transit" ); + return; + } + else + { + navcomputer_use_trig sethintstring( &"ZOMBIE_NAVCARD_FAIL" ); + wait 1; + navcomputer_use_trig sethintstring( &"ZOMBIE_NAVCARD_USE" ); + } + } + } +} + +avogadro_stunned_vo() +{ + level endon( "maxis_stage_b" ); + + while ( true ) + { + level waittill( "stun_avogadro", avogadro ); + + if ( avogadro maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr" ) ) + { + level thread maxissay( "vox_maxi_avogadro_stab_0", ( 12072, 8496, -704 ) ); + return; + } + } +} + +sq_refresh_player_navcard_hud() +{ + if ( !isdefined( level.navcards ) ) + return; + + players = get_players(); + + foreach ( player in players ) + { + navcard_bits = 0; + + for ( i = 0; i < level.navcards.size; i++ ) + { + hasit = player maps\mp\zombies\_zm_stats::get_global_stat( level.navcards[i] ); + + if ( isdefined( player.navcard_grabbed ) && player.navcard_grabbed == level.navcards[i] ) + hasit = 1; + + if ( hasit ) + navcard_bits += ( 1 << i ); + } + + wait_network_frame(); + player setclientfield( "navcard_held", 0 ); + + if ( navcard_bits > 0 ) + { + wait_network_frame(); + player setclientfield( "navcard_held", navcard_bits ); + } + } +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_standard_farm.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_standard_farm.gsc new file mode 100644 index 0000000..9076525 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_standard_farm.gsc @@ -0,0 +1,88 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_race_utility; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_game_module; + +precache() +{ + +} + +farm_treasure_chest_init() +{ + chest1 = getstruct( "farm_chest", "script_noteworthy" ); + level.chests = []; + level.chests[level.chests.size] = chest1; + maps\mp\zombies\_zm_magicbox::treasure_chest_init( "farm_chest" ); +} + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "farm" ); + init_standard_farm(); + farm_treasure_chest_init(); + level.enemy_location_override_func = ::enemy_location_override; + flag_wait( "initial_blackscreen_passed" ); + level thread maps\mp\zombies\_zm_zonemgr::enable_zone( "zone_far_ext" ); + level thread maps\mp\zombies\_zm_zonemgr::enable_zone( "zone_brn" ); + maps\mp\zombies\_zm_game_module::turn_power_on_and_open_doors(); + flag_wait( "start_zombie_round_logic" ); + wait 1; + level notify( "revive_on" ); + wait_network_frame(); + level notify( "doubletap_on" ); + wait_network_frame(); + level notify( "juggernog_on" ); + wait_network_frame(); + level notify( "sleight_on" ); + wait_network_frame(); +} + +init_standard_farm() +{ + maps\mp\zombies\_zm_game_module::set_current_game_module( level.game_module_standard_index ); + ents = getentarray(); + + foreach ( ent in ents ) + { + if ( isdefined( ent.script_flag ) && ent.script_flag == "OnFarm_enter" ) + { + ent delete(); + continue; + } + + if ( isdefined( ent.script_parameters ) ) + { + tokens = strtok( ent.script_parameters, " " ); + remove = 0; + + foreach ( token in tokens ) + { + if ( token == "standard_remove" ) + remove = 1; + } + + if ( remove ) + ent delete(); + } + } +} + +enemy_location_override( zombie, enemy ) +{ + location = enemy.origin; + + if ( is_true( self.reroute ) ) + { + if ( isdefined( self.reroute_origin ) ) + location = self.reroute_origin; + } + + return location; +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_standard_station.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_standard_station.gsc new file mode 100644 index 0000000..9c4df0e --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_standard_station.gsc @@ -0,0 +1,56 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_race_utility; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_perks; + +precache() +{ + precachemodel( "zm_collision_transit_busdepot_survival" ); +} + +station_treasure_chest_init() +{ + chest1 = getstruct( "depot_chest", "script_noteworthy" ); + level.chests = []; + level.chests[level.chests.size] = chest1; + maps\mp\zombies\_zm_magicbox::treasure_chest_init( "depot_chest" ); +} + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "station" ); + station_treasure_chest_init(); + level.enemy_location_override_func = ::enemy_location_override; + collision = spawn( "script_model", ( -6896, 4744, 0 ), 1 ); + collision setmodel( "zm_collision_transit_busdepot_survival" ); + collision disconnectpaths(); + flag_wait( "initial_blackscreen_passed" ); + level thread maps\mp\zombies\_zm_perks::perk_machine_removal( "specialty_quickrevive", "p_glo_tools_chest_tall" ); + flag_set( "power_on" ); + level setclientfield( "zombie_power_on", 1 ); + zombie_doors = getentarray( "zombie_door", "targetname" ); + + foreach ( door in zombie_doors ) + { + if ( isdefined( door.script_noteworthy ) && door.script_noteworthy == "local_electric_door" ) + door trigger_off(); + } +} + +enemy_location_override( zombie, enemy ) +{ + location = enemy.origin; + + if ( is_true( self.reroute ) ) + { + if ( isdefined( self.reroute_origin ) ) + location = self.reroute_origin; + } + + return location; +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_standard_town.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_standard_town.gsc new file mode 100644 index 0000000..fbc9878 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_standard_town.gsc @@ -0,0 +1,66 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_race_utility; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zm_transit_utility; +#include maps\mp\zombies\_zm_game_module; + +precache() +{ + precachemodel( "zm_collision_transit_town_survival" ); +} + +town_treasure_chest_init() +{ + chest1 = getstruct( "town_chest", "script_noteworthy" ); + chest2 = getstruct( "town_chest_2", "script_noteworthy" ); + level.chests = []; + level.chests[level.chests.size] = chest1; + level.chests[level.chests.size] = chest2; + maps\mp\zombies\_zm_magicbox::treasure_chest_init( "town_chest" ); +} + +main() +{ + maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "town" ); + town_treasure_chest_init(); + level.enemy_location_override_func = ::enemy_location_override; + collision = spawn( "script_model", ( 1363, 471, 0 ), 1 ); + collision setmodel( "zm_collision_transit_town_survival" ); + collision disconnectpaths(); + flag_wait( "initial_blackscreen_passed" ); + level thread maps\mp\zm_transit_utility::solo_tombstone_removal(); + maps\mp\zombies\_zm_game_module::turn_power_on_and_open_doors(); + flag_wait( "start_zombie_round_logic" ); + wait 1; + level notify( "revive_on" ); + wait_network_frame(); + level notify( "doubletap_on" ); + wait_network_frame(); + level notify( "marathon_on" ); + wait_network_frame(); + level notify( "juggernog_on" ); + wait_network_frame(); + level notify( "sleight_on" ); + wait_network_frame(); + level notify( "tombstone_on" ); + wait_network_frame(); + level notify( "Pack_A_Punch_on" ); +} + +enemy_location_override( zombie, enemy ) +{ + location = enemy.origin; + + if ( is_true( self.reroute ) ) + { + if ( isdefined( self.reroute_origin ) ) + location = self.reroute_origin; + } + + return location; +} diff --git a/ZM/Maps/Tranzit/maps/mp/zm_transit_utility.gsc b/ZM/Maps/Tranzit/maps/mp/zm_transit_utility.gsc new file mode 100644 index 0000000..779f031 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zm_transit_utility.gsc @@ -0,0 +1,277 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\_compass; + +playercanafford( player, cost ) +{ + if ( !player usebuttonpressed() ) + return false; + + if ( player in_revive_trigger() ) + return false; + + if ( isdefined( cost ) ) + { + if ( player.score < cost ) + return false; + + player maps\mp\zombies\_zm_score::minus_to_player_score( cost ); + } + + return true; +} + +setinvisibletoall() +{ + players = get_players(); + + for ( playerindex = 0; playerindex < players.size; playerindex++ ) + self setinvisibletoplayer( players[playerindex] ); +} + +spawnandlinkfxtotag( effect, ent, tag ) +{ + fxent = spawn( "script_model", ent gettagorigin( tag ) ); + fxent setmodel( "tag_origin" ); + fxent linkto( ent, tag ); + wait_network_frame(); + playfxontag( effect, fxent, "tag_origin" ); + return fxent; +} + +spawnandlinkfxtooffset( effect, ent, offsetorigin, offsetangles ) +{ + fxent = spawn( "script_model", ( 0, 0, 0 ) ); + fxent setmodel( "tag_origin" ); + fxent linkto( ent, "", offsetorigin, offsetangles ); + wait_network_frame(); + playfxontag( effect, fxent, "tag_origin" ); + return fxent; +} + +custom_weapon_wall_prices() +{ + if ( !isdefined( level.zombie_include_weapons ) ) + return; + + weapon_spawns = []; + weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); + + for ( i = 0; i < weapon_spawns.size; i++ ) + { + if ( !isdefined( level.zombie_weapons[weapon_spawns[i].zombie_weapon_upgrade] ) ) + continue; + + if ( isdefined( weapon_spawns[i].script_int ) ) + { + cost = weapon_spawns[i].script_int; + level.zombie_weapons[weapon_spawns[i].zombie_weapon_upgrade].cost = cost; + } + } +} + +pause_zombie_spawning() +{ + if ( !isdefined( level.spawnpausecount ) ) + level.spawnpausecount = 0; + + level.spawnpausecount++; + flag_clear( "spawn_zombies" ); +} + +try_resume_zombie_spawning() +{ + if ( !isdefined( level.spawnpausecount ) ) + level.spawnpausecount = 0; + + level.spawnpausecount--; + + if ( level.spawnpausecount <= 0 ) + { + level.spawnpausecount = 0; + flag_set( "spawn_zombies" ); + } +} + +automatonspeak( category, type, response, force_variant, override ) +{ + if ( isdefined( level.automaton ) && !is_true( level.automaton.disabled_by_emp ) ) + { +/# + if ( getdvar( _hash_6DF184E8 ) == "" ) + iprintlnbold( "Automaton VO: " + type ); +#/ + if ( type != "leaving" && type != "leaving_warning" ) + { + level.automaton notify( "want_to_be_speaking", type ); + + level.automaton waittill( "startspeaking" ); + } + + level.automaton maps\mp\zombies\_zm_audio::create_and_play_dialog( category, type, response, force_variant, override ); + } +} + +is_thedouche() +{ + return self.characterindex == 0; +} + +is_theconspiracytheorist() +{ + return self.characterindex == 1; +} + +is_thefarmersdaughter() +{ + return self.characterindex == 2; +} + +is_theelectricalengineer() +{ + return self.characterindex == 3; +} + +get_random_encounter_match( location ) +{ + match_pool = []; + assert( match_pool.size > 0, "Could not find a random encounters match for " + location ); + return random( match_pool ); +} + +transit_breakable_glass_init() +{ + glass = getentarray( "transit_glass", "targetname" ); + + if ( level.splitscreen && getdvarint( "splitscreen_playerCount" ) > 2 ) + { + array_delete( glass ); + return; + } + + array_thread( glass, ::transit_breakable_glass ); +} + +transit_breakable_glass() +{ + level endon( "intermission" ); + self.health = 99999; + self setcandamage( 1 ); + self.damage_state = 0; + + while ( true ) + { + self waittill( "damage", amount, attacker, direction, point, dmg_type ); + + if ( isplayer( attacker ) ) + { + if ( self.damage_state == 0 ) + { + self glass_gets_destroyed(); + self.damage_state = 1; + self playsound( "fly_glass_break" ); + } + } + } +} + +glass_gets_destroyed() +{ + if ( isdefined( level._effect["glass_impact"] ) ) + playfx( level._effect["glass_impact"], self.origin, anglestoforward( self.angles ) ); + + wait 0.1; + + if ( isdefined( self.model ) && self.damage_state == 0 ) + { + self setmodel( self.model + "_broken" ); + self.damage_state = 1; + return; + } + else + { + self delete(); + return; + } +} + +solo_tombstone_removal() +{ + if ( getnumexpectedplayers() > 1 ) + return; + + level notify( "tombstone_removed" ); + level thread maps\mp\zombies\_zm_perks::perk_machine_removal( "specialty_scavenger" ); +} + +sparking_power_lines() +{ + lines = getentarray( "power_line_sparking", "targetname" ); +} + +disconnect_door_zones( zone_a, zone_b, flag_name ) +{ + level endon( "intermission" ); + level endon( "end_game" ); + + while ( true ) + { + flag_wait( flag_name ); + azone = level.zones[zone_a].adjacent_zones[zone_b]; + azone maps\mp\zombies\_zm_zonemgr::door_close_disconnect( flag_name ); + } +} + +enable_morse_code() +{ + level clientnotify( "mc1" ); +} + +disable_morse_code() +{ + level clientnotify( "mc0" ); +} + +transit_pathnode_spawning() +{ + precachemodel( "collision_wall_128x128x10_standard" ); + precachemodel( "collision_wall_256x256x10_standard" ); + precachemodel( "collision_clip_64x64x256" ); + minimap_upperl = spawn( "script_origin", ( -12248, 9496, 552 ) ); + minimap_upperl.targetname = "minimap_corner"; + minimap_lowerr = spawn( "script_origin", ( 14472, -8496, -776 ) ); + minimap_lowerr.targetname = "minimap_corner"; + maps\mp\_compass::setupminimap( "compass_map_zm_transit" ); + flag_wait( "start_zombie_round_logic" ); + collision1 = spawn( "script_model", ( 2273, -126, 143 ) ); + collision1 setmodel( "collision_wall_128x128x10_standard" ); + collision1.angles = ( 0, 0, 0 ); + collision1 ghost(); + collision2 = spawn( "script_model", ( 2096, -126, 143 ) ); + collision2 setmodel( "collision_wall_128x128x10_standard" ); + collision2.angles = ( 0, 0, 0 ); + collision2 ghost(); + collision3 = spawn( "script_model", ( 1959, -126, 143 ) ); + collision3 setmodel( "collision_wall_128x128x10_standard" ); + collision3.angles = ( 0, 0, 0 ); + collision3 ghost(); + collision4 = spawn( "script_model", ( 12239, 8509, -688 ) ); + collision4 setmodel( "collision_wall_128x128x10_standard" ); + collision4.angles = ( 0, 0, 0 ); + collision4 ghost(); + collision5 = spawn( "script_model", ( 8320, -6679, 362 ) ); + collision5 setmodel( "collision_wall_256x256x10_standard" ); + collision5.angles = vectorscale( ( 0, 1, 0 ), 300.0 ); + collision5 ghost(); + collision5 = spawn( "script_model", ( 10068, 7272, -67 ) ); + collision5 setmodel( "collision_clip_64x64x256" ); + collision5.angles = ( 0, 0, 0 ); + collision5 ghost(); +} diff --git a/ZM/Maps/Tranzit/maps/mp/zombies/_zm_ai_avogadro.gsc b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_ai_avogadro.gsc new file mode 100644 index 0000000..8b81bc6 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_ai_avogadro.gsc @@ -0,0 +1,1583 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\zombies\_zm_ai_avogadro; +#include maps\mp\_visionset_mgr; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zm_transit_bus; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_weap_riotshield; + +precache() +{ + precacheshellshock( "electrocution" ); +/# + precachemodel( "fx_axis_createfx" ); +#/ + precache_fx(); +} + +precache_fx() +{ + level._effect["avogadro_bolt"] = loadfx( "maps/zombie/fx_zombie_tesla_bolt_secondary" ); + level._effect["avogadro_ascend"] = loadfx( "maps/zombie/fx_zmb_avog_ascend" ); + level._effect["avogadro_ascend_aerial"] = loadfx( "maps/zombie/fx_zmb_avog_ascend_aerial" ); + level._effect["avogadro_descend"] = loadfx( "maps/zombie/fx_zmb_avog_descend" ); + level._effect["avogadro_phase_trail"] = loadfx( "maps/zombie/fx_zmb_avog_phase_trail" ); + level._effect["avogadro_phasing"] = loadfx( "maps/zombie/fx_zmb_avog_phasing" ); + level._effect["avogadro_health_full"] = loadfx( "maps/zombie/fx_zmb_avog_health_full" ); + level._effect["avogadro_health_half"] = loadfx( "maps/zombie/fx_zmb_avog_health_half" ); + level._effect["avogadro_health_low"] = loadfx( "maps/zombie/fx_zmb_avog_health_low" ); +} + +init() +{ + init_phase_anims(); + init_regions(); + level.avogadro_spawners = getentarray( "avogadro_zombie_spawner", "script_noteworthy" ); + array_thread( level.avogadro_spawners, ::add_spawn_function, maps\mp\zombies\_zm_ai_avogadro::avogadro_prespawn ); + level.zombie_ai_limit_avogadro = 1; + + if ( !isdefined( level.vsmgr_prio_overlay_zm_ai_avogadro_electrified ) ) + level.vsmgr_prio_overlay_zm_ai_avogadro_electrified = 75; + + maps\mp\_visionset_mgr::vsmgr_register_info( "overlay", "zm_ai_avogadro_electrified", 1, level.vsmgr_prio_overlay_zm_ai_avogadro_electrified, 15, 1, maps\mp\_visionset_mgr::vsmgr_duration_lerp_thread_per_player, 0 ); + maps\mp\zombies\_zm::register_player_damage_callback( ::avogadro_player_damage_callback ); + level thread avogadro_spawning_logic(); +} + +init_phase_anims() +{ + level.avogadro_phase = []; + level.avogadro_phase[0] = spawnstruct(); + level.avogadro_phase[0].animstate = "zm_teleport_forward"; + level.avogadro_phase[1] = spawnstruct(); + level.avogadro_phase[1].animstate = "zm_teleport_left"; + level.avogadro_phase[2] = spawnstruct(); + level.avogadro_phase[2].animstate = "zm_teleport_right"; + level.avogadro_phase[3] = spawnstruct(); + level.avogadro_phase[3].animstate = "zm_teleport_back"; +} + +init_regions() +{ + level.transit_region = []; + level.transit_region["bus"] = spawnstruct(); + level.transit_region["diner"] = spawnstruct(); + level.transit_region["farm"] = spawnstruct(); + level.transit_region["cornfield"] = spawnstruct(); + level.transit_region["power"] = spawnstruct(); + level.transit_region["town"] = spawnstruct(); + level.transit_region["bus"].zones = []; + level.transit_region["bus"].zones[0] = "zone_pri"; + level.transit_region["bus"].zones[1] = "zone_station_ext"; + level.transit_region["bus"].exploder = 200; + level.transit_region["bus"].sndorigin = ( -6909, 4531, 396 ); + level.transit_region["diner"].zones = []; + level.transit_region["diner"].zones[0] = "zone_roadside_west"; + level.transit_region["diner"].zones[1] = "zone_din"; + level.transit_region["diner"].zones[2] = "zone_roadside_east"; + level.transit_region["diner"].zones[3] = "zone_gas"; + level.transit_region["diner"].zones[4] = "zone_gar"; + level.transit_region["diner"].exploder = 220; + level.transit_region["diner"].sndorigin = ( -5239, -6842, 457 ); + level.transit_region["farm"].zones = []; + level.transit_region["farm"].zones[0] = "zone_far"; + level.transit_region["farm"].zones[1] = "zone_far_ext"; + level.transit_region["farm"].zones[2] = "zone_brn"; + level.transit_region["farm"].zones[3] = "zone_farm_house"; + level.transit_region["farm"].exploder = 230; + level.transit_region["farm"].sndorigin = ( 7954, -5799, 582 ); + level.transit_region["cornfield"].zones = []; + level.transit_region["cornfield"].zones[0] = "zone_amb_cornfield"; + level.transit_region["cornfield"].zones[1] = "zone_cornfield_prototype"; + level.transit_region["cornfield"].exploder = 240; + level.transit_region["cornfield"].sndorigin = ( 10278, -662, 324 ); + level.transit_region["power"].zones = []; + level.transit_region["power"].zones[0] = "zone_prr"; + level.transit_region["power"].zones[1] = "zone_pow"; + level.transit_region["power"].zones[2] = "zone_pcr"; + level.transit_region["power"].zones[3] = "zone_pow_warehouse"; + level.transit_region["power"].exploder = 250; + level.transit_region["power"].sndorigin = ( 10391, 7604, -70 ); + level.transit_region["town"].zones = []; + level.transit_region["town"].zones[0] = "zone_tow"; + level.transit_region["town"].zones[1] = "zone_bar"; + level.transit_region["town"].zones[2] = "zone_ban"; + level.transit_region["town"].zones[3] = "zone_ban_vault"; + level.transit_region["town"].zones[4] = "zone_town_north"; + level.transit_region["town"].zones[5] = "zone_town_west"; + level.transit_region["town"].zones[6] = "zone_town_south"; + level.transit_region["town"].zones[7] = "zone_town_barber"; + level.transit_region["town"].zones[8] = "zone_town_church"; + level.transit_region["town"].zones[9] = "zone_town_east"; + level.transit_region["town"].exploder = 260; + level.transit_region["town"].sndorigin = ( 1460, -416, 318 ); +} + +avogadro_prespawn() +{ + self endon( "death" ); + level endon( "intermission" ); + level.avogadro = self; + self.has_legs = 1; + self.no_gib = 1; + self.is_avogadro = 1; + self.ignore_enemy_count = 1; + recalc_zombie_array(); + self.ignore_nuke = 1; + self.ignore_lava_damage = 1; + self.ignore_devgui_death = 1; + self.ignore_electric_trap = 1; + self.ignore_game_over_death = 1; + self.ignore_enemyoverride = 1; + self.ignore_solo_last_stand = 1; + self.ignore_riotshield = 1; + self.allowpain = 0; + self.core_model = getent( "core_model", "targetname" ); + + if ( isdefined( self.core_model ) ) + { + if ( !isdefined( self.core_model.angles ) ) + self.core_model.angles = ( 0, 0, 0 ); + + self forceteleport( self.core_model.origin, self.core_model.angles ); + } + + self set_zombie_run_cycle( "walk" ); + self animmode( "normal" ); + self orientmode( "face enemy" ); + self maps\mp\zombies\_zm_spawner::zombie_setup_attack_properties(); + self maps\mp\zombies\_zm_spawner::zombie_complete_emerging_into_playable_area(); + self setfreecameralockonallowed( 0 ); + self.zmb_vocals_attack = "zmb_vocals_zombie_attack"; + self.meleedamage = 5; + self.actor_damage_func = ::avogadro_damage_func; + self.non_attacker_func = ::avogadro_non_attacker; + self.anchor = spawn( "script_origin", self.origin ); + self.anchor.angles = self.angles; + self.phase_time = 0; + self.audio_loop_ent = spawn( "script_origin", self.origin ); + self.audio_loop_ent linkto( self, "tag_origin" ); + self.hit_by_melee = 0; + self.damage_absorbed = 0; + self.ignoreall = 1; + self.zombie_init_done = 1; + self notify( "zombie_init_done" ); + self.stun_zombie = ::stun_avogadro; + self.jetgun_fling_func = ::fling_avogadro; + self.jetgun_drag_func = ::drag_avogadro; + self.depot_lava_pit = ::busplowkillzombie; + self.busplowkillzombie = ::busplowkillzombie; + self.region_timer = gettime() + 500; + self.shield = 1; +} + +avogadro_spawning_logic() +{ + level endon( "intermission" ); + + if ( level.intermission ) + return; +/# + if ( getdvarint( _hash_FA81816F ) == 2 || getdvarint( _hash_FA81816F ) >= 4 ) + return; +#/ + spawner = getent( "avogadro_zombie_spawner", "script_noteworthy" ); + + if ( !isdefined( spawner ) ) + { +/# + assertmsg( "No avogadro spawner in the map." ); +#/ + return; + } + + ai = spawn_zombie( spawner, "avogadro" ); + + if ( !isdefined( ai ) ) + { +/# + assertmsg( "Avogadro: failed spawn" ); +#/ + return; + } + + ai waittill( "zombie_init_done" ); + + core_mover = getent( "core_mover", "targetname" ); + ai linkto( core_mover, "tag_origin" ); + ai.state = "chamber"; + ai setanimstatefromasd( "zm_chamber_idle" ); + ai thread avogadro_think(); + ai thread avogadro_bus_watcher(); +} + +avogadro_think() +{ + while ( true ) + { + if ( isdefined( self.in_pain ) && self.in_pain ) + { + wait 0.1; + continue; + } + + switch ( self.state ) + { + case "chamber": + wait_idle(); + break; + case "wait_for_player": + player_look(); + break; + case "idle": + chase_player(); + break; + case "chasing": + chase_update(); + break; + case "chasing_bus": + chase_bus_update(); + break; + case "cloud": + cloud_update(); + break; + case "stay_attached": + attach_update(); + break; + } + + wait 0.1; + } +} + +avogadro_bus_watcher() +{ + plow_trigger = getent( "trigger_plow", "targetname" ); + + while ( true ) + { + if ( self.state == "chasing_bus" || self.state == "attacking_bus" ) + { + wait 0.1; + continue; + } + + if ( isdefined( level.the_bus ) && ( isdefined( level.the_bus.ismoving ) && level.the_bus.ismoving ) && level.the_bus getspeedmph() > 5 ) + { + if ( self istouching( plow_trigger ) ) + { + phase_node = getnode( "back_door_node", "targetname" ); + self avogadro_teleport( phase_node.origin, phase_node.angles, 1 ); + } + } + + wait 0.1; + } +} + +busplowkillzombie() +{ + if ( isdefined( self.is_teleport ) && self.is_teleport ) + return; + + phase_node = getnode( "back_door_node", "targetname" ); + self avogadro_teleport( phase_node.origin, phase_node.angles, 1 ); +} + +phase_from_bus() +{ + self ghost(); + self notsolid(); + wait 3; + self show(); + self solid(); + self notify( "phase_from_bus_done" ); +} + +wait_idle() +{ +/# + if ( getdvarint( _hash_CFA4158E ) ) + { + self.state = "wait_for_player"; + self unlink(); + } +#/ + if ( flag( "power_on" ) ) + { + self.state = "wait_for_player"; + self unlink(); + } +} + +player_look() +{ + players = get_players(); + + foreach ( player in players ) + { + vec_enemy = self.origin - player.origin; + vec_facing = anglestoforward( player.angles ); + norm_facing = vectornormalize( vec_facing ); + norm_enemy = vectornormalize( vec_enemy ); + dot = vectordot( norm_facing, norm_enemy ); + + if ( dot > 0.707 ) + { +/# + avogadro_print( "player spotted" ); +#/ + self avogadro_exit( "chamber" ); + } + } +/# + if ( getdvarint( _hash_CFA4158E ) ) + { + avogadro_print( "player_look ignored" ); + self avogadro_exit( "chamber" ); + } +#/ +} + +chase_player() +{ + self.state = "chasing"; + self set_zombie_run_cycle( "run" ); + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); +} + +chase_update() +{ + if ( self check_bus_attack() ) + self chase_bus(); + else if ( self check_phase() ) + self do_phase(); + else if ( self check_range_attack() ) + self range_attack(); + + if ( self region_empty() ) + self avogadro_exit( "exit_idle" ); +} + +check_bus_attack() +{ + if ( isdefined( self.favoriteenemy ) && ( isdefined( self.favoriteenemy.isonbus ) && self.favoriteenemy.isonbus ) ) + return true; + + return false; +} + +chase_bus() +{ + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + self.chase_bus_entry = undefined; + dist_curr = 0; + + foreach ( opening in level.the_bus.openings ) + { + if ( !isdefined( self.chase_bus_entry ) ) + { + self.chase_bus_entry = opening; + dist_curr = distance2dsquared( self.origin, level.the_bus gettagorigin( self.chase_bus_entry.tagname ) ); + continue; + } + + dist_next = distance2dsquared( self.origin, level.the_bus gettagorigin( opening.tagname ) ); + + if ( dist_next < dist_curr ) + { + dist_curr = dist_next; + self.chase_bus_entry = opening; + } + } + + self set_zombie_run_cycle( "sprint" ); + self.state = "chasing_bus"; +} + +chase_bus_update() +{ + bus = level.the_bus; + + if ( isdefined( bus ) && bus.numplayerson == 0 ) + { + self chase_player(); + return; + } + + tag_pos = level.the_bus gettagorigin( self.chase_bus_entry.tagname ); + self setgoalpos( tag_pos ); + + if ( bus getspeedmph() > 5 ) + { + self.phase_state = level.avogadro_phase[0].animstate; + self.phase_substate = 0; + self setfreecameralockonallowed( 0 ); + self.ignoreall = 1; + self thread phase_failsafe(); + self animcustom( ::play_phase_anim ); +/# + avogadro_print( "long phase after bus" ); +#/ + self waittill( "phase_anim_done" ); + + self.ignoreall = 0; + self setfreecameralockonallowed( 1 ); + } + + dist_sq = distancesquared( self.origin, tag_pos ); + + if ( dist_sq < 14400 ) + self bus_attack(); +} + +bus_attack() +{ + self endon( "stunned" ); + self endon( "stop_bus_attack" ); + bus_attack_struct = []; + bus_attack_struct[0] = spawnstruct(); + bus_attack_struct[0].window_tag = "window_left_rear_jnt"; + bus_attack_struct[0].substate = "bus_attack_back"; + bus_attack_struct[1] = spawnstruct(); + bus_attack_struct[1].window_tag = "window_right_front_jnt"; + bus_attack_struct[1].substate = "bus_attack_front"; + bus_attack_struct[2] = spawnstruct(); + bus_attack_struct[2].window_tag = "window_left_2_jnt"; + bus_attack_struct[2].substate = "bus_attack_left"; + bus_attack_struct[3] = spawnstruct(); + bus_attack_struct[3].window_tag = "window_right_3_jnt"; + bus_attack_struct[3].substate = "bus_attack_right"; + random_attack_struct = array_randomize( bus_attack_struct ); + self.state = "attacking_bus"; + self.bus_attack_time = 0; + self.bus_disabled = 0; + self.ignoreall = 1; + + for ( i = 0; i < 4; i++ ) + { + while ( isdefined( self.in_pain ) && self.in_pain ) + wait 0.1; + + attack_struct = random_attack_struct[i]; +/# + window = getdvarint( _hash_5628DC9F ); + + if ( window >= 0 ) + attack_struct = bus_attack_struct[window]; +#/ + self bus_disable( attack_struct ); + + if ( self.bus_disabled ) + break; + } + + if ( !self.bus_disabled ) + { + self.shield = 1; + self unlink(); + self avogadro_exit( "bus" ); + } + else + { + level.the_bus thread maps\mp\zm_transit_bus::bus_disabled_by_emp( 30 ); + self attach_to_bus(); + } +} + +attach_to_bus() +{ + self endon( "death" ); + self endon( "stop_health" ); + + if ( level.the_bus.numaliveplayersridingbus > 0 ) + { +/# + avogadro_print( "stay_attached " + self.bus_attack_struct.substate ); +#/ + origin = level.the_bus gettagorigin( self.bus_attack_struct.window_tag ); + angles = level.the_bus gettagangles( self.bus_attack_struct.window_tag ); + self show(); + self.shield = 0; + self animscripted( origin, angles, "zm_bus_attack", self.bus_attack_struct.substate ); + self.bus_shock_time = 0; + self.state = "stay_attached"; + return; + } + + self detach_from_bus(); +} + +attach_update() +{ + if ( level.the_bus.numaliveplayersridingbus > 0 ) + { + wait 0.1; + self.bus_shock_time += 0.1; + + if ( self.bus_shock_time >= 2 ) + { + self.bus_shock_time = 0; + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( player.isonbus ) && player.isonbus ) + { + maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_ai_avogadro_electrified", player, 1, 1 ); + player shellshock( "electrocution", 1 ); + player notify( "avogadro_damage_taken" ); + } + } + } + + return; + } + + self detach_from_bus(); +} + +detach_from_bus() +{ + self unlink(); +/# + avogadro_print( "unlinking from bus window" ); +#/ + bus_forward = vectornormalize( anglestoforward( level.the_bus.angles ) ); + unlink_pos = level.the_bus.origin + vectorscale( bus_forward, -144 ); + unlink_pos = groundpos_ignore_water_new( unlink_pos + vectorscale( ( 0, 0, 1 ), 60.0 ) ); + self.shield = 1; + self avogadro_teleport( unlink_pos, self.angles, 1 ); + self.state = "idle"; + self.ignoreall = 0; +} + +bus_disable_show( time ) +{ + self endon( "death" ); + wait( time ); + self.shield = 0; + self show(); +} + +bus_disable( bus_attack_struct ) +{ + self endon( "melee_pain" ); + self.bus_attack_struct = bus_attack_struct; + origin = level.the_bus gettagorigin( bus_attack_struct.window_tag ); + angles = level.the_bus gettagangles( bus_attack_struct.window_tag ); + self avogadro_teleport( origin, angles, 0.5, bus_attack_struct.window_tag ); + self linkto( level.the_bus, bus_attack_struct.window_tag ); + bus_disable_show( 0.1 ); + origin = level.the_bus gettagorigin( bus_attack_struct.window_tag ); + angles = level.the_bus gettagangles( bus_attack_struct.window_tag ); + self animscripted( origin, angles, "zm_bus_attack", bus_attack_struct.substate ); +/# + avogadro_print( "bus_disable " + bus_attack_struct.substate ); +#/ + success = 0; + self.mod_melee = 0; + self.bus_shock_time = 0; + level thread maps\mp\zm_transit_bus::do_player_bus_zombie_vox( "avogadro_onbus", 45 ); + + while ( true ) + { + wait 0.1; + self.bus_attack_time += 0.1; + + if ( self.bus_attack_time >= 20 ) + { + self.bus_disabled = 1; + level thread maps\mp\zm_transit_bus::do_player_bus_zombie_vox( "avogadro_stopbus", 45 ); + break; + } + + self.bus_shock_time += 0.1; + + if ( self.bus_shock_time >= 2 ) + { + self.bus_shock_time = 0; + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( player.isonbus ) && player.isonbus ) + { + maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_ai_avogadro_electrified", player, 1, 1 ); + player shellshock( "electrocution", 1 ); + player notify( "avogadro_damage_taken" ); + player thread do_player_general_vox( "general", "avogadro_attack", 30, 45 ); + } + } + } + + if ( level.the_bus.numaliveplayersridingbus == 0 ) + { + self detach_from_bus(); + self notify( "stop_bus_attack" ); + } + } +} + +avogadro_exit( from ) +{ + self.state = "exiting"; + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + self setfreecameralockonallowed( 0 ); + self.audio_loop_ent stoploopsound( 0.5 ); + self notify( "stop_health" ); + + if ( isdefined( self.health_fx ) ) + { + self.health_fx unlink(); + self.health_fx delete(); + } + + if ( isdefined( from ) ) + { + if ( from == "bus" ) + { + self playsound( "zmb_avogadro_death_short" ); + playfx( level._effect["avogadro_ascend_aerial"], self.origin ); + self animscripted( self.origin, self.angles, "zm_bus_win" ); + maps\mp\animscripts\zm_shared::donotetracks( "bus_win_anim" ); + } + else if ( from == "chamber" ) + { + self playsound( "zmb_avogadro_death_short" ); + playfx( level._effect["avogadro_ascend"], self.origin ); + self animscripted( self.origin, self.angles, "zm_chamber_out" ); + wait 0.4; + self ghost(); + stop_exploder( 500 ); + } + else + { + self playsound( "zmb_avogadro_death" ); + playfx( level._effect["avogadro_ascend"], self.origin ); + self animscripted( self.origin, self.angles, "zm_exit" ); + maps\mp\animscripts\zm_shared::donotetracks( "exit_anim" ); + } + } + else + { + self playsound( "zmb_avogadro_death" ); + playfx( level._effect["avogadro_ascend"], self.origin ); + self animscripted( self.origin, self.angles, "zm_exit" ); + maps\mp\animscripts\zm_shared::donotetracks( "exit_anim" ); + } + + if ( !isdefined( from ) || from != "chamber" ) + level thread do_avogadro_flee_vo( self ); + + self ghost(); + self.hit_by_melee = 0; + self.anchor.origin = self.origin; + self.anchor.angles = self.angles; + self linkto( self.anchor ); + + if ( isdefined( from ) && from == "exit_idle" ) + self.return_round = level.round_number + 1; + else + self.return_round = level.round_number + randomintrange( 2, 5 ); + + level.next_avogadro_round = self.return_round; + self.state = "cloud"; + self thread cloud_update_fx(); +} + +cloud_update_fx() +{ + self endon( "cloud_fx_end" ); + level endon( "end_game" ); + region = []; + region[0] = "bus"; + region[1] = "diner"; + region[2] = "farm"; + region[3] = "cornfield"; + region[4] = "power"; + region[5] = "town"; + self.current_region = undefined; + + if ( !isdefined( self.sndent ) ) + { + self.sndent = spawn( "script_origin", ( 0, 0, 0 ) ); + self.sndent playloopsound( "zmb_avogadro_thunder_overhead" ); + } + + cloud_time = gettime(); + + for ( vo_counter = 0; 1; vo_counter++ ) + { + if ( gettime() >= cloud_time ) + { + if ( isdefined( self.current_region ) ) + { + exploder_num = level.transit_region[self.current_region].exploder; + stop_exploder( exploder_num ); + } + + rand_region = array_randomize( region ); + region_str = rand_region[0]; + + if ( !isdefined( self.current_region ) ) + region_str = region[4]; +/# + idx = getdvarint( _hash_FD251E42 ); + + if ( idx >= 0 ) + region_str = region[idx]; + + avogadro_print( "clouds in region " + region_str ); +#/ + self.current_region = region_str; + exploder_num = level.transit_region[region_str].exploder; + exploder( exploder_num ); + self.sndent moveto( level.transit_region[region_str].sndorigin, 3 ); + cloud_time = gettime() + 30000; + } + + if ( vo_counter > 50 ) + { + player = self get_player_in_region(); + + if ( isdefined( player ) ) + { + if ( isdefined( self._in_cloud ) && self._in_cloud ) + player thread do_player_general_vox( "general", "avogadro_above", 90, 10 ); + else + player thread do_player_general_vox( "general", "avogadro_arrive", 60, 40 ); + } + else + level thread avogadro_storm_vox(); + + vo_counter = 0; + } + + wait 0.1; + } +} + +cloud_update() +{ + self endon( "melee_pain" ); + return_from_cloud = 0; + self._in_cloud = 1; + + if ( level.round_number >= self.return_round ) + { +/# + avogadro_print( "return from round" ); +#/ + return_from_cloud = 1; + self._in_cloud = 0; + } + + if ( isdefined( return_from_cloud ) && return_from_cloud ) + { +/# + avogadro_print( "time to come back in " + self.current_region ); +#/ + self notify( "cloud_fx_end" ); + new_origin = cloud_find_spawn(); + + if ( isdefined( self.sndent ) ) + { + self.sndent delete(); + self.sndent = undefined; + } + + if ( !isdefined( new_origin ) ) + new_origin = maps\mp\zombies\_zm::check_for_valid_spawn_near_team(); + + if ( isdefined( new_origin ) ) + { + self thread avogadro_update_health(); + playsoundatposition( "zmb_avogadro_spawn_3d", new_origin ); + self.audio_loop_ent playloopsound( "zmb_avogadro_loop", 0.5 ); + self unlink(); + ground_pos = groundpos_ignore_water_new( new_origin + vectorscale( ( 0, 0, 1 ), 60.0 ) ); + playfx( level._effect["avogadro_descend"], ground_pos ); + self animscripted( ground_pos, self.anchor.angles, "zm_arrival" ); + maps\mp\animscripts\zm_shared::donotetracks( "arrival_anim" ); + self setfreecameralockonallowed( 1 ); + time_to_leave = gettime() + 30000; + + while ( true ) + { + if ( gettime() > time_to_leave ) + { +/# + avogadro_print( "enemy never showed - leaving" ); +#/ + self avogadro_exit( "exit_idle" ); + return; + } + + if ( self enemy_in_region() ) + { + self.ignoreall = 0; + self.state = "idle"; + return; + } + + wait 0.1; + } + } + } +} + +enemy_in_region() +{ + zones = level.transit_region[self.current_region].zones; + + foreach ( zone in zones ) + { + if ( level.zones[zone].is_occupied ) + { + self.ignoreall = 0; + self.state = "idle"; + return true; + } + } + + return false; +} + +get_player_in_region() +{ + players = get_players(); + players = array_randomize( players ); + zones = level.transit_region[self.current_region].zones; + + foreach ( zone in zones ) + { + if ( level.zones[zone].is_occupied ) + { + foreach ( player in players ) + { + if ( player maps\mp\zombies\_zm_zonemgr::is_player_in_zone( zone ) ) + return player; + } + } + } + + return undefined; +} + +cloud_find_spawn() +{ + zones = level.transit_region[self.current_region].zones; + use_points = []; + + foreach ( zone in zones ) + { + if ( zone == "zone_pri" ) + { + if ( !level.zones[zone].is_occupied ) + { + if ( !flag( "OnPriDoorYar2" ) ) + { +/# + avogadro_print( "zone_pri not occupied and door is closed" ); +#/ + continue; + } + } + } + + if ( level.zones[zone].is_enabled && level.zones[zone].is_spawning_allowed ) + { + locations = level.zones[zone].avogadro_locations; + + foreach ( loc in locations ) + use_points[use_points.size] = loc; + } + } + + if ( use_points.size > 0 ) + { + use_points = array_randomize( use_points ); + return use_points[0].origin; + } + + return undefined; +} + +avogadro_reveal( show_time ) +{ + self endon( "death" ); + self show(); + wait( show_time ); + self ghost(); +} + +avogadro_teleport( dest_pos, dest_angles, lerp_time, tag_override ) +{ + self.is_teleport = 1; + self.phase_fx = spawn( "script_model", self.origin ); + self.phase_fx setmodel( "tag_origin" ); + self.phase_fx linkto( self ); + wait 0.1; + playfxontag( level._effect["avogadro_phase_trail"], self.phase_fx, "tag_origin" ); + playfx( level._effect["avogadro_phasing"], self.origin ); + self avogadro_reveal( 0.1 ); + self playsound( "zmb_avogadro_warp_out" ); + self.anchor.origin = self.origin; + self.anchor.angles = self.angles; + self linkto( self.anchor ); + self.anchor moveto( dest_pos, lerp_time ); + + self.anchor waittill( "movedone" ); + + self.anchor.origin = dest_pos; + self.anchor.angles = dest_angles; + self unlink(); + wait 0.1; + + if ( isdefined( tag_override ) ) + { + dest_pos = level.the_bus gettagorigin( tag_override ); + dest_angles = level.the_bus gettagangles( tag_override ); + } + + self forceteleport( dest_pos, dest_angles ); + playfx( level._effect["avogadro_phasing"], self.origin ); + + if ( isdefined( self.phase_fx ) ) + self.phase_fx delete(); + + self avogadro_reveal( 0.1 ); + self playsound( "zmb_avogadro_warp_in" ); + self.is_teleport = 0; +} + +check_range_attack() +{ +/# + if ( getdvarint( _hash_A40002E9 ) ) + return false; +#/ + enemy = self.favoriteenemy; + + if ( isdefined( enemy ) ) + { + vec_enemy = enemy.origin - self.origin; + dist_sq = lengthsquared( vec_enemy ); + + if ( dist_sq > 14400 && dist_sq < 360000 ) + { + vec_facing = anglestoforward( self.angles ); + norm_facing = vectornormalize( vec_facing ); + norm_enemy = vectornormalize( vec_enemy ); + dot = vectordot( norm_facing, norm_enemy ); + + if ( dot > 0.99 ) + { + enemy_eye_pos = enemy geteye(); + eye_pos = self geteye(); + passed = bullettracepassed( eye_pos, enemy_eye_pos, 0, undefined ); + + if ( passed ) + return true; + } + } + } + + return false; +} + +range_attack() +{ + self endon( "melee_pain" ); + enemy = self.favoriteenemy; + + if ( isdefined( enemy ) ) + { + self thread shoot_bolt_wait( "ranged_attack", enemy ); + self show(); + self animscripted( self.origin, self.angles, "zm_ranged_attack_in" ); + maps\mp\animscripts\zm_shared::donotetracks( "ranged_attack" ); + self animscripted( self.origin, self.angles, "zm_ranged_attack_loop" ); + maps\mp\animscripts\zm_shared::donotetracks( "ranged_attack" ); + self animscripted( self.origin, self.angles, "zm_ranged_attack_out" ); + maps\mp\animscripts\zm_shared::donotetracks( "ranged_attack" ); + self.shield = 1; + self thread avogadro_update_health(); + self ghost(); + } +} + +shoot_bolt_wait( animname, enemy ) +{ + self endon( "melee_pain" ); + + self waittillmatch( animname, "fire" ); + + self.shield = 0; + self notify( "stop_health" ); + + if ( isdefined( self.health_fx ) ) + { + self.health_fx unlink(); + self.health_fx delete(); + } + + self thread shoot_bolt( enemy ); +} + +shoot_bolt( enemy ) +{ + source_pos = self gettagorigin( "tag_weapon_right" ); + target_pos = enemy geteye(); + bolt = spawn( "script_model", source_pos ); + bolt setmodel( "tag_origin" ); + wait 0.1; + self playsound( "zmb_avogadro_attack" ); + fx = playfxontag( level._effect["avogadro_bolt"], bolt, "tag_origin" ); + bolt moveto( target_pos, 0.2 ); + + bolt waittill( "movedone" ); + + bolt.owner = self; + bolt check_bolt_impact( enemy ); + bolt delete(); +} + +check_bolt_impact( enemy ) +{ + if ( is_player_valid( enemy ) ) + { + enemy_eye_pos = enemy geteye(); + dist_sq = distancesquared( self.origin, enemy_eye_pos ); + + if ( dist_sq < 4096 ) + { + passed = bullettracepassed( self.origin, enemy_eye_pos, 0, undefined ); + + if ( passed ) + { + maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_ai_avogadro_electrified", enemy, 1, 1 ); + enemy shellshock( "electrocution", 1 ); + enemy playsoundtoplayer( "zmb_avogadro_electrified", enemy ); + enemy dodamage( 60, enemy.origin ); + enemy notify( "avogadro_damage_taken" ); + } + } + } +} + +region_empty() +{ + if ( gettime() >= self.region_timer ) + { + player = self get_player_in_region(); + + if ( isdefined( player ) ) + { + self.region_timer = gettime() + 500; + return false; + } +/# + debug_dist_sq = 0; +#/ + players = getplayers(); + + foreach ( player in players ) + { + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + continue; + + dist_sq = distancesquared( self.origin, player.origin ); +/# + debug_dist_sq = distance( self.origin, player.origin ); +#/ + if ( dist_sq < 9000000 ) + { + self.region_timer = gettime() + 500; + return false; + } + } + + self.region_timer = gettime() + 500; +/# + avogadro_print( "no one left to kill " + debug_dist_sq ); +#/ + return true; + } + + return false; +} + +get_random_phase_state() +{ + index = randomint( 4 ); + state = level.avogadro_phase[index].animstate; + return state; +} + +check_phase() +{ +/# + if ( getdvarint( _hash_CFB33742 ) ) + return false; +#/ + if ( gettime() > self.phase_time ) + { + if ( isdefined( self.is_traversing ) && self.is_traversing ) + { + self.phase_time = gettime() + 2000; + return false; + } + + self.phase_state = get_random_phase_state(); + self.phase_substate = randomint( 3 ); + anim_id = self getanimfromasd( self.phase_state, self.phase_substate ); + + if ( self maymovefrompointtopoint( self.origin, getanimendpos( anim_id ) ) ) + return true; + } + + return false; +} + +do_phase() +{ + self endon( "death" ); + self.state = "phasing"; + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + self setfreecameralockonallowed( 0 ); + self.ignoreall = 1; + self thread phase_failsafe(); + self animcustom( ::play_phase_anim ); + + self waittill( "phase_anim_done" ); + + self.ignoreall = 0; + self setfreecameralockonallowed( 1 ); + self.state = "idle"; +} + +play_phase_anim() +{ + self endon( "death" ); + self endon( "phase_anim_done" ); + self.phase_fx = spawn( "script_model", self.origin ); + self.phase_fx setmodel( "tag_origin" ); + self.phase_fx linkto( self ); + wait 0.05; + playfxontag( level._effect["avogadro_phase_trail"], self.phase_fx, "tag_origin" ); + playfx( level._effect["avogadro_phasing"], self.origin ); + self avogadro_reveal( 0.1 ); + self playsound( "zmb_avogadro_warp_out" ); + self orientmode( "face enemy" ); + self setanimstatefromasd( self.phase_state, self.phase_substate ); + maps\mp\animscripts\zm_shared::donotetracks( "teleport_anim" ); + self.phase_fx delete(); + playfx( level._effect["avogadro_phasing"], self.origin ); + self avogadro_reveal( 0.1 ); + self orientmode( "face default" ); + self playsound( "zmb_avogadro_warp_in" ); + self.phase_time = gettime() + 2000; + self notify( "phase_anim_done" ); +} + +phase_failsafe() +{ + self endon( "phase_anim_done" ); + wait 1; + + if ( self.state == "phasing" || self.state == "chasing_bus" ) + { +/# + avogadro_print( "phasing too long, failsafe kicking in" ); +#/ + if ( isdefined( self.phase_fx ) ) + self.phase_fx delete(); + + playfx( level._effect["avogadro_phasing"], self.origin ); + self avogadro_reveal( 0.1 ); + self orientmode( "face default" ); + self playsound( "zmb_avogadro_warp_in" ); + self.phase_time = gettime() + 2000; + self notify( "phase_anim_done" ); + } +} + +avogadro_player_damage_callback( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +{ + if ( isdefined( einflictor ) && ( isdefined( einflictor.is_avogadro ) && einflictor.is_avogadro ) ) + { + if ( smeansofdeath == "MOD_MELEE" ) + { + maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_ai_avogadro_electrified", self, 0.25, 1 ); + self shellshock( "electrocution", 0.25 ); + self notify( "avogadro_damage_taken" ); + self thread do_player_general_vox( "general", "avogadro_attack", 15, 45 ); + } + } + + return -1; +} + +avogadro_pain_watcher() +{ + self notify( "stop_pain_watcher" ); + self endon( "stop_pain_watcher" ); + wait 4; + + if ( isdefined( self.in_pain ) && self.in_pain ) + { + self.in_pain = 0; +/# + avogadro_print( "in_pain for too long" ); +#/ + } +} + +avogadro_pain( einflictor ) +{ + self endon( "melee_pain" ); + self.in_pain = 1; + self playsound( "zmb_avogadro_pain" ); + self thread avogadro_pain_watcher(); + substate = 0; + origin = self.origin; + angles = self.angles; + animstate = "zm_pain"; + + if ( self.state == "attacking_bus" || self.state == "stay_attached" ) + { + tag = self.bus_attack_struct.window_tag; + + if ( tag == "window_left_rear_jnt" ) + animstate = "zm_bus_back_pain"; + else + animstate = "zm_bus_pain"; + + origin = level.the_bus gettagorigin( tag ); + angles = level.the_bus gettagangles( tag ); + } + + if ( self.hit_by_melee < 4 ) + { + self thread avogadro_update_health(); + self animscripted( origin, angles, animstate, substate ); + maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" ); + self ghost(); + self.phase_time = gettime() - 1; + + if ( self.state == "stay_attached" ) + self attach_to_bus(); + } + else + { + self notify( "stop_bus_attack" ); + level notify( "avogadro_defeated" ); + + if ( isdefined( einflictor ) && isplayer( einflictor ) ) + { + einflictor maps\mp\zombies\_zm_stats::increment_client_stat( "avogadro_defeated", 0 ); + einflictor maps\mp\zombies\_zm_stats::increment_player_stat( "avogadro_defeated" ); + } + + if ( flag( "power_on" ) && flag( "switches_on" ) && self maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr" ) ) + { +/# + avogadro_print( "come back on power" ); +#/ + self show(); + self.in_pain = 0; +/# + avogadro_print( "pain cleared from zone_prr" ); +#/ + self notify( "stop_pain_watcher" ); + self avogadro_teleport( self.core_model.origin, self.core_model.angles, 1 ); + core_mover = getent( "core_mover", "targetname" ); + self linkto( core_mover, "tag_origin" ); + + while ( flag( "power_on" ) ) + wait 0.1; + + self show(); + self.state = "chamber"; + self setanimstatefromasd( "zm_chamber_idle" ); + } + else + { +/# + if ( !flag( "power_on" ) ) + avogadro_print( "no power" ); + + if ( !flag( "switches_on" ) ) + avogadro_print( "no switches" ); + + if ( !self maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr" ) ) + avogadro_print( "no zone" ); +#/ + self show(); + self avogadro_exit(); + } + } + + self.in_pain = 0; +/# + avogadro_print( "pain cleared normal" ); +#/ + self notify( "stop_pain_watcher" ); +} + +avogadro_update_health() +{ + self endon( "death" ); + self notify( "stop_health" ); + self endon( "stop_health" ); + + while ( true ) + { + self avogadro_update_health_fx(); + wait 0.4; + } +} + +avogadro_update_health_fx() +{ + self endon( "death" ); + + if ( !isdefined( self.health_fx ) ) + { + tag_origin = self gettagorigin( "J_SpineUpper" ); + tag_angles = self gettagangles( "J_SpineUpper" ); + self.health_fx = spawn( "script_model", tag_origin ); + self.health_fx.angles = tag_angles; + self.health_fx setmodel( "tag_origin" ); + self.health_fx linkto( self ); + wait 0.1; + } + + if ( self.hit_by_melee == 0 ) + playfxontag( level._effect["avogadro_health_full"], self.health_fx, "tag_origin" ); + else if ( self.hit_by_melee <= 2 ) + playfxontag( level._effect["avogadro_health_half"], self.health_fx, "tag_origin" ); + else + playfxontag( level._effect["avogadro_health_low"], self.health_fx, "tag_origin" ); +} + +avogadro_damage_func( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + if ( self.state == "exiting" || self.state == "phasing" ) + return false; + + if ( smeansofdeath == "MOD_MELEE" ) + { + if ( isplayer( einflictor ) ) + { + if ( isdefined( einflictor.avogadro_melee_time ) ) + { + + } + + if ( self.shield ) + { + einflictor.avogadro_melee_time = gettime(); + maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_ai_avogadro_electrified", einflictor, 0.25, 1 ); + einflictor shellshock( "electrocution", 0.25 ); + einflictor notify( "avogadro_damage_taken" ); + } + + if ( sweapon == "riotshield_zm" ) + { + shield_damage = level.zombie_vars["riotshield_fling_damage_shield"]; + einflictor maps\mp\zombies\_zm_weap_riotshield::player_damage_shield( shield_damage, 0 ); + } + } + + if ( !self.shield ) + { + self.shield = 1; + self notify( "melee_pain" ); + + if ( sweapon == "tazer_knuckles_zm" ) + self.hit_by_melee += 2; + else + self.hit_by_melee++; + + self thread avogadro_pain( einflictor ); +/# + avogadro_print( "hit_by_melee: " + self.hit_by_melee ); +#/ + if ( isplayer( einflictor ) ) + { + einflictor thread do_player_general_vox( "general", "avogadro_wound", 30, 35 ); + level notify( "avogadro_stabbed", self ); + } + } + else + { +/# + avogadro_print( "shield up, no damage" ); +#/ + } + } + else + self update_damage_absorbed( idamage ); + + return false; +} + +update_damage_absorbed( damage ) +{ + if ( self.hit_by_melee > 0 ) + { + self.damage_absorbed += damage; + + if ( self.damage_absorbed >= 1000 ) + { + self.damage_absorbed = 0; + self.hit_by_melee--; +/# + avogadro_print( "regen - hit_by_melee: " + self.hit_by_melee ); +#/ + } + } +} + +avogadro_non_attacker( damage, weapon ) +{ + if ( weapon == "zombie_bullet_crouch_zm" ) + self update_damage_absorbed( damage ); + + return 0; +} + +stun_avogadro() +{ + ignore_emp_states = []; + ignore_emp_states[0] = "phasing"; + ignore_emp_states[1] = "chamber"; + ignore_emp_states[2] = "wait_for_player"; + ignore_emp_states[3] = "exiting"; + ignore_emp_states[4] = "cloud"; + + foreach ( state in ignore_emp_states ) + { + if ( self.state == state ) + return; + } + + if ( self.hit_by_melee < 4 ) + { +/# + avogadro_print( "stunned during " + self.state ); +#/ + level notify( "stun_avogadro", self ); + self notify( "stunned" ); + self notify( "melee_pain" ); + self.hit_by_melee += 4; + self thread avogadro_pain(); + } +} + +fling_avogadro( player ) +{ + +} + +drag_avogadro( vdir ) +{ + +} + +avogadro_debug_axis() +{ +/# + self endon( "death" ); + + while ( true ) + { + if ( !isdefined( self.debug_axis ) ) + { + self.debug_axis = spawn( "script_model", self.origin ); + self.debug_axis setmodel( "fx_axis_createfx" ); + } + else + { + self.debug_axis.origin = self.origin; + self.debug_axis.angles = self.angles; + } + + wait 0.1; + } +#/ +} + +avogadro_print( str ) +{ +/# + if ( getdvarint( _hash_92514885 ) ) + { + iprintln( "avogadro: " + str ); + + if ( isdefined( self.debug_msg ) ) + { + self.debug_msg[self.debug_msg.size] = str; + + if ( self.debug_msg.size > 64 ) + self.debug_msg = []; + } + else + { + self.debug_msg = []; + self.debug_msg[self.debug_msg.size] = str; + } + } +#/ +} + +do_avogadro_flee_vo( avogadro ) +{ + players = get_players(); + + foreach ( player in players ) + { + if ( distancesquared( player.origin, avogadro.origin ) < 250000 ) + { + player thread do_player_general_vox( "general", "avogadro_flee", 30, 45 ); + return; + } + } +} + +avogadro_storm_vox() +{ + if ( isdefined( level.checking_avogadro_storm_vox ) && level.checking_avogadro_storm_vox ) + return; + + level.checking_avogadro_storm_vox = 1; + players = get_players(); + players = array_randomize( players ); + + foreach ( player in players ) + { + if ( player maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_tbu" ) || player maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_amb_tunnel" ) || player maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_prr" ) || player maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_pcr" ) || player maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_pow_warehouse" ) ) + continue; + + player thread do_player_general_vox( "general", "avogadro_storm", 120, 2 ); + } + + wait 5; + level.checking_avogadro_storm_vox = 0; +} diff --git a/ZM/Maps/Tranzit/maps/mp/zombies/_zm_ai_screecher.gsc b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_ai_screecher.gsc new file mode 100644 index 0000000..7f805e9 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_ai_screecher.gsc @@ -0,0 +1,1241 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_ai_screecher; +#include maps\mp\_visionset_mgr; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_stats; + +precache() +{ + precacheshader( "fullscreen_claw_left" ); + precacheshader( "fullscreen_claw_right" ); + precacheshader( "fullscreen_claw_bottom" ); + precachemodel( "p6_zm_screecher_hole" ); + precachemodel( "fx_axis_createfx" ); + precachestring( &"ZOMBIE_SCREECHER_ATTACH_FIRST" ); + level._effect["screecher_spawn_a"] = loadfx( "maps/zombie/fx_zmb_screech_hand_dirt_burst" ); + level._effect["screecher_spawn_b"] = loadfx( "maps/zombie/fx_zmb_screech_body_dirt_billowing" ); + level._effect["screecher_spawn_c"] = loadfx( "maps/zombie/fx_zmb_screech_body_dirt_falling" ); + level._effect["screecher_hole"] = loadfx( "maps/zombie/fx_zmb_screecher_hole" ); + level._effect["screecher_vortex"] = loadfx( "maps/zombie/fx_zmb_screecher_vortex" ); + level._effect["screecher_death"] = loadfx( "maps/zombie/fx_zmb_screech_death_ash" ); +} + +init() +{ + level.screecher_spawners = getentarray( "screecher_zombie_spawner", "script_noteworthy" ); + array_thread( level.screecher_spawners, ::add_spawn_function, maps\mp\zombies\_zm_ai_screecher::screecher_prespawn ); + level.zombie_ai_limit_screecher = 2; + level.zombie_screecher_count = 0; + + if ( !isdefined( level.vsmgr_prio_overlay_zm_ai_screecher_blur ) ) + level.vsmgr_prio_overlay_zm_ai_screecher_blur = 50; + + maps\mp\_visionset_mgr::vsmgr_register_info( "overlay", "zm_ai_screecher_blur", 1, level.vsmgr_prio_overlay_zm_ai_screecher_blur, 1, 1, maps\mp\_visionset_mgr::vsmgr_timeout_lerp_thread_per_player, 0 ); + level thread screecher_spawning_logic(); +/# + level thread screecher_debug(); +#/ + registerclientfield( "actor", "render_third_person", 1, 1, "int" ); + level.near_miss = 0; +} + +screecher_debug() +{ +/# + +#/ +} + +screecher_spawning_logic() +{ + level endon( "intermission" ); + + if ( level.intermission ) + return; +/# + if ( getdvarint( _hash_FA81816F ) == 2 || getdvarint( _hash_FA81816F ) >= 4 ) + return; +#/ + if ( level.screecher_spawners.size < 1 ) + { +/# + assertmsg( "No active spawners in the map. Check to see if the zone is active and if it's pointing to spawners." ); +#/ + return; + } + + while ( true ) + { + while ( !isdefined( level.zombie_screecher_locations ) || level.zombie_screecher_locations.size <= 0 ) + wait 0.1; + + while ( level.zombie_screecher_count >= level.zombie_ai_limit_screecher ) + wait 0.1; + + while ( getdvarint( _hash_B0C0D38F ) ) + wait 0.1; + + if ( !flag( "spawn_zombies" ) ) + flag_wait( "spawn_zombies" ); + + valid_players_in_screecher_zone = 0; + valid_players = []; + + while ( valid_players_in_screecher_zone <= 0 ) + { + players = getplayers(); + valid_players_in_screecher_zone = 0; + + for ( p = 0; p < players.size; p++ ) + { + if ( is_player_valid( players[p] ) && player_in_screecher_zone( players[p] ) && !isdefined( players[p].screecher ) ) + { + valid_players_in_screecher_zone++; + valid_players[valid_players.size] = players[p]; + } + } + + if ( players.size == 1 ) + { + if ( is_player_valid( players[0] ) && !player_in_screecher_zone( players[0] ) ) + level.spawn_delay = 1; + } + + wait 0.1; + } + + if ( !isdefined( level.zombie_screecher_locations ) || level.zombie_screecher_locations.size <= 0 ) + continue; + + valid_players = array_randomize( valid_players ); + player_left_zone = 0; + + if ( isdefined( level.spawn_delay ) && level.spawn_delay ) + { +/# + screecher_print( "delay spawning 5 secs" ); +#/ + spawn_points = get_array_of_closest( valid_players[0].origin, level.zombie_screecher_locations ); + spawn_point = undefined; + + if ( spawn_points.size >= 3 ) + spawn_point = spawn_points[2]; + else if ( spawn_points.size >= 2 ) + spawn_point = spawn_points[1]; + else if ( spawn_points.size >= 1 ) + spawn_point = spawn_points[0]; + + if ( isdefined( spawn_point ) ) + playsoundatposition( "zmb_vocals_screecher_spawn", spawn_point.origin ); + + delay_time = gettime() + 5000; + now_zone = getent( "screecher_spawn_now", "targetname" ); + + while ( gettime() < delay_time ) + { + in_zone = 0; + + if ( valid_players[0] istouching( now_zone ) ) + { +/# + screecher_print( "in now zone" ); +#/ + break; + } + + if ( !is_player_valid( valid_players[0] ) ) + break; + + if ( player_in_screecher_zone( valid_players[0] ) ) + in_zone = 1; + + if ( !in_zone ) + { + player_left_zone = 1; + level.spawn_delay = 1; + break; + } + + wait 0.1; + } + } + + if ( isdefined( player_left_zone ) && player_left_zone ) + continue; + + level.spawn_delay = 0; + spawn_points = get_array_of_closest( valid_players[0].origin, level.zombie_screecher_locations ); + spawn_point = undefined; + + if ( !isdefined( spawn_points ) || spawn_points.size == 0 ) + { + wait 0.1; + continue; + } + + if ( !isdefined( level.last_spawn ) ) + { + level.last_spawn_index = 0; + level.last_spawn = []; + level.last_spawn[level.last_spawn_index] = spawn_points[0]; + level.last_spawn_index = 1; + spawn_point = spawn_points[0]; + } + else + { + foreach ( point in spawn_points ) + { + if ( point == level.last_spawn[0] ) + continue; + + if ( isdefined( level.last_spawn[1] ) && point == level.last_spawn[1] ) + continue; + + spawn_point = point; + level.last_spawn[level.last_spawn_index] = spawn_point; + level.last_spawn_index++; + + if ( level.last_spawn_index > 1 ) + level.last_spawn_index = 0; + + break; + } + } + + if ( !isdefined( spawn_point ) ) + spawn_point = spawn_points[0]; + + if ( isdefined( level.screecher_spawners ) ) + { + spawner = random( level.screecher_spawners ); + ai = spawn_zombie( spawner, spawner.targetname, spawn_point ); + } + + if ( isdefined( ai ) ) + { + ai.spawn_point = spawn_point; + level.zombie_screecher_count++; +/# + screecher_print( "screecher total " + level.zombie_screecher_count ); +#/ + } + + wait( level.zombie_vars["zombie_spawn_delay"] ); + wait 0.1; + } +} + +player_in_screecher_zone( player ) +{ + if ( isdefined( level.is_player_in_screecher_zone ) ) + { + infog = [[ level.is_player_in_screecher_zone ]]( player ); + return infog; + } + + return 1; +} + +screecher_should_runaway( player ) +{ + players = get_players(); + + if ( players.size == 1 ) + { + if ( level.near_miss == 1 ) + { + level.near_miss = 2; +/# + screecher_print( "runaway from near_miss " + level.near_miss ); +#/ + return 1; + } + } + + if ( isdefined( level.screecher_should_runaway ) ) + return self [[ level.screecher_should_runaway ]]( player ); + + return 0; +} + +screecher_get_closest_valid_player( origin, ignore_player ) +{ + valid_player_found = 0; + players = get_players(); + + if ( isdefined( level._zombie_using_humangun ) && level._zombie_using_humangun ) + players = arraycombine( players, level._zombie_human_array, 0, 0 ); + + if ( isdefined( ignore_player ) ) + { + for ( i = 0; i < ignore_player.size; i++ ) + arrayremovevalue( players, ignore_player[i] ); + } + + while ( !valid_player_found ) + { + if ( isdefined( level.calc_closest_player_using_paths ) && level.calc_closest_player_using_paths ) + player = get_closest_player_using_paths( origin, players ); + else + player = getclosest( origin, players ); + + if ( !isdefined( player ) ) + return undefined; + + if ( isdefined( level._zombie_using_humangun ) && level._zombie_using_humangun && isai( player ) ) + return player; + + screecher_claimed = isdefined( player.screecher ) && player.screecher != self; + + if ( players.size == 1 && screecher_claimed ) + return undefined; + + if ( !is_player_valid( player, 1 ) || !player_in_screecher_zone( player ) || screecher_claimed ) + { + arrayremovevalue( players, player ); + continue; + } + + return player; + } +} + +zombie_pathing_home() +{ + self endon( "death" ); + self endon( "zombie_acquire_enemy" ); + level endon( "intermission" ); + self setgoalpos( self.startinglocation ); + + self waittill( "goal" ); + + playfx( level._effect["screecher_spawn_b"], self.origin, ( 0, 0, 1 ) ); + self.no_powerups = 1; + self setfreecameralockonallowed( 0 ); + self animscripted( self.origin, self.angles, "zm_burrow" ); + self playsound( "zmb_screecher_dig" ); + maps\mp\animscripts\zm_shared::donotetracks( "burrow_anim" ); + self delete(); +} + +screecher_find_flesh() +{ + self endon( "death" ); + level endon( "intermission" ); + self endon( "stop_find_flesh" ); + + if ( level.intermission ) + return; + + self.helitarget = 1; + self.ignoreme = 0; + self.nododgemove = 1; + self.ignore_player = []; + self zombie_history( "find flesh -> start" ); + self.goalradius = 32; + + while ( true ) + { + self.favoriteenemy = screecher_get_closest_valid_player( self.origin ); + + if ( isdefined( self.favoriteenemy ) ) + self thread zombie_pathing(); + else + self thread screecher_runaway(); + + self.zombie_path_timer = gettime() + randomfloatrange( 1, 3 ) * 1000; + + while ( gettime() < self.zombie_path_timer ) + wait 0.1; + + self notify( "path_timer_done" ); + self zombie_history( "find flesh -> bottom of loop" ); + debug_print( "Zombie is re-acquiring enemy, ending breadcrumb search" ); + self notify( "zombie_acquire_enemy" ); + } +} + +screecher_prespawn() +{ + self endon( "death" ); + level endon( "intermission" ); + self.startinglocation = self.origin; + self.animname = "screecher_zombie"; + self.audio_type = "screecher"; + self.has_legs = 1; + self.no_gib = 1; + self.isscreecher = 1; + self.ignore_enemy_count = 1; + recalc_zombie_array(); + self.cant_melee = 1; + + if ( isdefined( self.spawn_point ) ) + { + spot = self.spawn_point; + + if ( !isdefined( spot.angles ) ) + spot.angles = ( 0, 0, 0 ); + + self forceteleport( spot.origin, spot.angles ); + } + else + { + + } + + self set_zombie_run_cycle( "super_sprint" ); + self setphysparams( 15, 0, 24 ); + self.actor_damage_func = ::screecher_damage_func; + self.deathfunction = ::screecher_death_func; + self.zombie_init_done = 1; + self notify( "zombie_init_done" ); + self.allowpain = 0; + self animmode( "normal" ); + self orientmode( "face enemy" ); + self.forcemovementscriptstate = 0; + self maps\mp\zombies\_zm_spawner::zombie_setup_attack_properties(); + self maps\mp\zombies\_zm_spawner::zombie_complete_emerging_into_playable_area(); + self setfreecameralockonallowed( 0 ); + self.startinglocation = self.origin; + self playsound( "zmb_vocals_screecher_spawn" ); + self thread play_screecher_fx(); + self thread play_screecher_damaged_yelps(); + self thread screecher_rise(); + self thread screecher_cleanup(); + self thread screecher_distance_tracking(); + self.anchor = spawn( "script_origin", self.origin ); + self.attack_time = 0; + self.attack_delay = 1000; + self.attack_delay_base = 1000; + self.attack_delay_offset = 500; + self.meleedamage = 5; + self.ignore_inert = 1; + self.player_score = 0; + self.screecher_score = 0; + + if ( isdefined( level.screecher_init_done ) ) + self thread [[ level.screecher_init_done ]](); +} + +play_screecher_fx() +{ +/# + if ( isdefined( level.screecher_nofx ) && level.screecher_nofx ) + return; +#/ + playfx( level._effect["screecher_spawn_a"], self.origin, ( 0, 0, 1 ) ); + playfx( level._effect["screecher_spawn_b"], self.origin, ( 0, 0, 1 ) ); + + self waittill( "risen" ); + + playfx( level._effect["screecher_spawn_c"], self.origin, ( 0, 0, 1 ) ); +} + +play_screecher_damaged_yelps() +{ + self endon( "death" ); + + while ( true ) + { + self waittill( "damage", damage, attacker, dir, point, mod ); + + if ( isdefined( attacker ) && isplayer( attacker ) ) + self playsound( "zmb_vocals_screecher_pain" ); + } +} + +play_screecher_breathing_audio() +{ + wait 0.5; + + if ( !isdefined( self ) ) + return; + + if ( !isdefined( self.loopsoundent ) ) + { + self.loopsoundent = spawn( "script_origin", self.origin ); + self.loopsoundent linkto( self, "tag_origin" ); + } + + self.loopsoundent playloopsound( "zmb_vocals_screecher_breath" ); +} + +screecher_rise() +{ + self endon( "death" ); + self animscripted( self.origin, self.angles, "zm_rise" ); + maps\mp\animscripts\zm_shared::donotetracks( "rise_anim" ); + self notify( "risen" ); + self setfreecameralockonallowed( 1 ); + self.startinglocation = self.origin; + self thread screecher_zombie_think(); + self thread play_screecher_breathing_audio(); +/# + +#/ +} + +screecher_zombie_think() +{ + self endon( "death" ); + min_dist = 96; + max_dist = 144; + height_tolerance = 32; + self.state = "chase_init"; + self.isattacking = 0; + self.nextspecial = gettime(); + + for (;;) + { + switch ( self.state ) + { + case "chase_init": + self screecher_chase(); + break; + case "chase_update": + self screecher_chase_update(); + break; + case "attacking": + self screecher_attacking(); + break; + } + + wait 0.1; + } +} + +screecher_chase() +{ + self thread screecher_find_flesh(); + self.state = "chase_update"; +} + +screecher_chase_update() +{ + player = self.favoriteenemy; + + if ( isdefined( player ) ) + { + dist = distance2dsquared( self.origin, player.origin ); + + if ( dist < 57600 ) + { + self screecher_attack(); + return; + } + + if ( self screecher_should_runaway( player ) ) + { + self thread screecher_runaway(); + return; + } + } +} + +screecher_attack() +{ + self endon( "death" ); + player = self.favoriteenemy; + + if ( isdefined( player.screecher ) ) + return; + else + player.screecher = self; + + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + self animmode( "nogravity" ); + self playsound( "zmb_vocals_screecher_jump" ); + + if ( isdefined( self.loopsoundent ) ) + { + self.loopsoundent delete(); + self.loopsoundent = undefined; + } + + self setanimstatefromasd( "zm_jump_up" ); + maps\mp\animscripts\zm_shared::donotetracks( "jump_up_anim" ); + asd_state = self screecher_fly_to_player( player ); + self setplayercollision( 0 ); + self setclientfield( "render_third_person", 1 ); + self linkto( self.favoriteenemy, "tag_origin" ); + self animscripted( self.favoriteenemy.origin, self.favoriteenemy.angles, asd_state ); + maps\mp\animscripts\zm_shared::donotetracks( "jump_land_success_anim" ); + org = self.favoriteenemy gettagorigin( "j_head" ); + angles = self.favoriteenemy gettagangles( "j_head" ); + self forceteleport( org, angles ); + self linkto( self.favoriteenemy, "j_head" ); + self animscripted( self.origin, self.angles, "zm_headpull" ); + self.linked_ent = self.favoriteenemy; + self.linked_ent setmovespeedscale( 0.5 ); + self thread screecher_melee_button_watcher(); + self screecher_start_attack(); +} + +screecher_fly_to_player( player ) +{ + self endon( "death" ); + self setanimstatefromasd( "zm_jump_loop" ); + self.anchor.origin = self.origin; + self.anchor.angles = self.angles; + self linkto( self.anchor ); + anim_id_back = self getanimfromasd( "zm_jump_land_success_fromback", 0 ); + anim_id_front = self getanimfromasd( "zm_jump_land_success_fromfront", 0 ); + end_time = gettime() + 2500; + dist = undefined; + dist_update = undefined; + + while ( end_time > gettime() ) + { + goal_pos_back = getstartorigin( player.origin, player.angles, anim_id_back ); + goal_pos_front = getstartorigin( player.origin, player.angles, anim_id_front ); + dist_back = distancesquared( self.anchor.origin, goal_pos_back ); + dist_front = distancesquared( self.anchor.origin, goal_pos_front ); + goal_pos = goal_pos_back; + goal_ang = getstartangles( player.origin, player.angles, anim_id_back ); + asd_state = "zm_jump_land_success_fromback"; + + if ( dist_front < dist_back ) + { + goal_pos = goal_pos_front; + goal_ang = getstartangles( player.origin, player.angles, anim_id_front ); + asd_state = "zm_jump_land_success_fromfront"; + } + + facing_vec = goal_pos - self.anchor.origin; + facing_angles = vectortoangles( facing_vec ); + dist = length( facing_vec ); + + if ( !isdefined( dist_update ) ) + { + time = 0.5; + vel = dist / time; + dist_update = vel * 0.1; + } + + if ( dist < dist_update ) + { + self.anchor.origin = goal_pos; + self.anchor.angles = goal_ang; + break; + } + + self.anchor.angles = facing_angles; + unit_facing_vec = vectornormalize( facing_vec ); + new_pos = self.anchor.origin + vectorscale( unit_facing_vec, dist_update ); + self.anchor moveto( new_pos, 0.1 ); + wait 0.1; + } + + return asd_state; +} + +finish_planting_equipment() +{ + while ( self isthrowinggrenade() && is_equipment( self getcurrentweapon() ) ) + wait 0.05; +} + +screecher_start_attack() +{ + player = self.favoriteenemy; + + if ( is_player_valid( player ) ) + { + player playsoundtoplayer( "zmb_screecher_impact", player ); + player finish_planting_equipment(); + player allowprone( 0 ); + player.screecher_weapon = player getcurrentweapon(); + player giveweapon( "screecher_arms_zm" ); + throwing_grenade = 0; + + if ( player isthrowinggrenade() ) + { + throwing_grenade = 1; + primaryweapons = player getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + { + player.screecher_weapon = primaryweapons[0]; + player forcegrenadethrow(); + player switchtoweaponimmediate( "screecher_arms_zm" ); + } + } + else if ( player.screecher_weapon == "riotshield_zm" ) + player switchtoweaponimmediate( "screecher_arms_zm" ); + else + player switchtoweapon( "screecher_arms_zm" ); + + player increment_is_drinking(); + wait 0.5; + player clientnotify( "scrStrt" ); + + if ( player isthrowinggrenade() && !throwing_grenade ) + { + primaryweapons = player getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + { + player.screecher_weapon = primaryweapons[0]; + player forcegrenadethrow(); + player switchtoweaponimmediate( "screecher_arms_zm" ); + } + } + + self.state = "attacking"; + self.attack_time = gettime(); + + if ( !getdvarint( _hash_E7EF8EB7 ) ) + player startpoisoning(); + + self thread screecher_player_down(); + } + else + self screecher_detach( player ); +} + +screecher_player_down() +{ + self endon( "death" ); + self endon( "runaway" ); + player = self.linked_ent; + player endon( "death" ); + player endon( "disconnect" ); + + player waittill( "player_downed" ); + + self thread screecher_detach( player ); +} + +screecher_first_seen_hint_think() +{ + if ( !flag( "solo_game" ) ) + return; + + fade_time = 3.0; + hudelem = self maps\mp\gametypes_zm\_hud_util::createfontstring( "objective", 2 ); + hudelem maps\mp\gametypes_zm\_hud_util::setpoint( "TOP", undefined, 0, 200 ); + hudelem.label = &"ZOMBIE_SCREECHER_ATTACH_FIRST"; + hudelem.sort = 0.5; + hudelem.alpha = 1; + hudelem fadeovertime( fade_time ); + hudelem.alpha = 0; + wait( fade_time ); + hudelem destroy(); +} + +screecher_attacking() +{ + player = self.favoriteenemy; + + if ( !isdefined( player ) ) + { + self thread screecher_detach( player ); + return; + } + + if ( !( isdefined( player.screecher_seen_hint ) && player.screecher_seen_hint ) ) + { + player thread screecher_first_seen_hint_think(); + player.screecher_seen_hint = 1; + } + + if ( screecher_should_runaway( player ) ) + { + self thread screecher_detach( player ); + player thread do_player_general_vox( "general", "screecher_jumpoff" ); + return; + } + + if ( self.attack_time < gettime() ) + { + scratch_score = 5; + players = get_players(); + self.screecher_score += scratch_score; + killed_player = self screecher_check_score(); + + if ( player.health > 0 && !( isdefined( killed_player ) && killed_player ) ) + { + self.attack_delay = self.attack_delay_base + randomint( self.attack_delay_offset ); + self.attack_time = gettime() + self.attack_delay; + self thread claw_fx( player, self.attack_delay * 0.001 ); + self playsound( "zmb_vocals_screecher_attack" ); + player playsoundtoplayer( "zmb_screecher_scratch", player ); + player thread do_player_general_vox( "general", "screecher_attack" ); + players = get_players(); + + if ( players.size == 1 ) + { + if ( level.near_miss == 0 ) + { + level.near_miss = 1; +/# + screecher_print( "first attack near_miss " + level.near_miss ); +#/ + } + } + } + } +} + +screecher_runaway() +{ + self endon( "death" ); +/# + screecher_print( "runaway" ); +#/ + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + self notify( "runaway" ); + self.state = "runaway"; + self.ignoreall = 1; + self setgoalpos( self.startinglocation ); + + self waittill( "goal" ); + + playfx( level._effect["screecher_spawn_b"], self.origin, ( 0, 0, 1 ) ); + self.no_powerups = 1; + self setfreecameralockonallowed( 0 ); + self animscripted( self.origin, self.angles, "zm_burrow" ); + self playsound( "zmb_screecher_dig" ); + maps\mp\animscripts\zm_shared::donotetracks( "burrow_anim" ); + self delete(); +} + +screecher_detach( player ) +{ + self endon( "death" ); + self.state = "detached"; + + if ( !isdefined( self.linked_ent ) ) + return; +/# + screecher_print( "detach" ); +#/ + if ( isdefined( player ) ) + { + player clientnotify( "scrEnd" ); + + if ( !( isdefined( player.isonbus ) && player.isonbus ) ) + player allowprone( 1 ); + + player takeweapon( "screecher_arms_zm" ); + + if ( !getdvarint( _hash_E7EF8EB7 ) ) + player stoppoisoning(); + + if ( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( player.intermission ) && player.intermission ) ) + player decrement_is_drinking(); + + if ( isdefined( player.screecher_weapon ) && player.screecher_weapon != "none" && is_player_valid( player ) && !is_equipment_that_blocks_purchase( player.screecher_weapon ) ) + player switchtoweapon( player.screecher_weapon ); + else if ( flag( "solo_game" ) && player hasperk( "specialty_quickrevive" ) ) + { + + } + else if ( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + primaryweapons = player getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + player switchtoweapon( primaryweapons[0] ); + } + + player.screecher_weapon = undefined; + } + + self unlink(); + self setclientfield( "render_third_person", 0 ); + + if ( isdefined( self.linked_ent ) ) + { + self.linked_ent.screecher = undefined; + self.linked_ent setmovespeedscale( 1 ); + self.linked_ent = undefined; + } + + self.green_light = player.green_light; + self animcustom( ::screecher_jump_down ); + + self waittill( "jump_down_done" ); + + maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_ai_screecher_blur", player ); + self animmode( "normal" ); + self.ignoreall = 1; + self setplayercollision( 1 ); + + if ( isdefined( level.screecher_should_burrow ) ) + { + if ( self [[ level.screecher_should_burrow ]]() ) + { +/# + screecher_print( "should burrow" ); +#/ + return; + } + } + + self thread screecher_runaway(); +} + +screecher_jump_down() +{ + self endon( "death" ); + self setanimstatefromasd( "zm_headpull_success" ); + wait 0.6; + self notify( "jump_down_done" ); +} + +create_claw_fx_hud( player ) +{ + self.claw_fx = newclienthudelem( player ); + self.claw_fx.horzalign = "fullscreen"; + self.claw_fx.vertalign = "fullscreen"; +} + +choose_claw_fx() +{ + direction = []; + direction[direction.size] = "fullscreen_claw_left"; + direction[direction.size] = "fullscreen_claw_right"; + direction[direction.size] = "fullscreen_claw_bottom"; + direction = array_randomize( direction ); + self.claw_fx setshader( direction[0], 640, 480 ); + self.claw_fx.alpha = 1; +} + +claw_fx( player, timeout ) +{ + self endon( "death" ); + claw_timeout = 0.25; + + if ( !isdefined( self.claw_fx ) ) + self create_claw_fx_hud( player ); + + self choose_claw_fx(); + self.claw_fx fadeovertime( claw_timeout ); + self.claw_fx.alpha = 0; + earthquake( randomfloatrange( 0.4, 0.5 ), claw_timeout, player.origin, 250 ); + maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_ai_screecher_blur", player, 0.25 ); +} + +screecher_cleanup() +{ + self waittill( "death", attacker ); + + if ( isdefined( attacker ) && isplayer( attacker ) ) + { + if ( isdefined( self.damagelocation ) && isdefined( self.damagemod ) ) + level thread maps\mp\zombies\_zm_audio::player_zombie_kill_vox( self.damagelocation, attacker, self.damagemod, self ); + } + + if ( isdefined( self.loopsoundent ) ) + { + self.loopsoundent delete(); + self.loopsoundent = undefined; + } + + player = self.linked_ent; + + if ( isdefined( player ) ) + { + player playsound( "zmb_vocals_screecher_death" ); + player setmovespeedscale( 1 ); + maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_ai_screecher_blur", player ); + + if ( isdefined( player.screecher_weapon ) ) + { + player clientnotify( "scrEnd" ); + + if ( !( isdefined( player.isonbus ) && player.isonbus ) ) + player allowprone( 1 ); + + player takeweapon( "screecher_arms_zm" ); + + if ( !getdvarint( _hash_E7EF8EB7 ) ) + player stoppoisoning(); + + if ( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( player.intermission ) && player.intermission ) ) + player decrement_is_drinking(); + + if ( player.screecher_weapon != "none" && is_player_valid( player ) ) + player switchtoweapon( player.screecher_weapon ); + else + { + primaryweapons = player getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + player switchtoweapon( primaryweapons[0] ); + } + + player.screecher_weapon = undefined; + } + } + + if ( isdefined( self.claw_fx ) ) + self.claw_fx destroy(); + + if ( isdefined( self.anchor ) ) + self.anchor delete(); + + if ( isdefined( level.screecher_cleanup ) ) + self [[ level.screecher_cleanup ]](); + + if ( level.zombie_screecher_count > 0 ) + { + level.zombie_screecher_count--; +/# + screecher_print( "screecher total " + level.zombie_screecher_count ); +#/ + } +} + +screecher_distance_tracking() +{ + self endon( "death" ); + + while ( true ) + { + can_delete = 1; + players = get_players(); + + foreach ( player in players ) + { + if ( player.sessionstate == "spectator" ) + continue; + + dist_sq = distancesquared( self.origin, player.origin ); + + if ( dist_sq >= 4000000 ) + continue; + + can_see = player maps\mp\zombies\_zm_utility::is_player_looking_at( self.origin, 0.9, 0 ); + + if ( can_see || dist_sq < 1000000 ) + { + can_delete = 0; + break; + } + } + + if ( can_delete ) + { + self notify( "zombie_delete" ); + + if ( isdefined( self.anchor ) ) + self.anchor delete(); + + self delete(); + recalc_zombie_array(); + } + + wait 0.1; + } +} + +screecher_melee_button_watcher() +{ + self endon( "death" ); + + while ( isdefined( self.linked_ent ) ) + { + player = self.linked_ent; + + if ( player meleebuttonpressed() && player ismeleeing() ) + { + self screecher_melee_damage( player ); + + while ( player meleebuttonpressed() || player ismeleeing() ) + wait 0.05; + } + + wait 0.05; + } +} + +screecher_melee_damage( player ) +{ + one_player = 0; + melee_score = 0; + + if ( player hasweapon( "bowie_knife_zm" ) ) + { + if ( one_player ) + melee_score = 30; + else + melee_score = 10; + } + else if ( player hasweapon( "tazer_knuckles_zm" ) ) + { + if ( one_player ) + melee_score = 30; + else + melee_score = 15; + } + else if ( one_player ) + melee_score = 15; + else + melee_score = 6; + + extra_score = 0; + + if ( self.screecher_score > 0 && !one_player ) + { + if ( melee_score > self.screecher_score ) + { + extra_score = melee_score - self.screecher_score; + self.screecher_score = 0; + } + else + self.screecher_score -= melee_score; + } + + if ( self.screecher_score <= 0 || one_player ) + { + self.player_score += melee_score; + + if ( extra_score > 0 ) + self.player_score += extra_score; + } + + self playsound( "zmb_vocals_screecher_pain" ); + + if ( level.zombie_vars[player.team]["zombie_insta_kill"] ) + self.player_score = 30; + else + player thread do_player_general_vox( "general", "screecher_cut" ); +/# + if ( getdvarint( _hash_6A65F83E ) ) + self.player_score = 30; +#/ + self screecher_check_score(); +} + +screecher_damage_func( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + if ( isdefined( self.linked_ent ) ) + { + if ( isplayer( einflictor ) && smeansofdeath == "MOD_MELEE" ) + return 0; + } + + return idamage; +} + +screecher_death_func() +{ + self unlink(); + self.noragdoll = 1; + self setanimstatefromasd( "zm_death" ); + maps\mp\animscripts\zm_shared::donotetracks( "death_anim" ); + playfx( level._effect["screecher_death"], self.origin ); + + if ( isdefined( self.attacker ) && isplayer( self.attacker ) ) + { + self.attacker maps\mp\zombies\_zm_stats::increment_client_stat( "screechers_killed", 0 ); + self.attacker maps\mp\zombies\_zm_stats::increment_player_stat( "screechers_killed" ); + } + + self delete(); + return 1; +} + +screecher_check_score() +{ + if ( self.player_score >= 30 ) + { + player = self.linked_ent; + + if ( isdefined( player ) ) + { + player notify( "i_dont_think_they_exist" ); + player maps\mp\zombies\_zm_stats::increment_client_stat( "screecher_minigames_won", 0 ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "screecher_minigames_won" ); + } + + self dodamage( self.health + 666, self.origin ); + } + else if ( self.screecher_score >= 15 ) + { +/# + if ( getdvarint( _hash_6A65F83E ) ) + return false; +#/ + player = self.linked_ent; + + if ( isdefined( player ) ) + { + self.meleedamage = player.health; + player dodamage( player.health, self.origin, self ); + self screecher_detach( player ); + player maps\mp\zombies\_zm_stats::increment_client_stat( "screecher_minigames_lost", 0 ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "screecher_minigames_lost" ); + return true; + } + } +/# + screecher_print( "score: player " + self.player_score + " screecher " + self.screecher_score ); +#/ + return false; +} + +screecher_debug_axis() +{ +/# + self endon( "death" ); + + while ( true ) + { + if ( isdefined( self.favoriteenemy ) ) + { + player = self.favoriteenemy; + anim_id = self getanimfromasd( "zm_jump_land_success", 0 ); + org = getstartorigin( player.origin, player.angles, anim_id ); + angles = getstartangles( player.origin, player.angles, anim_id ); + + if ( !isdefined( player.bone_fxaxis ) ) + { + player.bone_fxaxis = spawn( "script_model", org ); + player.bone_fxaxis setmodel( "fx_axis_createfx" ); + } + + if ( isdefined( player.bone_fxaxis ) ) + { + player.bone_fxaxis.origin = org; + player.bone_fxaxis.angles = angles; + } + } + + wait 0.1; + } +#/ +} + +screecher_print( str ) +{ +/# + if ( getdvarint( _hash_72C3A9C6 ) ) + { + iprintln( "screecher: " + str + "\\n" ); + + if ( isdefined( self ) ) + { + if ( isdefined( self.debug_msg ) ) + self.debug_msg[self.debug_msg.size] = str; + else + { + self.debug_msg = []; + self.debug_msg[self.debug_msg.size] = str; + } + } + } +#/ +} diff --git a/ZM/Maps/Tranzit/maps/mp/zombies/_zm_banking.gsc b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_banking.gsc new file mode 100644 index 0000000..402fef8 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_banking.gsc @@ -0,0 +1,304 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_unitrigger; + +init() +{ + onplayerconnect_callback( ::onplayerconnect_bank_deposit_box ); + + if ( !isdefined( level.ta_vaultfee ) ) + level.ta_vaultfee = 100; + + if ( !isdefined( level.ta_tellerfee ) ) + level.ta_tellerfee = 100; +} + +main() +{ + if ( !isdefined( level.banking_map ) ) + level.banking_map = level.script; + + level thread bank_teller_init(); + level thread bank_deposit_box(); +} + +bank_teller_init() +{ + level.bank_teller_dmg_trig = getent( "bank_teller_tazer_trig", "targetname" ); + + if ( isdefined( level.bank_teller_dmg_trig ) ) + { + level.bank_teller_transfer_trig = getent( level.bank_teller_dmg_trig.target, "targetname" ); + level.bank_teller_powerup_spot = getstruct( level.bank_teller_transfer_trig.target, "targetname" ); + level thread bank_teller_logic(); + level.bank_teller_transfer_trig.origin += vectorscale( ( -1, 0, 0 ), 25.0 ); + level.bank_teller_transfer_trig trigger_off(); + level.bank_teller_transfer_trig sethintstring( &"ZOMBIE_TELLER_GIVE_MONEY", level.ta_tellerfee ); + } +} + +bank_teller_logic() +{ + level endon( "end_game" ); + + while ( true ) + { + level.bank_teller_dmg_trig waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, blah ); + + if ( isdefined( attacker ) && isplayer( attacker ) && damage == 1500 && type == "MOD_MELEE" ) + { + bank_teller_give_money(); + level.bank_teller_transfer_trig trigger_off(); + } + } +} + +bank_teller_give_money() +{ + level endon( "end_game" ); + level endon( "stop_bank_teller" ); + level.bank_teller_transfer_trig trigger_on(); + bank_transfer = undefined; + + while ( true ) + { + level.bank_teller_transfer_trig waittill( "trigger", player ); + + if ( !is_player_valid( player, 0 ) || player.score < 1000 + level.ta_tellerfee ) + continue; + + if ( !isdefined( bank_transfer ) ) + { + bank_transfer = maps\mp\zombies\_zm_powerups::specific_powerup_drop( "teller_withdrawl", level.bank_teller_powerup_spot.origin + vectorscale( ( 0, 0, -1 ), 40.0 ) ); + bank_transfer thread stop_bank_teller(); + bank_transfer.value = 0; + } + + bank_transfer.value += 1000; + bank_transfer notify( "powerup_reset" ); + bank_transfer thread maps\mp\zombies\_zm_powerups::powerup_timeout(); + player maps\mp\zombies\_zm_score::minus_to_player_score( 1000 + level.ta_tellerfee ); + level notify( "bank_teller_used" ); + } +} + +stop_bank_teller() +{ + level endon( "end_game" ); + + self waittill( "death" ); + + level notify( "stop_bank_teller" ); +} + +delete_bank_teller() +{ + wait 1; + level notify( "stop_bank_teller" ); + bank_teller_dmg_trig = getent( "bank_teller_tazer_trig", "targetname" ); + bank_teller_transfer_trig = getent( bank_teller_dmg_trig.target, "targetname" ); + bank_teller_dmg_trig delete(); + bank_teller_transfer_trig delete(); +} + +onplayerconnect_bank_deposit_box() +{ + online_game = sessionmodeisonlinegame(); + + if ( !online_game ) + self.account_value = 0; + else + self.account_value = self maps\mp\zombies\_zm_stats::get_map_stat( "depositBox", level.banking_map ); +} + +bank_deposit_box() +{ + level.bank_deposit_max_amount = 250000; + level.bank_deposit_ddl_increment_amount = 1000; + level.bank_account_max = level.bank_deposit_max_amount / level.bank_deposit_ddl_increment_amount; + level.bank_account_increment = int( level.bank_deposit_ddl_increment_amount / 1000 ); + deposit_triggers = getstructarray( "bank_deposit", "targetname" ); + array_thread( deposit_triggers, ::bank_deposit_unitrigger ); + withdraw_triggers = getstructarray( "bank_withdraw", "targetname" ); + array_thread( withdraw_triggers, ::bank_withdraw_unitrigger ); +} + +bank_deposit_unitrigger() +{ + bank_unitrigger( "bank_deposit", ::trigger_deposit_update_prompt, ::trigger_deposit_think, 5, 5, undefined, 5 ); +} + +bank_withdraw_unitrigger() +{ + bank_unitrigger( "bank_withdraw", ::trigger_withdraw_update_prompt, ::trigger_withdraw_think, 5, 5, undefined, 5 ); +} + +bank_unitrigger( name, prompt_fn, think_fn, override_length, override_width, override_height, override_radius ) +{ + unitrigger_stub = spawnstruct(); + unitrigger_stub.origin = self.origin; + + if ( isdefined( self.script_angles ) ) + unitrigger_stub.angles = self.script_angles; + else + unitrigger_stub.angles = self.angles; + + unitrigger_stub.script_angles = unitrigger_stub.angles; + + if ( isdefined( override_length ) ) + unitrigger_stub.script_length = override_length; + else if ( isdefined( self.script_length ) ) + unitrigger_stub.script_length = self.script_length; + else + unitrigger_stub.script_length = 32; + + if ( isdefined( override_width ) ) + unitrigger_stub.script_width = override_width; + else if ( isdefined( self.script_width ) ) + unitrigger_stub.script_width = self.script_width; + else + unitrigger_stub.script_width = 32; + + if ( isdefined( override_height ) ) + unitrigger_stub.script_height = override_height; + else if ( isdefined( self.script_height ) ) + unitrigger_stub.script_height = self.script_height; + else + unitrigger_stub.script_height = 64; + + if ( isdefined( override_radius ) ) + unitrigger_stub.script_radius = override_radius; + else if ( isdefined( self.radius ) ) + unitrigger_stub.radius = self.radius; + else + unitrigger_stub.radius = 32; + + if ( isdefined( self.script_unitrigger_type ) ) + unitrigger_stub.script_unitrigger_type = self.script_unitrigger_type; + else + { + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * unitrigger_stub.script_length / 2; + } + + unitrigger_stub.cursor_hint = "HINT_NOICON"; + unitrigger_stub.targetname = name; + maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + unitrigger_stub.prompt_and_visibility_func = prompt_fn; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, think_fn ); +} + +trigger_deposit_update_prompt( player ) +{ + if ( player.score < level.bank_deposit_ddl_increment_amount || player.account_value >= level.bank_account_max ) + { + player show_balance(); + self sethintstring( "" ); + return false; + } + + self sethintstring( &"ZOMBIE_BANK_DEPOSIT_PROMPT", level.bank_deposit_ddl_increment_amount ); + return true; +} + +trigger_deposit_think() +{ + self endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "trigger", player ); + + if ( !is_player_valid( player ) ) + continue; + + if ( player.score >= level.bank_deposit_ddl_increment_amount && player.account_value < level.bank_account_max ) + { + player playsoundtoplayer( "zmb_vault_bank_deposit", player ); + player.score -= level.bank_deposit_ddl_increment_amount; + player.account_value += level.bank_account_increment; + player maps\mp\zombies\_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map ); + + if ( isdefined( level.custom_bank_deposit_vo ) ) + player thread [[ level.custom_bank_deposit_vo ]](); + + if ( player.account_value >= level.bank_account_max ) + self sethintstring( "" ); + } + else + player thread do_player_general_vox( "general", "exert_sigh", 10, 50 ); + + player show_balance(); + } +} + +trigger_withdraw_update_prompt( player ) +{ + if ( player.account_value <= 0 ) + { + self sethintstring( "" ); + player show_balance(); + return false; + } + + self sethintstring( &"ZOMBIE_BANK_WITHDRAW_PROMPT", level.bank_deposit_ddl_increment_amount, level.ta_vaultfee ); + return true; +} + +trigger_withdraw_think() +{ + self endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "trigger", player ); + + if ( !is_player_valid( player ) ) + continue; + + if ( player.account_value >= level.bank_account_increment ) + { + player playsoundtoplayer( "zmb_vault_bank_withdraw", player ); + player.score += level.bank_deposit_ddl_increment_amount; + level notify( "bank_withdrawal" ); + player.account_value -= level.bank_account_increment; + player maps\mp\zombies\_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map ); + + if ( isdefined( level.custom_bank_withdrawl_vo ) ) + player thread [[ level.custom_bank_withdrawl_vo ]](); + else + player thread do_player_general_vox( "general", "exert_laugh", 10, 50 ); + + player thread player_withdraw_fee(); + + if ( player.account_value < level.bank_account_increment ) + self sethintstring( "" ); + } + else + player thread do_player_general_vox( "general", "exert_sigh", 10, 50 ); + + player show_balance(); + } +} + +player_withdraw_fee() +{ + self endon( "disconnect" ); + wait_network_frame(); + self.score -= level.ta_vaultfee; +} + +show_balance() +{ +/# + iprintlnbold( "DEBUG BANKER: " + self.name + " account worth " + self.account_value ); +#/ +} diff --git a/ZM/Maps/Tranzit/maps/mp/zombies/_zm_equip_electrictrap.gsc b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_equip_electrictrap.gsc new file mode 100644 index 0000000..038582a --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_equip_electrictrap.gsc @@ -0,0 +1,417 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_power; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_traps; + +init() +{ + if ( !maps\mp\zombies\_zm_equipment::is_equipment_included( "equip_electrictrap_zm" ) ) + return; + + level.electrictrap_name = "equip_electrictrap_zm"; + maps\mp\zombies\_zm_equipment::register_equipment( "equip_electrictrap_zm", &"ZOMBIE_EQUIP_ELECTRICTRAP_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_ELECTRICTRAP_HOWTO", "etrap_zm_icon", "electrictrap", undefined, ::transfertrap, ::droptrap, ::pickuptrap, ::placetrap ); + maps\mp\zombies\_zm_equipment::add_placeable_equipment( "equip_electrictrap_zm", "p6_anim_zm_buildable_etrap" ); + level thread onplayerconnect(); + maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "equip_electrictrap", &"ZOMBIE_EQUIP_ELECTRICTRAP_PICKUP_HINT_STRING" ); + level._effect["etrap_on"] = loadfx( "maps/zombie/fx_zmb_tranzit_electric_trap_on" ); + thread wait_init_damage(); +} + +wait_init_damage() +{ + while ( !isdefined( level.zombie_vars ) || !isdefined( level.zombie_vars["zombie_health_start"] ) ) + wait 1; + + level.etrap_damage = maps\mp\zombies\_zm::ai_zombie_health( 50 ); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread onplayerspawned(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + self thread setupwatchers(); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread watchelectrictrapuse(); + } +} + +setupwatchers() +{ + self waittill( "weapon_watchers_created" ); + + watcher = maps\mp\gametypes_zm\_weaponobjects::getweaponobjectwatcher( "equip_electrictrap" ); + watcher.onspawnretrievetriggers = maps\mp\zombies\_zm_equipment::equipment_onspawnretrievableweaponobject; +} + +watchelectrictrapuse() +{ + self notify( "watchElectricTrapUse" ); + self endon( "watchElectricTrapUse" ); + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "equipment_placed", weapon, weapname ); + + if ( weapname == level.electrictrap_name ) + { + self cleanupoldtrap(); + self.buildableelectrictrap = weapon; + self thread startelectrictrapdeploy( weapon ); + } + } +} + +cleanupoldtrap() +{ + if ( isdefined( self.buildableelectrictrap ) ) + { + if ( isdefined( self.buildableelectrictrap.stub ) ) + { + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildableelectrictrap.stub ); + self.buildableelectrictrap.stub = undefined; + } + + self.buildableelectrictrap delete(); + } + + if ( isdefined( level.electrap_sound_ent ) ) + { + level.electrap_sound_ent delete(); + level.electrap_sound_ent = undefined; + } +} + +watchforcleanup() +{ + self notify( "etrap_cleanup" ); + self endon( "etrap_cleanup" ); + self waittill_any( "death_or_disconnect", "equip_electrictrap_zm_taken", "equip_electrictrap_zm_pickup" ); + cleanupoldtrap(); +} + +placetrap( origin, angles ) +{ + item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_etrap", "equip_electrictrap_zm", origin, angles ); + + if ( isdefined( item ) ) + { + item.owner = self; + item.zombie_attack_callback = ::zombie_attacked_trap; + } + + return item; +} + +droptrap() +{ + item = self maps\mp\zombies\_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_etrap", "equip_electrictrap_zm", self.origin, self.angles ); + + if ( isdefined( item ) ) + item.electrictrap_health = self.electrictrap_health; + + self.electrictrap_health = undefined; + return item; +} + +pickuptrap( item ) +{ + item.owner = self; + self.electrictrap_health = item.electrictrap_health; + item.electrictrap_health = undefined; +} + +transfertrap( fromplayer, toplayer ) +{ + buildableelectrictrap = toplayer.buildableelectrictrap; + electrictrap_health = toplayer.electrictrap_health; + toplayer.buildableelectrictrap = fromplayer.buildableelectrictrap; + toplayer.buildableelectrictrap.original_owner = toplayer; + toplayer notify( "equip_electrictrap_zm_taken" ); + toplayer thread startelectrictrapdeploy( toplayer.buildableelectrictrap ); + toplayer.electrictrap_health = fromplayer.electrictrap_health; + fromplayer.buildableelectrictrap = buildableelectrictrap; + fromplayer notify( "equip_electrictrap_zm_taken" ); + + if ( isdefined( fromplayer.buildableelectrictrap ) ) + { + fromplayer thread startelectrictrapdeploy( fromplayer.buildableelectrictrap ); + fromplayer.buildableelectrictrap.original_owner = fromplayer; + fromplayer.buildableelectrictrap.owner = fromplayer; + } + else + fromplayer maps\mp\zombies\_zm_equipment::equipment_release( "equip_electrictrap_zm" ); + + fromplayer.electrictrap_health = electrictrap_health; +} + +startelectrictrapdeploy( weapon ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_electrictrap_zm_taken" ); + self thread watchforcleanup(); + electricradius = 45; + + if ( !isdefined( self.electrictrap_health ) ) + self.electrictrap_health = 60; + + if ( isdefined( weapon ) ) + { +/# + weapon thread debugelectrictrap( electricradius ); +#/ + if ( isdefined( level.equipment_etrap_needs_power ) && level.equipment_etrap_needs_power ) + { + weapon.power_on = 0; + maps\mp\zombies\_zm_power::add_temp_powered_item( ::trap_power_on, ::trap_power_off, ::trap_in_range, maps\mp\zombies\_zm_power::cost_high, 1, weapon.power_on, weapon ); + } + else + weapon.power_on = 1; + + if ( !weapon.power_on ) + self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" ); + + self thread electrictrapthink( weapon, electricradius ); + + if ( !( isdefined( level.equipment_etrap_needs_power ) && level.equipment_etrap_needs_power ) ) + self thread electrictrapdecay( weapon ); + + self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( weapon ); + + weapon waittill( "death" ); + + if ( isdefined( level.electrap_sound_ent ) ) + { + level.electrap_sound_ent playsound( "wpn_zmb_electrap_stop" ); + level.electrap_sound_ent delete(); + level.electrap_sound_ent = undefined; + } + + self notify( "etrap_cleanup" ); + } +} + +trap_in_range( delta, origin, radius ) +{ + if ( distancesquared( self.target.origin, origin ) < radius * radius ) + return true; + + return false; +} + +trap_power_on( origin, radius ) +{ +/# + println( "^1ZM POWER: trap on\\n" ); +#/ + if ( !isdefined( self.target ) ) + return; + + self.target.power_on = 1; + self.target.power_on_time = gettime(); + self.target notify( "stop_attracting_zombies" ); + + if ( !isdefined( level.electrap_sound_ent ) ) + level.electrap_sound_ent = spawn( "script_origin", self.target.origin ); + + level.electrap_sound_ent playsound( "wpn_zmb_electrap_start" ); + level.electrap_sound_ent playloopsound( "wpn_zmb_electrap_loop", 2 ); + self.target thread trapfx(); +} + +trap_power_off( origin, radius ) +{ +/# + println( "^1ZM POWER: trap off\\n" ); +#/ + if ( !isdefined( self.target ) ) + return; + + self.target.power_on = 0; + self.target thread item_attract_zombies(); + + if ( isdefined( level.electrap_sound_ent ) ) + { + level.electrap_sound_ent playsound( "wpn_zmb_electrap_stop" ); + level.electrap_sound_ent delete(); + level.electrap_sound_ent = undefined; + } +} + +trapfx() +{ + self endon( "disconnect" ); + + while ( isdefined( self ) && ( isdefined( self.power_on ) && self.power_on ) ) + { + playfxontag( level._effect["etrap_on"], self, "tag_origin" ); + wait 0.3; + } +} + +zombie_attacked_trap( zombie ) +{ + if ( isdefined( self.power_on ) && self.power_on ) + self zap_zombie( zombie ); +} + +electrocution_lockout( time ) +{ + level.electrocuting_zombie = 1; + wait( time ); + level.electrocuting_zombie = 0; +} + +zap_zombie( zombie ) +{ + if ( isdefined( zombie.ignore_electric_trap ) && zombie.ignore_electric_trap ) + return; + + if ( zombie.health > level.etrap_damage ) + { + zombie dodamage( level.etrap_damage, self.origin ); + zombie.ignore_electric_trap = 1; + return; + } + + self playsound( "wpn_zmb_electrap_zap" ); + + if ( !( isdefined( level.electrocuting_zombie ) && level.electrocuting_zombie ) ) + { + thread electrocution_lockout( 2 ); + zombie thread play_elec_vocals(); + zombie thread maps\mp\zombies\_zm_traps::electroctute_death_fx(); + zombie.is_on_fire = 0; + zombie notify( "stop_flame_damage" ); + } + + zombie thread electrictrapkill( self ); +} + +etrap_choke() +{ + if ( !isdefined( level.etrap_choke_count ) ) + level.etrap_choke_count = 0; + + level.etrap_choke_count++; + + if ( !( level.etrap_choke_count >= 5 ) ) + { + wait 0.05; + level.etrap_choke_count = 0; + } +} + +electrictrapthink( weapon, electricradius ) +{ + weapon endon( "death" ); + radiussquared = electricradius * electricradius; + + while ( isdefined( weapon ) ) + { + if ( weapon.power_on && gettime() - weapon.power_on_time > 2000 ) + { + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( !isdefined( zombie ) || !isalive( zombie ) ) + continue; + + if ( isdefined( zombie.ignore_electric_trap ) && zombie.ignore_electric_trap ) + continue; + + if ( distancesquared( weapon.origin, zombie.origin ) < radiussquared ) + { + weapon zap_zombie( zombie ); + wait 0.15; + } + + etrap_choke(); + } + + players = get_players(); + + foreach ( player in players ) + { + if ( is_player_valid( player ) && distancesquared( weapon.origin, player.origin ) < radiussquared ) + { + player thread maps\mp\zombies\_zm_traps::player_elec_damage(); + etrap_choke(); + } + + etrap_choke(); + } + } + + wait 0.1; + } +} + +electrictrapkill( weapon ) +{ + self endon( "death" ); + wait( randomfloatrange( 0.1, 0.4 ) ); + self dodamage( self.health + 666, self.origin ); +} + +electrictrapdecay( weapon ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_electrictrap_zm_taken" ); + + while ( isdefined( weapon ) ) + { + if ( weapon.power_on ) + { + self.electrictrap_health--; + + if ( self.electrictrap_health <= 0 ) + { + self cleanupoldtrap(); + self.electrictrap_health = undefined; + self thread maps\mp\zombies\_zm_equipment::equipment_release( "equip_electrictrap_zm" ); + return; + } + } + + wait 1; + } +} + +debugelectrictrap( radius ) +{ +/# + while ( isdefined( self ) ) + { + if ( getdvarint( _hash_EB512CB7 ) ) + circle( self.origin, radius, ( 1, 1, 1 ), 0, 1, 1 ); + + wait 0.05; + } +#/ +} diff --git a/ZM/Maps/Tranzit/maps/mp/zombies/_zm_equip_turret.gsc b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_equip_turret.gsc new file mode 100644 index 0000000..250c971 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_equip_turret.gsc @@ -0,0 +1,358 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_power; +#include maps\mp\zombies\_zm_mgturret; +#include maps\mp\zombies\_zm_buildables; + +init() +{ + if ( !maps\mp\zombies\_zm_equipment::is_equipment_included( "equip_turret_zm" ) ) + return; + + precachemodel( "p6_anim_zm_buildable_turret" ); + precacheturret( "zombie_bullet_crouch_zm" ); + level.turret_name = "equip_turret_zm"; + maps\mp\zombies\_zm_equipment::register_equipment( "equip_turret_zm", &"ZOMBIE_EQUIP_TURRET_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_TURRET_HOWTO", "turret_zm_icon", "turret", undefined, ::transferturret, ::dropturret, ::pickupturret, ::placeturret ); + maps\mp\zombies\_zm_equipment::add_placeable_equipment( "equip_turret_zm", "p6_anim_zm_buildable_turret" ); + level thread onplayerconnect(); + maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "equip_turret", &"ZOMBIE_EQUIP_TURRET_PICKUP_HINT_STRING" ); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread onplayerspawned(); + } +} + +onplayerspawned() +{ + self endon( "disconnect" ); + self thread setupwatchers(); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread watchturretuse(); + } +} + +setupwatchers() +{ + self waittill( "weapon_watchers_created" ); + + watcher = maps\mp\gametypes_zm\_weaponobjects::getweaponobjectwatcher( "equip_turret" ); + watcher.onspawnretrievetriggers = maps\mp\zombies\_zm_equipment::equipment_onspawnretrievableweaponobject; +} + +watchturretuse() +{ + self notify( "watchTurretUse" ); + self endon( "watchTurretUse" ); + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "equipment_placed", weapon, weapname ); + + if ( weapname == level.turret_name ) + { + self cleanupoldturret(); + self.buildableturret = weapon; + self thread startturretdeploy( weapon ); + } + } +} + +cleanupoldturret() +{ + if ( isdefined( self.buildableturret ) ) + { + if ( isdefined( self.buildableturret.stub ) ) + { + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildableturret.stub ); + self.buildableturret.stub = undefined; + } + + if ( isdefined( self.buildableturret.turret ) ) + { + if ( isdefined( self.buildableturret.turret.sound_ent ) ) + self.buildableturret.turret.sound_ent delete(); + + self.buildableturret.turret delete(); + } + + if ( isdefined( self.buildableturret.sound_ent ) ) + { + self.buildableturret.sound_ent delete(); + self.buildableturret.sound_ent = undefined; + } + + self.buildableturret delete(); + self.turret_health = undefined; + } + else if ( isdefined( self.turret ) ) + { + self.turret notify( "stop_burst_fire_unmanned" ); + self.turret delete(); + } + + self.turret = undefined; + self notify( "turret_cleanup" ); +} + +watchforcleanup() +{ + self notify( "turret_cleanup" ); + self endon( "turret_cleanup" ); + self waittill_any( "death_or_disconnect", "equip_turret_zm_taken", "equip_turret_zm_pickup" ); + cleanupoldturret(); +} + +placeturret( origin, angles ) +{ + item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_turret", "equip_turret_zm", origin, angles ); + + if ( isdefined( item ) ) + item.owner = self; + + return item; +} + +dropturret() +{ + item = self maps\mp\zombies\_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_turret", "equip_turret_zm", self.origin, self.angles ); + + if ( isdefined( item ) ) + item.turret_health = self.turret_health; + + self.turret_health = undefined; + return item; +} + +pickupturret( item ) +{ + item.owner = self; + self.turret_health = item.turret_health; + item.turret_health = undefined; +} + +transferturret( fromplayer, toplayer ) +{ + buildableturret = toplayer.buildableturret; + turret = toplayer.turret; + toplayer.buildableturret = fromplayer.buildableturret; + toplayer.turret = fromplayer.turret; + fromplayer.buildableturret = buildableturret; + fromplayer.turret = turret; + toplayer.buildableturret.original_owner = toplayer; + toplayer notify( "equip_turret_zm_taken" ); + toplayer thread startturretdeploy( toplayer.buildableturret ); + fromplayer notify( "equip_turret_zm_taken" ); + + if ( isdefined( fromplayer.buildableturret ) ) + { + fromplayer thread startturretdeploy( fromplayer.buildableturret ); + fromplayer.buildableturret.original_owner = fromplayer; + fromplayer.buildableturret.owner = fromplayer; + } + else + fromplayer maps\mp\zombies\_zm_equipment::equipment_release( "equip_turret_zm" ); + + turret_health = toplayer.turret_health; + toplayer.turret_health = fromplayer.turret_health; + fromplayer.turret_health = turret_health; +} + +startturretdeploy( weapon ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_turret_zm_taken" ); + self thread watchforcleanup(); + + if ( !isdefined( self.turret_health ) ) + self.turret_health = 60; + + if ( isdefined( weapon ) ) + { + weapon hide(); + wait 0.1; + + if ( isdefined( weapon.power_on ) && weapon.power_on ) + weapon.turret notify( "stop_burst_fire_unmanned" ); + + if ( !isdefined( weapon ) ) + return; + + if ( isdefined( self.turret ) ) + { + self.turret notify( "stop_burst_fire_unmanned" ); + self.turret notify( "turret_deactivated" ); + self.turret delete(); + } + + turret = spawnturret( "misc_turret", weapon.origin, "zombie_bullet_crouch_zm" ); + turret.turrettype = "sentry"; + turret setturrettype( turret.turrettype ); + turret setmodel( "p6_anim_zm_buildable_turret" ); + turret.origin = weapon.origin; + turret.angles = weapon.angles; + turret linkto( weapon ); + turret makeunusable(); + turret.owner = self; + turret setowner( turret.owner ); + turret maketurretunusable(); + turret setmode( "auto_nonai" ); + turret setdefaultdroppitch( 45.0 ); + turret setconvergencetime( 0.3 ); + turret setturretteam( self.team ); + turret.team = self.team; + turret.damage_own_team = 1; + turret.turret_active = 1; + weapon.turret = turret; + self.turret = turret; + + if ( isdefined( level.equipment_turret_needs_power ) && level.equipment_turret_needs_power ) + { + weapon.power_on = 0; + maps\mp\zombies\_zm_power::add_temp_powered_item( ::turret_power_on, ::turret_power_off, ::turret_in_range, maps\mp\zombies\_zm_power::cost_high, 1, weapon.power_on, weapon ); + } + else + weapon.power_on = 1; + + if ( weapon.power_on ) + turret thread maps\mp\zombies\_zm_mgturret::burst_fire_unmanned(); + else + self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" ); + + if ( !( isdefined( level.equipment_turret_needs_power ) && level.equipment_turret_needs_power ) ) + self thread turretdecay( weapon ); + + self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( weapon ); + + while ( isdefined( weapon ) ) + { + if ( !is_true( weapon.power_on ) ) + { + if ( isdefined( self.buildableturret.sound_ent ) ) + { + self.buildableturret.sound_ent playsound( "wpn_zmb_turret_stop" ); + self.buildableturret.sound_ent delete(); + self.buildableturret.sound_ent = undefined; + } + } + + wait 0.1; + } + + if ( isdefined( self.buildableturret.sound_ent ) ) + { + self.buildableturret.sound_ent playsound( "wpn_zmb_turret_stop" ); + self.buildableturret.sound_ent delete(); + self.buildableturret.sound_ent = undefined; + } + + if ( isdefined( turret ) ) + { + turret notify( "stop_burst_fire_unmanned" ); + turret notify( "turret_deactivated" ); + turret delete(); + } + + self.turret = undefined; + self notify( "turret_cleanup" ); + } +} + +turret_in_range( delta, origin, radius ) +{ + if ( distancesquared( self.target.origin, origin ) < radius * radius ) + return true; + + return false; +} + +turret_power_on( origin, radius ) +{ +/# + println( "^1ZM POWER: turret on\\n" ); +#/ + if ( !isdefined( self.target ) ) + return; + + self.target.power_on = 1; + self.target.turret thread maps\mp\zombies\_zm_mgturret::burst_fire_unmanned(); + player = self.target.turret.owner; + + if ( !isdefined( player.buildableturret.sound_ent ) ) + player.buildableturret.sound_ent = spawn( "script_origin", self.target.turret.origin ); + + player.buildableturret.sound_ent playsound( "wpn_zmb_turret_start" ); + player.buildableturret.sound_ent playloopsound( "wpn_zmb_turret_loop", 2 ); +} + +turret_power_off( origin, radius ) +{ +/# + println( "^1ZM POWER: turret off\\n" ); +#/ + if ( !isdefined( self.target ) ) + return; + + self.target.power_on = 0; + self.target.turret notify( "stop_burst_fire_unmanned" ); + player = self.target.turret.owner; + + if ( isdefined( player.buildableturret.sound_ent ) ) + { + player.buildableturret.sound_ent playsound( "wpn_zmb_turret_stop" ); + player.buildableturret.sound_ent delete(); + player.buildableturret.sound_ent = undefined; + } +} + +turretdecay( weapon ) +{ + self endon( "death" ); + self endon( "disconnect" ); + + while ( isdefined( weapon ) ) + { + if ( weapon.power_on ) + { + self.turret_health--; + + if ( self.turret_health <= 0 ) + { + self cleanupoldturret(); + self thread maps\mp\zombies\_zm_equipment::equipment_release( "equip_turret_zm" ); + return; + } + } + + wait 1; + } +} + +debugturret( radius ) +{ +/# + while ( isdefined( self ) ) + { + circle( self.origin, radius, ( 1, 1, 1 ), 0, 1, 1 ); + wait 0.05; + } +#/ +} diff --git a/ZM/Maps/Tranzit/maps/mp/zombies/_zm_game_module_grief.gsc b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_game_module_grief.gsc new file mode 100644 index 0000000..739c351 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_game_module_grief.gsc @@ -0,0 +1,14 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_game_module_utility; +#include maps\mp\zombies\_zm_game_module; + +register_game_module() +{ + level.game_module_grief_index = 9; + maps\mp\zombies\_zm_game_module::register_game_module( level.game_module_grief_index, "zgrief", ::onpreinitgametype, ::onpostinitgametype, undefined, ::onspawnzombie, ::onstartgametype ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/zombies/_zm_game_module_meat.gsc b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_game_module_meat.gsc new file mode 100644 index 0000000..09cd690 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_game_module_meat.gsc @@ -0,0 +1,9 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_game_module_meat_utility; +#include maps\mp\zombies\_zm_game_module_utility; + diff --git a/ZM/Maps/Tranzit/maps/mp/zombies/_zm_game_module_meat_utility.gsc b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_game_module_meat_utility.gsc new file mode 100644 index 0000000..f9b9ab1 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_game_module_meat_utility.gsc @@ -0,0 +1,666 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_game_module_utility; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\gametypes_zm\zmeat; +#include maps\mp\zombies\_zm_powerups; + +award_grenades_for_team( team ) +{ + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team ) + continue; + + lethal_grenade = players[i] get_player_lethal_grenade(); + players[i] giveweapon( lethal_grenade ); + players[i] setweaponammoclip( lethal_grenade, 4 ); + } +} + +get_players_on_meat_team( team ) +{ + players = get_players(); + players_on_team = []; + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team ) + continue; + + players_on_team[players_on_team.size] = players[i]; + } + + return players_on_team; +} + +get_alive_players_on_meat_team( team ) +{ + players = get_players(); + players_on_team = []; + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team ) + continue; + + if ( players[i].sessionstate == "spectator" || players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + continue; + + players_on_team[players_on_team.size] = players[i]; + } + + return players_on_team; +} + +init_minigun_ring() +{ + if ( isdefined( level._minigun_ring ) ) + return; + + ring_pos = getstruct( level._meat_location + "_meat_minigun", "script_noteworthy" ); + + if ( !isdefined( ring_pos ) ) + return; + + level._minigun_ring = spawn( "script_model", ring_pos.origin ); + level._minigun_ring.angles = ring_pos.angles; + level._minigun_ring setmodel( ring_pos.script_parameters ); + level._minigun_ring_clip = getent( level._meat_location + "_meat_minigun_clip", "script_noteworthy" ); + + if ( isdefined( level._minigun_ring_clip ) ) + level._minigun_ring_clip linkto( level._minigun_ring ); + else + iprintlnbold( "BUG: no level._minigun_ring_clip" ); + + level._minigun_ring_trig = getent( level._meat_location + "_meat_minigun_trig", "targetname" ); + + if ( isdefined( level._minigun_ring_trig ) ) + { + level._minigun_ring_trig enablelinkto(); + level._minigun_ring_trig linkto( level._minigun_ring ); + level._minigun_icon = spawn( "script_model", level._minigun_ring_trig.origin ); + level._minigun_icon setmodel( getweaponmodel( "minigun_zm" ) ); + level._minigun_icon linkto( level._minigun_ring ); + level._minigun_icon setclientfield( "ring_glowfx", 1 ); + level thread ring_toss( level._minigun_ring_trig, "minigun" ); + } + else + iprintlnbold( "BUG: no level._minigun_ring_trig" ); + + level._minigun_ring thread move_ring( ring_pos ); + level._minigun_ring thread rotate_ring( 1 ); +} + +init_ammo_ring() +{ + if ( isdefined( level._ammo_ring ) ) + return; + + name = level._meat_location + "_meat_ammo"; + ring_pos = getstruct( name, "script_noteworthy" ); + + if ( !isdefined( ring_pos ) ) + return; + + level._ammo_ring = spawn( "script_model", ring_pos.origin ); + level._ammo_ring.angles = ring_pos.angles; + level._ammo_ring setmodel( ring_pos.script_parameters ); + name = level._meat_location + "_meat_ammo_clip"; + level._ammo_ring_clip = getent( name, "script_noteworthy" ); + + if ( isdefined( level._ammo_ring_clip ) ) + level._ammo_ring_clip linkto( level._ammo_ring ); + else + iprintlnbold( "BUG: no level._ammo_ring_clip" ); + + name = level._meat_location + "_meat_ammo_trig"; + level._ammo_ring_trig = getent( name, "targetname" ); + + if ( isdefined( level._ammo_ring_clip ) ) + { + level._ammo_ring_trig enablelinkto(); + level._ammo_ring_trig linkto( level._ammo_ring ); + level._ammo_icon = spawn( "script_model", level._ammo_ring_trig.origin ); + level._ammo_icon setmodel( "zombie_ammocan" ); + level._ammo_icon linkto( level._ammo_ring ); + level._ammo_icon setclientfield( "ring_glowfx", 1 ); + level thread ring_toss( level._ammo_ring_trig, "ammo" ); + } + else + iprintlnbold( "BUG: no level._ammo_ring_trig" ); + + level._ammo_ring thread move_ring( ring_pos ); + level._ammo_ring thread rotate_ring( 1 ); +} + +init_splitter_ring() +{ + if ( isdefined( level._splitter_ring ) ) + return; + + ring_pos = getstruct( level._meat_location + "_meat_splitter", "script_noteworthy" ); + + if ( !isdefined( ring_pos ) ) + return; + + level._splitter_ring = spawn( "script_model", ring_pos.origin ); + level._splitter_ring.angles = ring_pos.angles; + level._splitter_ring setmodel( ring_pos.script_parameters ); + level._splitter_ring_trig1 = getent( level._meat_location + "_meat_splitter_trig_1", "targetname" ); + level._splitter_ring_trig2 = getent( level._meat_location + "_meat_splitter_trig_2", "targetname" ); + + if ( isdefined( level._splitter_ring_trig1 ) && isdefined( level._splitter_ring_trig2 ) ) + { + level._splitter_ring_trig1 enablelinkto(); + level._splitter_ring_trig2 enablelinkto(); + } + else + iprintlnbold( "BUG: missing at least one level._splitter_ring_trig" ); + + level._splitter_ring notsolid(); + level._meat_icon = spawn( "script_model", level._splitter_ring.origin ); + level._meat_icon setmodel( getweaponmodel( get_gamemode_var( "item_meat_name" ) ) ); + level._meat_icon linkto( level._splitter_ring ); + level._meat_icon setclientfield( "ring_glow_meatfx", 1 ); + + if ( isdefined( level._splitter_ring_trig1 ) && isdefined( level._splitter_ring_trig2 ) ) + { + level._splitter_ring_trig1 linkto( level._splitter_ring ); + level._splitter_ring_trig2 linkto( level._splitter_ring ); + level thread ring_toss( level._splitter_ring_trig1, "splitter" ); + level thread ring_toss( level._splitter_ring_trig2, "splitter" ); + } + + level._splitter_ring thread move_ring( ring_pos ); +} + +ring_toss( trig, type ) +{ + level endon( "end_game" ); + + while ( true ) + { + if ( isdefined( level._ring_triggered ) && level._ring_triggered ) + { + wait 0.05; + continue; + } + + if ( isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving ) ) + { + if ( level.item_meat istouching( trig ) ) + { + level thread ring_toss_prize( type, trig ); + level._ring_triggered = 1; + level thread ring_cooldown(); + } + } + + wait 0.05; + } +} + +ring_cooldown() +{ + wait 3; + level._ring_triggered = 0; +} + +ring_toss_prize( type, trig ) +{ + switch ( type ) + { + case "splitter": + level thread meat_splitter( trig ); + break; + case "minigun": + level thread minigun_prize( trig ); + break; + case "ammo": + level thread ammo_prize( trig ); + break; + } +} + +meat_splitter( trig ) +{ + level endon( "meat_grabbed" ); + level endon( "meat_kicked" ); + + while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) ) + wait 0.05; + + exit_trig = getent( trig.target, "targetname" ); + exit_struct = getstruct( trig.target, "targetname" ); + + while ( isdefined( level.item_meat ) && !level.item_meat istouching( exit_trig ) ) + wait 0.05; + + while ( isdefined( level.item_meat ) && level.item_meat istouching( exit_trig ) ) + wait 0.05; + + if ( !isdefined( level.item_meat ) ) + return; + + playfx( level._effect["fw_burst"], exit_trig.origin ); + flare_dir = vectornormalize( anglestoforward( exit_struct.angles ) ); + velocity = vectorscale( flare_dir, randomintrange( 400, 600 ) ); + velocity1 = ( velocity[0] + 75, velocity[1] + 75, randomintrange( 75, 125 ) ); + velocity2 = ( velocity[0] - 75, velocity[1] - 75, randomintrange( 75, 125 ) ); + velocity3 = ( velocity[0], velocity[1], 100 ); + level._fake_meats = []; + level._meat_splitter_activated = 1; + org = exit_trig.origin; + player = get_players()[0]; + player._spawning_meat = 1; + player endon( "disconnect" ); + thread split_meat( player, org, velocity1, velocity2, velocity ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_splitter", undefined, undefined, 1 ); + wait 0.1; + + while ( isdefined( level.splitting_meat ) && level.splitting_meat ) + wait 0.05; + + player._spawning_meat = 0; +} + +split_meat( player, org, vel1, vel2, vel3 ) +{ + level.splitting_meat = 1; + level.item_meat cleanup_meat(); + wait_network_frame(); + level._fake_meats[level._fake_meats.size] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel1 ); + wait_network_frame(); + level._fake_meats[level._fake_meats.size] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel2 ); + wait_network_frame(); + level._fake_meats[level._fake_meats.size] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel3 ); + real_meat = random( level._fake_meats ); + + foreach ( meat in level._fake_meats ) + { + if ( real_meat != meat ) + { + meat._fake_meat = 1; + meat thread maps\mp\gametypes_zm\zmeat::delete_on_real_meat_pickup(); + continue; + } + + meat._fake_meat = 0; + level.item_meat = meat; + } + + level.splitting_meat = 0; +} + +minigun_prize( trig ) +{ + while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) ) + wait 0.05; + + if ( !isdefined( level.item_meat ) ) + return; + + if ( isdefined( level._minigun_toss_cooldown ) && level._minigun_toss_cooldown ) + return; + + level thread minigun_toss_cooldown(); + + if ( !is_player_valid( level._last_person_to_throw_meat ) ) + return; + + level._last_person_to_throw_meat thread maps\mp\zombies\_zm_powerups::powerup_vo( "minigun" ); + level thread maps\mp\zombies\_zm_powerups::minigun_weapon_powerup( level._last_person_to_throw_meat ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_minigun", undefined, undefined, 1 ); +} + +ammo_prize( trig ) +{ + while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) ) + wait 0.05; + + if ( !isdefined( level.item_meat ) ) + return; + + if ( isdefined( level._ammo_toss_cooldown ) && level._ammo_toss_cooldown ) + return; + + playfx( level._effect["poltergeist"], trig.origin ); + level thread ammo_toss_cooldown(); + level._last_person_to_throw_meat thread maps\mp\zombies\_zm_powerups::powerup_vo( "full_ammo" ); + level thread maps\mp\zombies\_zm_powerups::full_ammo_powerup( undefined, level._last_person_to_throw_meat ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_ammo", undefined, undefined, 1 ); +} + +minigun_toss_cooldown() +{ + level._minigun_toss_cooldown = 1; + + if ( isdefined( level._minigun_icon ) ) + level._minigun_icon delete(); + + waittill_any_or_timeout( 120, "meat_end" ); + playfx( level._effect["poltergeist"], level._minigun_ring_trig.origin ); + level._minigun_icon = spawn( "script_model", level._minigun_ring_trig.origin ); + level._minigun_icon setmodel( getweaponmodel( "minigun_zm" ) ); + level._minigun_icon linkto( level._minigun_ring ); + level._minigun_icon setclientfield( "ring_glowfx", 1 ); + level._minigun_toss_cooldown = 0; +} + +ammo_toss_cooldown() +{ + level._ammo_toss_cooldown = 1; + + if ( isdefined( level._ammo_icon ) ) + level._ammo_icon delete(); + + waittill_any_or_timeout( 60, "meat_end" ); + playfx( level._effect["poltergeist"], level._ammo_ring_trig.origin ); + level._ammo_icon = spawn( "script_model", level._ammo_ring_trig.origin ); + level._ammo_icon setmodel( "zombie_ammocan" ); + level._ammo_icon linkto( level._ammo_ring ); + level._ammo_icon setclientfield( "ring_glowfx", 1 ); + level._ammo_toss_cooldown = 0; +} + +wait_for_team_death( team ) +{ + level endon( "meat_end" ); + encounters_team = undefined; + + while ( true ) + { + wait 1; + + while ( isdefined( level._checking_for_save ) && level._checking_for_save ) + wait 0.1; + + alive_team_players = get_alive_players_on_meat_team( team ); + + if ( alive_team_players.size > 0 ) + { + encounters_team = alive_team_players[0]._encounters_team; + continue; + } + + break; + } + + if ( !isdefined( encounters_team ) ) + return; + + winning_team = "A"; + + if ( encounters_team == "A" ) + winning_team = "B"; + + level notify( "meat_end", winning_team ); +} + +check_should_save_player( team ) +{ + if ( !isdefined( level._meat_on_team ) ) + return false; + + level._checking_for_save = 1; + players = get_players_on_meat_team( team ); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( isdefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player ) + { + while ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving || isdefined( level._meat_splitter_activated ) && level._meat_splitter_activated || isdefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying ) + { + if ( level._meat_on_team != player._meat_team ) + break; + + if ( isdefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling && level._meat_on_team == player._meat_team ) + break; + + wait 0.05; + } + + if ( !isdefined( player ) ) + { + level._checking_for_save = 0; + return false; + } + + if ( !( isdefined( player.last_damage_from_zombie_or_player ) && player.last_damage_from_zombie_or_player ) ) + { + level._checking_for_save = 0; + return false; + } + + if ( level._meat_on_team != player._meat_team && isdefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player ) + { + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + level thread revive_saved_player( player ); + return true; + } + } + } + } + + level._checking_for_save = 0; + return false; +} + +watch_save_player() +{ + if ( !isdefined( level._meat_on_team ) ) + return false; + + if ( !isdefined( level._last_person_to_throw_meat ) || level._last_person_to_throw_meat != self ) + return false; + + level._checking_for_save = 1; + + while ( isdefined( level.splitting_meat ) && level.splitting_meat || isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving || isdefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying ) ) + { + if ( level._meat_on_team != self._meat_team ) + break; + + if ( isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling ) && level._meat_on_team == self._meat_team ) + break; + + wait 0.05; + } + + if ( level._meat_on_team != self._meat_team && isdefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == self ) + { + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + level thread revive_saved_player( self ); + return true; + } + } + + level._checking_for_save = 0; + return false; +} + +revive_saved_player( player ) +{ + player endon( "disconnect" ); + player iprintlnbold( &"ZOMBIE_PLAYER_SAVED" ); + player playsound( level.zmb_laugh_alias ); + wait 0.25; + playfx( level._effect["poltergeist"], player.origin ); + playsoundatposition( "zmb_bolt", player.origin ); + earthquake( 0.5, 0.75, player.origin, 1000 ); + player thread maps\mp\zombies\_zm_laststand::auto_revive( player ); + player._saved_by_throw++; + level._checking_for_save = 0; +} + +get_game_module_players( player ) +{ + return get_players_on_meat_team( player._meat_team ); +} + +item_meat_spawn( origin ) +{ + org = origin; + player = get_players()[0]; + player._spawning_meat = 1; + player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( 0, 0, 0 ) ); + playsoundatposition( "zmb_spawn_powerup", org ); + wait 0.1; + player._spawning_meat = undefined; +} + +init_item_meat( gametype ) +{ + if ( gametype == "zgrief" ) + { + set_gamemode_var_once( "item_meat_name", "item_meat_zm" ); + set_gamemode_var_once( "item_meat_model", "t6_wpn_zmb_meat_world" ); + } + else + { + set_gamemode_var_once( "item_meat_name", "item_head_zm" ); + set_gamemode_var_once( "item_meat_model", "t6_wpn_zmb_severedhead_world" ); + } + + precacheitem( get_gamemode_var( "item_meat_name" ) ); + set_gamemode_var_once( "start_item_meat_name", get_gamemode_var( "item_meat_name" ) ); + level.meat_weaponidx = getweaponindexfromname( get_gamemode_var( "item_meat_name" ) ); + level.meat_pickupsound = getweaponpickupsound( level.meat_weaponidx ); + level.meat_pickupsoundplayer = getweaponpickupsoundplayer( level.meat_weaponidx ); +} + +meat_intro( launch_spot ) +{ + flag_wait( "start_encounters_match_logic" ); + wait 3; + level thread multi_launch( launch_spot ); + launch_meat( launch_spot ); + drop_meat( level._meat_start_point ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_drop", undefined, undefined, 1 ); +} + +launch_meat( launch_spot ) +{ + level waittill( "launch_meat" ); + + spots = getstructarray( launch_spot, "targetname" ); + + if ( isdefined( spots ) && spots.size > 0 ) + { + spot = random( spots ); + meat = spawn( "script_model", spot.origin ); + meat setmodel( "tag_origin" ); + wait_network_frame(); + playfxontag( level._effect["fw_trail"], meat, "tag_origin" ); + meat playloopsound( "zmb_souls_loop", 0.75 ); + dest = spot; + + while ( isdefined( dest ) && isdefined( dest.target ) ) + { + new_dest = getstruct( dest.target, "targetname" ); + dest = new_dest; + dist = distance( new_dest.origin, meat.origin ); + time = dist / 700; + meat moveto( new_dest.origin, time ); + + meat waittill( "movedone" ); + } + + meat playsound( "zmb_souls_end" ); + playfx( level._effect["fw_burst"], meat.origin ); + wait( randomfloatrange( 0.2, 0.5 ) ); + meat playsound( "zmb_souls_end" ); + playfx( level._effect["fw_burst"], meat.origin + ( randomintrange( 50, 150 ), randomintrange( 50, 150 ), randomintrange( -20, 20 ) ) ); + wait( randomfloatrange( 0.5, 0.75 ) ); + meat playsound( "zmb_souls_end" ); + playfx( level._effect["fw_burst"], meat.origin + ( randomintrange( -150, -50 ), randomintrange( -150, 50 ), randomintrange( -20, 20 ) ) ); + wait( randomfloatrange( 0.5, 0.75 ) ); + meat playsound( "zmb_souls_end" ); + playfx( level._effect["fw_burst"], meat.origin ); + meat delete(); + } +} + +multi_launch( launch_spot ) +{ + spots = getstructarray( launch_spot, "targetname" ); + + if ( isdefined( spots ) && spots.size > 0 ) + { + for ( x = 0; x < 3; x++ ) + { + for ( i = 0; i < spots.size; i++ ) + { + delay = randomfloatrange( 0.1, 0.25 ); + level thread fake_launch( spots[i], delay ); + } + + wait( randomfloatrange( 0.25, 0.75 ) ); + + if ( x > 1 ) + level notify( "launch_meat" ); + } + } + else + { + wait( randomfloatrange( 0.25, 0.75 ) ); + level notify( "launch_meat" ); + } +} + +fake_launch( launch_spot, delay ) +{ + wait( delay ); + wait( randomfloatrange( 0.1, 4 ) ); + meat = spawn( "script_model", launch_spot.origin + ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ) ); + meat setmodel( "tag_origin" ); + wait_network_frame(); + playfxontag( level._effect["fw_trail_cheap"], meat, "tag_origin" ); + meat playloopsound( "zmb_souls_loop", 0.75 ); + dest = launch_spot; + + while ( isdefined( dest ) && isdefined( dest.target ) ) + { + random_offset = ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ); + new_dest = getstruct( dest.target, "targetname" ); + dest = new_dest; + dist = distance( new_dest.origin + random_offset, meat.origin ); + time = dist / 700; + meat moveto( new_dest.origin + random_offset, time ); + + meat waittill( "movedone" ); + } + + meat playsound( "zmb_souls_end" ); + playfx( level._effect["fw_pre_burst"], meat.origin ); + meat delete(); +} + +drop_meat( drop_spot ) +{ + meat = spawn( "script_model", drop_spot + vectorscale( ( 0, 0, 1 ), 600.0 ) ); + meat setmodel( "tag_origin" ); + dist = distance( meat.origin, drop_spot ); + time = dist / 400; + wait 2; + meat moveto( drop_spot, time ); + wait_network_frame(); + playfxontag( level._effect["fw_drop"], meat, "tag_origin" ); + + meat waittill( "movedone" ); + + playfx( level._effect["fw_impact"], drop_spot ); + level notify( "reset_meat" ); + meat delete(); +} diff --git a/ZM/Maps/Tranzit/maps/mp/zombies/_zm_game_module_standard.gsc b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_game_module_standard.gsc new file mode 100644 index 0000000..df94d58 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_game_module_standard.gsc @@ -0,0 +1,3 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + diff --git a/ZM/Maps/Tranzit/maps/mp/zombies/_zm_game_module_utility.gsc b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_game_module_utility.gsc new file mode 100644 index 0000000..aa16bce --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_game_module_utility.gsc @@ -0,0 +1,46 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_game_module_meat_utility; +#include maps\mp\zombies\_zm_game_module_meat; + +init_item_meat() +{ + level.item_meat_name = "item_meat_zm"; + precacheitem( level.item_meat_name ); +} + +move_ring( ring ) +{ + positions = getstructarray( ring.target, "targetname" ); + positions = array_randomize( positions ); + level endon( "end_game" ); + + while ( true ) + { + foreach ( position in positions ) + { + self moveto( position.origin, randomintrange( 30, 45 ) ); + + self waittill( "movedone" ); + } + } +} + +rotate_ring( forward ) +{ + level endon( "end_game" ); + dir = -360; + + if ( forward ) + dir = 360; + + while ( true ) + { + self rotateyaw( dir, 9 ); + wait 9; + } +} diff --git a/ZM/Maps/Tranzit/maps/mp/zombies/_zm_melee_weapon.gsc b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_melee_weapon.gsc new file mode 100644 index 0000000..4bc83cd --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_melee_weapon.gsc @@ -0,0 +1,576 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_audio; + +init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) +{ + precacheitem( weapon_name ); + precacheitem( flourish_weapon_name ); + add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); + melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_weapon_triggers.size; i++ ) + { + knife_model = getent( melee_weapon_triggers[i].target, "targetname" ); + + if ( isdefined( knife_model ) ) + knife_model hide(); + + melee_weapon_triggers[i] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); + + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + melee_weapon_triggers[i] sethintstring( hint_string, cost ); + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + cursor_hint = "HINT_WEAPON"; + cursor_hint_weapon = weapon_name; + melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); + } + else + melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); + } + else + { + weapon_display = get_weapon_display_name( weapon_name ); + hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + melee_weapon_triggers[i] sethintstring( hint_string, weapon_display, cost ); + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + cursor_hint = "HINT_WEAPON"; + cursor_hint_weapon = weapon_name; + melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); + } + else + melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); + } + + melee_weapon_triggers[i] usetriggerrequirelookat(); + } + + melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_weapon_structs.size; i++ ) + prepare_stub( melee_weapon_structs[i].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); + + register_melee_weapon_for_level( weapon_name ); + + if ( !isdefined( level.ballistic_weapon_name ) ) + level.ballistic_weapon_name = []; + + level.ballistic_weapon_name[weapon_name] = ballistic_weapon_name; + + if ( !isdefined( level.ballistic_upgraded_weapon_name ) ) + level.ballistic_upgraded_weapon_name = []; + + level.ballistic_upgraded_weapon_name[weapon_name] = ballistic_upgraded_weapon_name; +/# + if ( !isdefined( level.zombie_weapons[weapon_name] ) ) + { + if ( isdefined( level.devgui_add_weapon ) ) + [[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost ); + } +#/ +} + +prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) +{ + if ( isdefined( stub ) ) + { + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + stub.hint_string = hint_string; + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + stub.cursor_hint = "HINT_WEAPON"; + stub.cursor_hint_weapon = weapon_name; + } + else + { + stub.cursor_hint = "HINT_NOICON"; + stub.cursor_hint_weapon = undefined; + } + } + else + { + stub.hint_parm1 = get_weapon_display_name( weapon_name ); + stub.hint_parm2 = cost; + stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + stub.cursor_hint = "HINT_WEAPON"; + stub.cursor_hint_weapon = weapon_name; + } + else + { + stub.cursor_hint = "HINT_NOICON"; + stub.cursor_hint_weapon = undefined; + } + } + + stub.cost = cost; + stub.weapon_name = weapon_name; + stub.vo_dialog_id = vo_dialog_id; + stub.flourish_weapon_name = flourish_weapon_name; + stub.ballistic_weapon_name = ballistic_weapon_name; + stub.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; + stub.trigger_func = ::melee_weapon_think; + stub.flourish_fn = flourish_fn; + } +} + +add_stub( stub, weapon_name ) +{ + melee_weapon = undefined; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( level._melee_weapons[i].weapon_name == weapon_name ) + { + melee_weapon = level._melee_weapons[i]; + break; + } + } + + if ( isdefined( stub ) && isdefined( melee_weapon ) ) + prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn ); +} + +give_melee_weapon_by_name( weapon_name ) +{ + melee_weapon = undefined; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( level._melee_weapons[i].weapon_name == weapon_name ) + { + melee_weapon = level._melee_weapons[i]; + break; + } + } + + if ( isdefined( melee_weapon ) ) + self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined ); +} + +add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) +{ + melee_weapon = spawnstruct(); + melee_weapon.weapon_name = weapon_name; + melee_weapon.flourish_weapon_name = flourish_weapon_name; + melee_weapon.ballistic_weapon_name = ballistic_weapon_name; + melee_weapon.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; + melee_weapon.cost = cost; + melee_weapon.wallbuy_targetname = wallbuy_targetname; + melee_weapon.hint_string = hint_string; + melee_weapon.vo_dialog_id = vo_dialog_id; + melee_weapon.flourish_fn = flourish_fn; + + if ( !isdefined( level._melee_weapons ) ) + level._melee_weapons = []; + + level._melee_weapons[level._melee_weapons.size] = melee_weapon; +} + +player_can_see_weapon_prompt( weapon_name ) +{ + if ( is_true( level._allow_melee_weapon_switching ) ) + return true; + + if ( isdefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) ) + return false; + + return true; +} + +spectator_respawn_all() +{ + for ( i = 0; i < level._melee_weapons.size; i++ ) + self spectator_respawn( level._melee_weapons[i].wallbuy_targetname, level._melee_weapons[i].weapon_name ); +} + +spectator_respawn( wallbuy_targetname, weapon_name ) +{ + melee_triggers = getentarray( wallbuy_targetname, "targetname" ); + players = get_players(); + + for ( i = 0; i < melee_triggers.size; i++ ) + { + melee_triggers[i] setvisibletoall(); + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + for ( j = 0; j < players.size; j++ ) + { + if ( !players[j] player_can_see_weapon_prompt( weapon_name ) ) + melee_triggers[i] setinvisibletoplayer( players[j] ); + } + } + } +} + +trigger_hide_all() +{ + for ( i = 0; i < level._melee_weapons.size; i++ ) + self trigger_hide( level._melee_weapons[i].wallbuy_targetname ); +} + +trigger_hide( wallbuy_targetname ) +{ + melee_triggers = getentarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_triggers.size; i++ ) + melee_triggers[i] setinvisibletoplayer( self ); +} + +has_any_ballistic_knife() +{ + if ( self hasweapon( "knife_ballistic_zm" ) ) + return true; + + if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) + return true; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) ) + return true; + + if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) + return true; + } + + return false; +} + +has_upgraded_ballistic_knife() +{ + if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) + return true; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) + return true; + } + + return false; +} + +give_ballistic_knife( weapon_string, upgraded ) +{ + current_melee_weapon = self get_player_melee_weapon(); + + if ( isdefined( current_melee_weapon ) ) + { + if ( upgraded && isdefined( level.ballistic_upgraded_weapon_name ) && isdefined( level.ballistic_upgraded_weapon_name[current_melee_weapon] ) ) + weapon_string = level.ballistic_upgraded_weapon_name[current_melee_weapon]; + + if ( !upgraded && isdefined( level.ballistic_weapon_name ) && isdefined( level.ballistic_weapon_name[current_melee_weapon] ) ) + weapon_string = level.ballistic_weapon_name[current_melee_weapon]; + } + + return weapon_string; +} + +change_melee_weapon( weapon_name, current_weapon ) +{ + current_melee_weapon = self get_player_melee_weapon(); + + if ( isdefined( current_melee_weapon ) && current_melee_weapon != weapon_name ) + { + self takeweapon( current_melee_weapon ); + unacquire_weapon_toggle( current_melee_weapon ); + } + + self set_player_melee_weapon( weapon_name ); + had_ballistic = 0; + had_ballistic_upgraded = 0; + ballistic_was_primary = 0; + primaryweapons = self getweaponslistprimaries(); + + for ( i = 0; i < primaryweapons.size; i++ ) + { + primary_weapon = primaryweapons[i]; + + if ( issubstr( primary_weapon, "knife_ballistic_" ) ) + { + had_ballistic = 1; + + if ( primary_weapon == current_weapon ) + ballistic_was_primary = 1; + + self notify( "zmb_lost_knife" ); + self takeweapon( primary_weapon ); + unacquire_weapon_toggle( primary_weapon ); + + if ( issubstr( primary_weapon, "upgraded" ) ) + had_ballistic_upgraded = 1; + } + } + + if ( had_ballistic ) + { + if ( had_ballistic_upgraded ) + { + new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name]; + + if ( ballistic_was_primary ) + current_weapon = new_ballistic; + + self giveweapon( new_ballistic, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) ); + } + else + { + new_ballistic = level.ballistic_weapon_name[weapon_name]; + + if ( ballistic_was_primary ) + current_weapon = new_ballistic; + + self giveweapon( new_ballistic, 0 ); + } + } + + return current_weapon; +} + +melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) +{ + self.first_time_triggered = 0; + + if ( isdefined( self.stub ) ) + { + self endon( "kill_trigger" ); + + if ( isdefined( self.stub.first_time_triggered ) ) + self.first_time_triggered = self.stub.first_time_triggered; + + weapon_name = self.stub.weapon_name; + cost = self.stub.cost; + flourish_fn = self.stub.flourish_fn; + vo_dialog_id = self.stub.vo_dialog_id; + flourish_weapon_name = self.stub.flourish_weapon_name; + ballistic_weapon_name = self.stub.ballistic_weapon_name; + ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name; + players = getplayers(); + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] player_can_see_weapon_prompt( weapon_name ) ) + self setinvisibletoplayer( players[i] ); + } + } + } + + for (;;) + { + self waittill( "trigger", player ); + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + if ( player in_revive_trigger() ) + { + wait 0.1; + continue; + } + + if ( player isthrowinggrenade() ) + { + wait 0.1; + continue; + } + + if ( player.is_drinking > 0 ) + { + wait 0.1; + continue; + } + + if ( player hasweapon( weapon_name ) || player has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( player isswitchingweapons() ) + { + wait 0.1; + continue; + } + + current_weapon = player getcurrentweapon(); + + if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) || player has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission ) + { + wait 0.1; + continue; + } + + player_has_weapon = player hasweapon( weapon_name ); + + if ( !player_has_weapon ) + { + cost = self.stub.cost; + + if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) + cost = int( cost / 2 ); + + if ( player.score >= cost ) + { + if ( self.first_time_triggered == 0 ) + { + model = getent( self.target, "targetname" ); + + if ( isdefined( model ) ) + model thread melee_weapon_show( player ); + else if ( isdefined( self.clientfieldname ) ) + level setclientfield( self.clientfieldname, 1 ); + + self.first_time_triggered = 1; + + if ( isdefined( self.stub ) ) + self.stub.first_time_triggered = 1; + } + + player maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 ); + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" ); + player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self ); + } + else + { + play_sound_on_ent( "no_purchase" ); + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 ); + } + + continue; + } + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + self setinvisibletoplayer( player ); + } +} + +melee_weapon_show( player ) +{ + player_angles = vectortoangles( player.origin - self.origin ); + player_yaw = player_angles[1]; + weapon_yaw = self.angles[1]; + yaw_diff = angleclamp180( player_yaw - weapon_yaw ); + + if ( yaw_diff > 0 ) + yaw = weapon_yaw - 90; + else + yaw = weapon_yaw + 90; + + self.og_origin = self.origin; + self.origin += anglestoforward( ( 0, yaw, 0 ) ) * 8; + wait 0.05; + self show(); + play_sound_at_pos( "weapon_show", self.origin, self ); + time = 1; + self moveto( self.og_origin, time ); +} + +give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger ) +{ + if ( isdefined( flourish_fn ) ) + self thread [[ flourish_fn ]](); + + gun = self do_melee_weapon_flourish_begin( flourish_weapon_name ); + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id ); + self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); + self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + return; + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + if ( isdefined( trigger ) ) + trigger setinvisibletoplayer( self ); + + self trigger_hide_all(); + } +} + +do_melee_weapon_flourish_begin( flourish_weapon_name ) +{ + self increment_is_drinking(); + self disable_player_move_states( 1 ); + gun = self getcurrentweapon(); + weapon = flourish_weapon_name; + self giveweapon( weapon ); + self switchtoweapon( weapon ); + return gun; +} + +do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) +{ + assert( !is_zombie_perk_bottle( gun ) ); + assert( gun != level.revive_tool ); + self enable_player_move_states(); + weapon = flourish_weapon_name; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + { + self takeweapon( weapon ); + self.lastactiveweapon = "none"; + return; + } + + self takeweapon( weapon ); + self giveweapon( weapon_name ); + gun = change_melee_weapon( weapon_name, gun ); + + if ( self hasweapon( "knife_zm" ) ) + self takeweapon( "knife_zm" ); + + if ( self is_multiple_drinking() ) + { + self decrement_is_drinking(); + return; + } + else if ( gun == "knife_zm" ) + { + self switchtoweapon( weapon_name ); + self decrement_is_drinking(); + return; + } + else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) + self switchtoweapon( gun ); + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + } + + self waittill( "weapon_change_complete" ); + + if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) ) + self decrement_is_drinking(); +} diff --git a/ZM/Maps/Tranzit/maps/mp/zombies/_zm_riotshield.gsc b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_riotshield.gsc new file mode 100644 index 0000000..1fff6f4 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_riotshield.gsc @@ -0,0 +1,618 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_weap_riotshield; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_weapons; + +init() +{ + level.riotshield_name = "riotshield_zm"; + level.deployedshieldmodel = []; + level.stowedshieldmodel = []; + level.carriedshieldmodel = []; + level.deployedshieldmodel[0] = "t6_wpn_zmb_shield_world"; + level.deployedshieldmodel[2] = "t6_wpn_zmb_shield_dmg1_world"; + level.deployedshieldmodel[3] = "t6_wpn_zmb_shield_dmg2_world"; + level.stowedshieldmodel[0] = "t6_wpn_zmb_shield_stow"; + level.stowedshieldmodel[2] = "t6_wpn_zmb_shield_dmg1_stow"; + level.stowedshieldmodel[3] = "t6_wpn_zmb_shield_dmg2_stow"; + level.carriedshieldmodel[0] = "t6_wpn_zmb_shield_world"; + level.carriedshieldmodel[2] = "t6_wpn_zmb_shield_dmg1_world"; + level.carriedshieldmodel[3] = "t6_wpn_zmb_shield_dmg2_world"; + level.viewshieldmodel[0] = "t6_wpn_zmb_shield_view"; + level.viewshieldmodel[2] = "t6_wpn_zmb_shield_dmg1_view"; + level.viewshieldmodel[3] = "t6_wpn_zmb_shield_dmg2_view"; + precachemodel( level.stowedshieldmodel[0] ); + precachemodel( level.stowedshieldmodel[2] ); + precachemodel( level.stowedshieldmodel[3] ); + precachemodel( level.carriedshieldmodel[0] ); + precachemodel( level.carriedshieldmodel[2] ); + precachemodel( level.carriedshieldmodel[3] ); + precachemodel( level.viewshieldmodel[0] ); + precachemodel( level.viewshieldmodel[2] ); + precachemodel( level.viewshieldmodel[3] ); + level.riotshield_placement_zoffset = 26; +} + +attachriotshield( model, tag ) +{ + if ( isdefined( self.prev_shield_model ) && isdefined( self.prev_shield_tag ) ) + self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); + + self.prev_shield_model = model; + self.prev_shield_tag = tag; + + if ( isdefined( self.prev_shield_model ) && isdefined( self.prev_shield_tag ) ) + self attachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); +} + +removeriotshield() +{ + if ( isdefined( self.prev_shield_model ) && isdefined( self.prev_shield_tag ) ) + self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); + + self.prev_shield_model = undefined; + self.prev_shield_tag = undefined; + + if ( self getcurrentweapon() != level.riotshield_name ) + return; + + self setheldweaponmodel( 0 ); +} + +setriotshieldviewmodel( modelnum ) +{ + self.prev_shield_viewmodel = modelnum; + + if ( self getcurrentweapon() != level.riotshield_name ) + return; + + if ( isdefined( self.prev_shield_viewmodel ) ) + self setheldweaponmodel( self.prev_shield_viewmodel ); + else + self setheldweaponmodel( 0 ); +} + +specialriotshieldviewmodel() +{ + if ( self getcurrentweapon() != level.riotshield_name ) + return; + + self setheldweaponmodel( 3 ); +} + +restoreriotshieldviewmodel() +{ + if ( self getcurrentweapon() != level.riotshield_name ) + return; + + if ( isdefined( self.prev_shield_viewmodel ) ) + self setheldweaponmodel( self.prev_shield_viewmodel ); + else + self setheldweaponmodel( 0 ); +} + +updateriotshieldmodel() +{ + if ( !isdefined( self.shield_damage_level ) ) + { + if ( isdefined( self.player_shield_reset_health ) ) + self [[ self.player_shield_reset_health ]](); + } + + update = 0; + + if ( !isdefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level ) + { + self.prev_shield_damage_level = self.shield_damage_level; + update = 1; + } + + if ( !isdefined( self.prev_shield_placement ) || self.prev_shield_placement != self.shield_placement ) + { + self.prev_shield_placement = self.shield_placement; + update = 1; + } + + if ( update ) + { + if ( self.prev_shield_placement == 0 ) + self attachriotshield(); + else if ( self.prev_shield_placement == 1 ) + { + self attachriotshield( level.carriedshieldmodel[self.prev_shield_damage_level], "tag_weapon_left" ); + self setriotshieldviewmodel( self.prev_shield_damage_level ); + } + else if ( self.prev_shield_placement == 2 ) + self attachriotshield( level.stowedshieldmodel[self.prev_shield_damage_level], "tag_stowed_back" ); + else if ( self.prev_shield_placement == 3 ) + { + self attachriotshield(); + + if ( isdefined( self.shield_ent ) ) + self.shield_ent setmodel( level.deployedshieldmodel[self.prev_shield_damage_level] ); + } + } +} + +updatestandaloneriotshieldmodel() +{ + update = 0; + + if ( !isdefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level ) + { + self.prev_shield_damage_level = self.shield_damage_level; + update = 1; + } + + if ( update ) + self setmodel( level.deployedshieldmodel[self.prev_shield_damage_level] ); +} + +watchshieldlaststand() +{ + self endon( "death" ); + self endon( "disconnect" ); + self notify( "watchShieldLastStand" ); + self endon( "watchShieldLastStand" ); + + while ( true ) + { + self waittill( "weapons_taken_for_last_stand" ); + + self.riotshield_hidden = 0; + + if ( isdefined( self.hasriotshield ) && self.hasriotshield ) + { + if ( self.prev_shield_placement == 1 || self.prev_shield_placement == 2 ) + { + self.riotshield_hidden = 2; + self.shield_placement = 0; + self updateriotshieldmodel(); + } + } + + str_notify = self waittill_any_return( "player_revived", "bled_out" ); + + if ( str_notify == "player_revived" ) + { + if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden > 0 ) + { + self.shield_placement = self.riotshield_hidden; + self updateriotshieldmodel(); + } + } + else + self maps\mp\zombies\_zm_weap_riotshield::player_take_riotshield(); + + self.riotshield_hidden = undefined; + } +} + +trackriotshield() +{ + self endon( "death" ); + self endon( "disconnect" ); + self.hasriotshield = self hasweapon( level.riotshield_name ); + self.hasriotshieldequipped = self getcurrentweapon() == level.riotshield_name; + self.shield_placement = 0; + + if ( self.hasriotshield ) + { + if ( self.hasriotshieldequipped ) + { + self.shield_placement = 1; + self updateriotshieldmodel(); + } + else + { + self.shield_placement = 2; + self updateriotshieldmodel(); + } + } + + for (;;) + { + self waittill( "weapon_change", newweapon ); + + if ( newweapon == level.riotshield_name ) + { + if ( self.hasriotshieldequipped ) + continue; + + if ( isdefined( self.riotshieldentity ) ) + self notify( "destroy_riotshield" ); + + self.shield_placement = 1; + self updateriotshieldmodel(); + + if ( self.hasriotshield ) + { + + } + else + { + + } + + self.hasriotshield = 1; + self.hasriotshieldequipped = 1; + continue; + } + + if ( self ismantling() && newweapon == "none" ) + continue; + + if ( self.hasriotshieldequipped ) + { + assert( self.hasriotshield ); + self.hasriotshield = self hasweapon( level.riotshield_name ); + + if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden ) + { + + } + else if ( self.hasriotshield ) + self.shield_placement = 2; + else if ( isdefined( self.shield_ent ) ) + assert( self.shield_placement == 3 ); + else + self.shield_placement = 0; + + self updateriotshieldmodel(); + self.hasriotshieldequipped = 0; + continue; + } + + if ( self.hasriotshield ) + { + if ( !self hasweapon( level.riotshield_name ) ) + { + self.shield_placement = 0; + self updateriotshieldmodel(); + self.hasriotshield = 0; + } + + continue; + } + + if ( self hasweapon( level.riotshield_name ) ) + { + self.shield_placement = 2; + self updateriotshieldmodel(); + self.hasriotshield = 1; + } + } +} + +trackequipmentchange() +{ + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "equipment_dropped", equipname ); + + self notify( "weapon_change", self getcurrentweapon() ); + } +} + +updateriotshieldplacement() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "deploy_riotshield" ); + self endon( "start_riotshield_deploy" ); + self endon( "weapon_change" ); + + while ( true ) + { + placement = self canplaceriotshield( "raise_riotshield" ); + + if ( placement["result"] && riotshielddistancetest( placement["origin"] ) ) + { + self restoreriotshieldviewmodel(); + self setplacementhint( 1 ); + } + else + { + self specialriotshieldviewmodel(); + self setplacementhint( 0 ); + } + + wait 0.05; + } +} + +startriotshielddeploy() +{ + self notify( "start_riotshield_deploy" ); + self thread updateriotshieldplacement(); + self thread watchriotshielddeploy(); +} + +spawnriotshieldcover( origin, angles ) +{ + shield_ent = spawn( "script_model", origin, 1 ); + shield_ent.angles = angles; + shield_ent setowner( self ); + shield_ent.owner = self; + shield_ent.owner.shield_ent = shield_ent; + shield_ent.isriotshield = 1; + self.shield_placement = 3; + self updateriotshieldmodel(); + shield_ent setscriptmoverflag( 0 ); + self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( shield_ent, "destroy_riotshield", 1 ); + maps\mp\zombies\_zm_equipment::destructible_equipment_list_add( shield_ent ); + return shield_ent; +} + +watchriotshielddeploy() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "start_riotshield_deploy" ); + + self waittill( "deploy_riotshield", deploy_attempt ); + + self restoreriotshieldviewmodel(); + self setplacementhint( 1 ); + placement_hint = 0; + + if ( deploy_attempt ) + { + placement = self canplaceriotshield( "deploy_riotshield" ); + + if ( placement["result"] && riotshielddistancetest( placement["origin"] ) && self check_plant_position( placement["origin"], placement["angles"] ) ) + self doriotshielddeploy( placement["origin"], placement["angles"] ); + else + { + placement_hint = 1; + clip_max_ammo = weaponclipsize( level.riotshield_name ); + self setweaponammoclip( level.riotshield_name, clip_max_ammo ); + } + } + else + placement_hint = 1; + + if ( placement_hint ) + self setriotshieldfailhint(); +} + +check_plant_position( origin, angles ) +{ + if ( isdefined( level.equipment_safe_to_drop ) ) + { + ret = 1; + test_ent = spawn( "script_model", origin ); + test_ent setmodel( level.deployedshieldmodel[0] ); + test_ent.angles = angles; + + if ( !self [[ level.equipment_safe_to_drop ]]( test_ent ) ) + ret = 0; + + test_ent delete(); + return ret; + } + + return 1; +} + +doriotshielddeploy( origin, angles ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "start_riotshield_deploy" ); + self notify( "deployed_riotshield" ); + self maps\mp\zombies\_zm_buildables::track_placed_buildables( level.riotshield_name ); + + if ( isdefined( self.current_equipment ) && self.current_equipment == level.riotshield_name ) + self maps\mp\zombies\_zm_equipment::equipment_to_deployed( level.riotshield_name ); + + zoffset = level.riotshield_placement_zoffset; + shield_ent = self spawnriotshieldcover( origin + ( 0, 0, zoffset ), angles ); + item_ent = deployriotshield( self, shield_ent ); + primaries = self getweaponslistprimaries(); +/# + assert( isdefined( item_ent ) ); + assert( !isdefined( self.riotshieldretrievetrigger ) ); + assert( !isdefined( self.riotshieldentity ) ); +#/ + self maps\mp\zombies\_zm_weapons::switch_back_primary_weapon( primaries[0] ); + + if ( isdefined( level.equipment_planted ) ) + self [[ level.equipment_planted ]]( shield_ent, level.riotshield_name, self ); + + if ( isdefined( level.equipment_safe_to_drop ) ) + { + if ( !self [[ level.equipment_safe_to_drop ]]( shield_ent ) ) + { + self notify( "destroy_riotshield" ); + shield_ent delete(); + item_ent delete(); + return; + } + } + + self.riotshieldretrievetrigger = item_ent; + self.riotshieldentity = shield_ent; + self thread watchdeployedriotshieldents(); + self thread deleteshieldondamage( self.riotshieldentity ); + self thread deleteshieldmodelonweaponpickup( self.riotshieldretrievetrigger ); + self thread deleteriotshieldonplayerdeath(); + self thread watchshieldtriggervisibility( self.riotshieldretrievetrigger ); + self.riotshieldentity thread watchdeployedriotshielddamage(); + return shield_ent; +} + +riotshielddistancetest( origin ) +{ + assert( isdefined( origin ) ); + min_dist_squared = getdvarfloat( "riotshield_deploy_limit_radius" ); + min_dist_squared *= min_dist_squared; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( isdefined( level.players[i].riotshieldentity ) ) + { + dist_squared = distancesquared( level.players[i].riotshieldentity.origin, origin ); + + if ( min_dist_squared > dist_squared ) + { +/# + println( "Shield placement denied! Failed distance check to other riotshields." ); +#/ + return false; + } + } + } + + return true; +} + +watchdeployedriotshieldents() +{ +/# + assert( isdefined( self.riotshieldretrievetrigger ) ); + assert( isdefined( self.riotshieldentity ) ); +#/ + riotshieldretrievetrigger = self.riotshieldretrievetrigger; + riotshieldentity = self.riotshieldentity; + self waittill_any( "destroy_riotshield", "disconnect", "riotshield_zm_taken" ); + + if ( isdefined( self ) ) + { + self.shield_placement = 0; + self updateriotshieldmodel(); + } + + if ( isdefined( riotshieldretrievetrigger ) ) + riotshieldretrievetrigger delete(); + + if ( isdefined( riotshieldentity ) ) + riotshieldentity delete(); +} + +watchdeployedriotshielddamage() +{ + self endon( "death" ); + damagemax = getdvarint( "riotshield_deployed_health" ); + self.damagetaken = 0; + + while ( true ) + { + self.maxhealth = 100000; + self.health = self.maxhealth; + + self waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, idflags ); + + if ( !( isdefined( level.players_can_damage_riotshields ) && level.players_can_damage_riotshields ) ) + continue; + + if ( !isdefined( attacker ) || !isplayer( attacker ) ) + continue; + + assert( isdefined( self.owner ) && isdefined( self.owner.team ) ); + + if ( is_encounter() && attacker.team == self.owner.team && attacker != self.owner ) + continue; + + if ( isdefined( level.riotshield_damage_callback ) ) + self.owner [[ level.riotshield_damage_callback ]]( damage, 0 ); + else + { + if ( type == "MOD_MELEE" ) + damage *= getdvarfloat( "riotshield_melee_damage_scale" ); + else if ( type == "MOD_PISTOL_BULLET" || type == "MOD_RIFLE_BULLET" ) + damage *= getdvarfloat( "riotshield_bullet_damage_scale" ); + else if ( type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" || type == "MOD_EXPLOSIVE" || type == "MOD_EXPLOSIVE_SPLASH" || type == "MOD_PROJECTILE" || type == "MOD_PROJECTILE_SPLASH" ) + damage *= getdvarfloat( "riotshield_explosive_damage_scale" ); + else if ( type == "MOD_IMPACT" ) + damage *= getdvarfloat( "riotshield_projectile_damage_scale" ); + + self.damagetaken += damage; + + if ( self.damagetaken >= damagemax ) + self damagethendestroyriotshield(); + } + } +} + +damagethendestroyriotshield() +{ + self endon( "death" ); + self.owner.riotshieldretrievetrigger delete(); + self notsolid(); + self setclientflag( 14 ); + wait( getdvarfloat( "riotshield_destroyed_cleanup_time" ) ); + self.owner notify( "destroy_riotshield" ); +} + +deleteshieldondamage( shield_ent ) +{ + shield_ent waittill( "death" ); + + self notify( "destroy_riotshield" ); +} + +deleteshieldmodelonweaponpickup( shield_trigger ) +{ + shield_trigger waittill( "trigger", player ); + + self maps\mp\zombies\_zm_equipment::equipment_from_deployed( level.riotshield_name ); + self notify( "destroy_riotshield" ); + + if ( self != player ) + { + if ( isdefined( level.transferriotshield ) ) + [[ level.transferriotshield ]]( self, player ); + } +} + +watchshieldtriggervisibility( trigger ) +{ + self endon( "death" ); + trigger endon( "death" ); + + while ( isdefined( trigger ) ) + { + players = get_players(); + + foreach ( player in players ) + { + pickup = 1; + + if ( !isdefined( player ) ) + continue; + + if ( isdefined( level.cantransferriotshield ) ) + pickup = [[ level.cantransferriotshield ]]( self, player ); + + if ( !isdefined( trigger ) ) + return; + + if ( pickup ) + trigger setvisibletoplayer( player ); + else + trigger setinvisibletoplayer( player ); + + wait 0.05; + } + + wait 0.05; + } +} + +deleteriotshieldonplayerdeath() +{ + self.riotshieldentity endon( "death" ); + + self waittill( "death" ); + + self notify( "destroy_riotshield" ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weap_ballistic_knife.gsc b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weap_ballistic_knife.gsc new file mode 100644 index 0000000..d83c091 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weap_ballistic_knife.gsc @@ -0,0 +1,302 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_stats; + +init() +{ + if ( !isdefined( level.ballistic_knife_autorecover ) ) + level.ballistic_knife_autorecover = 1; + + if ( isdefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 ) + { + precachemodel( "t5_weapon_ballistic_knife_projectile" ); + precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" ); + } +} + +on_spawn( watcher, player ) +{ + player endon( "death" ); + player endon( "disconnect" ); + player endon( "zmb_lost_knife" ); + level endon( "game_ended" ); + + self waittill( "stationary", endpos, normal, angles, attacker, prey, bone ); + + isfriendly = 0; + + if ( isdefined( endpos ) ) + { + retrievable_model = spawn( "script_model", endpos ); + retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); + retrievable_model setowner( player ); + retrievable_model.owner = player; + retrievable_model.angles = angles; + retrievable_model.name = watcher.weapon; + + if ( isdefined( prey ) ) + { + if ( isplayer( prey ) && player.team == prey.team ) + isfriendly = 1; + else if ( isai( prey ) && player.team == prey.team ) + isfriendly = 1; + + if ( !isfriendly ) + { + retrievable_model linkto( prey, bone ); + retrievable_model thread force_drop_knives_to_ground_on_death( player, prey ); + } + else if ( isfriendly ) + { + retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) ); + normal = ( 0, 0, 1 ); + } + } + + watcher.objectarray[watcher.objectarray.size] = retrievable_model; + + if ( isfriendly ) + retrievable_model waittill( "stationary" ); + + retrievable_model thread drop_knives_to_ground( player ); + + if ( isfriendly ) + player notify( "ballistic_knife_stationary", retrievable_model, normal ); + else + player notify( "ballistic_knife_stationary", retrievable_model, normal, prey ); + + retrievable_model thread wait_to_show_glowing_model( prey ); + } +} + +wait_to_show_glowing_model( prey ) +{ + level endon( "game_ended" ); + self endon( "death" ); + wait 2; + self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); +} + +on_spawn_retrieve_trigger( watcher, player ) +{ + player endon( "death" ); + player endon( "disconnect" ); + player endon( "zmb_lost_knife" ); + level endon( "game_ended" ); + + player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey ); + + if ( !isdefined( retrievable_model ) ) + return; + + trigger_pos = []; + + if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) ) + { + trigger_pos[0] = prey.origin[0]; + trigger_pos[1] = prey.origin[1]; + trigger_pos[2] = prey.origin[2] + 10; + } + else + { + trigger_pos[0] = retrievable_model.origin[0] + 10 * normal[0]; + trigger_pos[1] = retrievable_model.origin[1] + 10 * normal[1]; + trigger_pos[2] = retrievable_model.origin[2] + 10 * normal[2]; + } + + if ( is_true( level.ballistic_knife_autorecover ) ) + { + trigger_pos[2] -= 50.0; + pickup_trigger = spawn( "trigger_radius", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ), 0, 50, 100 ); + } + else + { + pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ) ); + pickup_trigger setcursorhint( "HINT_NOICON" ); + } + + pickup_trigger.owner = player; + retrievable_model.retrievabletrigger = pickup_trigger; + hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP"; + + if ( isdefined( hint_string ) ) + pickup_trigger sethintstring( hint_string ); + else + pickup_trigger sethintstring( &"GENERIC_PICKUP" ); + + pickup_trigger setteamfortrigger( player.team ); + player clientclaimtrigger( pickup_trigger ); + pickup_trigger enablelinkto(); + + if ( isdefined( prey ) ) + pickup_trigger linkto( prey ); + else + pickup_trigger linkto( retrievable_model ); + + if ( isdefined( level.knife_planted ) ) + [[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey ); + + retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound ); + player thread watch_shutdown( pickup_trigger, retrievable_model ); +} + +debug_print( endpos ) +{ +/# + self endon( "death" ); + + while ( true ) + { + print3d( endpos, "pickup_trigger" ); + wait 0.05; + } +#/ +} + +watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse ) +{ + self endon( "death" ); + self endon( "delete" ); + level endon( "game_ended" ); + max_ammo = weaponmaxammo( weapon ) + 1; + autorecover = is_true( level.ballistic_knife_autorecover ); + + while ( true ) + { + trigger waittill( "trigger", player ); + + if ( !isalive( player ) ) + continue; + + if ( !player isonground() && !is_true( trigger.force_pickup ) ) + continue; + + if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam ) + continue; + + if ( isdefined( trigger.claimedby ) && player != trigger.claimedby ) + continue; + + ammo_stock = player getweaponammostock( weapon ); + ammo_clip = player getweaponammoclip( weapon ); + current_weapon = player getcurrentweapon(); + total_ammo = ammo_stock + ammo_clip; + hasreloaded = 1; + + if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon ) + hasreloaded = 0; + + if ( total_ammo >= max_ammo || !hasreloaded ) + continue; + + if ( autorecover || player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() || is_true( trigger.force_pickup ) ) + { + if ( isdefined( playersoundonuse ) ) + player playlocalsound( playersoundonuse ); + + if ( isdefined( npcsoundonuse ) ) + player playsound( npcsoundonuse ); + + player thread [[ callback ]]( weapon, model, trigger ); + break; + } + } +} + +pick_up( weapon, model, trigger ) +{ + if ( self hasweapon( weapon ) ) + { + current_weapon = self getcurrentweapon(); + + if ( current_weapon != weapon ) + { + clip_ammo = self getweaponammoclip( weapon ); + + if ( !clip_ammo ) + self setweaponammoclip( weapon, 1 ); + else + { + new_ammo_stock = self getweaponammostock( weapon ) + 1; + self setweaponammostock( weapon, new_ammo_stock ); + } + } + else + { + new_ammo_stock = self getweaponammostock( weapon ) + 1; + self setweaponammostock( weapon, new_ammo_stock ); + } + } + + self maps\mp\zombies\_zm_stats::increment_client_stat( "ballistic_knives_pickedup" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "ballistic_knives_pickedup" ); + model destroy_ent(); + trigger destroy_ent(); +} + +destroy_ent() +{ + if ( isdefined( self ) ) + { + if ( isdefined( self.glowing_model ) ) + self.glowing_model delete(); + + self delete(); + } +} + +watch_shutdown( trigger, model ) +{ + self waittill_any( "death_or_disconnect", "zmb_lost_knife" ); + trigger destroy_ent(); + model destroy_ent(); +} + +drop_knives_to_ground( player ) +{ + player endon( "death" ); + player endon( "zmb_lost_knife" ); + + for (;;) + { + level waittill( "drop_objects_to_ground", origin, radius ); + + if ( distancesquared( origin, self.origin ) < radius * radius ) + { + self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) ); + self thread update_retrieve_trigger( player ); + } + } +} + +force_drop_knives_to_ground_on_death( player, prey ) +{ + self endon( "death" ); + player endon( "zmb_lost_knife" ); + + prey waittill( "death" ); + + self unlink(); + self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) ); + self thread update_retrieve_trigger( player ); +} + +update_retrieve_trigger( player ) +{ + self endon( "death" ); + player endon( "zmb_lost_knife" ); + + if ( isdefined( level.custom_update_retrieve_trigger ) ) + { + self [[ level.custom_update_retrieve_trigger ]]( player ); + return; + } + + self waittill( "stationary" ); + + trigger = self.retrievabletrigger; + trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 ); + trigger linkto( self ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weap_bowie.gsc b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weap_bowie.gsc new file mode 100644 index 0000000..5896087 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weap_bowie.gsc @@ -0,0 +1,19 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_melee_weapon; +#include maps\mp\zombies\_zm_weapons; + +init() +{ + if ( isdefined( level.bowie_cost ) ) + cost = level.bowie_cost; + else + cost = 3000; + + maps\mp\zombies\_zm_melee_weapon::init( "bowie_knife_zm", "zombie_bowie_flourish", "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", cost, "bowie_upgrade", &"ZOMBIE_WEAPON_BOWIE_BUY", "bowie", undefined ); + maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie" ); + maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie_upgraded" ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weap_claymore.gsc b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weap_claymore.gsc new file mode 100644 index 0000000..4c5d3f8 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weap_claymore.gsc @@ -0,0 +1,466 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\gametypes_zm\_weaponobjects; + +init() +{ + if ( !isdefined( level.claymores_max_per_player ) ) + level.claymores_max_per_player = 12; + + trigs = getentarray( "claymore_purchase", "targetname" ); + + for ( i = 0; i < trigs.size; i++ ) + { + model = getent( trigs[i].target, "targetname" ); + + if ( isdefined( model ) ) + model hide(); + } + + array_thread( trigs, ::buy_claymores ); + level thread give_claymores_after_rounds(); + level.claymores_on_damage = ::satchel_damage; + level.pickup_claymores = ::pickup_claymores; + level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener; + level.claymore_detectiondot = cos( 70 ); + level.claymore_detectionmindist = 20; + level._effect["claymore_laser"] = loadfx( "weapon/claymore/fx_claymore_laser" ); +} + +buy_claymores() +{ + self.zombie_cost = 1000; + self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); + self setcursorhint( "HINT_WEAPON", "claymore_zm" ); + self endon( "kill_trigger" ); + + if ( !isdefined( self.stub ) ) + return; + + if ( isdefined( self.stub ) && !isdefined( self.stub.claymores_triggered ) ) + self.stub.claymores_triggered = 0; + + self.claymores_triggered = self.stub.claymores_triggered; + + while ( true ) + { + self waittill( "trigger", who ); + + if ( who in_revive_trigger() ) + continue; + + if ( who has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( is_player_valid( who ) ) + { + if ( who.score >= self.zombie_cost ) + { + if ( !who is_player_placeable_mine( "claymore_zm" ) ) + { + play_sound_at_pos( "purchase", self.origin ); + who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost ); + who thread claymore_setup(); + who thread show_claymore_hint( "claymore_purchased" ); + who thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" ); + + if ( isdefined( self.stub ) ) + self.claymores_triggered = self.stub.claymores_triggered; + + if ( self.claymores_triggered == 0 ) + { + model = getent( self.target, "targetname" ); + + if ( isdefined( model ) ) + model thread maps\mp\zombies\_zm_weapons::weapon_show( who ); + else if ( isdefined( self.clientfieldname ) ) + level setclientfield( self.clientfieldname, 1 ); + + self.claymores_triggered = 1; + + if ( isdefined( self.stub ) ) + self.stub.claymores_triggered = 1; + } + + trigs = getentarray( "claymore_purchase", "targetname" ); + + for ( i = 0; i < trigs.size; i++ ) + trigs[i] setinvisibletoplayer( who ); + } + else + who thread show_claymore_hint( "already_purchased" ); + } + else + { + who play_sound_on_ent( "no_purchase" ); + who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); + } + } + } +} + +claymore_unitrigger_update_prompt( player ) +{ + if ( player is_player_placeable_mine( "claymore_zm" ) ) + { + self sethintstring( "" ); + self setcursorhint( "HINT_NOICON" ); + return false; + } + + self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); + self setcursorhint( "HINT_WEAPON", "claymore_zm" ); + return true; +} + +set_claymore_visible() +{ + players = get_players(); + trigs = getentarray( "claymore_purchase", "targetname" ); + + while ( true ) + { + for ( j = 0; j < players.size; j++ ) + { + if ( !players[j] is_player_placeable_mine( "claymore_zm" ) ) + { + for ( i = 0; i < trigs.size; i++ ) + trigs[i] setinvisibletoplayer( players[j], 0 ); + } + } + + wait 1; + players = get_players(); + } +} + +claymore_safe_to_plant() +{ + if ( self.owner.claymores.size >= level.claymores_max_per_player ) + return 0; + + if ( isdefined( level.claymore_safe_to_plant ) ) + return self [[ level.claymore_safe_to_plant ]](); + + return 1; +} + +claymore_wait_and_detonate() +{ + wait 0.1; + self detonate( self.owner ); +} + +claymore_watch() +{ + self endon( "death" ); + self notify( "claymore_watch" ); + self endon( "claymore_watch" ); + + while ( true ) + { + self waittill( "grenade_fire", claymore, weapname ); + + if ( weapname == "claymore_zm" ) + { + claymore.owner = self; + claymore.team = self.team; + self notify( "zmb_enable_claymore_prompt" ); + + if ( claymore claymore_safe_to_plant() ) + { + if ( isdefined( level.claymore_planted ) ) + self thread [[ level.claymore_planted ]]( claymore ); + + claymore thread claymore_detonation(); + claymore thread play_claymore_effects(); + self maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_planted" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_planted" ); + } + else + claymore thread claymore_wait_and_detonate(); + } + } +} + +claymore_setup() +{ + if ( !isdefined( self.claymores ) ) + self.claymores = []; + + self thread claymore_watch(); + self giveweapon( "claymore_zm" ); + self set_player_placeable_mine( "claymore_zm" ); + self setactionslot( 4, "weapon", "claymore_zm" ); + self setweaponammostock( "claymore_zm", 2 ); +} + +adjust_trigger_origin( origin ) +{ + origin += vectorscale( ( 0, 0, 1 ), 20.0 ); + return origin; +} + +on_spawn_retrieve_trigger( watcher, player ) +{ + self maps\mp\gametypes_zm\_weaponobjects::onspawnretrievableweaponobject( watcher, player ); + + if ( isdefined( self.pickuptrigger ) ) + self.pickuptrigger sethintlowpriority( 0 ); +} + +pickup_claymores() +{ + player = self.owner; + + if ( !player hasweapon( "claymore_zm" ) ) + { + player thread claymore_watch(); + player giveweapon( "claymore_zm" ); + player set_player_placeable_mine( "claymore_zm" ); + player setactionslot( 4, "weapon", "claymore_zm" ); + player setweaponammoclip( "claymore_zm", 0 ); + player notify( "zmb_enable_claymore_prompt" ); + } + else + { + clip_ammo = player getweaponammoclip( self.name ); + clip_max_ammo = weaponclipsize( self.name ); + + if ( clip_ammo >= clip_max_ammo ) + { + self destroy_ent(); + player notify( "zmb_disable_claymore_prompt" ); + return; + } + } + + self pick_up(); + clip_ammo = player getweaponammoclip( self.name ); + clip_max_ammo = weaponclipsize( self.name ); + + if ( clip_ammo >= clip_max_ammo ) + player notify( "zmb_disable_claymore_prompt" ); + + player maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_pickedup" ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_pickedup" ); +} + +pickup_claymores_trigger_listener( trigger, player ) +{ + self thread pickup_claymores_trigger_listener_enable( trigger, player ); + self thread pickup_claymores_trigger_listener_disable( trigger, player ); +} + +pickup_claymores_trigger_listener_enable( trigger, player ) +{ + self endon( "delete" ); + self endon( "death" ); + + while ( true ) + { + player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" ); + + if ( !isdefined( trigger ) ) + return; + + trigger trigger_on(); + trigger linkto( self ); + } +} + +pickup_claymores_trigger_listener_disable( trigger, player ) +{ + self endon( "delete" ); + self endon( "death" ); + + while ( true ) + { + player waittill( "zmb_disable_claymore_prompt" ); + + if ( !isdefined( trigger ) ) + return; + + trigger unlink(); + trigger trigger_off(); + } +} + +shouldaffectweaponobject( object ) +{ + pos = self.origin + vectorscale( ( 0, 0, 1 ), 32.0 ); + dirtopos = pos - object.origin; + objectforward = anglestoforward( object.angles ); + dist = vectordot( dirtopos, objectforward ); + + if ( dist < level.claymore_detectionmindist ) + return 0; + + dirtopos = vectornormalize( dirtopos ); + dot = vectordot( dirtopos, objectforward ); + return dot > level.claymore_detectiondot; +} + +claymore_detonation() +{ + self endon( "death" ); + self waittill_not_moving(); + detonateradius = 96; + damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 ); + damagearea setexcludeteamfortrigger( self.team ); + damagearea enablelinkto(); + damagearea linkto( self ); + + if ( is_true( self.isonbus ) ) + damagearea setmovingplatformenabled( 1 ); + + self.damagearea = damagearea; + self thread delete_claymores_on_death( self.owner, damagearea ); + self.owner.claymores[self.owner.claymores.size] = self; + + while ( true ) + { + damagearea waittill( "trigger", ent ); + + if ( isdefined( self.owner ) && ent == self.owner ) + continue; + + if ( isdefined( ent.pers ) && isdefined( ent.pers["team"] ) && ent.pers["team"] == self.team ) + continue; + + if ( isdefined( ent.ignore_claymore ) && ent.ignore_claymore ) + continue; + + if ( !ent shouldaffectweaponobject( self ) ) + continue; + + if ( ent damageconetrace( self.origin, self ) > 0 ) + { + self playsound( "wpn_claymore_alert" ); + wait 0.4; + + if ( isdefined( self.owner ) ) + self detonate( self.owner ); + else + self detonate( undefined ); + + return; + } + } +} + +delete_claymores_on_death( player, ent ) +{ + self waittill( "death" ); + + if ( isdefined( player ) ) + arrayremovevalue( player.claymores, self ); + + wait 0.05; + + if ( isdefined( ent ) ) + ent delete(); +} + +satchel_damage() +{ + self endon( "death" ); + self setcandamage( 1 ); + self.health = 100000; + self.maxhealth = self.health; + attacker = undefined; + + while ( true ) + { + self waittill( "damage", amount, attacker ); + + if ( !isdefined( self ) ) + return; + + self.health = self.maxhealth; + + if ( !isplayer( attacker ) ) + continue; + + if ( isdefined( self.owner ) && attacker == self.owner ) + continue; + + if ( isdefined( attacker.pers ) && isdefined( attacker.pers["team"] ) && attacker.pers["team"] != level.zombie_team ) + continue; + + break; + } + + if ( level.satchelexplodethisframe ) + wait( 0.1 + randomfloat( 0.4 ) ); + else + wait 0.05; + + if ( !isdefined( self ) ) + return; + + level.satchelexplodethisframe = 1; + thread reset_satchel_explode_this_frame(); + self detonate( attacker ); +} + +reset_satchel_explode_this_frame() +{ + wait 0.05; + level.satchelexplodethisframe = 0; +} + +play_claymore_effects() +{ + self endon( "death" ); + self waittill_not_moving(); + playfxontag( level._effect["claymore_laser"], self, "tag_fx" ); +} + +give_claymores_after_rounds() +{ + while ( true ) + { + level waittill( "between_round_over" ); + + if ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) ) + { + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] is_player_placeable_mine( "claymore_zm" ) ) + { + players[i] giveweapon( "claymore_zm" ); + players[i] set_player_placeable_mine( "claymore_zm" ); + players[i] setactionslot( 4, "weapon", "claymore_zm" ); + players[i] setweaponammoclip( "claymore_zm", 2 ); + } + } + } + } +} + +show_claymore_hint( string ) +{ + self endon( "death" ); + self endon( "disconnect" ); + + if ( string == "claymore_purchased" ) + text = &"ZOMBIE_CLAYMORE_HOWTO"; + else + text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED"; + + show_equipment_hint_text( text ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weap_emp_bomb.gsc b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weap_emp_bomb.gsc new file mode 100644 index 0000000..4afe237 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weap_emp_bomb.gsc @@ -0,0 +1,320 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_power; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zombies\_zm_equipment; + +init() +{ + if ( !emp_bomb_exists() ) + return; + + set_zombie_var( "emp_stun_range", 600 ); + set_zombie_var( "emp_stun_time", 20 ); + set_zombie_var( "emp_perk_off_range", 420 ); + set_zombie_var( "emp_perk_off_time", 90 ); + precacheshellshock( "frag_grenade_mp" ); +/# + level.zombiemode_devgui_emp_bomb_give = ::player_give_emp_bomb; +#/ + level thread onplayerconnect(); + level._equipment_emp_destroy_fx = loadfx( "weapon/emp/fx_emp_explosion_equip" ); +} + +onplayerconnect() +{ + for (;;) + { + level waittill( "connecting", player ); + + player thread watch_for_grenade_throw(); + } +} + +player_give_emp_bomb() +{ + self giveweapon( "emp_grenade_zm" ); + self set_player_tactical_grenade( "emp_grenade_zm" ); +} + +emp_bomb_exists() +{ + return isdefined( level.zombie_weapons["emp_grenade_zm"] ); +} + +watch_for_grenade_throw() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "grenade_fire", grenade, weapname ); + + if ( weapname != "emp_grenade_zm" ) + continue; + + grenade.use_grenade_special_bookmark = 1; + grenade.grenade_multiattack_bookmark_count = 1; + grenade.owner = self; + self thread emp_detonate( grenade ); + } +} + +emp_detonate( grenade ) +{ + grenade_owner = undefined; + + if ( isdefined( grenade.owner ) ) + grenade_owner = grenade.owner; + + grenade waittill( "explode", grenade_origin ); + + emp_radius = level.zombie_vars["emp_perk_off_range"]; + emp_time = level.zombie_vars["emp_perk_off_time"]; + origin = grenade_origin; + + if ( !isdefined( origin ) ) + return; + + level notify( "emp_detonate", origin, emp_radius ); + self thread emp_detonate_zombies( grenade_origin, grenade_owner ); + + if ( isdefined( level.custom_emp_detonate ) ) + thread [[ level.custom_emp_detonate ]]( grenade_origin ); + + if ( isdefined( grenade_owner ) ) + grenade_owner thread destroyequipment( origin, emp_radius ); + + players_emped = emp_players( origin, emp_radius ); + disabled_list = maps\mp\zombies\_zm_power::change_power_in_radius( -1, origin, emp_radius ); + wait( emp_time ); + maps\mp\zombies\_zm_power::revert_power_to_list( 1, origin, emp_radius, disabled_list ); + unemp_players( players_emped ); +} + +emp_detonate_zombies( grenade_origin, grenade_owner ) +{ + zombies = get_array_of_closest( grenade_origin, getaispeciesarray( level.zombie_team, "all" ), undefined, undefined, level.zombie_vars["emp_stun_range"] ); + + if ( !isdefined( zombies ) ) + return; + + for ( i = 0; i < zombies.size; i++ ) + { + if ( !isdefined( zombies[i] ) || isdefined( zombies[i].ignore_inert ) && zombies[i].ignore_inert ) + continue; + + zombies[i].becoming_inert = 1; + } + + stunned = 0; + + for ( i = 0; i < zombies.size; i++ ) + { + if ( !isdefined( zombies[i] ) || isdefined( zombies[i].ignore_inert ) && zombies[i].ignore_inert ) + continue; + + stunned++; + zombies[i] thread stun_zombie(); + wait 0.05; + } + + if ( stunned >= 10 && isdefined( grenade_owner ) ) + grenade_owner notify( "the_lights_of_their_eyes" ); +} + +stun_zombie() +{ + self endon( "death" ); + self notify( "stun_zombie" ); + self endon( "stun_zombie" ); + + if ( self.health <= 0 ) + { +/# + iprintln( "trying to stun a dead zombie" ); +#/ + return; + } + + if ( isdefined( self.stun_zombie ) ) + { + self thread [[ self.stun_zombie ]](); + return; + } + + self thread maps\mp\zombies\_zm_ai_basic::start_inert(); +} + +emp_players( origin, radius ) +{ + players_emped = []; + players = get_players(); + rsquared = radius * radius; + + foreach ( player in players ) + { + if ( isalive( player ) && distancesquared( origin, player.origin ) < rsquared ) + { + player player_emp_on(); + players_emped[players_emped.size] = player; + } + } + + return players_emped; +} + +unemp_players( players_emped ) +{ + foreach ( player in players_emped ) + player player_emp_off(); +} + +player_emp_on() +{ + self.empgrenaded = 1; + self setempjammed( 1 ); + self shellshock( "frag_grenade_mp", 2 ); +} + +player_emp_off() +{ + if ( isdefined( self ) ) + { + self stopshellshock(); + self setempjammed( 0 ); + self.empgrenaded = undefined; + } +} + +getwatcherforweapon( weapname ) +{ + if ( !isdefined( self ) ) + return undefined; + + if ( !isplayer( self ) ) + return undefined; + + for ( i = 0; i < self.weaponobjectwatcherarray.size; i++ ) + { + if ( self.weaponobjectwatcherarray[i].weapon != weapname ) + continue; + + return self.weaponobjectwatcherarray[i]; + } + + return undefined; +} + +destroyequipment( origin, radius ) +{ + grenades = getentarray( "grenade", "classname" ); + rsquared = radius * radius; + + for ( i = 0; i < grenades.size; i++ ) + { + item = grenades[i]; + + if ( distancesquared( origin, item.origin ) > rsquared ) + continue; + + if ( !isdefined( item.name ) ) + continue; + + if ( !is_offhand_weapon( item.name ) ) + continue; + + watcher = item.owner getwatcherforweapon( item.name ); + + if ( !isdefined( watcher ) ) + continue; + + watcher thread waitanddetonate( item, 0.0, self, "emp_grenade_zm" ); + } + + equipment = maps\mp\zombies\_zm_equipment::get_destructible_equipment_list(); + + for ( i = 0; i < equipment.size; i++ ) + { + item = equipment[i]; + + if ( !isdefined( item ) ) + continue; + + if ( distancesquared( origin, item.origin ) > rsquared ) + continue; + + if ( isdefined( item.isriotshield ) && item.isriotshield ) + continue; + + waitanddamage( item, 505 ); + } +} + +isempweapon( weaponname ) +{ + if ( isdefined( weaponname ) && ( weaponname == "emp_mp" || weaponname == "emp_grenade_mp" || weaponname == "emp_grenade_zm" ) ) + return true; + + return false; +} + +waitanddetonate( object, delay, attacker, weaponname ) +{ + object endon( "death" ); + object endon( "hacked" ); + from_emp = isempweapon( weaponname ); + + if ( from_emp ) + { + object.stun_fx = 1; + + if ( isdefined( level._equipment_emp_destroy_fx ) ) + playfx( level._equipment_emp_destroy_fx, object.origin + vectorscale( ( 0, 0, 1 ), 5.0 ), ( 0, randomfloat( 360 ), 0 ) ); + + delay = 1.1; + } + + if ( delay ) + wait( delay ); + + if ( isdefined( object.detonated ) && object.detonated == 1 ) + return; + + if ( !isdefined( self.detonate ) ) + return; + + if ( isdefined( attacker ) && isplayer( attacker ) && isdefined( attacker.pers["team"] ) && isdefined( object.owner ) && isdefined( object.owner.pers["team"] ) ) + { + if ( level.teambased ) + { + if ( attacker.pers["team"] != object.owner.pers["team"] ) + attacker notify( "destroyed_explosive" ); + } + else if ( attacker != object.owner ) + attacker notify( "destroyed_explosive" ); + } + + object.detonated = 1; + object [[ self.detonate ]]( attacker, weaponname ); +} + +waitanddamage( object, damage ) +{ + object endon( "death" ); + object endon( "hacked" ); + object.stun_fx = 1; + + if ( isdefined( level._equipment_emp_destroy_fx ) ) + playfx( level._equipment_emp_destroy_fx, object.origin + vectorscale( ( 0, 0, 1 ), 5.0 ), ( 0, randomfloat( 360 ), 0 ) ); + + delay = 1.1; + + if ( delay ) + wait( delay ); + + object maps\mp\zombies\_zm_equipment::item_damage( damage ); +} diff --git a/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weap_jetgun.gsc b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weap_jetgun.gsc new file mode 100644 index 0000000..e549198 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weap_jetgun.gsc @@ -0,0 +1,847 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\animscripts\zm_death; +#include maps\mp\animscripts\zm_run; + +init() +{ + if ( !maps\mp\zombies\_zm_weapons::is_weapon_included( "jetgun_zm" ) ) + return; + + maps\mp\zombies\_zm_equipment::register_equipment( "jetgun_zm", &"ZOMBIE_EQUIP_JETGUN_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_JETGUN_HOWTO", "jetgun_zm_icon", "jetgun", ::jetgun_activation_watcher_thread, undefined, ::dropjetgun, ::pickupjetgun ); + maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "jetgun", &"ZOMBIE_EQUIP_JETGUN_PICKUP_HINT_STRING" ); + level._effect["jetgun_smoke_cloud"] = loadfx( "weapon/thunder_gun/fx_thundergun_smoke_cloud" ); + level._effect["jetgun_overheat"] = loadfx( "weapon/jet_gun/fx_jetgun_overheat" ); + level._effect["jetgun_vortex"] = loadfx( "weapon/jet_gun/fx_jetgun_on" ); + level._effect["jetgun_meat_grinder"] = loadfx( "weapon/jet_gun/fx_jetgun_kill" ); + set_zombie_var( "jetgun_cylinder_radius", 1024 ); + set_zombie_var( "jetgun_grind_range", 128 ); + set_zombie_var( "jetgun_gib_range", 256 ); + set_zombie_var( "jetgun_gib_damage", 50 ); + set_zombie_var( "jetgun_knockdown_range", 256 ); + set_zombie_var( "jetgun_drag_range", 2048 ); + set_zombie_var( "jetgun_knockdown_damage", 15 ); + set_zombie_var( "powerup_move_dist", 50 ); + set_zombie_var( "powerup_drag_range", 500 ); + level.jetgun_pulled_in_range = int( level.zombie_vars["jetgun_drag_range"] / 8 ) * level.zombie_vars["jetgun_drag_range"] / 8; + level.jetgun_pulling_in_range = int( level.zombie_vars["jetgun_drag_range"] / 4 ) * level.zombie_vars["jetgun_drag_range"] / 4; + level.jetgun_inner_range = int( level.zombie_vars["jetgun_drag_range"] / 2 ) * level.zombie_vars["jetgun_drag_range"] / 2; + level.jetgun_outer_edge = int( level.zombie_vars["jetgun_drag_range"] * level.zombie_vars["jetgun_drag_range"] ); + level.jetgun_gib_refs = []; + level.jetgun_gib_refs[level.jetgun_gib_refs.size] = "guts"; + level.jetgun_gib_refs[level.jetgun_gib_refs.size] = "right_arm"; + level.jetgun_gib_refs[level.jetgun_gib_refs.size] = "left_arm"; + level.jetgun_gib_refs[level.jetgun_gib_refs.size] = "right_leg"; + level.jetgun_gib_refs[level.jetgun_gib_refs.size] = "left_leg"; + level.jetgun_gib_refs[level.jetgun_gib_refs.size] = "no_legs"; +/# + level thread jetgun_devgui_dvar_think(); + level.zm_devgui_jetgun_never_overheat = ::never_overheat; +#/ + onplayerconnect_callback( ::jetgun_on_player_connect ); +} + +dropjetgun() +{ + item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "t6_wpn_zmb_jet_gun_world", "jetgun_zm", self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), self.angles ); + + if ( isdefined( item ) ) + { + item.overheating = self.jetgun_overheating; + item.heatval = self.jetgun_heatval; + item.original_owner = self; + item.owner = undefined; + item.name = "jetgun_zm"; + item.requires_pickup = 1; + } + + self.jetgun_overheating = undefined; + self.jetgun_heatval = undefined; + self takeweapon( "jetgun_zm" ); + return item; +} + +pickupjetgun( item ) +{ + item.owner = self; + + if ( isdefined( item.overheating ) && isdefined( item.heatval ) ) + { + self.jetgun_overheating = item.overheating; + self.jetgun_heatval = item.heatval; + } + + item.overheating = undefined; + item.heatval = undefined; + self setcurrentweaponspinlerp( 0 ); +} + +jetgun_activation_watcher_thread() +{ + self endon( "zombified" ); + self endon( "disconnect" ); + self endon( "jetgun_zm_taken" ); + + while ( true ) + self waittill_either( "jetgun_zm_activate", "jetgun_zm_deactivate" ); +} + +jetgun_devgui_dvar_think() +{ +/# + if ( !maps\mp\zombies\_zm_weapons::is_weapon_included( "jetgun_zm" ) ) + return; + + setdvar( "scr_jetgun_cylinder_radius", level.zombie_vars["jetgun_cylinder_radius"] ); + setdvar( "scr_jetgun_grind_range", level.zombie_vars["jetgun_grind_range"] ); + setdvar( "scr_jetgun_drag_range", level.zombie_vars["jetgun_drag_range"] ); + setdvar( "scr_jetgun_gib_range", level.zombie_vars["jetgun_gib_range"] ); + setdvar( "scr_jetgun_gib_damage", level.zombie_vars["jetgun_gib_damage"] ); + setdvar( "scr_jetgun_knockdown_range", level.zombie_vars["jetgun_knockdown_range"] ); + setdvar( "scr_jetgun_knockdown_damage", level.zombie_vars["jetgun_knockdown_damage"] ); + + for (;;) + { + level.zombie_vars["jetgun_cylinder_radius"] = getdvarint( _hash_6ECD5E99 ); + level.zombie_vars["jetgun_grind_range"] = getdvarint( _hash_8562CAD8 ); + level.zombie_vars["jetgun_drag_range"] = getdvarint( _hash_ECC8AEC2 ); + level.zombie_vars["jetgun_gib_range"] = getdvarint( _hash_D5D25B16 ); + level.zombie_vars["jetgun_gib_damage"] = getdvarint( _hash_6F74DFC8 ); + level.zombie_vars["jetgun_knockdown_range"] = getdvarint( _hash_B7484BD2 ); + level.zombie_vars["jetgun_knockdown_damage"] = getdvarint( _hash_7FA8E804 ); + wait 0.5; + } +#/ +} + +jetgun_on_player_connect() +{ + self thread wait_for_jetgun_fired(); + self thread watch_weapon_changes(); + self thread handle_overheated_jetgun(); +} + +get_jetgun_engine_direction() +{ + return self getcurrentweaponspinlerp(); +} + +set_jetgun_engine_direction( nv ) +{ + self setcurrentweaponspinlerp( nv ); +} + +never_overheat() +{ +/# + self notify( "never_overheat" ); + self endon( "never_overheat" ); + self endon( "death_or_disconnect" ); + + while ( true ) + { + if ( self getcurrentweapon() == "jetgun_zm" ) + self setweaponoverheating( 0, 0 ); + + wait 0.05; + } +#/ +} + +watch_overheat() +{ + self endon( "death_or_disconnect" ); + self endon( "weapon_change" ); + + if ( self getcurrentweapon() == "jetgun_zm" && isdefined( self.jetgun_overheating ) && isdefined( self.jetgun_heatval ) ) + self setweaponoverheating( self.jetgun_overheating, self.jetgun_heatval ); + + while ( true ) + { + if ( self getcurrentweapon() == "jetgun_zm" ) + { + overheating = self isweaponoverheating( 0 ); + heat = self isweaponoverheating( 1 ); + self.jetgun_overheating = overheating; + self.jetgun_heatval = heat; + + if ( overheating ) + self notify( "jetgun_overheated" ); + + if ( heat > 75 ) + self thread play_overheat_fx(); + } + + wait 0.05; + } +} + +play_overheat_fx() +{ + if ( !( isdefined( self.overheat_fx_playing ) && self.overheat_fx_playing ) ) + { + self.overheat_fx_playing = 1; + playfxontag( level._effect["jetgun_overheat"], self, "tag_flash" ); + wait 5; + + if ( isdefined( self ) ) + self.overheat_fx_playing = 0; + } +} + +handle_overheated_jetgun() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "jetgun_overheated" ); + + if ( self getcurrentweapon() == "jetgun_zm" ) + { + if ( isdefined( level.explode_overheated_jetgun ) && level.explode_overheated_jetgun ) + { + self thread maps\mp\zombies\_zm_equipment::equipment_release( "jetgun_zm" ); + weapon_org = self gettagorigin( "tag_weapon" ); + pcount = get_players().size; + pickup_time = 360 / pcount; + maps\mp\zombies\_zm_buildables::player_explode_buildable( "jetgun_zm", weapon_org, 250, 1, pickup_time ); + self.jetgun_overheating = undefined; + self.jetgun_heatval = undefined; + self playsound( "wpn_jetgun_explo" ); + } + else if ( isdefined( level.unbuild_overheated_jetgun ) && level.unbuild_overheated_jetgun ) + { + self thread maps\mp\zombies\_zm_equipment::equipment_release( "jetgun_zm" ); + maps\mp\zombies\_zm_buildables::unbuild_buildable( "jetgun_zm", 1 ); + self.jetgun_overheating = undefined; + self.jetgun_heatval = undefined; + } + else if ( isdefined( level.take_overheated_jetgun ) && level.take_overheated_jetgun ) + { + self thread maps\mp\zombies\_zm_equipment::equipment_release( "jetgun_zm" ); + self.jetgun_overheating = undefined; + self.jetgun_heatval = undefined; + } + } + } +} + +watch_weapon_changes() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "weapon_change", weapon ); + + if ( weapon == "jetgun_zm" ) + { +/# + if ( getdvarint( _hash_BCDDAAFF ) > 0 ) + self thread zombie_drag_radius(); +#/ + self thread watch_overheat(); + } + } +} + +wait_for_jetgun_fired() +{ + self endon( "disconnect" ); + + self waittill( "spawned_player" ); + + for (;;) + { + self waittill( "weapon_fired" ); + + currentweapon = self getcurrentweapon(); + + if ( currentweapon == "jetgun_zm" || currentweapon == "jetgun_upgraded_zm" ) + self jetgun_firing(); + } +} + +jetgun_network_choke() +{ + level.jetgun_network_choke_count++; + + if ( !( level.jetgun_network_choke_count % 10 ) ) + { + wait_network_frame(); + wait_network_frame(); + wait_network_frame(); + } +} + +is_jetgun_firing() +{ + return abs( self get_jetgun_engine_direction() ) > 0.2; +} + +jetgun_firing() +{ + if ( !isdefined( self.jetsound_ent ) ) + { + self.jetsound_ent = spawn( "script_origin", self.origin ); + self.jetsound_ent linkto( self, "tag_origin" ); + } + + jetgun_fired = 0; + + if ( self is_jetgun_firing() && jetgun_fired == 0 ) + { + self.jetsound_ent playloopsound( "wpn_jetgun_effect_plr_loop", 0.8 ); + self.jetsound_ent playsound( "wpn_jetgun_effect_plr_start" ); + self notify( "jgun_snd" ); + } + + while ( self is_jetgun_firing() ) + { + jetgun_fired = 1; + self thread jetgun_fired(); + view_pos = self gettagorigin( "tag_flash" ); + view_angles = self gettagangles( "tag_flash" ); + + if ( self get_jetgun_engine_direction() < 0 ) + playfx( level._effect["jetgun_smoke_cloud"], view_pos - self getplayerviewheight(), anglestoforward( view_angles ), anglestoup( view_angles ) ); + else + playfx( level._effect["jetgun_smoke_cloud"], view_pos - self getplayerviewheight(), anglestoforward( view_angles ) * -1, anglestoup( view_angles ) ); + + wait 0.25; + } + + if ( jetgun_fired == 1 ) + { + self.jetsound_ent stoploopsound( 0.5 ); + self.jetsound_ent playsound( "wpn_jetgun_effect_plr_end" ); + self.jetsound_ent thread sound_ent_cleanup(); + jetgun_fired = 0; + } +} + +sound_ent_cleanup() +{ + self endon( "jgun_snd" ); + wait 4; + + if ( isdefined( self.jetsound_ent ) ) + self delete(); +} + +jetgun_fired() +{ + if ( !self is_jetgun_firing() ) + return; + + origin = self getweaponmuzzlepoint(); + physicsjetthrust( origin, self getweaponforwarddir() * -1, level.zombie_vars["jetgun_grind_range"], self get_jetgun_engine_direction(), 0.85 ); + + if ( !isdefined( level.jetgun_knockdown_enemies ) ) + { + level.jetgun_knockdown_enemies = []; + level.jetgun_knockdown_gib = []; + level.jetgun_drag_enemies = []; + level.jetgun_fling_enemies = []; + level.jetgun_grind_enemies = []; + } + + powerups = maps\mp\zombies\_zm_powerups::get_powerups(); + + if ( isdefined( powerups ) && powerups.size ) + self thread try_pull_powerups( powerups ); + + self jetgun_get_enemies_in_range( self get_jetgun_engine_direction() ); + level.jetgun_network_choke_count = 0; + + foreach ( index, zombie in level.jetgun_fling_enemies ) + { + jetgun_network_choke(); + + if ( isdefined( zombie ) ) + zombie thread jetgun_fling_zombie( self, index ); + } + + foreach ( zombie in level.jetgun_drag_enemies ) + { + jetgun_network_choke(); + + if ( isdefined( zombie ) ) + { + zombie.jetgun_owner = self; + zombie thread jetgun_drag_zombie( origin, -1 * self get_jetgun_engine_direction() ); + } + } + + level.jetgun_knockdown_enemies = []; + level.jetgun_knockdown_gib = []; + level.jetgun_drag_enemies = []; + level.jetgun_fling_enemies = []; + level.jetgun_grind_enemies = []; +} + +try_pull_powerups( powerups ) +{ + powerup_move_dist = level.zombie_vars["powerup_move_dist"] * -1 * self get_jetgun_engine_direction(); + powerup_range_squared = level.zombie_vars["powerup_drag_range"] * level.zombie_vars["powerup_drag_range"]; + view_pos = self getweaponmuzzlepoint(); + forward_view_angles = self getweaponforwarddir(); + + foreach ( powerup in powerups ) + { + if ( distancesquared( view_pos, powerup.origin ) > powerup_range_squared ) + continue; + + normal = vectornormalize( powerup.origin - view_pos ); + dot = vectordot( forward_view_angles, normal ); + + if ( abs( dot ) < 0.7 ) + continue; + + powerup notify( "move_powerup", view_pos, powerup_move_dist ); + } +} + +jetgun_get_enemies_in_range( invert ) +{ + view_pos = self getweaponmuzzlepoint(); + zombies = get_array_of_closest( view_pos, get_round_enemy_array(), undefined, 3, level.zombie_vars["jetgun_drag_range"] ); + + if ( !isdefined( zombies ) ) + { + + } + + knockdown_range_squared = level.zombie_vars["jetgun_knockdown_range"] * level.zombie_vars["jetgun_knockdown_range"]; + drag_range_squared = level.zombie_vars["jetgun_drag_range"] * level.zombie_vars["jetgun_drag_range"]; + gib_range_squared = level.zombie_vars["jetgun_gib_range"] * level.zombie_vars["jetgun_gib_range"]; + grind_range_squared = level.zombie_vars["jetgun_grind_range"] * level.zombie_vars["jetgun_grind_range"]; + cylinder_radius_squared = level.zombie_vars["jetgun_cylinder_radius"] * level.zombie_vars["jetgun_cylinder_radius"]; + forward_view_angles = self getweaponforwarddir(); + end_pos = view_pos + vectorscale( forward_view_angles, level.zombie_vars["jetgun_knockdown_range"] ); +/# + if ( 2 == getdvarint( _hash_BCDDAAFF ) ) + { + near_circle_pos = view_pos + vectorscale( forward_view_angles, 2 ); + circle( near_circle_pos, level.zombie_vars["jetgun_cylinder_radius"], ( 1, 0, 0 ), 0, 0, 100 ); + line( near_circle_pos, end_pos, ( 0, 0, 1 ), 1, 0, 100 ); + circle( end_pos, level.zombie_vars["jetgun_cylinder_radius"], ( 1, 0, 0 ), 0, 0, 100 ); + } +#/ + for ( i = 0; i < zombies.size; i++ ) + self jetgun_check_enemies_in_range( zombies[i], view_pos, drag_range_squared, gib_range_squared, grind_range_squared, cylinder_radius_squared, forward_view_angles, end_pos, invert ); +} + +jetgun_check_enemies_in_range( zombie, view_pos, drag_range_squared, gib_range_squared, grind_range_squared, cylinder_radius_squared, forward_view_angles, end_pos, invert ) +{ + if ( !isdefined( zombie ) ) + return; + + if ( !isdefined( zombie ) ) + return; + + if ( zombie enemy_killed_by_jetgun() ) + return; + + if ( !isdefined( zombie.ai_state ) || zombie.ai_state != "find_flesh" && zombie.ai_state != "zombieMoveOnBus" ) + return; + + if ( isdefined( zombie.in_the_ground ) && zombie.in_the_ground ) + return; + + if ( isdefined( zombie.is_avogadro ) && zombie.is_avogadro ) + return; + + if ( isdefined( zombie.isdog ) && zombie.isdog ) + return; + + if ( isdefined( zombie.isscreecher ) && zombie.isscreecher ) + return; + + if ( isdefined( self.animname ) && self.animname == "quad_zombie" ) + return; + + test_origin = zombie getcentroid(); + test_range_squared = distancesquared( view_pos, test_origin ); + + if ( test_range_squared > drag_range_squared ) + { + zombie jetgun_debug_print( "range", ( 1, 0, 0 ) ); + return; + } + + normal = vectornormalize( test_origin - view_pos ); + dot = vectordot( forward_view_angles, normal ); + + if ( abs( dot ) < 0.7 ) + { + zombie jetgun_debug_print( "dot", ( 1, 0, 0 ) ); + return; + } + + radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin ); + + if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared ) + { + zombie jetgun_debug_print( "cylinder", ( 1, 0, 0 ) ); + return; + } + + if ( 0 == zombie damageconetrace( view_pos, self ) ) + { + zombie jetgun_debug_print( "cone", ( 1, 0, 0 ) ); + return; + } + + jetgun_blow_suck = invert; + + if ( 0 > dot ) + jetgun_blow_suck *= -1; + + if ( test_range_squared < grind_range_squared ) + { + level.jetgun_fling_enemies[level.jetgun_fling_enemies.size] = zombie; + level.jetgun_grind_enemies[level.jetgun_grind_enemies.size] = dot < 0; + } + else if ( test_range_squared < drag_range_squared && dot > 0 ) + level.jetgun_drag_enemies[level.jetgun_drag_enemies.size] = zombie; +} + +jetgun_debug_print( msg, color ) +{ +/# + if ( !getdvarint( _hash_BCDDAAFF ) ) + return; + + if ( !isdefined( color ) ) + color = ( 1, 1, 1 ); + + print3d( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), msg, color, 1, 1, 40 ); +#/ +} + +jetgun_debug_print_on_ent( msg, color ) +{ +/# + if ( !getdvarint( _hash_BCDDAAFF ) ) + return; + + if ( !isdefined( color ) ) + color = ( 1, 1, 1 ); + + self notify( "new_jetgun_debug_print_on_ent" ); + self endon( "death" ); + self endon( "jetgun_end_drag_state" ); + self endon( "new_jetgun_debug_print_on_ent" ); + + while ( true ) + { + print3d( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), msg, color, 1, 1 ); + wait 0.05; + } +#/ +} + +try_gibbing() +{ + if ( isdefined( self ) && isdefined( self.a ) && !( isdefined( self.isscreecher ) && self.isscreecher ) ) + { + self.a.gib_ref = random( level.jetgun_gib_refs ); + self thread maps\mp\animscripts\zm_death::do_gib(); + } +} + +jetgun_handle_death_notetracks( note ) +{ + if ( note == "jetgunned" ) + self thread jetgun_grind_death_ending(); +} + +jetgun_grind_death_ending() +{ + if ( !isdefined( self ) ) + return; + + self hide(); + wait 0.1; + self self_delete(); +} + +jetgun_grind_zombie( player ) +{ + player endon( "death" ); + player endon( "disconnect" ); + self endon( "death" ); + + if ( !isdefined( self.jetgun_grind ) ) + { + self.jetgun_grind = 1; + self notify( "grinding" ); + player set_jetgun_engine_direction( 0.5 * player get_jetgun_engine_direction() ); + + if ( is_mature() ) + { + if ( isdefined( level._effect["zombie_guts_explosion"] ) ) + playfx( level._effect["zombie_guts_explosion"], self gettagorigin( "J_SpineLower" ) ); + } + + self.nodeathragdoll = 1; + self.handle_death_notetracks = ::jetgun_handle_death_notetracks; + self dodamage( self.health + 666, player.origin, player ); + } +} + +jetgun_fling_zombie( player, index ) +{ + if ( !isdefined( self ) ) + return; + + if ( isdefined( self.jetgun_fling_func ) ) + { + self [[ self.jetgun_fling_func ]]( player ); + return; + } + + was_alive = isalive( self ); + + if ( was_alive ) + { + self.jetgun_fling = 1; + self notify( "flinging" ); + deathanim = undefined; + + if ( is_mature() ) + player weaponplayejectbrass(); + + if ( isdefined( self.has_legs ) && self.has_legs ) + { + if ( isdefined( self.jetgun_drag_state ) && self.jetgun_drag_state == "jetgun_sprint" ) + deathanim = "zm_jetgun_sprint_death"; + else + deathanim = "zm_jetgun_death"; + } + else + deathanim = "zm_jetgun_death_crawl"; + + self.deathanim = deathanim; + player playsound( "evt_jetgun_zmb_suck" ); + } + + self thread jetgun_grind_zombie( player ); +} + +jetgun_drag_zombie( vdir, speed ) +{ + if ( isdefined( self.jetgun_drag_func ) ) + { + self [[ self.jetgun_drag_func ]]( vdir, speed ); + return; + } + + self zombie_do_drag( vdir, speed ); +} + +jetgun_knockdown_zombie( player, gib ) +{ + self endon( "death" ); + return; + + if ( isdefined( self.jetgun_knockdown_func ) ) + self [[ self.jetgun_knockdown_func ]]( player, gib ); + else + self dodamage( level.zombie_vars["jetgun_knockdown_damage"], player.origin, player ); + + if ( gib ) + { + self.a.gib_ref = random( level.jetgun_gib_refs ); + self thread maps\mp\animscripts\zm_death::do_gib(); + } + + self.jetgun_handle_pain_notetracks = ::handle_jetgun_pain_notetracks; + self dodamage( level.zombie_vars["jetgun_knockdown_damage"], player.origin, player ); +} + +handle_jetgun_pain_notetracks( note ) +{ + if ( note == "zombie_knockdown_ground_impact" ) + playfx( level._effect["jetgun_knockdown_ground"], self.origin, anglestoforward( self.angles ), anglestoup( self.angles ) ); +} + +is_jetgun_damage() +{ + return isdefined( self.damageweapon ) && ( self.damageweapon == "jetgun_zm" || self.damageweapon == "jetgun_upgraded_zm" ) && ( self.damagemod != "MOD_GRENADE" && self.damagemod != "MOD_GRENADE_SPLASH" ); +} + +enemy_killed_by_jetgun() +{ + return isdefined( self.jetgun_fling ) && self.jetgun_fling || isdefined( self.jetgun_grind ) && self.jetgun_grind; +} + +zombie_do_drag( vdir, speed ) +{ + if ( !self zombie_is_in_drag_state() ) + { + self zombie_enter_drag_state( vdir, speed ); + self thread zombie_drag_think(); + } + else + self zombie_keep_in_drag_state( vdir, speed ); +} + +zombie_is_in_drag_state() +{ + return isdefined( self.drag_state ) && self.drag_state; +} + +zombie_should_stay_in_drag_state() +{ + if ( !isdefined( self ) || !isalive( self ) ) + return false; + + if ( !isdefined( self.jetgun_owner ) || self.jetgun_owner getcurrentweapon() != "jetgun_zm" || !self.jetgun_owner is_jetgun_firing() ) + return false; + + if ( isdefined( self.drag_state ) && self.drag_state ) + return true; + + return false; +} + +zombie_keep_in_drag_state( vdir, speed ) +{ + self.drag_start_time = gettime(); + self.drag_target = vdir; +} + +zombie_enter_drag_state( vdir, speed ) +{ + self.drag_state = 1; + self.jetgun_drag_state = "unaffected"; + self.was_traversing = isdefined( self.is_traversing ) && self.is_traversing; + self notify( "killanimscript" ); + self zombie_keep_in_drag_state( vdir, speed ); + self.zombie_move_speed_pre_jetgun_drag = self.zombie_move_speed; +} + +zombie_exit_drag_state() +{ + self notify( "jetgun_end_drag_state" ); + self.drag_state = 0; + self.jetgun_drag_state = "unaffected"; + self.needs_run_update = 1; + + if ( isdefined( self.zombie_move_speed_pre_jetgun_drag ) ) + { + self set_zombie_run_cycle( self.zombie_move_speed_pre_jetgun_drag ); + self.zombie_move_speed_pre_jetgun_drag = undefined; + } + else + self set_zombie_run_cycle(); + + if ( !( isdefined( self.isdog ) && self.isdog ) ) + self maps\mp\animscripts\zm_run::moverun(); + + if ( isdefined( self.was_traversing ) && self.was_traversing ) + { + self traversemode( "gravity" ); + self.a.nodeath = 0; + self maps\mp\animscripts\zm_run::needsupdate(); + + if ( !self.isdog ) + self maps\mp\animscripts\zm_run::moverun(); + + self.is_traversing = 0; + self notify( "zombie_end_traverse" ); + + if ( is_mature() ) + { + if ( isdefined( level._effect["zombie_guts_explosion"] ) ) + playfx( level._effect["zombie_guts_explosion"], self gettagorigin( "J_SpineLower" ) ); + } + + self.nodeathragdoll = 1; + self dodamage( self.health + 666, self.origin, self ); + } +} + +aiphysicstrace( start, end ) +{ + result = physicstrace( start, end, ( 0, 0, 0 ), ( 0, 0, 0 ), self ); + return result["position"]; +} + +zombie_drag_think() +{ + self endon( "death" ); + self endon( "flinging" ); + self endon( "grinding" ); + + while ( self zombie_should_stay_in_drag_state() ) + { + self._distance_to_jetgun_owner = distancesquared( self.origin, self.jetgun_owner.origin ); + jetgun_network_choke(); + + if ( self.zombie_move_speed == "sprint" || self._distance_to_jetgun_owner < level.jetgun_pulled_in_range ) + self jetgun_drag_set( "jetgun_sprint", "jetgun_walk_fast_crawl" ); + else if ( self._distance_to_jetgun_owner < level.jetgun_pulling_in_range ) + self jetgun_drag_set( "jetgun_walk_fast", "jetgun_walk_fast" ); + else if ( self._distance_to_jetgun_owner < level.jetgun_inner_range ) + self jetgun_drag_set( "jetgun_walk", "jetgun_walk_slow_crawl" ); + else if ( self._distance_to_jetgun_owner < level.jetgun_outer_edge ) + self jetgun_drag_set( "jetgun_walk_slow", "jetgun_walk_slow_crawl" ); + + wait 0.1; + } + + self thread zombie_exit_drag_state(); +} + +jetgun_drag_set( legsanim, crawlanim ) +{ + self endon( "death" ); + self.needs_run_update = 1; + + if ( self.has_legs ) + { + self._had_legs = 1; + self set_zombie_run_cycle( legsanim ); + } + else + { + self._had_legs = 0; + self set_zombie_run_cycle( crawlanim ); + } +/# + if ( self.jetgun_drag_state != legsanim ) + self thread jetgun_debug_print_on_ent( legsanim, ( 0, 0, 1 ) ); +#/ + self.jetgun_drag_state = legsanim; +} + +zombie_drag_radius() +{ +/# + self endon( "death_or_disconnect" ); + self endon( "weapon_change" ); + + while ( true ) + { + circle( self.origin, level.zombie_vars["jetgun_grind_range"], vectorscale( ( 1, 1, 1 ), 0.5 ) ); + circle( self.origin, level.zombie_vars["jetgun_drag_range"] / 8, ( 0, 0, 1 ) ); + circle( self.origin, level.zombie_vars["jetgun_drag_range"] / 4, ( 0, 1, 0 ) ); + circle( self.origin, level.zombie_vars["jetgun_drag_range"] / 2, ( 1, 0, 0 ) ); + circle( self.origin, level.zombie_vars["jetgun_drag_range"], ( 1, 0, 1 ) ); + wait 0.05; + } +#/ +} diff --git a/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weap_riotshield.gsc b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weap_riotshield.gsc new file mode 100644 index 0000000..a1b71c9 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weap_riotshield.gsc @@ -0,0 +1,768 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_riotshield; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\animscripts\zm_death; +#include maps\mp\zombies\_zm_audio; + +init() +{ + maps\mp\zombies\_zm_riotshield::init(); + set_zombie_var( "riotshield_cylinder_radius", 360 ); + set_zombie_var( "riotshield_fling_range", 90 ); + set_zombie_var( "riotshield_gib_range", 90 ); + set_zombie_var( "riotshield_gib_damage", 75 ); + set_zombie_var( "riotshield_knockdown_range", 90 ); + set_zombie_var( "riotshield_knockdown_damage", 15 ); + set_zombie_var( "riotshield_hit_points", 2250 ); + set_zombie_var( "riotshield_fling_damage_shield", 100 ); + set_zombie_var( "riotshield_knockdown_damage_shield", 15 ); + level.riotshield_network_choke_count = 0; + level.riotshield_gib_refs = []; + level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "guts"; + level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "right_arm"; + level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "left_arm"; + level.riotshield_damage_callback = ::player_damage_shield; + level.deployed_riotshield_damage_callback = ::deployed_damage_shield; + level.transferriotshield = ::transferriotshield; + level.cantransferriotshield = ::cantransferriotshield; + maps\mp\zombies\_zm_spawner::register_zombie_damage_callback( ::riotshield_zombie_damage_response ); + maps\mp\zombies\_zm_equipment::register_equipment( "riotshield_zm", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_RIOTSHIELD_HOWTO", "riotshield_zm_icon", "riotshield", ::riotshield_activation_watcher_thread, undefined, ::dropshield, ::pickupshield ); + maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "riotshield", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING" ); + onplayerconnect_callback( ::onplayerconnect ); +} + +onplayerconnect() +{ + self.player_shield_reset_health = ::player_init_shield_health; + self.player_shield_apply_damage = ::player_damage_shield; + self.player_shield_reset_location = ::player_init_shield_location; + self thread watchriotshielduse(); + self thread watchriotshieldmelee(); + self thread player_watch_laststand(); +} + +dropshield() +{ + self.shield_placement = 0; + self maps\mp\zombies\_zm_riotshield::updateriotshieldmodel(); + item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "t6_wpn_zmb_shield_world", "riotshield_zm", self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), self.angles ); + + if ( isdefined( item ) ) + { + item.shielddamagetaken = self.shielddamagetaken; + item.original_owner = self; + item.owner = undefined; + item.name = level.riotshield_name; + item.isriotshield = 1; + item deployed_damage_shield( 0 ); + item setscriptmoverflag( 0 ); + item.requires_pickup = 1; + item thread watchtoofriendly( self ); + } + + self takeweapon( level.riotshield_name ); + return item; +} + +watchtoofriendly( player ) +{ + wait 1; + + if ( isdefined( self ) && isdefined( player ) && distance2dsquared( self.origin, player.origin ) < 36 ) + { + if ( isalive( player ) ) + player playlocalsound( level.zmb_laugh_alias ); + + player maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); + self deployed_damage_shield( 2000 ); + } +} + +pickupshield( item ) +{ + item.owner = self; + damage = item.shielddamagetaken; + damagemax = level.zombie_vars["riotshield_hit_points"]; + self.shielddamagetaken = damage; + self player_set_shield_health( damage, damagemax ); +} + +placeshield( origin, angles ) +{ + if ( self getcurrentweapon() != level.riotshield_name ) + { + self switchtoweapon( level.riotshield_name ); + + self waittill( "weapon_change" ); + } + + item = self maps\mp\zombies\_zm_riotshield::doriotshielddeploy( origin, angles ); + + if ( isdefined( item ) ) + { + item.origin = self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ); + item.angles = self.angles; + item.owner = self; + } + + return item; +} + +cantransferriotshield( fromplayer, toplayer ) +{ + if ( isdefined( toplayer.screecher_weapon ) ) + return false; + + if ( isdefined( toplayer.is_drinking ) && toplayer.is_drinking > 0 ) + return false; + + if ( toplayer maps\mp\zombies\_zm_laststand::player_is_in_laststand() || toplayer in_revive_trigger() ) + return false; + + if ( toplayer isthrowinggrenade() ) + return false; + + if ( fromplayer == toplayer ) + return true; + + if ( toplayer is_player_equipment( level.riotshield_name ) && toplayer.shield_placement != 3 ) + return false; + + if ( fromplayer.session_team != toplayer.session_team ) + return false; + + return true; +} + +transferriotshield( fromplayer, toplayer ) +{ + damage = fromplayer.shielddamagetaken; + toplayer player_take_riotshield(); + fromplayer player_take_riotshield(); + toplayer.shielddamagetaken = damage; + toplayer.shield_placement = 3; + toplayer.shield_damage_level = 0; + toplayer maps\mp\zombies\_zm_equipment::equipment_give( "riotshield_zm" ); + toplayer switchtoweapon( "riotshield_zm" ); + damagemax = level.zombie_vars["riotshield_hit_points"]; + toplayer player_set_shield_health( damage, damagemax ); +} + +player_take_riotshield() +{ + self notify( "destroy_riotshield" ); + + if ( self getcurrentweapon() == "riotshield_zm" ) + { + new_primary = ""; + + if ( isdefined( self.laststand ) && self.laststand ) + { + new_primary = self.laststandpistol; + self giveweapon( new_primary ); + } + else + { + primaryweapons = self getweaponslistprimaries(); + + for ( i = 0; i < primaryweapons.size; i++ ) + { + if ( primaryweapons[i] != "riotshield_zm" ) + { + new_primary = primaryweapons[i]; + break; + } + } + + if ( new_primary == "" ) + { + self maps\mp\zombies\_zm_weapons::give_fallback_weapon(); + new_primary = "zombie_fists_zm"; + } + } + + self switchtoweaponimmediate( new_primary ); + self playsound( "wpn_riotshield_zm_destroy" ); + + self waittill( "weapon_change" ); + } + + self maps\mp\zombies\_zm_riotshield::removeriotshield(); + self maps\mp\zombies\_zm_equipment::equipment_take( "riotshield_zm" ); + self.hasriotshield = 0; + self.hasriotshieldequipped = 0; +} + +player_watch_laststand() +{ + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "entering_last_stand" ); + + if ( self getcurrentweapon() == "riotshield_zm" ) + { + new_primary = self.laststandpistol; + self giveweapon( new_primary ); + self switchtoweaponimmediate( new_primary ); + } + } +} + +player_init_shield_health() +{ + retval = self.shielddamagetaken > 0; + self.shielddamagetaken = 0; + self.shield_damage_level = 0; + self maps\mp\zombies\_zm_riotshield::updateriotshieldmodel(); + return retval; +} + +player_init_shield_location() +{ + self.hasriotshield = 1; + self.hasriotshieldequipped = 0; + self.shield_placement = 2; + self maps\mp\zombies\_zm_riotshield::updateriotshieldmodel(); +} + +player_set_shield_health( damage, max_damage ) +{ + shieldhealth = int( 100 * ( max_damage - damage ) / max_damage ); + + if ( shieldhealth >= 50 ) + self.shield_damage_level = 0; + else if ( shieldhealth >= 25 ) + self.shield_damage_level = 2; + else + self.shield_damage_level = 3; + + self maps\mp\zombies\_zm_riotshield::updateriotshieldmodel(); +} + +deployed_set_shield_health( damage, max_damage ) +{ + shieldhealth = int( 100 * ( max_damage - damage ) / max_damage ); + + if ( shieldhealth >= 50 ) + self.shield_damage_level = 0; + else if ( shieldhealth >= 25 ) + self.shield_damage_level = 2; + else + self.shield_damage_level = 3; + + self maps\mp\zombies\_zm_riotshield::updatestandaloneriotshieldmodel(); +} + +player_damage_shield( idamage, bheld ) +{ + damagemax = level.zombie_vars["riotshield_hit_points"]; + + if ( !isdefined( self.shielddamagetaken ) ) + self.shielddamagetaken = 0; + + self.shielddamagetaken += idamage; + + if ( self.shielddamagetaken >= damagemax ) + { + if ( bheld || !isdefined( self.shield_ent ) ) + { + self playrumbleonentity( "damage_heavy" ); + earthquake( 1.0, 0.75, self.origin, 100 ); + } + else if ( isdefined( self.shield_ent ) ) + { + if ( is_true( self.shield_ent.destroy_begun ) ) + return; + + self.shield_ent.destroy_begun = 1; + shield_origin = self.shield_ent.origin; + level thread maps\mp\zombies\_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx ); + wait 1; + playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin ); + } + + self thread player_take_riotshield(); + } + else + { + if ( bheld ) + { + self playrumbleonentity( "damage_light" ); + earthquake( 0.5, 0.5, self.origin, 100 ); + } + + self player_set_shield_health( self.shielddamagetaken, damagemax ); + self playsound( "fly_riotshield_zm_impact_zombies" ); + } +} + +deployed_damage_shield( idamage ) +{ + damagemax = level.zombie_vars["riotshield_hit_points"]; + + if ( !isdefined( self.shielddamagetaken ) ) + self.shielddamagetaken = 0; + + self.shielddamagetaken += idamage; + + if ( self.shielddamagetaken >= damagemax ) + { + shield_origin = self.origin; + + if ( isdefined( self.stub ) ) + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub ); + + if ( isdefined( self.original_owner ) ) + self.original_owner maps\mp\zombies\_zm_equipment::equipment_take( "riotshield_zm" ); + + maps\mp\zombies\_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx ); + playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin ); + self_delete(); + } + else + self deployed_set_shield_health( self.shielddamagetaken, damagemax ); +} + +riotshield_activation_watcher_thread() +{ + self endon( "zombified" ); + self endon( "disconnect" ); + self endon( "riotshield_zm_taken" ); + + while ( true ) + self waittill_either( "riotshield_zm_activate", "riotshield_zm_deactivate" ); +} + +watchriotshielduse() +{ + self endon( "death" ); + self endon( "disconnect" ); + self.shielddamagetaken = 0; + self thread maps\mp\zombies\_zm_riotshield::trackriotshield(); + self thread maps\mp\zombies\_zm_riotshield::trackequipmentchange(); + self thread maps\mp\zombies\_zm_riotshield::watchshieldlaststand(); + self thread trackstuckzombies(); + + for (;;) + { + self waittill( "raise_riotshield" ); + + self thread maps\mp\zombies\_zm_riotshield::startriotshielddeploy(); + } +} + +watchriotshieldmelee() +{ + for (;;) + { + self waittill( "weapon_melee", weapon ); + + if ( weapon == level.riotshield_name ) + self riotshield_melee(); + } +} + +is_riotshield_damage( mod, player, amount ) +{ + if ( mod == "MOD_MELEE" && player hasweapon( level.riotshield_name ) && amount < 10 ) + return true; + + return false; +} + +riotshield_damage( amount ) +{ + +} + +riotshield_fling_zombie( player, fling_vec, index ) +{ + if ( !isdefined( self ) || !isalive( self ) ) + return; + + if ( isdefined( self.ignore_riotshield ) && self.ignore_riotshield ) + return; + + if ( isdefined( self.riotshield_fling_func ) ) + { + self [[ self.riotshield_fling_func ]]( player ); + return; + } + + damage = 2500; + self dodamage( damage, player.origin, player, player, "", "MOD_IMPACT" ); + + if ( self.health < 1 ) + { + self.riotshield_death = 1; + self startragdoll(); + self launchragdoll( fling_vec ); + } +} + +zombie_knockdown( player, gib ) +{ + damage = level.zombie_vars["riotshield_knockdown_damage"]; + + if ( isdefined( level.override_riotshield_damage_func ) ) + self [[ level.override_riotshield_damage_func ]]( player, gib ); + else + { + if ( gib ) + { + self.a.gib_ref = random( level.riotshield_gib_refs ); + self thread maps\mp\animscripts\zm_death::do_gib(); + } + + self dodamage( damage, player.origin, player ); + } +} + +riotshield_knockdown_zombie( player, gib ) +{ + self endon( "death" ); + playsoundatposition( "vox_riotshield_forcehit", self.origin ); + playsoundatposition( "wpn_riotshield_proj_impact", self.origin ); + + if ( !isdefined( self ) || !isalive( self ) ) + return; + + if ( isdefined( self.riotshield_knockdown_func ) ) + self [[ self.riotshield_knockdown_func ]]( player, gib ); + else + self zombie_knockdown( player, gib ); + + self dodamage( level.zombie_vars["riotshield_knockdown_damage"], player.origin, player ); + self playsound( "fly_riotshield_forcehit" ); +} + +riotshield_get_enemies_in_range() +{ + view_pos = self geteye(); + zombies = get_array_of_closest( view_pos, get_round_enemy_array(), undefined, undefined, 2 * level.zombie_vars["riotshield_knockdown_range"] ); + + if ( !isdefined( zombies ) ) + return; + + knockdown_range_squared = level.zombie_vars["riotshield_knockdown_range"] * level.zombie_vars["riotshield_knockdown_range"]; + gib_range_squared = level.zombie_vars["riotshield_gib_range"] * level.zombie_vars["riotshield_gib_range"]; + fling_range_squared = level.zombie_vars["riotshield_fling_range"] * level.zombie_vars["riotshield_fling_range"]; + cylinder_radius_squared = level.zombie_vars["riotshield_cylinder_radius"] * level.zombie_vars["riotshield_cylinder_radius"]; + forward_view_angles = self getweaponforwarddir(); + end_pos = view_pos + vectorscale( forward_view_angles, level.zombie_vars["riotshield_knockdown_range"] ); +/# + if ( 2 == getdvarint( _hash_BF480CE9 ) ) + { + near_circle_pos = view_pos + vectorscale( forward_view_angles, 2 ); + circle( near_circle_pos, level.zombie_vars["riotshield_cylinder_radius"], ( 1, 0, 0 ), 0, 0, 100 ); + line( near_circle_pos, end_pos, ( 0, 0, 1 ), 1, 0, 100 ); + circle( end_pos, level.zombie_vars["riotshield_cylinder_radius"], ( 1, 0, 0 ), 0, 0, 100 ); + } +#/ + for ( i = 0; i < zombies.size; i++ ) + { + if ( !isdefined( zombies[i] ) || !isalive( zombies[i] ) ) + continue; + + test_origin = zombies[i] getcentroid(); + test_range_squared = distancesquared( view_pos, test_origin ); + + if ( test_range_squared > knockdown_range_squared ) + { + zombies[i] riotshield_debug_print( "range", ( 1, 0, 0 ) ); + return; + } + + normal = vectornormalize( test_origin - view_pos ); + dot = vectordot( forward_view_angles, normal ); + + if ( 0 > dot ) + { + zombies[i] riotshield_debug_print( "dot", ( 1, 0, 0 ) ); + continue; + } + + radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin ); + + if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared ) + { + zombies[i] riotshield_debug_print( "cylinder", ( 1, 0, 0 ) ); + continue; + } + + if ( 0 == zombies[i] damageconetrace( view_pos, self ) ) + { + zombies[i] riotshield_debug_print( "cone", ( 1, 0, 0 ) ); + continue; + } + + if ( test_range_squared < fling_range_squared ) + { + level.riotshield_fling_enemies[level.riotshield_fling_enemies.size] = zombies[i]; + dist_mult = ( fling_range_squared - test_range_squared ) / fling_range_squared; + fling_vec = vectornormalize( test_origin - view_pos ); + + if ( 5000 < test_range_squared ) + fling_vec += vectornormalize( test_origin - radial_origin ); + + fling_vec = ( fling_vec[0], fling_vec[1], abs( fling_vec[2] ) ); + fling_vec = vectorscale( fling_vec, 100 + 100 * dist_mult ); + level.riotshield_fling_vecs[level.riotshield_fling_vecs.size] = fling_vec; + zombies[i] riotshield_debug_print( "fling", ( 0, 1, 0 ) ); + continue; + } + + level.riotshield_knockdown_enemies[level.riotshield_knockdown_enemies.size] = zombies[i]; + level.riotshield_knockdown_gib[level.riotshield_knockdown_gib.size] = 0; + zombies[i] riotshield_debug_print( "knockdown", ( 1, 1, 0 ) ); + } +} + +riotshield_network_choke() +{ + level.riotshield_network_choke_count++; + + if ( !( level.riotshield_network_choke_count % 10 ) ) + { + wait_network_frame(); + wait_network_frame(); + wait_network_frame(); + } +} + +riotshield_melee() +{ + if ( !isdefined( level.riotshield_knockdown_enemies ) ) + { + level.riotshield_knockdown_enemies = []; + level.riotshield_knockdown_gib = []; + level.riotshield_fling_enemies = []; + level.riotshield_fling_vecs = []; + } + + self riotshield_get_enemies_in_range(); + shield_damage = 0; + level.riotshield_network_choke_count = 0; + + for ( i = 0; i < level.riotshield_fling_enemies.size; i++ ) + { + riotshield_network_choke(); + + if ( isdefined( level.riotshield_fling_enemies[i] ) ) + { + level.riotshield_fling_enemies[i] thread riotshield_fling_zombie( self, level.riotshield_fling_vecs[i], i ); + shield_damage += level.zombie_vars["riotshield_fling_damage_shield"]; + } + } + + for ( i = 0; i < level.riotshield_knockdown_enemies.size; i++ ) + { + riotshield_network_choke(); + level.riotshield_knockdown_enemies[i] thread riotshield_knockdown_zombie( self, level.riotshield_knockdown_gib[i] ); + shield_damage += level.zombie_vars["riotshield_knockdown_damage_shield"]; + } + + level.riotshield_knockdown_enemies = []; + level.riotshield_knockdown_gib = []; + level.riotshield_fling_enemies = []; + level.riotshield_fling_vecs = []; + + if ( shield_damage ) + self player_damage_shield( shield_damage, 0 ); +} + +trackstuckzombies() +{ + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "deployed_riotshield" ); + + if ( isdefined( self.riotshieldentity ) ) + self thread watchstuckzombies(); + } +} + +attack_shield( shield ) +{ + self endon( "death" ); + shield.owner endon( "death" ); + shield.owner endon( "disconnect" ); + shield.owner endon( "start_riotshield_deploy" ); + shield.owner endon( "destroy_riotshield" ); + + if ( isdefined( self.doing_shield_attack ) && self.doing_shield_attack ) + return 0; + + self.old_origin = self.origin; + + if ( getdvar( _hash_B253DFE7 ) == "" ) + setdvar( "zombie_shield_attack_freq", "15" ); + + freq = getdvarint( _hash_B253DFE7 ); + self.doing_shield_attack = 1; + self.enemyoverride[0] = shield.origin; + self.enemyoverride[1] = shield; + wait( randomint( 100 ) / 100.0 ); + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "attack", self.animname ); + attackanim = "zm_riotshield_melee"; + + if ( !self.has_legs ) + attackanim += "_crawl"; + + self orientmode( "face point", shield.origin ); + self animscripted( self.origin, flat_angle( vectortoangles( shield.origin - self.origin ) ), attackanim ); + + if ( isdefined( shield.owner.player_shield_apply_damage ) ) + shield.owner [[ shield.owner.player_shield_apply_damage ]]( 100, 0 ); + else + shield.owner player_damage_shield( 100, 0 ); + + self thread attack_shield_stop( shield ); + wait( randomint( 100 ) / 100.0 ); + self.doing_shield_attack = 0; + self orientmode( "face default" ); +} + +attack_shield_stop( shield ) +{ + self notify( "attack_shield_stop" ); + self endon( "attack_shield_stop" ); + self endon( "death" ); + + shield waittill( "death" ); + + self stopanimscripted(); + + if ( isdefined( self.doing_shield_attack ) && self.doing_shield_attack ) + { + breachanim = "zm_riotshield_breakthrough"; + + if ( !self.has_legs ) + breachanim += "_crawl"; + + self animscripted( self.origin, flat_angle( self.angles ), breachanim ); + } +} + +window_notetracks( msg, player ) +{ + self endon( "death" ); + + while ( true ) + { + self waittill( msg, notetrack ); + + if ( notetrack == "end" ) + return; + + if ( notetrack == "fire" ) + player player_damage_shield( 100, 0 ); + } +} + +watchstuckzombies() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "start_riotshield_deploy" ); + self endon( "destroy_riotshield" ); + self endon( "deployed_riotshield" ); + level endon( "intermission" ); + self.riotshieldentity maps\mp\zombies\_zm_equipment::item_attract_zombies(); +} + +riotshield_active() +{ + return self maps\mp\zombies\_zm_equipment::is_equipment_active( "riotshield_zm" ); +} + +riotshield_debug_print( msg, color ) +{ +/# + if ( !getdvarint( _hash_BF480CE9 ) ) + return; + + if ( !isdefined( color ) ) + color = ( 1, 1, 1 ); + + print3d( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), msg, color, 1, 1, 40 ); +#/ +} + +shield_zombie_attract_func( poi ) +{ + +} + +shield_zombie_arrive_func( poi ) +{ + self endon( "death" ); + self endon( "zombie_acquire_enemy" ); + self endon( "path_timer_done" ); + + self waittill( "goal" ); + + if ( isdefined( poi.owner ) ) + { + poi.owner player_damage_shield( 100, 0 ); + + if ( isdefined( poi.owner.player_shield_apply_damage ) ) + poi.owner [[ poi.owner.player_shield_apply_damage ]]( 100, 0 ); + } +} + +createriotshieldattractor() +{ + self create_zombie_point_of_interest( 50, 8, 0, 1, ::shield_zombie_attract_func, ::shield_zombie_arrive_func ); + self thread create_zombie_point_of_interest_attractor_positions( 4, 15, 15 ); + return get_zombie_point_of_interest( self.origin ); +} + +riotshield_zombie_damage_response( mod, hit_location, hit_origin, player, amount ) +{ + if ( self is_riotshield_damage( mod, player, amount ) ) + { + self riotshield_damage( amount ); + return true; + } + + return false; +} + +watchriotshieldattractor() +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "start_riotshield_deploy" ); + self endon( "destroy_riotshield" ); + self endon( "deployed_riotshield" ); + poi = self.riotshieldentity createriotshieldattractor(); +} + +trackriotshieldattractor() +{ + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "deployed_riotshield" ); + + self thread watchriotshieldattractor(); + } +} diff --git a/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc new file mode 100644 index 0000000..956abc8 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc @@ -0,0 +1,123 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_melee_weapon; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_audio; + +init() +{ + registerclientfield( "toplayer", "tazer_flourish", 1, 1, "int" ); + register_melee_weapon_for_level( "tazer_knuckles_zm" ); + + if ( isdefined( level.tazer_cost ) ) + cost = level.tazer_cost; + else + cost = 6000; + + level.use_tazer_impact_fx = 0; + maps\mp\zombies\_zm_melee_weapon::init( "tazer_knuckles_zm", "zombie_tazer_flourish", "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", cost, "tazer_upgrade", &"ZOMBIE_WEAPON_TAZER_BUY", "tazerknuckles", ::tazer_flourish_fx ); + maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee" ); + maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee_upgraded" ); + maps\mp\zombies\_zm_spawner::add_cusom_zombie_spawn_logic( ::watch_bodily_functions ); + level._effect["fx_zmb_taser_vomit"] = loadfx( "maps/zombie/fx_zmb_taser_vomit" ); + level._effect["fx_zmb_taser_flourish"] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" ); + + if ( level.script != "zm_transit" ) + { + level._effect["fx_zmb_tazer_impact"] = loadfx( "weapon/taser/fx_taser_knuckles_impact_zmb" ); + level.use_tazer_impact_fx = 1; + } + + level.tazer_flourish_delay = 0.5; +} + +watch_bodily_functions() +{ + if ( isdefined( self.isscreecher ) && self.isscreecher || isdefined( self.is_avogadro ) && self.is_avogadro ) + return; + + while ( isdefined( self ) && isalive( self ) ) + { + self waittill( "damage", amount, attacker, direction_vec, point, type ); + + if ( !isdefined( self ) ) + return; + + if ( !isdefined( attacker ) || !isplayer( attacker ) ) + continue; + + if ( type != "MOD_MELEE" ) + continue; + + if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isdefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped ) + continue; + + ch = randomint( 100 ); + + if ( ch < 4 ) + playfxontag( level._effect["fx_zmb_taser_vomit"], self, "j_neck" ); + + if ( level.use_tazer_impact_fx ) + { + tags = []; + tags[0] = "J_Head"; + tags[1] = "J_Neck"; + playfxontag( level._effect["fx_zmb_tazer_impact"], self, random( tags ) ); + } + } +} + +onplayerconnect() +{ + self thread onplayerspawned(); +} + +onplayerspawned() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread watchtazerknucklemelee(); + } +} + +watchtazerknucklemelee() +{ + self endon( "disconnect" ); + + for (;;) + { + self waittill( "weapon_melee", weapon ); + + if ( weapon == "tazer_knuckles_zm" ) + self tazerknuckle_melee(); + } +} + +tazerknuckle_melee() +{ + +} + +tazer_flourish_fx() +{ + self waittill( "weapon_change", newweapon ); + + if ( newweapon == "zombie_tazer_flourish" ) + { + self endon( "weapon_change" ); + wait( level.tazer_flourish_delay ); + self thread maps\mp\zombies\_zm_audio::playerexert( "hitmed" ); + self setclientfieldtoplayer( "tazer_flourish", 1 ); + wait_network_frame(); + self setclientfieldtoplayer( "tazer_flourish", 0 ); + } +} diff --git a/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weapon_locker.gsc b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weapon_locker.gsc new file mode 100644 index 0000000..5031b80 --- /dev/null +++ b/ZM/Maps/Tranzit/maps/mp/zombies/_zm_weapon_locker.gsc @@ -0,0 +1,325 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_audio; + +main() +{ + if ( !isdefined( level.weapon_locker_map ) ) + level.weapon_locker_map = level.script; + + level.weapon_locker_online = sessionmodeisonlinegame(); + weapon_lockers = getstructarray( "weapons_locker", "targetname" ); + array_thread( weapon_lockers, ::triggerweaponslockerwatch ); +} + +wl_has_stored_weapondata() +{ + if ( level.weapon_locker_online ) + return self has_stored_weapondata( level.weapon_locker_map ); + else + return isdefined( self.stored_weapon_data ); +} + +wl_get_stored_weapondata() +{ + if ( level.weapon_locker_online ) + return self get_stored_weapondata( level.weapon_locker_map ); + else + return self.stored_weapon_data; +} + +wl_clear_stored_weapondata() +{ + if ( level.weapon_locker_online ) + self clear_stored_weapondata( level.weapon_locker_map ); + else + self.stored_weapon_data = undefined; +} + +wl_set_stored_weapondata( weapondata ) +{ + if ( level.weapon_locker_online ) + self set_stored_weapondata( weapondata, level.weapon_locker_map ); + else + self.stored_weapon_data = weapondata; +} + +triggerweaponslockerwatch() +{ + unitrigger_stub = spawnstruct(); + unitrigger_stub.origin = self.origin; + + if ( isdefined( self.script_angles ) ) + unitrigger_stub.angles = self.script_angles; + else + unitrigger_stub.angles = self.angles; + + unitrigger_stub.script_angles = unitrigger_stub.angles; + + if ( isdefined( self.script_length ) ) + unitrigger_stub.script_length = self.script_length; + else + unitrigger_stub.script_length = 16; + + if ( isdefined( self.script_width ) ) + unitrigger_stub.script_width = self.script_width; + else + unitrigger_stub.script_width = 32; + + if ( isdefined( self.script_height ) ) + unitrigger_stub.script_height = self.script_height; + else + unitrigger_stub.script_height = 64; + + unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * unitrigger_stub.script_length / 2; + unitrigger_stub.targetname = "weapon_locker"; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.clientfieldname = "weapon_locker"; + maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + unitrigger_stub.prompt_and_visibility_func = ::triggerweaponslockerthinkupdateprompt; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::triggerweaponslockerthink ); +} + +triggerweaponslockerisvalidweapon( weaponname ) +{ + weaponname = get_base_weapon_name( weaponname, 1 ); + + if ( !is_weapon_included( weaponname ) ) + return false; + + if ( is_offhand_weapon( weaponname ) || is_limited_weapon( weaponname ) ) + return false; + + return true; +} + +triggerweaponslockerisvalidweaponpromptupdate( player, weaponname ) +{ + retrievingweapon = player wl_has_stored_weapondata(); + + if ( !retrievingweapon ) + { + weaponname = player get_nonalternate_weapon( weaponname ); + + if ( !triggerweaponslockerisvalidweapon( weaponname ) ) + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); + else + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_STORE" ); + } + else + { + weapondata = player wl_get_stored_weapondata(); + + if ( isdefined( level.remap_weapon_locker_weapons ) ) + weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons ); + + weapontogive = weapondata["name"]; + primaries = player getweaponslistprimaries(); + maxweapons = get_player_weapon_limit( player ); + weaponname = player get_nonalternate_weapon( weaponname ); + + if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == weaponname ) + { + if ( !triggerweaponslockerisvalidweapon( weaponname ) ) + { + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); + return; + } + } + + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" ); + } +} + +triggerweaponslockerthinkupdateprompt( player ) +{ + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + return 1; +} + +triggerweaponslockerthink() +{ + self.parent_player thread triggerweaponslockerweaponchangethink( self ); + + while ( true ) + { + self waittill( "trigger", player ); + + retrievingweapon = player wl_has_stored_weapondata(); + + if ( !retrievingweapon ) + { + curweapon = player getcurrentweapon(); + curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon ); + + if ( !triggerweaponslockerisvalidweapon( curweapon ) ) + continue; + + weapondata = player maps\mp\zombies\_zm_weapons::get_player_weapondata( player ); + player wl_set_stored_weapondata( weapondata ); + assert( curweapon == weapondata["name"], "weapon data does not match" ); + player takeweapon( curweapon ); + primaries = player getweaponslistprimaries(); + + if ( isdefined( primaries[0] ) ) + player switchtoweapon( primaries[0] ); + else + player maps\mp\zombies\_zm_weapons::give_fallback_weapon(); + + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + player playsoundtoplayer( "evt_fridge_locker_close", player ); + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "weapon_storage" ); + } + else + { + curweapon = player getcurrentweapon(); + primaries = player getweaponslistprimaries(); + weapondata = player wl_get_stored_weapondata(); + + if ( isdefined( level.remap_weapon_locker_weapons ) ) + weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons ); + + weapontogive = weapondata["name"]; + + if ( !triggerweaponslockerisvalidweapon( weapontogive ) ) + { + player playlocalsound( level.zmb_laugh_alias ); + player wl_clear_stored_weapondata(); + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + continue; + } + + curweap_base = maps\mp\zombies\_zm_weapons::get_base_weapon_name( curweapon, 1 ); + weap_base = maps\mp\zombies\_zm_weapons::get_base_weapon_name( weapontogive, 1 ); + + if ( player has_weapon_or_upgrade( weap_base ) && weap_base != curweap_base ) + { + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); + wait 3; + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + continue; + } + + maxweapons = get_player_weapon_limit( player ); + + if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == curweapon ) + { + curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon ); + + if ( !triggerweaponslockerisvalidweapon( curweapon ) ) + { + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); + wait 3; + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + continue; + } + + curweapondata = player maps\mp\zombies\_zm_weapons::get_player_weapondata( player ); + player takeweapon( curweapondata["name"] ); + player maps\mp\zombies\_zm_weapons::weapondata_give( weapondata ); + player wl_clear_stored_weapondata(); + player wl_set_stored_weapondata( curweapondata ); + player switchtoweapon( weapondata["name"] ); + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + } + else + { + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "wall_withdrawl" ); + player wl_clear_stored_weapondata(); + player maps\mp\zombies\_zm_weapons::weapondata_give( weapondata ); + player switchtoweapon( weapondata["name"] ); + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + } + + level notify( "weapon_locker_grab" ); + player playsoundtoplayer( "evt_fridge_locker_open", player ); + } + + wait 0.5; + } +} + +triggerweaponslockerweaponchangethink( trigger ) +{ + self endon( "disconnect" ); + self endon( "death" ); + trigger endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "weapon_change", newweapon ); + + trigger triggerweaponslockerisvalidweaponpromptupdate( self, newweapon ); + } +} + +add_weapon_locker_mapping( fromweapon, toweapon ) +{ + if ( !isdefined( level.remap_weapon_locker_weapons ) ) + level.remap_weapon_locker_weapons = []; + + level.remap_weapon_locker_weapons[fromweapon] = toweapon; +} + +remap_weapon( weapondata, maptable ) +{ + name = get_base_name( weapondata["name"] ); + att = get_attachment_name( weapondata["name"] ); + + if ( isdefined( maptable[name] ) ) + { + weapondata["name"] = maptable[name]; + name = weapondata["name"]; + + if ( is_weapon_upgraded( name ) ) + { + if ( isdefined( att ) && weapon_supports_attachments( name ) ) + { + base = get_base_weapon_name( name, 1 ); + + if ( !weapon_supports_this_attachment( base, att ) ) + att = random_attachment( base ); + + weapondata["name"] = weapondata["name"] + "+" + att; + } + else if ( weapon_supports_default_attachment( name ) ) + { + att = default_attachment( name ); + weapondata["name"] = weapondata["name"] + "+" + att; + } + } + } + else + return weapondata; + + name = weapondata["name"]; + dw_name = weapondualwieldweaponname( name ); + alt_name = weaponaltweaponname( name ); + + if ( name != "none" ) + { + weapondata["clip"] = int( min( weapondata["clip"], weaponclipsize( name ) ) ); + weapondata["stock"] = int( min( weapondata["stock"], weaponmaxammo( name ) ) ); + } + + if ( dw_name != "none" ) + weapondata["lh_clip"] = int( min( weapondata["lh_clip"], weaponclipsize( dw_name ) ) ); + + if ( alt_name != "none" ) + { + weapondata["alt_clip"] = int( min( weapondata["alt_clip"], weaponclipsize( alt_name ) ) ); + weapondata["alt_stock"] = int( min( weapondata["alt_stock"], weaponmaxammo( alt_name ) ) ); + } + + weapondata["dw_name"] = dw_name; + weapondata["alt_name"] = alt_name; + return weapondata; +} diff --git a/ZM/Maps/Tranzit/xmodelalias/c_zom_zombie_female_head_als.gsc b/ZM/Maps/Tranzit/xmodelalias/c_zom_zombie_female_head_als.gsc new file mode 100644 index 0000000..772ef20 --- /dev/null +++ b/ZM/Maps/Tranzit/xmodelalias/c_zom_zombie_female_head_als.gsc @@ -0,0 +1,11 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + a[0] = "c_zom_zombie_head_d"; + a[1] = "c_zom_zombie_head_f"; + a[2] = "c_zom_zombie_head_d2"; + a[3] = "c_zom_zombie_head_f2"; + return a; +} diff --git a/ZM/Maps/Tranzit/xmodelalias/c_zom_zombie_head_als.gsc b/ZM/Maps/Tranzit/xmodelalias/c_zom_zombie_head_als.gsc new file mode 100644 index 0000000..9e2935f --- /dev/null +++ b/ZM/Maps/Tranzit/xmodelalias/c_zom_zombie_head_als.gsc @@ -0,0 +1,11 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool + +main() +{ + a[0] = "c_zom_zombie_head_k"; + a[1] = "c_zom_zombie_head_l"; + a[2] = "c_zom_zombie_head_n"; + a[3] = "c_zom_zombie_head_a"; + return a; +} diff --git a/Zombie Core/common_zm/codescripts/character.gsc b/Zombie Core/common_zm/codescripts/character.gsc deleted file mode 100644 index e47145d..0000000 --- a/Zombie Core/common_zm/codescripts/character.gsc +++ /dev/null @@ -1,216 +0,0 @@ - -setmodelfromarray( a ) -{ - self setmodel( a[ randomint( a.size ) ] ); -} - -precachemodelarray( a ) -{ - i = 0; - while ( i < a.size ) - { - precachemodel( a[ i ] ); - i++; - } -} - -randomelement( a ) -{ - return a[ randomint( a.size ) ]; -} - -attachfromarray( a ) -{ - self attach( randomelement( a ), "", 1 ); -} - -new() -{ - self detachall(); - oldgunhand = self.anim_gunhand; - if ( !isDefined( oldgunhand ) ) - { - return; - } - self.anim_gunhand = "none"; - self [[ anim.putguninhand ]]( oldgunhand ); -} - -save() -{ - info[ "gunHand" ] = self.anim_gunhand; - info[ "gunInHand" ] = self.anim_guninhand; - info[ "model" ] = self.model; - info[ "hatModel" ] = self.hatmodel; - info[ "gearModel" ] = self.gearmodel; - if ( isDefined( self.name ) ) - { - info[ "name" ] = self.name; -/# - println( "Save: Guy has name ", self.name ); -#/ - } - else - { -/# - println( "save: Guy had no name!" ); -#/ - } - attachsize = self getattachsize(); - i = 0; - while ( i < attachsize ) - { - info[ "attach" ][ i ][ "model" ] = self getattachmodelname( i ); - info[ "attach" ][ i ][ "tag" ] = self getattachtagname( i ); - i++; - } - return info; -} - -load( info ) -{ - self detachall(); - self.anim_gunhand = info[ "gunHand" ]; - self.anim_guninhand = info[ "gunInHand" ]; - self setmodel( info[ "model" ] ); - self.hatmodel = info[ "hatModel" ]; - self.gearmodel = info[ "gearModel" ]; - if ( isDefined( info[ "name" ] ) ) - { - self.name = info[ "name" ]; -/# - println( "Load: Guy has name ", self.name ); -#/ - } - else - { -/# - println( "Load: Guy had no name!" ); -#/ - } - attachinfo = info[ "attach" ]; - attachsize = attachinfo.size; - i = 0; - while ( i < attachsize ) - { - self attach( attachinfo[ i ][ "model" ], attachinfo[ i ][ "tag" ] ); - i++; - } -} - -precache( info ) -{ - if ( isDefined( info[ "name" ] ) ) - { -/# - println( "Precache: Guy has name ", info[ "name" ] ); -#/ - } - else - { -/# - println( "Precache: Guy had no name!" ); -#/ - } - precachemodel( info[ "model" ] ); - attachinfo = info[ "attach" ]; - attachsize = attachinfo.size; - i = 0; - while ( i < attachsize ) - { - precachemodel( attachinfo[ i ][ "model" ] ); - i++; - } -} - -get_random_character( amount ) -{ - self_info = strtok( self.classname, "_" ); - if ( self_info.size <= 2 ) - { - return randomint( amount ); - } - group = "auto"; - index = undefined; - prefix = self_info[ 2 ]; - if ( isDefined( self.script_char_index ) ) - { - index = self.script_char_index; - } - if ( isDefined( self.script_char_group ) ) - { - type = "grouped"; - group = "group_" + self.script_char_group; - } - if ( !isDefined( level.character_index_cache ) ) - { - level.character_index_cache = []; - } - if ( !isDefined( level.character_index_cache[ prefix ] ) ) - { - level.character_index_cache[ prefix ] = []; - } - if ( !isDefined( level.character_index_cache[ prefix ][ group ] ) ) - { - initialize_character_group( prefix, group, amount ); - } - if ( !isDefined( index ) ) - { - index = get_least_used_index( prefix, group ); - if ( !isDefined( index ) ) - { - index = randomint( 5000 ); - } - } - while ( index >= amount ) - { - index -= amount; - } - level.character_index_cache[ prefix ][ group ][ index ]++; - return index; -} - -get_least_used_index( prefix, group ) -{ - lowest_indices = []; - lowest_use = level.character_index_cache[ prefix ][ group ][ 0 ]; - lowest_indices[ 0 ] = 0; - i = 1; - while ( i < level.character_index_cache[ prefix ][ group ].size ) - { - if ( level.character_index_cache[ prefix ][ group ][ i ] > lowest_use ) - { - i++; - continue; - } - else - { - if ( level.character_index_cache[ prefix ][ group ][ i ] < lowest_use ) - { - lowest_indices = []; - lowest_use = level.character_index_cache[ prefix ][ group ][ i ]; - } - lowest_indices[ lowest_indices.size ] = i; - } - i++; - } -/# - assert( lowest_indices.size, "Tried to spawn a character but the lowest indices didn't exist" ); -#/ - return random( lowest_indices ); -} - -initialize_character_group( prefix, group, amount ) -{ - i = 0; - while ( i < amount ) - { - level.character_index_cache[ prefix ][ group ][ i ] = 0; - i++; - } -} - -random( array ) -{ - return array[ randomint( array.size ) ]; -} diff --git a/Zombie Core/common_zm/codescripts/delete.gsc b/Zombie Core/common_zm/codescripts/delete.gsc deleted file mode 100644 index 082155e..0000000 --- a/Zombie Core/common_zm/codescripts/delete.gsc +++ /dev/null @@ -1,23 +0,0 @@ - -main() -{ -/# - assert( isDefined( self ) ); -#/ - wait 0; - if ( isDefined( self ) ) - { -/# - if ( isDefined( self.classname ) ) - { - if ( self.classname != "trigger_once" || self.classname == "trigger_radius" && self.classname == "trigger_multiple" ) - { - println( "" ); - println( "*** trigger debug: delete.gsc is deleting trigger with ent#: " + self getentitynumber() + " at origin: " + self.origin ); - println( "" ); -#/ - } - } - self delete(); - } -} diff --git a/Zombie Core/common_zm/codescripts/struct.gsc b/Zombie Core/common_zm/codescripts/struct.gsc deleted file mode 100644 index 8d47324..0000000 --- a/Zombie Core/common_zm/codescripts/struct.gsc +++ /dev/null @@ -1,41 +0,0 @@ - -initstructs() -{ - level.struct = []; -} - -createstruct() -{ - struct = spawnstruct(); - level.struct[ level.struct.size ] = struct; - return struct; -} - -findstruct( position ) -{ - _a20 = level.struct_class_names; - key = getFirstArrayKey( _a20 ); - while ( isDefined( key ) ) - { - _ = _a20[ key ]; - _a22 = level.struct_class_names[ key ]; - val = getFirstArrayKey( _a22 ); - while ( isDefined( val ) ) - { - s_array = _a22[ val ]; - _a24 = s_array; - _k24 = getFirstArrayKey( _a24 ); - while ( isDefined( _k24 ) ) - { - struct = _a24[ _k24 ]; - if ( distancesquared( struct.origin, position ) < 1 ) - { - return struct; - } - _k24 = getNextArrayKey( _a24, _k24 ); - } - val = getNextArrayKey( _a22, val ); - } - key = getNextArrayKey( _a20, key ); - } -} diff --git a/Zombie Core/common_zm/maps/mp/_serverfaceanim_mp.gsc b/Zombie Core/common_zm/maps/mp/_serverfaceanim_mp.gsc deleted file mode 100644 index bbd52a4..0000000 --- a/Zombie Core/common_zm/maps/mp/_serverfaceanim_mp.gsc +++ /dev/null @@ -1,56 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread onplayerspawned(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread init_serverfaceanim(); - } -} - -init_serverfaceanim() -{ - self.do_face_anims = 1; - if ( !isDefined( level.face_event_handler ) ) - { - level.face_event_handler = spawnstruct(); - level.face_event_handler.events = []; - level.face_event_handler.events[ "death" ] = "face_death"; - level.face_event_handler.events[ "grenade danger" ] = "face_alert"; - level.face_event_handler.events[ "bulletwhizby" ] = "face_alert"; - level.face_event_handler.events[ "projectile_impact" ] = "face_alert"; - level.face_event_handler.events[ "explode" ] = "face_alert"; - level.face_event_handler.events[ "alert" ] = "face_alert"; - level.face_event_handler.events[ "shoot" ] = "face_shoot_single"; - level.face_event_handler.events[ "melee" ] = "face_melee"; - level.face_event_handler.events[ "damage" ] = "face_pain"; - level thread wait_for_face_event(); - } -} - -wait_for_face_event() -{ - while ( 1 ) - { - level waittill( "face", face_notify, ent ); - if ( isDefined( ent ) && isDefined( ent.do_face_anims ) && ent.do_face_anims ) - { - if ( isDefined( level.face_event_handler.events[ face_notify ] ) ) - { - ent sendfaceevent( level.face_event_handler.events[ face_notify ] ); - } - } - } -} diff --git a/Zombie Core/common_zm/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc b/Zombie Core/common_zm/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc deleted file mode 100644 index f66f5ad..0000000 --- a/Zombie Core/common_zm/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc +++ /dev/null @@ -1,378 +0,0 @@ -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -#using_animtree( "zombie_cymbal_monkey" ); - -init() -{ - if ( !cymbal_monkey_exists() ) - { - return; - } -/# - level.zombiemode_devgui_cymbal_monkey_give = ::player_give_cymbal_monkey; -#/ - level._effect[ "monkey_glow" ] = loadfx( "maps/zombie/fx_zombie_monkey_light" ); - level._effect[ "grenade_samantha_steal" ] = loadfx( "maps/zombie/fx_zmb_blackhole_trap_end" ); - level.cymbal_monkeys = []; - scriptmodelsuseanimtree( -1 ); -} - -player_give_cymbal_monkey() -{ - self giveweapon( "cymbal_monkey_zm" ); - self set_player_tactical_grenade( "cymbal_monkey_zm" ); - self thread player_handle_cymbal_monkey(); -} - -player_handle_cymbal_monkey() -{ - self notify( "starting_monkey_watch" ); - self endon( "disconnect" ); - self endon( "starting_monkey_watch" ); - attract_dist_diff = level.monkey_attract_dist_diff; - if ( !isDefined( attract_dist_diff ) ) - { - attract_dist_diff = 45; - } - num_attractors = level.num_monkey_attractors; - if ( !isDefined( num_attractors ) ) - { - num_attractors = 96; - } - max_attract_dist = level.monkey_attract_dist; - if ( !isDefined( max_attract_dist ) ) - { - max_attract_dist = 1536; - } - while ( 1 ) - { - grenade = get_thrown_monkey(); - self player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff ); - wait 0,05; - } -} - -watch_for_dud( model ) -{ - self endon( "death" ); - self waittill( "grenade_dud" ); - model.dud = 1; - self playsound( "zmb_vox_monkey_scream" ); - self.monk_scream_vox = 1; - wait 3; - if ( isDefined( model ) ) - { - model delete(); - } - if ( isDefined( self ) ) - { - self delete(); - } -} - -watch_for_emp( model ) -{ - self endon( "death" ); - while ( 1 ) - { - level waittill( "emp_detonate", origin, radius ); - if ( distancesquared( origin, self.origin ) < ( radius * radius ) ) - { - break; - } - else - { - } - } - self.stun_fx = 1; - if ( isDefined( level._equipment_emp_destroy_fx ) ) - { - playfx( level._equipment_emp_destroy_fx, self.origin + vectorScale( ( 0, 0, 1 ), 5 ), ( 0, randomfloat( 360 ), 0 ) ); - } - wait 0,15; - self.attract_to_origin = 0; - self deactivate_zombie_point_of_interest(); - model clearanim( %o_monkey_bomb, 0 ); - wait 1; - self detonate(); - wait 1; - if ( isDefined( model ) ) - { - model delete(); - } - if ( isDefined( self ) ) - { - self delete(); - } -} - -player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff ) -{ - self endon( "disconnect" ); - self endon( "starting_monkey_watch" ); - if ( isDefined( grenade ) ) - { - grenade endon( "death" ); - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - grenade delete(); - return; - } - grenade hide(); - model = spawn( "script_model", grenade.origin ); - model setmodel( "weapon_zombie_monkey_bomb" ); - model useanimtree( -1 ); - model linkto( grenade ); - model.angles = grenade.angles; - model thread monkey_cleanup( grenade ); - grenade thread watch_for_dud( model ); - grenade thread watch_for_emp( model ); - info = spawnstruct(); - info.sound_attractors = []; - grenade thread monitor_zombie_groans( info ); - grenade waittill( "stationary" ); - if ( isDefined( level.grenade_planted ) ) - { - self thread [[ level.grenade_planted ]]( grenade, model ); - } - if ( isDefined( grenade ) ) - { - if ( isDefined( model ) ) - { - model setanim( %o_monkey_bomb ); - if ( isDefined( grenade.backlinked ) && !grenade.backlinked ) - { - model unlink(); - model.origin = grenade.origin; - model.angles = grenade.angles; - } - } - grenade resetmissiledetonationtime(); - playfxontag( level._effect[ "monkey_glow" ], model, "origin_animate_jnt" ); - valid_poi = check_point_in_active_zone( grenade.origin ); - if ( valid_poi ) - { - grenade create_zombie_point_of_interest( max_attract_dist, num_attractors, 10000 ); - grenade.attract_to_origin = 1; - grenade thread create_zombie_point_of_interest_attractor_positions( 4, attract_dist_diff ); - grenade thread wait_for_attractor_positions_complete(); - grenade thread do_monkey_sound( model, info ); - level.cymbal_monkeys[ level.cymbal_monkeys.size ] = grenade; - } - else - { - grenade.script_noteworthy = undefined; - level thread grenade_stolen_by_sam( grenade, model ); - } - return; - } - else - { - grenade.script_noteworthy = undefined; - level thread grenade_stolen_by_sam( grenade, model ); - } - } -} - -grenade_stolen_by_sam( ent_grenade, ent_model ) -{ - if ( !isDefined( ent_model ) ) - { - return; - } - direction = ent_model.origin; - direction = ( direction[ 1 ], direction[ 0 ], 0 ); - if ( direction[ 1 ] < 0 || direction[ 0 ] > 0 && direction[ 1 ] > 0 ) - { - direction = ( direction[ 0 ], direction[ 1 ] * -1, 0 ); - } - else - { - if ( direction[ 0 ] < 0 ) - { - direction = ( direction[ 0 ] * -1, direction[ 1 ], 0 ); - } - } - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( isalive( players[ i ] ) ) - { - players[ i ] playlocalsound( level.zmb_laugh_alias ); - } - i++; - } - playfxontag( level._effect[ "grenade_samantha_steal" ], ent_model, "tag_origin" ); - ent_model movez( 60, 1, 0,25, 0,25 ); - ent_model vibrate( direction, 1,5, 2,5, 1 ); - ent_model waittill( "movedone" ); - ent_model delete(); - if ( isDefined( ent_grenade ) ) - { - ent_grenade delete(); - } -} - -wait_for_attractor_positions_complete() -{ - self waittill( "attractor_positions_generated" ); - self.attract_to_origin = 0; -} - -monkey_cleanup( parent ) -{ - while ( 1 ) - { - if ( !isDefined( parent ) ) - { - if ( isDefined( self ) && isDefined( self.dud ) && self.dud ) - { - wait 6; - } - self_delete(); - return; - } - wait 0,05; - } -} - -do_monkey_sound( model, info ) -{ - self.monk_scream_vox = 0; - if ( isDefined( level.grenade_safe_to_bounce ) ) - { - if ( !( [[ level.grenade_safe_to_bounce ]]( self.owner, "cymbal_monkey_zm" ) ) ) - { - self playsound( "zmb_vox_monkey_scream" ); - self.monk_scream_vox = 1; - } - } - if ( !self.monk_scream_vox && level.music_override == 0 ) - { - self playsound( "zmb_monkey_song" ); - } - if ( !self.monk_scream_vox ) - { - self thread play_delayed_explode_vox(); - } - self waittill( "explode", position ); - level notify( "grenade_exploded" ); - monkey_index = -1; - i = 0; - while ( i < level.cymbal_monkeys.size ) - { - if ( !isDefined( level.cymbal_monkeys[ i ] ) ) - { - monkey_index = i; - break; - } - else - { - i++; - } - } - if ( monkey_index >= 0 ) - { - arrayremoveindex( level.cymbal_monkeys, monkey_index ); - } - if ( isDefined( model ) ) - { - model clearanim( %o_monkey_bomb, 0,2 ); - } - i = 0; - while ( i < info.sound_attractors.size ) - { - if ( isDefined( info.sound_attractors[ i ] ) ) - { - info.sound_attractors[ i ] notify( "monkey_blown_up" ); - } - i++; - } -} - -play_delayed_explode_vox() -{ - wait 6,5; - if ( isDefined( self ) ) - { - self playsound( "zmb_vox_monkey_explode" ); - } -} - -get_thrown_monkey() -{ - self endon( "disconnect" ); - self endon( "starting_monkey_watch" ); - while ( 1 ) - { - self waittill( "grenade_fire", grenade, weapname ); - if ( weapname == "cymbal_monkey_zm" ) - { - grenade.use_grenade_special_long_bookmark = 1; - grenade.grenade_multiattack_bookmark_count = 1; - return grenade; - } - wait 0,05; - } -} - -monitor_zombie_groans( info ) -{ - self endon( "explode" ); - while ( 1 ) - { - if ( !isDefined( self ) ) - { - return; - } - while ( !isDefined( self.attractor_array ) ) - { - wait 0,05; - } - i = 0; - while ( i < self.attractor_array.size ) - { - if ( array_check_for_dupes( info.sound_attractors, self.attractor_array[ i ] ) ) - { - if ( isDefined( self.origin ) && isDefined( self.attractor_array[ i ].origin ) ) - { - if ( distancesquared( self.origin, self.attractor_array[ i ].origin ) < 250000 ) - { - info.sound_attractors[ info.sound_attractors.size ] = self.attractor_array[ i ]; - self.attractor_array[ i ] thread play_zombie_groans(); - } - } - } - i++; - } - wait 0,05; - } -} - -play_zombie_groans() -{ - self endon( "death" ); - self endon( "monkey_blown_up" ); - while ( 1 ) - { - if ( isDefined( self ) ) - { - self playsound( "zmb_vox_zombie_groan" ); - wait randomfloatrange( 2, 3 ); - continue; - } - else - { - return; - } - } -} - -cymbal_monkey_exists() -{ - return isDefined( level.zombie_weapons[ "cymbal_monkey_zm" ] ); -} diff --git a/Zombie Core/common_zm/maps/mp/zombies/_zm_weap_thundergun.gsc b/Zombie Core/common_zm/maps/mp/zombies/_zm_weap_thundergun.gsc deleted file mode 100644 index 4690759..0000000 --- a/Zombie Core/common_zm/maps/mp/zombies/_zm_weap_thundergun.gsc +++ /dev/null @@ -1,396 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( !maps/mp/zombies/_zm_weapons::is_weapon_included( "thundergun_zm" ) ) - { - return; - } - level._effect[ "thundergun_viewmodel_power_cell1" ] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view1" ); - level._effect[ "thundergun_viewmodel_power_cell2" ] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view2" ); - level._effect[ "thundergun_viewmodel_power_cell3" ] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view3" ); - level._effect[ "thundergun_viewmodel_steam" ] = loadfx( "weapon/thunder_gun/fx_thundergun_steam_view" ); - level._effect[ "thundergun_viewmodel_power_cell1_upgraded" ] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view1" ); - level._effect[ "thundergun_viewmodel_power_cell2_upgraded" ] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view2" ); - level._effect[ "thundergun_viewmodel_power_cell3_upgraded" ] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view3" ); - level._effect[ "thundergun_viewmodel_steam_upgraded" ] = loadfx( "weapon/thunder_gun/fx_thundergun_steam_view" ); - level._effect[ "thundergun_knockdown_ground" ] = loadfx( "weapon/thunder_gun/fx_thundergun_knockback_ground" ); - level._effect[ "thundergun_smoke_cloud" ] = loadfx( "weapon/thunder_gun/fx_thundergun_smoke_cloud" ); - set_zombie_var( "thundergun_cylinder_radius", 180 ); - set_zombie_var( "thundergun_fling_range", 480 ); - set_zombie_var( "thundergun_gib_range", 900 ); - set_zombie_var( "thundergun_gib_damage", 75 ); - set_zombie_var( "thundergun_knockdown_range", 1200 ); - set_zombie_var( "thundergun_knockdown_damage", 15 ); - level.thundergun_gib_refs = []; - level.thundergun_gib_refs[ level.thundergun_gib_refs.size ] = "guts"; - level.thundergun_gib_refs[ level.thundergun_gib_refs.size ] = "right_arm"; - level.thundergun_gib_refs[ level.thundergun_gib_refs.size ] = "left_arm"; - level.basic_zombie_thundergun_knockdown = ::zombie_knockdown; -/# - level thread thundergun_devgui_dvar_think(); -#/ - onplayerconnect_callback( ::thundergun_on_player_connect ); -} - -thundergun_devgui_dvar_think() -{ -/# - if ( !maps/mp/zombies/_zm_weapons::is_weapon_included( "thundergun_zm" ) ) - { - return; - } - setdvar( "scr_thundergun_cylinder_radius", level.zombie_vars[ "thundergun_cylinder_radius" ] ); - setdvar( "scr_thundergun_fling_range", level.zombie_vars[ "thundergun_fling_range" ] ); - setdvar( "scr_thundergun_gib_range", level.zombie_vars[ "thundergun_gib_range" ] ); - setdvar( "scr_thundergun_gib_damage", level.zombie_vars[ "thundergun_gib_damage" ] ); - setdvar( "scr_thundergun_knockdown_range", level.zombie_vars[ "thundergun_knockdown_range" ] ); - setdvar( "scr_thundergun_knockdown_damage", level.zombie_vars[ "thundergun_knockdown_damage" ] ); - for ( ;; ) - { - level.zombie_vars[ "thundergun_cylinder_radius" ] = getDvarInt( "scr_thundergun_cylinder_radius" ); - level.zombie_vars[ "thundergun_fling_range" ] = getDvarInt( "scr_thundergun_fling_range" ); - level.zombie_vars[ "thundergun_gib_range" ] = getDvarInt( "scr_thundergun_gib_range" ); - level.zombie_vars[ "thundergun_gib_damage" ] = getDvarInt( "scr_thundergun_gib_damage" ); - level.zombie_vars[ "thundergun_knockdown_range" ] = getDvarInt( "scr_thundergun_knockdown_range" ); - level.zombie_vars[ "thundergun_knockdown_damage" ] = getDvarInt( "scr_thundergun_knockdown_damage" ); - wait 0,5; -#/ - } -} - -thundergun_on_player_connect() -{ - self thread wait_for_thundergun_fired(); -} - -wait_for_thundergun_fired() -{ - self endon( "disconnect" ); - self waittill( "spawned_player" ); - for ( ;; ) - { - self waittill( "weapon_fired" ); - currentweapon = self getcurrentweapon(); - if ( currentweapon == "thundergun_zm" || currentweapon == "thundergun_upgraded_zm" ) - { - self thread thundergun_fired(); - view_pos = self gettagorigin( "tag_flash" ) - self getplayerviewheight(); - view_angles = self gettagangles( "tag_flash" ); - playfx( level._effect[ "thundergun_smoke_cloud" ], view_pos, anglesToForward( view_angles ), anglesToUp( view_angles ) ); - } - } -} - -thundergun_network_choke() -{ - level.thundergun_network_choke_count++; - if ( level.thundergun_network_choke_count % 10 ) - { - wait_network_frame(); - wait_network_frame(); - wait_network_frame(); - } -} - -thundergun_fired() -{ - physicsexplosioncylinder( self.origin, 600, 240, 1 ); - if ( !isDefined( level.thundergun_knockdown_enemies ) ) - { - level.thundergun_knockdown_enemies = []; - level.thundergun_knockdown_gib = []; - level.thundergun_fling_enemies = []; - level.thundergun_fling_vecs = []; - } - self thundergun_get_enemies_in_range(); - level.thundergun_network_choke_count = 0; - i = 0; - while ( i < level.thundergun_fling_enemies.size ) - { - thundergun_network_choke(); - level.thundergun_fling_enemies[ i ] thread thundergun_fling_zombie( self, level.thundergun_fling_vecs[ i ], i ); - i++; - } - i = 0; - while ( i < level.thundergun_knockdown_enemies.size ) - { - thundergun_network_choke(); - level.thundergun_knockdown_enemies[ i ] thread thundergun_knockdown_zombie( self, level.thundergun_knockdown_gib[ i ] ); - i++; - } - level.thundergun_knockdown_enemies = []; - level.thundergun_knockdown_gib = []; - level.thundergun_fling_enemies = []; - level.thundergun_fling_vecs = []; -} - -thundergun_get_enemies_in_range() -{ - view_pos = self getweaponmuzzlepoint(); - zombies = get_array_of_closest( view_pos, get_round_enemy_array(), undefined, undefined, level.zombie_vars[ "thundergun_knockdown_range" ] ); - if ( !isDefined( zombies ) ) - { - return; - } - knockdown_range_squared = level.zombie_vars[ "thundergun_knockdown_range" ] * level.zombie_vars[ "thundergun_knockdown_range" ]; - gib_range_squared = level.zombie_vars[ "thundergun_gib_range" ] * level.zombie_vars[ "thundergun_gib_range" ]; - fling_range_squared = level.zombie_vars[ "thundergun_fling_range" ] * level.zombie_vars[ "thundergun_fling_range" ]; - cylinder_radius_squared = level.zombie_vars[ "thundergun_cylinder_radius" ] * level.zombie_vars[ "thundergun_cylinder_radius" ]; - forward_view_angles = self getweaponforwarddir(); - end_pos = view_pos + vectorScale( forward_view_angles, level.zombie_vars[ "thundergun_knockdown_range" ] ); -/# - if ( getDvarInt( #"AAC84AD6" ) == 2 ) - { - near_circle_pos = view_pos + vectorScale( forward_view_angles, 2 ); - circle( near_circle_pos, level.zombie_vars[ "thundergun_cylinder_radius" ], ( 0, 0, 1 ), 0, 0, 100 ); - line( near_circle_pos, end_pos, ( 0, 0, 1 ), 1, 0, 100 ); - circle( end_pos, level.zombie_vars[ "thundergun_cylinder_radius" ], ( 0, 0, 1 ), 0, 0, 100 ); -#/ - } - i = 0; - while ( i < zombies.size ) - { - if ( !isDefined( zombies[ i ] ) || !isalive( zombies[ i ] ) ) - { - i++; - continue; - } - else - { - test_origin = zombies[ i ] getcentroid(); - test_range_squared = distancesquared( view_pos, test_origin ); - if ( test_range_squared > knockdown_range_squared ) - { - zombies[ i ] thundergun_debug_print( "range", ( 0, 0, 1 ) ); - return; - } - normal = vectornormalize( test_origin - view_pos ); - dot = vectordot( forward_view_angles, normal ); - if ( dot <= 0 ) - { - zombies[ i ] thundergun_debug_print( "dot", ( 0, 0, 1 ) ); - i++; - continue; - } - else radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin ); - if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared ) - { - zombies[ i ] thundergun_debug_print( "cylinder", ( 0, 0, 1 ) ); - i++; - continue; - } - else if ( zombies[ i ] damageconetrace( view_pos, self ) == 0 ) - { - zombies[ i ] thundergun_debug_print( "cone", ( 0, 0, 1 ) ); - i++; - continue; - } - else if ( test_range_squared < fling_range_squared ) - { - level.thundergun_fling_enemies[ level.thundergun_fling_enemies.size ] = zombies[ i ]; - dist_mult = ( fling_range_squared - test_range_squared ) / fling_range_squared; - fling_vec = vectornormalize( test_origin - view_pos ); - if ( test_range_squared >= 5000 ) - { - fling_vec += vectornormalize( test_origin - radial_origin ); - } - fling_vec = ( fling_vec[ 0 ], fling_vec[ 1 ], abs( fling_vec[ 2 ] ) ); - fling_vec = vectorScale( fling_vec, 100 + ( 100 * dist_mult ) ); - level.thundergun_fling_vecs[ level.thundergun_fling_vecs.size ] = fling_vec; - zombies[ i ] thread setup_thundergun_vox( self, 1, 0, 0 ); - i++; - continue; - } - else if ( test_range_squared < gib_range_squared ) - { - level.thundergun_knockdown_enemies[ level.thundergun_knockdown_enemies.size ] = zombies[ i ]; - level.thundergun_knockdown_gib[ level.thundergun_knockdown_gib.size ] = 1; - zombies[ i ] thread setup_thundergun_vox( self, 0, 1, 0 ); - i++; - continue; - } - else - { - level.thundergun_knockdown_enemies[ level.thundergun_knockdown_enemies.size ] = zombies[ i ]; - level.thundergun_knockdown_gib[ level.thundergun_knockdown_gib.size ] = 0; - zombies[ i ] thread setup_thundergun_vox( self, 0, 0, 1 ); - } - } - i++; - } -} - -thundergun_debug_print( msg, color ) -{ -/# - if ( !getDvarInt( #"AAC84AD6" ) ) - { - return; - } - if ( !isDefined( color ) ) - { - color = ( 0, 0, 1 ); - } - print3d( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), msg, color, 1, 1, 40 ); -#/ -} - -thundergun_fling_zombie( player, fling_vec, index ) -{ - if ( !isDefined( self ) || !isalive( self ) ) - { - return; - } - if ( isDefined( self.thundergun_fling_func ) ) - { - self [[ self.thundergun_fling_func ]]( player ); - return; - } - self dodamage( self.health + 666, player.origin, player ); - if ( self.health <= 0 ) - { - points = 10; - if ( !index ) - { - points = maps/mp/zombies/_zm_score::get_zombie_death_player_points(); - } - else - { - if ( index == 1 ) - { - points = 30; - } - } - player maps/mp/zombies/_zm_score::player_add_points( "thundergun_fling", points ); - self startragdoll(); - self launchragdoll( fling_vec ); - self.thundergun_death = 1; - } -} - -zombie_knockdown( player, gib ) -{ - if ( gib && !self.gibbed ) - { - self.a.gib_ref = random( level.thundergun_gib_refs ); - self thread maps/mp/animscripts/zm_death::do_gib(); - } - damage = level.zombie_vars[ "thundergun_knockdown_damage" ]; - if ( isDefined( level.override_thundergun_damage_func ) ) - { - self [[ level.override_thundergun_damage_func ]]( player, gib ); - } - else - { - self.thundergun_handle_pain_notetracks = ::handle_thundergun_pain_notetracks; - self dodamage( damage, player.origin, player ); - } -} - -thundergun_knockdown_zombie( player, gib ) -{ - self endon( "death" ); - playsoundatposition( "vox_thundergun_forcehit", self.origin ); - playsoundatposition( "wpn_thundergun_proj_impact", self.origin ); - if ( !isDefined( self ) || !isalive( self ) ) - { - return; - } - if ( isDefined( self.thundergun_knockdown_func ) ) - { - self [[ self.thundergun_knockdown_func ]]( player, gib ); - } - else - { - self dodamage( level.zombie_vars[ "thundergun_knockdown_damage" ], player.origin, player ); - } - if ( gib ) - { - self.a.gib_ref = random( level.thundergun_gib_refs ); - self thread maps/mp/animscripts/zm_death::do_gib(); - } - self.thundergun_handle_pain_notetracks = ::handle_thundergun_pain_notetracks; - self dodamage( level.zombie_vars[ "thundergun_knockdown_damage" ], player.origin, player ); - self playsound( "fly_thundergun_forcehit" ); -} - -handle_thundergun_pain_notetracks( note ) -{ - if ( note == "zombie_knockdown_ground_impact" ) - { - playfx( level._effect[ "thundergun_knockdown_ground" ], self.origin, anglesToForward( self.angles ), anglesToUp( self.angles ) ); - self playsound( "fly_thundergun_forcehit" ); - } -} - -is_thundergun_damage() -{ - if ( isDefined( self.damageweapon ) && self.damageweapon != "thundergun_zm" && self.damageweapon == "thundergun_upgraded_zm" ) - { - if ( self.damagemod != "MOD_GRENADE" ) - { - return self.damagemod != "MOD_GRENADE_SPLASH"; - } - } -} - -enemy_killed_by_thundergun() -{ - if ( isDefined( self.thundergun_death ) ) - { - return self.thundergun_death == 1; - } -} - -thundergun_sound_thread() -{ - self endon( "disconnect" ); - self waittill( "spawned_player" ); - for ( ;; ) - { - result = self waittill_any_return( "grenade_fire", "death", "player_downed", "weapon_change", "grenade_pullback" ); - if ( !isDefined( result ) ) - { - continue; - } - else if ( result != "weapon_change" && result == "grenade_fire" && self getcurrentweapon() == "thundergun_zm" ) - { - self playloopsound( "tesla_idle", 0,25 ); - continue; - } - else - { - self notify( "weap_away" ); - self stoploopsound( 0,25 ); - } - } -} - -setup_thundergun_vox( player, fling, gib, knockdown ) -{ - if ( !isDefined( self ) || !isalive( self ) ) - { - return; - } - if ( !fling || gib && knockdown ) - { - if ( randomintrange( 1, 100 ) <= 25 ) - { - } - } - if ( fling ) - { - if ( randomintrange( 1, 100 ) <= 30 ) - { - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "thundergun" ); - } - } -} diff --git a/Zombie Core/patch_zm/codescripts/character_mp.gsc b/Zombie Core/patch_zm/codescripts/character_mp.gsc deleted file mode 100644 index 99f3c87..0000000 --- a/Zombie Core/patch_zm/codescripts/character_mp.gsc +++ /dev/null @@ -1,21 +0,0 @@ -#include codescripts/character; - -setmodelfromarray( a ) -{ - self setmodel( a[ randomint( a.size ) ] ); -} - -precachemodelarray( a ) -{ - i = 0; - while ( i < a.size ) - { - precachemodel( a[ i ] ); - i++; - } -} - -attachfromarray( a ) -{ - self attach( codescripts/character::randomelement( a ), "", 1 ); -} diff --git a/Zombie Core/patch_zm/common_scripts/utility.gsc b/Zombie Core/patch_zm/common_scripts/utility.gsc deleted file mode 100644 index 27d067e..0000000 --- a/Zombie Core/patch_zm/common_scripts/utility.gsc +++ /dev/null @@ -1,2012 +0,0 @@ - -init_session_mode_flags() -{ - level.gamemode_public_match = 0; - level.gamemode_private_match = 1; - level.gamemode_local_splitscreen = 2; - level.gamemode_wager_match = 3; - level.gamemode_theater = 5; - level.gamemode_league_match = 6; - level.gamemode_rts = 7; - level.language = getDvar( "language" ); -} - -empty( a, b, c, d, e ) -{ -} - -add_to_array( array, item, allow_dupes ) -{ - if ( !isDefined( item ) ) - { - return array; - } - if ( !isDefined( allow_dupes ) ) - { - allow_dupes = 1; - } - if ( !isDefined( array ) ) - { - array[ 0 ] = item; - } - else - { - if ( allow_dupes || !isinarray( array, item ) ) - { - array[ array.size ] = item; - } - } - return array; -} - -array_copy( array ) -{ - a_copy = []; - _a92 = array; - _k92 = getFirstArrayKey( _a92 ); - while ( isDefined( _k92 ) ) - { - elem = _a92[ _k92 ]; - a_copy[ a_copy.size ] = elem; - _k92 = getNextArrayKey( _a92, _k92 ); - } - return a_copy; -} - -array_delete( array, is_struct ) -{ - _a109 = array; - _k109 = getFirstArrayKey( _a109 ); - while ( isDefined( _k109 ) ) - { - ent = _a109[ _k109 ]; - if ( isDefined( is_struct ) && is_struct ) - { - ent structdelete(); - ent = undefined; - } - else - { - if ( isDefined( ent ) ) - { - ent delete(); - } - } - _k109 = getNextArrayKey( _a109, _k109 ); - } -} - -array_randomize( array ) -{ - i = 0; - while ( i < array.size ) - { - j = randomint( array.size ); - temp = array[ i ]; - array[ i ] = array[ j ]; - array[ j ] = temp; - i++; - } - return array; -} - -array_reverse( array ) -{ - array2 = []; - i = array.size - 1; - while ( i >= 0 ) - { - array2[ array2.size ] = array[ i ]; - i--; - - } - return array2; -} - -array_exclude( array, arrayexclude ) -{ - newarray = array; - if ( isarray( arrayexclude ) ) - { - i = 0; - while ( i < arrayexclude.size ) - { - arrayremovevalue( newarray, arrayexclude[ i ] ); - i++; - } - } - else arrayremovevalue( newarray, arrayexclude ); - return newarray; -} - -array_notify( ents, notifier ) -{ - i = 0; - while ( i < ents.size ) - { - ents[ i ] notify( notifier ); - i++; - } -} - -array_wait( array, msg, timeout ) -{ - keys = getarraykeys( array ); - structs = []; - i = 0; - while ( i < keys.size ) - { - key = keys[ i ]; - structs[ key ] = spawnstruct(); - structs[ key ]._array_wait = 1; - structs[ key ] thread array_waitlogic1( array[ key ], msg, timeout ); - i++; - } - i = 0; - while ( i < keys.size ) - { - key = keys[ i ]; - if ( isDefined( array[ key ] ) && structs[ key ]._array_wait ) - { - structs[ key ] waittill( "_array_wait" ); - } - i++; - } -} - -array_wait_any( array, msg, timeout ) -{ - if ( array.size == 0 ) - { - return undefined; - } - keys = getarraykeys( array ); - structs = []; - internal_msg = msg + "array_wait"; - i = 0; - while ( i < keys.size ) - { - key = keys[ i ]; - structs[ key ] = spawnstruct(); - structs[ key ]._array_wait = 1; - structs[ key ] thread array_waitlogic3( array[ key ], msg, internal_msg, timeout ); - i++; - } - level waittill( internal_msg, ent ); - return ent; -} - -array_waitlogic1( ent, msg, timeout ) -{ - self array_waitlogic2( ent, msg, timeout ); - self._array_wait = 0; - self notify( "_array_wait" ); -} - -array_waitlogic2( ent, msg, timeout ) -{ - ent endon( msg ); - ent endon( "death" ); - if ( isDefined( timeout ) ) - { - wait timeout; - } - else - { - ent waittill( msg ); - } -} - -array_waitlogic3( ent, msg, internal_msg, timeout ) -{ - if ( msg != "death" ) - { - ent endon( "death" ); - } - level endon( internal_msg ); - self array_waitlogic2( ent, msg, timeout ); - level notify( internal_msg ); -} - -array_check_for_dupes( array, single ) -{ - i = 0; - while ( i < array.size ) - { - if ( array[ i ] == single ) - { - return 0; - } - i++; - } - return 1; -} - -array_swap( array, index1, index2 ) -{ -/# - assert( index1 < array.size, "index1 to swap out of range" ); -#/ -/# - assert( index2 < array.size, "index2 to swap out of range" ); -#/ - temp = array[ index1 ]; - array[ index1 ] = array[ index2 ]; - array[ index2 ] = temp; - return array; -} - -array_average( array ) -{ -/# - assert( isarray( array ) ); -#/ -/# - assert( array.size > 0 ); -#/ - total = 0; - i = 0; - while ( i < array.size ) - { - total += array[ i ]; - i++; - } - return total / array.size; -} - -array_std_deviation( array, mean ) -{ -/# - assert( isarray( array ) ); -#/ -/# - assert( array.size > 0 ); -#/ - tmp = []; - i = 0; - while ( i < array.size ) - { - tmp[ i ] = ( array[ i ] - mean ) * ( array[ i ] - mean ); - i++; - } - total = 0; - i = 0; - while ( i < tmp.size ) - { - total += tmp[ i ]; - i++; - } - return sqrt( total / array.size ); -} - -random_normal_distribution( mean, std_deviation, lower_bound, upper_bound ) -{ - x1 = 0; - x2 = 0; - w = 1; - y1 = 0; - while ( w >= 1 ) - { - x1 = ( 2 * randomfloatrange( 0, 1 ) ) - 1; - x2 = ( 2 * randomfloatrange( 0, 1 ) ) - 1; - w = ( x1 * x1 ) + ( x2 * x2 ); - } - w = sqrt( ( -2 * log( w ) ) / w ); - y1 = x1 * w; - number = mean + ( y1 * std_deviation ); - if ( isDefined( lower_bound ) && number < lower_bound ) - { - number = lower_bound; - } - if ( isDefined( upper_bound ) && number > upper_bound ) - { - number = upper_bound; - } - return number; -} - -random( array ) -{ - keys = getarraykeys( array ); - return array[ keys[ randomint( keys.size ) ] ]; -} - -get_players( str_team ) -{ - if ( isDefined( str_team ) ) - { - return getplayers( str_team ); - } - else - { - return getplayers(); - } -} - -is_prefix( msg, prefix ) -{ - if ( prefix.size > msg.size ) - { - return 0; - } - i = 0; - while ( i < prefix.size ) - { - if ( msg[ i ] != prefix[ i ] ) - { - return 0; - } - i++; - } - return 1; -} - -is_suffix( msg, suffix ) -{ - if ( suffix.size > msg.size ) - { - return 0; - } - i = 0; - while ( i < suffix.size ) - { - if ( msg[ ( msg.size - 1 ) - i ] != suffix[ ( suffix.size - 1 ) - i ] ) - { - return 0; - } - i++; - } - return 1; -} - -vector_compare( vec1, vec2 ) -{ - if ( abs( vec1[ 0 ] - vec2[ 0 ] ) < 0,001 && abs( vec1[ 1 ] - vec2[ 1 ] ) < 0,001 ) - { - return abs( vec1[ 2 ] - vec2[ 2 ] ) < 0,001; - } -} - -draw_debug_line( start, end, timer ) -{ -/# - i = 0; - while ( i < ( timer * 20 ) ) - { - line( start, end, ( 1, 1, 0,5 ) ); - wait 0,05; - i++; -#/ - } -} - -waittillend( msg ) -{ - self waittillmatch( msg ); - return "end"; -} - -random_vector( max_length ) -{ - return ( randomfloatrange( -1 * max_length, max_length ), randomfloatrange( -1 * max_length, max_length ), randomfloatrange( -1 * max_length, max_length ) ); -} - -angle_dif( oldangle, newangle ) -{ - outvalue = ( oldangle - newangle ) % 360; - if ( outvalue < 0 ) - { - outvalue += 360; - } - if ( outvalue > 180 ) - { - outvalue = ( outvalue - 360 ) * -1; - } - return outvalue; -} - -sign( x ) -{ - if ( x >= 0 ) - { - return 1; - } - return -1; -} - -track( spot_to_track ) -{ - if ( isDefined( self.current_target ) ) - { - if ( spot_to_track == self.current_target ) - { - return; - } - } - self.current_target = spot_to_track; -} - -clear_exception( type ) -{ -/# - assert( isDefined( self.exception[ type ] ) ); -#/ - self.exception[ type ] = anim.defaultexception; -} - -set_exception( type, func ) -{ -/# - assert( isDefined( self.exception[ type ] ) ); -#/ - self.exception[ type ] = func; -} - -set_all_exceptions( exceptionfunc ) -{ - keys = getarraykeys( self.exception ); - i = 0; - while ( i < keys.size ) - { - self.exception[ keys[ i ] ] = exceptionfunc; - i++; - } -} - -cointoss() -{ - return randomint( 100 ) >= 50; -} - -waittill_string( msg, ent ) -{ - if ( msg != "death" ) - { - self endon( "death" ); - } - ent endon( "die" ); - self waittill( msg ); - ent notify( "returned" ); -} - -waittill_multiple( string1, string2, string3, string4, string5 ) -{ - self endon( "death" ); - ent = spawnstruct(); - ent.threads = 0; - if ( isDefined( string1 ) ) - { - self thread waittill_string( string1, ent ); - ent.threads++; - } - if ( isDefined( string2 ) ) - { - self thread waittill_string( string2, ent ); - ent.threads++; - } - if ( isDefined( string3 ) ) - { - self thread waittill_string( string3, ent ); - ent.threads++; - } - if ( isDefined( string4 ) ) - { - self thread waittill_string( string4, ent ); - ent.threads++; - } - if ( isDefined( string5 ) ) - { - self thread waittill_string( string5, ent ); - ent.threads++; - } - while ( ent.threads ) - { - ent waittill( "returned" ); - ent.threads--; - - } - ent notify( "die" ); -} - -waittill_multiple_ents( ent1, string1, ent2, string2, ent3, string3, ent4, string4 ) -{ - self endon( "death" ); - ent = spawnstruct(); - ent.threads = 0; - if ( isDefined( ent1 ) ) - { -/# - assert( isDefined( string1 ) ); -#/ - ent1 thread waittill_string( string1, ent ); - ent.threads++; - } - if ( isDefined( ent2 ) ) - { -/# - assert( isDefined( string2 ) ); -#/ - ent2 thread waittill_string( string2, ent ); - ent.threads++; - } - if ( isDefined( ent3 ) ) - { -/# - assert( isDefined( string3 ) ); -#/ - ent3 thread waittill_string( string3, ent ); - ent.threads++; - } - if ( isDefined( ent4 ) ) - { -/# - assert( isDefined( string4 ) ); -#/ - ent4 thread waittill_string( string4, ent ); - ent.threads++; - } - while ( ent.threads ) - { - ent waittill( "returned" ); - ent.threads--; - - } - ent notify( "die" ); -} - -waittill_any_return( string1, string2, string3, string4, string5, string6, string7 ) -{ - if ( isDefined( string1 ) && string1 != "death" && isDefined( string2 ) && string2 != "death" && isDefined( string3 ) && string3 != "death" && isDefined( string4 ) && string4 != "death" && isDefined( string5 ) && string5 != "death" && isDefined( string6 ) && string6 != "death" || !isDefined( string7 ) && string7 != "death" ) - { - self endon( "death" ); - } - ent = spawnstruct(); - if ( isDefined( string1 ) ) - { - self thread waittill_string( string1, ent ); - } - if ( isDefined( string2 ) ) - { - self thread waittill_string( string2, ent ); - } - if ( isDefined( string3 ) ) - { - self thread waittill_string( string3, ent ); - } - if ( isDefined( string4 ) ) - { - self thread waittill_string( string4, ent ); - } - if ( isDefined( string5 ) ) - { - self thread waittill_string( string5, ent ); - } - if ( isDefined( string6 ) ) - { - self thread waittill_string( string6, ent ); - } - if ( isDefined( string7 ) ) - { - self thread waittill_string( string7, ent ); - } - ent waittill( "returned", msg ); - ent notify( "die" ); - return msg; -} - -waittill_any_array_return( a_notifies ) -{ - if ( isinarray( a_notifies, "death" ) ) - { - self endon( "death" ); - } - s_tracker = spawnstruct(); - _a825 = a_notifies; - _k825 = getFirstArrayKey( _a825 ); - while ( isDefined( _k825 ) ) - { - str_notify = _a825[ _k825 ]; - if ( isDefined( str_notify ) ) - { - self thread waittill_string( str_notify, s_tracker ); - } - _k825 = getNextArrayKey( _a825, _k825 ); - } - s_tracker waittill( "returned", msg ); - s_tracker notify( "die" ); - return msg; -} - -waittill_any( str_notify1, str_notify2, str_notify3, str_notify4, str_notify5 ) -{ -/# - assert( isDefined( str_notify1 ) ); -#/ - waittill_any_array( array( str_notify1, str_notify2, str_notify3, str_notify4, str_notify5 ) ); -} - -waittill_any_array( a_notifies ) -{ -/# - assert( isDefined( a_notifies[ 0 ] ), "At least the first element has to be defined for waittill_any_array." ); -#/ - i = 1; - while ( i < a_notifies.size ) - { - if ( isDefined( a_notifies[ i ] ) ) - { - self endon( a_notifies[ i ] ); - } - i++; - } - self waittill( a_notifies[ 0 ] ); -} - -waittill_any_timeout( n_timeout, string1, string2, string3, string4, string5 ) -{ - if ( isDefined( string1 ) && string1 != "death" && isDefined( string2 ) && string2 != "death" && isDefined( string3 ) && string3 != "death" && isDefined( string4 ) && string4 != "death" || !isDefined( string5 ) && string5 != "death" ) - { - self endon( "death" ); - } - ent = spawnstruct(); - if ( isDefined( string1 ) ) - { - self thread waittill_string( string1, ent ); - } - if ( isDefined( string2 ) ) - { - self thread waittill_string( string2, ent ); - } - if ( isDefined( string3 ) ) - { - self thread waittill_string( string3, ent ); - } - if ( isDefined( string4 ) ) - { - self thread waittill_string( string4, ent ); - } - if ( isDefined( string5 ) ) - { - self thread waittill_string( string5, ent ); - } - ent thread _timeout( n_timeout ); - ent waittill( "returned", msg ); - ent notify( "die" ); - return msg; -} - -_timeout( delay ) -{ - self endon( "die" ); - wait delay; - self notify( "returned" ); -} - -waittill_any_ents( ent1, string1, ent2, string2, ent3, string3, ent4, string4, ent5, string5, ent6, string6, ent7, string7 ) -{ -/# - assert( isDefined( ent1 ) ); -#/ -/# - assert( isDefined( string1 ) ); -#/ - if ( isDefined( ent2 ) && isDefined( string2 ) ) - { - ent2 endon( string2 ); - } - if ( isDefined( ent3 ) && isDefined( string3 ) ) - { - ent3 endon( string3 ); - } - if ( isDefined( ent4 ) && isDefined( string4 ) ) - { - ent4 endon( string4 ); - } - if ( isDefined( ent5 ) && isDefined( string5 ) ) - { - ent5 endon( string5 ); - } - if ( isDefined( ent6 ) && isDefined( string6 ) ) - { - ent6 endon( string6 ); - } - if ( isDefined( ent7 ) && isDefined( string7 ) ) - { - ent7 endon( string7 ); - } - ent1 waittill( string1 ); -} - -waittill_any_ents_two( ent1, string1, ent2, string2 ) -{ -/# - assert( isDefined( ent1 ) ); -#/ -/# - assert( isDefined( string1 ) ); -#/ - if ( isDefined( ent2 ) && isDefined( string2 ) ) - { - ent2 endon( string2 ); - } - ent1 waittill( string1 ); -} - -waittill_flag_exists( msg ) -{ - while ( !flag_exists( msg ) ) - { - waittillframeend; - if ( flag_exists( msg ) ) - { - return; - } - else - { - wait 0,05; - } - } -} - -isflashed() -{ - if ( !isDefined( self.flashendtime ) ) - { - return 0; - } - return getTime() < self.flashendtime; -} - -isstunned() -{ - if ( !isDefined( self.flashendtime ) ) - { - return 0; - } - return getTime() < self.flashendtime; -} - -flag( flagname ) -{ -/# - assert( isDefined( flagname ), "Tried to check flag but the flag was not defined." ); -#/ -/# - assert( isDefined( level.flag[ flagname ] ), "Tried to check flag " + flagname + " but the flag was not initialized." ); -#/ - if ( !level.flag[ flagname ] ) - { - return 0; - } - return 1; -} - -flag_delete( flagname ) -{ - if ( isDefined( level.flag[ flagname ] ) ) - { - } - else - { -/# - println( "flag_delete() called on flag that does not exist: " + flagname ); -#/ - } -} - -flag_init( flagname, val, b_is_trigger ) -{ - if ( !isDefined( b_is_trigger ) ) - { - b_is_trigger = 0; - } - if ( !isDefined( level.flag ) ) - { - level.flag = []; - } - if ( !isDefined( level.sp_stat_tracking_func ) ) - { - level.sp_stat_tracking_func = ::empty; - } - if ( !isDefined( level.first_frame ) ) - { -/# - assert( !isDefined( level.flag[ flagname ] ), "Attempt to reinitialize existing flag: " + flagname ); -#/ - } - if ( isDefined( val ) && val ) - { - level.flag[ flagname ] = 1; - } - else - { - level.flag[ flagname ] = 0; - } - if ( b_is_trigger ) - { - if ( !isDefined( level.trigger_flags ) ) - { - init_trigger_flags(); - level.trigger_flags[ flagname ] = []; - } - else - { - if ( !isDefined( level.trigger_flags[ flagname ] ) ) - { - level.trigger_flags[ flagname ] = []; - } - } - } - if ( is_suffix( flagname, "aa_" ) ) - { - thread [[ level.sp_stat_tracking_func ]]( flagname ); - } -} - -flag_set( flagname ) -{ -/# - assert( isDefined( level.flag[ flagname ] ), "Attempt to set a flag before calling flag_init: " + flagname ); -#/ - level.flag[ flagname ] = 1; - level notify( flagname ); - set_trigger_flag_permissions( flagname ); -} - -flag_set_for_time( n_time, str_flag ) -{ - level notify( "set_flag_for_time:" + str_flag ); - flag_set( str_flag ); - level endon( "set_flag_for_time:" + str_flag ); - wait n_time; - flag_clear( str_flag ); -} - -flag_toggle( flagname ) -{ - if ( flag( flagname ) ) - { - flag_clear( flagname ); - } - else - { - flag_set( flagname ); - } -} - -flag_wait( flagname ) -{ - level waittill_flag_exists( flagname ); - while ( !level.flag[ flagname ] ) - { - level waittill( flagname ); - } -} - -flag_wait_any( str_flag1, str_flag2, str_flag3, str_flag4, str_flag5 ) -{ - level flag_wait_any_array( array( str_flag1, str_flag2, str_flag3, str_flag4, str_flag5 ) ); -} - -flag_wait_any_array( a_flags ) -{ - while ( 1 ) - { - i = 0; - while ( i < a_flags.size ) - { - if ( flag( a_flags[ i ] ) ) - { - return a_flags[ i ]; - } - i++; - } - level waittill_any_array( a_flags ); - } -} - -flag_clear( flagname ) -{ -/# - assert( isDefined( level.flag[ flagname ] ), "Attempt to set a flag before calling flag_init: " + flagname ); -#/ - if ( level.flag[ flagname ] ) - { - level.flag[ flagname ] = 0; - level notify( flagname ); - set_trigger_flag_permissions( flagname ); - } -} - -flag_waitopen( flagname ) -{ - while ( level.flag[ flagname ] ) - { - level waittill( flagname ); - } -} - -flag_waitopen_array( a_flags ) -{ - _a1324 = a_flags; - _k1324 = getFirstArrayKey( _a1324 ); - while ( isDefined( _k1324 ) ) - { - str_flag = _a1324[ _k1324 ]; - if ( flag( str_flag ) ) - { - flag_waitopen( str_flag ); - break; - } - _k1324 = getNextArrayKey( _a1324, _k1324 ); - } -} - -flag_exists( flagname ) -{ - if ( self == level ) - { - if ( !isDefined( level.flag ) ) - { - return 0; - } - if ( isDefined( level.flag[ flagname ] ) ) - { - return 1; - } - } - else - { - if ( !isDefined( self.ent_flag ) ) - { - return 0; - } - if ( isDefined( self.ent_flag[ flagname ] ) ) - { - return 1; - } - } - return 0; -} - -script_gen_dump_addline( string, signature ) -{ - if ( !isDefined( string ) ) - { - string = "nowrite"; - } - if ( !isDefined( level._loadstarted ) ) - { - if ( !isDefined( level.script_gen_dump_preload ) ) - { - level.script_gen_dump_preload = []; - } - struct = spawnstruct(); - struct.string = string; - struct.signature = signature; - level.script_gen_dump_preload[ level.script_gen_dump_preload.size ] = struct; - return; - } - if ( !isDefined( level.script_gen_dump[ signature ] ) ) - { - level.script_gen_dump_reasons[ level.script_gen_dump_reasons.size ] = "Added: " + string; - } - level.script_gen_dump[ signature ] = string; - level.script_gen_dump2[ signature ] = string; -} - -array_func( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ) -{ - if ( !isDefined( entities ) ) - { - return; - } - if ( isarray( entities ) ) - { - while ( entities.size ) - { - keys = getarraykeys( entities ); - i = 0; - while ( i < keys.size ) - { - single_func( entities[ keys[ i ] ], func, arg1, arg2, arg3, arg4, arg5, arg6 ); - i++; - } - } - } - else single_func( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ); -} - -single_func( entity, func, arg1, arg2, arg3, arg4, arg5, arg6 ) -{ - if ( !isDefined( entity ) ) - { - entity = level; - } - if ( isDefined( arg6 ) ) - { - return entity [[ func ]]( arg1, arg2, arg3, arg4, arg5, arg6 ); - } - else - { - if ( isDefined( arg5 ) ) - { - return entity [[ func ]]( arg1, arg2, arg3, arg4, arg5 ); - } - else - { - if ( isDefined( arg4 ) ) - { - return entity [[ func ]]( arg1, arg2, arg3, arg4 ); - } - else - { - if ( isDefined( arg3 ) ) - { - return entity [[ func ]]( arg1, arg2, arg3 ); - } - else - { - if ( isDefined( arg2 ) ) - { - return entity [[ func ]]( arg1, arg2 ); - } - else - { - if ( isDefined( arg1 ) ) - { - return entity [[ func ]]( arg1 ); - } - else - { - return entity [[ func ]](); - } - } - } - } - } - } -} - -new_func( func, arg1, arg2, arg3, arg4, arg5, arg6 ) -{ - s_func = spawnstruct(); - s_func.func = func; - s_func.arg1 = arg1; - s_func.arg2 = arg2; - s_func.arg3 = arg3; - s_func.arg4 = arg4; - s_func.arg5 = arg5; - s_func.arg6 = arg6; - return s_func; -} - -call_func( s_func ) -{ - return single_func( self, s_func.func, s_func.arg1, s_func.arg2, s_func.arg3, s_func.arg4, s_func.arg5, s_func.arg6 ); -} - -array_thread( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ) -{ -/# - assert( isDefined( entities ), "Undefined entity array passed to common_scriptsutility::array_thread" ); -#/ -/# - assert( isDefined( func ), "Undefined function passed to common_scriptsutility::array_thread" ); -#/ - if ( isarray( entities ) ) - { - if ( isDefined( arg6 ) ) - { - _a1554 = entities; - _k1554 = getFirstArrayKey( _a1554 ); - while ( isDefined( _k1554 ) ) - { - ent = _a1554[ _k1554 ]; - ent thread [[ func ]]( arg1, arg2, arg3, arg4, arg5, arg6 ); - _k1554 = getNextArrayKey( _a1554, _k1554 ); - } - } - else if ( isDefined( arg5 ) ) - { - _a1561 = entities; - _k1561 = getFirstArrayKey( _a1561 ); - while ( isDefined( _k1561 ) ) - { - ent = _a1561[ _k1561 ]; - ent thread [[ func ]]( arg1, arg2, arg3, arg4, arg5 ); - _k1561 = getNextArrayKey( _a1561, _k1561 ); - } - } - else if ( isDefined( arg4 ) ) - { - _a1568 = entities; - _k1568 = getFirstArrayKey( _a1568 ); - while ( isDefined( _k1568 ) ) - { - ent = _a1568[ _k1568 ]; - ent thread [[ func ]]( arg1, arg2, arg3, arg4 ); - _k1568 = getNextArrayKey( _a1568, _k1568 ); - } - } - else if ( isDefined( arg3 ) ) - { - _a1575 = entities; - _k1575 = getFirstArrayKey( _a1575 ); - while ( isDefined( _k1575 ) ) - { - ent = _a1575[ _k1575 ]; - ent thread [[ func ]]( arg1, arg2, arg3 ); - _k1575 = getNextArrayKey( _a1575, _k1575 ); - } - } - else if ( isDefined( arg2 ) ) - { - _a1582 = entities; - _k1582 = getFirstArrayKey( _a1582 ); - while ( isDefined( _k1582 ) ) - { - ent = _a1582[ _k1582 ]; - ent thread [[ func ]]( arg1, arg2 ); - _k1582 = getNextArrayKey( _a1582, _k1582 ); - } - } - else if ( isDefined( arg1 ) ) - { - _a1589 = entities; - _k1589 = getFirstArrayKey( _a1589 ); - while ( isDefined( _k1589 ) ) - { - ent = _a1589[ _k1589 ]; - ent thread [[ func ]]( arg1 ); - _k1589 = getNextArrayKey( _a1589, _k1589 ); - } - } - else _a1596 = entities; - _k1596 = getFirstArrayKey( _a1596 ); - while ( isDefined( _k1596 ) ) - { - ent = _a1596[ _k1596 ]; - ent thread [[ func ]](); - _k1596 = getNextArrayKey( _a1596, _k1596 ); - } - } - else single_thread( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ); -} - -array_ent_thread( entities, func, arg1, arg2, arg3, arg4, arg5 ) -{ -/# - assert( isDefined( entities ), "Undefined entity array passed to common_scriptsutility::array_ent_thread" ); -#/ -/# - assert( isDefined( func ), "Undefined function passed to common_scriptsutility::array_ent_thread" ); -#/ - if ( isarray( entities ) ) - { - while ( entities.size ) - { - keys = getarraykeys( entities ); - i = 0; - while ( i < keys.size ) - { - single_thread( self, func, entities[ keys[ i ] ], arg1, arg2, arg3, arg4, arg5 ); - i++; - } - } - } - else single_thread( self, func, entities, arg1, arg2, arg3, arg4, arg5 ); -} - -single_thread( entity, func, arg1, arg2, arg3, arg4, arg5, arg6 ) -{ -/# - assert( isDefined( entity ), "Undefined entity passed to common_scriptsutility::single_thread()" ); -#/ - if ( isDefined( arg6 ) ) - { - entity thread [[ func ]]( arg1, arg2, arg3, arg4, arg5, arg6 ); - } - else if ( isDefined( arg5 ) ) - { - entity thread [[ func ]]( arg1, arg2, arg3, arg4, arg5 ); - } - else if ( isDefined( arg4 ) ) - { - entity thread [[ func ]]( arg1, arg2, arg3, arg4 ); - } - else if ( isDefined( arg3 ) ) - { - entity thread [[ func ]]( arg1, arg2, arg3 ); - } - else if ( isDefined( arg2 ) ) - { - entity thread [[ func ]]( arg1, arg2 ); - } - else if ( isDefined( arg1 ) ) - { - entity thread [[ func ]]( arg1 ); - } - else - { - entity thread [[ func ]](); - } -} - -remove_undefined_from_array( array ) -{ - newarray = []; - i = 0; - while ( i < array.size ) - { - if ( !isDefined( array[ i ] ) ) - { - i++; - continue; - } - else - { - newarray[ newarray.size ] = array[ i ]; - } - i++; - } - return newarray; -} - -trigger_on( name, type ) -{ - if ( isDefined( name ) ) - { - if ( !isDefined( type ) ) - { - type = "targetname"; - } - ents = getentarray( name, type ); - array_thread( ents, ::trigger_on_proc ); - } - else - { - self trigger_on_proc(); - } -} - -trigger_on_proc() -{ - if ( isDefined( self.realorigin ) ) - { - self.origin = self.realorigin; - } - self.trigger_off = undefined; -} - -trigger_off( name, type ) -{ - if ( isDefined( name ) ) - { - if ( !isDefined( type ) ) - { - type = "targetname"; - } - ents = getentarray( name, type ); - array_thread( ents, ::trigger_off_proc ); - } - else - { - self trigger_off_proc(); - } -} - -trigger_off_proc() -{ - if ( !isDefined( self.trigger_off ) || !self.trigger_off ) - { - self.realorigin = self.origin; - self.origin += vectorScale( ( 0, 0, -1 ), 10000 ); - self.trigger_off = 1; - } -} - -trigger_wait( str_name, str_key, e_entity ) -{ - if ( !isDefined( str_key ) ) - { - str_key = "targetname"; - } - if ( isDefined( str_name ) ) - { - triggers = getentarray( str_name, str_key ); -/# - assert( triggers.size > 0, "trigger not found: " + str_name + " key: " + str_key ); -#/ - if ( triggers.size == 1 ) - { - trigger_hit = triggers[ 0 ]; - trigger_hit _trigger_wait( e_entity ); - } - else - { - s_tracker = spawnstruct(); - array_thread( triggers, ::_trigger_wait_think, s_tracker, e_entity ); - s_tracker waittill( "trigger", e_other, trigger_hit ); - trigger_hit.who = e_other; - } - level notify( str_name ); - return trigger_hit; - } - else - { - return _trigger_wait( e_entity ); - } -} - -_trigger_wait( e_entity ) -{ - if ( is_look_trigger( self ) ) - { - self waittill( "trigger_look", e_other ); - } - else - { - self waittill( "trigger", e_other ); - } - if ( isDefined( e_entity )self.who = e_other; - return self; -} - -_trigger_wait_think( s_tracker, e_entity ) -{ - self endon( "death" ); - s_tracker endon( "trigger" ); - e_other = _trigger_wait( e_entity ); - s_tracker notify( "trigger" ); -} - -trigger_use( str_name, str_key, ent, b_assert ) -{ - if ( !isDefined( str_key ) ) - { - str_key = "targetname"; - } - if ( !isDefined( b_assert ) ) - { - b_assert = 1; - } - if ( !isDefined( ent ) ) - { - ent = get_players()[ 0 ]; - } - if ( isDefined( str_name ) ) - { - e_trig = getent( str_name, str_key ); - if ( !isDefined( e_trig ) ) - { - if ( b_assert ) - { -/# - assertmsg( "trigger not found: " + str_name + " key: " + str_key ); -#/ - } - return; - } - } - else - { - e_trig = self; - str_name = self.targetname; - } - e_trig useby( ent ); - level notify( str_name ); - if ( is_look_trigger( e_trig ) ) - { - e_trig notify( "trigger_look" ); - } - return e_trig; -} - -set_trigger_flag_permissions( msg ) -{ - if ( !isDefined( level.trigger_flags ) || !isDefined( level.trigger_flags[ msg ] ) ) - { - return; - } - level.trigger_flags[ msg ] = remove_undefined_from_array( level.trigger_flags[ msg ] ); - array_thread( level.trigger_flags[ msg ], ::update_trigger_based_on_flags ); -} - -update_trigger_based_on_flags() -{ - true_on = 1; - while ( isDefined( self.script_flag_true ) ) - { - true_on = 0; - tokens = create_flags_and_return_tokens( self.script_flag_true ); - i = 0; - while ( i < tokens.size ) - { - if ( flag( tokens[ i ] ) ) - { - true_on = 1; - break; - } - else - { - i++; - } - } - } - false_on = 1; - while ( isDefined( self.script_flag_false ) ) - { - tokens = create_flags_and_return_tokens( self.script_flag_false ); - i = 0; - while ( i < tokens.size ) - { - if ( flag( tokens[ i ] ) ) - { - false_on = 0; - break; - } - else - { - i++; - } - } - } - if ( true_on ) - { - [[ level.trigger_func[ false_on ] ]](); - } -} - -create_flags_and_return_tokens( flags ) -{ - tokens = strtok( flags, " " ); - i = 0; - while ( i < tokens.size ) - { - if ( !isDefined( level.flag[ tokens[ i ] ] ) ) - { - flag_init( tokens[ i ], undefined, 1 ); - } - i++; - } - return tokens; -} - -init_trigger_flags() -{ - level.trigger_flags = []; - level.trigger_func[ 1 ] = ::trigger_on; - level.trigger_func[ 0 ] = ::trigger_off; -} - -is_look_trigger( trig ) -{ - if ( isDefined( trig ) ) - { - if ( trig has_spawnflag( 256 ) ) - { - if ( !isDefined( trig.classname ) && isDefined( "trigger_damage" ) && isDefined( trig.classname ) && isDefined( "trigger_damage" )} - } - else - { - } - return 0; -} - -is_trigger_once( trig ) -{ - if ( isDefined( trig ) ) - { - if ( !trig has_spawnflag( 1024 ) ) - { - if ( !isDefined( self.classname ) && isDefined( "trigger_once" ) ) - { - if ( isDefined( self.classname ) && isDefined( "trigger_once" ) ) - { - } - } - } - } - else - { - } - return 0; -} - -getstruct( name, type ) -{ - if ( !isDefined( type ) ) - { - type = "targetname"; - } -/# - assert( isDefined( level.struct_class_names ), "Tried to getstruct before the structs were init" ); -#/ - array = level.struct_class_names[ type ][ name ]; - if ( !isDefined( array ) ) - { - return undefined; - } - if ( array.size > 1 ) - { -/# - assertmsg( "getstruct used for more than one struct of type " + type + " called " + name + "." ); -#/ - return undefined; - } - return array[ 0 ]; -} - -getstructarray( name, type ) -{ - if ( !isDefined( type ) ) - { - type = "targetname"; - } -/# - assert( isDefined( level.struct_class_names ), "Tried to getstruct before the structs were init" ); -#/ - array = level.struct_class_names[ type ][ name ]; - if ( !isDefined( array ) ) - { - return []; - } - return array; -} - -structdelete() -{ - if ( isDefined( self.target ) && isDefined( level.struct_class_names[ "target" ][ self.target ] ) ) - { - } - if ( isDefined( self.targetname ) && isDefined( level.struct_class_names[ "targetname" ][ self.targetname ] ) ) - { - } - if ( isDefined( self.script_noteworthy ) && isDefined( level.struct_class_names[ "script_noteworthy" ][ self.script_noteworthy ] ) ) - { - } - if ( isDefined( self.script_linkname ) && isDefined( level.struct_class_names[ "script_linkname" ][ self.script_linkname ] ) ) - { - } -} - -struct_class_init() -{ -/# - assert( !isDefined( level.struct_class_names ), "level.struct_class_names is being initialized in the wrong place! It shouldn't be initialized yet." ); -#/ - level.struct_class_names = []; - level.struct_class_names[ "target" ] = []; - level.struct_class_names[ "targetname" ] = []; - level.struct_class_names[ "script_noteworthy" ] = []; - level.struct_class_names[ "script_linkname" ] = []; - level.struct_class_names[ "script_unitrigger_type" ] = []; - _a2064 = level.struct; - _k2064 = getFirstArrayKey( _a2064 ); - while ( isDefined( _k2064 ) ) - { - s_struct = _a2064[ _k2064 ]; - if ( isDefined( s_struct.targetname ) ) - { - if ( !isDefined( level.struct_class_names[ "targetname" ][ s_struct.targetname ] ) ) - { - level.struct_class_names[ "targetname" ][ s_struct.targetname ] = []; - } - size = level.struct_class_names[ "targetname" ][ s_struct.targetname ].size; - level.struct_class_names[ "targetname" ][ s_struct.targetname ][ size ] = s_struct; - } - if ( isDefined( s_struct.target ) ) - { - if ( !isDefined( level.struct_class_names[ "target" ][ s_struct.target ] ) ) - { - level.struct_class_names[ "target" ][ s_struct.target ] = []; - } - size = level.struct_class_names[ "target" ][ s_struct.target ].size; - level.struct_class_names[ "target" ][ s_struct.target ][ size ] = s_struct; - } - if ( isDefined( s_struct.script_noteworthy ) ) - { - if ( !isDefined( level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ] ) ) - { - level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ] = []; - } - size = level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ].size; - level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ][ size ] = s_struct; - } - if ( isDefined( s_struct.script_linkname ) ) - { -/# - assert( !isDefined( level.struct_class_names[ "script_linkname" ][ s_struct.script_linkname ] ), "Two structs have the same linkname" ); -#/ - level.struct_class_names[ "script_linkname" ][ s_struct.script_linkname ][ 0 ] = s_struct; - } - if ( isDefined( s_struct.script_unitrigger_type ) ) - { - if ( !isDefined( level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ] ) ) - { - level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ] = []; - } - size = level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ].size; - level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ][ size ] = s_struct; - } - _k2064 = getNextArrayKey( _a2064, _k2064 ); - } -} - -fileprint_start( file ) -{ -/# - filename = file; - file = openfile( filename, "write" ); - level.fileprint = file; - level.fileprintlinecount = 0; - level.fileprint_filename = filename; -#/ -} - -fileprint_map_start( file ) -{ -/# - file = "map_source/" + file + ".map"; - fileprint_start( file ); - level.fileprint_mapentcount = 0; - fileprint_map_header( 1 ); -#/ -} - -fileprint_chk( file, str ) -{ -/# - level.fileprintlinecount++; - if ( level.fileprintlinecount > 400 ) - { - wait 0,05; - level.fileprintlinecount++; - level.fileprintlinecount = 0; - } - fprintln( file, str ); -#/ -} - -fileprint_map_header( binclude_blank_worldspawn ) -{ - if ( !isDefined( binclude_blank_worldspawn ) ) - { - binclude_blank_worldspawn = 0; - } -/# - assert( isDefined( level.fileprint ) ); -#/ -/# - fileprint_chk( level.fileprint, "iwmap 4" ); - fileprint_chk( level.fileprint, ""000_Global" flags active" ); - fileprint_chk( level.fileprint, ""The Map" flags" ); - if ( !binclude_blank_worldspawn ) - { - return; - } - fileprint_map_entity_start(); - fileprint_map_keypairprint( "classname", "worldspawn" ); - fileprint_map_entity_end(); -#/ -} - -fileprint_map_keypairprint( key1, key2 ) -{ -/# - assert( isDefined( level.fileprint ) ); - fileprint_chk( level.fileprint, """ + key1 + "" "" + key2 + """ ); -#/ -} - -fileprint_map_entity_start() -{ -/# - assert( !isDefined( level.fileprint_entitystart ) ); - level.fileprint_entitystart = 1; - assert( isDefined( level.fileprint ) ); - fileprint_chk( level.fileprint, "// entity " + level.fileprint_mapentcount ); - fileprint_chk( level.fileprint, "{" ); - level.fileprint_mapentcount++; -#/ -} - -fileprint_map_entity_end() -{ -/# - assert( isDefined( level.fileprint_entitystart ) ); - assert( isDefined( level.fileprint ) ); - level.fileprint_entitystart = undefined; - fileprint_chk( level.fileprint, "}" ); -#/ -} - -fileprint_end() -{ -/# - assert( !isDefined( level.fileprint_entitystart ) ); - saved = closefile( level.fileprint ); - if ( saved != 1 ) - { - println( "-----------------------------------" ); - println( " " ); - println( "file write failure" ); - println( "file with name: " + level.fileprint_filename ); - println( "make sure you checkout the file you are trying to save" ); - println( "note: USE P4 Search to find the file and check that one out" ); - println( " Do not checkin files in from the xenonoutput folder, " ); - println( " this is junctioned to the proper directory where you need to go" ); - println( "junctions looks like this" ); - println( " " ); - println( "..\\xenonOutput\\scriptdata\\createfx ..\\share\\raw\\maps\\createfx" ); - println( "..\\xenonOutput\\scriptdata\\createart ..\\share\\raw\\maps\\createart" ); - println( "..\\xenonOutput\\scriptdata\\vision ..\\share\\raw\\vision" ); - println( "..\\xenonOutput\\scriptdata\\scriptgen ..\\share\\raw\\maps\\scriptgen" ); - println( "..\\xenonOutput\\scriptdata\\zone_source ..\\xenon\\zone_source" ); - println( "..\\xenonOutput\\accuracy ..\\share\\raw\\accuracy" ); - println( "..\\xenonOutput\\scriptdata\\map_source ..\\map_source\\xenon_export" ); - println( " " ); - println( "-----------------------------------" ); - println( "File not saved( see console.log for info ) " ); - } - level.fileprint = undefined; - level.fileprint_filename = undefined; -#/ -} - -fileprint_radiant_vec( vector ) -{ -/# - string = "" + vector[ 0 ] + " " + vector[ 1 ] + " " + vector[ 2 ] + ""; - return string; -#/ -} - -is_mature() -{ - if ( level.onlinegame ) - { - return 1; - } - return getlocalprofileint( "cg_mature" ); -} - -is_german_build() -{ - if ( level.language == "german" ) - { - return 1; - } - return 0; -} - -is_gib_restricted_build() -{ - if ( getDvar( "language" ) == "japanese" ) - { - return 1; - } - return 0; -} - -is_true( check ) -{ - if ( isDefined( check ) && check ) - { - return 1; - } - return 0; -} - -is_false( check ) -{ - if ( isDefined( check ) ) - { - return !check; - } -} - -has_spawnflag( spawnflags ) -{ - if ( isDefined( self.spawnflags ) ) - { - return ( self.spawnflags & spawnflags ) == spawnflags; - } - return 0; -} - -clamp( val, val_min, val_max ) -{ - if ( val < val_min ) - { - val = val_min; - } - else - { - if ( val > val_max ) - { - val = val_max; - } - } - return val; -} - -linear_map( num, min_a, max_a, min_b, max_b ) -{ - return clamp( ( ( ( num - min_a ) / ( max_a - min_a ) ) * ( max_b - min_b ) ) + min_b, min_b, max_b ); -} - -lag( desired, curr, k, dt ) -{ - r = 0; - if ( ( k * dt ) >= 1 || k <= 0 ) - { - r = desired; - } - else - { - err = desired - curr; - r = curr + ( k * err * dt ); - } - return r; -} - -death_notify_wrapper( attacker, damagetype ) -{ - level notify( "face" ); - self notify( "death" ); -} - -damage_notify_wrapper( damage, attacker, direction_vec, point, type, modelname, tagname, partname, idflags ) -{ - level notify( "face" ); - self notify( "damage" ); -} - -explode_notify_wrapper() -{ - level notify( "face" ); - self notify( "explode" ); -} - -alert_notify_wrapper() -{ - level notify( "face" ); - self notify( "alert" ); -} - -shoot_notify_wrapper() -{ - level notify( "face" ); - self notify( "shoot" ); -} - -melee_notify_wrapper() -{ - level notify( "face" ); - self notify( "melee" ); -} - -isusabilityenabled() -{ - return !self.disabledusability; -} - -_disableusability() -{ - self.disabledusability++; - self disableusability(); -} - -_enableusability() -{ - self.disabledusability--; - -/# - assert( self.disabledusability >= 0 ); -#/ - if ( !self.disabledusability ) - { - self enableusability(); - } -} - -resetusability() -{ - self.disabledusability = 0; - self enableusability(); -} - -_disableweapon() -{ - if ( !isDefined( self.disabledweapon ) ) - { - self.disabledweapon = 0; - } - self.disabledweapon++; - self disableweapons(); -} - -_enableweapon() -{ - self.disabledweapon--; - -/# - assert( self.disabledweapon >= 0 ); -#/ - if ( !self.disabledweapon ) - { - self enableweapons(); - } -} - -isweaponenabled() -{ - return !self.disabledweapon; -} - -delay_thread( timer, func, param1, param2, param3, param4, param5, param6 ) -{ - self thread _delay_thread_proc( func, timer, param1, param2, param3, param4, param5, param6 ); -} - -_delay_thread_proc( func, timer, param1, param2, param3, param4, param5, param6 ) -{ - self endon( "death" ); - self endon( "disconnect" ); - wait timer; - single_thread( self, func, param1, param2, param3, param4, param5, param6 ); -} - -delay_notify( str_notify, n_delay, str_endon ) -{ -/# - assert( isDefined( str_notify ) ); -#/ -/# - assert( isDefined( n_delay ) ); -#/ - self thread _delay_notify_proc( str_notify, n_delay, str_endon ); -} - -_delay_notify_proc( str_notify, n_delay, str_endon ) -{ - self endon( "death" ); - if ( isDefined( str_endon ) ) - { - self endon( str_endon ); - } - if ( n_delay > 0 ) - { - wait n_delay; - } - self notify( str_notify ); -} - -notify_delay_with_ender( snotifystring, fdelay, ender ) -{ - if ( isDefined( ender ) ) - { - level endon( ender ); - } -/# - assert( isDefined( self ) ); -#/ -/# - assert( isDefined( snotifystring ) ); -#/ -/# - assert( isDefined( fdelay ) ); -#/ - self endon( "death" ); - if ( fdelay > 0 ) - { - wait fdelay; - } - if ( !isDefined( self ) ) - { - return; - } - self notify( snotifystring ); -} diff --git a/Zombie Core/patch_zm/maps/mp/_art.gsc b/Zombie Core/patch_zm/maps/mp/_art.gsc deleted file mode 100644 index 84313fc..0000000 --- a/Zombie Core/patch_zm/maps/mp/_art.gsc +++ /dev/null @@ -1,497 +0,0 @@ -#include maps/mp/_utility; -#include common_scripts/utility; - -main() -{ -/# - if ( getDvar( "scr_art_tweak" ) == "" || getDvar( "scr_art_tweak" ) == "0" ) - { - setdvar( "scr_art_tweak", 0 ); - } - if ( getDvar( "scr_dof_enable" ) == "" ) - { - setdvar( "scr_dof_enable", "1" ); - } - if ( getDvar( "scr_cinematic_autofocus" ) == "" ) - { - setdvar( "scr_cinematic_autofocus", "1" ); - } - if ( getDvar( "scr_art_visionfile" ) == "" && isDefined( level.script ) ) - { - setdvar( "scr_art_visionfile", level.script ); - } - if ( getDvar( "debug_reflection" ) == "" ) - { - setdvar( "debug_reflection", "0" ); - } - if ( getDvar( "debug_reflection_matte" ) == "" ) - { - setdvar( "debug_reflection_matte", "0" ); - } - if ( getDvar( "debug_color_pallete" ) == "" ) - { - setdvar( "debug_color_pallete", "0" ); - } - precachemodel( "test_sphere_lambert" ); - precachemodel( "test_macbeth_chart" ); - precachemodel( "test_macbeth_chart_unlit" ); - precachemodel( "test_sphere_silver" ); - level thread debug_reflection(); - level thread debug_reflection_matte(); - level thread debug_color_pallete(); -#/ - if ( !isDefined( level.dofdefault ) ) - { - level.dofdefault[ "nearStart" ] = 0; - level.dofdefault[ "nearEnd" ] = 1; - level.dofdefault[ "farStart" ] = 8000; - level.dofdefault[ "farEnd" ] = 10000; - level.dofdefault[ "nearBlur" ] = 6; - level.dofdefault[ "farBlur" ] = 0; - } - level.curdof = ( level.dofdefault[ "farStart" ] - level.dofdefault[ "nearEnd" ] ) / 2; -/# - thread tweakart(); -#/ - if ( !isDefined( level.script ) ) - { - level.script = tolower( getDvar( "mapname" ) ); - } -} - -artfxprintln( file, string ) -{ -/# - if ( file == -1 ) - { - return; - } - fprintln( file, string ); -#/ -} - -strtok_loc( string, par1 ) -{ - stringlist = []; - indexstring = ""; - i = 0; - while ( i < string.size ) - { - if ( string[ i ] == " " ) - { - stringlist[ stringlist.size ] = indexstring; - indexstring = ""; - i++; - continue; - } - else - { - indexstring += string[ i ]; - } - i++; - } - if ( indexstring.size ) - { - stringlist[ stringlist.size ] = indexstring; - } - return stringlist; -} - -setfogsliders() -{ - fogall = strtok_loc( getDvar( "g_fogColorReadOnly" ), " " ); - red = fogall[ 0 ]; - green = fogall[ 1 ]; - blue = fogall[ 2 ]; - halfplane = getDvar( "g_fogHalfDistReadOnly" ); - nearplane = getDvar( "g_fogStartDistReadOnly" ); - if ( isDefined( red ) && isDefined( green ) || !isDefined( blue ) && !isDefined( halfplane ) ) - { - red = 1; - green = 1; - blue = 1; - halfplane = 10000001; - nearplane = 10000000; - } - setdvar( "scr_fog_exp_halfplane", halfplane ); - setdvar( "scr_fog_nearplane", nearplane ); - setdvar( "scr_fog_color", ( red + " " ) + green + " " + blue ); -} - -tweakart() -{ -/# - if ( !isDefined( level.tweakfile ) ) - { - level.tweakfile = 0; - } - if ( getDvar( "scr_fog_baseheight" ) == "" ) - { - setdvar( "scr_fog_exp_halfplane", "500" ); - setdvar( "scr_fog_exp_halfheight", "500" ); - setdvar( "scr_fog_nearplane", "0" ); - setdvar( "scr_fog_baseheight", "0" ); - } - setdvar( "scr_fog_fraction", "1.0" ); - setdvar( "scr_art_dump", "0" ); - setdvar( "scr_art_sun_fog_dir_set", "0" ); - setdvar( "scr_dof_nearStart", level.dofdefault[ "nearStart" ] ); - setdvar( "scr_dof_nearEnd", level.dofdefault[ "nearEnd" ] ); - setdvar( "scr_dof_farStart", level.dofdefault[ "farStart" ] ); - setdvar( "scr_dof_farEnd", level.dofdefault[ "farEnd" ] ); - setdvar( "scr_dof_nearBlur", level.dofdefault[ "nearBlur" ] ); - setdvar( "scr_dof_farBlur", level.dofdefault[ "farBlur" ] ); - file = undefined; - filename = undefined; - tweak_toggle = 1; - for ( ;; ) - { - while ( getDvarInt( "scr_art_tweak" ) == 0 ) - { - tweak_toggle = 1; - wait 0,05; - } - if ( tweak_toggle ) - { - tweak_toggle = 0; - fogsettings = getfogsettings(); - setdvar( "scr_fog_nearplane", fogsettings[ 0 ] ); - setdvar( "scr_fog_exp_halfplane", fogsettings[ 1 ] ); - setdvar( "scr_fog_exp_halfheight", fogsettings[ 3 ] ); - setdvar( "scr_fog_baseheight", fogsettings[ 2 ] ); - setdvar( "scr_fog_color", fogsettings[ 4 ] + " " + fogsettings[ 5 ] + " " + fogsettings[ 6 ] ); - setdvar( "scr_fog_color_scale", fogsettings[ 7 ] ); - setdvar( "scr_sun_fog_color", fogsettings[ 8 ] + " " + fogsettings[ 9 ] + " " + fogsettings[ 10 ] ); - level.fogsundir = []; - level.fogsundir[ 0 ] = fogsettings[ 11 ]; - level.fogsundir[ 1 ] = fogsettings[ 12 ]; - level.fogsundir[ 2 ] = fogsettings[ 13 ]; - setdvar( "scr_sun_fog_start_angle", fogsettings[ 14 ] ); - setdvar( "scr_sun_fog_end_angle", fogsettings[ 15 ] ); - setdvar( "scr_fog_max_opacity", fogsettings[ 16 ] ); - } - level.fogexphalfplane = getDvarFloat( "scr_fog_exp_halfplane" ); - level.fogexphalfheight = getDvarFloat( "scr_fog_exp_halfheight" ); - level.fognearplane = getDvarFloat( "scr_fog_nearplane" ); - level.fogbaseheight = getDvarFloat( "scr_fog_baseheight" ); - level.fogcolorred = getDvarColorRed( "scr_fog_color" ); - level.fogcolorgreen = getDvarColorGreen( "scr_fog_color" ); - level.fogcolorblue = getDvarColorBlue( "scr_fog_color" ); - level.fogcolorscale = getDvarFloat( "scr_fog_color_scale" ); - level.sunfogcolorred = getDvarColorRed( "scr_sun_fog_color" ); - level.sunfogcolorgreen = getDvarColorGreen( "scr_sun_fog_color" ); - level.sunfogcolorblue = getDvarColorBlue( "scr_sun_fog_color" ); - level.sunstartangle = getDvarFloat( "scr_sun_fog_start_angle" ); - level.sunendangle = getDvarFloat( "scr_sun_fog_end_angle" ); - level.fogmaxopacity = getDvarFloat( "scr_fog_max_opacity" ); - if ( getDvarInt( "scr_art_sun_fog_dir_set" ) ) - { - setdvar( "scr_art_sun_fog_dir_set", "0" ); - println( "Setting sun fog direction to facing of player" ); - players = get_players(); - dir = vectornormalize( anglesToForward( players[ 0 ] getplayerangles() ) ); - level.fogsundir = []; - level.fogsundir[ 0 ] = dir[ 0 ]; - level.fogsundir[ 1 ] = dir[ 1 ]; - level.fogsundir[ 2 ] = dir[ 2 ]; - } - fovslidercheck(); - dumpsettings(); - if ( !getDvarInt( "scr_fog_disable" ) ) - { - if ( !isDefined( level.fogsundir ) ) - { - level.fogsundir = []; - level.fogsundir[ 0 ] = 1; - level.fogsundir[ 1 ] = 0; - level.fogsundir[ 2 ] = 0; - } - setvolfog( level.fognearplane, level.fogexphalfplane, level.fogexphalfheight, level.fogbaseheight, level.fogcolorred, level.fogcolorgreen, level.fogcolorblue, level.fogcolorscale, level.sunfogcolorred, level.sunfogcolorgreen, level.sunfogcolorblue, level.fogsundir[ 0 ], level.fogsundir[ 1 ], level.fogsundir[ 2 ], level.sunstartangle, level.sunendangle, 0, level.fogmaxopacity ); - } - else - { - setexpfog( 100000000, 100000001, 0, 0, 0, 0 ); - } - wait 0,1; -#/ - } -} - -fovslidercheck() -{ - if ( level.dofdefault[ "nearStart" ] >= level.dofdefault[ "nearEnd" ] ) - { - level.dofdefault[ "nearStart" ] = level.dofdefault[ "nearEnd" ] - 1; - setdvar( "scr_dof_nearStart", level.dofdefault[ "nearStart" ] ); - } - if ( level.dofdefault[ "nearEnd" ] <= level.dofdefault[ "nearStart" ] ) - { - level.dofdefault[ "nearEnd" ] = level.dofdefault[ "nearStart" ] + 1; - setdvar( "scr_dof_nearEnd", level.dofdefault[ "nearEnd" ] ); - } - if ( level.dofdefault[ "farStart" ] >= level.dofdefault[ "farEnd" ] ) - { - level.dofdefault[ "farStart" ] = level.dofdefault[ "farEnd" ] - 1; - setdvar( "scr_dof_farStart", level.dofdefault[ "farStart" ] ); - } - if ( level.dofdefault[ "farEnd" ] <= level.dofdefault[ "farStart" ] ) - { - level.dofdefault[ "farEnd" ] = level.dofdefault[ "farStart" ] + 1; - setdvar( "scr_dof_farEnd", level.dofdefault[ "farEnd" ] ); - } - if ( level.dofdefault[ "farBlur" ] >= level.dofdefault[ "nearBlur" ] ) - { - level.dofdefault[ "farBlur" ] = level.dofdefault[ "nearBlur" ] - 0,1; - setdvar( "scr_dof_farBlur", level.dofdefault[ "farBlur" ] ); - } - if ( level.dofdefault[ "farStart" ] <= level.dofdefault[ "nearEnd" ] ) - { - level.dofdefault[ "farStart" ] = level.dofdefault[ "nearEnd" ] + 1; - setdvar( "scr_dof_farStart", level.dofdefault[ "farStart" ] ); - } -} - -dumpsettings() -{ -/# - if ( getDvar( "scr_art_dump" ) != "0" ) - { - println( "\tstart_dist = " + level.fognearplane + ";" ); - println( "\thalf_dist = " + level.fogexphalfplane + ";" ); - println( "\thalf_height = " + level.fogexphalfheight + ";" ); - println( "\tbase_height = " + level.fogbaseheight + ";" ); - println( "\tfog_r = " + level.fogcolorred + ";" ); - println( "\tfog_g = " + level.fogcolorgreen + ";" ); - println( "\tfog_b = " + level.fogcolorblue + ";" ); - println( "\tfog_scale = " + level.fogcolorscale + ";" ); - println( "\tsun_col_r = " + level.sunfogcolorred + ";" ); - println( "\tsun_col_g = " + level.sunfogcolorgreen + ";" ); - println( "\tsun_col_b = " + level.sunfogcolorblue + ";" ); - println( "\tsun_dir_x = " + level.fogsundir[ 0 ] + ";" ); - println( "\tsun_dir_y = " + level.fogsundir[ 1 ] + ";" ); - println( "\tsun_dir_z = " + level.fogsundir[ 2 ] + ";" ); - println( "\tsun_start_ang = " + level.sunstartangle + ";" ); - println( "\tsun_stop_ang = " + level.sunendangle + ";" ); - println( "\ttime = 0;" ); - println( "\tmax_fog_opacity = " + level.fogmaxopacity + ";" ); - println( "" ); - println( "\tsetVolFog(start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale," ); - println( "\t\tsun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, " ); - println( "\t\tsun_stop_ang, time, max_fog_opacity);" ); - setdvar( "scr_art_dump", "0" ); -#/ - } -} - -debug_reflection() -{ -/# - level.debug_reflection = 0; - while ( 1 ) - { - wait 0,1; - if ( getDvar( "debug_reflection" ) == "2" || level.debug_reflection != 2 && getDvar( "debug_reflection" ) == "3" && level.debug_reflection != 3 ) - { - remove_reflection_objects(); - if ( getDvar( "debug_reflection" ) == "2" ) - { - create_reflection_objects(); - level.debug_reflection = 2; - } - else - { - create_reflection_objects(); - create_reflection_object(); - level.debug_reflection = 3; - } - continue; - } - else - { - if ( getDvar( "debug_reflection" ) == "1" && level.debug_reflection != 1 ) - { - setdvar( "debug_reflection_matte", "0" ); - setdvar( "debug_color_pallete", "0" ); - remove_reflection_objects(); - create_reflection_object(); - level.debug_reflection = 1; - break; - } - else - { - if ( getDvar( "debug_reflection" ) == "0" && level.debug_reflection != 0 ) - { - remove_reflection_objects(); - level.debug_reflection = 0; - } - } - } -#/ - } -} - -remove_reflection_objects() -{ -/# - if ( level.debug_reflection != 2 && level.debug_reflection == 3 && isDefined( level.debug_reflection_objects ) ) - { - i = 0; - while ( i < level.debug_reflection_objects.size ) - { - level.debug_reflection_objects[ i ] delete(); - i++; - } - level.debug_reflection_objects = undefined; - } - if ( level.debug_reflection != 1 && level.debug_reflection != 3 && level.debug_reflection_matte != 1 || level.debug_color_pallete == 1 && level.debug_color_pallete == 2 ) - { - if ( isDefined( level.debug_reflectionobject ) ) - { - level.debug_reflectionobject delete(); -#/ - } - } -} - -create_reflection_objects() -{ -/# - reflection_locs = getreflectionlocs(); - i = 0; - while ( i < reflection_locs.size ) - { - level.debug_reflection_objects[ i ] = spawn( "script_model", reflection_locs[ i ] ); - level.debug_reflection_objects[ i ] setmodel( "test_sphere_silver" ); - i++; -#/ - } -} - -create_reflection_object( model ) -{ - if ( !isDefined( model ) ) - { - model = "test_sphere_silver"; - } -/# - if ( isDefined( level.debug_reflectionobject ) ) - { - level.debug_reflectionobject delete(); - } - players = get_players(); - player = players[ 0 ]; - level.debug_reflectionobject = spawn( "script_model", player geteye() + vectorScale( anglesToForward( player.angles ), 100 ) ); - level.debug_reflectionobject setmodel( model ); - level.debug_reflectionobject.origin = player geteye() + vectorScale( anglesToForward( player getplayerangles() ), 100 ); - level.debug_reflectionobject linkto( player ); - thread debug_reflection_buttons(); -#/ -} - -debug_reflection_buttons() -{ -/# - level notify( "new_reflection_button_running" ); - level endon( "new_reflection_button_running" ); - level.debug_reflectionobject endon( "death" ); - offset = 100; - lastoffset = offset; - while ( getDvar( "debug_reflection" ) != "1" && getDvar( "debug_reflection" ) != "3" && getDvar( "debug_reflection_matte" ) != "1" || getDvar( "debug_color_pallete" ) == "1" && getDvar( "debug_color_pallete" ) == "2" ) - { - players = get_players(); - if ( players[ 0 ] buttonpressed( "BUTTON_X" ) ) - { - offset += 50; - } - if ( players[ 0 ] buttonpressed( "BUTTON_Y" ) ) - { - offset -= 50; - } - if ( offset > 1000 ) - { - offset = 1000; - } - if ( offset < 64 ) - { - offset = 64; - } - level.debug_reflectionobject unlink(); - level.debug_reflectionobject.origin = players[ 0 ] geteye() + vectorScale( anglesToForward( players[ 0 ] getplayerangles() ), offset ); - temp_angles = vectorToAngle( players[ 0 ].origin - level.debug_reflectionobject.origin ); - level.debug_reflectionobject.angles = ( 0, temp_angles[ 1 ], 0 ); - lastoffset = offset; - line( level.debug_reflectionobject.origin, getreflectionorigin( level.debug_reflectionobject.origin ), ( 1, 0, 0 ), 1, 1 ); - wait 0,05; - if ( isDefined( level.debug_reflectionobject ) ) - { - level.debug_reflectionobject linkto( players[ 0 ] ); - } -#/ - } -} - -debug_reflection_matte() -{ -/# - level.debug_reflection_matte = 0; - while ( 1 ) - { - wait 0,1; - if ( getDvar( "debug_reflection_matte" ) == "1" && level.debug_reflection_matte != 1 ) - { - setdvar( "debug_reflection", "0" ); - setdvar( "debug_color_pallete", "0" ); - remove_reflection_objects(); - create_reflection_object( "test_sphere_lambert" ); - level.debug_reflection_matte = 1; - continue; - } - else - { - if ( getDvar( "debug_reflection_matte" ) == "0" && level.debug_reflection_matte != 0 ) - { - remove_reflection_objects(); - level.debug_reflection_matte = 0; - } - } -#/ - } -} - -debug_color_pallete() -{ -/# - level.debug_color_pallete = 0; - while ( 1 ) - { - wait 0,1; - if ( getDvar( "debug_color_pallete" ) == "1" && level.debug_color_pallete != 1 ) - { - setdvar( "debug_reflection", "0" ); - setdvar( "debug_reflection_matte", "0" ); - remove_reflection_objects(); - create_reflection_object( "test_macbeth_chart" ); - level.debug_color_pallete = 1; - continue; - } - else - { - if ( getDvar( "debug_color_pallete" ) == "2" && level.debug_color_pallete != 2 ) - { - remove_reflection_objects(); - create_reflection_object( "test_macbeth_chart_unlit" ); - level.debug_color_pallete = 2; - break; - } - else - { - if ( getDvar( "debug_color_pallete" ) == "0" && level.debug_color_pallete != 0 ) - { - remove_reflection_objects(); - level.debug_color_pallete = 0; - } - } - } -#/ - } -} diff --git a/Zombie Core/patch_zm/maps/mp/_audio.gsc b/Zombie Core/patch_zm/maps/mp/_audio.gsc deleted file mode 100644 index bbfcf66..0000000 --- a/Zombie Core/patch_zm/maps/mp/_audio.gsc +++ /dev/null @@ -1,150 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ -} - -wait_until_first_player() -{ - players = get_players(); - if ( !isDefined( players[ 0 ] ) ) - { - level waittill( "first_player_ready" ); - } - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] thread monitor_player_sprint(); - i++; - } -} - -stand_think( trig ) -{ - killtext = "kill_stand_think" + trig getentitynumber(); - self endon( "disconnect" ); - self endon( "death" ); - self endon( killtext ); - while ( 1 ) - { - if ( self.player_is_moving ) - { - trig playsound( trig.script_label ); - } - wait 1; - } -} - -monitor_player_sprint() -{ - self endon( "disconnect" ); - self thread monitor_player_movement(); - self._is_sprinting = 0; - while ( 1 ) - { - self waittill( "sprint_begin" ); - self._is_sprinting = 1; - self waittill( "sprint_end" ); - self._is_sprinting = 0; - } -} - -monitor_player_movement() -{ - self endon( "disconnect" ); - while ( 1 ) - { - org_1 = self.origin; - wait 1; - org_2 = self.origin; - distancemoved = distancesquared( org_1, org_2 ); - if ( distancemoved > 4096 ) - { - self.player_is_moving = 1; - continue; - } - else - { - self.player_is_moving = 0; - } - } -} - -thread_enter_exit_sound( trig ) -{ - self endon( "death" ); - self endon( "disconnect" ); - trig.touchingplayers[ self getentitynumber() ] = 1; - if ( isDefined( trig.script_sound ) && trig.script_activated && self._is_sprinting ) - { - self playsound( trig.script_sound ); - } - self thread stand_think( trig ); - while ( self istouching( trig ) ) - { - wait 0,1; - } - self notify( "kill_stand_think" + trig getentitynumber() ); - self playsound( trig.script_noteworthy ); - trig.touchingplayers[ self getentitynumber() ] = 0; -} - -thread_step_trigger() -{ - if ( !isDefined( self.script_activated ) ) - { - self.script_activated = 1; - } - while ( !isDefined( self.touchingplayers ) ) - { - self.touchingplayers = []; - i = 0; - while ( i < 4 ) - { - self.touchingplayers[ i ] = 0; - i++; - } - } - while ( 1 ) - { - self waittill( "trigger", who ); - if ( self.touchingplayers[ who getentitynumber() ] == 0 ) - { - who thread thread_enter_exit_sound( self ); - } - } -} - -disable_bump_trigger( triggername ) -{ - triggers = getentarray( "audio_bump_trigger", "targetname" ); - while ( isDefined( triggers ) ) - { - i = 0; - while ( i < triggers.size ) - { - if ( isDefined( triggers[ i ].script_label ) && triggers[ i ].script_label == triggername ) - { - triggers[ i ].script_activated = 0; - } - i++; - } - } -} - -get_player_index_number( player ) -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] == player ) - { - return i; - } - i++; - } - return 1; -} diff --git a/Zombie Core/patch_zm/maps/mp/_ballistic_knife.gsc b/Zombie Core/patch_zm/maps/mp/_ballistic_knife.gsc deleted file mode 100644 index 8b4286c..0000000 --- a/Zombie Core/patch_zm/maps/mp/_ballistic_knife.gsc +++ /dev/null @@ -1,273 +0,0 @@ -#include maps/mp/_challenges; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - precachemodel( "t6_wpn_ballistic_knife_projectile" ); - precachemodel( "t6_wpn_ballistic_knife_blade_retrieve" ); -} - -onspawn( watcher, player ) -{ - player endon( "death" ); - player endon( "disconnect" ); - level endon( "game_ended" ); - self waittill( "stationary", endpos, normal, angles, attacker, prey, bone ); - isfriendly = 0; - if ( isDefined( endpos ) ) - { - retrievable_model = spawn( "script_model", endpos ); - retrievable_model setmodel( "t6_wpn_ballistic_knife_projectile" ); - retrievable_model setteam( player.team ); - retrievable_model setowner( player ); - retrievable_model.owner = player; - retrievable_model.angles = angles; - retrievable_model.name = watcher.weapon; - retrievable_model.targetname = "sticky_weapon"; - if ( isDefined( prey ) ) - { - if ( level.teambased && isplayer( prey ) && player.team == prey.team ) - { - isfriendly = 1; - } - else - { - if ( level.teambased && isai( prey ) && player.team == prey.aiteam ) - { - isfriendly = 1; - } - } - if ( !isfriendly ) - { - if ( isalive( prey ) ) - { - retrievable_model droptoground( retrievable_model.origin, 80 ); - } - else - { - retrievable_model linkto( prey, bone ); - } - } - else - { - if ( isfriendly ) - { - retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) ); - normal = ( 0, 0, 1 ); - } - } - } - watcher.objectarray[ watcher.objectarray.size ] = retrievable_model; - if ( isfriendly ) - { - retrievable_model waittill( "stationary" ); - } - retrievable_model thread dropknivestoground(); - if ( isfriendly ) - { - player notify( "ballistic_knife_stationary" ); - } - else - { - player notify( "ballistic_knife_stationary" ); - } - retrievable_model thread wait_to_show_glowing_model( prey ); - } -} - -wait_to_show_glowing_model( prey ) -{ - level endon( "game_ended" ); - self endon( "death" ); - glowing_retrievable_model = spawn( "script_model", self.origin ); - self.glowing_model = glowing_retrievable_model; - glowing_retrievable_model.angles = self.angles; - glowing_retrievable_model linkto( self ); - if ( isDefined( prey ) && !isalive( prey ) ) - { - wait 2; - } - glowing_retrievable_model setmodel( "t6_wpn_ballistic_knife_blade_retrieve" ); -} - -watch_shutdown() -{ - pickuptrigger = self.pickuptrigger; - glowing_model = self.glowing_model; - self waittill( "death" ); - if ( isDefined( pickuptrigger ) ) - { - pickuptrigger delete(); - } - if ( isDefined( glowing_model ) ) - { - glowing_model delete(); - } -} - -onspawnretrievetrigger( watcher, player ) -{ - player endon( "death" ); - player endon( "disconnect" ); - level endon( "game_ended" ); - player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey ); - if ( !isDefined( retrievable_model ) ) - { - return; - } - vec_scale = 10; - trigger_pos = []; - if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) ) - { - trigger_pos[ 0 ] = prey.origin[ 0 ]; - trigger_pos[ 1 ] = prey.origin[ 1 ]; - trigger_pos[ 2 ] = prey.origin[ 2 ] + vec_scale; - } - else - { - trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( vec_scale * normal[ 0 ] ); - trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( vec_scale * normal[ 1 ] ); - trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( vec_scale * normal[ 2 ] ); - } - trigger_pos[ 2 ] -= 50; - pickup_trigger = spawn( "trigger_radius", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ), 0, 50, 100 ); - pickup_trigger.owner = player; - retrievable_model.pickuptrigger = pickup_trigger; - pickup_trigger enablelinkto(); - if ( isDefined( prey ) ) - { - pickup_trigger linkto( prey ); - } - else - { - pickup_trigger linkto( retrievable_model ); - } - retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.pickupsoundplayer, watcher.pickupsound ); - retrievable_model thread watch_shutdown(); -} - -watch_use_trigger( trigger, model, callback, playersoundonuse, npcsoundonuse ) -{ - self endon( "death" ); - self endon( "delete" ); - level endon( "game_ended" ); - max_ammo = weaponmaxammo( "knife_ballistic_mp" ) + 1; - while ( 1 ) - { - trigger waittill( "trigger", player ); - while ( !isalive( player ) ) - { - continue; - } - while ( !player isonground() ) - { - continue; - } - if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam ) - { - continue; - } - if ( isDefined( trigger.claimedby ) && player != trigger.claimedby ) - { - continue; - } - while ( !player hasweapon( "knife_ballistic_mp" ) ) - { - continue; - } - ammo_stock = player getweaponammostock( "knife_ballistic_mp" ); - ammo_clip = player getweaponammoclip( "knife_ballistic_mp" ); - current_weapon = player getcurrentweapon(); - total_ammo = ammo_stock + ammo_clip; - hasreloaded = 1; - if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == "knife_ballistic_mp" ) - { - hasreloaded = 0; - } - if ( total_ammo >= max_ammo || !hasreloaded ) - { - continue; - } - if ( isDefined( playersoundonuse ) ) - { - player playlocalsound( playersoundonuse ); - } - if ( isDefined( npcsoundonuse ) ) - { - player playsound( npcsoundonuse ); - } - self thread [[ callback ]]( player ); - return; - } -} - -pick_up( player ) -{ - self destroy_ent(); - current_weapon = player getcurrentweapon(); - player maps/mp/_challenges::pickedupballisticknife(); - if ( current_weapon != "knife_ballistic_mp" ) - { - clip_ammo = player getweaponammoclip( "knife_ballistic_mp" ); - if ( !clip_ammo ) - { - player setweaponammoclip( "knife_ballistic_mp", 1 ); - } - else - { - new_ammo_stock = player getweaponammostock( "knife_ballistic_mp" ) + 1; - player setweaponammostock( "knife_ballistic_mp", new_ammo_stock ); - } - } - else - { - new_ammo_stock = player getweaponammostock( "knife_ballistic_mp" ) + 1; - player setweaponammostock( "knife_ballistic_mp", new_ammo_stock ); - } -} - -destroy_ent() -{ - if ( isDefined( self ) ) - { - pickuptrigger = self.pickuptrigger; - if ( isDefined( pickuptrigger ) ) - { - pickuptrigger delete(); - } - if ( isDefined( self.glowing_model ) ) - { - self.glowing_model delete(); - } - self delete(); - } -} - -dropknivestoground() -{ - self endon( "death" ); - for ( ;; ) - { - level waittill( "drop_objects_to_ground", origin, radius ); - self droptoground( origin, radius ); - } -} - -droptoground( origin, radius ) -{ - if ( distancesquared( origin, self.origin ) < ( radius * radius ) ) - { - self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) ); - self thread updateretrievetrigger(); - } -} - -updateretrievetrigger() -{ - self endon( "death" ); - self waittill( "stationary" ); - trigger = self.pickuptrigger; - trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 ); - trigger linkto( self ); -} diff --git a/Zombie Core/patch_zm/maps/mp/_bb.gsc b/Zombie Core/patch_zm/maps/mp/_bb.gsc deleted file mode 100644 index d24054b..0000000 --- a/Zombie Core/patch_zm/maps/mp/_bb.gsc +++ /dev/null @@ -1,87 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - level thread onplayerconnect(); -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connected", player ); - player thread onplayerspawned(); - player thread onplayerdeath(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - self._bbdata = []; - for ( ;; ) - { - self waittill( "spawned_player" ); - self._bbdata[ "score" ] = 0; - self._bbdata[ "momentum" ] = 0; - self._bbdata[ "spawntime" ] = getTime(); - self._bbdata[ "shots" ] = 0; - self._bbdata[ "hits" ] = 0; - } -} - -onplayerdisconnect() -{ - for ( ;; ) - { - self waittill( "disconnect" ); - self commitspawndata(); - return; - } -} - -onplayerdeath() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "death" ); - self commitspawndata(); - } -} - -commitspawndata() -{ -/# - assert( isDefined( self._bbdata ) ); -#/ - if ( !isDefined( self._bbdata ) ) - { - return; - } - bbprint( "mpplayerlives", "gametime %d spawnid %d lifescore %d lifemomentum %d lifetime %d name %s", getTime(), getplayerspawnid( self ), self._bbdata[ "score" ], self._bbdata[ "momentum" ], getTime() - self._bbdata[ "spawntime" ], self.name ); -} - -commitweapondata( spawnid, currentweapon, time0 ) -{ -/# - assert( isDefined( self._bbdata ) ); -#/ - if ( !isDefined( self._bbdata ) ) - { - return; - } - time1 = getTime(); - bbprint( "mpweapons", "spawnid %d name %s duration %d shots %d hits %d", spawnid, currentweapon, time1 - time0, self._bbdata[ "shots" ], self._bbdata[ "hits" ] ); - self._bbdata[ "shots" ] = 0; - self._bbdata[ "hits" ] = 0; -} - -bbaddtostat( statname, delta ) -{ - if ( isDefined( self._bbdata ) && isDefined( self._bbdata[ statname ] ) ) - { - self._bbdata[ statname ] += delta; - } -} diff --git a/Zombie Core/patch_zm/maps/mp/_busing.gsc b/Zombie Core/patch_zm/maps/mp/_busing.gsc deleted file mode 100644 index 75250e7..0000000 --- a/Zombie Core/patch_zm/maps/mp/_busing.gsc +++ /dev/null @@ -1,19 +0,0 @@ -#include maps/mp/_utility; - -businit() -{ -/# - assert( level.clientscripts ); -#/ - level.busstate = ""; - registerclientsys( "busCmd" ); -} - -setbusstate( state ) -{ - if ( level.busstate != state ) - { - setclientsysstate( "busCmd", state ); - } - level.busstate = state; -} diff --git a/Zombie Core/patch_zm/maps/mp/_challenges.gsc b/Zombie Core/patch_zm/maps/mp/_challenges.gsc deleted file mode 100644 index 7a2c03a..0000000 --- a/Zombie Core/patch_zm/maps/mp/_challenges.gsc +++ /dev/null @@ -1,2117 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - if ( !isDefined( level.challengescallbacks ) ) - { - level.challengescallbacks = []; - } - waittillframeend; - if ( canprocesschallenges() ) - { - registerchallengescallback( "playerKilled", ::challengekills ); - registerchallengescallback( "gameEnd", ::challengegameend ); - registerchallengescallback( "roundEnd", ::challengeroundend ); - } - level thread onplayerconnect(); - _a24 = level.teams; - _k24 = getFirstArrayKey( _a24 ); - while ( isDefined( _k24 ) ) - { - team = _a24[ _k24 ]; - initteamchallenges( team ); - _k24 = getNextArrayKey( _a24, _k24 ); - } -} - -addflyswatterstat( weapon, aircraft ) -{ - if ( !isDefined( self.pers[ "flyswattercount" ] ) ) - { - self.pers[ "flyswattercount" ] = 0; - } - self addweaponstat( weapon, "destroyed_aircraft", 1 ); - self.pers[ "flyswattercount" ]++; - if ( self.pers[ "flyswattercount" ] == 5 ) - { - self addweaponstat( weapon, "destroyed_5_aircraft", 1 ); - } - if ( isDefined( aircraft ) && isDefined( aircraft.birthtime ) ) - { - if ( ( getTime() - aircraft.birthtime ) < 20000 ) - { - self addweaponstat( weapon, "destroyed_aircraft_under20s", 1 ); - } - } - if ( !isDefined( self.destroyedaircrafttime ) ) - { - self.destroyedaircrafttime = []; - } - if ( isDefined( self.destroyedaircrafttime[ weapon ] ) && ( getTime() - self.destroyedaircrafttime[ weapon ] ) < 10000 ) - { - self addweaponstat( weapon, "destroyed_2aircraft_quickly", 1 ); - } - else - { - self.destroyedaircrafttime[ weapon ] = getTime(); - } -} - -canprocesschallenges() -{ -/# - if ( getdvarintdefault( "scr_debug_challenges", 0 ) ) - { - return 1; -#/ - } - if ( level.rankedmatch || level.wagermatch ) - { - return 1; - } - return 0; -} - -initteamchallenges( team ) -{ - if ( !isDefined( game[ "challenge" ] ) ) - { - game[ "challenge" ] = []; - } - if ( !isDefined( game[ "challenge" ][ team ] ) ) - { - game[ "challenge" ][ team ] = []; - game[ "challenge" ][ team ][ "plantedBomb" ] = 0; - game[ "challenge" ][ team ][ "destroyedBombSite" ] = 0; - game[ "challenge" ][ team ][ "capturedFlag" ] = 0; - } - game[ "challenge" ][ team ][ "allAlive" ] = 1; -} - -registerchallengescallback( callback, func ) -{ - if ( !isDefined( level.challengescallbacks[ callback ] ) ) - { - level.challengescallbacks[ callback ] = []; - } - level.challengescallbacks[ callback ][ level.challengescallbacks[ callback ].size ] = func; -} - -dochallengecallback( callback, data ) -{ - if ( !isDefined( level.challengescallbacks ) ) - { - return; - } - if ( !isDefined( level.challengescallbacks[ callback ] ) ) - { - return; - } - if ( isDefined( data ) ) - { - i = 0; - while ( i < level.challengescallbacks[ callback ].size ) - { - thread [[ level.challengescallbacks[ callback ][ i ] ]]( data ); - i++; - } - } - else i = 0; - while ( i < level.challengescallbacks[ callback ].size ) - { - thread [[ level.challengescallbacks[ callback ][ i ] ]](); - i++; - } -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connected", player ); - player thread initchallengedata(); - player thread spawnwatcher(); - player thread monitorreloads(); - } -} - -monitorreloads() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "reload" ); - currentweapon = self getcurrentweapon(); - while ( currentweapon == "none" ) - { - continue; - } - time = getTime(); - self.lastreloadtime = time; - if ( currentweapon == "crossbow_mp" ) - { - self.crossbowclipkillcount = 0; - } - if ( weaponhasattachment( currentweapon, "dualclip" ) ) - { - self thread reloadthenkill( currentweapon ); - } - } -} - -reloadthenkill( reloadweapon ) -{ - self endon( "disconnect" ); - self endon( "death" ); - self endon( "reloadThenKillTimedOut" ); - self notify( "reloadThenKillStart" ); - self endon( "reloadThenKillStart" ); - self thread reloadthenkilltimeout( 5 ); - for ( ;; ) - { - self waittill( "killed_enemy_player", time, weapon ); - if ( reloadweapon == weapon ) - { - self addplayerstat( "reload_then_kill_dualclip", 1 ); - } - } -} - -reloadthenkilltimeout( time ) -{ - self endon( "disconnect" ); - self endon( "death" ); - self endon( "reloadThenKillStart" ); - wait time; - self notify( "reloadThenKillTimedOut" ); -} - -initchallengedata() -{ - self.pers[ "bulletStreak" ] = 0; - self.pers[ "lastBulletKillTime" ] = 0; - self.pers[ "stickExplosiveKill" ] = 0; - self.pers[ "carepackagesCalled" ] = 0; - self.explosiveinfo = []; -} - -isdamagefromplayercontrolledaitank( eattacker, einflictor, sweapon ) -{ - if ( sweapon == "ai_tank_drone_gun_mp" ) - { - if ( isDefined( eattacker ) && isDefined( eattacker.remoteweapon ) && isDefined( einflictor ) ) - { - if ( isDefined( einflictor.controlled ) && einflictor.controlled == 1 ) - { - if ( eattacker.remoteweapon == einflictor ) - { - return 1; - } - } - } - } - else - { - if ( sweapon == "ai_tank_drone_rocket_mp" ) - { - if ( isDefined( einflictor ) && !isDefined( einflictor.from_ai ) ) - { - return 1; - } - } - } - return 0; -} - -isdamagefromplayercontrolledsentry( eattacker, einflictor, sweapon ) -{ - if ( sweapon == "auto_gun_turret_mp" ) - { - if ( isDefined( eattacker ) && isDefined( eattacker.remoteweapon ) && isDefined( einflictor ) ) - { - if ( eattacker.remoteweapon == einflictor ) - { - if ( isDefined( einflictor.controlled ) && einflictor.controlled == 1 ) - { - return 1; - } - } - } - } - return 0; -} - -challengekills( data, time ) -{ - victim = data.victim; - player = data.attacker; - attacker = data.attacker; - time = data.time; - victim = data.victim; - weapon = data.sweapon; - time = data.time; - inflictor = data.einflictor; - meansofdeath = data.smeansofdeath; - wasplanting = data.wasplanting; - wasdefusing = data.wasdefusing; - lastweaponbeforetoss = data.lastweaponbeforetoss; - ownerweaponatlaunch = data.ownerweaponatlaunch; - if ( !isDefined( data.sweapon ) ) - { - return; - } - if ( !isDefined( player ) || !isplayer( player ) ) - { - return; - } - weaponclass = getweaponclass( weapon ); - game[ "challenge" ][ victim.team ][ "allAlive" ] = 0; - if ( level.teambased ) - { - if ( player.team == victim.team ) - { - return; - } - } - else - { - if ( player == victim ) - { - return; - } - } - if ( isdamagefromplayercontrolledaitank( player, inflictor, weapon ) == 1 ) - { - player addplayerstat( "kill_with_remote_control_ai_tank", 1 ); - } - if ( weapon == "auto_gun_turret_mp" ) - { - if ( isDefined( inflictor ) ) - { - if ( !isDefined( inflictor.killcount ) ) - { - inflictor.killcount = 0; - } - inflictor.killcount++; - if ( inflictor.killcount >= 5 ) - { - inflictor.killcount = 0; - player addplayerstat( "killstreak_5_with_sentry_gun", 1 ); - } - } - if ( isdamagefromplayercontrolledsentry( player, inflictor, weapon ) == 1 ) - { - player addplayerstat( "kill_with_remote_control_sentry_gun", 1 ); - } - } - if ( weapon == "minigun_mp" || weapon == "inventory_minigun_mp" ) - { - player.deathmachinekills++; - if ( player.deathmachinekills >= 5 ) - { - player.deathmachinekills = 0; - player addplayerstat( "killstreak_5_with_death_machine", 1 ); - } - } - if ( data.waslockingon == 1 && weapon == "chopper_minigun_mp" ) - { - player addplayerstat( "kill_enemy_locking_on_with_chopper_gunner", 1 ); - } - if ( isDefined( level.iskillstreakweapon ) ) - { - if ( [[ level.iskillstreakweapon ]]( data.sweapon ) ) - { - return; - } - } - attacker notify( "killed_enemy_player" ); - if ( isDefined( player.primaryloadoutweapon ) || weapon == player.primaryloadoutweapon && isDefined( player.primaryloadoutaltweapon ) && weapon == player.primaryloadoutaltweapon ) - { - if ( player isbonuscardactive( 0, player.class_num ) ) - { - player addbonuscardstat( 0, "kills", 1, player.class_num ); - player addplayerstat( "kill_with_loadout_weapon_with_3_attachments", 1 ); - } - if ( isDefined( player.secondaryweaponkill ) && player.secondaryweaponkill == 1 ) - { - player.primaryweaponkill = 0; - player.secondaryweaponkill = 0; - if ( player isbonuscardactive( 2, player.class_num ) ) - { - player addbonuscardstat( 2, "kills", 1, player.class_num ); - player addplayerstat( "kill_with_both_primary_weapons", 1 ); - } - } - else - { - player.primaryweaponkill = 1; - } - } - else - { - if ( isDefined( player.secondaryloadoutweapon ) || weapon == player.secondaryloadoutweapon && isDefined( player.secondaryloadoutaltweapon ) && weapon == player.secondaryloadoutaltweapon ) - { - if ( player isbonuscardactive( 1, player.class_num ) ) - { - player addbonuscardstat( 1, "kills", 1, player.class_num ); - } - if ( isDefined( player.primaryweaponkill ) && player.primaryweaponkill == 1 ) - { - player.primaryweaponkill = 0; - player.secondaryweaponkill = 0; - if ( player isbonuscardactive( 2, player.class_num ) ) - { - player addbonuscardstat( 2, "kills", 1, player.class_num ); - player addplayerstat( "kill_with_both_primary_weapons", 1 ); - } - } - else - { - player.secondaryweaponkill = 1; - } - } - } - if ( !player isbonuscardactive( 5, player.class_num ) || player isbonuscardactive( 4, player.class_num ) && player isbonuscardactive( 3, player.class_num ) ) - { - player addplayerstat( "kill_with_2_perks_same_category", 1 ); - } - baseweaponname = getreffromitemindex( getbaseweaponitemindex( weapon ) ) + "_mp"; - if ( isDefined( player.weaponkills[ baseweaponname ] ) ) - { - player.weaponkills[ baseweaponname ]++; - if ( player.weaponkills[ baseweaponname ] == 5 ) - { - player addweaponstat( baseweaponname, "killstreak_5", 1 ); - } - if ( player.weaponkills[ baseweaponname ] == 10 ) - { - player addweaponstat( baseweaponname, "killstreak_10", 1 ); - } - } - else - { - player.weaponkills[ baseweaponname ] = 1; - } - attachmentname = player getweaponoptic( weapon ); - if ( isDefined( attachmentname ) && attachmentname != "" ) - { - if ( isDefined( player.attachmentkills[ attachmentname ] ) ) - { - player.attachmentkills[ attachmentname ]++; - if ( player.attachmentkills[ attachmentname ] == 5 ) - { - player addweaponstat( weapon, "killstreak_5_attachment", 1 ); - } - } - else - { - player.attachmentkills[ attachmentname ] = 1; - } - } -/# - assert( isDefined( player.activecounteruavs ) ); -#/ -/# - assert( isDefined( player.activeuavs ) ); -#/ -/# - assert( isDefined( player.activesatellites ) ); -#/ - if ( player.activeuavs > 0 ) - { - player addplayerstat( "kill_while_uav_active", 1 ); - } - if ( player.activecounteruavs > 0 ) - { - player addplayerstat( "kill_while_cuav_active", 1 ); - } - if ( player.activesatellites > 0 ) - { - player addplayerstat( "kill_while_satellite_active", 1 ); - } - if ( isDefined( attacker.tacticalinsertiontime ) && ( attacker.tacticalinsertiontime + 5000 ) > time ) - { - player addplayerstat( "kill_after_tac_insert", 1 ); - player addweaponstat( "tactical_insertion_mp", "CombatRecordStat", 1 ); - } - if ( isDefined( victim.tacticalinsertiontime ) && ( victim.tacticalinsertiontime + 5000 ) > time ) - { - player addweaponstat( "tactical_insertion_mp", "headshots", 1 ); - } - if ( isDefined( level.isplayertrackedfunc ) ) - { - if ( attacker [[ level.isplayertrackedfunc ]]( victim, time ) ) - { - attacker addplayerstat( "kill_enemy_revealed_by_sensor", 1 ); - attacker addweaponstat( "sensor_grenade_mp", "CombatRecordStat", 1 ); - } - } - if ( level.teambased ) - { - activeempowner = level.empowners[ player.team ]; - if ( isDefined( activeempowner ) ) - { - if ( activeempowner == player ) - { - player addplayerstat( "kill_while_emp_active", 1 ); - } - } - } - else - { - if ( isDefined( level.empplayer ) ) - { - if ( level.empplayer == player ) - { - player addplayerstat( "kill_while_emp_active", 1 ); - } - } - } - if ( isDefined( player.flakjacketclaymore[ victim.clientid ] ) && player.flakjacketclaymore[ victim.clientid ] == 1 ) - { - player addplayerstat( "survive_claymore_kill_planter_flak_jacket_equipped", 1 ); - } - if ( isDefined( player.dogsactive ) ) - { - if ( weapon != "dog_bite_mp" ) - { - player.dogsactivekillstreak++; - if ( player.dogsactivekillstreak > 5 ) - { - player addplayerstat( "killstreak_5_dogs", 1 ); - } - } - } - isstunned = 0; - if ( victim maps/mp/_utility::isflashbanged() ) - { - if ( isDefined( victim.lastflashedby ) && victim.lastflashedby == player ) - { - player addplayerstat( "kill_flashed_enemy", 1 ); - player addweaponstat( "flash_grenade_mp", "CombatRecordStat", 1 ); - } - isstunned = 1; - } - if ( isDefined( victim.concussionendtime ) && victim.concussionendtime > getTime() ) - { - if ( isDefined( victim.lastconcussedby ) && victim.lastconcussedby == player ) - { - player addplayerstat( "kill_concussed_enemy", 1 ); - player addweaponstat( "concussion_grenade_mp", "CombatRecordStat", 1 ); - } - isstunned = 1; - } - if ( isDefined( player.laststunnedby ) ) - { - if ( player.laststunnedby == victim && ( player.laststunnedtime + 5000 ) > time ) - { - player addplayerstat( "kill_enemy_who_shocked_you", 1 ); - } - } - if ( isDefined( victim.laststunnedby ) && ( victim.laststunnedtime + 5000 ) > time ) - { - isstunned = 1; - if ( victim.laststunnedby == player ) - { - player addplayerstat( "kill_shocked_enemy", 1 ); - player addweaponstat( "proximity_grenade_mp", "CombatRecordStat", 1 ); - if ( data.smeansofdeath == "MOD_MELEE" ) - { - player addplayerstat( "shock_enemy_then_stab_them", 1 ); - } - } - } - if ( ( player.mantletime + 5000 ) > time ) - { - player addplayerstat( "mantle_then_kill", 1 ); - } - if ( isDefined( player.tookweaponfrom ) && isDefined( player.tookweaponfrom[ weapon ] ) && isDefined( player.tookweaponfrom[ weapon ].previousowner ) ) - { - if ( level.teambased ) - { - if ( player.tookweaponfrom[ weapon ].previousowner.team != player.team ) - { - player.pickedupweaponkills[ weapon ]++; - player addplayerstat( "kill_enemy_with_picked_up_weapon", 1 ); - } - } - else - { - player.pickedupweaponkills[ weapon ]++; - player addplayerstat( "kill_enemy_with_picked_up_weapon", 1 ); - } - if ( player.pickedupweaponkills[ weapon ] >= 5 ) - { - player.pickedupweaponkills[ weapon ] = 0; - player addplayerstat( "killstreak_5_picked_up_weapon", 1 ); - } - } - if ( isDefined( victim.explosiveinfo[ "originalOwnerKill" ] ) && victim.explosiveinfo[ "originalOwnerKill" ] == 1 ) - { - if ( victim.explosiveinfo[ "damageExplosiveKill" ] == 1 ) - { - player addplayerstat( "kill_enemy_shoot_their_explosive", 1 ); - } - } - if ( data.attackerstance == "crouch" ) - { - player addplayerstat( "kill_enemy_while_crouched", 1 ); - } - else - { - if ( data.attackerstance == "prone" ) - { - player addplayerstat( "kill_enemy_while_prone", 1 ); - } - } - if ( data.victimstance == "prone" ) - { - player addplayerstat( "kill_prone_enemy", 1 ); - } - if ( data.smeansofdeath != "MOD_HEAD_SHOT" || data.smeansofdeath == "MOD_PISTOL_BULLET" && data.smeansofdeath == "MOD_RIFLE_BULLET" ) - { - player genericbulletkill( data, victim, weapon ); - } - if ( level.teambased ) - { - if ( !isDefined( player.pers[ "kill_every_enemy" ] ) && level.playercount[ victim.pers[ "team" ] ] > 3 && player.pers[ "killed_players" ].size >= level.playercount[ victim.pers[ "team" ] ] ) - { - player addplayerstat( "kill_every_enemy", 1 ); - player.pers[ "kill_every_enemy" ] = 1; - } - } - switch( weaponclass ) - { - case "weapon_pistol": - if ( data.smeansofdeath == "MOD_HEAD_SHOT" ) - { - player.pers[ "pistolHeadshot" ]++; - if ( player.pers[ "pistolHeadshot" ] >= 10 ) - { - player.pers[ "pistolHeadshot" ] = 0; - player addplayerstat( "pistolHeadshot_10_onegame", 1 ); - } - } - break; - case "weapon_assault": - if ( data.smeansofdeath == "MOD_HEAD_SHOT" ) - { - player.pers[ "assaultRifleHeadshot" ]++; - if ( player.pers[ "assaultRifleHeadshot" ] >= 5 ) - { - player.pers[ "assaultRifleHeadshot" ] = 0; - player addplayerstat( "headshot_assault_5_onegame", 1 ); - } - } - break; - case "weapon_lmg": - case "weapon_smg": - case "weapon_sniper": - if ( isDefined( victim.firsttimedamaged ) && victim.firsttimedamaged == time ) - { - player addplayerstat( "kill_enemy_one_bullet_sniper", 1 ); - player addweaponstat( weapon, "kill_enemy_one_bullet_sniper", 1 ); - if ( !isDefined( player.pers[ "one_shot_sniper_kills" ] ) ) - { - player.pers[ "one_shot_sniper_kills" ] = 0; - } - player.pers[ "one_shot_sniper_kills" ]++; - if ( player.pers[ "one_shot_sniper_kills" ] == 10 ) - { - player addplayerstat( "kill_10_enemy_one_bullet_sniper_onegame", 1 ); - } - } - break; - case "weapon_cqb": - if ( isDefined( victim.firsttimedamaged ) && victim.firsttimedamaged == time ) - { - player addplayerstat( "kill_enemy_one_bullet_shotgun", 1 ); - player addweaponstat( weapon, "kill_enemy_one_bullet_shotgun", 1 ); - if ( !isDefined( player.pers[ "one_shot_shotgun_kills" ] ) ) - { - player.pers[ "one_shot_shotgun_kills" ] = 0; - } - player.pers[ "one_shot_shotgun_kills" ]++; - if ( player.pers[ "one_shot_shotgun_kills" ] == 10 ) - { - player addplayerstat( "kill_10_enemy_one_bullet_shotgun_onegame", 1 ); - } - } - break; - } - if ( data.smeansofdeath == "MOD_MELEE" ) - { - if ( weaponhasattachment( weapon, "tacknife" ) ) - { - player addplayerstat( "kill_enemy_with_tacknife", 1 ); - player bladekill(); - } - else if ( weapon == "knife_ballistic_mp" ) - { - player bladekill(); - player addweaponstat( weapon, "ballistic_knife_melee", 1 ); - } - else if ( weapon == "knife_held_mp" || weapon == "knife_mp" ) - { - player bladekill(); - } - else - { - if ( weapon == "riotshield_mp" ) - { - if ( ( victim.lastfiretime + 3000 ) > time ) - { - player addweaponstat( weapon, "shield_melee_while_enemy_shooting", 1 ); - } - } - } - } - else - { - if ( data.smeansofdeath == "MOD_IMPACT" && baseweaponname == "crossbow_mp" ) - { - if ( weaponhasattachment( weapon, "stackfire" ) ) - { - player addplayerstat( "KILL_CROSSBOW_STACKFIRE", 1 ); - } - } - else - { - if ( isDefined( ownerweaponatlaunch ) ) - { - if ( weaponhasattachment( ownerweaponatlaunch, "stackfire" ) ) - { - player addplayerstat( "KILL_CROSSBOW_STACKFIRE", 1 ); - } - } - } - if ( weapon == "knife_ballistic_mp" ) - { - player bladekill(); - if ( isDefined( player.retreivedblades ) && player.retreivedblades > 0 ) - { - player.retreivedblades--; - - player addweaponstat( weapon, "kill_retrieved_blade", 1 ); - } - } - } - lethalgrenadekill = 0; - switch( weapon ) - { - case "bouncingbetty_mp": - lethalgrenadekill = 1; - player notify( "lethalGrenadeKill" ); - break; - case "hatchet_mp": - player bladekill(); - lethalgrenadekill = 1; - player notify( "lethalGrenadeKill" ); - if ( isDefined( lastweaponbeforetoss ) ) - { - if ( lastweaponbeforetoss == level.riotshield_name ) - { - player addweaponstat( level.riotshield_name, "hatchet_kill_with_shield_equiped", 1 ); - player addplayerstat( "hatchet_kill_with_shield_equiped", 1 ); - } - } - break; - case "claymore_mp": - lethalgrenadekill = 1; - player notify( "lethalGrenadeKill" ); - player addplayerstat( "kill_with_claymore", 1 ); - if ( data.washacked ) - { - player addplayerstat( "kill_with_hacked_claymore", 1 ); - } - break; - case "satchel_charge_mp": - lethalgrenadekill = 1; - player notify( "lethalGrenadeKill" ); - player addplayerstat( "kill_with_c4", 1 ); - break; - case "destructible_car_mp": - player addplayerstat( "kill_enemy_withcar", 1 ); - if ( isDefined( inflictor.destroyingweapon ) ) - { - player addweaponstat( inflictor.destroyingweapon, "kills_from_cars", 1 ); - } - break; - case "sticky_grenade_mp": - lethalgrenadekill = 1; - player notify( "lethalGrenadeKill" ); - if ( isDefined( victim.explosiveinfo[ "stuckToPlayer" ] ) && victim.explosiveinfo[ "stuckToPlayer" ] == victim ) - { - attacker.pers[ "stickExplosiveKill" ]++; - if ( attacker.pers[ "stickExplosiveKill" ] >= 5 ) - { - attacker.pers[ "stickExplosiveKill" ] = 0; - player addplayerstat( "stick_explosive_kill_5_onegame", 1 ); - } - } - break; - case "frag_grenade_mp": - lethalgrenadekill = 1; - player notify( "lethalGrenadeKill" ); - if ( isDefined( data.victim.explosiveinfo[ "cookedKill" ] ) && data.victim.explosiveinfo[ "cookedKill" ] == 1 ) - { - player addplayerstat( "kill_with_cooked_grenade", 1 ); - } - if ( isDefined( data.victim.explosiveinfo[ "throwbackKill" ] ) && data.victim.explosiveinfo[ "throwbackKill" ] == 1 ) - { - player addplayerstat( "kill_with_tossed_back_lethal", 1 ); - } - break; - case "crossbow_mp": - case "explosive_bolt_mp": - if ( !isDefined( player.crossbowclipkillcount ) ) - { - player.crossbowclipkillcount = 0; - } - player.crossbowclipkillcount++; - if ( player.crossbowclipkillcount >= weaponclipsize( "crossbow_mp" ) ) - { - player.crossbowclipkillcount = 0; - player addweaponstat( "crossbow_mp", "crossbow_kill_clip", 1 ); - } - break; - } - if ( lethalgrenadekill ) - { - if ( player isbonuscardactive( 6, player.class_num ) ) - { - player addbonuscardstat( 6, "kills", 1, player.class_num ); - if ( !isDefined( player.pers[ "dangerCloseKills" ] ) ) - { - player.pers[ "dangerCloseKills" ] = 0; - } - player.pers[ "dangerCloseKills" ]++; - if ( player.pers[ "dangerCloseKills" ] == 5 ) - { - player addplayerstat( "kill_with_dual_lethal_grenades", 1 ); - } - } - } - player perkkills( victim, isstunned, time ); - } -} - -perkkills( victim, isstunned, time ) -{ - player = self; - if ( player hasperk( "specialty_movefaster" ) ) - { - player addplayerstat( "perk_movefaster_kills", 1 ); - } - if ( player hasperk( "specialty_noname" ) ) - { - player addplayerstat( "perk_noname_kills", 1 ); - } - if ( player hasperk( "specialty_quieter" ) ) - { - player addplayerstat( "perk_quieter_kills", 1 ); - } - if ( player hasperk( "specialty_longersprint" ) ) - { - if ( isDefined( player.lastsprinttime ) && ( getTime() - player.lastsprinttime ) < 2500 ) - { - player addplayerstat( "perk_longersprint", 1 ); - } - } - if ( player hasperk( "specialty_fastmantle" ) ) - { - if ( isDefined( player.lastsprinttime ) && ( getTime() - player.lastsprinttime ) < 2500 && player playerads() >= 1 ) - { - player addplayerstat( "perk_fastmantle_kills", 1 ); - } - } - if ( player hasperk( "specialty_loudenemies" ) ) - { - player addplayerstat( "perk_loudenemies_kills", 1 ); - } - if ( isstunned == 1 && player hasperk( "specialty_stunprotection" ) ) - { - player addplayerstat( "perk_protection_stun_kills", 1 ); - } -/# - assert( isDefined( victim.activecounteruavs ) ); -#/ - activeemp = 0; - if ( level.teambased ) - { - _a905 = level.teams; - _k905 = getFirstArrayKey( _a905 ); - while ( isDefined( _k905 ) ) - { - team = _a905[ _k905 ]; - if ( team == player.team ) - { - } - else - { - if ( isDefined( level.empowners[ team ] ) ) - { - activeemp = 1; - break; - } - } - else - { - _k905 = getNextArrayKey( _a905, _k905 ); - } - } - } - else if ( isDefined( level.empplayer ) ) - { - if ( level.empplayer != player ) - { - activeemp = 1; - } - } - activecuav = 0; - if ( level.teambased ) - { - _a932 = level.teams; - _k932 = getFirstArrayKey( _a932 ); - while ( isDefined( _k932 ) ) - { - team = _a932[ _k932 ]; - if ( team == player.team ) - { - } - else - { - if ( level.activecounteruavs[ team ] > 0 ) - { - activecuav = 1; - break; - } - } - else - { - _k932 = getNextArrayKey( _a932, _k932 ); - } - } - } - else players = level.players; - i = 0; - while ( i < players.size ) - { - if ( players[ i ] != player ) - { - if ( isDefined( level.activecounteruavs[ players[ i ].entnum ] ) && level.activecounteruavs[ players[ i ].entnum ] > 0 ) - { - activecuav = 1; - break; - } - } - else - { - i++; - } - } - if ( activecuav == 1 || activeemp == 1 ) - { - if ( player hasperk( "specialty_immunecounteruav" ) ) - { - player addplayerstat( "perk_immune_cuav_kills", 1 ); - } - } - activeuavvictim = 0; - if ( level.teambased ) - { - if ( level.activeuavs[ victim.team ] > 0 ) - { - activeuavvictim = 1; - } - } - else - { - if ( isDefined( level.activeuavs[ victim.entnum ] ) ) - { - activeuavvictim = level.activeuavs[ victim.entnum ] > 0; - } - } - if ( activeuavvictim == 1 ) - { - if ( player hasperk( "specialty_gpsjammer" ) ) - { - player addplayerstat( "perk_gpsjammer_immune_kills", 1 ); - } - } - if ( ( player.lastweaponchange + 5000 ) > time ) - { - if ( player hasperk( "specialty_fastweaponswitch" ) ) - { - player addplayerstat( "perk_fastweaponswitch_kill_after_swap", 1 ); - } - } - if ( player.scavenged == 1 ) - { - if ( player hasperk( "specialty_scavenger" ) ) - { - player addplayerstat( "perk_scavenger_kills_after_resupply", 1 ); - } - } -} - -flakjacketprotected( weapon, attacker ) -{ - if ( weapon == "claymore_mp" ) - { - self.flakjacketclaymore[ attacker.clientid ] = 1; - } - self addplayerstat( "perk_flak_survive", 1 ); -} - -earnedkillstreak() -{ - if ( self hasperk( "specialty_earnmoremomentum" ) ) - { - self addplayerstat( "perk_earnmoremomentum_earn_streak", 1 ); - } -} - -genericbulletkill( data, victim, weapon ) -{ - player = self; - time = data.time; - if ( player.pers[ "lastBulletKillTime" ] == time ) - { - player.pers[ "bulletStreak" ]++; - } - else - { - player.pers[ "bulletStreak" ] = 1; - } - player.pers[ "lastBulletKillTime" ] = time; - if ( data.victim.idflagstime == time ) - { - if ( data.victim.idflags & level.idflags_penetration ) - { - player addplayerstat( "kill_enemy_through_wall", 1 ); - if ( isDefined( weapon ) && weaponhasattachment( weapon, "fmj" ) ) - { - player addplayerstat( "kill_enemy_through_wall_with_fmj", 1 ); - } - } - } -} - -ishighestscoringplayer( player ) -{ - if ( !isDefined( player.score ) || player.score < 1 ) - { - return 0; - } - players = level.players; - if ( level.teambased ) - { - team = player.pers[ "team" ]; - } - else - { - team = "all"; - } - highscore = player.score; - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ].score ) ) - { - i++; - continue; - } - else if ( players[ i ] == player ) - { - i++; - continue; - } - else if ( players[ i ].score < 1 ) - { - i++; - continue; - } - else if ( team != "all" && players[ i ].pers[ "team" ] != team ) - { - i++; - continue; - } - else - { - if ( players[ i ].score >= highscore ) - { - return 0; - } - } - i++; - } - return 1; -} - -spawnwatcher() -{ - self endon( "disconnect" ); - self.pers[ "stickExplosiveKill" ] = 0; - self.pers[ "pistolHeadshot" ] = 0; - self.pers[ "assaultRifleHeadshot" ] = 0; - self.pers[ "killNemesis" ] = 0; - while ( 1 ) - { - self waittill( "spawned_player" ); - self.pers[ "longshotsPerLife" ] = 0; - self.flakjacketclaymore = []; - self.weaponkills = []; - self.attachmentkills = []; - self.retreivedblades = 0; - self.lastreloadtime = 0; - self.crossbowclipkillcount = 0; - self thread watchfordtp(); - self thread watchformantle(); - self thread monitor_player_sprint(); - } -} - -pickedupballisticknife() -{ - self.retreivedblades++; -} - -watchfordtp() -{ - self endon( "disconnect" ); - self endon( "death" ); - self.dtptime = 0; - while ( 1 ) - { - self waittill( "dtp_end" ); - self.dtptime = getTime() + 4000; - } -} - -watchformantle() -{ - self endon( "disconnect" ); - self endon( "death" ); - self.mantletime = 0; - while ( 1 ) - { - self waittill( "mantle_start", mantleendtime ); - self.mantletime = mantleendtime; - } -} - -disarmedhackedcarepackage() -{ - self addplayerstat( "disarm_hacked_carepackage", 1 ); -} - -destroyed_car() -{ - if ( !isDefined( self ) || !isplayer( self ) ) - { - return; - } - self addplayerstat( "destroy_car", 1 ); -} - -killednemesis() -{ - self.pers[ "killNemesis" ]++; - if ( self.pers[ "killNemesis" ] >= 5 ) - { - self.pers[ "killNemesis" ] = 0; - self addplayerstat( "kill_nemesis", 1 ); - } -} - -killwhiledamagingwithhpm() -{ - self addplayerstat( "kill_while_damaging_with_microwave_turret", 1 ); -} - -longdistancehatchetkill() -{ - self addplayerstat( "long_distance_hatchet_kill", 1 ); -} - -blockedsatellite() -{ - self addplayerstat( "activate_cuav_while_enemy_satelite_active", 1 ); -} - -longdistancekill() -{ - self.pers[ "longshotsPerLife" ]++; - if ( self.pers[ "longshotsPerLife" ] >= 3 ) - { - self.pers[ "longshotsPerLife" ] = 0; - self addplayerstat( "longshot_3_onelife", 1 ); - } -} - -challengeroundend( data ) -{ - player = data.player; - winner = data.winner; - if ( endedearly( winner ) ) - { - return; - } - if ( level.teambased ) - { - winnerscore = game[ "teamScores" ][ winner ]; - loserscore = getlosersteamscores( winner ); - } - switch( level.gametype ) - { - case "sd": - if ( player.team == winner ) - { - if ( game[ "challenge" ][ winner ][ "allAlive" ] ) - { - player addgametypestat( "round_win_no_deaths", 1 ); - } - if ( isDefined( player.lastmansddefeat3enemies ) ) - { - player addgametypestat( "last_man_defeat_3_enemies", 1 ); - } - } - break; - default: - } - } -} - -roundend( winner ) -{ - wait 0,05; - data = spawnstruct(); - data.time = getTime(); - if ( level.teambased ) - { - if ( isDefined( winner ) && isDefined( level.teams[ winner ] ) ) - { - data.winner = winner; - } - } - else - { - if ( isDefined( winner ) ) - { - data.winner = winner; - } - } - index = 0; - while ( index < level.placement[ "all" ].size ) - { - data.player = level.placement[ "all" ][ index ]; - data.place = index; - dochallengecallback( "roundEnd", data ); - index++; - } -} - -gameend( winner ) -{ - wait 0,05; - data = spawnstruct(); - data.time = getTime(); - if ( level.teambased ) - { - if ( isDefined( winner ) && isDefined( level.teams[ winner ] ) ) - { - data.winner = winner; - } - } - else - { - if ( isDefined( winner ) && isplayer( winner ) ) - { - data.winner = winner; - } - } - index = 0; - while ( index < level.placement[ "all" ].size ) - { - data.player = level.placement[ "all" ][ index ]; - data.place = index; - dochallengecallback( "gameEnd", data ); - index++; - } -} - -getfinalkill( player ) -{ - if ( isplayer( player ) ) - { - player addplayerstat( "get_final_kill", 1 ); - } -} - -destroyrcbomb( weaponname ) -{ - self destroyscorestreak( weaponname ); - if ( weaponname == "hatchet_mp" ) - { - self addplayerstat( "destroy_rcbomb_with_hatchet", 1 ); - } -} - -capturedcrate() -{ - if ( isDefined( self.lastrescuedby ) && isDefined( self.lastrescuedtime ) ) - { - if ( ( self.lastrescuedtime + 5000 ) > getTime() ) - { - self.lastrescuedby addplayerstat( "defend_teammate_who_captured_package", 1 ); - } - } -} - -destroyscorestreak( weaponname ) -{ - if ( isDefined( weaponname ) && weaponname == "qrdrone_turret_mp" ) - { - self addplayerstat( "destroy_score_streak_with_qrdrone", 1 ); - } -} - -capturedobjective( capturetime ) -{ - if ( isDefined( self.smokegrenadetime ) && isDefined( self.smokegrenadeposition ) ) - { - if ( ( self.smokegrenadetime + 14000 ) > capturetime ) - { - distsq = distancesquared( self.smokegrenadeposition, self.origin ); - if ( distsq < 57600 ) - { - self addplayerstat( "capture_objective_in_smoke", 1 ); - self addweaponstat( "willy_pete_mp", "CombatRecordStat", 1 ); - return; - } - } - } -} - -hackedordestroyedequipment() -{ - if ( self hasperk( "specialty_showenemyequipment" ) ) - { - self addplayerstat( "perk_hacker_destroy", 1 ); - } -} - -destroyedequipment( weaponname ) -{ - if ( isDefined( weaponname ) && weaponname == "emp_grenade_mp" ) - { - self addplayerstat( "destroy_equipment_with_emp_grenade", 1 ); - self addweaponstat( "emp_grenade_mp", "combatRecordStat", 1 ); - } - self addplayerstat( "destroy_equipment", 1 ); - self hackedordestroyedequipment(); -} - -destroyedtacticalinsert() -{ - if ( !isDefined( self.pers[ "tacticalInsertsDestroyed" ] ) ) - { - self.pers[ "tacticalInsertsDestroyed" ] = 0; - } - self.pers[ "tacticalInsertsDestroyed" ]++; - if ( self.pers[ "tacticalInsertsDestroyed" ] >= 5 ) - { - self.pers[ "tacticalInsertsDestroyed" ] = 0; - self addplayerstat( "destroy_5_tactical_inserts", 1 ); - } -} - -bladekill() -{ - if ( !isDefined( self.pers[ "bladeKills" ] ) ) - { - self.pers[ "bladeKills" ] = 0; - } - self.pers[ "bladeKills" ]++; - if ( self.pers[ "bladeKills" ] >= 15 ) - { - self.pers[ "bladeKills" ] = 0; - self addplayerstat( "kill_15_with_blade", 1 ); - } -} - -destroyedexplosive( weaponname ) -{ - self destroyedequipment( weaponname ); - self addplayerstat( "destroy_explosive", 1 ); -} - -assisted() -{ - self addplayerstat( "assist", 1 ); -} - -earnedmicrowaveassistscore( score ) -{ - self addplayerstat( "assist_score_microwave_turret", score ); - self addplayerstat( "assist_score_killstreak", score ); -} - -earnedcuavassistscore( score ) -{ - self addplayerstat( "assist_score_cuav", score ); - self addplayerstat( "assist_score_killstreak", score ); - self addweaponstat( "counteruav_mp", "assists", 1 ); -} - -earneduavassistscore( score ) -{ - self addplayerstat( "assist_score_uav", score ); - self addplayerstat( "assist_score_killstreak", score ); - self addweaponstat( "radar_mp", "assists", 1 ); -} - -earnedsatelliteassistscore( score ) -{ - self addplayerstat( "assist_score_satellite", score ); - self addplayerstat( "assist_score_killstreak", score ); - self addweaponstat( "radardirection_mp", "assists", 1 ); -} - -earnedempassistscore( score ) -{ - self addplayerstat( "assist_score_emp", score ); - self addplayerstat( "assist_score_killstreak", score ); - self addweaponstat( "emp_mp", "assists", 1 ); -} - -teamcompletedchallenge( team, challenge ) -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( isDefined( players[ i ].team ) && players[ i ].team == team ) - { - players[ i ] addgametypestat( challenge, 1 ); - } - i++; - } -} - -endedearly( winner ) -{ - if ( level.hostforcedend ) - { - return 1; - } - if ( !isDefined( winner ) ) - { - return 1; - } - if ( level.teambased ) - { - if ( winner == "tie" ) - { - return 1; - } - } - return 0; -} - -getlosersteamscores( winner ) -{ - teamscores = 0; - _a1474 = level.teams; - _k1474 = getFirstArrayKey( _a1474 ); - while ( isDefined( _k1474 ) ) - { - team = _a1474[ _k1474 ]; - if ( team == winner ) - { - } - else - { - teamscores += game[ "teamScores" ][ team ]; - } - _k1474 = getNextArrayKey( _a1474, _k1474 ); - } - return teamscores; -} - -didloserfailchallenge( winner, challenge ) -{ - _a1487 = level.teams; - _k1487 = getFirstArrayKey( _a1487 ); - while ( isDefined( _k1487 ) ) - { - team = _a1487[ _k1487 ]; - if ( team == winner ) - { - } - else - { - if ( game[ "challenge" ][ team ][ challenge ] ) - { - return 0; - } - } - _k1487 = getNextArrayKey( _a1487, _k1487 ); - } - return 1; -} - -challengegameend( data ) -{ - player = data.player; - winner = data.winner; - if ( isDefined( level.scoreeventgameendcallback ) ) - { - [[ level.scoreeventgameendcallback ]]( data ); - } - if ( endedearly( winner ) ) - { - return; - } - if ( level.teambased ) - { - winnerscore = game[ "teamScores" ][ winner ]; - loserscore = getlosersteamscores( winner ); - } - switch( level.gametype ) - { - case "tdm": - if ( player.team == winner ) - { - if ( winnerscore >= ( loserscore + 20 ) ) - { - player addgametypestat( "CRUSH", 1 ); - } - } - mostkillsleastdeaths = 1; - index = 0; - while ( index < level.placement[ "all" ].size ) - { - if ( level.placement[ "all" ][ index ].deaths < player.deaths ) - { - mostkillsleastdeaths = 0; - } - if ( level.placement[ "all" ][ index ].kills > player.kills ) - { - mostkillsleastdeaths = 0; - } - index++; - } - if ( mostkillsleastdeaths && player.kills > 0 && level.placement[ "all" ].size > 3 ) - { - player addgametypestat( "most_kills_least_deaths", 1 ); - } - break; - case "dm": - if ( player == winner ) - { - if ( level.placement[ "all" ].size >= 2 ) - { - secondplace = level.placement[ "all" ][ 1 ]; - if ( player.kills >= ( secondplace.kills + 7 ) ) - { - player addgametypestat( "CRUSH", 1 ); - } - } - } - break; - case "ctf": - if ( player.team == winner ) - { - if ( loserscore == 0 ) - { - player addgametypestat( "SHUT_OUT", 1 ); - } - } - break; - case "dom": - if ( player.team == winner ) - { - if ( winnerscore >= ( loserscore + 70 ) ) - { - player addgametypestat( "CRUSH", 1 ); - } - } - break; - case "hq": - if ( player.team == winner && winnerscore > 0 ) - { - if ( winnerscore >= ( loserscore + 70 ) ) - { - player addgametypestat( "CRUSH", 1 ); - } - } - break; - case "koth": - if ( player.team == winner && winnerscore > 0 ) - { - if ( winnerscore >= ( loserscore + 70 ) ) - { - player addgametypestat( "CRUSH", 1 ); - } - } - if ( player.team == winner && winnerscore > 0 ) - { - if ( winnerscore >= ( loserscore + 110 ) ) - { - player addgametypestat( "ANNIHILATION", 1 ); - } - } - break; - case "dem": - if ( player.team == game[ "defenders" ] && player.team == winner ) - { - if ( loserscore == 0 ) - { - player addgametypestat( "SHUT_OUT", 1 ); - } - } - break; - case "sd": - if ( player.team == winner ) - { - if ( loserscore <= 1 ) - { - player addgametypestat( "CRUSH", 1 ); - } - } - default: - break; - } - } -} - -multikill( killcount, weapon ) -{ - if ( killcount >= 3 && isDefined( self.lastkillwheninjured ) ) - { - if ( ( self.lastkillwheninjured + 5000 ) > getTime() ) - { - self addplayerstat( "multikill_3_near_death", 1 ); - } - } -} - -domattackermultikill( killcount ) -{ - self addgametypestat( "kill_2_enemies_capturing_your_objective", 1 ); -} - -totaldomination( team ) -{ - teamcompletedchallenge( team, "control_3_points_3_minutes" ); -} - -holdflagentirematch( team, label ) -{ - switch( label ) - { - case "_a": - event = "hold_a_entire_match"; - break; - case "_b": - event = "hold_b_entire_match"; - break; - case "_c": - event = "hold_c_entire_match"; - break; - default: - return; - } - teamcompletedchallenge( team, event ); -} - -capturedbfirstminute() -{ - self addgametypestat( "capture_b_first_minute", 1 ); -} - -controlzoneentirely( team ) -{ - teamcompletedchallenge( team, "control_zone_entirely" ); -} - -multi_lmg_smg_kill() -{ - self addplayerstat( "multikill_3_lmg_or_smg_hip_fire", 1 ); -} - -killedzoneattacker( weapon ) -{ - if ( weapon != "planemortar_mp" || weapon == "remote_missile_missile_mp" && weapon == "remote_missile_bomblet_mp" ) - { - self thread updatezonemultikills(); - } -} - -killeddog() -{ - origin = self.origin; - while ( level.teambased ) - { - teammates = get_team_alive_players_s( self.team ); - _a1714 = teammates.a; - _k1714 = getFirstArrayKey( _a1714 ); - while ( isDefined( _k1714 ) ) - { - player = _a1714[ _k1714 ]; - if ( player == self ) - { - } - else - { - distsq = distancesquared( origin, player.origin ); - if ( distsq < 57600 ) - { - self addplayerstat( "killed_dog_close_to_teammate", 1 ); - return; - } - } - else - { - _k1714 = getNextArrayKey( _a1714, _k1714 ); - } - } - } -} - -updatezonemultikills() -{ - self endon( "disconnect" ); - level endon( "game_ended" ); - self notify( "updateRecentZoneKills" ); - self endon( "updateRecentZoneKills" ); - if ( !isDefined( self.recentzonekillcount ) ) - { - self.recentzonekillcount = 0; - } - self.recentzonekillcount++; - wait 4; - if ( self.recentzonekillcount > 1 ) - { - self addplayerstat( "multikill_2_zone_attackers", 1 ); - } - self.recentzonekillcount = 0; -} - -multi_rcbomb_kill() -{ - self addplayerstat( "muiltikill_2_with_rcbomb", 1 ); -} - -multi_remotemissile_kill() -{ - self addplayerstat( "multikill_3_remote_missile", 1 ); -} - -multi_mgl_kill() -{ - self addplayerstat( "multikill_3_with_mgl", 1 ); -} - -immediatecapture() -{ - self addgametypestat( "immediate_capture", 1 ); -} - -killedlastcontester() -{ - self addgametypestat( "contest_then_capture", 1 ); -} - -bothbombsdetonatewithintime() -{ - self addgametypestat( "both_bombs_detonate_10_seconds", 1 ); -} - -fullclipnomisses( weaponclass, weapon ) -{ -} - -destroyedturret( weaponname ) -{ - self destroyscorestreak( weaponname ); - self addplayerstat( "destroy_turret", 1 ); -} - -calledincarepackage() -{ - self.pers[ "carepackagesCalled" ]++; - if ( self.pers[ "carepackagesCalled" ] >= 3 ) - { - self addplayerstat( "call_in_3_care_packages", 1 ); - self.pers[ "carepackagesCalled" ] = 0; - } -} - -destroyedhelicopter( attacker, weapon, damagetype, playercontrolled ) -{ - attacker destroyscorestreak( weapon ); - if ( damagetype == "MOD_RIFLE_BULLET" || damagetype == "MOD_PISTOL_BULLET" ) - { - attacker addplayerstat( "destroyed_helicopter_with_bullet", 1 ); - } -} - -destroyedqrdrone( damagetype, weapon ) -{ - self destroyscorestreak( weapon ); - self addplayerstat( "destroy_qrdrone", 1 ); - if ( damagetype == "MOD_RIFLE_BULLET" || damagetype == "MOD_PISTOL_BULLET" ) - { - self addplayerstat( "destroyed_qrdrone_with_bullet", 1 ); - } - self destroyedplayercontrolledaircraft(); -} - -destroyedplayercontrolledaircraft() -{ - if ( self hasperk( "specialty_noname" ) ) - { - self addplayerstat( "destroy_helicopter", 1 ); - } -} - -destroyedaircraft( attacker, weapon ) -{ - attacker destroyscorestreak( weapon ); - if ( isDefined( weapon ) ) - { - if ( weapon == "emp_mp" || weapon == "killstreak_emp_mp" ) - { - attacker addplayerstat( "destroy_aircraft_with_emp", 1 ); - } - else - { - if ( weapon == "missile_drone_projectile_mp" || weapon == "missile_drone_mp" ) - { - attacker addplayerstat( "destroy_aircraft_with_missile_drone", 1 ); - } - } - } - if ( attacker hasperk( "specialty_nottargetedbyairsupport" ) ) - { - attacker addplayerstat( "perk_nottargetedbyairsupport_destroy_aircraft", 1 ); - } - attacker addplayerstat( "destroy_aircraft", 1 ); -} - -killstreakten() -{ - primary = self getloadoutitem( self.class_num, "primary" ); - if ( primary != 0 ) - { - return; - } - secondary = self getloadoutitem( self.class_num, "secondary" ); - if ( secondary != 0 ) - { - return; - } - primarygrenade = self getloadoutitem( self.class_num, "primarygrenade" ); - if ( primarygrenade != 0 ) - { - return; - } - specialgrenade = self getloadoutitem( self.class_num, "specialgrenade" ); - if ( specialgrenade != 0 ) - { - return; - } - numspecialties = 0; - while ( numspecialties < level.maxspecialties ) - { - perk = self getloadoutitem( self.class_num, "specialty" + ( numspecialties + 1 ) ); - if ( perk != 0 ) - { - return; - } - numspecialties++; - } - self addplayerstat( "killstreak_10_no_weapons_perks", 1 ); -} - -scavengedgrenade() -{ - self endon( "disconnect" ); - self endon( "death" ); - self notify( "scavengedGrenade" ); - self endon( "scavengedGrenade" ); - for ( ;; ) - { - self waittill( "lethalGrenadeKill" ); - self addplayerstat( "kill_with_resupplied_lethal_grenade", 1 ); - } -} - -stunnedtankwithempgrenade( attacker ) -{ - attacker addplayerstat( "stun_aitank_wIth_emp_grenade", 1 ); -} - -playerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, shitloc, attackerstance ) -{ -/# - print( level.gametype ); -#/ - self.anglesondeath = self getplayerangles(); - if ( isDefined( attacker ) ) - { - attacker.anglesonkill = attacker getplayerangles(); - } - if ( !isDefined( sweapon ) ) - { - sweapon = "none"; - } - self endon( "disconnect" ); - data = spawnstruct(); - data.victim = self; - data.victimstance = self getstance(); - data.einflictor = einflictor; - data.attacker = attacker; - data.attackerstance = attackerstance; - data.idamage = idamage; - data.smeansofdeath = smeansofdeath; - data.sweapon = sweapon; - data.shitloc = shitloc; - data.time = getTime(); - if ( isDefined( einflictor ) && isDefined( einflictor.lastweaponbeforetoss ) ) - { - data.lastweaponbeforetoss = einflictor.lastweaponbeforetoss; - } - if ( isDefined( einflictor ) && isDefined( einflictor.ownerweaponatlaunch ) ) - { - data.ownerweaponatlaunch = einflictor.ownerweaponatlaunch; - } - waslockingon = 0; - if ( isDefined( einflictor.locking_on ) ) - { - waslockingon |= einflictor.locking_on; - } - if ( isDefined( einflictor.locked_on ) ) - { - waslockingon |= einflictor.locked_on; - } - waslockingon &= 1 << data.victim.entnum; - if ( waslockingon != 0 ) - { - data.waslockingon = 1; - } - else - { - data.waslockingon = 0; - } - data.washacked = einflictor maps/mp/_utility::ishacked(); - data.wasplanting = data.victim.isplanting; - if ( !isDefined( data.wasplanting ) ) - { - data.wasplanting = 0; - } - data.wasdefusing = data.victim.isdefusing; - if ( !isDefined( data.wasdefusing ) ) - { - data.wasdefusing = 0; - } - data.victimweapon = data.victim.currentweapon; - data.victimonground = data.victim isonground(); - if ( isplayer( attacker ) ) - { - data.attackeronground = data.attacker isonground(); - if ( !isDefined( data.attackerstance ) ) - { - data.attackerstance = data.attacker getstance(); - } - } - else - { - data.attackeronground = 0; - data.attackerstance = "stand"; - } - waitandprocessplayerkilledcallback( data ); - data.attacker notify( "playerKilledChallengesProcessed" ); -} - -waittillslowprocessallowed() -{ - while ( level.lastslowprocessframe == getTime() ) - { - wait 0,05; - } - level.lastslowprocessframe = getTime(); -} - -doscoreeventcallback( callback, data ) -{ - if ( !isDefined( level.scoreeventcallbacks ) ) - { - return; - } - if ( !isDefined( level.scoreeventcallbacks[ callback ] ) ) - { - return; - } - if ( isDefined( data ) ) - { - i = 0; - while ( i < level.scoreeventcallbacks[ callback ].size ) - { - thread [[ level.scoreeventcallbacks[ callback ][ i ] ]]( data ); - i++; - } - } - else i = 0; - while ( i < level.scoreeventcallbacks[ callback ].size ) - { - thread [[ level.scoreeventcallbacks[ callback ][ i ] ]](); - i++; - } -} - -waitandprocessplayerkilledcallback( data ) -{ - if ( isDefined( data.attacker ) ) - { - data.attacker endon( "disconnect" ); - } - wait 0,05; - waittillslowprocessallowed(); - level thread dochallengecallback( "playerKilled", data ); - level thread doscoreeventcallback( "playerKilled", data ); -} - -weaponisknife( weapon ) -{ - if ( weapon != "knife_held_mp" || weapon == "knife_mp" && weapon == "knife_ballistic_mp" ) - { - return 1; - } - return 0; -} - -eventreceived( eventname ) -{ - self endon( "disconnect" ); - waittillslowprocessallowed(); - switch( level.gametype ) - { - case "tdm": - if ( eventname == "killstreak_10" ) - { - self addgametypestat( "killstreak_10", 1 ); - } - else if ( eventname == "killstreak_15" ) - { - self addgametypestat( "killstreak_15", 1 ); - } - else if ( eventname == "killstreak_20" ) - { - self addgametypestat( "killstreak_20", 1 ); - } - else if ( eventname == "multikill_3" ) - { - self addgametypestat( "multikill_3", 1 ); - } - else if ( eventname == "kill_enemy_who_killed_teammate" ) - { - self addgametypestat( "kill_enemy_who_killed_teammate", 1 ); - } - else - { - if ( eventname == "kill_enemy_injuring_teammate" ) - { - self addgametypestat( "kill_enemy_injuring_teammate", 1 ); - } - } - break; - case "dm": - if ( eventname == "killstreak_10" ) - { - self addgametypestat( "killstreak_10", 1 ); - } - else if ( eventname == "killstreak_15" ) - { - self addgametypestat( "killstreak_15", 1 ); - } - else if ( eventname == "killstreak_20" ) - { - self addgametypestat( "killstreak_20", 1 ); - } - else - { - if ( eventname == "killstreak_30" ) - { - self addgametypestat( "killstreak_30", 1 ); - } - } - break; - case "sd": - if ( eventname == "defused_bomb_last_man_alive" ) - { - self addgametypestat( "defused_bomb_last_man_alive", 1 ); - } - else if ( eventname == "elimination_and_last_player_alive" ) - { - self addgametypestat( "elimination_and_last_player_alive", 1 ); - } - else if ( eventname == "killed_bomb_planter" ) - { - self addgametypestat( "killed_bomb_planter", 1 ); - } - else - { - if ( eventname == "killed_bomb_defuser" ) - { - self addgametypestat( "killed_bomb_defuser", 1 ); - } - } - break; - case "ctf": - if ( eventname == "kill_flag_carrier" ) - { - self addgametypestat( "kill_flag_carrier", 1 ); - } - else - { - if ( eventname == "defend_flag_carrier" ) - { - self addgametypestat( "defend_flag_carrier", 1 ); - } - } - break; - case "dem": - if ( eventname == "killed_bomb_planter" ) - { - self addgametypestat( "killed_bomb_planter", 1 ); - } - else - { - if ( eventname == "killed_bomb_defuser" ) - { - self addgametypestat( "killed_bomb_defuser", 1 ); - } - } - break; - default: - } - } -} - -monitor_player_sprint() -{ - self endon( "disconnect" ); - self endon( "death" ); - self.lastsprinttime = undefined; - while ( 1 ) - { - self waittill( "sprint_begin" ); - self waittill( "sprint_end" ); - self.lastsprinttime = getTime(); - } -} diff --git a/Zombie Core/patch_zm/maps/mp/_compass.gsc b/Zombie Core/patch_zm/maps/mp/_compass.gsc deleted file mode 100644 index 4b074d8..0000000 --- a/Zombie Core/patch_zm/maps/mp/_compass.gsc +++ /dev/null @@ -1,67 +0,0 @@ - -setupminimap( material ) -{ - requiredmapaspectratio = getDvarFloat( "scr_RequiredMapAspectratio" ); - corners = getentarray( "minimap_corner", "targetname" ); - if ( corners.size != 2 ) - { -/# - println( "^1Error: There are not exactly two "minimap_corner" entities in the map. Could not set up minimap." ); -#/ - return; - } - corner0 = ( corners[ 0 ].origin[ 0 ], corners[ 0 ].origin[ 1 ], 0 ); - corner1 = ( corners[ 1 ].origin[ 0 ], corners[ 1 ].origin[ 1 ], 0 ); - cornerdiff = corner1 - corner0; - north = ( cos( getnorthyaw() ), sin( getnorthyaw() ), 0 ); - west = ( 0 - north[ 1 ], north[ 0 ], 0 ); - if ( vectordot( cornerdiff, west ) > 0 ) - { - if ( vectordot( cornerdiff, north ) > 0 ) - { - northwest = corner1; - southeast = corner0; - } - else - { - side = vecscale( north, vectordot( cornerdiff, north ) ); - northwest = corner1 - side; - southeast = corner0 + side; - } - } - else if ( vectordot( cornerdiff, north ) > 0 ) - { - side = vecscale( north, vectordot( cornerdiff, north ) ); - northwest = corner0 + side; - southeast = corner1 - side; - } - else - { - northwest = corner0; - southeast = corner1; - } - if ( requiredmapaspectratio > 0 ) - { - northportion = vectordot( northwest - southeast, north ); - westportion = vectordot( northwest - southeast, west ); - mapaspectratio = westportion / northportion; - if ( mapaspectratio < requiredmapaspectratio ) - { - incr = requiredmapaspectratio / mapaspectratio; - addvec = vecscale( west, westportion * ( incr - 1 ) * 0,5 ); - } - else - { - incr = mapaspectratio / requiredmapaspectratio; - addvec = vecscale( north, northportion * ( incr - 1 ) * 0,5 ); - } - northwest += addvec; - southeast -= addvec; - } - setminimap( material, northwest[ 0 ], northwest[ 1 ], southeast[ 0 ], southeast[ 1 ] ); -} - -vecscale( vec, scalar ) -{ - return ( vec[ 0 ] * scalar, vec[ 1 ] * scalar, vec[ 2 ] * scalar ); -} diff --git a/Zombie Core/patch_zm/maps/mp/_createfx.gsc b/Zombie Core/patch_zm/maps/mp/_createfx.gsc deleted file mode 100644 index 8d142f8..0000000 --- a/Zombie Core/patch_zm/maps/mp/_createfx.gsc +++ /dev/null @@ -1,3273 +0,0 @@ -#include maps/mp/_script_gen; -#include maps/mp/_fx; -#include maps/mp/_createfxundo; -#include maps/mp/_createfxmenu; -#include maps/mp/_utility; -#include common_scripts/utility; - -createfx() -{ -/# - println( "^2Running CreateFX 2.0" ); -#/ - if ( ismp() ) - { - init_mp_paths(); - level.timelimitoverride = 1; - } - else - { - init_sp_paths(); - } - precachemodel( "fx_axis_createfx" ); - precacheshader( "black" ); - if ( getDvar( "createfx_scaleid" ) == "" ) - { - setdvar( "createfx_scaleid", "0.5" ); - } - if ( getDvar( "createfx_print_frames" ) == "" ) - { - setdvar( "createfx_print_frames", "3" ); - } - if ( getDvar( "createfx_drawaxis" ) == "" ) - { - setdvar( "createfx_drawaxis", "1" ); - } - if ( getDvar( "createfx_drawaxis_range" ) == "" ) - { - setdvar( "createfx_drawaxis_range", "2000" ); - } - if ( getDvar( "createfx_autosave_time" ) == "" ) - { - setdvar( "createfx_autosave_time", "300" ); - } - if ( getDvar( "createfx_oneshot_min_delay" ) == "" ) - { - setdvar( "createfx_oneshot_min_delay", "-100" ); - } - if ( getDvar( "createfx_oneshot_max_delay" ) == "" ) - { - setdvar( "createfx_oneshot_max_delay", "-15" ); - } - flag_init( "createfx_saving" ); - if ( !isDefined( level.createfx ) ) - { - level.createfx = []; - } - if ( !isDefined( level.cfx_uniqueid ) ) - { - level.cfx_uniqueid = 0; - } - level.cfx_last_action = "none"; - if ( !ismp() ) - { - level thread [[ level.cfx_func_run_gump_func ]](); - } - if ( isDefined( level.createfx_callback_thread ) ) - { - level thread [[ level.createfx_callback_thread ]](); - } - if ( ismp() ) - { - level.callbackplayerdisconnect = ::empty; - level.callbackplayerdamage = ::damage_void; - level.callbackplayerkilled = ::empty; - level.callbackplayerconnect = ::callback_playerconnect; - while ( !isDefined( level.player ) ) - { - wait 0,05; - } - thread createfxdelay(); - } - level.is_camera_on = 0; - thread createfxlogic(); - level waittill( "eternity" ); -} - -fx_init() -{ - if ( ismp() ) - { - init_client_mp_variables(); - } - else - { - init_client_sp_variables(); - } - level.exploderfunction = level.cfx_exploder_before; - waittillframeend; - waittillframeend; - level.exploderfunction = level.cfx_exploder_after; - level.non_fx_ents = 0; - if ( level.createfx_enabled ) - { - triggers = getentarray( "trigger_multiple", "classname" ); - i = 0; - while ( i < triggers.size ) - { - triggers[ i ] delete(); - i++; - } - triggers = getentarray( "trigger_once", "classname" ); - i = 0; - while ( i < triggers.size ) - { - triggers[ i ] delete(); - i++; - } - triggers = getentarray( "trigger_box", "classname" ); - i = 0; - while ( i < triggers.size ) - { - triggers[ i ] delete(); - i++; - } - triggers = getentarray( "trigger_radius", "classname" ); - i = 0; - while ( i < triggers.size ) - { - triggers[ i ] delete(); - i++; - } - triggers = getentarray( "trigger_lookat", "classname" ); - i = 0; - while ( i < triggers.size ) - { - triggers[ i ] delete(); - i++; - } - triggers = getentarray( "trigger_damage", "classname" ); - i = 0; - while ( i < triggers.size ) - { - triggers[ i ] delete(); - i++; - } - sm = getentarray( "spawn_manager", "classname" ); - i = 0; - while ( i < sm.size ) - { - sm[ i ] delete(); - i++; - } - delete_spawns(); - if ( !ismp() ) - { - delete_arrays_in_sp(); -/# - println( "We're not in MP!" ); -#/ - } - } - i = 0; - while ( i < level.createfxent.size ) - { - ent = level.createfxent[ i ]; - ent set_forward_and_up_vectors(); - if ( level.clientscripts ) - { - if ( !level.createfx_enabled ) - { - i++; - continue; - } - } - else - { - if ( isDefined( ent.model ) ) - { - level.non_fx_ents++; - } - if ( ent.v[ "type" ] == "loopfx" ) - { - ent thread [[ level.cfx_func_loopfx ]](); - } - if ( ent.v[ "type" ] == "oneshotfx" ) - { - ent thread [[ level.cfx_func_oneshotfx ]](); - } - if ( ent.v[ "type" ] == "soundfx" ) - { - ent thread [[ level.cfx_func_soundfx ]](); - } - } - i++; - } -} - -add_effect( name, effect ) -{ - if ( !isDefined( level._effect ) ) - { - level._effect = []; - } - level._effect[ name ] = loadfx( effect ); -} - -createeffect( type, fxid ) -{ - ent = undefined; - if ( !isDefined( level.createfx_enabled ) ) - { - level.createfx_enabled = getDvar( "createfx" ) != ""; - } - if ( !isDefined( level.createfxent ) ) - { - level.createfxent = []; - } - if ( level.createfx_enabled ) - { - if ( !isDefined( level.cfx_uniqueid ) ) - { - level.cfx_uniqueid = 0; - } - ent = spawnstruct(); - ent.uniqueid = level.cfx_uniqueid; - level.cfx_uniqueid++; - } - else if ( type == "exploder" ) - { - ent = spawnstruct(); - } - else - { - if ( !isDefined( level._fake_createfx_struct ) ) - { - level._fake_createfx_struct = spawnstruct(); - } - ent = level._fake_createfx_struct; - } - level.createfxent[ level.createfxent.size ] = ent; - ent.v = []; - ent.v[ "type" ] = type; - ent.v[ "fxid" ] = fxid; - ent.v[ "angles" ] = ( 1, 1, 1 ); - ent.v[ "origin" ] = ( 1, 1, 1 ); - ent.drawn = 1; - return ent; -} - -createloopsound() -{ - ent = spawnstruct(); - if ( !isDefined( level.createfxent ) ) - { - level.createfxent = []; - } - level.createfxent[ level.createfxent.size ] = ent; - ent.v = []; - ent.v[ "type" ] = "soundfx"; - ent.v[ "fxid" ] = "No FX"; - ent.v[ "soundalias" ] = "nil"; - ent.v[ "angles" ] = ( 1, 1, 1 ); - ent.v[ "origin" ] = ( 1, 1, 1 ); - ent.drawn = 1; - return ent; -} - -set_forward_and_up_vectors() -{ - self.v[ "up" ] = anglesToUp( self.v[ "angles" ] ); - self.v[ "forward" ] = anglesToForward( self.v[ "angles" ] ); -} - -createfxlogic() -{ - waittillframeend; - menu_init(); - if ( !ismp() ) - { - players = get_players(); - if ( !isDefined( players ) || players.size == 0 ) - { - level waittill( "first_player_ready" ); - } - } -/# - adddebugcommand( "noclip" ); -#/ - if ( !isDefined( level._effect ) ) - { - level._effect = []; - } - if ( getDvar( "createfx_map" ) == "" ) - { - setdvar( "createfx_map", level.script ); - } - else - { - if ( getDvar( "createfx_map" ) == level.script ) - { - if ( !ismp() ) - { - playerpos = []; - playerpos[ 0 ] = getDvarInt( #"274F266C" ); - playerpos[ 1 ] = getDvarInt( #"274F266D" ); - playerpos[ 2 ] = getDvarInt( #"274F266E" ); - player = get_players()[ 0 ]; - player setorigin( ( playerpos[ 0 ], playerpos[ 1 ], playerpos[ 2 ] ) ); - } - } - } -/# - filename = level.cfx_server_scriptdata + level.script + "_fx.gsc"; - file = openfile( filename, "append" ); - level.write_error = ""; - if ( file == -1 ) - { - level.write_error = filename; - } - else - { - closefile( file ); -#/ - } - level.createfxhudelements = []; - level.createfx_hudelements = 100; - stroffsetx = []; - stroffsety = []; - stroffsetx[ 0 ] = 0; - stroffsety[ 0 ] = 0; - stroffsetx[ 1 ] = 1; - stroffsety[ 1 ] = 1; - stroffsetx[ 2 ] = -2; - stroffsety[ 2 ] = 1; - setdvar( "fx", "nil" ); - crosshair = newdebughudelem(); - crosshair.location = 0; - crosshair.alignx = "center"; - crosshair.aligny = "middle"; - crosshair.foreground = 1; - crosshair.fontscale = 2; - crosshair.sort = 20; - crosshair.alpha = 1; - crosshair.x = 320; - crosshair.y = 233; - crosshair settext( "." ); - center_text_init(); - level.cleartextmarker = newdebughudelem(); - level.cleartextmarker.alpha = 0; - level.cleartextmarker settext( "marker" ); - i = 0; - while ( i < level.createfx_hudelements ) - { - newstrarray = []; - p = 0; - while ( p < 2 ) - { - newstr = newhudelem(); - newstr.alignx = "left"; - newstr.location = 0; - newstr.foreground = 1; - newstr.fontscale = 1,1; - newstr.sort = 20 - p; - newstr.alpha = 1; - newstr.x = 0 + stroffsetx[ p ]; - newstr.y = ( 60 + stroffsety[ p ] ) + ( i * 15 ); - if ( p > 0 ) - { - newstr.color = ( 1, 1, 1 ); - } - newstrarray[ newstrarray.size ] = newstr; - p++; - } - level.createfxhudelements[ i ] = newstrarray; - i++; - } - level.selectedmove_up = 0; - level.selectedmove_forward = 0; - level.selectedmove_right = 0; - level.selectedrotate_pitch = 0; - level.selectedrotate_roll = 0; - level.selectedrotate_yaw = 0; - level.selected_fx = []; - level.selected_fx_ents = []; - level.createfx_lockedlist = []; - level.createfx_lockedlist[ "escape" ] = 1; - level.createfx_lockedlist[ "BUTTON_LSHLDR" ] = 1; - level.createfx_lockedlist[ "BUTTON_RSHLDR" ] = 1; - level.createfx_lockedlist[ "mouse1" ] = 1; - level.createfx_lockedlist[ "ctrl" ] = 1; - level.createfx_draw_enabled = 1; - level.buttonisheld = []; - axismode = 0; - colors = []; - colors[ "loopfx" ][ "selected" ] = ( 1, 1, 0,2 ); - colors[ "loopfx" ][ "highlighted" ] = ( 0,4, 0,95, 1 ); - colors[ "loopfx" ][ "default" ] = ( 0,3, 0,5, 1 ); - colors[ "oneshotfx" ][ "selected" ] = ( 1, 1, 0,2 ); - colors[ "oneshotfx" ][ "highlighted" ] = ( 0,33, 0,97, 1 ); - colors[ "oneshotfx" ][ "default" ] = ( 0,1, 0,73, 0,73 ); - colors[ "exploder" ][ "selected" ] = ( 1, 1, 0,2 ); - colors[ "exploder" ][ "highlighted" ] = ( 1, 0,1, 0,1 ); - colors[ "exploder" ][ "default" ] = ( 1, 0,1, 0,1 ); - colors[ "rainfx" ][ "selected" ] = ( 1, 1, 0,2 ); - colors[ "rainfx" ][ "highlighted" ] = ( 0,95, 0,4, 0,95 ); - colors[ "rainfx" ][ "default" ] = ( 0,78, 0, 0,73 ); - colors[ "soundfx" ][ "selected" ] = ( 1, 1, 0,2 ); - colors[ "soundfx" ][ "highlighted" ] = ( 0,5, 1, 0,75 ); - colors[ "soundfx" ][ "default" ] = ( 0,2, 0,9, 0,2 ); - lasthighlightedent = undefined; - level.fx_rotating = 0; - setmenu( "none" ); - level.createfx_selecting = 0; - level.createfx_last_player_origin = ( 1, 1, 1 ); - level.createfx_last_player_forward = ( 1, 1, 1 ); - level.createfx_last_view_change_test = 0; - player = get_players()[ 0 ]; - black = newdebughudelem(); - black.x = -120; - black.y = 200; - black.foreground = 0; - black setshader( "black", 250, 160 ); - black.alpha = 0; - level.createfx_inputlocked = 0; - help_on_last_frame = 0; - i = 0; - while ( i < level.createfxent.size ) - { - ent = level.createfxent[ i ]; - ent post_entity_creation_function(); - i++; - } - thread draw_distance(); - lastselectentity = undefined; - thread createfx_autosave(); - if ( !ismp() ) - { - make_sp_player_invulnerable( player ); - } - for ( ;; ) - { - player = get_players()[ 0 ]; - changedselectedents = 0; - right = anglesToRight( player getplayerangles() ); - forward = anglesToForward( player getplayerangles() ); - up = anglesToUp( player getplayerangles() ); - dot = 0,85; - placeent_vector = vectorScale( forward, 750 ); - level.createfxcursor = bullettrace( player geteye(), player geteye() + placeent_vector, 0, undefined ); - highlightedent = undefined; - level.buttonclick = []; - level.button_is_kb = []; - process_button_held_and_clicked(); - ctrlheld = button_is_held( "ctrl", "BUTTON_LSHLDR" ); - shiftheld = button_is_held( "shift" ); - functionheld = button_is_held( "f" ); - leftclick = button_is_clicked( "mouse1", "BUTTON_A" ); - leftheld = button_is_held( "mouse1", "BUTTON_A" ); - create_fx_menu(); - if ( button_is_clicked( "BUTTON_X" ) || shiftheld && button_is_clicked( "x" ) ) - { - axismode = !axismode; - } - if ( button_is_clicked( "F2" ) || functionheld && button_is_clicked( "2" ) ) - { - toggle_createfx_drawing(); - } - if ( button_is_clicked( "F3" ) || functionheld && button_is_clicked( "3" ) ) - { - print_ambient_fx_inventory(); - } - if ( button_is_clicked( "F5" ) || functionheld && button_is_clicked( "5" ) ) - { - createfx_save(); - } - if ( button_is_clicked( "ins", "i" ) ) - { - insert_effect(); - } - if ( button_is_clicked( "c" ) ) - { - if ( level.is_camera_on == 0 ) - { -/# - adddebugcommand( "noclip" ); -#/ - level thread handle_camera(); - level.is_camera_on = 1; - break; - } - else - { - if ( level.is_camera_on == 1 ) - { -/# - adddebugcommand( "noclip" ); -#/ - level notify( "new_camera" ); - level.is_camera_on = 0; - axismode = 0; - } - } - } - if ( button_is_held( "BUTTON_RTRIG" ) && level.is_camera_on ) - { - axismode = 1; - } - else - { - if ( !button_is_held( "BUTTON_RTRIG" ) && level.is_camera_on ) - { - axismode = 0; - } - } - if ( button_is_clicked( "del" ) || !shiftheld && button_is_clicked( "d" ) ) - { - delete_pressed(); - } - if ( button_is_clicked( "end" ) || shiftheld && button_is_clicked( "d" ) ) - { - drop_selection_to_ground(); - changedselectedents = 1; - } - if ( button_is_clicked( "s" ) ) - { - setmenu( "select_by_property" ); - wait 0,05; - } - if ( isDefined( level.cfx_selected_prop ) ) - { - if ( ctrlheld ) - { - select_ents_by_property( level.cfx_selected_prop, 1 ); - } - else - { - select_ents_by_property( level.cfx_selected_prop ); - } - level.cfx_selected_prop = undefined; - } - if ( button_is_clicked( "j" ) ) - { - setmenu( "jump_to_effect" ); - draw_effects_list( "Select effect to jump to:" ); - } - if ( button_is_clicked( "escape" ) ) - { - clear_settable_fx(); - } - if ( button_is_clicked( "space" ) && !shiftheld ) - { - set_off_exploders(); - } - if ( button_is_clicked( "space" ) && shiftheld ) - { - turn_off_exploders(); - } - if ( button_is_clicked( "tab", "BUTTON_RSHLDR" ) ) - { - move_selection_to_cursor(); - changedselectedents = 1; - } - if ( button_is_clicked( "z" ) ) - { - if ( shiftheld ) - { - break; - } - else - { - undo(); - } - } - if ( button_is_held( "q", "F1" ) ) - { - help_on_last_frame = 1; - show_help(); - wait 0,05; - continue; - } - else if ( help_on_last_frame == 1 ) - { - clear_fx_hudelements(); - help_on_last_frame = 0; - } - if ( button_is_clicked( "BUTTON_LSTICK" ) && !ctrlheld ) - { - copy_ents(); - } - if ( button_is_clicked( "BUTTON_RSTICK" ) ) - { - if ( ctrlheld ) - { - paste_ents_onto_ents(); - break; - } - else - { - paste_ents(); - } - } - if ( isDefined( level.selected_fx_option_index ) ) - { - menu_fx_option_set(); - } - if ( button_is_held( "BUTTON_RTRIG" ) && button_is_held( "BUTTON_LTRIG" ) ) - { - move_player_around_map_fast(); - wait 0,25; - continue; - } - else - { - if ( menu( "none" ) ) - { - if ( button_is_clicked( "rightarrow" ) ) - { - move_player_to_next_same_effect( 1, lastselectentity ); - break; - } - else - { - if ( button_is_clicked( "leftarrow" ) ) - { - move_player_to_next_same_effect( 0, lastselectentity ); - } - } - } - if ( level.write_error != "" ) - { - level notify( "write_error" ); - thread write_error_msg( level.write_error ); - level.write_error = ""; - } - highlightedent = level.fx_highlightedent; - if ( leftclick || ( getTime() - level.createfx_last_view_change_test ) > 250 ) - { - if ( !leftclick || vector_changed( level.createfx_last_player_origin, player.origin ) && dot_changed( level.createfx_last_player_forward, forward ) ) - { - i = 0; - while ( i < level.createfxent.size ) - { - ent = level.createfxent[ i ]; - if ( !ent.drawn ) - { - i++; - continue; - } - else difference = vectornormalize( ent.v[ "origin" ] - ( player.origin + vectorScale( ( 1, 1, 1 ), 55 ) ) ); - newdot = vectordot( forward, difference ); - if ( newdot < dot ) - { - i++; - continue; - } - else if ( newdot == dot ) - { - if ( ent_is_selected( ent ) ) - { - i++; - continue; - } - } - else - { - dot = newdot; - highlightedent = ent; - highlightedent.last_fx_index = i; - } - i++; - } - level.fx_highlightedent = highlightedent; - level.createfx_last_player_origin = player.origin; - level.createfx_last_player_forward = forward; - } - level.createfx_last_view_change_test = getTime(); - } - if ( isDefined( highlightedent ) ) - { - if ( isDefined( lasthighlightedent ) ) - { - if ( lasthighlightedent != highlightedent ) - { - if ( !ent_is_selected( lasthighlightedent ) ) - { - lasthighlightedent thread entity_highlight_disable(); - } - if ( !ent_is_selected( highlightedent ) ) - { - highlightedent thread entity_highlight_enable(); - } - } - break; - } - else - { - if ( !ent_is_selected( highlightedent ) ) - { - highlightedent thread entity_highlight_enable(); - } - } - } - manipulate_createfx_ents( highlightedent, leftclick, leftheld, ctrlheld, colors, right ); - if ( axismode && level.selected_fx_ents.size > 0 ) - { - thread process_fx_rotater(); - if ( button_is_clicked( "enter", "r" ) ) - { - reset_axis_of_selected_ents(); - } - if ( button_is_clicked( "v" ) ) - { - copy_angles_of_selected_ents(); - } - while ( getDvarInt( "createfx_drawaxis" ) == 1 ) - { - i = 0; - while ( i < level.selected_fx_ents.size ) - { - level.selected_fx_ents[ i ] draw_axis(); - i++; - } - } - if ( level.selectedrotate_pitch != 0 || level.selectedrotate_yaw != 0 && level.selectedrotate_roll != 0 ) - { - changedselectedents = 1; - } - wait 0,05; - } - else - { - stop_drawing_axis_models(); - selectedmove_vector = get_selected_move_vector(); - if ( distancesquared( ( 1, 1, 1 ), selectedmove_vector ) > 0 ) - { - changedselectedents = 1; - if ( level.cfx_last_action != "translate" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "translate"; - } - } - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - if ( isDefined( ent.model ) ) - { - i++; - continue; - } - else - { - ent.v[ "origin" ] += selectedmove_vector; - } - i++; - } - wait 0,05; - } - if ( changedselectedents ) - { - update_selected_entities(); - } - lasthighlightedent = highlightedent; - if ( last_selected_entity_has_changed( lastselectentity ) ) - { - level.effect_list_offset = 0; - clear_settable_fx(); - setmenu( "none" ); - } - if ( level.selected_fx_ents.size ) - { - lastselectentity = level.selected_fx_ents[ level.selected_fx_ents.size - 1 ]; - break; - } - else - { - lastselectentity = undefined; - } - } - } -} - -toggle_createfx_drawing() -{ - level.createfx_draw_enabled = !level.createfx_draw_enabled; -} - -manipulate_createfx_ents( highlightedent, leftclick, leftheld, ctrlheld, colors, right ) -{ - if ( !level.createfx_draw_enabled ) - { - clear_fx_hudelements(); - return; - } - scale = getDvarFloat( "createfx_scaleid" ); - print_frames = getDvarInt( "createfx_print_frames" ); - if ( !isDefined( level.createfx_manipulate_offset ) ) - { - level.createfx_manipulate_offset = 0; - } - offset = level.createfx_manipulate_offset; - level.createfx_manipulate_offset = ( level.createfx_manipulate_offset + 1 ) % print_frames; - i = offset; - while ( i < level.createfxent.size ) - { - ent = level.createfxent[ i ]; - if ( !ent.drawn ) - { - } - else if ( isDefined( highlightedent ) && ent == highlightedent ) - { - } - else colorindex = "default"; - if ( index_is_selected( i ) ) - { - colorindex = "selected"; - } -/# - print3d( ent.v[ "origin" ], ".", colors[ ent.v[ "type" ] ][ colorindex ], 1, scale, print_frames ); -#/ - if ( ent.textalpha > 0 ) - { - printright = vectorScale( right, ( ent.v[ "fxid" ].size * -2,93 ) * scale ); - printup = ( 0, 0, 15 * scale ); -/# - print3d( ent.v[ "origin" ] + printright + printup, ent.v[ "fxid" ], colors[ ent.v[ "type" ] ][ colorindex ], ent.textalpha, scale, print_frames ); -#/ - } - i += print_frames; - } - if ( isDefined( highlightedent ) ) - { - if ( !entities_are_selected() ) - { - display_fx_info( highlightedent ); - } - if ( leftclick ) - { - entwasselected = index_is_selected( highlightedent.last_fx_index ); - level.createfx_selecting = !entwasselected; - if ( !ctrlheld ) - { - selectedsize = level.selected_fx_ents.size; - clear_entity_selection(); - if ( entwasselected && selectedsize == 1 ) - { - select_entity( highlightedent.last_fx_index, highlightedent ); - } - } - toggle_entity_selection( highlightedent.last_fx_index, highlightedent ); - } - else - { - if ( leftheld ) - { - if ( ctrlheld ) - { - if ( level.createfx_selecting ) - { - select_entity( highlightedent.last_fx_index, highlightedent ); - } - if ( !level.createfx_selecting ) - { - deselect_entity( highlightedent.last_fx_index, highlightedent ); - } - } - } - } - colorindex = "highlighted"; - if ( index_is_selected( highlightedent.last_fx_index ) ) - { - colorindex = "selected"; - } -/# - print3d( highlightedent.v[ "origin" ], ".", colors[ highlightedent.v[ "type" ] ][ colorindex ], 1, scale, 1 ); -#/ - if ( highlightedent.textalpha > 0 ) - { - printright = vectorScale( right, ( highlightedent.v[ "fxid" ].size * -2,93 ) * scale ); - printup = ( 0, 0, 15 * scale ); -/# - print3d( highlightedent.v[ "origin" ] + printright + printup, highlightedent.v[ "fxid" ], colors[ highlightedent.v[ "type" ] ][ colorindex ], highlightedent.textalpha, scale, 1 ); -#/ - } - } -} - -clear_settable_fx() -{ - level.createfx_inputlocked = 0; - setdvar( "fx", "nil" ); - level.selected_fx_option_index = undefined; - reset_fx_hud_colors(); -} - -reset_fx_hud_colors() -{ - i = 0; - while ( i < level.createfx_hudelements ) - { - level.createfxhudelements[ i ][ 0 ].color = ( 1, 1, 1 ); - i++; - } -} - -button_is_held( name, name2 ) -{ - if ( isDefined( name2 ) ) - { - if ( isDefined( level.buttonisheld[ name2 ] ) ) - { - return 1; - } - } - return isDefined( level.buttonisheld[ name ] ); -} - -button_is_clicked( name, name2 ) -{ - if ( isDefined( name2 ) ) - { - if ( isDefined( level.buttonclick[ name2 ] ) ) - { - return 1; - } - } - return isDefined( level.buttonclick[ name ] ); -} - -toggle_entity_selection( index, ent ) -{ - if ( isDefined( level.selected_fx[ index ] ) ) - { - deselect_entity( index, ent ); - } - else - { - select_entity( index, ent ); - } -} - -select_entity( index, ent, skip_undo ) -{ - if ( isDefined( level.selected_fx[ index ] ) ) - { - return; - } - ent.last_fx_index = index; - if ( !isDefined( skip_undo ) && level.cfx_last_action != "none" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "none"; - } - clear_settable_fx(); - level notify( "new_ent_selection" ); - ent thread entity_highlight_enable(); - level.selected_fx[ index ] = 1; - level.selected_fx_ents[ level.selected_fx_ents.size ] = ent; -} - -ent_is_highlighted( ent ) -{ - if ( !isDefined( level.fx_highlightedent ) ) - { - return 0; - } - return ent == level.fx_highlightedent; -} - -deselect_entity( index, ent ) -{ - if ( !isDefined( level.selected_fx[ index ] ) ) - { - return; - } - if ( level.cfx_last_action != "none" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "none"; - } - clear_settable_fx(); - level notify( "new_ent_selection" ); - if ( !ent_is_highlighted( ent ) ) - { - ent thread entity_highlight_disable(); - } - newarray = []; - i = 0; - while ( i < level.selected_fx_ents.size ) - { - if ( level.selected_fx_ents[ i ] != ent ) - { - newarray[ newarray.size ] = level.selected_fx_ents[ i ]; - } - i++; - } - level.selected_fx_ents = newarray; -} - -index_is_selected( index ) -{ - return isDefined( level.selected_fx[ index ] ); -} - -ent_is_selected( ent ) -{ - i = 0; - while ( i < level.selected_fx_ents.size ) - { - if ( level.selected_fx_ents[ i ] == ent ) - { - return 1; - } - i++; - } - return 0; -} - -clear_entity_selection( skip_undo ) -{ - if ( !isDefined( skip_undo ) && level.cfx_last_action != "none" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "none"; - } - i = 0; - while ( i < level.selected_fx_ents.size ) - { - if ( !ent_is_highlighted( level.selected_fx_ents[ i ] ) ) - { - level.selected_fx_ents[ i ] thread entity_highlight_disable(); - } - i++; - } - level.selected_fx = []; - level.selected_fx_ents = []; -} - -draw_axis() -{ - if ( isDefined( self.draw_axis_model ) ) - { - return; - } - self.draw_axis_model = spawn_axis_model( self.v[ "origin" ], self.v[ "angles" ] ); - level thread draw_axis_think( self ); - if ( !isDefined( level.draw_axis_models ) ) - { - level.draw_axis_models = []; - } - level.draw_axis_models[ level.draw_axis_models.size ] = self.draw_axis_model; -} - -spawn_axis_model( origin, angles ) -{ - model = spawn( "script_model", origin ); - model setmodel( "fx_axis_createfx" ); - model.angles = angles; - return model; -} - -draw_axis_think( axis_parent ) -{ - axis_model = axis_parent.draw_axis_model; - axis_model endon( "death" ); - player = get_players()[ 0 ]; - range = getDvarInt( "createfx_drawaxis_range" ); - i = 0; - while ( 1 ) - { - if ( !isDefined( axis_parent ) ) - { - break; - } - else - { - if ( distancesquared( axis_model.origin, player.origin ) > ( range * range ) ) - { - if ( isDefined( axis_model ) ) - { - axis_model delete(); - arrayremovevalue( level.draw_axis_models, undefined ); - } - } - else - { - if ( !isDefined( axis_model ) ) - { - axis_model = spawn_axis_model( axis_parent.v[ "origin" ], axis_parent.v[ "angles" ] ); - axis_parent.draw_axis_model = axis_model; - level.draw_axis_models[ level.draw_axis_models.size ] = axis_model; - } - } - axis_model.origin = axis_parent.v[ "origin" ]; - axis_model.angles = axis_parent.v[ "angles" ]; - wait 0,1; - i++; - if ( i >= 10 ) - { - range = getDvarInt( "createfx_drawaxis_range" ); - i = 0; - } - } - } - if ( isDefined( axis_model ) ) - { - axis_model delete(); - } -} - -stop_drawing_axis_models() -{ - if ( isDefined( level.draw_axis_models ) ) - { - i = 0; - while ( i < level.draw_axis_models.size ) - { - if ( isDefined( level.draw_axis_models[ i ] ) ) - { - level.draw_axis_models[ i ] delete(); - } - i++; - } - arrayremovevalue( level.draw_axis_models, undefined ); - } -} - -clear_fx_hudelements() -{ - level.cfx_center_text[ level.cfx_center_text_max - 1 ] clearalltextafterhudelem(); - i = 0; - while ( i < level.createfx_hudelements ) - { - p = 0; - while ( p < 2 ) - { - level.createfxhudelements[ i ][ p ] settext( "" ); - p++; - } - i++; - } - level.fxhudelements = 0; -} - -set_fx_hudelement( text ) -{ - if ( ismp() && !isDefined( level.createfx_delay_done ) ) - { - return; - } - if ( level.fxhudelements < level.createfx_hudelements ) - { - p = 0; - while ( p < 2 ) - { - level.createfxhudelements[ level.fxhudelements ][ p ] settext( text ); - p++; - } - level.fxhudelements++; - } -} - -buttondown( button, button2 ) -{ - if ( !buttonpressed_internal( button ) ) - { - return buttonpressed_internal( button2 ); - } -} - -buttonpressed_internal( button ) -{ - if ( !isDefined( button ) ) - { - return 0; - } - if ( kb_locked( button ) ) - { - return 0; - } - player = get_players()[ 0 ]; - return player buttonpressed( button ); -} - -get_selected_move_vector() -{ - player = get_players()[ 0 ]; - yaw = player getplayerangles()[ 1 ]; - angles = ( 0, yaw, 0 ); - right = anglesToRight( angles ); - forward = anglesToForward( angles ); - up = anglesToUp( angles ); - ctrlheld = button_is_held( "ctrl", "BUTTON_LSHLDR" ); - if ( buttondown( "kp_uparrow", "DPAD_UP" ) ) - { - if ( level.selectedmove_forward < 0 ) - { - level.selectedmove_forward = 0; - } - if ( ctrlheld ) - { - level.selectedmove_forward = 0,1; - wait 0,05; - } - else - { - level.selectedmove_forward += 1; - } - } - else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) ) - { - if ( level.selectedmove_forward > 0 ) - { - level.selectedmove_forward = 0; - } - if ( ctrlheld ) - { - level.selectedmove_forward = -1 * 0,1; - wait 0,05; - } - else - { - level.selectedmove_forward -= 1; - } - } - else - { - level.selectedmove_forward = 0; - } - if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) ) - { - if ( level.selectedmove_right < 0 ) - { - level.selectedmove_right = 0; - } - if ( ctrlheld ) - { - level.selectedmove_right = 0,1; - wait 0,05; - } - else - { - level.selectedmove_right += 1; - } - } - else if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) ) - { - if ( level.selectedmove_right > 0 ) - { - level.selectedmove_right = 0; - } - if ( ctrlheld ) - { - level.selectedmove_right = -1 * 0,1; - wait 0,05; - } - else - { - level.selectedmove_right -= 1; - } - } - else - { - level.selectedmove_right = 0; - } - if ( buttondown( "BUTTON_Y" ) ) - { - if ( level.selectedmove_up < 0 ) - { - level.selectedmove_up = 0; - } - if ( ctrlheld ) - { - level.selectedmove_up = 0,1; - wait 0,05; - } - else - { - level.selectedmove_up += 1; - } - } - else if ( buttondown( "BUTTON_B" ) ) - { - if ( level.selectedmove_up > 0 ) - { - level.selectedmove_up = 0; - } - if ( ctrlheld ) - { - level.selectedmove_up = -1 * 0,1; - wait 0,05; - } - else - { - level.selectedmove_up -= 1; - } - } - else - { - level.selectedmove_up = 0; - } - vector = ( 1, 1, 1 ); - vector += vectorScale( forward, level.selectedmove_forward ); - vector += vectorScale( right, level.selectedmove_right ); - vector += vectorScale( up, level.selectedmove_up ); - return vector; -} - -process_button_held_and_clicked() -{ - add_button( "mouse1" ); - add_kb_button( "shift" ); - add_kb_button( "ctrl" ); - add_button( "BUTTON_RSHLDR" ); - add_button( "BUTTON_LSHLDR" ); - add_button( "BUTTON_RSTICK" ); - add_button( "BUTTON_LSTICK" ); - add_button( "BUTTON_A" ); - add_button( "BUTTON_B" ); - add_button( "BUTTON_X" ); - add_button( "BUTTON_Y" ); - add_button( "DPAD_UP" ); - add_button( "DPAD_LEFT" ); - add_button( "DPAD_RIGHT" ); - add_button( "DPAD_DOWN" ); - add_kb_button( "escape" ); - add_button( "BUTTON_RTRIG" ); - add_button( "BUTTON_LTRIG" ); - add_kb_button( "a" ); - add_button( "F1" ); - add_button( "F5" ); - add_button( "F2" ); - add_kb_button( "c" ); - add_kb_button( "d" ); - add_kb_button( "f" ); - add_kb_button( "h" ); - add_kb_button( "i" ); - add_kb_button( "j" ); - add_kb_button( "k" ); - add_kb_button( "l" ); - add_kb_button( "m" ); - add_kb_button( "p" ); - add_kb_button( "q" ); - add_kb_button( "r" ); - add_kb_button( "s" ); - add_kb_button( "v" ); - add_kb_button( "x" ); - add_kb_button( "z" ); - add_button( "del" ); - add_kb_button( "end" ); - add_kb_button( "tab" ); - add_kb_button( "ins" ); - add_kb_button( "add" ); - add_kb_button( "space" ); - add_kb_button( "enter" ); - add_kb_button( "leftarrow" ); - add_kb_button( "rightarrow" ); - add_kb_button( "1" ); - add_kb_button( "2" ); - add_kb_button( "3" ); - add_kb_button( "4" ); - add_kb_button( "5" ); - add_kb_button( "6" ); - add_kb_button( "7" ); - add_kb_button( "8" ); - add_kb_button( "9" ); - add_kb_button( "0" ); - add_kb_button( "~" ); -} - -locked( name ) -{ - if ( isDefined( level.createfx_lockedlist[ name ] ) ) - { - return 0; - } - return kb_locked( name ); -} - -kb_locked( name ) -{ - if ( level.createfx_inputlocked ) - { - return isDefined( level.button_is_kb[ name ] ); - } -} - -add_button( name ) -{ - player = get_players()[ 0 ]; - if ( locked( name ) ) - { - return; - } - if ( !isDefined( level.buttonisheld[ name ] ) ) - { - if ( player buttonpressed( name ) ) - { - level.buttonisheld[ name ] = 1; - level.buttonclick[ name ] = 1; - } - } - else - { - if ( !player buttonpressed( name ) ) - { - } - } -} - -add_kb_button( name ) -{ - level.button_is_kb[ name ] = 1; - add_button( name ); -} - -set_anglemod_move_vector() -{ -/# - ctrlheld = button_is_held( "ctrl", "BUTTON_LSHLDR" ); - players = get_players(); - if ( level.is_camera_on == 1 ) - { - newmovement = players[ 0 ] getnormalizedmovement(); - dolly_movement = players[ 0 ] getnormalizedcameramovement(); - if ( newmovement[ 1 ] <= -0,3 ) - { - level.selectedrotate_yaw -= 1; - } - else if ( newmovement[ 1 ] >= 0,3 ) - { - level.selectedrotate_yaw += 1; - } - else if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) ) - { - if ( level.selectedrotate_yaw < 0 ) - { - level.selectedrotate_yaw = 0; - } - level.selectedrotate_yaw += 0,1; - } - else if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) ) - { - if ( level.selectedrotate_yaw > 0 ) - { - level.selectedrotate_yaw = 0; - } - level.selectedrotate_yaw -= 0,1; - } - else - { - level.selectedrotate_yaw = 0; - } - if ( dolly_movement[ 0 ] <= -0,2 ) - { - level.selectedrotate_pitch += 1; - } - else if ( dolly_movement[ 0 ] >= 0,2 ) - { - level.selectedrotate_pitch -= 1; - } - else if ( buttondown( "kp_uparrow", "DPAD_UP" ) ) - { - if ( level.selectedrotate_pitch < 0 ) - { - level.selectedrotate_pitch = 0; - } - level.selectedrotate_pitch += 0,1; - } - else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) ) - { - if ( level.selectedrotate_pitch > 0 ) - { - level.selectedrotate_pitch = 0; - } - level.selectedrotate_pitch -= 0,1; - } - else - { - level.selectedrotate_pitch = 0; - } - if ( buttondown( "BUTTON_Y" ) ) - { - if ( level.selectedrotate_roll < 0 ) - { - level.selectedrotate_roll = 0; - } - level.selectedrotate_roll += 0,1; - } - else if ( buttondown( "BUTTON_B" ) ) - { - if ( level.selectedrotate_roll > 0 ) - { - level.selectedrotate_roll = 0; - } - level.selectedrotate_roll -= 0,1; - } - else - { - level.selectedrotate_roll = 0; - } - } - else if ( buttondown( "kp_uparrow", "DPAD_UP" ) ) - { - if ( level.selectedrotate_pitch < 0 ) - { - level.selectedrotate_pitch = 0; - } - if ( ctrlheld ) - { - level.selectedrotate_pitch = 0,1; - wait 0,05; - } - else - { - level.selectedrotate_pitch += 1; - } - } - else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) ) - { - if ( level.selectedrotate_pitch > 0 ) - { - level.selectedrotate_pitch = 0; - } - if ( ctrlheld ) - { - level.selectedrotate_pitch = -1 * 0,1; - wait 0,05; - } - else - { - level.selectedrotate_pitch -= 1; - } - } - else - { - level.selectedrotate_pitch = 0; - } - if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) ) - { - if ( level.selectedrotate_yaw < 0 ) - { - level.selectedrotate_yaw = 0; - } - if ( ctrlheld ) - { - level.selectedrotate_yaw = 0,1; - wait 0,05; - } - else - { - level.selectedrotate_yaw += 1; - } - } - else if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) ) - { - if ( level.selectedrotate_yaw > 0 ) - { - level.selectedrotate_yaw = 0; - } - if ( ctrlheld ) - { - level.selectedrotate_yaw = -1 * 0,1; - wait 0,05; - } - else - { - level.selectedrotate_yaw -= 1; - } - } - else - { - level.selectedrotate_yaw = 0; - } - if ( buttondown( "BUTTON_Y" ) ) - { - if ( level.selectedrotate_roll < 0 ) - { - level.selectedrotate_roll = 0; - } - if ( ctrlheld ) - { - level.selectedrotate_roll = 0,1; - wait 0,05; - } - else - { - level.selectedrotate_roll += 1; - } - } - else if ( buttondown( "BUTTON_B" ) ) - { - if ( level.selectedrotate_roll > 0 ) - { - level.selectedrotate_roll = 0; - } - if ( ctrlheld ) - { - level.selectedrotate_roll = -1 * 0,1; - wait 0,05; - } - else - { - level.selectedrotate_roll -= 1; - } - } - else - { - level.selectedrotate_roll = 0; -#/ - } -} - -cfxprintln( file, string ) -{ -/# - if ( file == -1 ) - { - return; - } - fprintln( file, string ); -#/ -} - -update_save_bar( number ) -{ - level notify( "saving_start" ); - level endon( "saving_start" ); - level.current_saving_number = 0; - while ( level.current_saving_number < level.createfxent.size ) - { - center_text_clear(); - center_text_add( "Saving Createfx to File" ); - center_text_add( "Saving effect " + level.current_saving_number + "/" + level.createfxent.size ); - center_text_add( "Do not reset Xenon until saving is complete." ); - wait 0,05; - center_text_clear(); - } - center_text_add( "Saving Complete." ); - center_text_add( level.createfxent.size + " effects saved to files." ); -} - -generate_fx_log( type, autosave ) -{ -/# - autosave = isDefined( autosave ); - if ( type == "server" ) - { - if ( !autosave ) - { - filename = level.cfx_server_scriptdata + level.script + "_fx.gsc"; - } - else - { - filename = level.cfx_server_scriptdata + "backup.gsc"; - } - call_loop = level.cfx_server_loop; - call_oneshot = level.cfx_server_oneshot; - call_exploder = level.cfx_server_exploder; - call_loopsound = level.cfx_server_loopsound; - } - else if ( type == "client" ) - { - if ( !autosave ) - { - filename = level.cfx_client_scriptdata + level.script + "_fx.csc"; - } - else - { - filename = level.cfx_client_scriptdata + "backup.csc"; - } - call_loop = level.cfx_client_loop; - call_oneshot = level.cfx_client_oneshot; - call_exploder = level.cfx_client_exploder; - call_loopsound = level.cfx_client_loopsound; - } - else - { - println( "^1Error: Improper type in generate_fx_log()" ); - return; - } - file = openfile( filename, "write" ); - if ( file == -1 ) - { - level.write_error = filename; - if ( type == "server" ) - { - return 1; - } - else - { - if ( type == "client" ) - { - return 2; - } - else - { - return 3; - } - } - } - else - { - cfxprintln( file, "//_createfx generated. Do not touch!!" ); - cfxprintln( file, "main()" ); - cfxprintln( file, "{" ); - p = 0; - while ( p < level.createfxent.size ) - { - ent = level.createfxent[ p ]; - origin = []; - angles = []; - i = 0; - while ( i < 3 ) - { - origin[ i ] = ent.v[ "origin" ][ i ]; - angles[ i ] = ent.v[ "angles" ][ i ]; - if ( origin[ i ] < 0,1 && origin[ i ] > ( 0,1 * -1 ) ) - { - origin[ i ] = 0; - } - if ( angles[ i ] < 0,1 && angles[ i ] > ( 0,1 * -1 ) ) - { - angles[ i ] = 0; - } - i++; - } - ent.v[ "origin" ] = ( origin[ 0 ], origin[ 1 ], origin[ 2 ] ); - ent.v[ "angles" ] = ( angles[ 0 ], angles[ 1 ], angles[ 2 ] ); - p++; - } - if ( !autosave ) - { - println( " *** CREATING EFFECT, COPY THESE LINES TO ", level.script, "_fx.gsc *** " ); - } - cfxprintln( file, "// CreateFX entities placed: " + ( level.createfxent.size - level.non_fx_ents ) ); - breather = 0; - if ( autosave ) - { - breather_pause = 1; - } - else - { - breather_pause = 5; - } - i = 0; - while ( i < level.createfxent.size ) - { - e = level.createfxent[ i ]; - assert( isDefined( e.v[ "type" ] ), "effect at origin " + e.v[ "origin" ] + " has no type" ); - if ( isDefined( e.model ) ) - { - i++; - continue; - } - else if ( e.v[ "fxid" ] == "No FX" ) - { - i++; - continue; - } - else - { - output_name = "\t"; - output_props = "\t"; - ent_type = e.v[ "type" ]; - if ( ent_type == "loopfx" ) - { - output_name += "ent = " + call_loop + "( "" + e.v[ "fxid" ] + "" );"; - } - if ( ent_type == "oneshotfx" ) - { - output_name += "ent = " + call_oneshot + "( "" + e.v[ "fxid" ] + "" );"; - } - if ( ent_type == "exploder" ) - { - output_name += "ent = " + call_exploder + "( "" + e.v[ "fxid" ] + "" );"; - } - if ( ent_type == "soundfx" ) - { - output_name += "ent = " + call_loopsound + "();"; - } - output_props += get_fx_options( e ); - cfxprintln( file, output_name ); - cfxprintln( file, output_props ); - cfxprintln( file, "\t" ); - breather++; - if ( breather >= breather_pause ) - { - wait 0,05; - breather = 0; - } - } - i++; - } - if ( level.bscriptgened ) - { - script_gen_dump_addline( level.cfx_server_scriptgendump, level.script + "_fx" ); - [[ level.cfx_func_script_gen_dump ]](); - } - cfxprintln( file, "}" ); - saved = closefile( file ); - assert( saved == 1, "File not saved (see above message?): " + filename ); - println( "CreateFX entities placed: " + ( level.createfxent.size - level.non_fx_ents ) ); - return 0; -#/ - } -} - -get_fx_options( ent ) -{ - output_props = ""; - i = 0; - while ( i < level.createfx_options.size ) - { - option = level.createfx_options[ i ]; - if ( !isDefined( ent.v[ option[ "name" ] ] ) ) - { - i++; - continue; - } - else if ( !mask( option[ "mask" ], ent.v[ "type" ] ) ) - { - i++; - continue; - } - else if ( option[ "type" ] == "string" ) - { - if ( option[ "name" ] == "fxid" ) - { - i++; - continue; - } - else output_props += "ent.v[ "" + option[ "name" ] + "" ] = "" + ent.v[ option[ "name" ] ] + ""; "; - i++; - continue; - } - else - { - output_props += "ent.v[ "" + option[ "name" ] + "" ] = " + ent.v[ option[ "name" ] ] + "; "; - } - i++; - } - return output_props; -} - -entity_highlight_disable() -{ - self notify( "highlight change" ); - self endon( "highlight change" ); - for ( ;; ) - { - self.textalpha -= 0,05; - if ( self.textalpha < 0,4 ) - { - break; - } - else - { - wait 0,05; - } - } - self.textalpha = 0,4; -} - -entity_highlight_enable() -{ - self notify( "highlight change" ); - self endon( "highlight change" ); - for ( ;; ) - { - self.textalpha += 0,05; - if ( self.textalpha > 1 ) - { - break; - } - else - { - wait 0,05; - } - } - self.textalpha = 1; -} - -get_center_of_array( array ) -{ - center = ( 1, 1, 1 ); - i = 0; - while ( i < array.size ) - { - center = ( center[ 0 ] + array[ i ].v[ "origin" ][ 0 ], center[ 1 ] + array[ i ].v[ "origin" ][ 1 ], center[ 2 ] + array[ i ].v[ "origin" ][ 2 ] ); - i++; - } - return ( center[ 0 ] / array.size, center[ 1 ] / array.size, center[ 2 ] / array.size ); -} - -rotation_is_occuring() -{ - if ( level.selectedrotate_roll != 0 ) - { - return 1; - } - if ( level.selectedrotate_pitch != 0 ) - { - return 1; - } - return level.selectedrotate_yaw != 0; -} - -process_fx_rotater() -{ - if ( level.fx_rotating ) - { - return; - } - set_anglemod_move_vector(); - if ( !rotation_is_occuring() ) - { - return; - } - level.fx_rotating = 1; - if ( level.cfx_last_action != "rotate" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "rotate"; - } - if ( level.selected_fx_ents.size > 1 ) - { - center = get_center_of_array( level.selected_fx_ents ); - org = spawn( "script_origin", center ); - org.v[ "angles" ] = level.selected_fx_ents[ 0 ].v[ "angles" ]; - org.v[ "origin" ] = center; - rotater = []; - i = 0; - while ( i < level.selected_fx_ents.size ) - { - rotater[ i ] = spawn( "script_origin", level.selected_fx_ents[ i ].v[ "origin" ] ); - rotater[ i ].angles = level.selected_fx_ents[ i ].v[ "angles" ]; - rotater[ i ] linkto( org ); - i++; - } - rotate_over_time( org, rotater ); - org delete(); - i = 0; - while ( i < rotater.size ) - { - rotater[ i ] delete(); - i++; - } - } - else if ( level.selected_fx_ents.size == 1 ) - { - ent = level.selected_fx_ents[ 0 ]; - rotater = spawn( "script_origin", ( 1, 1, 1 ) ); - rotater.angles = ent.v[ "angles" ]; - if ( level.selectedrotate_pitch != 0 ) - { - rotater devaddpitch( level.selectedrotate_pitch ); - } - else if ( level.selectedrotate_yaw != 0 ) - { - rotater devaddyaw( level.selectedrotate_yaw ); - } - else - { - rotater devaddroll( level.selectedrotate_roll ); - } - ent.v[ "angles" ] = rotater.angles; - rotater delete(); - wait 0,05; - } - level.fx_rotating = 0; -} - -rotate_over_time( org, rotater ) -{ - level endon( "new_ent_selection" ); - p = 0; - while ( p < 2 ) - { - if ( level.selectedrotate_pitch != 0 ) - { - org devaddpitch( level.selectedrotate_pitch ); - } - else if ( level.selectedrotate_yaw != 0 ) - { - org devaddyaw( level.selectedrotate_yaw ); - } - else - { - org devaddroll( level.selectedrotate_roll ); - } - wait 0,05; - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - if ( isDefined( ent.model ) ) - { - i++; - continue; - } - else - { - ent.v[ "origin" ] = rotater[ i ].origin; - ent.v[ "angles" ] = rotater[ i ].angles; - } - i++; - } - p++; - } -} - -delete_pressed() -{ - if ( level.createfx_inputlocked ) - { - remove_selected_option(); - return; - } - delete_selection(); -} - -remove_selected_option() -{ - if ( !isDefined( level.selected_fx_option_index ) ) - { - return; - } - name = level.createfx_options[ level.selected_fx_option_index ][ "name" ]; - i = 0; - while ( i < level.createfxent.size ) - { - ent = level.createfxent[ i ]; - if ( !ent_is_selected( ent ) ) - { - i++; - continue; - } - else - { - ent remove_option( name ); - } - i++; - } - update_selected_entities(); - clear_settable_fx(); -} - -remove_option( name ) -{ -} - -delete_selection() -{ - newarray = []; - if ( level.selected_fx_ents.size < 1 ) - { - return; - } - store_undo_state( "delete", level.selected_fx_ents ); - level.cfx_last_action = "none"; - i = 0; - while ( i < level.createfxent.size ) - { - ent = level.createfxent[ i ]; - if ( ent_is_selected( ent ) ) - { - if ( isDefined( ent.looper ) ) - { - ent.looper delete(); - } - level.fx_highlightedent = undefined; - ent notify( "stop_loop" ); - i++; - continue; - } - else - { - newarray[ newarray.size ] = ent; - } - i++; - } - level.createfxent = newarray; - level.selected_fx = []; - level.selected_fx_ents = []; - clear_fx_hudelements(); -} - -move_selection_to_cursor( skip_undo ) -{ - origin = level.createfxcursor[ "position" ]; - if ( level.selected_fx_ents.size <= 0 ) - { - return; - } - if ( !isDefined( skip_undo ) && level.cfx_last_action != "move_to_cursor" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "move_to_cursor"; - } - center = get_center_of_array( level.selected_fx_ents ); - difference = center - origin; - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - if ( isDefined( ent.model ) ) - { - i++; - continue; - } - else - { - ent.v[ "origin" ] -= difference; - } - i++; - } -} - -insert_effect() -{ - setmenu( "creation" ); - level.effect_list_offset = 0; - clear_fx_hudelements(); - set_fx_hudelement( "Pick effect type to create:" ); - set_fx_hudelement( "1. One Shot fx" ); - set_fx_hudelement( "2. Looping fx" ); - set_fx_hudelement( "3. Exploder" ); - set_fx_hudelement( "4. Looping sound" ); - set_fx_hudelement( "(c) Cancel" ); - set_fx_hudelement( "(x) Exit" ); -} - -show_help() -{ - clear_fx_hudelements(); - set_fx_hudelement( "Help:" ); - set_fx_hudelement( "I Insert effect" ); - set_fx_hudelement( "Shift + D Delete selected effects" ); - set_fx_hudelement( "F + 5 Save" ); - set_fx_hudelement( "A button Toggle the selection of the current effect" ); - set_fx_hudelement( "X button Toggle effect rotation mode" ); - set_fx_hudelement( "Y button Move selected effects up or rotate X axis" ); - set_fx_hudelement( "B button Move selected effects down or rotate X axis" ); - set_fx_hudelement( "D-pad Up/Down Move selected effects Forward/Backward or rotate Y axis" ); - set_fx_hudelement( "D-pad Left/Right Move selected effects Left/Right or rotate Z axis" ); - set_fx_hudelement( "R Shoulder Move selected effects to the cursor" ); - set_fx_hudelement( "L Shoulder Hold to select multiple effects" ); - set_fx_hudelement( "Right Arrow Next page in options menu" ); - set_fx_hudelement( "Left Arrow Previous page in options menu" ); - set_fx_hudelement( "A Add option to the selected effects" ); - set_fx_hudelement( "X Exit effect options menu" ); - set_fx_hudelement( "Shift + D Drop selected effects to the ground" ); - set_fx_hudelement( "R Reset the rotation of the selected effects" ); - set_fx_hudelement( "L Stick Copy effects" ); - set_fx_hudelement( "R Stick Paste effects" ); - set_fx_hudelement( "V Copy the angles from the most recently selected fx onto all selected fx." ); - set_fx_hudelement( "F + 2 Toggle CreateFX dot and menu drawing" ); - set_fx_hudelement( "U UFO" ); - set_fx_hudelement( "N Noclip" ); - set_fx_hudelement( "R Trig + L Trig Jump forward 8000 units" ); - set_fx_hudelement( "T Toggle Timescale FAST" ); - set_fx_hudelement( "Y Toggle Timescale SLOW" ); - set_fx_hudelement( "H Toggle FX Visibility" ); - set_fx_hudelement( "W Toggle effect wireframe" ); - set_fx_hudelement( "P Toggle FX Profile" ); -} - -center_text_init() -{ - level.cfx_center_text = []; - level.cfx_center_text_index = 0; - level.cfx_center_text_max = 3; - new_array = []; - p = 0; - while ( p < level.cfx_center_text_max ) - { - center_hud = newdebughudelem(); - center_hud settext( " " ); - center_hud.horzalign = "center"; - center_hud.vertalign = "middle"; - center_hud.alignx = "center"; - center_hud.aligny = "middle"; - center_hud.foreground = 1; - center_hud.fontscale = 1,1; - center_hud.sort = 21; - center_hud.alpha = 1; - center_hud.color = ( 1, 1, 1 ); - center_hud.y = p * 25; - new_array[ p ] = center_hud; - p++; - } - level.cfx_center_text = new_array; -} - -center_text_add( text ) -{ - if ( isDefined( text ) && isDefined( level.cfx_center_text ) ) - { - level.cfx_center_text[ level.cfx_center_text_index ] settext( text ); - level.cfx_center_text_index++; - if ( level.cfx_center_text_index >= level.cfx_center_text_max ) - { - level.cfx_center_text_index = level.cfx_center_text_max - 1; - } - } -} - -center_text_clear() -{ - p = 0; - while ( p < level.cfx_center_text_max ) - { - level.cfx_center_text[ p ] settext( " " ); - p++; - } - level.cfx_center_text_index = 0; -} - -write_error_msg( filename ) -{ - level notify( "write_error" ); - level endon( "write_error" ); - while ( isDefined( filename ) ) - { - center_text_clear(); - center_text_add( "File " + filename + " is not writeable." ); - center_text_add( "If it's checked out, restart your computer!" ); - center_text_add( "Hold the A Button to dismiss." ); - for ( ;; ) - { - player = get_players()[ 0 ]; - if ( player buttonpressed( "BUTTON_A" ) ) - { - center_text_clear(); - level.write_error = ""; - return; - } - else - { - wait 0,25; - } - } - } -} - -select_last_entity( skip_undo ) -{ - select_entity( level.createfxent.size - 1, level.createfxent[ level.createfxent.size - 1 ], skip_undo ); -} - -post_entity_creation_function() -{ - self.textalpha = 0; - self.drawn = 1; -} - -copy_ents() -{ - if ( level.selected_fx_ents.size <= 0 ) - { - return; - } - array = []; - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - newent = spawnstruct(); - newent.v = ent.v; - newent post_entity_creation_function(); - array[ array.size ] = newent; - i++; - } - level.stored_ents = array; -} - -paste_ents() -{ - delay_min = getDvarInt( "createfx_oneshot_min_delay" ); - delay_max = getDvarInt( "createfx_oneshot_max_delay" ); - if ( delay_min > delay_max ) - { - temp = delay_min; - delay_min = delay_max; - delay_max = temp; - } - if ( !isDefined( level.stored_ents ) ) - { - return; - } - clear_entity_selection(); - if ( level.cfx_last_action != "none" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - } - level.cfx_last_action = "none"; - i = 0; - while ( i < level.stored_ents.size ) - { - level.stored_ents[ i ].uniqueid = level.cfx_uniqueid; - level.cfx_uniqueid++; - if ( level.stored_ents[ i ].v[ "type" ] == "oneshotfx" ) - { - level.stored_ents[ i ].v[ "delay" ] = randomintrange( delay_min, delay_max ); - } - add_and_select_entity( level.stored_ents[ i ], "skip_undo" ); - i++; - } - move_selection_to_cursor( "skip_undo" ); - update_selected_entities(); - store_undo_state( "add", level.stored_ents ); - level.stored_ents = []; - copy_ents(); -} - -paste_ents_onto_ents() -{ - if ( !isDefined( level.stored_ents ) || !isDefined( level.selected_fx_ents ) ) - { - return; - } - if ( level.stored_ents.size < 1 || level.selected_fx_ents.size < 1 ) - { - return; - } - if ( level.stored_ents.size != level.selected_fx_ents.size ) - { -/# - println( "^2CreateFX: Number of source ents must match the number of destination ents for Paste Into to work." ); -#/ - return; - } - if ( level.cfx_last_action != "none" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - } - level.cfx_last_action = "none"; - selected_ents_temp = level.selected_fx_ents; - i = 0; - while ( i < level.stored_ents.size ) - { - source_ent = level.stored_ents[ i ]; - target_ent = level.selected_fx_ents[ i ]; - source_ent.uniqueid = level.cfx_uniqueid; - level.cfx_uniqueid++; - source_ent.v[ "angles" ] = target_ent.v[ "angles" ]; - source_ent.v[ "origin" ] = target_ent.v[ "origin" ]; - add_and_select_entity( source_ent, "skip_undo" ); - i++; - } - i = 0; - while ( i < selected_ents_temp.size ) - { - deselect_entity( selected_ents_temp[ i ].last_fx_index, selected_ents_temp[ i ] ); - i++; - } - update_selected_entities(); - store_undo_state( "add", level.stored_ents ); - level.stored_ents = []; - copy_ents(); -} - -add_and_select_entity( ent, skip_undo ) -{ - level.createfxent[ level.createfxent.size ] = ent; - select_last_entity( skip_undo ); -} - -stop_fx_looper() -{ - if ( isDefined( self.looper ) ) - { - self.looper delete(); - } - self [[ level.cfx_func_stop_loopsound ]](); -} - -restart_fx_looper() -{ - stop_fx_looper(); - self set_forward_and_up_vectors(); - if ( self.v[ "type" ] == "loopfx" ) - { - self [[ level.cfx_func_create_looper ]](); - } - if ( self.v[ "type" ] == "oneshotfx" ) - { - self [[ level.cfx_func_create_triggerfx ]](); - } - if ( self.v[ "type" ] == "soundfx" ) - { - self [[ level.cfx_func_create_loopsound ]](); - } -} - -update_selected_entities() -{ - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - ent restart_fx_looper(); - i++; - } -} - -copy_angles_of_selected_ents() -{ - level notify( "new_ent_selection" ); - if ( level.cfx_last_action != "copy_angles" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "copy_angles"; - } - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - ent.v[ "angles" ] = level.selected_fx_ents[ level.selected_fx_ents.size - 1 ].v[ "angles" ]; - ent set_forward_and_up_vectors(); - i++; - } - update_selected_entities(); -} - -reset_axis_of_selected_ents() -{ - level notify( "new_ent_selection" ); - if ( level.cfx_last_action != "reset_axis" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "reset_axis"; - } - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - ent.v[ "angles" ] = ( 1, 1, 1 ); - ent set_forward_and_up_vectors(); - i++; - } - update_selected_entities(); -} - -last_selected_entity_has_changed( lastselectentity ) -{ - if ( isDefined( lastselectentity ) ) - { - if ( !entities_are_selected() ) - { - return 1; - } - } - else - { - return entities_are_selected(); - } - return lastselectentity != level.selected_fx_ents[ level.selected_fx_ents.size - 1 ]; -} - -createfx_showorigin( id, org, delay, org2, type, exploder, id2, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout ) -{ -} - -drop_selection_to_ground() -{ - if ( level.cfx_last_action != "drop_to_ground" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "drop_to_ground"; - } - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - trace = bullettrace( ent.v[ "origin" ], ent.v[ "origin" ] + vectorScale( ( 1, 1, 1 ), 2048 ), 0, undefined ); - ent.v[ "origin" ] = trace[ "position" ]; - i++; - } -} - -set_off_exploders() -{ - level notify( "createfx_exploder_reset" ); - exploders = []; - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - if ( isDefined( ent.v[ "exploder" ] ) ) - { - exploders[ ent.v[ "exploder" ] ] = 1; - } - i++; - } - keys = getarraykeys( exploders ); - i = 0; - while ( i < keys.size ) - { - exploder( keys[ i ] ); - i++; - } -} - -turn_off_exploders() -{ - level notify( "createfx_exploder_reset" ); - exploders = []; - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - if ( isDefined( ent.v[ "exploder" ] ) ) - { - exploders[ ent.v[ "exploder" ] ] = 1; - } - i++; - } - keys = getarraykeys( exploders ); - i = 0; - while ( i < keys.size ) - { - stop_exploder( keys[ i ] ); - i++; - } -} - -draw_distance() -{ - count = 0; - last_pos = ( 1, 1, 1 ); - if ( getDvarInt( "createfx_drawdist" ) == 0 ) - { - setdvar( "createfx_drawdist", "1500" ); - } - player = get_players()[ 0 ]; - for ( ;; ) - { - maxdist = getDvarInt( "createfx_drawdist" ); - maxdistsqr = maxdist * maxdist; -/# - if ( flag( "createfx_saving" ) ) - { - println( "Waiting for createfx to save..." ); -#/ - } - flag_waitopen( "createfx_saving" ); - i = 0; - while ( i < level.createfxent.size ) - { - ent = level.createfxent[ i ]; - if ( ent_is_selected( ent ) ) - { - ent.drawn = 1; - count++; - continue; - } - else - { - ent.drawn = distancesquared( player.origin, ent.v[ "origin" ] ) <= maxdistsqr; - } - count++; - if ( count > 50 ) - { - count = 0; - wait 0,05; - } - i++; - } - wait 0,1; - while ( distancesquared( player.origin, last_pos ) < 2500 ) - { - wait 0,1; - } - last_pos = player.origin; - } -} - -createfx_save( autosave ) -{ - flag_waitopen( "createfx_saving" ); - flag_set( "createfx_saving" ); - resettimeout(); - if ( isDefined( autosave ) ) - { - savemode = "AUTOSAVE"; - } - else - { - savemode = "USER SAVE"; - } - type = "server"; - old_time = getTime(); -/# - println( "\n^3#### CREATEFX SERVER " + savemode + " BEGIN ####" ); -#/ - file_error = generate_fx_log( type, autosave ); -/# - println( ( "^3#### CREATEFX SERVER " + savemode + " END (Time: " ) + ( ( getTime() - old_time ) * 0,001 ) + " seconds)####" ); -#/ - if ( file_error ) - { -/# - println( "^3#### CREATEFX " + savemode + " CANCELLED ####" ); -#/ - createfx_emergency_backup(); - } - else - { - if ( level.clientscripts && !isDefined( autosave ) ) - { - old_time = getTime(); -/# - println( "\n^3#### CREATEFX CLIENT " + savemode + " BEGIN ####" ); -#/ - file_error = generate_fx_log( "client" ); -/# - println( ( "^3#### CREATEFX CLIENT " + savemode + " END (Time: " ) + ( ( getTime() - old_time ) * 0,001 ) + " seconds)####" ); -#/ - if ( file_error ) - { -/# - iprintln( "CreateFX clientscript file is not writeable! Aborting save." ); -#/ -/# - println( "^3#### CREATEFX " + savemode + " CANCELLED ####" ); -#/ - return; - } - } - flag_clear( "createfx_saving" ); - } -} - -createfx_autosave() -{ - for ( ;; ) - { - wait_time = getDvarInt( "createfx_autosave_time" ); - if ( wait_time < 120 || isstring( wait_time ) ) - { - wait_time = 120; - } - wait wait_time; - if ( !flag( "createfx_saving" ) ) - { - createfx_save( 1 ); - } - } -} - -createfx_emergency_backup() -{ -/# - println( "^5#### CREATEFX EMERGENCY BACKUP BEGIN ####" ); -#/ - file_error = generate_fx_log( "server", 1 ); - if ( file_error ) - { -/# - iprintln( "Error saving to backup.gsc. All is lost!" ); -#/ - } - else - { -/# - println( "^5#### CREATEFX EMERGENCY BACKUP END ####" ); -#/ - } - flag_clear( "createfx_saving" ); -} - -move_player_around_map_fast() -{ - player = get_players()[ 0 ]; - direction = player getplayerangles(); - direction_vec = anglesToForward( direction ); - eye = player geteye(); - trace = bullettrace( eye, eye + vectorScale( direction_vec, 20000 ), 0, undefined ); - dist = distance( eye, trace[ "position" ] ); - position = eye + vectorScale( direction_vec, dist - 64 ); - player setorigin( position ); -} - -move_player_to_next_same_effect( forward_search, lastselectentity ) -{ - player = get_players()[ 0 ]; - direction = player getplayerangles(); - direction_vec = anglesToForward( direction ); - if ( !isDefined( forward_search ) ) - { - forward_search = 1; - } - ent = level.selected_fx_ents[ level.selected_fx_ents.size - 1 ]; - start_index = 0; - if ( level.selected_fx_ents.size <= 0 ) - { - if ( forward_search ) - { - ent = level.cfx_next_ent; - } - else - { - ent = level.cfx_previous_ent; - } - if ( isDefined( ent ) ) - { - index = get_ent_index( ent ); - if ( index >= 0 ) - { - select_entity( index, ent ); - position = ent.v[ "origin" ] - vectorScale( direction_vec, 175 ); - player setorigin( position ); - level.cfx_previous_ent = ent; - level.cfx_next_ent = get_next_ent_with_same_id( index, ent.v[ "fxid" ] ); - } - else if ( forward_search ) - { - level.cfx_next_ent = undefined; - } - else - { - level.cfx_previous_ent = undefined; - } - } - return; - } - if ( level.selected_fx_ents.size == 1 ) - { - i = 0; - while ( i < level.createfxent.size ) - { - if ( isDefined( level.selected_fx[ i ] ) ) - { - start_index = i; - deselect_entity( i, ent ); - break; - } - else - { - i++; - } - } - if ( forward_search ) - { - level.cfx_previous_ent = ent; - ent = get_next_ent_with_same_id( i, ent.v[ "fxid" ] ); - select_entity( level.ent_found_index, ent ); - position = ent.v[ "origin" ] - vectorScale( direction_vec, 175 ); - player setorigin( position ); - level.cfx_next_ent = get_next_ent_with_same_id( level.ent_found_index, ent.v[ "fxid" ] ); - return; - } - else - { - level.cfx_next_ent = ent; - ent = get_previous_ent_with_same_id( i, ent.v[ "fxid" ] ); - select_entity( level.ent_found_index, ent ); - position = ent.v[ "origin" ] - vectorScale( direction_vec, 175 ); - player setorigin( position ); - level.cfx_previous_ent = get_previous_ent_with_same_id( level.ent_found_index, ent.v[ "fxid" ] ); - return; - } - } - else - { - if ( isDefined( level.last_ent_moved_to ) && !last_selected_entity_has_changed( lastselectentity ) ) - { - ent = level.last_ent_moved_to; - } - i = 0; - while ( i < level.selected_fx_ents.size ) - { - if ( ent == level.selected_fx_ents[ i ] ) - { - break; - } - else - { - i++; - } - } - if ( forward_search ) - { - if ( i < ( level.selected_fx_ents.size - 1 ) ) - { - i++; - ent = level.selected_fx_ents[ i ]; - } - else - { - ent = level.selected_fx_ents[ 0 ]; - } - } - else if ( i > 0 ) - { - ent = level.selected_fx_ents[ i - 1 ]; - } - else - { - ent = level.selected_fx_ents[ level.selected_fx_ents.size - 1 ]; - } - level.last_ent_moved_to = ent; - position = ent.v[ "origin" ] - vectorScale( direction_vec, 175 ); - player setorigin( position ); - } -} - -get_next_ent_with_same_id( index, ent_id ) -{ - i = index + 1; - while ( i < level.createfxent.size ) - { - if ( ent_id == level.createfxent[ i ].v[ "fxid" ] ) - { - level.ent_found_index = i; - return level.createfxent[ i ]; - } - i++; - } - i = 0; - while ( i < index ) - { - if ( ent_id == level.createfxent[ i ].v[ "fxid" ] ) - { - level.ent_found_index = i; - return level.createfxent[ i ]; - } - i++; - } - level.ent_found_index = index; - return level.createfxent[ index ]; -} - -get_previous_ent_with_same_id( index, ent_id ) -{ - i = index - 1; - while ( i > 0 ) - { - if ( ent_id == level.createfxent[ i ].v[ "fxid" ] ) - { - level.ent_found_index = i; - return level.createfxent[ i ]; - } - i--; - - } - i = level.createfxent.size - 1; - while ( i > index ) - { - if ( ent_id == level.createfxent[ i ].v[ "fxid" ] ) - { - level.ent_found_index = i; - return level.createfxent[ i ]; - } - i--; - - } - level.ent_found_index = index; - return level.createfxent[ index ]; -} - -get_ent_index( ent ) -{ - i = 0; - while ( i < level.createfxent.size ) - { - if ( ent == level.createfxent[ i ] ) - { - return i; - } - i++; - } - return -1; -} - -select_ents_by_property( property, add_to_selection ) -{ - ent = level.selected_fx_ents[ level.selected_fx_ents.size - 1 ]; - prop_to_match = ent.v[ property ]; - if ( !isDefined( add_to_selection ) ) - { - clear_entity_selection(); - } - i = 0; - while ( i < level.createfxent.size ) - { - if ( isDefined( level.createfxent[ i ].v[ property ] ) ) - { - if ( level.createfxent[ i ].v[ property ] == prop_to_match ) - { - select_entity( i, level.createfxent[ i ] ); - } - } - i++; - } -} - -print_ambient_fx_inventory() -{ -/# - fx_list = get_level_ambient_fx(); - ent_list = []; - fx_list_count = []; - println( "\n\n^2INVENTORY OF AMBIENT EFFECTS: " ); - i = 0; - while ( i < level.createfxent.size ) - { - ent_list[ i ] = level.createfxent[ i ].v[ "fxid" ]; - i++; - } - i = 0; - while ( i < fx_list.size ) - { - count = 0; - j = 0; - while ( j < ent_list.size ) - { - if ( fx_list[ i ] == ent_list[ j ] ) - { - count++; - ent_list[ j ] = ""; - } - j++; - } - fx_list_count[ i ] = count; - i++; - } - i = 0; - while ( i < ( fx_list_count.size - 1 ) ) - { - j = i + 1; - while ( j < fx_list_count.size ) - { - if ( fx_list_count[ j ] < fx_list_count[ i ] ) - { - temp_count = fx_list_count[ i ]; - temp_id = fx_list[ i ]; - fx_list_count[ i ] = fx_list_count[ j ]; - fx_list[ i ] = fx_list[ j ]; - fx_list_count[ j ] = temp_count; - fx_list[ j ] = temp_id; - } - j++; - } - i++; - } - i = 0; - while ( i < fx_list_count.size ) - { - switch( fx_list_count[ i ] ) - { - case 0: - print( "^1" ); - break; - case 1: - print( "^3" ); - break; - default: - } - print( fx_list_count[ i ] + "\t" + fx_list[ i ] + "\n" ); - i++; - } - print( "\n" ); -#/ - } -} - -vector_changed( old, new ) -{ - if ( distancesquared( old, new ) >= 1 ) - { - return 1; - } - return 0; -} - -dot_changed( old, new ) -{ - dot = vectordot( old, new ); - if ( dot < 1 ) - { - return 1; - } - return 0; -} - -damage_void( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) -{ -} - -handle_camera() -{ -/# - level notify( "new_camera" ); - level endon( "new_camera" ); - movement = ( 1, 1, 1 ); - if ( !isDefined( level.camera ) ) - { - level.camera = spawn( "script_origin", ( 1, 1, 1 ) ); - level.camera setmodel( "tag_origin" ); - } - players = get_players(); - players[ 0 ] playerlinktodelta( level.camera, "tag_origin", 1, 0, 0, 0, 0, 1 ); - players[ 0 ] disableweapons(); - level.camera_snapto = 1; - level.stick_camera = 1; - level.camera_prev_snapto = 0; - level.cameravec = ( 90, 150, 20 ); - model = undefined; - n_y_vector = 0; - n_x_vector = 0; - zoom_level = 300; - b_changes_x = 0; - b_changes_z = 0; - b_changes_y = 0; - test_string = ""; - for ( ;; ) - { - while ( 1 ) - { - if ( level.camera_snapto > 0 ) - { - if ( level.stick_camera ) - { - originoffset = vectorScale( level.cameravec, -1 ); - temp_offset = originoffset + vectorScale( ( 1, 1, 1 ), 60 ); - anglesoffset = vectorToAngle( temp_offset ); - if ( level.camera_prev_snapto == level.camera_snapto ) - { - players = get_players(); - newmovement = players[ 0 ] getnormalizedmovement(); - dolly_movement = players[ 0 ] getnormalizedcameramovement(); - if ( button_is_held( "BUTTON_LTRIG" ) || button_is_held( "BUTTON_RTRIG" ) ) - { - } - else - { - if ( newmovement[ 1 ] <= -0,4 ) - { - n_y_vector += -0,2; - b_changes_y = 1; - } - else if ( newmovement[ 1 ] >= 0,4 ) - { - n_y_vector += 0,2; - b_changes_y = 1; - } - else - { - b_changes_y = 0; - } - if ( newmovement[ 0 ] <= -0,4 ) - { - n_x_vector += -0,4; - b_changes_x = 1; - } - else if ( newmovement[ 0 ] >= 0,4 ) - { - n_x_vector += 0,4; - b_changes_x = 1; - } - else - { - b_changes_x = 0; - } - if ( dolly_movement[ 0 ] <= -0,4 ) - { - zoom_level += 30; - b_changes_z = 1; - } - else if ( dolly_movement[ 0 ] >= 0,4 ) - { - zoom_level += -30; - b_changes_z = 1; - } - else - { - b_changes_z = 0; - } - if ( !b_changes_z || b_changes_x && b_changes_y ) - { - newmovement = ( n_x_vector, n_y_vector, newmovement[ 2 ] ); - movement = ( 1, 1, 1 ); - movement = vectorScale( movement, 0,8 ) + vectorScale( newmovement, 1 - 0,8 ); - tilt = max( 0, 10 + ( movement[ 0 ] * 160 ) ); - level.cameravec = ( cos( movement[ 1 ] * 180 ) * zoom_level, sin( movement[ 1 ] * 180 ) * zoom_level, tilt ); - iprintln( level.cameravec[ 0 ] + " " + level.cameravec[ 1 ] + " " + level.cameravec[ 2 ] ); - } - } - } - else - { - level.camera_prev_snapto = level.camera_snapto; - } - if ( isDefined( level.current_select_ent ) ) - { - originoffset = vectorScale( level.cameravec, -1 ); - temp_offset = originoffset + vectorScale( ( 1, 1, 1 ), 60 ); - anglesoffset = vectorToAngle( temp_offset ); - if ( !isDefined( model ) ) - { - model = spawn( "script_origin", level.current_select_ent.v[ "origin" ] ); - model setmodel( "tag_origin" ); - } - if ( model.origin != level.current_select_ent.v[ "origin" ] ) - { - model.origin = level.current_select_ent.v[ "origin" ]; - } - level.camera linkto( model, "tag_origin", level.cameravec, anglesoffset ); - break; - } - else - { - wait 0,05; - } - } - } - else level.camera unlink(); - } - wait 0,05; -#/ - } -} - -camera_hud_toggle( text ) -{ - if ( isDefined( level.camera_hud ) ) - { - level.camera_hud destroy(); - } - level.camera_hud = newdebughudelem(); - level.camera_hud settext( text ); - level.camera_hud.horzalign = "left"; - level.camera_hud.vertalign = "bottom"; - level.camera_hud.alignx = "left"; - level.camera_hud.aligny = "bottom"; - level.camera_hud.foreground = 1; - level.camera_hud.fontscale = 1,1; - level.camera_hud.sort = 21; - level.camera_hud.alpha = 1; - level.camera_hud.color = ( 1, 1, 1 ); -} - -init_sp_paths() -{ -} - -make_sp_player_invulnerable( player ) -{ -} - -delete_arrays_in_sp() -{ -} - -used_in_animation( sp ) -{ -} - -init_client_sp_variables() -{ -} - -init_mp_paths() -{ - level.cfx_server_scriptdata = "mpcreatefx/"; - level.cfx_client_scriptdata = "mpclientcreatefx/"; - level.cfx_server_loop = "maps\\mp\\_utility::createLoopEffect"; - level.cfx_server_oneshot = "maps\\mp\\_utility::createOneshotEffect"; - level.cfx_server_exploder = "maps\\mp\\_utility::createExploder"; - level.cfx_server_loopsound = "maps\\mp\\_createfx::createLoopSound"; - level.cfx_server_scriptgendump = "maps\\mp\\createfx\\" + level.script + "_fx::main();"; - level.cfx_client_loop = "clientscripts\\mp\\_fx::createLoopEffect"; - level.cfx_client_oneshot = "clientscripts\\mp\\_fx::createOneshotEffect"; - level.cfx_client_exploder = "clientscripts\\mp\\_fx::createExploder"; - level.cfx_client_loopsound = "clientscripts\\mp\\_fx::createLoopSound"; - level.cfx_client_scriptgendump = "clientscripts\\mp\\_createfx\\" + level.script + "_fx::main();"; - level.cfx_func_run_gump_func = ::empty; - level.cfx_func_loopfx = ::maps/mp/_fx::loopfxthread; - level.cfx_func_oneshotfx = ::maps/mp/_fx::oneshotfxthread; - level.cfx_func_soundfx = ::maps/mp/_fx::create_loopsound; - level.cfx_func_script_gen_dump = ::maps/mp/_script_gen::script_gen_dump; - level.cfx_func_stop_loopsound = ::maps/mp/_fx::stop_loopsound; - level.cfx_func_create_looper = ::maps/mp/_fx::create_looper; - level.cfx_func_create_triggerfx = ::maps/mp/_fx::create_triggerfx; - level.cfx_func_create_loopsound = ::maps/mp/_fx::create_loopsound; -} - -callback_playerconnect() -{ - self waittill( "begin" ); - if ( !isDefined( level.hasspawned ) ) - { - spawnpoints = getentarray( "mp_global_intermission", "classname" ); - if ( !spawnpoints.size ) - { - spawnpoints = getentarray( "info_player_start", "classname" ); - } -/# - assert( spawnpoints.size ); -#/ - spawnpoint = spawnpoints[ 0 ]; - self.sessionteam = "none"; - self.sessionstate = "playing"; - if ( !level.teambased ) - { - self.ffateam = "none"; - } - self spawn( spawnpoint.origin, spawnpoint.angles ); - level.player = self; - level.hasspawned = 1; - } - else - { - kick( self.name ); - } -} - -delete_spawns() -{ - spawn_classes = []; - spawn_classes[ spawn_classes.size ] = "mp_dm_spawn"; - spawn_classes[ spawn_classes.size ] = "mp_tdm_spawn"; - spawn_classes[ spawn_classes.size ] = "mp_dom_spawn"; - spawn_classes[ spawn_classes.size ] = "mp_dom_spawn_axis_start"; - spawn_classes[ spawn_classes.size ] = "mp_dom_spawn_allies_start"; - spawn_classes[ spawn_classes.size ] = "mp_res_spawn_allies"; - spawn_classes[ spawn_classes.size ] = "mp_res_spawn_axis"; - spawn_classes[ spawn_classes.size ] = "mp_res_spawn_axis_start"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_attacker"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_attacker_a"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_attacker_b"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_attacker_c"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_attacker_start"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_attackerOT_start"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_defender"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_defender_a"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_defender_b"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_defender_c"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_defender_start"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_defenderOT_start"; - _a4256 = spawn_classes; - _k4256 = getFirstArrayKey( _a4256 ); - while ( isDefined( _k4256 ) ) - { - class = _a4256[ _k4256 ]; - spawns = getentarray( class, "classname" ); - _a4260 = spawns; - _k4260 = getFirstArrayKey( _a4260 ); - while ( isDefined( _k4260 ) ) - { - spawn = _a4260[ _k4260 ]; - spawn delete(); - _k4260 = getNextArrayKey( _a4260, _k4260 ); - } - _k4256 = getNextArrayKey( _a4256, _k4256 ); - } -} - -createfxdelay() -{ - wait 10; - level.createfx_delay_done = 1; -} - -init_client_mp_variables() -{ - level.cfx_exploder_before = ::maps/mp/_utility::exploder_before_load; - level.cfx_exploder_after = ::maps/mp/_utility::exploder_after_load; -} diff --git a/Zombie Core/patch_zm/maps/mp/_createfxmenu.gsc b/Zombie Core/patch_zm/maps/mp/_createfxmenu.gsc deleted file mode 100644 index 163c53f..0000000 --- a/Zombie Core/patch_zm/maps/mp/_createfxmenu.gsc +++ /dev/null @@ -1,1019 +0,0 @@ -#include maps/mp/_createfxundo; -#include maps/mp/_createfx; -#include maps/mp/_utility; -#include common_scripts/utility; - -menu( name ) -{ -/# - return level.create_fx_menu == name; -#/ -} - -setmenu( name ) -{ -/# - level.create_fx_menu = name; -#/ -} - -create_fx_menu() -{ -/# - if ( button_is_clicked( "escape", "x" ) ) - { - exit_menu(); - return; - } - if ( menu( "creation" ) ) - { - if ( button_is_clicked( "1" ) ) - { - setmenu( "create_oneshot" ); - draw_effects_list(); - return; - } - if ( button_is_clicked( "2" ) ) - { - setmenu( "create_loopfx" ); - draw_effects_list(); - return; - } - if ( button_is_clicked( "3" ) ) - { - setmenu( "create_exploder" ); - draw_effects_list(); - return; - } - if ( button_is_clicked( "4" ) ) - { - setmenu( "create_loopsound" ); - ent = createloopsound(); - finish_creating_entity( ent ); - setmenu( "none" ); - return; - } - } - if ( !menu( "create_oneshot" ) && !menu( "create_loopfx" ) || menu( "create_exploder" ) && menu( "change_fxid" ) ) - { - if ( button_is_clicked( "rightarrow" ) ) - { - increment_list_offset(); - draw_effects_list(); - } - if ( button_is_clicked( "leftarrow" ) ) - { - decrement_list_offset(); - draw_effects_list(); - } - menu_fx_creation(); - } - else - { - if ( menu( "none" ) ) - { - menu_change_selected_fx(); - if ( entities_are_selected() ) - { - display_fx_info( get_last_selected_entity() ); - if ( button_is_clicked( "a" ) ) - { - clear_settable_fx(); - setmenu( "add_options" ); - } - } - return; - } - else if ( menu( "add_options" ) ) - { - if ( !entities_are_selected() ) - { - clear_fx_hudelements(); - setmenu( "none" ); - return; - } - display_fx_add_options( get_last_selected_entity() ); - if ( button_is_clicked( "rightarrow" ) ) - { - increment_list_offset(); - } - if ( button_is_clicked( "leftarrow" ) ) - { - decrement_list_offset(); - } - return; - } - else if ( menu( "jump_to_effect" ) ) - { - if ( button_is_clicked( "rightarrow" ) ) - { - increment_list_offset(); - draw_effects_list( "Select effect to jump to:" ); - } - if ( button_is_clicked( "leftarrow" ) ) - { - decrement_list_offset(); - draw_effects_list( "Select effect to jump to:" ); - } - jump_to_effect(); - return; - } - else if ( menu( "select_by_property" ) ) - { - menu_selection(); - if ( button_is_clicked( "rightarrow" ) ) - { - increment_list_offset(); - } - if ( button_is_clicked( "leftarrow" ) ) - { - decrement_list_offset(); - } - return; - } - else if ( menu( "change_type" ) ) - { - if ( !entities_are_selected() ) - { - clear_fx_hudelements(); - setmenu( "none" ); - return; - return; - } - else - { - menu_fx_type(); -#/ - } - } - } -} - -exit_menu() -{ -/# - clear_fx_hudelements(); - clear_entity_selection(); - update_selected_entities(); - setmenu( "none" ); -#/ -} - -get_last_selected_entity() -{ -/# - return level.selected_fx_ents[ level.selected_fx_ents.size - 1 ]; -#/ -} - -menu_fx_creation() -{ -/# - count = 0; - picked_fx = undefined; - keys = get_level_ambient_fx(); - i = level.effect_list_offset; - while ( i < keys.size ) - { - count += 1; - button_to_check = count; - if ( button_to_check == 10 ) - { - button_to_check = 0; - } - if ( button_is_clicked( button_to_check + "" ) && !button_is_held( "f" ) ) - { - picked_fx = keys[ i ]; - break; - } - else - { - if ( count > level.effect_list_offset_max ) - { - break; - } - else - { - i++; - } - } - } - if ( !isDefined( picked_fx ) ) - { - return; - } - if ( menu( "change_fxid" ) ) - { - apply_option_to_selected_fx( get_option( "fxid" ), picked_fx ); - level.effect_list_offset = 0; - clear_fx_hudelements(); - setmenu( "none" ); - return; - } - ent = undefined; - if ( menu( "create_loopfx" ) ) - { - ent = createloopeffect( picked_fx ); - } - if ( menu( "create_oneshot" ) ) - { - ent = createoneshoteffect( picked_fx ); - delay_min = getDvarInt( "createfx_oneshot_min_delay" ); - delay_max = getDvarInt( "createfx_oneshot_max_delay" ); - if ( delay_min > delay_max ) - { - temp = delay_min; - delay_min = delay_max; - delay_max = temp; - } - ent.v[ "delay" ] = randomintrange( delay_min, delay_max ); - } - if ( menu( "create_exploder" ) ) - { - ent = createexploder( picked_fx ); - } - finish_creating_entity( ent ); - if ( level.cfx_last_action != "none" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - } - store_undo_state( "add", level.createfxent[ level.createfxent.size - 1 ] ); - level.cfx_last_action = "none"; - setmenu( "none" ); -#/ -} - -finish_creating_entity( ent ) -{ -/# - ent.v[ "angles" ] = vectorToAngle( ( ent.v[ "origin" ] + vectorScale( ( 1, 1, 0 ), 100 ) ) - ent.v[ "origin" ] ); - assert( isDefined( ent ) ); - ent post_entity_creation_function(); - clear_entity_selection(); - select_last_entity( "skip_undo" ); - move_selection_to_cursor( "skip_undo" ); - update_selected_entities(); -#/ -} - -change_effect_to_oneshot( ent ) -{ -/# - if ( ent.v[ "type" ] == "oneshotfx" ) - { - return; - } - if ( ent.v[ "type" ] == "exploder" ) - { - } - if ( !isDefined( ent.v[ "delay" ] ) || ent.v[ "delay" ] == 0 ) - { - delay_min = getDvarInt( "createfx_oneshot_min_delay" ); - delay_max = getDvarInt( "createfx_oneshot_max_delay" ); - if ( delay_min > delay_max ) - { - temp = delay_min; - delay_min = delay_max; - delay_max = temp; - } - ent.v[ "delay" ] = randomintrange( delay_min, delay_max ); - } - ent.v[ "type" ] = "oneshotfx"; -#/ -} - -change_effect_to_loop( ent ) -{ -/# - if ( ent.v[ "type" ] == "loopfx" ) - { - return; - } - if ( ent.v[ "type" ] == "exploder" ) - { - } - if ( !isDefined( ent.v[ "delay" ] ) || ent.v[ "delay" ] <= 0 ) - { - ent.v[ "delay" ] = 1; - } - ent.v[ "type" ] = "loopfx"; -#/ -} - -change_effect_to_exploder( ent ) -{ -/# - if ( ent.v[ "type" ] == "exploder" ) - { - return; - } - ent.v[ "type" ] = "exploder"; - if ( !isDefined( ent.v[ "delay" ] ) || ent.v[ "delay" ] < 0 ) - { - ent.v[ "delay" ] = 0; - } - ent.v[ "exploder" ] = 1; - ent.v[ "exploder_type" ] = "normal"; -#/ -} - -change_ent_type( newtype ) -{ -/# - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "ent_type"; - if ( newtype == "oneshotfx" ) - { - i = 0; - while ( i < level.selected_fx_ents.size ) - { - change_effect_to_oneshot( level.selected_fx_ents[ i ] ); - i++; - } - } - else if ( newtype == "loopfx" ) - { - i = 0; - while ( i < level.selected_fx_ents.size ) - { - change_effect_to_loop( level.selected_fx_ents[ i ] ); - i++; - } - } - else while ( newtype == "exploder" ) - { - i = 0; - while ( i < level.selected_fx_ents.size ) - { - change_effect_to_exploder( level.selected_fx_ents[ i ] ); - i++; -#/ - } - } -} - -menu_init() -{ -/# - level.createfx_options = []; - addoption( "string", "type", "Type", "oneshotfx", "fx" ); - addoption( "string", "fxid", "Name", "nil", "fx" ); - addoption( "vector", "origin", "Origin", ( 1, 1, 0 ), "fx" ); - addoption( "vector", "angles", "Angles", ( 1, 1, 0 ), "fx" ); - addoption( "float", "delay", "Repeat rate/start delay", 0,5, "fx" ); - addoption( "int", "repeat", "Number of times to repeat", 5, "exploder" ); - addoption( "float", "primlightfrac", "Primary light fraction", 1, "fx" ); - addoption( "int", "lightoriginoffs", "Light origin offset", 64, "fx" ); - addoption( "float", "delay_min", "Minimum time between repeats", 1, "exploder" ); - addoption( "float", "delay_max", "Maximum time between repeats", 2, "exploder" ); - addoption( "float", "fire_range", "Fire damage range", 0, "fx" ); - addoption( "string", "firefx", "2nd FX id", "nil", "exploder" ); - addoption( "float", "firefxdelay", "2nd FX id repeat rate", 0,5, "exploder" ); - addoption( "float", "firefxtimeout", "2nd FX timeout", 5, "exploder" ); - addoption( "string", "firefxsound", "2nd FX soundalias", "nil", "exploder" ); - addoption( "string", "ender", "Level notify for ending 2nd FX", "nil", "exploder" ); - addoption( "string", "rumble", "Rumble", "nil", "exploder" ); - addoption( "float", "damage", "Radius damage", 150, "exploder" ); - addoption( "float", "damage_radius", "Radius of radius damage", 250, "exploder" ); - addoption( "int", "exploder", "Exploder", 1, "exploder" ); - addoption( "string", "earthquake", "Earthquake", "nil", "exploder" ); - addoption( "string", "soundalias", "Soundalias", "nil", "all" ); - addoption( "int", "stoppable", "Can be stopped from script", "1", "all" ); - level.effect_list_offset = 0; - level.effect_list_offset_max = 9; - level.createfxmasks = []; - level.createfxmasks[ "all" ] = []; - level.createfxmasks[ "all" ][ "exploder" ] = 1; - level.createfxmasks[ "all" ][ "oneshotfx" ] = 1; - level.createfxmasks[ "all" ][ "loopfx" ] = 1; - level.createfxmasks[ "all" ][ "soundfx" ] = 1; - level.createfxmasks[ "fx" ] = []; - level.createfxmasks[ "fx" ][ "exploder" ] = 1; - level.createfxmasks[ "fx" ][ "oneshotfx" ] = 1; - level.createfxmasks[ "fx" ][ "loopfx" ] = 1; - level.createfxmasks[ "exploder" ] = []; - level.createfxmasks[ "exploder" ][ "exploder" ] = 1; - level.createfxmasks[ "loopfx" ] = []; - level.createfxmasks[ "loopfx" ][ "loopfx" ] = 1; - level.createfxmasks[ "oneshotfx" ] = []; - level.createfxmasks[ "oneshotfx" ][ "oneshotfx" ] = 1; - level.createfxmasks[ "soundfx" ] = []; - level.createfxmasks[ "soundfx" ][ "soundalias" ] = 1; -#/ -} - -get_last_selected_ent() -{ -/# - return level.selected_fx_ents[ level.selected_fx_ents.size - 1 ]; -#/ -} - -entities_are_selected() -{ -/# - return level.selected_fx_ents.size > 0; -#/ -} - -menu_change_selected_fx() -{ -/# - if ( !level.selected_fx_ents.size ) - { - return; - } - count = 0; - drawncount = 0; - ent = get_last_selected_ent(); - i = 0; - while ( i < level.createfx_options.size ) - { - option = level.createfx_options[ i ]; - if ( !isDefined( ent.v[ option[ "name" ] ] ) ) - { - i++; - continue; - } - else count++; - if ( count < level.effect_list_offset ) - { - i++; - continue; - } - else - { - drawncount++; - button_to_check = drawncount; - if ( button_to_check == 10 ) - { - button_to_check = 0; - } - if ( button_is_clicked( button_to_check + "" ) && !button_is_held( "f" ) ) - { - prepare_option_for_change( option, drawncount ); - return; - } - else - { - if ( drawncount > level.effect_list_offset_max ) - { - return; - } - } - else - { - i++; -#/ - } - } - } -} - -prepare_option_for_change( option, drawncount ) -{ -/# - if ( option[ "name" ] == "fxid" ) - { - setmenu( "change_fxid" ); - draw_effects_list(); - return; - } - if ( option[ "name" ] == "type" ) - { - setmenu( "change_type" ); - return; - } - level.createfx_inputlocked = 1; - set_option_index( option[ "name" ] ); - setdvar( "fx", "nil" ); - level.createfxhudelements[ drawncount + 1 ][ 0 ].color = ( 1, 1, 0 ); -#/ -} - -menu_fx_option_set() -{ -/# - if ( getDvar( "fx" ) == "nil" ) - { - return; - } - option = get_selected_option(); - setting = undefined; - if ( option[ "type" ] == "string" ) - { - setting = getDvar( "fx" ); - } - if ( option[ "type" ] == "int" ) - { - setting = getDvarInt( "fx" ); - } - if ( option[ "type" ] == "float" ) - { - setting = getDvarFloat( "fx" ); - } - if ( option[ "type" ] == "vector" ) - { - setting = getDvar( "fx" ); - temparray = strtok( setting, " " ); - if ( temparray.size == 3 ) - { - setting = ( float( temparray[ 0 ] ), float( temparray[ 1 ] ), float( temparray[ 2 ] ) ); - } - else - { - clear_settable_fx(); - return; - } - } - apply_option_to_selected_fx( option, setting ); -#/ -} - -menu_fx_type() -{ -/# - clear_fx_hudelements(); - set_fx_hudelement( "Change effect type to:" ); - set_fx_hudelement( " (1) Oneshot" ); - set_fx_hudelement( " (2) Looped" ); - set_fx_hudelement( " (3) Exploder" ); - set_fx_hudelement( "(x) Exit >" ); - if ( button_is_clicked( "1" ) && !button_is_held( "f" ) ) - { - change_ent_type( "oneshotfx" ); - setmenu( "none" ); - } - else - { - if ( button_is_clicked( "2" ) && !button_is_held( "f" ) ) - { - change_ent_type( "loopfx" ); - setmenu( "none" ); - } - else - { - if ( button_is_clicked( "3" ) && !button_is_held( "f" ) ) - { - change_ent_type( "exploder" ); - setmenu( "none" ); - } - } - } - if ( menu( "none" ) ) - { - update_selected_entities(); -#/ - } -} - -menu_selection() -{ -/# - clear_fx_hudelements(); - set_fx_hudelement( "Select all by property:" ); - drawncount = 0; - option_number = 0; - ent = level.selected_fx_ents[ level.selected_fx_ents.size - 1 ]; - if ( level.selected_fx_ents.size < 1 ) - { - set_fx_hudelement( "No ent is selected." ); - } - else i = level.effect_list_offset; - while ( i < level.createfx_options.size ) - { - if ( drawncount > level.effect_list_offset_max ) - { - break; - } - else if ( drawncount > ent.v.size ) - { - break; - } - else - { - prop_name = level.createfx_options[ i ][ "name" ]; - option_number = drawncount + 1; - if ( isDefined( ent.v[ prop_name ] ) ) - { - if ( button_is_clicked( option_number + "" ) && !button_is_held( "f" ) ) - { - level.cfx_selected_prop = prop_name; - menunone(); - level.effect_list_offset = 0; - return; - } - prop_desc = level.createfx_options[ i ][ "description" ]; - set_fx_hudelement( ( option_number + ". " ) + prop_desc + ": " + ent.v[ prop_name ] ); - drawncount++; - i++; - continue; - } - i++; - } - } - if ( drawncount > level.effect_list_offset_max ) - { - pages = ceil( ent.v.size / level.effect_list_offset_max ); - current_page = ( level.effect_list_offset / level.effect_list_offset_max ) + 1; - set_fx_hudelement( "(<-) Page " + current_page + " of " + pages + " (->)" ); - } - set_fx_hudelement( "(x) Exit >" ); -#/ -} - -apply_option_to_selected_fx( option, setting ) -{ -/# - if ( level.cfx_last_action != option[ "name" ] ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = option[ "name" ]; - } - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - if ( mask( option[ "mask" ], ent.v[ "type" ] ) ) - { - ent.v[ option[ "name" ] ] = setting; - } - i++; - } - update_selected_entities(); - clear_settable_fx(); -#/ -} - -set_option_index( name ) -{ -/# - i = 0; - while ( i < level.createfx_options.size ) - { - if ( level.createfx_options[ i ][ "name" ] != name ) - { - i++; - continue; - } - else - { - level.selected_fx_option_index = i; - return; - } - i++; -#/ - } -} - -get_selected_option() -{ -/# - return level.createfx_options[ level.selected_fx_option_index ]; -#/ -} - -mask( type, name ) -{ -/# - return isDefined( level.createfxmasks[ type ][ name ] ); -#/ -} - -addoption( type, name, description, defaultsetting, mask ) -{ -/# - option = []; - option[ "type" ] = type; - option[ "name" ] = name; - option[ "description" ] = description; - option[ "default" ] = defaultsetting; - option[ "mask" ] = mask; - level.createfx_options[ level.createfx_options.size ] = option; -#/ -} - -get_option( name ) -{ -/# - i = 0; - while ( i < level.createfx_options.size ) - { - if ( level.createfx_options[ i ][ "name" ] == name ) - { - return level.createfx_options[ i ]; - } - i++; -#/ - } -} - -display_fx_info( ent ) -{ -/# - if ( !menu( "none" ) ) - { - return; - } - clear_fx_hudelements(); - if ( !level.createfx_draw_enabled ) - { - return; - } - set_fx_hudelement( "Selected: " + level.selected_fx_ents.size + " Distance: " + get_distance_from_ent( ent ) ); - level.createfxhudelements[ 0 ][ 0 ].color = ( 1, 1, 0 ); - set_fx_hudelement( "Name: " + ent.v[ "fxid" ] ); - if ( entities_are_selected() ) - { - count = 0; - drawncount = 0; - i = 0; - while ( i < level.createfx_options.size ) - { - option = level.createfx_options[ i ]; - if ( !isDefined( ent.v[ option[ "name" ] ] ) ) - { - i++; - continue; - } - else count++; - if ( count < level.effect_list_offset ) - { - i++; - continue; - } - else - { - drawncount++; - set_fx_hudelement( ( drawncount + ". " ) + option[ "description" ] + ": " + ent.v[ option[ "name" ] ] ); - if ( drawncount > level.effect_list_offset_max ) - { - more = 1; - break; - } - } - else - { - i++; - } - } - if ( count > level.effect_list_offset_max ) - { - pages = ceil( level.createfx_options.size / level.effect_list_offset_max ); - current_page = ( level.effect_list_offset / level.effect_list_offset_max ) + 1; - set_fx_hudelement( "(<-) Page " + current_page + " of " + pages + " (->)" ); - } - set_fx_hudelement( "(a) Add >" ); - set_fx_hudelement( "(x) Exit >" ); - } - else - { - set_fx_hudelement( "Origin: " + ent.v[ "origin" ] ); - set_fx_hudelement( "Angles: " + ent.v[ "angles" ] ); -#/ - } -} - -display_fx_add_options( ent ) -{ -/# - assert( menu( "add_options" ) ); - assert( entities_are_selected() ); - clear_fx_hudelements(); - set_fx_hudelement( "Selected: " + level.selected_fx_ents.size + " Distance: " + get_distance_from_ent( ent ) ); - level.createfxhudelements[ 0 ][ 0 ].color = ( 1, 1, 0 ); - set_fx_hudelement( "Name: " + ent.v[ "fxid" ] ); - set_fx_hudelement( "Origin: " + ent.v[ "origin" ] ); - set_fx_hudelement( "Angles: " + ent.v[ "angles" ] ); - count = 0; - drawncount = 0; - if ( level.effect_list_offset >= level.createfx_options.size ) - { - level.effect_list_offset = 0; - } - i = 0; - while ( i < level.createfx_options.size ) - { - option = level.createfx_options[ i ]; - if ( isDefined( ent.v[ option[ "name" ] ] ) ) - { - i++; - continue; - } - else if ( !mask( option[ "mask" ], ent.v[ "type" ] ) ) - { - i++; - continue; - } - else count++; - if ( count < level.effect_list_offset ) - { - i++; - continue; - } - else if ( drawncount >= level.effect_list_offset_max ) - { - i++; - continue; - } - else - { - drawncount++; - button_to_check = drawncount; - if ( button_to_check == 10 ) - { - button_to_check = 0; - } - if ( button_is_clicked( button_to_check + "" ) && !button_is_held( "f" ) ) - { - add_option_to_selected_entities( option ); - menunone(); - return; - } - set_fx_hudelement( ( button_to_check + ". " ) + option[ "description" ] ); - } - i++; - } - if ( count > level.effect_list_offset_max ) - { - pages = ceil( level.createfx_options.size / level.effect_list_offset_max ); - current_page = ( level.effect_list_offset / level.effect_list_offset_max ) + 1; - set_fx_hudelement( "(<-) Page " + current_page + " of " + pages + " (->)" ); - } - set_fx_hudelement( "(x) Exit >" ); -#/ -} - -add_option_to_selected_entities( option ) -{ -/# - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - if ( mask( option[ "mask" ], ent.v[ "type" ] ) ) - { - ent.v[ option[ "name" ] ] = option[ "default" ]; - } - i++; -#/ - } -} - -menunone() -{ -/# - level.effect_list_offset = 0; - clear_fx_hudelements(); - setmenu( "none" ); -#/ -} - -draw_effects_list( title ) -{ -/# - clear_fx_hudelements(); - if ( !isDefined( title ) ) - { - title = "Pick an effect:"; - } - set_fx_hudelement( title ); - count = 0; - more = 0; - keys = get_level_ambient_fx(); - if ( level.effect_list_offset >= keys.size ) - { - level.effect_list_offset = 0; - } - else - { - if ( level.effect_list_offset < 0 ) - { - level.effect_list_offset = int( floor( keys.size / level.effect_list_offset_max ) * level.effect_list_offset_max ); - } - } - i = level.effect_list_offset; - while ( i < keys.size ) - { - count += 1; - set_fx_hudelement( ( count + ". " ) + keys[ i ] ); - if ( count >= level.effect_list_offset_max ) - { - more = 1; - break; - } - else - { - i++; - } - } - if ( keys.size > level.effect_list_offset_max ) - { - pages = ceil( keys.size / level.effect_list_offset_max ); - current_page = ( level.effect_list_offset / level.effect_list_offset_max ) + 1; - set_fx_hudelement( "(<-) Page " + current_page + " of " + pages + " (->)" ); -#/ - } -} - -increment_list_offset() -{ -/# - level.effect_list_offset += level.effect_list_offset_max; -#/ -} - -decrement_list_offset() -{ -/# - level.effect_list_offset -= level.effect_list_offset_max; -#/ -} - -jump_to_effect() -{ -/# - count = 0; - picked_fxid = undefined; - keys = get_level_ambient_fx(); - i = level.effect_list_offset; - while ( i < keys.size ) - { - count += 1; - button_to_check = count; - if ( button_to_check == 10 ) - { - button_to_check = 0; - } - if ( button_is_clicked( button_to_check + "" ) && !button_is_held( "f" ) ) - { - picked_fxid = keys[ i ]; - break; - } - else - { - if ( count > level.effect_list_offset_max ) - { - break; - } - else - { - i++; - } - } - } - if ( !isDefined( picked_fxid ) ) - { - return; - } - clear_entity_selection(); - ent = get_next_ent_with_same_id( -1, picked_fxid ); - if ( isDefined( ent ) ) - { - level.cfx_next_ent = ent; - move_player_to_next_same_effect( 1 ); - } - else - { - iprintln( "Effect " + picked_fxid + " has not been placed." ); - } - level.effect_list_offset = 0; - clear_fx_hudelements(); - setmenu( "none" ); -#/ -} - -get_level_ambient_fx() -{ -/# - if ( !isDefined( level._effect_keys ) ) - { - keys = getarraykeys( level._effect ); - level._effect_keys = []; - k = 0; - i = 0; - while ( i < keys.size ) - { - if ( issubstr( keys[ i ], "fx_" ) ) - { - level._effect_keys[ k ] = keys[ i ]; - k++; - } - i++; - } - if ( level._effect_keys.size == 0 ) - { - level._effect_keys = keys; - } - } - return level._effect_keys; -#/ -} - -get_distance_from_ent( ent ) -{ -/# - player = get_players()[ 0 ]; - return distance( player geteye(), ent.v[ "origin" ] ); -#/ -} diff --git a/Zombie Core/patch_zm/maps/mp/_createfxundo.gsc b/Zombie Core/patch_zm/maps/mp/_createfxundo.gsc deleted file mode 100644 index 082e0ed..0000000 --- a/Zombie Core/patch_zm/maps/mp/_createfxundo.gsc +++ /dev/null @@ -1,545 +0,0 @@ -#include maps/mp/_createfxmenu; -#include maps/mp/_createfx; -#include maps/mp/_utility; -#include common_scripts/utility; - -store_undo_state( change_type, ents ) -{ - if ( !isDefined( level.cfx_undo_states ) ) - { - level.cfx_undo_states = []; - level.cfx_redo_states = []; - level.cfx_limbo_state = spawnstruct(); - level.cfx_max_states = 10; - } - if ( !isarray( ents ) ) - { - ents = array( ents ); - } - temp_array = []; - i = 0; - while ( i < ents.size ) - { - temp_array[ i ] = copy_fx_ent( ents[ i ] ); - i++; - } - state = spawnstruct(); - state.operation = change_type; - state.last_action = level.cfx_last_action; - state.ent_array = temp_array; - if ( level.cfx_undo_states.size >= level.cfx_max_states ) - { - level.cfx_undo_states = array_drop( level.cfx_undo_states ); - } - level.cfx_undo_states[ level.cfx_undo_states.size ] = state; - level.cfx_redo_states = []; - level.cfx_limbo_state = undefined; - debug_print_latest_state( "undo" ); -} - -undo() -{ - if ( isDefined( level.createfxent ) || !isDefined( level.cfx_undo_states ) && level.cfx_undo_states.size < 1 ) - { - return; - } - revert_state = level.cfx_undo_states[ level.cfx_undo_states.size - 1 ]; - if ( level.cfx_last_action != "none" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - move_undo_state_to_redo(); - clear_entity_selection( "skip_undo" ); - apply_state_change( "undo", revert_state ); - move_undo_state_to_limbo(); - level.cfx_last_action = "none"; - } - else clear_entity_selection( "skip_undo" ); - if ( revert_state.operation != "edit" ) - { - apply_state_change( "undo", revert_state ); - move_undo_state_to_redo(); - level.cfx_last_action = "none"; - } - else if ( isDefined( level.cfx_limbo_state ) ) - { - move_limbo_state_to_redo(); - apply_state_change( "undo", revert_state ); - move_undo_state_to_limbo(); - level.cfx_last_action = "none"; - } - else - { - if ( level.cfx_undo_states.size > 1 ) - { - move_undo_state_to_redo(); - revert_state = level.cfx_undo_states[ level.cfx_undo_states.size - 1 ]; - } - apply_state_change( "undo", revert_state ); - move_undo_state_to_limbo(); - } -} - -apply_state_change( type, revert_state ) -{ - if ( type == "undo" ) - { -/# - println( "^2CreateFX: Undo operation" ); -#/ - if ( revert_state.operation == "edit" ) - { - undo_edit( revert_state.ent_array ); - } - else if ( revert_state.operation == "add" ) - { - undo_add( revert_state.ent_array ); - } - else - { - if ( revert_state.operation == "delete" ) - { - undo_delete( revert_state.ent_array ); - } - } - } - else /# - println( "^2CreateFX: Redo operation" ); -#/ - if ( revert_state.operation == "edit" ) - { - undo_edit( revert_state.ent_array ); - } - else if ( revert_state.operation == "add" ) - { - undo_delete( revert_state.ent_array ); - } - else - { - if ( revert_state.operation == "delete" ) - { - undo_add( revert_state.ent_array ); - } - } -} - -move_undo_state_to_redo() -{ - if ( level.cfx_redo_states.size >= level.cfx_max_states ) - { - level.cfx_redo_states = array_drop( level.cfx_redo_states ); - } - level.cfx_redo_states[ level.cfx_redo_states.size ] = level.cfx_undo_states[ level.cfx_undo_states.size - 1 ]; - level.cfx_undo_states = array_pop( level.cfx_undo_states ); - debug_print_latest_state( "undo" ); - debug_print_latest_state( "redo" ); -} - -move_redo_state_to_undo() -{ - if ( level.cfx_undo_states.size >= level.cfx_max_states ) - { - level.cfx_undo_states = array_drop( level.cfx_undo_states ); - } - level.cfx_undo_states[ level.cfx_undo_states.size ] = level.cfx_redo_states[ level.cfx_redo_states.size - 1 ]; - level.cfx_redo_states = array_pop( level.cfx_redo_states ); - debug_print_latest_state( "undo" ); - debug_print_latest_state( "redo" ); -} - -move_undo_state_to_limbo() -{ - level.cfx_limbo_state = level.cfx_undo_states[ level.cfx_undo_states.size - 1 ]; - level.cfx_undo_states = array_pop( level.cfx_undo_states ); - debug_print_latest_state( "undo" ); - debug_print_latest_state( "limbo" ); -} - -move_redo_state_to_limbo() -{ - level.cfx_limbo_state = level.cfx_redo_states[ level.cfx_redo_states.size - 1 ]; - level.cfx_redo_states = array_pop( level.cfx_redo_states ); - debug_print_latest_state( "redo" ); - debug_print_latest_state( "limbo" ); -} - -move_limbo_state_to_undo() -{ - if ( level.cfx_undo_states.size >= level.cfx_max_states ) - { - level.cfx_undo_states = array_drop( level.cfx_undo_states ); - } - level.cfx_undo_states[ level.cfx_undo_states.size ] = level.cfx_limbo_state; - level.cfx_limbo_state = undefined; - debug_print_latest_state( "undo" ); - debug_print_latest_state( "limbo" ); -} - -move_limbo_state_to_redo() -{ - if ( level.cfx_redo_states.size >= level.cfx_max_states ) - { - level.cfx_redo_states = array_drop( level.cfx_redo_states ); - } - level.cfx_redo_states[ level.cfx_redo_states.size ] = level.cfx_limbo_state; - level.cfx_limbo_state = undefined; - debug_print_latest_state( "redo" ); -} - -undo_edit( ent_array ) -{ - ent_array = reorder_ent_array_by_uniqueid( ent_array ); -/# - println( "^3CreateFX: Undoing edit" ); - debug_print_ent_array( ent_array, "ent_array[]" ); - debug_print_ent_array( level.createfxent, "level.createFXent[]" ); -#/ - last_id = ent_array[ ent_array.size - 1 ].uniqueid; - if ( last_id > ( level.createfxent.size - 1 ) ) - { - last_id = level.createfxent.size - 1; - } - j = ent_array.size - 1; - source_ent = ent_array[ j ]; - i = last_id; - while ( i >= 0 ) - { - target_ent = level.createfxent[ i ]; - if ( source_ent.uniqueid == target_ent.uniqueid ) - { - copy_values_between_fx_ents( source_ent, target_ent ); - select_entity( i, target_ent, "skip_undo" ); - j--; - - if ( j < 0 ) - { - break; - } - else - { - source_ent = ent_array[ j ]; - } - i--; - - } - } - update_selected_entities(); -/# - println( "^1CreateFX: Finished edit" ); - debug_print_ent_array( level.createfxent, "level.createFXent[]" ); -#/ -} - -undo_add( ent_array ) -{ - ent_array = reorder_ent_array_by_uniqueid( ent_array ); -/# - println( "^3createfx: Undoing add." ); - debug_print_ent_array( ent_array, "ent_array[]" ); - debug_print_ent_array( level.createfxent, "level.createFXent[]" ); -#/ - last_id = ent_array[ ent_array.size - 1 ].uniqueid; - if ( last_id > ( level.createfxent.size - 1 ) ) - { - last_id = level.createfxent.size - 1; - } - j = ent_array.size - 1; - source_ent = ent_array[ j ]; - i = last_id; - while ( i >= 0 ) - { - target_ent = level.createfxent[ i ]; - if ( source_ent.uniqueid == target_ent.uniqueid ) - { - if ( isDefined( target_ent.looper ) ) - { - target_ent.looper delete(); - } - target_ent notify( "stop_loop" ); - j--; - - if ( j < 0 ) - { - break; - } - else - { - source_ent = ent_array[ j ]; - } - i--; - - } - } -/# - debug_print_ent_array( level.createfxent, "level.createFXent[]" ); - println( "createfx: Starting array_remove_undefined()" ); -#/ - arrayremovevalue( level.createfxent, undefined ); -/# - println( "^1CreateFX: Finished undo add." ); - debug_print_ent_array( level.createfxent, "level.createFXent[]" ); -#/ - clear_fx_hudelements(); -} - -undo_delete( ent_array ) -{ -/# - println( "^3CreateFX: Undoing delete" ); - debug_print_ent_array( ent_array, "ent_array in undo_delete()" ); - debug_print_ent_array( level.createfxent, "level.createFXent[]" ); -#/ - ent_array = reorder_ent_array_by_uniqueid( ent_array ); - if ( level.createfxent.size == 0 ) - { - i = 0; - while ( i < ent_array.size ) - { - level.createfxent[ i ] = copy_fx_ent( ent_array[ i ] ); - i++; - } - } - else temp_array = []; - i = 0; - j = 0; - while ( j < level.createfxent.size ) - { - target_ent = level.createfxent[ j ]; - if ( i >= ent_array.size ) - { - temp_array[ temp_array.size ] = target_ent; - j++; - continue; - } - else source_ent = ent_array[ i ]; - if ( target_ent.uniqueid < source_ent.uniqueid ) - { - temp_array[ temp_array.size ] = target_ent; - j++; - continue; - } - else - { - temp_array[ temp_array.size ] = copy_fx_ent( source_ent ); - j--; - - i++; - } - j++; - } - while ( i < ent_array.size ) - { - temp_array[ temp_array.size ] = ent_array[ i ]; - i++; - } - level.createfxent = temp_array; -/# - println( "^1Createfx: Finished undoing delete, pre-selection" ); - debug_print_ent_array( level.createfxent, "level.createFXent[]" ); -#/ - last_id = ent_array[ ent_array.size - 1 ].uniqueid; - if ( last_id > ( level.createfxent.size - 1 ) ) - { - last_id = level.createfxent.size - 1; - } - j = ent_array.size - 1; - source_ent = ent_array[ j ]; - i = last_id; - while ( i >= 0 ) - { - target_ent = level.createfxent[ i ]; - if ( source_ent.uniqueid == target_ent.uniqueid ) - { - target_ent post_entity_creation_function(); - select_entity( i, target_ent, "skip_undo" ); - j--; - - if ( j < 0 ) - { - break; - } - else - { - source_ent = ent_array[ j ]; - } - i--; - - } - } - update_selected_entities(); -} - -redo() -{ - if ( isDefined( level.createfxent ) || !isDefined( level.cfx_redo_states ) && level.cfx_redo_states.size < 1 ) - { - return; - } - clear_entity_selection( "skip_undo" ); - if ( isDefined( level.cfx_limbo_state ) ) - { - move_limbo_state_to_undo(); - move_redo_state_to_limbo(); - apply_state_change( "redo", level.cfx_limbo_state ); - } - else revert_state = level.cfx_redo_states[ level.cfx_redo_states.size - 1 ]; - apply_state_change( "redo", revert_state ); - if ( revert_state.operation == "edit" ) - { - move_redo_state_to_limbo(); - } - else - { - move_redo_state_to_undo(); - } - level.cfx_last_action = "none"; -} - -reorder_ent_array_by_uniqueid( ent_array ) -{ - if ( ent_array.size <= 1 ) - { - return ent_array; - } - array_size = ent_array.size; - i = 0; - while ( i < ( array_size - 1 ) ) - { - j = i + 1; - while ( j < array_size ) - { - if ( ent_array[ i ].uniqueid > ent_array[ j ].uniqueid ) - { - temp_ent = ent_array[ i ]; - ent_array[ i ] = ent_array[ j ]; - ent_array[ j ] = temp_ent; - } - j++; - } - i++; - } - return ent_array; -} - -copy_fx_ent( ent ) -{ - temp_ent = spawnstruct(); - temp_ent.drawn = ent.drawn; - temp_ent.drawn_axis_model = ent.drawn_axis_model; - temp_ent.last_fx_index = ent.last_fx_index; - temp_ent.textalpha = ent.textalpha; - temp_ent.uniqueid = ent.uniqueid; - temp_ent.v = ent.v; - return temp_ent; -} - -copy_values_between_fx_ents( source, dest ) -{ - dest.drawn = source.drawn; - dest.drawn_axis_model = source.drawn_axis_model; - dest.last_fx_index = source.last_fx_index; - dest.textalpha = source.textalpha; - dest.v = source.v; - return dest; -} - -array_pop( array ) -{ - array_size = array.size - 1; - temp_array = []; - if ( array_size <= 0 ) - { - return temp_array; - } - i = 0; - while ( i < array_size ) - { - temp_array[ i ] = array[ i ]; - i++; - } - array = temp_array; - return array; -} - -array_drop( array ) -{ - if ( array.size > 0 ) - { - temp_array = []; - i = 1; - while ( i < array.size ) - { - temp_array[ i - 1 ] = array[ i ]; - i++; - } - array = temp_array; - } - return array; -} - -debug_print_ent_array( array, name ) -{ -/# - if ( isDefined( name ) ) - { - println( "Printing out " + name ); - } - else - { - println( "Printing out some array" ); - } - i = 0; - while ( i < array.size ) - { - if ( !isDefined( array[ i ] ) ) - { - println( "" + i + ": deleted effect" ); - i++; - continue; - } - else - { - println( "" + i + ": uniqueid: " + array[ i ].uniqueid + " fxid: " + array[ i ].v[ "fxid" ] ); - } - i++; -#/ - } -} - -debug_print_latest_state( type ) -{ -/# - println( "^3Saving " + type + " state" ); - if ( type == "undo" ) - { - if ( !isDefined( level.cfx_undo_states[ level.cfx_undo_states.size - 1 ] ) ) - { - println( "There are no undo states." ); - return; - } - state = level.cfx_undo_states[ level.cfx_undo_states.size - 1 ]; - size = level.cfx_undo_states.size - 1; - } - else if ( type == "redo" ) - { - if ( !isDefined( level.cfx_redo_states[ level.cfx_redo_states.size - 1 ] ) ) - { - println( "There are no redo states." ); - return; - } - state = level.cfx_redo_states[ level.cfx_redo_states.size - 1 ]; - size = level.cfx_redo_states.size - 1; - } - else - { - if ( !isDefined( level.cfx_limbo_state ) ) - { - println( "There is no limbo state." ); - return; - } - state = level.cfx_limbo_state; - size = 0; - } - println( "State " + size + " - " + state.operation + ": " + state.last_action ); - debug_print_ent_array( state.ent_array, "save state ent_array" ); -#/ -} diff --git a/Zombie Core/patch_zm/maps/mp/_demo.gsc b/Zombie Core/patch_zm/maps/mp/_demo.gsc deleted file mode 100644 index 72e387c..0000000 --- a/Zombie Core/patch_zm/maps/mp/_demo.gsc +++ /dev/null @@ -1,97 +0,0 @@ - -init() -{ - level.bookmark[ "kill" ] = 0; - level.bookmark[ "event" ] = 1; - level.bookmark[ "zm_round_end" ] = 2; - level.bookmark[ "zm_player_downed" ] = 3; - level.bookmark[ "zm_player_revived" ] = 4; - level.bookmark[ "zm_player_bledout" ] = 5; - level.bookmark[ "zm_player_use_magicbox" ] = 6; - level.bookmark[ "score_event" ] = 7; - level.bookmark[ "medal" ] = 8; - level.bookmark[ "round_result" ] = 9; - level.bookmark[ "game_result" ] = 10; - level.bookmark[ "zm_powerup_dropped" ] = 11; - level.bookmark[ "zm_player_powerup_grabbed" ] = 12; - level.bookmark[ "zm_player_perk" ] = 13; - level.bookmark[ "zm_power" ] = 14; - level.bookmark[ "zm_player_door" ] = 15; - level.bookmark[ "zm_player_buildable_placed" ] = 16; - level.bookmark[ "zm_player_use_packapunch" ] = 17; - level.bookmark[ "zm_player_rampage" ] = 18; - level.bookmark[ "zm_player_grenade_special" ] = 19; - level.bookmark[ "zm_player_grenade_multiattack" ] = 20; - level.bookmark[ "zm_player_meat_stink" ] = 21; - level.bookmark[ "zm_player_grabbed_magicbox" ] = 22; - level.bookmark[ "zm_player_grabbed_packapunch" ] = 23; - level.bookmark[ "zm_player_grenade_special_long" ] = 24; -} - -bookmark( type, time, clientent1, clientent2, eventpriority, inflictorent, overrideentitycamera, actorent ) -{ -/# - assert( isDefined( level.bookmark[ type ] ), "Unable to find a bookmark type for type - " + type ); -#/ - client1 = 255; - client2 = 255; - inflictorentnum = -1; - inflictorenttype = 0; - inflictorbirthtime = 0; - actorentnum = undefined; - scoreeventpriority = 0; - if ( isDefined( clientent1 ) ) - { - client1 = clientent1 getentitynumber(); - } - if ( isDefined( clientent2 ) ) - { - client2 = clientent2 getentitynumber(); - } - if ( isDefined( eventpriority ) ) - { - scoreeventpriority = eventpriority; - } - if ( isDefined( inflictorent ) ) - { - inflictorentnum = inflictorent getentitynumber(); - inflictorenttype = inflictorent getentitytype(); - if ( isDefined( inflictorent.birthtime ) ) - { - inflictorbirthtime = inflictorent.birthtime; - } - } - if ( !isDefined( overrideentitycamera ) ) - { - overrideentitycamera = 0; - } - if ( isDefined( actorent ) ) - { - actorentnum = actorent getentitynumber(); - } - adddemobookmark( level.bookmark[ type ], time, client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum ); -} - -gameresultbookmark( type, winningteamindex, losingteamindex ) -{ -/# - assert( isDefined( level.bookmark[ type ] ), "Unable to find a bookmark type for type - " + type ); -#/ - client1 = 255; - client2 = 255; - scoreeventpriority = 0; - inflictorentnum = -1; - inflictorenttype = 0; - inflictorbirthtime = 0; - overrideentitycamera = 0; - actorentnum = undefined; - if ( isDefined( winningteamindex ) ) - { - client1 = winningteamindex; - } - if ( isDefined( losingteamindex ) ) - { - client2 = losingteamindex; - } - adddemobookmark( level.bookmark[ type ], getTime(), client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum ); -} diff --git a/Zombie Core/patch_zm/maps/mp/_fx.gsc b/Zombie Core/patch_zm/maps/mp/_fx.gsc deleted file mode 100644 index 568ef04..0000000 --- a/Zombie Core/patch_zm/maps/mp/_fx.gsc +++ /dev/null @@ -1,458 +0,0 @@ -#include maps/mp/_createfx; -#include maps/mp/_utility; -#include common_scripts/utility; - -print_org( fxcommand, fxid, fxpos, waittime ) -{ -/# - if ( getDvar( "debug" ) == "1" ) - { - println( "{" ); - println( ""origin" "" + fxpos[ 0 ] + " " + fxpos[ 1 ] + " " + fxpos[ 2 ] + """ ); - println( ""classname" "script_model"" ); - println( ""model" "fx"" ); - println( ""script_fxcommand" "" + fxcommand + """ ); - println( ""script_fxid" "" + fxid + """ ); - println( ""script_delay" "" + waittime + """ ); - println( "}" ); -#/ - } -} - -oneshotfx( fxid, fxpos, waittime, fxpos2 ) -{ -} - -oneshotfxthread() -{ - wait 0,05; - if ( self.v[ "delay" ] > 0 ) - { - wait self.v[ "delay" ]; - } - create_triggerfx(); -} - -create_triggerfx() -{ - self.looper = spawnfx_wrapper( self.v[ "fxid" ], self.v[ "origin" ], self.v[ "forward" ], self.v[ "up" ] ); - triggerfx( self.looper, self.v[ "delay" ] ); - create_loopsound(); -} - -exploderfx( num, fxid, fxpos, waittime, fxpos2, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout, exploder_group ) -{ - if ( 1 ) - { - ent = createexploder( fxid ); - ent.v[ "origin" ] = fxpos; - ent.v[ "angles" ] = ( 0, 0, 0 ); - if ( isDefined( fxpos2 ) ) - { - ent.v[ "angles" ] = vectorToAngle( fxpos2 - fxpos ); - } - ent.v[ "delay" ] = waittime; - ent.v[ "exploder" ] = num; - return; - } - fx = spawn( "script_origin", ( 0, 0, 0 ) ); - fx.origin = fxpos; - fx.angles = vectorToAngle( fxpos2 - fxpos ); - fx.script_exploder = num; - fx.script_fxid = fxid; - fx.script_delay = waittime; - fx.script_firefx = firefx; - fx.script_firefxdelay = firefxdelay; - fx.script_firefxsound = firefxsound; - fx.script_sound = fxsound; - fx.script_earthquake = fxquake; - fx.script_damage = fxdamage; - fx.script_radius = damage_radius; - fx.script_soundalias = soundalias; - fx.script_firefxtimeout = firefxtimeout; - fx.script_repeat = repeat; - fx.script_delay_min = delay_min; - fx.script_delay_max = delay_max; - fx.script_exploder_group = exploder_group; - forward = anglesToForward( fx.angles ); - forward = vectorScale( forward, 150 ); - fx.targetpos = fxpos + forward; - if ( !isDefined( level._script_exploders ) ) - { - level._script_exploders = []; - } - level._script_exploders[ level._script_exploders.size ] = fx; - maps/mp/_createfx::createfx_showorigin( fxid, fxpos, waittime, fxpos2, "exploderfx", fx, undefined, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout ); -} - -loopfx( fxid, fxpos, waittime, fxpos2, fxstart, fxstop, timeout ) -{ -/# - println( "Loopfx is deprecated!" ); -#/ - ent = createloopeffect( fxid ); - ent.v[ "origin" ] = fxpos; - ent.v[ "angles" ] = ( 0, 0, 0 ); - if ( isDefined( fxpos2 ) ) - { - ent.v[ "angles" ] = vectorToAngle( fxpos2 - fxpos ); - } - ent.v[ "delay" ] = waittime; -} - -create_looper() -{ - self.looper = playloopedfx( level._effect[ self.v[ "fxid" ] ], self.v[ "delay" ], self.v[ "origin" ], 0, self.v[ "forward" ], self.v[ "up" ] ); - create_loopsound(); -} - -create_loopsound() -{ - self notify( "stop_loop" ); - if ( isDefined( self.v[ "soundalias" ] ) && self.v[ "soundalias" ] != "nil" ) - { - if ( isDefined( self.looper ) ) - { - self.looper thread maps/mp/_utility::loop_fx_sound( self.v[ "soundalias" ], self.v[ "origin" ], "death" ); - return; - } - else - { - thread maps/mp/_utility::loop_fx_sound( self.v[ "soundalias" ], self.v[ "origin" ], "stop_loop" ); - } - } -} - -stop_loopsound() -{ - self notify( "stop_loop" ); -} - -loopfxthread() -{ - wait 0,05; - if ( isDefined( self.fxstart ) ) - { - level waittill( "start fx" + self.fxstart ); - } - while ( 1 ) - { - create_looper(); - if ( isDefined( self.timeout ) ) - { - thread loopfxstop( self.timeout ); - } - if ( isDefined( self.fxstop ) ) - { - level waittill( "stop fx" + self.fxstop ); - } - else - { - return; - } - if ( isDefined( self.looper ) ) - { - self.looper delete(); - } - if ( isDefined( self.fxstart ) ) - { - level waittill( "start fx" + self.fxstart ); - continue; - } - else - { - return; - } - } -} - -loopfxchangeid( ent ) -{ - self endon( "death" ); - ent waittill( "effect id changed", change ); -} - -loopfxchangeorg( ent ) -{ - self endon( "death" ); - for ( ;; ) - { - ent waittill( "effect org changed", change ); - self.origin = change; - } -} - -loopfxchangedelay( ent ) -{ - self endon( "death" ); - ent waittill( "effect delay changed", change ); -} - -loopfxdeletion( ent ) -{ - self endon( "death" ); - ent waittill( "effect deleted" ); - self delete(); -} - -loopfxstop( timeout ) -{ - self endon( "death" ); - wait timeout; - self.looper delete(); -} - -loopsound( sound, pos, waittime ) -{ - level thread loopsoundthread( sound, pos, waittime ); -} - -loopsoundthread( sound, pos, waittime ) -{ - org = spawn( "script_origin", pos ); - org.origin = pos; - org playloopsound( sound ); -} - -gunfireloopfx( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) -{ - thread gunfireloopfxthread( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ); -} - -gunfireloopfxthread( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) -{ - level endon( "stop all gunfireloopfx" ); - wait 0,05; - if ( betweensetsmax < betweensetsmin ) - { - temp = betweensetsmax; - betweensetsmax = betweensetsmin; - betweensetsmin = temp; - } - betweensetsbase = betweensetsmin; - betweensetsrange = betweensetsmax - betweensetsmin; - if ( shotdelaymax < shotdelaymin ) - { - temp = shotdelaymax; - shotdelaymax = shotdelaymin; - shotdelaymin = temp; - } - shotdelaybase = shotdelaymin; - shotdelayrange = shotdelaymax - shotdelaymin; - if ( shotsmax < shotsmin ) - { - temp = shotsmax; - shotsmax = shotsmin; - shotsmin = temp; - } - shotsbase = shotsmin; - shotsrange = shotsmax - shotsmin; - fxent = spawnfx( level._effect[ fxid ], fxpos ); - for ( ;; ) - { - shotnum = shotsbase + randomint( shotsrange ); - i = 0; - while ( i < shotnum ) - { - triggerfx( fxent ); - wait ( shotdelaybase + randomfloat( shotdelayrange ) ); - i++; - } - wait ( betweensetsbase + randomfloat( betweensetsrange ) ); - } -} - -gunfireloopfxvec( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) -{ - thread gunfireloopfxvecthread( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ); -} - -gunfireloopfxvecthread( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) -{ - level endon( "stop all gunfireloopfx" ); - wait 0,05; - if ( betweensetsmax < betweensetsmin ) - { - temp = betweensetsmax; - betweensetsmax = betweensetsmin; - betweensetsmin = temp; - } - betweensetsbase = betweensetsmin; - betweensetsrange = betweensetsmax - betweensetsmin; - if ( shotdelaymax < shotdelaymin ) - { - temp = shotdelaymax; - shotdelaymax = shotdelaymin; - shotdelaymin = temp; - } - shotdelaybase = shotdelaymin; - shotdelayrange = shotdelaymax - shotdelaymin; - if ( shotsmax < shotsmin ) - { - temp = shotsmax; - shotsmax = shotsmin; - shotsmin = temp; - } - shotsbase = shotsmin; - shotsrange = shotsmax - shotsmin; - fxpos2 = vectornormalize( fxpos2 - fxpos ); - fxent = spawnfx( level._effect[ fxid ], fxpos, fxpos2 ); - for ( ;; ) - { - shotnum = shotsbase + randomint( shotsrange ); - i = 0; - while ( i < int( shotnum / level.fxfireloopmod ) ) - { - triggerfx( fxent ); - delay = ( shotdelaybase + randomfloat( shotdelayrange ) ) * level.fxfireloopmod; - if ( delay < 0,05 ) - { - delay = 0,05; - } - wait delay; - i++; - } - wait ( shotdelaybase + randomfloat( shotdelayrange ) ); - wait ( betweensetsbase + randomfloat( betweensetsrange ) ); - } -} - -setfireloopmod( value ) -{ - level.fxfireloopmod = 1 / value; -} - -setup_fx() -{ - if ( isDefined( self.script_fxid ) || !isDefined( self.script_fxcommand ) && !isDefined( self.script_delay ) ) - { - return; - } - org = undefined; - if ( isDefined( self.target ) ) - { - ent = getent( self.target, "targetname" ); - if ( isDefined( ent ) ) - { - org = ent.origin; - } - } - fxstart = undefined; - if ( isDefined( self.script_fxstart ) ) - { - fxstart = self.script_fxstart; - } - fxstop = undefined; - if ( isDefined( self.script_fxstop ) ) - { - fxstop = self.script_fxstop; - } - if ( self.script_fxcommand == "OneShotfx" ) - { - oneshotfx( self.script_fxid, self.origin, self.script_delay, org ); - } - if ( self.script_fxcommand == "loopfx" ) - { - loopfx( self.script_fxid, self.origin, self.script_delay, org, fxstart, fxstop ); - } - if ( self.script_fxcommand == "loopsound" ) - { - loopsound( self.script_fxid, self.origin, self.script_delay ); - } - self delete(); -} - -script_print_fx() -{ -/# - if ( isDefined( self.script_fxid ) || !isDefined( self.script_fxcommand ) && !isDefined( self.script_delay ) ) - { - println( "Effect at origin ", self.origin, " doesn't have script_fxid/script_fxcommand/script_delay" ); - self delete(); - return; - } - if ( isDefined( self.target ) ) - { - org = getent( self.target, "targetname" ).origin; - } - else - { - org = "undefined"; - } - if ( self.script_fxcommand == "OneShotfx" ) - { - println( "mapsmp_fx::OneShotfx("" + self.script_fxid + "", " + self.origin + ", " + self.script_delay + ", " + org + ");" ); - } - if ( self.script_fxcommand == "loopfx" ) - { - println( "mapsmp_fx::LoopFx("" + self.script_fxid + "", " + self.origin + ", " + self.script_delay + ", " + org + ");" ); - } - if ( self.script_fxcommand == "loopsound" ) - { - println( "mapsmp_fx::LoopSound("" + self.script_fxid + "", " + self.origin + ", " + self.script_delay + ", " + org + ");" ); -#/ - } -} - -script_playfx( id, pos, pos2 ) -{ - if ( !id ) - { - return; - } - if ( isDefined( pos2 ) ) - { - playfx( id, pos, pos2 ); - } - else - { - playfx( id, pos ); - } -} - -script_playfxontag( id, ent, tag ) -{ - if ( !id ) - { - return; - } - playfxontag( id, ent, tag ); -} - -grenadeexplosionfx( pos ) -{ - playfx( level._effect[ "mechanical explosion" ], pos ); - earthquake( 0,15, 0,5, pos, 250 ); -} - -soundfx( fxid, fxpos, endonnotify ) -{ - org = spawn( "script_origin", ( 0, 0, 0 ) ); - org.origin = fxpos; - org playloopsound( fxid ); - if ( isDefined( endonnotify ) ) - { - org thread soundfxdelete( endonnotify ); - } -} - -soundfxdelete( endonnotify ) -{ - level waittill( endonnotify ); - self delete(); -} - -blenddelete( blend ) -{ - self waittill( "death" ); - blend delete(); -} - -spawnfx_wrapper( fx_id, origin, forward, up ) -{ -/# - assert( isDefined( level._effect[ fx_id ] ), "Missing level._effect["" + fx_id + ""]. You did not setup the fx before calling it in createFx." ); -#/ - fx_object = spawnfx( level._effect[ fx_id ], origin, forward, up ); - return fx_object; -} diff --git a/Zombie Core/patch_zm/maps/mp/_fxanim.gsc b/Zombie Core/patch_zm/maps/mp/_fxanim.gsc deleted file mode 100644 index 2a40039..0000000 --- a/Zombie Core/patch_zm/maps/mp/_fxanim.gsc +++ /dev/null @@ -1,6 +0,0 @@ - -init() -{ - level.scr_anim = []; - level.scr_anim[ "fxanim_props" ] = []; -} diff --git a/Zombie Core/patch_zm/maps/mp/_global_fx.gsc b/Zombie Core/patch_zm/maps/mp/_global_fx.gsc deleted file mode 100644 index 8692423..0000000 --- a/Zombie Core/patch_zm/maps/mp/_global_fx.gsc +++ /dev/null @@ -1,60 +0,0 @@ -#include maps/mp/_utility; -#include common_scripts/utility; - -main() -{ - randomstartdelay = randomfloatrange( -20, -15 ); - global_fx( "barrel_fireFX_origin", "global_barrel_fire", "fire/firelp_barrel_pm", randomstartdelay, "fire_barrel_small" ); - global_fx( "ch_streetlight_02_FX_origin", "ch_streetlight_02_FX", "misc/lighthaze", randomstartdelay ); - global_fx( "me_streetlight_01_FX_origin", "me_streetlight_01_FX", "misc/lighthaze_bog_a", randomstartdelay ); - global_fx( "ch_street_light_01_on", "lamp_glow_FX", "misc/light_glow_white", randomstartdelay ); - global_fx( "highway_lamp_post", "ch_streetlight_02_FX", "misc/lighthaze_villassault", randomstartdelay ); - global_fx( "cs_cargoship_spotlight_on_FX_origin", "cs_cargoship_spotlight_on_FX", "misc/lighthaze", randomstartdelay ); - global_fx( "me_dumpster_fire_FX_origin", "me_dumpster_fire_FX", "fire/firelp_med_pm_nodistort", randomstartdelay, "fire_dumpster_medium" ); - global_fx( "com_tires_burning01_FX_origin", "com_tires_burning01_FX", "fire/tire_fire_med", randomstartdelay ); - global_fx( "icbm_powerlinetower_FX_origin", "icbm_powerlinetower_FX", "misc/power_tower_light_red_blink", randomstartdelay ); -} - -global_fx( targetname, fxname, fxfile, delay, soundalias ) -{ - ents = getstructarray( targetname, "targetname" ); - if ( !isDefined( ents ) ) - { - return; - } - if ( ents.size <= 0 ) - { - return; - } - i = 0; - while ( i < ents.size ) - { - ents[ i ] global_fx_create( fxname, fxfile, delay, soundalias ); - i++; - } -} - -global_fx_create( fxname, fxfile, delay, soundalias ) -{ - if ( !isDefined( level._effect ) ) - { - level._effect = []; - } - if ( !isDefined( level._effect[ fxname ] ) ) - { - level._effect[ fxname ] = loadfx( fxfile ); - } - if ( !isDefined( self.angles ) ) - { - self.angles = ( 0, 0, 0 ); - } - ent = createoneshoteffect( fxname ); - ent.v[ "origin" ] = self.origin; - ent.v[ "angles" ] = self.angles; - ent.v[ "fxid" ] = fxname; - ent.v[ "delay" ] = delay; - if ( isDefined( soundalias ) ) - { - ent.v[ "soundalias" ] = soundalias; - } -} diff --git a/Zombie Core/patch_zm/maps/mp/_interactive_objects.gsc b/Zombie Core/patch_zm/maps/mp/_interactive_objects.gsc deleted file mode 100644 index 490fd54..0000000 --- a/Zombie Core/patch_zm/maps/mp/_interactive_objects.gsc +++ /dev/null @@ -1,407 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - level.barrelexplodingthisframe = 0; - qbarrels = 0; - all_barrels = []; - barrels = getentarray( "explodable_barrel", "targetname" ); - while ( isDefined( barrels ) && barrels.size > 0 ) - { - qbarrels = 1; - i = 0; - while ( i < barrels.size ) - { - all_barrels[ all_barrels.size ] = barrels[ i ]; - i++; - } - } - barrels = getentarray( "explodable_barrel", "script_noteworthy" ); - while ( isDefined( barrels ) && barrels.size > 0 ) - { - qbarrels = 1; - i = 0; - while ( i < barrels.size ) - { - all_barrels[ all_barrels.size ] = barrels[ i ]; - i++; - } - } - if ( qbarrels ) - { - precachemodel( "global_explosive_barrel" ); - level.barrelburn = 100; - level.barrelhealth = 250; - level.barrelingsound = "exp_redbarrel_ignition"; - level.barrelexpsound = "exp_redbarrel"; - level.breakables_fx[ "barrel" ][ "burn_start" ] = loadfx( "destructibles/fx_barrel_ignite" ); - level.breakables_fx[ "barrel" ][ "burn" ] = loadfx( "destructibles/fx_barrel_fire_top" ); - level.breakables_fx[ "barrel" ][ "explode" ] = loadfx( "destructibles/fx_dest_barrelexp" ); - array_thread( all_barrels, ::explodable_barrel_think ); - } - qcrates = 0; - all_crates = []; - crates = getentarray( "flammable_crate", "targetname" ); - while ( isDefined( crates ) && crates.size > 0 ) - { - qcrates = 1; - i = 0; - while ( i < crates.size ) - { - all_crates[ all_crates.size ] = crates[ i ]; - i++; - } - } - crates = getentarray( "flammable_crate", "script_noteworthy" ); - while ( isDefined( crates ) && crates.size > 0 ) - { - qcrates = 1; - i = 0; - while ( i < crates.size ) - { - all_crates[ all_crates.size ] = crates[ i ]; - i++; - } - } - if ( qcrates ) - { - precachemodel( "global_flammable_crate_jap_piece01_d" ); - level.crateburn = 100; - level.cratehealth = 200; - level.breakables_fx[ "ammo_crate" ][ "burn_start" ] = loadfx( "destructibles/fx_ammobox_ignite" ); - level.breakables_fx[ "ammo_crate" ][ "burn" ] = loadfx( "destructibles/fx_ammobox_fire_top" ); - level.breakables_fx[ "ammo_crate" ][ "explode" ] = loadfx( "destructibles/fx_ammoboxExp" ); - level.crateignsound = "Ignition_ammocrate"; - level.crateexpsound = "Explo_ammocrate"; - array_thread( all_crates, ::flammable_crate_think ); - } - if ( !qbarrels && !qcrates ) - { - return; - } -} - -explodable_barrel_think() -{ - if ( self.classname != "script_model" ) - { - return; - } - self endon( "exploding" ); - self breakable_clip(); - self.health = level.barrelhealth; - self setcandamage( 1 ); - self.targetname = "explodable_barrel"; - if ( sessionmodeiszombiesgame() ) - { - self.removeexplodable = 1; - } - for ( ;; ) - { - self waittill( "damage", amount, attacker, direction_vec, p, type ); -/# - println( "BARRELDAMAGE: " + type ); -#/ - if ( type == "MOD_MELEE" || type == "MOD_IMPACT" ) - { - continue; - } - else - { - if ( isDefined( self.script_requires_player ) && self.script_requires_player && !isplayer( attacker ) ) - { - break; - } - else - { - if ( isDefined( self.script_selfisattacker ) && self.script_selfisattacker ) - { - self.damageowner = self; - } - else - { - self.damageowner = attacker; - } - self.health -= amount; - if ( self.health <= level.barrelburn ) - { - self thread explodable_barrel_burn(); - } - } - } - } -} - -explodable_barrel_burn() -{ - count = 0; - startedfx = 0; - up = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) ); - worldup = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) ); - dot = vectordot( up, worldup ); - offset1 = ( 0, 0, 1 ); - offset2 = up * vectorScale( ( 0, 0, 1 ), 44 ); - if ( dot < 0,5 ) - { - offset1 = ( up * vectorScale( ( 0, 0, 1 ), 22 ) ) - vectorScale( ( 0, 0, 1 ), 30 ); - offset2 = ( up * vectorScale( ( 0, 0, 1 ), 22 ) ) + vectorScale( ( 0, 0, 1 ), 14 ); - } - while ( self.health > 0 ) - { - if ( !startedfx ) - { - playfx( level.breakables_fx[ "barrel" ][ "burn_start" ], self.origin + offset1 ); - level thread play_sound_in_space( level.barrelingsound, self.origin ); - startedfx = 1; - } - if ( count > 20 ) - { - count = 0; - } - playfx( level.breakables_fx[ "barrel" ][ "burn" ], self.origin + offset2 ); - self playloopsound( "barrel_fuse" ); - if ( count == 0 ) - { - self.health -= 10 + randomint( 10 ); - } - count++; - wait 0,05; - } - level notify( "explosion_started" ); - self thread explodable_barrel_explode(); -} - -explodable_barrel_explode() -{ - self notify( "exploding" ); - self death_notify_wrapper(); - up = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) ); - worldup = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) ); - dot = vectordot( up, worldup ); - offset = ( 0, 0, 1 ); - if ( dot < 0,5 ) - { - start = self.origin + vectorScale( up, 22 ); - trace = physicstrace( start, start + vectorScale( ( 0, 0, 1 ), 64 ) ); - end = trace[ "position" ]; - offset = end - self.origin; - } - offset += vectorScale( ( 0, 0, 1 ), 4 ); - mindamage = 1; - maxdamage = 250; - blastradius = 250; - level thread play_sound_in_space( level.barrelexpsound, self.origin ); - playfx( level.breakables_fx[ "barrel" ][ "explode" ], self.origin + offset ); - physicsexplosionsphere( self.origin + offset, 100, 80, 1, maxdamage, mindamage ); - level.barrelexplodingthisframe = 1; - if ( isDefined( self.remove ) ) - { - self.remove delete(); - } - if ( isDefined( self.radius ) ) - { - blastradius = self.radius; - } - self radiusdamage( self.origin + vectorScale( ( 0, 0, 1 ), 56 ), blastradius, maxdamage, mindamage, self.damageowner ); - attacker = undefined; - if ( isDefined( self.damageowner ) ) - { - attacker = self.damageowner; - } - level.lastexplodingbarrel[ "time" ] = getTime(); - level.lastexplodingbarrel[ "origin" ] = self.origin + vectorScale( ( 0, 0, 1 ), 30 ); - if ( isDefined( self.removeexplodable ) ) - { - self hide(); - } - else - { - self setmodel( "global_explosive_barrel" ); - } - if ( dot < 0,5 ) - { - start = self.origin + vectorScale( up, 22 ); - trace = physicstrace( start, start + vectorScale( ( 0, 0, 1 ), 64 ) ); - pos = trace[ "position" ]; - self.origin = pos; - self.angles += vectorScale( ( 0, 0, 1 ), 90 ); - } - wait 0,05; - level.barrelexplodingthisframe = 0; -} - -flammable_crate_think() -{ - if ( self.classname != "script_model" ) - { - return; - } - self endon( "exploding" ); - self breakable_clip(); - self.health = level.cratehealth; - self setcandamage( 1 ); - for ( ;; ) - { - self waittill( "damage", amount, attacker, direction_vec, p, type ); - if ( isDefined( self.script_requires_player ) && self.script_requires_player && !isplayer( attacker ) ) - { - continue; - } - else - { - if ( isDefined( self.script_selfisattacker ) && self.script_selfisattacker ) - { - self.damageowner = self; - } - else - { - self.damageowner = attacker; - } - if ( level.barrelexplodingthisframe ) - { - wait randomfloat( 1 ); - } - self.health -= amount; - if ( self.health <= level.crateburn ) - { - self thread flammable_crate_burn(); - } - } - } -} - -flammable_crate_burn() -{ - count = 0; - startedfx = 0; - up = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) ); - worldup = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) ); - dot = vectordot( up, worldup ); - offset1 = ( 0, 0, 1 ); - offset2 = up * vectorScale( ( 0, 0, 1 ), 44 ); - if ( dot < 0,5 ) - { - offset1 = ( up * vectorScale( ( 0, 0, 1 ), 22 ) ) - vectorScale( ( 0, 0, 1 ), 30 ); - offset2 = ( up * vectorScale( ( 0, 0, 1 ), 22 ) ) + vectorScale( ( 0, 0, 1 ), 14 ); - } - while ( self.health > 0 ) - { - if ( !startedfx ) - { - playfx( level.breakables_fx[ "ammo_crate" ][ "burn_start" ], self.origin ); - level thread play_sound_in_space( level.crateignsound, self.origin ); - startedfx = 1; - } - if ( count > 20 ) - { - count = 0; - } - playfx( level.breakables_fx[ "ammo_crate" ][ "burn" ], self.origin ); - if ( count == 0 ) - { - self.health -= 10 + randomint( 10 ); - } - count++; - wait 0,05; - } - self thread flammable_crate_explode(); -} - -flammable_crate_explode() -{ - self notify( "exploding" ); - self death_notify_wrapper(); - up = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) ); - worldup = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) ); - dot = vectordot( up, worldup ); - offset = ( 0, 0, 1 ); - if ( dot < 0,5 ) - { - start = self.origin + vectorScale( up, 22 ); - trace = physicstrace( start, start + vectorScale( ( 0, 0, 1 ), 64 ) ); - end = trace[ "position" ]; - offset = end - self.origin; - } - offset += vectorScale( ( 0, 0, 1 ), 4 ); - mindamage = 1; - maxdamage = 250; - blastradius = 250; - level thread play_sound_in_space( level.crateexpsound, self.origin ); - playfx( level.breakables_fx[ "ammo_crate" ][ "explode" ], self.origin ); - physicsexplosionsphere( self.origin + offset, 100, 80, 1, maxdamage, mindamage ); - level.barrelexplodingthisframe = 1; - if ( isDefined( self.remove ) ) - { - self.remove delete(); - } - if ( isDefined( self.radius ) ) - { - blastradius = self.radius; - } - attacker = undefined; - if ( isDefined( self.damageowner ) ) - { - attacker = self.damageowner; - } - self radiusdamage( self.origin + vectorScale( ( 0, 0, 1 ), 30 ), blastradius, maxdamage, mindamage, attacker ); - self setmodel( "global_flammable_crate_jap_piece01_d" ); - if ( dot < 0,5 ) - { - start = self.origin + vectorScale( up, 22 ); - trace = physicstrace( start, start + vectorScale( ( 0, 0, 1 ), 64 ) ); - pos = trace[ "position" ]; - self.origin = pos; - self.angles += vectorScale( ( 0, 0, 1 ), 90 ); - } - wait 0,05; - level.barrelexplodingthisframe = 0; -} - -breakable_clip() -{ - if ( isDefined( self.target ) ) - { - targ = getent( self.target, "targetname" ); - if ( targ.classname == "script_brushmodel" ) - { - self.remove = targ; - return; - } - } - if ( isDefined( level.breakables_clip ) && level.breakables_clip.size > 0 ) - { - self.remove = getclosestent( self.origin, level.breakables_clip ); - } - if ( isDefined( self.remove ) ) - { - arrayremovevalue( level.breakables_clip, self.remove ); - } -} - -getclosestent( org, array ) -{ - if ( array.size < 1 ) - { - return; - } - dist = 256; - ent = undefined; - i = 0; - while ( i < array.size ) - { - newdist = distance( array[ i ] getorigin(), org ); - if ( newdist >= dist ) - { - i++; - continue; - } - else - { - dist = newdist; - ent = array[ i ]; - } - i++; - } - return ent; -} diff --git a/Zombie Core/patch_zm/maps/mp/_music.gsc b/Zombie Core/patch_zm/maps/mp/_music.gsc deleted file mode 100644 index 9faa900..0000000 --- a/Zombie Core/patch_zm/maps/mp/_music.gsc +++ /dev/null @@ -1,30 +0,0 @@ -#include maps/mp/_utility; - -music_init() -{ -/# - assert( level.clientscripts ); -#/ - level.musicstate = ""; - registerclientsys( "musicCmd" ); -} - -setmusicstate( state, player ) -{ - if ( isDefined( level.musicstate ) ) - { - if ( isDefined( player ) ) - { - setclientsysstate( "musicCmd", state, player ); - return; - } - else - { - if ( level.musicstate != state ) - { - setclientsysstate( "musicCmd", state ); - } - } - } - level.musicstate = state; -} diff --git a/Zombie Core/patch_zm/maps/mp/_script_gen.gsc b/Zombie Core/patch_zm/maps/mp/_script_gen.gsc deleted file mode 100644 index f5dbda6..0000000 --- a/Zombie Core/patch_zm/maps/mp/_script_gen.gsc +++ /dev/null @@ -1,342 +0,0 @@ -#include maps/mp/_script_gen; -#include maps/mp/_utility; -#include common_scripts/utility; - -script_gen_dump_checksaved() -{ - signatures = getarraykeys( level.script_gen_dump ); - i = 0; - while ( i < signatures.size ) - { - if ( !isDefined( level.script_gen_dump2[ signatures[ i ] ] ) ) - { - level.script_gen_dump_reasons[ level.script_gen_dump_reasons.size ] = "Signature unmatched( removed feature ): " + signatures[ i ]; - } - i++; - } -} - -script_gen_dump() -{ -/# - script_gen_dump_checksaved(); - if ( !level.script_gen_dump_reasons.size ) - { - flag_set( "scriptgen_done" ); - return; - } - firstrun = 0; - if ( level.bscriptgened ) - { - println( " " ); - println( " " ); - println( " " ); - println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); - println( "^3Dumping scriptgen dump for these reasons" ); - println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); - i = 0; - while ( i < level.script_gen_dump_reasons.size ) - { - if ( issubstr( level.script_gen_dump_reasons[ i ], "nowrite" ) ) - { - substr = getsubstr( level.script_gen_dump_reasons[ i ], 15 ); - println( ( i + ". ) " ) + substr ); - } - else - { - println( ( i + ". ) " ) + level.script_gen_dump_reasons[ i ] ); - } - if ( level.script_gen_dump_reasons[ i ] == "First run" ) - { - firstrun = 1; - } - i++; - } - println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); - println( " " ); - if ( firstrun ) - { - println( "for First Run make sure you delete all of the vehicle precache script calls, createart calls, createfx calls( most commonly placed in maps\\" + level.script + "_fx.gsc ) " ); - println( " " ); - println( "replace:" ); - println( "maps\\_load::main( 1 );" ); - println( " " ); - println( "with( don't forget to add this file to P4 ):" ); - println( "maps\\scriptgen\\" + level.script + "_scriptgen::main();" ); - println( " " ); - } - println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); - println( " " ); - println( "^2 / \\ / \\ / \\" ); - println( "^2scroll up" ); - println( "^2 / \\ / \\ / \\" ); - println( " " ); - } - else - { - return; - } - filename = "scriptgen/" + level.script + "_scriptgen.gsc"; - csvfilename = "zone_source/" + level.script + ".csv"; - if ( level.bscriptgened ) - { - file = openfile( filename, "write" ); - } - else - { - file = 0; - } - assert( file != -1, "File not writeable( check it and and restart the map ): " + filename ); - script_gen_dumpprintln( file, "// script generated script do not write your own script here it will go away if you do." ); - script_gen_dumpprintln( file, "main()" ); - script_gen_dumpprintln( file, "{" ); - script_gen_dumpprintln( file, "" ); - script_gen_dumpprintln( file, "\tlevel.script_gen_dump = [];" ); - script_gen_dumpprintln( file, "" ); - signatures = getarraykeys( level.script_gen_dump ); - i = 0; - while ( i < signatures.size ) - { - if ( !issubstr( level.script_gen_dump[ signatures[ i ] ], "nowrite" ) ) - { - script_gen_dumpprintln( file, "\t" + level.script_gen_dump[ signatures[ i ] ] ); - } - i++; - } - i = 0; - while ( i < signatures.size ) - { - if ( !issubstr( level.script_gen_dump[ signatures[ i ] ], "nowrite" ) ) - { - script_gen_dumpprintln( file, "\tlevel.script_gen_dump[ " + """ + signatures[ i ] + """ + " ] = " + """ + signatures[ i ] + """ + ";" ); - i++; - continue; - } - else - { - script_gen_dumpprintln( file, "\tlevel.script_gen_dump[ " + """ + signatures[ i ] + """ + " ] = " + ""nowrite"" + ";" ); - } - i++; - } - script_gen_dumpprintln( file, "" ); - keys1 = undefined; - keys2 = undefined; - if ( isDefined( level.sg_precacheanims ) ) - { - keys1 = getarraykeys( level.sg_precacheanims ); - } - while ( isDefined( keys1 ) ) - { - i = 0; - while ( i < keys1.size ) - { - script_gen_dumpprintln( file, "\tanim_precach_" + keys1[ i ] + "();" ); - i++; - } - } - script_gen_dumpprintln( file, "\tmaps\\_load::main( 1, " + level.bcsvgened + ", 1 );" ); - script_gen_dumpprintln( file, "}" ); - script_gen_dumpprintln( file, "" ); - if ( isDefined( level.sg_precacheanims ) ) - { - keys1 = getarraykeys( level.sg_precacheanims ); - } - while ( isDefined( keys1 ) ) - { - i = 0; - while ( i < keys1.size ) - { - script_gen_dumpprintln( file, "#using_animtree( "" + keys1[ i ] + "" );" ); - script_gen_dumpprintln( file, "anim_precach_" + keys1[ i ] + "()" ); - script_gen_dumpprintln( file, "{" ); - script_gen_dumpprintln( file, "\tlevel.sg_animtree[ "" + keys1[ i ] + "" ] = #animtree;" ); - keys2 = getarraykeys( level.sg_precacheanims[ keys1[ i ] ] ); - while ( isDefined( keys2 ) ) - { - j = 0; - while ( j < keys2.size ) - { - script_gen_dumpprintln( file, "\tlevel.sg_anim[ "" + keys2[ j ] + "" ] = %" + keys2[ j ] + ";" ); - j++; - } - } - script_gen_dumpprintln( file, "}" ); - script_gen_dumpprintln( file, "" ); - i++; - } - } - if ( level.bscriptgened ) - { - saved = closefile( file ); - } - else - { - saved = 1; - } - if ( level.bcsvgened ) - { - csvfile = openfile( csvfilename, "write" ); - } - else - { - csvfile = 0; - } - assert( csvfile != -1, "File not writeable( check it and and restart the map ): " + csvfilename ); - signatures = getarraykeys( level.script_gen_dump ); - i = 0; - while ( i < signatures.size ) - { - script_gen_csvdumpprintln( csvfile, signatures[ i ] ); - i++; - } - if ( level.bcsvgened ) - { - csvfilesaved = closefile( csvfile ); - } - else - { - csvfilesaved = 1; - } - assert( csvfilesaved == 1, "csv not saved( see above message? ): " + csvfilename ); - assert( saved == 1, "map not saved( see above message? ): " + filename ); -#/ -/# - assert( !level.bscriptgened, "SCRIPTGEN generated: follow instructions listed above this error in the console" ); -#/ - if ( level.bscriptgened ) - { -/# - assertmsg( "SCRIPTGEN updated: Rebuild fast file and run map again" ); -#/ - } - flag_set( "scriptgen_done" ); -} - -script_gen_csvdumpprintln( file, signature ) -{ - prefix = undefined; - writtenprefix = undefined; - path = ""; - extension = ""; - if ( issubstr( signature, "ignore" ) ) - { - prefix = "ignore"; - } - else if ( issubstr( signature, "col_map_sp" ) ) - { - prefix = "col_map_sp"; - } - else if ( issubstr( signature, "gfx_map" ) ) - { - prefix = "gfx_map"; - } - else if ( issubstr( signature, "rawfile" ) ) - { - prefix = "rawfile"; - } - else if ( issubstr( signature, "sound" ) ) - { - prefix = "sound"; - } - else if ( issubstr( signature, "xmodel" ) ) - { - prefix = "xmodel"; - } - else if ( issubstr( signature, "xanim" ) ) - { - prefix = "xanim"; - } - else if ( issubstr( signature, "item" ) ) - { - prefix = "item"; - writtenprefix = "weapon"; - path = "sp/"; - } - else if ( issubstr( signature, "fx" ) ) - { - prefix = "fx"; - } - else if ( issubstr( signature, "menu" ) ) - { - prefix = "menu"; - writtenprefix = "menufile"; - path = "ui / scriptmenus/"; - extension = ".menu"; - } - else if ( issubstr( signature, "rumble" ) ) - { - prefix = "rumble"; - writtenprefix = "rawfile"; - path = "rumble/"; - } - else if ( issubstr( signature, "shader" ) ) - { - prefix = "shader"; - writtenprefix = "material"; - } - else if ( issubstr( signature, "shock" ) ) - { - prefix = "shock"; - writtenprefix = "rawfile"; - extension = ".shock"; - path = "shock/"; - } - else if ( issubstr( signature, "string" ) ) - { - prefix = "string"; -/# - assertmsg( "string not yet supported by scriptgen" ); -#/ - } - else if ( issubstr( signature, "turret" ) ) - { - prefix = "turret"; - writtenprefix = "weapon"; - path = "sp/"; - } - else - { - if ( issubstr( signature, "vehicle" ) ) - { - prefix = "vehicle"; - writtenprefix = "rawfile"; - path = "vehicles/"; - } - } - if ( !isDefined( prefix ) ) - { - return; - } - if ( !isDefined( writtenprefix ) ) - { - string = ( prefix + ", " ) + getsubstr( signature, prefix.size + 1, signature.size ); - } - else - { - string = ( writtenprefix + ", " ) + path + getsubstr( signature, prefix.size + 1, signature.size ) + extension; - } -/# - if ( file == -1 || !level.bcsvgened ) - { - println( string ); - } - else - { - fprintln( file, string ); -#/ - } -} - -script_gen_dumpprintln( file, string ) -{ -/# - if ( file == -1 || !level.bscriptgened ) - { - println( string ); - } - else - { - fprintln( file, string ); -#/ - } -} diff --git a/Zombie Core/patch_zm/maps/mp/_serverfaceanim_mp.gsc b/Zombie Core/patch_zm/maps/mp/_serverfaceanim_mp.gsc deleted file mode 100644 index bbd52a4..0000000 --- a/Zombie Core/patch_zm/maps/mp/_serverfaceanim_mp.gsc +++ /dev/null @@ -1,56 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread onplayerspawned(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread init_serverfaceanim(); - } -} - -init_serverfaceanim() -{ - self.do_face_anims = 1; - if ( !isDefined( level.face_event_handler ) ) - { - level.face_event_handler = spawnstruct(); - level.face_event_handler.events = []; - level.face_event_handler.events[ "death" ] = "face_death"; - level.face_event_handler.events[ "grenade danger" ] = "face_alert"; - level.face_event_handler.events[ "bulletwhizby" ] = "face_alert"; - level.face_event_handler.events[ "projectile_impact" ] = "face_alert"; - level.face_event_handler.events[ "explode" ] = "face_alert"; - level.face_event_handler.events[ "alert" ] = "face_alert"; - level.face_event_handler.events[ "shoot" ] = "face_shoot_single"; - level.face_event_handler.events[ "melee" ] = "face_melee"; - level.face_event_handler.events[ "damage" ] = "face_pain"; - level thread wait_for_face_event(); - } -} - -wait_for_face_event() -{ - while ( 1 ) - { - level waittill( "face", face_notify, ent ); - if ( isDefined( ent ) && isDefined( ent.do_face_anims ) && ent.do_face_anims ) - { - if ( isDefined( level.face_event_handler.events[ face_notify ] ) ) - { - ent sendfaceevent( level.face_event_handler.events[ face_notify ] ); - } - } - } -} diff --git a/Zombie Core/patch_zm/maps/mp/_sticky_grenade.gsc b/Zombie Core/patch_zm/maps/mp/_sticky_grenade.gsc deleted file mode 100644 index eb8885c..0000000 --- a/Zombie Core/patch_zm/maps/mp/_sticky_grenade.gsc +++ /dev/null @@ -1,12 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" ); - loadfx( "weapon/crossbow/fx_trail_crossbow_blink_red_os" ); -} - -watch_bolt_detonation( owner ) -{ -} diff --git a/Zombie Core/patch_zm/maps/mp/_utility.gsc b/Zombie Core/patch_zm/maps/mp/_utility.gsc deleted file mode 100644 index 0157398..0000000 --- a/Zombie Core/patch_zm/maps/mp/_utility.gsc +++ /dev/null @@ -1,3077 +0,0 @@ -#include maps/mp/_utility; -#include maps/mp/_createfx; -#include maps/mp/gametypes/_hud_util; -#include common_scripts/utility; - -addcallback( event, func ) -{ -/# - assert( isDefined( event ), "Trying to set a callback on an undefined event." ); -#/ - if ( !isDefined( level._callbacks ) || !isDefined( level._callbacks[ event ] ) ) - { - level._callbacks[ event ] = []; - } - level._callbacks[ event ] = add_to_array( level._callbacks[ event ], func, 0 ); -} - -callback( event ) -{ - while ( isDefined( level._callbacks ) && isDefined( level._callbacks[ event ] ) ) - { - i = 0; - while ( i < level._callbacks[ event ].size ) - { - callback = level._callbacks[ event ][ i ]; - if ( isDefined( callback ) ) - { - self thread [[ callback ]](); - } - i++; - } - } -} - -onfinalizeinitialization_callback( func ) -{ - addcallback( "on_finalize_initialization", func ); -} - -triggeroff() -{ - if ( !isDefined( self.realorigin ) ) - { - self.realorigin = self.origin; - } - if ( self.origin == self.realorigin ) - { - self.origin += vectorScale( ( 0, 0, 1 ), 10000 ); - } -} - -triggeron() -{ - if ( isDefined( self.realorigin ) ) - { - self.origin = self.realorigin; - } -} - -error( msg ) -{ -/# - println( "^c*ERROR* ", msg ); - wait 0,05; - if ( getDvar( "debug" ) != "1" ) - { - assertmsg( "This is a forced error - attach the log file" ); -#/ - } -} - -warning( msg ) -{ -/# - println( "^1WARNING: " + msg ); -#/ -} - -spawn_array_struct() -{ - s = spawnstruct(); - s.a = []; - return s; -} - -within_fov( start_origin, start_angles, end_origin, fov ) -{ - normal = vectornormalize( end_origin - start_origin ); - forward = anglesToForward( start_angles ); - dot = vectordot( forward, normal ); - return dot >= fov; -} - -append_array_struct( dst_s, src_s ) -{ - i = 0; - while ( i < src_s.a.size ) - { - dst_s.a[ dst_s.a.size ] = src_s.a[ i ]; - i++; - } -} - -exploder( num ) -{ - [[ level.exploderfunction ]]( num ); -} - -exploder_stop( num ) -{ - stop_exploder( num ); -} - -exploder_sound() -{ - if ( isDefined( self.script_delay ) ) - { - wait self.script_delay; - } - self playsound( level.scr_sound[ self.script_sound ] ); -} - -cannon_effect() -{ - if ( isDefined( self.v[ "repeat" ] ) ) - { - i = 0; - while ( i < self.v[ "repeat" ] ) - { - playfx( level._effect[ self.v[ "fxid" ] ], self.v[ "origin" ], self.v[ "forward" ], self.v[ "up" ] ); - self exploder_delay(); - i++; - } - return; - } - self exploder_delay(); - if ( isDefined( self.looper ) ) - { - self.looper delete(); - } - self.looper = spawnfx( getfx( self.v[ "fxid" ] ), self.v[ "origin" ], self.v[ "forward" ], self.v[ "up" ] ); - triggerfx( self.looper ); - exploder_playsound(); -} - -exploder_delay() -{ - if ( !isDefined( self.v[ "delay" ] ) ) - { - self.v[ "delay" ] = 0; - } - min_delay = self.v[ "delay" ]; - max_delay = self.v[ "delay" ] + 0,001; - if ( isDefined( self.v[ "delay_min" ] ) ) - { - min_delay = self.v[ "delay_min" ]; - } - if ( isDefined( self.v[ "delay_max" ] ) ) - { - max_delay = self.v[ "delay_max" ]; - } - if ( min_delay > 0 ) - { - wait randomfloatrange( min_delay, max_delay ); - } -} - -exploder_playsound() -{ - if ( !isDefined( self.v[ "soundalias" ] ) || self.v[ "soundalias" ] == "nil" ) - { - return; - } - play_sound_in_space( self.v[ "soundalias" ], self.v[ "origin" ] ); -} - -brush_delete() -{ - num = self.v[ "exploder" ]; - if ( isDefined( self.v[ "delay" ] ) ) - { - wait self.v[ "delay" ]; - } - else - { - wait 0,05; - } - if ( !isDefined( self.model ) ) - { - return; - } -/# - assert( isDefined( self.model ) ); -#/ - if ( level.createfx_enabled ) - { - if ( isDefined( self.exploded ) ) - { - return; - } - self.exploded = 1; - self.model hide(); - self.model notsolid(); - wait 3; - self.exploded = undefined; - self.model show(); - self.model solid(); - return; - } - if ( !isDefined( self.v[ "fxid" ] ) || self.v[ "fxid" ] == "No FX" ) - { - } - waittillframeend; - self.model delete(); -} - -brush_show() -{ - if ( isDefined( self.v[ "delay" ] ) ) - { - wait self.v[ "delay" ]; - } -/# - assert( isDefined( self.model ) ); -#/ - self.model show(); - self.model solid(); - if ( level.createfx_enabled ) - { - if ( isDefined( self.exploded ) ) - { - return; - } - self.exploded = 1; - wait 3; - self.exploded = undefined; - self.model hide(); - self.model notsolid(); - } -} - -brush_throw() -{ - if ( isDefined( self.v[ "delay" ] ) ) - { - wait self.v[ "delay" ]; - } - ent = undefined; - if ( isDefined( self.v[ "target" ] ) ) - { - ent = getent( self.v[ "target" ], "targetname" ); - } - if ( !isDefined( ent ) ) - { - self.model delete(); - return; - } - self.model show(); - startorg = self.v[ "origin" ]; - startang = self.v[ "angles" ]; - org = ent.origin; - temp_vec = org - self.v[ "origin" ]; - x = temp_vec[ 0 ]; - y = temp_vec[ 1 ]; - z = temp_vec[ 2 ]; - self.model rotatevelocity( ( x, y, z ), 12 ); - self.model movegravity( ( x, y, z ), 12 ); - if ( level.createfx_enabled ) - { - if ( isDefined( self.exploded ) ) - { - return; - } - self.exploded = 1; - wait 3; - self.exploded = undefined; - self.v[ "origin" ] = startorg; - self.v[ "angles" ] = startang; - self.model hide(); - return; - } - wait 6; - self.model delete(); -} - -getplant() -{ - start = self.origin + vectorScale( ( 0, 0, 1 ), 10 ); - range = 11; - forward = anglesToForward( self.angles ); - forward = vectorScale( forward, range ); - traceorigins[ 0 ] = start + forward; - traceorigins[ 1 ] = start; - trace = bullettrace( traceorigins[ 0 ], traceorigins[ 0 ] + vectorScale( ( 0, 0, 1 ), 18 ), 0, undefined ); - if ( trace[ "fraction" ] < 1 ) - { - temp = spawnstruct(); - temp.origin = trace[ "position" ]; - temp.angles = orienttonormal( trace[ "normal" ] ); - return temp; - } - trace = bullettrace( traceorigins[ 1 ], traceorigins[ 1 ] + vectorScale( ( 0, 0, 1 ), 18 ), 0, undefined ); - if ( trace[ "fraction" ] < 1 ) - { - temp = spawnstruct(); - temp.origin = trace[ "position" ]; - temp.angles = orienttonormal( trace[ "normal" ] ); - return temp; - } - traceorigins[ 2 ] = start + vectorScale( ( 0, 0, 1 ), 16 ); - traceorigins[ 3 ] = start + vectorScale( ( 0, 0, 1 ), 16 ); - traceorigins[ 4 ] = start + vectorScale( ( 0, 0, 1 ), 16 ); - traceorigins[ 5 ] = start + vectorScale( ( 0, 0, 1 ), 16 ); - besttracefraction = undefined; - besttraceposition = undefined; - i = 0; - while ( i < traceorigins.size ) - { - trace = bullettrace( traceorigins[ i ], traceorigins[ i ] + vectorScale( ( 0, 0, 1 ), 1000 ), 0, undefined ); - if ( !isDefined( besttracefraction ) || trace[ "fraction" ] < besttracefraction ) - { - besttracefraction = trace[ "fraction" ]; - besttraceposition = trace[ "position" ]; - } - i++; - } - if ( besttracefraction == 1 ) - { - besttraceposition = self.origin; - } - temp = spawnstruct(); - temp.origin = besttraceposition; - temp.angles = orienttonormal( trace[ "normal" ] ); - return temp; -} - -orienttonormal( normal ) -{ - hor_normal = ( normal[ 0 ], normal[ 1 ], 0 ); - hor_length = length( hor_normal ); - if ( !hor_length ) - { - return ( 0, 0, 1 ); - } - hor_dir = vectornormalize( hor_normal ); - neg_height = normal[ 2 ] * -1; - tangent = ( hor_dir[ 0 ] * neg_height, hor_dir[ 1 ] * neg_height, hor_length ); - plant_angle = vectorToAngle( tangent ); - return plant_angle; -} - -array_levelthread( ents, process, var, excluders ) -{ - exclude = []; - i = 0; - while ( i < ents.size ) - { - exclude[ i ] = 0; - i++; - } - while ( isDefined( excluders ) ) - { - i = 0; - while ( i < ents.size ) - { - p = 0; - while ( p < excluders.size ) - { - if ( ents[ i ] == excluders[ p ] ) - { - exclude[ i ] = 1; - } - p++; - } - i++; - } - } - i = 0; - while ( i < ents.size ) - { - if ( !exclude[ i ] ) - { - if ( isDefined( var ) ) - { - level thread [[ process ]]( ents[ i ], var ); - i++; - continue; - } - else - { - level thread [[ process ]]( ents[ i ] ); - } - } - i++; - } -} - -deleteplacedentity( entity ) -{ - entities = getentarray( entity, "classname" ); - i = 0; - while ( i < entities.size ) - { - entities[ i ] delete(); - i++; - } -} - -playsoundonplayers( sound, team ) -{ -/# - assert( isDefined( level.players ) ); -#/ - if ( level.splitscreen ) - { - if ( isDefined( level.players[ 0 ] ) ) - { - level.players[ 0 ] playlocalsound( sound ); - } - } - else if ( isDefined( team ) ) - { - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team ) - { - player playlocalsound( sound ); - } - i++; - } - } - else i = 0; - while ( i < level.players.size ) - { - level.players[ i ] playlocalsound( sound ); - i++; - } -} - -get_player_height() -{ - return 70; -} - -isbulletimpactmod( smeansofdeath ) -{ - if ( !issubstr( smeansofdeath, "BULLET" ) ) - { - return smeansofdeath == "MOD_HEAD_SHOT"; - } -} - -get_team_alive_players_s( teamname ) -{ - teamplayers_s = spawn_array_struct(); - while ( isDefined( teamname ) && isDefined( level.aliveplayers ) && isDefined( level.aliveplayers[ teamname ] ) ) - { - i = 0; - while ( i < level.aliveplayers[ teamname ].size ) - { - teamplayers_s.a[ teamplayers_s.a.size ] = level.aliveplayers[ teamname ][ i ]; - i++; - } - } - return teamplayers_s; -} - -get_all_alive_players_s() -{ - allplayers_s = spawn_array_struct(); - while ( isDefined( level.aliveplayers ) ) - { - keys = getarraykeys( level.aliveplayers ); - i = 0; - while ( i < keys.size ) - { - team = keys[ i ]; - j = 0; - while ( j < level.aliveplayers[ team ].size ) - { - allplayers_s.a[ allplayers_s.a.size ] = level.aliveplayers[ team ][ j ]; - j++; - } - i++; - } - } - return allplayers_s; -} - -waitrespawnbutton() -{ - self endon( "disconnect" ); - self endon( "end_respawn" ); - while ( self usebuttonpressed() != 1 ) - { - wait 0,05; - } -} - -setlowermessage( text, time, combinemessageandtimer ) -{ - if ( !isDefined( self.lowermessage ) ) - { - return; - } - if ( isDefined( self.lowermessageoverride ) && text != &"" ) - { - text = self.lowermessageoverride; - time = undefined; - } - self notify( "lower_message_set" ); - self.lowermessage settext( text ); - if ( isDefined( time ) && time > 0 ) - { - if ( !isDefined( combinemessageandtimer ) || !combinemessageandtimer ) - { - self.lowertimer.label = &""; - } - else - { - self.lowermessage settext( "" ); - self.lowertimer.label = text; - } - self.lowertimer settimer( time ); - } - else - { - self.lowertimer settext( "" ); - self.lowertimer.label = &""; - } - if ( self issplitscreen() ) - { - self.lowermessage.fontscale = 1,4; - } - self.lowermessage fadeovertime( 0,05 ); - self.lowermessage.alpha = 1; - self.lowertimer fadeovertime( 0,05 ); - self.lowertimer.alpha = 1; -} - -setlowermessagevalue( text, value, combinemessage ) -{ - if ( !isDefined( self.lowermessage ) ) - { - return; - } - if ( isDefined( self.lowermessageoverride ) && text != &"" ) - { - text = self.lowermessageoverride; - time = undefined; - } - self notify( "lower_message_set" ); - if ( !isDefined( combinemessage ) || !combinemessage ) - { - self.lowermessage settext( text ); - } - else - { - self.lowermessage settext( "" ); - } - if ( isDefined( value ) && value > 0 ) - { - if ( !isDefined( combinemessage ) || !combinemessage ) - { - self.lowertimer.label = &""; - } - else - { - self.lowertimer.label = text; - } - self.lowertimer setvalue( value ); - } - else - { - self.lowertimer settext( "" ); - self.lowertimer.label = &""; - } - if ( self issplitscreen() ) - { - self.lowermessage.fontscale = 1,4; - } - self.lowermessage fadeovertime( 0,05 ); - self.lowermessage.alpha = 1; - self.lowertimer fadeovertime( 0,05 ); - self.lowertimer.alpha = 1; -} - -clearlowermessage( fadetime ) -{ - if ( !isDefined( self.lowermessage ) ) - { - return; - } - self notify( "lower_message_set" ); - if ( !isDefined( fadetime ) || fadetime == 0 ) - { - setlowermessage( &"" ); - } - else - { - self endon( "disconnect" ); - self endon( "lower_message_set" ); - self.lowermessage fadeovertime( fadetime ); - self.lowermessage.alpha = 0; - self.lowertimer fadeovertime( fadetime ); - self.lowertimer.alpha = 0; - wait fadetime; - self setlowermessage( "" ); - } -} - -printonteam( text, team ) -{ -/# - assert( isDefined( level.players ) ); -#/ - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team ) - { - player iprintln( text ); - } - i++; - } -} - -printboldonteam( text, team ) -{ -/# - assert( isDefined( level.players ) ); -#/ - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team ) - { - player iprintlnbold( text ); - } - i++; - } -} - -printboldonteamarg( text, team, arg ) -{ -/# - assert( isDefined( level.players ) ); -#/ - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team ) - { - player iprintlnbold( text, arg ); - } - i++; - } -} - -printonteamarg( text, team, arg ) -{ -} - -printonplayers( text, team ) -{ - players = level.players; - i = 0; - while ( i < players.size ) - { - if ( isDefined( team ) ) - { - if ( isDefined( players[ i ].pers[ "team" ] ) && players[ i ].pers[ "team" ] == team ) - { - players[ i ] iprintln( text ); - } - i++; - continue; - } - else - { - players[ i ] iprintln( text ); - } - i++; - } -} - -printandsoundoneveryone( team, enemyteam, printfriendly, printenemy, soundfriendly, soundenemy, printarg ) -{ - shoulddosounds = isDefined( soundfriendly ); - shoulddoenemysounds = 0; - if ( isDefined( soundenemy ) ) - { -/# - assert( shoulddosounds ); -#/ - shoulddoenemysounds = 1; - } - if ( !isDefined( printarg ) ) - { - printarg = ""; - } - if ( level.splitscreen || !shoulddosounds ) - { - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - playerteam = player.pers[ "team" ]; - if ( isDefined( playerteam ) ) - { - if ( playerteam == team && isDefined( printfriendly ) && printfriendly != &"" ) - { - player iprintln( printfriendly, printarg ); - i++; - continue; - } - else - { - if ( isDefined( printenemy ) && printenemy != &"" ) - { - if ( isDefined( enemyteam ) && playerteam == enemyteam ) - { - player iprintln( printenemy, printarg ); - i++; - continue; - } - else - { - if ( !isDefined( enemyteam ) && playerteam != team ) - { - player iprintln( printenemy, printarg ); - } - } - } - } - } - i++; - } - if ( shoulddosounds ) - { -/# - assert( level.splitscreen ); -#/ - level.players[ 0 ] playlocalsound( soundfriendly ); - } - } - else - { -/# - assert( shoulddosounds ); -#/ - if ( shoulddoenemysounds ) - { - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - playerteam = player.pers[ "team" ]; - if ( isDefined( playerteam ) ) - { - if ( playerteam == team ) - { - if ( isDefined( printfriendly ) && printfriendly != &"" ) - { - player iprintln( printfriendly, printarg ); - } - player playlocalsound( soundfriendly ); - i++; - continue; - } - else - { - if ( isDefined( enemyteam ) || playerteam == enemyteam && !isDefined( enemyteam ) && playerteam != team ) - { - if ( isDefined( printenemy ) && printenemy != &"" ) - { - player iprintln( printenemy, printarg ); - } - player playlocalsound( soundenemy ); - } - } - } - i++; - } - } - else i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - playerteam = player.pers[ "team" ]; - if ( isDefined( playerteam ) ) - { - if ( playerteam == team ) - { - if ( isDefined( printfriendly ) && printfriendly != &"" ) - { - player iprintln( printfriendly, printarg ); - } - player playlocalsound( soundfriendly ); - i++; - continue; - } - else if ( isDefined( printenemy ) && printenemy != &"" ) - { - if ( isDefined( enemyteam ) && playerteam == enemyteam ) - { - player iprintln( printenemy, printarg ); - i++; - continue; - } - else - { - if ( !isDefined( enemyteam ) && playerteam != team ) - { - player iprintln( printenemy, printarg ); - } - } - } - } - i++; - } - } -} - -_playlocalsound( soundalias ) -{ - if ( level.splitscreen && !self ishost() ) - { - return; - } - self playlocalsound( soundalias ); -} - -dvarintvalue( dvar, defval, minval, maxval ) -{ - dvar = "scr_" + level.gametype + "_" + dvar; - if ( getDvar( dvar ) == "" ) - { - setdvar( dvar, defval ); - return defval; - } - value = getDvarInt( dvar ); - if ( value > maxval ) - { - value = maxval; - } - else if ( value < minval ) - { - value = minval; - } - else - { - return value; - } - setdvar( dvar, value ); - return value; -} - -dvarfloatvalue( dvar, defval, minval, maxval ) -{ - dvar = "scr_" + level.gametype + "_" + dvar; - if ( getDvar( dvar ) == "" ) - { - setdvar( dvar, defval ); - return defval; - } - value = getDvarFloat( dvar ); - if ( value > maxval ) - { - value = maxval; - } - else if ( value < minval ) - { - value = minval; - } - else - { - return value; - } - setdvar( dvar, value ); - return value; -} - -play_sound_on_tag( alias, tag ) -{ - if ( isDefined( tag ) ) - { - org = spawn( "script_origin", self gettagorigin( tag ) ); - org linkto( self, tag, ( 0, 0, 1 ), ( 0, 0, 1 ) ); - } - else - { - org = spawn( "script_origin", ( 0, 0, 1 ) ); - org.origin = self.origin; - org.angles = self.angles; - org linkto( self ); - } - org playsound( alias ); - wait 5; - org delete(); -} - -createloopeffect( fxid ) -{ - ent = maps/mp/_createfx::createeffect( "loopfx", fxid ); - ent.v[ "delay" ] = 0,5; - return ent; -} - -createoneshoteffect( fxid ) -{ - ent = maps/mp/_createfx::createeffect( "oneshotfx", fxid ); - ent.v[ "delay" ] = -15; - return ent; -} - -loop_fx_sound( alias, origin, ender, timeout ) -{ - org = spawn( "script_origin", ( 0, 0, 1 ) ); - if ( isDefined( ender ) ) - { - thread loop_sound_delete( ender, org ); - self endon( ender ); - } - org.origin = origin; - org playloopsound( alias ); - if ( !isDefined( timeout ) ) - { - return; - } - wait timeout; -} - -exploder_damage() -{ - if ( isDefined( self.v[ "delay" ] ) ) - { - delay = self.v[ "delay" ]; - } - else - { - delay = 0; - } - if ( isDefined( self.v[ "damage_radius" ] ) ) - { - radius = self.v[ "damage_radius" ]; - } - else - { - radius = 128; - } - damage = self.v[ "damage" ]; - origin = self.v[ "origin" ]; - wait delay; - radiusdamage( origin, radius, damage, damage ); -} - -exploder_before_load( num ) -{ - waittillframeend; - waittillframeend; - activate_exploder( num ); -} - -exploder_after_load( num ) -{ - activate_exploder( num ); -} - -getexploderid( ent ) -{ - if ( !isDefined( level._exploder_ids ) ) - { - level._exploder_ids = []; - level._exploder_id = 1; - } - if ( !isDefined( level._exploder_ids[ ent.v[ "exploder" ] ] ) ) - { - level._exploder_ids[ ent.v[ "exploder" ] ] = level._exploder_id; - level._exploder_id++; - } - return level._exploder_ids[ ent.v[ "exploder" ] ]; -} - -activate_exploder_on_clients( num ) -{ - if ( !isDefined( level._exploder_ids[ num ] ) ) - { - return; - } - if ( !isDefined( level._client_exploders[ num ] ) ) - { - level._client_exploders[ num ] = 1; - } - if ( !isDefined( level._client_exploder_ids[ num ] ) ) - { - level._client_exploder_ids[ num ] = 1; - } - activateclientexploder( level._exploder_ids[ num ] ); -} - -delete_exploder_on_clients( num ) -{ - if ( !isDefined( level._exploder_ids[ num ] ) ) - { - return; - } - if ( !isDefined( level._client_exploders[ num ] ) ) - { - return; - } - deactivateclientexploder( level._exploder_ids[ num ] ); -} - -activate_individual_exploder() -{ - level notify( "exploder" + self.v[ "exploder" ] ); - if ( !level.createfx_enabled && level.clientscripts || !isDefined( level._exploder_ids[ int( self.v[ "exploder" ] ) ] ) && isDefined( self.v[ "exploder_server" ] ) ) - { -/# - println( "Exploder " + self.v[ "exploder" ] + " created on server." ); -#/ - if ( isDefined( self.v[ "firefx" ] ) ) - { - self thread fire_effect(); - } - if ( isDefined( self.v[ "fxid" ] ) && self.v[ "fxid" ] != "No FX" ) - { - self thread cannon_effect(); - } - else - { - if ( isDefined( self.v[ "soundalias" ] ) ) - { - self thread sound_effect(); - } - } - } - if ( isDefined( self.v[ "trailfx" ] ) ) - { - self thread trail_effect(); - } - if ( isDefined( self.v[ "damage" ] ) ) - { - self thread exploder_damage(); - } - if ( self.v[ "exploder_type" ] == "exploder" ) - { - self thread brush_show(); - } - else if ( self.v[ "exploder_type" ] == "exploderchunk" || self.v[ "exploder_type" ] == "exploderchunk visible" ) - { - self thread brush_throw(); - } - else - { - self thread brush_delete(); - } -} - -trail_effect() -{ - self exploder_delay(); - if ( !isDefined( self.v[ "trailfxtag" ] ) ) - { - self.v[ "trailfxtag" ] = "tag_origin"; - } - temp_ent = undefined; - if ( self.v[ "trailfxtag" ] == "tag_origin" ) - { - playfxontag( level._effect[ self.v[ "trailfx" ] ], self.model, self.v[ "trailfxtag" ] ); - } - else - { - temp_ent = spawn( "script_model", self.model.origin ); - temp_ent setmodel( "tag_origin" ); - temp_ent linkto( self.model, self.v[ "trailfxtag" ] ); - playfxontag( level._effect[ self.v[ "trailfx" ] ], temp_ent, "tag_origin" ); - } - if ( isDefined( self.v[ "trailfxsound" ] ) ) - { - if ( !isDefined( temp_ent ) ) - { - self.model playloopsound( self.v[ "trailfxsound" ] ); - } - else - { - temp_ent playloopsound( self.v[ "trailfxsound" ] ); - } - } - if ( isDefined( self.v[ "ender" ] ) && isDefined( temp_ent ) ) - { - level thread trail_effect_ender( temp_ent, self.v[ "ender" ] ); - } - if ( !isDefined( self.v[ "trailfxtimeout" ] ) ) - { - return; - } - wait self.v[ "trailfxtimeout" ]; - if ( isDefined( temp_ent ) ) - { - temp_ent delete(); - } -} - -trail_effect_ender( ent, ender ) -{ - ent endon( "death" ); - self waittill( ender ); - ent delete(); -} - -activate_exploder( num ) -{ - num = int( num ); -/# - if ( level.createfx_enabled ) - { - i = 0; - while ( i < level.createfxent.size ) - { - ent = level.createfxent[ i ]; - if ( !isDefined( ent ) ) - { - i++; - continue; - } - else if ( ent.v[ "type" ] != "exploder" ) - { - i++; - continue; - } - else if ( !isDefined( ent.v[ "exploder" ] ) ) - { - i++; - continue; - } - else if ( ent.v[ "exploder" ] != num ) - { - i++; - continue; - } - else - { - if ( isDefined( ent.v[ "exploder_server" ] ) ) - { - client_send = 0; - } - ent activate_individual_exploder(); - } - i++; - } - return; -#/ - } - client_send = 1; - while ( isDefined( level.createfxexploders[ num ] ) ) - { - i = 0; - while ( i < level.createfxexploders[ num ].size ) - { - if ( client_send && isDefined( level.createfxexploders[ num ][ i ].v[ "exploder_server" ] ) ) - { - client_send = 0; - } - level.createfxexploders[ num ][ i ] activate_individual_exploder(); - i++; - } - } - if ( level.clientscripts ) - { - if ( !level.createfx_enabled && client_send == 1 ) - { - activate_exploder_on_clients( num ); - } - } -} - -stop_exploder( num ) -{ - num = int( num ); - if ( level.clientscripts ) - { - if ( !level.createfx_enabled ) - { - delete_exploder_on_clients( num ); - } - } - while ( isDefined( level.createfxexploders[ num ] ) ) - { - i = 0; - while ( i < level.createfxexploders[ num ].size ) - { - if ( !isDefined( level.createfxexploders[ num ][ i ].looper ) ) - { - i++; - continue; - } - else - { - level.createfxexploders[ num ][ i ].looper delete(); - } - i++; - } - } -} - -sound_effect() -{ - self effect_soundalias(); -} - -effect_soundalias() -{ - if ( !isDefined( self.v[ "delay" ] ) ) - { - self.v[ "delay" ] = 0; - } - origin = self.v[ "origin" ]; - alias = self.v[ "soundalias" ]; - wait self.v[ "delay" ]; - play_sound_in_space( alias, origin ); -} - -play_sound_in_space( alias, origin, master ) -{ - org = spawn( "script_origin", ( 0, 0, 1 ) ); - if ( !isDefined( origin ) ) - { - origin = self.origin; - } - org.origin = origin; - if ( isDefined( master ) && master ) - { - org playsoundasmaster( alias ); - } - else - { - org playsound( alias ); - } - wait 10; - org delete(); -} - -loop_sound_in_space( alias, origin, ender ) -{ - org = spawn( "script_origin", ( 0, 0, 1 ) ); - if ( !isDefined( origin ) ) - { - origin = self.origin; - } - org.origin = origin; - org playloopsound( alias ); - level waittill( ender ); - org stoploopsound(); - wait 0,1; - org delete(); -} - -fire_effect() -{ - if ( !isDefined( self.v[ "delay" ] ) ) - { - self.v[ "delay" ] = 0; - } - delay = self.v[ "delay" ]; - if ( isDefined( self.v[ "delay_min" ] ) && isDefined( self.v[ "delay_max" ] ) ) - { - delay = self.v[ "delay_min" ] + randomfloat( self.v[ "delay_max" ] - self.v[ "delay_min" ] ); - } - forward = self.v[ "forward" ]; - up = self.v[ "up" ]; - org = undefined; - firefxsound = self.v[ "firefxsound" ]; - origin = self.v[ "origin" ]; - firefx = self.v[ "firefx" ]; - ender = self.v[ "ender" ]; - if ( !isDefined( ender ) ) - { - ender = "createfx_effectStopper"; - } - timeout = self.v[ "firefxtimeout" ]; - firefxdelay = 0,5; - if ( isDefined( self.v[ "firefxdelay" ] ) ) - { - firefxdelay = self.v[ "firefxdelay" ]; - } - wait delay; - if ( isDefined( firefxsound ) ) - { - level thread loop_fx_sound( firefxsound, origin, ender, timeout ); - } - playfx( level._effect[ firefx ], self.v[ "origin" ], forward, up ); -} - -loop_sound_delete( ender, ent ) -{ - ent endon( "death" ); - self waittill( ender ); - ent delete(); -} - -createexploder( fxid ) -{ - ent = maps/mp/_createfx::createeffect( "exploder", fxid ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1; - ent.v[ "exploder_type" ] = "normal"; - return ent; -} - -getotherteam( team ) -{ - if ( team == "allies" ) - { - return "axis"; - } - else - { - if ( team == "axis" ) - { - return "allies"; - } - else - { - return "allies"; - } - } -/# - assertmsg( "getOtherTeam: invalid team " + team ); -#/ -} - -getteammask( team ) -{ - if ( level.teambased || !isDefined( team ) && !isDefined( level.spawnsystem.ispawn_teammask[ team ] ) ) - { - return level.spawnsystem.ispawn_teammask_free; - } - return level.spawnsystem.ispawn_teammask[ team ]; -} - -getotherteamsmask( skip_team ) -{ - mask = 0; - _a1408 = level.teams; - _k1408 = getFirstArrayKey( _a1408 ); - while ( isDefined( _k1408 ) ) - { - team = _a1408[ _k1408 ]; - if ( team == skip_team ) - { - } - else - { - mask |= getteammask( team ); - } - _k1408 = getNextArrayKey( _a1408, _k1408 ); - } - return mask; -} - -wait_endon( waittime, endonstring, endonstring2, endonstring3, endonstring4 ) -{ - self endon( endonstring ); - if ( isDefined( endonstring2 ) ) - { - self endon( endonstring2 ); - } - if ( isDefined( endonstring3 ) ) - { - self endon( endonstring3 ); - } - if ( isDefined( endonstring4 ) ) - { - self endon( endonstring4 ); - } - wait waittime; - return 1; -} - -ismg( weapon ) -{ - return issubstr( weapon, "_bipod_" ); -} - -plot_points( plotpoints, r, g, b, timer ) -{ -/# - lastpoint = plotpoints[ 0 ]; - if ( !isDefined( r ) ) - { - r = 1; - } - if ( !isDefined( g ) ) - { - g = 1; - } - if ( !isDefined( b ) ) - { - b = 1; - } - if ( !isDefined( timer ) ) - { - timer = 0,05; - } - i = 1; - while ( i < plotpoints.size ) - { - line( lastpoint, plotpoints[ i ], ( r, g, b ), 1, timer ); - lastpoint = plotpoints[ i ]; - i++; -#/ - } -} - -player_flag_wait( msg ) -{ - while ( !self.flag[ msg ] ) - { - self waittill( msg ); - } -} - -player_flag_wait_either( flag1, flag2 ) -{ - for ( ;; ) - { - if ( flag( flag1 ) ) - { - return; - } - if ( flag( flag2 ) ) - { - return; - } - self waittill_either( flag1, flag2 ); - } -} - -player_flag_waitopen( msg ) -{ - while ( self.flag[ msg ] ) - { - self waittill( msg ); - } -} - -player_flag_init( message, trigger ) -{ - if ( !isDefined( self.flag ) ) - { - self.flag = []; - self.flags_lock = []; - } -/# - assert( !isDefined( self.flag[ message ] ), "Attempt to reinitialize existing message: " + message ); -#/ - self.flag[ message ] = 0; -/# - self.flags_lock[ message ] = 0; -#/ -} - -player_flag_set_delayed( message, delay ) -{ - wait delay; - player_flag_set( message ); -} - -player_flag_set( message ) -{ -/# - assert( isDefined( self.flag[ message ] ), "Attempt to set a flag before calling flag_init: " + message ); - assert( self.flag[ message ] == self.flags_lock[ message ] ); - self.flags_lock[ message ] = 1; -#/ - self.flag[ message ] = 1; - self notify( message ); -} - -player_flag_clear( message ) -{ -/# - assert( isDefined( self.flag[ message ] ), "Attempt to set a flag before calling flag_init: " + message ); - assert( self.flag[ message ] == self.flags_lock[ message ] ); - self.flags_lock[ message ] = 0; -#/ - self.flag[ message ] = 0; - self notify( message ); -} - -player_flag( message ) -{ -/# - assert( isDefined( message ), "Tried to check flag but the flag was not defined." ); -#/ - if ( !self.flag[ message ] ) - { - return 0; - } - return 1; -} - -registerclientsys( ssysname ) -{ - if ( !isDefined( level._clientsys ) ) - { - level._clientsys = []; - } - if ( level._clientsys.size >= 32 ) - { -/# - error( "Max num client systems exceeded." ); -#/ - return; - } - if ( isDefined( level._clientsys[ ssysname ] ) ) - { -/# - error( "Attempt to re-register client system : " + ssysname ); -#/ - return; - } - else - { - level._clientsys[ ssysname ] = spawnstruct(); - level._clientsys[ ssysname ].sysid = clientsysregister( ssysname ); - } -} - -setclientsysstate( ssysname, ssysstate, player ) -{ - if ( !isDefined( level._clientsys ) ) - { -/# - error( "setClientSysState called before registration of any systems." ); -#/ - return; - } - if ( !isDefined( level._clientsys[ ssysname ] ) ) - { -/# - error( "setClientSysState called on unregistered system " + ssysname ); -#/ - return; - } - if ( isDefined( player ) ) - { - player clientsyssetstate( level._clientsys[ ssysname ].sysid, ssysstate ); - } - else - { - clientsyssetstate( level._clientsys[ ssysname ].sysid, ssysstate ); - level._clientsys[ ssysname ].sysstate = ssysstate; - } -} - -getclientsysstate( ssysname ) -{ - if ( !isDefined( level._clientsys ) ) - { -/# - error( "Cannot getClientSysState before registering any client systems." ); -#/ - return ""; - } - if ( !isDefined( level._clientsys[ ssysname ] ) ) - { -/# - error( "Client system " + ssysname + " cannot return state, as it is unregistered." ); -#/ - return ""; - } - if ( isDefined( level._clientsys[ ssysname ].sysstate ) ) - { - return level._clientsys[ ssysname ].sysstate; - } - return ""; -} - -clientnotify( event ) -{ - if ( level.clientscripts ) - { - if ( isplayer( self ) ) - { - maps/mp/_utility::setclientsysstate( "levelNotify", event, self ); - return; - } - else - { - maps/mp/_utility::setclientsysstate( "levelNotify", event ); - } - } -} - -alphabet_compare( a, b ) -{ - list = []; - val = 1; - list[ "0" ] = val; - val++; - list[ "1" ] = val; - val++; - list[ "2" ] = val; - val++; - list[ "3" ] = val; - val++; - list[ "4" ] = val; - val++; - list[ "5" ] = val; - val++; - list[ "6" ] = val; - val++; - list[ "7" ] = val; - val++; - list[ "8" ] = val; - val++; - list[ "9" ] = val; - val++; - list[ "_" ] = val; - val++; - list[ "a" ] = val; - val++; - list[ "b" ] = val; - val++; - list[ "c" ] = val; - val++; - list[ "d" ] = val; - val++; - list[ "e" ] = val; - val++; - list[ "f" ] = val; - val++; - list[ "g" ] = val; - val++; - list[ "h" ] = val; - val++; - list[ "i" ] = val; - val++; - list[ "j" ] = val; - val++; - list[ "k" ] = val; - val++; - list[ "l" ] = val; - val++; - list[ "m" ] = val; - val++; - list[ "n" ] = val; - val++; - list[ "o" ] = val; - val++; - list[ "p" ] = val; - val++; - list[ "q" ] = val; - val++; - list[ "r" ] = val; - val++; - list[ "s" ] = val; - val++; - list[ "t" ] = val; - val++; - list[ "u" ] = val; - val++; - list[ "v" ] = val; - val++; - list[ "w" ] = val; - val++; - list[ "x" ] = val; - val++; - list[ "y" ] = val; - val++; - list[ "z" ] = val; - val++; - a = tolower( a ); - b = tolower( b ); - val1 = 0; - if ( isDefined( list[ a ] ) ) - { - val1 = list[ a ]; - } - val2 = 0; - if ( isDefined( list[ b ] ) ) - { - val2 = list[ b ]; - } - if ( val1 > val2 ) - { - return "1st"; - } - if ( val1 < val2 ) - { - return "2nd"; - } - return "same"; -} - -is_later_in_alphabet( string1, string2 ) -{ - count = string1.size; - if ( count >= string2.size ) - { - count = string2.size; - } - i = 0; - while ( i < count ) - { - val = alphabet_compare( string1[ i ], string2[ i ] ); - if ( val == "1st" ) - { - return 1; - } - if ( val == "2nd" ) - { - return 0; - } - i++; - } - return string1.size > string2.size; -} - -alphabetize( array ) -{ - if ( array.size <= 1 ) - { - return array; - } - count = 0; - for ( ;; ) - { - changed = 0; - i = 0; - while ( i < ( array.size - 1 ) ) - { - if ( is_later_in_alphabet( array[ i ], array[ i + 1 ] ) ) - { - val = array[ i ]; - array[ i ] = array[ i + 1 ]; - array[ i + 1 ] = val; - changed = 1; - count++; - if ( count >= 9 ) - { - count = 0; - wait 0,05; - } - } - i++; - } - if ( !changed ) - { - return array; - } - } - return array; -} - -get_players() -{ - players = getplayers(); - return players; -} - -getfx( fx ) -{ -/# - assert( isDefined( level._effect[ fx ] ), "Fx " + fx + " is not defined in level._effect." ); -#/ - return level._effect[ fx ]; -} - -struct_arrayspawn() -{ - struct = spawnstruct(); - struct.array = []; - struct.lastindex = 0; - return struct; -} - -structarray_add( struct, object ) -{ -/# - assert( !isDefined( object.struct_array_index ) ); -#/ - struct.array[ struct.lastindex ] = object; - object.struct_array_index = struct.lastindex; - struct.lastindex++; -} - -structarray_remove( struct, object ) -{ - structarray_swaptolast( struct, object ); - struct.lastindex--; - -} - -structarray_swaptolast( struct, object ) -{ - struct structarray_swap( struct.array[ struct.lastindex - 1 ], object ); -} - -structarray_shuffle( struct, shuffle ) -{ - i = 0; - while ( i < shuffle ) - { - struct structarray_swap( struct.array[ i ], struct.array[ randomint( struct.lastindex ) ] ); - i++; - } -} - -structarray_swap( object1, object2 ) -{ - index1 = object1.struct_array_index; - index2 = object2.struct_array_index; - self.array[ index2 ] = object1; - self.array[ index1 ] = object2; - self.array[ index1 ].struct_array_index = index1; - self.array[ index2 ].struct_array_index = index2; -} - -waittill_either( msg1, msg2 ) -{ - self endon( msg1 ); - self waittill( msg2 ); -} - -combinearrays( array1, array2 ) -{ -/# - if ( !isDefined( array1 ) ) - { - assert( isDefined( array2 ) ); - } -#/ - if ( !isDefined( array1 ) && isDefined( array2 ) ) - { - return array2; - } - if ( !isDefined( array2 ) && isDefined( array1 ) ) - { - return array1; - } - _a1822 = array2; - _k1822 = getFirstArrayKey( _a1822 ); - while ( isDefined( _k1822 ) ) - { - elem = _a1822[ _k1822 ]; - array1[ array1.size ] = elem; - _k1822 = getNextArrayKey( _a1822, _k1822 ); - } - return array1; -} - -getclosest( org, array, dist ) -{ - return comparesizes( org, array, dist, ::closerfunc ); -} - -getclosestfx( org, fxarray, dist ) -{ - return comparesizesfx( org, fxarray, dist, ::closerfunc ); -} - -getfarthest( org, array, dist ) -{ - return comparesizes( org, array, dist, ::fartherfunc ); -} - -comparesizesfx( org, array, dist, comparefunc ) -{ - if ( !array.size ) - { - return undefined; - } - if ( isDefined( dist ) ) - { - distsqr = dist * dist; - struct = undefined; - keys = getarraykeys( array ); - i = 0; - while ( i < keys.size ) - { - newdistsqr = distancesquared( array[ keys[ i ] ].v[ "origin" ], org ); - if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) - { - i++; - continue; - } - else - { - distsqr = newdistsqr; - struct = array[ keys[ i ] ]; - } - i++; - } - return struct; - } - keys = getarraykeys( array ); - struct = array[ keys[ 0 ] ]; - distsqr = distancesquared( struct.v[ "origin" ], org ); - i = 1; - while ( i < keys.size ) - { - newdistsqr = distancesquared( array[ keys[ i ] ].v[ "origin" ], org ); - if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) - { - i++; - continue; - } - else - { - distsqr = newdistsqr; - struct = array[ keys[ i ] ]; - } - i++; - } - return struct; -} - -comparesizes( org, array, dist, comparefunc ) -{ - if ( !array.size ) - { - return undefined; - } - if ( isDefined( dist ) ) - { - distsqr = dist * dist; - ent = undefined; - keys = getarraykeys( array ); - i = 0; - while ( i < keys.size ) - { - if ( !isDefined( array[ keys[ i ] ] ) ) - { - i++; - continue; - } - else newdistsqr = distancesquared( array[ keys[ i ] ].origin, org ); - if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) - { - i++; - continue; - } - else - { - distsqr = newdistsqr; - ent = array[ keys[ i ] ]; - } - i++; - } - return ent; - } - keys = getarraykeys( array ); - ent = array[ keys[ 0 ] ]; - distsqr = distancesquared( ent.origin, org ); - i = 1; - while ( i < keys.size ) - { - if ( !isDefined( array[ keys[ i ] ] ) ) - { - i++; - continue; - } - else newdistsqr = distancesquared( array[ keys[ i ] ].origin, org ); - if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) - { - i++; - continue; - } - else - { - distsqr = newdistsqr; - ent = array[ keys[ i ] ]; - } - i++; - } - return ent; -} - -closerfunc( dist1, dist2 ) -{ - return dist1 >= dist2; -} - -fartherfunc( dist1, dist2 ) -{ - return dist1 <= dist2; -} - -get_array_of_closest( org, array, excluders, max, maxdist ) -{ - if ( !isDefined( max ) ) - { - max = array.size; - } - if ( !isDefined( excluders ) ) - { - excluders = []; - } - maxdists2rd = undefined; - if ( isDefined( maxdist ) ) - { - maxdists2rd = maxdist * maxdist; - } - dist = []; - index = []; - i = 0; - while ( i < array.size ) - { - if ( !isDefined( array[ i ] ) ) - { - i++; - continue; - } - else excluded = 0; - p = 0; - while ( p < excluders.size ) - { - if ( array[ i ] != excluders[ p ] ) - { - p++; - continue; - } - else - { - excluded = 1; - break; - } - p++; - } - if ( excluded ) - { - i++; - continue; - } - else length = distancesquared( org, array[ i ].origin ); - if ( isDefined( maxdists2rd ) && maxdists2rd < length ) - { - i++; - continue; - } - else - { - dist[ dist.size ] = length; - index[ index.size ] = i; - } - i++; - } - for ( ;; ) - { - change = 0; - i = 0; - while ( i < ( dist.size - 1 ) ) - { - if ( dist[ i ] <= dist[ i + 1 ] ) - { - i++; - continue; - } - else - { - change = 1; - temp = dist[ i ]; - dist[ i ] = dist[ i + 1 ]; - dist[ i + 1 ] = temp; - temp = index[ i ]; - index[ i ] = index[ i + 1 ]; - index[ i + 1 ] = temp; - } - i++; - } - if ( !change ) - { - break; - } - else - { - } - } - newarray = []; - if ( max > dist.size ) - { - max = dist.size; - } - i = 0; - while ( i < max ) - { - newarray[ i ] = array[ index[ i ] ]; - i++; - } - return newarray; -} - -set_dvar_if_unset( dvar, value, reset ) -{ - if ( !isDefined( reset ) ) - { - reset = 0; - } - if ( reset || getDvar( dvar ) == "" ) - { - setdvar( dvar, value ); - return value; - } - return getDvar( dvar ); -} - -set_dvar_float_if_unset( dvar, value, reset ) -{ - if ( !isDefined( reset ) ) - { - reset = 0; - } - if ( reset || getDvar( dvar ) == "" ) - { - setdvar( dvar, value ); - } - return getDvarFloat( dvar ); -} - -set_dvar_int_if_unset( dvar, value, reset ) -{ - if ( !isDefined( reset ) ) - { - reset = 0; - } - if ( reset || getDvar( dvar ) == "" ) - { - setdvar( dvar, value ); - return int( value ); - } - return getDvarInt( dvar ); -} - -drawcylinder( pos, rad, height, duration, stop_notify ) -{ -/# - if ( !isDefined( duration ) ) - { - duration = 0; - } - level thread drawcylinder_think( pos, rad, height, duration, stop_notify ); -#/ -} - -drawcylinder_think( pos, rad, height, seconds, stop_notify ) -{ -/# - if ( isDefined( stop_notify ) ) - { - level endon( stop_notify ); - } - stop_time = getTime() + ( seconds * 1000 ); - currad = rad; - curheight = height; - for ( ;; ) - { - if ( seconds > 0 && stop_time <= getTime() ) - { - return; - } - r = 0; - while ( r < 20 ) - { - theta = ( r / 20 ) * 360; - theta2 = ( ( r + 1 ) / 20 ) * 360; - line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, 0 ) ); - line( pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, curheight ) ); - line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ) ); - r++; - } - wait 0,05; -#/ - } -} - -is_bot() -{ - if ( isplayer( self ) && isDefined( self.pers[ "isBot" ] ) ) - { - return self.pers[ "isBot" ] != 0; - } -} - -add_trigger_to_ent( ent ) -{ - if ( !isDefined( ent._triggers ) ) - { - ent._triggers = []; - } - ent._triggers[ self getentitynumber() ] = 1; -} - -remove_trigger_from_ent( ent ) -{ - if ( !isDefined( ent ) ) - { - return; - } - if ( !isDefined( ent._triggers ) ) - { - return; - } - if ( !isDefined( ent._triggers[ self getentitynumber() ] ) ) - { - return; - } - ent._triggers[ self getentitynumber() ] = 0; -} - -ent_already_in_trigger( trig ) -{ - if ( !isDefined( self._triggers ) ) - { - return 0; - } - if ( !isDefined( self._triggers[ trig getentitynumber() ] ) ) - { - return 0; - } - if ( !self._triggers[ trig getentitynumber() ] ) - { - return 0; - } - return 1; -} - -trigger_thread_death_monitor( ent, ender ) -{ - ent waittill( "death" ); - self endon( ender ); - self remove_trigger_from_ent( ent ); -} - -trigger_thread( ent, on_enter_payload, on_exit_payload ) -{ - ent endon( "entityshutdown" ); - ent endon( "death" ); - if ( ent ent_already_in_trigger( self ) ) - { - return; - } - self add_trigger_to_ent( ent ); - ender = "end_trig_death_monitor" + self getentitynumber() + " " + ent getentitynumber(); - self thread trigger_thread_death_monitor( ent, ender ); - endon_condition = "leave_trigger_" + self getentitynumber(); - if ( isDefined( on_enter_payload ) ) - { - self thread [[ on_enter_payload ]]( ent, endon_condition ); - } - while ( isDefined( ent ) && ent istouching( self ) ) - { - wait 0,01; - } - ent notify( endon_condition ); - if ( isDefined( ent ) && isDefined( on_exit_payload ) ) - { - self thread [[ on_exit_payload ]]( ent ); - } - if ( isDefined( ent ) ) - { - self remove_trigger_from_ent( ent ); - } - self notify( ender ); -} - -isoneround() -{ - if ( level.roundlimit == 1 ) - { - return 1; - } - return 0; -} - -isfirstround() -{ - if ( level.roundlimit > 1 && game[ "roundsplayed" ] == 0 ) - { - return 1; - } - return 0; -} - -islastround() -{ - if ( level.roundlimit > 1 && game[ "roundsplayed" ] >= ( level.roundlimit - 1 ) ) - { - return 1; - } - return 0; -} - -waslastround() -{ - if ( level.forcedend ) - { - return 1; - } - if ( isDefined( level.shouldplayovertimeround ) ) - { - if ( [[ level.shouldplayovertimeround ]]() ) - { - level.nextroundisovertime = 1; - return 0; - } - else - { - if ( isDefined( game[ "overtime_round" ] ) ) - { - return 1; - } - } - } - if ( !hitroundlimit() || hitscorelimit() && hitroundwinlimit() ) - { - return 1; - } - return 0; -} - -hitroundlimit() -{ - if ( level.roundlimit <= 0 ) - { - return 0; - } - return getroundsplayed() >= level.roundlimit; -} - -anyteamhitroundwinlimit() -{ - _a2296 = level.teams; - _k2296 = getFirstArrayKey( _a2296 ); - while ( isDefined( _k2296 ) ) - { - team = _a2296[ _k2296 ]; - if ( getroundswon( team ) >= level.roundwinlimit ) - { - return 1; - } - _k2296 = getNextArrayKey( _a2296, _k2296 ); - } - return 0; -} - -anyteamhitroundlimitwithdraws() -{ - tie_wins = game[ "roundswon" ][ "tie" ]; - _a2309 = level.teams; - _k2309 = getFirstArrayKey( _a2309 ); - while ( isDefined( _k2309 ) ) - { - team = _a2309[ _k2309 ]; - if ( ( getroundswon( team ) + tie_wins ) >= level.roundwinlimit ) - { - return 1; - } - _k2309 = getNextArrayKey( _a2309, _k2309 ); - } - return 0; -} - -getroundwinlimitwinningteam() -{ - max_wins = 0; - winning_team = undefined; - _a2323 = level.teams; - _k2323 = getFirstArrayKey( _a2323 ); - while ( isDefined( _k2323 ) ) - { - team = _a2323[ _k2323 ]; - wins = getroundswon( team ); - if ( !isDefined( winning_team ) ) - { - max_wins = wins; - winning_team = team; - } - else if ( wins == max_wins ) - { - winning_team = "tie"; - } - else - { - if ( wins > max_wins ) - { - max_wins = wins; - winning_team = team; - } - } - _k2323 = getNextArrayKey( _a2323, _k2323 ); - } - return winning_team; -} - -hitroundwinlimit() -{ - if ( !isDefined( level.roundwinlimit ) || level.roundwinlimit <= 0 ) - { - return 0; - } - if ( anyteamhitroundwinlimit() ) - { - return 1; - } - if ( anyteamhitroundlimitwithdraws() ) - { - if ( getroundwinlimitwinningteam() != "tie" ) - { - return 1; - } - } - return 0; -} - -anyteamhitscorelimit() -{ - _a2379 = level.teams; - _k2379 = getFirstArrayKey( _a2379 ); - while ( isDefined( _k2379 ) ) - { - team = _a2379[ _k2379 ]; - if ( game[ "teamScores" ][ team ] >= level.scorelimit ) - { - return 1; - } - _k2379 = getNextArrayKey( _a2379, _k2379 ); - } - return 0; -} - -hitscorelimit() -{ - if ( isscoreroundbased() ) - { - return 0; - } - if ( level.scorelimit <= 0 ) - { - return 0; - } - if ( level.teambased ) - { - if ( anyteamhitscorelimit() ) - { - return 1; - } - } - else - { - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( isDefined( player.pointstowin ) && player.pointstowin >= level.scorelimit ) - { - return 1; - } - i++; - } - } - return 0; -} - -getroundswon( team ) -{ - return game[ "roundswon" ][ team ]; -} - -getotherteamsroundswon( skip_team ) -{ - roundswon = 0; - _a2423 = level.teams; - _k2423 = getFirstArrayKey( _a2423 ); - while ( isDefined( _k2423 ) ) - { - team = _a2423[ _k2423 ]; - if ( team == skip_team ) - { - } - else - { - roundswon += game[ "roundswon" ][ team ]; - } - _k2423 = getNextArrayKey( _a2423, _k2423 ); - } - return roundswon; -} - -getroundsplayed() -{ - return game[ "roundsplayed" ]; -} - -isscoreroundbased() -{ - return level.scoreroundbased; -} - -isroundbased() -{ - if ( level.roundlimit != 1 && level.roundwinlimit != 1 ) - { - return 1; - } - return 0; -} - -waittillnotmoving() -{ - if ( self ishacked() ) - { - wait 0,05; - return; - } - if ( self.classname == "grenade" ) - { - self waittill( "stationary" ); - } - else prevorigin = self.origin; - while ( 1 ) - { - wait 0,15; - if ( self.origin == prevorigin ) - { - return; - } - else - { - prevorigin = self.origin; - } - } -} - -mayapplyscreeneffect() -{ -/# - assert( isDefined( self ) ); -#/ -/# - assert( isplayer( self ) ); -#/ - return !isDefined( self.viewlockedentity ); -} - -getdvarfloatdefault( dvarname, defaultvalue ) -{ - value = getDvar( dvarname ); - if ( value != "" ) - { - return float( value ); - } - return defaultvalue; -} - -getdvarintdefault( dvarname, defaultvalue ) -{ - value = getDvar( dvarname ); - if ( value != "" ) - { - return int( value ); - } - return defaultvalue; -} - -closestpointonline( point, linestart, lineend ) -{ - linemagsqrd = lengthsquared( lineend - linestart ); - t = ( ( ( ( point[ 0 ] - linestart[ 0 ] ) * ( lineend[ 0 ] - linestart[ 0 ] ) ) + ( ( point[ 1 ] - linestart[ 1 ] ) * ( lineend[ 1 ] - linestart[ 1 ] ) ) ) + ( ( point[ 2 ] - linestart[ 2 ] ) * ( lineend[ 2 ] - linestart[ 2 ] ) ) ) / linemagsqrd; - if ( t < 0 ) - { - return linestart; - } - else - { - if ( t > 1 ) - { - return lineend; - } - } - start_x = linestart[ 0 ] + ( t * ( lineend[ 0 ] - linestart[ 0 ] ) ); - start_y = linestart[ 1 ] + ( t * ( lineend[ 1 ] - linestart[ 1 ] ) ); - start_z = linestart[ 2 ] + ( t * ( lineend[ 2 ] - linestart[ 2 ] ) ); - return ( start_x, start_y, start_z ); -} - -isstrstart( string1, substr ) -{ - return getsubstr( string1, 0, substr.size ) == substr; -} - -spread_array_thread( entities, process, var1, var2, var3 ) -{ - keys = getarraykeys( entities ); - if ( isDefined( var3 ) ) - { - i = 0; - while ( i < keys.size ) - { - entities[ keys[ i ] ] thread [[ process ]]( var1, var2, var3 ); - wait 0,1; - i++; - } - return; - } - if ( isDefined( var2 ) ) - { - i = 0; - while ( i < keys.size ) - { - entities[ keys[ i ] ] thread [[ process ]]( var1, var2 ); - wait 0,1; - i++; - } - return; - } - if ( isDefined( var1 ) ) - { - i = 0; - while ( i < keys.size ) - { - entities[ keys[ i ] ] thread [[ process ]]( var1 ); - wait 0,1; - i++; - } - return; - } - i = 0; - while ( i < keys.size ) - { - entities[ keys[ i ] ] thread [[ process ]](); - wait 0,1; - i++; - } -} - -freeze_player_controls( boolean ) -{ -/# - assert( isDefined( boolean ), "'freeze_player_controls()' has not been passed an argument properly." ); -#/ - if ( boolean && isDefined( self ) ) - { - self freezecontrols( boolean ); - } - else - { - if ( !boolean && isDefined( self ) && !level.gameended ) - { - self freezecontrols( boolean ); - } - } -} - -gethostplayer() -{ - players = get_players(); - index = 0; - while ( index < players.size ) - { - if ( players[ index ] ishost() ) - { - return players[ index ]; - } - index++; - } -} - -gethostplayerforbots() -{ - players = get_players(); - index = 0; - while ( index < players.size ) - { - if ( players[ index ] ishostforbots() ) - { - return players[ index ]; - } - index++; - } -} - -ispregame() -{ - if ( isDefined( level.pregame ) ) - { - return level.pregame; - } -} - -iskillstreaksenabled() -{ - if ( isDefined( level.killstreaksenabled ) ) - { - return level.killstreaksenabled; - } -} - -isrankenabled() -{ - if ( isDefined( level.rankenabled ) ) - { - return level.rankenabled; - } -} - -playsmokesound( position, duration, startsound, stopsound, loopsound ) -{ - smokesound = spawn( "script_origin", ( 0, 0, 1 ) ); - smokesound.origin = position; - smokesound playsound( startsound ); - smokesound playloopsound( loopsound ); - if ( duration > 0,5 ) - { - wait ( duration - 0,5 ); - } - thread playsoundinspace( stopsound, position ); - smokesound stoploopsound( 0,5 ); - wait 0,5; - smokesound delete(); -} - -playsoundinspace( alias, origin, master ) -{ - org = spawn( "script_origin", ( 0, 0, 1 ) ); - if ( !isDefined( origin ) ) - { - origin = self.origin; - } - org.origin = origin; - if ( isDefined( master ) && master ) - { - org playsoundasmaster( alias ); - } - else - { - org playsound( alias ); - } - wait 10; - org delete(); -} - -get2dyaw( start, end ) -{ - yaw = 0; - vector = ( end[ 0 ] - start[ 0 ], end[ 1 ] - start[ 1 ], 0 ); - return vectoangles( vector ); -} - -vectoangles( vector ) -{ - yaw = 0; - vecx = vector[ 0 ]; - vecy = vector[ 1 ]; - if ( vecx == 0 && vecy == 0 ) - { - return 0; - } - if ( vecy < 0,001 && vecy > -0,001 ) - { - vecy = 0,001; - } - yaw = atan( vecx / vecy ); - if ( vecy < 0 ) - { - yaw += 180; - } - return 90 - yaw; -} - -deleteaftertime( time ) -{ -/# - assert( isDefined( self ) ); -#/ -/# - assert( isDefined( time ) ); -#/ -/# - assert( time >= 0,05 ); -#/ - self thread deleteaftertimethread( time ); -} - -deleteaftertimethread( time ) -{ - self endon( "death" ); - wait time; - self delete(); -} - -setusingremote( remotename ) -{ - if ( isDefined( self.carryicon ) ) - { - self.carryicon.alpha = 0; - } -/# - assert( !self isusingremote() ); -#/ - self.usingremote = remotename; - self disableoffhandweapons(); - self notify( "using_remote" ); -} - -getremotename() -{ -/# - assert( self isusingremote() ); -#/ - return self.usingremote; -} - -isusingremote() -{ - return isDefined( self.usingremote ); -} - -getlastweapon() -{ - last_weapon = undefined; - if ( self hasweapon( self.lastnonkillstreakweapon ) ) - { - last_weapon = self.lastnonkillstreakweapon; - } - else - { - if ( self hasweapon( self.lastdroppableweapon ) ) - { - last_weapon = self.lastdroppableweapon; - } - } -/# - assert( isDefined( last_weapon ) ); -#/ - return last_weapon; -} - -freezecontrolswrapper( frozen ) -{ - if ( isDefined( level.hostmigrationtimer ) ) - { - self freeze_player_controls( 1 ); - return; - } - self freeze_player_controls( frozen ); -} - -setobjectivetext( team, text ) -{ - game[ "strings" ][ "objective_" + team ] = text; - precachestring( text ); -} - -setobjectivescoretext( team, text ) -{ - game[ "strings" ][ "objective_score_" + team ] = text; - precachestring( text ); -} - -setobjectivehinttext( team, text ) -{ - game[ "strings" ][ "objective_hint_" + team ] = text; - precachestring( text ); -} - -getobjectivetext( team ) -{ - return game[ "strings" ][ "objective_" + team ]; -} - -getobjectivescoretext( team ) -{ - return game[ "strings" ][ "objective_score_" + team ]; -} - -getobjectivehinttext( team ) -{ - return game[ "strings" ][ "objective_hint_" + team ]; -} - -registerroundswitch( minvalue, maxvalue ) -{ - level.roundswitch = clamp( getgametypesetting( "roundSwitch" ), minvalue, maxvalue ); - level.roundswitchmin = minvalue; - level.roundswitchmax = maxvalue; -} - -registerroundlimit( minvalue, maxvalue ) -{ - level.roundlimit = clamp( getgametypesetting( "roundLimit" ), minvalue, maxvalue ); - level.roundlimitmin = minvalue; - level.roundlimitmax = maxvalue; -} - -registerroundwinlimit( minvalue, maxvalue ) -{ - level.roundwinlimit = clamp( getgametypesetting( "roundWinLimit" ), minvalue, maxvalue ); - level.roundwinlimitmin = minvalue; - level.roundwinlimitmax = maxvalue; -} - -registerscorelimit( minvalue, maxvalue ) -{ - level.scorelimit = clamp( getgametypesetting( "scoreLimit" ), minvalue, maxvalue ); - level.scorelimitmin = minvalue; - level.scorelimitmax = maxvalue; - setdvar( "ui_scorelimit", level.scorelimit ); -} - -registertimelimit( minvalue, maxvalue ) -{ - level.timelimit = clamp( getgametypesetting( "timeLimit" ), minvalue, maxvalue ); - level.timelimitmin = minvalue; - level.timelimitmax = maxvalue; - setdvar( "ui_timelimit", level.timelimit ); -} - -registernumlives( minvalue, maxvalue ) -{ - level.numlives = clamp( getgametypesetting( "playerNumLives" ), minvalue, maxvalue ); - level.numlivesmin = minvalue; - level.numlivesmax = maxvalue; -} - -getplayerfromclientnum( clientnum ) -{ - if ( clientnum < 0 ) - { - return undefined; - } - i = 0; - while ( i < level.players.size ) - { - if ( level.players[ i ] getentitynumber() == clientnum ) - { - return level.players[ i ]; - } - i++; - } - return undefined; -} - -setclientfield( field_name, value ) -{ - if ( self == level ) - { - codesetworldclientfield( field_name, value ); - } - else - { - codesetclientfield( self, field_name, value ); - } -} - -setclientfieldtoplayer( field_name, value ) -{ - codesetplayerstateclientfield( self, field_name, value ); -} - -getclientfield( field_name ) -{ - if ( self == level ) - { - return codegetworldclientfield( field_name ); - } - else - { - return codegetclientfield( self, field_name ); - } -} - -getclientfieldtoplayer( field_name ) -{ - return codegetplayerstateclientfield( self, field_name ); -} - -isenemyplayer( player ) -{ -/# - assert( isDefined( player ) ); -#/ - if ( !isplayer( player ) ) - { - return 0; - } - if ( level.teambased ) - { - if ( player.team == self.team ) - { - return 0; - } - } - else - { - if ( player == self ) - { - return 0; - } - } - return 1; -} - -getweaponclass( weapon ) -{ -/# - assert( isDefined( weapon ) ); -#/ - if ( !isDefined( weapon ) ) - { - return undefined; - } - if ( !isDefined( level.weaponclassarray ) ) - { - level.weaponclassarray = []; - } - if ( isDefined( level.weaponclassarray[ weapon ] ) ) - { - return level.weaponclassarray[ weapon ]; - } - baseweaponindex = getbaseweaponitemindex( weapon ) + 1; - weaponclass = tablelookupcolumnforrow( "mp/statstable.csv", baseweaponindex, 2 ); - level.weaponclassarray[ weapon ] = weaponclass; - return weaponclass; -} - -ispressbuild() -{ - buildtype = getDvar( #"19B966D7" ); - if ( isDefined( buildtype ) && buildtype == "press" ) - { - return 1; - } - return 0; -} - -isflashbanged() -{ - if ( isDefined( self.flashendtime ) ) - { - return getTime() < self.flashendtime; - } -} - -ishacked() -{ - if ( isDefined( self.hacked ) ) - { - return self.hacked; - } -} - -domaxdamage( origin, attacker, inflictor, headshot, mod ) -{ - if ( isDefined( self.damagedtodeath ) && self.damagedtodeath ) - { - return; - } - if ( isDefined( self.maxhealth ) ) - { - damage = self.maxhealth + 1; - } - else - { - damage = self.health + 1; - } - self.damagedtodeath = 1; - self dodamage( damage, origin, attacker, inflictor, headshot, mod ); -} diff --git a/Zombie Core/patch_zm/maps/mp/_visionset_mgr.gsc b/Zombie Core/patch_zm/maps/mp/_visionset_mgr.gsc deleted file mode 100644 index 8eddfac..0000000 --- a/Zombie Core/patch_zm/maps/mp/_visionset_mgr.gsc +++ /dev/null @@ -1,474 +0,0 @@ -//checked includes matches beta dump -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches beta dump -{ - if ( level.createfx_enabled ) - { - return; - } - level.vsmgr_initializing = 1; - level.vsmgr_default_info_name = "none"; - level.vsmgr = []; - level thread register_type( "visionset" ); - level thread register_type( "overlay" ); - onfinalizeinitialization_callback( ::finalize_clientfields ); - level thread monitor(); - level thread onplayerconnect(); -} - -vsmgr_register_info( type, name, version, priority, lerp_step_count, activate_per_player, lerp_thread, ref_count_lerp_thread ) //checked matches beta dump -{ - if ( level.createfx_enabled ) - { - return; - } - /* -/# - assert( level.vsmgr_initializing, "All info registration in the visionset_mgr system must occur during the first frame while the system is initializing" ); -#/ - */ - lower_name = tolower( name ); - validate_info( type, lower_name, priority ); - add_sorted_name_key( type, lower_name ); - add_sorted_priority_key( type, lower_name, priority ); - level.vsmgr[ type ].info[ lower_name ] = spawnstruct(); - level.vsmgr[ type ].info[ lower_name ] add_info( type, lower_name, version, priority, lerp_step_count, activate_per_player, lerp_thread, ref_count_lerp_thread ); - if ( level.vsmgr[ type ].highest_version < version ) - { - level.vsmgr[ type ].highest_version = version; - } -} - -vsmgr_activate( type, name, player, opt_param_1, opt_param_2 ) //checked changed to match beta dump -{ - if ( level.vsmgr[ type ].info[ name ].state.activate_per_player ) - { - activate_per_player( type, name, player, opt_param_1, opt_param_2 ); - return; - } - state = level.vsmgr[ type ].info[ name ].state; - if ( state.ref_count_lerp_thread ) - { - state.ref_count++; - if ( state.ref_count > 1 ) - { - return; - } - } - if ( isDefined( state.lerp_thread ) ) - { - state thread lerp_thread_wrapper( state.lerp_thread, opt_param_1, opt_param_2 ); - } - else - { - players = getplayers(); - for( player_index = 0; player_index < players.size; player_index++ ) - { - state vsmgr_set_state_active( players[ player_index ], 1 ); - } - } -} - -vsmgr_deactivate( type, name, player ) //checked changed to match beta dump -{ - if ( level.vsmgr[ type ].info[ name ].state.activate_per_player ) - { - deactivate_per_player( type, name, player ); - return; - } - state = level.vsmgr[ type ].info[ name ].state; - if ( state.ref_count_lerp_thread ) - { - state.ref_count--; - - if ( state.ref_count > 0 ) - { - return; - } - } - state notify( "deactivate" ); - players = getplayers(); - for( player_index = 0; player_index < players.size; player_index++ ) - { - state vsmgr_set_state_inactive( players[ player_index ] ); - } -} - -vsmgr_set_state_active( player, lerp ) //checked matches cerberus output -{ - player_entnum = player getentitynumber(); - if ( !isDefined( self.players[ player_entnum ] ) ) - { - return; - } - self.players[ player_entnum ].active = 1; - self.players[ player_entnum ].lerp = lerp; -} - -vsmgr_set_state_inactive( player ) //checked matches cerberus output -{ - player_entnum = player getentitynumber(); - if ( !isDefined( self.players[ player_entnum ] ) ) - { - return; - } - self.players[ player_entnum ].active = 0; - self.players[ player_entnum ].lerp = 0; -} - -vsmgr_timeout_lerp_thread( timeout, opt_param_2 ) //checked changed to match beta dump -{ - players = getplayers(); - for( player_index = 0; player_index < players.size; player_index++ ) - { - self vsmgr_set_state_active( players[ player_index ], 1 ); - } - wait timeout; - vsmgr_deactivate( self.type, self.name ); -} - -vsmgr_timeout_lerp_thread_per_player( player, timeout, opt_param_2 ) //checked matches beta dump -{ - self vsmgr_set_state_active( player, 1 ); - wait timeout; - deactivate_per_player( self.type, self.name, player ); -} - -vsmgr_duration_lerp_thread( duration, max_duration ) //checked changed to match beta dump -{ - start_time = getTime(); - end_time = start_time + int( duration * 1000 ); - if ( isDefined( max_duration ) ) - { - start_time = end_time - int( max_duration * 1000 ); - } - while ( 1 ) - { - lerp = calc_remaining_duration_lerp( start_time, end_time ); - if ( lerp <= 0 ) - { - break; - } - players = getplayers(); - for( player_index = 0; player_index < players.size; player_index++ ) - { - self vsmgr_set_state_active( players[ player_index ], lerp ); - } - wait 0.05; - } - vsmgr_deactivate( self.type, self.name ); -} - -vsmgr_duration_lerp_thread_per_player( player, duration, max_duration ) //checked changed to match beta dump -{ - start_time = getTime(); - end_time = start_time + int( duration * 1000 ); - if ( isDefined( max_duration ) ) - { - start_time = end_time - int( max_duration * 1000 ); - } - while ( 1 ) - { - lerp = calc_remaining_duration_lerp( start_time, end_time ); - if ( lerp <= 0 ) - { - break; - } - self vsmgr_set_state_active( player, lerp ); - wait 0.05; - } - deactivate_per_player( self.type, self.name, player ); -} - -register_type( type ) //checked matches beta dump -{ - level.vsmgr[ type ] = spawnstruct(); - level.vsmgr[ type ].type = type; - level.vsmgr[ type ].in_use = 0; - level.vsmgr[ type ].highest_version = 0; - level.vsmgr[ type ].cf_slot_name = type + "_slot"; - level.vsmgr[ type ].cf_lerp_name = type + "_lerp"; - level.vsmgr[ type ].info = []; - level.vsmgr[ type ].sorted_name_keys = []; - level.vsmgr[ type ].sorted_prio_keys = []; - vsmgr_register_info( type, level.vsmgr_default_info_name, 1, 0, 1, 0, undefined ); -} - -finalize_clientfields() //checked changed to match beta dump -{ - typekeys = getarraykeys( level.vsmgr ); - for ( type_index = 0; type_index < typeKeys.size; type_index++ ) - { - level.vsmgr[ typekeys[ type_index ] ] thread finalize_type_clientfields(); - } - level.vsmgr_initializing = 0; -} - -finalize_type_clientfields() //checked changed to match beta dump -{ - if ( self.info.size <= 1 ) - { - return; - } - self.in_use = 1; - self.cf_slot_bit_count = getminbitcountfornum( self.info.size - 1 ); - self.cf_lerp_bit_count = self.info[ self.sorted_name_keys[ 0 ] ].lerp_bit_count; - for ( i = 0; i < self.sorted_name_keys.size; i++ ) - { - self.info[ self.sorted_name_keys[ i ] ].slot_index = i; - if ( self.info[ self.sorted_name_keys[ i ] ].lerp_bit_count > self.cf_lerp_bit_count ) - { - self.cf_lerp_bit_count = self.info[ self.sorted_name_keys[ i ] ].lerp_bit_count; - } - } - registerclientfield( "toplayer", self.cf_slot_name, self.highest_version, self.cf_slot_bit_count, "int" ); - if ( self.cf_lerp_bit_count > 1 ) - { - registerclientfield( "toplayer", self.cf_lerp_name, self.highest_version, self.cf_lerp_bit_count, "float" ); - } -} - -validate_info( type, name, priority ) //checked changed to match beta dump -{ - keys = getarraykeys( level.vsmgr ); - for ( i = 0; i < keys.size; i++ ) - { - if ( type == keys[ i ] ) - { - break; - } - } - /* -/# - assert( i < keys.size, "In visionset_mgr, type '" + type + "'is unknown" ); -#/ - */ - keys = getarraykeys( level.vsmgr[ type ].info ); - for ( i = 0; i < keys.size; i++ ) - { - /* -/# - assert( level.vsmgr[ type ].info[ keys[ i ] ].name != name, "In visionset_mgr of type '" + type + "': name '" + name + "' has previously been registered" ); -#/ -/# - assert( level.vsmgr[ type ].info[ keys[ i ] ].priority != priority, "In visionset_mgr of type '" + type + "': priority '" + priority + "' requested for name '" + name + "' has previously been registered under name '" + level.vsmgr[ type ].info[ keys[ i ] ].name + "'" ); -#/ - */ - } -} - -add_sorted_name_key( type, name ) //checked changed to match beta dump -{ - for ( i = 0; i < level.vsmgr[type].sorted_name_keys.size; i++ ) - { - if ( name < level.vsmgr[ type ].sorted_name_keys[ i ] ) - { - break; - } - } - arrayinsert( level.vsmgr[ type ].sorted_name_keys, name, i ); -} - -add_sorted_priority_key( type, name, priority ) //checked changed to match beta dump -{ - for ( i = 0; i < level.vsmgr[type].sorted_prio_keys.size; i++ ) - { - if ( priority > level.vsmgr[ type ].info[ level.vsmgr[ type ].sorted_prio_keys[ i ] ].priority ) - { - break; - } - } - arrayinsert( level.vsmgr[ type ].sorted_prio_keys, name, i ); -} - -add_info( type, name, version, priority, lerp_step_count, activate_per_player, lerp_thread, ref_count_lerp_thread ) //checked matches beta dump -{ - self.type = type; - self.name = name; - self.version = version; - self.priority = priority; - self.lerp_step_count = lerp_step_count; - self.lerp_bit_count = getminbitcountfornum( lerp_step_count ); - if ( !isDefined( ref_count_lerp_thread ) ) - { - ref_count_lerp_thread = 0; - } - self.state = spawnstruct(); - self.state.type = type; - self.state.name = name; - self.state.activate_per_player = activate_per_player; - self.state.lerp_thread = lerp_thread; - self.state.ref_count_lerp_thread = ref_count_lerp_thread; - self.state.players = []; - if ( ref_count_lerp_thread && !activate_per_player ) - { - self.state.ref_count = 0; - } -} - -onplayerconnect() //checked matches beta dump -{ - for ( ;; ) - { - level waittill( "connected", player ); - player thread on_player_connect(); - } -} - -on_player_connect() //checked partially changed to match beta dump -{ - self._player_entnum = self getentitynumber(); - typekeys = getarraykeys( level.vsmgr ); - for ( type_index = 0; type_index < typeKeys.size; type_index++ ) - { - type = typekeys[ type_index ]; - if ( !level.vsmgr[ type ].in_use ) - { - type_index++; - } - else - { - for ( name_index = 0; name_index < level.vsmgr[type].sorted_name_keys.size; name_index++ ) - { - name_key = level.vsmgr[ type ].sorted_name_keys[ name_index ]; - level.vsmgr[ type ].info[ name_key ].state.players[ self._player_entnum ] = spawnstruct(); - level.vsmgr[ type ].info[ name_key ].state.players[ self._player_entnum ].active = 0; - level.vsmgr[ type ].info[ name_key ].state.players[ self._player_entnum ].lerp = 0; - if ( level.vsmgr[ type ].info[ name_key ].state.ref_count_lerp_thread && level.vsmgr[ type ].info[ name_key ].state.activate_per_player ) - { - level.vsmgr[ type ].info[ name_key ].state.players[ self._player_entnum ].ref_count = 0; - } - } - level.vsmgr[ type ].info[ level.vsmgr_default_info_name ].state vsmgr_set_state_active( self, 1 ); - } - } -} - -monitor() //checked partially changed to match beta dump -{ - while ( level.vsmgr_initializing ) - { - wait 0.05; - } - typekeys = getarraykeys( level.vsmgr ); - while ( 1 ) - { - wait 0.05; - waittillframeend; - players = get_players(); - for ( type_index = 0; type_index < typeKeys.size; type_index++ ) - { - type = typekeys[ type_index ]; - if ( !level.vsmgr[ type ].in_use ) - { - type_index++; - } - else - { - for ( player_index = 0; player_index < players.size; player_index++ ) - { - /* -/# - if ( is_true( players[ player_index ].pers[ "isBot" ] ) ) - { - player_index++; - continue; -#/ - } - */ - update_clientfields( players[ player_index ], level.vsmgr[ type ] ); - } - } - } - } -} - -get_first_active_name( type_struct ) //checked partially changed to match beta dump -{ - size = type_struct.sorted_prio_keys.size; - for ( prio_index = 0; prio_index < size; prio_index++ ) - { - prio_key = type_struct.sorted_prio_keys[ prio_index ]; - if ( type_struct.info[ prio_key ].state.players[ self._player_entnum ].active ) - { - return prio_key; - } - } - return level.vsmgr_default_info_name; -} - -update_clientfields( player, type_struct ) //checked changed to match beta dump -{ - name = player get_first_active_name( type_struct ); - player setclientfieldtoplayer( type_struct.cf_slot_name, type_struct.info[ name ].slot_index ); - if ( type_struct.cf_lerp_bit_count > 1 ) - { - player setclientfieldtoplayer( type_struct.cf_lerp_name, type_struct.info[ name ].state.players[ player._player_entnum ].lerp ); - } -} - -lerp_thread_wrapper( func, opt_param_1, opt_param_2 ) //checked matches beta dump -{ - self notify( "deactivate" ); - self endon( "deactivate" ); - self [[ func ]]( opt_param_1, opt_param_2 ); -} - -lerp_thread_per_player_wrapper( func, player, opt_param_1, opt_param_2 ) //checked matches beta dump -{ - player_entnum = player getentitynumber(); - self notify( "deactivate" ); - self endon( "deactivate" ); - self.players[ player_entnum ] notify( "deactivate" ); - self.players[ player_entnum ] endon( "deactivate" ); - player endon( "disconnect" ); - self [[ func ]]( player, opt_param_1, opt_param_2 ); -} - -activate_per_player( type, name, player, opt_param_1, opt_param_2 ) //checked changed to match beta dump -{ - player_entnum = player getentitynumber(); - state = level.vsmgr[ type ].info[ name ].state; - if ( state.ref_count_lerp_thread ) - { - state.players[ player_entnum ].ref_count++; - if ( state.players[ player_entnum ].ref_count > 1 ) - { - return; - } - } - if ( isDefined( state.lerp_thread ) ) - { - state thread lerp_thread_per_player_wrapper( state.lerp_thread, player, opt_param_1, opt_param_2 ); - } - else - { - state vsmgr_set_state_active( player, 1 ); - } -} - -deactivate_per_player( type, name, player ) //checked changed to match beta dump -{ - player_entnum = player getentitynumber(); - state = level.vsmgr[ type ].info[ name ].state; - if ( state.ref_count_lerp_thread ) - { - state.players[ player_entnum ].ref_count--; - - if ( state.players[ player_entnum ].ref_count > 0 ) - { - return; - } - } - state vsmgr_set_state_inactive( player ); - state notify( "deactivate" ); -} - -calc_remaining_duration_lerp( start_time, end_time ) //checked matches beta dump -{ - now = getTime(); - frac = float( end_time - now ) / float( end_time - start_time ); - return clamp( frac, 0, 1 ); -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/dog_combat.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/dog_combat.gsc deleted file mode 100644 index 54d4f91..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/dog_combat.gsc +++ /dev/null @@ -1,106 +0,0 @@ -#include maps/mp/animscripts/utility; -#include maps/mp/animscripts/shared; -#include common_scripts/utility; - -main() -{ - debug_anim_print( "dog_combat::main() " ); - self endon( "killanimscript" ); - self setaimanimweights( 0, 0 ); -/# - if ( !debug_allow_combat() ) - { - combatidle(); - return; -#/ - } - if ( isDefined( level.hostmigrationtimer ) ) - { - combatidle(); - return; - } -/# - assert( isDefined( self.enemy ) ); -#/ - if ( !isalive( self.enemy ) ) - { - combatidle(); - return; - } - if ( isplayer( self.enemy ) ) - { - self meleebiteattackplayer( self.enemy ); - } -} - -combatidle() -{ - self set_orient_mode( "face enemy" ); - self animmode( "zonly_physics", 0 ); - idleanims = []; - idleanims[ 0 ] = "combat_attackidle"; - idleanims[ 1 ] = "combat_attackidle_bark"; - idleanims[ 2 ] = "combat_attackidle_growl"; - idleanim = random( idleanims ); - debug_anim_print( "dog_combat::combatIdle() - Setting " + idleanim ); - self setanimstate( idleanim ); - self maps/mp/animscripts/shared::donotetracks( "done" ); - debug_anim_print( "dog_combat::combatIdle() - " + idleanim + " notify done." ); -} - -meleebiteattackplayer( player ) -{ - self set_orient_mode( "face enemy" ); - self animmode( "gravity", 0 ); - self.safetochangescript = 0; - if ( use_low_attack() ) - { - self animmode( "angle deltas", 0 ); - self setanimstate( "combat_attack_player_close_range" ); - wait 0,35; - if ( isplayer( self.enemy ) && self.enemy getstance() == "prone" ) - { - self meleewithoffset( vectorScale( ( 0, 0, -1 ), 9 ) ); - } - else - { - self melee(); - } - self maps/mp/animscripts/shared::donotetracksfortime( 1,2, "done" ); - self animmode( "gravity", 0 ); - } - else - { - attack_time = 1,2 + randomfloat( 0,4 ); - debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_run_attack" ); - self setanimstate( "combat_attack_run" ); - self maps/mp/animscripts/shared::donotetracksfortime( attack_time, "done", ::handlemeleebiteattacknotetracks, player ); - debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - combat_attack_run notify done." ); - } - self.safetochangescript = 1; - self animmode( "none", 0 ); -} - -handlemeleebiteattacknotetracks( note, player ) -{ - if ( note == "dog_melee" ) - { - self melee( anglesToForward( self.angles ) ); - } -} - -use_low_attack() -{ - if ( isplayer( self.enemy ) ) - { - if ( self.enemy getstance() == "prone" ) - { - attack_height = self.origin[ 2 ] + 16; - if ( self.enemy.origin[ 2 ] < attack_height ) - { - return 1; - } - } - } - return 0; -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/dog_death.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/dog_death.gsc deleted file mode 100644 index 8f65047..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/dog_death.gsc +++ /dev/null @@ -1,30 +0,0 @@ -#include maps/mp/animscripts/shared; -#include maps/mp/animscripts/utility; - -main() -{ - debug_anim_print( "dog_death::main()" ); - self setaimanimweights( 0, 0 ); - self endon( "killanimscript" ); - if ( isDefined( self.a.nodeath ) ) - { -/# - assert( self.a.nodeath, "Nodeath needs to be set to true or undefined." ); -#/ - wait 3; - return; - } - self unlink(); - if ( isDefined( self.enemy ) && isDefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self ) - { - self.enemy.syncedmeleetarget = undefined; - } - death_anim = "death_" + getanimdirection( self.damageyaw ); -/# - println( death_anim ); -#/ - self animmode( "gravity", 0 ); - debug_anim_print( "dog_death::main() - Setting " + death_anim ); - self setanimstate( death_anim ); - self maps/mp/animscripts/shared::donotetracks( "done" ); -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/dog_flashed.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/dog_flashed.gsc deleted file mode 100644 index e86fde0..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/dog_flashed.gsc +++ /dev/null @@ -1,29 +0,0 @@ -#include maps/mp/animscripts/shared; - -main() -{ - self endon( "killanimscript" ); - self endon( "stop_flashbang_effect" ); - wait randomfloatrange( 0, 0,4 ); - duration = self startflashbanged() * 0,001; - self setanimstate( "flashed" ); - self maps/mp/animscripts/shared::donotetracks( "done" ); - self setflashbanged( 0 ); - self.flashed = 0; - self notify( "stop_flashbang_effect" ); -} - -startflashbanged() -{ - if ( isDefined( self.flashduration ) ) - { - duration = self.flashduration; - } - else - { - duration = self getflashbangedstrength() * 1000; - } - self.flashendtime = getTime() + duration; - self notify( "flashed" ); - return duration; -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/dog_init.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/dog_init.gsc deleted file mode 100644 index c8439f7..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/dog_init.gsc +++ /dev/null @@ -1,62 +0,0 @@ -#include maps/mp/animscripts/dog_combat; -#include maps/mp/animscripts/dog_move; -#include maps/mp/animscripts/utility; -#include maps/mp/animscripts/shared; - -main() -{ - level.dog_debug_orient = 0; - level.dog_debug_anims = 0; - level.dog_debug_anims_ent = 0; - level.dog_debug_turns = 0; - debug_anim_print( "dog_init::main() " ); - maps/mp/animscripts/dog_move::setup_sound_variables(); - anim_get_dvar_int( "debug_dog_sound", "0" ); - anim_get_dvar_int( "debug_dog_notetracks", "0" ); - anim_get_dvar_int( "dog_force_walk", 0 ); - anim_get_dvar_int( "dog_force_run", 0 ); - self.ignoresuppression = 1; - self.chatinitialized = 0; - self.nododgemove = 1; - level.dogrunturnspeed = 20; - level.dogrunpainspeed = 20; - self.meleeattackdist = 0; - self thread setmeleeattackdist(); - self.a = spawnstruct(); - self.a.pose = "stand"; - self.a.nextstandinghitdying = 0; - self.a.movement = "run"; - set_anim_playback_rate(); - self.suppressionthreshold = 1; - self.disablearrivals = 0; - level.dogstoppingdistsq = 3416,82; - self.stopanimdistsq = level.dogstoppingdistsq; - self.pathenemyfightdist = 512; - self settalktospecies( "dog" ); - level.lastdogmeleeplayertime = 0; - level.dogmeleeplayercounter = 0; - if ( !isDefined( level.dog_hits_before_kill ) ) - { - level.dog_hits_before_kill = 1; - } -} - -set_anim_playback_rate() -{ - self.animplaybackrate = 0,9 + randomfloat( 0,2 ); - self.moveplaybackrate = 1; -} - -setmeleeattackdist() -{ - self endon( "death" ); - while ( 1 ) - { - self.meleeattackdist = 0; - if ( self maps/mp/animscripts/dog_combat::use_low_attack() ) - { - self.meleeattackdist = 64; - } - wait 1; - } -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/dog_jump.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/dog_jump.gsc deleted file mode 100644 index acfb82a..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/dog_jump.gsc +++ /dev/null @@ -1,13 +0,0 @@ -#include maps/mp/animscripts/shared; -#include maps/mp/animscripts/utility; - -main() -{ - self endon( "killanimscript" ); - debug_anim_print( "dog_jump::main()" ); - self setaimanimweights( 0, 0 ); - self.safetochangescript = 0; - self setanimstate( "traverse_wallhop" ); - maps/mp/animscripts/shared::donotetracks( "done" ); - self.safetochangescript = 1; -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/dog_move.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/dog_move.gsc deleted file mode 100644 index af8604d..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/dog_move.gsc +++ /dev/null @@ -1,185 +0,0 @@ -#include maps/mp/animscripts/dog_stop; -#include maps/mp/animscripts/shared; -#include maps/mp/animscripts/utility; - -setup_sound_variables() -{ - level.dog_sounds[ "far" ] = spawnstruct(); - level.dog_sounds[ "close" ] = spawnstruct(); - level.dog_sounds[ "close" ].minrange = 0; - level.dog_sounds[ "close" ].maxrange = 500; - level.dog_sounds[ "close" ].sound = "aml_dog_bark_close"; - level.dog_sounds[ "close" ].soundlengthplaceholder = 0,2; - level.dog_sounds[ "close" ].aftersoundwaitmin = 0,1; - level.dog_sounds[ "close" ].aftersoundwaitmax = 0,3; - level.dog_sounds[ "close" ].minrangesqr = level.dog_sounds[ "close" ].minrange * level.dog_sounds[ "close" ].minrange; - level.dog_sounds[ "close" ].maxrangesqr = level.dog_sounds[ "close" ].maxrange * level.dog_sounds[ "close" ].maxrange; - level.dog_sounds[ "far" ].minrange = 500; - level.dog_sounds[ "far" ].maxrange = 0; - level.dog_sounds[ "far" ].sound = "aml_dog_bark"; - level.dog_sounds[ "far" ].soundlengthplaceholder = 0,2; - level.dog_sounds[ "far" ].aftersoundwaitmin = 0,1; - level.dog_sounds[ "far" ].aftersoundwaitmax = 0,3; - level.dog_sounds[ "far" ].minrangesqr = level.dog_sounds[ "far" ].minrange * level.dog_sounds[ "far" ].minrange; - level.dog_sounds[ "far" ].maxrangesqr = level.dog_sounds[ "far" ].maxrange * level.dog_sounds[ "far" ].maxrange; -} - -main() -{ - self endon( "killanimscript" ); - debug_anim_print( "dog_move::main()" ); - self setaimanimweights( 0, 0 ); - do_movement = 1; -/# - if ( !debug_allow_movement() ) - { - do_movement = 0; -#/ - } - if ( isDefined( level.hostmigrationtimer ) ) - { - do_movement = 0; - } - if ( !isDefined( self.traversecomplete ) && !isDefined( self.skipstartmove ) && self.a.movement == "run" && do_movement ) - { - self startmove(); - blendtime = 0; - } - else - { - blendtime = 0,2; - } - self.traversecomplete = undefined; - self.skipstartmove = undefined; - if ( do_movement ) - { - if ( shouldrun() ) - { - debug_anim_print( "dog_move::main() - Setting move_run" ); - self setanimstate( "move_run" ); - maps/mp/animscripts/shared::donotetracksfortime( 0,1, "done" ); - debug_anim_print( "dog_move::main() - move_run wait 0.1 done " ); - } - else - { - debug_anim_print( "dog_move::main() - Setting move_start " ); - self setanimstate( "move_walk" ); - maps/mp/animscripts/shared::donotetracksfortime( 0,1, "done" ); - } - } - self thread maps/mp/animscripts/dog_stop::lookattarget( "normal" ); - while ( 1 ) - { - self moveloop(); - if ( self.a.movement == "run" ) - { - if ( self.disablearrivals == 0 ) - { - self thread stopmove(); - } - self waittill( "run" ); - } - } -} - -moveloop() -{ - self endon( "killanimscript" ); - self endon( "stop_soon" ); - while ( 1 ) - { - do_movement = 1; -/# - if ( !debug_allow_movement() ) - { - do_movement = 0; -#/ - } - if ( isDefined( level.hostmigrationtimer ) ) - { - do_movement = 0; - } - while ( !do_movement ) - { - self setaimanimweights( 0, 0 ); - self setanimstate( "stop_idle" ); - maps/mp/animscripts/shared::donotetracks( "done" ); - } - if ( self.disablearrivals ) - { - self.stopanimdistsq = 0; - } - else - { - self.stopanimdistsq = level.dogstoppingdistsq; - } - if ( shouldrun() ) - { - debug_anim_print( "dog_move::moveLoop() - Setting move_run" ); - self setanimstate( "move_run" ); - maps/mp/animscripts/shared::donotetracksfortime( 0,2, "done" ); - debug_anim_print( "dog_move::moveLoop() - move_run wait 0.2 done " ); - continue; - } - else - { - debug_anim_print( "dog_move::moveLoop() - Setting move_walk " ); - self setanimstate( "move_walk" ); - maps/mp/animscripts/shared::donotetracksfortime( 0,2, "done" ); - debug_anim_print( "dog_move::moveLoop() - move_walk wait 0.2 done " ); - } - } -} - -startmove() -{ - debug_anim_print( "dog_move::startMove() - Setting move_start " ); - self setanimstate( "move_start" ); - maps/mp/animscripts/shared::donotetracks( "done" ); - debug_anim_print( "dog_move::startMove() - move_start notify done." ); - self animmode( "none", 0 ); - self set_orient_mode( "face motion" ); -} - -stopmove() -{ - self endon( "killanimscript" ); - self endon( "run" ); - debug_anim_print( "dog_move::stopMove() - Setting move_stop" ); - self setanimstate( "move_stop" ); - maps/mp/animscripts/shared::donotetracks( "done" ); - debug_anim_print( "dog_move::stopMove() - move_stop notify done." ); -} - -shouldrun() -{ -/# - if ( getDvarInt( #"DFB12081" ) != 0 ) - { - return 1; - } - else - { - if ( getDvarInt( #"D5D7999B" ) != 0 ) - { - return 0; -#/ - } - } - if ( isDefined( self.enemy ) ) - { - return 1; - } - if ( self.lookaheaddist <= 90 ) - { - return 0; - } - angles = vectorToAngle( self.lookaheaddir ); - yaw_desired = absangleclamp180( angles[ 1 ] ); - yaw = absangleclamp180( self.angles[ 1 ] ); - if ( abs( yaw_desired - yaw ) >= 8 ) - { - return 0; - } - return 1; -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/dog_pain.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/dog_pain.gsc deleted file mode 100644 index d218129..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/dog_pain.gsc +++ /dev/null @@ -1,26 +0,0 @@ -#include maps/mp/animscripts/shared; -#include maps/mp/animscripts/utility; - -main() -{ - debug_anim_print( "dog_pain::main() " ); - self endon( "killanimscript" ); - self setaimanimweights( 0, 0 ); - if ( isDefined( self.enemy ) && isDefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self ) - { - self unlink(); - self.enemy.syncedmeleetarget = undefined; - } - speed = length( self getvelocity() ); - pain_anim = getanimdirection( self.damageyaw ); - if ( speed > level.dogrunpainspeed ) - { - pain_anim = "pain_run_" + pain_anim; - } - else - { - pain_anim = "pain_" + pain_anim; - } - self setanimstate( pain_anim ); - self maps/mp/animscripts/shared::donotetracksfortime( 0,2, "done" ); -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/dog_stop.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/dog_stop.gsc deleted file mode 100644 index 0b6e630..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/dog_stop.gsc +++ /dev/null @@ -1,132 +0,0 @@ -#include maps/mp/animscripts/utility; -#include maps/mp/animscripts/shared; - -main() -{ - debug_anim_print( "dog_stop::main()" ); - self endon( "killanimscript" ); - self setaimanimweights( 0, 0 ); - self thread lookattarget( "attackIdle" ); - while ( 1 ) - { - if ( shouldattackidle() ) - { - self randomattackidle(); - maps/mp/animscripts/shared::donotetracks( "done" ); - } - else - { - self set_orient_mode( "face current" ); - debug_anim_print( "dog_stop::main() - Setting stop_idle" ); - self notify( "stop tracking" ); - self setaimanimweights( 0, 0 ); - self setanimstate( "stop_idle" ); - maps/mp/animscripts/shared::donotetracks( "done" ); - self thread lookattarget( "attackIdle" ); - } - debug_anim_print( "dog_stop::main() - stop idle loop notify done." ); - } -} - -isfacingenemy( tolerancecosangle ) -{ -/# - assert( isDefined( self.enemy ) ); -#/ - vectoenemy = self.enemy.origin - self.origin; - disttoenemy = length( vectoenemy ); - if ( disttoenemy < 1 ) - { - return 1; - } - forward = anglesToForward( self.angles ); - val1 = ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] ); - val2 = ( ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] ) ) / disttoenemy; - return ( ( ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] ) ) / disttoenemy ) > tolerancecosangle; -} - -randomattackidle() -{ - if ( isfacingenemy( -0,5 ) ) - { - self set_orient_mode( "face current" ); - } - else - { - self set_orient_mode( "face enemy" ); - } - if ( should_growl() ) - { - debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl" ); - self setanimstate( "stop_attackidle_growl" ); - return; - } - idlechance = 33; - barkchance = 66; - if ( isDefined( self.mode ) ) - { - if ( self.mode == "growl" ) - { - idlechance = 15; - barkchance = 30; - } - else - { - if ( self.mode == "bark" ) - { - idlechance = 15; - barkchance = 85; - } - } - } - rand = randomint( 100 ); - if ( rand < idlechance ) - { - debug_anim_print( "dog_stop::main() - Setting stop_attackidle" ); - self setanimstate( "stop_attackidle" ); - } - else if ( rand < barkchance ) - { - debug_anim_print( "dog_stop::main() - Setting stop_attackidle_bark " ); - self setanimstate( "stop_attackidle_bark" ); - } - else - { - debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl " ); - self setanimstate( "stop_attackidle_growl" ); - } -} - -shouldattackidle() -{ - if ( isDefined( self.enemy ) && isalive( self.enemy ) ) - { - return distancesquared( self.origin, self.enemy.origin ) < 1000000; - } -} - -should_growl() -{ - if ( isDefined( self.script_growl ) ) - { - return 1; - } - if ( !isalive( self.enemy ) ) - { - return 1; - } - return !self cansee( self.enemy ); -} - -lookattarget( lookposeset ) -{ - self endon( "killanimscript" ); - self endon( "stop tracking" ); - debug_anim_print( "dog_stop::lookAtTarget() - Starting look at " + lookposeset ); - self.rightaimlimit = 90; - self.leftaimlimit = -90; - self.upaimlimit = 45; - self.downaimlimit = -45; - self maps/mp/animscripts/shared::setanimaimweight( 1, 0,2 ); - self maps/mp/animscripts/shared::trackloop(); -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/dog_turn.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/dog_turn.gsc deleted file mode 100644 index 4d759cc..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/dog_turn.gsc +++ /dev/null @@ -1,117 +0,0 @@ -#include maps/mp/animscripts/shared; -#include maps/mp/animscripts/utility; - -main() -{ - self endon( "killanimscript" ); - debug_turn_print( "dog_turn::main()" ); - self setaimanimweights( 0, 0 ); - self.safetochangescript = 0; - deltayaw = self getdeltaturnyaw(); - if ( need_to_turn_around( deltayaw ) ) - { - turn_180( deltayaw ); - } - else - { - turn_90( deltayaw ); - } - move_out_of_turn(); - self.skipstartmove = 1; - self.safetochangescript = 1; -} - -need_to_turn_around( deltayaw ) -{ - angle = getDvarFloat( "dog_turn180_angle" ); - if ( deltayaw >= angle || deltayaw <= ( -1 * angle ) ) - { - debug_turn_print( "dog_turn::need_to_turn_around(): " + deltayaw + " YES" ); - return 1; - } - debug_turn_print( "dog_turn::need_to_turn_around(): " + deltayaw + " NO" ); - return 0; -} - -do_turn_anim( stopped_anim, run_anim, wait_time, run_wait_time ) -{ - speed = length( self getvelocity() ); - do_anim = stopped_anim; - if ( level.dogrunturnspeed < speed ) - { - do_anim = run_anim; - wait_time = run_wait_time; - } - debug_turn_print( "dog_turn::do_turn_anim() - Setting " + do_anim ); - self setanimstate( do_anim ); - maps/mp/animscripts/shared::donotetracksfortime( run_wait_time, "done" ); - debug_turn_print( "dog_turn::do_turn_anim() - done with " + do_anim + " wait time " + run_wait_time ); -} - -turn_left() -{ - self do_turn_anim( "move_turn_left", "move_run_turn_left", 0,5, 0,5 ); -} - -turn_right() -{ - self do_turn_anim( "move_turn_right", "move_run_turn_right", 0,5, 0,5 ); -} - -turn_180_left() -{ - self do_turn_anim( "move_turn_around_left", "move_run_turn_around_left", 0,5, 0,7 ); -} - -turn_180_right() -{ - self do_turn_anim( "move_turn_around_right", "move_run_turn_around_right", 0,5, 0,7 ); -} - -move_out_of_turn() -{ - if ( self.a.movement == "run" ) - { - debug_turn_print( "dog_turn::move_out_of_turn() - Setting move_run" ); - self setanimstate( "move_run" ); - maps/mp/animscripts/shared::donotetracksfortime( 0,1, "done" ); - debug_turn_print( "dog_turn::move_out_of_turn() - move_run wait 0.1 done " ); - } - else - { - debug_turn_print( "dog_turn::move_out_of_turn() - Setting move_start " ); - self setanimstate( "move_walk" ); - } -} - -turn_90( deltayaw ) -{ - self animmode( "zonly_physics", 0 ); - debug_turn_print( "dog_turn::turn_90() deltaYaw: " + deltayaw ); - if ( deltayaw > 0 ) - { - debug_turn_print( "dog_turn::turn_90() left", 1 ); - self turn_left(); - } - else - { - debug_turn_print( "dog_turn::turn_90() right", 1 ); - self turn_right(); - } -} - -turn_180( deltayaw ) -{ - self animmode( "zonly_physics", 0 ); - debug_turn_print( "dog_turn::turn_180() deltaYaw: " + deltayaw ); - if ( deltayaw > 0 ) - { - debug_turn_print( "dog_turn::turn_180() left", 1 ); - self turn_180_left(); - } - else - { - debug_turn_print( "dog_turn::turn_180() right", 1 ); - self turn_180_right(); - } -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/shared.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/shared.gsc deleted file mode 100644 index ee523c7..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/shared.gsc +++ /dev/null @@ -1,306 +0,0 @@ -#include maps/mp/_utility; -#include maps/mp/animscripts/utility; -#include common_scripts/utility; - -handledogsoundnotetracks( note ) -{ - if ( note == "sound_dogstep_run_default" ) - { - return 1; - } - prefix = getsubstr( note, 0, 5 ); - if ( prefix != "sound" ) - { - return 0; - } - return 1; -} - -growling() -{ - return isDefined( self.script_growl ); -} - -handlenotetrack( note, flagname, customfunction, var1 ) -{ -/# - if ( getDvarInt( #"6EBEB982" ) ) - { - println( "dog notetrack: " + flagname + " " + note + " " + getTime() ); -#/ - } - if ( isai( self ) && self.type == "dog" ) - { - if ( handledogsoundnotetracks( note ) ) - { - return; - } - } - switch( note ) - { - case "end": - case "finish": - case "undefined": - return note; - default: - if ( isDefined( customfunction ) ) - { - if ( !isDefined( var1 ) ) - { - return [[ customfunction ]]( note ); - } - else - { - return [[ customfunction ]]( note, var1 ); - } - } - } - } -} - -donotetracks( flagname, customfunction, var1 ) -{ - for ( ;; ) - { - self waittill( flagname, note ); - if ( !isDefined( note ) ) - { - note = "undefined"; - } - val = self handlenotetrack( note, flagname, customfunction, var1 ); - if ( isDefined( val ) ) - { - return val; - } - } -} - -donotetracksforeverproc( notetracksfunc, flagname, killstring, customfunction, var1 ) -{ - if ( isDefined( killstring ) ) - { - self endon( killstring ); - } - self endon( "killanimscript" ); - for ( ;; ) - { - time = getTime(); - returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 ); - timetaken = getTime() - time; - if ( timetaken < 0,05 ) - { - time = getTime(); - returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 ); - timetaken = getTime() - time; - if ( timetaken < 0,05 ) - { -/# - println( getTime() + " mapsmpanimscriptsshared::DoNoteTracksForever is trying to cause an infinite loop on anim " + flagname + ", returned " + returnednote + "." ); -#/ - wait ( 0,05 - timetaken ); - } - } - } -} - -donotetracksforever( flagname, killstring, customfunction, var1 ) -{ - donotetracksforeverproc( ::donotetracks, flagname, killstring, customfunction, var1 ); -} - -donotetracksfortimeproc( donotetracksforeverfunc, time, flagname, customfunction, ent, var1 ) -{ - ent endon( "stop_notetracks" ); - [[ donotetracksforeverfunc ]]( flagname, undefined, customfunction, var1 ); -} - -donotetracksfortime( time, flagname, customfunction, var1 ) -{ - ent = spawnstruct(); - ent thread donotetracksfortimeendnotify( time ); - donotetracksfortimeproc( ::donotetracksforever, time, flagname, customfunction, ent, var1 ); -} - -donotetracksfortimeendnotify( time ) -{ - wait time; - self notify( "stop_notetracks" ); -} - -trackloop() -{ - players = get_players(); - deltachangeperframe = 5; - aimblendtime = 0,05; - prevyawdelta = 0; - prevpitchdelta = 0; - maxyawdeltachange = 5; - maxpitchdeltachange = 5; - pitchadd = 0; - yawadd = 0; - if ( self.type != "dog" || self.type == "zombie" && self.type == "zombie_dog" ) - { - domaxanglecheck = 0; - self.shootent = self.enemy; - } - else - { - domaxanglecheck = 1; - if ( self.a.script == "cover_crouch" && isDefined( self.a.covermode ) && self.a.covermode == "lean" ) - { - pitchadd = -1 * anim.covercrouchleanpitch; - } - if ( self.a.script != "cover_left" && self.a.script == "cover_right" && isDefined( self.a.cornermode ) && self.a.cornermode == "lean" ) - { - yawadd = self.covernode.angles[ 1 ] - self.angles[ 1 ]; - } - } - yawdelta = 0; - pitchdelta = 0; - firstframe = 1; - for ( ;; ) - { - incranimaimweight(); - selfshootatpos = ( self.origin[ 0 ], self.origin[ 1 ], self geteye()[ 2 ] ); - shootpos = undefined; - if ( isDefined( self.enemy ) ) - { - shootpos = self.enemy getshootatpos(); - } - if ( !isDefined( shootpos ) ) - { - yawdelta = 0; - pitchdelta = 0; - } - else - { - vectortoshootpos = shootpos - selfshootatpos; - anglestoshootpos = vectorToAngle( vectortoshootpos ); - pitchdelta = 360 - anglestoshootpos[ 0 ]; - pitchdelta = angleClamp180( pitchdelta + pitchadd ); - yawdelta = self.angles[ 1 ] - anglestoshootpos[ 1 ]; - yawdelta = angleClamp180( yawdelta + yawadd ); - } - if ( domaxanglecheck || abs( yawdelta ) > 60 && abs( pitchdelta ) > 60 ) - { - yawdelta = 0; - pitchdelta = 0; - } - else - { - if ( yawdelta > self.rightaimlimit ) - { - yawdelta = self.rightaimlimit; - } - else - { - if ( yawdelta < self.leftaimlimit ) - { - yawdelta = self.leftaimlimit; - } - } - if ( pitchdelta > self.upaimlimit ) - { - pitchdelta = self.upaimlimit; - break; - } - else - { - if ( pitchdelta < self.downaimlimit ) - { - pitchdelta = self.downaimlimit; - } - } - } - if ( firstframe ) - { - firstframe = 0; - } - else - { - yawdeltachange = yawdelta - prevyawdelta; - if ( abs( yawdeltachange ) > maxyawdeltachange ) - { - yawdelta = prevyawdelta + ( maxyawdeltachange * sign( yawdeltachange ) ); - } - pitchdeltachange = pitchdelta - prevpitchdelta; - if ( abs( pitchdeltachange ) > maxpitchdeltachange ) - { - pitchdelta = prevpitchdelta + ( maxpitchdeltachange * sign( pitchdeltachange ) ); - } - } - prevyawdelta = yawdelta; - prevpitchdelta = pitchdelta; - updown = 0; - leftright = 0; - if ( yawdelta > 0 ) - { -/# - assert( yawdelta <= self.rightaimlimit ); -#/ - weight = ( yawdelta / self.rightaimlimit ) * self.a.aimweight; - leftright = weight; - } - else - { - if ( yawdelta < 0 ) - { -/# - assert( yawdelta >= self.leftaimlimit ); -#/ - weight = ( yawdelta / self.leftaimlimit ) * self.a.aimweight; - leftright = -1 * weight; - } - } - if ( pitchdelta > 0 ) - { -/# - assert( pitchdelta <= self.upaimlimit ); -#/ - weight = ( pitchdelta / self.upaimlimit ) * self.a.aimweight; - updown = weight; - } - else - { - if ( pitchdelta < 0 ) - { -/# - assert( pitchdelta >= self.downaimlimit ); -#/ - weight = ( pitchdelta / self.downaimlimit ) * self.a.aimweight; - updown = -1 * weight; - } - } - self setaimanimweights( updown, leftright ); - wait 0,05; - } -} - -setanimaimweight( goalweight, goaltime ) -{ - if ( !isDefined( goaltime ) || goaltime <= 0 ) - { - self.a.aimweight = goalweight; - self.a.aimweight_start = goalweight; - self.a.aimweight_end = goalweight; - self.a.aimweight_transframes = 0; - } - else - { - self.a.aimweight = goalweight; - self.a.aimweight_start = self.a.aimweight; - self.a.aimweight_end = goalweight; - self.a.aimweight_transframes = int( goaltime * 20 ); - } - self.a.aimweight_t = 0; -} - -incranimaimweight() -{ - if ( self.a.aimweight_t < self.a.aimweight_transframes ) - { - self.a.aimweight_t++; - t = ( 1 * self.a.aimweight_t ) / self.a.aimweight_transframes; - self.a.aimweight = ( self.a.aimweight_start * ( 1 - t ) ) + ( self.a.aimweight_end * t ); - } -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/traverse/shared.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/traverse/shared.gsc deleted file mode 100644 index cbd7fe5..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/traverse/shared.gsc +++ /dev/null @@ -1,227 +0,0 @@ -#include maps/mp/animscripts/shared; -#include common_scripts/utility; -#include maps/mp/_utility; -#include maps/mp/animscripts/utility; - -init_traverse() -{ - point = getent( self.target, "targetname" ); - if ( isDefined( point ) ) - { - self.traverse_height = point.origin[ 2 ]; - point delete(); - } - else - { - point = getstruct( self.target, "targetname" ); - if ( isDefined( point ) ) - { - self.traverse_height = point.origin[ 2 ]; - } - } -} - -teleportthread( verticaloffset ) -{ - self endon( "killanimscript" ); - self notify( "endTeleportThread" ); - self endon( "endTeleportThread" ); - reps = 5; - offset = ( 0, 0, verticaloffset / reps ); - i = 0; - while ( i < reps ) - { - self teleport( self.origin + offset ); - wait 0,05; - i++; - } -} - -teleportthreadex( verticaloffset, delay, frames ) -{ - self endon( "killanimscript" ); - self notify( "endTeleportThread" ); - self endon( "endTeleportThread" ); - if ( verticaloffset == 0 ) - { - return; - } - wait delay; - amount = verticaloffset / frames; - if ( amount > 10 ) - { - amount = 10; - } - else - { - if ( amount < -10 ) - { - amount = -10; - } - } - offset = ( 0, 0, amount ); - i = 0; - while ( i < frames ) - { - self teleport( self.origin + offset ); - wait 0,05; - i++; - } -} - -dog_wall_and_window_hop( traversename, height ) -{ - self endon( "killanimscript" ); - self traversemode( "nogravity" ); - self traversemode( "noclip" ); - startnode = self getnegotiationstartnode(); -/# - assert( isDefined( startnode ) ); -#/ - self orientmode( "face angle", startnode.angles[ 1 ] ); - if ( isDefined( startnode.traverse_height ) ) - { - realheight = startnode.traverse_height - startnode.origin[ 2 ]; - self thread teleportthread( realheight - height ); - } - else - { - if ( height != 36 ) - { - self thread teleportthreadex( height - 36, 0,2, 7 ); - } - } - debug_anim_print( "traverse::dog_wall_and_window_hop() - Setting " + traversename ); - self setanimstate( traversename ); - maps/mp/animscripts/shared::donotetracksfortime( 1, "done" ); - debug_anim_print( "traverse::dog_wall_and_window_hop() - " + traversename ); - self.traversecomplete = 1; -} - -dog_jump_down( height, frames, time ) -{ - self endon( "killanimscript" ); - self traversemode( "noclip" ); - if ( !isDefined( time ) ) - { - time = 0,3; - } - startnode = self getnegotiationstartnode(); -/# - assert( isDefined( startnode ) ); -#/ - self orientmode( "face angle", startnode.angles[ 1 ] ); - if ( isDefined( startnode.traverse_height ) ) - { - realheight = startnode.traverse_height - startnode.origin[ 2 ]; - self thread teleportthread( realheight - height ); - } - else - { - if ( height != 40 ) - { - self thread teleportthreadex( height - 40, 0,1, frames ); - } - } - debug_anim_print( "traverse::dog_jump_down() - Setting traverse_jump_down_40" ); - self setanimstate( "traverse_jump_down_40" ); - maps/mp/animscripts/shared::donotetracksfortime( time, "done" ); - debug_anim_print( "traverse::dog_jump_down() - traverse_jump_down_40 " ); - self traversemode( "gravity" ); - self.traversecomplete = 1; -} - -dog_jump_down_far( height, frames, time ) -{ - self endon( "killanimscript" ); - self traversemode( "noclip" ); - if ( !isDefined( time ) ) - { - time = 0,3; - } - startnode = self getnegotiationstartnode(); -/# - assert( isDefined( startnode ) ); -#/ - self orientmode( "face angle", startnode.angles[ 1 ] ); - if ( isDefined( startnode.traverse_height ) ) - { - realheight = startnode.traverse_height - startnode.origin[ 2 ]; - self thread teleportthread( realheight - height ); - } - else - { - if ( height != 80 ) - { - self thread teleportthreadex( 80 - height, 0,1, frames ); - } - } - debug_anim_print( "traverse::dog_jump_down() - Setting traverse_jump_down_80" ); - self setanimstate( "traverse_jump_down_80" ); - maps/mp/animscripts/shared::donotetracksfortime( time, "done" ); - debug_anim_print( "traverse::dog_jump_down() - traverse_jump_down_80 " ); - self traversemode( "gravity" ); - self.traversecomplete = 1; -} - -dog_jump_up( height, frames ) -{ - self endon( "killanimscript" ); - self traversemode( "noclip" ); - startnode = self getnegotiationstartnode(); -/# - assert( isDefined( startnode ) ); -#/ - self orientmode( "face angle", startnode.angles[ 1 ] ); - if ( isDefined( startnode.traverse_height ) ) - { - realheight = startnode.traverse_height - startnode.origin[ 2 ]; - self thread teleportthread( realheight - height ); - } - else - { - if ( height != 40 ) - { - self thread teleportthreadex( height - 40, 0,2, frames ); - } - } - debug_anim_print( "traverse::dog_jump_up() - Setting traverse_jump_up_40" ); - self setanimstate( "traverse_jump_up_40" ); - maps/mp/animscripts/shared::donotetracksfortime( 0,5, "done" ); - debug_anim_print( "traverse::dog_jump_up() - traverse_jump_up_40 " ); - self traversemode( "gravity" ); - self.traversecomplete = 1; -} - -dog_jump_up_high( height, frames ) -{ -/# - assert( self.type == "dog", "Only dogs can do this traverse currently." ); -#/ - self endon( "killanimscript" ); - self traversemode( "nogravity" ); - self traversemode( "noclip" ); - startnode = self getnegotiationstartnode(); -/# - assert( isDefined( startnode ) ); -#/ - self orientmode( "face angle", startnode.angles[ 1 ] ); - if ( isDefined( startnode.traverse_height ) ) - { - realheight = startnode.traverse_height - startnode.origin[ 2 ]; - self thread teleportthreadex( height - 80, 0,2, frames ); - } - else - { - if ( height != 80 ) - { - self thread teleportthreadex( height - 80, 0,2, frames ); - } - } - debug_anim_print( "traverse::dog_jump_up_80() - Setting traverse_jump_up_80" ); - self setanimstate( "traverse_jump_up_80" ); - maps/mp/animscripts/shared::donotetracksfortime( 0,6, "done" ); - debug_anim_print( "traverse::dog_jump_up_80() - traverse_jump_up_80 " ); - self traversemode( "gravity" ); - self.traversecomplete = 1; -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/traverse/zm_mantle_over_40.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/traverse/zm_mantle_over_40.gsc deleted file mode 100644 index 2e00566..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/traverse/zm_mantle_over_40.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - traversestate = "zm_traverse_barrier"; - traversealias = "barrier_walk"; - if ( self.has_legs ) - { - switch( self.zombie_move_speed ) - { - case "low_gravity_walk": - case "walk": - case "walk_slide": - traversealias = "barrier_walk"; - break; - case "low_gravity_run": - case "run": - case "run_slide": - traversealias = "barrier_run"; - break; - case "low_gravity_sprint": - case "sprint": - case "sprint_slide": - case "super_sprint": - traversealias = "barrier_sprint"; - break; - default: - if ( isDefined( level.zm_mantle_over_40_move_speed_override ) ) - { - traversealias = self [[ level.zm_mantle_over_40_move_speed_override ]](); - } - else /# - assertmsg( "Zombie '" + self.classname + "' move speed of '" + self.zombie_move_speed + "' is not supported for mantle_over_40." ); -#/ - } - } - else - { - traversestate = "zm_traverse_barrier_crawl"; - traversealias = "barrier_crawl"; - } - self dotraverse( traversestate, traversealias ); -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/traverse/zm_shared.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/traverse/zm_shared.gsc deleted file mode 100644 index b1f767c..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/traverse/zm_shared.gsc +++ /dev/null @@ -1,151 +0,0 @@ -#include maps/mp/animscripts/zm_run; -#include maps/mp/animscripts/zm_shared; -#include common_scripts/utility; -#include maps/mp/_utility; -#include maps/mp/animscripts/utility; - -init_traverse() -{ - point = getent( self.target, "targetname" ); - if ( isDefined( point ) ) - { - self.traverse_height = point.origin[ 2 ]; - point delete(); - } - else - { - point = getstruct( self.target, "targetname" ); - if ( isDefined( point ) ) - { - self.traverse_height = point.origin[ 2 ]; - } - } -} - -teleportthread( verticaloffset ) -{ - self endon( "killanimscript" ); - self notify( "endTeleportThread" ); - self endon( "endTeleportThread" ); - reps = 5; - offset = ( 0, 0, verticaloffset / reps ); - i = 0; - while ( i < reps ) - { - self teleport( self.origin + offset ); - wait 0,05; - i++; - } -} - -teleportthreadex( verticaloffset, delay, frames ) -{ - self endon( "killanimscript" ); - self notify( "endTeleportThread" ); - self endon( "endTeleportThread" ); - if ( verticaloffset == 0 ) - { - return; - } - wait delay; - amount = verticaloffset / frames; - if ( amount > 10 ) - { - amount = 10; - } - else - { - if ( amount < -10 ) - { - amount = -10; - } - } - offset = ( 0, 0, amount ); - i = 0; - while ( i < frames ) - { - self teleport( self.origin + offset ); - wait 0,05; - i++; - } -} - -handletraversealignment() -{ - self traversemode( "nogravity" ); - self traversemode( "noclip" ); - if ( isDefined( self.traverseheight ) && isDefined( self.traversestartnode.traverse_height ) ) - { - currentheight = self.traversestartnode.traverse_height - self.traversestartz; - self thread teleportthread( currentheight - self.traverseheight ); - } -} - -dosimpletraverse( traversealias, no_powerups, traversestate ) -{ - if ( !isDefined( traversestate ) ) - { - traversestate = "zm_traverse"; - } - if ( isDefined( level.ignore_traverse ) ) - { - if ( self [[ level.ignore_traverse ]]() ) - { - return; - } - } - if ( isDefined( level.zm_traversal_override ) ) - { - traversealias = self [[ level.zm_traversal_override ]]( traversealias ); - } - if ( !self.has_legs ) - { - traversestate += "_crawl"; - traversealias += "_crawl"; - } - self dotraverse( traversestate, traversealias, no_powerups ); -} - -dotraverse( traversestate, traversealias, no_powerups ) -{ - self endon( "killanimscript" ); - self traversemode( "nogravity" ); - self traversemode( "noclip" ); - old_powerups = 0; - if ( isDefined( no_powerups ) && no_powerups ) - { - old_powerups = self.no_powerups; - self.no_powerups = 1; - } - self.is_traversing = 1; - self notify( "zombie_start_traverse" ); - self.traversestartnode = self getnegotiationstartnode(); -/# - assert( isDefined( self.traversestartnode ) ); -#/ - self orientmode( "face angle", self.traversestartnode.angles[ 1 ] ); - self.traversestartz = self.origin[ 2 ]; - if ( isDefined( self.pre_traverse ) ) - { - self [[ self.pre_traverse ]](); - } - self setanimstatefromasd( traversestate, traversealias ); - self maps/mp/animscripts/zm_shared::donotetracks( "traverse_anim" ); - self traversemode( "gravity" ); - self.a.nodeath = 0; - if ( isDefined( self.post_traverse ) ) - { - self [[ self.post_traverse ]](); - } - self maps/mp/animscripts/zm_run::needsupdate(); - if ( !self.isdog ) - { - self maps/mp/animscripts/zm_run::moverun(); - } - self.is_traversing = 0; - self notify( "zombie_end_traverse" ); - if ( isDefined( no_powerups ) && no_powerups ) - { - self.no_powerups = old_powerups; - } -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/utility.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/utility.gsc deleted file mode 100644 index 6b325aa..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/utility.gsc +++ /dev/null @@ -1,166 +0,0 @@ - -anim_get_dvar_int( dvar, def ) -{ - return int( anim_get_dvar( dvar, def ) ); -} - -anim_get_dvar( dvar, def ) -{ - if ( getDvar( dvar ) != "" ) - { - return getDvarFloat( dvar ); - } - else - { - setdvar( dvar, def ); - return def; - } -} - -set_orient_mode( mode, val1 ) -{ -/# - if ( level.dog_debug_orient == self getentnum() ) - { - if ( isDefined( val1 ) ) - { - println( "DOG: Setting orient mode: " + mode + " " + val1 + " " + getTime() ); - } - else - { - println( "DOG: Setting orient mode: " + mode + " " + getTime() ); -#/ - } - } - if ( isDefined( val1 ) ) - { - self orientmode( mode, val1 ); - } - else - { - self orientmode( mode ); - } -} - -debug_anim_print( text ) -{ -/# - if ( level.dog_debug_anims ) - { - println( ( text + " " ) + getTime() ); - } - if ( level.dog_debug_anims_ent == self getentnum() ) - { - println( ( text + " " ) + getTime() ); -#/ - } -} - -debug_turn_print( text, line ) -{ -/# - if ( level.dog_debug_turns == self getentnum() ) - { - duration = 200; - currentyawcolor = ( 1, 0, 1 ); - lookaheadyawcolor = ( 1, 0, 1 ); - desiredyawcolor = ( 1, 0, 1 ); - currentyaw = angleClamp180( self.angles[ 1 ] ); - desiredyaw = angleClamp180( self.desiredangle ); - lookaheaddir = self.lookaheaddir; - lookaheadangles = vectorToAngle( lookaheaddir ); - lookaheadyaw = angleClamp180( lookaheadangles[ 1 ] ); - println( ( text + " " ) + getTime() + " cur: " + currentyaw + " look: " + lookaheadyaw + " desired: " + desiredyaw ); -#/ - } -} - -debug_allow_movement() -{ -/# - return anim_get_dvar_int( "debug_dog_allow_movement", "1" ); -#/ - return 1; -} - -debug_allow_combat() -{ -/# - return anim_get_dvar_int( "debug_dog_allow_combat", "1" ); -#/ - return 1; -} - -current_yaw_line_debug( duration ) -{ -/# - currentyawcolor = []; - currentyawcolor[ 0 ] = ( 1, 0, 1 ); - currentyawcolor[ 1 ] = ( 1, 0, 1 ); - current_color_index = 0; - start_time = getTime(); - if ( !isDefined( level.lastdebugheight ) ) - { - level.lastdebugheight = 15; - } - while ( ( getTime() - start_time ) < 1000 ) - { - pos1 = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + level.lastdebugheight ); - pos2 = pos1 + vectorScale( anglesToForward( self.angles ), ( current_color_index + 1 ) * 10 ); - line( pos1, pos2, currentyawcolor[ current_color_index ], 0,3, 1, duration ); - current_color_index = ( current_color_index + 1 ) % currentyawcolor.size; - wait 0,05; - } - if ( level.lastdebugheight == 15 ) - { - level.lastdebugheight = 30; - } - else - { - level.lastdebugheight = 15; -#/ - } -} - -getanimdirection( damageyaw ) -{ - if ( damageyaw > 135 || damageyaw <= -135 ) - { - return "front"; - } - else - { - if ( damageyaw > 45 && damageyaw <= 135 ) - { - return "right"; - } - else - { - if ( damageyaw > -45 && damageyaw <= 45 ) - { - return "back"; - } - else - { - return "left"; - } - } - } - return "front"; -} - -setfootstepeffect( name, fx ) -{ -/# - assert( isDefined( name ), "Need to define the footstep surface type." ); -#/ -/# - assert( isDefined( fx ), "Need to define the mud footstep effect." ); -#/ - if ( !isDefined( anim.optionalstepeffects ) ) - { - anim.optionalstepeffects = []; - } - anim.optionalstepeffects[ anim.optionalstepeffects.size ] = name; - level._effect[ "step_" + name ] = fx; -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_combat.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_combat.gsc deleted file mode 100644 index 3b06ef3..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_combat.gsc +++ /dev/null @@ -1,71 +0,0 @@ -#include maps/mp/animscripts/zm_melee; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/animscripts/utility; -#include maps/mp/animscripts/shared; -#include common_scripts/utility; - -main() -{ - self endon( "killanimscript" ); - self endon( "melee" ); - maps/mp/animscripts/zm_utility::initialize( "zombie_combat" ); - self animmode( "zonly_physics", 0 ); - if ( isDefined( self.combat_animmode ) ) - { - self [[ self.combat_animmode ]](); - } - self orientmode( "face angle", self.angles[ 1 ] ); - for ( ;; ) - { - if ( trymelee() ) - { - return; - } - exposedwait(); - } -} - -exposedwait() -{ - if ( !isDefined( self.can_always_see ) || !isDefined( self.enemy ) && !self cansee( self.enemy ) ) - { - self endon( "enemy" ); - wait ( 0,2 + randomfloat( 0,1 ) ); - } - else - { - if ( !isDefined( self.enemy ) ) - { - self endon( "enemy" ); - wait ( 0,2 + randomfloat( 0,1 ) ); - return; - } - else - { - wait 0,05; - } - } -} - -trymelee() -{ - if ( isDefined( self.cant_melee ) && self.cant_melee ) - { - return 0; - } - if ( !isDefined( self.enemy ) ) - { - return 0; - } - if ( distancesquared( self.origin, self.enemy.origin ) > 262144 ) - { - return 0; - } - canmelee = maps/mp/animscripts/zm_melee::canmeleedesperate(); - if ( !canmelee ) - { - return 0; - } - self thread maps/mp/animscripts/zm_melee::meleecombat(); - return 1; -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_death.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_death.gsc deleted file mode 100644 index 2c5fcc0..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_death.gsc +++ /dev/null @@ -1,439 +0,0 @@ -#include maps/mp/animscripts/zm_shared; -#include maps/mp/_utility; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/animscripts/utility; -#include maps/mp/animscripts/shared; -#include common_scripts/utility; - -main() -{ - debug_anim_print( "zm_death::main()" ); - self setaimanimweights( 0, 0 ); - self endon( "killanimscript" ); - if ( isDefined( self.deathfunction ) ) - { - successful_death = self [[ self.deathfunction ]](); - if ( !isDefined( successful_death ) || successful_death ) - { - return; - } - } - if ( isDefined( self.a.nodeath ) && self.a.nodeath == 1 ) - { -/# - assert( self.a.nodeath, "Nodeath needs to be set to true or undefined." ); -#/ - wait 3; - return; - } - self unlink(); - if ( isDefined( self.anchor ) ) - { - self.anchor delete(); - } - if ( isDefined( self.enemy ) && isDefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self ) - { - self.enemy.syncedmeleetarget = undefined; - } - self thread do_gib(); - if ( isDefined( self.a.gib_ref ) && self.a.gib_ref != "no_legs" || self.a.gib_ref == "right_leg" && self.a.gib_ref == "left_leg" ) - { - self.has_legs = 0; - } - if ( !isDefined( self.deathanim ) ) - { - self.deathanim = "zm_death"; - self.deathanim_substate = undefined; - } - self.deathanim = append_missing_legs_suffix( self.deathanim ); - self animmode( "gravity" ); - self setanimstatefromasd( self.deathanim, self.deathanim_substate ); - if ( !self getanimhasnotetrackfromasd( "start_ragdoll" ) ) - { - self thread waitforragdoll( self getanimlengthfromasd() * 0,35 ); - } - if ( isDefined( self.skip_death_notetracks ) && self.skip_death_notetracks ) - { - self waittillmatch( "death_anim" ); - return "end"; - } - else - { - self maps/mp/animscripts/zm_shared::donotetracks( "death_anim", self.handle_death_notetracks ); - } -} - -waitforragdoll( time ) -{ - wait time; - do_ragdoll = 1; - if ( isDefined( self.nodeathragdoll ) && self.nodeathragdoll ) - { - do_ragdoll = 0; - } - if ( isDefined( self ) && do_ragdoll ) - { - self startragdoll(); - } -} - -on_fire_timeout() -{ - self endon( "death" ); - wait 12; - if ( isDefined( self ) && isalive( self ) ) - { - self.is_on_fire = 0; - self notify( "stop_flame_damage" ); - } -} - -flame_death_fx() -{ - self endon( "death" ); - if ( isDefined( self.is_on_fire ) && self.is_on_fire ) - { - return; - } - self.is_on_fire = 1; - self thread on_fire_timeout(); - if ( isDefined( level._effect ) && isDefined( level._effect[ "character_fire_death_torso" ] ) ) - { - if ( !self.isdog ) - { - playfxontag( level._effect[ "character_fire_death_torso" ], self, "J_SpineLower" ); - } - } - else - { -/# - println( "^3ANIMSCRIPT WARNING: You are missing level._effect["character_fire_death_torso"], please set it in your levelname_fx.gsc. Use "env/fire/fx_fire_player_torso"" ); -#/ - } - if ( isDefined( level._effect ) && isDefined( level._effect[ "character_fire_death_sm" ] ) ) - { - wait 1; - tagarray = []; - tagarray[ 0 ] = "J_Elbow_LE"; - tagarray[ 1 ] = "J_Elbow_RI"; - tagarray[ 2 ] = "J_Knee_RI"; - tagarray[ 3 ] = "J_Knee_LE"; - tagarray = randomize_array( tagarray ); - playfxontag( level._effect[ "character_fire_death_sm" ], self, tagarray[ 0 ] ); - wait 1; - tagarray[ 0 ] = "J_Wrist_RI"; - tagarray[ 1 ] = "J_Wrist_LE"; - if ( isDefined( self.a ) || !isDefined( self.a.gib_ref ) && self.a.gib_ref != "no_legs" ) - { - tagarray[ 2 ] = "J_Ankle_RI"; - tagarray[ 3 ] = "J_Ankle_LE"; - } - tagarray = randomize_array( tagarray ); - playfxontag( level._effect[ "character_fire_death_sm" ], self, tagarray[ 0 ] ); - playfxontag( level._effect[ "character_fire_death_sm" ], self, tagarray[ 1 ] ); - } - else - { -/# - println( "^3ANIMSCRIPT WARNING: You are missing level._effect["character_fire_death_sm"], please set it in your levelname_fx.gsc. Use "env/fire/fx_fire_zombie_md"" ); -#/ - } -} - -randomize_array( array ) -{ - i = 0; - while ( i < array.size ) - { - j = randomint( array.size ); - temp = array[ i ]; - array[ i ] = array[ j ]; - array[ j ] = temp; - i++; - } - return array; -} - -get_tag_for_damage_location() -{ - tag = "J_SpineLower"; - if ( self.damagelocation == "helmet" ) - { - tag = "j_head"; - } - else if ( self.damagelocation == "head" ) - { - tag = "j_head"; - } - else if ( self.damagelocation == "neck" ) - { - tag = "j_neck"; - } - else if ( self.damagelocation == "torso_upper" ) - { - tag = "j_spineupper"; - } - else if ( self.damagelocation == "torso_lower" ) - { - tag = "j_spinelower"; - } - else if ( self.damagelocation == "right_arm_upper" ) - { - tag = "j_elbow_ri"; - } - else if ( self.damagelocation == "left_arm_upper" ) - { - tag = "j_elbow_le"; - } - else if ( self.damagelocation == "right_arm_lower" ) - { - tag = "j_wrist_ri"; - } - else - { - if ( self.damagelocation == "left_arm_lower" ) - { - tag = "j_wrist_le"; - } - } - return tag; -} - -set_last_gib_time() -{ - anim notify( "stop_last_gib_time" ); - anim endon( "stop_last_gib_time" ); - wait 0,05; - anim.lastgibtime = getTime(); - anim.totalgibs = randomintrange( anim.mingibs, anim.maxgibs ); -} - -get_gib_ref( direction ) -{ - if ( isDefined( self.a.gib_ref ) ) - { - return; - } - if ( self.damagetaken < 165 ) - { - return; - } - if ( getTime() > ( anim.lastgibtime + anim.gibdelay ) && anim.totalgibs > 0 ) - { - anim.totalgibs--; - - anim thread set_last_gib_time(); - refs = []; - switch( direction ) - { - case "right": - refs[ refs.size ] = "left_arm"; - refs[ refs.size ] = "left_leg"; - gib_ref = get_random( refs ); - break; - case "left": - refs[ refs.size ] = "right_arm"; - refs[ refs.size ] = "right_leg"; - gib_ref = get_random( refs ); - break; - case "forward": - refs[ refs.size ] = "right_arm"; - refs[ refs.size ] = "left_arm"; - refs[ refs.size ] = "right_leg"; - refs[ refs.size ] = "left_leg"; - refs[ refs.size ] = "guts"; - refs[ refs.size ] = "no_legs"; - gib_ref = get_random( refs ); - break; - case "back": - refs[ refs.size ] = "right_arm"; - refs[ refs.size ] = "left_arm"; - refs[ refs.size ] = "right_leg"; - refs[ refs.size ] = "left_leg"; - refs[ refs.size ] = "no_legs"; - gib_ref = get_random( refs ); - break; - default: - refs[ refs.size ] = "right_arm"; - refs[ refs.size ] = "left_arm"; - refs[ refs.size ] = "right_leg"; - refs[ refs.size ] = "left_leg"; - refs[ refs.size ] = "no_legs"; - refs[ refs.size ] = "guts"; - gib_ref = get_random( refs ); - break; - } - self.a.gib_ref = gib_ref; - } - else - { - self.a.gib_ref = undefined; - } -} - -get_random( array ) -{ - return array[ randomint( array.size ) ]; -} - -do_gib() -{ - if ( !is_mature() ) - { - return; - } - if ( !isDefined( self.a.gib_ref ) ) - { - return; - } - if ( isDefined( self.is_on_fire ) && self.is_on_fire ) - { - return; - } - if ( self is_zombie_gibbed() ) - { - return; - } - self set_zombie_gibbed(); - gib_ref = self.a.gib_ref; - limb_data = get_limb_data( gib_ref ); - if ( !isDefined( limb_data ) ) - { -/# - println( "^3animscriptszm_death.gsc - limb_data is not setup for gib_ref on model: " + self.model + " and gib_ref of: " + self.a.gib_ref ); -#/ - return; - } - if ( isDefined( self.dont_throw_gib ) && !self.dont_throw_gib ) - { - self thread throw_gib( limb_data[ "spawn_tags_array" ] ); - } - if ( gib_ref == "head" ) - { - self.hat_gibbed = 1; - self.head_gibbed = 1; - size = self getattachsize(); - i = 0; - while ( i < size ) - { - model = self getattachmodelname( i ); - if ( issubstr( model, "head" ) ) - { - if ( isDefined( self.hatmodel ) ) - { - self detach( self.hatmodel, "" ); - } - self detach( model, "" ); - if ( isDefined( self.torsodmg5 ) ) - { - self attach( self.torsodmg5, "", 1 ); - } - break; - } - else - { - i++; - } - } - } - else self setmodel( limb_data[ "body_model" ] ); - self attach( limb_data[ "legs_model" ] ); -} - -precache_gib_fx() -{ - anim._effect[ "animscript_gib_fx" ] = loadfx( "weapon/bullet/fx_flesh_gib_fatal_01" ); - anim._effect[ "animscript_gibtrail_fx" ] = loadfx( "trail/fx_trail_blood_streak" ); - anim._effect[ "death_neckgrab_spurt" ] = loadfx( "impacts/fx_flesh_hit_neck_fatal" ); -} - -get_limb_data( gib_ref ) -{ - temp_array = []; - if ( gib_ref == "right_arm" && isDefined( self.torsodmg2 ) && isDefined( self.legdmg1 ) && isDefined( self.gibspawn1 ) && isDefined( self.gibspawntag1 ) ) - { - temp_array[ "right_arm" ][ "body_model" ] = self.torsodmg2; - temp_array[ "right_arm" ][ "legs_model" ] = self.legdmg1; - temp_array[ "right_arm" ][ "spawn_tags_array" ] = []; - temp_array[ "right_arm" ][ "spawn_tags_array" ][ 0 ] = level._zombie_gib_piece_index_right_arm; - } - if ( gib_ref == "left_arm" && isDefined( self.torsodmg3 ) && isDefined( self.legdmg1 ) && isDefined( self.gibspawn2 ) && isDefined( self.gibspawntag2 ) ) - { - temp_array[ "left_arm" ][ "body_model" ] = self.torsodmg3; - temp_array[ "left_arm" ][ "legs_model" ] = self.legdmg1; - temp_array[ "left_arm" ][ "spawn_tags_array" ] = []; - temp_array[ "left_arm" ][ "spawn_tags_array" ][ 0 ] = level._zombie_gib_piece_index_left_arm; - } - if ( gib_ref == "right_leg" && isDefined( self.torsodmg1 ) && isDefined( self.legdmg2 ) && isDefined( self.gibspawn3 ) && isDefined( self.gibspawntag3 ) ) - { - temp_array[ "right_leg" ][ "body_model" ] = self.torsodmg1; - temp_array[ "right_leg" ][ "legs_model" ] = self.legdmg2; - temp_array[ "right_leg" ][ "spawn_tags_array" ] = []; - temp_array[ "right_leg" ][ "spawn_tags_array" ][ 0 ] = level._zombie_gib_piece_index_right_leg; - } - if ( gib_ref == "left_leg" && isDefined( self.torsodmg1 ) && isDefined( self.legdmg3 ) && isDefined( self.gibspawn4 ) && isDefined( self.gibspawntag4 ) ) - { - temp_array[ "left_leg" ][ "body_model" ] = self.torsodmg1; - temp_array[ "left_leg" ][ "legs_model" ] = self.legdmg3; - temp_array[ "left_leg" ][ "spawn_tags_array" ] = []; - temp_array[ "left_leg" ][ "spawn_tags_array" ][ 0 ] = level._zombie_gib_piece_index_left_leg; - } - if ( gib_ref == "no_legs" && isDefined( self.torsodmg1 ) && isDefined( self.legdmg4 ) && isDefined( self.gibspawn4 ) && isDefined( self.gibspawn3 ) && isDefined( self.gibspawntag3 ) && isDefined( self.gibspawntag4 ) ) - { - temp_array[ "no_legs" ][ "body_model" ] = self.torsodmg1; - temp_array[ "no_legs" ][ "legs_model" ] = self.legdmg4; - temp_array[ "no_legs" ][ "spawn_tags_array" ] = []; - temp_array[ "no_legs" ][ "spawn_tags_array" ][ 0 ] = level._zombie_gib_piece_index_right_leg; - temp_array[ "no_legs" ][ "spawn_tags_array" ][ 1 ] = level._zombie_gib_piece_index_left_leg; - } - if ( gib_ref == "guts" && isDefined( self.torsodmg4 ) && isDefined( self.legdmg1 ) ) - { - temp_array[ "guts" ][ "body_model" ] = self.torsodmg4; - temp_array[ "guts" ][ "legs_model" ] = self.legdmg1; - temp_array[ "guts" ][ "spawn_tags_array" ] = []; - temp_array[ "guts" ][ "spawn_tags_array" ][ 0 ] = level._zombie_gib_piece_index_guts; - if ( isDefined( self.gibspawn2 ) && isDefined( self.gibspawntag2 ) ) - { - temp_array[ "guts" ][ "spawn_tags_array" ][ 1 ] = level._zombie_gib_piece_index_left_arm; - } - } - if ( gib_ref == "head" && isDefined( self.torsodmg5 ) && isDefined( self.legdmg1 ) ) - { - temp_array[ "head" ][ "body_model" ] = self.torsodmg5; - temp_array[ "head" ][ "legs_model" ] = self.legdmg1; - temp_array[ "head" ][ "spawn_tags_array" ] = []; - temp_array[ "head" ][ "spawn_tags_array" ][ 0 ] = level._zombie_gib_piece_index_head; - if ( isDefined( self.hat_gibbed ) && !self.hat_gibbed && isDefined( self.gibspawn5 ) && isDefined( self.gibspawntag5 ) ) - { - temp_array[ "head" ][ "spawn_tags_array" ][ 1 ] = level._zombie_gib_piece_index_hat; - } - } - if ( isDefined( temp_array[ gib_ref ] ) ) - { - return temp_array[ gib_ref ]; - } - else - { - return undefined; - } -} - -throw_gib( limb_tags_array ) -{ - if ( isDefined( limb_tags_array ) ) - { - if ( isDefined( level.track_gibs ) ) - { - level [[ level.track_gibs ]]( self, limb_tags_array ); - } - if ( isDefined( self.launch_gib_up ) ) - { - self gib( "up", limb_tags_array ); - return; - } - else - { - self gib( "normal", limb_tags_array ); - } - } -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_combat.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_combat.gsc deleted file mode 100644 index c5fed44..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_combat.gsc +++ /dev/null @@ -1,510 +0,0 @@ -#include maps/mp/animscripts/dog_stop; -#include maps/mp/animscripts/utility; -#include common_scripts/utility; - -main() -{ - debug_anim_print( "dog_combat::main() " ); - self endon( "killanimscript" ); - self setaimanimweights( 0, 0 ); -/# - if ( !debug_allow_combat() ) - { - combatidle(); - return; -#/ - } - if ( isDefined( level.hostmigrationtimer ) ) - { - combatidle(); - return; - } -/# - assert( isDefined( self.enemy ) ); -#/ - if ( !isalive( self.enemy ) ) - { - combatidle(); - return; - } - if ( isplayer( self.enemy ) ) - { - self meleebiteattackplayer( self.enemy ); - } -} - -combatidle() -{ - self set_orient_mode( "face enemy" ); - self animmode( "zonly_physics" ); - idleanim = "zm_combat_attackidle"; - debug_anim_print( "dog_combat::combatIdle() - Setting " + idleanim ); - self setanimstatefromasd( idleanim ); - maps/mp/animscripts/zm_shared::donotetracks( "attack_combat" ); - debug_anim_print( "dog_combat::combatIdle() - " + idleanim + " notify done." ); -} - -shouldwaitincombatidle() -{ - if ( isDefined( level.hostmigrationtimer ) ) - { - return 1; - } -/# - if ( isDefined( self.enemy ) ) - { - assert( isalive( self.enemy ) ); - } -#/ - if ( isDefined( self.enemy.dogattackallowtime ) ) - { - return getTime() < self.enemy.dogattackallowtime; - } -} - -setnextdogattackallowtime( time ) -{ - self.dogattackallowtime = getTime() + time; -} - -meleebiteattackplayer( player ) -{ - self animmode( "gravity", 0 ); - self.safetochangescript = 0; - prepareattackplayer( player ); - attack_time = 1,2 + randomfloat( 0,4 ); - debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_run_attack" ); - self setanimstatefromasd( "zm_combat_attackidle" ); - maps/mp/animscripts/zm_shared::donotetracksfortime( attack_time, "attack_combat", ::handlemeleebiteattacknotetracks, player ); - debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - combat_attack_run notify done." ); - self.safetochangescript = 1; - self animmode( "none", 0 ); -} - -meleebiteattackplayer2( player ) -{ - attackrangebuffer = 30; - for ( ;; ) - { - if ( !isalive( self.enemy ) ) - { - break; - } - else meleerange = self.meleeattackdist + attackrangebuffer; - if ( isDefined( player.syncedmeleetarget ) && player.syncedmeleetarget != self ) - { - if ( checkendcombat( meleerange ) ) - { - break; - } - else combatidle(); - continue; - } - else - { - if ( self shouldwaitincombatidle() ) - { - combatidle(); - break; - } - else - { - self set_orient_mode( "face enemy" ); - self animmode( "gravity" ); - self.safetochangescript = 0; -/# - if ( getDvarInt( "debug_dog_sound" ) ) - { - iprintln( "dog " + self getentnum() + " attack player " + getTime() ); -#/ - } - player setnextdogattackallowtime( 200 ); - if ( dog_cant_kill_in_one_hit( player ) ) - { - level.lastdogmeleeplayertime = getTime(); - level.dogmeleeplayercounter++; - if ( use_low_attack() ) - { - self animmode( "angle deltas" ); - self setanimstatefromasd( "zm_combat_attack_player_close_range" ); - domeleeafterwait( 0,1 ); - maps/mp/animscripts/zm_shared::donotetracksfortime( 1,4, "attack_combat" ); - self animmode( "gravity" ); - } - else - { - attack_time = 1,2 + randomfloat( 0,4 ); - debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_run_attack" ); - self setanimstatefromasd( "zm_combat_attackidle" ); - domeleeafterwait( 0,1 ); - maps/mp/animscripts/zm_shared::donotetracksfortime( attack_time, "attack_combat", ::handlemeleebiteattacknotetracks, player ); - debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - combat_attack_run notify done." ); - } - } - else - { - self thread dog_melee_death( player ); - player.attacked_by_dog = 1; - self thread clear_player_attacked_by_dog_on_death( player ); - debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_attack_player" ); - self setanimstate( "combat_attack_player" ); - self maps/mp/animscripts/shared::donotetracks( "done", ::handlemeleefinishattacknotetracks, player ); - debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - combat_attack_player notify done." ); - self notify( "dog_no_longer_melee_able" ); - self setcandamage( 1 ); - self unlink(); - } - self.safetochangescript = 1; - if ( checkendcombat( meleerange ) ) - { - break; - } - } - } - else - { - } - } - self.safetochangescript = 1; - self animmode( "none" ); -} - -domeleeafterwait( time ) -{ - self endon( "death" ); - wait time; - hitent = self melee(); - if ( isDefined( hitent ) ) - { - if ( isplayer( hitent ) ) - { - hitent shellshock( "dog_bite", 1 ); - } - } -} - -handlemeleebiteattacknotetracks2( note, player ) -{ - if ( note == "dog_melee" ) - { - self melee( anglesToForward( self.angles ) ); - } -} - -handlemeleebiteattacknotetracks( note, player ) -{ - switch( note ) - { - case "dog_melee": - if ( !isDefined( level.dogmeleebiteattacktime ) ) - { - level.dogmeleebiteattacktime = getTime() - level.dogmeleebiteattacktimestart; - level.dogmeleebiteattacktime += 50; - } - hitent = self melee( anglesToForward( self.angles ) ); - if ( isDefined( hitent ) ) - { - if ( isplayer( hitent ) ) - { - hitent shellshock( "dog_bite", 1 ); - } - } - else - { - if ( isDefined( level.dog_melee_miss ) ) - { - self [[ level.dog_melee_miss ]]( player ); - } - } - break; - case "stop_tracking": - melee_time = 200; - if ( !isDefined( level.dogmeleebiteattacktime ) ) - { - level.dogmeleebiteattacktimestart = getTime(); - } - else - { - melee_time = level.dogmeleebiteattacktime; - } - self thread orienttoplayerdeadreckoning( player, melee_time ); - break; - } -} - -handlemeleefinishattacknotetracks( note, player ) -{ - switch( note ) - { - case "dog_melee": - if ( !isDefined( level.dogmeleefinishattacktime ) ) - { - level.dogmeleefinishattacktime = getTime() - level.dogmeleefinishattacktimestart; - level.dogmeleefinishattacktime += 50; - } - hitent = self melee( anglesToForward( self.angles ) ); - if ( isDefined( hitent ) && isalive( player ) ) - { - if ( hitent == player ) - { - break; - } - else } - else attackmiss(); - return 1; - case "dog_early": - self notify( "dog_early_notetrack" ); - debug_anim_print( "dog_combat::handleMeleeFinishAttackNoteTracks() - Setting combat_attack_player_early" ); - self setanimstate( "combat_attack_player_early" ); - break; - case "dog_lunge": - thread set_melee_timer( player ); - debug_anim_print( "dog_combat::handleMeleeFinishAttackNoteTracks() - Setting combat_attack_player_lunge" ); - self setanimstate( "combat_attack_player_lunge" ); - break; - case "dogbite_damage": - self thread killplayer( player ); - break; - case "stop_tracking": - melee_time = 200; - if ( !isDefined( level.dogmeleefinishattacktime ) ) - { - level.dogmeleefinishattacktimestart = getTime(); - } - else - { - melee_time = level.dogmeleefinishattacktime; - } - self thread orienttoplayerdeadreckoning( player, melee_time ); - break; - } -} - -orienttoplayerdeadreckoning( player, time_till_bite ) -{ - enemy_attack_current_origin = player.origin; - enemy_attack_current_time = getTime(); - enemy_motion_time_delta = enemy_attack_current_time - self.enemy_attack_start_time; - enemy_motion_direction = enemy_attack_current_origin - self.enemy_attack_start_origin; - if ( enemy_motion_time_delta == 0 ) - { - enemy_predicted_position = player.origin; - } - else - { - enemy_velocity = enemy_motion_direction / enemy_motion_time_delta; - enemy_predicted_position = player.origin + ( enemy_velocity * time_till_bite ); - } - self set_orient_mode( "face point", enemy_predicted_position ); -} - -checkendcombat( meleerange ) -{ - if ( !isDefined( self.enemy ) ) - { - return 0; - } - disttotargetsq = distancesquared( self.origin, self.enemy.origin ); - return disttotargetsq > ( meleerange * meleerange ); -} - -use_low_attack( player ) -{ - height_diff = self.enemy_attack_start_origin[ 2 ] - self.origin[ 2 ]; - low_enough = 30; - if ( height_diff < low_enough && self.enemy_attack_start_stance == "prone" ) - { - return 1; - } - melee_origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 65 ); - enemy_origin = ( self.enemy.origin[ 0 ], self.enemy.origin[ 1 ], self.enemy.origin[ 2 ] + 32 ); - if ( !bullettracepassed( melee_origin, enemy_origin, 0, self ) ) - { - return 1; - } - return 0; -} - -prepareattackplayer( player ) -{ - level.dog_death_quote = &"SCRIPT_PLATFORM_DOG_DEATH_DO_NOTHING"; - distancetotarget = distance( self.origin, self.enemy.origin ); - targetheight = abs( self.enemy.origin[ 2 ] - self.origin[ 2 ] ); - self.enemy_attack_start_distance = distancetotarget; - self.enemy_attack_start_origin = player.origin; - self.enemy_attack_start_time = getTime(); - self.enemy_attack_start_stance = player getstance(); -} - -attackteleportthread( offset ) -{ - self endon( "death" ); - self endon( "killanimscript" ); - reps = 5; - increment = ( offset[ 0 ] / reps, offset[ 1 ] / reps, offset[ 2 ] / reps ); - i = 0; - while ( i < reps ) - { - self teleport( self.origin + increment ); - wait 0,05; - i++; - } -} - -player_attacked() -{ - if ( isalive( self ) ) - { - return self meleebuttonpressed(); - } -} - -set_melee_timer( player ) -{ - wait 0,15; - self.melee_able_timer = getTime(); -} - -clear_player_attacked_by_dog_on_death( player ) -{ - self waittill( "death" ); - player.attacked_by_dog = undefined; -} - -dog_cant_kill_in_one_hit( player ) -{ - return 1; - if ( isDefined( player.dogs_dont_instant_kill ) ) - { -/# - assert( player.dogs_dont_instant_kill, "Dont set player.dogs_dont_instant_kill to false, set to undefined" ); -#/ - return 1; - } - if ( ( getTime() - level.lastdogmeleeplayertime ) > 8000 ) - { - level.dogmeleeplayercounter = 0; - } - if ( level.dogmeleeplayercounter < level.dog_hits_before_kill ) - { - return player.health > 25; - } -} - -dog_melee_death( player ) -{ - self endon( "killanimscript" ); - self endon( "dog_no_longer_melee_able" ); - pressed = 0; - press_time = anim.dog_presstime; - self waittill( "dog_early_notetrack" ); - while ( player player_attacked() ) - { - wait 0,05; - } - for ( ;; ) - { - if ( !pressed ) - { - if ( player player_attacked() ) - { - pressed = 1; - if ( isDefined( self.melee_able_timer ) && isalive( player ) ) - { - if ( ( getTime() - self.melee_able_timer ) <= press_time ) - { - player.player_view.custom_dog_save = "neck_snap"; - self notify( "melee_stop" ); - debug_anim_print( "dog_combat::dog_melee_death() - Setting combat_player_neck_snap" ); - self setanimstate( "combat_player_neck_snap" ); - self waittillmatch( "done" ); - return "dog_death"; - debug_anim_print( "dog_combat::dog_melee_death() - combat_player_neck_snap notify done." ); - self playsound( "aml_dog_neckbreak" ); - self setcandamage( 1 ); - self.a.nodeath = 1; - dif = player.origin - self.origin; - dif = ( dif[ 0 ], dif[ 1 ], 0 ); - self dodamage( self.health + 503, self geteye() - dif, player ); - self notify( "killanimscript" ); - } - else - { - debug_anim_print( "dog_combat::dog_melee_death() - Setting combat_player_neck_snap" ); - self setanimstate( "combat_attack_player" ); - level.dog_death_quote = &"SCRIPT_PLATFORM_DOG_DEATH_TOO_LATE"; - } - return; - } - level.dog_death_quote = &"SCRIPT_PLATFORM_DOG_DEATH_TOO_SOON"; - debug_anim_print( "dog_combat::dog_melee_death() - Setting combat_player_neck_miss" ); - self setanimstate( "combat_player_neck_miss" ); - return; - } - } - else - { - if ( !player player_attacked() ) - { - pressed = 0; - } - } - wait 0,05; - } -} - -attackmiss() -{ - if ( isDefined( self.enemy ) ) - { - forward = anglesToForward( self.angles ); - dirtoenemy = self.enemy.origin - ( self.origin + vectorScale( forward, 50 ) ); - if ( vectordot( dirtoenemy, forward ) > 0 ) - { - debug_anim_print( "dog_combat::attackMiss() - Setting combat_attack_miss" ); - self setanimstate( "combat_attack_miss" ); - self thread maps/mp/animscripts/dog_stop::lookattarget( "normal" ); - } - else self.skipstartmove = 1; - self thread attackmisstracktargetthread(); - if ( ( ( dirtoenemy[ 0 ] * forward[ 1 ] ) - ( dirtoenemy[ 1 ] * forward[ 0 ] ) ) > 0 ) - { - debug_anim_print( "dog_combat::attackMiss() - Setting combat_attack_miss_right" ); - self setanimstate( "combat_attack_miss_right" ); - } - else - { - debug_anim_print( "dog_combat::attackMiss() - Setting combat_attack_miss_left" ); - self setanimstate( "combat_attack_miss_left" ); - } - } - else - { - debug_anim_print( "dog_combat::attackMiss() - Setting combat_attack_miss" ); - self setanimstate( "combat_attack_miss" ); - } - self maps/mp/animscripts/shared::donotetracks( "done" ); - debug_anim_print( "dog_combat::attackMiss() - attackMiss notify done." ); - self notify( "stop tracking" ); - debug_anim_print( "dog_combat::attackMiss() - Stopped tracking" ); -} - -attackmisstracktargetthread() -{ - self endon( "killanimscript" ); - wait 0,6; - self set_orient_mode( "face enemy" ); -} - -killplayer( player ) -{ - self endon( "pvd_melee_interrupted" ); - player.specialdeath = 1; - player setcandamage( 1 ); - wait 1; - damage = player.health + 1; - if ( !isalive( player ) ) - { - return; - } -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_death.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_death.gsc deleted file mode 100644 index 6fec47d..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_death.gsc +++ /dev/null @@ -1,30 +0,0 @@ -#include maps/mp/animscripts/zm_shared; -#include maps/mp/animscripts/utility; - -main() -{ - debug_anim_print( "dog_death::main()" ); - self setaimanimweights( 0, 0 ); - self endon( "killanimscript" ); - if ( isDefined( self.a.nodeath ) ) - { -/# - assert( self.a.nodeath, "Nodeath needs to be set to true or undefined." ); -#/ - wait 3; - return; - } - self unlink(); - if ( isDefined( self.enemy ) && isDefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self ) - { - self.enemy.syncedmeleetarget = undefined; - } - death_anim = "death_" + getanimdirection( self.damageyaw ); -/# - println( death_anim ); -#/ - self animmode( "gravity" ); - debug_anim_print( "dog_death::main() - Setting " + death_anim ); - self setanimstatefromasd( death_anim ); - maps/mp/animscripts/zm_shared::donotetracks( "dead_dog" ); -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_flashed.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_flashed.gsc deleted file mode 100644 index af53db4..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_flashed.gsc +++ /dev/null @@ -1,6 +0,0 @@ - -main() -{ - self endon( "killanimscript" ); - self endon( "stop_flashbang_effect" ); -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_init.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_init.gsc deleted file mode 100644 index 5d1b1ba..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_init.gsc +++ /dev/null @@ -1,61 +0,0 @@ -#include maps/mp/animscripts/dog_move; -#include maps/mp/animscripts/utility; -#include maps/mp/animscripts/shared; - -main() -{ - level.dog_debug_orient = 0; - level.dog_debug_anims = 0; - level.dog_debug_anims_ent = 0; - level.dog_debug_turns = 0; - debug_anim_print( "dog_init::main() " ); - maps/mp/animscripts/dog_move::setup_sound_variables(); - anim_get_dvar_int( "debug_dog_sound", "0" ); - anim_get_dvar_int( "debug_dog_notetracks", "0" ); - self.ignoresuppression = 1; - self.chatinitialized = 0; - self.nododgemove = 1; - level.dogattackplayerdist = 102; - level.dogattackplayercloserangedist = 102; - level.dogrunturnspeed = 20; - level.dogrunpainspeed = 20; - self.meleeattackdist = 0; - self thread setmeleeattackdist(); - self.a = spawnstruct(); - self.a.pose = "stand"; - self.a.nextstandinghitdying = 0; - self.a.movement = "walk"; - self.suppressionthreshold = 1; - self.disablearrivals = 0; - level.dogstoppingdistsq = 3416,82; - self.stopanimdistsq = level.dogstoppingdistsq; - self.pathenemyfightdist = 512; - self settalktospecies( "zombiedog" ); - level.lastdogmeleeplayertime = 0; - level.dogmeleeplayercounter = 0; - if ( !isDefined( level.dog_hits_before_kill ) ) - { - level.dog_hits_before_kill = 1; - } -} - -setmeleeattackdist() -{ - self endon( "death" ); - while ( 1 ) - { - if ( isDefined( self.enemy ) ) - { - if ( isplayer( self.enemy ) ) - { - self.meleeattackdist = 64; - break; - } - else - { - self.meleeattackdist = 102; - } - } - wait 1; - } -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_jump.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_jump.gsc deleted file mode 100644 index 11ddcb8..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_jump.gsc +++ /dev/null @@ -1,14 +0,0 @@ -#include maps/mp/animscripts/zm_shared; -#include maps/mp/animscripts/shared; -#include maps/mp/animscripts/utility; - -main() -{ - self endon( "killanimscript" ); - debug_anim_print( "dog_jump::main()" ); - self setaimanimweights( 0, 0 ); - self.safetochangescript = 0; - self setanimstatefromasd( "zm_traverse_wallhop" ); - maps/mp/animscripts/zm_shared::donotetracks( "traverse_wallhop" ); - self.safetochangescript = 1; -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_move.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_move.gsc deleted file mode 100644 index 53dbe04..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_move.gsc +++ /dev/null @@ -1,259 +0,0 @@ -#include maps/mp/animscripts/zm_utility; -#include maps/mp/animscripts/dog_stop; -#include maps/mp/animscripts/zm_shared; -#include maps/mp/animscripts/shared; -#include maps/mp/animscripts/utility; - -setup_sound_variables() -{ - level.dog_sounds[ "far" ] = spawnstruct(); - level.dog_sounds[ "close" ] = spawnstruct(); - level.dog_sounds[ "close" ].minrange = 0; - level.dog_sounds[ "close" ].maxrange = 500; - level.dog_sounds[ "close" ].sound = "aml_dog_bark_close"; - level.dog_sounds[ "close" ].soundlengthplaceholder = 0,2; - level.dog_sounds[ "close" ].aftersoundwaitmin = 0,1; - level.dog_sounds[ "close" ].aftersoundwaitmax = 0,3; - level.dog_sounds[ "close" ].minrangesqr = level.dog_sounds[ "close" ].minrange * level.dog_sounds[ "close" ].minrange; - level.dog_sounds[ "close" ].maxrangesqr = level.dog_sounds[ "close" ].maxrange * level.dog_sounds[ "close" ].maxrange; - level.dog_sounds[ "far" ].minrange = 500; - level.dog_sounds[ "far" ].maxrange = 0; - level.dog_sounds[ "far" ].sound = "aml_dog_bark"; - level.dog_sounds[ "far" ].soundlengthplaceholder = 0,2; - level.dog_sounds[ "far" ].aftersoundwaitmin = 0,1; - level.dog_sounds[ "far" ].aftersoundwaitmax = 0,3; - level.dog_sounds[ "far" ].minrangesqr = level.dog_sounds[ "far" ].minrange * level.dog_sounds[ "far" ].minrange; - level.dog_sounds[ "far" ].maxrangesqr = level.dog_sounds[ "far" ].maxrange * level.dog_sounds[ "far" ].maxrange; -} - -main() -{ - self endon( "killanimscript" ); - debug_anim_print( "dog_move::main()" ); - self setaimanimweights( 0, 0 ); - do_movement = 1; -/# - if ( !debug_allow_movement() ) - { - do_movement = 0; -#/ - } - if ( isDefined( level.hostmigrationtimer ) ) - { - do_movement = 0; - } - if ( !isDefined( self.traversecomplete ) && !isDefined( self.skipstartmove ) && self.a.movement == "run" && do_movement ) - { - self startmove(); - blendtime = 0; - } - else - { - blendtime = 0,2; - } - self.traversecomplete = undefined; - self.skipstartmove = undefined; - if ( do_movement ) - { - if ( self.a.movement == "run" ) - { - debug_anim_print( "dog_move::main() - Setting move_run" ); - self setanimstatefromasd( "zm_move_run" ); - maps/mp/animscripts/zm_shared::donotetracksfortime( 0,1, "move_run" ); - debug_anim_print( "dog_move::main() - move_run wait 0.1 done " ); - } - else - { - debug_anim_print( "dog_move::main() - Setting move_start " ); - self setanimstatefromasd( "zm_move_walk" ); - maps/mp/animscripts/zm_shared::donotetracks( "move_walk" ); - } - } - self thread maps/mp/animscripts/dog_stop::lookattarget( "normal" ); - while ( 1 ) - { - self moveloop(); - if ( self.a.movement == "run" ) - { - if ( self.disablearrivals == 0 ) - { - self thread stopmove(); - } - self waittill( "run" ); - } - } -} - -moveloop() -{ - self endon( "killanimscript" ); - self endon( "stop_soon" ); - while ( 1 ) - { - do_movement = 1; -/# - if ( !debug_allow_movement() ) - { - do_movement = 0; -#/ - } - if ( isDefined( level.hostmigrationtimer ) ) - { - do_movement = 0; - } - while ( !do_movement ) - { - self setaimanimweights( 0, 0 ); - self setanimstatefromasd( "zm_stop_idle" ); - maps/mp/animscripts/zm_shared::donotetracks( "stop_idle" ); - } - if ( self.disablearrivals ) - { - self.stopanimdistsq = 0; - } - else - { - self.stopanimdistsq = level.dogstoppingdistsq; - } - if ( self.a.movement == "run" ) - { - debug_anim_print( "dog_move::moveLoop() - Setting move_run" ); - self setanimstatefromasd( "zm_move_run" ); - maps/mp/animscripts/zm_shared::donotetracksfortime( 0,2, "move_run" ); - debug_anim_print( "dog_move::moveLoop() - move_run wait 0.2 done " ); - continue; - } - else - { -/# - assert( self.a.movement == "walk" ); -#/ - debug_anim_print( "dog_move::moveLoop() - Setting move_walk " ); - self setanimstatefromasd( "zm_move_walk" ); - maps/mp/animscripts/zm_shared::donotetracksfortime( 0,1, "move_walk" ); - if ( self need_to_run() ) - { - self.a.movement = "run"; - self notify( "dog_running" ); - } - debug_anim_print( "dog_move::moveLoop() - move_walk wait 0.2 done " ); - } - } -} - -startmovetracklookahead() -{ - self endon( "killanimscript" ); - i = 0; - while ( i < 2 ) - { - lookaheadangle = vectorToAngle( self.lookaheaddir ); - self set_orient_mode( "face angle", lookaheadangle ); - i++; - } -} - -startmove() -{ - debug_anim_print( "dog_move::startMove() - Setting move_start " ); - self setanimstatefromasd( "zm_move_start" ); - maps/mp/animscripts/zm_shared::donotetracks( "move_start" ); - debug_anim_print( "dog_move::startMove() - move_start notify done." ); - self animmode( "none" ); - self set_orient_mode( "face motion" ); -} - -stopmove() -{ - self endon( "killanimscript" ); - self endon( "run" ); - debug_anim_print( "dog_move::stopMove() - Setting move_stop" ); - self setanimstatefromasd( "zm_move_stop" ); - maps/mp/animscripts/zm_shared::donotetracks( "move_stop" ); - debug_anim_print( "dog_move::stopMove() - move_stop notify done." ); -} - -getenemydistancesqr() -{ - if ( isDefined( self.enemy ) ) - { - return distancesquared( self.origin, self.enemy.origin ); - } - return 100000000; -} - -getsoundkey( distancesqr ) -{ - keys = getarraykeys( level.dog_sounds ); - i = 0; - while ( i < keys.size ) - { - sound_set = level.dog_sounds[ keys[ i ] ]; - if ( sound_set.minrangesqr > distancesqr ) - { - i++; - continue; - } - else if ( sound_set.maxrangesqr && sound_set.maxrangesqr < distancesqr ) - { - i++; - continue; - } - else - { - return keys[ i ]; - } - i++; - } - return keys[ keys.size - 1 ]; -} - -need_to_run() -{ - run_dist_squared = 147456; - if ( getDvar( "scr_dog_run_distance" ) != "" ) - { - dist = getDvarInt( "scr_dog_run_distance" ); - run_dist_squared = dist * dist; - } - run_yaw = 20; - run_pitch = 30; - run_height = 64; - if ( self.a.movement != "walk" ) - { - return 0; - } - if ( self.health < self.maxhealth ) - { - return 1; - } - if ( !isDefined( self.enemy ) || !isalive( self.enemy ) ) - { - return 0; - } - if ( !self cansee( self.enemy ) ) - { - return 0; - } - dist = distancesquared( self.origin, self.enemy.origin ); - if ( dist > run_dist_squared ) - { - return 0; - } - height = self.origin[ 2 ] - self.enemy.origin[ 2 ]; - if ( abs( height ) > run_height ) - { - return 0; - } - yaw = self maps/mp/animscripts/zm_utility::absyawtoenemy(); - if ( yaw > run_yaw ) - { - return 0; - } - pitch = angleClamp180( vectorToAngle( self.origin - self.enemy.origin )[ 0 ] ); - if ( abs( pitch ) > run_pitch ) - { - return 0; - } - return 1; -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_pain.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_pain.gsc deleted file mode 100644 index b28cb45..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_pain.gsc +++ /dev/null @@ -1,8 +0,0 @@ -#include maps/mp/animscripts/utility; - -main() -{ - debug_anim_print( "dog_pain::main() " ); - self endon( "killanimscript" ); - self setaimanimweights( 0, 0 ); -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_stop.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_stop.gsc deleted file mode 100644 index 5c5dd06..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_stop.gsc +++ /dev/null @@ -1,148 +0,0 @@ -#include maps/mp/animscripts/zm_shared; -#include maps/mp/animscripts/utility; -#include maps/mp/animscripts/shared; - -main() -{ - debug_anim_print( "dog_stop::main()" ); - self endon( "killanimscript" ); - self setaimanimweights( 0, 0 ); - self thread lookattarget( "attackIdle" ); - while ( 1 ) - { - if ( shouldattackidle() ) - { - self randomattackidle(); - maps/mp/animscripts/zm_shared::donotetracks( "attack_idle", ::dogidlenotetracks ); - } - else - { - self set_orient_mode( "face current" ); - debug_anim_print( "dog_stop::main() - Setting stop_idle" ); - self notify( "stop tracking" ); - self setaimanimweights( 0, 0 ); - self setanimstatefromasd( "zm_stop_idle" ); - maps/mp/animscripts/zm_shared::donotetracksfortime( 0,2, "stop_idle", ::dogidlenotetracks ); - self thread lookattarget( "attackIdle" ); - } - debug_anim_print( "dog_stop::main() - stop idle loop notify done." ); - } -} - -dogidlenotetracks( note ) -{ - if ( note == "breathe_fire" ) - { - if ( isDefined( level._effect[ "dog_breath" ] ) ) - { - self.breath_fx = spawn( "script_model", self gettagorigin( "TAG_MOUTH_FX" ) ); - self.breath_fx.angles = self gettagangles( "TAG_MOUTH_FX" ); - self.breath_fx setmodel( "tag_origin" ); - self.breath_fx linkto( self, "TAG_MOUTH_FX" ); - playfxontag( level._effect[ "dog_breath" ], self.breath_fx, "tag_origin" ); - } - } -} - -isfacingenemy( tolerancecosangle ) -{ -/# - assert( isDefined( self.enemy ) ); -#/ - vectoenemy = self.enemy.origin - self.origin; - disttoenemy = length( vectoenemy ); - if ( disttoenemy < 1 ) - { - return 1; - } - forward = anglesToForward( self.angles ); - val1 = ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] ); - val2 = ( ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] ) ) / disttoenemy; - return ( ( ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] ) ) / disttoenemy ) > tolerancecosangle; -} - -randomattackidle() -{ - if ( isfacingenemy( -0,5 ) ) - { - self set_orient_mode( "face current" ); - } - else - { - self set_orient_mode( "face enemy" ); - } - if ( should_growl() ) - { - debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl" ); - self setanimstatefromasd( "zm_stop_attackidle_growl" ); - return; - } - idlechance = 33; - barkchance = 66; - if ( isDefined( self.mode ) ) - { - if ( self.mode == "growl" ) - { - idlechance = 15; - barkchance = 30; - } - else - { - if ( self.mode == "bark" ) - { - idlechance = 15; - barkchance = 85; - } - } - } - rand = randomint( 100 ); - if ( rand < idlechance ) - { - debug_anim_print( "dog_stop::main() - Setting stop_attackidle" ); - self setanimstatefromasd( "zm_stop_attackidle" ); - } - else if ( rand < barkchance ) - { - debug_anim_print( "dog_stop::main() - Setting stop_attackidle_bark " ); - self setanimstatefromasd( "zm_stop_attackidle_bark" ); - } - else - { - debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl " ); - self setanimstatefromasd( "zm_stop_attackidle_growl" ); - } -} - -shouldattackidle() -{ - if ( isDefined( self.enemy ) && isalive( self.enemy ) ) - { - return distancesquared( self.origin, self.enemy.origin ) < 1000000; - } -} - -should_growl() -{ - if ( isDefined( self.script_growl ) ) - { - return 1; - } - if ( !isalive( self.enemy ) ) - { - return 1; - } - return !self cansee( self.enemy ); -} - -lookattarget( lookposeset ) -{ - self endon( "killanimscript" ); - self endon( "stop tracking" ); - debug_anim_print( "dog_stop::lookAtTarget() - Starting look at " + lookposeset ); - self.rightaimlimit = 90; - self.leftaimlimit = -90; - self.upaimlimit = 45; - self.downaimlimit = -45; - self maps/mp/animscripts/shared::setanimaimweight( 1, 0,2 ); - self maps/mp/animscripts/shared::trackloop(); -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_turn.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_turn.gsc deleted file mode 100644 index 0cbc0cb..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_dog_turn.gsc +++ /dev/null @@ -1,136 +0,0 @@ -#include maps/mp/animscripts/zm_shared; -#include maps/mp/animscripts/shared; -#include maps/mp/animscripts/utility; - -main() -{ - self endon( "killanimscript" ); - debug_anim_print( "dog_turn::main()" ); - self setaimanimweights( 0, 0 ); - self.safetochangescript = 0; - deltayaw = self getdeltaturnyaw(); - if ( need_to_turn_around( deltayaw ) ) - { - turn_180( deltayaw ); - } - else - { - turn_90( deltayaw ); - } - move_out_of_turn(); - self.skipstartmove = 1; - self.safetochangescript = 1; -} - -need_to_turn_around( deltayaw ) -{ - angle = getDvarFloat( "dog_turn180_angle" ); - if ( deltayaw > angle || deltayaw < ( -1 * angle ) ) - { - debug_turn_print( "need_to_turn_around: " + deltayaw + " YES" ); - return 1; - } - debug_turn_print( "need_to_turn_around: " + deltayaw + " NO" ); - return 0; -} - -do_turn_anim( stopped_anim, run_anim, wait_time, run_wait_time ) -{ - speed = length( self getvelocity() ); - do_anim = stopped_anim; - if ( level.dogrunturnspeed < speed ) - { - do_anim = run_anim; - wait_time = run_wait_time; - } - debug_anim_print( "dog_move::do_turn_anim() - Setting " + do_anim ); - self setanimstatefromasd( do_anim ); - maps/mp/animscripts/zm_shared::donotetracksfortime( run_wait_time, "move_turn" ); - debug_anim_print( "dog_move::turn_around_right() - done with " + do_anim + " wait time " + run_wait_time ); -} - -turn_left() -{ - self do_turn_anim( "move_turn_left", "move_run_turn_left", 0,5, 0,5 ); -} - -turn_right() -{ - self do_turn_anim( "move_turn_right", "move_run_turn_right", 0,5, 0,5 ); -} - -turn_180_left() -{ - self do_turn_anim( "move_turn_around_left", "move_run_turn_around_left", 0,5, 0,7 ); -} - -turn_180_right() -{ - self do_turn_anim( "move_turn_around_right", "move_run_turn_around_right", 0,5, 0,7 ); -} - -move_out_of_turn() -{ - if ( self.a.movement == "run" ) - { - debug_anim_print( "dog_move::move_out_of_turn() - Setting move_run" ); - self setanimstatefromasd( "zm_move_run" ); - maps/mp/animscripts/zm_shared::donotetracksfortime( 0,1, "move_run" ); - debug_anim_print( "dog_move::move_out_of_turn() - move_run wait 0.1 done " ); - } - else - { - debug_anim_print( "dog_move::move_out_of_turn() - Setting move_start " ); - self setanimstatefromasd( "zm_move_walk" ); - maps/mp/animscripts/zm_shared::donotetracks( "move_walk" ); - } -} - -turn_90( deltayaw ) -{ - self animmode( "zonly_physics" ); - debug_turn_print( "turn_90 deltaYaw: " + deltayaw ); - if ( deltayaw > getDvarFloat( "dog_turn90_angle" ) ) - { - debug_turn_print( "turn_90 left", 1 ); - self turn_left(); - } - else - { - debug_turn_print( "turn_90 right", 1 ); - self turn_right(); - } -} - -turn_180( deltayaw ) -{ - self animmode( "zonly_physics" ); - debug_turn_print( "turn_180 deltaYaw: " + deltayaw ); - if ( deltayaw > 177 || deltayaw < -177 ) - { - if ( randomint( 2 ) == 0 ) - { - debug_turn_print( "turn_around random right", 1 ); - self turn_180_right(); - } - else - { - debug_turn_print( "turn_around random left", 1 ); - self turn_180_left(); - } - } - else - { - if ( deltayaw > getDvarFloat( "dog_turn180_angle" ) ) - { - debug_turn_print( "turn_around left", 1 ); - self turn_180_left(); - return; - } - else - { - debug_turn_print( "turn_around right", 1 ); - self turn_180_right(); - } - } -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_flashed.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_flashed.gsc deleted file mode 100644 index bdf6899..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_flashed.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/animscripts/shared; -#include maps/mp/animscripts/utility; - -main() -{ -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_init.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_init.gsc deleted file mode 100644 index fb399ef..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_init.gsc +++ /dev/null @@ -1,158 +0,0 @@ -#include maps/mp/animscripts/zm_shared; -#include maps/mp/animscripts/zm_init; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/animscripts/utility; -#include maps/mp/animscripts/shared; -#include common_scripts/utility; - -main() -{ - self.a = spawnstruct(); - self.team = level.zombie_team; - firstinit(); - self.a.pose = "stand"; - self.a.movement = "stop"; - self.a.state = "stop"; - self.a.special = "none"; - self.a.combatendtime = getTime(); - self.a.script = "init"; - self.a.alertness = "casual"; - self.a.lastenemytime = getTime(); - self.a.forced_cover = "none"; - self.a.desired_script = "none"; - self.a.current_script = "none"; - self.a.lookangle = 0; - self.a.paintime = 0; - self.a.nextgrenadetrytime = 0; - self.walk = 0; - self.sprint = 0; - self.a.runblendtime = 0,2; - self.a.flamepaintime = 0; - self.a.postscriptfunc = undefined; - self.a.stance = "stand"; - self._animactive = 0; - self thread deathnotify(); - self.baseaccuracy = self.accuracy; - if ( !isDefined( self.script_accuracy ) ) - { - self.script_accuracy = 1; - } - self.a.misstime = 0; - self.a.yawtransition = "none"; - self.a.nodeath = 0; - self.a.misstime = 0; - self.a.misstimedebounce = 0; - self.a.disablepain = 0; - self.accuracystationarymod = 1; - self.chatinitialized = 0; - self.sightpostime = 0; - self.sightposleft = 1; - self.precombatrunenabled = 1; - self.is_zombie = 1; - self.a.crouchpain = 0; - self.a.nextstandinghitdying = 0; - if ( !isDefined( self.script_forcegrenade ) ) - { - self.script_forcegrenade = 0; - } -/# - self.a.lastdebugprint = ""; -#/ - self.lastenemysighttime = 0; - self.combattime = 0; - self.coveridleselecttime = -696969; - self.old = spawnstruct(); - self.reacquire_state = 0; - self.a.allow_shooting = 0; -} - -donothing() -{ -} - -empty( one, two, three, whatever ) -{ -} - -clearenemy() -{ - self notify( "stop waiting for enemy to die" ); - self endon( "stop waiting for enemy to die" ); - self.sightenemy waittill( "death" ); - self.sightpos = undefined; - self.sighttime = 0; - self.sightenemy = undefined; -} - -deathnotify() -{ - self waittill( "death", other ); - self notify( anim.scriptchange ); -} - -firstinit() -{ - if ( isDefined( anim.notfirsttime ) ) - { - return; - } - anim.notfirsttime = 1; - anim.usefacialanims = 0; - if ( !isDefined( anim.dog_health ) ) - { - anim.dog_health = 1; - } - if ( !isDefined( anim.dog_presstime ) ) - { - anim.dog_presstime = 350; - } - if ( !isDefined( anim.dog_hits_before_kill ) ) - { - anim.dog_hits_before_kill = 1; - } - level.nextgrenadedrop = randomint( 3 ); - level.lastplayersighted = 100; - anim.defaultexception = ::empty; - setdvar( "scr_expDeathMayMoveCheck", "on" ); - anim.lastsidestepanim = 0; - anim.meleerange = 64; - anim.meleerangesq = anim.meleerange * anim.meleerange; - anim.standrangesq = 262144; - anim.chargerangesq = 40000; - anim.chargelongrangesq = 262144; - anim.aivsaimeleerangesq = 160000; - anim.combatmemorytimeconst = 10000; - anim.combatmemorytimerand = 6000; - anim.scriptchange = "script_change"; - anim.lastgibtime = 0; - anim.gibdelay = 3000; - anim.mingibs = 2; - anim.maxgibs = 4; - anim.totalgibs = randomintrange( anim.mingibs, anim.maxgibs ); - anim.corner_straight_yaw_limit = 36; - if ( !isDefined( anim.optionalstepeffectfunction ) ) - { - anim.optionalstepeffects = []; - anim.optionalstepeffectfunction = ::empty; - } - anim.notetracks = []; - maps/mp/animscripts/zm_shared::registernotetracks(); - if ( !isDefined( level.flag ) ) - { - level.flag = []; - level.flags_lock = []; - } - level.painai = undefined; - anim.maymovecheckenabled = 1; - anim.badplaces = []; - anim.badplaceint = 0; - anim.covercrouchleanpitch = -55; - anim.lastcarexplosiontime = -100000; -} - -onplayerconnect() -{ - player = self; - firstinit(); - player.invul = 0; -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_jump.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_jump.gsc deleted file mode 100644 index bdf6899..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_jump.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/animscripts/shared; -#include maps/mp/animscripts/utility; - -main() -{ -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_melee.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_melee.gsc deleted file mode 100644 index c8cfd3c..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_melee.gsc +++ /dev/null @@ -1,304 +0,0 @@ -#include maps/mp/animscripts/zm_combat; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/animscripts/utility; -#include maps/mp/animscripts/shared; -#include common_scripts/utility; - -meleecombat() -{ - self endon( "end_melee" ); - self endon( "killanimscript" ); -/# - assert( canmeleeanyrange() ); -#/ - self orientmode( "face enemy" ); - if ( is_true( self.sliding_on_goo ) ) - { - self animmode( "slide" ); - } - else - { - self animmode( "zonly_physics" ); - } - for ( ;; ) - { - if ( isDefined( self.marked_for_death ) ) - { - return; - } - if ( isDefined( self.enemy ) ) - { - angles = vectorToAngle( self.enemy.origin - self.origin ); - self orientmode( "face angle", angles[ 1 ] ); - } - if ( isDefined( self.zmb_vocals_attack ) ) - { - self playsound( self.zmb_vocals_attack ); - } - if ( isDefined( self.nochangeduringmelee ) && self.nochangeduringmelee ) - { - self.safetochangescript = 0; - } - if ( isDefined( self.is_inert ) && self.is_inert ) - { - return; - } - set_zombie_melee_anim_state( self ); - if ( isDefined( self.melee_anim_func ) ) - { - self thread [[ self.melee_anim_func ]](); - } - while ( 1 ) - { - self waittill( "melee_anim", note ); - if ( note == "end" ) - { - break; - } - else if ( note == "fire" ) - { - if ( !isDefined( self.enemy ) ) - { - break; - } - else if ( isDefined( self.dont_die_on_me ) && self.dont_die_on_me ) - { - break; - } - else - { - self.enemy notify( "melee_swipe" ); - oldhealth = self.enemy.health; - self melee(); - if ( !isDefined( self.enemy ) ) - { - break; - } - else if ( self.enemy.health >= oldhealth ) - { - if ( isDefined( self.melee_miss_func ) ) - { - self [[ self.melee_miss_func ]](); - break; - } - else - { - if ( isDefined( level.melee_miss_func ) ) - { - self [[ level.melee_miss_func ]](); - } - } - } -/# - if ( getDvarInt( #"7F11F572" ) ) - { - if ( self.enemy.health < oldhealth ) - { - zombie_eye = self geteye(); - player_eye = self.enemy geteye(); - trace = bullettrace( zombie_eye, player_eye, 1, self ); - hitpos = trace[ "position" ]; - dist = distance( zombie_eye, hitpos ); - iprintln( "melee HIT " + dist ); -#/ - } - } - continue; - } - else - { - if ( note == "stop" ) - { - if ( !cancontinuetomelee() ) - { - break; - } - } - } - else - { - } - } - } - if ( is_true( self.sliding_on_goo ) ) - { - self orientmode( "face enemy" ); - } - else self orientmode( "face default" ); - if ( isDefined( self.nochangeduringmelee ) || self.nochangeduringmelee && is_true( self.sliding_on_goo ) ) - { - if ( isDefined( self.enemy ) ) - { - dist_sq = distancesquared( self.origin, self.enemy.origin ); - if ( dist_sq > ( self.meleeattackdist * self.meleeattackdist ) ) - { - self.safetochangescript = 1; - wait 0,1; - break; - } - else } - else self.safetochangescript = 1; - wait 0,1; - break; - } - else - { - } - } - if ( is_true( self.sliding_on_goo ) ) - { - self animmode( "slide" ); - } - else self animmode( "none" ); - self thread maps/mp/animscripts/zm_combat::main(); -} - -cancontinuetomelee() -{ - return canmeleeinternal( "already started" ); -} - -canmeleeanyrange() -{ - return canmeleeinternal( "any range" ); -} - -canmeleedesperate() -{ - return canmeleeinternal( "long range" ); -} - -canmelee() -{ - return canmeleeinternal( "normal" ); -} - -canmeleeinternal( state ) -{ - if ( !issentient( self.enemy ) ) - { - return 0; - } - if ( !isalive( self.enemy ) ) - { - return 0; - } - if ( isDefined( self.disablemelee ) ) - { -/# - assert( self.disablemelee ); -#/ - return 0; - } - yaw = abs( getyawtoenemy() ); - if ( yaw > 60 || state != "already started" && yaw > 110 ) - { - return 0; - } - enemypoint = self.enemy getorigin(); - vectoenemy = enemypoint - self.origin; - self.enemydistancesq = lengthsquared( vectoenemy ); - if ( self.enemydistancesq <= anim.meleerangesq ) - { - if ( !ismeleepathclear( vectoenemy, enemypoint ) ) - { - return 0; - } - return 1; - } - if ( state != "any range" ) - { - chargerangesq = anim.chargerangesq; - if ( state == "long range" ) - { - chargerangesq = anim.chargelongrangesq; - } - if ( self.enemydistancesq > chargerangesq ) - { - return 0; - } - } - if ( state == "already started" ) - { - return 0; - } - if ( isDefined( self.check_melee_path ) && self.check_melee_path ) - { - if ( !ismeleepathclear( vectoenemy, enemypoint ) ) - { - self notify( "melee_path_blocked" ); - return 0; - } - } - if ( isDefined( level.can_melee ) ) - { - if ( !( self [[ level.can_melee ]]() ) ) - { - return 0; - } - } - return 1; -} - -ismeleepathclear( vectoenemy, enemypoint ) -{ - dirtoenemy = vectornormalize( ( vectoenemy[ 0 ], vectoenemy[ 1 ], 0 ) ); - meleepoint = enemypoint - ( dirtoenemy[ 0 ] * 28, dirtoenemy[ 1 ] * 28, 0 ); - if ( !self isingoal( meleepoint ) ) - { - return 0; - } - if ( self maymovetopoint( meleepoint ) ) - { - return 1; - } - trace1 = bullettrace( self.origin + vectorScale( ( 0, 0, 1 ), 20 ), meleepoint + vectorScale( ( 0, 0, 1 ), 20 ), 1, self ); - trace2 = bullettrace( self.origin + vectorScale( ( 0, 0, 1 ), 72 ), meleepoint + vectorScale( ( 0, 0, 1 ), 72 ), 1, self ); - if ( isDefined( trace1[ "fraction" ] ) && trace1[ "fraction" ] == 1 && isDefined( trace2[ "fraction" ] ) && trace2[ "fraction" ] == 1 ) - { - return 1; - } - if ( isDefined( trace1[ "entity" ] ) && trace1[ "entity" ] == self.enemy && isDefined( trace2[ "entity" ] ) && trace2[ "entity" ] == self.enemy ) - { - return 1; - } - if ( isDefined( level.zombie_melee_in_water ) && level.zombie_melee_in_water ) - { - if ( isDefined( trace1[ "surfacetype" ] ) && trace1[ "surfacetype" ] == "water" && isDefined( trace2[ "fraction" ] ) && trace2[ "fraction" ] == 1 ) - { - return 1; - } - } - return 0; -} - -set_zombie_melee_anim_state( zombie ) -{ - if ( isDefined( level.melee_anim_state ) ) - { - melee_anim_state = self [[ level.melee_anim_state ]](); - } - if ( !isDefined( melee_anim_state ) ) - { - if ( !zombie.has_legs && zombie.a.gib_ref == "no_legs" ) - { - melee_anim_state = "zm_stumpy_melee"; - break; - } - else - { - switch( zombie.zombie_move_speed ) - { - case "walk": - melee_anim_state = append_missing_legs_suffix( "zm_walk_melee" ); - break; - case "run": - case "sprint": - default: - melee_anim_state = append_missing_legs_suffix( "zm_run_melee" ); - break; - } - } -} -zombie setanimstatefromasd( melee_anim_state ); -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_move.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_move.gsc deleted file mode 100644 index 566ac5e..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_move.gsc +++ /dev/null @@ -1,286 +0,0 @@ -#include maps/mp/animscripts/zm_shared; -#include maps/mp/animscripts/zm_run; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/animscripts/utility; -#include maps/mp/animscripts/shared; -#include common_scripts/utility; - -main() -{ - self endon( "killanimscript" ); - self setaimanimweights( 0, 0 ); - previousscript = self.a.script; - maps/mp/animscripts/zm_utility::initialize( "zombie_move" ); - movemainloop(); -} - -movemainloop() -{ - self endon( "killanimscript" ); - self endon( "stop_soon" ); - self.needs_run_update = 1; - self notify( "needs_run_update" ); - self sidestepinit(); - self thread trysidestepthread(); - for ( ;; ) - { - self maps/mp/animscripts/zm_run::moverun(); - if ( isDefined( self.zombie_can_sidestep ) && self.zombie_can_sidestep ) - { - self trysidestep(); - } - } -} - -sidestepinit() -{ - self.a.steppeddir = 0; - self.a.lastsidesteptime = getTime(); -} - -trysidestepthread() -{ - self endon( "death" ); - self notify( "new_trySideStepThread" ); - self endon( "new_trySideStepThread" ); - if ( !isDefined( self.zombie_can_sidestep ) ) - { - return 0; - } - if ( isDefined( self.zombie_can_sidestep ) && !self.zombie_can_sidestep ) - { - return 0; - } - while ( 1 ) - { - self trysidestep(); - wait 0,05; - } -} - -trysidestep() -{ - if ( isDefined( self.shouldsidestepfunc ) ) - { - self.sidesteptype = self [[ self.shouldsidestepfunc ]](); - } - else - { - self.sidesteptype = shouldsidestep(); - } - if ( self.sidesteptype == "none" ) - { - if ( isDefined( self.zombie_can_forwardstep ) && self.zombie_can_forwardstep ) - { - self.sidesteptype = shouldforwardstep(); - } - } - if ( self.sidesteptype == "none" ) - { - return 0; - } - self.desiredstepdir = getdesiredsidestepdir( self.sidesteptype ); - self.asd_name = "zm_" + self.sidesteptype + "_" + self.desiredstepdir; - self.substate_index = self getanimsubstatefromasd( self.asd_name ); - self.stepanim = self getanimfromasd( self.asd_name, self.substate_index ); - if ( !self checkroomforanim( self.stepanim ) ) - { - return 0; - } - self.allowpain = 0; - self animcustom( ::dosidestep ); - self waittill( "sidestep_done" ); - self.allowpain = 1; -} - -getdesiredsidestepdir( sidesteptype ) -{ - if ( sidesteptype == "roll" || sidesteptype == "phase" ) - { - self.desiredstepdir = "forward"; - return self.desiredstepdir; - } -/# - assert( sidesteptype == "step", "Unsupported SideStepType" ); -#/ - randomroll = randomfloat( 1 ); - if ( self.a.steppeddir < 0 ) - { - self.desiredstepdir = "right"; - } - else if ( self.a.steppeddir > 0 ) - { - self.desiredstepdir = "left"; - } - else if ( randomroll < 0,5 ) - { - self.desiredstepdir = "right"; - } - else - { - self.desiredstepdir = "left"; - } - return self.desiredstepdir; -} - -checkroomforanim( stepanim ) -{ - if ( !self maymovefrompointtopoint( self.origin, getanimendpos( stepanim ) ) ) - { - return 0; - } - return 1; -} - -shouldsidestep() -{ - if ( cansidestep() && isplayer( self.enemy ) && self.enemy islookingat( self ) ) - { - if ( self.zombie_move_speed != "sprint" || randomfloat( 1 ) < 0,7 ) - { - return "step"; - } - else - { - return "roll"; - } - } - return "none"; -} - -cansidestep() -{ - if ( !isDefined( self.zombie_can_sidestep ) || !self.zombie_can_sidestep ) - { - return 0; - } - if ( ( getTime() - self.a.lastsidesteptime ) < 2000 ) - { - return 0; - } - if ( !isDefined( self.enemy ) ) - { - return 0; - } - if ( self.a.pose != "stand" ) - { - return 0; - } - distsqfromenemy = distancesquared( self.origin, self.enemy.origin ); - if ( distsqfromenemy < 4096 ) - { - return 0; - } - if ( distsqfromenemy > 1000000 ) - { - return 0; - } - if ( !isDefined( self.pathgoalpos ) || distancesquared( self.origin, self.pathgoalpos ) < 4096 ) - { - return 0; - } - if ( abs( self getmotionangle() ) > 15 ) - { - return 0; - } - yaw = getyawtoorigin( self.enemy.origin ); - if ( abs( yaw ) > 45 ) - { - return 0; - } - return 1; -} - -shouldforwardstep() -{ - if ( canforwardstep() && isplayer( self.enemy ) ) - { - return "phase"; - } - return "none"; -} - -canforwardstep() -{ - if ( isDefined( self.a.lastsidesteptime ) && ( getTime() - self.a.lastsidesteptime ) < 2000 ) - { - return 0; - } - if ( !isDefined( self.enemy ) ) - { - return 0; - } - if ( self.a.pose != "stand" ) - { - return 0; - } - distsqfromenemy = distancesquared( self.origin, self.enemy.origin ); - if ( distsqfromenemy < 14400 ) - { - return 0; - } - if ( distsqfromenemy > 5760000 ) - { - return 0; - } - if ( !isDefined( self.pathgoalpos ) || distancesquared( self.origin, self.pathgoalpos ) < 4096 ) - { - return 0; - } - if ( abs( self getmotionangle() ) > 15 ) - { - return 0; - } - yaw = getyawtoorigin( self.enemy.origin ); - if ( abs( yaw ) > 45 ) - { - return 0; - } - return 1; -} - -dosidestep() -{ - self endon( "death" ); - self endon( "killanimscript" ); - self playsidestepanim( self.stepanim, self.sidesteptype ); - if ( self.desiredstepdir == "left" ) - { - self.a.steppeddir--; - - } - else - { - self.a.steppeddir++; - } - self.a.lastsidesteptime = getTime(); - self notify( "sidestep_done" ); -} - -playsidestepanim( stepanim, sidesteptype ) -{ - self animmode( "gravity", 0 ); - self orientmode( "face angle", self.angles[ 1 ] ); - runblendouttime = 0,2; - if ( isDefined( self.sidestepfunc ) ) - { - self thread [[ self.sidestepfunc ]]( "step_anim", stepanim ); - } - self setanimstatefromasd( self.asd_name, self.substate_index ); - maps/mp/animscripts/zm_shared::donotetracks( "step_anim" ); - if ( isalive( self ) ) - { - self thread facelookaheadforabit(); - } -} - -facelookaheadforabit() -{ - self endon( "death" ); - self endon( "killanimscript" ); - lookaheadangles = vectorToAngle( self.lookaheaddir ); - self orientmode( "face angle", lookaheadangles[ 1 ] ); - wait 0,2; - self animmode( "normal", 0 ); - self orientmode( "face default" ); -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_pain.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_pain.gsc deleted file mode 100644 index 1de8330..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_pain.gsc +++ /dev/null @@ -1,18 +0,0 @@ -#include maps/mp/animscripts/zm_utility; -#include maps/mp/animscripts/utility; -#include maps/mp/animscripts/shared; -#include common_scripts/utility; - -main() -{ - self setflashbanged( 0 ); - if ( isDefined( self.longdeathstarting ) ) - { - self waittill( "killanimscript" ); - return; - } - if ( self.a.disablepain ) - { - return; - } -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_run.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_run.gsc deleted file mode 100644 index f658594..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_run.gsc +++ /dev/null @@ -1,61 +0,0 @@ -#include maps/mp/animscripts/zm_shared; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/animscripts/utility; -#include maps/mp/animscripts/shared; - -moverun() -{ - self endon( "death" ); - if ( isDefined( self.needs_run_update ) && !self.needs_run_update ) - { - self waittill( "needs_run_update" ); - } - if ( isDefined( self.is_inert ) && self.is_inert ) - { - wait 0,1; - return; - } - self setaimanimweights( 0, 0 ); - self setanimstatefromspeed(); - maps/mp/animscripts/zm_shared::donotetracksfortime( 0,05, "move_anim" ); - self.needs_run_update = 0; -} - -setanimstatefromspeed() -{ - animstate = self append_missing_legs_suffix( "zm_move_" + self.zombie_move_speed ); - if ( isDefined( self.a.gib_ref ) && self.a.gib_ref == "no_legs" ) - { - animstate = "zm_move_stumpy"; - } - if ( isDefined( self.preserve_asd_substates ) && self.preserve_asd_substates && animstate == self getanimstatefromasd() ) - { - substate = self getanimsubstatefromasd(); - self setanimstatefromasd( animstate, substate ); - } - else - { - self setanimstatefromasd( animstate ); - } - if ( isDefined( self.setanimstatefromspeed ) ) - { - self [[ self.setanimstatefromspeed ]]( animstate, substate ); - } -} - -needsupdate() -{ - self.needs_run_update = 1; - self notify( "needs_run_update" ); -} - -needsdelayedupdate() -{ - self endon( "death" ); - while ( isDefined( self.needs_run_update ) && self.needs_run_update ) - { - wait 0,1; - } - self.needs_run_update = 1; - self notify( "needs_run_update" ); -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_scripted.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_scripted.gsc deleted file mode 100644 index 8d60fe6..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_scripted.gsc +++ /dev/null @@ -1,39 +0,0 @@ - -main() -{ - self endon( "death" ); - self notify( "killanimscript" ); - self endon( "end_sequence" ); - if ( !isDefined( self.codescripted[ "animState" ] ) ) - { - return; - } - self startscriptedanim( self.codescripted[ "origin" ], self.codescripted[ "angles" ], self.codescripted[ "animState" ], self.codescripted[ "animSubState" ], self.codescripted[ "AnimMode" ] ); - self.a.script = "scripted"; - self.codescripted = undefined; - if ( isDefined( self.deathstring_passed ) ) - { - self.deathstring = self.deathstring_passed; - } - self waittill( "killanimscript" ); -} - -init( origin, angles, animstate, animsubstate, animmode ) -{ - self.codescripted[ "origin" ] = origin; - self.codescripted[ "angles" ] = angles; - self.codescripted[ "animState" ] = animstate; - self.codescripted[ "animSubState" ] = animsubstate; - if ( isDefined( animmode ) ) - { - self.codescripted[ "AnimMode" ] = animmode; - } - else - { - self.codescripted[ "AnimMode" ] = "normal"; - } -} - -end_script() -{ -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_shared.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_shared.gsc deleted file mode 100644 index 0ab059c..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_shared.gsc +++ /dev/null @@ -1,509 +0,0 @@ -#include maps/mp/animscripts/zm_utility; -#include maps/mp/animscripts/utility; -#include maps/mp/animscripts/shared; - -deleteatlimit() -{ - wait 30; - self delete(); -} - -lookatentity( looktargetentity, lookduration, lookspeed, eyesonly, interruptothers ) -{ - return; -} - -lookatposition( looktargetpos, lookduration, lookspeed, eyesonly, interruptothers ) -{ -/# - assert( isai( self ), "Can only call this function on an AI character" ); -#/ -/# - assert( self.a.targetlookinitilized == 1, "LookAtPosition called on AI that lookThread was not called on" ); -#/ -/# - if ( lookspeed != "casual" ) - { - assert( lookspeed == "alert", "lookSpeed must be casual or alert" ); - } -#/ - if ( isDefined( interruptothers ) || interruptothers == "interrupt others" && getTime() > self.a.lookendtime ) - { - self.a.looktargetpos = looktargetpos; - self.a.lookendtime = getTime() + ( lookduration * 1000 ); - if ( lookspeed == "casual" ) - { - self.a.looktargetspeed = 800; - } - else - { - self.a.looktargetspeed = 1600; - } - if ( isDefined( eyesonly ) && eyesonly == "eyes only" ) - { - self notify( "eyes look now" ); - return; - } - else - { - self notify( "look now" ); - } - } -} - -lookatanimations( leftanim, rightanim ) -{ - self.a.lookanimationleft = leftanim; - self.a.lookanimationright = rightanim; -} - -handledogsoundnotetracks( note ) -{ - if ( note != "sound_dogstep_run_default" || note == "dogstep_rf" && note == "dogstep_lf" ) - { - self playsound( "fly_dog_step_run_default" ); - return 1; - } - prefix = getsubstr( note, 0, 5 ); - if ( prefix != "sound" ) - { - return 0; - } - alias = "aml" + getsubstr( note, 5 ); - if ( isalive( self ) ) - { - self thread play_sound_on_tag_endon_death( alias, "tag_eye" ); - } - else - { - self thread play_sound_in_space( alias, self gettagorigin( "tag_eye" ) ); - } - return 1; -} - -growling() -{ - return isDefined( self.script_growl ); -} - -registernotetracks() -{ - anim.notetracks[ "anim_pose = "stand"" ] = ::notetrackposestand; - anim.notetracks[ "anim_pose = "crouch"" ] = ::notetrackposecrouch; - anim.notetracks[ "anim_movement = "stop"" ] = ::notetrackmovementstop; - anim.notetracks[ "anim_movement = "walk"" ] = ::notetrackmovementwalk; - anim.notetracks[ "anim_movement = "run"" ] = ::notetrackmovementrun; - anim.notetracks[ "anim_alertness = causal" ] = ::notetrackalertnesscasual; - anim.notetracks[ "anim_alertness = alert" ] = ::notetrackalertnessalert; - anim.notetracks[ "gravity on" ] = ::notetrackgravity; - anim.notetracks[ "gravity off" ] = ::notetrackgravity; - anim.notetracks[ "gravity code" ] = ::notetrackgravity; - anim.notetracks[ "bodyfall large" ] = ::notetrackbodyfall; - anim.notetracks[ "bodyfall small" ] = ::notetrackbodyfall; - anim.notetracks[ "footstep" ] = ::notetrackfootstep; - anim.notetracks[ "step" ] = ::notetrackfootstep; - anim.notetracks[ "footstep_right_large" ] = ::notetrackfootstep; - anim.notetracks[ "footstep_right_small" ] = ::notetrackfootstep; - anim.notetracks[ "footstep_left_large" ] = ::notetrackfootstep; - anim.notetracks[ "footstep_left_small" ] = ::notetrackfootstep; - anim.notetracks[ "footscrape" ] = ::notetrackfootscrape; - anim.notetracks[ "land" ] = ::notetrackland; - anim.notetracks[ "start_ragdoll" ] = ::notetrackstartragdoll; -} - -notetrackstopanim( note, flagname ) -{ -} - -notetrackstartragdoll( note, flagname ) -{ - if ( isDefined( self.noragdoll ) ) - { - return; - } - self unlink(); - self startragdoll(); -} - -notetrackmovementstop( note, flagname ) -{ - if ( issentient( self ) ) - { - self.a.movement = "stop"; - } -} - -notetrackmovementwalk( note, flagname ) -{ - if ( issentient( self ) ) - { - self.a.movement = "walk"; - } -} - -notetrackmovementrun( note, flagname ) -{ - if ( issentient( self ) ) - { - self.a.movement = "run"; - } -} - -notetrackalertnesscasual( note, flagname ) -{ - if ( issentient( self ) ) - { - self.a.alertness = "casual"; - } -} - -notetrackalertnessalert( note, flagname ) -{ - if ( issentient( self ) ) - { - self.a.alertness = "alert"; - } -} - -notetrackposestand( note, flagname ) -{ - self.a.pose = "stand"; - self notify( "entered_pose" + "stand" ); -} - -notetrackposecrouch( note, flagname ) -{ - self.a.pose = "crouch"; - self notify( "entered_pose" + "crouch" ); - if ( self.a.crouchpain ) - { - self.a.crouchpain = 0; - self.health = 150; - } -} - -notetrackgravity( note, flagname ) -{ - if ( issubstr( note, "on" ) ) - { - self animmode( "gravity" ); - } - else if ( issubstr( note, "off" ) ) - { - self animmode( "nogravity" ); - self.nogravity = 1; - } - else - { - if ( issubstr( note, "code" ) ) - { - self animmode( "none" ); - self.nogravity = undefined; - } - } -} - -notetrackbodyfall( note, flagname ) -{ - if ( isDefined( self.groundtype ) ) - { - groundtype = self.groundtype; - } - else - { - groundtype = "dirt"; - } - if ( issubstr( note, "large" ) ) - { - self playsound( "fly_bodyfall_large_" + groundtype ); - } - else - { - if ( issubstr( note, "small" ) ) - { - self playsound( "fly_bodyfall_small_" + groundtype ); - } - } -} - -notetrackfootstep( note, flagname ) -{ - if ( issubstr( note, "left" ) ) - { - playfootstep( "J_Ball_LE" ); - } - else - { - playfootstep( "J_BALL_RI" ); - } - if ( !level.clientscripts ) - { - self playsound( "fly_gear_run" ); - } -} - -notetrackfootscrape( note, flagname ) -{ - if ( isDefined( self.groundtype ) ) - { - groundtype = self.groundtype; - } - else - { - groundtype = "dirt"; - } - self playsound( "fly_step_scrape_" + groundtype ); -} - -notetrackland( note, flagname ) -{ - if ( isDefined( self.groundtype ) ) - { - groundtype = self.groundtype; - } - else - { - groundtype = "dirt"; - } - self playsound( "fly_land_npc_" + groundtype ); -} - -handlenotetrack( note, flagname, customfunction, var1 ) -{ - if ( isai( self ) && self.isdog ) - { - if ( handledogsoundnotetracks( note ) ) - { - return; - } - } - else - { - notetrackfunc = anim.notetracks[ note ]; - if ( isDefined( notetrackfunc ) ) - { - return [[ notetrackfunc ]]( note, flagname ); - } - } - switch( note ) - { - case "end": - case "finish": - case "undefined": - if ( isai( self ) && self.a.pose == "back" ) - { - } - return note; - case "swish small": - self thread play_sound_in_space( "fly_gear_enemy", self gettagorigin( "TAG_WEAPON_RIGHT" ) ); - break; - case "swish large": - self thread play_sound_in_space( "fly_gear_enemy_large", self gettagorigin( "TAG_WEAPON_RIGHT" ) ); - break; - case "no death": - self.a.nodeath = 1; - break; - case "no pain": - self.allowpain = 0; - break; - case "allow pain": - self.allowpain = 1; - break; - case "anim_melee = "right"": - case "anim_melee = right": - self.a.meleestate = "right"; - break; - case "anim_melee = "left"": - case "anim_melee = left": - self.a.meleestate = "left"; - break; - case "swap taghelmet to tagleft": - if ( isDefined( self.hatmodel ) ) - { - if ( isDefined( self.helmetsidemodel ) ) - { - self detach( self.helmetsidemodel, "TAG_HELMETSIDE" ); - self.helmetsidemodel = undefined; - } - self detach( self.hatmodel, "" ); - self attach( self.hatmodel, "TAG_WEAPON_LEFT" ); - self.hatmodel = undefined; - } - break; - default: - if ( isDefined( customfunction ) ) - { - if ( !isDefined( var1 ) ) - { - return [[ customfunction ]]( note ); - } - else - { - return [[ customfunction ]]( note, var1 ); - } - } - } - } -} - -donotetracks( flagname, customfunction, var1 ) -{ - for ( ;; ) - { - self waittill( flagname, note ); - if ( !isDefined( note ) ) - { - note = "undefined"; - } - val = self handlenotetrack( note, flagname, customfunction, var1 ); - if ( isDefined( val ) ) - { - return val; - } - } -} - -donotetracksforeverproc( notetracksfunc, flagname, killstring, customfunction, var1 ) -{ - if ( isDefined( killstring ) ) - { - self endon( killstring ); - } - self endon( "killanimscript" ); - for ( ;; ) - { - time = getTime(); - returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 ); - timetaken = getTime() - time; - if ( timetaken < 0,05 ) - { - time = getTime(); - returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 ); - timetaken = getTime() - time; - if ( timetaken < 0,05 ) - { -/# - println( getTime() + " mapsmpanimscriptsshared::DoNoteTracksForever is trying to cause an infinite loop on anim " + flagname + ", returned " + returnednote + "." ); -#/ - wait ( 0,05 - timetaken ); - } - } - } -} - -donotetracksforever( flagname, killstring, customfunction, var1 ) -{ - donotetracksforeverproc( ::donotetracks, flagname, killstring, customfunction, var1 ); -} - -donotetracksfortimeproc( donotetracksforeverfunc, time, flagname, customfunction, ent, var1 ) -{ - ent endon( "stop_notetracks" ); - [[ donotetracksforeverfunc ]]( flagname, undefined, customfunction, var1 ); -} - -donotetracksfortime( time, flagname, customfunction, var1 ) -{ - ent = spawnstruct(); - ent thread donotetracksfortimeendnotify( time ); - donotetracksfortimeproc( ::donotetracksforever, time, flagname, customfunction, ent, var1 ); -} - -donotetracksfortimeendnotify( time ) -{ - wait time; - self notify( "stop_notetracks" ); -} - -playfootstep( foot ) -{ - if ( !level.clientscripts ) - { - if ( !isai( self ) ) - { - self playsound( "fly_step_run_dirt" ); - return; - } - } - groundtype = undefined; - if ( !isDefined( self.groundtype ) ) - { - if ( !isDefined( self.lastgroundtype ) ) - { - if ( !level.clientscripts ) - { - self playsound( "fly_step_run_dirt" ); - } - return; - } - groundtype = self.lastgroundtype; - } - else - { - groundtype = self.groundtype; - self.lastgroundtype = self.groundtype; - } - if ( !level.clientscripts ) - { - self playsound( "fly_step_run_" + groundtype ); - } - [[ anim.optionalstepeffectfunction ]]( foot, groundtype ); -} - -playfootstepeffect( foot, groundtype ) -{ - if ( level.clientscripts ) - { - return; - } - i = 0; - while ( i < anim.optionalstepeffects.size ) - { - if ( isDefined( self.fire_footsteps ) && self.fire_footsteps ) - { - groundtype = "fire"; - } - if ( groundtype != anim.optionalstepeffects[ i ] ) - { - i++; - continue; - } - else - { - org = self gettagorigin( foot ); - playfx( level._effect[ "step_" + anim.optionalstepeffects[ i ] ], org, org + vectorScale( ( 0, 0, 1 ), 100 ) ); - return; - } - i++; - } -} - -movetooriginovertime( origin, time ) -{ - self endon( "killanimscript" ); - if ( distancesquared( self.origin, origin ) > 256 && !self maymovetopoint( origin ) ) - { -/# - println( "^1Warning: AI starting behavior for node at " + origin + " but could not move to that point." ); -#/ - return; - } - self.keepclaimednodeingoal = 1; - offset = self.origin - origin; - frames = int( time * 20 ); - offsetreduction = vectorScale( offset, 1 / frames ); - i = 0; - while ( i < frames ) - { - offset -= offsetreduction; - self teleport( origin + offset ); - wait 0,05; - i++; - } - self.keepclaimednodeingoal = 0; -} - -returntrue() -{ - return 1; -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_stop.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_stop.gsc deleted file mode 100644 index b1c5f11..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_stop.gsc +++ /dev/null @@ -1,26 +0,0 @@ -#include maps/mp/animscripts/zm_shared; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/animscripts/utility; -#include maps/mp/animscripts/shared; - -main() -{ - self endon( "killanimscript" ); - for ( ;; ) - { - if ( isDefined( level.ignore_stop_func ) ) - { - if ( self [[ level.ignore_stop_func ]]() ) - { - return; - } - } - if ( !self hasanimstatefromasd( "zm_idle" ) ) - { - return; - } - animstate = maps/mp/animscripts/zm_utility::append_missing_legs_suffix( "zm_idle" ); - self setanimstatefromasd( animstate ); - maps/mp/animscripts/zm_shared::donotetracks( "idle_anim" ); - } -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_turn.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_turn.gsc deleted file mode 100644 index bdf6899..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_turn.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/animscripts/shared; -#include maps/mp/animscripts/utility; - -main() -{ -} diff --git a/Zombie Core/patch_zm/maps/mp/animscripts/zm_utility.gsc b/Zombie Core/patch_zm/maps/mp/animscripts/zm_utility.gsc deleted file mode 100644 index b357ed8..0000000 --- a/Zombie Core/patch_zm/maps/mp/animscripts/zm_utility.gsc +++ /dev/null @@ -1,1243 +0,0 @@ -#include maps/mp/_utility; -#include maps/mp/animscripts/zm_shared; -#include maps/mp/animscripts/utility; -#include maps/mp/animscripts/shared; - -append_missing_legs_suffix( animstate ) -{ - if ( isDefined( self.has_legs ) && !self.has_legs && self hasanimstatefromasd( animstate + "_crawl" ) ) - { - return animstate + "_crawl"; - } - return animstate; -} - -initanimtree( animscript ) -{ - if ( animscript != "pain" && animscript != "death" ) - { - self.a.special = "none"; - } -/# - assert( isDefined( animscript ), "Animscript not specified in initAnimTree" ); -#/ - self.a.script = animscript; -} - -updateanimpose() -{ -/# - if ( self.a.movement != "stop" && self.a.movement != "walk" ) - { - assert( self.a.movement == "run", "UpdateAnimPose " + self.a.pose + " " + self.a.movement ); - } -#/ - self.desired_anim_pose = undefined; -} - -initialize( animscript ) -{ - if ( isDefined( self.longdeathstarting ) ) - { - if ( animscript != "pain" && animscript != "death" ) - { - self dodamage( self.health + 100, self.origin ); - } - if ( animscript != "pain" ) - { - self.longdeathstarting = undefined; - self notify( "kill_long_death" ); - } - } - if ( isDefined( self.a.mayonlydie ) && animscript != "death" ) - { - self dodamage( self.health + 100, self.origin ); - } - if ( isDefined( self.a.postscriptfunc ) ) - { - scriptfunc = self.a.postscriptfunc; - self.a.postscriptfunc = undefined; - [[ scriptfunc ]]( animscript ); - } - if ( animscript != "death" ) - { - self.a.nodeath = 0; - } - self.isholdinggrenade = undefined; - self.covernode = undefined; - self.changingcoverpos = 0; - self.a.scriptstarttime = getTime(); - self.a.atconcealmentnode = 0; - if ( isDefined( self.node ) || self.node.type == "Conceal Crouch" && self.node.type == "Conceal Stand" ) - { - self.a.atconcealmentnode = 1; - } - initanimtree( animscript ); - updateanimpose(); -} - -getnodeyawtoorigin( pos ) -{ - if ( isDefined( self.node ) ) - { - yaw = self.node.angles[ 1 ] - getyaw( pos ); - } - else - { - yaw = self.angles[ 1 ] - getyaw( pos ); - } - yaw = angleClamp180( yaw ); - return yaw; -} - -getnodeyawtoenemy() -{ - pos = undefined; - if ( isvalidenemy( self.enemy ) ) - { - pos = self.enemy.origin; - } - else - { - if ( isDefined( self.node ) ) - { - forward = anglesToForward( self.node.angles ); - } - else - { - forward = anglesToForward( self.angles ); - } - forward = vectorScale( forward, 150 ); - pos = self.origin + forward; - } - if ( isDefined( self.node ) ) - { - yaw = self.node.angles[ 1 ] - getyaw( pos ); - } - else - { - yaw = self.angles[ 1 ] - getyaw( pos ); - } - yaw = angleClamp180( yaw ); - return yaw; -} - -getcovernodeyawtoenemy() -{ - pos = undefined; - if ( isvalidenemy( self.enemy ) ) - { - pos = self.enemy.origin; - } - else - { - forward = anglesToForward( self.covernode.angles + self.animarray[ "angle_step_out" ][ self.a.cornermode ] ); - forward = vectorScale( forward, 150 ); - pos = self.origin + forward; - } - yaw = ( self.covernode.angles[ 1 ] + self.animarray[ "angle_step_out" ][ self.a.cornermode ] ) - getyaw( pos ); - yaw = angleClamp180( yaw ); - return yaw; -} - -getyawtospot( spot ) -{ - pos = spot; - yaw = self.angles[ 1 ] - getyaw( pos ); - yaw = angleClamp180( yaw ); - return yaw; -} - -getyawtoenemy() -{ - pos = undefined; - if ( isvalidenemy( self.enemy ) ) - { - pos = self.enemy.origin; - } - else - { - forward = anglesToForward( self.angles ); - forward = vectorScale( forward, 150 ); - pos = self.origin + forward; - } - yaw = self.angles[ 1 ] - getyaw( pos ); - yaw = angleClamp180( yaw ); - return yaw; -} - -getyaw( org ) -{ - angles = vectorToAngle( org - self.origin ); - return angles[ 1 ]; -} - -getyaw2d( org ) -{ - angles = vectorToAngle( ( org[ 0 ], org[ 1 ], 0 ) - ( self.origin[ 0 ], self.origin[ 1 ], 0 ) ); - return angles[ 1 ]; -} - -absyawtoenemy() -{ -/# - assert( isvalidenemy( self.enemy ) ); -#/ - yaw = self.angles[ 1 ] - getyaw( self.enemy.origin ); - yaw = angleClamp180( yaw ); - if ( yaw < 0 ) - { - yaw = -1 * yaw; - } - return yaw; -} - -absyawtoenemy2d() -{ -/# - assert( isvalidenemy( self.enemy ) ); -#/ - yaw = self.angles[ 1 ] - getyaw2d( self.enemy.origin ); - yaw = angleClamp180( yaw ); - if ( yaw < 0 ) - { - yaw = -1 * yaw; - } - return yaw; -} - -absyawtoorigin( org ) -{ - yaw = self.angles[ 1 ] - getyaw( org ); - yaw = angleClamp180( yaw ); - if ( yaw < 0 ) - { - yaw = -1 * yaw; - } - return yaw; -} - -absyawtoangles( angles ) -{ - yaw = self.angles[ 1 ] - angles; - yaw = angleClamp180( yaw ); - if ( yaw < 0 ) - { - yaw = -1 * yaw; - } - return yaw; -} - -getyawfromorigin( org, start ) -{ - angles = vectorToAngle( org - start ); - return angles[ 1 ]; -} - -getyawtotag( tag, org ) -{ - yaw = self gettagangles( tag )[ 1 ] - getyawfromorigin( org, self gettagorigin( tag ) ); - yaw = angleClamp180( yaw ); - return yaw; -} - -getyawtoorigin( org ) -{ - yaw = self.angles[ 1 ] - getyaw( org ); - yaw = angleClamp180( yaw ); - return yaw; -} - -geteyeyawtoorigin( org ) -{ - yaw = self gettagangles( "TAG_EYE" )[ 1 ] - getyaw( org ); - yaw = angleClamp180( yaw ); - return yaw; -} - -getcovernodeyawtoorigin( org ) -{ - yaw = ( self.covernode.angles[ 1 ] + self.animarray[ "angle_step_out" ][ self.a.cornermode ] ) - getyaw( org ); - yaw = angleClamp180( yaw ); - return yaw; -} - -isstanceallowedwrapper( stance ) -{ - if ( isDefined( self.covernode ) ) - { - return self.covernode doesnodeallowstance( stance ); - } - return self isstanceallowed( stance ); -} - -getclaimednode() -{ - mynode = self.node; - if ( isDefined( mynode ) || self nearnode( mynode ) && isDefined( self.covernode ) && mynode == self.covernode ) - { - return mynode; - } - return undefined; -} - -getnodetype() -{ - mynode = getclaimednode(); - if ( isDefined( mynode ) ) - { - return mynode.type; - } - return "none"; -} - -getnodedirection() -{ - mynode = getclaimednode(); - if ( isDefined( mynode ) ) - { - return mynode.angles[ 1 ]; - } - return self.desiredangle; -} - -getnodeforward() -{ - mynode = getclaimednode(); - if ( isDefined( mynode ) ) - { - return anglesToForward( mynode.angles ); - } - return anglesToForward( self.angles ); -} - -getnodeorigin() -{ - mynode = getclaimednode(); - if ( isDefined( mynode ) ) - { - return mynode.origin; - } - return self.origin; -} - -safemod( a, b ) -{ - result = int( a ) % b; - result += b; - return result % b; -} - -angleclamp( angle ) -{ - anglefrac = angle / 360; - angle = ( anglefrac - floor( anglefrac ) ) * 360; - return angle; -} - -quadrantanimweights( yaw ) -{ - forwardweight = ( 90 - abs( yaw ) ) / 90; - leftweight = ( 90 - absangleclamp180( abs( yaw - 90 ) ) ) / 90; - result[ "front" ] = 0; - result[ "right" ] = 0; - result[ "back" ] = 0; - result[ "left" ] = 0; - if ( isDefined( self.alwaysrunforward ) ) - { -/# - assert( self.alwaysrunforward ); -#/ - result[ "front" ] = 1; - return result; - } - useleans = getDvarInt( "ai_useLeanRunAnimations" ); - if ( forwardweight > 0 ) - { - result[ "front" ] = forwardweight; - if ( leftweight > 0 ) - { - result[ "left" ] = leftweight; - } - else - { - result[ "right" ] = -1 * leftweight; - } - } - else if ( useleans ) - { - result[ "back" ] = -1 * forwardweight; - if ( leftweight > 0 ) - { - result[ "left" ] = leftweight; - } - else - { - result[ "right" ] = -1 * leftweight; - } - } - else backweight = -1 * forwardweight; - if ( leftweight > backweight ) - { - result[ "left" ] = 1; - } - else if ( leftweight < forwardweight ) - { - result[ "right" ] = 1; - } - else - { - result[ "back" ] = 1; - } - return result; -} - -getquadrant( angle ) -{ - angle = angleclamp( angle ); - if ( angle < 45 || angle > 315 ) - { - quadrant = "front"; - } - else - { - if ( angle < 135 ) - { - quadrant = "left"; - } - else if ( angle < 225 ) - { - quadrant = "back"; - } - else - { - quadrant = "right"; - } - } - return quadrant; -} - -isinset( input, set ) -{ - i = set.size - 1; - while ( i >= 0 ) - { - if ( input == set[ i ] ) - { - return 1; - } - i--; - - } - return 0; -} - -notifyaftertime( notifystring, killmestring, time ) -{ - self endon( "death" ); - self endon( killmestring ); - wait time; - self notify( notifystring ); -} - -drawstringtime( msg, org, color, timer ) -{ -/# - maxtime = timer * 20; - i = 0; - while ( i < maxtime ) - { - print3d( org, msg, color, 1, 1 ); - wait 0,05; - i++; -#/ - } -} - -showlastenemysightpos( string ) -{ -/# - self notify( "got known enemy2" ); - self endon( "got known enemy2" ); - self endon( "death" ); - if ( !isvalidenemy( self.enemy ) ) - { - return; - } - if ( self.enemy.team == "allies" ) - { - color = ( 0,4, 0,7, 1 ); - } - else - { - color = ( 1, 0,7, 0,4 ); - } - while ( 1 ) - { - wait 0,05; - while ( !isDefined( self.lastenemysightpos ) ) - { - continue; - } - print3d( self.lastenemysightpos, string, color, 1, 2,15 ); -#/ - } -} - -debugtimeout() -{ - wait 5; - self notify( "timeout" ); -} - -debugposinternal( org, string, size ) -{ -/# - self endon( "death" ); - self notify( "stop debug " + org ); - self endon( "stop debug " + org ); - ent = spawnstruct(); - ent thread debugtimeout(); - ent endon( "timeout" ); - if ( self.enemy.team == "allies" ) - { - color = ( 0,4, 0,7, 1 ); - } - else - { - color = ( 1, 0,7, 0,4 ); - } - while ( 1 ) - { - wait 0,05; - print3d( org, string, color, 1, size ); -#/ - } -} - -debugpos( org, string ) -{ - thread debugposinternal( org, string, 2,15 ); -} - -debugpossize( org, string, size ) -{ - thread debugposinternal( org, string, size ); -} - -showdebugproc( frompoint, topoint, color, printtime ) -{ -/# - self endon( "death" ); - timer = printtime * 20; - i = 0; - while ( i < timer ) - { - wait 0,05; - line( frompoint, topoint, color ); - i += 1; -#/ - } -} - -showdebugline( frompoint, topoint, color, printtime ) -{ - self thread showdebugproc( frompoint, topoint + vectorScale( ( 0, 0, 1 ), 5 ), color, printtime ); -} - -getnodeoffset( node ) -{ - if ( isDefined( node.offset ) ) - { - return node.offset; - } - cover_left_crouch_offset = ( -26, 0,4, 36 ); - cover_left_stand_offset = ( -32, 7, 63 ); - cover_right_crouch_offset = ( 43,5, 11, 36 ); - cover_right_stand_offset = ( 36, 8,3, 63 ); - cover_crouch_offset = ( 3,5, -12,5, 45 ); - cover_stand_offset = ( -3,7, -22, 63 ); - cornernode = 0; - nodeoffset = ( 0, 0, 1 ); - right = anglesToRight( node.angles ); - forward = anglesToForward( node.angles ); - switch( node.type ) - { - case "Cover Left": - case "Cover Left Wide": - if ( node isnodedontstand() && !node isnodedontcrouch() ) - { - nodeoffset = calculatenodeoffset( right, forward, cover_left_crouch_offset ); - } - else - { - nodeoffset = calculatenodeoffset( right, forward, cover_left_stand_offset ); - } - break; - case "Cover Right": - case "Cover Right Wide": - if ( node isnodedontstand() && !node isnodedontcrouch() ) - { - nodeoffset = calculatenodeoffset( right, forward, cover_right_crouch_offset ); - } - else - { - nodeoffset = calculatenodeoffset( right, forward, cover_right_stand_offset ); - } - break; - case "Conceal Stand": - case "Cover Stand": - case "Turret": - nodeoffset = calculatenodeoffset( right, forward, cover_stand_offset ); - break; - case "Conceal Crouch": - case "Cover Crouch": - case "Cover Crouch Window": - nodeoffset = calculatenodeoffset( right, forward, cover_crouch_offset ); - break; - } - node.offset = nodeoffset; - return node.offset; -} - -calculatenodeoffset( right, forward, baseoffset ) -{ - return vectorScale( right, baseoffset[ 0 ] ) + vectorScale( forward, baseoffset[ 1 ] ) + ( 0, 0, baseoffset[ 2 ] ); -} - -checkpitchvisibility( frompoint, topoint, atnode ) -{ - pitch = angleClamp180( vectorToAngle( topoint - frompoint )[ 0 ] ); - if ( abs( pitch ) > 45 ) - { - if ( isDefined( atnode ) && atnode.type != "Cover Crouch" && atnode.type != "Conceal Crouch" ) - { - return 0; - } - if ( pitch > 45 || pitch < ( anim.covercrouchleanpitch - 45 ) ) - { - return 0; - } - } - return 1; -} - -showlines( start, end, end2 ) -{ -/# - for ( ;; ) - { - line( start, end, ( 0, 0, 1 ), 1 ); - wait 0,05; - line( start, end2, ( 0, 0, 1 ), 1 ); - wait 0,05; -#/ - } -} - -anim_array( animarray, animweights ) -{ - total_anims = animarray.size; - idleanim = randomint( total_anims ); -/# - assert( total_anims ); -#/ -/# - assert( animarray.size == animweights.size ); -#/ - if ( total_anims == 1 ) - { - return animarray[ 0 ]; - } - weights = 0; - total_weight = 0; - i = 0; - while ( i < total_anims ) - { - total_weight += animweights[ i ]; - i++; - } - anim_play = randomfloat( total_weight ); - current_weight = 0; - i = 0; - while ( i < total_anims ) - { - current_weight += animweights[ i ]; - if ( anim_play >= current_weight ) - { - i++; - continue; - } - else - { - idleanim = i; - break; - } - i++; - } - return animarray[ idleanim ]; -} - -notforcedcover() -{ - if ( self.a.forced_cover != "none" ) - { - return self.a.forced_cover == "Show"; - } -} - -forcedcover( msg ) -{ - if ( isDefined( self.a.forced_cover ) ) - { - return self.a.forced_cover == msg; - } -} - -print3dtime( timer, org, msg, color, alpha, scale ) -{ -/# - newtime = timer / 0,05; - i = 0; - while ( i < newtime ) - { - print3d( org, msg, color, alpha, scale ); - wait 0,05; - i++; -#/ - } -} - -print3drise( org, msg, color, alpha, scale ) -{ -/# - newtime = 100; - up = 0; - org = org; - i = 0; - while ( i < newtime ) - { - up += 0,5; - print3d( org + ( 0, 0, up ), msg, color, alpha, scale ); - wait 0,05; - i++; -#/ - } -} - -crossproduct( vec1, vec2 ) -{ - return ( ( vec1[ 0 ] * vec2[ 1 ] ) - ( vec1[ 1 ] * vec2[ 0 ] ) ) > 0; -} - -scriptchange() -{ - self.a.current_script = "none"; - self notify( anim.scriptchange ); -} - -delayedscriptchange() -{ - wait 0,05; - scriptchange(); -} - -getgrenademodel() -{ - return getweaponmodel( self.grenadeweapon ); -} - -sawenemymove( timer ) -{ - if ( !isDefined( timer ) ) - { - timer = 500; - } - return ( getTime() - self.personalsighttime ) < timer; -} - -canthrowgrenade() -{ - if ( !self.grenadeammo ) - { - return 0; - } - if ( self.script_forcegrenade ) - { - return 1; - } - return isplayer( self.enemy ); -} - -random_weight( array ) -{ - idleanim = randomint( array.size ); - while ( array.size > 1 ) - { - anim_weight = 0; - i = 0; - while ( i < array.size ) - { - anim_weight += array[ i ]; - i++; - } - anim_play = randomfloat( anim_weight ); - anim_weight = 0; - i = 0; - while ( i < array.size ) - { - anim_weight += array[ i ]; - if ( anim_play < anim_weight ) - { - idleanim = i; - break; - } - else - { - i++; - } - } - } - return idleanim; -} - -setfootstepeffect( name, fx ) -{ -/# - assert( isDefined( name ), "Need to define the footstep surface type." ); -#/ -/# - assert( isDefined( fx ), "Need to define the mud footstep effect." ); -#/ - if ( !isDefined( anim.optionalstepeffects ) ) - { - anim.optionalstepeffects = []; - } - anim.optionalstepeffects[ anim.optionalstepeffects.size ] = name; - level._effect[ "step_" + name ] = fx; - anim.optionalstepeffectfunction = ::maps/mp/animscripts/zm_shared::playfootstepeffect; -} - -persistentdebugline( start, end ) -{ -/# - self endon( "death" ); - level notify( "newdebugline" ); - level endon( "newdebugline" ); - for ( ;; ) - { - line( start, end, ( 0,3, 1, 0 ), 1 ); - wait 0,05; -#/ - } -} - -isnodedontstand() -{ - return ( self.spawnflags & 4 ) == 4; -} - -isnodedontcrouch() -{ - return ( self.spawnflags & 8 ) == 8; -} - -doesnodeallowstance( stance ) -{ - if ( stance == "stand" ) - { - return !self isnodedontstand(); - } - else - { -/# - assert( stance == "crouch" ); -#/ - return !self isnodedontcrouch(); - } -} - -animarray( animname ) -{ -/# - assert( isDefined( self.a.array ) ); -#/ -/# - if ( !isDefined( self.a.array[ animname ] ) ) - { - dumpanimarray(); - assert( isDefined( self.a.array[ animname ] ), "self.a.array[ "" + animname + "" ] is undefined" ); -#/ - } - return self.a.array[ animname ]; -} - -animarrayanyexist( animname ) -{ -/# - assert( isDefined( self.a.array ) ); -#/ -/# - if ( !isDefined( self.a.array[ animname ] ) ) - { - dumpanimarray(); - assert( isDefined( self.a.array[ animname ] ), "self.a.array[ "" + animname + "" ] is undefined" ); -#/ - } - return self.a.array[ animname ].size > 0; -} - -animarraypickrandom( animname ) -{ -/# - assert( isDefined( self.a.array ) ); -#/ -/# - if ( !isDefined( self.a.array[ animname ] ) ) - { - dumpanimarray(); - assert( isDefined( self.a.array[ animname ] ), "self.a.array[ "" + animname + "" ] is undefined" ); -#/ - } -/# - assert( self.a.array[ animname ].size > 0 ); -#/ - if ( self.a.array[ animname ].size > 1 ) - { - index = randomint( self.a.array[ animname ].size ); - } - else - { - index = 0; - } - return self.a.array[ animname ][ index ]; -} - -dumpanimarray() -{ -/# - println( "self.a.array:" ); - keys = getarraykeys( self.a.array ); - i = 0; - while ( i < keys.size ) - { - if ( isarray( self.a.array[ keys[ i ] ] ) ) - { - println( " array[ "" + keys[ i ] + "" ] = {array of size " + self.a.array[ keys[ i ] ].size + "}" ); - i++; - continue; - } - else - { - println( " array[ "" + keys[ i ] + "" ] = ", self.a.array[ keys[ i ] ] ); - } - i++; -#/ - } -} - -getanimendpos( theanim ) -{ - movedelta = getmovedelta( theanim, 0, 1 ); - return self localtoworldcoords( movedelta ); -} - -isvalidenemy( enemy ) -{ - if ( !isDefined( enemy ) ) - { - return 0; - } - return 1; -} - -damagelocationisany( a, b, c, d, e, f, g, h, i, j, k, ovr ) -{ - if ( !isDefined( a ) ) - { - return 0; - } - if ( self.damagelocation == a ) - { - return 1; - } - if ( !isDefined( b ) ) - { - return 0; - } - if ( self.damagelocation == b ) - { - return 1; - } - if ( !isDefined( c ) ) - { - return 0; - } - if ( self.damagelocation == c ) - { - return 1; - } - if ( !isDefined( d ) ) - { - return 0; - } - if ( self.damagelocation == d ) - { - return 1; - } - if ( !isDefined( e ) ) - { - return 0; - } - if ( self.damagelocation == e ) - { - return 1; - } - if ( !isDefined( f ) ) - { - return 0; - } - if ( self.damagelocation == f ) - { - return 1; - } - if ( !isDefined( g ) ) - { - return 0; - } - if ( self.damagelocation == g ) - { - return 1; - } - if ( !isDefined( h ) ) - { - return 0; - } - if ( self.damagelocation == h ) - { - return 1; - } - if ( !isDefined( i ) ) - { - return 0; - } - if ( self.damagelocation == i ) - { - return 1; - } - if ( !isDefined( j ) ) - { - return 0; - } - if ( self.damagelocation == j ) - { - return 1; - } - if ( !isDefined( k ) ) - { - return 0; - } - if ( self.damagelocation == k ) - { - return 1; - } -/# - assert( !isDefined( ovr ) ); -#/ - return 0; -} - -ragdolldeath( moveanim ) -{ - self endon( "killanimscript" ); - lastorg = self.origin; - movevec = ( 0, 0, 1 ); - for ( ;; ) - { - wait 0,05; - force = distance( self.origin, lastorg ); - lastorg = self.origin; - if ( self.health == 1 ) - { - self.a.nodeath = 1; - self startragdoll(); - wait 0,05; - physicsexplosionsphere( lastorg, 600, 0, force * 0,1 ); - self notify( "killanimscript" ); - return; - } - } -} - -iscqbwalking() -{ - if ( isDefined( self.cqbwalking ) ) - { - return self.cqbwalking; - } -} - -squared( value ) -{ - return value * value; -} - -randomizeidleset() -{ - self.a.idleset = randomint( 2 ); -} - -getrandomintfromseed( intseed, intmax ) -{ -/# - assert( intmax > 0 ); -#/ - index = intseed % anim.randominttablesize; - return anim.randominttable[ index ] % intmax; -} - -is_banzai() -{ - if ( isDefined( self.banzai ) ) - { - return self.banzai; - } -} - -is_heavy_machine_gun() -{ - if ( isDefined( self.heavy_machine_gunner ) ) - { - return self.heavy_machine_gunner; - } -} - -is_zombie() -{ - if ( isDefined( self.is_zombie ) && self.is_zombie ) - { - return 1; - } - return 0; -} - -is_civilian() -{ - if ( isDefined( self.is_civilian ) && self.is_civilian ) - { - return 1; - } - return 0; -} - -is_zombie_gibbed() -{ - if ( self is_zombie() ) - { - return self.gibbed; - } -} - -set_zombie_gibbed() -{ - if ( self is_zombie() ) - { - self.gibbed = 1; - } -} - -is_skeleton( skeleton ) -{ - if ( skeleton == "base" && issubstr( get_skeleton(), "scaled" ) ) - { - return 1; - } - return get_skeleton() == skeleton; -} - -get_skeleton() -{ - if ( isDefined( self.skeleton ) ) - { - return self.skeleton; - } - else - { - return "base"; - } -} - -debug_anim_print( text ) -{ -/# - if ( isDefined( level.dog_debug_anims ) && level.dog_debug_anims ) - { - println( ( text + " " ) + getTime() ); - } - if ( isDefined( level.dog_debug_anims_ent ) && level.dog_debug_anims_ent == self getentnum() ) - { - println( ( text + " " ) + getTime() ); -#/ - } -} - -debug_turn_print( text, line ) -{ -/# - if ( isDefined( level.dog_debug_turns ) && level.dog_debug_turns == self getentnum() ) - { - duration = 200; - currentyawcolor = ( 0, 0, 1 ); - lookaheadyawcolor = ( 0, 0, 1 ); - desiredyawcolor = ( 0, 0, 1 ); - currentyaw = angleClamp180( self.angles[ 1 ] ); - desiredyaw = angleClamp180( self.desiredangle ); - lookaheaddir = self.lookaheaddir; - lookaheadangles = vectorToAngle( lookaheaddir ); - lookaheadyaw = angleClamp180( lookaheadangles[ 1 ] ); - println( ( text + " " ) + getTime() + " cur: " + currentyaw + " look: " + lookaheadyaw + " desired: " + desiredyaw ); -#/ - } -} - -play_sound_on_tag_endon_death( alias, tag ) -{ - maps/mp/_utility::play_sound_on_tag( alias, tag ); -} - -play_sound_in_space( alias, origin, master ) -{ - org = spawn( "script_origin", ( 0, 0, 1 ) ); - if ( !isDefined( origin ) ) - { - origin = self.origin; - } - org.origin = origin; - if ( isDefined( master ) && master ) - { - org playsoundasmaster( alias ); - } - else - { - org playsound( alias ); - } - if ( isDefined( org ) ) - { - org delete(); - } -} - -wait_network_frame() -{ - if ( numremoteclients() ) - { - snapshot_ids = getsnapshotindexarray(); - acked = undefined; - while ( !isDefined( acked ) ) - { - level waittill( "snapacknowledged" ); - acked = snapshotacknowledged( snapshot_ids ); - } - } - else wait 0,1; -} diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_callbacksetup.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_callbacksetup.gsc deleted file mode 100644 index db8064a..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_callbacksetup.gsc +++ /dev/null @@ -1,209 +0,0 @@ -#include maps/mp/gametypes_zm/_hostmigration; -#include maps/mp/gametypes_zm/_globallogic_actor; -#include maps/mp/gametypes_zm/_globallogic_player; -#include maps/mp/gametypes_zm/_globallogic; -#include maps/mp/_audio; -#include maps/mp/_utility; - -codecallback_startgametype() //checked matches cerberus output -{ - if ( !isDefined( level.gametypestarted ) || !level.gametypestarted ) - { - [[ level.callbackstartgametype ]](); - level.gametypestarted = 1; - } -} - -codecallback_finalizeinitialization() //checked matches cerberus output -{ - maps/mp/_utility::callback( "on_finalize_initialization" ); -} - -codecallback_playerconnect() //checked matches cerberus output -{ - self endon( "disconnect" ); - self thread maps/mp/_audio::monitor_player_sprint(); - [[ level.callbackplayerconnect ]](); -} - -codecallback_playerdisconnect() //checked matches cerberus output -{ - self notify( "disconnect" ); - level notify( "disconnect" ); - client_num = self getentitynumber(); - [[ level.callbackplayerdisconnect ]](); -} - -codecallback_hostmigration() //checked matches cerberus output -{ - /* -/# - println( "****CodeCallback_HostMigration****" ); -#/ - */ - [[ level.callbackhostmigration ]](); -} - -codecallback_hostmigrationsave() //checked matches cerberus output -{ - /* -/# - println( "****CodeCallback_HostMigrationSave****" ); -#/ - */ - [[ level.callbackhostmigrationsave ]](); -} - -codecallback_playermigrated() //checked matches cerberus output -{ - /* -/# - println( "****CodeCallback_PlayerMigrated****" ); -#/ - */ - [[ level.callbackplayermigrated ]](); -} - -codecallback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) //checked matches cerberus output -{ - self endon( "disconnect" ); - [[ level.callbackplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ); -} - -codecallback_playerkilled( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ) //checked matches cerberus output -{ - self endon( "disconnect" ); - [[ level.callbackplayerkilled ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ); -} - -codecallback_playerlaststand( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ) //checked matches cerberus output -{ - self endon( "disconnect" ); - [[ level.callbackplayerlaststand ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ); -} - -codecallback_playermelee( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit ) //checked matches cerberus output -{ - self endon( "disconnect" ); - [[ level.callbackplayermelee ]]( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit ); -} - -codecallback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) //checked matches cerberus output -{ - [[ level.callbackactordamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ); -} - -codecallback_actorkilled( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset ) //checked matches cerberus output -{ - [[ level.callbackactorkilled ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset ); -} - -codecallback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, damagefromunderneath, modelindex, partname ) //checked matches cerberus output -{ - [[ level.callbackvehicledamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, damagefromunderneath, modelindex, partname ); -} - -codecallback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, timeoffset ) //checked matches cerberus output -{ -} - -codecallback_faceeventnotify( notify_msg, ent ) //checked matches cerberus output -{ - if ( isDefined( ent ) && isDefined( ent.do_face_anims ) && ent.do_face_anims ) - { - if ( isDefined( level.face_event_handler ) && isDefined( level.face_event_handler.events[ notify_msg ] ) ) - { - ent sendfaceevent( level.face_event_handler.events[ notify_msg ] ); - } - } -} - -codecallback_menuresponse( action, arg ) //checked matches cerberus output -{ - if ( !isDefined( level.menuresponsequeue ) ) - { - level.menuresponsequeue = []; - level thread menuresponsequeuepump(); - } - index = level.menuresponsequeue.size; - level.menuresponsequeue[ index ] = spawnstruct(); - level.menuresponsequeue[ index ].action = action; - level.menuresponsequeue[ index ].arg = arg; - level.menuresponsequeue[ index ].ent = self; - level notify( "menuresponse_queue" ); -} - -menuresponsequeuepump() //checked changed to match cerberus output -{ - while ( 1 ) - { - level waittill( "menuresponse_queue" ); - level.menuresponsequeue[ 0 ].ent notify( "menuresponse", level.menuresponsequeue[0].action, level.menuresponsequeue[0].arg ); - arrayremoveindex( level.menuresponsequeue, 0, 0 ); - wait 0.05; - } -} - -setupcallbacks() //checked matches cerberus output -{ - setdefaultcallbacks(); - level.idflags_radius = 1; - level.idflags_no_armor = 2; - level.idflags_no_knockback = 4; - level.idflags_penetration = 8; - level.idflags_destructible_entity = 16; - level.idflags_shield_explosive_impact = 32; - level.idflags_shield_explosive_impact_huge = 64; - level.idflags_shield_explosive_splash = 128; - level.idflags_no_team_protection = 256; - level.idflags_no_protection = 512; - level.idflags_passthru = 1024; -} - -setdefaultcallbacks() //checked matches cerberus output -{ - level.callbackstartgametype = maps/mp/gametypes_zm/_globallogic::callback_startgametype; - level.callbackplayerconnect = maps/mp/gametypes_zm/_globallogic_player::callback_playerconnect; - level.callbackplayerdisconnect = maps/mp/gametypes_zm/_globallogic_player::callback_playerdisconnect; - level.callbackplayerdamage = maps/mp/gametypes_zm/_globallogic_player::callback_playerdamage; - level.callbackplayerkilled = maps/mp/gametypes_zm/_globallogic_player::callback_playerkilled; - level.callbackplayermelee = maps/mp/gametypes_zm/_globallogic_player::callback_playermelee; - level.callbackplayerlaststand = maps/mp/gametypes_zm/_globallogic_player::callback_playerlaststand; - level.callbackactordamage = maps/mp/gametypes_zm/_globallogic_actor::callback_actordamage; - level.callbackactorkilled = maps/mp/gametypes_zm/_globallogic_actor::callback_actorkilled; - level.callbackplayermigrated = maps/mp/gametypes_zm/_globallogic_player::callback_playermigrated; - level.callbackhostmigration = maps/mp/gametypes_zm/_hostmigration::callback_hostmigration; - level.callbackhostmigrationsave = maps/mp/gametypes_zm/_hostmigration::callback_hostmigrationsave; -} - -abortlevel() //checked matches cerberus output -{ - /* -/# - println( "ERROR: Aborting level - gametype is not supported" ); -#/ - */ - level.callbackstartgametype = ::callbackvoid; - level.callbackplayerconnect = ::callbackvoid; - level.callbackplayerdisconnect = ::callbackvoid; - level.callbackplayerdamage = ::callbackvoid; - level.callbackplayerkilled = ::callbackvoid; - level.callbackplayerlaststand = ::callbackvoid; - level.callbackplayermelee = ::callbackvoid; - level.callbackactordamage = ::callbackvoid; - level.callbackactorkilled = ::callbackvoid; - level.callbackvehicledamage = ::callbackvoid; - setdvar( "g_gametype", "dm" ); - exitlevel( 0 ); -} - -codecallback_glasssmash( pos, dir ) //checked matches cerberus output -{ - level notify( "glass_smash" ); -} - -callbackvoid() //checked matches cerberus output -{ -} - - diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_clientids.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_clientids.gsc deleted file mode 100644 index de3aadd..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_clientids.gsc +++ /dev/null @@ -1,16 +0,0 @@ - -init() //checked matches cerberus output -{ - level.clientid = 0; - level thread onplayerconnect(); -} - -onplayerconnect() //checked matches cerberus output -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player.clientid = level.clientid; - level.clientid++; - } -} diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_damagefeedback.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_damagefeedback.gsc deleted file mode 100644 index e16144a..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_damagefeedback.gsc +++ /dev/null @@ -1,160 +0,0 @@ - -init() //checked matches cerberus output -{ - precacheshader( "damage_feedback" ); - precacheshader( "damage_feedback_flak" ); - precacheshader( "damage_feedback_tac" ); - level thread onplayerconnect(); -} - -onplayerconnect() //checked matches cerberus output -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player.hud_damagefeedback = newdamageindicatorhudelem( player ); - player.hud_damagefeedback.horzalign = "center"; - player.hud_damagefeedback.vertalign = "middle"; - player.hud_damagefeedback.x = -12; - player.hud_damagefeedback.y = -12; - player.hud_damagefeedback.alpha = 0; - player.hud_damagefeedback.archived = 1; - player.hud_damagefeedback setshader( "damage_feedback", 24, 48 ); - player.hitsoundtracker = 1; - } -} - -updatedamagefeedback( mod, inflictor, perkfeedback ) //checked matches cerberus output -{ - if ( !isplayer( self ) || sessionmodeiszombiesgame() ) - { - return; - } - if ( isDefined( mod ) && mod != "MOD_CRUSH" && mod != "MOD_GRENADE_SPLASH" && mod != "MOD_HIT_BY_OBJECT" ) - { - if ( isDefined( inflictor ) && isDefined( inflictor.soundmod ) ) - { - switch( inflictor.soundmod ) - { - case "player": - self playlocalsound( "mpl_hit_alert" ); - break; - case "heli": - self thread playhitsound( mod, "mpl_hit_alert_air" ); - break; - case "hpm": - self thread playhitsound( mod, "mpl_hit_alert_hpm" ); - break; - case "taser_spike": - self thread playhitsound( mod, "mpl_hit_alert_taser_spike" ); - break; - case "dog": - case "straferun": - case "default_loud": - self thread playhitsound( mod, "mpl_hit_heli_gunner" ); - break; - default: - self thread playhitsound( mod, "mpl_hit_alert_low" ); - break; - } - } - else - { - self playlocalsound( "mpl_hit_alert_low" ); - } - } - if ( isDefined( perkfeedback ) ) - { - switch( perkfeedback ) - { - case "flakjacket": - self.hud_damagefeedback setshader( "damage_feedback_flak", 24, 48 ); - break; - case "tacticalMask": - self.hud_damagefeedback setshader( "damage_feedback_tac", 24, 48 ); - break; - } - } - else self.hud_damagefeedback setshader( "damage_feedback", 24, 48 ); - self.hud_damagefeedback.alpha = 1; - self.hud_damagefeedback fadeovertime( 1 ); - self.hud_damagefeedback.alpha = 0; - } -} - -playhitsound( mod, alert ) //checked matches cerberus output -{ - self endon( "disconnect" ); - if ( self.hitsoundtracker ) - { - self.hitsoundtracker = 0; - self playlocalsound( alert ); - wait 0.05; - self.hitsoundtracker = 1; - } -} - -updatespecialdamagefeedback( hitent ) //checked matches cerberus output -{ - if ( !isplayer( self ) ) - { - return; - } - if ( !isDefined( hitent ) ) - { - return; - } - if ( !isplayer( hitent ) ) - { - return; - } - wait 0.05; - if ( !isDefined( self.directionalhitarray ) ) - { - self.directionalhitarray = []; - hitentnum = hitent getentitynumber(); - self.directionalhitarray[ hitentnum ] = 1; - self thread sendhitspecialeventatframeend( hitent ); - } - else - { - hitentnum = hitent getentitynumber(); - self.directionalhitarray[ hitentnum ] = 1; - } -} - -sendhitspecialeventatframeend( hitent ) //checked changed to match cerberus output -{ - self endon( "disconnect" ); - waittillframeend; - enemyshit = 0; - value = 1; - entbitarray0 = 0; - for ( i = 0; i < 32; i++ ) - { - if ( isDefined( self.directionalhitarray[ i ] ) && self.directionalhitarray[ i ] != 0 ) - { - entbitarray0 += value; - enemyshit++; - } - value *= 2; - } - entbitarray1 = 0; - for ( i = 33; i < 64; i++ ) - { - if ( isDefined( self.directionalhitarray[ i ] ) && self.directionalhitarray[ i ] != 0 ) - { - entbitarray1 += value; - enemyshit++; - } - value *= 2; - } - if ( enemyshit ) - { - self directionalhitindicator( entbitarray0, entbitarray1 ); - } - self.directionalhitarray = undefined; - entbitarray0 = 0; - entbitarray1 = 0; -} - diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_dev.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_dev.gsc deleted file mode 100644 index 86a3a5e..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_dev.gsc +++ /dev/null @@ -1,102 +0,0 @@ -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ -/# - for ( ;; ) - { - updatedevsettingszm(); - wait 0,5; -#/ - } -} - -updatedevsettingszm() -{ -/# - if ( level.players.size > 0 ) - { - if ( getDvar( "r_streamDumpDistance" ) == "3" ) - { - if ( !isDefined( level.streamdumpteamindex ) ) - { - level.streamdumpteamindex = 0; - } - else - { - level.streamdumpteamindex++; - } - numpoints = 0; - spawnpoints = []; - location = level.scr_zm_map_start_location; - if ( location != "default" && location == "" && isDefined( level.default_start_location ) ) - { - location = level.default_start_location; - } - match_string = ( level.scr_zm_ui_gametype + "_" ) + location; - if ( level.streamdumpteamindex < level.teams.size ) - { - structs = getstructarray( "initial_spawn", "script_noteworthy" ); - while ( isDefined( structs ) ) - { - _a46 = structs; - _k46 = getFirstArrayKey( _a46 ); - while ( isDefined( _k46 ) ) - { - struct = _a46[ _k46 ]; - while ( isDefined( struct.script_string ) ) - { - tokens = strtok( struct.script_string, " " ); - _a51 = tokens; - _k51 = getFirstArrayKey( _a51 ); - while ( isDefined( _k51 ) ) - { - token = _a51[ _k51 ]; - if ( token == match_string ) - { - spawnpoints[ spawnpoints.size ] = struct; - } - _k51 = getNextArrayKey( _a51, _k51 ); - } - } - _k46 = getNextArrayKey( _a46, _k46 ); - } - } - if ( !isDefined( spawnpoints ) || spawnpoints.size == 0 ) - { - spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); - } - if ( isDefined( spawnpoints ) ) - { - numpoints = spawnpoints.size; - } - } - if ( numpoints == 0 ) - { - setdvar( "r_streamDumpDistance", "0" ); - level.streamdumpteamindex = -1; - return; - } - else - { - averageorigin = ( 0, 0, 0 ); - averageangles = ( 0, 0, 0 ); - _a80 = spawnpoints; - _k80 = getFirstArrayKey( _a80 ); - while ( isDefined( _k80 ) ) - { - spawnpoint = _a80[ _k80 ]; - averageorigin += spawnpoint.origin / numpoints; - averageangles += spawnpoint.angles / numpoints; - _k80 = getNextArrayKey( _a80, _k80 ); - } - level.players[ 0 ] setplayerangles( averageangles ); - level.players[ 0 ] setorigin( averageorigin ); - wait 0,05; - setdvar( "r_streamDumpDistance", "2" ); -#/ - } - } - } -} diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_gameobjects.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_gameobjects.gsc deleted file mode 100644 index d5054cd..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_gameobjects.gsc +++ /dev/null @@ -1,2668 +0,0 @@ -#include maps/mp/gametypes_zm/_tweakables; -#include maps/mp/gametypes_zm/_hostmigration; -#include maps/mp/gametypes_zm/_weapons; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; -#include common_scripts/utility; - -main( allowed ) -{ - level.vehiclesenabled = getgametypesetting( "vehiclesEnabled" ); - level.vehiclestimed = getgametypesetting( "vehiclesTimed" ); - level.objectivepingdelay = getgametypesetting( "objectivePingTime" ); - level.nonteambasedteam = "allies"; -/# - if ( level.script == "mp_vehicle_test" ) - { - level.vehiclesenabled = 1; -#/ - } - if ( level.vehiclesenabled ) - { - allowed[ allowed.size ] = "vehicle"; - filter_script_vehicles_from_vehicle_descriptors( allowed ); - } - entities = getentarray(); - entity_index = entities.size - 1; - while ( entity_index >= 0 ) - { - entity = entities[ entity_index ]; - if ( !entity_is_allowed( entity, allowed ) ) - { - entity delete(); - } - entity_index--; - - } - return; -} - -entity_is_allowed( entity, allowed_game_modes ) -{ - if ( isDefined( level.createfx_enabled ) && level.createfx_enabled ) - { - return 1; - } - allowed = 1; - while ( isDefined( entity.script_gameobjectname ) && entity.script_gameobjectname != "[all_modes]" ) - { - allowed = 0; - gameobjectnames = strtok( entity.script_gameobjectname, " " ); - i = 0; - while ( i < allowed_game_modes.size && !allowed ) - { - j = 0; - while ( j < gameobjectnames.size && !allowed ) - { - allowed = gameobjectnames[ j ] == allowed_game_modes[ i ]; - j++; - } - i++; - } - } - return allowed; -} - -location_is_allowed( entity, location ) -{ - allowed = 1; - location_list = undefined; - if ( isDefined( entity.script_noteworthy ) ) - { - location_list = entity.script_noteworthy; - } - if ( isDefined( entity.script_location ) ) - { - location_list = entity.script_location; - } - while ( isDefined( location_list ) ) - { - if ( location_list == "[all_modes]" ) - { - allowed = 1; - break; - } - else allowed = 0; - gameobjectlocations = strtok( location_list, " " ); - j = 0; - while ( j < gameobjectlocations.size ) - { - if ( gameobjectlocations[ j ] == location ) - { - allowed = 1; - break; - } - else - { - j++; - } - } - } - return allowed; -} - -filter_script_vehicles_from_vehicle_descriptors( allowed_game_modes ) -{ - vehicle_descriptors = getentarray( "vehicle_descriptor", "targetname" ); - script_vehicles = getentarray( "script_vehicle", "classname" ); - vehicles_to_remove = []; - descriptor_index = 0; - while ( descriptor_index < vehicle_descriptors.size ) - { - descriptor = vehicle_descriptors[ descriptor_index ]; - closest_distance_sq = 1E+12; - closest_vehicle = undefined; - vehicle_index = 0; - while ( vehicle_index < script_vehicles.size ) - { - vehicle = script_vehicles[ vehicle_index ]; - dsquared = distancesquared( vehicle getorigin(), descriptor getorigin() ); - if ( dsquared < closest_distance_sq ) - { - closest_distance_sq = dsquared; - closest_vehicle = vehicle; - } - vehicle_index++; - } - if ( isDefined( closest_vehicle ) ) - { - if ( !entity_is_allowed( descriptor, allowed_game_modes ) ) - { - vehicles_to_remove[ vehicles_to_remove.size ] = closest_vehicle; - } - } - descriptor_index++; - } - vehicle_index = 0; - while ( vehicle_index < vehicles_to_remove.size ) - { - vehicles_to_remove[ vehicle_index ] delete(); - vehicle_index++; - } - return; -} - -init() -{ - level.numgametypereservedobjectives = 0; - level.releasedobjectives = []; - if ( !sessionmodeiszombiesgame() ) - { - precacheitem( "briefcase_bomb_mp" ); - precacheitem( "briefcase_bomb_defuse_mp" ); - } - level thread onplayerconnect(); -} - -onplayerconnect() -{ - level endon( "game_ended" ); - for ( ;; ) - { - level waittill( "connecting", player ); - player thread onplayerspawned(); - player thread ondisconnect(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - level endon( "game_ended" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread ondeath(); - self.touchtriggers = []; - self.carryobject = undefined; - self.claimtrigger = undefined; - self.canpickupobject = 1; - self.disabledweapon = 0; - self.killedinuse = undefined; - } -} - -ondeath() -{ - level endon( "game_ended" ); - self endon( "spawned_player" ); - self waittill( "death" ); - if ( isDefined( self.carryobject ) ) - { - self.carryobject thread setdropped(); - } -} - -ondisconnect() -{ - level endon( "game_ended" ); - self waittill( "disconnect" ); - if ( isDefined( self.carryobject ) ) - { - self.carryobject thread setdropped(); - } -} - -createcarryobject( ownerteam, trigger, visuals, offset, objectivename ) -{ - carryobject = spawnstruct(); - carryobject.type = "carryObject"; - carryobject.curorigin = trigger.origin; - carryobject.ownerteam = ownerteam; - carryobject.entnum = trigger getentitynumber(); - if ( issubstr( trigger.classname, "use" ) ) - { - carryobject.triggertype = "use"; - } - else - { - carryobject.triggertype = "proximity"; - } - trigger.baseorigin = trigger.origin; - carryobject.trigger = trigger; - carryobject.useweapon = undefined; - if ( !isDefined( offset ) ) - { - offset = ( 0, 0, 1 ); - } - carryobject.offset3d = offset; - carryobject.newstyle = 0; - if ( isDefined( objectivename ) ) - { - carryobject.newstyle = 1; - } - else - { - objectivename = &""; - } - index = 0; - while ( index < visuals.size ) - { - visuals[ index ].baseorigin = visuals[ index ].origin; - visuals[ index ].baseangles = visuals[ index ].angles; - index++; - } - carryobject.visuals = visuals; - carryobject.compassicons = []; - carryobject.objid = []; - while ( !carryobject.newstyle ) - { - _a319 = level.teams; - _k319 = getFirstArrayKey( _a319 ); - while ( isDefined( _k319 ) ) - { - team = _a319[ _k319 ]; - carryobject.objid[ team ] = getnextobjid(); - _k319 = getNextArrayKey( _a319, _k319 ); - } - } - carryobject.objidpingfriendly = 0; - carryobject.objidpingenemy = 0; - level.objidstart += 2; - carryobject.objectiveid = getnextobjid(); - objective_add( carryobject.objectiveid, "invisible", carryobject.curorigin, objectivename ); - carryobject.carrier = undefined; - carryobject.isresetting = 0; - carryobject.interactteam = "none"; - carryobject.allowweapons = 0; - carryobject.visiblecarriermodel = undefined; - carryobject.worldicons = []; - carryobject.carriervisible = 0; - carryobject.visibleteam = "none"; - carryobject.worldiswaypoint = []; - carryobject.carryicon = undefined; - carryobject.ondrop = undefined; - carryobject.onpickup = undefined; - carryobject.onreset = undefined; - if ( carryobject.triggertype == "use" ) - { - carryobject thread carryobjectusethink(); - } - else - { - carryobject thread carryobjectproxthink(); - } - carryobject thread updatecarryobjectorigin(); - carryobject thread updatecarryobjectobjectiveorigin(); - return carryobject; -} - -carryobjectusethink() -{ - level endon( "game_ended" ); - self.trigger endon( "destroyed" ); - while ( 1 ) - { - self.trigger waittill( "trigger", player ); - while ( self.isresetting ) - { - continue; - } - while ( !isalive( player ) ) - { - continue; - } - if ( isDefined( player.laststand ) && player.laststand ) - { - continue; - } - while ( !self caninteractwith( player ) ) - { - continue; - } - while ( !player.canpickupobject ) - { - continue; - } - while ( player.throwinggrenade ) - { - continue; - } - while ( isDefined( self.carrier ) ) - { - continue; - } - while ( player isinvehicle() ) - { - continue; - } - while ( player isweaponviewonlylinked() ) - { - continue; - } - while ( !player istouching( self.trigger ) ) - { - continue; - } - self setpickedup( player ); - } -} - -carryobjectproxthink() -{ - level endon( "game_ended" ); - self.trigger endon( "destroyed" ); - while ( 1 ) - { - self.trigger waittill( "trigger", player ); - while ( self.isresetting ) - { - continue; - } - while ( !isalive( player ) ) - { - continue; - } - if ( isDefined( player.laststand ) && player.laststand ) - { - continue; - } - while ( !self caninteractwith( player ) ) - { - continue; - } - while ( !player.canpickupobject ) - { - continue; - } - while ( player.throwinggrenade ) - { - continue; - } - while ( isDefined( self.carrier ) ) - { - continue; - } - while ( player isinvehicle() ) - { - continue; - } - while ( player isweaponviewonlylinked() ) - { - continue; - } - while ( !player istouching( self.trigger ) ) - { - continue; - } - self setpickedup( player ); - } -} - -pickupobjectdelay( origin ) -{ - level endon( "game_ended" ); - self endon( "death" ); - self endon( "disconnect" ); - self.canpickupobject = 0; - for ( ;; ) - { - if ( distancesquared( self.origin, origin ) > 4096 ) - { - break; - } - else - { - wait 0,2; - } - } - self.canpickupobject = 1; -} - -setpickedup( player ) -{ - if ( isDefined( player.carryobject ) ) - { - if ( isDefined( player.carryobject.swappable ) && player.carryobject.swappable ) - { - player.carryobject thread setdropped(); - } - else - { - if ( isDefined( self.onpickupfailed ) ) - { - self [[ self.onpickupfailed ]]( player ); - } - return; - } - } - player giveobject( self ); - self setcarrier( player ); - index = 0; - while ( index < self.visuals.size ) - { - self.visuals[ index ] thread hideobject(); - index++; - } - self.trigger.origin += vectorScale( ( 0, 0, 1 ), 10000 ); - self notify( "pickup_object" ); - if ( isDefined( self.onpickup ) ) - { - self [[ self.onpickup ]]( player ); - } - self updatecompassicons(); - self updateworldicons(); - self updateobjective(); -} - -hideobject() -{ - radius = 32; - origin = self.origin; - grenades = getentarray( "grenade", "classname" ); - radiussq = radius * radius; - linkedgrenades = []; - linkedgrenadesindex = 0; - self hide(); - i = 0; - while ( i < grenades.size ) - { - if ( distancesquared( origin, grenades[ i ].origin ) < radiussq ) - { - if ( grenades[ i ] islinkedto( self ) ) - { - linkedgrenades[ linkedgrenadesindex ] = grenades[ i ]; - linkedgrenades[ linkedgrenadesindex ] unlink(); - linkedgrenadesindex++; - } - } - i++; - } - self.origin += vectorScale( ( 0, 0, 1 ), 10000 ); - waittillframeend; - i = 0; - while ( i < linkedgrenadesindex ) - { - linkedgrenades[ i ] launch( vectorScale( ( 0, 0, 1 ), 5 ) ); - i++; - } -} - -updatecarryobjectorigin() -{ - level endon( "game_ended" ); - self.trigger endon( "destroyed" ); - if ( self.newstyle ) - { - return; - } - objpingdelay = level.objectivepingdelay; - for ( ;; ) - { - if ( isDefined( self.carrier ) && level.teambased ) - { - self.curorigin = self.carrier.origin + vectorScale( ( 0, 0, 1 ), 75 ); - while ( self.visibleteam != "friendly" && self.visibleteam == "any" && self.objidpingfriendly ) - { - _a626 = level.teams; - _k626 = getFirstArrayKey( _a626 ); - while ( isDefined( _k626 ) ) - { - team = _a626[ _k626 ]; - if ( self isfriendlyteam( team ) ) - { - if ( self.objpoints[ team ].isshown ) - { - self.objpoints[ team ].alpha = self.objpoints[ team ].basealpha; - self.objpoints[ team ] fadeovertime( objpingdelay + 1 ); - self.objpoints[ team ].alpha = 0; - } - objective_position( self.objid[ team ], self.curorigin ); - } - _k626 = getNextArrayKey( _a626, _k626 ); - } - } - if ( self.visibleteam != "enemy" && self.visibleteam == "any" && self.objidpingenemy ) - { - if ( !self isfriendlyteam( team ) ) - { - if ( self.objpoints[ team ].isshown ) - { - self.objpoints[ team ].alpha = self.objpoints[ team ].basealpha; - self.objpoints[ team ] fadeovertime( objpingdelay + 1 ); - self.objpoints[ team ].alpha = 0; - } - objective_position( self.objid[ team ], self.curorigin ); - } - } - self wait_endon( objpingdelay, "dropped", "reset" ); - continue; - } - else - { - if ( isDefined( self.carrier ) ) - { - self.curorigin = self.carrier.origin + vectorScale( ( 0, 0, 1 ), 75 ); - wait 0,05; - break; - } - else - { - wait 0,05; - } - } - } -} - -updatecarryobjectobjectiveorigin() -{ - level endon( "game_ended" ); - self.trigger endon( "destroyed" ); - if ( !self.newstyle ) - { - return; - } - objpingdelay = level.objectivepingdelay; - for ( ;; ) - { - if ( isDefined( self.carrier ) ) - { - self.curorigin = self.carrier.origin; - objective_position( self.objectiveid, self.curorigin ); - self wait_endon( objpingdelay, "dropped", "reset" ); - continue; - } - else - { - objective_position( self.objectiveid, self.curorigin ); - wait 0,05; - } - } -} - -giveobject( object ) -{ -/# - assert( !isDefined( self.carryobject ) ); -#/ - self.carryobject = object; - self thread trackcarrier(); - if ( !object.allowweapons ) - { - self _disableweapon(); - self thread manualdropthink(); - } - self.disallowvehicleusage = 1; - if ( isDefined( object.visiblecarriermodel ) ) - { - self maps/mp/gametypes_zm/_weapons::forcestowedweaponupdate(); - } - if ( !object.newstyle ) - { - if ( isDefined( object.carryicon ) ) - { - if ( self issplitscreen() ) - { - self.carryicon = createicon( object.carryicon, 35, 35 ); - self.carryicon.x = -130; - self.carryicon.y = -90; - self.carryicon.horzalign = "right"; - self.carryicon.vertalign = "bottom"; - } - else self.carryicon = createicon( object.carryicon, 50, 50 ); - if ( !object.allowweapons ) - { - self.carryicon setpoint( "CENTER", "CENTER", 0, 60 ); - } - else - { - self.carryicon.x = 130; - self.carryicon.y = -60; - self.carryicon.horzalign = "user_left"; - self.carryicon.vertalign = "user_bottom"; - } - self.carryicon.alpha = 0,75; - self.carryicon.hidewhileremotecontrolling = 1; - self.carryicon.hidewheninkillcam = 1; - } - } -} - -returnhome() -{ - self.isresetting = 1; - self notify( "reset" ); - index = 0; - while ( index < self.visuals.size ) - { - self.visuals[ index ].origin = self.visuals[ index ].baseorigin; - self.visuals[ index ].angles = self.visuals[ index ].baseangles; - self.visuals[ index ] show(); - index++; - } - self.trigger.origin = self.trigger.baseorigin; - self.curorigin = self.trigger.origin; - if ( isDefined( self.onreset ) ) - { - self [[ self.onreset ]](); - } - self clearcarrier(); - updateworldicons(); - updatecompassicons(); - updateobjective(); - self.isresetting = 0; -} - -isobjectawayfromhome() -{ - if ( isDefined( self.carrier ) ) - { - return 1; - } - if ( distancesquared( self.trigger.origin, self.trigger.baseorigin ) > 4 ) - { - return 1; - } - return 0; -} - -setposition( origin, angles ) -{ - self.isresetting = 1; - index = 0; - while ( index < self.visuals.size ) - { - visual = self.visuals[ index ]; - visual.origin = origin; - visual.angles = angles; - visual show(); - index++; - } - self.trigger.origin = origin; - self.curorigin = self.trigger.origin; - self clearcarrier(); - updateworldicons(); - updatecompassicons(); - updateobjective(); - self.isresetting = 0; -} - -onplayerlaststand() -{ - if ( isDefined( self.carryobject ) ) - { - self.carryobject thread setdropped(); - } -} - -setdropped() -{ - self.isresetting = 1; - self notify( "dropped" ); - startorigin = ( 0, 0, 1 ); - endorigin = ( 0, 0, 1 ); - body = undefined; - if ( isDefined( self.carrier ) && self.carrier.team != "spectator" ) - { - startorigin = self.carrier.origin + vectorScale( ( 0, 0, 1 ), 20 ); - endorigin = self.carrier.origin - vectorScale( ( 0, 0, 1 ), 2000 ); - body = self.carrier.body; - self.visuals[ 0 ].origin = self.carrier.origin; - } - else - { - startorigin = self.safeorigin + vectorScale( ( 0, 0, 1 ), 20 ); - endorigin = self.safeorigin - vectorScale( ( 0, 0, 1 ), 20 ); - } - trace = playerphysicstrace( startorigin, endorigin ); - angletrace = bullettrace( startorigin, endorigin, 0, body ); - droppingplayer = self.carrier; - if ( isDefined( trace ) ) - { - tempangle = randomfloat( 360 ); - droporigin = trace; - if ( angletrace[ "fraction" ] < 1 && distance( angletrace[ "position" ], trace ) < 10 ) - { - forward = ( cos( tempangle ), sin( tempangle ), 0 ); - forward = vectornormalize( forward - vectorScale( angletrace[ "normal" ], vectordot( forward, angletrace[ "normal" ] ) ) ); - dropangles = vectorToAngle( forward ); - } - else - { - dropangles = ( 0, tempangle, 0 ); - } - index = 0; - while ( index < self.visuals.size ) - { - self.visuals[ index ].origin = droporigin; - self.visuals[ index ].angles = dropangles; - self.visuals[ index ] show(); - index++; - } - self.trigger.origin = droporigin; - self.curorigin = self.trigger.origin; - self thread pickuptimeout( trace[ 2 ], startorigin[ 2 ] ); - } - else - { - index = 0; - while ( index < self.visuals.size ) - { - self.visuals[ index ].origin = self.visuals[ index ].baseorigin; - self.visuals[ index ].angles = self.visuals[ index ].baseangles; - self.visuals[ index ] show(); - index++; - } - self.trigger.origin = self.trigger.baseorigin; - self.curorigin = self.trigger.baseorigin; - } - if ( isDefined( self.ondrop ) ) - { - self [[ self.ondrop ]]( droppingplayer ); - } - self clearcarrier(); - self updatecompassicons(); - self updateworldicons(); - self updateobjective(); - self.isresetting = 0; -} - -setcarrier( carrier ) -{ - self.carrier = carrier; - objective_setplayerusing( self.objectiveid, carrier ); - self thread updatevisibilityaccordingtoradar(); -} - -clearcarrier() -{ - if ( !isDefined( self.carrier ) ) - { - return; - } - self.carrier takeobject( self ); - objective_clearplayerusing( self.objectiveid, self.carrier ); - self.carrier = undefined; - self notify( "carrier_cleared" ); -} - -shouldbereset( minz, maxz ) -{ - minetriggers = getentarray( "minefield", "targetname" ); - hurttriggers = getentarray( "trigger_hurt", "classname" ); - elevators = getentarray( "script_elevator", "targetname" ); - index = 0; - while ( index < minetriggers.size ) - { - if ( self.visuals[ 0 ] istouchingswept( minetriggers[ index ], minz, maxz ) ) - { - return 1; - } - index++; - } - index = 0; - while ( index < hurttriggers.size ) - { - if ( self.visuals[ 0 ] istouchingswept( hurttriggers[ index ], minz, maxz ) ) - { - return 1; - } - index++; - } - index = 0; - while ( index < elevators.size ) - { -/# - assert( isDefined( elevators[ index ].occupy_volume ) ); -#/ - if ( self.visuals[ 0 ] istouchingswept( elevators[ index ].occupy_volume, minz, maxz ) ) - { - return 1; - } - index++; - } - return 0; -} - -pickuptimeout( minz, maxz ) -{ - self endon( "pickup_object" ); - self endon( "stop_pickup_timeout" ); - wait 0,05; - if ( self shouldbereset( minz, maxz ) ) - { - self returnhome(); - return; - } - if ( isDefined( self.autoresettime ) ) - { - wait self.autoresettime; - if ( !isDefined( self.carrier ) ) - { - self returnhome(); - } - } -} - -takeobject( object ) -{ - if ( isDefined( self.carryicon ) ) - { - self.carryicon destroyelem(); - } - if ( isDefined( object.visiblecarriermodel ) ) - { - self maps/mp/gametypes_zm/_weapons::detach_all_weapons(); - } - self.carryobject = undefined; - if ( !isalive( self ) ) - { - return; - } - self notify( "drop_object" ); - self.disallowvehicleusage = 0; - if ( object.triggertype == "proximity" ) - { - self thread pickupobjectdelay( object.trigger.origin ); - } - if ( isDefined( object.visiblecarriermodel ) ) - { - self maps/mp/gametypes_zm/_weapons::forcestowedweaponupdate(); - } - if ( !object.allowweapons ) - { - self _enableweapon(); - } -} - -trackcarrier() -{ - level endon( "game_ended" ); - self endon( "disconnect" ); - self endon( "death" ); - self endon( "drop_object" ); - while ( isDefined( self.carryobject ) && isalive( self ) ) - { - if ( self isonground() ) - { - trace = bullettrace( self.origin + vectorScale( ( 0, 0, 1 ), 20 ), self.origin - vectorScale( ( 0, 0, 1 ), 20 ), 0, undefined ); - if ( trace[ "fraction" ] < 1 ) - { - self.carryobject.safeorigin = trace[ "position" ]; - } - } - wait 0,05; - } -} - -manualdropthink() -{ - level endon( "game_ended" ); - self endon( "disconnect" ); - self endon( "death" ); - self endon( "drop_object" ); - for ( ;; ) - { - while ( !self attackbuttonpressed() && !self fragbuttonpressed() || self secondaryoffhandbuttonpressed() && self meleebuttonpressed() ) - { - wait 0,05; - } - while ( !self attackbuttonpressed() && !self fragbuttonpressed() && !self secondaryoffhandbuttonpressed() && !self meleebuttonpressed() ) - { - wait 0,05; - } - if ( isDefined( self.carryobject ) && !self usebuttonpressed() ) - { - self.carryobject thread setdropped(); - } - } -} - -createuseobject( ownerteam, trigger, visuals, offset, objectivename ) -{ - useobject = spawnstruct(); - useobject.type = "useObject"; - useobject.curorigin = trigger.origin; - useobject.ownerteam = ownerteam; - useobject.entnum = trigger getentitynumber(); - useobject.keyobject = undefined; - if ( issubstr( trigger.classname, "use" ) ) - { - useobject.triggertype = "use"; - } - else - { - useobject.triggertype = "proximity"; - } - useobject.trigger = trigger; - index = 0; - while ( index < visuals.size ) - { - visuals[ index ].baseorigin = visuals[ index ].origin; - visuals[ index ].baseangles = visuals[ index ].angles; - index++; - } - useobject.visuals = visuals; - if ( !isDefined( offset ) ) - { - offset = ( 0, 0, 1 ); - } - useobject.offset3d = offset; - useobject.newstyle = 0; - if ( isDefined( objectivename ) ) - { - useobject.newstyle = 1; - } - else - { - objectivename = &""; - } - useobject.compassicons = []; - useobject.objid = []; - if ( !useobject.newstyle ) - { - _a1185 = level.teams; - _k1185 = getFirstArrayKey( _a1185 ); - while ( isDefined( _k1185 ) ) - { - team = _a1185[ _k1185 ]; - useobject.objid[ team ] = getnextobjid(); - _k1185 = getNextArrayKey( _a1185, _k1185 ); - } - if ( level.teambased ) - { - _a1192 = level.teams; - _k1192 = getFirstArrayKey( _a1192 ); - while ( isDefined( _k1192 ) ) - { - team = _a1192[ _k1192 ]; - objective_add( useobject.objid[ team ], "invisible", useobject.curorigin ); - objective_team( useobject.objid[ team ], team ); - _k1192 = getNextArrayKey( _a1192, _k1192 ); - } - } - else objective_add( useobject.objid[ level.nonteambasedteam ], "invisible", useobject.curorigin ); - } - useobject.objectiveid = getnextobjid(); - objective_add( useobject.objectiveid, "invisible", useobject.curorigin, objectivename ); - useobject.interactteam = "none"; - useobject.worldicons = []; - useobject.visibleteam = "none"; - useobject.worldiswaypoint = []; - useobject.onuse = undefined; - useobject.oncantuse = undefined; - useobject.usetext = "default"; - useobject.usetime = 10000; - useobject clearprogress(); - useobject.decayprogress = 0; - if ( useobject.triggertype == "proximity" ) - { - useobject.numtouching[ "neutral" ] = 0; - useobject.numtouching[ "none" ] = 0; - useobject.touchlist[ "neutral" ] = []; - useobject.touchlist[ "none" ] = []; - _a1255 = level.teams; - _k1255 = getFirstArrayKey( _a1255 ); - while ( isDefined( _k1255 ) ) - { - team = _a1255[ _k1255 ]; - useobject.numtouching[ team ] = 0; - useobject.touchlist[ team ] = []; - _k1255 = getNextArrayKey( _a1255, _k1255 ); - } - useobject.userate = 0; - useobject.claimteam = "none"; - useobject.claimplayer = undefined; - useobject.lastclaimteam = "none"; - useobject.lastclaimtime = 0; - useobject.claimgraceperiod = 1; - useobject.mustmaintainclaim = 0; - useobject.cancontestclaim = 0; - useobject thread useobjectproxthink(); - } - else - { - useobject.userate = 1; - useobject thread useobjectusethink(); - } - return useobject; -} - -setkeyobject( object ) -{ - if ( !isDefined( object ) ) - { - self.keyobject = undefined; - return; - } - if ( !isDefined( self.keyobject ) ) - { - self.keyobject = []; - } - self.keyobject[ self.keyobject.size ] = object; -} - -haskeyobject( use ) -{ - x = 0; - while ( x < use.keyobject.size ) - { - if ( isDefined( self.carryobject ) && isDefined( use.keyobject[ x ] ) && self.carryobject == use.keyobject[ x ] ) - { - return 1; - } - x++; - } - return 0; -} - -useobjectusethink() -{ - level endon( "game_ended" ); - self.trigger endon( "destroyed" ); - while ( 1 ) - { - self.trigger waittill( "trigger", player ); - while ( !isalive( player ) ) - { - continue; - } - while ( !self caninteractwith( player ) ) - { - continue; - } - while ( !player isonground() ) - { - continue; - } - while ( player isinvehicle() ) - { - continue; - } - while ( isDefined( self.keyobject ) || !isDefined( player.carryobject ) && !player haskeyobject( self ) ) - { - if ( isDefined( self.oncantuse ) ) - { - self [[ self.oncantuse ]]( player ); - } - } - result = 1; - if ( self.usetime > 0 ) - { - if ( isDefined( self.onbeginuse ) ) - { - self [[ self.onbeginuse ]]( player ); - } - team = player.pers[ "team" ]; - result = self useholdthink( player ); - if ( isDefined( self.onenduse ) ) - { - self [[ self.onenduse ]]( team, player, result ); - } - } - while ( !result ) - { - continue; - } - if ( isDefined( self.onuse ) ) - { - self [[ self.onuse ]]( player ); - } - } -} - -getearliestclaimplayer() -{ -/# - assert( self.claimteam != "none" ); -#/ - team = self.claimteam; - earliestplayer = self.claimplayer; - while ( self.touchlist[ team ].size > 0 ) - { - earliesttime = undefined; - players = getarraykeys( self.touchlist[ team ] ); - index = 0; - while ( index < players.size ) - { - touchdata = self.touchlist[ team ][ players[ index ] ]; - if ( !isDefined( earliesttime ) || touchdata.starttime < earliesttime ) - { - earliestplayer = touchdata.player; - earliesttime = touchdata.starttime; - } - index++; - } - } - return earliestplayer; -} - -useobjectproxthink() -{ - level endon( "game_ended" ); - self.trigger endon( "destroyed" ); - self thread proxtriggerthink(); - while ( 1 ) - { - if ( self.usetime && self.curprogress >= self.usetime ) - { - self clearprogress(); - creditplayer = getearliestclaimplayer(); - if ( isDefined( self.onenduse ) ) - { - self [[ self.onenduse ]]( self getclaimteam(), creditplayer, isDefined( creditplayer ) ); - } - if ( isDefined( creditplayer ) && isDefined( self.onuse ) ) - { - self [[ self.onuse ]]( creditplayer ); - } - self setclaimteam( "none" ); - self.claimplayer = undefined; - } - if ( self.claimteam != "none" ) - { - if ( self useobjectlockedforteam( self.claimteam ) ) - { - if ( isDefined( self.onenduse ) ) - { - self [[ self.onenduse ]]( self getclaimteam(), self.claimplayer, 0 ); - } - self setclaimteam( "none" ); - self.claimplayer = undefined; - self clearprogress(); - } - else if ( self.usetime ) - { - if ( self.decayprogress && !self.numtouching[ self.claimteam ] ) - { - if ( isDefined( self.claimplayer ) ) - { - if ( isDefined( self.onenduse ) ) - { - self [[ self.onenduse ]]( self getclaimteam(), self.claimplayer, 0 ); - } - self.claimplayer = undefined; - } - decayscale = 0; - if ( self.decaytime ) - { - decayscale = self.usetime / self.decaytime; - } - self.curprogress -= 50 * self.userate * decayscale; - if ( self.curprogress <= 0 ) - { - self clearprogress(); - } - self updatecurrentprogress(); - if ( isDefined( self.onuseupdate ) ) - { - self [[ self.onuseupdate ]]( self getclaimteam(), self.curprogress / self.usetime, ( 50 * self.userate * decayscale ) / self.usetime ); - } - if ( self.curprogress == 0 ) - { - self setclaimteam( "none" ); - } - } - else - { - if ( !self.numtouching[ self.claimteam ] ) - { - if ( isDefined( self.onenduse ) ) - { - self [[ self.onenduse ]]( self getclaimteam(), self.claimplayer, 0 ); - } - self setclaimteam( "none" ); - self.claimplayer = undefined; - break; - } - else - { - self.curprogress += 50 * self.userate; - self updatecurrentprogress(); - if ( isDefined( self.onuseupdate ) ) - { - self [[ self.onuseupdate ]]( self getclaimteam(), self.curprogress / self.usetime, ( 50 * self.userate ) / self.usetime ); - } - } - } - } - else if ( !self.mustmaintainclaim ) - { - if ( isDefined( self.onuse ) ) - { - self [[ self.onuse ]]( self.claimplayer ); - } - if ( !self.mustmaintainclaim ) - { - self setclaimteam( "none" ); - self.claimplayer = undefined; - } - } - else if ( !self.numtouching[ self.claimteam ] ) - { - if ( isDefined( self.onunoccupied ) ) - { - self [[ self.onunoccupied ]](); - } - self setclaimteam( "none" ); - self.claimplayer = undefined; - } - else - { - if ( self.cancontestclaim ) - { - numother = getnumtouchingexceptteam( self.claimteam ); - if ( numother > 0 ) - { - if ( isDefined( self.oncontested ) ) - { - self [[ self.oncontested ]](); - } - self setclaimteam( "none" ); - self.claimplayer = undefined; - } - } - } - } - else - { - if ( self.curprogress > 0 && ( getTime() - self.lastclaimtime ) > ( self.claimgraceperiod * 1000 ) ) - { - self clearprogress(); - } - } - wait 0,05; - maps/mp/gametypes_zm/_hostmigration::waittillhostmigrationdone(); - } -} - -useobjectlockedforteam( team ) -{ - if ( isDefined( self.teamlock ) && isDefined( level.teams[ team ] ) ) - { - return self.teamlock[ team ]; - } - return 0; -} - -canclaim( player ) -{ - if ( self.cancontestclaim ) - { - numother = getnumtouchingexceptteam( player.pers[ "team" ] ); - if ( numother != 0 ) - { - return 0; - } - } - if ( !isDefined( self.keyobject ) || isDefined( player.carryobject ) && player haskeyobject( self ) ) - { - return 1; - } - return 0; -} - -proxtriggerthink() -{ - level endon( "game_ended" ); - self.trigger endon( "destroyed" ); - entitynumber = self.entnum; - while ( 1 ) - { - self.trigger waittill( "trigger", player ); - if ( !isalive( player ) || self useobjectlockedforteam( player.pers[ "team" ] ) ) - { - continue; - } - while ( player isinvehicle() ) - { - continue; - } - while ( player isweaponviewonlylinked() ) - { - continue; - } - if ( self caninteractwith( player ) && self.claimteam == "none" ) - { - if ( self canclaim( player ) ) - { - setclaimteam( player.pers[ "team" ] ); - self.claimplayer = player; - if ( self.usetime && isDefined( self.onbeginuse ) ) - { - self [[ self.onbeginuse ]]( self.claimplayer ); - } - break; - } - else - { - if ( isDefined( self.oncantuse ) ) - { - self [[ self.oncantuse ]]( player ); - } - } - } - if ( isalive( player ) && !isDefined( player.touchtriggers[ entitynumber ] ) ) - { - player thread triggertouchthink( self ); - } - } -} - -clearprogress() -{ - self.curprogress = 0; - self updatecurrentprogress(); - if ( isDefined( self.onuseclear ) ) - { - self [[ self.onuseclear ]](); - } -} - -setclaimteam( newteam ) -{ -/# - assert( newteam != self.claimteam ); -#/ - if ( self.claimteam == "none" && ( getTime() - self.lastclaimtime ) > ( self.claimgraceperiod * 1000 ) ) - { - self clearprogress(); - } - else - { - if ( newteam != "none" && newteam != self.lastclaimteam ) - { - self clearprogress(); - } - } - self.lastclaimteam = self.claimteam; - self.lastclaimtime = getTime(); - self.claimteam = newteam; - self updateuserate(); -} - -getclaimteam() -{ - return self.claimteam; -} - -continuetriggertouchthink( team, object ) -{ - if ( !isalive( self ) ) - { - return 0; - } - if ( self useobjectlockedforteam( team ) ) - { - return 0; - } - if ( self isinvehicle() ) - { - return 0; - } - if ( !self istouching( object.trigger ) ) - { - return 0; - } - return 1; -} - -triggertouchthink( object ) -{ - team = self.pers[ "team" ]; - score = 1; - object.numtouching[ team ] += score; - if ( object.usetime ) - { - object updateuserate(); - } - touchname = "player" + self.clientid; - struct = spawnstruct(); - struct.player = self; - struct.starttime = getTime(); - object.touchlist[ team ][ touchname ] = struct; - objective_setplayerusing( object.objectiveid, self ); - self.touchtriggers[ object.entnum ] = object.trigger; - if ( isDefined( object.ontouchuse ) ) - { - object [[ object.ontouchuse ]]( self ); - } - while ( self continuetriggertouchthink( team, object ) ) - { - if ( object.usetime ) - { - self updateproxbar( object, 0 ); - } - wait 0,05; - } - if ( isDefined( self ) ) - { - if ( object.usetime ) - { - self updateproxbar( object, 1 ); - } - objective_clearplayerusing( object.objectiveid, self ); - } - if ( level.gameended ) - { - return; - } - object.numtouching[ team ] -= score; - if ( object.numtouching[ team ] < 1 ) - { - object.numtouching[ team ] = 0; - } - if ( object.usetime ) - { - if ( object.numtouching[ team ] <= 0 && object.curprogress >= object.usetime ) - { - object.curprogress = object.usetime - 1; - object updatecurrentprogress(); - } - } - if ( isDefined( self ) && isDefined( object.onendtouchuse ) ) - { - object [[ object.onendtouchuse ]]( self ); - } - object updateuserate(); -} - -updateproxbar( object, forceremove ) -{ - if ( object.newstyle ) - { - return; - } - if ( !forceremove && object.decayprogress ) - { - if ( !object caninteractwith( self ) ) - { - if ( isDefined( self.proxbar ) ) - { - self.proxbar hideelem(); - } - if ( isDefined( self.proxbartext ) ) - { - self.proxbartext hideelem(); - } - return; - } - else if ( !isDefined( self.proxbar ) ) - { - self.proxbar = createprimaryprogressbar(); - self.proxbar.lastuserate = -1; - } - if ( self.pers[ "team" ] == object.claimteam ) - { - if ( self.proxbar.bar.color != ( 0, 0, 1 ) ) - { - self.proxbar.bar.color = ( 0, 0, 1 ); - self.proxbar.lastuserate = -1; - } - } - else - { - if ( self.proxbar.bar.color != ( 0, 0, 1 ) ) - { - self.proxbar.bar.color = ( 0, 0, 1 ); - self.proxbar.lastuserate = -1; - } - } - } - else - { - if ( !forceremove || !object caninteractwith( self ) && self.pers[ "team" ] != object.claimteam ) - { - if ( isDefined( self.proxbar ) ) - { - self.proxbar hideelem(); - } - if ( isDefined( self.proxbartext ) ) - { - self.proxbartext hideelem(); - } - return; - } - } - if ( !isDefined( self.proxbar ) ) - { - self.proxbar = self createprimaryprogressbar(); - self.proxbar.lastuserate = -1; - self.proxbar.lasthostmigrationstate = 0; - } - if ( self.proxbar.hidden ) - { - self.proxbar showelem(); - self.proxbar.lastuserate = -1; - self.proxbar.lasthostmigrationstate = 0; - } - if ( !isDefined( self.proxbartext ) ) - { - self.proxbartext = self createprimaryprogressbartext(); - self.proxbartext settext( object.usetext ); - } - if ( self.proxbartext.hidden ) - { - self.proxbartext showelem(); - self.proxbartext settext( object.usetext ); - } - if ( self.proxbar.lastuserate != object.userate || self.proxbar.lasthostmigrationstate != isDefined( level.hostmigrationtimer ) ) - { - if ( object.curprogress > object.usetime ) - { - object.curprogress = object.usetime; - } - if ( object.decayprogress && self.pers[ "team" ] != object.claimteam ) - { - if ( object.curprogress > 0 ) - { - progress = object.curprogress / object.usetime; - rate = ( 1000 / object.usetime ) * ( object.userate * -1 ); - if ( isDefined( level.hostmigrationtimer ) ) - { - rate = 0; - } - self.proxbar updatebar( progress, rate ); - } - } - else - { - progress = object.curprogress / object.usetime; - rate = ( 1000 / object.usetime ) * object.userate; - if ( isDefined( level.hostmigrationtimer ) ) - { - rate = 0; - } - self.proxbar updatebar( progress, rate ); - } - self.proxbar.lasthostmigrationstate = isDefined( level.hostmigrationtimer ); - self.proxbar.lastuserate = object.userate; - } -} - -getnumtouchingexceptteam( ignoreteam ) -{ - numtouching = 0; - _a1902 = level.teams; - _k1902 = getFirstArrayKey( _a1902 ); - while ( isDefined( _k1902 ) ) - { - team = _a1902[ _k1902 ]; - if ( ignoreteam == team ) - { - } - else - { - numtouching += self.numtouching[ team ]; - } - _k1902 = getNextArrayKey( _a1902, _k1902 ); - } - return numtouching; -} - -updateuserate() -{ - numclaimants = self.numtouching[ self.claimteam ]; - numother = 0; - numother = getnumtouchingexceptteam( self.claimteam ); - self.userate = 0; - if ( self.decayprogress ) - { - if ( numclaimants && !numother ) - { - self.userate = numclaimants; - } - else - { - if ( !numclaimants && numother ) - { - self.userate = numother; - } - else - { - if ( !numclaimants && !numother ) - { - self.userate = 0; - } - } - } - } - else - { - if ( numclaimants && !numother ) - { - self.userate = numclaimants; - } - } - if ( isDefined( self.onupdateuserate ) ) - { - self [[ self.onupdateuserate ]](); - } -} - -useholdthink( player ) -{ - player notify( "use_hold" ); - if ( isDefined( self.dontlinkplayertotrigger ) && !self.dontlinkplayertotrigger ) - { - player playerlinkto( self.trigger ); - player playerlinkedoffsetenable(); - } - player clientclaimtrigger( self.trigger ); - player.claimtrigger = self.trigger; - useweapon = self.useweapon; - lastweapon = player getcurrentweapon(); - if ( isDefined( useweapon ) ) - { -/# - assert( isDefined( lastweapon ) ); -#/ - if ( lastweapon == useweapon ) - { -/# - assert( isDefined( player.lastnonuseweapon ) ); -#/ - lastweapon = player.lastnonuseweapon; - } -/# - assert( lastweapon != useweapon ); -#/ - player.lastnonuseweapon = lastweapon; - player giveweapon( useweapon ); - player setweaponammostock( useweapon, 0 ); - player setweaponammoclip( useweapon, 0 ); - player switchtoweapon( useweapon ); - } - else - { - player _disableweapon(); - } - self clearprogress(); - self.inuse = 1; - self.userate = 0; - objective_setplayerusing( self.objectiveid, player ); - player thread personalusebar( self ); - result = useholdthinkloop( player, lastweapon ); - if ( isDefined( player ) ) - { - objective_clearplayerusing( self.objectiveid, player ); - self clearprogress(); - if ( isDefined( player.attachedusemodel ) ) - { - player detach( player.attachedusemodel, "tag_inhand" ); - player.attachedusemodel = undefined; - } - player notify( "done_using" ); - } - if ( isDefined( useweapon ) && isDefined( player ) ) - { - player thread takeuseweapon( useweapon ); - } - if ( isDefined( result ) && result ) - { - return 1; - } - if ( isDefined( player ) ) - { - player.claimtrigger = undefined; - if ( isDefined( useweapon ) ) - { - ammo = player getweaponammoclip( lastweapon ); - if ( lastweapon != "none" && isweaponequipment( lastweapon ) && player getweaponammoclip( lastweapon ) != 0 ) - { - player switchtoweapon( lastweapon ); - } - else - { - player takeweapon( useweapon ); - } - } - else - { - if ( isalive( player ) ) - { - player _enableweapon(); - } - } - if ( isDefined( self.dontlinkplayertotrigger ) && !self.dontlinkplayertotrigger ) - { - player unlink(); - } - if ( !isalive( player ) ) - { - player.killedinuse = 1; - } - } - self.inuse = 0; - if ( self.trigger.classname == "trigger_radius_use" ) - { - player clientreleasetrigger( self.trigger ); - } - else - { - self.trigger releaseclaimedtrigger(); - } - return 0; -} - -takeuseweapon( useweapon ) -{ - self endon( "use_hold" ); - self endon( "death" ); - self endon( "disconnect" ); - level endon( "game_ended" ); - while ( self getcurrentweapon() == useweapon && !self.throwinggrenade ) - { - wait 0,05; - } - self takeweapon( useweapon ); -} - -continueholdthinkloop( player, waitforweapon, timedout, usetime ) -{ - maxwaittime = 1,5; - if ( !isalive( player ) ) - { - return 0; - } - if ( isDefined( player.laststand ) && player.laststand ) - { - return 0; - } - if ( self.curprogress >= usetime ) - { - return 0; - } - if ( !player usebuttonpressed() ) - { - return 0; - } - if ( player.throwinggrenade ) - { - return 0; - } - if ( player meleebuttonpressed() ) - { - return 0; - } - if ( player isinvehicle() ) - { - return 0; - } - if ( player isremotecontrolling() ) - { - return 0; - } - if ( player isweaponviewonlylinked() ) - { - return 0; - } - if ( !player istouching( self.trigger ) ) - { - return 0; - } - if ( !self.userate && !waitforweapon ) - { - return 0; - } - if ( waitforweapon && timedout > maxwaittime ) - { - return 0; - } - return 1; -} - -updatecurrentprogress() -{ - if ( self.usetime ) - { - progress = float( self.curprogress ) / self.usetime; - objective_setprogress( self.objectiveid, clamp( progress, 0, 1 ) ); - } -} - -useholdthinkloop( player, lastweapon ) -{ - level endon( "game_ended" ); - self endon( "disabled" ); - useweapon = self.useweapon; - waitforweapon = 1; - timedout = 0; - usetime = self.usetime; - while ( self continueholdthinkloop( player, waitforweapon, timedout, usetime ) ) - { - timedout += 0,05; - if ( !isDefined( useweapon ) || player getcurrentweapon() == useweapon ) - { - self.curprogress += 50 * self.userate; - self updatecurrentprogress(); - self.userate = 1; - waitforweapon = 0; - } - else - { - self.userate = 0; - } - if ( self.curprogress >= usetime ) - { - self.inuse = 0; - player clientreleasetrigger( self.trigger ); - player.claimtrigger = undefined; - if ( isDefined( useweapon ) ) - { - player setweaponammostock( useweapon, 1 ); - player setweaponammoclip( useweapon, 1 ); - if ( lastweapon != "none" && isweaponequipment( lastweapon ) && player getweaponammoclip( lastweapon ) != 0 ) - { - player switchtoweapon( lastweapon ); - } - else - { - player takeweapon( useweapon ); - } - } - else - { - player _enableweapon(); - } - if ( isDefined( self.dontlinkplayertotrigger ) && !self.dontlinkplayertotrigger ) - { - player unlink(); - } - wait 0,05; - return isalive( player ); - } - wait 0,05; - maps/mp/gametypes_zm/_hostmigration::waittillhostmigrationdone(); - } - return 0; -} - -personalusebar( object ) -{ - self endon( "disconnect" ); - if ( object.newstyle ) - { - return; - } - if ( isDefined( self.usebar ) ) - { - return; - } - self.usebar = self createprimaryprogressbar(); - self.usebartext = self createprimaryprogressbartext(); - self.usebartext settext( object.usetext ); - usetime = object.usetime; - lastrate = -1; - lasthostmigrationstate = isDefined( level.hostmigrationtimer ); - while ( isalive( self ) && object.inuse && !level.gameended ) - { - if ( lastrate != object.userate || lasthostmigrationstate != isDefined( level.hostmigrationtimer ) ) - { - if ( object.curprogress > usetime ) - { - object.curprogress = usetime; - } - if ( object.decayprogress && self.pers[ "team" ] != object.claimteam ) - { - if ( object.curprogress > 0 ) - { - progress = object.curprogress / usetime; - rate = ( 1000 / usetime ) * ( object.userate * -1 ); - if ( isDefined( level.hostmigrationtimer ) ) - { - rate = 0; - } - self.proxbar updatebar( progress, rate ); - } - } - else - { - progress = object.curprogress / usetime; - rate = ( 1000 / usetime ) * object.userate; - if ( isDefined( level.hostmigrationtimer ) ) - { - rate = 0; - } - self.usebar updatebar( progress, rate ); - } - if ( !object.userate ) - { - self.usebar hideelem(); - self.usebartext hideelem(); - } - else - { - self.usebar showelem(); - self.usebartext showelem(); - } - } - lastrate = object.userate; - lasthostmigrationstate = isDefined( level.hostmigrationtimer ); - wait 0,05; - } - self.usebar destroyelem(); - self.usebartext destroyelem(); -} - -updatetrigger() -{ - if ( self.triggertype != "use" ) - { - return; - } - if ( self.interactteam == "none" ) - { - self.trigger.origin -= vectorScale( ( 0, 0, 1 ), 50000 ); - } - else if ( self.interactteam == "any" || !level.teambased ) - { - self.trigger.origin = self.curorigin; - self.trigger setteamfortrigger( "none" ); - } - else - { - if ( self.interactteam == "friendly" ) - { - self.trigger.origin = self.curorigin; - if ( isDefined( level.teams[ self.ownerteam ] ) ) - { - self.trigger setteamfortrigger( self.ownerteam ); - } - else - { - self.trigger.origin -= vectorScale( ( 0, 0, 1 ), 50000 ); - } - return; - } - else - { - if ( self.interactteam == "enemy" ) - { - self.trigger.origin = self.curorigin; - self.trigger setexcludeteamfortrigger( self.ownerteam ); - } - } - } -} - -updateobjective() -{ - if ( !self.newstyle ) - { - return; - } - objective_team( self.objectiveid, self.ownerteam ); - if ( self.visibleteam == "any" ) - { - objective_state( self.objectiveid, "active" ); - objective_visibleteams( self.objectiveid, level.spawnsystem.ispawn_teammask[ "all" ] ); - } - else if ( self.visibleteam == "friendly" ) - { - objective_state( self.objectiveid, "active" ); - objective_visibleteams( self.objectiveid, level.spawnsystem.ispawn_teammask[ self.ownerteam ] ); - } - else if ( self.visibleteam == "enemy" ) - { - objective_state( self.objectiveid, "active" ); - objective_visibleteams( self.objectiveid, level.spawnsystem.ispawn_teammask[ "all" ] & level.spawnsystem.ispawn_teammask[ self.ownerteam ] ); - } - else - { - objective_state( self.objectiveid, "invisible" ); - objective_visibleteams( self.objectiveid, 0 ); - } - if ( self.type == "carryObject" ) - { - if ( isalive( self.carrier ) ) - { - objective_onentity( self.objectiveid, self.carrier ); - return; - } - else - { - objective_clearentity( self.objectiveid ); - } - } -} - -updateworldicons() -{ - if ( self.visibleteam == "any" ) - { - updateworldicon( "friendly", 1 ); - updateworldicon( "enemy", 1 ); - } - else if ( self.visibleteam == "friendly" ) - { - updateworldicon( "friendly", 1 ); - updateworldicon( "enemy", 0 ); - } - else if ( self.visibleteam == "enemy" ) - { - updateworldicon( "friendly", 0 ); - updateworldicon( "enemy", 1 ); - } - else - { - updateworldicon( "friendly", 0 ); - updateworldicon( "enemy", 0 ); - } -} - -updateworldicon( relativeteam, showicon ) -{ -} - -updatecompassicons() -{ - if ( self.visibleteam == "any" ) - { - updatecompassicon( "friendly", 1 ); - updatecompassicon( "enemy", 1 ); - } - else if ( self.visibleteam == "friendly" ) - { - updatecompassicon( "friendly", 1 ); - updatecompassicon( "enemy", 0 ); - } - else if ( self.visibleteam == "enemy" ) - { - updatecompassicon( "friendly", 0 ); - updatecompassicon( "enemy", 1 ); - } - else - { - updatecompassicon( "friendly", 0 ); - updatecompassicon( "enemy", 0 ); - } -} - -updatecompassicon( relativeteam, showicon ) -{ - if ( self.newstyle ) - { - return; - } - updateteams = getupdateteams( relativeteam ); - index = 0; - while ( index < updateteams.size ) - { - showiconthisteam = showicon; - if ( !showiconthisteam && shouldshowcompassduetoradar( updateteams[ index ] ) ) - { - showiconthisteam = 1; - } - if ( level.teambased ) - { - objid = self.objid[ updateteams[ index ] ]; - } - else - { - objid = self.objid[ level.nonteambasedteam ]; - } - if ( !isDefined( self.compassicons[ relativeteam ] ) || !showiconthisteam ) - { - objective_state( objid, "invisible" ); - index++; - continue; - } - else - { - objective_icon( objid, self.compassicons[ relativeteam ] ); - objective_state( objid, "active" ); - if ( self.type == "carryObject" ) - { - if ( isalive( self.carrier ) && !shouldpingobject( relativeteam ) ) - { - objective_onentity( objid, self.carrier ); - index++; - continue; - } - else - { - objective_position( objid, self.curorigin ); - } - } - } - index++; - } -} - -shouldpingobject( relativeteam ) -{ - if ( relativeteam == "friendly" && self.objidpingfriendly ) - { - return 1; - } - else - { - if ( relativeteam == "enemy" && self.objidpingenemy ) - { - return 1; - } - } - return 0; -} - -getupdateteams( relativeteam ) -{ - updateteams = []; - if ( level.teambased ) - { - if ( relativeteam == "friendly" ) - { - _a2526 = level.teams; - _k2526 = getFirstArrayKey( _a2526 ); - while ( isDefined( _k2526 ) ) - { - team = _a2526[ _k2526 ]; - if ( self isfriendlyteam( team ) ) - { - updateteams[ updateteams.size ] = team; - } - _k2526 = getNextArrayKey( _a2526, _k2526 ); - } - } - else while ( relativeteam == "enemy" ) - { - _a2534 = level.teams; - _k2534 = getFirstArrayKey( _a2534 ); - while ( isDefined( _k2534 ) ) - { - team = _a2534[ _k2534 ]; - if ( !self isfriendlyteam( team ) ) - { - updateteams[ updateteams.size ] = team; - } - _k2534 = getNextArrayKey( _a2534, _k2534 ); - } - } - } - else if ( relativeteam == "friendly" ) - { - updateteams[ updateteams.size ] = level.nonteambasedteam; - } - else - { - updateteams[ updateteams.size ] = "axis"; - } - return updateteams; -} - -shouldshowcompassduetoradar( team ) -{ - showcompass = 0; - return showcompass; -} - -updatevisibilityaccordingtoradar() -{ - self endon( "death" ); - self endon( "carrier_cleared" ); - while ( 1 ) - { - level waittill( "radar_status_change" ); - self updatecompassicons(); - } -} - -setownerteam( team ) -{ - self.ownerteam = team; - self updatetrigger(); - self updatecompassicons(); - self updateworldicons(); - self updateobjective(); -} - -getownerteam() -{ - return self.ownerteam; -} - -setdecaytime( time ) -{ - self.decaytime = int( time * 1000 ); -} - -setusetime( time ) -{ - self.usetime = int( time * 1000 ); -} - -setusetext( text ) -{ - self.usetext = text; -} - -setusehinttext( text ) -{ - self.trigger sethintstring( text ); -} - -allowcarry( relativeteam ) -{ - self.interactteam = relativeteam; -} - -allowuse( relativeteam ) -{ - self.interactteam = relativeteam; - updatetrigger(); -} - -setvisibleteam( relativeteam ) -{ - self.visibleteam = relativeteam; - if ( !maps/mp/gametypes_zm/_tweakables::gettweakablevalue( "hud", "showobjicons" ) ) - { - self.visibleteam = "none"; - } - updatecompassicons(); - updateworldicons(); - updateobjective(); -} - -setmodelvisibility( visibility ) -{ - if ( visibility ) - { - index = 0; - while ( index < self.visuals.size ) - { - self.visuals[ index ] show(); - if ( self.visuals[ index ].classname == "script_brushmodel" || self.visuals[ index ].classname == "script_model" ) - { - self.visuals[ index ] thread makesolid(); - } - index++; - } - } - else index = 0; - while ( index < self.visuals.size ) - { - self.visuals[ index ] hide(); - if ( self.visuals[ index ].classname == "script_brushmodel" || self.visuals[ index ].classname == "script_model" ) - { - self.visuals[ index ] notify( "changing_solidness" ); - self.visuals[ index ] notsolid(); - } - index++; - } -} - -makesolid() -{ - self endon( "death" ); - self notify( "changing_solidness" ); - self endon( "changing_solidness" ); - while ( 1 ) - { - i = 0; - while ( i < level.players.size ) - { - if ( level.players[ i ] istouching( self ) ) - { - break; - } - else - { - i++; - } - } - if ( i == level.players.size ) - { - self solid(); - return; - } - else - { - wait 0,05; - } - } -} - -setcarriervisible( relativeteam ) -{ - self.carriervisible = relativeteam; -} - -setcanuse( relativeteam ) -{ - self.useteam = relativeteam; -} - -set2dicon( relativeteam, shader ) -{ - self.compassicons[ relativeteam ] = shader; - updatecompassicons(); -} - -set3dicon( relativeteam, shader ) -{ - self.worldicons[ relativeteam ] = shader; - updateworldicons(); -} - -set3duseicon( relativeteam, shader ) -{ - self.worlduseicons[ relativeteam ] = shader; -} - -set3diswaypoint( relativeteam, waypoint ) -{ - self.worldiswaypoint[ relativeteam ] = waypoint; -} - -setcarryicon( shader ) -{ - self.carryicon = shader; -} - -setvisiblecarriermodel( visiblemodel ) -{ - self.visiblecarriermodel = visiblemodel; -} - -getvisiblecarriermodel() -{ - return self.visiblecarriermodel; -} - -destroyobject( deletetrigger, forcehide ) -{ - if ( !isDefined( forcehide ) ) - { - forcehide = 1; - } - self disableobject( forcehide ); - _a2742 = self.visuals; - _k2742 = getFirstArrayKey( _a2742 ); - while ( isDefined( _k2742 ) ) - { - visual = _a2742[ _k2742 ]; - visual hide(); - visual delete(); - _k2742 = getNextArrayKey( _a2742, _k2742 ); - } - self.trigger notify( "destroyed" ); - if ( isDefined( deletetrigger ) && deletetrigger ) - { - self.trigger delete(); - } - else - { - self.trigger triggeron(); - } -} - -disableobject( forcehide ) -{ - self notify( "disabled" ); - while ( self.type == "carryObject" || isDefined( forcehide ) && forcehide ) - { - if ( isDefined( self.carrier ) ) - { - self.carrier takeobject( self ); - } - index = 0; - while ( index < self.visuals.size ) - { - self.visuals[ index ] hide(); - index++; - } - } - self.trigger triggeroff(); - self setvisibleteam( "none" ); -} - -enableobject( forceshow ) -{ - while ( self.type == "carryObject" || isDefined( forceshow ) && forceshow ) - { - index = 0; - while ( index < self.visuals.size ) - { - self.visuals[ index ] show(); - index++; - } - } - self.trigger triggeron(); - self setvisibleteam( "any" ); -} - -getrelativeteam( team ) -{ - if ( self.ownerteam == "any" ) - { - return "friendly"; - } - if ( team == self.ownerteam ) - { - return "friendly"; - } - else - { - if ( team == getenemyteam( self.ownerteam ) ) - { - return "enemy"; - } - else - { - return "neutral"; - } - } -} - -isfriendlyteam( team ) -{ - if ( !level.teambased ) - { - return 1; - } - if ( self.ownerteam == "any" ) - { - return 1; - } - if ( self.ownerteam == team ) - { - return 1; - } - return 0; -} - -caninteractwith( player ) -{ - team = player.pers[ "team" ]; - switch( self.interactteam ) - { - case "none": - return 0; - case "any": - return 1; - case "friendly": - if ( level.teambased ) - { - if ( team == self.ownerteam ) - { - return 1; - } - else - { - return 0; - } - } - else - { - if ( player == self.ownerteam ) - { - return 1; - } - else - { - return 0; - } - } - case "enemy": - if ( level.teambased ) - { - if ( team != self.ownerteam ) - { - return 1; - } - else - { - if ( isDefined( self.decayprogress ) && self.decayprogress && self.curprogress > 0 ) - { - return 1; - } - else - { - return 0; - } - } - } - else - { - if ( player != self.ownerteam ) - { - return 1; - } - else - { - return 0; - } - } - default: -/# - assert( 0, "invalid interactTeam" ); -#/ - return 0; - } -} - -isteam( team ) -{ - if ( team == "neutral" ) - { - return 1; - } - if ( isDefined( level.teams[ team ] ) ) - { - return 1; - } - if ( team == "any" ) - { - return 1; - } - if ( team == "none" ) - { - return 1; - } - return 0; -} - -isrelativeteam( relativeteam ) -{ - if ( relativeteam == "friendly" ) - { - return 1; - } - if ( relativeteam == "enemy" ) - { - return 1; - } - if ( relativeteam == "any" ) - { - return 1; - } - if ( relativeteam == "none" ) - { - return 1; - } - return 0; -} - -getenemyteam( team ) -{ - if ( team == "neutral" ) - { - return "none"; - } - else - { - if ( team == "allies" ) - { - return "axis"; - } - else - { - return "allies"; - } - } -} - -getnextobjid() -{ - nextid = 0; - if ( level.releasedobjectives.size > 0 ) - { - nextid = level.releasedobjectives[ level.releasedobjectives.size - 1 ]; - } - else - { - nextid = level.numgametypereservedobjectives; - level.numgametypereservedobjectives++; - } -/# - assert( nextid < 32, "Ran out of objective IDs" ); -#/ - return nextid; -} - -releaseobjid( objid ) -{ -/# - assert( objid < level.numgametypereservedobjectives ); -#/ - i = 0; - while ( i < level.releasedobjectives.size ) - { - if ( objid == level.releasedobjectives[ i ] && objid == 31 ) - { - return; - } -/# - assert( objid != level.releasedobjectives[ i ] ); -#/ - i++; - } - level.releasedobjectives[ level.releasedobjectives.size ] = objid; -} - -getlabel() -{ - label = self.trigger.script_label; - if ( !isDefined( label ) ) - { - label = ""; - return label; - } - if ( label[ 0 ] != "_" ) - { - return "_" + label; - } - return label; -} - -mustmaintainclaim( enabled ) -{ - self.mustmaintainclaim = enabled; -} - -cancontestclaim( enabled ) -{ - self.cancontestclaim = enabled; -} - -setflags( flags ) -{ - objective_setgamemodeflags( self.objectiveid, flags ); -} - -getflags( flags ) -{ - return objective_getgamemodeflags( self.objectiveid ); -} diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globalentities.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globalentities.gsc deleted file mode 100644 index e69de29..0000000 diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic.gsc deleted file mode 100644 index 9af0f50..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic.gsc +++ /dev/null @@ -1,2741 +0,0 @@ -#include maps/mp/gametypes_zm/_globallogic; -#include maps/mp/gametypes_zm/_hostmigration; -#include maps/mp/gametypes_zm/_dev; -#include maps/mp/gametypes_zm/_friendicons; -#include maps/mp/gametypes_zm/_healthoverlay; -#include maps/mp/gametypes_zm/_damagefeedback; -#include maps/mp/teams/_teams; -#include maps/mp/_decoy; -#include maps/mp/gametypes_zm/_spawnlogic; -#include maps/mp/gametypes_zm/_gameobjects; -#include maps/mp/gametypes_zm/_objpoints; -#include maps/mp/gametypes_zm/_spectating; -#include maps/mp/gametypes_zm/_deathicons; -#include maps/mp/gametypes_zm/_shellshock; -#include maps/mp/gametypes_zm/_scoreboard; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/gametypes_zm/_clientids; -#include maps/mp/gametypes_zm/_serversettings; -#include maps/mp/_challenges; -#include maps/mp/_music; -#include maps/mp/gametypes_zm/_weapons; -#include maps/mp/gametypes_zm/_globallogic_player; -#include maps/mp/_demo; -#include maps/mp/killstreaks/_killstreaks; -#include maps/mp/gametypes_zm/_wager; -#include maps/mp/gametypes_zm/_persistence; -#include maps/mp/gametypes_zm/_hud; -#include maps/mp/gametypes_zm/_globallogic_utils; -#include maps/mp/gametypes_zm/_hud_message; -#include maps/mp/gametypes_zm/_globallogic_defaults; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/gametypes_zm/_globallogic_spawn; -#include maps/mp/_gamerep; -#include maps/mp/_gameadvertisement; -#include maps/mp/gametypes_zm/_globallogic_audio; -#include maps/mp/gametypes_zm/_class; -#include maps/mp/gametypes_zm/_globallogic_ui; -#include maps/mp/gametypes_zm/_tweakables; -#include common_scripts/utility; -#include maps/mp/_busing; -#include maps/mp/_burnplayer; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; - -init() //checked matches bo3 _globallogic.gsc within reason -{ - - // hack to allow maps with no scripts to run correctly - if ( !isDefined( level.tweakablesInitialized ) ) - maps\mp\gametypes_zm\_tweakables::init(); - - init_session_mode_flags(); - - level.splitscreen = isSplitScreen(); - level.xenon = 0; - level.ps3 = 0; - level.wiiu = 0; - - level.onlineGame = SessionModeIsOnlineGame(); - level.console = 1; - - level.rankedMatch = 0; - level.leagueMatch = 0; - - level.wagerMatch = false; - - level.contractsEnabled = !GetGametypeSetting( "disableContracts" ); - - level.contractsEnabled = false; - - /* -/# - if ( GetDvarint( "scr_forcerankedmatch" ) == 1 ) - level.rankedMatch = true; -#/ - */ - - level.script = toLower( GetDvar( "mapname" ) ); - level.gametype = toLower( GetDvar( "g_gametype" ) ); - - level.teamBased = false; - level.teamCount = GetGametypeSetting( "teamCount" ); - level.multiTeam = ( level.teamCount > 2 ); - - if ( SessionModeIsZombiesGame() ) - { - level.zombie_team_index = level.teamCount + 1; - if ( 2 == level.zombie_team_index ) - { - level.zombie_team = "axis"; - } - else - { - level.zombie_team = "team" + level.zombie_team_index; - } - } - - // used to loop through all valid playing teams ( not spectator ) - // can also be used to check if a team is valid ( isdefined( level.teams[team] ) ) - // NOTE: added in the same order they are defined in code - level.teams = []; - level.teamIndex = []; - - teamCount = level.teamCount; - - level.teams[ "allies" ] = "allies"; - level.teams[ "axis" ] = "axis"; - - level.teamIndex[ "neutral" ] = 0; // Neutral team set to 0 so that it can be used by objectives - level.teamIndex[ "allies" ] = 1; - level.teamIndex[ "axis" ] = 2; - - for( teamIndex = 3; teamIndex <= teamCount; teamIndex++ ) - { - level.teams[ "team" + teamIndex ] = "team" + teamIndex; - level.teamIndex[ "team" + teamIndex ] = teamIndex; - } - - level.overrideTeamScore = false; - level.overridePlayerScore = false; - level.displayHalftimeText = false; - level.displayRoundEndText = true; - - level.endGameOnScoreLimit = true; - level.endGameOnTimeLimit = true; - level.scoreRoundBased = false; - level.resetPlayerScoreEveryRound = false; - - level.gameForfeited = false; - level.forceAutoAssign = false; - - level.halftimeType = "halftime"; - level.halftimeSubCaption = &"MP_SWITCHING_SIDES_CAPS"; - - level.lastStatusTime = 0; - level.wasWinning = []; - - level.lastSlowProcessFrame = 0; - - level.placement = []; - foreach ( team in level.teams ) - { - level.placement[team] = []; - } - level.placement["all"] = []; - - level.postRoundTime = 7.0;//Kevin Sherwood changed to 9 to have enough time for music stingers - - level.inOvertime = false; - - level.defaultOffenseRadius = 560; - - level.dropTeam = GetDvarint( "sv_maxclients" ); - - level.inFinalKillcam = false; - - maps\mp\gametypes_zm\_globallogic_ui::init(); - - registerDvars(); -// maps\mp\gametypes_zm\_class::initPerkDvars(); - - level.oldschool = ( GetDvarint( "scr_oldschool" ) == 1 ); - if ( level.oldschool ) - { - SetDvar( "jump_height", 64 ); - SetDvar( "jump_slowdownEnable", 0 ); - SetDvar( "bg_fallDamageMinHeight", 256 ); - SetDvar( "bg_fallDamageMaxHeight", 512 ); - SetDvar( "player_clipSizeMultiplier", 2.0 ); - } - - precacheModel( "tag_origin" ); - precacheRumble( "dtp_rumble" ); - precacheRumble( "slide_rumble" ); - - precacheStatusIcon( "hud_status_dead" ); - precacheStatusIcon( "hud_status_connecting" ); - - precache_mp_leaderboards(); - - // sets up the flame fx - //maps\mp\_burnplayer::initBurnPlayer(); - - if ( !isDefined( game["tiebreaker"] ) ) - game["tiebreaker"] = false; - - maps\mp\gametypes_zm\_globallogic_audio::registerDialogGroup( "introboost", true ); - maps\mp\gametypes_zm\_globallogic_audio::registerDialogGroup( "status", true ); - - //thread maps\mp\_gameadvertisement::init(); - //thread maps\mp\_gamerep::init(); -} - -registerDvars() //checked matches bo3 _globallogic.gsc within reason -{ - if ( GetDvar( "scr_oldschool" ) == "" ) - SetDvar( "scr_oldschool", "0" ); - - makeDvarServerInfo( "scr_oldschool" ); - - if ( GetDvar( "ui_guncycle" ) == "" ) - SetDvar( "ui_guncycle", 0 ); - - makedvarserverinfo( "ui_guncycle" ); - - if ( GetDvar( "ui_weapon_tiers" ) == "" ) - SetDvar( "ui_weapon_tiers", 0 ); - makedvarserverinfo( "ui_weapon_tiers" ); - - SetDvar( "ui_text_endreason", ""); - makeDvarServerInfo( "ui_text_endreason", "" ); - - setMatchFlag( "bomb_timer", 0 ); - - setMatchFlag( "enable_popups", 1 ); - - setMatchFlag( "pregame", isPregame() ); - - if ( GetDvar( "scr_vehicle_damage_scalar" ) == "" ) - SetDvar( "scr_vehicle_damage_scalar", "1" ); - - level.vehicleDamageScalar = GetDvarfloat( "scr_vehicle_damage_scalar"); - - level.fire_audio_repeat_duration = GetDvarint( "fire_audio_repeat_duration" ); - level.fire_audio_random_max_duration = GetDvarint( "fire_audio_random_max_duration" ); -} - -blank( arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10 ) //checked matches bo3 _globallogic.gsc within reason -{ -} - -SetupCallbacks() //checked matches bo3 _globallogic.gsc within reason -{ - level.spawnPlayer = maps\mp\gametypes_zm\_globallogic_spawn::spawnPlayer; - level.spawnPlayerPrediction = maps\mp\gametypes_zm\_globallogic_spawn::spawnPlayerPrediction; - level.spawnClient = maps\mp\gametypes_zm\_globallogic_spawn::spawnClient; - level.spawnSpectator = maps\mp\gametypes_zm\_globallogic_spawn::spawnSpectator; - level.spawnIntermission = maps\mp\gametypes_zm\_globallogic_spawn::spawnIntermission; - level.onPlayerScore = maps\mp\gametypes_zm\_globallogic_score::default_onPlayerScore; - level.onTeamScore = maps\mp\gametypes_zm\_globallogic_score::default_onTeamScore; - - level.waveSpawnTimer = ::waveSpawnTimer; - level.spawnMessage = maps\mp\gametypes_zm\_globallogic_spawn::default_spawnMessage; - - level.onSpawnPlayer = ::blank; - level.onSpawnPlayerUnified = ::blank; - level.onSpawnSpectator = maps\mp\gametypes_zm\_globallogic_defaults::default_onSpawnSpectator; - level.onSpawnIntermission = maps\mp\gametypes_zm\_globallogic_defaults::default_onSpawnIntermission; - level.onRespawnDelay = ::blank; - - level.onForfeit = maps\mp\gametypes_zm\_globallogic_defaults::default_onForfeit; - level.onTimeLimit = maps\mp\gametypes_zm\_globallogic_defaults::default_onTimeLimit; - level.onScoreLimit = maps\mp\gametypes_zm\_globallogic_defaults::default_onScoreLimit; - level.onAliveCountChange = maps\mp\gametypes_zm\_globallogic_defaults::default_onAliveCountChange; - level.onDeadEvent = maps\mp\gametypes_zm\_globallogic_defaults::default_onDeadEvent; - level.onOneLeftEvent = maps\mp\gametypes_zm\_globallogic_defaults::default_onOneLeftEvent; - level.giveTeamScore = maps\mp\gametypes_zm\_globallogic_score::giveTeamScore; - level.onLastTeamAliveEvent = undefined; - - level.getTimeLimit = maps\mp\gametypes_zm\_globallogic_defaults::default_getTimeLimit; - level.getTeamKillPenalty =::blank; // maps\mp\gametypes_zm\_globallogic_defaults::default_getTeamKillPenalty; - level.getTeamKillScore = ::blank; // maps\mp\gametypes_zm\_globallogic_defaults::default_getTeamKillScore; - - level.isKillBoosting = maps\mp\gametypes_zm\_globallogic_score::default_isKillBoosting; - - level._setTeamScore = maps\mp\gametypes_zm\_globallogic_score::_setTeamScore; - level._setPlayerScore = maps\mp\gametypes_zm\_globallogic_score::_setPlayerScore; - - level._getTeamScore = maps\mp\gametypes_zm\_globallogic_score::_getTeamScore; - level._getPlayerScore = maps\mp\gametypes_zm\_globallogic_score::_getPlayerScore; - - level.onPrecacheGametype = ::blank; - level.onStartGameType = ::blank; - level.onPlayerConnect = ::blank; - level.onPlayerDisconnect = ::blank; - level.onPlayerDamage = ::blank; - level.onPlayerKilled = ::blank; - level.onPlayerKilledExtraUnthreadedCBs = []; //< Array of other CB function pointers - - level.onTeamOutcomeNotify = maps\mp\gametypes_zm\_hud_message::teamOutcomeNotify; - level.onOutcomeNotify = maps\mp\gametypes_zm\_hud_message::outcomeNotify; - level.onTeamWagerOutcomeNotify = maps\mp\gametypes_zm\_hud_message::teamWagerOutcomeNotify; - level.onWagerOutcomeNotify = maps\mp\gametypes_zm\_hud_message::wagerOutcomeNotify; - level.setMatchScoreHUDElemForTeam = maps\mp\gametypes_zm\_hud_message::setMatchScoreHUDElemForTeam; - level.onEndGame = ::blank; - level.onRoundEndGame = maps\mp\gametypes_zm\_globallogic_defaults::default_onRoundEndGame; - level.onMedalAwarded = ::blank; - - maps\mp\gametypes_zm\_globallogic_ui::SetupCallbacks(); -} - -precache_mp_leaderboards() //checked matches bo3 _globallogic.gsc within reason -{ - if( SessionModeIsZombiesGame() ) - return; - - if( !level.rankedMatch ) - return; - - mapname = GetDvar( "mapname" ); - - globalLeaderboards = "LB_MP_GB_XPPRESTIGE LB_MP_GB_TOTALXP_AT LB_MP_GB_TOTALXP_LT LB_MP_GB_WINS_AT LB_MP_GB_WINS_LT LB_MP_GB_KILLS_AT LB_MP_GB_KILLS_LT LB_MP_GB_ACCURACY_AT LB_MP_GB_ACCURACY_LT"; - - gamemodeLeaderboard = " LB_MP_GM_" + level.gametype; - - if( getDvarInt( "g_hardcore" ) ) - gamemodeLeaderboard += "_HC"; - - mapLeaderboard = " LB_MP_MAP_" + getsubstr( mapname, 3, mapname.size ); // strip the MP_ from the map name - - precacheLeaderboards( globalLeaderboards + gamemodeLeaderboard + mapLeaderboard ); -} - -compareTeamByGameStat( gameStat, teamA, teamB, previous_winner_score ) //checked matches bo3 _globallogic.gsc within reason -{ - winner = undefined; - - if ( teamA == "tie" ) - { - winner = "tie"; - - if ( previous_winner_score < game[gameStat][teamB] ) - winner = teamB; - } - else if ( game[gameStat][teamA] == game[gameStat][teamB] ) - winner = "tie"; - else if ( game[gameStat][teamB] > game[gameStat][teamA] ) - winner = teamB; - else - winner = teamA; - - return winner; -} - -determineTeamWinnerByGameStat( gameStat ) //checked matches bo3 _globallogic.gsc within reason -{ - teamKeys = GetArrayKeys(level.teams); - winner = teamKeys[0]; - previous_winner_score = game[gameStat][winner]; - - for ( teamIndex = 1; teamIndex < teamKeys.size; teamIndex++ ) - { - winner = compareTeamByGameStat( gameStat, winner, teamKeys[teamIndex], previous_winner_score); - - if ( winner != "tie" ) - { - previous_winner_score = game[gameStat][winner]; - } - } - - return winner; -} - -compareTeamByTeamScore( teamA, teamB, previous_winner_score ) //checked matches bo3 _globallogic.gsc within reason -{ - winner = undefined; - teamBScore = [[level._getTeamScore]]( teamB ); - - if ( teamA == "tie" ) - { - winner = "tie"; - - if ( previous_winner_score < teamBScore ) - winner = teamB; - - return winner; - } - - teamAScore = [[level._getTeamScore]]( teamA ); - - if ( teamBScore == teamAScore ) - winner = "tie"; - else if ( teamBScore > teamAScore ) - winner = teamB; - else - winner = teamA; - - return winner; -} - -determineTeamWinnerByTeamScore( ) //checked matches bo3 _globallogic.gsc within reason -{ - teamKeys = GetArrayKeys(level.teams); - winner = teamKeys[0]; - previous_winner_score = [[level._getTeamScore]]( winner ); - - for ( teamIndex = 1; teamIndex < teamKeys.size; teamIndex++ ) - { - winner = compareTeamByTeamScore( winner, teamKeys[teamIndex], previous_winner_score); - - if ( winner != "tie" ) - { - previous_winner_score = [[level._getTeamScore]]( winner ); - } - } - - return winner; -} - -forceEnd(hostsucks) //checked matches bo3 _globallogic.gsc within reason -{ - if ( !isDefined(hostsucks ) ) - hostsucks = false; - - if ( level.hostForcedEnd || level.forcedEnd ) - return; - - winner = undefined; - - if ( level.teamBased ) - { - winner = determineTeamWinnerByGameStat("teamScores"); - maps\mp\gametypes_zm\_globallogic_utils::logTeamWinString( "host ended game", winner ); - } - else - { - winner = maps\mp\gametypes_zm\_globallogic_score::getHighestScoringPlayer(); - if ( isDefined( winner ) ) - logString( "host ended game, win: " + winner.name ); - else - logString( "host ended game, tie" ); - } - - level.forcedEnd = true; - level.hostForcedEnd = true; - - if (hostsucks) - { - endString = &"MP_HOST_SUCKS"; - } - else - { - if ( level.splitscreen ) - endString = &"MP_ENDED_GAME"; - else - endString = &"MP_HOST_ENDED_GAME"; - } - - setMatchFlag( "disableIngameMenu", 1 ); - makeDvarServerInfo( "ui_text_endreason", endString ); - SetDvar( "ui_text_endreason", endString ); - thread endGame( winner, endString ); -} - -killserverPc() //checked matches bo3 _globallogic.gsc within reason -{ - if ( level.hostForcedEnd || level.forcedEnd ) - return; - - winner = undefined; - - if ( level.teamBased ) - { - winner = determineTeamWinnerByGameStat("teamScores"); - maps\mp\gametypes_zm\_globallogic_utils::logTeamWinString( "host ended game", winner ); - } - else - { - winner = maps\mp\gametypes_zm\_globallogic_score::getHighestScoringPlayer(); - if ( isDefined( winner ) ) - logString( "host ended game, win: " + winner.name ); - else - logString( "host ended game, tie" ); - } - - level.forcedEnd = true; - level.hostForcedEnd = true; - - level.killserver = true; - - endString = &"MP_HOST_ENDED_GAME"; - - /* -/# - PrintLn("kill server; ending game\n"); -#/ - */ - thread endGame( winner, endString ); -} - -someoneOnEachTeam() //checked matches bo3 _globallogic.gsc within reason -{ - foreach ( team in level.teams ) - { - if ( level.playerCount[team] == 0 ) - return false; - } - - return true; -} - -checkIfTeamForfeits( team ) //checked matches bo3 _globallogic.gsc within reason -{ - if ( !level.everExisted[team] ) - return false; - - if ( level.playerCount[team] < 1 && totalPlayerCount() > 0 ) - { - return true; - } - - return false; -} - -checkForAnyTeamForfeit() //checked matches bo3 _globallogic.gsc within reason -{ - foreach( team in level.teams ) - { - if ( checkIfTeamForfeits( team ) ) - { - //allies forfeited - thread [[level.onForfeit]]( team ); - return true; - } - } - - return false; -} - -doSpawnQueueUpdates() //checked matches bo3 _globallogic.gsc within reason -{ - foreach( team in level.teams ) - { - if ( level.spawnQueueModified[team] ) - { - [[level.onAliveCountChange]]( team ); - } - } -} - -isTeamAllDead( team ) //checked changed at own discretion -{ - if ( level.everExisted[team] && !level.aliveCount[ team ] && !level.playerLives[ team ] ) - { - return 1; - } - return 0; -} - -areAllTeamsDead( ) //checked matches bo3 _globallogic.gsc within reason -{ - foreach( team in level.teams ) - { - // if team was alive and now they are not - if ( !isTeamAllDead( team ) ) - { - return false; - } - } - - return true; -} - -allDeadTeamCount( ) //checked matches bo3 _globallogic.gsc within reason -{ - count = 0; - foreach( team in level.teams ) - { - // if team was alive and now they are not - if ( isTeamAllDead( team ) ) - { - count++; - } - } - - return count; -} - -doDeadEventUpdates() //checked matches bo3 _globallogic.gsc within reason -{ - if ( level.teamBased ) - { - // if all teams were alive and now they are all dead in the same instance - if ( areAllTeamsDead( ) ) - { - [[level.onDeadEvent]]( "all" ); - return true; - } - - // TODO MTEAM - invert all onDeadEvent functions to be onLastTeamAliveEvent instead - if ( isdefined( level.onLastTeamAliveEvent ) ) - { - if ( allDeadTeamCount( ) == level.teams.size - 1 ) - { - foreach( team in level.teams ) - { - // if team is alive - if ( !isTeamAllDead( team ) ) - { - [[level.onLastTeamAliveEvent]]( team ); - return true; - } - } - } - } - else - { - foreach( team in level.teams ) - { - // if team was alive and now they are not - if ( isTeamAllDead( team ) ) - { - [[level.onDeadEvent]]( team ); - return true; - } - } - } - } - else - { - // everyone is dead - if ( (totalAliveCount() == 0) && (totalPlayerLives() == 0) && level.maxPlayerCount > 1 ) - { - [[level.onDeadEvent]]( "all" ); - return true; - } - } - - return false; -} - -isOnlyOneLeftAliveOnTeam( team ) //checked changed at own discretion -{ - if ( level.lastAliveCount[team] > 1 && level.aliveCount[team] == 1 && level.playerLives[team] == 1 ) - { - return 1; - } - return 0; -} - - -doOneLeftEventUpdates() //checked matches bo3 _globallogic.gsc within reason -{ - if ( level.teamBased ) - { - foreach( team in level.teams ) - { - // one "team" left - if ( isOnlyOneLeftAliveOnTeam( team ) ) - { - [[level.onOneLeftEvent]]( team ); - return true; - } - } - } - else - { - // last man standing - if ( (totalAliveCount() == 1) && (totalPlayerLives() == 1) && level.maxPlayerCount > 1 ) - { - [[level.onOneLeftEvent]]( "all" ); - return true; - } - } - - return false; -} - -updateGameEvents() //checked matches bo3 _globallogic.gsc within reason -{ - /* -/# - if( GetDvarint( "scr_hostmigrationtest" ) == 1 ) - { - return; - } -#/ - */ - if ( !level.inGracePeriod ) - { - if ( level.teamBased ) - { - if (!level.gameForfeited ) - { - if( game["state"] == "playing" && checkForAnyTeamForfeit() ) - { - return; - } - } - else // level.gameForfeited==true - { - if ( someoneOnEachTeam() ) - { - level.gameForfeited = false; - level notify( "abort forfeit" ); - } - } - } - else - { - if (!level.gameForfeited) - { - if ( totalPlayerCount() == 1 && level.maxPlayerCount > 1 ) - { - thread [[level.onForfeit]](); - return; - } - } - else // level.gameForfeited==true - { - if ( totalPlayerCount() > 1 ) - { - level.gameForfeited = false; - level notify( "abort forfeit" ); - } - } - } - } - - if ( !level.playerQueuedRespawn && !level.numLives && !level.inOverTime ) - return; - - if ( level.inGracePeriod ) - return; - - if ( level.playerQueuedRespawn ) - { - doSpawnQueueUpdates(); - } - - if ( doDeadEventUpdates() ) - return; - - if ( doOneLeftEventUpdates() ) - return; -} - - -matchStartTimer() //checked matches bo3 _globallogic.gsc within reason -{ - visionSetNaked( "mpIntro", 0 ); - - matchStartText = createServerFontString( "objective", 1.5 ); - matchStartText setPoint( "CENTER", "CENTER", 0, -40 ); - matchStartText.sort = 1001; - matchStartText setText( game["strings"]["waiting_for_teams"] ); - matchStartText.foreground = false; - matchStartText.hidewheninmenu = true; - - waitForPlayers(); - matchStartText setText( game["strings"]["match_starting_in"] ); - - matchStartTimer = createServerFontString( "objective", 2.2 ); - matchStartTimer setPoint( "CENTER", "CENTER", 0, 0 ); - matchStartTimer.sort = 1001; - matchStartTimer.color = (1,1,0); - matchStartTimer.foreground = false; - matchStartTimer.hidewheninmenu = true; - - - //Since the scaling is disabled, we cant see the pulse effect by scaling. We need to change keep switching between - //some small and big font to get the pulse effect. This will be fixed when we have fixed set of different sizes fonts. - - //matchStartTimer maps\mp\gametypes_zm\_hud::fontPulseInit(); - - countTime = int( level.prematchPeriod ); - - if ( countTime >= 2 ) - { - while ( countTime > 0 && !level.gameEnded ) - { - matchStartTimer setValue( countTime ); - //matchStartTimer thread maps\mp\gametypes_zm\_hud::fontPulse( level ); - if ( countTime == 2 ) - visionSetNaked( GetDvar( "mapname" ), 3.0 ); - countTime--; - wait ( 1.0 ); - } - } - else - { - visionSetNaked( GetDvar( "mapname" ), 1.0 ); - } - - matchStartTimer destroyElem(); - matchStartText destroyElem(); -} - -matchStartTimerSkip() //checked matches bo3 _globallogic.gsc within reason -{ - if ( !isPregame() ) - visionSetNaked( GetDvar( "mapname" ), 0 ); - else - visionSetNaked( "mpIntro", 0 ); -} - -notifyTeamWaveSpawn( team, time ) //checked matches bo3 _globallogic.gsc within reason -{ - if ( time - level.lastWave[team] > (level.waveDelay[team] * 1000) ) - { - level notify ( "wave_respawn_" + team ); - level.lastWave[team] = time; - level.wavePlayerSpawnIndex[team] = 0; - } -} - -waveSpawnTimer() //checked matches bo3 _globallogic.gsc within reason -{ - level endon( "game_ended" ); - - while ( game["state"] == "playing" ) - { - time = getTime(); - - foreach( team in level.teams ) - { - notifyTeamWaveSpawn( team, time ); - } - wait ( 0.05 ); - } -} - - -hostIdledOut() //checked matches bo3 _globallogic.gsc within reason -{ - hostPlayer = getHostPlayer(); - /* -/# - if( GetDvarint( "scr_writeconfigstrings" ) == 1 || GetDvarint( "scr_hostmigrationtest" ) == 1 ) - return false; -#/ - */ - // host never spawned - if ( isDefined( hostPlayer ) && !hostPlayer.hasSpawned && !isDefined( hostPlayer.selectedClass ) ) - return true; - - return false; -} - -IncrementMatchCompletionStat( gameMode, playedOrHosted, stat ) //checked matches bo3 _globallogic.gsc within reason -{ - self AddDStat( "gameHistory", gameMode, "modeHistory", playedOrHosted, stat, 1 ); -} - -SetMatchCompletionStat( gameMode, playedOrHosted, stat ) //checked matches bo3 _globallogic.gsc within reason -{ - self SetDStat( "gameHistory", gameMode, "modeHistory", playedOrHosted, stat, 1 ); -} - -GetCurrentGameMode() //doesn't exist in bo3 _globallogic.gsc leaving in -{ - return "publicmatch"; -} - -displayRoundEnd( winner, endReasonText ) //checked matches bo3 _globallogic.gsc within reason changed for loop to while loop see github for more info -{ - if ( level.displayRoundEndText ) - { - if ( winner == "tie" ) - { - maps\mp\_demo::gameResultBookmark( "round_result", level.teamIndex[ "neutral" ], level.teamIndex[ "neutral" ] ); - } - else - { - maps\mp\_demo::gameResultBookmark( "round_result", level.teamIndex[ winner ], level.teamIndex[ "neutral" ] ); - } - - setmatchflag( "cg_drawSpectatorMessages", 0 ); - players = level.players; - index = 0; - while ( index < players.size ) - { - player = players[index]; - - if ( !isDefined( player.pers["team"] ) ) - { - player [[level.spawnIntermission]]( true ); - player closeMenu(); - player closeInGameMenu(); - index++; - continue; - } - - if ( level.wagerMatch ) - { - if ( level.teamBased ) - player thread [[level.onTeamWagerOutcomeNotify]]( winner, true, endReasonText ); - else - player thread [[level.onWagerOutcomeNotify]]( winner, endReasonText ); - } - else - { - if ( level.teamBased ) - { - player thread [[level.onTeamOutcomeNotify]]( winner, true, endReasonText ); - player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "ROUND_END" ); - } - else - { - player thread [[level.onOutcomeNotify]]( winner, true, endReasonText ); - player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "ROUND_END" ); - } - } - - player setClientUIVisibilityFlag( "hud_visible", 0 ); - player setClientUIVisibilityFlag( "g_compassShowEnemies", 0 ); - index++; - } - } - - if ( wasLastRound() ) - { - roundEndWait( level.roundEndDelay, false ); - } - else - { - thread maps\mp\gametypes_zm\_globallogic_audio::announceRoundWinner( winner, level.roundEndDelay / 4 ); - roundEndWait( level.roundEndDelay, true ); - } -} - -displayRoundSwitch( winner, endReasonText ) //checked matches bo3 _globallogic.gsc within reason changed for loop to while loop see github for more info -{ - switchType = level.halftimeType; - if ( switchType == "halftime" ) - { - if ( IsDefined( level.nextRoundIsOvertime ) && level.nextRoundIsOvertime ) - { - switchType = "overtime"; - } - else - { - if ( level.roundLimit ) - { - if ( (game["roundsplayed"] * 2) == level.roundLimit ) - switchType = "halftime"; - else - switchType = "intermission"; - } - else if ( level.scoreLimit ) - { - if ( game["roundsplayed"] == (level.scoreLimit - 1) ) - switchType = "halftime"; - else - switchType = "intermission"; - } - else - { - switchType = "intermission"; - } - } - } - - leaderdialog = maps\mp\gametypes_zm\_globallogic_audio::getRoundSwitchDialog( switchType ); - - SetMatchTalkFlag( "EveryoneHearsEveryone", 1 ); - - players = level.players; - index = 0; - while ( index < players.size ) - { - player = players[index]; - - if ( !isDefined( player.pers["team"] ) ) - { - player [[level.spawnIntermission]]( true ); - player closeMenu(); - player closeInGameMenu(); - index++ - continue; - } - - player maps\mp\gametypes_zm\_globallogic_audio::leaderDialogOnPlayer( leaderdialog ); - player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "ROUND_SWITCH" ); - - if ( level.wagerMatch ) - player thread [[level.onTeamWagerOutcomeNotify]]( switchType, true, level.halftimeSubCaption ); - else - player thread [[level.onTeamOutcomeNotify]]( switchType, false, level.halftimeSubCaption ); - player setClientUIVisibilityFlag( "hud_visible", 0 ); - index++; - } - - roundEndWait( level.halftimeRoundEndDelay, false ); -} - -displayGameEnd( winner, endReasonText ) //checked matches bo3 _globallogic.gsc within reason changed for loop to while loop see github for more info -{ - SetMatchTalkFlag( "EveryoneHearsEveryone", 1 ); - setmatchflag( "cg_drawSpectatorMessages", 0 ); - - if ( winner == "tie" ) - { - maps\mp\_demo::gameResultBookmark( "game_result", level.teamIndex[ "neutral" ], level.teamIndex[ "neutral" ] ); - } - else - { - maps\mp\_demo::gameResultBookmark( "game_result", level.teamIndex[ winner ], level.teamIndex[ "neutral" ] ); - } - - // catching gametype, since DM forceEnd sends winner as player entity, instead of string - players = level.players; - index = 0; - while ( index < players.size ) - { - player = players[index]; - - if ( !isDefined( player.pers["team"] ) ) - { - player [[level.spawnIntermission]]( true ); - player closeMenu(); - player closeInGameMenu(); - index++; - continue; - } - - if ( level.wagerMatch ) - { - if ( level.teamBased ) - player thread [[level.onTeamWagerOutcomeNotify]]( winner, false, endReasonText ); - else - player thread [[level.onWagerOutcomeNotify]]( winner, endReasonText ); - } - else - { - if ( level.teamBased ) - { - player thread [[level.onTeamOutcomeNotify]]( winner, false, endReasonText ); - } - else - { - player thread [[level.onOutcomeNotify]]( winner, false, endReasonText ); - - if ( isDefined( winner ) && player == winner ) - player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "VICTORY" ); - else if ( !level.splitScreen ) - player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "LOSE" ); - } - } - - player setClientUIVisibilityFlag( "hud_visible", 0 ); - player setClientUIVisibilityFlag( "g_compassShowEnemies", 0 ); - index++; - } - - if ( level.teamBased ) - { - thread maps\mp\gametypes_zm\_globallogic_audio::announceGameWinner( winner, level.postRoundTime / 2 ); - - players = level.players; - for ( index = 0; index < players.size; index++ ) - { - player = players[index]; - team = player.pers["team"]; - - if ( level.splitscreen ) - { - if ( winner == "tie" ) - { - player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "DRAW" ); - } - else if ( winner == team ) - { - player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "VICTORY" ); - } - else - { - player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "LOSE" ); - } - } - else - { - if ( winner == "tie" ) - { - player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "DRAW" ); - } - else if ( winner == team ) - { - player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "VICTORY" ); - } - else - { - player maps\mp\gametypes_zm\_globallogic_audio::set_music_on_player( "LOSE" ); - } - } - } - } - - bbPrint( "session_epilogs", "reason %s", endReasonText ); - - // tagTMR: all round data aggregates that cannot be summed from other tables post-runtime - bbPrint( "mpmatchfacts", "gametime %d winner %s killstreakcount %d", gettime(), winner, level.killstreak_counter ); - - roundEndWait( level.postRoundTime, true ); -} - -getEndReasonText() //checked matches bo3 _globallogic.gsc within reason -{ - if ( hitRoundLimit() || hitRoundWinLimit() ) - return game["strings"]["round_limit_reached"]; - else if ( hitScoreLimit() ) - return game["strings"]["score_limit_reached"]; - - if ( level.forcedEnd ) - { - if ( level.hostForcedEnd ) - return &"MP_HOST_ENDED_GAME"; - else - return &"MP_ENDED_GAME"; - } - return game["strings"]["time_limit_reached"]; -} - -resetOutcomeForAllPlayers() //checked matches bo3 _globallogic.gsc within reason -{ - players = level.players; - for ( index = 0; index < players.size; index++ ) - { - player = players[index]; - player notify ( "reset_outcome" ); - } -} - -startNextRound( winner, endReasonText ) //checked matches bo3 _globallogic.gsc within reason -{ - if ( !isOneRound() ) - { - displayRoundEnd( winner, endReasonText ); - - maps\mp\gametypes_zm\_globallogic_utils::executePostRoundEvents(); - - if ( !wasLastRound() ) - { - if ( checkRoundSwitch() ) - { - displayRoundSwitch( winner, endReasonText ); - } - - if ( IsDefined( level.nextRoundIsOvertime ) && level.nextRoundIsOvertime ) - { - if ( !IsDefined( game["overtime_round"] ) ) - { - game["overtime_round"] = 1; - } - else - { - game["overtime_round"]++; - } - } - - SetMatchTalkFlag( "DeadChatWithDead", level.voip.deadChatWithDead ); - SetMatchTalkFlag( "DeadChatWithTeam", level.voip.deadChatWithTeam ); - SetMatchTalkFlag( "DeadHearTeamLiving", level.voip.deadHearTeamLiving ); - SetMatchTalkFlag( "DeadHearAllLiving", level.voip.deadHearAllLiving ); - SetMatchTalkFlag( "EveryoneHearsEveryone", level.voip.everyoneHearsEveryone ); - SetMatchTalkFlag( "DeadHearKiller", level.voip.deadHearKiller ); - SetMatchTalkFlag( "KillersHearVictim", level.voip.killersHearVictim ); - - game["state"] = "playing"; - level.allowBattleChatter = GetGametypeSetting( "allowBattleChatter" ); - map_restart( true ); - return true; - } - } - return false; -} - - -setTopPlayerStats( ) //doesn't exist in bo3 _globallogic.gsc leaving in -{ - if( level.rankedMatch || level.wagerMatch ) - { - placement = level.placement["all"]; - topThreePlayers = min( 3, placement.size ); - - for ( index = 0; index < topThreePlayers; index++ ) - { - if ( level.placement["all"][index].score ) - { - if ( !index ) - { - level.placement["all"][index] AddPlayerStatWithGameType( "TOPPLAYER", 1 ); - level.placement["all"][index] notify( "topplayer" ); - } - else - level.placement["all"][index] notify( "nottopplayer" ); - - level.placement["all"][index] AddPlayerStatWithGameType( "TOP3", 1 ); - level.placement["all"][index] notify( "top3" ); - } - } - - for ( index = 3 ; index < placement.size ; index++ ) - { - level.placement["all"][index] notify( "nottop3" ); - level.placement["all"][index] notify( "nottopplayer" ); - } - - if ( level.teambased ) - { - foreach ( team in level.teams ) - { - setTopTeamStats(team); - } - } - } -} - -setTopTeamStats(team) //doesn't exist in bo3 _globallogic.gsc leaving in -{ - placementTeam = level.placement[team]; - topThreeTeamPlayers = min( 3, placementTeam.size ); - // should have at least 5 players on the team - if ( placementTeam.size < 5 ) - return; - - for ( index = 0; index < topThreeTeamPlayers; index++ ) - { - if ( placementTeam[index].score ) - { - //placementTeam[index] AddPlayerStat( "BASIC_TOP_3_TEAM", 1 ); - placementTeam[index] AddPlayerStatWithGameType( "TOP3TEAM", 1 ); - } - } -} - -getGameLength() //checked matches bo3 _globallogic.gsc within reason -{ - if ( !level.timeLimit || level.forcedEnd ) - { - gameLength = maps\mp\gametypes_zm\_globallogic_utils::getTimePassed() / 1000; - // cap it at 20 minutes to avoid exploiting - gameLength = min( gameLength, 1200 ); - } - else - { - gameLength = level.timeLimit * 60; - } - - return gameLength; -} - -gameHistoryPlayerQuit() //checked matches bo3 _globallogic.gsc within reason -{ - if ( !GameModeIsMode( level.GAMEMODE_PUBLIC_MATCH ) ) - return; - - teamScoreRatio = 0; - self GameHistoryFinishMatch( MATCH_QUIT, 0, 0, 0, 0, teamScoreRatio ); - - if ( IsDefined( self.pers["matchesPlayedStatsTracked"] ) ) - { - gameMode = GetCurrentGameMode(); - self IncrementMatchCompletionStat( gameMode, "played", "quit" ); - - if ( IsDefined( self.pers["matchesHostedStatsTracked"] ) ) - { - self IncrementMatchCompletionStat( gameMode, "hosted", "quit" ); - self.pers["matchesHostedStatsTracked"] = undefined; - } - - self.pers["matchesPlayedStatsTracked"] = undefined; - } - - UploadStats( self ); - - // wait until the player recieves the new stats - wait(1); -} - -endGame( winner, endReasonText ) //checked matches bo3 _globallogic.gsc within reason changed for loop to while loop see github for more info -{ - // return if already ending via host quit or victory - if ( game["state"] == "postgame" || level.gameEnded ) - return; - - if ( isDefined( level.onEndGame ) ) - [[level.onEndGame]]( winner ); - - //This wait was added possibly for wager match issues, but we think is no longer necessary. - //It was creating issues with multiple players calling this fuction when checking game score. In modes like HQ, - //The game score is given to every player on the team that captured the HQ, so when the points are dished out it loops through - //all players on that team and checks if the score limit has been reached. But since this wait occured before the game["state"] - //could be set to "postgame" the check score thread would send the next player that reached the score limit into this function, - //when the following code should only be hit once. If this wait turns out to be needed, we need to try pulling the game["state"] = "postgame"; - //up above the wait. - //wait 0.05; - - if ( !level.wagerMatch ) - setMatchFlag( "enable_popups", 0 ); - if ( !isdefined( level.disableOutroVisionSet ) || level.disableOutroVisionSet == false ) - { - if ( SessionModeIsZombiesGame() && level.forcedEnd ) - { - visionSetNaked( "zombie_last_stand", 2.0 ); - } - else - { - visionSetNaked( "mpOutro", 2.0 ); - } - } - - setmatchflag( "cg_drawSpectatorMessages", 0 ); - setmatchflag( "game_ended", 1 ); - - game["state"] = "postgame"; - level.gameEndTime = getTime(); - level.gameEnded = true; - SetDvar( "g_gameEnded", 1 ); - level.inGracePeriod = false; - level notify ( "game_ended" ); - level.allowBattleChatter = false; - maps\mp\gametypes_zm\_globallogic_audio::flushDialog(); - - if ( !IsDefined( game["overtime_round"] ) || wasLastRound() ) // Want to treat all overtime rounds as a single round - { - game["roundsplayed"]++; - game["roundwinner"][game["roundsplayed"]] = winner; - - //Added "if" check for FFA - Leif - if( level.teambased ) - { - game["roundswon"][winner]++; - } - } - - if ( isdefined( winner ) && isdefined( level.teams[winner] ) ) - { - level.finalKillCam_winner = winner; - } - else - { - level.finalKillCam_winner = "none"; - } - - setGameEndTime( 0 ); // stop/hide the timers - - updatePlacement(); - - updateRankedMatch( winner ); - - // freeze players - players = level.players; - - newTime = getTime(); - gameLength = getGameLength(); - - SetMatchTalkFlag( "EveryoneHearsEveryone", 1 ); - - bbGameOver = 0; - if ( isOneRound() || wasLastRound() ) - { - bbGameOver = 1; - - if ( level.teambased ) - { - if ( winner == "tie" ) - { - recordGameResult( "draw" ); - } - else - { - recordGameResult( winner ); - } - } - else - { - if ( !isDefined( winner ) ) - { - recordGameResult( "draw" ); - } - else - { - recordGameResult( winner.team ); - } - } - } - - index = 0; - while ( index < players.size ) - { - player = players[index]; - player maps\mp\gametypes_zm\_globallogic_player::freezePlayerForRoundEnd(); - player thread roundEndDoF( 4.0 ); - - player maps\mp\gametypes_zm\_globallogic_ui::freeGameplayHudElems(); - - // Update weapon usage stats - player maps\mp\gametypes_zm\_weapons::updateWeaponTimings( newTime ); - - player bbPlayerMatchEnd( gameLength, endReasonText, bbGameOver ); - - if( isPregame() ) - { - index++; - continue; - } - - if( level.rankedMatch || level.wagerMatch || level.leagueMatch ) - { - if ( isDefined( player.setPromotion ) ) - { - player setDStat( "AfterActionReportStats", "lobbyPopup", "promotion" ); - } - else - { - player setDStat( "AfterActionReportStats", "lobbyPopup", "summary" ); - } - } - index++; - } - - maps\mp\_music::setmusicstate( "SILENT" ); - -// temporarily disabling round end sound call to prevent the final killcam from not having sound - if ( !level.inFinalKillcam ) - { -// clientnotify ( "snd_end_rnd" ); - } - - //maps\mp\_gamerep::gameRepUpdateInformationForRound(); -// maps\mp\gametypes_zm\_wager::finalizeWagerRound(); -// maps\mp\gametypes_zm\_gametype_variants::onRoundEnd(); - thread maps\mp\_challenges::roundEnd( winner ); - - if ( startNextRound( winner, endReasonText ) ) - { - return; - } - - /////////////////////////////////////////// - // After this the match is really ending // - /////////////////////////////////////////// - - if ( !isOneRound() ) - { - if ( isDefined( level.onRoundEndGame ) ) - { - winner = [[level.onRoundEndGame]]( winner ); - } - - endReasonText = getEndReasonText(); - } - - skillUpdate( winner, level.teamBased ); - recordLeagueWinner( winner ); - - setTopPlayerStats(); - thread maps\mp\_challenges::gameEnd( winner ); - - if ( ( !isDefined( level.skipGameEnd ) || !level.skipGameEnd ) && IsDefined( winner ) ) - displayGameEnd( winner, endReasonText ); - - if ( isOneRound() ) - { - maps\mp\gametypes_zm\_globallogic_utils::executePostRoundEvents(); - } - - level.intermission = true; - - //maps\mp\_gamerep::gameRepAnalyzeAndReport(); - -// maps\mp\gametypes_zm\_wager::finalizeWagerGame(); - - SetMatchTalkFlag( "EveryoneHearsEveryone", 1 ); - - //regain players array since some might've disconnected during the wait above - players = level.players; - for ( index = 0; index < players.size; index++ ) - { - player = players[index]; - - recordPlayerStats( player, "presentAtEnd", 1 ); - - player closeMenu(); - player closeInGameMenu(); - player notify ( "reset_outcome" ); - player thread [[level.spawnIntermission]](); - player setClientUIVisibilityFlag( "hud_visible", 1 ); - } - //Eckert - Fading out sound - level notify ( "sfade"); - logString( "game ended" ); - - if ( !isDefined( level.skipGameEnd ) || !level.skipGameEnd ) - wait 5.0; - - exitLevel( false ); - -} - -bbPlayerMatchEnd( gameLength, endReasonString, gameOver ) // self == player //checked matches bo3 _globallogic.gsc within reason -{ - playerRank = getPlacementForPlayer( self ); - - totalTimePlayed = 0; - if ( isDefined( self.timePlayed ) && isDefined( self.timePlayed["total"] ) ) - { - totalTimePlayed = self.timePlayed["total"]; - if ( totalTimePlayed > gameLength ) - { - totalTimePlayed = gameLength; - } - } - - xuid = self GetXUID(); - - bbPrint( "mpplayermatchfacts", "score %d momentum %d endreason %s sessionrank %d playtime %d xuid %s gameover %d team %s", - self.pers["score"], - self.pers["momentum"], - endReasonString, - playerRank, - totalTimePlayed, - xuid, - gameOver, - self.pers["team"] ); -} - -roundEndWait( defaultDelay, matchBonus ) //checked matches bo3 _globallogic.gsc within reason changed for loop to while loop see github for more info -{ - notifiesDone = false; - while ( !notifiesDone ) - { - players = level.players; - notifiesDone = true; - index = 0; - while ( index < players.size ) - { - if ( !isDefined( players[index].doingNotify ) || !players[index].doingNotify ) - { - index++; - continue; - } - - notifiesDone = false; - index++; - } - wait ( 0.5 ); - } - - if ( !matchBonus ) - { - wait ( defaultDelay ); - level notify ( "round_end_done" ); - return; - } - - wait ( defaultDelay / 2 ); - level notify ( "give_match_bonus" ); - wait ( defaultDelay / 2 ); - - notifiesDone = false; - while ( !notifiesDone ) - { - players = level.players; - notifiesDone = true; - index = 0; - while ( index < players.size ) - { - if ( !isDefined( players[index].doingNotify ) || !players[index].doingNotify ) - index++; - continue; - - notifiesDone = false; - index++; - } - wait ( 0.5 ); - } - - level notify ( "round_end_done" ); -} - - -roundEndDOF( time ) //checked matches bo3 _globallogic.gsc within reason -{ - self setDepthOfField( 0, 128, 512, 4000, 6, 1.8 ); -} - - -checkTimeLimit() //checked matches bo3 _globallogic.gsc within reason -{ - if ( isDefined( level.timeLimitOverride ) && level.timeLimitOverride ) - return; - - if ( game["state"] != "playing" ) - { - setGameEndTime( 0 ); - return; - } - - if ( level.timeLimit <= 0 ) - { - setGameEndTime( 0 ); - return; - } - - if ( level.inPrematchPeriod ) - { - setGameEndTime( 0 ); - return; - } - - if ( level.timerStopped ) - { - setGameEndTime( 0 ); - return; - } - - if ( !isdefined( level.startTime ) ) - return; - - timeLeft = maps\mp\gametypes_zm\_globallogic_utils::getTimeRemaining(); - - // want this accurate to the millisecond - setGameEndTime( getTime() + int(timeLeft) ); - - if ( timeLeft > 0 ) - return; - - [[level.onTimeLimit]](); -} - -allTeamsUnderScoreLimit() //checked matches bo3 _globallogic.gsc within reason -{ - foreach ( team in level.teams ) - { - if ( game["teamScores"][team] >= level.scoreLimit ) - return false; - } - - return true; -} - -checkScoreLimit() //checked matches bo3 _globallogic.gsc within reason -{ - if ( game["state"] != "playing" ) - return false; - - if ( level.scoreLimit <= 0 ) - return false; - - if ( level.teamBased ) - { - if( allTeamsUnderScoreLimit() ) - return false; - } - else - { - if ( !isPlayer( self ) ) - return false; - - if ( self.score < level.scoreLimit ) - return false; - } - - [[level.onScoreLimit]](); -} - - -updateGameTypeDvars() //checked matches bo3 _globallogic.gsc within reason -{ - level endon ( "game_ended" ); - - while ( game["state"] == "playing" ) - { - roundlimit = clamp( GetGametypeSetting( "roundLimit" ), level.roundLimitMin, level.roundLimitMax ); - if ( roundlimit != level.roundlimit ) - { - level.roundlimit = roundlimit; - level notify ( "update_roundlimit" ); - } - - timeLimit = [[level.getTimeLimit]](); - if ( timeLimit != level.timeLimit ) - { - level.timeLimit = timeLimit; - SetDvar( "ui_timelimit", level.timeLimit ); - level notify ( "update_timelimit" ); - } - thread checkTimeLimit(); - - scoreLimit = clamp( GetGametypeSetting( "scoreLimit" ), level.scoreLimitMin, level.scoreLimitMax ); - if ( scoreLimit != level.scoreLimit ) - { - level.scoreLimit = scoreLimit; - SetDvar( "ui_scorelimit", level.scoreLimit ); - level notify ( "update_scorelimit" ); - } - thread checkScoreLimit(); - - // make sure we check time limit right when game ends - if ( isdefined( level.startTime ) ) - { - if ( maps\mp\gametypes_zm\_globallogic_utils::getTimeRemaining() < 3000 ) - { - wait .1; - continue; - } - } - wait 1; - } -} - - -removeDisconnectedPlayerFromPlacement() //checked matches bo3 _globallogic.gsc within reason -{ - offset = 0; - numPlayers = level.placement["all"].size; - found = false; - for ( i = 0; i < numPlayers; i++ ) - { - if ( level.placement["all"][i] == self ) - found = true; - - if ( found ) - level.placement["all"][i] = level.placement["all"][ i + 1 ]; - } - if ( !found ) - return; - - level.placement["all"][ numPlayers - 1 ] = undefined; - //assert( level.placement["all"].size == numPlayers - 1 ); - /* - /# - maps\mp\gametypes_zm\_globallogic_utils::assertProperPlacement(); - #/ - */ - updateTeamPlacement(); - - if ( level.teamBased ) - return; - - numPlayers = level.placement["all"].size; - for ( i = 0; i < numPlayers; i++ ) - { - player = level.placement["all"][i]; - player notify( "update_outcome" ); - } - -} - -updatePlacement() //checked matches bo3 _globallogic.gsc within reason -{ - - if ( !level.players.size ) - return; - - level.placement["all"] = []; - for ( index = 0; index < level.players.size; index++ ) - { - if ( isdefined( level.teams[ level.players[index].team ] ) ) - level.placement["all"][level.placement["all"].size] = level.players[index]; - } - - placementAll = level.placement["all"]; - - for ( i = 1; i < placementAll.size; i++ ) - { - player = placementAll[i]; - playerScore = player.score; - } - - level.placement["all"] = placementAll; - /* - /# - maps\mp\gametypes_zm\_globallogic_utils::assertProperPlacement(); - #/ - */ - updateTeamPlacement(); - -} - - -updateTeamPlacement() //checked matches bo3 _globallogic.gsc within reason -{ - foreach( team in level.teams ) - { - placement[team] = []; - } - placement["spectator"] = []; - - if ( !level.teamBased ) - return; - - placementAll = level.placement["all"]; - placementAllSize = placementAll.size; - - for ( i = 0; i < placementAllSize; i++ ) - { - player = placementAll[i]; - team = player.pers["team"]; - - placement[team][ placement[team].size ] = player; - } - - foreach( team in level.teams ) - { - level.placement[team] = placement[team]; - } -} - -getPlacementForPlayer( player ) //checked matches bo3 _globallogic.gsc within reason -{ - updatePlacement(); - - playerRank = -1; - placement = level.placement["all"]; - for ( placementIndex = 0; placementIndex < placement.size; placementIndex++ ) - { - if ( level.placement["all"][placementIndex] == player ) - { - playerRank = (placementIndex + 1); - break; - } - } - - return playerRank; -} - -sortDeadPlayers( team ) //checked matches bo3 _globallogic.gsc within reason -{ - // only need to sort if we are running queued respawn - if ( !level.playerQueuedRespawn ) - return; - - // sort by death time - for ( i = 1; i < level.deadPlayers[team].size; i++ ) - { - player = level.deadPlayers[team][i]; - for ( j = i - 1; j >= 0 && player.deathTime < level.deadPlayers[team][j].deathTime; j-- ) - level.deadPlayers[team][j + 1] = level.deadPlayers[team][j]; - level.deadPlayers[team][j + 1] = player; - } - - for ( i = 0; i < level.deadPlayers[team].size; i++ ) - { - if ( level.deadPlayers[team][i].spawnQueueIndex != i ) - { - level.spawnQueueModified[team] = true; - } - level.deadPlayers[team][i].spawnQueueIndex = i; - } -} - -totalAliveCount() //checked matches bo3 _globallogic.gsc within reason -{ - count = 0; - foreach( team in level.teams ) - { - count += level.aliveCount[team]; - } - return count; -} - -totalPlayerLives() //checked matches bo3 _globallogic.gsc within reason -{ - count = 0; - foreach( team in level.teams ) - { - count += level.playerLives[team]; - } - return count; -} - -totalPlayerCount() //doesn't exist in bo3 _globallogic.gsc leaving in -{ - count = 0; - foreach( team in level.teams ) - { - count += level.playerCount[team]; - } - return count; -} - -initTeamVariables( team ) //checked matches bo3 _globallogic.gsc within reason -{ - - if ( !isdefined( level.aliveCount ) ) - level.aliveCount = []; - - level.aliveCount[team] = 0; - level.lastAliveCount[team] = 0; - - level.everExisted[team] = false; - level.waveDelay[team] = 0; - level.lastWave[team] = 0; - level.wavePlayerSpawnIndex[team] = 0; - - resetTeamVariables( team ); -} - -resetTeamVariables( team ) //checked matches bo3 _globallogic.gsc within reason -{ - level.playerCount[team] = 0; - level.botsCount[team] = 0; - level.lastAliveCount[team] = level.aliveCount[team]; - level.aliveCount[team] = 0; - level.playerLives[team] = 0; - level.alivePlayers[team] = []; - level.deadPlayers[team] = []; - level.squads[team] = []; - level.spawnQueueModified[team] = false; -} - -updateTeamStatus() //checked matches bo3 _globallogic.gsc within reason changed at own discretion -{ - // run only once per frame, at the end of the frame. - level notify("updating_team_status"); - level endon("updating_team_status"); - level endon ( "game_ended" ); - waittillframeend; - - wait 0; // Required for Callback_PlayerDisconnect to complete before updateTeamStatus can execute - - if ( game["state"] == "postgame" ) - return; - - resetTimeout(); - - foreach( team in level.teams ) - { - resetTeamVariables( team ); - } - - level.activePlayers = []; - - players = level.players; - for ( i = 0; i < players.size; i++ ) - { - player = players[i]; - - team = player.team; - class = player.class; - - if ( team != "spectator" && isDefined( class ) && class != "" ) - { - level.playerCount[team]++; - - if( isDefined( player.pers["isBot"] ) ) - level.botsCount[team]++; - - if ( player.sessionstate == "playing" ) - { - level.aliveCount[team]++; - level.playerLives[team]++; - player.spawnQueueIndex = -1; - - if ( isAlive( player ) ) - { - level.alivePlayers[team][level.alivePlayers[team].size] = player; - level.activeplayers[ level.activeplayers.size ] = player; - } - else - { - level.deadPlayers[team][level.deadPlayers[team].size] = player; - } - } - else - { - level.deadPlayers[team][level.deadPlayers[team].size] = player; - if ( player maps\mp\gametypes_zm\_globallogic_spawn::maySpawn() ) - level.playerLives[team]++; - } - } - } - - totalAlive = totalAliveCount(); - - if ( totalAlive > level.maxPlayerCount ) - level.maxPlayerCount = totalAlive; - - foreach( team in level.teams ) - { - if ( level.aliveCount[team] ) - level.everExisted[team] = true; - - sortDeadPlayers( team ); - } - - level updateGameEvents(); -} - -checkTeamScoreLimitSoon( team ) //checked matches bo3 _globallogic.gsc within reason -{ - //assert( IsDefined( team ) ); - - if ( level.scoreLimit <= 0 ) - return; - - if ( !level.teamBased ) - return; - - // Give the data a minute to converge/settle - if ( maps\mp\gametypes_zm\_globallogic_utils::getTimePassed() < ( 60 * 1000 ) ) - return; - - timeLeft = maps\mp\gametypes_zm\_globallogic_utils::getEstimatedTimeUntilScoreLimit( team ); - - if ( timeLeft < 1 ) - { - level notify( "match_ending_soon", "score" ); - // maps\mp\_gameadvertisement::teamScoreLimitSoon( true ); - } -} - -checkPlayerScoreLimitSoon() //checked matches bo3 _globallogic.gsc within reason -{ - //assert( IsPlayer( self ) ); - - if ( level.scoreLimit <= 0 ) - return; - - if ( level.teamBased ) - return; - - // Give the data a minute to converge/settle - if ( maps\mp\gametypes_zm\_globallogic_utils::getTimePassed() < ( 60 * 1000 ) ) - return; - - timeLeft = maps\mp\gametypes_zm\_globallogic_utils::getEstimatedTimeUntilScoreLimit( undefined ); - - if ( timeLeft < 1 ) - { - level notify( "match_ending_soon", "score" ); - // maps\mp\_gameadvertisement::teamScoreLimitSoon( true ); - } -} - -timeLimitClock() //checked doesn't exist in bo3 _globallogic.gsc leaving in -{ - level endon ( "game_ended" ); - - wait .05; - - clockObject = spawn( "script_origin", (0,0,0) ); - - while ( game["state"] == "playing" ) - { - if ( !level.timerStopped && level.timeLimit ) - { - timeLeft = maps\mp\gametypes_zm\_globallogic_utils::getTimeRemaining() / 1000; - timeLeftInt = int(timeLeft + 0.5); // adding .5 and flooring rounds it. - - if ( timeLeftInt == 601 ) - clientnotify ( "notify_10" ); - - if ( timeLeftInt == 301 ) - clientnotify ( "notify_5" ); - - if ( timeLeftInt == 60 ) - clientnotify ( "notify_1" ); - - if ( timeLeftInt == 12 ) - clientnotify ( "notify_count" ); - - if ( timeLeftInt >= 40 && timeLeftInt <= 60 ) - level notify ( "match_ending_soon", "time" ); - - if ( timeLeftInt >= 30 && timeLeftInt <= 40 ) - level notify ( "match_ending_pretty_soon", "time" ); - - if( timeLeftInt <= 32 ) - level notify ( "match_ending_vox" ); - - if ( (timeLeftInt <= 30 && timeLeftInt % 2 == 0) || timeLeftInt <= 10 ) - { - level notify ( "match_ending_very_soon", "time" ); - // don't play a tick at exactly 0 seconds, that's when something should be happening! - if ( timeLeftInt == 0 ) - break; - - clockObject playSound( "mpl_ui_timer_countdown" ); - } - - // synchronize to be exactly on the second - if ( timeLeft - floor(timeLeft) >= .05 ) - wait timeLeft - floor(timeLeft); - } - - wait ( 1.0 ); - } -} - -timeLimitClock_Intermission( waitTime ) //checked doesn't exist in bo3 _globallogic.gsc leaving in -{ - setGameEndTime( getTime() + int(waitTime*1000) ); - clockObject = spawn( "script_origin", (0,0,0) ); - - if ( waitTime >= 10.0 ) - wait ( waitTime - 10.0 ); - - for ( ;; ) - { - clockObject playSound( "mpl_ui_timer_countdown" ); - wait ( 1.0 ); - } -} - - -startGame() //checked matches bo3 _globallogic.gsc within reason -{ - thread maps\mp\gametypes_zm\_globallogic_utils::gameTimer(); - level.timerStopped = false; - // RF, disabled this, as it is not required anymore. - //thread maps\mp\gametypes_zm\_spawnlogic::spawnPerFrameUpdate(); - - SetMatchTalkFlag( "DeadChatWithDead", level.voip.deadChatWithDead ); - SetMatchTalkFlag( "DeadChatWithTeam", level.voip.deadChatWithTeam ); - SetMatchTalkFlag( "DeadHearTeamLiving", level.voip.deadHearTeamLiving ); - SetMatchTalkFlag( "DeadHearAllLiving", level.voip.deadHearAllLiving ); - SetMatchTalkFlag( "EveryoneHearsEveryone", level.voip.everyoneHearsEveryone ); - SetMatchTalkFlag( "DeadHearKiller", level.voip.deadHearKiller ); - SetMatchTalkFlag( "KillersHearVictim", level.voip.killersHearVictim ); - - prematchPeriod(); - level notify("prematch_over"); - - thread timeLimitClock(); - thread gracePeriod(); - thread watchMatchEndingSoon(); - - thread maps\mp\gametypes_zm\_globallogic_audio::musicController(); - -// thread maps\mp\gametypes_zm\_gametype_variants::onRoundBegin(); - - recordMatchBegin(); -} - - -waitForPlayers() //checked matches bo3 _globallogic.gsc within reason -{ - /* - if ( level.teamBased ) - while( !level.everExisted[ "axis" ] || !level.everExisted[ "allies" ] ) - wait ( 0.05 ); - else - while ( level.maxPlayerCount < 2 ) - wait ( 0.05 ); - */ -} - -prematchPeriod() //checked matches bo3 _globallogic.gsc within reason -{ - setMatchFlag( "hud_hardcore", level.hardcoreMode ); - - level endon( "game_ended" ); - - if ( level.prematchPeriod > 0 ) - { - thread matchStartTimer(); - - waitForPlayers(); - - wait ( level.prematchPeriod ); - } - else - { - matchStartTimerSkip(); - - wait 0.05; - } - - level.inPrematchPeriod = false; - - for ( index = 0; index < level.players.size; index++ ) - { - level.players[index] freeze_player_controls( false ); - level.players[index] enableWeapons(); - } - -// maps\mp\gametypes_zm\_wager::prematchPeriod(); - - if ( game["state"] != "playing" ) - return; -} - -gracePeriod() //checked matches bo3 _globallogic.gsc within reason -{ - level endon("game_ended"); - - if ( IsDefined( level.gracePeriodFunc ) ) - { - [[ level.gracePeriodFunc ]](); - } - else - { - wait ( level.gracePeriod ); - } - - level notify ( "grace_period_ending" ); - wait ( 0.05 ); - - level.inGracePeriod = false; - - if ( game["state"] != "playing" ) - return; - - if ( level.numLives ) - { - // Players on a team but without a weapon show as dead since they can not get in this round - players = level.players; - - for ( i = 0; i < players.size; i++ ) - { - player = players[i]; - - if ( !player.hasSpawned && player.sessionteam != "spectator" && !isAlive( player ) ) - player.statusicon = "hud_status_dead"; - } - } - - level thread updateTeamStatus(); -} - -watchMatchEndingSoon() //checked matches bo3 _globallogic.gsc within reason -{ - SetDvar( "xblive_matchEndingSoon", 0 ); - level waittill( "match_ending_soon", reason ); - SetDvar( "xblive_matchEndingSoon", 1 ); -} - -assertTeamVariables( ) //checked does not match bo3 _globallogic.gsc did not change -{ - // these are defined in the teamset file - if ( !level.createFX_enabled && !SessionModeIsZombiesGame() ) - { - foreach ( team in level.teams ) - { - /* - Assert( IsDefined( game["strings"][ team + "_win"] ) ); - Assert( IsDefined( game["strings"][ team + "_win_round"] ) ); - Assert( IsDefined( game["strings"][ team + "_mission_accomplished"] ) ); - Assert( IsDefined( game["strings"][ team + "_eliminated"] ) ); - Assert( IsDefined( game["strings"][ team + "_forfeited"] ) ); - Assert( IsDefined( game["strings"][ team + "_name"] ) ); - Assert( IsDefined( game["music"]["spawn_" + team] ) ); - Assert( IsDefined( game["music"]["victory_" + team] ) ); - Assert( IsDefined( game["icons"][team] ) ); - Assert( IsDefined( game["voice"][team] ) ); - */ - } - } -} - -anyTeamHasWaveDelay() //checked matches bo3 _globallogic.gsc within reason -{ - foreach ( team in level.teams ) - { - if ( level.waveDelay[team] ) - return true; - } - - return false; -} - -Callback_StartGameType() //checked matches bo3 _globallogic.gsc within reason -{ - level.prematchPeriod = 0; - level.intermission = false; - - setmatchflag( "cg_drawSpectatorMessages", 1 ); - setmatchflag( "game_ended", 0 ); - - if ( !isDefined( game["gamestarted"] ) ) - { - // defaults if not defined in level script - if ( !isDefined( game["allies"] ) ) - game["allies"] = "seals"; - if ( !isDefined( game["axis"] ) ) - game["axis"] = "pmc"; - if ( !isDefined( game["attackers"] ) ) - game["attackers"] = "allies"; - if ( !isDefined( game["defenders"] ) ) - game["defenders"] = "axis"; - - // if this hits the teams are not setup right - //assert( game["attackers"] != game["defenders"] ); - - // TODO MTEAM - need to update this valid team - foreach( team in level.teams ) - { - if ( !isDefined( game[team] ) ) - game[team] = "pmc"; - } - - if ( !isDefined( game["state"] ) ) - game["state"] = "playing"; - - precacheRumble( "damage_heavy" ); - precacheRumble( "damage_light" ); - - precacheShader( "white" ); - precacheShader( "black" ); - - makeDvarServerInfo( "scr_allies", "marines" ); - makeDvarServerInfo( "scr_axis", "nva" ); - - makeDvarServerInfo( "cg_thirdPersonAngle", 354 ); - - SetDvar( "cg_thirdPersonAngle", 354 ); - - game["strings"]["press_to_spawn"] = &"PLATFORM_PRESS_TO_SPAWN"; - if ( level.teamBased ) - { - game["strings"]["waiting_for_teams"] = &"MP_WAITING_FOR_TEAMS"; - game["strings"]["opponent_forfeiting_in"] = &"MP_OPPONENT_FORFEITING_IN"; - } - else - { - game["strings"]["waiting_for_teams"] = &"MP_WAITING_FOR_PLAYERS"; - game["strings"]["opponent_forfeiting_in"] = &"MP_OPPONENT_FORFEITING_IN"; - } - game["strings"]["match_starting_in"] = &"MP_MATCH_STARTING_IN"; - game["strings"]["spawn_next_round"] = &"MP_SPAWN_NEXT_ROUND"; - game["strings"]["waiting_to_spawn"] = &"MP_WAITING_TO_SPAWN"; - game["strings"]["waiting_to_spawn_ss"] = &"MP_WAITING_TO_SPAWN_SS"; - //game["strings"]["waiting_to_safespawn"] = &"MP_WAITING_TO_SAFESPAWN"; - game["strings"]["you_will_spawn"] = &"MP_YOU_WILL_RESPAWN"; - game["strings"]["match_starting"] = &"MP_MATCH_STARTING"; - game["strings"]["change_class"] = &"MP_CHANGE_CLASS_NEXT_SPAWN"; - game["strings"]["last_stand"] = &"MPUI_LAST_STAND"; - - game["strings"]["cowards_way"] = &"PLATFORM_COWARDS_WAY_OUT"; - - game["strings"]["tie"] = &"MP_MATCH_TIE"; - game["strings"]["round_draw"] = &"MP_ROUND_DRAW"; - - game["strings"]["enemies_eliminated"] = &"MP_ENEMIES_ELIMINATED"; - game["strings"]["score_limit_reached"] = &"MP_SCORE_LIMIT_REACHED"; - game["strings"]["round_limit_reached"] = &"MP_ROUND_LIMIT_REACHED"; - game["strings"]["time_limit_reached"] = &"MP_TIME_LIMIT_REACHED"; - game["strings"]["players_forfeited"] = &"MP_PLAYERS_FORFEITED"; - - //assertTeamVariables(); - - [[level.onPrecacheGameType]](); - - game["gamestarted"] = true; - - game["totalKills"] = 0; - - foreach( team in level.teams ) - { - game["teamScores"][team] = 0; - game["totalKillsTeam"][team] = 0; - } - - if ( !level.splitscreen && !isPreGame() ) - level.prematchPeriod = GetGametypeSetting( "prematchperiod" ); - - if ( GetDvarint( "xblive_clanmatch" ) != 0 ) - { - // TODO MTEAM is this code used anymore? - foreach( team in level.teams ) - { - game["icons"][team] = "composite_emblem_team_axis"; - } - - game["icons"]["allies"] = "composite_emblem_team_allies"; - game["icons"]["axis"] = "composite_emblem_team_axis"; - } - } - - if(!isdefined(game["timepassed"])) - game["timepassed"] = 0; - - if(!isdefined(game["roundsplayed"])) - game["roundsplayed"] = 0; - SetRoundsPlayed( game["roundsplayed"] ); - - if(!isdefined(game["roundwinner"] )) - game["roundwinner"] = []; - - if(!isdefined(game["roundswon"] )) - game["roundswon"] = []; - - if(!isdefined(game["roundswon"]["tie"] )) - game["roundswon"]["tie"] = 0; - - foreach ( team in level.teams ) - { - if(!isdefined(game["roundswon"][team] )) - game["roundswon"][team] = 0; - - level.teamSpawnPoints[team] = []; - level.spawn_point_team_class_names[team] = []; - } - - level.skipVote = false; - level.gameEnded = false; - SetDvar( "g_gameEnded", 0 ); - - level.objIDStart = 0; - level.forcedEnd = false; - level.hostForcedEnd = false; - - level.hardcoreMode = GetGametypeSetting( "hardcoreMode" ); - if ( level.hardcoreMode ) - { - logString( "game mode: hardcore" ); - - //set up friendly fire delay for hardcore - if( !isDefined(level.friendlyFireDelayTime) ) - level.friendlyFireDelayTime = 0; - } - - if ( GetDvar( "scr_max_rank" ) == "" ) - SetDvar( "scr_max_rank", "0" ); - level.rankCap = GetDvarint( "scr_max_rank" ); - - if ( GetDvar( "scr_min_prestige" ) == "" ) - { - SetDvar( "scr_min_prestige", "0" ); - } - level.minPrestige = GetDvarint( "scr_min_prestige" ); - - // this gets set to false when someone takes damage or a gametype-specific event happens. - level.useStartSpawns = true; - - level.roundScoreCarry = GetGametypeSetting( "roundscorecarry" ); - - level.allowHitMarkers = GetGametypeSetting( "allowhitmarkers" ); - level.playerQueuedRespawn = GetGametypeSetting( "playerQueuedRespawn" ); - level.playerForceRespawn = GetGametypeSetting( "playerForceRespawn" ); - - level.perksEnabled = GetGametypeSetting( "perksEnabled" ); - level.disableAttachments = GetGametypeSetting( "disableAttachments" ); - level.disableTacInsert = GetGametypeSetting( "disableTacInsert" ); - level.disableCAC = GetGametypeSetting( "disableCAC" ); - level.disableWeaponDrop = GetGametypeSetting( "disableweapondrop" ); - level.onlyHeadShots = GetGametypeSetting( "onlyHeadshots" ); - - // set to 0 to disable - level.minimumAllowedTeamKills = GetGametypeSetting( "teamKillPunishCount" ) - 1; // punishment starts at the next one - level.teamKillReducedPenalty = GetGametypeSetting( "teamKillReducedPenalty" ); - level.teamKillPointLoss = GetGametypeSetting( "teamKillPointLoss" ); - level.teamKillSpawnDelay = GetGametypeSetting( "teamKillSpawnDelay" ); - - level.deathPointLoss = GetGametypeSetting( "deathPointLoss" ); - level.leaderBonus = GetGametypeSetting( "leaderBonus" ); - level.forceRadar = GetGametypeSetting( "forceRadar" ); - level.playerSprintTime = GetGametypeSetting( "playerSprintTime" ); - level.bulletDamageScalar = GetGametypeSetting( "bulletDamageScalar" ); - - level.playerMaxHealth = GetGametypeSetting( "playerMaxHealth" ); - level.playerHealthRegenTime = GetGametypeSetting( "playerHealthRegenTime" ); - - level.playerRespawnDelay = GetGametypeSetting( "playerRespawnDelay" ); - level.playerObjectiveHeldRespawnDelay = GetGametypeSetting( "playerObjectiveHeldRespawnDelay" ); - level.waveRespawnDelay = GetGametypeSetting( "waveRespawnDelay" ); - - level.spectateType = GetGametypeSetting( "spectateType" ); - - level.voip = SpawnStruct(); - level.voip.deadChatWithDead = GetGametypeSetting( "voipDeadChatWithDead" ); - level.voip.deadChatWithTeam = GetGametypeSetting( "voipDeadChatWithTeam" ); - level.voip.deadHearAllLiving = GetGametypeSetting( "voipDeadHearAllLiving" ); - level.voip.deadHearTeamLiving = GetGametypeSetting( "voipDeadHearTeamLiving" ); - level.voip.everyoneHearsEveryone = GetGametypeSetting( "voipEveryoneHearsEveryone" ); - level.voip.deadHearKiller = GetGametypeSetting( "voipDeadHearKiller" ); - level.voip.killersHearVictim = GetGametypeSetting( "voipKillersHearVictim" ); - - if( GetDvar( "r_reflectionProbeGenerate" ) == "1" ) - level waittill( "eternity" ); - - if( SessionModeIsZombiesGame() ) - { - level.prematchPeriod = 0; - - - //thread maps\mp\gametypes_zm\_persistence::init(); - level.persistentDataInfo = []; - level.maxRecentStats = 10; - level.maxHitLocations = 19; - level.globalShotsFired = 0; - // thread maps\mp\gametypes_zm\_class::init(); - - - // thread maps\mp\gametypes_zm\_menus::init(); - thread maps\mp\gametypes_zm\_hud::init(); - thread maps\mp\gametypes_zm\_serversettings::init(); - thread maps\mp\gametypes_zm\_clientids::init(); - // thread maps\mp\teams\_teams::init(); - thread maps\mp\gametypes_zm\_weaponobjects::init(); - thread maps\mp\gametypes_zm\_scoreboard::init(); - // thread maps\mp\gametypes_zm\_killcam::init(); - thread maps\mp\gametypes_zm\_shellshock::init(); - // thread maps\mp\gametypes_zm\_deathicons::init(); - // thread maps\mp\gametypes_zm\_damagefeedback::init(); - thread maps\mp\gametypes_zm\_spectating::init(); - // thread maps\mp\gametypes_zm\_objpoints::init(); - thread maps\mp\gametypes_zm\_gameobjects::init(); - thread maps\mp\gametypes_zm\_spawnlogic::init(); - // thread maps\mp\gametypes_zm\_battlechatter_mp::init(); - // FIX ME thread maps\mp\killstreaks\_killstreaks::init(); - thread maps\mp\gametypes_zm\_globallogic_audio::init(); - //thread maps\mp\gametypes_zm\_wager::init(); - // thread maps\mp\gametypes_zm\_gametype_variants::init(); - //thread maps\mp\bots\_bot::init(); - //thread maps\mp\_decoy::init(); - } - -// if ( level.teamBased ) -// thread maps\mp\gametypes_zm\_friendicons::init(); - - thread maps\mp\gametypes_zm\_hud_message::init(); - //thread maps\mp\_multi_extracam::init(); - - stringNames = getArrayKeys( game["strings"] ); - for ( index = 0; index < stringNames.size; index++ ) - precacheString( game[ "strings" ][ stringNames[ index ] ] ); - - foreach( team in level.teams ) - { - initTeamVariables( team ); - } - - level.maxPlayerCount = 0; - level.activePlayers = []; - - level.allowAnnouncer = GetGametypeSetting( "allowAnnouncer" ); - - if ( !isDefined( level.timeLimit ) ) - registerTimeLimit( 1, 1440 ); - - if ( !isDefined( level.scoreLimit ) ) - registerScoreLimit( 1, 500 ); - - if ( !isDefined( level.roundLimit ) ) - registerRoundLimit( 0, 10 ); - - if ( !isDefined( level.roundWinLimit ) ) - registerRoundWinLimit( 0, 10 ); - - // The order the following functions are registered in are the order they will get called -// maps\mp\gametypes_zm\_globallogic_utils::registerPostRoundEvent( maps\mp\gametypes_zm\_killcam::postRoundFinalKillcam ); -// maps\mp\gametypes_zm\_globallogic_utils::registerPostRoundEvent( maps\mp\gametypes_zm\_wager::postRoundSideBet ); - - makeDvarServerInfo( "ui_scorelimit" ); - makeDvarServerInfo( "ui_timelimit" ); - makeDvarServerInfo( "ui_allow_classchange", GetDvar( "ui_allow_classchange" ) ); - - waveDelay = level.waveRespawnDelay; - if ( waveDelay && !isPreGame() ) - { - foreach ( team in level.teams ) - { - level.waveDelay[team] = waveDelay; - level.lastWave[team] = 0; - } - - level thread [[level.waveSpawnTimer]](); - } - - level.inPrematchPeriod = true; - - if ( level.prematchPeriod > 2.0 ) - level.prematchPeriod = level.prematchPeriod + (randomFloat( 4 ) - 2); // live host obfuscation - - if ( level.numLives || anyTeamHasWaveDelay() || level.playerQueuedRespawn ) - level.gracePeriod = 15; - else - level.gracePeriod = 5; - - level.inGracePeriod = true; - - level.roundEndDelay = 5; - level.halftimeRoundEndDelay = 3; - - maps\mp\gametypes_zm\_globallogic_score::updateAllTeamScores(); - - level.killstreaksenabled = 1; - - if ( GetDvar( "scr_game_rankenabled" ) == "" ) - SetDvar( "scr_game_rankenabled", true ); - level.rankEnabled = GetDvarint( "scr_game_rankenabled" ); - - if ( GetDvar( "scr_game_medalsenabled" ) == "" ) - SetDvar( "scr_game_medalsenabled", true ); - level.medalsEnabled = GetDvarint( "scr_game_medalsenabled" ); - - if( level.hardcoreMode && level.rankedMatch && GetDvar( "scr_game_friendlyFireDelay" ) == "" ) - SetDvar( "scr_game_friendlyFireDelay", true ); - level.friendlyFireDelay = GetDvarint( "scr_game_friendlyFireDelay" ); - - // level gametype and features globals should be defaulted before this, and level.onstartgametype should reset them if desired - if(GetDvar("createfx") == "") - { - [[level.onStartGameType]](); - } - - // disable killstreaks for custom game modes - if( GetDvarInt( "custom_killstreak_mode" ) == 1 ) - { - level.killstreaksenabled = 0; - } - - // this must be after onstartgametype for scr_showspawns to work when set at start of game -// /# -// thread maps\mp\gametypes_zm\_dev::init(); -// #/ - /* -/# - PrintLn( "Globallogic Callback_StartGametype() isPregame() = " + isPregame() + "\n" ); -#/ - */ - //level thread maps\mp\gametypes_zm\_killcam::doFinalKillcam(); - - thread startGame(); - level thread updateGameTypeDvars(); - /* -/# - if( GetDvarint( "scr_writeconfigstrings" ) == 1 ) - { - level.skipGameEnd = true; - level.roundLimit = 1; - - // let things settle - wait(1); -// level.forcedEnd = true; - thread forceEnd( false ); -// thread endgame( "tie","" ); - } - if( GetDvarint( "scr_hostmigrationtest" ) == 1 ) - { - thread ForceDebugHostMigration(); - } -#/ - */ -} - - - -ForceDebugHostMigration() //doesn't exist in bo3 _globallogic.gsc leaving in -{ - /* - /# - while (1) - { - maps\mp\gametypes_zm\_hostmigration::waitTillHostMigrationDone(); - wait(60); - starthostmigration(); - maps\mp\gametypes_zm\_hostmigration::waitTillHostMigrationDone(); - //thread forceEnd( false ); - } - #/ - */ -} - - -registerFriendlyFireDelay( dvarString, defaultValue, minValue, maxValue ) //checked matches bo3 _globallogic.gsc within reason -{ - dvarString = ("scr_" + dvarString + "_friendlyFireDelayTime"); - if ( getDvar( dvarString ) == "" ) - { - setDvar( dvarString, defaultValue ); - } - - if ( getDvarInt( dvarString ) > maxValue ) - { - setDvar( dvarString, maxValue ); - } - else if ( getDvarInt( dvarString ) < minValue ) - { - setDvar( dvarString, minValue ); - } - - level.friendlyFireDelayTime = getDvarInt( dvarString ); -} - -checkRoundSwitch() //checked matches bo3 _globallogic.gsc within reason -{ - if ( !isdefined( level.roundSwitch ) || !level.roundSwitch ) - { - return false; - } - if ( !isdefined( level.onRoundSwitch ) ) - { - return false; - } - - //assert( game["roundsplayed"] > 0 ); - - if ( game["roundsplayed"] % level.roundswitch == 0 ) - { - [[level.onRoundSwitch]](); - return true; - } - - return false; -} - - -listenForGameEnd() //checked matches bo3 _globallogic.gsc within reason -{ - self waittill( "host_sucks_end_game" ); - //if ( level.console ) - // endparty(); - level.skipVote = true; - - if ( !level.gameEnded ) - { - level thread maps\mp\gametypes_zm\_globallogic::forceEnd(true); - } -} - - -getKillStreaks( player ) //checked matches bo3 _globallogic.gsc within reason -{ - for ( killstreakNum = 0; killstreakNum < level.maxKillstreaks; killstreakNum++ ) - { - killstreak[ killstreakNum ] = "killstreak_null"; - } - - if ( isPlayer( player ) && !level.oldschool && ( level.disableCAC != 1 ) && - !isdefined( player.pers["isBot"] ) && isdefined(player.killstreak ) ) - { - currentKillstreak = 0; - for ( killstreakNum = 0; killstreakNum < level.maxKillstreaks; killstreakNum++ ) - { - if ( isDefined( player.killstreak[ killstreakNum ] ) ) - { - killstreak[ currentKillstreak ] = player.killstreak[ killstreakNum ]; - currentKillstreak++; - } - } - } - - return killstreak; -} - -updateRankedMatch(winner) //checked matches bo3 _globallogic.gsc within reason -{ - if ( level.rankedMatch ) - { - if ( hostIdledOut() ) - { - level.hostForcedEnd = true; - logString( "host idled out" ); - endLobby(); - } - } - if ( !level.wagerMatch && !SessionModeIsZombiesGame() ) - { - maps\mp\gametypes_zm\_globallogic_score::updateMatchBonusScores( winner ); - maps\mp\gametypes_zm\_globallogic_score::updateWinLossStats( winner ); - } -} - - - diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_actor.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_actor.gsc deleted file mode 100644 index d572446..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_actor.gsc +++ /dev/null @@ -1,204 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/_challenges; -#include maps/mp/gametypes_zm/_damagefeedback; -#include maps/mp/gametypes_zm/_weapons; -#include maps/mp/gametypes_zm/_globallogic_utils; -#include maps/mp/gametypes_zm/_globallogic_player; -#include maps/mp/_utility; - -callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) //checked changed to match cerberus output -{ - if ( game[ "state" ] == "postgame" ) - { - return; - } - if ( self.aiteam == "spectator" ) - { - return; - } - if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( eattacker.candocombat ) && !eattacker.candocombat ) - { - return; - } - self.idflags = idflags; - self.idflagstime = getTime(); - eattacker = maps/mp/gametypes_zm/_globallogic_player::figureoutattacker( eattacker ); - if ( !isDefined( vdir ) ) - { - idflags |= level.idflags_no_knockback; - } - friendly = 0; - if ( self.health == self.maxhealth || !isDefined( self.attackers ) ) - { - self.attackers = []; - self.attackerdata = []; - self.attackerdamage = []; - } - if ( maps/mp/gametypes_zm/_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) ) - { - smeansofdeath = "MOD_HEAD_SHOT"; - } - if ( level.onlyheadshots ) - { - if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) - { - return; - } - else if ( smeansofdeath == "MOD_HEAD_SHOT" ) - { - idamage = 150; - } - } - if ( sweapon == "none" && isDefined( einflictor ) ) - { - if ( isDefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) - { - sweapon = "explodable_barrel_mp"; - } - else if ( isDefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) - { - sweapon = "destructible_car_mp"; - } - } - if ( idflags & level.idflags_no_protection ) - { - if ( isplayer( eattacker ) ) - { - eattacker.pers[ "participation" ]++; - } - prevhealthratio = self.health / self.maxhealth; - if ( level.teambased && isplayer( eattacker ) && self != eattacker && self.aiteam == eattacker.pers[ "team" ] ) - { - if ( level.friendlyfire == 0 ) - { - return; - } - else if ( level.friendlyfire == 1 ) - { - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - } - else if ( level.friendlyfire == 2 ) - { - return; - } - else if ( level.friendlyfire == 3 ) - { - idamage = int( idamage * 0,5 ); - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - } - friendly = 1; - } - else if ( isDefined( eattacker ) && isDefined( self.script_owner ) && eattacker == self.script_owner && !level.hardcoremode ) - { - return; - } - if ( isDefined( eattacker ) && isDefined( self.script_owner ) && isDefined( eattacker.script_owner ) && eattacker.script_owner == self.script_owner ) - { - return; - } - if ( idamage < 1 ) - { - idamage = 1; - } - if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( sweapon ) && !issubstr( smeansofdeath, "MOD_MELEE" ) ) - { - eattacker thread maps/mp/gametypes/_weapons::checkhit( sweapon ); - } - if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isDefined( einflictor ) && isDefined( einflictor.iscooked ) ) - { - self.wascooked = getTime(); - } - else - { - self.wascooked = undefined; - } - if ( isDefined( eattacker ) && eattacker != self ) - { - self.lastdamagewasfromenemy = 1; - } - else - { - self.lastdamagewasfromenemy = 0; - } - self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - if ( isDefined( eattacker ) && eattacker != self ) - { - if ( sweapon != "artillery_mp" && !isDefined( einflictor ) || !isai( einflictor ) ) - { - if ( idamage > 0 ) - { - eattacker thread maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor ); - } - } - } - } - /* -/# - if ( getDvarInt( "g_debugDamage" ) ) - { - println( "actor:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + shitloc + ";" + boneindex + "\n" ); -#/ - } - */ - if ( 1 ) - { - lpselfnum = self getentitynumber(); - lpselfteam = self.aiteam; - lpattackerteam = ""; - if ( isplayer( eattacker ) ) - { - lpattacknum = eattacker getentitynumber(); - lpattackguid = eattacker getguid(); - lpattackname = eattacker.name; - lpattackerteam = eattacker.pers[ "team" ]; - } - else - { - lpattacknum = -1; - lpattackguid = ""; - lpattackname = ""; - lpattackerteam = "world"; - } - logprint( "AD;" + lpselfnum + ";" + lpselfteam + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\n" ); - } -} - -callback_actorkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) //checked matches cerberus output -{ - if ( game[ "state" ] == "postgame" ) - { - return; - } - if ( isai( attacker ) && isDefined( attacker.script_owner ) ) - { - if ( attacker.script_owner.team != self.aiteam ) - { - attacker = attacker.script_owner; - } - } - if ( attacker.classname == "script_vehicle" && isDefined( attacker.owner ) ) - { - attacker = attacker.owner; - } - if ( isDefined( attacker ) && isplayer( attacker ) ) - { - if ( !level.teambased || self.aiteam != attacker.pers[ "team" ] ) - { - level.globalkillstreaksdestroyed++; - attacker addweaponstat( "dogs_mp", "destroyed", 1 ); - attacker maps/mp/_challenges::killeddog(); - } - } -} - - diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_audio.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_audio.gsc deleted file mode 100644 index 2618bd9..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_audio.gsc +++ /dev/null @@ -1,1034 +0,0 @@ -#include maps/mp/_music; -#include maps/mp/gametypes_zm/_globallogic_audio; -#include maps/mp/gametypes_zm/_globallogic_utils; -#include maps/mp/_utility; - -init() -{ - game[ "music" ][ "defeat" ] = "mus_defeat"; - game[ "music" ][ "victory_spectator" ] = "mus_defeat"; - game[ "music" ][ "winning" ] = "mus_time_running_out_winning"; - game[ "music" ][ "losing" ] = "mus_time_running_out_losing"; - game[ "music" ][ "match_end" ] = "mus_match_end"; - game[ "music" ][ "victory_tie" ] = "mus_defeat"; - game[ "music" ][ "suspense" ] = []; - game[ "music" ][ "suspense" ][ game[ "music" ][ "suspense" ].size ] = "mus_suspense_01"; - game[ "music" ][ "suspense" ][ game[ "music" ][ "suspense" ].size ] = "mus_suspense_02"; - game[ "music" ][ "suspense" ][ game[ "music" ][ "suspense" ].size ] = "mus_suspense_03"; - game[ "music" ][ "suspense" ][ game[ "music" ][ "suspense" ].size ] = "mus_suspense_04"; - game[ "music" ][ "suspense" ][ game[ "music" ][ "suspense" ].size ] = "mus_suspense_05"; - game[ "music" ][ "suspense" ][ game[ "music" ][ "suspense" ].size ] = "mus_suspense_06"; - game[ "dialog" ][ "mission_success" ] = "mission_success"; - game[ "dialog" ][ "mission_failure" ] = "mission_fail"; - game[ "dialog" ][ "mission_draw" ] = "draw"; - game[ "dialog" ][ "round_success" ] = "encourage_win"; - game[ "dialog" ][ "round_failure" ] = "encourage_lost"; - game[ "dialog" ][ "round_draw" ] = "draw"; - game[ "dialog" ][ "timesup" ] = "timesup"; - game[ "dialog" ][ "winning" ] = "winning"; - game[ "dialog" ][ "losing" ] = "losing"; - game[ "dialog" ][ "min_draw" ] = "min_draw"; - game[ "dialog" ][ "lead_lost" ] = "lead_lost"; - game[ "dialog" ][ "lead_tied" ] = "tied"; - game[ "dialog" ][ "lead_taken" ] = "lead_taken"; - game[ "dialog" ][ "last_alive" ] = "lastalive"; - game[ "dialog" ][ "boost" ] = "generic_boost"; - if ( !isDefined( game[ "dialog" ][ "offense_obj" ] ) ) - { - game[ "dialog" ][ "offense_obj" ] = "generic_boost"; - } - if ( !isDefined( game[ "dialog" ][ "defense_obj" ] ) ) - { - game[ "dialog" ][ "defense_obj" ] = "generic_boost"; - } - game[ "dialog" ][ "hardcore" ] = "hardcore"; - game[ "dialog" ][ "oldschool" ] = "oldschool"; - game[ "dialog" ][ "highspeed" ] = "highspeed"; - game[ "dialog" ][ "tactical" ] = "tactical"; - game[ "dialog" ][ "challenge" ] = "challengecomplete"; - game[ "dialog" ][ "promotion" ] = "promotion"; - game[ "dialog" ][ "bomb_acquired" ] = "sd_bomb_taken"; - game[ "dialog" ][ "bomb_taken" ] = "sd_bomb_taken_taken"; - game[ "dialog" ][ "bomb_lost" ] = "sd_bomb_drop"; - game[ "dialog" ][ "bomb_defused" ] = "sd_bomb_defused"; - game[ "dialog" ][ "bomb_planted" ] = "sd_bomb_planted"; - game[ "dialog" ][ "obj_taken" ] = "securedobj"; - game[ "dialog" ][ "obj_lost" ] = "lostobj"; - game[ "dialog" ][ "obj_defend" ] = "defend_start"; - game[ "dialog" ][ "obj_destroy" ] = "destroy_start"; - game[ "dialog" ][ "obj_capture" ] = "capture_obj"; - game[ "dialog" ][ "objs_capture" ] = "capture_objs"; - game[ "dialog" ][ "hq_located" ] = "hq_located"; - game[ "dialog" ][ "hq_enemy_captured" ] = "hq_capture"; - game[ "dialog" ][ "hq_enemy_destroyed" ] = "hq_defend"; - game[ "dialog" ][ "hq_secured" ] = "hq_secured"; - game[ "dialog" ][ "hq_offline" ] = "hq_offline"; - game[ "dialog" ][ "hq_online" ] = "hq_online"; - game[ "dialog" ][ "koth_located" ] = "koth_located"; - game[ "dialog" ][ "koth_captured" ] = "koth_captured"; - game[ "dialog" ][ "koth_lost" ] = "koth_lost"; - game[ "dialog" ][ "koth_secured" ] = "koth_secured"; - game[ "dialog" ][ "koth_contested" ] = "koth_contest"; - game[ "dialog" ][ "koth_offline" ] = "koth_offline"; - game[ "dialog" ][ "koth_online" ] = "koth_online"; - game[ "dialog" ][ "move_to_new" ] = "new_positions"; - game[ "dialog" ][ "attack" ] = "attack"; - game[ "dialog" ][ "defend" ] = "defend"; - game[ "dialog" ][ "offense" ] = "offense"; - game[ "dialog" ][ "defense" ] = "defense"; - game[ "dialog" ][ "halftime" ] = "halftime"; - game[ "dialog" ][ "overtime" ] = "overtime"; - game[ "dialog" ][ "side_switch" ] = "switchingsides"; - game[ "dialog" ][ "flag_taken" ] = "ourflag"; - game[ "dialog" ][ "flag_dropped" ] = "ourflag_drop"; - game[ "dialog" ][ "flag_returned" ] = "ourflag_return"; - game[ "dialog" ][ "flag_captured" ] = "ourflag_capt"; - game[ "dialog" ][ "enemy_flag_taken" ] = "enemyflag"; - game[ "dialog" ][ "enemy_flag_dropped" ] = "enemyflag_drop"; - game[ "dialog" ][ "enemy_flag_returned" ] = "enemyflag_return"; - game[ "dialog" ][ "enemy_flag_captured" ] = "enemyflag_capt"; - game[ "dialog" ][ "securing_a" ] = "dom_securing_a"; - game[ "dialog" ][ "securing_b" ] = "dom_securing_b"; - game[ "dialog" ][ "securing_c" ] = "dom_securing_c"; - game[ "dialog" ][ "securing_d" ] = "dom_securing_d"; - game[ "dialog" ][ "securing_e" ] = "dom_securing_e"; - game[ "dialog" ][ "securing_f" ] = "dom_securing_f"; - game[ "dialog" ][ "secured_a" ] = "dom_secured_a"; - game[ "dialog" ][ "secured_b" ] = "dom_secured_b"; - game[ "dialog" ][ "secured_c" ] = "dom_secured_c"; - game[ "dialog" ][ "secured_d" ] = "dom_secured_d"; - game[ "dialog" ][ "secured_e" ] = "dom_secured_e"; - game[ "dialog" ][ "secured_f" ] = "dom_secured_f"; - game[ "dialog" ][ "losing_a" ] = "dom_losing_a"; - game[ "dialog" ][ "losing_b" ] = "dom_losing_b"; - game[ "dialog" ][ "losing_c" ] = "dom_losing_c"; - game[ "dialog" ][ "losing_d" ] = "dom_losing_d"; - game[ "dialog" ][ "losing_e" ] = "dom_losing_e"; - game[ "dialog" ][ "losing_f" ] = "dom_losing_f"; - game[ "dialog" ][ "lost_a" ] = "dom_lost_a"; - game[ "dialog" ][ "lost_b" ] = "dom_lost_b"; - game[ "dialog" ][ "lost_c" ] = "dom_lost_c"; - game[ "dialog" ][ "lost_d" ] = "dom_lost_d"; - game[ "dialog" ][ "lost_e" ] = "dom_lost_e"; - game[ "dialog" ][ "lost_f" ] = "dom_lost_f"; - game[ "dialog" ][ "secure_flag" ] = "secure_flag"; - game[ "dialog" ][ "securing_flag" ] = "securing_flag"; - game[ "dialog" ][ "losing_flag" ] = "losing_flag"; - game[ "dialog" ][ "lost_flag" ] = "lost_flag"; - game[ "dialog" ][ "oneflag_enemy" ] = "oneflag_enemy"; - game[ "dialog" ][ "oneflag_friendly" ] = "oneflag_friendly"; - game[ "dialog" ][ "lost_all" ] = "dom_lock_theytake"; - game[ "dialog" ][ "secure_all" ] = "dom_lock_wetake"; - game[ "dialog" ][ "squad_move" ] = "squad_move"; - game[ "dialog" ][ "squad_30sec" ] = "squad_30sec"; - game[ "dialog" ][ "squad_winning" ] = "squad_onemin_vic"; - game[ "dialog" ][ "squad_losing" ] = "squad_onemin_loss"; - game[ "dialog" ][ "squad_down" ] = "squad_down"; - game[ "dialog" ][ "squad_bomb" ] = "squad_bomb"; - game[ "dialog" ][ "squad_plant" ] = "squad_plant"; - game[ "dialog" ][ "squad_take" ] = "squad_takeobj"; - game[ "dialog" ][ "kicked" ] = "player_kicked"; - game[ "dialog" ][ "sentry_destroyed" ] = "dest_sentry"; - game[ "dialog" ][ "sentry_hacked" ] = "kls_turret_hacked"; - game[ "dialog" ][ "microwave_destroyed" ] = "dest_microwave"; - game[ "dialog" ][ "microwave_hacked" ] = "kls_microwave_hacked"; - game[ "dialog" ][ "sam_destroyed" ] = "dest_sam"; - game[ "dialog" ][ "tact_destroyed" ] = "dest_tact"; - game[ "dialog" ][ "equipment_destroyed" ] = "dest_equip"; - game[ "dialog" ][ "hacked_equip" ] = "hacked_equip"; - game[ "dialog" ][ "uav_destroyed" ] = "kls_u2_destroyed"; - game[ "dialog" ][ "cuav_destroyed" ] = "kls_cu2_destroyed"; - level.dialoggroups = []; - level thread post_match_snapshot_watcher(); -} - -registerdialoggroup( group, skipifcurrentlyplayinggroup ) -{ - if ( !isDefined( level.dialoggroups ) ) - { - level.dialoggroups = []; - } - else - { - if ( isDefined( level.dialoggroup[ group ] ) ) - { - error( "registerDialogGroup: Dialog group " + group + " already registered." ); - return; - } - } - level.dialoggroup[ group ] = spawnstruct(); - level.dialoggroup[ group ].group = group; - level.dialoggroup[ group ].skipifcurrentlyplayinggroup = skipifcurrentlyplayinggroup; - level.dialoggroup[ group ].currentcount = 0; -} - -sndstartmusicsystem() -{ - self endon( "disconnect" ); - if ( game[ "state" ] == "postgame" ) - { - return; - } - if ( game[ "state" ] == "pregame" ) - { -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - music state is undefined Waiting 15 seconds to set music state" ); -#/ - } - wait 30; - if ( !isDefined( level.nextmusicstate ) ) - { - self.pers[ "music" ].currentstate = "UNDERSCORE"; - self thread suspensemusic(); - } - } - if ( !isDefined( level.nextmusicstate ) ) - { -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - music state is undefined Waiting 15 seconds to set music state" ); -#/ - } - self.pers[ "music" ].currentstate = "UNDERSCORE"; - self thread suspensemusic(); - } -} - -suspensemusicforplayer() -{ - self endon( "disconnect" ); - self thread set_music_on_player( "UNDERSCORE", 0 ); -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Setting Music State Random Underscore " + self.pers[ "music" ].returnstate + " On player " + self getentitynumber() ); -#/ - } -} - -suspensemusic( random ) -{ - level endon( "game_ended" ); - level endon( "match_ending_soon" ); - self endon( "disconnect" ); -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Starting random underscore" ); -#/ - } - while ( 1 ) - { - wait randomintrange( 25, 60 ); -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Checking for random underscore" ); -#/ - } - if ( !isDefined( self.pers[ "music" ].inque ) ) - { - self.pers[ "music" ].inque = 0; - } - while ( self.pers[ "music" ].inque ) - { -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Inque no random underscore" ); -#/ - } - } - if ( !isDefined( self.pers[ "music" ].currentstate ) ) - { - self.pers[ "music" ].currentstate = "SILENT"; - } - if ( randomint( 100 ) < self.underscorechance && self.pers[ "music" ].currentstate != "ACTION" && self.pers[ "music" ].currentstate != "TIME_OUT" ) - { - self thread suspensemusicforplayer(); - self.underscorechance -= 20; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Starting random underscore" ); -#/ - } - } - } -} - -leaderdialogforotherteams( dialog, skip_team, squad_dialog ) -{ - _a339 = level.teams; - _k339 = getFirstArrayKey( _a339 ); - while ( isDefined( _k339 ) ) - { - team = _a339[ _k339 ]; - if ( team != skip_team ) - { - leaderdialog( dialog, team, undefined, undefined, squad_dialog ); - } - _k339 = getNextArrayKey( _a339, _k339 ); - } -} - -announceroundwinner( winner, delay ) -{ - if ( delay > 0 ) - { - wait delay; - } - if ( !isDefined( winner ) || isplayer( winner ) ) - { - return; - } - if ( isDefined( level.teams[ winner ] ) ) - { - leaderdialog( "round_success", winner ); - leaderdialogforotherteams( "round_failure", winner ); - } - else - { - _a365 = level.teams; - _k365 = getFirstArrayKey( _a365 ); - while ( isDefined( _k365 ) ) - { - team = _a365[ _k365 ]; - thread playsoundonplayers( "mus_round_draw" + "_" + level.teampostfix[ team ] ); - _k365 = getNextArrayKey( _a365, _k365 ); - } - leaderdialog( "round_draw" ); - } -} - -announcegamewinner( winner, delay ) -{ - if ( delay > 0 ) - { - wait delay; - } - if ( !isDefined( winner ) || isplayer( winner ) ) - { - return; - } - if ( isDefined( level.teams[ winner ] ) ) - { - leaderdialog( "mission_success", winner ); - leaderdialogforotherteams( "mission_failure", winner ); - } - else - { - leaderdialog( "mission_draw" ); - } -} - -doflameaudio() -{ - self endon( "disconnect" ); - waittillframeend; - if ( !isDefined( self.lastflamehurtaudio ) ) - { - self.lastflamehurtaudio = 0; - } - currenttime = getTime(); - if ( ( self.lastflamehurtaudio + level.fire_audio_repeat_duration + randomint( level.fire_audio_random_max_duration ) ) < currenttime ) - { - self playlocalsound( "vox_pain_small" ); - self.lastflamehurtaudio = currenttime; - } -} - -leaderdialog( dialog, team, group, excludelist, squaddialog ) -{ -/# - assert( isDefined( level.players ) ); -#/ - if ( level.splitscreen ) - { - return; - } - if ( level.wagermatch ) - { - return; - } - if ( !isDefined( team ) ) - { - dialogs = []; - _a425 = level.teams; - _k425 = getFirstArrayKey( _a425 ); - while ( isDefined( _k425 ) ) - { - team = _a425[ _k425 ]; - dialogs[ team ] = dialog; - _k425 = getNextArrayKey( _a425, _k425 ); - } - leaderdialogallteams( dialogs, group, excludelist ); - return; - } - if ( level.splitscreen ) - { - if ( level.players.size ) - { - level.players[ 0 ] leaderdialogonplayer( dialog, group ); - } - return; - } - if ( isDefined( excludelist ) ) - { - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team && !maps/mp/gametypes_zm/_globallogic_utils::isexcluded( player, excludelist ) ) - { - player leaderdialogonplayer( dialog, group ); - } - i++; - } - } - else i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team ) - { - player leaderdialogonplayer( dialog, group ); - } - i++; - } -} - -leaderdialogallteams( dialogs, group, excludelist ) -{ -/# - assert( isDefined( level.players ) ); -#/ - if ( level.splitscreen ) - { - return; - } - if ( level.splitscreen ) - { - if ( level.players.size ) - { - level.players[ 0 ] leaderdialogonplayer( dialogs[ level.players[ 0 ].team ], group ); - } - return; - } - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - team = player.pers[ "team" ]; - if ( !isDefined( team ) ) - { - i++; - continue; - } - else if ( !isDefined( dialogs[ team ] ) ) - { - i++; - continue; - } - else if ( isDefined( excludelist ) && maps/mp/gametypes_zm/_globallogic_utils::isexcluded( player, excludelist ) ) - { - i++; - continue; - } - else - { - player leaderdialogonplayer( dialogs[ team ], group ); - } - i++; - } -} - -flushdialog() -{ - _a495 = level.players; - _k495 = getFirstArrayKey( _a495 ); - while ( isDefined( _k495 ) ) - { - player = _a495[ _k495 ]; - player flushdialogonplayer(); - _k495 = getNextArrayKey( _a495, _k495 ); - } -} - -flushdialogonplayer() -{ - self.leaderdialoggroups = []; - self.leaderdialogqueue = []; - self.leaderdialogactive = 0; - self.currentleaderdialoggroup = ""; -} - -flushgroupdialog( group ) -{ - _a512 = level.players; - _k512 = getFirstArrayKey( _a512 ); - while ( isDefined( _k512 ) ) - { - player = _a512[ _k512 ]; - player flushgroupdialogonplayer( group ); - _k512 = getNextArrayKey( _a512, _k512 ); - } -} - -flushgroupdialogonplayer( group ) -{ - _a522 = self.leaderdialogqueue; - key = getFirstArrayKey( _a522 ); - while ( isDefined( key ) ) - { - dialog = _a522[ key ]; - if ( dialog == group ) - { - } - key = getNextArrayKey( _a522, key ); - } -} - -addgroupdialogtoplayer( dialog, group ) -{ - if ( !isDefined( level.dialoggroup[ group ] ) ) - { - error( "leaderDialogOnPlayer: Dialog group " + group + " is not registered" ); - return 0; - } - addtoqueue = 0; - if ( !isDefined( self.leaderdialoggroups[ group ] ) ) - { - addtoqueue = 1; - } - if ( !level.dialoggroup[ group ].skipifcurrentlyplayinggroup ) - { - if ( self.currentleaderdialog == dialog && ( self.currentleaderdialogtime + 2000 ) > getTime() ) - { - _a552 = self.leaderdialogqueue; - key = getFirstArrayKey( _a552 ); - while ( isDefined( key ) ) - { - leader_dialog = _a552[ key ]; - if ( leader_dialog == group ) - { - i = key + 1; - while ( i < self.leaderdialogqueue.size ) - { - self.leaderdialogqueue[ i - 1 ] = self.leaderdialogqueue[ i ]; - i++; - } - break; - } - else - { - key = getNextArrayKey( _a552, key ); - } - } - return 0; - } - } - else - { - if ( self.currentleaderdialoggroup == group ) - { - return 0; - } - } - self.leaderdialoggroups[ group ] = dialog; - return addtoqueue; -} - -testdialogqueue( group ) -{ -/# - count = 0; - _a585 = self.leaderdialogqueue; - _k585 = getFirstArrayKey( _a585 ); - while ( isDefined( _k585 ) ) - { - temp = _a585[ _k585 ]; - if ( temp == group ) - { - count++; - } - _k585 = getNextArrayKey( _a585, _k585 ); - } - if ( count > 1 ) - { - shit = 0; -#/ - } -} - -leaderdialogonplayer( dialog, group ) -{ - team = self.pers[ "team" ]; - if ( level.splitscreen ) - { - return; - } - if ( !isDefined( team ) ) - { - return; - } - if ( !isDefined( level.teams[ team ] ) ) - { - return; - } - if ( isDefined( group ) ) - { - if ( !addgroupdialogtoplayer( dialog, group ) ) - { - self testdialogqueue( group ); - return; - } - dialog = group; - } - if ( !self.leaderdialogactive ) - { - self thread playleaderdialogonplayer( dialog ); - } - else - { - self.leaderdialogqueue[ self.leaderdialogqueue.size ] = dialog; - } -} - -waitforsound( sound, extratime ) -{ - if ( !isDefined( extratime ) ) - { - extratime = 0,1; - } - time = soundgetplaybacktime( sound ); - if ( time < 0 ) - { - wait ( 3 + extratime ); - } - else - { - wait ( ( time * 0,001 ) + extratime ); - } -} - -playleaderdialogonplayer( dialog ) -{ - if ( isDefined( level.allowannouncer ) && !level.allowannouncer ) - { - return; - } - team = self.pers[ "team" ]; - self endon( "disconnect" ); - self.leaderdialogactive = 1; - if ( isDefined( self.leaderdialoggroups[ dialog ] ) ) - { - group = dialog; - dialog = self.leaderdialoggroups[ group ]; - self.currentleaderdialoggroup = group; - self testdialogqueue( group ); - } - if ( level.wagermatch || !isDefined( game[ "voice" ] ) ) - { - faction = "vox_wm_"; - } - else - { - faction = game[ "voice" ][ team ]; - } - sound_name = faction + game[ "dialog" ][ dialog ]; - if ( level.allowannouncer ) - { - self playlocalsound( sound_name ); - self.currentleaderdialog = dialog; - self.currentleaderdialogtime = getTime(); - } - waitforsound( sound_name ); - self.leaderdialogactive = 0; - self.currentleaderdialoggroup = ""; - self.currentleaderdialog = ""; - if ( self.leaderdialogqueue.size > 0 ) - { - nextdialog = self.leaderdialogqueue[ 0 ]; - i = 1; - while ( i < self.leaderdialogqueue.size ) - { - self.leaderdialogqueue[ i - 1 ] = self.leaderdialogqueue[ i ]; - i++; - } - if ( isDefined( self.leaderdialoggroups[ dialog ] ) ) - { - self testdialogqueue( dialog ); - } - self thread playleaderdialogonplayer( nextdialog ); - } -} - -isteamwinning( checkteam ) -{ - score = game[ "teamScores" ][ checkteam ]; - _a702 = level.teams; - _k702 = getFirstArrayKey( _a702 ); - while ( isDefined( _k702 ) ) - { - team = _a702[ _k702 ]; - if ( team != checkteam ) - { - if ( game[ "teamScores" ][ team ] >= score ) - { - return 0; - } - } - _k702 = getNextArrayKey( _a702, _k702 ); - } - return 1; -} - -announceteamiswinning() -{ - _a716 = level.teams; - _k716 = getFirstArrayKey( _a716 ); - while ( isDefined( _k716 ) ) - { - team = _a716[ _k716 ]; - if ( isteamwinning( team ) ) - { - leaderdialog( "winning", team, undefined, undefined, "squad_winning" ); - leaderdialogforotherteams( "losing", team, "squad_losing" ); - return 1; - } - _k716 = getNextArrayKey( _a716, _k716 ); - } - return 0; -} - -musiccontroller() -{ - level endon( "game_ended" ); - level thread musictimesout(); - level waittill( "match_ending_soon" ); - if ( islastround() || isoneround() ) - { - while ( !level.splitscreen ) - { - if ( level.teambased ) - { - if ( !announceteamiswinning() ) - { - leaderdialog( "min_draw" ); - } - } - level waittill( "match_ending_very_soon" ); - _a751 = level.teams; - _k751 = getFirstArrayKey( _a751 ); - while ( isDefined( _k751 ) ) - { - team = _a751[ _k751 ]; - leaderdialog( "timesup", team, undefined, undefined, "squad_30sec" ); - _k751 = getNextArrayKey( _a751, _k751 ); - } - } - } - else level waittill( "match_ending_vox" ); - leaderdialog( "timesup" ); -} - -musictimesout() -{ - level endon( "game_ended" ); - level waittill( "match_ending_very_soon" ); - thread maps/mp/gametypes_zm/_globallogic_audio::set_music_on_team( "TIME_OUT", "both", 1, 0 ); -} - -actionmusicset() -{ - level endon( "game_ended" ); - level.playingactionmusic = 1; - wait 45; - level.playingactionmusic = 0; -} - -play_2d_on_team( alias, team ) -{ -/# - assert( isDefined( level.players ) ); -#/ - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team ) - { - player playlocalsound( alias ); - } - i++; - } -} - -set_music_on_team( state, team, save_state, return_state, wait_time ) -{ - if ( sessionmodeiszombiesgame() ) - { - return; - } -/# - assert( isDefined( level.players ) ); -#/ - if ( !isDefined( team ) ) - { - team = "both"; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - team undefined: Setting to both" ); -#/ - } - } - if ( !isDefined( save_state ) ) - { - save_sate = 0; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - save_sate undefined: Setting to false" ); -#/ - } - } - if ( !isDefined( return_state ) ) - { - return_state = 0; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Music System - return_state undefined: Setting to false" ); -#/ - } - } - if ( !isDefined( wait_time ) ) - { - wait_time = 0; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - wait_time undefined: Setting to 0" ); -#/ - } - } - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( team == "both" ) - { - player thread set_music_on_player( state, save_state, return_state, wait_time ); - i++; - continue; - } - else - { - if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team ) - { - player thread set_music_on_player( state, save_state, return_state, wait_time ); -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Setting Music State " + state + " On player " + player getentitynumber() ); -#/ - } - } - } - i++; - } -} - -set_music_on_player( state, save_state, return_state, wait_time ) -{ - self endon( "disconnect" ); - if ( sessionmodeiszombiesgame() ) - { - return; - } -/# - assert( isplayer( self ) ); -#/ - if ( !isDefined( save_state ) ) - { - save_state = 0; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Music System - save_sate undefined: Setting to false" ); -#/ - } - } - if ( !isDefined( return_state ) ) - { - return_state = 0; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Music System - return_state undefined: Setting to false" ); -#/ - } - } - if ( !isDefined( wait_time ) ) - { - wait_time = 0; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - wait_time undefined: Setting to 0" ); -#/ - } - } - if ( !isDefined( state ) ) - { - state = "UNDERSCORE"; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - state undefined: Setting to UNDERSCORE" ); -#/ - } - } - maps/mp/_music::setmusicstate( state, self ); - if ( isDefined( self.pers[ "music" ].currentstate ) && save_state ) - { - self.pers[ "music" ].returnstate = state; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Saving Music State " + self.pers[ "music" ].returnstate + " On " + self getentitynumber() ); -#/ - } - } - self.pers[ "music" ].previousstate = self.pers[ "music" ].currentstate; - self.pers[ "music" ].currentstate = state; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Setting Music State " + state + " On player " + self getentitynumber() ); -#/ - } - if ( isDefined( self.pers[ "music" ].returnstate ) && return_state ) - { -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Starting Return State " + self.pers[ "music" ].returnstate + " On " + self getentitynumber() ); -#/ - } - self set_next_music_state( self.pers[ "music" ].returnstate, wait_time ); - } -} - -return_music_state_player( wait_time ) -{ - if ( !isDefined( wait_time ) ) - { - wait_time = 0; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - wait_time undefined: Setting to 0" ); -#/ - } - } - self set_next_music_state( self.pers[ "music" ].returnstate, wait_time ); -} - -return_music_state_team( team, wait_time ) -{ - if ( !isDefined( wait_time ) ) - { - wait_time = 0; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - wait_time undefined: Setting to 0" ); -#/ - } - } - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( team == "both" ) - { - player thread set_next_music_state( self.pers[ "music" ].returnstate, wait_time ); - i++; - continue; - } - else - { - if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team ) - { - player thread set_next_music_state( self.pers[ "music" ].returnstate, wait_time ); -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Setting Music State " + self.pers[ "music" ].returnstate + " On player " + player getentitynumber() ); -#/ - } - } - } - i++; - } -} - -set_next_music_state( nextstate, wait_time ) -{ - self endon( "disconnect" ); - self.pers[ "music" ].nextstate = nextstate; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Setting next Music State " + self.pers[ "music" ].nextstate + " On " + self getentitynumber() ); -#/ - } - if ( !isDefined( self.pers[ "music" ].inque ) ) - { - self.pers[ "music" ].inque = 0; - } - if ( self.pers[ "music" ].inque ) - { - return; -/# - println( "Music System - Music state in que" ); -#/ - } - else - { - self.pers[ "music" ].inque = 1; - if ( wait_time ) - { - wait wait_time; - } - self set_music_on_player( self.pers[ "music" ].nextstate, 0 ); - self.pers[ "music" ].inque = 0; - } -} - -getroundswitchdialog( switchtype ) -{ - switch( switchtype ) - { - case "halftime": - return "halftime"; - case "overtime": - return "overtime"; - default: - return "side_switch"; - } -} - -post_match_snapshot_watcher() -{ - level waittill( "game_ended" ); - level clientnotify( "pm" ); - level waittill( "sfade" ); - level clientnotify( "pmf" ); -} diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_defaults.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_defaults.gsc deleted file mode 100644 index 059642d..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_defaults.gsc +++ /dev/null @@ -1,230 +0,0 @@ -#include maps/mp/gametypes_zm/_spawnlogic; -#include maps/mp/gametypes_zm/_globallogic_audio; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/gametypes_zm/_globallogic; -#include maps/mp/gametypes_zm/_globallogic_utils; -#include maps/mp/_utility; -#include common_scripts/utility; - -getwinningteamfromloser( losing_team ) -{ - if ( level.multiteam ) - { - return "tie"; - } - else - { - if ( losing_team == "axis" ) - { - return "allies"; - } - } - return "axis"; -} - -default_onforfeit( team ) -{ - level.gameforfeited = 1; - level notify( "forfeit in progress" ); - level endon( "forfeit in progress" ); - level endon( "abort forfeit" ); - forfeit_delay = 20; - announcement( game[ "strings" ][ "opponent_forfeiting_in" ], forfeit_delay, 0 ); - wait 10; - announcement( game[ "strings" ][ "opponent_forfeiting_in" ], 10, 0 ); - wait 10; - endreason = &""; - if ( !isDefined( team ) ) - { - setdvar( "ui_text_endreason", game[ "strings" ][ "players_forfeited" ] ); - endreason = game[ "strings" ][ "players_forfeited" ]; - winner = level.players[ 0 ]; - } - else if ( isDefined( level.teams[ team ] ) ) - { - endreason = game[ "strings" ][ team + "_forfeited" ]; - setdvar( "ui_text_endreason", endreason ); - winner = getwinningteamfromloser( team ); - } - else - { -/# - assert( isDefined( team ), "Forfeited team is not defined" ); -#/ -/# - assert( 0, "Forfeited team " + team + " is not allies or axis" ); -#/ - winner = "tie"; - } - level.forcedend = 1; - if ( isplayer( winner ) ) - { - logstring( "forfeit, win: " + winner getxuid() + "(" + winner.name + ")" ); - } - else - { - maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "forfeit", winner ); - } - thread maps/mp/gametypes_zm/_globallogic::endgame( winner, endreason ); -} - -default_ondeadevent( team ) -{ - if ( isDefined( level.teams[ team ] ) ) - { - eliminatedstring = game[ "strings" ][ team + "_eliminated" ]; - iprintln( eliminatedstring ); - makedvarserverinfo( "ui_text_endreason", eliminatedstring ); - setdvar( "ui_text_endreason", eliminatedstring ); - winner = getwinningteamfromloser( team ); - maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "team eliminated", winner ); - thread maps/mp/gametypes_zm/_globallogic::endgame( winner, eliminatedstring ); - } - else makedvarserverinfo( "ui_text_endreason", game[ "strings" ][ "tie" ] ); - setdvar( "ui_text_endreason", game[ "strings" ][ "tie" ] ); - maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "tie" ); - if ( level.teambased ) - { - thread maps/mp/gametypes_zm/_globallogic::endgame( "tie", game[ "strings" ][ "tie" ] ); - } - else - { - thread maps/mp/gametypes_zm/_globallogic::endgame( undefined, game[ "strings" ][ "tie" ] ); - } -} - -default_onalivecountchange( team ) -{ -} - -default_onroundendgame( winner ) -{ - return winner; -} - -default_ononeleftevent( team ) -{ - if ( !level.teambased ) - { - winner = maps/mp/gametypes_zm/_globallogic_score::gethighestscoringplayer(); - if ( isDefined( winner ) ) - { - logstring( "last one alive, win: " + winner.name ); - } - else - { - logstring( "last one alive, win: unknown" ); - } - thread maps/mp/gametypes_zm/_globallogic::endgame( winner, &"MP_ENEMIES_ELIMINATED" ); - } - else - { - index = 0; - while ( index < level.players.size ) - { - player = level.players[ index ]; - if ( !isalive( player ) ) - { - index++; - continue; - } - else if ( !isDefined( player.pers[ "team" ] ) || player.pers[ "team" ] != team ) - { - index++; - continue; - } - else - { - player maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "sudden_death" ); - } - index++; - } - } -} - -default_ontimelimit() -{ - winner = undefined; - if ( level.teambased ) - { - winner = maps/mp/gametypes_zm/_globallogic::determineteamwinnerbygamestat( "teamScores" ); - maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "time limit", winner ); - } - else winner = maps/mp/gametypes_zm/_globallogic_score::gethighestscoringplayer(); - if ( isDefined( winner ) ) - { - logstring( "time limit, win: " + winner.name ); - } - else - { - logstring( "time limit, tie" ); - } - makedvarserverinfo( "ui_text_endreason", game[ "strings" ][ "time_limit_reached" ] ); - setdvar( "ui_text_endreason", game[ "strings" ][ "time_limit_reached" ] ); - thread maps/mp/gametypes_zm/_globallogic::endgame( winner, game[ "strings" ][ "time_limit_reached" ] ); -} - -default_onscorelimit() -{ - if ( !level.endgameonscorelimit ) - { - return 0; - } - winner = undefined; - if ( level.teambased ) - { - winner = maps/mp/gametypes_zm/_globallogic::determineteamwinnerbygamestat( "teamScores" ); - maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "scorelimit", winner ); - } - else winner = maps/mp/gametypes_zm/_globallogic_score::gethighestscoringplayer(); - if ( isDefined( winner ) ) - { - logstring( "scorelimit, win: " + winner.name ); - } - else - { - logstring( "scorelimit, tie" ); - } - makedvarserverinfo( "ui_text_endreason", game[ "strings" ][ "score_limit_reached" ] ); - setdvar( "ui_text_endreason", game[ "strings" ][ "score_limit_reached" ] ); - thread maps/mp/gametypes_zm/_globallogic::endgame( winner, game[ "strings" ][ "score_limit_reached" ] ); - return 1; -} - -default_onspawnspectator( origin, angles ) -{ - if ( isDefined( origin ) && isDefined( angles ) ) - { - self spawn( origin, angles ); - return; - } - spawnpointname = "mp_global_intermission"; - spawnpoints = getentarray( spawnpointname, "classname" ); -/# - assert( spawnpoints.size, "There are no mp_global_intermission spawn points in the map. There must be at least one." ); -#/ - spawnpoint = maps/mp/gametypes_zm/_spawnlogic::getspawnpoint_random( spawnpoints ); - self spawn( spawnpoint.origin, spawnpoint.angles ); -} - -default_onspawnintermission() -{ - spawnpointname = "mp_global_intermission"; - spawnpoints = getentarray( spawnpointname, "classname" ); - spawnpoint = spawnpoints[ 0 ]; - if ( isDefined( spawnpoint ) ) - { - self spawn( spawnpoint.origin, spawnpoint.angles ); - } - else - { -/# - maps/mp/_utility::error( "NO " + spawnpointname + " SPAWNPOINTS IN MAP" ); -#/ - } -} - -default_gettimelimit() -{ - return clamp( getgametypesetting( "timeLimit" ), level.timelimitmin, level.timelimitmax ); -} diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_player.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_player.gsc deleted file mode 100644 index 2de5b99..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_player.gsc +++ /dev/null @@ -1,2238 +0,0 @@ -#include maps/mp/gametypes_zm/_globallogic_audio; -#include maps/mp/gametypes_zm/_tweakables; -#include maps/mp/_challenges; -#include maps/mp/gametypes_zm/_spawnlogic; -#include maps/mp/gametypes_zm/_weapons; -#include maps/mp/_demo; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/gametypes_zm/_hud_message; -#include maps/mp/gametypes_zm/_spawning; -#include maps/mp/gametypes_zm/_globallogic_utils; -#include maps/mp/gametypes_zm/_spectating; -#include maps/mp/gametypes_zm/_globallogic_spawn; -#include maps/mp/gametypes_zm/_globallogic_ui; -#include maps/mp/gametypes_zm/_hostmigration; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/gametypes_zm/_globallogic; -#include common_scripts/utility; -#include maps/mp/_utility; - -freezeplayerforroundend() -{ - self clearlowermessage(); - self closemenu(); - self closeingamemenu(); - self freeze_player_controls( 1 ); - if ( !sessionmodeiszombiesgame() ) - { - currentweapon = self getcurrentweapon(); - } -} - -callback_playerconnect() -{ - thread notifyconnecting(); - self.statusicon = "hud_status_connecting"; - self waittill( "begin" ); - if ( isDefined( level.reset_clientdvars ) ) - { - self [[ level.reset_clientdvars ]](); - } - waittillframeend; - self.statusicon = ""; - self.guid = self getguid(); - profilelog_begintiming( 4, "ship" ); - level notify( "connected" ); - if ( self ishost() ) - { - self thread maps/mp/gametypes_zm/_globallogic::listenforgameend(); - } - if ( !level.splitscreen && !isDefined( self.pers[ "score" ] ) ) - { - iprintln( &"MP_CONNECTED", self ); - } - if ( !isDefined( self.pers[ "score" ] ) ) - { - self thread maps/mp/zombies/_zm_stats::adjustrecentstats(); - } - if ( gamemodeismode( level.gamemode_public_match ) && !isDefined( self.pers[ "matchesPlayedStatsTracked" ] ) ) - { - gamemode = maps/mp/gametypes_zm/_globallogic::getcurrentgamemode(); - self maps/mp/gametypes_zm/_globallogic::incrementmatchcompletionstat( gamemode, "played", "started" ); - if ( !isDefined( self.pers[ "matchesHostedStatsTracked" ] ) && self islocaltohost() ) - { - self maps/mp/gametypes_zm/_globallogic::incrementmatchcompletionstat( gamemode, "hosted", "started" ); - self.pers[ "matchesHostedStatsTracked" ] = 1; - } - self.pers[ "matchesPlayedStatsTracked" ] = 1; - self thread maps/mp/zombies/_zm_stats::uploadstatssoon(); - } - lpselfnum = self getentitynumber(); - lpguid = self getguid(); - logprint( "J;" + lpguid + ";" + lpselfnum + ";" + self.name + "\n" ); - bbprint( "mpjoins", "name %s client %s", self.name, lpselfnum ); - if ( !sessionmodeiszombiesgame() ) - { - self setclientuivisibilityflag( "hud_visible", 1 ); - } - if ( level.forceradar == 1 ) - { - self.pers[ "hasRadar" ] = 1; - self.hasspyplane = 1; - level.activeuavs[ self getentitynumber() ] = 1; - } - if ( level.forceradar == 2 ) - { - self setclientuivisibilityflag( "g_compassShowEnemies", level.forceradar ); - } - else - { - self setclientuivisibilityflag( "g_compassShowEnemies", 0 ); - } - self setclientplayersprinttime( level.playersprinttime ); - self setclientnumlives( level.numlives ); - makedvarserverinfo( "cg_drawTalk", 1 ); - if ( level.hardcoremode ) - { - self setclientdrawtalk( 3 ); - } - if ( sessionmodeiszombiesgame() ) - { - self [[ level.player_stats_init ]](); - } - else - { - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "score" ); - if ( level.resetplayerscoreeveryround ) - { - self.pers[ "score" ] = 0; - } - self.score = self.pers[ "score" ]; - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "momentum", 0 ); - self.momentum = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "momentum" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "suicides" ); - self.suicides = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "suicides" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "headshots" ); - self.headshots = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "headshots" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "challenges" ); - self.challenges = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "challenges" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "kills" ); - self.kills = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "kills" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "deaths" ); - self.deaths = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "deaths" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "assists" ); - self.assists = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "assists" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "defends", 0 ); - self.defends = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "defends" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "offends", 0 ); - self.offends = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "offends" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "plants", 0 ); - self.plants = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "plants" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "defuses", 0 ); - self.defuses = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "defuses" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "returns", 0 ); - self.returns = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "returns" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "captures", 0 ); - self.captures = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "captures" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "destructions", 0 ); - self.destructions = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "destructions" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "backstabs", 0 ); - self.backstabs = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "backstabs" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "longshots", 0 ); - self.longshots = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "longshots" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "survived", 0 ); - self.survived = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "survived" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "stabs", 0 ); - self.stabs = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "stabs" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "tomahawks", 0 ); - self.tomahawks = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "tomahawks" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "humiliated", 0 ); - self.humiliated = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "humiliated" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "x2score", 0 ); - self.x2score = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "x2score" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "agrkills", 0 ); - self.x2score = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "agrkills" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "hacks", 0 ); - self.x2score = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "hacks" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sessionbans", 0 ); - self.sessionbans = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "sessionbans" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "gametypeban", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "time_played_total", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "time_played_alive", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "teamkills", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "teamkills_nostats", 0 ); - self.teamkillpunish = 0; - if ( level.minimumallowedteamkills >= 0 && self.pers[ "teamkills_nostats" ] > level.minimumallowedteamkills ) - { - self thread reduceteamkillsovertime(); - } - } - if ( getDvar( #"F7B30924" ) == "1" ) - { - level waittill( "eternity" ); - } - self.killedplayerscurrent = []; - if ( !isDefined( self.pers[ "best_kill_streak" ] ) ) - { - self.pers[ "killed_players" ] = []; - self.pers[ "killed_by" ] = []; - self.pers[ "nemesis_tracking" ] = []; - self.pers[ "artillery_kills" ] = 0; - self.pers[ "dog_kills" ] = 0; - self.pers[ "nemesis_name" ] = ""; - self.pers[ "nemesis_rank" ] = 0; - self.pers[ "nemesis_rankIcon" ] = 0; - self.pers[ "nemesis_xp" ] = 0; - self.pers[ "nemesis_xuid" ] = ""; - self.pers[ "best_kill_streak" ] = 0; - } - if ( !isDefined( self.pers[ "music" ] ) ) - { - self.pers[ "music" ] = spawnstruct(); - self.pers[ "music" ].spawn = 0; - self.pers[ "music" ].inque = 0; - self.pers[ "music" ].currentstate = "SILENT"; - self.pers[ "music" ].previousstate = "SILENT"; - self.pers[ "music" ].nextstate = "UNDERSCORE"; - self.pers[ "music" ].returnstate = "UNDERSCORE"; - } - self.leaderdialogqueue = []; - self.leaderdialogactive = 0; - self.leaderdialoggroups = []; - self.currentleaderdialoggroup = ""; - self.currentleaderdialog = ""; - self.currentleaderdialogtime = 0; - if ( !isDefined( self.pers[ "cur_kill_streak" ] ) ) - { - self.pers[ "cur_kill_streak" ] = 0; - } - if ( !isDefined( self.pers[ "cur_total_kill_streak" ] ) ) - { - self.pers[ "cur_total_kill_streak" ] = 0; - self setplayercurrentstreak( 0 ); - } - if ( !isDefined( self.pers[ "totalKillstreakCount" ] ) ) - { - self.pers[ "totalKillstreakCount" ] = 0; - } - if ( !isDefined( self.pers[ "killstreaksEarnedThisKillstreak" ] ) ) - { - self.pers[ "killstreaksEarnedThisKillstreak" ] = 0; - } - if ( isDefined( level.usingscorestreaks ) && level.usingscorestreaks && !isDefined( self.pers[ "killstreak_quantity" ] ) ) - { - self.pers[ "killstreak_quantity" ] = []; - } - if ( isDefined( level.usingscorestreaks ) && level.usingscorestreaks && !isDefined( self.pers[ "held_killstreak_ammo_count" ] ) ) - { - self.pers[ "held_killstreak_ammo_count" ] = []; - } - self.lastkilltime = 0; - self.cur_death_streak = 0; - self disabledeathstreak(); - self.death_streak = 0; - self.kill_streak = 0; - self.gametype_kill_streak = 0; - self.spawnqueueindex = -1; - self.deathtime = 0; - self.lastgrenadesuicidetime = -1; - self.teamkillsthisround = 0; - if ( isDefined( level.livesdonotreset ) || !level.livesdonotreset && !isDefined( self.pers[ "lives" ] ) ) - { - self.pers[ "lives" ] = level.numlives; - } - if ( !level.teambased ) - { - } - self.hasspawned = 0; - self.waitingtospawn = 0; - self.wantsafespawn = 0; - self.deathcount = 0; - self.wasaliveatmatchstart = 0; - level.players[ level.players.size ] = self; - if ( level.splitscreen ) - { - setdvar( "splitscreen_playerNum", level.players.size ); - } - if ( game[ "state" ] == "postgame" ) - { - self.pers[ "needteam" ] = 1; - self.pers[ "team" ] = "spectator"; - self.team = "spectator"; - self setclientuivisibilityflag( "hud_visible", 0 ); - self [[ level.spawnintermission ]](); - self closemenu(); - self closeingamemenu(); - profilelog_endtiming( 4, "gs=" + game[ "state" ] + " zom=" + sessionmodeiszombiesgame() ); - return; - } - if ( level.scr_zm_ui_gametype_group == "zencounter" ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "losses" ); - self updatestatratio( "wlratio", "wins", "losses" ); - if ( gamemodeismode( level.gamemode_public_match ) ) - { - self maps/mp/zombies/_zm_stats::add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "losses", 1 ); - } - } - else - { - if ( level.scr_zm_ui_gametype_group == "zsurvival" ) - { - if ( is_true( level.should_use_cia ) ) - { - self luinotifyevent( &"hud_update_survival_team", 1, 2 ); - } - } - } - level endon( "game_ended" ); - if ( isDefined( level.hostmigrationtimer ) ) - { - self thread maps/mp/gametypes_zm/_hostmigration::hostmigrationtimerthink(); - } - if ( level.oldschool ) - { - self.class = self.pers[ "class" ]; - } - if ( isDefined( self.pers[ "team" ] ) ) - { - self.team = self.pers[ "team" ]; - } - if ( isDefined( self.pers[ "class" ] ) ) - { - self.class = self.pers[ "class" ]; - } - if ( !isDefined( self.pers[ "team" ] ) || isDefined( self.pers[ "needteam" ] ) ) - { - self.pers[ "team" ] = "spectator"; - self.team = "spectator"; - self.sessionstate = "dead"; - self maps/mp/gametypes_zm/_globallogic_ui::updateobjectivetext(); - [[ level.spawnspectator ]](); - if ( level.rankedmatch ) - { - [[ level.autoassign ]]( 0 ); - self thread maps/mp/gametypes_zm/_globallogic_spawn::kickifdontspawn(); - } - else - { - [[ level.autoassign ]]( 0 ); - } - if ( self.pers[ "team" ] == "spectator" ) - { - self.sessionteam = "spectator"; - if ( !level.teambased ) - { - self.ffateam = "spectator"; - } - self thread spectate_player_watcher(); - } - if ( level.teambased ) - { - self.sessionteam = self.pers[ "team" ]; - if ( !isalive( self ) ) - { - self.statusicon = "hud_status_dead"; - } - self thread maps/mp/gametypes_zm/_spectating::setspectatepermissions(); - } - } - else - { - if ( self.pers[ "team" ] == "spectator" ) - { - self setclientscriptmainmenu( game[ "menu_class" ] ); - [[ level.spawnspectator ]](); - self.sessionteam = "spectator"; - self.sessionstate = "spectator"; - if ( !level.teambased ) - { - self.ffateam = "spectator"; - } - self thread spectate_player_watcher(); - } - else - { - self.sessionteam = self.pers[ "team" ]; - self.sessionstate = "dead"; - if ( !level.teambased ) - { - self.ffateam = self.pers[ "team" ]; - } - self maps/mp/gametypes_zm/_globallogic_ui::updateobjectivetext(); - [[ level.spawnspectator ]](); - if ( maps/mp/gametypes_zm/_globallogic_utils::isvalidclass( self.pers[ "class" ] ) ) - { - self thread [[ level.spawnclient ]](); - } - else - { - self maps/mp/gametypes_zm/_globallogic_ui::showmainmenuforteam(); - } - self thread maps/mp/gametypes_zm/_spectating::setspectatepermissions(); - } - } - if ( self.sessionteam != "spectator" ) - { - self thread maps/mp/gametypes_zm/_spawning::onspawnplayer_unified( 1 ); - } - profilelog_endtiming( 4, "gs=" + game[ "state" ] + " zom=" + sessionmodeiszombiesgame() ); - if ( isDefined( self.pers[ "isBot" ] ) ) - { - return; - } -} - -spectate_player_watcher() -{ - self endon( "disconnect" ); - self.watchingactiveclient = 1; - self.waitingforplayerstext = undefined; - while ( 1 ) - { - if ( self.pers[ "team" ] != "spectator" || level.gameended ) - { - self maps/mp/gametypes_zm/_hud_message::clearshoutcasterwaitingmessage(); -/# - println( " Unfreeze controls 1" ); -#/ - self freezecontrols( 0 ); - self.watchingactiveclient = 0; - return; - } - else if ( !level.splitscreen && !level.hardcoremode && getDvarInt( "scr_showperksonspawn" ) == 1 && game[ "state" ] != "postgame" && !isDefined( self.perkhudelem ) ) - { - if ( level.perksenabled == 1 ) - { - self maps/mp/gametypes_zm/_hud_util::showperks(); - } - self thread maps/mp/gametypes_zm/_globallogic_ui::hideloadoutaftertime( 0 ); - } - count = 0; - i = 0; - while ( i < level.players.size ) - { - if ( level.players[ i ].team != "spectator" ) - { - count++; - break; - } - else - { - i++; - } - } - if ( count > 0 ) - { - if ( !self.watchingactiveclient ) - { - self maps/mp/gametypes_zm/_hud_message::clearshoutcasterwaitingmessage(); - self freezecontrols( 0 ); -/# - println( " Unfreeze controls 2" ); -#/ - } - self.watchingactiveclient = 1; - } - else - { - if ( self.watchingactiveclient ) - { - [[ level.onspawnspectator ]](); - self freezecontrols( 1 ); - self maps/mp/gametypes_zm/_hud_message::setshoutcasterwaitingmessage(); - } - self.watchingactiveclient = 0; - } - wait 0,5; - } -} - -callback_playermigrated() -{ -/# - println( "Player " + self.name + " finished migrating at time " + getTime() ); -#/ - if ( isDefined( self.connected ) && self.connected ) - { - self maps/mp/gametypes_zm/_globallogic_ui::updateobjectivetext(); - } - self thread inform_clientvm_of_migration(); - level.hostmigrationreturnedplayercount++; - if ( level.hostmigrationreturnedplayercount >= ( ( level.players.size * 2 ) / 3 ) ) - { -/# - println( "2/3 of players have finished migrating" ); -#/ - level notify( "hostmigration_enoughplayers" ); - } -} - -inform_clientvm_of_migration() -{ - self endon( "disconnect" ); - wait 1; - self clientnotify( "hmo" ); -/# - println( "SERVER : Sent HMO to client " + self getentitynumber() ); -#/ -} - -callback_playerdisconnect() -{ - profilelog_begintiming( 5, "ship" ); - if ( game[ "state" ] != "postgame" && !level.gameended ) - { - gamelength = maps/mp/gametypes_zm/_globallogic::getgamelength(); - self maps/mp/gametypes_zm/_globallogic::bbplayermatchend( gamelength, "MP_PLAYER_DISCONNECT", 0 ); - } - self removeplayerondisconnect(); - if ( level.splitscreen ) - { - players = level.players; - if ( players.size <= 1 ) - { - level thread maps/mp/gametypes_zm/_globallogic::forceend(); - } - setdvar( "splitscreen_playerNum", players.size ); - } - if ( isDefined( self.score ) && isDefined( self.pers[ "team" ] ) ) - { - self logstring( "team: score " + self.pers[ "team" ] + ":" + self.score ); - level.dropteam += 1; - } - [[ level.onplayerdisconnect ]](); - lpselfnum = self getentitynumber(); - lpguid = self getguid(); - logprint( "Q;" + lpguid + ";" + lpselfnum + ";" + self.name + "\n" ); - entry = 0; - while ( entry < level.players.size ) - { - if ( level.players[ entry ] == self ) - { - while ( entry < ( level.players.size - 1 ) ) - { - level.players[ entry ] = level.players[ entry + 1 ]; - entry++; - } - break; - } - else - { - entry++; - } - } - entry = 0; - while ( entry < level.players.size ) - { - if ( isDefined( level.players[ entry ].pers[ "killed_players" ][ self.name ] ) ) - { - } - if ( isDefined( level.players[ entry ].killedplayerscurrent[ self.name ] ) ) - { - } - if ( isDefined( level.players[ entry ].pers[ "killed_by" ][ self.name ] ) ) - { - } - if ( isDefined( level.players[ entry ].pers[ "nemesis_tracking" ][ self.name ] ) ) - { - } - if ( level.players[ entry ].pers[ "nemesis_name" ] == self.name ) - { - level.players[ entry ] choosenextbestnemesis(); - } - entry++; - } - if ( level.gameended ) - { - self maps/mp/gametypes_zm/_globallogic::removedisconnectedplayerfromplacement(); - } - level thread maps/mp/gametypes_zm/_globallogic::updateteamstatus(); - profilelog_endtiming( 5, "gs=" + game[ "state" ] + " zom=" + sessionmodeiszombiesgame() ); -} - -callback_playermelee( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit ) -{ - hit = 1; - if ( level.teambased && self.team == eattacker.team ) - { - if ( level.friendlyfire == 0 ) - { - hit = 0; - } - } - self finishmeleehit( eattacker, sweapon, vorigin, vdir, boneindex, shieldhit, hit ); -} - -choosenextbestnemesis() -{ - nemesisarray = self.pers[ "nemesis_tracking" ]; - nemesisarraykeys = getarraykeys( nemesisarray ); - nemesisamount = 0; - nemesisname = ""; - while ( nemesisarraykeys.size > 0 ) - { - i = 0; - while ( i < nemesisarraykeys.size ) - { - nemesisarraykey = nemesisarraykeys[ i ]; - if ( nemesisarray[ nemesisarraykey ] > nemesisamount ) - { - nemesisname = nemesisarraykey; - nemesisamount = nemesisarray[ nemesisarraykey ]; - } - i++; - } - } - self.pers[ "nemesis_name" ] = nemesisname; - if ( nemesisname != "" ) - { - playerindex = 0; - while ( playerindex < level.players.size ) - { - if ( level.players[ playerindex ].name == nemesisname ) - { - nemesisplayer = level.players[ playerindex ]; - self.pers[ "nemesis_rank" ] = nemesisplayer.pers[ "rank" ]; - self.pers[ "nemesis_rankIcon" ] = nemesisplayer.pers[ "rankxp" ]; - self.pers[ "nemesis_xp" ] = nemesisplayer.pers[ "prestige" ]; - self.pers[ "nemesis_xuid" ] = nemesisplayer getxuid( 1 ); - break; - } - else - { - playerindex++; - } - } - } - else self.pers[ "nemesis_xuid" ] = ""; -} - -removeplayerondisconnect() -{ - entry = 0; - while ( entry < level.players.size ) - { - if ( level.players[ entry ] == self ) - { - while ( entry < ( level.players.size - 1 ) ) - { - level.players[ entry ] = level.players[ entry + 1 ]; - entry++; - } - return; - } - else - { - entry++; - } - } -} - -custom_gamemodes_modified_damage( victim, eattacker, idamage, smeansofdeath, sweapon, einflictor, shitloc ) -{ - if ( level.onlinegame && !sessionmodeisprivate() ) - { - return idamage; - } - if ( isDefined( eattacker ) && isDefined( eattacker.damagemodifier ) ) - { - idamage *= eattacker.damagemodifier; - } - if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) - { - idamage = int( idamage * level.bulletdamagescalar ); - } - return idamage; -} - -figureoutattacker( eattacker ) -{ - if ( isDefined( eattacker ) ) - { - if ( isai( eattacker ) && isDefined( eattacker.script_owner ) ) - { - team = self.team; - if ( isai( self ) && isDefined( self.aiteam ) ) - { - team = self.aiteam; - } - if ( eattacker.script_owner.team != team ) - { - eattacker = eattacker.script_owner; - } - } - if ( eattacker.classname == "script_vehicle" && isDefined( eattacker.owner ) ) - { - eattacker = eattacker.owner; - } - else - { - if ( eattacker.classname == "auto_turret" && isDefined( eattacker.owner ) ) - { - eattacker = eattacker.owner; - } - } - } - return eattacker; -} - -figureoutweapon( sweapon, einflictor ) -{ - if ( sweapon == "none" && isDefined( einflictor ) ) - { - if ( isDefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) - { - sweapon = "explodable_barrel_mp"; - } - else - { - if ( isDefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) - { - sweapon = "destructible_car_mp"; - } - } - } - return sweapon; -} - -isplayerimmunetokillstreak( eattacker, sweapon ) -{ - if ( level.hardcoremode ) - { - return 0; - } - if ( !isDefined( eattacker ) ) - { - return 0; - } - if ( self != eattacker ) - { - return 0; - } - if ( sweapon != "straferun_gun_mp" && sweapon != "straferun_rockets_mp" ) - { - return 0; - } - return 1; -} - -callback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) -{ - profilelog_begintiming( 6, "ship" ); - if ( game[ "state" ] == "postgame" ) - { - return; - } - if ( self.sessionteam == "spectator" ) - { - return; - } - if ( isDefined( self.candocombat ) && !self.candocombat ) - { - return; - } - if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( eattacker.candocombat ) && !eattacker.candocombat ) - { - return; - } - if ( isDefined( level.hostmigrationtimer ) ) - { - return; - } - if ( sweapon != "ai_tank_drone_gun_mp" && sweapon == "ai_tank_drone_rocket_mp" && !level.hardcoremode ) - { - if ( isDefined( eattacker ) && eattacker == self ) - { - if ( isDefined( einflictor ) && isDefined( einflictor.from_ai ) ) - { - return; - } - } - if ( isDefined( eattacker ) && isDefined( eattacker.owner ) && eattacker.owner == self ) - { - return; - } - } - if ( sweapon == "emp_grenade_mp" ) - { - self notify( "emp_grenaded" ); - } - idamage = custom_gamemodes_modified_damage( self, eattacker, idamage, smeansofdeath, sweapon, einflictor, shitloc ); - idamage = int( idamage ); - self.idflags = idflags; - self.idflagstime = getTime(); - eattacker = figureoutattacker( eattacker ); - pixbeginevent( "PlayerDamage flags/tweaks" ); - if ( !isDefined( vdir ) ) - { - idflags |= level.idflags_no_knockback; - } - friendly = 0; - if ( self.health != self.maxhealth ) - { - self notify( "snd_pain_player" ); - } - if ( isDefined( einflictor ) && isDefined( einflictor.script_noteworthy ) && einflictor.script_noteworthy == "ragdoll_now" ) - { - smeansofdeath = "MOD_FALLING"; - } - if ( maps/mp/gametypes_zm/_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) && isplayer( eattacker ) ) - { - smeansofdeath = "MOD_HEAD_SHOT"; - } - if ( level.onplayerdamage != ::maps/mp/gametypes_zm/_globallogic::blank ) - { - modifieddamage = [[ level.onplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); - if ( isDefined( modifieddamage ) ) - { - if ( modifieddamage <= 0 ) - { - return; - } - idamage = modifieddamage; - } - } - if ( level.onlyheadshots ) - { - if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) - { - return; - } - else - { - if ( smeansofdeath == "MOD_HEAD_SHOT" ) - { - idamage = 150; - } - } - } - if ( isDefined( eattacker ) && isplayer( eattacker ) && self.team != eattacker.team ) - { - self.lastattackweapon = sweapon; - } - sweapon = figureoutweapon( sweapon, einflictor ); - pixendevent(); - if ( isplayer( eattacker ) ) - { - attackerishittingteammate = self isenemyplayer( eattacker ) == 0; - } - if ( shitloc == "riotshield" ) - { - if ( attackerishittingteammate && level.friendlyfire == 0 ) - { - return; - } - if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" && !attackerishittingteammate ) - { - previous_shield_damage = self.shielddamageblocked; - self.shielddamageblocked += idamage; - if ( isplayer( eattacker ) ) - { - eattacker.lastattackedshieldplayer = self; - eattacker.lastattackedshieldtime = getTime(); - } - if ( ( self.shielddamageblocked % 400 ) < ( previous_shield_damage % 400 ) ) - { - score_event = "shield_blocked_damage"; - if ( self.shielddamageblocked > 2000 ) - { - score_event = "shield_blocked_damage_reduced"; - } - } - } - if ( idflags & level.idflags_shield_explosive_impact ) - { - shitloc = "none"; - if ( idflags & level.idflags_shield_explosive_impact_huge ) - { - idamage *= 0; - } - } - else if ( idflags & level.idflags_shield_explosive_splash ) - { - if ( isDefined( einflictor ) && isDefined( einflictor.stucktoplayer ) && einflictor.stucktoplayer == self ) - { - idamage = 101; - } - shitloc = "none"; - } - else - { - return; - } - } - if ( isDefined( eattacker ) && eattacker != self && !friendly ) - { - level.usestartspawns = 0; - } - pixbeginevent( "PlayerDamage log" ); -/# - if ( getDvarInt( "g_debugDamage" ) ) - { - println( "client:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); -#/ - } - if ( self.sessionstate != "dead" ) - { - lpselfnum = self getentitynumber(); - lpselfname = self.name; - lpselfteam = self.team; - lpselfguid = self getguid(); - lpattackerteam = ""; - lpattackerorigin = ( 0, 0, 0 ); - if ( isplayer( eattacker ) ) - { - lpattacknum = eattacker getentitynumber(); - lpattackguid = eattacker getguid(); - lpattackname = eattacker.name; - lpattackerteam = eattacker.team; - lpattackerorigin = eattacker.origin; - bbprint( "mpattacks", "gametime %d attackerspawnid %d attackerweapon %s attackerx %d attackery %d attackerz %d victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", getTime(), getplayerspawnid( eattacker ), sweapon, lpattackerorigin, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 0 ); - } - else - { - lpattacknum = -1; - lpattackguid = ""; - lpattackname = ""; - lpattackerteam = "world"; - bbprint( "mpattacks", "gametime %d attackerweapon %s victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", getTime(), sweapon, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 0 ); - } - logprint( "D;" + lpselfguid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\n" ); - } - pixendevent(); - profilelog_endtiming( 6, "gs=" + game[ "state" ] + " zom=" + sessionmodeiszombiesgame() ); -} - -resetattackerlist() -{ - self.attackers = []; - self.attackerdata = []; - self.attackerdamage = []; - self.firsttimedamaged = 0; -} - -dodamagefeedback( sweapon, einflictor, idamage, smeansofdeath ) -{ - if ( !isDefined( sweapon ) ) - { - return 0; - } - if ( level.allowhitmarkers == 0 ) - { - return 0; - } - if ( level.allowhitmarkers == 1 ) - { - if ( isDefined( smeansofdeath ) && isDefined( idamage ) ) - { - if ( istacticalhitmarker( sweapon, smeansofdeath, idamage ) ) - { - return 0; - } - } - } - return 1; -} - -istacticalhitmarker( sweapon, smeansofdeath, idamage ) -{ - if ( isgrenade( sweapon ) ) - { - if ( sweapon == "willy_pete_mp" ) - { - if ( smeansofdeath == "MOD_GRENADE_SPLASH" ) - { - return 1; - } - } - else - { - if ( idamage == 1 ) - { - return 1; - } - } - } - return 0; -} - -doperkfeedback( player, sweapon, smeansofdeath, einflictor ) -{ - perkfeedback = undefined; - return perkfeedback; -} - -isaikillstreakdamage( sweapon, einflictor ) -{ - switch( sweapon ) - { - case "ai_tank_drone_rocket_mp": - return isDefined( einflictor.firedbyai ); - case "missile_swarm_projectile_mp": - return 1; - case "planemortar_mp": - return 1; - case "chopper_minigun_mp": - return 1; - case "straferun_rockets_mp": - return 1; - case "littlebird_guard_minigun_mp": - return 1; - case "cobra_20mm_comlink_mp": - return 1; - } - return 0; -} - -finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) -{ - pixbeginevent( "finishPlayerDamageWrapper" ); - if ( !level.console && idflags & level.idflags_penetration && isplayer( eattacker ) ) - { -/# - println( "penetrated:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); -#/ - eattacker addplayerstat( "penetration_shots", 1 ); - } - self finishplayerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - if ( getDvar( #"C8077F47" ) != "" ) - { - self shellshock( "damage_mp", 0,2 ); - } - self damageshellshockandrumble( eattacker, einflictor, sweapon, smeansofdeath, idamage ); - pixendevent(); -} - -allowedassistweapon( weapon ) -{ - return 1; -} - -callback_playerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) -{ - profilelog_begintiming( 7, "ship" ); - self endon( "spawned" ); - self notify( "killed_player" ); - if ( self.sessionteam == "spectator" ) - { - return; - } - if ( game[ "state" ] == "postgame" ) - { - return; - } - self needsrevive( 0 ); - if ( isDefined( self.burning ) && self.burning == 1 ) - { - self setburn( 0 ); - } - self.suicide = 0; - if ( isDefined( level.takelivesondeath ) && level.takelivesondeath == 1 ) - { - if ( self.pers[ "lives" ] ) - { - self.pers[ "lives" ]--; - - if ( self.pers[ "lives" ] == 0 ) - { - level notify( "player_eliminated" ); - self notify( "player_eliminated" ); - } - } - } - self thread flushgroupdialogonplayer( "item_destroyed" ); - sweapon = updateweapon( einflictor, sweapon ); - pixbeginevent( "PlayerKilled pre constants" ); - wasinlaststand = 0; - deathtimeoffset = 0; - lastweaponbeforedroppingintolaststand = undefined; - attackerstance = undefined; - self.laststandthislife = undefined; - self.vattackerorigin = undefined; - if ( isDefined( self.uselaststandparams ) ) - { - self.uselaststandparams = undefined; -/# - assert( isDefined( self.laststandparams ) ); -#/ - if ( !level.teambased || isDefined( attacker ) && isplayer( attacker ) || attacker.team != self.team && attacker == self ) - { - einflictor = self.laststandparams.einflictor; - attacker = self.laststandparams.attacker; - attackerstance = self.laststandparams.attackerstance; - idamage = self.laststandparams.idamage; - smeansofdeath = self.laststandparams.smeansofdeath; - sweapon = self.laststandparams.sweapon; - vdir = self.laststandparams.vdir; - shitloc = self.laststandparams.shitloc; - self.vattackerorigin = self.laststandparams.vattackerorigin; - deathtimeoffset = ( getTime() - self.laststandparams.laststandstarttime ) / 1000; - if ( isDefined( self.previousprimary ) ) - { - wasinlaststand = 1; - lastweaponbeforedroppingintolaststand = self.previousprimary; - } - } - self.laststandparams = undefined; - } - bestplayer = undefined; - bestplayermeansofdeath = undefined; - obituarymeansofdeath = undefined; - bestplayerweapon = undefined; - obituaryweapon = undefined; - if ( isDefined( attacker ) && attacker.classname != "trigger_hurt" && attacker.classname != "worldspawn" && isDefined( attacker.ismagicbullet ) && attacker.ismagicbullet != 1 && attacker == self && isDefined( self.attackers ) ) - { - while ( !isDefined( bestplayer ) ) - { - i = 0; - while ( i < self.attackers.size ) - { - player = self.attackers[ i ]; - if ( !isDefined( player ) ) - { - i++; - continue; - } - else if ( !isDefined( self.attackerdamage[ player.clientid ] ) || !isDefined( self.attackerdamage[ player.clientid ].damage ) ) - { - i++; - continue; - } - else - { - if ( player == self || level.teambased && player.team == self.team ) - { - i++; - continue; - } - else - { - if ( ( self.attackerdamage[ player.clientid ].lasttimedamaged + 2500 ) < getTime() ) - { - i++; - continue; - } - else if ( !allowedassistweapon( self.attackerdamage[ player.clientid ].weapon ) ) - { - i++; - continue; - } - else if ( self.attackerdamage[ player.clientid ].damage > 1 && !isDefined( bestplayer ) ) - { - bestplayer = player; - bestplayermeansofdeath = self.attackerdamage[ player.clientid ].meansofdeath; - bestplayerweapon = self.attackerdamage[ player.clientid ].weapon; - i++; - continue; - } - else - { - if ( isDefined( bestplayer ) && self.attackerdamage[ player.clientid ].damage > self.attackerdamage[ bestplayer.clientid ].damage ) - { - bestplayer = player; - bestplayermeansofdeath = self.attackerdamage[ player.clientid ].meansofdeath; - bestplayerweapon = self.attackerdamage[ player.clientid ].weapon; - } - } - } - } - i++; - } - } - if ( isDefined( bestplayer ) ) - { - self recordkillmodifier( "assistedsuicide" ); - } - } - if ( isDefined( bestplayer ) ) - { - attacker = bestplayer; - obituarymeansofdeath = bestplayermeansofdeath; - obituaryweapon = bestplayerweapon; - } - if ( isplayer( attacker ) ) - { - } - if ( maps/mp/gametypes_zm/_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) && isplayer( attacker ) ) - { - attacker playlocalsound( "prj_bullet_impact_headshot_helmet_nodie_2d" ); - smeansofdeath = "MOD_HEAD_SHOT"; - } - self.deathtime = getTime(); - attacker = updateattacker( attacker, sweapon ); - einflictor = updateinflictor( einflictor ); - smeansofdeath = updatemeansofdeath( sweapon, smeansofdeath ); - if ( isDefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped == 1 ) - { - self detachshieldmodel( level.carriedshieldmodel, "tag_weapon_left" ); - self.hasriotshield = 0; - self.hasriotshieldequipped = 0; - } - self thread updateglobalbotkilledcounter(); - if ( isplayer( attacker ) && attacker != self || !level.teambased && level.teambased && self.team != attacker.team ) - { - self addweaponstat( sweapon, "deaths", 1 ); - if ( wasinlaststand && isDefined( lastweaponbeforedroppingintolaststand ) ) - { - weaponname = lastweaponbeforedroppingintolaststand; - } - else - { - weaponname = self.lastdroppableweapon; - } - if ( isDefined( weaponname ) && !issubstr( weaponname, "gl_" ) || issubstr( weaponname, "mk_" ) && issubstr( weaponname, "ft_" ) ) - { - weaponname = self.currentweapon; - } - if ( isDefined( weaponname ) ) - { - self addweaponstat( weaponname, "deathsDuringUse", 1 ); - } - if ( smeansofdeath != "MOD_FALLING" ) - { - attacker addweaponstat( sweapon, "kills", 1 ); - } - if ( smeansofdeath == "MOD_HEAD_SHOT" ) - { - attacker addweaponstat( sweapon, "headshots", 1 ); - } - } - if ( !isDefined( obituarymeansofdeath ) ) - { - obituarymeansofdeath = smeansofdeath; - } - if ( !isDefined( obituaryweapon ) ) - { - obituaryweapon = sweapon; - } - if ( !isplayer( attacker ) || self isenemyplayer( attacker ) == 0 ) - { - level notify( "reset_obituary_count" ); - level.lastobituaryplayercount = 0; - level.lastobituaryplayer = undefined; - } - else - { - if ( isDefined( level.lastobituaryplayer ) && level.lastobituaryplayer == attacker ) - { - level.lastobituaryplayercount++; - } - else - { - level notify( "reset_obituary_count" ); - level.lastobituaryplayer = attacker; - level.lastobituaryplayercount = 1; - } - if ( level.lastobituaryplayercount >= 4 ) - { - level notify( "reset_obituary_count" ); - level.lastobituaryplayercount = 0; - level.lastobituaryplayer = undefined; - } - } - overrideentitycamera = 0; - if ( level.teambased && isDefined( attacker.pers ) && self.team == attacker.team && obituarymeansofdeath == "MOD_GRENADE" && level.friendlyfire == 0 ) - { - obituary( self, self, obituaryweapon, obituarymeansofdeath ); - maps/mp/_demo::bookmark( "kill", getTime(), self, self, 0, einflictor, overrideentitycamera ); - } - else - { - obituary( self, attacker, obituaryweapon, obituarymeansofdeath ); - maps/mp/_demo::bookmark( "kill", getTime(), self, attacker, 0, einflictor, overrideentitycamera ); - } - if ( !level.ingraceperiod ) - { - self maps/mp/gametypes_zm/_weapons::dropscavengerfordeath( attacker ); - self maps/mp/gametypes_zm/_weapons::dropweaponfordeath( attacker ); - self maps/mp/gametypes_zm/_weapons::dropoffhand(); - } - maps/mp/gametypes_zm/_spawnlogic::deathoccured( self, attacker ); - self.sessionstate = "dead"; - self.statusicon = "hud_status_dead"; - self.killedplayerscurrent = []; - self.deathcount++; -/# - println( "players(" + self.clientid + ") death count ++: " + self.deathcount ); -#/ - if ( !isDefined( self.switching_teams ) ) - { - if ( isplayer( attacker ) && level.teambased && attacker != self && self.team == attacker.team ) - { - self.pers[ "cur_kill_streak" ] = 0; - self.pers[ "cur_total_kill_streak" ] = 0; - self.pers[ "totalKillstreakCount" ] = 0; - self.pers[ "killstreaksEarnedThisKillstreak" ] = 0; - self setplayercurrentstreak( 0 ); - } - else - { - self maps/mp/gametypes_zm/_globallogic_score::incpersstat( "deaths", 1, 1, 1 ); - self.deaths = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "deaths" ); - self updatestatratio( "kdratio", "kills", "deaths" ); - if ( self.pers[ "cur_kill_streak" ] > self.pers[ "best_kill_streak" ] ) - { - self.pers[ "best_kill_streak" ] = self.pers[ "cur_kill_streak" ]; - } - self.pers[ "kill_streak_before_death" ] = self.pers[ "cur_kill_streak" ]; - self.pers[ "cur_kill_streak" ] = 0; - self.pers[ "cur_total_kill_streak" ] = 0; - self.pers[ "totalKillstreakCount" ] = 0; - self.pers[ "killstreaksEarnedThisKillstreak" ] = 0; - self setplayercurrentstreak( 0 ); - self.cur_death_streak++; - if ( self.cur_death_streak > self.death_streak ) - { - if ( level.rankedmatch ) - { - self setdstat( "HighestStats", "death_streak", self.cur_death_streak ); - } - self.death_streak = self.cur_death_streak; - } - if ( self.cur_death_streak >= getDvarInt( "perk_deathStreakCountRequired" ) ) - { - self enabledeathstreak(); - } - } - } - else - { - self.pers[ "totalKillstreakCount" ] = 0; - self.pers[ "killstreaksEarnedThisKillstreak" ] = 0; - } - lpselfnum = self getentitynumber(); - lpselfname = self.name; - lpattackguid = ""; - lpattackname = ""; - lpselfteam = self.team; - lpselfguid = self getguid(); - lpattackteam = ""; - lpattackorigin = ( 0, 0, 0 ); - lpattacknum = -1; - awardassists = 0; - pixendevent(); - self resetplayermomentumondeath(); - if ( isplayer( attacker ) ) - { - lpattackguid = attacker getguid(); - lpattackname = attacker.name; - lpattackteam = attacker.team; - lpattackorigin = attacker.origin; - if ( attacker == self ) - { - dokillcam = 0; - self maps/mp/gametypes_zm/_globallogic_score::incpersstat( "suicides", 1 ); - self.suicides = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "suicides" ); - if ( smeansofdeath == "MOD_SUICIDE" && shitloc == "none" && self.throwinggrenade ) - { - self.lastgrenadesuicidetime = getTime(); - } - awardassists = 1; - self.suicide = 1; - if ( isDefined( self.friendlydamage ) ) - { - self iprintln( &"MP_FRIENDLY_FIRE_WILL_NOT" ); - if ( level.teamkillpointloss ) - { - scoresub = self [[ level.getteamkillscore ]]( einflictor, attacker, smeansofdeath, sweapon ); - maps/mp/gametypes_zm/_globallogic_score::_setplayerscore( attacker, maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( attacker ) - scoresub ); - } - } - } - else - { - pixbeginevent( "PlayerKilled attacker" ); - lpattacknum = attacker getentitynumber(); - dokillcam = 1; - if ( level.teambased && self.team == attacker.team && smeansofdeath == "MOD_GRENADE" && level.friendlyfire == 0 ) - { - } - else - { - if ( level.teambased && self.team == attacker.team ) - { - if ( !ignoreteamkills( sweapon, smeansofdeath ) ) - { - teamkill_penalty = self [[ level.getteamkillpenalty ]]( einflictor, attacker, smeansofdeath, sweapon ); - attacker maps/mp/gametypes_zm/_globallogic_score::incpersstat( "teamkills_nostats", teamkill_penalty, 0 ); - attacker maps/mp/gametypes_zm/_globallogic_score::incpersstat( "teamkills", 1 ); - attacker.teamkillsthisround++; - if ( level.teamkillpointloss ) - { - scoresub = self [[ level.getteamkillscore ]]( einflictor, attacker, smeansofdeath, sweapon ); - maps/mp/gametypes_zm/_globallogic_score::_setplayerscore( attacker, maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( attacker ) - scoresub ); - } - if ( maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() < 5000 ) - { - teamkilldelay = 1; - } - else if ( attacker.pers[ "teamkills_nostats" ] > 1 && maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() < ( 8000 + ( attacker.pers[ "teamkills_nostats" ] * 1000 ) ) ) - { - teamkilldelay = 1; - } - else - { - teamkilldelay = attacker teamkilldelay(); - } - if ( teamkilldelay > 0 ) - { - attacker.teamkillpunish = 1; - attacker suicide(); - if ( attacker shouldteamkillkick( teamkilldelay ) ) - { - attacker teamkillkick(); - } - attacker thread reduceteamkillsovertime(); - } - } - } - else - { - maps/mp/gametypes_zm/_globallogic_score::inctotalkills( attacker.team ); - attacker thread maps/mp/gametypes_zm/_globallogic_score::givekillstats( smeansofdeath, sweapon, self ); - if ( isalive( attacker ) ) - { - pixbeginevent( "killstreak" ); - if ( isDefined( einflictor ) || !isDefined( einflictor.requireddeathcount ) && attacker.deathcount == einflictor.requireddeathcount ) - { - shouldgivekillstreak = 0; - attacker.pers[ "cur_total_kill_streak" ]++; - attacker setplayercurrentstreak( attacker.pers[ "cur_total_kill_streak" ] ); - if ( isDefined( level.killstreaks ) && shouldgivekillstreak ) - { - attacker.pers[ "cur_kill_streak" ]++; - if ( attacker.pers[ "cur_kill_streak" ] >= 3 ) - { - if ( attacker.pers[ "cur_kill_streak" ] <= 30 ) - { - } - } - } - } - pixendevent(); - } - if ( attacker.pers[ "cur_kill_streak" ] > attacker.kill_streak ) - { - if ( level.rankedmatch ) - { - attacker setdstat( "HighestStats", "kill_streak", attacker.pers[ "totalKillstreakCount" ] ); - } - attacker.kill_streak = attacker.pers[ "cur_kill_streak" ]; - } - killstreak = undefined; - if ( isDefined( killstreak ) ) - { - } - else if ( smeansofdeath == "MOD_HEAD_SHOT" ) - { - } - else if ( smeansofdeath == "MOD_MELEE" ) - { - if ( sweapon == "riotshield_mp" ) - { - } - } - attacker thread maps/mp/gametypes_zm/_globallogic_score::trackattackerkill( self.name, self.pers[ "rank" ], self.pers[ "rankxp" ], self.pers[ "prestige" ], self getxuid( 1 ) ); - attackername = attacker.name; - self thread maps/mp/gametypes_zm/_globallogic_score::trackattackeedeath( attackername, attacker.pers[ "rank" ], attacker.pers[ "rankxp" ], attacker.pers[ "prestige" ], attacker getxuid( 1 ) ); - attacker thread maps/mp/gametypes_zm/_globallogic_score::inckillstreaktracker( sweapon ); - if ( level.teambased && attacker.team != "spectator" ) - { - if ( isai( attacker ) ) - { - maps/mp/gametypes_zm/_globallogic_score::giveteamscore( "kill", attacker.aiteam, attacker, self ); - } - else - { - maps/mp/gametypes_zm/_globallogic_score::giveteamscore( "kill", attacker.team, attacker, self ); - } - } - scoresub = level.deathpointloss; - if ( scoresub != 0 ) - { - maps/mp/gametypes_zm/_globallogic_score::_setplayerscore( self, maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( self ) - scoresub ); - } - level thread playkillbattlechatter( attacker, sweapon, self ); - if ( level.teambased ) - { - awardassists = 1; - } - } - } - pixendevent(); - } - } - else if ( isDefined( attacker ) || attacker.classname == "trigger_hurt" && attacker.classname == "worldspawn" ) - { - dokillcam = 0; - lpattacknum = -1; - lpattackguid = ""; - lpattackname = ""; - lpattackteam = "world"; - self maps/mp/gametypes_zm/_globallogic_score::incpersstat( "suicides", 1 ); - self.suicides = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "suicides" ); - awardassists = 1; - } - else - { - dokillcam = 0; - lpattacknum = -1; - lpattackguid = ""; - lpattackname = ""; - lpattackteam = "world"; - if ( isDefined( einflictor ) && isDefined( einflictor.killcament ) ) - { - dokillcam = 1; - lpattacknum = self getentitynumber(); - } - if ( isDefined( attacker ) && isDefined( attacker.team ) && isDefined( level.teams[ attacker.team ] ) ) - { - if ( attacker.team != self.team ) - { - if ( level.teambased ) - { - maps/mp/gametypes_zm/_globallogic_score::giveteamscore( "kill", attacker.team, attacker, self ); - } - } - } - awardassists = 1; - } - if ( sessionmodeiszombiesgame() ) - { - awardassists = 0; - } - if ( awardassists ) - { - pixbeginevent( "PlayerKilled assists" ); - while ( isDefined( self.attackers ) ) - { - j = 0; - while ( j < self.attackers.size ) - { - player = self.attackers[ j ]; - if ( !isDefined( player ) ) - { - j++; - continue; - } - else if ( player == attacker ) - { - j++; - continue; - } - else if ( player.team != lpattackteam ) - { - j++; - continue; - } - else - { - damage_done = self.attackerdamage[ player.clientid ].damage; - player thread maps/mp/gametypes_zm/_globallogic_score::processassist( self, damage_done, self.attackerdamage[ player.clientid ].weapon ); - } - j++; - } - } - if ( isDefined( self.lastattackedshieldplayer ) && isDefined( self.lastattackedshieldtime ) && self.lastattackedshieldplayer != attacker ) - { - if ( ( getTime() - self.lastattackedshieldtime ) < 4000 ) - { - self.lastattackedshieldplayer thread maps/mp/gametypes_zm/_globallogic_score::processshieldassist( self ); - } - } - pixendevent(); - } - pixbeginevent( "PlayerKilled post constants" ); - self.lastattacker = attacker; - self.lastdeathpos = self.origin; - if ( isDefined( attacker ) && isplayer( attacker ) && attacker != self || !level.teambased && attacker.team != self.team ) - { - self thread maps/mp/_challenges::playerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, shitloc, attackerstance ); - } - else - { - self notify( "playerKilledChallengesProcessed" ); - } - if ( isDefined( self.attackers ) ) - { - self.attackers = []; - } - if ( isplayer( attacker ) ) - { - bbprint( "mpattacks", "gametime %d attackerspawnid %d attackerweapon %s attackerx %d attackery %d attackerz %d victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", getTime(), getplayerspawnid( attacker ), sweapon, lpattackorigin, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 1 ); - } - else - { - bbprint( "mpattacks", "gametime %d attackerweapon %s victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", getTime(), sweapon, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 1 ); - } - logprint( "K;" + lpselfguid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\n" ); - attackerstring = "none"; - if ( isplayer( attacker ) ) - { - attackerstring = attacker getxuid() + "(" + lpattackname + ")"; - } - self logstring( "d " + smeansofdeath + "(" + sweapon + ") a:" + attackerstring + " d:" + idamage + " l:" + shitloc + " @ " + int( self.origin[ 0 ] ) + " " + int( self.origin[ 1 ] ) + " " + int( self.origin[ 2 ] ) ); - level thread maps/mp/gametypes_zm/_globallogic::updateteamstatus(); - killcamentity = self getkillcamentity( attacker, einflictor, sweapon ); - killcamentityindex = -1; - killcamentitystarttime = 0; - if ( isDefined( killcamentity ) ) - { - killcamentityindex = killcamentity getentitynumber(); - if ( isDefined( killcamentity.starttime ) ) - { - killcamentitystarttime = killcamentity.starttime; - } - else - { - killcamentitystarttime = killcamentity.birthtime; - } - if ( !isDefined( killcamentitystarttime ) ) - { - killcamentitystarttime = 0; - } - } - if ( isDefined( self.killstreak_waitamount ) && self.killstreak_waitamount > 0 ) - { - dokillcam = 0; - } - self maps/mp/gametypes_zm/_weapons::detachcarryobjectmodel(); - died_in_vehicle = 0; - if ( isDefined( self.diedonvehicle ) ) - { - died_in_vehicle = self.diedonvehicle; - } - pixendevent(); - pixbeginevent( "PlayerKilled body and gibbing" ); - if ( !died_in_vehicle ) - { - vattackerorigin = undefined; - if ( isDefined( attacker ) ) - { - vattackerorigin = attacker.origin; - } - ragdoll_now = 0; - if ( isDefined( self.usingvehicle ) && self.usingvehicle && isDefined( self.vehicleposition ) && self.vehicleposition == 1 ) - { - ragdoll_now = 1; - } - body = self cloneplayer( deathanimduration ); - self createdeadbody( idamage, smeansofdeath, sweapon, shitloc, vdir, vattackerorigin, deathanimduration, einflictor, ragdoll_now, body ); - } - pixendevent(); - thread maps/mp/gametypes_zm/_globallogic_spawn::spawnqueuedclient( self.team, attacker ); - self.switching_teams = undefined; - self.joining_team = undefined; - self.leaving_team = undefined; - self thread [[ level.onplayerkilled ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); - icb = 0; - while ( icb < level.onplayerkilledextraunthreadedcbs.size ) - { - self [[ level.onplayerkilledextraunthreadedcbs[ icb ] ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); - icb++; - } - self.wantsafespawn = 0; - perks = []; - killstreaks = maps/mp/gametypes_zm/_globallogic::getkillstreaks( attacker ); - if ( !isDefined( self.killstreak_waitamount ) ) - { - self thread [[ level.spawnplayerprediction ]](); - } - profilelog_endtiming( 7, "gs=" + game[ "state" ] + " zom=" + sessionmodeiszombiesgame() ); - wait 0,25; - weaponclass = getweaponclass( sweapon ); - self.cancelkillcam = 0; - defaultplayerdeathwatchtime = 1,75; - if ( isDefined( level.overrideplayerdeathwatchtimer ) ) - { - defaultplayerdeathwatchtime = [[ level.overrideplayerdeathwatchtimer ]]( defaultplayerdeathwatchtime ); - } - maps/mp/gametypes_zm/_globallogic_utils::waitfortimeornotifies( defaultplayerdeathwatchtime ); - self notify( "death_delay_finished" ); -/# - if ( getDvarInt( #"C1849218" ) != 0 ) - { - dokillcam = 1; - if ( lpattacknum < 0 ) - { - lpattacknum = self getentitynumber(); -#/ - } - } - if ( game[ "state" ] != "playing" ) - { - return; - } - self.respawntimerstarttime = getTime(); - if ( !self.cancelkillcam && dokillcam && level.killcam ) - { - if ( level.numliveslivesleft = self.pers[ "lives" ]; - timeuntilspawn = maps/mp/gametypes_zm/_globallogic_spawn::timeuntilspawn( 1 ); - && livesleft && timeuntilspawn <= 0 ) - { - willrespawnimmediately = !level.playerqueuedrespawn; - } - } - if ( game[ "state" ] != "playing" ) - { - self.sessionstate = "dead"; - self.spectatorclient = -1; - self.killcamtargetentity = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - return; - } - waittillkillstreakdone(); - if ( maps/mp/gametypes_zm/_globallogic_utils::isvalidclass( self.class ) ) - { - timepassed = undefined; - if ( isDefined( self.respawntimerstarttime ) ) - { - timepassed = ( getTime() - self.respawntimerstarttime ) / 1000; - } - self thread [[ level.spawnclient ]]( timepassed ); - self.respawntimerstarttime = undefined; - } -} - -updateglobalbotkilledcounter() -{ - if ( isDefined( self.pers[ "isBot" ] ) ) - { - level.globallarryskilled++; - } -} - -waittillkillstreakdone() -{ - if ( isDefined( self.killstreak_waitamount ) ) - { - starttime = getTime(); - waittime = self.killstreak_waitamount * 1000; - while ( getTime() < ( starttime + waittime ) && isDefined( self.killstreak_waitamount ) ) - { - wait 0,1; - } - wait 2; - self.killstreak_waitamount = undefined; - } -} - -teamkillkick() -{ - self maps/mp/gametypes_zm/_globallogic_score::incpersstat( "sessionbans", 1 ); - self endon( "disconnect" ); - waittillframeend; - playlistbanquantum = maps/mp/gametypes_zm/_tweakables::gettweakablevalue( "team", "teamkillerplaylistbanquantum" ); - playlistbanpenalty = maps/mp/gametypes_zm/_tweakables::gettweakablevalue( "team", "teamkillerplaylistbanpenalty" ); - if ( playlistbanquantum > 0 && playlistbanpenalty > 0 ) - { - timeplayedtotal = self getdstat( "playerstatslist", "time_played_total", "StatValue" ); - minutesplayed = timeplayedtotal / 60; - freebees = 2; - banallowance = int( floor( minutesplayed / playlistbanquantum ) ) + freebees; - if ( self.sessionbans > banallowance ) - { - self setdstat( "playerstatslist", "gametypeban", "StatValue", timeplayedtotal + ( playlistbanpenalty * 60 ) ); - } - } - if ( self is_bot() ) - { - level notify( "bot_kicked" ); - } - ban( self getentitynumber() ); - maps/mp/gametypes_zm/_globallogic_audio::leaderdialog( "kicked" ); -} - -teamkilldelay() -{ - teamkills = self.pers[ "teamkills_nostats" ]; - if ( level.minimumallowedteamkills < 0 || teamkills <= level.minimumallowedteamkills ) - { - return 0; - } - exceeded = teamkills - level.minimumallowedteamkills; - return level.teamkillspawndelay * exceeded; -} - -shouldteamkillkick( teamkilldelay ) -{ - if ( teamkilldelay && level.minimumallowedteamkills >= 0 ) - { - if ( maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() >= 5000 ) - { - return 1; - } - if ( self.pers[ "teamkills_nostats" ] > 1 ) - { - return 1; - } - } - return 0; -} - -reduceteamkillsovertime() -{ - timeperoneteamkillreduction = 20; - reductionpersecond = 1 / timeperoneteamkillreduction; - while ( 1 ) - { - if ( isalive( self ) ) - { - self.pers[ "teamkills_nostats" ] -= reductionpersecond; - if ( self.pers[ "teamkills_nostats" ] < level.minimumallowedteamkills ) - { - self.pers[ "teamkills_nostats" ] = level.minimumallowedteamkills; - return; - } - } - else - { - wait 1; - } - } -} - -ignoreteamkills( sweapon, smeansofdeath ) -{ - if ( sessionmodeiszombiesgame() ) - { - return 1; - } - if ( smeansofdeath == "MOD_MELEE" ) - { - return 0; - } - if ( sweapon == "briefcase_bomb_mp" ) - { - return 1; - } - if ( sweapon == "supplydrop_mp" ) - { - return 1; - } - return 0; -} - -callback_playerlaststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) -{ -} - -damageshellshockandrumble( eattacker, einflictor, sweapon, smeansofdeath, idamage ) -{ - self thread maps/mp/gametypes_zm/_weapons::onweapondamage( eattacker, einflictor, sweapon, smeansofdeath, idamage ); - self playrumbleonentity( "damage_heavy" ); -} - -createdeadbody( idamage, smeansofdeath, sweapon, shitloc, vdir, vattackerorigin, deathanimduration, einflictor, ragdoll_jib, body ) -{ - if ( smeansofdeath == "MOD_HIT_BY_OBJECT" && self getstance() == "prone" ) - { - self.body = body; - return; - } - if ( isDefined( level.ragdoll_override ) && self [[ level.ragdoll_override ]]() ) - { - return; - } - if ( !ragdoll_jib && !self isonladder() && !self ismantling() || smeansofdeath == "MOD_CRUSH" && smeansofdeath == "MOD_HIT_BY_OBJECT" ) - { - body startragdoll(); - } - if ( !self isonground() ) - { - if ( getDvarInt( "scr_disable_air_death_ragdoll" ) == 0 ) - { - body startragdoll(); - } - } - if ( self is_explosive_ragdoll( sweapon, einflictor ) ) - { - body start_explosive_ragdoll( vdir, sweapon ); - } - thread delaystartragdoll( body, shitloc, vdir, sweapon, einflictor, smeansofdeath ); - self.body = body; -} - -is_explosive_ragdoll( weapon, inflictor ) -{ - if ( !isDefined( weapon ) ) - { - return 0; - } - if ( weapon == "destructible_car_mp" || weapon == "explodable_barrel_mp" ) - { - return 1; - } - if ( weapon == "sticky_grenade_mp" || weapon == "explosive_bolt_mp" ) - { - if ( isDefined( inflictor ) && isDefined( inflictor.stucktoplayer ) ) - { - if ( inflictor.stucktoplayer == self ) - { - return 1; - } - } - } - return 0; -} - -start_explosive_ragdoll( dir, weapon ) -{ - if ( !isDefined( self ) ) - { - return; - } - x = randomintrange( 50, 100 ); - y = randomintrange( 50, 100 ); - z = randomintrange( 10, 20 ); - if ( isDefined( weapon ) || weapon == "sticky_grenade_mp" && weapon == "explosive_bolt_mp" ) - { - if ( isDefined( dir ) && lengthsquared( dir ) > 0 ) - { - x = dir[ 0 ] * x; - y = dir[ 1 ] * y; - } - } - else - { - if ( cointoss() ) - { - x *= -1; - } - if ( cointoss() ) - { - y *= -1; - } - } - self startragdoll(); - self launchragdoll( ( x, y, z ) ); -} - -notifyconnecting() -{ - waittillframeend; - if ( isDefined( self ) ) - { - level notify( "connecting" ); - } -} - -delaystartragdoll( ent, shitloc, vdir, sweapon, einflictor, smeansofdeath ) -{ - if ( isDefined( ent ) ) - { - deathanim = ent getcorpseanim(); - if ( animhasnotetrack( deathanim, "ignore_ragdoll" ) ) - { - return; - } - } - if ( level.oldschool ) - { - if ( !isDefined( vdir ) ) - { - vdir = ( 0, 0, 0 ); - } - explosionpos = ent.origin + ( 0, 0, maps/mp/gametypes_zm/_globallogic_utils::gethitlocheight( shitloc ) ); - explosionpos -= vdir * 20; - explosionradius = 40; - explosionforce = 0,75; - if ( smeansofdeath != "MOD_IMPACT" && smeansofdeath != "MOD_EXPLOSIVE" && !issubstr( smeansofdeath, "MOD_GRENADE" ) && !issubstr( smeansofdeath, "MOD_PROJECTILE" ) || shitloc == "head" && shitloc == "helmet" ) - { - explosionforce = 2,5; - } - ent startragdoll( 1 ); - wait 0,05; - if ( !isDefined( ent ) ) - { - return; - } - physicsexplosionsphere( explosionpos, explosionradius, explosionradius / 2, explosionforce ); - return; - } - wait 0,2; - if ( !isDefined( ent ) ) - { - return; - } - if ( ent isragdoll() ) - { - return; - } - deathanim = ent getcorpseanim(); - startfrac = 0,35; - if ( animhasnotetrack( deathanim, "start_ragdoll" ) ) - { - times = getnotetracktimes( deathanim, "start_ragdoll" ); - if ( isDefined( times ) ) - { - startfrac = times[ 0 ]; - } - } - waittime = startfrac * getanimlength( deathanim ); - wait waittime; - if ( isDefined( ent ) ) - { - ent startragdoll( 1 ); - } -} - -trackattackerdamage( eattacker, idamage, smeansofdeath, sweapon ) -{ -/# - assert( isplayer( eattacker ) ); -#/ - if ( self.attackerdata.size == 0 ) - { - self.firsttimedamaged = getTime(); - } - if ( !isDefined( self.attackerdata[ eattacker.clientid ] ) ) - { - self.attackerdamage[ eattacker.clientid ] = spawnstruct(); - self.attackerdamage[ eattacker.clientid ].damage = idamage; - self.attackerdamage[ eattacker.clientid ].meansofdeath = smeansofdeath; - self.attackerdamage[ eattacker.clientid ].weapon = sweapon; - self.attackerdamage[ eattacker.clientid ].time = getTime(); - self.attackers[ self.attackers.size ] = eattacker; - self.attackerdata[ eattacker.clientid ] = 0; - } - else - { - self.attackerdamage[ eattacker.clientid ].damage += idamage; - self.attackerdamage[ eattacker.clientid ].meansofdeath = smeansofdeath; - self.attackerdamage[ eattacker.clientid ].weapon = sweapon; - if ( !isDefined( self.attackerdamage[ eattacker.clientid ].time ) ) - { - self.attackerdamage[ eattacker.clientid ].time = getTime(); - } - } - self.attackerdamage[ eattacker.clientid ].lasttimedamaged = getTime(); - if ( maps/mp/gametypes_zm/_weapons::isprimaryweapon( sweapon ) ) - { - self.attackerdata[ eattacker.clientid ] = 1; - } -} - -giveinflictorownerassist( eattacker, einflictor, idamage, smeansofdeath, sweapon ) -{ - if ( !isDefined( einflictor ) ) - { - return; - } - if ( !isDefined( einflictor.owner ) ) - { - return; - } - if ( !isDefined( einflictor.ownergetsassist ) ) - { - return; - } - if ( !einflictor.ownergetsassist ) - { - return; - } -/# - assert( isplayer( einflictor.owner ) ); -#/ - self trackattackerdamage( einflictor.owner, idamage, smeansofdeath, sweapon ); -} - -updatemeansofdeath( sweapon, smeansofdeath ) -{ - switch( sweapon ) - { - case "crossbow_mp": - case "knife_ballistic_mp": - if ( smeansofdeath != "MOD_HEAD_SHOT" && smeansofdeath != "MOD_MELEE" ) - { - smeansofdeath = "MOD_PISTOL_BULLET"; - } - break; - case "dog_bite_mp": - smeansofdeath = "MOD_PISTOL_BULLET"; - break; - case "destructible_car_mp": - smeansofdeath = "MOD_EXPLOSIVE"; - break; - case "explodable_barrel_mp": - smeansofdeath = "MOD_EXPLOSIVE"; - break; - } - return smeansofdeath; -} - -updateattacker( attacker, weapon ) -{ - if ( isai( attacker ) && isDefined( attacker.script_owner ) ) - { - if ( !level.teambased || attacker.script_owner.team != self.team ) - { - attacker = attacker.script_owner; - } - } - if ( attacker.classname == "script_vehicle" && isDefined( attacker.owner ) ) - { - attacker notify( "killed" ); - attacker = attacker.owner; - } - if ( isai( attacker ) ) - { - attacker notify( "killed" ); - } - if ( isDefined( self.capturinglastflag ) && self.capturinglastflag == 1 ) - { - attacker.lastcapkiller = 1; - } - if ( isDefined( attacker ) && isDefined( weapon ) && weapon == "planemortar_mp" ) - { - if ( !isDefined( attacker.planemortarbda ) ) - { - attacker.planemortarbda = 0; - } - attacker.planemortarbda++; - } - return attacker; -} - -updateinflictor( einflictor ) -{ - if ( isDefined( einflictor ) && einflictor.classname == "script_vehicle" ) - { - einflictor notify( "killed" ); - if ( isDefined( einflictor.bda ) ) - { - einflictor.bda++; - } - } - return einflictor; -} - -updateweapon( einflictor, sweapon ) -{ - if ( sweapon == "none" && isDefined( einflictor ) ) - { - if ( isDefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) - { - sweapon = "explodable_barrel_mp"; - } - else - { - if ( isDefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) - { - sweapon = "destructible_car_mp"; - } - } - } - return sweapon; -} - -getclosestkillcamentity( attacker, killcamentities, depth ) -{ - if ( !isDefined( depth ) ) - { - depth = 0; - } - closestkillcament = undefined; - closestkillcamentindex = undefined; - closestkillcamentdist = undefined; - origin = undefined; - _a2796 = killcamentities; - killcamentindex = getFirstArrayKey( _a2796 ); - while ( isDefined( killcamentindex ) ) - { - killcament = _a2796[ killcamentindex ]; - if ( killcament == attacker ) - { - } - else - { - origin = killcament.origin; - if ( isDefined( killcament.offsetpoint ) ) - { - origin += killcament.offsetpoint; - } - dist = distancesquared( self.origin, origin ); - if ( !isDefined( closestkillcament ) || dist < closestkillcamentdist ) - { - closestkillcament = killcament; - closestkillcamentdist = dist; - closestkillcamentindex = killcamentindex; - } - } - killcamentindex = getNextArrayKey( _a2796, killcamentindex ); - } - if ( depth < 3 && isDefined( closestkillcament ) ) - { - if ( !bullettracepassed( closestkillcament.origin, self.origin, 0, self ) ) - { - betterkillcament = getclosestkillcamentity( attacker, killcamentities, depth + 1 ); - if ( isDefined( betterkillcament ) ) - { - closestkillcament = betterkillcament; - } - } - } - return closestkillcament; -} - -getkillcamentity( attacker, einflictor, sweapon ) -{ - if ( !isDefined( einflictor ) ) - { - return undefined; - } - if ( einflictor == attacker ) - { - if ( !isDefined( einflictor.ismagicbullet ) ) - { - return undefined; - } - if ( isDefined( einflictor.ismagicbullet ) && !einflictor.ismagicbullet ) - { - return undefined; - } - } - else - { - if ( isDefined( level.levelspecifickillcam ) ) - { - levelspecifickillcament = self [[ level.levelspecifickillcam ]](); - if ( isDefined( levelspecifickillcament ) ) - { - return levelspecifickillcament; - } - } - } - if ( sweapon == "m220_tow_mp" ) - { - return undefined; - } - if ( isDefined( einflictor.killcament ) ) - { - if ( einflictor.killcament == attacker ) - { - return undefined; - } - return einflictor.killcament; - } - else - { - if ( isDefined( einflictor.killcamentities ) ) - { - return getclosestkillcamentity( attacker, einflictor.killcamentities ); - } - } - if ( isDefined( einflictor.script_gameobjectname ) && einflictor.script_gameobjectname == "bombzone" ) - { - return einflictor.killcament; - } - return einflictor; -} - -playkillbattlechatter( attacker, sweapon, victim ) -{ -} diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_score.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_score.gsc deleted file mode 100644 index a5610a2..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_score.gsc +++ /dev/null @@ -1,873 +0,0 @@ -#include maps/mp/gametypes_zm/_globallogic_utils; -#include maps/mp/_challenges; -#include maps/mp/gametypes_zm/_globallogic_audio; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/gametypes_zm/_globallogic; -#include maps/mp/_bb; -#include maps/mp/_utility; -#include common_scripts/utility; - -updatematchbonusscores( winner ) -{ -} - -givematchbonus( scoretype, score ) -{ -} - -doskillupdate( winner ) -{ - skillupdate( winner, level.teambased ); -} - -gethighestscoringplayer() -{ - players = level.players; - winner = undefined; - tie = 0; - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ].score ) ) - { - i++; - continue; - } - else if ( players[ i ].score < 1 ) - { - i++; - continue; - } - else if ( !isDefined( winner ) || players[ i ].score > winner.score ) - { - winner = players[ i ]; - tie = 0; - i++; - continue; - } - else - { - if ( players[ i ].score == winner.score ) - { - tie = 1; - } - } - i++; - } - if ( tie || !isDefined( winner ) ) - { - return undefined; - } - else - { - return winner; - } -} - -resetscorechain() -{ - self notify( "reset_score_chain" ); - self.scorechain = 0; - self.rankupdatetotal = 0; -} - -scorechaintimer() -{ - self notify( "score_chain_timer" ); - self endon( "reset_score_chain" ); - self endon( "score_chain_timer" ); - self endon( "death" ); - self endon( "disconnect" ); - wait 20; - self thread resetscorechain(); -} - -roundtonearestfive( score ) -{ - rounding = score % 5; - if ( rounding <= 2 ) - { - return score - rounding; - } - else - { - return score + ( 5 - rounding ); - } -} - -giveplayermomentumnotification( score, label, descvalue, countstowardrampage ) -{ - rampagebonus = 0; - if ( isDefined( level.usingrampage ) && level.usingrampage ) - { - if ( countstowardrampage ) - { - if ( !isDefined( self.scorechain ) ) - { - self.scorechain = 0; - } - self.scorechain++; - self thread scorechaintimer(); - } - if ( isDefined( self.scorechain ) && self.scorechain >= 999 ) - { - rampagebonus = roundtonearestfive( int( ( score * level.rampagebonusscale ) + 0,5 ) ); - } - } - if ( score != 0 ) - { - self luinotifyevent( &"score_event", 3, label, score, rampagebonus ); - } - score += rampagebonus; - if ( score > 0 && self hasperk( "specialty_earnmoremomentum" ) ) - { - score = roundtonearestfive( int( ( score * getDvarFloat( "perk_killstreakMomentumMultiplier" ) ) + 0,5 ) ); - } - _setplayermomentum( self, self.pers[ "momentum" ] + score ); -} - -resetplayermomentumondeath() -{ - if ( isDefined( level.usingscorestreaks ) && level.usingscorestreaks ) - { - _setplayermomentum( self, 0 ); - self thread resetscorechain(); - } -} - -giveplayermomentum( event, player, victim, weapon, descvalue ) -{ -} - -giveplayerscore( event, player, victim, weapon, descvalue ) -{ - scorediff = 0; - momentum = player.pers[ "momentum" ]; - giveplayermomentum( event, player, victim, weapon, descvalue ); - newmomentum = player.pers[ "momentum" ]; - if ( level.overrideplayerscore ) - { - return 0; - } - pixbeginevent( "level.onPlayerScore" ); - score = player.pers[ "score" ]; - [[ level.onplayerscore ]]( event, player, victim ); - newscore = player.pers[ "score" ]; - pixendevent(); - bbprint( "mpplayerscore", "spawnid %d gametime %d type %s player %s delta %d deltamomentum %d team %s", getplayerspawnid( player ), getTime(), event, player.name, newscore - score, newmomentum - momentum, player.team ); - player maps/mp/_bb::bbaddtostat( "score", newscore - score ); - if ( score == newscore ) - { - return 0; - } - pixbeginevent( "givePlayerScore" ); - recordplayerstats( player, "score", newscore ); - scorediff = newscore - score; - player addplayerstatwithgametype( "score", scorediff ); - if ( isDefined( player.pers[ "lastHighestScore" ] ) && newscore > player.pers[ "lastHighestScore" ] ) - { - player setdstat( "HighestStats", "highest_score", newscore ); - } - pixendevent(); - return scorediff; -} - -default_onplayerscore( event, player, victim ) -{ -} - -_setplayerscore( player, score ) -{ -} - -_getplayerscore( player ) -{ - return player.pers[ "score" ]; -} - -_setplayermomentum( player, momentum ) -{ - momentum = clamp( momentum, 0, 2000 ); - oldmomentum = player.pers[ "momentum" ]; - if ( momentum == oldmomentum ) - { - return; - } - player maps/mp/_bb::bbaddtostat( "momentum", momentum - oldmomentum ); - if ( momentum > oldmomentum ) - { - highestmomentumcost = 0; - numkillstreaks = player.killstreak.size; - killstreaktypearray = []; - } - player.pers[ "momentum" ] = momentum; - player.momentum = player.pers[ "momentum" ]; -} - -_giveplayerkillstreakinternal( player, momentum, oldmomentum, killstreaktypearray ) -{ -} - -setplayermomentumdebug() -{ -/# - setdvar( "sv_momentumPercent", 0 ); - while ( 1 ) - { - wait 1; - momentumpercent = getdvarfloatdefault( "sv_momentumPercent", 0 ); - if ( momentumpercent != 0 ) - { - player = gethostplayer(); - if ( !isDefined( player ) ) - { - return; - } - if ( isDefined( player.killstreak ) ) - { - _setplayermomentum( player, int( 2000 * ( momentumpercent / 100 ) ) ); - } - } -#/ - } -} - -giveteamscore( event, team, player, victim ) -{ - if ( level.overrideteamscore ) - { - return; - } - pixbeginevent( "level.onTeamScore" ); - teamscore = game[ "teamScores" ][ team ]; - [[ level.onteamscore ]]( event, team ); - pixendevent(); - newscore = game[ "teamScores" ][ team ]; - bbprint( "mpteamscores", "gametime %d event %s team %d diff %d score %d", getTime(), event, team, newscore - teamscore, newscore ); - if ( teamscore == newscore ) - { - return; - } - updateteamscores( team ); - thread maps/mp/gametypes_zm/_globallogic::checkscorelimit(); -} - -giveteamscoreforobjective( team, score ) -{ - teamscore = game[ "teamScores" ][ team ]; - onteamscore( score, team ); - newscore = game[ "teamScores" ][ team ]; - bbprint( "mpteamobjscores", "gametime %d team %d diff %d score %d", getTime(), team, newscore - teamscore, newscore ); - if ( teamscore == newscore ) - { - return; - } - updateteamscores( team ); - thread maps/mp/gametypes_zm/_globallogic::checkscorelimit(); -} - -_setteamscore( team, teamscore ) -{ - if ( teamscore == game[ "teamScores" ][ team ] ) - { - return; - } - game[ "teamScores" ][ team ] = teamscore; - updateteamscores( team ); - thread maps/mp/gametypes_zm/_globallogic::checkscorelimit(); -} - -resetteamscores() -{ - while ( isDefined( level.roundscorecarry ) || level.roundscorecarry == 0 && maps/mp/_utility::isfirstround() ) - { - _a591 = level.teams; - _k591 = getFirstArrayKey( _a591 ); - while ( isDefined( _k591 ) ) - { - team = _a591[ _k591 ]; - game[ "teamScores" ][ team ] = 0; - _k591 = getNextArrayKey( _a591, _k591 ); - } - } - maps/mp/gametypes_zm/_globallogic_score::updateallteamscores(); -} - -resetallscores() -{ - resetteamscores(); - resetplayerscores(); -} - -resetplayerscores() -{ - players = level.players; - winner = undefined; - tie = 0; - i = 0; - while ( i < players.size ) - { - if ( isDefined( players[ i ].pers[ "score" ] ) ) - { - _setplayerscore( players[ i ], 0 ); - } - i++; - } -} - -updateteamscores( team ) -{ - setteamscore( team, game[ "teamScores" ][ team ] ); - level thread maps/mp/gametypes_zm/_globallogic::checkteamscorelimitsoon( team ); -} - -updateallteamscores() -{ - _a629 = level.teams; - _k629 = getFirstArrayKey( _a629 ); - while ( isDefined( _k629 ) ) - { - team = _a629[ _k629 ]; - updateteamscores( team ); - _k629 = getNextArrayKey( _a629, _k629 ); - } -} - -_getteamscore( team ) -{ - return game[ "teamScores" ][ team ]; -} - -gethighestteamscoreteam() -{ - score = 0; - winning_teams = []; - _a645 = level.teams; - _k645 = getFirstArrayKey( _a645 ); - while ( isDefined( _k645 ) ) - { - team = _a645[ _k645 ]; - team_score = game[ "teamScores" ][ team ]; - if ( team_score > score ) - { - score = team_score; - winning_teams = []; - } - if ( team_score == score ) - { - winning_teams[ team ] = team; - } - _k645 = getNextArrayKey( _a645, _k645 ); - } - return winning_teams; -} - -areteamarraysequal( teamsa, teamsb ) -{ - if ( teamsa.size != teamsb.size ) - { - return 0; - } - _a668 = teamsa; - _k668 = getFirstArrayKey( _a668 ); - while ( isDefined( _k668 ) ) - { - team = _a668[ _k668 ]; - if ( !isDefined( teamsb[ team ] ) ) - { - return 0; - } - _k668 = getNextArrayKey( _a668, _k668 ); - } - return 1; -} - -onteamscore( score, team ) -{ - game[ "teamScores" ][ team ] += score; - if ( level.scorelimit && game[ "teamScores" ][ team ] > level.scorelimit ) - { - game[ "teamScores" ][ team ] = level.scorelimit; - } - if ( level.splitscreen ) - { - return; - } - if ( level.scorelimit == 1 ) - { - return; - } - iswinning = gethighestteamscoreteam(); - if ( iswinning.size == 0 ) - { - return; - } - if ( ( getTime() - level.laststatustime ) < 5000 ) - { - return; - } - if ( areteamarraysequal( iswinning, level.waswinning ) ) - { - return; - } - level.laststatustime = getTime(); - while ( iswinning.size == 1 ) - { - _a707 = iswinning; - _k707 = getFirstArrayKey( _a707 ); - while ( isDefined( _k707 ) ) - { - team = _a707[ _k707 ]; - if ( isDefined( level.waswinning[ team ] ) ) - { - if ( level.waswinning.size == 1 ) - { - } - } - else - { - maps/mp/gametypes_zm/_globallogic_audio::leaderdialog( "lead_taken", team, "status" ); - } - _k707 = getNextArrayKey( _a707, _k707 ); - } - } - while ( level.waswinning.size == 1 ) - { - _a726 = level.waswinning; - _k726 = getFirstArrayKey( _a726 ); - while ( isDefined( _k726 ) ) - { - team = _a726[ _k726 ]; - if ( isDefined( iswinning[ team ] ) ) - { - if ( iswinning.size == 1 ) - { - } - else if ( level.waswinning.size > 1 ) - { - } - } - else - { - maps/mp/gametypes_zm/_globallogic_audio::leaderdialog( "lead_lost", team, "status" ); - } - _k726 = getNextArrayKey( _a726, _k726 ); - } - } - level.waswinning = iswinning; -} - -default_onteamscore( event, team ) -{ -} - -initpersstat( dataname, record_stats, init_to_stat_value ) -{ - if ( !isDefined( self.pers[ dataname ] ) ) - { - self.pers[ dataname ] = 0; - } - if ( !isDefined( record_stats ) || record_stats == 1 ) - { - recordplayerstats( self, dataname, int( self.pers[ dataname ] ) ); - } - if ( isDefined( init_to_stat_value ) && init_to_stat_value == 1 ) - { - self.pers[ dataname ] = self getdstat( "PlayerStatsList", dataname, "StatValue" ); - } -} - -getpersstat( dataname ) -{ - return self.pers[ dataname ]; -} - -incpersstat( dataname, increment, record_stats, includegametype ) -{ - pixbeginevent( "incPersStat" ); - self.pers[ dataname ] += increment; - if ( isDefined( includegametype ) && includegametype ) - { - self addplayerstatwithgametype( dataname, increment ); - } - else - { - self addplayerstat( dataname, increment ); - } - if ( !isDefined( record_stats ) || record_stats == 1 ) - { - self thread threadedrecordplayerstats( dataname ); - } - pixendevent(); -} - -threadedrecordplayerstats( dataname ) -{ - self endon( "disconnect" ); - waittillframeend; - recordplayerstats( self, dataname, self.pers[ dataname ] ); -} - -updatewinstats( winner ) -{ -} - -updatelossstats( loser ) -{ - loser addplayerstatwithgametype( "losses", 1 ); - loser updatestatratio( "wlratio", "wins", "losses" ); - loser notify( "loss" ); -} - -updatetiestats( loser ) -{ - loser addplayerstatwithgametype( "losses", -1 ); - loser addplayerstatwithgametype( "ties", 1 ); - loser updatestatratio( "wlratio", "wins", "losses" ); - loser setdstat( "playerstatslist", "cur_win_streak", "StatValue", 0 ); - loser notify( "tie" ); -} - -updatewinlossstats( winner ) -{ - if ( !waslastround() && !level.hostforcedend ) - { - return; - } - players = level.players; - if ( !isDefined( winner ) || isDefined( winner ) && !isplayer( winner ) && winner == "tie" ) - { - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ].pers[ "team" ] ) ) - { - i++; - continue; - } - else if ( level.hostforcedend && players[ i ] ishost() ) - { - i++; - continue; - } - else - { - updatetiestats( players[ i ] ); - } - i++; - } - } - else if ( isplayer( winner ) ) - { - if ( level.hostforcedend && winner ishost() ) - { - return; - } - updatewinstats( winner ); - } - else - { - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ].pers[ "team" ] ) ) - { - i++; - continue; - } - else if ( level.hostforcedend && players[ i ] ishost() ) - { - i++; - continue; - } - else - { - if ( winner == "tie" ) - { - updatetiestats( players[ i ] ); - i++; - continue; - } - else if ( players[ i ].pers[ "team" ] == winner ) - { - updatewinstats( players[ i ] ); - i++; - continue; - } - else - { - players[ i ] setdstat( "playerstatslist", "cur_win_streak", "StatValue", 0 ); - } - } - i++; - } - } -} - -backupandclearwinstreaks() -{ -} - -restorewinstreaks( winner ) -{ -} - -inckillstreaktracker( sweapon ) -{ - self endon( "disconnect" ); - waittillframeend; - if ( sweapon == "artillery_mp" ) - { - self.pers[ "artillery_kills" ]++; - } - if ( sweapon == "dog_bite_mp" ) - { - self.pers[ "dog_kills" ]++; - } -} - -trackattackerkill( name, rank, xp, prestige, xuid ) -{ - self endon( "disconnect" ); - attacker = self; - waittillframeend; - pixbeginevent( "trackAttackerKill" ); - if ( !isDefined( attacker.pers[ "killed_players" ][ name ] ) ) - { - attacker.pers[ "killed_players" ][ name ] = 0; - } - if ( !isDefined( attacker.killedplayerscurrent[ name ] ) ) - { - attacker.killedplayerscurrent[ name ] = 0; - } - if ( !isDefined( attacker.pers[ "nemesis_tracking" ][ name ] ) ) - { - attacker.pers[ "nemesis_tracking" ][ name ] = 0; - } - attacker.pers[ "killed_players" ][ name ]++; - attacker.killedplayerscurrent[ name ]++; - attacker.pers[ "nemesis_tracking" ][ name ] += 1; - if ( attacker.pers[ "nemesis_name" ] == name ) - { - attacker maps/mp/_challenges::killednemesis(); - } - if ( attacker.pers[ "nemesis_name" ] == "" || attacker.pers[ "nemesis_tracking" ][ name ] > attacker.pers[ "nemesis_tracking" ][ attacker.pers[ "nemesis_name" ] ] ) - { - attacker.pers[ "nemesis_name" ] = name; - attacker.pers[ "nemesis_rank" ] = rank; - attacker.pers[ "nemesis_rankIcon" ] = prestige; - attacker.pers[ "nemesis_xp" ] = xp; - attacker.pers[ "nemesis_xuid" ] = xuid; - } - else - { - if ( isDefined( attacker.pers[ "nemesis_name" ] ) && attacker.pers[ "nemesis_name" ] == name ) - { - attacker.pers[ "nemesis_rank" ] = rank; - attacker.pers[ "nemesis_xp" ] = xp; - } - } - pixendevent(); -} - -trackattackeedeath( attackername, rank, xp, prestige, xuid ) -{ - self endon( "disconnect" ); - waittillframeend; - pixbeginevent( "trackAttackeeDeath" ); - if ( !isDefined( self.pers[ "killed_by" ][ attackername ] ) ) - { - self.pers[ "killed_by" ][ attackername ] = 0; - } - self.pers[ "killed_by" ][ attackername ]++; - if ( !isDefined( self.pers[ "nemesis_tracking" ][ attackername ] ) ) - { - self.pers[ "nemesis_tracking" ][ attackername ] = 0; - } - self.pers[ "nemesis_tracking" ][ attackername ] += 1,5; - if ( self.pers[ "nemesis_name" ] == "" || self.pers[ "nemesis_tracking" ][ attackername ] > self.pers[ "nemesis_tracking" ][ self.pers[ "nemesis_name" ] ] ) - { - self.pers[ "nemesis_name" ] = attackername; - self.pers[ "nemesis_rank" ] = rank; - self.pers[ "nemesis_rankIcon" ] = prestige; - self.pers[ "nemesis_xp" ] = xp; - self.pers[ "nemesis_xuid" ] = xuid; - } - else - { - if ( isDefined( self.pers[ "nemesis_name" ] ) && self.pers[ "nemesis_name" ] == attackername ) - { - self.pers[ "nemesis_rank" ] = rank; - self.pers[ "nemesis_xp" ] = xp; - } - } - if ( self.pers[ "nemesis_name" ] == attackername && self.pers[ "nemesis_tracking" ][ attackername ] >= 2 ) - { - self setclientuivisibilityflag( "killcam_nemesis", 1 ); - } - else - { - self setclientuivisibilityflag( "killcam_nemesis", 0 ); - } - pixendevent(); -} - -default_iskillboosting() -{ - return 0; -} - -givekillstats( smeansofdeath, sweapon, evictim ) -{ - self endon( "disconnect" ); - waittillframeend; - if ( level.rankedmatch && self [[ level.iskillboosting ]]() ) - { -/# - self iprintlnbold( "GAMETYPE DEBUG: NOT GIVING YOU OFFENSIVE CREDIT AS BOOSTING PREVENTION" ); -#/ - return; - } - pixbeginevent( "giveKillStats" ); - self maps/mp/gametypes_zm/_globallogic_score::incpersstat( "kills", 1, 1, 1 ); - self.kills = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "kills" ); - self updatestatratio( "kdratio", "kills", "deaths" ); - attacker = self; - if ( smeansofdeath == "MOD_HEAD_SHOT" ) - { - attacker thread incpersstat( "headshots", 1, 1, 0 ); - attacker.headshots = attacker.pers[ "headshots" ]; - evictim recordkillmodifier( "headshot" ); - } - pixendevent(); -} - -inctotalkills( team ) -{ - if ( level.teambased && isDefined( level.teams[ team ] ) ) - { - game[ "totalKillsTeam" ][ team ]++; - } - game[ "totalKills" ]++; -} - -setinflictorstat( einflictor, eattacker, sweapon ) -{ - if ( !isDefined( eattacker ) ) - { - return; - } - if ( !isDefined( einflictor ) ) - { - eattacker addweaponstat( sweapon, "hits", 1 ); - return; - } - if ( !isDefined( einflictor.playeraffectedarray ) ) - { - einflictor.playeraffectedarray = []; - } - foundnewplayer = 1; - i = 0; - while ( i < einflictor.playeraffectedarray.size ) - { - if ( einflictor.playeraffectedarray[ i ] == self ) - { - foundnewplayer = 0; - break; - } - else - { - i++; - } - } - if ( foundnewplayer ) - { - einflictor.playeraffectedarray[ einflictor.playeraffectedarray.size ] = self; - if ( sweapon == "concussion_grenade_mp" || sweapon == "tabun_gas_mp" ) - { - eattacker addweaponstat( sweapon, "used", 1 ); - } - eattacker addweaponstat( sweapon, "hits", 1 ); - } -} - -processshieldassist( killedplayer ) -{ - self endon( "disconnect" ); - killedplayer endon( "disconnect" ); - wait 0,05; - maps/mp/gametypes_zm/_globallogic_utils::waittillslowprocessallowed(); - if ( !isDefined( level.teams[ self.pers[ "team" ] ] ) ) - { - return; - } - if ( self.pers[ "team" ] == killedplayer.pers[ "team" ] ) - { - return; - } - if ( !level.teambased ) - { - return; - } - self maps/mp/gametypes_zm/_globallogic_score::incpersstat( "assists", 1, 1, 1 ); - self.assists = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "assists" ); -} - -processassist( killedplayer, damagedone, weapon ) -{ - self endon( "disconnect" ); - killedplayer endon( "disconnect" ); - wait 0,05; - maps/mp/gametypes_zm/_globallogic_utils::waittillslowprocessallowed(); - if ( !isDefined( level.teams[ self.pers[ "team" ] ] ) ) - { - return; - } - if ( self.pers[ "team" ] == killedplayer.pers[ "team" ] ) - { - return; - } - if ( !level.teambased ) - { - return; - } - assist_level = "assist"; - assist_level_value = int( ceil( damagedone / 25 ) ); - if ( assist_level_value < 1 ) - { - assist_level_value = 1; - } - else - { - if ( assist_level_value > 3 ) - { - assist_level_value = 3; - } - } - assist_level = ( assist_level + "_" ) + ( assist_level_value * 25 ); - self maps/mp/gametypes_zm/_globallogic_score::incpersstat( "assists", 1, 1, 1 ); - self.assists = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "assists" ); - switch( weapon ) - { - case "concussion_grenade_mp": - assist_level = "assist_concussion"; - break; - case "flash_grenade_mp": - assist_level = "assist_flash"; - break; - case "emp_grenade_mp": - assist_level = "assist_emp"; - break; - case "proximity_grenade_aoe_mp": - case "proximity_grenade_mp": - assist_level = "assist_proximity"; - break; - } - self maps/mp/_challenges::assisted(); -} - -xpratethread() -{ -/# -#/ -} diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_spawn.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_spawn.gsc deleted file mode 100644 index d429a9d..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_spawn.gsc +++ /dev/null @@ -1,951 +0,0 @@ -#include maps/mp/gametypes_zm/_spawnlogic; -#include maps/mp/gametypes_zm/_globallogic_defaults; -#include maps/mp/gametypes_zm/_hostmigration; -#include maps/mp/gametypes_zm/_spectating; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/gametypes_zm/_globallogic_ui; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/gametypes_zm/_hud_message; -#include maps/mp/gametypes_zm/_globallogic; -#include maps/mp/gametypes_zm/_globallogic_utils; -#include maps/mp/gametypes_zm/_globallogic_audio; -#include maps/mp/gametypes_zm/_spawning; -#include maps/mp/gametypes_zm/_globallogic_player; -#include maps/mp/_utility; -#include common_scripts/utility; - -timeuntilspawn( includeteamkilldelay ) //checked matches cerberus output -{ - if ( level.ingraceperiod && !self.hasspawned ) - { - return 0; - } - respawndelay = 0; - if ( self.hasspawned ) - { - result = self [[ level.onrespawndelay ]](); - if ( isDefined( result ) ) - { - respawndelay = result; - } - else - { - respawndelay = level.playerrespawndelay; - } - if ( includeteamkilldelay && isDefined( self.teamkillpunish ) && self.teamkillpunish ) - { - respawndelay += maps/mp/gametypes_zm/_globallogic_player::teamkilldelay(); - } - } - wavebased = level.waverespawndelay > 0; - if ( wavebased ) - { - return self timeuntilwavespawn( respawndelay ); - } - return respawndelay; -} - -allteamshaveexisted() //checked changed to match cerberus output -{ - foreach ( team in level.teams ) - { - if ( !level.everexisted[ team ] ) - { - return 0; - } - } - return 1; -} - -mayspawn() //checked partially changed to match cerberus output changed at own discretion -{ - if ( isDefined( level.mayspawn ) && !( self [[ level.mayspawn ]]() ) ) - { - return 0; - } - if ( level.inovertime ) - { - return 0; - } - if ( level.playerqueuedrespawn && !isDefined( self.allowqueuespawn ) && !level.ingraceperiod && !level.usestartspawns ) - { - return 0; - } - if ( level.numlives ) - { - if ( level.teambased ) - { - gamehasstarted = allteamshaveexisted(); - } - else - { - gamehasstarted = level.maxplayercount > 1; - if ( gamehasstarted == 0 ) - { - if ( !isoneround() && !isfirstround() ) - { - gamehasstarted = 1; - } - else - { - gamehasstarted = 0; - } - } - } - if ( !self.pers[ "lives" ] && gamehasstarted ) - { - return 0; - } - else if ( gamehasstarted ) - { - if ( !level.ingraceperiod && !self.hasspawned && !level.wagermatch ) - { - return 0; - } - } - } - return 1; -} - -timeuntilwavespawn( minimumwait ) //checked matches cerberus output -{ - earliestspawntime = getTime() + ( minimumwait * 1000 ); - lastwavetime = level.lastwave[ self.pers[ "team" ] ]; - wavedelay = level.wavedelay[ self.pers[ "team" ] ] * 1000; - if ( wavedelay == 0 ) - { - return 0; - } - numwavespassedearliestspawntime = ( earliestspawntime - lastwavetime ) / wavedelay; - numwaves = ceil( numwavespassedearliestspawntime ); - timeofspawn = lastwavetime + ( numwaves * wavedelay ); - if ( isDefined( self.wavespawnindex ) ) - { - timeofspawn += 50 * self.wavespawnindex; - } - return ( timeofspawn - getTime() ) / 1000; -} - -stoppoisoningandflareonspawn() //checked matches cerberus output -{ - self endon( "disconnect" ); - self.inpoisonarea = 0; - self.inburnarea = 0; - self.inflarevisionarea = 0; - self.ingroundnapalm = 0; -} - -spawnplayerprediction() //checked changed to match cerberus output dvar taken from beta dump -{ - self endon( "disconnect" ); - self endon( "end_respawn" ); - self endon( "game_ended" ); - self endon( "joined_spectators" ); - self endon( "spawned" ); - while ( 1 ) - { - wait 0.5; - if ( isDefined( level.onspawnplayerunified ) && getDvarInt( "scr_disableunifiedspawning" ) == 0 ) - { - maps/mp/gametypes_zm/_spawning::onspawnplayer_unified( 1 ); - } - else - { - self [[ level.onspawnplayer ]]( 1 ); - } - } -} - -giveloadoutlevelspecific( team, class ) //checked matches cerberus output -{ - pixbeginevent( "giveLoadoutLevelSpecific" ); - if ( isDefined( level.givecustomcharacters ) ) - { - self [[ level.givecustomcharacters ]](); - } - if ( isDefined( level.givecustomloadout ) ) - { - self [[ level.givecustomloadout ]](); - } - pixendevent(); -} - -spawnplayer() //checked matches cerberus output dvars taken from beta dump -{ - pixbeginevent( "spawnPlayer_preUTS" ); - self endon( "disconnect" ); - self endon( "joined_spectators" ); - self notify( "spawned" ); - level notify( "player_spawned" ); - self notify( "end_respawn" ); - self setspawnvariables(); - if ( !self.hasspawned ) - { - self.underscorechance = 70; - self thread maps/mp/gametypes_zm/_globallogic_audio::sndstartmusicsystem(); - } - if ( level.teambased ) - { - self.sessionteam = self.team; - } - else - { - self.sessionteam = "none"; - self.ffateam = self.team; - } - hadspawned = self.hasspawned; - self.sessionstate = "playing"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.statusicon = ""; - self.damagedplayers = []; - if ( getDvarInt( "scr_csmode" ) > 0 ) - { - self.maxhealth = getDvarInt( "scr_csmode" ); - } - else - { - self.maxhealth = level.playermaxhealth; - } - self.health = self.maxhealth; - self.friendlydamage = undefined; - self.hasspawned = 1; - self.spawntime = getTime(); - self.afk = 0; - if ( self.pers[ "lives" ] && !isDefined( level.takelivesondeath ) || level.takelivesondeath == 0 ) - { - self.pers[ "lives" ]--; - if ( self.pers[ "lives" ] == 0 ) - { - level notify( "player_eliminated" ); - self notify( "player_eliminated" ); - } - } - self.laststand = undefined; - self.revivingteammate = 0; - self.burning = undefined; - self.nextkillstreakfree = undefined; - self.activeuavs = 0; - self.activecounteruavs = 0; - self.activesatellites = 0; - self.deathmachinekills = 0; - self.disabledweapon = 0; - self resetusability(); - self maps/mp/gametypes_zm/_globallogic_player::resetattackerlist(); - self.diedonvehicle = undefined; - if ( !self.wasaliveatmatchstart ) - { - if ( level.ingraceperiod || maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() < 20000 ) - { - self.wasaliveatmatchstart = 1; - } - } - self setdepthoffield( 0, 0, 512, 512, 4, 0 ); - self resetfov(); - pixbeginevent( "onSpawnPlayer" ); - if ( isDefined( level.onspawnplayerunified ) && getDvarInt( "scr_disableunifiedspawning" ) == 0 ) - { - self [[ level.onspawnplayerunified ]](); - } - else - { - self [[ level.onspawnplayer ]]( 0 ); - } - if ( isDefined( level.playerspawnedcb ) ) - { - self [[ level.playerspawnedcb ]](); - } - pixendevent(); - pixendevent(); - level thread maps/mp/gametypes_zm/_globallogic::updateteamstatus(); - pixbeginevent( "spawnPlayer_postUTS" ); - self thread stoppoisoningandflareonspawn(); - self stopburning(); - /* -/# - assert( maps/mp/gametypes_zm/_globallogic_utils::isvalidclass( self.class ) ); -#/ - */ - self giveloadoutlevelspecific( self.team, self.class ); - if ( level.inprematchperiod ) - { - self freeze_player_controls( 1 ); - team = self.pers[ "team" ]; - if ( isDefined( self.pers[ "music" ].spawn ) && self.pers[ "music" ].spawn == 0 ) - { - if ( level.wagermatch ) - { - music = "SPAWN_WAGER"; - } - else - { - music = game[ "music" ][ "spawn_" + team ]; - } - self thread maps/mp/gametypes_zm/_globallogic_audio::set_music_on_player( music, 0, 0 ); - self.pers[ "music" ].spawn = 1; - } - if ( level.splitscreen ) - { - if ( isDefined( level.playedstartingmusic ) ) - { - music = undefined; - } - else - { - level.playedstartingmusic = 1; - } - } - if ( !isDefined( level.disableprematchmessages ) || level.disableprematchmessages == 0 ) - { - thread maps/mp/gametypes_zm/_hud_message::showinitialfactionpopup( team ); - hintmessage = getobjectivehinttext( self.pers[ "team" ] ); - if ( isDefined( hintmessage ) ) - { - self thread maps/mp/gametypes_zm/_hud_message::hintmessage( hintmessage ); - } - if ( isDefined( game[ "dialog" ][ "gametype" ] ) && !level.splitscreen || self == level.players[ 0 ] ) - { - if ( !isDefined( level.infinalfight ) || !level.infinalfight ) - { - if ( level.hardcoremode ) - { - self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "gametype_hardcore" ); - } - else - { - self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "gametype" ); - } - } - } - if ( team == game[ "attackers" ] ) - { - self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "offense_obj", "introboost" ); - } - else - { - self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "defense_obj", "introboost" ); - } - } - } - else - { - self freeze_player_controls( 0 ); - self enableweapons(); - if ( !hadspawned && game[ "state" ] == "playing" ) - { - pixbeginevent( "sound" ); - team = self.team; - if ( isDefined( self.pers[ "music" ].spawn ) && self.pers[ "music" ].spawn == 0 ) - { - self thread maps/mp/gametypes_zm/_globallogic_audio::set_music_on_player( "SPAWN_SHORT", 0, 0 ); - self.pers[ "music" ].spawn = 1; - } - if ( level.splitscreen ) - { - if ( isDefined( level.playedstartingmusic ) ) - { - music = undefined; - } - else - { - level.playedstartingmusic = 1; - } - } - if ( !isDefined( level.disableprematchmessages ) || level.disableprematchmessages == 0 ) - { - thread maps/mp/gametypes_zm/_hud_message::showinitialfactionpopup( team ); - hintmessage = getobjectivehinttext( self.pers[ "team" ] ); - if ( isDefined( hintmessage ) ) - { - self thread maps/mp/gametypes_zm/_hud_message::hintmessage( hintmessage ); - } - if ( isDefined( game[ "dialog" ][ "gametype" ] ) || !level.splitscreen && self == level.players[ 0 ] ) - { - if ( !isDefined( level.infinalfight ) || !level.infinalfight ) - { - if ( level.hardcoremode ) - { - self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "gametype_hardcore" ); - } - else - { - self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "gametype" ); - } - } - } - if ( team == game[ "attackers" ] ) - { - self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "offense_obj", "introboost" ); - } - else - { - self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "defense_obj", "introboost" ); - } - } - pixendevent(); - } - } - if ( getDvar( "scr_showperksonspawn" ) == "" ) - { - setdvar( "scr_showperksonspawn", "0" ); - } - if ( level.hardcoremode ) - { - setdvar( "scr_showperksonspawn", "0" ); - } - if ( !level.splitscreen && getDvarInt( "scr_showperksonspawn" ) == 1 && game[ "state" ] != "postgame" ) - { - pixbeginevent( "showperksonspawn" ); - if ( level.perksenabled == 1 ) - { - self maps/mp/gametypes_zm/_hud_util::showperks(); - } - self thread maps/mp/gametypes_zm/_globallogic_ui::hideloadoutaftertime( 3 ); - self thread maps/mp/gametypes_zm/_globallogic_ui::hideloadoutondeath(); - pixendevent(); - } - if ( isDefined( self.pers[ "momentum" ] ) ) - { - self.momentum = self.pers[ "momentum" ]; - } - pixendevent(); - waittillframeend; - self notify( "spawned_player" ); - self logstring( "S " + self.origin[ 0 ] + " " + self.origin[ 1 ] + " " + self.origin[ 2 ] ); - setdvar( "scr_selecting_location", "" ); - /* -/# - if ( getDvarInt( "scr_xprate" ) > 0 ) - { - self thread maps/mp/gametypes_zm/_globallogic_score::xpratethread(); -#/ - } - */ - self maps/mp/zombies/_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); - if ( game[ "state" ] == "postgame" ) - { - /* -/# - assert( !level.intermission ); -#/ - */ - self maps/mp/gametypes_zm/_globallogic_player::freezeplayerforroundend(); - } -} - -spawnspectator( origin, angles ) //checked matches cerberus output -{ - self notify( "spawned" ); - self notify( "end_respawn" ); - in_spawnspectator( origin, angles ); -} - -respawn_asspectator( origin, angles ) //checked matches cerberus output -{ - in_spawnspectator( origin, angles ); -} - -in_spawnspectator( origin, angles ) //checked matches cerberus output -{ - pixmarker( "BEGIN: in_spawnSpectator" ); - self setspawnvariables(); - if ( self.pers[ "team" ] == "spectator" ) - { - self clearlowermessage(); - } - self.sessionstate = "spectator"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - if ( self.pers[ "team" ] == "spectator" ) - { - self.statusicon = ""; - } - else - { - self.statusicon = "hud_status_dead"; - } - maps/mp/gametypes_zm/_spectating::setspectatepermissionsformachine(); - [[ level.onspawnspectator ]]( origin, angles ); - if ( level.teambased && !level.splitscreen ) - { - self thread spectatorthirdpersonness(); - } - level thread maps/mp/gametypes_zm/_globallogic::updateteamstatus(); - pixmarker( "END: in_spawnSpectator" ); -} - -spectatorthirdpersonness() //checked matches cerberus output -{ - self endon( "disconnect" ); - self endon( "spawned" ); - self notify( "spectator_thirdperson_thread" ); - self endon( "spectator_thirdperson_thread" ); - self.spectatingthirdperson = 0; -} - -forcespawn( time ) //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "spawned" ); - if ( !isDefined( time ) ) - { - time = 60; - } - wait time; - if ( self.hasspawned ) - { - return; - } - if ( self.pers[ "team" ] == "spectator" ) - { - return; - } - if ( !maps/mp/gametypes_zm/_globallogic_utils::isvalidclass( self.pers[ "class" ] ) ) - { - self.pers[ "class" ] = "CLASS_CUSTOM1"; - self.class = self.pers[ "class" ]; - } - self maps/mp/gametypes_zm/_globallogic_ui::closemenus(); - self thread [[ level.spawnclient ]](); -} - -kickifdontspawn() //checked matches cerberus output -{ - /* -/# - if ( getDvarInt( "scr_hostmigrationtest" ) == 1 ) - { - return; -#/ - } - */ - if ( self ishost() ) - { - return; - } - self kickifidontspawninternal(); -} - -kickifidontspawninternal() //checked matches cerberus output dvars taken from beta dump -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "spawned" ); - waittime = 90; - if ( getDvar( "scr_kick_time" ) != "" ) - { - waittime = getDvarFloat( "scr_kick_time" ); - } - mintime = 45; - if ( getDvar( scr_kick_mintime) != "" ) - { - mintime = getDvarFloat( scr_kick_mintime); - } - starttime = getTime(); - kickwait( waittime ); - timepassed = ( getTime() - starttime ) / 1000; - if ( timepassed < ( waittime - 0.1 ) && timepassed < mintime ) - { - return; - } - if ( self.hasspawned ) - { - return; - } - if ( sessionmodeisprivate() ) - { - return; - } - if ( self.pers[ "team" ] == "spectator" ) - { - return; - } - kick( self getentitynumber() ); -} - -kickwait( waittime ) //checked matches cerberus output -{ - level endon( "game_ended" ); - maps/mp/gametypes_zm/_hostmigration::waitlongdurationwithhostmigrationpause( waittime ); -} - -spawninterroundintermission() //checked matches cerberus output -{ - self notify( "spawned" ); - self notify( "end_respawn" ); - self setspawnvariables(); - self clearlowermessage(); - self freeze_player_controls( 0 ); - self.sessionstate = "spectator"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - self maps/mp/gametypes_zm/_globallogic_defaults::default_onspawnintermission(); - self setorigin( self.origin ); - self setplayerangles( self.angles ); - self setdepthoffield( 0, 128, 512, 4000, 6, 1.8 ); -} - -spawnintermission( usedefaultcallback ) //checked changed to match cerberus output -{ - self notify( "spawned" ); - self notify( "end_respawn" ); - self endon( "disconnect" ); - self setspawnvariables(); - self clearlowermessage(); - self freeze_player_controls( 0 ); - if ( level.rankedmatch && waslastround() ) - { - if ( self.postgamemilestones || self.postgamecontracts || self.postgamepromotion ) - { - if ( self.postgamepromotion ) - { - self playlocalsound( "mus_level_up" ); - } - else if ( self.postgamecontracts ) - { - self playlocalsound( "mus_challenge_complete" ); - } - else - { - if ( self.postgamemilestones ) - { - self playlocalsound( "mus_contract_complete" ); - } - } - self closeingamemenu(); - self openmenu( game[ "menu_endgameupdate" ] ); - waittime = 4; - while ( waittime ) - { - wait 0.25; - waittime -= 0.25; - self openmenu( game[ "menu_endgameupdate" ] ); - } - self closemenu(); - } - } - self.sessionstate = "intermission"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - if ( isDefined( usedefaultcallback ) && usedefaultcallback ) - { - maps/mp/gametypes_zm/_globallogic_defaults::default_onspawnintermission(); - } - else - { - [[ level.onspawnintermission ]](); - } - self setdepthoffield( 0, 128, 512, 4000, 6, 1.8 ); -} - -spawnqueuedclientonteam( team ) //checked partially changed to match cerberus output see info.md -{ - player_to_spawn = undefined; - for ( i = 0; i < level.deadplayers[team].size; i++ ) - { - player = level.deadplayers[ team ][ i ]; - if ( player.waitingtospawn ) - { - } - else - { - player_to_spawn = player; - break; - } - } - if ( isDefined( player_to_spawn ) ) - { - player_to_spawn.allowqueuespawn = 1; - player_to_spawn maps/mp/gametypes_zm/_globallogic_ui::closemenus(); - player_to_spawn thread [[ level.spawnclient ]](); - } -} - -spawnqueuedclient( dead_player_team, killer ) //checked partially changed to match cerberus output see info.md -{ - if ( !level.playerqueuedrespawn ) - { - return; - } - maps/mp/gametypes_zm/_globallogic_utils::waittillslowprocessallowed(); - spawn_team = undefined; - if ( isDefined( killer ) && isDefined( killer.team ) && isDefined( level.teams[ killer.team ] ) ) - { - spawn_team = killer.team; - } - if ( isDefined( spawn_team ) ) - { - spawnqueuedclientonteam( spawn_team ); - return; - } - foreach ( team in level.teams ) - { - if ( team == dead_player_team ) - { - } - else - { - spawnqueuedclientonteam( team ); - } - } -} - -allteamsnearscorelimit() //checked changed to match cerberus output -{ - if ( !level.teambased ) - { - return 0; - } - if ( level.scorelimit <= 1 ) - { - return 0; - } - foreach ( team in level.teams ) - { - if ( !( game[ "teamScores" ][ team ] >= ( level.scoreLimit - 1 ) ) ) - { - return 0; - } - } - return 1; -} - -shouldshowrespawnmessage() //checked matches cerberus output -{ - if ( waslastround() ) - { - return 0; - } - if ( isoneround() ) - { - return 0; - } - if ( isDefined( level.livesdonotreset ) && level.livesdonotreset ) - { - return 0; - } - if ( allteamsnearscorelimit() ) - { - return 0; - } - return 1; -} - -default_spawnmessage() //checked matches cerberus output -{ - setlowermessage( game[ "strings" ][ "spawn_next_round" ] ); - self thread maps/mp/gametypes_zm/_globallogic_ui::removespawnmessageshortly( 3 ); -} - -showspawnmessage() //checked matches cerberus output -{ - if ( shouldshowrespawnmessage() ) - { - self thread [[ level.spawnmessage ]](); - } -} - -spawnclient( timealreadypassed ) //checked matches cerberus output -{ - pixbeginevent( "spawnClient" ); - /* -/# - assert( isDefined( self.team ) ); -#/ -/# - assert( maps/mp/gametypes_zm/_globallogic_utils::isvalidclass( self.class ) ); -#/ - */ - if ( !self mayspawn() ) - { - currentorigin = self.origin; - currentangles = self.angles; - self showspawnmessage(); - self thread [[ level.spawnspectator ]]( currentorigin + vectorScale( ( 0, 0, 1 ), 60 ), currentangles ); - pixendevent(); - return; - } - if ( self.waitingtospawn ) - { - pixendevent(); - return; - } - self.waitingtospawn = 1; - self.allowqueuespawn = undefined; - self waitandspawnclient( timealreadypassed ); - if ( isDefined( self ) ) - { - self.waitingtospawn = 0; - } - pixendevent(); -} - -waitandspawnclient( timealreadypassed ) //checked matches cerberus output -{ - self endon( "disconnect" ); - self endon( "end_respawn" ); - level endon( "game_ended" ); - if ( !isDefined( timealreadypassed ) ) - { - timealreadypassed = 0; - } - spawnedasspectator = 0; - if ( isDefined( self.teamkillpunish ) && self.teamkillpunish ) - { - teamkilldelay = maps/mp/gametypes_zm/_globallogic_player::teamkilldelay(); - if ( teamkilldelay > timealreadypassed ) - { - teamkilldelay -= timealreadypassed; - timealreadypassed = 0; - } - else - { - timealreadypassed -= teamkilldelay; - teamkilldelay = 0; - } - if ( teamkilldelay > 0 ) - { - setlowermessage( &"MP_FRIENDLY_FIRE_WILL_NOT", teamkilldelay ); - self thread respawn_asspectator( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), self.angles ); - spawnedasspectator = 1; - wait teamkilldelay; - } - self.teamkillpunish = 0; - } - if ( !isDefined( self.wavespawnindex ) && isDefined( level.waveplayerspawnindex[ self.team ] ) ) - { - self.wavespawnindex = level.waveplayerspawnindex[ self.team ]; - level.waveplayerspawnindex[ self.team ]++; - } - timeuntilspawn = timeuntilspawn( 0 ); - if ( timeuntilspawn > timealreadypassed ) - { - timeuntilspawn -= timealreadypassed; - timealreadypassed = 0; - } - else - { - timealreadypassed -= timeuntilspawn; - timeuntilspawn = 0; - } - if ( timeuntilspawn > 0 ) - { - if ( level.playerqueuedrespawn ) - { - setlowermessage( game[ "strings" ][ "you_will_spawn" ], timeuntilspawn ); - } - else if ( self issplitscreen() ) - { - setlowermessage( game[ "strings" ][ "waiting_to_spawn_ss" ], timeuntilspawn, 1 ); - } - else - { - setlowermessage( game[ "strings" ][ "waiting_to_spawn" ], timeuntilspawn ); - } - if ( !spawnedasspectator ) - { - spawnorigin = self.origin + vectorScale( ( 0, 0, 1 ), 60 ); - spawnangles = self.angles; - if ( isDefined( level.useintermissionpointsonwavespawn ) && [[ level.useintermissionpointsonwavespawn ]]() == 1 ) - { - spawnpoint = maps/mp/gametypes_zm/_spawnlogic::getrandomintermissionpoint(); - if ( isDefined( spawnpoint ) ) - { - spawnorigin = spawnpoint.origin; - spawnangles = spawnpoint.angles; - } - } - self thread respawn_asspectator( spawnorigin, spawnangles ); - } - spawnedasspectator = 1; - self maps/mp/gametypes_zm/_globallogic_utils::waitfortimeornotify( timeuntilspawn, "force_spawn" ); - self notify( "stop_wait_safe_spawn_button" ); - } - wavebased = level.waverespawndelay > 0; - if ( !level.playerforcerespawn && self.hasspawned && !wavebased && !self.wantsafespawn && !level.playerqueuedrespawn ) - { - setlowermessage( game[ "strings" ][ "press_to_spawn" ] ); - if ( !spawnedasspectator ) - { - self thread respawn_asspectator( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), self.angles ); - } - spawnedasspectator = 1; - self waitrespawnorsafespawnbutton(); - } - self.waitingtospawn = 0; - self clearlowermessage(); - self.wavespawnindex = undefined; - self.respawntimerstarttime = undefined; - self thread [[ level.spawnplayer ]](); -} - -waitrespawnorsafespawnbutton() //checked changed to match cerberus output -{ - self endon( "disconnect" ); - self endon( "end_respawn" ); - while ( 1 ) - { - if ( self usebuttonpressed() ) - { - return; - } - wait 0.05; - } -} - -waitinspawnqueue() //checked matches cerberus output -{ - self endon( "disconnect" ); - self endon( "end_respawn" ); - if ( !level.ingraceperiod && !level.usestartspawns ) - { - currentorigin = self.origin; - currentangles = self.angles; - self thread [[ level.spawnspectator ]]( currentorigin + vectorScale( ( 0, 0, 1 ), 60 ), currentangles ); - self waittill( "queue_respawn" ); - } -} - -setthirdperson( value ) //checked matches cerberus output -{ - if ( !level.console ) - { - return; - } - if ( !isDefined( self.spectatingthirdperson ) || value != self.spectatingthirdperson ) - { - self.spectatingthirdperson = value; - if ( value ) - { - self setclientthirdperson( 1 ); - self setdepthoffield( 0, 128, 512, 4000, 6, 1.8 ); - } - else - { - self setclientthirdperson( 0 ); - self setdepthoffield( 0, 0, 512, 4000, 4, 0 ); - } - self resetfov(); - } -} - -setspawnvariables() //checked matches cerberus output -{ - resettimeout(); - self stopshellshock(); - self stoprumble( "damage_heavy" ); -} - diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_ui.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_ui.gsc deleted file mode 100644 index 00d91fe..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_ui.gsc +++ /dev/null @@ -1,544 +0,0 @@ -#include maps/mp/gametypes_zm/_globallogic_player; -#include maps/mp/gametypes_zm/_spectating; -#include maps/mp/gametypes_zm/_globallogic; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; - -init() -{ - precachestring( &"MP_HALFTIME" ); - precachestring( &"MP_OVERTIME" ); - precachestring( &"MP_ROUNDEND" ); - precachestring( &"MP_INTERMISSION" ); - precachestring( &"MP_SWITCHING_SIDES_CAPS" ); - precachestring( &"MP_FRIENDLY_FIRE_WILL_NOT" ); - precachestring( &"MP_RAMPAGE" ); - precachestring( &"medal_received" ); - precachestring( &"killstreak_received" ); - precachestring( &"prox_grenade_notify" ); - precachestring( &"player_callout" ); - precachestring( &"score_event" ); - precachestring( &"rank_up" ); - precachestring( &"gun_level_complete" ); - precachestring( &"challenge_complete" ); - if ( sessionmodeiszombiesgame() ) - { - precachestring( &"hud_update_survival_team" ); - } - if ( level.splitscreen ) - { - precachestring( &"MP_ENDED_GAME" ); - } - else - { - precachestring( &"MP_HOST_ENDED_GAME" ); - } -} - -setupcallbacks() -{ - level.autoassign = ::menuautoassign; - level.spectator = ::menuspectator; - level.class = ::menuclass; - level.teammenu = ::menuteam; -} - -hideloadoutaftertime( delay ) -{ - self endon( "disconnect" ); - self endon( "perks_hidden" ); - wait delay; - self thread hideallperks( 0,4 ); - self notify( "perks_hidden" ); -} - -hideloadoutondeath() -{ - self endon( "disconnect" ); - self endon( "perks_hidden" ); - self waittill( "death" ); - self hideallperks(); - self notify( "perks_hidden" ); -} - -hideloadoutonkill() -{ - self endon( "disconnect" ); - self endon( "death" ); - self endon( "perks_hidden" ); - self waittill( "killed_player" ); - self hideallperks(); - self notify( "perks_hidden" ); -} - -freegameplayhudelems() -{ - while ( isDefined( self.perkicon ) ) - { - numspecialties = 0; - while ( numspecialties < level.maxspecialties ) - { - if ( isDefined( self.perkicon[ numspecialties ] ) ) - { - self.perkicon[ numspecialties ] destroyelem(); - self.perkname[ numspecialties ] destroyelem(); - } - numspecialties++; - } - } - if ( isDefined( self.perkhudelem ) ) - { - self.perkhudelem destroyelem(); - } - if ( isDefined( self.killstreakicon ) ) - { - if ( isDefined( self.killstreakicon[ 0 ] ) ) - { - self.killstreakicon[ 0 ] destroyelem(); - } - if ( isDefined( self.killstreakicon[ 1 ] ) ) - { - self.killstreakicon[ 1 ] destroyelem(); - } - if ( isDefined( self.killstreakicon[ 2 ] ) ) - { - self.killstreakicon[ 2 ] destroyelem(); - } - if ( isDefined( self.killstreakicon[ 3 ] ) ) - { - self.killstreakicon[ 3 ] destroyelem(); - } - if ( isDefined( self.killstreakicon[ 4 ] ) ) - { - self.killstreakicon[ 4 ] destroyelem(); - } - } - self notify( "perks_hidden" ); - if ( isDefined( self.lowermessage ) ) - { - self.lowermessage destroyelem(); - } - if ( isDefined( self.lowertimer ) ) - { - self.lowertimer destroyelem(); - } - if ( isDefined( self.proxbar ) ) - { - self.proxbar destroyelem(); - } - if ( isDefined( self.proxbartext ) ) - { - self.proxbartext destroyelem(); - } - if ( isDefined( self.carryicon ) ) - { - self.carryicon destroyelem(); - } -} - -teamplayercountsequal( playercounts ) -{ - count = undefined; - _a150 = level.teams; - _k150 = getFirstArrayKey( _a150 ); - while ( isDefined( _k150 ) ) - { - team = _a150[ _k150 ]; - if ( !isDefined( count ) ) - { - count = playercounts[ team ]; - } - else - { - if ( count != playercounts[ team ] ) - { - return 0; - } - } - _k150 = getNextArrayKey( _a150, _k150 ); - } - return 1; -} - -teamwithlowestplayercount( playercounts, ignore_team ) -{ - count = 9999; - lowest_team = undefined; - _a169 = level.teams; - _k169 = getFirstArrayKey( _a169 ); - while ( isDefined( _k169 ) ) - { - team = _a169[ _k169 ]; - if ( count > playercounts[ team ] ) - { - count = playercounts[ team ]; - lowest_team = team; - } - _k169 = getNextArrayKey( _a169, _k169 ); - } - return lowest_team; -} - -menuautoassign( comingfrommenu ) -{ - teamkeys = getarraykeys( level.teams ); - assignment = teamkeys[ randomint( teamkeys.size ) ]; - self closemenus(); - if ( isDefined( level.forceallallies ) && level.forceallallies ) - { - assignment = "allies"; - } - else - { - if ( level.teambased ) - { - if ( getDvarInt( "party_autoteams" ) == 1 ) - { - if ( level.allow_teamchange == "1" || self.hasspawned && comingfrommenu ) - { - assignment = ""; - break; - } - else - { - team = getassignedteam( self ); - switch( team ) - { - case 1: - assignment = teamkeys[ 1 ]; - break; - case 2: - assignment = teamkeys[ 0 ]; - break; - case 3: - assignment = teamkeys[ 2 ]; - break; - case 4: - if ( !isDefined( level.forceautoassign ) || !level.forceautoassign ) - { - self setclientscriptmainmenu( game[ "menu_class" ] ); - return; - } - default: - assignment = ""; - if ( isDefined( level.teams[ team ] ) ) - { - assignment = team; - } - else - { - if ( team == "spectator" && !level.forceautoassign ) - { - self setclientscriptmainmenu( game[ "menu_class" ] ); - return; - } - } - } - } - } - if ( assignment == "" || getDvarInt( "party_autoteams" ) == 0 ) - { - if ( sessionmodeiszombiesgame() ) - { - assignment = "allies"; - } - } - if ( assignment == self.pers[ "team" ] || self.sessionstate == "playing" && self.sessionstate == "dead" ) - { - self beginclasschoice(); - return; - } - } - else if ( getDvarInt( "party_autoteams" ) == 1 ) - { - if ( level.allow_teamchange != "1" || !self.hasspawned && !comingfrommenu ) - { - team = getassignedteam( self ); - if ( isDefined( level.teams[ team ] ) ) - { - assignment = team; - } - else - { - if ( team == "spectator" && !level.forceautoassign ) - { - self setclientscriptmainmenu( game[ "menu_class" ] ); - return; - } - } - } - } - } - if ( assignment != self.pers[ "team" ] || self.sessionstate == "playing" && self.sessionstate == "dead" ) - { - self.switching_teams = 1; - self.joining_team = assignment; - self.leaving_team = self.pers[ "team" ]; - self suicide(); - } - self.pers[ "team" ] = assignment; - self.team = assignment; - self.class = undefined; - self updateobjectivetext(); - if ( level.teambased ) - { - self.sessionteam = assignment; - } - else - { - self.sessionteam = "none"; - self.ffateam = assignment; - } - if ( !isalive( self ) ) - { - self.statusicon = "hud_status_dead"; - } - self notify( "joined_team" ); - level notify( "joined_team" ); - self notify( "end_respawn" ); - self beginclasschoice(); - self setclientscriptmainmenu( game[ "menu_class" ] ); -} - -teamscoresequal() -{ - score = undefined; - _a413 = level.teams; - _k413 = getFirstArrayKey( _a413 ); - while ( isDefined( _k413 ) ) - { - team = _a413[ _k413 ]; - if ( !isDefined( score ) ) - { - score = getteamscore( team ); - } - else - { - if ( score != getteamscore( team ) ) - { - return 0; - } - } - _k413 = getNextArrayKey( _a413, _k413 ); - } - return 1; -} - -teamwithlowestscore() -{ - score = 99999999; - lowest_team = undefined; - _a432 = level.teams; - _k432 = getFirstArrayKey( _a432 ); - while ( isDefined( _k432 ) ) - { - team = _a432[ _k432 ]; - if ( score > getteamscore( team ) ) - { - lowest_team = team; - } - _k432 = getNextArrayKey( _a432, _k432 ); - } - return lowest_team; -} - -pickteamfromscores( teams ) -{ - assignment = "allies"; - if ( teamscoresequal() ) - { - assignment = teams[ randomint( teams.size ) ]; - } - else - { - assignment = teamwithlowestscore(); - } - return assignment; -} - -getsplitscreenteam() -{ - index = 0; - while ( index < level.players.size ) - { - if ( !isDefined( level.players[ index ] ) ) - { - index++; - continue; - } - else if ( level.players[ index ] == self ) - { - index++; - continue; - } - else if ( !self isplayeronsamemachine( level.players[ index ] ) ) - { - index++; - continue; - } - else - { - team = level.players[ index ].sessionteam; - if ( team != "spectator" ) - { - return team; - } - } - index++; - } - return ""; -} - -updateobjectivetext() -{ - if ( sessionmodeiszombiesgame() || self.pers[ "team" ] == "spectator" ) - { - self setclientcgobjectivetext( "" ); - return; - } - if ( level.scorelimit > 0 ) - { - self setclientcgobjectivetext( getobjectivescoretext( self.pers[ "team" ] ) ); - } - else - { - self setclientcgobjectivetext( getobjectivetext( self.pers[ "team" ] ) ); - } -} - -closemenus() -{ - self closemenu(); - self closeingamemenu(); -} - -beginclasschoice( forcenewchoice ) -{ -/# - assert( isDefined( level.teams[ self.pers[ "team" ] ] ) ); -#/ - team = self.pers[ "team" ]; - if ( level.disablecac == 1 ) - { - self.pers[ "class" ] = level.defaultclass; - self.class = level.defaultclass; - if ( self.sessionstate != "playing" && game[ "state" ] == "playing" ) - { - self thread [[ level.spawnclient ]](); - } - level thread maps/mp/gametypes_zm/_globallogic::updateteamstatus(); - self thread maps/mp/gametypes_zm/_spectating::setspectatepermissionsformachine(); - return; - } - if ( level.wagermatch ) - { - self openmenu( game[ "menu_changeclass_wager" ] ); - } - else if ( getDvarInt( "barebones_class_mode" ) ) - { - self openmenu( game[ "menu_changeclass_barebones" ] ); - } - else - { - self openmenu( game[ "menu_changeclass_" + team ] ); - } -} - -showmainmenuforteam() -{ -/# - assert( isDefined( level.teams[ self.pers[ "team" ] ] ) ); -#/ - team = self.pers[ "team" ]; - if ( level.wagermatch ) - { - self openmenu( game[ "menu_changeclass_wager" ] ); - } - else - { - self openmenu( game[ "menu_changeclass_" + team ] ); - } -} - -menuteam( team ) -{ - self closemenus(); - if ( !level.console && level.allow_teamchange == "0" && isDefined( self.hasdonecombat ) && self.hasdonecombat ) - { - return; - } - if ( self.pers[ "team" ] != team ) - { - if ( level.ingraceperiod || !isDefined( self.hasdonecombat ) && !self.hasdonecombat ) - { - self.hasspawned = 0; - } - if ( self.sessionstate == "playing" ) - { - self.switching_teams = 1; - self.joining_team = team; - self.leaving_team = self.pers[ "team" ]; - self suicide(); - } - self.pers[ "team" ] = team; - self.team = team; - self.class = undefined; - self updateobjectivetext(); - if ( level.teambased ) - { - self.sessionteam = team; - } - else - { - self.sessionteam = "none"; - self.ffateam = team; - } - self setclientscriptmainmenu( game[ "menu_class" ] ); - self notify( "joined_team" ); - level notify( "joined_team" ); - self notify( "end_respawn" ); - } - self beginclasschoice(); -} - -menuspectator() -{ - self closemenus(); - if ( self.pers[ "team" ] != "spectator" ) - { - if ( isalive( self ) ) - { - self.switching_teams = 1; - self.joining_team = "spectator"; - self.leaving_team = self.pers[ "team" ]; - self suicide(); - } - self.pers[ "team" ] = "spectator"; - self.team = "spectator"; - self.class = undefined; - self updateobjectivetext(); - self.sessionteam = "spectator"; - if ( !level.teambased ) - { - self.ffateam = "spectator"; - } - [[ level.spawnspectator ]](); - self thread maps/mp/gametypes_zm/_globallogic_player::spectate_player_watcher(); - self setclientscriptmainmenu( game[ "menu_class" ] ); - self notify( "joined_spectators" ); - } -} - -menuclass( response ) -{ - self closemenus(); -} - -removespawnmessageshortly( delay ) -{ - self endon( "disconnect" ); - waittillframeend; - self endon( "end_respawn" ); - wait delay; - self clearlowermessage( 2 ); -} diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_utils.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_utils.gsc deleted file mode 100644 index 4de74a7..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_utils.gsc +++ /dev/null @@ -1,478 +0,0 @@ -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/gametypes_zm/_hostmigration; -#include maps/mp/gametypes_zm/_hud_message; -#include maps/mp/_utility; - -waittillslowprocessallowed() -{ - while ( level.lastslowprocessframe == getTime() ) - { - wait 0,05; - } - level.lastslowprocessframe = getTime(); -} - -testmenu() -{ - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - wait 10; - notifydata = spawnstruct(); - notifydata.titletext = &"MP_CHALLENGE_COMPLETED"; - notifydata.notifytext = "wheee"; - notifydata.sound = "mp_challenge_complete"; - self thread maps/mp/gametypes_zm/_hud_message::notifymessage( notifydata ); - } -} - -testshock() -{ - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - wait 3; - numshots = randomint( 6 ); - i = 0; - while ( i < numshots ) - { - iprintlnbold( numshots ); - self shellshock( "frag_grenade_mp", 0,2 ); - wait 0,1; - i++; - } - } -} - -testhps() -{ - self endon( "death" ); - self endon( "disconnect" ); - hps = []; - hps[ hps.size ] = "radar_mp"; - hps[ hps.size ] = "artillery_mp"; - hps[ hps.size ] = "dogs_mp"; - for ( ;; ) - { - hp = "radar_mp"; - wait 20; - } -} - -timeuntilroundend() -{ - if ( level.gameended ) - { - timepassed = ( getTime() - level.gameendtime ) / 1000; - timeremaining = level.postroundtime - timepassed; - if ( timeremaining < 0 ) - { - return 0; - } - return timeremaining; - } - if ( level.inovertime ) - { - return undefined; - } - if ( level.timelimit <= 0 ) - { - return undefined; - } - if ( !isDefined( level.starttime ) ) - { - return undefined; - } - timepassed = ( gettimepassed() - level.starttime ) / 1000; - timeremaining = ( level.timelimit * 60 ) - timepassed; - return timeremaining + level.postroundtime; -} - -gettimeremaining() -{ - return ( ( level.timelimit * 60 ) * 1000 ) - gettimepassed(); -} - -registerpostroundevent( eventfunc ) -{ - if ( !isDefined( level.postroundevents ) ) - { - level.postroundevents = []; - } - level.postroundevents[ level.postroundevents.size ] = eventfunc; -} - -executepostroundevents() -{ - if ( !isDefined( level.postroundevents ) ) - { - return; - } - i = 0; - while ( i < level.postroundevents.size ) - { - [[ level.postroundevents[ i ] ]](); - i++; - } -} - -getvalueinrange( value, minvalue, maxvalue ) -{ - if ( value > maxvalue ) - { - return maxvalue; - } - else - { - if ( value < minvalue ) - { - return minvalue; - } - else - { - return value; - } - } -} - -assertproperplacement() -{ -/# - numplayers = level.placement[ "all" ].size; - i = 0; - while ( i < ( numplayers - 1 ) ) - { - if ( isDefined( level.placement[ "all" ][ i ] ) && isDefined( level.placement[ "all" ][ i + 1 ] ) ) - { - if ( level.placement[ "all" ][ i ].score < level.placement[ "all" ][ i + 1 ].score ) - { - println( "^1Placement array:" ); - i = 0; - while ( i < numplayers ) - { - player = level.placement[ "all" ][ i ]; - println( "^1" + i + ". " + player.name + ": " + player.score ); - i++; - } - assertmsg( "Placement array was not properly sorted" ); - return; - } - } - else - { - i++; -#/ - } - } -} - -isvalidclass( class ) -{ - if ( level.oldschool || sessionmodeiszombiesgame() ) - { -/# - assert( !isDefined( class ) ); -#/ - return 1; - } - if ( isDefined( class ) ) - { - return class != ""; - } -} - -playtickingsound( gametype_tick_sound ) -{ - self endon( "death" ); - self endon( "stop_ticking" ); - level endon( "game_ended" ); - time = level.bombtimer; - while ( 1 ) - { - self playsound( gametype_tick_sound ); - if ( time > 10 ) - { - time -= 1; - wait 1; - } - else if ( time > 4 ) - { - time -= 0,5; - wait 0,5; - } - else if ( time > 1 ) - { - time -= 0,4; - wait 0,4; - } - else - { - time -= 0,3; - wait 0,3; - } - maps/mp/gametypes_zm/_hostmigration::waittillhostmigrationdone(); - } -} - -stoptickingsound() -{ - self notify( "stop_ticking" ); -} - -gametimer() -{ - level endon( "game_ended" ); - level waittill( "prematch_over" ); - level.starttime = getTime(); - level.discardtime = 0; - if ( isDefined( game[ "roundMillisecondsAlreadyPassed" ] ) ) - { - level.starttime -= game[ "roundMillisecondsAlreadyPassed" ]; - } - prevtime = getTime(); - while ( game[ "state" ] == "playing" ) - { - if ( !level.timerstopped ) - { - game[ "timepassed" ] += getTime() - prevtime; - } - prevtime = getTime(); - wait 1; - } -} - -gettimepassed() -{ - if ( !isDefined( level.starttime ) ) - { - return 0; - } - if ( level.timerstopped ) - { - return level.timerpausetime - level.starttime - level.discardtime; - } - else - { - return getTime() - level.starttime - level.discardtime; - } -} - -pausetimer() -{ - if ( level.timerstopped ) - { - return; - } - level.timerstopped = 1; - level.timerpausetime = getTime(); -} - -resumetimer() -{ - if ( !level.timerstopped ) - { - return; - } - level.timerstopped = 0; - level.discardtime += getTime() - level.timerpausetime; -} - -getscoreremaining( team ) -{ -/# - if ( !isplayer( self ) ) - { - assert( isDefined( team ) ); - } -#/ - scorelimit = level.scorelimit; - if ( isplayer( self ) ) - { - return scorelimit - maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( self ); - } - else - { - return scorelimit - getteamscore( team ); - } -} - -getscoreperminute( team ) -{ -/# - if ( !isplayer( self ) ) - { - assert( isDefined( team ) ); - } -#/ - scorelimit = level.scorelimit; - timelimit = level.timelimit; - minutespassed = ( gettimepassed() / 60000 ) + 0,0001; - if ( isplayer( self ) ) - { - return maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( self ) / minutespassed; - } - else - { - return getteamscore( team ) / minutespassed; - } -} - -getestimatedtimeuntilscorelimit( team ) -{ -/# - if ( !isplayer( self ) ) - { - assert( isDefined( team ) ); - } -#/ - scoreperminute = self getscoreperminute( team ); - scoreremaining = self getscoreremaining( team ); - if ( !scoreperminute ) - { - return 999999; - } - return scoreremaining / scoreperminute; -} - -rumbler() -{ - self endon( "disconnect" ); - while ( 1 ) - { - wait 0,1; - self playrumbleonentity( "damage_heavy" ); - } -} - -waitfortimeornotify( time, notifyname ) -{ - self endon( notifyname ); - wait time; -} - -waitfortimeornotifynoartillery( time, notifyname ) -{ - self endon( notifyname ); - wait time; - while ( isDefined( level.artilleryinprogress ) ) - { -/# - assert( level.artilleryinprogress ); -#/ - wait 0,25; - } -} - -isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) -{ - if ( shitloc != "head" && shitloc != "helmet" ) - { - return 0; - } - switch( smeansofdeath ) - { - case "MOD_BAYONET": - case "MOD_MELEE": - return 0; - case "MOD_IMPACT": - if ( sweapon != "knife_ballistic_mp" ) - { - return 0; - } - } - return 1; -} - -gethitlocheight( shitloc ) -{ - switch( shitloc ) - { - case "head": - case "helmet": - case "neck": - return 60; - case "gun": - case "left_arm_lower": - case "left_arm_upper": - case "left_hand": - case "right_arm_lower": - case "right_arm_upper": - case "right_hand": - case "torso_upper": - return 48; - case "torso_lower": - return 40; - case "left_leg_upper": - case "right_leg_upper": - return 32; - case "left_leg_lower": - case "right_leg_lower": - return 10; - case "left_foot": - case "right_foot": - return 5; - } - return 48; -} - -debugline( start, end ) -{ -/# - i = 0; - while ( i < 50 ) - { - line( start, end ); - wait 0,05; - i++; -#/ - } -} - -isexcluded( entity, entitylist ) -{ - index = 0; - while ( index < entitylist.size ) - { - if ( entity == entitylist[ index ] ) - { - return 1; - } - index++; - } - return 0; -} - -waitfortimeornotifies( desireddelay ) -{ - startedwaiting = getTime(); - waitedtime = ( getTime() - startedwaiting ) / 1000; - if ( waitedtime < desireddelay ) - { - wait ( desireddelay - waitedtime ); - return desireddelay; - } - else - { - return waitedtime; - } -} - -logteamwinstring( wintype, winner ) -{ - log_string = wintype; - if ( isDefined( winner ) ) - { - log_string = ( log_string + ", win: " ) + winner; - } - _a469 = level.teams; - _k469 = getFirstArrayKey( _a469 ); - while ( isDefined( _k469 ) ) - { - team = _a469[ _k469 ]; - log_string = ( log_string + ", " ) + team + ": " + game[ "teamScores" ][ team ]; - _k469 = getNextArrayKey( _a469, _k469 ); - } - logstring( log_string ); -} diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_vehicle.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_vehicle.gsc deleted file mode 100644 index 9bfb41d..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_globallogic_vehicle.gsc +++ /dev/null @@ -1,471 +0,0 @@ -#include maps/mp/gametypes_zm/_damagefeedback; -#include maps/mp/gametypes_zm/_globallogic_player; -#include maps/mp/gametypes_zm/_weapons; -#include maps/mp/_utility; - -callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname ) -{ - self.idflags = idflags; - self.idflagstime = getTime(); - if ( game[ "state" ] == "postgame" ) - { - return; - } - if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( eattacker.candocombat ) && !eattacker.candocombat ) - { - return; - } - if ( !isDefined( vdir ) ) - { - idflags |= level.idflags_no_knockback; - } - friendly = 0; - if ( isDefined( self.maxhealth ) || self.health == self.maxhealth && !isDefined( self.attackers ) ) - { - self.attackers = []; - self.attackerdata = []; - self.attackerdamage = []; - } - if ( sweapon == "none" && isDefined( einflictor ) ) - { - if ( isDefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) - { - sweapon = "explodable_barrel_mp"; - } - else - { - if ( isDefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) - { - sweapon = "destructible_car_mp"; - } - } - } - if ( idflags & level.idflags_no_protection ) - { - if ( self isvehicleimmunetodamage( idflags, smeansofdeath, sweapon ) ) - { - return; - } - if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) - { - } - else - { - if ( smeansofdeath == "MOD_PROJECTILE" || smeansofdeath == "MOD_GRENADE" ) - { - idamage *= getvehicleprojectilescalar( sweapon ); - idamage = int( idamage ); - if ( idamage == 0 ) - { - return; - } - } - else - { - if ( smeansofdeath == "MOD_GRENADE_SPLASH" ) - { - idamage *= getvehicleunderneathsplashscalar( sweapon ); - idamage = int( idamage ); - if ( idamage == 0 ) - { - return; - } - } - } - } - idamage *= level.vehicledamagescalar; - idamage = int( idamage ); - if ( isplayer( eattacker ) ) - { - eattacker.pers[ "participation" ]++; - } - prevhealthratio = self.health / self.maxhealth; - if ( isDefined( self.owner ) && isplayer( self.owner ) ) - { - team = self.owner.pers[ "team" ]; - } - if ( level.teambased && isplayer( eattacker ) && team == eattacker.pers[ "team" ] ) - { - if ( level.friendlyfire == 0 ) - { - if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) - { - return; - } - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 1 ); - } - else if ( level.friendlyfire == 1 ) - { - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); - } - else if ( level.friendlyfire == 2 ) - { - if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) - { - return; - } - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 1 ); - } - else - { - if ( level.friendlyfire == 3 ) - { - idamage = int( idamage * 0,5 ); - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); - } - } - friendly = 1; - } - else - { - if ( !level.teambased && isDefined( self.targetname ) && self.targetname == "rcbomb" ) - { - } - else - { - if ( isDefined( self.owner ) && isDefined( eattacker ) && self.owner == eattacker ) - { - return; - } - } - if ( idamage < 1 ) - { - idamage = 1; - } - if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( sweapon ) ) - { - eattacker thread maps/mp/gametypes_zm/_weapons::checkhit( sweapon ); - } - if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isDefined( einflictor.iscooked ) ) - { - self.wascooked = getTime(); - } - else - { - self.wascooked = undefined; - } - attacker_seat = undefined; - if ( isDefined( eattacker ) ) - { - attacker_seat = self getoccupantseat( eattacker ); - } - if ( isDefined( eattacker ) ) - { - self.lastdamagewasfromenemy = !isDefined( attacker_seat ); - } - self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); - if ( level.gametype == "hack" && sweapon != "emp_grenade_mp" ) - { - idamage = 0; - } - } - if ( isDefined( eattacker ) && eattacker != self ) - { - if ( maps/mp/gametypes_zm/_globallogic_player::dodamagefeedback( sweapon, einflictor ) ) - { - if ( idamage > 0 ) - { - eattacker thread maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor ); - } - } - } - } -/# - if ( getDvarInt( "g_debugDamage" ) ) - { - println( "actor:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); -#/ - } - if ( 1 ) - { - lpselfnum = self getentitynumber(); - lpselfteam = ""; - lpattackerteam = ""; - if ( isplayer( eattacker ) ) - { - lpattacknum = eattacker getentitynumber(); - lpattackguid = eattacker getguid(); - lpattackname = eattacker.name; - lpattackerteam = eattacker.pers[ "team" ]; - } - else - { - lpattacknum = -1; - lpattackguid = ""; - lpattackname = ""; - lpattackerteam = "world"; - } - logprint( "VD;" + lpselfnum + ";" + lpselfteam + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\n" ); - } -} - -callback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ) -{ - idamage = 0; - finnerdamage = 0; - fouterdamage = 0; - self.idflags = idflags; - self.idflagstime = getTime(); - if ( game[ "state" ] == "postgame" ) - { - return; - } - if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( eattacker.candocombat ) && !eattacker.candocombat ) - { - return; - } - friendly = 0; - if ( idflags & level.idflags_no_protection ) - { - if ( self isvehicleimmunetodamage( idflags, smeansofdeath, sweapon ) ) - { - return; - } - if ( smeansofdeath != "MOD_PROJECTILE_SPLASH" || smeansofdeath == "MOD_GRENADE_SPLASH" && smeansofdeath == "MOD_EXPLOSIVE" ) - { - scalar = getvehicleprojectilesplashscalar( sweapon ); - idamage = int( idamage * scalar ); - finnerdamage *= scalar; - fouterdamage *= scalar; - if ( finnerdamage == 0 ) - { - return; - } - if ( idamage < 1 ) - { - idamage = 1; - } - } - occupant_team = undefined; - if ( level.teambased && isplayer( eattacker ) && occupant_team == eattacker.pers[ "team" ] ) - { - if ( level.friendlyfire == 0 ) - { - if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) - { - return; - } - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); - } - else if ( level.friendlyfire == 1 ) - { - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); - } - else if ( level.friendlyfire == 2 ) - { - if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) - { - return; - } - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); - } - else - { - if ( level.friendlyfire == 3 ) - { - idamage = int( idamage * 0,5 ); - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); - } - } - friendly = 1; - return; - } - else - { - if ( idamage < 1 ) - { - idamage = 1; - } - self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); - } - } -} - -vehiclecrush() -{ - self endon( "disconnect" ); - if ( isDefined( level._effect ) && isDefined( level._effect[ "tanksquish" ] ) ) - { - playfx( level._effect[ "tanksquish" ], self.origin + vectorScale( ( 0, 0, 1 ), 30 ) ); - } - self playsound( "chr_crunch" ); -} - -getvehicleprojectilescalar( sweapon ) -{ - if ( sweapon == "satchel_charge_mp" ) - { - scale = 1; - } - else if ( sweapon == "sticky_grenade_mp" ) - { - scale = 1; - } - else if ( sweapon == "claymore_mp" ) - { - scale = 1; - } - else if ( sweapon == "remote_missile_missile_mp" ) - { - scale = 10; - } - else if ( sweapon == "remote_mortar_missile_mp" ) - { - scale = 10; - } - else if ( sweapon == "smaw_mp" ) - { - scale = 0,2; - } - else if ( sweapon == "fhj18_mp" ) - { - scale = 0,2; - } - else if ( issubstr( sweapon, "gl_" ) ) - { - scale = 1; - } - else if ( issubstr( sweapon, "turret_mp" ) ) - { - scale = 1; - } - else if ( issubstr( sweapon, "grenade" ) ) - { - scale = 1; - } - else - { - scale = 1; - } - return scale; -} - -getvehicleprojectilesplashscalar( sweapon ) -{ - if ( sweapon == "satchel_charge_mp" ) - { - scale = 1; - } - else if ( sweapon == "sticky_grenade_mp" ) - { - scale = 1; - } - else if ( sweapon == "claymore_mp" ) - { - scale = 1; - } - else if ( sweapon == "remote_missile_missile_mp" ) - { - scale = 10; - } - else if ( sweapon == "remote_mortar_missile_mp" ) - { - scale = 4; - } - else if ( sweapon == "chopper_minigun_mp" ) - { - scale = 0,5; - } - else if ( issubstr( sweapon, "gl_" ) ) - { - scale = 0,5; - } - else if ( issubstr( sweapon, "turrent_mp" ) ) - { - scale = 0,1; - } - else if ( issubstr( sweapon, "grenade" ) ) - { - scale = 1; - } - else - { - scale = 1; - } - return scale; -} - -getvehicleunderneathsplashscalar( sweapon ) -{ - if ( sweapon == "satchel_charge_mp" ) - { - scale = 10; - scale *= 3; - } - else - { - scale = 1; - } - return scale; -} - -getvehiclebulletdamage( sweapon ) -{ - if ( issubstr( sweapon, "ptrs41_" ) ) - { - idamage = 25; - } - else if ( issubstr( sweapon, "gunner" ) ) - { - idamage = 5; - } - else if ( issubstr( sweapon, "mg42_bipod" ) || issubstr( sweapon, "30cal_bipod" ) ) - { - idamage = 5; - } - else - { - idamage = 1; - } - return idamage; -} - -allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) -{ - if ( isDefined( self.allowfriendlyfiredamageoverride ) ) - { - return [[ self.allowfriendlyfiredamageoverride ]]( einflictor, eattacker, smeansofdeath, sweapon ); - } - vehicle = eattacker getvehicleoccupied(); - return 0; -} diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_gv_actions.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_gv_actions.gsc deleted file mode 100644 index 0b42480..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_gv_actions.gsc +++ /dev/null @@ -1,995 +0,0 @@ -#include maps/mp/gametypes_zm/_globallogic_ui; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/gametypes_zm/_globallogic; -#include common_scripts/utility; -#include maps/mp/_utility; - -initializeactionarray() -{ - level.gametypeactions = []; - level.gametypeactions[ "GiveAmmo" ] = ::dogiveammo; - level.gametypeactions[ "RemoveAmmo" ] = ::doremoveammo; - level.gametypeactions[ "PlaySound" ] = ::doplaysound; - level.gametypeactions[ "EnableUAV" ] = ::doenableuav; - level.gametypeactions[ "GiveScore" ] = ::dogivescore; - level.gametypeactions[ "RemoveScore" ] = ::doremovescore; - level.gametypeactions[ "SetHeader" ] = ::dosetheader; - level.gametypeactions[ "SetSubHeader" ] = ::dosetsubheader; - level.gametypeactions[ "DisplayMessage" ] = ::dodisplaymessage; - level.gametypeactions[ "GiveHealth" ] = ::dogivehealth; - level.gametypeactions[ "RemoveHealth" ] = ::doremovehealth; - level.gametypeactions[ "SetHealthRegen" ] = ::dosethealthregen; - level.gametypeactions[ "ChangeClass" ] = ::dochangeclass; - level.gametypeactions[ "ChangeTeam" ] = ::dochangeteam; - level.gametypeactions[ "GivePerk" ] = ::dogiveperk; - level.gametypeactions[ "RemovePerk" ] = ::doremoveperk; - level.gametypeactions[ "GiveInvuln" ] = ::dogiveinvuln; - level.gametypeactions[ "RemoveInvuln" ] = ::doremoveinvuln; - level.gametypeactions[ "SetDamageModifier" ] = ::dosetdamagemodifier; - level.gametypeactions[ "GiveKillstreak" ] = ::dogivekillstreak; - level.gametypeactions[ "RemoveKillstreak" ] = ::doremovekillstreak; - level.gametypeactions[ "GiveLives" ] = ::dogivelives; - level.gametypeactions[ "RemoveLives" ] = ::doremovelives; - level.gametypeactions[ "ScaleMoveSpeed" ] = ::doscalemovespeed; - level.gametypeactions[ "ShowOnRadar" ] = ::doshowonradar; - level.conditionals = []; - level.conditionals[ "Equals" ] = ::equals; - level.conditionals[ "==" ] = ::equals; - level.conditionals[ "!=" ] = ::notequals; - level.conditionals[ "<" ] = ::lessthan; - level.conditionals[ "<=" ] = ::lessthanequals; - level.conditionals[ ">" ] = ::greaterthan; - level.conditionals[ ">=" ] = ::greaterthanequals; - level.conditionals[ "InPlace" ] = ::inplace; - level.conditionallefthandside = []; - level.conditionallefthandside[ "PlayersLeft" ] = ::playersleft; - level.conditionallefthandside[ "RoundsPlayed" ] = ::roundsplayed; - level.conditionallefthandside[ "HitBy" ] = ::hitby; - level.conditionallefthandside[ "PlayersClass" ] = ::playersclass; - level.conditionallefthandside[ "VictimsClass" ] = ::playersclass; - level.conditionallefthandside[ "AttackersClass" ] = ::attackersclass; - level.conditionallefthandside[ "PlayersPlace" ] = ::playersplace; - level.conditionallefthandside[ "VictimsPlace" ] = ::playersplace; - level.conditionallefthandside[ "AttackersPlace" ] = ::attackersplace; - level.targets = []; - level.targets[ "Everyone" ] = ::gettargeteveryone; - level.targets[ "PlayersLeft" ] = ::gettargetplayersleft; - level.targets[ "PlayersEliminated" ] = ::gettargetplayerseliminated; - level.targets[ "PlayersTeam" ] = ::gettargetplayersteam; - level.targets[ "VictimsTeam" ] = ::gettargetplayersteam; - level.targets[ "OtherTeam" ] = ::gettargetotherteam; - level.targets[ "AttackersTeam" ] = ::gettargetotherteam; - level.targets[ "PlayersLeftOnPlayersTeam" ] = ::gettargetplayersleftonplayersteam; - level.targets[ "PlayersLeftOnOtherTeam" ] = ::gettargetplayersleftonotherteam; - level.targets[ "PlayersLeftOnVictimsTeam" ] = ::gettargetplayersleftonplayersteam; - level.targets[ "PlayersLeftOnAttackersTeam" ] = ::gettargetplayersleftonotherteam; - level.targets[ "PlayersEliminatedOnPlayersTeam" ] = ::gettargetplayerseliminatedonplayersteam; - level.targets[ "PlayersEliminatedOnOtherTeam" ] = ::gettargetplayerseliminatedonotherteam; - level.targets[ "PlayersEliminatedOnVictimsTeam" ] = ::gettargetplayerseliminatedonplayersteam; - level.targets[ "PlayersEliminatedOnAttackersTeam" ] = ::gettargetplayerseliminatedonotherteam; - level.targets[ "AssistingPlayers" ] = ::getassistingplayers; -} - -equals( param1, param2 ) -{ - return param1 == param2; -} - -notequals( param1, param2 ) -{ - return param1 != param2; -} - -lessthan( param1, param2 ) -{ - return param1 < param2; -} - -lessthanequals( param1, param2 ) -{ - return param1 <= param2; -} - -greaterthan( param1, param2 ) -{ - return param1 > param2; -} - -greaterthanequals( param1, param2 ) -{ - return param1 >= param2; -} - -inplace( param1, param2 ) -{ - if ( param1 == param2 ) - { - return 1; - } - if ( param2 == "top3" && param1 == "first" ) - { - return 1; - } - return 0; -} - -playersleft( rule ) -{ - return 0; -} - -roundsplayed( rule ) -{ - return game[ "roundsplayed" ] + 1; -} - -hitby( rule ) -{ - meansofdeath = rule.target[ "MeansOfDeath" ]; - weapon = rule.target[ "Weapon" ]; - if ( !isDefined( meansofdeath ) || !isDefined( weapon ) ) - { - return undefined; - } - switch( weapon ) - { - case "knife_ballistic_mp": - return "knife"; - } - switch( meansofdeath ) - { - case "MOD_PISTOL_BULLET": - case "MOD_RIFLE_BULLET": - return "bullet"; - case "MOD_BAYONET": - case "MOD_MELEE": - return "knife"; - case "MOD_HEAD_SHOT": - return "headshot"; - case "MOD_EXPLOSIVE": - case "MOD_GRENADE": - case "MOD_GRENADE_SPLASH": - case "MOD_PROJECTILE": - case "MOD_PROJECTILE_SPLASH": - return "explosive"; - } - return undefined; -} - -getplayersclass( player ) -{ - return player.pers[ "class" ]; -} - -playersclass( rule ) -{ - player = rule.target[ "Player" ]; - return getplayersclass( player ); -} - -attackersclass( rule ) -{ - player = rule.target[ "Attacker" ]; - return getplayersclass( player ); -} - -getplayersplace( player ) -{ - maps/mp/gametypes_zm/_globallogic::updateplacement(); - if ( !isDefined( level.placement[ "all" ] ) ) - { - return; - } - place = 0; - while ( place < level.placement[ "all" ].size ) - { - if ( level.placement[ "all" ][ place ] == player ) - { - place++; - continue; - } - else - { - place++; - } - } - place++; - if ( place == 1 ) - { - return "first"; - } - else - { - if ( place <= 3 ) - { - return "top3"; - } - else - { - if ( place == level.placement[ "all" ].size ) - { - return "last"; - } - } - } - return "middle"; -} - -playersplace( rule ) -{ - player = rule.target[ "Player" ]; - return getplayersplace( player ); -} - -attackersplace( rule ) -{ - player = rule.target[ "Attacker" ]; - return getplayersplace( player ); -} - -gettargeteveryone( rule ) -{ - return level.players; -} - -gettargetplayersleft( rule ) -{ - return 0; -} - -gettargetplayerseliminated( rule ) -{ - return 0; -} - -gettargetplayersteam( rule ) -{ - player = rule.target[ "Player" ]; - if ( !isDefined( player ) ) - { - return []; - } - return getplayersonteam( level.players, player.pers[ "team" ] ); -} - -gettargetotherteam( rule ) -{ - player = rule.target[ "Player" ]; - if ( !isDefined( player ) ) - { - return []; - } - return getplayersonteam( level.players, getotherteam( player.pers[ "team" ] ) ); -} - -gettargetplayersleftonplayersteam( rule ) -{ - return []; -} - -gettargetplayersleftonotherteam( rule ) -{ - return []; -} - -gettargetplayerseliminatedonplayersteam( rule ) -{ - return []; -} - -gettargetplayerseliminatedonotherteam( rule ) -{ - return []; -} - -getassistingplayers( rule ) -{ - assisters = []; - attacker = rule.target[ "Attacker" ]; - if ( !isDefined( rule.target[ "Assisters" ] ) || !isDefined( attacker ) ) - { - return assisters; - } - j = 0; - while ( j < rule.target[ "Assisters" ].size ) - { - player = rule.target[ "Assisters" ][ j ]; - if ( !isDefined( player ) ) - { - j++; - continue; - } - else if ( player == attacker ) - { - j++; - continue; - } - else - { - assisters[ assisters.size ] = player; - } - j++; - } - return assisters; -} - -executegametypeeventrule( rule ) -{ - if ( !aregametypeeventruleconditionalsmet( rule ) ) - { - return; - } - if ( !isDefined( level.gametypeactions[ rule.action ] ) ) - { -/# - error( "GAMETYPE VARIANTS - unknown action: " + rule.action + "!" ); -#/ - return; - } - thread internalexecuterule( rule ); -} - -internalexecuterule( rule ) -{ -} - -aregametypeeventruleconditionalsmet( rule ) -{ - if ( !isDefined( rule.conditionals ) || rule.conditionals.size == 0 ) - { - return 1; - } - combinedresult = 1; - if ( rule.conditionaleval == "OR" ) - { - combinedresult = 0; - } - i = 0; - while ( i < rule.conditionals.size ) - { - conditionalresult = evaluategametypeeventruleconditional( rule, rule.conditionals[ i ] ); - switch( rule.conditionaleval ) - { - case "AND": - if ( combinedresult ) - { - combinedresult = conditionalresult; - } - break; - case "OR": - if ( !combinedresult ) - { - combinedresult = conditionalresult; - } - break; - } - if ( rule.conditionaleval == "AND" && !combinedresult ) - { - break; - } - else - { - if ( rule.conditionaleval == "OR" && combinedresult ) - { - break; - } - else - { - i++; - } - } - } - return combinedresult; -} - -evaluategametypeeventruleconditional( rule, conditional ) -{ - if ( isDefined( conditional.lhs ) || !isDefined( conditional.operand ) && !isDefined( conditional.rhs ) ) - { - return 0; - } - if ( !isDefined( level.conditionallefthandside[ conditional.lhs ] ) ) - { - return 0; - } - lhsvalue = [[ level.conditionallefthandside[ conditional.lhs ] ]]( rule ); - if ( !isDefined( lhsvalue ) || !isDefined( level.conditionals[ conditional.operand ] ) ) - { - return 0; - } - return [[ level.conditionals[ conditional.operand ] ]]( lhsvalue, conditional.rhs ); -} - -getplayersonteam( players, team ) -{ - playersonteam = []; - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - if ( player.pers[ "team" ] == team ) - { - playersonteam[ playersonteam.size ] = player; - } - i++; - } - return playersonteam; -} - -gettargetsforgametypeeventrule( rule ) -{ - targets = []; - if ( !isDefined( rule.targetname ) ) - { - return targets; - } - if ( isDefined( rule.target[ rule.targetname ] ) ) - { - targets[ targets.size ] = rule.target[ rule.targetname ]; - } - else - { - if ( isDefined( level.targets[ rule.targetname ] ) ) - { - targets = [[ level.targets[ rule.targetname ] ]]( rule ); - } - } - return targets; -} - -doesrulehavevalidparam( rule ) -{ - if ( isDefined( rule.params ) && isarray( rule.params ) ) - { - return rule.params.size > 0; - } -} - -sortplayersbylivesdescending( players ) -{ - if ( !isDefined( players ) ) - { - return undefined; - } - swapped = 1; - n = players.size; - while ( swapped ) - { - swapped = 0; - i = 0; - while ( i < ( n - 1 ) ) - { - if ( players[ i ].pers[ "lives" ] < players[ i + 1 ].pers[ "lives" ] ) - { - temp = players[ i ]; - players[ i ] = players[ i + 1 ]; - players[ i + 1 ] = temp; - swapped = 1; - } - i++; - } - n--; - - } - return players; -} - -giveammo( players, amount ) -{ - i = 0; - while ( i < players.size ) - { - wait 0,5; - player = players[ i ]; - currentweapon = player getcurrentweapon(); - clipammo = player getweaponammoclip( currentweapon ); - player setweaponammoclip( currentweapon, clipammo + amount ); - i++; - } -} - -dogiveammo( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - targets = gettargetsforgametypeeventrule( rule ); - giveammo( targets, rule.params[ 0 ] ); -} - -doremoveammo( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - targets = gettargetsforgametypeeventrule( rule ); - giveammo( targets, 0 - rule.params[ 0 ] ); -} - -doplaysound( rule ) -{ - if ( doesrulehavevalidparam( rule ) ) - { - playsoundonplayers( rule.params[ 0 ] ); - } -} - -doenableuav( rule ) -{ - targets = gettargetsforgametypeeventrule( rule ); - targetindex = 0; - while ( targetindex < targets.size ) - { - targets[ targetindex ].pers[ "hasRadar" ] = 1; - targets[ targetindex ].hasspyplane = 1; - targetindex++; - } -} - -givescore( players, amount ) -{ - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - score = maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( player ); - maps/mp/gametypes_zm/_globallogic_score::_setplayerscore( player, score + amount ); - i++; - } -} - -dogivescore( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - targets = gettargetsforgametypeeventrule( rule ); - givescore( targets, rule.params[ 0 ] ); -} - -doremovescore( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - targets = gettargetsforgametypeeventrule( rule ); - givescore( targets, 0 - rule.params[ 0 ] ); -} - -dosetheader( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - targets = gettargetsforgametypeeventrule( rule ); - targetindex = 0; - while ( targetindex < targets.size ) - { - target = targets[ targetindex ]; - displaytextonhudelem( target, target.customgametypeheader, rule.params[ 0 ], rule.params[ 1 ], "gv_header", rule.params[ 2 ] ); - targetindex++; - } -} - -dosetsubheader( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - targets = gettargetsforgametypeeventrule( rule ); - targetindex = 0; - while ( targetindex < targets.size ) - { - target = targets[ targetindex ]; - displaytextonhudelem( target, target.customgametypesubheader, rule.params[ 0 ], rule.params[ 1 ], "gv_subheader", rule.params[ 2 ] ); - targetindex++; - } -} - -displaytextonhudelem( target, texthudelem, text, secondstodisplay, notifyname, valueparam ) -{ - texthudelem.alpha = 1; - if ( isDefined( valueparam ) ) - { - texthudelem settext( text, valueparam ); - } - else - { - texthudelem settext( text ); - } - if ( !isDefined( secondstodisplay ) || secondstodisplay <= 0 ) - { - target.doingnotify = 0; - target notify( notifyname ); - return; - } - target thread fadecustomgametypehudelem( texthudelem, secondstodisplay, notifyname ); -} - -fadecustomgametypehudelem( hudelem, seconds, notifyname ) -{ - self endon( "disconnect" ); - self notify( notifyname ); - self endon( notifyname ); - if ( seconds <= 0 ) - { - return; - } - self.doingnotify = 1; - wait seconds; - while ( hudelem.alpha > 0 ) - { - hudelem.alpha -= 0,05; - if ( hudelem.alpha < 0 ) - { - hudelem.alpha = 0; - } - wait 0,05; - } - self.doingnotify = 0; -} - -dodisplaymessage( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - targets = gettargetsforgametypeeventrule( rule ); - targetindex = 0; - while ( targetindex < targets.size ) - { - thread announcemessage( targets[ targetindex ], rule.params[ 0 ], 2 ); - targetindex++; - } -} - -announcemessage( target, messagetext, time ) -{ - target endon( "disconnect" ); - clientannouncement( target, messagetext, int( time * 1000 ) ); - if ( time == 0 ) - { - time = getDvarFloat( #"E8C4FC20" ); - } - target.doingnotify = 1; - wait time; - target.doingnotify = 0; -} - -givehealth( players, amount ) -{ - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - player.health += amount; - i++; - } -} - -dogivehealth( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - givehealth( gettargetsforgametypeeventrule( rule ), rule.params[ 0 ] ); -} - -doremovehealth( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - givehealth( gettargetsforgametypeeventrule( rule ), 0 - rule.params[ 0 ] ); -} - -dosethealthregen( rule ) -{ - targets = gettargetsforgametypeeventrule( rule ); - targetindex = 0; - while ( targetindex < targets.size ) - { - player = targets[ targetindex ]; - player.regenrate = rule.params[ 0 ]; - targetindex++; - } -} - -dochangeclass( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } -} - -dochangeteam( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - team = rule.params[ 0 ]; - teamkeys = getarraykeys( level.teams ); - targets = gettargetsforgametypeeventrule( rule ); - targetindex = 0; - while ( targetindex < targets.size ) - { - target = targets[ targetindex ]; - if ( target.pers[ "team" ] == team ) - { - targetindex++; - continue; - } - else - { - while ( team == "toggle" ) - { - team = teamkeys[ randomint( teamkeys.size ) ]; - teamindex = 0; - while ( teamindex < teamkeys.size ) - { - if ( target.pers[ "team" ] == teamkeys[ teamindex ] ) - { - team = teamkeys[ ( teamindex + 1 ) % teamkeys.size ]; - break; - } - else - { - teamindex++; - } - } - } - target.pers[ "team" ] = team; - target.team = team; - if ( level.teambased ) - { - target.sessionteam = team; - } - else - { - target.sessionteam = "none"; - } - target notify( "joined_team" ); - level notify( "joined_team" ); - } - targetindex++; - } -} - -displayperk( player, imagename ) -{ - index = 0; - if ( isDefined( player.perkicon ) ) - { - index = -1; - i = 0; - while ( i < player.perkicon.size ) - { - if ( player.perkicon[ i ].alpha == 0 ) - { - index = i; - break; - } - else - { - i++; - } - } - if ( index == -1 ) - { - return; - } - } - player maps/mp/gametypes_zm/_hud_util::showperk( index, imagename, 10 ); - player thread maps/mp/gametypes_zm/_globallogic_ui::hideloadoutaftertime( 3 ); - player thread maps/mp/gametypes_zm/_globallogic_ui::hideloadoutondeath(); -} - -setorunsetperk( players, perks, shouldset ) -{ - if ( level.perksenabled == 0 ) - { - return; - } - if ( perks.size < 2 ) - { - return; - } - hasperkalready = 0; - imagename = perks[ perks.size - 1 ]; - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - perkindex = 0; - while ( perkindex < ( perks.size - 1 ) ) - { - perk = perks[ perkindex ]; - if ( player hasperk( perk ) ) - { - hasperkalready = 1; - } - if ( shouldset ) - { - player setperk( perk ); - perkindex++; - continue; - } - else - { - player unsetperk( perk ); - } - perkindex++; - } - if ( shouldset && !hasperkalready && getDvarInt( "scr_showperksonspawn" ) == 1 ) - { - displayperk( player, imagename ); - } - i++; - } -} - -dogiveperk( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - setorunsetperk( gettargetsforgametypeeventrule( rule ), rule.params, 1 ); -} - -doremoveperk( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - setorunsetperk( gettargetsforgametypeeventrule( rule ), rule.params, 0 ); -} - -giveorremovekillstreak( rule, shouldgive ) -{ -} - -dogivekillstreak( rule ) -{ - giveorremovekillstreak( rule, 1 ); -} - -doremovekillstreak( rule ) -{ - giveorremovekillstreak( rule, 0 ); -} - -givelives( players, amount ) -{ - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - player.pers[ "lives" ] += amount; - if ( player.pers[ "lives" ] < 0 ) - { - player.pers[ "lives" ] = 0; - } - i++; - } -} - -dogivelives( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - givelives( gettargetsforgametypeeventrule( rule ), rule.params[ 0 ] ); -} - -doremovelives( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - givelives( gettargetsforgametypeeventrule( rule ), 0 - rule.params[ 0 ] ); -} - -giveorremoveinvuln( players, shouldgiveinvuln ) -{ - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - i++; - } -} - -dogiveinvuln( rule ) -{ - giveorremoveinvuln( gettargetsforgametypeeventrule( rule ), 1 ); -} - -doremoveinvuln( rule ) -{ - giveorremoveinvuln( gettargetsforgametypeeventrule( rule ), 0 ); -} - -dosetdamagemodifier( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - players = gettargetsforgametypeeventrule( rule ); - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - player.damagemodifier = rule.params[ 0 ]; - i++; - } -} - -doscalemovespeed( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - movespeedscale = rule.params[ 0 ]; - targets = gettargetsforgametypeeventrule( rule ); - targetindex = 0; - while ( targetindex < targets.size ) - { - target = targets[ targetindex ]; - target.movementspeedmodifier = movespeedscale * target getmovespeedscale(); - if ( target.movementspeedmodifier < 0,1 ) - { - target.movementspeedmodifier = 0,1; - } - else - { - if ( target.movementspeedmodifier > 4 ) - { - target.movementspeedmodifier = 4; - } - } - target setmovespeedscale( target.movementspeedmodifier ); - targetindex++; - } -} - -doshowonradar( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - targets = gettargetsforgametypeeventrule( rule ); - targetindex = 0; - while ( targetindex < targets.size ) - { - if ( rule.params[ 0 ] == "enable" ) - { - targets[ targetindex ] setperk( "specialty_showonradar" ); - targetindex++; - continue; - } - else - { - targets[ targetindex ] unsetperk( "specialty_showonradar" ); - } - targetindex++; - } -} diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_healthoverlay.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_healthoverlay.gsc deleted file mode 100644 index 6e75ac6..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_healthoverlay.gsc +++ /dev/null @@ -1,276 +0,0 @@ -#include maps/mp/gametypes/_globallogic_player; - -init() //checked matches cerberus output -{ - precacheshader( "overlay_low_health" ); - level.healthoverlaycutoff = 0.55; - regentime = level.playerhealthregentime; - level.playerhealth_regularregendelay = regentime * 1000; - level.healthregendisabled = level.playerhealth_regularregendelay <= 0; - level thread onplayerconnect(); -} - -onplayerconnect() //checked matches cerberus output -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread onplayerspawned(); - player thread onplayerkilled(); - player thread onjoinedteam(); - player thread onjoinedspectators(); - player thread onplayerdisconnect(); - } -} - -onjoinedteam() //checked matches cerberus output -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "joined_team" ); - self notify( "end_healthregen" ); - } -} - -onjoinedspectators() //checked matches cerberus output -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "joined_spectators" ); - self notify( "end_healthregen" ); - } -} - -onplayerspawned() //checked matches cerberus output -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread playerhealthregen(); - } -} - -onplayerkilled() //checked matches cerberus output -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "killed_player" ); - self notify( "end_healthregen" ); - } -} - -onplayerdisconnect() //checked matches cerberus output -{ - self waittill( "disconnect" ); - self notify( "end_healthregen" ); -} - -playerhealthregen() //checked changed to match cerberus output -{ - self endon( "end_healthregen" ); - if ( self.health <= 0 ) - { - /* -/# - assert( !isalive( self ) ); -#/ - */ - return; - } - maxhealth = self.health; - oldhealth = maxhealth; - player = self; - health_add = 0; - regenrate = 0.1; - usetrueregen = 0; - veryhurt = 0; - player.breathingstoptime = -10000; - thread playerbreathingsound( maxhealth * 0.35 ); - thread playerheartbeatsound( maxhealth * 0.35 ); - lastsoundtime_recover = 0; - hurttime = 0; - newhealth = 0; - for ( ;; ) - { - wait 0.05; - if ( isDefined( player.regenrate ) ) - { - regenrate = player.regenrate; - usetrueregen = 1; - } - if ( player.health == maxhealth ) - { - veryhurt = 0; - self.atbrinkofdeath = 0; - continue; - } - if ( player.health <= 0 ) - { - return; - } - if ( isDefined( player.laststand ) && player.laststand ) - { - continue; - } - wasveryhurt = veryhurt; - ratio = player.health / maxhealth; - if ( ratio <= level.healthoverlaycutoff ) - { - veryhurt = 1; - self.atbrinkofdeath = 1; - if ( !wasveryhurt ) - { - hurttime = getTime(); - } - } - if ( player.health >= oldhealth ) - { - regentime = level.playerhealth_regularregendelay; - if ( player hasperk( "specialty_healthregen" ) ) - { - regentime = int( regentime / getDvarFloat( "perk_healthRegenMultiplier" ) ); - } - if ( ( getTime() - hurttime ) < regentime ) - { - continue; - } - else if ( level.healthregendisabled ) - { - continue; - } - else if ( ( getTime() - lastsoundtime_recover ) > regentime ) - { - lastsoundtime_recover = getTime(); - self notify( "snd_breathing_better" ); - } - if ( veryhurt ) - { - newhealth = ratio; - veryhurttime = 3000; - if ( player hasperk( "specialty_healthregen" ) ) - { - veryhurttime = int( veryhurttime / getDvarFloat( "perk_healthRegenMultiplier" ) ); - } - if ( getTime() > ( hurttime + veryhurttime ) ) - { - newhealth += regenrate; - } - } - else if ( usetrueregen ) - { - newhealth = ratio + regenrate; - } - else - { - newhealth = 1; - } - if ( newhealth >= 1 ) - { - self maps/mp/gametypes/_globallogic_player::resetattackerlist(); - newhealth = 1; - } - if ( newhealth <= 0 ) - { - return; - } - player setnormalhealth( newhealth ); - change = player.health - oldhealth; - if ( change > 0 ) - { - player decayplayerdamages( change ); - } - oldhealth = player.health; - continue; - } - oldhealth = player.health; - health_add = 0; - hurttime = getTime(); - player.breathingstoptime = hurttime + 6000; - } -} - -decayplayerdamages( decay ) //checked partially changed to match cerberus output //continues in for loops bad see github for more info -{ - if ( !isDefined( self.attackerdamage ) ) - { - return; - } - i = 0; - while ( i < self.attackerdamage.size ) - { - if ( !isDefined( self.attackerdamage[ i ] ) || !isDefined( self.attackerdamage[ i ].damage ) ) - { - i++; - continue; - } - self.attackerdamage[ i ].damage -= decay; - if ( self.attackerdamage[ i ].damage < 0 ) - { - self.attackerdamage[ i ].damage = 0; - } - i++; - } -} - -playerbreathingsound( healthcap ) //checked changed to match cerberus output -{ - self endon( "end_healthregen" ); - wait 2; - player = self; - for ( ;; ) - { - wait 0.2; - if ( player.health <= 0 ) - { - return; - } - if ( player.health >= healthcap ) - { - continue; - } - else if ( level.healthregendisabled && getTime() > player.breathingstoptime ) - { - continue; - } - player notify( "snd_breathing_hurt" ); - wait 0.784; - wait ( 0.1 + randomfloat( 0.8 ) ); - } -} - -playerheartbeatsound( healthcap ) //checked changed to match cerberus output -{ - self endon( "end_healthregen" ); - self.hearbeatwait = 0.2; - wait 2; - player = self; - for ( ;; ) - { - wait 0.2; - if ( player.health <= 0 ) - { - return; - } - if ( player.health >= healthcap ) - { - self.hearbeatwait = 0.3; - continue; - } - else if ( level.healthregendisabled && getTime() > player.breathingstoptime ) - { - self.hearbeatwait = 0.3; - continue; - } - player playlocalsound( "mpl_player_heartbeat" ); - wait self.hearbeatwait; - if ( self.hearbeatwait <= 0.6 ) - { - self.hearbeatwait += 0.1; - } - } -} - diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_hostmigration.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_hostmigration.gsc deleted file mode 100644 index 2fdd0a0..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_hostmigration.gsc +++ /dev/null @@ -1,571 +0,0 @@ -#include maps/mp/gametypes_zm/_hud; -#include maps/mp/gametypes_zm/_hud_util; -#include common_scripts/utility; -#include maps/mp/_utility; - -debug_script_structs() //dev call did not check -{ - /* -/# - if ( isDefined( level.struct ) ) - { - println( "*** Num structs " + level.struct.size ); - println( "" ); - i = 0; - while ( i < level.struct.size ) - { - struct = level.struct[ i ]; - if ( isDefined( struct.targetname ) ) - { - println( "---" + i + " : " + struct.targetname ); - i++; - continue; - } - else - { - println( "---" + i + " : " + "NONE" ); - } - i++; - } - } - else println( "*** No structs defined." ); -#/ - */ -} - -updatetimerpausedness() //checked matches cerberus output -{ - shouldbestopped = isDefined( level.hostmigrationtimer ); - if ( !level.timerstopped && shouldbestopped ) - { - level.timerstopped = 1; - level.timerpausetime = getTime(); - } - else if ( level.timerstopped && !shouldbestopped ) - { - level.timerstopped = 0; - level.discardtime += getTime() - level.timerpausetime; - } -} - -callback_hostmigrationsave() //checked matches cerberus output -{ -} - -callback_prehostmigrationsave() //checked matches cerberus output -{ - undo_link_changes(); - disablezombies(1); - if ( is_true( level._hm_should_pause_spawning ) ) - { - flag_set( "spawn_zombies" ); - } - for ( i = 0; i < level.players.size; i++ ) - { - level.players[ i ] enableinvulnerability(); - } -} - -pausetimer() //checked matches cerberus output -{ - level.migrationtimerpausetime = getTime(); -} - -resumetimer() //checked matches cerberus output -{ - level.discardtime += getTime() - level.migrationtimerpausetime; -} - -locktimer() //checked matches cerberus output -{ - level endon( "host_migration_begin" ); - level endon( "host_migration_end" ); - for ( ;; ) - { - currtime = getTime(); - wait 0.05; - if ( !level.timerstopped && isDefined( level.discardtime ) ) - { - level.discardtime += getTime() - currtime; - } - } -} - -callback_hostmigration() //checked changed to match cerberus output -{ - redo_link_changes(); - setslowmotion( 1, 1, 0 ); - makedvarserverinfo( "ui_guncycle", 0 ); - level.hostmigrationreturnedplayercount = 0; - if ( level.gameended ) - { - /* - /# - println("Migration starting at time " + GetTime() + ", but game has ended, so no countdown."); - #/ - */ - return; - } - sethostmigrationstatus(1); - level notify( "host_migration_begin" ); - for ( i = 0; i < level.players.size; i++ ) - { - if ( isdefined( level.hostmigration_link_entity_callback ) ) - { - if ( !isdefined( level.players[ i ]._host_migration_link_entity ) ) - { - level.players[i]._host_migration_link_entity = level.players[ i ] [[ level.hostmigration_link_entity_callback ]](); - } - } - level.players[ i ] thread hostmigrationtimerthink(); - } - if ( isdefined( level.hostmigration_ai_link_entity_callback ) ) - { - zombies = getaiarray(level.zombie_team); - if ( isdefined( zombies ) && zombies.size > 0 ) - { - foreach(zombie in zombies) - { - if ( !isdefined( zombie._host_migration_link_entity ) ) - { - zombie._host_migration_link_entity = zombie [[ level.hostmigration_ai_link_entity_callback ]](); - } - } - } - } - else if ( level.inprematchperiod ) - { - level waittill("prematch_over"); - } - /* - /# - println( "Migration starting at time " + GetTime() ); - #/ - */ - level.hostmigrationtimer = 1; - thread locktimer(); - zombies = getaiarray( level.zombie_team ); - if ( isdefined( zombies ) && zombies.size > 0 ) - { - foreach ( zombie in zombies ) - { - if ( isdefined(zombie._host_migration_link_entity ) ) - { - ent = spawn( "script_origin", zombie.origin ); - ent.angles = zombie.angles; - zombie linkto(ent); - ent linkto( zombie._host_migration_link_entity, "tag_origin", zombie._host_migration_link_entity worldtolocalcoords( ent.origin ), ent.angles + zombie._host_migration_link_entity.angles ); - zombie._host_migration_link_helper = ent; - zombie linkto( zombie._host_migration_link_helper ); - } - } - } - level endon( "host_migration_begin" ); - level._hm_should_pause_spawning = flag( "spawn_zombies" ); - if ( level._hm_should_pause_spawning ) - { - flag_clear( "spawn_zombies" ); - } - hostmigrationwait(); - foreach ( player in level.players ) - { - player thread post_migration_become_vulnerable(); - } - zombies = getaiarray( level.zombie_team ); - if ( isdefined( zombies ) && zombies.size > 0 ) - { - foreach ( zombie in zombies ) - { - if ( isdefined(zombie._host_migration_link_entity ) ) - { - zombie unlink(); - zombie._host_migration_link_helper delete(); - zombie._host_migration_link_helper = undefined; - zombie._host_migration_link_entity = undefined; - } - } - } - enablezombies(1); - if ( level._hm_should_pause_spawning ) - { - flag_set( "spawn_zombies" ); - } - level.hostmigrationtimer = undefined; - level._hm_should_pause_spawning = undefined; - sethostmigrationstatus( 0 ); - /* - /# - println("Migration finished at time " + GetTime()); - #/ - */ - level notify( "host_migration_end" ); -} - -post_migration_become_vulnerable() //checked matches cerberus output -{ - self endon( "disconnect" ); - wait( 3 ); - self disableinvulnerability(); -} - -matchstarttimerconsole_internal( counttime, matchstarttimer ) //checked matches cerberus output -{ - waittillframeend; - visionsetnaked( "mpIntro", 0 ); - level endon( "match_start_timer_beginning" ); - while ( counttime > 0 && !level.gameended ) - { - matchstarttimer thread maps/mp/gametypes_zm/_hud::fontpulse( level ); - wait ( matchstarttimer.inframes * 0.05 ); - matchstarttimer setvalue( counttime ); - counttime--; - wait ( 1 - ( matchstarttimer.inframes * 0.05 ) ); - } -} - -matchstarttimerconsole( type, duration ) //checked matches cerberus output -{ - level notify( "match_start_timer_beginning" ); - wait 0,05; - matchstarttext = createserverfontstring( "objective", 1.5 ); - matchstarttext setpoint( "CENTER", "CENTER", 0, -40 ); - matchstarttext.sort = 1001; - matchstarttext settext( game[ "strings" ][ "waiting_for_teams" ] ); - matchstarttext.foreground = 0; - matchstarttext.hidewheninmenu = 1; - matchstarttext settext( game[ "strings" ][ type ] ); - matchstarttimer = createserverfontstring( "objective", 2.2 ); - matchstarttimer setpoint( "CENTER", "CENTER", 0, 0 ); - matchstarttimer.sort = 1001; - matchstarttimer.color = ( 1, 1, 0 ); - matchstarttimer.foreground = 0; - matchstarttimer.hidewheninmenu = 1; - matchstarttimer maps/mp/gametypes_zm/_hud::fontpulseinit(); - counttime = int( duration ); - if ( counttime >= 2 ) - { - matchstarttimerconsole_internal( counttime, matchstarttimer ); - } - matchstarttimer destroyelem(); - matchstarttext destroyelem(); -} - -hostmigrationwait() //checked matches cerberus output may need to check order of operations -{ - level endon( "game_ended" ); - if ( level.hostmigrationreturnedplayercount < ( ( level.players.size * 2 ) / 3 ) ) - { - thread matchstarttimerconsole( "waiting_for_teams", 20 ); - hostmigrationwaitforplayers(); - } - level notify( "host_migration_countdown_begin" ); - thread matchstarttimerconsole( "match_starting_in", 5 ); - wait 5; -} - -hostmigrationwaitforplayers() //checked matches cerberus output -{ - level endon( "hostmigration_enoughplayers" ); - wait 15; -} - -hostmigrationtimerthink_internal() //checked matches cerberus output -{ - level endon( "host_migration_begin" ); - level endon( "host_migration_end" ); - self.hostmigrationcontrolsfrozen = 0; - while ( !isalive( self ) ) - { - self waittill( "spawned" ); - } - if ( isdefined( self._host_migration_link_entity ) ) - { - ent = spawn( "script_origin", self.origin ); - ent.angles = self.angles; - self linkto( ent ); - ent linkto( self._host_migration_link_entity, "tag_origin", self._host_migration_link_entity worldtolocalcoords( ent.origin ), ent.angles + self._host_migration_link_entity.angles ); - self._host_migration_link_helper = ent; - /* - /# - println( "Linking player to ent " + self._host_migration_link_entity.targetname ); - #/ - */ - } - self.hostmigrationcontrolsfrozen = 1; - self freezecontrols( 1 ); - level waittill( "host_migration_end" ); -} - -hostmigrationtimerthink() //checked matches cerberus output -{ - self endon( "disconnect" ); - level endon( "host_migration_begin" ); - hostmigrationtimerthink_internal(); - if ( self.hostmigrationcontrolsfrozen ) - { - self freezecontrols( 0 ); - self.hostmigrationcontrolsfrozen = 0; - /* - /# - println(" Host migration unfreeze controls"); - #/ - */ - } - if ( isdefined( self._host_migration_link_entity ) ) - { - self unlink(); - self._host_migration_link_helper delete(); - self._host_migration_link_helper = undefined; - if ( isdefined( self._host_migration_link_entity._post_host_migration_thread ) ) - { - self thread [[ self._host_migration_link_entity._post_host_migration_thread ]]( self._host_migration_link_entity ); - } - self._host_migration_link_entity = undefined; - } -} - -waittillhostmigrationdone() //checked matches cerberus output -{ - if ( !isDefined( level.hostmigrationtimer ) ) - { - return 0; - } - starttime = getTime(); - level waittill( "host_migration_end" ); - return getTime() - starttime; -} - -waittillhostmigrationstarts( duration ) //checked matches cerberus output -{ - if ( isDefined( level.hostmigrationtimer ) ) - { - return; - } - level endon( "host_migration_begin" ); - wait duration; -} - -waitlongdurationwithhostmigrationpause( duration ) //checked matches cerberus output may need to check order of operations -{ - if ( duration == 0 ) - { - return; - } - /* -/# - assert( duration > 0 ); -#/ - */ - starttime = getTime(); - endtime = getTime() + ( duration * 1000 ); - while ( getTime() < endtime ) - { - waittillhostmigrationstarts( ( endtime - getTime() ) / 1000 ); - if ( isDefined( level.hostmigrationtimer ) ) - { - timepassed = waittillhostmigrationdone(); - endtime += timepassed; - } - } - /* -/# - if ( getTime() != endtime ) - { - println( "SCRIPT WARNING: gettime() = " + getTime() + " NOT EQUAL TO endtime = " + endtime ); -#/ - } - */ - waittillhostmigrationdone(); - return getTime() - starttime; -} - -waitlongdurationwithhostmigrationpauseemp( duration ) //checked matches cerberus output may need to check order of operations -{ - if ( duration == 0 ) - { - return; - } - /* -/# - assert( duration > 0 ); -#/ - */ - starttime = getTime(); - empendtime = getTime() + ( duration * 1000 ); - level.empendtime = empendtime; - while ( getTime() < empendtime ) - { - waittillhostmigrationstarts( ( empendtime - getTime() ) / 1000 ); - if ( isDefined( level.hostmigrationtimer ) ) - { - timepassed = waittillhostmigrationdone(); - if ( isDefined( empendtime ) ) - { - empendtime += timepassed; - } - } - } - /* -/# - if ( getTime() != empendtime ) - { - println( "SCRIPT WARNING: gettime() = " + getTime() + " NOT EQUAL TO empendtime = " + empendtime ); -#/ - } - */ - waittillhostmigrationdone(); - level.empendtime = undefined; - return getTime() - starttime; -} - -waitlongdurationwithgameendtimeupdate( duration ) //checked matches cerberus output may need to check order of operations -{ - if ( duration == 0 ) - { - return; - } - /* -/# - assert( duration > 0 ); -#/ - */ - starttime = getTime(); - endtime = getTime() + ( duration * 1000 ); - while ( getTime() < endtime ) - { - waittillhostmigrationstarts( ( endtime - getTime() ) / 1000 ); - while ( isDefined( level.hostmigrationtimer ) ) - { - endtime += 1000; - setgameendtime( int( endtime ) ); - wait 1; - } - } - /* -/# - if ( getTime() != endtime ) - { - println( "SCRIPT WARNING: gettime() = " + getTime() + " NOT EQUAL TO endtime = " + endtime ); -#/ - } - */ - while ( isDefined( level.hostmigrationtimer ) ) - { - endtime += 1000; - setgameendtime( int( endtime ) ); - wait 1; - } - return getTime() - starttime; -} - -find_alternate_player_place( v_origin, min_radius, max_radius, max_height, ignore_targetted_nodes ) //checked partially changed to match cerberus output //continue in for loop bad see github for more info -{ - found_node = undefined; - a_nodes = getnodesinradiussorted( v_origin, max_radius, min_radius, max_height, "pathnodes" ); - if ( isdefined( a_nodes) && a_nodes.size > 0 ) - { - a_player_volumes = getentarray( "player_volume", "script_noteworthy" ); - index = a_nodes.size - 1; - i = index; - while ( i >= 0; ) - { - n_node = a_nodes[i]; - if ( ignore_targetted_nodes == 1 ) - { - if ( isdefined( n_node.target ) ) - { - i--; - continue; - } - } - if ( !positionwouldtelefrag( n_node.origin ) ) - { - if ( maps/mp/zombies/_zm_utility::check_point_in_enabled_zone( n_node.origin, 1, a_player_volumes ) ) - { - v_start = ( n_node.origin[ 0 ], n_node.origin[ 1 ], n_node.origin[ 2 ] + 30 ); - v_end = ( n_node.origin[ 0 ], n_node.origin[ 1 ], n_node.origin[ 2 ] - 30 ); - trace = bullettrace( v_start, v_end, 0, undefined ); - if ( trace["fraction"] < 1 ) - { - override_abort = 0; - if ( isdefined( level._chugabud_reject_node_override_func ) ) - { - override_abort = [[ level._chugabud_reject_node_override_func ]]( v_origin, n_node ); - } - if ( !override_abort ) - { - found_node = n_node; - break; - } - } - } - } - i--; - } - } - return found_node; -} - -hostmigration_put_player_in_better_place() //checked changed to match cerberus output -{ - spawnpoint = undefined; - spawnpoint = find_alternate_player_place( self.origin, 50, 150, 64, 1 ); - if ( !isdefined(spawnpoint ) ) - { - spawnpoint = find_alternate_player_place( self.origin, 150, 400, 64, 1 ); - } - if ( !isdefined(spawnpoint ) ) - { - spawnpoint = find_alternate_player_place( self.origin, 50, 400, 256, 0 ); - } - if ( !isdefined( spawnpoint ) ) - { - spawnpoint = maps/mp/zombies/_zm::check_for_valid_spawn_near_team( self, 1 ); - } - if ( !isdefined( spawnpoint ) ) - { - match_string = ""; - location = level.scr_zm_map_start_location; - if ( location == "default" || location == "" && isdefined(level.default_start_location ) ) - { - location = level.default_start_location; - } - match_string = level.scr_zm_ui_gametype + "_" + location; - spawnpoints = []; - structs = getstructarray( "initial_spawn", "script_noteworthy" ); - if ( isdefined( structs ) ) - { - foreach ( struct in structs ) - { - if ( isdefined( struct.script_string ) ) - { - tokens = strtok( struct.script_string, " " ); - i = 0; - while ( i < tokens.size ) - { - if ( token == match_string ) - { - spawnpoints[ spawnpoints.size ] = struct; - } - i++; - } - } - } - } - else if ( !isdefined(spawnpoints) || spawnpoints.size == 0 ) - { - spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); - } - /* - /# - assert( isdefined( spawnpoints ), "Could not find initial spawn points!" ); - #/ - */ - spawnpoint = maps/mp/zombies/_zm::getfreespawnpoint( spawnpoints, self ); - } - if ( isdefined( spawnpoint ) ) - { - self setorigin( spawnpoint.origin ); - } -} - diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_hud.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_hud.gsc deleted file mode 100644 index 80198e4..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_hud.gsc +++ /dev/null @@ -1,161 +0,0 @@ - -init() //checked changed to match cerberus output -{ - precacheshader( "progress_bar_bg" ); - precacheshader( "progress_bar_fg" ); - precacheshader( "progress_bar_fill" ); - precacheshader( "score_bar_bg" ); - level.uiparent = spawnstruct(); - level.uiparent.horzalign = "left"; - level.uiparent.vertalign = "top"; - level.uiparent.alignx = "left"; - level.uiparent.aligny = "top"; - level.uiparent.x = 0; - level.uiparent.y = 0; - level.uiparent.width = 0; - level.uiparent.height = 0; - level.uiparent.children = []; - level.fontheight = 12; - foreach ( team in level.teams ) - { - level.hud[ team ] = spawnstruct(); - } - level.primaryprogressbary = -61; - level.primaryprogressbarx = 0; - level.primaryprogressbarheight = 9; - level.primaryprogressbarwidth = 120; - level.primaryprogressbartexty = -75; - level.primaryprogressbartextx = 0; - level.primaryprogressbarfontsize = 1.4; - level.primaryprogressbarx_ss = 20; - level.primaryprogressbartextx_ss = 20; - level.primaryprogressbary_ss = 30; - level.primaryprogressbartexty_ss = 33; - level.primaryprogressbarheight_ss = 2; - level.secondaryprogressbary = -85; - level.secondaryprogressbarx = 0; - level.secondaryprogressbarheight = 9; - level.secondaryprogressbarwidth = 120; - level.secondaryprogressbartexty = -100; - level.secondaryprogressbartextx = 0; - level.secondaryprogressbarfontsize = 1.4; - level.secondaryprogressbarx_ss = 20; - level.secondaryprogressbartextx_ss = 20; - level.secondaryprogressbary_ss = 15; - level.secondaryprogressbartexty_ss = 0; - level.secondaryprogressbarheight_ss = 2; - level.teamprogressbary = 32; - level.teamprogressbarheight = 14; - level.teamprogressbarwidth = 192; - level.teamprogressbartexty = 8; - level.teamprogressbarfontsize = 1.65; - setdvar("ui_generic_status_bar", 0); - level.lowertextyalign = "BOTTOM"; - level.lowertexty = -42; - level.lowertextfontsize = 1.4; - level.lowertextyalign_ss = "CENTER"; - level.lowertexty_ss = 40; - level.lowertextfontsize_ss = 1.4; -} - -fontpulseinit() //checked matches cerberus output -{ - self.basefontscale = self.fontscale; - self.maxfontscale = self.fontscale * 2; - self.inframes = 1.5; - self.outframes = 3; -} - -fontpulse( player ) //checked matches cerberus output -{ - self notify( "fontPulse" ); - self endon( "fontPulse" ); - self endon( "death" ); - player endon( "disconnect" ); - player endon( "joined_team" ); - player endon( "joined_spectators" ); - if ( self.outframes == 0 ) - { - self.fontscale = 0.01; - } - else - { - self.fontscale = self.fontscale; - } - if ( self.inframes > 0 ) - { - self changefontscaleovertime( self.inframes * 0.05 ); - self.fontscale = self.maxfontscale; - wait ( self.inframes * 0.05 ); - } - else - { - self.fontscale = self.maxfontscale; - self.alpha = 0; - self fadeovertime( self.outframes * 0.05 ); - self.alpha = 1; - } - if ( self.outframes > 0 ) - { - self changefontscaleovertime( self.outframes * 0.05 ); - self.fontscale = self.basefontscale; - } -} - -fadetoblackforxsec( startwait, blackscreenwait, fadeintime, fadeouttime, shadername ) //checked matches cerberus output -{ - wait startwait; - if ( !isDefined( self ) ) - { - return; - } - if ( !isDefined( self.blackscreen ) ) - { - self.blackscreen = newclienthudelem( self ); - } - self.blackscreen.x = 0; - self.blackscreen.y = 0; - self.blackscreen.horzalign = "fullscreen"; - self.blackscreen.vertalign = "fullscreen"; - self.blackscreen.foreground = 0; - self.blackscreen.hidewhendead = 0; - self.blackscreen.hidewheninmenu = 1; - self.blackscreen.immunetodemogamehudsettings = 1; - self.blackscreen.sort = 50; - if ( isDefined( shadername ) ) - { - self.blackscreen setshader( shadername, 640, 480 ); - } - else - { - self.blackscreen setshader( "black", 640, 480 ); - } - self.blackscreen.alpha = 0; - if ( fadeintime > 0 ) - { - self.blackscreen fadeovertime( fadeintime ); - } - self.blackscreen.alpha = 1; - wait fadeintime; - if ( !isDefined( self.blackscreen ) ) - { - return; - } - wait blackscreenwait; - if ( !isDefined( self.blackscreen ) ) - { - return; - } - if ( fadeouttime > 0 ) - { - self.blackscreen fadeovertime( fadeouttime ); - } - self.blackscreen.alpha = 0; - wait fadeouttime; - if ( isDefined( self.blackscreen ) ) - { - self.blackscreen destroy(); - self.blackscreen = undefined; - } -} - diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_hud_message.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_hud_message.gsc deleted file mode 100644 index 2425d13..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_hud_message.gsc +++ /dev/null @@ -1,1359 +0,0 @@ -#include maps/mp/_utility; -#include maps/mp/gametypes_zm/_globallogic_audio; -#include maps/mp/_music; -#include maps/mp/gametypes_zm/_hud_message; -#include maps/mp/gametypes_zm/_hud_util; - -init() -{ - precachestring( &"MENU_POINTS" ); - precachestring( &"MP_FIRSTPLACE_NAME" ); - precachestring( &"MP_SECONDPLACE_NAME" ); - precachestring( &"MP_THIRDPLACE_NAME" ); - precachestring( &"MP_WAGER_PLACE_NAME" ); - precachestring( &"MP_MATCH_BONUS_IS" ); - precachestring( &"MP_CODPOINTS_MATCH_BONUS_IS" ); - precachestring( &"MP_WAGER_WINNINGS_ARE" ); - precachestring( &"MP_WAGER_SIDEBET_WINNINGS_ARE" ); - precachestring( &"MP_WAGER_IN_THE_MONEY" ); - precachestring( &"faction_popup" ); - game[ "strings" ][ "draw" ] = &"MP_DRAW_CAPS"; - game[ "strings" ][ "round_draw" ] = &"MP_ROUND_DRAW_CAPS"; - game[ "strings" ][ "round_win" ] = &"MP_ROUND_WIN_CAPS"; - game[ "strings" ][ "round_loss" ] = &"MP_ROUND_LOSS_CAPS"; - game[ "strings" ][ "victory" ] = &"MP_VICTORY_CAPS"; - game[ "strings" ][ "defeat" ] = &"MP_DEFEAT_CAPS"; - game[ "strings" ][ "game_over" ] = &"MP_GAME_OVER_CAPS"; - game[ "strings" ][ "halftime" ] = &"MP_HALFTIME_CAPS"; - game[ "strings" ][ "overtime" ] = &"MP_OVERTIME_CAPS"; - game[ "strings" ][ "roundend" ] = &"MP_ROUNDEND_CAPS"; - game[ "strings" ][ "intermission" ] = &"MP_INTERMISSION_CAPS"; - game[ "strings" ][ "side_switch" ] = &"MP_SWITCHING_SIDES_CAPS"; - game[ "strings" ][ "match_bonus" ] = &"MP_MATCH_BONUS_IS"; - game[ "strings" ][ "codpoints_match_bonus" ] = &"MP_CODPOINTS_MATCH_BONUS_IS"; - game[ "strings" ][ "wager_winnings" ] = &"MP_WAGER_WINNINGS_ARE"; - game[ "strings" ][ "wager_sidebet_winnings" ] = &"MP_WAGER_SIDEBET_WINNINGS_ARE"; - game[ "strings" ][ "wager_inthemoney" ] = &"MP_WAGER_IN_THE_MONEY_CAPS"; - game[ "strings" ][ "wager_loss" ] = &"MP_WAGER_LOSS_CAPS"; - game[ "strings" ][ "wager_topwinners" ] = &"MP_WAGER_TOPWINNERS"; - game[ "menu_endgameupdate" ] = "endgameupdate"; - precachemenu( game[ "menu_endgameupdate" ] ); - level thread onplayerconnect(); -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread hintmessagedeaththink(); - player thread lowermessagethink(); - player thread initnotifymessage(); - player thread initcustomgametypeheader(); - } -} - -initcustomgametypeheader() -{ - font = "default"; - titlesize = 2,5; - self.customgametypeheader = createfontstring( font, titlesize ); - self.customgametypeheader setpoint( "TOP", undefined, 0, 30 ); - self.customgametypeheader.glowalpha = 1; - self.customgametypeheader.hidewheninmenu = 1; - self.customgametypeheader.archived = 0; - self.customgametypeheader.color = ( 1, 1, 0,6 ); - self.customgametypeheader.alpha = 1; - titlesize = 2; - self.customgametypesubheader = createfontstring( font, titlesize ); - self.customgametypesubheader setparent( self.customgametypeheader ); - self.customgametypesubheader setpoint( "TOP", "BOTTOM", 0, 0 ); - self.customgametypesubheader.glowalpha = 1; - self.customgametypesubheader.hidewheninmenu = 1; - self.customgametypesubheader.archived = 0; - self.customgametypesubheader.color = ( 1, 1, 0,6 ); - self.customgametypesubheader.alpha = 1; -} - -hintmessage( hinttext, duration ) -{ - notifydata = spawnstruct(); - notifydata.notifytext = hinttext; - notifydata.duration = duration; - notifymessage( notifydata ); -} - -hintmessageplayers( players, hinttext, duration ) -{ - notifydata = spawnstruct(); - notifydata.notifytext = hinttext; - notifydata.duration = duration; - i = 0; - while ( i < players.size ) - { - players[ i ] notifymessage( notifydata ); - i++; - } -} - -showinitialfactionpopup( team ) -{ - self luinotifyevent( &"faction_popup", 1, game[ "strings" ][ team + "_name" ] ); - maps/mp/gametypes_zm/_hud_message::oldnotifymessage( undefined, undefined, undefined, undefined ); -} - -initnotifymessage() -{ - if ( !sessionmodeiszombiesgame() ) - { - if ( self issplitscreen() ) - { - titlesize = 2; - textsize = 1,4; - iconsize = 24; - font = "extrabig"; - point = "TOP"; - relativepoint = "BOTTOM"; - yoffset = 30; - xoffset = 30; - } - else - { - titlesize = 2,5; - textsize = 1,75; - iconsize = 30; - font = "extrabig"; - point = "TOP"; - relativepoint = "BOTTOM"; - yoffset = 0; - xoffset = 0; - } - } - else if ( self issplitscreen() ) - { - titlesize = 2; - textsize = 1,4; - iconsize = 24; - font = "extrabig"; - point = "TOP"; - relativepoint = "BOTTOM"; - yoffset = 30; - xoffset = 30; - } - else - { - titlesize = 2,5; - textsize = 1,75; - iconsize = 30; - font = "extrabig"; - point = "BOTTOM LEFT"; - relativepoint = "TOP"; - yoffset = 0; - xoffset = 0; - } - self.notifytitle = createfontstring( font, titlesize ); - self.notifytitle setpoint( point, undefined, xoffset, yoffset ); - self.notifytitle.glowalpha = 1; - self.notifytitle.hidewheninmenu = 1; - self.notifytitle.archived = 0; - self.notifytitle.alpha = 0; - self.notifytext = createfontstring( font, textsize ); - self.notifytext setparent( self.notifytitle ); - self.notifytext setpoint( point, relativepoint, 0, 0 ); - self.notifytext.glowalpha = 1; - self.notifytext.hidewheninmenu = 1; - self.notifytext.archived = 0; - self.notifytext.alpha = 0; - self.notifytext2 = createfontstring( font, textsize ); - self.notifytext2 setparent( self.notifytitle ); - self.notifytext2 setpoint( point, relativepoint, 0, 0 ); - self.notifytext2.glowalpha = 1; - self.notifytext2.hidewheninmenu = 1; - self.notifytext2.archived = 0; - self.notifytext2.alpha = 0; - self.notifyicon = createicon( "white", iconsize, iconsize ); - self.notifyicon setparent( self.notifytext2 ); - self.notifyicon setpoint( point, relativepoint, 0, 0 ); - self.notifyicon.hidewheninmenu = 1; - self.notifyicon.archived = 0; - self.notifyicon.alpha = 0; - self.doingnotify = 0; - self.notifyqueue = []; -} - -oldnotifymessage( titletext, notifytext, iconname, glowcolor, sound, duration ) -{ - if ( level.wagermatch && !level.teambased ) - { - return; - } - notifydata = spawnstruct(); - notifydata.titletext = titletext; - notifydata.notifytext = notifytext; - notifydata.iconname = iconname; - notifydata.sound = sound; - notifydata.duration = duration; - self.startmessagenotifyqueue[ self.startmessagenotifyqueue.size ] = notifydata; - self notify( "received award" ); -} - -notifymessage( notifydata ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self.messagenotifyqueue[ self.messagenotifyqueue.size ] = notifydata; - self notify( "received award" ); -} - -shownotifymessage( notifydata, duration ) -{ - self endon( "disconnect" ); - self.doingnotify = 1; - waitrequirevisibility( 0 ); - self notify( "notifyMessageBegin" ); - self thread resetoncancel(); - if ( isDefined( notifydata.sound ) ) - { - self playlocalsound( notifydata.sound ); - } - if ( isDefined( notifydata.musicstate ) ) - { - self maps/mp/_music::setmusicstate( notifydata.music ); - } - if ( isDefined( notifydata.leadersound ) ) - { - self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( notifydata.leadersound ); - } - if ( isDefined( notifydata.glowcolor ) ) - { - glowcolor = notifydata.glowcolor; - } - else - { - glowcolor = ( 1, 1, 1 ); - } - if ( isDefined( notifydata.color ) ) - { - color = notifydata.color; - } - else - { - color = ( 1, 1, 1 ); - } - anchorelem = self.notifytitle; - if ( isDefined( notifydata.titletext ) ) - { - if ( isDefined( notifydata.titlelabel ) ) - { - self.notifytitle.label = notifydata.titlelabel; - } - else - { - self.notifytitle.label = &""; - } - if ( isDefined( notifydata.titlelabel ) && !isDefined( notifydata.titleisstring ) ) - { - self.notifytitle setvalue( notifydata.titletext ); - } - else - { - self.notifytitle settext( notifydata.titletext ); - } - self.notifytitle setcod7decodefx( 200, int( duration * 1000 ), 600 ); - self.notifytitle.glowcolor = glowcolor; - self.notifytitle.color = color; - self.notifytitle.alpha = 1; - } - if ( isDefined( notifydata.notifytext ) ) - { - if ( isDefined( notifydata.textlabel ) ) - { - self.notifytext.label = notifydata.textlabel; - } - else - { - self.notifytext.label = &""; - } - if ( isDefined( notifydata.textlabel ) && !isDefined( notifydata.textisstring ) ) - { - self.notifytext setvalue( notifydata.notifytext ); - } - else - { - self.notifytext settext( notifydata.notifytext ); - } - self.notifytext setcod7decodefx( 100, int( duration * 1000 ), 600 ); - self.notifytext.glowcolor = glowcolor; - self.notifytext.color = color; - self.notifytext.alpha = 1; - anchorelem = self.notifytext; - } - if ( isDefined( notifydata.notifytext2 ) ) - { - if ( self issplitscreen() ) - { - if ( isDefined( notifydata.text2label ) ) - { - self iprintlnbold( notifydata.text2label, notifydata.notifytext2 ); - } - else - { - self iprintlnbold( notifydata.notifytext2 ); - } - } - else - { - self.notifytext2 setparent( anchorelem ); - if ( isDefined( notifydata.text2label ) ) - { - self.notifytext2.label = notifydata.text2label; - } - else - { - self.notifytext2.label = &""; - } - self.notifytext2 settext( notifydata.notifytext2 ); - self.notifytext2 setpulsefx( 100, int( duration * 1000 ), 1000 ); - self.notifytext2.glowcolor = glowcolor; - self.notifytext2.color = color; - self.notifytext2.alpha = 1; - anchorelem = self.notifytext2; - } - } - if ( isDefined( notifydata.iconname ) ) - { - iconwidth = 60; - iconheight = 60; - if ( isDefined( notifydata.iconwidth ) ) - { - iconwidth = notifydata.iconwidth; - } - if ( isDefined( notifydata.iconheight ) ) - { - iconheight = notifydata.iconheight; - } - self.notifyicon setparent( anchorelem ); - self.notifyicon setshader( notifydata.iconname, iconwidth, iconheight ); - self.notifyicon.alpha = 0; - self.notifyicon fadeovertime( 1 ); - self.notifyicon.alpha = 1; - waitrequirevisibility( duration ); - self.notifyicon fadeovertime( 0,75 ); - self.notifyicon.alpha = 0; - } - else - { - waitrequirevisibility( duration ); - } - self notify( "notifyMessageDone" ); - self.doingnotify = 0; -} - -waitrequirevisibility( waittime ) -{ - interval = 0,05; - while ( !self canreadtext() ) - { - wait interval; - } - while ( waittime > 0 ) - { - wait interval; - if ( self canreadtext() ) - { - waittime -= interval; - } - } -} - -canreadtext() -{ - return 1; -} - -resetondeath() -{ - self endon( "notifyMessageDone" ); - self endon( "disconnect" ); - level endon( "game_ended" ); - self waittill( "death" ); - resetnotify(); -} - -resetoncancel() -{ - self notify( "resetOnCancel" ); - self endon( "resetOnCancel" ); - self endon( "notifyMessageDone" ); - self endon( "disconnect" ); - level waittill( "cancel_notify" ); - resetnotify(); -} - -resetnotify() -{ - self.notifytitle.alpha = 0; - self.notifytext.alpha = 0; - self.notifyicon.alpha = 0; - self.doingnotify = 0; -} - -hintmessagedeaththink() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "death" ); - if ( isDefined( self.hintmessage ) ) - { - self.hintmessage destroyelem(); - } - } -} - -lowermessagethink() -{ - self endon( "disconnect" ); - self.lowermessage = createfontstring( "default", level.lowertextfontsize ); - self.lowermessage setpoint( "CENTER", level.lowertextyalign, 0, level.lowertexty ); - self.lowermessage settext( "" ); - self.lowermessage.archived = 0; - timerfontsize = 1,5; - if ( self issplitscreen() ) - { - timerfontsize = 1,4; - } - self.lowertimer = createfontstring( "default", timerfontsize ); - self.lowertimer setparent( self.lowermessage ); - self.lowertimer setpoint( "TOP", "BOTTOM", 0, 0 ); - self.lowertimer settext( "" ); - self.lowertimer.archived = 0; -} - -setmatchscorehudelemforteam( team ) -{ - if ( level.roundscorecarry ) - { - self setvalue( getteamscore( team ) ); - } - else - { - self setvalue( getroundswon( team ) ); - } -} - -teamoutcomenotify( winner, isround, endreasontext ) -{ - self endon( "disconnect" ); - self notify( "reset_outcome" ); - team = self.pers[ "team" ]; - while ( isDefined( team ) && team == "spectator" ) - { - i = 0; - while ( i < level.players.size ) - { - if ( self.currentspectatingclient == level.players[ i ].clientid ) - { - team = level.players[ i ].pers[ "team" ]; - break; - } - else - { - i++; - } - } - } - if ( !isDefined( team ) || !isDefined( level.teams[ team ] ) ) - { - team = "allies"; - } - while ( self.doingnotify ) - { - wait 0,05; - } - self endon( "reset_outcome" ); - headerfont = "extrabig"; - font = "default"; - if ( self issplitscreen() ) - { - titlesize = 2; - textsize = 1,5; - iconsize = 30; - spacing = 10; - } - else - { - titlesize = 3; - textsize = 2; - iconsize = 70; - spacing = 25; - } - duration = 60000; - outcometitle = createfontstring( headerfont, titlesize ); - outcometitle setpoint( "TOP", undefined, 0, 30 ); - outcometitle.glowalpha = 1; - outcometitle.hidewheninmenu = 0; - outcometitle.archived = 0; - outcometext = createfontstring( font, 2 ); - outcometext setparent( outcometitle ); - outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); - outcometext.glowalpha = 1; - outcometext.hidewheninmenu = 0; - outcometext.archived = 0; - if ( winner == "halftime" ) - { - outcometitle settext( game[ "strings" ][ "halftime" ] ); - outcometitle.color = ( 1, 1, 1 ); - winner = "allies"; - } - else if ( winner == "intermission" ) - { - outcometitle settext( game[ "strings" ][ "intermission" ] ); - outcometitle.color = ( 1, 1, 1 ); - winner = "allies"; - } - else if ( winner == "roundend" ) - { - outcometitle settext( game[ "strings" ][ "roundend" ] ); - outcometitle.color = ( 1, 1, 1 ); - winner = "allies"; - } - else if ( winner == "overtime" ) - { - outcometitle settext( game[ "strings" ][ "overtime" ] ); - outcometitle.color = ( 1, 1, 1 ); - winner = "allies"; - } - else if ( winner == "tie" ) - { - if ( isround ) - { - outcometitle settext( game[ "strings" ][ "round_draw" ] ); - } - else - { - outcometitle settext( game[ "strings" ][ "draw" ] ); - } - outcometitle.color = ( 0,29, 0,61, 0,7 ); - winner = "allies"; - } - else if ( isDefined( self.pers[ "team" ] ) && winner == team ) - { - if ( isround ) - { - outcometitle settext( game[ "strings" ][ "round_win" ] ); - } - else - { - outcometitle settext( game[ "strings" ][ "victory" ] ); - } - outcometitle.color = ( 0,42, 0,68, 0,46 ); - } - else - { - if ( isround ) - { - outcometitle settext( game[ "strings" ][ "round_loss" ] ); - } - else - { - outcometitle settext( game[ "strings" ][ "defeat" ] ); - } - outcometitle.color = ( 0,73, 0,29, 0,19 ); - } - outcometext settext( endreasontext ); - outcometitle setcod7decodefx( 200, duration, 600 ); - outcometext setpulsefx( 100, duration, 1000 ); - iconspacing = 100; - currentx = ( ( level.teamcount - 1 ) * -1 * iconspacing ) / 2; - teamicons = []; - teamicons[ team ] = createicon( game[ "icons" ][ team ], iconsize, iconsize ); - teamicons[ team ] setparent( outcometext ); - teamicons[ team ] setpoint( "TOP", "BOTTOM", currentx, spacing ); - teamicons[ team ].hidewheninmenu = 0; - teamicons[ team ].archived = 0; - teamicons[ team ].alpha = 0; - teamicons[ team ] fadeovertime( 0,5 ); - teamicons[ team ].alpha = 1; - currentx += iconspacing; - _a607 = level.teams; - _k607 = getFirstArrayKey( _a607 ); - while ( isDefined( _k607 ) ) - { - enemyteam = _a607[ _k607 ]; - if ( team == enemyteam ) - { - } - else - { - teamicons[ enemyteam ] = createicon( game[ "icons" ][ enemyteam ], iconsize, iconsize ); - teamicons[ enemyteam ] setparent( outcometext ); - teamicons[ enemyteam ] setpoint( "TOP", "BOTTOM", currentx, spacing ); - teamicons[ enemyteam ].hidewheninmenu = 0; - teamicons[ enemyteam ].archived = 0; - teamicons[ enemyteam ].alpha = 0; - teamicons[ enemyteam ] fadeovertime( 0,5 ); - teamicons[ enemyteam ].alpha = 1; - currentx += iconspacing; - } - _k607 = getNextArrayKey( _a607, _k607 ); - } - teamscores = []; - teamscores[ team ] = createfontstring( font, titlesize ); - teamscores[ team ] setparent( teamicons[ team ] ); - teamscores[ team ] setpoint( "TOP", "BOTTOM", 0, spacing ); - teamscores[ team ].glowalpha = 1; - if ( isround ) - { - teamscores[ team ] setvalue( getteamscore( team ) ); - } - else - { - teamscores[ team ] [[ level.setmatchscorehudelemforteam ]]( team ); - } - teamscores[ team ].hidewheninmenu = 0; - teamscores[ team ].archived = 0; - teamscores[ team ] setpulsefx( 100, duration, 1000 ); - _a641 = level.teams; - _k641 = getFirstArrayKey( _a641 ); - while ( isDefined( _k641 ) ) - { - enemyteam = _a641[ _k641 ]; - if ( team == enemyteam ) - { - } - else - { - teamscores[ enemyteam ] = createfontstring( headerfont, titlesize ); - teamscores[ enemyteam ] setparent( teamicons[ enemyteam ] ); - teamscores[ enemyteam ] setpoint( "TOP", "BOTTOM", 0, spacing ); - teamscores[ enemyteam ].glowalpha = 1; - if ( isround ) - { - teamscores[ enemyteam ] setvalue( getteamscore( enemyteam ) ); - } - else - { - teamscores[ enemyteam ] [[ level.setmatchscorehudelemforteam ]]( enemyteam ); - } - teamscores[ enemyteam ].hidewheninmenu = 0; - teamscores[ enemyteam ].archived = 0; - teamscores[ enemyteam ] setpulsefx( 100, duration, 1000 ); - } - _k641 = getNextArrayKey( _a641, _k641 ); - } - font = "objective"; - matchbonus = undefined; - if ( isDefined( self.matchbonus ) ) - { - matchbonus = createfontstring( font, 2 ); - matchbonus setparent( outcometext ); - matchbonus setpoint( "TOP", "BOTTOM", 0, iconsize + ( spacing * 3 ) + teamscores[ team ].height ); - matchbonus.glowalpha = 1; - matchbonus.hidewheninmenu = 0; - matchbonus.archived = 0; - matchbonus.label = game[ "strings" ][ "match_bonus" ]; - matchbonus setvalue( self.matchbonus ); - } - self thread resetoutcomenotify( teamicons, teamscores, outcometitle, outcometext ); -} - -teamoutcomenotifyzombie( winner, isround, endreasontext ) -{ - self endon( "disconnect" ); - self notify( "reset_outcome" ); - team = self.pers[ "team" ]; - while ( isDefined( team ) && team == "spectator" ) - { - i = 0; - while ( i < level.players.size ) - { - if ( self.currentspectatingclient == level.players[ i ].clientid ) - { - team = level.players[ i ].pers[ "team" ]; - break; - } - else - { - i++; - } - } - } - if ( !isDefined( team ) || !isDefined( level.teams[ team ] ) ) - { - team = "allies"; - } - while ( self.doingnotify ) - { - wait 0,05; - } - self endon( "reset_outcome" ); - if ( self issplitscreen() ) - { - titlesize = 2; - spacing = 10; - font = "default"; - } - else - { - titlesize = 3; - spacing = 50; - font = "objective"; - } - outcometitle = createfontstring( font, titlesize ); - outcometitle setpoint( "TOP", undefined, 0, spacing ); - outcometitle.glowalpha = 1; - outcometitle.hidewheninmenu = 0; - outcometitle.archived = 0; - outcometitle settext( endreasontext ); - outcometitle setpulsefx( 100, 60000, 1000 ); - self thread resetoutcomenotify( undefined, undefined, outcometitle ); -} - -outcomenotify( winner, isroundend, endreasontext ) -{ - self endon( "disconnect" ); - self notify( "reset_outcome" ); - while ( self.doingnotify ) - { - wait 0,05; - } - self endon( "reset_outcome" ); - headerfont = "extrabig"; - font = "default"; - if ( self issplitscreen() ) - { - titlesize = 2; - winnersize = 1,5; - othersize = 1,5; - iconsize = 30; - spacing = 10; - } - else - { - titlesize = 3; - winnersize = 2; - othersize = 1,5; - iconsize = 30; - spacing = 20; - } - duration = 60000; - players = level.placement[ "all" ]; - outcometitle = createfontstring( headerfont, titlesize ); - outcometitle setpoint( "TOP", undefined, 0, spacing ); - if ( !maps/mp/_utility::isoneround() && !isroundend ) - { - outcometitle settext( game[ "strings" ][ "game_over" ] ); - } - else - { - if ( isDefined( players[ 1 ] ) && players[ 0 ].score == players[ 1 ].score && players[ 0 ].deaths == players[ 1 ].deaths || self == players[ 0 ] && self == players[ 1 ] ) - { - outcometitle settext( game[ "strings" ][ "tie" ] ); - } - else - { - if ( isDefined( players[ 2 ] ) && players[ 0 ].score == players[ 2 ].score && players[ 0 ].deaths == players[ 2 ].deaths && self == players[ 2 ] ) - { - outcometitle settext( game[ "strings" ][ "tie" ] ); - } - else - { - if ( isDefined( players[ 0 ] ) && self == players[ 0 ] ) - { - outcometitle settext( game[ "strings" ][ "victory" ] ); - outcometitle.color = ( 0,42, 0,68, 0,46 ); - } - else - { - outcometitle settext( game[ "strings" ][ "defeat" ] ); - outcometitle.color = ( 0,73, 0,29, 0,19 ); - } - } - } - } - outcometitle.glowalpha = 1; - outcometitle.hidewheninmenu = 0; - outcometitle.archived = 0; - outcometitle setcod7decodefx( 200, duration, 600 ); - outcometext = createfontstring( font, 2 ); - outcometext setparent( outcometitle ); - outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); - outcometext.glowalpha = 1; - outcometext.hidewheninmenu = 0; - outcometext.archived = 0; - outcometext settext( endreasontext ); - firsttitle = createfontstring( font, winnersize ); - firsttitle setparent( outcometext ); - firsttitle setpoint( "TOP", "BOTTOM", 0, spacing ); - firsttitle.glowalpha = 1; - firsttitle.hidewheninmenu = 0; - firsttitle.archived = 0; - if ( isDefined( players[ 0 ] ) ) - { - firsttitle.label = &"MP_FIRSTPLACE_NAME"; - firsttitle setplayernamestring( players[ 0 ] ); - firsttitle setcod7decodefx( 175, duration, 600 ); - } - secondtitle = createfontstring( font, othersize ); - secondtitle setparent( firsttitle ); - secondtitle setpoint( "TOP", "BOTTOM", 0, spacing ); - secondtitle.glowalpha = 1; - secondtitle.hidewheninmenu = 0; - secondtitle.archived = 0; - if ( isDefined( players[ 1 ] ) ) - { - secondtitle.label = &"MP_SECONDPLACE_NAME"; - secondtitle setplayernamestring( players[ 1 ] ); - secondtitle setcod7decodefx( 175, duration, 600 ); - } - thirdtitle = createfontstring( font, othersize ); - thirdtitle setparent( secondtitle ); - thirdtitle setpoint( "TOP", "BOTTOM", 0, spacing ); - thirdtitle setparent( secondtitle ); - thirdtitle.glowalpha = 1; - thirdtitle.hidewheninmenu = 0; - thirdtitle.archived = 0; - if ( isDefined( players[ 2 ] ) ) - { - thirdtitle.label = &"MP_THIRDPLACE_NAME"; - thirdtitle setplayernamestring( players[ 2 ] ); - thirdtitle setcod7decodefx( 175, duration, 600 ); - } - matchbonus = createfontstring( font, 2 ); - matchbonus setparent( thirdtitle ); - matchbonus setpoint( "TOP", "BOTTOM", 0, spacing ); - matchbonus.glowalpha = 1; - matchbonus.hidewheninmenu = 0; - matchbonus.archived = 0; - if ( isDefined( self.matchbonus ) ) - { - matchbonus.label = game[ "strings" ][ "match_bonus" ]; - matchbonus setvalue( self.matchbonus ); - } - self thread updateoutcome( firsttitle, secondtitle, thirdtitle ); - self thread resetoutcomenotify( undefined, undefined, outcometitle, outcometext, firsttitle, secondtitle, thirdtitle, matchbonus ); -} - -wageroutcomenotify( winner, endreasontext ) -{ - self endon( "disconnect" ); - self notify( "reset_outcome" ); - while ( self.doingnotify ) - { - wait 0,05; - } - setmatchflag( "enable_popups", 0 ); - self endon( "reset_outcome" ); - headerfont = "extrabig"; - font = "objective"; - if ( self issplitscreen() ) - { - titlesize = 2; - winnersize = 1,5; - othersize = 1,5; - iconsize = 30; - spacing = 2; - } - else - { - titlesize = 3; - winnersize = 2; - othersize = 1,5; - iconsize = 30; - spacing = 20; - } - halftime = 0; - if ( isDefined( level.sidebet ) && level.sidebet ) - { - halftime = 1; - } - duration = 60000; - players = level.placement[ "all" ]; - outcometitle = createfontstring( headerfont, titlesize ); - outcometitle setpoint( "TOP", undefined, 0, spacing ); - if ( halftime ) - { - outcometitle settext( game[ "strings" ][ "intermission" ] ); - outcometitle.color = ( 1, 1, 1 ); - outcometitle.glowcolor = ( 1, 1, 1 ); - } - else if ( isDefined( level.dontcalcwagerwinnings ) && level.dontcalcwagerwinnings == 1 ) - { - outcometitle settext( game[ "strings" ][ "wager_topwinners" ] ); - outcometitle.color = ( 0,42, 0,68, 0,46 ); - } - else - { - if ( isDefined( self.wagerwinnings ) && self.wagerwinnings > 0 ) - { - outcometitle settext( game[ "strings" ][ "wager_inthemoney" ] ); - outcometitle.color = ( 0,42, 0,68, 0,46 ); - } - else - { - outcometitle settext( game[ "strings" ][ "wager_loss" ] ); - outcometitle.color = ( 0,73, 0,29, 0,19 ); - } - } - outcometitle.glowalpha = 1; - outcometitle.hidewheninmenu = 0; - outcometitle.archived = 0; - outcometitle setcod7decodefx( 200, duration, 600 ); - outcometext = createfontstring( font, 2 ); - outcometext setparent( outcometitle ); - outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); - outcometext.glowalpha = 1; - outcometext.hidewheninmenu = 0; - outcometext.archived = 0; - outcometext settext( endreasontext ); - playernamehudelems = []; - playercphudelems = []; - numplayers = players.size; - i = 0; - while ( i < numplayers ) - { - if ( !halftime && isDefined( players[ i ] ) ) - { - secondtitle = createfontstring( font, othersize ); - if ( playernamehudelems.size == 0 ) - { - secondtitle setparent( outcometext ); - secondtitle setpoint( "TOP_LEFT", "BOTTOM", -175, spacing * 3 ); - } - else - { - secondtitle setparent( playernamehudelems[ playernamehudelems.size - 1 ] ); - secondtitle setpoint( "TOP_LEFT", "BOTTOM_LEFT", 0, spacing ); - } - secondtitle.glowalpha = 1; - secondtitle.hidewheninmenu = 0; - secondtitle.archived = 0; - secondtitle.label = &"MP_WAGER_PLACE_NAME"; - secondtitle.playernum = i; - secondtitle setplayernamestring( players[ i ] ); - playernamehudelems[ playernamehudelems.size ] = secondtitle; - secondcp = createfontstring( font, othersize ); - secondcp setparent( secondtitle ); - secondcp setpoint( "TOP_RIGHT", "TOP_LEFT", 350, 0 ); - secondcp.glowalpha = 1; - secondcp.hidewheninmenu = 0; - secondcp.archived = 0; - secondcp.label = &"MENU_POINTS"; - secondcp.currentvalue = 0; - if ( isDefined( players[ i ].wagerwinnings ) ) - { - secondcp.targetvalue = players[ i ].wagerwinnings; - } - else - { - secondcp.targetvalue = 0; - } - if ( secondcp.targetvalue > 0 ) - { - secondcp.color = ( 0,42, 0,68, 0,46 ); - } - secondcp setvalue( 0 ); - playercphudelems[ playercphudelems.size ] = secondcp; - } - i++; - } - self thread updatewageroutcome( playernamehudelems, playercphudelems ); - self thread resetwageroutcomenotify( playernamehudelems, playercphudelems, outcometitle, outcometext ); - if ( halftime ) - { - return; - } - stillupdating = 1; - countupduration = 2; - cpincrement = 9999; - if ( isDefined( playercphudelems[ 0 ] ) ) - { - cpincrement = int( playercphudelems[ 0 ].targetvalue / ( countupduration / 0,05 ) ); - if ( cpincrement < 1 ) - { - cpincrement = 1; - } - } - while ( stillupdating ) - { - stillupdating = 0; - i = 0; - while ( i < playercphudelems.size ) - { - if ( isDefined( playercphudelems[ i ] ) && playercphudelems[ i ].currentvalue < playercphudelems[ i ].targetvalue ) - { - playercphudelems[ i ].currentvalue += cpincrement; - if ( playercphudelems[ i ].currentvalue > playercphudelems[ i ].targetvalue ) - { - playercphudelems[ i ].currentvalue = playercphudelems[ i ].targetvalue; - } - playercphudelems[ i ] setvalue( playercphudelems[ i ].currentvalue ); - stillupdating = 1; - } - i++; - } - wait 0,05; - } -} - -teamwageroutcomenotify( winner, isroundend, endreasontext ) -{ - self endon( "disconnect" ); - self notify( "reset_outcome" ); - team = self.pers[ "team" ]; - if ( !isDefined( team ) || !isDefined( level.teams[ team ] ) ) - { - team = "allies"; - } - wait 0,05; - while ( self.doingnotify ) - { - wait 0,05; - } - self endon( "reset_outcome" ); - headerfont = "extrabig"; - font = "objective"; - if ( self issplitscreen() ) - { - titlesize = 2; - textsize = 1,5; - iconsize = 30; - spacing = 10; - } - else - { - titlesize = 3; - textsize = 2; - iconsize = 70; - spacing = 15; - } - halftime = 0; - if ( isDefined( level.sidebet ) && level.sidebet ) - { - halftime = 1; - } - duration = 60000; - outcometitle = createfontstring( headerfont, titlesize ); - outcometitle setpoint( "TOP", undefined, 0, spacing ); - outcometitle.glowalpha = 1; - outcometitle.hidewheninmenu = 0; - outcometitle.archived = 0; - outcometext = createfontstring( font, 2 ); - outcometext setparent( outcometitle ); - outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); - outcometext.glowalpha = 1; - outcometext.hidewheninmenu = 0; - outcometext.archived = 0; - if ( winner == "tie" ) - { - if ( isroundend ) - { - outcometitle settext( game[ "strings" ][ "round_draw" ] ); - } - else - { - outcometitle settext( game[ "strings" ][ "draw" ] ); - } - outcometitle.color = ( 1, 1, 1 ); - winner = "allies"; - } - else if ( winner == "overtime" ) - { - outcometitle settext( game[ "strings" ][ "overtime" ] ); - outcometitle.color = ( 1, 1, 1 ); - } - else if ( isDefined( self.pers[ "team" ] ) && winner == team ) - { - if ( isroundend ) - { - outcometitle settext( game[ "strings" ][ "round_win" ] ); - } - else - { - outcometitle settext( game[ "strings" ][ "victory" ] ); - } - outcometitle.color = ( 0,42, 0,68, 0,46 ); - } - else - { - if ( isroundend ) - { - outcometitle settext( game[ "strings" ][ "round_loss" ] ); - } - else - { - outcometitle settext( game[ "strings" ][ "defeat" ] ); - } - outcometitle.color = ( 0,73, 0,29, 0,19 ); - } - if ( !isDefined( level.dontshowendreason ) || !level.dontshowendreason ) - { - outcometext settext( endreasontext ); - } - outcometitle setpulsefx( 100, duration, 1000 ); - outcometext setpulsefx( 100, duration, 1000 ); - teamicons = []; - teamicons[ team ] = createicon( game[ "icons" ][ team ], iconsize, iconsize ); - teamicons[ team ] setparent( outcometext ); - teamicons[ team ] setpoint( "TOP", "BOTTOM", -60, spacing ); - teamicons[ team ].hidewheninmenu = 0; - teamicons[ team ].archived = 0; - teamicons[ team ].alpha = 0; - teamicons[ team ] fadeovertime( 0,5 ); - teamicons[ team ].alpha = 1; - _a1171 = level.teams; - _k1171 = getFirstArrayKey( _a1171 ); - while ( isDefined( _k1171 ) ) - { - enemyteam = _a1171[ _k1171 ]; - if ( team == enemyteam ) - { - } - else - { - teamicons[ enemyteam ] = createicon( game[ "icons" ][ enemyteam ], iconsize, iconsize ); - teamicons[ enemyteam ] setparent( outcometext ); - teamicons[ enemyteam ] setpoint( "TOP", "BOTTOM", 60, spacing ); - teamicons[ enemyteam ].hidewheninmenu = 0; - teamicons[ enemyteam ].archived = 0; - teamicons[ enemyteam ].alpha = 0; - teamicons[ enemyteam ] fadeovertime( 0,5 ); - teamicons[ enemyteam ].alpha = 1; - } - _k1171 = getNextArrayKey( _a1171, _k1171 ); - } - teamscores = []; - teamscores[ team ] = createfontstring( font, titlesize ); - teamscores[ team ] setparent( teamicons[ team ] ); - teamscores[ team ] setpoint( "TOP", "BOTTOM", 0, spacing ); - teamscores[ team ].glowalpha = 1; - teamscores[ team ] setvalue( getteamscore( team ) ); - teamscores[ team ].hidewheninmenu = 0; - teamscores[ team ].archived = 0; - teamscores[ team ] setpulsefx( 100, duration, 1000 ); - _a1197 = level.teams; - _k1197 = getFirstArrayKey( _a1197 ); - while ( isDefined( _k1197 ) ) - { - enemyteam = _a1197[ _k1197 ]; - if ( team == enemyteam ) - { - } - else - { - teamscores[ enemyteam ] = createfontstring( font, titlesize ); - teamscores[ enemyteam ] setparent( teamicons[ enemyteam ] ); - teamscores[ enemyteam ] setpoint( "TOP", "BOTTOM", 0, spacing ); - teamscores[ enemyteam ].glowalpha = 1; - teamscores[ enemyteam ] setvalue( getteamscore( enemyteam ) ); - teamscores[ enemyteam ].hidewheninmenu = 0; - teamscores[ enemyteam ].archived = 0; - teamscores[ enemyteam ] setpulsefx( 100, duration, 1000 ); - } - _k1197 = getNextArrayKey( _a1197, _k1197 ); - } - matchbonus = undefined; - sidebetwinnings = undefined; - if ( !isroundend && !halftime && isDefined( self.wagerwinnings ) ) - { - matchbonus = createfontstring( font, 2 ); - matchbonus setparent( outcometext ); - matchbonus setpoint( "TOP", "BOTTOM", 0, iconsize + ( spacing * 3 ) + teamscores[ team ].height ); - matchbonus.glowalpha = 1; - matchbonus.hidewheninmenu = 0; - matchbonus.archived = 0; - matchbonus.label = game[ "strings" ][ "wager_winnings" ]; - matchbonus setvalue( self.wagerwinnings ); - if ( isDefined( game[ "side_bets" ] ) && game[ "side_bets" ] ) - { - sidebetwinnings = createfontstring( font, 2 ); - sidebetwinnings setparent( matchbonus ); - sidebetwinnings setpoint( "TOP", "BOTTOM", 0, spacing ); - sidebetwinnings.glowalpha = 1; - sidebetwinnings.hidewheninmenu = 0; - sidebetwinnings.archived = 0; - sidebetwinnings.label = game[ "strings" ][ "wager_sidebet_winnings" ]; - sidebetwinnings setvalue( self.pers[ "wager_sideBetWinnings" ] ); - } - } - self thread resetoutcomenotify( teamicons, teamscores, outcometitle, outcometext, matchbonus, sidebetwinnings ); -} - -destroyhudelem( hudelem ) -{ - if ( isDefined( hudelem ) ) - { - hudelem destroyelem(); - } -} - -resetoutcomenotify( hudelemlist1, hudelemlist2, hudelem3, hudelem4, hudelem5, hudelem6, hudelem7, hudelem8, hudelem9, hudelem10 ) -{ - self endon( "disconnect" ); - self waittill( "reset_outcome" ); - destroyhudelem( hudelem3 ); - destroyhudelem( hudelem4 ); - destroyhudelem( hudelem5 ); - destroyhudelem( hudelem6 ); - destroyhudelem( hudelem7 ); - destroyhudelem( hudelem8 ); - destroyhudelem( hudelem9 ); - destroyhudelem( hudelem10 ); - while ( isDefined( hudelemlist1 ) ) - { - _a1263 = hudelemlist1; - _k1263 = getFirstArrayKey( _a1263 ); - while ( isDefined( _k1263 ) ) - { - elem = _a1263[ _k1263 ]; - destroyhudelem( elem ); - _k1263 = getNextArrayKey( _a1263, _k1263 ); - } - } - while ( isDefined( hudelemlist2 ) ) - { - _a1271 = hudelemlist2; - _k1271 = getFirstArrayKey( _a1271 ); - while ( isDefined( _k1271 ) ) - { - elem = _a1271[ _k1271 ]; - destroyhudelem( elem ); - _k1271 = getNextArrayKey( _a1271, _k1271 ); - } - } -} - -resetwageroutcomenotify( playernamehudelems, playercphudelems, outcometitle, outcometext ) -{ - self endon( "disconnect" ); - self waittill( "reset_outcome" ); - i = playernamehudelems.size - 1; - while ( i >= 0 ) - { - if ( isDefined( playernamehudelems[ i ] ) ) - { - playernamehudelems[ i ] destroy(); - } - i--; - - } - i = playercphudelems.size - 1; - while ( i >= 0 ) - { - if ( isDefined( playercphudelems[ i ] ) ) - { - playercphudelems[ i ] destroy(); - } - i--; - - } - if ( isDefined( outcometext ) ) - { - outcometext destroy(); - } - if ( isDefined( outcometitle ) ) - { - outcometitle destroy(); - } -} - -updateoutcome( firsttitle, secondtitle, thirdtitle ) -{ - self endon( "disconnect" ); - self endon( "reset_outcome" ); - while ( 1 ) - { - self waittill( "update_outcome" ); - players = level.placement[ "all" ]; - if ( isDefined( firsttitle ) && isDefined( players[ 0 ] ) ) - { - firsttitle setplayernamestring( players[ 0 ] ); - } - else - { - if ( isDefined( firsttitle ) ) - { - firsttitle.alpha = 0; - } - } - if ( isDefined( secondtitle ) && isDefined( players[ 1 ] ) ) - { - secondtitle setplayernamestring( players[ 1 ] ); - } - else - { - if ( isDefined( secondtitle ) ) - { - secondtitle.alpha = 0; - } - } - if ( isDefined( thirdtitle ) && isDefined( players[ 2 ] ) ) - { - thirdtitle setplayernamestring( players[ 2 ] ); - continue; - } - else - { - if ( isDefined( thirdtitle ) ) - { - thirdtitle.alpha = 0; - } - } - } -} - -updatewageroutcome( playernamehudelems, playercphudelems ) -{ - self endon( "disconnect" ); - self endon( "reset_outcome" ); - while ( 1 ) - { - self waittill( "update_outcome" ); - players = level.placement[ "all" ]; - i = 0; - while ( i < playernamehudelems.size ) - { - if ( isDefined( playernamehudelems[ i ] ) && isDefined( players[ playernamehudelems[ i ].playernum ] ) ) - { - playernamehudelems[ i ] setplayernamestring( players[ playernamehudelems[ i ].playernum ] ); - i++; - continue; - } - else - { - if ( isDefined( playernamehudelems[ i ] ) ) - { - playernamehudelems[ i ].alpha = 0; - } - if ( isDefined( playercphudelems[ i ] ) ) - { - playercphudelems[ i ].alpha = 0; - } - } - i++; - } - } -} - -setshoutcasterwaitingmessage() -{ - if ( !isDefined( self.waitingforplayerstext ) ) - { - self.waitingforplayerstext = createfontstring( "objective", 2,5 ); - self.waitingforplayerstext setpoint( "CENTER", "CENTER", 0, -80 ); - self.waitingforplayerstext.sort = 1001; - self.waitingforplayerstext settext( &"MP_WAITING_FOR_PLAYERS_SHOUTCASTER" ); - self.waitingforplayerstext.foreground = 0; - self.waitingforplayerstext.hidewheninmenu = 1; - } -} - -clearshoutcasterwaitingmessage() -{ - if ( isDefined( self.waitingforplayerstext ) ) - { - destroyhudelem( self.waitingforplayerstext ); - self.waitingforplayerstext = undefined; - } -} diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_hud_util.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_hud_util.gsc deleted file mode 100644 index 16b74f2..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_hud_util.gsc +++ /dev/null @@ -1,1152 +0,0 @@ -#include maps/mp/_utility; - -setparent( element ) -{ - if ( isDefined( self.parent ) && self.parent == element ) - { - return; - } - if ( isDefined( self.parent ) ) - { - self.parent removechild( self ); - } - self.parent = element; - self.parent addchild( self ); - if ( isDefined( self.point ) ) - { - self setpoint( self.point, self.relativepoint, self.xoffset, self.yoffset ); - } - else - { - self setpoint( "TOP" ); - } -} - -getparent() -{ - return self.parent; -} - -addchild( element ) -{ - element.index = self.children.size; - self.children[ self.children.size ] = element; -} - -removechild( element ) -{ - element.parent = undefined; - if ( self.children[ self.children.size - 1 ] != element ) - { - self.children[ element.index ] = self.children[ self.children.size - 1 ]; - self.children[ element.index ].index = element.index; - } - element.index = undefined; -} - -setpoint( point, relativepoint, xoffset, yoffset, movetime ) -{ - if ( !isDefined( movetime ) ) - { - movetime = 0; - } - element = self getparent(); - if ( movetime ) - { - self moveovertime( movetime ); - } - if ( !isDefined( xoffset ) ) - { - xoffset = 0; - } - self.xoffset = xoffset; - if ( !isDefined( yoffset ) ) - { - yoffset = 0; - } - self.yoffset = yoffset; - self.point = point; - self.alignx = "center"; - self.aligny = "middle"; - switch( point ) - { - case "CENTER": - break; - case "TOP": - self.aligny = "top"; - break; - case "BOTTOM": - self.aligny = "bottom"; - break; - case "LEFT": - self.alignx = "left"; - break; - case "RIGHT": - self.alignx = "right"; - break; - case "TOPRIGHT": - case "TOP_RIGHT": - self.aligny = "top"; - self.alignx = "right"; - break; - case "TOPLEFT": - case "TOP_LEFT": - self.aligny = "top"; - self.alignx = "left"; - break; - case "TOPCENTER": - self.aligny = "top"; - self.alignx = "center"; - break; - case "BOTTOM RIGHT": - case "BOTTOM_RIGHT": - self.aligny = "bottom"; - self.alignx = "right"; - break; - case "BOTTOM LEFT": - case "BOTTOM_LEFT": - self.aligny = "bottom"; - self.alignx = "left"; - break; - default: -/# - println( "^3Warning: unknown point passed to setPoint(): " + point ); -#/ - break; - } - if ( !isDefined( relativepoint ) ) - { - relativepoint = point; - } - self.relativepoint = relativepoint; - relativex = "center"; - relativey = "middle"; - switch( relativepoint ) - { - case "CENTER": - break; - case "TOP": - relativey = "top"; - break; - case "BOTTOM": - relativey = "bottom"; - break; - case "LEFT": - relativex = "left"; - break; - case "RIGHT": - relativex = "right"; - break; - case "TOPRIGHT": - case "TOP_RIGHT": - relativey = "top"; - relativex = "right"; - break; - case "TOPLEFT": - case "TOP_LEFT": - relativey = "top"; - relativex = "left"; - break; - case "TOPCENTER": - relativey = "top"; - relativex = "center"; - break; - case "BOTTOM RIGHT": - case "BOTTOM_RIGHT": - relativey = "bottom"; - relativex = "right"; - break; - case "BOTTOM LEFT": - case "BOTTOM_LEFT": - relativey = "bottom"; - relativex = "left"; - break; - default: -/# - println( "^3Warning: unknown relativePoint passed to setPoint(): " + relativepoint ); -#/ - break; - } - if ( element == level.uiparent ) - { - self.horzalign = relativex; - self.vertalign = relativey; - } - else - { - self.horzalign = element.horzalign; - self.vertalign = element.vertalign; - } - if ( relativex == element.alignx ) - { - offsetx = 0; - xfactor = 0; - } - else if ( relativex == "center" || element.alignx == "center" ) - { - offsetx = int( element.width / 2 ); - if ( relativex == "left" || element.alignx == "right" ) - { - xfactor = -1; - } - else - { - xfactor = 1; - } - } - else - { - offsetx = element.width; - if ( relativex == "left" ) - { - xfactor = -1; - } - else - { - xfactor = 1; - } - } - self.x = element.x + ( offsetx * xfactor ); - if ( relativey == element.aligny ) - { - offsety = 0; - yfactor = 0; - } - else if ( relativey == "middle" || element.aligny == "middle" ) - { - offsety = int( element.height / 2 ); - if ( relativey == "top" || element.aligny == "bottom" ) - { - yfactor = -1; - } - else - { - yfactor = 1; - } - } - else - { - offsety = element.height; - if ( relativey == "top" ) - { - yfactor = -1; - } - else - { - yfactor = 1; - } - } - self.y = element.y + ( offsety * yfactor ); - self.x += self.xoffset; - self.y += self.yoffset; - switch( self.elemtype ) - { - case "bar": - setpointbar( point, relativepoint, xoffset, yoffset ); - self.barframe setparent( self getparent() ); - self.barframe setpoint( point, relativepoint, xoffset, yoffset ); - break; - } - self updatechildren(); -} - -setpointbar( point, relativepoint, xoffset, yoffset ) -{ - self.bar.horzalign = self.horzalign; - self.bar.vertalign = self.vertalign; - self.bar.alignx = "left"; - self.bar.aligny = self.aligny; - self.bar.y = self.y; - if ( self.alignx == "left" ) - { - self.bar.x = self.x; - } - else if ( self.alignx == "right" ) - { - self.bar.x = self.x - self.width; - } - else - { - self.bar.x = self.x - int( self.width / 2 ); - } - if ( self.aligny == "top" ) - { - self.bar.y = self.y; - } - else - { - if ( self.aligny == "bottom" ) - { - self.bar.y = self.y; - } - } - self updatebar( self.bar.frac ); -} - -updatebar( barfrac, rateofchange ) -{ - if ( self.elemtype == "bar" ) - { - updatebarscale( barfrac, rateofchange ); - } -} - -updatebarscale( barfrac, rateofchange ) -{ - barwidth = int( ( self.width * barfrac ) + 0,5 ); - if ( !barwidth ) - { - barwidth = 1; - } - self.bar.frac = barfrac; - self.bar setshader( self.bar.shader, barwidth, self.height ); -/# - assert( barwidth <= self.width, "barWidth <= self.width: " + barwidth + " <= " + self.width + " - barFrac was " + barfrac ); -#/ - if ( isDefined( rateofchange ) && barwidth < self.width ) - { - if ( rateofchange > 0 ) - { -/# - assert( ( ( 1 - barfrac ) / rateofchange ) > 0, "barFrac: " + barfrac + "rateOfChange: " + rateofchange ); -#/ - self.bar scaleovertime( ( 1 - barfrac ) / rateofchange, self.width, self.height ); - } - else - { - if ( rateofchange < 0 ) - { -/# - assert( ( barfrac / ( -1 * rateofchange ) ) > 0, "barFrac: " + barfrac + "rateOfChange: " + rateofchange ); -#/ - self.bar scaleovertime( barfrac / ( -1 * rateofchange ), 1, self.height ); - } - } - } - self.bar.rateofchange = rateofchange; - self.bar.lastupdatetime = getTime(); -} - -createfontstring( font, fontscale ) -{ - fontelem = newclienthudelem( self ); - fontelem.elemtype = "font"; - fontelem.font = font; - fontelem.fontscale = fontscale; - fontelem.x = 0; - fontelem.y = 0; - fontelem.width = 0; - fontelem.height = int( level.fontheight * fontscale ); - fontelem.xoffset = 0; - fontelem.yoffset = 0; - fontelem.children = []; - fontelem setparent( level.uiparent ); - fontelem.hidden = 0; - return fontelem; -} - -createserverfontstring( font, fontscale, team ) -{ - if ( isDefined( team ) ) - { - fontelem = newteamhudelem( team ); - } - else - { - fontelem = newhudelem(); - } - fontelem.elemtype = "font"; - fontelem.font = font; - fontelem.fontscale = fontscale; - fontelem.x = 0; - fontelem.y = 0; - fontelem.width = 0; - fontelem.height = int( level.fontheight * fontscale ); - fontelem.xoffset = 0; - fontelem.yoffset = 0; - fontelem.children = []; - fontelem setparent( level.uiparent ); - fontelem.hidden = 0; - return fontelem; -} - -createservertimer( font, fontscale, team ) -{ - if ( isDefined( team ) ) - { - timerelem = newteamhudelem( team ); - } - else - { - timerelem = newhudelem(); - } - timerelem.elemtype = "timer"; - timerelem.font = font; - timerelem.fontscale = fontscale; - timerelem.x = 0; - timerelem.y = 0; - timerelem.width = 0; - timerelem.height = int( level.fontheight * fontscale ); - timerelem.xoffset = 0; - timerelem.yoffset = 0; - timerelem.children = []; - timerelem setparent( level.uiparent ); - timerelem.hidden = 0; - return timerelem; -} - -createclienttimer( font, fontscale ) -{ - timerelem = newclienthudelem( self ); - timerelem.elemtype = "timer"; - timerelem.font = font; - timerelem.fontscale = fontscale; - timerelem.x = 0; - timerelem.y = 0; - timerelem.width = 0; - timerelem.height = int( level.fontheight * fontscale ); - timerelem.xoffset = 0; - timerelem.yoffset = 0; - timerelem.children = []; - timerelem setparent( level.uiparent ); - timerelem.hidden = 0; - return timerelem; -} - -createicon( shader, width, height ) -{ - iconelem = newclienthudelem( self ); - iconelem.elemtype = "icon"; - iconelem.x = 0; - iconelem.y = 0; - iconelem.width = width; - iconelem.height = height; - iconelem.xoffset = 0; - iconelem.yoffset = 0; - iconelem.children = []; - iconelem setparent( level.uiparent ); - iconelem.hidden = 0; - if ( isDefined( shader ) ) - { - iconelem setshader( shader, width, height ); - } - return iconelem; -} - -createservericon( shader, width, height, team ) -{ - if ( isDefined( team ) ) - { - iconelem = newteamhudelem( team ); - } - else - { - iconelem = newhudelem(); - } - iconelem.elemtype = "icon"; - iconelem.x = 0; - iconelem.y = 0; - iconelem.width = width; - iconelem.height = height; - iconelem.xoffset = 0; - iconelem.yoffset = 0; - iconelem.children = []; - iconelem setparent( level.uiparent ); - iconelem.hidden = 0; - if ( isDefined( shader ) ) - { - iconelem setshader( shader, width, height ); - } - return iconelem; -} - -createserverbar( color, width, height, flashfrac, team, selected ) -{ - if ( isDefined( team ) ) - { - barelem = newteamhudelem( team ); - } - else - { - barelem = newhudelem(); - } - barelem.x = 0; - barelem.y = 0; - barelem.frac = 0; - barelem.color = color; - barelem.sort = -2; - barelem.shader = "progress_bar_fill"; - barelem setshader( "progress_bar_fill", width, height ); - barelem.hidden = 0; - if ( isDefined( flashfrac ) ) - { - barelem.flashfrac = flashfrac; - } - if ( isDefined( team ) ) - { - barelemframe = newteamhudelem( team ); - } - else - { - barelemframe = newhudelem(); - } - barelemframe.elemtype = "icon"; - barelemframe.x = 0; - barelemframe.y = 0; - barelemframe.width = width; - barelemframe.height = height; - barelemframe.xoffset = 0; - barelemframe.yoffset = 0; - barelemframe.bar = barelem; - barelemframe.barframe = barelemframe; - barelemframe.children = []; - barelemframe.sort = -1; - barelemframe.color = ( 1, 0, 0 ); - barelemframe setparent( level.uiparent ); - if ( isDefined( selected ) ) - { - barelemframe setshader( "progress_bar_fg_sel", width, height ); - } - else - { - barelemframe setshader( "progress_bar_fg", width, height ); - } - barelemframe.hidden = 0; - if ( isDefined( team ) ) - { - barelembg = newteamhudelem( team ); - } - else - { - barelembg = newhudelem(); - } - barelembg.elemtype = "bar"; - barelembg.x = 0; - barelembg.y = 0; - barelembg.width = width; - barelembg.height = height; - barelembg.xoffset = 0; - barelembg.yoffset = 0; - barelembg.bar = barelem; - barelembg.barframe = barelemframe; - barelembg.children = []; - barelembg.sort = -3; - barelembg.color = ( 1, 0, 0 ); - barelembg.alpha = 0,5; - barelembg setparent( level.uiparent ); - barelembg setshader( "progress_bar_bg", width, height ); - barelembg.hidden = 0; - return barelembg; -} - -createbar( color, width, height, flashfrac ) -{ - barelem = newclienthudelem( self ); - barelem.x = 0; - barelem.y = 0; - barelem.frac = 0; - barelem.color = color; - barelem.sort = -2; - barelem.shader = "progress_bar_fill"; - barelem setshader( "progress_bar_fill", width, height ); - barelem.hidden = 0; - if ( isDefined( flashfrac ) ) - { - barelem.flashfrac = flashfrac; - } - barelemframe = newclienthudelem( self ); - barelemframe.elemtype = "icon"; - barelemframe.x = 0; - barelemframe.y = 0; - barelemframe.width = width; - barelemframe.height = height; - barelemframe.xoffset = 0; - barelemframe.yoffset = 0; - barelemframe.bar = barelem; - barelemframe.barframe = barelemframe; - barelemframe.children = []; - barelemframe.sort = -1; - barelemframe.color = ( 1, 0, 0 ); - barelemframe setparent( level.uiparent ); - barelemframe.hidden = 0; - barelembg = newclienthudelem( self ); - barelembg.elemtype = "bar"; - if ( !self issplitscreen() ) - { - barelembg.x = -2; - barelembg.y = -2; - } - barelembg.width = width; - barelembg.height = height; - barelembg.xoffset = 0; - barelembg.yoffset = 0; - barelembg.bar = barelem; - barelembg.barframe = barelemframe; - barelembg.children = []; - barelembg.sort = -3; - barelembg.color = ( 1, 0, 0 ); - barelembg.alpha = 0,5; - barelembg setparent( level.uiparent ); - if ( !self issplitscreen() ) - { - barelembg setshader( "progress_bar_bg", width + 4, height + 4 ); - } - else - { - barelembg setshader( "progress_bar_bg", width + 0, height + 0 ); - } - barelembg.hidden = 0; - return barelembg; -} - -getcurrentfraction() -{ - frac = self.bar.frac; - if ( isDefined( self.bar.rateofchange ) ) - { - frac += ( getTime() - self.bar.lastupdatetime ) * self.bar.rateofchange; - if ( frac > 1 ) - { - frac = 1; - } - if ( frac < 0 ) - { - frac = 0; - } - } - return frac; -} - -createprimaryprogressbar() -{ - bar = undefined; - if ( self issplitscreen() ) - { - bar = self createbar( ( 1, 0, 0 ), level.primaryprogressbarwidth, level.primaryprogressbarheight_ss ); - bar setpoint( "TOP", undefined, level.primaryprogressbarx_ss, level.primaryprogressbary_ss ); - } - else - { - bar = self createbar( ( 1, 0, 0 ), level.primaryprogressbarwidth, level.primaryprogressbarheight ); - bar setpoint( "CENTER", undefined, level.primaryprogressbarx, level.primaryprogressbary ); - } - return bar; -} - -createprimaryprogressbartext() -{ - text = createfontstring( "objective", level.primaryprogressbarfontsize ); - if ( self issplitscreen() ) - { - text setpoint( "TOP", undefined, level.primaryprogressbartextx_ss, level.primaryprogressbartexty_ss ); - } - else - { - text setpoint( "CENTER", undefined, level.primaryprogressbartextx, level.primaryprogressbartexty ); - } - text.sort = -1; - return text; -} - -createsecondaryprogressbar() -{ - secondaryprogressbarheight = getdvarintdefault( "scr_secondaryProgressBarHeight", level.secondaryprogressbarheight ); - secondaryprogressbarx = getdvarintdefault( "scr_secondaryProgressBarX", level.secondaryprogressbarx ); - secondaryprogressbary = getdvarintdefault( "scr_secondaryProgressBarY", level.secondaryprogressbary ); - secondaryprogressbarheight_ss = getdvarintdefault( "scr_secondaryProgressBarHeight", level.secondaryprogressbarheight_ss ); - secondaryprogressbarx_ss = getdvarintdefault( "scr_secondaryProgressBarX", level.secondaryprogressbarx_ss ); - secondaryprogressbary_ss = getdvarintdefault( "scr_secondaryProgressBarY", level.secondaryprogressbary_ss ); - bar = undefined; - if ( self issplitscreen() ) - { - bar = self createbar( ( 1, 0, 0 ), level.secondaryprogressbarwidth, secondaryprogressbarheight_ss ); - bar setpoint( "TOP", undefined, secondaryprogressbarx_ss, secondaryprogressbary_ss ); - } - else - { - bar = self createbar( ( 1, 0, 0 ), level.secondaryprogressbarwidth, secondaryprogressbarheight ); - bar setpoint( "CENTER", undefined, secondaryprogressbarx, secondaryprogressbary ); - } - return bar; -} - -createsecondaryprogressbartext() -{ - secondaryprogressbartextx = getdvarintdefault( "scr_btx", level.secondaryprogressbartextx ); - secondaryprogressbartexty = getdvarintdefault( "scr_bty", level.secondaryprogressbartexty ); - secondaryprogressbartextx_ss = getdvarintdefault( "scr_btx", level.secondaryprogressbartextx_ss ); - secondaryprogressbartexty_ss = getdvarintdefault( "scr_bty", level.secondaryprogressbartexty_ss ); - text = createfontstring( "objective", level.primaryprogressbarfontsize ); - if ( self issplitscreen() ) - { - text setpoint( "TOP", undefined, secondaryprogressbartextx_ss, secondaryprogressbartexty_ss ); - } - else - { - text setpoint( "CENTER", undefined, secondaryprogressbartextx, secondaryprogressbartexty ); - } - text.sort = -1; - return text; -} - -createteamprogressbar( team ) -{ - bar = createserverbar( ( 1, 0, 0 ), level.teamprogressbarwidth, level.teamprogressbarheight, undefined, team ); - bar setpoint( "TOP", undefined, 0, level.teamprogressbary ); - return bar; -} - -createteamprogressbartext( team ) -{ - text = createserverfontstring( "default", level.teamprogressbarfontsize, team ); - text setpoint( "TOP", undefined, 0, level.teamprogressbartexty ); - return text; -} - -setflashfrac( flashfrac ) -{ - self.bar.flashfrac = flashfrac; -} - -hideelem() -{ - if ( self.hidden ) - { - return; - } - self.hidden = 1; - if ( self.alpha != 0 ) - { - self.alpha = 0; - } - if ( self.elemtype == "bar" || self.elemtype == "bar_shader" ) - { - self.bar.hidden = 1; - if ( self.bar.alpha != 0 ) - { - self.bar.alpha = 0; - } - self.barframe.hidden = 1; - if ( self.barframe.alpha != 0 ) - { - self.barframe.alpha = 0; - } - } -} - -showelem() -{ - if ( !self.hidden ) - { - return; - } - self.hidden = 0; - if ( self.elemtype == "bar" || self.elemtype == "bar_shader" ) - { - if ( self.alpha != 0,5 ) - { - self.alpha = 0,5; - } - self.bar.hidden = 0; - if ( self.bar.alpha != 1 ) - { - self.bar.alpha = 1; - } - self.barframe.hidden = 0; - if ( self.barframe.alpha != 1 ) - { - self.barframe.alpha = 1; - } - } - else - { - if ( self.alpha != 1 ) - { - self.alpha = 1; - } - } -} - -flashthread() -{ - self endon( "death" ); - if ( !self.hidden ) - { - self.alpha = 1; - } - while ( 1 ) - { - if ( self.frac >= self.flashfrac ) - { - if ( !self.hidden ) - { - self fadeovertime( 0,3 ); - self.alpha = 0,2; - wait 0,35; - self fadeovertime( 0,3 ); - self.alpha = 1; - } - wait 0,7; - continue; - } - else - { - if ( !self.hidden && self.alpha != 1 ) - { - self.alpha = 1; - } - wait 0,05; - } - } -} - -destroyelem() -{ - tempchildren = []; - index = 0; - while ( index < self.children.size ) - { - if ( isDefined( self.children[ index ] ) ) - { - tempchildren[ tempchildren.size ] = self.children[ index ]; - } - index++; - } - index = 0; - while ( index < tempchildren.size ) - { - tempchildren[ index ] setparent( self getparent() ); - index++; - } - if ( self.elemtype == "bar" || self.elemtype == "bar_shader" ) - { - self.bar destroy(); - self.barframe destroy(); - } - self destroy(); -} - -seticonshader( shader ) -{ - self setshader( shader, self.width, self.height ); -} - -setwidth( width ) -{ - self.width = width; -} - -setheight( height ) -{ - self.height = height; -} - -setsize( width, height ) -{ - self.width = width; - self.height = height; -} - -updatechildren() -{ - index = 0; - while ( index < self.children.size ) - { - child = self.children[ index ]; - child setpoint( child.point, child.relativepoint, child.xoffset, child.yoffset ); - index++; - } -} - -createloadouticon( verindex, horindex, xpos, ypos ) -{ - iconsize = 32; - if ( level.splitscreen ) - { - ypos -= 80 + ( iconsize * ( 3 - verindex ) ); - } - else - { - ypos -= 90 + ( iconsize * ( 3 - verindex ) ); - } - if ( level.splitscreen ) - { - xpos -= 5 + ( iconsize * horindex ); - } - else - { - xpos -= 10 + ( iconsize * horindex ); - } - icon = createicon( "white", iconsize, iconsize ); - icon setpoint( "BOTTOM RIGHT", "BOTTOM RIGHT", xpos, ypos ); - icon.horzalign = "user_right"; - icon.vertalign = "user_bottom"; - icon.archived = 0; - icon.foreground = 0; - return icon; -} - -setloadouticoncoords( verindex, horindex, xpos, ypos ) -{ - iconsize = 32; - if ( level.splitscreen ) - { - ypos -= 80 + ( iconsize * ( 3 - verindex ) ); - } - else - { - ypos -= 90 + ( iconsize * ( 3 - verindex ) ); - } - if ( level.splitscreen ) - { - xpos -= 5 + ( iconsize * horindex ); - } - else - { - xpos -= 10 + ( iconsize * horindex ); - } - self setpoint( "BOTTOM RIGHT", "BOTTOM RIGHT", xpos, ypos ); - self.horzalign = "user_right"; - self.vertalign = "user_bottom"; - self.archived = 0; - self.foreground = 0; - self.alpha = 1; -} - -setloadouttextcoords( xcoord ) -{ - self setpoint( "RIGHT", "LEFT", xcoord, 0 ); -} - -createloadouttext( icon, xcoord ) -{ - text = createfontstring( "small", 1 ); - text setparent( icon ); - text setpoint( "RIGHT", "LEFT", xcoord, 0 ); - text.archived = 0; - text.alignx = "right"; - text.aligny = "middle"; - text.foreground = 0; - return text; -} - -showloadoutattribute( iconelem, icon, alpha, textelem, text ) -{ - iconsize = 32; - iconelem.alpha = alpha; - if ( alpha ) - { - iconelem setshader( icon, iconsize, iconsize ); - } - if ( isDefined( textelem ) ) - { - textelem.alpha = alpha; - if ( alpha ) - { - textelem settext( text ); - } - } -} - -hideloadoutattribute( iconelem, fadetime, textelem, hidetextonly ) -{ - if ( isDefined( fadetime ) ) - { - if ( !isDefined( hidetextonly ) || !hidetextonly ) - { - iconelem fadeovertime( fadetime ); - } - if ( isDefined( textelem ) ) - { - textelem fadeovertime( fadetime ); - } - } - if ( !isDefined( hidetextonly ) || !hidetextonly ) - { - iconelem.alpha = 0; - } - if ( isDefined( textelem ) ) - { - textelem.alpha = 0; - } -} - -showperks() -{ - ypos = 40; - if ( !isDefined( self.perkhudelem ) ) - { - self.perkhudelem = createloadouticon( 0, 0, 200, ypos ); - } - else - { - self.perkhudelem setloadouticoncoords( 0, 0, 200, ypos ); - } - self.perkhudelem setperks( self ); - self.perkhudelem.x = -10; - self.perkhudelem.alpha = 0; - self.perkhudelem fadeovertime( 0,4 ); - self.perkhudelem.alpha = 1; - self.perkhudelem.hidewheninmenu = 1; -} - -showperk( index, perk, ypos ) -{ -/# - assert( game[ "state" ] != "postgame" ); -#/ - if ( !isDefined( self.perkicon ) ) - { - self.perkicon = []; - self.perkname = []; - } - if ( !isDefined( self.perkicon[ index ] ) ) - { -/# - assert( !isDefined( self.perkname[ index ] ) ); -#/ - self.perkicon[ index ] = createloadouticon( index, 0, 200, ypos ); - self.perkname[ index ] = createloadouttext( self.perkicon[ index ], 160 ); - } - else - { - self.perkicon[ index ] setloadouticoncoords( index, 0, 200, ypos ); - self.perkname[ index ] setloadouttextcoords( 160 ); - } - if ( perk != "perk_null" || perk == "weapon_null" && perk == "specialty_null" ) - { - alpha = 0; - } - else - { -/# - assert( isDefined( level.perknames[ perk ] ), perk ); -#/ - alpha = 1; - } - showloadoutattribute( self.perkicon[ index ], perk, alpha, self.perkname[ index ], level.perknames[ perk ] ); - self.perkicon[ index ] moveovertime( 0,3 ); - self.perkicon[ index ].x = -5; - self.perkicon[ index ].hidewheninmenu = 1; - self.perkname[ index ] moveovertime( 0,3 ); - self.perkname[ index ].x = -40; - self.perkname[ index ].hidewheninmenu = 1; -} - -hideperks( fadetime ) -{ - if ( level.perksenabled == 1 ) - { - if ( game[ "state" ] == "postgame" ) - { -/# - assert( !isDefined( self.perkhudelem ) ); -#/ - return; - } - } -/# - assert( isDefined( self.perkhudelem ) ); -#/ - if ( isDefined( self.perkhudelem ) ) - { - hideloadoutattribute( self.perkhudelem, fadetime ); - } -} - -hideperk( index, fadetime, hidetextonly ) -{ - if ( !isDefined( fadetime ) ) - { - fadetime = 0,05; - } - if ( level.perksenabled == 1 ) - { - if ( game[ "state" ] == "postgame" ) - { - if ( isDefined( self.perkicon ) ) - { -/# - assert( !isDefined( self.perkicon[ index ] ) ); -#/ -/# - assert( !isDefined( self.perkname[ index ] ) ); -#/ - } - return; - } -/# - assert( isDefined( self.perkicon[ index ] ) ); -#/ -/# - assert( isDefined( self.perkname[ index ] ) ); -#/ - if ( isDefined( self.perkicon ) && isDefined( self.perkicon[ index ] ) && isDefined( self.perkname ) && isDefined( self.perkname[ index ] ) ) - { - hideloadoutattribute( self.perkicon[ index ], fadetime, self.perkname[ index ], hidetextonly ); - } - } -} - -hideallperks( fadetime, hidetextonly ) -{ - if ( level.perksenabled == 1 ) - { - hideperks( fadetime ); - } -} - -showkillstreak( index, killstreak, xpos, ypos ) -{ -/# - assert( game[ "state" ] != "postgame" ); -#/ - if ( !isDefined( self.killstreakicon ) ) - { - self.killstreakicon = []; - } - if ( !isDefined( self.killstreakicon[ index ] ) ) - { - self.killstreakicon[ index ] = createloadouticon( 3, ( self.killstreak.size - 1 ) - index, xpos, ypos ); - } - if ( killstreak == "killstreak_null" || killstreak == "weapon_null" ) - { - alpha = 0; - } - else - { -/# - assert( isDefined( level.killstreakicons[ killstreak ] ), killstreak ); -#/ - alpha = 1; - } - showloadoutattribute( self.killstreakicon[ index ], level.killstreakicons[ killstreak ], alpha ); -} - -hidekillstreak( index, fadetime ) -{ - if ( iskillstreaksenabled() ) - { - if ( game[ "state" ] == "postgame" ) - { -/# - assert( !isDefined( self.killstreakicon[ index ] ) ); -#/ - return; - } -/# - assert( isDefined( self.killstreakicon[ index ] ) ); -#/ - hideloadoutattribute( self.killstreakicon[ index ], fadetime ); - } -} - -setgamemodeinfopoint() -{ - self.x = 5; - self.y = 120; - self.horzalign = "user_left"; - self.vertalign = "user_top"; - self.alignx = "left"; - self.aligny = "top"; -} diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_menus.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_menus.gsc deleted file mode 100644 index c6a8a1c..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_menus.gsc +++ /dev/null @@ -1,167 +0,0 @@ -#include maps/mp/gametypes_zm/_rank; -#include maps/mp/gametypes_zm/_globallogic; -#include maps/mp/_utility; - -init() //checked changed to match cerberus output -{ - precachestring( &"open_ingame_menu" ); - game[ "menu_team" ] = "team_marinesopfor"; - game[ "menu_initteam_allies" ] = "initteam_marines"; - game[ "menu_initteam_axis" ] = "initteam_opfor"; - game[ "menu_class" ] = "class"; - game[ "menu_changeclass" ] = "changeclass"; - game[ "menu_changeclass_offline" ] = "changeclass"; - game[ "menu_wager_side_bet" ] = "sidebet"; - game[ "menu_wager_side_bet_player" ] = "sidebet_player"; - game[ "menu_changeclass_wager" ] = "changeclass_wager"; - game[ "menu_changeclass_custom" ] = "changeclass_custom"; - game[ "menu_changeclass_barebones" ] = "changeclass_barebones"; - foreach ( team in level.teams ) - { - game[ "menu_changeclass_" + team ] = "changeclass"; - } - game[ "menu_controls" ] = "ingame_controls"; - game[ "menu_options" ] = "ingame_options"; - game[ "menu_leavegame" ] = "popup_leavegame"; - precachemenu( game[ "menu_controls" ] ); - precachemenu( game[ "menu_options" ] ); - precachemenu( game[ "menu_leavegame" ] ); - precachemenu( "scoreboard" ); - precachemenu( "spectate" ); - precachemenu( game[ "menu_team" ] ); - precachemenu( game[ "menu_changeclass_allies" ] ); - precachemenu( game[ "menu_initteam_allies" ] ); - precachemenu( game[ "menu_changeclass_axis" ] ); - precachemenu( game[ "menu_class" ] ); - precachemenu( game[ "menu_changeclass" ] ); - precachemenu( game[ "menu_initteam_axis" ] ); - precachemenu( game[ "menu_changeclass_offline" ] ); - precachemenu( game[ "menu_changeclass_wager" ] ); - precachemenu( game[ "menu_changeclass_custom" ] ); - precachemenu( game[ "menu_changeclass_barebones" ] ); - precachemenu( game[ "menu_wager_side_bet" ] ); - precachemenu( game[ "menu_wager_side_bet_player" ] ); - precachestring( &"MP_HOST_ENDED_GAME" ); - precachestring( &"MP_HOST_ENDGAME_RESPONSE" ); - level thread onplayerconnect(); -} - -onplayerconnect() //checked matches cerberus output -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread onmenuresponse(); - } -} - -onmenuresponse() //checked changed to match cerberus output -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "menuresponse", menu, response ); - if ( response == "back" ) - { - self closemenu(); - self closeingamemenu(); - if ( level.console ) - { - if ( menu == game[ "menu_changeclass" ] || menu == game[ "menu_changeclass_offline" ] || menu == game[ "menu_team" ] || menu == game[ "menu_controls" ] ) - { - if ( isDefined( level.teams[ self.pers[ "team" ] ] ) ) - { - self openmenu( game[ "menu_class" ] ); - } - } - } - continue; - } - if ( response == "changeteam" && level.allow_teamchange == "1" ) - { - self closemenu(); - self closeingamemenu(); - self openmenu( game[ "menu_team" ] ); - } - if ( response == "changeclass_marines_splitscreen" ) - { - self openmenu( "changeclass_marines_splitscreen" ); - } - if ( response == "changeclass_opfor_splitscreen" ) - { - self openmenu( "changeclass_opfor_splitscreen" ); - } - if ( response == "endgame" ) - { - if ( level.splitscreen ) - { - level.skipvote = 1; - if ( !level.gameended ) - { - level thread maps/mp/gametypes_zm/_globallogic::forceend(); - } - } - continue; - } - if ( response == "killserverpc" ) - { - level thread maps/mp/gametypes_zm/_globallogic::killserverpc(); - continue; - } - if ( response == "endround" ) - { - if ( !level.gameended ) - { - self gamehistoryplayerquit(); - level thread maps/mp/gametypes_zm/_globallogic::forceend(); - } - else - { - self closemenu(); - self closeingamemenu(); - self iprintln( &"MP_HOST_ENDGAME_RESPONSE" ); - } - continue; - } - if ( menu == game[ "menu_team" ] && level.allow_teamchange == "1" ) - { - switch( response ) - { - case "autoassign": - self [[ level.autoassign ]]( 1 ); - break; - case "spectator": - self [[ level.spectator ]](); - break; - default: - self [[ level.teammenu ]]( response ); - break; - } - continue; - } - if ( menu == game[ "menu_changeclass" ] || menu == game[ "menu_changeclass_offline" ] || menu == game[ "menu_changeclass_wager" ] || menu == game[ "menu_changeclass_custom" ] || menu == game[ "menu_changeclass_barebones" ] ) - { - self closemenu(); - self closeingamemenu(); - if ( level.rankedmatch && issubstr( response, "custom" ) ) - { - if ( self isitemlocked( maps/mp/gametypes_zm/_rank::getitemindex( "feature_cac" ) ) ) - { - kick( self getentitynumber() ); - } - } - self.selectedclass = 1; - self [[ level.class ]]( response ); - continue; - } - if ( menu == "spectate" ) - { - player = getplayerfromclientnum( int( response ) ); - if ( isDefined( player ) ) - { - self setcurrentspectatorclient( player ); - } - } - } -} - diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_perplayer.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_perplayer.gsc deleted file mode 100644 index a95a168..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_perplayer.gsc +++ /dev/null @@ -1,185 +0,0 @@ -#include maps/mp/_utility; - -init( id, playerbegincallback, playerendcallback ) //checked matches cerberus output -{ - precacheshader( "objpoint_default" ); - handler = spawnstruct(); - handler.id = id; - handler.playerbegincallback = playerbegincallback; - handler.playerendcallback = playerendcallback; - handler.enabled = 0; - handler.players = []; - thread onplayerconnect( handler ); - level.handlerglobalflagval = 0; - return handler; -} - -enable( handler ) //checked partially changed to match cerberus output didn't change while loop to for loop to prevent infinite loop continue bug -{ - if ( handler.enabled ) - { - return; - } - handler.enabled = 1; - level.handlerglobalflagval++; - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - players[ i ].handlerflagval = level.handlerglobalflagval; - } - players = handler.players; - i = 0; - while ( i < players.size ) - { - if ( players[ i ].handlerflagval != level.handlerglobalflagval ) - { - i++; - continue; - } - if ( players[ i ].handlers[ handler.id ].ready ) - { - players[ i ] handleplayer( handler ); - } - i++; - } -} - -disable( handler ) //checked partially changed to match cerberus output didn't change while loop to for loop to prevent infinite loop continue bug -{ - if ( !handler.enabled ) - { - return; - } - handler.enabled = 0; - level.handlerglobalflagval++; - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - players[ i ].handlerflagval = level.handlerglobalflagval; - } - players = handler.players; - i = 0; - while ( i < players.size ) - { - if ( players[ i ].handlerflagval != level.handlerglobalflagval ) - { - i++; - continue; - } - if ( players[ i ].handlers[ handler.id ].ready ) - { - players[ i ] unhandleplayer( handler, 0, 0 ); - } - i++; - } -} - -onplayerconnect( handler ) //checked matches cerberus output -{ - for ( ;; ) - { - level waittill( "connecting", player ); - if ( !isDefined( player.handlers ) ) - { - player.handlers = []; - } - player.handlers[ handler.id ] = spawnstruct(); - player.handlers[ handler.id ].ready = 0; - player.handlers[ handler.id ].handled = 0; - player.handlerflagval = -1; - handler.players[ handler.players.size ] = player; - player thread onplayerdisconnect( handler ); - player thread onplayerspawned( handler ); - player thread onjoinedteam( handler ); - player thread onjoinedspectators( handler ); - player thread onplayerkilled( handler ); - } -} - -onplayerdisconnect( handler ) //checked changed to match cerberus output -{ - self waittill( "disconnect" ); - newplayers = []; - for ( i = 0; i < handler.players.size; i++ ) - { - if ( handler.players[ i ] != self ) - { - newplayers[ newplayers.size ] = handler.players[ i ]; - } - } - handler.players = newplayers; - self thread unhandleplayer( handler, 1, 1 ); -} - -onjoinedteam( handler ) //checked matches cerberus output -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "joined_team" ); - self thread unhandleplayer( handler, 1, 0 ); - } -} - -onjoinedspectators( handler ) //checked matches cerberus output -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "joined_spectators" ); - self thread unhandleplayer( handler, 1, 0 ); - } -} - -onplayerspawned( handler ) //checked matches cerberus output -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread handleplayer( handler ); - } -} - -onplayerkilled( handler ) //checked matches cerberus output -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "killed_player" ); - self thread unhandleplayer( handler, 1, 0 ); - } -} - -handleplayer( handler ) //checked matches cerberus output -{ - self.handlers[ handler.id ].ready = 1; - if ( !handler.enabled ) - { - return; - } - if ( self.handlers[ handler.id ].handled ) - { - return; - } - self.handlers[ handler.id ].handled = 1; - self thread [[ handler.playerbegincallback ]](); -} - -unhandleplayer( handler, unsetready, disconnected ) //checked matches cerberus output -{ - if ( !disconnected && unsetready ) - { - self.handlers[ handler.id ].ready = 0; - } - if ( !self.handlers[ handler.id ].handled ) - { - return; - } - if ( !disconnected ) - { - self.handlers[ handler.id ].handled = 0; - } - self thread [[ handler.playerendcallback ]]( disconnected ); -} - diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_scoreboard.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_scoreboard.gsc deleted file mode 100644 index 9ff2831..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_scoreboard.gsc +++ /dev/null @@ -1,25 +0,0 @@ - -init() //checked matches cerberus output -{ - setdvar( "g_ScoresColor_Spectator", ".25 .25 .25" ); - setdvar( "g_ScoresColor_Free", ".76 .78 .10" ); - setdvar( "g_teamColor_MyTeam", ".4 .7 .4" ); - setdvar( "g_teamColor_EnemyTeam", "1 .315 0.35" ); - setdvar( "g_teamColor_MyTeamAlt", ".35 1 1" ); - setdvar( "g_teamColor_EnemyTeamAlt", "1 .5 0" ); - setdvar( "g_teamColor_Squad", ".315 0.35 1" ); - if ( level.createfx_enabled ) - { - return; - } - if ( sessionmodeiszombiesgame() ) - { - setdvar( "g_TeamIcon_Axis", "faction_cia" ); - setdvar( "g_TeamIcon_Allies", "faction_cdc" ); - } - else - { - setdvar( "g_TeamIcon_Axis", game[ "icons" ][ "axis" ] ); - setdvar( "g_TeamIcon_Allies", game[ "icons" ][ "allies" ] ); - } -} diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_serversettings.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_serversettings.gsc deleted file mode 100644 index cb34b8a..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_serversettings.gsc +++ /dev/null @@ -1,202 +0,0 @@ - -init() //checked matches cerberus output -{ - level.hostname = getDvar( "sv_hostname" ); - if ( level.hostname == "" ) - { - level.hostname = "CoDHost"; - } - setdvar( "sv_hostname", level.hostname ); - setdvar( "ui_hostname", level.hostname ); - makedvarserverinfo( "ui_hostname", "CoDHost" ); - level.motd = getDvar( "scr_motd" ); - if ( level.motd == "" ) - { - level.motd = ""; - } - setdvar( "scr_motd", level.motd ); - setdvar( "ui_motd", level.motd ); - makedvarserverinfo( "ui_motd", "" ); - level.allowvote = getDvar( "g_allowVote" ); - if ( level.allowvote == "" ) - { - level.allowvote = "1"; - } - setdvar( "g_allowvote", level.allowvote ); - setdvar( "ui_allowvote", level.allowvote ); - makedvarserverinfo( "ui_allowvote", "1" ); - level.allow_teamchange = "0"; - if ( sessionmodeisprivate() || !sessionmodeisonlinegame() ) - { - level.allow_teamchange = "1"; - } - setdvar( "ui_allow_teamchange", level.allow_teamchange ); - level.friendlyfire = getgametypesetting( "friendlyfiretype" ); - setdvar( "ui_friendlyfire", level.friendlyfire ); - makedvarserverinfo( "ui_friendlyfire", "0" ); - if ( getDvar( "scr_mapsize" ) == "" ) - { - setdvar( "scr_mapsize", "64" ); - } - else if ( getDvarFloat( "scr_mapsize" ) >= 64 ) - { - setdvar( "scr_mapsize", "64" ); - } - else if ( getDvarFloat( "scr_mapsize" ) >= 32 ) - { - setdvar( "scr_mapsize", "32" ); - } - else if ( getDvarFloat( "scr_mapsize" ) >= 16 ) - { - setdvar( "scr_mapsize", "16" ); - } - else - { - setdvar( "scr_mapsize", "8" ); - } - level.mapsize = getDvarFloat( "scr_mapsize" ); - constraingametype( getDvar( "g_gametype" ) ); - constrainmapsize( level.mapsize ); - for ( ;; ) - { - updateserversettings(); - wait 5; - } -} - -updateserversettings() //checked matches cerberus output -{ - sv_hostname = getDvar( "sv_hostname" ); - if ( level.hostname != sv_hostname ) - { - level.hostname = sv_hostname; - setdvar( "ui_hostname", level.hostname ); - } - scr_motd = getDvar( "scr_motd" ); - if ( level.motd != scr_motd ) - { - level.motd = scr_motd; - setdvar( "ui_motd", level.motd ); - } - g_allowvote = getDvar( "g_allowVote" ); - if ( level.allowvote != g_allowvote ) - { - level.allowvote = g_allowvote; - setdvar( "ui_allowvote", level.allowvote ); - } - scr_friendlyfire = getgametypesetting( "friendlyfiretype" ); - if ( level.friendlyfire != scr_friendlyfire ) - { - level.friendlyfire = scr_friendlyfire; - setdvar( "ui_friendlyfire", level.friendlyfire ); - } -} - -constraingametype( gametype ) //checked partially changed to match cerberus output did not change while loop to for for loop because of infinite loop caused by continues -{ - entities = getentarray(); - i = 0; - while ( i < entities.size ) - { - entity = entities[ i ]; - if ( gametype == "dm" ) - { - if ( isDefined( entity.script_gametype_dm ) && entity.script_gametype_dm != "1" ) - { - entity delete(); - } - i++; - continue; - } - if ( gametype == "tdm" ) - { - if ( isDefined( entity.script_gametype_tdm ) && entity.script_gametype_tdm != "1" ) - { - entity delete(); - } - i++; - continue; - } - if ( gametype == "ctf" ) - { - if ( isDefined( entity.script_gametype_ctf ) && entity.script_gametype_ctf != "1" ) - { - entity delete(); - } - i++; - continue; - } - if ( gametype == "hq" ) - { - if ( isDefined( entity.script_gametype_hq ) && entity.script_gametype_hq != "1" ) - { - entity delete(); - } - i++; - continue; - } - if ( gametype == "sd" ) - { - if ( isDefined( entity.script_gametype_sd ) && entity.script_gametype_sd != "1" ) - { - entity delete(); - } - i++; - continue; - } - if ( gametype == "koth" ) - { - if ( isDefined( entity.script_gametype_koth ) && entity.script_gametype_koth != "1" ) - { - entity delete(); - } - } - i++; - } -} - -constrainmapsize( mapsize ) //checked partially changed to match cerberus output did not change while loop to for for loop because of infinite loop caused by continues -{ - entities = getentarray(); - i = 0; - while ( i < entities.size ) - { - entity = entities[ i ]; - if ( int( mapsize ) == 8 ) - { - if ( isDefined( entity.script_mapsize_08 ) && entity.script_mapsize_08 != "1" ) - { - entity delete(); - } - i++; - continue; - } - if ( int( mapsize ) == 16 ) - { - if ( isDefined( entity.script_mapsize_16 ) && entity.script_mapsize_16 != "1" ) - { - entity delete(); - } - i++; - continue; - } - if ( int( mapsize ) == 32 ) - { - if ( isDefined( entity.script_mapsize_32 ) && entity.script_mapsize_32 != "1" ) - { - entity delete(); - } - i++; - continue; - } - if ( int( mapsize ) == 64 ) - { - if ( isDefined( entity.script_mapsize_64 ) && entity.script_mapsize_64 != "1" ) - { - entity delete(); - } - } - i++; - } -} - diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_shellshock.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_shellshock.gsc deleted file mode 100644 index c718e80..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_shellshock.gsc +++ /dev/null @@ -1,65 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - precacheshellshock( "frag_grenade_mp" ); - precacheshellshock( "damage_mp" ); - precacherumble( "artillery_rumble" ); - precacherumble( "grenade_rumble" ); -} - -shellshockondamage( cause, damage ) -{ - if ( cause != "MOD_EXPLOSIVE" && cause != "MOD_GRENADE" && cause != "MOD_GRENADE_SPLASH" || cause == "MOD_PROJECTILE" && cause == "MOD_PROJECTILE_SPLASH" ) - { - time = 0; - if ( damage >= 90 ) - { - time = 4; - } - else if ( damage >= 50 ) - { - time = 3; - } - else if ( damage >= 25 ) - { - time = 2; - } - else - { - if ( damage > 10 ) - { - time = 2; - } - } - if ( time ) - { - if ( self mayapplyscreeneffect() ) - { - self shellshock( "frag_grenade_mp", 0.5 ); - } - } - } -} - -endondeath() -{ - self waittill( "death" ); - waittillframeend; - self notify( "end_explode" ); -} - -endontimer( timer ) -{ - self endon( "disconnect" ); - wait timer; - self notify( "end_on_timer" ); -} - -rcbomb_earthquake( position ) -{ - playrumbleonposition( "grenade_rumble", position ); - earthquake( 0.5, 0.5, self.origin, 512 ); -} - diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_spawning.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_spawning.gsc deleted file mode 100644 index ce29a09..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_spawning.gsc +++ /dev/null @@ -1,1073 +0,0 @@ -#include maps/mp/gametypes_zm/_spawnlogic; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - if ( !isDefined( level.gamemodespawndvars ) ) - { - level.gamemodespawndvars = ::default_gamemodespawndvars; - } - level init_spawn_system(); - level.recently_deceased = []; - _a74 = level.teams; - _k74 = getFirstArrayKey( _a74 ); - while ( isDefined( _k74 ) ) - { - team = _a74[ _k74 ]; - level.recently_deceased[ team ] = spawn_array_struct(); - _k74 = getNextArrayKey( _a74, _k74 ); - } - level thread onplayerconnect(); - if ( getDvar( #"AD6C19FE" ) == "" ) - { - level.spawn_visibility_check_max = 20; - } - else - { - level.spawn_visibility_check_max = getDvarInt( #"AD6C19FE" ); - } - level.spawnprotectiontime = getgametypesetting( "spawnprotectiontime" ); -/# - setdvar( "scr_debug_spawn_player", "" ); - setdvar( "scr_debug_render_spawn_data", "1" ); - setdvar( "scr_debug_render_snapshotmode", "0" ); - setdvar( "scr_spawn_point_test_mode", "0" ); - level.test_spawn_point_index = 0; - setdvar( "scr_debug_render_spawn_text", "1" ); -#/ - return; -} - -default_gamemodespawndvars( reset_dvars ) -{ -} - -init_spawn_system() -{ - level.spawnsystem = spawnstruct(); - spawnsystem = level.spawnsystem; - level get_player_spawning_dvars( 1 ); - level thread initialize_player_spawning_dvars(); - spawnsystem.einfluencer_shape_sphere = 0; - spawnsystem.einfluencer_shape_cylinder = 1; - spawnsystem.einfluencer_type_normal = 0; - spawnsystem.einfluencer_type_player = 1; - spawnsystem.einfluencer_type_weapon = 2; - spawnsystem.einfluencer_type_dog = 3; - spawnsystem.einfluencer_type_vehicle = 4; - spawnsystem.einfluencer_type_game_mode = 6; - spawnsystem.einfluencer_type_enemy_spawned = 7; - spawnsystem.einfluencer_curve_constant = 0; - spawnsystem.einfluencer_curve_linear = 1; - spawnsystem.einfluencer_curve_steep = 2; - spawnsystem.einfluencer_curve_inverse_linear = 3; - spawnsystem.einfluencer_curve_negative_to_positive = 4; - spawnsystem.ispawn_teammask = []; - spawnsystem.ispawn_teammask_free = 1; - spawnsystem.ispawn_teammask[ "free" ] = spawnsystem.ispawn_teammask_free; - all = spawnsystem.ispawn_teammask_free; - count = 1; - _a146 = level.teams; - _k146 = getFirstArrayKey( _a146 ); - while ( isDefined( _k146 ) ) - { - team = _a146[ _k146 ]; - spawnsystem.ispawn_teammask[ team ] = 1 << count; - all |= spawnsystem.ispawn_teammask[ team ]; - count++; - _k146 = getNextArrayKey( _a146, _k146 ); - } - spawnsystem.ispawn_teammask[ "all" ] = all; -} - -onplayerconnect() -{ - level endon( "game_ended" ); - for ( ;; ) - { - level waittill( "connecting", player ); - player setentertime( getTime() ); - player thread onplayerspawned(); - player thread ondisconnect(); - player thread onteamchange(); - player thread ongrenadethrow(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - level endon( "game_ended" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread initialspawnprotection( "specialty_nottargetedbyairsupport", 1 ); - self thread initialspawnprotection( "specialty_nokillstreakreticle", 0 ); - self thread initialspawnprotection( "specialty_nottargettedbysentry", 0 ); - if ( isDefined( self.pers[ "hasRadar" ] ) && self.pers[ "hasRadar" ] ) - { - self.hasspyplane = 1; - } - self enable_player_influencers( 1 ); - self thread ondeath(); - } -} - -ondeath() -{ - self endon( "disconnect" ); - level endon( "game_ended" ); - self waittill( "death" ); - self enable_player_influencers( 0 ); - self create_body_influencers(); -} - -onteamchange() -{ - self endon( "disconnect" ); - level endon( "game_ended" ); - while ( 1 ) - { - self waittill( "joined_team" ); - self player_influencers_set_team(); - wait 0,05; - } -} - -ongrenadethrow() -{ - self endon( "disconnect" ); - level endon( "game_ended" ); - while ( 1 ) - { - self waittill( "grenade_fire", grenade, weaponname ); - level thread create_grenade_influencers( self.pers[ "team" ], weaponname, grenade ); - wait 0,05; - } -} - -ondisconnect() -{ - level endon( "game_ended" ); - self waittill( "disconnect" ); -} - -get_score_curve_index( curve ) -{ - switch( curve ) - { - case "linear": - return level.spawnsystem.einfluencer_curve_linear; - case "steep": - return level.spawnsystem.einfluencer_curve_steep; - case "inverse_linear": - return level.spawnsystem.einfluencer_curve_linear; - case "negative_to_positive": - return level.spawnsystem.einfluencer_curve_negative_to_positive; - case "constant": - default: - return level.spawnsystem.einfluencer_curve_constant; - } -} - -get_influencer_type_index( curve ) -{ -} - -create_player_influencers() -{ -/# - assert( !isDefined( self.influencer_enemy_sphere ) ); -#/ -/# - assert( !isDefined( self.influencer_weapon_cylinder ) ); -#/ -/# - if ( level.teambased ) - { - assert( !isDefined( self.influencer_friendly_sphere ) ); - } -#/ -/# - if ( level.teambased ) - { - assert( !isDefined( self.influencer_friendly_cylinder ) ); - } -#/ - if ( !level.teambased ) - { - team_mask = level.spawnsystem.ispawn_teammask_free; - other_team_mask = level.spawnsystem.ispawn_teammask_free; - weapon_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else if ( isDefined( self.pers[ "team" ] ) ) - { - team = self.pers[ "team" ]; - team_mask = getteammask( team ); - other_team_mask = getotherteamsmask( team ); - weapon_team_mask = getotherteamsmask( team ); - } - else - { - team_mask = 0; - other_team_mask = 0; - weapon_team_mask = 0; - } - if ( level.hardcoremode ) - { - weapon_team_mask |= team_mask; - } - angles = self.angles; - origin = self.origin; - up = ( 0, 0, 0 ); - forward = ( 0, 0, 0 ); - cylinder_forward = up; - cylinder_up = forward; - self.influencer_enemy_sphere = addsphereinfluencer( level.spawnsystem.einfluencer_type_player, origin, level.spawnsystem.enemy_influencer_radius, level.spawnsystem.enemy_influencer_score, other_team_mask, "enemy,r,s", get_score_curve_index( level.spawnsystem.enemy_influencer_score_curve ), 0, self ); - if ( level.teambased ) - { - cylinder_up = -1 * forward; - self.influencer_friendly_sphere = addsphereinfluencer( level.spawnsystem.einfluencer_type_player, origin, level.spawnsystem.friend_weak_influencer_radius, level.spawnsystem.friend_weak_influencer_score, team_mask, "friend_weak,r,s", get_score_curve_index( level.spawnsystem.friend_weak_influencer_score_curve ), 0, self ); - } - self.spawn_influencers_created = 1; - if ( !isDefined( self.pers[ "team" ] ) || self.pers[ "team" ] == "spectator" ) - { - self enable_player_influencers( 0 ); - } -} - -remove_player_influencers() -{ - if ( level.teambased && isDefined( self.influencer_friendly_sphere ) ) - { - removeinfluencer( self.influencer_friendly_sphere ); - self.influencer_friendly_sphere = undefined; - } - if ( level.teambased && isDefined( self.influencer_friendly_cylinder ) ) - { - removeinfluencer( self.influencer_friendly_cylinder ); - self.influencer_friendly_cylinder = undefined; - } - if ( isDefined( self.influencer_enemy_sphere ) ) - { - removeinfluencer( self.influencer_enemy_sphere ); - self.influencer_enemy_sphere = undefined; - } - if ( isDefined( self.influencer_weapon_cylinder ) ) - { - removeinfluencer( self.influencer_weapon_cylinder ); - self.influencer_weapon_cylinder = undefined; - } -} - -enable_player_influencers( enabled ) -{ - if ( !isDefined( self.spawn_influencers_created ) ) - { - self create_player_influencers(); - } - if ( isDefined( self.influencer_friendly_sphere ) ) - { - enableinfluencer( self.influencer_friendly_sphere, enabled ); - } - if ( isDefined( self.influencer_friendly_cylinder ) ) - { - enableinfluencer( self.influencer_friendly_cylinder, enabled ); - } - if ( isDefined( self.influencer_enemy_sphere ) ) - { - enableinfluencer( self.influencer_enemy_sphere, enabled ); - } - if ( isDefined( self.influencer_weapon_cylinder ) ) - { - enableinfluencer( self.influencer_weapon_cylinder, enabled ); - } -} - -player_influencers_set_team() -{ - if ( !level.teambased ) - { - team_mask = level.spawnsystem.ispawn_teammask_free; - other_team_mask = level.spawnsystem.ispawn_teammask_free; - weapon_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - team = self.pers[ "team" ]; - team_mask = getteammask( team ); - other_team_mask = getotherteamsmask( team ); - weapon_team_mask = getotherteamsmask( team ); - } - if ( level.friendlyfire != 0 && level.teambased ) - { - weapon_team_mask |= team_mask; - } - if ( isDefined( self.influencer_friendly_sphere ) ) - { - setinfluencerteammask( self.influencer_friendly_sphere, team_mask ); - } - if ( isDefined( self.influencer_friendly_cylinder ) ) - { - setinfluencerteammask( self.influencer_friendly_cylinder, team_mask ); - } - if ( isDefined( self.influencer_enemy_sphere ) ) - { - setinfluencerteammask( self.influencer_enemy_sphere, other_team_mask ); - } - if ( isDefined( self.influencer_weapon_cylinder ) ) - { - setinfluencerteammask( self.influencer_weapon_cylinder, weapon_team_mask ); - } -} - -create_body_influencers() -{ - if ( level.teambased ) - { - team_mask = getteammask( self.pers[ "team" ] ); - } - else - { - team_mask = level.spawnsystem.ispawn_teammask_free; - } - addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.dead_friend_influencer_radius, level.spawnsystem.dead_friend_influencer_score, team_mask, "dead_friend,r,s", get_score_curve_index( level.spawnsystem.dead_friend_influencer_score_curve ), level.spawnsystem.dead_friend_influencer_timeout_seconds ); -} - -create_grenade_influencers( parent_team, weaponname, grenade ) -{ - pixbeginevent( "create_grenade_influencers" ); - if ( !level.teambased ) - { - weapon_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - weapon_team_mask = getotherteamsmask( parent_team ); - if ( level.friendlyfire ) - { - weapon_team_mask |= getteammask( parent_team ); - } - } - if ( issubstr( weaponname, "napalmblob" ) || issubstr( weaponname, "gl_" ) ) - { - pixendevent(); - return; - } - timeout = 0; - if ( weaponname == "tabun_gas_mp" ) - { - timeout = 7; - } - if ( isDefined( grenade.origin ) ) - { - if ( weaponname == "claymore_mp" || weaponname == "bouncingbetty_mp" ) - { - addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, grenade.origin, level.spawnsystem.claymore_influencer_radius, level.spawnsystem.claymore_influencer_score, weapon_team_mask, "claymore,r,s", get_score_curve_index( level.spawnsystem.claymore_influencer_score_curve ), timeout, grenade ); - } - else - { - addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, grenade.origin, level.spawnsystem.grenade_influencer_radius, level.spawnsystem.grenade_influencer_score, weapon_team_mask, "grenade,r,s", get_score_curve_index( level.spawnsystem.grenade_influencer_score_curve ), timeout, grenade ); - } - } - pixendevent(); -} - -create_napalm_fire_influencers( point, direction, parent_team, duration ) -{ - timeout = duration; - weapon_team_mask = 0; - offset = vectorScale( anglesToForward( direction ), 1100 ); - addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point + ( 2 * offset ), level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); - addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point + offset, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); - addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); - addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point - offset, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); -} - -create_auto_turret_influencer( point, parent_team, angles ) -{ - if ( !level.teambased ) - { - weapon_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - weapon_team_mask = getotherteamsmask( parent_team ); - } - projected_point = point + vectorScale( anglesToForward( angles ), level.spawnsystem.auto_turret_influencer_radius * 0,7 ); - influencerid = addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, projected_point, level.spawnsystem.auto_turret_influencer_radius, level.spawnsystem.auto_turret_influencer_score, weapon_team_mask, "auto_turret,r,s", get_score_curve_index( level.spawnsystem.auto_turret_influencer_score_curve ) ); - return influencerid; -} - -create_dog_influencers() -{ - if ( !level.teambased ) - { - dog_enemy_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - dog_enemy_team_mask = getotherteamsmask( self.aiteam ); - } - addsphereinfluencer( level.spawnsystem.einfluencer_type_dog, self.origin, level.spawnsystem.dog_influencer_radius, level.spawnsystem.dog_influencer_score, dog_enemy_team_mask, "dog,r,s", get_score_curve_index( level.spawnsystem.dog_influencer_score_curve ), 0, self ); -} - -create_helicopter_influencers( parent_team ) -{ - if ( !level.teambased ) - { - team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - team_mask = getotherteamsmask( parent_team ); - } - self.influencer_helicopter_cylinder = addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, ( 0, 0, 0 ), ( 0, 0, 0 ), level.spawnsystem.helicopter_influencer_radius, level.spawnsystem.helicopter_influencer_length, level.spawnsystem.helicopter_influencer_score, team_mask, "helicopter,r,s", get_score_curve_index( level.spawnsystem.helicopter_influencer_score_curve ), 0, self ); -} - -remove_helicopter_influencers() -{ - if ( isDefined( self.influencer_helicopter_cylinder ) ) - { - removeinfluencer( self.influencer_helicopter_cylinder ); - } - self.influencer_helicopter_cylinder = undefined; -} - -create_tvmissile_influencers( parent_team ) -{ - if ( !level.teambased || is_hardcore() ) - { - team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - team_mask = getotherteamsmask( parent_team ); - } - self.influencer_tvmissile_cylinder = addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, ( 0, 0, 0 ), ( 0, 0, 0 ), level.spawnsystem.tvmissile_influencer_radius, level.spawnsystem.tvmissile_influencer_length, level.spawnsystem.tvmissile_influencer_score, team_mask, "tvmissile,r,s", get_score_curve_index( level.spawnsystem.tvmissile_influencer_score_curve ), 0, self ); -} - -remove_tvmissile_influencers() -{ - if ( isDefined( self.influencer_tvmissile_cylinder ) ) - { - removeinfluencer( self.influencer_tvmissile_cylinder ); - } - self.influencer_tvmissile_cylinder = undefined; -} - -create_artillery_influencers( point, radius ) -{ - weapon_team_mask = 0; - if ( radius < 0 ) - { - thisradius = level.spawnsystem.artillery_influencer_radius; - } - else - { - thisradius = radius; - } - return addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, point + vectorScale( ( 0, 0, 0 ), 2000 ), ( 0, 0, 0 ), ( 0, 0, 0 ), thisradius, 5000, level.spawnsystem.artillery_influencer_score, weapon_team_mask, "artillery,s,r", get_score_curve_index( level.spawnsystem.artillery_influencer_score_curve ), 7 ); -} - -create_vehicle_influencers() -{ - weapon_team_mask = 0; - vehicleradius = 144; - cylinderlength = level.spawnsystem.vehicle_influencer_lead_seconds; - up = ( 0, 0, 0 ); - forward = ( 0, 0, 0 ); - cylinder_forward = up; - cylinder_up = forward; - return addcylinderinfluencer( level.spawnsystem.einfluencer_type_vehicle, self.origin, cylinder_forward, cylinder_up, vehicleradius, cylinderlength, level.spawnsystem.vehicle_influencer_score, weapon_team_mask, "vehicle,s", get_score_curve_index( level.spawnsystem.vehicle_influencer_score_curve ), 0, self ); -} - -create_rcbomb_influencers( team ) -{ - if ( !level.teambased ) - { - other_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - other_team_mask = getotherteamsmask( team ); - } - return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.rcbomb_influencer_radius, level.spawnsystem.rcbomb_influencer_score, other_team_mask, "rcbomb,r,s", get_score_curve_index( level.spawnsystem.rcbomb_influencer_score_curve ), 0, self ); -} - -create_qrdrone_influencers( team ) -{ - if ( !level.teambased ) - { - other_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - other_team_mask = getotherteamsmask( team ); - } - self.influencer_qrdrone_cylinder = addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, ( 0, 0, 0 ), ( 0, 0, 0 ), level.spawnsystem.qrdrone_cylinder_influencer_radius, level.spawnsystem.qrdrone_cylinder_influencer_length, level.spawnsystem.qrdrone_cylinder_influencer_score, other_team_mask, "qrdrone_cyl,r,s", get_score_curve_index( level.spawnsystem.qrdrone_cylinder_influencer_score_curve ), 0, self ); - return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.qrdrone_influencer_radius, level.spawnsystem.qrdrone_influencer_score, other_team_mask, "qrdrone,r,s", get_score_curve_index( level.spawnsystem.qrdrone_influencer_score_curve ), 0, self ); -} - -create_aitank_influencers( team ) -{ - if ( !level.teambased ) - { - other_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - other_team_mask = getotherteamsmask( team ); - } - return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.aitank_influencer_radius, level.spawnsystem.aitank_influencer_score, other_team_mask, "aitank,r,s", get_score_curve_index( level.spawnsystem.aitank_influencer_score_curve ), 0, self ); -} - -create_pegasus_influencer( origin, team ) -{ - if ( !level.teambased ) - { - other_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - other_team_mask = getotherteamsmask( team ); - } - return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, origin, level.spawnsystem.pegasus_influencer_radius, level.spawnsystem.pegasus_influencer_score, other_team_mask, "pegasus,r,s", get_score_curve_index( level.spawnsystem.pegasus_influencer_score_curve ), 0 ); -} - -create_map_placed_influencers() -{ - staticinfluencerents = getentarray( "mp_uspawn_influencer", "classname" ); - i = 0; - while ( i < staticinfluencerents.size ) - { - staticinfluencerent = staticinfluencerents[ i ]; - if ( isDefined( staticinfluencerent.script_gameobjectname ) && staticinfluencerent.script_gameobjectname == "twar" ) - { - i++; - continue; - } - else - { - create_map_placed_influencer( staticinfluencerent ); - } - i++; - } -} - -create_map_placed_influencer( influencer_entity, optional_score_override ) -{ - influencer_id = -1; - if ( isDefined( influencer_entity.script_shape ) && isDefined( influencer_entity.script_score ) && isDefined( influencer_entity.script_score_curve ) ) - { - switch( influencer_entity.script_shape ) - { - case "sphere": - if ( isDefined( influencer_entity.radius ) ) - { - if ( isDefined( optional_score_override ) ) - { - score = optional_score_override; - } - else - { - score = influencer_entity.script_score; - } - influencer_id = addsphereinfluencer( level.spawnsystem.einfluencer_type_game_mode, influencer_entity.origin, influencer_entity.radius, score, getteammask( influencer_entity.script_team ), "*map_defined", get_score_curve_index( influencer_entity.script_score_curve ) ); - } - else - { -/# - assertmsg( "Radiant-placed sphere spawn influencers require 'radius' parameter" ); -#/ - } - break; - case "cylinder": - if ( isDefined( influencer_entity.radius ) && isDefined( influencer_entity.height ) ) - { - if ( isDefined( optional_score_override ) ) - { - score = optional_score_override; - } - else - { - score = influencer_entity.script_score; - } - influencer_id = addcylinderinfluencer( level.spawnsystem.einfluencer_type_game_mode, influencer_entity.origin, anglesToForward( influencer_entity.angles ), anglesToUp( influencer_entity.angles ), influencer_entity.radius, influencer_entity.height, score, getteammask( influencer_entity.script_team ), "*map_defined", get_score_curve_index( influencer_entity.script_score_curve ) ); - } - else - { -/# - assertmsg( "Radiant-placed cylinder spawn influencers require 'radius' and 'height' parameters" ); -#/ - } - break; - default: -/# - assertmsg( "Unsupported script_shape value ("" + influencer_entity.script_shape + "") for unified spawning system static influencer. Supported shapes are "cylinder" and "sphere"." ); -#/ - break; - } - } - else - { -/# - assertmsg( "Radiant-placed spawn influencers require 'script_shape', 'script_score' and 'script_score_curve' parameters" ); -#/ - } - return influencer_id; -} - -create_enemy_spawned_influencers( origin, team ) -{ - if ( !level.teambased ) - { - other_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - other_team_mask = getotherteamsmask( team ); - } - return addsphereinfluencer( level.spawnsystem.einfluencer_type_enemy_spawned, origin, level.spawnsystem.enemy_spawned_influencer_radius, level.spawnsystem.enemy_spawned_influencer_score, other_team_mask, "enemy_spawned,r,s", get_score_curve_index( level.spawnsystem.enemy_spawned_influencer_score_curve ), 7 ); -} - -updateallspawnpoints() -{ - _a1046 = level.teams; - _k1046 = getFirstArrayKey( _a1046 ); - while ( isDefined( _k1046 ) ) - { - team = _a1046[ _k1046 ]; - gatherspawnentities( team ); - _k1046 = getNextArrayKey( _a1046, _k1046 ); - } - clearspawnpoints(); - if ( level.teambased ) - { - _a1055 = level.teams; - _k1055 = getFirstArrayKey( _a1055 ); - while ( isDefined( _k1055 ) ) - { - team = _a1055[ _k1055 ]; - addspawnpoints( team, level.unified_spawn_points[ team ].a ); - _k1055 = getNextArrayKey( _a1055, _k1055 ); - } - } - else _a1062 = level.teams; - _k1062 = getFirstArrayKey( _a1062 ); - while ( isDefined( _k1062 ) ) - { - team = _a1062[ _k1062 ]; - addspawnpoints( "free", level.unified_spawn_points[ team ].a ); - _k1062 = getNextArrayKey( _a1062, _k1062 ); - } - remove_unused_spawn_entities(); -} - -initialize_player_spawning_dvars() -{ -/# - reset_dvars = 1; - while ( 1 ) - { - get_player_spawning_dvars( reset_dvars ); - reset_dvars = 0; - wait 2; -#/ - } -} - -get_player_spawning_dvars( reset_dvars ) -{ - k_player_height = get_player_height(); - player_height_times_10 = "" + ( 10 * k_player_height ); - ss = level.spawnsystem; - player_influencer_radius = 15 * k_player_height; - player_influencer_score = 150; - dog_influencer_radius = 10 * k_player_height; - dog_influencer_score = 150; - ss.script_based_influencer_system = set_dvar_int_if_unset( "scr_script_based_influencer_system", "0", reset_dvars ); - ss.randomness_range = set_dvar_float_if_unset( "scr_spawn_randomness_range", "10", reset_dvars ); - ss.objective_facing_bonus = set_dvar_float_if_unset( "scr_spawn_objective_facing_bonus", "50", reset_dvars ); - ss.friend_weak_influencer_score = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_score", "10", reset_dvars ); - ss.friend_weak_influencer_score_curve = set_dvar_if_unset( "scr_spawn_friend_weak_influencer_score_curve", "steep", reset_dvars ); - ss.friend_weak_influencer_radius = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_radius", player_height_times_10, reset_dvars ); - ss.enemy_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_score", "-150", reset_dvars ); - ss.enemy_influencer_score_curve = set_dvar_if_unset( "scr_spawn_enemy_influencer_score_curve", "steep", reset_dvars ); - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2600", reset_dvars ); - ss.dead_friend_influencer_timeout_seconds = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_timeout_seconds", "15", reset_dvars ); - ss.dead_friend_influencer_count = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_count", "7", reset_dvars ); - ss.dead_friend_influencer_score = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_score", "-100", reset_dvars ); - ss.dead_friend_influencer_score_curve = set_dvar_if_unset( "scr_spawn_dead_friend_influencer_score_curve", "steep", reset_dvars ); - ss.dead_friend_influencer_radius = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_radius", player_height_times_10, reset_dvars ); - ss.vehicle_influencer_score = set_dvar_float_if_unset( "scr_spawn_vehicle_influencer_score", "-50", reset_dvars ); - ss.vehicle_influencer_score_curve = set_dvar_if_unset( "scr_spawn_vehicle_influencer_score_curve", "linear", reset_dvars ); - ss.vehicle_influencer_lead_seconds = set_dvar_float_if_unset( "scr_spawn_vehicle_influencer_lead_seconds", "3", reset_dvars ); - ss.dog_influencer_score = set_dvar_float_if_unset( "scr_spawn_dog_influencer_score", "-150", reset_dvars ); - ss.dog_influencer_score_curve = set_dvar_if_unset( "scr_spawn_dog_influencer_score_curve", "steep", reset_dvars ); - ss.dog_influencer_radius = set_dvar_float_if_unset( "scr_spawn_dog_influencer_radius", "" + ( 15 * k_player_height ), reset_dvars ); - ss.artillery_influencer_score = set_dvar_float_if_unset( "scr_spawn_artillery_influencer_score", "-600", reset_dvars ); - ss.artillery_influencer_score_curve = set_dvar_if_unset( "scr_spawn_artillery_influencer_score_curve", "linear", reset_dvars ); - ss.artillery_influencer_radius = set_dvar_float_if_unset( "scr_spawn_artillery_influencer_radius", "1200", reset_dvars ); - ss.grenade_influencer_score = set_dvar_float_if_unset( "scr_spawn_grenade_influencer_score", "-300", reset_dvars ); - ss.grenade_influencer_score_curve = set_dvar_if_unset( "scr_spawn_grenade_influencer_score_curve", "linear", reset_dvars ); - ss.grenade_influencer_radius = set_dvar_float_if_unset( "scr_spawn_grenade_influencer_radius", "" + ( 8 * k_player_height ), reset_dvars ); - ss.grenade_endpoint_influencer_score = set_dvar_float_if_unset( "scr_spawn_grenade_endpoint_influencer_score", "-300", reset_dvars ); - ss.grenade_endpoint_influencer_score_curve = set_dvar_if_unset( "scr_spawn_grenade_endpoint_influencer_score_curve", "linear", reset_dvars ); - ss.grenade_endpoint_influencer_radius = set_dvar_float_if_unset( "scr_spawn_grenade_endpoint_influencer_radius", "" + ( 8 * k_player_height ), reset_dvars ); - ss.claymore_influencer_score = set_dvar_float_if_unset( "scr_spawn_claymore_influencer_score", "-150", reset_dvars ); - ss.claymore_influencer_score_curve = set_dvar_if_unset( "scr_spawn_claymore_influencer_score_curve", "steep", reset_dvars ); - ss.claymore_influencer_radius = set_dvar_float_if_unset( "scr_spawn_claymore_influencer_radius", "" + ( 9 * k_player_height ), reset_dvars ); - ss.napalm_influencer_score = set_dvar_float_if_unset( "scr_spawn_napalm_influencer_score", "-500", reset_dvars ); - ss.napalm_influencer_score_curve = set_dvar_if_unset( "scr_spawn_napalm_influencer_score_curve", "linear", reset_dvars ); - ss.napalm_influencer_radius = set_dvar_float_if_unset( "scr_spawn_napalm_influencer_radius", "" + 750, reset_dvars ); - ss.auto_turret_influencer_score = set_dvar_float_if_unset( "scr_spawn_auto_turret_influencer_score", "-650", reset_dvars ); - ss.auto_turret_influencer_score_curve = set_dvar_if_unset( "scr_spawn_auto_turret_influencer_score_curve", "linear", reset_dvars ); - ss.auto_turret_influencer_radius = set_dvar_float_if_unset( "scr_spawn_auto_turret_influencer_radius", "" + 1200, reset_dvars ); - ss.rcbomb_influencer_score = set_dvar_float_if_unset( "scr_spawn_rcbomb_influencer_score", "-200", reset_dvars ); - ss.rcbomb_influencer_score_curve = set_dvar_if_unset( "scr_spawn_rcbomb_influencer_score_curve", "steep", reset_dvars ); - ss.rcbomb_influencer_radius = set_dvar_float_if_unset( "scr_spawn_rcbomb_influencer_radius", "" + ( 25 * k_player_height ), reset_dvars ); - ss.qrdrone_influencer_score = set_dvar_float_if_unset( "scr_spawn_qrdrone_influencer_score", "-200", reset_dvars ); - ss.qrdrone_influencer_score_curve = set_dvar_if_unset( "scr_spawn_qrdrone_influencer_score_curve", "steep", reset_dvars ); - ss.qrdrone_influencer_radius = set_dvar_float_if_unset( "scr_spawn_qrdrone_influencer_radius", "" + ( 25 * k_player_height ), reset_dvars ); - ss.qrdrone_cylinder_influencer_score = set_dvar_float_if_unset( "scr_spawn_qrdrone_cylinder_influencer_score", "-300", reset_dvars ); - ss.qrdrone_cylinder_influencer_score_curve = set_dvar_if_unset( "scr_spawn_qrdrone_cylinder_influencer_score_curve", "linear", reset_dvars ); - ss.qrdrone_cylinder_influencer_radius = set_dvar_float_if_unset( "scr_spawn_qrdrone_cylinder_influencer_radius", 1000, reset_dvars ); - ss.qrdrone_cylinder_influencer_length = set_dvar_float_if_unset( "scr_spawn_qrdrone_cylinder_influencer_length", 2000, reset_dvars ); - ss.aitank_influencer_score = set_dvar_float_if_unset( "scr_spawn_aitank_influencer_score", "-200", reset_dvars ); - ss.aitank_influencer_score_curve = set_dvar_if_unset( "scr_spawn_aitank_influencer_score_curve", "linear", reset_dvars ); - ss.aitank_influencer_radius = set_dvar_float_if_unset( "scr_spawn_aitank_influencer_radius", "" + ( 25 * k_player_height ), reset_dvars ); - ss.enemy_spawned_influencer_score_curve = set_dvar_if_unset( "scr_spawn_enemy_spawned_influencer_score_curve", "constant", reset_dvars ); - if ( level.teambased ) - { - ss.enemy_spawned_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_score", "-200", reset_dvars ); - ss.enemy_spawned_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_radius", "" + 1100, reset_dvars ); - } - else - { - ss.enemy_spawned_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_score", "-100", reset_dvars ); - ss.enemy_spawned_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_radius", "" + 400, reset_dvars ); - } - ss.helicopter_influencer_score = set_dvar_float_if_unset( "scr_spawn_helicopter_influencer_score", "-500", reset_dvars ); - ss.helicopter_influencer_score_curve = set_dvar_if_unset( "scr_spawn_helicopter_influencer_score_curve", "linear", reset_dvars ); - ss.helicopter_influencer_radius = set_dvar_float_if_unset( "scr_spawn_helicopter_influencer_radius", "" + 2000, reset_dvars ); - ss.helicopter_influencer_length = set_dvar_float_if_unset( "scr_spawn_helicopter_influencer_length", "" + 3500, reset_dvars ); - ss.tvmissile_influencer_score = set_dvar_float_if_unset( "scr_spawn_tvmissile_influencer_score", "-400", reset_dvars ); - ss.tvmissile_influencer_score_curve = set_dvar_if_unset( "scr_spawn_tvmissile_influencer_score_curve", "linear", reset_dvars ); - ss.tvmissile_influencer_radius = set_dvar_float_if_unset( "scr_spawn_tvmissile_influencer_radius", "" + 2000, reset_dvars ); - ss.tvmissile_influencer_length = set_dvar_float_if_unset( "scr_spawn_tvmissile_influencer_length", "" + 3000, reset_dvars ); - ss.pegasus_influencer_score = set_dvar_float_if_unset( "scr_spawn_pegasus_influencer_score", "-250", reset_dvars ); - ss.pegasus_influencer_score_curve = set_dvar_if_unset( "scr_spawn_pegasus_influencer_score_curve", "linear", reset_dvars ); - ss.pegasus_influencer_radius = set_dvar_float_if_unset( "scr_spawn_pegasus_influencer_radius", "" + ( 20 * k_player_height ), reset_dvars ); - if ( !isDefined( ss.unifiedsideswitching ) ) - { - ss.unifiedsideswitching = 1; - } - set_dvar_int_if_unset( "spawnsystem_allow_non_team_spawns", "0", reset_dvars ); - [[ level.gamemodespawndvars ]]( reset_dvars ); - if ( isDefined( level.levelspawndvars ) ) - { - [[ level.levelspawndvars ]]( reset_dvars ); - } - setspawnpointrandomvariation( ss.randomness_range ); -} - -level_use_unified_spawning( use ) -{ -} - -onspawnplayer_unified( predictedspawn ) -{ - if ( !isDefined( predictedspawn ) ) - { - predictedspawn = 0; - } -/# - if ( getDvarInt( "scr_spawn_point_test_mode" ) != 0 ) - { - spawn_point = get_debug_spawnpoint( self ); - self spawn( spawn_point.origin, spawn_point.angles ); - return; -#/ - } - use_new_spawn_system = 0; - initial_spawn = 1; - if ( isDefined( self.uspawn_already_spawned ) ) - { - initial_spawn = !self.uspawn_already_spawned; - } - if ( level.usestartspawns ) - { - use_new_spawn_system = 0; - } - if ( level.gametype == "sd" ) - { - use_new_spawn_system = 0; - } - set_dvar_if_unset( "scr_spawn_force_unified", "0" ); - [[ level.onspawnplayer ]]( predictedspawn ); - if ( !predictedspawn ) - { - self.uspawn_already_spawned = 1; - } - return; -} - -getspawnpoint( player_entity, predictedspawn ) -{ - if ( !isDefined( predictedspawn ) ) - { - predictedspawn = 0; - } - if ( level.teambased ) - { - point_team = player_entity.pers[ "team" ]; - influencer_team = player_entity.pers[ "team" ]; - } - else - { - point_team = "free"; - influencer_team = "free"; - } - if ( level.teambased && isDefined( game[ "switchedsides" ] ) && game[ "switchedsides" ] && level.spawnsystem.unifiedsideswitching ) - { - point_team = getotherteam( point_team ); - } - best_spawn_entity = get_best_spawnpoint( point_team, influencer_team, player_entity, predictedspawn ); - if ( !predictedspawn ) - { - player_entity.last_spawn_origin = best_spawn_entity.origin; - } - return best_spawn_entity; -} - -get_debug_spawnpoint( player ) -{ - if ( level.teambased ) - { - team = player.pers[ "team" ]; - } - else - { - team = "free"; - } - index = level.test_spawn_point_index; - level.test_spawn_point_index++; - if ( team == "free" ) - { - spawn_counts = 0; - _a1409 = level.teams; - _k1409 = getFirstArrayKey( _a1409 ); - while ( isDefined( _k1409 ) ) - { - team = _a1409[ _k1409 ]; - spawn_counts += level.unified_spawn_points[ team ].a.size; - _k1409 = getNextArrayKey( _a1409, _k1409 ); - } - if ( level.test_spawn_point_index >= spawn_counts ) - { - level.test_spawn_point_index = 0; - } - count = 0; - _a1420 = level.teams; - _k1420 = getFirstArrayKey( _a1420 ); - while ( isDefined( _k1420 ) ) - { - team = _a1420[ _k1420 ]; - size = level.unified_spawn_points[ team ].a.size; - if ( level.test_spawn_point_index < ( count + size ) ) - { - return level.unified_spawn_points[ team ].a[ level.test_spawn_point_index - count ]; - } - count += size; - _k1420 = getNextArrayKey( _a1420, _k1420 ); - } - } - else if ( level.test_spawn_point_index >= level.unified_spawn_points[ team ].a.size ) - { - level.test_spawn_point_index = 0; - } - return level.unified_spawn_points[ team ].a[ level.test_spawn_point_index ]; -} - -get_best_spawnpoint( point_team, influencer_team, player, predictedspawn ) -{ - if ( level.teambased ) - { - vis_team_mask = getotherteamsmask( player.pers[ "team" ] ); - } - else - { - vis_team_mask = level.spawnsystem.ispawn_teammask_free; - } - scored_spawn_points = getsortedspawnpoints( point_team, influencer_team, vis_team_mask, player, predictedspawn ); -/# - assert( scored_spawn_points.size > 0 ); -#/ -/# - assert( scored_spawn_points.size == 1 ); -#/ - if ( !predictedspawn ) - { - bbprint( "mpspawnpointsused", "reason %s x %d y %d z %d", "point used", scored_spawn_points[ 0 ].origin ); - } - return scored_spawn_points[ 0 ]; -} - -gatherspawnentities( player_team ) -{ - if ( !isDefined( level.unified_spawn_points ) ) - { - level.unified_spawn_points = []; - } - else - { - if ( isDefined( level.unified_spawn_points[ player_team ] ) ) - { - return level.unified_spawn_points[ player_team ]; - } - } - spawn_entities_s = spawn_array_struct(); - spawn_entities_s.a = getentarray( "mp_uspawn_point", "classname" ); - if ( !isDefined( spawn_entities_s.a ) ) - { - spawn_entities_s.a = []; - } - legacy_spawn_points = maps/mp/gametypes_zm/_spawnlogic::getteamspawnpoints( player_team ); - legacy_spawn_index = 0; - while ( legacy_spawn_index < legacy_spawn_points.size ) - { - spawn_entities_s.a[ spawn_entities_s.a.size ] = legacy_spawn_points[ legacy_spawn_index ]; - legacy_spawn_index++; - } - level.unified_spawn_points[ player_team ] = spawn_entities_s; - return spawn_entities_s; -} - -is_hardcore() -{ - if ( isDefined( level.hardcoremode ) ) - { - return level.hardcoremode; - } -} - -teams_have_enmity( team1, team2 ) -{ - if ( isDefined( team1 ) || !isDefined( team2 ) && level.gametype == "dm" ) - { - return 1; - } - if ( team1 != "neutral" && team2 != "neutral" ) - { - return team1 != team2; - } -} - -remove_unused_spawn_entities() -{ - spawn_entity_types = []; - spawn_entity_types[ spawn_entity_types.size ] = "mp_dm_spawn"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_tdm_spawn_allies_start"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_tdm_spawn_axis_start"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_tdm_spawn"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_ctf_spawn_allies_start"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_ctf_spawn_axis_start"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_ctf_spawn_allies"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_ctf_spawn_axis"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_dom_spawn_allies_start"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_dom_spawn_axis_start"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_dom_spawn"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_sab_spawn_allies_start"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_sab_spawn_axis_start"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_sab_spawn_allies"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_sab_spawn_axis"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_sd_spawn_attacker"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_sd_spawn_defender"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_twar_spawn_axis_start"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_twar_spawn_allies_start"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_twar_spawn"; - i = 0; - while ( i < spawn_entity_types.size ) - { - if ( spawn_point_class_name_being_used( spawn_entity_types[ i ] ) ) - { - i++; - continue; - } - else - { - spawnpoints = maps/mp/gametypes_zm/_spawnlogic::getspawnpointarray( spawn_entity_types[ i ] ); - delete_all_spawns( spawnpoints ); - } - i++; - } -} - -delete_all_spawns( spawnpoints ) -{ - i = 0; - while ( i < spawnpoints.size ) - { - spawnpoints[ i ] delete(); - i++; - } -} - -spawn_point_class_name_being_used( name ) -{ - if ( !isDefined( level.spawn_point_class_names ) ) - { - return 0; - } - i = 0; - while ( i < level.spawn_point_class_names.size ) - { - if ( level.spawn_point_class_names[ i ] == name ) - { - return 1; - } - i++; - } - return 0; -} - -codecallback_updatespawnpoints() -{ - _a1624 = level.teams; - _k1624 = getFirstArrayKey( _a1624 ); - while ( isDefined( _k1624 ) ) - { - team = _a1624[ _k1624 ]; - maps/mp/gametypes_zm/_spawnlogic::rebuildspawnpoints( team ); - _k1624 = getNextArrayKey( _a1624, _k1624 ); - } - level.unified_spawn_points = undefined; - updateallspawnpoints(); -} - -initialspawnprotection( specialtyname, spawnmonitorspeed ) -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( !isDefined( level.spawnprotectiontime ) || level.spawnprotectiontime == 0 ) - { - return; - } - if ( specialtyname == "specialty_nottargetedbyairsupport" ) - { - self.specialty_nottargetedbyairsupport = 1; - wait level.spawnprotectiontime; - self.specialty_nottargetedbyairsupport = undefined; - } - else - { - if ( !self hasperk( specialtyname ) ) - { - self setperk( specialtyname ); - wait level.spawnprotectiontime; - self unsetperk( specialtyname ); - } - } -} diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_spawnlogic.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_spawnlogic.gsc deleted file mode 100644 index ba21d0f..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_spawnlogic.gsc +++ /dev/null @@ -1,2496 +0,0 @@ -#include maps/mp/gametypes_zm/_spawnlogic; -#include maps/mp/gametypes_zm/_gameobjects; -#include maps/mp/gametypes_zm/_callbacksetup; -#include maps/mp/_utility; -#include common_scripts/utility; - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connected", player ); - } -} - -findboxcenter( mins, maxs ) -{ - center = ( -1, -1, -1 ); - center = maxs - mins; - center = ( center[ 0 ] / 2, center[ 1 ] / 2, center[ 2 ] / 2 ) + mins; - return center; -} - -expandmins( mins, point ) -{ - if ( mins[ 0 ] > point[ 0 ] ) - { - mins = ( point[ 0 ], mins[ 1 ], mins[ 2 ] ); - } - if ( mins[ 1 ] > point[ 1 ] ) - { - mins = ( mins[ 0 ], point[ 1 ], mins[ 2 ] ); - } - if ( mins[ 2 ] > point[ 2 ] ) - { - mins = ( mins[ 0 ], mins[ 1 ], point[ 2 ] ); - } - return mins; -} - -expandmaxs( maxs, point ) -{ - if ( maxs[ 0 ] < point[ 0 ] ) - { - maxs = ( point[ 0 ], maxs[ 1 ], maxs[ 2 ] ); - } - if ( maxs[ 1 ] < point[ 1 ] ) - { - maxs = ( maxs[ 0 ], point[ 1 ], maxs[ 2 ] ); - } - if ( maxs[ 2 ] < point[ 2 ] ) - { - maxs = ( maxs[ 0 ], maxs[ 1 ], point[ 2 ] ); - } - return maxs; -} - -addspawnpointsinternal( team, spawnpointname ) -{ - oldspawnpoints = []; - if ( level.teamspawnpoints[ team ].size ) - { - oldspawnpoints = level.teamspawnpoints[ team ]; - } - level.teamspawnpoints[ team ] = getspawnpointarray( spawnpointname ); - if ( !isDefined( level.spawnpoints ) ) - { - level.spawnpoints = []; - } - index = 0; - while ( index < level.teamspawnpoints[ team ].size ) - { - spawnpoint = level.teamspawnpoints[ team ][ index ]; - if ( !isDefined( spawnpoint.inited ) ) - { - spawnpoint spawnpointinit(); - level.spawnpoints[ level.spawnpoints.size ] = spawnpoint; - } - index++; - } - index = 0; - while ( index < oldspawnpoints.size ) - { - origin = oldspawnpoints[ index ].origin; - level.spawnmins = expandmins( level.spawnmins, origin ); - level.spawnmaxs = expandmaxs( level.spawnmaxs, origin ); - level.teamspawnpoints[ team ][ level.teamspawnpoints[ team ].size ] = oldspawnpoints[ index ]; - index++; - } - if ( !level.teamspawnpoints[ team ].size ) - { -/# - println( "^1ERROR: No " + spawnpointname + " spawnpoints found in level!" ); -#/ - maps/mp/gametypes_zm/_callbacksetup::abortlevel(); - wait 1; - return; - } -} - -clearspawnpoints() -{ - _a87 = level.teams; - _k87 = getFirstArrayKey( _a87 ); - while ( isDefined( _k87 ) ) - { - team = _a87[ _k87 ]; - level.teamspawnpoints[ team ] = []; - _k87 = getNextArrayKey( _a87, _k87 ); - } - level.spawnpoints = []; - level.unified_spawn_points = undefined; -} - -addspawnpoints( team, spawnpointname ) -{ - addspawnpointclassname( spawnpointname ); - addspawnpointteamclassname( team, spawnpointname ); - addspawnpointsinternal( team, spawnpointname ); -} - -rebuildspawnpoints( team ) -{ - level.teamspawnpoints[ team ] = []; - index = 0; - while ( index < level.spawn_point_team_class_names[ team ].size ) - { - addspawnpointsinternal( team, level.spawn_point_team_class_names[ team ][ index ] ); - index++; - } -} - -placespawnpoints( spawnpointname ) -{ - addspawnpointclassname( spawnpointname ); - spawnpoints = getspawnpointarray( spawnpointname ); -/# - if ( !isDefined( level.extraspawnpointsused ) ) - { - level.extraspawnpointsused = []; -#/ - } - if ( !spawnpoints.size ) - { -/# - println( "^1No " + spawnpointname + " spawnpoints found in level!" ); -#/ - maps/mp/gametypes_zm/_callbacksetup::abortlevel(); - wait 1; - return; - } - index = 0; - while ( index < spawnpoints.size ) - { - spawnpoints[ index ] spawnpointinit(); -/# - spawnpoints[ index ].fakeclassname = spawnpointname; - level.extraspawnpointsused[ level.extraspawnpointsused.size ] = spawnpoints[ index ]; -#/ - index++; - } -} - -dropspawnpoints( spawnpointname ) -{ - spawnpoints = getspawnpointarray( spawnpointname ); - if ( !spawnpoints.size ) - { -/# - println( "^1No " + spawnpointname + " spawnpoints found in level!" ); -#/ - return; - } - index = 0; - while ( index < spawnpoints.size ) - { - spawnpoints[ index ] placespawnpoint(); - index++; - } -} - -addspawnpointclassname( spawnpointclassname ) -{ - if ( !isDefined( level.spawn_point_class_names ) ) - { - level.spawn_point_class_names = []; - } - level.spawn_point_class_names[ level.spawn_point_class_names.size ] = spawnpointclassname; -} - -addspawnpointteamclassname( team, spawnpointclassname ) -{ - level.spawn_point_team_class_names[ team ][ level.spawn_point_team_class_names[ team ].size ] = spawnpointclassname; -} - -getspawnpointarray( classname ) -{ - spawnpoints = getentarray( classname, "classname" ); - if ( !isDefined( level.extraspawnpoints ) || !isDefined( level.extraspawnpoints[ classname ] ) ) - { - return spawnpoints; - } - i = 0; - while ( i < level.extraspawnpoints[ classname ].size ) - { - spawnpoints[ spawnpoints.size ] = level.extraspawnpoints[ classname ][ i ]; - i++; - } - return spawnpoints; -} - -spawnpointinit() -{ - spawnpoint = self; - origin = spawnpoint.origin; - if ( !level.spawnminsmaxsprimed ) - { - level.spawnmins = origin; - level.spawnmaxs = origin; - level.spawnminsmaxsprimed = 1; - } - else - { - level.spawnmins = expandmins( level.spawnmins, origin ); - level.spawnmaxs = expandmaxs( level.spawnmaxs, origin ); - } - spawnpoint placespawnpoint(); - spawnpoint.forward = anglesToForward( spawnpoint.angles ); - spawnpoint.sighttracepoint = spawnpoint.origin + vectorScale( ( -1, -1, -1 ), 50 ); - spawnpoint.inited = 1; -} - -getteamspawnpoints( team ) -{ - return level.teamspawnpoints[ team ]; -} - -getspawnpoint_final( spawnpoints, useweights ) -{ - bestspawnpoint = undefined; - if ( !isDefined( spawnpoints ) || spawnpoints.size == 0 ) - { - return undefined; - } - if ( !isDefined( useweights ) ) - { - useweights = 1; - } - if ( useweights ) - { - bestspawnpoint = getbestweightedspawnpoint( spawnpoints ); - thread spawnweightdebug( spawnpoints ); - } - else i = 0; - while ( i < spawnpoints.size ) - { - if ( isDefined( self.lastspawnpoint ) && self.lastspawnpoint == spawnpoints[ i ] ) - { - i++; - continue; - } - else - { - if ( positionwouldtelefrag( spawnpoints[ i ].origin ) ) - { - i++; - continue; - } - else - { - bestspawnpoint = spawnpoints[ i ]; - break; - } - } - i++; - } - while ( !isDefined( bestspawnpoint ) ) - { - while ( isDefined( self.lastspawnpoint ) && !positionwouldtelefrag( self.lastspawnpoint.origin ) ) - { - i = 0; - while ( i < spawnpoints.size ) - { - if ( spawnpoints[ i ] == self.lastspawnpoint ) - { - bestspawnpoint = spawnpoints[ i ]; - break; - } - else - { - i++; - } - } - } - } - if ( !isDefined( bestspawnpoint ) ) - { - if ( useweights ) - { - bestspawnpoint = spawnpoints[ randomint( spawnpoints.size ) ]; - } - else - { - bestspawnpoint = spawnpoints[ 0 ]; - } - } - self finalizespawnpointchoice( bestspawnpoint ); -/# - self storespawndata( spawnpoints, useweights, bestspawnpoint ); -#/ - return bestspawnpoint; -} - -finalizespawnpointchoice( spawnpoint ) -{ - time = getTime(); - self.lastspawnpoint = spawnpoint; - self.lastspawntime = time; - spawnpoint.lastspawnedplayer = self; - spawnpoint.lastspawntime = time; -} - -getbestweightedspawnpoint( spawnpoints ) -{ - maxsighttracedspawnpoints = 3; - try = 0; - while ( try <= maxsighttracedspawnpoints ) - { - bestspawnpoints = []; - bestweight = undefined; - bestspawnpoint = undefined; - i = 0; - while ( i < spawnpoints.size ) - { - if ( !isDefined( bestweight ) || spawnpoints[ i ].weight > bestweight ) - { - if ( positionwouldtelefrag( spawnpoints[ i ].origin ) ) - { - i++; - continue; - } - else bestspawnpoints = []; - bestspawnpoints[ 0 ] = spawnpoints[ i ]; - bestweight = spawnpoints[ i ].weight; - i++; - continue; - } - else - { - if ( spawnpoints[ i ].weight == bestweight ) - { - if ( positionwouldtelefrag( spawnpoints[ i ].origin ) ) - { - i++; - continue; - } - else - { - bestspawnpoints[ bestspawnpoints.size ] = spawnpoints[ i ]; - } - } - } - i++; - } - if ( bestspawnpoints.size == 0 ) - { - return undefined; - } - bestspawnpoint = bestspawnpoints[ randomint( bestspawnpoints.size ) ]; - if ( try == maxsighttracedspawnpoints ) - { - return bestspawnpoint; - } - if ( isDefined( bestspawnpoint.lastsighttracetime ) && bestspawnpoint.lastsighttracetime == getTime() ) - { - return bestspawnpoint; - } - if ( !lastminutesighttraces( bestspawnpoint ) ) - { - return bestspawnpoint; - } - penalty = getlospenalty(); -/# - if ( level.storespawndata || level.debugspawning ) - { - bestspawnpoint.spawndata[ bestspawnpoint.spawndata.size ] = "Last minute sight trace: -" + penalty; -#/ - } - bestspawnpoint.weight -= penalty; - bestspawnpoint.lastsighttracetime = getTime(); - try++; - } -} - -checkbad( spawnpoint ) -{ -/# - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( !isalive( player ) || player.sessionstate != "playing" ) - { - i++; - continue; - } - else - { - if ( level.teambased && player.team == self.team ) - { - i++; - continue; - } - else - { - losexists = bullettracepassed( player.origin + vectorScale( ( -1, -1, -1 ), 50 ), spawnpoint.sighttracepoint, 0, undefined ); - if ( losexists ) - { - thread badspawnline( spawnpoint.sighttracepoint, player.origin + vectorScale( ( -1, -1, -1 ), 50 ), self.name, player.name ); - } - } - } - i++; -#/ - } -} - -badspawnline( start, end, name1, name2 ) -{ -/# - dist = distance( start, end ); - i = 0; - while ( i < 200 ) - { - line( start, end, ( -1, -1, -1 ) ); - print3d( start, "Bad spawn! " + name1 + ", dist = " + dist ); - print3d( end, name2 ); - wait 0,05; - i++; -#/ - } -} - -storespawndata( spawnpoints, useweights, bestspawnpoint ) -{ -/# - if ( !isDefined( level.storespawndata ) || !level.storespawndata ) - { - return; - } - level.storespawndata = getDvarInt( "scr_recordspawndata" ); - if ( !level.storespawndata ) - { - return; - } - if ( !isDefined( level.spawnid ) ) - { - level.spawngameid = randomint( 100 ); - level.spawnid = 0; - } - if ( bestspawnpoint.classname == "mp_global_intermission" ) - { - return; - } - level.spawnid++; - file = openfile( "spawndata.txt", "append" ); - fprintfields( file, ( level.spawngameid + "." ) + level.spawnid + "," + spawnpoints.size + "," + self.name ); - i = 0; - while ( i < spawnpoints.size ) - { - str = vectostr( spawnpoints[ i ].origin ) + ","; - if ( spawnpoints[ i ] == bestspawnpoint ) - { - str += "1,"; - } - else - { - str += "0,"; - } - if ( !useweights ) - { - str += "0,"; - } - else - { - str += spawnpoints[ i ].weight + ","; - } - if ( !isDefined( spawnpoints[ i ].spawndata ) ) - { - spawnpoints[ i ].spawndata = []; - } - if ( !isDefined( spawnpoints[ i ].sightchecks ) ) - { - spawnpoints[ i ].sightchecks = []; - } - str += spawnpoints[ i ].spawndata.size + ","; - j = 0; - while ( j < spawnpoints[ i ].spawndata.size ) - { - str += spawnpoints[ i ].spawndata[ j ] + ","; - j++; - } - str += spawnpoints[ i ].sightchecks.size + ","; - j = 0; - while ( j < spawnpoints[ i ].sightchecks.size ) - { - str += ( spawnpoints[ i ].sightchecks[ j ].penalty + "," ) + vectostr( spawnpoints[ i ].origin ) + ","; - j++; - } - fprintfields( file, str ); - i++; - } - obj = spawnstruct(); - getallalliedandenemyplayers( obj ); - numallies = 0; - numenemies = 0; - str = ""; - i = 0; - while ( i < obj.allies.size ) - { - if ( obj.allies[ i ] == self ) - { - i++; - continue; - } - else - { - numallies++; - str += vectostr( obj.allies[ i ].origin ) + ","; - } - i++; - } - i = 0; - while ( i < obj.enemies.size ) - { - numenemies++; - str += vectostr( obj.enemies[ i ].origin ) + ","; - i++; - } - str = ( numallies + "," ) + numenemies + "," + str; - fprintfields( file, str ); - otherdata = []; - if ( isDefined( level.bombguy ) ) - { - index = otherdata.size; - otherdata[ index ] = spawnstruct(); - otherdata[ index ].origin = level.bombguy.origin + vectorScale( ( -1, -1, -1 ), 20 ); - otherdata[ index ].text = "Bomb holder"; - } - else - { - if ( isDefined( level.bombpos ) ) - { - index = otherdata.size; - otherdata[ index ] = spawnstruct(); - otherdata[ index ].origin = level.bombpos; - otherdata[ index ].text = "Bomb"; - } - } - while ( isDefined( level.flags ) ) - { - i = 0; - while ( i < level.flags.size ) - { - index = otherdata.size; - otherdata[ index ] = spawnstruct(); - otherdata[ index ].origin = level.flags[ i ].origin; - otherdata[ index ].text = level.flags[ i ].useobj maps/mp/gametypes_zm/_gameobjects::getownerteam() + " flag"; - i++; - } - } - str = otherdata.size + ","; - i = 0; - while ( i < otherdata.size ) - { - str += vectostr( otherdata[ i ].origin ) + "," + otherdata[ i ].text + ","; - i++; - } - fprintfields( file, str ); - closefile( file ); - thisspawnid = ( level.spawngameid + "." ) + level.spawnid; - if ( isDefined( self.thisspawnid ) ) - { - } - self.thisspawnid = thisspawnid; -#/ -} - -readspawndata( desiredid, relativepos ) -{ -/# - file = openfile( "spawndata.txt", "read" ); - if ( file < 0 ) - { - return; - } - oldspawndata = level.curspawndata; - level.curspawndata = undefined; - prev = undefined; - prevthisplayer = undefined; - lookingfornextthisplayer = 0; - lookingfornext = 0; - if ( isDefined( relativepos ) && !isDefined( oldspawndata ) ) - { - return; - } - while ( 1 ) - { - if ( freadln( file ) <= 0 ) - { - break; - } - else data = spawnstruct(); - data.id = fgetarg( file, 0 ); - numspawns = int( fgetarg( file, 1 ) ); - if ( numspawns > 256 ) - { - break; - } - else data.playername = fgetarg( file, 2 ); - data.spawnpoints = []; - data.friends = []; - data.enemies = []; - data.otherdata = []; - i = 0; - while ( i < numspawns ) - { - if ( freadln( file ) <= 0 ) - { - break; - } - else spawnpoint = spawnstruct(); - spawnpoint.origin = strtovec( fgetarg( file, 0 ) ); - spawnpoint.winner = int( fgetarg( file, 1 ) ); - spawnpoint.weight = int( fgetarg( file, 2 ) ); - spawnpoint.data = []; - spawnpoint.sightchecks = []; - if ( i == 0 ) - { - data.minweight = spawnpoint.weight; - data.maxweight = spawnpoint.weight; - } - else - { - if ( spawnpoint.weight < data.minweight ) - { - data.minweight = spawnpoint.weight; - } - if ( spawnpoint.weight > data.maxweight ) - { - data.maxweight = spawnpoint.weight; - } - } - argnum = 4; - numdata = int( fgetarg( file, 3 ) ); - if ( numdata > 256 ) - { - break; - } - else j = 0; - while ( j < numdata ) - { - spawnpoint.data[ spawnpoint.data.size ] = fgetarg( file, argnum ); - argnum++; - j++; - } - numsightchecks = int( fgetarg( file, argnum ) ); - argnum++; - if ( numsightchecks > 256 ) - { - break; - } - else - { - j = 0; - while ( j < numsightchecks ) - { - index = spawnpoint.sightchecks.size; - spawnpoint.sightchecks[ index ] = spawnstruct(); - spawnpoint.sightchecks[ index ].penalty = int( fgetarg( file, argnum ) ); - argnum++; - spawnpoint.sightchecks[ index ].origin = strtovec( fgetarg( file, argnum ) ); - argnum++; - j++; - } - data.spawnpoints[ data.spawnpoints.size ] = spawnpoint; - i++; - } - } - if ( !isDefined( data.minweight ) ) - { - data.minweight = -1; - data.maxweight = 0; - } - if ( data.minweight == data.maxweight ) - { - data.minweight -= 1; - } - if ( freadln( file ) <= 0 ) - { - break; - } - else numfriends = int( fgetarg( file, 0 ) ); - numenemies = int( fgetarg( file, 1 ) ); - if ( numfriends > 32 || numenemies > 32 ) - { - break; - } - else - { - argnum = 2; - i = 0; - while ( i < numfriends ) - { - data.friends[ data.friends.size ] = strtovec( fgetarg( file, argnum ) ); - argnum++; - i++; - } - i = 0; - while ( i < numenemies ) - { - data.enemies[ data.enemies.size ] = strtovec( fgetarg( file, argnum ) ); - argnum++; - i++; - } - if ( freadln( file ) <= 0 ) - { - break; - } - else numotherdata = int( fgetarg( file, 0 ) ); - argnum = 1; - i = 0; - while ( i < numotherdata ) - { - otherdata = spawnstruct(); - otherdata.origin = strtovec( fgetarg( file, argnum ) ); - argnum++; - otherdata.text = fgetarg( file, argnum ); - argnum++; - data.otherdata[ data.otherdata.size ] = otherdata; - i++; - } - if ( isDefined( relativepos ) ) - { - if ( relativepos == "prevthisplayer" ) - { - if ( data.id == oldspawndata.id ) - { - level.curspawndata = prevthisplayer; - break; - } - else } - else if ( relativepos == "prev" ) - { - if ( data.id == oldspawndata.id ) - { - level.curspawndata = prev; - break; - } - else } - else if ( relativepos == "nextthisplayer" ) - { - if ( lookingfornextthisplayer ) - { - level.curspawndata = data; - break; - } - else if ( data.id == oldspawndata.id ) - { - lookingfornextthisplayer = 1; - } - } - else if ( relativepos == "next" ) - { - if ( lookingfornext ) - { - level.curspawndata = data; - break; - } - else if ( data.id == oldspawndata.id ) - { - lookingfornext = 1; - } - } - } - else - { - if ( data.id == desiredid ) - { - level.curspawndata = data; - break; - } - } - else - { - prev = data; - if ( isDefined( oldspawndata ) && data.playername == oldspawndata.playername ) - { - prevthisplayer = data; - } - } - } - } - closefile( file ); -#/ -} - -drawspawndata() -{ -/# - level notify( "drawing_spawn_data" ); - level endon( "drawing_spawn_data" ); - textoffset = vectorScale( ( -1, -1, -1 ), 12 ); - while ( 1 ) - { - while ( !isDefined( level.curspawndata ) ) - { - wait 0,5; - } - i = 0; - while ( i < level.curspawndata.friends.size ) - { - print3d( level.curspawndata.friends[ i ], "=)", ( 0,5, 1, 0,5 ), 1, 5 ); - i++; - } - i = 0; - while ( i < level.curspawndata.enemies.size ) - { - print3d( level.curspawndata.enemies[ i ], "=(", ( 1, 0,5, 0,5 ), 1, 5 ); - i++; - } - i = 0; - while ( i < level.curspawndata.otherdata.size ) - { - print3d( level.curspawndata.otherdata[ i ].origin, level.curspawndata.otherdata[ i ].text, ( 0,5, 0,75, 1 ), 1, 2 ); - i++; - } - i = 0; - while ( i < level.curspawndata.spawnpoints.size ) - { - sp = level.curspawndata.spawnpoints[ i ]; - orig = sp.sighttracepoint; - if ( sp.winner ) - { - print3d( orig, level.curspawndata.playername + " spawned here", ( 0,5, 0,5, 1 ), 1, 2 ); - orig += textoffset; - } - amnt = ( sp.weight - level.curspawndata.minweight ) / ( level.curspawndata.maxweight - level.curspawndata.minweight ); - print3d( orig, "Weight: " + sp.weight, ( 1 - amnt, amnt, 0,5 ) ); - orig += textoffset; - j = 0; - while ( j < sp.data.size ) - { - print3d( orig, sp.data[ j ], ( -1, -1, -1 ) ); - orig += textoffset; - j++; - } - j = 0; - while ( j < sp.sightchecks.size ) - { - print3d( orig, "Sightchecks: -" + sp.sightchecks[ j ].penalty, ( 1, 0,5, 0,5 ) ); - orig += textoffset; - j++; - } - i++; - } - wait 0,05; -#/ - } -} - -vectostr( vec ) -{ -/# - return int( vec[ 0 ] ) + "/" + int( vec[ 1 ] ) + "/" + int( vec[ 2 ] ); -#/ -} - -strtovec( str ) -{ -/# - parts = strtok( str, "/" ); - if ( parts.size != 3 ) - { - return ( -1, -1, -1 ); - } - return ( int( parts[ 0 ] ), int( parts[ 1 ] ), int( parts[ 2 ] ) ); -#/ -} - -getspawnpoint_random( spawnpoints ) -{ - if ( !isDefined( spawnpoints ) ) - { - return undefined; - } - i = 0; - while ( i < spawnpoints.size ) - { - j = randomint( spawnpoints.size ); - spawnpoint = spawnpoints[ i ]; - spawnpoints[ i ] = spawnpoints[ j ]; - spawnpoints[ j ] = spawnpoint; - i++; - } - return getspawnpoint_final( spawnpoints, 0 ); -} - -getallotherplayers() -{ - aliveplayers = []; - i = 0; - while ( i < level.players.size ) - { - if ( !isDefined( level.players[ i ] ) ) - { - i++; - continue; - } - else player = level.players[ i ]; - if ( player.sessionstate != "playing" || player == self ) - { - i++; - continue; - } - else - { - if ( isDefined( level.customalivecheck ) ) - { - if ( !( [[ level.customalivecheck ]]( player ) ) ) - { - i++; - continue; - } - } - else - { - aliveplayers[ aliveplayers.size ] = player; - } - } - i++; - } - return aliveplayers; -} - -getallalliedandenemyplayers( obj ) -{ - if ( level.teambased ) - { -/# - assert( isDefined( level.teams[ self.team ] ) ); -#/ - obj.allies = []; - obj.enemies = []; - i = 0; - while ( i < level.players.size ) - { - if ( !isDefined( level.players[ i ] ) ) - { - i++; - continue; - } - else player = level.players[ i ]; - if ( player.sessionstate != "playing" || player == self ) - { - i++; - continue; - } - else - { - if ( isDefined( level.customalivecheck ) ) - { - if ( !( [[ level.customalivecheck ]]( player ) ) ) - { - i++; - continue; - } - } - else if ( player.team == self.team ) - { - obj.allies[ obj.allies.size ] = player; - i++; - continue; - } - else - { - obj.enemies[ obj.enemies.size ] = player; - } - } - i++; - } - } - else obj.allies = []; - obj.enemies = level.activeplayers; -} - -initweights( spawnpoints ) -{ - i = 0; - while ( i < spawnpoints.size ) - { - spawnpoints[ i ].weight = 0; - i++; - } -/# - while ( level.storespawndata || level.debugspawning ) - { - i = 0; - while ( i < spawnpoints.size ) - { - spawnpoints[ i ].spawndata = []; - spawnpoints[ i ].sightchecks = []; - i++; -#/ - } - } -} - -spawnpointupdate_zm( spawnpoint ) -{ - _a906 = level.teams; - _k906 = getFirstArrayKey( _a906 ); - while ( isDefined( _k906 ) ) - { - team = _a906[ _k906 ]; - spawnpoint.distsum[ team ] = 0; - spawnpoint.enemydistsum[ team ] = 0; - _k906 = getNextArrayKey( _a906, _k906 ); - } - players = get_players(); - spawnpoint.numplayersatlastupdate = players.size; - _a913 = players; - _k913 = getFirstArrayKey( _a913 ); - while ( isDefined( _k913 ) ) - { - player = _a913[ _k913 ]; - if ( !isDefined( player ) ) - { - } - else if ( player.sessionstate != "playing" ) - { - } - else if ( isDefined( level.customalivecheck ) ) - { - if ( !( [[ level.customalivecheck ]]( player ) ) ) - { - } - } - else - { - dist = distance( spawnpoint.origin, player.origin ); - spawnpoint.distsum[ player.team ] += dist; - _a924 = level.teams; - _k924 = getFirstArrayKey( _a924 ); - while ( isDefined( _k924 ) ) - { - team = _a924[ _k924 ]; - if ( team != player.team ) - { - spawnpoint.enemydistsum[ team ] += dist; - } - _k924 = getNextArrayKey( _a924, _k924 ); - } - } - _k913 = getNextArrayKey( _a913, _k913 ); - } -} - -getspawnpoint_nearteam( spawnpoints, favoredspawnpoints, forceallydistanceweight, forceenemydistanceweight ) -{ - if ( !isDefined( spawnpoints ) ) - { - return undefined; - } -/# - if ( getDvar( "scr_spawn_randomly" ) == "" ) - { - setdvar( "scr_spawn_randomly", "0" ); - } - if ( getDvar( "scr_spawn_randomly" ) == "1" ) - { - return getspawnpoint_random( spawnpoints ); -#/ - } - if ( getDvarInt( "scr_spawnsimple" ) > 0 ) - { - return getspawnpoint_random( spawnpoints ); - } - spawnlogic_begin(); - k_favored_spawn_point_bonus = 25000; - initweights( spawnpoints ); - obj = spawnstruct(); - getallalliedandenemyplayers( obj ); - numplayers = obj.allies.size + obj.enemies.size; - allieddistanceweight = 2; - if ( isDefined( forceallydistanceweight ) ) - { - allieddistanceweight = forceallydistanceweight; - } - enemydistanceweight = 1; - if ( isDefined( forceenemydistanceweight ) ) - { - enemydistanceweight = forceenemydistanceweight; - } - myteam = self.team; - i = 0; - while ( i < spawnpoints.size ) - { - spawnpoint = spawnpoints[ i ]; - spawnpointupdate_zm( spawnpoint ); - if ( !isDefined( spawnpoint.numplayersatlastupdate ) ) - { - spawnpoint.numplayersatlastupdate = 0; - } - if ( spawnpoint.numplayersatlastupdate > 0 ) - { - allydistsum = spawnpoint.distsum[ myteam ]; - enemydistsum = spawnpoint.enemydistsum[ myteam ]; - spawnpoint.weight = ( ( enemydistanceweight * enemydistsum ) - ( allieddistanceweight * allydistsum ) ) / spawnpoint.numplayersatlastupdate; -/# - if ( level.storespawndata || level.debugspawning ) - { - spawnpoint.spawndata[ spawnpoint.spawndata.size ] = "Base weight: " + int( spawnpoint.weight ) + " = (" + enemydistanceweight + "*" + int( enemydistsum ) + " - " + allieddistanceweight + "*" + int( allydistsum ) + ") / " + spawnpoint.numplayersatlastupdate; -#/ - } - i++; - continue; - } - else - { - spawnpoint.weight = 0; -/# - if ( level.storespawndata || level.debugspawning ) - { - spawnpoint.spawndata[ spawnpoint.spawndata.size ] = "Base weight: 0"; -#/ - } - } - i++; - } - while ( isDefined( favoredspawnpoints ) ) - { - i = 0; - while ( i < favoredspawnpoints.size ) - { - if ( isDefined( favoredspawnpoints[ i ].weight ) ) - { - favoredspawnpoints[ i ].weight += k_favored_spawn_point_bonus; - i++; - continue; - } - else - { - favoredspawnpoints[ i ].weight = k_favored_spawn_point_bonus; - } - i++; - } - } - avoidsamespawn( spawnpoints ); - avoidspawnreuse( spawnpoints, 1 ); - avoidweapondamage( spawnpoints ); - avoidvisibleenemies( spawnpoints, 1 ); - result = getspawnpoint_final( spawnpoints ); -/# - if ( getDvar( "scr_spawn_showbad" ) == "" ) - { - setdvar( "scr_spawn_showbad", "0" ); - } - if ( getDvar( "scr_spawn_showbad" ) == "1" ) - { - checkbad( result ); -#/ - } - return result; -} - -getspawnpoint_dm( spawnpoints ) -{ - if ( !isDefined( spawnpoints ) ) - { - return undefined; - } - spawnlogic_begin(); - initweights( spawnpoints ); - aliveplayers = getallotherplayers(); - idealdist = 1600; - baddist = 1200; - while ( aliveplayers.size > 0 ) - { - i = 0; - while ( i < spawnpoints.size ) - { - totaldistfromideal = 0; - nearbybadamount = 0; - j = 0; - while ( j < aliveplayers.size ) - { - dist = distance( spawnpoints[ i ].origin, aliveplayers[ j ].origin ); - if ( dist < baddist ) - { - nearbybadamount += ( baddist - dist ) / baddist; - } - distfromideal = abs( dist - idealdist ); - totaldistfromideal += distfromideal; - j++; - } - avgdistfromideal = totaldistfromideal / aliveplayers.size; - welldistancedamount = ( idealdist - avgdistfromideal ) / idealdist; - spawnpoints[ i ].weight = ( welldistancedamount - ( nearbybadamount * 2 ) ) + randomfloat( 0,2 ); - i++; - } - } - avoidsamespawn( spawnpoints ); - avoidspawnreuse( spawnpoints, 0 ); - avoidweapondamage( spawnpoints ); - avoidvisibleenemies( spawnpoints, 0 ); - return getspawnpoint_final( spawnpoints ); -} - -getspawnpoint_turned( spawnpoints, idealdist, baddist, idealdistteam, baddistteam ) -{ - if ( !isDefined( spawnpoints ) ) - { - return undefined; - } - spawnlogic_begin(); - initweights( spawnpoints ); - aliveplayers = getallotherplayers(); - if ( !isDefined( idealdist ) ) - { - idealdist = 1600; - } - if ( !isDefined( idealdistteam ) ) - { - idealdistteam = 1200; - } - if ( !isDefined( baddist ) ) - { - baddist = 1200; - } - if ( !isDefined( baddistteam ) ) - { - baddistteam = 600; - } - myteam = self.team; - while ( aliveplayers.size > 0 ) - { - i = 0; - while ( i < spawnpoints.size ) - { - totaldistfromideal = 0; - nearbybadamount = 0; - j = 0; - while ( j < aliveplayers.size ) - { - dist = distance( spawnpoints[ i ].origin, aliveplayers[ j ].origin ); - distfromideal = 0; - if ( aliveplayers[ j ].team == myteam ) - { - if ( dist < baddistteam ) - { - nearbybadamount += ( baddistteam - dist ) / baddistteam; - } - distfromideal = abs( dist - idealdistteam ); - } - else - { - if ( dist < baddist ) - { - nearbybadamount += ( baddist - dist ) / baddist; - } - distfromideal = abs( dist - idealdist ); - } - totaldistfromideal += distfromideal; - j++; - } - avgdistfromideal = totaldistfromideal / aliveplayers.size; - welldistancedamount = ( idealdist - avgdistfromideal ) / idealdist; - spawnpoints[ i ].weight = ( welldistancedamount - ( nearbybadamount * 2 ) ) + randomfloat( 0,2 ); - i++; - } - } - avoidsamespawn( spawnpoints ); - avoidspawnreuse( spawnpoints, 0 ); - avoidweapondamage( spawnpoints ); - avoidvisibleenemies( spawnpoints, 0 ); - return getspawnpoint_final( spawnpoints ); -} - -spawnlogic_begin() -{ -/# - level.storespawndata = getDvarInt( "scr_recordspawndata" ); - level.debugspawning = getDvarInt( "scr_spawnpointdebug" ) > 0; -#/ -} - -init() -{ -/# - if ( getDvar( "scr_recordspawndata" ) == "" ) - { - setdvar( "scr_recordspawndata", 0 ); - } - level.storespawndata = getDvarInt( "scr_recordspawndata" ); - if ( getDvar( "scr_killbots" ) == "" ) - { - setdvar( "scr_killbots", 0 ); - } - if ( getDvar( "scr_killbottimer" ) == "" ) - { - setdvar( "scr_killbottimer", 0,25 ); - } - thread loopbotspawns(); -#/ - level.spawnlogic_deaths = []; - level.spawnlogic_spawnkills = []; - level.players = []; - level.grenades = []; - level.pipebombs = []; - level.spawnmins = ( -1, -1, -1 ); - level.spawnmaxs = ( -1, -1, -1 ); - level.spawnminsmaxsprimed = 0; - while ( isDefined( level.safespawns ) ) - { - i = 0; - while ( i < level.safespawns.size ) - { - level.safespawns[ i ] spawnpointinit(); - i++; - } - } - if ( getDvar( "scr_spawn_enemyavoiddist" ) == "" ) - { - setdvar( "scr_spawn_enemyavoiddist", "800" ); - } - if ( getDvar( "scr_spawn_enemyavoidweight" ) == "" ) - { - setdvar( "scr_spawn_enemyavoidweight", "0" ); - } -/# - if ( getDvar( "scr_spawnsimple" ) == "" ) - { - setdvar( "scr_spawnsimple", "0" ); - } - if ( getDvar( "scr_spawnpointdebug" ) == "" ) - { - setdvar( "scr_spawnpointdebug", "0" ); - } - if ( getDvarInt( "scr_spawnpointdebug" ) > 0 ) - { - thread showdeathsdebug(); - thread updatedeathinfodebug(); - thread profiledebug(); - } - if ( level.storespawndata ) - { - thread allowspawndatareading(); - } - if ( getDvar( "scr_spawnprofile" ) == "" ) - { - setdvar( "scr_spawnprofile", "0" ); - } - thread watchspawnprofile(); - thread spawngraphcheck(); -#/ -} - -watchspawnprofile() -{ -/# - while ( 1 ) - { - while ( 1 ) - { - if ( getDvarInt( "scr_spawnprofile" ) > 0 ) - { - break; - } - else - { - wait 0,05; - } - } - thread spawnprofile(); - while ( 1 ) - { - if ( getDvarInt( "scr_spawnprofile" ) <= 0 ) - { - break; - } - else - { - wait 0,05; - } - } - level notify( "stop_spawn_profile" ); -#/ - } -} - -spawnprofile() -{ -/# - level endon( "stop_spawn_profile" ); - while ( 1 ) - { - if ( level.players.size > 0 && level.spawnpoints.size > 0 ) - { - playernum = randomint( level.players.size ); - player = level.players[ playernum ]; - attempt = 1; - while ( !isDefined( player ) && attempt < level.players.size ) - { - playernum = ( playernum + 1 ) % level.players.size; - attempt++; - player = level.players[ playernum ]; - } - player getspawnpoint_nearteam( level.spawnpoints ); - } - wait 0,05; -#/ - } -} - -spawngraphcheck() -{ -/# - while ( 1 ) - { - while ( getDvarInt( #"C25B6B47" ) < 1 ) - { - wait 3; - } - thread spawngraph(); - return; -#/ - } -} - -spawngraph() -{ -/# - w = 20; - h = 20; - weightscale = 0,1; - fakespawnpoints = []; - corners = getentarray( "minimap_corner", "targetname" ); - if ( corners.size != 2 ) - { - println( "^1 can't spawn graph: no minimap corners" ); - return; - } - min = corners[ 0 ].origin; - max = corners[ 0 ].origin; - if ( corners[ 1 ].origin[ 0 ] > max[ 0 ] ) - { - max = ( corners[ 1 ].origin[ 0 ], max[ 1 ], max[ 2 ] ); - } - else - { - min = ( corners[ 1 ].origin[ 0 ], min[ 1 ], min[ 2 ] ); - } - if ( corners[ 1 ].origin[ 1 ] > max[ 1 ] ) - { - max = ( max[ 0 ], corners[ 1 ].origin[ 1 ], max[ 2 ] ); - } - else - { - min = ( min[ 0 ], corners[ 1 ].origin[ 1 ], min[ 2 ] ); - } - i = 0; - y = 0; - while ( y < h ) - { - yamnt = y / ( h - 1 ); - x = 0; - while ( x < w ) - { - xamnt = x / ( w - 1 ); - fakespawnpoints[ i ] = spawnstruct(); - fakespawnpoints[ i ].origin = ( ( min[ 0 ] * xamnt ) + ( max[ 0 ] * ( 1 - xamnt ) ), ( min[ 1 ] * yamnt ) + ( max[ 1 ] * ( 1 - yamnt ) ), min[ 2 ] ); - fakespawnpoints[ i ].angles = ( -1, -1, -1 ); - fakespawnpoints[ i ].forward = anglesToForward( fakespawnpoints[ i ].angles ); - fakespawnpoints[ i ].sighttracepoint = fakespawnpoints[ i ].origin; - i++; - x++; - } - y++; - } - didweights = 0; - while ( 1 ) - { - spawni = 0; - numiters = 5; - i = 0; - while ( i < numiters ) - { - if ( level.players.size && isDefined( level.players[ 0 ].team ) || level.players[ 0 ].team == "spectator" && !isDefined( level.players[ 0 ].class ) ) - { - break; - } - else - { - endspawni = spawni + ( fakespawnpoints.size / numiters ); - if ( i == ( numiters - 1 ) ) - { - endspawni = fakespawnpoints.size; - } - while ( spawni < endspawni ) - { - spawnpointupdate( fakespawnpoints[ spawni ] ); - spawni++; - } - if ( didweights ) - { - level.players[ 0 ] drawspawngraph( fakespawnpoints, w, h, weightscale ); - } - wait 0,05; - i++; - } - } - while ( level.players.size && isDefined( level.players[ 0 ].team ) || level.players[ 0 ].team == "spectator" && !isDefined( level.players[ 0 ].class ) ) - { - wait 1; - } - level.players[ 0 ] getspawnpoint_nearteam( fakespawnpoints ); - i = 0; - while ( i < fakespawnpoints.size ) - { - setupspawngraphpoint( fakespawnpoints[ i ], weightscale ); - i++; - } - didweights = 1; - level.players[ 0 ] drawspawngraph( fakespawnpoints, w, h, weightscale ); - wait 0,05; -#/ - } -} - -drawspawngraph( fakespawnpoints, w, h, weightscale ) -{ -/# - i = 0; - y = 0; - while ( y < h ) - { - yamnt = y / ( h - 1 ); - x = 0; - while ( x < w ) - { - xamnt = x / ( w - 1 ); - if ( y > 0 ) - { - spawngraphline( fakespawnpoints[ i ], fakespawnpoints[ i - w ], weightscale ); - } - if ( x > 0 ) - { - spawngraphline( fakespawnpoints[ i ], fakespawnpoints[ i - 1 ], weightscale ); - } - i++; - x++; - } - y++; -#/ - } -} - -setupspawngraphpoint( s1, weightscale ) -{ -/# - s1.visible = 1; - if ( s1.weight < ( -1000 / weightscale ) ) - { - s1.visible = 0; -#/ - } -} - -spawngraphline( s1, s2, weightscale ) -{ -/# - if ( !s1.visible || !s2.visible ) - { - return; - } - p1 = s1.origin + ( 0, 0, ( s1.weight * weightscale ) + 100 ); - p2 = s2.origin + ( 0, 0, ( s2.weight * weightscale ) + 100 ); - line( p1, p2, ( -1, -1, -1 ) ); -#/ -} - -loopbotspawns() -{ -/# - while ( 1 ) - { - while ( getDvarInt( "scr_killbots" ) < 1 ) - { - wait 3; - } - while ( !isDefined( level.players ) ) - { - wait 0,05; - } - bots = []; - i = 0; - while ( i < level.players.size ) - { - if ( !isDefined( level.players[ i ] ) ) - { - i++; - continue; - } - else - { - if ( level.players[ i ].sessionstate == "playing" && issubstr( level.players[ i ].name, "bot" ) ) - { - bots[ bots.size ] = level.players[ i ]; - } - } - i++; - } - while ( bots.size > 0 ) - { - if ( getDvarInt( "scr_killbots" ) == 1 ) - { - killer = bots[ randomint( bots.size ) ]; - victim = bots[ randomint( bots.size ) ]; - victim thread [[ level.callbackplayerdamage ]]( killer, killer, 1000, 0, "MOD_RIFLE_BULLET", "none", ( -1, -1, -1 ), ( -1, -1, -1 ), "none", 0, 0 ); - break; - } - else - { - numkills = getDvarInt( "scr_killbots" ); - lastvictim = undefined; - index = 0; - while ( index < numkills ) - { - killer = bots[ randomint( bots.size ) ]; - victim = bots[ randomint( bots.size ) ]; - while ( isDefined( lastvictim ) && victim == lastvictim ) - { - victim = bots[ randomint( bots.size ) ]; - } - victim thread [[ level.callbackplayerdamage ]]( killer, killer, 1000, 0, "MOD_RIFLE_BULLET", "none", ( -1, -1, -1 ), ( -1, -1, -1 ), "none", 0, 0 ); - lastvictim = victim; - index++; - } - } - } - if ( getDvar( "scr_killbottimer" ) != "" ) - { - wait getDvarFloat( "scr_killbottimer" ); - continue; - } - else - { - wait 0,05; - } -#/ - } -} - -allowspawndatareading() -{ -/# - setdvar( "scr_showspawnid", "" ); - prevval = getDvar( "scr_showspawnid" ); - prevrelval = getDvar( "scr_spawnidcycle" ); - readthistime = 0; - while ( 1 ) - { - val = getDvar( "scr_showspawnid" ); - relval = undefined; - while ( !isDefined( val ) || val == prevval ) - { - relval = getDvar( "scr_spawnidcycle" ); - if ( isDefined( relval ) && relval != "" ) - { - setdvar( "scr_spawnidcycle", "" ); - break; - } - else - { - wait 0,5; - } - } - prevval = val; - readthistime = 0; - readspawndata( val, relval ); - if ( !isDefined( level.curspawndata ) ) - { - println( "No spawn data to draw." ); - } - else - { - println( "Drawing spawn ID " + level.curspawndata.id ); - } - thread drawspawndata(); -#/ - } -} - -showdeathsdebug() -{ -/# - while ( 1 ) - { - while ( getDvar( "scr_spawnpointdebug" ) == "0" ) - { - wait 3; - } - time = getTime(); - i = 0; - while ( i < level.spawnlogic_deaths.size ) - { - if ( isDefined( level.spawnlogic_deaths[ i ].los ) ) - { - line( level.spawnlogic_deaths[ i ].org, level.spawnlogic_deaths[ i ].killorg, ( -1, -1, -1 ) ); - } - else - { - line( level.spawnlogic_deaths[ i ].org, level.spawnlogic_deaths[ i ].killorg, ( -1, -1, -1 ) ); - } - killer = level.spawnlogic_deaths[ i ].killer; - if ( isDefined( killer ) && isalive( killer ) ) - { - line( level.spawnlogic_deaths[ i ].killorg, killer.origin, ( 0,4, 0,4, 0,8 ) ); - } - i++; - } - p = 0; - while ( p < level.players.size ) - { - if ( !isDefined( level.players[ p ] ) ) - { - p++; - continue; - } - else - { - if ( isDefined( level.players[ p ].spawnlogic_killdist ) ) - { - print3d( level.players[ p ].origin + vectorScale( ( -1, -1, -1 ), 64 ), level.players[ p ].spawnlogic_killdist, ( -1, -1, -1 ) ); - } - } - p++; - } - oldspawnkills = level.spawnlogic_spawnkills; - level.spawnlogic_spawnkills = []; - i = 0; - while ( i < oldspawnkills.size ) - { - spawnkill = oldspawnkills[ i ]; - if ( spawnkill.dierwasspawner ) - { - line( spawnkill.spawnpointorigin, spawnkill.dierorigin, ( 0,4, 0,5, 0,4 ) ); - line( spawnkill.dierorigin, spawnkill.killerorigin, ( 0, 1, 1 ) ); - print3d( spawnkill.dierorigin + vectorScale( ( -1, -1, -1 ), 32 ), "SPAWNKILLED!", ( 0, 1, 1 ) ); - } - else - { - line( spawnkill.spawnpointorigin, spawnkill.killerorigin, ( 0,4, 0,5, 0,4 ) ); - line( spawnkill.killerorigin, spawnkill.dierorigin, ( 0, 1, 1 ) ); - print3d( spawnkill.dierorigin + vectorScale( ( -1, -1, -1 ), 32 ), "SPAWNDIED!", ( 0, 1, 1 ) ); - } - if ( ( time - spawnkill.time ) < 60000 ) - { - level.spawnlogic_spawnkills[ level.spawnlogic_spawnkills.size ] = oldspawnkills[ i ]; - } - i++; - } - wait 0,05; -#/ - } -} - -updatedeathinfodebug() -{ - while ( 1 ) - { - while ( getDvar( "scr_spawnpointdebug" ) == "0" ) - { - wait 3; - } - updatedeathinfo(); - wait 3; - } -} - -spawnweightdebug( spawnpoints ) -{ - level notify( "stop_spawn_weight_debug" ); - level endon( "stop_spawn_weight_debug" ); -/# - while ( 1 ) - { - while ( getDvar( "scr_spawnpointdebug" ) == "0" ) - { - wait 3; - } - textoffset = vectorScale( ( -1, -1, -1 ), 12 ); - i = 0; - while ( i < spawnpoints.size ) - { - amnt = 1 * ( 1 - ( spawnpoints[ i ].weight / -100000 ) ); - if ( amnt < 0 ) - { - amnt = 0; - } - if ( amnt > 1 ) - { - amnt = 1; - } - orig = spawnpoints[ i ].origin + vectorScale( ( -1, -1, -1 ), 80 ); - print3d( orig, int( spawnpoints[ i ].weight ), ( 1, amnt, 0,5 ) ); - orig += textoffset; - while ( isDefined( spawnpoints[ i ].spawndata ) ) - { - j = 0; - while ( j < spawnpoints[ i ].spawndata.size ) - { - print3d( orig, spawnpoints[ i ].spawndata[ j ], vectorScale( ( -1, -1, -1 ), 0,5 ) ); - orig += textoffset; - j++; - } - } - while ( isDefined( spawnpoints[ i ].sightchecks ) ) - { - j = 0; - while ( j < spawnpoints[ i ].sightchecks.size ) - { - if ( spawnpoints[ i ].sightchecks[ j ].penalty == 0 ) - { - j++; - continue; - } - else - { - print3d( orig, "Sight to enemy: -" + spawnpoints[ i ].sightchecks[ j ].penalty, vectorScale( ( -1, -1, -1 ), 0,5 ) ); - orig += textoffset; - } - j++; - } - } - i++; - } - wait 0,05; -#/ - } -} - -profiledebug() -{ - while ( 1 ) - { - while ( getDvar( #"6A99E750" ) != "1" ) - { - wait 3; - } - i = 0; - while ( i < level.spawnpoints.size ) - { - level.spawnpoints[ i ].weight = randomint( 10000 ); - i++; - } - if ( level.players.size > 0 ) - { - level.players[ randomint( level.players.size ) ] getspawnpoint_nearteam( level.spawnpoints ); - } - wait 0,05; - } -} - -debugnearbyplayers( players, origin ) -{ -/# - if ( getDvar( "scr_spawnpointdebug" ) == "0" ) - { - return; - } - starttime = getTime(); - while ( 1 ) - { - i = 0; - while ( i < players.size ) - { - line( players[ i ].origin, origin, ( 0,5, 1, 0,5 ) ); - i++; - } - if ( ( getTime() - starttime ) > 5000 ) - { - return; - } - wait 0,05; -#/ - } -} - -deathoccured( dier, killer ) -{ -} - -checkforsimilardeaths( deathinfo ) -{ - i = 0; - while ( i < level.spawnlogic_deaths.size ) - { - if ( level.spawnlogic_deaths[ i ].killer == deathinfo.killer ) - { - dist = distance( level.spawnlogic_deaths[ i ].org, deathinfo.org ); - if ( dist > 200 ) - { - i++; - continue; - } - else dist = distance( level.spawnlogic_deaths[ i ].killorg, deathinfo.killorg ); - if ( dist > 200 ) - { - i++; - continue; - } - else - { - level.spawnlogic_deaths[ i ].remove = 1; - } - } - i++; - } -} - -updatedeathinfo() -{ - time = getTime(); - i = 0; - while ( i < level.spawnlogic_deaths.size ) - { - deathinfo = level.spawnlogic_deaths[ i ]; - if ( ( time - deathinfo.time ) > 90000 && isDefined( deathinfo.killer ) && isalive( deathinfo.killer ) || !isDefined( level.teams[ deathinfo.killer.team ] ) && distance( deathinfo.killer.origin, deathinfo.killorg ) > 400 ) - { - level.spawnlogic_deaths[ i ].remove = 1; - } - i++; - } - oldarray = level.spawnlogic_deaths; - level.spawnlogic_deaths = []; - start = 0; - if ( ( oldarray.size - 1024 ) > 0 ) - { - start = oldarray.size - 1024; - } - i = start; - while ( i < oldarray.size ) - { - if ( !isDefined( oldarray[ i ].remove ) ) - { - level.spawnlogic_deaths[ level.spawnlogic_deaths.size ] = oldarray[ i ]; - } - i++; - } -} - -ispointvulnerable( playerorigin ) -{ - pos = self.origin + level.bettymodelcenteroffset; - playerpos = playerorigin + vectorScale( ( -1, -1, -1 ), 32 ); - distsqrd = distancesquared( pos, playerpos ); - forward = anglesToForward( self.angles ); - if ( distsqrd < ( level.bettydetectionradius * level.bettydetectionradius ) ) - { - playerdir = vectornormalize( playerpos - pos ); - angle = acos( vectordot( playerdir, forward ) ); - if ( angle < level.bettydetectionconeangle ) - { - return 1; - } - } - return 0; -} - -avoidweapondamage( spawnpoints ) -{ - if ( getDvar( #"0FB71FB7" ) == "0" ) - { - return; - } - weapondamagepenalty = 100000; - if ( getDvar( #"76B8F046" ) != "" && getDvar( #"76B8F046" ) != "0" ) - { - weapondamagepenalty = getDvarFloat( #"76B8F046" ); - } - mingrenadedistsquared = 62500; - i = 0; - while ( i < spawnpoints.size ) - { - j = 0; - while ( j < level.grenades.size ) - { - if ( !isDefined( level.grenades[ j ] ) ) - { - j++; - continue; - } - else - { - if ( distancesquared( spawnpoints[ i ].origin, level.grenades[ j ].origin ) < mingrenadedistsquared ) - { - spawnpoints[ i ].weight -= weapondamagepenalty; -/# - if ( level.storespawndata || level.debugspawning ) - { - spawnpoints[ i ].spawndata[ spawnpoints[ i ].spawndata.size ] = "Was near grenade: -" + int( weapondamagepenalty ); -#/ - } - } - } - j++; - } - i++; - } -} - -spawnperframeupdate() -{ - spawnpointindex = 0; - while ( 1 ) - { - wait 0,05; - if ( !isDefined( level.spawnpoints ) ) - { - return; - } - spawnpointindex = ( spawnpointindex + 1 ) % level.spawnpoints.size; - spawnpoint = level.spawnpoints[ spawnpointindex ]; - spawnpointupdate( spawnpoint ); - } -} - -getnonteamsum( skip_team, sums ) -{ - value = 0; - _a1986 = level.teams; - _k1986 = getFirstArrayKey( _a1986 ); - while ( isDefined( _k1986 ) ) - { - team = _a1986[ _k1986 ]; - if ( team == skip_team ) - { - } - else - { - value += sums[ team ]; - } - _k1986 = getNextArrayKey( _a1986, _k1986 ); - } - return value; -} - -getnonteammindist( skip_team, mindists ) -{ - dist = 9999999; - _a2000 = level.teams; - _k2000 = getFirstArrayKey( _a2000 ); - while ( isDefined( _k2000 ) ) - { - team = _a2000[ _k2000 ]; - if ( team == skip_team ) - { - } - else - { - if ( dist > mindists[ team ] ) - { - dist = mindists[ team ]; - } - } - _k2000 = getNextArrayKey( _a2000, _k2000 ); - } - return dist; -} - -spawnpointupdate( spawnpoint ) -{ - if ( level.teambased ) - { - sights = []; - _a2018 = level.teams; - _k2018 = getFirstArrayKey( _a2018 ); - while ( isDefined( _k2018 ) ) - { - team = _a2018[ _k2018 ]; - spawnpoint.enemysights[ team ] = 0; - sights[ team ] = 0; - spawnpoint.nearbyplayers[ team ] = []; - _k2018 = getNextArrayKey( _a2018, _k2018 ); - } - } - else spawnpoint.enemysights = 0; - spawnpoint.nearbyplayers[ "all" ] = []; - spawnpointdir = spawnpoint.forward; - debug = 0; -/# - debug = getDvarInt( "scr_spawnpointdebug" ) > 0; -#/ - mindist = []; - distsum = []; - if ( !level.teambased ) - { - mindist[ "all" ] = 9999999; - } - _a2047 = level.teams; - _k2047 = getFirstArrayKey( _a2047 ); - while ( isDefined( _k2047 ) ) - { - team = _a2047[ _k2047 ]; - spawnpoint.distsum[ team ] = 0; - spawnpoint.enemydistsum[ team ] = 0; - spawnpoint.minenemydist[ team ] = 9999999; - mindist[ team ] = 9999999; - _k2047 = getNextArrayKey( _a2047, _k2047 ); - } - spawnpoint.numplayersatlastupdate = 0; - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( player.sessionstate != "playing" ) - { - i++; - continue; - } - else diff = player.origin - spawnpoint.origin; - diff = ( diff[ 0 ], diff[ 1 ], 0 ); - dist = length( diff ); - team = "all"; - if ( level.teambased ) - { - team = player.team; - } - if ( dist < 1024 ) - { - spawnpoint.nearbyplayers[ team ][ spawnpoint.nearbyplayers[ team ].size ] = player; - } - if ( dist < mindist[ team ] ) - { - mindist[ team ] = dist; - } - distsum[ team ] += dist; - spawnpoint.numplayersatlastupdate++; - pdir = anglesToForward( player.angles ); - if ( vectordot( spawnpointdir, diff ) < 0 && vectordot( pdir, diff ) > 0 ) - { - i++; - continue; - } - else - { - losexists = bullettracepassed( player.origin + vectorScale( ( -1, -1, -1 ), 50 ), spawnpoint.sighttracepoint, 0, undefined ); - spawnpoint.lastsighttracetime = getTime(); - if ( losexists ) - { - if ( level.teambased ) - { - sights[ player.team ]++; - } - else - { - spawnpoint.enemysights++; - } -/# - if ( debug ) - { - line( player.origin + vectorScale( ( -1, -1, -1 ), 50 ), spawnpoint.sighttracepoint, ( 0,5, 1, 0,5 ) ); -#/ - } - } - } - i++; - } - if ( level.teambased ) - { - _a2128 = level.teams; - _k2128 = getFirstArrayKey( _a2128 ); - while ( isDefined( _k2128 ) ) - { - team = _a2128[ _k2128 ]; - spawnpoint.enemysights[ team ] = getnonteamsum( team, sights ); - spawnpoint.minenemydist[ team ] = getnonteammindist( team, mindist ); - spawnpoint.distsum[ team ] = distsum[ team ]; - spawnpoint.enemydistsum[ team ] = getnonteamsum( team, distsum ); - _k2128 = getNextArrayKey( _a2128, _k2128 ); - } - } - else spawnpoint.distsum[ "all" ] = distsum[ "all" ]; - spawnpoint.enemydistsum[ "all" ] = distsum[ "all" ]; - spawnpoint.minenemydist[ "all" ] = mindist[ "all" ]; -} - -getlospenalty() -{ - if ( getDvar( #"CACDB8AA" ) != "" && getDvar( #"CACDB8AA" ) != "0" ) - { - return getDvarFloat( #"CACDB8AA" ); - } - return 100000; -} - -lastminutesighttraces( spawnpoint ) -{ - if ( !isDefined( spawnpoint.nearbyplayers ) ) - { - return 0; - } - closest = undefined; - closestdistsq = undefined; - secondclosest = undefined; - secondclosestdistsq = undefined; - _a2162 = spawnpoint.nearbyplayers; - _k2162 = getFirstArrayKey( _a2162 ); - while ( isDefined( _k2162 ) ) - { - team = _a2162[ _k2162 ]; - if ( team == self.team ) - { - } - else - { - i = 0; - while ( i < spawnpoint.nearbyplayers[ team ].size ) - { - player = spawnpoint.nearbyplayers[ team ][ i ]; - if ( !isDefined( player ) ) - { - i++; - continue; - } - else if ( player.sessionstate != "playing" ) - { - i++; - continue; - } - else if ( player == self ) - { - i++; - continue; - } - else distsq = distancesquared( spawnpoint.origin, player.origin ); - if ( !isDefined( closest ) || distsq < closestdistsq ) - { - secondclosest = closest; - secondclosestdistsq = closestdistsq; - closest = player; - closestdistsq = distsq; - i++; - continue; - } - else - { - if ( !isDefined( secondclosest ) || distsq < secondclosestdistsq ) - { - secondclosest = player; - secondclosestdistsq = distsq; - } - } - i++; - } - } - _k2162 = getNextArrayKey( _a2162, _k2162 ); - } - if ( isDefined( closest ) ) - { - if ( bullettracepassed( closest.origin + vectorScale( ( -1, -1, -1 ), 50 ), spawnpoint.sighttracepoint, 0, undefined ) ) - { - return 1; - } - } - if ( isDefined( secondclosest ) ) - { - if ( bullettracepassed( secondclosest.origin + vectorScale( ( -1, -1, -1 ), 50 ), spawnpoint.sighttracepoint, 0, undefined ) ) - { - return 1; - } - } - return 0; -} - -avoidvisibleenemies( spawnpoints, teambased ) -{ - if ( getDvar( #"0FB71FB7" ) == "0" ) - { - return; - } - lospenalty = getlospenalty(); - mindistteam = self.team; - if ( teambased ) - { - i = 0; - while ( i < spawnpoints.size ) - { - if ( !isDefined( spawnpoints[ i ].enemysights ) ) - { - i++; - continue; - } - else - { - penalty = lospenalty * spawnpoints[ i ].enemysights[ self.team ]; - spawnpoints[ i ].weight -= penalty; -/# - if ( level.storespawndata || level.debugspawning ) - { - index = spawnpoints[ i ].sightchecks.size; - spawnpoints[ i ].sightchecks[ index ] = spawnstruct(); - spawnpoints[ i ].sightchecks[ index ].penalty = penalty; -#/ - } - } - i++; - } - } - else i = 0; - while ( i < spawnpoints.size ) - { - if ( !isDefined( spawnpoints[ i ].enemysights ) ) - { - i++; - continue; - } - else - { - penalty = lospenalty * spawnpoints[ i ].enemysights; - spawnpoints[ i ].weight -= penalty; -/# - if ( level.storespawndata || level.debugspawning ) - { - index = spawnpoints[ i ].sightchecks.size; - spawnpoints[ i ].sightchecks[ index ] = spawnstruct(); - spawnpoints[ i ].sightchecks[ index ].penalty = penalty; -#/ - } - } - i++; - } - mindistteam = "all"; - avoidweight = getDvarFloat( "scr_spawn_enemyavoidweight" ); - while ( avoidweight != 0 ) - { - nearbyenemyouterrange = getDvarFloat( "scr_spawn_enemyavoiddist" ); - nearbyenemyouterrangesq = nearbyenemyouterrange * nearbyenemyouterrange; - nearbyenemypenalty = 1500 * avoidweight; - nearbyenemyminorpenalty = 800 * avoidweight; - lastattackerorigin = vectorScale( ( -1, -1, -1 ), 99999 ); - lastdeathpos = vectorScale( ( -1, -1, -1 ), 99999 ); - if ( isalive( self.lastattacker ) ) - { - lastattackerorigin = self.lastattacker.origin; - } - if ( isDefined( self.lastdeathpos ) ) - { - lastdeathpos = self.lastdeathpos; - } - i = 0; - while ( i < spawnpoints.size ) - { - mindist = spawnpoints[ i ].minenemydist[ mindistteam ]; - if ( mindist < ( nearbyenemyouterrange * 2 ) ) - { - penalty = nearbyenemyminorpenalty * ( 1 - ( mindist / ( nearbyenemyouterrange * 2 ) ) ); - if ( mindist < nearbyenemyouterrange ) - { - penalty += nearbyenemypenalty * ( 1 - ( mindist / nearbyenemyouterrange ) ); - } - if ( penalty > 0 ) - { - spawnpoints[ i ].weight -= penalty; -/# - if ( level.storespawndata || level.debugspawning ) - { - spawnpoints[ i ].spawndata[ spawnpoints[ i ].spawndata.size ] = "Nearest enemy at " + int( spawnpoints[ i ].minenemydist[ mindistteam ] ) + " units: -" + int( penalty ); -#/ - } - } - } - i++; - } - } -} - -avoidspawnreuse( spawnpoints, teambased ) -{ - if ( getDvar( #"0FB71FB7" ) == "0" ) - { - return; - } - time = getTime(); - maxtime = 10000; - maxdistsq = 1048576; - i = 0; - while ( i < spawnpoints.size ) - { - spawnpoint = spawnpoints[ i ]; - if ( isDefined( spawnpoint.lastspawnedplayer ) || !isDefined( spawnpoint.lastspawntime ) && !isalive( spawnpoint.lastspawnedplayer ) ) - { - i++; - continue; - } - else - { - if ( spawnpoint.lastspawnedplayer == self ) - { - i++; - continue; - } - else if ( teambased && spawnpoint.lastspawnedplayer.team == self.team ) - { - i++; - continue; - } - else - { - timepassed = time - spawnpoint.lastspawntime; - if ( timepassed < maxtime ) - { - distsq = distancesquared( spawnpoint.lastspawnedplayer.origin, spawnpoint.origin ); - if ( distsq < maxdistsq ) - { - worsen = ( 5000 * ( 1 - ( distsq / maxdistsq ) ) ) * ( 1 - ( timepassed / maxtime ) ); - spawnpoint.weight -= worsen; -/# - if ( level.storespawndata || level.debugspawning ) - { - spawnpoint.spawndata[ spawnpoint.spawndata.size ] = "Was recently used: -" + worsen; -#/ - } - } - else - { - spawnpoint.lastspawnedplayer = undefined; - } - i++; - continue; - } - else - { - spawnpoint.lastspawnedplayer = undefined; - } - } - } - i++; - } -} - -avoidsamespawn( spawnpoints ) -{ - if ( getDvar( #"0FB71FB7" ) == "0" ) - { - return; - } - if ( !isDefined( self.lastspawnpoint ) ) - { - return; - } - i = 0; - while ( i < spawnpoints.size ) - { - if ( spawnpoints[ i ] == self.lastspawnpoint ) - { - spawnpoints[ i ].weight -= 50000; -/# - if ( level.storespawndata || level.debugspawning ) - { - spawnpoints[ i ].spawndata[ spawnpoints[ i ].spawndata.size ] = "Was last spawnpoint: -50000"; -#/ - } - return; - } - else - { - i++; - } - } -} - -getrandomintermissionpoint() -{ - spawnpoints = getentarray( "mp_global_intermission", "classname" ); - if ( !spawnpoints.size ) - { - spawnpoints = getentarray( "info_player_start", "classname" ); - } -/# - assert( spawnpoints.size ); -#/ - spawnpoint = maps/mp/gametypes_zm/_spawnlogic::getspawnpoint_random( spawnpoints ); - return spawnpoint; -} diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_spectating.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_spectating.gsc deleted file mode 100644 index 0752b8d..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_spectating.gsc +++ /dev/null @@ -1,251 +0,0 @@ - -init() //checked changed to match cerberus output -{ - foreach ( team in level.teams ) - { - level.spectateoverride[ team ] = spawnstruct(); - } - level thread onplayerconnect(); -} - -onplayerconnect() //checked matches cerberus output -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread onjoinedteam(); - player thread onjoinedspectators(); - player thread onplayerspawned(); - } -} - -onplayerspawned() //checked matches cerberus output -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self setspectatepermissions(); - } -} - -onjoinedteam() //checked matches cerberus output -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "joined_team" ); - self setspectatepermissionsformachine(); - } -} - -onjoinedspectators() //checked matches cerberus output -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "joined_spectators" ); - self setspectatepermissionsformachine(); - } -} - -updatespectatesettings() //checked changed to match cerberus output -{ - level endon( "game_ended" ); - for ( index = 0; index < level.players.size; index++ ) - { - level.players[ index ] setspectatepermissions(); - } -} - -getsplitscreenteam() //checked partially changed to match cerberus output did not change while loop to for loop see github for more info -{ - index = 0; - while ( index < level.players.size ) - { - if ( !isDefined( level.players[ index ] ) ) - { - index++; - continue; - } - if ( level.players[ index ] == self ) - { - index++; - continue; - } - if ( !self isplayeronsamemachine( level.players[ index ] ) ) - { - index++; - continue; - } - team = level.players[ index ].sessionteam; - if ( team != "spectator" ) - { - return team; - } - index++; - } - return self.sessionteam; -} - -otherlocalplayerstillalive() //checked partially changed to match cerberus output did not change while loop to for loop see github for more info -{ - index = 0; - while ( index < level.players.size ) - { - if ( !isDefined( level.players[ index ] ) ) - { - index++; - continue; - } - if ( level.players[ index ] == self ) - { - index++; - continue; - } - if ( !self isplayeronsamemachine( level.players[ index ] ) ) - { - index++; - continue; - } - if ( isalive( level.players[ index ] ) ) - { - return 1; - } - index++; - } - return 0; -} - -allowspectateallteams( allow ) //checked changed to match cerberus output -{ - foreach ( team in level.teams ) - { - self allowspectateteam( team, allow ); - } -} - -allowspectateallteamsexceptteam( skip_team, allow ) //checked partially changed to match cerberus output did not use continue in foreach see github for more info -{ - foreach ( team in level.teams ) - { - if ( team == skip_team ) - { - } - else - { - self allowspectateteam( team, allow ); - } - } -} - -setspectatepermissions() //checked changed to match cerberus output -{ - team = self.sessionteam; - if ( team == "spectator" ) - { - if ( self issplitscreen() && !level.splitscreen ) - { - team = getsplitscreenteam(); - } - if ( team == "spectator" ) - { - self allowspectateallteams( 1 ); - self allowspectateteam( "freelook", 0 ); - self allowspectateteam( "none", 1 ); - self allowspectateteam( "localplayers", 1 ); - return; - } - } - spectatetype = level.spectatetype; - switch( spectatetype ) - { - case 0: - self allowspectateallteams( 0 ); - self allowspectateteam( "freelook", 0 ); - self allowspectateteam( "none", 1 ); - self allowspectateteam( "localplayers", 0 ); - break; - case 3: - if ( self issplitscreen() && self otherlocalplayerstillalive() ) - { - self allowspectateallteams( 0 ); - self allowspectateteam( "none", 0 ); - self allowspectateteam( "freelook", 0 ); - self allowspectateteam( "localplayers", 1 ); - break; - } - case 1: - if ( !level.teambased ) - { - self allowspectateallteams( 1 ); - self allowspectateteam( "none", 1 ); - self allowspectateteam( "freelook", 0 ); - self allowspectateteam( "localplayers", 1 ); - } - else if ( isDefined( team ) && isDefined( level.teams[ team ] ) ) - { - self allowspectateteam( team, 1 ); - self allowspectateallteamsexceptteam( team, 0 ); - self allowspectateteam( "freelook", 0 ); - self allowspectateteam( "none", 0 ); - self allowspectateteam( "localplayers", 1 ); - } - else - { - self allowspectateallteams( 0 ); - self allowspectateteam( "freelook", 0 ); - self allowspectateteam( "none", 0 ); - self allowspectateteam( "localplayers", 1 ); - } - break; - case 2: - self allowspectateallteams( 1 ); - self allowspectateteam( "freelook", 1 ); - self allowspectateteam( "none", 1 ); - self allowspectateteam( "localplayers", 1 ); - break; - } - if ( isDefined( team ) && isDefined( level.teams[ team ] ) ) - { - if ( isDefined( level.spectateoverride[ team ].allowfreespectate ) ) - { - self allowspectateteam( "freelook", 1 ); - } - if ( isDefined( level.spectateoverride[ team ].allowenemyspectate ) ) - { - self allowspectateallteamsexceptteam( team, 1 ); - } - } -} - -setspectatepermissionsformachine() //checked partially changed to match cerberus output did not change while loop to for loop see github for more info -{ - self setspectatepermissions(); - if ( !self issplitscreen() ) - { - return; - } - index = 0; - while ( index < level.players.size ) - { - if ( !isDefined( level.players[ index ] ) ) - { - index++; - continue; - } - else if ( level.players[ index ] == self ) - { - index++; - continue; - } - else if ( !self isplayeronsamemachine( level.players[ index ] ) ) - { - index++; - continue; - } - level.players[ index ] setspectatepermissions(); - index++; - } -} - diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_tweakables.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_tweakables.gsc deleted file mode 100644 index 307f7a6..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_tweakables.gsc +++ /dev/null @@ -1,401 +0,0 @@ -#include maps/mp/_utility; - -gettweakabledvarvalue( category, name ) //checked matches cerberus output -{ - switch( category ) - { - case "rule": - dvar = level.rules[ name ].dvar; - break; - case "game": - dvar = level.gametweaks[ name ].dvar; - break; - case "team": - dvar = level.teamtweaks[ name ].dvar; - break; - case "player": - dvar = level.playertweaks[ name ].dvar; - break; - case "class": - dvar = level.classtweaks[ name ].dvar; - break; - case "weapon": - dvar = level.weapontweaks[ name ].dvar; - break; - case "killstreak": - dvar = level.hardpointtweaks[ name ].dvar; - break; - case "hud": - dvar = level.hudtweaks[ name ].dvar; - break; - default: - dvar = undefined; - break; - } - /* -/# - assert( isDefined( dvar ) ); -#/ - */ - value = getDvarInt( dvar ); - return value; -} - -gettweakabledvar( category, name ) //checked matches cerberus output -{ - switch( category ) - { - case "rule": - value = level.rules[ name ].dvar; - break; - case "game": - value = level.gametweaks[ name ].dvar; - break; - case "team": - value = level.teamtweaks[ name ].dvar; - break; - case "player": - value = level.playertweaks[ name ].dvar; - break; - case "class": - value = level.classtweaks[ name ].dvar; - break; - case "weapon": - value = level.weapontweaks[ name ].dvar; - break; - case "killstreak": - value = level.hardpointtweaks[ name ].dvar; - break; - case "hud": - value = level.hudtweaks[ name ].dvar; - break; - default: - value = undefined; - break; - } - /* -/# - assert( isDefined( value ) ); -#/ - */ - return value; -} - -gettweakablevalue( category, name ) //checked matches cerberus output -{ - switch( category ) - { - case "rule": - value = level.rules[ name ].value; - break; - case "game": - value = level.gametweaks[ name ].value; - break; - case "team": - value = level.teamtweaks[ name ].value; - break; - case "player": - value = level.playertweaks[ name ].value; - break; - case "class": - value = level.classtweaks[ name ].value; - break; - case "weapon": - value = level.weapontweaks[ name ].value; - break; - case "killstreak": - value = level.hardpointtweaks[ name ].value; - break; - case "hud": - value = level.hudtweaks[ name ].value; - break; - default: - value = undefined; - break; - } - overridedvar = "scr_" + level.gametype + "_" + category + "_" + name; - if ( getDvar( overridedvar ) != "" ) - { - return getDvarInt( overridedvar ); - } - /* -/# - assert( isDefined( value ) ); -#/ - */ - return value; -} - -gettweakablelastvalue( category, name ) //checked matches cerberus output -{ - switch( category ) - { - case "rule": - value = level.rules[ name ].lastvalue; - break; - case "game": - value = level.gametweaks[ name ].lastvalue; - break; - case "team": - value = level.teamtweaks[ name ].lastvalue; - break; - case "player": - value = level.playertweaks[ name ].lastvalue; - break; - case "class": - value = level.classtweaks[ name ].lastvalue; - break; - case "weapon": - value = level.weapontweaks[ name ].lastvalue; - break; - case "killstreak": - value = level.hardpointtweaks[ name ].lastvalue; - break; - case "hud": - value = level.hudtweaks[ name ].lastvalue; - break; - default: - value = undefined; - break; - } - /* -/# - assert( isDefined( value ) ); -#/ - */ - return value; -} - -settweakablevalue( category, name, value ) //checked matches cerberus output -{ - switch( category ) - { - case "rule": - dvar = level.rules[ name ].dvar; - break; - case "game": - dvar = level.gametweaks[ name ].dvar; - break; - case "team": - dvar = level.teamtweaks[ name ].dvar; - break; - case "player": - dvar = level.playertweaks[ name ].dvar; - break; - case "class": - dvar = level.classtweaks[ name ].dvar; - break; - case "weapon": - dvar = level.weapontweaks[ name ].dvar; - break; - case "killstreak": - dvar = level.hardpointtweaks[ name ].dvar; - break; - case "hud": - dvar = level.hudtweaks[ name ].dvar; - break; - default: - dvar = undefined; - break; - } - setdvar( dvar, value ); -} - -settweakablelastvalue( category, name, value ) //checked changed to match cerberus output -{ - switch( category ) - { - case "rule": - level.rules[ name ].lastvalue = value; - break; - case "game": - level.gametweaks[ name ].lastvalue = value; - break; - case "team": - level.teamtweaks[ name ].lastvalue = value; - break; - case "player": - level.playertweaks[ name ].lastvalue = value; - break; - case "class": - level.classtweaks[ name ].lastvalue = value; - break; - case "weapon": - level.weapontweaks[ name ].lastvalue = value; - break; - case "killstreak": - level.hardpointtweaks[ name ].lastvalue = value; - break; - case "hud": - level.hudtweaks[ name ].lastvalue = value; - break; - default: - break; - } -} - -registertweakable( category, name, dvar, value ) //checked matches cerberus output -{ - if ( isstring( value ) ) - { - if ( getDvar( dvar ) == "" ) - { - setdvar( dvar, value ); - } - else - { - value = getDvar( dvar ); - } - } - else if ( getDvar( dvar ) == "" ) - { - setdvar( dvar, value ); - } - else - { - value = getDvarInt( dvar ); - } - switch( category ) - { - case "rule": - if ( !isDefined( level.rules[ name ] ) ) - { - level.rules[ name ] = spawnstruct(); - } - level.rules[ name ].value = value; - level.rules[ name ].lastvalue = value; - level.rules[ name ].dvar = dvar; - break; - case "game": - if ( !isDefined( level.gametweaks[ name ] ) ) - { - level.gametweaks[ name ] = spawnstruct(); - } - level.gametweaks[ name ].value = value; - level.gametweaks[ name ].lastvalue = value; - level.gametweaks[ name ].dvar = dvar; - break; - case "team": - if ( !isDefined( level.teamtweaks[ name ] ) ) - { - level.teamtweaks[ name ] = spawnstruct(); - } - level.teamtweaks[ name ].value = value; - level.teamtweaks[ name ].lastvalue = value; - level.teamtweaks[ name ].dvar = dvar; - break; - case "player": - if ( !isDefined( level.playertweaks[ name ] ) ) - { - level.playertweaks[ name ] = spawnstruct(); - } - level.playertweaks[ name ].value = value; - level.playertweaks[ name ].lastvalue = value; - level.playertweaks[ name ].dvar = dvar; - break; - case "class": - if ( !isDefined( level.classtweaks[ name ] ) ) - { - level.classtweaks[ name ] = spawnstruct(); - } - level.classtweaks[ name ].value = value; - level.classtweaks[ name ].lastvalue = value; - level.classtweaks[ name ].dvar = dvar; - break; - case "weapon": - if ( !isDefined( level.weapontweaks[ name ] ) ) - { - level.weapontweaks[ name ] = spawnstruct(); - } - level.weapontweaks[ name ].value = value; - level.weapontweaks[ name ].lastvalue = value; - level.weapontweaks[ name ].dvar = dvar; - break; - case "killstreak": - if ( !isDefined( level.hardpointtweaks[ name ] ) ) - { - level.hardpointtweaks[ name ] = spawnstruct(); - } - level.hardpointtweaks[ name ].value = value; - level.hardpointtweaks[ name ].lastvalue = value; - level.hardpointtweaks[ name ].dvar = dvar; - break; - case "hud": - if ( !isDefined( level.hudtweaks[ name ] ) ) - { - level.hudtweaks[ name ] = spawnstruct(); - } - level.hudtweaks[ name ].value = value; - level.hudtweaks[ name ].lastvalue = value; - level.hudtweaks[ name ].dvar = dvar; - break; - } -} - -init() //checked matches cerberus output -{ - level.clienttweakables = []; - level.tweakablesinitialized = 1; - level.rules = []; - level.gametweaks = []; - level.teamtweaks = []; - level.playertweaks = []; - level.classtweaks = []; - level.weapontweaks = []; - level.hardpointtweaks = []; - level.hudtweaks = []; - registertweakable( "game", "arcadescoring", "scr_game_arcadescoring", 0 ); - registertweakable( "game", "difficulty", "scr_game_difficulty", 1 ); - registertweakable( "game", "pinups", "scr_game_pinups", 0 ); - registertweakable( "team", "teamkillerplaylistbanquantum", "scr_team_teamkillerplaylistbanquantum", 0 ); - registertweakable( "team", "teamkillerplaylistbanpenalty", "scr_team_teamkillerplaylistbanpenalty", 0 ); - registertweakable( "player", "allowrevive", "scr_player_allowrevive", 1 ); - registertweakable( "weapon", "allowfrag", "scr_weapon_allowfrags", 1 ); - registertweakable( "weapon", "allowsmoke", "scr_weapon_allowsmoke", 1 ); - registertweakable( "weapon", "allowflash", "scr_weapon_allowflash", 1 ); - registertweakable( "weapon", "allowc4", "scr_weapon_allowc4", 1 ); - registertweakable( "weapon", "allowsatchel", "scr_weapon_allowsatchel", 1 ); - registertweakable( "weapon", "allowbetty", "scr_weapon_allowbetty", 1 ); - registertweakable( "weapon", "allowrpgs", "scr_weapon_allowrpgs", 1 ); - registertweakable( "weapon", "allowmines", "scr_weapon_allowmines", 1 ); - registertweakable( "hud", "showobjicons", "ui_hud_showobjicons", 1 ); - setclienttweakable( "hud", "showobjicons" ); - registertweakable( "killstreak", "allowradar", "scr_hardpoint_allowradar", 1 ); - registertweakable( "killstreak", "allowradardirection", "scr_hardpoint_allowradardirection", 1 ); - registertweakable( "killstreak", "allowcounteruav", "scr_hardpoint_allowcounteruav", 1 ); - registertweakable( "killstreak", "allowdogs", "scr_hardpoint_allowdogs", 1 ); - registertweakable( "killstreak", "allowhelicopter_comlink", "scr_hardpoint_allowhelicopter_comlink", 1 ); - registertweakable( "killstreak", "allowrcbomb", "scr_hardpoint_allowrcbomb", 1 ); - registertweakable( "killstreak", "allowauto_turret", "scr_hardpoint_allowauto_turret", 1 ); - level thread updateuitweakables(); -} - -setclienttweakable( category, name ) //checked matches cerberus output -{ - level.clienttweakables[ level.clienttweakables.size ] = name; -} - -updateuitweakables() //checked changed to match cerberus output -{ - for ( ;; ) - { - for ( index = 0; index < level.clienttweakables.size; index++ ) - { - clienttweakable = level.clienttweakables[ index ]; - curvalue = gettweakabledvarvalue( "hud", clienttweakable ); - lastvalue = gettweakablelastvalue( "hud", clienttweakable ); - if ( curvalue != lastvalue ) - { - updateserverdvar( gettweakabledvar( "hud", clienttweakable ), curvalue ); - settweakablelastvalue( "hud", clienttweakable, curvalue ); - } - } - wait 1; - } -} - -updateserverdvar( dvar, value ) //checked matches cerberus output -{ - makedvarserverinfo( dvar, value ); -} - diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_weapon_utils.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_weapon_utils.gsc deleted file mode 100644 index 3d9b204..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_weapon_utils.gsc +++ /dev/null @@ -1,124 +0,0 @@ -#include maps/mp/killstreaks/_killstreaks; -#include maps/mp/_utility; -#include common_scripts/utility; - -isgrenadelauncherweapon( weapon ) //checked matches cerberus output -{ - if ( getsubstr( weapon, 0, 3 ) == "gl_" ) - { - return 1; - } - switch( weapon ) - { - case "china_lake_mp": - case "xm25_mp": - return 1; - default: - return 0; - } -} - -isdumbrocketlauncherweapon( weapon ) //checked matches cerberus output -{ - switch( weapon ) - { - case "m220_tow_mp": - case "rpg_mp": - return 1; - default: - return 0; - } -} - -isguidedrocketlauncherweapon( weapon ) //checked matches cerberus output -{ - switch( weapon ) - { - case "fhj18_mp": - case "javelin_mp": - case "m202_flash_mp": - case "m72_law_mp": - case "smaw_mp": - return 1; - default: - return 0; - } -} - -isrocketlauncherweapon( weapon ) //checked matches cerberus output -{ - if ( isdumbrocketlauncherweapon( weapon ) ) - { - return 1; - } - if ( isguidedrocketlauncherweapon( weapon ) ) - { - return 1; - } - return 0; -} - -islauncherweapon( weapon ) //checked matches cerberus output -{ - if ( isrocketlauncherweapon( weapon ) ) - { - return 1; - } - if ( isgrenadelauncherweapon( weapon ) ) - { - return 1; - } - return 0; -} - -isreducedteamkillweapon( weapon ) -{ - switch( weapon ) - { - case "planemortar_mp": - return 1; - default: - return 0; - } -} - -ishackweapon( weapon ) //checked matches cerberus output -{ - return 0; -} - -ispistol( weapon ) //checked changed at own discretion -{ - if ( isDefined( level.side_arm_array[ weapon ] ) ) - { - return 1; - } - return 0; -} - -isflashorstunweapon( weapon ) //checked matches cerberus output -{ - if ( isDefined( weapon ) ) - { - switch( weapon ) - { - case "concussion_grenade_mp": - case "flash_grenade_mp": - case "proximity_grenade_aoe_mp": - case "proximity_grenade_mp": - return 1; - } - } - return 0; -} - -isflashorstundamage( weapon, meansofdeath ) //checked changed at own discretion -{ - if ( ( meansofdeath == "MOD_GAS" || meansofdeath == "MOD_GRENADE_SPLASH" ) && isflashorstunweapon( weapon ) ) - { - return 1; - } - return 0; -} - - diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_weaponobjects.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_weaponobjects.gsc deleted file mode 100644 index 8953fc5..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_weaponobjects.gsc +++ /dev/null @@ -1,2435 +0,0 @@ -#include maps/mp/gametypes_zm/_globallogic_audio; -#include maps/mp/gametypes_zm/_damagefeedback; -#include maps/mp/gametypes_zm/_globallogic_player; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/_challenges; -#include maps/mp/_ballistic_knife; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ -/# - debug = weapons_get_dvar_int( "scr_weaponobject_debug", "0" ); -#/ - coneangle = weapons_get_dvar_int( "scr_weaponobject_coneangle", "70" ); - mindist = weapons_get_dvar_int( "scr_weaponobject_mindist", "20" ); - graceperiod = weapons_get_dvar( "scr_weaponobject_graceperiod", "0.6" ); - radius = weapons_get_dvar_int( "scr_weaponobject_radius", "192" ); - level thread onplayerconnect(); - level.watcherweapons = []; - level.watcherweapons = getwatcherweapons(); - level.watcherweaponnames = []; - level.watcherweaponnames = getwatchernames( level.watcherweapons ); - level.retrievableweapons = []; - level.retrievableweapons = getretrievableweapons(); - level.retrievableweaponnames = []; - level.retrievableweaponnames = getwatchernames( level.retrievableweapons ); - level.weaponobjects_headicon_offset = []; - level.weaponobjects_headicon_offset[ "default" ] = vectorScale( ( 0, 0, 1 ), 20 ); - level.weaponobjectexplodethisframe = 0; - if ( getDvar( "scr_deleteexplosivesonspawn" ) == "" ) - { - setdvar( "scr_deleteexplosivesonspawn", 1 ); - } - level.deleteexplosivesonspawn = getDvarInt( "scr_deleteexplosivesonspawn" ); - if ( sessionmodeiszombiesgame() ) - { - return; - } - precachestring( &"MP_DEFUSING_EXPLOSIVE" ); - level.claymorefxid = loadfx( "weapon/claymore/fx_claymore_laser" ); - level._equipment_spark_fx = loadfx( "weapon/grenade/fx_spark_disabled_weapon" ); - level._equipment_emp_destroy_fx = loadfx( "weapon/emp/fx_emp_explosion_equip" ); - level._equipment_explode_fx = loadfx( "explosions/fx_exp_equipment" ); - level._equipment_explode_fx_lg = loadfx( "explosions/fx_exp_equipment_lg" ); - level._effect[ "powerLight" ] = loadfx( "weapon/crossbow/fx_trail_crossbow_blink_red_os" ); - setupretrievablehintstrings(); - level.weaponobjects_headicon_offset[ "acoustic_sensor_mp" ] = vectorScale( ( 0, 0, 1 ), 25 ); - level.weaponobjects_headicon_offset[ "sensor_grenade_mp" ] = vectorScale( ( 0, 0, 1 ), 25 ); - level.weaponobjects_headicon_offset[ "camera_spike_mp" ] = vectorScale( ( 0, 0, 1 ), 35 ); - level.weaponobjects_headicon_offset[ "claymore_mp" ] = vectorScale( ( 0, 0, 1 ), 20 ); - level.weaponobjects_headicon_offset[ "bouncingbetty_mp" ] = vectorScale( ( 0, 0, 1 ), 20 ); - level.weaponobjects_headicon_offset[ "satchel_charge_mp" ] = vectorScale( ( 0, 0, 1 ), 10 ); - level.weaponobjects_headicon_offset[ "scrambler_mp" ] = vectorScale( ( 0, 0, 1 ), 20 ); - level.weaponobjects_headicon_offset[ "trophy_system_mp" ] = vectorScale( ( 0, 0, 1 ), 20 ); - level.weaponobjects_hacker_trigger_width = 32; - level.weaponobjects_hacker_trigger_height = 32; -} - -getwatchernames( weapons ) -{ - names = []; - _a73 = weapons; - index = getFirstArrayKey( _a73 ); - while ( isDefined( index ) ) - { - weapon = _a73[ index ]; - names[ index ] = getsubstr( weapon, 0, weapon.size - 3 ); - index = getNextArrayKey( _a73, index ); - } - return names; -} - -weapons_get_dvar_int( dvar, def ) -{ - return int( weapons_get_dvar( dvar, def ) ); -} - -weapons_get_dvar( dvar, def ) -{ - if ( getDvar( dvar ) != "" ) - { - return getDvarFloat( dvar ); - } - else - { - setdvar( dvar, def ); - return def; - } -} - -setupretrievablehintstrings() -{ - createretrievablehint( "hatchet", &"MP_HATCHET_PICKUP" ); - createretrievablehint( "claymore", &"MP_CLAYMORE_PICKUP" ); - createretrievablehint( "bouncingbetty", &"MP_BOUNCINGBETTY_PICKUP" ); - createretrievablehint( "trophy_system", &"MP_TROPHY_SYSTEM_PICKUP" ); - createretrievablehint( "acoustic_sensor", &"MP_ACOUSTIC_SENSOR_PICKUP" ); - createretrievablehint( "camera_spike", &"MP_CAMERA_SPIKE_PICKUP" ); - createretrievablehint( "satchel_charge", &"MP_SATCHEL_CHARGE_PICKUP" ); - createretrievablehint( "scrambler", &"MP_SCRAMBLER_PICKUP" ); - createdestroyhint( "trophy_system", &"MP_TROPHY_SYSTEM_DESTROY" ); - createdestroyhint( "sensor_grenade", &"MP_SENSOR_GRENADE_DESTROY" ); - createhackerhint( "claymore_mp", &"MP_CLAYMORE_HACKING" ); - createhackerhint( "bouncingbetty_mp", &"MP_BOUNCINGBETTY_HACKING" ); - createhackerhint( "trophy_system_mp", &"MP_TROPHY_SYSTEM_HACKING" ); - createhackerhint( "acoustic_sensor_mp", &"MP_ACOUSTIC_SENSOR_HACKING" ); - createhackerhint( "camera_spike_mp", &"MP_CAMERA_SPIKE_HACKING" ); - createhackerhint( "satchel_charge_mp", &"MP_SATCHEL_CHARGE_HACKING" ); - createhackerhint( "scrambler_mp", &"MP_SCRAMBLER_HACKING" ); -} - -onplayerconnect() -{ - if ( isDefined( level._weaponobjects_on_player_connect_override ) ) - { - level thread [[ level._weaponobjects_on_player_connect_override ]](); - return; - } - for ( ;; ) - { - level waittill( "connecting", player ); - player.usedweapons = 0; - player.hits = 0; - player thread onplayerspawned(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - pixbeginevent( "onPlayerSpawned" ); - if ( !isDefined( self.watchersinitialized ) ) - { - self createbasewatchers(); - self setupretrievablewatcher(); - self thread watchweaponobjectusage(); - self.watchersinitialized = 1; - } - self resetwatchers(); - pixendevent(); - } -} - -resetwatchers() -{ - if ( !isDefined( self.weaponobjectwatcherarray ) ) - { - return undefined; - } - team = self.team; - _a199 = self.weaponobjectwatcherarray; - _k199 = getFirstArrayKey( _a199 ); - while ( isDefined( _k199 ) ) - { - watcher = _a199[ _k199 ]; - resetweaponobjectwatcher( watcher, team ); - _k199 = getNextArrayKey( _a199, _k199 ); - } -} - -createbasewatchers() -{ - _a208 = level.watcherweapons; - index = getFirstArrayKey( _a208 ); - while ( isDefined( index ) ) - { - weapon = _a208[ index ]; - self createweaponobjectwatcher( level.watcherweaponnames[ index ], weapon, self.team ); - index = getNextArrayKey( _a208, index ); - } - _a214 = level.retrievableweapons; - index = getFirstArrayKey( _a214 ); - while ( isDefined( index ) ) - { - weapon = _a214[ index ]; - self createweaponobjectwatcher( level.retrievableweaponnames[ index ], weapon, self.team ); - index = getNextArrayKey( _a214, index ); - } -} - -setupretrievablewatcher() -{ - i = 0; - while ( i < level.retrievableweapons.size ) - { - watcher = getweaponobjectwatcherbyweapon( level.retrievableweapons[ i ] ); - if ( !isDefined( watcher.onspawnretrievetriggers ) ) - { - watcher.onspawnretrievetriggers = ::onspawnretrievableweaponobject; - } - if ( !isDefined( watcher.ondestroyed ) ) - { - watcher.ondestroyed = ::ondestroyed; - } - if ( !isDefined( watcher.pickup ) ) - { - watcher.pickup = ::pickup; - } - i++; - } -} - -createballisticknifewatcher() -{ - watcher = self createuseweaponobjectwatcher( "knife_ballistic", "knife_ballistic_mp", self.team ); - watcher.onspawn = ::maps/mp/_ballistic_knife::onspawn; - watcher.detonate = ::deleteent; - watcher.onspawnretrievetriggers = ::maps/mp/_ballistic_knife::onspawnretrievetrigger; - watcher.storedifferentobject = 1; -} - -createhatchetwatcher() -{ - watcher = self createuseweaponobjectwatcher( "hatchet", "hatchet_mp", self.team ); - watcher.detonate = ::deleteent; - watcher.onspawn = ::voidonspawn; - watcher.onspawnretrievetriggers = ::onspawnhatchettrigger; -} - -createtactinsertwatcher() -{ - watcher = self createuseweaponobjectwatcher( "tactical_insertion", "tactical_insertion_mp", self.team ); - watcher.playdestroyeddialog = 0; -} - -creatercbombwatcher() -{ -} - -createqrdronewatcher() -{ -} - -createplayerhelicopterwatcher() -{ - watcher = self createuseweaponobjectwatcher( "helicopter_player", "helicopter_player_mp", self.team ); - watcher.altdetonate = 1; - watcher.headicon = 0; -} - -createclaymorewatcher() -{ - watcher = self createproximityweaponobjectwatcher( "claymore", "claymore_mp", self.team ); - watcher.watchforfire = 1; - watcher.detonate = ::claymoredetonate; - watcher.activatesound = "wpn_claymore_alert"; - watcher.hackable = 1; - watcher.hackertoolradius = level.claymorehackertoolradius; - watcher.hackertooltimems = level.claymorehackertooltimems; - watcher.reconmodel = "t6_wpn_claymore_world_detect"; - watcher.ownergetsassist = 1; - detectionconeangle = weapons_get_dvar_int( "scr_weaponobject_coneangle" ); - watcher.detectiondot = cos( detectionconeangle ); - watcher.detectionmindist = weapons_get_dvar_int( "scr_weaponobject_mindist" ); - watcher.detectiongraceperiod = weapons_get_dvar( "scr_weaponobject_graceperiod" ); - watcher.detonateradius = weapons_get_dvar_int( "scr_weaponobject_radius" ); - watcher.stun = ::weaponstun; - watcher.stuntime = 5; -} - -waittillnotmoving_and_notstunned() -{ - prevorigin = self.origin; - while ( 1 ) - { - wait 0,15; - if ( self.origin == prevorigin && !self isstunned() ) - { - return; - } - else - { - prevorigin = self.origin; - } - } -} - -voidonspawn( unused0, unused1 ) -{ -} - -deleteent( attacker, emp ) -{ - self delete(); -} - -clearfxondeath( fx ) -{ - fx endon( "death" ); - self waittill_any( "death", "hacked" ); - fx delete(); -} - -deleteweaponobjectarray() -{ - while ( isDefined( self.objectarray ) ) - { - i = 0; - while ( i < self.objectarray.size ) - { - if ( isDefined( self.objectarray[ i ] ) ) - { - self.objectarray[ i ] delete(); - } - i++; - } - } - self.objectarray = []; -} - -claymoredetonate( attacker, weaponname ) -{ - from_emp = 0; - if ( !isDefined( from_emp ) || !from_emp ) - { - if ( isDefined( attacker ) ) - { - if ( level.teambased || attacker.team != self.owner.team && attacker != self.owner ) - { - attacker maps/mp/_challenges::destroyedexplosive(); - } - } - } - maps/mp/gametypes_zm/_weaponobjects::weapondetonate( attacker, weaponname ); -} - -weapondetonate( attacker, weaponname ) -{ - from_emp = 0; - if ( from_emp ) - { - self delete(); - return; - } - if ( isDefined( attacker ) ) - { - self detonate( attacker ); - } - else if ( isDefined( self.owner ) && isplayer( self.owner ) ) - { - self detonate( self.owner ); - } - else - { - self detonate(); - } -} - -waitanddetonate( object, delay, attacker, weaponname ) -{ - object endon( "death" ); - object endon( "hacked" ); - from_emp = 0; - if ( from_emp ) - { - object setclientflag( 15 ); - object setclientflag( 9 ); - object.stun_fx = 1; - if ( isDefined( object.name ) && object.name == "qrdrone_turret_mp" ) - { - playfx( level._equipment_emp_destroy_fx, object.origin + ( 0, 0, 1 ), ( 0, randomfloat( 360 ), 0 ) ); - } - else - { - playfx( level._equipment_emp_destroy_fx, object.origin + vectorScale( ( 0, 0, 1 ), 5 ), ( 0, randomfloat( 360 ), 0 ) ); - } - delay = 1,1; - } - if ( delay ) - { - wait delay; - } - if ( isDefined( object.detonated ) && object.detonated == 1 ) - { - return; - } - if ( !isDefined( self.detonate ) ) - { - return; - } - if ( isDefined( attacker ) && isplayer( attacker ) && isDefined( attacker.pers[ "team" ] ) && isDefined( object.owner ) && isDefined( object.owner.pers[ "team" ] ) ) - { - if ( level.teambased ) - { - if ( attacker.pers[ "team" ] != object.owner.pers[ "team" ] ) - { - attacker notify( "destroyed_explosive" ); - } - } - else - { - if ( attacker != object.owner ) - { - attacker notify( "destroyed_explosive" ); - } - } - } - object.detonated = 1; - object [[ self.detonate ]]( attacker, weaponname ); -} - -detonateweaponobjectarray( forcedetonation, weapon ) -{ - undetonated = []; - while ( isDefined( self.objectarray ) ) - { - i = 0; - while ( i < self.objectarray.size ) - { - if ( isDefined( self.objectarray[ i ] ) ) - { - if ( self.objectarray[ i ] isstunned() && forcedetonation == 0 ) - { - undetonated[ undetonated.size ] = self.objectarray[ i ]; - i++; - continue; - } - else - { - if ( isDefined( weapon ) ) - { - if ( weapon ishacked() && weapon.name != self.objectarray[ i ].name ) - { - undetonated[ undetonated.size ] = self.objectarray[ i ]; - i++; - continue; - } - else if ( self.objectarray[ i ] ishacked() && weapon.name != self.objectarray[ i ].name ) - { - undetonated[ undetonated.size ] = self.objectarray[ i ]; - i++; - continue; - } - } - else - { - self thread waitanddetonate( self.objectarray[ i ], 0,1, undefined, weapon ); - } - } - } - i++; - } - } - self.objectarray = undetonated; -} - -addweaponobjecttowatcher( watchername, weapon ) -{ - watcher = getweaponobjectwatcher( watchername ); -/# - assert( isDefined( watcher ), "Weapon object watcher " + watchername + " does not exist" ); -#/ - self addweaponobject( watcher, weapon ); -} - -addweaponobject( watcher, weapon ) -{ - if ( !isDefined( watcher.storedifferentobject ) ) - { - watcher.objectarray[ watcher.objectarray.size ] = weapon; - } - weapon.owner = self; - weapon.detonated = 0; - weapon.name = watcher.weapon; - if ( isDefined( watcher.ondamage ) ) - { - weapon thread [[ watcher.ondamage ]]( watcher ); - } - else - { - weapon thread weaponobjectdamage( watcher ); - } - weapon.ownergetsassist = watcher.ownergetsassist; - if ( isDefined( watcher.onspawn ) ) - { - weapon thread [[ watcher.onspawn ]]( watcher, self ); - } - if ( isDefined( watcher.onspawnfx ) ) - { - weapon thread [[ watcher.onspawnfx ]](); - } - if ( isDefined( watcher.reconmodel ) ) - { - weapon thread attachreconmodel( watcher.reconmodel, self ); - } - if ( isDefined( watcher.onspawnretrievetriggers ) ) - { - weapon thread [[ watcher.onspawnretrievetriggers ]]( watcher, self ); - } - if ( watcher.hackable ) - { - weapon thread hackerinit( watcher ); - } - if ( isDefined( watcher.stun ) ) - { - weapon thread watchscramble( watcher ); - } - if ( watcher.playdestroyeddialog ) - { - weapon thread playdialogondeath( self ); - weapon thread watchobjectdamage( self ); - } - if ( watcher.deleteonkillbrush ) - { - weapon thread deleteonkillbrush( self ); - } -} - -watchscramble( watcher ) -{ -} - -deleteweaponobjecthelper( weapon_ent ) -{ - if ( !isDefined( weapon_ent.name ) ) - { - return; - } - watcher = self getweaponobjectwatcherbyweapon( weapon_ent.name ); - if ( !isDefined( watcher ) ) - { - return; - } - watcher.objectarray = deleteweaponobject( watcher, weapon_ent ); -} - -deleteweaponobject( watcher, weapon_ent ) -{ - temp_objectarray = watcher.objectarray; - watcher.objectarray = []; - j = 0; - i = 0; - while ( i < temp_objectarray.size ) - { - if ( !isDefined( temp_objectarray[ i ] ) || temp_objectarray[ i ] == weapon_ent ) - { - i++; - continue; - } - else - { - watcher.objectarray[ j ] = temp_objectarray[ i ]; - j++; - } - i++; - } - return watcher.objectarray; -} - -weaponobjectdamage( watcher ) -{ - self endon( "death" ); - self endon( "hacked" ); - self setcandamage( 1 ); - self.maxhealth = 100000; - self.health = self.maxhealth; - attacker = undefined; - for ( ;; ) - { - while ( 1 ) - { - self waittill( "damage", damage, attacker, direction_vec, point, type, modelname, tagname, partname, weaponname, idflags ); - if ( isDefined( weaponname ) ) - { - switch( weaponname ) - { - case "concussion_grenade_mp": - case "flash_grenade_mp": - case "proximity_grenade_mp": - if ( watcher.stuntime > 0 ) - { - self thread stunstart( watcher, watcher.stuntime ); - } - if ( level.teambased && self.owner.team != attacker.team ) - { - if ( maps/mp/gametypes_zm/_globallogic_player::dodamagefeedback( weaponname, attacker ) ) - { - attacker maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback(); - } - continue; - } - else - { - if ( !level.teambased && self.owner != attacker ) - { - if ( maps/mp/gametypes_zm/_globallogic_player::dodamagefeedback( weaponname, attacker ) ) - { - attacker maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback(); - } - } - } - } - case "willy_pete_mp": - } - case "emp_grenade_mp": - if ( level.teambased && self.owner.team != attacker.team ) - { - if ( maps/mp/gametypes_zm/_globallogic_player::dodamagefeedback( weaponname, attacker ) ) - { - attacker maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback(); - } - } - else if ( !level.teambased && self.owner != attacker ) - { - if ( maps/mp/gametypes_zm/_globallogic_player::dodamagefeedback( weaponname, attacker ) ) - { - attacker maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback(); - } - } - break; - break; - default: - } - } - if ( !isplayer( attacker ) && isDefined( attacker.owner ) ) - { - attacker = attacker.owner; - } - while ( level.teambased && isplayer( attacker ) ) - { - while ( !level.hardcoremode && self.owner.team == attacker.pers[ "team" ] && self.owner != attacker ) - { - continue; - } - } - if ( maps/mp/gametypes_zm/_globallogic_player::dodamagefeedback( weaponname, attacker ) ) - { - attacker maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback(); - } - if ( !isvehicle( self ) && !friendlyfirecheck( self.owner, attacker ) ) - { - continue; - } - } - if ( level.weaponobjectexplodethisframe ) - { - wait ( 0,1 + randomfloat( 0,4 ) ); - } - else wait 0,05; - if ( !isDefined( self ) ) - { - return; - } - level.weaponobjectexplodethisframe = 1; - thread resetweaponobjectexplodethisframe(); - if ( isDefined( type ) && !issubstr( type, "MOD_GRENADE_SPLASH" ) || issubstr( type, "MOD_GRENADE" ) && issubstr( type, "MOD_EXPLOSIVE" ) ) - { - self.waschained = 1; - } - if ( isDefined( idflags ) && idflags & level.idflags_penetration ) - { - self.wasdamagedfrombulletpenetration = 1; - } - self.wasdamaged = 1; - watcher thread waitanddetonate( self, 0, attacker, weaponname ); - } - } -} - -playdialogondeath( owner ) -{ - owner endon( "death" ); - owner endon( "disconnect" ); - self endon( "hacked" ); - self waittill( "death" ); - if ( isDefined( self.playdialog ) && self.playdialog ) - { - owner maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "equipment_destroyed", "item_destroyed" ); - } -} - -watchobjectdamage( owner ) -{ - owner endon( "death" ); - owner endon( "disconnect" ); - self endon( "hacked" ); - self endon( "death" ); - while ( 1 ) - { - self waittill( "damage", damage, attacker ); - if ( isDefined( attacker ) && isplayer( attacker ) && attacker != owner ) - { - self.playdialog = 1; - continue; - } - else - { - self.playdialog = 0; - } - } -} - -stunstart( watcher, time ) -{ - self endon( "death" ); - if ( self isstunned() ) - { - return; - } - if ( isDefined( self.camerahead ) ) - { - self.camerahead setclientflag( 9 ); - } - self setclientflag( 9 ); - if ( isDefined( watcher.stun ) ) - { - self thread [[ watcher.stun ]](); - } - if ( watcher.name == "rcbomb" ) - { - self.owner freezecontrolswrapper( 1 ); - } - if ( isDefined( time ) ) - { - wait time; - } - else - { - return; - } - if ( watcher.name == "rcbomb" ) - { - self.owner freezecontrolswrapper( 0 ); - } - self stunstop(); -} - -stunstop() -{ - self notify( "not_stunned" ); - if ( isDefined( self.camerahead ) ) - { - self.camerahead clearclientflag( 9 ); - } - self clearclientflag( 9 ); -} - -weaponstun() -{ - self endon( "death" ); - self endon( "not_stunned" ); - origin = self gettagorigin( "tag_fx" ); - if ( !isDefined( origin ) ) - { - origin = self.origin + vectorScale( ( 0, 0, 1 ), 10 ); - } - self.stun_fx = spawn( "script_model", origin ); - self.stun_fx setmodel( "tag_origin" ); - self thread stunfxthink( self.stun_fx ); - wait 0,1; - playfxontag( level._equipment_spark_fx, self.stun_fx, "tag_origin" ); - self.stun_fx playsound( "dst_disable_spark" ); -} - -stunfxthink( fx ) -{ - fx endon( "death" ); - self waittill_any( "death", "not_stunned" ); - fx delete(); -} - -isstunned() -{ - return isDefined( self.stun_fx ); -} - -resetweaponobjectexplodethisframe() -{ - wait 0,05; - level.weaponobjectexplodethisframe = 0; -} - -getweaponobjectwatcher( name ) -{ - if ( !isDefined( self.weaponobjectwatcherarray ) ) - { - return undefined; - } - watcher = 0; - while ( watcher < self.weaponobjectwatcherarray.size ) - { - if ( self.weaponobjectwatcherarray[ watcher ].name == name ) - { - return self.weaponobjectwatcherarray[ watcher ]; - } - watcher++; - } - return undefined; -} - -getweaponobjectwatcherbyweapon( weapon ) -{ - if ( !isDefined( self.weaponobjectwatcherarray ) ) - { - return undefined; - } - watcher = 0; - while ( watcher < self.weaponobjectwatcherarray.size ) - { - if ( isDefined( self.weaponobjectwatcherarray[ watcher ].weapon ) && self.weaponobjectwatcherarray[ watcher ].weapon == weapon ) - { - return self.weaponobjectwatcherarray[ watcher ]; - } - if ( isDefined( self.weaponobjectwatcherarray[ watcher ].weapon ) && isDefined( self.weaponobjectwatcherarray[ watcher ].altweapon ) && self.weaponobjectwatcherarray[ watcher ].altweapon == weapon ) - { - return self.weaponobjectwatcherarray[ watcher ]; - } - watcher++; - } - return undefined; -} - -resetweaponobjectwatcher( watcher, ownerteam ) -{ - if ( level.deleteexplosivesonspawn == 1 ) - { - self notify( "weapon_object_destroyed" ); - watcher deleteweaponobjectarray(); - } - watcher.ownerteam = ownerteam; -} - -createweaponobjectwatcher( name, weapon, ownerteam ) -{ - if ( !isDefined( self.weaponobjectwatcherarray ) ) - { - self.weaponobjectwatcherarray = []; - } - weaponobjectwatcher = getweaponobjectwatcher( name ); - if ( !isDefined( weaponobjectwatcher ) ) - { - weaponobjectwatcher = spawnstruct(); - self.weaponobjectwatcherarray[ self.weaponobjectwatcherarray.size ] = weaponobjectwatcher; - weaponobjectwatcher.name = name; - weaponobjectwatcher.type = "use"; - weaponobjectwatcher.weapon = weapon; - weaponobjectwatcher.weaponidx = getweaponindexfromname( weapon ); - weaponobjectwatcher.watchforfire = 0; - weaponobjectwatcher.hackable = 0; - weaponobjectwatcher.altdetonate = 0; - weaponobjectwatcher.detectable = 1; - weaponobjectwatcher.headicon = 1; - weaponobjectwatcher.stuntime = 0; - weaponobjectwatcher.activatesound = undefined; - weaponobjectwatcher.ignoredirection = undefined; - weaponobjectwatcher.immediatedetonation = undefined; - weaponobjectwatcher.deploysound = getweaponfiresound( weaponobjectwatcher.weaponidx ); - weaponobjectwatcher.deploysoundplayer = getweaponfiresoundplayer( weaponobjectwatcher.weaponidx ); - weaponobjectwatcher.pickupsound = getweaponpickupsound( weaponobjectwatcher.weaponidx ); - weaponobjectwatcher.pickupsoundplayer = getweaponpickupsoundplayer( weaponobjectwatcher.weaponidx ); - weaponobjectwatcher.altweapon = undefined; - weaponobjectwatcher.ownergetsassist = 0; - weaponobjectwatcher.playdestroyeddialog = 1; - weaponobjectwatcher.deleteonkillbrush = 1; - weaponobjectwatcher.deleteondifferentobjectspawn = 1; - weaponobjectwatcher.enemydestroy = 0; - weaponobjectwatcher.onspawn = undefined; - weaponobjectwatcher.onspawnfx = undefined; - weaponobjectwatcher.onspawnretrievetriggers = undefined; - weaponobjectwatcher.ondetonated = undefined; - weaponobjectwatcher.detonate = undefined; - weaponobjectwatcher.stun = undefined; - weaponobjectwatcher.ondestroyed = undefined; - if ( !isDefined( weaponobjectwatcher.objectarray ) ) - { - weaponobjectwatcher.objectarray = []; - } - } - resetweaponobjectwatcher( weaponobjectwatcher, ownerteam ); - return weaponobjectwatcher; -} - -createuseweaponobjectwatcher( name, weapon, ownerteam ) -{ - weaponobjectwatcher = createweaponobjectwatcher( name, weapon, ownerteam ); - weaponobjectwatcher.type = "use"; - weaponobjectwatcher.onspawn = ::onspawnuseweaponobject; - return weaponobjectwatcher; -} - -createproximityweaponobjectwatcher( name, weapon, ownerteam ) -{ - weaponobjectwatcher = createweaponobjectwatcher( name, weapon, ownerteam ); - weaponobjectwatcher.type = "proximity"; - weaponobjectwatcher.onspawn = ::onspawnproximityweaponobject; - detectionconeangle = weapons_get_dvar_int( "scr_weaponobject_coneangle" ); - weaponobjectwatcher.detectiondot = cos( detectionconeangle ); - weaponobjectwatcher.detectionmindist = weapons_get_dvar_int( "scr_weaponobject_mindist" ); - weaponobjectwatcher.detectiongraceperiod = weapons_get_dvar( "scr_weaponobject_graceperiod" ); - weaponobjectwatcher.detonateradius = weapons_get_dvar_int( "scr_weaponobject_radius" ); - return weaponobjectwatcher; -} - -commononspawnuseweaponobject( watcher, owner ) -{ - if ( watcher.detectable ) - { - if ( isDefined( watcher.ismovable ) && watcher.ismovable ) - { - self thread weaponobjectdetectionmovable( owner.pers[ "team" ] ); - } - else - { - self thread weaponobjectdetectiontrigger_wait( owner.pers[ "team" ] ); - } - if ( watcher.headicon && level.teambased ) - { - self waittillnotmoving(); - offset = level.weaponobjects_headicon_offset[ "default" ]; - if ( isDefined( level.weaponobjects_headicon_offset[ self.name ] ) ) - { - offset = level.weaponobjects_headicon_offset[ self.name ]; - } - } - } -} - -onspawnuseweaponobject( watcher, owner ) -{ - self commononspawnuseweaponobject( watcher, owner ); -} - -onspawnproximityweaponobject( watcher, owner ) -{ - self thread commononspawnuseweaponobject( watcher, owner ); - self thread proximityweaponobjectdetonation( watcher ); -/# - if ( getDvarInt( #"38868733" ) ) - { - self thread proximityweaponobjectdebug( watcher ); -#/ - } -} - -watchweaponobjectusage() -{ - self endon( "disconnect" ); - if ( !isDefined( self.weaponobjectwatcherarray ) ) - { - self.weaponobjectwatcherarray = []; - } - self thread watchweaponobjectspawn(); - self thread watchweaponprojectileobjectspawn(); - self thread watchweaponobjectdetonation(); - self thread watchweaponobjectaltdetonation(); - self thread watchweaponobjectaltdetonate(); - self thread deleteweaponobjectson(); -} - -watchweaponobjectspawn() -{ - self notify( "watchWeaponObjectSpawn" ); - self endon( "watchWeaponObjectSpawn" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "grenade_fire", weapon, weapname ); - switch( weapname ) - { - case "acoustic_sensor_mp": - case "bouncingbetty_mp": - case "camera_spike_mp": - case "scrambler_mp": - case "tactical_insertion_mp": - break; - case "bouncingbetty_mp": - case "claymore_mp": - case "proximity_grenade_mp": - case "satchel_charge_mp": - case "sensor_grenade_mp": - case "trophy_system_mp": - i = 0; - while ( i < self.weaponobjectwatcherarray.size ) - { - if ( self.weaponobjectwatcherarray[ i ].weapon != weapname ) - { - i++; - continue; - } - else - { - objectarray_size = self.weaponobjectwatcherarray[ i ].objectarray.size; - j = 0; - while ( j < objectarray_size ) - { - if ( !isDefined( self.weaponobjectwatcherarray[ i ].objectarray[ j ] ) ) - { - self.weaponobjectwatcherarray[ i ].objectarray = deleteweaponobject( self.weaponobjectwatcherarray[ i ], weapon ); - } - j++; - } - numallowed = 2; - if ( weapname == "proximity_grenade_mp" ) - { - numallowed = weapons_get_dvar_int( "scr_proximityGrenadeMaxInstances" ); - } - if ( isDefined( self.weaponobjectwatcherarray[ i ].detonate ) && self.weaponobjectwatcherarray[ i ].objectarray.size > ( numallowed - 1 ) ) - { - self.weaponobjectwatcherarray[ i ] thread waitanddetonate( self.weaponobjectwatcherarray[ i ].objectarray[ 0 ], 0,1, undefined, weapname ); - } - } - i++; - } - default: - } - if ( !self ishacked() ) - { - if ( weapname != "claymore_mp" || weapname == "satchel_charge_mp" && weapname == "bouncingbetty_mp" ) - { - self addweaponstat( weapname, "used", 1 ); - } - } - watcher = getweaponobjectwatcherbyweapon( weapname ); - if ( isDefined( watcher ) ) - { - self addweaponobject( watcher, weapon ); - } - } - } - } -} - -watchweaponprojectileobjectspawn() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "missile_fire", weapon, weapname ); - watcher = getweaponobjectwatcherbyweapon( weapname ); - if ( isDefined( watcher ) ) - { - self addweaponobject( watcher, weapon ); - objectarray_size = watcher.objectarray.size; - j = 0; - while ( j < objectarray_size ) - { - if ( !isDefined( watcher.objectarray[ j ] ) ) - { - watcher.objectarray = deleteweaponobject( watcher, weapon ); - } - j++; - } - if ( isDefined( watcher.detonate ) && watcher.objectarray.size > 1 ) - { - watcher thread waitanddetonate( watcher.objectarray[ 0 ], 0,1 ); - } - } - } -} - -proximityweaponobjectdebug( watcher ) -{ -/# - self waittillnotmoving(); - self thread showcone( acos( watcher.detectiondot ), watcher.detonateradius, ( 1, 0,85, 0 ) ); - self thread showcone( 60, 256, ( 0, 0, 1 ) ); -#/ -} - -vectorcross( v1, v2 ) -{ -/# - return ( ( v1[ 1 ] * v2[ 2 ] ) - ( v1[ 2 ] * v2[ 1 ] ), ( v1[ 2 ] * v2[ 0 ] ) - ( v1[ 0 ] * v2[ 2 ] ), ( v1[ 0 ] * v2[ 1 ] ) - ( v1[ 1 ] * v2[ 0 ] ) ); -#/ -} - -showcone( angle, range, color ) -{ -/# - self endon( "death" ); - start = self.origin; - forward = anglesToForward( self.angles ); - right = vectorcross( forward, ( 0, 0, 1 ) ); - up = vectorcross( forward, right ); - fullforward = forward * range * cos( angle ); - sideamnt = range * sin( angle ); - while ( 1 ) - { - prevpoint = ( 0, 0, 1 ); - i = 0; - while ( i <= 20 ) - { - coneangle = ( i / 20 ) * 360; - point = ( start + fullforward ) + ( sideamnt * ( ( right * cos( coneangle ) ) + ( up * sin( coneangle ) ) ) ); - if ( i > 0 ) - { - line( start, point, color ); - line( prevpoint, point, color ); - } - prevpoint = point; - i++; - } - wait 0,05; -#/ - } -} - -weaponobjectdetectionmovable( ownerteam ) -{ - self endon( "end_detection" ); - level endon( "game_ended" ); - self endon( "death" ); - self endon( "hacked" ); - if ( level.oldschool ) - { - return; - } - if ( !level.teambased ) - { - return; - } - self.detectid = "rcBomb" + getTime() + randomint( 1000000 ); - while ( !level.gameended ) - { - wait 1; - players = get_players(); - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - if ( isai( player ) ) - { - i++; - continue; - } - else if ( isDefined( self.model_name ) && player hasperk( "specialty_detectexplosive" ) ) - { - switch( self.model_name ) - { - case "t6_wpn_c4_world_detect": - case "t6_wpn_claymore_world_detect": - break; - default: - } - } - else if ( player.team == ownerteam ) - { - i++; - continue; - } - else if ( isDefined( player.bombsquadids[ self.detectid ] ) ) - { - i++; - continue; - } - i++; - } - } - } -} - -seticonpos( item, icon, heightincrease ) -{ - icon.x = item.origin[ 0 ]; - icon.y = item.origin[ 1 ]; - icon.z = item.origin[ 2 ] + heightincrease; -} - -weaponobjectdetectiontrigger_wait( ownerteam ) -{ - self endon( "death" ); - self endon( "hacked" ); - waittillnotmoving(); - if ( level.oldschool ) - { - return; - } - self thread weaponobjectdetectiontrigger( ownerteam ); -} - -weaponobjectdetectiontrigger( ownerteam ) -{ - trigger = spawn( "trigger_radius", self.origin - vectorScale( ( 0, 0, 1 ), 128 ), 0, 512, 256 ); - trigger.detectid = "trigger" + getTime() + randomint( 1000000 ); - trigger sethintlowpriority( 1 ); - self waittill_any( "death", "hacked" ); - trigger notify( "end_detection" ); - if ( isDefined( trigger.bombsquadicon ) ) - { - trigger.bombsquadicon destroy(); - } - trigger delete(); -} - -hackertriggersetvisibility( owner ) -{ - self endon( "death" ); -/# - assert( isplayer( owner ) ); -#/ - ownerteam = owner.pers[ "team" ]; - for ( ;; ) - { - if ( level.teambased ) - { - self setvisibletoallexceptteam( ownerteam ); - self setexcludeteamfortrigger( ownerteam ); - } - else - { - self setvisibletoall(); - self setteamfortrigger( "none" ); - } - self setinvisibletoplayer( owner ); - level waittill_any( "player_spawned", "joined_team" ); - } -} - -hackernotmoving() -{ - self endon( "death" ); - self waittillnotmoving(); - self notify( "landed" ); -} - -hackerinit( watcher ) -{ - self thread hackernotmoving(); - event = self waittill_any_return( "death", "landed" ); - if ( event == "death" ) - { - return; - } - triggerorigin = self.origin; - if ( isDefined( self.name ) && self.name == "satchel_charge_mp" ) - { - triggerorigin = self gettagorigin( "tag_fx" ); - } - self.hackertrigger = spawn( "trigger_radius_use", triggerorigin, level.weaponobjects_hacker_trigger_width, level.weaponobjects_hacker_trigger_height ); -/# -#/ - self.hackertrigger sethintlowpriority( 1 ); - self.hackertrigger setcursorhint( "HINT_NOICON", self ); - self.hackertrigger setignoreentfortrigger( self ); - self.hackertrigger enablelinkto(); - self.hackertrigger linkto( self ); - if ( isDefined( level.hackerhints[ self.name ] ) ) - { - self.hackertrigger sethintstring( level.hackerhints[ self.name ].hint ); - } - else - { - self.hackertrigger sethintstring( &"MP_GENERIC_HACKING" ); - } - self.hackertrigger setperkfortrigger( "specialty_disarmexplosive" ); - self.hackertrigger thread hackertriggersetvisibility( self.owner ); - self thread hackerthink( self.hackertrigger, watcher ); -} - -hackerthink( trigger, watcher ) -{ - self endon( "death" ); - for ( ;; ) - { - trigger waittill( "trigger", player, instant ); - if ( !isDefined( instant ) && !trigger hackerresult( player, self.owner ) ) - { - continue; - } - else - { - self.owner hackerremoveweapon( self ); - self.owner maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "hacked_equip", "item_destroyed" ); - self.hacked = 1; - self setmissileowner( player ); - self setteam( player.pers[ "team" ] ); - self.owner = player; - if ( isweaponequipment( self.name ) ) - { - } - if ( self.name == "satchel_charge_mp" && isDefined( player.lowermessage ) ) - { - player.lowermessage settext( &"PLATFORM_SATCHEL_CHARGE_DOUBLE_TAP" ); - player.lowermessage.alpha = 1; - player.lowermessage fadeovertime( 2 ); - player.lowermessage.alpha = 0; - } - self notify( "hacked" ); - level notify( "hacked" ); - if ( self.name == "camera_spike_mp" && isDefined( self.camerahead ) ) - { - self.camerahead notify( "hacked" ); - } -/# -#/ - if ( isDefined( watcher.stun ) ) - { - self thread stunstart( watcher, 0,75 ); - wait 0,75; - } - else - { - wait 0,05; - } - if ( isDefined( player ) && player.sessionstate == "playing" ) - { - player notify( "grenade_fire" ); - } - else - { - watcher thread waitanddetonate( self, 0 ); - } - return; - } - } -} - -ishacked() -{ - if ( isDefined( self.hacked ) ) - { - return self.hacked; - } -} - -hackerunfreezeplayer( player ) -{ - self endon( "hack_done" ); - self waittill( "death" ); - if ( isDefined( player ) ) - { - player freeze_player_controls( 0 ); - player enableweapons(); - } -} - -hackerresult( player, owner ) -{ - success = 1; - time = getTime(); - hacktime = getDvarFloat( "perk_disarmExplosiveTime" ); - if ( !canhack( player, owner, 1 ) ) - { - return 0; - } - self thread hackerunfreezeplayer( player ); - while ( ( time + ( hacktime * 1000 ) ) > getTime() ) - { - if ( !canhack( player, owner, 0 ) ) - { - success = 0; - break; - } - else if ( !player usebuttonpressed() ) - { - success = 0; - break; - } - else if ( !isDefined( self ) ) - { - success = 0; - break; - } - else - { - player freeze_player_controls( 1 ); - player disableweapons(); - if ( !isDefined( self.progressbar ) ) - { - self.progressbar = player createprimaryprogressbar(); - self.progressbar.lastuserate = -1; - self.progressbar showelem(); - self.progressbar updatebar( 0,01, 1 / hacktime ); - self.progresstext = player createprimaryprogressbartext(); - self.progresstext settext( &"MP_HACKING" ); - self.progresstext showelem(); - player playlocalsound( "evt_hacker_hacking" ); - } - wait 0,05; - } - } - if ( isDefined( player ) ) - { - player freeze_player_controls( 0 ); - player enableweapons(); - } - if ( isDefined( self.progressbar ) ) - { - self.progressbar destroyelem(); - self.progresstext destroyelem(); - } - if ( isDefined( self ) ) - { - self notify( "hack_done" ); - } - return success; -} - -canhack( player, owner, weapon_check ) -{ - if ( !isDefined( player ) ) - { - return 0; - } - if ( !isplayer( player ) ) - { - return 0; - } - if ( !isalive( player ) ) - { - return 0; - } - if ( !isDefined( owner ) ) - { - return 0; - } - if ( owner == player ) - { - return 0; - } - if ( level.teambased && player.team == owner.team ) - { - return 0; - } - if ( isDefined( player.isdefusing ) && player.isdefusing ) - { - return 0; - } - if ( isDefined( player.isplanting ) && player.isplanting ) - { - return 0; - } - if ( isDefined( player.proxbar ) && !player.proxbar.hidden ) - { - return 0; - } - if ( isDefined( player.revivingteammate ) && player.revivingteammate == 1 ) - { - return 0; - } - if ( !player isonground() ) - { - return 0; - } - if ( player isinvehicle() ) - { - return 0; - } - if ( player isweaponviewonlylinked() ) - { - return 0; - } - if ( !player hasperk( "specialty_disarmexplosive" ) ) - { - return 0; - } - if ( player isempjammed() ) - { - return 0; - } - if ( isDefined( player.laststand ) && player.laststand ) - { - return 0; - } - if ( weapon_check ) - { - if ( player isthrowinggrenade() ) - { - return 0; - } - if ( player isswitchingweapons() ) - { - return 0; - } - if ( player ismeleeing() ) - { - return 0; - } - weapon = player getcurrentweapon(); - if ( !isDefined( weapon ) ) - { - return 0; - } - if ( weapon == "none" ) - { - return 0; - } - if ( isweaponequipment( weapon ) && player isfiring() ) - { - return 0; - } - if ( isweaponspecificuse( weapon ) ) - { - return 0; - } - } - return 1; -} - -hackerremoveweapon( weapon ) -{ - i = 0; - while ( i < self.weaponobjectwatcherarray.size ) - { - if ( self.weaponobjectwatcherarray[ i ].weapon != weapon.name ) - { - i++; - continue; - } - else - { - objectarray_size = self.weaponobjectwatcherarray[ i ].objectarray.size; - j = 0; - while ( j < objectarray_size ) - { - self.weaponobjectwatcherarray[ i ].objectarray = deleteweaponobject( self.weaponobjectwatcherarray[ i ], weapon ); - j++; - } - return; - } - i++; - } -} - -proximityweaponobjectdetonation( watcher ) -{ - self endon( "death" ); - self endon( "hacked" ); - self waittillnotmoving(); - if ( isDefined( watcher.activationdelay ) ) - { - wait watcher.activationdelay; - } - damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - watcher.detonateradius ), level.aitriggerspawnflags | level.vehicletriggerspawnflags, watcher.detonateradius, watcher.detonateradius * 2 ); - damagearea enablelinkto(); - damagearea linkto( self ); - self thread deleteondeath( damagearea ); - up = anglesToUp( self.angles ); - traceorigin = self.origin + up; - while ( 1 ) - { - damagearea waittill( "trigger", ent ); - while ( getDvarInt( #"38868733" ) != 1 ) - { - if ( isDefined( self.owner ) && ent == self.owner ) - { - continue; - } - while ( isDefined( self.owner ) && isvehicle( ent ) && isDefined( ent.owner ) && self.owner == ent.owner ) - { - continue; - } - while ( !friendlyfirecheck( self.owner, ent, 0 ) ) - { - continue; - } - } - if ( lengthsquared( ent getvelocity() ) < 10 && !isDefined( watcher.immediatedetonation ) ) - { - continue; - } - while ( !ent shouldaffectweaponobject( self, watcher ) ) - { - continue; - } - while ( self isstunned() ) - { - continue; - } - if ( isplayer( ent ) && !isalive( ent ) ) - { - continue; - } - if ( ent damageconetrace( traceorigin, self ) > 0 ) - { - break; - } - else - { - } - } - if ( isDefined( watcher.activatesound ) ) - { - self playsound( watcher.activatesound ); - } - if ( isDefined( watcher.activatefx ) ) - { - self setclientflag( 4 ); - } - ent thread deathdodger( watcher.detectiongraceperiod ); - wait watcher.detectiongraceperiod; - if ( isplayer( ent ) && ent hasperk( "specialty_delayexplosive" ) ) - { - wait getDvarFloat( "perk_delayExplosiveTime" ); - } - self.origin = traceorigin; - if ( isDefined( self.owner ) && isplayer( self.owner ) ) - { - self [[ watcher.detonate ]]( self.owner ); - } - else self [[ watcher.detonate ]](); -} - -shouldaffectweaponobject( object, watcher ) -{ - pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 ); - if ( isDefined( watcher.ignoredirection ) ) - { - return 1; - } - dirtopos = pos - object.origin; - objectforward = anglesToForward( object.angles ); - dist = vectordot( dirtopos, objectforward ); - if ( dist < watcher.detectionmindist ) - { - return 0; - } - dirtopos = vectornormalize( dirtopos ); - dot = vectordot( dirtopos, objectforward ); - return dot > watcher.detectiondot; -} - -deathdodger( graceperiod ) -{ - self endon( "death" ); - self endon( "disconnect" ); - wait ( 0,2 + graceperiod ); - self notify( "death_dodger" ); -} - -deleteondeath( ent ) -{ - self waittill_any( "death", "hacked" ); - wait 0,05; - if ( isDefined( ent ) ) - { - ent delete(); - } -} - -deleteonkillbrush( player ) -{ - player endon( "disconnect" ); - self endon( "death" ); - self endon( "stationary" ); - killbrushes = getentarray( "trigger_hurt", "classname" ); - while ( 1 ) - { - i = 0; - while ( i < killbrushes.size ) - { - if ( self istouching( killbrushes[ i ] ) ) - { - if ( self.origin[ 2 ] > player.origin[ 2 ] ) - { - break; - } - else - { - if ( isDefined( self ) ) - { - self delete(); - } - return; - } - i++; - } - } - wait 0,1; - } -} - -watchweaponobjectaltdetonation() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "alt_detonate" ); - while ( !isalive( self ) ) - { - continue; - } - watcher = 0; - while ( watcher < self.weaponobjectwatcherarray.size ) - { - if ( self.weaponobjectwatcherarray[ watcher ].altdetonate ) - { - self.weaponobjectwatcherarray[ watcher ] detonateweaponobjectarray( 0 ); - } - watcher++; - } - } -} - -watchweaponobjectaltdetonate() -{ - self endon( "disconnect" ); - self endon( "detonated" ); - level endon( "game_ended" ); - buttontime = 0; - for ( ;; ) - { - self waittill( "doubletap_detonate" ); - if ( !isalive( self ) ) - { - continue; - } - else - { - self notify( "alt_detonate" ); - wait 0,05; - } - } -} - -watchweaponobjectdetonation() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "detonate" ); - if ( self isusingoffhand() ) - { - weap = self getcurrentoffhand(); - } - else - { - weap = self getcurrentweapon(); - } - watcher = getweaponobjectwatcherbyweapon( weap ); - if ( isDefined( watcher ) ) - { - watcher detonateweaponobjectarray( 0 ); - } - } -} - -deleteweaponobjectson() -{ - while ( 1 ) - { - msg = self waittill_any_return( "disconnect", "joined_team", "joined_spectators", "death" ); - while ( msg == "death" ) - { - continue; - } - if ( !isDefined( self.weaponobjectwatcherarray ) ) - { - return; - } - watchers = []; - watcher = 0; - while ( watcher < self.weaponobjectwatcherarray.size ) - { - weaponobjectwatcher = spawnstruct(); - watchers[ watchers.size ] = weaponobjectwatcher; - weaponobjectwatcher.objectarray = []; - if ( isDefined( self.weaponobjectwatcherarray[ watcher ].objectarray ) ) - { - weaponobjectwatcher.objectarray = self.weaponobjectwatcherarray[ watcher ].objectarray; - } - watcher++; - } - wait 0,05; - watcher = 0; - while ( watcher < watchers.size ) - { - watchers[ watcher ] deleteweaponobjectarray(); - watcher++; - } - if ( msg == "disconnect" ) - { - return; - } - } -} - -saydamaged( orig, amount ) -{ -/# - i = 0; - while ( i < 60 ) - { - print3d( orig, "damaged! " + amount ); - wait 0,05; - i++; -#/ - } -} - -showheadicon( trigger ) -{ - triggerdetectid = trigger.detectid; - useid = -1; - index = 0; - while ( index < 4 ) - { - detectid = self.bombsquadicons[ index ].detectid; - if ( detectid == triggerdetectid ) - { - return; - } - if ( detectid == "" ) - { - useid = index; - } - index++; - } - if ( useid < 0 ) - { - return; - } - self.bombsquadids[ triggerdetectid ] = 1; - self.bombsquadicons[ useid ].x = trigger.origin[ 0 ]; - self.bombsquadicons[ useid ].y = trigger.origin[ 1 ]; - self.bombsquadicons[ useid ].z = trigger.origin[ 2 ] + 24 + 128; - self.bombsquadicons[ useid ] fadeovertime( 0,25 ); - self.bombsquadicons[ useid ].alpha = 1; - self.bombsquadicons[ useid ].detectid = trigger.detectid; - while ( isalive( self ) && isDefined( trigger ) && self istouching( trigger ) ) - { - wait 0,05; - } - if ( !isDefined( self ) ) - { - return; - } - self.bombsquadicons[ useid ].detectid = ""; - self.bombsquadicons[ useid ] fadeovertime( 0,25 ); - self.bombsquadicons[ useid ].alpha = 0; -} - -friendlyfirecheck( owner, attacker, forcedfriendlyfirerule ) -{ - if ( !isDefined( owner ) ) - { - return 1; - } - if ( !level.teambased ) - { - return 1; - } - friendlyfirerule = level.friendlyfire; - if ( isDefined( forcedfriendlyfirerule ) ) - { - friendlyfirerule = forcedfriendlyfirerule; - } - if ( friendlyfirerule != 0 ) - { - return 1; - } - if ( attacker == owner ) - { - return 1; - } - if ( isplayer( attacker ) ) - { - if ( !isDefined( attacker.pers[ "team" ] ) ) - { - return 1; - } - if ( attacker.pers[ "team" ] != owner.pers[ "team" ] ) - { - return 1; - } - } - else - { - if ( isai( attacker ) ) - { - if ( attacker.aiteam != owner.pers[ "team" ] ) - { - return 1; - } - } - else - { - if ( isvehicle( attacker ) ) - { - if ( isDefined( attacker.owner ) && isplayer( attacker.owner ) ) - { - if ( attacker.owner.pers[ "team" ] != owner.pers[ "team" ] ) - { - return 1; - } - } - } - } - } - return 0; -} - -onspawnhatchettrigger( watcher, player ) -{ - self endon( "death" ); - self setowner( player ); - self setteam( player.pers[ "team" ] ); - self.owner = player; - self.oldangles = self.angles; - self waittillnotmoving(); - waittillframeend; - if ( player.pers[ "team" ] == "spectator" ) - { - return; - } - triggerorigin = self.origin; - triggerparentent = undefined; - if ( isDefined( self.stucktoplayer ) ) - { - if ( isalive( self.stucktoplayer ) || !isDefined( self.stucktoplayer.body ) ) - { - if ( isalive( self.stucktoplayer ) ) - { - triggerparentent = self; - self unlink(); - self.angles = self.oldangles; - self launch( vectorScale( ( 0, 0, 1 ), 5 ) ); - self waittillnotmoving(); - waittillframeend; - } - else - { - triggerparentent = self.stucktoplayer; - } - } - else - { - triggerparentent = self.stucktoplayer.body; - } - } - if ( isDefined( triggerparentent ) ) - { - triggerorigin = triggerparentent.origin + vectorScale( ( 0, 0, 1 ), 10 ); - } - self.hatchetpickuptrigger = spawn( "trigger_radius", triggerorigin, 0, 50, 50 ); - self.hatchetpickuptrigger enablelinkto(); - self.hatchetpickuptrigger linkto( self ); - if ( isDefined( triggerparentent ) ) - { - self.hatchetpickuptrigger linkto( triggerparentent ); - } - self thread watchhatchettrigger( self.hatchetpickuptrigger, watcher.pickup, watcher.pickupsoundplayer, watcher.pickupsound ); -/# - thread switch_team( self, watcher.weapon, player ); -#/ - self thread watchshutdown( player ); -} - -watchhatchettrigger( trigger, callback, playersoundonuse, npcsoundonuse ) -{ - self endon( "delete" ); - self endon( "hacked" ); - while ( 1 ) - { - trigger waittill( "trigger", player ); - while ( !isalive( player ) ) - { - continue; - } - while ( !player isonground() ) - { - continue; - } - if ( isDefined( trigger.claimedby ) && player != trigger.claimedby ) - { - continue; - } - while ( !player hasweapon( self.name ) ) - { - continue; - } - curr_ammo = player getweaponammostock( "hatchet_mp" ); - maxammo = weaponmaxammo( "hatchet_mp" ); - if ( player.grenadetypeprimary == "hatchet_mp" ) - { - maxammo = player.grenadetypeprimarycount; - } - else - { - if ( isDefined( player.grenadetypesecondary ) && player.grenadetypesecondary == "hatchet_mp" ) - { - maxammo = player.grenadetypesecondarycount; - } - } - while ( curr_ammo >= maxammo ) - { - continue; - } - if ( isDefined( playersoundonuse ) ) - { - player playlocalsound( playersoundonuse ); - } - if ( isDefined( npcsoundonuse ) ) - { - player playsound( npcsoundonuse ); - } - self thread [[ callback ]]( player ); - } -} - -onspawnretrievableweaponobject( watcher, player ) -{ - self endon( "death" ); - self endon( "hacked" ); - if ( ishacked() ) - { - self thread watchshutdown( player ); - return; - } - self setowner( player ); - self setteam( player.pers[ "team" ] ); - self.owner = player; - self.oldangles = self.angles; - self waittillnotmoving(); - if ( isDefined( watcher.activationdelay ) ) - { - wait watcher.activationdelay; - } - waittillframeend; - if ( player.pers[ "team" ] == "spectator" ) - { - return; - } - triggerorigin = self.origin; - triggerparentent = undefined; - if ( isDefined( self.stucktoplayer ) ) - { - if ( isalive( self.stucktoplayer ) || !isDefined( self.stucktoplayer.body ) ) - { - triggerparentent = self.stucktoplayer; - } - else - { - triggerparentent = self.stucktoplayer.body; - } - } - if ( isDefined( triggerparentent ) ) - { - triggerorigin = triggerparentent.origin + vectorScale( ( 0, 0, 1 ), 10 ); - } - else - { - up = anglesToUp( self.angles ); - triggerorigin = self.origin + up; - } - if ( isDefined( watcher.adjusttriggerorigin ) ) - { - triggerorigin = self [[ watcher.adjusttriggerorigin ]]( triggerorigin ); - } - self.pickuptrigger = spawn( "trigger_radius_use", triggerorigin ); - self.pickuptrigger sethintlowpriority( 1 ); - self.pickuptrigger setcursorhint( "HINT_NOICON", self ); - self.pickuptrigger enablelinkto(); - self.pickuptrigger linkto( self ); - self.pickuptrigger setinvisibletoall(); - self.pickuptrigger setvisibletoplayer( player ); - if ( isDefined( level.retrievehints[ watcher.name ] ) ) - { - self.pickuptrigger sethintstring( level.retrievehints[ watcher.name ].hint ); - } - else - { - self.pickuptrigger sethintstring( &"MP_GENERIC_PICKUP" ); - } - if ( level.teambased ) - { - self.pickuptrigger setteamfortrigger( player.pers[ "team" ] ); - } - else - { - self.pickuptrigger setteamfortrigger( "none" ); - } - if ( isDefined( triggerparentent ) ) - { - self.pickuptrigger linkto( triggerparentent ); - } - if ( watcher.enemydestroy ) - { - self.enemytrigger = spawn( "trigger_radius_use", triggerorigin ); - self.enemytrigger setcursorhint( "HINT_NOICON", self ); - self.enemytrigger enablelinkto(); - self.enemytrigger linkto( self ); - self.enemytrigger setinvisibletoplayer( player ); - if ( level.teambased ) - { - self.enemytrigger setexcludeteamfortrigger( player.team ); - self.enemytrigger.triggerteamignore = self.team; - } - if ( isDefined( level.destroyhints[ watcher.name ] ) ) - { - self.enemytrigger sethintstring( level.destroyhints[ watcher.name ].hint ); - } - else - { - self.enemytrigger sethintstring( &"MP_GENERIC_DESTROY" ); - } - self thread watchusetrigger( self.enemytrigger, watcher.ondestroyed ); - } - self thread watchusetrigger( self.pickuptrigger, watcher.pickup, watcher.pickupsoundplayer, watcher.pickupsound ); -/# - thread switch_team( self, watcher.weapon, player ); -#/ - if ( isDefined( watcher.pickup_trigger_listener ) ) - { - self thread [[ watcher.pickup_trigger_listener ]]( self.pickuptrigger, player ); - } - self thread watchshutdown( player ); -} - -watch_trigger_visibility( triggers, weap_name ) -{ - self notify( "watchTriggerVisibility" ); - self endon( "watchTriggerVisibility" ); - self endon( "death" ); - self endon( "hacked" ); - max_ammo = weaponmaxammo( weap_name ); - start_ammo = weaponstartammo( weap_name ); - ammo_to_check = 0; - while ( 1 ) - { - players = level.players; - i = 0; - while ( i < players.size ) - { - if ( players[ i ] hasweapon( weap_name ) ) - { - ammo_to_check = max_ammo; - if ( self.owner == players[ i ] ) - { - curr_ammo = players[ i ] getweaponammostock( weap_name ) + players[ i ] getweaponammoclip( weap_name ); - if ( weap_name == "hatchet_mp" ) - { - curr_ammo = players[ i ] getweaponammostock( weap_name ); - } - if ( curr_ammo < ammo_to_check ) - { - triggers[ "owner_pickup" ] setvisibletoplayer( players[ i ] ); - triggers[ "enemy_pickup" ] setinvisibletoplayer( players[ i ] ); - } - else - { - triggers[ "owner_pickup" ] setinvisibletoplayer( players[ i ] ); - triggers[ "enemy_pickup" ] setinvisibletoplayer( players[ i ] ); - } - } - else curr_ammo = players[ i ] getweaponammostock( weap_name ) + players[ i ] getweaponammoclip( weap_name ); - if ( weap_name == "hatchet_mp" ) - { - curr_ammo = players[ i ] getweaponammostock( weap_name ); - } - if ( curr_ammo < ammo_to_check ) - { - triggers[ "owner_pickup" ] setinvisibletoplayer( players[ i ] ); - triggers[ "enemy_pickup" ] setvisibletoplayer( players[ i ] ); - } - else - { - triggers[ "owner_pickup" ] setinvisibletoplayer( players[ i ] ); - triggers[ "enemy_pickup" ] setinvisibletoplayer( players[ i ] ); - } - i++; - continue; - } - else - { - triggers[ "owner_pickup" ] setinvisibletoplayer( players[ i ] ); - triggers[ "enemy_pickup" ] setinvisibletoplayer( players[ i ] ); - } - i++; - } - wait 0,05; - } -} - -destroyent() -{ - self delete(); -} - -pickup( player ) -{ - if ( self.name != "hatchet_mp" && isDefined( self.owner ) && self.owner != player ) - { - return; - } - self.playdialog = 0; - self destroyent(); - player giveweapon( self.name ); - clip_ammo = player getweaponammoclip( self.name ); - clip_max_ammo = weaponclipsize( self.name ); - if ( clip_ammo < clip_max_ammo ) - { - clip_ammo++; - } - player setweaponammoclip( self.name, clip_ammo ); -} - -ondestroyed( attacker ) -{ - playfx( level._effect[ "tacticalInsertionFizzle" ], self.origin ); - self playsound( "dst_tac_insert_break" ); - self.owner maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "equipment_destroyed", "item_destroyed" ); - self delete(); -} - -watchshutdown( player ) -{ - self waittill_any( "death", "hacked" ); - pickuptrigger = self.pickuptrigger; - hackertrigger = self.hackertrigger; - hatchetpickuptrigger = self.hatchetpickuptrigger; - enemytrigger = self.enemytrigger; - if ( isDefined( pickuptrigger ) ) - { - pickuptrigger delete(); - } - if ( isDefined( hackertrigger ) ) - { - if ( isDefined( hackertrigger.progressbar ) ) - { - hackertrigger.progressbar destroyelem(); - hackertrigger.progresstext destroyelem(); - } - hackertrigger delete(); - } - if ( isDefined( hatchetpickuptrigger ) ) - { - hatchetpickuptrigger delete(); - } - if ( isDefined( enemytrigger ) ) - { - enemytrigger delete(); - } -} - -watchusetrigger( trigger, callback, playersoundonuse, npcsoundonuse ) -{ - self endon( "delete" ); - self endon( "hacked" ); - while ( 1 ) - { - trigger waittill( "trigger", player ); - while ( !isalive( player ) ) - { - continue; - } - while ( !player isonground() ) - { - continue; - } - if ( isDefined( trigger.triggerteam ) && player.pers[ "team" ] != trigger.triggerteam ) - { - continue; - } - if ( isDefined( trigger.triggerteamignore ) && player.team == trigger.triggerteamignore ) - { - continue; - } - if ( isDefined( trigger.claimedby ) && player != trigger.claimedby ) - { - continue; - } - grenade = player.throwinggrenade; - isequipment = isweaponequipment( player getcurrentweapon() ); - if ( isDefined( isequipment ) && isequipment ) - { - grenade = 0; - } - if ( player usebuttonpressed() && !grenade && !player meleebuttonpressed() ) - { - if ( isDefined( playersoundonuse ) ) - { - player playlocalsound( playersoundonuse ); - } - if ( isDefined( npcsoundonuse ) ) - { - player playsound( npcsoundonuse ); - } - self thread [[ callback ]]( player ); - } - } -} - -createretrievablehint( name, hint ) -{ - retrievehint = spawnstruct(); - retrievehint.name = name; - retrievehint.hint = hint; - level.retrievehints[ name ] = retrievehint; -} - -createhackerhint( name, hint ) -{ - hackerhint = spawnstruct(); - hackerhint.name = name; - hackerhint.hint = hint; - level.hackerhints[ name ] = hackerhint; -} - -createdestroyhint( name, hint ) -{ - destroyhint = spawnstruct(); - destroyhint.name = name; - destroyhint.hint = hint; - level.destroyhints[ name ] = destroyhint; -} - -attachreconmodel( modelname, owner ) -{ - if ( !isDefined( self ) ) - { - return; - } - reconmodel = spawn( "script_model", self.origin ); - reconmodel.angles = self.angles; - reconmodel setmodel( modelname ); - reconmodel.model_name = modelname; - reconmodel linkto( self ); - reconmodel setcontents( 0 ); - reconmodel resetreconmodelvisibility( owner ); - reconmodel thread watchreconmodelfordeath( self ); - reconmodel thread resetreconmodelonevent( "joined_team", owner ); - reconmodel thread resetreconmodelonevent( "player_spawned", owner ); -} - -resetreconmodelvisibility( owner ) -{ - if ( !isDefined( self ) ) - { - return; - } - self setinvisibletoall(); - self setforcenocull(); - if ( !isDefined( owner ) ) - { - return; - } - i = 0; - while ( i < level.players.size ) - { - if ( !level.players[ i ] hasperk( "specialty_detectexplosive" ) && !level.players[ i ] hasperk( "specialty_showenemyequipment" ) ) - { - i++; - continue; - } - else - { - if ( level.players[ i ].team == "spectator" ) - { - i++; - continue; - } - else hasreconmodel = 0; - if ( level.players[ i ] hasperk( "specialty_detectexplosive" ) ) - { - switch( self.model_name ) - { - case "t6_wpn_c4_world_detect": - case "t6_wpn_claymore_world_detect": - hasreconmodel = 1; - break; - break; - default: - } - } - if ( level.players[ i ] hasperk( "specialty_showenemyequipment" ) ) - { - switch( self.model_name ) - { - case "t5_weapon_scrambler_world_detect": - case "t6_wpn_bouncing_betty_world_detect": - case "t6_wpn_c4_world_detect": - case "t6_wpn_claymore_world_detect": - case "t6_wpn_motion_sensor_world_detect": - case "t6_wpn_tac_insert_detect": - case "t6_wpn_taser_mine_world_detect": - case "t6_wpn_trophy_system_world_detect": - hasreconmodel = 1; - break; - break; - default: - } - } - if ( !hasreconmodel ) - { - i++; - continue; - } - else isenemy = 1; - if ( level.teambased ) - { - if ( level.players[ i ].team == owner.team ) - { - isenemy = 0; - } - } - else - { - if ( level.players[ i ] == owner ) - { - isenemy = 0; - } - } - if ( isenemy ) - { - self setvisibletoplayer( level.players[ i ] ); - } - } - i++; - } - } - } -} - -watchreconmodelfordeath( parentent ) -{ - self endon( "death" ); - parentent waittill_any( "death", "hacked" ); - self delete(); -} - -resetreconmodelonevent( eventname, owner ) -{ - self endon( "death" ); - for ( ;; ) - { - level waittill( eventname, newowner ); - if ( isDefined( newowner ) ) - { - owner = newowner; - } - self resetreconmodelvisibility( owner ); - } -} - -switch_team( entity, weapon_name, owner ) -{ -/# -#/ -} diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_weapons.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_weapons.gsc deleted file mode 100644 index 55c93d4..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_weapons.gsc +++ /dev/null @@ -1,1950 +0,0 @@ -//checked includes changed to match cerberus output -#include maps/mp/gametypes_zm/_gameobjects; -#include maps/mp/gametypes_zm/_shellshock; -#include maps/mp/gametypes_zm/_globallogic_utils; -#include maps/mp/zombies/_zm_pers_upgrades_functions; -#include maps/mp/_challenges; -#include maps/mp/gametypes_zm/_weapons; -#include maps/mp/_bb; -#include maps/mp/_sticky_grenade; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/gametypes_zm/_weapon_utils; -#include maps/mp/_utility; -#include common_scripts/utility; - -//whole script first checked as mp version then checked againt zm version - -init() //checked changed to match cerberus output -{ - precacheitem( "knife_mp" ); - precacheitem( "knife_held_mp" ); - precacheitem( "dogs_mp" ); - precacheitem( "dog_bite_mp" ); - precacheitem( "explosive_bolt_mp" ); - precachemodel( "t6_wpn_claymore_world_detect" ); - precachemodel( "t6_wpn_c4_world_detect" ); - precachemodel( "t5_weapon_scrambler_world_detect" ); - precachemodel( "t6_wpn_tac_insert_detect" ); - precachemodel( "t6_wpn_taser_mine_world_detect" ); - precachemodel( "t6_wpn_motion_sensor_world_detect" ); - precachemodel( "t6_wpn_trophy_system_world_detect" ); - precachemodel( "t6_wpn_bouncing_betty_world_detect" ); - precachemodel( "t6_wpn_tac_insert_world" ); - precachemodel( "t6_wpn_shield_stow_world" ); - precachemodel( "t6_wpn_shield_carry_world" ); - precachemodel( "t5_weapon_camera_head_world" ); - precacheitem( "scavenger_item_mp" ); - precacheitem( "scavenger_item_hack_mp" ); - precacheshader( "hud_scavenger_pickup" ); - precacheshellshock( "default" ); - precacheshellshock( "concussion_grenade_mp" ); - precacheshellshock( "tabun_gas_mp" ); - precacheshellshock( "tabun_gas_nokick_mp" ); - precacheshellshock( "proximity_grenade" ); - precacheshellshock( "proximity_grenade_exit" ); - level.missileentities = []; - level.hackertooltargets = []; - if ( !isdefined( level.grenadelauncherdudtime ) ) - { - level.grenadelauncherdudtime = 0; - } - if ( !isdefined(level.throwngrenadedudtime ) ) - { - level.throwngrenadedudtime = 0; - } - level thread onplayerconnect(); - maps/mp/gametypes_zm/_weaponobjects::init(); - if ( !is_false( level._uses_sticky_grenades ) ) - { - maps/mp/_sticky_grenade::init(); - } -} - -onplayerconnect() //checked matches cerberus output -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player.usedweapons = 0; - player.lastfiretime = 0; - player.hits = 0; - player scavenger_hud_create(); - player thread onplayerspawned(); - } -} - -onplayerspawned() //checked matches cerberus output -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self.concussionendtime = 0; - self.scavenged = 0; - self.hasdonecombat = 0; - self.shielddamageblocked = 0; - self thread watchweaponusage(); - self thread watchgrenadeusage(); - self thread watchmissileusage(); - self thread watchweaponchange(); - self thread watchturretuse(); - self thread watchriotshielduse(); - self thread trackweapon(); - self.droppeddeathweapon = undefined; - self.tookweaponfrom = []; - self.pickedupweaponkills = []; - self thread updatestowedweapon(); - } -} - -watchturretuse() //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "turretownerchange", turret ); - self thread watchfortowfire( turret ); - } -} - -watchfortowfire( turret ) //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "turretownerchange" ); - while ( 1 ) - { - self waittill( "turret_tow_fire" ); - self thread watchmissleunlink( turret ); - self waittill( "turret_tow_unlink" ); - } -} - -watchmissleunlink( turret ) //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "turretownerchange" ); - self waittill( "turret_tow_unlink" ); - self relinktoturret( turret ); -} - -watchweaponchange() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self.lastdroppableweapon = self getcurrentweapon(); - self.hitsthismag = []; - weapon = self getcurrentweapon(); - if ( isprimaryweapon( weapon ) && !isDefined( self.hitsthismag[ weapon ] ) ) - { - self.hitsthismag[ weapon ] = weaponclipsize( weapon ); - } - self.lastweaponchange = 0; - while ( 1 ) - { - previous_weapon = self getcurrentweapon(); - self waittill( "weapon_change", newweapon ); - if ( maydropweapon( newweapon ) ) - { - self.lastdroppableweapon = newweapon; - self.lastweaponchange = getTime(); - } - if ( newweapon != "none" ) - { - if ( !isprimaryweapon( newweapon ) || issidearm( newweapon ) && !isDefined( self.hitsthismag[ newweapon ] ) ) - { - self.hitsthismag[ newweapon ] = weaponclipsize( newweapon ); - } - } - } -} - -watchriotshielduse() //checked changed to match cerberus output -{ -} - -updatelastheldweapontimings( newtime ) //checked matches cerberus output -{ - if ( isDefined( self.currentweapon ) && isDefined( self.currentweaponstarttime ) ) - { - totaltime = int( ( newtime - self.currentweaponstarttime ) / 1000 ); - if ( totaltime > 0 ) - { - self addweaponstat( self.currentweapon, "timeUsed", totaltime ); - self.currentweaponstarttime = newtime; - } - } -} - -updateweapontimings( newtime ) //checked changed to match beta dump -{ - if ( self is_bot() ) - { - return; - } - updatelastheldweapontimings( newtime ); - if ( !isDefined( self.staticweaponsstarttime ) ) - { - return; - } - totaltime = int( ( newtime - self.staticweaponsstarttime ) / 1000 ); - if ( totaltime < 0 ) - { - return; - } - self.staticweaponsstarttime = newtime; - if ( isDefined( self.weapon_array_grenade ) ) - { - for(i = 0; i < self.weapon_array_grenade.size; i++) - { - self addweaponstat( self.weapon_array_grenade[ i ], "timeUsed", totaltime ); - } - } - if ( isDefined( self.weapon_array_inventory ) ) - { - for(i = 0; i < self.weapon_array_inventory.size; i++) - { - self addweaponstat( self.weapon_array_inventory[ i ], "timeUsed", totaltime ); - } - } - if ( isDefined( self.killstreak ) ) - { - for ( i = 0; i < self.killstreak.size; i++ ) - { - killstreakweapon = level.menureferenceforkillstreak[ self.killstreak[ i ] ]; - if ( isDefined( killstreakweapon ) ) - { - self addweaponstat( killstreakweapon, "timeUsed", totaltime ); - } - } - } - if ( level.rankedmatch && level.perksenabled ) - { - perksindexarray = []; - specialtys = self.specialty; - if ( !isDefined( specialtys ) ) - { - return; - } - if ( !isDefined( self.class ) ) - { - return; - } - if ( isDefined( self.class_num ) ) - { - for ( numspecialties = 0; numspecialties < level.maxspecialties; numspecialties++ ) - { - perk = self getloadoutitem( self.class_num, "specialty" + ( numspecialties + 1 ) ); - if ( perk != 0 ) - { - perksindexarray[ perk ] = 1; - } - } - perkindexarraykeys = getarraykeys( perksindexarray ); - for ( i = 0; i < perkindexarraykeys.size; i++ ) - { - if ( perksindexarray[ perkindexarraykeys[ i ] ] == 1 ) - { - self adddstat( "itemStats", perkindexarraykeys[ i ], "stats", "timeUsed", "statValue", totaltime ); - } - } - } - } -} - -trackweapon() //checked changed to match beta dump -{ - currentweapon = self getcurrentweapon(); - currenttime = getTime(); - spawnid = getplayerspawnid( self ); - while ( 1 ) - { - event = self waittill_any_return( "weapon_change", "death", "disconnect" ); - newtime = getTime(); - if ( event == "weapon_change" ) - { - self maps/mp/_bb::commitweapondata( spawnid, currentweapon, currenttime ); - newweapon = self getcurrentweapon(); - if ( newweapon != "none" && newweapon != currentweapon ) - { - updatelastheldweapontimings( newtime ); - currentweapon = newweapon; - currenttime = newtime; - } - } - else - { - if ( event != "disconnect" && isDefined( self ) ) - { - self maps/mp/_bb::commitweapondata( spawnid, currentweapon, currenttime ); - updateweapontimings( newtime ); - } - return; - } - } -} - -maydropweapon( weapon ) //checked matches cerberus output -{ - if ( level.disableweapondrop == 1 ) - { - return 0; - } - if ( weapon == "none" ) - { - return 0; - } - if ( ishackweapon( weapon ) ) - { - return 0; - } - invtype = weaponinventorytype( weapon ); - if ( invtype != "primary" ) - { - return 0; - } - if ( weapon == "none" ) - { - return 0; - } - return 1; -} - -dropweaponfordeath( attacker, sweapon, smeansofdeath ) //checked matches cerberus output dvars taken from beta dump -{ - if ( level.disableweapondrop == 1 ) - { - return; - } - weapon = self.lastdroppableweapon; - if ( isDefined( self.droppeddeathweapon ) ) - { - return; - } - if ( !isDefined( weapon ) ) - { - /* -/# - if ( getDvar( "scr_dropdebug" ) == "1" ) - { - println( "didn't drop weapon: not defined" ); -#/ - } - */ - return; - } - if ( weapon == "none" ) - { - /* -/# - if ( getDvar( "scr_dropdebug" ) == "1" ) - { - println( "didn't drop weapon: weapon == none" ); -#/ - } - */ - return; - } - if ( !self hasweapon( weapon ) ) - { - /* -/# - if ( getDvar( "scr_dropdebug" ) == "1" ) - { - println( "didn't drop weapon: don't have it anymore (" + weapon + ")" ); -#/ - } - */ - return; - } - if ( !self anyammoforweaponmodes( weapon ) ) - { - /* -/# - if ( getDvar( "scr_dropdebug" ) == "1" ) - { - println( "didn't drop weapon: no ammo for weapon modes" ); -#/ - } - */ - return; - } - if ( !shoulddroplimitedweapon( weapon, self ) ) - { - return; - } - clipammo = self getweaponammoclip( weapon ); - stockammo = self getweaponammostock( weapon ); - clip_and_stock_ammo = clipammo + stockammo; - if ( !clip_and_stock_ammo ) - { - /* -/# - if ( getDvar( "scr_dropdebug" ) == "1" ) - { - println( "didn't drop weapon: no ammo" ); -#/ - } - */ - return; - } - stockmax = weaponmaxammo( weapon ); - if ( stockammo > stockmax ) - { - stockammo = stockmax; - } - item = self dropitem( weapon ); - if ( !isDefined( item ) ) - { - /* -/# - iprintlnbold( "dropItem: was not able to drop weapon " + weapon ); -#/ - */ - return; - } - /* -/# - if ( getDvar( "scr_dropdebug" ) == "1" ) - { - println( "dropped weapon: " + weapon ); -#/ - } - */ - droplimitedweapon( weapon, self, item ); - self.droppeddeathweapon = 1; - item itemweaponsetammo( clipammo, stockammo ); - item.owner = self; - item.ownersattacker = attacker; - item.sweapon = sweapon; - item.smeansofdeath = smeansofdeath; - item thread watchpickup(); - item thread deletepickupafterawhile(); -} - -dropweapontoground( weapon ) //checked changed to match cerberus output dvars taken from beta dump -{ - if ( !isDefined( weapon ) ) - { - /* -/# - if ( getDvar( "scr_dropdebug" ) == "1" ) - { - println( "didn't drop weapon: not defined" ); -#/ - } - */ - return; - } - if ( weapon == "none" ) - { - /* -/# - if ( getDvar( "scr_dropdebug" ) == "1" ) - { - println( "didn't drop weapon: weapon == none" ); -#/ - } - */ - return; - } - if ( !self hasweapon( weapon ) ) - { - /* -/# - if ( getDvar( "scr_dropdebug" ) == "1" ) - { - println( "didn't drop weapon: don't have it anymore (" + weapon + ")" ); -#/ - } - */ - return; - } - if ( !self anyammoforweaponmodes( weapon ) ) - { - /* -/# - if ( getDvar( "scr_dropdebug" ) == "1" ) - { - println( "didn't drop weapon: no ammo for weapon modes" ); -#/ - } - */ - switch( weapon ) - { - case "m202_flash_mp": - case "m220_tow_mp": - case "m32_mp": - case "minigun_mp": - case "mp40_blinged_mp": - self takeweapon( weapon ); - break; - default: - break; - } - if ( !shoulddroplimitedweapon( weapon, self ) ) - { - return; - } - clipammo = self getweaponammoclip( weapon ); - stockammo = self getweaponammostock( weapon ); - clip_and_stock_ammo = clipammo + stockammo; - if ( !clip_and_stock_ammo ) - { - /* -/# - if ( getDvar( "scr_dropdebug" ) == "1" ) - { - println( "didn't drop weapon: no ammo" ); -#/ - } - */ - return; - } - stockmax = weaponmaxammo( weapon ); - if ( stockammo > stockmax ) - { - stockammo = stockmax; - } - item = self dropitem( weapon ); - /* -/# - if ( getDvar( "scr_dropdebug" ) == "1" ) - { - println( "dropped weapon: " + weapon ); -#/ - } - */ - droplimitedweapon( weapon, self, item ); - item itemweaponsetammo( clipammo, stockammo ); - item.owner = self; - item thread watchpickup(); - item thread deletepickupafterawhile(); - } -} - -deletepickupafterawhile() //checked matches cerberus output -{ - self endon( "death" ); - wait 60; - if ( !isDefined( self ) ) - { - return; - } - self delete(); -} - -getitemweaponname() //checked matches cerberus output -{ - classname = self.classname; - /* -/# - assert( getsubstr( classname, 0, 7 ) == "weapon_" ); -#/ - */ - weapname = getsubstr( classname, 7 ); - return weapname; -} - -watchpickup() //checked changed to match cerberus output dvar taken from beta dump -{ - self endon( "death" ); - weapname = self getitemweaponname(); - while ( - { - self waittill( "trigger", player, droppeditem ); - if ( isdefined( droppeditem ) ) - { - break; - } - } - /* -/# - if ( getDvar( "scr_dropdebug" ) == "1" ) - { - println( "picked up weapon: " + weapname + ", " + isDefined( self.ownersattacker ) ); -#/ - } -/# - assert( isDefined( player.tookweaponfrom ) ); -#/ -/# - assert( isDefined( player.pickedupweaponkills ) ); -#/ - */ - droppedweaponname = droppeditem getitemweaponname(); - if ( isDefined( player.tookweaponfrom[ droppedweaponname ] ) ) - { - droppeditem.owner = player.tookweaponfrom[ droppedweaponname ]; - droppeditem.ownersattacker = player; - player.tookweaponfrom[ droppedweaponname ] = undefined; - } - droppeditem thread watchpickup(); - if ( isDefined( self.ownersattacker ) && self.ownersattacker == player ) - { - player.tookweaponfrom[ weapname ].previousowner = self.owner; - player.pickedupweaponkills[ weapname ] = 0; - } - else - { - player.tookweaponfrom[ weapname ] = undefined; - player.pickedupweaponkills[ weapname ] = undefined; - } -} - -itemremoveammofromaltmodes() //checked matches cerberus output -{ - origweapname = self getitemweaponname(); - curweapname = weaponaltweaponname( origweapname ); - altindex = 1; - while ( curweapname != "none" && curweapname != origweapname ) - { - self itemweaponsetammo( 0, 0, altindex ); - curweapname = weaponaltweaponname( curweapname ); - altindex++; - } -} - -dropoffhand() //checked partially changed to match cerberus output did not change while loop to for loop see github for more info -{ - grenadetypes = []; - index = 0; - while ( index < grenadetypes.size ) - { - if ( !self hasweapon( grenadetypes[ index ] ) ) - { - index++; - continue; - } - count = self getammocount( grenadetypes[ index ] ); - if ( !count ) - { - index++; - continue; - } - self dropitem( grenadetypes[ index ] ); - index++; - } -} - -watchweaponusage() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon( "game_ended" ); - self.usedkillstreakweapon = []; - self.usedkillstreakweapon[ "minigun_mp" ] = 0; - self.usedkillstreakweapon[ "m32_mp" ] = 0; - self.usedkillstreakweapon[ "m202_flash_mp" ] = 0; - self.usedkillstreakweapon[ "m220_tow_mp" ] = 0; - self.usedkillstreakweapon[ "mp40_blinged_mp" ] = 0; - self.killstreaktype = []; - self.killstreaktype[ "minigun_mp" ] = "minigun_mp"; - self.killstreaktype[ "m32_mp" ] = "m32_mp"; - self.killstreaktype[ "m202_flash_mp" ] = "m202_flash_mp"; - self.killstreaktype[ "m220_tow_mp" ] = "m220_tow_mp"; - self.killstreaktype[ "mp40_blinged_mp" ] = "mp40_blinged_drop_mp"; - for ( ;; ) - { - self waittill( "weapon_fired", curweapon ); - self.lastfiretime = getTime(); - self.hasdonecombat = 1; - if ( maps/mp/gametypes_zm/_weapons::isprimaryweapon( curweapon ) || maps/mp/gametypes_zm/_weapons::issidearm( curweapon ) ) - { - if ( isDefined( self.hitsthismag[ curweapon ] ) ) - { - self thread updatemagshots( curweapon ); - } - } - switch ( weaponclass( curweapon ) ) - { - case "rifle": - if ( curweapon == "crossbow_mp" ) - { - level.globalcrossbowfired++; - } - if ( curweapon == "crossbow_explosive_mp" ) - { - level.globalcrossbowfired++; - self addweaponstat( curweapon, "shots", 1 ); - self thread begingrenadetracking(); - break; - } - case "mg": - case "pistol": - case "pistol spread": - case "smg": - case "spread": - self trackweaponfire( curweapon ); - level.globalshotsfired++; - break; - case "grenade": - case "rocketlauncher": - self addweaponstat( curweapon, "shots", 1 ); - break; - default: - break; - } - } -} - -updatemagshots( weaponname ) //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "updateMagShots_" + weaponname ); - self.hitsthismag[ weaponname ]--; - - wait 0.05; - self.hitsthismag[ weaponname ] = weaponclipsize( weaponname ); -} - -checkhitsthismag( weaponname ) //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self notify( "updateMagShots_" + weaponname ); - waittillframeend; - if ( isDefined( self.hitsthismag[ weaponname ] ) && self.hitsthismag[ weaponname ] == 0 ) - { - if ( !sessionmodeiszombiesgame() ) - { - weaponclass = getweaponclass( weaponname ); - maps/mp/_challenges::fullclipnomisses( weaponclass, weaponname ); - } - self.hitsthismag[ weaponname ] = weaponclipsize( weaponname ); - } -} - -trackweaponfire( curweapon ) //checked changed to match cerberus output -{ - shotsfired = 1; - if ( isdefined( self.laststandparams ) && self.laststandparams.laststandstarttime == GetTime() ) - { - self.hits = 0; - return; - } - pixbeginevent( "trackWeaponFire" ); - if ( is_true( level.pers_upgrade_sniper ) ) - { - maps/mp/zombies/_zm_pers_upgrades_functions::pers_sniper_player_fires( curweapon, self.hits ); - } - self addweaponstat( curweapon, "shots", shotsfired ); - self addweaponstat( curweapon, "hits", self.hits ); - if ( isdefined( level.add_client_stat ) ) - { - self [[ level.add_client_stat ]]( "total_shots", shotsfired ); - self [[ level.add_client_stat ]]( "hits", self.hits ); - } - else - { - self addplayerstat( "total_shots", shotsfired ); - self addplayerstat( "hits", self.hits ); - self addplayerstat( "misses", int( max( 0, shotsfired - self.hits ) ) ); - } - self incrementplayerstat( "total_shots", shotsfired ); - self incrementplayerstat( "hits", self.hits ); - self incrementplayerstat( "misses", int( max( 0, shotsfired - self.hits ) ) ); - self maps/mp/_bb::bbaddtostat( "shots", shotsfired ); - self maps/mp/_bb::bbaddtostat( "hits", self.hits ); - self.hits = 0; - pixendevent(); -} - -checkhit( sweapon ) //checked changed to match cerberus output -{ - switch ( weaponclass( sweapon ) ) - { - case "mg": - case "pistol": - case "rifle": - case "smg": - self.hits++; - break; - case "pistol spread": - case "spread": - self.hits = 1; - break; - default: - break; - } - waittillframeend; - if ( isDefined( self ) && isDefined( self.hitsthismag ) && isDefined( self.hitsthismag[ sweapon ] ) ) - { - self thread checkhitsthismag( sweapon ); - } - if(sweapon == "bazooka_mp" || isstrstart(sweapon, "t34") || isstrstart(sweapon, "panzer")) - { - self addweaponstat(sweapon, "hits", 1); - } -} - -watchgrenadeusage() //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self.throwinggrenade = 0; - self.gotpullbacknotify = 0; - self thread beginothergrenadetracking(); - self thread watchforthrowbacks(); - self thread watchforgrenadeduds(); - self thread watchforgrenadelauncherduds(); - for ( ;; ) - { - self waittill( "grenade_pullback", weaponname ); - self addweaponstat( weaponname, "shots", 1 ); - self.hasdonecombat = 1; - self.throwinggrenade = 1; - self.gotpullbacknotify = 1; - if ( weaponname == "satchel_charge_mp" ) - { - self thread beginsatcheltracking(); - } - self thread begingrenadetracking(); - } -} - -watchmissileusage() //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon( "game_ended" ); - for ( ;; ) - { - self waittill( "missile_fire", missile, weapon_name ); - self.hasdonecombat = 1; - /* -/# - assert( isDefined( missile ) ); -#/ - */ - level.missileentities[ level.missileentities.size ] = missile; - missile thread watchmissiledeath(); - } -} - -watchmissiledeath() //checked matches cerberus output -{ - self waittill( "death" ); - arrayremovevalue( level.missileentities, self ); -} - -dropweaponstoground( origin, radius ) //checked changed to match cerberus output -{ - weapons = getdroppedweapons(); - for ( i = 0; i < weapons.size; i++ ) - { - if ( distancesquared( origin, weapons[ i ].origin ) < ( radius * radius ) ) - { - trace = bullettrace( weapons[ i ].origin, weapons[ i ].origin + vectorScale( ( 0, 0, -1 ), 2000 ), 0, weapons[ i ] ); - weapons[ i ].origin = trace[ "position" ]; - } - } -} - -dropgrenadestoground( origin, radius ) //checked changed to match cerberus output -{ - grenades = getentarray( "grenade", "classname" ); - for ( i = 0; i < grenades.size; i++ ) - { - if ( distancesquared( origin, grenades[ i ].origin ) < ( radius * radius ) ) - { - grenades[ i ] launch( vectorScale( ( 1, 1, 1 ), 5 ) ); - } - } -} - -watchgrenadecancel() //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "grenade_fire" ); - self waittill( "weapon_change", weapon ); - self.throwinggrenade = 0; - self.gotpullbacknotify = 0; -} - -begingrenadetracking() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "grenade_throw_cancelled" ); - starttime = getTime(); - self thread watchgrenadecancel(); - self waittill( "grenade_fire", grenade, weaponname ); - /* -/# - assert( isDefined( grenade ) ); -#/ - */ - level.missileentities[ level.missileentities.size ] = grenade; - grenade thread watchmissiledeath(); - if ( grenade maps/mp/_utility::ishacked() ) - { - return; - } - bbprint( "mpequipmentuses", "gametime %d spawnid %d weaponname %s", getTime(), getplayerspawnid( self ), weaponname ); - if ( ( getTime() - starttime ) > 1000 ) - { - grenade.iscooked = 1; - } - switch( weaponname ) - { - case "frag_grenade_zm": - case "sticky_grenade_zm": - self addweaponstat( weaponname, "used", 1 ); - case "explosive_bolt_zm": - grenade.originalowner = self; - break; - } - if ( weaponname == "sticky_grenade_zm" || weaponname == "frag_grenade_zm" ) - { - grenade setteam( self.pers[ "team" ] ); - grenade setowner( self ); - } - self.throwinggrenade = 0; -} - -beginothergrenadetracking() //checked matches cerberus output -{ -} - -checkstucktoplayer( deleteonteamchange, awardscoreevent, weaponname ) //checked matches cerberus output -{ - self endon( "death" ); - self waittill( "stuck_to_player", player ); - if ( isDefined( player ) ) - { - if ( deleteonteamchange ) - { - self thread stucktoplayerteamchange( player ); - } - if ( awardscoreevent && isDefined( self.originalowner ) ) - { - } - self.stucktoplayer = player; - } -} - -checkhatchetbounce() //checked matches cerberus output -{ - self endon( "stuck_to_player" ); - self endon( "death" ); - self waittill( "grenade_bounce" ); - self.bounced = 1; -} - -stucktoplayerteamchange( player ) //checked matches cerberus output -{ - self endon( "death" ); - player endon( "disconnect" ); - originalteam = player.pers[ "team" ]; - while ( 1 ) - { - player waittill( "joined_team" ); - if ( player.pers[ "team" ] != originalteam ) - { - self detonate(); - return; - } - } -} - -beginsatcheltracking() //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self waittill_any( "grenade_fire", "weapon_change" ); - self.throwinggrenade = 0; -} - -watchforthrowbacks() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "grenade_fire", grenade, weapname ); - if ( self.gotpullbacknotify ) - { - self.gotpullbacknotify = 0; - continue; - } - if ( !issubstr( weapname, "frag_" ) ) - { - continue; - } - grenade.threwback = 1; - grenade.originalowner = self; - } -} - -registergrenadelauncherduddvar( dvarstring, defaultvalue, minvalue, maxvalue ) //checked changed to match cerberus output -{ - dvarstring = "scr_" + dvarstring + "_grenadeLauncherDudTime"; - if ( GetDvar( dvarstring ) == "" ) - { - setdvar( dvarstring, defaultvalue ); - } - if ( GetDvarInt( dvarstring ) > maxvalue ) - { - setdvar( dvarstring, maxvalue ); - } - else if ( GetDvarInt( dvarstring ) < minvalue ) - { - setdvar( dvarstring, minvalue ); - } - level.grenadelauncherdudtimedvar = dvarstring; - level.grenadelauncherdudtimemin = minvalue; - level.grenadelauncherdudtimemax = maxvalue; - level.grenadelauncherdudtime = GetDvarInt( level.grenadelauncherdudtimedvar ); -} - -registerthrowngrenadeduddvar( dvarstring, defaultvalue, minvalue, maxvalue ) //checked changed to match cerberus output -{ - dvarstring = "scr_" + dvarstring + "_thrownGrenadeDudTime"; - if ( getDvar( dvarstring ) == "" ) - { - setdvar( dvarstring, defaultvalue ); - } - if ( getDvarInt( dvarstring ) > maxvalue ) - { - setdvar( dvarstring, maxvalue ); - } - else if ( getDvarInt( dvarstring ) < minvalue ) - { - setdvar( dvarstring, minvalue ); - } - level.throwngrenadedudtimedvar = dvarstring; - level.throwngrenadedudtimemin = minvalue; - level.throwngrenadedudtimemax = maxvalue; - level.throwngrenadedudtime = getDvarInt( level.throwngrenadedudtimedvar ); -} - -registerkillstreakdelay( dvarstring, defaultvalue, minvalue, maxvalue ) //checked changed to match cerberus output -{ - dvarstring = "scr_" + dvarstring + "_killstreakDelayTime"; - if ( getDvar( dvarstring ) == "" ) - { - setdvar( dvarstring, defaultvalue ); - } - if ( getDvarInt( dvarstring ) > maxvalue ) - { - setdvar( dvarstring, maxvalue ); - } - else if ( getDvarInt( dvarstring ) < minvalue ) - { - setdvar( dvarstring, minvalue ); - } - level.killstreakrounddelay = getDvarInt( dvarstring ); -} - -turngrenadeintoadud( weapname, isthrowngrenade, player ) //checked changed to match cerberus output -{ - if ( level.grenadelauncherdudtime >= ( maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() / 1000 ) && !isthrowngrenade ) - { - if ( issubstr( weapname, "gl_" ) || weapname == "china_lake_mp" ) - { - timeleft = int( level.grenadelauncherdudtime - ( maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() / 1000 ) ); - if ( !timeleft ) - { - timeleft = 1; - } - player iprintlnbold( &"MP_LAUNCHER_UNAVAILABLE_FOR_N", " " + timeleft + " ", &"EXE_SECONDS" ); - self makegrenadedud(); - } - } - else if ( level.throwngrenadedudtime >= ( maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() / 1000 ) && isthrowngrenade ) - { - if ( weapname == "frag_grenade_mp" || weapname == "sticky_grenade_mp" ) - { - if ( isDefined( player.suicide ) && player.suicide ) - { - return; - } - timeleft = int( level.throwngrenadedudtime - ( maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() / 1000 ) ); - if ( !timeleft ) - { - timeleft = 1; - } - player iprintlnbold( &"MP_GRENADE_UNAVAILABLE_FOR_N", " " + timeleft + " ", &"EXE_SECONDS" ); - self makegrenadedud(); - } - } -} - -watchforgrenadeduds() //checked matches cerberus output -{ - self endon( "spawned_player" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "grenade_fire", grenade, weapname ); - grenade turngrenadeintoadud( weapname, 1, self ); - } -} - -watchforgrenadelauncherduds() //checked matches cerberus output -{ - self endon( "spawned_player" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "grenade_launcher_fire", grenade, weapname ); - grenade turngrenadeintoadud( weapname, 0, self ); - } -} - -getdamageableents( pos, radius, dolos, startradius ) //checked partially changed to match cerberus output did not use continue in for loop and foreach see github for more info -{ - ents = []; - if ( !isDefined( dolos ) ) - { - dolos = 0; - } - if ( !isDefined( startradius ) ) - { - startradius = 0; - } - players = level.players; - for ( i = 0; i < players.size; i++ ) - { - if ( !isalive( players[ i ] ) || players[ i ].sessionstate != "playing" ) - { - } - else - { - playerpos = players[ i ].origin + vectorScale( ( 0, 0, 1 ), 32 ); - distsq = distancesquared( pos, playerpos ); - if ( distsq < ( radius * radius ) || !dolos && weapondamagetracepassed( pos, playerpos, startradius, undefined ) ) - { - newent = spawnstruct(); - newent.isplayer = 1; - newent.isadestructable = 0; - newent.isadestructible = 0; - newent.isactor = 0; - newent.entity = players[ i ]; - newent.damagecenter = playerpos; - ents[ ents.size ] = newent; - } - } - } - grenades = getentarray( "grenade", "classname" ); - for ( i = 0; i < grenades.size; i++ ) - { - entpos = grenades[ i ].origin; - distsq = distancesquared( pos, entpos ); - if ( distsq < ( radius * radius ) || !dolos && weapondamagetracepassed( pos, entpos, startradius, grenades[ i ] ) ) - { - newent = spawnstruct(); - newent.isplayer = 0; - newent.isadestructable = 0; - newent.isadestructible = 0; - newent.isactor = 0; - newent.entity = grenades[ i ]; - newent.damagecenter = entpos; - ents[ ents.size ] = newent; - } - } - destructibles = getentarray( "destructible", "targetname" ); - for ( i = 0; i < destructibles.size; i++ ) - { - entpos = destructibles[ i ].origin; - distsq = distancesquared( pos, entpos ); - if ( distsq < ( radius * radius ) || !dolos && weapondamagetracepassed( pos, entpos, startradius, destructibles[ i ] ) ) - { - newent = spawnstruct(); - newent.isplayer = 0; - newent.isadestructable = 0; - newent.isadestructible = 1; - newent.isactor = 0; - newent.entity = destructibles[ i ]; - newent.damagecenter = entpos; - ents[ ents.size ] = newent; - } - } - destructables = getentarray( "destructable", "targetname" ); - for ( i = 0; i < destructables.size; i++ ) - { - entpos = destructables[ i ].origin; - distsq = distancesquared( pos, entpos ); - if ( distsq < ( radius * radius ) || !dolos && weapondamagetracepassed( pos, entpos, startradius, destructables[ i ] ) ) - { - newent = spawnstruct(); - newent.isplayer = 0; - newent.isadestructable = 1; - newent.isadestructible = 0; - newent.isactor = 0; - newent.entity = destructables[ i ]; - newent.damagecenter = entpos; - ents[ ents.size ] = newent; - } - } - return ents; -} - -weapondamagetracepassed( from, to, startradius, ignore ) //checked matches cerberus output -{ - trace = weapondamagetrace( from, to, startradius, ignore ); - return trace[ "fraction" ] == 1; -} - -weapondamagetrace( from, to, startradius, ignore ) //checked changed to match cerberus output -{ - midpos = undefined; - diff = to - from; - if ( lengthsquared( diff ) < ( startradius * startradius ) ) - { - midpos = to; - } - dir = vectornormalize( diff ); - midpos = from + ( dir[ 0 ] * startradius, dir[ 1 ] * startradius, dir[ 2 ] * startradius ); - trace = bullettrace( midpos, to, 0, ignore ); - if ( getDvarInt( "scr_damage_debug" ) != 0 ) - { - if ( trace[ "fraction" ] == 1 ) - { - thread debugline( midpos, to, ( 1, 1, 1 ) ); - } - else - { - thread debugline( midpos, trace[ "position" ], ( 1, 0.9, 0.8 ) ); - thread debugline( trace[ "position" ], to, ( 1, 0.4, 0.3 ) ); - } - } - return trace; -} - -damageent( einflictor, eattacker, idamage, smeansofdeath, sweapon, damagepos, damagedir ) //checked does not match cerberus output matches beta dump -{ - if ( self.isplayer ) - { - self.damageorigin = damagepos; - self.entity thread [[ level.callbackplayerdamage ]]( einflictor, eattacker, idamage, 0, smeansofdeath, sweapon, damagepos, damagedir, "none", 0, 0 ); - } - else if ( self.isactor ) - { - self.damageorigin = damagepos; - self.entity thread [[ level.callbackactordamage ]]( einflictor, eattacker, idamage, 0, smeansofdeath, sweapon, damagepos, damagedir, "none", 0, 0 ); - } - else if ( self.isadestructible ) - { - self.damageorigin = damagepos; - self.entity dodamage( idamage, damagepos, eattacker, einflictor, 0, smeansofdeath, 0, sweapon ); - } - else - { - if ( self.isadestructable || sweapon == "claymore_mp" && sweapon == "airstrike_mp" ) - { - return; - } - self.entity damage_notify_wrapper( idamage, eattacker, ( 0, 0, 0 ), ( 0, 0, 0 ), "mod_explosive", "", "" ); - } -} - -debugline( a, b, color ) //checked changed to match cerberus output -{ - /* -/# - for ( i = 0; i < 600; i++ ) - { - line( a, b, color ); - wait 0.05; -#/ - } - */ -} - -onweapondamage( eattacker, einflictor, sweapon, meansofdeath, damage ) //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - switch( sweapon ) - { - case "concussion_grenade_mp": - radius = 512; - if ( self == eattacker ) - { - radius *= 0.5; - } - scale = 1 - ( distance( self.origin, einflictor.origin ) / radius ); - if ( scale < 0 ) - { - scale = 0; - } - time = 2 + ( 4 * scale ); - wait 0.05; - if ( self hasperk( "specialty_stunprotection" ) ) - { - time *= 0.1; - } - self thread playconcussionsound( time ); - if ( self mayapplyscreeneffect() ) - { - self shellshock( "concussion_grenade_mp", time, 0 ); - } - self.concussionendtime = getTime() + ( time * 1000 ); - break; - default: - maps/mp/gametypes_zm/_shellshock::shellshockondamage( meansofdeath, damage ); - break; - } -} - -playconcussionsound( duration ) //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - concussionsound = spawn( "script_origin", ( 0, 0, 1 ) ); - concussionsound.origin = self.origin; - concussionsound linkto( self ); - concussionsound thread deleteentonownerdeath( self ); - concussionsound playsound( "" ); - concussionsound playloopsound( "" ); - if ( duration > 0.5 ) - { - wait ( duration - 0.5 ); - } - concussionsound playsound( "" ); - concussionsound stoploopsound( 0.5 ); - wait 0.5; - concussionsound notify( "delete" ); - concussionsound delete(); -} - -deleteentonownerdeath( owner ) //checked matches cerberus output -{ - self endon( "delete" ); - owner waittill( "death" ); - self delete(); -} - -monitor_dog_special_grenades() //checked matches cerberus output -{ -} - -isprimaryweapon( weaponname ) //checked matches cerberus output -{ - return isDefined( level.primary_weapon_array[ weaponname ] ); -} - -issidearm( weaponname ) //checked matches cerberus output -{ - return isDefined( level.side_arm_array[ weaponname ] ); -} - -isinventory( weaponname ) //checked matches cerberus output -{ - return isDefined( level.inventory_array[ weaponname ] ); -} - -isgrenade( weaponname ) //checked matches cerberus output -{ - return isDefined( level.grenade_array[ weaponname ] ); -} - -isexplosivebulletweapon( weaponname ) //checked changed to match cerberus output -{ - if ( weaponname == "chopper_minigun_mp" || weaponname == "cobra_20mm_mp" || weaponname == "littlebird_guard_minigun_mp" || weaponname == "cobra_20mm_comlink_mp" ) - { - return 1; - } - return 0; -} - -getweaponclass_array( current ) //checked changed to match cerberus output -{ - if ( isprimaryweapon( current ) ) - { - return level.primary_weapon_array; - } - else if ( issidearm( current ) ) - { - return level.side_arm_array; - } - else if ( isgrenade( current ) ) - { - return level.grenade_array; - } - else - { - return level.inventory_array; - } -} - -updatestowedweapon() //checked partially changed to match cerberus output did not use for loop see github for more info -{ - self endon( "spawned" ); - self endon( "killed_player" ); - self endon( "disconnect" ); - self.tag_stowed_back = undefined; - self.tag_stowed_hip = undefined; - team = self.pers[ "team" ]; - class = self.pers[ "class" ]; - while ( 1 ) - { - self waittill( "weapon_change", newweapon ); - self.weapon_array_primary = []; - self.weapon_array_sidearm = []; - self.weapon_array_grenade = []; - self.weapon_array_inventory = []; - weaponslist = self getweaponslist(); - idx = 0; - while ( idx < weaponslist.size ) - { - switch( weaponslist[ idx ] ) - { - case "m202_flash_mp": - case "m220_tow_mp": - case "m32_mp": - case "minigun_mp": - case "mp40_blinged_mp": - case "zipline_mp": - idx++; - continue; - default: - break; - } - if ( isprimaryweapon( weaponslist[ idx ] ) ) - { - self.weapon_array_primary[ self.weapon_array_primary.size ] = weaponslist[ idx ]; - idx++; - continue; - } - if ( issidearm( weaponslist[ idx ] ) ) - { - self.weapon_array_sidearm[ self.weapon_array_sidearm.size ] = weaponslist[ idx ]; - idx++; - continue; - } - if ( isgrenade( weaponslist[ idx ] ) ) - { - self.weapon_array_grenade[ self.weapon_array_grenade.size ] = weaponslist[ idx ]; - idx++; - continue; - } - if ( isinventory( weaponslist[ idx ] ) ) - { - self.weapon_array_inventory[ self.weapon_array_inventory.size ] = weaponslist[ idx ]; - idx++; - continue; - } - if ( isweaponprimary( weaponslist[ idx ] ) ) - { - self.weapon_array_primary[ self.weapon_array_primary.size ] = weaponslist[ idx ]; - } - idx++; - } - detach_all_weapons(); - stow_on_back(); - stow_on_hip(); - } -} - -forcestowedweaponupdate() //checked matches cerberus output -{ - detach_all_weapons(); - stow_on_back(); - stow_on_hip(); -} - -detachcarryobjectmodel() //checked matches cerberus output -{ - if ( isDefined( self.carryobject ) && isDefined( self.carryobject maps/mp/gametypes_zm/_gameobjects::getvisiblecarriermodel() ) ) - { - if ( isDefined( self.tag_stowed_back ) ) - { - self detach( self.tag_stowed_back, "tag_stowed_back" ); - self.tag_stowed_back = undefined; - } - } -} - -detach_all_weapons() //checked matches cerberus output -{ - if ( isDefined( self.tag_stowed_back ) ) - { - clear_weapon = 1; - if ( isDefined( self.carryobject ) ) - { - carriermodel = self.carryobject maps/mp/gametypes_zm/_gameobjects::getvisiblecarriermodel(); - if ( isDefined( carriermodel ) && carriermodel == self.tag_stowed_back ) - { - self detach( self.tag_stowed_back, "tag_stowed_back" ); - clear_weapon = 0; - } - } - if ( clear_weapon ) - { - self clearstowedweapon(); - } - self.tag_stowed_back = undefined; - } - if ( isDefined( self.tag_stowed_hip ) ) - { - detach_model = getweaponmodel( self.tag_stowed_hip ); - self detach( detach_model, "tag_stowed_hip_rear" ); - self.tag_stowed_hip = undefined; - } -} - -non_stowed_weapon( weapon ) //checked matches cerberus output -{ - if ( self hasweapon( "knife_ballistic_mp" ) && weapon != "knife_ballistic_mp" ) - { - return 1; - } - if ( self hasweapon( "knife_held_mp" ) && weapon != "knife_held_mp" ) - { - return 1; - } - return 0; -} - -stow_on_back( current ) //checked partially changed to match cerberus output did not use for loop see github for more info -{ - current = self getcurrentweapon(); - currentalt = self getcurrentweaponaltweapon(); - self.tag_stowed_back = undefined; - weaponoptions = 0; - index_weapon = ""; - if ( isDefined( self.carryobject ) && isDefined( self.carryobject maps/mp/gametypes_zm/_gameobjects::getvisiblecarriermodel() ) ) - { - self.tag_stowed_back = self.carryobject maps/mp/gametypes_zm/_gameobjects::getvisiblecarriermodel(); - self attach( self.tag_stowed_back, "tag_stowed_back", 1 ); - return; - } - if ( non_stowed_weapon( current ) || self.hasriotshield ) - { - return; - } - if ( current != "none" ) - { - if ( issubstr( current, "gl_" ) || issubstr( temp_index_weapon, "gl_" ) || issubstr( current, "mk_" ) || issubstr( temp_index_weapon, "mk_" ) || issubstr( current, "dualoptic_" ) || issubstr( temp_index_weapon, "dualoptic_" ) || issubstr( current, "ft_" ) || issubstr( temp_index_weapon, "ft_" ) ) - { - index_weapon_tok = strtok( temp_index_weapon, "_" ); - current_tok = strtok( current, "_" ); - for ( i = 0; i < index_weapon_tok.size; i++ ) - { - if ( !issubstr( current, index_weapon_tok[ i ] ) || index_weapon_tok.size != current_tok.size ) - { - i = 0; - break; - } - } - if ( i == index_weapon_tok.size ) - { - continue; - } - } - index_weapon = temp_index_weapon; - /* -/# - assert( isDefined( self.curclass ), "Player missing current class" ); -#/ - */ - if ( issubstr( index_weapon, self.pers[ "primaryWeapon" ] ) && issubstr( self.curclass, "CUSTOM" ) ) - { - self.tag_stowed_back = getweaponmodel( index_weapon ); - } - else - { - stowedmodelindex = getweaponstowedmodel( index_weapon ); - self.tag_stowed_back = getweaponmodel( index_weapon, stowedmodelindex ); - } - if ( issubstr( self.curclass, "CUSTOM" ) ) - { - weaponoptions = self calcweaponoptions( self.class_num, 0 ); - } - idx++; - } - if ( !isDefined( self.tag_stowed_back ) ) - { - return; - } - self setstowedweapon( index_weapon ); -} - -stow_on_hip() //checked partially changed to match cerberus output did not use for loop see github for more info -{ - current = self getcurrentweapon(); - self.tag_stowed_hip = undefined; - idx = 0; - while ( idx < self.weapon_array_inventory.size ) - { - if ( self.weapon_array_inventory[ idx ] == current ) - { - idx++; - continue; - } - if ( !self getweaponammostock( self.weapon_array_inventory[ idx ] ) ) - { - idx++; - continue; - } - self.tag_stowed_hip = self.weapon_array_inventory[ idx ]; - idx++; - } - if ( !isDefined( self.tag_stowed_hip ) ) - { - return; - } - if ( self.tag_stowed_hip != "satchel_charge_mp" || self.tag_stowed_hip == "claymore_mp" && self.tag_stowed_hip == "bouncingbetty_mp" ) - { - self.tag_stowed_hip = undefined; - return; - } - weapon_model = getweaponmodel( self.tag_stowed_hip ); - self attach( weapon_model, "tag_stowed_hip_rear", 1 ); -} - -stow_inventory( inventories, current ) //checked matches cerberus output -{ - if ( isDefined( self.inventory_tag ) ) - { - detach_model = getweaponmodel( self.inventory_tag ); - self detach( detach_model, "tag_stowed_hip_rear" ); - self.inventory_tag = undefined; - } - if ( !isDefined( inventories[ 0 ] ) || self getweaponammostock( inventories[ 0 ] ) == 0 ) - { - return; - } - if ( inventories[ 0 ] != current ) - { - self.inventory_tag = inventories[ 0 ]; - weapon_model = getweaponmodel( self.inventory_tag ); - self attach( weapon_model, "tag_stowed_hip_rear", 1 ); - } -} - -weapons_get_dvar_int( dvar, def ) //checked matches cerberus output -{ - return int( weapons_get_dvar( dvar, def ) ); -} - -weapons_get_dvar( dvar, def ) //checked matches cerberus output -{ - if ( getDvar( dvar ) != "" ) - { - return getDvarFloat( dvar ); - } - else - { - setdvar( dvar, def ); - return def; - } -} - -player_is_driver() //checked matches cerberus output -{ - if ( !isalive( self ) ) - { - return 0; - } - if ( self isremotecontrolling() ) - { - return 0; - } - vehicle = self getvehicleoccupied(); - if ( isDefined( vehicle ) ) - { - seat = vehicle getoccupantseat( self ); - if ( isDefined( seat ) && seat == 0 ) - { - return 1; - } - } - return 0; -} - -loadout_get_class_num() //checked matches cerberus output -{ - /* -/# - assert( isplayer( self ) ); -#/ -/# - assert( isDefined( self.class ) ); -#/ - */ - if ( isDefined( level.classtoclassnum[ self.class ] ) ) - { - return level.classtoclassnum[ self.class ]; - } - class_num = int( self.class[ self.class.size - 1 ] ) - 1; - if ( class_num == -1 ) - { - class_num = 9; - } - return class_num; -} - -loadout_get_offhand_weapon( stat ) //checked matches cerberus output -{ - if ( isDefined( level.givecustomloadout ) ) - { - return "weapon_null_mp"; - } - /* -/# - assert( isDefined( self.class_num ) ); -#/ - */ - if ( isDefined( self.class_num ) ) - { - index = self maps/mp/gametypes_zm/_class::getloadoutitemfromddlstats( self.class_num, stat ); - if ( isDefined( level.tbl_weaponids[ index ] ) && isDefined( level.tbl_weaponids[ index ][ "reference" ] ) ) - { - return level.tbl_weaponids[ index ][ "reference" ] + "_mp"; - } - } - return "weapon_null_mp"; -} - -loadout_get_offhand_count( stat ) //checked matches cerberus output -{ - count = 0; - if ( isDefined( level.givecustomloadout ) ) - { - return 0; - } - /* -/# - assert( isDefined( self.class_num ) ); -#/ - */ - if ( isDefined( self.class_num ) ) - { - count = self maps/mp/gametypes_zm/_class::getloadoutitemfromddlstats( self.class_num, stat ); - } - return count; -} - -scavenger_think() //checked partially changed to match cerberus output did not use for loops see github for more info -{ - self endon( "death" ); - self waittill( "scavenger", player ); - primary_weapons = player getweaponslistprimaries(); - offhand_weapons_and_alts = array_exclude( player getweaponslist( 1 ), primary_weapons ); - arrayremovevalue( offhand_weapons_and_alts, "knife_mp" ); - offhand_weapons_and_alts = array_reverse( offhand_weapons_and_alts ); - player playsound( "fly_equipment_pickup_npc" ); - player playlocalsound( "fly_equipment_pickup_plr" ); - player.scavenger_icon.alpha = 1; - player.scavenger_icon fadeovertime( 2,5 ); - player.scavenger_icon.alpha = 0; - loadout_primary = player loadout_get_offhand_weapon( "primarygrenade" ); - loadout_primary_count = player loadout_get_offhand_count( "primarygrenadecount" ); - loadout_secondary = player loadout_get_offhand_weapon( "specialgrenade" ); - loadout_secondary_count = player loadout_get_offhand_count( "specialgrenadeCount" ); - i = 0; - while ( i < offhand_weapons_and_alts.size ) - { - weapon = offhand_weapons_and_alts[ i ]; - if ( ishackweapon( weapon ) ) - { - i++; - continue; - } - switch ( weapon ) - { - case "satchel_charge_mp": - if ( player maps/mp/gametypes_zm/_weaponobjects::anyobjectsinworld( weapon ) ) - { - break; - } - case "bouncingbetty_mp": - case "claymore_mp": - case "frag_grenade_mp": - case "hatchet_mp": - case "sticky_grenade_mp": - if ( isDefined( player.grenadetypeprimarycount ) && player.grenadetypeprimarycount < 1 ) - { - break; - } - case "concussion_grenade_mp": - case "emp_grenade_mp": - case "flash_grenade_mp": - case "nightingale_mp": - case "pda_hack_mp": - case "proximity_grenade_mp": - case "sensor_grenade_mp": - case "tabun_gas_mp": - case "trophy_system_mp": - case "willy_pete_mp": - if ( isDefined( player.grenadetypesecondarycount ) && player.grenadetypesecondarycount < 1 ) - { - break; - } - maxammo = weaponmaxammo( weapon ); - stock = player getweaponammostock( weapon ); - if ( isDefined( level.customloadoutscavenge ) ) - { - maxammo = self [[ level.customloadoutscavenge ]]( weapon ); - } - else if ( weapon == loadout_primary ) - { - maxammo = loadout_primary_count; - } - else if ( weapon == loadout_secondary ) - { - maxammo = loadout_secondary_count; - } - if ( stock < maxammo ) - { - ammo = stock + 1; - if ( ammo > maxammo ) - { - ammo = maxammo; - } - player setweaponammostock( weapon, ammo ); - player.scavenged = 1; - player thread maps/mp/_challenges::scavengedgrenade(); - } - break; - } - i++; - } - i = 0; - while ( i < primary_weapons.size ) - { - weapon = primary_weapons[ i ]; - if ( ishackweapon( weapon ) || weapon == "kniferang_mp" ) - { - i++; - continue; - } - stock = player getweaponammostock( weapon ); - start = player getfractionstartammo( weapon ); - clip = weaponclipsize( weapon ); - clip *= getdvarfloatdefault( "scavenger_clip_multiplier", 1 ); - clip = int( clip ); - maxammo = weaponmaxammo( weapon ); - if ( stock < ( maxammo - clip ) ) - { - ammo = stock + clip; - player setweaponammostock( weapon, ammo ); - player.scavenged = 1; - exit_early = 1; - i++; - continue; - } - player setweaponammostock( weapon, maxammo ); - player.scavenged = 1; - exit_early = 1; - i++; - } -} - -scavenger_hud_create() //checked matches cerberus output -{ - if ( level.wagermatch ) - { - return; - } - self.scavenger_icon = newclienthudelem( self ); - self.scavenger_icon.horzalign = "center"; - self.scavenger_icon.vertalign = "middle"; - self.scavenger_icon.alpha = 0; - width = 48; - height = 24; - if ( level.splitscreen ) - { - width = int( width * 0.5 ); - height = int( height * 0.5 ); - } - self.scavenger_icon.x = ( width * -1 ) / 2; - self.scavenger_icon.y = 16; - self.scavenger_icon setshader( "hud_scavenger_pickup", width, height ); -} - -dropscavengerfordeath( attacker ) //checked matches cerberus output -{ - if ( sessionmodeiszombiesgame() ) - { - return; - } - if ( level.wagermatch ) - { - return; - } - if ( !isDefined( attacker ) ) - { - return; - } - if ( attacker == self ) - { - return; - } - if ( level.gametype == "hack" ) - { - item = self dropscavengeritem( "scavenger_item_hack_mp" ); - } - else if ( isplayer( attacker ) && attacker hasperk( "specialty_scavenger" ) ) - { - item = self dropscavengeritem( "scavenger_item_mp" ); - } - else - { - return; - } - item thread scavenger_think(); -} - -addlimitedweapon( weapon_name, owner, num_drops ) //checked matches cerberus output -{ - limited_info = spawnstruct(); - limited_info.weapon = weapon_name; - limited_info.drops = num_drops; - owner.limited_info = limited_info; -} - -shoulddroplimitedweapon( weapon_name, owner ) //checked matches cerberus output -{ - limited_info = owner.limited_info; - if ( !isDefined( limited_info ) ) - { - return 1; - } - if ( limited_info.weapon != weapon_name ) - { - return 1; - } - if ( limited_info.drops <= 0 ) - { - return 0; - } - return 1; -} - -droplimitedweapon( weapon_name, owner, item ) //checked matches cerberus output -{ - limited_info = owner.limited_info; - if ( !isDefined( limited_info ) ) - { - return; - } - if ( limited_info.weapon != weapon_name ) - { - return; - } - limited_info.drops -= 1; - owner.limited_info = undefined; - item thread limitedpickup( limited_info ); -} - -limitedpickup( limited_info ) //checked matches cerberus output -{ - self endon( "death" ); - self waittill( "trigger", player, item ); - if ( !isDefined( item ) ) - { - return; - } - player.limited_info = limited_info; -} - - diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_zm_gametype.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/_zm_gametype.gsc deleted file mode 100644 index f2f6fb0..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/_zm_gametype.gsc +++ /dev/null @@ -1,2010 +0,0 @@ -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm_pers_upgrades_functions; -#include maps/mp/zombies/_zm_blockers; -#include maps/mp/gametypes_zm/_spawning; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/gametypes_zm/_hud; -#include maps/mp/zombies/_zm_audio_announcer; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/gametypes_zm/_globallogic_ui; -#include maps/mp/gametypes_zm/_hud_message; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/gametypes_zm/_globallogic_defaults; -#include maps/mp/gametypes_zm/_globallogic_spawn; -#include maps/mp/gametypes_zm/_gameobjects; -#include maps/mp/gametypes_zm/_weapons; -#include maps/mp/gametypes_zm/_callbacksetup; -#include maps/mp/gametypes_zm/_globallogic; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; - -main() //checked matches cerberus output -{ - maps/mp/gametypes_zm/_globallogic::init(); - maps/mp/gametypes_zm/_callbacksetup::setupcallbacks(); - globallogic_setupdefault_zombiecallbacks(); - menu_init(); - registerroundlimit( 1, 1 ); - registertimelimit( 0, 0 ); - registerscorelimit( 0, 0 ); - registerroundwinlimit( 0, 0 ); - registernumlives( 1, 1 ); - maps/mp/gametypes_zm/_weapons::registergrenadelauncherduddvar( level.gametype, 10, 0, 1440 ); - maps/mp/gametypes_zm/_weapons::registerthrowngrenadeduddvar( level.gametype, 0, 0, 1440 ); - maps/mp/gametypes_zm/_weapons::registerkillstreakdelay( level.gametype, 0, 0, 1440 ); - maps/mp/gametypes_zm/_globallogic::registerfriendlyfiredelay( level.gametype, 15, 0, 1440 ); - level.takelivesondeath = 1; - level.teambased = 1; - level.disableprematchmessages = 1; - level.disablemomentum = 1; - level.overrideteamscore = 0; - level.overrideplayerscore = 0; - level.displayhalftimetext = 0; - level.displayroundendtext = 0; - level.allowannouncer = 0; - level.endgameonscorelimit = 0; - level.endgameontimelimit = 0; - level.resetplayerscoreeveryround = 1; - level.doprematch = 0; - level.nopersistence = 1; - level.scoreroundbased = 0; - level.forceautoassign = 1; - level.dontshowendreason = 1; - level.forceallallies = 0; - level.allow_teamchange = 0; - setdvar( "scr_disable_team_selection", 1 ); - makedvarserverinfo( "scr_disable_team_selection", 1 ); - setmatchflag( "hud_zombie", 1 ); - setdvar( "scr_disable_weapondrop", 1 ); - setdvar( "scr_xpscale", 0 ); - level.onstartgametype = ::onstartgametype; - level.onspawnplayer = ::blank; - level.onspawnplayerunified = ::onspawnplayerunified; - level.onroundendgame = ::onroundendgame; - level.mayspawn = ::mayspawn; - set_game_var( "ZM_roundLimit", 1 ); - set_game_var( "ZM_scoreLimit", 1 ); - set_game_var( "_team1_num", 0 ); - set_game_var( "_team2_num", 0 ); - map_name = level.script; - mode = getDvar( "ui_gametype" ); - if ( !isDefined( mode ) && isDefined( level.default_game_mode ) || mode == "" && isDefined( level.default_game_mode ) ) - { - mode = level.default_game_mode; - } - set_gamemode_var_once( "mode", mode ); - set_game_var_once( "side_selection", 1 ); - location = getDvar( "ui_zm_mapstartlocation" ); - if ( location == "" && isDefined( level.default_start_location ) ) - { - location = level.default_start_location; - } - set_gamemode_var_once( "location", location ); - set_gamemode_var_once( "randomize_mode", getDvarInt( "zm_rand_mode" ) ); - set_gamemode_var_once( "randomize_location", getDvarInt( "zm_rand_loc" ) ); - set_gamemode_var_once( "team_1_score", 0 ); - set_gamemode_var_once( "team_2_score", 0 ); - set_gamemode_var_once( "current_round", 0 ); - set_gamemode_var_once( "rules_read", 0 ); - set_game_var_once( "switchedsides", 0 ); - gametype = getDvar( "ui_gametype" ); - game[ "dialog" ][ "gametype" ] = gametype + "_start"; - game[ "dialog" ][ "gametype_hardcore" ] = gametype + "_start"; - game[ "dialog" ][ "offense_obj" ] = "generic_boost"; - game[ "dialog" ][ "defense_obj" ] = "generic_boost"; - set_gamemode_var( "pre_init_zombie_spawn_func", undefined ); - set_gamemode_var( "post_init_zombie_spawn_func", undefined ); - set_gamemode_var( "match_end_notify", undefined ); - set_gamemode_var( "match_end_func", undefined ); - setscoreboardcolumns( "score", "kills", "downs", "revives", "headshots" ); - onplayerconnect_callback( ::onplayerconnect_check_for_hotjoin ); -} - -game_objects_allowed( mode, location ) //checked partially changed to match cerberus output changed at own discretion -{ - allowed[ 0 ] = mode; - entities = getentarray(); - i = 0; - while ( i < entities.size ) - { - if ( isDefined( entities[ i ].script_gameobjectname ) ) - { - isallowed = maps/mp/gametypes_zm/_gameobjects::entity_is_allowed( entities[ i ], allowed ); - isvalidlocation = maps/mp/gametypes_zm/_gameobjects::location_is_allowed( entities[ i ], location ); - if ( !isallowed || !isvalidlocation && !is_classic() ) - { - if ( isDefined( entities[ i ].spawnflags ) && entities[ i ].spawnflags == 1 ) - { - if ( isDefined( entities[ i ].classname ) && entities[ i ].classname != "trigger_multiple" ) - { - entities[ i ] connectpaths(); - } - } - entities[ i ] delete(); - i++; - continue; - } - if ( isDefined( entities[ i ].script_vector ) ) - { - entities[ i ] moveto( entities[ i ].origin + entities[ i ].script_vector, 0.05 ); - entities[ i ] waittill( "movedone" ); - if ( isDefined( entities[ i ].spawnflags ) && entities[ i ].spawnflags == 1 ) - { - entities[ i ] disconnectpaths(); - } - i++; - continue; - } - if ( isDefined( entities[ i ].spawnflags ) && entities[ i ].spawnflags == 1 ) - { - if ( isDefined( entities[ i ].classname ) && entities[ i ].classname != "trigger_multiple" ) - { - entities[ i ] connectpaths(); - } - } - } - i++; - } -} - -post_init_gametype() //checked matches cerberus output -{ - if ( isDefined( level.gamemode_map_postinit ) ) - { - if ( isDefined( level.gamemode_map_postinit[ level.scr_zm_ui_gametype ] ) ) - { - [[ level.gamemode_map_postinit[ level.scr_zm_ui_gametype ] ]](); - } - } -} - -post_gametype_main( mode ) //checked matches cerberus output -{ - set_game_var( "ZM_roundWinLimit", get_game_var( "ZM_roundLimit" ) * 0.5 ); - level.roundlimit = get_game_var( "ZM_roundLimit" ); - if ( isDefined( level.gamemode_map_preinit ) ) - { - if ( isDefined( level.gamemode_map_preinit[ mode ] ) ) - { - [[ level.gamemode_map_preinit[ mode ] ]](); - } - } -} - -globallogic_setupdefault_zombiecallbacks() //checked matches cerberus output -{ - level.spawnplayer = maps/mp/gametypes_zm/_globallogic_spawn::spawnplayer; - level.spawnplayerprediction = maps/mp/gametypes_zm/_globallogic_spawn::spawnplayerprediction; - level.spawnclient = maps/mp/gametypes_zm/_globallogic_spawn::spawnclient; - level.spawnspectator = maps/mp/gametypes_zm/_globallogic_spawn::spawnspectator; - level.spawnintermission = maps/mp/gametypes_zm/_globallogic_spawn::spawnintermission; - level.onplayerscore = ::blank; - level.onteamscore = ::blank; - - //doesn't exist in any dump or any other script no idea what its trying to override to - level.wavespawntimer = maps/mp/gametypes_zm/_globallogic::wavespawntimer; - level.onspawnplayer = ::blank; - level.onspawnplayerunified = ::blank; - level.onspawnspectator = ::onspawnspectator; - level.onspawnintermission = ::onspawnintermission; - level.onrespawndelay = ::blank; - level.onforfeit = ::blank; - level.ontimelimit = ::blank; - level.onscorelimit = ::blank; - level.ondeadevent = ::ondeadevent; - level.ononeleftevent = ::blank; - level.giveteamscore = ::blank; - level.giveplayerscore = ::blank; - level.gettimelimit = maps/mp/gametypes_zm/_globallogic_defaults::default_gettimelimit; - level.getteamkillpenalty = ::blank; - level.getteamkillscore = ::blank; - level.iskillboosting = ::blank; - level._setteamscore = maps/mp/gametypes_zm/_globallogic_score::_setteamscore; - level._setplayerscore = ::blank; - level._getteamscore = ::blank; - level._getplayerscore = ::blank; - level.onprecachegametype = ::blank; - level.onstartgametype = ::blank; - level.onplayerconnect = ::blank; - level.onplayerdisconnect = ::onplayerdisconnect; - level.onplayerdamage = ::blank; - level.onplayerkilled = ::blank; - level.onplayerkilledextraunthreadedcbs = []; - level.onteamoutcomenotify = maps/mp/gametypes_zm/_hud_message::teamoutcomenotifyzombie; - level.onoutcomenotify = ::blank; - level.onteamwageroutcomenotify = ::blank; - level.onwageroutcomenotify = ::blank; - level.onendgame = ::onendgame; - level.onroundendgame = ::blank; - level.onmedalawarded = ::blank; - level.autoassign = maps/mp/gametypes_zm/_globallogic_ui::menuautoassign; - level.spectator = maps/mp/gametypes_zm/_globallogic_ui::menuspectator; - level.class = maps/mp/gametypes_zm/_globallogic_ui::menuclass; - level.allies = ::menuallieszombies; - level.teammenu = maps/mp/gametypes_zm/_globallogic_ui::menuteam; - level.callbackactorkilled = ::blank; - level.callbackvehicledamage = ::blank; -} - -setup_standard_objects( location ) //checked partially used cerberus output -{ - structs = getstructarray( "game_mode_object" ); - i = 0; - while ( i < structs.size ) - { - if ( isdefined( structs[ i ].script_noteworthy ) && structs[ i ].script_noteworthy != location ) - { - i++; - continue; - } - if ( isdefined( structs[ i ].script_string ) ) - { - keep = 0; - tokens = strtok( structs[ i ].script_string, " " ); - foreach ( token in tokens ) - { - if ( token == level.scr_zm_ui_gametype && token != "zstandard" ) - { - keep = 1; - continue; - } - else if ( token == "zstandard" ) - { - keep = 1; - } - } - if ( !keep ) - { - i++; - continue; - } - } - barricade = spawn( "script_model", structs[ i ].origin ); - barricade.angles = structs[ i ].angles; - barricade setmodel( structs[ i ].script_parameters ); - i++; - } - objects = getentarray(); - i = 0; - while ( i < objects.size ) - { - if ( !objects[ i ] is_survival_object() ) - { - i++; - continue; - } - if ( isdefined( objects[ i ].spawnflags ) && objects[ i ].spawnflags == 1 && objects[ i ].classname != "trigger_multiple" ) - { - objects[ i ] connectpaths(); - } - objects[ i ] delete(); - i++; - } - if ( isdefined( level._classic_setup_func ) ) - { - [[ level._classic_setup_func ]](); - } -} - - -is_survival_object() //checked changed to cerberus output -{ - if ( !isdefined( self.script_parameters ) ) - { - return 0; - } - tokens = strtok( self.script_parameters, " " ); - remove = 0; - foreach ( token in tokens ) - { - if ( token == "survival_remove" ) - { - remove = 1; - } - } - return remove; -} - -game_module_player_damage_callback( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) //checked partially changed output to cerberus output -{ - self.last_damage_from_zombie_or_player = 0; - if ( isDefined( eattacker ) ) - { - if ( isplayer( eattacker ) && eattacker == self ) - { - return; - } - if ( isDefined( eattacker.is_zombie ) || eattacker.is_zombie && isplayer( eattacker ) ) - { - self.last_damage_from_zombie_or_player = 1; - } - } - if ( is_true( self._being_shellshocked ) || self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - return; - } - if ( isplayer( eattacker ) && isDefined( eattacker._encounters_team ) && eattacker._encounters_team != self._encounters_team ) - { - if ( is_true( self.hasriotshield ) && isDefined( vdir ) ) - { - if ( is_true( self.hasriotshieldequipped ) ) - { - if ( self maps/mp/zombies/_zm::player_shield_facing_attacker( vdir, 0.2 ) && isDefined( self.player_shield_apply_damage ) ) - { - return; - } - } - else if ( !isdefined( self.riotshieldentity ) ) - { - if ( !self maps/mp/zombies/_zm::player_shield_facing_attacker( vdir, -0.2 ) && isdefined( self.player_shield_apply_damage ) ) - { - return; - } - } - } - if ( isDefined( level._game_module_player_damage_grief_callback ) ) - { - self [[ level._game_module_player_damage_grief_callback ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); - } - if ( isDefined( level._effect[ "butterflies" ] ) ) - { - if ( isDefined( sweapon ) && weapontype( sweapon ) == "grenade" ) - { - playfx( level._effect[ "butterflies" ], self.origin + vectorScale( ( 1, 1, 1 ), 40 ) ); - } - else - { - playfx( level._effect[ "butterflies" ], vpoint, vdir ); - } - } - self thread do_game_mode_shellshock(); - self playsound( "zmb_player_hit_ding" ); - } -} - -do_game_mode_shellshock() //checked matched cerberus output -{ - self endon( "disconnect" ); - self._being_shellshocked = 1; - self shellshock( "grief_stab_zm", 0.75 ); - wait 0.75; - self._being_shellshocked = 0; -} - -add_map_gamemode( mode, preinit_func, precache_func, main_func ) //checked matches cerberus output -{ - if ( !isDefined( level.gamemode_map_location_init ) ) - { - level.gamemode_map_location_init = []; - } - if ( !isDefined( level.gamemode_map_location_main ) ) - { - level.gamemode_map_location_main = []; - } - if ( !isDefined( level.gamemode_map_preinit ) ) - { - level.gamemode_map_preinit = []; - } - if ( !isDefined( level.gamemode_map_postinit ) ) - { - level.gamemode_map_postinit = []; - } - if ( !isDefined( level.gamemode_map_precache ) ) - { - level.gamemode_map_precache = []; - } - if ( !isDefined( level.gamemode_map_main ) ) - { - level.gamemode_map_main = []; - } - level.gamemode_map_preinit[ mode ] = preinit_func; - level.gamemode_map_main[ mode ] = main_func; - level.gamemode_map_precache[ mode ] = precache_func; - level.gamemode_map_location_precache[ mode ] = []; - level.gamemode_map_location_main[ mode ] = []; -} - -add_map_location_gamemode( mode, location, precache_func, main_func ) //checked matches cerberus output -{ - if ( !isDefined( level.gamemode_map_location_precache[ mode ] ) ) - { - /* -/# - println( "*** ERROR : " + mode + " has not been added to the map using add_map_gamemode." ); -#/ - */ - return; - } - level.gamemode_map_location_precache[ mode ][ location ] = precache_func; - level.gamemode_map_location_main[ mode ][ location ] = main_func; -} - -rungametypeprecache( gamemode ) //checked matches cerberus output -{ - if ( !isDefined( level.gamemode_map_location_main ) || !isDefined( level.gamemode_map_location_main[ gamemode ] ) ) - { - return; - } - if ( isDefined( level.gamemode_map_precache ) ) - { - if ( isDefined( level.gamemode_map_precache[ gamemode ] ) ) - { - [[ level.gamemode_map_precache[ gamemode ] ]](); - } - } - if ( isDefined( level.gamemode_map_location_precache ) ) - { - if ( isDefined( level.gamemode_map_location_precache[ gamemode ] ) ) - { - loc = getDvar( "ui_zm_mapstartlocation" ); - if ( loc == "" && isDefined( level.default_start_location ) ) - { - loc = level.default_start_location; - } - if ( isDefined( level.gamemode_map_location_precache[ gamemode ][ loc ] ) ) - { - [[ level.gamemode_map_location_precache[ gamemode ][ loc ] ]](); - } - } - } - if ( isDefined( level.precachecustomcharacters ) ) - { - self [[ level.precachecustomcharacters ]](); - } -} - -rungametypemain( gamemode, mode_main_func, use_round_logic ) //checked matches cerberus output -{ - if ( !isDefined( level.gamemode_map_location_main ) || !isDefined( level.gamemode_map_location_main[ gamemode ] ) ) - { - return; - } - level thread game_objects_allowed( get_gamemode_var( "mode" ), get_gamemode_var( "location" ) ); - if ( isDefined( level.gamemode_map_main ) ) - { - if ( isDefined( level.gamemode_map_main[ gamemode ] ) ) - { - level thread [[ level.gamemode_map_main[ gamemode ] ]](); - } - } - if ( isDefined( level.gamemode_map_location_main ) ) - { - if ( isDefined( level.gamemode_map_location_main[ gamemode ] ) ) - { - loc = getDvar( "ui_zm_mapstartlocation" ); - if ( loc == "" && isDefined( level.default_start_location ) ) - { - loc = level.default_start_location; - } - if ( isDefined( level.gamemode_map_location_main[ gamemode ][ loc ] ) ) - { - level thread [[ level.gamemode_map_location_main[ gamemode ][ loc ] ]](); - } - } - } - if ( isDefined( mode_main_func ) ) - { - if ( is_true( use_round_logic ) ) - { - level thread round_logic( mode_main_func ); - } - else - { - level thread non_round_logic( mode_main_func ); - } - } - level thread game_end_func(); -} - - -round_logic( mode_logic_func ) //checked matches cerberus output -{ - level.skit_vox_override = 1; - if ( isDefined( level.flag[ "start_zombie_round_logic" ] ) ) - { - flag_wait( "start_zombie_round_logic" ); - } - flag_wait( "start_encounters_match_logic" ); - if ( !isDefined( game[ "gamemode_match" ][ "rounds" ] ) ) - { - game[ "gamemode_match" ][ "rounds" ] = []; - } - set_gamemode_var_once( "current_round", 0 ); - set_gamemode_var_once( "team_1_score", 0 ); - set_gamemode_var_once( "team_2_score", 0 ); - if ( is_true( is_encounter() ) ) - { - [[ level._setteamscore ]]( "allies", get_gamemode_var( "team_2_score" ) ); - [[ level._setteamscore ]]( "axis", get_gamemode_var( "team_1_score" ) ); - } - flag_set( "pregame" ); - waittillframeend; - level.gameended = 0; - cur_round = get_gamemode_var( "current_round" ); - set_gamemode_var( "current_round", cur_round + 1 ); - game[ "gamemode_match" ][ "rounds" ][ cur_round ] = spawnstruct(); - game[ "gamemode_match" ][ "rounds" ][ cur_round ].mode = getDvar( "ui_gametype" ); - level thread [[ mode_logic_func ]](); - flag_wait( "start_encounters_match_logic" ); - level.gamestarttime = getTime(); - level.gamelengthtime = undefined; - level notify( "clear_hud_elems" ); - level waittill( "game_module_ended", winner ); - game[ "gamemode_match" ][ "rounds" ][ cur_round ].winner = winner; - level thread kill_all_zombies(); - level.gameendtime = getTime(); - level.gamelengthtime = level.gameendtime - level.gamestarttime; - level.gameended = 1; - if ( winner == "A" ) - { - score = get_gamemode_var( "team_1_score" ); - set_gamemode_var( "team_1_score", score + 1 ); - } - else - { - score = get_gamemode_var( "team_2_score" ); - set_gamemode_var( "team_2_score", score + 1 ); - } - if ( is_true( is_encounter() ) ) - { - [[ level._setteamscore ]]( "allies", get_gamemode_var( "team_2_score" ) ); - [[ level._setteamscore ]]( "axis", get_gamemode_var( "team_1_score" ) ); - if ( get_gamemode_var( "team_1_score" ) == get_gamemode_var( "team_2_score" ) ) - { - level thread maps/mp/zombies/_zm_audio::zmbvoxcrowdonteam( "win" ); - level thread maps/mp/zombies/_zm_audio_announcer::announceroundwinner( "tied" ); - } - else - { - level thread maps/mp/zombies/_zm_audio::zmbvoxcrowdonteam( "win", winner, "lose" ); - level thread maps/mp/zombies/_zm_audio_announcer::announceroundwinner( winner ); - } - } - level thread delete_corpses(); - level delay_thread( 5, ::revive_laststand_players ); - level notify( "clear_hud_elems" ); - while ( startnextzmround( winner ) ) - { - level clientnotify( "gme" ); - while ( 1 ) - { - wait 1; - } - } - level.match_is_ending = 1; - if ( is_true( is_encounter() ) ) - { - matchwonteam = ""; - if ( get_gamemode_var( "team_1_score" ) > get_gamemode_var( "team_2_score" ) ) - { - matchwonteam = "A"; - } - else - { - matchwonteam = "B"; - } - level thread maps/mp/zombies/_zm_audio::zmbvoxcrowdonteam( "win", matchwonteam, "lose" ); - level thread maps/mp/zombies/_zm_audio_announcer::announcematchwinner( matchwonteam ); - level create_final_score(); - track_encounters_win_stats( matchwonteam ); - } - maps/mp/zombies/_zm::intermission(); - level.can_revive_game_module = undefined; - level notify( "end_game" ); -} - -end_rounds_early( winner ) //checked matches cerberus output -{ - level.forcedend = 1; - cur_round = get_gamemode_var( "current_round" ); - set_gamemode_var( "ZM_roundLimit", cur_round ); - if ( isDefined( winner ) ) - { - level notify( "game_module_ended", winner ); - } - else - { - level notify( "end_game" ); - } -} - - -checkzmroundswitch() //checked matches cerberus output -{ - if ( !isDefined( level.zm_roundswitch ) || !level.zm_roundswitch ) - { - return 0; - } - - return 1; - return 0; -} - -create_hud_scoreboard( duration, fade ) //checked matches cerberus output -{ - level endon( "end_game" ); - level thread module_hud_full_screen_overlay(); - level thread module_hud_team_1_score( duration, fade ); - level thread module_hud_team_2_score( duration, fade ); - level thread module_hud_round_num( duration, fade ); - respawn_spectators_and_freeze_players(); - waittill_any_or_timeout( duration, "clear_hud_elems" ); -} - -respawn_spectators_and_freeze_players() //checked changed to match cerberus output -{ - players = get_players(); - foreach ( player in players ) - { - if ( player.sessionstate == "spectator" ) - { - if ( isdefined( player.spectate_hud ) ) - { - player.spectate_hud destroy(); - } - player [[ level.spawnplayer ]](); - } - player freeze_player_controls( 1 ); - } -} - -module_hud_team_1_score( duration, fade ) //checked matches cerberus output -{ - level._encounters_score_1 = newhudelem(); - level._encounters_score_1.x = 0; - level._encounters_score_1.y = 260; - level._encounters_score_1.alignx = "center"; - level._encounters_score_1.horzalign = "center"; - level._encounters_score_1.vertalign = "top"; - level._encounters_score_1.font = "default"; - level._encounters_score_1.fontscale = 2.3; - level._encounters_score_1.color = ( 1, 1, 1 ); - level._encounters_score_1.foreground = 1; - level._encounters_score_1 settext( "Team CIA: " + get_gamemode_var( "team_1_score" ) ); - level._encounters_score_1.alpha = 0; - level._encounters_score_1.sort = 11; - level._encounters_score_1 fadeovertime( fade ); - level._encounters_score_1.alpha = 1; - level waittill_any_or_timeout( duration, "clear_hud_elems" ); - level._encounters_score_1 fadeovertime( fade ); - level._encounters_score_1.alpha = 0; - wait fade; - level._encounters_score_1 destroy(); -} - -module_hud_team_2_score( duration, fade ) //checked matches cerberus output -{ - level._encounters_score_2 = newhudelem(); - level._encounters_score_2.x = 0; - level._encounters_score_2.y = 290; - level._encounters_score_2.alignx = "center"; - level._encounters_score_2.horzalign = "center"; - level._encounters_score_2.vertalign = "top"; - level._encounters_score_2.font = "default"; - level._encounters_score_2.fontscale = 2.3; - level._encounters_score_2.color = ( 1, 1, 1 ); - level._encounters_score_2.foreground = 1; - level._encounters_score_2 settext( "Team CDC: " + get_gamemode_var( "team_2_score" ) ); - level._encounters_score_2.alpha = 0; - level._encounters_score_2.sort = 12; - level._encounters_score_2 fadeovertime( fade ); - level._encounters_score_2.alpha = 1; - level waittill_any_or_timeout( duration, "clear_hud_elems" ); - level._encounters_score_2 fadeovertime( fade ); - level._encounters_score_2.alpha = 0; - wait fade; - level._encounters_score_2 destroy(); -} - -module_hud_round_num( duration, fade ) //checked matches cerberus output -{ - level._encounters_round_num = newhudelem(); - level._encounters_round_num.x = 0; - level._encounters_round_num.y = 60; - level._encounters_round_num.alignx = "center"; - level._encounters_round_num.horzalign = "center"; - level._encounters_round_num.vertalign = "top"; - level._encounters_round_num.font = "default"; - level._encounters_round_num.fontscale = 2.3; - level._encounters_round_num.color = ( 1, 1, 1 ); - level._encounters_round_num.foreground = 1; - level._encounters_round_num settext( "Round: ^5" + get_gamemode_var( "current_round" ) + 1 + " / " + get_game_var( "ZM_roundLimit" ) ); - level._encounters_round_num.alpha = 0; - level._encounters_round_num.sort = 13; - level._encounters_round_num fadeovertime( fade ); - level._encounters_round_num.alpha = 1; - level waittill_any_or_timeout( duration, "clear_hud_elems" ); - level._encounters_round_num fadeovertime( fade ); - level._encounters_round_num.alpha = 0; - wait fade; - level._encounters_round_num destroy(); -} - -createtimer() //checked matches cerberus output -{ - flag_waitopen( "pregame" ); - elem = newhudelem(); - elem.hidewheninmenu = 1; - elem.horzalign = "center"; - elem.vertalign = "top"; - elem.alignx = "center"; - elem.aligny = "middle"; - elem.x = 0; - elem.y = 0; - elem.foreground = 1; - elem.font = "default"; - elem.fontscale = 1.5; - elem.color = ( 1, 1, 1 ); - elem.alpha = 2; - elem thread maps/mp/gametypes_zm/_hud::fontpulseinit(); - if ( is_true( level.timercountdown ) ) - { - elem settenthstimer( level.timelimit * 60 ); - } - else - { - elem settenthstimerup( 0.1 ); - } - level.game_module_timer = elem; - level waittill( "game_module_ended" ); - elem destroy(); -} - -revive_laststand_players() //checked changed to match cerberus output -{ - if ( is_true( level.match_is_ending ) ) - { - return; - } - players = get_players(); - foreach ( player in players ) - { - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - player thread maps/mp/zombies/_zm_laststand::auto_revive( player ); - } - } -} - -team_icon_winner( elem ) //checked matches cerberus output -{ - og_x = elem.x; - og_y = elem.y; - elem.sort = 1; - elem scaleovertime( 0.75, 150, 150 ); - elem moveovertime( 0.75 ); - elem.horzalign = "center"; - elem.vertalign = "middle"; - elem.x = 0; - elem.y = 0; - elem.alpha = 0.7; - wait 0.75; -} - -delete_corpses() //checked changed to match cerberus output -{ - corpses = getcorpsearray(); - for(x = 0; x < corpses.size; x++) - { - corpses[x] delete(); - } -} - -track_encounters_win_stats( matchwonteam ) //checked did not change to match cerberus output -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ]._encounters_team == matchwonteam ) - { - players[ i ] maps/mp/zombies/_zm_stats::increment_client_stat( "wins" ); - players[ i ] maps/mp/zombies/_zm_stats::add_client_stat( "losses", -1 ); - players[ i ] adddstat( "skill_rating", 1 ); - players[ i ] setdstat( "skill_variance", 1 ); - if ( gamemodeismode( level.gamemode_public_match ) ) - { - players[ i ] maps/mp/zombies/_zm_stats::add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "wins", 1 ); - players[ i ] maps/mp/zombies/_zm_stats::add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "losses", -1 ); - } - } - else - { - players[ i ] setdstat( "skill_rating", 0 ); - players[ i ] setdstat( "skill_variance", 1 ); - } - players[ i ] updatestatratio( "wlratio", "wins", "losses" ); - i++; - } -} - -non_round_logic( mode_logic_func ) //checked matches cerberus output -{ - level thread [[ mode_logic_func ]](); -} - -game_end_func() //checked matches cerberus output -{ - if ( !isDefined( get_gamemode_var( "match_end_notify" ) ) && !isDefined( get_gamemode_var( "match_end_func" ) ) ) - { - return; - } - level waittill( get_gamemode_var( "match_end_notify" ), winning_team ); - level thread [[ get_gamemode_var( "match_end_func" ) ]]( winning_team ); -} - -setup_classic_gametype() //checked did not change to match cerberus output -{ - ents = getentarray(); - i = 0; - while ( i < ents.size ) - { - if ( isDefined( ents[ i ].script_parameters ) ) - { - parameters = strtok( ents[ i ].script_parameters, " " ); - should_remove = 0; - foreach ( parm in parameters ) - { - if ( parm == "survival_remove" ) - { - should_remove = 1; - } - } - if ( should_remove ) - { - ents[ i ] delete(); - } - } - i++; - } - structs = getstructarray( "game_mode_object" ); - i = 0; - while ( i < structs.size ) - { - if ( !isdefined( structs[ i ].script_string ) ) - { - i++; - continue; - } - tokens = strtok( structs[ i ].script_string, " " ); - spawn_object = 0; - foreach ( parm in tokens ) - { - if ( parm == "survival" ) - { - spawn_object = 1; - } - } - if ( !spawn_object ) - { - i++; - continue; - } - barricade = spawn( "script_model", structs[ i ].origin ); - barricade.angles = structs[ i ].angles; - barricade setmodel( structs[ i ].script_parameters ); - i++; - } - unlink_meat_traversal_nodes(); -} - -zclassic_main() //checked matches cerberus output -{ - level thread setup_classic_gametype(); - level thread maps/mp/zombies/_zm::round_start(); -} - -unlink_meat_traversal_nodes() //checked changed to match cerberus output -{ - meat_town_nodes = getnodearray( "meat_town_barrier_traversals", "targetname" ); - meat_tunnel_nodes = getnodearray( "meat_tunnel_barrier_traversals", "targetname" ); - meat_farm_nodes = getnodearray( "meat_farm_barrier_traversals", "targetname" ); - nodes = arraycombine( meat_town_nodes, meat_tunnel_nodes, 1, 0 ); - traversal_nodes = arraycombine( nodes, meat_farm_nodes, 1, 0 ); - foreach ( node in traversal_nodes ) - { - end_node = getnode( node.target, "targetname" ); - unlink_nodes( node, end_node ); - } -} - -canplayersuicide() //checked matches cerberus output -{ - return self hasperk( "specialty_scavenger" ); -} - -onplayerdisconnect() //checked matches cerberus output -{ - if ( isDefined( level.game_mode_custom_onplayerdisconnect ) ) - { - level [[ level.game_mode_custom_onplayerdisconnect ]]( self ); - } - level thread maps/mp/zombies/_zm::check_quickrevive_for_hotjoin( 1 ); - self maps/mp/zombies/_zm_laststand::add_weighted_down(); - level maps/mp/zombies/_zm::checkforalldead( self ); -} - -ondeadevent( team ) //checked matches cerberus output -{ - thread maps/mp/gametypes_zm/_globallogic::endgame( level.zombie_team, "" ); -} - -onspawnintermission() //checked matches cerberus output -{ - spawnpointname = "info_intermission"; - spawnpoints = getentarray( spawnpointname, "classname" ); - if ( spawnpoints.size < 1 ) - { - /* -/# - println( "NO " + spawnpointname + " SPAWNPOINTS IN MAP" ); -#/ - */ - return; - } - spawnpoint = spawnpoints[ randomint( spawnpoints.size ) ]; - if ( isDefined( spawnpoint ) ) - { - self spawn( spawnpoint.origin, spawnpoint.angles ); - } -} - -onspawnspectator( origin, angles ) //checked matches cerberus output -{ -} - -mayspawn() //checked matches cerberus output -{ - if ( isDefined( level.custommayspawnlogic ) ) - { - return self [[ level.custommayspawnlogic ]](); - } - if ( self.pers[ "lives" ] == 0 ) - { - level notify( "player_eliminated" ); - self notify( "player_eliminated" ); - return 0; - } - return 1; -} - -onstartgametype() //checked matches cerberus output -{ - setclientnamemode( "auto_change" ); - level.displayroundendtext = 0; - maps/mp/gametypes_zm/_spawning::create_map_placed_influencers(); - if ( !isoneround() ) - { - level.displayroundendtext = 1; - if ( isscoreroundbased() ) - { - maps/mp/gametypes_zm/_globallogic_score::resetteamscores(); - } - } -} - -module_hud_full_screen_overlay() //checked matches cerberus output -{ - fadetoblack = newhudelem(); - fadetoblack.x = 0; - fadetoblack.y = 0; - fadetoblack.horzalign = "fullscreen"; - fadetoblack.vertalign = "fullscreen"; - fadetoblack setshader( "black", 640, 480 ); - fadetoblack.color = ( 1, 1, 1 ); - fadetoblack.alpha = 1; - fadetoblack.foreground = 1; - fadetoblack.sort = 0; - if ( is_encounter() || getDvar( "ui_gametype" ) == "zcleansed" ) - { - level waittill_any_or_timeout( 25, "start_fullscreen_fade_out" ); - } - else - { - level waittill_any_or_timeout( 25, "start_zombie_round_logic" ); - } - fadetoblack fadeovertime( 2 ); - fadetoblack.alpha = 0; - wait 2.1; - fadetoblack destroy(); -} - -create_final_score() //checked matches cerberus output -{ - level endon( "end_game" ); - level thread module_hud_team_winer_score(); - wait 2; -} - -module_hud_team_winer_score() //checked changed to match cerberus output -{ - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - players[ i ] thread create_module_hud_team_winer_score(); - if ( isDefined( players[ i ]._team_hud ) && isDefined( players[ i ]._team_hud[ "team" ] ) ) - { - players[ i ] thread team_icon_winner( players[ i ]._team_hud[ "team" ] ); - } - if ( isDefined( level.lock_player_on_team_score ) && level.lock_player_on_team_score ) - { - players[ i ] freezecontrols( 1 ); - players[ i ] takeallweapons(); - players[ i ] setclientuivisibilityflag( "hud_visible", 0 ); - players[ i ].sessionstate = "spectator"; - players[ i ].spectatorclient = -1; - players[ i ].maxhealth = players[ i ].health; - players[ i ].shellshocked = 0; - players[ i ].inwater = 0; - players[ i ].friendlydamage = undefined; - players[ i ].hasspawned = 1; - players[ i ].spawntime = getTime(); - players[ i ].afk = 0; - players[ i ] detachall(); - } - } - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "match_over" ); -} - -create_module_hud_team_winer_score() //checked changed to match cerberus output -{ - self._team_winer_score = newclienthudelem( self ); - self._team_winer_score.x = 0; - self._team_winer_score.y = 70; - self._team_winer_score.alignx = "center"; - self._team_winer_score.horzalign = "center"; - self._team_winer_score.vertalign = "middle"; - self._team_winer_score.font = "default"; - self._team_winer_score.fontscale = 15; - self._team_winer_score.color = ( 0, 1, 0 ); - self._team_winer_score.foreground = 1; - if ( self._encounters_team == "B" && get_gamemode_var( "team_2_score" ) > get_gamemode_var( "team_1_score" ) ) - { - self._team_winer_score settext( &"ZOMBIE_MATCH_WON" ); - } - else - { - if ( self._encounters_team == "B" && get_gamemode_var( "team_2_score" ) < get_gamemode_var( "team_1_score" ) ) - { - self._team_winer_score.color = ( 1, 0, 0 ); - self._team_winer_score settext( &"ZOMBIE_MATCH_LOST" ); - } - } - if ( self._encounters_team == "A" && get_gamemode_var( "team_1_score" ) > get_gamemode_var( "team_2_score" ) ) - { - self._team_winer_score settext( &"ZOMBIE_MATCH_WON" ); - } - else - { - if ( self._encounters_team == "A" && get_gamemode_var( "team_1_score" ) < get_gamemode_var( "team_2_score" ) ) - { - self._team_winer_score.color = ( 1, 0, 0 ); - self._team_winer_score settext( &"ZOMBIE_MATCH_LOST" ); - } - } - self._team_winer_score.alpha = 0; - self._team_winer_score.sort = 12; - self._team_winer_score fadeovertime( 0.25 ); - self._team_winer_score.alpha = 1; - wait 2; - self._team_winer_score fadeovertime( 0.25 ); - self._team_winer_score.alpha = 0; - wait 0.25; - self._team_winer_score destroy(); -} - -displayroundend( round_winner ) //checked changed to match cerberus output -{ - players = get_players(); - foreach(player in players) - { - player thread module_hud_round_end( round_winner ); - if ( isdefined( player._team_hud ) && isdefined( player._team_hud[ "team" ] ) ) - { - player thread team_icon_winner( player._team_hud[ "team" ] ); - } - player freeze_player_controls( 1 ); - } - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "round_end" ); - level thread maps/mp/zombies/_zm_audio::zmbvoxcrowdonteam( "clap" ); - level thread play_sound_2d( "zmb_air_horn" ); - wait 2; -} - -module_hud_round_end( round_winner ) //checked changed to match cerberus output -{ - self endon( "disconnect" ); - self._team_winner_round = newclienthudelem( self ); - self._team_winner_round.x = 0; - self._team_winner_round.y = 50; - self._team_winner_round.alignx = "center"; - self._team_winner_round.horzalign = "center"; - self._team_winner_round.vertalign = "middle"; - self._team_winner_round.font = "default"; - self._team_winner_round.fontscale = 15; - self._team_winner_round.color = ( 1, 1, 1 ); - self._team_winner_round.foreground = 1; - if ( self._encounters_team == round_winner ) - { - self._team_winner_round.color = ( 0, 1, 0 ); - self._team_winner_round settext( "YOU WIN" ); - } - else - { - self._team_winner_round.color = ( 1, 0, 0 ); - self._team_winner_round settext( "YOU LOSE" ); - } - self._team_winner_round.alpha = 0; - self._team_winner_round.sort = 12; - self._team_winner_round fadeovertime( 0.25 ); - self._team_winner_round.alpha = 1; - wait 1.5; - self._team_winner_round fadeovertime( 0.25 ); - self._team_winner_round.alpha = 0; - wait 0.25; - self._team_winner_round destroy(); -} - -displayroundswitch() //checked changed to match cerberus output -{ - level._round_changing_sides = newhudelem(); - level._round_changing_sides.x = 0; - level._round_changing_sides.y = 60; - level._round_changing_sides.alignx = "center"; - level._round_changing_sides.horzalign = "center"; - level._round_changing_sides.vertalign = "middle"; - level._round_changing_sides.font = "default"; - level._round_changing_sides.fontscale = 2.3; - level._round_changing_sides.color = ( 1, 1, 1 ); - level._round_changing_sides.foreground = 1; - level._round_changing_sides.sort = 12; - fadetoblack = newhudelem(); - fadetoblack.x = 0; - fadetoblack.y = 0; - fadetoblack.horzalign = "fullscreen"; - fadetoblack.vertalign = "fullscreen"; - fadetoblack setshader( "black", 640, 480 ); - fadetoblack.color = ( 0, 0, 0 ); - fadetoblack.alpha = 1; - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "side_switch" ); - level._round_changing_sides settext( "CHANGING SIDES" ); - level._round_changing_sides fadeovertime( 0.25 ); - level._round_changing_sides.alpha = 1; - wait 1; - fadetoblack fadeovertime( 1 ); - level._round_changing_sides fadeovertime( 0.25 ); - level._round_changing_sides.alpha = 0; - fadetoblack.alpha = 0; - wait 0.25; - level._round_changing_sides destroy(); - fadetoblack destroy(); -} - -module_hud_create_team_name() //checked matches cerberus ouput -{ - if ( !is_encounter() ) - { - return; - } - if ( !isDefined( self._team_hud ) ) - { - self._team_hud = []; - } - if ( isDefined( self._team_hud[ "team" ] ) ) - { - self._team_hud[ "team" ] destroy(); - } - elem = newclienthudelem( self ); - elem.hidewheninmenu = 1; - elem.alignx = "center"; - elem.aligny = "middle"; - elem.horzalign = "center"; - elem.vertalign = "middle"; - elem.x = 0; - elem.y = 0; - if ( isDefined( level.game_module_team_name_override_og_x ) ) - { - elem.og_x = level.game_module_team_name_override_og_x; - } - else - { - elem.og_x = 85; - } - elem.og_y = -40; - elem.foreground = 1; - elem.font = "default"; - elem.color = ( 1, 1, 1 ); - elem.sort = 1; - elem.alpha = 0.7; - elem setshader( game[ "icons" ][ self.team ], 150, 150 ); - self._team_hud[ "team" ] = elem; -} - -nextzmhud( winner ) //checked matches cerberus output -{ - displayroundend( winner ); - create_hud_scoreboard( 1, 0.25 ); - if ( checkzmroundswitch() ) - { - displayroundswitch(); - } -} - -startnextzmround( winner ) //checked matches cerberus output -{ - if ( !isonezmround() ) - { - if ( !waslastzmround() ) - { - nextzmhud( winner ); - setmatchtalkflag( "DeadChatWithDead", level.voip.deadchatwithdead ); - setmatchtalkflag( "DeadChatWithTeam", level.voip.deadchatwithteam ); - setmatchtalkflag( "DeadHearTeamLiving", level.voip.deadhearteamliving ); - setmatchtalkflag( "DeadHearAllLiving", level.voip.deadhearallliving ); - setmatchtalkflag( "EveryoneHearsEveryone", level.voip.everyonehearseveryone ); - setmatchtalkflag( "DeadHearKiller", level.voip.deadhearkiller ); - setmatchtalkflag( "KillersHearVictim", level.voip.killershearvictim ); - game[ "state" ] = "playing"; - level.allowbattlechatter = getgametypesetting( "allowBattleChatter" ); - if ( is_true( level.zm_switchsides_on_roundswitch ) ) - { - set_game_var( "switchedsides", !get_game_var( "switchedsides" ) ); - } - map_restart( 1 ); - return 1; - } - } - return 0; -} - -start_round() //checked changed to match cerberus output -{ - flag_clear( "start_encounters_match_logic" ); - if ( !isDefined( level._module_round_hud ) ) - { - level._module_round_hud = newhudelem(); - level._module_round_hud.x = 0; - level._module_round_hud.y = 70; - level._module_round_hud.alignx = "center"; - level._module_round_hud.horzalign = "center"; - level._module_round_hud.vertalign = "middle"; - level._module_round_hud.font = "default"; - level._module_round_hud.fontscale = 2.3; - level._module_round_hud.color = ( 1, 1, 1 ); - level._module_round_hud.foreground = 1; - level._module_round_hud.sort = 0; - } - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - players[ i ] freeze_player_controls( 1 ); - } - level._module_round_hud.alpha = 1; - label = &"Next Round Starting In ^2"; - level._module_round_hud.label = label; - level._module_round_hud settimer( 3 ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "countdown" ); - level thread maps/mp/zombies/_zm_audio::zmbvoxcrowdonteam( "clap" ); - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "round_start" ); - level notify( "start_fullscreen_fade_out" ); - wait 2; - level._module_round_hud fadeovertime( 1 ); - level._module_round_hud.alpha = 0; - wait 1; - level thread play_sound_2d( "zmb_air_horn" ); - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - players[ i ] freeze_player_controls( 0 ); - players[ i ] sprintuprequired(); - } - flag_set( "start_encounters_match_logic" ); - flag_clear( "pregame" ); - level._module_round_hud destroy(); -} - -isonezmround() //checked matches cerberus output -{ - if ( get_game_var( "ZM_roundLimit" ) == 1 ) - { - return 1; - } - return 0; -} - -waslastzmround() //checked changed to match cerberus output -{ - if ( is_true( level.forcedend ) ) - { - return 1; - } - if ( hitzmroundlimit() || hitzmscorelimit() || hitzmroundwinlimit() ) - { - return 1; - } - return 0; -} - -hitzmroundlimit() //checked matches cerberus output -{ - if ( get_game_var( "ZM_roundLimit" ) <= 0 ) - { - return 0; - } - return getzmroundsplayed() >= get_game_var( "ZM_roundLimit" ); -} - -hitzmroundwinlimit() //checked matches cerberus output -{ - if ( !isDefined( get_game_var( "ZM_roundWinLimit" ) ) || get_game_var( "ZM_roundWinLimit" ) <= 0 ) - { - return 0; - } - if ( get_gamemode_var( "team_1_score" ) >= get_game_var( "ZM_roundWinLimit" ) || get_gamemode_var( "team_2_score" ) >= get_game_var( "ZM_roundWinLimit" ) ) - { - return 1; - } - if ( get_gamemode_var( "team_1_score" ) >= get_game_var( "ZM_roundWinLimit" ) || get_gamemode_var( "team_2_score" ) >= get_game_var( "ZM_roundWinLimit" ) ) - { - if ( get_gamemode_var( "team_1_score" ) != get_gamemode_var( "team_2_score" ) ) - { - return 1; - } - } - return 0; -} - -hitzmscorelimit() //checked matches cerberus output -{ - if ( get_game_var( "ZM_scoreLimit" ) <= 0 ) - { - return 0; - } - if ( is_encounter() ) - { - if ( get_gamemode_var( "team_1_score" ) >= get_game_var( "ZM_scoreLimit" ) || get_gamemode_var( "team_2_score" ) >= get_game_var( "ZM_scoreLimit" ) ) - { - return 1; - } - } - return 0; -} - -getzmroundsplayed() //checked matches cerberus output -{ - return get_gamemode_var( "current_round" ); -} - -onspawnplayerunified() //checked matches cerberus output -{ - onspawnplayer( 0 ); -} - -onspawnplayer( predictedspawn ) //fixed checked changed partially to match cerberus output -{ - if ( !isDefined( predictedspawn ) ) - { - predictedspawn = 0; - } - pixbeginevent( "ZSURVIVAL:onSpawnPlayer" ); - self.usingobj = undefined; - self.is_zombie = 0; - if ( isDefined( level.custom_spawnplayer ) && is_true( self.player_initialized ) ) - { - self [[ level.custom_spawnplayer ]](); - return; - } - if ( isDefined( level.customspawnlogic ) ) - { - self [[ level.customspawnlogic ]]( predictedspawn ); - if ( predictedspawn ) - { - return; - } - } - else - { - if ( flag( "begin_spawning" ) ) - { - spawnpoint = maps/mp/zombies/_zm::check_for_valid_spawn_near_team( self, 1 ); - } - if ( !isDefined( spawnpoint ) ) - { - match_string = ""; - location = level.scr_zm_map_start_location; - if ( ( location == "default" || location == "" ) && isDefined( level.default_start_location ) ) - { - location = level.default_start_location; - } - match_string = level.scr_zm_ui_gametype + "_" + location; - spawnpoints = []; - structs = getstructarray( "initial_spawn", "script_noteworthy" ); - if ( isdefined( structs ) ) - { - for ( i = 0; i < structs.size; i++ ) - { - if ( isdefined( structs[ i ].script_string ) ) - { - tokens = strtok( structs[ i ].script_string, " " ); - foreach ( token in tokens ) - { - if ( token == match_string ) - { - spawnpoints[ spawnpoints.size ] = structs[ i ]; - } - } - } - } - } - if ( !isDefined( spawnpoints ) || spawnpoints.size == 0 ) - { - spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); - } - spawnpoint = maps/mp/zombies/_zm::getfreespawnpoint( spawnpoints, self ); - - } - if ( predictedspawn ) - { - self predictspawnpoint( spawnpoint.origin, spawnpoint.angles ); - return; - } - else - { - self spawn( spawnpoint.origin, spawnpoint.angles, "zsurvival" ); - } - } - self.entity_num = self getentitynumber(); - self thread maps/mp/zombies/_zm::onplayerspawned(); - self thread maps/mp/zombies/_zm::player_revive_monitor(); - self freezecontrols( 1 ); - self.spectator_respawn = spawnpoint; - self.score = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "score" ); - self.pers[ "participation" ] = 0; - - self.score_total = self.score; - self.old_score = self.score; - self.player_initialized = 0; - self.zombification_time = 0; - self.enabletext = 1; - self thread maps/mp/zombies/_zm_blockers::rebuild_barrier_reward_reset(); - if ( !is_true( level.host_ended_game ) ) - { - self freeze_player_controls( 0 ); - self enableweapons(); - } - if ( isDefined( level.game_mode_spawn_player_logic ) ) - { - spawn_in_spectate = [[ level.game_mode_spawn_player_logic ]](); - if ( spawn_in_spectate ) - { - self delay_thread( 0.05, maps/mp/zombies/_zm::spawnspectator ); - } - } - pixendevent(); -} - - -get_player_spawns_for_gametype() //fixed checked partially changed to match cerberus output -{ - match_string = ""; - location = level.scr_zm_map_start_location; - if ( ( location == "default" || location == "" ) && isDefined( level.default_start_location ) ) - { - location = level.default_start_location; - } - match_string = level.scr_zm_ui_gametype + "_" + location; - player_spawns = []; - structs = getstructarray("player_respawn_point", "targetname"); - i = 0; - while ( i < structs.size ) - { - if ( isdefined( structs[ i ].script_string ) ) - { - tokens = strtok( structs[ i ].script_string, " " ); - foreach ( token in tokens ) - { - if ( token == match_string ) - { - player_spawns[ player_spawns.size ] = structs[ i ]; - } - } - i++; - continue; - } - player_spawns[ player_spawns.size ] = structs[ i ]; - i++; - } - return player_spawns; -} - -onendgame( winningteam ) //checked matches cerberus output -{ -} - -onroundendgame( roundwinner ) //checked matches cerberus output -{ - if ( game[ "roundswon" ][ "allies" ] == game[ "roundswon" ][ "axis" ] ) - { - winner = "tie"; - } - else if ( game[ "roundswon" ][ "axis" ] > game[ "roundswon" ][ "allies" ] ) - { - winner = "axis"; - } - else - { - winner = "allies"; - } - return winner; -} - -menu_init() //checked matches cerberus output -{ - game[ "menu_team" ] = "team_marinesopfor"; - game[ "menu_changeclass_allies" ] = "changeclass"; - game[ "menu_initteam_allies" ] = "initteam_marines"; - game[ "menu_changeclass_axis" ] = "changeclass"; - game[ "menu_initteam_axis" ] = "initteam_opfor"; - game[ "menu_class" ] = "class"; - game[ "menu_changeclass" ] = "changeclass"; - game[ "menu_changeclass_offline" ] = "changeclass"; - game[ "menu_wager_side_bet" ] = "sidebet"; - game[ "menu_wager_side_bet_player" ] = "sidebet_player"; - game[ "menu_changeclass_wager" ] = "changeclass_wager"; - game[ "menu_changeclass_custom" ] = "changeclass_custom"; - game[ "menu_changeclass_barebones" ] = "changeclass_barebones"; - game[ "menu_controls" ] = "ingame_controls"; - game[ "menu_options" ] = "ingame_options"; - game[ "menu_leavegame" ] = "popup_leavegame"; - game[ "menu_restartgamepopup" ] = "restartgamepopup"; - precachemenu( game[ "menu_controls" ] ); - precachemenu( game[ "menu_options" ] ); - precachemenu( game[ "menu_leavegame" ] ); - precachemenu( game[ "menu_restartgamepopup" ] ); - precachemenu( "scoreboard" ); - precachemenu( game[ "menu_team" ] ); - precachemenu( game[ "menu_changeclass_allies" ] ); - precachemenu( game[ "menu_initteam_allies" ] ); - precachemenu( game[ "menu_changeclass_axis" ] ); - precachemenu( game[ "menu_class" ] ); - precachemenu( game[ "menu_changeclass" ] ); - precachemenu( game[ "menu_initteam_axis" ] ); - precachemenu( game[ "menu_changeclass_offline" ] ); - precachemenu( game[ "menu_changeclass_wager" ] ); - precachemenu( game[ "menu_changeclass_custom" ] ); - precachemenu( game[ "menu_changeclass_barebones" ] ); - precachemenu( game[ "menu_wager_side_bet" ] ); - precachemenu( game[ "menu_wager_side_bet_player" ] ); - precachestring( &"MP_HOST_ENDED_GAME" ); - precachestring( &"MP_HOST_ENDGAME_RESPONSE" ); - level thread menu_onplayerconnect(); -} - -menu_onplayerconnect() //checked matches cerberus output -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread menu_onmenuresponse(); - } -} - -menu_onmenuresponse() //checked changed to match cerberus output -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "menuresponse", menu, response ); - if ( response == "back" ) - { - self closemenu(); - self closeingamemenu(); - if ( level.console ) - { - if ( game[ "menu_changeclass" ] != menu && game[ "menu_changeclass_offline" ] != menu || menu == game[ "menu_team" ] && menu == game[ "menu_controls" ] ) - { - if ( self.pers[ "team" ] == "allies" ) - { - self openmenu( game[ "menu_class" ] ); - } - if ( self.pers[ "team" ] == "axis" ) - { - self openmenu( game[ "menu_class" ] ); - } - } - } - continue; - } - if ( response == "changeteam" && level.allow_teamchange == "1" ) - { - self closemenu(); - self closeingamemenu(); - self openmenu( game[ "menu_team" ] ); - } - if ( response == "changeclass_marines" ) - { - self closemenu(); - self closeingamemenu(); - self openmenu( game[ "menu_changeclass_allies" ] ); - continue; - } - if ( response == "changeclass_opfor" ) - { - self closemenu(); - self closeingamemenu(); - self openmenu( game[ "menu_changeclass_axis" ] ); - continue; - } - if ( response == "changeclass_wager" ) - { - self closemenu(); - self closeingamemenu(); - self openmenu( game[ "menu_changeclass_wager" ] ); - continue; - } - if ( response == "changeclass_custom" ) - { - self closemenu(); - self closeingamemenu(); - self openmenu( game[ "menu_changeclass_custom" ] ); - continue; - } - if ( response == "changeclass_barebones" ) - { - self closemenu(); - self closeingamemenu(); - self openmenu( game[ "menu_changeclass_barebones" ] ); - continue; - } - if ( response == "changeclass_marines_splitscreen" ) - { - self openmenu( "changeclass_marines_splitscreen" ); - } - if ( response == "changeclass_opfor_splitscreen" ) - { - self openmenu( "changeclass_opfor_splitscreen" ); - } - if ( response == "endgame" ) - { - if ( self issplitscreen() ) - { - level.skipvote = 1; - if ( is_true( level.gameended ) ) - { - self maps/mp/zombies/_zm_laststand::add_weighted_down(); - self maps/mp/zombies/_zm_stats::increment_client_stat( "deaths" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "deaths" ); - self maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat(); - level.host_ended_game = 1; - maps/mp/zombies/_zm_game_module::freeze_players( 1 ); - level notify( "end_game" ); - } - } - continue; - } - if ( response == "restart_level_zm" ) - { - self maps/mp/zombies/_zm_laststand::add_weighted_down(); - self maps/mp/zombies/_zm_stats::increment_client_stat( "deaths" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "deaths" ); - self maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat(); - missionfailed(); - } - if ( response == "killserverpc" ) - { - level thread maps/mp/gametypes_zm/_globallogic::killserverpc(); - continue; - } - if ( response == "endround" ) - { - if ( is_true( level.gameended ) ) - { - self maps/mp/gametypes_zm/_globallogic::gamehistoryplayerquit(); - self maps/mp/zombies/_zm_laststand::add_weighted_down(); - self closemenu(); - self closeingamemenu(); - level.host_ended_game = 1; - maps/mp/zombies/_zm_game_module::freeze_players( 1 ); - level notify( "end_game" ); - } - else - { - self closemenu(); - self closeingamemenu(); - self iprintln( &"MP_HOST_ENDGAME_RESPONSE" ); - } - continue; - } - if ( menu == game[ "menu_team" ] && level.allow_teamchange == "1" ) - { - switch( response ) - { - case "allies": - self [[ level.allies ]](); - break; - case "axis": - self [[ level.teammenu ]]( response ); - break; - case "autoassign": - self [[ level.autoassign ]]( 1 ); - break; - case "spectator": - self [[ level.spectator ]](); - break; - } - continue; - } - else - { - if ( game[ "menu_changeclass" ] != menu && game[ "menu_changeclass_offline" ] != menu && game[ "menu_changeclass_wager" ] != menu || menu == game[ "menu_changeclass_custom" ] && menu == game[ "menu_changeclass_barebones" ] ) - { - self closemenu(); - self closeingamemenu(); - if ( level.rankedmatch && issubstr( response, "custom" ) ) - { - } - self.selectedclass = 1; - self [[ level.class ]]( response ); - } - } - } -} - - -menuallieszombies() //checked changed to match cerberus output -{ - self maps/mp/gametypes_zm/_globallogic_ui::closemenus(); - if ( !level.console && level.allow_teamchange == "0" && is_true( self.hasdonecombat ) ) - { - return; - } - if ( self.pers[ "team" ] != "allies" ) - { - if ( level.ingraceperiod && !isDefined( self.hasdonecombat ) || !self.hasdonecombat ) - { - self.hasspawned = 0; - } - if ( self.sessionstate == "playing" ) - { - self.switching_teams = 1; - self.joining_team = "allies"; - self.leaving_team = self.pers[ "team" ]; - self suicide(); - } - self.pers["team"] = "allies"; - self.team = "allies"; - self.pers["class"] = undefined; - self.class = undefined; - self.pers["weapon"] = undefined; - self.pers["savedmodel"] = undefined; - self updateobjectivetext(); - if ( level.teambased ) - { - self.sessionteam = "allies"; - } - else - { - self.sessionteam = "none"; - self.ffateam = "allies"; - } - self setclientscriptmainmenu( game[ "menu_class" ] ); - self notify( "joined_team" ); - level notify( "joined_team" ); - self notify( "end_respawn" ); - } -} - - -custom_spawn_init_func() //checked matches cerberus output -{ - array_thread( level.zombie_spawners, ::add_spawn_function, maps/mp/zombies/_zm_spawner::zombie_spawn_init ); - array_thread( level.zombie_spawners, ::add_spawn_function, level._zombies_round_spawn_failsafe ); -} - -kill_all_zombies() //changed to match cerberus output -{ - ai = getaiarray( level.zombie_team ); - foreach ( zombie in ai ) - { - if ( isdefined( zombie ) ) - { - zombie dodamage( zombie.maxhealth * 2, zombie.origin, zombie, zombie, "none", "MOD_SUICIDE" ); - wait 0.05; - } - } -} - -init() //checked matches cerberus output -{ - - flag_init( "pregame" ); - flag_set( "pregame" ); - level thread onplayerconnect(); -} - -onplayerconnect() //checked matches cerberus output -{ - for ( ;; ) - { - level waittill( "connected", player ); - player thread onplayerspawned(); - if ( isDefined( level.game_module_onplayerconnect ) ) - { - player [[ level.game_module_onplayerconnect ]](); - } - } -} - -onplayerspawned() //checked partially changed to cerberus output -{ - level endon( "end_game" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill_either( "spawned_player", "fake_spawned_player" ); - if ( isDefined( level.match_is_ending ) && level.match_is_ending ) - { - return; - } - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - self thread maps/mp/zombies/_zm_laststand::auto_revive( self ); - } - if ( isDefined( level.custom_player_fake_death_cleanup ) ) - { - self [[ level.custom_player_fake_death_cleanup ]](); - } - self setstance( "stand" ); - self.zmbdialogqueue = []; - self.zmbdialogactive = 0; - self.zmbdialoggroups = []; - self.zmbdialoggroup = ""; - if ( is_encounter() ) - { - if ( self.team == "axis" ) - { - self.characterindex = 0; - self._encounters_team = "A"; - self._team_name = &"ZOMBIE_RACE_TEAM_1"; - } - else - { - self.characterindex = 1; - self._encounters_team = "B"; - self._team_name = &"ZOMBIE_RACE_TEAM_2"; - } - } - self takeallweapons(); - if ( isDefined( level.givecustomcharacters ) ) - { - self [[ level.givecustomcharacters ]](); - } - self giveweapon( "knife_zm" ); - if ( isDefined( level.onplayerspawned_restore_previous_weapons ) && isDefined( level.isresetting_grief ) && level.isresetting_grief ) - { - weapons_restored = self [[ level.onplayerspawned_restore_previous_weapons ]](); - } - if ( isDefined( weapons_restored ) && !weapons_restored || !isDefined( weapons_restored ) ) - { - self give_start_weapon( 1 ); - } - weapons_restored = 0; - if ( isDefined( level._team_loadout ) ) - { - self giveweapon( level._team_loadout ); - self switchtoweapon( level._team_loadout ); - } - if ( isDefined( level.gamemode_post_spawn_logic ) ) - { - self [[ level.gamemode_post_spawn_logic ]](); - } - } -} - -wait_for_players() //checked matches cerberus output -{ - level endon( "end_race" ); - if ( getDvarInt( "party_playerCount" ) == 1 ) - { - flag_wait( "start_zombie_round_logic" ); - return; - } - while ( !flag_exists( "start_zombie_round_logic" ) ) - { - wait 0.05; - } - while ( !flag( "start_zombie_round_logic" ) && isDefined( level._module_connect_hud ) ) - { - level._module_connect_hud.alpha = 0; - level._module_connect_hud.sort = 12; - level._module_connect_hud fadeovertime( 1 ); - level._module_connect_hud.alpha = 1; - wait 1.5; - level._module_connect_hud fadeovertime( 1 ); - level._module_connect_hud.alpha = 0; - wait 1.5; - } - if ( isDefined( level._module_connect_hud ) ) - { - level._module_connect_hud destroy(); - } -} - -onplayerconnect_check_for_hotjoin() //checked matches cerberus output -{ -/* -/# - if ( getDvarInt( #"EA6D219A" ) > 0 ) - { - return; -#/ - } -*/ - map_logic_exists = level flag_exists( "start_zombie_round_logic" ); - map_logic_started = flag( "start_zombie_round_logic" ); - if ( map_logic_exists && map_logic_started ) - { - self thread hide_gump_loading_for_hotjoiners(); - } -} - -hide_gump_loading_for_hotjoiners() //checked matches cerberus output -{ - self endon( "disconnect" ); - self.rebuild_barrier_reward = 1; - self.is_hotjoining = 1; - num = self getsnapshotackindex(); - while ( num == self getsnapshotackindex() ) - { - wait 0.25; - } - wait 0.5; - self maps/mp/zombies/_zm::spawnspectator(); - self.is_hotjoining = 0; - self.is_hotjoin = 1; - if ( is_true( level.intermission ) || is_true( level.host_ended_game ) ) - { - setclientsysstate( "levelNotify", "zi", self ); - self setclientthirdperson( 0 ); - self resetfov(); - self.health = 100; - self thread [[ level.custom_intermission ]](); - } -} - -blank() -{ - //empty function -} - - - - -main() -{ - replaceFunc( maps/mp/gametypes/dem::isscoreboosting, ::always_false ); - replaceFunc( maps/mp/gametypes/dom::isscoreboosting, ::always_false ); - replaceFunc( maps/mp/gametypes/koth::isscoreboosting, ::always_false ); -} - -init() -{ - level.isKillBoosting = ::always_false; -} - -always_false() -{ - return false; -} - - - - - - - diff --git a/Zombie Core/patch_zm/maps/mp/gametypes_zm/zclassic.gsc b/Zombie Core/patch_zm/maps/mp/gametypes_zm/zclassic.gsc deleted file mode 100644 index 615725b..0000000 --- a/Zombie Core/patch_zm/maps/mp/gametypes_zm/zclassic.gsc +++ /dev/null @@ -1,30 +0,0 @@ -#include maps/mp/zombies/_zm_stats; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_stats; - -main() -{ - maps/mp/gametypes_zm/_zm_gametype::main(); - level.onprecachegametype = ::onprecachegametype; - level.onstartgametype = ::onstartgametype; - level._game_module_custom_spawn_init_func = ::custom_spawn_init_func; - level._game_module_stat_update_func = ::survival_classic_custom_stat_update; - maps/mp/gametypes_zm/_zm_gametype::post_gametype_main( "zclassic" ); -} - -onprecachegametype() -{ - level.playersuicideallowed = 1; - level.canplayersuicide = ::canplayersuicide; - level.suicide_weapon = "death_self_zm"; - precacheitem( "death_self_zm" ); - maps/mp/gametypes_zm/_zm_gametype::rungametypeprecache( "zclassic" ); -} - -onstartgametype() -{ - maps/mp/gametypes_zm/_zm_gametype::rungametypemain( "zclassic", ::zclassic_main ); -} \ No newline at end of file diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_load.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_load.gsc deleted file mode 100644 index 95dd465..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_load.gsc +++ /dev/null @@ -1,510 +0,0 @@ -//checked includes changed to match cerberus output -#include maps/mp/gametypes_zm/_spawnlogic; -#include maps/mp/animscripts/traverse/shared; -#include maps/mp/animscripts/utility; -#include maps/mp/zombies/_load; -#include maps/mp/_demo; -#include maps/mp/_global_fx; -#include maps/mp/_createfx; -#include maps/mp/_art; -#include maps/mp/_serverfaceanim_mp; -#include maps/mp/_fxanim; -#include maps/mp/_music; -#include maps/mp/_busing; -#include maps/mp/_audio; -#include maps/mp/_interactive_objects; -#include maps/mp/_script_gen; -#include maps/mp/_utility; -#include common_scripts/utility; - -main( bscriptgened, bcsvgened, bsgenabled ) //checked partially changed to match cerberus output -{ - if ( !isDefined( level.script_gen_dump_reasons ) ) - { - level.script_gen_dump_reasons = []; - } - if ( !isDefined( bsgenabled ) ) - { - level.script_gen_dump_reasons[ level.script_gen_dump_reasons.size ] = "First run"; - } - if ( !isDefined( bcsvgened ) ) - { - bcsvgened = 0; - } - level.bcsvgened = bcsvgened; - if ( !isDefined( bscriptgened ) ) - { - bscriptgened = 0; - } - else - { - bscriptgened = 1; - } - level.bscriptgened = bscriptgened; - level._loadstarted = 1; - struct_class_init(); - if ( getDvar( "cg_usingClientScripts" ) != "" ) //changed at own discretion - { - level.clientscripts = getDvar( "cg_usingClientScripts" ); - } - - level._client_exploders = []; - level._client_exploder_ids = []; - if ( !isDefined( level.flag ) ) - { - level.flag = []; - level.flags_lock = []; - } - if ( !isDefined( level.timeofday ) ) - { - level.timeofday = "day"; - } - flag_init( "scriptgen_done" ); - level.script_gen_dump_reasons = []; - if ( !isDefined( level.script_gen_dump ) ) - { - level.script_gen_dump = []; - level.script_gen_dump_reasons[ 0 ] = "First run"; - } - if ( !isDefined( level.script_gen_dump2 ) ) - { - level.script_gen_dump2 = []; - } - if ( isDefined( level.createfxent ) && isDefined( level.script ) ) - { - script_gen_dump_addline( "maps\\mp\\createfx\\" + level.script + "_fx::main();", level.script + "_fx" ); - } - if ( isDefined( level.script_gen_dump_preload ) ) - { - for ( i = 0; i < level.script_gen_dump_preload.size; i++ ) - { - script_gen_dump_addline( level.script_gen_dump_preload[ i ].string, level.script_gen_dump_preload[ i ].signature ); - } - } - if ( getDvar( "scr_RequiredMapAspectratio" ) == "" ) - { - setdvar( "scr_RequiredMapAspectratio", "1" ); - } - setdvar( "r_waterFogTest", 0 ); - precacherumble( "reload_small" ); - precacherumble( "reload_medium" ); - precacherumble( "reload_large" ); - precacherumble( "reload_clipin" ); - precacherumble( "reload_clipout" ); - precacherumble( "reload_rechamber" ); - precacherumble( "pullout_small" ); - precacherumble( "buzz_high" ); - precacherumble( "riotshield_impact" ); - registerclientsys( "levelNotify" ); - level.aitriggerspawnflags = getaitriggerflags(); - level.vehicletriggerspawnflags = getvehicletriggerflags(); - level.physicstracemaskphysics = 1; - level.physicstracemaskvehicle = 2; - level.physicstracemaskwater = 4; - level.physicstracemaskclip = 8; - level.physicstracecontentsvehicleclip = 16; - if ( getDvar( "createfx" ) != "" ) - { - level.createfx_enabled = getDvar( "createfx" ); - } - level thread start_intro_screen_zm(); - thread maps/mp/_interactive_objects::init(); - maps/mp/_audio::init(); - thread maps/mp/_busing::businit(); - thread maps/mp/_music::music_init(); - thread maps/mp/_fxanim::init(); - thread maps/mp/_serverfaceanim_mp::init(); - if ( level.createfx_enabled ) - { - setinitialplayersconnected(); - } - visionsetnight( "default_night" ); - setup_traversals(); - maps/mp/_art::main(); - setupexploders(); - parse_structs(); - thread footsteps(); - /* -/# - level thread level_notify_listener(); - level thread client_notify_listener(); -#/ - */ - thread maps/mp/_createfx::fx_init(); - if ( level.createfx_enabled ) - { - calculate_map_center(); - maps/mp/_createfx::createfx(); - } - if ( getDvar( "r_reflectionProbeGenerate" ) == "1" ) - { - maps/mp/_global_fx::main(); - level waittill( "eternity" ); - } - thread maps/mp/_global_fx::main(); - maps/mp/_demo::init(); - for ( p = 0; p < 6; p++ ) - { - switch( p ) - { - case 0: - triggertype = "trigger_multiple"; - break; - case 1: - triggertype = "trigger_once"; - break; - case 2: - triggertype = "trigger_use"; - break; - case 3: - triggertype = "trigger_radius"; - break; - case 4: - triggertype = "trigger_lookat"; - break; - default: - /* -/# - assert( p == 5 ); -#/ - */ - triggertype = "trigger_damage"; - break; - } - triggers = getentarray( triggertype, "classname" ); - for ( i = 0; i < triggers.size; i++ ) - { - if ( isDefined( triggers[ i ].script_prefab_exploder ) ) - { - triggers[ i ].script_exploder = triggers[ i ].script_prefab_exploder; - } - if ( isDefined( triggers[ i ].script_exploder ) ) - { - level thread maps/mp/zombies/_load::exploder_load( triggers[ i ] ); - } - } - } -} - -level_notify_listener() //checked matches cerberus output -{ - while ( 1 ) - { - val = getDvar( "level_notify" ); - if ( val != "" ) - { - level notify( val ); - setdvar( "level_notify", "" ); - } - wait 0.2; - } -} - -client_notify_listener() //checked matches cerberus output -{ - while ( 1 ) - { - val = getDvar( "client_notify" ); - if ( val != "" ) - { - clientnotify( val ); - setdvar( "client_notify", "" ); - } - wait 0.2; - } -} - -footsteps() //checked matches cerberus output -{ - if ( is_true( level.fx_exclude_footsteps ) ) - { - return; - } - maps/mp/animscripts/utility::setfootstepeffect( "asphalt", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "brick", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "carpet", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "cloth", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "concrete", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "dirt", loadfx( "bio/player/fx_footstep_sand" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "foliage", loadfx( "bio/player/fx_footstep_sand" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "gravel", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "grass", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "metal", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "mud", loadfx( "bio/player/fx_footstep_mud" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "paper", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "plaster", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "rock", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "sand", loadfx( "bio/player/fx_footstep_sand" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "water", loadfx( "bio/player/fx_footstep_water" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "wood", loadfx( "bio/player/fx_footstep_dust" ) ); -} - -parse_structs() //checked matches cerberus output -{ - for ( i = 0; i < level.struct.size; i++ ) - { - if ( isDefined( level.struct[ i ].targetname ) ) - { - if ( level.struct[ i ].targetname == "flak_fire_fx" ) - { - level._effect[ "flak20_fire_fx" ] = loadfx( "weapon/tracer/fx_tracer_flak_single_noExp" ); - level._effect[ "flak38_fire_fx" ] = loadfx( "weapon/tracer/fx_tracer_quad_20mm_Flak38_noExp" ); - level._effect[ "flak_cloudflash_night" ] = loadfx( "weapon/flak/fx_flak_cloudflash_night" ); - level._effect[ "flak_burst_single" ] = loadfx( "weapon/flak/fx_flak_single_day_dist" ); - } - if ( level.struct[ i ].targetname == "fake_fire_fx" ) - { - level._effect[ "distant_muzzleflash" ] = loadfx( "weapon/muzzleflashes/heavy" ); - } - if ( level.struct[ i ].targetname == "spotlight_fx" ) - { - level._effect[ "spotlight_beam" ] = loadfx( "env/light/fx_ray_spotlight_md" ); - } - } - } -} - -exploder_load( trigger ) //checked matches cerberus output -{ - level endon( "killexplodertridgers" + trigger.script_exploder ); - trigger waittill( "trigger" ); - if ( isDefined( trigger.script_chance ) && randomfloat( 1 ) > trigger.script_chance ) - { - if ( isDefined( trigger.script_delay ) ) - { - wait trigger.script_delay; - } - else - { - wait 4; - } - level thread exploder_load( trigger ); - return; - } - maps/mp/_utility::exploder( trigger.script_exploder ); - level notify( "killexplodertridgers" + trigger.script_exploder ); -} - -setupexploders() //checked partially changed to match cerberus output -{ - ents = getentarray( "script_brushmodel", "classname" ); - smodels = getentarray( "script_model", "classname" ); - for ( i = 0; i < smodels.size; i++ ) - { - ents[ ents.size ] = smodels[ i ]; - } - i = 0; - while ( i < ents.size ) - { - if ( isDefined( ents[ i ].script_prefab_exploder ) ) - { - ents[ i ].script_exploder = ents[ i ].script_prefab_exploder; - } - if ( isDefined( ents[ i ].script_exploder ) ) - { - if ( ents[ i ].model == "fx" || !isDefined( ents[ i ].targetname ) && ents[ i ].targetname != "exploderchunk" ) - { - ents[ i ] hide(); - i++; - continue; - } - if ( isDefined( ents[ i ].targetname ) && ents[ i ].targetname == "exploder" ) - { - ents[ i ] hide(); - ents[ i ] notsolid(); - i++; - continue; - } - if ( isDefined( ents[ i ].targetname ) && ents[ i ].targetname == "exploderchunk" ) - { - ents[ i ] hide(); - ents[ i ] notsolid(); - } - } - i++; - } - script_exploders = []; - potentialexploders = getentarray( "script_brushmodel", "classname" ); - for ( i = 0; i < potentialexploders.size; i++ ) - { - if ( isDefined( potentialexploders[ i ].script_prefab_exploder ) ) - { - potentialexploders[ i ].script_exploder = potentialexploders[ i ].script_prefab_exploder; - } - if ( isDefined( potentialexploders[ i ].script_exploder ) ) - { - script_exploders[ script_exploders.size ] = potentialexploders[ i ]; - } - } - potentialexploders = getentarray( "script_model", "classname" ); - for ( i = 0; i < potentialexploders.size; i++ ) - { - if ( isDefined( potentialexploders[ i ].script_prefab_exploder ) ) - { - potentialexploders[ i ].script_exploder = potentialexploders[ i ].script_prefab_exploder; - } - if ( isDefined( potentialexploders[ i ].script_exploder ) ) - { - script_exploders[ script_exploders.size ] = potentialexploders[ i ]; - } - } - potentialexploders = getentarray( "item_health", "classname" ); - for ( i = 0; i < potentialexploders.size; i++ ) - { - if ( isDefined( potentialexploders[ i ].script_prefab_exploder ) ) - { - potentialexploders[ i ].script_exploder = potentialexploders[ i ].script_prefab_exploder; - } - if ( isDefined( potentialexploders[ i ].script_exploder ) ) - { - script_exploders[ script_exploders.size ] = potentialexploders[ i ]; - } - } - if ( !isDefined( level.createfxent ) ) - { - level.createfxent = []; - } - acceptabletargetnames = []; - acceptabletargetnames[ "exploderchunk visible" ] = 1; - acceptabletargetnames[ "exploderchunk" ] = 1; - acceptabletargetnames[ "exploder" ] = 1; - for ( i = 0; i < script_exploders.size; i++ ) - { - exploder = script_exploders[ i ]; - ent = createexploder( exploder.script_fxid ); - ent.v = []; - ent.v[ "origin" ] = exploder.origin; - ent.v[ "angles" ] = exploder.angles; - ent.v[ "delay" ] = exploder.script_delay; - ent.v[ "firefx" ] = exploder.script_firefx; - ent.v[ "firefxdelay" ] = exploder.script_firefxdelay; - ent.v[ "firefxsound" ] = exploder.script_firefxsound; - ent.v[ "firefxtimeout" ] = exploder.script_firefxtimeout; - ent.v[ "earthquake" ] = exploder.script_earthquake; - ent.v[ "damage" ] = exploder.script_damage; - ent.v[ "damage_radius" ] = exploder.script_radius; - ent.v[ "soundalias" ] = exploder.script_soundalias; - ent.v[ "repeat" ] = exploder.script_repeat; - ent.v[ "delay_min" ] = exploder.script_delay_min; - ent.v[ "delay_max" ] = exploder.script_delay_max; - ent.v[ "target" ] = exploder.target; - ent.v[ "ender" ] = exploder.script_ender; - ent.v[ "type" ] = "exploder"; - if ( !isDefined( exploder.script_fxid ) ) - { - ent.v[ "fxid" ] = "No FX"; - } - else - { - ent.v[ "fxid" ] = exploder.script_fxid; - } - ent.v[ "exploder" ] = exploder.script_exploder; - /* -/# - assert( isDefined( exploder.script_exploder ), "Exploder at origin " + exploder.origin + " has no script_exploder" ); -#/ - */ - if ( !isDefined( ent.v[ "delay" ] ) ) - { - ent.v[ "delay" ] = 0; - } - if ( isDefined( exploder.target ) ) - { - org = getent( ent.v[ "target" ], "targetname" ).origin; - ent.v[ "angles" ] = vectorToAngles( org - ent.v[ "origin" ] ); - } - if ( exploder.classname == "script_brushmodel" || isDefined( exploder.model ) ) - { - ent.model = exploder; - ent.model.disconnect_paths = exploder.script_disconnectpaths; - } - if ( isDefined( exploder.targetname ) && isDefined( acceptabletargetnames[ exploder.targetname ] ) ) - { - ent.v[ "exploder_type" ] = exploder.targetname; - } - else - { - ent.v[ "exploder_type" ] = "normal"; - } - ent maps/mp/_createfx::post_entity_creation_function(); - } - level.createfxexploders = []; - i = 0; - while ( i < level.createfxent.size ) - { - ent = level.createfxent[ i ]; - if ( ent.v[ "type" ] != "exploder" ) - { - i++; - continue; - } - ent.v[ "exploder_id" ] = getexploderid( ent ); - if ( !isDefined( level.createfxexploders[ ent.v[ "exploder" ] ] ) ) - { - level.createfxexploders[ ent.v[ "exploder" ] ] = []; - } - level.createfxexploders[ ent.v[ "exploder" ] ][ level.createfxexploders[ ent.v[ "exploder" ] ].size ] = ent; - i++; - } -} - -setup_traversals() //checked changed to match cerberus output -{ - potential_traverse_nodes = getallnodes(); - for ( i = 0; i < potential_traverse_nodes.size; i++ ) - { - node = potential_traverse_nodes[ i ]; - if ( node.type == "Begin" ) - { - node maps/mp/animscripts/traverse/shared::init_traverse(); - } - } -} - -calculate_map_center() //checked matches cerberus output -{ - if ( !isDefined( level.mapcenter ) ) - { - level.nodesmins = ( 0, 0, 0 ); - level.nodesmaxs = ( 0, 0, 0 ); - level.mapcenter = maps/mp/gametypes_zm/_spawnlogic::findboxcenter( level.nodesmins, level.nodesmaxs ); - /* -/# - println( "map center: ", level.mapcenter ); -#/ - */ - setmapcenter( level.mapcenter ); - } -} - -start_intro_screen_zm() //checked changed to match cerberus output -{ - if ( level.createfx_enabled ) - { - return; - } - if ( !isDefined( level.introscreen ) ) - { - level.introscreen = newhudelem(); - level.introscreen.x = 0; - level.introscreen.y = 0; - level.introscreen.horzalign = "fullscreen"; - level.introscreen.vertalign = "fullscreen"; - level.introscreen.foreground = 0; - level.introscreen setshader( "black", 640, 480 ); - level.introscreen.immunetodemogamehudsettings = 1; - level.introscreen.immunetodemofreecamera = 1; - wait 0.05; - } - level.introscreen.alpha = 1; - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - players[ i ] freezecontrols( 1 ); - } - wait 1; -} - - - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm.gsc deleted file mode 100644 index ef6b809..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm.gsc +++ /dev/null @@ -1,5619 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/_demo; -#include maps/mp/_utility; -#include maps/mp/_visionset_mgr; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/gametypes_zm/_weapons; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zombies/_zm_ai_dogs; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_audio_announcer; -#include maps/mp/zombies/_zm_blockers; -#include maps/mp/zombies/_zm_bot; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_clone; -#include maps/mp/zombies/_zm_devgui; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_ffotd; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm_gump; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_melee_weapon; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_pers_upgrades; -#include maps/mp/zombies/_zm_pers_upgrades_system; -#include maps/mp/zombies/_zm_pers_upgrades_functions; -#include maps/mp/zombies/_zm_playerhealth; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_power; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_timer; -#include maps/mp/zombies/_zm_tombstone; -#include maps/mp/zombies/_zm_traps; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_zonemgr; - -init() //checked matches cerberus output -{ - //notes - /* - since for loops with continues cause infinite loops for some unknown reason - all for loops with continues are changed to while loops - the functionality is the same but i wish i could use for loops instead since - it looks cleaner - */ - //begin debug code - level.custom_zm_loaded = 1; - maps/mp/zombies/_zm_bot::init(); - if ( !isDefined( level.debugLogging_zm ) ) - { - level.debugLogging_zm = 0; - } - if ( !isDefined( level.disable_blackscreen_clientfield ) ) - { - level.disable_blackscreen_clientfield = 0; - } - if ( !isDefined( level._no_equipment_activated_clientfield ) ) - { - level._no_equipment_activated_clientfield = 0; - } - if ( !isDefined( level._no_navcards ) ) - { - level._no_navcards = 0; - } - if ( !isDefined( level.use_clientside_board_fx ) ) - { - level.use_clientside_board_fx = 1; - } - if ( !isDefined( level.disable_deadshot_clientfield ) ) - { - level.disable_deadshot_clientfield = 0; //needs to be 0 even if the map doesn't have the perk - } - if ( !isDefined( level.use_clientside_rock_tearin_fx ) ) - { - level.use_clientside_rock_tearin_fx = 1; - } - if ( !isDefined( level.no_end_game_check ) ) - { - level.no_end_game_check = 0; - } - if ( !isDefined( level.noroundnumber ) ) - { - level.noroundnumber = 0; - } - if ( !isDefined( level.host_ended_game ) ) - { - level.host_ended_game = 0; - } - if ( !isDefined( level.zm_disable_recording_stats ) ) - { - level.zm_disable_recording_stats = 0; - } - //end debug code - level.player_out_of_playable_area_monitor = 1; - level.player_too_many_weapons_monitor = 1; - level.player_too_many_weapons_monitor_func = ::player_too_many_weapons_monitor; - level.player_too_many_players_check = 0; - level.player_too_many_players_check_func = ::player_too_many_players_check; - level._use_choke_weapon_hints = 1; - level._use_choke_blockers = 1; - level.passed_introscreen = 0; - if ( !isDefined( level.custom_ai_type ) ) - { - level.custom_ai_type = []; - } - level.custom_ai_spawn_check_funcs = []; - level.spawn_funcs = []; - level.spawn_funcs[ "allies" ] = []; - level.spawn_funcs[ "axis" ] = []; - level.spawn_funcs[ "team3" ] = []; - level thread maps/mp/zombies/_zm_ffotd::main_start(); - level.zombiemode = 1; - level.revivefeature = 0; - level.swimmingfeature = 0; - level.calc_closest_player_using_paths = 0; - level.zombie_melee_in_water = 1; - level.put_timed_out_zombies_back_in_queue = 1; - level.use_alternate_poi_positioning = 1; - level.zmb_laugh_alias = "zmb_laugh_richtofen"; - level.sndannouncerisrich = 1; - level.scr_zm_ui_gametype = getDvar( "ui_gametype" ); - level.scr_zm_ui_gametype_group = getDvar( "ui_zm_gamemodegroup" ); - level.scr_zm_map_start_location = getDvar( "ui_zm_mapstartlocation" ); - level.curr_gametype_affects_rank = 0; - gametype = tolower( getDvar( "g_gametype" ) ); - if ( gametype == "zclassic" || gametype == "zstandard" ) - { - level.curr_gametype_affects_rank = 1; - } - level.grenade_multiattack_bookmark_count = 1; - level.rampage_bookmark_kill_times_count = 3; - level.rampage_bookmark_kill_times_msec = 6000; - level.rampage_bookmark_kill_times_delay = 6000; - level thread watch_rampage_bookmark(); - - //taken from the beta dump _zm - level.GAME_MODULE_CLASSIC_INDEX = 0; - maps\mp\zombies\_zm_game_module::register_game_module(level.GAME_MODULE_CLASSIC_INDEX,"classic",undefined,undefined); - maps\mp\zombies\_zm_game_module::set_current_game_module(level.scr_zm_game_module); - - if ( !isDefined( level._zombies_round_spawn_failsafe ) ) - { - level._zombies_round_spawn_failsafe = ::round_spawn_failsafe; - } - level.zombie_visionset = "zombie_neutral"; - if ( getDvar( "anim_intro" ) == "1" ) - { - level.zombie_anim_intro = 1; - } - else - { - level.zombie_anim_intro = 0; - } - precache_shaders(); - precache_models(); - precacherumble( "explosion_generic" ); - precacherumble( "dtp_rumble" ); - precacherumble( "slide_rumble" ); - precache_zombie_leaderboards(); - level._zombie_gib_piece_index_all = 0; - level._zombie_gib_piece_index_right_arm = 1; - level._zombie_gib_piece_index_left_arm = 2; - level._zombie_gib_piece_index_right_leg = 3; - level._zombie_gib_piece_index_left_leg = 4; - level._zombie_gib_piece_index_head = 5; - level._zombie_gib_piece_index_guts = 6; - level._zombie_gib_piece_index_hat = 7; - if ( !isDefined( level.zombie_ai_limit ) ) - { - level.zombie_ai_limit = 24; - } - if ( !isDefined( level.zombie_actor_limit ) ) - { - level.zombie_actor_limit = 31; - } - maps/mp/_visionset_mgr::init(); - init_dvars(); - init_strings(); - init_levelvars(); - init_sounds(); - init_shellshocks(); - init_flags(); - init_client_flags(); - registerclientfield( "world", "zombie_power_on", 1, 1, "int" ); - if ( !is_true( level._no_navcards ) ) - { - if ( level.scr_zm_ui_gametype_group == "zclassic" && !level.createfx_enabled ) - { - registerclientfield( "allplayers", "navcard_held", 1, 4, "int" ); - level.navcards = []; - level.navcards[ 0 ] = "navcard_held_zm_transit"; - level.navcards[ 1 ] = "navcard_held_zm_highrise"; - level.navcards[ 2 ] = "navcard_held_zm_buried"; - level thread setup_player_navcard_hud(); - } - } - maps/mp/zombies/_zm_utility::register_offhand_weapons_for_level_defaults(); - level thread drive_client_connected_notifies(); - - maps/mp/zombies/_zm_zonemgr::init(); - maps/mp/zombies/_zm_unitrigger::init(); - maps/mp/zombies/_zm_audio::init(); - maps/mp/zombies/_zm_blockers::init(); - //maps/mp/zombies/_zm_bot::init(); - maps/mp/zombies/_zm_clone::init(); - maps/mp/zombies/_zm_buildables::init(); - maps/mp/zombies/_zm_equipment::init(); - maps/mp/zombies/_zm_laststand::init(); - maps/mp/zombies/_zm_magicbox::init(); - maps/mp/zombies/_zm_perks::init(); - - maps/mp/zombies/_zm_playerhealth::init(); - - maps/mp/zombies/_zm_power::init(); - maps/mp/zombies/_zm_powerups::init(); - maps/mp/zombies/_zm_score::init(); - maps/mp/zombies/_zm_spawner::init(); - maps/mp/zombies/_zm_gump::init(); - //maps/mp/zombies/_zm_timer::init(); - maps/mp/zombies/_zm_traps::init(); - maps/mp/zombies/_zm_weapons::init(); - init_function_overrides(); - level thread last_stand_pistol_rank_init(); - level thread maps/mp/zombies/_zm_tombstone::init(); - level thread post_all_players_connected(); - init_utility(); - maps/mp/_utility::registerclientsys( "lsm" ); - maps/mp/zombies/_zm_stats::init(); - initializestattracking(); - if ( get_players().size <= 1 ) - { - incrementcounter( "global_solo_games", 1 ); - } - /* - else if ( level.systemlink ) - { - incrementcounter( "global_systemlink_games", 1 ); - } - else if ( getDvarInt( "splitscreen_playerCount" ) == get_players().size ) - { - incrementcounter( "global_splitscreen_games", 1 ); - } - */ - else - { - incrementcounter( "global_coop_games", 1 ); - } - maps/mp/zombies/_zm_utility::onplayerconnect_callback( ::zm_on_player_connect ); - maps/mp/zombies/_zm_pers_upgrades::pers_upgrade_init(); - set_demo_intermission_point(); - level thread maps/mp/zombies/_zm_ffotd::main_end(); - level thread track_players_intersection_tracker(); - level thread onallplayersready(); - level thread startunitriggers(); - level thread maps/mp/gametypes_zm/_zm_gametype::post_init_gametype(); -} - -post_main() //checked matches cerberus output -{ - level thread init_custom_ai_type(); -} - -startunitriggers() //checked matches cerberus output -{ - flag_wait_any( "start_zombie_round_logic", "start_encounters_match_logic" ); - level thread maps/mp/zombies/_zm_unitrigger::main(); -} - -drive_client_connected_notifies() //checked matches cerberus output //matches cerberus csc output -{ - while ( 1 ) - { - level waittill( "connected", player ); - player reset_rampage_bookmark_kill_times(); - player callback( "on_player_connect" ); - } -} - -fade_out_intro_screen_zm( hold_black_time, fade_out_time, destroyed_afterwards ) //checked changed to match cerberus output -{ - if ( !isDefined( level.introscreen ) ) - { - level.introscreen = newhudelem(); - level.introscreen.x = 0; - level.introscreen.y = 0; - level.introscreen.horzalign = "fullscreen"; - level.introscreen.vertalign = "fullscreen"; - level.introscreen.foreground = 0; - level.introscreen setshader( "black", 640, 480 ); - level.introscreen.immunetodemogamehudsettings = 1; - level.introscreen.immunetodemofreecamera = 1; - wait 0.05; - } - level.introscreen.alpha = 1; - if ( isDefined( hold_black_time ) ) - { - wait hold_black_time; - } - else - { - wait 0.2; - } - if ( !isDefined( fade_out_time ) ) - { - fade_out_time = 1.5; - } - level.introscreen fadeovertime( fade_out_time ); - level.introscreen.alpha = 0; - wait 1.6; - level.passed_introscreen = 1; - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] setclientuivisibilityflag( "hud_visible", 1 ); - if ( is_true( level.player_movement_suppressed ) ) - { - players[ i ] freezecontrols( level.player_movement_suppressed ); - i++; - continue; - } - else - { - players[ i ] freezecontrols( 0 ); - } - i++; - } - if ( destroyed_afterwards == 1 ) - { - level.introscreen destroy(); - } - flag_set( "initial_blackscreen_passed" ); -} - -onallplayersready() //checked changed to match cerberus output -{ - players = get_players(); - while ( players.size == 0 ) - { - players = get_players(); - wait 0.1; - } - player_count_actual = 0; - //fixed fast restart - while ( player_count_actual < players.size ) - { - players = get_players(); - player_count_actual = 0; - for ( i = 0; i < players.size; i++ ) - { - players[ i ] freezecontrols( 1 ); - if ( players[ i ].sessionstate == "playing" ) - { - player_count_actual++; - } - } - wait 0.1; - } - setinitialplayersconnected(); - players = get_players(); - if ( players.size == 1 && getDvarInt( "scr_zm_enable_bots" ) == 1 ) - { - level thread add_bots(); - flag_set( "initial_players_connected" ); - } - else - { - players = get_players(); - if ( players.size == 1 ) - { - flag_set( "solo_game" ); - level.solo_lives_given = 0; - foreach ( player in players ) - { - player.lives = 0; - } - level set_default_laststand_pistol( 1 ); - } - flag_set( "initial_players_connected" ); - while ( !aretexturesloaded() ) - { - wait 0.05; - } - thread start_zombie_logic_in_x_sec( 3 ); - } - fade_out_intro_screen_zm( 5, 1.5, 1 ); -} - -start_zombie_logic_in_x_sec( time_to_wait ) //checked matches cerberus output -{ - wait time_to_wait; - flag_set( "start_zombie_round_logic" ); -} - -getallotherplayers() //checked changed to match cerberus output -{ - aliveplayers = []; - i = 0; - players = getArrayKeys( level.players ); - while ( i < players.size ) - { - if ( !isDefined( players[ i ] ) ) - { - i++; - continue; - } - player = players[ i ]; - if ( player.sessionstate != "playing" || player == self ) - { - i++; - continue; - } - i++; - aliveplayers[ aliveplayers.size ] = player; - } - return aliveplayers; -} - -getfreespawnpoint( spawnpoints, player ) //checked changed to match cerberus output -{ - if ( !isDefined( spawnpoints ) ) - { - return undefined; - } - if ( !isDefined( game[ "spawns_randomized" ] ) ) - { - game[ "spawns_randomized" ] = 1; - spawnpoints = array_randomize( spawnpoints ); - random_chance = randomint( 100 ); - if ( random_chance > 50 ) - { - set_game_var( "side_selection", 1 ); - } - else - { - set_game_var( "side_selection", 2 ); - } - } - side_selection = get_game_var( "side_selection" ); - if ( get_game_var( "switchedsides" ) ) - { - if ( side_selection == 2 ) - { - side_selection = 1; - } - else - { - if ( side_selection == 1 ) - { - side_selection = 2; - } - } - } - if ( isdefined( player ) && isdefined( player.team ) ) - { - i = 0; - while ( isdefined( spawnpoints ) && i < spawnpoints.size ) - { - if ( side_selection == 1 ) - { - if ( player.team != "allies" && isdefined( spawnpoints[ i ].script_int ) && spawnpoints[ i ].script_int == 1 ) - { - arrayremovevalue( spawnpoints, spawnpoints[ i ] ); - i = 0; - } - else if ( player.team == "allies" && isdefined( spawnpoints[ i ].script_int) && spawnpoints[ i ].script_int == 2 ) - { - arrayremovevalue( spawnpoints, spawnpoints[ i ] ); - i = 0; - } - else - { - i++; - } - } - else //changed to be like beta dump - { - if ( player.team == "allies" && isdefined( spawnpoints[ i ].script_int ) && spawnpoints[ i ].script_int == 1 ) - { - arrayremovevalue(spawnpoints, spawnpoints[i]); - i = 0; - } - else if ( player.team != "allies" && isdefined( spawnpoints[ i ].script_int ) && spawnpoints[ i ].script_int == 2 ) - { - arrayremovevalue( spawnpoints, spawnpoints[ i ] ); - i = 0; - } - else - { - i++; - } - } - } - } - if ( !isdefined( self.playernum ) ) - { - if ( self.team == "allies" ) - { - self.playernum = get_game_var( "_team1_num" ); - set_game_var( "_team1_num", self.playernum + 1 ); - } - else - { - self.playernum = get_game_var( "_team2_num" ); - set_game_var( "_team2_num", self.playernum + 1 ); - } - } - for ( j = 0; j < spawnpoints.size; j++ ) - { - if ( !isdefined( spawnpoints[ j ].en_num ) ) - { - for ( m = 0; m < spawnpoints.size; m++ ) - { - spawnpoints[ m ].en_num = m; - } - } - else if ( spawnpoints[ j ].en_num == self.playernum ) - { - return spawnpoints[ j ]; - } - } - return spawnpoints[ 0 ]; -} - -delete_in_createfx() //checked changed to match cerberus output -{ - exterior_goals = getstructarray("exterior_goal", "targetname"); - for ( i = 0; i < exterior_goals.size; i++ ) - { - if ( !isdefined( exterior_goals[ i ].target ) ) - { - break; - } - targets = getentarray( exterior_goals[i].target, "targetname" ); - for ( j = 0; j < targets.size; j++ ) - { - targets[ j ] self_delete(); - } - } - if ( isdefined( level.level_createfx_callback_thread ) ) - { - level thread [[ level.level_createfx_callback_thread ]](); - } -} - -add_bots() //checked changed to match cerberus output -{ - host = gethostplayer(); - while ( !isDefined( host ) ) - { - wait 0.05; - host = gethostplayer(); - } - wait 4; - zbot_spawn(); - setdvar( "bot_AllowMovement", "1" ); - setdvar( "bot_PressAttackBtn", "1" ); - setdvar( "bot_PressMeleeBtn", "1" ); - while ( get_players().size < 2 ) - { - wait 0.05; - } - players = get_players(); - i = 0; - for ( i = 0; i < players.size; i++ ) - { - players[ i ] freezecontrols( 0 ); - } - level.numberbotsadded = 1; - flag_set( "start_zombie_round_logic" ); -} - -zbot_spawn() //checked matches cerberus output -{ - player = gethostplayer(); - spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); - spawnpoint = getfreespawnpoint( spawnpoints ); - bot = addtestclient(); - if ( !isDefined( bot ) ) - { - return; - } - bot.pers[ "isBot" ] = 1; - bot.equipment_enabled = 0; - yaw = spawnpoint.angles[ 1 ]; - bot thread zbot_spawn_think( spawnpoint.origin, yaw ); - return bot; -} - -zbot_spawn_think( origin, yaw ) //checked matches cerberus output -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self setorigin( origin ); - angles = ( 0, yaw, 0 ); - self setplayerangles( angles ); - } -} - -post_all_players_connected() //checked matches cerberus output -{ - level thread end_game(); - flag_wait( "start_zombie_round_logic" ); - level thread clear_mature_blood(); - level thread round_end_monitor(); - if ( !level.zombie_anim_intro ) - { - if ( isDefined( level._round_start_func ) ) - { - level thread [[ level._round_start_func ]](); - } - } - level thread players_playing(); - disablegrenadesuicide(); - level.startinvulnerabletime = getDvarInt( "player_deathInvulnerableTime" ); - if ( !isDefined( level.music_override ) ) - { - level.music_override = 0; - } -} - -init_custom_ai_type() //checked changed to match cerberus output -{ - if ( isdefined( level.custom_ai_type ) ) - { - for ( i = 0; i < level.custom_ai_type.size; i++ ) - { - [[ level.custom_ai_type[ i ] ]](); - } - } -} - -zombiemode_melee_miss() //checked matches cerberus output -{ - if ( isDefined( self.enemy.curr_pay_turret ) ) - { - self.enemy dodamage( getDvarInt( "ai_meleeDamage" ), self.origin, self, self, "none", "melee" ); - } -} - -player_track_ammo_count() //checked changed to match cerberus output -{ - self notify( "stop_ammo_tracking" ); - self endon( "disconnect" ); - self endon( "stop_ammo_tracking" ); - ammolowcount = 0; - ammooutcount = 0; - while ( 1 ) - { - wait 0.5; - weap = self getcurrentweapon(); - if ( !isdefined( weap ) || weap == "none" || !can_track_ammo( weap ) ) - { - continue; - } - if ( self getammocount( weap ) > 5 || self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - ammooutcount = 0; - ammolowcount = 0; - continue; - } - if ( self getammocount( weap ) > 0 ) - { - if ( ammolowcount < 1 ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "ammo_low" ); - ammolowcount++; - } - } - else if ( ammooutcount < 1 ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "ammo_out" ); - ammooutcount++; - } - wait 20; - } -} - -can_track_ammo( weap ) //checked changed to match cerberus output -{ - if ( !isDefined( weap ) ) - { - return 0; - } - switch( weap ) - { - case "alcatraz_shield_zm": - case "chalk_draw_zm": - case "death_throe_zm": - case "equip_dieseldrone_zm": - case "equip_gasmask_zm": - case "humangun_upgraded_zm": - case "humangun_zm": - case "lower_equip_gasmask_zm": - case "no_hands_zm": - case "none": - case "riotshield_zm": - case "screecher_arms_zm": - case "slowgun_upgraded_zm": - case "slowgun_zm": - case "tazer_knuckles_upgraded_zm": - case "tazer_knuckles_zm": - case "time_bomb_detonator_zm": - case "time_bomb_zm": - case "zombie_bowie_flourish": - case "zombie_builder_zm": - case "zombie_fists_zm": - case "zombie_knuckle_crack": - case "zombie_sickle_flourish": - case "zombie_tazer_flourish": - return 0; - default: - if ( is_zombie_perk_bottle( weap ) || is_placeable_mine( weap ) || is_equipment( weap ) || issubstr( weap, "knife_ballistic_" ) || getsubstr( weap, 0, 3 ) != "gl_" || weaponfuellife( weap ) > 0 || weap == level.revive_tool ) - { - return 0; - } - } - return 1; -} - -spawn_vo() //checked matches cerberus output -{ - wait 1; - players = get_players(); - if ( players.size > 1 ) - { - player = random( players ); - index = maps/mp/zombies/_zm_weapons::get_player_index( player ); - player thread spawn_vo_player( index, players.size ); - } -} - -spawn_vo_player( index, num ) //checked matches cerberus output -{ - sound = "plr_" + index + "_vox_" + num + "play"; - self playsoundwithnotify( sound, "sound_done" ); - self waittill( "sound_done" ); -} - -precache_shaders() //checked matches cerberus output -{ - precacheshader( "hud_chalk_1" ); - precacheshader( "hud_chalk_2" ); - precacheshader( "hud_chalk_3" ); - precacheshader( "hud_chalk_4" ); - precacheshader( "hud_chalk_5" ); - precacheshader( "zom_icon_community_pot" ); - precacheshader( "zom_icon_community_pot_strip" ); - precacheshader( "zom_icon_player_life" ); - precacheshader( "waypoint_revive" ); -} - -precache_models() //checked matches cerberus output -{ - precachemodel( "p_zom_win_bars_01_vert04_bend_180" ); - precachemodel( "p_zom_win_bars_01_vert01_bend_180" ); - precachemodel( "p_zom_win_bars_01_vert04_bend" ); - precachemodel( "p_zom_win_bars_01_vert01_bend" ); - precachemodel( "p_zom_win_cell_bars_01_vert04_bent" ); - precachemodel( "p_zom_win_cell_bars_01_vert01_bent" ); - precachemodel( "tag_origin" ); - precachemodel( "zombie_z_money_icon" ); - if ( isDefined( level.precachecustomcharacters ) ) - { - self [[ level.precachecustomcharacters ]](); - } -} - -init_shellshocks() //checked matches cerberus output -{ - level.player_killed_shellshock = "zombie_death"; - precacheshellshock( level.player_killed_shellshock ); - precacheshellshock( "pain" ); - precacheshellshock( "explosion" ); -} - -init_strings() //checked matches cerberus output -{ - precachestring( &"ZOMBIE_WEAPONCOSTAMMO" ); - precachestring( &"ZOMBIE_ROUND" ); - precachestring( &"SCRIPT_PLUS" ); - precachestring( &"ZOMBIE_GAME_OVER" ); - precachestring( &"ZOMBIE_SURVIVED_ROUND" ); - precachestring( &"ZOMBIE_SURVIVED_ROUNDS" ); - precachestring( &"ZOMBIE_SURVIVED_NOMANS" ); - precachestring( &"ZOMBIE_EXTRA_LIFE" ); - add_zombie_hint( "undefined", &"ZOMBIE_UNDEFINED" ); - add_zombie_hint( "default_treasure_chest", &"ZOMBIE_RANDOM_WEAPON_COST" ); - add_zombie_hint( "default_treasure_chest_950", &"ZOMBIE_RANDOM_WEAPON_950" ); - add_zombie_hint( "powerup_fire_sale_cost", &"ZOMBIE_FIRE_SALE_COST" ); - add_zombie_hint( "default_buy_barrier_piece_10", &"ZOMBIE_BUTTON_BUY_BACK_BARRIER_10" ); - add_zombie_hint( "default_buy_barrier_piece_20", &"ZOMBIE_BUTTON_BUY_BACK_BARRIER_20" ); - add_zombie_hint( "default_buy_barrier_piece_50", &"ZOMBIE_BUTTON_BUY_BACK_BARRIER_50" ); - add_zombie_hint( "default_buy_barrier_piece_100", &"ZOMBIE_BUTTON_BUY_BACK_BARRIER_100" ); - add_zombie_hint( "default_reward_barrier_piece", &"ZOMBIE_BUTTON_REWARD_BARRIER" ); - add_zombie_hint( "default_reward_barrier_piece_10", &"ZOMBIE_BUTTON_REWARD_BARRIER_10" ); - add_zombie_hint( "default_reward_barrier_piece_20", &"ZOMBIE_BUTTON_REWARD_BARRIER_20" ); - add_zombie_hint( "default_reward_barrier_piece_30", &"ZOMBIE_BUTTON_REWARD_BARRIER_30" ); - add_zombie_hint( "default_reward_barrier_piece_40", &"ZOMBIE_BUTTON_REWARD_BARRIER_40" ); - add_zombie_hint( "default_reward_barrier_piece_50", &"ZOMBIE_BUTTON_REWARD_BARRIER_50" ); - add_zombie_hint( "default_buy_debris", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_COST" ); - add_zombie_hint( "default_buy_debris_100", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_100" ); - add_zombie_hint( "default_buy_debris_200", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_200" ); - add_zombie_hint( "default_buy_debris_250", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_250" ); - add_zombie_hint( "default_buy_debris_500", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_500" ); - add_zombie_hint( "default_buy_debris_750", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_750" ); - add_zombie_hint( "default_buy_debris_1000", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_1000" ); - add_zombie_hint( "default_buy_debris_1250", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_1250" ); - add_zombie_hint( "default_buy_debris_1500", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_1500" ); - add_zombie_hint( "default_buy_debris_1750", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_1750" ); - add_zombie_hint( "default_buy_debris_2000", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_2000" ); - add_zombie_hint( "default_buy_debris_3000", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_3000" ); - add_zombie_hint( "default_buy_door", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_COST" ); - add_zombie_hint( "default_buy_door_close", &"ZOMBIE_BUTTON_BUY_CLOSE_DOOR" ); - add_zombie_hint( "default_buy_door_100", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_100" ); - add_zombie_hint( "default_buy_door_200", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_200" ); - add_zombie_hint( "default_buy_door_250", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_250" ); - add_zombie_hint( "default_buy_door_500", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_500" ); - add_zombie_hint( "default_buy_door_750", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_750" ); - add_zombie_hint( "default_buy_door_1000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_1000" ); - add_zombie_hint( "default_buy_door_1250", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_1250" ); - add_zombie_hint( "default_buy_door_1500", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_1500" ); - add_zombie_hint( "default_buy_door_1750", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_1750" ); - add_zombie_hint( "default_buy_door_2000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_2000" ); - add_zombie_hint( "default_buy_door_2500", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_2500" ); - add_zombie_hint( "default_buy_door_3000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_3000" ); - add_zombie_hint( "default_buy_door_4000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_4000" ); - add_zombie_hint( "default_buy_door_8000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_8000" ); - add_zombie_hint( "default_buy_door_16000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_16000" ); - add_zombie_hint( "default_buy_area", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_COST" ); - add_zombie_hint( "default_buy_area_100", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_100" ); - add_zombie_hint( "default_buy_area_200", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_200" ); - add_zombie_hint( "default_buy_area_250", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_250" ); - add_zombie_hint( "default_buy_area_500", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_500" ); - add_zombie_hint( "default_buy_area_750", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_750" ); - add_zombie_hint( "default_buy_area_1000", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_1000" ); - add_zombie_hint( "default_buy_area_1250", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_1250" ); - add_zombie_hint( "default_buy_area_1500", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_1500" ); - add_zombie_hint( "default_buy_area_1750", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_1750" ); - add_zombie_hint( "default_buy_area_2000", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_2000" ); -} - -init_sounds() //checked matches cerberus output -{ - add_sound( "end_of_round", "mus_zmb_round_over" ); - add_sound( "end_of_game", "mus_zmb_game_over" ); - add_sound( "chalk_one_up", "mus_zmb_chalk" ); - add_sound( "purchase", "zmb_cha_ching" ); - add_sound( "no_purchase", "zmb_no_cha_ching" ); - add_sound( "playerzombie_usebutton_sound", "zmb_zombie_vocals_attack" ); - add_sound( "playerzombie_attackbutton_sound", "zmb_zombie_vocals_attack" ); - add_sound( "playerzombie_adsbutton_sound", "zmb_zombie_vocals_attack" ); - add_sound( "zombie_head_gib", "zmb_zombie_head_gib" ); - add_sound( "rebuild_barrier_piece", "zmb_repair_boards" ); - add_sound( "rebuild_barrier_metal_piece", "zmb_metal_repair" ); - add_sound( "rebuild_barrier_hover", "zmb_boards_float" ); - add_sound( "debris_hover_loop", "zmb_couch_loop" ); - add_sound( "break_barrier_piece", "zmb_break_boards" ); - add_sound( "grab_metal_bar", "zmb_bar_pull" ); - add_sound( "break_metal_bar", "zmb_bar_break" ); - add_sound( "drop_metal_bar", "zmb_bar_drop" ); - add_sound( "blocker_end_move", "zmb_board_slam" ); - add_sound( "barrier_rebuild_slam", "zmb_board_slam" ); - add_sound( "bar_rebuild_slam", "zmb_bar_repair" ); - add_sound( "zmb_rock_fix", "zmb_break_rock_barrier_fix" ); - add_sound( "zmb_vent_fix", "evt_vent_slat_repair" ); - add_sound( "door_slide_open", "zmb_door_slide_open" ); - add_sound( "door_rotate_open", "zmb_door_slide_open" ); - add_sound( "debris_move", "zmb_weap_wall" ); - add_sound( "open_chest", "zmb_lid_open" ); - add_sound( "music_chest", "zmb_music_box" ); - add_sound( "close_chest", "zmb_lid_close" ); - add_sound( "weapon_show", "zmb_weap_wall" ); - add_sound( "break_stone", "break_stone" ); -} - -init_levelvars() //checked changed to match cerberus output -{ - level.is_zombie_level = 1; - level.laststandpistol = "m1911_zm"; - level.default_laststandpistol = "m1911_zm"; - level.default_solo_laststandpistol = "m1911_upgraded_zm"; - level.start_weapon = "m1911_zm"; - level.first_round = 1; - level.start_round = getgametypesetting( "startRound" ); - level.round_number = level.start_round; - level.enable_magic = getgametypesetting( "magic" ); - level.headshots_only = getgametypesetting( "headshotsonly" ); - level.player_starting_points = level.round_number * 500; - level.round_start_time = 0; - level.pro_tips_start_time = 0; - level.intermission = 0; - level.dog_intermission = 0; - level.zombie_total = 0; - level.total_zombies_killed = 0; - level.hudelem_count = 0; - level.zombie_spawn_locations = []; - level.zombie_rise_spawners = []; - level.current_zombie_array = []; - level.current_zombie_count = 0; - level.zombie_total_subtract = 0; - level.destructible_callbacks = []; - level.zombie_vars = []; - foreach ( team in level.teams ) - { - level.zombie_vars[ team ] = []; - } - difficulty = 1; - column = int( difficulty ) + 1; - set_zombie_var( "zombie_health_increase", 100, 0, column ); - set_zombie_var( "zombie_health_increase_multiplier", 0.1, 1, column ); - set_zombie_var( "zombie_health_start", 150, 0, column ); - set_zombie_var( "zombie_spawn_delay", 2, 1, column ); - set_zombie_var( "zombie_new_runner_interval", 10, 0, column ); - set_zombie_var( "zombie_move_speed_multiplier", 8, 0, column ); - set_zombie_var( "zombie_move_speed_multiplier_easy", 2, 0, column ); - set_zombie_var( "zombie_max_ai", 24, 0, column ); - set_zombie_var( "zombie_ai_per_player", 6, 0, column ); - set_zombie_var( "below_world_check", -1000 ); - set_zombie_var( "spectators_respawn", 1 ); - set_zombie_var( "zombie_use_failsafe", 1 ); - set_zombie_var( "zombie_between_round_time", 10 ); - set_zombie_var( "zombie_intermission_time", 15 ); - set_zombie_var( "game_start_delay", 0, 0, column ); - set_zombie_var( "penalty_no_revive", 0.1, 1, column ); - set_zombie_var( "penalty_died", 0, 1, column ); - set_zombie_var( "penalty_downed", 0.05, 1, column ); - set_zombie_var( "starting_lives", 1, 0, column ); - set_zombie_var( "zombie_score_kill_4player", 50 ); - set_zombie_var( "zombie_score_kill_3player", 50 ); - set_zombie_var( "zombie_score_kill_2player", 50 ); - set_zombie_var( "zombie_score_kill_1player", 50 ); - set_zombie_var( "zombie_score_kill_4p_team", 30 ); - set_zombie_var( "zombie_score_kill_3p_team", 35 ); - set_zombie_var( "zombie_score_kill_2p_team", 45 ); - set_zombie_var( "zombie_score_kill_1p_team", 0 ); - set_zombie_var( "zombie_score_damage_normal", 10 ); - set_zombie_var( "zombie_score_damage_light", 10 ); - set_zombie_var( "zombie_score_bonus_melee", 80 ); - set_zombie_var( "zombie_score_bonus_head", 50 ); - set_zombie_var( "zombie_score_bonus_neck", 20 ); - set_zombie_var( "zombie_score_bonus_torso", 10 ); - set_zombie_var( "zombie_score_bonus_burn", 10 ); - set_zombie_var( "zombie_flame_dmg_point_delay", 500 ); - set_zombie_var( "zombify_player", 0 ); - /* - if ( issplitscreen() ) - { - set_zombie_var( "zombie_timer_offset", 280 ); - } - */ - level thread init_player_levelvars(); - level.gamedifficulty = getgametypesetting( "zmDifficulty" ); - if ( level.gamedifficulty == 0 ) - { - level.zombie_move_speed = level.round_number * level.zombie_vars[ "zombie_move_speed_multiplier_easy" ]; - } - else - { - level.zombie_move_speed = level.round_number * level.zombie_vars[ "zombie_move_speed_multiplier" ]; - } - if ( level.round_number == 1 ) - { - //was 100 changed to match bo1 _zombiemode.gsc - level.zombie_move_speed = 1; - } - i = 1; - while ( i <= level.round_number ) - { - timer = level.zombie_vars[ "zombie_spawn_delay" ]; - if ( timer > 0.08) - { - level.zombie_vars[ "zombie_spawn_delay" ] = timer * 0.95; - i++; - continue; - } - if ( timer < 0.08 ) - { - level.zombie_vars[ "zombie_spawn_delay" ] = 0.08; - } - i++; - } - level.speed_change_max = 0; - level.speed_change_num = 0; -} - -init_player_levelvars() //checked changed to match cerberus output -{ - flag_wait( "start_zombie_round_logic" ); - difficulty = 1; - column = int( difficulty ) + 1; - for ( i = 0; i < 8; i++ ) - { - points = 500; - if ( i > 3 ) - { - points = 3000; - } - points = set_zombie_var( "zombie_score_start_" + i + 1 + "p", points, 0, column ); - } -} - -init_dvars() //checked matches cerberus output -{ - if ( getDvar( "zombie_debug" ) == "" ) - { - setdvar( "zombie_debug", "0" ); - } - if ( getDvar( "scr_zm_enable_bots" ) == "" ) - { - setdvar( "scr_zm_enable_bots", "0" ); - } - if ( getDvar( "zombie_cheat" ) == "" ) - { - setdvar( "zombie_cheat", "0" ); - } - if ( level.script != "zombie_cod5_prototype" ) - { - setdvar( "magic_chest_movable", "1" ); - } - setdvar( "revive_trigger_radius", "75" ); - setdvar( "player_lastStandBleedoutTime", "45" ); - setdvar( "scr_deleteexplosivesonspawn", "0" ); -} - -init_function_overrides() //checked does not match cerberus output did not change -{ - level.callbackplayerdamage = ::callback_playerdamage; - level.overrideplayerdamage = ::player_damage_override; - level.callbackplayerkilled = ::player_killed_override; - level.playerlaststand_func = ::player_laststand; - level.callbackplayerlaststand = ::callback_playerlaststand; - level.prevent_player_damage = ::player_prevent_damage; - level.callbackactorkilled = ::actor_killed_override; - level.callbackactordamage = ::actor_damage_override_wrapper; - - level.custom_introscreen = ::zombie_intro_screen; - level.custom_intermission = ::player_intermission; - level.global_damage_func = maps/mp/zombies/_zm_spawner::zombie_damage; - level.global_damage_func_ads = maps/mp/zombies/_zm_spawner::zombie_damage_ads; - level.reset_clientdvars = ::onplayerconnect_clientdvars; - level.zombie_last_stand = ::last_stand_pistol_swap; - level.zombie_last_stand_pistol_memory = ::last_stand_save_pistol_ammo; - level.zombie_last_stand_ammo_return = ::last_stand_restore_pistol_ammo; - level.player_becomes_zombie = ::zombify_player; - level.validate_enemy_path_length = ::default_validate_enemy_path_length; - level.zm_laststand_playerlaststand = maps/mp/zombies/_zm_laststand::playerlaststand; -} - -callback_playerlaststand( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) //checked matches cerberus output -{ - self endon( "disconnect" ); - [[ level.zm_laststand_playerlaststand ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); -} - -codecallback_destructibleevent( event, param1, param2, param3 ) //see info.md No 8. -{ - if ( event == "broken" ) - { - notify_type = param1; - attacker = param2; - weapon = param3; - if ( isDefined( level.destructible_callbacks[ notify_type ] ) ) - { - self thread [[ level.destructible_callbacks[ notify_type ] ]]( notify_type, attacker ); - } - self notify( "broken", notify_type, attacker ); //added missing notify parameters from cerberus output - } - else if ( event == "breakafter" ) - { - piece = param1; - time = param2; - damage = param3; - self thread breakafter( time, damage, piece ); - } -} - -breakafter( time, damage, piece ) //checked matches cerberus output -{ - self notify( "breakafter" ); - self endon( "breakafter" ); - wait time; - self dodamage( damage, self.origin, undefined, undefined ); -} - -callback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) //checked changed to match cerberus output //checked against bo3 _zm matches within reason -{ - if ( isDefined( eattacker ) && isplayer( eattacker ) && eattacker.sessionteam == self.sessionteam && !eattacker hasperk( "specialty_noname" ) && isDefined( self.is_zombie ) && !self.is_zombie ) - { - self process_friendly_fire_callbacks( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - if ( self != eattacker ) - { - return; - } - else if ( smeansofdeath != "MOD_GRENADE_SPLASH" && smeansofdeath != "MOD_GRENADE" && smeansofdeath != "MOD_EXPLOSIVE" && smeansofdeath != "MOD_PROJECTILE" && smeansofdeath != "MOD_PROJECTILE_SPLASH" && smeansofdeath != "MOD_BURNED" && smeansofdeath != "MOD_SUICIDE" ) - { - return; - } - } - if ( is_true( level.pers_upgrade_insta_kill ) ) - { - self maps/mp/zombies/_zm_pers_upgrades_functions::pers_insta_kill_melee_swipe( smeansofdeath, eattacker ); - } - if ( isDefined( self.overrideplayerdamage ) ) - { - idamage = self [[ self.overrideplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); - } - else if ( isDefined( level.overrideplayerdamage ) ) - { - idamage = self [[ level.overrideplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); - } - if ( is_true( self.magic_bullet_shield ) ) - { - maxhealth = self.maxhealth; - self.health += idamage; - self.maxhealth = maxhealth; - } - if ( isDefined( self.divetoprone ) && self.divetoprone == 1 ) - { - if ( smeansofdeath == "MOD_GRENADE_SPLASH" ) - { - dist = distance2d( vpoint, self.origin ); - if ( dist > 32 ) - { - dot_product = vectordot( anglesToForward( self.angles ), vdir ); - if ( dot_product > 0 ) - { - idamage = int( idamage * 0.5 ); - } - } - } - } - if ( isDefined( level.prevent_player_damage ) ) - { - if ( self [[ level.prevent_player_damage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) ) - { - return; - } - } - idflags |= level.idflags_no_knockback; - if ( idamage > 0 && shitloc == "riotshield" ) - { - shitloc = "torso_upper"; - } - self finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); -} - -finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) //checked matches cerberus output -{ - self finishplayerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); -} - -register_player_friendly_fire_callback( callback ) //checked matches cerberus output -{ - if ( !isDefined( level.player_friendly_fire_callbacks ) ) - { - level.player_friendly_fire_callbacks = []; - } - level.player_friendly_fire_callbacks[ level.player_friendly_fire_callbacks.size ] = callback; -} - -process_friendly_fire_callbacks( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) //checked changed to match cerberus output -{ - if ( isdefined( level.player_friendly_fire_callbacks ) ) - { - foreach ( callback in level.player_friendly_fire_callbacks ) - { - self [[ callback ]](einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex); - } - } -} - -init_flags() //checked matches cerberus output -{ - flag_init( "solo_game" ); - flag_init( "start_zombie_round_logic" ); - flag_init( "start_encounters_match_logic" ); - flag_init( "spawn_point_override" ); - flag_init( "power_on" ); - flag_init( "crawler_round" ); - //minor change for debugging purposes - flag_init( "spawn_zombies", 1 ); //default 1 - flag_init( "dog_round" ); - flag_init( "begin_spawning" ); - flag_init( "end_round_wait" ); - flag_init( "wait_and_revive" ); - flag_init( "instant_revive" ); - flag_init( "initial_blackscreen_passed" ); - flag_init( "initial_players_connected" ); -} - -init_client_flags() //checked matches cerberus output -{ - //level._zombie_scriptmover_flag_box_random = 15; //from _zm.csc cerberus output - if ( is_true( level.use_clientside_board_fx ) ) - { - level._zombie_scriptmover_flag_board_horizontal_fx = 14; - level._zombie_scriptmover_flag_board_vertical_fx = 13; - } - if ( is_true( level.use_clientside_rock_tearin_fx ) ) - { - level._zombie_scriptmover_flag_rock_fx = 12; - } - level._zombie_player_flag_cloak_weapon = 14; - if ( !is_true( level.disable_deadshot_clientfield ) ) - { - registerclientfield( "toplayer", "deadshot_perk", 1, 1, "int" ); - } - registerclientfield( "actor", "zombie_riser_fx", 1, 1, "int" ); - if ( !is_true( level._no_water_risers ) ) - { - registerclientfield( "actor", "zombie_riser_fx_water", 1, 1, "int" ); - } - if ( is_true( level._foliage_risers ) ) - { - registerclientfield( "actor", "zombie_riser_fx_foliage", 12000, 1, "int" ); - } - if ( is_true( level.risers_use_low_gravity_fx ) ) - { - registerclientfield( "actor", "zombie_riser_fx_lowg", 1, 1, "int" ); - } -} - -init_fx() //checked partially changed to match cerberus output //csc partially matches cerberus output -{ - //this function does not cause exe_client_field_mismatch if the effects aren't loaded - if ( !isDefined( level._uses_default_wallbuy_fx ) ) - { - level._uses_default_wallbuy_fx = 1; - } - if ( !isDefined( level._uses_sticky_grenades ) ) - { - level._uses_sticky_grenades = 1; - if ( level.script == "zm_prison" ) - { - level._uses_sticky_grenades = 0; - } - } - if ( !isDefined( level.disable_fx_zmb_wall_buy_semtex ) ) - { - level.disable_fx_zmb_wall_buy_semtex = 0; - } - if ( !isDefined( level.fx_exclude_edge_fog ) ) - { - level.fx_exclude_edge_fog = 0; - } - if ( !isDefined( level.fx_exclude_default_eye_glow ) ) - { - level.fx_exclude_default_eye_glow = 0; - } - if ( !isDefined( level.fx_exclude_tesla_head_light ) ) - { - level.fx_exclude_tesla_head_light = 0; - } - if ( !isDefined( level.fx_exclude_default_explosion ) ) - { - level.fx_exclude_default_explosion = 0; - } - if ( !isDefined( level._uses_taser_knuckles ) ) - { - level._uses_taser_knuckles = 1; - if ( level.script == "zm_prison" ) - { - level._uses_taser_knuckles = 0; - } - } - if ( !isDefined( level.disable_fx_upgrade_aquired ) ) - { - level.disable_fx_upgrade_aquired = 0; - if ( level.script == "zm_prison" || !maps/mp/zombies/_zm_utility::is_classic() ) - { - level.disable_fx_upgrade_aquired = 1; - } - } - level.createfx_callback_thread = ::delete_in_createfx; - level._effect[ "wood_chunk_destory" ] = loadfx( "impacts/fx_large_woodhit" ); - level._effect[ "fx_zombie_bar_break" ] = loadfx( "maps/zombie/fx_zombie_bar_break" ); - level._effect[ "fx_zombie_bar_break_lite" ] = loadfx( "maps/zombie/fx_zombie_bar_break_lite" ); - if ( !is_true( level.fx_exclude_edge_fog ) ) - { - level._effect[ "edge_fog" ] = loadfx( "maps/zombie/fx_fog_zombie_amb" ); - } - level._effect[ "chest_light" ] = loadfx( "maps/zombie/fx_zmb_tranzit_marker_glow" ); - if ( !is_true( level.fx_exclude_default_eye_glow ) ) - { - level._effect[ "eye_glow" ] = loadfx( "misc/fx_zombie_eye_single" ); - } - level._effect[ "headshot" ] = loadfx( "impacts/fx_flesh_hit" ); - level._effect[ "headshot_nochunks" ] = loadfx( "misc/fx_zombie_bloodsplat" ); - level._effect[ "bloodspurt" ] = loadfx( "misc/fx_zombie_bloodspurt" ); - if ( !is_true( level.fx_exclude_tesla_head_light ) ) - { - level._effect[ "tesla_head_light" ] = loadfx( "maps/zombie/fx_zombie_tesla_neck_spurt" ); - } - level._effect[ "zombie_guts_explosion" ] = loadfx( "maps/zombie/fx_zmb_tranzit_torso_explo" ); - level._effect[ "rise_burst_water" ] = loadfx( "maps/zombie/fx_mp_zombie_hand_dirt_burst" ); - level._effect[ "rise_billow_water" ] = loadfx( "maps/zombie/fx_mp_zombie_body_dirt_billowing" ); - level._effect[ "rise_dust_water" ] = loadfx( "maps/zombie/fx_mp_zombie_body_dust_falling" ); - level._effect[ "rise_burst" ] = loadfx( "maps/zombie/fx_mp_zombie_hand_dirt_burst" ); - level._effect[ "rise_billow" ] = loadfx( "maps/zombie/fx_mp_zombie_body_dirt_billowing" ); - level._effect[ "rise_dust" ] = loadfx( "maps/zombie/fx_mp_zombie_body_dust_falling" ); - level._effect[ "fall_burst" ] = loadfx( "maps/zombie/fx_mp_zombie_hand_dirt_burst" ); - level._effect[ "fall_billow" ] = loadfx( "maps/zombie/fx_mp_zombie_body_dirt_billowing" ); - level._effect[ "fall_dust" ] = loadfx( "maps/zombie/fx_mp_zombie_body_dust_falling" ); - level._effect[ "character_fire_death_sm" ] = loadfx( "env/fire/fx_fire_zombie_md" ); - level._effect[ "character_fire_death_torso" ] = loadfx( "env/fire/fx_fire_zombie_torso" ); - if ( !is_true( level.fx_exclude_default_explosion ) ) - { - level._effect[ "def_explosion" ] = loadfx( "explosions/fx_default_explosion" ); - } - if ( is_true( level._uses_default_wallbuy_fx ) ) //changed to match _zm.csc - { - level._effect[ "870mcs_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_870mcs" ); - level._effect[ "ak74u_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_ak74u" ); - level._effect[ "beretta93r_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_berreta93r" ); - level._effect[ "bowie_knife_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_bowie" ); - level._effect[ "claymore_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_claymore" ); - level._effect[ "m14_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_m14" ); - level._effect[ "m16_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_m16" ); - level._effect[ "mp5k_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_mp5k" ); - level._effect[ "rottweil72_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_olympia" ); - } - if ( is_true( level._uses_sticky_grenades ) ) - { - if ( !is_true( level.disable_fx_zmb_wall_buy_semtex ) ) - { - level._effect[ "sticky_grenade_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_semtex" ); - } - } - if ( is_true( level._uses_taser_knuckles ) ) - { - level._effect[ "tazer_knuckles_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_taseknuck" ); - } - if ( isDefined( level.buildable_wallbuy_weapons ) ) - { - level._effect[ "dynamic_wallbuy_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_question" ); - } - if ( !is_true( level.disable_fx_upgrade_aquired ) ) - { - level._effect[ "upgrade_aquired" ] = loadfx( "maps/zombie/fx_zmb_tanzit_upgrade" ); - } -} - -zombie_intro_screen( string1, string2, string3, string4, string5 ) //checked matches cerberus output -{ - flag_wait( "start_zombie_round_logic" ); -} - -players_playing() //checked matches cerberus output -{ - players = get_players(); - level.players_playing = players.size; - wait 20; - players = get_players(); - level.players_playing = players.size; -} - -onplayerconnect_clientdvars() //checked matches cerberus output -{ - self setclientcompass( 0 ); //was 0 - self setclientthirdperson( 0 ); - self resetfov(); - self setclientthirdpersonangle( 0 ); - self setclientammocounterhide( 1 ); - self setclientminiscoreboardhide( 1 ); - self setclienthudhardcore( 0 ); - self setclientplayerpushamount( 1 ); - self setdepthoffield( 0, 0, 512, 4000, 4, 0 ); - self setclientaimlockonpitchstrength( 0 ); - self maps/mp/zombies/_zm_laststand::player_getup_setup(); -} - -checkforalldead( excluded_player ) //checked changed to match cerberus output -{ - players = get_players(); - count = 0; - i = 0; - while ( i < players.size ) - { - if ( isdefined( excluded_player ) && excluded_player == players[ i ] ) - { - i++; - continue; - } - if ( !players[i] maps/mp/zombies/_zm_laststand::player_is_in_laststand() && players[ i ].sessionstate != "spectator" ) - { - count++; - } - i++; - } - if ( count == 0 && !is_true( level.no_end_game_check ) ) - { - level notify( "end_game" ); - } -} - -onplayerspawned() //checked matches cerberus output -{ - self endon( "disconnect" ); - self notify( "stop_onPlayerSpawned" ); - self endon( "stop_onPlayerSpawned" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self freezecontrols( 0 ); - self.hits = 0; - self init_player_offhand_weapons(); - lethal_grenade = self get_player_lethal_grenade(); - if ( !self hasweapon( lethal_grenade ) ) - { - self giveweapon( lethal_grenade ); - self setweaponammoclip( lethal_grenade, 0 ); - } - self recordplayerrevivezombies( self ); - self setactionslot( 3, "altMode" ); - self playerknockback( 0 ); - self setclientthirdperson( 0 ); - self resetfov(); - self setclientthirdpersonangle( 0 ); - self setdepthoffield( 0, 0, 512, 4000, 4, 0 ); - self cameraactivate( 0 ); - self.num_perks = 0; - self.on_lander_last_stand = undefined; - self setblur( 0, 0.1 ); - self.zmbdialogqueue = []; - self.zmbdialogactive = 0; - self.zmbdialoggroups = []; - self.zmbdialoggroup = ""; - - if ( is_true( level.player_out_of_playable_area_monitor ) ) - { - self thread player_out_of_playable_area_monitor(); - } - if ( is_true( level.player_too_many_weapons_monitor ) ) - { - self thread [[ level.player_too_many_weapons_monitor_func ]](); - } - if ( is_true( level.player_too_many_players_check ) ) - { - level thread [[ level.player_too_many_players_check_func ]](); - } - self.disabled_perks = []; - if ( isDefined( self.player_initialized ) ) - { - if ( self.player_initialized == 0 ) - { - self.player_initialized = 1; - self giveweapon( self get_player_lethal_grenade() ); - self setweaponammoclip( self get_player_lethal_grenade(), 0 ); - self setclientammocounterhide( 0 ); - self setclientminiscoreboardhide( 0 ); - self.is_drinking = 0; - self thread player_zombie_breadcrumb(); - self thread player_monitor_travel_dist(); - self thread player_monitor_time_played(); - if ( isDefined( level.custom_player_track_ammo_count ) ) - { - self thread [[ level.custom_player_track_ammo_count ]](); - } - else - { - self thread player_track_ammo_count(); - } - self thread shock_onpain(); - self thread player_grenade_watcher(); - self maps/mp/zombies/_zm_laststand::revive_hud_create(); - if ( isDefined( level.zm_gamemodule_spawn_func ) ) - { - self thread [[ level.zm_gamemodule_spawn_func ]](); - } - self thread player_spawn_protection(); - if ( !isDefined( self.lives ) ) - { - self.lives = 0; - } - } - } - } -} - -player_spawn_protection() //checked changed to match cerberus output -{ - self endon( "disconnect" ); - for ( x = 0; x < 60; x++ ) - { - self.ignoreme = 1; - wait 0.05; - } - self.ignoreme = 0; -} - -spawn_life_brush( origin, radius, height ) //checked matches cerberus output -{ - life_brush = spawn( "trigger_radius", origin, 0, radius, height ); - life_brush.script_noteworthy = "life_brush"; - return life_brush; -} - -in_life_brush() //checked changed to match cerberus output -{ - life_brushes = getentarray( "life_brush", "script_noteworthy" ); - if ( !isDefined( life_brushes ) ) - { - return 0; - } - for ( i = 0; i < life_brushes.size; i++ ) - { - if ( self istouching( life_brushes[ i ] ) ) - { - return 1; - } - } - return 0; -} - -spawn_kill_brush( origin, radius, height ) //checked matches cerberus output -{ - kill_brush = spawn( "trigger_radius", origin, 0, radius, height ); - kill_brush.script_noteworthy = "kill_brush"; - return kill_brush; -} - -in_kill_brush() //checked changed to match cerberus output -{ - kill_brushes = getentarray( "kill_brush", "script_noteworthy" ); - if ( !isDefined( kill_brushes ) ) - { - return 0; - } - for ( i = 0; i < kill_brushes.size; i++ ) - { - if ( self istouching( kill_brushes[ i ] ) ) - { - return 1; - } - } - return 0; -} - -in_enabled_playable_area() //checked changed to match cerberus output -{ - playable_area = getentarray( "player_volume", "script_noteworthy" ); - if ( !isDefined( playable_area ) ) - { - return 0; - } - for ( i = 0; i < playable_area.size; i++ ) - { - if ( maps/mp/zombies/_zm_zonemgr::zone_is_enabled( playable_area[ i ].targetname ) && self istouching( playable_area[ i ] ) ) - { - return 1; - } - } - return 0; -} - -get_player_out_of_playable_area_monitor_wait_time() //checked matches cerberus output -{ - return 3; -} - -player_out_of_playable_area_monitor() //checked changed to match cerberus output -{ - self notify( "stop_player_out_of_playable_area_monitor" ); - self endon( "stop_player_out_of_playable_area_monitor" ); - self endon( "disconnect" ); - level endon( "end_game" ); - while ( !isDefined( self.characterindex ) ) - { - wait 0.05; - } - wait ( 0.15 * self.characterindex ); - while ( 1 ) - { - if ( self.sessionstate == "spectator" ) - { - wait get_player_out_of_playable_area_monitor_wait_time(); - } - if ( !self in_life_brush() || self in_kill_brush() && !self in_enabled_playable_area() ) - { - if ( !isDefined( level.player_out_of_playable_area_monitor_callback ) || self [[ level.player_out_of_playable_area_monitor_callback ]]() ) - { - self maps/mp/zombies/_zm_stats::increment_map_cheat_stat( "cheat_out_of_playable" ); - self maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_out_of_playable", 0 ); - self maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 ); - self playlocalsound( level.zmb_laugh_alias ); - wait 0.5; - if ( get_players().size == 1 && flag( "solo_game" ) && is_true( self.waiting_to_revive ) ) - { - level notify( "end_game" ); - break; - } - else - { - self disableinvulnerability(); - self.lives = 0; - self dodamage( self.health + 1000, self.origin ); - self.bleedout_time = 0; - } - } - } - wait get_player_out_of_playable_area_monitor_wait_time(); - } -} - -get_player_too_many_weapons_monitor_wait_time() //checked matches cerberus output -{ - return 3; -} - -player_too_many_weapons_monitor_takeaway_simultaneous( primary_weapons_to_take ) //checked changed to match cerberus output -{ - self endon( "player_too_many_weapons_monitor_takeaway_sequence_done" ); - self waittill_any( "player_downed", "replace_weapon_powerup" ); - for ( i = 0; i < primary_weapons_to_take.size; i++ ) - { - self takeweapon( primary_weapons_to_take[ i ] ); - } - self maps/mp/zombies/_zm_score::minus_to_player_score( self.score ); - self give_start_weapon( 0 ); - if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - self decrement_is_drinking(); - } - else if ( flag( "solo_game" ) ) - { - self.score_lost_when_downed = 0; - } - self notify( "player_too_many_weapons_monitor_takeaway_sequence_done" ); -} - -player_too_many_weapons_monitor_takeaway_sequence( primary_weapons_to_take ) //checked changed to match cerberus output -{ - self thread player_too_many_weapons_monitor_takeaway_simultaneous( primary_weapons_to_take ); - self endon( "player_downed" ); - self endon( "replace_weapon_powerup" ); - self increment_is_drinking(); - score_decrement = round_up_to_ten( int( self.score / ( primary_weapons_to_take.size + 1 ) ) ); - for ( i = 0; i < primary_weapons_to_take.size; i++ ) - { - self playlocalsound( level.zmb_laugh_alias ); - self switchtoweapon( primary_weapons_to_take[ i ] ); - self maps/mp/zombies/_zm_score::minus_to_player_score( score_decrement ); - wait(3); - self takeweapon( primary_weapons_to_take[ i ] ); - } - self playlocalsound( level.zmb_laugh_alias ); - self maps/mp/zombies/_zm_score::minus_to_player_score( self.score ); - wait 1; - self give_start_weapon( 1 ); - self decrement_is_drinking(); - self notify( "player_too_many_weapons_monitor_takeaway_sequence_done" ); -} - -player_too_many_weapons_monitor() //checked changed to match cerberus output -{ - self notify( "stop_player_too_many_weapons_monitor" ); - self endon( "stop_player_too_many_weapons_monitor" ); - self endon( "disconnect" ); - level endon( "end_game" ); - scalar = self.characterindex; - if ( !isDefined( scalar ) ) - { - scalar = self getentitynumber(); - } - wait ( 0.15 * scalar ); - while ( 1 ) - { - if ( self has_powerup_weapon() || self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || self.sessionstate == "spectator" ) - { - wait( get_player_too_many_weapons_monitor_wait_time() ); - continue; - } - weapon_limit = get_player_weapon_limit( self ); - primaryweapons = self getweaponslistprimaries(); - if ( primaryweapons.size > weapon_limit ) - { - self maps/mp/zombies/_zm_weapons::take_fallback_weapon(); - primaryweapons = self getweaponslistprimaries(); - } - primary_weapons_to_take = []; - for ( i = 0; i < primaryweapons.size; i++ ) - { - if ( maps/mp/zombies/_zm_weapons::is_weapon_included( primaryweapons[ i ] ) || maps/mp/zombies/_zm_weapons::is_weapon_upgraded( primaryweapons[ i ] ) ) - { - primary_weapons_to_take[ primary_weapons_to_take.size ] = primaryweapons[ i ]; - } - } - if ( primary_weapons_to_take.size > weapon_limit ) - { - if ( !isDefined( level.player_too_many_weapons_monitor_callback ) || self [[ level.player_too_many_weapons_monitor_callback ]]( primary_weapons_to_take ) ) - { - self maps/mp/zombies/_zm_stats::increment_map_cheat_stat( "cheat_too_many_weapons" ); - self maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_too_many_weapons", 0 ); - self maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 ); - self thread player_too_many_weapons_monitor_takeaway_sequence( primary_weapons_to_take ); - self waittill( "player_too_many_weapons_monitor_takeaway_sequence_done" ); - } - } - wait get_player_too_many_weapons_monitor_wait_time(); - } -} - -player_monitor_travel_dist() //checked matches cerberus output -{ - self endon( "disconnect" ); - self notify( "stop_player_monitor_travel_dist" ); - self endon( "stop_player_monitor_travel_dist" ); - prevpos = self.origin; - while ( 1 ) - { - wait 0.1; - self.pers[ "distance_traveled" ] += distance( self.origin, prevpos ); - prevpos = self.origin; - } -} - -player_monitor_time_played() //checked matches cerberus output -{ - self endon( "disconnect" ); - self notify( "stop_player_monitor_time_played" ); - self endon( "stop_player_monitor_time_played" ); - flag_wait( "start_zombie_round_logic" ); - for ( ;; ) - { - wait 1; - maps/mp/zombies/_zm_stats::increment_client_stat( "time_played_total" ); - } -} - -reset_rampage_bookmark_kill_times() //checked changed to match cerberus output -{ - if ( !isDefined( self.rampage_bookmark_kill_times ) ) - { - self.rampage_bookmark_kill_times = []; - self.ignore_rampage_kill_times = 0; - } - for ( i = 0; i < level.rampage_bookmark_kill_times_count; i++ ) - { - self.rampage_bookmark_kill_times[ i ] = 0; - } -} - -add_rampage_bookmark_kill_time() //checked changed to match cerberus output -{ - now = getTime(); - if ( now <= self.ignore_rampage_kill_times ) - { - return; - } - oldest_index = 0; - oldest_time = now + 1; - i = 0; - while ( i < level.rampage_bookmark_kill_times_count ) - { - if( !self.rampage_bookmark_kill_times[ i ] ) - { - oldest_index = i; - i++; - continue; - } - if ( oldest_time > self.rampage_bookmark_kill_times[ i ] ) - { - oldest_index = i; - oldest_time = self.rampage_bookmark_kill_times[ i ]; - } - i++; - } - self.rampage_bookmark_kill_times[ oldest_index ] = now; -} - -watch_rampage_bookmark() //checked changed to match cerberus output -{ - while(1) - { - wait 0.05; - waittillframeend; - now = GetTime(); - oldest_allowed = now - level.rampage_bookmark_kill_times_msec; - players = get_players(); - for ( player_index = 0; player_index < players.size; player_index++ ) - { - player = players[ player_index ]; - for ( time_index = 0; time_index < level.rampage_bookmark_kill_times_count; time_index++ ) - { - if ( !player.rampage_bookmark_kill_times[ time_index ] ) - { - break; - } - if ( oldest_allowed > player.rampage_bookmark_kill_times[ time_index ] ) - { - player.rampage_bookmark_kill_times[time_index] = 0; - break; - } - } - if ( time_index >= level.rampage_bookmark_kill_times_count ) - { - maps/mp/_demo::bookmark( "zm_player_rampage", GetTime(), player ); - player reset_rampage_bookmark_kill_times(); - player.ignore_rampage_kill_times = now + level.rampage_bookmark_kill_times_delay; - } - } - } -} - -player_grenade_multiattack_bookmark_watcher( grenade ) //checked matches cerberus output -{ - self endon( "disconnect" ); - waittillframeend; - if ( !isDefined( grenade ) ) - { - return; - } - inflictorentnum = grenade getentitynumber(); - inflictorenttype = grenade getentitytype(); - inflictorbirthtime = 0; - if ( isDefined( grenade.birthtime ) ) - { - inflictorbirthtime = grenade.birthtime; - } - ret_val = grenade waittill_any_timeout( 15, "explode" ); - if ( !isDefined( self ) || isDefined( ret_val ) && ret_val == "timeout" ) - { - return; - } - self.grenade_multiattack_count = 0; - self.grenade_multiattack_ent = undefined; - waittillframeend; - if ( !isDefined( self ) ) - { - return; - } - count = level.grenade_multiattack_bookmark_count; - if ( isDefined( grenade.grenade_multiattack_bookmark_count ) && grenade.grenade_multiattack_bookmark_count ) - { - count = grenade.grenade_multiattack_bookmark_count; - } - bookmark_string = "zm_player_grenade_multiattack"; - if ( isDefined( grenade.use_grenade_special_long_bookmark ) && grenade.use_grenade_special_long_bookmark ) - { - bookmark_string = "zm_player_grenade_special_long"; - } - else - { - if ( isDefined( grenade.use_grenade_special_bookmark ) && grenade.use_grenade_special_bookmark ) - { - bookmark_string = "zm_player_grenade_special"; - } - } - if ( count <= self.grenade_multiattack_count && isDefined( self.grenade_multiattack_ent ) ) - { - adddemobookmark( level.bookmark[ bookmark_string ], getTime(), self getentitynumber(), 255, 0, inflictorentnum, inflictorenttype, inflictorbirthtime, 0, self.grenade_multiattack_ent getentitynumber() ); - } - self.grenade_multiattack_count = 0; -} - -player_grenade_watcher() //checked matches cerberus output -{ - self endon( "disconnect" ); - self notify( "stop_player_grenade_watcher" ); - self endon( "stop_player_grenade_watcher" ); - self.grenade_multiattack_count = 0; - while ( 1 ) - { - self waittill( "grenade_fire", grenade, weapname ); - if ( isDefined( grenade ) && isalive( grenade ) ) - { - grenade.team = self.team; - } - self thread player_grenade_multiattack_bookmark_watcher( grenade ); - if ( isDefined( level.grenade_watcher ) ) - { - self [[ level.grenade_watcher ]]( grenade, weapname ); - } - } -} - -player_prevent_damage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) //checked matches cerberus output -{ - if ( !isDefined( einflictor ) || !isDefined( eattacker ) ) - { - return 0; - } - if ( einflictor == self || eattacker == self ) - { - return 0; - } - if ( isDefined( einflictor ) && isDefined( einflictor.team ) ) - { - if ( isDefined( einflictor.damage_own_team ) && !einflictor.damage_own_team ) - { - if ( einflictor.team == self.team ) - { - return 1; - } - } - } - return 0; -} - -player_revive_monitor() //checked matches cerberus output -{ - self endon( "disconnect" ); - self notify( "stop_player_revive_monitor" ); - self endon( "stop_player_revive_monitor" ); - while ( 1 ) - { - self waittill( "player_revived", reviver ); - self playsoundtoplayer( "zmb_character_revived", self ); - if ( isDefined( level.isresetting_grief ) && level.isresetting_grief ) - { - continue; - } - bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "revived", self.origin ); - if ( isDefined( reviver ) ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "revive_up" ); - points = self.score_lost_when_downed; - reviver maps/mp/zombies/_zm_score::player_add_points( "reviver", points ); - self.score_lost_when_downed = 0; - } - } -} - -laststand_giveback_player_perks() //checked changed to match cerberus output -{ - if ( isdefined( self.laststand_perks ) ) - { - lost_perk_index = int( -1 ); - if ( self.laststand_perks.size > 1 ) - { - lost_perk_index = randomint( self.laststand_perks.size - 1 ); - } - i = 0; - while ( i < self.laststand_perks.size) - { - if ( self hasperk( self.laststand_perks[ i ] ) ) - { - i++; - continue; - } - if ( i == lost_perk_index ) - { - i++; - continue; - } - maps/mp/zombies/_zm_perks::give_perk( self.laststand_perks[ i ] ); - i++; - } - } -} - -remote_revive_watch() //checked matches cerberus output -{ - self endon( "death" ); - self endon( "player_revived" ); - keep_checking = 1; - while ( keep_checking ) - { - self waittill( "remote_revive", reviver ); - if ( reviver.team == self.team ) - { - keep_checking = 0; - } - } - self maps/mp/zombies/_zm_laststand::remote_revive( reviver ); -} - -remove_deadshot_bottle() //checked matches cerberus output -{ - wait 0.05; - if ( isDefined( self.lastactiveweapon ) && self.lastactiveweapon == "zombie_perk_bottle_deadshot" ) - { - self.lastactiveweapon = "none"; - } -} - -take_additionalprimaryweapon() //checked changed to match cerberus output -{ - weapon_to_take = undefined; - if ( is_true( self._retain_perks ) || isDefined( self._retain_perks_array ) && isDefined( self._retain_perks_array[ "specialty_additionalprimaryweapon" ] ) && self._retain_perks_array[ "specialty_additionalprimaryweapon" ] ) - { - return weapon_to_take; - } - primary_weapons_that_can_be_taken = []; - primaryweapons = self getweaponslistprimaries(); - for ( i = 0; i < primaryweapons.size; i++ ) - { - if ( maps/mp/zombies/_zm_weapons::is_weapon_included( primaryweapons[ i ] ) || maps/mp/zombies/_zm_weapons::is_weapon_upgraded(primaryweapons[ i ] ) ) - { - primary_weapons_that_can_be_taken[ primary_weapons_that_can_be_taken.size ] = primaryweapons[ i ]; - } - } - pwtcbt = primary_weapons_that_can_be_taken.size; - while ( pwtcbt >= 3 ) - { - weapon_to_take = primary_weapons_that_can_be_taken[ pwtcbt - 1 ]; - pwtcbt--; - - if ( weapon_to_take == self getcurrentweapon() ) - { - self switchtoweapon( primary_weapons_that_can_be_taken[ 0 ] ); - } - self takeweapon( weapon_to_take ); - } - return weapon_to_take; -} - -player_laststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) //checked changed to match cerberus output //checked against bo3 _zm.gsc matches within reason -{ - b_alt_visionset = 0; - self allowjump( 0 ); - currweapon = self getcurrentweapon(); - statweapon = currweapon; - if ( is_alt_weapon( statweapon ) ) - { - statweapon = weaponaltweaponname( statweapon ); - } - self addweaponstat( statweapon, "deathsDuringUse", 1 ); - if ( is_true( self.hasperkspecialtytombstone ) ) - { - self.laststand_perks = maps/mp/zombies/_zm_tombstone::tombstone_save_perks( self ); - } - if ( isDefined( self.pers_upgrades_awarded[ "perk_lose" ] ) && self.pers_upgrades_awarded[ "perk_lose" ] ) - { - self maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_perk_lose_save(); - } - players = get_players(); - if ( players.size == 1 && flag( "solo_game" ) ) - { - if ( self.lives > 0 && self hasperk( "specialty_quickrevive" ) ) - { - self thread wait_and_revive(); - } - } - if ( self hasperk( "specialty_additionalprimaryweapon" ) ) - { - self.weapon_taken_by_losing_specialty_additionalprimaryweapon = take_additionalprimaryweapon(); - } - if ( is_true( self.hasperkspecialtytombstone ) ) - { - self [[ level.tombstone_laststand_func ]](); - self thread [[ level.tombstone_spawn_func ]](); - self.hasperkspecialtytombstone = undefined; - self notify( "specialty_scavenger_stop" ); - } - self clear_is_drinking(); - self thread remove_deadshot_bottle(); - self thread remote_revive_watch(); - self maps/mp/zombies/_zm_score::player_downed_penalty(); - self disableoffhandweapons(); - self thread last_stand_grenade_save_and_return(); - if ( smeansofdeath != "MOD_SUICIDE" && smeansofdeath != "MOD_FALLING" ) - { - if ( !is_true( self.intermission ) ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "revive_down" ); - } - else - { - if ( isDefined( level.custom_player_death_vo_func ) && !self [[ level.custom_player_death_vo_func ]]() ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "exert_death" ); - } - } - } - bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "downed", self.origin ); - if ( isDefined( level._zombie_minigun_powerup_last_stand_func ) ) - { - self thread [[ level._zombie_minigun_powerup_last_stand_func ]](); - } - if ( isDefined( level._zombie_tesla_powerup_last_stand_func ) ) - { - self thread [[ level._zombie_tesla_powerup_last_stand_func ]](); - } - if ( self hasperk( "specialty_grenadepulldeath" ) ) - { - b_alt_visionset = 1; - if ( isDefined( level.custom_laststand_func ) ) - { - self thread [[ level.custom_laststand_func ]](); - } - } - if ( is_true( self.intermission ) ) - { - bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "died", self.origin ); - wait 0.5; - self stopsounds(); - level waittill( "forever" ); - } - if ( !b_alt_visionset ) - { - visionsetlaststand( "zombie_last_stand", 1 ); - } -} - -failsafe_revive_give_back_weapons( excluded_player ) //checked changed to match cerberus output -{ - for ( i = 0; i < 10; i++ ) - { - wait 0.05 ; - players = get_players(); - foreach ( player in players ) - { - if ( player == excluded_player || !isdefined(player.reviveprogressbar) || player maps/mp/zombies/_zm_laststand::is_reviving_any() ) - { - continue; - } - player maps/mp/zombies/_zm_laststand::revive_give_back_weapons( "none" ); - if ( isdefined( player.reviveprogressbar ) ) - { - player.reviveprogressbar maps/mp/gametypes_zm/_hud_util::destroyelem(); - } - if ( isdefined( player.revivetexthud ) ) - { - player.revivetexthud destroy(); - } - } - } -} - -spawnspectator() //checked matches cerberus output -{ - self endon( "disconnect" ); - self endon( "spawned_spectator" ); - self notify( "spawned" ); - self notify( "end_respawn" ); - if ( level.intermission ) - { - return; - } - if ( is_true( level.no_spectator ) ) - { - wait 3; - exitlevel(); - } - self.is_zombie = 1; - level thread failsafe_revive_give_back_weapons( self ); - self notify( "zombified" ); - if ( isDefined( self.revivetrigger ) ) - { - self.revivetrigger delete(); - self.revivetrigger = undefined; - } - self.zombification_time = getTime(); - resettimeout(); - self stopshellshock(); - self stoprumble( "damage_heavy" ); - self.sessionstate = "spectator"; - self.spectatorclient = -1; - self.maxhealth = self.health; - self.shellshocked = 0; - self.inwater = 0; - self.friendlydamage = undefined; - self.hasspawned = 1; - self.spawntime = getTime(); - self.afk = 0; - self detachall(); - if ( isDefined( level.custom_spectate_permissions ) ) - { - self [[ level.custom_spectate_permissions ]](); - } - else - { - self setspectatepermissions( 1 ); - } - self thread spectator_thread(); - self spawn( self.origin, self.angles ); - self notify( "spawned_spectator" ); -} - -setspectatepermissions( ison ) //checked partially matches cerberus output changed at own discretion -{ - if ( ison && self.team == "allies" ) - { - self allowspectateteam( "allies", 1 ); - } - if ( ison && self.team == "axis" ) - { - self allowspectateteam( "axis", 1 ); - } - self allowspectateteam( "freelook", 0 ); - self allowspectateteam( "none", 0 ); -} - -spectator_thread() //checked matches cerberus output -{ - self endon( "disconnect" ); - self endon( "spawned_player" ); -} - -spectator_toggle_3rd_person() //checked matches cerberus output -{ - self endon( "disconnect" ); - self endon( "spawned_player" ); - third_person = 1; - self set_third_person( 1 ); -} - -set_third_person( value ) //checked matches cerberus output -{ - if ( value ) - { - self setclientthirdperson( 1 ); - self setclientthirdpersonangle( 354 ); - self setdepthoffield( 0, 128, 512, 4000, 6, 1.8 ); - } - else - { - self setclientthirdperson( 0 ); - self setclientthirdpersonangle( 0 ); - self setdepthoffield( 0, 0, 512, 4000, 4, 0 ); - } - self resetfov(); -} - -last_stand_revive() //checked changed to match cerberus output //checked against bo3 _zm.gsc matches within reason -{ - level endon( "between_round_over" ); - players = get_players(); - laststand_count = 0; - foreach ( player in players ) - { - if ( !is_player_valid( player ) ) - { - laststand_count++; - } - } - if ( laststand_count == players.size ) - { - for ( i = 0; i < players.size; i++ ) - { - if ( players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() && players[ i ].revivetrigger.beingrevived == 0 ) - { - players[ i ] maps/mp/zombies/_zm_laststand::auto_revive( players[ i ] ); - } - } - } -} - -last_stand_pistol_rank_init() //checked matches cerberus output -{ - level.pistol_values = []; - level.pistol_values[ level.pistol_values.size ] = "m1911_zm"; - level.pistol_values[ level.pistol_values.size ] = "c96_zm"; - level.pistol_values[ level.pistol_values.size ] = "cz75_zm"; - level.pistol_values[ level.pistol_values.size ] = "cz75dw_zm"; - level.pistol_values[ level.pistol_values.size ] = "kard_zm"; - level.pistol_values[ level.pistol_values.size ] = "fiveseven_zm"; - level.pistol_values[ level.pistol_values.size ] = "beretta93r_zm"; - level.pistol_values[ level.pistol_values.size ] = "beretta93r_extclip_zm"; - level.pistol_values[ level.pistol_values.size ] = "fivesevendw_zm"; - level.pistol_values[ level.pistol_values.size ] = "rnma_zm"; - level.pistol_values[ level.pistol_values.size ] = "python_zm"; - level.pistol_values[ level.pistol_values.size ] = "judge_zm"; - level.pistol_values[ level.pistol_values.size ] = "cz75_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "cz75dw_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "kard_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "fiveseven_upgraded_zm"; - level.pistol_value_solo_replace_below = level.pistol_values.size - 1; - level.pistol_values[ level.pistol_values.size ] = "m1911_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "c96_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "beretta93r_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "beretta93r_extclip_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "fivesevendw_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "rnma_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "python_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "judge_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "ray_gun_zm"; - level.pistol_values[ level.pistol_values.size ] = "raygun_mark2_zm"; - level.pistol_values[ level.pistol_values.size ] = "freezegun_zm"; - level.pistol_values[ level.pistol_values.size ] = "ray_gun_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "raygun_mark2_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "freezegun_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "microwavegundw_zm"; - level.pistol_values[ level.pistol_values.size ] = "microwavegundw_upgraded_zm"; -} - -last_stand_pistol_swap() //checked changed to match cerberus output -{ - if ( self has_powerup_weapon() ) - { - self.lastactiveweapon = "none"; - } - if ( !self hasweapon( self.laststandpistol ) ) - { - self giveweapon( self.laststandpistol ); - } - ammoclip = weaponclipsize( self.laststandpistol ); - doubleclip = ammoclip * 2; - if ( is_true( self._special_solo_pistol_swap ) || self.laststandpistol == level.default_solo_laststandpistol && !self.hadpistol ) - { - self._special_solo_pistol_swap = 0; - self.hadpistol = 0; - self setweaponammostock( self.laststandpistol, doubleclip ); - } - else if ( flag( "solo_game" ) && self.laststandpistol == level.default_solo_laststandpistol ) - { - self setweaponammostock(self.laststandpistol, doubleclip); - } - else if ( self.laststandpistol == level.default_laststandpistol ) - { - self setweaponammostock( self.laststandpistol, doubleclip ); - } - else if ( self.laststandpistol == "ray_gun_zm" || self.laststandpistol == "ray_gun_upgraded_zm" ) - { - if ( self.stored_weapon_info[ self.laststandpistol ].total_amt >= ammoclip ) - { - self setweaponammoclip( self.laststandpistol, ammoclip ); - self.stored_weapon_info[ self.laststandpistol ].given_amt = ammoclip; - } - else - { - self setweaponammoclip( self.laststandpistol, self.stored_weapon_info[ self.laststandpistol ].total_amt ); - self.stored_weapon_info[ self.laststandpistol ].given_amt = self.stored_weapon_info[ self.laststandpistol ].total_amt; - } - self setweaponammostock( self.laststandpistol, 0 ); - } - else if ( self.stored_weapon_info[ self.laststandpistol ].stock_amt >= doubleclip ) - { - self setweaponammostock( self.laststandpistol, doubleclip ); - self.stored_weapon_info[ self.laststandpistol ].given_amt = doubleclip + self.stored_weapon_info[ self.laststandpistol ].clip_amt + self.stored_weapon_info[ self.laststandpistol ].left_clip_amt; - } - else - { - self setweaponammostock( self.laststandpistol, self.stored_weapon_info[ self.laststandpistol ].stock_amt ); - self.stored_weapon_info[ self.laststandpistol ].given_amt = self.stored_weapon_info[ self.laststandpistol ].total_amt; - } - self switchtoweapon( self.laststandpistol ); -} - -last_stand_best_pistol() //checked changed to match cerberus output -{ - pistol_array = []; - current_weapons = self getweaponslistprimaries(); - i = 0; - while ( i < current_weapons.size ) - { - class = weaponclass( current_weapons[ i ] ); - if ( issubstr( current_weapons[ i ], "knife_ballistic_" ) ) - { - class = "knife"; - } - if ( class == "pistol" || class == "pistolspread" || class == "pistol spread" ) - { - if ( current_weapons[ i ] != level.default_laststandpistol && !flag( "solo_game" ) || !flag( "solo_game" ) && current_weapons[ i ] != level.default_solo_laststandpistol ) - { - if ( self getammocount( current_weapons[ i ] ) <= 0) - { - i++; - continue; - } - } - pistol_array_index = pistol_array.size; - pistol_array[ pistol_array_index ] = spawnstruct(); - pistol_array[ pistol_array_index ].gun = current_weapons[ i ]; - pistol_array[ pistol_array_index ].value = 0; - for ( j = 0; j < level.pistol_values.size; j++ ) - { - if ( level.pistol_values[ j ] == current_weapons[ i ] ) - { - pistol_array[ pistol_array_index ].value = j; - break; - } - } - } - i++; - } - self.laststandpistol = last_stand_compare_pistols( pistol_array ); -} - -last_stand_compare_pistols( struct_array ) //checked changed to match cerberus output -{ - if ( !isarray( struct_array ) || struct_array.size <= 0 ) - { - self.hadpistol = 0; - if ( isDefined( self.stored_weapon_info ) ) - { - stored_weapon_info = getarraykeys( self.stored_weapon_info ); - for ( j = 0; j < stored_weapon_info.size; j++ ) - { - if ( stored_weapon_info[ j ] == level.laststandpistol ) - { - self.hadpistol = 1; - } - } - } - return level.laststandpistol; - } - highest_score_pistol = struct_array[ 0 ]; - for ( i = 1; i < struct_array.size; i++ ) - { - if ( struct_array[ i ].value > highest_score_pistol.value ) - { - highest_score_pistol = struct_array[ i ]; - } - } - if ( flag( "solo_game" ) ) - { - self._special_solo_pistol_swap = 0; - if ( highest_score_pistol.value <= level.pistol_value_solo_replace_below ) - { - self.hadpistol = 0; - self._special_solo_pistol_swap = 1; - if ( is_true( level.force_solo_quick_revive ) && !self hasperk( "specialty_quickrevive" ) ) - { - return highest_score_pistol.gun; - } - else - { - return level.laststandpistol; - } - } - else - { - return highest_score_pistol.gun; - } - } - else - { - return highest_score_pistol.gun; - } -} - -last_stand_save_pistol_ammo() //checked changed to match cerberus output -{ - weapon_inventory = self getweaponslist( 1 ); - self.stored_weapon_info = []; - for ( i = 0; i < weapon_inventory.size; i++ ) - { - weapon = weapon_inventory[ i ]; - class = weaponclass( weapon ); - if ( issubstr( weapon, "knife_ballistic_" ) ) - { - class = "knife"; - } - if ( class == "pistol" || class == "pistolspread" || class == "pistol spread" ) - { - self.stored_weapon_info[ weapon ] = spawnstruct(); - self.stored_weapon_info[ weapon ].clip_amt = self getweaponammoclip( weapon ); - self.stored_weapon_info[ weapon ].left_clip_amt = 0; - dual_wield_name = weapondualwieldweaponname( weapon ); - if ( dual_wield_name != "none" ) - { - self.stored_weapon_info[ weapon ].left_clip_amt = self getweaponammoclip( dual_wield_name ); - } - self.stored_weapon_info[ weapon ].stock_amt = self getweaponammostock( weapon ); - self.stored_weapon_info[ weapon ].total_amt = self.stored_weapon_info[ weapon ].clip_amt + self.stored_weapon_info[ weapon ].left_clip_amt + self.stored_weapon_info[ weapon ].stock_amt; - self.stored_weapon_info[ weapon ].given_amt = 0; - } - } - self last_stand_best_pistol(); -} - -last_stand_restore_pistol_ammo() //checked changed to match cerberus output -{ - self.weapon_taken_by_losing_specialty_additionalprimaryweapon = undefined; - if ( !isDefined( self.stored_weapon_info ) ) - { - return; - } - weapon_inventory = self getweaponslist( 1 ); - weapon_to_restore = getarraykeys( self.stored_weapon_info ); - i = 0; - while ( i < weapon_inventory.size ) - { - weapon = weapon_inventory[ i ]; - if(weapon != self.laststandpistol) - { - i++; - continue; - } - for ( j = 0; j < weapon_to_restore.size; j++ ) - { - check_weapon = weapon_to_restore[ j ]; - if ( weapon == check_weapon ) - { - dual_wield_name = weapondualwieldweaponname( weapon_to_restore[ j ] ); - if ( weapon != level.default_laststandpistol ) - { - last_clip = self getweaponammoclip( weapon ); - last_left_clip = 0; - if( "none" != dual_wield_name ) - { - last_left_clip = self getweaponammoclip( dual_wield_name ); - } - last_stock = self getweaponammostock( weapon ); - last_total = last_clip + last_left_clip + last_stock; - used_amt = self.stored_weapon_info[ weapon ].given_amt - last_total; - if ( used_amt >= self.stored_weapon_info[ weapon ].stock_amt ) - { - used_amt = used_amt - self.stored_weapon_info[weapon].stock_amt; - self.stored_weapon_info[ weapon ].stock_amt = 0; - self.stored_weapon_info[ weapon ].clip_amt = self.stored_weapon_info[ weapon ].clip_amt - used_amt; - if ( self.stored_weapon_info[ weapon ].clip_amt < 0 ) - { - self.stored_weapon_info[ weapon ].clip_amt = 0; - } - } - else - { - new_stock_amt = self.stored_weapon_info[ weapon ].stock_amt - used_amt; - if ( new_stock_amt < self.stored_weapon_info[ weapon ].stock_amt ) - { - self.stored_weapon_info[ weapon ].stock_amt = new_stock_amt; - } - } - } - self setweaponammoclip( weapon_to_restore[ j ], self.stored_weapon_info[ weapon_to_restore[ j ] ].clip_amt ); - if ( "none" != dual_wield_name ) - { - self setweaponammoclip( dual_wield_name, self.stored_weapon_info[weapon_to_restore[ j ] ].left_clip_amt ); - } - self setweaponammostock( weapon_to_restore[ j ], self.stored_weapon_info[weapon_to_restore[ j ] ].stock_amt ); - break; - } - } - i++; - } -} - -last_stand_take_thrown_grenade() //checked matches cerberus output -{ - self endon( "disconnect" ); - self endon( "bled_out" ); - self endon( "player_revived" ); - self waittill( "grenade_fire", grenade, weaponname ); - if ( isDefined( self.lsgsar_lethal ) && weaponname == self.lsgsar_lethal ) - { - self.lsgsar_lethal_nade_amt--; - - } - if ( isDefined( self.lsgsar_tactical ) && weaponname == self.lsgsar_tactical ) - { - self.lsgsar_tactical_nade_amt--; - - } -} - -last_stand_grenade_save_and_return() //checked changed to match cerberus output -{ - if ( is_true( level.isresetting_grief ) ) - { - return; - } - self endon( "disconnect" ); - self endon( "bled_out" ); - level endon( "between_round_over" ); - self.lsgsar_lethal_nade_amt = 0; - self.lsgsar_has_lethal_nade = 0; - self.lsgsar_tactical_nade_amt = 0; - self.lsgsar_has_tactical_nade = 0; - self.lsgsar_lethal = undefined; - self.lsgsar_tactical = undefined; - if ( self isthrowinggrenade() ) - { - self thread last_stand_take_thrown_grenade(); - } - weapons_on_player = self getweaponslist( 1 ); - for ( i = 0; i < weapons_on_player.size; i++ ) - { - if ( self is_player_lethal_grenade( weapons_on_player[ i ] ) ) - { - self.lsgsar_has_lethal_nade = 1; - self.lsgsar_lethal = self get_player_lethal_grenade(); - self.lsgsar_lethal_nade_amt = self getweaponammoclip( self get_player_lethal_grenade() ); - self setweaponammoclip( self get_player_lethal_grenade(), 0 ); - self takeweapon( self get_player_lethal_grenade() ); - } - else if ( self is_player_tactical_grenade( weapons_on_player[ i ] ) ) - { - self.lsgsar_has_tactical_nade = 1; - self.lsgsar_tactical = self get_player_tactical_grenade(); - self.lsgsar_tactical_nade_amt = self getweaponammoclip( self get_player_tactical_grenade() ); - self setweaponammoclip( self get_player_tactical_grenade(), 0); - self takeweapon( self get_player_tactical_grenade() ); - } - } - self waittill( "player_revived" ); - if ( self.lsgsar_has_lethal_nade ) - { - self set_player_lethal_grenade( self.lsgsar_lethal ); - self giveweapon( self.lsgsar_lethal ); - self setweaponammoclip( self.lsgsar_lethal, self.lsgsar_lethal_nade_amt ); - } - if ( self.lsgsar_has_tactical_nade ) - { - self set_player_tactical_grenade( self.lsgsar_tactical ); - self giveweapon( self.lsgsar_tactical ); - self setweaponammoclip( self.lsgsar_tactical, self.lsgsar_tactical_nade_amt ); - } - self.lsgsar_lethal_nade_amt = undefined; - self.lsgsar_has_lethal_nade = undefined; - self.lsgsar_tactical_nade_amt = undefined; - self.lsgsar_has_tactical_nade = undefined; - self.lsgsar_lethal = undefined; - self.lsgsar_tactical = undefined; -} - -spectators_respawn() //checked changed to match cerberus output -{ - level endon( "between_round_over" ); - if ( !isDefined( level.zombie_vars[ "spectators_respawn" ] ) || !level.zombie_vars[ "spectators_respawn" ] ) - { - return; - } - if ( !isDefined( level.custom_spawnplayer ) ) - { - level.custom_spawnplayer = ::spectator_respawn; - } - while ( 1 ) - { - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - if ( players[ i ].sessionstate == "spectator" && isdefined( players[ i ].spectator_respawn ) ) - { - players[ i ] [[ level.spawnplayer ]](); - thread refresh_player_navcard_hud(); - if ( isdefined( level.script ) && level.round_number > 6 && players[ i ].score < 1500 ) - { - players[ i ].old_score = players[ i ].score; - if ( isdefined( level.spectator_respawn_custom_score ) ) - { - players[ i ] [[ level.spectator_respawn_custom_score ]](); - } - players[ i ].score = 1500; - } - } - } - wait 1; - } -} - -spectator_respawn() //checked changed to match cerberus output -{ - origin = self.spectator_respawn.origin; - angles = self.spectator_respawn.angles; - self setspectatepermissions( 0 ); - new_origin = undefined; - if ( isDefined( level.check_valid_spawn_override ) ) - { - new_origin = [[ level.check_valid_spawn_override ]]( self ); - } - if ( !isDefined( new_origin ) ) - { - new_origin = check_for_valid_spawn_near_team( self, 1 ); - } - if ( isDefined( new_origin ) ) - { - if ( !isDefined( new_origin.angles ) ) - { - angles = ( 0, 0, 0 ); - } - else - { - angles = new_origin.angles; - } - self spawn( new_origin.origin, angles ); - } - else - { - self spawn( origin, angles ); - } - if ( isDefined( self get_player_placeable_mine() ) ) - { - self takeweapon( self get_player_placeable_mine() ); - self set_player_placeable_mine( undefined ); - } - self maps/mp/zombies/_zm_equipment::equipment_take(); - self.is_burning = undefined; - self.abilities = []; - self.is_zombie = 0; - self.ignoreme = 0; - setclientsysstate( "lsm", "0", self ); - self reviveplayer(); - self notify( "spawned_player" ); - if ( isDefined( level._zombiemode_post_respawn_callback ) ) - { - self thread [[ level._zombiemode_post_respawn_callback ]](); - } - self maps/mp/zombies/_zm_score::player_reduce_points( "died" ); - self maps/mp/zombies/_zm_melee_weapon::spectator_respawn_all(); - claymore_triggers = getentarray( "claymore_purchase", "targetname" ); - i = 0; - while ( i < claymore_triggers.size ) - { - claymore_triggers[ i ] setvisibletoplayer( self ); - claymore_triggers[ i ].claymores_triggered = 0; - i++; - } - self thread player_zombie_breadcrumb(); - self thread return_retained_perks(); - return 1; -} - -check_for_valid_spawn_near_team( revivee, return_struct ) //checked partially changed to match beta dump -{ - if ( isDefined( level.check_for_valid_spawn_near_team_callback ) ) - { - spawn_location = [[ level.check_for_valid_spawn_near_team_callback ]]( revivee, return_struct ); - return spawn_location; - } - else - { - players = get_players(); - spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype(); - closest_group = undefined; - closest_distance = 100000000; - backup_group = undefined; - backup_distance = 100000000; - if ( spawn_points.size == 0 ) - { - return undefined; - } - for ( i = 0; i < players.size; i++ ) - { - if ( maps/mp/zombies/_zm_utility::is_player_valid( players[ i ], undefined, 1 ) && players[ i ] != self ) - { - for ( j = 0; j < spawn_points.size; j++ ) - { - if ( isdefined( spawn_points[ j ].script_int ) ) - { - ideal_distance = spawn_points[ j ].script_int; - } - else - { - ideal_distance = 1000; - } - if ( spawn_points[ j ].locked == 0 ) - { - plyr_dist = distancesquared( players[ i ].origin, spawn_points[ j ].origin ); - if ( plyr_dist < ideal_distance * ideal_distance ) - { - if ( plyr_dist < closest_distance ) - { - closest_distance = plyr_dist; - closest_group = j; - } - } - else - { - if ( plyr_dist < backup_distance ) - { - backup_group = j; - backup_distance = plyr_dist; - } - } - } - } - } - if ( !isdefined( closest_group ) ) - { - closest_group = backup_group; - } - if ( isdefined( closest_group ) ) - { - spawn_location = get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ); - if ( isdefined( spawn_location ) ) - { - return spawn_location; - } - } - } - return undefined; - } -} - -get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ) //checked partially changed to match cerberus output see info.md -{ - spawn_array = getstructarray( spawn_points[ closest_group ].target, "targetname" ); - spawn_array = array_randomize( spawn_array ); - k = 0; - while ( k < spawn_array.size ) - { - if ( isdefined( spawn_array[ k ].plyr ) && spawn_array[ k ].plyr == revivee getentitynumber() ) - { - if ( positionwouldtelefrag( spawn_array[ k ].origin ) ) - { - spawn_array[ k ].plyr = undefined; - k++; - continue; - } - if ( is_true( return_struct ) ) - { - return spawn_array[ k ]; - } - return spawn_array[ k ].origin; - } - k++; - } - k = 0; - while ( k < spawn_array.size ) - { - if ( positionwouldtelefrag( spawn_array[ k ].origin ) ) - { - k++; - continue; - } - if ( !isdefined( spawn_array[ k ].plyr) || spawn_array[ k ].plyr == revivee getentitynumber() ) - { - spawn_array[ k ].plyr = revivee getentitynumber(); - if ( is_true( return_struct ) ) - { - return spawn_array[ k ]; - } - return spawn_array[ k ].origin; - } - k++; - } - if ( is_true( return_struct ) ) - { - return spawn_array[ 0 ]; - } - return spawn_array[ 0 ].origin; -} - -check_for_valid_spawn_near_position( revivee, v_position, return_struct ) //checked changed to match cerberus output -{ - spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype(); - if ( spawn_points.size == 0 ) - { - return undefined; - } - closest_group = undefined; - closest_distance = 100000000; - backup_group = undefined; - backup_distance = 100000000; - for ( i = 0; i < spawn_points.size; i++ ) - { - if ( isdefined( spawn_points[ i ].script_int ) ) - { - ideal_distance = spawn_points[ i ].script_int; - } - else - { - ideal_distance = 1000; - } - if ( spawn_points[ i ].locked == 0 ) - { - dist = distancesquared( v_position, spawn_points[ i ].origin ); - if ( dist < ideal_distance * ideal_distance ) - { - if ( dist < closest_distance ) - { - closest_distance = dist; - closest_group = i; - } - } - else if ( dist < backup_distance ) - { - backup_group = i; - backup_distance = dist; - } - } - if ( !isdefined( closest_group ) ) - { - closest_group = backup_group; - } - } - if ( isDefined( closest_group ) ) - { - spawn_location = get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ); - if ( isDefined( spawn_location ) ) - { - return spawn_location; - } - } - return undefined; -} - -check_for_valid_spawn_within_range( revivee, v_position, return_struct, min_distance, max_distance ) //checked changed to match cerberus output -{ - spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype(); - if ( spawn_points.size == 0 ) - { - return undefined; - } - closest_group = undefined; - closest_distance = 100000000; - for ( i = 0; i < spawn_points.size; i++ ) - { - if ( spawn_points[ i ].locked == 0 ) - { - dist = distance( v_position, spawn_points[ i ].origin ); - if ( dist >= min_distance && dist <= max_distance ) - { - if ( dist < closest_distance ) - { - closest_distance = dist; - closest_group = i; - } - } - } - } - if ( isDefined( closest_group ) ) - { - spawn_location = get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ); - if ( isDefined( spawn_location ) ) - { - return spawn_location; - } - } - return undefined; -} - -get_players_on_team( exclude ) //checked changed to match cerberus output -{ - teammates = []; - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - if ( players[ i ].spawn_side == self.spawn_side && !isDefined( players[ i ].revivetrigger ) && players[ i ] != exclude ) - { - teammates[ teammates.size ] = players[ i ]; - } - } - return teammates; -} - -get_safe_breadcrumb_pos( player ) //checked changed to match cerberus output //changed for loops with continues to while loops -{ - players = get_players(); - valid_players = []; - min_dist = 22500; - i = 0; - while ( i < players.size ) - { - if ( !is_player_valid( players[ i ] ) ) - { - i++; - continue; - } - valid_players[ valid_players.size ] = players[ i ]; - i++; - } - for ( i = 0; i < valid_players.size; i++ ) - { - count = 0; - q = 1; - while ( q < player.zombie_breadcrumbs.size ) - { - if ( distancesquared( player.zombie_breadcrumbs[ q ], valid_players[ i ].origin ) < min_dist ) - { - q++; - continue; - } - count++; - if ( count == valid_players.size ) - { - return player.zombie_breadcrumbs[ q ]; - } - q++; - } - } - return undefined; -} - -default_max_zombie_func( max_num ) //checked changed to match cerberus output -{ - max = max_num; - if ( level.round_number < 2 ) - { - max = int( max_num * 0.25 ); - } - else if ( level.round_number < 3 ) - { - max = int( max_num * 0.3 ); - } - else if ( level.round_number < 4 ) - { - max = int( max_num * 0.5 ); - } - else if ( level.round_number < 5 ) - { - max = int( max_num * 0.7 ); - } - else if ( level.round_number < 6 ) - { - max = int( max_num * 0.9 ); - } - return max; -} - -round_spawning() //checked changed to match cerberus output -{ - level endon( "intermission" ); - level endon( "end_of_round" ); - level endon( "restart_round" ); - if ( level.intermission ) - { - return; - } - if ( level.zombie_spawn_locations.size < 1 ) - { - return; - } - ai_calculate_health( level.round_number ); - count = 0; - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - players[ i ].zombification_time = 0; - } - max = level.zombie_vars[ "zombie_max_ai" ]; - multiplier = level.round_number / 5; - if ( multiplier < 1 ) - { - multiplier = 1; - } - if ( level.round_number >= 10 ) - { - multiplier *= level.round_number * 0.15; - } - player_num = get_players().size; - if ( player_num == 1 ) - { - max += int( 0.5 * level.zombie_vars[ "zombie_ai_per_player" ] * multiplier ); - } - else - { - max += int( ( player_num - 1 ) * level.zombie_vars[ "zombie_ai_per_player" ] * multiplier ); - } - if ( !isDefined( level.max_zombie_func ) ) - { - level.max_zombie_func = ::default_max_zombie_func; - } - if ( isDefined( level.kill_counter_hud ) && level.zombie_total > 0 ) - { - level.zombie_total = [[ level.max_zombie_func ]]( max ); - level notify( "zombie_total_set" ); - } - if ( isDefined( level.zombie_total_set_func ) ) - { - level thread [[ level.zombie_total_set_func ]](); - } - if ( level.round_number < 10 || level.speed_change_max > 0 ) - { - level thread zombie_speed_up(); - } - level.zombie_total = [[ level.max_zombie_func ]]( max ); - level notify( "zombie_total_set" ); - mixed_spawns = 0; - old_spawn = undefined; - while ( 1 ) - { - while ( get_current_zombie_count() >= level.zombie_ai_limit || level.zombie_total <= 0 ) - { - wait 0.1; - } - while ( get_current_actor_count() >= level.zombie_actor_limit ) - { - clear_all_corpses(); - wait 0.1; - } - flag_wait( "spawn_zombies" ); - while ( level.zombie_spawn_locations.size <= 0 ) - { - wait 0.1; - } - run_custom_ai_spawn_checks(); - spawn_point = level.zombie_spawn_locations[ randomint( level.zombie_spawn_locations.size ) ]; - if ( !isDefined( old_spawn ) ) - { - old_spawn = spawn_point; - } - else if ( spawn_point == old_spawn ) - { - spawn_point = level.zombie_spawn_locations[ randomint( level.zombie_spawn_locations.size ) ]; - } - old_spawn = spawn_point; - if ( isDefined( level.mixed_rounds_enabled ) && level.mixed_rounds_enabled == 1 ) - { - spawn_dog = 0; - if ( level.round_number > 30 ) - { - if ( randomint( 100 ) < 3 ) - { - spawn_dog = 1; - } - } - else if ( level.round_number > 25 && mixed_spawns < 3 ) - { - if ( randomint( 100 ) < 2 ) - { - spawn_dog = 1; - } - } - else if ( level.round_number > 20 && mixed_spawns < 2 ) - { - if ( randomint( 100 ) < 2 ) - { - spawn_dog = 1; - } - break; - } - else if ( level.round_number > 15 && mixed_spawns < 1 ) - { - if ( randomint( 100 ) < 1 ) - { - spawn_dog = 1; - } - } - if ( spawn_dog ) - { - keys = getarraykeys( level.zones ); - for ( i = 0; i < keys.size; i++ ) - { - if ( level.zones[ keys[ i ] ].is_occupied ) - { - akeys = getarraykeys( level.zones[ keys[ i ] ].adjacent_zones ); - k = 0; - for ( k = 0; k < akeys.size; k++ ) - { - if ( level.zones[ akeys[ k ] ].is_active && !level.zones[ akeys[ k ] ].is_occupied && level.zones[ akeys[ k ] ].dog_locations.size > 0 ) - { - maps/mp/zombies/_zm_ai_dogs::special_dog_spawn( undefined, 1 ); - level.zombie_total--; - - wait_network_frame(); - } - } - } - } - } - } - if ( isDefined( level.zombie_spawners ) ) - { - if ( is_true( level.use_multiple_spawns ) ) - { - if ( isDefined( spawn_point.script_int ) ) - { - if ( isDefined( level.zombie_spawn[ spawn_point.script_int ] ) && level.zombie_spawn[ spawn_point.script_int ].size ) - { - spawner = random( level.zombie_spawn[ spawn_point.script_int ] ); - } - } - else if ( isDefined( level.zones[ spawn_point.zone_name ].script_int ) && level.zones[ spawn_point.zone_name ].script_int ) - { - spawner = random( level.zombie_spawn[ level.zones[ spawn_point.zone_name ].script_int ] ); - } - else if ( isDefined( level.spawner_int ) && isDefined( level.zombie_spawn[ level.spawner_int ].size ) && level.zombie_spawn[ level.spawner_int ].size ) - { - spawner = random( level.zombie_spawn[ level.spawner_int ] ); - } - else - { - spawner = random( level.zombie_spawners ); - } - } - else - { - spawner = random( level.zombie_spawners ); - } - ai = spawn_zombie( spawner, spawner.targetname, spawn_point ); - } - if ( isDefined( ai ) ) - { - level.zombie_total--; - - ai thread round_spawn_failsafe(); - count++; - } - wait level.zombie_vars[ "zombie_spawn_delay" ]; - wait_network_frame(); - } -} - -run_custom_ai_spawn_checks() //checked changed to match cerberus output -{ - foreach ( s in level.custom_ai_spawn_check_funcs ) - { - if ( [[ s.func_check ]]() ) - { - a_spawners = [[ s.func_get_spawners ]](); - level.zombie_spawners = arraycombine( level.zombie_spawners, a_spawners, 0, 0 ); - if ( is_true( level.use_multiple_spawns ) ) - { - foreach ( sp in a_spawners ) - { - if ( isdefined( sp.script_int ) ) - { - if ( !isdefined(level.zombie_spawn[ sp.script_int ] ) ) - { - level.zombie_spawn[ sp.script_int ] = []; - } - if ( !isinarray( level.zombie_spawn[ sp.script_int ], sp ) ) - { - level.zombie_spawn[ sp.script_int ][ level.zombie_spawn[ sp.script_int ].size ] = sp; - } - } - } - } - else if ( isdefined( s.func_get_locations ) ) - { - a_locations = [[ s.func_get_locations ]](); - level.zombie_spawn_locations = arraycombine( level.zombie_spawn_locations, a_locations, 0, 0 ); - } - break; - } - a_spawners = [[ s.func_get_spawners ]](); - foreach ( sp in a_spawners ) - { - arrayremovevalue( level.zombie_spawners, sp ); - } - if ( is_true( level.use_multiple_spawns ) ) - { - foreach ( sp in a_spawners ) - { - if ( isdefined( sp.script_int ) && isdefined( level.zombie_spawn[ sp.script_int ] ) ) - { - arrayremovevalue( level.zombie_spawn[ sp.script_int ], sp ); - } - } - } - else if ( isdefined( s.func_get_locations ) ) - { - a_locations = [[ s.func_get_locations ]](); - foreach ( s_loc in a_locations ) - { - arrayremovevalue( level.zombie_spawn_locations, s_loc ); - } - } - } -} - -register_custom_ai_spawn_check( str_id, func_check, func_get_spawners, func_get_locations ) //checked matches cerberus output -{ - if ( !isDefined( level.custom_ai_spawn_check_funcs[ str_id ] ) ) - { - level.custom_ai_spawn_check_funcs[ str_id ] = spawnstruct(); - } - level.custom_ai_spawn_check_funcs[ str_id ].func_check = func_check; - level.custom_ai_spawn_check_funcs[ str_id ].func_get_spawners = func_get_spawners; - level.custom_ai_spawn_check_funcs[ str_id ].func_get_locations = func_get_locations; -} - -zombie_speed_up() //checked does not match cerberus output changed at own discretion -{ - if ( level.round_number <= 3 ) - { - return; - } - level endon( "intermission" ); - level endon( "end_of_round" ); - level endon( "restart_round" ); - while ( level.zombie_total > 4 ) - { - wait 2; - } - num_zombies = get_current_zombie_count(); - while ( num_zombies > 3 ) - { - wait 2; - num_zombies = get_current_zombie_count(); - } - zombies = get_round_enemy_array(); - while ( zombies.size > 0 ) - { - if ( zombies.size == 1 && is_true( zombies[ 0 ].has_legs ) ) - { - if ( isDefined( level.zombie_speed_up ) ) - { - zombies[ 0 ] thread [[ level.zombie_speed_up ]](); - break; - } - else if ( zombies[ 0 ].zombie_move_speed != "sprint" ) - { - zombies[ 0 ] set_zombie_run_cycle( "sprint" ); - zombies[ 0 ].zombie_move_speed_original = zombies[ 0 ].zombie_move_speed; - break; //added for consistency - } - } - wait 0.5; - zombies = get_round_enemy_array(); - } -} - -round_spawning_test() //checked matches cerberus output -{ - while ( 1 ) - { - spawn_point = level.zombie_spawn_locations[ randomint( level.zombie_spawn_locations.size ) ]; - spawner = random( level.zombie_spawners ); - ai = spawn_zombie( spawner, spawner.targetname, spawn_point ); - ai waittill( "death" ); - wait 5; - } -} - -round_pause( delay ) //checked changed to match cerberus output -{ - if ( !isDefined( delay ) ) - { - delay = 30; - } - level.countdown_hud = create_counter_hud(); - level.countdown_hud setvalue( delay ); - level.countdown_hud.color = ( 1, 1, 1 ); - level.countdown_hud.alpha = 1; - level.countdown_hud fadeovertime( 2 ); - wait 2; - level.countdown_hud.color = vectorScale( ( 1, 0, 0 ), 0.21 ); - level.countdown_hud fadeovertime( 3 ); - wait 3; - while ( delay >= 1 ) - { - wait 1; - delay--; - level.countdown_hud setvalue( delay ); - } - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - players[ i ] playlocalsound( "zmb_perks_packa_ready" ); - } - level.countdown_hud fadeovertime( 1 ); - level.countdown_hud.color = ( 0, 0, -1 ); - level.countdown_hud.alpha = 0; - wait 1; - level.countdown_hud destroy_hud(); -} - -round_start() //checked matches cerberus output -{ - if ( isDefined( level.round_prestart_func ) ) - { - [[ level.round_prestart_func ]](); - } - else - { - n_delay = 2; - if ( isDefined( level.zombie_round_start_delay ) ) - { - n_delay = level.zombie_round_start_delay; - } - wait n_delay; - } - level.zombie_health = level.zombie_vars[ "zombie_health_start" ]; - if ( getDvarInt( "scr_writeConfigStrings" ) == 1 ) - { - wait 5; - exitlevel(); - return; - } - if ( level.zombie_vars[ "game_start_delay" ] > 0 ) - { - round_pause( level.zombie_vars[ "game_start_delay" ] ); - } - flag_set( "begin_spawning" ); - if ( !isDefined( level.round_spawn_func ) ) - { - level.round_spawn_func = ::round_spawning; - } - if ( !isDefined( level.round_wait_func ) ) - { - level.round_wait_func = ::round_wait; - } - if ( !isDefined( level.round_think_func ) ) - { - level.round_think_func = ::round_think; - } - level thread [[ level.round_think_func ]](); -} - -play_door_dialog() //checked changed to match cerberus output -{ - level endon( "power_on" ); - self endon( "warning_dialog" ); - timer = 0; - while ( 1 ) - { - wait 0.05; - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - dist = distancesquared( players[ i ].origin, self.origin ); - if ( dist > 4900 ) - { - timer = 0; - continue; - } - while ( dist < 4900 && timer < 3 ) - { - wait(0.5); - timer++; - } - if ( dist > 4900 && timer >= 3 ) - { - self playsound( "door_deny" ); - players[ i ] maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "door_deny" ); - wait 3; - self notify("warning_dialog"); - } - } - } -} - -wait_until_first_player() //checked matches cerberus output -{ - players = get_players(); - if ( !isDefined( players[ 0 ] ) ) - { - level waittill( "first_player_ready" ); - } -} - -round_one_up() //checked changed to match cerberus output -{ - level endon( "end_game" ); - if ( isDefined( level.noroundnumber ) && level.noroundnumber == 1 ) - { - return; - } - if ( !isDefined( level.doground_nomusic ) ) - { - level.doground_nomusic = 0; - } - if ( level.first_round ) - { - intro = 1; - if ( isDefined( level._custom_intro_vox ) ) - { - level thread [[ level._custom_intro_vox ]](); - } - else - { - level thread play_level_start_vox_delayed(); - } - } - else - { - intro = 0; - } - if ( level.round_number == 5 || level.round_number == 10 || level.round_number == 20 || level.round_number == 35 || level.round_number == 50 ) - { - players = get_players(); - rand = randomintrange( 0, players.size ); - players[ rand ] thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "round_" + level.round_number ); - } - if ( intro ) - { - if ( is_true( level.host_ended_game ) ) - { - return; - } - wait 6.25; - level notify( "intro_hud_done" ); - wait 2; - } - else - { - wait 2.5; - } - reportmtu( level.round_number ); -} - -round_over() //checked changed to match cerberus output -{ - if ( isDefined( level.noroundnumber ) && level.noroundnumber == 1 ) - { - return; - } - time = level.zombie_vars[ "zombie_between_round_time" ]; - players = getplayers(); - for ( player_index = 0; player_index < players.size; player_index++ ) - { - if ( !isDefined( players[ player_index ].pers[ "previous_distance_traveled" ] ) ) - { - players[ player_index ].pers[ "previous_distance_traveled" ] = 0; - } - distancethisround = int( players[ player_index ].pers[ "distance_traveled" ] - players[ player_index ].pers[ "previous_distance_traveled" ] ); - players[ player_index ].pers[ "previous_distance_traveled" ] = players[ player_index ].pers[ "distance_traveled" ]; - players[ player_index ] incrementplayerstat( "distance_traveled", distancethisround ); - if ( players[ player_index ].pers[ "team" ] != "spectator" ) - { - zonename = players[ player_index ] get_current_zone(); - if ( isDefined( zonename ) ) - { - players[ player_index ] recordzombiezone( "endingZone", zonename ); - } - } - } - recordzombieroundend(); - wait time; -} - -round_think( restart ) //checked changed to match cerberus output -{ - if ( !isDefined( restart ) ) - { - restart = 0; - } - level endon( "end_round_think" ); - if ( !is_true( restart ) ) - { - if ( isDefined( level.initial_round_wait_func ) ) - { - [[ level.initial_round_wait_func ]](); - } - players = get_players(); - foreach ( player in players ) - { - if ( is_true( player.hostmigrationcontrolsfrozen ) ) - { - player freezecontrols( 0 ); - } - player maps/mp/zombies/_zm_stats::set_global_stat( "rounds", level.round_number ); - } - } - setroundsplayed( level.round_number ); - for ( ;; ) - { - maxreward = 50 * level.round_number; - if ( maxreward > 500 ) - { - maxreward = 500; - } - level.zombie_vars[ "rebuild_barrier_cap_per_round" ] = maxreward; - level.pro_tips_start_time = getTime(); - level.zombie_last_run_time = getTime(); - if ( isDefined( level.zombie_round_change_custom ) ) - { - [[ level.zombie_round_change_custom ]](); - } - else - { - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "round_start" ); - round_one_up(); - } - maps/mp/zombies/_zm_powerups::powerup_round_start(); - players = get_players(); - array_thread( players, ::rebuild_barrier_reward_reset ); - if ( !is_true( level.headshots_only ) && !restart ) - { - level thread award_grenades_for_survivors(); - } - level.round_start_time = getTime(); - while ( level.zombie_spawn_locations.size <= 0 ) - { - wait 0.1; - } - level thread [[ level.round_spawn_func ]](); - level notify( "start_of_round" ); - recordzombieroundstart(); - players = getplayers(); - for ( index = 0; index < players.size; index++ ) - { - zonename = players[ index ] get_current_zone(); - if ( isDefined( zonename ) ) - { - players[ index ] recordzombiezone( "startingZone", zonename ); - } - } - if ( isDefined( level.round_start_custom_func ) ) - { - [[ level.round_start_custom_func ]](); - } - [[ level.round_wait_func ]](); - level.first_round = 0; - level notify( "end_of_round" ); - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "round_end" ); - uploadstats(); - if ( isDefined( level.round_end_custom_logic ) ) - { - [[ level.round_end_custom_logic ]](); - } - players = get_players(); - if ( is_true( level.no_end_game_check ) ) - { - level thread last_stand_revive(); - level thread spectators_respawn(); - } - else if ( players.size != 1 ) - { - level thread spectators_respawn(); - } - players = get_players(); - array_thread( players, ::round_end ); - timer = level.zombie_vars[ "zombie_spawn_delay" ]; - if ( timer > 0.08 ) - { - level.zombie_vars[ "zombie_spawn_delay" ] = timer * 0.95; - } - else if ( timer < 0.08 ) - { - level.zombie_vars[ "zombie_spawn_delay" ] = 0.08; - } - if ( level.gamedifficulty == 0 ) - { - level.zombie_move_speed = level.round_number * level.zombie_vars[ "zombie_move_speed_multiplier_easy" ]; - } - else - { - level.zombie_move_speed = level.round_number * level.zombie_vars[ "zombie_move_speed_multiplier" ]; - } - level.round_number++; - if ( level.round_number >= 255 ) - { - level.round_number = 255; - } - setroundsplayed( level.round_number ); - matchutctime = getutc(); - players = get_players(); - foreach ( player in players ) - { - if ( level.curr_gametype_affects_rank && level.round_number > 3 + level.start_round ) - { - player maps/mp/zombies/_zm_stats::add_client_stat( "weighted_rounds_played", level.round_number ); - } - player maps/mp/zombies/_zm_stats::set_global_stat( "rounds", level.round_number ); - player maps/mp/zombies/_zm_stats::update_playing_utc_time( matchutctime ); - } - check_quickrevive_for_hotjoin(); //was commented out - level round_over(); - level notify( "between_round_over" ); - restart = 0; - } -} - -award_grenades_for_survivors() //checked changed to match cerberus output -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( !players[ i ].is_zombie ) - { - lethal_grenade = players[ i ] get_player_lethal_grenade(); - if ( !players[ i ] hasweapon( lethal_grenade ) ) - { - players[ i ] giveweapon( lethal_grenade ); - players[ i ] setweaponammoclip( lethal_grenade, 2 ); //changed from 0 to 2 at own discretion - } - if ( players[ i ] getfractionmaxammo( lethal_grenade ) < 0.25 ) - { - players[ i ] setweaponammoclip( lethal_grenade, 2 ); - i++; - continue; - } - if ( players[ i ] getfractionmaxammo( lethal_grenade ) < 0.5 ) - { - players[ i ] setweaponammoclip( lethal_grenade, 3 ); - i++; - continue; - } - players[ i ] setweaponammoclip( lethal_grenade, 4 ); - } - i++; - } -} - -ai_calculate_health( round_number ) //checked changed to match cerberus output -{ - level.zombie_health = level.zombie_vars[ "zombie_health_start" ]; - i = 2; - while ( i <= round_number ) - { - if ( i >= 10 ) - { - old_health = level.zombie_health; - level.zombie_health = level.zombie_health + int( level.zombie_health * level.zombie_vars[ "zombie_health_increase_multiplier" ] ); - if ( level.zombie_health < old_health ) - { - level.zombie_health = old_health; - return; - } - i++; - continue; - } - level.zombie_health = int( level.zombie_health + level.zombie_vars[ "zombie_health_increase" ] ); - i++; - } -} - -ai_zombie_health( round_number ) //checked changed to match cerberus output -{ - zombie_health = level.zombie_vars[ "zombie_health_start" ]; - i = 2; - while ( i <= round_number ) - { - if ( i >= 10 ) - { - old_health = zombie_health; - zombie_health = zombie_health + int( zombie_health * level.zombie_vars[ "zombie_health_increase_multiplier" ] ); - if ( zombie_health < old_health ) - { - return old_health; - } - i++; - continue; - } - zombie_health = int( zombie_health + level.zombie_vars[ "zombie_health_increase" ] ); - i++; - } - return zombie_health; -} - -round_spawn_failsafe_debug() //checked dev call deleted -{ -} - -round_spawn_failsafe() //checked changed to match cerberus output -{ - self endon( "death" ); - prevorigin = self.origin; - while ( 1 ) - { - if ( !level.zombie_vars[ "zombie_use_failsafe" ] ) - { - return; - } - if ( is_true( self.ignore_round_spawn_failsafe ) ) - { - return; - } - wait 30; - if ( !self.has_legs ) - { - wait 10; - } - if ( is_true( self.is_inert ) ) - { - continue; - } - if ( isDefined( self.lastchunk_destroy_time ) ) - { - if ( ( getTime() - self.lastchunk_destroy_time ) < 8000 ) - { - continue; - } - } - if ( self.origin[ 2 ] < level.zombie_vars[ "below_world_check" ] ) - { - if ( is_true( level.put_timed_out_zombies_back_in_queue ) && !flag( "dog_round" ) && !is_true( self.isscreecher ) ) - { - level.zombie_total++; - level.zombie_total_subtract++; - } - self dodamage( self.health + 100, ( 0, 0, 0 ) ); - return; - } - else if ( distancesquared( self.origin, prevorigin ) < 576 ) - { - if ( is_true( level.put_timed_out_zombies_back_in_queue ) && !flag( "dog_round" ) ) - { - if ( !self.ignoreall && !is_true( self.nuked ) && !is_true( self.marked_for_death ) && !is_true( self.isscreecher ) && is_true( self.has_legs ) ) - { - level.zombie_total++; - level.zombie_total_subtract++; - } - } - level.zombies_timeout_playspace++; - self dodamage( self.health + 100, ( 0, 0, 0 ) ); - return; - } - else - { - prevorigin = self.origin; - } - } -} - -round_wait() //checked changed to match cerberus output -{ - level endon( "restart_round" ); - wait 1; - if ( flag( "dog_round" ) ) - { - wait 7 ; - while ( level.dog_intermission ) - { - wait 0.5; - } - increment_dog_round_stat( "finished" ); - } - while( 1 ) - { - should_wait = 0; - if ( isdefined( level.is_ghost_round_started ) && [[ level.is_ghost_round_started ]]() ) - { - should_wait = 1; - } - //changed the logic here to make more sense - //if ( get_current_zombie_count() > 0 && level.zombie_total > 0 && !level.intermission ) - if ( get_current_zombie_count() > 0 || level.zombie_total > 0 ) - { - should_wait = 1; - } - if ( !should_wait ) - { - return; - } - if ( flag( "end_round_wait" ) ) - { - return; - } - wait 1; - } -} - -zombify_player() //checked matches cerberus output -{ - self maps/mp/zombies/_zm_score::player_died_penalty(); - bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "died", self.origin ); - self recordplayerdeathzombies(); - if ( isDefined( level.deathcard_spawn_func ) ) - { - self [[ level.deathcard_spawn_func ]](); - } - if ( !isDefined( level.zombie_vars[ "zombify_player" ] ) || !level.zombie_vars[ "zombify_player" ] ) - { - self thread spawnspectator(); - return; - } - self.ignoreme = 1; - self.is_zombie = 1; - self.zombification_time = getTime(); - self.team = level.zombie_team; - self notify( "zombified" ); - if ( isDefined( self.revivetrigger ) ) - { - self.revivetrigger delete(); - } - self.revivetrigger = undefined; - self setmovespeedscale( 0.3 ); - self reviveplayer(); - self takeallweapons(); - self giveweapon( "zombie_melee", 0 ); - self switchtoweapon( "zombie_melee" ); - self disableweaponcycling(); - self disableoffhandweapons(); - setclientsysstate( "zombify", 1, self ); - self thread maps/mp/zombies/_zm_spawner::zombie_eye_glow(); - self thread playerzombie_player_damage(); - self thread playerzombie_soundboard(); -} - -playerzombie_player_damage() //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self thread playerzombie_infinite_health(); - self.zombiehealth = level.zombie_health; - while ( 1 ) - { - self waittill( "damage", amount, attacker, directionvec, point, type ); - while ( !isDefined( attacker ) || !isplayer( attacker ) ) - { - wait 0.05; - } - self.zombiehealth -= amount; - if ( self.zombiehealth <= 0 ) - { - self thread playerzombie_downed_state(); - self waittill( "playerzombie_downed_state_done" ); - self.zombiehealth = level.zombie_health; - } - } -} - -playerzombie_downed_state() //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - downtime = 15; - starttime = getTime(); - endtime = starttime + ( downtime * 1000 ); - self thread playerzombie_downed_hud(); - self.playerzombie_soundboard_disable = 1; - self thread maps/mp/zombies/_zm_spawner::zombie_eye_glow_stop(); - self disableweapons(); - self allowstand( 0 ); - self allowcrouch( 0 ); - self allowprone( 1 ); - while ( getTime() < endtime ) - { - wait 0.05; - } - self.playerzombie_soundboard_disable = 0; - self thread maps/mp/zombies/_zm_spawner::zombie_eye_glow(); - self enableweapons(); - self allowstand( 1 ); - self allowcrouch( 0 ); - self allowprone( 0 ); - self notify( "playerzombie_downed_state_done" ); -} - -playerzombie_downed_hud() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - text = newclienthudelem( self ); - text.alignx = "center"; - text.aligny = "middle"; - text.horzalign = "user_center"; - text.vertalign = "user_bottom"; - text.foreground = 1; - text.font = "default"; - text.fontscale = 1.8; - text.alpha = 0; - text.color = ( 1, 1, 1 ); - text settext( &"ZOMBIE_PLAYERZOMBIE_DOWNED" ); - text.y = -113; - /* - if ( self issplitscreen() ) - { - text.y = -137; - } - */ - text fadeovertime( 0.1 ); - text.alpha = 1; - self waittill( "playerzombie_downed_state_done" ); - text fadeovertime( 0.1 ); - text.alpha = 0; -} - -playerzombie_infinite_health() //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - bighealth = 100000; - while ( 1 ) - { - if ( self.health < bighealth ) - { - self.health = bighealth; - } - wait 0.1; - } -} - -playerzombie_soundboard() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self.playerzombie_soundboard_disable = 0; - self.buttonpressed_use = 0; - self.buttonpressed_attack = 0; - self.buttonpressed_ads = 0; - self.usesound_waittime = 3000; - self.usesound_nexttime = getTime(); - usesound = "playerzombie_usebutton_sound"; - self.attacksound_waittime = 3000; - self.attacksound_nexttime = getTime(); - attacksound = "playerzombie_attackbutton_sound"; - self.adssound_waittime = 3000; - self.adssound_nexttime = getTime(); - adssound = "playerzombie_adsbutton_sound"; - self.inputsound_nexttime = getTime(); - while( 1 ) - { - while ( self.playerzombie_soundboard_disable ) //set to while loop instead of using continue - { - wait 0.05; - } - if ( self usebuttonpressed() ) - { - if ( self can_do_input( "use" ) ) - { - self thread playerzombie_play_sound( usesound ); - self thread playerzombie_waitfor_buttonrelease( "use" ); - self.usesound_nexttime = GetTime() + self.usesound_waittime; - } - } - else if ( self attackbuttonpressed() ) - { - if ( self can_do_input( "attack" ) ) - { - self thread playerzombie_play_sound( attacksound ); - self thread playerzombie_waitfor_buttonrelease( "attack" ); - self.attacksound_nexttime = GetTime() + self.attacksound_waittime; - } - } - else if ( self adsbuttonpressed() ) - { - if ( self can_do_input( "ads" ) ) - { - self thread playerzombie_play_sound( adssound ); - self thread playerzombie_waitfor_buttonrelease( "ads" ); - self.adssound_nexttime = GetTime() + self.adssound_waittime; - } - } - wait 0.05; - } -} - -can_do_input( inputtype ) //checked matches cerberus output -{ - if ( getTime() < self.inputsound_nexttime ) - { - return 0; - } - cando = 0; - switch( inputtype ) - { - case "use": - if ( getTime() >= self.usesound_nexttime && !self.buttonpressed_use ) - { - cando = 1; - } - break; - case "attack": - if ( getTime() >= self.attacksound_nexttime && !self.buttonpressed_attack ) - { - cando = 1; - } - break; - case "ads": - if ( getTime() >= self.usesound_nexttime && !self.buttonpressed_ads ) - { - cando = 1; - } - break; - default: - break; - } - return cando; -} - -playerzombie_play_sound( alias ) //checked matches cerberus output -{ - self play_sound_on_ent( alias ); -} - -playerzombie_waitfor_buttonrelease( inputtype ) //may look into this if its broken 9/8/20 -{ - if ( inputtype != "use" && inputtype != "attack" && inputtype != "ads" ) - { - return; - } - notifystring = "waitfor_buttonrelease_" + inputtype; - self notify( notifystring ); - self endon( notifystring ); - if ( inputtype == "use" ) - { - self.buttonpressed_use = 1; - while ( self usebuttonpressed() ) - { - wait 0.05; - } - self.buttonpressed_use = 0; - } - else if ( inputtype == "attack" ) - { - self.buttonpressed_attack = 1; - while ( self attackbuttonpressed() ) - { - wait 0.05; - } - self.buttonpressed_attack = 0; - } - else if ( inputtype == "ads" ) - { - self.buttonpressed_ads = 1; - while ( self adsbuttonpressed() ) - { - wait 0.05; - } - self.buttonpressed_ads = 0; - } -} - -remove_ignore_attacker() //checked matches cerberus output -{ - self notify( "new_ignore_attacker" ); - self endon( "new_ignore_attacker" ); - self endon( "disconnect" ); - if ( !isDefined( level.ignore_enemy_timer ) ) - { - level.ignore_enemy_timer = 0.4; - } - wait level.ignore_enemy_timer; - self.ignoreattacker = undefined; -} - -player_shield_facing_attacker( vdir, limit ) //checked matches cerberus output -{ - orientation = self getplayerangles(); - forwardvec = anglesToForward( orientation ); - forwardvec2d = ( forwardvec[ 0 ], forwardvec[ 1 ], 0 ); - unitforwardvec2d = vectornormalize( forwardvec2d ); - tofaceevec = vdir * -1; - tofaceevec2d = ( tofaceevec[ 0 ], tofaceevec[ 1 ], 0 ); - unittofaceevec2d = vectornormalize( tofaceevec2d ); - dotproduct = vectordot( unitforwardvec2d, unittofaceevec2d ); - return dotproduct > limit; //is this valid? -} - -player_damage_override_cheat( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) //checked matches cerberus output -{ - player_damage_override( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); - return 0; -} - -player_damage_override( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) //checked changed to match cerberus output -{ - if ( isDefined( level._game_module_player_damage_callback ) ) - { - self [[ level._game_module_player_damage_callback ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); - } - idamage = self check_player_damage_callbacks( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); - if ( is_true( self.use_adjusted_grenade_damage ) ) - { - self.use_adjusted_grenade_damage = undefined; - if ( self.health > idamage ) - { - return idamage; - } - } - if ( !idamage ) - { - return 0; - } - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - return 0; - } - if ( isDefined( einflictor ) ) - { - if ( is_true( einflictor.water_damage ) ) - { - return 0; - } - } - if ( isDefined( eattacker ) && is_true( eattacker.is_zombie ) || isplayer( eattacker ) ) - { - if ( is_true( self.hasriotshield ) && isDefined( vdir ) ) - { - if ( is_true( self.hasriotshieldequipped ) ) - { - if ( self player_shield_facing_attacker( vdir, 0.2 ) && isDefined( self.player_shield_apply_damage ) ) - { - self [[ self.player_shield_apply_damage ]]( 100, 0 ); - return 0; - } - } - else if ( !isDefined( self.riotshieldentity ) ) - { - if ( !self player_shield_facing_attacker( vdir, -0.2 ) && isDefined( self.player_shield_apply_damage ) ) - { - self [[ self.player_shield_apply_damage ]]( 100, 0 ); - return 0; - } - } - } - } - if ( isDefined( eattacker ) ) - { - if ( isDefined( self.ignoreattacker ) && self.ignoreattacker == eattacker ) - { - return 0; - } - if ( is_true( self.is_zombie ) && is_true( eattacker.is_zombie ) ) - { - return 0; - } - if ( is_true( eattacker.is_zombie ) ) - { - self.ignoreattacker = eattacker; - self thread remove_ignore_attacker(); - if ( isDefined( eattacker.custom_damage_func ) ) - { - idamage = eattacker [[ eattacker.custom_damage_func ]]( self ); - } - else if ( isDefined( eattacker.meleedamage ) ) - { - idamage = eattacker.meleedamage; - } - else - { - idamage = 50; - } - } - eattacker notify( "hit_player" ); - if ( smeansofdeath != "MOD_FALLING" ) - { - self thread playswipesound( smeansofdeath, eattacker ); - //changed to match bo3 _zm.gsc - if ( is_true( eattacker.is_zombie ) || isplayer( eattacker ) ) - { - self playrumbleonentity( "damage_heavy" ); - } - canexert = 1; - if ( is_true( level.pers_upgrade_flopper ) ) - { - if ( is_true( self.pers_upgrades_awarded[ "flopper" ] ) ) - { - if ( smeansofdeath != "MOD_PROJECTILE_SPLASH" && smeansofdeath != "MOD_GRENADE" && smeansofdeath != "MOD_GRENADE_SPLASH" ) - { - canexert = smeansofdeath; - } - } - } - if ( is_true( canexert ) ) - { - if ( randomintrange( 0, 1 ) == 0 ) - { - self thread maps/mp/zombies/_zm_audio::playerexert( "hitmed" ); - } - else - { - self thread maps/mp/zombies/_zm_audio::playerexert( "hitlrg" ); - } - } - } - } - finaldamage = idamage; - //checked changed to match bo1 _zombiemode.gsc - if ( is_placeable_mine( sweapon ) || sweapon == "freezegun_zm" || sweapon == "freezegun_upgraded_zm" ) - { - return 0; - } - if ( isDefined( self.player_damage_override ) ) - { - self thread [[ self.player_damage_override ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); - } - if ( smeansofdeath == "MOD_FALLING" ) - { - if ( self hasperk( "specialty_flakjacket" ) && isDefined( self.divetoprone ) && self.divetoprone == 1 ) - { - if ( isDefined( level.zombiemode_divetonuke_perk_func ) ) - { - [[ level.zombiemode_divetonuke_perk_func ]]( self, self.origin ); - } - return 0; - } - if ( is_true( level.pers_upgrade_flopper ) ) - { - if ( self maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_flopper_damage_check( smeansofdeath, idamage ) ) - { - return 0; - } - } - } - //checked changed to match bo1 _zombiemode.gsc - if ( smeansofdeath == "MOD_PROJECTILE" || smeansofdeath == "MOD_PROJECTILE_SPLASH" || smeansofdeath == "MOD_GRENADE" || smeansofdeath == "MOD_GRENADE_SPLASH" ) - { - if ( self hasperk( "specialty_flakjacket" ) ) - { - return 0; - } - if ( is_true( level.pers_upgrade_flopper ) ) - { - if ( is_true( self.pers_upgrades_awarded[ "flopper" ] ) ) - { - return 0; - } - } - if ( self.health > 75 && !is_true( self.is_zombie ) ) - { - return 75; - } - } - if ( idamage < self.health ) - { - if ( isDefined( eattacker ) ) - { - if ( isDefined( level.custom_kill_damaged_vo ) ) - { - eattacker thread [[ level.custom_kill_damaged_vo ]]( self ); - } - else - { - eattacker.sound_damage_player = self; - } - if ( !is_true( eattacker.has_legs ) ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "crawl_hit" ); - } - else if ( isDefined( eattacker.animname ) && eattacker.animname == "monkey_zombie" ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "monkey_hit" ); - } - } - return finaldamage; - } - if ( isDefined( eattacker ) ) - { - if ( isDefined( eattacker.animname ) && eattacker.animname == "zombie_dog" ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "killed_by_zdog" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "killed_by_zdog" ); - } - else if ( isDefined( eattacker.is_avogadro ) && eattacker.is_avogadro ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "killed_by_avogadro", 0 ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "killed_by_avogadro" ); - } - } - self thread clear_path_timers(); - if ( level.intermission ) - { - level waittill( "forever" ); - } - if ( level.scr_zm_ui_gametype == "zcleansed" && idamage > 0 ) - { - if ( ( !is_true( self.laststand ) && !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || !isDefined( self.last_player_attacker ) ) && isDefined( eattacker ) && isplayer( eattacker ) && eattacker.team != self.team ) - { - if ( isDefined( eattacker.maxhealth ) && is_true( eattacker.is_zombie ) ) - { - eattacker.health = eattacker.maxhealth; - } - if ( isDefined( level.player_kills_player ) ) - { - self thread [[ level.player_kills_player ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); - } - } - } - //changed from && to || - if ( self.lives > 0 || self hasperk( "specialty_finalstand" ) ) - { - self.lives--; - - if ( isDefined( level.chugabud_laststand_func ) ) - { - self thread [[ level.chugabud_laststand_func ]](); - return 0; - } - } - players = get_players(); - count = 0; - //subtle changes in logic in the if statements - for ( i = 0; i < players.size; i++ ) - { - //count of dead players - //checked changed to match bo1 _zombiemode.gsc - if ( players[ i ] == self || players[ i ].is_zombie || players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() || players[ i ].sessionstate == "spectator" ) - { - count++; - } - } - //checked against bo3 _zm.gsc changed to match - if ( count < players.size || isDefined( level._game_module_game_end_check ) && ![[ level._game_module_game_end_check ]]() ) - { - if ( isDefined( self.lives ) && self.lives > 0 && is_true( level.force_solo_quick_revive ) && self hasperk( "specialty_quickrevive" ) ) - { - self thread wait_and_revive(); - } - return finaldamage; - } - solo_death = is_solo_death( self, players ); - non_solo_death = is_non_solo_death( self, players, count ); - if ( ( solo_death || non_solo_death ) && !is_true( level.no_end_game_check ) ) - { - level notify( "stop_suicide_trigger" ); - self thread maps/mp/zombies/_zm_laststand::playerlaststand( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ); - if ( !isDefined( vdir ) ) - { - vdir = ( 1, 0, 0 ); - } - self fakedamagefrom( vdir ); - if ( isDefined( level.custom_player_fake_death ) ) - { - self thread [[ level.custom_player_fake_death ]]( vdir, smeansofdeath ); - } - else - { - self thread player_fake_death(); - } - } - if ( count == players.size && !is_true( level.no_end_game_check ) ) - { - if ( players.size == 1 && flag( "solo_game" ) ) - { - if ( self.lives == 0 || !self hasperk( "specialty_quickrevive" ) ) - { - self.lives = 0; - level notify( "pre_end_game" ); - wait_network_frame(); - if ( flag( "dog_round" ) ) - { - increment_dog_round_stat( "lost" ); - } - level notify( "end_game" ); - } - else - { - return finaldamage; - } - } - else - { - level notify( "pre_end_game" ); - wait_network_frame(); - if ( flag( "dog_round" ) ) - { - increment_dog_round_stat( "lost" ); - } - level notify( "end_game" ); - } - return 0; - } - else - { - surface = "flesh"; - return finaldamage; - } -} - -clear_path_timers() //checked changed to match cerberus output //checked against bo3 _zm.gsc matches -{ - zombies = getaiarray( level.zombie_team ); - foreach ( zombie in zombies ) - { - if ( isdefined( zombie.favoriteenemy ) && zombie.favoriteenemy == self ) - { - zombie.zombie_path_timer = 0; - } - } -} - -check_player_damage_callbacks( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) //checked changed to match cerberus output //checked again against bo1 _zombiemode.gsc matches //checked against bo3 _zm.gsc matches -{ - if ( !isDefined( level.player_damage_callbacks ) ) - { - return idamage; - } - for ( i = 0; i < level.player_damage_callbacks.size; i++ ) - { - newdamage = self [[ level.player_damage_callbacks[ i ] ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); - if ( newdamage != -1 ) - { - return newdamage; - } - } - return idamage; -} - -register_player_damage_callback( func ) //checked matches cerberus output //checked again against bo1 _zombiemode.gsc matches //checked against bo3 _zm.gsc matches -{ - if ( !isDefined( level.player_damage_callbacks ) ) - { - level.player_damage_callbacks = []; - } - level.player_damage_callbacks[ level.player_damage_callbacks.size ] = func; -} - -wait_and_revive() //checked changed to match cerberus output //checked against bo3 _zm.gsc matches within reason -{ - flag_set( "wait_and_revive" ); - if ( isDefined( self.waiting_to_revive ) && self.waiting_to_revive == 1 ) - { - return; - } - if ( is_true( self.pers_upgrades_awarded[ "perk_lose" ] ) ) - { - self maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_perk_lose_save(); - } - self.waiting_to_revive = 1; - if ( isDefined( level.exit_level_func ) ) - { - self thread [[ level.exit_level_func ]](); - } - else if ( get_players().size == 1 ) - { - self thread default_exit_level(); - } - solo_revive_time = 10; - self.revive_hud settext( &"ZOMBIE_REVIVING_SOLO", self ); - self maps/mp/zombies/_zm_laststand::revive_hud_show_n_fade( solo_revive_time ); - flag_wait_or_timeout( "instant_revive", solo_revive_time ); - if ( flag( "instant_revive" ) ) - { - self maps/mp/zombies/_zm_laststand::revive_hud_show_n_fade( 1 ); - } - flag_clear( "wait_and_revive" ); - self maps/mp/zombies/_zm_laststand::auto_revive( self ); - self.lives--; - - self.waiting_to_revive = 0; - if ( is_true( self.pers_upgrades_awarded[ "perk_lose" ] ) ) - { - self thread maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_perk_lose_restore(); - } -} - -actor_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) //checked changed to match cerberus output //checked against bo3 _zm.gsc partially changed to match -{ - if ( !isDefined( self ) || !isDefined( attacker ) ) - { - return damage; - } - if ( weapon == "tazer_knuckles_zm" || weapon == "jetgun_zm" ) - { - self.knuckles_extinguish_flames = 1; - } - else if ( weapon != "none" ) - { - self.knuckles_extinguish_flames = undefined; - } - if ( isDefined( attacker.animname ) && attacker.animname == "quad_zombie" ) - { - if ( isDefined( self.animname ) && self.animname == "quad_zombie" ) - { - return 0; - } - } - if ( !isplayer( attacker ) && isDefined( self.non_attacker_func ) ) - { - if ( is_true( self.non_attack_func_takes_attacker ) ) - { - return self [[ self.non_attacker_func ]]( damage, weapon, attacker ); - } - else - { - return self [[ self.non_attacker_func ]]( damage, weapon ); - } - } - if ( !isplayer( attacker ) && !isplayer( self ) ) - { - return damage; - } - if ( !isDefined( damage ) || !isDefined( meansofdeath ) ) - { - return damage; - } - if ( meansofdeath == "" ) - { - return damage; - } - old_damage = damage; - final_damage = damage; - if ( isDefined( self.actor_damage_func ) ) - { - final_damage = [[ self.actor_damage_func ]]( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - } - if ( attacker.classname == "script_vehicle" && isDefined( attacker.owner ) ) - { - attacker = attacker.owner; - } - if ( is_true( self.in_water ) ) - { - if ( int( final_damage ) >= self.health ) - { - self.water_damage = 1; - } - } - attacker thread maps/mp/gametypes_zm/_weapons::checkhit( weapon ); - if ( attacker maps/mp/zombies/_zm_pers_upgrades_functions::pers_mulit_kill_headshot_active() && is_headshot( weapon, shitloc, meansofdeath ) ) - { - final_damage *= 2; - } - if ( is_true( level.headshots_only ) && isDefined( attacker ) && isplayer( attacker ) ) - { - //changed to match bo3 _zm.gsc behavior - if ( meansofdeath == "MOD_MELEE" && shitloc == "head" || meansofdeath == "MOD_MELEE" && shitloc == "helmet" ) - { - return int( final_damage ); - } - if ( is_explosive_damage( meansofdeath ) ) - { - return int( final_damage ); - } - else if ( !is_headshot( weapon, shitloc, meansofdeath ) ) - { - return 0; - } - } - return int( final_damage ); -} - -actor_damage_override_wrapper( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) //checked does not match cerberus output did not change -{ - damage_override = self actor_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - if ( ( self.health - damage_override ) > 0 || !is_true( self.dont_die_on_me ) ) - { - self finishactordamage( inflictor, attacker, damage_override, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - } - else - { - self [[ level.callbackactorkilled ]]( inflictor, attacker, damage, meansofdeath, weapon, vdir, shitloc, psoffsettime ); - self finishactordamage( inflictor, attacker, damage_override, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - } -} - -actor_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) //checked matches cerberus output -{ - if ( isDefined( game[ "state" ] ) && game[ "state" ] == "postgame" ) - { - return; - } - if ( isai( attacker ) && isDefined( attacker.script_owner ) ) - { - if ( attacker.script_owner.team != self.team ) //changed to match bo3 _zm.gsc - { - attacker = attacker.script_owner; - } - } - if ( attacker.classname == "script_vehicle" && isDefined( attacker.owner ) ) - { - attacker = attacker.owner; - } - if ( isDefined( attacker ) && isplayer( attacker ) ) - { - multiplier = 1; - if ( is_headshot( sweapon, shitloc, smeansofdeath ) ) - { - multiplier = 1.5; - } - type = undefined; - if ( isDefined( self.animname ) ) - { - switch( self.animname ) - { - case "quad_zombie": - type = "quadkill"; - break; - case "ape_zombie": - type = "apekill"; - break; - case "zombie": - type = "zombiekill"; - break; - case "zombie_dog": - type = "dogkill"; - break; - } - } - } - if ( is_true( self.is_ziplining ) ) - { - self.deathanim = undefined; - } - if ( isDefined( self.actor_killed_override ) ) - { - self [[ self.actor_killed_override ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ); - } - /* - if ( isDefined( self.deathfunction ) ) //added from bo3 _zm.gsc - { - self [[ self.deathfunction ]]( eInflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ); - } - */ -} - -round_end_monitor() //checked matches cerberus output //checked against bo3 _zm.gsc matches within reason -{ - while ( 1 ) - { - level waittill( "end_of_round" ); - maps/mp/_demo::bookmark( "zm_round_end", getTime(), undefined, undefined, 1 ); - bbpostdemostreamstatsforround( level.round_number ); - wait 0.05; - } -} - -end_game() //checked changed to match cerberus output -{ - level waittill( "end_game" ); - check_end_game_intermission_delay(); - clientnotify( "zesn" ); - if ( isDefined( level.sndgameovermusicoverride ) ) - { - level thread maps/mp/zombies/_zm_audio::change_zombie_music( level.sndgameovermusicoverride ); - } - else - { - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "game_over" ); - } - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - setclientsysstate( "lsm", "0", players[ i ] ); - } - for ( i = 0; i < players.size; i++ ) - { - if ( players[ i ] player_is_in_laststand() ) - { - players[ i ] recordplayerdeathzombies(); - players[ i ] maps/mp/zombies/_zm_stats::increment_player_stat( "deaths" ); - players[ i ] maps/mp/zombies/_zm_stats::increment_client_stat( "deaths" ); - players[ i ] maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat(); - } - if ( isdefined( players[ i ].revivetexthud) ) - { - players[ i ].revivetexthud destroy(); - } - } - stopallrumbles(); - level.intermission = 1; - level.zombie_vars[ "zombie_powerup_insta_kill_time" ] = 0; - level.zombie_vars[ "zombie_powerup_fire_sale_time" ] = 0; - level.zombie_vars[ "zombie_powerup_point_doubler_time" ] = 0; - wait 0.1; - game_over = []; - survived = []; - players = get_players(); - setmatchflag( "disableIngameMenu", 1 ); - foreach ( player in players ) - { - player closemenu(); - player closeingamemenu(); - } - if ( !isDefined( level._supress_survived_screen ) ) - { - for ( i = 0; i < players.size; i++ ) - { - if ( isDefined( level.custom_game_over_hud_elem ) ) - { - game_over[ i ] = [[ level.custom_game_over_hud_elem ]]( players[ i ] ); - } - else - { - game_over[ i ] = newclienthudelem( players[ i ] ); - game_over[ i ].alignx = "center"; - game_over[ i ].aligny = "middle"; - game_over[ i ].horzalign = "center"; - game_over[ i ].vertalign = "middle"; - game_over[ i ].y -= 130; - game_over[ i ].foreground = 1; - game_over[ i ].fontscale = 3; - game_over[ i ].alpha = 0; - game_over[ i ].color = ( 1, 1, 1 ); - game_over[ i ].hidewheninmenu = 1; - game_over[ i ] settext( &"ZOMBIE_GAME_OVER" ); - game_over[ i ] fadeovertime( 1 ); - game_over[ i ].alpha = 1; - /* - if ( players[ i ] issplitscreen() ) - { - game_over[ i ].fontscale = 2; - game_over[ i ].y += 40; - } - */ - } - survived[ i ] = newclienthudelem( players[ i ] ); - survived[ i ].alignx = "center"; - survived[ i ].aligny = "middle"; - survived[ i ].horzalign = "center"; - survived[ i ].vertalign = "middle"; - survived[ i ].y -= 100; - survived[ i ].foreground = 1; - survived[ i ].fontscale = 2; - survived[ i ].alpha = 0; - survived[ i ].color = ( 1, 1, 1 ); - survived[ i ].hidewheninmenu = 1; - /* - if ( players[ i ] issplitscreen() ) - { - survived[ i ].fontscale = 1.5; - survived[ i ].y += 40; - } - */ - if ( level.round_number < 2 ) - { - if ( level.script == "zombie_moon" ) - { - if ( !isDefined( level.left_nomans_land ) ) - { - nomanslandtime = level.nml_best_time; - player_survival_time = int( nomanslandtime / 1000 ); - player_survival_time_in_mins = maps/mp/zombies/_zm::to_mins( player_survival_time ); - survived[ i ] settext( &"ZOMBIE_SURVIVED_NOMANS", player_survival_time_in_mins ); - } - else if ( level.left_nomans_land == 2 ) - { - survived[ i ] settext( &"ZOMBIE_SURVIVED_ROUND" ); - } - } - else - { - survived[ i ] settext( &"ZOMBIE_SURVIVED_ROUND" ); - } - } - else - { - survived[ i ] settext( &"ZOMBIE_SURVIVED_ROUNDS", level.round_number ); - } - survived[ i ] fadeovertime( 1 ); - survived[ i ].alpha = 1; - } - } - if ( isDefined( level.custom_end_screen ) ) - { - level [[ level.custom_end_screen ]](); - } - for ( i = 0; i < players.size; i++ ) - { - players[ i ] setclientammocounterhide( 1 ); - players[ i ] setclientminiscoreboardhide( 1 ); - } - uploadstats(); - maps/mp/zombies/_zm_stats::update_players_stats_at_match_end( players ); - maps/mp/zombies/_zm_stats::update_global_counters_on_match_end(); - wait 1; - wait 3.95; - players = get_players(); - foreach ( player in players ) - { - if ( isdefined( player.sessionstate ) && player.sessionstate == "spectator" ) - { - player.sessionstate = "playing"; - } - } - wait 0.05; - players = get_players(); - if ( !isDefined( level._supress_survived_screen ) ) - { - for(i = 0; i < players.size; i++) - { - survived[ i ] destroy(); - game_over[ i ] destroy(); - } - } - for ( i = 0; i < players.size; i++ ) - { - if ( isDefined( players[ i ].survived_hud ) ) - { - players[ i ].survived_hud destroy(); - } - if ( isDefined( players[ i ].game_over_hud ) ) - { - players[ i ].game_over_hud destroy(); - } - } - intermission(); - wait level.zombie_vars[ "zombie_intermission_time" ]; - level notify( "stop_intermission" ); - array_thread( get_players(), ::player_exit_level ); - bbprint( "zombie_epilogs", "rounds %d", level.round_number ); - wait 1.5; - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - players[ i ] cameraactivate( 0 ); - } - exitlevel( 0 ); - wait 666; -} - -disable_end_game_intermission( delay ) //checked matches cerberus output -{ - level.disable_intermission = 1; - wait delay; - level.disable_intermission = undefined; -} - -check_end_game_intermission_delay() //checked changed to match cerberus output -{ - while ( isDefined( level.disable_intermission ) ) - { - while ( 1 ) - { - if ( !isDefined( level.disable_intermission ) ) - { - return; - } - wait 0.01; - } - } -} - -upload_leaderboards() //checked changed to match cerberus output -{ - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - players[ i ] uploadleaderboards(); - } -} - -initializestattracking() //checked matches cerberus output -{ - level.global_zombies_killed = 0; - level.zombies_timeout_spawn = 0; - level.zombies_timeout_playspace = 0; - level.zombies_timeout_undamaged = 0; - level.zombie_player_killed_count = 0; - level.zombie_trap_killed_count = 0; - level.zombie_pathing_failed = 0; - level.zombie_breadcrumb_failed = 0; -} - -uploadglobalstatcounters() //checked matches cerberus output -{ - incrementcounter( "global_zombies_killed", level.global_zombies_killed ); - incrementcounter( "global_zombies_killed_by_players", level.zombie_player_killed_count ); - incrementcounter( "global_zombies_killed_by_traps", level.zombie_trap_killed_count ); -} - -player_fake_death() //checked matches cerberus output -{ - level notify( "fake_death" ); - self notify( "fake_death" ); - self takeallweapons(); - self allowstand( 0 ); - self allowcrouch( 0 ); - self allowprone( 1 ); - self.ignoreme = 1; - self enableinvulnerability(); - wait 1; - self freezecontrols( 1 ); -} - -player_exit_level() //checked matches cerberus output -{ - self allowstand( 1 ); - self allowcrouch( 0 ); - self allowprone( 0 ); - if ( isDefined( self.game_over_bg ) ) - { - self.game_over_bg.foreground = 1; - self.game_over_bg.sort = 100; - self.game_over_bg fadeovertime( 1 ); - self.game_over_bg.alpha = 1; - } -} - -player_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) //checked matches cerberus output -{ - level waittill( "forever" ); -} - -player_zombie_breadcrumb() //checked changed to match cerberus output -{ - self notify( "stop_player_zombie_breadcrumb" ); - self endon( "stop_player_zombie_breadcrumb" ); - self endon( "disconnect" ); - self endon( "spawned_spectator" ); - level endon( "intermission" ); - self.zombie_breadcrumbs = []; - self.zombie_breadcrumb_distance = 576; - self.zombie_breadcrumb_area_num = 3; - self.zombie_breadcrumb_area_distance = 16; - self store_crumb( self.origin ); - last_crumb = self.origin; - self thread debug_breadcrumbs(); - while ( 1 ) - { - wait_time = 0.1; - while ( self.ignoreme ) - { - wait wait_time; - } - store_crumb = 1; - airborne = 0; - crumb = self.origin; - if ( !self isonground() && self isinvehicle() ) - { - trace = bullettrace( self.origin + vectorScale( ( 0, 0, 1 ), 10 ), self.origin, 0, undefined ); - crumb = trace[ "position" ]; - } - if ( !airborne && distancesquared( crumb, last_crumb ) < self.zombie_breadcrumb_distance ) - { - store_crumb = 0; - } - if ( airborne && self isonground() ) - { - store_crumb = 1; - airborne = 0; - } - if ( isDefined( level.custom_breadcrumb_store_func ) ) - { - store_crumb = self [[ level.custom_breadcrumb_store_func ]]( store_crumb ); - } - if ( isDefined( level.custom_airborne_func ) ) - { - airborne = self [[ level.custom_airborne_func ]]( airborne ); - } - if ( store_crumb ) - { - debug_print( "Player is storing breadcrumb " + crumb ); - if ( isDefined( self.node ) ) - { - debug_print( "has closest node " ); - } - last_crumb = crumb; - self store_crumb( crumb ); - } - wait wait_time; - } -} - -store_crumb( origin ) //checked changed to match cerberus output -{ - offsets = []; - height_offset = 32; - index = 0; - for ( j = 1; j <= self.zombie_breadcrumb_area_num; j++ ) - { - offset = j * self.zombie_breadcrumb_area_distance; - offsets[ 0 ] = ( origin[ 0 ] - offset, origin[ 1 ], origin[ 2 ] ); - offsets[ 1 ] = ( origin[ 0 ] + offset, origin[ 1 ], origin[ 2 ] ); - offsets[ 2 ] = ( origin[ 0 ], origin[ 1 ] - offset, origin[ 2 ] ); - offsets[ 3 ] = ( origin[ 0 ], origin[ 1 ] + offset, origin[ 2 ] ); - offsets[ 4 ] = ( origin[ 0 ] - offset, origin[ 1 ], origin[ 2 ] + height_offset ); - offsets[ 5 ] = ( origin[ 0 ] + offset, origin[ 1 ], origin[ 2 ] + height_offset ); - offsets[ 6 ] = ( origin[ 0 ], origin[ 1 ] - offset, origin[ 2 ] + height_offset ); - offsets[ 7 ] = ( origin[ 0 ], origin[ 1 ] + offset, origin[ 2 ] + height_offset ); - for ( i = 0; i < offsets.size; i++ ) - { - self.zombie_breadcrumbs[ index ] = offsets[ i ]; - index++; - } - j++; - } -} - -to_mins( seconds ) //checked matches cerberus output -{ - hours = 0; - minutes = 0; - if ( seconds > 59 ) - { - minutes = int( seconds / 60 ); - seconds = int( seconds * 1000 ) % 60000; - seconds *= 0.001; - if ( minutes > 59 ) - { - hours = int( minutes / 60 ); - minutes = int( minutes * 1000 ) % 60000; - minutes *= 0.001; - } - } - if ( hours < 10 ) - { - hours = "0" + hours; - } - if ( minutes < 10 ) - { - minutes = "0" + minutes; - } - seconds = int( seconds ); - if ( seconds < 10 ) - { - seconds = "0" + seconds; - } - combined = "" + hours + ":" + minutes + ":" + seconds; - return combined; -} - -intermission() //checked changed to match cerberus output -{ - level.intermission = 1; - level notify( "intermission" ); - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - setclientsysstate( "levelNotify", "zi", players[ i ] ); - players[ i ] setclientthirdperson( 0 ); - players[ i ] resetfov(); - players[ i ].health = 100; - players[ i ] thread [[ level.custom_intermission ]](); - players[ i ] stopsounds(); - } - wait 0.25; - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - setclientsysstate( "lsm", "0", players[ i ] ); - } - level thread zombie_game_over_death(); -} - -zombie_game_over_death() //checked changed to match cerberus output -{ - zombies = getaiarray( level.zombie_team ); - i = 0; - while ( i < zombies.size ) - { - if ( !isalive( zombies[ i ] ) ) - { - i++; - continue; - } - zombies[ i ] setgoalpos( zombies[ i ].origin ); - i++; - } - i = 0; - while ( i < zombies.size ) - { - if ( !isalive( zombies[ i ] ) ) - { - i++; - continue; - } - if ( is_true( zombies[ i ].ignore_game_over_death ) ) - { - i++; - continue; - } - wait ( 0.5 + randomfloat( 2 ) ); - if ( isDefined( zombies[ i ] ) ) - { - zombies[ i ] maps/mp/zombies/_zm_spawner::zombie_head_gib(); - zombies[ i ] dodamage( zombies[ i ].health + 666, zombies[ i ].origin ); - } - i++; - } -} - -player_intermission() //checked changed to match cerberus output -{ - self closemenu(); - self closeingamemenu(); - level endon( "stop_intermission" ); - self endon( "disconnect" ); - self endon( "death" ); - self notify( "_zombie_game_over" ); - self.score = self.score_total; - self.sessionstate = "intermission"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - points = getstructarray( "intermission", "targetname" ); - if ( !isDefined( points ) || points.size == 0 ) - { - points = getentarray( "info_intermission", "classname" ); - if ( points.size < 1 ) - { - return; - } - } - self.game_over_bg = newclienthudelem( self ); - self.game_over_bg.horzalign = "fullscreen"; - self.game_over_bg.vertalign = "fullscreen"; - self.game_over_bg setshader( "black", 640, 480 ); - self.game_over_bg.alpha = 1; - org = undefined; - - while ( 1 ) - { - points = array_randomize( points ); - i = 0; - while ( i < points.size ) - { - point = points[ i ]; - if ( !isdefined( org ) ) - { - self spawn( point.origin, point.angles ); - } - if ( isdefined( points[ i ].target ) ) - { - if ( !isdefined( org ) ) - { - org = spawn( "script_model", self.origin + VectorScale( 0, 0, -1, 60 ) ); - org setmodel( "tag_origin" ); - } - org.origin = points[ i ].origin; - org.angles = points[ i ].angles; - for( j = 0; j < get_players().size; j++ ) - { - player = get_players()[ j ]; - player camerasetposition(org); - player camerasetlookat(); - player cameraactivate( 1 ); - } - speed = 20; - if ( isdefined( points[ i ].speed ) ) - { - speed = points[ i ].speed; - } - target_point = getstruct( points[ i ].target, "targetname" ); - dist = distance( points[ i ].origin, target_point.origin ); - time = dist / speed; - q_time = time * 0.25; - if(q_time > 1) - { - q_time = 1; - } - self.game_over_bg fadeovertime( q_time ); - self.game_over_bg.alpha = 0; - org moveto( target_point.origin, time, q_time, q_time ); - org rotateto( target_point.angles, time, q_time, q_time ); - wait time - q_time ; - self.game_over_bg fadeovertime( q_time ); - self.game_over_bg.alpha = 1; - wait q_time; - i++; - continue; - } - self.game_over_bg fadeovertime( 1 ); - self.game_over_bg.alpha = 0; - wait 5; - self.game_over_bg thread fade_up_over_time( 1 ); - i++; - } - } -} - - -fade_up_over_time( t ) //checked matches cerberus output -{ - self fadeovertime( t ); - self.alpha = 1; -} - -default_exit_level() //checked partially changed match beta dump see info.md -{ - zombies = getaiarray( level.zombie_team ); - i = 0; - while ( i < zombies.size ) - { - if( is_true( zombies[ i ].ignore_solo_last_stand ) ) - { - i++; - continue; - } - if ( isdefined(zombies[ i ].find_exit_point ) ) - { - zombies[ i ] thread [[ zombies[i].find_exit_point ]](); - i++; - continue; - } - if ( zombies[ i ].ignoreme ) - { - zombies[ i ] thread default_delayed_exit(); - } - else - { - zombies[ i ] thread default_find_exit_point(); - } - i++; - } -} - -default_delayed_exit() //checked matches cerberus output -{ - self endon( "death" ); - while ( 1 ) - { - if ( !flag( "wait_and_revive" ) ) - { - return; - } - if ( !self.ignoreme ) - { - break; - } - wait 0.1; - } - self thread default_find_exit_point(); -} - -default_find_exit_point() //checked changed to match cerberus output -{ - self endon( "death" ); - player = get_players()[ 0 ]; - dist_zombie = 0; - dist_player = 0; - dest = 0; - away = vectornormalize( self.origin - player.origin ); - endpos = self.origin + vectorScale( away, 600 ); - locs = array_randomize( level.enemy_dog_locations ); - for ( i = 0; i < locs.size; i++ ) - { - dist_zombie = distancesquared( locs[ i ].origin, endpos ); - dist_player = distancesquared( locs[ i ].origin, player.origin ); - if ( dist_zombie < dist_player ) - { - dest = i; - break; - } - } - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - if ( isDefined( locs[ dest ] ) ) - { - self setgoalpos( locs[ dest ].origin ); - } - while ( 1 ) - { - b_passed_override = 1; - if ( isDefined( level.default_find_exit_position_override ) ) - { - b_passed_override = [[ level.default_find_exit_position_override ]](); - } - if ( !flag( "wait_and_revive" ) && b_passed_override ) - { - break; - } - wait 0.1; - } - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); -} - -play_level_start_vox_delayed() //checked matches cerberus output -{ - wait 3; - players = get_players(); - num = randomintrange( 0, players.size ); - players[ num ] maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "intro" ); -} - -register_sidequest( id, sidequest_stat ) //checked changed to match cerberus output -{ - if ( !isDefined( level.zombie_sidequest_stat ) ) - { - level.zombie_sidequest_previously_completed = []; - level.zombie_sidequest_stat = []; - } - level.zombie_sidequest_stat[ id ] = sidequest_stat; - flag_wait( "start_zombie_round_logic" ); - level.zombie_sidequest_previously_completed[ id ] = 0; - /* - if ( level.systemlink || getDvarInt( "splitscreen_playerCount" ) == get_players().size ) - { - return; - } - */ - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - if ( players[ i ] maps/mp/zombies/_zm_stats::get_global_stat( level.zombie_sidequest_stat[ id ] ) ) - { - level.zombie_sidequest_previously_completed[ id ] = 1; - return; - } - } -} - -is_sidequest_previously_completed( id ) //checked does not match cerberus output did not change -{ - if ( isDefined( level.zombie_sidequest_previously_completed[ id ] ) ) - { - return level.zombie_sidequest_previously_completed[ id ]; - } -} - -set_sidequest_completed( id ) //checked changed to match cerberus output -{ - level notify( "zombie_sidequest_completed" ); - level.zombie_sidequest_previously_completed[ id ] = 1; - if ( level.systemlink ) - { - return; - } - /* - if ( getDvarInt( "splitscreen_playerCount" ) == get_players().size ) - { - return; - } - */ - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - if ( isDefined( level.zombie_sidequest_stat[ id ] ) ) - { - players[ i ] maps/mp/zombies/_zm_stats::add_global_stat( level.zombie_sidequest_stat[ id ], 1 ); - } - i++; - } -} - -playswipesound( mod, attacker ) //checked matches cerberus output -{ - if ( is_true( attacker.is_zombie ) ) - { - self playsoundtoplayer( "evt_player_swiped", self ); - return; - } -} - -precache_zombie_leaderboards() //checked changed to match cerberus output -{ - if ( sessionmodeissystemlink() ) - { - return; - } - globalleaderboards = "LB_ZM_GB_BULLETS_FIRED_AT "; - globalleaderboards += "LB_ZM_GB_BULLETS_HIT_AT "; - globalleaderboards += "LB_ZM_GB_DEATHS_AT "; - globalleaderboards += "LB_ZM_GB_DISTANCE_TRAVELED_AT "; - globalleaderboards += "LB_ZM_GB_DOORS_PURCHASED_AT "; - globalleaderboards += "LB_ZM_GB_DOWNS_AT "; - globalleaderboards += "LB_ZM_GB_GIBS_AT "; - globalleaderboards += "LB_ZM_GB_GRENADE_KILLS_AT "; - globalleaderboards += "LB_ZM_GB_HEADSHOTS_AT "; - globalleaderboards += "LB_ZM_GB_KILLS_AT "; - globalleaderboards += "LB_ZM_GB_PERKS_DRANK_AT "; - globalleaderboards += "LB_ZM_GB_REVIVES_AT "; - if ( sessionmodeisprivateonlinegame() ) - { - precacheleaderboards( globalleaderboards ); - return; - } - maplocationname = level.scr_zm_map_start_location; - if ( maplocationname == "default" || maplocationname == "" && isDefined( level.default_start_location ) ) - { - maplocationname = level.default_start_location; - } - if ( level.scr_zm_ui_gametype_group == "zclassic" || level.scr_zm_ui_gametype_group == "zsurvival" || level.scr_zm_ui_gametype != "zcleansed" ) - { - expectedplayernum = getnumexpectedplayers(); - if ( expectedplayernum == 1 ) - { - gamemodeleaderboard = "LB_ZM_GM_" + level.scr_zm_ui_gametype + "_" + maplocationname + "_" + expectedplayernum + "PLAYER"; - } - else - { - gamemodeleaderboard = "LB_ZM_GM_" + level.scr_zm_ui_gametype + "_" + maplocationname + "_" + expectedplayernum + "PLAYERS"; - } - } - else - { - gamemodeleaderboard = "LB_ZM_GM_" + level.scr_zm_ui_gametype + "_" + maplocationname; - } - precacheleaderboards( globalleaderboards + gamemodeleaderboard ); -} - -zm_on_player_connect() //checked matches cerberus output -{ - if ( level.passed_introscreen ) - { - self setclientuivisibilityflag( "hud_visible", 1 ); - } - thread refresh_player_navcard_hud(); - self thread watchdisconnect(); -} - -zm_on_player_disconnect() //checked matches cerberus output -{ - thread refresh_player_navcard_hud(); -} - -watchdisconnect() //checked matches cerberus output -{ - self notify( "watchDisconnect" ); - self endon( "watchDisconnect" ); - self waittill( "disconnect" ); - zm_on_player_disconnect(); -} - -increment_dog_round_stat( stat ) //checked changed to match cerberus output -{ - players = get_players(); - foreach ( player in players ) - { - player maps/mp/zombies/_zm_stats::increment_client_stat( "zdog_rounds_" + stat ); - } -} - -setup_player_navcard_hud() //checked matches cerberus output -{ - flag_wait( "start_zombie_round_logic" ); - thread refresh_player_navcard_hud(); -} - -refresh_player_navcard_hud() //checked changed to match cerberus output -{ - if ( !isDefined( level.navcards ) ) - { - return; - } - - players = get_players(); - foreach( player in players ) - { - navcard_bits = 0; - for ( i = 0; i < level.navcards.size; i++ ) - { - hasit = player maps/mp/zombies/_zm_stats::get_global_stat( level.navcards[ i ] ); - if ( isdefined( player.navcard_grabbed) && player.navcard_grabbed == level.navcards[ i ] ) - { - hasit = 1; - } - if ( hasit ) - { - navcard_bits = navcard_bits + 1; - } - } - wait_network_frame(); - player setclientfield( "navcard_held", 0 ); - if ( navcard_bits > 0 ) - { - wait_network_frame(); - player setclientfield( "navcard_held", navcard_bits ); - } - } -} - - -check_quickrevive_for_hotjoin( disconnecting_player ) //checked changed to match cerberus output -{ - solo_mode = 0; - subtract_num = 0; - should_update = 0; - if ( isDefined( disconnecting_player ) ) - { - subtract_num = 1; - } - players = get_players(); - if ( ( players.size - subtract_num ) == 1 || is_true( level.force_solo_quick_revive ) ) - { - solo_mode = 1; - if ( !flag( "solo_game" ) ) - { - should_update = 1; - } - flag_set( "solo_game" ); - } - else if ( flag( "solo_game" ) ) - { - should_update = 1; - } - flag_clear( "solo_game" ); - level.using_solo_revive = solo_mode; - level.revive_machine_is_solo = solo_mode; - set_default_laststand_pistol( solo_mode ); - if ( should_update && isDefined( level.quick_revive_machine ) ) - { - update_quick_revive( solo_mode ); - } -} - -set_default_laststand_pistol( solo_mode ) //checked matches cerberus output -{ - if ( !solo_mode ) - { - level.laststandpistol = level.default_laststandpistol; - } - else - { - level.laststandpistol = level.default_solo_laststandpistol; - } -} - -update_quick_revive( solo_mode ) //checked matches cerberus output -{ - if ( !isDefined( solo_mode ) ) - { - solo_mode = 0; - } - clip = undefined; - if ( isDefined( level.quick_revive_machine_clip ) ) - { - clip = level.quick_revive_machine_clip; - } - level.quick_revive_machine thread maps/mp/zombies/_zm_perks::reenable_quickrevive( clip, solo_mode ); -} - - -player_too_many_players_check() //checked matches cerberus output -{ - max_players = 4; - if ( level.scr_zm_ui_gametype == "zgrief" || level.scr_zm_ui_gametype == "zmeat" ) - { - max_players = 8; - } - if ( get_players().size > max_players ) - { - maps/mp/zombies/_zm_game_module::freeze_players( 1 ); - level notify( "end_game" ); - } -} - -//added these functions to get around the compiler info.md No. 6 -//////////////////////////////////////////////////////////////// -is_solo_death( self, players ) -{ - if ( players.size == 1 && flag( "solo_game" ) ) - { - if ( !self hasPerk( "specialty_quickrevive" ) ) - { - return 1; - } - if ( self.lives == 0 ) - { - return 1; - } - } - return 0; -} - -is_non_solo_death( self, players, count ) -{ - if ( count > 1 || players.size == 1 && !flag( "solo_game" ) ) - { - return 1; - } - return 0; -} -//////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_ai_basic.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_ai_basic.gsc deleted file mode 100644 index 4ef963b..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_ai_basic.gsc +++ /dev/null @@ -1,546 +0,0 @@ -#include maps/mp/animscripts/zm_shared; -#include maps/mp/animscripts/zm_run; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -find_flesh() //checked partially changed to match cerberus output -{ - self endon( "death" ); - level endon( "intermission" ); - self endon( "stop_find_flesh" ); - if ( level.intermission ) - { - return; - } - self.ai_state = "find_flesh"; - self.helitarget = 1; - self.ignoreme = 0; - self.nododgemove = 1; - self.ignore_player = []; - self maps/mp/zombies/_zm_spawner::zombie_history( "find flesh -> start" ); - self.goalradius = 32; - if ( isDefined( self.custom_goalradius_override ) ) - { - self.goalradius = self.custom_goalradius_override; - } - while ( 1 ) - { - zombie_poi = undefined; - if ( isDefined( level.zombietheaterteleporterseeklogicfunc ) ) - { - self [[ level.zombietheaterteleporterseeklogicfunc ]](); - } - if ( isDefined( level._poi_override ) ) - { - zombie_poi = self [[ level._poi_override ]](); - } - if ( !isDefined( zombie_poi ) ) - { - zombie_poi = self get_zombie_point_of_interest( self.origin ); - } - players = get_players(); - if ( !isDefined( self.ignore_player ) || players.size == 1 ) - { - self.ignore_player = []; - } - if ( !isDefined( level._should_skip_ignore_player_logic ) || !( [[ level._should_skip_ignore_player_logic ]]() ) ) - { - i = 0; - while ( i < self.ignore_player.size ) - { - if ( isDefined( self.ignore_player[ i ] ) && isDefined( self.ignore_player[ i ].ignore_counter ) && self.ignore_player[ i ].ignore_counter > 3 ) - { - self.ignore_player[ i ].ignore_counter = 0; - self.ignore_player = arrayremovevalue( self.ignore_player, self.ignore_player[ i ] ); - if ( !isDefined( self.ignore_player ) ) - { - self.ignore_player = []; - } - i = 0; - continue; - } - i++; - } - } - player = get_closest_valid_player( self.origin, self.ignore_player ); - if ( !isDefined( player ) && !isDefined( zombie_poi ) ) - { - self maps/mp/zombies/_zm_spawner::zombie_history( "find flesh -> can't find player, continue" ); - if ( isDefined( self.ignore_player ) ) - { - if ( isDefined( level._should_skip_ignore_player_logic ) && [[ level._should_skip_ignore_player_logic ]]() ) - { - wait 1; - continue; - } - self.ignore_player = []; - } - wait 1; - continue; - } - if ( !isDefined( level.check_for_alternate_poi ) || ![[ level.check_for_alternate_poi ]]() ) - { - self.enemyoverride = zombie_poi; - self.favoriteenemy = player; - } - self thread zombie_pathing(); - if ( players.size > 1 ) - { - for ( i = 0; i < self.ignore_player.size; i++ ) - { - if ( isDefined( self.ignore_player[ i ] ) ) - { - if ( !isDefined( self.ignore_player[ i ].ignore_counter ) ) - { - self.ignore_player[ i ].ignore_counter = 0; - } - else - { - self.ignore_player[ i ].ignore_counter += 1; - } - } - } - } - self thread attractors_generated_listener(); - if ( isDefined( level._zombie_path_timer_override ) ) - { - self.zombie_path_timer = [[ level._zombie_path_timer_override ]](); - } - else - { - self.zombie_path_timer = getTime() + ( randomfloatrange( 1, 3 ) * 1000 ); - } - while ( getTime() < self.zombie_path_timer ) - { - wait 0.1; - } - self notify( "path_timer_done" ); - self maps/mp/zombies/_zm_spawner::zombie_history( "find flesh -> bottom of loop" ); - debug_print( "Zombie is re-acquiring enemy, ending breadcrumb search" ); - self notify( "zombie_acquire_enemy" ); - } -} - -init_inert_zombies() //checked matches cerberus output -{ - level init_inert_substates(); -} - -init_inert_substates() //checked matches cerberus output -{ - level.inert_substates = []; - level.inert_substates[ level.inert_substates.size ] = "inert1"; - level.inert_substates[ level.inert_substates.size ] = "inert2"; - level.inert_substates[ level.inert_substates.size ] = "inert3"; - level.inert_substates[ level.inert_substates.size ] = "inert4"; - level.inert_substates[ level.inert_substates.size ] = "inert5"; - level.inert_substates[ level.inert_substates.size ] = "inert6"; - level.inert_substates[ level.inert_substates.size ] = "inert7"; - level.inert_substates = array_randomize( level.inert_substates ); - level.inert_substate_index = 0; - level.inert_trans_walk = []; - level.inert_trans_walk[ level.inert_trans_walk.size ] = "inert_2_walk_1"; - level.inert_trans_walk[ level.inert_trans_walk.size ] = "inert_2_walk_2"; - level.inert_trans_walk[ level.inert_trans_walk.size ] = "inert_2_walk_3"; - level.inert_trans_walk[ level.inert_trans_walk.size ] = "inert_2_walk_4"; - level.inert_trans_run = []; - level.inert_trans_run[ level.inert_trans_run.size ] = "inert_2_run_1"; - level.inert_trans_run[ level.inert_trans_run.size ] = "inert_2_run_2"; - level.inert_trans_sprint = []; - level.inert_trans_sprint[ level.inert_trans_sprint.size ] = "inert_2_sprint_1"; - level.inert_trans_sprint[ level.inert_trans_sprint.size ] = "inert_2_sprint_2"; - level.inert_crawl_substates = []; - level.inert_crawl_substates[ level.inert_crawl_substates.size ] = "inert1"; - level.inert_crawl_substates[ level.inert_crawl_substates.size ] = "inert2"; - level.inert_crawl_substates[ level.inert_crawl_substates.size ] = "inert3"; - level.inert_crawl_substates[ level.inert_crawl_substates.size ] = "inert4"; - level.inert_crawl_substates[ level.inert_crawl_substates.size ] = "inert5"; - level.inert_crawl_substates[ level.inert_crawl_substates.size ] = "inert6"; - level.inert_crawl_substates[ level.inert_crawl_substates.size ] = "inert7"; - level.inert_crawl_trans_walk = []; - level.inert_crawl_trans_walk[ level.inert_crawl_trans_walk.size ] = "inert_2_walk_1"; - level.inert_crawl_trans_run = []; - level.inert_crawl_trans_run[ level.inert_crawl_trans_run.size ] = "inert_2_run_1"; - level.inert_crawl_trans_run[ level.inert_crawl_trans_run.size ] = "inert_2_run_2"; - level.inert_crawl_trans_sprint = []; - level.inert_crawl_trans_sprint[ level.inert_crawl_trans_sprint.size ] = "inert_2_sprint_1"; - level.inert_crawl_trans_sprint[ level.inert_crawl_trans_sprint.size ] = "inert_2_sprint_2"; - level.inert_crawl_substates = array_randomize( level.inert_crawl_substates ); - level.inert_crawl_substate_index = 0; -} - -get_inert_substate() //checked matches cerberus output -{ - substate = level.inert_substates[ level.inert_substate_index ]; - level.inert_substate_index++; - if ( level.inert_substate_index >= level.inert_substates.size ) - { - level.inert_substates = array_randomize( level.inert_substates ); - level.inert_substate_index = 0; - } - return substate; -} - -get_inert_crawl_substate() //checked matches cerberus output -{ - substate = level.inert_crawl_substates[ level.inert_crawl_substate_index ]; - level.inert_crawl_substate_index++; - if ( level.inert_crawl_substate_index >= level.inert_crawl_substates.size ) - { - level.inert_crawl_substates = array_randomize( level.inert_crawl_substates ); - level.inert_crawl_substate_index = 0; - } - return substate; -} - -start_inert( in_place ) //checked changed to match cerberus output -{ - self endon( "death" ); - if ( is_true( self.is_inert ) ) - { - self maps/mp/zombies/_zm_spawner::zombie_history( "is_inert already set " + getTime() ); - return; - } - self.is_inert = 1; - self notify( "start_inert" ); - self maps/mp/zombies/_zm_spawner::zombie_eye_glow_stop(); - self maps/mp/zombies/_zm_spawner::zombie_history( "is_inert set " + getTime() ); - self playsound( "zmb_zombie_go_inert" ); - if ( is_true( self.barricade_enter ) ) - { - while ( is_true( self.barricade_enter ) ) - { - wait 0.1; - } - } - else if ( isDefined( self.ai_state ) && self.ai_state == "zombie_goto_entrance" ) - { - self notify( "stop_zombie_goto_entrance" ); - self maps/mp/zombies/_zm_spawner::reset_attack_spot(); - } - if ( is_true( self.completed_emerging_into_playable_area ) ) - { - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - } - else - { - in_place = 1; - } - if ( is_true( self.in_the_ground ) ) - { - self waittill( "risen", find_flesh_struct_string ); - if ( self maps/mp/zombies/_zm_spawner::should_skip_teardown( find_flesh_struct_string ) ) - { - if ( !is_true( self.completed_emerging_into_playable_area ) ) - { - self waittill( "completed_emerging_into_playable_area" ); - } - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - } - } - if ( is_true( self.is_traversing ) ) - { - while ( self isinscriptedstate() ) - { - wait 0.1; - } - } - if ( is_true( self.doing_equipment_attack ) ) - { - self stopanimscripted(); - } - if ( isDefined( self.inert_delay ) ) - { - self [[ self.inert_delay ]](); - self maps/mp/zombies/_zm_spawner::zombie_history( "inert_delay done " + getTime() ); - } - self inert_think( in_place ); -} - -inert_think( in_place ) //checked changed to match cerberus output -{ - self endon( "death" ); - self.ignoreall = 1; - self animmode( "normal" ); - if ( self.has_legs ) - { - if ( is_true( in_place ) ) - { - self setgoalpos( self.origin ); - if ( randomint( 100 ) > 50 ) - { - self maps/mp/zombies/_zm_spawner::zombie_history( "inert 1 " + getTime() ); - self setanimstatefromasd( "zm_inert", "inert1" ); - } - else - { - self maps/mp/zombies/_zm_spawner::zombie_history( "inert 2 " + getTime() ); - self setanimstatefromasd( "zm_inert", "inert2" ); - } - self.in_place = 1; - } - else - { - substate = get_inert_substate(); - if ( isDefined( level.inert_substate_override ) ) - { - substate = self [[ level.inert_substate_override ]]( substate ); - } - self setanimstatefromasd( "zm_inert", substate ); - self maps/mp/zombies/_zm_spawner::zombie_history( "zm_inert ASD " + getTime() ); - if ( substate == "inert3" && substate == "inert4" || substate == "inert5" && substate == "inert6" ) - { - self thread inert_watch_goal(); - } - else - { - self.in_place = 1; - } - } - } - else - { - self setanimstatefromasd( "zm_inert_crawl", get_inert_crawl_substate() ); - self maps/mp/zombies/_zm_spawner::zombie_history( "zm_inert_crawl ASD " + getTime() ); - } - self thread inert_wakeup(); - self waittill( "stop_zombie_inert" ); - self maps/mp/zombies/_zm_spawner::zombie_history( "stop_zombie_inert " + getTime() ); - self playsound( "zmb_zombie_end_inert" ); - self inert_transition(); - self maps/mp/zombies/_zm_spawner::zombie_history( "inert transition done" ); - if ( isDefined( self.ai_state ) && self.ai_state == "zombie_goto_entrance" ) - { - self thread maps/mp/zombies/_zm_spawner::zombie_goto_entrance( self.first_node ); - } - if ( isDefined( self.inert_wakeup_override ) ) - { - self [[ self.inert_wakeup_override ]](); - } - else if ( is_true( self.completed_emerging_into_playable_area ) ) - { - self.ignoreall = 0; - if ( isDefined( level.ignore_find_flesh ) && !self [[ level.ignore_find_flesh ]]() ) - { - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - } - } - self.becoming_inert = undefined; - self.is_inert = undefined; - self.in_place = undefined; - self maps/mp/animscripts/zm_run::needsupdate(); - self maps/mp/zombies/_zm_spawner::zombie_history( "is_inert cleared " + getTime() ); -} - -inert_watch_goal() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "stop_zombie_inert" ); - while ( 1 ) - { - self waittill( "goal" ); - locs = array_randomize( level.enemy_dog_locations ); - i = 0; - while ( i < locs.size ) - { - dist_sq = distancesquared( self.origin, locs[ i ].origin ); - if ( dist_sq > 90000 ) - { - self setgoalpos( locs[ i ].origin ); - i++; - continue; - } - i++; - } - if ( locs.size > 0 ) - { - self setgoalpos( locs[ 0 ].origin ); - } - } -} - -inert_wakeup() //checked changed at own discretion parity in behavior to cerberus output -{ - self endon( "death" ); - self endon( "stop_zombie_inert" ); - wait 0.1; - self thread inert_damage(); - self thread inert_bump(); - while ( 1 ) - { - current_time = getTime(); - players = get_players(); - foreach ( player in players ) - { - dist_sq = distancesquared( self.origin, player.origin ); - if ( dist_sq < 4096 ) - { - self stop_inert(); - return; - } - if ( dist_sq < 360000 ) - { - if ( player issprinting() ) - { - self stop_inert(); - return; - } - } - if ( dist_sq < 5760000 ) - { - if ( ( current_time - player.lastfiretime ) < 100 ) - { - self stop_inert(); - return; - } - } - } - wait 0.1; - } -} - -inert_bump() //checked changed at own discretion parity in behavior to cerberus output -{ - self endon( "death" ); - self endon( "stop_zombie_inert" ); - while ( 1 ) - { - zombies = getaiarray( level.zombie_team ); - i = 0; - while ( i < zombies.size ) - { - if ( zombies[ i ] == self ) - { - i++; - continue; - } - if ( is_true( zombies[ i ].is_inert ) ) - { - i++; - continue; - } - if ( is_true( zombies[ i ].becoming_inert ) ) - { - i++; - continue; - } - dist_sq = distancesquared( self.origin, zombies[ i ].origin ); - if ( dist_sq < 1296 ) - { - self stop_inert(); - return; - } - i++; - } - wait 0.2; - } -} - -inert_damage() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "stop_zombie_inert" ); - while ( 1 ) - { - self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); - if ( weaponname == "emp_grenade_zm" ) - { - continue; - } - if ( isDefined( inflictor ) ) - { - if ( isDefined( inflictor._trap_type ) && inflictor._trap_type == "fire" ) - { - continue; - } - } - } - self stop_inert(); -} - -grenade_watcher( grenade ) //checked changed to match cerberus output -{ - grenade waittill( "explode", grenade_origin ); - zombies = get_array_of_closest( grenade_origin, get_round_enemy_array(), undefined, undefined, 2400 ); - if ( !isDefined( zombies ) ) - { - return; - } - foreach ( zombie in zombies ) - { - zombie stop_inert(); - } -} - -stop_inert() //checked matches cerberus output -{ - self notify( "stop_zombie_inert" ); -} - -inert_transition() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "stop_zombie_inert_transition" ); - trans_num = 4; - trans_set = level.inert_trans_walk; - animstate = "zm_inert_trans"; - if ( !self.has_legs ) - { - trans_num = 1; - trans_set = level.inert_crawl_trans_walk; - animstate = "zm_inert_crawl_trans"; - } - if ( self.zombie_move_speed == "run" ) - { - if ( self.has_legs ) - { - trans_set = level.inert_trans_run; - } - else - { - trans_set = level.inert_crawl_trans_run; - } - trans_num = 2; - } - else if ( self.zombie_move_speed == "sprint" ) - { - if ( self.has_legs ) - { - trans_set = level.inert_trans_sprint; - } - else - { - trans_set = level.inert_crawl_trans_sprint; - } - trans_num = 2; - } - self thread inert_eye_glow(); - self setanimstatefromasd( animstate, trans_set[ randomint( trans_num ) ] ); - self maps/mp/zombies/_zm_spawner::zombie_history( "inert_trans_anim " + getTime() ); - maps/mp/animscripts/zm_shared::donotetracks( "inert_trans_anim" ); -} - -inert_eye_glow() //checked changed to match cerberus output -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( "inert_trans_anim", note ); - if ( note == "end" ) - { - return; - } - else if ( note == "zmb_awaken" ) - { - self maps/mp/zombies/_zm_spawner::zombie_eye_glow(); - return; - } - } -} - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_ai_dogs.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_ai_dogs.gsc deleted file mode 100644 index 69413fa..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_ai_dogs.gsc +++ /dev/null @@ -1,721 +0,0 @@ -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - level.dogs_enabled = 1; - level.dog_rounds_enabled = 0; - level.dog_round_count = 1; - level.dog_spawners = []; - level.enemy_dog_spawns = []; - level.enemy_dog_locations = []; - flag_init( "dog_clips" ); - precacherumble( "explosion_generic" ); - precacheshellshock( "dog_bite" ); - if ( getDvar( "zombie_dog_animset" ) == "" ) - { - setdvar( "zombie_dog_animset", "zombie" ); - } - if ( getDvar( "scr_dog_health_walk_multiplier" ) == "" ) - { - setdvar( "scr_dog_health_walk_multiplier", "4.0" ); - } - if ( getDvar( "scr_dog_run_distance" ) == "" ) - { - setdvar( "scr_dog_run_distance", "500" ); - } - level.melee_range_sav = getDvar( "ai_meleeRange" ); - level.melee_width_sav = getDvar( "ai_meleeWidth" ); - level.melee_height_sav = getDvar( "ai_meleeHeight" ); - setdvar( "dog_MeleeDamage", "100" ); - set_zombie_var( "dog_fire_trail_percent", 50 ); - level._effect[ "lightning_dog_spawn" ] = loadfx( "maps/zombie/fx_zombie_dog_lightning_buildup" ); - level._effect[ "dog_eye_glow" ] = loadfx( "maps/zombie/fx_zombie_dog_eyes" ); - level._effect[ "dog_gib" ] = loadfx( "maps/zombie/fx_zombie_dog_explosion" ); - level._effect[ "dog_trail_fire" ] = loadfx( "maps/zombie/fx_zombie_dog_fire_trail" ); - level._effect[ "dog_trail_ash" ] = loadfx( "maps/zombie/fx_zombie_dog_ash_trail" ); - dog_spawner_init(); - level thread dog_clip_monitor(); -} - -enable_dog_rounds() //checked matches cerberus output -{ - level.dog_rounds_enabled = 1; - if ( !isDefined( level.dog_round_track_override ) ) - { - level.dog_round_track_override = ::dog_round_tracker; - } - level thread [[ level.dog_round_track_override ]](); -} - -dog_spawner_init() //checked does not match cerberus output did not change -{ - level.dog_spawners = getentarray( "zombie_dog_spawner", "script_noteworthy" ); - later_dogs = getentarray( "later_round_dog_spawners", "script_noteworthy" ); - level.dog_spawners = arraycombine( level.dog_spawners, later_dogs, 1, 0 ); - if ( level.dog_spawners.size == 0 ) - { - return; - } - i = 0; - while ( i < level.dog_spawners.size ) - { - if ( maps/mp/zombies/_zm_spawner::is_spawner_targeted_by_blocker( level.dog_spawners[ i ] ) ) - { - level.dog_spawners[ i ].is_enabled = 0; - i++; - } - else - { - level.dog_spawners[ i ].is_enabled = 1; - level.dog_spawners[ i ].script_forcespawn = 1; - i++; - } - } - level.dog_health = 100; - array_thread( level.dog_spawners, ::add_spawn_function, ::dog_init ); - level.enemy_dog_spawns = getentarray( "zombie_spawner_dog_init", "targetname" ); -} - -dog_round_spawning() //checked partially matches cerberus output -{ - level endon( "intermission" ); - level.dog_targets = getplayers(); - for ( i = 0; i < level.dog_targets.size; i++ ) - { - level.dog_targets[ i ].hunted_by = 0; - } - if ( level.intermission ) - { - return; - } - level.dog_intermission = 1; - level thread dog_round_aftermath(); - players = get_players(); - array_thread( players, ::play_dog_round ); - wait 1; - playsoundatposition( "vox_zmba_event_dogstart_0", ( 0, 0, 0 ) ); - wait 6; - if ( level.dog_round_count < 3 ) - { - max = players.size * 6; - } - else - { - max = players.size * 8; - } - level.zombie_total = max; - dog_health_increase(); - count = 0; - while ( count < max ) - { - num_player_valid = get_number_of_valid_players(); - while ( get_current_zombie_count() >= num_player_valid * 2 ) - { - wait 2; - num_player_valid = get_number_of_valid_players(); - } - players = get_players(); - favorite_enemy = get_favorite_enemy(); - if ( isDefined( level.dog_spawn_func ) ) - { - spawn_loc = [[ level.dog_spawn_func ]]( level.dog_spawners, favorite_enemy ); - ai = spawn_zombie( level.dog_spawners[ 0 ] ); - if ( isDefined( ai ) ) - { - ai.favoriteenemy = favorite_enemy; - spawn_loc thread dog_spawn_fx( ai, spawn_loc ); - level.zombie_total--; - count++; - } - } - else - { - spawn_point = dog_spawn_factory_logic( level.enemy_dog_spawns, favorite_enemy ); - ai = spawn_zombie( level.dog_spawners[ 0 ] ); - if ( isDefined( ai ) ) - { - ai.favoriteenemy = favorite_enemy; - spawn_point thread dog_spawn_fx( ai, spawn_point ); - level.zombie_total--; - count++; - flag_set( "dog_clips" ); - } - } - waiting_for_next_dog_spawn( count, max ); - } -} - -waiting_for_next_dog_spawn( count, max ) //checked matches cerberus output -{ - default_wait = 1.5; - if ( level.dog_round_count == 1 ) - { - default_wait = 3; - } - else if ( level.dog_round_count == 2 ) - { - default_wait = 2.5; - } - else if ( level.dog_round_count == 3 ) - { - default_wait = 2; - } - else - { - default_wait = 1.5; - } - default_wait = default_wait - count / max; - wait default_wait; -} - -dog_round_aftermath() //checked matches cerberus output -{ - level waittill( "last_dog_down" ); - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "dog_end" ); - power_up_origin = level.last_dog_origin; - if ( isDefined( power_up_origin ) ) - { - level thread maps/mp/zombies/_zm_powerups::specific_powerup_drop( "full_ammo", power_up_origin ); - } - wait 2; - clientnotify( "dog_stop" ); - wait 6; - level.dog_intermission = 0; -} - -dog_spawn_fx( ai, ent ) //checked matches cerberus output -{ - ai endon( "death" ); - ai setfreecameralockonallowed( 0 ); - playfx( level._effect[ "lightning_dog_spawn" ], ent.origin ); - playsoundatposition( "zmb_hellhound_prespawn", ent.origin ); - wait 1.5; - playsoundatposition( "zmb_hellhound_bolt", ent.origin ); - earthquake( 0.5, 0.75, ent.origin, 1000 ); - playrumbleonposition( "explosion_generic", ent.origin ); - playsoundatposition( "zmb_hellhound_spawn", ent.origin ); - angle = vectorToAngles( ai.favoriteenemy.origin - ent.origin ); - angles = ( ai.angles[ 0 ], angle[ 1 ], ai.angles[ 2 ] ); - ai forceteleport( ent.origin, angles ); - ai zombie_setup_attack_properties_dog(); - ai stop_magic_bullet_shield(); - wait 0.1; - ai show(); - ai setfreecameralockonallowed( 1 ); - ai.ignoreme = 0; - ai notify( "visible" ); -} -//unused code -/* -dog_spawn_sumpf_logic( dog_array, favorite_enemy ) //checked does not match cerberus output did not change -{ - dog_array = array_randomize( dog_array ); - i = 0; - while ( i < dog_array.size ) - { - if ( isDefined( level.old_dog_spawn ) && level.old_dog_spawn == dog_array[ i ] ) - { - i++; - continue; - } - else - { - if ( distancesquared( dog_array[ i ].origin, favorite_enemy.origin ) > 160000 && distancesquared( dog_array[ i ].origin, favorite_enemy.origin ) < 640000 ) - { - if ( distancesquared( ( 0, 0, dog_array[ i ].origin[ 2 ] ), ( 0, 0, favorite_enemy.origin[ 2 ] ) ) > 10000 ) - { - i++; - continue; - } - level.old_dog_spawn = dog_array[ i ]; - return dog_array[ i ]; - } - } - i++; - } - return dog_array[ 0 ]; -} -*/ -dog_spawn_factory_logic( dog_array, favorite_enemy ) //checked matches cerberus output -{ - dog_locs = array_randomize( level.enemy_dog_locations ); - for ( i = 0; i < dog_locs.size; i++ ) - { - if ( isDefined( level.old_dog_spawn ) && level.old_dog_spawn == dog_locs[ i ] ) - { - continue; - } - dist_squared = distancesquared( dog_locs[ i ].origin, favorite_enemy.origin ); - if ( dist_squared > 160000 && dist_squared < 1000000 ) - { - level.old_dog_spawn = dog_locs[ i ]; - return dog_locs[ i ]; - } - } - return dog_locs[ 0 ]; -} - -get_favorite_enemy() //checked changed to match cerberus output //reverted back to while loop -{ - dog_targets = getplayers(); - least_hunted = dog_targets[ 0 ]; - i = 0; - while ( i < dog_targets.size ) - { - if ( !isdefined( dog_targets[ i ].hunted_by ) ) - { - dog_targets[ i ].hunted_by = 0; - } - if ( !is_player_valid( dog_targets[ i ] ) ) - { - i++; - continue; - } - if ( !is_player_valid( least_hunted ) ) - { - least_hunted = dog_targets[ i ]; - } - if ( dog_targets[ i ].hunted_by < least_hunted.hunted_by ) - { - least_hunted = dog_targets[ i ]; - } - i++; - } - least_hunted.hunted_by += 1; - return least_hunted; -} - -dog_health_increase() //checked changed to match cerberus output -{ - players = getplayers(); - if ( level.dog_round_count == 1 ) - { - level.dog_health = 400; - } - else if ( level.dog_round_count == 2 ) - { - level.dog_health = 900; - } - else if ( level.dog_round_count == 3 ) - { - level.dog_health = 1300; - } - else if ( level.dog_round_count == 4 ) - { - level.dog_health = 1600; - } - if ( level.dog_health > 1600 ) - { - level.dog_health = 1600; - } -} - -dog_round_tracker() //checked changed to match cerberus output -{ - level.dog_round_count = 1; - level.next_dog_round = level.round_number + randomintrange( 4, 7 ); - old_spawn_func = level.round_spawn_func; - old_wait_func = level.round_wait_func; - while ( 1 ) - { - level waittill( "between_round_over" ); - if ( level.round_number == level.next_dog_round ) - { - level.music_round_override = 1; - old_spawn_func = level.round_spawn_func; - old_wait_func = level.round_wait_func; - dog_round_start(); - level.round_spawn_func = ::dog_round_spawning; - level.next_dog_round = level.round_number + randomintrange( 4, 6 ); - } - else if ( flag( "dog_round" ) ) - { - dog_round_stop(); - level.round_spawn_func = old_spawn_func; - level.round_wait_func = old_wait_func; - level.music_round_override = 0; - level.dog_round_count += 1; - } - } -} - -dog_round_start() //checked matches cerberus output -{ - flag_set( "dog_round" ); - flag_set( "dog_clips" ); - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "dog_start" ); - if ( !isDefined( level.doground_nomusic ) ) - { - level.doground_nomusic = 0; - } - level.doground_nomusic = 1; - level notify( "dog_round_starting" ); - clientnotify( "dog_start" ); - if ( isDefined( level.dog_melee_range ) ) - { - setdvar( "ai_meleeRange", level.dog_melee_range ); - } - else - { - setdvar( "ai_meleeRange", 100 ); - } -} - -dog_round_stop() //checked matches cerberus output -{ - flag_clear( "dog_round" ); - flag_clear( "dog_clips" ); - if ( !isDefined( level.doground_nomusic ) ) - { - level.doground_nomusic = 0; - } - level.doground_nomusic = 0; - level notify( "dog_round_ending" ); - clientnotify( "dog_stop" ); - setdvar( "ai_meleeRange", level.melee_range_sav ); - setdvar( "ai_meleeWidth", level.melee_width_sav ); - setdvar( "ai_meleeHeight", level.melee_height_sav ); -} - -play_dog_round() //checked matches cerberus output -{ - self playlocalsound( "zmb_dog_round_start" ); - variation_count = 5; - wait 4.5; - players = getplayers(); - num = randomintrange( 0, players.size ); - players[ num ] maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "dog_spawn" ); -} - -dog_init() //checked matches cerberus output -{ - self.targetname = "zombie_dog"; - self.script_noteworthy = undefined; - self.animname = "zombie_dog"; - self.ignoreall = 1; - self.ignoreme = 1; - self.allowdeath = 1; - self.allowpain = 0; - self.force_gib = 1; - self.is_zombie = 1; - self.has_legs = 1; - self.gibbed = 0; - self.head_gibbed = 0; - self.default_goalheight = 40; - self.ignore_inert = 1; - self.grenadeawareness = 0; - self.badplaceawareness = 0; - self.ignoresuppression = 1; - self.suppressionthreshold = 1; - self.nododgemove = 1; - self.dontshootwhilemoving = 1; - self.pathenemylookahead = 0; - self.badplaceawareness = 0; - self.chatinitialized = 0; - self.team = level.zombie_team; - health_multiplier = 1; - if ( getDvar( "scr_dog_health_walk_multiplier" ) != "" ) - { - health_multiplier = getDvarFloat( "scr_dog_health_walk_multiplier" ); - } - self.maxhealth = int( level.dog_health * health_multiplier ); - self.health = int( level.dog_health * health_multiplier ); - self.freezegun_damage = 0; - self.zombie_move_speed = "sprint"; - self thread dog_run_think(); - self thread dog_stalk_audio(); - self thread maps/mp/zombies/_zm::round_spawn_failsafe(); - self ghost(); - self thread magic_bullet_shield(); - self dog_fx_eye_glow(); - self dog_fx_trail(); - self thread dog_death(); - level thread maps/mp/zombies/_zm_spawner::zombie_death_event( self ); - self thread maps/mp/zombies/_zm_spawner::enemy_death_detection(); - self.a.disablepain = 1; - self disable_react(); - self clearenemy(); - self cleargoalvolume(); - self.flame_damage_time = 0; - self.meleedamage = 40; - self.thundergun_knockdown_func = ::dog_thundergun_knockdown; - self maps/mp/zombies/_zm_spawner::zombie_history( "zombie_dog_spawn_init -> Spawned = " + self.origin ); - if ( isDefined( level.achievement_monitor_func ) ) - { - self [[ level.achievement_monitor_func ]](); - } -} - -dog_fx_eye_glow() //checked matches cerberus output -{ - self.fx_dog_eye = spawn( "script_model", self gettagorigin( "J_EyeBall_LE" ) ); - self.fx_dog_eye.angles = self gettagangles( "J_EyeBall_LE" ); - self.fx_dog_eye setmodel( "tag_origin" ); - self.fx_dog_eye linkto( self, "J_EyeBall_LE" ); -} - -dog_fx_trail() //checked matches cerberus output -{ - if ( !is_mature() || randomint( 100 ) > level.zombie_vars[ "dog_fire_trail_percent" ] ) - { - self.fx_dog_trail_type = level._effect[ "dog_trail_ash" ]; - self.fx_dog_trail_sound = "zmb_hellhound_loop_breath"; - } - else - { - self.a.nodeath = 1; - self.fx_dog_trail_type = level._effect[ "dog_trail_fire" ]; - self.fx_dog_trail_sound = "zmb_hellhound_loop_fire"; - } - self.fx_dog_trail = spawn( "script_model", self gettagorigin( "tag_origin" ) ); - self.fx_dog_trail.angles = self gettagangles( "tag_origin" ); - self.fx_dog_trail setmodel( "tag_origin" ); - self.fx_dog_trail linkto( self, "tag_origin" ); -} - -dog_death() //checked changed to match cerberus output -{ - self waittill( "death" ); - if ( get_current_zombie_count() == 0 && level.zombie_total == 0 ) - { - level.last_dog_origin = self.origin; - level notify( "last_dog_down" ); - } - if ( isplayer( self.attacker ) ) - { - event = "death"; - if ( issubstr( self.damageweapon, "knife_ballistic_" ) ) - { - event = "ballistic_knife_death"; - } - self.attacker maps/mp/zombies/_zm_score::player_add_points( event, self.damagemod, self.damagelocation, 1 ); - if ( randomintrange( 0, 100 ) >= 80 ) - { - self.attacker maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "hellhound" ); - } - self.attacker maps/mp/zombies/_zm_stats::increment_client_stat( "zdogs_killed" ); - self.attacker maps/mp/zombies/_zm_stats::increment_player_stat( "zdogs_killed" ); - } - if ( isDefined( self.attacker ) && isai( self.attacker ) ) - { - self.attacker notify( "killed" ); - } - self stoploopsound(); - self.fx_dog_eye delete(); - self.fx_dog_trail delete(); - if ( isDefined( self.a.nodeath ) ) - { - level thread dog_explode_fx( self.origin ); - self delete(); - } - else - { - self playsound( "zmb_hellhound_vocals_death" ); - } -} - -dog_explode_fx( origin ) //checked matches cerberus output -{ - playfx( level._effect[ "dog_gib" ], origin ); - playsoundatposition( "zmb_hellhound_explode", origin ); -} - -zombie_setup_attack_properties_dog() //checked matches cerberus output -{ - self maps/mp/zombies/_zm_spawner::zombie_history( "zombie_setup_attack_properties()" ); - self thread dog_behind_audio(); - self.ignoreall = 0; - self.pathenemyfightdist = 64; - self.meleeattackdist = 64; - self.disablearrivals = 1; - self.disableexits = 1; -} - -stop_dog_sound_on_death() //checked matches cerberus output -{ - self waittill( "death" ); - self stopsounds(); -} - -dog_behind_audio() //checked does not match cerberus output changed at own discretion -{ - self thread stop_dog_sound_on_death(); - self endon( "death" ); - self waittill_any( "dog_running", "dog_combat" ); - self playsound( "zmb_hellhound_vocals_close" ); - wait 3; - while ( 1 ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - vectorAngle = vectorToAngles( self.origin - players[ i ].origin ); - dogangle = AbsAngleClamp180( vectorAngle[ 1 ] - players[ i ].angles[ 1 ] ); - if ( isalive( players[ i ] ) && !isDefined( players[ i ].revivetrigger ) ) - { - if ( Abs( dogangle ) > 90 && distance2d( self.origin, players[ i ].origin ) > 100 ) - { - self playsound( "zmb_hellhound_vocals_close" ); - wait 3; - } - } - i++; - } - wait 0.75; - } -} - -dog_clip_monitor() //checked changed to match cerberus output -{ - clips_on = 0; - level.dog_clips = getentarray( "dog_clips", "targetname" ); - while ( 1 ) - { - for ( i = 0; i < level.dog_clips.size; i++ ) - { - level.dog_clips[ i ] trigger_off(); - level.dog_clips[ i ] connectpaths(); - } - flag_wait( "dog_clips" ); - if ( isDefined( level.no_dog_clip ) && level.no_dog_clip == 1 ) - { - return; - } - for ( i = 0; i < level.dog_clips.size; i++ ) - { - level.dog_clips[ i ] trigger_on(); - level.dog_clips[ i ] disconnectpaths(); - wait_network_frame(); - } - dog_is_alive = 1; - while ( dog_is_alive || flag( "dog_round" ) ) - { - dog_is_alive = 0; - dogs = getentarray( "zombie_dog", "targetname" ); - for ( i = 0; i < dogs.size; i++ ) - { - if ( isalive( dogs[ i ] ) ) - { - dog_is_alive = 1; - } - } - wait 1; - } - flag_clear( "dog_clips" ); - wait 1; - } -} - -special_dog_spawn( spawners, num_to_spawn ) //checked matches cerberus output -{ - dogs = getaispeciesarray( "all", "zombie_dog" ); - if ( isDefined( dogs ) && dogs.size >= 9 ) - { - return 0; - } - if ( !isDefined( num_to_spawn ) ) - { - num_to_spawn = 1; - } - spawn_point = undefined; - count = 0; - while ( count < num_to_spawn ) - { - players = get_players(); - favorite_enemy = get_favorite_enemy(); - if ( isDefined( spawners ) ) - { - spawn_point = spawners[ randomint( spawners.size ) ]; - ai = spawn_zombie( spawn_point ); - if ( isDefined( ai ) ) - { - ai.favoriteenemy = favorite_enemy; - spawn_point thread dog_spawn_fx( ai ); - count++; - flag_set( "dog_clips" ); - } - } - else if ( isDefined( level.dog_spawn_func ) ) - { - spawn_loc = [[ level.dog_spawn_func ]]( level.dog_spawners, favorite_enemy ); - ai = spawn_zombie( level.dog_spawners[ 0 ] ); - if ( isDefined( ai ) ) - { - ai.favoriteenemy = favorite_enemy; - spawn_loc thread dog_spawn_fx( ai, spawn_loc ); - count++; - flag_set( "dog_clips" ); - } - } - else - { - spawn_point = dog_spawn_factory_logic( level.enemy_dog_spawns, favorite_enemy ); - ai = spawn_zombie( level.dog_spawners[ 0 ] ); - if ( isDefined( ai ) ) - { - ai.favoriteenemy = favorite_enemy; - spawn_point thread dog_spawn_fx( ai, spawn_point ); - count++; - flag_set( "dog_clips" ); - } - } - waiting_for_next_dog_spawn( count, num_to_spawn ); - } - return 1; -} - -dog_run_think() //checked matches cerberus output -{ - self endon( "death" ); - self waittill( "visible" ); - if ( self.health > level.dog_health ) - { - self.maxhealth = level.dog_health; - self.health = level.dog_health; - } - maps/mp/zombies/_zm_net::network_safe_play_fx_on_tag("dog_fx", 2, level._effect["dog_eye_glow"], self.fx_dog_eye, "tag_origin"); - maps/mp/zombies/_zm_net::network_safe_play_fx_on_tag( "dog_fx", 2, self.fx_dog_trail_type, self.fx_dog_trail, "tag_origin" ); - self playloopsound( self.fx_dog_trail_sound ); - while ( 1 ) - { - if ( !is_player_valid( self.favoriteenemy ) ) - { - self.favoriteenemy = get_favorite_enemy(); - } - wait 0.2; - } -} - -dog_stalk_audio() //checked matches cerberus output -{ - self endon( "death" ); - self endon( "dog_running" ); - self endon( "dog_combat" ); - while ( 1 ) - { - self playsound( "zmb_hellhound_vocals_amb" ); - wait randomfloatrange( 3, 6 ); - } -} - -dog_thundergun_knockdown( player, gib ) //checked matches cerberus output -{ - self endon( "death" ); - damage = int( self.maxhealth * 0.5 ); - self dodamage( damage, player.origin, player ); -} - - - - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_ai_faller.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_ai_faller.gsc deleted file mode 100644 index 2fbba54..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_ai_faller.gsc +++ /dev/null @@ -1,617 +0,0 @@ -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/animscripts/zm_shared; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -zombie_faller_delete() //checked matches cerberus output -{ - level.zombie_total++; - self maps/mp/zombies/_zm_spawner::reset_attack_spot(); - if ( isDefined( self.zombie_faller_location ) ) - { - self.zombie_faller_location.is_enabled = 1; - self.zombie_faller_location = undefined; - } - self delete(); -} - -faller_script_parameters() //checked changed to match cerberus output -{ - if ( isDefined( self.script_parameters ) ) - { - parms = strtok( self.script_parameters, ";" ); - if ( isDefined( parms ) && parms.size > 0 ) - { - for ( i = 0; i < parms.size; i++ ) - { - if ( parms[ i ] == "drop_now" ) - { - self.drop_now = 1; - } - if ( parms[ i ] == "drop_not_occupied" ) - { - self.drop_not_occupied = 1; - } - if ( parms[ i ] == "emerge_top" ) - { - self.emerge_top = 1; - } - if ( parms[ i ] == "emerge_bottom" ) - { - self.emerge_bottom = 1; - } - } - } - } -} - -setup_deathfunc( func_name ) //checked matches cerberus output -{ - self endon( "death" ); - while ( !is_true( self.zombie_init_done ) ) - { - wait_network_frame(); - } - if ( isDefined( func_name ) ) - { - self.deathfunction = func_name; - } - else if ( isDefined( level.custom_faller_death ) ) - { - self.deathfunction = level.custom_faller_death; - } - else - { - self.deathfunction = ::zombie_fall_death_func; - } -} - -do_zombie_fall( spot ) //checked changed to match cerberus output -{ - self endon( "death" ); - self.zombie_faller_location = spot; - self.zombie_faller_location.is_enabled = 0; - self.zombie_faller_location faller_script_parameters(); - if ( is_true( self.zombie_faller_location.emerge_bottom ) || is_true( self.zombie_faller_location.emerge_top ) ) - { - self do_zombie_emerge( spot ); - return; - } - self thread setup_deathfunc(); - self.no_powerups = 1; - self.in_the_ceiling = 1; - self.anchor = spawn( "script_origin", self.origin ); - self.anchor.angles = self.angles; - self linkto( self.anchor ); - if ( !isDefined( spot.angles ) ) - { - spot.angles = ( 0, 0, 0 ); - } - anim_org = spot.origin; - anim_ang = spot.angles; - self ghost(); - self.anchor moveto( anim_org, 0.05 ); - self.anchor waittill( "movedone" ); - target_org = get_desired_origin(); - if ( isDefined( target_org ) ) - { - anim_ang = vectorToAngles( target_org - self.origin ); - self.anchor rotateto( ( 0, anim_ang[ 1 ], 0 ), 0.05 ); - self.anchor waittill( "rotatedone" ); - } - self unlink(); - if ( isDefined( self.anchor ) ) - { - self.anchor delete(); - } - self thread maps/mp/zombies/_zm_spawner::hide_pop(); - self thread zombie_fall_death( spot ); - self thread zombie_fall_fx( spot ); - self thread zombie_faller_death_wait(); - self thread zombie_faller_do_fall(); - self.no_powerups = 0; - self notify( "risen", spot.script_string ); -} - -zombie_faller_do_fall() //checked changed to match cerberus output -{ - self endon( "death" ); - self animscripted( self.origin, self.zombie_faller_location.angles, "zm_faller_emerge" ); - self maps/mp/animscripts/zm_shared::donotetracks( "emerge_anim", ::handle_fall_notetracks, self.zombie_faller_location ); - self.zombie_faller_wait_start = getTime(); - self.zombie_faller_should_drop = 0; - self thread zombie_fall_wait(); - self thread zombie_faller_watch_all_players(); - while ( !self.zombie_faller_should_drop ) - { - if ( self zombie_fall_should_attack( self.zombie_faller_location ) ) - { - self animscripted( self.origin, self.zombie_faller_location.angles, "zm_faller_attack" ); - self maps/mp/animscripts/zm_shared::donotetracks( "attack_anim", ::handle_fall_notetracks, self.zombie_faller_location ); - if ( !self zombie_faller_always_drop() && randomfloat( 1 ) > 0.5 ) - { - self.zombie_faller_should_drop = 1; - } - } - else if ( self zombie_faller_always_drop() ) - { - self.zombie_faller_should_drop = 1; - break; - } - else if ( getTime() >= ( self.zombie_faller_wait_start + 20000 ) ) - { - self.zombie_faller_should_drop = 1; - break; - } - else if ( self zombie_faller_drop_not_occupied() ) - { - self.zombie_faller_should_drop = 1; - break; - } - else - { - self animscripted( self.origin, self.zombie_faller_location.angles, "zm_faller_attack" ); - self maps/mp/animscripts/zm_shared::donotetracks( "attack_anim", ::handle_fall_notetracks, self.zombie_faller_location ); - } - } - self notify( "falling" ); - spot = self.zombie_faller_location; - self zombie_faller_enable_location(); - self animscripted( self.origin, spot.angles, "zm_faller_fall" ); - self maps/mp/animscripts/zm_shared::donotetracks( "fall_anim", ::handle_fall_notetracks, spot ); - self.deathfunction = maps/mp/zombies/_zm_spawner::zombie_death_animscript; - self notify( "fall_anim_finished" ); - spot notify( "stop_zombie_fall_fx" ); - self stopanimscripted(); - landanimdelta = 15; - ground_pos = groundpos_ignore_water_new( self.origin ); - physdist = self.origin[ 2 ] - ground_pos[ 2 ] + landanimdelta; - if ( physdist > 0 ) - { - self animcustom( ::zombie_fall_loop ); - self waittill( "faller_on_ground" ); - self animcustom( ::zombie_land ); - self waittill( "zombie_land_done" ); - } - self.in_the_ceiling = 0; - self traversemode( "gravity" ); - self.no_powerups = 0; -} - -zombie_fall_loop() //checked changed to match cerberus output -{ - self endon( "death" ); - self setanimstatefromasd( "zm_faller_fall_loop" ); - while ( 1 ) - { - ground_pos = groundpos_ignore_water_new( self.origin ); - if ( self.origin[ 2 ] - ground_pos[ 2 ] < 20 ) - { - self notify( "faller_on_ground" ); - break; - } - wait 0.05; - } -} - -zombie_land() //checked matches cerberus output -{ - self setanimstatefromasd( "zm_faller_land" ); - maps/mp/animscripts/zm_shared::donotetracks( "land_anim" ); - self notify( "zombie_land_done" ); -} - -zombie_faller_always_drop() //checked matches cerberus output -{ - if ( is_true( self.zombie_faller_location.drop_now ) ) - { - return 1; - } - return 0; -} - -zombie_faller_drop_not_occupied() //checked matches cerberus output -{ - if ( is_true( self.zombie_faller_location.drop_not_occupied ) ) - { - if ( isDefined( self.zone_name ) && isDefined( level.zones[ self.zone_name ] ) ) - { - return !level.zones[ self.zone_name ].is_occupied; - } - } - return 0; -} - -zombie_faller_watch_all_players() //checked changed to match cerberus output -{ - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - self thread zombie_faller_watch_player( players[ i ] ); - } -} - -zombie_faller_watch_player( player ) //checked changed to match cerberus output -{ - self endon( "falling" ); - self endon( "death" ); - player endon( "disconnect" ); - range = 200; - rangesqr = range * range; - timer = 5000; - inrange = 0; - inrangetime = 0; - closerange = 60; - closerangesqr = closerange * closerange; - dirtoplayerenter = ( 0, 0, 0 ); - incloserange = 0; - while ( 1 ) - { - distsqr = distance2dsquared( self.origin, player.origin ); - if ( distsqr < rangesqr ) - { - if ( inrange ) - { - if ( ( inrangetime + timer ) < getTime() ) - { - self.zombie_faller_should_drop = 1; - break; - } - } - else - { - inrange = 1; - inrangetime = getTime(); - } - } - else - { - inrange = 0; - } - if ( distsqr < closerangesqr ) - { - if ( !incloserange ) - { - dirtoplayerenter = player.origin - self.origin; - dirtoplayerenter = ( dirtoplayerenter[ 0 ], dirtoplayerenter[ 1 ], 0 ); - dirtoplayerenter = vectornormalize( dirtoplayerenter ); - } - incloserange = 1; - } - else if ( incloserange ) - { - dirtoplayerexit = player.origin - self.origin; - dirtoplayerexit = ( dirtoplayerexit[ 0 ], dirtoplayerexit[ 1 ], 0 ); - dirtoplayerexit = vectornormalize( dirtoplayerexit ); - if ( vectordot( dirtoplayerenter, dirtoplayerexit ) < 0 ) - { - self.zombie_faller_should_drop = 1; - break; - } - } - incloserange = 0; - wait 0.1; - } -} - -zombie_fall_wait() //checked changed to match cerberus output -{ - self endon( "falling" ); - self endon( "death" ); - if ( isDefined( self.zone_name ) ) - { - if ( isDefined( level.zones ) && isDefined( level.zones[ self.zone_name ] ) ) - { - zone = level.zones[ self.zone_name ]; - while ( 1 ) - { - if ( !zone.is_enabled || !zone.is_active ) - { - if ( !self potentially_visible( 2250000 ) ) - { - if ( self.health != level.zombie_health ) - { - self.zombie_faller_should_drop = 1; - break; - } - else - { - self zombie_faller_delete(); - return; - } - } - } - wait 0.5; - } - } - } -} - -zombie_fall_should_attack( spot ) -{ - victims = zombie_fall_get_vicitims( spot ); - return victims.size > 0; -} - -zombie_fall_get_vicitims( spot ) //checked partially changed to match cerberus output //continues in for loops bad -{ - ret = []; - players = getplayers(); - checkdist2 = 40; - checkdist2 *= checkdist2; - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - i++; - continue; - } - stance = player getstance(); - if ( stance == "crouch" || stance == "prone" ) - { - i++; - continue; - } - zcheck = self.origin[ 2 ] - player.origin[ 2 ]; - if ( zcheck < 0 || zcheck > 120 ) - { - i++; - continue; - } - dist2 = distance2dsquared( player.origin, self.origin ); - if ( dist2 < checkdist2 ) - { - ret[ ret.size ] = player; - } - i++; - } - return ret; -} - -get_fall_anim( spot ) //checked matches cerberus output -{ - return level._zombie_fall_anims[ self.animname ][ "fall" ]; -} - -zombie_faller_enable_location() //checked matches cerberus output -{ - if ( isDefined( self.zombie_faller_location ) ) - { - self.zombie_faller_location.is_enabled = 1; - self.zombie_faller_location = undefined; - } -} - -zombie_faller_death_wait( endon_notify ) //checked matches cerberus output -{ - self endon( "falling" ); - if ( isDefined( endon_notify ) ) - { - self endon( endon_notify ); - } - self waittill( "death" ); - self zombie_faller_enable_location(); -} - -zombie_fall_death_func() //checked matches cerberus output -{ - self animmode( "noclip" ); - self.deathanim = "zm_faller_emerge_death"; - return self maps/mp/zombies/_zm_spawner::zombie_death_animscript(); -} - -zombie_fall_death( spot ) //checked matches cerberus output -{ - self endon( "fall_anim_finished" ); - while ( self.health > 1 ) - { - self waittill( "damage", amount, attacker, dir, p, type ); - } - self stopanimscripted(); - spot notify( "stop_zombie_fall_fx" ); -} - -_damage_mod_to_damage_type( type ) //checked changed to match cerberus output -{ - toks = strtok( type, "_" ); - if ( toks.size < 2 ) - { - return type; - } - returnstr = toks[ 1 ]; - for ( i = 2; i < toks.size; i++ ) - { - returnstr += toks[ i ]; - } - returnstr = tolower( returnstr ); - return returnstr; -} - -zombie_fall_fx( spot ) //checked matches cerberus output -{ - spot thread zombie_fall_dust_fx( self ); - spot thread zombie_fall_burst_fx(); - playsoundatposition( "zmb_zombie_spawn", spot.origin ); - self endon( "death" ); - spot endon( "stop_zombie_fall_fx" ); - wait 1; - if ( self.zombie_move_speed != "sprint" ) - { - wait 1; - } -} - -zombie_fall_burst_fx() //checked matches cerberus output -{ - self endon( "stop_zombie_fall_fx" ); - self endon( "fall_anim_finished" ); - playfx( level._effect[ "rise_burst" ], self.origin + ( 0, 0, randomintrange( 5, 10 ) ) ); - wait 0.25; - playfx( level._effect[ "rise_billow" ], self.origin + ( randomintrange( -10, 10 ), randomintrange( -10, 10 ), randomintrange( 5, 10 ) ) ); -} - -zombie_fall_dust_fx( zombie ) //checked does not match cerberus output did not change -{ - dust_tag = "J_SpineUpper"; - self endon( "stop_zombie_fall_dust_fx" ); - self thread stop_zombie_fall_dust_fx( zombie ); - dust_time = 4.5; - dust_interval = 0.3; - t = 0; - while ( t < dust_time ) - { - playfxontag( level._effect[ "rise_dust" ], zombie, dust_tag ); - wait dust_interval; - t += dust_interval; - } -} - -stop_zombie_fall_dust_fx( zombie ) //checked matches cerberus output -{ - zombie waittill( "death" ); - self notify( "stop_zombie_fall_dust_fx" ); -} - -handle_fall_notetracks( note, spot ) //checked changed to match cerberus output -{ - if ( note == "deathout" ) - { - self.deathfunction = ::faller_death_ragdoll; - } - if ( note == "fire" ) - { - victims = zombie_fall_get_vicitims( spot ); - for ( i = 0; i < victims.size; i++) - { - victims[ i ] dodamage( self.meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); - self.zombie_faller_should_drop = 1; - } - } -} - -faller_death_ragdoll() //checked matches cerberus output -{ - self startragdoll(); - self launchragdoll( ( 0, 0, -1 ) ); - return self maps/mp/zombies/_zm_spawner::zombie_death_animscript(); -} - -in_player_fov( player ) //checked does not match cerberus output did not change -{ - playerangles = player getplayerangles(); - playerforwardvec = anglesToForward( playerangles ); - playerunitforwardvec = vectornormalize( playerforwardvec ); - banzaipos = self.origin; - playerpos = player getorigin(); - playertobanzaivec = banzaipos - playerpos; - playertobanzaiunitvec = vectornormalize( playertobanzaivec ); - forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec ); - anglefromcenter = acos( forwarddotbanzai ); - playerfov = getDvarFloat( "cg_fov" ); - banzaivsplayerfovbuffer = getDvarFloat( "g_banzai_player_fov_buffer" ); - if ( banzaivsplayerfovbuffer <= 0 ) - { - banzaivsplayerfovbuffer = 0.2; - } - inplayerfov = anglefromcenter <= ( playerfov * 0.5 ) * ( 1 - banzaivsplayerfovbuffer ); - return inplayerfov; -} - -potentially_visible( how_close ) //checked changed to match cerberus output -{ - if ( !isDefined( how_close ) ) - { - how_close = 1000000; - } - potentiallyvisible = 0; - players = getplayers(); - for ( i = 0; i < players.size; i++ ) - { - dist = distancesquared( self.origin, players[ i ].origin ); - if ( dist < how_close ) - { - inplayerfov = self in_player_fov( players[ i ] ); - if ( inplayerfov ) - { - potentiallyvisible = 1; - break; - } - } - } - return potentiallyvisible; -} - -do_zombie_emerge( spot ) //checked changed to match cerberus output -{ - self endon( "death" ); - self thread setup_deathfunc( ::faller_death_ragdoll ); - self.no_powerups = 1; - self.in_the_ceiling = 1; - anim_org = spot.origin; - anim_ang = spot.angles; - self thread zombie_emerge_fx( spot ); - self thread zombie_faller_death_wait( "risen" ); - if ( isDefined( level.custom_faller_entrance_logic ) ) - { - self thread [[ level.custom_faller_entrance_logic ]](); - } - self zombie_faller_emerge( spot ); - self.create_eyes = 1; - wait 0.1; - self notify( "risen", spot.script_string ); - self zombie_faller_enable_location(); -} - -zombie_faller_emerge( spot ) //checked matches cerberus output -{ - self endon( "death" ); - if ( is_true( self.zombie_faller_location.emerge_bottom ) ) - { - self animscripted( self.zombie_faller_location.origin, self.zombie_faller_location.angles, "zombie_riser_elevator_from_floor" ); - } - else - { - self animscripted( self.zombie_faller_location.origin, self.zombie_faller_location.angles, "zombie_riser_elevator_from_ceiling" ); - } - self maps/mp/animscripts/zm_shared::donotetracks( "rise_anim" ); - self.deathfunction = maps/mp/zombies/_zm_spawner::zombie_death_animscript; - self.in_the_ceiling = 0; - self.no_powerups = 0; -} - -zombie_emerge_fx( spot ) //checked matches cerberus output -{ - spot thread zombie_emerge_dust_fx( self ); - playsoundatposition( "zmb_zombie_spawn", spot.origin ); - self endon( "death" ); - spot endon( "stop_zombie_fall_fx" ); - wait 1; -} - -zombie_emerge_dust_fx( zombie ) //checked does not match cerberus output did not change -{ - dust_tag = "J_SpineUpper"; - self endon( "stop_zombie_fall_dust_fx" ); - self thread stop_zombie_fall_dust_fx( zombie ); - dust_time = 3.5; - dust_interval = 0.5; - t = 0; - while ( t < dust_time ) - { - playfxontag( level._effect[ "rise_dust" ], zombie, dust_tag ); - wait dust_interval; - t += dust_interval; - } -} - -stop_zombie_emerge_dust_fx( zombie ) //checked matches cerberus output -{ - zombie waittill( "death" ); - self notify( "stop_zombie_fall_dust_fx" ); -} - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_audio.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_audio.gsc deleted file mode 100644 index dc8eec6..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_audio.gsc +++ /dev/null @@ -1,1405 +0,0 @@ -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/_music; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - registerclientfield( "allplayers", "charindex", 1, 3, "int" ); - registerclientfield( "toplayer", "isspeaking", 1, 1, "int" ); - level.audio_get_mod_type = ::get_mod_type; - level zmbvox(); - level init_music_states(); - level maps/mp/zombies/_zm_audio_announcer::init(); - onplayerconnect_callback( ::init_audio_functions ); -} - -setexertvoice( exert_id ) //checked matches cerberus output -{ - self.player_exert_id = exert_id; - self setclientfield( "charindex", self.player_exert_id ); -} - -playerexert( exert ) //checked changed to match cerberus output -{ - if ( is_true( self.isspeaking ) || is_true( self.isexerting ) ) - { - return; - } - id = level.exert_sounds[ 0 ][ exert ]; - if ( isDefined( self.player_exert_id ) ) - { - if ( isarray( level.exert_sounds[ self.player_exert_id ][ exert ] ) ) - { - id = random( level.exert_sounds[ self.player_exert_id ][ exert ] ); - } - else - { - id = level.exert_sounds[ self.player_exert_id ][ exert ]; - } - } - self.isexerting = 1; - self thread exert_timer(); - self playsound( id ); -} - -exert_timer() //checked matches cerberus output -{ - self endon( "disconnect" ); - wait randomfloatrange( 1.5, 3 ); - self.isexerting = 0; -} - -zmbvox() //checked matches cerberus output -{ - level.votimer = []; - level.vox = zmbvoxcreate(); - init_standard_response_chances(); - level.vox zmbvoxadd( "player", "general", "crawl_spawn", "crawler_start", "resp_crawler_start" ); - level.vox zmbvoxadd( "player", "general", "hr_resp_crawler_start", "hr_resp_crawler_start", undefined ); - level.vox zmbvoxadd( "player", "general", "riv_resp_crawler_start", "riv_resp_crawler_start", undefined ); - level.vox zmbvoxadd( "player", "general", "ammo_low", "ammo_low", undefined ); - level.vox zmbvoxadd( "player", "general", "ammo_out", "ammo_out", undefined ); - level.vox zmbvoxadd( "player", "general", "door_deny", "nomoney_generic", undefined ); - level.vox zmbvoxadd( "player", "general", "perk_deny", "nomoney_perk", undefined ); - level.vox zmbvoxadd( "player", "general", "shoot_arm", "kill_limb", undefined ); - level.vox zmbvoxadd( "player", "general", "box_move", "box_move", undefined ); - level.vox zmbvoxadd( "player", "general", "no_money", "nomoney", undefined ); - level.vox zmbvoxadd( "player", "general", "oh_shit", "oh_shit", "resp_surrounded" ); - level.vox zmbvoxadd( "player", "general", "hr_resp_surrounded", "hr_resp_surrounded", undefined ); - level.vox zmbvoxadd( "player", "general", "riv_resp_surrounded", "riv_resp_surrounded", undefined ); - level.vox zmbvoxadd( "player", "general", "revive_down", "revive_down", undefined ); - level.vox zmbvoxadd( "player", "general", "revive_up", "revive_up", undefined ); - level.vox zmbvoxadd( "player", "general", "crawl_hit", "crawler_attack", undefined ); - level.vox zmbvoxadd( "player", "general", "sigh", "sigh", undefined ); - level.vox zmbvoxadd( "player", "general", "round_5", "round_5", undefined ); - level.vox zmbvoxadd( "player", "general", "round_20", "round_20", undefined ); - level.vox zmbvoxadd( "player", "general", "round_10", "round_10", undefined ); - level.vox zmbvoxadd( "player", "general", "round_35", "round_35", undefined ); - level.vox zmbvoxadd( "player", "general", "round_50", "round_50", undefined ); - level.vox zmbvoxadd( "player", "perk", "specialty_armorvest", "perk_jugga", undefined ); - level.vox zmbvoxadd( "player", "perk", "specialty_quickrevive", "perk_revive", undefined ); - level.vox zmbvoxadd( "player", "perk", "specialty_fastreload", "perk_speed", undefined ); - level.vox zmbvoxadd( "player", "perk", "specialty_rof", "perk_doubletap", undefined ); - level.vox zmbvoxadd( "player", "perk", "specialty_longersprint", "perk_stamine", undefined ); - level.vox zmbvoxadd( "player", "perk", "specialty_flakjacket", "perk_phdflopper", undefined ); - level.vox zmbvoxadd( "player", "perk", "specialty_deadshot", "perk_deadshot", undefined ); - level.vox zmbvoxadd( "player", "perk", "specialty_finalstand", "perk_who", undefined ); - level.vox zmbvoxadd( "player", "perk", "specialty_additionalprimaryweapon", "perk_mulekick", undefined ); - level.vox zmbvoxadd( "player", "powerup", "nuke", "powerup_nuke", undefined ); - level.vox zmbvoxadd( "player", "powerup", "insta_kill", "powerup_insta", undefined ); - level.vox zmbvoxadd( "player", "powerup", "full_ammo", "powerup_ammo", undefined ); - level.vox zmbvoxadd( "player", "powerup", "double_points", "powerup_double", undefined ); - level.vox zmbvoxadd( "player", "powerup", "carpenter", "powerup_carp", undefined ); - level.vox zmbvoxadd( "player", "powerup", "firesale", "powerup_firesale", undefined ); - level.vox zmbvoxadd( "player", "powerup", "minigun", "powerup_minigun", undefined ); - level.vox zmbvoxadd( "player", "kill", "melee", "kill_melee", undefined ); - level.vox zmbvoxadd( "player", "kill", "melee_instakill", "kill_insta", undefined ); - level.vox zmbvoxadd( "player", "kill", "weapon_instakill", "kill_insta", undefined ); - level.vox zmbvoxadd( "player", "kill", "closekill", "kill_close", undefined ); - level.vox zmbvoxadd( "player", "kill", "damage", "kill_damaged", undefined ); - level.vox zmbvoxadd( "player", "kill", "streak", "kill_streak", undefined ); - level.vox zmbvoxadd( "player", "kill", "headshot", "kill_headshot", "resp_kill_headshot" ); - level.vox zmbvoxadd( "player", "kill", "hr_resp_kill_headshot", "hr_resp_kill_headshot", undefined ); - level.vox zmbvoxadd( "player", "kill", "riv_resp_kill_headshot", "riv_resp_kill_headshot", undefined ); - level.vox zmbvoxadd( "player", "kill", "explosive", "kill_explo", undefined ); - level.vox zmbvoxadd( "player", "kill", "flame", "kill_flame", undefined ); - level.vox zmbvoxadd( "player", "kill", "raygun", "kill_ray", undefined ); - level.vox zmbvoxadd( "player", "kill", "bullet", "kill_streak", undefined ); - level.vox zmbvoxadd( "player", "kill", "tesla", "kill_tesla", undefined ); - level.vox zmbvoxadd( "player", "kill", "monkey", "kill_monkey", undefined ); - level.vox zmbvoxadd( "player", "kill", "thundergun", "kill_thunder", undefined ); - level.vox zmbvoxadd( "player", "kill", "freeze", "kill_freeze", undefined ); - level.vox zmbvoxadd( "player", "kill", "crawler", "crawler_kill", undefined ); - level.vox zmbvoxadd( "player", "kill", "hellhound", "kill_hellhound", undefined ); - level.vox zmbvoxadd( "player", "kill", "quad", "kill_quad", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "pistol", "wpck_crappy", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "smg", "wpck_smg", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "dualwield", "wpck_dual", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "shotgun", "wpck_shotgun", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "rifle", "wpck_sniper", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "burstrifle", "wpck_mg", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "assault", "wpck_mg", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "sniper", "wpck_sniper", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "mg", "wpck_mg", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "launcher", "wpck_launcher", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "grenade", "wpck_grenade", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "bowie", "wpck_bowie", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "raygun", "wpck_raygun", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "monkey", "wpck_monkey", "resp_wpck_monkey" ); - level.vox zmbvoxadd( "player", "weapon_pickup", "hr_resp_wpck_monkey", "hr_resp_wpck_monkey", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "riv_resp_wpck_monkey", "riv_resp_wpck_monkey", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "crossbow", "wpck_launcher", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "upgrade", "wpck_upgrade", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "favorite", "wpck_favorite", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "favorite_upgrade", "wpck_favorite_upgrade", undefined ); - level.vox zmbvoxadd( "player", "player_death", "player_death", "evt_player_final_hit", undefined ); - level.zmb_vox = []; - level.zmb_vox[ "prefix" ] = "zmb_vocals_"; - level.zmb_vox[ "zombie" ] = []; - level.zmb_vox[ "zombie" ][ "ambient" ] = "zombie_ambience"; - level.zmb_vox[ "zombie" ][ "sprint" ] = "zombie_sprint"; - level.zmb_vox[ "zombie" ][ "attack" ] = "zombie_attack"; - level.zmb_vox[ "zombie" ][ "teardown" ] = "zombie_teardown"; - level.zmb_vox[ "zombie" ][ "taunt" ] = "zombie_taunt"; - level.zmb_vox[ "zombie" ][ "behind" ] = "zombie_behind"; - level.zmb_vox[ "zombie" ][ "death" ] = "zombie_death"; - level.zmb_vox[ "zombie" ][ "crawler" ] = "zombie_crawler"; - level.zmb_vox[ "zombie" ][ "electrocute" ] = "zombie_electrocute"; - level.zmb_vox[ "quad_zombie" ] = []; - level.zmb_vox[ "quad_zombie" ][ "ambient" ] = "quad_ambience"; - level.zmb_vox[ "quad_zombie" ][ "sprint" ] = "quad_sprint"; - level.zmb_vox[ "quad_zombie" ][ "attack" ] = "quad_attack"; - level.zmb_vox[ "quad_zombie" ][ "behind" ] = "quad_behind"; - level.zmb_vox[ "quad_zombie" ][ "death" ] = "quad_death"; - level.zmb_vox[ "thief_zombie" ] = []; - level.zmb_vox[ "thief_zombie" ][ "ambient" ] = "thief_ambience"; - level.zmb_vox[ "thief_zombie" ][ "sprint" ] = "thief_sprint"; - level.zmb_vox[ "thief_zombie" ][ "steal" ] = "thief_steal"; - level.zmb_vox[ "thief_zombie" ][ "death" ] = "thief_death"; - level.zmb_vox[ "thief_zombie" ][ "anger" ] = "thief_anger"; - level.zmb_vox[ "boss_zombie" ] = []; - level.zmb_vox[ "boss_zombie" ][ "ambient" ] = "boss_ambience"; - level.zmb_vox[ "boss_zombie" ][ "sprint" ] = "boss_sprint"; - level.zmb_vox[ "boss_zombie" ][ "attack" ] = "boss_attack"; - level.zmb_vox[ "boss_zombie" ][ "behind" ] = "boss_behind"; - level.zmb_vox[ "boss_zombie" ][ "death" ] = "boss_death"; - level.zmb_vox[ "leaper_zombie" ] = []; - level.zmb_vox[ "leaper_zombie" ][ "ambient" ] = "leaper_ambience"; - level.zmb_vox[ "leaper_zombie" ][ "sprint" ] = "leaper_ambience"; - level.zmb_vox[ "leaper_zombie" ][ "attack" ] = "leaper_attack"; - level.zmb_vox[ "leaper_zombie" ][ "behind" ] = "leaper_close"; - level.zmb_vox[ "leaper_zombie" ][ "death" ] = "leaper_death"; - level.zmb_vox[ "monkey_zombie" ] = []; - level.zmb_vox[ "monkey_zombie" ][ "ambient" ] = "monkey_ambience"; - level.zmb_vox[ "monkey_zombie" ][ "sprint" ] = "monkey_sprint"; - level.zmb_vox[ "monkey_zombie" ][ "attack" ] = "monkey_attack"; - level.zmb_vox[ "monkey_zombie" ][ "behind" ] = "monkey_behind"; - level.zmb_vox[ "monkey_zombie" ][ "death" ] = "monkey_death"; - level.zmb_vox[ "capzomb" ] = []; - level.zmb_vox[ "capzomb" ][ "ambient" ] = "capzomb_ambience"; - level.zmb_vox[ "capzomb" ][ "sprint" ] = "capzomb_sprint"; - level.zmb_vox[ "capzomb" ][ "attack" ] = "capzomb_attack"; - level.zmb_vox[ "capzomb" ][ "teardown" ] = "capzomb_ambience"; - level.zmb_vox[ "capzomb" ][ "taunt" ] = "capzomb_ambience"; - level.zmb_vox[ "capzomb" ][ "behind" ] = "capzomb_behind"; - level.zmb_vox[ "capzomb" ][ "death" ] = "capzomb_death"; - level.zmb_vox[ "capzomb" ][ "crawler" ] = "capzomb_crawler"; - level.zmb_vox[ "capzomb" ][ "electrocute" ] = "zombie_electrocute"; - if ( isDefined( level._zmbvoxlevelspecific ) ) - { - level thread [[ level._zmbvoxlevelspecific ]](); - } - if ( isDefined( level._zmbvoxgametypespecific ) ) - { - level thread [[ level._zmbvoxgametypespecific ]](); - } - announcer_ent = spawn( "script_origin", ( 0, 0, 0 ) ); - level.vox zmbvoxinitspeaker( "announcer", "vox_zmba_", announcer_ent ); - level.exert_sounds[ 0 ][ "burp" ] = "evt_belch"; - level.exert_sounds[ 0 ][ "hitmed" ] = "null"; - level.exert_sounds[ 0 ][ "hitlrg" ] = "null"; - if ( isDefined( level.setupcustomcharacterexerts ) ) - { - [[ level.setupcustomcharacterexerts ]](); - } -} - -init_standard_response_chances() //checked matches cerberus output -{ - level.response_chances = []; - add_vox_response_chance( "sickle", 40 ); - add_vox_response_chance( "melee", 40 ); - add_vox_response_chance( "melee_instakill", 99 ); - add_vox_response_chance( "weapon_instakill", 10 ); - add_vox_response_chance( "explosive", 60 ); - add_vox_response_chance( "monkey", 60 ); - add_vox_response_chance( "flame", 60 ); - add_vox_response_chance( "raygun", 75 ); - add_vox_response_chance( "headshot", 15 ); - add_vox_response_chance( "crawler", 30 ); - add_vox_response_chance( "quad", 30 ); - add_vox_response_chance( "astro", 99 ); - add_vox_response_chance( "closekill", 15 ); - add_vox_response_chance( "bullet", 1 ); - add_vox_response_chance( "claymore", 99 ); - add_vox_response_chance( "dolls", 99 ); - add_vox_response_chance( "default", 1 ); -} - -init_audio_functions() //checked matches cerberus output -{ - self thread zombie_behind_vox(); - self thread player_killstreak_timer(); - if ( isDefined( level._custom_zombie_oh_shit_vox_func ) ) - { - self thread [[ level._custom_zombie_oh_shit_vox_func ]](); - } - else - { - self thread oh_shit_vox(); - } -} - -zombie_behind_vox() //checked changed to match cerberus output one change made at one discretion -{ - self endon( "death_or_disconnect" ); - if ( !isDefined( level._zbv_vox_last_update_time ) ) - { - level._zbv_vox_last_update_time = 0; - level._audio_zbv_shared_ent_list = get_round_enemy_array(); - } - while ( 1 ) - { - wait 1; - t = getTime(); - if ( t > ( level._zbv_vox_last_update_time + 1000 ) ) - { - level._zbv_vox_last_update_time = t; - level._audio_zbv_shared_ent_list = get_round_enemy_array(); - } - zombs = level._audio_zbv_shared_ent_list; - played_sound = 0; - for ( i = 0; i < zombs.size; i++ ) - { - if ( !isdefined( zombs[ i ] ) ) - { - continue; - } - if ( zombs[ i ].isdog ) - { - continue; - } - dist = 200; - z_dist = 50; - alias = level.vox_behind_zombie; - if ( isdefined( zombs[ i ].zombie_move_speed ) ) - { - switch ( zombs[ i ].zombie_move_speed ) - { - case "walk": - dist = 200; - break; - case "run": - dist = 250; - break; - case "sprint": - dist = 275; - break; - } - } - if ( distancesquared( zombs[ i ].origin, self.origin ) < dist * dist ) - { - yaw = self maps/mp/zombies/_zm_utility::getyawtospot( zombs[ i ].origin ); - z_diff = self.origin[ 2 ] - zombs[ i ].origin[ 2 ]; - //if ( yaw < -95 || yaw > 95 && Abs( z_diff ) < 50 ) //original - if ( ( yaw < -95 || yaw > 95 ) && Abs( z_diff ) < 50 ) - { - zombs[ i ] thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "behind", zombs[ i ].animname ); - played_sound = 1; - break; - } - } - } - if ( played_sound ) - { - wait 5; - } - } -} - -attack_vox_network_choke() //checked matches cerberus output -{ - while ( 1 ) - { - level._num_attack_vox = 0; - wait_network_frame(); - } -} - -do_zombies_playvocals( alias_type, zombie_type ) //checked changed to match cerberus output -{ - self endon( "death" ); - if ( !isDefined( zombie_type ) ) - { - zombie_type = "zombie"; - } - if ( is_true( self.shrinked ) ) - { - return; - } - if ( is_true( self.is_inert ) ) - { - return; - } - if ( !isDefined( self.talking ) ) - { - self.talking = 0; - } - if ( isDefined( level.script ) && level.script == "zm_tomb" ) - { - if ( isDefined( self.script_int ) && self.script_int >= 2 ) - { - zombie_type = "capzomb"; - self.zmb_vocals_attack = "zmb_vocals_capzomb_attack"; - } - else if ( isDefined( self.sndname ) ) - { - zombie_type = self.sndname; - } - } - if ( !isDefined( level.zmb_vox[ zombie_type ] ) ) - { - return; - } - if ( !isDefined( level.zmb_vox[ zombie_type ][ alias_type ] ) ) - { - return; - } - switch( alias_type ) - { - case "ambient": - case "attack": - case "behind": - case "crawler": - case "death": - case "electrocute": - case "sprint": - case "teardown": - if ( !sndisnetworksafe() ) - { - return; - } - break; - } - alias = level.zmb_vox[ "prefix" ] + level.zmb_vox[ zombie_type ][ alias_type ]; - if ( alias_type != "attack" && alias_type != "behind" && alias_type != "death" && alias_type != "anger" && alias_type != "steal" || alias_type == "taunt" && alias_type == "teardown" ) - { - if ( isDefined( level._custom_zombie_audio_func ) ) - { - self [[ level._custom_zombie_audio_func ]]( alias, alias_type ); - } - else - { - self playsound( alias ); - } - } - else if ( !self.talking ) - { - self.talking = 1; - if ( self is_last_zombie() ) - { - alias += "_loud"; - } - self playsoundwithnotify( alias, "sounddone" ); - self waittill( "sounddone" ); - self.talking = 0; - } -} - -sndisnetworksafe() //checked matches cerberus output -{ - if ( !isDefined( level._num_attack_vox ) ) - { - level thread attack_vox_network_choke(); - } - if ( level._num_attack_vox > 4 ) - { - return 0; - } - level._num_attack_vox++; - return 1; -} - -is_last_zombie() //checked matches cerberus output -{ - if ( get_current_zombie_count() <= 1 ) - { - return 1; - } - return 0; -} - -oh_shit_vox() //checked changed to match cerberus output -{ - self endon( "death_or_disconnect" ); - while ( 1 ) - { - wait 1; - players = get_players(); - zombs = get_round_enemy_array(); - if ( players.size > 1 ) - { - close_zombs = 0; - for ( i = 0; i < zombs.size; i++ ) - { - if ( isDefined( zombs[ i ].favoriteenemy ) || zombs[ i ].favoriteenemy == self && !isDefined( zombs[ i ].favoriteenemy ) ) - { - if ( distancesquared( zombs[ i ].origin, self.origin ) < 62500 ) - { - close_zombs++; - } - } - } - if ( close_zombs > 4 ) - { - if ( randomint( 100 ) > 75 && !is_true( self.isonbus ) ) - { - self create_and_play_dialog( "general", "oh_shit" ); - wait 4; - } - } - } - } -} - -create_and_play_dialog( category, type, response, force_variant, override ) //checked changed to match cerberus output -{ - waittime = 0.25; - if ( !isDefined( self.zmbvoxid ) ) - { - return; - } - if ( is_true( self.dontspeak ) ) - { - return; - } - isresponse = 0; - alias_suffix = undefined; - index = undefined; - prefix = undefined; - if ( !isDefined( level.vox.speaker[ self.zmbvoxid ].alias[ category ][ type ] ) ) - { - return; - } - prefix = level.vox.speaker[ self.zmbvoxid ].prefix; - alias_suffix = level.vox.speaker[ self.zmbvoxid ].alias[ category ][ type ]; - if ( self is_player() ) - { - if ( self.sessionstate != "playing" ) - { - return; - } - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && type != "revive_down" || self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && type != "revive_up" ) - { - return; - } - index = maps/mp/zombies/_zm_weapons::get_player_index( self ); - prefix = prefix + index + "_"; - } - if ( isDefined( response ) ) - { - if ( isDefined( level.vox.speaker[ self.zmbvoxid ].response[ category ][ type ] ) ) - { - alias_suffix = response + level.vox.speaker[ self.zmbvoxid ].response[ category ][ type ]; - } - isresponse = 1; - } - sound_to_play = self zmbvoxgetlinevariant( prefix, alias_suffix, force_variant, override ); - if ( isDefined( sound_to_play ) ) - { - if ( isDefined( level._audio_custom_player_playvox ) ) - { - self thread [[ level._audio_custom_player_playvox ]]( prefix, index, sound_to_play, waittime, category, type, override ); - } - else - { - self thread do_player_or_npc_playvox( prefix, index, sound_to_play, waittime, category, type, override, isresponse ); - } - } -} - -do_player_or_npc_playvox( prefix, index, sound_to_play, waittime, category, type, override, isresponse ) //checked partially changed to match cerberus output -{ - self endon( "death_or_disconnect" ); - if ( is_true( level.skit_vox_override ) && !is_true( override ) ) - { - return; - } - if ( !isDefined( self.isspeaking ) ) - { - self.isspeaking = 0; - } - if ( is_true( self.isspeaking ) ) - { - return; - } - if ( !self arenearbyspeakersactive() || is_true( self.ignorenearbyspkrs ) ) - { - self.speakingline = sound_to_play; - self.isspeaking = 1; - if ( isplayer( self ) ) - { - self setclientfieldtoplayer( "isspeaking", 1 ); - } - self notify( "speaking" ); - playbacktime = soundgetplaybacktime( prefix + sound_to_play ); - if ( !isDefined( playbacktime ) ) - { - return; - } - if ( playbacktime >= 0 ) - { - playbacktime *= 0.001; - } - else - { - playbacktime = 1; - } - self playsoundontag( prefix + sound_to_play, "J_Head" ); - wait playbacktime; - if ( isplayer( self ) && !is_true( isresponse ) && isDefined( self.last_vo_played_time ) ) - { - if ( getTime() < ( self.last_vo_played_time + 5000 ) ) - { - waittime = 15; - } - } - wait waittime; - self notify( "done_speaking" ); - self.isspeaking = 0; - if ( isplayer( self ) ) - { - self setclientfieldtoplayer( "isspeaking", 0 ); - } - if ( isplayer( self ) ) - { - self.last_vo_played_time = getTime(); - } - if ( is_true( isresponse ) ) - { - return; - } - if ( isDefined( level.vox.speaker[ self.zmbvoxid ].response ) && isDefined( level.vox.speaker[ self.zmbvoxid ].response[ category ] ) && isDefined( level.vox.speaker[ self.zmbvoxid ].response[ category ][ type ] ) ) - { - if ( isDefined( self.isnpc ) && self.isnpc || !flag( "solo_game" ) ) - { - if ( isDefined( level._audio_custom_response_line ) ) - { - level thread [[ level._audio_custom_response_line ]]( self, index, category, type ); - } - else - { - level thread setup_response_line( self, index, category, type ); - } - } - } - } - else - { - } -} - -setup_response_line( player, index, category, type ) //checked matches cerberus output -{ - dempsey = 0; - nikolai = 1; - takeo = 2; - richtofen = 3; - switch( player.entity_num ) - { - case 0: - level setup_hero_rival( player, nikolai, richtofen, category, type ); - break; - case 1: - level setup_hero_rival( player, richtofen, takeo, category, type ); - break; - case 2: - level setup_hero_rival( player, dempsey, nikolai, category, type ); - break; - case 3: - level setup_hero_rival( player, takeo, dempsey, category, type ); - break; - } - return; -} - -setup_hero_rival( player, hero, rival, category, type ) //checked changed to match cerberus output -{ - players = get_players(); - hero_player = undefined; - rival_player = undefined; - foreach ( ent in players ) - { - if ( ent.characterindex == hero ) - { - hero_player = ent; - continue; - } - if ( ent.characterindex == rival ) - { - rival_player = ent; - } - } - if ( isDefined( hero_player ) && isDefined( rival_player ) ) - { - if ( randomint( 100 ) > 50 ) - { - hero_player = undefined; - } - else - { - rival_player = undefined; - } - } - if ( isDefined( hero_player ) && distancesquared( player.origin, hero_player.origin ) < 250000 ) - { - hero_player create_and_play_dialog( category, type, "hr_" ); - } - else if ( isDefined( rival_player ) && distancesquared( player.origin, rival_player.origin ) < 250000 ) - { - rival_player create_and_play_dialog( category, type, "riv_" ); - } -} - -do_announcer_playvox( category, type, team ) //checked matches cerberus output -{ - if ( !isDefined( level.vox.speaker[ "announcer" ].alias[ category ] ) || !isDefined( level.vox.speaker[ "announcer" ].alias[ category ][ type ] ) ) - { - return; - } - if ( !isDefined( level.devil_is_speaking ) ) - { - level.devil_is_speaking = 0; - } - prefix = level.vox.speaker[ "announcer" ].prefix; - suffix = level.vox.speaker[ "announcer" ].ent zmbvoxgetlinevariant( prefix, level.vox.speaker[ "announcer" ].alias[ category ][ type ] ); - if ( !isDefined( suffix ) ) - { - return; - } - alias = prefix + suffix; - if ( level.devil_is_speaking == 0 ) - { - level.devil_is_speaking = 1; - if ( !isDefined( team ) ) - { - level.vox.speaker[ "announcer" ].ent playsoundwithnotify( alias, "sounddone" ); - } - else - { - level thread zmbvoxannouncertoteam( category, type, team ); - } - level.vox.speaker[ "announcer" ].ent waittill( "sounddone" ); - level.devil_is_speaking = 0; - } -} - -zmbvoxannouncertoteam( category, type, team ) //checked changed to match cerberus output -{ - prefix = level.vox.speaker[ "announcer" ].prefix; - alias_to_team = prefix + level.vox.speaker[ "announcer" ].ent zmbvoxgetlinevariant( prefix, level.vox.speaker[ "announcer" ].alias[ category ][ type ] ); - if ( isDefined( level.vox.speaker[ "announcer" ].response[ category ][ type ] ) ) - { - alias_to_rival = prefix + level.vox.speaker[ "announcer" ].ent zmbvoxgetlinevariant( prefix, level.vox.speaker[ "announcer" ].response[ category ][ type ] ); - } - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - if ( !isdefined( players[ i ]._encounters_team ) ) - { - continue; - } - if ( players[ i ]._encounters_team == team ) - { - level.vox.speaker[ "announcer" ].ent playsoundtoplayer( alias_to_team, players[ i ] ); - continue; - } - if(isdefined(alias_to_rival)) - { - level.vox.speaker[ "announcer" ].ent playsoundtoplayer( alias_to_rival, players[ i ] ); - } - } - wait 3; - level.vox.speaker[ "announcer" ].ent notify( "sounddone" ); -} - -player_killstreak_timer() //checked matches cerberus output -{ - self endon( "disconnect" ); - self endon( "death" ); - if ( getDvar( "zombie_kills" ) == "" ) - { - setdvar( "zombie_kills", "7" ); - } - if ( getDvar( "zombie_kill_timer" ) == "" ) - { - setdvar( "zombie_kill_timer", "5" ); - } - kills = getDvarInt( "zombie_kills" ); - time = getDvarInt( "zombie_kill_timer" ); - if ( !isDefined( self.timerisrunning ) ) - { - self.timerisrunning = 0; - self.killcounter = 0; - } - while ( 1 ) - { - self waittill( "zom_kill", zomb ); - if ( isDefined( zomb._black_hole_bomb_collapse_death ) && zomb._black_hole_bomb_collapse_death == 1 ) - { - continue; - } - if ( is_true( zomb.microwavegun_death ) ) - { - continue; - } - self.killcounter++; - if ( self.timerisrunning != 1 ) - { - self.timerisrunning = 1; - self thread timer_actual( kills, time ); - } - } -} - -player_zombie_kill_vox( hit_location, player, mod, zombie ) //checked does not match cerberus output did not change -{ - weapon = player getcurrentweapon(); - dist = distancesquared( player.origin, zombie.origin ); - if ( !isDefined( level.zombie_vars[ player.team ][ "zombie_insta_kill" ] ) ) - { - level.zombie_vars[ player.team ][ "zombie_insta_kill" ] = 0; - } - instakill = level.zombie_vars[ player.team ][ "zombie_insta_kill" ]; - death = [[ level.audio_get_mod_type ]]( hit_location, mod, weapon, zombie, instakill, dist, player ); - chance = get_response_chance( death ); - if ( chance > randomintrange( 1, 100 ) && !is_true( player.force_wait_on_kill_line ) ) - { - player.force_wait_on_kill_line = 1; - player create_and_play_dialog( "kill", death ); - wait 2; - if ( isDefined( player ) ) - { - player.force_wait_on_kill_line = 0; - } - } -} - -get_response_chance( event ) //checked matches cerberus output -{ - if ( !isDefined( level.response_chances[ event ] ) ) - { - return 0; - } - return level.response_chances[ event ]; -} - -get_mod_type( impact, mod, weapon, zombie, instakill, dist, player ) //checked does not match cerberus output did not change -{ - close_dist = 4096; - med_dist = 15376; - far_dist = 160000; - if ( isDefined( zombie._black_hole_bomb_collapse_death ) && zombie._black_hole_bomb_collapse_death == 1 ) - { - return "default"; - } - if ( zombie.animname == "screecher_zombie" && mod == "MOD_MELEE" ) - { - return "killed_screecher"; - } - if ( is_placeable_mine( weapon ) ) - { - if ( !instakill ) - { - return "claymore"; - } - else - { - return "weapon_instakill"; - } - } - if ( weapon == "jetgun_zm" || weapon == "jetgun_upgraded_zm" ) - { - if ( instakill ) - { - return "weapon_instakill"; - } - else - { - return "jetgun_kill"; - } - } - if ( weapon == "slipgun_zm" || weapon == "slipgun_upgraded_zm" ) - { - if ( instakill ) - { - return "weapon_instakill"; - } - else - { - return "slipgun_kill"; - } - } - if ( isDefined( zombie.damageweapon ) && zombie.damageweapon == "cymbal_monkey_zm" ) - { - if ( instakill ) - { - return "weapon_instakill"; - } - else - { - return "monkey"; - } - } - if ( is_headshot( weapon, impact, mod ) && dist >= far_dist ) - { - return "headshot"; - } - if ( mod != "MOD_MELEE" && mod != "MOD_BAYONET" && mod == "MOD_UNKNOWN" && dist < close_dist ) - { - if ( !instakill ) - { - if ( player hasweapon( "sickle_knife_zm" ) ) - { - return "sickle"; - } - else - { - return "melee"; - } - } - else - { - return "melee_instakill"; - } - } - if ( isDefined( zombie.damageweapon ) && zombie.damageweapon == "zombie_nesting_doll_single" ) - { - if ( !instakill ) - { - return "dolls"; - } - else - { - return "weapon_instakill"; - } - } - if ( is_explosive_damage( mod ) && weapon != "ray_gun_zm" && !is_true( zombie.is_on_fire ) ) - { - if ( !instakill ) - { - return "explosive"; - } - else - { - return "weapon_instakill"; - } - } - if ( !issubstr( weapon, "flame" ) && !issubstr( weapon, "molotov_" ) && issubstr( weapon, "napalmblob_" ) && mod != "MOD_BURNED" || mod == "MOD_GRENADE" && mod == "MOD_GRENADE_SPLASH" ) - { - if ( !instakill ) - { - return "flame"; - } - else - { - return "weapon_instakill"; - } - } - if ( weapon == "ray_gun_zm" && dist > far_dist ) - { - if ( !instakill ) - { - return "raygun"; - } - else - { - return "weapon_instakill"; - } - } - if ( !isDefined( impact ) ) - { - impact = ""; - } - if ( mod == "MOD_RIFLE_BULLET" || mod == "MOD_PISTOL_BULLET" ) - { - if ( !instakill ) - { - return "bullet"; - } - else - { - return "weapon_instakill"; - } - } - if ( instakill ) - { - return "default"; - } - if ( mod != "MOD_MELEE" && zombie.animname == "quad_zombie" ) - { - return "quad"; - } - if ( mod != "MOD_MELEE" && zombie.animname == "astro_zombie" ) - { - return "astro"; - } - if ( mod != "MOD_MELEE" && !zombie.has_legs ) - { - return "crawler"; - } - if ( mod != "MOD_BURNED" && dist < close_dist ) - { - return "closekill"; - } - return "default"; -} - -timer_actual( kills, time ) //checked matches cerberus output -{ - self endon( "disconnect" ); - self endon( "death" ); - timer = getTime() + ( time * 1000 ); - while ( getTime() < timer ) - { - if ( self.killcounter > kills ) - { - self create_and_play_dialog( "kill", "streak" ); - wait 1; - self.killcounter = 0; - timer = -1; - } - wait 0.1; - } - wait 10; - self.killcounter = 0; - self.timerisrunning = 0; -} - -perks_a_cola_jingle_timer() //checked matches cerberus output -{ - if ( isDefined( level.sndperksacolaloopoverride ) ) - { - self thread [[ level.sndperksacolaloopoverride ]](); - return; - } - self endon( "death" ); - self thread play_random_broken_sounds(); - while ( 1 ) - { - wait randomfloatrange( 31, 45 ); - if ( randomint( 100 ) < 15 ) - { - self thread play_jingle_or_stinger( self.script_sound ); - } - } -} - -play_jingle_or_stinger( perksacola ) //checked matches cerberus output -{ - if ( isDefined( level.sndperksacolajingleoverride ) ) - { - self thread [[ level.sndperksacolajingleoverride ]](); - return; - } - playsoundatposition( "evt_electrical_surge", self.origin ); - if ( !isDefined( self.jingle_is_playing ) ) - { - self.jingle_is_playing = 0; - } - if ( isDefined( perksacola ) ) - { - if ( self.jingle_is_playing == 0 && level.music_override == 0 ) - { - self.jingle_is_playing = 1; - self playsoundontag( perksacola, "tag_origin", "sound_done" ); - if ( issubstr( perksacola, "sting" ) ) - { - wait 10; - } - else if ( isDefined( self.longjinglewait ) ) - { - wait 60; - } - else - { - wait 30; - } - self.jingle_is_playing = 0; - } - } -} - -play_random_broken_sounds() //checked matches cerberus output -{ - self endon( "death" ); - level endon( "jingle_playing" ); - if ( !isDefined( self.script_sound ) ) - { - self.script_sound = "null"; - } - if ( self.script_sound == "mus_perks_revive_jingle" ) - { - while ( 1 ) - { - wait randomfloatrange( 7, 18 ); - playsoundatposition( "zmb_perks_broken_jingle", self.origin ); - playsoundatposition( "evt_electrical_surge", self.origin ); - } - } - else while ( 1 ) - { - wait randomfloatrange( 7, 18 ); - playsoundatposition( "evt_electrical_surge", self.origin ); - } -} - -perk_vox( perk ) //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( !isDefined( level.vox.speaker[ "player" ].alias[ "perk" ][ perk ] ) ) - { - return; - } - self create_and_play_dialog( "perk", perk ); -} - -dialog_debugger( category, type ) //checked dev call deleted -{ -} - -init_music_states() //checked matches cerberus output -{ - level.music_override = 0; - level.music_round_override = 0; - level.old_music_state = undefined; - level.zmb_music_states = []; - level thread setupmusicstate( "round_start", "mus_zombie_round_start", 1, 1, 1, "WAVE" ); - level thread setupmusicstate( "round_end", "mus_zombie_round_over", 1, 1, 1, "SILENCE" ); - level thread setupmusicstate( "wave_loop", "WAVE", 0, 1, undefined, undefined ); - level thread setupmusicstate( "game_over", "mus_zombie_game_over", 1, 0, undefined, "SILENCE" ); - level thread setupmusicstate( "dog_start", "mus_zombie_dog_start", 1, 1, undefined, undefined ); - level thread setupmusicstate( "dog_end", "mus_zombie_dog_end", 1, 1, undefined, undefined ); - level thread setupmusicstate( "egg", "EGG", 0, 0, undefined, undefined ); - level thread setupmusicstate( "egg_safe", "EGG_SAFE", 0, 0, undefined, undefined ); - level thread setupmusicstate( "egg_a7x", "EGG_A7X", 0, 0, undefined, undefined ); - level thread setupmusicstate( "sam_reveal", "SAM", 0, 0, undefined, undefined ); - level thread setupmusicstate( "brutus_round_start", "mus_event_brutus_round_start", 1, 1, 0, "WAVE" ); - level thread setupmusicstate( "last_life", "LAST_LIFE", 0, 1, undefined, undefined ); -} - -setupmusicstate( state, alias, is_alias, override, round_override, musicstate ) //checked matches cerberus output -{ - if ( !isDefined( level.zmb_music_states[ state ] ) ) - { - level.zmb_music_states[ state ] = spawnstruct(); - } - level.zmb_music_states[ state ].music = alias; - level.zmb_music_states[ state ].is_alias = is_alias; - level.zmb_music_states[ state ].override = override; - level.zmb_music_states[ state ].round_override = round_override; - level.zmb_music_states[ state ].musicstate = musicstate; -} - -change_zombie_music( state ) //checked changed to match cerberus output -{ - wait 0.05; - m = level.zmb_music_states[ state ]; - if ( !isDefined( m ) ) - { - return; - } - do_logic = 1; - if ( !isDefined( level.old_music_state ) ) - { - do_logic = 0; - } - if ( do_logic ) - { - if ( level.old_music_state == m ) - { - return; - } - else if ( level.old_music_state.music == "mus_zombie_game_over" ) - { - return; - } - } - if ( !isDefined( m.round_override ) ) - { - m.round_override = 0; - } - if ( m.override == 1 && level.music_override == 1 ) - { - return; - } - if ( m.round_override == 1 && level.music_round_override == 1 ) - { - return; - } - if ( m.is_alias ) - { - if ( isDefined( m.musicstate ) ) - { - maps/mp/_music::setmusicstate( m.musicstate ); - } - play_sound_2d( m.music ); - } - else - { - maps/mp/_music::setmusicstate( m.music ); - } - level.old_music_state = m; -} - -weapon_toggle_vox( alias, weapon ) //checked changed to match cerberus output -{ - self notify( "audio_activated_trigger" ); - self endon( "audio_activated_trigger" ); - prefix = "vox_pa_switcher_"; - sound_to_play = prefix + alias; - type = undefined; - if ( isDefined( weapon ) ) - { - type = get_weapon_num( weapon ); - if ( !isDefined( type ) ) - { - return; - } - } - self stopsounds(); - wait 0.05; - if ( isDefined( type ) ) - { - self playsoundwithnotify( prefix + "weapon_" + type, "sounddone" ); - self waittill( "sounddone" ); - } - self playsound( sound_to_play + "_0" ); -} - -get_weapon_num( weapon ) //checked matches cerberus output -{ - weapon_num = undefined; - switch( weapon ) - { - case "humangun_zm": - weapon_num = 0; - break; - case "sniper_explosive_zm": - weapon_num = 1; - break; - case "tesla_gun_zm": - weapon_num = 2; - break; - } - return weapon_num; -} - -addasspeakernpc( ignorenearbyspeakers ) //checked matches cerberus output -{ - if ( !isDefined( level.npcs ) ) - { - level.npcs = []; - } - if ( is_true( ignorenearbyspeakers ) ) - { - self.ignorenearbyspkrs = 1; - } - else - { - self.ignorenearbyspkrs = 0; - } - self.isnpc = 1; - level.npcs[ level.npcs.size ] = self; -} - -arenearbyspeakersactive() //checked partially changed to match cerberus output -{ - radius = 1000; - nearbyspeakeractive = 0; - speakers = get_players(); - if ( isDefined( level.npcs ) ) - { - speakers = arraycombine( speakers, level.npcs, 1, 0 ); - } - foreach ( person in speakers ) - { - if ( self == person ) - { - continue; - } - if ( person is_player() ) - { - if ( person.sessionstate != "playing" ) - { - continue; - } - if ( person maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - continue; - } - } - if ( is_true( person.isspeaking ) && !is_true( person.ignorenearbyspkrs ) ) - { - if ( distancesquared( self.origin, person.origin ) < radius * radius ) - { - nearbyspeakeractive = 1; - } - } - } - return nearbyspeakeractive; -} - -zmbvoxcreate() //checked matches cerberus output -{ - vox = spawnstruct(); - vox.speaker = []; - return vox; -} - -zmbvoxinitspeaker( speaker, prefix, ent ) //checked matches cerberus output -{ - ent.zmbvoxid = speaker; - if ( !isDefined( self.speaker[ speaker ] ) ) - { - self.speaker[ speaker ] = spawnstruct(); - self.speaker[ speaker ].alias = []; - } - self.speaker[ speaker ].prefix = prefix; - self.speaker[ speaker ].ent = ent; -} - -zmbvoxadd( speaker, category, type, alias, response ) //checked matches cerberus output -{ - if ( !isDefined( self.speaker[ speaker ] ) ) - { - self.speaker[ speaker ] = spawnstruct(); - self.speaker[ speaker ].alias = []; - } - if ( !isDefined( self.speaker[ speaker ].alias[ category ] ) ) - { - self.speaker[ speaker ].alias[ category ] = []; - } - self.speaker[ speaker ].alias[ category ][ type ] = alias; - if ( isDefined( response ) ) - { - if ( !isDefined( self.speaker[ speaker ].response ) ) - { - self.speaker[ speaker ].response = []; - } - if ( !isDefined( self.speaker[ speaker ].response[ category ] ) ) - { - self.speaker[ speaker ].response[ category ] = []; - } - self.speaker[ speaker ].response[ category ][ type ] = response; - } - create_vox_timer( type ); -} - -zmbvoxgetlinevariant( prefix, alias_suffix, force_variant, override ) //checked changed to match cerberus output -{ - if ( !isDefined( self.sound_dialog ) ) - { - self.sound_dialog = []; - self.sound_dialog_available = []; - } - if ( !isDefined( self.sound_dialog[ alias_suffix ] ) ) - { - num_variants = maps/mp/zombies/_zm_spawner::get_number_variants( prefix + alias_suffix ); - if ( num_variants <= 0 ) - { - return undefined; - } - for ( i = 0; i < num_variants; i++ ) - { - self.sound_dialog[ alias_suffix ][ i ] = i; - } - self.sound_dialog_available[ alias_suffix ] = []; - } - while ( self.sound_dialog_available[ alias_suffix ].size <= 0 ) - { - for ( i = 0; i < self.sound_dialog[ alias_suffix ].size; i++ ) - { - self.sound_dialog_available[ alias_suffix ][ i ] = self.sound_dialog[ alias_suffix ][ i ]; - } - } - variation = random( self.sound_dialog_available[ alias_suffix ] ); - arrayremovevalue( self.sound_dialog_available[ alias_suffix ], variation ); - if ( isDefined( force_variant ) ) - { - variation = force_variant; - } - if ( !isDefined( override ) ) - { - override = 0; - } - return ( alias_suffix + "_" ) + variation; -} - -zmbvoxcrowdonteam( alias, team, other_alias ) //checked changed to match cerberus output -{ - alias = "vox_crowd_" + alias; - if ( !isDefined( team ) ) - { - level play_sound_2d( alias ); - return; - } - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - if ( !isdefined( players[ i ]._encounters_team ) ) - { - continue; - } - if ( players[ i ]._encounters_team == team ) - { - players[ i ] playsoundtoplayer( alias, players[ i ] ); - continue; - } - if ( isdefined( other_alias ) ) - { - players[ i ] playsoundtoplayer( other_alias, players[ i ] ); - } - } -} - -playvoxtoplayer( category, type, force_variant ) //checked matches cerberus output -{ - if ( self.sessionstate != "playing" ) - { - return; - } - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - return; - } - prefix = level.vox.speaker[ self.zmbvoxid ].prefix; - alias_suffix = level.vox.speaker[ self.zmbvoxid ].alias[ category ][ type ]; - prefix = prefix + self.characterindex + "_"; - if ( !isDefined( alias_suffix ) ) - { - return; - } - sound_to_play = self zmbvoxgetlinevariant( prefix, alias_suffix, force_variant ); - if ( isDefined( sound_to_play ) ) - { - sound = prefix + sound_to_play; - self playsoundtoplayer( sound, self ); - } -} - -sndmusicstingerevent( type, player ) //checked matches cerberus output -{ - if ( isDefined( level.sndmusicstingerevent ) ) - { - [[ level.sndmusicstingerevent ]]( type, player ); - } -} - -custom_kill_damaged_vo( player ) //checked matches cerberus output -{ - self notify( "sound_damage_player_updated" ); - self endon( "death" ); - self endon( "sound_damage_player_updated" ); - self.sound_damage_player = player; - wait 5; - self.sound_damage_player = undefined; -} - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_audio_announcer.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_audio_announcer.gsc deleted file mode 100644 index d6b98f2..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_audio_announcer.gsc +++ /dev/null @@ -1,431 +0,0 @@ -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - game[ "zmbdialog" ] = []; - game[ "zmbdialog" ][ "prefix" ] = "vox_zmba"; - createvox( "carpenter", "powerup_carpenter" ); - createvox( "insta_kill", "powerup_instakill" ); - createvox( "double_points", "powerup_doublepoints" ); - createvox( "nuke", "powerup_nuke" ); - createvox( "full_ammo", "powerup_maxammo" ); - createvox( "fire_sale", "powerup_firesale" ); - createvox( "minigun", "powerup_death_machine" ); - createvox( "zombie_blood", "powerup_zombie_blood" ); - createvox( "boxmove", "event_magicbox" ); - createvox( "dogstart", "event_dogstart" ); - thread init_gamemodespecificvox( getDvar( "ui_gametype" ), getDvar( "ui_zm_mapstartlocation" ) ); - level.allowzmbannouncer = 1; -} - -init_gamemodespecificvox( mode, location ) //checked matches cerberus output -{ - switch( mode ) - { - case "zmeat": - init_meatvox( "meat" ); - break; - case "zrace": - init_racevox( "race", location ); - break; - case "zgrief": - init_griefvox( "grief" ); - break; - case "zcleansed": - init_cleansed( location ); - break; - default: - init_gamemodecommonvox(); - break; - } -} - -init_gamemodecommonvox( prefix ) //checked matches cerberus output -{ - createvox( "rules", "rules", prefix ); - createvox( "countdown", "intro", prefix ); - createvox( "side_switch", "side_switch", prefix ); - createvox( "round_win", "win_rd", prefix ); - createvox( "round_lose", "lose_rd", prefix ); - createvox( "round_tied", "tied_rd", prefix ); - createvox( "match_win", "win", prefix ); - createvox( "match_lose", "lose", prefix ); - createvox( "match_tied", "tied", prefix ); -} - -init_griefvox( prefix ) //checked matches cerberus output -{ - init_gamemodecommonvox( prefix ); - createvox( "1_player_down", "1rivdown", prefix ); - createvox( "2_player_down", "2rivdown", prefix ); - createvox( "3_player_down", "3rivdown", prefix ); - createvox( "4_player_down", "4rivdown", prefix ); - createvox( "grief_restarted", "restart", prefix ); - createvox( "grief_lost", "lose", prefix ); - createvox( "grief_won", "win", prefix ); - createvox( "1_player_left", "1rivup", prefix ); - createvox( "2_player_left", "2rivup", prefix ); - createvox( "3_player_left", "3rivup", prefix ); - createvox( "last_player", "solo", prefix ); -} - -init_cleansed( prefix ) //checked matches cerberus output -{ - init_gamemodecommonvox( prefix ); - createvox( "dr_start_single_0", "dr_start_0" ); - createvox( "dr_start_2", "dr_start_1" ); - createvox( "dr_start_3", "dr_start_2" ); - createvox( "dr_cure_found_line", "dr_cure_found" ); - createvox( "dr_monkey_killer", "dr_monkey_0" ); - createvox( "dr_monkey_killee", "dr_monkey_1" ); - createvox( "dr_human_killed", "dr_kill_plr" ); - createvox( "dr_human_killer", "dr_kill_plr_2" ); - createvox( "dr_survival", "dr_plr_survive_0" ); - createvox( "dr_zurvival", "dr_zmb_survive_2" ); - createvox( "dr_countdown0", "dr_plr_survive_1" ); - createvox( "dr_countdown1", "dr_plr_survive_2" ); - createvox( "dr_countdown2", "dr_plr_survive_3" ); - createvox( "dr_ending", "dr_time_0" ); -} - -init_meatvox( prefix ) //checked matches cerberus output -{ - init_gamemodecommonvox( prefix ); - createvox( "meat_drop", "drop", prefix ); - createvox( "meat_grab", "grab", prefix ); - createvox( "meat_grab_A", "team_cdc", prefix ); - createvox( "meat_grab_B", "team_cia", prefix ); - createvox( "meat_land", "land", prefix ); - createvox( "meat_hold", "hold", prefix ); - createvox( "meat_revive_1", "revive1", prefix ); - createvox( "meat_revive_2", "revive2", prefix ); - createvox( "meat_revive_3", "revive3", prefix ); - createvox( "meat_ring_splitter", "ring_tripple", prefix ); - createvox( "meat_ring_minigun", "ring_death", prefix ); - createvox( "meat_ring_ammo", "ring_ammo", prefix ); -} - -init_racevox( prefix, location ) //checked changed to match cerberus output -{ - init_gamemodecommonvox( prefix ); - switch( location ) - { - case "tunnel": - createvox( "rules", "rules_" + location, prefix ); - createvox( "countdown", "intro_" + location, prefix ); - break; - case "power": - createvox( "rules", "rules_" + location, prefix ); - createvox( "countdown", "intro_" + location, prefix ); - createvox( "lap1", "lap1", prefix ); - createvox( "lap2", "lap2", prefix ); - createvox( "lap_final", "lap_final", prefix ); - break; - case "farm": - createvox( "rules", "rules_" + location, prefix ); - createvox( "countdown", "intro_" + location, prefix ); - createvox( "hoop_area", "hoop_area", prefix ); - createvox( "hoop_miss", "hoop_miss", prefix ); - break; - default: - break; - createvox( "race_room_2_ally", "room2_ally", prefix ); - createvox( "race_room_3_ally", "room3_ally", prefix ); - createvox( "race_room_4_ally", "room4_ally", prefix ); - createvox( "race_room_5_ally", "room5_ally", prefix ); - createvox( "race_room_2_axis", "room2_axis", prefix ); - createvox( "race_room_3_axis", "room3_axis", prefix ); - createvox( "race_room_4_axis", "room4_axis", prefix ); - createvox( "race_room_5_axis", "room5_axis", prefix ); - createvox( "race_ahead_1_ally", "ahead1_ally", prefix ); - createvox( "race_ahead_2_ally", "ahead2_ally", prefix ); - createvox( "race_ahead_3_ally", "ahead3_ally", prefix ); - createvox( "race_ahead_4_ally", "ahead4_ally", prefix ); - createvox( "race_ahead_1_axis", "ahead1_axis", prefix ); - createvox( "race_ahead_2_axis", "ahead2_axis", prefix ); - createvox( "race_ahead_3_axis", "ahead3_axis", prefix ); - createvox( "race_ahead_4_axis", "ahead4_axis", prefix ); - createvox( "race_kill_15", "door15", prefix ); - createvox( "race_kill_10", "door10", prefix ); - createvox( "race_kill_5", "door5", prefix ); - createvox( "race_kill_3", "door3", prefix ); - createvox( "race_kill_1", "door1", prefix ); - createvox( "race_door_open", "door_open", prefix ); - createvox( "race_door_nag", "door_nag", prefix ); - createvox( "race_grief_incoming", "grief_income_ammo", prefix ); - createvox( "race_grief_land", "grief_land", prefix ); - createvox( "race_laststand", "last_stand", prefix ); - } -} - -createvox( type, alias, gametype ) //checked matches cerberus output -{ - if ( !isDefined( gametype ) ) - { - gametype = ""; - } - else - { - gametype += "_"; - } - game[ "zmbdialog" ][ type ] = gametype + alias; -} - -announceroundwinner( winner, delay ) //checked changed to match cerberus output -{ - if ( isDefined( delay ) && delay > 0 ) - { - wait delay; - } - if ( !isDefined( winner ) || isplayer( winner ) ) - { - return; - } - if ( winner != "tied" ) - { - players = get_players(); - foreach ( player in players ) - { - if ( isdefined( player._encounters_team ) && player._encounters_team == winner ) - { - winning_team = player.pers[ "team" ]; - break; - } - } - losing_team = getotherteam( winning_team ); - leaderdialog( "round_win", winning_team, undefined, 1 ); - leaderdialog( "round_lose", losing_team, undefined, 1 ); - } - else - { - leaderdialog( "round_tied", undefined, undefined, 1 ); - } -} - -announcematchwinner( winner, delay ) //checked changed to match cerberus output -{ - if ( isDefined( delay ) && delay > 0 ) - { - wait delay; - } - if ( !isDefined( winner ) || isplayer( winner ) ) - { - return; - } - if ( winner != "tied" ) - { - players = get_players(); - foreach ( player in players ) - { - if ( isdefined( player._encounters_team ) && player._encounters_team == winner ) - { - winning_team = player.pers["team"]; - break; - } - } - losing_team = getotherteam( winning_team ); - leaderdialog( "match_win", winning_team, undefined, 1 ); - leaderdialog( "match_lose", losing_team, undefined, 1 ); - } - else - { - leaderdialog( "match_tied", undefined, undefined, 1 ); - } -} - -announcegamemoderules() //checked matches cerberus output -{ - if ( getDvar( "ui_zm_mapstartlocation" ) == "town" ) - { - leaderdialog( "rules", undefined, undefined, undefined, 20 ); - } -} - -leaderdialog( dialog, team, group, queue, waittime ) //checked changed to match cerberus output -{ - if ( !isDefined( team ) ) - { - leaderdialogbothteams( dialog, "allies", dialog, "axis", group, queue, waittime ); - return; - } - i = 0; - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[ i ]; - if ( isdefined ( player.pers[ "team" ] ) && player.pers[ "team" ] == team ) - { - player leaderdialogonplayer( dialog, group, queue, waittime ); - } - } -} - -leaderdialogbothteams( dialog1, team1, dialog2, team2, group, queue, waittime ) //checked changed to match cerberus output -{ - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - team = players[ i ].pers[ "team" ]; - if ( !isdefined( team ) ) - { - return; - } - if ( team == team1 ) - { - players[ i ] leaderdialogonplayer( dialog1, group, queue, waittime ); - } - if ( team == team2 ) - { - players[ i ] leaderdialogonplayer( dialog2, group, queue, waittime ); - } - } -} - -leaderdialogonplayer( dialog, group, queue, waittime ) //checked changed to match cerberus output -{ - team = self.pers[ "team" ]; - if ( !isDefined( team ) ) - { - return; - } - if ( team != "allies" && team != "axis" ) - { - return; - } - if ( isDefined( group ) ) - { - if ( self.zmbdialoggroup == group ) - { - return; - } - hadgroupdialog = isDefined( self.zmbdialoggroups[ group ] ); - self.zmbdialoggroups[ group ] = dialog; - dialog = group; - if ( isDefined( hadgroupdialog ) && hadgroupdialog ) - { - return; - } - } - if ( !is_true( self.zmbdialogactive ) ) - { - self thread playleaderdialogonplayer( dialog, team, waittime ); - } - else if ( is_true( queue ) ) - { - self.zmbdialogqueue[ self.zmbdialogqueue.size ] = dialog; - } -} - -playleaderdialogonplayer( dialog, team, waittime ) //checked changed to match cerberus output -{ - self endon( "disconnect" ); - - if ( level.allowzmbannouncer ) - { - if ( !isDefined( game[ "zmbdialog" ][ dialog ] ) ) - { - return; - } - } - self.zmbdialogactive = 1; - if ( isDefined( self.zmbdialoggroups[ dialog ] ) ) - { - group = dialog; - dialog = self.zmbdialoggroups[ group ]; - self.zmbdialoggroups[ group ] = undefined; - self.zmbdialoggroup = group; - } - if ( level.allowzmbannouncer ) - { - alias = game[ "zmbdialog" ][ "prefix" ] + "_" + game[ "zmbdialog" ][ dialog ]; - variant = self getleaderdialogvariant( alias ); - if ( !isDefined( variant ) ) - { - full_alias = alias; - } - else - { - full_alias = alias + "_" + variant; - } - self playlocalsound( full_alias ); - } - if ( isDefined( waittime ) ) - { - wait waittime; - } - else - { - wait 4; - } - self.zmbdialogactive = 0; - self.zmbdialoggroup = ""; - if ( self.zmbdialogqueue.size > 0 && level.allowzmbannouncer ) - { - nextdialog = self.zmbdialogqueue[0]; - for( i = 1; i < self.zmbdialogqueue.size; i++ ) - { - self.zmbdialogqueue[ i - 1 ] = self.zmbdialogqueue[ i ]; - } - self.zmbdialogqueue[ i - 1 ] = undefined; - self thread playleaderdialogonplayer( nextdialog, team ); - } -} - -getleaderdialogvariant( alias ) //checked changed to match cerberus output -{ - if ( !isDefined( alias ) ) - { - return; - } - if ( !isDefined( level.announcer_dialog ) ) - { - level.announcer_dialog = []; - level.announcer_dialog_available = []; - } - num_variants = maps/mp/zombies/_zm_spawner::get_number_variants( alias ); - if ( num_variants <= 0 ) - { - return undefined; - } - for ( i = 0; i < num_variants; i++ ) - { - level.announcer_dialog[ alias ][ i ] = i; - } - level.announcer_dialog_available[ alias ] = []; - if ( level.announcer_dialog_available[ alias ].size <= 0 ) - { - level.announcer_dialog_available[ alias ] = level.announcer_dialog[ alias ]; - } - variation = random( level.announcer_dialog_available[ alias ] ); - level.announcer_dialog_available[ alias ] = arrayremovevalue( level.announcer_dialog_available[ alias ], variation ); - return variation; -} - -getroundswitchdialog( switchtype ) //checked matches cerberus output -{ - switch( switchtype ) - { - case "halftime": - return "halftime"; - case "overtime": - return "overtime"; - default: - return "side_switch"; - } -} - -getotherteam( team ) //checked matches cerberus output -{ - if ( team == "allies" ) - { - return "axis"; - } - else - { - return "allies"; - } -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_blockers.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_blockers.gsc deleted file mode 100644 index 550318b..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_blockers.gsc +++ /dev/null @@ -1,2351 +0,0 @@ -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/_demo; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_pers_upgrades_functions; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/zombies/_zm_net; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - init_blockers(); - if ( isDefined( level.quantum_bomb_register_result_func ) ) - { - [[ level.quantum_bomb_register_result_func ]]( "open_nearest_door", ::quantum_bomb_open_nearest_door_result, 35, ::quantum_bomb_open_nearest_door_validation ); - } -} - -init_blockers() //checked matches cerberus output -{ - level.exterior_goals = getstructarray( "exterior_goal", "targetname" ); - array_thread( level.exterior_goals, ::blocker_init ); - zombie_doors = getentarray( "zombie_door", "targetname" ); - if ( isDefined( zombie_doors ) ) - { - flag_init( "door_can_close" ); - array_thread( zombie_doors, ::door_init ); - } - zombie_debris = getentarray( "zombie_debris", "targetname" ); - array_thread( zombie_debris, ::debris_init ); - flag_blockers = getentarray( "flag_blocker", "targetname" ); - array_thread( flag_blockers, ::flag_blocker ); -} - -door_init() //checked changed to match cerberus output -{ - self.type = undefined; - self.purchaser = undefined; - self._door_open = 0; - targets = getentarray( self.target, "targetname" ); - if ( isDefined( self.script_flag ) && !isDefined( level.flag[ self.script_flag ] ) ) - { - if ( isDefined( self.script_flag ) ) - { - tokens = strtok( self.script_flag, "," ); - for ( i = 0; i < tokens.size; i++ ) - { - flag_init( self.script_flag ); - } - } - } - if ( !isDefined( self.script_noteworthy ) ) - { - self.script_noteworthy = "default"; - } - self.doors = []; - for ( i = 0; i < targets.size; i++ ) - { - targets[ i ] door_classify( self ); - if ( !isDefined( targets[ i ].og_origin ) ) - { - targets[ i ].og_origin = targets[ i ].origin; - targets[ i ].og_angles = targets[ i ].angles; - } - } - cost = 1000; - if ( isDefined( self.zombie_cost ) ) - { - cost = self.zombie_cost; - } - self setcursorhint( "HINT_NOICON" ); - self thread door_think(); - if ( isDefined( self.script_noteworthy ) ) - { - if ( self.script_noteworthy == "electric_door" || self.script_noteworthy == "electric_buyable_door" ) - { - if ( getDvar( "ui_gametype" ) == "zgrief" ) - { - self setinvisibletoall(); - return; - } - self sethintstring( &"ZOMBIE_NEED_POWER" ); - if ( isDefined( level.door_dialog_function ) ) - { - self thread [[ level.door_dialog_function ]](); - } - return; - } - else if ( self.script_noteworthy == "local_electric_door" ) - { - if ( getDvar( "ui_gametype" ) == "zgrief" ) - { - self setinvisibletoall(); - return; - } - self sethintstring( &"ZOMBIE_NEED_LOCAL_POWER" ); - if ( isDefined( level.door_dialog_function ) ) - { - self thread [[ level.door_dialog_function ]](); - } - return; - } - else if ( self.script_noteworthy == "kill_counter_door" ) - { - self sethintstring( &"ZOMBIE_DOOR_ACTIVATE_COUNTER", cost ); - return; - } - } - self set_hint_string( self, "default_buy_door", cost ); -} - -door_classify( parent_trig ) //checked changed to match cerberus output -{ - if ( isDefined( self.script_noteworthy ) && self.script_noteworthy == "clip" ) - { - parent_trig.clip = self; - parent_trig.script_string = "clip"; - } - else if ( !isDefined( self.script_string ) ) - { - if ( isDefined( self.script_angles ) ) - { - self.script_string = "rotate"; - } - else if ( isDefined( self.script_vector ) ) - { - self.script_string = "move"; - } - } - else if ( !isDefined( self.script_string ) ) - { - self.script_string = ""; - switch( self.script_string ) - { - case "anim": - /* - /# - assert( isDefined( self.script_animname ), "Blocker_init: You must specify a script_animname for " + self.targetname ); - #/ - /# - assert( isDefined( level.scr_anim[ self.script_animname ] ), "Blocker_init: You must define a level.scr_anim for script_anim -> " + self.script_animname ); - #/ - /# - assert( isDefined( level.blocker_anim_func ), "Blocker_init: You must define a level.blocker_anim_func" ); - #/ - */ - break; - case "counter_1s": - parent_trig.counter_1s = self; - return; - case "counter_10s": - parent_trig.counter_10s = self; - return; - case "counter_100s": - parent_trig.counter_100s = self; - return; - case "explosives": - if ( !isDefined( parent_trig.explosives ) ) - { - parent_trig.explosives = []; - } - parent_trig.explosives[ parent_trig.explosives.size ] = self; - return; - } - } - if ( self.classname == "script_brushmodel" ) - { - self disconnectpaths(); - } - parent_trig.doors[ parent_trig.doors.size ] = self; -} - -door_buy() //checked matches cerberus output -{ - self waittill( "trigger", who, force ); - if ( isDefined( level.custom_door_buy_check ) ) - { - if ( !who [[ level.custom_door_buy_check ]]( self ) ) - { - return 0; - } - } - if ( getDvarInt( "zombie_unlock_all" ) > 0 || isDefined( force ) && force ) - { - return 1; - } - if ( !who usebuttonpressed() ) - { - return 0; - } - if ( who maps/mp/zombies/_zm_utility::in_revive_trigger() ) - { - return 0; - } - if ( maps/mp/zombies/_zm_utility::is_player_valid( who ) ) - { - players = get_players(); - cost = self.zombie_cost; - if ( who maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() ) - { - cost = who maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_double_points_cost( cost ); - } - if ( self._door_open == 1 ) - { - self.purchaser = undefined; - } - else if ( who.score >= cost ) - { - who maps/mp/zombies/_zm_score::minus_to_player_score( cost, 1 ); - maps/mp/_demo::bookmark( "zm_player_door", getTime(), who ); - who maps/mp/zombies/_zm_stats::increment_client_stat( "doors_purchased" ); - who maps/mp/zombies/_zm_stats::increment_player_stat( "doors_purchased" ); - self.purchaser = who; - } - else - { - play_sound_at_pos( "no_purchase", self.doors[ 0 ].origin ); - if ( isDefined( level.custom_generic_deny_vo_func ) ) - { - who thread [[ level.custom_generic_deny_vo_func ]]( 1 ); - } - else - { - who maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "door_deny" ); - } - return 0; - } - } - if ( isDefined( level._door_open_rumble_func ) ) - { - who thread [[ level._door_open_rumble_func ]](); - } - return 1; -} - -door_delay() //checked changed to match cerberus output -{ - if ( isDefined( self.explosives ) ) - { - for ( i = 0; i < self.explosives.size; i++ ) - { - self.explosives[ i ] show(); - } - } - if ( !isDefined( self.script_int ) ) - { - self.script_int = 5; - } - all_trigs = getentarray( self.target, "target" ); - for ( i = 0; i < all_trigs.size; i++ ) - { - all_trigs[ i ] trigger_off(); - } - wait self.script_int; - for ( i = 0; i < self.script_int; i++ ) - { - /* -/# - iprintln( self.script_int - i ); -#/ - */ - wait 1; - } - if ( isDefined( self.explosives ) ) - { - for ( i = 0; i < self.explosives.size; i++ ) - { - playfx( level._effect[ "def_explosion" ], self.explosives[ i ].origin, anglesToForward( self.explosives[ i ].angles ) ); - self.explosives[ i ] hide(); - } - } -} - -door_activate( time, open, quick, use_blocker_clip_for_pathing ) //checked matches cerberus output -{ - if ( !isDefined( open ) ) - { - open = 1; - } - if ( !isDefined( time ) ) - { - time = 1; - if ( isDefined( self.script_transition_time ) ) - { - time = self.script_transition_time; - } - } - if ( isDefined( self.door_moving ) ) - { - if ( isDefined( self.script_noteworthy ) && self.script_noteworthy == "clip" || isDefined( self.script_string ) && self.script_string == "clip" ) - { - if ( !is_true( use_blocker_clip_for_pathing ) ) - { - if ( !open ) - { - return; - } - } - } - else - { - return; - } - } - self.door_moving = 1; - if ( open || !is_true( quick ) ) - { - self notsolid(); - } - if ( self.classname == "script_brushmodel" ) - { - if ( open ) - { - self connectpaths(); - } - } - if ( isDefined( self.script_noteworthy ) && self.script_noteworthy == "clip" || isDefined( self.script_string ) && self.script_string == "clip" ) - { - if ( !open ) - { - self delay_thread( time, ::self_disconnectpaths ); - wait 0.1; - self solid(); - } - return; - } - if ( isDefined( self.script_sound ) ) - { - if ( open ) - { - playsoundatposition( self.script_sound, self.origin ); - } - else - { - playsoundatposition( self.script_sound + "_close", self.origin ); - } - } - else - { - play_sound_at_pos( "door_slide_open", self.origin ); - } - scale = 1; - if ( !open ) - { - scale = -1; - } - switch( self.script_string ) - { - case "rotate": - if ( isDefined( self.script_angles ) ) - { - rot_angle = self.script_angles; - if ( !open ) - { - rot_angle = self.og_angles; - } - self rotateto( rot_angle, time, 0, 0 ); - self thread door_solid_thread(); - if ( !open ) - { - self thread disconnect_paths_when_done(); - } - } - wait randomfloat( 0.15 ); - break; - case "move": - case "slide_apart": - if ( isDefined( self.script_vector ) ) - { - vector = vectorScale( self.script_vector, scale ); - if ( time >= 0.5 ) - { - self moveto( self.origin + vector, time, time * 0.25, time * 0.25 ); - } - else - { - self moveto( self.origin + vector, time ); - } - self thread door_solid_thread(); - if ( !open ) - { - self thread disconnect_paths_when_done(); - } - } - wait randomfloat( 0.15 ); - break; - case "anim": - self [[ level.blocker_anim_func ]]( self.script_animname ); - self thread door_solid_thread_anim(); - wait randomfloat( 0.15 ); - break; - case "physics": - self thread physics_launch_door( self ); - wait 0.1; - break; - } - if ( isDefined( self.script_firefx ) ) - { - playfx( level._effect[ self.script_firefx ], self.origin ); - } -} - -kill_trapped_zombies( trigger ) //checked partially changed to match cerberus output //did not change while loop to for loop to prevent infinite loop continue bug -{ - zombies = getaiarray( level.zombie_team ); - if ( !isDefined( zombies ) ) - { - return; - } - i = 0; - while ( i < zombies.size ) - { - if ( !isDefined( zombies[ i ] ) ) - { - i++; - continue; - } - if ( zombies[ i ] istouching( trigger ) ) - { - zombies[ i ].marked_for_recycle = 1; - zombies[ i ] dodamage( zombies[ i ].health + 666, trigger.origin, self ); - wait randomfloat( 0.15 ); - } - else if ( isDefined( level.custom_trapped_zombies ) ) - { - zombies[ i ] thread [[ level.custom_trapped_zombies ]](); - wait randomfloat( 0.15 ); - } - i++; - } -} - -any_player_touching( trigger ) //checked changed to match cerberus output -{ - foreach ( player in get_players() ) - { - if ( player istouching( trigger ) ) - { - return 1; - } - wait 0.01; - } - return 0; -} - -any_player_touching_any( trigger, more_triggers ) //checked changed to match cerberus output -{ - foreach ( player in get_players() ) - { - if ( is_player_valid( player, 0, 1 ) ) - { - if ( isDefined( trigger ) && player istouching( trigger ) ) - { - return 1; - } - if ( isDefined( more_triggers ) && more_triggers.size > 0 ) - { - foreach ( trig in more_triggers ) - { - if ( isDefined( trig ) && player istouching( trig ) ) - { - return 1; - } - } - } - } - } - return 0; -} - -any_zombie_touching_any( trigger, more_triggers ) //checked changed to match cerberus output -{ - zombies = getaiarray( level.zombie_team ); - foreach ( zombie in zombies ) - { - if ( isDefined( trigger ) && zombie istouching( trigger ) ) - { - return 1; - } - if ( isDefined( more_triggers ) && more_triggers.size > 0 ) - { - foreach ( trig in more_triggers ) - { - if ( isDefined( trig ) && zombie istouching( trig ) ) - { - return 1; - } - } - } - } - return 0; -} - -wait_trigger_clear( trigger, more_triggers, end_on ) //checked matches cerberus output -{ - self endon( end_on ); - while ( any_player_touching_any( trigger, more_triggers ) || any_zombie_touching_any( trigger, more_triggers ) ) - { - wait 1; - } - /* -/# - println( "ZM BLOCKER local door trigger clear\n" ); -#/ - */ - self notify( "trigger_clear" ); -} - -waittill_door_trigger_clear_local_power_off( trigger, all_trigs ) //checked matches cerberus output -{ - self endon( "trigger_clear" ); - while ( 1 ) - { - if ( isDefined( self.local_power_on ) && self.local_power_on ) - { - self waittill( "local_power_off" ); - } - /* -/# - println( "ZM BLOCKER local door power off\n" ); -#/ - */ - self wait_trigger_clear( trigger, all_trigs, "local_power_on" ); - } -} - -waittill_door_trigger_clear_global_power_off( trigger, all_trigs ) //checked matches cerberus output -{ - self endon( "trigger_clear" ); - while ( 1 ) - { - if ( isDefined( self.power_on ) && self.power_on ) - { - self waittill( "power_off" ); - } - /* -/# - println( "ZM BLOCKER global door power off\n" ); -#/ - */ - self wait_trigger_clear( trigger, all_trigs, "power_on" ); - } -} - -waittill_door_can_close() //checked changed to match cerberus output -{ - trigger = undefined; - if ( isDefined( self.door_hold_trigger ) ) - { - trigger = getent( self.door_hold_trigger, "targetname" ); - } - all_trigs = getentarray( self.target, "target" ); - switch ( self.script_noteworthy ) - { - case "local_electric_door": - if ( isDefined( trigger ) || isDefined( all_trigs ) ) - { - self waittill_door_trigger_clear_local_power_off( trigger, all_trigs ); - self thread kill_trapped_zombies( trigger ); - } - else if ( is_true( self.local_power_on ) ) - { - self waittill( "local_power_off" ); - } - return; - case "electric_door": - if ( isDefined( trigger ) || isDefined( all_trigs ) ) - { - self waittill_door_trigger_clear_global_power_off( trigger, all_trigs ); - if ( isDefined( trigger ) ) - { - self thread kill_trapped_zombies( trigger ); - } - } - else if ( is_true( self.power_on ) ) - { - self waittill( "power_off" ); - } - return; - } -} - -door_think() //checked changed to match cerberus output -{ - self endon( "kill_door_think" ); - cost = 1000; - if ( isDefined( self.zombie_cost ) ) - { - cost = self.zombie_cost; - } - self sethintlowpriority( 1 ); - while ( 1 ) - { - switch ( self.script_noteworthy ) - { - case "local_electric_door": - if ( !is_true( self.local_power_on ) ) - { - self waittill( "local_power_on" ); - } - if ( !is_true( self._door_open ) ) - { - /* -/# - println( "ZM BLOCKER local door opened\n" ); -#/ - */ - self door_opened( cost, 1 ); - if ( !isDefined( self.power_cost ) ) - { - self.power_cost = 0; - } - self.power_cost += 200; - } - self sethintstring( "" ); - if ( is_true( level.local_doors_stay_open ) ) - { - return; - } - wait 3; - self waittill_door_can_close(); - self door_block(); - if ( is_true( self._door_open ) ) - { - /* -/# - println( "ZM BLOCKER local door closed\n" ); -#/ - */ - self door_opened( cost, 1 ); - } - self sethintstring( &"ZOMBIE_NEED_LOCAL_POWER" ); - wait 3; - continue; - case "electric_door": - if ( !is_true( self.power_on ) ) - { - self waittill( "power_on" ); - } - if ( !is_true( self._door_open ) ) - { - /* -/# - println( "ZM BLOCKER global door opened\n" ); -#/ - */ - self door_opened( cost, 1 ); - if ( !isDefined( self.power_cost ) ) - { - self.power_cost = 0; - } - self.power_cost += 200; - } - self sethintstring( "" ); - if ( is_true( level.local_doors_stay_open ) ) - { - return; - } - wait 3; - self waittill_door_can_close(); - self door_block(); - if ( is_true( self._door_open ) ) - { - /* -/# - println( "ZM BLOCKER global door closed\n" ); -#/ - */ - self door_opened( cost, 1 ); - } - self sethintstring( &"ZOMBIE_NEED_POWER" ); - wait 3; - continue; - case "electric_buyable_door": - flag_wait( "power_on" ); - self set_hint_string( self, "default_buy_door", cost ); - if ( !self door_buy() ) - { - continue; - } - break; - case "delay_door": - if ( !self door_buy() ) - { - continue; - } - self door_delay(); - break; - default: - if ( isDefined( level._default_door_custom_logic ) ) - { - self [[ level._default_door_custom_logic ]](); - break; - } - if ( !self door_buy() ) - { - continue; - } - break; - } - self door_opened( cost ); - if ( !flag( "door_can_close" ) ) - { - break; - } - } -} - -self_and_flag_wait( msg ) //checked matches cerberus output -{ - self endon( msg ); - if ( is_true( self.power_door_ignore_flag_wait ) ) - { - level waittill( "forever" ); - } - else - { - flag_wait( msg ); - } -} - -door_block() //checked changed to match cerberus output -{ - if ( isDefined( self.doors ) ) - { - for ( i = 0; i < self.doors.size; i++ ) - { - if ( isDefined( self.doors[ i ].script_noteworthy ) && self.doors[ i ].script_noteworthy == "clip" || isDefined( self.doors[ i ].script_string ) && self.doors[ i ].script_string == "clip" ) - { - self.doors[ i ] solid(); - } - } - } -} - -door_opened( cost, quick_close ) //checked partially changed to match cerberus output //did not foreach to prevent infinite loop with continues -{ - if ( is_true( self.door_is_moving ) ) - { - return; - } - self.has_been_opened = 1; - all_trigs = getentarray( self.target, "target" ); - self.door_is_moving = 1; - j = 0; - while ( j < all_trigs.size ) - { - all_trigs[ j ].door_is_moving = 1; - all_trigs[ j ] trigger_off(); - all_trigs[ j ].has_been_opened = 1; - if ( !isDefined( all_trigs[ j ]._door_open ) || all_trigs[ j ]._door_open == 0 ) - { - all_trigs[ j ]._door_open = 1; - all_trigs[ j ] notify( "door_opened" ); - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "door_open" ); - } - else - { - all_trigs[ j ]._door_open = 0; - } - if ( isDefined( all_trigs[ j ].script_flag ) && all_trigs[ j ]._door_open == 1 ) - { - tokens = strtok( all_trigs[ j ].script_flag, "," ); - for ( i = 0; i < tokens.size; i++ ) - { - flag_set( tokens[ i ] ); - } - } - else if ( isDefined( all_trigs[ j ].script_flag ) && all_trigs[ j ]._door_open == 0 ) - { - tokens = strtok( all_trigs[ j ].script_flag, "," ); - for ( i = 0; i < tokens.size; i++ ) - { - flag_clear( tokens[ i ] ); - } - } - if ( is_true( quick_close ) ) - { - all_trigs[ j ] set_hint_string( all_trigs[ j ], "" ); - } - else if ( all_trigs[ j ]._door_open == 1 && flag( "door_can_close" ) ) - { - all_trigs[ j ] set_hint_string( all_trigs[ j ], "default_buy_door_close" ); - } - else if ( all_trigs[ j ]._door_open == 0 ) - { - all_trigs[ j ] set_hint_string( all_trigs[ j ], "default_buy_door", cost ); - } - j++; - } - level notify( "door_opened" ); - if ( isDefined( self.doors ) ) - { - is_script_model_door = 0; - have_moving_clip_for_door = 0; - use_blocker_clip_for_pathing = 0; - i = 0; - while ( i < self.doors.size ) - { - if ( is_true( door.ignore_use_blocker_clip_for_pathing_check ) ) - { - i++; - continue; - } - if ( door.classname == "script_model" ) - { - is_script_model_door = 1; - } - if ( door.classname == "script_brushmodel" && isDefined( door.script_noteworthy ) && door.script_noteworthy != "clip" || !isDefined( door.script_string ) && door.script_string != "clip" ) - { - have_moving_clip_for_door = 1; - } - i++; - } - if ( is_script_model_door && !have_moving_clip_for_door ) - { - use_blocker_clip_for_pathing = 1; - } - for ( i = 0; i < self.doors.size; i++ ) - { - self.doors[ i ] thread door_activate( self.doors[ i ].script_transition_time, self._door_open, quick_close, use_blocker_clip_for_pathing ); - } - if ( self.doors.size ) - { - play_sound_at_pos( "purchase", self.doors[ 0 ].origin ); - } - } - level.active_zone_names = maps/mp/zombies/_zm_zonemgr::get_active_zone_names(); - wait 1; - self.door_is_moving = 0; - foreach ( trig in all_trigs ) - { - trig.door_is_moving = 0; - } - if ( is_true( quick_close ) ) - { - for ( i = 0; i < all_trigs.size; i++ ) - { - all_trigs[ i ] trigger_on(); - } - return; - } - if ( flag( "door_can_close" ) ) - { - wait 2; - for ( i = 0; i < all_trigs.size; i++ ) - { - all_trigs[ i ] trigger_on(); - } - } -} - -physics_launch_door( door_trig ) //checked matches cerberus output -{ - vec = vectorScale( vectornormalize( self.script_vector ), 10 ); - self rotateroll( 5, 0.05 ); - wait 0.05; - self moveto( self.origin + vec, 0.1 ); - self waittill( "movedone" ); - self physicslaunch( self.origin, self.script_vector * 300 ); - wait 60; - self delete(); -} - -door_solid_thread() //checked changed to match cerberus output -{ - self waittill_either( "rotatedone", "movedone" ); - self.door_moving = undefined; - while ( 1 ) - { - players = get_players(); - player_touching = 0; - for ( i = 0; i < players.size; i++ ) - { - if ( players[ i ] istouching( self ) ) - { - player_touching = 1; - break; - } - } - if ( !player_touching ) - { - self solid(); - return; - } - wait 1; - } -} - -door_solid_thread_anim() //checked changed to match cerberus output -{ - self waittillmatch( "door_anim" ); - return "end"; - self.door_moving = undefined; - while ( 1 ) - { - players = get_players(); - player_touching = 0; - for ( i = 0; i < players.size; i++ ) - { - if ( players[ i ] istouching( self ) ) - { - player_touching = 1; - break; - } - } - if ( !player_touching ) - { - self solid(); - return; - } - wait 1; - } -} - -disconnect_paths_when_done() //checked matches cerberus output -{ - self waittill_either( "rotatedone", "movedone" ); - self disconnectpaths(); -} - -self_disconnectpaths() //checked matches cerberus output -{ - self disconnectpaths(); -} - -debris_init() //checked matches cerberus output -{ - cost = 1000; - if ( isDefined( self.zombie_cost ) ) - { - cost = self.zombie_cost; - } - self set_hint_string( self, "default_buy_debris", cost ); - self setcursorhint( "HINT_NOICON" ); - if ( isDefined( self.script_flag ) && !isDefined( level.flag[ self.script_flag ] ) ) - { - flag_init( self.script_flag ); - } - self thread debris_think(); -} - -debris_think() //partially changed to match cerberus output //did not change while loop to for loop to prevent infinite loop bug due to continue -{ - if ( isDefined( level.custom_debris_function ) ) - { - self [[ level.custom_debris_function ]](); - } - while ( 1 ) - { - self waittill( "trigger", who, force ); - if ( getDvarInt( "zombie_unlock_all" ) > 0 || is_true( force ) ) - { - } - else - { - if ( !who usebuttonpressed() ) - { - continue; - } - if ( who maps/mp/zombies/_zm_utility::in_revive_trigger() ) - { - continue; - } - } - if ( maps/mp/zombies/_zm_utility::is_player_valid( who ) ) - { - players = get_players(); - if ( getDvarInt( "zombie_unlock_all" ) > 0 ) - { - } - else if ( who.score >= self.zombie_cost ) - { - who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost ); - maps/mp/_demo::bookmark( "zm_player_door", getTime(), who ); - who maps/mp/zombies/_zm_stats::increment_client_stat( "doors_purchased" ); - who maps/mp/zombies/_zm_stats::increment_player_stat( "doors_purchased" ); - } - else - { - play_sound_at_pos( "no_purchase", self.origin ); - who maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "door_deny" ); - continue; - } - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", who.name, who.score, level.round_number, self.zombie_cost, self.script_flag, self.origin, "door" ); - junk = getentarray( self.target, "targetname" ); - if ( isDefined( self.script_flag ) ) - { - tokens = strtok( self.script_flag, "," ); - for ( i = 0; i < tokens.size; i++ ) - { - flag_set( tokens[ i ] ); - } - } - play_sound_at_pos( "purchase", self.origin ); - level notify( "junk purchased" ); - move_ent = undefined; - clip = undefined; - i = 0; - while ( i < junk.size ) - { - junk[ i ] connectpaths(); - if ( isDefined( junk[ i ].script_noteworthy ) ) - { - if ( junk[ i ].script_noteworthy == "clip" ) - { - clip = junk[ i ]; - i++; - continue; - } - } - struct = undefined; - if ( isDefined( junk[ i ].script_linkto ) ) - { - struct = getstruct( junk[ i ].script_linkto, "script_linkname" ); - if ( isDefined( struct ) ) - { - move_ent = junk[ i ]; - junk[ i ] thread debris_move( struct ); - } - else - { - junk[ i ] delete(); - } - } - else - { - junk[ i ] delete(); - } - i++; - } - all_trigs = getentarray( self.target, "target" ); - for ( i = 0; i < all_trigs.size; i++ ) - { - all_trigs[ i ] delete(); - } - if ( isDefined( clip ) ) - { - if ( isDefined( move_ent ) ) - { - move_ent waittill( "movedone" ); - } - clip delete(); - } - break; - } - } -} - -debris_move( struct ) //checked changed to match cerberus output -{ - self script_delay(); - self notsolid(); - self play_sound_on_ent( "debris_move" ); - playsoundatposition( "zmb_lightning_l", self.origin ); - if ( isDefined( self.script_firefx ) ) - { - playfx( level._effect[ self.script_firefx ], self.origin ); - } - if ( isDefined( self.script_noteworthy ) ) - { - if ( self.script_noteworthy == "jiggle" ) - { - num = randomintrange( 3, 5 ); - og_angles = self.angles; - for ( i = 0; i < num; i++ ) - { - angles = og_angles + ( -5 + randomfloat( 10 ), -5 + randomfloat( 10 ), -5 + randomfloat( 10 ) ); - time = randomfloatrange( 0.1, 0.4 ); - self rotateto( angles, time ); - wait ( time - 0.05 ); - } - } - } - time = 0.5; - if ( isDefined( self.script_transition_time ) ) - { - time = self.script_transition_time; - } - self moveto( struct.origin, time, time * 0.5 ); - self rotateto( struct.angles, time * 0.75 ); - self waittill( "movedone" ); - if ( isDefined( self.script_fxid ) ) - { - playfx( level._effect[ self.script_fxid ], self.origin ); - playsoundatposition( "zmb_zombie_spawn", self.origin ); - } - self delete(); -} - -blocker_disconnect_paths( start_node, end_node, two_way ) //checked matches cerberus output -{ -} - -blocker_connect_paths( start_node, end_node, two_way ) //checked matches cerberus output -{ -} - -blocker_init() //checked partially changed to match cerberus output //did not change while loop to for loop to prevent infinite loop caused by continue -{ - if ( !isDefined( self.target ) ) - { - return; - } - targets = getentarray( self.target, "targetname" ); - self.barrier_chunks = []; - j = 0; - while ( j < targets.size ) - { - if ( targets[ j ] iszbarrier() ) - { - if ( isDefined( level.zbarrier_override ) ) - { - self thread [[ level.zbarrier_override ]]( targets[ j ] ); - j++; - continue; - } - self.zbarrier = targets[ j ]; - if ( is_true( level.zbarrier_script_string_sets_collision ) ) - { - m_collision = "p6_anim_zm_barricade_board_collision"; - } - else - { - m_collision = "p6_anim_zm_barricade_board_collision"; - } - precachemodel( m_collision ); - self.zbarrier setzbarriercolmodel( m_collision ); - self.zbarrier.chunk_health = []; - for ( i = 0; i < self.zbarrier getnumzbarrierpieces(); i++ ) - { - self.zbarrier.chunk_health[ i ] = 0; - } - } - if ( isDefined( targets[ j ].script_string ) && targets[ j ].script_string == "rock" ) - { - targets[ j ].material = "rock"; - } - if ( isDefined( targets[ j ].script_parameters ) ) - { - if ( targets[ j ].script_parameters == "grate" ) - { - if ( isDefined( targets[ j ].script_noteworthy ) ) - { - if ( targets[ j ].script_noteworthy == "2" || targets[ j ].script_noteworthy == "3" || targets[ j ].script_noteworthy == "4" || targets[ j ].script_noteworthy == "5" || targets[ j ].script_noteworthy == "6" ) - { - targets[ j ] hide(); - /* -/# - iprintlnbold( " Hide " ); -#/ - */ - } - } - } - else if ( targets[ j ].script_parameters == "repair_board" ) - { - targets[ j ].unbroken_section = getent( targets[ j ].target, "targetname" ); - if ( isDefined( targets[ j ].unbroken_section ) ) - { - targets[ j ].unbroken_section linkto( targets[ j ] ); - targets[ j ] hide(); - targets[ j ] notsolid(); - targets[ j ].unbroken = 1; - if ( isDefined( targets[ j ].unbroken_section.script_noteworthy ) && targets[ j ].unbroken_section.script_noteworthy == "glass" ) - { - targets[ j ].material = "glass"; - targets[ j ] thread destructible_glass_barricade( targets[ j ].unbroken_section, self ); - } - else if ( isDefined( targets[ j ].unbroken_section.script_noteworthy ) && targets[ j ].unbroken_section.script_noteworthy == "metal" ) - { - targets[ j ].material = "metal"; - } - } - } - else if ( targets[ j ].script_parameters == "barricade_vents" ) - { - targets[ j ].material = "metal_vent"; - } - } - if ( isDefined( targets[ j ].targetname ) ) - { - if ( targets[ j ].targetname == "auto2" ) - { - } - } - targets[ j ] update_states( "repaired" ); - targets[ j ].destroyed = 0; - targets[ j ] show(); - targets[ j ].claimed = 0; - targets[ j ].anim_grate_index = 0; - targets[ j ].og_origin = targets[ j ].origin; - targets[ j ].og_angles = targets[ j ].angles; - self.barrier_chunks[ self.barrier_chunks.size ] = targets[ j ]; - j++; - } - target_nodes = getnodearray( self.target, "targetname" ); - for ( j = 0; j < target_nodes.size; j++ ) - { - if ( target_nodes[ j ].type == "Begin" ) - { - self.neg_start = target_nodes[ j ]; - if ( isDefined( self.neg_start.target ) ) - { - self.neg_end = getnode( self.neg_start.target, "targetname" ); - } - blocker_disconnect_paths( self.neg_start, self.neg_end ); - } - } - if ( isDefined( self.zbarrier ) ) - { - if ( isDefined( self.barrier_chunks ) ) - { - for ( i = 0; i < self.barrier_chunks.size; i++ ) - { - self.barrier_chunks[ i ] delete(); - } - self.barrier_chunks = []; - } - } - if ( isDefined( self.zbarrier ) && should_delete_zbarriers() ) - { - self.zbarrier delete(); - self.zbarrier = undefined; - return; - } - self blocker_attack_spots(); - self.trigger_location = getstruct( self.target, "targetname" ); - self thread blocker_think(); -} - -should_delete_zbarriers() //checked matches cerberus output -{ - gametype = getDvar( "ui_gametype" ); - if ( !maps/mp/zombies/_zm_utility::is_classic() && !maps/mp/zombies/_zm_utility::is_standard() && gametype != "zgrief" ) - { - return 1; - } - return 0; -} - -destructible_glass_barricade( unbroken_section, node ) //checked matches cerberus output -{ - unbroken_section setcandamage( 1 ); - unbroken_section.health = 99999; - unbroken_section waittill( "damage", amount, who ); - if ( maps/mp/zombies/_zm_utility::is_player_valid( who ) || who maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - self thread maps/mp/zombies/_zm_spawner::zombie_boardtear_offset_fx_horizontle( self, node ); - level thread remove_chunk( self, node, 1 ); - self update_states( "destroyed" ); - self notify( "destroyed" ); - self.unbroken = 0; - } -} - -blocker_attack_spots() //checked changed to match cerberus output //may need to review order of operations -{ - spots = []; - numslots = self.zbarrier getzbarriernumattackslots(); - numslots = int( max( numslots, 1 ) ); - if ( numslots % 2 ) - { - spots[ spots.size ] = groundpos_ignore_water_new( self.zbarrier.origin + vectorScale( ( 0, 0, 1 ), 60 ) ); - } - if ( numslots > 1 ) - { - reps = floor( numslots / 2 ); - slot = 1; - for ( i = 0; i < reps; i++ ) - { - offset = self.zbarrier getzbarrierattackslothorzoffset() * ( i + 1 ); - spots[ spots.size ] = groundpos_ignore_water_new( spots[ 0 ] + ( anglesToRight( self.angles ) * offset ) + vectorScale( ( 0, 0, 1 ), 60 ) ); - slot++; - if ( slot < numslots ) - { - spots[ spots.size ] = groundpos_ignore_water_new( spots[ 0 ] + ( anglesToRight( self.angles ) * ( offset * -1 ) ) + vectorScale( ( 0, 0, 1 ), 60 ) ); - slot++; - } - } - } - taken = []; - for ( i = 0; i < spots.size; i++ ) - { - taken[ i ] = 0; - } - self.attack_spots_taken = taken; - self.attack_spots = spots; - /* -/# - self thread debug_attack_spots_taken(); -#/ - */ -} - -blocker_choke() //checked matches cerberus output -{ - level._blocker_choke = 0; - level endon( "stop_blocker_think" ); - while ( 1 ) - { - wait 0.05; - level._blocker_choke = 0; - } -} - -blocker_think() //checked changed to match cerberus output -{ - level endon( "stop_blocker_think" ); - if ( !isDefined( level._blocker_choke ) ) - { - level thread blocker_choke(); - } - use_choke = 0; - if ( isDefined( level._use_choke_blockers ) && level._use_choke_blockers == 1 ) - { - use_choke = 1; - } - while ( 1 ) - { - wait 0.5; - if ( use_choke ) - { - if ( level._blocker_choke > 3 ) - { - wait 0.05; - } - } - level._blocker_choke++; - if ( all_chunks_intact( self, self.barrier_chunks ) ) - { - continue; - } - if ( no_valid_repairable_boards( self, self.barrier_chunks ) ) - { - continue; - } - self blocker_trigger_think(); - } -} - -player_fails_blocker_repair_trigger_preamble( player, players, trigger, hold_required ) //checked matches cerberus output -{ - if ( !isDefined( trigger ) ) - { - return 1; - } - if ( !maps/mp/zombies/_zm_utility::is_player_valid( player ) ) - { - return 1; - } - if ( players.size == 1 && isDefined( players[ 0 ].intermission ) && players[ 0 ].intermission == 1 ) - { - return 1; - } - if ( hold_required && !player usebuttonpressed() ) - { - return 1; - } - if ( !hold_required && !player use_button_held() ) - { - return 1; - } - if ( player maps/mp/zombies/_zm_utility::in_revive_trigger() ) - { - return 1; - } - return 0; -} - -has_blocker_affecting_perk() //checked matches cerberus output -{ - has_perk = undefined; - if ( self hasperk( "specialty_fastreload" ) ) - { - has_perk = "specialty_fastreload"; - } - return has_perk; -} - -do_post_chunk_repair_delay( has_perk ) //checked matches cerberus output -{ - if ( !self script_delay() ) - { - wait 1; - } -} - -handle_post_board_repair_rewards( cost, zbarrier ) //checked matches cerberus output -{ - self maps/mp/zombies/_zm_stats::increment_client_stat( "boards" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "boards" ); - if ( isDefined( self.pers[ "boards" ] ) && ( self.pers[ "boards" ] % 10 ) == 0 ) - { - self thread do_player_general_vox( "general", "reboard", 90 ); - } - self maps/mp/zombies/_zm_pers_upgrades_functions::pers_boards_updated( zbarrier ); - self.rebuild_barrier_reward += cost; - if ( self.rebuild_barrier_reward < level.zombie_vars[ "rebuild_barrier_cap_per_round" ] ) - { - self maps/mp/zombies/_zm_score::player_add_points( "rebuild_board", cost ); - self play_sound_on_ent( "purchase" ); - } - if ( isDefined( self.board_repair ) ) - { - self.board_repair += 1; - } -} - -blocker_unitrigger_think() //checked matches cerberus output -{ - self endon( "kill_trigger" ); - while ( 1 ) - { - self waittill( "trigger", player ); - self.stub.trigger_target notify( "trigger", player ); - } -} - -blocker_trigger_think() //checked changed to match cerberus output -{ - self endon( "blocker_hacked" ); - if ( is_true( level.no_board_repair ) ) - { - return; - } - /* -/# - println( "ZM >> TRIGGER blocker_trigger_think " ); -#/ - */ - level endon( "stop_blocker_think" ); - cost = 10; - if ( isDefined( self.zombie_cost ) ) - { - cost = self.zombie_cost; - } - original_cost = cost; - if ( !isDefined( self.unitrigger_stub ) ) - { - radius = 94.21; - height = 94.21; - if ( isDefined( self.trigger_location ) ) - { - trigger_location = self.trigger_location; - } - else - { - trigger_location = self; - } - if ( isDefined( trigger_location.radius ) ) - { - radius = trigger_location.radius; - } - if ( isDefined( trigger_location.height ) ) - { - height = trigger_location.height; - } - trigger_pos = groundpos( trigger_location.origin ) + vectorScale( ( 0, 0, 1 ), 4 ); - self.unitrigger_stub = spawnstruct(); - self.unitrigger_stub.origin = trigger_pos; - self.unitrigger_stub.radius = radius; - self.unitrigger_stub.height = height; - self.unitrigger_stub.script_unitrigger_type = "unitrigger_radius"; - self.unitrigger_stub.hint_string = get_hint_string( self, "default_reward_barrier_piece" ); - self.unitrigger_stub.cursor_hint = "HINT_NOICON"; - self.unitrigger_stub.trigger_target = self; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::blocker_unitrigger_think ); - maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); - if ( !isDefined( trigger_location.angles ) ) - { - trigger_location.angles = ( 0, 0, 0 ); - } - self.unitrigger_stub.origin = ( groundpos( trigger_location.origin ) + vectorScale( ( 0, 0, 1 ), 4 ) ) + ( anglesToForward( trigger_location.angles ) * -11 ); - } - self thread trigger_delete_on_repair(); - thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::blocker_unitrigger_think ); - /* -/# - if ( getDvarInt( "zombie_debug" ) > 0 ) - { - thread debug_blocker( trigger_pos, radius, height ); -#/ - } - */ - while ( 1 ) - { - self waittill( "trigger", player ); - has_perk = player has_blocker_affecting_perk(); - if ( all_chunks_intact( self, self.barrier_chunks ) ) - { - self notify( "all_boards_repaired" ); - return; - } - if ( no_valid_repairable_boards( self, self.barrier_chunks ) ) - { - self notify( "no valid boards" ); - return; - } - if ( isDefined( level._zm_blocker_trigger_think_return_override ) ) - { - if ( self [[ level._zm_blocker_trigger_think_return_override ]]( player ) ) - { - return; - } - } - while ( 1 ) - { - players = get_players(); - if ( player_fails_blocker_repair_trigger_preamble( player, players, self.unitrigger_stub.trigger, 0 ) ) - { - break; - } - if ( isDefined( self.zbarrier ) ) - { - chunk = get_random_destroyed_chunk( self, self.barrier_chunks ); - self thread replace_chunk( self, chunk, has_perk, is_true( player.pers_upgrades_awarded[ "board" ] ) ); - } - else - { - chunk = get_random_destroyed_chunk( self, self.barrier_chunks ); - if ( isDefined( chunk.script_parameter ) || chunk.script_parameters == "repair_board" || chunk.script_parameters == "barricade_vents" ) - { - if ( isDefined( chunk.unbroken_section ) ) - { - chunk show(); - chunk solid(); - chunk.unbroken_section self_delete(); - } - } - else - { - chunk show(); - } - if ( !isDefined( chunk.script_parameters ) || chunk.script_parameters == "board" || chunk.script_parameters == "repair_board" || chunk.script_parameters == "barricade_vents" ) - { - if ( !is_true( level.use_clientside_board_fx ) ) - { - if ( !isDefined( chunk.material ) || isDefined( chunk.material ) && chunk.material != "rock" ) - { - chunk play_sound_on_ent( "rebuild_barrier_piece" ); - } - playsoundatposition( "zmb_cha_ching", ( 0, 0, 0 ) ); - } - } - if ( chunk.script_parameters == "bar" ) - { - chunk play_sound_on_ent( "rebuild_barrier_piece" ); - playsoundatposition( "zmb_cha_ching", ( 0, 0, 0 ) ); - } - if ( isDefined( chunk.script_parameters ) ) - { - if ( chunk.script_parameters == "bar" ) - { - if ( isDefined( chunk.script_noteworthy ) ) - { - if ( chunk.script_noteworthy == "5" ) - { - chunk hide(); - break; - } - else if ( chunk.script_noteworthy == "3" ) - { - chunk hide(); - } - } - } - } - self thread replace_chunk( self, chunk, has_perk, is_true( player.pers_upgrades_awarded[ "board" ] ) ); - } - if ( isDefined( self.clip ) ) - { - self.clip enable_trigger(); - self.clip disconnectpaths(); - } - else - { - blocker_disconnect_paths( self.neg_start, self.neg_end ); - } - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, original_cost, self.target, self.origin, "repair" ); - self do_post_chunk_repair_delay( has_perk ); - if ( !is_player_valid( player ) ) - { - break; - } - player handle_post_board_repair_rewards( cost, self ); - if ( all_chunks_intact( self, self.barrier_chunks ) ) - { - self notify( "all_boards_repaired" ); - return; - } - if ( no_valid_repairable_boards( self, self.barrier_chunks ) ) - { - self notify( "no valid boards" ); - return; - } - } - } -} - -random_destroyed_chunk_show() //checked matches cerberus output -{ - wait 0.5; - self show(); -} - -door_repaired_rumble_n_sound() //checked changed to match cerberus output -{ - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - if ( distance( players[ i ].origin, self.origin ) < 150 ) - { - if ( isalive( players[ i ] ) ) - { - players[ i ] thread board_completion(); - } - } - } -} - -board_completion() //checked matches cerberus output -{ - self endon( "disconnect" ); -} - -trigger_delete_on_repair() //checked changed to match cerberus output -{ - while ( 1 ) - { - self waittill_either( "all_boards_repaired", "no valid boards" ); - maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); - break; - } -} - -rebuild_barrier_reward_reset() //checked matches cerberus output -{ - self.rebuild_barrier_reward = 0; -} - -remove_chunk( chunk, node, destroy_immediately, zomb ) //checked changed to match cerberus output -{ - chunk update_states( "mid_tear" ); - if ( isDefined( chunk.script_parameters ) ) - { - if ( chunk.script_parameters == "board" || chunk.script_parameters == "repair_board" || chunk.script_parameters == "barricade_vents" ) - { - chunk thread zombie_boardtear_audio_offset( chunk ); - } - } - if ( isDefined( chunk.script_parameters ) ) - { - if ( chunk.script_parameters == "bar" ) - { - chunk thread zombie_bartear_audio_offset( chunk ); - } - } - chunk notsolid(); - fx = "wood_chunk_destory"; - if ( isDefined( self.script_fxid ) ) - { - fx = self.script_fxid; - } - if ( is_true( chunk.script_moveoverride ) ) - { - chunk hide(); - } - if ( isDefined( chunk.script_parameters ) && chunk.script_parameters == "bar" ) - { - if ( isDefined( chunk.script_noteworthy ) && chunk.script_noteworthy == "4" ) - { - ent = spawn( "script_origin", chunk.origin ); - ent.angles = node.angles + vectorScale( ( 0, 1, 0 ), 180 ); - dist = 100; - if ( isDefined( chunk.script_move_dist ) ) - { - dist_max = chunk.script_move_dist - 100; - dist = 100 + randomint( dist_max ); - } - else - { - dist = 100 + randomint( 100 ); - } - dest = ent.origin + ( anglesToForward( ent.angles ) * dist ); - trace = bullettrace( dest + vectorScale( ( 0, 0, 1 ), 16 ), dest + vectorScale( ( 0, 0, -1 ), 200 ), 0, undefined ); - if ( trace[ "fraction" ] == 1 ) - { - dest += vectorScale( ( 0, 0, -1 ), 200 ); - } - else - { - dest = trace[ "position" ]; - } - chunk linkto( ent ); - time = ent fake_physicslaunch( dest, 300 + randomint( 100 ) ); - if ( randomint( 100 ) > 40 ) - { - ent rotatepitch( 180, time * 0.5 ); - } - else - { - ent rotatepitch( 90, time, time * 0.5 ); - } - wait time; - chunk hide(); - wait 0.1; - ent delete(); - } - else - { - ent = spawn( "script_origin", chunk.origin ); - ent.angles = node.angles + vectorScale( ( 0, 1, 0 ), 180 ); - dist = 100; - if ( isDefined( chunk.script_move_dist ) ) - { - dist_max = chunk.script_move_dist - 100; - dist = 100 + randomint( dist_max ); - } - else - { - dist = 100 + randomint( 100 ); - } - dest = ent.origin + ( anglesToForward( ent.angles ) * dist ); - trace = bullettrace( dest + vectorScale( ( 0, 0, 1 ), 16 ), dest + vectorScale( ( 0, 0, -1 ), 200 ), 0, undefined ); - if ( trace[ "fraction" ] == 1 ) - { - dest += vectorScale( ( 0, 0, -1 ), 200 ); - } - else - { - dest = trace[ "position" ]; - } - chunk linkto( ent ); - time = ent fake_physicslaunch( dest, 260 + randomint( 100 ) ); - if ( randomint( 100 ) > 40 ) - { - ent rotatepitch( 180, time * 0,5 ); - } - else - { - ent rotatepitch( 90, time, time * 0,5 ); - } - wait time; - chunk hide(); - wait 0.1; - ent delete(); - } - chunk update_states( "destroyed" ); - chunk notify( "destroyed" ); - } - if ( isDefined( chunk.script_parameters ) && chunk.script_parameters == "board" || isDefined( chunk.script_parameters ) && chunk.script_parameters == "repair_board" || isDefined( chunk.script_parameters ) && chunk.script_parameters == "barricade_vents" ) - { - ent = spawn( "script_origin", chunk.origin ); - ent.angles = node.angles + vectorScale( ( 0, 1, 0 ), 180 ); - dist = 100; - if ( isDefined( chunk.script_move_dist ) ) - { - dist_max = chunk.script_move_dist - 100; - dist = 100 + randomint( dist_max ); - } - else - { - dist = 100 + randomint( 100 ); - } - dest = ent.origin + ( anglesToForward( ent.angles ) * dist ); - trace = bullettrace( dest + vectorScale( ( 0, 0, 1 ), 16 ), dest + vectorScale( ( 0, 0, -1 ), 200 ), 0, undefined ); - if ( trace[ "fraction" ] == 1 ) - { - dest += vectorScale( ( 0, 0, -1 ), 200 ); - } - else - { - dest = trace[ "position" ]; - } - chunk linkto( ent ); - time = ent fake_physicslaunch( dest, 200 + randomint( 100 ) ); - if ( isDefined( chunk.unbroken_section ) ) - { - if ( !isDefined( chunk.material ) || chunk.material != "metal" ) - { - chunk.unbroken_section self_delete(); - } - } - if ( randomint( 100 ) > 40 ) - { - ent rotatepitch( 180, time * 0.5 ); - } - else - { - ent rotatepitch( 90, time, time * 0.5 ); - } - wait time; - if ( isDefined( chunk.unbroken_section ) ) - { - if ( isDefined( chunk.material ) && chunk.material == "metal" ) - { - chunk.unbroken_section self_delete(); - } - } - chunk hide(); - wait 0.1; - ent delete(); - chunk update_states( "destroyed" ); - chunk notify( "destroyed" ); - } - if ( isDefined( chunk.script_parameters ) && chunk.script_parameters == "grate" ) - { - if ( isDefined( chunk.script_noteworthy ) && chunk.script_noteworthy == "6" ) - { - ent = spawn( "script_origin", chunk.origin ); - ent.angles = node.angles + vectorScale( ( 0, 1, 0 ), 180 ); - dist = 100 + randomint( 100 ); - dest = ent.origin + ( anglesToForward( ent.angles ) * dist ); - trace = bullettrace( dest + vectorScale( ( 0, 0, 1 ), 16 ), dest + vectorScale( ( 0, 0, -1 ), 200 ), 0, undefined ); - if ( trace[ "fraction" ] == 1 ) - { - dest += vectorScale( ( 0, 0, -1 ), 200 ); - } - else - { - dest = trace[ "position" ]; - } - chunk linkto( ent ); - time = ent fake_physicslaunch( dest, 200 + randomint( 100 ) ); - if ( randomint( 100 ) > 40 ) - { - ent rotatepitch( 180, time * 0.5 ); - } - else - { - ent rotatepitch( 90, time, time * 0.5 ); - } - wait time; - chunk hide(); - ent delete(); - chunk update_states( "destroyed" ); - chunk notify( "destroyed" ); - return; - } - else - { - chunk hide(); - chunk update_states( "destroyed" ); - chunk notify( "destroyed" ); - } - } -} - -remove_chunk_rotate_grate( chunk ) //checked changed to match cerberus output -{ - if ( isDefined( chunk.script_parameters ) && chunk.script_parameters == "grate" ) - { - chunk vibrate( vectorScale( ( 0, 1, 0 ), 270 ), 0.2, 0.4, 0.4 ); - return; - } -} - -zombie_boardtear_audio_offset( chunk ) //checked changed to match cerberus output -{ - if ( isDefined( chunk.material ) && !isDefined( chunk.already_broken ) ) - { - chunk.already_broken = 0; - } - if ( isDefined( chunk.material ) && chunk.material == "glass" && chunk.already_broken == 0 ) - { - chunk playsound( "zmb_break_glass_barrier" ); - wait randomfloatrange( 0.3, 0.6 ); - chunk playsound( "zmb_break_glass_barrier" ); - chunk.already_broken = 1; - } - else if ( isDefined( chunk.material ) && chunk.material == "metal" && chunk.already_broken == 0 ) - { - chunk playsound( "grab_metal_bar" ); - wait randomfloatrange( 0.3, 0.6 ); - chunk playsound( "break_metal_bar" ); - chunk.already_broken = 1; - } - else if ( isDefined( chunk.material ) && chunk.material == "rock" ) - { - if ( !is_true( level.use_clientside_rock_tearin_fx ) ) - { - chunk playsound( "zmb_break_rock_barrier" ); - wait randomfloatrange( 0.3, 0.6 ); - chunk playsound( "zmb_break_rock_barrier" ); - } - chunk.already_broken = 1; - } - else if ( isDefined( chunk.material ) && chunk.material == "metal_vent" ) - { - if ( !is_true( level.use_clientside_board_fx ) ) - { - chunk playsound( "evt_vent_slat_remove" ); - } - } - else if ( !is_true( level.use_clientside_board_fx ) ) - { - chunk play_sound_on_ent( "break_barrier_piece" ); - wait randomfloatrange( 0.3, 0.6 ); - chunk play_sound_on_ent( "break_barrier_piece" ); - } - chunk.already_broken = 1; -} - -zombie_bartear_audio_offset( chunk ) //checked matches cerberus output -{ - chunk play_sound_on_ent( "grab_metal_bar" ); - wait randomfloatrange( 0.3, 0.6 ); - chunk play_sound_on_ent( "break_metal_bar" ); - wait randomfloatrange( 1, 1.3 ); - chunk play_sound_on_ent( "drop_metal_bar" ); -} - -ensure_chunk_is_back_to_origin( chunk ) //checked matches cerberus output -{ - if ( chunk.origin != chunk.og_origin ) - { - chunk notsolid(); - chunk waittill( "movedone" ); - } -} - -replace_chunk( barrier, chunk, perk, upgrade, via_powerup ) //checked changed to match cerberus output -{ - if ( !isDefined( barrier.zbarrier ) ) - { - chunk update_states( "mid_repair" ); - /* -/# - assert( isDefined( chunk.og_origin ) ); -#/ -/# - assert( isDefined( chunk.og_angles ) ); -#/ - */ - sound = "rebuild_barrier_hover"; - if ( isDefined( chunk.script_presound ) ) - { - sound = chunk.script_presound; - } - } - has_perk = 0; - if ( isDefined( perk ) ) - { - has_perk = 1; - } - if ( !isDefined( via_powerup ) && isDefined( sound ) ) - { - play_sound_at_pos( sound, chunk.origin ); - } - if ( upgrade ) - { - barrier.zbarrier zbarrierpieceuseupgradedmodel( chunk ); - barrier.zbarrier.chunk_health[ chunk ] = barrier.zbarrier getupgradedpiecenumlives( chunk ); - } - else - { - barrier.zbarrier zbarrierpieceusedefaultmodel( chunk ); - barrier.zbarrier.chunk_health[ chunk ] = 0; - } - scalar = 1; - if ( has_perk ) - { - if ( perk == "speciality_fastreload" ) - { - scalar = 0.31; - } - else if ( perk == "speciality_fastreload_upgrade" ) - { - scalar = 0.2112; - } - } - barrier.zbarrier showzbarrierpiece( chunk ); - barrier.zbarrier setzbarrierpiecestate( chunk, "closing", scalar ); - waitduration = barrier.zbarrier getzbarrierpieceanimlengthforstate( chunk, "closing", scalar ); - wait waitduration; -} - -open_all_zbarriers() //checked partially changed to match cerberus output //did not change while loop to for loop because of infinite continue loop bug -{ - i = 0; - while ( i < level.exterior_goals.size ) - { - if ( isDefined( level.exterior_goals[ i ].zbarrier ) ) - { - for ( x = 0; x < level.exterior_goals[ i ].zbarrier getnumzbarrierpieces(); x++ ) - { - level.exterior_goals[ i ].zbarrier setzbarrierpiecestate( x, "opening" ); - } - } - if ( isDefined( level.exterior_goals[ i ].clip ) ) - { - level.exterior_goals[ i ].clip disable_trigger(); - level.exterior_goals[ i ].clip connectpaths(); - } - else - { - blocker_connect_paths( level.exterior_goals[ i ].neg_start, level.exterior_goals[ i ].neg_end ); - } - i++; - } -} - -zombie_boardtear_audio_plus_fx_offset_repair_horizontal( chunk ) //checked changed to match cerberus output -{ - if ( isDefined( chunk.material ) && chunk.material == "rock" ) - { - if ( is_true( level.use_clientside_rock_tearin_fx ) ) - { - chunk clearclientflag( level._zombie_scriptmover_flag_rock_fx ); - } - else - { - earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), chunk.origin, 150 ); - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( 0, 0, 1 ), 30 ) ); - wait randomfloatrange( 0.3, 0.6 ); - chunk play_sound_on_ent( "break_barrier_piece" ); - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( 0, 0, -1 ), 30 ) ); - } - } - else if ( is_true( level.use_clientside_board_fx ) ) - { - chunk clearclientflag( level._zombie_scriptmover_flag_board_horizontal_fx ); - } - else - { - earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), chunk.origin, 150 ); - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( 0, 0, 1 ), 30 ) ); - wait randomfloatrange( 0.3, 0.6 ); - chunk play_sound_on_ent( "break_barrier_piece" ); - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( 0, 0, -1 ), 30 ) ); - } -} - -zombie_boardtear_audio_plus_fx_offset_repair_verticle( chunk ) //checked changed to match cerberus output -{ - if ( isDefined( chunk.material ) && chunk.material == "rock" ) - { - if ( is_true( level.use_clientside_rock_tearin_fx ) ) - { - chunk clearclientflag( level._zombie_scriptmover_flag_rock_fx ); - } - else - { - earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), chunk.origin, 150 ); - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( 1, 0, 0 ), 30 ) ); - wait randomfloatrange( 0.3, 0.6 ); - chunk play_sound_on_ent( "break_barrier_piece" ); - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - } - } - else if ( is_true( level.use_clientside_board_fx ) ) - { - chunk clearclientflag( level._zombie_scriptmover_flag_board_vertical_fx ); - } - else - { - earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), chunk.origin, 150 ); - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( 1, 0, 0 ), 30 ) ); - wait randomfloatrange( 0.3, 0.6 ); - chunk play_sound_on_ent( "break_barrier_piece" ); - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - } -} - -zombie_gratetear_audio_plus_fx_offset_repair_horizontal( chunk ) //checked matches cerberus output -{ - earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), chunk.origin, 150 ); - chunk play_sound_on_ent( "bar_rebuild_slam" ); - switch( randomint( 9 ) ) - { - case 0: - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - wait randomfloatrange( 0, 0.3 ); - playfx( level._effect[ "fx_zombie_bar_break_lite" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - break; - case 1: - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - wait randomfloatrange( 0, 0.3 ); - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - break; - case 2: - playfx( level._effect[ "fx_zombie_bar_break_lite" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - wait randomfloatrange( 0, 0.3 ); - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - break; - case 3: - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - wait randomfloatrange( 0, 0.3 ); - playfx( level._effect[ "fx_zombie_bar_break_lite" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - break; - case 4: - playfx( level._effect[ "fx_zombie_bar_break_lite" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - wait randomfloatrange( 0, 0.3 ); - playfx( level._effect[ "fx_zombie_bar_break_lite" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - break; - case 5: - playfx( level._effect[ "fx_zombie_bar_break_lite" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - break; - case 6: - playfx( level._effect[ "fx_zombie_bar_break_lite" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - break; - case 7: - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - break; - case 8: - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - break; - } -} - -zombie_bartear_audio_plus_fx_offset_repair_horizontal( chunk ) //checked matches cerberus output -{ - earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), chunk.origin, 150 ); - chunk play_sound_on_ent( "bar_rebuild_slam" ); - switch( randomint( 9 ) ) - { - case 0: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_left" ); - wait randomfloatrange( 0, 0.3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_right" ); - break; - case 1: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_left" ); - wait randomfloatrange( 0, 0.3 ); - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_right" ); - break; - case 2: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_left" ); - wait randomfloatrange( 0, 0.3 ); - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_right" ); - break; - case 3: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_left" ); - wait randomfloatrange( 0, 0.3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_right" ); - break; - case 4: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_left" ); - wait randomfloatrange( 0, 0.3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_right" ); - break; - case 5: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_left" ); - break; - case 6: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_right" ); - break; - case 7: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_left" ); - break; - case 8: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_right" ); - break; - } -} - -zombie_bartear_audio_plus_fx_offset_repair_verticle( chunk ) //checked matches cerberus output -{ - earthquake( randomfloatrange( 0.3, 0.4 ), randomfloatrange( 0.2, 0.4 ), chunk.origin, 150 ); - chunk play_sound_on_ent( "bar_rebuild_slam" ); - switch( randomint( 9 ) ) - { - case 0: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_top" ); - wait randomfloatrange( 0, 0.3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_bottom" ); - break; - case 1: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_top" ); - wait randomfloatrange( 0, 0.3 ); - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_bottom" ); - break; - case 2: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_top" ); - wait randomfloatrange( 0, 0.3 ); - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_bottom" ); - break; - case 3: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_top" ); - wait randomfloatrange( 0, 0.3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_bottom" ); - break; - case 4: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_top" ); - wait randomfloatrange( 0, 0.3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_bottom" ); - break; - case 5: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_top" ); - break; - case 6: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_bottom" ); - break; - case 7: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_top" ); - break; - case 8: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_bottom" ); - break; - } -} - -add_new_zombie_spawners() //checked changed to match cerberus output -{ - if ( isDefined( self.target ) ) - { - self.possible_spawners = getentarray( self.target, "targetname" ); - } - if ( isDefined( self.script_string ) ) - { - spawners = getentarray( self.script_string, "targetname" ); - self.possible_spawners = arraycombine( self.possible_spawners, spawners, 1, 0 ); - } - if ( !isDefined( self.possible_spawners ) ) - { - return; - } - zombies_to_add = self.possible_spawners; - for ( i = 0; i < self.possible_spawners.size; i++ ) - { - self.possible_spawners[ i ].is_enabled = 1; - add_spawner( self.possible_spawners[ i ] ); - } -} - -flag_blocker() //checked matches cerberus output -{ - if ( !isDefined( self.script_flag_wait ) ) - { - /* -/# - assertmsg( "Flag Blocker at " + self.origin + " does not have a script_flag_wait key value pair" ); -#/ - */ - return; - } - if ( !isDefined( level.flag[ self.script_flag_wait ] ) ) - { - flag_init( self.script_flag_wait ); - } - type = "connectpaths"; - if ( isDefined( self.script_noteworthy ) ) - { - type = self.script_noteworthy; - } - flag_wait( self.script_flag_wait ); - self script_delay(); - if ( type == "connectpaths" ) - { - self connectpaths(); - self disable_trigger(); - return; - } - if ( type == "disconnectpaths" ) - { - self disconnectpaths(); - self disable_trigger(); - return; - } - /* -/# - assertmsg( "flag blocker at " + self.origin + ", the type "" + type + "" is not recognized" ); -#/ - */ -} - -update_states( states ) //checked matches cerberus output -{ - /* -/# - assert( isDefined( states ) ); -#/ - */ - self.state = states; -} - -quantum_bomb_open_nearest_door_validation( position ) //checked changed to match cerberus output -{ - range_squared = 32400; - zombie_doors = getentarray( "zombie_door", "targetname" ); - for ( i = 0; i < zombie_doors.size; i++ ) - { - if ( distancesquared( zombie_doors[ i ].origin, position ) < range_squared ) - { - return 1; - } - } - zombie_airlock_doors = getentarray( "zombie_airlock_buy", "targetname" ); - for ( i = 0; i < zombie_airlock_doors.size; i++ ) - { - if ( distancesquared( zombie_airlock_doors[ i ].origin, position ) < range_squared ) - { - return 1; - } - } - zombie_debris = getentarray( "zombie_debris", "targetname" ); - for ( i = 0; i < zombie_debris.size; i++ ) - { - if ( distancesquared( zombie_debris[ i ].origin, position ) < range_squared ) - { - return 1; - } - } - return 0; -} - -quantum_bomb_open_nearest_door_result( position ) //checked changed to match cerberus output -{ - range_squared = 32400; - zombie_doors = getentarray( "zombie_door", "targetname" ); - for ( i = 0; i < zombie_doors.size; i++ ) - { - if ( distancesquared( zombie_doors[ i ].origin, position ) < range_squared ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "quant_good" ); - zombie_doors[ i ] notify( "trigger", self, 1 ); - [[ level.quantum_bomb_play_area_effect_func ]]( position ); - return; - } - } - zombie_airlock_doors = getentarray( "zombie_airlock_buy", "targetname" ); - for ( i = 0; i < zombie_airlock_doors.size; i++ ) - { - if ( distancesquared( zombie_airlock_doors[ i ].origin, position ) < range_squared ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "quant_good" ); - zombie_airlock_doors[ i ] notify( "trigger", self, 1 ); - [[ level.quantum_bomb_play_area_effect_func ]]( position ); - return; - } - } - zombie_debris = getentarray( "zombie_debris", "targetname" ); - for ( i = 0; i < zombie_debris.size; i++ ) - { - if ( distancesquared( zombie_debris[ i ].origin, position ) < range_squared ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "quant_good" ); - zombie_debris[ i ] notify( "trigger", self, 1 ); - [[ level.quantum_bomb_play_area_effect_func ]]( position ); - return; - } - } -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_bot.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_bot.gsc deleted file mode 100644 index bcef80d..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_bot.gsc +++ /dev/null @@ -1,10 +0,0 @@ -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ -/# - println( "ZM >> Zombiemode Server Scripts Init (_zm_bot.gsc)" ); -#/ -} diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_buildables.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_buildables.gsc deleted file mode 100644 index 2483f2e..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_buildables.gsc +++ /dev/null @@ -1,3146 +0,0 @@ -#include maps/mp/_demo; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - precachestring( &"ZOMBIE_BUILDING" ); - precachestring( &"ZOMBIE_BUILD_PIECE_MISSING" ); - precachestring( &"ZOMBIE_BUILD_PIECE_GRAB" ); - precacheitem( "zombie_builder_zm" ); - precacheitem( "buildable_piece_zm" ); - level.gameobjswapping = 1; - zombie_buildables_callbacks = []; - level.buildablepickups = []; - level.buildables_built = []; - level.buildable_stubs = []; - level.buildable_piece_count = 0; - level._effect[ "building_dust" ] = loadfx( "maps/zombie/fx_zmb_buildable_assemble_dust" ); - if ( isDefined( level.init_buildables ) ) - { - [[ level.init_buildables ]](); - } - if ( isDefined( level.use_swipe_protection ) ) - { - onplayerconnect_callback( ::buildables_watch_swipes ); - } -} - -anystub_update_prompt( player ) //checked matches cerberus output -{ - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || player maps/mp/zombies/_zm_utility::in_revive_trigger() ) - { - self.hint_string = ""; - return 0; - } - if ( player isthrowinggrenade() ) - { - self.hint_string = ""; - return 0; - } - if ( isDefined( player.is_drinking ) && player.is_drinking > 0 ) - { - self.hint_string = ""; - return 0; - } - if ( isDefined( player.screecher_weapon ) ) - { - self.hint_string = ""; - return 0; - } - return 1; -} - -anystub_get_unitrigger_origin() //checked matches cerberus output -{ - if ( isDefined( self.origin_parent ) ) - { - return self.origin_parent.origin; - } - return self.origin; -} - -anystub_on_spawn_trigger( trigger ) //checked matches cerberus output -{ - if ( isDefined( self.link_parent ) ) - { - trigger enablelinkto(); - trigger linkto( self.link_parent ); - trigger setmovingplatformenabled( 1 ); - } -} - -buildables_watch_swipes() //checked changed to match cerberus output -{ - self endon( "disconnect" ); - self notify( "buildables_watch_swipes" ); - self endon( "buildables_watch_swipes" ); - while ( 1 ) - { - self waittill( "melee_swipe", zombie ); - if ( distancesquared( zombie.origin, self.origin ) > zombie.meleeattackdist * zombie.meleeattackdist ) - { - continue; - } - trigger = level._unitriggers.trigger_pool[ self getentitynumber() ]; - if ( isDefined( trigger ) && isDefined( trigger.stub.piece ) ) - { - piece = trigger.stub.piece; - if ( !isDefined( piece.damage ) ) - { - piece.damage = 0; - } - piece.damage++; - if ( piece.damage > 12 ) - { - thread maps/mp/zombies/_zm_equipment::equipment_disappear_fx( trigger.stub maps/mp/zombies/_zm_unitrigger::unitrigger_origin() ); - piece maps/mp/zombies/_zm_buildables::piece_unspawn(); - self maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 ); - if ( isalive( self ) ) - { - self playlocalsound( level.zmb_laugh_alias ); - } - } - } - } -} - -explosiondamage( damage, pos ) //checked matches cerberus output -{ - /* -/# - println( "ZM BUILDABLE Explode do " + damage + " damage to " + self.name + "\n" ); -#/ - */ - self dodamage( damage, pos ); -} - -add_zombie_buildable( buildable_name, hint, building, bought ) //checked matches cerberus output -{ - if ( !isDefined( level.zombie_include_buildables ) ) - { - level.zombie_include_buildables = []; - } - if ( isDefined( level.zombie_include_buildables ) && !isDefined( level.zombie_include_buildables[ buildable_name ] ) ) - { - return; - } - precachestring( hint ); - if ( isDefined( building ) ) - { - precachestring( building ); - } - if ( isDefined( bought ) ) - { - precachestring( bought ); - } - buildable_struct = level.zombie_include_buildables[ buildable_name ]; - if ( !isDefined( level.zombie_buildables ) ) - { - level.zombie_buildables = []; - } - buildable_struct.hint = hint; - buildable_struct.building = building; - buildable_struct.bought = bought; - /* -/# - println( "ZM >> Looking for buildable - " + buildable_struct.name ); -#/ - */ - level.zombie_buildables[ buildable_struct.name ] = buildable_struct; - if ( !level.createfx_enabled ) - { - if ( level.zombie_buildables.size == 1 ) - { - register_clientfields(); - } - } -} - -register_clientfields() //checked changed to match cerberus output -{ - if ( isDefined( level.buildable_slot_count ) ) - { - for ( i = 0; i < level.buildable_slot_count; i++ ) - { - bits = getminbitcountfornum( level.buildable_piece_counts[ i ] ); - registerclientfield( "toplayer", level.buildable_clientfields[ i ], 12000, bits, "int" ); - } - } - else - { - bits = getminbitcountfornum( level.buildable_piece_count ); - registerclientfield( "toplayer", "buildable", 1, bits, "int" ); - } -} - -set_buildable_clientfield( slot, newvalue ) //checked matches cerberus output -{ - if ( isDefined( level.buildable_slot_count ) ) - { - self setclientfieldtoplayer( level.buildable_clientfields[ slot ], newvalue ); - } - else - { - self setclientfieldtoplayer( "buildable", newvalue ); - } -} - -clear_buildable_clientfield( slot ) //checked matches cerberus output -{ - self set_buildable_clientfield( slot, 0 ); -} - -include_zombie_buildable( buiildable_struct ) //checked matches cerberus output -{ - if ( !isDefined( level.zombie_include_buildables ) ) - { - level.zombie_include_buildables = []; - } - /* -/# - println( "ZM >> Including buildable - " + buiildable_struct.name ); -#/ - */ - level.zombie_include_buildables[ buiildable_struct.name ] = buiildable_struct; -} - -generate_zombie_buildable_piece( buildablename, modelname, radius, height, drop_offset, hud_icon, onpickup, ondrop, use_spawn_num, part_name, can_reuse, client_field_state, buildable_slot ) //checked changed to match cerberus output -{ - precachemodel( modelname ); - if ( isDefined( hud_icon ) ) - { - precacheshader( hud_icon ); - } - piece = spawnstruct(); - buildable_pieces = []; - buildable_pieces_structs = patch_zm\common_scripts\utility::getstructarray( buildablename + "_" + modelname, "targetname" ); - /* -/# - if ( buildable_pieces_structs.size < 1 ) - { - println( "ERROR: Missing buildable piece <" + buildablename + "> <" + modelname + ">\n" ); -#/ - } - */ - foreach ( struct in buildable_pieces_structs ) - { - buildable_pieces[ index ] = struct; - buildable_pieces[ index ].hasspawned = 0; - } - piece.spawns = buildable_pieces; - piece.buildablename = buildablename; - piece.modelname = modelname; - piece.hud_icon = hud_icon; - piece.radius = radius; - piece.height = height; - piece.part_name = part_name; - piece.can_reuse = can_reuse; - piece.drop_offset = drop_offset; - piece.max_instances = 256; - if ( isDefined( buildable_slot ) ) - { - piece.buildable_slot = buildable_slot; - } - else - { - piece.buildable_slot = 0; - } - piece.onpickup = onpickup; - piece.ondrop = ondrop; - piece.use_spawn_num = use_spawn_num; - piece.client_field_state = client_field_state; - return piece; -} - -manage_multiple_pieces( max_instances, min_instances ) //checked matches cerberus output -{ - self.max_instances = max_instances; - self.min_instances = min_instances; - self.managing_pieces = 1; - self.piece_allocated = []; -} - -buildable_set_force_spawn_location( str_kvp, str_name ) //checked matches cerberus output -{ - self.str_force_spawn_kvp = str_kvp; - self.str_force_spawn_name = str_name; -} - -buildable_use_cyclic_spawns( randomize_start_location ) //checked matches cerberus output -{ - self.use_cyclic_spawns = 1; - self.randomize_cyclic_index = randomize_start_location; -} - -combine_buildable_pieces( piece1, piece2, piece3 ) //checked matches cerberus output -{ - spawns1 = piece1.spawns; - spawns2 = piece2.spawns; - spawns = arraycombine( spawns1, spawns2, 1, 0 ); - if ( isDefined( piece3 ) ) - { - spawns3 = piece3.spawns; - spawns = arraycombine( spawns, spawns3, 1, 0 ); - spawns = array_randomize( spawns ); - piece3.spawns = spawns; - } - else - { - spawns = array_randomize( spawns ); - } - piece1.spawns = spawns; - piece2.spawns = spawns; -} - -add_buildable_piece( piece, part_name, can_reuse ) //checked matches cerberus output -{ - if ( !isDefined( self.buildablepieces ) ) - { - self.buildablepieces = []; - } - if ( isDefined( part_name ) ) - { - piece.part_name = part_name; - } - if ( isDefined( can_reuse ) ) - { - piece.can_reuse = can_reuse; - } - self.buildablepieces[ self.buildablepieces.size ] = piece; - if ( !isDefined( self.buildable_slot ) ) - { - self.buildable_slot = piece.buildable_slot; - } - else - { - /* -/# - assert( self.buildable_slot == piece.buildable_slot ); -#/ - */ - } -} - -create_zombie_buildable_piece( modelname, radius, height, hud_icon ) //checked matches cerberus output -{ - piece = generate_zombie_buildable_piece( self.name, modelname, radius, height, hud_icon ); - self add_buildable_piece( piece ); -} - -onplayerlaststand() //checked partially changed to match cerberus output -{ - pieces = self player_get_buildable_pieces(); - spawn_pos = []; - spawn_pos[ 0 ] = self.origin; - if ( pieces.size >= 2 ) - { - nodes = getnodesinradiussorted( self.origin + vectorScale( ( 0, 0, 1 ), 30 ), 120, 30, 72, "path", 5 ); - i = 0; - while ( i < pieces.size ) - { - if ( i < nodes.size && check_point_in_playable_area( nodes[ i ].origin ) ) - { - spawn_pos[ i ] = nodes[ i ].origin; - i++; - continue; - } - spawn_pos[ i ] = self.origin + vectorScale( ( 0, 0, 1 ), 5 ); - i++; - } - } - spawnidx = 0; - foreach ( piece in pieces ) - { - slot = piece.buildable_slot; - if ( isDefined( piece ) ) - { - return_to_start_pos = 0; - if ( isDefined( level.safe_place_for_buildable_piece ) ) - { - if ( !( self [[ level.safe_place_for_buildable_piece ]]( piece ) ) ) - { - return_to_start_pos = 1; - } - } - if ( return_to_start_pos ) - { - piece piece_spawn_at(); - } - else if ( pieces.size < 2 ) - { - piece piece_spawn_at( self.origin + vectorScale( ( 1, 1, 0 ), 5 ), self.angles ); - } - else - { - piece piece_spawn_at( spawn_pos[ spawnidx ], self.angles ); - } - if ( isDefined( piece.ondrop ) ) - { - piece [[ piece.ondrop ]]( self ); - } - self clear_buildable_clientfield( slot ); - spawnidx++; - } - self player_set_buildable_piece( undefined, slot ); - self notify( "piece_released" + slot ); - } -} - -piecestub_get_unitrigger_origin() //checked matches cerberus output -{ - if ( isDefined( self.origin_parent ) ) - { - return self.origin_parent.origin + vectorScale( ( 0, 0, 1 ), 12 ); - } - return self.origin; -} - -generate_piece_unitrigger( classname, origin, angles, flags, radius, script_height, moving ) //checked matches cerberus output -{ - if ( !isDefined( radius ) ) - { - radius = 64; - } - if ( !isDefined( script_height ) ) - { - script_height = 64; - } - script_width = script_height; - if ( !isDefined( script_width ) ) - { - script_width = 64; - } - script_length = script_height; - if ( !isDefined( script_length ) ) - { - script_length = 64; - } - unitrigger_stub = spawnstruct(); - unitrigger_stub.origin = origin; - if ( isDefined( script_length ) ) - { - unitrigger_stub.script_length = script_length; - } - else - { - unitrigger_stub.script_length = 13.5; - } - if ( isDefined( script_width ) ) - { - unitrigger_stub.script_width = script_width; - } - else - { - unitrigger_stub.script_width = 27.5; - } - if ( isDefined( script_height ) ) - { - unitrigger_stub.script_height = script_height; - } - else - { - unitrigger_stub.script_height = 24; - } - unitrigger_stub.radius = radius; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - unitrigger_stub.hint_string = &"ZOMBIE_BUILD_PIECE_GRAB"; - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.require_look_at = 0; - switch( classname ) - { - case "trigger_radius": - unitrigger_stub.script_unitrigger_type = "unitrigger_radius"; - break; - case "trigger_radius_use": - unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - break; - case "trigger_box": - unitrigger_stub.script_unitrigger_type = "unitrigger_box"; - break; - case "trigger_box_use": - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - break; - } - unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - unitrigger_stub.prompt_and_visibility_func = ::piecetrigger_update_prompt; - unitrigger_stub.originfunc = ::piecestub_get_unitrigger_origin; - unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; - if ( is_true( moving ) ) - { - maps/mp/zombies/_zm_unitrigger::register_unitrigger( unitrigger_stub, ::piece_unitrigger_think ); - } - else - { - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::piece_unitrigger_think ); - } - return unitrigger_stub; -} - -piecetrigger_update_prompt( player ) //checked matches cerberus output -{ - can_use = self.stub piecestub_update_prompt( player ); - self setinvisibletoplayer( player, !can_use ); - if ( isDefined( self.stub.hint_parm1 ) ) - { - self sethintstring( self.stub.hint_string, self.stub.hint_parm1 ); - } - else - { - self sethintstring( self.stub.hint_string ); - } - if ( isDefined( self.stub.cursor_hint ) ) - { - if ( self.stub.cursor_hint == "HINT_WEAPON" && isDefined( self.stub.cursor_hint_weapon ) ) - { - self setcursorhint( self.stub.cursor_hint, self.stub.cursor_hint_weapon ); - } - else - { - self setcursorhint( self.stub.cursor_hint ); - } - } - return can_use; -} - -piecestub_update_prompt( player ) //checked changed to match cerberus output -{ - if ( !self anystub_update_prompt( player ) ) - { - self.cursor_hint = "HINT_NOICON"; - return 0; - } - if ( isDefined( player player_get_buildable_piece( self.piece.buildable_slot ) ) ) - { - spiece = self.piece; - cpiece = player player_get_buildable_piece( self.piece.buildable_slot ); - if ( spiece.modelname == cpiece.modelname && spiece.buildablename == cpiece.buildablename && isDefined( spiece.script_noteworthy ) || !isDefined( cpiece.script_noteworthy ) && spiece.script_noteworthy == cpiece.script_noteworthy ) - { - self.hint_string = ""; - return 0; - } - if ( isDefined( spiece.hint_swap ) ) - { - self.hint_string = spiece.hint_swap; - self.hint_parm1 = self.piece.hint_swap_parm1; - } - else - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_SWITCH"; - } - if ( isDefined( self.piece.cursor_hint ) ) - { - self.cursor_hint = self.piece.cursor_hint; - } - if ( isDefined( self.piece.cursor_hint_weapon ) ) - { - self.cursor_hint_weapon = self.piece.cursor_hint_weapon; - } - } - else if ( isDefined( self.piece.hint_grab ) ) - { - self.hint_string = self.piece.hint_grab; - self.hint_parm1 = self.piece.hint_grab_parm1; - } - else - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_GRAB"; - } - if ( isDefined( self.piece.cursor_hint ) ) - { - self.cursor_hint = self.piece.cursor_hint; - } - if ( isDefined( self.piece.cursor_hint_weapon ) ) - { - self.cursor_hint_weapon = self.piece.cursor_hint_weapon; - } - return 1; -} - -piece_unitrigger_think() //checked changed to match cerberus output -{ - self endon( "kill_trigger" ); - while ( 1 ) - { - self waittill( "trigger", player ); - if ( player != self.parent_player ) - { - continue; - } - if ( isDefined( player.screecher_weapon ) ) - { - continue; - } - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - } - status = player player_can_take_piece( self.stub.piece ); - if ( !status ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - } - else - { - player thread player_take_piece( self.stub.piece ); - } - } -} - -player_get_buildable_pieces() //checked matches cerberus output -{ - if ( !isDefined( self.current_buildable_pieces ) ) - { - self.current_buildable_pieces = []; - } - return self.current_buildable_pieces; -} - -player_get_buildable_piece( slot ) //checked matches cerberus output -{ - if ( !isDefined( slot ) ) - { - slot = 0; - } - if ( !isDefined( self.current_buildable_pieces ) ) - { - self.current_buildable_pieces = []; - } - return self.current_buildable_pieces[ slot ]; -} - -player_set_buildable_piece( piece, slot ) //checked matches cerberus output -{ - if ( !isDefined( slot ) ) - { - slot = 0; - } - /* -/# - if ( isDefined( slot ) && isDefined( piece ) && isDefined( piece.buildable_slot ) ) - { - assert( slot == piece.buildable_slot ); -#/ - } - */ - if ( !isDefined( self.current_buildable_pieces ) ) - { - self.current_buildable_pieces = []; - } - self.current_buildable_pieces[ slot ] = piece; -} - -player_can_take_piece( piece ) //checked matches cerberus output -{ - if ( !isDefined( piece ) ) - { - return 0; - } - return 1; -} - -dbline( from, to ) //checked matches cerberus output -{ - /* -/# - time = 20; - while ( time > 0 ) - { - line( from, to, ( 0, 0, 1 ), 0, 1 ); - time -= 0.05; - wait 0.05; -#/ - } - */ -} - -player_throw_piece( piece, origin, dir, return_to_spawn, return_time, endangles ) //checked changed to match cerberus output -{ - /* -/# - assert( isDefined( piece ) ); -#/ - */ - if ( isDefined( piece ) ) - { - /* -/# - thread dbline( origin, origin + dir ); -#/ - */ - pass = 0; - done = 0; - altmodel = undefined; - while ( pass < 2 && !done ) - { - grenade = self magicgrenadetype( "buildable_piece_zm", origin, dir, 30000 ); - grenade thread watch_hit_players(); - grenade ghost(); - if ( !isDefined( altmodel ) ) - { - altmodel = spawn( "script_model", grenade.origin ); - altmodel setmodel( piece.modelname ); - } - altmodel.origin = grenade.angles; - altmodel.angles = grenade.angles; - altmodel linkto( grenade, "", ( 0, 0, 0 ), ( 0, 0, 0 ) ); - grenade.altmodel = altmodel; - grenade waittill( "stationary" ); - grenade_origin = grenade.origin; - grenade_angles = grenade.angles; - landed_on = grenade getgroundent(); - grenade delete(); - if ( isDefined( landed_on ) && landed_on == level ) - { - done = 1; - } - else - { - origin = grenade_origin; - dir = ( ( dir[ 0 ] * -1 ) / 10, ( dir[ 1 ] * -1 ) / 10, -1 ); - pass++; - } - } - if ( !isDefined( endangles ) ) - { - endangles = grenade_angles; - } - piece piece_spawn_at( grenade_origin, endangles ); - if ( isDefined( altmodel ) ) - { - altmodel delete(); - } - if ( isDefined( piece.ondrop ) ) - { - piece [[ piece.ondrop ]]( self ); - } - if ( is_true( return_to_spawn ) ) - { - piece piece_wait_and_return( return_time ); - } - } -} - -watch_hit_players() //checked matches cerberus output -{ - self endon( "death" ); - self endon( "stationary" ); - while ( isDefined( self ) ) - { - self waittill( "grenade_bounce", pos, normal, ent ); - if ( isplayer( ent ) ) - { - ent explosiondamage( 25, pos ); - } - } -} - -piece_wait_and_return( return_time ) //checked matches cerberus output -{ - self endon( "pickup" ); - wait 0.15; - if ( isDefined( level.exploding_jetgun_fx ) ) - { - playfxontag( level.exploding_jetgun_fx, self.model, "tag_origin" ); - } - else - { - playfxontag( level._effect[ "powerup_on" ], self.model, "tag_origin" ); - } - wait ( return_time - 6 ); - self piece_hide(); - wait 1; - self piece_show(); - wait 1; - self piece_hide(); - wait 1; - self piece_show(); - wait 1; - self piece_hide(); - wait 1; - self piece_show(); - wait 1; - self notify( "respawn" ); - self piece_unspawn(); - self piece_spawn_at(); -} - -player_return_piece_to_original_spawn( slot ) //checked matches cerberus output -{ - if ( !isDefined( slot ) ) - { - slot = 0; - } - self notify( "piece_released" + slot ); - piece = self player_get_buildable_piece( slot ); - self player_set_buildable_piece( undefined, slot ); - if ( isDefined( piece ) ) - { - piece piece_spawn_at(); - self clear_buildable_clientfield( slot ); - } -} - -player_drop_piece_on_death( slot ) //checked matches cerberus output -{ - self notify( "piece_released" + slot ); - self endon( "piece_released" + slot ); - origin = self.origin; - angles = self.angles; - piece = self player_get_buildable_piece( slot ); - self waittill( "death_or_disconnect" ); - piece piece_spawn_at( origin, angles ); - if ( isDefined( self ) ) - { - self clear_buildable_clientfield( slot ); - } - if ( isDefined( piece.ondrop ) ) - { - piece [[ piece.ondrop ]]( self ); - } -} - -player_drop_piece( piece, slot ) //checked matches cerberus output -{ - if ( !isDefined( slot ) ) - { - slot = 0; - } - if ( !isDefined( piece ) ) - { - piece = self player_get_buildable_piece( slot ); - } - else - { - slot = piece.buildable_slot; - } - if ( isDefined( piece ) ) - { - origin = self.origin; - origintrace = groundtrace( origin + vectorScale( ( 0, 0, 1 ), 5 ), origin - vectorScale( ( 0, 0, 1 ), 999999 ), 0, self ); - if ( isDefined( origintrace[ "entity" ] ) ) - { - origintrace = groundtrace( origintrace[ "entity" ].origin, origintrace[ "entity" ].origin - vectorScale( ( 0, 0, 1 ), 999999 ), 0, origintrace[ "entity" ] ); - } - if ( isDefined( origintrace[ "position" ] ) ) - { - origin = origintrace[ "position" ]; - } - piece.damage = 0; - piece piece_spawn_at( origin, self.angles ); - if ( isplayer( self ) ) - { - self clear_buildable_clientfield( slot ); - } - if ( isDefined( piece.ondrop ) ) - { - piece [[ piece.ondrop ]]( self ); - } - } - self player_set_buildable_piece( undefined, slot ); - self notify( "piece_released" + slot ); -} - -player_take_piece( piece ) //checked matches cerberus output -{ - piece_slot = piece.buildable_slot; - damage = piece.damage; - if ( isDefined( self player_get_buildable_piece( piece_slot ) ) ) - { - other_piece = self player_get_buildable_piece( piece_slot ); - self player_drop_piece( self player_get_buildable_piece( piece_slot ), piece_slot ); - other_piece.damage = damage; - self do_player_general_vox( "general", "build_swap" ); - } - if ( isDefined( piece.onpickup ) ) - { - piece [[ piece.onpickup ]]( self ); - } - piece piece_unspawn(); - piece notify( "pickup" ); - if ( isplayer( self ) ) - { - if ( isDefined( piece.client_field_state ) ) - { - self set_buildable_clientfield( piece_slot, piece.client_field_state ); - } - self player_set_buildable_piece( piece, piece_slot ); - self thread player_drop_piece_on_death( piece_slot ); - self track_buildable_piece_pickedup( piece ); - } -} - -player_destroy_piece( piece ) //checked matches cerberus output -{ - if ( !isDefined( piece ) ) - { - piece = self player_get_buildable_piece(); - } - if ( isplayer( self ) ) - { - slot = piece.buildable_slot; - if ( isDefined( piece ) ) - { - piece piece_destroy(); - self clear_buildable_clientfield( slot ); - } - self player_set_buildable_piece( undefined, slot ); - self notify( "piece_released" + slot ); - } -} - -claim_location( location ) //checked matches cerberus output -{ - if ( !isDefined( level.buildable_claimed_locations ) ) - { - level.buildable_claimed_locations = []; - } - if ( !isDefined( level.buildable_claimed_locations[ location ] ) ) - { - level.buildable_claimed_locations[ location ] = 1; - return 1; - } - return 0; -} - -is_point_in_build_trigger( point ) //checked changed to match cerberus output -{ - candidate_list = []; - foreach ( zone in level.zones ) - { - if ( isDefined( zone.unitrigger_stubs ) ) - { - candidate_list = arraycombine( candidate_list, zone.unitrigger_stubs, 1, 0 ); - } - } - valid_range = 128; - closest = maps/mp/zombies/_zm_unitrigger::get_closest_unitriggers( point, candidate_list, valid_range ); - for ( index = 0; index < closest.size; index++ ) - { - if ( isDefined( closest[ index ].registered ) && closest[ index ].registered && isDefined( closest[ index ].piece ) ) - { - return 1; - } - } - return 0; -} - -piece_allocate_spawn( piecespawn ) //checked changed to match cerberus output -{ - self.current_spawn = 0; - self.managed_spawn = 1; - self.piecespawn = piecespawn; - if ( isDefined( piecespawn.str_force_spawn_kvp ) ) - { - s_struct = patch_zm\common_scripts\utility::getstruct( piecespawn.str_force_spawn_name, piecespawn.str_force_spawn_kvp ); - if ( isDefined( s_struct ) ) - { - for ( i = 0; i < self.spawns.size; i++ ) - { - if ( s_struct == self.spawns[ i ] ) - { - self.current_spawn = i; - piecespawn.piece_allocated[ self.current_spawn ] = 1; - piecespawn.str_force_spawn_kvp = undefined; - piecespawn.str_force_spawn_name = undefined; - return; - } - } - } - } - else if ( isDefined( piecespawn.use_cyclic_spawns ) ) - { - piece_allocate_cyclic( piecespawn ); - return; - } - if ( self.spawns.size >= 1 && self.spawns.size > 1 ) - { - any_good = 0; - any_okay = 0; - totalweight = 0; - spawnweights = []; - for ( i = 0; i < self.spawns.size; i++ ) - { - if ( isDefined( piecespawn.piece_allocated[ i ] ) && piecespawn.piece_allocated[ i ] ) - { - spawnweights[ i ] = 0; - } - else if ( isDefined( self.spawns[ i ].script_forcespawn ) && self.spawns[ i ].script_forcespawn ) - { - switch( self.spawns[ i ].script_forcespawn ) - { - case 4: - spawnweights[ i ] = 0; - break; - case 1: - self.spawns[ i ].script_forcespawn = 0; - case 2: - self.current_spawn = i; - piecespawn.piece_allocated[ self.current_spawn ] = 1; - return; - case 3: - self.spawns[ i ].script_forcespawn = 4; - self.current_spawn = i; - piecespawn.piece_allocated[ self.current_spawn ] = 1; - return; - default: - any_okay = 1; - spawnweights[ i ] = 0.01; - break; - } - } - else if ( is_point_in_build_trigger( self.spawns[ i ].origin ) ) - { - any_okay = 1; - spawnweights[ i ] = 0.01; - break; - } - else - { - any_good = 1; - spawnweights[ i ] = 1; - } - totalweight += spawnweights[ i ]; - } - /* -/# - if ( !any_good ) - { - assert( any_okay, "There is nowhere to spawn this piece" ); - } -#/ - */ - if ( any_good ) - { - totalweight = float( int( totalweight ) ); - } - r = randomfloat( totalweight ); - for ( i = 0; i < self.spawns.size; i++ ) - { - if ( !any_good || spawnweights[ i ] >= 1 ) - { - r -= spawnweights[ i ]; - if ( r < 0 ) - { - self.current_spawn = i; - piecespawn.piece_allocated[ self.current_spawn ] = 1; - return; - } - } - } - self.current_spawn = randomint( self.spawns.size ); - piecespawn.piece_allocated[ self.current_spawn ] = 1; - } -} - -piece_allocate_cyclic( piecespawn ) //checked matches cerberus output -{ - if ( self.spawns.size > 1 ) - { - if ( isDefined( piecespawn.randomize_cyclic_index ) ) - { - piecespawn.randomize_cyclic_index = undefined; - piecespawn.cyclic_index = randomint( self.spawns.size ); - } - if ( !isDefined( piecespawn.cyclic_index ) ) - { - piecespawn.cyclic_index = 0; - } - piecespawn.cyclic_index++; - if ( piecespawn.cyclic_index >= self.spawns.size ) - { - piecespawn.cyclic_index = 0; - } - } - else - { - piecespawn.cyclic_index = 0; - } - self.current_spawn = piecespawn.cyclic_index; - piecespawn.piece_allocated[ self.current_spawn ] = 1; -} - -piece_deallocate_spawn() //checked matches cerberus output -{ - if ( isDefined( self.current_spawn ) ) - { - self.piecespawn.piece_allocated[ self.current_spawn ] = 0; - self.current_spawn = undefined; - } - self.start_origin = undefined; -} - -piece_pick_random_spawn() //checked partially changed to match cerberus output did not change while loop to for loop -{ - self.current_spawn = 0; - if ( self.spawns.size >= 1 && self.spawns.size > 1 ) - { - self.current_spawn = randomint( self.spawns.size ); - while ( isDefined( self.spawns[ self.current_spawn ].claim_location ) && !claim_location( self.spawns[ self.current_spawn ].claim_location ) ) - { - arrayremoveindex( self.spawns, self.current_spawn ); - if ( self.spawns.size < 1 ) - { - self.current_spawn = 0; - /* -/# - println( "ERROR: All buildable spawn locations claimed" ); -#/ - */ - return; - } - self.current_spawn = randomint( self.spawns.size ); - } - } -} - -piece_set_spawn( num ) //checked matches cerberus output -{ - self.current_spawn = 0; - if ( self.spawns.size >= 1 && self.spawns.size > 1 ) - { - self.current_spawn = int( min( num, self.spawns.size - 1 ) ); - } -} - -piece_spawn_in( piecespawn ) //checked matches cerberus output -{ - if ( self.spawns.size < 1 ) - { - return; - } - if ( is_true( self.managed_spawn ) ) - { - if ( !isDefined( self.current_spawn ) ) - { - self piece_allocate_spawn( self.piecespawn ); - } - } - if ( !isDefined( self.current_spawn ) ) - { - self.current_spawn = 0; - } - spawndef = self.spawns[ self.current_spawn ]; - self.script_noteworthy = spawndef.script_noteworthy; - self.script_parameters = spawndef.script_parameters; - self.unitrigger = generate_piece_unitrigger( "trigger_radius_use", spawndef.origin + vectorScale( ( 0, 0, 1 ), 12 ), spawndef.angles, 0, piecespawn.radius, piecespawn.height, 0 ); - self.unitrigger.piece = self; - self.buildable_slot = piecespawn.buildable_slot; - self.radius = piecespawn.radius; - self.height = piecespawn.height; - self.buildablename = piecespawn.buildablename; - self.modelname = piecespawn.modelname; - self.hud_icon = piecespawn.hud_icon; - self.part_name = piecespawn.part_name; - self.drop_offset = piecespawn.drop_offset; - self.start_origin = spawndef.origin; - self.start_angles = spawndef.angles; - self.client_field_state = piecespawn.client_field_state; - self.hint_grab = piecespawn.hint_grab; - self.hint_swap = piecespawn.hint_swap; - self.model = spawn( "script_model", self.start_origin ); - if ( isDefined( self.start_angles ) ) - { - self.model.angles = self.start_angles; - } - self.model setmodel( piecespawn.modelname ); - self.model ghostindemo(); - self.model.hud_icon = piecespawn.hud_icon; - self.piecespawn = piecespawn; - self.unitrigger.origin_parent = self.model; - self.building = undefined; - self.onunspawn = piecespawn.onunspawn; - self.ondestroy = piecespawn.ondestroy; - if ( isDefined( piecespawn.onspawn ) ) - { - self.onspawn = piecespawn.onspawn; - self [[ piecespawn.onspawn ]](); - } -} - -piece_spawn_at_with_notify_delay( origin, angles, str_notify, unbuild_respawn_fn ) //checked matches cerberus output -{ - level waittill( str_notify ); - piece_spawn_at( origin, angles ); - if ( isDefined( unbuild_respawn_fn ) ) - { - self [[ unbuild_respawn_fn ]](); - } -} - -piece_spawn_at( origin, angles ) //checked changed to match cerberus output -{ - if ( self.spawns.size < 1 ) - { - return; - } - if ( is_true( self.managed_spawn ) ) - { - if ( !isDefined( self.current_spawn ) && !isDefined( origin ) ) - { - self piece_allocate_spawn( self.piecespawn ); - spawndef = self.spawns[ self.current_spawn ]; - self.start_origin = spawndef.origin; - self.start_angles = spawndef.angles; - } - } - else if ( !isDefined( self.current_spawn ) ) - { - self.current_spawn = 0; - } - unitrigger_offset = vectorScale( ( 0, 0, 1 ), 12 ); - if ( !isDefined( origin ) ) - { - origin = self.start_origin; - } - else - { - origin += ( 0, 0, self.drop_offset ); - unitrigger_offset -= ( 0, 0, self.drop_offset ); - } - if ( !isDefined( angles ) ) - { - angles = self.start_angles; - } - /* -/# - if ( !isDefined( level.drop_offset ) ) - { - level.drop_offset = 0; - } - origin += ( 0, 0, level.drop_offset ); - unitrigger_offset -= ( 0, 0, level.drop_offset ); -#/ - */ - self.model = spawn( "script_model", origin ); - if ( isDefined( angles ) ) - { - self.model.angles = angles; - } - self.model setmodel( self.modelname ); - if ( isDefined( level.equipment_safe_to_drop ) ) - { - if ( ![[ level.equipment_safe_to_drop ]]( self.model ) ) - { - origin = self.start_origin; - angles = self.start_angles; - self.model.origin = origin; - self.model.angles = angles; - } - } - if ( isDefined( self.model.canmove ) ) - { - self.unitrigger = generate_piece_unitrigger( "trigger_radius_use", origin + unitrigger_offset, angles, 0, self.radius, self.height, self.model.canmove ); - } - self.unitrigger.piece = self; - self.model.hud_icon = self.hud_icon; - self.unitrigger.origin_parent = self.model; - self.building = undefined; - if ( isDefined( self.onspawn ) ) - { - self [[ self.onspawn ]](); - } -} - -piece_unspawn() //checked matches cerberus output -{ - if ( isDefined( self.onunspawn ) ) - { - self [[ self.onunspawn ]](); - } - if ( is_true( self.managed_spawn ) ) - { - self piece_deallocate_spawn(); - } - if ( isDefined( self.model ) ) - { - self.model delete(); - } - self.model = undefined; - if ( isDefined( self.unitrigger ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger ); - } - self.unitrigger = undefined; -} - -piece_hide() //checked matches cerberus output -{ - if ( isDefined( self.model ) ) - { - self.model ghost(); - } -} - -piece_show() //checked matches cerberus output -{ - if ( isDefined( self.model ) ) - { - self.model show(); - } -} - -piece_destroy() //checked matches cerberus output -{ - if ( isDefined( self.ondestroy ) ) - { - self [[ self.ondestroy ]](); - } -} - -generate_piece( buildable_piece_spawns ) //checked changed to match cerberus output -{ - piece = spawnstruct(); - piece.spawns = buildable_piece_spawns.spawns; - if ( isDefined( buildable_piece_spawns.managing_pieces ) && buildable_piece_spawns.managing_pieces ) - { - piece piece_allocate_spawn( buildable_piece_spawns ); - } - else if ( isDefined( buildable_piece_spawns.use_spawn_num ) ) - { - piece piece_set_spawn( buildable_piece_spawns.use_spawn_num ); - } - else - { - piece piece_pick_random_spawn(); - } - piece piece_spawn_in( buildable_piece_spawns ); - if ( piece.spawns.size >= 1 ) - { - piece.hud_icon = buildable_piece_spawns.hud_icon; - } - if ( isDefined( buildable_piece_spawns.onpickup ) ) - { - piece.onpickup = buildable_piece_spawns.onpickup; - } - else - { - piece.onpickup = ::onpickuputs; - } - if ( isDefined( buildable_piece_spawns.ondrop ) ) - { - piece.ondrop = buildable_piece_spawns.ondrop; - } - else - { - piece.ondrop = ::ondroputs; - } - return piece; -} - -buildable_piece_unitriggers( buildable_name, origin ) //checked changed to match cerberus output -{ - /* -/# - assert( isDefined( buildable_name ) ); -#/ -/# - assert( isDefined( level.zombie_buildables[ buildable_name ] ), "Called buildable_think() without including the buildable - " + buildable_name ); -#/ - */ - buildable = level.zombie_buildables[ buildable_name ]; - if ( !isDefined( buildable.buildablepieces ) ) - { - buildable.buildablepieces = []; - } - flag_wait( "start_zombie_round_logic" ); - buildablezone = spawnstruct(); - buildablezone.buildable_name = buildable_name; - buildablezone.buildable_slot = buildable.buildable_slot; - if ( !isDefined( buildablezone.pieces ) ) - { - buildablezone.pieces = []; - } - buildablepickups = []; - foreach ( buildablepiece in buildable.buildablepieces ) - { - if ( !isDefined( buildablepiece.generated_instances ) ) - { - buildablepiece.generated_instances = 0; - } - if ( isDefined( buildablepiece.generated_piece ) && is_true( buildablepiece.can_reuse ) ) - { - piece = buildablepiece.generated_piece; - break; - } - if ( buildablepiece.generated_instances >= buildablepiece.max_instances ) - { - piece = buildablepiece.generated_piece; - break; - } - piece = generate_piece( buildablepiece ); - buildablepiece.generated_piece = piece; - buildablepiece.generated_instances++; - if ( isDefined( buildablepiece.min_instances ) ) - { - while ( buildablepiece.generated_instances < buildablepiece.min_instances ) - { - piece = generate_piece( buildablepiece ); - buildablepiece.generated_piece = piece; - buildablepiece.generated_instances++; - } - } - buildablezone.pieces[ buildablezone.pieces.size ] = piece; - } - buildablezone.stub = self; - return buildablezone; -} - -hide_buildable_table_model( trigger_targetname ) //checked matches cerberus output -{ - trig = getent( trigger_targetname, "targetname" ); - if ( !isDefined( trig ) ) - { - return; - } - if ( isDefined( trig.target ) ) - { - model = getent( trig.target, "targetname" ); - if ( isDefined( model ) ) - { - model hide(); - model notsolid(); - } - } -} - -setup_unitrigger_buildable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) //checked matches cerberus output -{ - trig = getent( trigger_targetname, "targetname" ); - if ( !isDefined( trig ) ) - { - return; - } - return setup_unitrigger_buildable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); -} - -setup_unitrigger_buildable_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) //checked changed to match cerberus output -{ - triggers = getentarray( trigger_targetname, "targetname" ); - stubs = []; - foreach ( trig in triggers ) - { - stubs[ stubs.size ] = setup_unitrigger_buildable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); - } - return stubs; -} - -setup_unitrigger_buildable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) //checked changed to match cerberus output -{ - if ( !isDefined( trig ) ) - { - return; - } - unitrigger_stub = spawnstruct(); - unitrigger_stub.buildablestruct = level.zombie_include_buildables[ equipname ]; - angles = trig.script_angles; - if ( !isDefined( angles ) ) - { - angles = ( 0, 0, 0 ); - } - unitrigger_stub.origin = trig.origin + ( anglesToRight( angles ) * -6 ); - unitrigger_stub.angles = trig.angles; - if ( isDefined( trig.script_angles ) ) - { - unitrigger_stub.angles = trig.script_angles; - } - unitrigger_stub.equipname = equipname; - unitrigger_stub.weaponname = weaponname; - unitrigger_stub.trigger_hintstring = trigger_hintstring; - unitrigger_stub.delete_trigger = delete_trigger; - unitrigger_stub.built = 0; - unitrigger_stub.persistent = persistent; - unitrigger_stub.usetime = int( 3000 ); - unitrigger_stub.onbeginuse = ::onbeginuseuts; - unitrigger_stub.onenduse = ::onenduseuts; - unitrigger_stub.onuse = ::onuseplantobjectuts; - unitrigger_stub.oncantuse = ::oncantuseuts; - if ( isDefined( trig.script_length ) ) - { - unitrigger_stub.script_length = trig.script_length; - } - else - { - unitrigger_stub.script_length = 32; - } - if ( isDefined( trig.script_width ) ) - { - unitrigger_stub.script_width = trig.script_width; - } - else - { - unitrigger_stub.script_width = 100; - } - if ( isDefined( trig.script_height ) ) - { - unitrigger_stub.script_height = trig.script_height; - } - else - { - unitrigger_stub.script_height = 64; - } - unitrigger_stub.target = trig.target; - unitrigger_stub.targetname = trig.targetname; - unitrigger_stub.script_noteworthy = trig.script_noteworthy; - unitrigger_stub.script_parameters = trig.script_parameters; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - if ( isDefined( level.zombie_buildables[ equipname ].hint ) ) - { - unitrigger_stub.hint_string = level.zombie_buildables[ equipname ].hint; - } - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.require_look_at = 1; - unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - unitrigger_stub.prompt_and_visibility_func = ::buildabletrigger_update_prompt; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::buildable_place_think ); - unitrigger_stub.piece_trigger = trig; - trig.trigger_stub = unitrigger_stub; - unitrigger_stub.zombie_weapon_upgrade = trig.zombie_weapon_upgrade; - if ( isDefined( unitrigger_stub.target ) ) - { - unitrigger_stub.model = getent( unitrigger_stub.target, "targetname" ); - if ( isDefined( unitrigger_stub.model ) ) - { - if ( isDefined( unitrigger_stub.zombie_weapon_upgrade ) ) - { - unitrigger_stub.model useweaponhidetags( unitrigger_stub.zombie_weapon_upgrade ); - } - unitrigger_stub.model hide(); - unitrigger_stub.model notsolid(); - } - } - unitrigger_stub.buildablezone = unitrigger_stub buildable_piece_unitriggers( equipname, unitrigger_stub.origin ); - if ( delete_trigger ) - { - trig delete(); - } - level.buildable_stubs[ level.buildable_stubs.size ] = unitrigger_stub; - return unitrigger_stub; -} - -buildable_has_piece( piece ) //checked changed to match cerberus output -{ - for ( i = 0; i < self.pieces.size; i++ ) - { - if ( self.pieces[ i ].modelname == piece.modelname && self.pieces[ i ].buildablename == piece.buildablename ) - { - return 1; - } - } - return 0; -} - -buildable_set_piece_built( piece ) //checked changed to match cerberus output -{ - for ( i = 0; i < self.pieces.size; i++ ) - { - if ( self.pieces[ i ].modelname == piece.modelname && self.pieces[ i ].buildablename == piece.buildablename ) - { - self.pieces[ i ].built = 1; - } - } -} - -buildable_set_piece_building( piece ) //checked changed to match cerberus output -{ - for ( i = 0; i < self.pieces.size; i++ ) - { - if ( self.pieces[ i ].modelname == piece.modelname && self.pieces[ i ].buildablename == piece.buildablename ) - { - self.pieces[ i ] = piece; - self.pieces[ i ].building = 1; - } - } -} - -buildable_clear_piece_building( piece ) //checked matches cerberus output -{ - if ( isDefined( piece ) ) - { - piece.building = 0; - } -} - -buildable_is_piece_built( piece ) //checked partially changed to match cerberus output //changed at own discretion -{ - for ( i = 0; i < self.pieces.size; i++ ) - { - if ( self.pieces[ i ].modelname == piece.modelname && self.pieces[ i ].buildablename == piece.buildablename ) - { - if ( isDefined( self.pieces[ i ].built ) && self.pieces[ i ].built ) - { - return 1; - } - } - } - return 0; -} - -buildable_is_piece_building( piece ) -{ - for ( i = 0; i < self.pieces.size; i++ ) - { - if ( self.pieces[ i ].modelname == piece.modelname && self.pieces[ i ].buildablename == piece.buildablename ) - { - if ( isDefined( self.pieces[ i ].building ) && self.pieces[ i ].building && self.pieces[ i ] == piece ) - { - return 1; - } - } - } - return 0; -} - -buildable_is_piece_built_or_building( piece ) //checked partially changed to match cerberus output //changed at own discretion -{ - for ( i = 0; i < self.pieces.size; i++ ) - { - if ( self.pieces[ i ].modelname == piece.modelname && self.pieces[ i ].buildablename == piece.buildablename ) - { - if ( !is_true( self.pieces[ i ].built ) ) - { - if ( is_true( self.pieces[ i ].building ) ) - { - return 1; - } - } - } - i++; - } - return 0; -} - -buildable_all_built() //checked changed to match cerberus output -{ - for ( i = 0; i < self.pieces.size; i++ ) - { - if ( !is_true( self.pieces[ i ].built ) ) - { - return 0; - } - } - return 1; -} - -player_can_build( buildable, continuing ) //checked changed to match cerberus output -{ - if ( !isDefined( buildable ) ) - { - return 0; - } - if ( !isDefined( self player_get_buildable_piece( buildable.buildable_slot ) ) ) - { - return 0; - } - if ( !buildable buildable_has_piece( self player_get_buildable_piece( buildable.buildable_slot ) ) ) - { - return 0; - } - if ( is_true( continuing ) ) - { - if ( buildable buildable_is_piece_built( self player_get_buildable_piece( buildable.buildable_slot ) ) ) - { - return 0; - } - } - else if ( buildable buildable_is_piece_built_or_building( self player_get_buildable_piece( buildable.buildable_slot ) ) ) - { - return 0; - } - if ( isDefined( buildable.stub ) && isDefined( buildable.stub.custom_buildablestub_update_prompt ) && isDefined( buildable.stub.playertrigger[ 0 ] ) && isDefined( buildable.stub.playertrigger[ 0 ].stub ) && !( buildable.stub.playertrigger[ 0 ].stub [[ buildable.stub.custom_buildablestub_update_prompt ]]( self, 1, buildable.stub.playertrigger[ 0 ] ) ) ) - { - return 0; - } - return 1; -} - -player_build( buildable, pieces ) //checked partially changed to match cerberus output -{ - if ( isDefined( pieces ) ) - { - for ( i = 0; i < pieces.size; i++ ) - { - buildable buildable_set_piece_built( pieces[ i ] ); - player_destroy_piece( pieces[ i ] ); - } - } - else - { - buildable buildable_set_piece_built( self player_get_buildable_piece( buildable.buildable_slot ) ); - player_destroy_piece( self player_get_buildable_piece( buildable.buildable_slot ) ); - } - if ( isDefined( buildable.stub.model ) ) - { - i = 0; - while ( i < buildable.pieces.size ) - { - if ( isDefined( buildable.pieces[ i ].part_name ) ) - { - buildable.stub.model notsolid(); - if ( !is_true( buildable.pieces[ i ].built ) ) - { - buildable.stub.model hidepart( buildable.pieces[ i ].part_name ); - i++; - continue; - } - buildable.stub.model show(); - buildable.stub.model showpart( buildable.pieces[ i ].part_name ); - } - i++; - } - } - else if ( isplayer( self ) ) - { - self track_buildable_pieces_built( buildable ); - } - if ( buildable buildable_all_built() ) - { - self player_finish_buildable( buildable ); - buildable.stub buildablestub_finish_build( self ); - if ( isplayer( self ) ) - { - self track_buildables_built( buildable ); - } - if ( isDefined( level.buildable_built_custom_func ) ) - { - self thread [[ level.buildable_built_custom_func ]]( buildable ); - } - alias = sndbuildablecompletealias( buildable.buildable_name ); - self playsound( alias ); - } - else - { - self playsound( "zmb_buildable_piece_add" ); - /* -/# - assert( isDefined( level.zombie_buildables[ buildable.buildable_name ].building ), "Missing builing hint" ); -#/ - */ - if ( isDefined( level.zombie_buildables[ buildable.buildable_name ].building ) ) - { - return level.zombie_buildables[ buildable.buildable_name ].building; - } - } - return ""; -} - -sndbuildablecompletealias( name ) //checked matches cerberus output -{ - alias = undefined; - switch( name ) - { - case "chalk": - alias = "zmb_chalk_complete"; - break; - default: - alias = "zmb_buildable_complete"; - break; - } - return alias; -} - -player_finish_buildable( buildable ) //checked matches cerberus output -{ - buildable.built = 1; - buildable.stub.built = 1; - buildable notify( "built" ); - level.buildables_built[ buildable.buildable_name ] = 1; - level notify( buildable.buildable_name + "_built" ); -} - -buildablestub_finish_build( player ) //checked matches cerberus output -{ - player player_finish_buildable( self.buildablezone ); -} - -buildablestub_remove() //checked matches cerberus output -{ - arrayremovevalue( level.buildable_stubs, self ); -} - -buildabletrigger_update_prompt( player ) //checked matches cerberus output -{ - can_use = self.stub buildablestub_update_prompt( player ); - self sethintstring( self.stub.hint_string ); - if ( isDefined( self.stub.cursor_hint ) ) - { - if ( self.stub.cursor_hint == "HINT_WEAPON" && isDefined( self.stub.cursor_hint_weapon ) ) - { - self setcursorhint( self.stub.cursor_hint, self.stub.cursor_hint_weapon ); - } - else - { - self setcursorhint( self.stub.cursor_hint ); - } - } - return can_use; -} - -buildablestub_update_prompt( player ) //checked changed to match cerberus output -{ - if ( !self anystub_update_prompt( player ) ) - { - return 0; - } - can_use = 1; - if ( isDefined( self.buildablestub_reject_func ) ) - { - rval = self [[ self.buildablestub_reject_func ]]( player ); - if ( rval ) - { - return 0; - } - } - if ( isDefined( self.custom_buildablestub_update_prompt ) && !self [[ self.custom_buildablestub_update_prompt ]]( player ) ) - { - return 0; - } - self.cursor_hint = "HINT_NOICON"; - self.cursor_hint_weapon = undefined; - if ( isDefined( self.built ) && !self.built ) - { - slot = self.buildablestruct.buildable_slot; - if ( !isDefined( player player_get_buildable_piece( slot ) ) ) - { - if ( isDefined( level.zombie_buildables[ self.equipname ].hint_more ) ) - { - self.hint_string = level.zombie_buildables[ self.equipname ].hint_more; - } - else - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE"; - } - return 0; - } - else if ( !self.buildablezone buildable_has_piece( player player_get_buildable_piece( slot ) ) ) - { - if ( isDefined( level.zombie_buildables[ self.equipname ].hint_wrong ) ) - { - self.hint_string = level.zombie_buildables[ self.equipname ].hint_wrong; - } - else - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG"; - } - return 0; - } - else - { - /* - /# - assert( isDefined( level.zombie_buildables[ self.equipname ].hint ), "Missing buildable hint" ); - #/ - */ - if ( isDefined( level.zombie_buildables[ self.equipname ].hint ) ) - { - self.hint_string = level.zombie_buildables[ self.equipname ].hint; - } - else - { - self.hint_string = "Missing buildable hint"; - } - } - } - else if ( self.persistent == 1 ) - { - if ( maps/mp/zombies/_zm_equipment::is_limited_equipment( self.weaponname ) && maps/mp/zombies/_zm_equipment::limited_equipment_in_use( self.weaponname ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_ONLY_ONE"; - return 0; - } - if ( player has_player_equipment( self.weaponname ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_HAVE_ONE"; - return 0; - } - /* - if ( getDvarInt( #"1F0A2129" ) ) - { - self.cursor_hint = "HINT_WEAPON"; - self.cursor_hint_weapon = self.weaponname; - } - */ - self.hint_string = self.trigger_hintstring; - } - else if ( self.persistent == 2 ) - { - if ( !maps/mp/zombies/_zm_weapons::limited_weapon_below_quota( self.weaponname, undefined ) ) - { - self.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; - return 0; - } - else if ( is_true( self.bought ) ) - { - self.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; - return 0; - } - self.hint_string = self.trigger_hintstring; - } - else - { - self.hint_string = ""; - return 0; - } - return 1; -} - -player_continue_building( buildablezone, build_stub ) //checked matches cerberus output -{ - if ( !isDefined( build_stub ) ) - { - build_stub = buildablezone.stub; - } - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || self maps/mp/zombies/_zm_utility::in_revive_trigger() ) - { - return 0; - } - if ( self isthrowinggrenade() ) - { - return 0; - } - if ( !self player_can_build( buildablezone, 1 ) ) - { - return 0; - } - if ( isDefined( self.screecher ) ) - { - return 0; - } - if ( !self usebuttonpressed() ) - { - return 0; - } - slot = build_stub.buildablestruct.buildable_slot; - if ( !buildablezone buildable_is_piece_building( self player_get_buildable_piece( slot ) ) ) - { - return 0; - } - trigger = build_stub maps/mp/zombies/_zm_unitrigger::unitrigger_trigger( self ); - if ( build_stub.script_unitrigger_type == "unitrigger_radius_use" ) - { - torigin = build_stub unitrigger_origin(); - porigin = self geteye(); - radius_sq = 2.25 * build_stub.test_radius_sq; - if ( distance2dsquared( torigin, porigin ) > radius_sq ) - { - return 0; - } - } - else - { - if ( !isDefined( trigger ) || !trigger istouching( self ) ) - { - return 0; - } - } - if ( is_true( build_stub.require_look_at ) && !self is_player_looking_at( trigger.origin, 0.4 ) ) - { - return 0; - } - return 1; -} - -player_progress_bar_update( start_time, build_time ) //checked partially matches cerberus output but order of operations may need to be adjusted -{ - self endon( "entering_last_stand" ); - self endon( "death" ); - self endon( "disconnect" ); - self endon( "buildable_progress_end" ); - while ( isDefined( self ) && ( getTime() - start_time ) < build_time ) - { - progress = ( getTime() - start_time ) / build_time; - if ( progress < 0 ) - { - progress = 0; - } - if ( progress > 1 ) - { - progress = 1; - } - self.usebar updatebar( progress ); - wait 0.05; - } -} - -player_progress_bar( start_time, build_time, building_prompt ) //checked matches cerberus output -{ - self.usebar = self createprimaryprogressbar(); - self.usebartext = self createprimaryprogressbartext(); - if ( isDefined( building_prompt ) ) - { - self.usebartext settext( building_prompt ); - } - else - { - self.usebartext settext( &"ZOMBIE_BUILDING" ); - } - if ( isDefined( self ) && isDefined( start_time ) && isDefined( build_time ) ) - { - self player_progress_bar_update( start_time, build_time ); - } - self.usebartext destroyelem(); - self.usebar destroyelem(); -} - -buildable_use_hold_think_internal( player, bind_stub ) //checked changed to match cerberus output order of operations may need to be checked -{ - if ( !isDefined( bind_stub ) ) - { - bind_stub = self.stub; - } - wait 0.01; - if ( !isDefined( self ) ) - { - self notify( "build_failed" ); - if ( isDefined( player.buildableaudio ) ) - { - player.buildableaudio delete(); - player.buildableaudio = undefined; - } - return; - } - if ( !isDefined( self.usetime ) ) - { - self.usetime = int( 3000 ); - } - self.build_time = self.usetime; - self.build_start_time = getTime(); - build_time = self.build_time; - build_start_time = self.build_start_time; - player disable_player_move_states( 1 ); - player increment_is_drinking(); - orgweapon = player getcurrentweapon(); - build_weapon = "zombie_builder_zm"; - if ( isDefined( bind_stub.build_weapon ) ) - { - build_weapon = bind_stub.build_weapon; - } - player giveweapon( build_weapon ); - player switchtoweapon( build_weapon ); - slot = bind_stub.buildablestruct.buildable_slot; - bind_stub.buildablezone buildable_set_piece_building( player player_get_buildable_piece( slot ) ); - player thread player_progress_bar( build_start_time, build_time, bind_stub.building_prompt ); - if ( isDefined( level.buildable_build_custom_func ) ) - { - player thread [[ level.buildable_build_custom_func ]]( self.stub ); - } - while ( isDefined( self ) && player player_continue_building( bind_stub.buildablezone, self.stub ) && ( getTime() - self.build_start_time ) < self.build_time ) - { - wait 0.05; - } - player notify( "buildable_progress_end" ); - player maps/mp/zombies/_zm_weapons::switch_back_primary_weapon( orgweapon ); - player takeweapon( "zombie_builder_zm" ); - if ( is_true( player.is_drinking ) ) - { - player decrement_is_drinking(); - } - player enable_player_move_states(); - if ( isDefined( self ) && player player_continue_building( bind_stub.buildablezone, self.stub ) && ( getTime() - self.build_start_time ) >= self.build_time ) - { - buildable_clear_piece_building( player player_get_buildable_piece( slot ) ); - self notify( "build_succeed" ); - } - else if ( isDefined( player.buildableaudio ) ) - { - player.buildableaudio delete(); - player.buildableaudio = undefined; - } - buildable_clear_piece_building( player player_get_buildable_piece( slot ) ); - self notify( "build_failed" ); -} - -buildable_play_build_fx( player ) //checked matches cerberus output -{ - self endon( "kill_trigger" ); - self endon( "build_succeed" ); - self endon( "build_failed" ); - while ( 1 ) - { - playfx( level._effect[ "building_dust" ], player getplayercamerapos(), player.angles ); - wait 0.5; - } -} - -buildable_use_hold_think( player, bind_stub ) //checked matches cerberus output -{ - if ( !isDefined( bind_stub ) ) - { - bind_stub = self.stub; - } - self thread buildable_play_build_fx( player ); - self thread buildable_use_hold_think_internal( player, bind_stub ); - retval = self waittill_any_return( "build_succeed", "build_failed" ); - if ( retval == "build_succeed" ) - { - return 1; - } - return 0; -} - -buildable_place_think() //checked partially changed to match cerberus output //changed at own discretion -{ - self endon( "kill_trigger" ); - player_built = undefined; - while ( !is_true( self.stub.built ) ) - { - self waittill( "trigger", player ); - if ( player != self.parent_player ) - { - continue; - } - if ( isDefined( player.screecher_weapon ) ) - { - continue; - } - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0.5 ); - } - status = player player_can_build( self.stub.buildablezone ); - if ( !status ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - if ( isDefined( self.stub.oncantuse ) ) - { - self.stub [[ self.stub.oncantuse ]]( player ); - } - //continue; - } - else if ( isDefined( self.stub.onbeginuse ) ) - { - self.stub [[ self.stub.onbeginuse ]]( player ); - } - result = self buildable_use_hold_think( player ); - team = player.pers[ "team" ]; - if ( isDefined( self.stub.onenduse ) ) - { - self.stub [[ self.stub.onenduse ]]( team, player, result ); - } - if ( !result ) - { - continue; - } - if ( isDefined( self.stub.onuse ) ) - { - self.stub [[ self.stub.onuse ]]( player ); - } - slot = self.stub.buildablestruct.buildable_slot; - if ( isDefined( player player_get_buildable_piece( slot ) ) ) - { - prompt = player player_build( self.stub.buildablezone ); - player_built = player; - self.stub.hint_string = prompt; - } - self sethintstring( self.stub.hint_string ); - } - if ( isDefined( player_built ) ) - { - switch( self.stub.persistent ) - { - case 1: - self bptrigger_think_persistent( player_built ); - break; - case 0: - self bptrigger_think_one_time( player_built ); - break; - case 3: - self bptrigger_think_unbuild( player_built ); - break; - case 2: - self bptrigger_think_one_use_and_fly( player_built ); - break; - case 4: - self [[ self.stub.custom_completion_callback ]]( player_built ); - break; - } - } -} - -bptrigger_think_one_time( player_built ) //checked matches cerberus output -{ - self.stub buildablestub_remove(); - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.stub ); -} - -bptrigger_think_unbuild( player_built ) //checked matches cerberus output -{ - stub_unbuild_buildable( self.stub, 1 ); -} - -bptrigger_think_one_use_and_fly( player_built ) //checked changed to match cerberus output -{ - if ( isDefined( player_built ) ) - { - self buildabletrigger_update_prompt( player_built ); - } - if ( !maps/mp/zombies/_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) - { - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; - self sethintstring( self.stub.hint_string ); - return; - } - if ( is_true( self.stub.bought ) ) - { - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; - self sethintstring( self.stub.hint_string ); - return; - } - if ( isDefined( self.stub.model ) ) - { - self.stub.model notsolid(); - self.stub.model show(); - } - while ( self.stub.persistent == 2 ) - { - self waittill( "trigger", player ); - if ( isDefined( player.screecher_weapon ) ) - { - continue; - } - if ( !maps/mp/zombies/_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) - { - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; - self sethintstring( self.stub.hint_string ); - return; - } - if ( !is_true( self.stub.built ) ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - return; - } - if ( player != self.parent_player ) - { - continue; - } - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - } - self.stub.bought = 1; - if ( isDefined( self.stub.model ) ) - { - self.stub.model thread model_fly_away(); - } - player maps/mp/zombies/_zm_weapons::weapon_give( self.stub.weaponname ); - if ( isDefined( level.zombie_include_buildables[ self.stub.equipname ].onbuyweapon ) ) - { - self [[ level.zombie_include_buildables[ self.stub.equipname ].onbuyweapon ]]( player ); - } - if ( !maps/mp/zombies/_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) - { - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; - } - else - { - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; - } - self sethintstring( self.stub.hint_string ); - player track_buildables_pickedup( self.stub.weaponname ); - } -} - -bptrigger_think_persistent( player_built ) //checked changed to match cerberus output -{ - if ( !isDefined( player_built ) || self [[ self.stub.prompt_and_visibility_func ]]( player_built ) ) - { - if ( isDefined( self.stub.model ) ) - { - self.stub.model notsolid(); - self.stub.model show(); - } - while ( self.stub.persistent == 1 ) - { - self waittill( "trigger", player ); - if ( isDefined( player.screecher_weapon ) ) - { - continue; - } - if ( !is_true( self.stub.built ) ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - self setcursorhint( "HINT_NOICON" ); - return; - } - if ( player != self.parent_player ) - { - continue; - } - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0.5 ); - } - if ( player has_player_equipment( self.stub.weaponname ) ) - { - continue; - } - if ( isDefined( self.stub.buildablestruct.onbought ) ) - { - self [[ self.stub.buildablestruct.onbought ]]( player ); - continue; - } - else if ( !maps/mp/zombies/_zm_equipment::is_limited_equipment( self.stub.weaponname ) || !maps/mp/zombies/_zm_equipment::limited_equipment_in_use( self.stub.weaponname ) ) - { - player maps/mp/zombies/_zm_equipment::equipment_buy( self.stub.weaponname ); - player giveweapon( self.stub.weaponname ); - player setweaponammoclip( self.stub.weaponname, 1 ); - if ( isDefined( level.zombie_include_buildables[ self.stub.equipname ].onbuyweapon ) ) - { - self [[ level.zombie_include_buildables[ self.stub.equipname ].onbuyweapon ]]( player ); - } - if ( self.stub.weaponname != "keys_zm" ) - { - player setactionslot( 1, "weapon", self.stub.weaponname ); - } - self.stub.cursor_hint = "HINT_NOICON"; - self.stub.cursor_hint_weapon = undefined; - self setcursorhint( self.stub.cursor_hint ); - if ( isDefined( level.zombie_buildables[ self.stub.equipname ].bought ) ) - { - self.stub.hint_string = level.zombie_buildables[ self.stub.equipname ].bought; - } - else - { - self.stub.hint_string = ""; - } - self sethintstring( self.stub.hint_string ); - player track_buildables_pickedup( self.stub.weaponname ); - } - else - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - self.stub.cursor_hint = "HINT_NOICON"; - self.stub.cursor_hint_weapon = undefined; - self setcursorhint( self.stub.cursor_hint ); - } - } - } -} - -bptrigger_think_unbuild_no_return( player ) //checked matches cerberus output -{ - stub_unbuild_buildable( self.stub, 0 ); -} - -bpstub_set_custom_think_callback( callback ) //checked matches cerberus output -{ - self.persistent = 4; - self.custom_completion_callback = callback; -} - -model_fly_away() //checked changed to match cerberus output -{ - self moveto( self.origin + vectorScale( ( 0, 0, 1 ), 40 ), 3 ); - direction = self.origin; - direction = ( direction[ 1 ], direction[ 0 ], 0 ); - if ( direction[ 1 ] < 0 || direction[ 0 ] > 0 && direction[ 1 ] > 0 ) - { - direction = ( direction[ 0 ], direction[ 1 ] * -1, 0 ); - } - else if ( direction[ 0 ] < 0 ) - { - direction = ( direction[ 0 ] * -1, direction[ 1 ], 0 ); - } - self vibrate( direction, 10, 0.5, 4 ); - self waittill( "movedone" ); - self hide(); - playfx( level._effect[ "poltergeist" ], self.origin ); -} - -find_buildable_stub( equipname ) //checked changed to match cerberus output -{ - foreach ( stub in level.buildable_stubs ) - { - if ( stub.equipname == equipname ) - { - return stub; - } - } - return undefined; -} - -unbuild_buildable( equipname, return_pieces, origin, angles ) //checked matches cerberus output -{ - stub = find_buildable_stub( equipname ); - stub_unbuild_buildable( stub, return_pieces, origin, angles ); -} - -stub_unbuild_buildable( stub, return_pieces, origin, angles ) //checked partially changed to match cerberus output //did not change while loop to for loop -{ - if ( isDefined( stub ) ) - { - buildable = stub.buildablezone; - buildable.built = 0; - buildable.stub.built = 0; - buildable notify( "unbuilt" ); - level.buildables_built[ buildable.buildable_name ] = 0; - level notify( buildable.buildable_name + "_unbuilt" ); - i = 0; - while ( i < buildable.pieces.size ) - { - buildable.pieces[ i ].built = 0; - if ( isDefined( buildable.pieces[ i ].part_name ) ) - { - buildable.stub.model notsolid(); - if ( is_true( buildable.pieces[ i ].built ) ) - { - buildable.stub.model hidepart( buildable.pieces[ i ].part_name ); - } - else - { - buildable.stub.model show(); - buildable.stub.model showpart( buildable.pieces[ i ].part_name ); - } - } - if ( is_true( return_pieces ) ) - { - if ( isDefined( buildable.stub.str_unbuild_notify ) ) - { - buildable.pieces[ i ] thread piece_spawn_at_with_notify_delay( origin, angles, buildable.stub.str_unbuild_notify, buildable.stub.unbuild_respawn_fn ); - i++; - continue; - } - buildable.pieces[ i ] piece_spawn_at( origin, angles ); - } - i++; - } - if ( isDefined( buildable.stub.model ) ) - { - buildable.stub.model hide(); - } - } -} - -player_explode_buildable( equipname, origin, speed, return_to_spawn, return_time ) //checked changed to match cerberus output -{ - self explosiondamage( 50, origin ); - stub = find_buildable_stub( equipname ); - if ( isDefined( stub ) ) - { - buildable = stub.buildablezone; - buildable.built = 0; - buildable.stub.built = 0; - buildable notify( "unbuilt" ); - level.buildables_built[ buildable.buildable_name ] = 0; - level notify( buildable.buildable_name + "_unbuilt" ); - for ( i = 0; i < buildable.pieces.size; i++ ) - { - buildable.pieces[ i ].built = 0; - if ( isDefined( buildable.pieces[ i ].part_name ) ) - { - buildable.stub.model notsolid(); - if ( !is_true( buildable.pieces[ i ].built ) ) - { - buildable.stub.model hidepart( buildable.pieces[ i ].part_name ); - } - else - { - buildable.stub.model show(); - buildable.stub.model showpart( buildable.pieces[ i ].part_name ); - } - } - ang = randomfloat( 360 ); - h = 0.25 + randomfloat( 0.5 ); - dir = ( sin( ang ), cos( ang ), h ); - self thread player_throw_piece( buildable.pieces[ i ], origin, speed * dir, return_to_spawn, return_time ); - } - buildable.stub.model hide(); - } -} - -think_buildables() //checked changed to match cerberus output -{ - foreach ( buildable in level.zombie_include_buildables ) - { - if ( isDefined( buildable.triggerthink ) ) - { - level [[ buildable.triggerthink ]](); - wait_network_frame(); - } - } - level notify( "buildables_setup" ); -} - -buildable_trigger_think( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) //checked matches cerberus output -{ - return setup_unitrigger_buildable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); -} - -buildable_trigger_think_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) //checked matches cerberus output -{ - return setup_unitrigger_buildable_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); -} - -buildable_set_unbuild_notify_delay( str_equipname, str_unbuild_notify, unbuild_respawn_fn ) //checked matches cerberus output -{ - stub = find_buildable_stub( str_equipname ); - stub.str_unbuild_notify = str_unbuild_notify; - stub.unbuild_respawn_fn = unbuild_respawn_fn; -} - -setup_vehicle_unitrigger_buildable( parent, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) //checked matches cerberus output -{ - trig = getent( trigger_targetname, "targetname" ); - if ( !isDefined( trig ) ) - { - return; - } - unitrigger_stub = spawnstruct(); - unitrigger_stub.buildablestruct = level.zombie_include_buildables[ equipname ]; - unitrigger_stub.link_parent = parent; - unitrigger_stub.origin_parent = trig; - unitrigger_stub.trigger_targetname = trigger_targetname; - unitrigger_stub.originfunc = ::anystub_get_unitrigger_origin; - unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; - unitrigger_stub.origin = trig.origin; - unitrigger_stub.angles = trig.angles; - unitrigger_stub.equipname = equipname; - unitrigger_stub.weaponname = weaponname; - unitrigger_stub.trigger_hintstring = trigger_hintstring; - unitrigger_stub.delete_trigger = delete_trigger; - unitrigger_stub.built = 0; - unitrigger_stub.persistent = persistent; - unitrigger_stub.usetime = int( 3000 ); - unitrigger_stub.onbeginuse = ::onbeginuseuts; - unitrigger_stub.onenduse = ::onenduseuts; - unitrigger_stub.onuse = ::onuseplantobjectuts; - unitrigger_stub.oncantuse = ::oncantuseuts; - if ( isDefined( trig.script_length ) ) - { - unitrigger_stub.script_length = trig.script_length; - } - else - { - unitrigger_stub.script_length = 24; - } - if ( isDefined( trig.script_width ) ) - { - unitrigger_stub.script_width = trig.script_width; - } - else - { - unitrigger_stub.script_width = 64; - } - if ( isDefined( trig.script_height ) ) - { - unitrigger_stub.script_height = trig.script_height; - } - else - { - unitrigger_stub.script_height = 24; - } - if ( isDefined( trig.radius ) ) - { - unitrigger_stub.radius = trig.radius; - } - else - { - unitrigger_stub.radius = 64; - } - unitrigger_stub.target = trig.target; - unitrigger_stub.targetname = trig.targetname + "_trigger"; - unitrigger_stub.script_noteworthy = trig.script_noteworthy; - unitrigger_stub.script_parameters = trig.script_parameters; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - if ( isDefined( level.zombie_buildables[ equipname ].hint ) ) - { - unitrigger_stub.hint_string = level.zombie_buildables[ equipname ].hint; - } - unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - unitrigger_stub.require_look_at = 1; - unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - unitrigger_stub.prompt_and_visibility_func = ::buildabletrigger_update_prompt; - maps/mp/zombies/_zm_unitrigger::register_unitrigger( unitrigger_stub, ::buildable_place_think ); - unitrigger_stub.piece_trigger = trig; - trig.trigger_stub = unitrigger_stub; - unitrigger_stub.buildablezone = unitrigger_stub buildable_piece_unitriggers( equipname, unitrigger_stub.origin ); - if ( delete_trigger ) - { - trig delete(); - } - level.buildable_stubs[ level.buildable_stubs.size ] = unitrigger_stub; - return unitrigger_stub; -} - -vehicle_buildable_trigger_think( vehicle, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) //checked matches cerberus output -{ - return setup_vehicle_unitrigger_buildable( vehicle, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); -} - -ai_buildable_trigger_think( parent, equipname, weaponname, trigger_hintstring, persistent ) //checked matches cerberus output -{ - unitrigger_stub = spawnstruct(); - unitrigger_stub.buildablestruct = level.zombie_include_buildables[ equipname ]; - unitrigger_stub.link_parent = parent; - unitrigger_stub.origin_parent = parent; - unitrigger_stub.originfunc = ::anystub_get_unitrigger_origin; - unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; - unitrigger_stub.origin = parent.origin; - unitrigger_stub.angles = parent.angles; - unitrigger_stub.equipname = equipname; - unitrigger_stub.weaponname = weaponname; - unitrigger_stub.trigger_hintstring = trigger_hintstring; - unitrigger_stub.delete_trigger = 1; - unitrigger_stub.built = 0; - unitrigger_stub.persistent = persistent; - unitrigger_stub.usetime = int( 3000 ); - unitrigger_stub.onbeginuse = ::onbeginuseuts; - unitrigger_stub.onenduse = ::onenduseuts; - unitrigger_stub.onuse = ::onuseplantobjectuts; - unitrigger_stub.oncantuse = ::oncantuseuts; - unitrigger_stub.script_length = 64; - unitrigger_stub.script_width = 64; - unitrigger_stub.script_height = 54; - unitrigger_stub.radius = 64; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - if ( isDefined( level.zombie_buildables[ equipname ].hint ) ) - { - unitrigger_stub.hint_string = level.zombie_buildables[ equipname ].hint; - } - unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - unitrigger_stub.require_look_at = 0; - unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - unitrigger_stub.prompt_and_visibility_func = ::buildabletrigger_update_prompt; - maps/mp/zombies/_zm_unitrigger::register_unitrigger( unitrigger_stub, ::buildable_place_think ); - unitrigger_stub.buildablezone = unitrigger_stub buildable_piece_unitriggers( equipname, unitrigger_stub.origin ); - level.buildable_stubs[ level.buildable_stubs.size ] = unitrigger_stub; - return unitrigger_stub; -} - -onpickuputs( player ) //checked matches cerberus output -{ - /* -/# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Buildable piece recovered by - " + player.name ); -#/ - } - */ -} - -ondroputs( player ) //checked matches cerberus output -{ - /* -/# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Buildable piece dropped by - " + player.name ); -#/ - } - */ - player notify( "event_ended" ); -} - -onbeginuseuts( player ) //checked matches cerberus output -{ - /* -/# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Buildable piece begin use by - " + player.name ); -#/ - } - */ - if ( isDefined( self.buildablestruct.onbeginuse ) ) - { - self [[ self.buildablestruct.onbeginuse ]]( player ); - } - if ( isDefined( player ) && !isDefined( player.buildableaudio ) ) - { - alias = sndbuildableusealias( self.targetname ); - player.buildableaudio = spawn( "script_origin", player.origin ); - player.buildableaudio playloopsound( alias ); - } -} - -sndbuildableusealias( name ) //checked matches cerberus output -{ - alias = undefined; - switch( name ) - { - case "cell_door_trigger": - alias = "zmb_jail_buildable"; - break; - case "generator_use_trigger": - alias = "zmb_generator_buildable"; - break; - case "chalk_buildable_trigger": - alias = "zmb_chalk_loop"; - break; - default: - alias = "zmb_buildable_loop"; - break; - } - return alias; -} - -onenduseuts( team, player, result ) //checked matches cerberus output -{ - /* -/# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Buildable piece end use by - " + player.name ); -#/ - } - */ - if ( !isDefined( player ) ) - { - return; - } - if ( isDefined( player.buildableaudio ) ) - { - player.buildableaudio delete(); - player.buildableaudio = undefined; - } - if ( isDefined( self.buildablestruct.onenduse ) ) - { - self [[ self.buildablestruct.onenduse ]]( team, player, result ); - } - player notify( "event_ended" ); -} - -oncantuseuts( player ) //checked matches cerberus output -{ - /* -/# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Buildable piece can't use by - " + player.name ); -#/ - } - */ - if ( isDefined( self.buildablestruct.oncantuse ) ) - { - self [[ self.buildablestruct.oncantuse ]]( player ); - } -} - -onuseplantobjectuts( player ) //checked matches cerberus output -{ - /* -/# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Buildable piece crafted by - " + player.name ); -#/ - } - */ - if ( isDefined( self.buildablestruct.onuseplantobject ) ) - { - self [[ self.buildablestruct.onuseplantobject ]]( player ); - } - player notify( "bomb_planted" ); -} - -add_zombie_buildable_vox_category( buildable_name, vox_id ) //checked matches cerberus output -{ - buildable_struct = level.zombie_include_buildables[ buildable_name ]; - buildable_struct.vox_id = vox_id; -} - -add_zombie_buildable_piece_vox_category( buildable_name, vox_id, timer ) //checked matches cerberus output -{ - buildable_struct = level.zombie_include_buildables[ buildable_name ]; - buildable_struct.piece_vox_id = vox_id; - buildable_struct.piece_vox_timer = timer; -} - -is_buildable() //checked matches cerberus output -{ - if ( !isDefined( level.zombie_buildables ) ) - { - return 0; - } - if ( isDefined( self.zombie_weapon_upgrade ) && isDefined( level.zombie_buildables[ self.zombie_weapon_upgrade ] ) ) - { - return 1; - } - if ( isDefined( self.script_noteworthy ) && self.script_noteworthy == "specialty_weapupgrade" ) - { - if ( isDefined( level.buildables_built[ "pap" ] ) && level.buildables_built[ "pap" ] ) - { - return 0; - } - return 1; - } - return 0; -} - -buildable_crafted() //checked matches cerberus output -{ - self.pieces--; - -} - -buildable_complete() //checked matches cerberus output -{ - if ( self.pieces <= 0 ) - { - return 1; - } - return 0; -} - -get_buildable_hint( buildable_name ) //checked matches cerberus output -{ - /* -/# - assert( isDefined( level.zombie_buildables[ buildable_name ] ), buildable_name + " was not included or is not part of the zombie weapon list." ); -#/ - */ - return level.zombie_buildables[ buildable_name ].hint; -} - -delete_on_disconnect( buildable, self_notify, skip_delete ) //checked matches cerberus output -{ - buildable endon( "death" ); - self waittill( "disconnect" ); - if ( isDefined( self_notify ) ) - { - self notify( self_notify ); - } - if ( isDefined( skip_delete ) && !skip_delete ) - { - if ( isDefined( buildable.stub ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( buildable.stub ); - buildable.stub = undefined; - } - if ( isDefined( buildable ) ) - { - buildable delete(); - } - } -} - -get_buildable_pickup( buildablename, modelname ) //checked changed to match cerberus output -{ - foreach ( buildablepickup in level.buildablepickups ) - { - if ( buildablepickup[ 0 ].buildablestruct.name == buildablename && buildablepickup[ 0 ].visuals[ 0 ].model == modelname ) - { - return buildablepickup[ 0 ]; - } - } - return undefined; -} - -track_buildable_piece_pickedup( piece ) //checked matches cerberus output -{ - if ( !isDefined( piece ) || !isDefined( piece.buildablename ) ) - { - /* -/# - println( "STAT TRACKING FAILURE: NOT DEFINED IN track_buildable_piece_pickedup() \n" ); -#/ - */ - return; - } - self add_map_buildable_stat( piece.buildablename, "pieces_pickedup", 1 ); - buildable_struct = level.zombie_include_buildables[ piece.buildablename ]; - if ( isDefined( buildable_struct.piece_vox_id ) ) - { - if ( isDefined( self.a_buildable_piece_pickedup_vox_cooldown ) && isinarray( self.a_buildable_piece_pickedup_vox_cooldown, buildable_struct.piece_vox_id ) ) - { - return; - } - self thread do_player_general_vox( "general", buildable_struct.piece_vox_id + "_pickup" ); - if ( isDefined( buildable_struct.piece_vox_timer ) ) - { - self thread buildable_piece_pickedup_vox_cooldown( buildable_struct.piece_vox_id, buildable_struct.piece_vox_timer ); - } - } - else - { - self thread do_player_general_vox( "general", "build_pickup" ); - } -} - -buildable_piece_pickedup_vox_cooldown( piece_vox_id, timer ) //checked matches cerberus output -{ - self endon( "disconnect" ); - if ( !isDefined( self.a_buildable_piece_pickedup_vox_cooldown ) ) - { - self.a_buildable_piece_pickedup_vox_cooldown = []; - } - self.a_buildable_piece_pickedup_vox_cooldown[ self.a_buildable_piece_pickedup_vox_cooldown.size ] = piece_vox_id; - wait timer; - arrayremovevalue( self.a_buildable_piece_pickedup_vox_cooldown, piece_vox_id ); -} - -track_buildable_pieces_built( buildable ) //checked matches cerberus output -{ - if ( !isDefined( buildable ) || !isDefined( buildable.buildable_name ) ) - { - /* -/# - println( "STAT TRACKING FAILURE: NOT DEFINED IN track_buildable_pieces_built() \n" ); -#/ - */ - return; - } - bname = buildable.buildable_name; - if ( isDefined( buildable.stat_name ) ) - { - bname = buildable.stat_name; - } - self add_map_buildable_stat( bname, "pieces_built", 1 ); - if ( !buildable buildable_all_built() ) - { - if ( isDefined( level.zombie_include_buildables[ buildable.buildable_name ] ) && isDefined( level.zombie_include_buildables[ buildable.buildable_name ].snd_build_add_vo_override ) ) - { - self thread [[ level.zombie_include_buildables[ buildable.buildable_name ].snd_build_add_vo_override ]](); - return; - } - else - { - self thread do_player_general_vox( "general", "build_add" ); - } - } -} - -track_buildables_built( buildable ) //checked matches cerberus output -{ - if ( !isDefined( buildable ) || !isDefined( buildable.buildable_name ) ) - { - /* -/# - println( "STAT TRACKING FAILURE: NOT DEFINED IN track_buildables_built() \n" ); -#/ - */ - return; - } - bname = buildable.buildable_name; - if ( isDefined( buildable.stat_name ) ) - { - bname = buildable.stat_name; - } - self add_map_buildable_stat( bname, "buildable_built", 1 ); - self maps/mp/zombies/_zm_stats::increment_client_stat( "buildables_built", 0 ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "buildables_built" ); - if ( isDefined( buildable.stub.buildablestruct.vox_id ) ) - { - self thread do_player_general_vox( "general", "build_" + buildable.stub.buildablestruct.vox_id + "_final" ); - } -} - -track_buildables_pickedup( buildable ) //checked matches cerberus output -{ - if ( !isDefined( buildable ) ) - { - /* -/# - println( "STAT TRACKING FAILURE: NOT DEFINED IN track_buildables_pickedup() \n" ); -#/ - */ - return; - } - stat_name = get_buildable_stat_name( buildable ); - if ( !isDefined( stat_name ) ) - { - /* -/# - println( "STAT TRACKING FAILURE: NO STAT NAME FOR " + buildable + "\n" ); -#/ - */ - return; - } - self add_map_buildable_stat( stat_name, "buildable_pickedup", 1 ); - self say_pickup_buildable_vo( buildable, 0 ); -} - -track_buildables_planted( equipment ) //checked matches cerberus output -{ - if ( !isDefined( equipment ) ) - { - /* -/# - println( "STAT TRACKING FAILURE: NOT DEFINED for track_buildables_planted() \n" ); -#/ - */ - return; - } - buildable_name = undefined; - if ( isDefined( equipment.name ) ) - { - buildable_name = get_buildable_stat_name( equipment.name ); - } - if ( !isDefined( buildable_name ) ) - { - /* -/# - println( "STAT TRACKING FAILURE: NO BUILDABLE NAME FOR track_buildables_planted() " + equipment.name + "\n" ); -#/ - */ - return; - } - maps/mp/_demo::bookmark( "zm_player_buildable_placed", getTime(), self ); - self add_map_buildable_stat( buildable_name, "buildable_placed", 1 ); - vo_name = "build_plc_" + buildable_name; - if ( buildable_name == "electric_trap" ) - { - vo_name = "build_plc_trap"; - } - if ( !is_true( self.buildable_timer ) ) - { - self thread do_player_general_vox( "general", vo_name ); - self thread placed_buildable_vo_timer(); - } -} - -placed_buildable_vo_timer() //checked matches cerberus output -{ - self endon( "disconnect" ); - self.buildable_timer = 1; - wait 60; - self.buildable_timer = 0; -} - -buildable_pickedup_timer() //checked matches cerberus output -{ - self endon( "disconnect" ); - self.buildable_pickedup_timer = 1; - wait 60; - self.buildable_pickedup_timer = 0; -} - -track_planted_buildables_pickedup( equipment ) //checked changed to match cerberus output -{ - if ( !isDefined( equipment ) ) - { - return; - } - if ( equipment == "equip_turbine_zm" || equipment == "equip_turret_zm" || equipment == "equip_electrictrap_zm" || equipment == "riotshield_zm" ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "planted_buildables_pickedup", 0 ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "planted_buildables_pickedup" ); - } - if ( !is_true( self.buildable_pickedup_timer ) ) - { - self say_pickup_buildable_vo( equipment, 1 ); - self thread buildable_pickedup_timer(); - } -} - -track_placed_buildables( buildable_name ) //checked matches cerberus output -{ - if ( !isDefined( buildable_name ) ) - { - return; - } - self add_map_buildable_stat( buildable_name, "buildable_placed", 1 ); - vo_name = undefined; - if ( buildable_name == level.riotshield_name ) - { - vo_name = "build_plc_shield"; - } - if ( !isDefined( vo_name ) ) - { - return; - } - self thread do_player_general_vox( "general", vo_name ); -} - -add_map_buildable_stat( piece_name, stat_name, value ) //checked changed to match cerberus output -{ - if ( isDefined( piece_name ) || piece_name == "sq_common" || piece_name == "keys_zm" || piece_name == "oillamp_zm" ) - { - return; - } - if ( is_true( level.zm_disable_recording_stats ) || is_true( level.zm_disable_recording_buildable_stats ) ) - { - return; - } - self adddstat( "buildables", piece_name, stat_name, value ); -} - -say_pickup_buildable_vo( buildable_name, world ) //checked matches cerberus output -{ - if ( is_true( self.buildable_pickedup_timer ) ) - { - return; - } - name = get_buildable_vo_name( buildable_name ); - if ( !isDefined( name ) ) - { - return; - } - vo_name = "build_pck_b" + name; - if ( is_true( world ) ) - { - vo_name = "build_pck_w" + name; - } - if ( !isDefined( level.transit_buildable_vo_override ) || !( self [[ level.transit_buildable_vo_override ]]( name, world ) ) ) - { - self thread do_player_general_vox( "general", vo_name ); - self thread buildable_pickedup_timer(); - } -} - -get_buildable_vo_name( buildable_name ) //checked matches cerberus output -{ - switch( buildable_name ) - { - case "equip_turbine_zm": - return "turbine"; - case "equip_turret_zm": - return "turret"; - case "equip_electrictrap_zm": - return "trap"; - case "riotshield_zm": - return "shield"; - case "jetgun_zm": - return "jetgun"; - case "equip_springpad_zm": - return "springpad_zm"; - case "equip_slipgun_zm": - return "slipgun_zm"; - case "equip_headchopper_zm": - return "headchopper_zm"; - case "equip_subwoofer_zm": - return "subwoofer_zm"; - } - return undefined; -} - -get_buildable_stat_name( buildable ) //checked matches cerberus output -{ - if ( isDefined( buildable ) ) - { - switch( buildable ) - { - case "equip_turbine_zm": - return "turbine"; - case "equip_turret_zm": - return "turret"; - case "equip_electrictrap_zm": - return "electric_trap"; - case "equip_springpad_zm": - return "springpad_zm"; - case "equip_slipgun_zm": - return "slipgun_zm"; - case "equip_headchopper_zm": - return "headchopper_zm"; - case "equip_subwoofer_zm": - return "subwoofer_zm"; - } - return undefined; - } -} - - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_chugabud.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_chugabud.gsc deleted file mode 100644 index cb9a6dd..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_chugabud.gsc +++ /dev/null @@ -1,801 +0,0 @@ -#include maps/mp/_visionset_mgr; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_weap_cymbal_monkey; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_clone; -#include maps/mp/zombies/_zm_chugabud; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; -#include maps/mp/zombies/_zm_perks; - -init() //checked matches cerberus output -{ - level.chugabud_laststand_func = ::chugabud_laststand; - level thread chugabud_hostmigration(); - level._effect[ "chugabud_revive_fx" ] = loadfx( "weapon/quantum_bomb/fx_player_position_effect" ); - level._effect[ "chugabud_bleedout_fx" ] = loadfx( "weapon/quantum_bomb/fx_player_position_effect" ); - add_custom_limited_weapon_check( ::is_weapon_available_in_chugabud_corpse ); -} - -chugabug_precache() //checked matches cerberus output -{ -} - -chugabud_player_init() //checked matches cerberus output -{ -} - -chugabud_laststand() //checked changed to match cerberus output -{ - self endon( "player_suicide" ); - self endon( "disconnect" ); - self endon( "chugabud_bleedout" ); - self maps/mp/zombies/_zm_laststand::increment_downed_stat(); - self.ignore_insta_kill = 1; - self.health = self.maxhealth; - self maps/mp/zombies/_zm_chugabud::chugabud_save_loadout(); - self maps/mp/zombies/_zm_chugabud::chugabud_fake_death(); - wait 3; - if ( is_true( self.insta_killed ) || isDefined( self.disable_chugabud_corpse ) ) - { - create_corpse = 0; - } - else - { - create_corpse = 1; - } - if ( create_corpse == 1 ) - { - if ( isDefined( level._chugabug_reject_corpse_override_func ) ) - { - reject_corpse = self [[ level._chugabug_reject_corpse_override_func ]]( self.origin ); - if ( reject_corpse ) - { - create_corpse = 0; - } - } - } - if ( create_corpse == 1 ) - { - self thread activate_chugabud_effects_and_audio(); - corpse = self chugabud_spawn_corpse(); - corpse thread chugabud_corpse_revive_icon( self ); - self.e_chugabud_corpse = corpse; - corpse thread chugabud_corpse_cleanup_on_spectator( self ); - if ( isDefined( level.whos_who_client_setup ) ) - { - corpse setclientfield( "clientfield_whos_who_clone_glow_shader", 1 ); - } - } - self chugabud_fake_revive(); - wait 0.1; - self.ignore_insta_kill = undefined; - self.disable_chugabud_corpse = undefined; - if ( create_corpse == 0 ) - { - self notify( "chugabud_effects_cleanup" ); - return; - } - bleedout_time = getDvarFloat( "player_lastStandBleedoutTime" ); - self thread chugabud_bleed_timeout( bleedout_time, corpse ); - self thread chugabud_handle_multiple_instances( corpse ); - corpse waittill( "player_revived", e_reviver ); - if ( isDefined( e_reviver ) && e_reviver == self ) - { - self notify( "whos_who_self_revive" ); - } - self perk_abort_drinking( 0.1 ); - self maps/mp/zombies/_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); - self setorigin( corpse.origin ); - self setplayerangles( corpse.angles ); - if ( self player_is_in_laststand() ) - { - self thread chugabud_laststand_cleanup( corpse, "player_revived" ); - self enableweaponcycling(); - self enableoffhandweapons(); - self auto_revive( self, 1 ); - return; - } - self chugabud_laststand_cleanup( corpse, undefined ); -} - -chugabud_laststand_cleanup( corpse, str_notify ) //checked matches cerberus output -{ - if ( isDefined( str_notify ) ) - { - self waittill( str_notify ); - } - self chugabud_give_loadout(); - self chugabud_corpse_cleanup( corpse, 1 ); -} - -chugabud_bleed_timeout( delay, corpse ) //checked changed to match cerberus output -{ - self endon( "player_suicide" ); - self endon( "disconnect" ); - corpse endon( "death" ); - wait delay; - if ( isDefined( corpse.revivetrigger ) ) - { - while ( corpse.revivetrigger.beingrevived ) - { - wait 0.01; - } - } - if ( isDefined( self.loadout.perks ) && flag( "solo_game" ) ) - { - for ( i = 0; i < self.loadout.perks.size; i++ ) - { - perk = self.loadout.perks[ i ]; - if ( perk == "specialty_quickrevive" ) - { - arrayremovevalue( self.loadout.perks, self.loadout.perks[ i ] ); - corpse notify( "player_revived" ); - return; - } - } - } - self chugabud_corpse_cleanup( corpse, 0 ); -} - -chugabud_corpse_cleanup( corpse, was_revived ) //checked matches cerberus output -{ - self notify( "chugabud_effects_cleanup" ); - if ( was_revived ) - { - playsoundatposition( "evt_ww_appear", corpse.origin ); - playfx( level._effect[ "chugabud_revive_fx" ], corpse.origin ); - } - else - { - playsoundatposition( "evt_ww_disappear", corpse.origin ); - playfx( level._effect[ "chugabud_bleedout_fx" ], corpse.origin ); - self notify( "chugabud_bleedout" ); - } - if ( isDefined( corpse.revivetrigger ) ) - { - corpse notify( "stop_revive_trigger" ); - corpse.revivetrigger delete(); - corpse.revivetrigger = undefined; - } - if ( isDefined( corpse.revive_hud_elem ) ) - { - corpse.revive_hud_elem destroy(); - corpse.revive_hud_elem = undefined; - } - self.loadout = undefined; - wait 0.1; - corpse delete(); - self.e_chugabud_corpse = undefined; -} - -chugabud_handle_multiple_instances( corpse ) //checked matches cerberus output -{ - corpse endon( "death" ); - self waittill( "perk_chugabud_activated" ); - self chugabud_corpse_cleanup( corpse, 0 ); -} - -chugabud_spawn_corpse() //checked matches cerberus output -{ - corpse = maps/mp/zombies/_zm_clone::spawn_player_clone( self, self.origin, undefined, self.whos_who_shader ); - corpse.angles = self.angles; - corpse maps/mp/zombies/_zm_clone::clone_give_weapon( "m1911_zm" ); - corpse maps/mp/zombies/_zm_clone::clone_animate( "laststand" ); - corpse.revive_hud = self chugabud_revive_hud_create(); - corpse thread maps/mp/zombies/_zm_laststand::revive_trigger_spawn(); - return corpse; -} - -chugabud_revive_hud_create() //checked matches cerberus output -{ - self.revive_hud = newclienthudelem( self ); - self.revive_hud.alignx = "center"; - self.revive_hud.aligny = "middle"; - self.revive_hud.horzalign = "center"; - self.revive_hud.vertalign = "bottom"; - self.revive_hud.y = -50; - self.revive_hud.foreground = 1; - self.revive_hud.font = "default"; - self.revive_hud.fontscale = 1.5; - self.revive_hud.alpha = 0; - self.revive_hud.color = ( 1, 1, 1 ); - self.revive_hud settext( "" ); - return self.revive_hud; -} - -chugabud_save_loadout() //checked changed to match cerberus output -{ - primaries = self getweaponslistprimaries(); - currentweapon = self getcurrentweapon(); - self.loadout = spawnstruct(); - self.loadout.player = self; - self.loadout.weapons = []; - self.loadout.score = self.score; - self.loadout.current_weapon = -1; - index = 0; - foreach ( weapon in primaries ) - { - self.loadout.weapons[ index ] = maps/mp/zombies/_zm_weapons::get_player_weapondata( self, weapon ); - if ( weapon == currentweapon || self.loadout.weapons[ index ][ "alt_name" ] == currentweapon ) - { - self.loadout.current_weapon = index; - } - index++; - } - self.loadout.equipment = self get_player_equipment(); - if ( isDefined( self.loadout.equipment ) ) - { - self equipment_take( self.loadout.equipment ); - } - self.loadout save_weapons_for_chugabud( self ); - if ( self hasweapon( "claymore_zm" ) ) - { - self.loadout.hasclaymore = 1; - self.loadout.claymoreclip = self getweaponammoclip( "claymore_zm" ); - } - self.loadout.perks = chugabud_save_perks( self ); - self chugabud_save_grenades(); - if ( maps/mp/zombies/_zm_weap_cymbal_monkey::cymbal_monkey_exists() ) - { - self.loadout.zombie_cymbal_monkey_count = self getweaponammoclip( "cymbal_monkey_zm" ); - } -} - -chugabud_save_grenades() //checked matches cerberus output -{ - if ( self hasweapon( "emp_grenade_zm" ) ) - { - self.loadout.hasemp = 1; - self.loadout.empclip = self getweaponammoclip( "emp_grenade_zm" ); - } - lethal_grenade = self get_player_lethal_grenade(); - if ( self hasweapon( lethal_grenade ) ) - { - self.loadout.lethal_grenade = lethal_grenade; - self.loadout.lethal_grenade_count = self getweaponammoclip( lethal_grenade ); - } - else - { - self.loadout.lethal_grenade = undefined; - } -} - -chugabud_give_loadout() //checked partially changed to match cerberus output continues in for loops bad see the github for more info -{ - self takeallweapons(); - loadout = self.loadout; - primaries = self getweaponslistprimaries(); - if ( loadout.weapons.size > 1 || primaries.size > 1 ) - { - foreach ( weapon in primaries ) - { - self takeweapon( weapon ); - } - } - i = 0; - while ( i < loadout.weapons.size ) - { - if ( !isDefined( loadout.weapons[ i ] ) ) - { - i++; - continue; - } - if ( loadout.weapons[ i ][ "name" ] == "none" ) - { - i++; - continue; - } - self maps/mp/zombies/_zm_weapons::weapondata_give( loadout.weapons[ i ] ); - i++; - } - if ( loadout.current_weapon >= 0 && isDefined( loadout.weapons[ loadout.current_weapon ][ "name" ] ) ) - { - self switchtoweapon( loadout.weapons[ loadout.current_weapon ][ "name" ] ); - } - self giveweapon( "knife_zm" ); - self maps/mp/zombies/_zm_equipment::equipment_give( self.loadout.equipment ); - loadout restore_weapons_for_chugabud( self ); - self chugabud_restore_claymore(); - self.score = loadout.score; - self.pers[ "score" ] = loadout.score; - perk_array = maps/mp/zombies/_zm_perks::get_perk_array( 1 ); - for ( i = 0; i < perk_array.size; i++ ) - { - perk = perk_array[ i ]; - self unsetperk( perk ); - self.num_perks--; - self set_perk_clientfield( perk, 0 ); - } - if ( isDefined( loadout.perks ) && loadout.perks.size > 0 ) - { - i = 0; - while ( i < loadout.perks.size ) - { - if ( self hasperk( loadout.perks[ i ] ) ) - { - i++; - continue; - } - if ( loadout.perks[ i ] == "specialty_quickrevive" && flag( "solo_game" ) ) - { - level.solo_game_free_player_quickrevive = 1; - } - if ( loadout.perks[ i ] == "specialty_finalstand" ) - { - i++; - continue; - } - maps/mp/zombies/_zm_perks::give_perk( loadout.perks[ i ] ); - i++; - } - } - self chugabud_restore_grenades(); - if ( maps/mp/zombies/_zm_weap_cymbal_monkey::cymbal_monkey_exists() ) - { - if ( loadout.zombie_cymbal_monkey_count ) - { - self maps/mp/zombies/_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); - self setweaponammoclip( "cymbal_monkey_zm", loadout.zombie_cymbal_monkey_count ); - } - } -} - -chugabud_restore_grenades() //checked matches cerberus output -{ - if ( is_true( self.loadout.hasemp ) ) - { - self giveweapon( "emp_grenade_zm" ); - self setweaponammoclip( "emp_grenade_zm", self.loadout.empclip ); - } - if ( isDefined( self.loadout.lethal_grenade ) ) - { - self giveweapon( self.loadout.lethal_grenade ); - self setweaponammoclip( self.loadout.lethal_grenade, self.loadout.lethal_grenade_count ); - } -} - -chugabud_restore_claymore() //checked matches cerberus output -{ - if ( is_true( self.loadout.hasclaymore ) && !self hasweapon( "claymore_zm" ) ) - { - self giveweapon( "claymore_zm" ); - self set_player_placeable_mine( "claymore_zm" ); - self setactionslot( 4, "weapon", "claymore_zm" ); - self setweaponammoclip( "claymore_zm", self.loadout.claymoreclip ); - } -} - -chugabud_fake_death() //checked matches cerberus output -{ - level notify( "fake_death" ); - self notify( "fake_death" ); - self takeallweapons(); - self allowstand( 0 ); - self allowcrouch( 0 ); - self allowprone( 1 ); - self.ignoreme = 1; - self enableinvulnerability(); - wait 0.1; - self freezecontrols( 1 ); - wait 0.9; -} - -chugabud_fake_revive() //checked matches cerberus output -{ - level notify( "fake_revive" ); - self notify( "fake_revive" ); - playsoundatposition( "evt_ww_disappear", self.origin ); - playfx( level._effect[ "chugabud_revive_fx" ], self.origin ); - spawnpoint = chugabud_get_spawnpoint(); - if ( isDefined( level._chugabud_post_respawn_override_func ) ) - { - self [[ level._chugabud_post_respawn_override_func ]]( spawnpoint.origin ); - } - if ( isDefined( level.chugabud_force_corpse_position ) ) - { - if ( isDefined( self.e_chugabud_corpse ) ) - { - self.e_chugabud_corpse forceteleport( level.chugabud_force_corpse_position ); - } - level.chugabud_force_corpse_position = undefined; - } - if ( isDefined( level.chugabud_force_player_position ) ) - { - spawnpoint.origin = level.chugabud_force_player_position; - level.chugabud_force_player_position = undefined; - } - self setorigin( spawnpoint.origin ); - self setplayerangles( spawnpoint.angles ); - playsoundatposition( "evt_ww_appear", spawnpoint.origin ); - playfx( level._effect[ "chugabud_revive_fx" ], spawnpoint.origin ); - self allowstand( 1 ); - self allowcrouch( 1 ); - self allowprone( 1 ); - self.ignoreme = 0; - self setstance( "stand" ); - self freezecontrols( 0 ); - self giveweapon( "knife_zm" ); - self give_start_weapon( 1 ); - self.score = self.loadout.score; - self.pers[ "score" ] = self.loadout.score; - self giveweapon( "frag_grenade_zm" ); - self setweaponammoclip( "frag_grenade_zm", 2 ); - self chugabud_restore_claymore(); - wait 1; - self disableinvulnerability(); -} - -chugabud_get_spawnpoint() //checked partially changed to match cerberus output nested foreach is probably bad -{ - spawnpoint = undefined; - if ( get_chugabug_spawn_point_from_nodes( self.origin, 500, 700, 64, 1 ) ) - { - spawnpoint = level.chugabud_spawn_struct; - } - if ( !isDefined( spawnpoint ) ) - { - if ( get_chugabug_spawn_point_from_nodes( self.origin, 100, 400, 64, 1 ) ) - { - spawnpoint = level.chugabud_spawn_struct; - } - } - if ( !isDefined( spawnpoint ) ) - { - if ( get_chugabug_spawn_point_from_nodes( self.origin, 50, 400, 256, 0 ) ) - { - spawnpoint = level.chugabud_spawn_struct; - } - } - if ( !isDefined( spawnpoint ) ) - { - spawnpoint = maps/mp/zombies/_zm::check_for_valid_spawn_near_team( self, 1 ); - } - if ( !isDefined( spawnpoint ) ) - { - match_string = ""; - location = level.scr_zm_map_start_location; - if ( (location == "default" || location == "" ) && isdefined( level.default_start_location ) ) - { - location = level.default_start_location; - } - match_string = level.scr_zm_ui_gametype + "_" + location; - spawnpoints = []; - structs = getstructarray( "initial_spawn", "script_noteworthy" ); - if ( isdefined( structs ) ) - { - foreach ( struct in structs ) - { - if ( isdefined( struct.script_string ) ) - { - tokens = strtok( struct.script_string, " " ); - i = 0; - while ( i < tokens.size ) - { - if ( tokens[ i ] == match_string ) - { - spawnpoints[ spawnpoints.size ] = struct; - } - i++; - } - } - } - } - if ( !isDefined( spawnpoints ) || spawnpoints.size == 0 ) - { - spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); - } - /* -/# - assert( isDefined( spawnpoints ), "Could not find initial spawn points!" ); -#/ - */ - spawnpoint = maps/mp/zombies/_zm::getfreespawnpoint( spawnpoints, self ); - } - return spawnpoint; -} - -get_chugabug_spawn_point_from_nodes( v_origin, min_radius, max_radius, max_height, ignore_targetted_nodes ) //checked partially changed to match cerberus output changed at own discretion -{ - if ( !isDefined( level.chugabud_spawn_struct ) ) - { - level.chugabud_spawn_struct = spawnstruct(); - } - found_node = undefined; - a_nodes = getnodesinradiussorted( v_origin, max_radius, min_radius, max_height, "pathnodes" ); - if ( isDefined( a_nodes ) && a_nodes.size > 0 ) - { - a_player_volumes = getentarray( "player_volume", "script_noteworthy" ); - index = a_nodes.size - 1; - i = index; - while ( i >= 0 ) - { - n_node = a_nodes[ i ]; - if ( ignore_targetted_nodes == 1 ) - { - if ( isDefined( n_node.target ) ) - { - i--; - continue; - } - } - if ( !positionwouldtelefrag( n_node.origin ) ) - { - if ( maps/mp/zombies/_zm_utility::check_point_in_enabled_zone( n_node.origin, 1, a_player_volumes ) ) - { - v_start = ( n_node.origin[ 0 ], n_node.origin[ 1 ], n_node.origin[ 2 ] + 30 ); - v_end = ( n_node.origin[ 0 ], n_node.origin[ 1 ], n_node.origin[ 2 ] - 30 ); - trace = bullettrace( v_start, v_end, 0, undefined ); - if ( trace[ "fraction" ] < 1 ) - { - override_abort = 0; - if ( isDefined( level._chugabud_reject_node_override_func ) ) - { - override_abort = [[ level._chugabud_reject_node_override_func ]]( v_origin, n_node ); - } - if ( !override_abort ) - { - found_node = n_node; - break; - } - } - } - } - i--; - } - } - if ( isDefined( found_node ) ) - { - level.chugabud_spawn_struct.origin = found_node.origin; - v_dir = vectornormalize( v_origin - level.chugabud_spawn_struct.origin ); - level.chugabud_spawn_struct.angles = vectorToAngles( v_dir ); - return 1; - } - return 0; -} - -force_corpse_respawn_position( forced_corpse_position ) //checked matches cerberus output -{ - level.chugabud_force_corpse_position = forced_corpse_position; -} - -force_player_respawn_position( forced_player_position ) //checked matches cerberus output -{ - level.chugabud_force_player_position = forced_player_position; -} - -save_weapons_for_chugabud( player ) //checked changed to match cerberus output -{ - self.chugabud_melee_weapons = []; - for ( i = 0; i < level._melee_weapons.size; i++ ) - { - self save_weapon_for_chugabud( player, level._melee_weapons[ i ].weapon_name ); - } -} - -save_weapon_for_chugabud( player, weapon_name ) //checked matches cerberus output -{ - if ( player hasweapon( weapon_name ) ) - { - self.chugabud_melee_weapons[ weapon_name ] = 1; - } -} - -restore_weapons_for_chugabud( player ) //checked changed to match cerberus output -{ - for ( i = 0; i < level._melee_weapons.size; i++ ) - { - self restore_weapon_for_chugabud( player, level._melee_weapons[ i ].weapon_name ); - } - self.chugabud_melee_weapons = undefined; -} - -restore_weapon_for_chugabud( player, weapon_name ) //checked changed to match cerberus output -{ - if ( !isDefined( weapon_name ) || !isDefined( self.chugabud_melee_weapons ) || !isDefined( self.chugabud_melee_weapons[ weapon_name ] ) ) - { - return; - } - if ( is_true( self.chugabud_melee_weapons[ weapon_name ] ) ) - { - player giveweapon( weapon_name ); - player set_player_melee_weapon( weapon_name ); - self.chugabud_melee_weapons[ weapon_name ] = 0; - } -} - -chugabud_save_perks( ent ) //checked changed to match cerberus output -{ - perk_array = ent get_perk_array( 1 ); - foreach ( perk in perk_array ) - { - ent unsetperk( perk ); - } - return perk_array; -} - -playchugabudtimeraudio() //checked matches cerberus output -{ - self endon( "chugabud_grabbed" ); - self endon( "chugabud_timedout" ); - player = self.player; - self thread playchugabudtimerout( player ); - while ( 1 ) - { - player playsoundtoplayer( "zmb_chugabud_timer_count", player ); - wait 1; - } -} - -playchugabudtimerout( player ) //checked matches cerberus output -{ - self endon( "chugabud_grabbed" ); - self waittill( "chugabud_timedout" ); - player playsoundtoplayer( "zmb_chugabud_timer_out", player ); -} - -chugabud_hostmigration() //checked changed to match cerberus output -{ - level endon( "end_game" ); - level notify( "chugabud_hostmigration" ); - level endon( "chugabud_hostmigration" ); - while ( 1 ) - { - level waittill( "host_migration_end" ); - chugabuds = getentarray( "player_chugabud_model", "script_noteworthy" ); - foreach ( model in chugabuds ) - { - playfxontag( level._effect[ "powerup_on" ], model, "tag_origin" ); - } - } -} - -player_revived_cleanup_chugabud_corpse() //checked matches cerberus output -{ -} - -player_has_chugabud_corpse() //checked matches cerberus output -{ - if ( isDefined( self.e_chugabud_corpse ) ) - { - return 1; - } - return 0; -} - -is_weapon_available_in_chugabud_corpse( weapon, player_to_check ) //checked partially changed to match cerberus output -{ - count = 0; - upgradedweapon = weapon; - if ( isDefined( level.zombie_weapons[ weapon ] ) && isDefined( level.zombie_weapons[ weapon ].upgrade_name ) ) - { - upgradedweapon = level.zombie_weapons[ weapon ].upgrade_name; - } - players = getplayers(); - if ( isDefined( players ) ) - { - player_index = 0; - while ( player_index < players.size ) - { - player = players[ player_index ]; - if ( isDefined( player_to_check ) && player != player_to_check ) - { - player_index++; - continue; - } - if ( player player_has_chugabud_corpse() ) - { - if ( isDefined( player.loadout ) && isDefined( player.loadout.weapons ) ) - { - for ( i = 0; i < player.loadout.weapons.size; i++ ) - { - chugabud_weapon = player.loadout.weapons[ i ]; - if ( isDefined( chugabud_weapon ) && chugabud_weapon[ "name" ] == weapon || chugabud_weapon[ "name" ] == upgradedweapon ) - { - count++; - } - } - } - } - player_index++; - } - } - return count; -} - -chugabud_corpse_cleanup_on_spectator( player ) //checked changed to match cerberus output -{ - self endon( "death" ); - player endon( "disconnect" ); - while ( 1 ) - { - if ( player.sessionstate == "spectator" ) - { - break; - } - wait 0.01; - } - player chugabud_corpse_cleanup( self, 0 ); -} - -chugabud_corpse_revive_icon( player ) //checked changed to match cerberus output -{ - self endon( "death" ); - height_offset = 30; - index = player.clientid; - hud_elem = newhudelem(); - self.revive_hud_elem = hud_elem; - hud_elem.x = self.origin[ 0 ]; - hud_elem.y = self.origin[ 1 ]; - hud_elem.z = self.origin[ 2 ] + height_offset; - hud_elem.alpha = 1; - hud_elem.archived = 1; - hud_elem setshader( "waypoint_revive", 5, 5 ); - hud_elem setwaypoint( 1 ); - hud_elem.hidewheninmenu = 1; - hud_elem.immunetodemogamehudsettings = 1; - while ( 1 ) - { - if ( !isDefined( self.revive_hud_elem ) ) - { - break; - } - hud_elem.x = self.origin[ 0 ]; - hud_elem.y = self.origin[ 1 ]; - hud_elem.z = self.origin[ 2 ] + height_offset; - wait 0.01; - } -} - -activate_chugabud_effects_and_audio() //checked matches cerberus output -{ - if ( isDefined( level.whos_who_client_setup ) ) - { - if ( !isDefined( self.whos_who_effects_active ) ) - { - if ( isDefined( level.chugabud_shellshock ) ) - { - self shellshock( "whoswho", 60 ); - } - if ( isDefined( level.vsmgr_prio_visionset_zm_whos_who ) ) - { - maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_whos_who", self ); - } - self setclientfieldtoplayer( "clientfield_whos_who_audio", 1 ); - self setclientfieldtoplayer( "clientfield_whos_who_filter", 1 ); - self.whos_who_effects_active = 1; - self thread deactivate_chugabud_effects_and_audio(); - } - } -} - -deactivate_chugabud_effects_and_audio() //checked matches cerberus output -{ - self waittill_any( "death", "chugabud_effects_cleanup" ); - if ( isDefined( level.whos_who_client_setup ) ) - { - if ( isDefined( self.whos_who_effects_active ) && self.whos_who_effects_active == 1 ) - { - if ( isDefined( level.chugabud_shellshock ) ) - { - self stopshellshock(); - } - if ( isDefined( level.vsmgr_prio_visionset_zm_whos_who ) ) - { - maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_whos_who", self ); - } - self setclientfieldtoplayer( "clientfield_whos_who_audio", 0 ); - self setclientfieldtoplayer( "clientfield_whos_who_filter", 0 ); - } - self.whos_who_effects_active = undefined; - } -} - - - - - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_clone.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_clone.gsc deleted file mode 100644 index 6a4806a..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_clone.gsc +++ /dev/null @@ -1,143 +0,0 @@ -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -//#using_animtree( "zm_ally" ); //cannot use this in gsc - -init() //checked matches cerberus output -{ - init_mover_tree(); -} - -spawn_player_clone( player, origin, forceweapon, forcemodel ) //checked matches cerberus output -{ - if ( !isDefined( origin ) ) - { - origin = player.origin; - } - primaryweapons = player getweaponslistprimaries(); - if ( isDefined( forceweapon ) ) - { - weapon = forceweapon; - } - else if ( primaryweapons.size ) - { - weapon = primaryweapons[ 0 ]; - } - else - { - weapon = player getcurrentweapon(); - } - weaponmodel = getweaponmodel( weapon ); - spawner = getent( "fake_player_spawner", "targetname" ); - if ( isDefined( spawner ) ) - { - clone = spawner spawnactor(); - clone.origin = origin; - clone.isactor = 1; - } - else - { - clone = spawn( "script_model", origin ); - clone.isactor = 0; - } - if ( isDefined( forcemodel ) ) - { - clone setmodel( forcemodel ); - } - else - { - clone setmodel( self.model ); - if ( isDefined( player.headmodel ) ) - { - clone.headmodel = player.headmodel; - clone attach( clone.headmodel, "", 1 ); - } - } - if ( weaponmodel != "" && weaponmodel != "none" ) - { - clone attach( weaponmodel, "tag_weapon_right" ); - } - clone.team = player.team; - clone.is_inert = 1; - clone.zombie_move_speed = "walk"; - clone.script_noteworthy = "corpse_clone"; - clone.actor_damage_func = ::clone_damage_func; - return clone; -} - -clone_damage_func( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) //checked changed to match cerberus output -{ - idamage = 0; - if ( sweapon == "knife_ballistic_upgraded_zm" && sweapon == "knife_ballistic_bowie_upgraded_zm" || sweapon == "knife_ballistic_no_melee_upgraded_zm" && sweapon == "knife_ballistic_sickle_upgraded_zm" ) - { - self notify( "player_revived" ); - } - return idamage; -} - -clone_give_weapon( weapon ) //checked matches cerberus output -{ - weaponmodel = getweaponmodel( weapon ); - if ( weaponmodel != "" && weaponmodel != "none" ) - { - self attach( weaponmodel, "tag_weapon_right" ); - } -} - -clone_animate( animtype ) //checked matches cerberus output -{ - if ( self.isactor ) - { - self thread clone_actor_animate( animtype ); - } - else - { - self thread clone_mover_animate( animtype ); - } -} - -clone_actor_animate( animtype ) //checked matches cerberus output -{ - wait 0.1; - switch( animtype ) - { - case "laststand": - self setanimstatefromasd( "laststand" ); - break; - case "idle": - default: - self setanimstatefromasd( "idle" ); - break; - } -} - -init_mover_tree() //checked matches cerberus output -{ - scriptmodelsuseanimtree( -1 ); -} - -clone_mover_animate( animtype ) //checked matches cerberus output -{ - self useanimtree( -1 ); - switch( animtype ) - { - case "laststand": - self setanim( %pb_laststand_idle ); - break; - case "afterlife": - self setanim( %pb_afterlife_laststand_idle ); - break; - case "chair": - self setanim( %ai_actor_elec_chair_idle ); - break; - case "falling": - self setanim( %pb_falling_loop ); - break; - case "idle": - default: - self setanim( %pb_stand_alert ); - break; - } -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_devgui.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_devgui.gsc deleted file mode 100644 index 1aa2351..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_devgui.gsc +++ /dev/null @@ -1,2344 +0,0 @@ -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_weap_claymore; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_turned; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ -/# - setdvar( "zombie_devgui", "" ); - setdvar( "scr_force_weapon", "" ); - setdvar( "scr_zombie_round", "1" ); - setdvar( "scr_zombie_dogs", "1" ); - setdvar( "scr_spawn_tesla", "" ); - setdvar( "scr_force_quantum_bomb_result", "" ); - level.devgui_add_weapon = ::devgui_add_weapon; - level.devgui_add_ability = ::devgui_add_ability; - level thread zombie_devgui_think(); - thread zombie_devgui_player_commands(); - thread diable_fog_in_noclip(); - thread zombie_weapon_devgui_think(); - thread devgui_zombie_healthbar(); -#/ -} - -zombie_devgui_player_commands() -{ -/# - flag_wait( "start_zombie_round_logic" ); - wait 1; - players = get_players(); - i = 0; - while ( i < players.size ) - { - ip1 = i + 1; - adddebugcommand( "devgui_cmd "Zombies:1/Players:1/Player:1/" + players[ i ].name + "/Give Money:1" "set zombie_devgui player" + ip1 + "_money" \n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Players:1/Player:1/" + players[ i ].name + "/Invulnerable:2" "set zombie_devgui player" + ip1 + "_invul_on" \n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Players:1/Player:1/" + players[ i ].name + "/Vulnerable:3" "set zombie_devgui player" + ip1 + "_invul_off" \n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Players:1/Player:1/" + players[ i ].name + "/Toggle Ignored:4" "set zombie_devgui player" + ip1 + "_ignore" \n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Players:1/Player:1/" + players[ i ].name + "/Mega Health:5" "set zombie_devgui player" + ip1 + "_health" \n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Players:1/Player:1/" + players[ i ].name + "/Down:6" "set zombie_devgui player" + ip1 + "_kill" \n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Players:1/Player:1/" + players[ i ].name + "/Revive:7" "set zombie_devgui player" + ip1 + "_revive" \n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Players:1/Player:1/" + players[ i ].name + "/Turn Player:8" "set zombie_devgui player" + ip1 + "_turnplayer" \n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Players:1/Player:1/" + players[ i ].name + "/Debug Pers:9" "set zombie_devgui player" + ip1 + "_debug_pers" \n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Players:1/Player:1/" + players[ i ].name + "/Take Money:10" "set zombie_devgui player" + ip1 + "_moneydown" \n" ); - i++; -#/ - } -} - -devgui_add_weapon_entry( hint, up, weapon_name, root ) -{ -/# - rootslash = ""; - if ( isDefined( root ) && root.size ) - { - rootslash = root + "/"; - } - uppath = "/" + up; - if ( up.size < 1 ) - { - uppath = ""; - } - cmd = "devgui_cmd "Zombies:1/Weapons:10/" + rootslash + hint + uppath + "" "set zombie_devgui_gun " + weapon_name + "" \n"; - adddebugcommand( cmd ); -#/ -} - -devgui_add_weapon_and_attachments( hint, up, weapon_name, root ) -{ -/# - devgui_add_weapon_entry( hint, up, weapon_name, root ); -#/ -} - -devgui_add_weapon( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp, ammo_cost ) -{ -/# - if ( is_offhand_weapon( weapon_name ) && !is_melee_weapon( weapon_name ) ) - { - return; - } - if ( !isDefined( level.devgui_weapons_added ) ) - { - level.devgui_weapons_added = 0; - } - level.devgui_weapons_added++; - if ( is_melee_weapon( weapon_name ) ) - { - devgui_add_weapon_and_attachments( weapon_name, "", weapon_name, "Melee:8" ); - } - else - { - devgui_add_weapon_and_attachments( weapon_name, "", weapon_name, "" ); -#/ - } -} - -zombie_weapon_devgui_think() -{ -/# - level.zombie_devgui_gun = getDvar( #"CE4F9F97" ); - level.zombie_devgui_att = getDvar( #"A965F402" ); - for ( ;; ) - { - wait 0,25; - cmd = getDvar( #"CE4F9F97" ); - if ( !isDefined( level.zombie_devgui_gun ) || level.zombie_devgui_gun != cmd ) - { - level.zombie_devgui_gun = cmd; - array_thread( get_players(), ::zombie_devgui_weapon_give, level.zombie_devgui_gun ); - } - wait 0,25; - att = getDvar( #"A965F402" ); - if ( !isDefined( level.zombie_devgui_att ) || level.zombie_devgui_att != att ) - { - level.zombie_devgui_att = att; - array_thread( get_players(), ::zombie_devgui_attachment_give, level.zombie_devgui_att ); - } -#/ - } -} - -zombie_devgui_weapon_give( gun ) -{ -/# - self maps/mp/zombies/_zm_weapons::weapon_give( gun, is_weapon_upgraded( gun ), 0 ); -#/ -} - -zombie_devgui_attachment_give( gun ) -{ -/# - newgun = maps/mp/zombies/_zm_weapons::get_base_name( self getcurrentweapon() ) + "+" + gun; - self maps/mp/zombies/_zm_weapons::weapon_give( newgun, is_weapon_upgraded( gun ), 0 ); -#/ -} - -devgui_add_ability( name, upgrade_active_func, stat_name, stat_desired_value, game_end_reset_if_not_achieved ) -{ -/# - online_game = sessionmodeisonlinegame(); - if ( !online_game ) - { - return; - } - if ( !is_true( level.devgui_watch_abilities ) ) - { - cmd = "devgui_cmd "Zombies:1/Players:1/Abilities:3/Disable All:1" "set zombie_devgui_give_ability _disable" \n"; - adddebugcommand( cmd ); - cmd = "devgui_cmd "Zombies:1/Players:1/Abilities:3/Enable All:2" "set zombie_devgui_give_ability _enable" \n"; - adddebugcommand( cmd ); - level thread zombie_ability_devgui_think(); - level.devgui_watch_abilities = 1; - } - cmd = "devgui_cmd "Zombies:1/Players:1/Abilities:3/" + name + "" "set zombie_devgui_give_ability " + name + "" \n"; - adddebugcommand( cmd ); - cmd = "devgui_cmd "Zombies:1/Players:1/Abilities:3/Take:3/" + name + "" "set zombie_devgui_take_ability " + name + "" \n"; - adddebugcommand( cmd ); -#/ -} - -zombie_devgui_ability_give( name ) -{ -/# - pers_upgrade = level.pers_upgrades[ name ]; - while ( isDefined( pers_upgrade ) ) - { - i = 0; - while ( i < pers_upgrade.stat_names.size ) - { - stat_name = pers_upgrade.stat_names[ i ]; - stat_value = pers_upgrade.stat_desired_values[ i ]; - self maps/mp/zombies/_zm_stats::set_global_stat( stat_name, stat_value ); - self.pers_upgrade_force_test = 1; - i++; -#/ - } - } -} - -zombie_devgui_ability_take( name ) -{ -/# - pers_upgrade = level.pers_upgrades[ name ]; - while ( isDefined( pers_upgrade ) ) - { - i = 0; - while ( i < pers_upgrade.stat_names.size ) - { - stat_name = pers_upgrade.stat_names[ i ]; - stat_value = 0; - self maps/mp/zombies/_zm_stats::set_global_stat( stat_name, stat_value ); - self.pers_upgrade_force_test = 1; - i++; -#/ - } - } -} - -zombie_ability_devgui_think() -{ -/# - level.zombie_devgui_give_ability = getDvar( #"E2245F05" ); - level.zombie_devgui_take_ability = getDvar( #"0726367F" ); - for ( ;; ) - { - wait 0,25; - cmd = getDvar( #"E2245F05" ); - if ( !isDefined( level.zombie_devgui_give_ability ) || level.zombie_devgui_give_ability != cmd ) - { - if ( cmd == "_disable" ) - { - flag_set( "sq_minigame_active" ); - break; - } - else if ( cmd == "_enable" ) - { - flag_clear( "sq_minigame_active" ); - break; - } - else - { - level.zombie_devgui_give_ability = cmd; - array_thread( get_players(), ::zombie_devgui_ability_give, level.zombie_devgui_give_ability ); - } - } - wait 0,25; - cmd = getDvar( #"0726367F" ); - if ( !isDefined( level.zombie_devgui_take_ability ) || level.zombie_devgui_take_ability != cmd ) - { - level.zombie_devgui_take_ability = cmd; - array_thread( get_players(), ::zombie_devgui_ability_take, level.zombie_devgui_take_ability ); - } -#/ - } -} - -zombie_healthbar( pos, dsquared ) -{ -/# - if ( distancesquared( pos, self.origin ) > dsquared ) - { - return; - } - rate = 1; - if ( isDefined( self.maxhealth ) ) - { - rate = self.health / self.maxhealth; - } - color = ( 1 - rate, rate, 0 ); - text = "" + int( self.health ); - print3d( self.origin + ( 0, 1, 0 ), text, color, 1, 0,5, 1 ); -#/ -} - -devgui_zombie_healthbar() -{ -/# - while ( 1 ) - { - while ( getDvarInt( #"5B45DCAF" ) == 1 ) - { - lp = get_players()[ 0 ]; - zombies = getaispeciesarray( "all", "all" ); - while ( isDefined( zombies ) ) - { - _a260 = zombies; - _k260 = getFirstArrayKey( _a260 ); - while ( isDefined( _k260 ) ) - { - zombie = _a260[ _k260 ]; - zombie zombie_healthbar( lp.origin, 360000 ); - _k260 = getNextArrayKey( _a260, _k260 ); - } - } - } - wait 0,05; -#/ - } -} - -zombie_devgui_watch_input() -{ -/# - flag_wait( "start_zombie_round_logic" ); - wait 1; - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] thread watch_debug_input(); - i++; -#/ - } -} - -damage_player() -{ -/# - self disableinvulnerability(); - self dodamage( self.health / 2, self.origin ); -#/ -} - -kill_player() -{ -/# - self disableinvulnerability(); - death_from = ( randomfloatrange( -20, 20 ), randomfloatrange( -20, 20 ), randomfloatrange( -20, 20 ) ); - self dodamage( self.health + 666, self.origin + death_from ); -#/ -} - -force_drink() -{ -/# - wait 0,01; - lean = self allowlean( 0 ); - ads = self allowads( 0 ); - sprint = self allowsprint( 0 ); - crouch = self allowcrouch( 1 ); - prone = self allowprone( 0 ); - melee = self allowmelee( 0 ); - self increment_is_drinking(); - orgweapon = self getcurrentweapon(); - self giveweapon( "zombie_builder_zm" ); - self switchtoweapon( "zombie_builder_zm" ); - self.build_time = self.usetime; - self.build_start_time = getTime(); - wait 2; - self maps/mp/zombies/_zm_weapons::switch_back_primary_weapon( orgweapon ); - self takeweapon( "zombie_builder_zm" ); - if ( is_true( self.is_drinking ) ) - { - self decrement_is_drinking(); - } - self allowlean( lean ); - self allowads( ads ); - self allowsprint( sprint ); - self allowprone( prone ); - self allowcrouch( crouch ); - self allowmelee( melee ); -#/ -} - -zombie_devgui_dpad_none() -{ -/# - self thread watch_debug_input(); -#/ -} - -zombie_devgui_dpad_death() -{ -/# - self thread watch_debug_input( ::kill_player ); -#/ -} - -zombie_devgui_dpad_damage() -{ -/# - self thread watch_debug_input( ::damage_player ); -#/ -} - -zombie_devgui_dpad_changeweapon() -{ -/# - self thread watch_debug_input( ::force_drink ); -#/ -} - -watch_debug_input( callback ) -{ -/# - self endon( "disconnect" ); - self notify( "watch_debug_input" ); - self endon( "watch_debug_input" ); - level.devgui_dpad_watch = 0; - while ( isDefined( callback ) ) - { - level.devgui_dpad_watch = 1; - for ( ;; ) - { - while ( self actionslottwobuttonpressed() ) - { - self thread [[ callback ]](); - while ( self actionslottwobuttonpressed() ) - { - wait 0,05; - } - } - wait 0,05; -#/ - } - } -} - -zombie_devgui_think() -{ -/# - for ( ;; ) - { - cmd = getDvar( "zombie_devgui" ); - switch( cmd ) - { - case "money": - players = get_players(); - array_thread( players, ::zombie_devgui_give_money ); - break; - case "player1_money": - players = get_players(); - if ( players.size >= 1 ) - { - players[ 0 ] thread zombie_devgui_give_money(); - } - break; - case "player2_money": - players = get_players(); - if ( players.size >= 2 ) - { - players[ 1 ] thread zombie_devgui_give_money(); - } - break; - case "player3_money": - players = get_players(); - if ( players.size >= 3 ) - { - players[ 2 ] thread zombie_devgui_give_money(); - } - break; - case "player4_money": - players = get_players(); - if ( players.size >= 4 ) - { - players[ 3 ] thread zombie_devgui_give_money(); - } - break; - case "moneydown": - players = get_players(); - array_thread( players, ::zombie_devgui_take_money ); - break; - case "player1_moneydown": - players = get_players(); - if ( players.size >= 1 ) - { - players[ 0 ] thread zombie_devgui_take_money(); - } - break; - case "player2_moneydown": - players = get_players(); - if ( players.size >= 2 ) - { - players[ 1 ] thread zombie_devgui_take_money(); - } - break; - case "player3_moneydown": - players = get_players(); - if ( players.size >= 3 ) - { - players[ 2 ] thread zombie_devgui_take_money(); - } - break; - case "player4_moneydown": - players = get_players(); - if ( players.size >= 4 ) - { - players[ 3 ] thread zombie_devgui_take_money(); - } - break; - case "health": - array_thread( get_players(), ::zombie_devgui_give_health ); - break; - case "player1_health": - players = get_players(); - if ( players.size >= 1 ) - { - players[ 0 ] thread zombie_devgui_give_health(); - } - break; - case "player2_health": - players = get_players(); - if ( players.size >= 2 ) - { - players[ 1 ] thread zombie_devgui_give_health(); - } - break; - case "player3_health": - players = get_players(); - if ( players.size >= 3 ) - { - players[ 2 ] thread zombie_devgui_give_health(); - } - break; - case "player4_health": - players = get_players(); - if ( players.size >= 4 ) - { - players[ 3 ] thread zombie_devgui_give_health(); - } - break; - case "ammo": - array_thread( get_players(), ::zombie_devgui_toggle_ammo ); - break; - case "ignore": - array_thread( get_players(), ::zombie_devgui_toggle_ignore ); - break; - case "player1_ignore": - players = get_players(); - if ( players.size >= 1 ) - { - players[ 0 ] thread zombie_devgui_toggle_ignore(); - } - break; - case "player2_ignore": - players = get_players(); - if ( players.size >= 2 ) - { - players[ 1 ] thread zombie_devgui_toggle_ignore(); - } - break; - case "player3_ignore": - players = get_players(); - if ( players.size >= 3 ) - { - players[ 2 ] thread zombie_devgui_toggle_ignore(); - } - break; - case "player4_ignore": - players = get_players(); - if ( players.size >= 4 ) - { - players[ 3 ] thread zombie_devgui_toggle_ignore(); - } - break; - case "invul_on": - zombie_devgui_invulnerable( undefined, 1 ); - break; - case "invul_off": - zombie_devgui_invulnerable( undefined, 0 ); - break; - case "player1_invul_on": - zombie_devgui_invulnerable( 0, 1 ); - break; - case "player1_invul_off": - zombie_devgui_invulnerable( 0, 0 ); - break; - case "player2_invul_on": - zombie_devgui_invulnerable( 1, 1 ); - break; - case "player2_invul_off": - zombie_devgui_invulnerable( 1, 0 ); - break; - case "player3_invul_on": - zombie_devgui_invulnerable( 2, 1 ); - break; - case "player3_invul_off": - zombie_devgui_invulnerable( 2, 0 ); - break; - case "player4_invul_on": - zombie_devgui_invulnerable( 3, 1 ); - break; - case "player4_invul_off": - zombie_devgui_invulnerable( 3, 0 ); - break; - case "revive_all": - array_thread( get_players(), ::zombie_devgui_revive ); - break; - case "player1_revive": - players = get_players(); - if ( players.size >= 1 ) - { - players[ 0 ] thread zombie_devgui_revive(); - } - break; - case "player2_revive": - players = get_players(); - if ( players.size >= 2 ) - { - players[ 1 ] thread zombie_devgui_revive(); - } - break; - case "player3_revive": - players = get_players(); - if ( players.size >= 3 ) - { - players[ 2 ] thread zombie_devgui_revive(); - } - break; - case "player4_revive": - players = get_players(); - if ( players.size >= 4 ) - { - players[ 3 ] thread zombie_devgui_revive(); - } - break; - case "player1_kill": - players = get_players(); - if ( players.size >= 1 ) - { - players[ 0 ] thread zombie_devgui_kill(); - } - break; - case "player2_kill": - players = get_players(); - if ( players.size >= 2 ) - { - players[ 1 ] thread zombie_devgui_kill(); - } - break; - case "player3_kill": - players = get_players(); - if ( players.size >= 3 ) - { - players[ 2 ] thread zombie_devgui_kill(); - } - break; - case "player4_kill": - players = get_players(); - if ( players.size >= 4 ) - { - players[ 3 ] thread zombie_devgui_kill(); - } - break; - case "spawn_friendly_bot": - player = gethostplayer(); - team = player.team; - devgui_bot_spawn( team ); - break; - case "specialty_quickrevive": - level.solo_lives_given = 0; - case "specialty_additionalprimaryweapon": - case "specialty_armorvest": - case "specialty_deadshot": - case "specialty_fastmeleerecovery": - case "specialty_fastreload": - case "specialty_finalstand": - case "specialty_flakjacket": - case "specialty_grenadepulldeath": - case "specialty_longersprint": - case "specialty_nomotionsensor": - case "specialty_rof": - case "specialty_scavenger": - case "specialty_showonradar": - zombie_devgui_give_perk( cmd ); - break; - case "turnplayer": - zombie_devgui_turn_player(); - break; - case "player1_turnplayer": - zombie_devgui_turn_player( 0 ); - break; - case "player2_turnplayer": - zombie_devgui_turn_player( 1 ); - break; - case "player3_turnplayer": - zombie_devgui_turn_player( 2 ); - break; - case "player4_turnplayer": - zombie_devgui_turn_player( 3 ); - break; - case "player1_debug_pers": - zombie_devgui_debug_pers( 0 ); - break; - case "player2_debug_pers": - zombie_devgui_debug_pers( 1 ); - break; - case "player3_debug_pers": - zombie_devgui_debug_pers( 2 ); - break; - case "player4_debug_pers": - zombie_devgui_debug_pers( 3 ); - break; - case "bonfire_sale": - case "bonus_points_player": - case "bonus_points_team": - case "carpenter": - case "double_points": - case "empty_clip": - case "fire_sale": - case "free_perk": - case "full_ammo": - case "insta_kill": - case "lose_perk": - case "lose_points_team": - case "meat_stink": - case "minigun": - case "nuke": - case "random_weapon": - case "tesla": - zombie_devgui_give_powerup( cmd, 1 ); - break; - case "next_bonfire_sale": - case "next_bonus_points_player": - case "next_bonus_points_team": - case "next_carpenter": - case "next_double_points": - case "next_empty_clip": - case "next_fire_sale": - case "next_free_perk": - case "next_full_ammo": - case "next_insta_kill": - case "next_lose_perk": - case "next_lose_points_team": - case "next_meat_stink": - case "next_minigun": - case "next_nuke": - case "next_random_weapon": - case "next_tesla": - zombie_devgui_give_powerup( getsubstr( cmd, 5 ), 0 ); - break; - case "round": - zombie_devgui_goto_round( getDvarInt( "scr_zombie_round" ) ); - break; - case "round_next": - zombie_devgui_goto_round( level.round_number + 1 ); - break; - case "round_prev": - zombie_devgui_goto_round( level.round_number - 1 ); - break; - case "chest_move": - if ( isDefined( level.chest_accessed ) ) - { - level notify( "devgui_chest_end_monitor" ); - level.chest_accessed = 100; - } - break; - case "chest_never_move": - if ( isDefined( level.chest_accessed ) ) - { - level thread zombie_devgui_chest_never_move(); - } - break; - case "chest": - if ( isDefined( level.zombie_weapons[ getDvar( "scr_force_weapon" ) ] ) ) - { - } - break; - case "quantum_bomb_random_result": - setdvar( "scr_force_quantum_bomb_result", "" ); - break; - case "give_gasmask": - array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_gasmask_zm" ); - break; - case "give_hacker": - array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_hacker_zm" ); - break; - case "give_turbine": - array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_turbine_zm" ); - break; - case "give_turret": - array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_turret_zm" ); - break; - case "give_electrictrap": - array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_electrictrap_zm" ); - break; - case "give_riotshield": - array_thread( get_players(), ::zombie_devgui_equipment_give, "riotshield_zm" ); - break; - case "give_jetgun": - array_thread( get_players(), ::zombie_devgui_equipment_give, "jetgun_zm" ); - break; - case "give_springpad": - array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_springpad_zm" ); - break; - case "give_subwoofer": - array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_subwoofer_zm" ); - break; - case "give_headchopper": - array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_headchopper_zm" ); - break; - case "cool_jetgun": - array_thread( get_players(), ::zombie_devgui_cool_jetgun ); - break; - case "preserve_turbines": - array_thread( get_players(), ::zombie_devgui_preserve_turbines ); - break; - case "healthy_equipment": - array_thread( get_players(), ::zombie_devgui_equipment_stays_healthy ); - break; - case "disown_equipment": - array_thread( get_players(), ::zombie_devgui_disown_equipment ); - break; - case "buildable_drop": - array_thread( get_players(), ::zombie_devgui_buildable_drop ); - break; - case "build_busladder": - zombie_devgui_build( "busladder" ); - break; - case "build_bushatch": - zombie_devgui_build( "bushatch" ); - break; - case "build_dinerhatch": - zombie_devgui_build( "dinerhatch" ); - break; - case "build_cattlecatcher": - zombie_devgui_build( "cattlecatcher" ); - break; - case "build_pap": - zombie_devgui_build( "pap" ); - break; - case "build_riotshield_zm": - zombie_devgui_build( "riotshield_zm" ); - break; - case "build_powerswitch": - zombie_devgui_build( "powerswitch" ); - break; - case "build_turbine": - zombie_devgui_build( "turbine" ); - break; - case "build_turret": - zombie_devgui_build( "turret" ); - break; - case "build_electric_trap": - zombie_devgui_build( "electric_trap" ); - break; - case "build_jetgun_zm": - zombie_devgui_build( "jetgun_zm" ); - break; - case "build_sq_common": - zombie_devgui_build( "sq_common" ); - break; - case "build_springpad": - zombie_devgui_build( "springpad_zm" ); - break; - case "build_slipgun": - zombie_devgui_build( "slipgun_zm" ); - break; - case "build_keys": - zombie_devgui_build( "keys_zm" ); - break; - case "give_claymores": - array_thread( get_players(), ::zombie_devgui_give_claymores ); - break; - case "give_frags": - array_thread( get_players(), ::zombie_devgui_give_frags ); - break; - case "give_sticky": - array_thread( get_players(), ::zombie_devgui_give_sticky ); - break; - case "give_monkey": - array_thread( get_players(), ::zombie_devgui_give_monkey ); - break; - case "give_beacon": - array_thread( get_players(), ::zombie_devgui_give_beacon ); - break; - case "give_time_bomb": - array_thread( get_players(), ::zombie_devgui_give_time_bomb ); - break; - case "give_black_hole_bomb": - array_thread( get_players(), ::zombie_devgui_give_black_hole_bomb ); - break; - case "give_dolls": - array_thread( get_players(), ::zombie_devgui_give_dolls ); - break; - case "give_quantum_bomb": - array_thread( get_players(), ::zombie_devgui_give_quantum_bomb ); - break; - case "give_emp_bomb": - array_thread( get_players(), ::zombie_devgui_give_emp_bomb ); - break; - case "monkey_round": - zombie_devgui_monkey_round(); - break; - case "thief_round": - zombie_devgui_thief_round(); - break; - case "dog_round": - zombie_devgui_dog_round( getDvarInt( "scr_zombie_dogs" ) ); - break; - case "dog_round_skip": - zombie_devgui_dog_round_skip(); - break; - case "print_variables": - zombie_devgui_dump_zombie_vars(); - break; - case "pack_current_weapon": - zombie_devgui_pack_current_weapon(); - break; - case "unpack_current_weapon": - zombie_devgui_unpack_current_weapon(); - break; - case "reopt_current_weapon": - zombie_devgui_reopt_current_weapon(); - break; - case "weapon_take_all_fallback": - zombie_devgui_take_weapons( 1 ); - break; - case "weapon_take_all": - zombie_devgui_take_weapons( 0 ); - break; - case "weapon_take_current": - zombie_devgui_take_weapon(); - break; - case "power_on": - flag_set( "power_on" ); - break; - case "power_off": - flag_clear( "power_on" ); - break; - case "zombie_dpad_none": - array_thread( get_players(), ::zombie_devgui_dpad_none ); - break; - case "zombie_dpad_damage": - array_thread( get_players(), ::zombie_devgui_dpad_damage ); - break; - case "zombie_dpad_kill": - array_thread( get_players(), ::zombie_devgui_dpad_death ); - break; - case "zombie_dpad_drink": - array_thread( get_players(), ::zombie_devgui_dpad_changeweapon ); - break; - case "director_easy": - zombie_devgui_director_easy(); - break; - case "open_sesame": - zombie_devgui_open_sesame(); - break; - case "allow_fog": - zombie_devgui_allow_fog(); - break; - case "disable_kill_thread_toggle": - zombie_devgui_disable_kill_thread_toggle(); - break; - case "check_kill_thread_every_frame_toggle": - zombie_devgui_check_kill_thread_every_frame_toggle(); - break; - case "kill_thread_test_mode_toggle": - zombie_devgui_kill_thread_test_mode_toggle(); - break; - case "zombie_failsafe_debug_flush": - level notify( "zombie_failsafe_debug_flush" ); - break; - case "spawn": - devgui_zombie_spawn(); - break; - case "spawn_all": - devgui_all_spawn(); - break; - case "toggle_show_spawn_locations": - devgui_toggle_show_spawn_locations(); - break; - case "debug_hud": - array_thread( get_players(), ::devgui_debug_hud ); - break; - case "": - default: - if ( isDefined( level.custom_devgui ) ) - { - if ( isarray( level.custom_devgui ) ) - { - i = 0; - b_found_entry = is_true( [[ level.custom_devgui[ i ] ]]( cmd ) ); - i++; - if ( !b_found_entry} - else [[ level.custom_devgui ]]( cmd ); - break; - } - } - setdvar( "zombie_devgui", "" ); - wait 0,5; -#/ - } - } - } - } -} - -devgui_all_spawn() -{ -/# - player = gethostplayer(); - devgui_bot_spawn( player.team ); - wait 0,1; - devgui_bot_spawn( player.team ); - wait 0,1; - devgui_bot_spawn( player.team ); - wait 0,1; - zombie_devgui_goto_round( 8 ); -#/ -} - -devgui_toggle_show_spawn_locations() -{ -/# - if ( !isDefined( level.toggle_show_spawn_locations ) ) - { - level.toggle_show_spawn_locations = 1; - } - else - { - level.toggle_show_spawn_locations = !level.toggle_show_spawn_locations; -#/ - } -} - -devgui_zombie_spawn() -{ -/# - player = get_players()[ 0 ]; - spawnername = undefined; - spawnername = "zombie_spawner"; - direction = player getplayerangles(); - direction_vec = anglesToForward( direction ); - eye = player geteye(); - scale = 8000; - direction_vec = ( direction_vec[ 0 ] * scale, direction_vec[ 1 ] * scale, direction_vec[ 2 ] * scale ); - trace = bullettrace( eye, eye + direction_vec, 0, undefined ); - guy = undefined; - spawners = getentarray( spawnername, "script_noteworthy" ); - spawner = spawners[ 0 ]; - guy = maps/mp/zombies/_zm_utility::spawn_zombie( spawner ); - if ( isDefined( guy ) ) - { - wait 0,5; - guy.origin = trace[ "position" ]; - guy.angles = player.angles + vectorScale( ( 0, 1, 0 ), 180 ); - guy forceteleport( trace[ "position" ], player.angles + vectorScale( ( 0, 1, 0 ), 180 ) ); - guy thread maps/mp/zombies/_zm_ai_basic::find_flesh(); -#/ - } -} - -devgui_bot_spawn( team ) -{ -/# - player = gethostplayer(); - direction = player getplayerangles(); - direction_vec = anglesToForward( direction ); - eye = player geteye(); - scale = 8000; - direction_vec = ( direction_vec[ 0 ] * scale, direction_vec[ 1 ] * scale, direction_vec[ 2 ] * scale ); - trace = bullettrace( eye, eye + direction_vec, 0, undefined ); - direction_vec = player.origin - trace[ "position" ]; - direction = vectorToAngle( direction_vec ); - bot = addtestclient(); - if ( !isDefined( bot ) ) - { - println( "Could not add test client" ); - return; - } - bot.pers[ "isBot" ] = 1; - bot.equipment_enabled = 0; - bot maps/mp/zombies/_zm::reset_rampage_bookmark_kill_times(); - bot.team = "allies"; - bot._player_entnum = bot getentitynumber(); - yaw = direction[ 1 ]; - bot thread devgui_bot_spawn_think( trace[ "position" ], yaw ); -#/ -} - -devgui_bot_spawn_think( origin, yaw ) -{ -/# - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self setorigin( origin ); - angles = ( 0, yaw, 0 ); - self setplayerangles( angles ); -#/ - } -} - -zombie_devgui_open_sesame() -{ -/# - setdvar( "zombie_unlock_all", 1 ); - flag_set( "power_on" ); - players = get_players(); - array_thread( players, ::zombie_devgui_give_money ); - zombie_doors = getentarray( "zombie_door", "targetname" ); - i = 0; - while ( i < zombie_doors.size ) - { - zombie_doors[ i ] notify( "trigger" ); - if ( is_true( zombie_doors[ i ].power_door_ignore_flag_wait ) ) - { - zombie_doors[ i ] notify( "power_on" ); - } - wait 0,05; - i++; - } - zombie_airlock_doors = getentarray( "zombie_airlock_buy", "targetname" ); - i = 0; - while ( i < zombie_airlock_doors.size ) - { - zombie_airlock_doors[ i ] notify( "trigger" ); - wait 0,05; - i++; - } - zombie_debris = getentarray( "zombie_debris", "targetname" ); - i = 0; - while ( i < zombie_debris.size ) - { - zombie_debris[ i ] notify( "trigger" ); - wait 0,05; - i++; - } - zombie_devgui_build( undefined ); - level notify( "open_sesame" ); - wait 1; - setdvar( "zombie_unlock_all", 0 ); -#/ -} - -any_player_in_noclip() -{ -/# - _a1161 = get_players(); - _k1161 = getFirstArrayKey( _a1161 ); - while ( isDefined( _k1161 ) ) - { - player = _a1161[ _k1161 ]; - if ( player isinmovemode( "ufo", "noclip" ) ) - { - return 1; - } - _k1161 = getNextArrayKey( _a1161, _k1161 ); - } - return 0; -#/ -} - -diable_fog_in_noclip() -{ -/# - level.fog_disabled_in_noclip = 1; - level endon( "allowfoginnoclip" ); - flag_wait( "start_zombie_round_logic" ); - while ( 1 ) - { - while ( !any_player_in_noclip() ) - { - wait 1; - } - setdvar( "scr_fog_disable", "1" ); - setdvar( "r_fog_disable", "1" ); - if ( isDefined( level.culldist ) ) - { - setculldist( 0 ); - } - while ( any_player_in_noclip() ) - { - wait 1; - } - setdvar( "scr_fog_disable", "0" ); - setdvar( "r_fog_disable", "0" ); - if ( isDefined( level.culldist ) ) - { - setculldist( level.culldist ); - } -#/ - } -} - -zombie_devgui_allow_fog() -{ -/# - if ( level.fog_disabled_in_noclip ) - { - level notify( "allowfoginnoclip" ); - level.fog_disabled_in_noclip = 0; - setdvar( "scr_fog_disable", "0" ); - setdvar( "r_fog_disable", "0" ); - } - else - { - thread diable_fog_in_noclip(); -#/ - } -} - -zombie_devgui_give_money() -{ -/# - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - level.devcheater = 1; - self maps/mp/zombies/_zm_score::add_to_player_score( 100000 ); -#/ -} - -zombie_devgui_take_money() -{ -/# - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - if ( self.score > 100 ) - { - self maps/mp/zombies/_zm_score::minus_to_player_score( int( self.score / 2 ) ); - } - else - { - self maps/mp/zombies/_zm_score::minus_to_player_score( self.score ); -#/ - } -} - -zombie_devgui_turn_player( index ) -{ -/# - players = get_players(); - if ( !isDefined( index ) || index >= players.size ) - { - player = players[ 0 ]; - } - else - { - player = players[ index ]; - } - assert( isDefined( player ) ); - assert( isplayer( player ) ); - assert( isalive( player ) ); - level.devcheater = 1; - if ( player hasperk( "specialty_noname" ) ) - { - println( "Player turned HUMAN" ); - player maps/mp/zombies/_zm_turned::turn_to_human(); - } - else - { - println( "Player turned ZOMBIE" ); - player maps/mp/zombies/_zm_turned::turn_to_zombie(); -#/ - } -} - -zombie_devgui_debug_pers( index ) -{ -/# - players = get_players(); - if ( !isDefined( index ) || index >= players.size ) - { - player = players[ 0 ]; - } - else - { - player = players[ index ]; - } - assert( isDefined( player ) ); - assert( isplayer( player ) ); - assert( isalive( player ) ); - level.devcheater = 1; - println( "\n\n----------------------------------------------------------------------------------------------" ); - println( "Active Persistent upgrades [count=" + level.pers_upgrades_keys.size + "]" ); - pers_upgrade_index = 0; - while ( pers_upgrade_index < level.pers_upgrades_keys.size ) - { - name = level.pers_upgrades_keys[ pers_upgrade_index ]; - println( ( pers_upgrade_index + ">pers_upgrade name = " ) + name ); - pers_upgrade = level.pers_upgrades[ name ]; - i = 0; - while ( i < pers_upgrade.stat_names.size ) - { - stat_name = pers_upgrade.stat_names[ i ]; - stat_desired_value = pers_upgrade.stat_desired_values[ i ]; - player_current_stat_value = player maps/mp/zombies/_zm_stats::get_global_stat( stat_name ); - println( " " + i + ")stat_name = " + stat_name ); - println( " " + i + ")stat_desired_values = " + stat_desired_value ); - println( " " + i + ")player_current_stat_value = " + player_current_stat_value ); - i++; - } - if ( is_true( player.pers_upgrades_awarded[ name ] ) ) - { - println( "PLAYER HAS - " + name ); - pers_upgrade_index++; - continue; - } - else - { - println( "PLAYER DOES NOT HAVE - " + name ); - } - pers_upgrade_index++; - } - println( "----------------------------------------------------------------------------------------------\n\n" ); -#/ -} - -zombie_devgui_cool_jetgun() -{ -/# - if ( isDefined( level.zm_devgui_jetgun_never_overheat ) ) - { - self thread [[ level.zm_devgui_jetgun_never_overheat ]](); -#/ - } -} - -zombie_devgui_preserve_turbines() -{ -/# - self endon( "disconnect" ); - self notify( "preserve_turbines" ); - self endon( "preserve_turbines" ); - while ( !is_true( self.preserving_turbines ) ) - { - self.preserving_turbines = 1; - while ( 1 ) - { - self.turbine_health = 1200; - wait 1; - } - } - self.preserving_turbines = 0; -#/ -} - -zombie_devgui_equipment_stays_healthy() -{ -/# - self endon( "disconnect" ); - self notify( "preserve_equipment" ); - self endon( "preserve_equipment" ); - while ( !is_true( self.preserving_equipment ) ) - { - self.preserving_equipment = 1; - while ( 1 ) - { - self.equipment_damage = []; - self.shielddamagetaken = 0; - while ( isDefined( level.destructible_equipment ) ) - { - _a1357 = level.destructible_equipment; - _k1357 = getFirstArrayKey( _a1357 ); - while ( isDefined( _k1357 ) ) - { - equip = _a1357[ _k1357 ]; - if ( isDefined( equip ) ) - { - equip.shielddamagetaken = 0; - equip.damage = 0; - equip.headchopper_kills = 0; - equip.springpad_kills = 0; - equip.subwoofer_kills = 0; - } - _k1357 = getNextArrayKey( _a1357, _k1357 ); - } - } - wait 0,1; - } - } - self.preserving_equipment = 0; -#/ -} - -zombie_devgui_disown_equipment() -{ -/# - self.deployed_equipment = []; -#/ -} - -zombie_devgui_equipment_give( equipment ) -{ -/# - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - level.devcheater = 1; - if ( is_equipment_included( equipment ) ) - { - self maps/mp/zombies/_zm_equipment::equipment_buy( equipment ); -#/ - } -} - -zombie_devgui_buildable_drop() -{ -/# - if ( isDefined( level.buildable_slot_count ) ) - { - i = 0; - while ( i < level.buildable_slot_count ) - { - self maps/mp/zombies/_zm_buildables::player_drop_piece( undefined, i ); - i++; - } - } - else self maps/mp/zombies/_zm_buildables::player_drop_piece(); -#/ -} - -zombie_devgui_build( buildable ) -{ -/# - player = get_players()[ 0 ]; - i = 0; - while ( i < level.buildable_stubs.size ) - { - if ( !isDefined( buildable ) || level.buildable_stubs[ i ].equipname == buildable ) - { - if ( !isDefined( buildable ) && is_true( level.buildable_stubs[ i ].ignore_open_sesame ) ) - { - i++; - continue; - } - else - { - if ( isDefined( buildable ) || level.buildable_stubs[ i ].persistent != 3 ) - { - level.buildable_stubs[ i ] maps/mp/zombies/_zm_buildables::buildablestub_finish_build( player ); - } - } - } - i++; -#/ - } -} - -zombie_devgui_give_claymores() -{ -/# - self endon( "disconnect" ); - self notify( "give_planted_grenade_thread" ); - self endon( "give_planted_grenade_thread" ); - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - level.devcheater = 1; - if ( isDefined( self get_player_placeable_mine() ) ) - { - self takeweapon( self get_player_placeable_mine() ); - } - self thread maps/mp/zombies/_zm_weap_claymore::claymore_setup(); - while ( 1 ) - { - self givemaxammo( "claymore_zm" ); - wait 1; -#/ - } -} - -zombie_devgui_give_lethal( weapon ) -{ -/# - self endon( "disconnect" ); - self notify( "give_lethal_grenade_thread" ); - self endon( "give_lethal_grenade_thread" ); - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - level.devcheater = 1; - if ( isDefined( self get_player_lethal_grenade() ) ) - { - self takeweapon( self get_player_lethal_grenade() ); - } - self giveweapon( weapon ); - self set_player_lethal_grenade( weapon ); - while ( 1 ) - { - self givemaxammo( weapon ); - wait 1; -#/ - } -} - -zombie_devgui_give_frags() -{ -/# - zombie_devgui_give_lethal( "frag_grenade_zm" ); -#/ -} - -zombie_devgui_give_sticky() -{ -/# - zombie_devgui_give_lethal( "sticky_grenade_zm" ); -#/ -} - -zombie_devgui_give_monkey() -{ -/# - self endon( "disconnect" ); - self notify( "give_tactical_grenade_thread" ); - self endon( "give_tactical_grenade_thread" ); - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - level.devcheater = 1; - if ( isDefined( self get_player_tactical_grenade() ) ) - { - self takeweapon( self get_player_tactical_grenade() ); - } - while ( isDefined( level.zombiemode_devgui_cymbal_monkey_give ) ) - { - self [[ level.zombiemode_devgui_cymbal_monkey_give ]](); - while ( 1 ) - { - self givemaxammo( "cymbal_monkey_zm" ); - wait 1; -#/ - } - } -} - -zombie_devgui_give_beacon() -{ -/# - self endon( "disconnect" ); - self notify( "give_tactical_grenade_thread" ); - self endon( "give_tactical_grenade_thread" ); - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - level.devcheater = 1; - if ( isDefined( self get_player_tactical_grenade() ) ) - { - self takeweapon( self get_player_tactical_grenade() ); - } - while ( isDefined( level.zombiemode_devgui_beacon_give ) ) - { - self [[ level.zombiemode_devgui_beacon_give ]](); - while ( 1 ) - { - self givemaxammo( "beacon_zm" ); - wait 1; -#/ - } - } -} - -zombie_devgui_give_time_bomb() -{ -/# - self endon( "disconnect" ); - self notify( "give_tactical_grenade_thread" ); - self endon( "give_tactical_grenade_thread" ); - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - level.devcheater = 1; - if ( isDefined( self get_player_tactical_grenade() ) ) - { - self takeweapon( self get_player_tactical_grenade() ); - } - if ( isDefined( level.zombiemode_time_bomb_give_func ) ) - { - self [[ level.zombiemode_time_bomb_give_func ]](); -#/ - } -} - -zombie_devgui_give_black_hole_bomb() -{ -/# - self endon( "disconnect" ); - self notify( "give_tactical_grenade_thread" ); - self endon( "give_tactical_grenade_thread" ); - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - level.devcheater = 1; - if ( isDefined( self get_player_tactical_grenade() ) ) - { - self takeweapon( self get_player_tactical_grenade() ); - } - while ( isDefined( level.zombiemode_devgui_black_hole_bomb_give ) ) - { - self [[ level.zombiemode_devgui_black_hole_bomb_give ]](); - while ( 1 ) - { - self givemaxammo( "zombie_black_hole_bomb" ); - wait 1; -#/ - } - } -} - -zombie_devgui_give_dolls() -{ -/# - self endon( "disconnect" ); - self notify( "give_tactical_grenade_thread" ); - self endon( "give_tactical_grenade_thread" ); - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - level.devcheater = 1; - if ( isDefined( self get_player_tactical_grenade() ) ) - { - self takeweapon( self get_player_tactical_grenade() ); - } - while ( isDefined( level.zombiemode_devgui_nesting_dolls_give ) ) - { - self [[ level.zombiemode_devgui_nesting_dolls_give ]](); - while ( 1 ) - { - self givemaxammo( "zombie_nesting_dolls" ); - wait 1; -#/ - } - } -} - -zombie_devgui_give_quantum_bomb() -{ -/# - self endon( "disconnect" ); - self notify( "give_tactical_grenade_thread" ); - self endon( "give_tactical_grenade_thread" ); - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - level.devcheater = 1; - if ( isDefined( self get_player_tactical_grenade() ) ) - { - self takeweapon( self get_player_tactical_grenade() ); - } - while ( isDefined( level.zombiemode_devgui_quantum_bomb_give ) ) - { - self [[ level.zombiemode_devgui_quantum_bomb_give ]](); - while ( 1 ) - { - self givemaxammo( "zombie_quantum_bomb" ); - wait 1; -#/ - } - } -} - -zombie_devgui_give_emp_bomb() -{ -/# - self endon( "disconnect" ); - self notify( "give_tactical_grenade_thread" ); - self endon( "give_tactical_grenade_thread" ); - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - level.devcheater = 1; - if ( isDefined( self get_player_tactical_grenade() ) ) - { - self takeweapon( self get_player_tactical_grenade() ); - } - while ( isDefined( level.zombiemode_devgui_emp_bomb_give ) ) - { - self [[ level.zombiemode_devgui_emp_bomb_give ]](); - while ( 1 ) - { - self givemaxammo( "emp_grenade_zm" ); - wait 1; -#/ - } - } -} - -zombie_devgui_invulnerable( playerindex, onoff ) -{ -/# - players = get_players(); - if ( !isDefined( playerindex ) ) - { - i = 0; - while ( i < players.size ) - { - zombie_devgui_invulnerable( i, onoff ); - i++; - } - } - else if ( players.size > playerindex ) - { - if ( onoff ) - { - players[ playerindex ] enableinvulnerability(); - return; - } - else - { - players[ playerindex ] disableinvulnerability(); -#/ - } - } -} - -zombie_devgui_kill() -{ -/# - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - self disableinvulnerability(); - death_from = ( randomfloatrange( -20, 20 ), randomfloatrange( -20, 20 ), randomfloatrange( -20, 20 ) ); - self dodamage( self.health + 666, self.origin + death_from ); -#/ -} - -zombie_devgui_toggle_ammo() -{ -/# - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - self notify( "devgui_toggle_ammo" ); - self endon( "devgui_toggle_ammo" ); - self.ammo4evah = !is_true( self.ammo4evah ); - while ( isDefined( self ) && self.ammo4evah ) - { - weapon = self getcurrentweapon(); - if ( weapon != "none" ) - { - self setweaponoverheating( 0, 0 ); - max = weaponmaxammo( weapon ); - if ( isDefined( max ) ) - { - self setweaponammostock( weapon, max ); - } - if ( isDefined( self get_player_tactical_grenade() ) ) - { - self givemaxammo( self get_player_tactical_grenade() ); - } - if ( isDefined( self get_player_lethal_grenade() ) ) - { - self givemaxammo( self get_player_lethal_grenade() ); - } - } - wait 1; -#/ - } -} - -zombie_devgui_toggle_ignore() -{ -/# - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - self.ignoreme = !self.ignoreme; - if ( self.ignoreme ) - { - setdvar( "ai_showFailedPaths", 0 ); -#/ - } -} - -zombie_devgui_revive() -{ -/# - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - self reviveplayer(); - self notify( "stop_revive_trigger" ); - if ( isDefined( self.revivetrigger ) ) - { - self.revivetrigger delete(); - self.revivetrigger = undefined; - } - self allowjump( 1 ); - self.ignoreme = 0; - self.laststand = undefined; - self notify( "player_revived" ); -#/ -} - -zombie_devgui_give_health() -{ -/# - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - self notify( "devgui_health" ); - self endon( "devgui_health" ); - self endon( "disconnect" ); - self endon( "death" ); - level.devcheater = 1; - while ( 1 ) - { - self.maxhealth = 100000; - self.health = 100000; - self waittill_any( "player_revived", "perk_used", "spawned_player" ); - wait 2; -#/ - } -} - -zombie_devgui_give_perk( perk ) -{ -/# - vending_triggers = getentarray( "zombie_vending", "targetname" ); - player = get_players()[ 0 ]; - level.devcheater = 1; - if ( vending_triggers.size < 1 ) - { - return; - } - i = 0; - while ( i < vending_triggers.size ) - { - if ( vending_triggers[ i ].script_noteworthy == perk ) - { - vending_triggers[ i ] notify( "trigger" ); - return; - } - i++; -#/ - } -} - -zombie_devgui_give_powerup( powerup_name, now, origin ) -{ -/# - player = get_players()[ 0 ]; - found = 0; - level.devcheater = 1; - i = 0; - while ( i < level.zombie_powerup_array.size ) - { - if ( level.zombie_powerup_array[ i ] == powerup_name ) - { - level.zombie_powerup_index = i; - found = 1; - break; - } - else - { - i++; - } - } - if ( !found ) - { - return; - } - direction = player getplayerangles(); - direction_vec = anglesToForward( direction ); - eye = player geteye(); - scale = 8000; - direction_vec = ( direction_vec[ 0 ] * scale, direction_vec[ 1 ] * scale, direction_vec[ 2 ] * scale ); - trace = bullettrace( eye, eye + direction_vec, 0, undefined ); - level.zombie_devgui_power = 1; - level.zombie_vars[ "zombie_drop_item" ] = 1; - level.powerup_drop_count = 0; - if ( isDefined( origin ) ) - { - level thread maps/mp/zombies/_zm_powerups::powerup_drop( origin ); - } - else - { - if ( !isDefined( now ) || now ) - { - level thread maps/mp/zombies/_zm_powerups::powerup_drop( trace[ "position" ] ); -#/ - } - } -} - -zombie_devgui_goto_round( target_round ) -{ -/# - player = get_players()[ 0 ]; - if ( target_round < 1 ) - { - target_round = 1; - } - level.devcheater = 1; - level.zombie_total = 0; - maps/mp/zombies/_zm::ai_calculate_health( target_round ); - level.round_number = target_round - 1; - level notify( "kill_round" ); - wait 1; - zombies = get_round_enemy_array(); - while ( isDefined( zombies ) ) - { - i = 0; - while ( i < zombies.size ) - { - if ( is_true( zombies[ i ].ignore_devgui_death ) ) - { - i++; - continue; - } - else - { - zombies[ i ] dodamage( zombies[ i ].health + 666, zombies[ i ].origin ); - } - i++; -#/ - } - } -} - -zombie_devgui_monkey_round() -{ -/# - if ( isDefined( level.next_monkey_round ) ) - { - zombie_devgui_goto_round( level.next_monkey_round ); -#/ - } -} - -zombie_devgui_thief_round() -{ -/# - if ( isDefined( level.next_thief_round ) ) - { - zombie_devgui_goto_round( level.next_thief_round ); -#/ - } -} - -zombie_devgui_dog_round( num_dogs ) -{ -/# - if ( !isDefined( level.dogs_enabled ) || !level.dogs_enabled ) - { - return; - } - if ( !isDefined( level.dog_rounds_enabled ) || !level.dog_rounds_enabled ) - { - return; - } - if ( !isDefined( level.enemy_dog_spawns ) || level.enemy_dog_spawns.size < 1 ) - { - return; - } - if ( !flag( "dog_round" ) ) - { - setdvar( "force_dogs", num_dogs ); - } - zombie_devgui_goto_round( level.round_number + 1 ); -#/ -} - -zombie_devgui_dog_round_skip() -{ -/# - if ( isDefined( level.next_dog_round ) ) - { - zombie_devgui_goto_round( level.next_dog_round ); -#/ - } -} - -zombie_devgui_dump_zombie_vars() -{ -/# - if ( !isDefined( level.zombie_vars ) ) - { - return; - } - if ( level.zombie_vars.size > 0 ) - { - println( "#### Zombie Variables ####" ); - } - else - { - return; - } - var_names = getarraykeys( level.zombie_vars ); - i = 0; - while ( i < level.zombie_vars.size ) - { - key = var_names[ i ]; - println( ( key + ": " ) + level.zombie_vars[ key ] ); - i++; - } - println( "##### End Zombie Variables #####" ); -#/ -} - -zombie_devgui_pack_current_weapon() -{ -/# - players = get_players(); - reviver = players[ 0 ]; - level.devcheater = 1; - i = 0; - while ( i < players.size ) - { - if ( !players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - weap = maps/mp/zombies/_zm_weapons::get_base_name( players[ i ] getcurrentweapon() ); - weapon = get_upgrade( weap ); - if ( isDefined( weapon ) ) - { - players[ i ] takeweapon( weap ); - players[ i ] giveweapon( weapon, 0, players[ i ] maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); - players[ i ] givestartammo( weapon ); - players[ i ] switchtoweapon( weapon ); - } - } - i++; -#/ - } -} - -zombie_devgui_unpack_current_weapon() -{ -/# - players = get_players(); - reviver = players[ 0 ]; - level.devcheater = 1; - i = 0; - while ( i < players.size ) - { - if ( !players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - weap = players[ i ] getcurrentweapon(); - weapon = maps/mp/zombies/_zm_weapons::get_base_weapon_name( weap, 1 ); - if ( isDefined( weapon ) ) - { - players[ i ] takeweapon( weap ); - players[ i ] giveweapon( weapon, 0, players[ i ] maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); - players[ i ] givestartammo( weapon ); - players[ i ] switchtoweapon( weapon ); - } - } - i++; -#/ - } -} - -zombie_devgui_reopt_current_weapon() -{ -/# - players = get_players(); - reviver = players[ 0 ]; - level.devcheater = 1; - i = 0; - while ( i < players.size ) - { - if ( !players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - weap = players[ i ] getcurrentweapon(); - weapon = weap; - if ( isDefined( weapon ) ) - { - if ( isDefined( players[ i ].pack_a_punch_weapon_options ) ) - { - } - players[ i ] takeweapon( weap ); - players[ i ] giveweapon( weapon, 0, players[ i ] maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); - players[ i ] givestartammo( weapon ); - players[ i ] switchtoweapon( weapon ); - } - } - i++; -#/ - } -} - -zombie_devgui_take_weapon() -{ -/# - players = get_players(); - reviver = players[ 0 ]; - level.devcheater = 1; - i = 0; - while ( i < players.size ) - { - if ( !players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - weap = players[ i ] getcurrentweapon(); - weapon = weap; - if ( isDefined( weapon ) ) - { - players[ i ] takeweapon( weap ); - players[ i ] switch_back_primary_weapon( undefined ); - } - } - i++; -#/ - } -} - -zombie_devgui_take_weapons( give_fallback ) -{ -/# - players = get_players(); - reviver = players[ 0 ]; - level.devcheater = 1; - i = 0; - while ( i < players.size ) - { - if ( !players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - players[ i ] takeallweapons(); - if ( give_fallback ) - { - players[ i ] give_fallback_weapon(); - } - } - i++; -#/ - } -} - -get_upgrade( weaponname ) -{ -/# - if ( isDefined( level.zombie_weapons[ weaponname ] ) && isDefined( level.zombie_weapons[ weaponname ].upgrade_name ) ) - { - return maps/mp/zombies/_zm_weapons::get_upgrade_weapon( weaponname, 0 ); - } - else - { - return maps/mp/zombies/_zm_weapons::get_upgrade_weapon( weaponname, 1 ); -#/ - } -} - -zombie_devgui_director_easy() -{ -/# - if ( isDefined( level.director_devgui_health ) ) - { - [[ level.director_devgui_health ]](); -#/ - } -} - -zombie_devgui_chest_never_move() -{ -/# - level notify( "devgui_chest_end_monitor" ); - level endon( "devgui_chest_end_monitor" ); - for ( ;; ) - { - level.chest_accessed = 0; - wait 5; -#/ - } -} - -zombie_devgui_disable_kill_thread_toggle() -{ -/# - if ( !is_true( level.disable_kill_thread ) ) - { - level.disable_kill_thread = 1; - } - else - { - level.disable_kill_thread = 0; -#/ - } -} - -zombie_devgui_check_kill_thread_every_frame_toggle() -{ -/# - if ( !is_true( level.check_kill_thread_every_frame ) ) - { - level.check_kill_thread_every_frame = 1; - } - else - { - level.check_kill_thread_every_frame = 0; -#/ - } -} - -zombie_devgui_kill_thread_test_mode_toggle() -{ -/# - if ( !is_true( level.kill_thread_test_mode ) ) - { - level.kill_thread_test_mode = 1; - } - else - { - level.kill_thread_test_mode = 0; -#/ - } -} - -showonespawnpoint( spawn_point, color, notification, height, print ) -{ -/# - if ( !isDefined( height ) || height <= 0 ) - { - height = get_player_height(); - } - if ( !isDefined( print ) ) - { - print = spawn_point.classname; - } - center = spawn_point.origin; - forward = anglesToForward( spawn_point.angles ); - right = anglesToRight( spawn_point.angles ); - forward = vectorScale( forward, 16 ); - right = vectorScale( right, 16 ); - a = ( center + forward ) - right; - b = center + forward + right; - c = ( center - forward ) + right; - d = center - forward - right; - thread lineuntilnotified( a, b, color, 0, notification ); - thread lineuntilnotified( b, c, color, 0, notification ); - thread lineuntilnotified( c, d, color, 0, notification ); - thread lineuntilnotified( d, a, color, 0, notification ); - thread lineuntilnotified( a, a + ( 0, 0, height ), color, 0, notification ); - thread lineuntilnotified( b, b + ( 0, 0, height ), color, 0, notification ); - thread lineuntilnotified( c, c + ( 0, 0, height ), color, 0, notification ); - thread lineuntilnotified( d, d + ( 0, 0, height ), color, 0, notification ); - a += ( 0, 0, height ); - b += ( 0, 0, height ); - c += ( 0, 0, height ); - d += ( 0, 0, height ); - thread lineuntilnotified( a, b, color, 0, notification ); - thread lineuntilnotified( b, c, color, 0, notification ); - thread lineuntilnotified( c, d, color, 0, notification ); - thread lineuntilnotified( d, a, color, 0, notification ); - center += ( 0, 0, height / 2 ); - arrow_forward = anglesToForward( spawn_point.angles ); - arrowhead_forward = anglesToForward( spawn_point.angles ); - arrowhead_right = anglesToRight( spawn_point.angles ); - arrow_forward = vectorScale( arrow_forward, 32 ); - arrowhead_forward = vectorScale( arrowhead_forward, 24 ); - arrowhead_right = vectorScale( arrowhead_right, 8 ); - a = center + arrow_forward; - b = ( center + arrowhead_forward ) - arrowhead_right; - c = center + arrowhead_forward + arrowhead_right; - thread lineuntilnotified( center, a, color, 0, notification ); - thread lineuntilnotified( a, b, color, 0, notification ); - thread lineuntilnotified( a, c, color, 0, notification ); - thread print3duntilnotified( spawn_point.origin + ( 0, 0, height ), print, color, 1, 1, notification ); - return; -#/ -} - -print3duntilnotified( origin, text, color, alpha, scale, notification ) -{ -/# - level endon( notification ); - for ( ;; ) - { - print3d( origin, text, color, alpha, scale ); - wait 0,05; -#/ - } -} - -lineuntilnotified( start, end, color, depthtest, notification ) -{ -/# - level endon( notification ); - for ( ;; ) - { - line( start, end, color, depthtest ); - wait 0,05; -#/ - } -} - -devgui_debug_hud() -{ -/# - if ( isDefined( self get_player_lethal_grenade() ) ) - { - self givemaxammo( self get_player_lethal_grenade() ); - } - self thread maps/mp/zombies/_zm_weap_claymore::claymore_setup(); - if ( isDefined( level.zombiemode_time_bomb_give_func ) ) - { - if ( isDefined( self get_player_tactical_grenade() ) ) - { - self takeweapon( self get_player_tactical_grenade() ); - } - self [[ level.zombiemode_time_bomb_give_func ]](); - } - else if ( isDefined( level.zombiemode_devgui_cymbal_monkey_give ) ) - { - if ( isDefined( self get_player_tactical_grenade() ) ) - { - self takeweapon( self get_player_tactical_grenade() ); - } - self [[ level.zombiemode_devgui_cymbal_monkey_give ]](); - } - else - { - if ( isDefined( self get_player_tactical_grenade() ) ) - { - self givemaxammo( self get_player_tactical_grenade() ); - } - } - if ( isDefined( level.zombie_include_equipment ) && !isDefined( self get_player_equipment() ) ) - { - equipment = getarraykeys( level.zombie_include_equipment ); - if ( isDefined( equipment[ 0 ] ) ) - { - self zombie_devgui_equipment_give( equipment[ 0 ] ); - } - } - candidate_list = []; - _a2327 = level.zones; - _k2327 = getFirstArrayKey( _a2327 ); - while ( isDefined( _k2327 ) ) - { - zone = _a2327[ _k2327 ]; - if ( isDefined( zone.unitrigger_stubs ) ) - { - candidate_list = arraycombine( candidate_list, zone.unitrigger_stubs, 1, 0 ); - } - _k2327 = getNextArrayKey( _a2327, _k2327 ); - } - _a2335 = candidate_list; - _k2335 = getFirstArrayKey( _a2335 ); - while ( isDefined( _k2335 ) ) - { - stub = _a2335[ _k2335 ]; - if ( isDefined( stub.piece ) && isDefined( stub.piece.buildable_slot ) ) - { - if ( !isDefined( self player_get_buildable_piece( stub.piece.buildable_slot ) ) ) - { - self thread maps/mp/zombies/_zm_buildables::player_take_piece( stub.piece ); - } - } - _k2335 = getNextArrayKey( _a2335, _k2335 ); - } - i = 0; - while ( i < 10 ) - { - zombie_devgui_give_powerup( "free_perk", 1, self.origin ); - wait 0,25; - i++; - } - zombie_devgui_give_powerup( "insta_kill", 1, self.origin ); - wait 0,25; - zombie_devgui_give_powerup( "double_points", 1, self.origin ); - wait 0,25; - zombie_devgui_give_powerup( "fire_sale", 1, self.origin ); - wait 0,25; - zombie_devgui_give_powerup( "minigun", 1, self.origin ); - wait 0,25; - zombie_devgui_give_powerup( "bonfire_sale", 1, self.origin ); - wait 0,25; - self weapon_give( "tar21_upgraded_zm+gl" ); -#/ -} diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_equip_gasmask.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_equip_gasmask.gsc deleted file mode 100644 index b1364d4..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_equip_gasmask.gsc +++ /dev/null @@ -1,201 +0,0 @@ -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( !maps/mp/zombies/_zm_equipment::is_equipment_included( "equip_gasmask_zm" ) ) - { - return; - } - registerclientfield( "toplayer", "gasmaskoverlay", 16000, 1, "int" ); - maps/mp/zombies/_zm_equipment::register_equipment( "equip_gasmask_zm", &"ZOMBIE_EQUIP_GASMASK_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_GASMASK_HOWTO", undefined, "gasmask", ::gasmask_activation_watcher_thread ); - level.deathcard_spawn_func = ::remove_gasmask_on_player_bleedout; - precacheitem( "lower_equip_gasmask_zm" ); - onplayerconnect_callback( ::gasmask_on_player_connect ); -} - -gasmask_on_player_connect() -{ -} - -gasmask_removed_watcher_thread() -{ - self notify( "only_one_gasmask_removed_thread" ); - self endon( "only_one_gasmask_removed_thread" ); - self endon( "disconnect" ); - self waittill( "equip_gasmask_zm_taken" ); - if ( isDefined( level.zombiemode_gasmask_reset_player_model ) ) - { - ent_num = self.characterindex; - if ( isDefined( self.zm_random_char ) ) - { - ent_num = self.zm_random_char; - } - self [[ level.zombiemode_gasmask_reset_player_model ]]( ent_num ); - } - if ( isDefined( level.zombiemode_gasmask_reset_player_viewmodel ) ) - { - ent_num = self.characterindex; - if ( isDefined( self.zm_random_char ) ) - { - ent_num = self.zm_random_char; - } - self [[ level.zombiemode_gasmask_reset_player_viewmodel ]]( ent_num ); - } - self setclientfieldtoplayer( "gasmaskoverlay", 0 ); -} - -gasmask_activation_watcher_thread() -{ - self endon( "zombified" ); - self endon( "disconnect" ); - self endon( "equip_gasmask_zm_taken" ); - self thread gasmask_removed_watcher_thread(); - self thread remove_gasmask_on_game_over(); - if ( isDefined( level.zombiemode_gasmask_set_player_model ) ) - { - ent_num = self.characterindex; - if ( isDefined( self.zm_random_char ) ) - { - ent_num = self.zm_random_char; - } - self [[ level.zombiemode_gasmask_set_player_model ]]( ent_num ); - } - if ( isDefined( level.zombiemode_gasmask_set_player_viewmodel ) ) - { - ent_num = self.characterindex; - if ( isDefined( self.zm_random_char ) ) - { - ent_num = self.zm_random_char; - } - self [[ level.zombiemode_gasmask_set_player_viewmodel ]]( ent_num ); - } - for ( ;; ) - { - while ( 1 ) - { - self waittill_either( "equip_gasmask_zm_activate", "equip_gasmask_zm_deactivate" ); - if ( self maps/mp/zombies/_zm_equipment::is_equipment_active( "equip_gasmask_zm" ) ) - { - self increment_is_drinking(); - self setactionslot( 1, "" ); - if ( isDefined( level.zombiemode_gasmask_set_player_model ) ) - { - ent_num = self.characterindex; - if ( isDefined( self.zm_random_char ) ) - { - ent_num = self.zm_random_char; - } - self [[ level.zombiemode_gasmask_change_player_headmodel ]]( ent_num, 1 ); - } - clientnotify( "gmsk2" ); - self waittill( "weapon_change_complete" ); - self setclientfieldtoplayer( "gasmaskoverlay", 1 ); - } - else - { - self increment_is_drinking(); - self setactionslot( 1, "" ); - if ( isDefined( level.zombiemode_gasmask_set_player_model ) ) - { - ent_num = self.characterindex; - if ( isDefined( self.zm_random_char ) ) - { - ent_num = self.zm_random_char; - } - self [[ level.zombiemode_gasmask_change_player_headmodel ]]( ent_num, 0 ); - } - self takeweapon( "equip_gasmask_zm" ); - self giveweapon( "lower_equip_gasmask_zm" ); - self switchtoweapon( "lower_equip_gasmask_zm" ); - wait 0.05; - self setclientfieldtoplayer( "gasmaskoverlay", 0 ); - self waittill( "weapon_change_complete" ); - self takeweapon( "lower_equip_gasmask_zm" ); - self giveweapon( "equip_gasmask_zm" ); - } - if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - if ( self is_multiple_drinking() ) - { - self decrement_is_drinking(); - self setactionslot( 1, "weapon", "equip_gasmask_zm" ); - self notify( "equipment_select_response_done" ); - } - } - else if ( isDefined( self.prev_weapon_before_equipment_change ) && self hasweapon( self.prev_weapon_before_equipment_change ) ) - { - if ( self.prev_weapon_before_equipment_change != self getcurrentweapon() ) - { - self switchtoweapon( self.prev_weapon_before_equipment_change ); - self waittill( "weapon_change_complete" ); - } - break; - } - else - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - if ( primaryweapons[ 0 ] != self getcurrentweapon() ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - self waittill( "weapon_change_complete" ); - } - break; - } - else - { - self switchtoweapon( get_player_melee_weapon() ); - } - } - } - self setactionslot( 1, "weapon", "equip_gasmask_zm" ); - if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.intermission ) && !self.intermission ) - { - self decrement_is_drinking(); - } - self notify( "equipment_select_response_done" ); - } -} - -remove_gasmask_on_player_bleedout() -{ - self setclientfieldtoplayer( "gasmaskoverlay", 0 ); - wait_network_frame(); - wait_network_frame(); - self setclientfieldtoplayer( "gasmaskoverlay", 1 ); -} - -remove_gasmask_on_game_over() -{ - self endon( "equip_gasmask_zm_taken" ); - level waittill( "pre_end_game" ); - self setclientfieldtoplayer( "gasmaskoverlay", 0 ); -} - -gasmask_active() -{ - return self maps/mp/zombies/_zm_equipment::is_equipment_active( "equip_gasmask_zm" ); -} - -gasmask_debug_print( msg, color ) -{ -/* -/# - if ( !getDvarInt( #"4D1BCA99" ) ) - { - return; - } - if ( !isDefined( color ) ) - { - color = ( 0, 0, 1 ); - } - print3d( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), msg, color, 1, 1, 40 ); -#/ -*/ -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_equip_hacker.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_equip_hacker.gsc deleted file mode 100644 index 29bb3d6..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_equip_hacker.gsc +++ /dev/null @@ -1,915 +0,0 @@ -#include maps/mp/zombies/_zm_equip_hacker; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( !maps/mp/zombies/_zm_equipment::is_equipment_included( "equip_hacker_zm" ) ) - { - return; - } - maps/mp/zombies/_zm_equipment::register_equipment( "equip_hacker_zm", &"ZOMBIE_EQUIP_HACKER_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_HACKER_HOWTO", undefined, "hacker" ); - level._hackable_objects = []; - level._pooled_hackable_objects = []; - onplayerconnect_callback( ::hacker_on_player_connect ); - level thread hack_trigger_think(); - level thread hacker_trigger_pool_think(); - level thread hacker_round_reward(); - /* - if ( getDvarInt( #"53BD7080" ) == 1 ) - { - level thread hacker_debug(); - } - */ -} - -hacker_round_reward() -{ - while ( 1 ) - { - level waittill( "end_of_round" ); - if ( !isDefined( level._from_nml ) ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( isDefined( players[ i ] get_player_equipment() ) && players[ i ] get_player_equipment() == "equip_hacker_zm" ) - { - if ( isDefined( players[ i ].equipment_got_in_round[ "equip_hacker_zm" ] ) ) - { - got_in_round = players[ i ].equipment_got_in_round[ "equip_hacker_zm" ]; - rounds_kept = level.round_number - got_in_round; - rounds_kept -= 1; - if ( rounds_kept > 0 ) - { - rounds_kept = min( rounds_kept, 5 ); - score = rounds_kept * 500; - players[ i ] maps/mp/zombies/_zm_score::add_to_player_score( int( score ) ); - } - } - } - i++; - } - } - else level._from_nml = undefined; - } -} - -hacker_debug() -{ - while ( 1 ) - { - i = 0; - while ( i < level._hackable_objects.size ) - { - hackable = level._hackable_objects[ i ]; - if ( isDefined( hackable.pooled ) && hackable.pooled ) - { - if ( isDefined( hackable._trigger ) ) - { - col = vectorScale( ( 0, 0, 1 ), 255 ); - if ( isDefined( hackable.custom_debug_color ) ) - { - col = hackable.custom_debug_color; - } -/# - print3d( hackable.origin, "+", col, 1, 1 ); -#/ - } - else - { -/# - print3d( hackable.origin, "+", vectorScale( ( 0, 0, 1 ), 255 ), 1, 1 ); -#/ - } - i++; - continue; - } - else - { -/# - print3d( hackable.origin, "+", vectorScale( ( 0, 0, 1 ), 255 ), 1, 1 ); -#/ - } - i++; - } - wait 0.1; - } -} - -hacker_trigger_pool_think() -{ - if ( !isDefined( level._zombie_hacker_trigger_pool_size ) ) - { - level._zombie_hacker_trigger_pool_size = 8; - } - pool_active = 0; - level._hacker_pool = []; - while ( 1 ) - { - if ( pool_active ) - { - if ( !any_hackers_active() ) - { - destroy_pooled_items(); - } - else - { - sweep_pooled_items(); - add_eligable_pooled_items(); - } - } - else - { - if ( any_hackers_active() ) - { - pool_active = 1; - } - } - wait 0.1; - } -} - -destroy_pooled_items() -{ - pool_active = 0; - i = 0; - while ( i < level._hacker_pool.size ) - { - level._hacker_pool[ i ]._trigger delete(); - level._hacker_pool[ i ]._trigger = undefined; - i++; - } - level._hacker_pool = []; -} - -sweep_pooled_items() -{ - new_hacker_pool = []; - i = 0; - while ( i < level._hacker_pool.size ) - { - if ( level._hacker_pool[ i ] should_pooled_object_exist() ) - { - new_hacker_pool[ new_hacker_pool.size ] = level._hacker_pool[ i ]; - i++; - continue; - } - else - { - if ( isDefined( level._hacker_pool[ i ]._trigger ) ) - { - level._hacker_pool[ i ]._trigger delete(); - } - level._hacker_pool[ i ]._trigger = undefined; - } - i++; - } - level._hacker_pool = new_hacker_pool; -} - -should_pooled_object_exist() -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] hacker_active() ) - { - if ( isDefined( self.entity ) ) - { - if ( self.entity != players[ i ] ) - { - if ( distance2dsquared( players[ i ].origin, self.entity.origin ) <= ( self.radius * self.radius ) ) - { - return 1; - } - } - } - else - { - if ( distance2dsquared( players[ i ].origin, self.origin ) <= ( self.radius * self.radius ) ) - { - return 1; - } - } - } - i++; - } - return 0; -} - -add_eligable_pooled_items() -{ - candidates = []; - i = 0; - while ( i < level._hackable_objects.size ) - { - hackable = level._hackable_objects[ i ]; - if ( isDefined( hackable.pooled ) && hackable.pooled && !isDefined( hackable._trigger ) ) - { - if ( !isinarray( level._hacker_pool, hackable ) ) - { - if ( hackable should_pooled_object_exist() ) - { - candidates[ candidates.size ] = hackable; - } - } - } - i++; - } - i = 0; - while ( i < candidates.size ) - { - candidate = candidates[ i ]; - height = 72; - radius = 32; - if ( isDefined( candidate.radius ) ) - { - radius = candidate.radius; - } - if ( isDefined( candidate.height ) ) - { - height = candidate.height; - } - trigger = spawn( "trigger_radius_use", candidate.origin, 0, radius, height ); - trigger usetriggerrequirelookat(); - trigger triggerignoreteam(); - trigger setcursorhint( "HINT_NOICON" ); - trigger.radius = radius; - trigger.height = height; - trigger.beinghacked = 0; - candidate._trigger = trigger; - level._hacker_pool[ level._hacker_pool.size ] = candidate; - i++; - } -} - -get_hackable_trigger() -{ - if ( isDefined( self.door ) ) - { - return self.door; - } - else - { - if ( isDefined( self.perk ) ) - { - return self.perk; - } - else - { - if ( isDefined( self.window ) ) - { - return self.window.unitrigger_stub.trigger; - } - else - { - if ( isDefined( self.classname ) && getsubstr( self.classname, 0, 7 ) == "trigger_" ) - { - return self; - } - } - } - } -} - -any_hackers_active() -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] hacker_active() ) - { - return 1; - } - i++; - } - return 0; -} - -register_hackable( name, callback_func, qualifier_func ) -{ - structs = getstructarray( name, "script_noteworthy" ); - if ( !isDefined( structs ) ) - { -/# - println( "Error: register_hackable called on script_noteworthy " + name + " but no such structs exist." ); -#/ - return; - } - i = 0; - while ( i < structs.size ) - { - if ( !isinarray( level._hackable_objects, structs[ i ] ) ) - { - structs[ i ]._hack_callback_func = callback_func; - structs[ i ]._hack_qualifier_func = qualifier_func; - structs[ i ].pooled = level._hacker_pooled; - if ( isDefined( structs[ i ].targetname ) ) - { - structs[ i ].hacker_target = getent( structs[ i ].targetname, "targetname" ); - } - level._hackable_objects[ level._hackable_objects.size ] = structs[ i ]; - if ( isDefined( level._hacker_pooled ) ) - { - level._pooled_hackable_objects[ level._pooled_hackable_objects.size ] = structs[ i ]; - } - structs[ i ] thread hackable_object_thread(); - wait_network_frame(); - } - i++; - } -} - -register_hackable_struct( struct, callback_func, qualifier_func ) -{ - if ( !isinarray( level._hackable_objects, struct ) ) - { - struct._hack_callback_func = callback_func; - struct._hack_qualifier_func = qualifier_func; - struct.pooled = level._hacker_pooled; - if ( isDefined( struct.targetname ) ) - { - struct.hacker_target = getent( struct.targetname, "targetname" ); - } - level._hackable_objects[ level._hackable_objects.size ] = struct; - if ( isDefined( level._hacker_pooled ) ) - { - level._pooled_hackable_objects[ level._pooled_hackable_objects.size ] = struct; - } - struct thread hackable_object_thread(); - } -} - -register_pooled_hackable_struct( struct, callback_func, qualifier_func ) -{ - level._hacker_pooled = 1; - register_hackable_struct( struct, callback_func, qualifier_func ); - level._hacker_pooled = undefined; -} - -register_pooled_hackable( name, callback_func, qualifier_func ) -{ - level._hacker_pooled = 1; - register_hackable( name, callback_func, qualifier_func ); - level._hacker_pooled = undefined; -} - -deregister_hackable_struct( struct ) -{ - if ( isinarray( level._hackable_objects, struct ) ) - { - new_list = []; - i = 0; - while ( i < level._hackable_objects.size ) - { - if ( level._hackable_objects[ i ] != struct ) - { - new_list[ new_list.size ] = level._hackable_objects[ i ]; - i++; - continue; - } - else - { - level._hackable_objects[ i ] notify( "hackable_deregistered" ); - if ( isDefined( level._hackable_objects[ i ]._trigger ) ) - { - level._hackable_objects[ i ]._trigger delete(); - } - if ( isDefined( level._hackable_objects[ i ].pooled ) && level._hackable_objects[ i ].pooled ) - { - arrayremovevalue( level._hacker_pool, level._hackable_objects[ i ] ); - arrayremovevalue( level._pooled_hackable_objects, level._hackable_objects[ i ] ); - } - } - i++; - } - level._hackable_objects = new_list; - } -} - -deregister_hackable( noteworthy ) -{ - new_list = []; - i = 0; - while ( i < level._hackable_objects.size ) - { - if ( !isDefined( level._hackable_objects[ i ].script_noteworthy ) || level._hackable_objects[ i ].script_noteworthy != noteworthy ) - { - new_list[ new_list.size ] = level._hackable_objects[ i ]; - } - else - { - level._hackable_objects[ i ] notify( "hackable_deregistered" ); - if ( isDefined( level._hackable_objects[ i ]._trigger ) ) - { - level._hackable_objects[ i ]._trigger delete(); - } - } - if ( isDefined( level._hackable_objects[ i ].pooled ) && level._hackable_objects[ i ].pooled ) - { - arrayremovevalue( level._hacker_pool, level._hackable_objects[ i ] ); - } - i++; - } - level._hackable_objects = new_list; -} - -hack_trigger_think() -{ - while ( 1 ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - j = 0; - while ( j < level._hackable_objects.size ) - { - hackable = level._hackable_objects[ j ]; - if ( isDefined( hackable._trigger ) ) - { - qualifier_passed = 1; - if ( isDefined( hackable._hack_qualifier_func ) ) - { - qualifier_passed = hackable [[ hackable._hack_qualifier_func ]]( player ); - } - if ( player hacker_active() && qualifier_passed && !hackable._trigger.beinghacked ) - { - hackable._trigger setinvisibletoplayer( player, 0 ); - j++; - continue; - } - else - { - hackable._trigger setinvisibletoplayer( player, 1 ); - } - } - j++; - } - i++; - } - wait 0.1; - } -} - -is_facing( facee ) -{ - orientation = self getplayerangles(); - forwardvec = anglesToForward( orientation ); - forwardvec2d = ( forwardvec[ 0 ], forwardvec[ 1 ], 0 ); - unitforwardvec2d = vectornormalize( forwardvec2d ); - tofaceevec = facee.origin - self.origin; - tofaceevec2d = ( tofaceevec[ 0 ], tofaceevec[ 1 ], 0 ); - unittofaceevec2d = vectornormalize( tofaceevec2d ); - dotproduct = vectordot( unitforwardvec2d, unittofaceevec2d ); - dot_limit = 0.8; - if ( isDefined( facee.dot_limit ) ) - { - dot_limit = facee.dot_limit; - } - return dotproduct > dot_limit; -} - -can_hack( hackable ) -{ - if ( !isalive( self ) ) - { - return 0; - } - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - return 0; - } - if ( !self hacker_active() ) - { - return 0; - } - if ( !isDefined( hackable._trigger ) ) - { - return 0; - } - if ( isDefined( hackable.player ) ) - { - if ( hackable.player != self ) - { - return 0; - } - } - if ( self throwbuttonpressed() ) - { - return 0; - } - if ( self fragbuttonpressed() ) - { - return 0; - } - if ( isDefined( hackable._hack_qualifier_func ) ) - { - if ( !( hackable [[ hackable._hack_qualifier_func ]]( self ) ) ) - { - return 0; - } - } - if ( !isinarray( level._hackable_objects, hackable ) ) - { - return 0; - } - radsquared = 1024; - if ( isDefined( hackable.radius ) ) - { - radsquared = hackable.radius * hackable.radius; - } - origin = hackable.origin; - if ( isDefined( hackable.entity ) ) - { - origin = hackable.entity.origin; - } - if ( distance2dsquared( self.origin, origin ) > radsquared ) - { - return 0; - } - if ( !isDefined( hackable.no_touch_check ) && !self istouching( hackable._trigger ) ) - { - return 0; - } - if ( !self is_facing( hackable ) ) - { - return 0; - } - if ( !isDefined( hackable.no_sight_check ) && !sighttracepassed( self.origin + vectorScale( ( 0, 0, 1 ), 50 ), origin, 0, undefined ) ) - { - return 0; - } - if ( !isDefined( hackable.no_bullet_trace ) && !bullettracepassed( self.origin + vectorScale( ( 0, 0, 1 ), 50 ), origin, 0, undefined ) ) - { - return 0; - } - return 1; -} - -is_hacking( hackable ) -{ - if ( can_hack( hackable ) ) - { - return self usebuttonpressed(); - } -} - -set_hack_hint_string() -{ - if ( isDefined( self._trigger ) ) - { - if ( isDefined( self.custom_string ) ) - { - self._trigger sethintstring( self.custom_string ); - return; - } - else if ( !isDefined( self.script_int ) || self.script_int <= 0 ) - { - self._trigger sethintstring( &"ZOMBIE_HACK_NO_COST" ); - return; - } - else - { - self._trigger sethintstring( &"ZOMBIE_HACK", self.script_int ); - } - } -} - -tidy_on_deregister( hackable ) -{ - self endon( "clean_up_tidy_up" ); - hackable waittill( "hackable_deregistered" ); - if ( isDefined( self.hackerprogressbar ) ) - { - self.hackerprogressbar maps/mp/gametypes_zm/_hud_util::destroyelem(); - } - if ( isDefined( self.hackertexthud ) ) - { - self.hackertexthud destroy(); - } -} - -hacker_do_hack( hackable ) -{ - timer = 0; - hacked = 0; - hackable._trigger.beinghacked = 1; - if ( !isDefined( self.hackerprogressbar ) ) - { - self.hackerprogressbar = self maps/mp/gametypes_zm/_hud_util::createprimaryprogressbar(); - } - if ( !isDefined( self.hackertexthud ) ) - { - self.hackertexthud = newclienthudelem( self ); - } - hack_duration = hackable.script_float; - if ( self hasperk( "specialty_fastreload" ) ) - { - hack_duration *= 0.66; - } - hack_duration = max( 1.5, hack_duration ); - self thread tidy_on_deregister( hackable ); - self.hackerprogressbar maps/mp/gametypes_zm/_hud_util::updatebar( 0.01, 1 / hack_duration ); - self.hackertexthud.alignx = "center"; - self.hackertexthud.aligny = "middle"; - self.hackertexthud.horzalign = "center"; - self.hackertexthud.vertalign = "bottom"; - self.hackertexthud.y = -113; - if ( issplitscreen() ) - { - self.hackertexthud.y = -107; - } - self.hackertexthud.foreground = 1; - self.hackertexthud.font = "default"; - self.hackertexthud.fontscale = 1.8; - self.hackertexthud.alpha = 1; - self.hackertexthud.color = ( 0, 0, 1 ); - self.hackertexthud settext( &"ZOMBIE_HACKING" ); - self playloopsound( "zmb_progress_bar", 0,5 ); - while ( self is_hacking( hackable ) ) - { - wait 0.05; - timer += 0.05; - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - break; - } - else if ( timer >= hack_duration ) - { - hacked = 1; - break; - } - else - { - } - } - self stoploopsound( 0.5 ); - if ( hacked ) - { - self playsound( "vox_mcomp_hack_success" ); - } - else self playsound( "vox_mcomp_hack_fail" ); - if ( isDefined( self.hackerprogressbar ) ) - { - self.hackerprogressbar maps/mp/gametypes_zm/_hud_util::destroyelem(); - } - if ( isDefined( self.hackertexthud ) ) - { - self.hackertexthud destroy(); - } - hackable set_hack_hint_string(); - if ( isDefined( hackable._trigger ) ) - { - hackable._trigger.beinghacked = 0; - } - self notify( "clean_up_tidy_up" ); - return hacked; -} - -lowreadywatcher( player ) -{ - player endon( "disconnected" ); - self endon( "kill_lowreadywatcher" ); - self waittill( "hackable_deregistered" ); -} - -hackable_object_thread() -{ - self endon( "hackable_deregistered" ); - height = 72; - radius = 64; - if ( isDefined( self.radius ) ) - { - radius = self.radius; - } - if ( isDefined( self.height ) ) - { - height = self.height; - } - if ( !isDefined( self.pooled ) ) - { - trigger = spawn( "trigger_radius_use", self.origin, 0, radius, height ); - trigger usetriggerrequirelookat(); - trigger setcursorhint( "HINT_NOICON" ); - trigger.radius = radius; - trigger.height = height; - trigger.beinghacked = 0; - self._trigger = trigger; - } - cost = 0; - if ( isDefined( self.script_int ) ) - { - cost = self.script_int; - } - duration = 1; - if ( isDefined( self.script_float ) ) - { - duration = self.script_float; - } - while ( 1 ) - { - wait 0.1; - while ( !isDefined( self._trigger ) ) - { - continue; - } - players = get_players(); - if ( isDefined( self._trigger ) ) - { - if ( isDefined( self.entity ) ) - { - self.origin = self.entity.origin; - self._trigger.origin = self.entity.origin; - if ( isDefined( self.trigger_offset ) ) - { - self._trigger.origin += self.trigger_offset; - } - } - } - i = 0; - while ( i < players.size ) - { - if ( players[ i ] can_hack( self ) ) - { - self set_hack_hint_string(); - break; - } - else - { - i++; - } - } - i = 0; - while ( i < players.size ) - { - hacker = players[ i ]; - if ( !hacker is_hacking( self ) ) - { - i++; - continue; - } - else if ( hacker.score >= cost || cost <= 0 ) - { - self thread lowreadywatcher( hacker ); - hack_success = hacker hacker_do_hack( self ); - self notify( "kill_lowreadywatcher" ); - if ( isDefined( hacker ) ) - { - } - if ( isDefined( hacker ) && hack_success ) - { - if ( cost ) - { - if ( cost > 0 ) - { - hacker maps/mp/zombies/_zm_score::minus_to_player_score( cost ); - break; - } - else - { - hacker maps/mp/zombies/_zm_score::add_to_player_score( cost * -1 ); - } - } - hacker notify( "successful_hack" ); - if ( isDefined( self._hack_callback_func ) ) - { - self thread [[ self._hack_callback_func ]]( hacker ); - } - } - i++; - continue; - } - else - { - hacker play_sound_on_ent( "no_purchase" ); - hacker maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money", undefined, 1 ); - } - i++; - } - } -} - -hacker_on_player_connect() -{ - struct = spawnstruct(); - struct.origin = self.origin; - struct.radius = 48; - struct.height = 64; - struct.script_float = 10; - struct.script_int = 500; - struct.entity = self; - struct.trigger_offset = vectorScale( ( 0, 0, 1 ), 48 ); - register_pooled_hackable_struct( struct, ::player_hack, ::player_qualifier ); - struct thread player_hack_disconnect_watcher( self ); -} - -player_hack_disconnect_watcher( player ) -{ - player waittill( "disconnect" ); - deregister_hackable_struct( self ); -} - -player_hack( hacker ) -{ - if ( isDefined( self.entity ) ) - { - self.entity maps/mp/zombies/_zm_score::player_add_points( "hacker_transfer", 500 ); - } - if ( isDefined( hacker ) ) - { - hacker thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "hack_plr" ); - } -} - -player_qualifier( player ) -{ - if ( player == self.entity ) - { - return 0; - } - if ( self.entity maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - return 0; - } - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - return 0; - } - if ( isDefined( self.entity.sessionstate == "spectator" ) && self.entity.sessionstate == "spectator" ) - { - return 0; - } - return 1; -} - -hide_hint_when_hackers_active( custom_logic_func, custom_logic_func_param ) -{ - invis_to_any = 0; - while ( 1 ) - { - if ( isDefined( custom_logic_func ) ) - { - self [[ custom_logic_func ]]( custom_logic_func_param ); - } - if ( maps/mp/zombies/_zm_equip_hacker::any_hackers_active() ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] hacker_active() ) - { - self setinvisibletoplayer( players[ i ], 1 ); - invis_to_any = 1; - i++; - continue; - } - else - { - self setinvisibletoplayer( players[ i ], 0 ); - } - i++; - } - } - else while ( invis_to_any ) - { - invis_to_any = 0; - players = get_players(); - i = 0; - while ( i < players.size ) - { - self setinvisibletoplayer( players[ i ], 0 ); - i++; - } - } - wait 0.1; - } -} - -hacker_debug_print( msg, color ) -{ -/# - if ( !getDvarInt( #"428DE100" ) ) - { - return; - } - if ( !isDefined( color ) ) - { - color = ( 0, 0, 1 ); - } - print3d( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), msg, color, 1, 1, 40 ); -#/ -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_equip_turbine.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_equip_turbine.gsc deleted file mode 100644 index 9ec9f80..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_equip_turbine.gsc +++ /dev/null @@ -1,776 +0,0 @@ -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_power; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -//#using_animtree( "zombie_turbine" ); - -init( hint, howto ) //checked matches cerberus output -{ - if ( !isDefined( hint ) ) - { - hint = &"ZOMBIE_EQUIP_TURBINE_PICKUP_HINT_STRING"; - } - if ( !isDefined( howto ) ) - { - howto = &"ZOMBIE_EQUIP_TURBINE_HOWTO"; - } - if ( !maps/mp/zombies/_zm_equipment::is_equipment_included( "equip_turbine_zm" ) ) - { - return; - } - level.turbine_name = "equip_turbine_zm"; - maps/mp/zombies/_zm_equipment::register_equipment( "equip_turbine_zm", hint, howto, "turbine_zm_icon", "turbine", undefined, ::transferturbine, ::dropturbine, ::pickupturbine, ::placeturbine ); - maps/mp/zombies/_zm_equipment::add_placeable_equipment( "equip_turbine_zm", "p6_anim_zm_buildable_turbine", ::destroy_placed_turbine ); - level thread onplayerconnect(); - maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "equip_turbine", hint ); - level._effect[ "turbine_on" ] = loadfx( "maps/zombie/fx_zmb_tranzit_wind_turbine_on" ); - level._effect[ "turbine_med" ] = loadfx( "maps/zombie/fx_zmb_tranzit_wind_turbine_med" ); - level._effect[ "turbine_low" ] = loadfx( "maps/zombie/fx_zmb_tranzit_wind_turbine_low" ); - level._effect[ "turbine_aoe" ] = loadfx( "maps/zombie/fx_zmb_tranzit_wind_turbine_aoe" ); - level._turbine_disappear_fx = loadfx( "maps/zombie/fx_zmb_tranzit_turbine_explo" ); -} - -onplayerconnect() //checked matches cerberus output -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread onplayerspawned(); - } -} - -onplayerspawned() //checked matches cerberus output -{ - self endon( "disconnect" ); - self thread setupwatchers(); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread watchturbineuse(); - } -} - -setupwatchers() //checked matches cerberus output -{ - self waittill( "weapon_watchers_created" ); - watcher = maps/mp/gametypes_zm/_weaponobjects::getweaponobjectwatcher( "equip_turbine" ); - watcher.onspawnretrievetriggers = maps/mp/zombies/_zm_equipment::equipment_onspawnretrievableweaponobject; -} - -watchturbineuse() //checked matches cerberus output -{ - self notify( "watchTurbineUse" ); - self endon( "watchTurbineUse" ); - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "equipment_placed", weapon, weapname ); - if ( weapname == level.turbine_name ) - { - self cleanupoldturbine(); - self.buildableturbine = weapon; - self thread startturbinedeploy( weapon ); - level notify( "turbine_deployed" ); - } - } -} - -cleanupoldturbine( preserve_state ) //checked matches cerberus output -{ - if ( isDefined( self.localpower ) ) - { - maps/mp/zombies/_zm_power::end_local_power( self.localpower ); - self notify( "depower_on_disconnect" ); - self.localpower = undefined; - self.turbine_power_is_on = 0; - } - self.turbine_is_powering_on = 0; - if ( isDefined( self.buildableturbine ) ) - { - if ( isDefined( self.buildableturbine.stub ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildableturbine.stub ); - self.buildableturbine.stub = undefined; - } - self.buildableturbine stoploopsound(); - self.buildableturbine delete(); - if ( !is_true( preserve_state ) ) - { - self.turbine_health = undefined; - self.turbine_emped = undefined; - self.turbine_emp_time = undefined; - } - } -} - -watchforcleanup() //checked matches cerberus output -{ - self notify( "turbine_cleanup" ); - self endon( "turbine_cleanup" ); - evt = self waittill_any_return( "death_or_disconnect", "equip_turbine_zm_taken", "equip_turbine_zm_pickup" ); - if ( isDefined( self ) ) - { - self cleanupoldturbine( evt == "equip_turbine_zm_pickup" ); - } -} - -depower_on_disconnect( localpower ) //checked matches cerberus output -{ - self notify( "depower_on_disconnect" ); - self endon( "depower_on_disconnect" ); - self waittill( "disconnect" ); - if ( isDefined( localpower ) ) - { - maps/mp/zombies/_zm_power::end_local_power( localpower ); - } -} - -placeturbine( origin, angles ) //checked matches cerberus output -{ - item = self maps/mp/zombies/_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_turbine", "equip_turbine_zm", origin, angles ); - return item; -} - -dropturbine() //checked matches cerberus output -{ - item = thread maps/mp/zombies/_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_turbine", "equip_turbine_zm", self.origin, self.angles ); - if ( isDefined( item ) ) - { - item.turbine_power_on = self.turbine_power_on; - item.turbine_power_level = self.turbine_power_level; - item.turbine_round_start = self.turbine_round_start; - item.turbine_health = self.turbine_health; - item.turbine_emped = self.turbine_emped; - item.turbine_emp_time = self.turbine_emp_time; - } - self.turbine_is_powering_on = undefined; - self.turbine_power_on = undefined; - self.turbine_power_level = undefined; - self.turbine_round_start = undefined; - self.turbine_health = undefined; - self.turbine_emped = undefined; - self.turbine_emp_time = undefined; - return item; -} - -pickupturbine( item ) //checked matches cerberus output -{ - item.owner = self; - self.turbine_power_on = item.turbine_power_on; - item.turbine_power_on = undefined; - self.turbine_power_level = item.turbine_power_level; - self.turbine_round_start = item.turbine_round_start; - self.turbine_health = item.turbine_health; - item.turbine_health = undefined; - item.turbine_power_level = undefined; - item.turbine_round_start = undefined; - self.turbine_emped = item.turbine_emped; - self.turbine_emp_time = item.turbine_emp_time; - item.turbine_emped = undefined; - item.turbine_emp_time = undefined; - self.turbine_is_powering_on = undefined; -} - -transferturbine( fromplayer, toplayer ) //checked changed to match cerberus output -{ - while ( is_true( toplayer.turbine_is_powering_on ) || is_true( fromplayer.turbine_is_powering_on ) ) - { - wait 0.05; - } - if ( isDefined( fromplayer.buildableturbine ) && is_true( fromplayer.buildableturbine.dying ) ) - { - fromplayer cleanupoldturbine( 0 ); - } - if ( isDefined( toplayer.buildableturbine ) && is_true( toplayer.buildableturbine.dying ) ) - { - toplayer cleanupoldturbine( 0 ); - } - buildableturbine = toplayer.buildableturbine; - localpower = toplayer.localpower; - turbine_power_on = toplayer.turbine_power_on; - turbine_power_is_on = toplayer.turbine_power_is_on; - turbine_power_level = toplayer.turbine_power_level; - turbine_round_start = toplayer.turbine_round_start; - turbine_health = toplayer.turbine_health; - turbine_emped = toplayer.turbine_emped; - turbine_emp_time = toplayer.turbine_emp_time; - toplayer.buildableturbine = fromplayer.buildableturbine; - fromplayer.buildableturbine = buildableturbine; - toplayer.localpower = fromplayer.localpower; - fromplayer.localpower = localpower; - toplayer.turbine_power_on = fromplayer.turbine_power_on; - fromplayer.turbine_power_on = turbine_power_on; - toplayer.turbine_power_is_on = fromplayer.turbine_power_is_on; - fromplayer.turbine_power_is_on = turbine_power_is_on; - toplayer.turbine_power_level = fromplayer.turbine_power_level; - toplayer.turbine_round_start = fromplayer.turbine_round_start; - fromplayer.turbine_power_level = turbine_power_level; - fromplayer.turbine_round_start = turbine_round_start; - toplayer.turbine_health = fromplayer.turbine_health; - fromplayer.turbine_health = turbine_health; - toplayer.turbine_emped = fromplayer.turbine_emped; - fromplayer.turbine_emped = turbine_emped; - toplayer.turbine_emp_time = fromplayer.turbine_emp_time; - fromplayer.turbine_emp_time = turbine_emp_time; - toplayer.turbine_is_powering_on = undefined; - fromplayer.turbine_is_powering_on = undefined; - toplayer notify( "equip_turbine_zm_taken" ); - toplayer.buildableturbine.original_owner = toplayer; - toplayer thread startturbinedeploy( toplayer.buildableturbine ); - fromplayer notify( "equip_turbine_zm_taken" ); - if ( isDefined( fromplayer.buildableturbine ) ) - { - fromplayer thread startturbinedeploy( fromplayer.buildableturbine ); - fromplayer.buildableturbine.original_owner = fromplayer; - fromplayer.buildableturbine.owner = fromplayer; - } - else - { - fromplayer maps/mp/zombies/_zm_equipment::equipment_release( "equip_turbine_zm" ); - } -} - -startturbinedeploy( weapon ) //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_turbine_zm_taken" ); - self thread watchforcleanup(); - origin = weapon.origin; - powerradius = 335; - if ( !isDefined( self.turbine_health ) ) - { - self.turbine_health = 1200; - self.turbine_power_level = 4; - self.turbine_power_on = 1; - self.turbine_is_powering_on = undefined; - } - if ( !isDefined( self.turbine_round_start ) ) - { - self.turbine_round_start = level.round_number; - self.turbine_power_on = 1; - } - self thread turbinedecay(); - self thread turbinepowerdiminish( origin, powerradius ); - if ( isDefined( weapon ) ) - { - /* -/# - self thread debugturbine( powerradius ); -#/ - */ - self thread turbineaudio(); - self thread turbineanim(); - self thread turbinepowerthink( weapon, powerradius ); - if ( is_true( weapon.equipment_can_move ) ) - { - self thread turbinepowermove( weapon ); - } - self thread maps/mp/zombies/_zm_buildables::delete_on_disconnect( weapon ); - weapon waittill( "death" ); - self thread turbinepoweroff( origin, powerradius ); - self notify( "turbine_cleanup" ); - } -} - -turbine_watch_for_emp( weapon, powerradius ) //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_turbine_zm_taken" ); - self.buildableturbine endon( "death" ); - if ( !should_watch_for_emp() ) - { - return; - } - while ( 1 ) - { - level waittill( "emp_detonate", origin, radius ); - if ( distancesquared( origin, self.buildableturbine.origin ) < ( radius * radius ) ) - { - break; - } - } - self.turbine_emped = 1; - self.turbine_emp_time = getTime(); - self notify( "turbine_power_change" ); -} - -turbinepowerthink( weapon, powerradius ) //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_turbine_zm_taken" ); - self.buildableturbine endon( "death" ); - origin = weapon.origin; - self thread turbine_watch_for_emp( weapon, powerradius ); - if ( is_true( self.turbine_power_on ) || is_true( self.turbine_emped ) ) - { - self thread turbinepoweron( origin, powerradius ); - } - while ( isDefined( self.buildableturbine ) ) - { - self waittill( "turbine_power_change" ); - if ( is_true( self.turbine_emped ) ) - { - self thread turbinepoweroff( origin, powerradius ); - if ( isDefined( weapon ) ) - { - origin = weapon.origin; - } - self thread turbinepoweron( origin, powerradius ); - //continue; - } - else if ( !is_true( self.turbine_power_is_on ) ) - { - self thread turbinepoweroff( origin, powerradius ); - break; - } - else if ( isDefined( weapon ) ) - { - origin = weapon.origin; - } - self thread turbinepoweron( origin, powerradius ); - } -} - -turbinepowermove( weapon ) //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_turbine_zm_taken" ); - self.buildableturbine endon( "death" ); - origin = weapon.origin; - while ( 1 ) - { - if ( origin != weapon.origin ) - { - if ( isDefined( self.localpower ) ) - { - self.localpower = maps/mp/zombies/_zm_power::move_local_power( self.localpower, origin ); - } - origin = weapon.origin; - } - wait 0.5; - } -} - -turbinewarmup() //checked matches cerberus output //order of operations may need to be checked -{ - if ( is_true( self.turbine_emped ) ) - { - emp_time = level.zombie_vars[ "emp_perk_off_time" ]; - now = getTime(); - emp_time_left = emp_time - ( ( now - self.turbine_emp_time ) / 1000 ); - if ( emp_time_left > 0 ) - { - wait emp_time_left; - } - self.turbine_emped = undefined; - self.turbine_emp_time = undefined; - } - self.buildableturbine maps/mp/zombies/_zm_equipment::signal_equipment_activated( 3 ); - wait 0.5; - self.buildableturbine maps/mp/zombies/_zm_equipment::signal_equipment_activated( 2 ); - wait 0.5; - self.buildableturbine maps/mp/zombies/_zm_equipment::signal_equipment_activated( 1 ); - wait 0.5; -} - -turbinepoweron( origin, powerradius ) //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_turbine_zm_taken" ); - self.buildableturbine endon( "death" ); - if ( !is_true( self.turbine_power_is_on ) && !is_true( self.turbine_is_powering_on ) && !is_true( self.buildableturbine.dying ) ) - { - self.turbine_is_powering_on = 1; - self.buildableturbine playloopsound( "zmb_turbine_loop", 2 ); - self turbinewarmup(); - if ( isDefined( self.localpower ) ) - { - maps/mp/zombies/_zm_power::end_local_power( self.localpower ); - } - self.localpower = undefined; - self.turbine_power_is_on = 0; - if ( !is_true( self.turbine_emped ) ) - { - self.localpower = maps/mp/zombies/_zm_power::add_local_power( origin, powerradius ); - self thread depower_on_disconnect( self.localpower ); - self.turbine_power_is_on = 1; - self thread turbineaudio(); - } - self.turbine_is_powering_on = 0; - self thread turbinefx(); - self thread turbinedecay(); - } -} - -turbinepoweroff( origin, powerradius ) //checked matches cerberus output -{ - if ( is_true( self.turbine_power_is_on ) ) - { - if ( isDefined( self.localpower ) ) - { - maps/mp/zombies/_zm_power::end_local_power( self.localpower ); - } - self notify( "depower_on_disconnect" ); - self.localpower = undefined; - self.turbine_power_is_on = 0; - self thread turbineaudio(); - if ( !is_true( self.buildableturbine.dying ) ) - { - self thread turbineanim(); - } - } -} - -turbine_disappear_fx( origin, waittime ) //checked matches cerberus output -{ - if ( isDefined( waittime ) && waittime > 0 ) - { - wait waittime; - } - playfx( level._turbine_disappear_fx, origin ); - if ( isDefined( self.buildableturbine ) ) - { - playsoundatposition( "zmb_turbine_explo", self.buildableturbine.origin ); - } -} - -turbinefxonce( withaoe ) //checked matches cerberus output -{ - if ( isDefined( self ) && isDefined( self.buildableturbine ) && is_true( self.turbine_power_is_on ) ) - { - value = 0; - switch( self.turbine_power_level ) - { - case 3: - case 4: - value = 1; - break; - case 2: - value = 2; - break; - case 1: - value = 3; - break; - } - if ( withaoe ) - { - if ( is_true( self.buildableturbine.equipment_can_move ) && is_true( self.buildableturbine.move_parent.ismoving ) ) - { - value |= 4; - } - else - { - value |= 8; - } - } - if ( value && isDefined( self.buildableturbine ) && is_true( self.turbine_power_is_on ) ) - { - self.buildableturbine thread maps/mp/zombies/_zm_equipment::signal_equipment_activated( value ); - } - } -} - -turbinefx() //checked matches cerberus output -{ - self endon( "disconnect" ); - self endon( "equip_turbine_zm_taken" ); - while ( isDefined( self ) && isDefined( self.buildableturbine ) && is_true( self.turbine_power_is_on ) ) - { - self turbinefxonce( 1 ); - wait 0.5; - self turbinefxonce( 0 ); - wait 0.5; - } -} - -turbineaudio() //checked changed to match cerberus output -{ - if ( !isDefined( self.buildableturbine ) ) - { - return; - } - if ( !is_true( self.turbine_power_is_on ) || is_true( self.turbine_emped ) ) - { - self.buildableturbine stoploopsound(); - return; - } - self.buildableturbine playloopsound( "zmb_turbine_loop", 2 ); -} - -init_animtree() //checked matches cerberus output -{ - scriptmodelsuseanimtree( -1 ); -} - -turbineanim( wait_for_end ) //checked changed to match cerberus output -{ - if ( !isDefined( self.buildableturbine ) ) - { - return; - } - animlength = 0; - self.buildableturbine useanimtree( -1 ); - if ( is_true( self.buildableturbine.dying ) ) - { - animlength = getanimlength( %o_zombie_buildable_turbine_death ); - self.buildableturbine setanim( %o_zombie_buildable_turbine_death ); - break; - } - if ( is_true( self.turbine_emped ) ) - { - self.buildableturbine clearanim( %o_zombie_buildable_turbine_fullpower, 0 ); - return; - } - switch( self.turbine_power_level ) - { - case 3: - case 4: - animlength = getanimlength( %o_zombie_buildable_turbine_fullpower ); - self.buildableturbine setanim( %o_zombie_buildable_turbine_fullpower ); - break; - case 2: - animlength = getanimlength( %o_zombie_buildable_turbine_halfpower ); - self.buildableturbine setanim( %o_zombie_buildable_turbine_halfpower ); - break; - case 1: - animlength = getanimlength( %o_zombie_buildable_turbine_neardeath ); - self.buildableturbine setanim( %o_zombie_buildable_turbine_neardeath ); - break; - } - if ( is_true( wait_for_end ) ) - { - wait animlength; - } -} - -turbinedecay() //checked changed to match cerberus output //order of operations may need to be checked -{ - self notify( "turbineDecay" ); - self endon( "turbineDecay" ); - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_turbine_zm_taken" ); - self.buildableturbine endon( "death" ); - roundlives = 4; - if ( !isDefined( self.turbine_power_level ) ) - { - self.turbine_power_level = roundlives; - } - while ( self.turbine_health > 0 ) - { - old_power_level = self.turbine_power_level; - if ( is_true( self.turbine_emped ) && is_true( self.turbine_is_powering_on ) ) - { - emp_time = level.zombie_vars[ "emp_perk_off_time" ]; - now = getTime(); - emp_time_left = emp_time - ( ( now - self.turbine_emp_time ) / 1000 ); - if ( emp_time_left <= 0 ) - { - self.turbine_emped = undefined; - self.turbine_emp_time = undefined; - self.turbine_power_is_on = 0; - old_power_level = -1; - } - } - if ( is_true( self.turbine_emped ) ) - { - self.turbine_power_level = 0; - } - else if ( is_true( self.turbine_power_is_on ) ) - { - cost = 1; - if ( isDefined( self.localpower ) ) - { - cost += maps/mp/zombies/_zm_power::get_local_power_cost( self.localpower ); - } - self.turbine_health -= cost; - if ( self.turbine_health < 200 ) - { - self.turbine_power_level = 1; - break; - } - else if ( self.turbine_health < 600 ) - { - self.turbine_power_level = 2; - break; - } - else - { - self.turbine_power_level = 4; - } - } - if ( old_power_level != self.turbine_power_level ) - { - self notify( "turbine_power_change" ); - self thread turbineaudio(); - if ( !is_true( self.buildableturbine.dying ) ) - { - self thread turbineanim(); - } - } - wait 1; - } - self destroy_placed_turbine(); - if ( isDefined( self.buildableturbine ) ) - { - turbine_disappear_fx( self.buildableturbine.origin ); - } - self thread wait_and_take_equipment(); - self.turbine_health = undefined; - self.turbine_power_level = undefined; - self.turbine_round_start = undefined; - self.turbine_power_on = undefined; - self.turbine_emped = undefined; - self.turbine_emp_time = undefined; - self cleanupoldturbine(); -} - -destroy_placed_turbine() //checked matches cerberus output -{ - if ( isDefined( self.buildableturbine ) ) - { - if ( is_true( self.buildableturbine.dying ) ) - { - while ( isDefined( self.buildableturbine ) ) - { - wait 0.05; - } - return; - } - if ( isDefined( self.buildableturbine.stub ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildableturbine.stub ); - } - thread turbine_disappear_fx( self.buildableturbine.origin, 0,75 ); - self.buildableturbine.dying = 1; - self turbineanim( 1 ); - } -} - -wait_and_take_equipment() //checked matches cerberus output -{ - wait 0.05; - self thread maps/mp/zombies/_zm_equipment::equipment_release( "equip_turbine_zm" ); -} - -turbinepowerdiminish( origin, powerradius ) //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_turbine_zm_taken" ); - self.buildableturbine endon( "death" ); - while ( !is_true( self.buildableturbine.dying ) ) - { - if ( isDefined( self.turbine_power_level ) && isDefined( self.buildableturbine ) ) - { - switch( self.turbine_power_level ) - { - case 4: - break; - case 3: - break; - case 2: - self.turbine_power_on = 1; - wait randomintrange( 12, 20 ); - self turbinepoweroff( origin, powerradius ); - self.turbine_power_on = 0; - wait randomintrange( 3, 8 ); - self turbinepoweron( origin, powerradius ); - break; - case 1: - self.turbine_power_on = 1; - wait randomintrange( 3, 7 ); - self turbinepoweroff( origin, powerradius ); - self.turbine_power_on = 0; - wait randomintrange( 6, 12 ); - self turbinepoweron( origin, powerradius ); - break; - } - wait 0.05; - } - } -} - -debugturbine( radius ) //checked changed to match cerberus output may need to check order of operations -{ - /* -/# - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_turbine_zm_taken" ); - self.buildableturbine endon( "death" ); - while ( isDefined( self.buildableturbine ) ) - { - //missing dvar name - if ( getDvarInt( #"EB512CB7" ) ) - { - color = ( 0, 1, 0 ); - text = ""; - if ( isDefined( self.turbine_health ) ) - { - text = "" + self.turbine_health + ""; - } - if ( isDefined( self.buildableturbine.dying ) && self.buildableturbine.dying ) - { - text = "dying"; - color = ( 0, 0, 0 ); - } - else - { - if ( isDefined( self.turbine_emped ) && self.turbine_emped ) - { - color = ( 0, 0, 1 ); - emp_time = level.zombie_vars[ "emp_perk_off_time" ]; - now = getTime(); - emp_time_left = int( emp_time - ( ( now - self.turbine_emp_time ) / 1000 ) ); - text = ( text + " emp(" ) + emp_time_left + ")"; - break; - } - else - { - if ( isDefined( self.turbine_is_powering_on ) && self.turbine_is_powering_on ) - { - text += " warmup"; - break; - } - else - { - if ( isDefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) - { - if ( self.turbine_health < 200 ) - { - color = ( 1, 0, 0 ); - break; - } - else if ( self.turbine_health < 600 ) - { - color = ( 1, 0,7, 0 ); - break; - } - else - { - color = ( 1, 1, 0 ); - } - } - } - } - } - print3d( self.buildableturbine.origin + vectorScale( ( 0, 0, 1 ), 60 ), text, color, 1, 0.5, 1 ); - } - wait 0.05; -#/ - } - */ -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_equipment.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_equipment.gsc deleted file mode 100644 index 9f1549c..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_equipment.gsc +++ /dev/null @@ -1,1905 +0,0 @@ -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - init_equipment_upgrade(); - onplayerconnect_callback( ::equipment_placement_watcher ); - level._equipment_disappear_fx = loadfx( "maps/zombie/fx_zmb_tranzit_electrap_explo" ); - if ( !is_true( level.disable_fx_zmb_tranzit_shield_explo ) ) - { - level._riotshield_dissapear_fx = loadfx( "maps/zombie/fx_zmb_tranzit_shield_explo" ); - } - level.placeable_equipment_destroy_fn = []; - registerclientfield( "scriptmover", "equipment_activated", 12000, 4, "int" ); - - if ( !is_true( level._no_equipment_activated_clientfield ) ) - { - registerclientfield( "scriptmover", "equipment_activated", 12000, 4, "int" ); - } -} - -signal_equipment_activated( val ) //checked changed to match cerberus output -{ - if ( !isDefined( val ) ) - { - val = 1; - } - if ( is_true( level._no_equipment_activated_clientfield ) ) - { - return; - } - self endon( "death" ); - self setclientfield( "equipment_activated", val ); - for ( i = 0; i < 2; i++ ) - { - wait_network_frame(); - } - self setclientfield( "equipment_activated", 0 ); -} - -register_equipment( equipment_name, hint, howto_hint, hint_icon, equipmentvo, watcher_thread, transfer_fn, drop_fn, pickup_fn, place_fn ) //checked matches cerberus output -{ - if ( !isDefined( level.zombie_include_equipment ) || !is_true( level.zombie_include_equipment[ equipment_name ] ) ) - { - return; - } - precachestring( hint ); - if ( isDefined( hint_icon ) ) - { - precacheshader( hint_icon ); - } - struct = spawnstruct(); - if ( !isDefined( level.zombie_equipment ) ) - { - level.zombie_equipment = []; - } - struct.equipment_name = equipment_name; - struct.hint = hint; - struct.howto_hint = howto_hint; - struct.hint_icon = hint_icon; - struct.vox = equipmentvo; - struct.triggers = []; - struct.models = []; - struct.watcher_thread = watcher_thread; - struct.transfer_fn = transfer_fn; - struct.drop_fn = drop_fn; - struct.pickup_fn = pickup_fn; - struct.place_fn = place_fn; - level.zombie_equipment[ equipment_name ] = struct; -} - -is_equipment_included( equipment_name ) //checked changed at own discretion -{ - if ( !isDefined( level.zombie_include_equipment ) ) - { - return 0; - } - if ( !isDefined( level.zombie_include_equipment[ equipment_name ] ) ) - { - return 0; - } - if ( level.zombie_include_equipment[ equipment_name ] == 0 ) - { - return 0; - } - return 1; -} - -include_zombie_equipment( equipment_name ) //checked matches cerberus output -{ - if ( !isDefined( level.zombie_include_equipment ) ) - { - level.zombie_include_equipment = []; - } - level.zombie_include_equipment[ equipment_name ] = 1; - precacheitem( equipment_name ); -} - -limit_zombie_equipment( equipment_name, limited ) //checked matches cerberus output -{ - if ( !isDefined( level._limited_equipment ) ) - { - level._limited_equipment = []; - } - if ( limited ) - { - level._limited_equipment[ level._limited_equipment.size ] = equipment_name; - } - else - { - arrayremovevalue( level._limited_equipment, equipment_name, 0 ); - } -} - -init_equipment_upgrade() //checked changed to match cerberus output -{ - equipment_spawns = []; - equipment_spawns = getentarray( "zombie_equipment_upgrade", "targetname" ); - for ( i = 0; i < equipment_spawns.size; i++ ) - { - hint_string = get_equipment_hint( equipment_spawns[ i ].zombie_equipment_upgrade ); - equipment_spawns[ i ] sethintstring( hint_string ); - equipment_spawns[ i ] setcursorhint( "HINT_NOICON" ); - equipment_spawns[ i ] usetriggerrequirelookat(); - equipment_spawns[ i ] add_to_equipment_trigger_list( equipment_spawns[ i ].zombie_equipment_upgrade ); - equipment_spawns[ i ] thread equipment_spawn_think(); - } -} - -get_equipment_hint( equipment_name ) //checked matches cerberus output -{ -/* -/# - assert( isDefined( level.zombie_equipment[ equipment_name ] ), equipment_name + " was not included or is not registered with the equipment system." ); -#/ -*/ - return level.zombie_equipment[ equipment_name ].hint; -} - -get_equipment_howto_hint( equipment_name ) //checked matches cerberus output -{ -/* -/# - assert( isDefined( level.zombie_equipment[ equipment_name ] ), equipment_name + " was not included or is not registered with the equipment system." ); -#/ -*/ - return level.zombie_equipment[ equipment_name ].howto_hint; -} - -get_equipment_icon( equipment_name ) //checked matches cerberus output -{ -/* -/# - assert( isDefined( level.zombie_equipment[ equipment_name ] ), equipment_name + " was not included or is not registered with the equipment system." ); -#/ -*/ - return level.zombie_equipment[ equipment_name ].hint_icon; -} - -add_to_equipment_trigger_list( equipment_name ) //checked matches cerberus output -{ -/* -/# - assert( isDefined( level.zombie_equipment[ equipment_name ] ), equipment_name + " was not included or is not registered with the equipment system." ); -#/ -*/ - level.zombie_equipment[ equipment_name ].triggers[ level.zombie_equipment[ equipment_name ].triggers.size ] = self; - level.zombie_equipment[ equipment_name ].models[ level.zombie_equipment[ equipment_name ].models.size ] = getent( self.target, "targetname" ); -} - -equipment_spawn_think() //checked changed to match cerberus output -{ - for ( ;; ) - { - self waittill( "trigger", player ); - if ( player in_revive_trigger() || player.is_drinking > 0 ) - { - wait 0.1; - continue; - } - if ( is_limited_equipment( self.zombie_equipment_upgrade ) ) - { - player setup_limited_equipment( self.zombie_equipment_upgrade ); - if ( isDefined( level.hacker_tool_positions ) ) - { - new_pos = random( level.hacker_tool_positions ); - self.origin = new_pos.trigger_org; - model = getent( self.target, "targetname" ); - model.origin = new_pos.model_org; - model.angles = new_pos.model_ang; - } - } - player equipment_give( self.zombie_equipment_upgrade ); - } -} - -set_equipment_invisibility_to_player( equipment, invisible ) //checked changed to match cerberus output -{ - triggers = level.zombie_equipment[ equipment ].triggers; - for ( i = 0; i < triggers.size; i++ ) - { - if ( isDefined( triggers[ i ] ) ) - { - triggers[ i ] setinvisibletoplayer( self, invisible ); - } - } - models = level.zombie_equipment[ equipment ].models; - for ( i = 0; i < models.size; i++ ) - { - if ( isDefined( models[ i ] ) ) - { - models[ i ] setinvisibletoplayer( self, invisible ); - } - } -} - -equipment_take( equipment ) //checked matches cerberus output -{ - if ( !isDefined( equipment ) ) - { - equipment = self get_player_equipment(); - } - if ( !isDefined( equipment ) ) - { - return; - } - if ( !self has_player_equipment( equipment ) ) - { - return; - } - current = 0; - current_weapon = 0; - if ( isDefined( self get_player_equipment() ) && equipment == self get_player_equipment() ) - { - current = 1; - } - if ( equipment == self getcurrentweapon() ) - { - current_weapon = 1; - } - /* -/# - println( "ZM EQUIPMENT: " + self.name + " lost " + equipment + "\n" ); -#/ - */ - if ( is_true( self.current_equipment_active[ equipment ] ) ) - { - self.current_equipment_active[ equipment ] = 0; - self notify( equipment + "_deactivate" ); - } - self notify( equipment + "_taken" ); - self takeweapon( equipment ); - if ( !is_limited_equipment( equipment ) || is_limited_equipment( equipment ) && !limited_equipment_in_use( equipment ) ) - { - self set_equipment_invisibility_to_player( equipment, 0 ); - } - if ( current ) - { - self set_player_equipment( undefined ); - self setactionslot( 1, "" ); - } - else - { - arrayremovevalue( self.deployed_equipment, equipment ); - } - if ( current_weapon ) - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - } -} - -equipment_give( equipment ) //checked matches cerberus output -{ - if ( !isDefined( equipment ) ) - { - return; - } - if ( !isDefined( level.zombie_equipment[ equipment ] ) ) - { - return; - } - if ( self has_player_equipment( equipment ) ) - { - return; - } - /* -/# - println( "ZM EQUIPMENT: " + self.name + " got " + equipment + "\n" ); -#/ - */ - curr_weapon = self getcurrentweapon(); - curr_weapon_was_curr_equipment = self is_player_equipment( curr_weapon ); - self equipment_take(); - self set_player_equipment( equipment ); - self giveweapon( equipment ); - self setweaponammoclip( equipment, 1 ); - self thread show_equipment_hint( equipment ); - self notify( equipment + "_given" ); - self set_equipment_invisibility_to_player( equipment, 1 ); - self setactionslot( 1, "weapon", equipment ); - if ( isDefined( level.zombie_equipment[ equipment ].watcher_thread ) ) - { - self thread [[ level.zombie_equipment[ equipment ].watcher_thread ]](); - } - self thread equipment_slot_watcher( equipment ); - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", level.zombie_equipment[ equipment ].vox ); -} - -equipment_slot_watcher( equipment ) //checked changed to match cerberus output -{ - self notify( "kill_equipment_slot_watcher" ); - self endon( "kill_equipment_slot_watcher" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "weapon_change", curr_weapon, prev_weapon ); - self.prev_weapon_before_equipment_change = undefined; - if ( isDefined( prev_weapon ) && prev_weapon != "none" ) - { - prev_weapon_type = weaponinventorytype( prev_weapon ); - if ( prev_weapon_type == "primary" || prev_weapon_type == "altmode" ) - { - self.prev_weapon_before_equipment_change = prev_weapon; - } - } - if ( isDefined( level.zombie_equipment[ equipment ].watcher_thread ) ) - { - if ( curr_weapon == equipment ) - { - if ( self.current_equipment_active[ equipment ] == 1 ) - { - self notify( equipment + "_deactivate" ); - self.current_equipment_active[ equipment ] = 0; - } - else - { - if ( self.current_equipment_active[ equipment ] == 0 ) - { - self notify( equipment + "_activate" ); - self.current_equipment_active[ equipment ] = 1; - } - } - self waittill( "equipment_select_response_done" ); - } - } - else if ( curr_weapon == equipment && !self.current_equipment_active[ equipment ] ) - { - self notify( equipment + "_activate" ); - self.current_equipment_active[ equipment ] = 1; - } - else if ( curr_weapon != equipment && self.current_equipment_active[ equipment ] ) - { - self notify( equipment + "_deactivate" ); - self.current_equipment_active[ equipment ] = 0; - } - } -} - -is_limited_equipment( equipment ) //checked changed to match cerberus output -{ - if ( isDefined( level._limited_equipment ) ) - { - for ( i = 0; i < level._limited_equipment.size; i++ ) - { - if ( level._limited_equipment[ i ] == equipment ) - { - return 1; - } - } - } - return 0; -} - -limited_equipment_in_use( equipment ) //checked changed to match cerberus output -{ - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - current_equipment = players[ i ] get_player_equipment(); - if ( isDefined( current_equipment ) && current_equipment == equipment ) - { - return 1; - } - } - if ( isDefined( level.dropped_equipment ) && isDefined( level.dropped_equipment[ equipment ] ) ) - { - return 1; - } - return 0; -} - -setup_limited_equipment( equipment ) //checked changed to match cerberus output -{ - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - players[ i ] set_equipment_invisibility_to_player( equipment, 1 ); - } - self thread release_limited_equipment_on_disconnect( equipment ); - self thread release_limited_equipment_on_equipment_taken( equipment ); -} - -release_limited_equipment_on_equipment_taken( equipment ) //checked changed to match cerberus output -{ - self endon( "disconnect" ); - self waittill_either( equipment + "_taken", "spawned_spectator" ); - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - players[ i ] set_equipment_invisibility_to_player( equipment, 0 ); - } -} - -release_limited_equipment_on_disconnect( equipment ) //checked changed to match cerberus output -{ - self endon( equipment + "_taken" ); - self waittill( "disconnect" ); - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - if ( isalive( players[ i ] ) ) - { - players[ i ] set_equipment_invisibility_to_player( equipment, 0 ); - } - } -} - -is_equipment_active( equipment ) //changed at own discretion -{ - if ( !isDefined( self.current_equipment_active ) || !isDefined( self.current_equipment_active[ equipment ] ) ) - { - return 0; - } - if ( self.current_equipment_active[ equipment ] ) - { - return 1; - } - return 0; -} - -init_equipment_hint_hudelem( x, y, alignx, aligny, fontscale, alpha ) //checked matches cerberus output -{ - self.x = x; - self.y = y; - self.alignx = alignx; - self.aligny = aligny; - self.fontscale = fontscale; - self.alpha = alpha; - self.sort = 20; -} - -setup_equipment_client_hintelem() //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( !isDefined( self.hintelem ) ) - { - self.hintelem = newclienthudelem( self ); - } - if ( level.splitscreen ) - { - self.hintelem init_equipment_hint_hudelem( 160, 90, "center", "middle", 1.6, 1 ); - } - else - { - self.hintelem init_equipment_hint_hudelem( 320, 220, "center", "bottom", 1.6, 1 ); - } -} - -show_equipment_hint( equipment ) //checked matches cerberus output -{ - self notify( "kill_previous_show_equipment_hint_thread" ); - self endon( "kill_previous_show_equipment_hint_thread" ); - self endon( "death" ); - self endon( "disconnect" ); - if ( is_true( self.do_not_display_equipment_pickup_hint ) ) - { - return; - } - wait 0.5; - text = get_equipment_howto_hint( equipment ); - self show_equipment_hint_text( text ); -} - -show_equipment_hint_text( text ) //checked matches cerberus output -{ - self notify( "hide_equipment_hint_text" ); - wait 0.05; - self setup_equipment_client_hintelem(); - self.hintelem settext( text ); - self.hintelem.alpha = 1; - self.hintelem.font = "small"; - self.hintelem.fontscale = 1.25; - self.hintelem.hidewheninmenu = 1; - time = self waittill_notify_or_timeout( "hide_equipment_hint_text", 3.2 ); - if ( isDefined( time ) ) - { - self.hintelem fadeovertime( 0.25 ); - self.hintelem.alpha = 0; - self waittill_notify_or_timeout( "hide_equipment_hint_text", 0.25 ); - } - self.hintelem settext( "" ); - self.hintelem destroy(); -} - -equipment_onspawnretrievableweaponobject( watcher, player ) //checked partially changed to match cerberus output changed at own discretion -{ - iswallmount = 0; - self.plant_parent = self; - if ( isDefined( level.placeable_equipment_type[ self.name ] ) && level.placeable_equipment_type[ self.name ] == "wallmount" ) - { - iswallmount = 1; - } - if ( !isDefined( player.turret_placement ) || !player.turret_placement[ "result" ] ) - { - if ( iswallmount /*|| !getDvarInt( #"B3416C1D" )*/ ) - { - self waittill( "stationary" ); - waittillframeend; - if ( iswallmount ) - { - if ( is_true( player.planted_wallmount_on_a_zombie ) ) - { - equip_name = self.name; - thread equipment_disappear_fx( self.origin, undefined, self.angles ); - self delete(); - if ( player hasweapon( equip_name ) ) - { - player setweaponammoclip( equip_name, 1 ); - } - player.planted_wallmount_on_a_zombie = undefined; - return; - } - } - } - else - { - self.plant_parent = player; - self.origin = player.origin; - self.angles = player.angles; - wait_network_frame(); - } - } - equipment = watcher.name + "_zm"; - /* -/# - if ( !isDefined( player.current_equipment ) || player.current_equipment != equipment ) - { - assert( player has_deployed_equipment( equipment ) ); - assert( !isDefined( player.current_equipment ) ); -#/ - } - */ - if ( isDefined( player.current_equipment ) && player.current_equipment == equipment ) - { - player equipment_to_deployed( equipment ); - } - if ( isDefined( level.zombie_equipment[ equipment ].place_fn ) ) - { - if ( isDefined( player.turret_placement ) && player.turret_placement[ "result" ] ) - { - plant_origin = player.turret_placement[ "origin" ]; - plant_angles = player.turret_placement[ "angles" ]; - } - else if ( isDefined( level.placeable_equipment_type[ self.name ] ) && level.placeable_equipment_type[ self.name ] == "wallmount" ) - { - plant_origin = self.origin; - plant_angles = self.angles; - } - else - { - plant_origin = self.origin; - plant_angles = self.angles; - } - if ( isDefined( level.check_force_deploy_origin ) ) - { - if ( player [[ level.check_force_deploy_origin ]]( self, plant_origin, plant_angles ) ) - { - plant_origin = player.origin; - plant_angles = player.angles; - self.plant_parent = player; - } - } - else if ( isDefined( level.check_force_deploy_z ) ) - { - if ( player [[ level.check_force_deploy_z ]]( self, plant_origin, plant_angles ) ) - { - plant_origin = ( plant_origin[ 0 ], plant_origin[ 1 ], player.origin[ 2 ] + 10 ); - } - } - if ( is_true( iswallmount ) ) - { - self ghost(); - } - replacement = player [[ level.zombie_equipment[ equipment ].place_fn ]]( plant_origin, plant_angles ); - if ( isDefined( replacement ) ) - { - replacement.owner = player; - replacement.original_owner = player; - replacement.name = self.name; - player notify( "equipment_placed" ); - if ( isDefined( level.equipment_planted ) ) - { - player [[ level.equipment_planted ]]( replacement, equipment, self.plant_parent ); - } - player maps/mp/zombies/_zm_buildables::track_buildables_planted( self ); - } - if ( isDefined( self ) ) - { - self delete(); - } - } -} - -equipment_retrieve( player ) //checked changed to match cerberus output -{ - if ( isDefined( self ) ) - { - self stoploopsound(); - original_owner = self.original_owner; - weaponname = self.name; - if ( !isDefined( original_owner ) ) - { - player equipment_give( weaponname ); - self.owner = player; - } - else if ( player != original_owner ) - { - equipment_transfer( weaponname, original_owner, player ); - self.owner = player; - } - player equipment_from_deployed( weaponname ); - if ( is_true( self.requires_pickup ) ) - { - if ( isDefined( level.zombie_equipment[ weaponname ].pickup_fn ) ) - { - self.owner = player; - if ( isDefined( self.damage ) ) - { - player player_set_equipment_damage( weaponname, self.damage ); - } - player [[ level.zombie_equipment[ weaponname ].pickup_fn ]]( self ); - } - } - self.playdialog = 0; - weaponname = self.name; - self delete(); - if ( !player hasweapon( weaponname ) ) - { - player giveweapon( weaponname ); - clip_ammo = player getweaponammoclip( weaponname ); - clip_max_ammo = weaponclipsize( weaponname ); - if ( clip_ammo < clip_max_ammo ) - { - clip_ammo++; - } - player setweaponammoclip( weaponname, clip_ammo ); - } - player maps/mp/zombies/_zm_buildables::track_planted_buildables_pickedup( weaponname ); - } -} - -equipment_drop_to_planted( equipment, player ) //checked matches cerberus output -{ -/* -/# - if ( !isDefined( player.current_equipment ) || player.current_equipment != equipment ) - { - assert( player has_deployed_equipment( equipment ) ); - assert( !isDefined( player.current_equipment ) ); -#/ - } -*/ - if ( isDefined( player.current_equipment ) && player.current_equipment == equipment ) - { - player equipment_to_deployed( equipment ); - } - if ( isDefined( level.zombie_equipment[ equipment ].place_fn ) ) - { - replacement = player [[ level.zombie_equipment[ equipment ].place_fn ]]( player.origin, player.angles ); - if ( isDefined( replacement ) ) - { - replacement.owner = player; - replacement.original_owner = player; - replacement.name = equipment; - if ( isDefined( level.equipment_planted ) ) - { - player [[ level.equipment_planted ]]( replacement, equipment, player ); - } - player notify( "equipment_placed" ); - player maps/mp/zombies/_zm_buildables::track_buildables_planted( replacement ); - } - } -} - -equipment_transfer( weaponname, fromplayer, toplayer ) //checked matches cerberus output -{ - if ( is_limited_equipment( weaponname ) ) - { -/* -/# - println( "ZM EQUIPMENT: " + weaponname + " transferred from " + fromplayer.name + " to " + toplayer.name + "\n" ); -#/ -*/ - toplayer equipment_orphaned( weaponname ); - wait 0.05; -/* -/# - assert( !toplayer has_player_equipment( weaponname ) ); -#/ -/# - assert( fromplayer has_player_equipment( weaponname ) ); -#/ -*/ - toplayer equipment_give( weaponname ); - toplayer equipment_to_deployed( weaponname ); - if ( isDefined( level.zombie_equipment[ weaponname ].transfer_fn ) ) - { - [[ level.zombie_equipment[ weaponname ].transfer_fn ]]( fromplayer, toplayer ); - } - fromplayer equipment_release( weaponname ); -/* -/# - assert( toplayer has_player_equipment( weaponname ) ); -#/ -/# - assert( !fromplayer has_player_equipment( weaponname ) ); -#/ -*/ - equipment_damage = 0; - toplayer player_set_equipment_damage( weaponname, fromplayer player_get_equipment_damage( weaponname ) ); - fromplayer player_set_equipment_damage( equipment_damage ); - } - else - { -/* -/# - println( "ZM EQUIPMENT: " + weaponname + " swapped from " + fromplayer.name + " to " + toplayer.name + "\n" ); -#/ -*/ - toplayer equipment_give( weaponname ); - if ( isDefined( toplayer.current_equipment ) && toplayer.current_equipment == weaponname ) - { - toplayer equipment_to_deployed( weaponname ); - } - if ( isDefined( level.zombie_equipment[ weaponname ].transfer_fn ) ) - { - [[ level.zombie_equipment[ weaponname ].transfer_fn ]]( fromplayer, toplayer ); - } - equipment_damage = toplayer player_get_equipment_damage( weaponname ); - toplayer player_set_equipment_damage( weaponname, fromplayer player_get_equipment_damage( weaponname ) ); - fromplayer player_set_equipment_damage( weaponname, equipment_damage ); - } -} - -equipment_release( equipment ) //checked matches cerberus output -{ -/* -/# - println( "ZM EQUIPMENT: " + self.name + " release " + equipment + "\n" ); -#/ -*/ - self equipment_take( equipment ); -} - -equipment_drop( equipment ) //checked matches cerberus output -{ - if ( isDefined( level.zombie_equipment[ equipment ].place_fn ) ) - { - equipment_drop_to_planted( equipment, self ); -/* -/# - println( "ZM EQUIPMENT: " + self.name + " drop to planted " + equipment + "\n" ); -#/ -*/ - } - else if ( isDefined( level.zombie_equipment[ equipment ].drop_fn ) ) - { - if ( isDefined( self.current_equipment ) && self.current_equipment == equipment ) - { - self equipment_to_deployed( equipment ); - } - item = self [[ level.zombie_equipment[ equipment ].drop_fn ]](); - if ( isDefined( item ) ) - { - if ( isDefined( level.equipment_planted ) ) - { - self [[ level.equipment_planted ]]( item, equipment, self ); - } - item.owner = undefined; - item.damage = self player_get_equipment_damage( equipment ); - } -/* -/# - println( "ZM EQUIPMENT: " + self.name + " dropped " + equipment + "\n" ); -#/ -*/ - } - else - { - self equipment_take(); - } - self notify( "equipment_dropped" ); -} - -equipment_grab( equipment, item ) //checked matches cerberus output -{ -/* -/# - println( "ZM EQUIPMENT: " + self.name + " picked up " + equipment + "\n" ); -#/ -*/ - self equipment_give( equipment ); - if ( isDefined( level.zombie_equipment[ equipment ].pickup_fn ) ) - { - item.owner = self; - self player_set_equipment_damage( equipment, item.damage ); - self [[ level.zombie_equipment[ equipment ].pickup_fn ]]( item ); - } -} - -equipment_orphaned( equipment ) //checked matches cerberus output -{ -/* -/# - println( "ZM EQUIPMENT: " + self.name + " orphaned " + equipment + "\n" ); -#/ -*/ - self equipment_take( equipment ); -} - -equipment_to_deployed( equipment ) //checked matches cerberus output -{ -/* -/# - println( "ZM EQUIPMENT: " + self.name + " deployed " + equipment + "\n" ); -#/ -*/ - if ( !isDefined( self.deployed_equipment ) ) - { - self.deployed_equipment = []; - } -/* -/# - assert( self.current_equipment == equipment ); -#/ -*/ - self.deployed_equipment[ self.deployed_equipment.size ] = equipment; - self.current_equipment = undefined; - if ( !isDefined( level.riotshield_name ) || equipment != level.riotshield_name ) - { - self takeweapon( equipment ); - } - self setactionslot( 1, "" ); -} - -equipment_from_deployed( equipment ) //checked matches cerberus output -{ - if ( !isDefined( equipment ) ) - { - equipment = "none"; - } -/* -/# - println( "ZM EQUIPMENT: " + self.name + " retrieved " + equipment + "\n" ); -#/ -*/ - if ( isDefined( self.current_equipment ) && equipment != self.current_equipment ) - { - self equipment_drop( self.current_equipment ); - } -/* -/# - assert( self has_deployed_equipment( equipment ) ); -#/ -*/ - self.current_equipment = equipment; - if ( isDefined( level.riotshield_name ) && equipment != level.riotshield_name ) - { - self giveweapon( equipment ); - } - if ( self hasweapon( equipment ) ) - { - self setweaponammoclip( equipment, 1 ); - } - self setactionslot( 1, "weapon", equipment ); - arrayremovevalue( self.deployed_equipment, equipment ); - self notify( equipment + "_pickup" ); -} - -eqstub_get_unitrigger_origin() //checked matches cerberus output -{ - if ( isDefined( self.origin_parent ) ) - { - return self.origin_parent.origin; - } - tup = anglesToUp( self.angles ); - eq_unitrigger_offset = 12 * tup; - return self.origin + eq_unitrigger_offset; -} - -eqstub_on_spawn_trigger( trigger ) //checked matches cerberus output -{ - if ( isDefined( self.link_parent ) ) - { - trigger enablelinkto(); - trigger linkto( self.link_parent ); - trigger setmovingplatformenabled( 1 ); - } -} - -equipment_buy( equipment ) //checked changed at own discretion -{ -/* -/# - println( "ZM EQUIPMENT: " + self.name + " bought " + equipment + "\n" ); -#/ -*/ - if ( isDefined( self.current_equipment ) && equipment != self.current_equipment ) - { - self equipment_drop( self.current_equipment ); - } - if ( ( equipment == "riotshield_zm" || equipment == "alcatraz_shield_zm" ) && isDefined( self.player_shield_reset_health ) ) - { - self [[ self.player_shield_reset_health ]](); - } - else - { - self player_set_equipment_damage( equipment, 0 ); - } - self equipment_give( equipment ); -} - -generate_equipment_unitrigger( classname, origin, angles, flags, radius, script_height, hint, icon, think, moving ) //checked matches cerberus output -{ - if ( !isDefined( radius ) ) - { - radius = 64; - } - if ( !isDefined( script_height ) ) - { - script_height = 64; - } - script_width = script_height; - if ( !isDefined( script_width ) ) - { - script_width = 64; - } - script_length = script_height; - if ( !isDefined( script_length ) ) - { - script_length = 64; - } - unitrigger_stub = spawnstruct(); - unitrigger_stub.origin = origin; - if ( isDefined( angles ) ) - { - unitrigger_stub.angles = angles; - } - if ( isDefined( script_length ) ) - { - unitrigger_stub.script_length = script_length; - } - else - { - unitrigger_stub.script_length = 13.5; - } - if ( isDefined( script_width ) ) - { - unitrigger_stub.script_width = script_width; - } - else - { - unitrigger_stub.script_width = 27.5; - } - if ( isDefined( script_height ) ) - { - unitrigger_stub.script_height = script_height; - } - else - { - unitrigger_stub.script_height = 24; - } - unitrigger_stub.radius = radius; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - unitrigger_stub.hint_string = hint; - /* - if ( getDvarInt( #"1F0A2129" ) ) - { - unitrigger_stub.cursor_hint = "HINT_WEAPON"; - unitrigger_stub.cursor_hint_weapon = icon; - } - */ - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.require_look_at = 0; - switch( classname ) - { - case "trigger_radius": - unitrigger_stub.script_unitrigger_type = "unitrigger_radius"; - break; - case "trigger_radius_use": - unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - break; - case "trigger_box": - unitrigger_stub.script_unitrigger_type = "unitrigger_box"; - break; - case "trigger_box_use": - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - break; - } - unitrigger_stub.originfunc = ::eqstub_get_unitrigger_origin; - unitrigger_stub.onspawnfunc = ::eqstub_on_spawn_trigger; - if ( is_true( moving ) ) - { - maps/mp/zombies/_zm_unitrigger::register_unitrigger( unitrigger_stub, think ); - } - else - { - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, think ); - } - return unitrigger_stub; -} - -can_pick_up_equipment( equipment_name, equipment_trigger ) //checked matches cerberus output -{ - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || self in_revive_trigger() ) - { - return 0; - } - if ( self isthrowinggrenade() ) - { - return 0; - } - if ( isDefined( self.screecher_weapon ) ) - { - return 0; - } - if ( self is_jumping() ) - { - return 0; - } - if ( self is_player_equipment( equipment_name ) ) - { - return 0; - } - if ( is_true( self.pickup_equipment ) ) - { - return 0; - } - if ( is_true( level.equipment_team_pick_up ) && !self same_team_placed_equipment( equipment_trigger ) ) - { - return 0; - } - return 1; -} - -same_team_placed_equipment( equipment_trigger ) //checked changed at own discretion -{ - if ( isDefined( equipment_trigger ) && isDefined( equipment_trigger.stub ) && isDefined( equipment_trigger.stub.model ) && isDefined( equipment_trigger.stub.model.owner ) && equipment_trigger.stub.model.owner.pers[ "team" ] == self.pers[ "team" ] ) - { - return 1; - } - return 0; -} - -placed_equipment_think( model, equipname, origin, angles, tradius, toffset ) //checked changed to match cerberus output -{ - pickupmodel = spawn( "script_model", origin ); - if ( isDefined( angles ) ) - { - pickupmodel.angles = angles; - } - pickupmodel setmodel( model ); - if ( isDefined( level.equipment_safe_to_drop ) ) - { - if ( !( self [[ level.equipment_safe_to_drop ]]( pickupmodel ) ) ) - { - equipment_disappear_fx( pickupmodel.origin, undefined, pickupmodel.angles ); - pickupmodel delete(); - self equipment_take( equipname ); - return undefined; - } - } - watchername = getsubstr( equipname, 0, equipname.size - 3 ); - if ( isDefined( level.retrievehints[ watchername ] ) ) - { - hint = level.retrievehints[ watchername ].hint; - } - else - { - hint = &"MP_GENERIC_PICKUP"; - } - icon = get_equipment_icon( equipname ); - if ( !isDefined( tradius ) ) - { - tradius = 32; - } - torigin = origin; - if ( isDefined( toffset ) ) - { - tforward = anglesToForward( angles ); - torigin += toffset * tforward; - } - tup = anglesToUp( angles ); - eq_unitrigger_offset = 12 * tup; - pickupmodel.stub = generate_equipment_unitrigger( "trigger_radius_use", torigin + eq_unitrigger_offset, angles, 0, tradius, 64, hint, equipname, ::placed_equipment_unitrigger_think, pickupmodel.canmove ); - pickupmodel.stub.model = pickupmodel; - pickupmodel.stub.equipname = equipname; - pickupmodel.equipname = equipname; - pickupmodel thread item_attract_zombies(); - pickupmodel thread item_watch_explosions(); - if ( is_limited_equipment( equipname ) ) - { - if ( !isDefined( level.dropped_equipment ) ) - { - level.dropped_equipment = []; - } - if ( isDefined( level.dropped_equipment[ equipname ] ) && isDefined( level.dropped_equipment[ equipname ].model ) ) - { - level.dropped_equipment[ equipname ].model dropped_equipment_destroy( 1 ); - } - level.dropped_equipment[ equipname ] = pickupmodel.stub; - } - destructible_equipment_list_add( pickupmodel ); - return pickupmodel; -} - -watch_player_visibility( equipment ) //checked partially changed to match cerberus output continue in foreach bad check the github for more info -{ - self endon( "kill_trigger" ); - self setinvisibletoall(); - while ( isDefined( self ) ) - { - players = getplayers(); - i = 0; - while ( i < players.size ) - { - if ( !isDefined( player ) ) - { - i++; - continue; - } - invisible = !player can_pick_up_equipment( equipment, self ); - if ( isDefined( self ) ) - { - self setinvisibletoplayer( player, invisible ); - } - wait 0.05; - i++; - } - wait 1; - } -} - -placed_equipment_unitrigger_think() //checked matches cerberus output -{ - self endon( "kill_trigger" ); - self thread watch_player_visibility( self.stub.equipname ); - while ( 1 ) - { - self waittill( "trigger", player ); - while ( !player can_pick_up_equipment( self.stub.equipname, self ) ) - { - continue; - } - self thread pickup_placed_equipment( player ); - return; - } -} - -pickup_placed_equipment( player ) //checked changed to match cerberus output -{ -/* -/# - if ( isDefined( player.pickup_equipment )assert( !player.pickup_equipment ); -#/ -*/ - player.pickup_equipment = 1; - stub = self.stub; - if ( isDefined( player.current_equipment ) && stub.equipname != player.current_equipment ) - { - player equipment_drop( player.current_equipment ); - } - if ( is_limited_equipment( stub.equipname ) ) - { - if ( isDefined( level.dropped_equipment ) && isDefined( level.dropped_equipment[ stub.equipname ] ) && level.dropped_equipment[ stub.equipname ] == stub ) - { - level.dropped_equipment[stub.equipname] = undefined; - } - } - if ( isDefined( stub.model ) ) - { - stub.model equipment_retrieve( player ); - } - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( stub ); - wait 3; - player.pickup_equipment = 0; -} - -dropped_equipment_think( model, equipname, origin, angles, tradius, toffset ) //checked changed to match cerberus output -{ - pickupmodel = spawn( "script_model", origin ); - if ( isDefined( angles ) ) - { - pickupmodel.angles = angles; - } - pickupmodel setmodel( model ); - if ( isDefined( level.equipment_safe_to_drop ) ) - { - if ( !self [[ level.equipment_safe_to_drop ]]( pickupmodel ) ) - { - equipment_disappear_fx( pickupmodel.origin, undefined, pickupmodel.angles ); - pickupmodel delete(); - self equipment_take( equipname ); - return; - } - } - watchername = getsubstr( equipname, 0, equipname.size - 3 ); - if ( isDefined( level.retrievehints[ watchername ] ) ) - { - hint = level.retrievehints[ watchername ].hint; - } - else - { - hint = &"MP_GENERIC_PICKUP"; - } - icon = get_equipment_icon( equipname ); - if ( !isDefined( tradius ) ) - { - tradius = 32; - } - torigin = origin; - if ( isDefined( toffset ) ) - { - offset = 64; - tforward = anglesToForward( angles ); - torigin = torigin + toffset * tforward + vectorScale( ( 0, 0, 1 ), 8 ); - } - if ( isDefined( pickupmodel.canmove ) ) - { - pickupmodel.stub = generate_equipment_unitrigger( "trigger_radius_use", torigin, angles, 0, tradius, 64, hint, equipname, ::dropped_equipment_unitrigger_think, pickupmodel.canmove ); - } - pickupmodel.stub.model = pickupmodel; - pickupmodel.stub.equipname = equipname; - pickupmodel.equipname = equipname; - if ( isDefined( level.equipment_planted ) ) - { - self [[ level.equipment_planted ]]( pickupmodel, equipname, self ); - } - if ( !isDefined( level.dropped_equipment ) ) - { - level.dropped_equipment = []; - } - if ( isDefined( level.dropped_equipment[ equipname ] ) ) - { - level.dropped_equipment[ equipname ].model dropped_equipment_destroy( 1 ); - } - level.dropped_equipment[ equipname ] = pickupmodel.stub; - destructible_equipment_list_add( pickupmodel ); - pickupmodel thread item_attract_zombies(); - return pickupmodel; -} - -dropped_equipment_unitrigger_think() //checked matches cerberus output -{ - self endon( "kill_trigger" ); - self thread watch_player_visibility( self.stub.equipname ); - while ( 1 ) - { - self waittill( "trigger", player ); - while ( !player can_pick_up_equipment( self.stub.equipname, self ) ) - { - continue; - } - self thread pickup_dropped_equipment( player ); - return; - } -} - -pickup_dropped_equipment( player ) //checked matches cerberus output -{ - player.pickup_equipment = 1; - stub = self.stub; - if ( isDefined( player.current_equipment ) && stub.equipname != player.current_equipment ) - { - player equipment_drop( player.current_equipment ); - } - player equipment_grab( stub.equipname, stub.model ); - stub.model dropped_equipment_destroy(); - wait 3; - player.pickup_equipment = 0; -} - -dropped_equipment_destroy( gusto ) //checked changed to match cerberus output -{ - stub = self.stub; - if ( is_true( gusto ) ) - { - equipment_disappear_fx( self.origin, undefined, self.angles ); - } - if ( isDefined( level.dropped_equipment ) ) - { - } - if ( isDefined( stub.model ) ) - { - stub.model delete(); - } - if ( isDefined( self.original_owner ) && is_limited_equipment( stub.equipname ) || maps/mp/zombies/_zm_weapons::is_weapon_included( stub.equipname ) ) - { - self.original_owner equipment_take( stub.equipname ); - } - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( stub ); -} - -add_placeable_equipment( equipment, modelname, destroy_fn, type ) //checked matches cerberus output -{ - if ( !isDefined( level.placeable_equipment ) ) - { - level.placeable_equipment = []; - } - level.placeable_equipment[ equipment ] = modelname; - precachemodel( modelname ); - precacheitem( equipment + "_turret" ); - if ( !isDefined( level.placeable_equipment_destroy_fn ) ) - { - level.placeable_equipment_destroy_fn = []; - } - level.placeable_equipment_destroy_fn[ equipment ] = destroy_fn; - if ( !isDefined( level.placeable_equipment_type ) ) - { - level.placeable_equipment_type = []; - } - level.placeable_equipment_type[ equipment ] = type; -} - -is_placeable_equipment( equipment ) //checked matches cerberus output -{ - if ( isDefined( level.placeable_equipment ) && isDefined( level.placeable_equipment[ equipment ] ) ) - { - return 1; - } - return 0; -} - -equipment_placement_watcher() //checked matches cerberus output -{ - self endon( "death_or_disconnect" ); - for ( ;; ) - { - self waittill( "weapon_change", weapon ); - if ( self.sessionstate != "spectator" && is_placeable_equipment( weapon ) ) - { - self thread equipment_watch_placement( weapon ); - } - } -} - -equipment_watch_placement( equipment ) //checked changed to match cerberus output -{ - self.turret_placement = undefined; - carry_offset = vectorScale( ( 1, 0, 0 ), 22 ); - carry_angles = ( 0, 0, 0 ); - placeturret = spawnturret( "auto_turret", self.origin, equipment + "_turret" ); - placeturret.angles = self.angles; - placeturret setmodel( level.placeable_equipment[ equipment ] ); - placeturret setturretcarried( 1 ); - placeturret setturretowner( self ); - if ( isDefined( level.placeable_equipment_type[ equipment ] ) ) - { - placeturret setturrettype( level.placeable_equipment_type[ equipment ] ); - } - self carryturret( placeturret, carry_offset, carry_angles ); - if ( isDefined( level.use_swipe_protection ) ) - { - self thread watch_melee_swipes( equipment, placeturret ); - } - self notify( "create_equipment_turret", placeturret ); - ended = self waittill_any_return( "weapon_change", "grenade_fire", "death_or_disconnect" ); - if ( !is_true( level.use_legacy_equipment_placement ) ) - { - self.turret_placement = self canplayerplaceturret( placeturret ); - } - if ( ended == "weapon_change" ) - { - self.turret_placement = undefined; - if ( self hasweapon( equipment ) ) - { - self setweaponammoclip( equipment, 1 ); - } - } - self notify( "destroy_equipment_turret" ); - self stopcarryturret( placeturret ); - placeturret setturretcarried( 0 ); - placeturret delete(); -} - -watch_melee_swipes( equipment, turret ) //checked matches cerberus output -{ - self endon( "weapon_change" ); - self endon( "grenade_fire" ); - self endon( "death" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "melee_swipe", zombie ); - while ( distancesquared( zombie.origin, self.origin ) > ( zombie.meleeattackdist * zombie.meleeattackdist ) ) - { - continue; - } - tpos = turret.origin; - tangles = turret.angles; - self player_damage_equipment( equipment, 200, zombie.origin ); - if ( self.equipment_damage[ equipment ] >= 1500 ) - { - thread equipment_disappear_fx( tpos, undefined, tangles ); - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons[ 0 ] ) ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - if ( isalive( self ) ) - { - self playlocalsound( level.zmb_laugh_alias ); - } - self maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 ); - self equipment_release( equipment ); - return; - } - } -} - -player_get_equipment_damage( equipment ) //checked matches cerberus output -{ - if ( isDefined( self.equipment_damage ) && isDefined( self.equipment_damage[ equipment ] ) ) - { - return self.equipment_damage[ equipment ]; - } - return 0; -} - -player_set_equipment_damage( equipment, damage ) //checked matches cerberus output -{ - if ( !isDefined( self.equipment_damage ) ) - { - self.equipment_damage = []; - } - self.equipment_damage[ equipment ] = damage; -} - -player_damage_equipment( equipment, damage, origin ) //checked matches cerberus output -{ - if ( !isDefined( self.equipment_damage ) ) - { - self.equipment_damage = []; - } - if ( !isDefined( self.equipment_damage[ equipment ] ) ) - { - self.equipment_damage[ equipment ] = 0; - } - self.equipment_damage[ equipment ] += damage; - if ( self.equipment_damage[ equipment ] > 1500 ) - { - if ( isDefined( level.placeable_equipment_destroy_fn[ equipment ] ) ) - { - self [[ level.placeable_equipment_destroy_fn[ equipment ] ]](); - } - else - { - equipment_disappear_fx( origin ); - } - self equipment_release( equipment ); - } -} - -item_damage( damage ) //checked changed to match cerberus output -{ - if ( is_true( self.isriotshield ) ) - { - if ( isDefined( level.riotshield_damage_callback ) && isDefined( self.owner ) ) - { - self.owner [[ level.riotshield_damage_callback ]]( damage, 0 ); - } - else if ( isDefined( level.deployed_riotshield_damage_callback ) ) - { - self [[ level.deployed_riotshield_damage_callback ]]( damage ); - } - } - else if ( isDefined( self.owner ) ) - { - self.owner player_damage_equipment( self.equipname, damage, self.origin ); - return; - } - else if ( !isDefined( self.damage ) ) - { - self.damage = 0; - } - self.damage += damage; - if ( self.damage > 1500 ) - { - self thread dropped_equipment_destroy( 1 ); - } -} - -item_watch_damage() //checked matches cerberus output -{ - self endon( "death" ); - self setcandamage( 1 ); - self.health = 1500; - while ( 1 ) - { - self waittill( "damage", amount ); - self item_damage( amount ); - } -} - -item_watch_explosions() //checked matches cerberus output may need to check order of operations -{ - self endon( "death" ); - while ( 1 ) - { - level waittill( "grenade_exploded", position, radius, idamage, odamage ); - wait randomfloatrange( 0.05, 0.3 ); - distsqrd = distancesquared( self.origin, position ); - if ( distsqrd < radius * radius ) - { - dist = sqrt( distsqrd ); - dist /= radius; - damage = odamage + ( ( idamage - odamage ) * ( 1 - dist ) ); - self item_damage( damage * 5 ); - } - } -} - -get_item_health() //dev call did not check -{ -/* -/# - damage = 0; - if ( isDefined( self.isriotshield ) && self.isriotshield ) - { - damagemax = level.zombie_vars[ "riotshield_hit_points" ]; - if ( isDefined( self.owner ) ) - { - damage = self.owner.shielddamagetaken; - } - else - { - if ( isDefined( level.deployed_riotshield_damage_callback ) ) - { - damage = self.shielddamagetaken; - } - } - } - else - { - if ( isDefined( self.owner ) ) - { - damagemax = 1500; - damage = self.owner player_get_equipment_damage( self.equipname ); - } - else - { - damagemax = 1500; - if ( isDefined( self.damage ) ) - { - damage = self.damage; - } - } - } - return ( damagemax - damage ) / damagemax; -#/ -*/ -} - -debughealth() //dev call did not check -{ -/* -/# - self endon( "death" ); - self endon( "stop_attracting_zombies" ); - while ( 1 ) - { - if ( getDvarInt( #"EB512CB7" ) ) - { - health = self get_item_health(); - color = ( 1 - health, health, 0 ); - text = "" + ( health * 100 ) + ""; - print3d( self.origin, text, color, 1, 0,5, 1 ); - } - wait 0.05; -#/ - } -*/ -} - -item_choke() //checked matches cerberus output -{ - if ( !isDefined( level.item_choke_count ) ) - { - level.item_choke_count = 0; - } - level.item_choke_count++; - if ( level.item_choke_count >= 10 ) - { - wait 0.05; - level.item_choke_count = 0; - } -} - -is_equipment_ignored( equipname ) //checked matches cerberus output -{ - if ( isDefined( level.equipment_ignored_by_zombies ) && isDefined( equipname ) && isDefined( level.equipment_ignored_by_zombies[ equipname ] ) ) - { - return 1; - } - return 0; -} - -enemies_ignore_equipment( equipname ) //checked matches cerberus output -{ - if ( !isDefined( level.equipment_ignored_by_zombies ) ) - { - level.equipment_ignored_by_zombies = []; - } - level.equipment_ignored_by_zombies[ equipname ] = equipname; -} - -item_attract_zombies() //checked partially changed to match cerberus output did not change for loop to while loop more info on the github about continues -{ - self endon( "death" ); - self notify( "stop_attracting_zombies" ); - self endon( "stop_attracting_zombies" ); -/* -/# - self thread debughealth(); -#/ -*/ - if ( is_equipment_ignored( self.equipname ) ) - { - return; - } - while ( 1 ) - { - if ( isDefined( level.vert_equipment_attack_range ) ) - { - vdistmax = level.vert_equipment_attack_range; - } - else - { - vdistmax = 36; - } - if ( isDefined( level.max_equipment_attack_range ) ) - { - distmax = level.max_equipment_attack_range * level.max_equipment_attack_range; - } - else - { - distmax = 4096; - } - if ( isDefined( level.min_equipment_attack_range ) ) - { - distmin = level.min_equipment_attack_range * level.min_equipment_attack_range; - } - else - { - distmin = 2025; - } - ai = getaiarray( level.zombie_team ); - i = 0; - while ( i < ai.size ) - { - if ( !isDefined( ai[ i ] ) ) - { - i++; - continue; - } - if ( is_true( ai[ i ].ignore_equipment ) ) - { - i++; - continue; - } - if ( isDefined( level.ignore_equipment ) ) - { - if ( self [[ level.ignore_equipment ]]( ai[ i ] ) ) - { - i++; - continue; - } - } - if ( is_true( ai[ i ].is_inert ) ) - { - i++; - continue; - } - if ( is_true( ai[ i ].is_traversing ) ) - { - i++; - continue; - } - vdist = abs( ai[ i ].origin[ 2 ] - self.origin[ 2 ] ); - distsqrd = distance2dsquared( ai[ i ].origin, self.origin ); - if ( ( self.equipname == "riotshield_zm" || self.equipname == "alcatraz_shield_zm" ) && isDefined( self.equipname ) ) - { - vdistmax = 108; - } - should_attack = 0; - if ( isDefined( level.should_attack_equipment ) ) - { - should_attack = self [[ level.should_attack_equipment ]]( distsqrd ); - } - if ( distsqrd < distmax && distsqrd > distmin && vdist < vdistmax || should_attack ) - { - if ( !is_true( ai[ i ].isscreecher ) && !ai[ i ] is_quad() && !ai[ i ] is_leaper() ) - { - ai[ i ] thread attack_item( self ); - item_choke(); - } - } - item_choke(); - i++; - } - wait 0.1; - } -} - -attack_item( item ) //checked changed to match cerberus output -{ - self endon( "death" ); - item endon( "death" ); - self endon( "start_inert" ); - if ( is_true( self.doing_equipment_attack ) ) - { - return 0; - } - if ( is_true( self.not_interruptable ) ) - { - return 0; - } - self thread attack_item_stop( item ); - self thread attack_item_interrupt( item ); - if ( getDvar( "zombie_equipment_attack_freq" ) == "" ) - { - setdvar( "zombie_equipment_attack_freq", "15" ); - } - freq = getDvarInt( "zombie_equipment_attack_freq" ); - self.doing_equipment_attack = 1; - self maps/mp/zombies/_zm_spawner::zombie_history( "doing equipment attack 1 - " + getTime() ); - self.item = item; - if ( !isDefined( self ) || !isalive( self ) ) - { - return; - } - if ( isDefined( item.zombie_attack_callback ) ) - { - item [[ item.zombie_attack_callback ]]( self ); - } - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "attack", self.animname ); - if ( isDefined( level.attack_item ) ) - { - self [[ level.attack_item ]](); - } - melee_anim = "zm_window_melee"; - if ( !self.has_legs ) - { - melee_anim = "zm_walk_melee_crawl"; - if ( self.a.gib_ref == "no_legs" ) - { - melee_anim = "zm_stumpy_melee"; - } - else if ( self.zombie_move_speed == "run" || self.zombie_move_speed == "sprint" ) - { - melee_anim = "zm_run_melee_crawl"; - } - } - self orientmode( "face point", item.origin ); - self animscripted( self.origin, flat_angle( vectorToAngles( item.origin - self.origin ) ), melee_anim ); - self notify( "item_attack" ); - if ( isDefined( self.custom_item_dmg ) ) - { - item thread item_damage( self.custom_item_dmg ); - } - else - { - item thread item_damage( 100 ); - } - item playsound( "fly_riotshield_zm_impact_flesh" ); - wait ( randomint( 100 ) / 100 ); - self.doing_equipment_attack = 0; - self maps/mp/zombies/_zm_spawner::zombie_history( "doing equipment attack 0 from wait - " + getTime() ); - self orientmode( "face default" ); -} - -attack_item_interrupt( item ) //checked matches cerberus output -{ - if ( !is_true( self.has_legs ) ) - { - return; - } - self notify( "attack_item_interrupt" ); - self endon( "attack_item_interrupt" ); - self endon( "death" ); - while ( is_true( self.has_legs ) ) - { - self waittill( "damage" ); - } - self stopanimscripted(); - self.doing_equipment_attack = 0; - self maps/mp/zombies/_zm_spawner::zombie_history( "doing equipment attack 0 from death - " + getTime() ); - self.item = undefined; -} - -attack_item_stop( item ) //checked matches cerberus output -{ - self notify( "attack_item_stop" ); - self endon( "attack_item_stop" ); - self endon( "death" ); - item waittill( "death" ); - self stopanimscripted(); - self.doing_equipment_attack = 0; - self maps/mp/zombies/_zm_spawner::zombie_history( "doing equipment attack 0 from death - " + getTime() ); - self.item = undefined; - if ( isDefined( level.attack_item_stop ) ) - { - self [[ level.attack_item_stop ]](); - } -} - -window_notetracks( msg, equipment ) //checked matches cerberus output -{ - self endon( "death" ); - equipment endon( "death" ); - while ( self.doing_equipment_attack ) - { - self waittill( msg, notetrack ); - if ( notetrack == "end" ) - { - return; - } - if ( notetrack == "fire" ) - { - equipment item_damage( 100 ); - } - } -} - -destructible_equipment_list_check() //checked changed at own discretion -{ - if ( !isDefined( level.destructible_equipment ) ) - { - level.destructible_equipment = []; - } - for ( i = 0; i < level.destructible_equipment.size; i++ ) - { - if ( !isDefined( level.destructible_equipment[ i ] ) ) - { - arrayremoveindex( level.destructible_equipment, i ); - } - } -} - -destructible_equipment_list_add( item ) //checked matches cerberus output -{ - destructible_equipment_list_check(); - level.destructible_equipment[ level.destructible_equipment.size ] = item; -} - -get_destructible_equipment_list() //checked matches cerberus output -{ - destructible_equipment_list_check(); - return level.destructible_equipment; -} - -equipment_disappear_fx( origin, fx, angles ) //checked matches cerberus output -{ - effect = level._equipment_disappear_fx; - if ( isDefined( fx ) ) - { - effect = fx; - } - if ( isDefined( angles ) ) - { - playfx( effect, origin, anglesToForward( angles ) ); - } - else - { - playfx( effect, origin ); - } - wait 1.1; -} - - - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_ffotd.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_ffotd.gsc deleted file mode 100644 index a44bfe9..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_ffotd.gsc +++ /dev/null @@ -1,221 +0,0 @@ -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -main_start() //checked matches cerberus output -{ - mapname = tolower( getDvar( "mapname" ) ); - gametype = getDvar( "ui_gametype" ); - if ( tolower( getDvar( "mapname" ) ) == "zm_transit" && getDvar( "ui_gametype" ) == "zclassic" ) - { - level thread transit_navcomputer_remove_card_on_success(); - } - if ( tolower( getDvar( "mapname" ) ) == "zm_prison" && getDvar( "ui_gametype" ) == "zgrief" ) - { - level.zbarrier_script_string_sets_collision = 1; - } - if ( mapname != "zm_transit" && mapname == "zm_highrise" && gametype == "zclassic" ) - { - level.pers_upgrade_sniper = 1; - level.pers_upgrade_pistol_points = 1; - level.pers_upgrade_perk_lose = 1; - level.pers_upgrade_double_points = 1; - level.pers_upgrade_nube = 1; - } -} - -main_end() //checked matches cerberus output -{ - onfinalizeinitialization_callback( ::force_navcomputer_trigger_think ); - level.original_melee_miss_func = level.melee_miss_func; - level.melee_miss_func = ::ffotd_melee_miss_func; -} - -force_navcomputer_trigger_think() //checked changed to match cerberus output -{ - if ( !isDefined( level.zombie_include_buildables ) || !level.zombie_include_buildables.size ) - { - return; - } - foreach ( buildable in level.zombie_include_buildables ) - { - if ( buildable.name == "sq_common" ) - { - if ( isDefined( buildable.triggerthink ) ) - { - level [[ buildable.triggerthink ]](); - trigger_think_func = buildable.triggerthink; - buildable.triggerthink = undefined; - level waittill( "buildables_setup" ); - buildable.triggerthink = trigger_think_func; - return; - } - } - } -} - -transit_navcomputer_remove_card_on_success() //checked changed to match cerberus output -{ - wait_for_buildable( "sq_common" ); - wait_network_frame(); - trig_pos = getstruct( "sq_common_key", "targetname" ); - trigs = getentarray( "trigger_radius_use", "classname" ); - nav_trig = undefined; - foreach ( trig in trigs ) - { - if ( trig.origin == trig_pos.origin ) - { - nav_trig = trig; - } - _k81 = getNextArrayKey( _a81, _k81 ); - } - if ( isDefined( nav_trig ) ) - { - while ( 1 ) - { - nav_trig waittill( "trigger", who ); - if ( isplayer( who ) && is_player_valid( who ) && does_player_have_correct_navcard( who ) ) - { - break; - } - } - players = get_players(); - foreach ( player in players ) - { - player maps/mp/zombies/_zm_stats::set_global_stat( level.navcard_needed, 0 ); - } - level thread sq_refresh_player_navcard_hud(); - } -} - -sq_refresh_player_navcard_hud() //checked changed to match cerberus output -{ - if ( !isDefined( level.navcards ) ) - { - return; - } - players = get_players(); - foreach ( player in players ) - { - navcard_bits = 0; - for ( i = 0; i < level.navcards.size; i++ ) - { - hasit = player maps/mp/zombies/_zm_stats::get_global_stat( level.navcards[ i ] ); - if ( isDefined( player.navcard_grabbed ) && player.navcard_grabbed == level.navcards[ i ] ) - { - hasit = 1; - } - if ( hasit ) - { - navcard_bits = navcard_bits + 1; - } - } - wait_network_frame(); - player setclientfield( "navcard_held", 0 ); - if ( navcard_bits > 0 ) - { - wait_network_frame(); - player setclientfield( "navcard_held", navcard_bits ); - } - } -} - -player_in_exploit_area( player_trigger_origin, player_trigger_radius ) -{ - if ( distancesquared( player_trigger_origin, self.origin ) < player_trigger_radius * player_trigger_radius ) - { - /* -/# - iprintlnbold( "player exploit detected" ); -#/ - */ - return 1; - } - return 0; -} - -path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ) //checked matches cerberus output -{ - spawnflags = 9; - zombie_trigger = spawn( "trigger_radius", zombie_trigger_origin, spawnflags, zombie_trigger_radius, zombie_trigger_height ); - zombie_trigger setteamfortrigger( level.zombie_team ); - /* -/# - thread debug_exploit( zombie_trigger_origin, zombie_trigger_radius, player_trigger_origin, player_trigger_radius, zombie_goto_point ); -#/ - */ - while ( 1 ) - { - zombie_trigger waittill( "trigger", who ); - if ( !is_true( who.reroute ) ) - { - who thread exploit_reroute( zombie_trigger, player_trigger_origin, player_trigger_radius, zombie_goto_point ); - } - } -} - -exploit_reroute( zombie_trigger, player_trigger_origin, player_trigger_radius, zombie_goto_point ) //checked matches cerberus output -{ - self endon( "death" ); - self.reroute = 1; - while ( 1 ) - { - if ( self istouching( zombie_trigger ) ) - { - player = self.favoriteenemy; - if ( isDefined( player ) && player player_in_exploit_area( player_trigger_origin, player_trigger_radius ) ) - { - self.reroute_origin = zombie_goto_point; - } - else - { - break; - } - } - else - { - break; - } - wait 0.2; - } - self.reroute = 0; -} - -debug_exploit( player_origin, player_radius, enemy_origin, enemy_radius, zombie_goto_point ) //dev call commented out -{ -/* -/# - while ( isDefined( self ) ) - { - circle( player_origin, player_radius, ( 1, 1, 0 ), 0, 1, 1 ); - circle( enemy_origin, enemy_radius, ( 1, 1, 0 ), 0, 1, 1 ); - line( player_origin, enemy_origin, ( 1, 1, 0 ), 1 ); - line( enemy_origin, zombie_goto_point, ( 1, 1, 0 ), 1 ); - wait 0.05; -#/ - } -*/ -} - -ffotd_melee_miss_func() //checked matches cerberus output -{ - if ( isDefined( self.enemy ) ) - { - if ( isplayer( self.enemy ) && self.enemy getcurrentweapon() == "claymore_zm" ) - { - dist_sq = distancesquared( self.enemy.origin, self.origin ); - melee_dist_sq = self.meleeattackdist * self.meleeattackdist; - if ( dist_sq < melee_dist_sq ) - { - self.enemy dodamage( self.meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); - return; - } - } - } - if ( isDefined( level.original_melee_miss_func ) ) - { - self [[ level.original_melee_miss_func ]](); - } -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_game_module.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_game_module.gsc deleted file mode 100644 index 069cf97..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_game_module.gsc +++ /dev/null @@ -1,446 +0,0 @@ -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_audio_announcer; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -register_game_module( index, module_name, pre_init_func, post_init_func, pre_init_zombie_spawn_func, post_init_zombie_spawn_func, hub_start_func ) //checked partially changed to match cerberus output //did not change while loop to for loop to prevent the infinite loop bu caused by continues -{ - if ( !isDefined( level._game_modules ) ) - { - level._game_modules = []; - level._num_registered_game_modules = 0; - } - i = 0; - while ( i < level._num_registered_game_modules ) - { - if ( !isDefined( level._game_modules[ i ] ) ) - { - i++; - continue; - } - if ( isDefined( level._game_modules[ i ].index ) && level._game_modules[ i ].index == index ) - { - /* -/# - assert( level._game_modules[ i ].index != index, "A Game module is already registered for index (" + index + ")" ); -#/ - */ - } - i++; - } - level._game_modules[ level._num_registered_game_modules ] = spawnstruct(); - level._game_modules[ level._num_registered_game_modules ].index = index; - level._game_modules[ level._num_registered_game_modules ].module_name = module_name; - level._game_modules[ level._num_registered_game_modules ].pre_init_func = pre_init_func; - level._game_modules[ level._num_registered_game_modules ].post_init_func = post_init_func; - level._game_modules[ level._num_registered_game_modules ].pre_init_zombie_spawn_func = pre_init_zombie_spawn_func; - level._game_modules[ level._num_registered_game_modules ].post_init_zombie_spawn_func = post_init_zombie_spawn_func; - level._game_modules[ level._num_registered_game_modules ].hub_start_func = hub_start_func; - level._num_registered_game_modules++; -} - -set_current_game_module( game_module_index ) //checked matches cerberus output -{ - if ( !isDefined( game_module_index ) ) - { - level.current_game_module = level.game_module_classic_index; - level.scr_zm_game_module = level.game_module_classic_index; - return; - } - game_module = get_game_module( game_module_index ); - if ( !isDefined( game_module ) ) - { - /* -/# - assert( isDefined( game_module ), "unknown game module (" + game_module_index + ")" ); -#/ - */ - return; - } - level.current_game_module = game_module_index; -} - -get_current_game_module() //checked matches cerberus output -{ - return get_game_module( level.current_game_module ); -} - -get_game_module( game_module_index ) //checked changed to match cerberus output -{ - if ( !isDefined( game_module_index ) ) - { - return undefined; - } - for ( i = 0; i < level._game_modules.size; i++ ) - { - if ( level._game_modules[ i ].index == game_module_index ) - { - return level._game_modules[ i ]; - } - } - return undefined; -} - -game_module_pre_zombie_spawn_init() //checked matches cerberus output -{ - current_module = get_current_game_module(); - if ( !isDefined( current_module ) || !isDefined( current_module.pre_init_zombie_spawn_func ) ) - { - return; - } - self [[ current_module.pre_init_zombie_spawn_func ]](); -} - -game_module_post_zombie_spawn_init() //checked matches cerberus output -{ - current_module = get_current_game_module(); - if ( !isDefined( current_module ) || !isDefined( current_module.post_init_zombie_spawn_func ) ) - { - return; - } - self [[ current_module.post_init_zombie_spawn_func ]](); -} - -kill_all_zombies() //checked changed to match cerberus output -{ - ai = get_round_enemy_array(); - foreach ( zombie in ai ) - { - if ( isDefined( zombie ) ) - { - zombie dodamage( zombie.maxhealth * 2, zombie.origin, zombie, zombie, "none", "MOD_SUICIDE" ); - wait 0.05; - } - } -} - -freeze_players( freeze ) //checked changed to match cerberus output -{ - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - players[ i ] freeze_player_controls( freeze ); - } -} - -turn_power_on_and_open_doors() //checked changed at own discretion -{ - level.local_doors_stay_open = 1; - level.power_local_doors_globally = 1; - flag_set( "power_on" ); - level setclientfield( "zombie_power_on", 1 ); - zombie_doors = getentarray( "zombie_door", "targetname" ); - foreach ( door in zombie_doors ) - { - if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "electric_door" ) - { - door notify( "power_on" ); - } - else if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "local_electric_door" ) - { - door notify( "local_power_on" ); - } - } -} - -respawn_spectators_and_freeze_players() //checked changed to match cerberus output -{ - players = get_players(); - foreach ( player in players ) - { - if ( player.sessionstate == "spectator" ) - { - if ( isDefined( player.spectate_hud ) ) - { - player.spectate_hud destroy(); - } - player [[ level.spawnplayer ]](); - } - player freeze_player_controls( 1 ); - } -} - -damage_callback_no_pvp_damage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) //checked matches cerberus output -{ - if ( isDefined( eattacker ) && isplayer( eattacker ) && eattacker == self ) - { - return idamage; - } - if ( isDefined( eattacker ) && !isplayer( eattacker ) ) - { - return idamage; - } - if ( !isDefined( eattacker ) ) - { - return idamage; - } - return 0; -} - -respawn_players() //checked changed to match cerberus output -{ - players = get_players(); - foreach ( player in players ) - { - player [[ level.spawnplayer ]](); - player freeze_player_controls( 1 ); - } -} - -zombie_goto_round( target_round ) //checked changed to match cerberus output -{ - level notify( "restart_round" ); - if ( target_round < 1 ) - { - target_round = 1; - } - level.zombie_total = 0; - maps/mp/zombies/_zm::ai_calculate_health( target_round ); - zombies = get_round_enemy_array(); - if ( isDefined( zombies ) ) - { - for ( i = 0; i < zombies.size; i++ ) - { - zombies[ i ] dodamage( zombies[ i ].health + 666, zombies[ i ].origin ); - } - } - respawn_players(); - wait 1; -} - -wait_for_team_death_and_round_end() //checked partially changed to match cerberus output //did not use foreach with continue to prevent continue bug -{ - level endon( "game_module_ended" ); - level endon( "end_game" ); - checking_for_round_end = 0; - level.isresetting_grief = 0; - while ( 1 ) - { - cdc_alive = 0; - cia_alive = 0; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ]._encounters_team ) ) - { - i++; - continue; - } - if ( players[ i ]._encounters_team == "A" ) - { - if ( is_player_valid( players[ i ] ) ) - { - cia_alive++; - } - i++; - continue; - } - if ( is_player_valid( players[ i ] ) ) - { - cdc_alive++; - } - i++; - } - if ( cia_alive == 0 && cdc_alive == 0 && !level.isresetting_grief && !is_true( level.host_ended_game ) ) - { - wait 0.5; - if ( isDefined( level._grief_reset_message ) ) - { - level thread [[ level._grief_reset_message ]](); - } - level.isresetting_grief = 1; - level notify( "end_round_think" ); - level.zombie_vars[ "spectators_respawn" ] = 1; - level notify( "keep_griefing" ); - checking_for_round_end = 0; - zombie_goto_round( level.round_number ); - level thread reset_grief(); - level thread maps/mp/zombies/_zm::round_think( 1 ); - } - else if ( !checking_for_round_end ) - { - if ( cia_alive == 0 ) - { - level thread check_for_round_end( "B" ); - checking_for_round_end = 1; - } - else if ( cdc_alive == 0 ) - { - level thread check_for_round_end( "A" ); - checking_for_round_end = 1; - } - } - if ( cia_alive > 0 && cdc_alive > 0 ) - { - level notify( "stop_round_end_check" ); - checking_for_round_end = 0; - } - wait 0.05; - } -} - -reset_grief() //checked matches cerberus output -{ - wait 1; - level.isresetting_grief = 0; -} - -check_for_round_end( winner ) //checked partially changed to match cerberus output //did not change while loop to for loop to prevent the infinite loop continue bug -{ - level endon( "keep_griefing" ); - level endon( "stop_round_end_check" ); - level waittill( "end_of_round" ); - level.gamemodulewinningteam = winner; - level.zombie_vars[ "spectators_respawn" ] = 0; - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] freezecontrols( 1 ); - if ( players[ i ]._encounters_team == winner ) - { - players[ i ] thread maps/mp/zombies/_zm_audio_announcer::leaderdialogonplayer( "grief_won" ); - i++; - continue; - } - players[ i ] thread maps/mp/zombies/_zm_audio_announcer::leaderdialogonplayer( "grief_lost" ); - i++; - } - level notify( "game_module_ended", winner ); - level._game_module_game_end_check = undefined; - maps/mp/gametypes_zm/_zm_gametype::track_encounters_win_stats( level.gamemodulewinningteam ); - level notify( "end_game" ); -} - -wait_for_team_death() //checked partially changed to match cerberus output //did not change while loop to foreach with continue to prevent infinite loop bug -{ - wait 15; - winner = undefined; - while ( !isDefined( winner ) ) - { - cdc_alive = 0; - cia_alive = 0; - players = get_players(); - while ( i < players.size ) - { - if ( players[ i ]._encounters_team == "A" ) - { - if ( is_player_valid( players[ i ] ) || is_true( level.force_solo_quick_revive ) && isDefined( players[ i ].lives ) && players[ i ].lives > 0 ) - { - cia_alive++; - i++; - continue; - } - } - if ( is_player_valid( players[ i ] ) || is_true( level.force_solo_quick_revive ) && isDefined( players[ i ].lives ) && players[ i ].lives > 0 ) - { - cdc_alive++; - } - i++; - } - if ( cia_alive == 0 ) - { - winner = "B"; - } - else if ( cdc_alive == 0 ) - { - winner = "A"; - } - wait 0.05; - } - level notify( "game_module_ended", winner ); -} - -make_supersprinter() //checked matches cerberus output -{ - self set_zombie_run_cycle( "super_sprint" ); -} - -game_module_custom_intermission( intermission_struct ) //checked matches cerberus output -{ - self closemenu(); - self closeingamemenu(); - level endon( "stop_intermission" ); - self endon( "disconnect" ); - self endon( "death" ); - self notify( "_zombie_game_over" ); - self.score = self.score_total; - self.sessionstate = "intermission"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - s_point = getstruct( intermission_struct, "targetname" ); - if ( !isDefined( level.intermission_cam_model ) ) - { - level.intermission_cam_model = spawn( "script_model", s_point.origin ); - level.intermission_cam_model.angles = s_point.angles; - level.intermission_cam_model setmodel( "tag_origin" ); - } - self.game_over_bg = newclienthudelem( self ); - self.game_over_bg.horzalign = "fullscreen"; - self.game_over_bg.vertalign = "fullscreen"; - self.game_over_bg setshader( "black", 640, 480 ); - self.game_over_bg.alpha = 1; - self spawn( level.intermission_cam_model.origin, level.intermission_cam_model.angles ); - self camerasetposition( level.intermission_cam_model ); - self camerasetlookat(); - self cameraactivate( 1 ); - self linkto( level.intermission_cam_model ); - level.intermission_cam_model moveto( getstruct( s_point.target, "targetname" ).origin, 12 ); - if ( isDefined( level.intermission_cam_model.angles ) ) - { - level.intermission_cam_model rotateto( getstruct( s_point.target, "targetname" ).angles, 12 ); - } - self.game_over_bg fadeovertime( 2 ); - self.game_over_bg.alpha = 0; - wait 2; - self.game_over_bg thread maps/mp/zombies/_zm::fade_up_over_time( 1 ); -} - -create_fireworks( launch_spots, min_wait, max_wait, randomize ) //checked changed to match cerberus output -{ - level endon( "stop_fireworks" ); - while ( 1 ) - { - if ( is_true( randomize ) ) - { - launch_spots = array_randomize( launch_spots ); - } - foreach ( spot in launch_spots ) - { - level thread fireworks_launch( spot ); - wait randomfloatrange( min_wait, max_wait ); - } - wait randomfloatrange( min_wait, max_wait ); - } -} - -fireworks_launch( launch_spot ) //checked matches cerberus output -{ - firework = spawn( "script_model", launch_spot.origin + ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ) ); - firework setmodel( "tag_origin" ); - wait_network_frame(); - playfxontag( level._effect[ "fw_trail_cheap" ], firework, "tag_origin" ); - firework playloopsound( "zmb_souls_loop", 0.75 ); - dest = launch_spot; - while ( isDefined( dest ) && isDefined( dest.target ) ) - { - random_offset = ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ); - new_dests = getstructarray( dest.target, "targetname" ); - new_dest = random( new_dests ); - dest = new_dest; - dist = distance( new_dest.origin + random_offset, firework.origin ); - time = dist / 700; - firework moveto( new_dest.origin + random_offset, time ); - firework waittill( "movedone" ); - } - firework playsound( "zmb_souls_end" ); - playfx( level._effect[ "fw_pre_burst" ], firework.origin ); - firework delete(); -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_gump.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_gump.gsc deleted file mode 100644 index fd96161..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_gump.gsc +++ /dev/null @@ -1,89 +0,0 @@ -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked changed to match cerberus output //changed partially at own discretion -{ -/* - if ( isDefined( level.disable_blackscreen_clientfield ) && level.disable_blackscreen_clientfield ) - { - registerclientfield( "toplayer", "blackscreen", 1, 1, "int" ); - } -*/ //the value of level.disable_blackscreen_clientfield is not defined in any map file except buried meaning - if ( !is_true( level.disable_blackscreen_clientfield ) ) - { - registerclientfield( "toplayer", "blackscreen", 1, 1, "int" ); - } - if ( !isDefined( level.uses_gumps ) ) - { - level.uses_gumps = 0; - } - if ( is_true( level.uses_gumps ) ) - { - onplayerconnect_callback( ::player_connect_gump ); - } -} - -player_teleport_blackscreen_on() //checked matches cerberus output -{ - if ( is_true( level.disable_blackscreen_clientfield ) ) - { - return; - } - if ( is_true( level.uses_gumps ) ) - { - self setclientfieldtoplayer( "blackscreen", 1 ); - wait 0.05; - self setclientfieldtoplayer( "blackscreen", 0 ); - } -} - -player_connect_gump() //checked matches cerberus output -{ -} - -player_watch_spectate_change() //checked matches cerberus output -{ - if ( is_true( level.disable_blackscreen_clientfield ) ) - { - return; - } - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "spectator_cycle" ); - self setclientfieldtoplayer( "blackscreen", 1 ); - wait 0.05; - self setclientfieldtoplayer( "blackscreen", 0 ); - } -} - -gump_test() -{ -/* -/# - wait 10; - pos1 = ( -4904, -7657, 4 ); - pos3 = ( 7918, -6506, 177 ); - pos2 = ( 1986, -73, 4 ); - players = get_players(); - if ( isDefined( players[ 0 ] ) ) - { - players[ 0 ] setorigin( pos1 ); - } - wait 0.05; - if ( isDefined( players[ 1 ] ) ) - { - players[ 1 ] setorigin( pos2 ); - } - wait 0.05; - if ( isDefined( players[ 2 ] ) ) - { - players[ 2 ] setorigin( pos3 ); -#/ - } -*/ -} - - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_hackables_boards.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_hackables_boards.gsc deleted file mode 100644 index 88fd512..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_hackables_boards.gsc +++ /dev/null @@ -1,131 +0,0 @@ -#include maps/mp/zombies/_zm_blockers; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_equip_hacker; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -hack_boards() -{ - windows = getstructarray( "exterior_goal", "targetname" ); - i = 0; - while ( i < windows.size ) - { - window = windows[ i ]; - struct = spawnstruct(); - spot = window; - if ( isDefined( window.trigger_location ) ) - { - spot = window.trigger_location; - } - org = groundpos( spot.origin ) + vectorScale( ( 0, 0, 1 ), 4 ); - r = 96; - h = 96; - if ( isDefined( spot.radius ) ) - { - r = spot.radius; - } - if ( isDefined( spot.height ) ) - { - h = spot.height; - } - struct.origin = org + vectorScale( ( 0, 0, 1 ), 48 ); - struct.radius = r; - struct.height = h; - struct.script_float = 2; - struct.script_int = 0; - struct.window = window; - struct.no_bullet_trace = 1; - struct.no_sight_check = 1; - struct.dot_limit = 0.7; - struct.no_touch_check = 1; - struct.last_hacked_round = 0; - struct.num_hacks = 0; - maps/mp/zombies/_zm_equip_hacker::register_pooled_hackable_struct( struct, ::board_hack, ::board_qualifier ); - i++; - } -} - -board_hack( hacker ) -{ - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( self ); - num_chunks_checked = 0; - last_repaired_chunk = undefined; - if ( self.last_hacked_round != level.round_number ) - { - self.last_hacked_round = level.round_number; - self.num_hacks = 0; - } - self.num_hacks++; - if ( self.num_hacks < 3 ) - { - hacker maps/mp/zombies/_zm_score::add_to_player_score( 100 ); - } - else - { - cost = int( min( 300, hacker.score ) ); - if ( cost ) - { - hacker maps/mp/zombies/_zm_score::minus_to_player_score( cost ); - } - } - while ( 1 ) - { - if ( all_chunks_intact( self.window, self.window.barrier_chunks ) ) - { - break; - } - else chunk = get_random_destroyed_chunk( self.window, self.window.barrier_chunks ); - if ( !isDefined( chunk ) ) - { - break; - } - else self.window thread maps/mp/zombies/_zm_blockers::replace_chunk( self.window, chunk, undefined, 0, 1 ); - last_repaired_chunk = chunk; - if ( isDefined( self.clip ) ) - { - self.window.clip enable_trigger(); - self.window.clip disconnectpaths(); - } - else - { - blocker_disconnect_paths( self.window.neg_start, self.window.neg_end ); - } - wait_network_frame(); - num_chunks_checked++; - if ( num_chunks_checked >= 20 ) - { - break; - } - else - { - } - } - if ( isDefined( self.window.zbarrier ) ) - { - while ( isDefined( last_repaired_chunk ) ) - { - while ( self.window.zbarrier getzbarrierpiecestate( last_repaired_chunk ) == "closing" ) - { - wait 0.05; - } - } - } - else while ( isDefined( last_repaired_chunk ) && last_repaired_chunk.state == "mid_repair" ) - { - wait 0.05; - } - maps/mp/zombies/_zm_equip_hacker::register_pooled_hackable_struct( self, ::board_hack, ::board_qualifier ); - self.window notify( "blocker_hacked" ); - self.window notify( "no valid boards" ); -} - -board_qualifier( player ) -{ - if ( all_chunks_intact( self.window, self.window.barrier_chunks ) || no_valid_repairable_boards( self.window, self.window.barrier_chunks ) ) - { - return 0; - } - return 1; -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_hackables_box.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_hackables_box.gsc deleted file mode 100644 index 235fe8b..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_hackables_box.gsc +++ /dev/null @@ -1,371 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_equip_hacker; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -box_hacks() -{ - boxes = getstructarray( "treasure_chest_use", "targetname" ); - i = 0; - while ( i < boxes.size ) - { - box = boxes[ i ]; - box.box_hacks[ "respin" ] = ::init_box_respin; - box.box_hacks[ "respin_respin" ] = ::init_box_respin_respin; - box.box_hacks[ "summon_box" ] = ::init_summon_box; - box.last_hacked_round = 0; - i++; - } - level._zombiemode_chest_joker_chance_override_func = ::check_for_free_locations; - level._zombiemode_custom_box_move_logic = ::custom_box_move_logic; - level._zombiemode_check_firesale_loc_valid_func = ::custom_check_firesale_loc_valid_func; - init_summon_hacks(); -} - -custom_check_firesale_loc_valid_func() -{ - if ( isDefined( self.unitrigger_stub ) ) - { - box = self.unitrigger_stub.trigger_target; - } - else - { - if ( isDefined( self.stub ) ) - { - box = self.stub.trigger_target; - } - } - if ( box.last_hacked_round >= level.round_number ) - { - return 0; - } - return 1; -} - -custom_box_move_logic() -{ - num_hacked_locs = 0; - i = 0; - while ( i < level.chests.size ) - { - if ( level.chests[ i ].last_hacked_round >= level.round_number ) - { - num_hacked_locs++; - } - i++; - } - if ( num_hacked_locs == 0 ) - { - maps/mp/zombies/_zm_magicbox::default_box_move_logic(); - return; - } - found_loc = 0; - original_spot = level.chest_index; - while ( !found_loc ) - { - level.chest_index++; - if ( original_spot == level.chest_index ) - { - level.chest_index++; - } - level.chest_index %= level.chests.size; - if ( level.chests[ level.chest_index ].last_hacked_round < level.round_number ) - { - found_loc = 1; - } - } -} - -check_for_free_locations( chance ) -{ - boxes = level.chests; - stored_chance = chance; - chance = -1; - i = 0; - while ( i < boxes.size ) - { - if ( i == level.chest_index ) - { - i++; - continue; - } - else if ( boxes[ i ].last_hacked_round < level.round_number ) - { - chance = stored_chance; - break; - } - else - { - i++; - } - } - return chance; -} - -init_box_respin( chest, player ) -{ - self thread box_respin_think( chest, player ); -} - -box_respin_think( chest, player ) -{ - respin_hack = spawnstruct(); - respin_hack.origin = self.origin + vectorScale( ( 0, 0, 1 ), 24 ); - respin_hack.radius = 48; - respin_hack.height = 72; - respin_hack.script_int = 600; - respin_hack.script_float = 1.5; - respin_hack.player = player; - respin_hack.no_bullet_trace = 1; - respin_hack.chest = chest; - maps/mp/zombies/_zm_equip_hacker::register_pooled_hackable_struct( respin_hack, ::respin_box, ::hack_box_qualifier ); - self.weapon_model waittill_either( "death", "kill_respin_think_thread" ); - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( respin_hack ); -} - -respin_box_thread( hacker ) -{ - if ( isDefined( self.chest.zbarrier.weapon_model ) ) - { - self.chest.zbarrier.weapon_model notify( "kill_respin_think_thread" ); - } - self.chest.no_fly_away = 1; - self.chest.zbarrier notify( "box_hacked_respin" ); - self.chest disable_trigger(); - play_sound_at_pos( "open_chest", self.chest.zbarrier.origin ); - play_sound_at_pos( "music_chest", self.chest.zbarrier.origin ); - maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( self.chest.zbarrier.weapon_string ); - self.chest.zbarrier thread maps/mp/zombies/_zm_magicbox::treasure_chest_weapon_spawn( self.chest, hacker, 1 ); - self.chest.zbarrier waittill( "randomization_done" ); - self.chest.no_fly_away = undefined; - if ( !flag( "moving_chest_now" ) ) - { - self.chest enable_trigger(); - self.chest thread maps/mp/zombies/_zm_magicbox::treasure_chest_timeout(); - } -} - -respin_box( hacker ) -{ - self thread respin_box_thread( hacker ); -} - -hack_box_qualifier( player ) -{ - if ( player == self.chest.chest_user && isDefined( self.chest.weapon_out ) ) - { - return 1; - } - return 0; -} - -init_box_respin_respin( chest, player ) -{ - self thread box_respin_respin_think( chest, player ); -} - -box_respin_respin_think( chest, player ) -{ - respin_hack = spawnstruct(); - respin_hack.origin = self.origin + vectorScale( ( 0, 0, 1 ), 24 ); - respin_hack.radius = 48; - respin_hack.height = 72; - respin_hack.script_int = -950; - respin_hack.script_float = 1.5; - respin_hack.player = player; - respin_hack.no_bullet_trace = 1; - respin_hack.chest = chest; - maps/mp/zombies/_zm_equip_hacker::register_pooled_hackable_struct( respin_hack, ::respin_respin_box, ::hack_box_qualifier ); - self.weapon_model waittill_either( "death", "kill_respin_respin_think_thread" ); - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( respin_hack ); -} - -respin_respin_box( hacker ) -{ - org = self.chest.zbarrier.origin; - if ( isDefined( self.chest.zbarrier.weapon_model ) ) - { - self.chest.zbarrier.weapon_model notify( "kill_respin_respin_think_thread" ); - self.chest.zbarrier.weapon_model notify( "kill_weapon_movement" ); - self.chest.zbarrier.weapon_model moveto( org + vectorScale( ( 0, 0, 1 ), 40 ), 0,5 ); - } - if ( isDefined( self.chest.zbarrier.weapon_model_dw ) ) - { - self.chest.zbarrier.weapon_model_dw notify( "kill_weapon_movement" ); - self.chest.zbarrier.weapon_model_dw moveto( ( org + vectorScale( ( 0, 0, 1 ), 40 ) ) - vectorScale( ( 0, 0, 1 ), 3 ), 0,5 ); - } - self.chest.zbarrier notify( "box_hacked_rerespin" ); - self.chest.box_rerespun = 1; - self thread fake_weapon_powerup_thread( self.chest.zbarrier.weapon_model, self.chest.zbarrier.weapon_model_dw ); -} - -fake_weapon_powerup_thread( weapon1, weapon2 ) -{ - weapon1 endon( "death" ); - playfxontag( level._effect[ "powerup_on_solo" ], weapon1, "tag_origin" ); - playsoundatposition( "zmb_spawn_powerup", weapon1.origin ); - weapon1 playloopsound( "zmb_spawn_powerup_loop" ); - self thread fake_weapon_powerup_timeout( weapon1, weapon2 ); - while ( isDefined( weapon1 ) ) - { - waittime = randomfloatrange( 2.5, 5 ); - yaw = randomint( 360 ); - if ( yaw > 300 ) - { - yaw = 300; - } - else - { - if ( yaw < 60 ) - { - yaw = 60; - } - } - yaw = weapon1.angles[ 1 ] + yaw; - weapon1 rotateto( ( -60 + randomint( 120 ), yaw, -45 + randomint( 90 ) ), waittime, waittime * 0.5, waittime * 0.5 ); - if ( isDefined( weapon2 ) ) - { - weapon2 rotateto( ( -60 + randomint( 120 ), yaw, -45 + randomint( 90 ) ), waittime, waittime * 0.5, waittime * 0.5 ); - } - wait randomfloat( waittime - 0,1 ); - } -} - -fake_weapon_powerup_timeout( weapon1, weapon2 ) -{ - weapon1 endon( "death" ); - wait 15; - i = 0; - while ( i < 40 ) - { - if ( i % 2 ) - { - weapon1 hide(); - if ( isDefined( weapon2 ) ) - { - weapon2 hide(); - } - } - else - { - weapon1 show(); - if ( isDefined( weapon2 ) ) - { - weapon2 hide(); - } - } - if ( i < 15 ) - { - wait 0.5; - i++; - continue; - } - else if ( i < 25 ) - { - wait 0.25; - i++; - continue; - } - else - { - wait 0.1; - } - i++; - } - self.chest notify( "trigger" ); - if ( isDefined( weapon1 ) ) - { - weapon1 delete(); - } - if ( isDefined( weapon2 ) ) - { - weapon2 delete(); - } -} - -init_summon_hacks() -{ - chests = getstructarray( "treasure_chest_use", "targetname" ); - i = 0; - while ( i < chests.size ) - { - chest = chests[ i ]; - chest init_summon_box( chest.hidden ); - i++; - } -} - -init_summon_box( create ) -{ - if ( create ) - { - if ( isDefined( self._summon_hack_struct ) ) - { - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( self._summon_hack_struct ); - self._summon_hack_struct = undefined; - } - struct = spawnstruct(); - struct.origin = self.chest_box.origin + vectorScale( ( 0, 0, 1 ), 24 ); - struct.radius = 48; - struct.height = 72; - struct.script_int = 1200; - struct.script_float = 5; - struct.no_bullet_trace = 1; - struct.chest = self; - self._summon_hack_struct = struct; - maps/mp/zombies/_zm_equip_hacker::register_pooled_hackable_struct( struct, ::summon_box, ::summon_box_qualifier ); - } - else - { - if ( isDefined( self._summon_hack_struct ) ) - { - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( self._summon_hack_struct ); - self._summon_hack_struct = undefined; - } - } -} - -summon_box_thread( hacker ) -{ - self.chest.last_hacked_round = level.round_number + randomintrange( 2, 5 ); - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( self ); - self.chest thread maps/mp/zombies/_zm_magicbox::show_chest(); - self.chest notify( "kill_chest_think" ); - self.chest.auto_open = 1; - self.chest.no_charge = 1; - self.chest.no_fly_away = 1; - self.chest.forced_user = hacker; - self.chest thread maps/mp/zombies/_zm_magicbox::treasure_chest_think(); - self.chest.zbarrier waittill( "closed" ); - self.chest.forced_user = undefined; - self.chest.auto_open = undefined; - self.chest.no_charge = undefined; - self.chest.no_fly_away = undefined; - self.chest thread maps/mp/zombies/_zm_magicbox::hide_chest(); -} - -summon_box( hacker ) -{ - self thread summon_box_thread( hacker ); - if ( isDefined( hacker ) ) - { - hacker thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "hack_box" ); - } -} - -summon_box_qualifier( player ) -{ - if ( self.chest.last_hacked_round > level.round_number ) - { - return 0; - } - if ( isDefined( self.chest.zbarrier.chest_moving ) && self.chest.zbarrier.chest_moving ) - { - return 0; - } - return 1; -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_hackables_doors.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_hackables_doors.gsc deleted file mode 100644 index 1c632c5..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_hackables_doors.gsc +++ /dev/null @@ -1,108 +0,0 @@ -#include maps/mp/zombies/_zm_equip_hacker; -#include maps/mp/zombies/_zm_blockers; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -door_struct_debug() -{ - while ( 1 ) - { - wait 0.1; - origin = self.origin; - point = origin; - i = 1; - while ( i < 5 ) - { - point = origin + ( anglesToForward( self.door.angles ) * ( i * 2 ) ); - passed = bullettracepassed( point, origin, 0, undefined ); - color = vectorScale( ( 1, 0, 0 ), 255 ); - if ( !passed ) - { - color = vectorScale( ( 1, 0, 0 ), 255 ); - } -/# - print3d( point, "+", color, 1, 1 ); -#/ - i++; - } - } -} - -hack_doors( targetname, door_activate_func ) -{ - if ( !isDefined( targetname ) ) - { - targetname = "zombie_door"; - } - doors = getentarray( targetname, "targetname" ); - if ( !isDefined( door_activate_func ) ) - { - door_activate_func = ::maps/mp/zombies/_zm_blockers::door_opened; - } - i = 0; - while ( i < doors.size ) - { - door = doors[ i ]; - struct = spawnstruct(); - struct.origin = door.origin + ( anglesToForward( door.angles ) * 2 ); - struct.radius = 48; - struct.height = 72; - struct.script_float = 32.7; - struct.script_int = 200; - struct.door = door; - struct.no_bullet_trace = 1; - struct.door_activate_func = door_activate_func; - trace_passed = 0; - door thread hide_door_buy_when_hacker_active( struct ); - maps/mp/zombies/_zm_equip_hacker::register_pooled_hackable_struct( struct, ::door_hack ); - door thread watch_door_for_open( struct ); - i++; - } -} - -hide_door_buy_when_hacker_active( door_struct ) -{ - self endon( "death" ); - self endon( "door_hacked" ); - self endon( "door_opened" ); - maps/mp/zombies/_zm_equip_hacker::hide_hint_when_hackers_active(); -} - -watch_door_for_open( door_struct ) -{ - self waittill( "door_opened" ); - self endon( "door_hacked" ); - remove_all_door_hackables_that_target_door( door_struct.door ); -} - -door_hack( hacker ) -{ - self.door notify( "door_hacked" ); - self.door notify( "kill_door_think" ); - remove_all_door_hackables_that_target_door( self.door ); - self.door [[ self.door_activate_func ]](); - self.door._door_open = 1; -} - -remove_all_door_hackables_that_target_door( door ) -{ - candidates = []; - i = 0; - while ( i < level._hackable_objects.size ) - { - obj = level._hackable_objects[ i ]; - if ( isDefined( obj.door ) && obj.door.target == door.target ) - { - candidates[ candidates.size ] = obj; - } - i++; - } - i = 0; - while ( i < candidates.size ) - { - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( candidates[ i ] ); - i++; - } -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_hackables_packapunch.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_hackables_packapunch.gsc deleted file mode 100644 index c9fba2a..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_hackables_packapunch.gsc +++ /dev/null @@ -1,46 +0,0 @@ -#include maps/mp/zombies/_zm_equip_hacker; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -hack_packapunch() -{ - vending_weapon_upgrade_trigger = getentarray( "specialty_weapupgrade", "script_noteworthy" ); - perk = getent( vending_weapon_upgrade_trigger[ 0 ].target, "targetname" ); - if ( isDefined( perk ) ) - { - struct = spawnstruct(); - struct.origin = perk.origin + ( anglesToRight( perk.angles ) * 26 ) + vectorScale( ( 0, 0, 1 ), 48 ); - struct.radius = 48; - struct.height = 48; - struct.script_float = 5; - struct.script_int = -1000; - level._pack_hack_struct = struct; - maps/mp/zombies/_zm_equip_hacker::register_pooled_hackable_struct( level._pack_hack_struct, ::packapunch_hack ); - level._pack_hack_struct pack_trigger_think(); - } -} - -pack_trigger_think() -{ - if ( !flag_exists( "enter_nml" ) ) - { - return; - } - while ( 1 ) - { - flag_wait( "enter_nml" ); - self.script_int = -1000; - while ( flag( "enter_nml" ) ) - { - wait 1; - } - } -} - -packapunch_hack( hacker ) -{ - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( level._pack_hack_struct ); - level._pack_hack_struct.script_int = 0; - level notify( "packapunch_hacked" ); -} diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_hackables_perks.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_hackables_perks.gsc deleted file mode 100644 index 18cd74b..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_hackables_perks.gsc +++ /dev/null @@ -1,87 +0,0 @@ -#include maps/mp/zombies/_zm_equip_hacker; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -hack_perks() -{ - vending_triggers = getentarray( "zombie_vending", "targetname" ); - i = 0; - while ( i < vending_triggers.size ) - { - struct = spawnstruct(); - if ( isDefined( vending_triggers[ i ].machine ) ) - { - machine[ 0 ] = vending_triggers[ i ].machine; - } - else - { - machine = getentarray( vending_triggers[ i ].target, "targetname" ); - } - struct.origin = machine[ 0 ].origin + ( anglesToRight( machine[ 0 ].angles ) * 18 ) + vectorScale( ( 0, 0, 1 ), 48 ); - struct.radius = 48; - struct.height = 64; - struct.script_float = 5; - while ( !isDefined( vending_triggers[ i ].cost ) ) - { - wait 0.05; - } - struct.script_int = int( vending_triggers[ i ].cost * -1 ); - struct.perk = vending_triggers[ i ]; - if ( isDefined( level._hack_perks_override ) ) - { - struct = struct [[ level._hack_perks_override ]](); - } - vending_triggers[ i ].hackable = struct; - maps/mp/zombies/_zm_equip_hacker::register_pooled_hackable_struct( struct, ::perk_hack, ::perk_hack_qualifier ); - i++; - } - level._solo_revive_machine_expire_func = ::solo_revive_expire_func; -} - -solo_revive_expire_func() -{ - if ( isDefined( self.hackable ) ) - { - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( self.hackable ); - self.hackable = undefined; - } -} - -perk_hack_qualifier( player ) -{ - if ( isDefined( player._retain_perks ) ) - { - return 0; - } - if ( isDefined( self.perk ) && isDefined( self.perk.script_noteworthy ) ) - { - if ( player hasperk( self.perk.script_noteworthy ) ) - { - return 1; - } - } - return 0; -} - -perk_hack( hacker ) -{ - if ( flag( "solo_game" ) && self.perk.script_noteworthy == "specialty_quickrevive" ) - { - hacker.lives--; - - } - hacker notify( self.perk.script_noteworthy + "_stop" ); - hacker playsoundtoplayer( "evt_perk_throwup", hacker ); - while ( isDefined( hacker.perk_hud ) ) - { - keys = getarraykeys( hacker.perk_hud ); - i = 0; - while ( i < hacker.perk_hud.size ) - { - hacker.perk_hud[ keys[ i ] ].x = i * 30; - i++; - } - } -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_hackables_powerups.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_hackables_powerups.gsc deleted file mode 100644 index 318339f..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_hackables_powerups.gsc +++ /dev/null @@ -1,79 +0,0 @@ -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_equip_hacker; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -unhackable_powerup( name ) -{ - ret = 0; - switch( name ) - { - case "bonus_points_player": - case "bonus_points_team": - case "lose_points_team": - case "random_weapon": - ret = 1; - break; - } - return ret; -} - -hack_powerups() -{ - while ( 1 ) - { - level waittill( "powerup_dropped", powerup ); - if ( !unhackable_powerup( powerup.powerup_name ) ) - { - struct = spawnstruct(); - struct.origin = powerup.origin; - struct.radius = 65; - struct.height = 72; - struct.script_float = 5; - struct.script_int = 5000; - struct.powerup = powerup; - powerup thread powerup_pickup_watcher( struct ); - maps/mp/zombies/_zm_equip_hacker::register_pooled_hackable_struct( struct, ::powerup_hack ); - } - } -} - -powerup_pickup_watcher( powerup_struct ) -{ - self endon( "hacked" ); - self waittill( "death" ); - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( powerup_struct ); -} - -powerup_hack( hacker ) -{ - self.powerup notify( "hacked" ); - if ( isDefined( self.powerup.zombie_grabbable ) && self.powerup.zombie_grabbable ) - { - self.powerup notify( "powerup_timedout" ); - origin = self.powerup.origin; - self.powerup delete(); - self.powerup = maps/mp/zombies/_zm_net::network_safe_spawn( "powerup", 1, "script_model", origin ); - if ( isDefined( self.powerup ) ) - { - self.powerup maps/mp/zombies/_zm_powerups::powerup_setup( "full_ammo" ); - self.powerup thread maps/mp/zombies/_zm_powerups::powerup_timeout(); - self.powerup thread maps/mp/zombies/_zm_powerups::powerup_wobble(); - self.powerup thread maps/mp/zombies/_zm_powerups::powerup_grab(); - } - } - else - { - if ( self.powerup.powerup_name == "full_ammo" ) - { - self.powerup maps/mp/zombies/_zm_powerups::powerup_setup( "fire_sale" ); - } - else - { - self.powerup maps/mp/zombies/_zm_powerups::powerup_setup( "full_ammo" ); - } - } - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( self ); -} diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_hackables_wallbuys.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_hackables_wallbuys.gsc deleted file mode 100644 index 950a1a5..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_hackables_wallbuys.gsc +++ /dev/null @@ -1,55 +0,0 @@ -#include maps/mp/zombies/_zm_equip_hacker; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -hack_wallbuys() -{ - weapon_spawns = getstructarray( "weapon_upgrade", "targetname" ); - i = 0; - while ( i < weapon_spawns.size ) - { - if ( weapontype( weapon_spawns[ i ].zombie_weapon_upgrade ) == "grenade" ) - { - i++; - continue; - } - else if ( weapontype( weapon_spawns[ i ].zombie_weapon_upgrade ) == "melee" ) - { - i++; - continue; - } - else if ( weapontype( weapon_spawns[ i ].zombie_weapon_upgrade ) == "mine" ) - { - i++; - continue; - } - else if ( weapontype( weapon_spawns[ i ].zombie_weapon_upgrade ) == "bomb" ) - { - i++; - continue; - } - else - { - struct = spawnstruct(); - struct.origin = weapon_spawns[ i ].origin; - struct.radius = 48; - struct.height = 48; - struct.script_float = 2; - struct.script_int = 3000; - struct.wallbuy = weapon_spawns[ i ]; - maps/mp/zombies/_zm_equip_hacker::register_pooled_hackable_struct( struct, ::wallbuy_hack ); - } - i++; - } - bowie_triggers = getentarray( "bowie_upgrade", "targetname" ); - array_thread( bowie_triggers, ::maps/mp/zombies/_zm_equip_hacker::hide_hint_when_hackers_active ); -} - -wallbuy_hack( hacker ) -{ - self.wallbuy.hacked = 1; - self.clientfieldname = ( self.wallbuy.zombie_weapon_upgrade + "_" ) + self.origin; - level setclientfield( self.clientfieldname, 2 ); - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( self ); -} diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_jump_pad.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_jump_pad.gsc deleted file mode 100644 index 22c1830..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_jump_pad.gsc +++ /dev/null @@ -1,557 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( is_true( level._uses_jump_pads ) ) - { - level jump_pad_init(); - } -} - -jump_pad_init() -{ - level._jump_pad_override = []; - jump_pad_triggers = getentarray( "trig_jump_pad", "targetname" ); - if ( !isDefined( jump_pad_triggers ) ) - { - return; - } - i = 0; - while ( i < jump_pad_triggers.size ) - { - jump_pad_triggers[ i ].start = getstruct( jump_pad_triggers[ i ].target, "targetname" ); - jump_pad_triggers[ i ].destination = getstructarray( jump_pad_triggers[ i ].start.target, "targetname" ); - if ( isDefined( jump_pad_triggers[ i ].script_string ) ) - { - jump_pad_triggers[ i ].overrides = strtok( jump_pad_triggers[ i ].script_string, "," ); - } - jump_pad_triggers[ i ] thread jump_pad_think(); - i++; - } - onplayerconnect_callback( ::jump_pad_player_variables ); -} - -jump_pad_player_variables() -{ - self._padded = 0; - self.lander = 0; -} - -jump_pad_think() -{ - self endon( "destroyed" ); - end_point = undefined; - start_point = undefined; - z_velocity = undefined; - z_dist = undefined; - fling_this_way = undefined; - jump_time = undefined; - world_gravity = getDvarInt( "bg_gravity" ); - gravity_pulls = -13,3; - top_velocity_sq = 810000; - forward_scaling = 1; - if ( isDefined( self.script_flag_wait ) ) - { - if ( !isDefined( level.flag[ self.script_flag_wait ] ) ) - { - flag_init( self.script_flag_wait ); - } - flag_wait( self.script_flag_wait ); - } - while ( isDefined( self ) ) - { - self waittill( "trigger", who ); - if ( isplayer( who ) ) - { - self thread trigger_thread( who, ::jump_pad_start, ::jump_pad_cancel ); - } - } -} - -jump_pad_start( ent_player, endon_condition ) -{ - self endon( "endon_condition" ); - ent_player endon( "left_jump_pad" ); - ent_player endon( "death" ); - ent_player endon( "disconnect" ); - end_point = undefined; - start_point = undefined; - z_velocity = undefined; - z_dist = undefined; - fling_this_way = undefined; - jump_time = undefined; - world_gravity = getDvarInt( "bg_gravity" ); - gravity_pulls = -13,3; - top_velocity_sq = 810000; - forward_scaling = 1; - start_point = self.start; - while ( isDefined( self.name ) ) - { - self._action_overrides = strtok( self.name, "," ); - while ( isDefined( self._action_overrides ) ) - { - i = 0; - while ( i < self._action_overrides.size ) - { - ent_player jump_pad_player_overrides( self._action_overrides[ i ] ); - i++; - } - } - } - if ( isDefined( self.script_wait ) ) - { - if ( self.script_wait < 1 ) - { - self playsound( "evt_jump_pad_charge_short" ); - } - else - { - self playsound( "evt_jump_pad_charge" ); - } - wait self.script_wait; - } - else - { - self playsound( "evt_jump_pad_charge" ); - wait 1; - } - if ( isDefined( self.script_parameters ) && isDefined( level._jump_pad_override[ self.script_parameters ] ) ) - { - end_point = self [[ level._jump_pad_override[ self.script_parameters ] ]]( ent_player ); - } - if ( !isDefined( end_point ) ) - { - end_point = self.destination[ randomint( self.destination.size ) ]; - } - if ( isDefined( self.script_string ) && isDefined( level._jump_pad_override[ self.script_string ] ) ) - { - info_array = self [[ level._jump_pad_override[ self.script_string ] ]]( start_point, end_point ); - fling_this_way = info_array[ 0 ]; - jump_time = info_array[ 1 ]; - } - else - { - end_spot = end_point.origin; - if ( !is_true( self.script_airspeed ) ) - { - rand_end = ( randomfloatrange( -1, 1 ), randomfloatrange( -1, 1 ), 0 ); - rand_scale = randomint( 100 ); - rand_spot = vectorScale( rand_end, rand_scale ); - end_spot = end_point.origin + rand_spot; - } - pad_dist = distance( start_point.origin, end_spot ); - z_dist = end_spot[ 2 ] - start_point.origin[ 2 ]; - jump_velocity = end_spot - start_point.origin; - if ( z_dist > 40 && z_dist < 135 ) - { - z_dist *= 2,5; - forward_scaling = 1,1; -/# - if ( getDvarInt( #"D5FD01C3" ) ) - { - if ( getDvar( #"E2494021" ) != "" ) - { - z_dist *= getDvarFloat( #"E2494021" ); - } - if ( getDvar( #"4E3BC729" ) != "" ) - { - forward_scaling = getDvarFloat( #"4E3BC729" ); -#/ - } - } - } - else - { - if ( z_dist >= 135 ) - { - z_dist *= 2,7; - forward_scaling = 1,3; -/# - if ( getDvarInt( #"D5FD01C3" ) ) - { - if ( getDvar( #"E2494021" ) != "" ) - { - z_dist *= getDvarFloat( #"E2494021" ); - } - if ( getDvar( #"4E3BC729" ) != "" ) - { - forward_scaling = getDvarFloat( #"4E3BC729" ); -#/ - } - } - } - else - { - if ( z_dist < 0 ) - { - z_dist *= 2,4; - forward_scaling = 1; -/# - if ( getDvarInt( #"D5FD01C3" ) ) - { - if ( getDvar( #"E2494021" ) != "" ) - { - z_dist *= getDvarFloat( #"E2494021" ); - } - if ( getDvar( #"4E3BC729" ) != "" ) - { - forward_scaling = getDvarFloat( #"4E3BC729" ); -#/ - } - } - } - } - } - z_velocity = 2 * z_dist * world_gravity; - if ( z_velocity < 0 ) - { - z_velocity *= -1; - } - if ( z_dist < 0 ) - { - z_dist *= -1; - } - jump_time = sqrt( ( 2 * pad_dist ) / world_gravity ); - jump_time_2 = sqrt( ( 2 * z_dist ) / world_gravity ); - jump_time += jump_time_2; - if ( jump_time < 0 ) - { - jump_time *= -1; - } - x = ( jump_velocity[ 0 ] * forward_scaling ) / jump_time; - y = ( jump_velocity[ 1 ] * forward_scaling ) / jump_time; - z = z_velocity / jump_time; - fling_this_way = ( x, y, z ); - } - if ( isDefined( end_point.target ) ) - { - poi_spot = getstruct( end_point.target, "targetname" ); - } - else - { - poi_spot = end_point; - } - if ( !isDefined( self.script_index ) ) - { - ent_player.script_index = undefined; - } - else - { - ent_player.script_index = self.script_index; - } - if ( isDefined( self.script_start ) && self.script_start == 1 ) - { - if ( !is_true( ent_player._padded ) ) - { - self playsound( "evt_jump_pad_launch" ); - playfx( level._effect[ "jump_pad_jump" ], self.origin ); - ent_player thread jump_pad_move( fling_this_way, jump_time, poi_spot, self ); - if ( isDefined( self.script_label ) ) - { - level notify( self.script_label ); - } - return; - } - } - else - { - if ( ent_player isonground() && !is_true( ent_player._padded ) ) - { - self playsound( "evt_jump_pad_launch" ); - playfx( level._effect[ "jump_pad_jump" ], self.origin ); - ent_player thread jump_pad_move( fling_this_way, jump_time, poi_spot, self ); - if ( isDefined( self.script_label ) ) - { - level notify( self.script_label ); - } - return; - } - } - wait 0,5; - if ( ent_player istouching( self ) ) - { - self jump_pad_start( ent_player, endon_condition ); - } -} - -jump_pad_cancel( ent_player ) -{ - ent_player notify( "left_jump_pad" ); - if ( isDefined( ent_player.poi_spot ) && !is_true( ent_player._padded ) ) - { - } - while ( isDefined( self.name ) ) - { - self._action_overrides = strtok( self.name, "," ); - while ( isDefined( self._action_overrides ) ) - { - i = 0; - while ( i < self._action_overrides.size ) - { - ent_player jump_pad_player_overrides( self._action_overrides[ i ] ); - i++; - } - } - } -} - -jump_pad_move( vec_direction, flt_time, struct_poi, trigger ) -{ - self endon( "death" ); - self endon( "disconnect" ); - start_time = getTime(); - jump_time = flt_time * 500; - attract_dist = undefined; - num_attractors = 30; - added_poi_value = 0; - start_turned_on = 1; - poi_start_func = undefined; - while ( is_true( self.divetoprone ) || is_true( self._padded ) ) - { - wait 0,05; - } - self._padded = 1; - self.lander = 1; - self setstance( "stand" ); - wait 0,1; - if ( isDefined( trigger.script_label ) ) - { - if ( issubstr( trigger.script_label, "low" ) ) - { - self.jump_pad_current = undefined; - self.jump_pad_previous = undefined; - } - else if ( !isDefined( self.jump_pad_current ) ) - { - self.jump_pad_current = trigger; - } - else - { - self.jump_pad_previous = self.jump_pad_current; - self.jump_pad_current = trigger; - } - } - if ( isDefined( self.poi_spot ) ) - { - level jump_pad_ignore_poi_cleanup( self.poi_spot ); - self.poi_spot deactivate_zombie_point_of_interest(); - self.poi_spot delete(); - } - if ( isDefined( struct_poi ) ) - { - self.poi_spot = spawn( "script_origin", struct_poi.origin ); - if ( isDefined( level._pad_poi_ignore ) ) - { - level [[ level._pad_poi_ignore ]]( self.poi_spot ); - } - self thread jump_pad_enemy_follow_or_ignore( self.poi_spot ); - if ( isDefined( level._jump_pad_poi_start_override ) && !is_true( self.script_index ) ) - { - poi_start_func = level._jump_pad_poi_start_override; - } - if ( isDefined( level._jump_pad_poi_end_override ) ) - { - poi_end_func = level._jump_pad_poi_end_override; - } - self.poi_spot create_zombie_point_of_interest( attract_dist, num_attractors, added_poi_value, start_turned_on, poi_start_func ); - self thread disconnect_failsafe_pad_poi_clean(); - } - self setorigin( self.origin + ( 0, 0, 1 ) ); - if ( randomintrange( 0, 101 ) < 20 ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "jumppad" ); - } - while ( ( getTime() - start_time ) < jump_time ) - { - self setvelocity( vec_direction ); - wait 0,05; - } - while ( !self isonground() ) - { - wait 0,05; - } - self._padded = 0; - self.lander = 0; - jump_pad_triggers = getentarray( "trig_jump_pad", "targetname" ); - i = 0; - while ( i < jump_pad_triggers.size ) - { - if ( self istouching( jump_pad_triggers[ i ] ) ) - { - level thread failsafe_pad_poi_clean( jump_pad_triggers[ i ], self.poi_spot ); - return; - } - i++; - } - if ( isDefined( self.poi_spot ) ) - { - level jump_pad_ignore_poi_cleanup( self.poi_spot ); - self.poi_spot delete(); - } -} - -disconnect_failsafe_pad_poi_clean() -{ - self notify( "kill_disconnect_failsafe_pad_poi_clean" ); - self endon( "kill_disconnect_failsafe_pad_poi_clean" ); - self.poi_spot endon( "death" ); - self waittill( "disconnect" ); - if ( isDefined( self.poi_spot ) ) - { - level jump_pad_ignore_poi_cleanup( self.poi_spot ); - self.poi_spot deactivate_zombie_point_of_interest(); - self.poi_spot delete(); - } -} - -failsafe_pad_poi_clean( ent_trig, ent_poi ) -{ - if ( isDefined( ent_trig.script_wait ) ) - { - wait ent_trig.script_wait; - } - else - { - wait 0,5; - } - if ( isDefined( ent_poi ) ) - { - level jump_pad_ignore_poi_cleanup( ent_poi ); - ent_poi deactivate_zombie_point_of_interest(); - ent_poi delete(); - } -} - -jump_pad_enemy_follow_or_ignore( ent_poi ) -{ - self endon( "death" ); - self endon( "disconnect" ); - zombies = getaiarray( level.zombie_team ); - players = getplayers(); - valid_players = 0; - p = 0; - while ( p < players.size ) - { - if ( is_player_valid( players[ p ] ) ) - { - valid_players++; - } - p++; - } - i = 0; - while ( i < zombies.size ) - { - ignore_poi = 0; - if ( !isDefined( zombies[ i ] ) ) - { - i++; - continue; - } - else enemy = zombies[ i ].favoriteenemy; - if ( isDefined( enemy ) ) - { - if ( players.size > 1 && valid_players > 1 ) - { - if ( enemy != self || isDefined( enemy.jump_pad_previous ) && enemy.jump_pad_previous == enemy.jump_pad_current ) - { - ignore_poi = 1; - } - } - } - if ( is_true( ignore_poi ) ) - { - zombies[ i ] thread add_poi_to_ignore_list( ent_poi ); - i++; - continue; - } - else - { - zombies[ i ].ignore_distance_tracking = 1; - zombies[ i ]._pad_follow = 1; - zombies[ i ] thread stop_chasing_the_sky( ent_poi ); - } - i++; - } -} - -jump_pad_ignore_poi_cleanup( ent_poi ) -{ - zombies = getaiarray( level.zombie_team ); - i = 0; - while ( i < zombies.size ) - { - if ( isDefined( zombies[ i ] ) ) - { - if ( is_true( zombies[ i ]._pad_follow ) ) - { - zombies[ i ]._pad_follow = 0; - zombies[ i ] notify( "stop_chasing_the_sky" ); - zombies[ i ].ignore_distance_tracking = 0; - } - if ( isDefined( ent_poi ) ) - { - zombies[ i ] thread remove_poi_from_ignore_list( ent_poi ); - } - } - i++; - } -} - -stop_chasing_the_sky( ent_poi ) -{ - self endon( "death" ); - self endon( "stop_chasing_the_sky" ); - while ( is_true( self._pad_follow ) ) - { - while ( isDefined( self.favoriteenemy ) ) - { - players = getplayers(); - i = 0; - while ( i < players.size ) - { - if ( is_player_valid( players[ i ] ) && players[ i ] != self.favoriteenemy ) - { - if ( distance2dsquared( players[ i ].origin, self.origin ) < 10000 ) - { - self add_poi_to_ignore_list( ent_poi ); - return; - } - } - i++; - } - } - wait 0,1; - } - self._pad_follow = 0; - self.ignore_distance_tracking = 0; - self notify( "stop_chasing_the_sky" ); -} - -jump_pad_player_overrides( st_behavior, int_clean ) -{ - if ( !isDefined( st_behavior ) || !isstring( st_behavior ) ) - { - return; - } - if ( !isDefined( int_clean ) ) - { - int_clean = 0; - } - switch( st_behavior ) - { - case "no_sprint": - if ( !int_clean ) - { - } - default: - if ( isDefined( level._jump_pad_level_behavior ) ) - { - self [[ level._jump_pad_level_behavior ]]( st_behavior, int_clean ); - } - } - } - } -} diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_laststand.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_laststand.gsc deleted file mode 100644 index 52d147a..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_laststand.gsc +++ /dev/null @@ -1,1442 +0,0 @@ -//checked includes changed to match cerberus output -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_chugabud; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/gametypes_zm/_gameobjects; -#include maps/mp/zombies/_zm_pers_upgrades_functions; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/_demo; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -laststand_global_init() //checked matches cerberus output -{ - level.const_laststand_getup_count_start = 0; - level.const_laststand_getup_bar_start = 0.5; - level.const_laststand_getup_bar_regen = 0.0025; - level.const_laststand_getup_bar_damage = 0.1; -} - -init() //checked matches cerberus output //checked matches beta dump -{ - if ( level.script == "frontend" ) - { - return; - } - laststand_global_init(); - level.revive_tool = "syrette_zm"; - precacheitem( level.revive_tool ); - precachestring( &"ZOMBIE_BUTTON_TO_REVIVE_PLAYER" ); - precachestring( &"ZOMBIE_PLAYER_NEEDS_TO_BE_REVIVED" ); - precachestring( &"ZOMBIE_PLAYER_IS_REVIVING_YOU" ); - precachestring( &"ZOMBIE_REVIVING" ); - if ( !isDefined( level.laststandpistol ) ) - { - level.laststandpistol = "m1911"; - precacheitem( level.laststandpistol ); - } - level thread revive_hud_think(); - level.primaryprogressbarx = 0; - level.primaryprogressbary = 110; - level.primaryprogressbarheight = 4; - level.primaryprogressbarwidth = 120; - level.primaryprogressbary_ss = 280; - if ( getDvar( "revive_trigger_radius" ) == "" ) - { - setdvar( "revive_trigger_radius", "40" ); - } - level.laststandgetupallowed = 0; -} - -player_is_in_laststand() //checked changed to match cerberus output //changed at own discretion -{ - if ( !is_true( self.no_revive_trigger ) && isDefined( self.revivetrigger ) ) - { - return 1; - } - if ( is_true( self.laststand ) ) - { - return 1; - } - return 0; -} - -player_num_in_laststand() //checked changed to match cerberus output //checked matches beta dump -{ - num = 0; - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - if ( players[ i ] player_is_in_laststand() ) - { - num++; - } - } - return num; -} - -player_all_players_in_laststand() //checked changed at own discretion //checked matches beta dump -{ - if ( player_num_in_laststand() == get_players().size ) - { - return 1; - } - return 0; -} - -player_any_player_in_laststand() //checked changed at own discretion //checked matches beta dump -{ - if ( player_num_in_laststand() > 0 ) - { - return 1; - } - return 0; -} - -player_last_stand_stats( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) //checked matches cerberus output -{ - if ( isDefined( attacker ) && isplayer( attacker ) && attacker != self ) - { - if ( level.gametype == "zcleansed" ) - { - maps/mp/_demo::bookmark( "kill", getTime(), self, attacker, 0, einflictor ); - } - if ( level.gametype == "zcleansed" ) - { - if ( isDefined( attacker.is_zombie ) && !attacker.is_zombie ) - { - attacker.kills++; - } - else - { - attacker.downs++; - } - } - else - { - attacker.kills++; - } - attacker maps/mp/zombies/_zm_stats::increment_client_stat( "kills" ); - attacker maps/mp/zombies/_zm_stats::increment_player_stat( "kills" ); - if ( isDefined( sweapon ) ) - { - dmgweapon = sweapon; - if ( is_alt_weapon( dmgweapon ) ) - { - dmgweapon = weaponaltweaponname( dmgweapon ); - } - attacker addweaponstat( dmgweapon, "kills", 1 ); - } - if ( is_headshot( sweapon, shitloc, smeansofdeath ) ) - { - attacker.headshots++; - attacker maps/mp/zombies/_zm_stats::increment_client_stat( "headshots" ); - attacker addweaponstat( sweapon, "headshots", 1 ); - attacker maps/mp/zombies/_zm_stats::increment_player_stat( "headshots" ); - } - } - self increment_downed_stat(); - if ( flag( "solo_game" ) && !self.lives && getnumconnectedplayers() < 2 ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "deaths" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "deaths" ); - self maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat(); - } -} - -increment_downed_stat() //checked matches cerberus output -{ - if ( level.gametype != "zcleansed" ) - { - self.downs++; - } - self maps/mp/zombies/_zm_stats::increment_client_stat( "downs" ); - self add_weighted_down(); - self maps/mp/zombies/_zm_stats::increment_player_stat( "downs" ); - zonename = self get_current_zone(); - if ( !isDefined( zonename ) ) - { - zonename = ""; - } - self recordplayerdownzombies( zonename ); -} - -playerlaststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) //checked matches cerberus output //checked changed to match beta dump -{ - self notify( "entering_last_stand" ); - if ( isDefined( level._game_module_player_laststand_callback ) ) - { - self [[ level._game_module_player_laststand_callback ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); - } - if ( self player_is_in_laststand() ) - { - return; - } - if ( is_true( self.in_zombify_call ) ) - { - return; - } - self thread player_last_stand_stats( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); - if ( isDefined( level.playerlaststand_func ) ) - { - [[ level.playerlaststand_func ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); - } - self.health = 1; - self.laststand = 1; - self.ignoreme = 1; - self thread maps/mp/gametypes_zm/_gameobjects::onplayerlaststand(); - self thread maps/mp/zombies/_zm_buildables::onplayerlaststand(); - if ( !is_true( self.no_revive_trigger ) ) - { - self revive_trigger_spawn(); - } - else - { - self undolaststand(); - } - if ( is_true( self.is_zombie ) ) - { - self takeallweapons(); - if ( isDefined( attacker ) && isplayer( attacker ) && attacker != self ) - { - attacker notify( "killed_a_zombie_player", eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration ); - } - } - else - { - self laststand_disable_player_weapons(); - self laststand_give_pistol(); - } - if ( is_true( level.playerSuicideAllowed ) && get_players().size > 1 ) - { - if ( !isDefined( level.canplayersuicide ) || self [[ level.canplayersuicide ]]() ) - { - self thread suicide_trigger_spawn(); - } - } - if ( isDefined( self.disabled_perks ) ) - { - self.disabled_perks = []; - } - if ( level.laststandgetupallowed ) - { - self thread laststand_getup(); - } - else - { - bleedout_time = getDvarFloat( "player_lastStandBleedoutTime" ); - self thread laststand_bleedout( bleedout_time ); - } - if ( level.gametype != "zcleansed" ) - { - maps/mp/_demo::bookmark( "zm_player_downed", getTime(), self ); - } - self notify( "player_downed" ); - self thread refire_player_downed(); - self thread cleanup_laststand_on_disconnect(); -} - -refire_player_downed() //checked matches cerberus output -{ - self endon( "player_revived" ); - self endon( "death" ); - self endon( "disconnect" ); - wait 1; - if ( self.num_perks ) - { - self notify( "player_downed" ); - } -} - -laststand_allowed( sweapon, smeansofdeath, shitloc ) //checked matches cerberus output -{ - if ( level.laststandpistol == "none" ) - { - return 0; - } - return 1; -} - -laststand_disable_player_weapons() //checked partially changed to match cerberus output //did not change while loop to for loop to prevent infinite loop bug due to continue -{ - weaponinventory = self getweaponslist( 1 ); - self.lastactiveweapon = self getcurrentweapon(); - if ( self isthrowinggrenade() && is_offhand_weapon( self.lastactiveweapon ) ) - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self.lastactiveweapon = primaryweapons[ 0 ]; - self switchtoweaponimmediate( self.lastactiveweapon ); - } - } - self setlaststandprevweap( self.lastactiveweapon ); - self.laststandpistol = undefined; - self.hadpistol = 0; - if ( isDefined( self.weapon_taken_by_losing_specialty_additionalprimaryweapon ) && self.lastactiveweapon == self.weapon_taken_by_losing_specialty_additionalprimaryweapon ) - { - self.lastactiveweapon = "none"; - self.weapon_taken_by_losing_specialty_additionalprimaryweapon = undefined; - } - i = 0; - while ( i < weaponinventory.size ) - { - weapon = weaponinventory[ i ]; - class = weaponclass( weapon ); - if ( issubstr( weapon, "knife_ballistic_" ) ) - { - class = "knife"; - } - if ( ( class == "pistol" || class == "pistol spread" ) && !isDefined( self.laststandpistol ) || class == "pistolspread" && !isDefined( self.laststandpistol ) ) - { - self.laststandpistol = weapon; - self.hadpistol = 1; - } - if ( weapon == "syrette_zm" ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "failed_sacrifices" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "failed_sacrifices" ); - } - else if ( is_zombie_perk_bottle( weapon ) ) - { - self takeweapon( weapon ); - self.lastactiveweapon = "none"; - i++; - continue; - } - if ( isDefined( get_gamemode_var( "item_meat_name" ) ) ) - { - if ( weapon == get_gamemode_var( "item_meat_name" ) ) - { - self takeweapon( weapon ); - self.lastactiveweapon = "none"; - i++; - continue; - } - } - i++; - } - if ( isDefined( self.hadpistol ) && self.hadpistol == 1 && isDefined( level.zombie_last_stand_pistol_memory ) ) - { - self [[ level.zombie_last_stand_pistol_memory ]](); - } - if ( !isDefined( self.laststandpistol ) ) - { - self.laststandpistol = level.laststandpistol; - } - self disableweaponcycling(); - self notify( "weapons_taken_for_last_stand" ); -} - -laststand_enable_player_weapons() //checked matches cerberus output -{ - if ( !is_true( self.hadpistol ) && isDefined( self.laststandpistol ) ) - { - self takeweapon( self.laststandpistol ); - } - if ( isDefined( self.hadpistol ) && self.hadpistol == 1 && isDefined( level.zombie_last_stand_ammo_return ) ) - { - [[ level.zombie_last_stand_ammo_return ]](); - } - self enableweaponcycling(); - self enableoffhandweapons(); - if ( isDefined( self.lastactiveweapon ) && self.lastactiveweapon != "none" && self hasweapon( self.lastactiveweapon ) && !is_placeable_mine( self.lastactiveweapon ) && !is_equipment( self.lastactiveweapon ) ) - { - self switchtoweapon( self.lastactiveweapon ); - } - else - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - } -} - -laststand_clean_up_on_disconnect( playerbeingrevived, revivergun ) //checked matches cerberus output -{ - self endon( "do_revive_ended_normally" ); - revivetrigger = playerbeingrevived.revivetrigger; - playerbeingrevived waittill( "disconnect" ); - if ( isDefined( revivetrigger ) ) - { - revivetrigger delete(); - } - self cleanup_suicide_hud(); - if ( isDefined( self.reviveprogressbar ) ) - { - self.reviveprogressbar destroyelem(); - } - if ( isDefined( self.revivetexthud ) ) - { - self.revivetexthud destroy(); - } - self revive_give_back_weapons( revivergun ); -} - -laststand_clean_up_reviving_any( playerbeingrevived ) //checked changed to match cerberus output -{ - self endon( "do_revive_ended_normally" ); - playerbeingrevived waittill_any( "disconnect", "zombified", "stop_revive_trigger" ); - self.is_reviving_any--; - - if ( self.is_reviving_any < 0 ) - { - self.is_reviving_any = 0; - } -} - -laststand_give_pistol() //checked changed to match cerberus output -{ - /* -/# - assert( isDefined( self.laststandpistol ) ); -#/ -/# - assert( self.laststandpistol != "none" ); -#/ - */ - if ( isDefined( level.zombie_last_stand ) ) - { - [[ level.zombie_last_stand ]](); - } - else - { - self giveweapon( self.laststandpistol ); - self givemaxammo( self.laststandpistol ); - self switchtoweapon( self.laststandpistol ); - } -} - -laststand_bleedout( delay ) //checked changed to match cerberus output -{ - self endon( "player_revived" ); - self endon( "player_suicide" ); - self endon( "zombified" ); - self endon( "disconnect" ); - if ( is_true( self.is_zombie ) || is_true( self.no_revive_trigger ) ) - { - self notify( "bled_out" ); - wait_network_frame(); - self bleed_out(); - return; - } - setclientsysstate( "lsm", "1", self ); - self.bleedout_time = delay; - while ( self.bleedout_time > int( delay * 0.5 ) ) - { - self.bleedout_time -= 1; - wait 1; - } - visionsetlaststand( "zombie_death", delay * 0.5 ); - while ( self.bleedout_time > 0 ) - { - self.bleedout_time -= 1; - wait 1; - } - while ( isDefined( self.revivetrigger ) && isDefined( self.revivetrigger.beingrevived ) && self.revivetrigger.beingrevived == 1 ) - { - wait 0.1; - } - self notify( "bled_out" ); - wait_network_frame(); - self bleed_out(); -} - -bleed_out() //checked changed to match cerberus output -{ - self cleanup_suicide_hud(); - if ( isDefined( self.revivetrigger ) ) - { - self.revivetrigger delete(); - } - self.revivetrigger = undefined; - setclientsysstate( "lsm", "0", self ); - self maps/mp/zombies/_zm_stats::increment_client_stat( "deaths" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "deaths" ); - self maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat(); - self recordplayerdeathzombies(); - self maps/mp/zombies/_zm_equipment::equipment_take(); - if ( level.gametype != "zcleansed" ) - { - maps/mp/_demo::bookmark( "zm_player_bledout", getTime(), self, undefined, 1 ); - } - level notify( "bleed_out", self.characterindex ); - self undolaststand(); - if ( is_true( level.is_zombie_level ) ) - { - self thread [[ level.player_becomes_zombie ]](); - } - if ( is_true( level.is_specops_level ) ) - { - self thread [[ level.spawnspectator ]](); - } - else - { - self.ignoreme = 0; - } -} - -cleanup_suicide_hud() //checked matches cerberus output -{ - if ( isDefined( self.suicideprompt ) ) - { - self.suicideprompt destroy(); - } - self.suicideprompt = undefined; -} - -clean_up_suicide_hud_on_end_game() //checked matches cerberus output -{ - self endon( "disconnect" ); - self endon( "zombified" ); - self endon( "stop_revive_trigger" ); - self endon( "player_revived" ); - self endon( "bled_out" ); - level waittill_any( "end_game", "stop_suicide_trigger" ); - self cleanup_suicide_hud(); - if ( isDefined( self.suicidetexthud ) ) - { - self.suicidetexthud destroy(); - } - if ( isDefined( self.suicideprogressbar ) ) - { - self.suicideprogressbar destroyelem(); - } -} - -clean_up_suicide_hud_on_bled_out() //checked matches cerberus output -{ - self endon( "disconnect" ); - self endon( "zombified" ); - self endon( "stop_revive_trigger" ); - self waittill_any( "bled_out", "player_revived", "fake_death" ); - self cleanup_suicide_hud(); - if ( isDefined( self.suicideprogressbar ) ) - { - self.suicideprogressbar destroyelem(); - } - if ( isDefined( self.suicidetexthud ) ) - { - self.suicidetexthud destroy(); - } -} - -suicide_trigger_spawn() //checked matches cerberus output -{ - radius = getDvarInt( "revive_trigger_radius" ); - self.suicideprompt = newclienthudelem( self ); - self.suicideprompt.alignx = "center"; - self.suicideprompt.aligny = "middle"; - self.suicideprompt.horzalign = "center"; - self.suicideprompt.vertalign = "bottom"; - self.suicideprompt.y = -170; - if ( self issplitscreen() ) - { - self.suicideprompt.y = -132; - } - self.suicideprompt.foreground = 1; - self.suicideprompt.font = "default"; - self.suicideprompt.fontscale = 1.5; - self.suicideprompt.alpha = 1; - self.suicideprompt.color = ( 1, 1, 1 ); - self.suicideprompt.hidewheninmenu = 1; - self thread suicide_trigger_think(); -} - -suicide_trigger_think() //checked changed to match cerberus output -{ - self endon( "disconnect" ); - self endon( "zombified" ); - self endon( "stop_revive_trigger" ); - self endon( "player_revived" ); - self endon( "bled_out" ); - self endon( "fake_death" ); - level endon( "end_game" ); - level endon( "stop_suicide_trigger" ); - self thread clean_up_suicide_hud_on_end_game(); - self thread clean_up_suicide_hud_on_bled_out(); - while ( self usebuttonpressed() ) - { - wait 1; - } - if ( !isDefined( self.suicideprompt ) ) - { - return; - } - while ( 1 ) - { - wait 0.1; - if ( !isDefined( self.suicideprompt ) ) - { - continue; - } - self.suicideprompt settext( &"ZOMBIE_BUTTON_TO_SUICIDE" ); - if ( !self is_suiciding() ) - { - continue; - } - self.pre_suicide_weapon = self getcurrentweapon(); - self giveweapon( level.suicide_weapon ); - self switchtoweapon( level.suicide_weapon ); - duration = self docowardswayanims(); - suicide_success = suicide_do_suicide( duration ); - self.laststand = undefined; - self takeweapon( level.suicide_weapon ); - if ( suicide_success ) - { - self notify( "player_suicide" ); - wait_network_frame(); - self maps/mp/zombies/_zm_stats::increment_client_stat( "suicides" ); - self bleed_out(); - return; - } - self switchtoweapon( self.pre_suicide_weapon ); - self.pre_suicide_weapon = undefined; - } -} - -suicide_do_suicide( duration ) //checked matches cerberus output -{ - level endon( "end_game" ); - level endon( "stop_suicide_trigger" ); - suicidetime = duration; - timer = 0; - suicided = 0; - self.suicideprompt settext( "" ); - if ( !isDefined( self.suicideprogressbar ) ) - { - self.suicideprogressbar = self createprimaryprogressbar(); - } - if ( !isDefined( self.suicidetexthud ) ) - { - self.suicidetexthud = newclienthudelem( self ); - } - self.suicideprogressbar updatebar( 0.01, 1 / suicidetime ); - self.suicidetexthud.alignx = "center"; - self.suicidetexthud.aligny = "middle"; - self.suicidetexthud.horzalign = "center"; - self.suicidetexthud.vertalign = "bottom"; - self.suicidetexthud.y = -173; - if ( self issplitscreen() ) - { - self.suicidetexthud.y = -147; - } - self.suicidetexthud.foreground = 1; - self.suicidetexthud.font = "default"; - self.suicidetexthud.fontscale = 1.8; - self.suicidetexthud.alpha = 1; - self.suicidetexthud.color = ( 1, 1, 1 ); - self.suicidetexthud.hidewheninmenu = 1; - self.suicidetexthud settext( &"ZOMBIE_SUICIDING" ); - while ( self is_suiciding() ) - { - wait 0.05; - timer += 0.05; - if ( timer >= suicidetime ) - { - suicided = 1; - break; - } - } - if ( isDefined( self.suicideprogressbar ) ) - { - self.suicideprogressbar destroyelem(); - } - if ( isDefined( self.suicidetexthud ) ) - { - self.suicidetexthud destroy(); - } - if ( isDefined( self.suicideprompt ) ) - { - self.suicideprompt settext( &"ZOMBIE_BUTTON_TO_SUICIDE" ); - } - return suicided; -} - -can_suicide() //checked matches cerberus output -{ - if ( !isalive( self ) ) - { - return 0; - } - if ( !self player_is_in_laststand() ) - { - return 0; - } - if ( !isDefined( self.suicideprompt ) ) - { - return 0; - } - if ( is_true( self.is_zombie ) ) - { - return 0; - } - if ( is_true( level.intermission ) ) - { - return 0; - } - return 1; -} - -is_suiciding( revivee ) //checked changed at own discretion -{ - if ( self usebuttonpressed() && can_suicide() ) - { - return 1; - } - return 0; -} - -revive_trigger_spawn() //checked changed to match cerberus output -{ - if ( isDefined( level.revive_trigger_spawn_override_link ) ) - { - [[ level.revive_trigger_spawn_override_link ]]( self ); - } - else - { - radius = getDvarInt( "revive_trigger_radius" ); - self.revivetrigger = spawn( "trigger_radius", ( 0, 0, 0 ), 0, radius, radius ); - self.revivetrigger sethintstring( "" ); - self.revivetrigger setcursorhint( "HINT_NOICON" ); - self.revivetrigger setmovingplatformenabled( 1 ); - self.revivetrigger enablelinkto(); - self.revivetrigger.origin = self.origin; - self.revivetrigger linkto( self ); - self.revivetrigger.beingrevived = 0; - self.revivetrigger.createtime = getTime(); - } - self thread revive_trigger_think(); -} - -revive_trigger_think() //checked partially changed to match cerberus output //did not change while loop to for loop because of infinite loop continue bug -{ - self endon( "disconnect" ); - self endon( "zombified" ); - self endon( "stop_revive_trigger" ); - level endon( "end_game" ); - self endon( "death" ); - while ( 1 ) - { - wait 0.1; - self.revivetrigger sethintstring( "" ); - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - d = 0; - d = self depthinwater(); - if ( players[ i ] can_revive( self ) || d > 20 ) - { - self.revivetrigger setrevivehintstring( &"ZOMBIE_BUTTON_TO_REVIVE_PLAYER", self.team ); - break; - } - } - i = 0; - while ( i < players.size ) - { - reviver = players[ i ]; - if ( self == reviver || !reviver is_reviving( self ) ) - { - i++; - continue; - } - gun = reviver getcurrentweapon(); - /* -/# - assert( isDefined( gun ) ); -#/ - */ - if ( gun == level.revive_tool ) - { - i++; - continue; - } - reviver giveweapon( level.revive_tool ); - reviver switchtoweapon( level.revive_tool ); - reviver setweaponammostock( level.revive_tool, 1 ); - revive_success = reviver revive_do_revive( self, gun ); - reviver revive_give_back_weapons( gun ); - if ( isplayer( self ) ) - { - self allowjump( 1 ); - } - self.laststand = undefined; - if ( revive_success ) - { - if ( isplayer( self ) ) - { - maps/mp/zombies/_zm_chugabud::player_revived_cleanup_chugabud_corpse(); - } - self thread revive_success( reviver ); - self cleanup_suicide_hud(); - return; - } - i++; - } - } -} - -revive_give_back_weapons( gun ) //checked matches cerberus output -{ - self takeweapon( level.revive_tool ); - if ( self player_is_in_laststand() ) - { - return; - } - if ( gun != "none" && !is_placeable_mine( gun ) && gun != "equip_gasmask_zm" && gun != "lower_equip_gasmask_zm" && self hasweapon( gun ) ) - { - self switchtoweapon( gun ); - } - else - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - } -} - -can_revive( revivee ) //checked changed to match cerberus output -{ - if ( !isDefined( revivee.revivetrigger ) ) - { - return 0; - } - if ( !isalive( self ) ) - { - return 0; - } - if ( self player_is_in_laststand() ) - { - return 0; - } - if ( self.team != revivee.team ) - { - return 0; - } - if ( is_true( self.is_zombie ) ) - { - return 0; - } - if ( self has_powerup_weapon() ) - { - return 0; - } - if ( is_true( level.can_revive_use_depthinwater_test ) && revivee depthinwater() > 10 ) - { - return 1; - } - if ( isDefined( level.can_revive ) && ![[ level.can_revive ]]( revivee ) ) - { - return 0; - } - if ( isDefined( level.can_revive_game_module ) && ![[ level.can_revive_game_module ]]( revivee ) ) - { - return 0; - } - ignore_sight_checks = 0; - ignore_touch_checks = 0; - if ( isDefined( level.revive_trigger_should_ignore_sight_checks ) ) - { - ignore_sight_checks = [[ level.revive_trigger_should_ignore_sight_checks ]]( self ); - if ( ignore_sight_checks && isDefined( revivee.revivetrigger.beingrevived ) && revivee.revivetrigger.beingrevived == 1 ) - { - ignore_touch_checks = 1; - } - } - if ( !ignore_touch_checks ) - { - if ( !self istouching( revivee.revivetrigger ) ) - { - return 0; - } - } - if ( !ignore_sight_checks ) - { - if ( !self is_facing( revivee ) ) - { - return 0; - } - if ( !sighttracepassed( self.origin + vectorScale( ( 0, 0, 1 ), 50 ), revivee.origin + vectorScale( ( 0, 0, 1 ), 30 ), 0, undefined ) ) - { - return 0; - } - if ( !bullettracepassed( self.origin + vectorScale( ( 0, 0, 1 ), 50 ), revivee.origin + vectorScale( ( 0, 0, 1 ), 30 ), 0, undefined ) ) - { - return 0; - } - } - return 1; -} - -is_reviving( revivee ) //checked changed at own discretion -{ - if ( self usebuttonpressed() && can_revive( revivee ) ) - { - return 1; - } - return 0; -} - -is_reviving_any() //checked changed at own discretion -{ - if ( is_true( self.is_reviving_any ) ) - { - return 1; - } - return 0; -} - -is_facing( facee ) //checked matches cerberus output -{ - orientation = self getplayerangles(); - forwardvec = anglesToForward( orientation ); - forwardvec2d = ( forwardvec[ 0 ], forwardvec[ 1 ], 0 ); - unitforwardvec2d = vectornormalize( forwardvec2d ); - tofaceevec = facee.origin - self.origin; - tofaceevec2d = ( tofaceevec[ 0 ], tofaceevec[ 1 ], 0 ); - unittofaceevec2d = vectornormalize( tofaceevec2d ); - dotproduct = vectordot( unitforwardvec2d, unittofaceevec2d ); - return dotproduct > 0.9; -} - -revive_do_revive( playerbeingrevived, revivergun ) //checked changed to match cerberus output -{ - /* -/# - assert( self is_reviving( playerbeingrevived ) ); -#/ - */ - revivetime = 3; - if ( self hasperk( "specialty_quickrevive" ) ) - { - revivetime /= 2; - } - if ( self maps/mp/zombies/_zm_pers_upgrades_functions::pers_revive_active() ) - { - revivetime *= 0.5; - } - timer = 0; - revived = 0; - playerbeingrevived.revivetrigger.beingrevived = 1; - playerbeingrevived.revive_hud settext( &"ZOMBIE_PLAYER_IS_REVIVING_YOU", self ); - playerbeingrevived revive_hud_show_n_fade( 3 ); - playerbeingrevived.revivetrigger sethintstring( "" ); - if ( isplayer( playerbeingrevived ) ) - { - playerbeingrevived startrevive( self ); - } - if ( !isDefined( self.reviveprogressbar ) ) - { - self.reviveprogressbar = self createprimaryprogressbar(); - } - if ( !isDefined( self.revivetexthud ) ) - { - self.revivetexthud = newclienthudelem( self ); - } - self thread laststand_clean_up_on_disconnect( playerbeingrevived, revivergun ); - if ( !isDefined( self.is_reviving_any ) ) - { - self.is_reviving_any = 0; - } - self.is_reviving_any++; - self thread laststand_clean_up_reviving_any( playerbeingrevived ); - self.reviveprogressbar updatebar( 0.01, 1 / revivetime ); - self.revivetexthud.alignx = "center"; - self.revivetexthud.aligny = "middle"; - self.revivetexthud.horzalign = "center"; - self.revivetexthud.vertalign = "bottom"; - self.revivetexthud.y = -113; - if ( self issplitscreen() ) - { - self.revivetexthud.y = -347; - } - self.revivetexthud.foreground = 1; - self.revivetexthud.font = "default"; - self.revivetexthud.fontscale = 1.8; - self.revivetexthud.alpha = 1; - self.revivetexthud.color = ( 1, 1, 1 ); - self.revivetexthud.hidewheninmenu = 1; - if ( self maps/mp/zombies/_zm_pers_upgrades_functions::pers_revive_active() ) - { - self.revivetexthud.color = ( 0.5, 0.5, 1 ); - } - self.revivetexthud settext( &"ZOMBIE_REVIVING" ); - self thread check_for_failed_revive( playerbeingrevived ); - while ( self is_reviving( playerbeingrevived ) ) - { - wait 0.05; - timer += 0.05; - if ( self player_is_in_laststand() ) - { - break; - } - else if ( isDefined( playerbeingrevived.revivetrigger.auto_revive ) && playerbeingrevived.revivetrigger.auto_revive == 1 ) - { - break; - } - if ( timer >= revivetime ) - { - revived = 1; - break; - } - } - if ( isDefined( self.reviveprogressbar ) ) - { - self.reviveprogressbar destroyelem(); - } - if ( isDefined( self.revivetexthud ) ) - { - self.revivetexthud destroy(); - } - if ( isDefined( playerbeingrevived.revivetrigger.auto_revive ) && playerbeingrevived.revivetrigger.auto_revive == 1 ) - { - } - else if ( !revived ) - { - if ( isplayer( playerbeingrevived ) ) - { - playerbeingrevived stoprevive( self ); - } - } - playerbeingrevived.revivetrigger sethintstring( &"ZOMBIE_BUTTON_TO_REVIVE_PLAYER" ); - playerbeingrevived.revivetrigger.beingrevived = 0; - self notify( "do_revive_ended_normally" ); - self.is_reviving_any--; - - if ( !revived ) - { - playerbeingrevived thread checkforbleedout( self ); - } - return revived; -} - -checkforbleedout( player ) //checked matches cerberus output -{ - self endon( "player_revived" ); - self endon( "player_suicide" ); - self endon( "disconnect" ); - player endon( "disconnect" ); - if ( is_classic() ) - { - player.failed_revives++; - player notify( "player_failed_revive" ); - } -} - -auto_revive( reviver, dont_enable_weapons ) //checked changed to match cerberus output -{ - if ( isDefined( self.revivetrigger ) ) - { - self.revivetrigger.auto_revive = 1; - while ( self.revivetrigger.beingrevived == 1 ) - { - while ( 1 ) - { - if ( self.revivetrigger.beingrevived == 0 ) - { - break; - } - wait_network_frame(); - } - } - self.revivetrigger.auto_trigger = 0; - } - self reviveplayer(); - self maps/mp/zombies/_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); - setclientsysstate( "lsm", "0", self ); - self notify( "stop_revive_trigger" ); - if ( isDefined( self.revivetrigger ) ) - { - self.revivetrigger delete(); - self.revivetrigger = undefined; - } - self cleanup_suicide_hud(); - if ( !isDefined( dont_enable_weapons ) || dont_enable_weapons == 0 ) - { - self laststand_enable_player_weapons(); - } - self allowjump( 1 ); - self.ignoreme = 0; - self.laststand = undefined; - if ( !is_true( level.isresetting_grief ) ) - { - reviver.revives++; - reviver maps/mp/zombies/_zm_stats::increment_client_stat( "revives" ); - reviver maps/mp/zombies/_zm_stats::increment_player_stat( "revives" ); - self recordplayerrevivezombies( reviver ); - maps/mp/_demo::bookmark( "zm_player_revived", getTime(), self, reviver ); - } - self notify( "player_revived" ); -} - -remote_revive( reviver ) //checked matches cerberus output -{ - if ( !self player_is_in_laststand() ) - { - return; - } - self auto_revive( reviver ); -} - -revive_success( reviver, b_track_stats ) //checked changed to match cerberus output -{ - if ( !isDefined( b_track_stats ) ) - { - b_track_stats = 1; - } - if ( !isplayer( self ) ) - { - self notify( "player_revived", reviver ); - return; - } - if ( is_true( b_track_stats ) ) - { - maps/mp/_demo::bookmark( "zm_player_revived", getTime(), self, reviver ); - } - self notify( "player_revived", reviver ); - self reviveplayer(); - self maps/mp/zombies/_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); - if ( is_true( self.pers_upgrades_awarded[ "perk_lose" ] ) ) - { - self thread maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_perk_lose_restore(); - } - if ( !is_true( level.isresetting_grief ) && is_true( b_track_stats ) ) - { - reviver.revives++; - reviver maps/mp/zombies/_zm_stats::increment_client_stat( "revives" ); - reviver maps/mp/zombies/_zm_stats::increment_player_stat( "revives" ); - self recordplayerrevivezombies( reviver ); - reviver.upgrade_fx_origin = self.origin; - } - if ( is_classic() && is_true( b_track_stats ) ) - { - maps/mp/zombies/_zm_pers_upgrades_functions::pers_increment_revive_stat( reviver ); - } - if ( is_true( b_track_stats ) ) - { - reviver thread check_for_sacrifice(); - } - setclientsysstate( "lsm", "0", self ); - self.revivetrigger delete(); - self.revivetrigger = undefined; - self cleanup_suicide_hud(); - self laststand_enable_player_weapons(); - self.ignoreme = 0; -} - -revive_force_revive( reviver ) //checked matches cerberus output -{ - /* -/# - assert( isDefined( self ) ); -#/ -/# - assert( isplayer( self ) ); -#/ -/# - assert( self player_is_in_laststand() ); -#/ - */ - self thread revive_success( reviver ); -} - -revive_hud_create() //checked matches cerberus output -{ - self.revive_hud = newclienthudelem( self ); - self.revive_hud.alignx = "center"; - self.revive_hud.aligny = "middle"; - self.revive_hud.horzalign = "center"; - self.revive_hud.vertalign = "bottom"; - self.revive_hud.foreground = 1; - self.revive_hud.font = "default"; - self.revive_hud.fontscale = 1.5; - self.revive_hud.alpha = 0; - self.revive_hud.color = ( 1, 1, 1 ); - self.revive_hud.hidewheninmenu = 1; - self.revive_hud settext( "" ); - self.revive_hud.y = -160; -} - -revive_hud_think() //checked partially changed to match cerberus output //did not change while loops to for loops to prevent infinite loop bug due to continue -{ - self endon( "disconnect" ); - while ( 1 ) - { - wait 0.1; - if ( !player_any_player_in_laststand() ) - { - continue; - } - players = get_players(); - playertorevive = undefined; - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ].revivetrigger ) || !isDefined( players[ i ].revivetrigger.createtime ) ) - { - i++; - continue; - } - if ( !isDefined( playertorevive ) || playertorevive.revivetrigger.createtime > players[ i ].revivetrigger.createtime ) - { - playertorevive = players[ i ]; - } - i++; - } - if ( isDefined( playertorevive ) ) - { - i = 0; - while ( i < players.size ) - { - if ( players[ i ] player_is_in_laststand() ) - { - i++; - continue; - } - if ( getDvar( "g_gametype" ) == "vs" ) - { - if ( players[ i ].team != playertorevive.team ) - { - i++; - continue; - } - } - if ( is_encounter() ) - { - if ( players[ i ].sessionteam != playertorevive.sessionteam ) - { - i++; - continue; - } - if ( is_true( level.hide_revive_message ) ) - { - i++; - continue; - } - } - players[ i ] thread faderevivemessageover( playertorevive, 3 ); - i++; - } - playertorevive.revivetrigger.createtime = undefined; - wait 3.5; - } - } -} - -faderevivemessageover( playertorevive, time ) //checked matches cerberus output -{ - revive_hud_show(); - self.revive_hud settext( &"ZOMBIE_PLAYER_NEEDS_TO_BE_REVIVED", playertorevive ); - self.revive_hud fadeovertime( time ); - self.revive_hud.alpha = 0; -} - -revive_hud_show() //checked matches cerberus output -{ - /* -/# - assert( isDefined( self ) ); -#/ -/# - assert( isDefined( self.revive_hud ) ); -#/ - */ - self.revive_hud.alpha = 1; -} - -revive_hud_show_n_fade( time ) //checked matches cerberus output -{ - revive_hud_show(); - self.revive_hud fadeovertime( time ); - self.revive_hud.alpha = 0; -} - -drawcylinder( pos, rad, height ) //checked matches cerberus output //may need to review order of operations -{ - /* -/# - currad = rad; - curheight = height; - r = 0; - while ( r < 20 ) - { - theta = ( r / 20 ) * 360; - theta2 = ( ( r + 1 ) / 20 ) * 360; - line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, 0 ) ); - line( pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, curheight ) ); - line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ) ); - r++; -#/ - } - */ -} - -get_lives_remaining() //checked matches cerberus output -{ - /* -/# - assert( level.laststandgetupallowed, "Lives only exist in the Laststand type GETUP." ); -#/ - */ - if ( level.laststandgetupallowed && isDefined( self.laststand_info ) && isDefined( self.laststand_info.type_getup_lives ) ) - { - return max( 0, self.laststand_info.type_getup_lives ); - } - return 0; -} - -update_lives_remaining( increment ) //checked changed to match cerberus output //probably causes a crash since ternary operators may not be supported by the current compiler -{ - /* -/# - assert( level.laststandgetupallowed, "Lives only exist in the Laststand type GETUP." ); -#/ -/# - assert( isDefined( increment ), "Must specify increment true or false" ); -#/ - */ - increment = (isdefined( increment )?increment:false ); - self.laststand_info.type_getup_lives = max( 0, ( increment?self.laststand_info.type_getup_lives + 1:self.laststand_info.type_getup_lives - 1 ) ); - self notify( "laststand_lives_updated", self.laststand_info.type_getup_lives + 1, increment ); -} - -player_getup_setup() //checked matches cerberus output -{ - /* -/# - println( "ZM >> player_getup_setup called" ); -#/ - */ - self.laststand_info = spawnstruct(); - self.laststand_info.type_getup_lives = level.const_laststand_getup_count_start; -} - -laststand_getup() //checked matches cerberus output -{ - self endon( "player_revived" ); - self endon( "disconnect" ); - /* -/# - println( "ZM >> laststand_getup called" ); -#/ - */ - self update_lives_remaining( 0 ); - setclientsysstate( "lsm", "1", self ); - self.laststand_info.getup_bar_value = level.const_laststand_getup_bar_start; - self thread laststand_getup_hud(); - self thread laststand_getup_damage_watcher(); - while ( self.laststand_info.getup_bar_value < 1 ) - { - self.laststand_info.getup_bar_value += level.const_laststand_getup_bar_regen; - wait 0.05; - } - self auto_revive( self ); - setclientsysstate( "lsm", "0", self ); -} - -laststand_getup_damage_watcher() //checked matches cerberus output -{ - self endon( "player_revived" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "damage" ); - self.laststand_info.getup_bar_value -= level.const_laststand_getup_bar_damage; - if ( self.laststand_info.getup_bar_value < 0 ) - { - self.laststand_info.getup_bar_value = 0; - } - } -} - -laststand_getup_hud() //checked matches cerberus output -{ - self endon( "player_revived" ); - self endon( "disconnect" ); - hudelem = newclienthudelem( self ); - hudelem.alignx = "left"; - hudelem.aligny = "middle"; - hudelem.horzalign = "left"; - hudelem.vertalign = "middle"; - hudelem.x = 5; - hudelem.y = 170; - hudelem.font = "big"; - hudelem.fontscale = 1.5; - hudelem.foreground = 1; - hudelem.hidewheninmenu = 1; - hudelem.hidewhendead = 1; - hudelem.sort = 2; - hudelem.label = &"SO_WAR_LASTSTAND_GETUP_BAR"; - self thread laststand_getup_hud_destroy( hudelem ); - while ( 1 ) - { - hudelem setvalue( self.laststand_info.getup_bar_value ); - wait 0.05; - } -} - -laststand_getup_hud_destroy( hudelem ) //checked matches cerberus output -{ - self waittill_either( "player_revived", "disconnect" ); - hudelem destroy(); -} - -check_for_sacrifice() //checked matches cerberus output -{ - self delay_notify( "sacrifice_denied", 1 ); - self endon( "sacrifice_denied" ); - self waittill( "player_downed" ); - self maps/mp/zombies/_zm_stats::increment_client_stat( "sacrifices" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "sacrifices" ); -} - -check_for_failed_revive( playerbeingrevived ) //checked matches cerberus output -{ - self endon( "disconnect" ); - playerbeingrevived endon( "disconnect" ); - playerbeingrevived endon( "player_suicide" ); - self notify( "checking_for_failed_revive" ); - self endon( "checking_for_failed_revive" ); - playerbeingrevived endon( "player_revived" ); - playerbeingrevived waittill( "bled_out" ); - self maps/mp/zombies/_zm_stats::increment_client_stat( "failed_revives" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "failed_revives" ); -} - -add_weighted_down() //checked matches cerberus output -{ - if ( !level.curr_gametype_affects_rank ) - { - return; - } - weighted_down = 1000; - if ( level.round_number > 0 ) - { - weighted_down = int( 1000 / ceil( level.round_number / 5 ) ); - } - self addplayerstat( "weighted_downs", weighted_down ); -} - -cleanup_laststand_on_disconnect() //checked matches cerberus output -{ - self endon( "player_revived" ); - self endon( "player_suicide" ); - self endon( "bled_out" ); - trig = self.revivetrigger; - self waittill( "disconnect" ); - if ( isDefined( trig ) ) - { - trig delete(); - } -} - - - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_magicbox.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_magicbox.gsc deleted file mode 100644 index ce8b15c..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_magicbox.gsc +++ /dev/null @@ -1,1620 +0,0 @@ -#include maps/mp/zombies/_zm_stats; -#include maps/mp/_demo; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_pers_upgrades_functions; -#include maps/mp/zombies/_zm_audio_announcer; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; -#include maps/mp/zombies/_zm_magicbox_lock; - -init() //checked matches cerberus output -{ - if ( !isDefined( level.chest_joker_model ) ) - { - level.chest_joker_model = "zombie_teddybear"; - precachemodel( level.chest_joker_model ); - } - - if ( !isDefined( level.magic_box_zbarrier_state_func ) ) - { - level.magic_box_zbarrier_state_func = ::process_magic_box_zbarrier_state; - } - if ( is_true( level.using_locked_magicbox ) ) - { - maps/mp/zombies/_zm_magicbox_lock::init(); - } - if ( is_classic() ) - { - level.chests = getstructarray( "treasure_chest_use", "targetname" ); - treasure_chest_init( "start_chest" ); - } - if ( level.createfx_enabled ) - { - return; - } - registerclientfield( "zbarrier", "magicbox_glow", 1000, 1, "int" ); - registerclientfield( "zbarrier", "zbarrier_show_sounds", 9000, 1, "int" ); - registerclientfield( "zbarrier", "zbarrier_leave_sounds", 9000, 1, "int" ); - if ( !isDefined( level.magic_box_check_equipment ) ) - { - level.magic_box_check_equipment = ::default_magic_box_check_equipment; - } - level thread magicbox_host_migration(); -} - -treasure_chest_init( start_chest_name ) //checked changed to match cerberus output -{ - flag_init( "moving_chest_enabled" ); - flag_init( "moving_chest_now" ); - flag_init( "chest_has_been_used" ); - level.chest_moves = 0; - level.chest_level = 0; - if ( level.chests.size == 0 ) - { - return; - } - for ( i = 0; i < level.chests.size; i++ ) - { - level.chests[ i ].box_hacks = []; - level.chests[ i ].orig_origin = level.chests[ i ].origin; - level.chests[ i ] get_chest_pieces(); - if ( isDefined( level.chests[ i ].zombie_cost ) ) - { - level.chests[ i ].old_cost = level.chests[ i ].zombie_cost; - } - else - { - level.chests[ i ].old_cost = 950; - } - } - if ( !level.enable_magic ) - { - foreach( chest in level.chests ) - { - chest hide_chest(); - } - return; - } - level.chest_accessed = 0; - if ( level.chests.size > 1 ) - { - flag_set( "moving_chest_enabled" ); - level.chests = array_randomize( level.chests ); - } - else - { - level.chest_index = 0; - level.chests[ 0 ].no_fly_away = 1; - } - init_starting_chest_location( start_chest_name ); - array_thread( level.chests, ::treasure_chest_think ); -} - -init_starting_chest_location( start_chest_name ) //checked changed to match cerberus output -{ - level.chest_index = 0; - start_chest_found = 0; - if ( level.chests.size == 1 ) - { - start_chest_found = 1; - if ( isdefined( level.chests[ level.chest_index ].zbarrier ) ) - { - level.chests[ level.chest_index ].zbarrier set_magic_box_zbarrier_state( "initial" ); - } - } - else - { - for ( i = 0; i < level.chests.size; i++ ) - { - if ( isdefined( level.random_pandora_box_start ) && level.random_pandora_box_start == 1 ) - { - if ( start_chest_found || isdefined( level.chests[ i ].start_exclude ) && level.chests[ i ].start_exclude == 1 ) - { - level.chests[ i ] hide_chest(); - } - else - { - level.chest_index = i; - level.chests[ level.chest_index].hidden = 0; - if ( isdefined( level.chests[ level.chest_index ].zbarrier ) ) - { - level.chests[ level.chest_index ].zbarrier set_magic_box_zbarrier_state( "initial" ); - } - start_chest_found = 1; - } - } - else - { - if ( start_chest_found || !isdefined(level.chests[ i ].script_noteworthy) || !issubstr( level.chests[ i ].script_noteworthy, start_chest_name ) ) - { - level.chests[ i ] hide_chest(); - } - else - { - level.chest_index = i; - level.chests[ level.chest_index ].hidden = 0; - if ( isdefined( level.chests[ level.chest_index ].zbarrier ) ) - { - level.chests[ level.chest_index ].zbarrier set_magic_box_zbarrier_state( "initial" ); - } - start_chest_found = 1; - } - } - } - } - if ( !isdefined( level.pandora_show_func ) ) - { - level.pandora_show_func = ::default_pandora_show_func; - } - level.chests[ level.chest_index ] thread [[ level.pandora_show_func ]](); -} - -set_treasure_chest_cost( cost ) //checked matches cerberus output -{ - level.zombie_treasure_chest_cost = cost; -} - -get_chest_pieces() //checked changed to match cerberus output -{ - self.chest_box = getent( self.script_noteworthy + "_zbarrier", "script_noteworthy" ); - self.chest_rubble = []; - rubble = getentarray( self.script_noteworthy + "_rubble", "script_noteworthy" ); - for ( i = 0; i < rubble.size; i++ ) - { - if ( distancesquared( self.origin, rubble[ i ].origin ) < 10000 ) - { - self.chest_rubble[ self.chest_rubble.size ] = rubble[ i ]; - } - } - self.zbarrier = getent( self.script_noteworthy + "_zbarrier", "script_noteworthy" ); - if ( isDefined( self.zbarrier ) ) - { - self.zbarrier zbarrierpieceuseboxriselogic( 3 ); - self.zbarrier zbarrierpieceuseboxriselogic( 4 ); - } - self.unitrigger_stub = spawnstruct(); - self.unitrigger_stub.origin = self.origin + ( anglesToRight( self.angles ) * -22.5 ); - self.unitrigger_stub.angles = self.angles; - self.unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - self.unitrigger_stub.script_width = 104; - self.unitrigger_stub.script_height = 50; - self.unitrigger_stub.script_length = 45; - self.unitrigger_stub.trigger_target = self; - unitrigger_force_per_player_triggers( self.unitrigger_stub, 1 ); - self.unitrigger_stub.prompt_and_visibility_func = ::boxtrigger_update_prompt; - self.zbarrier.owner = self; -} - -boxtrigger_update_prompt( player ) //checked matches cerberus output -{ - can_use = self boxstub_update_prompt( player ); - if ( isDefined( self.hint_string ) ) - { - if ( isDefined( self.hint_parm1 ) ) - { - self sethintstring( self.hint_string, self.hint_parm1 ); - } - else - { - self sethintstring( self.hint_string ); - } - } - return can_use; -} - -boxstub_update_prompt( player ) //checked matches cerberus output -{ - self setcursorhint( "HINT_NOICON" ); - if ( !self trigger_visible_to_player( player ) ) - { - return 0; - } - self.hint_parm1 = undefined; - if ( is_true( self.stub.trigger_target.grab_weapon_hint ) ) - { - if ( isDefined( level.magic_box_check_equipment ) && [[ level.magic_box_check_equipment ]]( self.stub.trigger_target.grab_weapon_name ) ) - { - self.hint_string = &"ZOMBIE_TRADE_EQUIP"; - } - else - { - self.hint_string = &"ZOMBIE_TRADE_WEAPON"; - } - } - else if ( is_true( level.using_locked_magicbox ) && is_true( self.stub.trigger_target.is_locked ) ) - { - self.hint_string = get_hint_string( self, "locked_magic_box_cost" ); - } - else - { - self.hint_parm1 = self.stub.trigger_target.zombie_cost; - self.hint_string = get_hint_string( self, "default_treasure_chest" ); - } - return 1; -} - -default_magic_box_check_equipment( weapon ) //checked matches cerberus output -{ - return is_offhand_weapon( weapon ); -} - -trigger_visible_to_player( player ) //checked changed to match cerberus output -{ - self setinvisibletoplayer( player ); - visible = 1; - if ( isDefined( self.stub.trigger_target.chest_user ) && !isDefined( self.stub.trigger_target.box_rerespun ) ) - { - if ( player != self.stub.trigger_target.chest_user || is_placeable_mine( self.stub.trigger_target.chest_user getcurrentweapon() ) || self.stub.trigger_target.chest_user hacker_active() ) - { - visible = 0; - } - } - else if ( !player can_buy_weapon() ) - { - visible = 0; - } - if ( !visible ) - { - return 0; - } - self setvisibletoplayer( player ); - return 1; -} - -magicbox_unitrigger_think() //checked changed to match cerberus output -{ - self endon( "kill_trigger" ); - while ( 1 ) - { - self waittill( "trigger", player ); - self.stub.trigger_target notify( "trigger", player ); - } -} - -play_crazi_sound() //checked matches cerberus output -{ - self playlocalsound( level.zmb_laugh_alias ); -} - -show_chest_sound_thread() //checked matches cerberus output -{ - self.zbarrier setclientfield( "zbarrier_show_sounds", 1 ); - wait 1; - self.zbarrier setclientfield( "zbarrier_show_sounds", 0 ); -} - -show_chest() //checked matches cerberus output -{ - self.zbarrier set_magic_box_zbarrier_state( "arriving" ); - self.zbarrier waittill( "arrived" ); - self thread [[ level.pandora_show_func ]](); - thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think ); - self thread show_chest_sound_thread(); - self.hidden = 0; - if ( isDefined( self.box_hacks[ "summon_box" ] ) ) - { - self [[ self.box_hacks[ "summon_box" ] ]]( 0 ); - } -} - -hide_chest_sound_thread() //checked matches cerberus output -{ - self.zbarrier setclientfield( "zbarrier_leave_sounds", 1 ); - wait 1; - self.zbarrier setclientfield( "zbarrier_leave_sounds", 0 ); -} - -hide_chest( doboxleave ) //checked matches cerberus output -{ - if ( isDefined( self.unitrigger_stub ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); - } - if ( isDefined( self.pandora_light ) ) - { - self.pandora_light delete(); - } - self.hidden = 1; - if ( isDefined( self.box_hacks ) && isDefined( self.box_hacks[ "summon_box" ] ) ) - { - self [[ self.box_hacks[ "summon_box" ] ]]( 1 ); - } - if ( isDefined( self.zbarrier ) ) - { - if ( is_true( doboxleave ) ) - { - self thread hide_chest_sound_thread(); - level thread leaderdialog( "boxmove" ); - self.zbarrier thread magic_box_zbarrier_leave(); - self.zbarrier waittill( "left" ); - playfx( level._effect[ "poltergeist" ], self.zbarrier.origin, anglesToUp( self.angles ), anglesToForward( self.angles ) ); - playsoundatposition( "zmb_box_poof", self.zbarrier.origin ); - return; - } - else - { - self.zbarrier thread set_magic_box_zbarrier_state( "away" ); - } - } -} - -magic_box_zbarrier_leave() //checked matches cerberus output -{ - self set_magic_box_zbarrier_state( "leaving" ); - self waittill( "left" ); - self set_magic_box_zbarrier_state( "away" ); -} - -default_pandora_fx_func() //checked partially changed to match cerberus output -{ - self endon( "death" ); - self.pandora_light = spawn( "script_model", self.zbarrier.origin ); - self.pandora_light.angles = self.zbarrier.angles + vectorScale( ( -1, 0, -1 ), 90 ); - self.pandora_light setmodel( "tag_origin" ); - if ( !is_true( level._box_initialized ) ) - { - flag_wait( "start_zombie_round_logic" ); - level._box_initialized = 1; - } - wait 1; - if ( isDefined( self ) && isDefined( self.pandora_light ) ) - { - playfxontag( level._effect[ "lght_marker" ], self.pandora_light, "tag_origin" ); - } -} - -default_pandora_show_func( anchor, anchortarget, pieces ) //checked matches cerberus output -{ - if ( !isDefined( self.pandora_light ) ) - { - if ( !isDefined( level.pandora_fx_func ) ) - { - level.pandora_fx_func = ::default_pandora_fx_func; - } - self thread [[ level.pandora_fx_func ]](); - } - playfx( level._effect[ "lght_marker_flare" ], self.pandora_light.origin ); -} - -unregister_unitrigger_on_kill_think() //checked matches cerberus output -{ - self notify( "unregister_unitrigger_on_kill_think" ); - self endon( "unregister_unitrigger_on_kill_think" ); - self waittill( "kill_chest_think" ); - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); -} - -treasure_chest_think() //checked changed to match cerberus output -{ - self endon( "kill_chest_think" ); - user = undefined; - user_cost = undefined; - self.box_rerespun = undefined; - self.weapon_out = undefined; - - self thread unregister_unitrigger_on_kill_think(); - while ( 1 ) - { - if ( !isdefined( self.forced_user ) ) - { - self waittill( "trigger", user ); - if ( user == level ) - { - wait 0.1; - continue; - } - } - else - { - user = self.forced_user; - } - if ( user in_revive_trigger() ) - { - wait 0.1; - continue; - } - if ( user.is_drinking > 0 ) - { - wait 0.1; - continue; - } - if ( is_true( self.disabled ) ) - { - wait 0.1; - continue; - } - if ( user getcurrentweapon() == "none" ) - { - wait 0.1; - continue; - } - reduced_cost = undefined; - if ( is_player_valid( user ) && user maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() ) - { - reduced_cost = int( self.zombie_cost / 2 ); - } - if ( is_true( level.using_locked_magicbox ) && is_true( self.is_locked ) ) - { - if ( user.score >= level.locked_magic_box_cost ) - { - user maps/mp/zombies/_zm_score::minus_to_player_score( level.locked_magic_box_cost ); - self.zbarrier set_magic_box_zbarrier_state( "unlocking" ); - self.unitrigger_stub run_visibility_function_for_all_triggers(); - } - else - { - user maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_box" ); - } - wait 0.1 ; - continue; - } - else if ( isdefined( self.auto_open ) && is_player_valid( user ) ) - { - if ( !isdefined( self.no_charge ) ) - { - user maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost ); - user_cost = self.zombie_cost; - } - else - { - user_cost = 0; - } - self.chest_user = user; - break; - } - else if ( is_player_valid( user ) && user.score >= self.zombie_cost ) - { - user maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost ); - user_cost = self.zombie_cost; - self.chest_user = user; - break; - } - else if ( isdefined( reduced_cost ) && user.score >= reduced_cost ) - { - user maps/mp/zombies/_zm_score::minus_to_player_score( reduced_cost ); - user_cost = reduced_cost; - self.chest_user = user; - break; - } - else if ( user.score < self.zombie_cost ) - { - play_sound_at_pos( "no_purchase", self.origin ); - user maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_box" ); - wait 0.1; - continue; - } - wait 0.05; - } - flag_set( "chest_has_been_used" ); - maps/mp/_demo::bookmark( "zm_player_use_magicbox", getTime(), user ); - user maps/mp/zombies/_zm_stats::increment_client_stat( "use_magicbox" ); - user maps/mp/zombies/_zm_stats::increment_player_stat( "use_magicbox" ); - if ( isDefined( level._magic_box_used_vo ) ) - { - user thread [[ level._magic_box_used_vo ]](); - } - self thread watch_for_emp_close(); - if ( is_true( level.using_locked_magicbox ) ) - { - self thread maps/mp/zombies/_zm_magicbox_lock::watch_for_lock(); - } - self._box_open = 1; - self._box_opened_by_fire_sale = 0; - if ( is_true( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) && !isDefined( self.auto_open ) && self [[ level._zombiemode_check_firesale_loc_valid_func ]]() ) - { - self._box_opened_by_fire_sale = 1; - } - if ( isDefined( self.chest_lid ) ) - { - self.chest_lid thread treasure_chest_lid_open(); - } - if ( isDefined( self.zbarrier ) ) - { - play_sound_at_pos( "open_chest", self.origin ); - play_sound_at_pos( "music_chest", self.origin ); - self.zbarrier set_magic_box_zbarrier_state( "open" ); - } - self.timedout = 0; - self.weapon_out = 1; - self.zbarrier thread treasure_chest_weapon_spawn( self, user ); - self.zbarrier thread treasure_chest_glowfx(); - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); - self.zbarrier waittill_any( "randomization_done", "box_hacked_respin" ); - if ( flag( "moving_chest_now" ) && !self._box_opened_by_fire_sale && isDefined( user_cost ) ) - { - user maps/mp/zombies/_zm_score::add_to_player_score( user_cost, 0 ); - } - if ( flag( "moving_chest_now" ) && !level.zombie_vars[ "zombie_powerup_fire_sale_on" ] && !self._box_opened_by_fire_sale ) - { - self thread treasure_chest_move( self.chest_user ); - } - else - { - self.grab_weapon_hint = 1; - self.grab_weapon_name = self.zbarrier.weapon_string; - self.chest_user = user; - thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think ); - if ( isDefined( self.zbarrier ) && !is_true( self.zbarrier.closed_by_emp ) ) - { - self thread treasure_chest_timeout(); - } - while ( !is_true( self.closed_by_emp ) ) - { - self waittill( "trigger", grabber ); - self.weapon_out = undefined; - if ( is_true( level.magic_box_grab_by_anyone ) ) - { - if ( isplayer( grabber ) ) - { - user = grabber; - } - } - if ( is_true( level.pers_upgrade_box_weapon ) ) - { - self maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_box_weapon_used( user, grabber ); - } - if ( isDefined( grabber.is_drinking ) && grabber.is_drinking > 0 ) - { - wait 0.1; - continue; - } - if ( grabber == user && user getcurrentweapon() == "none" ) - { - wait 0.1; - continue; - } - if ( grabber != level && is_true( self.box_rerespun ) ) - { - user = grabber; - } - if ( grabber == user || grabber == level ) - { - self.box_rerespun = undefined; - current_weapon = "none"; - if ( is_player_valid( user ) ) - { - current_weapon = user getcurrentweapon(); - } - if ( grabber == user && is_player_valid( user ) && !user.is_drinking && !is_placeable_mine( current_weapon ) && !is_equipment( current_weapon ) && level.revive_tool != current_weapon ) - { - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", user.name, user.score, level.round_number, self.zombie_cost, self.zbarrier.weapon_string, self.origin, "magic_accept" ); - self notify( "user_grabbed_weapon" ); - user notify( "user_grabbed_weapon" ); - user thread treasure_chest_give_weapon( self.zbarrier.weapon_string ); - maps/mp/_demo::bookmark( "zm_player_grabbed_magicbox", getTime(), user ); - user maps/mp/zombies/_zm_stats::increment_client_stat( "grabbed_from_magicbox" ); - user maps/mp/zombies/_zm_stats::increment_player_stat( "grabbed_from_magicbox" ); - break; - } - else if ( grabber == level ) - { - unacquire_weapon_toggle( self.zbarrier.weapon_string ); - self.timedout = 1; - if ( is_player_valid( user ) ) - { - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %S", user.name, user.score, level.round_number, self.zombie_cost, self.zbarrier.weapon_string, self.origin, "magic_reject" ); - } - break; - } - } - wait 0.05; - } - self.grab_weapon_hint = 0; - self.zbarrier notify( "weapon_grabbed" ); - if ( !is_true( self._box_opened_by_fire_sale ) ) - { - level.chest_accessed += 1; - } - if ( level.chest_moves > 0 && isDefined( level.pulls_since_last_ray_gun ) ) - { - level.pulls_since_last_ray_gun += 1; - } - if ( isDefined( level.pulls_since_last_tesla_gun ) ) - { - level.pulls_since_last_tesla_gun += 1; - } - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); - if ( isDefined( self.chest_lid ) ) - { - self.chest_lid thread treasure_chest_lid_close( self.timedout ); - } - if ( isDefined( self.zbarrier ) ) - { - self.zbarrier set_magic_box_zbarrier_state( "close" ); - play_sound_at_pos( "close_chest", self.origin ); - self.zbarrier waittill( "closed" ); - wait 1; - } - else - { - wait 3; - } - if ( is_true( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) || self [[ level._zombiemode_check_firesale_loc_valid_func ]]() || self == level.chests[ level.chest_index ] ) - { - thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think ); - } - } - self._box_open = 0; - self._box_opened_by_fire_sale = 0; - self.chest_user = undefined; - self notify( "chest_accessed" ); - self thread treasure_chest_think(); -} - -watch_for_emp_close() //checked changed to match cerberus output -{ - self endon( "chest_accessed" ); - self.closed_by_emp = 0; - if ( !should_watch_for_emp() ) - { - return; - } - if ( isDefined( self.zbarrier ) ) - { - self.zbarrier.closed_by_emp = 0; - } - while ( 1 ) - { - level waittill( "emp_detonate", origin, radius ); - if ( distancesquared( origin, self.origin ) < ( radius * radius ) ) - { - break; - } - } - if ( flag( "moving_chest_now" ) ) - { - return; - } - self.closed_by_emp = 1; - if ( isDefined( self.zbarrier ) ) - { - self.zbarrier.closed_by_emp = 1; - self.zbarrier notify( "box_hacked_respin" ); - if ( isDefined( self.zbarrier.weapon_model ) ) - { - self.zbarrier.weapon_model notify( "kill_weapon_movement" ); - } - if ( isDefined( self.zbarrier.weapon_model_dw ) ) - { - self.zbarrier.weapon_model_dw notify( "kill_weapon_movement" ); - } - } - wait 0.1; - self notify( "trigger", level ); -} - -can_buy_weapon() //checked matches cerberus output -{ - if ( isDefined( self.is_drinking ) && self.is_drinking > 0 ) - { - return 0; - } - if ( self hacker_active() ) - { - return 0; - } - current_weapon = self getcurrentweapon(); - if ( is_placeable_mine( current_weapon ) || is_equipment_that_blocks_purchase( current_weapon ) ) - { - return 0; - } - if ( self in_revive_trigger() ) - { - return 0; - } - if ( current_weapon == "none" ) - { - return 0; - } - return 1; -} - -default_box_move_logic() //checked changed to match cerberus output -{ - index = -1; - for ( i = 0; i < level.chests.size; i++ ) - { - if ( issubstr( level.chests[ i ].script_noteworthy, "move" + level.chest_moves + 1 ) && i != level.chest_index ) - { - index = i; - break; - } - } - if ( index != -1 ) - { - level.chest_index = index; - } - else - { - level.chest_index++; - } - if ( level.chest_index >= level.chests.size ) - { - temp_chest_name = level.chests[ level.chest_index - 1 ].script_noteworthy; - level.chest_index = 0; - level.chests = array_randomize( level.chests ); - if ( temp_chest_name == level.chests[ level.chest_index ].script_noteworthy ) - { - level.chest_index++; - } - } -} - -treasure_chest_move( player_vox ) //checked changed to match cerberus output -{ - level waittill( "weapon_fly_away_start" ); - players = get_players(); - array_thread( players, ::play_crazi_sound ); - if ( isDefined( player_vox ) ) - { - player_vox delay_thread( randomintrange( 2, 7 ), ::create_and_play_dialog, "general", "box_move" ); - } - level waittill( "weapon_fly_away_end" ); - if ( isDefined( self.zbarrier ) ) - { - self hide_chest( 1 ); - } - wait 0.1; - post_selection_wait_duration = 7; - if ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] == 1 && self [[ level._zombiemode_check_firesale_loc_valid_func ]]() ) - { - current_sale_time = level.zombie_vars[ "zombie_powerup_fire_sale_time" ]; - wait_network_frame(); - self thread fire_sale_fix(); - level.zombie_vars[ "zombie_powerup_fire_sale_time" ] = current_sale_time; - while ( level.zombie_vars[ "zombie_powerup_fire_sale_time" ] > 0 ) - { - wait 0.1; - } - } - else - { - post_selection_wait_duration += 5; - } - level.verify_chest = 0; - if ( isDefined( level._zombiemode_custom_box_move_logic ) ) - { - [[ level._zombiemode_custom_box_move_logic ]](); - } - else - { - default_box_move_logic(); - } - if ( isDefined( level.chests[ level.chest_index ].box_hacks[ "summon_box" ] ) ) - { - level.chests[ level.chest_index ] [[ level.chests[ level.chest_index ].box_hacks[ "summon_box" ] ]]( 0 ); - } - wait post_selection_wait_duration; - playfx( level._effect[ "poltergeist" ], level.chests[ level.chest_index ].zbarrier.origin ); - level.chests[ level.chest_index ] show_chest(); - flag_clear( "moving_chest_now" ); - self.zbarrier.chest_moving = 0; -} - -fire_sale_fix() //checked matches cerberus output -{ - if ( !isDefined( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) ) - { - return; - } - if ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) - { - self.old_cost = 950; - self thread show_chest(); - self.zombie_cost = 10; - self.unitrigger_stub unitrigger_set_hint_string( self, "default_treasure_chest", self.zombie_cost ); - wait_network_frame(); - level waittill( "fire_sale_off" ); - while ( is_true( self._box_open ) ) - { - wait 0.1; - } - self hide_chest( 1 ); - self.zombie_cost = self.old_cost; - } -} - -check_for_desirable_chest_location() //checked changed to match cerberus output -{ - if ( !isDefined( level.desirable_chest_location ) ) - { - return level.chest_index; - } - if ( level.chests[ level.chest_index ].script_noteworthy == level.desirable_chest_location ) - { - level.desirable_chest_location = undefined; - return level.chest_index; - } - for ( i = 0; i < level.chests.size; i++ ) - { - if ( level.chests[ i ].script_noteworthy == level.desirable_chest_location ) - { - level.desirable_chest_location = undefined; - return i; - } - } - /* -/# - iprintln( level.desirable_chest_location + " is an invalid box location!" ); -#/ - */ - level.desirable_chest_location = undefined; - return level.chest_index; -} - -rotateroll_box() //checked matches cerberus output -{ - angles = 40; - angles2 = 0; - while ( isDefined( self ) ) - { - self rotateroll( angles + angles2, 0.5 ); - wait 0.7; - angles2 = 40; - self rotateroll( angles * -2, 0.5 ); - wait 0.7; - } -} - -verify_chest_is_open() //checked changed to match cerberus output -{ - for ( i = 0; i < level.open_chest_location.size; i++ ) - { - if ( isDefined( level.open_chest_location[ i ] ) ) - { - if ( level.open_chest_location[ i ] == level.chests[ level.chest_index ].script_noteworthy ) - { - level.verify_chest = 1; - return; - } - } - } - level.verify_chest = 0; -} - -treasure_chest_timeout() //checked changed to match cerberus output -{ - self endon( "user_grabbed_weapon" ); - self.zbarrier endon( "box_hacked_respin" ); - self.zbarrier endon( "box_hacked_rerespin" ); - wait 12; - self notify( "trigger", level ); -} - -treasure_chest_lid_open() //checked matches cerberus output -{ - openroll = 105; - opentime = 0.5; - self rotateroll( 105, opentime, opentime * 0.5 ); - play_sound_at_pos( "open_chest", self.origin ); - play_sound_at_pos( "music_chest", self.origin ); -} - -treasure_chest_lid_close( timedout ) //checked matches cerberus output -{ - closeroll = -105; - closetime = 0.5; - self rotateroll( closeroll, closetime, closetime * 0.5 ); - play_sound_at_pos( "close_chest", self.origin ); - self notify( "lid_closed" ); -} - -treasure_chest_chooserandomweapon( player ) //checked matches cerberus output -{ - keys = getarraykeys( level.zombie_weapons ); - return keys[ randomint( keys.size ) ]; -} - -treasure_chest_canplayerreceiveweapon( player, weapon, pap_triggers ) //checked matches cerberus output -{ - if ( !get_is_in_box( weapon ) ) - { - return 0; - } - if ( isDefined( player ) && player has_weapon_or_upgrade( weapon ) ) - { - return 0; - } - if ( !limited_weapon_below_quota( weapon, player, pap_triggers ) ) - { - return 0; - } - if ( !player player_can_use_content( weapon ) ) - { - return 0; - } - if ( isDefined( level.custom_magic_box_selection_logic ) ) - { - if ( !( [[ level.custom_magic_box_selection_logic ]]( weapon, player, pap_triggers ) ) ) - { - return 0; - } - } - if ( isDefined( player ) && isDefined( level.special_weapon_magicbox_check ) ) - { - return player [[ level.special_weapon_magicbox_check ]]( weapon ); - } - return 1; -} - -treasure_chest_chooseweightedrandomweapon( player ) //checked changed to match cerberus output -{ - keys = array_randomize( getarraykeys( level.zombie_weapons ) ); - if ( isDefined( level.customrandomweaponweights ) ) - { - keys = player [[ level.customrandomweaponweights ]]( keys ); - } - /* -/# - forced_weapon = getDvar( "scr_force_weapon" ); - if ( forced_weapon != "" && isDefined( level.zombie_weapons[ forced_weapon ] ) ) - { - arrayinsert( keys, forced_weapon, 0 ); -#/ - } - */ - pap_triggers = getentarray( "specialty_weapupgrade", "script_noteworthy" ); - for ( i = 0; i < keys.size; i++ ) - { - if ( treasure_chest_canplayerreceiveweapon( player, keys[ i ], pap_triggers ) ) - { - return keys[ i ]; - } - } - return keys[ 0 ]; -} - -weapon_is_dual_wield( name ) //checked matches cerberus output -{ - switch( name ) - { - case "cz75dw_upgraded_zm": - case "cz75dw_zm": - case "fivesevendw_upgraded_zm": - case "fivesevendw_zm": - case "hs10_upgraded_zm": - case "m1911_upgraded_zm": - case "microwavegundw_upgraded_zm": - case "microwavegundw_zm": - case "pm63_upgraded_zm": - return 1; - default: - return 0; - } -} - -weapon_show_hint_choke() //checked matches cerberus output -{ - level._weapon_show_hint_choke = 0; - while ( 1 ) - { - wait 0.05; - level._weapon_show_hint_choke = 0; - } -} - -decide_hide_show_hint( endon_notify, second_endon_notify, onlyplayer ) //checked changed to match cerberus output -{ - self endon( "death" ); - if ( isDefined( endon_notify ) ) - { - self endon( endon_notify ); - } - if ( isDefined( second_endon_notify ) ) - { - self endon( second_endon_notify ); - } - if ( !isDefined( level._weapon_show_hint_choke ) ) - { - level thread weapon_show_hint_choke(); - } - use_choke = 0; - if ( isDefined( level._use_choke_weapon_hints ) && level._use_choke_weapon_hints == 1 ) - { - use_choke = 1; - } - while ( 1 ) - { - last_update = getTime(); - if ( isDefined( self.chest_user ) && !isDefined( self.box_rerespun ) ) - { - if ( is_placeable_mine( self.chest_user getcurrentweapon() ) || self.chest_user hacker_active() ) - { - self setinvisibletoplayer( self.chest_user ); - } - else - { - self setvisibletoplayer( self.chest_user ); - } - } - if ( isDefined( onlyplayer ) ) - { - if ( onlyplayer can_buy_weapon() ) - { - self setinvisibletoplayer( onlyplayer, 0 ); - } - else - { - self setinvisibletoplayer( onlyplayer, 1 ); - } - } - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] can_buy_weapon() ) - { - self setinvisibletoplayer( players[ i ], 0 ); - i++; - continue; - } - self setinvisibletoplayer( players[ i ], 1 ); - i++; - } - if ( use_choke ) - { - while ( level._weapon_show_hint_choke > 4 && getTime() < ( last_update + 150 ) ) - { - wait 0.05; - } - } - else - { - wait 0.1; - } - level._weapon_show_hint_choke++; - } -} - -get_left_hand_weapon_model_name( name ) //checked matches cerberus output -{ - switch( name ) - { - case "microwavegundw_zm": - return getweaponmodel( "microwavegunlh_zm" ); - case "microwavegundw_upgraded_zm": - return getweaponmodel( "microwavegunlh_upgraded_zm" ); - default: - return getweaponmodel( name ); - } -} - -clean_up_hacked_box() //checked matches cerberus output -{ - self waittill( "box_hacked_respin" ); - self endon( "box_spin_done" ); - if ( isDefined( self.weapon_model ) ) - { - self.weapon_model delete(); - self.weapon_model = undefined; - } - if ( isDefined( self.weapon_model_dw ) ) - { - self.weapon_model_dw delete(); - self.weapon_model_dw = undefined; - } - self hidezbarrierpiece( 3 ); - self hidezbarrierpiece( 4 ); - self setzbarrierpiecestate( 3, "closed" ); - self setzbarrierpiecestate( 4, "closed" ); -} - -treasure_chest_weapon_spawn( chest, player, respin ) //checked changed to match cerberus output -{ - if ( is_true( level.using_locked_magicbox ) ) - { - self.owner endon( "box_locked" ); - self thread maps/mp/zombies/_zm_magicbox_lock::clean_up_locked_box(); - } - self endon( "box_hacked_respin" ); - self thread clean_up_hacked_box(); - /* -/# - assert( isDefined( player ) ); -#/ - */ - self.weapon_string = undefined; - modelname = undefined; - rand = undefined; - number_cycles = 40; - if ( isDefined( chest.zbarrier ) ) - { - if ( isDefined( level.custom_magic_box_do_weapon_rise ) ) - { - chest.zbarrier thread [[ level.custom_magic_box_do_weapon_rise ]](); - } - else - { - chest.zbarrier thread magic_box_do_weapon_rise(); - } - } - for ( i = 0; i < number_cycles; i++ ) - { - - if ( i < 20 ) - { - wait 0.05 ; - } - else if ( i < 30 ) - { - wait 0.1 ; - } - else if ( i < 35 ) - { - wait 0.2 ; - } - else if ( i < 38 ) - { - wait 0.3 ; - } - } - if ( isDefined( level.custom_magic_box_weapon_wait ) ) - { - [[ level.custom_magic_box_weapon_wait ]](); - } - if ( is_true( player.pers_upgrades_awarded[ "box_weapon" ] ) ) - { - rand = maps/mp/zombies/_zm_pers_upgrades_functions::pers_treasure_chest_choosespecialweapon( player ); - } - else - { - rand = treasure_chest_chooseweightedrandomweapon( player ); - } - - self.weapon_string = rand; - wait 0.1; - if ( isDefined( level.custom_magicbox_float_height ) ) - { - v_float = anglesToUp( self.angles ) * level.custom_magicbox_float_height; - } - else - { - v_float = anglesToUp( self.angles ) * 40; - } - self.model_dw = undefined; - self.weapon_model = spawn_weapon_model( rand, undefined, self.origin + v_float, self.angles + vectorScale( ( 0, 1, 0 ), 180 ) ); - if ( weapon_is_dual_wield( rand ) ) - { - self.weapon_model_dw = spawn_weapon_model( rand, get_left_hand_weapon_model_name( rand ), self.weapon_model.origin - vectorScale( ( 0, 1, 0 ), 3 ), self.weapon_model.angles ); - } - if ( getDvar( "magic_chest_movable" ) == "1" && !is_true( chest._box_opened_by_fire_sale ) && !is_true( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) && self [[ level._zombiemode_check_firesale_loc_valid_func ]]() ) - { - random = randomint( 100 ); - if ( !isDefined( level.chest_min_move_usage ) ) - { - level.chest_min_move_usage = 4; - } - if ( level.chest_accessed < level.chest_min_move_usage ) - { - chance_of_joker = -1; - } - else - { - chance_of_joker = level.chest_accessed + 20; - if ( level.chest_moves == 0 && level.chest_accessed >= 8 ) - { - chance_of_joker = 100; - } - if ( level.chest_accessed >= 4 && level.chest_accessed < 8 ) - { - if ( random < 15 ) - { - chance_of_joker = 100; - } - else - { - chance_of_joker = -1; - } - } - if ( level.chest_moves > 0 ) - { - if ( level.chest_accessed >= 8 && level.chest_accessed < 13 ) - { - if ( random < 30 ) - { - chance_of_joker = 100; - } - else - { - chance_of_joker = -1; - } - } - if ( level.chest_accessed >= 13 ) - { - if ( random < 50 ) - { - chance_of_joker = 100; - } - else - { - chance_of_joker = -1; - } - } - } - } - if ( isDefined( chest.no_fly_away ) ) - { - chance_of_joker = -1; - } - if ( isDefined( level._zombiemode_chest_joker_chance_override_func ) ) - { - chance_of_joker = [[ level._zombiemode_chest_joker_chance_override_func ]]( chance_of_joker ); - } - if ( chance_of_joker > random ) - { - self.weapon_string = undefined; - self.weapon_model setmodel( level.chest_joker_model ); - self.weapon_model.angles = self.angles + vectorScale( ( 0, 1, 0 ), 90 ); - if ( isDefined( self.weapon_model_dw ) ) - { - self.weapon_model_dw delete(); - self.weapon_model_dw = undefined; - } - self.chest_moving = 1; - flag_set( "moving_chest_now" ); - level.chest_accessed = 0; - level.chest_moves++; - } - } - self notify( "randomization_done" ); - if ( flag( "moving_chest_now" ) && !level.zombie_vars[ "zombie_powerup_fire_sale_on" ] && self [[ level._zombiemode_check_firesale_loc_valid_func ]]() ) - { - if ( isDefined( level.chest_joker_custom_movement ) ) - { - self [[ level.chest_joker_custom_movement ]](); - } - else - { - wait 0.5; - level notify( "weapon_fly_away_start" ); - wait 2; - if ( isDefined( self.weapon_model ) ) - { - v_fly_away = self.origin + ( anglesToUp( self.angles ) * 500 ); - self.weapon_model moveto( v_fly_away, 4, 3 ); - } - if ( isDefined( self.weapon_model_dw ) ) - { - v_fly_away = self.origin + ( anglesToUp( self.angles ) * 500 ); - self.weapon_model_dw moveto( v_fly_away, 4, 3 ); - } - self.weapon_model waittill( "movedone" ); - self.weapon_model delete(); - if ( isDefined( self.weapon_model_dw ) ) - { - self.weapon_model_dw delete(); - self.weapon_model_dw = undefined; - } - self notify( "box_moving" ); - level notify( "weapon_fly_away_end" ); - } - } - else - { - acquire_weapon_toggle( rand, player ); - if ( rand == "tesla_gun_zm" || rand == "ray_gun_zm" ) - { - if ( rand == "ray_gun_zm" ) - { - level.pulls_since_last_ray_gun = 0; - } - if ( rand == "tesla_gun_zm" ) - { - level.pulls_since_last_tesla_gun = 0; - level.player_seen_tesla_gun = 1; - } - } - if ( !isDefined( respin ) ) - { - if ( isDefined( chest.box_hacks[ "respin" ] ) ) - { - self [[ chest.box_hacks[ "respin" ] ]]( chest, player ); - } - } - else - { - if ( isDefined( chest.box_hacks[ "respin_respin" ] ) ) - { - self [[ chest.box_hacks[ "respin_respin" ] ]]( chest, player ); - } - } - if ( isDefined( level.custom_magic_box_timer_til_despawn ) ) - { - self.weapon_model thread [[ level.custom_magic_box_timer_til_despawn ]]( self ); - } - else - { - self.weapon_model thread timer_til_despawn( v_float ); - } - if ( isDefined( self.weapon_model_dw ) ) - { - if ( isDefined( level.custom_magic_box_timer_til_despawn ) ) - { - self.weapon_model_dw thread [[ level.custom_magic_box_timer_til_despawn ]]( self ); - } - else - { - self.weapon_model_dw thread timer_til_despawn( v_float ); - } - } - self waittill( "weapon_grabbed" ); - if ( !chest.timedout ) - { - if ( isDefined( self.weapon_model ) ) - { - self.weapon_model delete(); - } - if ( isDefined( self.weapon_model_dw ) ) - { - self.weapon_model_dw delete(); - } - } - } - self.weapon_string = undefined; - self notify( "box_spin_done" ); -} - -chest_get_min_usage() //checked matches cerberus output -{ - min_usage = 4; - return min_usage; -} - -chest_get_max_usage() //checked matches cerberus output -{ - max_usage = 6; - players = get_players(); - if ( level.chest_moves == 0 ) - { - if ( players.size == 1 ) - { - max_usage = 3; - } - else if ( players.size == 2 ) - { - max_usage = 4; - } - else if ( players.size == 3 ) - { - max_usage = 5; - } - else - { - max_usage = 6; - } - } - else if ( players.size == 1 ) - { - max_usage = 4; - } - else if ( players.size == 2 ) - { - max_usage = 4; - } - else if ( players.size == 3 ) - { - max_usage = 5; - } - else - { - max_usage = 7; - } - return max_usage; -} - -timer_til_despawn( v_float ) //checked matches cerberus output -{ - self endon( "kill_weapon_movement" ); - putbacktime = 12; - self moveto( self.origin - ( v_float * 0.85 ), putbacktime, putbacktime * 0.5 ); - wait putbacktime; - if ( isDefined( self ) ) - { - self delete(); - } -} - -treasure_chest_glowfx() //checked matches cerberus output -{ - self setclientfield( "magicbox_glow", 1 ); - self waittill_any( "weapon_grabbed", "box_moving" ); - self setclientfield( "magicbox_glow", 0 ); -} - -treasure_chest_give_weapon( weapon_string ) //checked matches cerberus output -{ - self.last_box_weapon = getTime(); - self maps/mp/zombies/_zm_weapons::weapon_give( weapon_string, 0, 1 ); -} - -magic_box_teddy_twitches() //checked matches cerberus output -{ - self endon( "zbarrier_state_change" ); - self setzbarrierpiecestate( 0, "closed" ); - while ( 1 ) - { - wait randomfloatrange( 180, 1800 ); - self setzbarrierpiecestate( 0, "opening" ); - wait randomfloatrange( 180, 1800 ); - self setzbarrierpiecestate( 0, "closing" ); - } -} - -magic_box_initial() //checked matches cerberus output -{ - self setzbarrierpiecestate( 1, "open" ); -} - -magic_box_arrives() -{ - self setzbarrierpiecestate( 1, "opening" ); - while ( self getzbarrierpiecestate( 1 ) == "opening" ) - { - wait 0.05; - } - self notify( "arrived" ); -} - -magic_box_leaves() //checked matches cerberus output -{ - self setzbarrierpiecestate( 1, "closing" ); - while ( self getzbarrierpiecestate( 1 ) == "closing" ) - { - wait 0.1; - } - self notify( "left" ); -} - -magic_box_opens() //checked matches cerberus output -{ - self setzbarrierpiecestate( 2, "opening" ); - while ( self getzbarrierpiecestate( 2 ) == "opening" ) - { - wait 0.1; - } - self notify( "opened" ); -} - -magic_box_closes() //checked matches cerberus output -{ - self setzbarrierpiecestate( 2, "closing" ); - while ( self getzbarrierpiecestate( 2 ) == "closing" ) - { - wait 0.1; - } - self notify( "closed" ); -} - -magic_box_do_weapon_rise() //checked matches cerberus output -{ - self endon( "box_hacked_respin" ); - self setzbarrierpiecestate( 3, "closed" ); - self setzbarrierpiecestate( 4, "closed" ); - wait_network_frame(); - self zbarrierpieceuseboxriselogic( 3 ); - self zbarrierpieceuseboxriselogic( 4 ); - self showzbarrierpiece( 3 ); - self showzbarrierpiece( 4 ); - self setzbarrierpiecestate( 3, "opening" ); - self setzbarrierpiecestate( 4, "opening" ); - while ( self getzbarrierpiecestate( 3 ) != "open" ) - { - wait 0.5; - } - self hidezbarrierpiece( 3 ); - self hidezbarrierpiece( 4 ); -} - -magic_box_do_teddy_flyaway() //checked matches cerberus output -{ - self showzbarrierpiece( 3 ); - self setzbarrierpiecestate( 3, "closing" ); -} - -is_chest_active() //checked matches cerberus output -{ - curr_state = self.zbarrier get_magic_box_zbarrier_state(); - if ( flag( "moving_chest_now" ) ) - { - return 0; - } - if ( curr_state == "open" || curr_state == "close" ) - { - return 1; - } - return 0; -} - -get_magic_box_zbarrier_state() //checked matches cerberus output -{ - return self.state; -} - -set_magic_box_zbarrier_state( state ) //checked changed to match cerberus output -{ - for ( i = 0; i < self getnumzbarrierpieces(); i++ ) - { - self hidezbarrierpiece( i ); - } - self notify( "zbarrier_state_change" ); - self [[ level.magic_box_zbarrier_state_func ]]( state ); -} - -process_magic_box_zbarrier_state( state ) //checked matches cerberus output -{ - switch( state ) - { - case "away": - self showzbarrierpiece( 0 ); - self thread magic_box_teddy_twitches(); - self.state = "away"; - break; - case "arriving": - self showzbarrierpiece( 1 ); - self thread magic_box_arrives(); - self.state = "arriving"; - break; - case "initial": - self showzbarrierpiece( 1 ); - self thread magic_box_initial(); - thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.owner.unitrigger_stub, ::magicbox_unitrigger_think ); - self.state = "initial"; - break; - case "open": - self showzbarrierpiece( 2 ); - self thread magic_box_opens(); - self.state = "open"; - break; - case "close": - self showzbarrierpiece( 2 ); - self thread magic_box_closes(); - self.state = "close"; - break; - case "leaving": - self showzbarrierpiece( 1 ); - self thread magic_box_leaves(); - self.state = "leaving"; - break; - default: - if ( isDefined( level.custom_magicbox_state_handler ) ) - { - self [[ level.custom_magicbox_state_handler ]]( state ); - } - break; - } -} - -magicbox_host_migration() //checked changed to match cerberus output -{ - level endon( "end_game" ); - level notify( "mb_hostmigration" ); - level endon( "mb_hostmigration" ); - while ( 1 ) - { - level waittill( "host_migration_end" ); - while ( !isDefined( level.chests ) ) - { - wait 0.1; - } - foreach ( chest in level.chests ) - { - if ( !is_true( chest.hidden ) ) - { - if ( isdefined( chest ) && isdefined( chest.pandora_light ) ) - { - playfxontag( level._effect[ "lght_marker" ], chest.pandora_light, "tag_origin" ); - } - } - wait_network_frame(); - } - } -} - - - - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_magicbox_lock.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_magicbox_lock.gsc deleted file mode 100644 index 3e8dacd..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_magicbox_lock.gsc +++ /dev/null @@ -1,99 +0,0 @@ -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_magicbox_lock; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - precachemodel( "p6_anim_zm_al_magic_box_lock_red" ); - level.locked_magic_box_cost = 2000; - level.custom_magicbox_state_handler = ::set_locked_magicbox_state; - add_zombie_hint( "locked_magic_box_cost", &"ZOMBIE_LOCKED_COST_2000" ); -} - -watch_for_lock() //checked matches cerberus output -{ - self endon( "user_grabbed_weapon" ); - self endon( "chest_accessed" ); - self waittill( "box_locked" ); - self notify( "kill_chest_think" ); - self.grab_weapon_hint = 0; - self.chest_user = undefined; - wait 0.1; - self thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think ); - self.unitrigger_stub run_visibility_function_for_all_triggers(); - self thread treasure_chest_think(); -} - -clean_up_locked_box() //checked matches cerberus output -{ - self endon( "box_spin_done" ); - self.owner waittill( "box_locked" ); - if ( isDefined( self.weapon_model ) ) - { - self.weapon_model delete(); - self.weapon_model = undefined; - } - if ( isDefined( self.weapon_model_dw ) ) - { - self.weapon_model_dw delete(); - self.weapon_model_dw = undefined; - } - self hidezbarrierpiece( 3 ); - self hidezbarrierpiece( 4 ); - self setzbarrierpiecestate( 3, "closed" ); - self setzbarrierpiecestate( 4, "closed" ); -} - -magic_box_locks() //checked matches cerberus output -{ - self.owner.is_locked = 1; - self.owner notify( "box_locked" ); - self playsound( "zmb_hellbox_lock" ); - self setclientfield( "magicbox_open_fx", 0 ); - self setclientfield( "magicbox_amb_fx", 2 ); - self setzbarrierpiecestate( 5, "closing" ); - while ( self getzbarrierpiecestate( 5 ) == "closing" ) - { - wait 0.5; - } - self notify( "locked" ); -} - -magic_box_unlocks() //checked matches cerberus output -{ - maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.owner.unitrigger_stub ); - self playsound( "zmb_hellbox_unlock" ); - self setzbarrierpiecestate( 5, "opening" ); - while ( self getzbarrierpiecestate( 5 ) == "opening" ) - { - wait 0.5; - } - self setzbarrierpiecestate( 2, "closed" ); - self showzbarrierpiece( 2 ); - self hidezbarrierpiece( 5 ); - self notify( "unlocked" ); - self.owner.is_locked = 0; - maps/mp/zombies/_zm_unitrigger::register_unitrigger( self.owner.unitrigger_stub ); - self setclientfield( "magicbox_amb_fx", 1 ); -} - -set_locked_magicbox_state( state ) //checked matches cerberus output -{ - switch( state ) - { - case "locking": - self showzbarrierpiece( 5 ); - self thread magic_box_locks(); - self.state = "locking"; - break; - case "unlocking": - self showzbarrierpiece( 5 ); - self magic_box_unlocks(); - self.state = "close"; - break; - } -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_mgturret.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_mgturret.gsc deleted file mode 100644 index d3aee82..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_mgturret.gsc +++ /dev/null @@ -1,339 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/_utility; - -main() -{ - if ( getDvar( #"7C9A91DF" ) == "" ) - { - setdvar( "mgTurret", "off" ); - } - level.magic_distance = 24; - turretinfos = getentarray( "turretInfo", "targetname" ); - index = 0; - while ( index < turretinfos.size ) - { - turretinfos[ index ] delete(); - index++; - } -} - -set_difficulty( difficulty ) -{ - init_turret_difficulty_settings(); - turrets = getentarray( "misc_turret", "classname" ); - index = 0; - while ( index < turrets.size ) - { - if ( isDefined( turrets[ index ].script_skilloverride ) ) - { - switch( turrets[ index ].script_skilloverride ) - { - case "easy": - difficulty = "easy"; - break; - break; - case "medium": - difficulty = "medium"; - break; - break; - case "hard": - difficulty = "hard"; - break; - break; - case "fu": - difficulty = "fu"; - break; - break; - default: - } - } - turret_set_difficulty( turrets[ index ], difficulty ); - index++; - } - } -} - -init_turret_difficulty_settings() -{ - level.mgturretsettings[ "easy" ][ "convergenceTime" ] = 2,5; - level.mgturretsettings[ "easy" ][ "suppressionTime" ] = 3; - level.mgturretsettings[ "easy" ][ "accuracy" ] = 0,38; - level.mgturretsettings[ "easy" ][ "aiSpread" ] = 2; - level.mgturretsettings[ "easy" ][ "playerSpread" ] = 0,5; - level.mgturretsettings[ "medium" ][ "convergenceTime" ] = 1,5; - level.mgturretsettings[ "medium" ][ "suppressionTime" ] = 3; - level.mgturretsettings[ "medium" ][ "accuracy" ] = 0,38; - level.mgturretsettings[ "medium" ][ "aiSpread" ] = 2; - level.mgturretsettings[ "medium" ][ "playerSpread" ] = 0,5; - level.mgturretsettings[ "hard" ][ "convergenceTime" ] = 0,8; - level.mgturretsettings[ "hard" ][ "suppressionTime" ] = 3; - level.mgturretsettings[ "hard" ][ "accuracy" ] = 0,38; - level.mgturretsettings[ "hard" ][ "aiSpread" ] = 2; - level.mgturretsettings[ "hard" ][ "playerSpread" ] = 0,5; - level.mgturretsettings[ "fu" ][ "convergenceTime" ] = 0,4; - level.mgturretsettings[ "fu" ][ "suppressionTime" ] = 3; - level.mgturretsettings[ "fu" ][ "accuracy" ] = 0,38; - level.mgturretsettings[ "fu" ][ "aiSpread" ] = 2; - level.mgturretsettings[ "fu" ][ "playerSpread" ] = 0,5; -} - -turret_set_difficulty( turret, difficulty ) -{ - turret.convergencetime = level.mgturretsettings[ difficulty ][ "convergenceTime" ]; - turret.suppressiontime = level.mgturretsettings[ difficulty ][ "suppressionTime" ]; - turret.accuracy = level.mgturretsettings[ difficulty ][ "accuracy" ]; - turret.aispread = level.mgturretsettings[ difficulty ][ "aiSpread" ]; - turret.playerspread = level.mgturretsettings[ difficulty ][ "playerSpread" ]; -} - -turret_suppression_fire( targets ) -{ - self endon( "death" ); - self endon( "stop_suppression_fire" ); - if ( !isDefined( self.suppresionfire ) ) - { - self.suppresionfire = 1; - } - for ( ;; ) - { - while ( self.suppresionfire ) - { - self settargetentity( targets[ randomint( targets.size ) ] ); - wait ( 2 + randomfloat( 2 ) ); - } - self cleartargetentity(); - while ( !self.suppresionfire ) - { - wait 1; - } - } -} - -burst_fire_settings( setting ) -{ - if ( setting == "delay" ) - { - return 0,2; - } - else - { - if ( setting == "delay_range" ) - { - return 0,5; - } - else - { - if ( setting == "burst" ) - { - return 0,5; - } - else - { - if ( setting == "burst_range" ) - { - return 4; - } - } - } - } -} - -burst_fire( turret, manual_target ) -{ - turret endon( "death" ); - turret endon( "stopfiring" ); - self endon( "stop_using_built_in_burst_fire" ); - if ( isDefined( turret.script_delay_min ) ) - { - turret_delay = turret.script_delay_min; - } - else - { - turret_delay = burst_fire_settings( "delay" ); - } - if ( isDefined( turret.script_delay_max ) ) - { - turret_delay_range = turret.script_delay_max - turret_delay; - } - else - { - turret_delay_range = burst_fire_settings( "delay_range" ); - } - if ( isDefined( turret.script_burst_min ) ) - { - turret_burst = turret.script_burst_min; - } - else - { - turret_burst = burst_fire_settings( "burst" ); - } - if ( isDefined( turret.script_burst_max ) ) - { - turret_burst_range = turret.script_burst_max - turret_burst; - } - else - { - turret_burst_range = burst_fire_settings( "burst_range" ); - } - while ( 1 ) - { - turret startfiring(); - if ( isDefined( manual_target ) ) - { - turret thread random_spread( manual_target ); - } - turret do_shoot(); - wait ( turret_burst + randomfloat( turret_burst_range ) ); - turret stopshootturret(); - turret stopfiring(); - wait ( turret_delay + randomfloat( turret_delay_range ) ); - } -} - -burst_fire_unmanned() -{ - self notify( "stop_burst_fire_unmanned" ); - self endon( "stop_burst_fire_unmanned" ); - self endon( "death" ); - self endon( "remote_start" ); - level endon( "game_ended" ); - if ( isDefined( self.controlled ) && self.controlled ) - { - return; - } - if ( isDefined( self.script_delay_min ) ) - { - turret_delay = self.script_delay_min; - } - else - { - turret_delay = burst_fire_settings( "delay" ); - } - if ( isDefined( self.script_delay_max ) ) - { - turret_delay_range = self.script_delay_max - turret_delay; - } - else - { - turret_delay_range = burst_fire_settings( "delay_range" ); - } - if ( isDefined( self.script_burst_min ) ) - { - turret_burst = self.script_burst_min; - } - else - { - turret_burst = burst_fire_settings( "burst" ); - } - if ( isDefined( self.script_burst_max ) ) - { - turret_burst_range = self.script_burst_max - turret_burst; - } - else - { - turret_burst_range = burst_fire_settings( "burst_range" ); - } - pauseuntiltime = getTime(); - turretstate = "start"; - self.script_shooting = 0; - for ( ;; ) - { - if ( isDefined( self.manual_targets ) ) - { - self cleartargetentity(); - self settargetentity( self.manual_targets[ randomint( self.manual_targets.size ) ] ); - } - duration = ( pauseuntiltime - getTime() ) * 0,001; - if ( self isfiringturret() && duration <= 0 ) - { - if ( turretstate != "fire" ) - { - turretstate = "fire"; - self playsound( "mpl_turret_alert" ); - self thread do_shoot(); - self.script_shooting = 1; - } - duration = turret_burst + randomfloat( turret_burst_range ); - self thread turret_timer( duration ); - self waittill( "turretstatechange" ); - self.script_shooting = 0; - duration = turret_delay + randomfloat( turret_delay_range ); - pauseuntiltime = getTime() + int( duration * 1000 ); - continue; - } - else - { - if ( turretstate != "aim" ) - { - turretstate = "aim"; - } - self thread turret_timer( duration ); - self waittill( "turretstatechange" ); - } - } -} - -avoid_synchronization( time ) -{ - if ( !isDefined( level._zm_mgturret_firing ) ) - { - level._zm_mgturret_firing = 0; - } - level._zm_mgturret_firing++; - wait time; - level._zm_mgturret_firing--; - -} - -do_shoot() -{ - self endon( "death" ); - self endon( "turretstatechange" ); - for ( ;; ) - { - while ( is_true( level._zm_mgturret_firing ) ) - { - wait 0,1; - } - thread avoid_synchronization( 0,1 ); - self shootturret(); - wait 0,112; - } -} - -turret_timer( duration ) -{ - if ( duration <= 0 ) - { - return; - } - self endon( "turretstatechange" ); - wait duration; - if ( isDefined( self ) ) - { - self notify( "turretstatechange" ); - } -} - -random_spread( ent ) -{ - self endon( "death" ); - self notify( "stop random_spread" ); - self endon( "stop random_spread" ); - self endon( "stopfiring" ); - self settargetentity( ent ); - self.manual_target = ent; - while ( 1 ) - { - if ( isplayer( ent ) ) - { - ent.origin = self.manual_target getorigin(); - } - else - { - ent.origin = self.manual_target.origin; - } - ent.origin += ( 20 - randomfloat( 40 ), 20 - randomfloat( 40 ), 20 - randomfloat( 60 ) ); - wait 0,2; - } -} diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_net.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_net.gsc deleted file mode 100644 index 32f06cb..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_net.gsc +++ /dev/null @@ -1,105 +0,0 @@ -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -network_choke_init( id, max ) //checked matches cerberus output -{ - if ( !isDefined( level.zombie_network_choke_ids_max ) ) - { - level.zombie_network_choke_ids_max = []; - level.zombie_network_choke_ids_count = []; - } - level.zombie_network_choke_ids_max[ id ] = max; - level.zombie_network_choke_ids_count[ id ] = 0; - level thread network_choke_thread( id ); -} - -network_choke_thread( id ) //checked matches cerberus output -{ - while ( 1 ) - { - wait_network_frame(); - wait_network_frame(); - level.zombie_network_choke_ids_count[ id ] = 0; - } -} - -network_choke_safe( id ) //checked matches cerberus output -{ - return level.zombie_network_choke_ids_count[ id ] < level.zombie_network_choke_ids_max[ id ]; -} - -network_choke_action( id, choke_action, arg1, arg2, arg3 ) //checked matches cerberus output -{ -/* -/# - assert( isDefined( level.zombie_network_choke_ids_max[ id ] ), "Network Choke: " + id + " undefined" ); -#/ -*/ - while ( !network_choke_safe( id ) ) - { - wait 0.05; - } - level.zombie_network_choke_ids_count[ id ]++; - if ( !isDefined( arg1 ) ) - { - return [[ choke_action ]](); - } - if ( !isDefined( arg2 ) ) - { - return [[ choke_action ]]( arg1 ); - } - if ( !isDefined( arg3 ) ) - { - return [[ choke_action ]]( arg1, arg2 ); - } - return [[ choke_action ]]( arg1, arg2, arg3 ); -} - -network_entity_valid( entity ) //checked matches cerberus output -{ - if ( !isDefined( entity ) ) - { - return 0; - } - return 1; -} - -network_safe_init( id, max ) //checked matches cerberus output -{ - if ( !isDefined( level.zombie_network_choke_ids_max ) || !isDefined( level.zombie_network_choke_ids_max[ id ] ) ) - { - network_choke_init( id, max ); - } - /* -/# - assert( max == level.zombie_network_choke_ids_max[ id ] ); -#/ - */ -} - -_network_safe_spawn( classname, origin ) //checked matches cerberus output -{ - return spawn( classname, origin ); -} - -network_safe_spawn( id, max, classname, origin ) //checked matches cerberus output -{ - network_safe_init( id, max ); - return network_choke_action( id, ::_network_safe_spawn, classname, origin ); -} - -_network_safe_play_fx_on_tag( fx, entity, tag ) //checked matches cerberus output -{ - if ( network_entity_valid( entity ) ) - { - playfxontag( fx, entity, tag ); - } -} - -network_safe_play_fx_on_tag( id, max, fx, entity, tag ) //checked matches cerberus output -{ - network_safe_init( id, max ); - network_choke_action( id, ::_network_safe_play_fx_on_tag, fx, entity, tag ); -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_perk_electric_cherry.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_perk_electric_cherry.gsc deleted file mode 100644 index ab7409c..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_perk_electric_cherry.gsc +++ /dev/null @@ -1,381 +0,0 @@ -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/animscripts/shared; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -enable_electric_cherry_perk_for_level() //checked matches cerberus output -{ - register_perk_basic_info( "specialty_grenadepulldeath", "electric_cherry", 2000, &"ZM_PRISON_PERK_CHERRY", "zombie_perk_bottle_cherry" ); - register_perk_precache_func( "specialty_grenadepulldeath", ::electic_cherry_precache ); - register_perk_clientfields( "specialty_grenadepulldeath", ::electric_cherry_register_clientfield, ::electric_cherry_set_clientfield ); - register_perk_threads( "specialty_grenadepulldeath", ::electric_cherry_reload_attack, ::electric_cherry_perk_lost ); - register_perk_machine( "specialty_grenadepulldeath", ::electric_cherry_perk_machine_setup, ::electric_cherry_perk_machine_think ); - register_perk_host_migration_func( "specialty_grenadepulldeath", ::electric_cherry_host_migration_func ); - if ( is_true( level.custom_electric_cherry_perk_threads ) ) - { - level thread [[ level.custom_electric_cherry_perk_threads ]](); - } -} - -init_electric_cherry() //checked matches cerberus output -{ - level.custom_laststand_func = ::electric_cherry_laststand; - set_zombie_var( "tesla_head_gib_chance", 50 ); - registerclientfield( "allplayers", "electric_cherry_reload_fx", 9000, 2, "int" ); -} - -electic_cherry_precache() //checked matches cerberus output -{ - precacheitem( "zombie_perk_bottle_cherry" ); - precacheshader( "specialty_fastreload_zombies" ); - precachemodel( "p6_zm_vending_electric_cherry_off" ); - precachemodel( "p6_zm_vending_electric_cherry_on" ); - precachestring( &"ZM_PRISON_PERK_CHERRY" ); - level._effect[ "electriccherry" ] = loadfx( "misc/fx_zombie_cola_on" ); - level._effect[ "electric_cherry_explode" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_down" ); - level._effect[ "electric_cherry_reload_small" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_sm" ); - level._effect[ "electric_cherry_reload_medium" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_player" ); - level._effect[ "electric_cherry_reload_large" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_lg" ); - level._effect[ "tesla_shock" ] = loadfx( "maps/zombie/fx_zombie_tesla_shock" ); - level._effect[ "tesla_shock_secondary" ] = loadfx( "maps/zombie/fx_zombie_tesla_shock_secondary" ); -} - -electric_cherry_register_clientfield() //checked matches cerberus output -{ - registerclientfield( "toplayer", "perk_electric_cherry", 9000, 1, "int" ); -} - -electric_cherry_set_clientfield( state ) //checked matches cerberus output -{ - self setclientfieldtoplayer( "perk_electric_cherry", state ); -} - -electric_cherry_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collision ) //checked matches cerberus output -{ - use_trigger.script_sound = "mus_perks_cherry_jingle"; - use_trigger.script_string = "electric_cherry_perk"; - use_trigger.script_label = "mus_perks_cherry_sting"; - use_trigger.target = "vending_electriccherry"; - perk_machine.script_string = "electriccherry_perk"; - perk_machine.targetname = "vendingelectric_cherry"; - if ( isDefined( bump_trigger ) ) - { - bump_trigger.script_string = "electriccherry_perk"; - } -} - -electric_cherry_perk_machine_think() //checked changed to match cerberus output -{ - init_electric_cherry(); - while ( 1 ) - { - machine = getentarray( "vendingelectric_cherry", "targetname" ); - machine_triggers = getentarray( "vending_electriccherry", "target" ); - for ( i = 0; i < machine.size; i++ ) - { - machine[ i ] setmodel( "p6_zm_vending_electric_cherry_off" ); - } - level thread do_initial_power_off_callback( machine, "electriccherry" ); - array_thread( machine_triggers, ::set_power_on, 0 ); - level waittill( "electric_cherry_on" ); - for ( i = 0; i < machine.size; i++ ) - { - machine[ i ] setmodel( "p6_zm_vending_electric_cherry_on" ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "electriccherry" ); - machine[ i ] thread play_loop_on_machine(); - } - level notify( "specialty_grenadepulldeath_power_on" ); - array_thread( machine_triggers, ::set_power_on, 1 ); - level waittill( "electric_cherry_off" ); - array_thread( machine, ::turn_perk_off ); - } -} - -electric_cherry_host_migration_func() //checked changed to match cerberus output -{ - a_electric_cherry_perk_machines = getentarray( "vending_electriccherry", "targetname" ); - foreach ( perk_machine in a_electric_cherry_perk_machines ) - { - if ( isDefined( perk_machine.model ) && perk_machine.model == "p6_zm_vending_electric_cherry_on" ) - { - perk_machine perk_fx( undefined, 1 ); - perk_machine thread perk_fx( "electriccherry" ); - } - } -} - -electric_cherry_laststand() //checked changed to match cerberus output -{ - visionsetlaststand( "zombie_last_stand", 1 ); - if ( isDefined( self ) ) - { - playfx( level._effect[ "electric_cherry_explode" ], self.origin ); - self playsound( "zmb_cherry_explode" ); - self notify( "electric_cherry_start" ); - wait 0.05; - a_zombies = get_round_enemy_array(); - a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, 500 ); - for ( i = 0; i < a_zombies.size; i++) - { - if ( isalive( self ) ) - { - if ( a_zombies[ i ].health <= 1000 ) - { - a_zombies[ i ] thread electric_cherry_death_fx(); - if ( isdefined( self.cherry_kills ) ) - { - self.cherry_kills++; - } - self maps/mp/zombies/_zm_score::add_to_player_score( 40 ); - } - else - { - a_zombies[ i ] thread electric_cherry_stun(); - a_zombies[ i ] thread electric_cherry_shock_fx(); - } - wait 0.1 ; - a_zombies[ i ] dodamage( 1000, self.origin, self, self, "none" ); - } - } - self notify( "electric_cherry_end" ); - } -} - -electric_cherry_death_fx() //checked matches cerberus output -{ - self endon( "death" ); - tag = "J_SpineUpper"; - fx = "tesla_shock"; - if ( self.isdog ) - { - tag = "J_Spine1"; - } - self playsound( "zmb_elec_jib_zombie" ); - network_safe_play_fx_on_tag( "tesla_death_fx", 2, level._effect[ fx ], self, tag ); - if ( isDefined( self.tesla_head_gib_func ) && !self.head_gibbed ) - { - [[ self.tesla_head_gib_func ]](); - } -} - -electric_cherry_shock_fx() //checked matches cerberus output -{ - self endon( "death" ); - tag = "J_SpineUpper"; - fx = "tesla_shock_secondary"; - if ( self.isdog ) - { - tag = "J_Spine1"; - } - self playsound( "zmb_elec_jib_zombie" ); - network_safe_play_fx_on_tag( "tesla_shock_fx", 2, level._effect[ fx ], self, tag ); -} - -electric_cherry_stun() //checked changed to match cerberus output -{ - self endon( "death" ); - self notify( "stun_zombie" ); - self endon( "stun_zombie" ); - if ( self.health <= 0 ) - { - /* -/# - iprintln( "trying to stun a dead zombie" ); -#/ - */ - return; - } - if ( self.ai_state != "find_flesh" ) - { - return; - } - self.forcemovementscriptstate = 1; - self.ignoreall = 1; - for ( i = 0; i < 2; i++ ) - { - self animscripted( self.origin, self.angles, "zm_afterlife_stun" ); - self maps/mp/animscripts/shared::donotetracks( "stunned" ); - } - self.forcemovementscriptstate = 0; - self.ignoreall = 0; - self setgoalpos( self.origin ); - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); -} - -electric_cherry_reload_attack() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "stop_electric_cherry_reload_attack" ); - self.wait_on_reload = []; - self.consecutive_electric_cherry_attacks = 0; - while ( 1 ) - { - self waittill( "reload_start" ); - str_current_weapon = self getcurrentweapon(); - while ( isinarray( self.wait_on_reload, str_current_weapon ) ) - { - continue; - } - self.wait_on_reload[ self.wait_on_reload.size ] = str_current_weapon; - self.consecutive_electric_cherry_attacks++; - n_clip_current = self getweaponammoclip( str_current_weapon ); - n_clip_max = weaponclipsize( str_current_weapon ); - n_fraction = n_clip_current / n_clip_max; - perk_radius = linear_map( n_fraction, 1, 0, 32, 128 ); - perk_dmg = linear_map( n_fraction, 1, 0, 1, 1045 ); - self thread check_for_reload_complete( str_current_weapon ); - if ( isDefined( self ) ) - { - switch( self.consecutive_electric_cherry_attacks ) - { - case 0: - case 1: - n_zombie_limit = undefined; - break; - case 2: - n_zombie_limit = 8; - break; - case 3: - n_zombie_limit = 4; - break; - case 4: - n_zombie_limit = 2; - break; - case default: - n_zombie_limit = 0; - } - self thread electric_cherry_cooldown_timer( str_current_weapon ); - if ( isDefined( n_zombie_limit ) && n_zombie_limit == 0 ) - { - continue; - } - self thread electric_cherry_reload_fx( n_fraction ); - self notify( "electric_cherry_start" ); - self playsound( "zmb_cherry_explode" ); - a_zombies = get_round_enemy_array(); - a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, perk_radius ); - n_zombies_hit = 0; - for ( i = 0; i < a_zombies.size; i++ ) - { - if ( isalive( self ) ) - { - if ( isDefined( n_zombie_limit ) ) - { - if ( n_zombies_hit < n_zombie_limit ) - { - n_zombies_hit++; - } - else - { - break; - } - } - if ( a_zombies[ i ].health <= perk_dmg ) - { - a_zombies[ i ] thread electric_cherry_death_fx(); - if ( isDefined( self.cherry_kills ) ) - { - self.cherry_kills++; - } - self maps/mp/zombies/_zm_score::add_to_player_score( 40 ); - } - else if ( !isDefined( a_zombies[ i ].is_brutus ) ) - { - a_zombies[ i ] thread electric_cherry_stun(); - } - a_zombies[ i ] thread electric_cherry_shock_fx(); - wait 0.1; - a_zombies[ i ] dodamage( perk_dmg, self.origin, self, self, "none" ); - } - } - self notify( "electric_cherry_end" ); - } - } -} - -electric_cherry_cooldown_timer( str_current_weapon ) //checked matches cerberus output -{ - self notify( "electric_cherry_cooldown_started" ); - self endon( "electric_cherry_cooldown_started" ); - self endon( "death" ); - self endon( "disconnect" ); - n_reload_time = weaponreloadtime( str_current_weapon ); - if ( self hasperk( "specialty_fastreload" ) ) - { - n_reload_time *= getDvarFloat( "perk_weapReloadMultiplier" ); - } - n_cooldown_time = n_reload_time + 3; - wait n_cooldown_time; - self.consecutive_electric_cherry_attacks = 0; -} - -check_for_reload_complete( weapon ) //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "player_lost_weapon_" + weapon ); - self thread weapon_replaced_monitor( weapon ); - while ( 1 ) - { - self waittill( "reload" ); - str_current_weapon = self getcurrentweapon(); - if ( str_current_weapon == weapon ) - { - arrayremovevalue( self.wait_on_reload, weapon ); - self notify( "weapon_reload_complete_" + weapon ); - break; - } - } -} - -weapon_replaced_monitor( weapon ) //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "weapon_reload_complete_" + weapon ); - while ( 1 ) - { - self waittill( "weapon_change" ); - primaryweapons = self getweaponslistprimaries(); - if ( !isinarray( primaryweapons, weapon ) ) - { - self notify( "player_lost_weapon_" + weapon ); - arrayremovevalue( self.wait_on_reload, weapon ); - break; - } - } -} - -electric_cherry_reload_fx( n_fraction ) //checked matches cerberus output -{ - if ( n_fraction >= 0.67 ) - { - self setclientfield( "electric_cherry_reload_fx", 1 ); - } - else if ( n_fraction >= 0.33 && n_fraction < 0.67 ) - { - self setclientfield( "electric_cherry_reload_fx", 2 ); - } - else - { - self setclientfield( "electric_cherry_reload_fx", 3 ); - } - wait 1; - self setclientfield( "electric_cherry_reload_fx", 0 ); -} - -electric_cherry_perk_lost() //checked matches cerberus output -{ - self notify( "stop_electric_cherry_reload_attack" ); -} - - - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_perks.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_perks.gsc deleted file mode 100644 index fc9c614..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_perks.gsc +++ /dev/null @@ -1,3931 +0,0 @@ -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/_visionset_mgr; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/_demo; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_pers_upgrades_functions; -#include maps/mp/zombies/_zm_power; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; -#include maps/mp/zombies/_zm_magicbox; - -init() //checked partially changed to match cerberus output -{ - level.additionalprimaryweapon_limit = 3; - level.perk_purchase_limit = 4; - if ( !level.createfx_enabled ) - { - perks_register_clientfield(); //fixed - } - if ( !level.enable_magic ) - { - return; - } - initialize_custom_perk_arrays(); - perk_machine_spawn_init(); - vending_weapon_upgrade_trigger = []; - vending_triggers = getentarray( "zombie_vending", "targetname" ); - for ( i = 0; i < vending_triggers.size; i++ ) - { - if ( isDefined( vending_triggers[ i ].script_noteworthy ) && vending_triggers[ i ].script_noteworthy == "specialty_weapupgrade" ) - { - vending_weapon_upgrade_trigger[ vending_weapon_upgrade_trigger.size ] = vending_triggers[ i ]; - arrayremovevalue( vending_triggers, vending_triggers[ i ] ); - } - } - old_packs = getentarray( "zombie_vending_upgrade", "targetname" ); - i = 0; - for ( i = 0; i < old_packs.size; i++ ) - { - vending_weapon_upgrade_trigger[ vending_weapon_upgrade_trigger.size ] = old_packs[ i ]; - } - flag_init( "pack_machine_in_use" ); - if ( vending_triggers.size < 1 ) - { - return; - } - if ( vending_weapon_upgrade_trigger.size >= 1 ) - { - array_thread( vending_weapon_upgrade_trigger, ::vending_weapon_upgrade ); - } - level.machine_assets = []; - if ( !isDefined( level.custom_vending_precaching ) ) - { - level.custom_vending_precaching = ::default_vending_precaching; - } - [[ level.custom_vending_precaching ]](); - if ( !isDefined( level.packapunch_timeout ) ) - { - level.packapunch_timeout = 15; - } - set_zombie_var( "zombie_perk_cost", 2000 ); - set_zombie_var( "zombie_perk_juggernaut_health", 160 ); - set_zombie_var( "zombie_perk_juggernaut_health_upgrade", 190 ); - array_thread( vending_triggers, ::vending_trigger_think ); - array_thread( vending_triggers, ::electric_perks_dialog ); - - if ( is_true( level.zombiemode_using_doubletap_perk ) ) - { - level thread turn_doubletap_on(); - } - if ( is_true( level.zombiemode_using_marathon_perk ) ) - { - level thread turn_marathon_on(); - } - if ( is_true( level.zombiemode_using_juggernaut_perk ) ) - { - level thread turn_jugger_on(); - } - if ( is_true( level.zombiemode_using_revive_perk ) ) - { - level thread turn_revive_on(); - } - if ( is_true( level.zombiemode_using_sleightofhand_perk ) ) - { - level thread turn_sleight_on(); - } - if ( is_true( level.zombiemode_using_deadshot_perk ) ) - { - level thread turn_deadshot_on(); - } - if ( is_true( level.zombiemode_using_tombstone_perk ) ) - { - level thread turn_tombstone_on(); - } - if ( is_true( level.zombiemode_using_additionalprimaryweapon_perk ) ) - { - level thread turn_additionalprimaryweapon_on(); - } - if ( is_true( level.zombiemode_using_chugabud_perk ) ) - { - level thread turn_chugabud_on(); - } - if ( level._custom_perks.size > 0 ) - { - a_keys = getarraykeys( level._custom_perks ); - for ( i = 0; i < a_keys.size; i++ ) - { - if ( isdefined( level._custom_perks[ a_keys[ i ] ].perk_machine_thread ) ) - { - level thread [[ level._custom_perks[ a_keys[ i ] ].perk_machine_thread ]](); - } - } - } - if ( isDefined( level._custom_turn_packapunch_on ) ) - { - level thread [[ level._custom_turn_packapunch_on ]](); - } - else - { - level thread turn_packapunch_on(); - } - if ( isDefined( level.quantum_bomb_register_result_func ) ) - { - [[ level.quantum_bomb_register_result_func ]]( "give_nearest_perk", ::quantum_bomb_give_nearest_perk_result, 10, ::quantum_bomb_give_nearest_perk_validation ); - } - level thread perk_hostmigration(); - -} - -default_vending_precaching() //checked changed to match cerberus output -{ - if ( is_true( level.zombiemode_using_pack_a_punch ) ) - { - precacheitem( "zombie_knuckle_crack" ); - precachemodel( "p6_anim_zm_buildable_pap" ); - precachemodel( "p6_anim_zm_buildable_pap_on" ); - precachestring( &"ZOMBIE_PERK_PACKAPUNCH" ); - precachestring( &"ZOMBIE_PERK_PACKAPUNCH_ATT" ); - level._effect[ "packapunch_fx" ] = loadfx( "maps/zombie/fx_zombie_packapunch" ); - level.machine_assets[ "packapunch" ] = spawnstruct(); - level.machine_assets[ "packapunch" ].weapon = "zombie_knuckle_crack"; - level.machine_assets[ "packapunch" ].off_model = "p6_anim_zm_buildable_pap"; - level.machine_assets[ "packapunch" ].on_model = "p6_anim_zm_buildable_pap_on"; - } - if ( is_true( level.zombiemode_using_additionalprimaryweapon_perk ) ) - { - precacheitem( "zombie_perk_bottle_additionalprimaryweapon" ); - precacheshader( "specialty_additionalprimaryweapon_zombies" ); - precachemodel( "zombie_vending_three_gun" ); - precachemodel( "zombie_vending_three_gun_on" ); - precachestring( &"ZOMBIE_PERK_ADDITIONALWEAPONPERK" ); - level._effect[ "additionalprimaryweapon_light" ] = loadfx( "misc/fx_zombie_cola_arsenal_on" ); - level.machine_assets[ "additionalprimaryweapon" ] = spawnstruct(); - level.machine_assets[ "additionalprimaryweapon" ].weapon = "zombie_perk_bottle_additionalprimaryweapon"; - level.machine_assets[ "additionalprimaryweapon" ].off_model = "zombie_vending_three_gun"; - level.machine_assets[ "additionalprimaryweapon" ].on_model = "zombie_vending_three_gun_on"; - } - if ( is_true( level.zombiemode_using_deadshot_perk ) ) - { - precacheitem( "zombie_perk_bottle_deadshot" ); - precacheshader( "specialty_ads_zombies" ); - precachemodel( "zombie_vending_ads" ); - precachemodel( "zombie_vending_ads_on" ); - precachestring( &"ZOMBIE_PERK_DEADSHOT" ); - level._effect[ "deadshot_light" ] = loadfx( "misc/fx_zombie_cola_dtap_on" ); - level.machine_assets[ "deadshot" ] = spawnstruct(); - level.machine_assets[ "deadshot" ].weapon = "zombie_perk_bottle_deadshot"; - level.machine_assets[ "deadshot" ].off_model = "zombie_vending_ads"; - level.machine_assets[ "deadshot" ].on_model = "zombie_vending_ads_on"; - } - if ( is_true( level.zombiemode_using_doubletap_perk ) ) - { - precacheitem( "zombie_perk_bottle_doubletap" ); - precacheshader( "specialty_doubletap_zombies" ); - precachemodel( "zombie_vending_doubletap2" ); - precachemodel( "zombie_vending_doubletap2_on" ); - precachestring( &"ZOMBIE_PERK_DOUBLETAP" ); - level._effect[ "doubletap_light" ] = loadfx( "misc/fx_zombie_cola_dtap_on" ); - level.machine_assets[ "doubletap" ] = spawnstruct(); - level.machine_assets[ "doubletap" ].weapon = "zombie_perk_bottle_doubletap"; - level.machine_assets[ "doubletap" ].off_model = "zombie_vending_doubletap2"; - level.machine_assets[ "doubletap" ].on_model = "zombie_vending_doubletap2_on"; - } - if ( is_true( level.zombiemode_using_juggernaut_perk ) ) - { - precacheitem( "zombie_perk_bottle_jugg" ); - precacheshader( "specialty_juggernaut_zombies" ); - precachemodel( "zombie_vending_jugg" ); - precachemodel( "zombie_vending_jugg_on" ); - precachestring( &"ZOMBIE_PERK_JUGGERNAUT" ); - level._effect[ "jugger_light" ] = loadfx( "misc/fx_zombie_cola_jugg_on" ); - level.machine_assets[ "juggernog" ] = spawnstruct(); - level.machine_assets[ "juggernog" ].weapon = "zombie_perk_bottle_jugg"; - level.machine_assets[ "juggernog" ].off_model = "zombie_vending_jugg"; - level.machine_assets[ "juggernog" ].on_model = "zombie_vending_jugg_on"; - } - if ( is_true( level.zombiemode_using_marathon_perk ) ) - { - precacheitem( "zombie_perk_bottle_marathon" ); - precacheshader( "specialty_marathon_zombies" ); - precachemodel( "zombie_vending_marathon" ); - precachemodel( "zombie_vending_marathon_on" ); - precachestring( &"ZOMBIE_PERK_MARATHON" ); - level._effect[ "marathon_light" ] = loadfx( "maps/zombie/fx_zmb_cola_staminup_on" ); - level.machine_assets[ "marathon" ] = spawnstruct(); - level.machine_assets[ "marathon" ].weapon = "zombie_perk_bottle_marathon"; - level.machine_assets[ "marathon" ].off_model = "zombie_vending_marathon"; - level.machine_assets[ "marathon" ].on_model = "zombie_vending_marathon_on"; - } - if ( is_true( level.zombiemode_using_revive_perk ) ) - { - precacheitem( "zombie_perk_bottle_revive" ); - precacheshader( "specialty_quickrevive_zombies" ); - precachemodel( "zombie_vending_revive" ); - precachemodel( "zombie_vending_revive_on" ); - precachestring( &"ZOMBIE_PERK_QUICKREVIVE" ); - level._effect[ "revive_light" ] = loadfx( "misc/fx_zombie_cola_revive_on" ); - level._effect[ "revive_light_flicker" ] = loadfx( "maps/zombie/fx_zmb_cola_revive_flicker" ); - level.machine_assets[ "revive" ] = spawnstruct(); - level.machine_assets[ "revive" ].weapon = "zombie_perk_bottle_revive"; - level.machine_assets[ "revive" ].off_model = "zombie_vending_revive"; - level.machine_assets[ "revive" ].on_model = "zombie_vending_revive_on"; - } - if ( is_true( level.zombiemode_using_sleightofhand_perk ) ) - { - precacheitem( "zombie_perk_bottle_sleight" ); - precacheshader( "specialty_fastreload_zombies" ); - precachemodel( "zombie_vending_sleight" ); - precachemodel( "zombie_vending_sleight_on" ); - precachestring( &"ZOMBIE_PERK_FASTRELOAD" ); - level._effect[ "sleight_light" ] = loadfx( "misc/fx_zombie_cola_on" ); - level.machine_assets[ "speedcola" ] = spawnstruct(); - level.machine_assets[ "speedcola" ].weapon = "zombie_perk_bottle_sleight"; - level.machine_assets[ "speedcola" ].off_model = "zombie_vending_sleight"; - level.machine_assets[ "speedcola" ].on_model = "zombie_vending_sleight_on"; - } - if ( is_true( level.zombiemode_using_tombstone_perk ) ) - { - precacheitem( "zombie_perk_bottle_tombstone" ); - precacheshader( "specialty_tombstone_zombies" ); - precachemodel( "zombie_vending_tombstone" ); - precachemodel( "zombie_vending_tombstone_on" ); - precachemodel( "ch_tombstone1" ); - precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); - level._effect[ "tombstone_light" ] = loadfx( "misc/fx_zombie_cola_on" ); - level.machine_assets[ "tombstone" ] = spawnstruct(); - level.machine_assets[ "tombstone" ].weapon = "zombie_perk_bottle_tombstone"; - level.machine_assets[ "tombstone" ].off_model = "zombie_vending_tombstone"; - level.machine_assets[ "tombstone" ].on_model = "zombie_vending_tombstone_on"; - } - if ( is_true( level.zombiemode_using_chugabud_perk ) ) - { - precacheitem( "zombie_perk_bottle_whoswho" ); - precacheshader( "specialty_quickrevive_zombies" ); - precachemodel( "p6_zm_vending_chugabud" ); - precachemodel( "p6_zm_vending_chugabud_on" ); - precachemodel( "ch_tombstone1" ); - precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); - level._effect[ "tombstone_light" ] = loadfx( "misc/fx_zombie_cola_on" ); - level.machine_assets[ "whoswho" ] = spawnstruct(); - level.machine_assets[ "whoswho" ].weapon = "zombie_perk_bottle_whoswho"; - level.machine_assets[ "whoswho" ].off_model = "p6_zm_vending_chugabud"; - level.machine_assets[ "whoswho" ].on_model = "p6_zm_vending_chugabud_on"; - } - if ( level._custom_perks.size > 0 ) //changed - { - a_keys = getarraykeys( level._custom_perks ); - for ( i = 0; i < a_keys.size; i++ ) - { - if ( isdefined( level._custom_perks[ a_keys[ i ] ].precache_func ) ) - { - level [[ level._custom_perks[ a_keys[ i ] ].precache_func ]](); - } - } - } -} - -pap_weapon_move_in( trigger, origin_offset, angles_offset ) //checked matches cerberus output -{ - level endon( "Pack_A_Punch_off" ); - trigger endon( "pap_player_disconnected" ); - trigger.worldgun rotateto( self.angles + angles_offset + vectorScale( ( 0, 1, 0 ), 90 ), 0.35, 0, 0 ); - offsetdw = vectorScale( ( 1, 1, 1 ), 3 ); - if ( isDefined( trigger.worldgun.worldgundw ) ) - { - trigger.worldgun.worldgundw rotateto( self.angles + angles_offset + vectorScale( ( 0, 1, 0 ), 90 ), 0.35, 0, 0 ); - } - wait 0.5; - trigger.worldgun moveto( self.origin + origin_offset, 0.5, 0, 0 ); - if ( isDefined( trigger.worldgun.worldgundw ) ) - { - trigger.worldgun.worldgundw moveto( self.origin + origin_offset + offsetdw, 0.5, 0, 0 ); - } -} - -pap_weapon_move_out( trigger, origin_offset, interact_offset ) //checked matches cerberus output -{ - level endon( "Pack_A_Punch_off" ); - trigger endon( "pap_player_disconnected" ); - offsetdw = vectorScale( ( 1, 1, 1 ), 3 ); - if ( !isDefined( trigger.worldgun ) ) - { - return; - } - trigger.worldgun moveto( self.origin + interact_offset, 0.5, 0, 0 ); - if ( isDefined( trigger.worldgun.worldgundw ) ) - { - trigger.worldgun.worldgundw moveto( self.origin + interact_offset + offsetdw, 0.5, 0, 0 ); - } - wait 0.5; - if ( !isDefined( trigger.worldgun ) ) - { - return; - } - trigger.worldgun moveto( self.origin + origin_offset, level.packapunch_timeout, 0, 0 ); - if ( isDefined( trigger.worldgun.worldgundw ) ) - { - trigger.worldgun.worldgundw moveto( self.origin + origin_offset + offsetdw, level.packapunch_timeout, 0, 0 ); - } -} - -fx_ent_failsafe() //checked matches cerberus output -{ - wait 25; - self delete(); -} - -third_person_weapon_upgrade( current_weapon, upgrade_weapon, packa_rollers, perk_machine, trigger ) //checked matches cerberus output -{ - level endon( "Pack_A_Punch_off" ); - trigger endon( "pap_player_disconnected" ); - rel_entity = trigger.perk_machine; - origin_offset = ( 0, 0, 0 ); - angles_offset = ( 0, 0, 0 ); - origin_base = self.origin; - angles_base = self.angles; - if ( isDefined( rel_entity ) ) - { - if ( isDefined( level.pap_interaction_height ) ) - { - origin_offset = ( 0, 0, level.pap_interaction_height ); - } - else - { - origin_offset = vectorScale( ( 0, 0, 1 ), 35 ); - } - angles_offset = vectorScale( ( 0, 1, 0 ), 90 ); - origin_base = rel_entity.origin; - angles_base = rel_entity.angles; - } - else - { - rel_entity = self; - } - forward = anglesToForward( angles_base + angles_offset ); - interact_offset = origin_offset + ( forward * -25 ); - if ( !isDefined( perk_machine.fx_ent ) ) - { - perk_machine.fx_ent = spawn( "script_model", origin_base + origin_offset + ( 0, 1, -34 ) ); - perk_machine.fx_ent.angles = angles_base + angles_offset; - perk_machine.fx_ent setmodel( "tag_origin" ); - perk_machine.fx_ent linkto( perk_machine ); - } - if ( isDefined( level._effect[ "packapunch_fx" ] ) ) - { - fx = playfxontag( level._effect[ "packapunch_fx" ], perk_machine.fx_ent, "tag_origin" ); - } - offsetdw = vectorScale( ( 1, 1, 1 ), 3 ); - weoptions = self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( current_weapon ); - trigger.worldgun = spawn_weapon_model( current_weapon, undefined, origin_base + interact_offset, self.angles, weoptions ); - worldgundw = undefined; - if ( maps/mp/zombies/_zm_magicbox::weapon_is_dual_wield( current_weapon ) ) - { - worldgundw = spawn_weapon_model( current_weapon, maps/mp/zombies/_zm_magicbox::get_left_hand_weapon_model_name( current_weapon ), origin_base + interact_offset + offsetdw, self.angles, weoptions ); - } - trigger.worldgun.worldgundw = worldgundw; - if ( isDefined( level.custom_pap_move_in ) ) - { - perk_machine [[ level.custom_pap_move_in ]]( trigger, origin_offset, angles_offset, perk_machine ); - } - else - { - perk_machine pap_weapon_move_in( trigger, origin_offset, angles_offset ); - } - self playsound( "zmb_perks_packa_upgrade" ); - if ( isDefined( perk_machine.wait_flag ) ) - { - perk_machine.wait_flag rotateto( perk_machine.wait_flag.angles + vectorScale( ( 1, 0, 0 ), 179 ), 0.25, 0, 0 ); - } - wait 0.35; - trigger.worldgun delete(); - if ( isDefined( worldgundw ) ) - { - worldgundw delete(); - } - wait 3; - if ( isDefined( self ) ) - { - self playsound( "zmb_perks_packa_ready" ); - } - else - { - return; - } - upoptions = self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( upgrade_weapon ); - trigger.current_weapon = current_weapon; - trigger.upgrade_name = upgrade_weapon; - trigger.worldgun = spawn_weapon_model( upgrade_weapon, undefined, origin_base + origin_offset, angles_base + angles_offset + vectorScale( ( 0, 1, 0 ), 90 ), upoptions ); - worldgundw = undefined; - if ( maps/mp/zombies/_zm_magicbox::weapon_is_dual_wield( upgrade_weapon ) ) - { - worldgundw = spawn_weapon_model( upgrade_weapon, maps/mp/zombies/_zm_magicbox::get_left_hand_weapon_model_name( upgrade_weapon ), origin_base + origin_offset + offsetdw, angles_base + angles_offset + vectorScale( ( 0, -1, 0 ), 90 ), upoptions ); - } - trigger.worldgun.worldgundw = worldgundw; - if ( isDefined( perk_machine.wait_flag ) ) - { - perk_machine.wait_flag rotateto( perk_machine.wait_flag.angles - vectorScale( ( 1, 0, 0 ), 179 ), 0.25, 0, 0 ); - } - if ( isDefined( level.custom_pap_move_out ) ) - { - rel_entity thread [[ level.custom_pap_move_out ]]( trigger, origin_offset, interact_offset ); - } - else - { - rel_entity thread pap_weapon_move_out( trigger, origin_offset, interact_offset ); - } - return trigger.worldgun; -} - -can_pack_weapon( weaponname ) //checked did not match cebrerus output changed at own discretion -{ - if ( weaponname == "riotshield_zm" ) - { - return 0; - } - if ( flag( "pack_machine_in_use" ) ) - { - return 1; - } - weaponname = self get_nonalternate_weapon( weaponname ); - if ( !maps/mp/zombies/_zm_weapons::is_weapon_or_base_included( weaponname ) ) - { - return 0; - } - if ( !self maps/mp/zombies/_zm_weapons::can_upgrade_weapon( weaponname ) ) - { - return 0; - } - return 1; -} - -player_use_can_pack_now() //checked changed to match cerberus output -{ - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || is_true( self.intermission ) || self isthrowinggrenade() ) - { - return 0; - } - if ( !self can_buy_weapon() ) - { - return 0; - } - if ( self hacker_active() ) - { - return 0; - } - if ( !self can_pack_weapon( self getcurrentweapon() ) ) - { - return 0; - } - return 1; -} - -vending_machine_trigger_think() //changed 3/30/20 4:17 pm //checked matches cerberus output -{ - self endon("death"); - self endon("Pack_A_Punch_off"); - while( 1 ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( isdefined( self.pack_player ) && self.pack_player != players[ i ] || !players[ i ] player_use_can_pack_now() ) - { - self setinvisibletoplayer( players[ i ], 1 ); - i++; - continue; - } - self setinvisibletoplayer( players[ i ], 0 ); - i++; - } - wait 0.1; - } -} - -vending_weapon_upgrade() //checked matches cerberus output -{ - level endon( "Pack_A_Punch_off" ); - wait 0.01; - perk_machine = getent( self.target, "targetname" ); - self.perk_machine = perk_machine; - perk_machine_sound = getentarray( "perksacola", "targetname" ); - packa_rollers = spawn( "script_origin", self.origin ); - packa_timer = spawn( "script_origin", self.origin ); - packa_rollers linkto( self ); - packa_timer linkto( self ); - if ( isDefined( perk_machine.target ) ) - { - perk_machine.wait_flag = getent( perk_machine.target, "targetname" ); - } - pap_is_buildable = self is_buildable(); - if ( pap_is_buildable ) - { - self trigger_off(); - perk_machine hide(); - if ( isDefined( perk_machine.wait_flag ) ) - { - perk_machine.wait_flag hide(); - } - wait_for_buildable( "pap" ); - self trigger_on(); - perk_machine show(); - if ( isDefined( perk_machine.wait_flag ) ) - { - perk_machine.wait_flag show(); - } - } - self usetriggerrequirelookat(); - self sethintstring( &"ZOMBIE_NEED_POWER" ); - self setcursorhint( "HINT_NOICON" ); - power_off = !self maps/mp/zombies/_zm_power::pap_is_on(); - if ( power_off ) - { - pap_array = []; - pap_array[ 0 ] = perk_machine; - level thread do_initial_power_off_callback( pap_array, "packapunch" ); - level waittill( "Pack_A_Punch_on" ); - } - self enable_trigger(); - if ( isDefined( level.machine_assets[ "packapunch" ].power_on_callback ) ) - { - perk_machine thread [[ level.machine_assets[ "packapunch" ].power_on_callback ]](); - } - self thread vending_machine_trigger_think(); - perk_machine playloopsound( "zmb_perks_packa_loop" ); - self thread shutoffpapsounds( perk_machine, packa_rollers, packa_timer ); - self thread vending_weapon_upgrade_cost(); - for ( ;; ) - { - self.pack_player = undefined; - self waittill( "trigger", player ); - index = maps/mp/zombies/_zm_weapons::get_player_index( player ); - current_weapon = player getcurrentweapon(); - current_weapon = player maps/mp/zombies/_zm_weapons::switch_from_alt_weapon( current_weapon ); - if ( isDefined( level.custom_pap_validation ) ) - { - valid = self [[ level.custom_pap_validation ]]( player ); - if ( !valid ) - { - continue; - } - } - if ( player maps/mp/zombies/_zm_magicbox::can_buy_weapon() && !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() && !is_true( player.intermission ) || player isthrowinggrenade() && !player maps/mp/zombies/_zm_weapons::can_upgrade_weapon( current_weapon ) ) - { - wait 0.1; - continue; - } - if ( is_true( level.pap_moving ) ) - { - continue; - } - if ( player isswitchingweapons() ) - { - wait 0.1; - if ( player isswitchingweapons() ) - { - continue; - } - } - if ( !maps/mp/zombies/_zm_weapons::is_weapon_or_base_included( current_weapon ) ) - { - continue; - } - - current_cost = self.cost; - player.restore_ammo = undefined; - player.restore_clip = undefined; - player.restore_stock = undefined; - player_restore_clip_size = undefined; - player.restore_max = undefined; - upgrade_as_attachment = will_upgrade_weapon_as_attachment( current_weapon ); - if ( upgrade_as_attachment ) - { - current_cost = self.attachment_cost; - player.restore_ammo = 1; - player.restore_clip = player getweaponammoclip( current_weapon ); - player.restore_clip_size = weaponclipsize( current_weapon ); - player.restore_stock = player getweaponammostock( current_weapon ); - player.restore_max = weaponmaxammo( current_weapon ); - } - if ( player maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() ) - { - current_cost = player maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_double_points_cost( current_cost ); - } - if ( player.score < current_cost ) - { - self playsound( "deny" ); - if ( isDefined( level.custom_pap_deny_vo_func ) ) - { - player [[ level.custom_pap_deny_vo_func ]](); - } - else - { - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); - } - continue; - } - - self.pack_player = player; - flag_set( "pack_machine_in_use" ); - maps/mp/_demo::bookmark( "zm_player_use_packapunch", getTime(), player ); - player maps/mp/zombies/_zm_stats::increment_client_stat( "use_pap" ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "use_pap" ); - self thread destroy_weapon_in_blackout( player ); - self thread destroy_weapon_on_disconnect( player ); - player maps/mp/zombies/_zm_score::minus_to_player_score( current_cost, 1 ); - sound = "evt_bottle_dispense"; - playsoundatposition( sound, self.origin ); - self thread maps/mp/zombies/_zm_audio::play_jingle_or_stinger( "mus_perks_packa_sting" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "upgrade_wait" ); - self disable_trigger(); - if ( !is_true( upgrade_as_attachment ) ) - { - player thread do_player_general_vox( "general", "pap_wait", 10, 100 ); - } - else - { - player thread do_player_general_vox( "general", "pap_wait2", 10, 100 ); - } - player thread do_knuckle_crack(); - self.current_weapon = current_weapon; - upgrade_name = maps/mp/zombies/_zm_weapons::get_upgrade_weapon( current_weapon, upgrade_as_attachment ); - player third_person_weapon_upgrade( current_weapon, upgrade_name, packa_rollers, perk_machine, self ); - self enable_trigger(); - self sethintstring( &"ZOMBIE_GET_UPGRADED" ); - if ( isDefined( player ) ) - { - self setinvisibletoall(); - self setvisibletoplayer( player ); - self thread wait_for_player_to_take( player, current_weapon, packa_timer, upgrade_as_attachment ); - } - self thread wait_for_timeout( current_weapon, packa_timer, player ); - self waittill_any( "pap_timeout", "pap_taken", "pap_player_disconnected" ); - self.current_weapon = ""; - if ( isDefined( self.worldgun ) && isDefined( self.worldgun.worldgundw ) ) - { - self.worldgun.worldgundw delete(); - } - if ( isDefined( self.worldgun ) ) - { - self.worldgun delete(); - } - if ( is_true( level.zombiemode_reusing_pack_a_punch ) ) - { - self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH_ATT", self.cost ); - } - else - { - self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH", self.cost ); - } - self setvisibletoall(); - self.pack_player = undefined; - flag_clear( "pack_machine_in_use" ); - } -} - -shutoffpapsounds( ent1, ent2, ent3 ) //checked matches cerberus output -{ - while ( 1 ) - { - level waittill( "Pack_A_Punch_off" ); - level thread turnonpapsounds( ent1 ); - ent1 stoploopsound( 0.1 ); - ent2 stoploopsound( 0.1 ); - ent3 stoploopsound( 0.1 ); - } -} - -turnonpapsounds( ent ) //checked 3/30/20 4:18 pm //checked matches cerberus output -{ - level waittill( "Pack_A_Punch_on" ); - ent playloopsound( "zmb_perks_packa_loop" ); -} - -vending_weapon_upgrade_cost() //checked 3/30/20 4:19 pm //checked matches cerberus output -{ - level endon( "Pack_A_Punch_off" ); - while ( 1 ) - { - self.cost = 5000; - self.attachment_cost = 2000; - if ( is_true( level.zombiemode_reusing_pack_a_punch ) ) - { - self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH_ATT", self.cost ); - } - else - { - self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH", self.cost ); - } - level waittill( "powerup bonfire sale" ); - self.cost = 1000; - self.attachment_cost = 1000; - if ( is_true( level.zombiemode_reusing_pack_a_punch ) ) - { - self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH_ATT", self.cost ); - } - else - { - self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH", self.cost ); - } - level waittill( "bonfire_sale_off" ); - } -} - -wait_for_player_to_take( player, weapon, packa_timer, upgrade_as_attachment ) //changed 3/30/20 4:22 pm //checked matches cerberus output -{ - current_weapon = self.current_weapon; - upgrade_name = self.upgrade_name; - /* -/# - assert( isDefined( current_weapon ), "wait_for_player_to_take: weapon does not exist" ); -#/ -/# - assert( isDefined( upgrade_name ), "wait_for_player_to_take: upgrade_weapon does not exist" ); -#/ - */ - upgrade_weapon = upgrade_name; - self endon( "pap_timeout" ); - level endon( "Pack_A_Punch_off" ); - while ( 1 ) - { - packa_timer playloopsound( "zmb_perks_packa_ticktock" ); - self waittill( "trigger", trigger_player ); - if ( is_true( level.pap_grab_by_anyone ) ) - { - player = trigger_player; - } - - packa_timer stoploopsound( 0.05 ); - if ( trigger_player == player ) //working - { - player maps/mp/zombies/_zm_stats::increment_client_stat( "pap_weapon_grabbed" ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "pap_weapon_grabbed" ); - current_weapon = player getcurrentweapon(); - /* -/# - if ( current_weapon == "none" ) - { - iprintlnbold( "WEAPON IS NONE, PACKAPUNCH RETRIEVAL DENIED" ); -#/ - } - */ - if ( is_player_valid( player ) && !player.is_drinking && !is_placeable_mine( current_weapon ) && !is_equipment( current_weapon ) && level.revive_tool != current_weapon && current_weapon != "none" && !player hacker_active() ) - { - maps/mp/_demo::bookmark( "zm_player_grabbed_packapunch", getTime(), player ); - self notify( "pap_taken" ); - player notify( "pap_taken" ); - player.pap_used = 1; - if ( !is_true( upgrade_as_attachment ) ) - { - player thread do_player_general_vox( "general", "pap_arm", 15, 100 ); - } - else - { - player thread do_player_general_vox( "general", "pap_arm2", 15, 100 ); - } - weapon_limit = get_player_weapon_limit( player ); - player maps/mp/zombies/_zm_weapons::take_fallback_weapon(); - primaries = player getweaponslistprimaries(); - if ( isDefined( primaries ) && primaries.size >= weapon_limit ) - { - player maps/mp/zombies/_zm_weapons::weapon_give( upgrade_weapon ); - } - else - { - player giveweapon( upgrade_weapon, 0, player maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( upgrade_weapon ) ); - player givestartammo( upgrade_weapon ); - } - player switchtoweapon( upgrade_weapon ); - if ( is_true( player.restore_ammo ) ) - { - new_clip = player.restore_clip + ( weaponclipsize( upgrade_weapon ) - player.restore_clip_size ); - new_stock = player.restore_stock + ( weaponmaxammo( upgrade_weapon ) - player.restore_max ); - player setweaponammostock( upgrade_weapon, new_stock ); - player setweaponammoclip( upgrade_weapon, new_clip ); - } - player.restore_ammo = undefined; - player.restore_clip = undefined; - player.restore_stock = undefined; - player.restore_max = undefined; - player.restore_clip_size = undefined; - player maps/mp/zombies/_zm_weapons::play_weapon_vo( upgrade_weapon ); - return; - } - } - //wait 0.05; - } -} - -wait_for_timeout( weapon, packa_timer, player ) //checked //checked matches cerberus output -{ - self endon( "pap_taken" ); - self endon( "pap_player_disconnected" ); - self thread wait_for_disconnect( player ); - wait level.packapunch_timeout; - self notify( "pap_timeout" ); - packa_timer stoploopsound( 0.05 ); - packa_timer playsound( "zmb_perks_packa_deny" ); - maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( weapon ); - if ( isDefined( player ) ) - { - player maps/mp/zombies/_zm_stats::increment_client_stat( "pap_weapon_not_grabbed" ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "pap_weapon_not_grabbed" ); - } -} - -wait_for_disconnect( player ) //checked //checked matches cerberus output -{ - self endon( "pap_taken" ); - self endon( "pap_timeout" ); - name = player.name; - while ( isDefined( player ) ) - { - wait 0.1; - } - self notify( "pap_player_disconnected" ); -} - -destroy_weapon_on_disconnect( player ) //checked //checked matches cerberus output -{ - self endon( "pap_timeout" ); - self endon( "pap_taken" ); - level endon( "Pack_A_Punch_off" ); - player waittill( "disconnect" ); - if ( isDefined( self.worldgun ) ) - { - if ( isDefined( self.worldgun.worldgundw ) ) - { - self.worldgun.worldgundw delete(); - } - self.worldgun delete(); - } -} - -destroy_weapon_in_blackout( player ) //checked //checked matches cerberus output -{ - self endon( "pap_timeout" ); - self endon( "pap_taken" ); - self endon( "pap_player_disconnected" ); - level waittill( "Pack_A_Punch_off" ); - if ( isDefined( self.worldgun ) ) - { - self.worldgun rotateto( self.worldgun.angles + ( randomint( 90 ) - 45, 0, randomint( 360 ) - 180 ), 1.5, 0, 0 ); - player playlocalsound( level.zmb_laugh_alias ); - wait 1.5; - if ( isDefined( self.worldgun.worldgundw ) ) - { - self.worldgun.worldgundw delete(); - } - self.worldgun delete(); - } -} - -do_knuckle_crack() //checked //checked matches cerberus output -{ - self endon( "disconnect" ); - gun = self upgrade_knuckle_crack_begin(); - self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); - self upgrade_knuckle_crack_end( gun ); -} - -upgrade_knuckle_crack_begin() //checked matches cerberus output -{ - self increment_is_drinking(); - self disable_player_move_states( 1 ); - primaries = self getweaponslistprimaries(); - gun = self getcurrentweapon(); - weapon = level.machine_assets[ "packapunch" ].weapon; - if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) - { - self notify( "zmb_lost_knife" ); - self takeweapon( gun ); - } - else - { - return; - } - self giveweapon( weapon ); - self switchtoweapon( weapon ); - return gun; -} - -upgrade_knuckle_crack_end( gun ) //changed //checked matches cerberus output -{ -/* -/# - assert( !is_zombie_perk_bottle( gun ) ); -#/ -/# - assert( gun != level.revive_tool ); -#/ -*/ - self enable_player_move_states(); - weapon = level.machine_assets[ "packapunch" ].weapon; - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || is_true( self.intermission ) ) - { - self takeweapon( weapon ); - return; - } - self decrement_is_drinking(); - self takeweapon( weapon ); - primaries = self getweaponslistprimaries(); - if ( self.is_drinking > 0 ) - { - return; - } - else if ( isDefined( primaries ) && primaries.size > 0 ) - { - self switchtoweapon( primaries[ 0 ] ); - } - else if ( self hasweapon( level.laststandpistol ) ) - { - self switchtoweapon( level.laststandpistol ); - } - else - { - self maps/mp/zombies/_zm_weapons::give_fallback_weapon(); - } -} - -turn_packapunch_on() //checked changed to match cerberus output -{ - vending_weapon_upgrade_trigger = getentarray( "specialty_weapupgrade", "script_noteworthy" ); - level.pap_triggers = vending_weapon_upgrade_trigger; - for ( i = 0; i < vending_weapon_upgrade_trigger.size; i++ ) - { - perk = getent( vending_weapon_upgrade_trigger[ i ].target, "targetname" ); - if ( isDefined( perk ) ) - { - perk setmodel( level.machine_assets[ "packapunch" ].off_model ); - } - } - for ( ;; ) - { - level waittill( "Pack_A_Punch_on" ); - for ( i = 0; i < vending_weapon_upgrade_trigger.size; i++ ) - { - perk = getent( vending_weapon_upgrade_trigger[ i ].target, "targetname" ); - if ( isDefined( perk ) ) - { - perk thread activate_packapunch(); - } - } - level waittill( "Pack_A_Punch_off" ); - for ( i = 0; i < vending_weapon_upgrade_trigger.size; i++ ) - { - perk = getent( vending_weapon_upgrade_trigger[ i ].target, "targetname" ); - if ( isDefined( perk ) ) - { - perk thread deactivate_packapunch(); - } - } - } -} - -activate_packapunch() //checked matches cerberus output -{ - self setmodel( level.machine_assets[ "packapunch" ].on_model ); - self playsound( "zmb_perks_power_on" ); - self vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); - timer = 0; - duration = 0.05; -} - -deactivate_packapunch() //checked matches cerberus output -{ - self setmodel( level.machine_assets[ "packapunch" ].off_model ); -} - -do_initial_power_off_callback( machine_array, perkname ) //checked matches cerberus output -{ - if ( !isDefined( level.machine_assets[ perkname ] ) ) - { - /* -/# - println( "Error: doing setup for a machine with no level.machine_assets! Check your perk initialization!" ); -#/ - */ - return; - } - if ( !isDefined( level.machine_assets[ perkname ].power_off_callback ) ) - { - return; - } - wait 0.05; - array_thread( machine_array, level.machine_assets[ perkname ].power_off_callback ); -} - -turn_sleight_on() //checked changed to match cerberus output -{ - while ( 1 ) - { - machine = getentarray( "vending_sleight", "targetname" ); - machine_triggers = getentarray( "vending_sleight", "target" ); - for ( i = 0; i < machine.size; i++ ) - { - machine[ i ] setmodel( level.machine_assets[ "speedcola" ].off_model ); - } - level thread do_initial_power_off_callback( machine, "speedcola" ); - array_thread( machine_triggers, ::set_power_on, 0 ); - level waittill( "sleight_on" ); - for ( i = 0; i < machine.size; i++ ) - { - machine[ i ] setmodel( level.machine_assets[ "speedcola" ].on_model ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "sleight_light" ); - machine[ i ] thread play_loop_on_machine(); - } - array_thread( machine_triggers, ::set_power_on, 1 ); - if ( isDefined( level.machine_assets[ "speedcola" ].power_on_callback ) ) - { - array_thread( machine, level.machine_assets[ "speedcola" ].power_on_callback ); - } - level notify( "specialty_fastreload_power_on" ); - level waittill( "sleight_off" ); - array_thread( machine, ::turn_perk_off ); - if ( isDefined( level.machine_assets[ "speedcola" ].power_off_callback ) ) - { - array_thread( machine, level.machine_assets[ "speedcola" ].power_off_callback ); - } - } -} - -use_solo_revive() //checked matches cerberus output -{ - if ( isDefined( level.using_solo_revive ) ) - { - return level.using_solo_revive; - } - players = get_players(); - solo_mode = 0; - if ( players.size == 1 || is_true( level.force_solo_quick_revive ) ) - { - solo_mode = 1; - } - level.using_solo_revive = solo_mode; - return solo_mode; -} - -turn_revive_on() //checked partially changed to match cerberus output -{ - level endon( "stop_quickrevive_logic" ); - machine = getentarray( "vending_revive", "targetname" ); - machine_triggers = getentarray( "vending_revive", "target" ); - machine_model = undefined; - machine_clip = undefined; - if ( !is_true( level.zombiemode_using_revive_perk ) ) - { - return; - } - flag_wait( "start_zombie_round_logic" ); - players = get_players(); - solo_mode = 0; - if ( use_solo_revive() ) - { - solo_mode = 1; - } - start_state = 0; - start_state = solo_mode; - while ( 1 ) - { - machine = getentarray( "vending_revive", "targetname" ); - machine_triggers = getentarray( "vending_revive", "target" ); - for ( i = 0; i < machine.size; i++ ) - { - if ( flag_exists( "solo_game" ) && flag_exists( "solo_revive" ) && flag( "solo_game" ) && flag( "solo_revive" ) ) - { - machine[ i ] hide(); - } - machine[ i ] setmodel( level.machine_assets[ "revive" ].off_model ); - if ( isDefined( level.quick_revive_final_pos ) ) - { - level.quick_revive_default_origin = level.quick_revive_final_pos; - } - if ( !isDefined( level.quick_revive_default_origin ) ) - { - level.quick_revive_default_origin = machine[ i ].origin; - level.quick_revive_default_angles = machine[ i ].angles; - } - level.quick_revive_machine = machine[ i ]; - } - array_thread( machine_triggers, ::set_power_on, 0 ); - if ( !is_true( start_state ) ) - { - level waittill( "revive_on" ); - } - start_state = 0; - i = 0; - while ( i < machine.size ) - { - if ( isDefined( machine[ i ].classname ) && machine[ i ].classname == "script_model" ) - { - if ( isDefined( machine[ i ].script_noteworthy ) && machine[ i ].script_noteworthy == "clip" ) - { - machine_clip = machine[ i ]; - i++; - continue; - } - machine[ i ] setmodel( level.machine_assets[ "revive" ].on_model ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); - machine_model = machine[ i ]; - machine[ i ] thread perk_fx( "revive_light" ); - machine[ i ] notify( "stop_loopsound" ); - machine[ i ] thread play_loop_on_machine(); - if ( isDefined( machine_triggers[ i ] ) ) - { - machine_clip = machine_triggers[ i ].clip; - } - if ( isDefined( machine_triggers[ i ] ) ) - { - blocker_model = machine_triggers[ i ].blocker_model; - } - } - i++; - } - wait_network_frame(); - if ( solo_mode && isDefined( machine_model ) && !is_true( machine_model.ishidden ) ) - { - machine_model thread revive_solo_fx( machine_clip, blocker_model ); - } - array_thread( machine_triggers, ::set_power_on, 1 ); - if ( isDefined( level.machine_assets[ "revive" ].power_on_callback ) ) - { - array_thread( machine, level.machine_assets[ "revive" ].power_on_callback ); - } - level notify( "specialty_quickrevive_power_on" ); - if ( isDefined( machine_model ) ) - { - machine_model.ishidden = 0; - } - notify_str = level waittill_any_return( "revive_off", "revive_hide" ); - should_hide = 0; - if ( notify_str == "revive_hide" ) - { - should_hide = 1; - } - if ( isDefined( level.machine_assets[ "revive" ].power_off_callback ) ) - { - array_thread( machine, level.machine_assets[ "revive" ].power_off_callback ); - } - for ( i = 0; i < machine.size; i++ ) - { - if ( isDefined( machine[ i ].classname ) && machine[ i ].classname == "script_model" ) - { - machine[ i ] turn_perk_off( should_hide ); - } - } - } -} - -revive_solo_fx( machine_clip, blocker_model ) //checked matches cerberus output -{ - if ( level flag_exists( "solo_revive" ) && flag( "solo_revive" ) && !flag( "solo_game" ) ) - { - return; - } - if ( isDefined( machine_clip ) ) - { - level.quick_revive_machine_clip = machine_clip; - } - if ( !isDefined( level.solo_revive_init ) ) - { - level.solo_revive_init = 1; - flag_init( "solo_revive" ); - } - level notify( "revive_solo_fx" ); - level endon( "revive_solo_fx" ); - self endon( "death" ); - flag_wait( "solo_revive" ); - if ( isDefined( level.revive_solo_fx_func ) ) - { - level thread [[ level.revive_solo_fx_func ]](); - } - wait 2; - self playsound( "zmb_box_move" ); - playsoundatposition( "zmb_whoosh", self.origin ); - if ( isDefined( self._linked_ent ) ) - { - self unlink(); - } - self moveto( self.origin + vectorScale( ( 0, 0, 1 ), 40 ), 3 ); - if ( isDefined( level.custom_vibrate_func ) ) - { - [[ level.custom_vibrate_func ]]( self ); - } - else - { - direction = self.origin; - direction = ( direction[ 1 ], direction[ 0 ], 0 ); - if ( direction[ 1 ] < 0 || direction[ 0 ] > 0 && direction[ 1 ] > 0 ) - { - direction = ( direction[ 0 ], direction[ 1 ] * -1, 0 ); - } - else - { - if ( direction[ 0 ] < 0 ) - { - direction = ( direction[ 0 ] * -1, direction[ 1 ], 0 ); - } - } - self vibrate( direction, 10, 0.5, 5 ); - } - self waittill( "movedone" ); - playfx( level._effect[ "poltergeist" ], self.origin ); - playsoundatposition( "zmb_box_poof", self.origin ); - level clientnotify( "drb" ); - if ( isDefined( self.fx ) ) - { - self.fx unlink(); - self.fx delete(); - } - if ( isDefined( machine_clip ) ) - { - machine_clip trigger_off(); - machine_clip connectpaths(); - } - if ( isDefined( blocker_model ) ) - { - blocker_model show(); - } - level notify( "revive_hide" ); -} - -turn_jugger_on() //checked changed to match cerberus output -{ - while ( 1 ) - { - machine = getentarray( "vending_jugg", "targetname" ); - machine_triggers = getentarray( "vending_jugg", "target" ); - for ( i = 0; i < machine.size; i++ ) - { - machine[ i ] setmodel( level.machine_assets[ "juggernog" ].off_model ); - } - level thread do_initial_power_off_callback( machine, "juggernog" ); - array_thread( machine_triggers, ::set_power_on, 0 ); - level waittill( "juggernog_on" ); - for ( i = 0; i < machine.size; i++ ) - { - machine[ i ] setmodel( level.machine_assets[ "juggernog" ].on_model ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "jugger_light" ); - machine[ i ] thread play_loop_on_machine(); - } - level notify( "specialty_armorvest_power_on" ); - array_thread( machine_triggers, ::set_power_on, 1 ); - if ( isDefined( level.machine_assets[ "juggernog" ].power_on_callback ) ) - { - array_thread( machine, level.machine_assets[ "juggernog" ].power_on_callback ); - } - level waittill( "juggernog_off" ); - if ( isDefined( level.machine_assets[ "juggernog" ].power_off_callback ) ) - { - array_thread( machine, level.machine_assets[ "juggernog" ].power_off_callback ); - } - array_thread( machine, ::turn_perk_off ); - } -} - -turn_doubletap_on() //checked changed to match cerberus output -{ - while ( 1 ) - { - machine = getentarray( "vending_doubletap", "targetname" ); - machine_triggers = getentarray( "vending_doubletap", "target" ); - for ( i = 0; i < machine.size; i++ ) - { - machine[ i ] setmodel( level.machine_assets[ "doubletap" ].off_model ); - } - level thread do_initial_power_off_callback( machine, "doubletap" ); - array_thread( machine_triggers, ::set_power_on, 0 ); - level waittill( "doubletap_on" ); - for ( i = 0; i < machine.size; i++ ) - { - machine[ i ] setmodel( level.machine_assets[ "doubletap" ].on_model ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "doubletap_light" ); - machine[ i ] thread play_loop_on_machine(); - } - level notify( "specialty_rof_power_on" ); - array_thread( machine_triggers, ::set_power_on, 1 ); - if ( isDefined( level.machine_assets[ "doubletap" ].power_on_callback ) ) - { - array_thread( machine, level.machine_assets[ "doubletap" ].power_on_callback ); - } - level waittill( "doubletap_off" ); - if ( isDefined( level.machine_assets[ "doubletap" ].power_off_callback ) ) - { - array_thread( machine, level.machine_assets[ "doubletap" ].power_off_callback ); - } - array_thread( machine, ::turn_perk_off ); - } -} - -turn_marathon_on() //checked changed to match cerberus output -{ - while ( 1 ) - { - machine = getentarray( "vending_marathon", "targetname" ); - machine_triggers = getentarray( "vending_marathon", "target" ); - for ( i = 0; i < machine.size; i++ ) - { - machine[ i ] setmodel( level.machine_assets[ "marathon" ].off_model ); - } - array_thread( machine_triggers, ::set_power_on, 0 ); - level thread do_initial_power_off_callback( machine, "marathon" ); - level waittill( "marathon_on" ); - for ( i = 0; i < machine.size; i++ ) - { - machine[ i ] setmodel( level.machine_assets[ "marathon" ].on_model ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "marathon_light" ); - machine[ i ] thread play_loop_on_machine(); - i++; - } - level notify( "specialty_longersprint_power_on" ); - array_thread( machine_triggers, ::set_power_on, 1 ); - if ( isDefined( level.machine_assets[ "marathon" ].power_on_callback ) ) - { - array_thread( machine, level.machine_assets[ "marathon" ].power_on_callback ); - } - level waittill( "marathon_off" ); - if ( isDefined( level.machine_assets[ "marathon" ].power_off_callback ) ) - { - array_thread( machine, level.machine_assets[ "marathon" ].power_off_callback ); - } - array_thread( machine, ::turn_perk_off ); - } -} - -turn_deadshot_on() //checked changed to match cerberus output -{ - while ( 1 ) - { - machine = getentarray( "vending_deadshot_model", "targetname" ); - machine_triggers = getentarray( "vending_deadshot", "target" ); - for ( i = 0; i < machine.size; i++ ) - { - machine[ i ] setmodel( level.machine_assets[ "deadshot" ].off_model ); - } - level thread do_initial_power_off_callback( machine, "deadshot" ); - array_thread( machine_triggers, ::set_power_on, 0 ); - level waittill( "deadshot_on" ); - for ( i = 0; i < machine.size; i++ ) - { - machine[ i ] setmodel( level.machine_assets[ "deadshot" ].on_model ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "deadshot_light" ); - machine[ i ] thread play_loop_on_machine(); - } - level notify( "specialty_deadshot_power_on" ); - array_thread( machine_triggers, ::set_power_on, 1 ); - if ( isDefined( level.machine_assets[ "deadshot" ].power_on_callback ) ) - { - array_thread( machine, level.machine_assets[ "deadshot" ].power_on_callback ); - } - level waittill( "deadshot_off" ); - if ( isDefined( level.machine_assets[ "deadshot" ].power_off_callback ) ) - { - array_thread( machine, level.machine_assets[ "deadshot" ].power_off_callback ); - } - array_thread( machine, ::turn_perk_off ); - } -} - -turn_tombstone_on() //checked changed to match cerberus output -{ - level endon( "tombstone_removed" ); - while ( 1 ) - { - machine = getentarray( "vending_tombstone", "targetname" ); - machine_triggers = getentarray( "vending_tombstone", "target" ); - for ( i = 0; i < machine.size; i++ ) - { - machine[ i ] setmodel( level.machine_assets[ "tombstone" ].off_model ); - } - level thread do_initial_power_off_callback( machine, "tombstone" ); - array_thread( machine_triggers, ::set_power_on, 0 ); - level waittill( "tombstone_on" ); - for ( i = 0; i < machine.size; i++ ) - { - machine[ i ] setmodel( level.machine_assets[ "tombstone" ].on_model ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "tombstone_light" ); - machine[ i ] thread play_loop_on_machine(); - } - level notify( "specialty_scavenger_power_on" ); - array_thread( machine_triggers, ::set_power_on, 1 ); - if ( isDefined( level.machine_assets[ "tombstone" ].power_on_callback ) ) - { - array_thread( machine, level.machine_assets[ "tombstone" ].power_on_callback ); - } - level waittill( "tombstone_off" ); - if ( isDefined( level.machine_assets[ "tombstone" ].power_off_callback ) ) - { - array_thread( machine, level.machine_assets[ "tombstone" ].power_off_callback ); - } - array_thread( machine, ::turn_perk_off ); - players = get_players(); - foreach ( player in players ) - { - player.hasperkspecialtytombstone = undefined; - } - } -} - -turn_additionalprimaryweapon_on() //checked changed to match cerberus output -{ - while ( 1 ) - { - machine = getentarray( "vending_additionalprimaryweapon", "targetname" ); - machine_triggers = getentarray( "vending_additionalprimaryweapon", "target" ); - for ( i = 0; i < machine.size; i++ ) - { - machine[ i ] setmodel( level.machine_assets[ "additionalprimaryweapon" ].off_model ); - } - level thread do_initial_power_off_callback( machine, "additionalprimaryweapon" ); - array_thread( machine_triggers, ::set_power_on, 0 ); - level waittill( "additionalprimaryweapon_on" ); - for ( i = 0; i < machine.size; i++ ) - { - machine[ i ] setmodel( level.machine_assets[ "additionalprimaryweapon" ].on_model ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "additionalprimaryweapon_light" ); - machine[ i ] thread play_loop_on_machine(); - } - level notify( "specialty_additionalprimaryweapon_power_on" ); - array_thread( machine_triggers, ::set_power_on, 1 ); - if ( isDefined( level.machine_assets[ "additionalprimaryweapon" ].power_on_callback ) ) - { - array_thread( machine, level.machine_assets[ "additionalprimaryweapon" ].power_on_callback ); - } - level waittill( "additionalprimaryweapon_off" ); - if ( isDefined( level.machine_assets[ "additionalprimaryweapon" ].power_off_callback ) ) - { - array_thread( machine, level.machine_assets[ "additionalprimaryweapon" ].power_off_callback ); - } - array_thread( machine, ::turn_perk_off ); - } -} - -turn_chugabud_on() //checked changed to match cerberus output -{ - maps/mp/zombies/_zm_chugabud::init(); - if ( isDefined( level.vsmgr_prio_visionset_zm_whos_who ) ) - { - maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_whos_who", 5000, level.vsmgr_prio_visionset_zm_whos_who, 1, 1 ); - } - while ( 1 ) - { - machine = getentarray( "vending_chugabud", "targetname" ); - machine_triggers = getentarray( "vending_chugabud", "target" ); - for ( i = 0; i < machine.size; i++ ) - { - machine[ i ] setmodel( level.machine_assets[ "whoswho" ].off_model ); - } - level thread do_initial_power_off_callback( machine, "whoswho" ); - array_thread( machine_triggers, ::set_power_on, 0 ); - level waittill( "chugabud_on" ); - for ( i = 0; i < machine.size; i++ ) - { - machine[ i ] setmodel( level.machine_assets[ "whoswho" ].on_model ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "tombstone_light" ); - machine[ i ] thread play_loop_on_machine(); - } - level notify( "specialty_finalstand_power_on" ); - array_thread( machine_triggers, ::set_power_on, 1 ); - if ( isDefined( level.machine_assets[ "whoswho" ].power_on_callback ) ) - { - array_thread( machine, level.machine_assets[ "whoswho" ].power_on_callback ); - } - level waittill( "chugabud_off" ); - if ( isDefined( level.machine_assets[ "whoswho" ].power_off_callback ) ) - { - array_thread( machine, level.machine_assets[ "whoswho" ].power_off_callback ); - } - array_thread( machine, ::turn_perk_off ); - players = get_players(); - foreach ( player in players ) - { - player.hasperkspecialtychugabud = undefined; - } - } -} - -set_power_on( state ) //checked matches cerberus output -{ - self.power_on = state; -} - -turn_perk_off( ishidden ) //checked matches cerberus output -{ - self notify( "stop_loopsound" ); - newmachine = spawn( "script_model", self.origin ); - newmachine.angles = self.angles; - newmachine.targetname = self.targetname; - if ( is_true( ishidden ) ) - { - newmachine.ishidden = 1; - newmachine hide(); - } - self delete(); -} - -play_loop_on_machine() //checked matches cerberus output -{ - if ( isDefined( level.sndperksacolaloopoverride ) ) - { - return; - } - sound_ent = spawn( "script_origin", self.origin ); - sound_ent playloopsound( "zmb_perks_machine_loop" ); - sound_ent linkto( self ); - self waittill( "stop_loopsound" ); - sound_ent unlink(); - sound_ent delete(); -} - -perk_fx( fx, turnofffx ) //checked matches cerberus output -{ - if ( isDefined( turnofffx ) ) - { - self.perk_fx = 0; - } - else - { - wait 3; - if ( isDefined( self ) && !is_true( self.perk_fx ) ) - { - playfxontag( level._effect[ fx ], self, "tag_origin" ); - self.perk_fx = 1; - } - } -} - -electric_perks_dialog() //checked partially changed to match cerberus output -{ - self endon( "death" ); - wait 0.01; - flag_wait( "start_zombie_round_logic" ); - players = get_players(); - if ( players.size == 1 ) - { - return; - } - self endon( "warning_dialog" ); - level endon( "switch_flipped" ); - timer = 0; - while ( 1 ) - { - wait 0.5; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ] ) ) - { - i++; - continue; - } - else - { - dist = distancesquared( players[ i ].origin, self.origin ); - } - if ( dist > 4900 ) - { - timer = 0; - i++; - continue; - } - else if ( dist < 4900 && timer < 3 ) - { - wait 0.5; - timer++; - } - if ( dist < 4900 && timer == 3 ) - { - if ( !isDefined( players[ i ] ) ) - { - i++; - continue; - } - players[ i ] thread do_player_vo( "vox_start", 5 ); - wait 3; - self notify( "warning_dialog" ); - /* -/# - iprintlnbold( "warning_given" ); -#/ - */ - } - i++; - } - } -} - -reset_vending_hint_string() //checked matches cerberus output -{ - perk = self.script_noteworthy; - solo = maps/mp/zombies/_zm_perks::use_solo_revive(); - switch( perk ) - { - case "specialty_armorvest": - case "specialty_armorvest_upgrade": - self sethintstring( &"ZOMBIE_PERK_JUGGERNAUT", self.cost ); - break; - case "specialty_quickrevive": - case "specialty_quickrevive_upgrade": - if ( solo ) - { - self sethintstring( &"ZOMBIE_PERK_QUICKREVIVE_SOLO", self.cost ); - } - else - { - self sethintstring( &"ZOMBIE_PERK_QUICKREVIVE", self.cost ); - } - break; - case "specialty_fastreload": - case "specialty_fastreload_upgrade": - self sethintstring( &"ZOMBIE_PERK_FASTRELOAD", self.cost ); - break; - case "specialty_rof": - case "specialty_rof_upgrade": - self sethintstring( &"ZOMBIE_PERK_DOUBLETAP", self.cost ); - break; - case "specialty_longersprint": - case "specialty_longersprint_upgrade": - self sethintstring( &"ZOMBIE_PERK_MARATHON", self.cost ); - break; - case "specialty_deadshot": - case "specialty_deadshot_upgrade": - self sethintstring( &"ZOMBIE_PERK_DEADSHOT", self.cost ); - break; - case "specialty_additionalprimaryweapon": - case "specialty_additionalprimaryweapon_upgrade": - self sethintstring( &"ZOMBIE_PERK_ADDITIONALPRIMARYWEAPON", self.cost ); - break; - case "specialty_scavenger": - case "specialty_scavenger_upgrade": - self sethintstring( &"ZOMBIE_PERK_TOMBSTONE", self.cost ); - break; - case "specialty_finalstand": - case "specialty_finalstand_upgrade": - self sethintstring( &"ZOMBIE_PERK_CHUGABUD", self.cost ); - break; - default: - self sethintstring( ( perk + " Cost: " ) + level.zombie_vars[ "zombie_perk_cost" ] ); - } - if ( isDefined( level._custom_perks ) ) - { - if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].cost ) && isDefined( level._custom_perks[ perk ].hint_string ) ) - { - self sethintstring( level._custom_perks[ perk ].hint_string, level._custom_perks[ perk ].cost ); - } - } -} - -vending_trigger_think() //checked changed to match cerberus output -{ - self endon( "death" ); - wait 0.01; - perk = self.script_noteworthy; - solo = 0; - start_on = 0; - level.revive_machine_is_solo = 0; - - if ( isdefined( perk ) && perk == "specialty_quickrevive" || perk == "specialty_quickrevive_upgrade" ) - { - flag_wait("start_zombie_round_logic"); - solo = use_solo_revive(); - self endon("stop_quickrevive_logic"); - level.quick_revive_trigger = self; - if( solo ) - { - if ( !is_true( level.revive_machine_is_solo ) ) - { - start_on = 1; - players = get_players(); - foreach ( player in players ) - { - if ( !isdefined( player.lives ) ) - { - player.lives = 0; - } - } - level maps/mp/zombies/_zm::set_default_laststand_pistol( 1 ); - } - level.revive_machine_is_solo = 1; - } - } - self sethintstring( &"ZOMBIE_NEED_POWER" ); - self setcursorhint( "HINT_NOICON" ); - self usetriggerrequirelookat(); - cost = level.zombie_vars[ "zombie_perk_cost" ]; - switch( perk ) - { - case "specialty_armorvest": - case "specialty_armorvest_upgrade": - cost = 2500; - break; - case "specialty_quickrevive": - case "specialty_quickrevive_upgrade": - if ( solo ) - { - cost = 500; - } - else - { - cost = 1500; - } - break; - case "specialty_fastreload": - case "specialty_fastreload_upgrade": - cost = 3000; - break; - case "specialty_rof": - case "specialty_rof_upgrade": - cost = 2000; - break; - case "specialty_longersprint": - case "specialty_longersprint_upgrade": - cost = 2000; - break; - case "specialty_deadshot": - case "specialty_deadshot_upgrade": - cost = 1500; - break; - case "specialty_additionalprimaryweapon": - case "specialty_additionalprimaryweapon_upgrade": - cost = 4000; - break; - } - if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].cost ) ) - { - cost = level._custom_perks[ perk ].cost; - } - self.cost = cost; - if ( !start_on ) - { - notify_name = perk + "_power_on"; - level waittill( notify_name ); - } - start_on = 0; - if ( !isDefined( level._perkmachinenetworkchoke ) ) - { - level._perkmachinenetworkchoke = 0; - } - else - { - level._perkmachinenetworkchoke++; - } - for ( i = 0; i < level._perkmachinenetworkchoke; i++ ) - { - wait_network_frame(); - } - self thread maps/mp/zombies/_zm_audio::perks_a_cola_jingle_timer(); - self thread check_player_has_perk( perk ); - switch( perk ) - { - case "specialty_armorvest": - case "specialty_armorvest_upgrade": - self sethintstring( &"ZOMBIE_PERK_JUGGERNAUT", cost ); - break; - case "specialty_quickrevive": - case "specialty_quickrevive_upgrade": - if ( solo ) - { - self sethintstring( &"ZOMBIE_PERK_QUICKREVIVE_SOLO", cost ); - } - else - { - self sethintstring( &"ZOMBIE_PERK_QUICKREVIVE", cost ); - } - break; - case "specialty_fastreload": - case "specialty_fastreload_upgrade": - self sethintstring( &"ZOMBIE_PERK_FASTRELOAD", cost ); - break; - case "specialty_rof": - case "specialty_rof_upgrade": - self sethintstring( &"ZOMBIE_PERK_DOUBLETAP", cost ); - break; - case "specialty_longersprint": - case "specialty_longersprint_upgrade": - self sethintstring( &"ZOMBIE_PERK_MARATHON", cost ); - break; - case "specialty_deadshot": - case "specialty_deadshot_upgrade": - self sethintstring( &"ZOMBIE_PERK_DEADSHOT", cost ); - break; - case "specialty_additionalprimaryweapon": - case "specialty_additionalprimaryweapon_upgrade": - self sethintstring( &"ZOMBIE_PERK_ADDITIONALPRIMARYWEAPON", cost ); - break; - case "specialty_scavenger": - case "specialty_scavenger_upgrade": - self sethintstring( &"ZOMBIE_PERK_TOMBSTONE", cost ); - break; - case "specialty_finalstand": - case "specialty_finalstand_upgrade": - self sethintstring( &"ZOMBIE_PERK_CHUGABUD", cost ); - break; - default: - self sethintstring( ( perk + " Cost: " ) + level.zombie_vars[ "zombie_perk_cost" ] ); - } - if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].hint_string ) ) - { - self sethintstring( level._custom_perks[ perk ].hint_string, cost ); - } - for ( ;; ) - { - self waittill( "trigger", player ); - index = maps/mp/zombies/_zm_weapons::get_player_index( player ); - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || is_true( player.intermission ) ) - { - wait 0.1; - continue; - } - if ( player in_revive_trigger() ) - { - wait 0.1; - continue; - } - if ( !player maps/mp/zombies/_zm_magicbox::can_buy_weapon() ) - { - wait 0.1; - continue; - } - if ( player isthrowinggrenade() ) - { - wait 0.1; - continue; - } - if ( player isswitchingweapons() ) - { - wait 0.1; - continue; - } - if ( player.is_drinking > 0 ) - { - wait 0.1; - continue; - } - if ( player hasperk( perk ) || player has_perk_paused( perk ) ) - { - cheat = 0; - /* -/# - if ( getDvarInt( "zombie_cheat" ) >= 5 ) - { - cheat = 1; -#/ - } - */ - if ( cheat != 1 ) - { - self playsound( "deny" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 1 ); - continue; - } - } - if ( isDefined( level.custom_perk_validation ) ) - { - valid = self [[ level.custom_perk_validation ]]( player ); - if ( !valid ) - { - continue; - } - } - current_cost = cost; - if ( player maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() ) - { - current_cost = player maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_double_points_cost( current_cost ); - } - if ( player.score < current_cost ) - { - self playsound( "evt_perk_deny" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); - continue; - } - - if ( player.num_perks >= player get_player_perk_purchase_limit() ) - { - self playsound( "evt_perk_deny" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "sigh" ); - continue; - } - sound = "evt_bottle_dispense"; - playsoundatposition( sound, self.origin ); - player maps/mp/zombies/_zm_score::minus_to_player_score( current_cost, 1 ); - player.perk_purchased = perk; - self thread maps/mp/zombies/_zm_audio::play_jingle_or_stinger( self.script_label ); - self thread vending_trigger_post_think( player, perk ); - } -} - -vending_trigger_post_think( player, perk ) //checked matches cerberus output -{ - player endon( "disconnect" ); - player endon( "end_game" ); - player endon( "perk_abort_drinking" ); - gun = player perk_give_bottle_begin( perk ); - evt = player waittill_any_return( "fake_death", "death", "player_downed", "weapon_change_complete" ); - if ( evt == "weapon_change_complete" ) - { - player thread wait_give_perk( perk, 1 ); - } - player perk_give_bottle_end( gun, perk ); - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( player.intermission ) && player.intermission ) - { - return; - } - player notify( "burp" ); - if ( is_true( level.pers_upgrade_cash_back ) ) - { - player maps/mp/zombies/_zm_pers_upgrades_functions::cash_back_player_drinks_perk(); - } - if ( is_true( level.pers_upgrade_perk_lose ) ) - { - player thread maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_perk_lose_bought(); - } - if ( isDefined( level.perk_bought_func ) ) - { - player [[ level.perk_bought_func ]]( perk ); - } - player.perk_purchased = undefined; - if ( is_false( self.power_on ) ) - { - wait 1; - perk_pause( self.script_noteworthy ); - } - bbprint( "zombie_uses", "playername %s playerscore %d round %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, perk, self.origin, "perk" ); -} - -solo_revive_buy_trigger_move( revive_trigger_noteworthy ) //checked changed to match cerberus output -{ - self endon( "death" ); - revive_perk_triggers = getentarray( revive_trigger_noteworthy, "script_noteworthy" ); - foreach ( revive_perk_trigger in revive_perk_triggers ) - { - self thread solo_revive_buy_trigger_move_trigger( revive_perk_trigger ); - } -} - -solo_revive_buy_trigger_move_trigger( revive_perk_trigger ) //checked matches cerberus output -{ - self endon( "death" ); - revive_perk_trigger setinvisibletoplayer( self ); - if ( level.solo_lives_given >= 3 ) - { - revive_perk_trigger trigger_off(); - if ( isDefined( level._solo_revive_machine_expire_func ) ) - { - revive_perk_trigger [[ level._solo_revive_machine_expire_func ]](); - } - return; - } - while ( self.lives > 0 ) - { - wait 0.1; - } - revive_perk_trigger setvisibletoplayer( self ); -} - -wait_give_perk( perk, bought ) //checked matches cerberus output -{ - self endon( "player_downed" ); - self endon( "disconnect" ); - self endon( "end_game" ); - self endon( "perk_abort_drinking" ); - self waittill_notify_or_timeout( "burp", 0.5 ); - self give_perk( perk, bought ); -} - -return_retained_perks() //checked changed to match cerberus output -{ - if ( isDefined( self._retain_perks_array ) ) - { - keys = getarraykeys( self._retain_perks_array ); - foreach ( perk in keys ) - { - if ( is_true( self._retain_perks_array[ perk ] ) ) - { - self give_perk( perk, 0 ); - } - } - } -} - -give_perk( perk, bought ) //checked changed to match cerberus output -{ - self setperk( perk ); - self.num_perks++; - if ( is_true( bought ) ) - { - self maps/mp/zombies/_zm_audio::playerexert( "burp" ); - if ( is_true( level.remove_perk_vo_delay ) ) - { - self maps/mp/zombies/_zm_audio::perk_vox( perk ); - } - else - { - self delay_thread( 1.5, ::perk_vox, perk ); - } - self setblur( 4, 0.1 ); - wait 0.1; - self setblur( 0, 0.1 ); - self notify( "perk_bought", perk ); - } - self perk_set_max_health_if_jugg( perk, 1, 0 ); - if ( !is_true( level.disable_deadshot_clientfield ) ) - { - if ( perk == "specialty_deadshot" ) - { - self setclientfieldtoplayer( "deadshot_perk", 1 ); - } - else if ( perk == "specialty_deadshot_upgrade" ) - { - self setclientfieldtoplayer( "deadshot_perk", 1 ); - } - } - if ( perk == "specialty_scavenger" ) - { - self.hasperkspecialtytombstone = 1; - } - players = get_players(); - if ( use_solo_revive() && perk == "specialty_quickrevive" ) - { - self.lives = 1; - if ( !isDefined( level.solo_lives_given ) ) - { - level.solo_lives_given = 0; - } - if ( isDefined( level.solo_game_free_player_quickrevive ) ) - { - level.solo_game_free_player_quickrevive = undefined; - } - else - { - level.solo_lives_given++; - } - if ( level.solo_lives_given >= 3 ) - { - flag_set( "solo_revive" ); - } - self thread solo_revive_buy_trigger_move( perk ); - } - if ( perk == "specialty_finalstand" ) - { - self.lives = 1; - self.hasperkspecialtychugabud = 1; - self notify( "perk_chugabud_activated" ); - } - if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].player_thread_give ) ) - { - self thread [[ level._custom_perks[ perk ].player_thread_give ]](); - } - self set_perk_clientfield( perk, 1 ); - maps/mp/_demo::bookmark( "zm_player_perk", getTime(), self ); - self maps/mp/zombies/_zm_stats::increment_client_stat( "perks_drank" ); - self maps/mp/zombies/_zm_stats::increment_client_stat( perk + "_drank" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( perk + "_drank" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "perks_drank" ); - if ( !isDefined( self.perk_history ) ) - { - self.perk_history = []; - } - self.perk_history = add_to_array( self.perk_history, perk, 0 ); - if ( !isDefined( self.perks_active ) ) - { - self.perks_active = []; - } - self.perks_active[ self.perks_active.size ] = perk; - self notify( "perk_acquired" ); - self thread perk_think( perk ); -} - -perk_set_max_health_if_jugg( perk, set_premaxhealth, clamp_health_to_max_health ) //checked matches cerberus output -{ - max_total_health = undefined; - if ( perk == "specialty_armorvest" ) - { - if ( set_premaxhealth ) - { - self.premaxhealth = self.maxhealth; - } - max_total_health = level.zombie_vars[ "zombie_perk_juggernaut_health" ]; - } - else if ( perk == "specialty_armorvest_upgrade" ) - { - if ( set_premaxhealth ) - { - self.premaxhealth = self.maxhealth; - } - max_total_health = level.zombie_vars[ "zombie_perk_juggernaut_health_upgrade" ]; - } - else if ( perk == "jugg_upgrade" ) - { - if ( set_premaxhealth ) - { - self.premaxhealth = self.maxhealth; - } - if ( self hasperk( "specialty_armorvest" ) ) - { - max_total_health = level.zombie_vars[ "zombie_perk_juggernaut_health" ]; - } - else - { - max_total_health = 100; - } - } - else - { - if ( perk == "health_reboot" ) - { - max_total_health = 100; - } - } - if ( isDefined( max_total_health ) ) - { - if ( self maps/mp/zombies/_zm_pers_upgrades_functions::pers_jugg_active() ) - { - max_total_health += level.pers_jugg_upgrade_health_bonus; - } - self setmaxhealth( max_total_health ); - if ( isDefined( clamp_health_to_max_health ) && clamp_health_to_max_health == 1 ) - { - if ( self.health > self.maxhealth ) - { - self.health = self.maxhealth; - } - } - } -} - -check_player_has_perk( perk ) //checked partially changed to match cerberus output -{ - self endon( "death" ); - /* -/# - if ( getDvarInt( "zombie_cheat" ) >= 5 ) - { - return; -#/ - } - */ - dist = 16384; - while ( 1 ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( distancesquared( players[ i ].origin, self.origin ) < dist ) - { - if ( !players[ i ] hasperk( perk ) && !players[ i ] has_perk_paused( perk ) && !players[ i ] in_revive_trigger() && !is_equipment_that_blocks_purchase( players[ i ] getcurrentweapon() ) && !players[ i ] hacker_active() ) - { - self setinvisibletoplayer( players[ i ], 0 ); - i++; - continue; - } - self setinvisibletoplayer( players[ i ], 1 ); - } - i++; - } - wait 0.1; - } -} - -vending_set_hintstring( perk ) //checked matches cerberus output -{ - switch( perk ) - { - case "specialty_armorvest": - case "specialty_armorvest_upgrade": - break; - } -} - -perk_think( perk ) //checked changed to match cerberus output -{ -/* -/# - if ( getDvarInt( "zombie_cheat" ) >= 5 ) - { - if ( isDefined( self.perk_hud[ perk ] ) ) - { - return; -#/ - } - } -*/ - perk_str = perk + "_stop"; - result = self waittill_any_return( "fake_death", "death", "player_downed", perk_str ); - do_retain = 1; - if ( use_solo_revive() && perk == "specialty_quickrevive" ) - { - do_retain = 0; - } - if ( do_retain ) - { - if ( is_true( self._retain_perks ) ) - { - return; - } - else if ( isDefined( self._retain_perks_array ) && is_true( self._retain_perks_array[ perk ] ) ) - { - return; - } - } - self unsetperk( perk ); - self.num_perks--; - - switch( perk ) - { - case "specialty_armorvest": - self setmaxhealth( 100 ); - break; - case "specialty_additionalprimaryweapon": - if ( result == perk_str ) - { - self maps/mp/zombies/_zm::take_additionalprimaryweapon(); - } - break; - case "specialty_deadshot": - if ( !is_true( level.disable_deadshot_clientfield ) ) - { - self setclientfieldtoplayer( "deadshot_perk", 0 ); - } - break; - case "specialty_deadshot_upgrade": - if ( !is_true( level.disable_deadshot_clientfield ) ) - { - self setclientfieldtoplayer( "deadshot_perk", 0 ); - } - break; - } - if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].player_thread_take ) ) - { - self thread [[ level._custom_perks[ perk ].player_thread_take ]](); - } - self set_perk_clientfield( perk, 0 ); - self.perk_purchased = undefined; - if ( isDefined( level.perk_lost_func ) ) - { - self [[ level.perk_lost_func ]]( perk ); - } - if ( isDefined( self.perks_active ) && isinarray( self.perks_active, perk ) ) - { - arrayremovevalue( self.perks_active, perk, 0 ); - } - self notify( "perk_lost" ); -} - -set_perk_clientfield( perk, state ) //checked matches cerberus output -{ - switch( perk ) - { - case "specialty_additionalprimaryweapon": - self setclientfieldtoplayer( "perk_additional_primary_weapon", state ); - break; - case "specialty_deadshot": - self setclientfieldtoplayer( "perk_dead_shot", state ); - break; - case "specialty_flakjacket": - self setclientfieldtoplayer( "perk_dive_to_nuke", state ); - break; - case "specialty_rof": - self setclientfieldtoplayer( "perk_double_tap", state ); - break; - case "specialty_armorvest": - self setclientfieldtoplayer( "perk_juggernaut", state ); - break; - case "specialty_longersprint": - self setclientfieldtoplayer( "perk_marathon", state ); - break; - case "specialty_quickrevive": - self setclientfieldtoplayer( "perk_quick_revive", state ); - break; - case "specialty_fastreload": - self setclientfieldtoplayer( "perk_sleight_of_hand", state ); - break; - case "specialty_scavenger": - self setclientfieldtoplayer( "perk_tombstone", state ); - break; - case "specialty_finalstand": - self setclientfieldtoplayer( "perk_chugabud", state ); - break; - default: - if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].clientfield_set ) ) - { - self [[ level._custom_perks[ perk ].clientfield_set ]]( state ); - } - } -} - -perk_hud_destroy( perk ) //checked changed to match cerberus output -{ - self.perk_hud[ perk ] destroy_hud(); - self.perk_hud[ perk ] = undefined; -} - -perk_hud_grey( perk, grey_on_off ) //checked matches cerberus output -{ - if ( grey_on_off ) - { - self.perk_hud[ perk ].alpha = 0.3; - } - else - { - self.perk_hud[ perk ].alpha = 1; - } -} - -perk_hud_flash() //checked matches cerberus output -{ - self endon( "death" ); - self.flash = 1; - self scaleovertime( 0.05, 32, 32 ); - wait 0.3; - self scaleovertime( 0.05, 24, 24 ); - wait 0.3; - self.flash = 0; -} - -perk_flash_audio( perk ) //checked matches cerberus output -{ - alias = undefined; - switch( perk ) - { - case "specialty_armorvest": - alias = "zmb_hud_flash_jugga"; - break; - case "specialty_quickrevive": - alias = "zmb_hud_flash_revive"; - break; - case "specialty_fastreload": - alias = "zmb_hud_flash_speed"; - break; - case "specialty_longersprint": - alias = "zmb_hud_flash_stamina"; - break; - case "specialty_flakjacket": - alias = "zmb_hud_flash_phd"; - break; - case "specialty_deadshot": - alias = "zmb_hud_flash_deadshot"; - break; - case "specialty_additionalprimaryweapon": - alias = "zmb_hud_flash_additionalprimaryweapon"; - break; - } - if ( isDefined( alias ) ) - { - self playlocalsound( alias ); - } -} - -perk_hud_start_flash( perk ) //checked does not match cerberus output did not change -{ - if ( self hasperk( perk ) && isDefined( self.perk_hud ) ) - { - hud = self.perk_hud[ perk ]; - if ( isDefined( hud ) ) - { - if ( !is_true( hud.flash ) ) - { - hud thread perk_hud_flash(); - self thread perk_flash_audio( perk ); - } - } - } -} - -perk_hud_stop_flash( perk, taken ) //checked matches cerberus output -{ - if ( self hasperk( perk ) && isDefined( self.perk_hud ) ) - { - hud = self.perk_hud[ perk ]; - if ( isDefined( hud ) ) - { - hud.flash = undefined; - if ( isDefined( taken ) ) - { - hud notify( "stop_flash_perk" ); - } - } - } -} - -perk_give_bottle_begin( perk ) //checked matches cerberus output -{ - self increment_is_drinking(); - self disable_player_move_states( 1 ); - gun = self getcurrentweapon(); - weapon = ""; - switch( perk ) - { - case " _upgrade": - case "specialty_armorvest": - weapon = level.machine_assets[ "juggernog" ].weapon; - break; - case "specialty_quickrevive": - case "specialty_quickrevive_upgrade": - weapon = level.machine_assets[ "revive" ].weapon; - break; - case "specialty_fastreload": - case "specialty_fastreload_upgrade": - weapon = level.machine_assets[ "speedcola" ].weapon; - break; - case "specialty_rof": - case "specialty_rof_upgrade": - weapon = level.machine_assets[ "doubletap" ].weapon; - break; - case "specialty_longersprint": - case "specialty_longersprint_upgrade": - weapon = level.machine_assets[ "marathon" ].weapon; - break; - case "specialty_flakjacket": - case "specialty_flakjacket_upgrade": - weapon = level.machine_assets[ "divetonuke" ].weapon; - break; - case "specialty_deadshot": - case "specialty_deadshot_upgrade": - weapon = level.machine_assets[ "deadshot" ].weapon; - break; - case "specialty_additionalprimaryweapon": - case "specialty_additionalprimaryweapon_upgrade": - weapon = level.machine_assets[ "additionalprimaryweapon" ].weapon; - break; - case "specialty_scavenger": - case "specialty_scavenger_upgrade": - weapon = level.machine_assets[ "tombstone" ].weapon; - break; - case "specialty_finalstand": - case "specialty_finalstand_upgrade": - weapon = level.machine_assets[ "whoswho" ].weapon; - break; - } - if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].perk_bottle ) ) - { - weapon = level._custom_perks[ perk ].perk_bottle; - } - self giveweapon( weapon ); - self switchtoweapon( weapon ); - return gun; -} - -perk_give_bottle_end( gun, perk ) //checked matches cerberus output -{ - self endon( "perk_abort_drinking" ); - /* -/# - assert( !is_zombie_perk_bottle( gun ) ); -#/ -/# - assert( gun != level.revive_tool ); -#/ - */ - self enable_player_move_states(); - weapon = ""; - switch( perk ) - { - case "specialty_rof": - case "specialty_rof_upgrade": - weapon = level.machine_assets[ "doubletap" ].weapon; - break; - case "specialty_longersprint": - case "specialty_longersprint_upgrade": - weapon = level.machine_assets[ "marathon" ].weapon; - break; - case "specialty_flakjacket": - case "specialty_flakjacket_upgrade": - weapon = level.machine_assets[ "divetonuke" ].weapon; - break; - case "specialty_armorvest": - case "specialty_armorvest_upgrade": - weapon = level.machine_assets[ "juggernog" ].weapon; - self.jugg_used = 1; - break; - case "specialty_quickrevive": - case "specialty_quickrevive_upgrade": - weapon = level.machine_assets[ "revive" ].weapon; - break; - case "specialty_fastreload": - case "specialty_fastreload_upgrade": - weapon = level.machine_assets[ "speedcola" ].weapon; - self.speed_used = 1; - break; - case "specialty_deadshot": - case "specialty_deadshot_upgrade": - weapon = level.machine_assets[ "deadshot" ].weapon; - break; - case "specialty_additionalprimaryweapon": - case "specialty_additionalprimaryweapon_upgrade": - weapon = level.machine_assets[ "additionalprimaryweapon" ].weapon; - break; - case "specialty_scavenger": - case "specialty_scavenger_upgrade": - weapon = level.machine_assets[ "tombstone" ].weapon; - break; - case "specialty_finalstand": - case "specialty_finalstand_upgrade": - weapon = level.machine_assets[ "whoswho" ].weapon; - break; - } - if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].perk_bottle ) ) - { - weapon = level._custom_perks[ perk ].perk_bottle; - } - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || is_true( self.intermission ) ) - { - self takeweapon( weapon ); - return; - } - self takeweapon( weapon ); - if ( self is_multiple_drinking() ) - { - self decrement_is_drinking(); - return; - } - else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment_that_blocks_purchase( gun ) ) - { - self switchtoweapon( gun ); - if ( is_melee_weapon( gun ) ) - { - self decrement_is_drinking(); - return; - } - } - else - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - } - self waittill( "weapon_change_complete" ); - self decrement_is_drinking(); - if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && !is_true( self.intermission ) ) - { - self decrement_is_drinking(); - } - -} - -perk_abort_drinking( post_delay ) //checked matches cerberus output -{ - if ( self.is_drinking ) - { - self notify( "perk_abort_drinking" ); - self decrement_is_drinking(); - self enable_player_move_states(); - if ( isDefined( post_delay ) ) - { - wait post_delay; - } - } -} - -give_random_perk() //checked partially changed to match cerberus output -{ - random_perk = undefined; - vending_triggers = getentarray( "zombie_vending", "targetname" ); - perks = []; - i = 0; - while ( i < vending_triggers.size ) - { - perk = vending_triggers[ i ].script_noteworthy; - if ( isDefined( self.perk_purchased ) && self.perk_purchased == perk ) - { - i++; - continue; - } - if ( perk == "specialty_weapupgrade" ) - { - i++; - continue; - } - if ( !self hasperk( perk ) && !self has_perk_paused( perk ) ) - { - perks[ perks.size ] = perk; - } - i++; - } - if ( perks.size > 0 ) - { - perks = array_randomize( perks ); - random_perk = perks[ 0 ]; - self give_perk( random_perk ); - } - else - { - self playsoundtoplayer( level.zmb_laugh_alias, self ); - } - return random_perk; -} - -lose_random_perk() //checked partially changed to match cerberus output -{ - vending_triggers = getentarray( "zombie_vending", "targetname" ); - perks = []; - i = 0; - while ( i < vending_triggers.size ) - { - perk = vending_triggers[ i ].script_noteworthy; - if ( isDefined( self.perk_purchased ) && self.perk_purchased == perk ) - { - i++; - continue; - } - if ( self hasperk( perk ) || self has_perk_paused( perk ) ) - { - perks[ perks.size ] = perk; - } - i++; - } - if ( perks.size > 0 ) - { - perks = array_randomize( perks ); - perk = perks[ 0 ]; - perk_str = perk + "_stop"; - self notify( perk_str ); - if ( use_solo_revive() && perk == "specialty_quickrevive" ) - { - self.lives--; - - } - } -} - -update_perk_hud() -{ - if ( isDefined( self.perk_hud ) ) - { - keys = getarraykeys( self.perk_hud ); - for ( i = 0; i < self.perk_hud.size; i++) - { - self.perk_hud[ keys[ i ] ].x = i * 30; - } - } -} - -quantum_bomb_give_nearest_perk_validation( position ) //checked changed to match cerberus output -{ - vending_triggers = getentarray( "zombie_vending", "targetname" ); - range_squared = 32400; - for ( i = 0; i < vending_triggers.size; i++ ) - { - if ( distancesquared( vending_triggers[ i ].origin, position ) < range_squared ) - { - return 1; - } - } - return 0; -} - -quantum_bomb_give_nearest_perk_result( position ) //checked partially changed to match cerberus output -{ - [[ level.quantum_bomb_play_mystery_effect_func ]]( position ); - vending_triggers = getentarray( "zombie_vending", "targetname" ); - nearest = 0; - for ( i = 1; i < vending_triggers.size; i++ ) - { - if ( distancesquared( vending_triggers[ i ].origin, position ) < distancesquared( vending_triggers[ nearest ].origin, position ) ) - { - nearest = i; - } - } - players = get_players(); - perk = vending_triggers[ nearest ].script_noteworthy; - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - if ( player.sessionstate == "spectator" || player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - i++; - continue; - } - if ( !player hasperk( perk ) && isDefined( player.perk_purchased ) && player.perk_purchased != perk && randomint( 5 ) ) - { - if ( player == self ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "quant_good" ); - } - player give_perk( perk ); - player [[ level.quantum_bomb_play_player_effect_func ]](); - } - i++; - } -} - -perk_pause( perk ) //checked changed to match cerberus output -{ - if ( perk == "Pack_A_Punch" || perk == "specialty_weapupgrade" ) - { - return; - } - for ( j = 0; j < get_players().size; j++ ) - { - player = get_players()[ j ]; - if ( !isDefined( player.disabled_perks ) ) - { - player.disabled_perks = []; - } - if ( !is_true( player.disabled_perks[ perk ] ) ) - { - player.disabled_perks[ perk ] = player hasperk( perk ); - } - if ( player.disabled_perks[ perk ] ) - { - player unsetperk( perk ); - player set_perk_clientfield( perk, 2 ); - if ( perk == "specialty_armorvest" || perk == "specialty_armorvest_upgrade" ) - { - player setmaxhealth( player.premaxhealth ); - if ( player.health > player.maxhealth ) - { - player.health = player.maxhealth; - } - } - if ( perk == "specialty_additionalprimaryweapon" || perk == "specialty_additionalprimaryweapon_upgrade" ) - { - player maps/mp/zombies/_zm::take_additionalprimaryweapon(); - } - if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].player_thread_take ) ) - { - player thread [[ level._custom_perks[ perk ].player_thread_take ]](); - } - /* -/# - println( " ZM PERKS " + player.name + " paused perk " + perk + "\n" ); -#/ - */ - } - } -} - -perk_unpause( perk ) //checked changed to match cerberus output -{ - if ( !isDefined( perk ) ) - { - return; - } - if ( perk == "Pack_A_Punch" ) - { - return; - } - for ( j = 0; j < get_players().size; j++ ) - { - player = get_players()[ j ]; - if ( isDefined( player.disabled_perks ) && is_true( player.disabled_perks[ perk ] ) ) - { - player.disabled_perks[ perk ] = 0; - player set_perk_clientfield( perk, 1 ); - player setperk( perk ); - /* -/# - println( " ZM PERKS " + player.name + " unpaused perk " + perk + "\n" ); -#/ - */ - if ( issubstr( perk, "specialty_scavenger" ) ) - { - player.hasperkspecialtytombstone = 1; - } - player perk_set_max_health_if_jugg( perk, 0, 0 ); - if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].player_thread_give ) ) - { - player thread [[ level._custom_perks[ perk ].player_thread_give ]](); - } - } - } -} - -perk_pause_all_perks() //checked changed to match cerberus output -{ - vending_triggers = getentarray( "zombie_vending", "targetname" ); - foreach ( trigger in vending_triggers ) - { - maps/mp/zombies/_zm_perks::perk_pause( trigger.script_noteworthy ); - } -} - -perk_unpause_all_perks() //checked changed to match cerberus output -{ - vending_triggers = getentarray( "zombie_vending", "targetname" ); - foreach ( trigger in vending_triggers ) - { - maps/mp/zombies/_zm_perks::perk_unpause( trigger.script_noteworthy ); - } -} - -has_perk_paused( perk ) //checked matches cerberus output -{ - if ( isDefined( self.disabled_perks ) && is_true( self.disabled_perks[ perk ] ) ) - { - return 1; - } - return 0; -} - -getvendingmachinenotify() //checked matches cerberus output -{ - if ( !isDefined( self ) ) - { - return ""; - } - switch( self.script_noteworthy ) - { - case "specialty_armorvest": - case "specialty_armorvest_upgrade": - return "juggernog"; - case "specialty_quickrevive": - case "specialty_quickrevive_upgrade": - return "revive"; - case "specialty_fastreload": - case "specialty_fastreload_upgrade": - return "sleight"; - case "specialty_rof": - case "specialty_rof_upgrade": - return "doubletap"; - case "specialty_longersprint": - case "specialty_longersprint_upgrade": - return "marathon"; - case "specialty_flakjacket": - case "specialty_flakjacket_upgrade": - return "divetonuke"; - case "specialty_deadshot": - case "specialty_deadshot_upgrade": - return "deadshot"; - case "specialty_additionalprimaryweapon": - case "specialty_additionalprimaryweapon_upgrade": - return "additionalprimaryweapon"; - case "specialty_scavenger": - case "specialty_scavenger_upgrade": - return "tombstone"; - case "specialty_finalstand": - case "specialty_finalstand_upgrade": - return "chugabud"; - case "specialty_weapupgrade": - return "Pack_A_Punch"; - } - str_perk = undefined; - if ( isDefined( level._custom_perks[ self.script_noteworthy ] ) && isDefined( isDefined( level._custom_perks[ self.script_noteworthy ].alias ) ) ) - { - str_perk = level._custom_perks[ self.script_noteworthy ].alias; - } - return str_perk; -} - -perk_machine_removal( machine, replacement_model ) //checked changed to match cerberus output -{ - if ( !isdefined( machine ) ) - { - return; - } - trig = getent( machine, "script_noteworthy" ); - machine_model = undefined; - if ( isdefined( trig ) ) - { - trig notify( "warning_dialog" ); - if ( isdefined( trig.target ) ) - { - parts = getentarray( trig.target, "targetname" ); - for ( i = 0; i < parts.size; i++ ) - { - if ( isdefined( parts[ i ].classname ) && parts[ i ].classname == "script_model" ) - { - machine_model = parts[ i ]; - } - if ( isdefined( parts[ i ].script_noteworthy ) && parts[ i ].script_noteworthy == "clip" ) - { - model_clip = parts[ i ]; - } - parts[ i ] delete(); - } - } - else if ( isdefined( replacement_model ) && isdefined( machine_model ) ) - { - machine_model setmodel( replacement_model ); - } - else if ( !isdefined( replacement_model ) && isdefined( machine_model ) ) - { - machine_model delete(); - if ( isdefined( model_clip ) ) - { - model_clip delete(); - } - if ( isdefined( trig.clip ) ) - { - trig.clip delete(); - } - } - if ( isdefined( trig.bump ) ) - { - trig.bump delete(); - } - trig delete(); - } -} - -perk_machine_spawn_init() -{ - - match_string = ""; - - location = level.scr_zm_map_start_location; - if ( ( location == "default" || location == "" ) && IsDefined( level.default_start_location ) ) - { - location = level.default_start_location; - } - - match_string = level.scr_zm_ui_gametype + "_perks_" + location; - pos = []; - if ( isdefined( level.override_perk_targetname ) ) - { - structs = getstructarray( level.override_perk_targetname, "targetname" ); - } - else - { - structs = getstructarray( "zm_perk_machine", "targetname" ); - } - if ( match_string == "zclassic_perks_rooftop" || match_string == "zclassic_perks_tomb" || match_string == "zstandard_perks_nuked" ) - { - useDefaultLocation = 1; - } - i = 0; - while ( i < structs.size ) - { - if ( isdefined( structs[ i ].script_string ) ) - { - tokens = strtok( structs[ i ].script_string, " " ); - k = 0; - while ( k < tokens.size ) - { - if ( tokens[ k ] == match_string ) - { - pos[ pos.size ] = structs[ i ]; - } - k++; - } - } - else if ( is_true( useDefaultLocation ) ) - { - pos[ pos.size ] = structs[ i ]; - } - i++; - } - if ( !IsDefined( pos ) || pos.size == 0 ) - { - return; - } - PreCacheModel("zm_collision_perks1"); - for ( i = 0; i < pos.size; i++ ) - { - perk = pos[ i ].script_noteworthy; - if ( IsDefined( perk ) && IsDefined( pos[ i ].model ) ) - { - use_trigger = Spawn( "trigger_radius_use", pos[ i ].origin + ( 0, 0, 30 ), 0, 40, 70 ); - use_trigger.targetname = "zombie_vending"; - use_trigger.script_noteworthy = perk; - use_trigger TriggerIgnoreTeam(); - //use_trigger thread debug_spot(); - - perk_machine = Spawn( "script_model", pos[ i ].origin ); - perk_machine.angles = pos[ i ].angles; - perk_machine SetModel( pos[ i ].model ); - if ( is_true( level._no_vending_machine_bump_trigs ) ) - { - bump_trigger = undefined; - } - else - { - bump_trigger = spawn("trigger_radius", pos[ i ].origin, 0, 35, 64); - bump_trigger.script_activated = 1; - bump_trigger.script_sound = "zmb_perks_bump_bottle"; - bump_trigger.targetname = "audio_bump_trigger"; - if ( perk != "specialty_weapupgrade" ) - { - bump_trigger thread thread_bump_trigger(); - } - } - collision = Spawn( "script_model", pos[ i ].origin, 1 ); - collision.angles = pos[ i ].angles; - collision SetModel( "zm_collision_perks1" ); - collision.script_noteworthy = "clip"; - collision DisconnectPaths(); - - // Connect all of the pieces for easy access. - use_trigger.clip = collision; - use_trigger.machine = perk_machine; - use_trigger.bump = bump_trigger; - //missing code found in cerberus output - if ( isdefined( pos[ i ].blocker_model ) ) - { - use_trigger.blocker_model = pos[ i ].blocker_model; - } - if ( isdefined( pos[ i ].script_int ) ) - { - perk_machine.script_int = pos[ i ].script_int; - } - if ( isdefined( pos[ i ].turn_on_notify ) ) - { - perk_machine.turn_on_notify = pos[ i ].turn_on_notify; - } - switch( perk ) - { - case "specialty_quickrevive": - case "specialty_quickrevive_upgrade": - use_trigger.script_sound = "mus_perks_revive_jingle"; - use_trigger.script_string = "revive_perk"; - use_trigger.script_label = "mus_perks_revive_sting"; - use_trigger.target = "vending_revive"; - perk_machine.script_string = "revive_perk"; - perk_machine.targetname = "vending_revive"; - if ( isDefined( bump_trigger ) ) - { - bump_trigger.script_string = "revive_perk"; - } - break; - case "specialty_fastreload": - case "specialty_fastreload_upgrade": - use_trigger.script_sound = "mus_perks_speed_jingle"; - use_trigger.script_string = "speedcola_perk"; - use_trigger.script_label = "mus_perks_speed_sting"; - use_trigger.target = "vending_sleight"; - perk_machine.script_string = "speedcola_perk"; - perk_machine.targetname = "vending_sleight"; - if ( isDefined( bump_trigger ) ) - { - bump_trigger.script_string = "speedcola_perk"; - } - break; - case "specialty_longersprint": - case "specialty_longersprint_upgrade": - use_trigger.script_sound = "mus_perks_stamin_jingle"; - use_trigger.script_string = "marathon_perk"; - use_trigger.script_label = "mus_perks_stamin_sting"; - use_trigger.target = "vending_marathon"; - perk_machine.script_string = "marathon_perk"; - perk_machine.targetname = "vending_marathon"; - if ( isDefined( bump_trigger ) ) - { - bump_trigger.script_string = "marathon_perk"; - } - break; - case "specialty_armorvest": - case "specialty_armorvest_upgrade": - use_trigger.script_sound = "mus_perks_jugganog_jingle"; - use_trigger.script_string = "jugg_perk"; - use_trigger.script_label = "mus_perks_jugganog_sting"; - use_trigger.longjinglewait = 1; - use_trigger.target = "vending_jugg"; - perk_machine.script_string = "jugg_perk"; - perk_machine.targetname = "vending_jugg"; - if ( isDefined( bump_trigger ) ) - { - bump_trigger.script_string = "jugg_perk"; - } - break; - case "specialty_scavenger": - case "specialty_scavenger_upgrade": - use_trigger.script_sound = "mus_perks_tombstone_jingle"; - use_trigger.script_string = "tombstone_perk"; - use_trigger.script_label = "mus_perks_tombstone_sting"; - use_trigger.target = "vending_tombstone"; - perk_machine.script_string = "tombstone_perk"; - perk_machine.targetname = "vending_tombstone"; - if ( isDefined( bump_trigger ) ) - { - bump_trigger.script_string = "tombstone_perk"; - } - break; - case "specialty_rof": - case "specialty_rof_upgrade": - use_trigger.script_sound = "mus_perks_doubletap_jingle"; - use_trigger.script_string = "tap_perk"; - use_trigger.script_label = "mus_perks_doubletap_sting"; - use_trigger.target = "vending_doubletap"; - perk_machine.script_string = "tap_perk"; - perk_machine.targetname = "vending_doubletap"; - if ( isDefined( bump_trigger ) ) - { - bump_trigger.script_string = "tap_perk"; - } - break; - case "specialty_finalstand": - case "specialty_finalstand_upgrade": - use_trigger.script_sound = "mus_perks_whoswho_jingle"; - use_trigger.script_string = "tap_perk"; - use_trigger.script_label = "mus_perks_whoswho_sting"; - use_trigger.target = "vending_chugabud"; - perk_machine.script_string = "tap_perk"; - perk_machine.targetname = "vending_chugabud"; - if ( isDefined( bump_trigger ) ) - { - bump_trigger.script_string = "tap_perk"; - } - break; - case "specialty_additionalprimaryweapon": - case "specialty_additionalprimaryweapon_upgrade": - use_trigger.script_sound = "mus_perks_mulekick_jingle"; - use_trigger.script_string = "tap_perk"; - use_trigger.script_label = "mus_perks_mulekick_sting"; - use_trigger.target = "vending_additionalprimaryweapon"; - perk_machine.script_string = "tap_perk"; - perk_machine.targetname = "vending_additionalprimaryweapon"; - if ( isDefined( bump_trigger ) ) - { - bump_trigger.script_string = "tap_perk"; - } - break; - case "specialty_weapupgrade": - use_trigger.target = "vending_packapunch"; - use_trigger.script_sound = "mus_perks_packa_jingle"; - use_trigger.script_label = "mus_perks_packa_sting"; - use_trigger.longjinglewait = 1; - perk_machine.targetname = "vending_packapunch"; - flag_pos = getstruct( pos[ i ].target, "targetname" ); - if ( isDefined( flag_pos ) ) - { - perk_machine_flag = spawn( "script_model", flag_pos.origin ); - perk_machine_flag.angles = flag_pos.angles; - perk_machine_flag setmodel( flag_pos.model ); - perk_machine_flag.targetname = "pack_flag"; - perk_machine.target = "pack_flag"; - } - if ( isDefined( bump_trigger ) ) - { - bump_trigger.script_string = "perks_rattle"; - } - break; - case "specialty_deadshot": - case "specialty_deadshot_upgrade": - use_trigger.script_sound = "mus_perks_deadshot_jingle"; - use_trigger.script_string = "deadshot_perk"; - use_trigger.script_label = "mus_perks_deadshot_sting"; - use_trigger.target = "vending_deadshot"; - perk_machine.script_string = "deadshot_vending"; - perk_machine.targetname = "vending_deadshot_model"; - if ( isDefined( bump_trigger ) ) - { - bump_trigger.script_string = "deadshot_vending"; - } - break; - default: - if ( isdefined( level._custom_perks[ perk ] ) && isdefined( level._custom_perks[ perk ].perk_machine_set_kvps ) ) - { - [[ level._custom_perks[ perk ].perk_machine_set_kvps ]]( use_trigger, perk_machine, bump_trigger, collision ); - } - break; - } - } - } -} - -get_perk_machine_start_state( perk ) //checked matches cerberus output -{ - if ( is_true( level.vending_machines_powered_on_at_start ) ) - { - return 1; - } - if ( perk == "specialty_quickrevive" || perk == "specialty_quickrevive_upgrade" ) - { - return level.revive_machine_is_solo; - } - return 0; -} - -perks_register_clientfield() //checked matches cerberus output -{ - if ( is_true( level.zombiemode_using_additionalprimaryweapon_perk ) ) - { - registerclientfield( "toplayer", "perk_additional_primary_weapon", 1, 2, "int" ); - } - if ( is_true( level.zombiemode_using_deadshot_perk ) ) - { - registerclientfield( "toplayer", "perk_dead_shot", 1, 2, "int" ); - } - if ( is_true( level.zombiemode_using_doubletap_perk ) ) - { - registerclientfield( "toplayer", "perk_double_tap", 1, 2, "int" ); - } - if ( is_true( level.zombiemode_using_juggernaut_perk ) ) - { - registerclientfield( "toplayer", "perk_juggernaut", 1, 2, "int" ); - } - if ( is_true( level.zombiemode_using_marathon_perk ) ) - { - registerclientfield( "toplayer", "perk_marathon", 1, 2, "int" ); - } - if ( is_true( level.zombiemode_using_revive_perk ) ) - { - registerclientfield( "toplayer", "perk_quick_revive", 1, 2, "int" ); - } - if ( is_true( level.zombiemode_using_sleightofhand_perk ) ) - { - registerclientfield( "toplayer", "perk_sleight_of_hand", 1, 2, "int" ); - } - if ( is_true( level.zombiemode_using_tombstone_perk ) ) - { - registerclientfield( "toplayer", "perk_tombstone", 1, 2, "int" ); - } - if ( is_true( level.zombiemode_using_perk_intro_fx ) ) - { - registerclientfield( "scriptmover", "clientfield_perk_intro_fx", 1000, 1, "int" ); - } - if ( is_true( level.zombiemode_using_chugabud_perk ) ) - { - registerclientfield( "toplayer", "perk_chugabud", 1000, 1, "int" ); - } - if ( isdefined( level._custom_perks ) ) - { - a_keys = getarraykeys(level._custom_perks); - for ( i = 0; i < a_keys.size; i++ ) - { - if ( isdefined( level._custom_perks[ a_keys[ i ] ].clientfield_register ) ) - { - level [[ level._custom_perks[ a_keys[ i ] ].clientfield_register ]](); - } - } - } -} - -thread_bump_trigger() //checked matches cerberus output -{ - for ( ;; ) - { - self waittill( "trigger", trigplayer ); - trigplayer playsound( self.script_sound ); - while ( is_player_valid( trigplayer ) && trigplayer istouching( self ) ) - { - wait 0.5; - } - } -} - -reenable_quickrevive( machine_clip, solo_mode ) //checked changed to match cerberus output -{ - if ( isDefined( level.revive_machine_spawned ) && !is_true( level.revive_machine_spawned ) ) - { - return; - } - wait 0.1; - power_state = 0; - if ( is_true( solo_mode ) ) - { - power_state = 1; - should_pause = 1; - players = get_players(); - foreach ( player in players ) - { - if ( isdefined( player.lives ) && player.lives > 0 && power_state ) - { - should_pause = 0; - } - if ( isdefined( player.lives ) && player.lives < 1 ) - { - should_pause = 1; - } - } - if ( should_pause ) - { - perk_pause( "specialty_quickrevive" ); - } - else - { - perk_unpause( "specialty_quickrevive" ); - } - if ( is_true( level.solo_revive_init ) && flag( "solo_revive" ) ) - { - disable_quickrevive( machine_clip ); - return; - } - update_quickrevive_power_state( 1 ); - unhide_quickrevive(); - restart_quickrevive(); - level notify( "revive_off" ); - wait 0.1; - level notify( "stop_quickrevive_logic" ); - } - else - { - if ( !is_true( level._dont_unhide_quickervive_on_hotjoin ) ) - { - unhide_quickrevive(); - level notify( "revive_off" ); - wait 0.1; - } - level notify( "revive_hide" ); - level notify( "stop_quickrevive_logic" ); - restart_quickrevive(); - if ( flag( "power_on" ) ) - { - power_state = 1; - } - update_quickrevive_power_state( power_state ); - } - level thread turn_revive_on(); - if ( power_state ) - { - perk_unpause( "specialty_quickrevive" ); - level notify( "revive_on" ); - wait 0.1; - level notify( "specialty_quickrevive_power_on" ); - } - else - { - perk_pause( "specialty_quickrevive" ); - } - if ( !is_true( solo_mode ) ) - { - return; - } - should_pause = 1; - players = get_players(); - foreach ( player in players ) - { - if ( !is_player_valid( player ) ) - { - continue; - } - if ( player hasperk("specialty_quickrevive" ) ) - { - if ( !isdefined( player.lives ) ) - { - player.lives = 0; - } - if ( !isdefined( level.solo_lives_given ) ) - { - level.solo_lives_given = 0; - } - level.solo_lives_given++; - player.lives++; - if ( isdefined( player.lives ) && player.lives > 0 && power_state ) - { - should_pause = 0; - } - should_pause = 1; - } - } - if ( should_pause ) - { - perk_pause( "specialty_quickrevive" ); - } - else - { - perk_unpause( "specialty_quickrevive" ); - } -} - -update_quickrevive_power_state( poweron ) //checked matches cerberus output -{ - foreach ( item in level.powered_items ) - { - if ( isdefined( item.target ) && isdefined( item.target.script_noteworthy ) && item.target.script_noteworthy == "specialty_quickrevive" ) - { - if ( item.power && !poweron ) - { - if ( !isdefined( item.powered_count ) ) - { - item.powered_count = 0; - } - else if ( item.powered_count > 0 ) - { - item.powered_count--; - } - } - else if ( !item.power && poweron ) - { - if ( !isdefined( item.powered_count ) ) - { - item.powered_count = 0; - } - item.powered_count++; - } - if ( !isdefined( item.depowered_count ) ) - { - item.depowered_count = 0; - } - item.power = poweron; - } - } -} - -restart_quickrevive() //checked changed to match cerberus output //changed at own discretion -{ - triggers = getentarray( "zombie_vending", "targetname" ); - foreach ( trigger in triggers ) - { - if ( trigger.script_noteworthy == "specialty_quickrevive" || trigger.script_noteworthy == "specialty_quickrevive_upgrade" ) - { - trigger notify( "stop_quickrevive_logic" ); - trigger thread vending_trigger_think(); - trigger trigger_on(); - } - } -} - -disable_quickrevive( machine_clip ) //checked changed to match cerberus output -{ - if ( is_true( level.solo_revive_init ) && flag( "solo_revive" ) && isDefined( level.quick_revive_machine ) ) - { - triggers = getentarray( "zombie_vending", "targetname" ); - foreach ( trigger in triggers ) - { - if ( !isdefined( trigger.script_noteworthy ) ) - { - continue; - } - if ( trigger.script_noteworthy == "specialty_quickrevive" || trigger.script_noteworthy == "specialty_quickrevive_upgrade" ) - { - trigger trigger_off(); - } - } - foreach ( item in level.powered_items ) - { - if ( isdefined( item.target ) && isdefined( item.target.script_noteworthy ) && item.target.script_noteworthy == "specialty_quickrevive" ) - { - item.power = 1; - item.self_powered = 1; - } - } - if ( isDefined( level.quick_revive_machine.original_pos ) ) - { - level.quick_revive_default_origin = level.quick_revive_machine.original_pos; - level.quick_revive_default_angles = level.quick_revive_machine.original_angles; - } - move_org = level.quick_revive_default_origin; - if ( isDefined( level.quick_revive_linked_ent ) ) - { - move_org = level.quick_revive_linked_ent.origin; - if ( isDefined( level.quick_revive_linked_ent_offset ) ) - { - move_org += level.quick_revive_linked_ent_offset; - } - level.quick_revive_machine unlink(); - } - level.quick_revive_machine moveto( move_org + vectorScale( ( 0, 0, 1 ), 40 ), 3 ); - direction = level.quick_revive_machine.origin; - direction = ( direction[ 1 ], direction[ 0 ], 0 ); - if ( direction[ 1 ] < 0 || direction[ 0 ] > 0 && direction[ 1 ] > 0 ) - { - direction = ( direction[ 0 ], direction[ 1 ] * -1, 0 ); - } - else - { - if ( direction[ 0 ] < 0 ) - { - direction = ( direction[ 0 ] * -1, direction[ 1 ], 0 ); - } - } - level.quick_revive_machine vibrate( direction, 10, 0.5, 4 ); - level.quick_revive_machine waittill( "movedone" ); - level.quick_revive_machine hide(); - level.quick_revive_machine.ishidden = 1; - if ( isDefined( level.quick_revive_machine_clip ) ) - { - level.quick_revive_machine_clip connectpaths(); - level.quick_revive_machine_clip trigger_off(); - } - playfx( level._effect[ "poltergeist" ], level.quick_revive_machine.origin ); - if ( isDefined( level.quick_revive_trigger ) && isDefined( level.quick_revive_trigger.blocker_model ) ) - { - level.quick_revive_trigger.blocker_model show(); - } - level notify( "revive_hide" ); - } -} - -unhide_quickrevive() //checked matches cerberus output -{ - while ( players_are_in_perk_area( level.quick_revive_machine ) ) - { - wait 0.1; - } - if ( isDefined( level.quick_revive_machine_clip ) ) - { - level.quick_revive_machine_clip trigger_on(); - level.quick_revive_machine_clip disconnectpaths(); - } - if ( isDefined( level.quick_revive_final_pos ) ) - { - level.quick_revive_machine.origin = level.quick_revive_final_pos; - } - playfx( level._effect[ "poltergeist" ], level.quick_revive_machine.origin ); - if ( isDefined( level.quick_revive_trigger ) && isDefined( level.quick_revive_trigger.blocker_model ) ) - { - level.quick_revive_trigger.blocker_model hide(); - } - level.quick_revive_machine show(); - if ( isDefined( level.quick_revive_machine.original_pos ) ) - { - level.quick_revive_default_origin = level.quick_revive_machine.original_pos; - level.quick_revive_default_angles = level.quick_revive_machine.original_angles; - } - direction = level.quick_revive_machine.origin; - direction = ( direction[ 1 ], direction[ 0 ], 0 ); - if ( direction[ 1 ] < 0 || direction[ 0 ] > 0 && direction[ 1 ] > 0 ) - { - direction = ( direction[ 0 ], direction[ 1 ] * -1, 0 ); - } - else - { - if ( direction[ 0 ] < 0 ) - { - direction = ( direction[ 0 ] * -1, direction[ 1 ], 0 ); - } - } - org = level.quick_revive_default_origin; - if ( isDefined( level.quick_revive_linked_ent ) ) - { - org = level.quick_revive_linked_ent.origin; - if ( isDefined( level.quick_revive_linked_ent_offset ) ) - { - org += level.quick_revive_linked_ent_offset; - } - } - if ( !is_true( level.quick_revive_linked_ent_moves ) && level.quick_revive_machine.origin != org ) - { - level.quick_revive_machine moveto( org, 3 ); - level.quick_revive_machine vibrate( direction, 10, 0.5, 2.9 ); - level.quick_revive_machine waittill( "movedone" ); - level.quick_revive_machine.angles = level.quick_revive_default_angles; - } - else - { - if ( isDefined( level.quick_revive_linked_ent ) ) - { - org = level.quick_revive_linked_ent.origin; - if ( isDefined( level.quick_revive_linked_ent_offset ) ) - { - org += level.quick_revive_linked_ent_offset; - } - level.quick_revive_machine.origin = org; - } - level.quick_revive_machine vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); - } - if ( isDefined( level.quick_revive_linked_ent ) ) - { - level.quick_revive_machine linkto( level.quick_revive_linked_ent ); - } - level.quick_revive_machine.ishidden = 0; -} - -players_are_in_perk_area( perk_machine ) //checked changed to match cerberus output -{ - perk_area_origin = level.quick_revive_default_origin; - if ( isDefined( perk_machine._linked_ent ) ) - { - perk_area_origin = perk_machine._linked_ent.origin; - if ( isDefined( perk_machine._linked_ent_offset ) ) - { - perk_area_origin += perk_machine._linked_ent_offset; - } - } - in_area = 0; - players = get_players(); - dist_check = 9216; - foreach ( player in players ) - { - if ( distancesquared( player.origin, perk_area_origin ) < dist_check ) - { - return 1; - } - } - return 0; -} - -perk_hostmigration() //checked changed to match cerberus output -{ - level endon( "end_game" ); - level notify( "perk_hostmigration" ); - level endon( "perk_hostmigration" ); - while ( 1 ) - { - level waittill( "host_migration_end" ); - jug = getentarray( "vending_jugg", "targetname" ); - tap = getentarray( "vending_doubletap", "targetname" ); - mar = getentarray( "vending_marathon", "targetname" ); - deadshot = getentarray( "vending_deadshot", "targetname" ); - tomb = getentarray( "vending_tombstone", "targetname" ); - extraweap = getentarray( "vending_additionalprimaryweapon", "targetname" ); - sleight = getentarray( "vending_sleight", "targetname" ); - revive = getentarray( "vending_revive", "targetname" ); - chugabud = getentarray( "vending_chugabud", "targetname" ); - foreach ( perk in jug ) - { - if ( isdefined( perk.model ) && perk.model == level.machine_assets[ "juggernog" ].on_model ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "jugger_light" ); - } - } - foreach ( perk in tap ) - { - if ( isdefined( perk.model ) && perk.model == level.machine_assets[ "doubletap" ].on_model ) - { - perk perk_fx(undefined, 1); - perk thread perk_fx("doubletap_light"); - } - } - foreach ( perk in mar ) - { - if ( isdefined( perk.model ) && perk.model == level.machine_assets[ "marathon" ].on_model ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "marathon_light" ); - } - } - foreach ( perk in deadshot ) - { - if ( isdefined( perk.model ) && perk.model == level.machine_assets[ "deadshot" ].on_model ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "deadshot_light" ); - } - } - foreach ( perk in tomb ) - { - if ( isdefined( perk.model ) && perk.model == level.machine_assets[ "tombstone" ].on_model ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "tombstone_light" ); - } - } - foreach ( perk in extraweap ) - { - if ( isdefined( perk.model ) && perk.model == level.machine_assets[ "additionalprimaryweapon" ].on_model ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "additionalprimaryweapon_light" ); - } - } - foreach(perk in sleight) - { - if ( isdefined( perk.model ) && perk.model == level.machine_assets[ "speedcola" ].on_model ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "sleight_light" ); - } - } - foreach ( perk in revive ) - { - if ( isdefined( perk.model ) && perk.model == level.machine_assets[ "revive" ].on_model ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "revive_light" ); - } - } - foreach ( perk in chugabud ) - { - if ( isdefined( perk.model ) && perk.model == level.machine_assets[ "revive" ].on_model ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "tombstone_light" ); - } - } - if ( level._custom_perks.size > 0 ) - { - a_keys = getarraykeys( level._custom_perks ); - for ( i = 0; i < a_keys.size; i++ ) - { - if ( isdefined( level._custom_perks[ a_keys[ i ] ].host_migration_func ) ) - { - level thread [[ level._custom_perks[ a_keys[ i ] ].host_migration_func ]](); - } - } - } - } -} - -get_perk_array( ignore_chugabud ) //checked matches cerberus output -{ - perk_array = []; - if ( self hasperk( "specialty_armorvest" ) ) - { - perk_array[ perk_array.size ] = "specialty_armorvest"; - } - if ( self hasperk( "specialty_deadshot" ) ) - { - perk_array[ perk_array.size ] = "specialty_deadshot"; - } - if ( self hasperk( "specialty_fastreload" ) ) - { - perk_array[ perk_array.size ] = "specialty_fastreload"; - } - if ( self hasperk( "specialty_flakjacket" ) ) - { - perk_array[ perk_array.size ] = "specialty_flakjacket"; - } - if ( self hasperk( "specialty_longersprint" ) ) - { - perk_array[ perk_array.size ] = "specialty_longersprint"; - } - if ( self hasperk( "specialty_quickrevive" ) ) - { - perk_array[ perk_array.size ] = "specialty_quickrevive"; - } - if ( self hasperk( "specialty_rof" ) ) - { - perk_array[ perk_array.size ] = "specialty_rof"; - } - if ( self hasperk( "specialty_additionalprimaryweapon" ) ) - { - perk_array[ perk_array.size ] = "specialty_additionalprimaryweapon"; - } - if ( !isDefined( ignore_chugabud ) || ignore_chugabud == 0 ) - { - if ( self hasperk( "specialty_finalstand" ) ) - { - perk_array[ perk_array.size ] = "specialty_finalstand"; - } - } - if ( level._custom_perks.size > 0 ) - { - a_keys = getarraykeys( level._custom_perks ); - for ( i = 0; i < a_keys.size; i++ ) - { - if ( self hasperk( a_keys[ i ] ) ) - { - perk_array[ perk_array.size ] = a_keys[ i ]; - } - } - } - return perk_array; -} - -initialize_custom_perk_arrays() //checked matches cerberus output -{ - if ( !isDefined( level._custom_perks ) ) - { - level._custom_perks = []; - } -} - -register_perk_basic_info( str_perk, str_alias, n_perk_cost, str_hint_string, str_perk_bottle_weapon ) //checked matches cerberus output -{ -/* -/# - assert( isDefined( str_perk ), "str_perk is a required argument for register_perk_basic_info!" ); -#/ -/# - assert( isDefined( str_alias ), "str_alias is a required argument for register_perk_basic_info!" ); -#/ -/# - assert( isDefined( n_perk_cost ), "n_perk_cost is a required argument for register_perk_basic_info!" ); -#/ -/# - assert( isDefined( str_hint_string ), "str_hint_string is a required argument for register_perk_basic_info!" ); -#/ -/# - assert( isDefined( str_perk_bottle_weapon ), "str_perk_bottle_weapon is a required argument for register_perk_basic_info!" ); -#/ -*/ - _register_undefined_perk( str_perk ); - level._custom_perks[ str_perk ].alias = str_perk; - level._custom_perks[ str_perk ].cost = n_perk_cost; - level._custom_perks[ str_perk ].hint_string = str_hint_string; - level._custom_perks[ str_perk ].perk_bottle = str_perk_bottle_weapon; -} - -register_perk_machine( str_perk, func_perk_machine_setup, func_perk_machine_thread ) //checked matches cerberus output -{ -/* -/# - assert( isDefined( str_perk ), "str_perk is a required argument for register_perk_machine!" ); -#/ -/# - assert( isDefined( func_perk_machine_setup ), "func_perk_machine_setup is a required argument for register_perk_machine!" ); -#/ -/# - assert( isDefined( func_perk_machine_thread ), "func_perk_machine_thread is a required argument for register_perk_machine!" ); -#/ -*/ - _register_undefined_perk( str_perk ); - if ( !isDefined( level._custom_perks[ str_perk ].perk_machine_set_kvps ) ) - { - level._custom_perks[ str_perk ].perk_machine_set_kvps = func_perk_machine_setup; - } - if ( !isDefined( level._custom_perks[ str_perk ].perk_machine_thread ) ) - { - level._custom_perks[ str_perk ].perk_machine_thread = func_perk_machine_thread; - } -} - -register_perk_precache_func( str_perk, func_precache ) //checked matches cerberus output -{ -/* -/# - assert( isDefined( str_perk ), "str_perk is a required argument for register_perk_precache_func!" ); -#/ -/# - assert( isDefined( func_precache ), "func_precache is a required argument for register_perk_precache_func!" ); -#/ -*/ - _register_undefined_perk( str_perk ); - if ( !isDefined( level._custom_perks[ str_perk ].precache_func ) ) - { - level._custom_perks[ str_perk ].precache_func = func_precache; - } -} - -register_perk_threads( str_perk, func_give_player_perk, func_take_player_perk ) //checked matches cerberus output -{ -/* -/# - assert( isDefined( str_perk ), "str_perk is a required argument for register_perk_threads!" ); -#/ -/# - assert( isDefined( func_give_player_perk ), "func_give_player_perk is a required argument for register_perk_threads!" ); -#/ -*/ - _register_undefined_perk( str_perk ); - if ( !isDefined( level._custom_perks[ str_perk ].player_thread_give ) ) - { - level._custom_perks[ str_perk ].player_thread_give = func_give_player_perk; - } - if ( isDefined( func_take_player_perk ) ) - { - if ( !isDefined( level._custom_perks[ str_perk ].player_thread_take ) ) - { - level._custom_perks[ str_perk ].player_thread_take = func_take_player_perk; - } - } -} - -register_perk_clientfields( str_perk, func_clientfield_register, func_clientfield_set ) //checked matches cerberus output -{ -/* -/# - assert( isDefined( str_perk ), "str_perk is a required argument for register_perk_clientfields!" ); -#/ -/# - assert( isDefined( func_clientfield_register ), "func_clientfield_register is a required argument for register_perk_clientfields!" ); -#/ -/# - assert( isDefined( func_clientfield_set ), "func_clientfield_set is a required argument for register_perk_clientfields!" ); -#/ -*/ - _register_undefined_perk( str_perk ); - if ( !isDefined( level._custom_perks[ str_perk ].clientfield_register ) ) - { - level._custom_perks[ str_perk ].clientfield_register = func_clientfield_register; - } - if ( !isDefined( level._custom_perks[ str_perk ].clientfield_set ) ) - { - level._custom_perks[ str_perk ].clientfield_set = func_clientfield_set; - } -} - -register_perk_host_migration_func( str_perk, func_host_migration ) //checked matches cerberus output -{ -/* -/# - assert( isDefined( str_perk ), "str_perk is a required argument for register_perk_host_migration_func!" ); -#/ -/# - assert( isDefined( func_host_migration ), "func_host_migration is a required argument for register_perk_host_migration_func!" ); -#/ -*/ - _register_undefined_perk( str_perk ); - if ( !isDefined( level._custom_perks[ str_perk ].host_migration_func ) ) - { - level._custom_perks[ str_perk ].host_migration_func = func_host_migration; - } -} - -_register_undefined_perk( str_perk ) //checked matches cerberus output -{ - if ( !isDefined( level._custom_perks ) ) - { - level._custom_perks = []; - } - if ( !isDefined( level._custom_perks[ str_perk ] ) ) - { - level._custom_perks[ str_perk ] = spawnstruct(); - } -} - - - - - - - - - - - - - - - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_pers_upgrades.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_pers_upgrades.gsc deleted file mode 100644 index dd27be7..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_pers_upgrades.gsc +++ /dev/null @@ -1,665 +0,0 @@ -#include maps/mp/zombies/_zm_pers_upgrades_functions; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_pers_upgrades; -#include maps/mp/zombies/_zm_pers_upgrades_system; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -pers_upgrade_init() //checked matches cerberus output -{ - setup_pers_upgrade_boards(); - setup_pers_upgrade_revive(); - setup_pers_upgrade_multi_kill_headshots(); - setup_pers_upgrade_cash_back(); - setup_pers_upgrade_insta_kill(); - setup_pers_upgrade_jugg(); - setup_pers_upgrade_carpenter(); - setup_pers_upgrade_flopper(); - setup_pers_upgrade_perk_lose(); - setup_pers_upgrade_pistol_points(); - setup_pers_upgrade_double_points(); - setup_pers_upgrade_sniper(); - setup_pers_upgrade_box_weapon(); - setup_pers_upgrade_nube(); - level thread pers_upgrades_monitor(); -} - -pers_abilities_init_globals() //checked matches cerberus output -{ - self.successful_revives = 0; - self.failed_revives = 0; - self.failed_cash_back_prones = 0; - self.pers[ "last_headshot_kill_time" ] = getTime(); - self.pers[ "zombies_multikilled" ] = 0; - self.non_headshot_kill_counter = 0; - if ( is_true( level.pers_upgrade_box_weapon ) ) - { - self.pers_box_weapon_awarded = undefined; - } - if ( is_true( level.pers_upgrade_nube ) ) - { - self thread pers_nube_unlock_watcher(); - } -} - -is_pers_system_active() //checked matches cerberus output -{ - if ( !is_classic() ) - { - return 0; - } - if ( is_pers_system_disabled() ) - { - return 0; - } - return 1; -} - -is_pers_system_disabled() //checked matches cerberus output -{ - if ( level flag_exists( "sq_minigame_active" ) && flag( "sq_minigame_active" ) ) - { - return 1; - } - return 0; -} - -setup_pers_upgrade_boards() //checked matches cerberus output -{ - if ( is_true( level.pers_upgrade_boards ) ) - { - level.pers_boarding_round_start = 10; - level.pers_boarding_number_of_boards_required = 74; - pers_register_upgrade( "board", ::pers_upgrade_boards_active, "pers_boarding", level.pers_boarding_number_of_boards_required, 0 ); - } -} - -setup_pers_upgrade_revive() //checked matches cerberus output -{ - if ( is_true( level.pers_upgrade_revive ) ) - { - level.pers_revivenoperk_number_of_revives_required = 17; - level.pers_revivenoperk_number_of_chances_to_keep = 1; - pers_register_upgrade( "revive", ::pers_upgrade_revive_active, "pers_revivenoperk", level.pers_revivenoperk_number_of_revives_required, 1 ); - } -} - -setup_pers_upgrade_multi_kill_headshots() //checked matches cerberus output -{ - if ( is_true( level.pers_upgrade_multi_kill_headshots ) ) - { - level.pers_multikill_headshots_required = 5; - level.pers_multikill_headshots_upgrade_reset_counter = 25; - pers_register_upgrade( "multikill_headshots", ::pers_upgrade_headshot_active, "pers_multikill_headshots", level.pers_multikill_headshots_required, 0 ); - } -} - -setup_pers_upgrade_cash_back() //checked matches cerberus output -{ - if ( is_true( level.pers_upgrade_cash_back ) ) - { - level.pers_cash_back_num_perks_required = 50; - level.pers_cash_back_perk_buys_prone_required = 15; - level.pers_cash_back_failed_prones = 1; - level.pers_cash_back_money_reward = 1000; - pers_register_upgrade( "cash_back", ::pers_upgrade_cash_back_active, "pers_cash_back_bought", level.pers_cash_back_num_perks_required, 0 ); - add_pers_upgrade_stat( "cash_back", "pers_cash_back_prone", level.pers_cash_back_perk_buys_prone_required ); - } -} - -setup_pers_upgrade_insta_kill() //checked matches cerberus output -{ - if ( is_true( level.pers_upgrade_insta_kill ) ) - { - level.pers_insta_kill_num_required = 2; - level.pers_insta_kill_upgrade_active_time = 18; - pers_register_upgrade( "insta_kill", ::pers_upgrade_insta_kill_active, "pers_insta_kill", level.pers_insta_kill_num_required, 0 ); - } -} - -setup_pers_upgrade_jugg() //checked matches cerberus output -{ - if ( is_true( level.pers_upgrade_jugg ) ) - { - level.pers_jugg_hit_and_die_total = 3; - level.pers_jugg_hit_and_die_round_limit = 2; - level.pers_jugg_round_reached_max = 1; - level.pers_jugg_round_lose_target = 15; - level.pers_jugg_upgrade_health_bonus = 90; - pers_register_upgrade( "jugg", ::pers_upgrade_jugg_active, "pers_jugg", level.pers_jugg_hit_and_die_total, 0 ); - } -} - -setup_pers_upgrade_carpenter() //checked matches cerberus output -{ - if ( is_true( level.pers_upgrade_carpenter ) ) - { - level.pers_carpenter_zombie_kills = 1; - pers_register_upgrade( "carpenter", ::pers_upgrade_carpenter_active, "pers_carpenter", level.pers_carpenter_zombie_kills, 0 ); - } -} - -setup_pers_upgrade_flopper() //checked matches cerberus output -{ - if ( is_true( level.pers_upgrade_flopper ) ) - { - level.pers_flopper_damage_counter = 6; - level.pers_flopper_counter = 1; - level.pers_flopper_min_fall_damage_activate = 30; - level.pers_flopper_min_fall_damage_deactivate = 50; - pers_register_upgrade( "flopper", ::pers_upgrade_flopper_active, "pers_flopper_counter", level.pers_flopper_counter, 0 ); - } -} - -setup_pers_upgrade_perk_lose() //checked matches cerberus output -{ - if ( is_true( level.pers_upgrade_perk_lose ) ) - { - level.pers_perk_round_reached_max = 6; - level.pers_perk_lose_counter = 3; - pers_register_upgrade( "perk_lose", ::pers_upgrade_perk_lose_active, "pers_perk_lose_counter", level.pers_perk_lose_counter, 0 ); - } -} - -setup_pers_upgrade_pistol_points() //checked matches cerberus output -{ - if ( is_true( level.pers_upgrade_pistol_points ) ) - { - level.pers_pistol_points_num_kills_in_game = 8; - level.pers_pistol_points_accuracy = 0.25; - level.pers_pistol_points_counter = 1; - pers_register_upgrade( "pistol_points", ::pers_upgrade_pistol_points_active, "pers_pistol_points_counter", level.pers_pistol_points_counter, 0 ); - } -} - -setup_pers_upgrade_double_points() //checked matches cerberus output -{ - if ( is_true( level.pers_upgrade_double_points ) ) - { - level.pers_double_points_score = 2500; - level.pers_double_points_counter = 1; - pers_register_upgrade( "double_points", ::pers_upgrade_double_points_active, "pers_double_points_counter", level.pers_double_points_counter, 0 ); - } -} - -setup_pers_upgrade_sniper() //checked matches cerberus output -{ - if ( is_true( level.pers_upgrade_sniper ) ) - { - level.pers_sniper_round_kills_counter = 5; - level.pers_sniper_kill_distance = 800; - level.pers_sniper_counter = 1; - level.pers_sniper_misses = 3; - pers_register_upgrade( "sniper", ::pers_upgrade_sniper_active, "pers_sniper_counter", level.pers_sniper_counter, 0 ); - } -} - -setup_pers_upgrade_box_weapon() //checked matches cerberus output -{ - if ( is_true( level.pers_upgrade_box_weapon ) ) - { - level.pers_box_weapon_counter = 5; - level.pers_box_weapon_lose_round = 10; - pers_register_upgrade( "box_weapon", ::pers_upgrade_box_weapon_active, "pers_box_weapon_counter", level.pers_box_weapon_counter, 0 ); - } -} - -setup_pers_upgrade_nube() //checked matches cerberus output -{ - if ( is_true( level.pers_upgrade_nube ) ) - { - level.pers_nube_counter = 1; - level.pers_nube_lose_round = 10; - level.pers_numb_num_kills_unlock = 5; - pers_register_upgrade( "nube", ::pers_upgrade_nube_active, "pers_nube_counter", level.pers_nube_counter, 0 ); - } -} - -pers_upgrade_boards_active() //checked matches cerberus output -{ - self endon( "disconnect" ); - last_round_number = level.round_number; - while ( 1 ) - { - self waittill( "pers_stats_end_of_round" ); - if ( level.round_number >= last_round_number ) - { - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( self.rebuild_barrier_reward == 0 ) - { - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_boarding", 0 ); - return; - } - } - } - last_round_number = level.round_number; - } -} - -pers_upgrade_revive_active() //checked matches cerberus output -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "player_failed_revive" ); - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( self.failed_revives >= level.pers_revivenoperk_number_of_chances_to_keep ) - { - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_revivenoperk", 0 ); - self.failed_revives = 0; - return; - } - } - } -} - -pers_upgrade_headshot_active() //checked matches cerberus output -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "zombie_death_no_headshot" ); - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - self.non_headshot_kill_counter++; - if ( self.non_headshot_kill_counter >= level.pers_multikill_headshots_upgrade_reset_counter ) - { - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_multikill_headshots", 0 ); - self.non_headshot_kill_counter = 0; - return; - } - } - } -} - -pers_upgrade_cash_back_active() //checked matches cerberus output -{ - self endon( "disconnect" ); - wait 0.5; - - wait 0.5; - while ( 1 ) - { - self waittill( "cash_back_failed_prone" ); - wait 0.1; - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - self.failed_cash_back_prones++; - if ( self.failed_cash_back_prones >= level.pers_cash_back_failed_prones ) - { - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_cash_back_bought", 0 ); - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_cash_back_prone", 0 ); - self.failed_cash_back_prones = 0; - wait 0.4; - return; - } - } - } -} - -pers_upgrade_insta_kill_active() //checked changed to match cerberus output -{ - self endon( "disconnect" ); - wait 0.2; - wait 0.2; - while ( 1 ) - { - self waittill( "pers_melee_swipe" ); - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( isDefined( level.pers_melee_swipe_zombie_swiper ) ) - { - e_zombie = level.pers_melee_swipe_zombie_swiper; - if ( isalive( e_zombie ) && is_true( e_zombie.is_zombie ) ) - { - e_zombie.marked_for_insta_upgraded_death = 1; - e_zombie dodamage( e_zombie.health + 666, e_zombie.origin, self, self, "none", "MOD_PISTOL_BULLET", 0, "knife_zm" ); - } - level.pers_melee_swipe_zombie_swiper = undefined; - } - break; - } - } - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_insta_kill", 0 ); - self kill_insta_kill_upgrade_hud_icon(); - wait 0.4; -} - -is_insta_kill_upgraded_and_active() //checked matches cerberus output -{ - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( self maps/mp/zombies/_zm_powerups::is_insta_kill_active() ) - { - if ( is_true( self.pers_upgrades_awarded[ "insta_kill" ] ) ) - { - return 1; - } - } - } - return 0; -} - -pers_upgrade_jugg_active() //checked changed to match cerberus output -{ - self endon( "disconnect" ); - wait 0.5; - - wait 0.5; - self maps/mp/zombies/_zm_perks::perk_set_max_health_if_jugg( "jugg_upgrade", 1, 0 ); - while ( 1 ) - { - level waittill( "start_of_round" ); - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( level.round_number == level.pers_jugg_round_lose_target ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "pers_jugg_downgrade_count", 0 ); - wait 0.5; - if ( self.pers[ "pers_jugg_downgrade_count" ] >= level.pers_jugg_round_reached_max ) - { - break; - } - } - } - } - self maps/mp/zombies/_zm_perks::perk_set_max_health_if_jugg( "jugg_upgrade", 1, 1 ); - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_jugg", 0 ); - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_jugg_downgrade_count", 0 ); -} - -pers_upgrade_carpenter_active() //checked changed to match cerberus output -{ - self endon( "disconnect" ); - wait 0.2; - wait 0.2; - level waittill( "carpenter_finished" ); - self.pers_carpenter_kill = undefined; - while ( 1 ) - { - self waittill( "carpenter_zombie_killed_check_finished" ); - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( !isDefined( self.pers_carpenter_kill ) ) - { - break; - } - } - self.pers_carpenter_kill = undefined; - } - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_carpenter", 0 ); - wait 0.4; -} - -persistent_carpenter_ability_check() //checked changed to match cerberus output -{ - if ( is_true( level.pers_upgrade_carpenter ) ) - { - self endon( "disconnect" ); - if ( is_true( self.pers_upgrades_awarded[ "carpenter" ] ) ) - { - level.pers_carpenter_boards_active = 1; - } - self.pers_carpenter_zombie_check_active = 1; - self.pers_carpenter_kill = undefined; - carpenter_extra_time = 3; - carpenter_finished_start_time = undefined; - level.carpenter_finished_start_time = undefined; - while ( 1 ) - { - if ( !is_pers_system_disabled() ) - { - if ( !isDefined( level.carpenter_powerup_active ) ) - { - if ( !isDefined( level.carpenter_finished_start_time ) ) - { - level.carpenter_finished_start_time = getTime(); - } - time = getTime(); - dt = ( time - level.carpenter_finished_start_time ) / 1000; - if ( dt >= carpenter_extra_time ) - { - break; - } - } - else if ( isDefined( self.pers_carpenter_kill ) ) - { - if ( is_true( self.pers_upgrades_awarded[ "carpenter" ] ) ) - { - break; - } - else - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "pers_carpenter", 0 ); - } - } - } - wait 0.05; - } - self notify( "carpenter_zombie_killed_check_finished" ); - self.pers_carpenter_zombie_check_active = undefined; - level.pers_carpenter_boards_active = undefined; - } -} - -pers_zombie_death_location_check( attacker, v_pos ) //checked matches cerberus output -{ - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( is_player_valid( attacker ) ) - { - if ( isDefined( attacker.pers_carpenter_zombie_check_active ) ) - { - if ( !check_point_in_playable_area( v_pos ) ) - { - attacker.pers_carpenter_kill = 1; - } - } - } - } -} - -insta_kill_pers_upgrade_icon() //checked matches cerberus output -{ - if ( self.zombie_vars[ "zombie_powerup_insta_kill_ug_on" ] ) - { - self.zombie_vars[ "zombie_powerup_insta_kill_ug_time" ] = level.pers_insta_kill_upgrade_active_time; - return; - } - self.zombie_vars[ "zombie_powerup_insta_kill_ug_on" ] = 1; - self._show_solo_hud = 1; - self thread time_remaining_pers_upgrade(); -} - -time_remaining_pers_upgrade() //checked matches cerberus output -{ - self endon( "disconnect" ); - self endon( "kill_insta_kill_upgrade_hud_icon" ); - while ( self.zombie_vars[ "zombie_powerup_insta_kill_ug_time" ] >= 0 ) - { - wait 0.05; - self.zombie_vars[ "zombie_powerup_insta_kill_ug_time" ] -= 0.05; - } - self kill_insta_kill_upgrade_hud_icon(); -} - -kill_insta_kill_upgrade_hud_icon() //checked matches cerberus output -{ - self.zombie_vars[ "zombie_powerup_insta_kill_ug_on" ] = 0; - self._show_solo_hud = 0; - self.zombie_vars[ "zombie_powerup_insta_kill_ug_time" ] = level.pers_insta_kill_upgrade_active_time; - self notify( "kill_insta_kill_upgrade_hud_icon" ); -} - -pers_upgrade_flopper_active() //checked matches cerberus output -{ - self endon( "disconnect" ); - wait 0.5; - /* -/# - iprintlnbold( "*** WE'VE GOT FLOPPER UPGRADED ***" ); -#/ - */ - wait 0.5; - self thread maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_flopper_watcher(); - self waittill( "pers_flopper_lost" ); - /* -/# - iprintlnbold( "*** OH NO: Lost FLOPPER Upgrade ***" ); -#/ - */ - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_flopper_counter", 0 ); - self.pers_num_flopper_damages = 0; -} - -pers_upgrade_perk_lose_active() //checked matches cerberus output -{ - self endon( "disconnect" ); - wait 0.5; - /* -/# - iprintlnbold( "*** WE'VE GOT PERK LOSE UPGRADED ***" ); -#/ - */ - wait 0.5; - self.pers_perk_lose_start_round = level.round_number; - self waittill( "pers_perk_lose_lost" ); - /* -/# - iprintlnbold( "*** OH NO: Lost PERK LOSE Upgrade ***" ); -#/ - */ - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_perk_lose_counter", 0 ); -} - -pers_upgrade_pistol_points_active() //checked changed to match cerberus output -{ - self endon( "disconnect" ); - wait 0.5; - /* -/# - iprintlnbold( "*** WE'VE GOT PISTOL POINTS UPGRADED ***" ); -#/ - */ - wait 0.5; - while ( 1 ) - { - self waittill( "pers_pistol_points_kill" ); - accuracy = self maps/mp/zombies/_zm_pers_upgrades_functions::pers_get_player_accuracy(); - if ( accuracy > level.pers_pistol_points_accuracy ) - { - break; - } - } - /* -/# - iprintlnbold( "*** OH NO: Lost PISTOL POINTS Upgrade ***" ); -#/ - */ - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_pistol_points_counter", 0 ); -} - -pers_upgrade_double_points_active() //checked matches cerberus output -{ - self endon( "disconnect" ); - wait 0.5; - /* -/# - iprintlnbold( "*** WE'VE GOT DOUBLE POINTS UPGRADED ***" ); -#/ - */ - wait 0.5; - self waittill( "double_points_lost" ); - /* -/# - iprintlnbold( "*** OH NO: Lost DOUBLE POINTS Upgrade ***" ); -#/ - */ - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_double_points_counter", 0 ); -} - -pers_upgrade_sniper_active() //checked matches cerberus output -{ - self endon( "disconnect" ); - wait 0.5; - /* -/# - iprintlnbold( "*** WE'VE GOT SNIPER UPGRADED ***" ); -#/ - */ - wait 0.5; - self waittill( "pers_sniper_lost" ); - /* -/# - iprintlnbold( "*** OH NO: Lost SNIPER Upgrade ***" ); -#/ - */ - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_sniper_counter", 0 ); -} - -pers_upgrade_box_weapon_active() //checked changed to match cerberus output -{ - self endon( "disconnect" ); - wait 0.5; - /* -/# - iprintlnbold( "*** WE'VE GOT BOX WEAPON UPGRADED ***" ); -#/ - */ - self thread maps/mp/zombies/_zm_pers_upgrades_functions::pers_magic_box_teddy_bear(); - wait 0.5; - self.pers_box_weapon_awarded = 1; - while ( 1 ) - { - level waittill( "start_of_round" ); - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( level.round_number >= level.pers_box_weapon_lose_round ) - { - break; - } - } - } - /* -/# - iprintlnbold( "*** OH NO: Lost BOX WEAPON Upgrade ***" ); -#/ - */ - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_box_weapon_counter", 0 ); -} - -pers_upgrade_nube_active() //checked changed to match cerberus output -{ - self endon( "disconnect" ); - wait 0.5; - /* -/# - iprintlnbold( "*** WE'VE GOT NUBE UPGRADED ***" ); -#/ - */ - wait 0.5; - while ( 1 ) - { - level waittill( "start_of_round" ); - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( level.round_number >= level.pers_nube_lose_round ) - { - break; - } - } - } - /* -/# - iprintlnbold( "*** OH NO: Lost NUBE Upgrade ***" ); -#/ - */ - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_nube_counter", 0 ); -} - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_pers_upgrades_functions.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_pers_upgrades_functions.gsc deleted file mode 100644 index 77b7977..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_pers_upgrades_functions.gsc +++ /dev/null @@ -1,1354 +0,0 @@ -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/_visionset_mgr; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_pers_upgrades; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -pers_boards_updated( zbarrier ) //checked matches cerberus output -{ - if ( is_true( level.pers_upgrade_boards ) ) - { - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( !is_true( self.pers_upgrades_awarded[ "board" ] ) ) - { - if ( level.round_number >= level.pers_boarding_round_start ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "pers_boarding", 0 ); - if ( self.pers[ "pers_boarding" ] >= level.pers_boarding_number_of_boards_required ) - { - if ( isDefined( zbarrier ) ) - { - self.upgrade_fx_origin = zbarrier.origin; - } - } - } - } - } - } -} - -pers_revive_active() //checked matches cerberus output -{ - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( is_true( self.pers_upgrades_awarded[ "revive" ] ) ) - { - return 1; - } - } - return 0; -} - -pers_increment_revive_stat( reviver ) //checked matches cerberus output -{ - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - reviver maps/mp/zombies/_zm_stats::increment_client_stat( "pers_revivenoperk", 0 ); - } -} - -pers_mulit_kill_headshot_active() //checked matches cerberus output -{ - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( is_true( self.pers_upgrades_awarded[ "multikill_headshots" ] ) ) - { - return 1; - } - } - return 0; -} - -pers_check_for_pers_headshot( time_of_death, zombie ) //checked matches cerberus output -{ - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( self.pers[ "last_headshot_kill_time" ] == time_of_death ) - { - self.pers[ "zombies_multikilled" ]++; - } - else - { - self.pers[ "zombies_multikilled" ] = 1; - } - self.pers[ "last_headshot_kill_time" ] = time_of_death; - if ( self.pers[ "zombies_multikilled" ] == 2 ) - { - if ( isDefined( zombie ) ) - { - self.upgrade_fx_origin = zombie.origin; - } - self maps/mp/zombies/_zm_stats::increment_client_stat( "pers_multikill_headshots", 0 ); - self.non_headshot_kill_counter = 0; - } - } -} - -cash_back_player_drinks_perk() //checked matches cerberus output -{ - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( is_true( level.pers_upgrade_cash_back ) ) - { - if ( is_true self.pers_upgrades_awarded[ "cash_back" ] ) ) - { - self thread cash_back_money_reward(); - self thread cash_back_player_prone_check( 1 ); - } - else if ( self.pers[ "pers_cash_back_bought" ] < level.pers_cash_back_num_perks_required ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "pers_cash_back_bought", 0 ); - return; - } - else - { - self thread cash_back_player_prone_check( 0 ); - } - } - } -} - -cash_back_money_reward() //checked matches cerberus output -{ - self endon( "death" ); - step = 5; - amount_per_step = int( level.pers_cash_back_money_reward / step ); - for ( i = 0; i < step; i++ ) - { - self maps/mp/zombies/_zm_score::add_to_player_score( amount_per_step ); - wait 0.2; - } -} - -cash_back_player_prone_check( got_ability ) //checked changed to match cerberus output -{ - self endon( "death" ); - prone_time = 2.5; - start_time = getTime(); - while ( 1 ) - { - time = getTime(); - dt = ( time - start_time ) / 1000; - if ( dt > prone_time ) - { - break; - } - if ( self getstance() == "prone" ) - { - if ( !got_ability ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "pers_cash_back_prone", 0 ); - wait 0.8; - } - return; - } - wait 0.01; - } - if ( got_ability ) - { - self notify( "cash_back_failed_prone" ); - } -} - -pers_upgrade_insta_kill_upgrade_check() //checked changed to match cerberus output -{ - if ( is_true( level.pers_upgrade_insta_kill ) ) - { - self endon( "death" ); - if ( !maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - return; - } - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - e_player = players[ i ]; - if ( is_true( e_player.pers_upgrades_awarded[ "insta_kill" ] ) ) - { - e_player thread insta_kill_upgraded_player_kill_func( level.pers_insta_kill_upgrade_active_time ); - } - } - if ( !is_true( self.pers_upgrades_awarded[ "insta_kill" ] ) ) - { - kills_start = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "kills" ); - self waittill( "insta_kill_over" ); - kills_end = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "kills" ); - num_killed = kills_end - kills_start; - if ( num_killed > 0 ) - { - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_insta_kill", 0 ); - } - else - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "pers_insta_kill", 0 ); - } - } - } -} - -insta_kill_upgraded_player_kill_func( active_time ) //checked changed to match cerberus output -{ - self endon( "death" ); - wait 0.25; - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_disabled() ) - { - return; - } - self thread maps/mp/zombies/_zm_pers_upgrades::insta_kill_pers_upgrade_icon(); - start_time = getTime(); - zombie_collide_radius = 50; - zombie_player_height_test = 100; - while ( 1 ) - { - time = getTime(); - dt = ( time - start_time ) / 1000; - if ( dt > active_time ) - { - break; - } - if ( !maps/mp/zombies/_zm_powerups::is_insta_kill_active() ) - { - break; - } - a_zombies = getaiarray( level.zombie_team ); - e_closest = undefined; - i = 0; - while ( i < a_zombies.size ) - { - e_zombie = a_zombies[ i ]; - if ( isDefined( e_zombie.marked_for_insta_upgraded_death ) ) - { - i++; - continue; - } - height_diff = abs( self.origin[ 2 ] - e_zombie.origin[ 2 ] ); - if ( height_diff < zombie_player_height_test ) - { - dist = distance2d( self.origin, e_zombie.origin ); - if ( dist < zombie_collide_radius ) - { - dist_max = dist; - e_closest = e_zombie; - } - } - i++; - } - if ( isDefined( e_closest ) ) - { - e_closest.marked_for_insta_upgraded_death = 1; - e_closest dodamage( e_closest.health + 666, e_closest.origin, self, self, "none", "MOD_PISTOL_BULLET", 0, "knife_zm" ); - } - wait 0.01; - } -} - -pers_insta_kill_melee_swipe( smeansofdeath, eattacker ) //checked matches cerberus output -{ - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( isDefined( smeansofdeath ) && smeansofdeath == "MOD_MELEE" ) - { - if ( isplayer( self ) && maps/mp/zombies/_zm_pers_upgrades::is_insta_kill_upgraded_and_active() ) - { - self notify( "pers_melee_swipe" ); - level.pers_melee_swipe_zombie_swiper = eattacker; - } - } - } -} - -pers_upgrade_jugg_player_death_stat() //checked matches cerberus output -{ - if ( is_true( level.pers_upgrade_jugg ) ) - { - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( !is_true( self.pers_upgrades_awarded[ "jugg" ] ) ) - { - if ( level.round_number <= level.pers_jugg_hit_and_die_round_limit ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "pers_jugg", 0 ); - } - } - } - } -} - -pers_jugg_active() //checked matches cerberus output -{ - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( is_true( self.pers_upgrades_awarded[ "jugg" ] ) ) - { - return 1; - } - } - return 0; -} - -pers_upgrade_flopper_damage_check( smeansofdeath, idamage ) //checked changed to match cerberus output -{ - if ( !maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - return 0; - } - if ( !isDefined( smeansofdeath ) || smeansofdeath != "MOD_FALLING" ) - { - return 0; - } - if ( !is_true( self.pers_upgrades_awarded[ "flopper" ] ) ) - { - if ( idamage < level.pers_flopper_min_fall_damage_activate ) - { - return 0; - } - if ( !isDefined( self.pers_num_flopper_damages ) ) - { - self.pers_num_flopper_damages = 0; - } - self.pers_num_flopper_damages++; - if ( self.pers_num_flopper_damages >= level.pers_flopper_damage_counter ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "pers_flopper_counter", 0 ); - /* -/# - iprintlnbold( "FLOPPER STAT: INCREMENTED" ); -#/ - */ - } - } - else if ( !is_true( self.pers_flopper_active ) ) - { - if ( idamage >= level.pers_flopper_min_fall_damage_deactivate ) - { - self notify( "pers_flopper_lost" ); - } - return 0; - } - if ( idamage > 0 ) - { - self notify( "activate_pers_flopper_effect" ); - return 1; - } - return 0; -} - -divetonuke_precache_override_func() //checked matches cerberus output -{ - precacheshader( "specialty_divetonuke_zombies" ); - level._effect[ "divetonuke_light" ] = loadfx( "misc/fx_zombie_cola_dtap_on" ); -} - -pers_upgrade_flopper_watcher() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "pers_flopper_lost" ); - while ( 1 ) - { - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_disabled() ) - { - wait 0.01; - } - else - { - self waittill( "dtp_start" ); - self.pers_flopper_active = 1; - self thread pers_flopper_dtn(); - self waittill( "dtp_end" ); - self.pers_flopper_active = undefined; - } - } -} - -pers_flopper_dtn() //checked matches cerberus output -{ - self endon( "disconnect" ); - self waittill( "activate_pers_flopper_effect" ); - if ( isDefined( level.pers_flopper_divetonuke_func ) ) - { - self thread [[ level.pers_flopper_divetonuke_func ]]( self, self.origin ); - } -} - -pers_flopper_explode( attacker, origin ) //checked matches cerberus output -{ - self endon( "disconnect" ); - radius = level.zombie_vars[ "zombie_perk_divetonuke_radius" ]; - min_damage = level.zombie_vars[ "zombie_perk_divetonuke_min_damage" ]; - max_damage = level.zombie_vars[ "zombie_perk_divetonuke_max_damage" ]; - if ( is_true( level.pers_flopper_network_optimized ) ) - { - attacker thread pers_flopper_damage_network_optimized( origin, radius, max_damage, min_damage, "MOD_GRENADE_SPLASH" ); - } - else - { - radiusdamage( origin, radius, max_damage, min_damage, attacker, "MOD_GRENADE_SPLASH" ); - } - attacker setclientfield( "phd_flopper_effects", 1 ); - maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker ); - wait 1; - maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker ); - attacker setclientfield( "phd_flopper_effects", 0 ); -} - -pers_flopper_damage_network_optimized( origin, radius, max_damage, min_damage, damage_mod ) //checked partially changed to match cerberus output //for loops don't work with continues used while loop -{ - self endon( "disconnect" ); - a_zombies = get_array_of_closest( origin, get_round_enemy_array(), undefined, undefined, radius ); - network_stall_counter = 0; - if ( isDefined( a_zombies ) ) - { - i = 0; - while ( i < a_zombies.size ) - { - e_zombie = a_zombies[ i ]; - if ( !isDefined( e_zombie ) || !isalive( e_zombie ) ) - { - i++; - continue; - } - dist = distance( e_zombie.origin, origin ); - damage = min_damage + ( ( max_damage - min_damage ) * ( 1 - ( dist / radius ) ) ); - e_zombie dodamage( damage, e_zombie.origin, self, self, 0, damage_mod ); - network_stall_counter--; - if ( network_stall_counter <= 0 ) - { - wait_network_frame(); - network_stall_counter = randomintrange( 1, 3 ); - } - i++; - } - } -} - -pers_upgrade_pistol_points_kill() //checked matches cerberus output -{ - if ( !maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - return; - } - if ( !isDefined( self.pers_num_zombies_killed_in_game ) ) - { - self.pers_num_zombies_killed_in_game = 0; - } - self.pers_num_zombies_killed_in_game++; - if ( !is_true( self.pers_upgrades_awarded[ "pistol_points" ] ) ) - { - if ( self.pers_num_zombies_killed_in_game >= level.pers_pistol_points_num_kills_in_game ) - { - accuracy = self pers_get_player_accuracy(); - if ( accuracy <= level.pers_pistol_points_accuracy ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "pers_pistol_points_counter", 0 ); - /* -/# - iprintlnbold( "PISTOL POINTS STAT: INCREMENTED" ); -#/ - */ - } - } - } - else - { - self notify( "pers_pistol_points_kill" ); - } -} - -pers_upgrade_pistol_points_set_score( score, event, mod, damage_weapon ) //checked matches cerberus output -{ - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( is_true( self.pers_upgrades_awarded[ "pistol_points" ] ) ) - { - if ( isDefined( event ) ) - { - if ( event == "rebuild_board" ) - { - return score; - } - if ( isDefined( damage_weapon ) ) - { - weapon_class = getweaponclasszm( damage_weapon ); - if ( weapon_class != "weapon_pistol" ) - { - return score; - } - } - if ( isDefined( mod ) && isstring( mod ) && mod == "MOD_PISTOL_BULLET" ) - { - score *= 2; - } - } - } - } - return score; -} - -pers_upgrade_double_points_pickup_start() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( !maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - return; - } - if ( is_true( self.double_points_ability_check_active ) ) - { - self.double_points_ability_start_time = getTime(); - return; - } - self.double_points_ability_check_active = 1; - level.pers_double_points_active = 1; - start_points = self.score; - if ( isDefined( self.account_value ) ) - { - bank_account_value_start = self.account_value; - } - else - { - bank_account_value_start = 0; - } - self.double_points_ability_start_time = getTime(); - last_score = self.score; - ability_lost = 0; - while ( 1 ) - { - if ( self.score > last_score ) - { - ability_lost = 1; - } - last_score = self.score; - time = getTime(); - dt = time - self.double_points_ability_start_time / 1000; - if ( dt >= 30 ) - { - break; - } - wait 0.1; - } - level.pers_double_points_active = undefined; - if ( isDefined( self.account_value ) ) - { - bank_account_value_end = self.account_value; - } - else - { - bank_account_value_end = 0; - } - if ( bank_account_value_end < bank_account_value_start ) - { - withdrawal_number = bank_account_value_start - bank_account_value_end; - withdrawal_fees = level.ta_vaultfee * withdrawal_number; - withdrawal_amount = level.bank_deposit_ddl_increment_amount * withdrawal_number; - bank_withdrawal_total = withdrawal_amount - withdrawal_fees; - } - else - { - bank_withdrawal_total = 0; - } - if ( is_true( self.pers_upgrades_awarded[ "double_points" ] ) ) - { - if ( ability_lost == 1 ) - { - self notify( "double_points_lost" ); - } - } - else - { - total_points = self.score - start_points; - total_points -= bank_withdrawal_total; - if ( total_points >= level.pers_double_points_score ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "pers_double_points_counter", 0 ); - /* -/# - iprintlnbold( "PISTOL POINTS STAT: INCREMENTED" ); -#/ - */ - } - } - self.double_points_ability_check_active = undefined; -} - -pers_upgrade_double_points_set_score( score ) //checked matches cerberus output -{ - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( is_true( self.pers_upgrades_awarded[ "double_points" ] ) ) - { - if ( is_true( level.pers_double_points_active ) ) - { - score = int( score * 0.5 ); - } - } - } - return score; -} - -pers_upgrade_double_points_cost( current_cost ) //checked matches cerberus output -{ - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( is_true( self.pers_upgrades_awarded[ "double_points" ] ) ) - { - current_cost = int( current_cost / 2 ); - } - } - return current_cost; -} - -is_pers_double_points_active() //checked matches cerberus output -{ - if ( is_true( self.pers_upgrades_awarded[ "double_points" ] ) ) - { - if ( is_true( level.pers_double_points_active ) ) - { - return 1; - } - } - return 0; -} - -pers_upgrade_perk_lose_bought() //checked changed to match cerberus output -{ - if ( !maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - return; - } - wait 1; - if ( !is_true( self.pers_upgrades_awarded[ "perk_lose" ] ) ) - { - if ( level.round_number <= level.pers_perk_round_reached_max ) - { - if ( !isDefined( self.bought_all_perks ) ) - { - a_perks = self get_perk_array( 0 ); - if ( isDefined( a_perks ) && a_perks.size == 4 ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "pers_perk_lose_counter", 0 ); - /* -/# - iprintlnbold( "PERK LOSE STAT: INCREMENTED" ); -#/ - */ - self.bought_all_perks = 1; - } - } - } - } - else if ( isDefined( self.pers_perk_lose_start_round ) ) - { - if ( level.round_number > 1 && self.pers_perk_lose_start_round == level.round_number ) - { - self notify( "pers_perk_lose_lost" ); - } - } -} - -pers_upgrade_perk_lose_save() //checked changed to match cerberus output -{ - while ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( isDefined( self.perks_active ) ) - { - self.a_saved_perks = []; - self.a_saved_perks = arraycopy( self.perks_active ); - } - else - { - self.a_saved_perks = self get_perk_array( 0 ); - } - self.a_saved_primaries = self getweaponslistprimaries(); - self.a_saved_primaries_weapons = []; - index = 0; - foreach ( weapon in self.a_saved_primaries ) - { - self.a_saved_primaries_weapons[ index ] = maps/mp/zombies/_zm_weapons::get_player_weapondata( self, weapon ); - index++; - } - } -} - -pers_upgrade_perk_lose_restore() //checked changed to match cerberus output -{ - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - player_has_mule_kick = 0; - discard_quickrevive = 0; - if ( isDefined( self.a_saved_perks ) && self.a_saved_perks.size >= 2 ) - { - for ( i = 0; i < self.a_saved_perks.size; i++ ) - { - perk = self.a_saved_perks[ i ]; - if ( perk == "specialty_quickrevive" ) - { - discard_quickrevive = 1; - } - } - if ( discard_quickrevive == 1 ) - { - size = self.a_saved_perks.size; - } - else - { - size = self.a_saved_perks.size - 1; - } - i = 0; - while ( i < size ) - { - perk = self.a_saved_perks[ i ]; - if ( discard_quickrevive == 1 && perk == "specialty_quickrevive" ) - { - i++; - continue; - } - if ( perk == "specialty_additionalprimaryweapon" ) - { - player_has_mule_kick = 1; - } - if ( self hasperk( perk ) ) - { - i++; - continue; - } - self maps/mp/zombies/_zm_perks::give_perk( perk ); - wait_network_frame(); - i++; - } - } - else if ( player_has_mule_kick ) - { - a_current_weapons = self getweaponslistprimaries(); - for ( i = 0; i < self.a_saved_primaries_weapons.size; i++ ) - { - saved_weapon = self.a_saved_primaries_weapons[ i ]; - found = 0; - for ( j = 0; j < a_current_weapons.size; j++ ) - { - current_weapon = a_current_weapons[ j ]; - if ( current_weapon == saved_weapon[ "name" ] ) - { - found = 1; - break; - } - } - if ( found == 0 ) - { - self maps/mp/zombies/_zm_weapons::weapondata_give( self.a_saved_primaries_weapons[ i ] ); - self switchtoweapon( a_current_weapons[ 0 ] ); - break; - } - } - } - self.a_saved_perks = undefined; - self.a_saved_primaries = undefined; - self.a_saved_primaries_weapons = undefined; - } -} - -pers_upgrade_sniper_kill_check( zombie, attacker ) //checked changed to match cerberus output -{ - if ( !maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - return; - } - if ( !isDefined( zombie ) || !isDefined( attacker ) || !isDefined( zombie.damageweapon ) ) - { - return; - } - if ( is_true( zombie.marked_for_insta_upgraded_death ) ) - { - return; - } - weapon = zombie.damageweapon; - if ( !is_sniper_weapon( weapon ) ) - { - return; - } - if ( is_true( self.pers_upgrades_awarded[ "sniper" ] ) ) - { - self thread pers_sniper_score_reward(); - } - else - { - dist = distance( zombie.origin, attacker.origin ); - if ( dist < level.pers_sniper_kill_distance ) - { - return; - } - if ( !isDefined( self.pers_sniper_round ) ) - { - self.pers_sniper_round = level.round_number; - self.pers_sniper_kills = 0; - } - else if ( self.pers_sniper_round != level.round_number ) - { - self.pers_sniper_round = level.round_number; - self.pers_sniper_kills = 0; - } - self.pers_sniper_kills++; - /* -/# - iprintlnbold( "Pers: Long range Sniper Kill" ); -#/ - */ - if ( self.pers_sniper_kills >= level.pers_sniper_round_kills_counter ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "pers_sniper_counter", 0 ); - /* -/# - iprintlnbold( "SNIPER STAT: INCREMENTED" ); -#/ - */ - } - } -} - -pers_sniper_score_reward() //checked changed to match cerberus output -{ - self endon( "disconnect" ); - self endon( "death" ); - while ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - total_score = 300; - steps = 10; - score_inc = int( total_score / steps ); - for ( i = 0; i < steps; i++ ) - { - self maps/mp/zombies/_zm_score::add_to_player_score( score_inc ); - wait 0.25; - } - } -} - -pers_sniper_player_fires( weapon, hit ) //checked changed to match cerberus output -{ - if ( !maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - return; - } - if ( isDefined( weapon ) && isDefined( hit ) ) - { - if ( is_true( self.pers_upgrades_awarded[ "sniper" ] ) ) - { - if ( is_sniper_weapon( weapon ) ) - { - if ( !isDefined( self.num_sniper_misses ) ) - { - self.num_sniper_misses = 0; - } - if ( hit ) - { - self.num_sniper_misses = 0; - } - else - { - self.num_sniper_misses++; - if ( self.num_sniper_misses >= level.pers_sniper_misses ) - { - self notify( "pers_sniper_lost" ); - self.num_sniper_misses = 0; - } - } - } - } - } -} - -pers_get_player_accuracy() //checked matches cerberus output -{ - accuracy = 1; - total_shots = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "total_shots" ); - total_hits = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "hits" ); - if ( total_shots > 0 ) - { - accuracy = total_hits / total_shots; - } - return accuracy; -} - -is_sniper_weapon( weapon ) //checked matches cerberus output -{ - if ( !isDefined( weapon ) ) - { - return 0; - } - if ( !isstring( weapon ) ) - { - return 0; - } - if ( getsubstr( weapon, 0, 4 ) == "svu_" ) - { - return 1; - } - if ( getsubstr( weapon, 0, 6 ) == "dsr50_" ) - { - return 1; - } - if ( getsubstr( weapon, 0, 10 ) == "barretm82_" ) - { - return 1; - } - return 0; -} - -pers_upgrade_box_weapon_used( e_user, e_grabber ) //checked changed to match cerberus output -{ - if ( !maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - return; - } - if ( level.round_number >= level.pers_box_weapon_lose_round ) - { - return; - } - if ( isDefined( e_grabber ) && isplayer( e_grabber ) ) - { - if ( is_true( e_grabber.pers_box_weapon_awarded ) ) - { - return; - } - if ( is_true( e_grabber.pers_upgrades_awarded[ "box_weapon" ] ) ) - { - return; - } - e_grabber maps/mp/zombies/_zm_stats::increment_client_stat( "pers_box_weapon_counter", 0 ); - } - else if ( isDefined( e_user ) && isplayer( e_user ) ) - { - if ( is_true( e_user.pers_upgrades_awarded[ "box_weapon" ] ) ) - { - return; - } - e_user maps/mp/zombies/_zm_stats::zero_client_stat( "pers_box_weapon_counter", 0 ); - } -} - -pers_magic_box_teddy_bear() //checked changed to match cerberus output -{ - self endon( "disconnect" ); - if ( is_true( level.pers_magic_box_firesale ) ) - { - self thread pers_magic_box_firesale(); - } - m_bear = spawn( "script_model", self.origin ); - m_bear setmodel( level.chest_joker_model ); - m_bear pers_magic_box_set_teddy_location( level.chest_index ); - self.pers_magix_box_teddy_bear = m_bear; - m_bear setinvisibletoall(); - wait 0.1; - m_bear setvisibletoplayer( self ); - while ( 1 ) - { - box = level.chests[ level.chest_index ]; - if ( level.round_number >= level.pers_box_weapon_lose_round ) - { - break; - } - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_disabled() ) - { - m_bear setinvisibletoall(); - while ( 1 ) - { - if ( !maps/mp/zombies/_zm_pers_upgrades::is_pers_system_disabled() ) - { - break; - } - wait 0.01; - } - m_bear setvisibletoplayer( self ); - } - if ( flag( "moving_chest_now" ) ) - { - m_bear setinvisibletoall(); - while ( flag( "moving_chest_now" ) ) - { - wait 0.1; - } - m_bear pers_magic_box_set_teddy_location( level.chest_index ); - wait 0.1; - m_bear setvisibletoplayer( self ); - } - if ( is_true( level.sloth_moving_box ) ) - { - m_bear setinvisibletoall(); - while ( is_true( level.sloth_moving_box ) ) - { - wait 0.1; - } - m_bear pers_magic_box_set_teddy_location( level.chest_index ); - wait 0.1; - m_bear setvisibletoplayer( self ); - } - if ( is_true( box._box_open ) ) - { - m_bear setinvisibletoall(); - while ( 1 ) - { - if ( !is_true( box._box_open ) ) - { - break; - } - wait 0.01; - } - m_bear setvisibletoplayer( self ); - } - wait 0.01; - } - m_bear delete(); -} - -pers_magic_box_set_teddy_location( box_index ) //checked changed to match cerberus output -{ - box = level.chests[ box_index ]; - if ( isDefined( box.zbarrier ) ) - { - v_origin = box.zbarrier.origin; - v_angles = box.zbarrier.angles; - } - else - { - v_origin = box.origin; - v_angles = box.angles; - } - v_up = anglesToUp( v_angles ); - height_offset = 22; - self.origin = v_origin + ( v_up * height_offset ); - dp = vectordot( v_up, ( 0, 0, 1 ) ); - if ( dp > 0 ) - { - v_angles_offset = vectorScale( ( 0, 1, 0 ), 90 ); - } - else - { - v_angles_offset = ( 0, -90, -10 ); - } - self.angles = v_angles + v_angles_offset; -} - -pers_treasure_chest_choosespecialweapon( player ) //checked changed to match cerberus output -{ - rval = randomfloat( 1 ); - if ( !isDefined( player.pers_magic_box_weapon_count ) ) - { - player.pers_magic_box_weapon_count = 0; - } - if ( ( player.pers_magic_box_weapon_count == 0 || rval < 0.6 ) && player.pers_magic_box_weapon_count < 2 ) - { - player.pers_magic_box_weapon_count++; - if ( isDefined( level.pers_treasure_chest_get_weapons_array_func ) ) - { - [[ level.pers_treasure_chest_get_weapons_array_func ]](); - } - else - { - pers_treasure_chest_get_weapons_array(); - } - keys = array_randomize( level.pers_box_weapons ); - /* -/# - forced_weapon = getDvar( "scr_force_weapon" ); - if ( forced_weapon != "" && isDefined( level.zombie_weapons[ forced_weapon ] ) ) - { - arrayinsert( keys, forced_weapon, 0 ); -#/ - } - */ - pap_triggers = getentarray( "specialty_weapupgrade", "script_noteworthy" ); - for ( i = 0; i < keys.size; i++ ) - { - if ( maps/mp/zombies/_zm_magicbox::treasure_chest_canplayerreceiveweapon( player, keys[ i ], pap_triggers ) ) - { - return keys[ i ]; - } - } - return keys[ 0 ]; - } - else - { - player.pers_magic_box_weapon_count = 0; - weapon = maps/mp/zombies/_zm_magicbox::treasure_chest_chooseweightedrandomweapon( player ); - return weapon; - } -} - -pers_treasure_chest_get_weapons_array() //checked matches cerberus output -{ - if ( !isDefined( level.pers_box_weapons ) ) - { - level.pers_box_weapons = []; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "ray_gun_zm"; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "galil_zm"; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "knife_ballistic_zm"; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "srm1216_zm"; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "hamr_zm"; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "tar21_zm"; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "raygun_mark2_zm"; - } -} - -pers_magic_box_firesale() //checked partially changed to match cerberus output //for loop not changed because continues are broken in for loops while loops used instead -{ - self endon( "disconnect" ); - wait 1; - while ( 1 ) - { - while ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] == 1 ) - { - wait 5; - i = 0; - while ( i < level.chests.size ) - { - if ( i == level.chest_index ) - { - i++; - continue; - } - box = level.chests[ i ]; - self thread box_firesale_teddy_bear( box, i ); - i++; - } - while ( 1 ) - { - if ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] == 0 ) - { - break; - } - wait 0.01; - } - } - if ( level.round_number >= level.pers_box_weapon_lose_round ) - { - return; - } - wait 0.5; - } -} - -box_firesale_teddy_bear( box, box_index ) //checked changed to match cerberus output -{ - self endon( "disconnect" ); - m_bear = spawn( "script_model", self.origin ); - m_bear setmodel( level.chest_joker_model ); - m_bear pers_magic_box_set_teddy_location( box_index ); - m_bear setinvisibletoall(); - wait 0.1; - m_bear setvisibletoplayer( self ); - while ( 1 ) - { - if ( is_true( box._box_open ) ) - { - m_bear setinvisibletoall(); - while ( 1 ) - { - if ( !is_true( box._box_open ) ) - { - break; - } - wait 0.01; - } - m_bear setvisibletoplayer( self ); - } - if ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] == 0 ) - { - break; - } - wait 0.01; - } - m_bear delete(); -} - -pers_nube_unlock_watcher() //checked changed to match cerberus output -{ - self endon( "disconnect" ); - if ( !maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - return; - } - self.pers_num_nube_kills = 0; - if ( self.pers[ "pers_max_round_reached" ] >= level.pers_nube_lose_round ) - { - return; - } - num_melee_kills = self.pers[ "melee_kills" ]; - num_headshot_kills = self.pers[ "headshots" ]; - num_boards = self.pers[ "boards" ]; - while ( 1 ) - { - self waittill( "pers_player_zombie_kill" ); - if ( self.pers[ "pers_max_round_reached" ] >= level.pers_nube_lose_round ) - { - self.pers_num_nube_kills = 0; - return; - } - if ( num_melee_kills == self.pers[ "melee_kills" ] && num_headshot_kills == self.pers[ "headshots" ] && num_boards == self.pers[ "boards" ] ) - { - self.pers_num_nube_kills++; - } - else - { - self.pers_num_nube_kills = 0; - num_melee_kills = self.pers[ "melee_kills" ]; - num_headshot_kills = self.pers[ "headshots" ]; - num_boards = self.pers[ "boards" ]; - } - } -} - -pers_nube_player_ranked_as_nube( player ) //checked matches cerberus output -{ - if ( player.pers_num_nube_kills >= level.pers_numb_num_kills_unlock ) - { - return 1; - } - return 0; -} - -pers_nube_weapon_upgrade_check( player, str_weapon ) //checked matches cerberus output -{ - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( getsubstr( str_weapon, 0, 11 ) == "rottweil72_" ) - { - if ( !is_true( player.pers_upgrades_awarded[ "nube" ] ) ) - { - if ( pers_nube_player_ranked_as_nube( player ) ) - { - player maps/mp/zombies/_zm_stats::increment_client_stat( "pers_nube_counter", 0 ); - str_weapon = "ray_gun_zm"; - fx_org = player.origin; - v_dir = anglesToForward( player getplayerangles() ); - v_up = anglesToUp( player getplayerangles() ); - fx_org = ( fx_org + ( v_dir * 5 ) ) + v_up * 12; - player.upgrade_fx_origin = fx_org; - } - } - else - { - str_weapon = "ray_gun_zm"; - } - } - } - return str_weapon; -} - -pers_nube_weapon_ammo_check( player, str_weapon ) //checked matches cerberus output -{ - if ( maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - if ( getsubstr( str_weapon, 0, 11 ) == "rottweil72_" ) - { - if ( is_true( player.pers_upgrades_awarded[ "nube" ] ) ) - { - if ( player hasweapon( "ray_gun_zm" ) ) - { - str_weapon = "ray_gun_zm"; - } - if ( player hasweapon( "ray_gun_upgraded_zm" ) ) - { - str_weapon = "ray_gun_upgraded_zm"; - } - } - } - } - return str_weapon; -} - -pers_nube_should_we_give_raygun( player_has_weapon, player, weapon_buy ) //checked partially changed to match cerberus output //changed at own discretion -{ - if ( !maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - return player_has_weapon; - } - if ( player.pers[ "pers_max_round_reached" ] >= level.pers_nube_lose_round ) - { - return player_has_weapon; - } - if ( !pers_nube_player_ranked_as_nube( player ) ) - { - return player_has_weapon; - } - if ( isDefined( weapon_buy ) && getsubstr( weapon_buy, 0, 11 ) != "rottweil72_" ) - { - return player_has_weapon; - } - if ( player hasweapon( "rottweil72_zm" ) || player hasweapon( "rottweil72_upgraded_zm" ) ) - { - player_has_olympia = 1; - } - if ( player hasweapon( "ray_gun_zm" ) || player hasweapon( "ray_gun_upgraded_zm" ) ) - { - player_has_raygun = 1; - } - if ( player_has_olympia && player_has_raygun ) - { - player_has_weapon = 1; - } - else if ( pers_nube_player_ranked_as_nube( player ) && player_has_olympia && player_has_raygun == 0 ) - { - player_has_weapon = 0; - } - else if ( is_true( player.pers_upgrades_awarded[ "nube" ] ) && player_has_raygun ) - { - player_has_weapon = 1; - } - return player_has_weapon; -} - -pers_nube_ammo_hint_string( player, weapon ) //checked matches cerberus output -{ - ammo_cost = 0; - if ( !maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - return 0; - } - if ( getsubstr( weapon, 0, 11 ) == "rottweil72_" ) - { - ammo_cost = pers_nube_ammo_cost( player, ammo_cost ); - } - if ( !ammo_cost ) - { - return 0; - } - self.stub.hint_string = &"ZOMBIE_WEAPONAMMOONLY"; - self sethintstring( self.stub.hint_string, ammo_cost ); - return 1; -} - -pers_nube_ammo_cost( player, ammo_cost ) //checked matches cerberus output -{ - if ( player hasweapon( "ray_gun_zm" ) ) - { - ammo_cost = 250; - } - if ( player hasweapon( "ray_gun_upgraded_zm" ) ) - { - ammo_cost = 4500; - } - return ammo_cost; -} - -pers_nube_override_ammo_cost( player, weapon, ammo_cost ) //checked matches cerberus output -{ - if ( !maps/mp/zombies/_zm_pers_upgrades::is_pers_system_active() ) - { - return ammo_cost; - } - if ( getsubstr( weapon, 0, 11 ) == "rottweil72_" ) - { - ammo_cost = pers_nube_ammo_cost( player, ammo_cost ); - } - return ammo_cost; -} - - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_pers_upgrades_system.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_pers_upgrades_system.gsc deleted file mode 100644 index bcf91f5..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_pers_upgrades_system.gsc +++ /dev/null @@ -1,255 +0,0 @@ -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -pers_register_upgrade( name, upgrade_active_func, stat_name, stat_desired_value, game_end_reset_if_not_achieved ) //checked matches cerberus output -{ - if ( !isDefined( level.pers_upgrades ) ) - { - level.pers_upgrades = []; - level.pers_upgrades_keys = []; - } - if ( isDefined( level.pers_upgrades[ name ] ) ) - { - /* -/# - assert( 0, "A persistent upgrade is already registered for name: " + name ); -#/ - */ - } - level.pers_upgrades_keys[ level.pers_upgrades_keys.size ] = name; - level.pers_upgrades[ name ] = spawnstruct(); - level.pers_upgrades[ name ].stat_names = []; - level.pers_upgrades[ name ].stat_desired_values = []; - level.pers_upgrades[ name ].upgrade_active_func = upgrade_active_func; - level.pers_upgrades[ name ].game_end_reset_if_not_achieved = game_end_reset_if_not_achieved; - add_pers_upgrade_stat( name, stat_name, stat_desired_value ); - /* -/# - if ( isDefined( level.devgui_add_ability ) ) - { - [[ level.devgui_add_ability ]]( name, upgrade_active_func, stat_name, stat_desired_value, game_end_reset_if_not_achieved ); -#/ - } - */ -} - -add_pers_upgrade_stat( name, stat_name, stat_desired_value ) //checked matches cerberus output -{ - if ( !isDefined( level.pers_upgrades[ name ] ) ) - { - /* -/# - assert( 0, name + " - Persistent upgrade is not registered yet." ); -#/ - */ - } - stats_size = level.pers_upgrades[ name ].stat_names.size; - level.pers_upgrades[ name ].stat_names[ stats_size ] = stat_name; - level.pers_upgrades[ name ].stat_desired_values[ stats_size ] = stat_desired_value; -} - -pers_upgrades_monitor() //checked partially changed to match cerberus output //did not change while loops to for loops because continues are broken in for loops -{ - if ( !isDefined( level.pers_upgrades ) ) - { - return; - } - if ( !is_classic() ) - { - return; - } - level thread wait_for_game_end(); - while ( 1 ) - { - waittillframeend; - players = getplayers(); - player_index = 0; - while ( player_index < players.size ) - { - player = players[ player_index ]; - if ( is_player_valid( player ) && isDefined( player.stats_this_frame ) ) - { - if ( !player.stats_this_frame.size && !is_true( player.pers_upgrade_force_test ) ) - { - player_index++; - continue; - } - pers_upgrade_index = 0; - while ( pers_upgrade_index < level.pers_upgrades_keys.size ) - { - pers_upgrade = level.pers_upgrades[ level.pers_upgrades_keys[ pers_upgrade_index ] ]; - is_stat_updated = player is_any_pers_upgrade_stat_updated( pers_upgrade ); - if ( is_stat_updated ) - { - should_award = player check_pers_upgrade( pers_upgrade ); - if ( should_award ) - { - if ( is_true( player.pers_upgrades_awarded[ level.pers_upgrades_keys[ pers_upgrade_index ] ] ) ) - { - pers_upgrade_index++; - continue; - } - player.pers_upgrades_awarded[ level.pers_upgrades_keys[ pers_upgrade_index ] ] = 1; - if ( flag( "initial_blackscreen_passed" ) && !is_true( player.is_hotjoining ) ) - { - type = "upgrade"; - if ( isDefined( level.snd_pers_upgrade_force_type ) ) - { - type = level.snd_pers_upgrade_force_type; - } - player playsoundtoplayer( "evt_player_upgrade", player ); - if ( is_true( level.pers_upgrade_vo_spoken ) ) - { - player delay_thread( 1, maps/mp/zombies/_zm_audio::create_and_play_dialog, "general", type, undefined, level.snd_pers_upgrade_force_variant ); - } - else - { - player delay_thread( 1, ::play_vox_to_player, "general", type, level.snd_pers_upgrade_force_variant ); - } - if ( isDefined( player.upgrade_fx_origin ) ) - { - fx_org = player.upgrade_fx_origin; - player.upgrade_fx_origin = undefined; - } - else - { - fx_org = player.origin; - v_dir = anglesToForward( player getplayerangles() ); - v_up = anglesToUp( player getplayerangles() ); - fx_org = ( fx_org + ( v_dir * 30 ) ) + ( v_up * 12 ); - } - playfx( level._effect[ "upgrade_aquired" ], fx_org ); - level thread maps/mp/zombies/_zm::disable_end_game_intermission( 1.5 ); - } - /* -/# - player iprintlnbold( "Upgraded!" ); -#/ - */ - if ( isDefined( pers_upgrade.upgrade_active_func ) ) - { - player thread [[ pers_upgrade.upgrade_active_func ]](); - } - pers_upgrade_index++; - continue; - } - if ( is_true( player.pers_upgrades_awarded[ level.pers_upgrades_keys[ pers_upgrade_index ] ] ) ) - { - if ( flag( "initial_blackscreen_passed" ) && !is_true( player.is_hotjoining ) ) - { - player playsoundtoplayer( "evt_player_downgrade", player ); - } - /* -/# - player iprintlnbold( "Downgraded!" ); -#/ - */ - } - player.pers_upgrades_awarded[ level.pers_upgrades_keys[ pers_upgrade_index ] ] = 0; - } - pers_upgrade_index++; - } - player.pers_upgrade_force_test = 0; - player.stats_this_frame = []; - } - player_index++; - } - wait 0.05; - } -} - -wait_for_game_end() //checked changed to match cerberus output -{ - if ( !is_classic() ) - { - return; - } - level waittill( "end_game" ); - players = getplayers(); - for ( player_index = 0; player_index < players.size; player_index++ ) - { - player = players[ player_index ]; - for ( index = 0; index < level.pers_upgrades_keys.size; index++ ) - { - str_name = level.pers_upgrades_keys[ index ]; - game_end_reset_if_not_achieved = level.pers_upgrades[ str_name ].game_end_reset_if_not_achieved; - if ( isDefined( game_end_reset_if_not_achieved ) && game_end_reset_if_not_achieved == 1 ) - { - if ( !is_true( player.pers_upgrades_awarded[ str_name ] ) ) - { - for ( stat_index = 0; stat_index < level.pers_upgrades[ str_name ].stat_names.size; stat_index++ ) - { - player maps/mp/zombies/_zm_stats::zero_client_stat( level.pers_upgrades[ str_name ].stat_names[ stat_index ], 0 ); - } - } - } - } - } -} - -check_pers_upgrade( pers_upgrade ) //checked changed to match cerberus output -{ - should_award = 1; - for ( i = 0; i < pers_upgrade.stat_names.size; i++ ) - { - stat_name = pers_upgrade.stat_names[ i ]; - should_award = self check_pers_upgrade_stat( stat_name, pers_upgrade.stat_desired_values[ i ] ); - if ( !should_award ) - { - break; - } - } - return should_award; -} - -is_any_pers_upgrade_stat_updated( pers_upgrade ) //checked changed to match cerberus output -{ - if ( is_true( self.pers_upgrade_force_test ) ) - { - return 1; - } - result = 0; - for ( i = 0; i < pers_upgrade.stat_names.size; i++ ) - { - stat_name = pers_upgrade.stat_names[ i ]; - if ( isDefined( self.stats_this_frame[ stat_name ] ) ) - { - result = 1; - break; - } - } - return result; -} - -check_pers_upgrade_stat( stat_name, stat_desired_value ) //checked matches cerberus output -{ - should_award = 1; - current_stat_value = self maps/mp/zombies/_zm_stats::get_global_stat( stat_name ); - if ( current_stat_value < stat_desired_value ) - { - should_award = 0; - } - return should_award; -} - -round_end() //checked matches cerberus output -{ - if ( !is_classic() ) - { - return; - } - self notify( "pers_stats_end_of_round" ); - if ( isDefined( self.pers[ "pers_max_round_reached" ] ) ) - { - if ( level.round_number > self.pers[ "pers_max_round_reached" ] ) - { - self maps/mp/zombies/_zm_stats::set_client_stat( "pers_max_round_reached", level.round_number, 0 ); - } - } -} - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_playerhealth.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_playerhealth.gsc deleted file mode 100644 index 4a15427..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_playerhealth.gsc +++ /dev/null @@ -1,582 +0,0 @@ -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - if ( !isDefined( level.script ) ) - { - level.script = tolower( getDvar( "mapname" ) ); - } - precacheshader( "overlay_low_health" ); - level.global_damage_func_ads = ::empty_kill_func; - level.global_damage_func = ::empty_kill_func; - level.difficultytype[ 0 ] = "easy"; - level.difficultytype[ 1 ] = "normal"; - level.difficultytype[ 2 ] = "hardened"; - level.difficultytype[ 3 ] = "veteran"; - level.difficultystring[ "easy" ] = &"GAMESKILL_EASY"; - level.difficultystring[ "normal" ] = &"GAMESKILL_NORMAL"; - level.difficultystring[ "hardened" ] = &"GAMESKILL_HARDENED"; - level.difficultystring[ "veteran" ] = &"GAMESKILL_VETERAN"; - /* -/# - thread playerhealthdebug(); -#/ - */ - level.gameskill = 1; - switch( level.gameskill ) - { - case 0: - setdvar( "currentDifficulty", "easy" ); - break; - case 1: - setdvar( "currentDifficulty", "normal" ); - break; - case 2: - setdvar( "currentDifficulty", "hardened" ); - break; - case 3: - setdvar( "currentDifficulty", "veteran" ); - break; - } - logstring( "difficulty: " + level.gameskill ); - level.player_deathinvulnerabletime = 1700; - level.longregentime = 5000; - level.healthoverlaycutoff = 0.2; - level.invultime_preshield = 0.35; - level.invultime_onshield = 0.5; - level.invultime_postshield = 0.3; - level.playerhealth_regularregendelay = 2400; - level.worthydamageratio = 0.1; - setdvar( "player_meleeDamageMultiplier", 0.4 ); - onplayerconnect_callback( ::onplayerconnect ); -} - -onplayerconnect() //checked matches cerberus output -{ - self thread onplayerspawned(); -} - -onplayerspawned() //checked changed to match cerberus output -{ - for ( ;; ) - { - self waittill( "spawned_player" ); - self maps/mp/zombies/_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); - if ( level.createfx_enabled ) - { - continue; - } - self notify( "noHealthOverlay" ); - self thread playerhealthregen(); - } -} - -playerhurtcheck() //checked changed to match cerberus output -{ - self endon( "noHealthOverlay" ); - self.hurtagain = 0; - for ( ;; ) - { - self waittill( "damage", amount, attacker, dir, point, mod ); - if ( isDefined( attacker ) && isplayer( attacker ) && attacker.team == self.team ) - { - continue; - } - self.hurtagain = 1; - self.damagepoint = point; - self.damageattacker = attacker; - } -} - -playerhealthregen() //checked changed to match cerberus output -{ - self notify( "playerHealthRegen" ); - self endon( "playerHealthRegen" ); - self endon( "death" ); - self endon( "disconnect" ); - if ( !isDefined( self.flag ) ) - { - self.flag = []; - self.flags_lock = []; - } - if ( !isDefined( self.flag[ "player_has_red_flashing_overlay" ] ) ) - { - self player_flag_init( "player_has_red_flashing_overlay" ); - self player_flag_init( "player_is_invulnerable" ); - } - self player_flag_clear( "player_has_red_flashing_overlay" ); - self player_flag_clear( "player_is_invulnerable" ); - self thread healthoverlay(); - oldratio = 1; - health_add = 0; - regenrate = 0.1; - veryhurt = 0; - playerjustgotredflashing = 0; - invultime = 0; - hurttime = 0; - newhealth = 0; - lastinvulratio = 1; - self thread playerhurtcheck(); - if ( !isDefined( self.veryhurt ) ) - { - self.veryhurt = 0; - } - self.bolthit = 0; - if ( getDvar( "scr_playerInvulTimeScale" ) == "" ) - { - setdvar( "scr_playerInvulTimeScale", 1 ); - } - playerinvultimescale = getDvarFloat( "scr_playerInvulTimeScale" ); - for ( ;; ) - { - wait 0.05; - waittillframeend; - if ( self.health == self.maxhealth ) - { - if ( self player_flag( "player_has_red_flashing_overlay" ) ) - { - player_flag_clear( "player_has_red_flashing_overlay" ); - } - lastinvulratio = 1; - playerjustgotredflashing = 0; - veryhurt = 0; - continue; - } - if ( self.health <= 0 ) - { - /* -/# - showhitlog(); -#/ - */ - return; - } - wasveryhurt = veryhurt; - health_ratio = self.health / self.maxhealth; - if ( health_ratio <= level.healthoverlaycutoff ) - { - veryhurt = 1; - if ( !wasveryhurt ) - { - hurttime = getTime(); - self startfadingblur( 3.6, 2 ); - self player_flag_set( "player_has_red_flashing_overlay" ); - playerjustgotredflashing = 1; - } - } - if ( self.hurtagain ) - { - hurttime = getTime(); - self.hurtagain = 0; - } - if ( health_ratio >= oldratio ) - { - if ( getTime() - hurttime < level.playerhealth_regularregendelay ) - { - continue; - } - if ( veryhurt ) - { - self.veryhurt = 1; - newhealth = health_ratio; - if ( getTime() > ( hurttime + level.longregentime ) ) - { - newhealth += regenrate; - } - } - else - { - newhealth = 1; - self.veryhurt = 0; - } - if ( newhealth > 1 ) - { - newhealth = 1; - } - if ( newhealth <= 0 ) - { - return; - } - /* -/# - if ( newhealth > health_ratio ) - { - logregen( newhealth ); -#/ - } - */ - self setnormalhealth( newhealth ); - oldratio = self.health / self.maxhealth; - continue; - } - invulworthyhealthdrop = lastinvulratio - health_ratio > level.worthydamageratio; - if ( self.health <= 1 ) - { - self setnormalhealth( 2 / self.maxhealth ); - invulworthyhealthdrop = 1; - /* -/# - if ( !isDefined( level.player_deathinvulnerabletimeout ) ) - { - level.player_deathinvulnerabletimeout = 0; - } - if ( level.player_deathinvulnerabletimeout < getTime() ) - { - level.player_deathinvulnerabletimeout = getTime() + getDvarInt( "player_deathInvulnerableTime" ); -#/ - } - */ - } - oldratio = self.health / self.maxhealth; - level notify( "hit_again" ); - health_add = 0; - hurttime = getTime(); - self startfadingblur( 3, 0.8 ); - if ( !invulworthyhealthdrop || playerinvultimescale <= 0 ) - { - /* -/# - loghit( self.health, 0 ); -#/ - */ - continue; - } - if ( self player_flag( "player_is_invulnerable" ) ) - { - continue; - } - self player_flag_set( "player_is_invulnerable" ); - level notify( "player_becoming_invulnerable" ); - if ( playerjustgotredflashing ) - { - invultime = level.invultime_onshield; - playerjustgotredflashing = 0; - } - else if ( veryhurt ) - { - invultime = level.invultime_postshield; - } - else - { - invultime = level.invultime_preshield; - } - invultime *= playerinvultimescale; - /* -/# - loghit( self.health, invultime ); -#/ - */ - lastinvulratio = self.health / self.maxhealth; - self thread playerinvul( invultime ); - } -} - -playerinvul( timer ) //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( timer > 0 ) - { - /* -/# - level.playerinvultimeend = getTime() + ( timer * 1000 ); -#/ - */ - wait timer; - } - self player_flag_clear( "player_is_invulnerable" ); -} - -healthoverlay() //checked changed to match cerberus output -{ - self endon( "disconnect" ); - self endon( "noHealthOverlay" ); - if ( !isDefined( self._health_overlay ) ) - { - self._health_overlay = newclienthudelem( self ); - self._health_overlay.x = 0; - self._health_overlay.y = 0; - self._health_overlay setshader( "overlay_low_health", 640, 480 ); - self._health_overlay.alignx = "left"; - self._health_overlay.aligny = "top"; - self._health_overlay.horzalign = "fullscreen"; - self._health_overlay.vertalign = "fullscreen"; - self._health_overlay.alpha = 0; - } - overlay = self._health_overlay; - self thread healthoverlay_remove( overlay ); - self thread watchhideredflashingoverlay( overlay ); - pulsetime = 0.8; - while ( overlay.alpha > 0 ) - { - overlay fadeovertime( 0.5 ); - overlay.alpha = 0; - self player_flag_wait( "player_has_red_flashing_overlay" ); - self redflashingoverlay( overlay ); - } -} - -fadefunc( overlay, severity, mult, hud_scaleonly ) //checkec matches cerberus output -{ - pulsetime = 0.8; - scalemin = 0.5; - fadeintime = pulsetime * 0.1; - stayfulltime = pulsetime * ( 0.1 + severity * 0.2 ); - fadeouthalftime = pulsetime * ( 0.1 + severity * 0.1 ); - fadeoutfulltime = pulsetime * 0.3; - remainingtime = pulsetime - fadeintime - stayfulltime - fadeouthalftime - fadeoutfulltime; - /* -/# - assert( remainingtime >= -0.001 ); -#/ - */ - if ( remainingtime < 0 ) - { - remainingtime = 0; - } - halfalpha = 0.8 + severity * 0.1; - leastalpha = 0.5 + severity * 0.3; - overlay fadeovertime( fadeintime ); - overlay.alpha = mult * 1; - wait ( fadeintime + stayfulltime ); - overlay fadeovertime( fadeouthalftime ); - overlay.alpha = mult * halfalpha; - wait fadeouthalftime; - overlay fadeovertime( fadeoutfulltime ); - overlay.alpha = mult * leastalpha; - wait fadeoutfulltime; - wait remainingtime; -} - -watchhideredflashingoverlay( overlay ) //checked matches cerberus output -{ - self endon( "death_or_disconnect" ); - while ( isDefined( overlay ) ) - { - self waittill( "clear_red_flashing_overlay" ); - self player_flag_clear( "player_has_red_flashing_overlay" ); - overlay fadeovertime( 0.05 ); - overlay.alpha = 0; - setclientsysstate( "levelNotify", "rfo3", self ); - self notify( "hit_again" ); - } -} - -redflashingoverlay( overlay ) //checked matches cerberus output -{ - self endon( "hit_again" ); - self endon( "damage" ); - self endon( "death" ); - self endon( "disconnect" ); - self endon( "clear_red_flashing_overlay" ); - self.stopflashingbadlytime = getTime() + level.longregentime; - if ( !is_true( self.is_in_process_of_zombify ) && !is_true( self.is_zombie ) ) - { - fadefunc( overlay, 1, 1, 0 ); - while ( getTime() < self.stopflashingbadlytime && isalive( self ) && !is_true( self.is_in_process_of_zombify ) && !is_true( self.is_zombie ) ) - { - fadefunc( overlay, 0.9, 1, 0 ); - } - if ( !is_true( self.is_in_process_of_zombify ) && !is_true( self.is_zombie ) ) - { - if ( isalive( self ) ) - { - fadefunc( overlay, 0.65, 0.8, 0 ); - } - fadefunc( overlay, 0, 0.6, 1 ); - } - } - overlay fadeovertime( 0.5 ); - overlay.alpha = 0; - self player_flag_clear( "player_has_red_flashing_overlay" ); - setclientsysstate( "levelNotify", "rfo3", self ); - wait 0.5; - self notify( "hit_again" ); -} - -healthoverlay_remove( overlay ) //checked matches cerberus output -{ - self endon( "disconnect" ); - self waittill_any( "noHealthOverlay", "death" ); - overlay fadeovertime( 3.5 ); - overlay.alpha = 0; -} - -empty_kill_func( type, loc, point, attacker, amount ) //checked matches cerberus output -{ -} - -loghit( newhealth, invultime ) //checked matches cerberus output -{ - /* -/# -#/ - */ -} - -logregen( newhealth ) //checked matches cerberus output -{ - /* -/# -#/ - */ -} - -showhitlog() //checked matches cerberus output -{ - /* -/# -#/ - */ -} - -playerhealthdebug() //checked changed to match cerberus output -{ - /* -/# - if ( getDvar( "scr_health_debug" ) == "" ) - { - setdvar( "scr_health_debug", "0" ); - } - waittillframeend; - while ( 1 ) - { - while ( 1 ) - { - if ( getDvar( "scr_health_debug" ) != "0" ) - { - break; - } - wait 0.5; - } - thread printhealthdebug(); - while ( 1 ) - { - if ( getDvar( "scr_health_debug" ) == "0" ) - { - break; - } - wait 0.5; - } - level notify( "stop_printing_grenade_timers" ); - destroyhealthdebug(); -#/ - } - */ -} - -printhealthdebug() //checked changed to match cerberus output -{ - /* -/# - level notify( "stop_printing_health_bars" ); - level endon( "stop_printing_health_bars" ); - x = 40; - y = 40; - level.healthbarhudelems = []; - level.healthbarkeys[ 0 ] = "Health"; - level.healthbarkeys[ 1 ] = "No Hit Time"; - level.healthbarkeys[ 2 ] = "No Die Time"; - if ( !isDefined( level.playerinvultimeend ) ) - { - level.playerinvultimeend = 0; - } - if ( !isDefined( level.player_deathinvulnerabletimeout ) ) - { - level.player_deathinvulnerabletimeout = 0; - } - for ( i = 0; i < level.healthbarkeys.size; i++ ) - { - key = level.healthbarkeys[ i ]; - textelem = newhudelem(); - textelem.x = x; - textelem.y = y; - textelem.alignx = "left"; - textelem.aligny = "top"; - textelem.horzalign = "fullscreen"; - textelem.vertalign = "fullscreen"; - textelem settext( key ); - bgbar = newhudelem(); - bgbar.x = x + 79; - bgbar.y = y + 1; - bgbar.alignx = "left"; - bgbar.aligny = "top"; - bgbar.horzalign = "fullscreen"; - bgbar.vertalign = "fullscreen"; - bgbar.maxwidth = 3; - bgbar setshader( "white", bgbar.maxwidth, 10 ); - bgbar.color = vectorScale( ( 1, 1, 1 ), 0.5 ); - bar = newhudelem(); - bar.x = x + 80; - bar.y = y + 2; - bar.alignx = "left"; - bar.aligny = "top"; - bar.horzalign = "fullscreen"; - bar.vertalign = "fullscreen"; - bar setshader( "black", 1, 8 ); - textelem.bar = bar; - textelem.bgbar = bgbar; - textelem.key = key; - y += 10; - level.healthbarhudelems[ key ] = textelem; - } - flag_wait( "start_zombie_round_logic" ); - while ( 1 ) - { - wait 0.05; - players = get_players(); - for ( i = 0; i < level.healthbarkeys.size && players.size > 0; i++ ) - { - key = level.healthbarkeys[ i ]; - player = players[ 0 ]; - width = 0; - if ( i == 0 ) - { - width = ( player.health / player.maxhealth ) * 300; - } - else if ( i == 1 ) - { - width = ( ( level.playerinvultimeend - getTime() ) / 1000 ) * 40; - } - else if ( i == 2 ) - { - width = ( ( level.player_deathinvulnerabletimeout - getTime() ) / 1000 ) * 40; - } - width = int( max( width, 1 ) ); - width = int( min( width, 300 ) ); - bar = level.healthbarhudelems[ key ].bar; - bar setshader( "black", width, 8 ); - bgbar = level.healthbarhudelems[ key ].bgbar; - if ( ( width + 2 ) > bgbar.maxwidth ) - { - bgbar.maxwidth = width + 2; - bgbar setshader( "white", bgbar.maxwidth, 10 ); - bgbar.color = vectorScale( ( 1, 1, 1 ), 0.5 ); - } - } -#/ - } - */ -} - -destroyhealthdebug() //checked changed to match cerberus output -{ - /* -/# - if ( !isDefined( level.healthbarhudelems ) ) - { - return; - } - while ( i = 0; i < level.healthbarkeys.size; i++ ) - { - level.healthbarhudelems[ level.healthbarkeys[ i ] ].bgbar destroy(); - level.healthbarhudelems[ level.healthbarkeys[ i ] ].bar destroy(); - level.healthbarhudelems[ level.healthbarkeys[ i ] ] destroy(); -#/ - } - */ -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_power.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_power.gsc deleted file mode 100644 index b40f5f2..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_power.gsc +++ /dev/null @@ -1,716 +0,0 @@ -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/_demo; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - if ( !isDefined( level.powered_items ) ) - { - level.powered_items = []; - } - if ( !isDefined( level.local_power ) ) - { - level.local_power = []; - } - thread standard_powered_items(); - /* -/# - thread debug_powered_items(); -#/ - */ -} - -debug_powered_items() //checked changed to match cerberus output -{ -/* -/# - while ( 1 ) - { - if ( getDvarInt( #"EB512CB7" ) ) - { - if ( isDefined( level.local_power ) ) - { - foreach(localpower in level.local_power) - { - circle( localpower.origin, localpower.radius, ( 1, 0, 0 ), 0, 1, 1 ); - } - } - } - wait 0.05; -#/ - } - */ -} - -watch_global_power() //checked matches cerberus output -{ - while ( 1 ) - { - flag_wait( "power_on" ); - level thread set_global_power( 1 ); - flag_waitopen( "power_on" ); - level thread set_global_power( 0 ); - } -} - -standard_powered_items() //checked partially changed to match cerberus output //did not use foreach with continue to prevent infinite loop bug -{ - flag_wait( "start_zombie_round_logic" ); - vending_triggers = getentarray( "zombie_vending", "targetname" ); - i = 0; - while ( i < vending_triggers.size) - { - if ( vending_triggers[ i ].script_noteworthy == "specialty_weapupgrade" ) - { - i++; - continue; - } - powered_on = maps/mp/zombies/_zm_perks::get_perk_machine_start_state( vending_triggers[ i ].script_noteworthy ); - add_powered_item( ::perk_power_on, ::perk_power_off, ::perk_range, ::cost_low_if_local, 0, powered_on, vending_triggers[ i ] ); - i++; - } - pack_a_punch = getentarray( "specialty_weapupgrade", "script_noteworthy" ); - foreach ( trigger in pack_a_punch ) - { - powered_on = maps/mp/zombies/_zm_perks::get_perk_machine_start_state( trigger.script_noteworthy ); - trigger.powered = add_powered_item( ::pap_power_on, ::pap_power_off, ::pap_range, ::cost_low_if_local, 0, powered_on, trigger ); - } - zombie_doors = getentarray( "zombie_door", "targetname" ); - foreach ( door in zombie_doors ) - { - if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "electric_door" ) - { - add_powered_item( ::door_power_on, ::door_power_off, ::door_range, ::cost_door, 0, 0, door ); - } - if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "local_electric_door" ) - { - power_sources = 0; - if ( !is_true( level.power_local_doors_globally ) ) - { - power_sources = 1; - } - add_powered_item( ::door_local_power_on, ::door_local_power_off, ::door_range, ::cost_door, power_sources, 0, door ); - } - } - thread watch_global_power(); -} - -add_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target ) //checked matches cerberus output -{ - powered = spawnstruct(); - powered.power_on_func = power_on_func; - powered.power_off_func = power_off_func; - powered.range_func = range_func; - powered.power_sources = power_sources; - powered.self_powered = self_powered; - powered.target = target; - powered.cost_func = cost_func; - powered.power = self_powered; - powered.powered_count = self_powered; - powered.depowered_count = 0; - if ( !isDefined( level.powered_items ) ) - { - level.powered_items = []; - } - level.powered_items[ level.powered_items.size ] = powered; - return powered; -} - -remove_powered_item( powered ) //checked matches cerberus output -{ - arrayremovevalue( level.powered_items, powered, 0 ); -} - -add_temp_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target ) //checked changed to match cerberus output -{ - powered = add_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target ); - if ( isDefined( level.local_power ) ) - { - foreach ( localpower in level.local_power ) - { - if ( powered [[ powered.range_func ]]( 1, localpower.origin, localpower.radius ) ) - { - powered change_power( 1, localpower.origin, localpower.radius ); - if ( !isDefined( localpower.added_list ) ) - { - localpower.added_list = []; - } - localpower.added_list[ localpower.added_list.size ] = powered; - } - } - } - thread watch_temp_powered_item( powered ); - return powered; -} - -watch_temp_powered_item( powered ) //checked changed to match cerberus output -{ - powered.target waittill( "death" ); - remove_powered_item( powered ); - if ( isDefined( level.local_power ) ) - { - foreach ( localpower in level.local_power ) - { - if ( isDefined( localpower.added_list ) ) - { - arrayremovevalue( localpower.added_list, powered, 0 ); - } - if ( isDefined( localpower.enabled_list ) ) - { - arrayremovevalue( localpower.enabled_list, powered, 0 ); - } - } - } -} - -change_power_in_radius( delta, origin, radius ) //checked changed to match cerberus output -{ - changed_list = []; - for ( i = 0; i < level.powered_items.size; i++ ) - { - powered = level.powered_items[ i ]; - if ( powered.power_sources != 2 ) - { - if ( powered [[ powered.range_func ]]( delta, origin, radius ) ) - { - powered change_power( delta, origin, radius ); - changed_list[ changed_list.size ] = powered; - } - } - } - return changed_list; -} - -change_power( delta, origin, radius ) //checked changed to match cerberus output -{ - if ( delta > 0 ) - { - if ( !self.power ) - { - self.power = 1; - self [[ self.power_on_func ]]( origin, radius ); - } - self.powered_count++; - } - else if ( delta < 0 ) - { - if ( self.power ) - { - self.power = 0; - self [[ self.power_off_func ]]( origin, radius ); - } - self.depowered_count++; - } -} - -revert_power_to_list( delta, origin, radius, powered_list ) //checked changed to match cerberus output -{ - for ( i = 0; i < powered_list.size; i++ ) - { - powered = powered_list[ i ]; - powered revert_power( delta, origin, radius ); - } -} - -revert_power( delta, origin, radius, powered_list ) //checked changed to match cerberus output -{ - if ( delta > 0 ) - { - self.depowered_count--; - /* -/# - assert( self.depowered_count >= 0, "Depower underflow in power system" ); -#/ - */ - if ( self.depowered_count == 0 && self.powered_count > 0 && !self.power ) - { - self.power = 1; - self [[ self.power_on_func ]]( origin, radius ); - } - } - if ( delta < 0 ) - { - self.powered_count--; - /* -/# - assert( self.powered_count >= 0, "Repower underflow in power system" ); -#/ - */ - if ( self.powered_count == 0 && self.power ) - { - self.power = 0; - self [[ self.power_off_func ]]( origin, radius ); - } - } -} - -add_local_power( origin, radius ) //checked matches cerberus output -{ - localpower = spawnstruct(); - /* -/# - println( "ZM POWER: local power on at " + origin + " radius " + radius + "\n" ); -#/ - */ - localpower.origin = origin; - localpower.radius = radius; - localpower.enabled_list = change_power_in_radius( 1, origin, radius ); - if ( !isDefined( level.local_power ) ) - { - level.local_power = []; - } - level.local_power[ level.local_power.size ] = localpower; - return localpower; -} - -move_local_power( localpower, origin ) //checked partially changed to match cerberus output //did not change while loop to for loop to prevent infinite continue loop bug -{ - changed_list = []; - i = 0; - while ( i < level.powered_items.size ) - { - powered = level.powered_items[ i ]; - if ( powered.power_sources == 2 ) - { - i++; - continue; - } - waspowered = isinarray( localpower.enabled_list, powered ); - ispowered = powered [[ powered.range_func ]]( 1, origin, localpower.radius ); - if ( ispowered && !waspowered ) - { - powered change_power( 1, origin, localpower.radius ); - localpower.enabled_list[ localpower.enabled_list.size ] = powered; - i++; - continue; - } - if ( !ispowered && waspowered ) - { - powered revert_power( -1, localpower.origin, localpower.radius, localpower.enabled_list ); - arrayremovevalue( localpower.enabled_list, powered, 0 ); - } - i++; - } - localpower.origin = origin; - return localpower; -} - -end_local_power( localpower ) //checked matches cerberus output -{ - /* -/# - println( "ZM POWER: local power off at " + localpower.origin + " radius " + localpower.radius + "\n" ); -#/ - */ - if ( isDefined( localpower.enabled_list ) ) - { - revert_power_to_list( -1, localpower.origin, localpower.radius, localpower.enabled_list ); - } - localpower.enabled_list = undefined; - if ( isDefined( localpower.added_list ) ) - { - revert_power_to_list( -1, localpower.origin, localpower.radius, localpower.added_list ); - } - localpower.added_list = undefined; - arrayremovevalue( level.local_power, localpower, 0 ); -} - -has_local_power( origin ) //checked changed to match cerberus output -{ - if ( isDefined( level.local_power ) ) - { - foreach ( localpower in level.local_power ) - { - if ( distancesquared( localpower.origin, origin ) < ( localpower.radius * localpower.radius ) ) - { - return 1; - } - } - } - return 0; -} - -get_powered_item_cost() //checked matches cerberus output -{ - if ( !is_true( self.power ) ) - { - return 0; - } - if ( is_true( level._power_global ) && self.power_sources != 1 ) - { - return 0; - } - cost = [[ self.cost_func ]](); - power_sources = self.powered_count; - if ( power_sources < 1 ) - { - power_sources = 1; - } - return cost / power_sources; -} - -get_local_power_cost( localpower ) //checked changed to match cerberus output -{ - cost = 0; - if ( isDefined( localpower ) && isDefined( localpower.enabled_list ) ) - { - foreach ( powered in localpower.enabled_list ) - { - cost += powered get_powered_item_cost(); - } - } - else if ( isDefined( localpower ) && isDefined( localpower.added_list ) ) - { - foreach ( powered in localpower.added_list ) - { - cost += powered get_powered_item_cost(); - } - } - return cost; -} - -set_global_power( on_off ) //checked changed to match cerberus output -{ - maps/mp/_demo::bookmark( "zm_power", getTime(), undefined, undefined, 1 ); - level._power_global = on_off; - for ( i = 0; i < level.powered_items.size; i++ ) - { - powered = level.powered_items[ i ]; - if ( isDefined( powered.target ) && powered.power_sources != 1 ) - { - powered global_power( on_off ); - wait_network_frame(); - } - } -} - -global_power( on_off ) //checked matches cerberus output -{ - if ( on_off ) - { - /* -/# - println( "ZM POWER: global power on\n" ); -#/ - */ - if ( !self.power ) - { - self.power = 1; - self [[ self.power_on_func ]](); - } - self.powered_count++; - } - else - { - /* -/# - println( "ZM POWER: global power off\n" ); -#/ - */ - self.powered_count--; - /* -/# - assert( self.powered_count >= 0, "Repower underflow in power system" ); -#/ - */ - if ( self.powered_count == 0 && self.power ) - { - self.power = 0; - self [[ self.power_off_func ]](); - } - } -} - -never_power_on( origin, radius ) //checked matches cerberus output -{ -} - -never_power_off( origin, radius ) //checked matches cerberus output -{ -} - -cost_negligible() //checked matches cerberus output -{ - if ( isDefined( self.one_time_cost ) ) - { - cost = self.one_time_cost; - self.one_time_cost = undefined; - return cost; - } - return 0; -} - -cost_low_if_local() //checked matches cerberus output -{ - if ( isDefined( self.one_time_cost ) ) - { - cost = self.one_time_cost; - self.one_time_cost = undefined; - return cost; - } - if ( is_true( level._power_global ) ) - { - return 0; - } - if ( is_true( self.self_powered ) ) - { - return 0; - } - return 1; -} - -cost_high() //checked matches cerberus output -{ - if ( isDefined( self.one_time_cost ) ) - { - cost = self.one_time_cost; - self.one_time_cost = undefined; - return cost; - } - return 10; -} - -door_range( delta, origin, radius ) //checked matches cerberus output -{ - if ( delta < 0 ) - { - return 0; - } - if ( distancesquared( self.target.origin, origin ) < radius * radius ) - { - return 1; - } - return 0; -} - -door_power_on( origin, radius ) //checked matches cerberus output -{ - /* -/# - println( "^1ZM POWER: door on\n" ); -#/ - */ - self.target.power_on = 1; - self.target notify( "power_on" ); -} - -door_power_off( origin, radius ) //checked matches cerberus output -{ - /* -/# - println( "^1ZM POWER: door off\n" ); -#/ - */ - self.target notify( "power_off" ); - self.target.power_on = 0; -} - -door_local_power_on( origin, radius ) //checked matches cerberus output -{ - /* -/# - println( "^1ZM POWER: door on (local)\n" ); -#/ - */ - self.target.local_power_on = 1; - self.target notify( "local_power_on" ); -} - -door_local_power_off( origin, radius ) //checked matches cerberus output -{ - /* -/# - println( "^1ZM POWER: door off (local)\n" ); -#/ - */ - self.target notify( "local_power_off" ); - self.target.local_power_on = 0; -} - -cost_door() //checked matches cerberus output -{ - if ( isDefined( self.target.power_cost ) ) - { - if ( !isDefined( self.one_time_cost ) ) - { - self.one_time_cost = 0; - } - self.one_time_cost += self.target.power_cost; - self.target.power_cost = 0; - } - if ( isDefined( self.one_time_cost ) ) - { - cost = self.one_time_cost; - self.one_time_cost = undefined; - return cost; - } - return 0; -} - -zombie_range( delta, origin, radius ) //checked matches cerberus output -{ - if ( delta > 0 ) - { - return 0; - } - self.zombies = get_array_of_closest( origin, get_round_enemy_array(), undefined, undefined, radius ); - if ( !isDefined( self.zombies ) ) - { - return 0; - } - self.power = 1; - return 1; -} - -zombie_power_off( origin, radius ) //checked changed to match cerberus output -{ - /* -/# - println( "^1ZM POWER: zombies off\n" ); -#/ - */ - for ( i = 0; i < self.zombies.size; i++ ) - { - self.zombies[ i ] thread stun_zombie(); - wait 0.05; - } -} - -stun_zombie() //checked matches cerberus output -{ - self endon( "death" ); - self notify( "stun_zombie" ); - self endon( "stun_zombie" ); - if ( self.health <= 0 ) - { - /* -/# - iprintln( "trying to stun a dead zombie" ); -#/ - */ - return; - } - if ( is_true( self.ignore_inert ) ) - { - return; - } - if ( isDefined( self.stun_zombie ) ) - { - self thread [[ self.stun_zombie ]](); - return; - } - self thread maps/mp/zombies/_zm_ai_basic::start_inert(); -} - -perk_range( delta, origin, radius ) //checked changed to match cerberus output -{ - if ( isDefined( self.target ) ) - { - perkorigin = self.target.origin; - if ( is_true( self.target.trigger_off ) ) - { - perkorigin = self.target.realorigin; - } - else if ( is_true( self.target.disabled ) ) - { - perkorigin += vectorScale( ( 0, 0, 1 ), 10000 ); - } - if ( distancesquared( perkorigin, origin ) < radius * radius ) - { - return 1; - } - } - return 0; -} - -perk_power_on( origin, radius ) //checked matches cerberus output -{ - /* -/# - println( "^1ZM POWER: perk " + self.target maps/mp/zombies/_zm_perks::getvendingmachinenotify() + " on\n" ); -#/ - */ - level notify( self.target maps/mp/zombies/_zm_perks::getvendingmachinenotify() + "_on" ); - maps/mp/zombies/_zm_perks::perk_unpause( self.target.script_noteworthy ); -} - -perk_power_off( origin, radius ) //checked matches cerberus output -{ - notify_name = self.target maps/mp/zombies/_zm_perks::getvendingmachinenotify(); - if ( isDefined( notify_name ) && notify_name == "revive" ) - { - if ( level flag_exists( "solo_game" ) && flag( "solo_game" ) ) - { - return; - } - } - /* -/# - println( "^1ZM POWER: perk " + self.target.script_noteworthy + " off\n" ); -#/ - */ - self.target notify( "death" ); - self.target thread maps/mp/zombies/_zm_perks::vending_trigger_think(); - if ( isDefined( self.target.perk_hum ) ) - { - self.target.perk_hum delete(); - } - maps/mp/zombies/_zm_perks::perk_pause( self.target.script_noteworthy ); - level notify( self.target maps/mp/zombies/_zm_perks::getvendingmachinenotify() + "_off" ); -} - -pap_range( delta, origin, radius ) //checked changed to match cerberus output -{ - if ( isDefined( self.target ) ) - { - paporigin = self.target.origin; - if ( is_true( self.target.trigger_off ) ) - { - paporigin = self.target.realorigin; - } - else if ( is_true( self.target.disabled ) ) - { - paporigin += vectorScale( ( 0, 0, 1 ), 10000 ); - } - if ( distancesquared( paporigin, origin ) < ( radius * radius ) ) - { - return 1; - } - } - return 0; -} - -pap_power_on( origin, radius ) //checked matches cerberus output -{ - /* -/# - println( "^1ZM POWER: PaP on\n" ); -#/ - */ - level notify( "Pack_A_Punch_on" ); -} - -pap_power_off( origin, radius ) //checked matches cerberus output -{ - /* -/# - println( "^1ZM POWER: PaP off\n" ); -#/ - */ - level notify( "Pack_A_Punch_off" ); - self.target notify( "death" ); - self.target thread maps/mp/zombies/_zm_perks::vending_weapon_upgrade(); -} - -pap_is_on() //checked matches cerberus output -{ - if ( isDefined( self.powered ) ) - { - return self.powered.power; - } - return 0; -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_powerups.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_powerups.gsc deleted file mode 100644 index ba88958..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_powerups.gsc +++ /dev/null @@ -1,2862 +0,0 @@ -#include maps/mp/zombies/_zm_melee_weapon; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zombies/_zm_pers_upgrades_functions; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_blockers; -#include maps/mp/zombies/_zm_audio_announcer; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_pers_upgrades; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/_demo; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - precacheshader( "specialty_doublepoints_zombies" ); - precacheshader( "specialty_instakill_zombies" ); - precacheshader( "specialty_firesale_zombies" ); - precacheshader( "zom_icon_bonfire" ); - precacheshader( "zom_icon_minigun" ); - precacheshader( "black" ); - set_zombie_var( "zombie_insta_kill", 0, undefined, undefined, 1 ); - set_zombie_var( "zombie_point_scalar", 1, undefined, undefined, 1 ); - set_zombie_var( "zombie_drop_item", 0 ); - set_zombie_var( "zombie_timer_offset", 350 ); - set_zombie_var( "zombie_timer_offset_interval", 30 ); - set_zombie_var( "zombie_powerup_fire_sale_on", 0 ); - set_zombie_var( "zombie_powerup_fire_sale_time", 30 ); - set_zombie_var( "zombie_powerup_bonfire_sale_on", 0 ); - set_zombie_var( "zombie_powerup_bonfire_sale_time", 30 ); - set_zombie_var( "zombie_powerup_insta_kill_on", 0, undefined, undefined, 1 ); - set_zombie_var( "zombie_powerup_insta_kill_time", 30, undefined, undefined, 1 ); - set_zombie_var( "zombie_powerup_point_doubler_on", 0, undefined, undefined, 1 ); - set_zombie_var( "zombie_powerup_point_doubler_time", 30, undefined, undefined, 1 ); - set_zombie_var( "zombie_powerup_drop_increment", 2000 ); - set_zombie_var( "zombie_powerup_drop_max_per_round", 4 ); - onplayerconnect_callback( ::init_player_zombie_vars ); - level._effect[ "powerup_on" ] = loadfx( "misc/fx_zombie_powerup_on" ); - level._effect[ "powerup_off" ] = loadfx( "misc/fx_zombie_powerup_off" ); - level._effect[ "powerup_grabbed" ] = loadfx( "misc/fx_zombie_powerup_grab" ); - level._effect[ "powerup_grabbed_wave" ] = loadfx( "misc/fx_zombie_powerup_wave" ); - if ( is_true( level.using_zombie_powerups ) ) - { - level._effect[ "powerup_on_red" ] = loadfx( "misc/fx_zombie_powerup_on_red" ); - level._effect[ "powerup_grabbed_red" ] = loadfx( "misc/fx_zombie_powerup_red_grab" ); - level._effect[ "powerup_grabbed_wave_red" ] = loadfx( "misc/fx_zombie_powerup_red_wave" ); - } - level._effect[ "powerup_on_solo" ] = loadfx( "misc/fx_zombie_powerup_solo_on" ); - level._effect[ "powerup_grabbed_solo" ] = loadfx( "misc/fx_zombie_powerup_solo_grab" ); - level._effect[ "powerup_grabbed_wave_solo" ] = loadfx( "misc/fx_zombie_powerup_solo_wave" ); - level._effect[ "powerup_on_caution" ] = loadfx( "misc/fx_zombie_powerup_caution_on" ); - level._effect[ "powerup_grabbed_caution" ] = loadfx( "misc/fx_zombie_powerup_caution_grab" ); - level._effect[ "powerup_grabbed_wave_caution" ] = loadfx( "misc/fx_zombie_powerup_caution_wave" ); - init_powerups(); - if ( !level.enable_magic ) - { - return; - } - thread watch_for_drop(); - thread setup_firesale_audio(); - thread setup_bonfiresale_audio(); - level.use_new_carpenter_func = ::start_carpenter_new; - level.board_repair_distance_squared = 562500; -} - -init_powerups() //checked matches cerberus output -{ - flag_init( "zombie_drop_powerups" ); - if ( is_true( level.enable_magic ) ) - { - flag_set( "zombie_drop_powerups" ); - } - if ( !isDefined( level.active_powerups ) ) - { - level.active_powerups = []; - } - if ( !isDefined( level.zombie_powerup_array ) ) - { - level.zombie_powerup_array = []; - } - if ( !isDefined( level.zombie_special_drop_array ) ) - { - level.zombie_special_drop_array = []; - } - add_zombie_powerup( "nuke", "zombie_bomb", &"ZOMBIE_POWERUP_NUKE", ::func_should_always_drop, 0, 0, 0, "misc/fx_zombie_mini_nuke_hotness" ); - add_zombie_powerup( "insta_kill", "zombie_skull", &"ZOMBIE_POWERUP_INSTA_KILL", ::func_should_always_drop, 0, 0, 0, undefined, "powerup_instant_kill", "zombie_powerup_insta_kill_time", "zombie_powerup_insta_kill_on" ); - add_zombie_powerup( "full_ammo", "zombie_ammocan", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_always_drop, 0, 0, 0 ); - add_zombie_powerup( "double_points", "zombie_x2_icon", &"ZOMBIE_POWERUP_DOUBLE_POINTS", ::func_should_always_drop, 0, 0, 0, undefined, "powerup_double_points", "zombie_powerup_point_doubler_time", "zombie_powerup_point_doubler_on" ); - add_zombie_powerup( "carpenter", "zombie_carpenter", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_drop_carpenter, 0, 0, 0 ); - add_zombie_powerup( "fire_sale", "zombie_firesale", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_drop_fire_sale, 0, 0, 0, undefined, "powerup_fire_sale", "zombie_powerup_fire_sale_time", "zombie_powerup_fire_sale_on" ); - add_zombie_powerup( "bonfire_sale", "zombie_pickup_bonfire", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_never_drop, 0, 0, 0, undefined, "powerup_bon_fire", "zombie_powerup_bonfire_sale_time", "zombie_powerup_bonfire_sale_on" ); - add_zombie_powerup( "minigun", "zombie_pickup_minigun", &"ZOMBIE_POWERUP_MINIGUN", ::func_should_drop_minigun, 1, 0, 0, undefined, "powerup_mini_gun", "zombie_powerup_minigun_time", "zombie_powerup_minigun_on" ); - add_zombie_powerup( "free_perk", "zombie_pickup_perk_bottle", &"ZOMBIE_POWERUP_FREE_PERK", ::func_should_never_drop, 0, 0, 0 ); - add_zombie_powerup( "tesla", "zombie_pickup_minigun", &"ZOMBIE_POWERUP_MINIGUN", ::func_should_never_drop, 1, 0, 0, undefined, "powerup_tesla", "zombie_powerup_tesla_time", "zombie_powerup_tesla_on" ); - add_zombie_powerup( "random_weapon", "zombie_pickup_minigun", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_never_drop, 1, 0, 0 ); - add_zombie_powerup( "bonus_points_player", "zombie_z_money_icon", &"ZOMBIE_POWERUP_BONUS_POINTS", ::func_should_never_drop, 1, 0, 0 ); - add_zombie_powerup( "bonus_points_team", "zombie_z_money_icon", &"ZOMBIE_POWERUP_BONUS_POINTS", ::func_should_never_drop, 0, 0, 0 ); - add_zombie_powerup( "lose_points_team", "zombie_z_money_icon", &"ZOMBIE_POWERUP_LOSE_POINTS", ::func_should_never_drop, 0, 0, 1 ); - add_zombie_powerup( "lose_perk", "zombie_pickup_perk_bottle", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_never_drop, 0, 0, 1 ); - add_zombie_powerup( "empty_clip", "zombie_ammocan", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_never_drop, 0, 0, 1 ); - add_zombie_powerup( "insta_kill_ug", "zombie_skull", &"ZOMBIE_POWERUP_INSTA_KILL", ::func_should_never_drop, 1, 0, 0, undefined, "powerup_instant_kill_ug", "zombie_powerup_insta_kill_ug_time", "zombie_powerup_insta_kill_ug_on", 5000 ); - if ( isDefined( level.level_specific_init_powerups ) ) - { - [[ level.level_specific_init_powerups ]](); - } - randomize_powerups(); - level.zombie_powerup_index = 0; - randomize_powerups(); - level.rare_powerups_active = 0; - level.firesale_vox_firstime = 0; - level thread powerup_hud_monitor(); - if ( isDefined( level.quantum_bomb_register_result_func ) ) - { - [[ level.quantum_bomb_register_result_func ]]( "random_powerup", ::quantum_bomb_random_powerup_result, 5, level.quantum_bomb_in_playable_area_validation_func ); - [[ level.quantum_bomb_register_result_func ]]( "random_zombie_grab_powerup", ::quantum_bomb_random_zombie_grab_powerup_result, 5, level.quantum_bomb_in_playable_area_validation_func ); - [[ level.quantum_bomb_register_result_func ]]( "random_weapon_powerup", ::quantum_bomb_random_weapon_powerup_result, 60, level.quantum_bomb_in_playable_area_validation_func ); - [[ level.quantum_bomb_register_result_func ]]( "random_bonus_or_lose_points_powerup", ::quantum_bomb_random_bonus_or_lose_points_powerup_result, 25, level.quantum_bomb_in_playable_area_validation_func ); - } - registerclientfield( "scriptmover", "powerup_fx", 1000, 3, "int" ); -} - -init_player_zombie_vars() //checked matches cerberus output -{ - self.zombie_vars[ "zombie_powerup_minigun_on" ] = 0; - self.zombie_vars[ "zombie_powerup_minigun_time" ] = 0; - self.zombie_vars[ "zombie_powerup_tesla_on" ] = 0; - self.zombie_vars[ "zombie_powerup_tesla_time" ] = 0; - self.zombie_vars[ "zombie_powerup_insta_kill_ug_on" ] = 0; - self.zombie_vars[ "zombie_powerup_insta_kill_ug_time" ] = 18; -} - -set_weapon_ignore_max_ammo( str_weapon ) //checked matches cerberus output -{ - if ( !isDefined( level.zombie_weapons_no_max_ammo ) ) - { - level.zombie_weapons_no_max_ammo = []; - } - level.zombie_weapons_no_max_ammo[ str_weapon ] = 1; -} - -powerup_hud_monitor() //checked partially changed to match cerberus output -{ - flag_wait( "start_zombie_round_logic" ); - if ( isDefined( level.current_game_module ) && level.current_game_module == 2 ) - { - return; - } - flashing_timers = []; - flashing_values = []; - flashing_timer = 10; - flashing_delta_time = 0; - flashing_is_on = 0; - flashing_value = 3; - flashing_min_timer = 0.15; - while ( flashing_timer >= flashing_min_timer ) - { - if ( flashing_timer < 5 ) - { - flashing_delta_time = 0.1; - } - else - { - flashing_delta_time = 0.2; - } - if ( flashing_is_on ) - { - flashing_timer = flashing_timer - flashing_delta_time - 0.05; - flashing_value = 2; - } - else - { - flashing_timer -= flashing_delta_time; - flashing_value = 3; - } - flashing_timers[ flashing_timers.size ] = flashing_timer; - flashing_values[ flashing_values.size ] = flashing_value; - flashing_is_on = !flashing_is_on; - } - client_fields = []; - powerup_keys = getarraykeys( level.zombie_powerups ); - for ( powerup_key_index = 0; powerup_key_index < powerup_keys.size; powerup_key_index++ ) - { - if ( isDefined( level.zombie_powerups[ powerup_keys[ powerup_key_index ] ].client_field_name ) ) - { - powerup_name = powerup_keys[ powerup_key_index ]; - client_fields[ powerup_name ] = spawnstruct(); - client_fields[ powerup_name ].client_field_name = level.zombie_powerups[ powerup_name ].client_field_name; - client_fields[ powerup_name ].solo = level.zombie_powerups[ powerup_name ].solo; - client_fields[ powerup_name ].time_name = level.zombie_powerups[ powerup_name ].time_name; - client_fields[ powerup_name ].on_name = level.zombie_powerups[ powerup_name ].on_name; - } - } - client_field_keys = getarraykeys( client_fields ); - - while ( 1 ) - { - wait 0.05; - waittillframeend; - players = get_players(); - - for ( playerindex = 0; playerindex < players.size; playerindex++ ) - { - client_field_key_index = 0; - while ( client_field_key_index < client_field_keys.size ) - { - - player = players[ playerindex ]; - if ( isdefined(level.powerup_player_valid ) ) - { - if ( ![[ level.powerup_player_valid ]]( player ) ) - { - client_field_key_index++; - continue; - } - } - - client_field_name = client_fields[ client_field_keys[ client_field_key_index ] ].client_field_name; - time_name = client_fields[ client_field_keys[ client_field_key_index ] ].time_name; - on_name = client_fields[ client_field_keys[ client_field_key_index ] ].on_name; - powerup_timer = undefined; - powerup_on = undefined; - if ( client_fields[ client_field_keys[ client_field_key_index ] ].solo ) - { - if ( isdefined( player._show_solo_hud ) && player._show_solo_hud == 1 ) - { - powerup_timer = player.zombie_vars[ time_name ]; - powerup_on = player.zombie_vars[ on_name ]; - } - } - - else if ( isdefined( level.zombie_vars[ player.team ][ time_name ] ) ) - { - powerup_timer = level.zombie_vars[ player.team ][ time_name ]; - powerup_on = level.zombie_vars[ player.team ][on_name ]; - } - else if ( isdefined( level.zombie_vars[ time_name ] ) ) - { - powerup_timer = level.zombie_vars[ time_name ]; - powerup_on = level.zombie_vars[ on_name ]; - } - - if ( isdefined( powerup_timer ) && isdefined( powerup_on ) ) - { - player set_clientfield_powerups( client_field_name, powerup_timer, powerup_on, flashing_timers, flashing_values ); - } - else - { - player setclientfieldtoplayer( client_field_name, 0 ); - } - client_field_key_index++; - } - } - - } -} - -set_clientfield_powerups( clientfield_name, powerup_timer, powerup_on, flashing_timers, flashing_values ) //checked changed to match cerberus output -{ - if ( powerup_on ) - { - if ( powerup_timer < 10 ) - { - flashing_value = 3; - for ( i = flashing_timers.size - 1; i > 0; i-- ) - { - if ( powerup_timer < flashing_timers[ i ] ) - { - flashing_value = flashing_values[ i ]; - break; - } - } - self setclientfieldtoplayer( clientfield_name, flashing_value ); - } - else - { - self setclientfieldtoplayer( clientfield_name, 1 ); - } - } - else - { - self setclientfieldtoplayer( clientfield_name, 0 ); - } -} - -randomize_powerups() //checked matches cerberus output -{ - level.zombie_powerup_array = array_randomize( level.zombie_powerup_array ); -} - -get_next_powerup() //checked matches cerberus output -{ - powerup = level.zombie_powerup_array[ level.zombie_powerup_index ]; - level.zombie_powerup_index++; - if ( level.zombie_powerup_index >= level.zombie_powerup_array.size ) - { - level.zombie_powerup_index = 0; - randomize_powerups(); - } - return powerup; -} - -get_valid_powerup() //checked partially matches cerberus output did not change -{ - if ( isDefined( level.zombie_powerup_boss ) ) - { - i = level.zombie_powerup_boss; - level.zombie_powerup_boss = undefined; - return level.zombie_powerup_array[ i ]; - } - if ( isDefined( level.zombie_powerup_ape ) ) - { - powerup = level.zombie_powerup_ape; - level.zombie_powerup_ape = undefined; - return powerup; - } - powerup = get_next_powerup(); - while ( 1 ) - { - while ( !( [[ level.zombie_powerups[ powerup ].func_should_drop_with_regular_powerups ]]() ) ) - { - powerup = get_next_powerup(); - } - return powerup; - } -} - -minigun_no_drop() //checked matches cerberus output -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ].zombie_vars[ "zombie_powerup_minigun_on" ] == 1 ) - { - return 1; - } - i++; - } - if ( !flag( "power_on" ) ) - { - if ( flag( "solo_game" ) ) - { - if ( level.solo_lives_given == 0 ) - { - return 1; - } - } - else - { - return 1; - } - } - return 0; -} - -get_num_window_destroyed() //checked partially matches cerberus output did not change -{ - num = 0; - for ( i = 0; i < level.exterior_goals.size; i++ ) - { - if ( all_chunks_destroyed( level.exterior_goals[ i ], level.exterior_goals[ i ].barrier_chunks ) ) - { - num += 1; - } - } - return num; -} - -watch_for_drop() //checked partially matches cerberus output did not change -{ - flag_wait( "start_zombie_round_logic" ); - flag_wait( "begin_spawning" ); - players = get_players(); - score_to_drop = ( players.size * level.zombie_vars[ "zombie_score_start_" + players.size + "p" ] ) + level.zombie_vars[ "zombie_powerup_drop_increment" ]; - while ( 1 ) - { - flag_wait( "zombie_drop_powerups" ); - players = get_players(); - curr_total_score = 0; - for ( i = 0; i < players.size; i++ ) - { - if ( isDefined( players[ i ].score_total ) ) - { - curr_total_score += players[ i ].score_total; - } - } - if ( curr_total_score > score_to_drop ) - { - level.zombie_vars[ "zombie_powerup_drop_increment" ] *= 1.14; - score_to_drop = curr_total_score + level.zombie_vars[ "zombie_powerup_drop_increment" ]; - level.zombie_vars[ "zombie_drop_item" ] = 1; - } - wait 0.5; - } - -} - -add_zombie_powerup( powerup_name, model_name, hint, func_should_drop_with_regular_powerups, solo, caution, zombie_grabbable, fx, client_field_name, time_name, on_name, clientfield_version ) //checked matches cerberus output -{ - if ( !isDefined( clientfield_version ) ) - { - clientfield_version = 1; - } - if ( isDefined( level.zombie_include_powerups ) && !isDefined( level.zombie_include_powerups[ powerup_name ] ) ) - { - return; - } - precachemodel( model_name ); - precachestring( hint ); - struct = spawnstruct(); - if ( !isDefined( level.zombie_powerups ) ) - { - level.zombie_powerups = []; - } - struct.powerup_name = powerup_name; - struct.model_name = model_name; - struct.weapon_classname = "script_model"; - struct.hint = hint; - struct.func_should_drop_with_regular_powerups = func_should_drop_with_regular_powerups; - struct.solo = solo; - struct.caution = caution; - struct.zombie_grabbable = zombie_grabbable; - if ( isDefined( fx ) ) - { - struct.fx = loadfx( fx ); - } - level.zombie_powerups[ powerup_name ] = struct; - level.zombie_powerup_array[ level.zombie_powerup_array.size ] = powerup_name; - add_zombie_special_drop( powerup_name ); - if ( !level.createfx_enabled ) - { - if ( isDefined( client_field_name ) ) - { - registerclientfield( "toplayer", client_field_name, clientfield_version, 2, "int" ); - struct.client_field_name = client_field_name; - struct.time_name = time_name; - struct.on_name = on_name; - } - } -} - -powerup_set_can_pick_up_in_last_stand( powerup_name, b_can_pick_up ) //checked matches cerberus output -{ - level.zombie_powerups[ powerup_name ].can_pick_up_in_last_stand = b_can_pick_up; -} - -add_zombie_special_drop( powerup_name ) //checked matches cerberus output -{ - level.zombie_special_drop_array[ level.zombie_special_drop_array.size ] = powerup_name; -} - -include_zombie_powerup( powerup_name ) //checked matches cerberus output -{ - if ( !isDefined( level.zombie_include_powerups ) ) - { - level.zombie_include_powerups = []; - } - level.zombie_include_powerups[ powerup_name ] = 1; -} - -powerup_round_start() //checked matches cerberus output -{ - level.powerup_drop_count = 0; -} - -powerup_drop( drop_point ) //checked partially changed to match cerberus output -{ - if ( level.powerup_drop_count >= level.zombie_vars[ "zombie_powerup_drop_max_per_round" ] ) - { - return; - } - if ( !isDefined( level.zombie_include_powerups ) || level.zombie_include_powerups.size == 0 ) - { - return; - } - rand_drop = randomint( 100 ); - if ( rand_drop > 2 ) - { - if ( !level.zombie_vars[ "zombie_drop_item" ] ) - { - return; - } - debug = "score"; - } - else - { - debug = "random"; - } - playable_area = getentarray( "player_volume", "script_noteworthy" ); - level.powerup_drop_count++; - powerup = maps/mp/zombies/_zm_net::network_safe_spawn( "powerup", 1, "script_model", drop_point + vectorScale( ( 0, 0, 1 ), 40 ) ); - valid_drop = 0; - for ( i = 0; i < playable_area.size; i++ ) - { - if ( powerup istouching( playable_area[ i ] ) ) - { - valid_drop = 1; - break; - } - } - if ( valid_drop && level.rare_powerups_active ) - { - pos = ( drop_point[ 0 ], drop_point[ 1 ], drop_point[ 2 ] + 42 ); - if ( check_for_rare_drop_override( pos ) ) - { - level.zombie_vars[ "zombie_drop_item" ] = 0; - valid_drop = 0; - } - } - if ( !valid_drop ) - { - level.powerup_drop_count--; - - powerup delete(); - return; - } - powerup powerup_setup(); - print_powerup_drop( powerup.powerup_name, debug ); - powerup thread powerup_timeout(); - powerup thread powerup_wobble(); - powerup thread powerup_grab(); - powerup thread powerup_move(); - powerup thread powerup_emp(); - level.zombie_vars[ "zombie_drop_item" ] = 0; - level notify( "powerup_dropped", powerup ); -} - -specific_powerup_drop( powerup_name, drop_spot, powerup_team, powerup_location ) //checked partially changed to match cerberus output -{ - powerup = maps/mp/zombies/_zm_net::network_safe_spawn( "powerup", 1, "script_model", drop_spot + vectorScale( ( 0, 0, 1 ), 40 ) ); - level notify( "powerup_dropped", powerup ); - if ( isDefined( powerup ) ) - { - powerup powerup_setup( powerup_name, powerup_team, powerup_location ); - powerup thread powerup_timeout(); - powerup thread powerup_wobble(); - powerup thread powerup_grab( powerup_team ); - powerup thread powerup_move(); - powerup thread powerup_emp(); - return powerup; - } -} - -quantum_bomb_random_powerup_result( position ) //changed to match cerberus output -{ - if ( !isDefined( level.zombie_include_powerups ) || !level.zombie_include_powerups.size ) - { - return; - } - keys = getarraykeys( level.zombie_include_powerups ); - while ( keys.size ) - { - index = randomint( keys.size ); - if ( !level.zombie_powerups[ keys[ index ] ].zombie_grabbable ) - { - skip = 0; - switch( keys[ index ] ) - { - case "bonus_points_player": - case "bonus_points_team": - case "random_weapon": - skip = 1; - break; - case "fire_sale": - case "full_ammo": - case "insta_kill": - case "minigun": - if ( randomint( 4 ) ) - { - skip = 1; - } - break; - case "bonfire_sale": - case "free_perk": - case "tesla": - if ( randomint( 20 ) ) - { - skip = 1; - } - break; - default: - } - if ( skip ) - { - arrayremovevalue( keys, keys[ index ] ); - continue; - } - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "quant_good" ); - [[ level.quantum_bomb_play_player_effect_at_position_func ]]( position ); - level specific_powerup_drop( keys[ index ], position ); - return; - } - else - { - arrayremovevalue( keys, keys[ index ] ); - } - } -} - -quantum_bomb_random_zombie_grab_powerup_result( position ) //changed to match cerberus output -{ - if ( !isDefined( level.zombie_include_powerups ) || !level.zombie_include_powerups.size ) - { - return; - } - keys = getarraykeys( level.zombie_include_powerups ); - while ( keys.size ) - { - index = randomint( keys.size ); - if ( level.zombie_powerups[ keys[ index ] ].zombie_grabbable ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "quant_bad" ); - [[ level.quantum_bomb_play_player_effect_at_position_func ]]( position ); - level specific_powerup_drop( keys[ index ], position ); - return; - } - else - { - arrayremovevalue( keys, keys[ index ] ); - } - } -} - -quantum_bomb_random_weapon_powerup_result( position ) //checked matches cerberus output -{ - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "quant_good" ); - [[ level.quantum_bomb_play_player_effect_at_position_func ]]( position ); - level specific_powerup_drop( "random_weapon", position ); -} - -quantum_bomb_random_bonus_or_lose_points_powerup_result( position ) //checked matches cerberus output -{ - rand = randomint( 10 ); - powerup = "bonus_points_team"; - switch( rand ) - { - case 0: - case 1: - powerup = "lose_points_team"; - if ( isDefined( level.zombie_include_powerups[ powerup ] ) ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "quant_bad" ); - break; - } - case 2: - case 3: - case 4: - powerup = "bonus_points_player"; - if ( isDefined( level.zombie_include_powerups[ powerup ] ) ) - { - break; - } - default: - powerup = "bonus_points_team"; - break; - } - [[ level.quantum_bomb_play_player_effect_at_position_func ]]( position ); - level specific_powerup_drop( powerup, position ); -} - -special_powerup_drop( drop_point ) //checked changed to match cerberus output -{ - if ( !isDefined( level.zombie_include_powerups ) || level.zombie_include_powerups.size == 0 ) - { - return; - } - powerup = spawn( "script_model", drop_point + vectorScale( ( 0, 0, 1 ), 40 ) ); - playable_area = getentarray( "player_volume", "script_noteworthy" ); - valid_drop = 0; - for ( i = 0; i < playable_area.size; i++ ) - { - if ( powerup istouching( playable_area[ i ] ) ) - { - valid_drop = 1; - break; - } - } - if ( !valid_drop ) - { - powerup delete(); - return; - } - powerup special_drop_setup(); -} - -cleanup_random_weapon_list() //checked matches cerberus output -{ - self waittill( "death" ); - arrayremovevalue( level.random_weapon_powerups, self ); -} - -powerup_setup( powerup_override, powerup_team, powerup_location ) //checked partially changed to match cerberus output -{ - powerup = undefined; - if ( !isDefined( powerup_override ) ) - { - powerup = get_valid_powerup(); - } - else - { - powerup = powerup_override; - if ( powerup == "tesla" && tesla_powerup_active() ) - { - powerup = "minigun"; - } - } - struct = level.zombie_powerups[ powerup ]; - if ( powerup == "random_weapon" ) - { - players = get_players(); - self.weapon = maps/mp/zombies/_zm_magicbox::treasure_chest_chooseweightedrandomweapon( players[ 0 ] ); - self.base_weapon = self.weapon; - if ( !isDefined( level.random_weapon_powerups ) ) - { - level.random_weapon_powerups = []; - } - level.random_weapon_powerups[ level.random_weapon_powerups.size ] = self; - self thread cleanup_random_weapon_list(); - if ( isDefined( level.zombie_weapons[ self.weapon ].upgrade_name ) && !randomint( 4 ) ) - { - self.weapon = level.zombie_weapons[ self.weapon ].upgrade_name; - } - self setmodel( getweaponmodel( self.weapon ) ); - self useweaponhidetags( self.weapon ); - offsetdw = vectorScale( ( 1, 1, 1 ), 3 ); - self.worldgundw = undefined; - if ( maps/mp/zombies/_zm_magicbox::weapon_is_dual_wield( self.weapon ) ) - { - self.worldgundw = spawn( "script_model", self.origin + offsetdw ); - self.worldgundw.angles = self.angles; - self.worldgundw setmodel( maps/mp/zombies/_zm_magicbox::get_left_hand_weapon_model_name( self.weapon ) ); - self.worldgundw useweaponhidetags( self.weapon ); - self.worldgundw linkto( self, "tag_weapon", offsetdw, ( 0, 0, 0 ) ); - } - } - else - { - self setmodel( struct.model_name ); - } - maps/mp/_demo::bookmark( "zm_powerup_dropped", getTime(), undefined, undefined, 1 ); - playsoundatposition( "zmb_spawn_powerup", self.origin ); - if ( isDefined( powerup_team ) ) - { - self.powerup_team = powerup_team; - } - if ( isDefined( powerup_location ) ) - { - self.powerup_location = powerup_location; - } - self.powerup_name = struct.powerup_name; - self.hint = struct.hint; - self.solo = struct.solo; - self.caution = struct.caution; - self.zombie_grabbable = struct.zombie_grabbable; - self.func_should_drop_with_regular_powerups = struct.func_should_drop_with_regular_powerups; - if ( isDefined( struct.fx ) ) - { - self.fx = struct.fx; - } - if ( isDefined( struct.can_pick_up_in_last_stand ) ) - { - self.can_pick_up_in_last_stand = struct.can_pick_up_in_last_stand; - } - self playloopsound( "zmb_spawn_powerup_loop" ); - level.active_powerups[ level.active_powerups.size ] = self; -} - -special_drop_setup() //checked matches cerberus output -{ - powerup = undefined; - is_powerup = 1; - if ( level.round_number <= 10 ) - { - powerup = get_valid_powerup(); - } - else - { - powerup = level.zombie_special_drop_array[ randomint( level.zombie_special_drop_array.size ) ]; - if ( level.round_number > 15 && randomint( 100 ) < ( ( level.round_number - 15 ) * 5 ) ) - { - powerup = "nothing"; - } - } - switch( powerup ) - { - case "all_revive": - case "bonfire_sale": - case "bonus_points_player": - case "bonus_points_team": - case "carpenter": - case "double_points": - case "empty_clip": - case "fire_sale": - case "free_perk": - case "insta_kill": - case "lose_perk": - case "lose_points_team": - case "minigun": - case "nuke": - case "random_weapon": - case "tesla": - case "zombie_blood": - break; - case "full_ammo": - if ( level.round_number > 10 && randomint( 100 ) < ( ( level.round_number - 10 ) * 5 ) ) - { - powerup = level.zombie_powerup_array[ randomint( level.zombie_powerup_array.size ) ]; - } - break; - case "dog": - if ( level.round_number >= 15 ) - { - is_powerup = 0; - dog_spawners = getentarray( "special_dog_spawner", "targetname" ); - thread play_sound_2d( "sam_nospawn" ); - } - else - { - powerup = get_valid_powerup(); - } - break; - default: - if ( isDefined( level._zombiemode_special_drop_setup ) ) - { - is_powerup = [[ level._zombiemode_special_drop_setup ]]( powerup ); - } - else - { - is_powerup = 0; - playfx( level._effect[ "lightning_dog_spawn" ], self.origin ); - playsoundatposition( "pre_spawn", self.origin ); - wait 1.5; - playsoundatposition( "zmb_bolt", self.origin ); - earthquake( 0.5, 0.75, self.origin, 1000 ); - playrumbleonposition( "explosion_generic", self.origin ); - playsoundatposition( "spawn", self.origin ); - wait 1; - thread play_sound_2d( "sam_nospawn" ); - self delete(); - } - } - if ( is_powerup ) - { - playfx( level._effect[ "lightning_dog_spawn" ], self.origin ); - playsoundatposition( "pre_spawn", self.origin ); - wait 1.5; - playsoundatposition( "zmb_bolt", self.origin ); - earthquake( 0.5, 0.75, self.origin, 1000 ); - playrumbleonposition( "explosion_generic", self.origin ); - playsoundatposition( "spawn", self.origin ); - self powerup_setup( powerup ); - self thread powerup_timeout(); - self thread powerup_wobble(); - self thread powerup_grab(); - self thread powerup_move(); - self thread powerup_emp(); - } -} - -powerup_zombie_grab_trigger_cleanup( trigger ) //checked matches cerberus output -{ - self waittill_any( "powerup_timedout", "powerup_grabbed", "hacked" ); - trigger delete(); -} - -powerup_zombie_grab( powerup_team ) //checked changed to match cerberus output -{ - self endon( "powerup_timedout" ); - self endon( "powerup_grabbed" ); - self endon( "hacked" ); - zombie_grab_trigger = spawn( "trigger_radius", self.origin - vectorScale( ( 0, 0, 1 ), 40 ), 4, 32, 72 ); - zombie_grab_trigger enablelinkto(); - zombie_grab_trigger linkto( self ); - zombie_grab_trigger setteamfortrigger( level.zombie_team ); - self thread powerup_zombie_grab_trigger_cleanup( zombie_grab_trigger ); - poi_dist = 300; - if ( isDefined( level._zombie_grabbable_poi_distance_override ) ) - { - poi_dist = level._zombie_grabbable_poi_distance_override; - } - zombie_grab_trigger create_zombie_point_of_interest( poi_dist, 2, 0, 1, undefined, undefined, powerup_team ); - while ( isDefined( self ) ) - { - zombie_grab_trigger waittill( "trigger", who ); - if ( isDefined( level._powerup_grab_check ) ) - { - if ( !self [[ level._powerup_grab_check ]]( who ) ) - { - continue; - } - } - else if ( !isDefined( who ) || !isai( who ) ) - { - continue; - } - playfx( level._effect[ "powerup_grabbed_red" ], self.origin ); - playfx( level._effect[ "powerup_grabbed_wave_red" ], self.origin ); - switch( self.powerup_name ) - { - case "lose_points_team": - level thread lose_points_team_powerup( self ); - players = get_players(); - players[ randomintrange( 0, players.size ) ] thread powerup_vo( "lose_points" ); - break; - case "lose_perk": - level thread lose_perk_powerup( self ); - break; - case "empty_clip": - level thread empty_clip_powerup( self ); - break; - default: - if ( isDefined( level._zombiemode_powerup_zombie_grab ) ) - { - level thread [[ level._zombiemode_powerup_zombie_grab ]]( self ); - } - if ( isDefined( level._game_mode_powerup_zombie_grab ) ) - { - level thread [[ level._game_mode_powerup_zombie_grab ]]( self, who ); - } - break; - } - level thread maps/mp/zombies/_zm_audio::do_announcer_playvox( "powerup", self.powerup_name ); - wait 0.1; - playsoundatposition( "zmb_powerup_grabbed", self.origin ); - self stoploopsound(); - self powerup_delete(); - self notify( "powerup_grabbed" ); - } -} - -powerup_grab(powerup_team) //checked partially changed to match cerberus output -{ - if ( isdefined( self ) && self.zombie_grabbable ) - { - self thread powerup_zombie_grab( powerup_team ); - return; - } - - self endon ( "powerup_timedout" ); - self endon ( "powerup_grabbed" ); - - range_squared = 4096; - while ( isdefined( self ) ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - // Don't let them grab the minigun, tesla, or random weapon if they're downed or reviving - // due to weapon switching issues. - if ( ( self.powerup_name == "minigun" || self.powerup_name == "tesla" ) && players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() || players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() && ( self.powerup_name == "random_weapon" || self.powerup_name == "meat_stink" ) || players[ i ] usebuttonpressed() && players[ i ] in_revive_trigger() ) - { - i++; - continue; - } - if ( !is_true( self.can_pick_up_in_last_stand ) && players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - i++; - continue; - } - ignore_range = 0; - if ( isdefined( players[ i ].ignore_range_powerup ) && players[ i ].ignore_range_powerup == self ) - { - players[ i ].ignore_range_powerup = undefined; - ignore_range = 1; - } - if ( DistanceSquared( players[ i ].origin, self.origin ) < range_squared || ignore_range ) - { - if ( isdefined(level._powerup_grab_check ) ) - { - if ( !self [[ level._powerup_grab_check ]]( players[ i ] ) ) - { - i++; - continue; - } - } - else if ( isdefined( level.zombie_powerup_grab_func ) ) - { - level thread [[ level.zombie_powerup_grab_func ]](); - break; - } - switch ( self.powerup_name ) - { - case "nuke": - level thread nuke_powerup( self, players[ i ].team ); - players[ i ] thread powerup_vo( "nuke" ); - zombies = getaiarray( level.zombie_team ); - players[ i ].zombie_nuked = arraysort( zombies, self.origin ); - players[ i ] notify( "nuke_triggered" ); - break; - case "full_ammo": - level thread full_ammo_powerup( self ,players[ i ] ); - players[ i ] thread powerup_vo( "full_ammo" ); - break; - case "double_points": - level thread double_points_powerup( self, players[ i ] ); - players[ i ] thread powerup_vo( "double_points" ); - break; - case "insta_kill": - level thread insta_kill_powerup( self,players[ i ] ); - players[ i ] thread powerup_vo( "insta_kill" ); - break; - case "carpenter": - if ( is_classic() ) - { - players[ i ] thread maps/mp/zombies/_zm_pers_upgrades::persistent_carpenter_ability_check(); - } - if ( isdefined( level.use_new_carpenter_func ) ) - { - level thread [[ level.use_new_carpenter_func ]]( self.origin ); - } - else - { - level thread start_carpenter( self.origin ); - } - players[ i ] thread powerup_vo( "carpenter" ); - break; - case "fire_sale": - level thread start_fire_sale( self ); - players[ i ] thread powerup_vo( "firesale" ); - break; - case "bonfire_sale": - level thread start_bonfire_sale( self ); - players[ i ] thread powerup_vo( "firesale" ); - break; - case "minigun": - level thread minigun_weapon_powerup( players[ i ] ); - players[ i ] thread powerup_vo( "minigun" ); - break; - case "free_perk": - level thread free_perk_powerup( self ); - break; - case "tesla": - level thread tesla_weapon_powerup( players[ i ] ); - players[ i ] thread powerup_vo( "tesla" ); - break; - case "random_weapon": - if ( !level random_weapon_powerup( self, players[ i ] ) ) - { - i++; - continue; - } - break; - case "bonus_points_player": - level thread bonus_points_player_powerup( self, players[ i ] ); - players[ i ] thread powerup_vo( "bonus_points_solo" ); - break; - case "bonus_points_team": - level thread bonus_points_team_powerup( self ); - players[ i ] thread powerup_vo( "bonus_points_team" ); - break; - case "teller_withdrawl": - level thread teller_withdrawl( self ,players[ i ] ); - break; - default: - if ( IsDefined( level._zombiemode_powerup_grab ) ) - { - level thread [[ level._zombiemode_powerup_grab ]]( self, players[ i ] ); - } - break; - } - - maps\mp\_demo::bookmark( "zm_player_powerup_grabbed", gettime(), players[ i ] ); - - if( should_award_stat ( self.powerup_name )) //don't do this for things that aren't really a powerup - { - //track # of picked up powerups/drops for the player - players[i] maps/mp/zombies/_zm_stats::increment_client_stat( "drops" ); - players[i] maps/mp/zombies/_zm_stats::increment_player_stat( "drops" ); - players[i] maps/mp/zombies/_zm_stats::increment_client_stat( self.powerup_name + "_pickedup" ); - players[i] maps/mp/zombies/_zm_stats::increment_player_stat( self.powerup_name + "_pickedup" ); - } - - if ( self.solo ) - { - playfx( level._effect[ "powerup_grabbed_solo" ], self.origin ); - playfx( level._effect[ "powerup_grabbed_wave_solo" ], self.origin ); - } - else if ( self.caution ) - { - playfx( level._effect[ "powerup_grabbed_caution" ], self.origin ); - playfx( level._effect[ "powerup_grabbed_wave_caution" ], self.origin ); - } - else - { - playfx( level._effect[ "powerup_grabbed" ], self.origin ); - playfx( level._effect[ "powerup_grabbed_wave" ], self.origin ); - } - - if ( is_true( self.stolen ) ) - { - level notify( "monkey_see_monkey_dont_achieved" ); - } - if ( isdefined( self.grabbed_level_notify ) ) - { - level notify( self.grabbed_level_notify ); - } - - // RAVEN BEGIN bhackbarth: since there is a wait here, flag the powerup as being taken - self.claimed = true; - self.power_up_grab_player = players[ i ]; //Player who grabbed the power up - // RAVEN END - - wait 0.1 ; - - playsoundatposition("zmb_powerup_grabbed", self.origin); - self stoploopsound(); - self hide(); - - //Preventing the line from playing AGAIN if fire sale becomes active before it runs out - if ( self.powerup_name != "fire_sale" ) - { - if ( isdefined( self.power_up_grab_player ) ) - { - if ( isdefined( level.powerup_intro_vox ) ) - { - level thread [[ level.powerup_intro_vox ]]( self ); - return; - } - else if ( isdefined( level.powerup_vo_available ) ) - { - can_say_vo = [[ level.powerup_vo_available ]](); - if ( !can_say_vo ) - { - self powerup_delete(); - self notify( "powerup_grabbed" ); - return; - } - } - } - } - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( self.powerup_name, self.power_up_grab_player.pers[ "team" ] ); - self powerup_delete(); - self notify( "powerup_grabbed" ); - } - i++; - } - wait 0.1; - } -} - - -start_fire_sale( item ) //checked matches cerberus output -{ - if ( level.zombie_vars[ "zombie_powerup_fire_sale_time" ] > 0 && is_true( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) ) - { - level.zombie_vars[ "zombie_powerup_fire_sale_time" ] += 30; - return; - } - level notify( "powerup fire sale" ); - level endon( "powerup fire sale" ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "fire_sale" ); - level.zombie_vars[ "zombie_powerup_fire_sale_on" ] = 1; - level thread toggle_fire_sale_on(); - level.zombie_vars[ "zombie_powerup_fire_sale_time" ] = 30; - while ( level.zombie_vars[ "zombie_powerup_fire_sale_time" ] > 0 ) - { - wait 0.05; - level.zombie_vars[ "zombie_powerup_fire_sale_time" ] -= 0.05; - } - level.zombie_vars[ "zombie_powerup_fire_sale_on" ] = 0; - level notify( "fire_sale_off" ); -} - -start_bonfire_sale( item ) //checked matches cerberus output -{ - level notify( "powerup bonfire sale" ); - level endon( "powerup bonfire sale" ); - temp_ent = spawn( "script_origin", ( 0, 0, 0 ) ); - temp_ent playloopsound( "zmb_double_point_loop" ); - level.zombie_vars[ "zombie_powerup_bonfire_sale_on" ] = 1; - level thread toggle_bonfire_sale_on(); - level.zombie_vars[ "zombie_powerup_bonfire_sale_time" ] = 30; - while ( level.zombie_vars[ "zombie_powerup_bonfire_sale_time" ] > 0 ) - { - wait 0.05; - level.zombie_vars[ "zombie_powerup_bonfire_sale_time" ] -= 0.05; - } - level.zombie_vars[ "zombie_powerup_bonfire_sale_on" ] = 0; - level notify( "bonfire_sale_off" ); - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] playsound( "zmb_points_loop_off" ); - i++; - } - temp_ent delete(); -} - -start_carpenter( origin ) //checked partially changed to match cerberus output -{ - window_boards = getstructarray( "exterior_goal", "targetname" ); - total = level.exterior_goals.size; - carp_ent = spawn( "script_origin", ( 0, 0, 0 ) ); - carp_ent playloopsound( "evt_carpenter" ); - while ( 1 ) - { - windows = get_closest_window_repair( window_boards, origin ); - if ( !isDefined( windows ) ) - { - carp_ent stoploopsound( 1 ); - carp_ent playsoundwithnotify( "evt_carpenter_end", "sound_done" ); - carp_ent waittill( "sound_done" ); - break; - } - else arrayremovevalue( window_boards, windows ); - while ( 1 ) - { - if ( all_chunks_intact( windows, windows.barrier_chunks ) ) - { - break; - } - else chunk = get_random_destroyed_chunk( windows, windows.barrier_chunks ); - if ( !isDefined( chunk ) ) - { - break; - } - windows thread maps/mp/zombies/_zm_blockers::replace_chunk( windows, chunk, undefined, maps/mp/zombies/_zm_powerups::is_carpenter_boards_upgraded(), 1 ); - if ( isDefined( windows.clip ) ) - { - windows.clip enable_trigger(); - windows.clip disconnectpaths(); - } - else - { - blocker_disconnect_paths( windows.neg_start, windows.neg_end ); - } - wait_network_frame(); - wait 0.05; - } - wait_network_frame(); - } - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] maps/mp/zombies/_zm_score::player_add_points( "carpenter_powerup", 200 ); - i++; - } - carp_ent delete(); -} - -get_closest_window_repair( windows, origin ) //checked partially changed to match cerberus output -{ - current_window = undefined; - shortest_distance = undefined; - i = 0; - while ( i < windows.size ) - { - if ( all_chunks_intact( windows, windows[ i ].barrier_chunks ) ) - { - i++; - continue; - } - if ( !isDefined( current_window ) ) - { - current_window = windows[ i ]; - shortest_distance = distancesquared( current_window.origin, origin ); - i++; - continue; - } - if ( distancesquared( windows[ i ].origin, origin ) < shortest_distance ) - { - current_window = windows[ i ]; - shortest_distance = distancesquared( windows[ i ].origin, origin ); - } - i++; - } - return current_window; -} - -powerup_vo( type ) //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( isDefined( level.powerup_vo_available ) ) - { - if ( ![[ level.powerup_vo_available ]]() ) - { - return; - } - } - wait randomfloatrange( 2, 2.5 ); - if ( type == "tesla" ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", type ); - } - else - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "powerup", type ); - } - if ( isDefined( level.custom_powerup_vo_response ) ) - { - level [[ level.custom_powerup_vo_response ]]( self, type ); - } -} - -powerup_wobble_fx() //checked matches cerberus output -{ - self endon( "death" ); - if ( !isDefined( self ) ) - { - return; - } - if ( isDefined( level.powerup_fx_func ) ) - { - self thread [[ level.powerup_fx_func ]](); - return; - } - if ( self.solo ) - { - self setclientfield( "powerup_fx", 2 ); - } - else if ( self.caution ) - { - self setclientfield( "powerup_fx", 4 ); - } - else if ( self.zombie_grabbable ) - { - self setclientfield( "powerup_fx", 3 ); - } - else - { - self setclientfield( "powerup_fx", 1 ); - } -} - -powerup_wobble() //checked matches cerberus output -{ - self endon( "powerup_grabbed" ); - self endon( "powerup_timedout" ); - self thread powerup_wobble_fx(); - while ( isDefined( self ) ) - { - waittime = randomfloatrange( 2.5, 5 ); - yaw = randomint( 360 ); - if ( yaw > 300 ) - { - yaw = 300; - } - else - { - if ( yaw < 60 ) - { - yaw = 60; - } - } - yaw = self.angles[ 1 ] + yaw; - new_angles = ( -60 + randomint( 120 ), yaw, -45 + randomint( 90 ) ); - self rotateto( new_angles, waittime, waittime * 0.5, waittime * 0.5 ); - if ( isDefined( self.worldgundw ) ) - { - self.worldgundw rotateto( new_angles, waittime, waittime * 0.5, waittime * 0.5 ); - } - wait randomfloat( waittime - 0.1 ); - } -} - -powerup_timeout() //checked partially changed to match cerberus output -{ - if ( isDefined( level._powerup_timeout_override ) && !isDefined( self.powerup_team ) ) - { - self thread [[ level._powerup_timeout_override ]](); - return; - } - self endon( "powerup_grabbed" ); - self endon( "death" ); - self endon( "powerup_reset" ); - self show(); - wait_time = 15; - if ( isDefined( level._powerup_timeout_custom_time ) ) - { - time = [[ level._powerup_timeout_custom_time ]]( self ); - if ( time == 0 ) - { - return; - } - wait_time = time; - } - wait wait_time; - i = 0; - while ( i < 40 ) - { - if ( i % 2 ) - { - self ghost(); - if ( isDefined( self.worldgundw ) ) - { - self.worldgundw ghost(); - } - } - else - { - self show(); - if ( isDefined( self.worldgundw ) ) - { - self.worldgundw show(); - } - } - if ( i < 15 ) - { - wait 0.5; - i++; - continue; - } - if ( i < 25 ) - { - wait 0.25; - i++; - continue; - } - wait 0.1; - i++; - } - self notify( "powerup_timedout" ); - self powerup_delete(); -} - -powerup_delete() //checked matches cerberus output -{ - arrayremovevalue( level.active_powerups, self, 0 ); - if ( isDefined( self.worldgundw ) ) - { - self.worldgundw delete(); - } - self delete(); -} - -powerup_delete_delayed( time ) //checked matches cerberus output -{ - if ( isDefined( time ) ) - { - wait time; - } - else - { - wait 0.01; - } - self powerup_delete(); -} - -nuke_powerup( drop_item, player_team ) //checked changed to match cerberus output -{ - location = drop_item.origin; - playfx( drop_item.fx, location ); - level thread nuke_flash( player_team ); - wait 0.5; - zombies = getaiarray( level.zombie_team ); - zombies = arraysort( zombies, location ); - zombies_nuked = []; - i = 0; - while ( i < zombies.size ) - { - if ( is_true( zombies[ i ].ignore_nuke ) ) - { - i++; - continue; - } - if ( is_true( zombies[ i ].marked_for_death ) ) - { - i++; - continue; - } - if ( isdefined( zombies[ i ].nuke_damage_func ) ) - { - zombies[ i ] thread [[ zombies[ i ].nuke_damage_func ]](); - i++; - continue; - } - if ( is_magic_bullet_shield_enabled( zombies[ i ] ) ) - { - i++; - continue; - } - zombies[ i ].marked_for_death = 1; - //imported from bo3 _zm_powerup_nuke.gsc - if ( !zombies[ i ].nuked && !is_magic_bullet_shield_enabled( zombies[ i ] ) ) - { - zombies[ i ].nuked = 1; - zombies_nuked[ zombies_nuked.size ] = zombies[ i ]; - } - i++; - } - i = 0; - while ( i < zombies_nuked.size ) - { - wait randomfloatrange( 0.1, 0.7 ); - if ( !isdefined( zombies_nuked[ i ] ) ) - { - i++; - continue; - } - if ( is_magic_bullet_shield_enabled( zombies_nuked[ i ] ) ) - { - i++; - continue; - } - if ( i < 5 && !zombies_nuked[ i ].isdog ) - { - zombies_nuked[ i ] thread maps/mp/animscripts/zm_death::flame_death_fx(); - } - if ( !zombies_nuked[ i ].isdog ) - { - if ( !is_true( zombies_nuked[ i ].no_gib ) ) - { - zombies_nuked[ i ] maps/mp/zombies/_zm_spawner::zombie_head_gib(); - } - zombies_nuked[ i ] playsound("evt_nuked"); - } - zombies_nuked[ i ] dodamage(zombies_nuked[i].health + 666, zombies_nuked[ i ].origin ); - i++; - } - players = get_players( player_team ); - for ( i = 0; i < players.size; i++ ) - { - players[ i ] maps/mp/zombies/_zm_score::player_add_points( "nuke_powerup", 400 ); - } -} - -nuke_flash( team ) //checked matches cerberus output -{ - if ( isDefined( team ) ) - { - get_players()[ 0 ] playsoundtoteam( "evt_nuke_flash", team ); - } - else - { - get_players()[ 0 ] playsound( "evt_nuke_flash" ); - } - fadetowhite = newhudelem(); - fadetowhite.x = 0; - fadetowhite.y = 0; - fadetowhite.alpha = 0; - fadetowhite.horzalign = "fullscreen"; - fadetowhite.vertalign = "fullscreen"; - fadetowhite.foreground = 1; - fadetowhite setshader( "white", 640, 480 ); - fadetowhite fadeovertime( 0.2 ); - fadetowhite.alpha = 0.8; - wait 0.5; - fadetowhite fadeovertime( 1 ); - fadetowhite.alpha = 0; - wait 1.1; - fadetowhite destroy(); -} - -double_points_powerup( drop_item, player ) //checked partially matches cerberus output did not change -{ - level notify( "powerup points scaled_" + player.team ); - level endon( "powerup points scaled_" + player.team ); - team = player.team; - level thread point_doubler_on_hud( drop_item, team ); - if ( is_true( level.pers_upgrade_double_points ) ) - { - player thread maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_double_points_pickup_start(); - } - if ( isDefined( level.current_game_module ) && level.current_game_module == 2 ) - { - if ( isDefined( player._race_team ) ) - { - if ( player._race_team == 1 ) - { - level._race_team_double_points = 1; - } - else - { - level._race_team_double_points = 2; - } - } - } - level.zombie_vars[ team ][ "zombie_point_scalar" ] = 2; - players = get_players(); - for ( player_index = 0; player_index < players.size; player_index++ ) - { - if ( team == players[ player_index ].team ) - { - players[ player_index ] setclientfield( "score_cf_double_points_active", 1 ); - } - } - wait 30; - level.zombie_vars[ team ][ "zombie_point_scalar" ] = 1; - level._race_team_double_points = undefined; - players = get_players(); - for ( player_index = 0; player_index < players.size; player_index++ ) - { - if ( team == players[ player_index ].team ) - { - players[ player_index ] setclientfield( "score_cf_double_points_active", 0 ); - } - } -} - -full_ammo_powerup( drop_item, player ) //checked changed to match cerberus output -{ - players = get_players( player.team ); - if ( isdefined( level._get_game_module_players ) ) - { - players = [[ level._get_game_module_players ]]( player ); - } - i = 0; - while ( i < players.size ) - { - if ( players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - i++; - continue; - } - primary_weapons = players[ i ] getweaponslist( 1 ); - players[ i ] notify( "zmb_max_ammo" ); - players[ i ] notify( "zmb_lost_knife" ); - players[ i ] notify( "zmb_disable_claymore_prompt" ); - players[ i ] notify( "zmb_disable_spikemore_prompt" ); - x = 0; - while ( x < primary_weapons.size ) - { - if ( level.headshots_only && is_lethal_grenade(primary_weapons[ x ] ) ) - { - x++; - continue; - } - if ( isdefined( level.zombie_include_equipment ) && isdefined( level.zombie_include_equipment[ primary_weapons[ x ] ] ) ) - { - x++; - continue; - } - if ( isdefined( level.zombie_weapons_no_max_ammo ) && isdefined( level.zombie_weapons_no_max_ammo[ primary_weapons[ x ] ] ) ) - { - x++; - continue; - } - if ( players[ i ] hasweapon( primary_weapons[ x ] ) ) - { - players[ i ] givemaxammo( primary_weapons[ x ] ); - } - x++; - } - i++; - } - level thread full_ammo_on_hud( drop_item, player.team ); -} - -insta_kill_powerup( drop_item, player ) //checked matches cerberus output -{ - level notify( "powerup instakill_" + player.team ); - level endon( "powerup instakill_" + player.team ); - if ( isDefined( level.insta_kill_powerup_override ) ) - { - level thread [[ level.insta_kill_powerup_override ]]( drop_item, player ); - return; - } - if ( is_classic() ) - { - player thread maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_insta_kill_upgrade_check(); - } - team = player.team; - level thread insta_kill_on_hud( drop_item, team ); - level.zombie_vars[ team ][ "zombie_insta_kill" ] = 1; - wait 30; - level.zombie_vars[ team ][ "zombie_insta_kill" ] = 0; - players = get_players( team ); - i = 0; - while ( i < players.size ) - { - if ( isDefined( players[ i ] ) ) - { - players[ i ] notify( "insta_kill_over" ); - } - i++; - } -} - -is_insta_kill_active() //checked matches cerberus output -{ - return level.zombie_vars[ self.team ][ "zombie_insta_kill" ]; -} - -check_for_instakill( player, mod, hit_location ) //checked changed to match cerberus output -{ - if ( isDefined( player ) && isalive( player ) && isDefined( level.check_for_instakill_override ) ) - { - if ( !self [[ level.check_for_instakill_override ]]( player ) ) - { - return; - } - if ( player.use_weapon_type == "MOD_MELEE" ) - { - player.last_kill_method = "MOD_MELEE"; - } - else - { - player.last_kill_method = "MOD_UNKNOWN"; - } - modname = remove_mod_from_methodofdeath( mod ); - if ( isDefined( self.no_gib ) && self.no_gib ) - { - self maps/mp/zombies/_zm_spawner::zombie_head_gib(); - } - self.health = 1; - self dodamage( self.health + 666, self.origin, player, self, hit_location, modname ); - player notify( "zombie_killed" ); - } - if ( isDefined( player ) && isalive( player ) && level.zombie_vars[ player.team ][ "zombie_insta_kill" ] || is_true( player.personal_instakill ) ) - { - if ( is_magic_bullet_shield_enabled( self ) ) - { - return; - } - if ( isDefined( self.instakill_func ) ) - { - self thread [[ self.instakill_func ]](); - return; - } - if ( player.use_weapon_type == "MOD_MELEE" ) - { - player.last_kill_method = "MOD_MELEE"; - } - else - { - player.last_kill_method = "MOD_UNKNOWN"; - } - modname = remove_mod_from_methodofdeath( mod ); - if ( flag( "dog_round" ) ) - { - self.health = 1; - self dodamage( self.health + 666, self.origin, player, self, hit_location, modname ); - player notify( "zombie_killed" ); - } - else if ( isdefined( self.no_gib ) && !self.no_gib ) - { - self maps/mp/zombies/_zm_spawner::zombie_head_gib(); - } - self.health = 1; - self dodamage( self.health + 666, self.origin, player, self, hit_location, modname ); - player notify( "zombie_killed" ); - } -} - -insta_kill_on_hud( drop_item, player_team ) //checked matches cerberus output -{ - if ( level.zombie_vars[ player_team ][ "zombie_powerup_insta_kill_on" ] ) - { - level.zombie_vars[ player_team ][ "zombie_powerup_insta_kill_time" ] = 30; - return; - } - level.zombie_vars[ player_team ][ "zombie_powerup_insta_kill_on" ] = 1; - level thread time_remaning_on_insta_kill_powerup( player_team ); -} - -time_remaning_on_insta_kill_powerup( player_team ) //checked matches cerberus output -{ - temp_enta = spawn( "script_origin", ( 0, 0, 0 ) ); - temp_enta playloopsound( "zmb_insta_kill_loop" ); - while ( level.zombie_vars[ player_team ][ "zombie_powerup_insta_kill_time" ] >= 0 ) - { - wait 0.05; - level.zombie_vars[ player_team ][ "zombie_powerup_insta_kill_time" ] -= 0.05; - } - get_players()[ 0 ] playsoundtoteam( "zmb_insta_kill", player_team ); - temp_enta stoploopsound( 2 ); - level.zombie_vars[ player_team ][ "zombie_powerup_insta_kill_on" ] = 0; - level.zombie_vars[ player_team ][ "zombie_powerup_insta_kill_time" ] = 30; - temp_enta delete(); -} - -point_doubler_on_hud( drop_item, player_team ) //checked matches cerberus output -{ - self endon( "disconnect" ); - if ( level.zombie_vars[ player_team ][ "zombie_powerup_point_doubler_on" ] ) - { - level.zombie_vars[ player_team ][ "zombie_powerup_point_doubler_time" ] = 30; - return; - } - level.zombie_vars[ player_team ][ "zombie_powerup_point_doubler_on" ] = 1; - level thread time_remaining_on_point_doubler_powerup( player_team ); -} - -time_remaining_on_point_doubler_powerup( player_team ) //checked partially matches cerberus output did not change -{ - temp_ent = spawn( "script_origin", ( 0, 0, 0 ) ); - temp_ent playloopsound( "zmb_double_point_loop" ); - while ( level.zombie_vars[ player_team ][ "zombie_powerup_point_doubler_time" ] >= 0 ) - { - wait 0.05; - level.zombie_vars[ player_team ][ "zombie_powerup_point_doubler_time" ] -= 0.05; - } - level.zombie_vars[ player_team ][ "zombie_powerup_point_doubler_on" ] = 0; - players = get_players( player_team ); - for ( i = 0; i < players.size; i++ ) - { - players[ i ] playsound( "zmb_points_loop_off" ); - } - temp_ent stoploopsound( 2 ); - level.zombie_vars[ player_team ][ "zombie_powerup_point_doubler_time" ] = 30; - temp_ent delete(); -} - -toggle_bonfire_sale_on() //checked matches cerberus output -{ - level endon( "powerup bonfire sale" ); - if ( !isDefined( level.zombie_vars[ "zombie_powerup_bonfire_sale_on" ] ) ) - { - return; - } - if ( level.zombie_vars[ "zombie_powerup_bonfire_sale_on" ] ) - { - if ( isDefined( level.bonfire_init_func ) ) - { - level thread [[ level.bonfire_init_func ]](); - } - level waittill( "bonfire_sale_off" ); - } -} - -toggle_fire_sale_on() //checked partially matches cerberus output did not change -{ - level endon( "powerup fire sale" ); - if ( !isDefined( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) ) - { - return; - } - while ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) - { - for ( i = 0; i < level.chests.size; i++ ) - { - show_firesale_box = level.chests[ i ] [[ level._zombiemode_check_firesale_loc_valid_func ]](); - if ( show_firesale_box ) - { - level.chests[ i ].zombie_cost = 10; - if ( level.chest_index != i ) - { - level.chests[ i ].was_temp = 1; - if ( is_true( level.chests[ i ].hidden ) ) - { - level.chests[ i ] thread maps/mp/zombies/_zm_magicbox::show_chest(); - } - wait_network_frame(); - } - } - } - level waittill( "fire_sale_off" ); - waittillframeend; - for ( i = 0; i < level.chests.size; i++ ) - { - show_firesale_box = level.chests[ i ] [[ level._zombiemode_check_firesale_loc_valid_func ]](); - if ( show_firesale_box ) - { - if ( level.chest_index != i && isDefined( level.chests[ i ].was_temp ) ) - { - level.chests[ i ].was_temp = undefined; - level thread remove_temp_chest( i ); - } - level.chests[ i ].zombie_cost = level.chests[ i ].old_cost; - } - } - } -} - -fire_sale_weapon_wait() //checked matches cerberus output -{ - self.zombie_cost = self.old_cost; - while ( isDefined( self.chest_user ) ) - { - wait_network_frame(); - } - self set_hint_string( self, "default_treasure_chest", self.zombie_cost ); -} - -remove_temp_chest( chest_index ) //checked partially matches cerberus output did not change -{ - while ( isDefined( level.chests[ chest_index ].chest_user ) || isDefined( level.chests[ chest_index ]._box_open ) && level.chests[ chest_index ]._box_open == 1 ) - { - wait_network_frame(); - } - if ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) - { - level.chests[ chest_index ].was_temp = 1; - level.chests[ chest_index ].zombie_cost = 10; - return; - } - for ( i = 0; i < chest_index; i++ ) - { - wait_network_frame(); - } - playfx( level._effect[ "poltergeist" ], level.chests[ chest_index ].orig_origin ); - level.chests[ chest_index ].zbarrier playsound( "zmb_box_poof_land" ); - level.chests[ chest_index ].zbarrier playsound( "zmb_couch_slam" ); - wait_network_frame(); - level.chests[ chest_index ] maps/mp/zombies/_zm_magicbox::hide_chest(); -} - -devil_dialog_delay() //checked matches cerberus output -{ - wait 1; -} - -full_ammo_on_hud( drop_item, player_team ) //checked matches cerberus output -{ - self endon( "disconnect" ); - hudelem = maps/mp/gametypes_zm/_hud_util::createserverfontstring( "objective", 2, player_team ); - hudelem maps/mp/gametypes_zm/_hud_util::setpoint( "TOP", undefined, 0, level.zombie_vars[ "zombie_timer_offset" ] - ( level.zombie_vars[ "zombie_timer_offset_interval" ] * 2 ) ); - hudelem.sort = 0.5; - hudelem.alpha = 0; - hudelem fadeovertime( 0.5 ); - hudelem.alpha = 1; - if ( isDefined( drop_item ) ) - { - hudelem.label = drop_item.hint; - } - hudelem thread full_ammo_move_hud( player_team ); -} - -full_ammo_move_hud( player_team ) //checked matches cerberus output -{ - players = get_players( player_team ); - players[ 0 ] playsoundtoteam( "zmb_full_ammo", player_team ); - wait 0.5; - move_fade_time = 1.5; - self fadeovertime( move_fade_time ); - self moveovertime( move_fade_time ); - self.y = 270; - self.alpha = 0; - wait move_fade_time; - self destroy(); -} - -check_for_rare_drop_override( pos ) //checked matches cerberus output -{ - if ( isDefined( flag( "ape_round" ) ) && flag( "ape_round" ) ) - { - return 0; - } - return 0; -} - -setup_firesale_audio() //checked changed to match cerberus output -{ - wait 2; - intercom = getentarray( "intercom", "targetname" ); - while ( 1 ) - { - while ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] == 0 ) - { - wait 0.2; - } - for ( i = 0; i < intercom.size; i++ ) - { - intercom [i ] thread play_firesale_audio(); - } - while ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] == 1 ) - { - wait 0.1; - } - level notify( "firesale_over" ); - } -} - -play_firesale_audio() //checked matches cerberus output -{ - if ( is_true( level.sndfiresalemusoff ) ) - { - return; - } - if ( is_true( level.sndannouncerisrich ) ) - { - self playloopsound( "mus_fire_sale_rich" ); - } - else - { - self playloopsound( "mus_fire_sale" ); - } - level waittill( "firesale_over" ); - self stoploopsound(); -} - -setup_bonfiresale_audio() //checked changed to match cerberus output -{ - wait 2; - intercom = getentarray( "intercom", "targetname" ); - while ( 1 ) - { - while ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] == 0 ) - { - wait 0.2; - } - for ( i = 0; i < intercom.size; i++ ) - { - intercom[ i ] thread play_bonfiresale_audio(); - } - while ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] == 1 ) - { - wait 0.1; - } - level notify( "firesale_over" ); - } -} - -play_bonfiresale_audio() //checked matches cerberus output -{ - if ( is_true( level.sndfiresalemusoff ) ) - { - return; - } - if ( is_true( level.sndannouncerisrich ) ) - { - self playloopsound( "mus_fire_sale_rich" ); - } - else - { - self playloopsound( "mus_fire_sale" ); - } - level waittill( "firesale_over" ); - self stoploopsound(); -} - -free_perk_powerup( item ) //checked changed to match cerberus output -{ - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - if ( !players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() && players[ i ].sessionstate != "spectator" ) - { - player = players[ i ]; - if ( isDefined( item.ghost_powerup ) ) - { - player maps/mp/zombies/_zm_stats::increment_client_stat( "buried_ghost_perk_acquired", 0 ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "buried_ghost_perk_acquired" ); - player notify( "player_received_ghost_round_free_perk" ); - } - free_perk = player maps/mp/zombies/_zm_perks::give_random_perk(); - if ( is_true( level.disable_free_perks_before_power ) ) - { - player thread disable_perk_before_power( free_perk ); - } - } - } -} - -disable_perk_before_power( perk ) //checked matches cerberus output -{ - self endon( "disconnect" ); - if ( isDefined( perk ) ) - { - wait 0.1; - if ( !flag( "power_on" ) ) - { - a_players = get_players(); - if ( isDefined( a_players ) && a_players.size == 1 && perk == "specialty_quickrevive" ) - { - return; - } - self perk_pause( perk ); - flag_wait( "power_on" ); - self perk_unpause( perk ); - } - } -} - -random_weapon_powerup_throttle() //checked matches cerberus output -{ - self.random_weapon_powerup_throttle = 1; - wait 0.25; - self.random_weapon_powerup_throttle = 0; -} - -random_weapon_powerup( item, player ) //checked partially matches cerberus output did not change -{ - if ( player.sessionstate == "spectator" || player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - return 0; - } - if ( !is_true( player.random_weapon_powerup_throttle ) || player isswitchingweapons() && player.is_drinking > 0 ) - { - return 0; - } - current_weapon = player getcurrentweapon(); - current_weapon_type = weaponinventorytype( current_weapon ); - if ( !is_tactical_grenade( item.weapon ) ) - { - if ( current_weapon_type != "primary" && current_weapon_type != "altmode" ) - { - return 0; - } - if ( !isDefined( level.zombie_weapons[ current_weapon ] ) && !maps/mp/zombies/_zm_weapons::is_weapon_upgraded( current_weapon ) && current_weapon_type != "altmode" ) - { - return 0; - } - } - player thread random_weapon_powerup_throttle(); - weapon_string = item.weapon; - if ( weapon_string == "knife_ballistic_zm" ) - { - weapon = player maps/mp/zombies/_zm_melee_weapon::give_ballistic_knife( weapon_string, 0 ); - } - else - { - if ( weapon_string == "knife_ballistic_upgraded_zm" ) - { - weapon = player maps/mp/zombies/_zm_melee_weapon::give_ballistic_knife( weapon_string, 1 ); - } - } - player thread maps/mp/zombies/_zm_weapons::weapon_give( weapon_string ); - return 1; -} - -bonus_points_player_powerup( item, player ) //checked matches cerberus output -{ - points = randomintrange( 1, 25 ) * 100; - if ( isDefined( level.bonus_points_powerup_override ) ) - { - points = [[ level.bonus_points_powerup_override ]](); - } - if ( !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() && player.sessionstate != "spectator" ) - { - player maps/mp/zombies/_zm_score::player_add_points( "bonus_points_powerup", points ); - } -} - -bonus_points_team_powerup( item ) //checked changed to match cerberus output -{ - points = randomintrange( 1, 25 ) * 100; - if ( isDefined( level.bonus_points_powerup_override ) ) - { - points = [[ level.bonus_points_powerup_override ]](); - } - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - if ( !players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() && players[ i ].sessionstate != "spectator" ) - { - players[ i ] maps/mp/zombies/_zm_score::player_add_points( "bonus_points_powerup", points ); - } - } -} - -lose_points_team_powerup( item ) //checked partially changed to match cerberus output -{ - points = randomintrange( 1, 25 ) * 100; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( !players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() && players[ i ].sessionstate != "spectator" ) - { - if ( ( players[ i ].score - points ) <= 0 ) - { - players[ i ] maps/mp/zombies/_zm_score::minus_to_player_score( players[ i ].score ); - i++; - continue; - } - else - { - players[ i ] maps/mp/zombies/_zm_score::minus_to_player_score( points ); - } - } - i++; - } -} - -lose_perk_powerup( item ) //checked partially matches cerberus output -{ - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - player = players[ i ]; - if ( !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() && player.sessionstate != "spectator" ) - { - player maps/mp/zombies/_zm_perks::lose_random_perk(); - } - } -} - -empty_clip_powerup( item ) //checked partially matches cerberus output -{ - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - player = players[ i ]; - if ( !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() && player.sessionstate != "spectator" ) - { - weapon = player getcurrentweapon(); - player setweaponammoclip( weapon, 0 ); - } - } -} - -minigun_weapon_powerup( ent_player, time ) //checked matches cerberus output -{ - ent_player endon( "disconnect" ); - ent_player endon( "death" ); - ent_player endon( "player_downed" ); - if ( !isDefined( time ) ) - { - time = 30; - } - if ( isDefined( level._minigun_time_override ) ) - { - time = level._minigun_time_override; - } - if ( ent_player.zombie_vars[ "zombie_powerup_minigun_on" ] || ent_player getcurrentweapon() == "minigun_zm" && is_true( ent_player.has_minigun ) ) - { - if ( ent_player.zombie_vars[ "zombie_powerup_minigun_time" ] < time ) - { - ent_player.zombie_vars[ "zombie_powerup_minigun_time" ] = time; - } - return; - } - ent_player notify( "replace_weapon_powerup" ); - ent_player._show_solo_hud = 1; - level._zombie_minigun_powerup_last_stand_func = ::minigun_watch_gunner_downed; - ent_player.has_minigun = 1; - ent_player.has_powerup_weapon = 1; - ent_player increment_is_drinking(); - ent_player._zombie_gun_before_minigun = ent_player getcurrentweapon(); - ent_player giveweapon( "minigun_zm" ); - ent_player switchtoweapon( "minigun_zm" ); - ent_player.zombie_vars[ "zombie_powerup_minigun_on" ] = 1; - level thread minigun_weapon_powerup_countdown( ent_player, "minigun_time_over", time ); - level thread minigun_weapon_powerup_replace( ent_player, "minigun_time_over" ); -} - -minigun_weapon_powerup_countdown( ent_player, str_gun_return_notify, time ) //checked matches cerberus output -{ - ent_player endon( "death" ); - ent_player endon( "disconnect" ); - ent_player endon( "player_downed" ); - ent_player endon( str_gun_return_notify ); - ent_player endon( "replace_weapon_powerup" ); - setclientsysstate( "levelNotify", "minis", ent_player ); - ent_player.zombie_vars[ "zombie_powerup_minigun_time" ] = time; - while ( ent_player.zombie_vars[ "zombie_powerup_minigun_time" ] > 0 ) - { - wait 0.05; - ent_player.zombie_vars[ "zombie_powerup_minigun_time" ] -= 0.05; - } - setclientsysstate( "levelNotify", "minie", ent_player ); - level thread minigun_weapon_powerup_remove( ent_player, str_gun_return_notify ); -} - -minigun_weapon_powerup_replace( ent_player, str_gun_return_notify ) //checked matches cerberus output -{ - ent_player endon( "death" ); - ent_player endon( "disconnect" ); - ent_player endon( "player_downed" ); - ent_player endon( str_gun_return_notify ); - ent_player waittill( "replace_weapon_powerup" ); - ent_player takeweapon( "minigun_zm" ); - ent_player.zombie_vars[ "zombie_powerup_minigun_on" ] = 0; - ent_player.has_minigun = 0; - ent_player decrement_is_drinking(); -} - -minigun_weapon_powerup_remove( ent_player, str_gun_return_notify ) //checked partially matches cerberus output did not change -{ - ent_player endon( "death" ); - ent_player endon( "player_downed" ); - ent_player takeweapon( "minigun_zm" ); - ent_player.zombie_vars[ "zombie_powerup_minigun_on" ] = 0; - ent_player._show_solo_hud = 0; - ent_player.has_minigun = 0; - ent_player.has_powerup_weapon = 0; - ent_player notify( str_gun_return_notify ); - ent_player decrement_is_drinking(); - while ( isDefined( ent_player._zombie_gun_before_minigun ) ) - { - player_weapons = ent_player getweaponslistprimaries(); - - for ( i = 0; i < player_weapons.size; i++ ) - { - if ( player_weapons[ i ] == ent_player._zombie_gun_before_minigun ) - { - ent_player switchtoweapon( ent_player._zombie_gun_before_minigun ); - return; - } - } - } - primaryweapons = ent_player getweaponslistprimaries(); - if ( primaryweapons.size > 0 ) - { - ent_player switchtoweapon( primaryweapons[ 0 ] ); - } - else - { - allweapons = ent_player getweaponslist( 1 ); - for ( i = 0; i < allweapons.size; i++ ) - { - if ( is_melee_weapon( allweapons[ i ] ) ) - { - ent_player switchtoweapon( allweapons[ i ] ); - return; - } - } - } -} - -minigun_weapon_powerup_off() //checked matches cerberus output -{ - self.zombie_vars[ "zombie_powerup_minigun_time" ] = 0; -} - -minigun_watch_gunner_downed() //checked partially matches cerberus output did not change -{ - if ( !is_true( self.has_minigun ) ) - { - return; - } - primaryweapons = self getweaponslistprimaries(); - for ( i = 0; i < primaryweapons.size; i++ ) - { - if ( primaryweapons[ i ] == "minigun_zm" ) - { - self takeweapon( "minigun_zm" ); - } - } - self notify( "minigun_time_over" ); - self.zombie_vars[ "zombie_powerup_minigun_on" ] = 0; - self._show_solo_hud = 0; - wait 0.05; - self.has_minigun = 0; - self.has_powerup_weapon = 0; -} - -tesla_weapon_powerup( ent_player, time ) //checked changed to match cerberus output -{ - ent_player endon( "disconnect" ); - ent_player endon( "death" ); - ent_player endon( "player_downed" ); - if ( !isDefined( time ) ) - { - time = 11; - } - if ( ent_player.zombie_vars[ "zombie_powerup_tesla_on" ] && ent_player getcurrentweapon() == "tesla_gun_zm" || is_true( ent_player.has_tesla ) ) - { - ent_player givemaxammo( "tesla_gun_zm" ); - if ( ent_player.zombie_vars[ "zombie_powerup_tesla_time" ] < time ) - { - ent_player.zombie_vars[ "zombie_powerup_tesla_time" ] = time; - } - return; - } - ent_player notify( "replace_weapon_powerup" ); - ent_player._show_solo_hud = 1; - level._zombie_tesla_powerup_last_stand_func = ::tesla_watch_gunner_downed; - ent_player.has_tesla = 1; - ent_player.has_powerup_weapon = 1; - ent_player increment_is_drinking(); - ent_player._zombie_gun_before_tesla = ent_player getcurrentweapon(); - ent_player giveweapon( "tesla_gun_zm" ); - ent_player givemaxammo( "tesla_gun_zm" ); - ent_player switchtoweapon( "tesla_gun_zm" ); - ent_player.zombie_vars[ "zombie_powerup_tesla_on" ] = 1; - level thread tesla_weapon_powerup_countdown( ent_player, "tesla_time_over", time ); - level thread tesla_weapon_powerup_replace( ent_player, "tesla_time_over" ); -} - -tesla_weapon_powerup_countdown( ent_player, str_gun_return_notify, time ) //checked changed to match cerberus output -{ - ent_player endon( "death" ); - ent_player endon( "player_downed" ); - ent_player endon( str_gun_return_notify ); - ent_player endon( "replace_weapon_powerup" ); - setclientsysstate( "levelNotify", "minis", ent_player ); - ent_player.zombie_vars[ "zombie_powerup_tesla_time" ] = time; - while ( 1 ) - { - ent_player waittill_any( "weapon_fired", "reload", "zmb_max_ammo" ); - if ( !ent_player getweaponammostock( "tesla_gun_zm" ) ) - { - clip_count = ent_player getweaponammoclip( "tesla_gun_zm" ); - if ( !clip_count ) - { - break; - } - else if ( clip_count == 1 ) - { - ent_player.zombie_vars[ "zombie_powerup_tesla_time" ] = 1; - } - else if ( clip_count == 3 ) - { - ent_player.zombie_vars[ "zombie_powerup_tesla_time" ] = 6; - } - } - else - { - ent_player.zombie_vars[ "zombie_powerup_tesla_time" ] = 11; - } - } - setclientsysstate( "levelNotify", "minie", ent_player ); - level thread tesla_weapon_powerup_remove( ent_player, str_gun_return_notify ); -} - -tesla_weapon_powerup_replace( ent_player, str_gun_return_notify ) //checked matches cerberus output -{ - ent_player endon( "death" ); - ent_player endon( "disconnect" ); - ent_player endon( "player_downed" ); - ent_player endon( str_gun_return_notify ); - ent_player waittill( "replace_weapon_powerup" ); - ent_player takeweapon( "tesla_gun_zm" ); - ent_player.zombie_vars[ "zombie_powerup_tesla_on" ] = 0; - ent_player.has_tesla = 0; - ent_player decrement_is_drinking(); -} - -tesla_weapon_powerup_remove( ent_player, str_gun_return_notify ) //checked changed to match cerberus output -{ - ent_player endon( "death" ); - ent_player endon( "player_downed" ); - ent_player takeweapon( "tesla_gun_zm" ); - ent_player.zombie_vars[ "zombie_powerup_tesla_on" ] = 0; - ent_player._show_solo_hud = 0; - ent_player.has_tesla = 0; - ent_player.has_powerup_weapon = 0; - ent_player notify( str_gun_return_notify ); - ent_player decrement_is_drinking(); - if ( isDefined( ent_player._zombie_gun_before_tesla ) ) - { - player_weapons = ent_player getweaponslistprimaries(); - for ( i = 0; i < player_weapons.size; i++ ) - { - if ( player_weapons[ i ] == ent_player._zombie_gun_before_tesla ) - { - ent_player switchtoweapon( ent_player._zombie_gun_before_tesla ); - return; - } - } - } - primaryweapons = ent_player getweaponslistprimaries(); - if ( primaryweapons.size > 0 ) - { - ent_player switchtoweapon( primaryweapons[ 0 ] ); - } - allweapons = ent_player getweaponslist( 1 ); - for ( i = 0; i < allweapons.size; i++ ) - { - if ( is_melee_weapon( allweapons[ i ] ) ) - { - ent_player switchtoweapon( allweapons[ i ] ); - return; - } - } -} - -tesla_weapon_powerup_off() //checked matches cerberus output -{ - self.zombie_vars[ "zombie_powerup_tesla_time" ] = 0; -} - -tesla_watch_gunner_downed() //checked changed to match cerberus output -{ - if ( !is_true( self.has_tesla ) ) - { - return; - } - primaryweapons = self getweaponslistprimaries(); - for ( i = 0; i < primaryweapons.size; i++ ) - { - if ( primaryweapons[ i ] == "tesla_gun_zm" ) - { - self takeweapon( "tesla_gun_zm" ); - } - } - self notify( "tesla_time_over" ); - self.zombie_vars[ "zombie_powerup_tesla_on" ] = 0; - self._show_solo_hud = 0; - wait 0.05; - self.has_tesla = 0; - self.has_powerup_weapon = 0; -} - -tesla_powerup_active() //checked changed to match cerberus output -{ - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - if ( players[ i ].zombie_vars[ "zombie_powerup_tesla_on" ] ) - { - return 1; - } - } - return 0; -} - -print_powerup_drop( powerup, type ) //devcall only, deleted -{ - /* - /# - if(!isdefined(level.powerup_drop_time)) - { - level.powerup_drop_time = 0; - level.powerup_random_count = 0; - level.powerup_score_count = 0; - } - time = GetTime() - level.powerup_drop_time * 0.001; - level.powerup_drop_time = GetTime(); - if(type == "random") - { - level.powerup_random_count++; - } - else - { - level.powerup_score_count++; - } - println("========== POWER UP DROPPED =========="); - println("DROPPED: " + powerup); - println("HOW IT DROPPED: " + type); - println("--------------------"); - println("Drop Time: " + time); - println("Random Powerup Count: " + level.powerup_random_count); - println("Random Powerup Count: " + level.powerup_score_count); - println("======================================"); - #/ - */ -} - -register_carpenter_node( node, callback ) //checked matches cerberus output -{ - if ( !isDefined( level._additional_carpenter_nodes ) ) - { - level._additional_carpenter_nodes = []; - } - node._post_carpenter_callback = callback; - level._additional_carpenter_nodes[ level._additional_carpenter_nodes.size ] = node; -} - -start_carpenter_new( origin ) //checked partially changed to match cerberus output -{ - level.carpenter_powerup_active = 1; - window_boards = getstructarray( "exterior_goal", "targetname" ); - if ( isDefined( level._additional_carpenter_nodes ) ) - { - window_boards = arraycombine( window_boards, level._additional_carpenter_nodes, 0, 0 ); - } - carp_ent = spawn( "script_origin", ( 0, 0, 0 ) ); - carp_ent playloopsound( "evt_carpenter" ); - boards_near_players = get_near_boards( window_boards ); - boards_far_from_players = get_far_boards( window_boards ); - level repair_far_boards( boards_far_from_players, maps/mp/zombies/_zm_powerups::is_carpenter_boards_upgraded() ); - - i = 0; - while ( i < boards_near_players.size ) - { - window = boards_near_players[ i ]; - num_chunks_checked = 0; - last_repaired_chunk = undefined; - while ( 1 ) - { - if ( all_chunks_intact( window, window.barrier_chunks ) ) - { - break; - } - chunk = get_random_destroyed_chunk( window, window.barrier_chunks ); - if ( !isDefined( chunk ) ) - { - break; - } - window thread maps/mp/zombies/_zm_blockers::replace_chunk( window, chunk, undefined, maps/mp/zombies/_zm_powerups::is_carpenter_boards_upgraded(), 1 ); - last_repaired_chunk = chunk; - if ( isDefined( window.clip ) ) - { - window.clip enable_trigger(); - window.clip disconnectpaths(); - } - else - { - blocker_disconnect_paths( window.neg_start, window.neg_end ); - } - wait_network_frame(); - num_chunks_checked++; - if ( num_chunks_checked >= 20 ) - { - break; - } - } - if ( isDefined( window.zbarrier ) ) - { - if ( isDefined( last_repaired_chunk ) ) - { - while ( window.zbarrier getzbarrierpiecestate( last_repaired_chunk ) == "closing" ) - { - wait 0.05; - } - if ( isDefined( window._post_carpenter_callback ) ) - { - window [[ window._post_carpenter_callback ]](); - } - } - i++; - continue; - } - while ( isDefined( last_repaired_chunk ) && last_repaired_chunk.state == "mid_repair" ) - { - wait 0.05; - } - i++; - } - carp_ent stoploopsound( 1 ); - carp_ent playsoundwithnotify( "evt_carpenter_end", "sound_done" ); - carp_ent waittill( "sound_done" ); - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - players[ i ] maps/mp/zombies/_zm_score::player_add_points( "carpenter_powerup", 200 ); - } - carp_ent delete(); - level notify( "carpenter_finished" ); - level.carpenter_powerup_active = undefined; -} - -is_carpenter_boards_upgraded() //checked matches cerberus output -{ - if ( isDefined( level.pers_carpenter_boards_active ) && level.pers_carpenter_boards_active == 1 ) - { - return 1; - } - return 0; -} - -get_near_boards( windows ) //checked changed to match cerberus output -{ - players = get_players(); - boards_near_players = []; - for ( j = 0; j < windows.size; j++ ) - { - close = 0; - for ( i = 0; i < players.size; i++ ) - { - origin = undefined; - if ( isdefined( windows[ j ].zbarrier ) ) - { - origin = windows[ j ].zbarrier.origin; - } - else - { - origin = windows[ j ].origin; - } - if ( distancesquared( players[ i ].origin, origin ) <= level.board_repair_distance_squared ) - { - close = 1; - break; - } - } - if ( close ) - { - boards_near_players[ boards_near_players.size ] = windows[ j ]; - } - } - return boards_near_players; -} - -get_far_boards( windows ) //checked changed to match cerberus output -{ - players = get_players(); - boards_far_from_players = []; - for ( j = 0; j < windows.size; j++ ) - { - close = 0; - for ( i = 0; i < players.size; i++ ) - { - origin = undefined; - if ( isdefined( windows[ j ].zbarrier ) ) - { - origin = windows[ j ].zbarrier.origin; - } - else - { - origin = windows[ j ].origin; - } - if ( distancesquared( players[ i ].origin, origin ) >= level.board_repair_distance_squared ) - { - close = 1; - break; - } - } - if ( close ) - { - boards_far_from_players[ boards_far_from_players.size ] = windows[ j ]; - } - } - return boards_far_from_players; -} - -repair_far_boards( barriers, upgrade ) //checked changed to match cerberus output -{ - i = 0; - while ( i < barriers.size ) - { - barrier = barriers[ i ]; - if ( all_chunks_intact( barrier, barrier.barrier_chunks ) ) - { - i++; - continue; - } - if ( isdefined( barrier.zbarrier ) ) - { - a_pieces = barrier.zbarrier getzbarrierpieceindicesinstate( "open" ); - if ( isdefined( a_pieces ) ) - { - xx = 0; - while ( xx < a_pieces.size ) - { - chunk = a_pieces[ xx ]; - if ( upgrade ) - { - barrier.zbarrier zbarrierpieceuseupgradedmodel( chunk ); - barrier.zbarrier.chunk_health[ chunk ] = barrier.zbarrier getupgradedpiecenumlives( chunk ); - xx++; - continue; - } - barrier.zbarrier zbarrierpieceusedefaultmodel( chunk ); - barrier.zbarrier.chunk_health[ chunk ] = 0; - xx++; - } - } - for ( x = 0; x < barrier.zbarrier getnumzbarrierpieces(); x++ ) - { - barrier.zbarrier setzbarrierpiecestate( x, "closed" ); - barrier.zbarrier showzbarrierpiece( x ); - } - } - else if ( isdefined( barrier.clip ) ) - { - barrier.clip enable_trigger(); - barrier.clip disconnectpaths(); - } - else - { - blocker_disconnect_paths( barrier.neg_start, barrier.neg_end ); - } - if ( i % 4 == 0 ) - { - wait_network_frame(); - } - i++; - } -} - -func_should_never_drop() //checked matches cerberus output -{ - return 0; -} - -func_should_always_drop() //checked matches cerberus output -{ - return 1; -} - -func_should_drop_minigun() //checked matches cerberus output -{ - if ( minigun_no_drop() ) - { - return 0; - } - return 1; -} - -func_should_drop_carpenter() //checked matches cerberus output -{ - if ( get_num_window_destroyed() < 5 ) - { - return 0; - } - return 1; -} - -func_should_drop_fire_sale() //checked partially changed to match cerberus output -{ - if ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] == 1 || level.chest_moves < 1 || is_true( level.disable_firesale_drop ) ) - { - return 0; - } - return 1; -} - -powerup_move() //checked partially changed to match cerberus output -{ - self endon( "powerup_timedout" ); - self endon( "powerup_grabbed" ); - drag_speed = 75; - while ( 1 ) - { - self waittill( "move_powerup", moveto, distance ); - drag_vector = moveto - self.origin; - range_squared = lengthsquared( drag_vector ); - if ( range_squared > distance * distance ) - { - drag_vector = vectornormalize( drag_vector ); - drag_vector = distance * drag_vector; - moveto = self.origin + drag_vector; - } - self.origin = moveto; - } -} - -powerup_emp() //checked matches cerberus output -{ - self endon( "powerup_timedout" ); - self endon( "powerup_grabbed" ); - if ( !should_watch_for_emp() ) - { - return; - } - while ( 1 ) - { - level waittill( "emp_detonate", origin, radius ); - if ( distancesquared( origin, self.origin ) < ( radius * radius ) ) - { - playfx( level._effect[ "powerup_off" ], self.origin ); - self thread powerup_delete_delayed(); - self notify( "powerup_timedout" ); - } - } -} - -get_powerups( origin, radius ) //checked changed to match cerberus output -{ - if ( isDefined( origin ) && isDefined( radius ) ) - { - powerups = []; - foreach ( powerup in level.active_powerups ) - { - if ( distancesquared( origin, powerup.origin ) < radius * radius ) - { - powerups[ powerups.size ] = powerup; - } - } - return powerups; - } - return level.active_powerups; -} - -should_award_stat( powerup_name ) //checked changed to matched cerberus output -{ - if ( powerup_name == "teller_withdrawl" || powerup_name == "blue_monkey" || powerup_name == "free_perk" || powerup_name == "bonus_points_player" ) - { - return 0; - } - if ( isDefined( level.statless_powerups ) && isDefined( level.statless_powerups[ powerup_name ] ) ) - { - return 0; - } - return 1; -} - -teller_withdrawl( powerup, player ) //checked matches cerberus output -{ - player maps/mp/zombies/_zm_score::add_to_player_score( powerup.value ); -} - - - - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_score.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_score.gsc deleted file mode 100644 index 91101e7..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_score.gsc +++ /dev/null @@ -1,393 +0,0 @@ -#include maps/mp/zombies/_zm_pers_upgrades_functions; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - level.score_cf_info = []; - score_cf_register_info( "damage", 1, 7 ); - score_cf_register_info( "death_normal", 1, 3 ); - score_cf_register_info( "death_torso", 1, 3 ); - score_cf_register_info( "death_neck", 1, 3 ); - score_cf_register_info( "death_head", 1, 3 ); - score_cf_register_info( "death_melee", 1, 3 ); - if ( !level.createfx_enabled ) - { - registerclientfield( "allplayers", "score_cf_double_points_active", 1, 1, "int" ); - } -} - -score_cf_register_info( name, version, max_count ) //checked matches cerberus output -{ - if ( level.createfx_enabled ) - { - return; - } - info = spawnstruct(); - info.name = name; - info.cf_field = "score_cf_" + name; - info.version = version; - info.max_count = max_count; - info.bit_count = getminbitcountfornum( max_count ); - info.players = []; - level.score_cf_info[ name ] = info; - registerclientfield( "allplayers", info.cf_field, info.version, info.bit_count, "int" ); -} - -score_cf_increment_info( name ) //checked matches cerberus output -{ - info = level.score_cf_info[ name ]; - player_ent_index = self getentitynumber(); - if ( !isDefined( info.players[ player_ent_index ] ) ) - { - info.players[ player_ent_index ] = 0; - } - info.players[ player_ent_index ]++; - if ( info.players[ player_ent_index ] > info.max_count ) - { - info.players[ player_ent_index ] = 0; - } - self setclientfield( info.cf_field, info.players[ player_ent_index ] ); -} - -score_cf_monitor() //checked changed to match cerberus output -{ - if ( level.createfx_enabled ) - { - return; - } - info_keys = getarraykeys( level.score_cf_info ); - while ( 1 ) - { - wait_network_frame(); - players = get_players(); - for ( player_index = 0; player_index < players.size; player_index++ ) - { - player = players[ player_index ]; - player_ent_index = player getentitynumber(); - info_index = 0; - for ( info_index = 0; info_index < info_keys.size; info_index++ ) - { - info = level.score_cf_info[ info_keys[ info_index ] ]; - info.players[ player_ent_index ] = 0; - player setclientfield( info.cf_field, 0 ); - } - } - } -} - -player_add_points( event, mod, hit_location, is_dog, zombie_team, damage_weapon ) //checked changed to match cerberus output -{ - if ( level.intermission ) - { - return; - } - if ( !is_player_valid( self ) ) - { - return; - } - player_points = 0; - team_points = 0; - multiplier = get_points_multiplier( self ); - switch( event ) - { - case "death": - player_points = get_zombie_death_player_points(); - team_points = get_zombie_death_team_points(); - points = self player_add_points_kill_bonus( mod, hit_location ); - if ( level.zombie_vars[ self.team ][ "zombie_powerup_insta_kill_on" ] == 1 && mod == "MOD_UNKNOWN" ) - { - points *= 2; - } - player_points += points; - if ( team_points > 0 ) - { - team_points += points; - } - if ( mod == "MOD_GRENADE" || mod == "MOD_GRENADE_SPLASH" ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "grenade_kills" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "grenade_kills" ); - } - break; - case "ballistic_knife_death": - player_points = get_zombie_death_player_points() + level.zombie_vars[ "zombie_score_bonus_melee" ]; - self score_cf_increment_info( "death_melee" ); - break; - case "damage_light": - player_points = level.zombie_vars[ "zombie_score_damage_light" ]; - self score_cf_increment_info( "damage" ); - break; - case "damage": - player_points = level.zombie_vars[ "zombie_score_damage_normal" ]; - self score_cf_increment_info( "damage" ); - break; - case "damage_ads": - player_points = int( level.zombie_vars[ "zombie_score_damage_normal" ] * 1.25 ); - self score_cf_increment_info( "damage" ); - break; - case "carpenter_powerup": - case "rebuild_board": - player_points = mod; - break; - case "bonus_points_powerup": - player_points = mod; - break; - case "nuke_powerup": - player_points = mod; - team_points = mod; - break; - case "jetgun_fling": - case "riotshield_fling": - case "thundergun_fling": - player_points = mod; - break; - case "hacker_transfer": - player_points = mod; - break; - case "reviver": - player_points = mod; - break; - case "vulture": - player_points = mod; - break; - case "build_wallbuy": - player_points = mod; - break; - default: - /* -/# - assert( 0, "Unknown point event" ); -#/ - */ - break; - } - player_points = multiplier * round_up_score( player_points, 5 ); - team_points = multiplier * round_up_score( team_points, 5 ); - if ( isDefined( self.point_split_receiver ) && event == "death" || isDefined( self.point_split_receiver ) && event == "ballistic_knife_death" ) - { - split_player_points = player_points - round_up_score( player_points * self.point_split_keep_percent, 10 ); - self.point_split_receiver add_to_player_score( split_player_points ); - player_points -= split_player_points; - } - if ( is_true( level.pers_upgrade_pistol_points ) ) - { - player_points = self maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_pistol_points_set_score( player_points, event, mod, damage_weapon ); - } - self add_to_player_score( player_points ); - self.pers[ "score" ] = self.score; - if ( isDefined( level._game_module_point_adjustment ) ) - { - level [[ level._game_module_point_adjustment ]]( self, zombie_team, player_points ); - } -} - -get_points_multiplier( player ) //checked matches cerberus output -{ - multiplier = level.zombie_vars[ player.team ][ "zombie_point_scalar" ]; - if ( isDefined( level.current_game_module ) && level.current_game_module == 2 ) - { - if ( isDefined( level._race_team_double_points ) && level._race_team_double_points == player._race_team ) - { - return multiplier; - } - else - { - return 1; - } - } - return multiplier; -} - -get_zombie_death_player_points() //checked matches cerberus output -{ - players = get_players(); - if ( players.size == 1 ) - { - points = level.zombie_vars[ "zombie_score_kill_1player" ]; - } - else if ( players.size == 2 ) - { - points = level.zombie_vars[ "zombie_score_kill_2player" ]; - } - else if ( players.size == 3 ) - { - points = level.zombie_vars[ "zombie_score_kill_3player" ]; - } - else - { - points = level.zombie_vars[ "zombie_score_kill_4player" ]; - } - return points; -} - -get_zombie_death_team_points() //checked matches cerberus output -{ - players = get_players(); - if ( players.size == 1 ) - { - points = level.zombie_vars[ "zombie_score_kill_1p_team" ]; - } - else if ( players.size == 2 ) - { - points = level.zombie_vars[ "zombie_score_kill_2p_team" ]; - } - else if ( players.size == 3 ) - { - points = level.zombie_vars[ "zombie_score_kill_3p_team" ]; - } - else - { - points = level.zombie_vars[ "zombie_score_kill_4p_team" ]; - } - return points; -} - -player_add_points_kill_bonus( mod, hit_location ) //checked matches cerberus output -{ - if ( mod == "MOD_MELEE" ) - { - self score_cf_increment_info( "death_melee" ); - return level.zombie_vars[ "zombie_score_bonus_melee" ]; - } - if ( mod == "MOD_BURNED" ) - { - self score_cf_increment_info( "death_torso" ); - return level.zombie_vars[ "zombie_score_bonus_burn" ]; - } - score = 0; - if ( isDefined( hit_location ) ) - { - switch( hit_location ) - { - case "head": - case "helmet": - self score_cf_increment_info( "death_head" ); - score = level.zombie_vars[ "zombie_score_bonus_head" ]; - break; - case "neck": - self score_cf_increment_info( "death_neck" ); - score = level.zombie_vars[ "zombie_score_bonus_neck" ]; - break; - case "torso_lower": - case "torso_upper": - self score_cf_increment_info( "death_torso" ); - score = level.zombie_vars[ "zombie_score_bonus_torso" ]; - break; - default: - self score_cf_increment_info( "death_normal" ); - break; - } - } - return score; -} - -player_reduce_points( event, mod, hit_location ) //checked matches cerberus output -{ - if ( level.intermission ) - { - return; - } - points = 0; - switch( event ) - { - case "no_revive_penalty": - percent = level.zombie_vars[ "penalty_no_revive" ]; - points = self.score * percent; - break; - case "died": - percent = level.zombie_vars[ "penalty_died" ]; - points = self.score * percent; - break; - case "downed": - percent = level.zombie_vars[ "penalty_downed" ]; - self notify( "I_am_down" ); - points = self.score * percent; - self.score_lost_when_downed = round_up_to_ten( int( points ) ); - break; - default: - /* -/# - assert( 0, "Unknown point event" ); -#/ - */ - break; - } - points = self.score - round_up_to_ten( int( points ) ); - if ( points < 0 ) - { - points = 0; - } - self.score = points; -} - -add_to_player_score( points, add_to_total ) //checked matches cerberus output -{ - if ( !isDefined( add_to_total ) ) - { - add_to_total = 1; - } - if ( !isDefined( points ) || level.intermission ) - { - return; - } - self.score += points; - self.pers[ "score" ] = self.score; - if ( add_to_total ) - { - self.score_total += points; - } - self incrementplayerstat( "score", points ); -} - -minus_to_player_score( points, ignore_double_points_upgrade ) //checked matches cerberus output -{ - if ( !isDefined( points ) || level.intermission ) - { - return; - } - if ( !is_true( ignore_double_points_upgrade ) ) - { - if ( is_true( level.pers_upgrade_double_points ) ) - { - points = maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_double_points_set_score( points ); - } - } - self.score -= points; - self.pers[ "score" ] = self.score; - level notify( "spent_points" ); -} - -add_to_team_score( points ) //checked matches cerberus output -{ -} - -minus_to_team_score( points ) //checked matches cerberus output -{ -} - -player_died_penalty() //checked changed to match cerberus output -{ - players = get_players( self.team ); - for ( i = 0; i < players.size; i++ ) - { - if ( players[ i ] != self && !players[ i ].is_zombie ) - { - players[ i ] player_reduce_points( "no_revive_penalty" ); - } - } -} - -player_downed_penalty() //checked matches cerberus output -{ -/* -/# - println( "ZM >> LAST STAND - player_downed_penalty " ); -#/ -*/ - self player_reduce_points( "downed" ); -} - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_server_throttle.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_server_throttle.gsc deleted file mode 100644 index a00508d..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_server_throttle.gsc +++ /dev/null @@ -1,100 +0,0 @@ -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; - -server_choke_init( id, max ) -{ - if ( !isDefined( level.zombie_server_choke_ids_max ) ) - { - level.zombie_server_choke_ids_max = []; - level.zombie_server_choke_ids_count = []; - } - level.zombie_server_choke_ids_max[ id ] = max; - level.zombie_server_choke_ids_count[ id ] = 0; - level thread server_choke_thread( id ); -} - -server_choke_thread( id ) -{ - while ( 1 ) - { - wait 0.05; - level.zombie_server_choke_ids_count[ id ] = 0; - } -} - -server_choke_safe( id ) -{ - return level.zombie_server_choke_ids_count[ id ] < level.zombie_server_choke_ids_max[ id ]; -} - -server_choke_action( id, choke_action, arg1, arg2, arg3 ) -{ -/* -/# - assert( isDefined( level.zombie_server_choke_ids_max[ id ] ), "server Choke: " + id + " undefined" ); -#/ -*/ - while ( !server_choke_safe( id ) ) - { - wait 0.05; - } - level.zombie_server_choke_ids_count[ id ]++; - if ( !isDefined( arg1 ) ) - { - return [[ choke_action ]](); - } - if ( !isDefined( arg2 ) ) - { - return [[ choke_action ]]( arg1 ); - } - if ( !isDefined( arg3 ) ) - { - return [[ choke_action ]]( arg1, arg2 ); - } - return [[ choke_action ]]( arg1, arg2, arg3 ); -} - -server_entity_valid( entity ) -{ - if ( !isDefined( entity ) ) - { - return 0; - } - return 1; -} - -server_safe_init( id, max ) -{ - if ( !isDefined( level.zombie_server_choke_ids_max ) || !isDefined( level.zombie_server_choke_ids_max[ id ] ) ) - { - server_choke_init( id, max ); - } - /* -/# - assert( max == level.zombie_server_choke_ids_max[ id ] ); -#/ - */ -} - -_server_safe_ground_trace( pos ) -{ - return groundpos( pos ); -} - -server_safe_ground_trace( id, max, origin ) -{ - server_safe_init( id, max ); - return server_choke_action( id, ::_server_safe_ground_trace, origin ); -} - -_server_safe_ground_trace_ignore_water( pos ) -{ - return groundpos_ignore_water( pos ); -} - -server_safe_ground_trace_ignore_water( id, max, origin ) -{ - server_safe_init( id, max ); - return server_choke_action( id, ::_server_safe_ground_trace_ignore_water, origin ); -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_sidequests.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_sidequests.gsc deleted file mode 100644 index 6283a0e..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_sidequests.gsc +++ /dev/null @@ -1,1120 +0,0 @@ -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init_sidequests() //checked matches cerberus output -{ - level._sidequest_icons_base_x = -225; - level._zombie_sidequests = []; - /* -/# - level thread sidequest_debug(); -#/ - */ -} - -is_sidequest_allowed( a_gametypes ) //checked changed to match cerberus output -{ - if ( isDefined( level.gamedifficulty ) && level.gamedifficulty == 0 ) - { - return 0; - } - b_is_gametype_active = 0; - if ( !isarray( a_gametypes ) ) - { - a_gametypes = array( a_gametypes ); - } - for ( i = 0; i < a_gametypes.size; i++ ) - { - if ( getDvar( "g_gametype" ) == a_gametypes[ i ] ) - { - b_is_gametype_active = 1; - } - } - return b_is_gametype_active; -} - -sidequest_debug() //checked matches cerberus output -{ - /* -/# - //dvar name is unknown - if ( getDvar( #"A7AC338D" ) != "1" ) - { - return; - } - while ( 1 ) - { - wait 1; -#/ - } - */ -} - -damager_trigger_thread( dam_types, trigger_func ) //checked changed to match cerberus output -{ - while ( 1 ) - { - self waittill( "damage", amount, attacker, dir, point, type ); - self.dam_amount = amount; - self.attacker = attacker; - self.dam_dir = dir; - self.dam_point = point; - self.dam_type = type; - for ( i = 0; i < dam_types.size; i++ ) - { - if ( type == dam_types[ i ] ) - { - break; - } - } - } - if ( isDefined( trigger_func ) ) - { - self [[ trigger_func ]](); - } - self notify( "triggered" ); -} - -damage_trigger_thread() //checked matches cerberus output -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( "damage" ); - self.owner_ent notify( "triggered" ); - } -} - -sidequest_uses_teleportation( name ) //checked matches cerberus output -{ - level._zombie_sidequests[ name ].uses_teleportation = 1; -} - -declare_sidequest_icon( sidequest_name, icon_name, shader_name ) //checked matches cerberus output -{ - sidequest = level._zombie_sidequests[ sidequest_name ]; - sidequest.icons[ icon_name ] = shader_name; -} - -create_icon( shader_name, x ) //checked matches cerberus output -{ - icon = create_simple_hud( self ); - icon.foreground = 1; - icon.sort = 2; - icon.hidewheninmenu = 0; - icon.alignx = "center"; - icon.aligny = "bottom"; - icon.horzalign = "user_right"; - icon.vertalign = "user_bottom"; - icon.x = x; - icon.y = 0; - icon.alpha = 1; - icon setshader( shader_name, 32, 32 ); - return icon; -} - -add_sidequest_icon( sidequest_name, icon_name ) //checked matches cerberus output -{ - if ( !isDefined( self.sidequest_icons ) ) - { - self.sidequest_icons = []; - } - if ( isDefined( self.sidequest_icons[ icon_name ] ) ) - { - return; - } - sq = level._zombie_sidequests[ sidequest_name ]; - base_x = level._sidequest_icons_base_x; - if ( isDefined( level._zombiemode_sidequest_icon_offset ) ) - { - base_x += level._zombiemode_sidequest_icon_offset; - } - self.sidequest_icons[ icon_name ] = self create_icon( sq.icons[ icon_name ], base_x + self.sidequest_icons.size * 34 ); -} - -remove_sidequest_icon( sidequest_name, icon_name ) //checked changed to match cerberus output -{ - if ( !isDefined( self.sidequest_icons ) ) - { - return; - } - if ( !isDefined( self.sidequest_icons[ icon_name ] ) ) - { - return; - } - icon = self.sidequest_icons[ icon_name ]; - new_array = []; - keys = getarraykeys( self.sidequest_icons ); - for ( i = 0; i < keys.size; i++ ) - { - if ( keys[ i ] != icon_name ) - { - new_array[ keys[ i ] ] = self.sidequest_icons[ keys[ i ] ]; - } - } - self.sidequest_icons = new_array; - icon destroy(); - keys = getarraykeys( self.sidequest_icons ); - base_x = level._sidequest_icons_base_x; - if ( isDefined( level._zombiemode_sidequest_icon_offset ) ) - { - base_x += level._zombiemode_sidequest_icon_offset; - } - for ( i = 0; i < keys.size; i++ ) - { - self.sidequest_icons[ keys[ i ] ].x = base_x + i * 34; - } -} - -declare_sidequest( name, init_func, logic_func, complete_func, generic_stage_start_func, generic_stage_end_func ) //checked matches cerberus output -{ - if ( !isDefined( level._zombie_sidequests ) ) - { - init_sidequests(); - } - /* -/# - if ( isDefined( level._zombie_sidequests[ name ] ) ) - { - println( "*** ERROR: Attempt to re-declare sidequest with name " + name ); - return; -#/ - } - */ - sq = spawnstruct(); - sq.name = name; - sq.stages = []; - sq.last_completed_stage = -1; - sq.active_stage = -1; - sq.sidequest_complete = 0; - sq.init_func = init_func; - sq.logic_func = logic_func; - sq.complete_func = complete_func; - sq.generic_stage_start_func = generic_stage_start_func; - sq.generic_stage_end_func = generic_stage_end_func; - sq.assets = []; - sq.uses_teleportation = 0; - sq.active_assets = []; - sq.icons = []; - sq.num_reps = 0; - level._zombie_sidequests[ name ] = sq; -} - -declare_sidequest_stage( sidequest_name, stage_name, init_func, logic_func, exit_func ) //checked matches cerberus output -{ - /* -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt to declare a side quest stage before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to add stage " + stage_name + " to side quest " + sidequest_name + " but no such side quest exists." ); - return; - } - if ( isDefined( level._zombie_sidequests[ sidequest_name ].stages[ stage_name ] ) ) - { - println( "*** ERROR: Sidequest " + sidequest_name + " already has a stage called " + stage_name ); - return; -#/ - } - */ - stage = spawnstruct(); - stage.name = stage_name; - stage.stage_number = level._zombie_sidequests[ sidequest_name ].stages.size; - stage.assets = []; - stage.active_assets = []; - stage.logic_func = logic_func; - stage.init_func = init_func; - stage.exit_func = exit_func; - stage.completed = 0; - stage.time_limit = 0; - level._zombie_sidequests[ sidequest_name ].stages[ stage_name ] = stage; -} - -set_stage_time_limit( sidequest_name, stage_name, time_limit, timer_func ) //checked matches cerberus output -{ - /* -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt to set a side quest stage time limit before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to add timelimit to stage " + stage_name + " in side quest " + sidequest_name + " but no such side quest exists." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ].stages[ stage_name ] ) ) - { - println( "*** ERROR: Attempt to add timelimit to stage " + stage_name + " in Sidequest " + sidequest_name + " but stage does not exist." ); - return; -#/ - } - */ - level._zombie_sidequests[ sidequest_name ].stages[ stage_name ].time_limit = time_limit; - level._zombie_sidequests[ sidequest_name ].stages[ stage_name ].time_limit_func = timer_func; -} - -declare_stage_asset_from_struct( sidequest_name, stage_name, target_name, thread_func, trigger_thread_func ) //checked changed to match cerberus output -{ - structs = getstructarray( target_name, "targetname" ); - /* -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt to declare a side quest asset " + target_name + " before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " but no such side quest exists." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ].stages[ stage_name ] ) ) - { - println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " : " + stage_name + " but no such stage exists." ); - return; - } - if ( !structs.size ) - { - println( "*** ERROR: No Structs with " + target_name + " not found." ); - return; -#/ - } - */ - for ( i = 0; i < structs.size; i++ ) - { - asset = spawnstruct(); - asset.type = "struct"; - asset.struct = structs[ i ]; - asset.thread_func = thread_func; - asset.trigger_thread_func = trigger_thread_func; - level._zombie_sidequests[ sidequest_name ].stages[ stage_name ].assets[ level._zombie_sidequests[ sidequest_name ].stages[ stage_name ].assets.size ] = asset; - } -} - -declare_stage_title( sidequest_name, stage_name, title ) //checked matches cerberus output -{ - /* -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt to declare a stage title " + title + " before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to declare a stage title " + title + " to side quest " + sidequest_name + " but no such side quest exists." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ].stages[ stage_name ] ) ) - { - println( "*** ERROR: Attempt to declare stage title " + title + " to side quest " + sidequest_name + " : " + stage_name + " but no such stage exists." ); - return; -#/ - } - */ - level._zombie_sidequests[ sidequest_name ].stages[ stage_name ].title = title; -} - -declare_stage_asset( sidequest_name, stage_name, target_name, thread_func, trigger_thread_func ) //checked changed to match cerberus output -{ - ents = getentarray( target_name, "targetname" ); - /* -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt to declare a side quest asset " + target_name + " before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " but no such side quest exists." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ].stages[ stage_name ] ) ) - { - println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " : " + stage_name + " but no such stage exists." ); - return; - } - if ( !ents.size ) - { - println( "*** ERROR: No Ents with " + target_name + " not found." ); - return; -#/ - } - */ - for ( i = 0; i < ents.size; i++ ) - { - asset = spawnstruct(); - asset.type = "entity"; - asset.ent = ents[ i ]; - asset.thread_func = thread_func; - asset.trigger_thread_func = trigger_thread_func; - level._zombie_sidequests[ sidequest_name ].stages[ stage_name ].assets[ level._zombie_sidequests[ sidequest_name ].stages[ stage_name ].assets.size ] = asset; - } -} - -declare_sidequest_asset( sidequest_name, target_name, thread_func, trigger_thread_func ) //checked changed to match cerberus output -{ - ents = getentarray( target_name, "targetname" ); - /* -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt to declare a side quest asset " + target_name + " before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " but no such side quest exists." ); - return; - } - if ( !ents.size ) - { - println( "*** ERROR: No Ents with " + target_name + " not found." ); - return; -#/ - } - */ - for ( i = 0; i < ents.size; i++ ) - { - asset = spawnstruct(); - asset.type = "entity"; - asset.ent = ents[ i ]; - asset.thread_func = thread_func; - asset.trigger_thread_func = trigger_thread_func; - asset.ent.thread_func = thread_func; - asset.ent.trigger_thread_func = trigger_thread_func; - level._zombie_sidequests[ sidequest_name ].assets[ level._zombie_sidequests[ sidequest_name ].assets.size ] = asset; - } -} - -declare_sidequest_asset_from_struct( sidequest_name, target_name, thread_func, trigger_thread_func ) //checked changed to match cerberus output -{ - structs = getstructarray( target_name, "targetname" ); - /* -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt to declare a side quest asset " + target_name + " before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " but no such side quest exists." ); - return; - } - if ( !structs.size ) - { - println( "*** ERROR: No Structs with " + target_name + " not found." ); - return; -#/ - } - */ - for ( i = 0; i < structs.size; i++ ) - { - asset = spawnstruct(); - asset.type = "struct"; - asset.struct = structs[ i ]; - asset.thread_func = thread_func; - asset.trigger_thread_func = trigger_thread_func; - level._zombie_sidequests[ sidequest_name ].assets[ level._zombie_sidequests[ sidequest_name ].assets.size ] = asset; - } -} - -build_asset_from_struct( asset, parent_struct ) //checked matches cerberus output -{ - ent = spawn( "script_model", asset.origin ); - if ( isDefined( asset.model ) ) - { - ent setmodel( asset.model ); - } - if ( isDefined( asset.angles ) ) - { - ent.angles = asset.angles; - } - ent.script_noteworthy = asset.script_noteworthy; - ent.type = "struct"; - ent.radius = asset.radius; - ent.thread_func = parent_struct.thread_func; - ent.trigger_thread_func = parent_struct.trigger_thread_func; - ent.script_vector = parent_struct.script_vector; - asset.trigger_thread_func = parent_struct.trigger_thread_func; - asset.script_vector = parent_struct.script_vector; - ent.target = asset.target; - ent.script_float = asset.script_float; - ent.script_int = asset.script_int; - ent.script_trigger_spawnflags = asset.script_trigger_spawnflags; - ent.targetname = asset.targetname; - return ent; -} - -delete_stage_assets() //checked changed to match cerberus output -{ - for ( i = 0; i < self.active_assets.size; i++ ) - { - asset = self.active_assets[ i ]; - switch( asset.type ) - { - case "struct": - if ( isDefined( asset.trigger ) ) - { - /* -/# - println( "Deleting trigger from struct type asset." ); -#/ - */ - asset.trigger delete(); - asset.trigger = undefined; - } - asset delete(); - break; - case "entity": - if ( isDefined( asset.trigger ) ) - { - /* -/# - println( "Deleting trigger from ent type asset." ); -#/ - */ - asset.trigger delete(); - asset.trigger = undefined; - } - break; - } - } - remaining_assets = []; - for ( i = 0; i < self.active_assets.size; i++ ) - { - if ( isDefined( self.active_assets[ i ] ) ) - { - remaining_assets[ remaining_assets.size ] = self.active_assets[ i ]; - } - } - self.active_assets = remaining_assets; -} - -build_assets() //checked changed to match cerberus output -{ - for ( i = 0; i < self.assets.size; i++ ) - { - asset = undefined; - switch( self.assets[ i ].type ) - { - case "struct": - asset = self.assets[ i ].struct; - self.active_assets[ self.active_assets.size ] = build_asset_from_struct( asset, self.assets[ i ] ); - break; - case "entity": - for ( j = 0; j < self.active_assets.size; j++ ) - { - if ( self.active_assets[ j ] == self.assets[ i ].ent ) - { - asset = self.active_assets[ j ]; - break; - } - } - asset = self.assets[ i ].ent; - asset.type = "entity"; - self.active_assets[ self.active_assets.size ] = asset; - break; - default: - /* -/# - println( "*** ERROR: Don't know how to build asset of type " + self.assets.type ); -#/ - */ - break; - } - if ( isDefined( asset.script_noteworthy ) && self.assets[ i ].type == "entity" && !isDefined( asset.trigger ) || isDefined( asset.script_noteworthy ) ) - { - trigger_radius = 15; - trigger_height = 72; - if ( isDefined( asset.radius ) ) - { - trigger_radius = asset.radius; - } - if ( isDefined( asset.height ) ) - { - trigger_height = asset.height; - } - trigger_spawnflags = 0; - if ( isDefined( asset.script_trigger_spawnflags ) ) - { - trigger_spawnflags = asset.script_trigger_spawnflags; - } - trigger_offset = ( 0, 0, 0 ); - if ( isDefined( asset.script_vector ) ) - { - trigger_offset = asset.script_vector; - } - switch( asset.script_noteworthy ) - { - case "trigger_radius_use": - use_trigger = spawn( "trigger_radius_use", asset.origin + trigger_offset, trigger_spawnflags, trigger_radius, trigger_height ); - use_trigger setcursorhint( "HINT_NOICON" ); - use_trigger triggerignoreteam(); - if ( isDefined( asset.radius ) ) - { - use_trigger.radius = asset.radius; - } - use_trigger.owner_ent = self.active_assets[ self.active_assets.size - 1 ]; - if ( isDefined( asset.trigger_thread_func ) ) - { - use_trigger thread [[ asset.trigger_thread_func ]](); - } - else - { - use_trigger thread use_trigger_thread(); - } - self.active_assets[ self.active_assets.size - 1 ].trigger = use_trigger; - break; - case "trigger_radius_damage": - damage_trigger = spawn( "trigger_damage", asset.origin + trigger_offset, trigger_spawnflags, trigger_radius, trigger_height ); - if ( isDefined( asset.radius ) ) - { - damage_trigger.radius = asset.radius; - } - damage_trigger.owner_ent = self.active_assets[ self.active_assets.size - 1 ]; - if ( isDefined( asset.trigger_thread_func ) ) - { - damage_trigger thread [[ asset.trigger_thread_func ]](); - } - else - { - damage_trigger thread damage_trigger_thread(); - } - self.active_assets[ self.active_assets.size - 1 ].trigger = damage_trigger; - break; - case "trigger_radius": - radius_trigger = spawn( "trigger_radius", asset.origin + trigger_offset, trigger_spawnflags, trigger_radius, trigger_height ); - if ( isDefined( asset.radius ) ) - { - radius_trigger.radius = asset.radius; - } - radius_trigger.owner_ent = self.active_assets[ self.active_assets.size - 1 ]; - if ( isDefined( asset.trigger_thread_func ) ) - { - radius_trigger thread [[ asset.trigger_thread_func ]](); - } - else - { - radius_trigger thread radius_trigger_thread(); - } - self.active_assets[ self.active_assets.size - 1 ].trigger = radius_trigger; - break; - - } - } - if ( isDefined( self.assets[ i ].thread_func ) && !isDefined( self.active_assets[ self.active_assets.size - 1 ].dont_rethread ) ) - { - self.active_assets[ self.active_assets.size - 1 ] thread [[ self.assets[ i ].thread_func ]](); - } - if ( i % 2 == 0 ) - { - wait_network_frame(); - } - } -} - -radius_trigger_thread() //checked matches cerberus output -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( "trigger", player ); - while ( !isplayer( player ) ) - { - continue; - } - self.owner_ent notify( "triggered" ); - while ( player istouching( self ) ) - { - wait 0.05; - } - self.owner_ent notify( "untriggered" ); - } -} - -thread_on_assets( target_name, thread_func ) //checked changed to match cerberus output -{ - for ( i = 0; i < self.active_assets.size; i++ ) - { - if ( self.active_assets[ i ].targetname == target_name ) - { - self.active_assets[ i ] thread [[ thread_func ]](); - } - } -} - -stage_logic_func_wrapper( sidequest, stage ) //checked matches cerberus output -{ - if ( isDefined( stage.logic_func ) ) - { - level endon( sidequest.name + "_" + stage.name + "_over" ); - stage [[ stage.logic_func ]](); - } -} - -sidequest_start( sidequest_name ) //checked matches cerberus output -{ - /* -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt start a side quest asset " + sidequest_name + " before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to start " + sidequest_name + " but no such side quest exists." ); - return; -#/ - } - */ - sidequest = level._zombie_sidequests[ sidequest_name ]; - sidequest build_assets(); - if ( isDefined( sidequest.init_func ) ) - { - sidequest [[ sidequest.init_func ]](); - } - if ( isDefined( sidequest.logic_func ) ) - { - sidequest thread [[ sidequest.logic_func ]](); - } -} - -stage_start( sidequest, stage ) //checked matches cerberus output -{ - if ( isstring( sidequest ) ) - { - sidequest = level._zombie_sidequests[ sidequest ]; - } - if ( isstring( stage ) ) - { - stage = sidequest.stages[ stage ]; - } - stage build_assets(); - sidequest.active_stage = stage.stage_number; - level notify( sidequest.name + "_" + stage.name + "_started" ); - stage.completed = 0; - if ( isDefined( sidequest.generic_stage_start_func ) ) - { - stage [[ sidequest.generic_stage_start_func ]](); - } - if ( isDefined( stage.init_func ) ) - { - stage [[ stage.init_func ]](); - } - level._last_stage_started = stage.name; - level thread stage_logic_func_wrapper( sidequest, stage ); - if ( stage.time_limit > 0 ) - { - stage thread time_limited_stage( sidequest ); - } - if ( isDefined( stage.title ) ) - { - stage thread display_stage_title( sidequest.uses_teleportation ); - } -} - -display_stage_title( wait_for_teleport_done_notify ) //checked changed to match cerberus output -{ - if ( wait_for_teleport_done_notify ) - { - level waittill( "teleport_done" ); - wait 2; - } - stage_text = newhudelem(); - stage_text.location = 0; - stage_text.alignx = "center"; - stage_text.aligny = "middle"; - stage_text.foreground = 1; - stage_text.fontscale = 1.6; - stage_text.sort = 20; - stage_text.x = 320; - stage_text.y = 300; - stage_text.og_scale = 1; - stage_text.color = vectorScale( ( 1, 0, 0 ), 128 ); - stage_text.alpha = 0; - stage_text.fontstyle3d = "shadowedmore"; - stage_text settext( self.title ); - stage_text fadeovertime( 0.5 ); - stage_text.alpha = 1; - wait 5; - stage_text fadeovertime( 1 ); - stage_text.alpha = 0; - wait 1; - stage_text destroy(); -} - -time_limited_stage( sidequest ) //checked matches cerberus output -{ - /* -/# - println( "*** Starting timer for sidequest " + sidequest.name + " stage " + self.name + " : " + self.time_limit + " seconds." ); -#/ - */ - level endon( sidequest.name + "_" + self.name + "_over" ); - level endon( "suspend_timer" ); - level endon( "end_game" ); - time_limit = undefined; - if ( isDefined( self.time_limit_func ) ) - { - time_limit = [[ self.time_limit_func ]]() * 0.25; - } - else - { - time_limit = self.time_limit * 0.25; - } - wait time_limit; - level notify( "timed_stage_75_percent" ); - wait time_limit; - level notify( "timed_stage_50_percent" ); - wait time_limit; - level notify( "timed_stage_25_percent" ); - wait ( time_limit - 10 ); - level notify( "timed_stage_10_seconds_to_go" ); - wait 10; - stage_failed( sidequest, self ); -} - -sidequest_println( str ) //checked matches cerberus output -{ - /* -/# - if ( getDvar( #"A7AC338D" ) != "1" ) - { - return; - } - println( str ); -#/ - */ -} - -precache_sidequest_assets() //checked changed to match cerberus output -{ - sidequest_names = getarraykeys( level._zombie_sidequests ); - for ( i = 0; i < sidequest_names.size; i++ ) - { - sq = level._zombie_sidequests[ sidequest_names[ i ] ]; - icon_keys = getarraykeys( sq.icons ); - for ( j = 0; j < icon_keys.size; j++ ) - { - precacheshader( sq.icons[ icon_keys[ j ] ] ); - } - stage_names = getarraykeys( sq.stages ); - for ( j = 0; j < stage_names.size; j++ ) - { - stage = sq.stages[ stage_names[ j ] ]; - for ( k = 0; k < stage.assets.size; k++ ) - { - asset = stage.assets[ k ]; - if ( isDefined( asset.type ) && asset.type == "struct" ) - { - if ( isDefined( asset.model ) ) - { - precachemodel( asset.model ); - } - } - } - } - } -} - -sidequest_complete( sidequest_name ) //checked matches cerberus output -{ - /* -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt to call sidequest_complete for sidequest " + sidequest_name + " before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to call sidequest_complete for sidequest " + sidequest_name + " but no such side quest exists." ); - return; -#/ - } - */ - return level._zombie_sidequests[ sidequest_name ].sidequest_complete; -} - -stage_completed( sidequest_name, stage_name ) //checked matches cerberus output -{ - /* -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt to call stage_complete for sidequest " + sidequest_name + " before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to call stage_complete for sidequest " + sidequest_name + " but no such side quest exists." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ].stages[ stage_name ] ) ) - { - println( "*** ERROR: Attempt to call stage_complete in sq " + sidequest_name + " : " + stage_name + " but no such stage exists." ); - return; - } - println( "*** stage completed called." ); -#/ - */ - sidequest = level._zombie_sidequests[ sidequest_name ]; - stage = sidequest.stages[ stage_name ]; - level thread stage_completed_internal( sidequest, stage ); -} - -stage_completed_internal( sidequest, stage ) //checked changed to match cerberus output -{ - level notify( sidequest.name + "_" + stage.name + "_over" ); - level notify( sidequest.name + "_" + stage.name + "_completed" ); - if ( isDefined( sidequest.generic_stage_end_func ) ) - { - /* -/# - println( "Calling generic end func." ); -#/ - */ - stage [[ sidequest.generic_stage_end_func ]](); - } - if ( isDefined( stage.exit_func ) ) - { - /* -/# - println( "Calling stage end func." ); -#/ - */ - stage [[ stage.exit_func ]]( 1 ); - } - stage.completed = 1; - sidequest.last_completed_stage = sidequest.active_stage; - sidequest.active_stage = -1; - stage delete_stage_assets(); - all_complete = 1; - stage_names = getarraykeys( sidequest.stages ); - for ( i = 0; i < stage_names.size; i++ ) - { - if ( sidequest.stages[ stage_names[ i ] ].completed == 0 ) - { - all_complete = 0; - break; - } - } - if ( all_complete == 1 ) - { - if ( isDefined( sidequest.complete_func ) ) - { - sidequest thread [[ sidequest.complete_func ]](); - } - level notify( "sidequest_" + sidequest.name + "_complete" ); - sidequest.sidequest_completed = 1; - } -} - -stage_failed_internal( sidequest, stage ) //checked matches cerberus output -{ - level notify( sidequest.name + "_" + stage.name + "_over" ); - level notify( sidequest.name + "_" + stage.name + "_failed" ); - if ( isDefined( sidequest.generic_stage_end_func ) ) - { - stage [[ sidequest.generic_stage_end_func ]](); - } - if ( isDefined( stage.exit_func ) ) - { - stage [[ stage.exit_func ]]( 0 ); - } - sidequest.active_stage = -1; - stage delete_stage_assets(); -} - -stage_failed( sidequest, stage ) //checked matches cerberus output -{ - /* -/# - println( "*** Stage failed called." ); -#/ - */ - if ( isstring( sidequest ) ) - { - sidequest = level._zombie_sidequests[ sidequest ]; - } - if ( isstring( stage ) ) - { - stage = sidequest.stages[ stage ]; - } - level thread stage_failed_internal( sidequest, stage ); -} - -get_sidequest_stage( sidequest, stage_number ) //checked changed to match cerberus output -{ - stage = undefined; - stage_names = getarraykeys( sidequest.stages ); - for ( i = 0; i < stage_names.size; i++ ) - { - if ( sidequest.stages[ stage_names[ i ] ].stage_number == stage_number ) - { - stage = sidequest.stages[ stage_names[ i ] ]; - break; - } - } - return stage; -} - -get_damage_trigger( radius, origin, damage_types ) //checked matches cerberus output -{ - trig = spawn( "trigger_damage", origin, 0, radius, 72 ); - trig thread dam_trigger_thread( damage_types ); - return trig; -} - -dam_trigger_thread( damage_types ) //checked changed to match cerberus output -{ - self endon( "death" ); - damage_type = "NONE"; - while ( 1 ) - { - self waittill( "damage", amount, attacker, dir, point, mod ); - for ( i = 0; i < damage_types.size; i++ ) - { - if ( mod == damage_types[ i ] ) - { - self notify( "triggered" ); - } - } - } -} - -use_trigger_thread() //checked matches cerberus output -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( "trigger", player ); - self.owner_ent notify( "triggered" ); - wait 0.1; - } -} - -sidequest_stage_active( sidequest_name, stage_name ) //checked matches cerberus output -{ - sidequest = level._zombie_sidequests[ sidequest_name ]; - stage = sidequest.stages[ stage_name ]; - if ( sidequest.active_stage == stage.stage_number ) - { - return 1; - } - else - { - return 0; - } -} - -sidequest_start_next_stage( sidequest_name ) //checked matches cerberus output -{ - /* -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt start next stage in side quest asset " + sidequest_name + " before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to start next sidequest in sidequest " + sidequest_name + " but no such side quest exists." ); - return; -#/ - } - */ - sidequest = level._zombie_sidequests[ sidequest_name ]; - if ( sidequest.sidequest_complete == 1 ) - { - return; - } - last_completed = sidequest.last_completed_stage; - if ( last_completed == -1 ) - { - last_completed = 0; - } - else - { - last_completed++; - } - stage = get_sidequest_stage( sidequest, last_completed ); - if ( !isDefined( stage ) ) - { - /* -/# - println( "*** ERROR: Sidequest " + sidequest_name + " has no stage number " + last_completed ); -#/ - */ - return; - } - stage_start( sidequest, stage ); - return stage; -} - -main() //checked matches cerberus output -{ -} - -is_facing( facee ) //checked matches cerberus output -{ - orientation = self getplayerangles(); - forwardvec = anglesToForward( orientation ); - forwardvec2d = ( forwardvec[ 0 ], forwardvec[ 1 ], 0 ); - unitforwardvec2d = vectornormalize( forwardvec2d ); - tofaceevec = facee.origin - self.origin; - tofaceevec2d = ( tofaceevec[ 0 ], tofaceevec[ 1 ], 0 ); - unittofaceevec2d = vectornormalize( tofaceevec2d ); - dotproduct = vectordot( unitforwardvec2d, unittofaceevec2d ); - return dotproduct > 0.9; -} - -fake_use( notify_string, qualifier_func ) //checked changed to match cerberus output -{ - waittillframeend; - while ( 1 ) - { - if ( !isDefined( self ) ) - { - return; - } - /* -/# - print3d( self.origin, "+", vectorScale( ( 0, 1, 0 ), 255 ), 1 ); -#/ - */ - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - qualifier_passed = 1; - if ( isDefined( qualifier_func ) ) - { - qualifier_passed = players[ i ] [[ qualifier_func ]](); - } - if ( qualifier_passed && distancesquared( self.origin, players[ i ].origin ) < 4096 ) - { - if ( players[ i ] is_facing( self ) ) - { - if ( players[ i ] usebuttonpressed() ) - { - self notify( notify_string, players[ i ] ); - return; - } - } - } - } - wait 0.1; - } -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_spawner.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_spawner.gsc deleted file mode 100644 index 34889df..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_spawner.gsc +++ /dev/null @@ -1,3290 +0,0 @@ -#include maps/mp/zombies/_zm_ai_faller; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_pers_upgrades_functions; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_pers_upgrades; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/animscripts/zm_run; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm_blockers; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/animscripts/zm_shared; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked changed to match cerberus output -{ - level._contextual_grab_lerp_time = 0.3; - level.zombie_spawners = getentarray( "zombie_spawner", "script_noteworthy" ); - if ( is_true( level.use_multiple_spawns ) ) - { - level.zombie_spawn = []; - for ( i = 0; i < level.zombie_spawners.size; i++ ) - { - if ( isDefined( level.zombie_spawners[ i ].script_int ) ) - { - int = level.zombie_spawners[ i ].script_int; - if ( !isDefined( level.zombie_spawn[ int ] ) ) - { - level.zombie_spawn[ int ] = []; - } - level.zombie_spawn[ int ][ level.zombie_spawn[ int ].size ] = level.zombie_spawners[ i ]; - } - } - } - precachemodel( "p6_anim_zm_barricade_board_01_upgrade" ); - precachemodel( "p6_anim_zm_barricade_board_02_upgrade" ); - precachemodel( "p6_anim_zm_barricade_board_03_upgrade" ); - precachemodel( "p6_anim_zm_barricade_board_04_upgrade" ); - precachemodel( "p6_anim_zm_barricade_board_05_upgrade" ); - precachemodel( "p6_anim_zm_barricade_board_06_upgrade" ); - if ( isDefined( level.ignore_spawner_func ) ) - { - for ( i = 0; i < level.zombie_spawners.size; i++ ) - { - ignore = [[ level.ignore_spawner_func ]]( level.zombie_spawners[ i ] ); - if ( ignore ) - { - arrayremovevalue( level.zombie_spawners, level.zombie_spawners[ i ] ); - } - } - } - gametype = getDvar( "ui_gametype" ); - if ( !isDefined( level.attack_player_thru_boards_range ) ) - { - level.attack_player_thru_boards_range = 109.8; - } - if ( isDefined( level._game_module_custom_spawn_init_func ) ) - { - [[ level._game_module_custom_spawn_init_func ]](); - } - registerclientfield( "actor", "zombie_has_eyes", 1, 1, "int" ); - registerclientfield( "actor", "zombie_ragdoll_explode", 1, 1, "int" ); - registerclientfield( "actor", "zombie_gut_explosion", 9000, 1, "int" ); -} - -add_cusom_zombie_spawn_logic( func ) //checked matches cerberus output -{ - if ( !isDefined( level._zombie_custom_spawn_logic ) ) - { - level._zombie_custom_spawn_logic = []; - } - level._zombie_custom_spawn_logic[ level._zombie_custom_spawn_logic.size ] = func; -} - -player_attacks_enemy( player, amount, type, point ) //checked matches cerberus output -{ - team = undefined; - if ( isDefined( self._race_team ) ) - { - team = self._race_team; - } - if ( !isads( player ) ) - { - [[ level.global_damage_func ]]( type, self.damagelocation, point, player, amount, team ); - return 0; - } - if ( !bullet_attack( type ) ) - { - [[ level.global_damage_func ]]( type, self.damagelocation, point, player, amount, team ); - return 0; - } - [[ level.global_damage_func_ads ]]( type, self.damagelocation, point, player, amount, team ); - return 1; -} - -player_attacker( attacker ) //checked matches cerberus output -{ - if ( isplayer( attacker ) ) - { - return 1; - } - return 0; -} - -enemy_death_detection() //checked changed to match cerberus output -{ - self endon( "death" ); - for ( ;; ) - { - self waittill( "damage", amount, attacker, direction_vec, point, type ); - if ( !isDefined( amount ) ) - { - continue; - } - if ( !isalive( self ) || self.delayeddeath ) - { - return; - } - if ( !player_attacker( attacker ) ) - { - continue; - } - self.has_been_damaged_by_player = 1; - self player_attacks_enemy( attacker, amount, type, point ); - } -} - -is_spawner_targeted_by_blocker( ent ) //checked changed to match cerberus output -{ - if ( isDefined( ent.targetname ) ) - { - targeters = getentarray( ent.targetname, "target" ); - for ( i = 0; i < targeters.size; i++ ) - { - if ( targeters[ i ].targetname == "zombie_door" || targeters[ i ].targetname == "zombie_debris" ) - { - return 1; - } - result = is_spawner_targeted_by_blocker( targeters[ i ] ); - if ( result ) - { - return 1; - } - i++; - } - } - return 0; -} - -add_custom_zombie_spawn_logic( func ) //checked matches cerberus output -{ - if ( !isDefined( level._zombie_custom_spawn_logic ) ) - { - level._zombie_custom_spawn_logic = []; - } - level._zombie_custom_spawn_logic[ level._zombie_custom_spawn_logic.size ] = func; -} - -zombie_spawn_init( animname_set ) //checked partially changed to match cerberus output -{ - if ( !isDefined( animname_set ) ) - { - animname_set = 0; - } - self.targetname = "zombie"; - self.script_noteworthy = undefined; - recalc_zombie_array(); - if ( !animname_set ) - { - self.animname = "zombie"; - } - if ( isDefined( get_gamemode_var( "pre_init_zombie_spawn_func" ) ) ) - { - self [[ get_gamemode_var( "pre_init_zombie_spawn_func" ) ]](); - } - self thread play_ambient_zombie_vocals(); - self.zmb_vocals_attack = "zmb_vocals_zombie_attack"; - self.ignoreall = 1; - self.ignoreme = 1; - self.allowdeath = 1; - self.force_gib = 1; - self.is_zombie = 1; - self.has_legs = 1; - self allowedstances( "stand" ); - self.zombie_damaged_by_bar_knockdown = 0; - self.gibbed = 0; - self.head_gibbed = 0; - self setphysparams( 15, 0, 72 ); - self.disablearrivals = 1; - self.disableexits = 1; - self.grenadeawareness = 0; - self.badplaceawareness = 0; - self.ignoresuppression = 1; - self.suppressionthreshold = 1; - self.nododgemove = 1; - self.dontshootwhilemoving = 1; - self.pathenemylookahead = 0; - self.badplaceawareness = 0; - self.chatinitialized = 0; - self.a.disablepain = 1; - - self disable_react(); - if ( isDefined( level.zombie_health ) ) - { - self.maxhealth = level.zombie_health; - if ( isDefined( level.zombie_respawned_health ) && level.zombie_respawned_health.size > 0 ) - { - self.health = level.zombie_respawned_health[ 0 ]; - arrayremovevalue( level.zombie_respawned_health, level.zombie_respawned_health[ 0 ] ); - } - else - { - self.health = level.zombie_health; - } - } - else - { - self.maxhealth = level.zombie_vars[ "zombie_health_start" ]; - self.health = self.maxhealth; - } - self.freezegun_damage = 0; - self.dropweapon = 0; - level thread zombie_death_event( self ); - self init_zombie_run_cycle(); - self thread zombie_think(); - self thread zombie_gib_on_damage(); - self thread zombie_damage_failsafe(); - self thread enemy_death_detection(); - if ( isDefined( level._zombie_custom_spawn_logic ) ) - { - if ( isarray( level._zombie_custom_spawn_logic ) ) - { - for ( i = 0; i < level._zombie_custom_spawn_logic.size; i++ ) - { - self thread [[ level._zombie_custom_spawn_logic[ i ] ]](); - } - } - else - { - self thread [[ level._zombie_custom_spawn_logic ]](); - } - } - if ( !is_true( self.no_eye_glow ) ) - { - if ( !is_true( self.is_inert ) ) //imported from beta dump - { - self thread delayed_zombie_eye_glow(); - } - } - self.deathfunction = ::zombie_death_animscript; - self.flame_damage_time = 0; - self.meleedamage = 60; - self.no_powerups = 1; - self zombie_history( "zombie_spawn_init -> Spawned = " + self.origin ); - self.thundergun_knockdown_func = level.basic_zombie_thundergun_knockdown; - self.tesla_head_gib_func = ::zombie_tesla_head_gib; - self.team = level.zombie_team; - if ( isDefined( level.achievement_monitor_func ) ) - { - self [[ level.achievement_monitor_func ]](); - } - if ( isDefined( get_gamemode_var( "post_init_zombie_spawn_func" ) ) ) - { - self [[ get_gamemode_var( "post_init_zombie_spawn_func" ) ]](); - } - if ( isDefined( level.zombie_init_done ) ) - { - self [[ level.zombie_init_done ]](); - } - self.zombie_init_done = 1; - self notify( "zombie_init_done" ); -} - -delayed_zombie_eye_glow() //checked changed to match cerberus output -{ - self endon( "zombie_delete" ); - if ( is_true( self.in_the_ground ) || is_true( self.in_the_ceiling ) ) - { - while ( !isDefined( self.create_eyes ) ) - { - wait 0.1; - } - } - else - { - wait 0.5; - } - self zombie_eye_glow(); -} - -zombie_damage_failsafe() //checked changed to match cerberus output -{ - self endon( "death" ); - continue_failsafe_damage = 0; - while ( 1 ) - { - wait 0.5; - if ( !isDefined( self.enemy ) || !isplayer( self.enemy ) ) - { - continue; - } - if ( self istouching( self.enemy ) ) - { - old_org = self.origin; - if ( !continue_failsafe_damage ) - { - wait 5; - } - if ( !isDefined( self.enemy ) || !isplayer( self.enemy ) || self.enemy hasperk( "specialty_armorvest" ) ) - { - continue; - } - if ( self istouching( self.enemy ) && !self.enemy maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isalive( self.enemy ) ) - { - if ( distancesquared( old_org, self.origin ) < 3600 ) - { - self.enemy dodamage( self.enemy.health + 1000, self.enemy.origin, self, self, "none", "MOD_RIFLE_BULLET" ); - continue_failsafe_damage = 1; - } - } - } - else - { - continue_failsafe_damage = 0; - } - } -} - -should_skip_teardown( find_flesh_struct_string ) //checked matches cerberus output -{ - if ( isDefined( find_flesh_struct_string ) && find_flesh_struct_string == "find_flesh" ) - { - return 1; - } - if ( isDefined( self.script_string ) && self.script_string == "zombie_chaser" ) - { - return 1; - } - return 0; -} - -zombie_think() //checked changed to match cerberus output -{ - self endon( "death" ); - /* -/# - assert( !self.isdog ); -#/ - */ - self.ai_state = "zombie_think"; - find_flesh_struct_string = undefined; - if ( isDefined( level.zombie_custom_think_logic ) ) - { - shouldwait = self [[ level.zombie_custom_think_logic ]](); - if ( shouldwait ) - { - self waittill( "zombie_custom_think_done", find_flesh_struct_string ); - } - } - else if ( is_true( self.start_inert ) ) - { - find_flesh_struct_string = "find_flesh"; - } - else - { - if ( isDefined( self.custom_location ) ) - { - self thread [[ self.custom_location ]](); - } - else - { - self thread do_zombie_spawn(); - } - self waittill( "risen", find_flesh_struct_string ); - } - node = undefined; - desired_nodes = []; - self.entrance_nodes = []; - if ( isDefined( level.max_barrier_search_dist_override ) ) - { - max_dist = level.max_barrier_search_dist_override; - } - else - { - max_dist = 500; - } - if ( !isDefined( find_flesh_struct_string ) && isDefined( self.target ) && self.target != "" ) - { - desired_origin = get_desired_origin(); - /* -/# - assert( isDefined( desired_origin ), "Spawner @ " + self.origin + " has a .target but did not find a target" ); -#/ - */ - origin = desired_origin; - node = getclosest( origin, level.exterior_goals ); - self.entrance_nodes[ self.entrance_nodes.size ] = node; - self zombie_history( "zombie_think -> #1 entrance (script_forcegoal) origin = " + self.entrance_nodes[ 0 ].origin ); - } - else if ( self should_skip_teardown( find_flesh_struct_string ) ) - { - self zombie_setup_attack_properties(); - if ( isDefined( self.target ) ) - { - end_at_node = getnode( self.target, "targetname" ); - if ( isDefined( end_at_node ) ) - { - self setgoalnode( end_at_node ); - self waittill( "goal" ); - } - } - if ( is_true( self.start_inert ) ) - { - self thread maps/mp/zombies/_zm_ai_basic::start_inert( 1 ); - self zombie_complete_emerging_into_playable_area(); - } - else - { - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - self thread zombie_entered_playable(); - } - return; - } - else if ( isDefined( find_flesh_struct_string ) ) - { - /* -/# - assert( isDefined( find_flesh_struct_string ) ); -#/ - */ - for ( i = 0; i < level.exterior_goals.size; i++ ) - { - if ( isDefined( level.exterior_goals[ i ].script_string ) && level.exterior_goals[ i ].script_string == find_flesh_struct_string ) - { - node = level.exterior_goals[ i ]; - break; - } - } - self.entrance_nodes[ self.entrance_nodes.size ] = node; - self zombie_history( "zombie_think -> #1 entrance origin = " + node.origin ); - self thread zombie_assure_node(); - } - else - { - origin = self.origin; - desired_origin = get_desired_origin(); - if ( isDefined( desired_origin ) ) - { - origin = desired_origin; - } - nodes = get_array_of_closest( origin, level.exterior_goals, undefined, 3 ); - desired_nodes[ 0 ] = nodes[ 0 ]; - prev_dist = distance( self.origin, nodes[ 0 ].origin ); - for ( i = 1; i < nodes.size; i++ ) - { - dist = distance( self.origin, nodes[ i ].origin ); - if ( ( dist - prev_dist ) > max_dist ) - { - break; - } - prev_dist = dist; - desired_nodes[ i ] = nodes[ i ]; - } - node = desired_nodes[ 0 ]; - if ( desired_nodes.size > 1 ) - { - node = desired_nodes[ randomint( desired_nodes.size ) ]; - } - self.entrance_nodes = desired_nodes; - self zombie_history( "zombie_think -> #1 entrance origin = " + node.origin ); - self thread zombie_assure_node(); - } -/* -/# - assert( isDefined( node ), "Did not find a node!!! [Should not see this!]" ); -#/ -*/ - level thread draw_line_ent_to_pos( self, node.origin, "goal" ); - self.first_node = node; - self thread zombie_goto_entrance( node ); -} - -zombie_entered_playable() //checked changed to match cerberus output -{ - self endon( "death" ); - if ( !isDefined( level.playable_areas ) ) - { - level.playable_areas = getentarray( "player_volume", "script_noteworthy" ); - } - while ( 1 ) - { - foreach ( area in level.playable_areas ) - { - if ( self istouching( area ) ) - { - wait 1.5; - self zombie_complete_emerging_into_playable_area(); - return; - } - } - wait 1; - } -} - -get_desired_origin() //checked matches cerberus output -{ - if ( isDefined( self.target ) ) - { - ent = getent( self.target, "targetname" ); - if ( !isDefined( ent ) ) - { - ent = getstruct( self.target, "targetname" ); - } - if ( !isDefined( ent ) ) - { - ent = getnode( self.target, "targetname" ); - } - /* -/# - assert( isDefined( ent ), "Cannot find the targeted ent/node/struct, "" + self.target + "" at " + self.origin ); -#/ - */ - return ent.origin; - } - return undefined; -} - -zombie_goto_entrance( node, endon_bad_path ) //checked matches cerberus output -{ -/* -/# - assert( !self.isdog ); -#/ -*/ - self endon( "death" ); - self endon( "stop_zombie_goto_entrance" ); - level endon( "intermission" ); - self.ai_state = "zombie_goto_entrance"; - if ( is_true( endon_bad_path ) ) - { - self endon( "bad_path" ); - } - self zombie_history( "zombie_goto_entrance -> start goto entrance " + node.origin ); - self.got_to_entrance = 0; - self.goalradius = 128; - self setgoalpos( node.origin ); - self waittill( "goal" ); - self.got_to_entrance = 1; - self zombie_history( "zombie_goto_entrance -> reached goto entrance " + node.origin ); - self tear_into_building(); - if ( isDefined( level.pre_aggro_pathfinding_func ) ) - { - self [[ level.pre_aggro_pathfinding_func ]](); - } - barrier_pos = []; - barrier_pos[ 0 ] = "m"; - barrier_pos[ 1 ] = "r"; - barrier_pos[ 2 ] = "l"; - self.barricade_enter = 1; - animstate = maps/mp/animscripts/zm_utility::append_missing_legs_suffix( "zm_barricade_enter" ); - substate = "barrier_" + self.zombie_move_speed + "_" + barrier_pos[ self.attacking_spot_index ]; - self animscripted( self.first_node.zbarrier.origin, self.first_node.zbarrier.angles, animstate, substate ); - maps/mp/animscripts/zm_shared::donotetracks( "barricade_enter_anim" ); - self zombie_setup_attack_properties(); - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - self.pathenemyfightdist = 4; - self zombie_complete_emerging_into_playable_area(); - self.pathenemyfightdist = 64; - self.barricade_enter = 0; -} - -zombie_assure_node() //checked changed to match cerberus output //changed for loops to while loops to prevent infinite loops with continues -{ - self endon( "death" ); - self endon( "goal" ); - level endon( "intermission" ); - start_pos = self.origin; - if ( isDefined( self.entrance_nodes ) ) - { - for ( i = 0; i < self.entrance_nodes.size; i++ ) - { - if ( self zombie_bad_path() ) - { - self zombie_history( "zombie_assure_node -> assigned assured node = " + self.entrance_nodes[ i ].origin ); - /* -/# - println( "^1Zombie @ " + self.origin + " did not move for 1 second. Going to next closest node @ " + self.entrance_nodes[ i ].origin ); -#/ - */ - level thread draw_line_ent_to_pos( self, self.entrance_nodes[ i ].origin, "goal" ); - self.first_node = self.entrance_nodes[ i ]; - self setgoalpos( self.entrance_nodes[ i ].origin ); - } - else - { - return; - } - } - } - wait 2; - nodes = get_array_of_closest( self.origin, level.exterior_goals, undefined, 20 ); - if ( isDefined( nodes ) ) - { - self.entrance_nodes = nodes; - for ( i = 0; i < self.entrance_nodes.size; i++ ) - { - if ( self zombie_bad_path() ) - { - self zombie_history( "zombie_assure_node -> assigned assured node = " + self.entrance_nodes[ i ].origin ); - /* -/# - println( "^1Zombie @ " + self.origin + " did not move for 1 second. Going to next closest node @ " + self.entrance_nodes[ i ].origin ); -#/ - */ - level thread draw_line_ent_to_pos( self, self.entrance_nodes[ i ].origin, "goal" ); - self.first_node = self.entrance_nodes[ i ]; - self setgoalpos( self.entrance_nodes[ i ].origin ); - } - else - { - return; - } - } - } - self zombie_history( "zombie_assure_node -> failed to find a good entrance point" ); - wait 20; - self dodamage( self.health + 10, self.origin ); - level.zombies_timeout_spawn++; -} - -zombie_bad_path() //checked matches cerberus output -{ - self endon( "death" ); - self endon( "goal" ); - self thread zombie_bad_path_notify(); - self thread zombie_bad_path_timeout(); - self.zombie_bad_path = undefined; - while ( !isDefined( self.zombie_bad_path ) ) - { - wait 0.05; - } - self notify( "stop_zombie_bad_path" ); - return self.zombie_bad_path; -} - -zombie_bad_path_notify() //checked matches cerberus output -{ - self endon( "death" ); - self endon( "stop_zombie_bad_path" ); - self waittill( "bad_path" ); - self.zombie_bad_path = 1; -} - -zombie_bad_path_timeout() //checked matches cerberus output -{ - self endon( "death" ); - self endon( "stop_zombie_bad_path" ); - wait 2; - self.zombie_bad_path = 0; -} - -tear_into_building() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "teleporting" ); - self zombie_history( "tear_into_building -> start" ); - while ( 1 ) - { - if ( isDefined( self.first_node.script_noteworthy ) ) - { - if ( self.first_node.script_noteworthy == "no_blocker" ) - { - return; - } - } - if ( !isDefined( self.first_node.target ) ) - { - return; - } - if ( all_chunks_destroyed( self.first_node, self.first_node.barrier_chunks ) ) - { - self zombie_history( "tear_into_building -> all chunks destroyed" ); - } - if ( !get_attack_spot( self.first_node ) ) - { - self zombie_history( "tear_into_building -> Could not find an attack spot" ); - self thread do_a_taunt(); - wait 0.5; - continue; - } - self.goalradius = 2; - if ( isDefined( level.tear_into_position ) ) - { - self [[ level.tear_into_position ]](); - } - else - { - angles = self.first_node.zbarrier.angles; - self setgoalpos( self.attacking_spot, angles ); - } - self waittill( "goal" ); - if ( isDefined( level.tear_into_wait ) ) - { - self [[ level.tear_into_wait ]](); - } - else - { - self waittill_notify_or_timeout( "orientdone", 1 ); - } - self zombie_history( "tear_into_building -> Reach position and orientated" ); - if ( all_chunks_destroyed( self.first_node, self.first_node.barrier_chunks ) ) - { - self zombie_history( "tear_into_building -> all chunks destroyed" ); - for ( i = 0; i < self.first_node.attack_spots_taken.size; i++ ) - { - self.first_node.attack_spots_taken[ i ] = 0; - } - return; - } - while ( 1 ) - { - if ( isDefined( self.zombie_board_tear_down_callback ) ) - { - self [[ self.zombie_board_tear_down_callback ]](); - } - chunk = get_closest_non_destroyed_chunk( self.origin, self.first_node, self.first_node.barrier_chunks ); - if ( !isDefined( chunk ) ) - { - if ( !all_chunks_destroyed( self.first_node, self.first_node.barrier_chunks ) ) - { - attack = self should_attack_player_thru_boards(); - if ( !is_true( attack ) && self.has_legs ) - { - self do_a_taunt(); - } - else - { - wait 0.1; - } - continue; - } - for ( i = 0; i < self.first_node.attack_spots_taken.size; i++ ) - { - self.first_node.attack_spots_taken[ i ] = 0; - } - return; - } - self zombie_history( "tear_into_building -> animating" ); - self.first_node.zbarrier setzbarrierpiecestate( chunk, "targetted_by_zombie" ); - self.first_node thread check_zbarrier_piece_for_zombie_inert( chunk, self.first_node.zbarrier, self ); - self.first_node thread check_zbarrier_piece_for_zombie_death( chunk, self.first_node.zbarrier, self ); - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "teardown", self.animname ); - if ( isDefined( level.zbarrier_override_tear_in ) ) - { - animstatebase = self [[ level.zbarrier_override_tear_in ]]( chunk ); - } - else - { - animstatebase = self.first_node.zbarrier getzbarrierpieceanimstate( chunk ); - } - animsubstate = "spot_" + self.attacking_spot_index + "_piece_" + self.first_node.zbarrier getzbarrierpieceanimsubstate( chunk ); - anim_sub_index = self getanimsubstatefromasd( animstatebase + "_in", animsubstate ); - self animscripted( self.first_node.zbarrier.origin, self.first_node.zbarrier.angles, maps/mp/animscripts/zm_utility::append_missing_legs_suffix( animstatebase + "_in" ), anim_sub_index ); - self zombie_tear_notetracks( "tear_anim", chunk, self.first_node ); - while ( self.first_node.zbarrier.chunk_health[ chunk ] > 0 ) - { - self animscripted( self.first_node.zbarrier.origin, self.first_node.zbarrier.angles, maps/mp/animscripts/zm_utility::append_missing_legs_suffix( animstatebase + "_loop" ), anim_sub_index ); - self zombie_tear_notetracks( "tear_anim", chunk, self.first_node ); - self.first_node.zbarrier.chunk_health[ chunk ]--; - - } - self animscripted( self.first_node.zbarrier.origin, self.first_node.zbarrier.angles, maps/mp/animscripts/zm_utility::append_missing_legs_suffix( animstatebase + "_out" ), anim_sub_index ); - self zombie_tear_notetracks( "tear_anim", chunk, self.first_node ); - self.lastchunk_destroy_time = getTime(); - attack = self should_attack_player_thru_boards(); - if ( !is_true( attack ) && self.has_legs ) - { - self do_a_taunt(); - } - if ( all_chunks_destroyed( self.first_node, self.first_node.barrier_chunks ) ) - { - for ( i = 0; i < self.first_node.attack_spots_taken.size; i++ ) - { - self.first_node.attack_spots_taken[ i ] = 0; - } - level notify( "last_board_torn", self.first_node.zbarrier.origin ); - return; - } - } - self reset_attack_spot(); - } -} - -do_a_taunt() //checked matches cerberus output -{ - self endon( "death" ); - if ( !self.has_legs ) - { - return 0; - } - if ( !self.first_node.zbarrier zbarriersupportszombietaunts() ) - { - return; - } - self.old_origin = self.origin; - if ( getDvar( "zombie_taunt_freq" ) == "" ) - { - setdvar( "zombie_taunt_freq", "5" ); - } - freq = getDvarInt( "zombie_taunt_freq" ); - if ( freq >= randomint( 100 ) ) - { - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "taunt", self.animname ); - tauntstate = "zm_taunt"; - if ( isDefined( self.first_node.zbarrier ) && self.first_node.zbarrier getzbarriertauntanimstate() != "" ) - { - tauntstate = self.first_node.zbarrier getzbarriertauntanimstate(); - } - self animscripted( self.origin, self.angles, tauntstate ); - self taunt_notetracks( "taunt_anim" ); - } -} - -taunt_notetracks( msg ) //see info.md No 8. -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( "taunt_anim", notetrack ); - if ( notetrack == "end" ) - { - self forceteleport( self.old_origin ); - return; - } - } -} - -should_attack_player_thru_boards() //checked changed to match cerberus output -{ - if ( !self.has_legs ) - { - return 0; - } - if ( isDefined( self.first_node.zbarrier ) ) - { - if ( !self.first_node.zbarrier zbarriersupportszombiereachthroughattacks() ) - { - return 0; - } - } - if ( getDvar( "zombie_reachin_freq" ) == "" ) - { - setdvar( "zombie_reachin_freq", "50" ); - } - freq = getDvarInt( "zombie_reachin_freq" ); - players = get_players(); - attack = 0; - self.player_targets = []; - for ( i = 0; i < players.size; i++ ) - { - if ( isalive( players[ i ] ) && !isDefined( players[ i ].revivetrigger ) && distance2d( self.origin, players[ i ].origin ) <= level.attack_player_thru_boards_range && !is_true( players[ i ].zombie_vars[ "zombie_powerup_zombie_blood_on" ] ) ) - { - self.player_targets[ self.player_targets.size ] = players[ i ]; - attack = 1; - } - } - if ( !attack || freq < randomint( 100 ) ) - { - return 0; - } - self.old_origin = self.origin; - attackanimstate = "zm_window_melee"; - if ( isDefined( self.first_node.zbarrier ) && self.first_node.zbarrier getzbarrierreachthroughattackanimstate() != "" ) - { - attackanimstate = self.first_node.zbarrier getzbarrierreachthroughattackanimstate(); - } - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "attack", self.animname ); - self animscripted( self.origin, self.angles, attackanimstate, self.attacking_spot_index - 1 ); - self window_notetracks( "window_melee_anim" ); - return 1; -} - -window_notetracks( msg ) //see info.md No 8. -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( "window_melee_anim", notetrack ); - if ( notetrack == "end" ) - { - self teleport( self.old_origin ); - return; - } - if ( notetrack == "fire" ) - { - if ( self.ignoreall ) - { - self.ignoreall = 0; - } - if ( isDefined( self.first_node ) ) - { - _melee_dist_sq = 8100; - if ( isDefined( level.attack_player_thru_boards_range ) ) - { - _melee_dist_sq = level.attack_player_thru_boards_range * level.attack_player_thru_boards_range; - } - _trigger_dist_sq = 2601; - for ( i = 0; i < self.player_targets.size; i++ ) - { - playerdistsq = distance2dsquared( self.player_targets[ i ].origin, self.origin ); - heightdiff = abs( self.player_targets[ i ].origin[ 2 ] - self.origin[ 2 ] ); - if ( playerdistsq < _melee_dist_sq && ( heightdiff * heightdiff ) < _melee_dist_sq ) - { - triggerdistsq = distance2dsquared( self.player_targets[ i ].origin, self.first_node.trigger_location.origin ); - heightdiff = abs( self.player_targets[ i ].origin[ 2 ] - self.first_node.trigger_location.origin[ 2 ] ); - if ( triggerdistsq < _trigger_dist_sq && ( heightdiff * heightdiff ) < _trigger_dist_sq ) - { - self.player_targets[ i ] dodamage( self.meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); - break; - } - } - } - } - else - { - self melee(); - } - } - } -} - -reset_attack_spot() //checked matches cerberus output -{ - if ( isDefined( self.attacking_node ) ) - { - node = self.attacking_node; - index = self.attacking_spot_index; - node.attack_spots_taken[ index ] = 0; - self.attacking_node = undefined; - self.attacking_spot_index = undefined; - } -} - -get_attack_spot( node ) //checked matches cerberus output -{ - index = get_attack_spot_index( node ); - if ( !isDefined( index ) ) - { - return 0; - } - self.attacking_node = node; - self.attacking_spot_index = index; - node.attack_spots_taken[ index ] = 1; - self.attacking_spot = node.attack_spots[ index ]; - return 1; -} - -get_attack_spot_index( node ) //checked changed to match cerberus output -{ - indexes = []; - for ( i = 0; i < node.attack_spots.size; i++ ) - { - if ( !node.attack_spots_taken[ i ] ) - { - indexes[ indexes.size ] = i; - } - } - if ( indexes.size == 0 ) - { - return undefined; - } - return indexes[ randomint( indexes.size ) ]; -} - -zombie_tear_notetracks( msg, chunk, node ) //checked again see info.md No 8. -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( "tear_anim", notetrack ); //fix for the compiler - if ( notetrack == "end" ) - { - return; - } - if ( notetrack == "board" || notetrack == "destroy_piece" || notetrack == "bar" ) - { - if ( isDefined( level.zbarrier_zombie_tear_notetrack_override ) ) - { - self thread [[ level.zbarrier_zombie_tear_notetrack_override ]]( node, chunk ); - } - node.zbarrier setzbarrierpiecestate( chunk, "opening" ); - } - } -} - -zombie_boardtear_offset_fx_horizontle( chunk, node ) //checked changed to match cerberus output -{ - if ( isDefined( chunk.script_parameters ) && chunk.script_parameters == "repair_board" || isDefined( chunk.script_parameters ) && chunk.script_parameters == "board" ) - { - if ( isDefined( chunk.unbroken ) && chunk.unbroken == 1 ) - { - if ( isDefined( chunk.material ) && chunk.material == "glass" ) - { - playfx( level._effect[ "glass_break" ], chunk.origin, node.angles ); - chunk.unbroken = 0; - } - else if ( isDefined( chunk.material ) && chunk.material == "metal" ) - { - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin ); - chunk.unbroken = 0; - } - else if ( isDefined( chunk.material ) && chunk.material == "rock" ) - { - if ( is_true( level.use_clientside_rock_tearin_fx ) ) - { - chunk setclientflag( level._zombie_scriptmover_flag_rock_fx ); - } - else - { - playfx( level._effect[ "wall_break" ], chunk.origin ); - } - chunk.unbroken = 0; - } - } - } - if ( isDefined( chunk.script_parameters ) && chunk.script_parameters == "barricade_vents" ) - { - if ( is_true( level.use_clientside_board_fx ) ) - { - chunk setclientflag( level._zombie_scriptmover_flag_board_horizontal_fx ); - } - else - { - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin ); - } - } - else if ( isDefined( chunk.material ) && chunk.material == "rock" ) - { - if ( is_true( level.use_clientside_rock_tearin_fx ) ) - { - chunk setclientflag( level._zombie_scriptmover_flag_rock_fx ); - } - } - else if ( isDefined( level.use_clientside_board_fx ) ) - { - chunk setclientflag( level._zombie_scriptmover_flag_board_horizontal_fx ); - } - else - { - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( 0, 0, 1 ), 30 ) ); - wait randomfloatrange( 0.2, 0.4 ); - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( 0, 0, -1 ), 30 ) ); - } -} - -zombie_boardtear_offset_fx_verticle( chunk, node ) //checked changed to match cerberus output -{ - if ( ( chunk.script_parameters == "repair_board" || chunk.script_parameters == "board" ) && isDefined( chunk.script_parameters ) ) - { - if ( isDefined( chunk.unbroken ) && chunk.unbroken == 1 ) - { - if ( isDefined( chunk.material ) && chunk.material == "glass" ) - { - playfx( level._effect[ "glass_break" ], chunk.origin, node.angles ); - chunk.unbroken = 0; - } - else if ( isDefined( chunk.material ) && chunk.material == "metal" ) - { - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin ); - chunk.unbroken = 0; - } - else if ( isDefined( chunk.material ) && chunk.material == "rock" ) - { - if ( is_true( level.use_clientside_rock_tearin_fx ) ) - { - chunk setclientflag( level._zombie_scriptmover_flag_rock_fx ); - } - else - { - playfx( level._effect[ "wall_break" ], chunk.origin ); - } - chunk.unbroken = 0; - } - } - } - if ( isDefined( chunk.script_parameters ) && chunk.script_parameters == "barricade_vents" ) - { - if ( isDefined( level.use_clientside_board_fx ) ) - { - chunk setclientflag( level._zombie_scriptmover_flag_board_vertical_fx ); - } - else - { - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin ); - } - } - else if ( isDefined( chunk.material ) && chunk.material == "rock" ) - { - if ( is_true( level.use_clientside_rock_tearin_fx ) ) - { - chunk setclientflag( level._zombie_scriptmover_flag_rock_fx ); - } - return; - } - else if ( isDefined( level.use_clientside_board_fx ) ) - { - chunk setclientflag( level._zombie_scriptmover_flag_board_vertical_fx ); - return; - } - else - { - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( 1, 0, 0 ), 30 ) ); - wait randomfloatrange( 0.2, 0.4 ); - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - } -} - -zombie_bartear_offset_fx_verticle( chunk ) //checked changed to match cerberus output -{ - if ( ( chunk.script_parameters == "bar" || chunk.script_noteworthy == "board" ) && isDefined( chunk.script_parameters ) ) - { - possible_tag_array_1 = []; - possible_tag_array_1[ 0 ] = "Tag_fx_top"; - possible_tag_array_1[ 1 ] = ""; - possible_tag_array_1[ 2 ] = "Tag_fx_top"; - possible_tag_array_1[ 3 ] = ""; - possible_tag_array_2 = []; - possible_tag_array_2[ 0 ] = ""; - possible_tag_array_2[ 1 ] = "Tag_fx_bottom"; - possible_tag_array_2[ 2 ] = ""; - possible_tag_array_2[ 3 ] = "Tag_fx_bottom"; - possible_tag_array_2 = array_randomize( possible_tag_array_2 ); - random_fx = []; - random_fx[ 0 ] = level._effect[ "fx_zombie_bar_break" ]; - random_fx[ 1 ] = level._effect[ "fx_zombie_bar_break_lite" ]; - random_fx[ 2 ] = level._effect[ "fx_zombie_bar_break" ]; - random_fx[ 3 ] = level._effect[ "fx_zombie_bar_break_lite" ]; - random_fx = array_randomize( random_fx ); - switch( randomint( 9 ) ) - { - case 0: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_top" ); - wait randomfloatrange( 0, 0.3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_bottom" ); - break; - case 1: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_top" ); - wait randomfloatrange( 0, 0.3 ); - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_bottom" ); - break; - case 2: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_top" ); - wait randomfloatrange( 0, 0.3 ); - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_bottom" ); - break; - case 3: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_top" ); - wait randomfloatrange( 0, 0.3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_bottom" ); - break; - case 4: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_top" ); - wait randomfloatrange( 0, 0.3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_bottom" ); - break; - case 5: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_top" ); - break; - case 6: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_bottom" ); - break; - case 7: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_top" ); - break; - case 8: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_bottom" ); - break; - } - } -} - -zombie_bartear_offset_fx_horizontle( chunk ) //checked changed to match cerberus output -{ - if ( isDefined( chunk.script_parameters ) && chunk.script_parameters == "bar" || chunk.script_noteworthy == "board" ) - { - switch( randomint( 10 ) ) - { - case 0: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_left" ); - wait randomfloatrange( 0, 0.3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_right" ); - break; - case 1: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_left" ); - wait randomfloatrange( 0, 0.3 ); - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_right" ); - break; - case 2: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_left" ); - wait randomfloatrange( 0, 0.3 ); - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_right" ); - break; - case 3: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_left" ); - wait randomfloatrange( 0, 0.3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_right" ); - break; - case 4: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_left" ); - wait randomfloatrange( 0, 0.3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_right" ); - break; - case 5: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_left" ); - break; - case 6: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_right" ); - break; - case 7: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_right" ); - break; - case 8: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_right" ); - break; - } - } -} - -check_zbarrier_piece_for_zombie_inert( chunk_index, zbarrier, zombie ) //checked matches cerberus output -{ - zombie endon( "completed_emerging_into_playable_area" ); - zombie waittill( "stop_zombie_goto_entrance" ); - if ( zbarrier getzbarrierpiecestate( chunk_index ) == "targetted_by_zombie" ) - { - zbarrier setzbarrierpiecestate( chunk_index, "closed" ); - } -} - -check_zbarrier_piece_for_zombie_death( chunk_index, zbarrier, zombie ) //checked matches cerberus output -{ - while ( 1 ) - { - if ( zbarrier getzbarrierpiecestate( chunk_index ) != "targetted_by_zombie" ) - { - return; - } - if ( !isDefined( zombie ) || !isalive( zombie ) ) - { - zbarrier setzbarrierpiecestate( chunk_index, "closed" ); - return; - } - wait 0.05; - } -} - -check_for_zombie_death( zombie ) //checked matches cerberus output -{ - self endon( "destroyed" ); - wait 2.5; - self maps/mp/zombies/_zm_blockers::update_states( "repaired" ); -} - -zombie_hat_gib( attacker, means_of_death ) //checked matches cerberus output -{ - self endon( "death" ); - if ( !is_mature() ) - { - return 0; - } - if ( is_true( self.hat_gibbed ) ) - { - return; - } - if ( !isDefined( self.gibspawn5 ) || !isDefined( self.gibspawntag5 ) ) - { - return; - } - self.hat_gibbed = 1; - if ( isDefined( self.hatmodel ) ) - { - self detach( self.hatmodel, "" ); - } - temp_array = []; - temp_array[ 0 ] = level._zombie_gib_piece_index_hat; - self gib( "normal", temp_array ); - if ( isDefined( level.track_gibs ) ) - { - level [[ level.track_gibs ]]( self, temp_array ); - } -} - -zombie_head_gib( attacker, means_of_death ) //checked changed to match cerberus output -{ - self endon( "death" ); - if ( !is_mature() ) - { - return 0; - } - if ( is_true( self.head_gibbed ) ) - { - return; - } - self.head_gibbed = 1; - self zombie_eye_glow_stop(); - size = self getattachsize(); - for ( i = 0; i < size; i++ ) - { - model = self getattachmodelname( i ); - if ( issubstr( model, "head" ) ) - { - if ( isDefined( self.hatmodel ) ) - { - self detach( self.hatmodel, "" ); - } - self detach( model, "" ); - if ( isDefined( self.torsodmg5 ) ) - { - self attach( self.torsodmg5, "", 1 ); - } - break; - } - } - temp_array = []; - temp_array[ 0 ] = level._zombie_gib_piece_index_head; - if ( !is_true( self.hat_gibbed ) && isDefined( self.gibspawn5 ) && isDefined( self.gibspawntag5 ) ) - { - temp_array[ 1 ] = level._zombie_gib_piece_index_hat; - } - self.hat_gibbed = 1; - self gib( "normal", temp_array ); - if ( isDefined( level.track_gibs ) ) - { - level [[ level.track_gibs ]]( self, temp_array ); - } - self thread damage_over_time( ceil( self.health * 0.2 ), 1, attacker, means_of_death ); -} - -damage_over_time( dmg, delay, attacker, means_of_death ) //checked matches cerberus output -{ - self endon( "death" ); - self endon( "exploding" ); - if ( !isalive( self ) ) - { - return; - } - if ( !isplayer( attacker ) ) - { - attacker = self; - } - if ( !isDefined( means_of_death ) ) - { - means_of_death = "MOD_UNKNOWN"; - } - while ( 1 ) - { - if ( isDefined( delay ) ) - { - wait delay; - } - if ( isDefined( self ) ) - { - self dodamage( dmg, self gettagorigin( "j_neck" ), attacker, self, self.damagelocation, means_of_death, 0, self.damageweapon ); - } - } -} - -head_should_gib( attacker, type, point ) //checked changed to match cerberus output -{ - if ( !is_mature() ) - { - return 0; - } - if ( self.head_gibbed ) - { - return 0; - } - if ( !isDefined( attacker ) || !isplayer( attacker ) ) - { - return 0; - } - weapon = attacker getcurrentweapon(); - if ( type != "MOD_RIFLE_BULLET" && type != "MOD_PISTOL_BULLET" ) - { - if ( type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" ) - { - if ( distance( point, self gettagorigin( "j_head" ) ) > 55 ) - { - return 0; - } - else - { - return 1; - } - } - else if ( type == "MOD_PROJECTILE" ) - { - if ( distance( point, self gettagorigin( "j_head" ) ) > 10 ) - { - return 0; - } - else - { - return 1; - } - } - else if ( weaponclass( weapon ) != "spread" ) - { - return 0; - } - } - if ( !self maps/mp/animscripts/zm_utility::damagelocationisany( "head", "helmet", "neck" ) ) - { - return 0; - } - if ( weapon == "none" || weapon == level.start_weapon || weaponisgasweapon( self.weapon ) ) - { - return 0; - } - low_health_percent = ( self.health / self.maxhealth ) * 100; - if ( low_health_percent > 10 ) - { - self zombie_hat_gib( attacker, type ); - return 0; - } - return 1; -} - -headshot_blood_fx() //checked matches cerberus output -{ - if ( !isDefined( self ) ) - { - return; - } - if ( !is_mature() ) - { - return; - } - fxtag = "j_neck"; - fxorigin = self gettagorigin( fxtag ); - upvec = anglesToUp( self gettagangles( fxtag ) ); - forwardvec = anglesToForward( self gettagangles( fxtag ) ); - playfx( level._effect[ "headshot" ], fxorigin, forwardvec, upvec ); - playfx( level._effect[ "headshot_nochunks" ], fxorigin, forwardvec, upvec ); - wait 0.3; - if ( isDefined( self ) ) - { - playfxontag( level._effect[ "bloodspurt" ], self, fxtag ); - } -} - -zombie_gib_on_damage() //checked changed to match cerberus output -{ - - while ( 1 ) - { - self waittill( "damage", amount, attacker, direction_vec, point, type, tagname, modelname, partname, weaponname ); - if ( !isDefined( self ) ) - { - return; - } - if ( !self zombie_should_gib( amount, attacker, type ) ) - { - continue; - } - if ( self head_should_gib( attacker, type, point ) && type != "MOD_BURNED" ) - { - self zombie_head_gib( attacker, type ); - continue; //added from cerberus output - } - if ( !self.gibbed ) - { - if ( self maps/mp/animscripts/zm_utility::damagelocationisany( "head", "helmet", "neck" ) ) - { - continue; - } - refs = []; - switch( self.damagelocation ) - { - case "torso_lower": - case "torso_upper": - refs[ refs.size ] = "guts"; - refs[ refs.size ] = "right_arm"; - break; - case "right_arm_lower": - case "right_arm_upper": - case "right_hand": - refs[ refs.size ] = "right_arm"; - break; - case "left_arm_lower": - case "left_arm_upper": - case "left_hand": - refs[ refs.size ] = "left_arm"; - break; - case "right_foot": - case "right_leg_lower": - case "right_leg_upper": - if ( self.health <= 0 ) - { - refs[ refs.size ] = "right_leg"; - refs[ refs.size ] = "right_leg"; - refs[ refs.size ] = "right_leg"; - refs[ refs.size ] = "no_legs"; - } - break; - case "left_foot": - case "left_leg_lower": - case "left_leg_upper": - if ( self.health <= 0 ) - { - refs[ refs.size ] = "left_leg"; - refs[ refs.size ] = "left_leg"; - refs[ refs.size ] = "left_leg"; - refs[ refs.size ] = "no_legs"; - } - break; - default: - if ( self.damagelocation == "none" ) - { - if ( type != "MOD_GRENADE" && type != "MOD_GRENADE_SPLASH" || type == "MOD_PROJECTILE" && type == "MOD_PROJECTILE_SPLASH" ) - { - refs = self derive_damage_refs( point ); - break; - } - } - else - { - refs[ refs.size ] = "guts"; - refs[ refs.size ] = "right_arm"; - refs[ refs.size ] = "left_arm"; - refs[ refs.size ] = "right_leg"; - refs[ refs.size ] = "left_leg"; - refs[ refs.size ] = "no_legs"; - break; - } - } - } - if ( isDefined( level.custom_derive_damage_refs ) ) - { - refs = self [[ level.custom_derive_damage_refs ]]( refs, point, weaponname ); - } - if ( refs.size ) - { - self.a.gib_ref = maps/mp/animscripts/zm_death::get_random( refs ); - if ( self.a.gib_ref == "no_legs" && self.health > 0 || self.a.gib_ref == "right_leg" && self.health > 0 || self.a.gib_ref == "left_leg" && self.health > 0 ) - { - self.has_legs = 0; - self allowedstances( "crouch" ); - self setphysparams( 15, 0, 24 ); - self allowpitchangle( 1 ); - self setpitchorient(); - health = self.health; - health *= 0.1; - self thread maps/mp/animscripts/zm_run::needsdelayedupdate(); - if ( isDefined( self.crawl_anim_override ) ) - { - self [[ self.crawl_anim_override ]](); - } - } - } - if ( self.health > 0 ) - { - self thread maps/mp/animscripts/zm_death::do_gib(); - if ( isDefined( level.gib_on_damage ) ) - { - self thread [[ level.gib_on_damage ]](); - } - } - } -} - -zombie_should_gib( amount, attacker, type ) //checked changed to match cerberus output -{ - if ( !is_mature() ) - { - return 0; - } - if ( !isDefined( type ) ) - { - return 0; - } - if ( is_true( self.is_on_fire ) ) - { - return 0; - } - if ( isDefined( self.no_gib ) && self.no_gib == 1 ) - { - return 0; - } - switch( type ) - { - case "MOD_BURNED": - case "MOD_CRUSH": - case "MOD_FALLING": - case "MOD_SUICIDE": - case "MOD_TELEFRAG": - case "MOD_TRIGGER_HURT": - case "MOD_UNKNOWN": - return 0; - case "MOD_MELEE": - return 0; - } - if ( type == "MOD_PISTOL_BULLET" || type == "MOD_RIFLE_BULLET" ) - { - if ( !isDefined( attacker ) || !isplayer( attacker ) ) - { - return 0; - } - weapon = attacker getcurrentweapon(); - if ( weapon == "none" || weapon == level.start_weapon ) - { - return 0; - } - if ( weaponisgasweapon( self.weapon ) ) - { - return 0; - } - } - else if ( type == "MOD_PROJECTILE" ) - { - if ( isDefined( attacker ) && isplayer( attacker ) ) - { - weapon = attacker getcurrentweapon(); - if ( weapon == "slipgun_zm" || weapon == "slipgun_upgraded_zm" ) - { - return 0; - } - } - } - prev_health = amount + self.health; - if ( prev_health <= 0 ) - { - prev_health = 1; - } - damage_percent = ( amount / prev_health ) * 100; - if ( damage_percent < 10 ) - { - return 0; - } - return 1; -} - -derive_damage_refs( point ) //checked changed to match cerberus output -{ - if ( !isDefined( level.gib_tags ) ) - { - init_gib_tags(); - } - closesttag = undefined; - i = 0; - while ( i < level.gib_tags.size ) - { - if ( !isDefined( closesttag ) ) - { - closesttag = level.gib_tags[ i ]; - i++; - continue; - } - if ( distancesquared( point, self gettagorigin( level.gib_tags[ i ] ) ) < distancesquared( point, self gettagorigin( closesttag ) ) ) - { - closesttag = level.gib_tags[ i ]; - } - i++; - } - refs = []; - if ( closesttag != "J_SpineLower" || closesttag == "J_SpineUpper" || closesttag == "J_Spine4" ) - { - refs[ refs.size ] = "guts"; - refs[ refs.size ] = "right_arm"; - } - else if ( closesttag != "J_Shoulder_LE" || closesttag == "J_Elbow_LE" && closesttag == "J_Wrist_LE" ) - { - refs[ refs.size ] = "left_arm"; - } - else if ( closesttag != "J_Shoulder_RI" || closesttag == "J_Elbow_RI" && closesttag == "J_Wrist_RI" ) - { - refs[ refs.size ] = "right_arm"; - } - else if ( closesttag != "J_Hip_LE" || closesttag == "J_Knee_LE" && closesttag == "J_Ankle_LE" ) - { - refs[ refs.size ] = "left_leg"; - refs[ refs.size ] = "no_legs"; - } - else if ( closesttag != "J_Hip_RI" || closesttag == "J_Knee_RI" && closesttag == "J_Ankle_RI" ) - { - refs[ refs.size ] = "right_leg"; - refs[ refs.size ] = "no_legs"; - } - /* -/# - assert( array_validate( refs ), "get_closest_damage_refs(): couldn't derive refs from closestTag " + closesttag ); -#/ - */ - return refs; -} - -init_gib_tags() //checked matches cerberus output -{ - tags = []; - tags[ tags.size ] = "J_SpineLower"; - tags[ tags.size ] = "J_SpineUpper"; - tags[ tags.size ] = "J_Spine4"; - tags[ tags.size ] = "J_Shoulder_LE"; - tags[ tags.size ] = "J_Elbow_LE"; - tags[ tags.size ] = "J_Wrist_LE"; - tags[ tags.size ] = "J_Shoulder_RI"; - tags[ tags.size ] = "J_Elbow_RI"; - tags[ tags.size ] = "J_Wrist_RI"; - tags[ tags.size ] = "J_Hip_LE"; - tags[ tags.size ] = "J_Knee_LE"; - tags[ tags.size ] = "J_Ankle_LE"; - tags[ tags.size ] = "J_Hip_RI"; - tags[ tags.size ] = "J_Knee_RI"; - tags[ tags.size ] = "J_Ankle_RI"; - level.gib_tags = tags; -} - -zombie_can_drop_powerups( zombie ) //checked matches cerberus output -{ - if ( is_tactical_grenade( zombie.damageweapon ) || !flag( "zombie_drop_powerups" ) ) - { - return 0; - } - if ( is_true( zombie.no_powerups ) ) - { - return 0; - } - return 1; -} - -zombie_delay_powerup_drop( origin ) //checked matches cerberus output -{ - wait_network_frame(); - level thread maps/mp/zombies/_zm_powerups::powerup_drop( origin ); -} - -zombie_death_points( origin, mod, hit_location, attacker, zombie, team ) //checked matches cerberus output -{ - if ( !isDefined( attacker ) || !isplayer( attacker ) ) - { - return; - } - if ( zombie_can_drop_powerups( zombie ) ) - { - if ( isDefined( zombie.in_the_ground ) && zombie.in_the_ground == 1 ) - { - trace = bullettrace( zombie.origin + vectorScale( ( 0, 0, 1 ), 100 ), zombie.origin + vectorScale( ( 0, 0, 0 ), -100 ), 0, undefined ); - origin = trace[ "position" ]; - level thread zombie_delay_powerup_drop( origin ); - } - else - { - trace = groundtrace( zombie.origin + vectorScale( ( 0, 0, 1 ), 5 ), zombie.origin + vectorScale( ( 0, 0, 0 ), -300 ), 0, undefined ); - origin = trace[ "position" ]; - level thread zombie_delay_powerup_drop( origin ); - } - } - level thread maps/mp/zombies/_zm_audio::player_zombie_kill_vox( hit_location, attacker, mod, zombie ); - event = "death"; - if ( isDefined( zombie.damageweapon ) && issubstr( zombie.damageweapon, "knife_ballistic_" ) || mod == "MOD_MELEE" && mod == "MOD_IMPACT" ) - { - event = "ballistic_knife_death"; - } - if ( is_true( zombie.deathpoints_already_given ) ) - { - return; - } - zombie.deathpoints_already_given = 1; - if ( isDefined( zombie.damageweapon ) && is_equipment( zombie.damageweapon ) ) - { - return; - } - attacker maps/mp/zombies/_zm_score::player_add_points( event, mod, hit_location, undefined, team, attacker.currentweapon ); -} - -get_number_variants( aliasprefix ) //checked matches cerberus output -{ - for ( i = 0; i < 100; i++ ) - { - if ( !soundexists( aliasprefix + "_" + i ) ) - { - return i; - } - } -} - -dragons_breath_flame_death_fx() //checked matches cerberus output -{ - if ( self.isdog ) - { - return; - } - if ( !isDefined( level._effect ) || !isDefined( level._effect[ "character_fire_death_sm" ] ) ) - { - /* -/# - println( "^3ANIMSCRIPT WARNING: You are missing level._effect["character_fire_death_sm"], please set it in your levelname_fx.gsc. Use "env/fire/fx_fire_zombie_md"" ); -#/ - */ - return; - } - playfxontag( level._effect[ "character_fire_death_sm" ], self, "J_SpineLower" ); - tagarray = []; - if ( !isDefined( self.a.gib_ref ) || self.a.gib_ref != "left_arm" ) - { - tagarray[ tagarray.size ] = "J_Elbow_LE"; - tagarray[ tagarray.size ] = "J_Wrist_LE"; - } - if ( !isDefined( self.a.gib_ref ) || self.a.gib_ref != "right_arm" ) - { - tagarray[ tagarray.size ] = "J_Elbow_RI"; - tagarray[ tagarray.size ] = "J_Wrist_RI"; - } - if ( !isDefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" && self.a.gib_ref != "left_leg" ) - { - tagarray[ tagarray.size ] = "J_Knee_LE"; - tagarray[ tagarray.size ] = "J_Ankle_LE"; - } - if ( !isDefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" && self.a.gib_ref != "right_leg" ) - { - tagarray[ tagarray.size ] = "J_Knee_RI"; - tagarray[ tagarray.size ] = "J_Ankle_RI"; - } - tagarray = array_randomize( tagarray ); - playfxontag( level._effect[ "character_fire_death_sm" ], self, tagarray[ 0 ] ); -} - -zombie_ragdoll_then_explode( launchvector, attacker ) //checked changed to match cerberus output -{ - if ( !isDefined( self ) ) - { - return; - } - self zombie_eye_glow_stop(); - self setclientfield( "zombie_ragdoll_explode", 1 ); - self notify( "exploding" ); - self notify( "end_melee" ); - self notify( "death", attacker ); - self.dont_die_on_me = 1; - self.exploding = 1; - self.a.nodeath = 1; - self.dont_throw_gib = 1; - self startragdoll(); - self setplayercollision( 0 ); - self reset_attack_spot(); - if ( isDefined( launchvector ) ) - { - self launchragdoll( launchvector ); - } - wait 2.1; - if ( isDefined( self ) ) - { - self ghost(); - self delay_thread( 0.25, ::self_delete ); - } -} - -zombie_death_animscript() //checked changed to match cerberus output -{ - team = undefined; - recalc_zombie_array(); - if ( isDefined( self._race_team ) ) - { - team = self._race_team; - } - self reset_attack_spot(); - if ( self check_zombie_death_animscript_callbacks() ) - { - return 0; - } - if ( isDefined( level.zombie_death_animscript_override ) ) - { - self [[ level.zombie_death_animscript_override ]](); - } - if ( self.has_legs && isDefined( self.a.gib_ref ) && self.a.gib_ref == "no_legs" ) - { - self.deathanim = "zm_death"; - } - self.grenadeammo = 0; - if ( isDefined( self.nuked ) ) - { - if ( zombie_can_drop_powerups( self ) ) - { - if ( isDefined( self.in_the_ground ) && self.in_the_ground == 1 ) - { - trace = bullettrace( self.origin + vectorScale( ( 0, 0, 1 ), 100 ), self.origin + vectorScale( ( 0, 0, 0 ), -100 ), 0, undefined ); - origin = trace[ "position" ]; - level thread zombie_delay_powerup_drop( origin ); - } - else - { - trace = groundtrace( self.origin + vectorScale( ( 0, 0, 1 ), 5 ), self.origin + vectorScale( ( 0, 0, 0 ), -300 ), 0, undefined ); - origin = trace[ "position" ]; - level thread zombie_delay_powerup_drop( self.origin ); - } - } - } - else - { - level zombie_death_points( self.origin, self.damagemod, self.damagelocation, self.attacker, self, team ); - } - if ( isDefined( self.attacker ) && isai( self.attacker ) ) - { - self.attacker notify( "killed", self ); - } - if ( self.damageweapon == "rottweil72_upgraded_zm" && self.damagemod == "MOD_RIFLE_BULLET" ) - { - self thread dragons_breath_flame_death_fx(); - } - if ( self.damageweapon == "tazer_knuckles_zm" && self.damagemod == "MOD_MELEE" ) - { - self.is_on_fire = 0; - self notify( "stop_flame_damage" ); - } - if ( self.damagemod == "MOD_BURNED" ) - { - self thread maps/mp/animscripts/zm_death::flame_death_fx(); - } - if ( self.damagemod == "MOD_GRENADE" || self.damagemod == "MOD_GRENADE_SPLASH" ) - { - level notify( "zombie_grenade_death", self.origin ); - } - return 0; -} - -check_zombie_death_animscript_callbacks() //checked changed to match cerberus output -{ - if ( !isDefined( level.zombie_death_animscript_callbacks ) ) - { - return 0; - } - for ( i = 0; i < level.zombie_death_animscript_callbacks.size; i++ ) - { - if ( self [[ level.zombie_death_animscript_callbacks[ i ] ]]() ) - { - return 1; - } - } - return 0; -} - -register_zombie_death_animscript_callback( func ) //checked matches cerberus output -{ - if ( !isDefined( level.zombie_death_animscript_callbacks ) ) - { - level.zombie_death_animscript_callbacks = []; - } - level.zombie_death_animscript_callbacks[ level.zombie_death_animscript_callbacks.size ] = func; -} - -damage_on_fire( player ) //checked matches cerberus output -{ - self endon( "death" ); - self endon( "stop_flame_damage" ); - wait 2; - while ( is_true( self.is_on_fire ) ) - { - if ( level.round_number < 6 ) - { - dmg = level.zombie_health * randomfloatrange( 0.2, 0.3 ); - } - else if ( level.round_number < 9 ) - { - dmg = level.zombie_health * randomfloatrange( 0.15, 0.25 ); - } - else if ( level.round_number < 11 ) - { - dmg = level.zombie_health * randomfloatrange( 0.1, 0.2 ); - } - else - { - dmg = level.zombie_health * randomfloatrange( 0.1, 0.15 ); - } - if ( isDefined( player ) && isalive( player ) ) - { - self dodamage( dmg, self.origin, player ); - } - else - { - self dodamage( dmg, self.origin, level ); - } - wait randomfloatrange( 1, 3 ); - } -} - -player_using_hi_score_weapon( player ) //checked matches cerberus output -{ - weapon = player getcurrentweapon(); - if ( weapon == "none" || weaponissemiauto( weapon ) ) - { - return 1; - } - return 0; -} - -zombie_damage( mod, hit_location, hit_origin, player, amount, team ) //checked changed to match cerberus output -{ - if ( is_magic_bullet_shield_enabled( self ) ) - { - return; - } - player.use_weapon_type = mod; - if ( isDefined( self.marked_for_death ) ) - { - return; - } - if ( !isDefined( player ) ) - { - return; - } - if ( isDefined( hit_origin ) ) - { - self.damagehit_origin = hit_origin; - } - else - { - self.damagehit_origin = player getweaponmuzzlepoint(); - } - if ( self check_zombie_damage_callbacks( mod, hit_location, hit_origin, player, amount ) ) - { - return; - } - else if ( self zombie_flame_damage( mod, player ) ) - { - if ( self zombie_give_flame_damage_points() ) - { - player maps/mp/zombies/_zm_score::player_add_points( "damage", mod, hit_location, self.isdog, team ); - } - } - else if ( player_using_hi_score_weapon( player ) ) - { - damage_type = "damage"; - } - else - { - damage_type = "damage_light"; - } - if ( !is_true( self.no_damage_points ) ) - { - player maps/mp/zombies/_zm_score::player_add_points( damage_type, mod, hit_location, self.isdog, team, self.damageweapon ); - } - if ( isDefined( self.zombie_damage_fx_func ) ) - { - self [[ self.zombie_damage_fx_func ]]( mod, hit_location, hit_origin, player ); - } - modname = remove_mod_from_methodofdeath( mod ); - if ( is_placeable_mine( self.damageweapon ) ) - { - if ( isDefined( self.zombie_damage_claymore_func ) ) - { - self [[ self.zombie_damage_claymore_func ]]( mod, hit_location, hit_origin, player ); - } - else if ( isDefined( player ) && isalive( player ) ) - { - self dodamage( level.round_number * randomintrange( 100, 200 ), self.origin, player, self, hit_location, mod ); - } - else - { - self dodamage( level.round_number * randomintrange( 100, 200 ), self.origin, undefined, self, hit_location, mod ); - } - } - else if ( mod == "MOD_GRENADE" || mod == "MOD_GRENADE_SPLASH" ) - { - if ( isDefined( player ) && isalive( player ) ) - { - player.grenade_multiattack_count++; - player.grenade_multiattack_ent = self; - self dodamage( level.round_number + randomintrange( 100, 200 ), self.origin, player, self, hit_location, modname ); - } - else - { - self dodamage( level.round_number + randomintrange( 100, 200 ), self.origin, undefined, self, hit_location, modname ); - } - } - else if ( mod != "MOD_PROJECTILE" || mod == "MOD_EXPLOSIVE" && mod == "MOD_PROJECTILE_SPLASH" ) - { - if ( isDefined( player ) && isalive( player ) ) - { - self dodamage( level.round_number * randomintrange( 0, 100 ), self.origin, player, self, hit_location, modname ); - } - else - { - self dodamage( level.round_number * randomintrange( 0, 100 ), self.origin, undefined, self, hit_location, modname ); - } - } - if ( isDefined( self.a.gib_ref ) && self.a.gib_ref == "no_legs" && isalive( self ) ) - { - if ( isDefined( player ) ) - { - rand = randomintrange( 0, 100 ); - if ( rand < 10 ) - { - player create_and_play_dialog( "general", "crawl_spawn" ); - } - } - } - else if ( isDefined( self.a.gib_ref ) || self.a.gib_ref == "right_arm" && self.a.gib_ref == "left_arm" ) - { - if ( self.has_legs && isalive( self ) ) - { - if ( isDefined( player ) ) - { - rand = randomintrange( 0, 100 ); - if ( rand < 7 ) - { - player create_and_play_dialog( "general", "shoot_arm" ); - } - } - } - } - self thread maps/mp/zombies/_zm_powerups::check_for_instakill( player, mod, hit_location ); -} - -zombie_damage_ads( mod, hit_location, hit_origin, player, amount, team ) //checked changed to match cerberus output -{ - if ( is_magic_bullet_shield_enabled( self ) ) - { - return; - } - player.use_weapon_type = mod; - if ( !isDefined( player ) ) - { - return; - } - if ( isDefined( hit_origin ) ) - { - self.damagehit_origin = hit_origin; - } - else - { - self.damagehit_origin = player getweaponmuzzlepoint(); - } - if ( self check_zombie_damage_callbacks( mod, hit_location, hit_origin, player, amount ) ) - { - return; - } - else if ( self zombie_flame_damage( mod, player ) ) - { - if ( self zombie_give_flame_damage_points() ) - { - player maps/mp/zombies/_zm_score::player_add_points( "damage_ads", mod, hit_location, undefined, team ); - } - } - else if ( player_using_hi_score_weapon( player ) ) - { - damage_type = "damage"; - } - else - { - damage_type = "damage_light"; - } - if ( !is_true( self.no_damage_points ) ) - { - player maps/mp/zombies/_zm_score::player_add_points( damage_type, mod, hit_location, undefined, team, self.damageweapon ); - } - self thread maps/mp/zombies/_zm_powerups::check_for_instakill( player, mod, hit_location ); -} - -check_zombie_damage_callbacks( mod, hit_location, hit_origin, player, amount ) //checked changed to match cerberus output -{ - if ( !isDefined( level.zombie_damage_callbacks ) ) - { - return 0; - } - for ( i = 0; i < level.zombie_damage_callbacks.size; i++ ) - { - if ( self [[ level.zombie_damage_callbacks[ i ] ]]( mod, hit_location, hit_origin, player, amount ) ) - { - return 1; - } - } - return 0; -} - -register_zombie_damage_callback( func ) //checked matches cerberus output -{ - if ( !isDefined( level.zombie_damage_callbacks ) ) - { - level.zombie_damage_callbacks = []; - } - level.zombie_damage_callbacks[ level.zombie_damage_callbacks.size ] = func; -} - -zombie_give_flame_damage_points() //checked matches cerberus output -{ - if ( getTime() > self.flame_damage_time ) - { - self.flame_damage_time = getTime() + level.zombie_vars[ "zombie_flame_dmg_point_delay" ]; - return 1; - } - return 0; -} - -zombie_flame_damage( mod, player ) //checked changed to match cerberus output -{ - if ( mod == "MOD_BURNED" ) - { - if ( !is_true( self.is_on_fire ) ) - { - self thread damage_on_fire( player ); - } - do_flame_death = 1; - dist = 10000; - ai = getaiarray( level.zombie_team ); - for ( i = 0; i < ai.size; i++ ) - { - if ( is_true( ai[ i ].is_on_fire ) ) - { - if ( distancesquared( ai[ i ].origin, self.origin ) < dist ) - { - do_flame_death = 0; - break; - } - } - } - if ( do_flame_death ) - { - self thread maps/mp/animscripts/zm_death::flame_death_fx(); - } - return 1; - } - return 0; -} - -is_weapon_shotgun( sweapon ) //checked matches cerberus output -{ - if ( isDefined( sweapon ) && weaponclass( sweapon ) == "spread" ) - { - return 1; - } - return 0; -} - -zombie_death_event( zombie ) //checked changed to match cerberus output -{ - zombie.marked_for_recycle = 0; - force_explode = 0; - force_head_gib = 0; - zombie waittill( "death", attacker ); - time_of_death = getTime(); - if ( isDefined( zombie ) ) - { - zombie stopsounds(); - } - if ( isDefined( zombie ) && isDefined( zombie.marked_for_insta_upgraded_death ) ) - { - force_head_gib = 1; - } - if ( !isDefined( zombie.damagehit_origin ) && isDefined( attacker ) ) - { - zombie.damagehit_origin = attacker getweaponmuzzlepoint(); - } - if ( isDefined( attacker ) && isplayer( attacker ) ) - { - if ( is_true( level.pers_upgrade_carpenter ) ) - { - maps/mp/zombies/_zm_pers_upgrades::pers_zombie_death_location_check( attacker, zombie.origin ); - } - if ( is_true( level.pers_upgrade_sniper ) ) - { - attacker pers_upgrade_sniper_kill_check( zombie, attacker ); - } - if ( isDefined( zombie ) && isDefined( zombie.damagelocation ) ) - { - if ( is_headshot( zombie.damageweapon, zombie.damagelocation, zombie.damagemod ) ) - { - attacker.headshots++; - attacker maps/mp/zombies/_zm_stats::increment_client_stat( "headshots" ); - attacker addweaponstat( zombie.damageweapon, "headshots", 1 ); - attacker maps/mp/zombies/_zm_stats::increment_player_stat( "headshots" ); - if ( is_classic() ) - { - attacker maps/mp/zombies/_zm_pers_upgrades_functions::pers_check_for_pers_headshot( time_of_death, zombie ); - } - } - else - { - attacker notify( "zombie_death_no_headshot" ); - } - } - if ( isDefined( zombie ) && isDefined( zombie.damagemod ) && zombie.damagemod == "MOD_MELEE" ) - { - attacker maps/mp/zombies/_zm_stats::increment_client_stat( "melee_kills" ); - attacker maps/mp/zombies/_zm_stats::increment_player_stat( "melee_kills" ); - attacker notify( "melee_kill" ); - if ( attacker maps/mp/zombies/_zm_pers_upgrades::is_insta_kill_upgraded_and_active() ) - { - force_explode = 1; - } - } - attacker maps/mp/zombies/_zm::add_rampage_bookmark_kill_time(); - attacker.kills++; - attacker maps/mp/zombies/_zm_stats::increment_client_stat( "kills" ); - attacker maps/mp/zombies/_zm_stats::increment_player_stat( "kills" ); - if ( is_true( level.pers_upgrade_pistol_points ) ) - { - attacker maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_pistol_points_kill(); - } - dmgweapon = zombie.damageweapon; - if ( is_alt_weapon( dmgweapon ) ) - { - dmgweapon = weaponaltweaponname( dmgweapon ); - } - attacker addweaponstat( dmgweapon, "kills", 1 ); - if ( attacker maps/mp/zombies/_zm_pers_upgrades_functions::pers_mulit_kill_headshot_active() || force_head_gib ) - { - zombie maps/mp/zombies/_zm_spawner::zombie_head_gib(); - } - if ( is_true( level.pers_upgrade_nube ) ) - { - attacker notify( "pers_player_zombie_kill" ); - } - } - zombie_death_achievement_sliquifier_check( attacker, zombie ); - recalc_zombie_array(); - if ( !isDefined( zombie ) ) - { - return; - } - level.global_zombies_killed++; - if ( isDefined( zombie.marked_for_death ) && !isDefined( zombie.nuked ) ) - { - level.zombie_trap_killed_count++; - } - zombie check_zombie_death_event_callbacks(); - name = zombie.animname; - if ( isDefined( zombie.sndname ) ) - { - name = zombie.sndname; - } - zombie thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "death", name ); - zombie thread zombie_eye_glow_stop(); - if ( isDefined( zombie.damageweapon ) && is_weapon_shotgun( zombie.damageweapon ) && !maps/mp/zombies/_zm_weapons::is_weapon_upgraded( zombie.damageweapon ) || isDefined( zombie.damageweapon ) && is_placeable_mine( zombie.damageweapon ) || zombie.damagemod == "MOD_GRENADE" || zombie.damagemod == "MOD_GRENADE_SPLASH" || zombie.damagemod == "MOD_EXPLOSIVE" || force_explode == 1 ) - { - splode_dist = 180; - if ( isDefined( zombie.damagehit_origin ) && distancesquared( zombie.origin, zombie.damagehit_origin ) < ( splode_dist * splode_dist ) ) - { - tag = "J_SpineLower"; - if ( is_true( zombie.isdog ) ) - { - tag = "tag_origin"; - } - if ( !is_true( zombie.is_on_fire ) && !is_true( zombie.guts_explosion ) ) - { - zombie thread zombie_gut_explosion(); - } - } - } - if ( zombie.damagemod == "MOD_GRENADE" || zombie.damagemod == "MOD_GRENADE_SPLASH" ) - { - if ( isDefined( attacker ) && isalive( attacker ) ) - { - attacker.grenade_multiattack_count++; - attacker.grenade_multiattack_ent = zombie; - } - } - if ( !is_true( zombie.has_been_damaged_by_player ) && is_true( zombie.marked_for_recycle ) ) - { - level.zombie_total++; - level.zombie_total_subtract++; - } - else if ( isDefined( zombie.attacker ) && isplayer( zombie.attacker ) ) - { - level.zombie_player_killed_count++; - if ( isDefined( zombie.sound_damage_player ) && zombie.sound_damage_player == zombie.attacker ) - { - chance = get_response_chance( "damage" ); - if ( chance != 0 ) - { - if ( chance > randomintrange( 1, 100 ) ) - { - zombie.attacker maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "damage" ); - } - } - else - { - zombie.attacker maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "damage" ); - } - } - zombie.attacker notify( "zom_kill", zombie ); - damageloc = zombie.damagelocation; - damagemod = zombie.damagemod; - attacker = zombie.attacker; - weapon = zombie.damageweapon; - bbprint( "zombie_kills", "round %d zombietype %s damagetype %s damagelocation %s playername %s playerweapon %s playerx %f playery %f playerz %f zombiex %f zombiey %f zombiez %f", level.round_number, zombie.animname, damagemod, damageloc, attacker.name, weapon, attacker.origin, zombie.origin ); - } - else if ( zombie.ignoreall && !is_true( zombie.marked_for_death ) ) - { - level.zombies_timeout_spawn++; - } - level notify( "zom_kill" ); - level.total_zombies_killed++; -} - -zombie_gut_explosion() //checked matches cerberus output -{ - self.guts_explosion = 1; - if ( is_mature() ) - { - self setclientfield( "zombie_gut_explosion", 1 ); - } - if ( !is_true( self.isdog ) ) - { - wait 0.1; - } - if ( isDefined( self ) ) - { - self ghost(); - } -} - -zombie_death_achievement_sliquifier_check( e_player, e_zombie ) //checked matches cerberus output -{ - if ( !isplayer( e_player ) ) - { - return; - } - if ( isDefined( e_zombie ) ) - { - if ( isDefined( e_zombie.damageweapon ) && e_zombie.damageweapon == "slipgun_zm" ) - { - if ( !isDefined( e_player.num_sliquifier_kills ) ) - { - e_player.num_sliquifier_kills = 0; - } - e_player.num_sliquifier_kills++; - e_player notify( "sliquifier_kill" ); - } - } -} - -check_zombie_death_event_callbacks() //checked changed to match cerberus output -{ - if ( !isDefined( level.zombie_death_event_callbacks ) ) - { - return; - } - for ( i = 0; i < level.zombie_death_event_callbacks.size; i++ ) - { - self [[ level.zombie_death_event_callbacks[ i ] ]](); - } -} - -register_zombie_death_event_callback( func ) //checked matches cerberus output -{ - if ( !isDefined( level.zombie_death_event_callbacks ) ) - { - level.zombie_death_event_callbacks = []; - } - level.zombie_death_event_callbacks[ level.zombie_death_event_callbacks.size ] = func; -} - -deregister_zombie_death_event_callback( func ) //checked matches cerberus output -{ - if ( isDefined( level.zombie_death_event_callbacks ) ) - { - arrayremovevalue( level.zombie_death_event_callbacks, func ); - } -} - -zombie_setup_attack_properties() //checked matches cerberus output -{ - self zombie_history( "zombie_setup_attack_properties()" ); - self.ignoreall = 0; - self.pathenemyfightdist = 64; - self.meleeattackdist = 64; - self.maxsightdistsqrd = 16384; - self.disablearrivals = 1; - self.disableexits = 1; -} - -attractors_generated_listener() //checked matches cerberus output -{ - self endon( "death" ); - level endon( "intermission" ); - self endon( "stop_find_flesh" ); - self endon( "path_timer_done" ); - level waittill( "attractor_positions_generated" ); - self.zombie_path_timer = 0; -} - -zombie_pathing() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "zombie_acquire_enemy" ); - level endon( "intermission" ); - /* -/# - if ( !isDefined( self.favoriteenemy ) ) - { - assert( isDefined( self.enemyoverride ) ); - } -#/ - */ - self._skip_pathing_first_delay = 1; - self thread zombie_follow_enemy(); - self waittill( "bad_path" ); - level.zombie_pathing_failed++; - if ( isDefined( self.enemyoverride ) ) - { - //debug_print( "Zombie couldn't path to point of interest at origin: " + self.enemyoverride[ 0 ] + " Falling back to breadcrumb system" ); - if ( isDefined( self.enemyoverride[ 1 ] ) ) - { - self.enemyoverride = self.enemyoverride[ 1 ] invalidate_attractor_pos( self.enemyoverride, self ); - self.zombie_path_timer = 0; - return; - } - } - else if ( isDefined( self.favoriteenemy ) ) - { - //debug_print( "Zombie couldn't path to player at origin: " + self.favoriteenemy.origin + " Falling back to breadcrumb system" ); - } - else - { - //debug_print( "Zombie couldn't path to a player ( the other 'prefered' player might be ignored for encounters mode ). Falling back to breadcrumb system" ); - } - if ( !isDefined( self.favoriteenemy ) ) - { - self.zombie_path_timer = 0; - return; - } - else - { - self.favoriteenemy endon( "disconnect" ); - } - players = get_players(); - valid_player_num = 0; - for ( i = 0; i < players.size; i++ ) - { - if ( is_player_valid( players[ i ], 1 ) ) - { - valid_player_num += 1; - } - } - if ( players.size > 1 ) - { - if ( isDefined( level._should_skip_ignore_player_logic ) && [[ level._should_skip_ignore_player_logic ]]() ) - { - self.zombie_path_timer = 0; - return; - } - if ( array_check_for_dupes( self.ignore_player, self.favoriteenemy ) ) - { - self.ignore_player[ self.ignore_player.size ] = self.favoriteenemy; - } - if ( self.ignore_player.size < valid_player_num ) - { - self.zombie_path_timer = 0; - return; - } - } - crumb_list = self.favoriteenemy.zombie_breadcrumbs; - bad_crumbs = []; - while ( 1 ) - { - if ( !is_player_valid( self.favoriteenemy, 1 ) ) - { - self.zombie_path_timer = 0; - return; - } - goal = zombie_pathing_get_breadcrumb( self.favoriteenemy.origin, crumb_list, bad_crumbs, randomint( 100 ) < 20 ); - if ( !isDefined( goal ) ) - { - //debug_print( "Zombie exhausted breadcrumb search" ); - level.zombie_breadcrumb_failed++; - goal = self.favoriteenemy.spectator_respawn.origin; - } - //debug_print( "Setting current breadcrumb to " + goal ); - self.zombie_path_timer += 100; - self setgoalpos( goal ); - self waittill( "bad_path" ); - //debug_print( "Zombie couldn't path to breadcrumb at " + goal + " Finding next breadcrumb" ); - for ( i = 0; i < crumb_list.size; i++ ) - { - if ( goal == crumb_list[ i ] ) - { - bad_crumbs[ bad_crumbs.size ] = i; - break; - } - } - } -} - -zombie_pathing_get_breadcrumb( origin, breadcrumbs, bad_crumbs, pick_random ) //checked changed to match cerberus output -{ -/* -/# - assert( isDefined( origin ) ); -#/ -/# - assert( isDefined( breadcrumbs ) ); -#/ -/# - assert( isarray( breadcrumbs ) ); -#/ -/# - if ( pick_random ) - { - debug_print( "Finding random breadcrumb" ); -#/ - } -*/ - i = 0; - while ( i < breadcrumbs.size ) - { - if ( pick_random ) - { - crumb_index = randomint( breadcrumbs.size ); - } - else - { - crumb_index = i; - } - if ( crumb_is_bad( crumb_index, bad_crumbs ) ) - { - i++; - continue; - } - i++; - return breadcrumbs[ crumb_index ]; - } - return undefined; -} - -crumb_is_bad( crumb, bad_crumbs ) //checked changed to match cerberus output -{ - for ( i = 0; i < bad_crumbs.size; i++ ) - { - if ( bad_crumbs[ i ] == crumb ) - { - return 1; - } - } - return 0; -} - -jitter_enemies_bad_breadcrumbs( start_crumb ) //checked changed to match cerberus output -{ - trace_distance = 35; - jitter_distance = 2; - index = start_crumb; - while ( isDefined( self.favoriteenemy.zombie_breadcrumbs[ index + 1 ] ) ) - { - current_crumb = self.favoriteenemy.zombie_breadcrumbs[ index ]; - next_crumb = self.favoriteenemy.zombie_breadcrumbs[ index + 1 ]; - angles = vectorToAngles( current_crumb - next_crumb ); - right = anglesToRight( angles ); - left = anglesToRight( angles + vectorScale( ( 0, 1, 0 ), 180 ) ); - dist_pos = current_crumb + vectorScale( right, trace_distance ); - trace = bullettrace( current_crumb, dist_pos, 1, undefined ); - vector = trace[ "position" ]; - if ( distance( vector, current_crumb ) < 17 ) - { - self.favoriteenemy.zombie_breadcrumbs[ index ] = current_crumb + vectorScale( left, jitter_distance ); - continue; - } - dist_pos = current_crumb + vectorScale( left, trace_distance ); - trace = bullettrace( current_crumb, dist_pos, 1, undefined ); - vector = trace[ "position" ]; - if ( distance( vector, current_crumb ) < 17 ) - { - self.favoriteenemy.zombie_breadcrumbs[ index ] = current_crumb + vectorScale( right, jitter_distance ); - continue; - } - index++; - } -} - -zombie_repath_notifier() //checked changed to match cerberus output -{ - note = 0; - notes = []; - for ( i = 0; i < 4; i++ ) - { - notes[ notes.size ] = "zombie_repath_notify_" + i; - } - while ( 1 ) - { - level notify( notes[ note ] ); - note = ( note + 1 ) % 4; - wait 0.05; - } -} - -zombie_follow_enemy() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "zombie_acquire_enemy" ); - self endon( "bad_path" ); - level endon( "intermission" ); - if ( !isDefined( level.repathnotifierstarted ) ) - { - level.repathnotifierstarted = 1; - level thread zombie_repath_notifier(); - } - if ( !isDefined( self.zombie_repath_notify ) ) - { - self.zombie_repath_notify = "zombie_repath_notify_" + self getentitynumber() % 4; - } - while ( 1 ) - { - if ( !isDefined( self._skip_pathing_first_delay ) ) - { - level waittill( self.zombie_repath_notify ); - } - else - { - self._skip_pathing_first_delay = undefined; - } - if ( !is_true( self.ignore_enemyoverride ) && isDefined( self.enemyoverride ) && isDefined( self.enemyoverride[ 1 ] ) ) - { - if ( distancesquared( self.origin, self.enemyoverride[ 0 ] ) > 1 ) - { - self orientmode( "face motion" ); - } - else - { - self orientmode( "face point", self.enemyoverride[ 1 ].origin ); - } - self.ignoreall = 1; - goalpos = self.enemyoverride[ 0 ]; - if ( isDefined( level.adjust_enemyoverride_func ) ) - { - goalpos = self [[ level.adjust_enemyoverride_func ]](); - } - self setgoalpos( goalpos ); - } - else if ( isDefined( self.favoriteenemy ) ) - { - self.ignoreall = 0; - self orientmode( "face default" ); - goalpos = self.favoriteenemy.origin; - if ( isDefined( level.enemy_location_override_func ) ) - { - goalpos = [[ level.enemy_location_override_func ]]( self, self.favoriteenemy ); - } - self setgoalpos( goalpos ); - if ( !isDefined( level.ignore_path_delays ) ) - { - distsq = distancesquared( self.origin, self.favoriteenemy.origin ); - if ( distsq > 10240000 ) - { - wait ( 2 + randomfloat( 1 ) ); - } - else if ( distsq > 4840000 ) - { - wait ( 1 + randomfloat( 0.5 ) ); - } - else if ( distsq > 1440000 ) - { - wait ( 0.5 + randomfloat( 0.5 ) ); - } - } - } - if ( isDefined( level.inaccesible_player_func ) ) - { - self [[ level.inaccessible_player_func ]](); - } - } -} - -zombie_eye_glow() //checked matches cerberus output -{ - if ( !isDefined( self ) ) - { - return; - } - if ( !is_true( self.no_eye_glow ) ) - { - self setclientfield( "zombie_has_eyes", 1 ); - } -} - -zombie_eye_glow_stop() //checked matches cerberus output -{ - if ( !isDefined( self ) ) - { - return; - } - if ( !is_true( self.no_eye_glow ) ) - { - self setclientfield( "zombie_has_eyes", 0 ); - } -} - -zombie_history( msg ) //dev call did not check -{ -/* -/# - if ( !isDefined( self.zombie_history ) || self.zombie_history.size > 32 ) - { - self.zombie_history = []; - } - self.zombie_history[ self.zombie_history.size ] = msg; -#/ -*/ -} - -do_zombie_spawn() //checked changed to match cerberus output -{ - self endon( "death" ); - spots = []; - if ( isDefined( self._rise_spot ) ) - { - spot = self._rise_spot; - self thread do_zombie_rise( spot ); - return; - } - if ( isDefined( level.zombie_spawn_locations ) ) - { - i = 0; - while ( i < level.zombie_spawn_locations.size ) - { - if ( is_true( level.use_multiple_spawns ) && isDefined( self.script_int ) ) - { - if ( isDefined( level.spawner_int ) && self.script_int == level.spawner_int && ( !isDefined( level.zombie_spawn_locations[ i ].script_int ) || !isDefined( level.zones[ level.zombie_spawn_locations[ i ].zone_name ].script_int ) ) ) - { - i++; - continue; - } - if ( isDefined( level.zombie_spawn_locations[ i ].script_int ) && level.zombie_spawn_locations[ i ].script_int != self.script_int ) - { - i++; - continue; - } - if ( isDefined( level.zones[ level.zombie_spawn_locations[ i ].zone_name ].script_int ) && level.zones[ level.zombie_spawn_locations[ i ].zone_name ].script_int != self.script_int ) - { - i++; - continue; - } - } - spots[ spots.size ] = level.zombie_spawn_locations[ i ]; - i++; - } - } - /* -/# - if ( getDvarInt( #"A8C231AA" ) ) - { - if ( isDefined( level.zombie_spawn_locations ) ) - { - player = get_players()[ 0 ]; - spots = []; - i = 0; - while ( i < level.zombie_spawn_locations.size ) - { - player_vec = vectornormalize( anglesToForward( player.angles ) ); - player_spawn = vectornormalize( level.zombie_spawn_locations[ i ].origin - player.origin ); - dot = vectordot( player_vec, player_spawn ); - if ( dot > 0,707 ) - { - spots[ spots.size ] = level.zombie_spawn_locations[ i ]; - debugstar( level.zombie_spawn_locations[ i ].origin, 1000, ( 0, 0, 0 ) ); - } - i++; - } - if ( spots.size <= 0 ) - { - spots[ spots.size ] = level.zombie_spawn_locations[ 0 ]; - iprintln( "no spawner in view" ); -#/ - } - } - } - */ - /* -/# - assert( spots.size > 0, "No spawn locations found" ); -#/ - */ - spot = random( spots ); - self.spawn_point = spot; - /* -/# - if ( is_true( level.toggle_show_spawn_locations ) ) - { - debugstar( spot.origin, getDvarInt( #"BB9101B2" ), ( 0, 0, 0 ) ); - host_player = gethostplayer(); - distance = distance( spot.origin, host_player.origin ); - iprintln( "Distance to player: " + ( distance / 12 ) + "feet" ); -#/ - } - */ - if ( isDefined( spot.target ) ) - { - self.target = spot.target; - } - if ( isDefined( spot.zone_name ) ) - { - self.zone_name = spot.zone_name; - } - if ( isDefined( spot.script_parameters ) ) - { - self.script_parameters = spot.script_parameters; - } - tokens = strtok( spot.script_noteworthy, " " ); - i = 0; - while ( i < tokens.size ) - { - if ( isdefined( self.spawn_point_override ) ) - { - spot = self.spawn_point_override; - tokens[ i ] = spot.script_noteworthy; - } - if ( tokens[ i ] == "custom_spawner_entry" ) - { - if ( isdefined( tokens[ i ] ) ) - { - str_spawn_entry = tokens[ i ]; - if ( isdefined( level.custom_spawner_entry ) && isdefined( level.custom_spawner_entry[ str_spawn_entry ] ) ) - { - self thread [[ level.custom_spawner_entry[ str_spawn_entry ] ]](spot); - i++; - continue; - } - } - } - if ( tokens[ i ] == "riser_location" ) - { - self thread do_zombie_rise( spot ); - i++; - continue; - } - if ( tokens[ i ] == "faller_location" ) - { - self thread maps/mp/zombies/_zm_ai_faller::do_zombie_fall( spot ); - i++; - continue; - } - if ( tokens[ i ] == "dog_location" ) - { - i++; - continue; - } - if ( tokens[ i ] == "screecher_location" ) - { - i++; - continue; - } - if ( tokens[ i ] == "leaper_location" ) - { - i++; - continue; - } - if ( isdefined(self.anchor ) ) - { - i++; - return; - } - self.anchor = spawn( "script_origin", self.origin ); - self.anchor.angles = self.angles; - self linkto( self.anchor ); - if ( !isDefined( spot.angles ) ) - { - spot.angles = ( 0, 0, 0 ); - } - self ghost(); - self.anchor moveto( spot.origin, 0.05 ); - self.anchor waittill( "movedone" ); - target_org = get_desired_origin(); - if ( isDefined( target_org ) ) - { - anim_ang = vectorToAngles( target_org - self.origin ); - self.anchor rotateto( ( 0, anim_ang[ 1 ], 0 ), 0.05 ); - self.anchor waittill( "rotatedone" ); - } - if ( isDefined( level.zombie_spawn_fx ) ) - { - playfx( level.zombie_spawn_fx, spot.origin ); - } - self unlink(); - if ( isDefined( self.anchor ) ) - { - self.anchor delete(); - } - self show(); - self notify( "risen", spot.script_string ); - i++; - } -} - -do_zombie_rise( spot ) //checked changed to match cerberus output -{ - self endon( "death" ); - self.in_the_ground = 1; - if ( isDefined( self.anchor ) ) - { - self.anchor delete(); - } - self.anchor = spawn( "script_origin", self.origin ); - self.anchor.angles = self.angles; - self linkto( self.anchor ); - if ( !isDefined( spot.angles ) ) - { - spot.angles = ( 0, 0, 0 ); - } - anim_org = spot.origin; - anim_ang = spot.angles; - anim_org += ( 0, 0, 0 ); - self ghost(); - self.anchor moveto( anim_org, 0.05 ); - self.anchor waittill( "movedone" ); - target_org = get_desired_origin(); - if ( isDefined( target_org ) ) - { - anim_ang = vectorToAngles( target_org - self.origin ); - self.anchor rotateto( ( 0, anim_ang[ 1 ], 0 ), 0.05 ); - self.anchor waittill( "rotatedone" ); - } - self unlink(); - if ( isDefined( self.anchor ) ) - { - self.anchor delete(); - } - self thread hide_pop(); - level thread zombie_rise_death( self, spot ); - spot thread zombie_rise_fx( self ); - substate = 0; - if ( self.zombie_move_speed == "walk" ) - { - substate = randomint( 2 ); - } - else if ( self.zombie_move_speed == "run" ) - { - substate = 2; - } - else if ( self.zombie_move_speed == "sprint" ) - { - substate = 3; - } - self orientmode( "face default" ); - self animscripted( self.origin, spot.angles, "zm_rise", substate ); - self maps/mp/animscripts/zm_shared::donotetracks( "rise_anim", ::handle_rise_notetracks, spot ); - self notify( "rise_anim_finished" ); - spot notify( "stop_zombie_rise_fx" ); - self.in_the_ground = 0; - self notify( "risen", spot.script_string ); -} - -hide_pop() //checked matches cerberus output -{ - self endon( "death" ); - wait 0.5; - if ( isDefined( self ) ) - { - self show(); - wait_network_frame(); - if ( isDefined( self ) ) - { - self.create_eyes = 1; - } - } -} - -handle_rise_notetracks( note, spot ) //checked matches cerberus output -{ - if ( note == "deathout" || note == "deathhigh" ) - { - self.zombie_rise_death_out = 1; - self notify( "zombie_rise_death_out" ); - wait 2; - spot notify( "stop_zombie_rise_fx" ); - } -} - -zombie_rise_death( zombie, spot ) //checked matches cerberus output -{ - zombie.zombie_rise_death_out = 0; - zombie endon( "rise_anim_finished" ); - while ( isDefined( zombie ) && isDefined( zombie.health ) && zombie.health > 1 ) - { - zombie waittill( "damage", amount ); - } - spot notify( "stop_zombie_rise_fx" ); - if ( isDefined( zombie ) ) - { - zombie.deathanim = zombie get_rise_death_anim(); - zombie stopanimscripted(); - } -} - -zombie_rise_fx( zombie ) //checked matches cerberus output -{ - if ( !is_true( level.riser_fx_on_client ) ) - { - self thread zombie_rise_dust_fx( zombie ); - self thread zombie_rise_burst_fx( zombie ); - } - else - { - self thread zombie_rise_burst_fx( zombie ); - } - zombie endon( "death" ); - self endon( "stop_zombie_rise_fx" ); - wait 1; - if ( zombie.zombie_move_speed != "sprint" ) - { - wait 1; - } -} - -zombie_rise_burst_fx( zombie ) //checked changed to match cerberus output -{ - self endon( "stop_zombie_rise_fx" ); - self endon( "rise_anim_finished" ); - if ( isDefined( self.script_parameters ) && self.script_parameters == "in_water" && !is_true( level._no_water_risers ) ) - { - zombie setclientfield( "zombie_riser_fx_water", 1 ); - } - else if ( isDefined( self.script_parameters ) && self.script_parameters == "in_foliage" && is_true( level._foliage_risers ) ) - { - zombie setclientfield( "zombie_riser_fx_foliage", 1 ); - return; - } - else if ( isDefined( self.script_parameters ) && self.script_parameters == "in_snow" ) - { - zombie setclientfield( "zombie_riser_fx", 1 ); - return; - } - else if ( isDefined( zombie.zone_name ) && isDefined( level.zones[ zombie.zone_name ] ) ) - { - low_g_zones = getentarray( zombie.zone_name, "targetname" ); - if ( isDefined( low_g_zones[ 0 ].script_string ) && low_g_zones[ 0 ].script_string == "lowgravity" ) - { - zombie setclientfield( "zombie_riser_fx_lowg", 1 ); - } - else - { - zombie setclientfield( "zombie_riser_fx", 1 ); - } - } - else - { - zombie setclientfield( "zombie_riser_fx", 1 ); - } -} - -zombie_rise_dust_fx( zombie ) //checked does not match cerberus output did not change -{ - dust_tag = "J_SpineUpper"; - self endon( "stop_zombie_rise_dust_fx" ); - self thread stop_zombie_rise_dust_fx( zombie ); - wait 2; - dust_time = 5.5; - dust_interval = 0.3; - if ( isDefined( self.script_string ) && self.script_string == "in_water" ) - { - t = 0; - while ( t < dust_time ) - { - playfxontag( level._effect[ "rise_dust_water" ], zombie, dust_tag ); - wait dust_interval; - t += dust_interval; - } - } - if ( isDefined( self.script_string ) && self.script_string == "in_snow" ) - { - t = 0; - while ( t < dust_time ) - { - playfxontag( level._effect[ "rise_dust_snow" ], zombie, dust_tag ); - wait dust_interval; - t += dust_interval; - } - } - if ( isDefined( self.script_string ) && self.script_string == "in_foliage" ) - { - t = 0; - while ( t < dust_time ) - { - playfxontag( level._effect[ "rise_dust_foliage" ], zombie, dust_tag ); - wait dust_interval; - t += dust_interval; - } - } - while ( t < dust_time ) - { - playfxontag( level._effect[ "rise_dust" ], zombie, dust_tag ); - wait dust_interval; - t += dust_interval; - } -} - -stop_zombie_rise_dust_fx( zombie ) //checked matches cerberus output -{ - zombie waittill( "death" ); - self notify( "stop_zombie_rise_dust_fx" ); -} - -get_rise_death_anim() //checked matches cerberus output -{ - if ( self.zombie_rise_death_out ) - { - return "zm_rise_death_out"; - } - self.noragdoll = 1; - self.nodeathragdoll = 1; - return "zm_rise_death_in"; -} - -zombie_tesla_head_gib() //checked matches cerberus output -{ - self endon( "death" ); - if ( self.animname == "quad_zombie" ) - { - return; - } - if ( randomint( 100 ) < level.zombie_vars[ "tesla_head_gib_chance" ] ) - { - wait randomfloatrange( 0.53, 1 ); - self zombie_head_gib(); - } - else - { - network_safe_play_fx_on_tag( "tesla_death_fx", 2, level._effect[ "tesla_shock_eyes" ], self, "J_Eyeball_LE" ); - } -} - -play_ambient_zombie_vocals() //checked changed to match cerberus output -{ - self endon( "death" ); - if ( self.animname == "monkey_zombie" || isDefined( self.is_avogadro ) && self.is_avogadro ) - { - return; - } - while ( 1 ) - { - type = "ambient"; - float = 2; - while ( !isDefined( self.zombie_move_speed ) ) - { - wait 0.5; - } - switch( self.zombie_move_speed ) - { - case "walk": - type = "ambient"; - float = 4; - break; - case "run": - type = "sprint"; - float = 4; - break; - case "sprint": - type = "sprint"; - float = 4; - break; - } - if ( self.animname == "zombie" && !self.has_legs ) - { - type = "crawler"; - } - else if ( self.animname == "thief_zombie" || self.animname == "leaper_zombie" ) - { - float = 1.2; - } - name = self.animname; - if ( isDefined( self.sndname ) ) - { - name = self.sndname; - } - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( type, name ); - wait randomfloatrange( 1, float ); - } -} - -zombie_complete_emerging_into_playable_area() //checked matches cerberus output -{ - self.completed_emerging_into_playable_area = 1; - self notify( "completed_emerging_into_playable_area" ); - self.no_powerups = 0; - self thread zombie_free_cam_allowed(); -} - -zombie_free_cam_allowed() //checked matches cerberus output -{ - self endon( "death" ); - wait 1.5; - self setfreecameralockonallowed( 1 ); -} - - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_stats.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_stats.gsc deleted file mode 100644 index 6459e15..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_stats.gsc +++ /dev/null @@ -1,1059 +0,0 @@ -#include maps/mp/gametypes_zm/_globallogic; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_pers_upgrades; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - level.player_stats_init = ::player_stats_init; - level.add_client_stat = ::add_client_stat; - level.increment_client_stat = ::increment_client_stat; - level.track_gibs = ::do_stats_for_gibs; -} - -player_stats_init() //checked matches cerberus output -{ - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "kills", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "suicides", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "downs", 0 ); - self.downs = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "downs" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "revives", 0 ); - self.revives = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "revives" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "perks_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "headshots", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "gibs", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "head_gibs", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "right_arm_gibs", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "left_arm_gibs", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "right_leg_gibs", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "left_leg_gibs", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "melee_kills", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "grenade_kills", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "doors_purchased", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "distance_traveled", 0 ); - self.distance_traveled = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "distance_traveled" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "total_shots", 0 ); - self.total_shots = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "total_shots" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "hits", 0 ); - self.hits = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "hits" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "deaths", 0 ); - self.deaths = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "deaths" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "boards", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "wins", 0 ); - self.totalwins = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "totalwins" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "losses", 0 ); - self.totallosses = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "totallosses" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "failed_revives", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sacrifices", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "failed_sacrifices", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "drops", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "nuke_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "insta_kill_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "full_ammo_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "double_points_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "meat_stink_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "carpenter_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "fire_sale_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zombie_blood_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "time_bomb_ammo_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "use_magicbox", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "grabbed_from_magicbox", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "use_perk_random", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "grabbed_from_perk_random", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "use_pap", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pap_weapon_grabbed", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pap_weapon_not_grabbed", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_armorvest_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_quickrevive_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_rof_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_fastreload_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_flakjacket_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_additionalprimaryweapon_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_longersprint_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_deadshot_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_scavenger_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_finalstand_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_grenadepulldeath_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_nomotionsensor" + "_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "claymores_planted", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "claymores_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "ballistic_knives_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "wallbuy_weapons_purchased", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "ammo_purchased", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "upgraded_ammo_purchased", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "power_turnedon", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "power_turnedoff", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "planted_buildables_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buildables_built", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "time_played_total", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "weighted_rounds_played", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "contaminations_received", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "contaminations_given", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zdogs_killed", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zdog_rounds_finished", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zdog_rounds_lost", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "killed_by_zdog", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "screecher_minigames_won", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "screecher_minigames_lost", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "screechers_killed", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "screecher_teleporters_used", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "avogadro_defeated", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "killed_by_avogadro", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "cheat_too_many_weapons", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "cheat_out_of_playable", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "cheat_too_friendly", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "cheat_total", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "prison_tomahawk_acquired", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "prison_fan_trap_used", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "prison_acid_trap_used", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "prison_sniper_tower_used", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "prison_ee_good_ending", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "prison_ee_bad_ending", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "prison_ee_spoon_acquired", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "prison_brutus_killed", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_lsat_purchased", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_fountain_transporter_used", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_ghost_killed", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_ghost_drained_player", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_ghost_perk_acquired", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_sloth_booze_given", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_sloth_booze_break_barricade", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_sloth_candy_given", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_sloth_candy_protect", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_sloth_candy_build_buildable", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_sloth_candy_wallbuy", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_sloth_candy_fetch_buildable", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_sloth_candy_box_lock", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_sloth_candy_box_move", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_sloth_candy_box_spin", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_sloth_candy_powerup_cycle", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_sloth_candy_dance", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_sloth_candy_crawler", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_wallbuy_placed", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_wallbuy_placed_ak74u_zm", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_wallbuy_placed_an94_zm", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_wallbuy_placed_pdw57_zm", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_wallbuy_placed_svu_zm", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_wallbuy_placed_tazer_knuckles_zm", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buried_wallbuy_placed_870mcs_zm", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "tomb_mechz_killed", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "tomb_giant_robot_stomped", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "tomb_giant_robot_accessed", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "tomb_generator_captured", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "tomb_generator_defended", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "tomb_generator_lost", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "tomb_dig", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "tomb_golden_shovel", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "tomb_golden_hard_hat", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "tomb_perk_extension", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_boarding", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_revivenoperk", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_multikill_headshots", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_cash_back_bought", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_cash_back_prone", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_insta_kill", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_nube_5_times", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_jugg", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_jugg_downgrade_count", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_carpenter", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_max_round_reached", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_flopper_counter", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_perk_lose_counter", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_pistol_points_counter", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_double_points_counter", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_sniper_counter", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_marathon_counter", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_box_weapon_counter", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_zombie_kiting_counter", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_max_ammo_counter", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_melee_bonus_counter", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_nube_counter", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_last_man_standing_counter", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_reload_speed_counter", 0, 1 ); - self maps/mp/zombies/_zm_pers_upgrades::pers_abilities_init_globals(); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "score", 0 ); - if ( level.resetplayerscoreeveryround ) - { - self.pers[ "score" ] = 0; - } - self.pers[ "score" ] = level.player_starting_points; - self.score = self.pers[ "score" ]; - self incrementplayerstat( "score", self.score ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zteam", 0 ); - if ( isDefined( level.level_specific_stats_init ) ) - { - [[ level.level_specific_stats_init ]](); - } - if ( !isDefined( self.stats_this_frame ) ) - { - self.pers_upgrade_force_test = 1; - self.stats_this_frame = []; - self.pers_upgrades_awarded = []; - } -} - -update_players_stats_at_match_end( players ) //checked partially matches cerberus output //did not change while loop to for loop to prevent infinite loop continue bug -{ - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - game_mode = getDvar( "ui_gametype" ); - game_mode_group = level.scr_zm_ui_gametype_group; - map_location_name = level.scr_zm_map_start_location; - if ( map_location_name == "" ) - { - map_location_name = "default"; - } - if ( isDefined( level.gamemodulewinningteam ) ) - { - if ( level.gamemodulewinningteam == "B" ) - { - matchrecorderincrementheaderstat( "winningTeam", 1 ); - } - else if ( level.gamemodulewinningteam == "A" ) - { - matchrecorderincrementheaderstat( "winningTeam", 2 ); - } - } - recordmatchsummaryzombieendgamedata( game_mode, game_mode_group, map_location_name, level.round_number ); - newtime = getTime(); - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - if ( player is_bot() ) - { - i++; - continue; - } - distance = player get_stat_distance_traveled(); - player addplayerstatwithgametype( "distance_traveled", distance ); - player add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "time_played_total", player.pers[ "time_played_total" ] ); - recordplayermatchend( player ); - recordplayerstats( player, "presentAtEnd", 1 ); - player maps/mp/zombies/_zm_weapons::updateweapontimingszm( newtime ); - if ( isDefined( level._game_module_stat_update_func ) ) - { - player [[ level._game_module_stat_update_func ]](); - } - old_high_score = player get_game_mode_stat( game_mode, "score" ); - if ( player.score_total > old_high_score ) - { - player set_game_mode_stat( game_mode, "score", player.score_total ); - } - if ( gamemodeismode( level.gamemode_public_match ) ) - { - player gamehistoryfinishmatch( 4, 0, 0, 0, 0, 0 ); - if ( isDefined( player.pers[ "matchesPlayedStatsTracked" ] ) ) - { - gamemode = maps/mp/gametypes_zm/_globallogic::getcurrentgamemode(); - player maps/mp/gametypes_zm/_globallogic::incrementmatchcompletionstat( gamemode, "played", "completed" ); - if ( isDefined( player.pers[ "matchesHostedStatsTracked" ] ) ) - { - player maps/mp/gametypes_zm/_globallogic::incrementmatchcompletionstat( gamemode, "hosted", "completed" ); - } - } - } - if ( !isDefined( player.pers[ "previous_distance_traveled" ] ) ) - { - player.pers[ "previous_distance_traveled" ] = 0; - } - distancethisround = int( player.pers[ "distance_traveled" ] - player.pers[ "previous_distance_traveled" ] ); - player.pers[ "previous_distance_traveled" ] = player.pers[ "distance_traveled" ]; - player incrementplayerstat( "distance_traveled", distancethisround ); - i++; - } -} - -update_playing_utc_time( matchendutctime ) //checked changed to match cerberus output //order of operations may need to be reviewed -{ - current_days = int( matchendutctime / 86400 ); - last_days = self get_global_stat( "TIMESTAMPLASTDAY1" ); - last_days = int( last_days / 86400 ); - diff_days = current_days - last_days; - timestamp_name = ""; - if ( diff_days > 0 ) - { - for ( i = 5; i > diff_days; i-- ) - { - timestamp_name = "TIMESTAMPLASTDAY" + ( i - diff_days ); - timestamp_name_to = "TIMESTAMPLASTDAY" + i; - timestamp_value = self get_global_stat( timestamp_name ); - self set_global_stat( timestamp_name_to, timestamp_value ); - - } - for ( i = 2; i <= diff_days && i < 6; i++ ) - { - timestamp_name = "TIMESTAMPLASTDAY" + i; - self set_global_stat( timestamp_name, 0 ); - } - self set_global_stat( "TIMESTAMPLASTDAY1", matchendutctime ); - } -} - -survival_classic_custom_stat_update() //checked matches cerberus output -{ -} - -grief_custom_stat_update() //checked matches cerberus output -{ -} - -add_game_mode_group_stat( game_mode, stat_name, value ) //checked matches cerberus output -{ - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - self adddstat( "PlayerStatsByGameTypeGroup", game_mode, stat_name, "statValue", value ); -} - -set_game_mode_group_stat( game_mode, stat_name, value ) //checked matches cerberus output -{ - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - self setdstat( "PlayerStatsByGameTypeGroup", game_mode, stat_name, "statValue", value ); -} - -get_game_mode_group_stat( game_mode, stat_name ) //checked matches cerberus output -{ - return self getdstat( "PlayerStatsByGameTypeGroup", game_mode, stat_name, "statValue" ); -} - -add_game_mode_stat( game_mode, stat_name, value ) //checked matches cerberus output -{ - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - self adddstat( "PlayerStatsByGameType", game_mode, stat_name, "statValue", value ); -} - -set_game_mode_stat( game_mode, stat_name, value ) //checked matches cerberus output -{ - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - self setdstat( "PlayerStatsByGameType", game_mode, stat_name, "statValue", value ); -} - -get_game_mode_stat( game_mode, stat_name ) //checked matches cerberus output -{ - return self getdstat( "PlayerStatsByGameType", game_mode, stat_name, "statValue" ); -} - -get_global_stat( stat_name ) //checked matches cerberus output -{ - return self getdstat( "PlayerStatsList", stat_name, "StatValue" ); -} - -set_global_stat( stat_name, value ) //checked matches cerberus output -{ - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - self setdstat( "PlayerStatsList", stat_name, "StatValue", value ); -} - -add_global_stat( stat_name, value ) //checked matches cerberus output -{ - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - self adddstat( "PlayerStatsList", stat_name, "StatValue", value ); -} - -get_map_stat( stat_name, map ) //checked matches cerberus output -{ - if ( !isDefined( map ) ) - { - map = level.script; - } - return self getdstat( "PlayerStatsByMap", map, stat_name ); -} - -set_map_stat( stat_name, value, map ) //checked matches cerberus output -{ - if ( !isDefined( map ) ) - { - map = level.script; - } - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - self setdstat( "PlayerStatsByMap", map, stat_name, value ); -} - -add_map_stat( stat_name, value, map ) //checked matches cerberus output -{ - if ( !isDefined( map ) ) - { - map = level.script; - } - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - self adddstat( "PlayerStatsByMap", map, stat_name, value ); -} - -get_location_gametype_stat( start_location, game_type, stat_name ) //checked matches cerberus output -{ - return self getdstat( "PlayerStatsByStartLocation", start_location, "startLocationGameTypeStats", game_type, "stats", stat_name, "StatValue" ); -} - -set_location_gametype_stat( start_location, game_type, stat_name, value ) //checked matches cerberus output -{ - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - self setdstat( "PlayerStatsByStartLocation", start_location, "startLocationGameTypeStats", game_type, "stats", stat_name, "StatValue", value ); -} - -add_location_gametype_stat( start_location, game_type, stat_name, value ) //checked matches cerberus output -{ - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - self adddstat( "PlayerStatsByStartLocation", start_location, "startLocationGameTypeStats", game_type, "stats", stat_name, "StatValue", value ); -} - -get_map_weaponlocker_stat( stat_name, map ) //checked matches cerberus output -{ - if ( !isDefined( map ) ) - { - map = level.script; - } - return self getdstat( "PlayerStatsByMap", map, "weaponLocker", stat_name ); -} - -set_map_weaponlocker_stat( stat_name, value, map ) //checked matches cerberus output -{ - if ( !isDefined( map ) ) - { - map = level.script; - } - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - if ( isDefined( value ) ) - { - self setdstat( "PlayerStatsByMap", map, "weaponLocker", stat_name, value ); - } - else - { - self setdstat( "PlayerStatsByMap", map, "weaponLocker", stat_name, 0 ); - } -} - -add_map_weaponlocker_stat( stat_name, value, map ) //checked matches cerberus output -{ - if ( !isDefined( map ) ) - { - map = level.script; - } - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - self adddstat( "PlayerStatsByMap", map, "weaponLocker", stat_name, value ); -} - -has_stored_weapondata( map ) //checked changed to match cerberus output -{ - if ( !isDefined( map ) ) - { - map = level.script; - } - storedweapon = self get_map_weaponlocker_stat( "name", map ); - if ( isDefined( storedweapon ) || isstring( storedweapon ) && storedweapon == "" || isint( storedweapon ) && storedweapon == 0 ) - { - return 0; - } - return 1; -} - -get_stored_weapondata( map ) //checked matches cerberus output -{ - if ( !isDefined( map ) ) - { - map = level.script; - } - if ( self has_stored_weapondata( map ) ) - { - weapondata = []; - weapondata[ "name" ] = self get_map_weaponlocker_stat( "name", map ); - weapondata[ "lh_clip" ] = self get_map_weaponlocker_stat( "lh_clip", map ); - weapondata[ "clip" ] = self get_map_weaponlocker_stat( "clip", map ); - weapondata[ "stock" ] = self get_map_weaponlocker_stat( "stock", map ); - weapondata[ "alt_clip" ] = self get_map_weaponlocker_stat( "alt_clip", map ); - weapondata[ "alt_stock" ] = self get_map_weaponlocker_stat( "alt_stock", map ); - return weapondata; - } - return undefined; -} - -clear_stored_weapondata( map ) //checked matches cerberus output -{ - if ( !isDefined( map ) ) - { - map = level.script; - } - self set_map_weaponlocker_stat( "name", "", map ); - self set_map_weaponlocker_stat( "lh_clip", 0, map ); - self set_map_weaponlocker_stat( "clip", 0, map ); - self set_map_weaponlocker_stat( "stock", 0, map ); - self set_map_weaponlocker_stat( "alt_clip", 0, map ); - self set_map_weaponlocker_stat( "alt_stock", 0, map ); -} - -set_stored_weapondata( weapondata, map ) //checked matches cerberus output -{ - if ( !isDefined( map ) ) - { - map = level.script; - } - self set_map_weaponlocker_stat( "name", weapondata[ "name" ], map ); - self set_map_weaponlocker_stat( "lh_clip", weapondata[ "lh_clip" ], map ); - self set_map_weaponlocker_stat( "clip", weapondata[ "clip" ], map ); - self set_map_weaponlocker_stat( "stock", weapondata[ "stock" ], map ); - self set_map_weaponlocker_stat( "alt_clip", weapondata[ "alt_clip" ], map ); - self set_map_weaponlocker_stat( "alt_stock", weapondata[ "alt_stock" ], map ); -} - -add_client_stat( stat_name, stat_value, include_gametype ) //checked matches cerberus output -{ - if ( getDvar( "ui_zm_mapstartlocation" ) == "" || is_true( level.zm_disable_recording_stats ) ) - { - return; - } - if ( !isDefined( include_gametype ) ) - { - include_gametype = 1; - } - self maps/mp/gametypes_zm/_globallogic_score::incpersstat( stat_name, stat_value, 0, include_gametype ); - self.stats_this_frame[ stat_name ] = 1; -} - -increment_player_stat( stat_name ) //checked matches cerberus output -{ - if ( getDvar( "ui_zm_mapstartlocation" ) == "" || is_true( level.zm_disable_recording_stats ) ) - { - return; - } - self incrementplayerstat( stat_name, 1 ); -} - -increment_root_stat( stat_name, stat_value ) //checked matches cerberus output -{ - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - self adddstat( stat_name, stat_value ); -} - -increment_client_stat( stat_name, include_gametype ) //checked matches cerberus output -{ - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - add_client_stat( stat_name, 1, include_gametype ); -} - -set_client_stat( stat_name, stat_value, include_gametype ) //checked matches cerberus output -{ - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - current_stat_count = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( stat_name ); - self maps/mp/gametypes_zm/_globallogic_score::incpersstat( stat_name, stat_value - current_stat_count, 0, include_gametype ); - self.stats_this_frame[ stat_name ] = 1; -} - -zero_client_stat( stat_name, include_gametype ) //checked matches cerberus output -{ - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - current_stat_count = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( stat_name ); - self maps/mp/gametypes_zm/_globallogic_score::incpersstat( stat_name, current_stat_count * -1, 0, include_gametype ); - self.stats_this_frame[ stat_name ] = 1; -} - -increment_map_cheat_stat( stat_name ) //checked matches cerberus output -{ - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - self adddstat( "PlayerStatsByMap", level.script, "cheats", stat_name, 1 ); -} - -get_stat_distance_traveled() //checked changed to match cerberu output -{ - miles = int( self.pers[ "distance_traveled" ] / 63360 ); - remainder = ( self.pers[ "distance_traveled" ] / 63360 ) - miles; - if ( miles < 1 && remainder < 0.5 ) - { - miles = 1; - } - else if ( remainder >= 0.5 ) - { - miles++; - } - return miles; -} - -get_stat_round_number() //checked matches cerberus output -{ - return level.round_number; -} - -get_stat_combined_rank_value_survival_classic() //checked matches cerberus output -{ - rounds = get_stat_round_number(); - kills = self.pers[ "kills" ]; - if ( rounds > 99 ) - { - rounds = 99; - } - result = rounds * 10000000 + kills; - return result; -} - -get_stat_combined_rank_value_grief() //checked matches cerberus output -{ - wins = self.pers[ "wins" ]; - losses = self.pers[ "losses" ]; - if ( wins > 9999 ) - { - wins = 9999; - } - if ( losses > 9999 ) - { - losses = 9999; - } - losses_value = 9999 - losses; - result = wins * 10000 + losses_value; - return result; -} - -update_global_counters_on_match_end() //checked changed to match cerberus output -{ - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - deaths = 0; - kills = 0; - melee_kills = 0; - headshots = 0; - suicides = 0; - downs = 0; - revives = 0; - perks_drank = 0; - gibs = 0; - doors_purchased = 0; - distance_traveled = 0; - total_shots = 0; - boards = 0; - sacrifices = 0; - drops = 0; - nuke_pickedup = 0; - insta_kill_pickedup = 0; - full_ammo_pickedup = 0; - double_points_pickedup = 0; - meat_stink_pickedup = 0; - carpenter_pickedup = 0; - fire_sale_pickedup = 0; - zombie_blood_pickedup = 0; - use_magicbox = 0; - grabbed_from_magicbox = 0; - use_perk_random = 0; - grabbed_from_perk_random = 0; - use_pap = 0; - pap_weapon_grabbed = 0; - specialty_armorvest_drank = 0; - specialty_quickrevive_drank = 0; - specialty_fastreload_drank = 0; - specialty_longersprint_drank = 0; - specialty_scavenger_drank = 0; - specialty_rof_drank = 0; - specialty_deadshot_drank = 0; - specialty_flakjacket_drank = 0; - specialty_additionalprimaryweapon_drank = 0; - specialty_finalstand_drank = 0; - specialty_grenadepulldeath_drank = 0; - specialty_nomotionsensor_drank = 0; - claymores_planted = 0; - claymores_pickedup = 0; - ballistic_knives_pickedup = 0; - wallbuy_weapons_purchased = 0; - power_turnedon = 0; - power_turnedoff = 0; - planted_buildables_pickedup = 0; - ammo_purchased = 0; - upgraded_ammo_purchased = 0; - buildables_built = 0; - time_played = 0; - contaminations_received = 0; - contaminations_given = 0; - cheat_too_many_weapons = 0; - cheat_out_of_playable_area = 0; - cheat_too_friendly = 0; - cheat_total = 0; - prison_tomahawk_acquired = 0; - prison_fan_trap_used = 0; - prison_acid_trap_used = 0; - prison_sniper_tower_used = 0; - prison_ee_good_ending = 0; - prison_ee_bad_ending = 0; - prison_ee_spoon_acquired = 0; - prison_brutus_killed = 0; - buried_lsat_purchased = 0; - buried_fountain_transporter_used = 0; - buried_ghost_killed = 0; - buried_ghost_drained_player = 0; - buried_ghost_perk_acquired = 0; - buried_sloth_booze_given = 0; - buried_sloth_booze_break_barricade = 0; - buried_sloth_candy_given = 0; - buried_sloth_candy_protect = 0; - buried_sloth_candy_build_buildable = 0; - buried_sloth_candy_wallbuy = 0; - buried_sloth_candy_fetch_buildable = 0; - buried_sloth_candy_box_lock = 0; - buried_sloth_candy_box_move = 0; - buried_sloth_candy_box_spin = 0; - buried_sloth_candy_powerup_cycle = 0; - buried_sloth_candy_dance = 0; - buried_sloth_candy_crawler = 0; - buried_wallbuy_placed = 0; - buried_wallbuy_placed_ak74u_zm = 0; - buried_wallbuy_placed_an94_zm = 0; - buried_wallbuy_placed_pdw57_zm = 0; - buried_wallbuy_placed_svu_zm = 0; - buried_wallbuy_placed_tazer_knuckles_zm = 0; - buried_wallbuy_placed_870mcs_zm = 0; - tomb_mechz_killed = 0; - tomb_giant_robot_stomped = 0; - tomb_giant_robot_accessed = 0; - tomb_generator_captured = 0; - tomb_generator_defended = 0; - tomb_generator_lost = 0; - tomb_dig = 0; - tomb_golden_shovel = 0; - tomb_golden_hard_hat = 0; - tomb_perk_extension = 0; - players = get_players(); - foreach ( player in players ) - { - deaths += player.pers[ "deaths" ]; - kills += player.pers[ "kills" ]; - headshots += player.pers[ "headshots" ]; - suicides += player.pers[ "suicides" ]; - melee_kills += player.pers[ "melee_kills" ]; - downs += player.pers[ "downs" ]; - revives += player.pers[ "revives" ]; - perks_drank += player.pers[ "perks_drank" ]; - specialty_armorvest_drank += player.pers[ "specialty_armorvest_drank" ]; - specialty_quickrevive_drank += player.pers[ "specialty_quickrevive_drank" ]; - specialty_fastreload_drank += player.pers[ "specialty_fastreload_drank" ]; - specialty_longersprint_drank += player.pers[ "specialty_longersprint_drank" ]; - specialty_rof_drank += player.pers[ "specialty_rof_drank" ]; - specialty_deadshot_drank += player.pers[ "specialty_deadshot_drank" ]; - specialty_scavenger_drank += player.pers[ "specialty_scavenger_drank" ]; - specialty_flakjacket_drank += player.pers[ "specialty_flakjacket_drank" ]; - specialty_additionalprimaryweapon_drank += player.pers[ "specialty_additionalprimaryweapon_drank" ]; - specialty_finalstand_drank += player.pers[ "specialty_finalstand_drank" ]; - specialty_grenadepulldeath_drank += player.pers[ "specialty_grenadepulldeath_drank" ]; - specialty_nomotionsensor_drank += player.pers[ "specialty_nomotionsensor" + "_drank" ]; - gibs += player.pers[ "gibs" ]; - doors_purchased += player.pers[ "doors_purchased" ]; - distance_traveled += player get_stat_distance_traveled(); - boards += player.pers[ "boards" ]; - sacrifices += player.pers[ "sacrifices" ]; - drops += player.pers[ "drops" ]; - nuke_pickedup += player.pers[ "nuke_pickedup" ]; - insta_kill_pickedup += player.pers[ "insta_kill_pickedup" ]; - full_ammo_pickedup += player.pers[ "full_ammo_pickedup" ]; - double_points_pickedup += player.pers[ "double_points_pickedup" ]; - meat_stink_pickedup += player.pers[ "meat_stink_pickedup" ]; - carpenter_pickedup += player.pers[ "carpenter_pickedup" ]; - fire_sale_pickedup += player.pers[ "fire_sale_pickedup" ]; - zombie_blood_pickedup += player.pers[ "zombie_blood_pickedup" ]; - use_magicbox += player.pers[ "use_magicbox" ]; - grabbed_from_magicbox += player.pers[ "grabbed_from_magicbox" ]; - use_perk_random += player.pers[ "use_perk_random" ]; - grabbed_from_perk_random += player.pers[ "grabbed_from_perk_random" ]; - use_pap += player.pers[ "use_pap" ]; - pap_weapon_grabbed += player.pers[ "pap_weapon_grabbed" ]; - claymores_planted += player.pers[ "claymores_planted" ]; - claymores_pickedup += player.pers[ "claymores_pickedup" ]; - ballistic_knives_pickedup += player.pers[ "ballistic_knives_pickedup" ]; - wallbuy_weapons_purchased += player.pers[ "wallbuy_weapons_purchased" ]; - power_turnedon += player.pers[ "power_turnedon" ]; - power_turnedoff += player.pers[ "power_turnedoff" ]; - planted_buildables_pickedup += player.pers[ "planted_buildables_pickedup" ]; - buildables_built += player.pers[ "buildables_built" ]; - ammo_purchased += player.pers[ "ammo_purchased" ]; - upgraded_ammo_purchased += player.pers[ "upgraded_ammo_purchased" ]; - total_shots += player.total_shots; - time_played += player.pers[ "time_played_total" ]; - contaminations_received += player.pers[ "contaminations_received" ]; - contaminations_given += player.pers[ "contaminations_given" ]; - cheat_too_many_weapons += player.pers[ "cheat_too_many_weapons" ]; - cheat_out_of_playable_area += player.pers[ "cheat_out_of_playable" ]; - cheat_too_friendly += player.pers[ "cheat_too_friendly" ]; - cheat_total += player.pers[ "cheat_total" ]; - prison_tomahawk_acquired += player.pers[ "prison_tomahawk_acquired" ]; - prison_fan_trap_used += player.pers[ "prison_fan_trap_used" ]; - prison_acid_trap_used += player.pers[ "prison_acid_trap_used" ]; - prison_sniper_tower_used += player.pers[ "prison_sniper_tower_used" ]; - prison_ee_good_ending += player.pers[ "prison_ee_good_ending" ]; - prison_ee_bad_ending += player.pers[ "prison_ee_bad_ending" ]; - prison_ee_spoon_acquired += player.pers[ "prison_ee_spoon_acquired" ]; - prison_brutus_killed += player.pers[ "prison_brutus_killed" ]; - buried_lsat_purchased += player.pers[ "buried_lsat_purchased" ]; - buried_fountain_transporter_used += player.pers[ "buried_fountain_transporter_used" ]; - buried_ghost_killed += player.pers[ "buried_ghost_killed" ]; - buried_ghost_drained_player += player.pers[ "buried_ghost_drained_player" ]; - buried_ghost_perk_acquired += player.pers[ "buried_ghost_perk_acquired" ]; - buried_sloth_booze_given += player.pers[ "buried_sloth_booze_given" ]; - buried_sloth_booze_break_barricade += player.pers[ "buried_sloth_booze_break_barricade" ]; - buried_sloth_candy_given += player.pers[ "buried_sloth_candy_given" ]; - buried_sloth_candy_protect += player.pers[ "buried_sloth_candy_protect" ]; - buried_sloth_candy_build_buildable += player.pers[ "buried_sloth_candy_build_buildable" ]; - buried_sloth_candy_wallbuy += player.pers[ "buried_sloth_candy_wallbuy" ]; - buried_sloth_candy_fetch_buildable += player.pers[ "buried_sloth_candy_fetch_buildable" ]; - buried_sloth_candy_box_lock += player.pers[ "buried_sloth_candy_box_lock" ]; - buried_sloth_candy_box_move += player.pers[ "buried_sloth_candy_box_move" ]; - buried_sloth_candy_box_spin += player.pers[ "buried_sloth_candy_box_spin" ]; - buried_sloth_candy_powerup_cycle += player.pers[ "buried_sloth_candy_powerup_cycle" ]; - buried_sloth_candy_dance += player.pers[ "buried_sloth_candy_dance" ]; - buried_sloth_candy_crawler += player.pers[ "buried_sloth_candy_crawler" ]; - buried_wallbuy_placed += player.pers[ "buried_wallbuy_placed" ]; - buried_wallbuy_placed_ak74u_zm += player.pers[ "buried_wallbuy_placed_ak74u_zm" ]; - buried_wallbuy_placed_an94_zm += player.pers[ "buried_wallbuy_placed_an94_zm" ]; - buried_wallbuy_placed_pdw57_zm += player.pers[ "buried_wallbuy_placed_pdw57_zm" ]; - buried_wallbuy_placed_svu_zm += player.pers[ "buried_wallbuy_placed_svu_zm" ]; - buried_wallbuy_placed_tazer_knuckles_zm += player.pers[ "buried_wallbuy_placed_tazer_knuckles_zm" ]; - buried_wallbuy_placed_870mcs_zm += player.pers[ "buried_wallbuy_placed_870mcs_zm" ]; - tomb_mechz_killed += player.pers[ "tomb_mechz_killed" ]; - tomb_giant_robot_stomped += player.pers[ "tomb_giant_robot_stomped" ]; - tomb_giant_robot_accessed += player.pers[ "tomb_giant_robot_accessed" ]; - tomb_generator_captured += player.pers[ "tomb_generator_captured" ]; - tomb_generator_defended += player.pers[ "tomb_generator_defended" ]; - tomb_generator_lost += player.pers[ "tomb_generator_lost" ]; - tomb_dig += player.pers[ "tomb_dig" ]; - tomb_golden_shovel += player.pers[ "tomb_golden_shovel" ]; - tomb_golden_hard_hat += player.pers[ "tomb_golden_hard_hat" ]; - tomb_perk_extension += player.pers[ "tomb_perk_extension" ]; - } - game_mode = getDvar( "ui_gametype" ); - incrementcounter( "global_zm_" + game_mode, 1 ); - incrementcounter( "global_zm_games", 1 ); - if ( game_mode == "zclassic" || level.script == "zm_nuked" ) - { - incrementcounter( "global_zm_games_" + level.script, 1 ); - } - incrementcounter( "global_zm_killed", level.global_zombies_killed ); - incrementcounter( "global_zm_killed_by_players", kills ); - incrementcounter( "global_zm_killed_by_traps", level.zombie_trap_killed_count ); - incrementcounter( "global_zm_headshots", headshots ); - incrementcounter( "global_zm_suicides", suicides ); - incrementcounter( "global_zm_melee_kills", melee_kills ); - incrementcounter( "global_zm_downs", downs ); - incrementcounter( "global_zm_deaths", deaths ); - incrementcounter( "global_zm_revives", revives ); - incrementcounter( "global_zm_perks_drank", perks_drank ); - incrementcounter( "global_zm_specialty_armorvest_drank", specialty_armorvest_drank ); - incrementcounter( "global_zm_specialty_quickrevive_drank", specialty_quickrevive_drank ); - incrementcounter( "global_zm_specialty_fastreload_drank", specialty_fastreload_drank ); - incrementcounter( "global_zm_specialty_longersprint_drank", specialty_longersprint_drank ); - incrementcounter( "global_zm_specialty_rof_drank", specialty_rof_drank ); - incrementcounter( "global_zm_specialty_deadshot_drank", specialty_deadshot_drank ); - incrementcounter( "global_zm_specialty_scavenger_drank", specialty_scavenger_drank ); - incrementcounter( "global_zm_specialty_flakjacket_drank", specialty_flakjacket_drank ); - incrementcounter( "global_zm_specialty_additionalprimaryweapon_drank", specialty_additionalprimaryweapon_drank ); - incrementcounter( "global_zm_specialty_finalstand_drank", specialty_finalstand_drank ); - incrementcounter( "global_zm_specialty_grenadepulldeath_drank", specialty_grenadepulldeath_drank ); - incrementcounter( "global_zm_" + "specialty_nomotionsensor" + "_drank", specialty_nomotionsensor_drank ); - incrementcounter( "global_zm_gibs", gibs ); - incrementcounter( "global_zm_distance_traveled", int( distance_traveled ) ); - incrementcounter( "global_zm_doors_purchased", doors_purchased ); - incrementcounter( "global_zm_boards", boards ); - incrementcounter( "global_zm_sacrifices", sacrifices ); - incrementcounter( "global_zm_drops", drops ); - incrementcounter( "global_zm_total_nuke_pickedup", nuke_pickedup ); - incrementcounter( "global_zm_total_insta_kill_pickedup", insta_kill_pickedup ); - incrementcounter( "global_zm_total_full_ammo_pickedup", full_ammo_pickedup ); - incrementcounter( "global_zm_total_double_points_pickedup", double_points_pickedup ); - incrementcounter( "global_zm_total_meat_stink_pickedup", double_points_pickedup ); - incrementcounter( "global_zm_total_carpenter_pickedup", carpenter_pickedup ); - incrementcounter( "global_zm_total_fire_sale_pickedup", fire_sale_pickedup ); - incrementcounter( "global_zm_total_zombie_blood_pickedup", zombie_blood_pickedup ); - incrementcounter( "global_zm_use_magicbox", use_magicbox ); - incrementcounter( "global_zm_grabbed_from_magicbox", grabbed_from_magicbox ); - incrementcounter( "global_zm_use_perk_random", use_perk_random ); - incrementcounter( "global_zm_grabbed_from_perk_random", grabbed_from_perk_random ); - incrementcounter( "global_zm_use_pap", use_pap ); - incrementcounter( "global_zm_pap_weapon_grabbed", pap_weapon_grabbed ); - incrementcounter( "global_zm_claymores_planted", claymores_planted ); - incrementcounter( "global_zm_claymores_pickedup", claymores_pickedup ); - incrementcounter( "global_zm_ballistic_knives_pickedup", ballistic_knives_pickedup ); - incrementcounter( "global_zm_wallbuy_weapons_purchased", wallbuy_weapons_purchased ); - incrementcounter( "global_zm_power_turnedon", power_turnedon ); - incrementcounter( "global_zm_power_turnedoff", power_turnedoff ); - incrementcounter( "global_zm_planted_buildables_pickedup", planted_buildables_pickedup ); - incrementcounter( "global_zm_buildables_built", buildables_built ); - incrementcounter( "global_zm_ammo_purchased", ammo_purchased ); - incrementcounter( "global_zm_upgraded_ammo_purchased", upgraded_ammo_purchased ); - incrementcounter( "global_zm_total_shots", total_shots ); - incrementcounter( "global_zm_time_played", time_played ); - incrementcounter( "global_zm_contaminations_received", contaminations_received ); - incrementcounter( "global_zm_contaminations_given", contaminations_given ); - incrementcounter( "global_zm_cheat_players_too_friendly", cheat_too_friendly ); - incrementcounter( "global_zm_cheats_cheat_too_many_weapons", cheat_too_many_weapons ); - incrementcounter( "global_zm_cheats_out_of_playable", cheat_out_of_playable_area ); - incrementcounter( "global_zm_total_cheats", cheat_total ); - incrementcounter( "global_zm_prison_tomahawk_acquired", prison_tomahawk_acquired ); - incrementcounter( "global_zm_prison_fan_trap_used", prison_fan_trap_used ); - incrementcounter( "global_zm_prison_acid_trap_used", prison_acid_trap_used ); - incrementcounter( "global_zm_prison_sniper_tower_used", prison_sniper_tower_used ); - incrementcounter( "global_zm_prison_ee_good_ending", prison_ee_good_ending ); - incrementcounter( "global_zm_prison_ee_bad_ending", prison_ee_bad_ending ); - incrementcounter( "global_zm_prison_ee_spoon_acquired", prison_ee_spoon_acquired ); - incrementcounter( "global_zm_prison_brutus_killed", prison_brutus_killed ); - incrementcounter( "global_zm_buried_lsat_purchased", buried_lsat_purchased ); - incrementcounter( "global_zm_buried_fountain_transporter_used", buried_fountain_transporter_used ); - incrementcounter( "global_zm_buried_ghost_killed", buried_ghost_killed ); - incrementcounter( "global_zm_buried_ghost_drained_player", buried_ghost_drained_player ); - incrementcounter( "global_zm_buried_ghost_perk_acquired", buried_ghost_perk_acquired ); - incrementcounter( "global_zm_buried_sloth_booze_given", buried_sloth_booze_given ); - incrementcounter( "global_zm_buried_sloth_booze_break_barricade", buried_sloth_booze_break_barricade ); - incrementcounter( "global_zm_buried_sloth_candy_given", buried_sloth_candy_given ); - incrementcounter( "global_zm_buried_sloth_candy_protect", buried_sloth_candy_protect ); - incrementcounter( "global_zm_buried_sloth_candy_build_buildable", buried_sloth_candy_build_buildable ); - incrementcounter( "global_zm_buried_sloth_candy_wallbuy", buried_sloth_candy_wallbuy ); - incrementcounter( "global_zm_buried_sloth_candy_fetch_buildable", buried_sloth_candy_fetch_buildable ); - incrementcounter( "global_zm_buried_sloth_candy_box_lock", buried_sloth_candy_box_lock ); - incrementcounter( "global_zm_buried_sloth_candy_box_move", buried_sloth_candy_box_move ); - incrementcounter( "global_zm_buried_sloth_candy_box_spin", buried_sloth_candy_box_spin ); - incrementcounter( "global_zm_buried_sloth_candy_powerup_cycle", buried_sloth_candy_powerup_cycle ); - incrementcounter( "global_zm_buried_sloth_candy_dance", buried_sloth_candy_dance ); - incrementcounter( "global_zm_buried_sloth_candy_crawler", buried_sloth_candy_crawler ); - incrementcounter( "global_zm_buried_wallbuy_placed", buried_wallbuy_placed ); - incrementcounter( "global_zm_buried_wallbuy_placed_ak74u_zm", buried_wallbuy_placed_ak74u_zm ); - incrementcounter( "global_zm_buried_wallbuy_placed_an94_zm", buried_wallbuy_placed_an94_zm ); - incrementcounter( "global_zm_buried_wallbuy_placed_pdw57_zm", buried_wallbuy_placed_pdw57_zm ); - incrementcounter( "global_zm_buried_wallbuy_placed_svu_zm", buried_wallbuy_placed_svu_zm ); - incrementcounter( "global_zm_buried_wallbuy_placed_tazer_knuckles_zm", buried_wallbuy_placed_tazer_knuckles_zm ); - incrementcounter( "global_zm_buried_wallbuy_placed_870mcs_zm", buried_wallbuy_placed_870mcs_zm ); - incrementcounter( "global_zm_tomb_mechz_killed", tomb_mechz_killed ); - incrementcounter( "global_zm_tomb_giant_robot_stomped", tomb_giant_robot_stomped ); - incrementcounter( "global_zm_tomb_giant_robot_accessed", tomb_giant_robot_accessed ); - incrementcounter( "global_zm_tomb_generator_captured", tomb_generator_captured ); - incrementcounter( "global_zm_tomb_generator_defended", tomb_generator_defended ); - incrementcounter( "global_zm_tomb_generator_lost", tomb_generator_lost ); - incrementcounter( "global_zm_tomb_dig", tomb_dig ); - incrementcounter( "global_zm_tomb_golden_shovel", tomb_golden_shovel ); - incrementcounter( "global_zm_tomb_golden_hard_hat", tomb_golden_hard_hat ); - incrementcounter( "global_zm_tomb_perk_extension", tomb_perk_extension ); -} - -get_specific_stat( stat_category, stat_name ) //checked matches cerberus output -{ - return self getdstat( stat_category, stat_name, "StatValue" ); -} - -do_stats_for_gibs( zombie, limb_tags_array ) //checked partially changed to match cerberus output //did not use foreach to prevent infinite loop due to continue -{ - if ( isDefined( zombie ) && isDefined( zombie.attacker ) && isplayer( zombie.attacker ) ) - { - i = 0; - while ( i < limb_tags_array.size ) - { - stat_name = undefined; - if ( limb_tags_array[ i ] == level._zombie_gib_piece_index_right_arm ) - { - stat_name = "right_arm_gibs"; - } - else if ( limb_tags_array[ i ] == level._zombie_gib_piece_index_left_arm ) - { - stat_name = "left_arm_gibs"; - } - else if ( limb_tags_array[ i ] == level._zombie_gib_piece_index_right_leg ) - { - stat_name = "right_leg_gibs"; - } - else if ( limb_tags_array[ i ] == level._zombie_gib_piece_index_left_leg ) - { - stat_name = "left_leg_gibs"; - } - else if ( limb == level._zombie_gib_piece_index_head ) - { - stat_name = "head_gibs"; - } - if ( !isDefined( stat_name ) ) - { - i++; - continue; - } - zombie.attacker increment_client_stat( stat_name, 0 ); - zombie.attacker increment_client_stat( "gibs" ); - i++; - } - } -} - -initializematchstats() //checked matches cerberus output -{ - if ( !level.onlinegame || !gamemodeismode( level.gamemode_public_match ) ) - { - return; - } - self.pers[ "lastHighestScore" ] = self getdstat( "HighestStats", "highest_score" ); - currgametype = level.gametype; - self gamehistorystartmatch( getgametypeenumfromname( currgametype, 0 ) ); -} - -adjustrecentstats() //checked matches cerberus output -{ - /* -/# - if ( getDvarInt( "scr_writeConfigStrings" ) == 1 || getDvarInt( "scr_hostmigrationtest" ) == 1 ) - { - return; -#/ - } - */ - initializematchstats(); -} - -uploadstatssoon() //checked matches cerberus output -{ - self notify( "upload_stats_soon" ); - self endon( "upload_stats_soon" ); - self endon( "disconnect" ); - wait 1; - uploadstats( self ); -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_timer.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_timer.gsc deleted file mode 100644 index dba9537..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_timer.gsc +++ /dev/null @@ -1,80 +0,0 @@ -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - precacheshader( "zombie_stopwatchneedle" ); - precacheshader( "zombie_stopwatch" ); - precacheshader( "zombie_stopwatch_glass" ); - if ( !isDefined( level.stopwatch_length_width ) ) - { - level.stopwatch_length_width = 96; - } -} - -start_timer( time, stop_notify ) //checked matches cerberus output -{ - self notify( "stop_prev_timer" ); - self endon( "stop_prev_timer" ); - if ( !isDefined( self.stopwatch_elem ) ) - { - self.stopwatch_elem = newclienthudelem( self ); - self.stopwatch_elem.horzalign = "left"; - self.stopwatch_elem.vertalign = "top"; - self.stopwatch_elem.alignx = "left"; - self.stopwatch_elem.aligny = "top"; - self.stopwatch_elem.x = 10; - self.stopwatch_elem.alpha = 0; - self.stopwatch_elem.sort = 2; - self.stopwatch_elem_glass = newclienthudelem( self ); - self.stopwatch_elem_glass.horzalign = "left"; - self.stopwatch_elem_glass.vertalign = "top"; - self.stopwatch_elem_glass.alignx = "left"; - self.stopwatch_elem_glass.aligny = "top"; - self.stopwatch_elem_glass.x = 10; - self.stopwatch_elem_glass.alpha = 0; - self.stopwatch_elem_glass.sort = 3; - self.stopwatch_elem_glass setshader( "zombie_stopwatch_glass", level.stopwatch_length_width, level.stopwatch_length_width ); - } - self thread update_hud_position(); - if ( isDefined( stop_notify ) ) - { - self thread wait_for_stop_notify( stop_notify ); - } - if ( time > 60 ) - { - time = 0; - } - self.stopwatch_elem setclock( time, 60, "zombie_stopwatch", level.stopwatch_length_width, level.stopwatch_length_width ); - self.stopwatch_elem.alpha = 1; - self.stopwatch_elem_glass.alpha = 1; - wait time; - self notify( "countdown_finished" ); - wait 1; - self.stopwatch_elem.alpha = 0; - self.stopwatch_elem_glass.alpha = 0; -} - -wait_for_stop_notify( stop_notify ) //checked matches cerberus output -{ - self endon( "stop_prev_timer" ); - self endon( "countdown_finished" ); - self waittill( stop_notify ); - self.stopwatch_elem.alpha = 0; - self.stopwatch_elem_glass.alpha = 0; -} - -update_hud_position() //checked matches cerberus output -{ - self endon( "disconnect" ); - self endon( "stop_prev_timer" ); - self endon( "countdown_finished" ); - while ( 1 ) - { - self.stopwatch_elem.y = 20; - self.stopwatch_elem_glass.y = 20; - wait 0.05; - } -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_tombstone.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_tombstone.gsc deleted file mode 100644 index f48f055..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_tombstone.gsc +++ /dev/null @@ -1,502 +0,0 @@ -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_weap_cymbal_monkey; -#include maps/mp/zombies/_zm_melee_weapon; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() //checked matches cerberus output -{ - onplayerconnect_callback( ::tombstone_player_init ); - level.tombstone_laststand_func = ::tombstone_laststand; - level.tombstone_spawn_func = ::tombstone_spawn; - level thread tombstone_hostmigration(); - if ( is_true( level.zombiemode_using_tombstone_perk ) ) - { - add_custom_limited_weapon_check( ::is_weapon_available_in_tombstone ); - } -} - -tombstone_player_init() //checked matches cerberus output -{ - while ( !isDefined( self.tombstone_index ) ) - { - wait 0.1; - } - level.tombstones[ self.tombstone_index ] = spawnstruct(); -} - -tombstone_spawn() //checked matches cerberus output -{ - dc = spawn( "script_model", self.origin + vectorScale( ( 0, 0, 1 ), 40 ) ); - dc.angles = self.angles; - dc setmodel( "tag_origin" ); - dc_icon = spawn( "script_model", self.origin + vectorScale( ( 0, 0, 1 ), 40 ) ); - dc_icon.angles = self.angles; - dc_icon setmodel( "ch_tombstone1" ); - dc_icon linkto( dc ); - dc.icon = dc_icon; - dc.script_noteworthy = "player_tombstone_model"; - dc.player = self; - self thread tombstone_clear(); - dc thread tombstone_wobble(); - dc thread tombstone_revived( self ); - result = self waittill_any_return( "player_revived", "spawned_player", "disconnect" ); - if ( result == "player_revived" || result == "disconnect" ) - { - dc notify( "tombstone_timedout" ); - dc_icon unlink(); - dc_icon delete(); - dc delete(); - return; - } - dc thread tombstone_timeout(); - dc thread tombstone_grab(); -} - -tombstone_clear() //checked matches cerberus output -{ - result = self waittill_any_return( "tombstone_timedout", "tombstone_grabbed" ); - level.tombstones[ self.tombstone_index ] = spawnstruct(); -} - -tombstone_revived( player ) //checked changed to match cerberus output -{ - self endon( "tombstone_timedout" ); - player endon( "disconnect" ); - shown = 1; - while ( isDefined( self ) && isDefined( player ) ) - { - if ( isDefined( player.revivetrigger ) && is_true( player.revivetrigger.beingrevived ) ) - { - if ( shown ) - { - shown = 0; - self.icon hide(); - } - } - else if ( !shown ) - { - shown = 1; - self.icon show(); - } - wait 0.05; - } -} - -tombstone_laststand() //checked changed to match cerberus output -{ - primaries = self getweaponslistprimaries(); - currentweapon = self getcurrentweapon(); - dc = level.tombstones[ self.tombstone_index ]; - dc.player = self; - dc.weapon = []; - dc.current_weapon = -1; - foreach ( weapon in primaries ) - { - dc.weapon[ index ] = weapon; - dc.stockcount[ index ] = self getweaponammostock( weapon ); - if ( weapon == currentweapon ) - { - dc.current_weapon = index; - } - } - if ( is_true( self.hasriotshield ) ) - { - dc.hasriotshield = 1; - } - dc save_weapons_for_tombstone( self ); - if ( self hasweapon( "claymore_zm" ) ) - { - dc.hasclaymore = 1; - dc.claymoreclip = self getweaponammoclip( "claymore_zm" ); - } - if ( self hasweapon( "emp_grenade_zm" ) ) - { - dc.hasemp = 1; - dc.empclip = self getweaponammoclip( "emp_grenade_zm" ); - } - dc.perk = tombstone_save_perks( self ); - lethal_grenade = self get_player_lethal_grenade(); - if ( self hasweapon( lethal_grenade ) ) - { - dc.grenade = self getweaponammoclip( lethal_grenade ); - } - else - { - dc.grenade = 0; - } - if ( maps/mp/zombies/_zm_weap_cymbal_monkey::cymbal_monkey_exists() ) - { - dc.zombie_cymbal_monkey_count = self getweaponammoclip( "cymbal_monkey_zm" ); - } -} - -tombstone_save_perks( ent ) //checked matches cerberus output -{ - perk_array = []; - if ( ent hasperk( "specialty_armorvest" ) ) - { - perk_array[ perk_array.size ] = "specialty_armorvest"; - } - if ( ent hasperk( "specialty_deadshot" ) ) - { - perk_array[ perk_array.size ] = "specialty_deadshot"; - } - if ( ent hasperk( "specialty_fastreload" ) ) - { - perk_array[ perk_array.size ] = "specialty_fastreload"; - } - if ( ent hasperk( "specialty_flakjacket" ) ) - { - perk_array[ perk_array.size ] = "specialty_flakjacket"; - } - if ( ent hasperk( "specialty_longersprint" ) ) - { - perk_array[ perk_array.size ] = "specialty_longersprint"; - } - if ( ent hasperk( "specialty_quickrevive" ) ) - { - perk_array[ perk_array.size ] = "specialty_quickrevive"; - } - if ( ent hasperk( "specialty_rof" ) ) - { - perk_array[ perk_array.size ] = "specialty_rof"; - } - return perk_array; -} - -tombstone_grab() //checked partially changed to match cerberus output -{ - self endon( "tombstone_timedout" ); - wait 1; - while ( isDefined( self ) ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ].is_zombie ) - { - i++; - continue; - } - if ( isDefined( self.player ) && players[ i ] == self.player ) - { - tombstone_machine_triggers = getentarray( "specialty_scavenger", "script_noteworthy" ); - istombstonepowered = 0; - foreach ( trigger in tombstone_machine_triggers ) - { - if ( is_true( trigger.power_on ) || is_true( trigger.turbine_power_on ) ) - { - istombstonepowered = 1; - } - } - if ( istombstonepowered ) - { - dist = distance( players[ i ].origin, self.origin ); - if ( dist < 64 ) - { - playfx( level._effect[ "powerup_grabbed" ], self.origin ); - playfx( level._effect[ "powerup_grabbed_wave" ], self.origin ); - players[ i ] tombstone_give(); - wait 0.1; - playsoundatposition( "zmb_tombstone_grab", self.origin ); - self stoploopsound(); - self.icon unlink(); - self.icon delete(); - self delete(); - self notify( "tombstone_grabbed" ); - players[ i ] clientnotify( "dc0" ); - players[ i ] notify( "dance_on_my_grave" ); - } - } - } - i++; - } - wait_network_frame(); - } -} - -tombstone_give() //checked partially changed to match cerberus output -{ - dc = level.tombstones[ self.tombstone_index ]; - if ( !flag( "solo_game" ) ) - { - primaries = self getweaponslistprimaries(); - if ( dc.weapon.size > 1 || primaries.size > 1 ) - { - foreach ( weapon in primaries ) - { - self takeweapon( weapon ); - } - } - i = 0; - while ( i < dc.weapon.size ) - { - if ( !isDefined( dc.weapon[ i ] ) ) - { - i++; - continue; - } - if ( dc.weapon[ i ] == "none" ) - { - i++; - continue; - } - weapon = dc.weapon[ i ]; - stock = dc.stockcount[ i ]; - if ( !self hasweapon( weapon ) ) - { - self giveweapon( weapon, 0, self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); - self setweaponammoclip( weapon, weaponclipsize( weapon ) ); - self setweaponammostock( weapon, stock ); - if ( i == dc.current_weapon ) - { - self switchtoweapon( weapon ); - } - } - i++; - } - } - if ( is_true( dc.hasriotshield ) ) - { - self maps/mp/zombies/_zm_equipment::equipment_give( "riotshield_zm" ); - if ( isDefined( self.player_shield_reset_health ) ) - { - self [[ self.player_shield_reset_health ]](); - } - } - dc restore_weapons_for_tombstone( self ); - if ( is_true( dc.hasclaymore ) && !self hasweapon( "claymore_zm" ) ) - { - self giveweapon( "claymore_zm" ); - self set_player_placeable_mine( "claymore_zm" ); - self setactionslot( 4, "weapon", "claymore_zm" ); - self setweaponammoclip( "claymore_zm", dc.claymoreclip ); - } - if ( is_true( dc.hasemp ) ) - { - self giveweapon( "emp_grenade_zm" ); - self setweaponammoclip( "emp_grenade_zm", dc.empclip ); - } - if ( isDefined( dc.perk ) && dc.perk.size > 0 ) - { - i = 0; - while ( i < dc.perk.size ) - { - if ( self hasperk( dc.perk[ i ] ) ) - { - i++; - continue; - } - if ( dc.perk[ i ] == "specialty_quickrevive" && flag( "solo_game" ) ) - { - i++; - continue; - } - maps/mp/zombies/_zm_perks::give_perk( dc.perk[ i ] ); - i++; - } - } - else if ( dc.grenade > 0 && !flag( "solo_game" ) ) - { - curgrenadecount = 0; - if ( self hasweapon( self get_player_lethal_grenade() ) ) - { - self getweaponammoclip( self get_player_lethal_grenade() ); - } - else - { - self giveweapon( self get_player_lethal_grenade() ); - } - self setweaponammoclip( self get_player_lethal_grenade(), dc.grenade + curgrenadecount ); - } - if ( maps/mp/zombies/_zm_weap_cymbal_monkey::cymbal_monkey_exists() && !flag( "solo_game" ) ) - { - if ( dc.zombie_cymbal_monkey_count ) - { - self maps/mp/zombies/_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); - self setweaponammoclip( "cymbal_monkey_zm", dc.zombie_cymbal_monkey_count ); - } - } -} - -tombstone_wobble() //checked matches cerberus output -{ - self endon( "tombstone_grabbed" ); - self endon( "tombstone_timedout" ); - if ( isDefined( self ) ) - { - wait 1; - playfxontag( level._effect[ "powerup_on" ], self, "tag_origin" ); - self playsound( "zmb_tombstone_spawn" ); - self playloopsound( "zmb_tombstone_looper" ); - } - while ( isDefined( self ) ) - { - self rotateyaw( 360, 3 ); - wait 2.9; - } -} - -tombstone_timeout() //checked partially changed to match cerberus output -{ - self endon( "tombstone_grabbed" ); - self thread playtombstonetimeraudio(); - wait 48.5; - i = 0; - while ( i < 40 ) - { - if ( i % 2 ) - { - self.icon ghost(); - } - else - { - self.icon show(); - } - if ( i < 15 ) - { - wait 0.5; - i++; - continue; - } - if ( i < 25 ) - { - wait 0.25; - i++; - continue; - } - wait 0.1; - i++; - } - self notify( "tombstone_timedout" ); - self.icon unlink(); - self.icon delete(); - self delete(); -} - -playtombstonetimeraudio() //checked matches cerberus output -{ - self endon( "tombstone_grabbed" ); - self endon( "tombstone_timedout" ); - player = self.player; - self thread playtombstonetimerout( player ); - while ( 1 ) - { - player playsoundtoplayer( "zmb_tombstone_timer_count", player ); - wait 1; - } -} - -playtombstonetimerout( player ) //checked matches cerberus output -{ - self endon( "tombstone_grabbed" ); - self waittill( "tombstone_timedout" ); - player playsoundtoplayer( "zmb_tombstone_timer_out", player ); -} - -save_weapons_for_tombstone( player ) //checked changed to match cerberus output -{ - self.tombstone_melee_weapons = []; - - for ( i = 0; i < level._melee_weapons.size; i++ ) - { - self save_weapon_for_tombstone( player, level._melee_weapons[ i ].weapon_name ); - } -} - -save_weapon_for_tombstone( player, weapon_name ) //checked matches cerberus output -{ - if ( player hasweapon( weapon_name ) ) - { - self.tombstone_melee_weapons[ weapon_name ] = 1; - } -} - -restore_weapons_for_tombstone( player ) -{ - for ( i = 0; i < level._melee_weapons.size; i++ ) - { - self restore_weapon_for_tombstone( player, level._melee_weapons[ i ].weapon_name ); - } - self.tombstone_melee_weapons = undefined; -} - -restore_weapon_for_tombstone( player, weapon_name ) //checked changed to match cerberus output -{ - if ( !isDefined( weapon_name ) || !isDefined( self.tombstone_melee_weapons ) || !isDefined( self.tombstone_melee_weapons[ weapon_name ] ) ) - { - return; - } - if ( is_true( self.tombstone_melee_weapons[ weapon_name ] ) ) - { - player giveweapon( weapon_name ); - player change_melee_weapon( weapon_name, "none" ); - self.tombstone_melee_weapons[ weapon_name ] = 0; - } -} - -tombstone_hostmigration() //checked changed to match cerberus output -{ - level endon( "end_game" ); - level notify( "tombstone_hostmigration" ); - level endon( "tombstone_hostmigration" ); - while ( 1 ) - { - level waittill( "host_migration_end" ); - tombstones = getentarray( "player_tombstone_model", "script_noteworthy" ); - foreach ( model in tombstones ) - { - playfxontag( level._effect[ "powerup_on" ], model, "tag_origin" ); - } - } -} - -is_weapon_available_in_tombstone( weapon, player_to_check ) //checked partially changed to match cerberus output -{ - count = 0; - upgradedweapon = weapon; - if ( isDefined( level.zombie_weapons[ weapon ] ) && isDefined( level.zombie_weapons[ weapon ].upgrade_name ) ) - { - upgradedweapon = level.zombie_weapons[ weapon ].upgrade_name; - } - tombstone_index = 0; - while ( tombstone_index < level.tombstones.size ) - { - dc = level.tombstones[ tombstone_index ]; - if ( !isDefined( dc.weapon ) ) - { - tombstone_index++; - continue; - } - if ( isDefined( player_to_check ) && dc.player != player_to_check ) - { - tombstone_index++; - continue; - } - weapon_index = 0; - while ( weapon_index < dc.weapon.size ) - { - if ( !isDefined( dc.weapon[ weapon_index ] ) ) - { - weapon_index++; - continue; - } - tombstone_weapon = dc.weapon[ weapon_index ]; - if ( tombstone_weapon == weapon || tombstone_weapon == upgradedweapon ) - { - count++; - } - weapon_index++; - } - tombstone_index++; - } - return count; -} - - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_traps.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_traps.gsc deleted file mode 100644 index 2596f3c..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_traps.gsc +++ /dev/null @@ -1,866 +0,0 @@ -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/_visionset_mgr; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - level.trap_kills = 0; - traps = getentarray( "zombie_trap", "targetname" ); - array_thread( traps, ::trap_init ); - level thread register_visionsets( traps ); - level.burning_zombies = []; - level.elec_trap_time = 40; - level.elec_trap_cooldown_time = 60; -} - -trap_init() //checked partially changed to match cerberus output //did not change for loop to while loop to prevent infinite loop bug caused by continue in a for loop -{ - self ent_flag_init( "flag_active" ); - self ent_flag_init( "flag_cooldown" ); - self._trap_type = ""; - if ( isDefined( self.script_noteworthy ) ) - { - self._trap_type = self.script_noteworthy; - if ( isDefined( level._zombiemode_trap_activate_funcs ) && isDefined( level._zombiemode_trap_activate_funcs[ self._trap_type ] ) ) - { - self._trap_activate_func = level._zombiemode_trap_activate_funcs[ self._trap_type ]; - } - switch( self.script_noteworthy ) - { - case "rotating": - self._trap_activate_func = ::trap_activate_rotating; - break; - case "electric": - self._trap_activate_func = ::trap_activate_electric; - break; - case "flipper": - self._trap_activate_func = ::trap_activate_flipper; - break; - case "fire": - default: - self._trap_activate_func = ::trap_activate_fire; - } - if ( isDefined( level._zombiemode_trap_use_funcs ) && isDefined( level._zombiemode_trap_use_funcs[ self._trap_type ] ) ) - { - self._trap_use_func = level._zombiemode_trap_use_funcs[ self._trap_type ]; - } - else - { - self._trap_use_func = ::trap_use_think; - } - } - self trap_model_type_init(); - self._trap_use_trigs = []; - self._trap_lights = []; - self._trap_movers = []; - self._trap_switches = []; - components = getentarray( self.target, "targetname" ); - for ( i = 0; i < components.size; i++ ) - { - if ( isDefined( components[ i ].script_noteworthy ) ) - { - switch( components[ i ].script_noteworthy ) - { - case "counter_1s": - self.counter_1s = components[ i ]; - break; - case "counter_10s": - self.counter_10s = components[ i ]; - break; - case "counter_100s": - self.counter_100s = components[ i ]; - break; - case "mover": - self._trap_movers[ self._trap_movers.size ] = components[ i ]; - break; - case "switch": - self._trap_switches[ self._trap_switches.size ] = components[ i ]; - break; - case "light": - self._trap_lightes[ self._trap_lightes.size ] = components[ i ]; - break; - } - } - if ( isDefined( components[ i ].script_string ) ) - { - switch( components[ i ].script_string ) - { - case "flipper1": - self.flipper1 = components[ i ]; - break; - case "flipper2": - self.flipper2 = components[ i ]; - break; - case "flipper1_radius_check": - self.flipper1_radius_check = components[ i ]; - break; - case "flipper2_radius_check": - self.flipper2_radius_check = components[ i ]; - break; - case "target1": - self.target1 = components[ i ]; - break; - case "target2": - self.target2 = components[ i ]; - break; - case "target3": - self.target3 = components[ i ]; - break; - } - } - switch( components[ i ].classname ) - { - case "trigger_use": - self._trap_use_trigs[ self._trap_use_trigs.size ] = components[ i ]; - break; - case "script_model": - if ( components[ i ].model == self._trap_light_model_off ) - { - self._trap_lights[ self._trap_lights.size ] = components[ i ]; - } - else if ( components[ i ].model == self._trap_switch_model ) - { - self._trap_switches[ self._trap_switches.size ] = components[ i ]; - } - } - } - self._trap_fx_structs = []; - components = getstructarray( self.target, "targetname" ); - i = 0; - while ( i < components.size ) - { - if ( isDefined( components[ i ].script_string ) && components[ i ].script_string == "use_this_angle" ) - { - self.use_this_angle = components[ i ]; - i++; - continue; - } - self._trap_fx_structs[ self._trap_fx_structs.size ] = components[ i ]; - i++; - } - /* - /# - assert( self._trap_use_trigs.size > 0, "_zm_traps::init no use triggers found for " + self.target ); - #/ - */ - if ( !isDefined( self.zombie_cost ) ) - { - self.zombie_cost = 1000; - } - self._trap_in_use = 0; - self._trap_cooling_down = 0; - self thread trap_dialog(); - flag_wait( "start_zombie_round_logic" ); - self trap_lights_red(); - for ( i = 0; i < self._trap_use_trigs.size; i++ ) - { - self._trap_use_trigs[ i ] setcursorhint( "HINT_NOICON" ); - } - if ( !isDefined( self.script_flag_wait ) ) - { - self trap_set_string( &"ZOMBIE_NEED_POWER" ); - flag_wait( "power_on" ); - } - else if ( !isDefined( level.flag[ self.script_flag_wait ] ) ) - { - flag_init( self.script_flag_wait ); - } - flag_wait( self.script_flag_wait ); - self trap_set_string( &"ZOMBIE_BUTTON_BUY_TRAP", self.zombie_cost ); - self trap_lights_green(); - for ( i = 0; i < self._trap_use_trigs.size; i++ ) - { - self._trap_use_trigs[ i ] thread [[ self._trap_use_func ]]( self ); - } -} - -trap_use_think( trap ) //checked changed to match cerberus output -{ - while ( 1 ) - { - self waittill( "trigger", who ); - if ( who in_revive_trigger() ) - { - continue; - } - if ( is_player_valid( who ) && !trap._trap_in_use ) - { - if ( who.score >= trap.zombie_cost ) - { - who maps/mp/zombies/_zm_score::minus_to_player_score( trap.zombie_cost ); - } - else - { - continue; - } - trap._trap_in_use = 1; - trap trap_set_string( &"ZOMBIE_TRAP_ACTIVE" ); - play_sound_at_pos( "purchase", who.origin ); - if ( trap._trap_switches.size ) - { - trap thread trap_move_switches(); - trap waittill( "switch_activated" ); - } - trap trigger_on(); - trap thread [[ trap._trap_activate_func ]](); - trap waittill( "trap_done" ); - trap trigger_off(); - trap._trap_cooling_down = 1; - trap trap_set_string( &"ZOMBIE_TRAP_COOLDOWN" ); - /* - /# - if ( getDvarInt( "zombie_cheat" ) >= 1 ) - { - trap._trap_cooldown_time = 5; - #/ - } - */ - wait trap._trap_cooldown_time; - trap._trap_cooling_down = 0; - trap notify( "available" ); - trap._trap_in_use = 0; - trap trap_set_string( &"ZOMBIE_BUTTON_BUY_TRAP", trap.zombie_cost ); - } - } -} - -trap_lights_red() //checked changed to match cerberus output -{ - for ( i = 0; i < self._trap_lights.size; i++ ) - { - light = self._trap_lights[ i ]; - light setmodel( self._trap_light_model_red ); - if ( isDefined( light.fx ) ) - { - light.fx delete(); - } - light.fx = maps/mp/zombies/_zm_net::network_safe_spawn( "trap_lights_red", 2, "script_model", light.origin ); - light.fx setmodel( "tag_origin" ); - light.fx.angles = light.angles; - playfxontag( level._effect[ "zapper_light_notready" ], light.fx, "tag_origin" ); - } -} - -trap_lights_green() //checked partially changed to match cerberus output //did not change while loop to for loop to prevent infinite loop bug -{ - i = 0; - while ( i < self._trap_lights.size ) - { - light = self._trap_lights[ i ]; - if ( isDefined( light._switch_disabled ) ) - { - i++; - continue; - } - light setmodel( self._trap_light_model_green ); - if ( isDefined( light.fx ) ) - { - light.fx delete(); - } - light.fx = maps/mp/zombies/_zm_net::network_safe_spawn( "trap_lights_green", 2, "script_model", light.origin ); - light.fx setmodel( "tag_origin" ); - light.fx.angles = light.angles; - playfxontag( level._effect[ "zapper_light_ready" ], light.fx, "tag_origin" ); - i++; - } -} - -trap_set_string( string, param1, param2 ) //checked partially changed to match cerberus output //did not change while loop to for loop to prevent infinite loop bug with continues -{ - i = 0; - while ( i < self._trap_use_trigs.size ) - { - if ( !isDefined( param1 ) ) - { - self._trap_use_trigs[ i ] sethintstring( string ); - i++; - continue; - } - if ( !isDefined( param2 ) ) - { - self._trap_use_trigs[ i ] sethintstring( string, param1 ); - i++; - continue; - } - self._trap_use_trigs[ i ] sethintstring( string, param1, param2 ); - i++; - } -} - -trap_move_switches() //checked checked changed to match cerberus output -{ - self trap_lights_red(); - for ( i = 0; i < self._trap_switches.size; i++ ) - { - self._trap_switches[ i ] rotatepitch( 180, 0,5 ); - self._trap_switches[ i ] playsound( "amb_sparks_l_b" ); - } - self._trap_switches[ 0 ] waittill( "rotatedone" ); - self notify( "switch_activated" ); - self waittill( "available" ); - for ( i = 0; i < self._trap_switches.size; i++ ) - { - self._trap_switches[ i ] rotatepitch( -180, 0,5 ); - } - self._trap_switches[ 0 ] waittill( "rotatedone" ); - self trap_lights_green(); -} - -trap_activate_electric() //checked changed to match cerberus output -{ - self._trap_duration = 40; - self._trap_cooldown_time = 60; - self notify( "trap_activate" ); - if ( isDefined( self.script_string ) ) - { - number = int( self.script_string ); - if ( number != 0 ) - { - exploder( number ); - } - else - { - clientnotify( self.script_string + "1" ); - } - } - fx_points = getstructarray( self.target, "targetname" ); - for ( i = 0; i < fx_points.size; i++ ) - { - wait_network_frame(); - fx_points[ i ] thread trap_audio_fx( self ); - } - self thread trap_damage(); - wait self._trap_duration; - self notify( "trap_done" ); - if ( isDefined( self.script_string ) ) - { - clientnotify( self.script_string + "0" ); - } -} - -trap_activate_fire() //checked changed to match cerberus output -{ - self._trap_duration = 40; - self._trap_cooldown_time = 60; - clientnotify( self.script_string + "1" ); - clientnotify( self.script_parameters ); - fx_points = getstructarray( self.target, "targetname" ); - for ( i = 0; i < fx_points.size; i++ ) - { - wait_network_frame(); - fx_points[ i ] thread trap_audio_fx( self ); - } - self thread trap_damage(); - wait self._trap_duration; - self notify( "trap_done" ); - clientnotify( self.script_string + "0" ); - clientnotify( self.script_parameters ); -} - -trap_activate_rotating() //checked partially changed to match cerberus output -{ - self endon( "trap_done" ); - self._trap_duration = 30; - self._trap_cooldown_time = 60; - self thread trap_damage(); - self thread trig_update( self._trap_movers[ 0 ] ); - old_angles = self._trap_movers[ 0 ].angles; - for ( i = 0; i < self._trap_movers.size; i++ ) - { - self._trap_movers[ i ] rotateyaw( 360, 5, 4.5 ); - } - wait 5; - step = 1.5; - t = 0; - while ( t < self._trap_duration ) //this would not make sense as a for loop leaving as a while loop - { - for ( i = 0; i < self._trap_movers.size; i++ ) - { - self._trap_movers[ i ] rotateyaw( 360, step ); - } - wait step; - t += step; - } - for ( i = 0; i < self._trap_movers.size; i++ ) - { - self._trap_movers[ i ] rotateyaw( 360, 5, 0, 4.5 ); - } - wait 5; - for ( i = 0; i < self._trap_movers.size; i++ ) - { - self._trap_movers[ i ].angles = old_angles; - } - self notify( "trap_done" ); -} - -trap_activate_flipper() //checked matches cerberus output -{ -} - -trap_audio_fx( trap ) //checked matches cerberus output -{ - sound_origin = undefined; - if ( trap.script_noteworthy == "electric" ) - { - sound_origin = spawn( "script_origin", self.origin ); - sound_origin playsound( "zmb_elec_start" ); - sound_origin playloopsound( "zmb_elec_loop" ); - self thread play_electrical_sound( trap ); - } - else - { - if ( trap.script_noteworthy == "fire" ) - { - sound_origin = spawn( "script_origin", self.origin ); - sound_origin playsound( "zmb_firetrap_start" ); - sound_origin playloopsound( "zmb_firetrap_loop" ); - } - } - trap waittill_any_or_timeout( trap._trap_duration, "trap_done" ); - if ( isDefined( sound_origin ) ) - { - if ( trap.script_noteworthy == "fire" ) - { - playsoundatposition( "zmb_firetrap_end", sound_origin.origin ); - } - sound_origin stoploopsound(); - wait 0.05; - sound_origin delete(); - } -} - -play_electrical_sound( trap ) //checked matches cerberus output -{ - trap endon( "trap_done" ); - while ( 1 ) - { - wait randomfloatrange( 0.1, 0.5 ); - playsoundatposition( "zmb_elec_arc", self.origin ); - } -} - -trap_damage() //checked partially changed to match cerberus output -{ - self endon( "trap_done" ); - while ( 1 ) - { - self waittill( "trigger", ent ); - if ( isplayer( ent ) ) - { - switch( self._trap_type ) - { - case "electric": - ent thread player_elec_damage(); - break; - case "fire": - case "rocket": - ent thread player_fire_damage(); - break; - case "rotating": - if ( ent getstance() == "stand" ) - { - ent dodamage( 50, ent.origin + vectorScale( ( 0, 0, 1 ), 20 ) ); - ent setstance( "crouch" ); - } - break; - } - //break; //this doesn't make much sense commenting out - } - else if ( !isDefined( ent.marked_for_death ) ) - { - switch( self._trap_type ) - { - case "rocket": - ent thread zombie_trap_death( self, 100 ); - break; - break; - case "rotating": - ent thread zombie_trap_death( self, 200 ); - break; - break; - case "electric": - case "fire": - default: - ent thread zombie_trap_death( self, randomint( 100 ) ); - break; - } - } - } -} - -trig_update( parent ) //checked matches cerberus output -{ - self endon( "trap_done" ); - start_angles = self.angles; - while ( 1 ) - { - self.angles = parent.angles; - wait 0.05; - } -} - -player_elec_damage() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( !isDefined( level.elec_loop ) ) - { - level.elec_loop = 0; - } - if ( !isDefined( self.is_burning ) && is_player_valid( self ) ) - { - self.is_burning = 1; - if ( is_true( level.trap_electric_visionset_registered ) ) - { - maps/mp/_visionset_mgr::vsmgr_activate( "overlay", "zm_trap_electric", self, 1.25, 1.25 ); - } - else - { - self setelectrified( 1.25 ); - } - shocktime = 2.5; - self shellshock( "electrocution", shocktime ); - if ( level.elec_loop == 0 ) - { - elec_loop = 1; - self playsound( "zmb_zombie_arc" ); - } - if ( !self hasperk( "specialty_armorvest" ) || self.health - 100 < 1 ) - { - radiusdamage( self.origin, 10, self.health + 100, self.health + 100 ); - self.is_burning = undefined; - } - else - { - self dodamage( 50, self.origin ); - wait 0.1; - self.is_burning = undefined; - } - } -} - -player_fire_damage() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( !isDefined( self.is_burning ) && !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - self.is_burning = 1; - if ( is_true( level.trap_fire_visionset_registered ) ) - { - maps/mp/_visionset_mgr::vsmgr_activate( "overlay", "zm_trap_burn", self, 1.25, 1.25 ); - } - else - { - self setburn( 1.25 ); - } - self notify( "burned" ); - if ( !self hasperk( "specialty_armorvest" ) || self.health - 100 < 1 ) - { - radiusdamage( self.origin, 10, self.health + 100, self.health + 100 ); - self.is_burning = undefined; - } - else - { - self dodamage( 50, self.origin ); - wait 0.1; - self.is_burning = undefined; - } - } -} - -zombie_trap_death( trap, param ) //checked matches cerberus output -{ - self endon( "death" ); - self.marked_for_death = 1; - switch( trap._trap_type ) - { - case "electric": - case "fire": - case "rocket": - if ( isDefined( self.animname ) && self.animname != "zombie_dog" ) - { - if ( param > 90 && level.burning_zombies.size < 6 ) - { - level.burning_zombies[ level.burning_zombies.size ] = self; - self thread zombie_flame_watch(); - self playsound( "ignite" ); - self thread maps/mp/animscripts/zm_death::flame_death_fx(); - playfxontag( level._effect[ "character_fire_death_torso" ], self, "J_SpineLower" ); - wait randomfloat( 1.25 ); - } - else - { - refs[ 0 ] = "guts"; - refs[ 1 ] = "right_arm"; - refs[ 2 ] = "left_arm"; - refs[ 3 ] = "right_leg"; - refs[ 4 ] = "left_leg"; - refs[ 5 ] = "no_legs"; - refs[ 6 ] = "head"; - self.a.gib_ref = refs[ randomint( refs.size ) ]; - playsoundatposition( "zmb_zombie_arc", self.origin ); - if ( trap._trap_type == "electric" ) - { - if ( randomint( 100 ) > 50 ) - { - self thread electroctute_death_fx(); - self thread play_elec_vocals(); - } - } - wait randomfloat( 1.25 ); - self playsound( "zmb_zombie_arc" ); - } - } - if ( isDefined( self.fire_damage_func ) ) - { - self [[ self.fire_damage_func ]]( trap ); - } - else - { - level notify( "trap_kill" ); - self dodamage( self.health + 666, self.origin, trap ); - } - break; - case "centrifuge": - case "rotating": - ang = vectorToAngle( trap.origin - self.origin ); - direction_vec = vectorScale( anglesToRight( ang ), param ); - if ( isDefined( self.trap_reaction_func ) ) - { - self [[ self.trap_reaction_func ]]( trap ); - } - level notify( "trap_kill" ); - self startragdoll(); - self launchragdoll( direction_vec ); - wait_network_frame(); - self.a.gib_ref = "head"; - self dodamage( self.health, self.origin, trap ); - break; - } -} - -zombie_flame_watch() //checked matches cerberus output -{ - self waittill( "death" ); - self stoploopsound(); - arrayremovevalue( level.burning_zombies, self ); -} - -play_elec_vocals() //checked matches cerberus output -{ - if ( isDefined( self ) ) - { - org = self.origin; - wait 0.15; - playsoundatposition( "zmb_elec_vocals", org ); - playsoundatposition( "zmb_zombie_arc", org ); - playsoundatposition( "zmb_exp_jib_zombie", org ); - } -} - -electroctute_death_fx() //checked matches cerberus output -{ - self endon( "death" ); - if ( is_true( self.is_electrocuted ) ) - { - return; - } - self.is_electrocuted = 1; - self thread electrocute_timeout(); - if ( self.team == level.zombie_team ) - { - level.bconfiretime = getTime(); - level.bconfireorg = self.origin; - } - if ( isDefined( level._effect[ "elec_torso" ] ) ) - { - playfxontag( level._effect[ "elec_torso" ], self, "J_SpineLower" ); - } - self playsound( "zmb_elec_jib_zombie" ); - wait 1; - tagarray = []; - tagarray[ 0 ] = "J_Elbow_LE"; - tagarray[ 1 ] = "J_Elbow_RI"; - tagarray[ 2 ] = "J_Knee_RI"; - tagarray[ 3 ] = "J_Knee_LE"; - tagarray = array_randomize( tagarray ); - if ( isDefined( level._effect[ "elec_md" ] ) ) - { - playfxontag( level._effect[ "elec_md" ], self, tagarray[ 0 ] ); - } - self playsound( "zmb_elec_jib_zombie" ); - wait 1; - self playsound( "zmb_elec_jib_zombie" ); - tagarray[ 0 ] = "J_Wrist_RI"; - tagarray[ 1 ] = "J_Wrist_LE"; - if ( !isDefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" ) - { - tagarray[ 2 ] = "J_Ankle_RI"; - tagarray[ 3 ] = "J_Ankle_LE"; - } - tagarray = array_randomize( tagarray ); - if ( isDefined( level._effect[ "elec_sm" ] ) ) - { - playfxontag( level._effect[ "elec_sm" ], self, tagarray[ 0 ] ); - playfxontag( level._effect[ "elec_sm" ], self, tagarray[ 1 ] ); - } -} - -electrocute_timeout() //checked matches cerberus output -{ - self endon( "death" ); - self playloopsound( "fire_manager_0" ); - wait 12; - self stoploopsound(); - if ( isDefined( self ) && isalive( self ) ) - { - self.is_electrocuted = 0; - self notify( "stop_flame_damage" ); - } -} - -trap_dialog() //checked partially changed to match cerberus output //did not change while loop to for loop to prevent in the infinite for loop bug caused by continues -{ - self endon( "warning_dialog" ); - level endon( "switch_flipped" ); - timer = 0; - while ( 1 ) - { - wait 0.5; - players = get_players(); - i = 0; - while ( i < players.size ) - { - dist = distancesquared( players[ i ].origin, self.origin ); - if ( dist > 4900 ) - { - timer = 0; - i++; - continue; - } - if ( dist < 4900 && timer < 3 ) - { - wait 0.5; - timer++; - } - if ( dist < 4900 && timer == 3 ) - { - index = maps/mp/zombies/_zm_weapons::get_player_index( players[ i ] ); - plr = "plr_" + index + "_"; - wait 3; - self notify( "warning_dialog" ); - } - i++; - } - } -} - -get_trap_array( trap_type ) //checked changed to match cerberus output -{ - ents = getentarray( "zombie_trap", "targetname" ); - traps = []; - for ( i = 0; i < ents.size; i++ ) - { - if ( ents[ i ].script_noteworthy == trap_type ) - { - traps[ traps.size ] = ents[ i ]; - } - } - return traps; -} - -trap_disable() //checked matches cerberus output -{ - cooldown = self._trap_cooldown_time; - if ( self._trap_in_use ) - { - self notify( "trap_done" ); - self._trap_cooldown_time = 0.05; - self waittill( "available" ); - } - array_thread( self._trap_use_trigs, ::trigger_off ); - self trap_lights_red(); - self._trap_cooldown_time = cooldown; -} - -trap_enable() //checked matches cerberus output -{ - array_thread( self._trap_use_trigs, ::trigger_on ); - self trap_lights_green(); -} - -trap_model_type_init() //checked matches cerberus output -{ - if ( !isDefined( self.script_parameters ) ) - { - self.script_parameters = "default"; - } - switch( self.script_parameters ) - { - case "pentagon_electric": - self._trap_light_model_off = "zombie_trap_switch_light"; - self._trap_light_model_green = "zombie_trap_switch_light_on_green"; - self._trap_light_model_red = "zombie_trap_switch_light_on_red"; - self._trap_switch_model = "zombie_trap_switch_handle"; - break; - case "default": - default: - self._trap_light_model_off = "zombie_zapper_cagelight"; - self._trap_light_model_green = "zombie_zapper_cagelight_green"; - self._trap_light_model_red = "zombie_zapper_cagelight_red"; - self._trap_switch_model = "zombie_zapper_handle"; - break; - } -} - -register_visionsets( a_traps ) //checked changed to match cerberus output -{ - a_registered_traps = []; - foreach ( trap in a_traps ) - { - if ( isDefined( trap.script_noteworthy ) ) - { - if ( !trap is_trap_registered( a_registered_traps ) ) - { - a_registered_traps[ trap.script_noteworthy ] = 1; - } - } - } - keys = getarraykeys( a_registered_traps ); - foreach ( key in keys ) - { - switch( key ) - { - case "electric": - if ( !isDefined( level.vsmgr_prio_overlay_zm_trap_electrified ) ) - { - level.vsmgr_prio_overlay_zm_trap_electrified = 60; - } - maps/mp/_visionset_mgr::vsmgr_register_info( "overlay", "zm_trap_electric", 16000, level.vsmgr_prio_overlay_zm_trap_electrified, 15, 1, ::maps/mp/_visionset_mgr::vsmgr_duration_lerp_thread_per_player, 0 ); - level.trap_electric_visionset_registered = 1; - break; - case "fire": - if ( !isDefined( level.vsmgr_prio_overlay_zm_trap_burn ) ) - { - level.vsmgr_prio_overlay_zm_trap_burn = 61; - } - maps/mp/_visionset_mgr::vsmgr_register_info( "overlay", "zm_trap_burn", 16000, level.vsmgr_prio_overlay_zm_trap_burn, 15, 1, ::maps/mp/_visionset_mgr::vsmgr_duration_lerp_thread_per_player, 0 ); - level.trap_fire_visionset_registered = 1; - break; - } - } -} - -is_trap_registered( a_registered_traps ) //checked matches cerberus output -{ - return isDefined( a_registered_traps[ self.script_noteworthy ] ); -} - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_turned.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_turned.gsc deleted file mode 100644 index cd5ea5b..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_turned.gsc +++ /dev/null @@ -1,431 +0,0 @@ -#include maps/mp/gametypes_zm/_spawnlogic; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/_visionset_mgr; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - level.turnedmeleeweapon = "zombiemelee_zm"; - level.turnedmeleeweapon_dw = "zombiemelee_dw"; - precacheitem( level.turnedmeleeweapon ); - precacheitem( level.turnedmeleeweapon_dw ); - if ( !is_true( level.custom_zombie_player_loadout_init ) ) - { - precachemodel( "c_zom_player_zombie_fb" ); - precachemodel( "c_zom_zombie_viewhands" ); - } - if ( !isDefined( level.vsmgr_prio_visionset_zombie_turned ) ) - { - level.vsmgr_prio_visionset_zombie_turned = 123; - } - maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_turned", 3000, level.vsmgr_prio_visionset_zombie_turned, 1, 1 ); - registerclientfield( "toplayer", "turned_ir", 3000, 1, "int" ); - registerclientfield( "allplayers", "player_has_eyes", 3000, 1, "int" ); - registerclientfield( "allplayers", "player_eyes_special", 5000, 1, "int" ); - level._effect[ "player_eye_glow" ] = loadfx( "maps/zombie/fx_zombie_eye_returned_blue" ); - level._effect[ "player_eye_glow_orng" ] = loadfx( "maps/zombie/fx_zombie_eye_returned_orng" ); - thread setup_zombie_exerts(); -} - -setup_zombie_exerts() //checked matches cerberus output -{ - wait 0.05; - level.exert_sounds[ 1 ][ "burp" ] = "null"; - level.exert_sounds[ 1 ][ "hitmed" ] = "null"; - level.exert_sounds[ 1 ][ "hitlrg" ] = "null"; -} - -delay_turning_on_eyes() //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - wait_network_frame(); - wait 0.1; - self setclientfield( "player_has_eyes", 1 ); -} - -turn_to_zombie() //checked changed to match cerberus output -{ - if ( self.sessionstate == "playing" && is_true( self.is_zombie ) && !is_true( self.laststand ) ) - { - return; - } - if ( is_true( self.is_in_process_of_zombify ) ) - { - return; - } - while ( is_true( self.is_in_process_of_humanify ) ) - { - wait 0.1; - } - if ( !flag( "pregame" ) ) - { - self playsoundtoplayer( "evt_spawn", self ); - playsoundatposition( "evt_disappear_3d", self.origin ); - if ( !self.is_zombie ) - { - playsoundatposition( "vox_plr_" + randomintrange( 0, 4 ) + "_exert_death_high_" + randomintrange( 0, 4 ), self.origin ); - } - } - self._can_score = 1; - self setclientfield( "player_has_eyes", 0 ); - self ghost(); - self turned_disable_player_weapons(); - self notify( "clear_red_flashing_overlay" ); - self notify( "zombify" ); - self.is_in_process_of_zombify = 1; - self.team = level.zombie_team; - self.pers[ "team" ] = level.zombie_team; - self.sessionteam = level.zombie_team; - wait_network_frame(); - self maps/mp/gametypes_zm/_zm_gametype::onspawnplayer(); - self freezecontrols( 1 ); - self.is_zombie = 1; - self setburn( 0 ); - if ( is_true( self.turned_visionset ) ) - { - maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_turned", self ); - wait_network_frame(); - wait_network_frame(); - if ( !isDefined( self ) ) - { - return; - } - } - maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_turned", self ); - self.turned_visionset = 1; - self setclientfieldtoplayer( "turned_ir", 1 ); - self maps/mp/zombies/_zm_audio::setexertvoice( 1 ); - self.laststand = undefined; - wait_network_frame(); - if ( !isDefined( self ) ) - { - return; - } - self enableweapons(); - self show(); - playsoundatposition( "evt_appear_3d", self.origin ); - playsoundatposition( "zmb_zombie_spawn", self.origin ); - self thread delay_turning_on_eyes(); - self thread turned_player_buttons(); - self setperk( "specialty_noname" ); - self setperk( "specialty_unlimitedsprint" ); - self setperk( "specialty_fallheight" ); - self turned_give_melee_weapon(); - self setmovespeedscale( 1 ); - self.animname = "zombie"; - self disableoffhandweapons(); - self allowstand( 1 ); - self allowprone( 0 ); - self allowcrouch( 0 ); - self allowads( 0 ); - self allowjump( 0 ); - self disableweaponcycling(); - self setmovespeedscale( 1 ); - self setsprintduration( 4 ); - self setsprintcooldown( 0 ); - self stopshellshock(); - self.maxhealth = 256; - self.health = 256; - self.meleedamage = 1000; - self detachall(); - if ( isDefined( level.custom_zombie_player_loadout ) ) - { - self [[ level.custom_zombie_player_loadout ]](); - } - else - { - self setmodel( "c_zom_player_zombie_fb" ); - self.voice = "american"; - self.skeleton = "base"; - self setviewmodel( "c_zom_zombie_viewhands" ); - } - self.shock_onpain = 0; - self disableinvulnerability(); - if ( isDefined( level.player_movement_suppressed ) ) - { - self freezecontrols( level.player_movement_suppressed ); - } - else if ( isDefined( self.hostmigrationcontrolsfrozen ) && !self.hostmigrationcontrolsfrozen ) - { - self freezecontrols( 0 ); - } - self.is_in_process_of_zombify = 0; -} - -turn_to_human() //checked changed to match cerberus output -{ - if ( self.sessionstate == "playing" && !is_true( self.is_zombie ) && !is_true( self.laststand ) ) - { - return; - } - if ( is_true( self.is_in_process_of_humanify ) ) - { - return; - } - while ( is_true( self.is_in_process_of_zombify ) ) - { - wait 0.1; - } - self playsoundtoplayer( "evt_spawn", self ); - playsoundatposition( "evt_disappear_3d", self.origin ); - self setclientfield( "player_has_eyes", 0 ); - self ghost(); - self notify( "humanify" ); - self.is_in_process_of_humanify = 1; - self.is_zombie = 0; - self notify( "clear_red_flashing_overlay" ); - self.team = self.prevteam; - self.pers[ "team" ] = self.prevteam; - self.sessionteam = self.prevteam; - wait_network_frame(); - self maps/mp/gametypes_zm/_zm_gametype::onspawnplayer(); - self.maxhealth = 100; - self.health = 100; - self freezecontrols( 1 ); - if ( self hasweapon( "death_throe_zm" ) ) - { - self takeweapon( "death_throe_zm" ); - } - self unsetperk( "specialty_noname" ); - self unsetperk( "specialty_unlimitedsprint" ); - self unsetperk( "specialty_fallheight" ); - self turned_enable_player_weapons(); - self maps/mp/zombies/_zm_audio::setexertvoice( 0 ); - self.turned_visionset = 0; - maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_turned", self ); - self setclientfieldtoplayer( "turned_ir", 0 ); - self setmovespeedscale( 1 ); - self.ignoreme = 0; - self.shock_onpain = 1; - self enableweaponcycling(); - self allowstand( 1 ); - self allowprone( 1 ); - self allowcrouch( 1 ); - self allowads( 1 ); - self allowjump( 1 ); - self turnedhuman(); - self enableoffhandweapons(); - self stopshellshock(); - self.laststand = undefined; - self.is_burning = undefined; - self.meleedamage = undefined; - self detachall(); - self [[ level.givecustomcharacters ]](); - if ( !self hasweapon( "knife_zm" ) ) - { - self giveweapon( "knife_zm" ); - } - wait_network_frame(); - if ( !isDefined( self ) ) - { - return; - } - self disableinvulnerability(); - if ( isDefined( level.player_movement_suppressed ) ) - { - self freezecontrols( level.player_movement_suppressed ); - } - else if ( !is_true( self.hostmigrationcontrolsfrozen ) ) - { - self freezecontrols( 0 ); - } - self show(); - playsoundatposition( "evt_appear_3d", self.origin ); - self.is_in_process_of_humanify = 0; -} - -deletezombiesinradius( origin ) //checked changed to match cerberus output -{ - zombies = get_round_enemy_array(); - maxradius = 128; - foreach ( zombie in zombies ) - { - if ( isDefined( zombie ) && isalive( zombie ) && !is_true( zombie.is_being_used_as_spawner ) ) - { - if ( distancesquared( zombie.origin, origin ) < ( maxradius * maxradius ) ) - { - playfx( level._effect[ "wood_chunk_destory" ], zombie.origin ); - zombie thread silentlyremovezombie(); - } - wait 0.05; - } - } -} - -turned_give_melee_weapon() //checked matches cerberus output -{ - /* -/# - assert( isDefined( self.turnedmeleeweapon ) ); -#/ -/# - assert( self.turnedmeleeweapon != "none" ); -#/ - */ - self.turned_had_knife = self hasweapon( "knife_zm" ); - if ( is_true( self.turned_had_knife ) ) - { - self takeweapon( "knife_zm" ); - } - self giveweapon( self.turnedmeleeweapon_dw ); - self givemaxammo( self.turnedmeleeweapon_dw ); - self giveweapon( self.turnedmeleeweapon ); - self givemaxammo( self.turnedmeleeweapon ); - self switchtoweapon( self.turnedmeleeweapon_dw ); - self switchtoweapon( self.turnedmeleeweapon ); -} - -turned_player_buttons() //checked changed to match cerberus output -{ - self endon( "disconnect" ); - self endon( "humanify" ); - level endon( "end_game" ); - while ( is_true( self.is_zombie ) ) - { - if ( self attackbuttonpressed() || self adsbuttonpressed() || self meleebuttonpressed() ) - { - if ( cointoss() ) - { - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "attack", undefined ); - } - while ( self attackbuttonpressed() || self adsbuttonpressed() || self meleebuttonpressed() ) - { - wait 0.05; - } - } - if ( self usebuttonpressed() ) - { - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "taunt", undefined ); - while ( self usebuttonpressed() ) - { - wait 0.05; - } - } - if ( self issprinting() ) - { - while ( self issprinting() ) - { - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "sprint", undefined ); - wait 0.05; - } - } - wait 0.05; - } -} - -turned_disable_player_weapons() //checked matches cerberus output -{ - if ( is_true( self.is_zombie ) ) - { - return; - } - weaponinventory = self getweaponslist(); - self.lastactiveweapon = self getcurrentweapon(); - self setlaststandprevweap( self.lastactiveweapon ); - self.laststandpistol = undefined; - self.hadpistol = 0; - if ( !isDefined( self.turnedmeleeweapon ) ) - { - self.turnedmeleeweapon = level.turnedmeleeweapon; - } - if ( !isDefined( self.turnedmeleeweapon_dw ) ) - { - self.turnedmeleeweapon_dw = level.turnedmeleeweapon_dw; - } - self takeallweapons(); - self disableweaponcycling(); -} - -turned_enable_player_weapons() //checked changed to match cerberus output -{ - self takeallweapons(); - self enableweaponcycling(); - self enableoffhandweapons(); - self.turned_had_knife = undefined; - if ( isDefined( level.humanify_custom_loadout ) ) - { - self thread [[ level.humanify_custom_loadout ]](); - return; - } - else if ( !self hasweapon( "rottweil72_zm" ) ) - { - self giveweapon( "rottweil72_zm" ); - self switchtoweapon( "rottweil72_zm" ); - } - if ( !is_true( self.is_zombie ) && !self hasweapon( level.start_weapon ) ) - { - if ( !self hasweapon( "knife_zm" ) ) - { - self giveweapon( "knife_zm" ); - } - self give_start_weapon( 0 ); - } - if ( self hasweapon( "rottweil72_zm" ) ) - { - self setweaponammoclip( "rottweil72_zm", 2 ); - self setweaponammostock( "rottweil72_zm", 0 ); - } - if ( self hasweapon( level.start_weapon ) ) - { - self givemaxammo( level.start_weapon ); - } - if ( self hasweapon( self get_player_lethal_grenade() ) ) - { - self getweaponammoclip( self get_player_lethal_grenade() ); - } - else - { - self giveweapon( self get_player_lethal_grenade() ); - } - self setweaponammoclip( self get_player_lethal_grenade(), 2 ); -} - -get_farthest_available_zombie( player ) //checked changed to match cerberus output -{ - while ( 1 ) - { - zombies = get_array_of_closest( player.origin, getaiarray( level.zombie_team ) ); - for ( x = 0; x < zombies.size; x++ ) - { - zombie = zombies[ x ]; - if ( isDefined( zombie ) && isalive( zombie ) && !is_true( zombie.in_the_ground ) && !is_true( zombie.gibbed ) && !is_true( zombie.head_gibbed ) && !is_true( zombie.is_being_used_as_spawnpoint ) && zombie in_playable_area() ) - { - zombie.is_being_used_as_spawnpoint = 1; - return zombie; - } - } - wait 0.05; - } -} - -get_available_human() //checked changed to match cerberus output -{ - players = get_players(); - foreach ( player in players ) - { - if ( !is_true( player.is_zombie ) ) - { - return player; - } - } -} - -silentlyremovezombie() //checked matches cerberus output -{ - self.skip_death_notetracks = 1; - self.nodeathragdoll = 1; - self dodamage( self.maxhealth * 2, self.origin, self, self, "none", "MOD_SUICIDE" ); - self self_delete(); -} - -getspawnpoint() //checked matches cerberus output -{ - spawnpoint = self maps/mp/gametypes_zm/_spawnlogic::getspawnpoint_dm( level._turned_zombie_respawnpoints ); - return spawnpoint; -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_unitrigger.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_unitrigger.gsc deleted file mode 100644 index b3e19e7..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_unitrigger.gsc +++ /dev/null @@ -1,758 +0,0 @@ -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked changed to match cerberus output -{ - level._unitriggers = spawnstruct(); - level._unitriggers._deferredinitlist = []; - level._unitriggers.trigger_pool = []; - level._unitriggers.trigger_stubs = []; - level._unitriggers.dynamic_stubs = []; - level._unitriggers.system_trigger_funcs = []; - level._unitriggers.largest_radius = 64; - stubs_keys = array( "unitrigger_radius", "unitrigger_radius_use", "unitrigger_box", "unitrigger_box_use" ); - stubs = []; - for ( i = 0; i < stubs_keys.size; i++ ) - { - stubs = arraycombine( stubs, getstructarray( stubs_keys[ i ], "script_unitrigger_type" ), 1, 0 ); - } - for ( i = 0; i < stubs.size; i++ ) - { - register_unitrigger( stubs[ i ] ); - } -} - -register_unitrigger_system_func( system, trigger_func ) //checked matches cerberus output -{ - level._unitriggers.system_trigger_funcs[ system ] = trigger_func; -} - -unitrigger_force_per_player_triggers( unitrigger_stub, opt_on_off ) //checked matches cerberus output -{ - if ( !isDefined( opt_on_off ) ) - { - opt_on_off = 1; - } - unitrigger_stub.trigger_per_player = opt_on_off; -} - -unitrigger_trigger( player ) //checked matches cerberus output -{ - if ( self.trigger_per_player ) - { - return self.playertrigger[ player getentitynumber() ]; - } - else - { - return self.trigger; - } -} - -unitrigger_origin() //checked matches cerberus output -{ - if ( isDefined( self.originfunc ) ) - { - origin = self [[ self.originfunc ]](); - } - else - { - origin = self.origin; - } - return origin; -} - -register_unitrigger_internal( unitrigger_stub, trigger_func ) //checked changed to match cerberus output -{ - if ( !isDefined( unitrigger_stub.script_unitrigger_type ) ) - { - /* -/# - println( "Cannot register a unitrigger with no script_unitrigger_type. Ignoring." ); -#/ - */ - return; - } - if ( isDefined( trigger_func ) ) - { - unitrigger_stub.trigger_func = trigger_func; - } - else if ( isDefined( unitrigger_stub.unitrigger_system ) && isDefined( level._unitriggers.system_trigger_funcs[ unitrigger_stub.unitrigger_system ] ) ) - { - unitrigger_stub.trigger_func = level._unitriggers.system_trigger_funcs[ unitrigger_stub.unitrigger_system ]; - } - switch( unitrigger_stub.script_unitrigger_type ) - { - case "unitrigger_radius": - case "unitrigger_radius_use": - if ( !isDefined( unitrigger_stub.radius ) ) - { - unitrigger_stub.radius = 32; - } - if ( !isDefined( unitrigger_stub.script_height ) ) - { - unitrigger_stub.script_height = 64; - } - unitrigger_stub.test_radius_sq = ( unitrigger_stub.radius + 15 ) * ( unitrigger_stub.radius + 15 ); - break; - case "unitrigger_box": - case "unitrigger_box_use": - if ( !isDefined( unitrigger_stub.script_width ) ) - { - unitrigger_stub.script_width = 64; - } - if ( !isDefined( unitrigger_stub.script_height ) ) - { - unitrigger_stub.script_height = 64; - } - if ( !isDefined( unitrigger_stub.script_length ) ) - { - unitrigger_stub.script_length = 64; - } - box_radius = length( ( unitrigger_stub.script_width / 2, unitrigger_stub.script_length / 2, unitrigger_stub.script_height / 2 ) ); - if ( !isDefined( unitrigger_stub.radius ) || unitrigger_stub.radius < box_radius ) - { - unitrigger_stub.radius = box_radius; - } - unitrigger_stub.test_radius_sq = ( box_radius + 15 ) * ( box_radius + 15 ); - break; - default: - /* -/# - println( "Unknown unitrigger type registered : " + unitrigger_stub.targetname + " - ignoring." ); -#/ - */ - return; - } - if ( unitrigger_stub.radius > level._unitriggers.largest_radius ) - { - level._unitriggers.largest_radius = min( 113, unitrigger_stub.radius ); - if ( isDefined( level.fixed_max_player_use_radius ) ) - { - if ( level.fixed_max_player_use_radius > getDvarFloat( "player_useRadius_zm" ) ) - { - setdvar( "player_useRadius_zm", level.fixed_max_player_use_radius ); - } - } - else if ( level._unitriggers.largest_radius > getDvarFloat( "player_useRadius_zm" ) ) - { - setdvar( "player_useRadius_zm", level._unitriggers.largest_radius ); - } - } - level._unitriggers.trigger_stubs[ level._unitriggers.trigger_stubs.size ] = unitrigger_stub; - unitrigger_stub.registered = 1; -} - -register_unitrigger( unitrigger_stub, trigger_func ) //checked matches cerberus output -{ - register_unitrigger_internal( unitrigger_stub, trigger_func ); - level._unitriggers.dynamic_stubs[ level._unitriggers.dynamic_stubs.size ] = unitrigger_stub; -} - -unregister_unitrigger( unitrigger_stub ) //checked matches cerberus output -{ - thread unregister_unitrigger_internal( unitrigger_stub ); -} - -unregister_unitrigger_internal( unitrigger_stub ) //checked changed to match cerberus output -{ - if ( !isDefined( unitrigger_stub ) ) - { - return; - } - unitrigger_stub.registered = 0; - if ( is_true( unitrigger_stub.trigger_per_player ) ) - { - if ( isDefined( unitrigger_stub.playertrigger ) && unitrigger_stub.playertrigger.size > 0 ) - { - keys = getarraykeys( unitrigger_stub.playertrigger ); - foreach ( key in keys ) - { - trigger = unitrigger_stub.playertrigger[ key ]; - trigger notify( "kill_trigger" ); - if ( isDefined( trigger ) ) - { - trigger delete(); - } - } - unitrigger_stub.playertrigger = []; - } - } - else if ( isDefined( unitrigger_stub.trigger ) ) - { - trigger = unitrigger_stub.trigger; - trigger notify( "kill_trigger" ); - trigger.stub.trigger = undefined; - trigger delete(); - } - if ( isDefined( unitrigger_stub.in_zone ) ) - { - arrayremovevalue( level.zones[ unitrigger_stub.in_zone ].unitrigger_stubs, unitrigger_stub ); - unitrigger_stub.in_zone = undefined; - } - arrayremovevalue( level._unitriggers.trigger_stubs, unitrigger_stub ); - arrayremovevalue( level._unitriggers.dynamic_stubs, unitrigger_stub ); -} - -delay_delete_contact_ent() //checked matches cerberus output -{ - self.last_used_time = 0; - while ( 1 ) - { - wait 1; - if ( getTime() - self.last_used_time > 1000 ) - { - self delete(); - level._unitriggers.contact_ent = undefined; - return; - } - } -} - -register_static_unitrigger( unitrigger_stub, trigger_func, recalculate_zone ) //checked changed to match cerberus output -{ - if ( level.zones.size == 0 ) - { - unitrigger_stub.trigger_func = trigger_func; - level._unitriggers._deferredinitlist[ level._unitriggers._deferredinitlist.size ] = unitrigger_stub; - return; - } - if ( !isDefined( level._unitriggers.contact_ent ) ) - { - level._unitriggers.contact_ent = spawn( "script_origin", ( 0, 0, 0 ) ); - level._unitriggers.contact_ent thread delay_delete_contact_ent(); - } - register_unitrigger_internal( unitrigger_stub, trigger_func ); - if ( !isDefined( level._no_static_unitriggers ) ) - { - level._unitriggers.contact_ent.last_used_time = getTime(); - level._unitriggers.contact_ent.origin = unitrigger_stub.origin; - if ( isDefined( unitrigger_stub.in_zone ) && !isDefined( recalculate_zone ) ) - { - level.zones[ unitrigger_stub.in_zone ].unitrigger_stubs[ level.zones[ unitrigger_stub.in_zone ].unitrigger_stubs.size ] = unitrigger_stub; - return; - } - keys = getarraykeys( level.zones ); - for ( i = 0; i < keys.size; i++ ) - { - if ( level._unitriggers.contact_ent maps/mp/zombies/_zm_zonemgr::entity_in_zone( keys[ i ], 1 ) ) - { - if ( !isDefined( level.zones[ keys[ i ] ].unitrigger_stubs ) ) - { - level.zones[ keys[ i ] ].unitrigger_stubs = []; - } - level.zones[ keys[ i ] ].unitrigger_stubs[ level.zones[ keys[ i ] ].unitrigger_stubs.size ] = unitrigger_stub; - unitrigger_stub.in_zone = keys[ i ]; - return; - } - } - } - level._unitriggers.dynamic_stubs[ level._unitriggers.dynamic_stubs.size ] = unitrigger_stub; - unitrigger_stub.registered = 1; -} - -reregister_unitrigger_as_dynamic( unitrigger_stub ) //checked matches cerberus output -{ - unregister_unitrigger_internal( unitrigger_stub ); - register_unitrigger( unitrigger_stub, unitrigger_stub.trigger_func ); -} - -debug_unitriggers() //checked changed to match cerberus output dvar taken from beta dump -{ - /* -/# - while ( 1 ) - { - if ( getDvarInt( "debug_unitrigger" ) > 0 ) - { - for ( i = 0; i < level._unitriggers.trigger_stubs.size; i++ ) - { - triggerstub = level._unitriggers.trigger_stubs[ i ]; - color = vectorScale( ( 1, 0, 0 ), 0.75 ); - if ( !isDefined( triggerstub.in_zone ) ) - { - color = vectorScale( ( 1, 1, 0 ), 0.65 ); - } - else - { - if ( level.zones[ triggerstub.in_zone ].is_active ) - { - color = ( 1, 1, 0 ); - } - } - if ( isDefined( triggerstub.trigger ) || isDefined( triggerstub.playertrigger ) && triggerstub.playertrigger.size > 0 ) - { - color = ( 0, 1, 0 ); - if ( isDefined( triggerstub.playertrigger ) && triggerstub.playertrigger.size > 0 ) - { - print3d( triggerstub.origin, triggerstub.playertrigger.size, color, 1, 1, 1 ); - } - } - origin = triggerstub unitrigger_origin(); - switch( triggerstub.script_unitrigger_type ) - { - case "unitrigger_radius": - case "unitrigger_radius_use": - if ( triggerstub.radius ) - { - circle( origin, triggerstub.radius, color, 0, 0, 1 ); - } - if ( triggerstub.script_height ) - { - line( origin, origin + ( 0, 0, triggerstub.script_height ), color, 0, 1 ); - } - break; - case "unitrigger_box": - case "unitrigger_box_use": - vec = ( triggerstub.script_width / 2, triggerstub.script_length / 2, triggerstub.script_height / 2 ); - box( origin, vec * -1, vec, triggerstub.angles[ 1 ], color, 1, 0, 1 ); - break; - } - } - } - wait 0.05; -#/ - } - */ -} - -cleanup_trigger( trigger, player ) //checked changed to match cerberus output -{ - trigger notify( "kill_trigger" ); - if ( is_true( trigger.stub.trigger_per_player ) ) - { - trigger.stub.playertrigger[player getentitynumber()] = undefined; - } - else - { - trigger.stub.trigger = undefined; - } - trigger delete(); - level._unitriggers.trigger_pool[player getentitynumber()] = undefined; -} - -assess_and_apply_visibility( trigger, stub, player, default_keep ) //checked changed to match cerberus output -{ - if ( !isDefined( trigger ) || !isDefined( stub ) ) - { - return 0; - } - keep_thread = default_keep; - if ( !isDefined( stub.prompt_and_visibility_func ) || trigger [[ stub.prompt_and_visibility_func ]]( player ) ) - { - keep_thread = 1; - if ( !is_true( trigger.thread_running ) ) - { - trigger thread trigger_thread( trigger.stub.trigger_func ); - } - trigger.thread_running = 1; - if ( isDefined( trigger.reassess_time ) && trigger.reassess_time <= 0 ) - { - trigger.reassess_time = undefined; - } - } - else if ( is_true( trigger.thread_running ) ) - { - keep_thread = 0; - } - trigger.thread_running = 0; - if ( isDefined( stub.inactive_reasses_time ) ) - { - trigger.reassess_time = stub.inactive_reasses_time; - } - else - { - trigger.reassess_time = 1; - } - return keep_thread; -} - -main() //checked against bo3 _zm_unitrigger.gsc and cerberus output changed at own discretion -{ - level thread debug_unitriggers(); - if ( level._unitriggers._deferredinitlist.size ) - { - for ( i = 0; i < level._unitriggers._deferredinitlist.size; i++ ) - { - register_static_unitrigger( level._unitriggers._deferredinitlist[ i ], level._unitriggers._deferredinitlist[ i ].trigger_func ); - } - for ( i = 0; i < level._unitriggers._deferredinitlist.size; i++ ) - { - level._unitriggers._deferredinitlist[i] = undefined; - } - level._unitriggers._deferredinitlist = undefined; - } - valid_range = level._unitriggers.largest_radius + 15; - valid_range_sq = valid_range * valid_range; - while ( !isDefined( level.active_zone_names ) ) - { - wait 0.1; - } - while ( 1 ) - { - waited = 0; - active_zone_names = level.active_zone_names; - candidate_list = []; - for ( j = 0; j < active_zone_names.size; j++ ) - { - if ( isDefined( level.zones[ active_zone_names[ j ] ].unitrigger_stubs ) ) - { - candidate_list = arraycombine( candidate_list, level.zones[ active_zone_names[ j ] ].unitrigger_stubs, 1, 0 ); - } - } - candidate_list = arraycombine( candidate_list, level._unitriggers.dynamic_stubs, 1, 0 ); - players = getplayers(); - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - if ( !isDefined( player ) ) - { - i++; - continue; - } - player_origin = player.origin + vectorScale( ( 0, 0, 1 ), 35 ); - trigger = level._unitriggers.trigger_pool[ player getentitynumber() ]; - closest = []; - if ( isDefined( trigger ) ) - { - dst = valid_range_sq; - origin = trigger unitrigger_origin(); - dst = trigger.stub.test_radius_sq; - time_to_ressess = 0; - if ( distance2dsquared( player_origin, origin ) < dst ) - { - if ( isDefined( trigger.reassess_time ) ) - { - trigger.reassess_time -= 0.05; - if ( trigger.reassess_time > 0 ) - { - i++; - continue; - } - time_to_ressess = 1; - } - } - closest = get_closest_unitriggers( player_origin, candidate_list, valid_range ); - if ( isDefined( trigger ) && time_to_ressess && closest.size < 2 || is_true( trigger.thread_running ) ) - { - if ( assess_and_apply_visibility( trigger, trigger.stub, player, 1 ) ) - { - i++; - continue; - } - } - else if ( isDefined( trigger ) ) - { - cleanup_trigger( trigger, player ); - } - } - else - { - closest = get_closest_unitriggers( player_origin, candidate_list, valid_range ); - } - index = 0; - last_trigger = undefined; - while ( index < closest.size ) - { - if ( !maps/mp/zombies/_zm_utility::is_player_valid( player ) && !is_true( closest[ index ].ignore_player_valid ) ) - { - index++; - continue; - } - if ( !is_true( closest[ index ].registered ) ) - { - index++; - continue; - } - if ( isDefined( last_trigger ) ) - { - cleanup_trigger( last_trigger, player ); - last_trigger = undefined; - } - trigger = undefined; - if ( is_true( closest[ index ].trigger_per_player ) ) - { - if ( !isDefined( closest[ index ].playertrigger ) ) - { - closest[ index ].playertrigger = []; - } - if ( !isDefined( closest[ index ].playertrigger[ player getentitynumber() ] ) ) - { - trigger = build_trigger_from_unitrigger_stub( closest[ index ], player ); - level._unitriggers.trigger_pool[ player getentitynumber() ] = trigger; - } - } - else if ( !isDefined( closest[ index ].trigger ) ) - { - trigger = build_trigger_from_unitrigger_stub( closest[ index ], player ); - level._unitriggers.trigger_pool[ player getentitynumber() ] = trigger; - } - if ( isDefined( trigger ) ) - { - trigger.parent_player = player; - if ( assess_and_apply_visibility( trigger, closest[ index ], player, 0 ) ) - { - break; - } - last_trigger = trigger; - } - index++; - waited = 1; - wait 0.05; - } - i++; - } - if ( !waited ) - { - wait 0.05; - } - } -} - -run_visibility_function_for_all_triggers() //checked changed to match cerberus output -{ - if ( !isDefined( self.prompt_and_visibility_func ) ) - { - return; - } - if ( is_true( self.trigger_per_player ) ) - { - if ( !isDefined( self.playertrigger ) ) - { - return; - } - players = getplayers(); - for ( i = 0; i < players.size; i++ ) - { - if ( isDefined( self.playertrigger[ players[ i ] getentitynumber() ] ) ) - { - self.playertrigger[ players[ i ] getentitynumber() ] [[ self.prompt_and_visibility_func ]]( players[ i ] ); - } - } - } - else if ( isDefined( self.trigger ) ) - { - self.trigger [[ self.prompt_and_visibility_func ]]( getplayers()[ 0 ] ); - } -} - -build_trigger_from_unitrigger_stub( stub, player ) //checked matches cerberus output -{ - if ( isDefined( level._zm_build_trigger_from_unitrigger_stub_override ) ) - { - if ( stub [[ level._zm_build_trigger_from_unitrigger_stub_override ]]( player ) ) - { - return; - } - } - radius = stub.radius; - if ( !isDefined( radius ) ) - { - radius = 64; - } - script_height = stub.script_height; - if ( !isDefined( script_height ) ) - { - script_height = 64; - } - script_width = stub.script_width; - if ( !isDefined( script_width ) ) - { - script_width = 64; - } - script_length = stub.script_length; - if ( !isDefined( script_length ) ) - { - script_length = 64; - } - trigger = undefined; - origin = stub unitrigger_origin(); - switch( stub.script_unitrigger_type ) - { - case "unitrigger_radius": - trigger = spawn( "trigger_radius", origin, 0, radius, script_height ); - break; - case "unitrigger_radius_use": - trigger = spawn( "trigger_radius_use", origin, 0, radius, script_height ); - break; - case "unitrigger_box": - trigger = spawn( "trigger_box", origin, 0, script_width, script_length, script_height ); - break; - case "unitrigger_box_use": - trigger = spawn( "trigger_box_use", origin, 0, script_width, script_length, script_height ); - break; - } - if ( isDefined( trigger ) ) - { - if ( isDefined( stub.angles ) ) - { - trigger.angles = stub.angles; - } - if ( isDefined( stub.onspawnfunc ) ) - { - stub [[ stub.onspawnfunc ]]( trigger ); - } - if ( isDefined( stub.cursor_hint ) ) - { - if ( stub.cursor_hint == "HINT_WEAPON" && isDefined( stub.cursor_hint_weapon ) ) - { - trigger setcursorhint( stub.cursor_hint, stub.cursor_hint_weapon ); - } - else - { - trigger setcursorhint( stub.cursor_hint ); - } - } - trigger triggerignoreteam(); - if ( is_true( stub.require_look_at ) ) - { - trigger usetriggerrequirelookat(); - } - if ( isDefined( stub.hint_string ) ) - { - if ( isDefined( stub.hint_parm2 ) ) - { - trigger sethintstring( stub.hint_string, stub.hint_parm1, stub.hint_parm2 ); - } - else if ( isDefined( stub.hint_parm1 ) ) - { - trigger sethintstring( stub.hint_string, stub.hint_parm1 ); - } - else if ( isDefined( stub.cost ) ) - { - trigger sethintstring( stub.hint_string, stub.cost ); - } - else - { - trigger sethintstring( stub.hint_string ); - } - } - trigger.stub = stub; - } - copy_zombie_keys_onto_trigger( trigger, stub ); - if ( is_true( stub.trigger_per_player ) ) - { - if ( isDefined( trigger ) ) - { - trigger setinvisibletoall(); - trigger setvisibletoplayer( player ); - } - if ( !isDefined( stub.playertrigger ) ) - { - stub.playertrigger = []; - } - stub.playertrigger[ player getentitynumber() ] = trigger; - } - else - { - stub.trigger = trigger; - } - trigger.thread_running = 0; - return trigger; -} - -copy_zombie_keys_onto_trigger( trig, stub ) //checked matches cerberus output -{ - trig.script_noteworthy = stub.script_noteworthy; - trig.targetname = stub.targetname; - trig.target = stub.target; - trig.zombie_weapon_upgrade = stub.zombie_weapon_upgrade; - trig.clientfieldname = stub.clientfieldname; - trig.usetime = stub.usetime; -} - -trigger_thread( trigger_func ) //checked matches cerberus output -{ - self endon( "kill_trigger" ); - if ( isDefined( trigger_func ) ) - { - self [[ trigger_func ]](); - } -} - -get_closest_unitrigger_index( org, array, dist ) //checked partially changed to match cerberus output //did not change while loop to for loop to prevent infinite loop due to continue -{ - if ( !isDefined( dist ) ) - { - dist = 9999999; - } - distsq = dist * dist; - if ( array.size < 1 ) - { - return; - } - index = undefined; - i = 0; - while ( i < array.size ) - { - origin = array[ i ] unitrigger_origin(); - radius_sq = array[ i ].test_radius_sq; - newdistsq = distance2dsquared( origin, org ); - if ( newdistsq >= radius_sq ) - { - i++; - continue; - } - else if ( newdistsq >= distsq ) - { - i++; - continue; - } - distsq = newdistsq; - index = i; - i++; - } - return index; -} - -get_closest_unitriggers( org, array, dist ) //checked partially changed to match cerberus output did not change while loop to for loop to prevent infinite loop due to continue -{ - triggers = []; - if ( !isDefined( dist ) ) - { - dist = 9999999; - } - distsq = dist * dist; - if ( array.size < 1 ) - { - return triggers; - } - index = undefined; - i = 0; - while ( i < array.size ) - { - if ( !isDefined( array[ i ] ) ) - { - i++; - continue; - } - origin = array[ i ] unitrigger_origin(); - radius_sq = array[ i ].test_radius_sq; - newdistsq = distance2dsquared( origin, org ); - if ( newdistsq >= radius_sq ) - { - i++; - continue; - } - if ( abs( origin[ 2 ] - org[ 2 ] ) > 42 ) - { - i++; - continue; - } - array[ i ].dsquared = newdistsq; - for ( j = 0; j < triggers.size && newdistsq > triggers[j].dsquared; j++ ) - { - } - arrayinsert( triggers, array[ i ], j ); - if ( ( i % 10 ) == 9 ) - { - wait 0.05; - } - i++; - } - return triggers; -} - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_utility.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_utility.gsc deleted file mode 100644 index cee60a8..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_utility.gsc +++ /dev/null @@ -1,5667 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/gametypes_zm/_hud_message; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_power; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_server_throttle; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/animscripts/zm_run; -#include common_scripts/utility; -#include maps/mp/_utility; - -init_utility() //checked matches cerberus output -{ -} - -is_classic() //checked matches cerberus output -{ - var = getDvar( "ui_zm_gamemodegroup" ); - if ( var == "zclassic" ) - { - return 1; - } - return 0; -} - -is_standard() //checked matches cerberus output -{ - var = getDvar( "ui_gametype" ); - if ( var == "zstandard" ) - { - return 1; - } - return 0; -} - -convertsecondstomilliseconds( seconds ) //checked matches cerberus output -{ - return seconds * 1000; -} - -is_player() //checked does not match cerberus output changed at own discretion -{ - if ( !isplayer( self ) ) - { - return 0; - } - if ( isDefined( self.pers ) && is_true( self.pers[ "isBot" ] ) ) - { - return 0; - } - return 1; -} - -lerp( chunk ) //checked matches cerberus output -{ - link = spawn( "script_origin", self getorigin() ); - link.angles = self.first_node.angles; - self linkto( link ); - link rotateto( self.first_node.angles, level._contextual_grab_lerp_time ); - link moveto( self.attacking_spot, level._contextual_grab_lerp_time ); - link waittill_multiple( "rotatedone", "movedone" ); - self unlink(); - link delete(); - return; -} - -clear_mature_blood() //checked changed to match cerberus output -{ - blood_patch = getentarray( "mature_blood", "targetname" ); - if ( is_mature() ) - { - return; - } - if ( isDefined( blood_patch ) ) - { - for ( i = 0; i < blood_patch.size; i++ ) - { - blood_patch[ i ] delete(); - } - } -} - -recalc_zombie_array() //checked matches cerberus output -{ -} - -clear_all_corpses() //checked changed to match cerberus output -{ - corpse_array = getcorpsearray(); - for ( i = 0; i < corpse_array.size; i++ ) - { - if ( isDefined( corpse_array[ i ] ) ) - { - corpse_array[ i ] delete(); - } - } -} - -get_current_corpse_count() //checked matches cerberus output -{ - corpse_array = getcorpsearray(); - if ( isDefined( corpse_array ) ) - { - return corpse_array.size; - } - return 0; -} - -get_current_actor_count() //checked matches cerberus output -{ - count = 0; - actors = getaispeciesarray( level.zombie_team, "all" ); - if ( isDefined( actors ) ) - { - count += actors.size; - } - count += get_current_corpse_count(); - return count; -} - -get_current_zombie_count() //checked matches cerberus output -{ - enemies = get_round_enemy_array(); - return enemies.size; -} - -get_round_enemy_array() //checked partially changed to match cerberus output//did not change while loop to for loop to prevent infinite continue loop bug -{ - enemies = []; - valid_enemies = []; - enemies = getaispeciesarray( level.zombie_team, "all" ); - i = 0; - while ( i < enemies.size ) - { - if ( is_true( enemies[ i ].ignore_enemy_count ) ) - { - i++; - continue; - } - valid_enemies[ valid_enemies.size ] = enemies[ i ]; - i++; - } - return valid_enemies; -} - -init_zombie_run_cycle() //checked matches cerberus output -{ - if ( isDefined( level.speed_change_round ) ) - { - if ( level.round_number >= level.speed_change_round ) - { - speed_percent = 0.2 + ( ( level.round_number - level.speed_change_round ) * 0.2 ); - speed_percent = min( speed_percent, 1 ); - change_round_max = int( level.speed_change_max * speed_percent ); - change_left = change_round_max - level.speed_change_num; - if ( change_left == 0 ) - { - self set_zombie_run_cycle(); - return; - } - change_speed = randomint( 100 ); - if ( change_speed > 80 ) - { - self change_zombie_run_cycle(); - return; - } - zombie_count = get_current_zombie_count(); - zombie_left = level.zombie_ai_limit - zombie_count; - if ( zombie_left == change_left ) - { - self change_zombie_run_cycle(); - return; - } - } - } - self set_zombie_run_cycle(); -} - -change_zombie_run_cycle() //checked matches cerberus output -{ - level.speed_change_num++; - if ( level.gamedifficulty == 0 ) - { - self set_zombie_run_cycle( "sprint" ); - } - else - { - self set_zombie_run_cycle( "walk" ); - } - self thread speed_change_watcher(); -} - -speed_change_watcher() //checked matches cerberus output -{ - self waittill( "death" ); - if ( level.speed_change_num > 0 ) - { - level.speed_change_num--; - } -} - -set_zombie_run_cycle( new_move_speed ) //checked matches cerberus output -{ - self.zombie_move_speed_original = self.zombie_move_speed; - if ( isDefined( new_move_speed ) ) - { - self.zombie_move_speed = new_move_speed; - } - else if ( level.gamedifficulty == 0 ) - { - self set_run_speed_easy(); - } - else - { - self set_run_speed(); - } - self maps/mp/animscripts/zm_run::needsupdate(); - self.deathanim = self maps/mp/animscripts/zm_utility::append_missing_legs_suffix( "zm_death" ); -} - -set_run_speed() //checked matches cerberus output -{ - rand = randomintrange( level.zombie_move_speed, level.zombie_move_speed + 35 ); - if ( rand <= 35 ) - { - self.zombie_move_speed = "walk"; - } - else if ( rand <= 70 ) - { - self.zombie_move_speed = "run"; - } - else - { - self.zombie_move_speed = "sprint"; - } -} - -set_run_speed_easy() //checked matches cerberus output -{ - rand = randomintrange( level.zombie_move_speed, level.zombie_move_speed + 25 ); - if ( rand <= 35 ) - { - self.zombie_move_speed = "walk"; - } - else - { - self.zombie_move_speed = "run"; - } -} - -spawn_zombie( spawner, target_name, spawn_point, round_number ) //checked matches cerberus output -{ - if ( !isDefined( spawner ) ) - { - /* -/# - println( "ZM >> spawn_zombie - NO SPAWNER DEFINED" ); -#/ - */ - return undefined; - } - while ( getfreeactorcount() < 1 ) - { - wait 0.05; - } - spawner.script_moveoverride = 1; - if ( is_true( spawner.script_forcespawn ) ) - { - guy = spawner spawnactor(); - if ( isDefined( level.giveextrazombies ) ) - { - guy [[ level.giveextrazombies ]](); - } - guy enableaimassist(); - if ( isDefined( round_number ) ) - { - guy._starting_round_number = round_number; - } - guy.aiteam = level.zombie_team; - guy clearentityowner(); - level.zombiemeleeplayercounter = 0; - guy thread run_spawn_functions(); - guy forceteleport( spawner.origin ); - guy show(); - } - spawner.count = 666; - if ( !spawn_failed( guy ) ) - { - if ( isDefined( target_name ) ) - { - guy.targetname = target_name; - } - return guy; - } - return undefined; -} - -run_spawn_functions() //checked changed to match cerberus output -{ - self endon( "death" ); - waittillframeend; - for ( i = 0; i < level.spawn_funcs[ self.team ].size; i++ ) - { - func = level.spawn_funcs[ self.team ][ i ]; - single_thread( self, func[ "function" ], func[ "param1" ], func[ "param2" ], func[ "param3" ], func[ "param4" ], func[ "param5" ] ); - } - if ( isDefined( self.spawn_funcs ) ) - { - for ( i = 0; i < self.spawn_funcs.size; i++ ) - { - func = self.spawn_funcs[ i ]; - single_thread( self, func[ "function" ], func[ "param1" ], func[ "param2" ], func[ "param3" ], func[ "param4" ] ); - } - /* -/# - self.saved_spawn_functions = self.spawn_funcs; -#/ - */ - self.spawn_funcs = undefined; - /* -/# - self.spawn_funcs = self.saved_spawn_functions; - self.saved_spawn_functions = undefined; -#/ - */ - self.spawn_funcs = undefined; - } -} - -create_simple_hud( client, team ) //checked matches cerberus output -{ - if ( isDefined( team ) ) - { - hud = newteamhudelem( team ); - hud.team = team; - } - else if ( isDefined( client ) ) - { - hud = newclienthudelem( client ); - } - else - { - hud = newhudelem(); - } - level.hudelem_count++; - hud.foreground = 1; - hud.sort = 1; - hud.hidewheninmenu = 0; - return hud; -} - -destroy_hud() //checked matches cerberus output -{ - level.hudelem_count--; - - self destroy(); -} - -all_chunks_intact( barrier, barrier_chunks ) //checked changed to match cerberus output -{ - if ( isDefined( barrier.zbarrier ) ) - { - pieces = barrier.zbarrier getzbarrierpieceindicesinstate( "closed" ); - if ( pieces.size != barrier.zbarrier getnumzbarrierpieces() ) - { - return 0; - } - } - for ( i = 0; i < barrier_chunks.size; i++ ) - { - if ( barrier_chunks[ i ] get_chunk_state() != "repaired" ) - { - return 0; - } - } - return 1; -} - -no_valid_repairable_boards( barrier, barrier_chunks ) //checked changed to match cerberus output -{ - if ( isDefined( barrier.zbarrier ) ) - { - pieces = barrier.zbarrier getzbarrierpieceindicesinstate( "open" ); - if ( pieces.size ) - { - return 0; - } - } - for ( i = 0; i < barrier_chunks.size; i++ ) - { - if ( barrier_chunks[ i ] get_chunk_state() == "destroyed" ) - { - return 0; - } - } - return 1; -} - -is_survival() //checked matches cerberus output -{ - var = getDvar( "ui_zm_gamemodegroup" ); - if ( var == "zsurvival" ) - { - return 1; - } - return 0; -} - -is_encounter() //checked matches cerberus output -{ - if ( is_true( level._is_encounter ) ) - { - return 1; - } - var = getDvar( "ui_zm_gamemodegroup" ); - if ( var == "zencounter" ) - { - level._is_encounter = 1; - return 1; - } - return 0; -} - -all_chunks_destroyed( barrier, barrier_chunks ) //checked changed to match cerberus output -{ - if ( isDefined( barrier.zbarrier ) ) - { - pieces = arraycombine( barrier.zbarrier getzbarrierpieceindicesinstate( "open" ), barrier.zbarrier getzbarrierpieceindicesinstate( "opening" ), 1, 0 ); - if ( pieces.size != barrier.zbarrier getnumzbarrierpieces() ) - { - return 0; - } - } - if ( isDefined( barrier_chunks ) ) - { - /* -/# - assert( isDefined( barrier_chunks ), "_zm_utility::all_chunks_destroyed - Barrier chunks undefined" ); -#/ - */ - for ( i = 0; i < barrier_chunks.size; i++ ) - { - if ( barrier_chunks[ i ] get_chunk_state() != "destroyed" ) - { - return 0; - } - } - } - return 1; -} - -check_point_in_playable_area( origin ) //checked changed to match cerberus output -{ - playable_area = getentarray( "player_volume", "script_noteworthy" ); - check_model = spawn( "script_model", origin + vectorScale( ( 0, 0, 1 ), 40 ) ); - valid_point = 0; - for ( i = 0; i < playable_area.size; i++ ) - { - if ( check_model istouching( playable_area[ i ] ) ) - { - valid_point = 1; - } - } - check_model delete(); - return valid_point; -} - -check_point_in_enabled_zone( origin, zone_is_active, player_zones ) //checked partially changed to match cerberus output //did not change while loop to for loop to prevent infinite continue bug -{ - if ( !isDefined( player_zones ) ) - { - player_zones = getentarray( "player_volume", "script_noteworthy" ); - } - if ( !isDefined( level.zones ) || !isDefined( player_zones ) ) - { - return 1; - } - scr_org = spawn( "script_origin", origin + vectorScale( ( 0, 0, 1 ), 40 ) ); - one_valid_zone = 0; - i = 0; - while ( i < player_zones.size ) - { - if ( scr_org istouching( player_zones[ i ] ) ) - { - zone = level.zones[ player_zones[ i ].targetname ]; - if ( isDefined( zone ) && is_true( zone.is_enabled ) ) - { - if ( isDefined( zone_is_active ) && zone_is_active == 1 && !is_true( zone.is_active ) ) - { - i++; - continue; - } - one_valid_zone = 1; - break; - } - } - i++; - } - scr_org delete(); - return one_valid_zone; -} - -round_up_to_ten( score ) //checked matches cerberus output -{ - new_score = score - score % 10; - if ( new_score < score ) - { - new_score += 10; - } - return new_score; -} - -round_up_score( score, value ) //checked matches cerberus output -{ - score = int( score ); - new_score = score - score % value; - if ( new_score < score ) - { - new_score += value; - } - return new_score; -} - -random_tan() //checked matches cerberus output -{ - rand = randomint( 100 ); - if ( isDefined( level.char_percent_override ) ) - { - percentnotcharred = level.char_percent_override; - } - else - { - percentnotcharred = 65; - } -} - -places_before_decimal( num ) //checked matches cerberus output -{ - abs_num = abs( num ); - count = 0; - while ( 1 ) - { - abs_num *= 0.1; - count += 1; - if ( abs_num < 1 ) - { - return count; - } - } -} - -create_zombie_point_of_interest( attract_dist, num_attractors, added_poi_value, start_turned_on, initial_attract_func, arrival_attract_func, poi_team ) //checked matches cerberus output -{ - if ( !isDefined( added_poi_value ) ) - { - self.added_poi_value = 0; - } - else - { - self.added_poi_value = added_poi_value; - } - if ( !isDefined( start_turned_on ) ) - { - start_turned_on = 1; - } - self.script_noteworthy = "zombie_poi"; - self.poi_active = start_turned_on; - if ( isDefined( attract_dist ) ) - { - self.poi_radius = attract_dist * attract_dist; - } - else - { - self.poi_radius = undefined; - } - self.num_poi_attracts = num_attractors; - self.attract_to_origin = 1; - self.attractor_array = []; - self.initial_attract_func = undefined; - self.arrival_attract_func = undefined; - if ( isDefined( poi_team ) ) - { - self._team = poi_team; - } - if ( isDefined( initial_attract_func ) ) - { - self.initial_attract_func = initial_attract_func; - } - if ( isDefined( arrival_attract_func ) ) - { - self.arrival_attract_func = arrival_attract_func; - } -} - -create_zombie_point_of_interest_attractor_positions( num_attract_dists, diff_per_dist, attractor_width ) //checked partially changed to match cerberus output //did not change while loop to for loop to prevent infinite loop bug with continue -{ - self endon( "death" ); - forward = ( 0, 1, 0 ); - if ( !isDefined( self.num_poi_attracts ) || isDefined( self.script_noteworthy ) && self.script_noteworthy != "zombie_poi" ) - { - return; - } - if ( !isDefined( num_attract_dists ) ) - { - num_attract_dists = 4; - } - if ( !isDefined( diff_per_dist ) ) - { - diff_per_dist = 45; - } - if ( !isDefined( attractor_width ) ) - { - attractor_width = 45; - } - self.attract_to_origin = 0; - self.num_attract_dists = num_attract_dists; - self.last_index = []; - for ( i = 0; i < num_attract_dists; i++ ) - { - self.last_index[ i ] = -1; - } - self.attract_dists = []; - for ( i = 0; i < self.num_attract_dists; i++ ) - { - self.attract_dists[ i ] = diff_per_dist * ( i + 1 ); - } - max_positions = []; - for ( i = 0; i < self.num_attract_dists; i++ ) - { - max_positions[ i ] = int( ( 6.28 * self.attract_dists[ i ] ) / attractor_width ); - } - num_attracts_per_dist = self.num_poi_attracts / self.num_attract_dists; - self.max_attractor_dist = self.attract_dists[ self.attract_dists.size - 1 ] * 1.1; - diff = 0; - actual_num_positions = []; - i = 0; - while ( i < self.num_attract_dists ) - { - if ( num_attracts_per_dist > ( max_positions[ i ] + diff ) ) - { - actual_num_positions[ i ] = max_positions[ i ]; - diff += num_attracts_per_dist - max_positions[ i ]; - i++; - continue; - } - actual_num_positions[ i ] = num_attracts_per_dist + diff; - diff = 0; - i++; - } - self.attractor_positions = []; - failed = 0; - angle_offset = 0; - prev_last_index = -1; - for ( j = 0; j < 4; j++) - { - if ( ( actual_num_positions[ j ] + failed ) < max_positions[ j ] ) - { - actual_num_positions[ j ] += failed; - failed = 0; - } - else if ( actual_num_positions[ j ] < max_positions[ j ] ) - { - actual_num_positions[ j ] = max_positions[ j ]; - failed = max_positions[ j ] - actual_num_positions[ j ]; - } - failed += self generated_radius_attract_positions( forward, angle_offset, actual_num_positions[ j ], self.attract_dists[ j ] ); - angle_offset += 15; - self.last_index[ j ] = int( ( actual_num_positions[ j ] - failed ) + prev_last_index ); - prev_last_index = self.last_index[ j ]; - } - self notify( "attractor_positions_generated" ); - level notify( "attractor_positions_generated" ); -} - -generated_radius_attract_positions( forward, offset, num_positions, attract_radius ) //checked partially changed to match cerberus output //did not change while loop to for loop because it doesn't make sense as a for loop -{ - self endon( "death" ); - epsilon = 0.1; - failed = 0; - degs_per_pos = 360 / num_positions; - i = offset; - while ( i < 360 + offset ) - { - altforward = forward * attract_radius; - rotated_forward = ( ( cos( i ) * altforward[ 0 ] ) - ( sin( i ) * altforward[ 1 ] ), ( sin( i ) * altforward[ 0 ] ) + ( cos( i ) * altforward[ 1 ] ), altforward[ 2 ] ); - if ( isDefined( level.poi_positioning_func ) ) - { - pos = [[ level.poi_positioning_func ]]( self.origin, rotated_forward ); - } - else if ( is_true( level.use_alternate_poi_positioning ) ) - { - pos = maps/mp/zombies/_zm_server_throttle::server_safe_ground_trace( "poi_trace", 10, self.origin + rotated_forward + vectorScale( ( 0, 0, 1 ), 10 ) ); - } - else - { - pos = maps/mp/zombies/_zm_server_throttle::server_safe_ground_trace( "poi_trace", 10, self.origin + rotated_forward + vectorScale( ( 0, 0, 1 ), 100 ) ); - } - if ( !isDefined( pos ) ) - { - failed++; - } - else if ( is_true( level.use_alternate_poi_positioning ) ) - { - if ( isDefined( self ) && isDefined( self.origin ) ) - { - if ( self.origin[ 2 ] >= ( pos[ 2 ] - epsilon ) && ( self.origin[ 2 ] - pos[ 2 ] ) <= 150 ) - { - pos_array = []; - pos_array[ 0 ] = pos; - pos_array[ 1 ] = self; - self.attractor_positions[ self.attractor_positions.size ] = pos_array; - } - } - else - { - failed++; - } - } - else if ( abs( pos[ 2 ] - self.origin[ 2 ] ) < 60 ) - { - pos_array = []; - pos_array[ 0 ] = pos; - pos_array[ 1 ] = self; - self.attractor_positions[ self.attractor_positions.size ] = pos_array; - } - else - { - failed++; - } - i += degs_per_pos; - } - return failed; -} - -debug_draw_attractor_positions() //checked changed to match cerberus output -{ - /* -/# - while ( 1 ) - { - while ( !isDefined( self.attractor_positions ) ) - { - wait 0.05; - } - for ( i = 0; i < self.attractor_positions.size; i++ ) - { - line( self.origin, self.attractor_positions[ i ][ 0 ], ( 1, 0, 0 ), 1, 1 ); - } - wait 0.05; - if ( !isDefined( self ) ) - { - return; - } -#/ - } - */ -} - -get_zombie_point_of_interest( origin, poi_array ) //checked partially changed to match cerberus output //did not change while loop to for loop because continues cause infinite loops in for loops -{ - if ( is_true( self.ignore_all_poi ) ) - { - return undefined; - } - curr_radius = undefined; - if ( isDefined( poi_array ) ) - { - ent_array = poi_array; - } - else - { - ent_array = getentarray( "zombie_poi", "script_noteworthy" ); - } - best_poi = undefined; - position = undefined; - best_dist = 100000000; - i = 0; - while ( i < ent_array.size ) - { - if ( !isDefined( ent_array[ i ].poi_active ) || !ent_array[ i ].poi_active ) - { - i++; - continue; - } - if ( isDefined( self.ignore_poi_targetname ) && self.ignore_poi_targetname.size > 0 ) - { - if ( isDefined( ent_array[ i ].targetname ) ) - { - ignore = 0; - for ( j = 0; j < self.ignore_poi_targetname.size; j++ ) - { - if ( ent_array[ i ].targetname == self.ignore_poi_targetname[ j ] ) - { - ignore = 1; - break; - } - } - if ( ignore ) - { - i++; - continue; - } - } - } - if ( isDefined( self.ignore_poi ) && self.ignore_poi.size > 0 ) - { - ignore = 0; - for ( j = 0; j < self.ignore_poi.size; j++ ) - { - if ( self.ignore_poi[ j ] == ent_array[ i ] ) - { - ignore = 1; - break; - } - } - if ( ignore ) - { - i++; - continue; - } - } - dist = distancesquared( origin, ent_array[ i ].origin ); - dist -= ent_array[ i ].added_poi_value; - if ( isDefined( ent_array[ i ].poi_radius ) ) - { - curr_radius = ent_array[ i ].poi_radius; - } - if ( isDefined( curr_radius ) && dist < curr_radius && dist < best_dist && ent_array[ i ] can_attract( self ) ) - { - best_poi = ent_array[ i ]; - best_dist = dist; - } - i++; - } - if ( isDefined( best_poi ) ) - { - if ( isDefined( best_poi._team ) ) - { - if ( isDefined( self._race_team ) && self._race_team != best_poi._team ) - { - return undefined; - } - } - if ( is_true( best_poi._new_ground_trace ) ) - { - position = []; - position[ 0 ] = groundpos_ignore_water_new( best_poi.origin + vectorScale( ( 0, 0, 1 ), 100 ) ); - position[ 1 ] = self; - } - else if ( is_true( best_poi.attract_to_origin ) ) - { - position = []; - position[ 0 ] = groundpos( best_poi.origin + vectorScale( ( 0, 0, 1 ), 100 ) ); - position[ 1 ] = self; - } - else - { - position = self add_poi_attractor( best_poi ); - } - if ( isDefined( best_poi.initial_attract_func ) ) - { - self thread [[ best_poi.initial_attract_func ]]( best_poi ); - } - if ( isDefined( best_poi.arrival_attract_func ) ) - { - self thread [[ best_poi.arrival_attract_func ]]( best_poi ); - } - } - return position; -} - -activate_zombie_point_of_interest() //checked matches cerberus output -{ - if ( self.script_noteworthy != "zombie_poi" ) - { - return; - } - self.poi_active = 1; -} - -deactivate_zombie_point_of_interest() //checked changed to match cerberus output -{ - if ( self.script_noteworthy != "zombie_poi" ) - { - return; - } - for ( i = 0; i < self.attractor_array.size; i++ ) - { - self.attractor_array[ i ] notify( "kill_poi" ); - } - self.attractor_array = []; - self.claimed_attractor_positions = []; - self.poi_active = 0; -} - -assign_zombie_point_of_interest( origin, poi ) //checked matches cerberus output -{ - position = undefined; - doremovalthread = 0; - if ( isDefined( poi ) && poi can_attract( self ) ) - { - if ( !isDefined( poi.attractor_array ) || isDefined( poi.attractor_array ) && array_check_for_dupes( poi.attractor_array, self ) ) - { - doremovalthread = 1; - } - position = self add_poi_attractor( poi ); - if ( isDefined( position ) && doremovalthread && !array_check_for_dupes( poi.attractor_array, self ) ) - { - self thread update_on_poi_removal( poi ); - } - } - return position; -} - -remove_poi_attractor( zombie_poi ) //checked changed to match cerberus output -{ - if ( !isDefined( zombie_poi.attractor_array ) ) - { - return; - } - for ( i = 0; i < zombie_poi.attractor_array.size; i++ ) - { - if ( zombie_poi.attractor_array[ i ] == self ) - { - self notify( "kill_poi" ); - arrayremovevalue( zombie_poi.attractor_array, zombie_poi.attractor_array[ i ] ); - arrayremovevalue( zombie_poi.claimed_attractor_positions, zombie_poi.claimed_attractor_positions[ i ] ); - } - } -} - -array_check_for_dupes_using_compare( array, single, is_equal_fn ) //checked changed to match cerberus output -{ - for ( i = 0; i < array.size; i++ ) - { - if ( [[ is_equal_fn ]]( array[ i ], single ) ) - { - return 0; - } - } - return 1; -} - -poi_locations_equal( loc1, loc2 ) //checked matches cerberus output -{ - return loc1[ 0 ] == loc2[ 0 ]; -} - -add_poi_attractor( zombie_poi ) //checked partially changed to match cerberus output //did not change while loop to for loop because continues in for loops go infinite -{ - if ( !isDefined( zombie_poi ) ) - { - return; - } - if ( !isDefined( zombie_poi.attractor_array ) ) - { - zombie_poi.attractor_array = []; - } - if ( array_check_for_dupes( zombie_poi.attractor_array, self ) ) - { - if ( !isDefined( zombie_poi.claimed_attractor_positions ) ) - { - zombie_poi.claimed_attractor_positions = []; - } - if ( !isDefined( zombie_poi.attractor_positions ) || zombie_poi.attractor_positions.size <= 0 ) - { - return undefined; - } - start = -1; - end = -1; - last_index = -1; - for ( i = 0; i < 4; i++ ) - { - if ( zombie_poi.claimed_attractor_positions.size < zombie_poi.last_index[ i ] ) - { - start = last_index + 1; - end = zombie_poi.last_index[ i ]; - break; - } - last_index = zombie_poi.last_index[ i ]; - } - best_dist = 100000000; - best_pos = undefined; - if ( start < 0 ) - { - start = 0; - } - if ( end < 0 ) - { - return undefined; - } - i = int( start ); - while ( i <= int( end ) ) - { - if ( !isDefined( zombie_poi.attractor_positions[ i ] ) ) - { - i++; - continue; - } - if ( array_check_for_dupes_using_compare( zombie_poi.claimed_attractor_positions, zombie_poi.attractor_positions[ i ], ::poi_locations_equal ) ) - { - if ( isDefined( zombie_poi.attractor_positions[ i ][ 0 ] ) && isDefined( self.origin ) ) - { - dist = distancesquared( zombie_poi.attractor_positions[ i ][ 0 ], self.origin ); - if ( dist < best_dist || !isDefined( best_pos ) ) - { - best_dist = dist; - best_pos = zombie_poi.attractor_positions[ i ]; - } - } - } - i++; - } - if ( !isDefined( best_pos ) ) - { - return undefined; - } - zombie_poi.attractor_array[ zombie_poi.attractor_array.size ] = self; - self thread update_poi_on_death( zombie_poi ); - zombie_poi.claimed_attractor_positions[ zombie_poi.claimed_attractor_positions.size ] = best_pos; - return best_pos; - } - for ( i = 0; i < zombie_poi.attractor_array.size; i++ ) - { - if ( zombie_poi.attractor_array[ i ] == self ) - { - if ( isDefined( zombie_poi.claimed_attractor_positions ) && isDefined( zombie_poi.claimed_attractor_positions[ i ] ) ) - { - return zombie_poi.claimed_attractor_positions[ i ]; - } - } - } - return undefined; -} - -can_attract( attractor ) //checked matches cerberus output -{ - if ( !isDefined( self.attractor_array ) ) - { - self.attractor_array = []; - } - if ( isDefined( self.attracted_array ) && !isinarray( self.attracted_array, attractor ) ) - { - return 0; - } - if ( !array_check_for_dupes( self.attractor_array, attractor ) ) - { - return 1; - } - if ( isDefined( self.num_poi_attracts ) && ( self.attractor_array.size >= self.num_poi_attracts ) ) - { - return 0; - } - return 1; -} - -update_poi_on_death( zombie_poi ) //checked matches cerberus output -{ - self endon( "kill_poi" ); - self waittill( "death" ); - self remove_poi_attractor( zombie_poi ); -} - -update_on_poi_removal( zombie_poi ) //checked changed to match cerberus output -{ - zombie_poi waittill( "death" ); - if ( !isDefined( zombie_poi.attractor_array ) ) - { - return; - } - for ( i = 0; i < zombie_poi.attractor_array.size; i++ ) - { - if ( zombie_poi.attractor_array[ i ] == self ) - { - arrayremoveindex( zombie_poi.attractor_array, i ); - arrayremoveindex( zombie_poi.claimed_attractor_positions, i ); - } - } -} - -invalidate_attractor_pos( attractor_pos, zombie ) //checked changed to match cerberus output -{ - if ( !isDefined( self ) || !isDefined( attractor_pos ) ) - { - wait 0.1; - return undefined; - } - if ( isDefined( self.attractor_positions ) && !array_check_for_dupes_using_compare( self.attractor_positions, attractor_pos, ::poi_locations_equal ) ) - { - index = 0; - for ( i = 0; i < self.attractor_positions.size; i++ ) - { - if ( poi_locations_equal( self.attractor_positions[ i ], attractor_pos ) ) - { - index = i; - } - } - for ( i = 0; i < self.last_index.size; i++ ) - { - if ( index <= self.last_index[ i ] ) - { - self.last_index[ i ]--; - } - } - arrayremovevalue( self.attractor_array, zombie ); - arrayremovevalue( self.attractor_positions, attractor_pos ); - for ( i = 0; i < self.claimed_attractor_positions.size; i++ ) - { - if ( self.claimed_attractor_positions[ i ][ 0 ] == attractor_pos[ 0 ] ) - { - arrayremovevalue( self.claimed_attractor_positions, self.claimed_attractor_positions[ i ] ); - } - } - } - else - { - wait 0.1; - } - return get_zombie_point_of_interest( zombie.origin ); -} - -remove_poi_from_ignore_list( poi ) //checked changed to match cerberus output -{ - if ( isDefined( self.ignore_poi ) && self.ignore_poi.size > 0 ) - { - for ( i = 0; i < self.ignore_poi.size; i++ ) - { - if ( self.ignore_poi[ i ] == poi ) - { - arrayremovevalue( self.ignore_poi, self.ignore_poi[ i ] ); - return; - } - } - } -} - -add_poi_to_ignore_list( poi ) //checked changed to match cerberus output -{ - if ( !isDefined( self.ignore_poi ) ) - { - self.ignore_poi = []; - } - add_poi = 1; - if ( self.ignore_poi.size > 0 ) - { - for ( i = 0; i < self.ignore_poi.size; i++ ) - { - if ( self.ignore_poi[ i ] == poi ) - { - add_poi = 0; - break; - } - } - } - else if ( add_poi ) - { - self.ignore_poi[ self.ignore_poi.size ] = poi; - } -} - -default_validate_enemy_path_length( player ) //checked matches cerberus output -{ - max_dist = 1296; - d = distancesquared( self.origin, player.origin ); - if ( d <= max_dist ) - { - return 1; - } - return 0; -} - -get_path_length_to_enemy( enemy ) //checked matches cerberus output -{ - path_length = self calcpathlength( enemy.origin ); - return path_length; -} - -get_closest_player_using_paths( origin, players ) //checked partially changed to match cerberus output //did not change while loop to for loop because continues in for loops go infinite -{ - min_length_to_player = 9999999; - n_2d_distance_squared = 9999999; - player_to_return = undefined; - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - length_to_player = get_path_length_to_enemy( player ); - if ( isDefined( level.validate_enemy_path_length ) ) - { - if ( length_to_player == 0 ) - { - valid = self thread [[ level.validate_enemy_path_length ]]( player ); - if ( !valid ) - { - i++; - continue; - } - } - } - if ( length_to_player < min_length_to_player ) - { - min_length_to_player = length_to_player; - player_to_return = player; - n_2d_distance_squared = distance2dsquared( self.origin, player.origin ); - i++; - continue; - } - if ( length_to_player == min_length_to_player && length_to_player <= 5 ) - { - n_new_distance = distance2dsquared( self.origin, player.origin ); - if ( n_new_distance < n_2d_distance_squared ) - { - min_length_to_player = length_to_player; - player_to_return = player; - n_2d_distance_squared = n_new_distance; - } - } - i++; - } - return player_to_return; -} - -get_closest_valid_player( origin, ignore_player ) //checked changed to match cerberus output -{ - valid_player_found = 0; - players = get_players(); - if ( is_true( level._zombie_using_humangun ) ) - { - players = arraycombine( players, level._zombie_human_array, 0, 0 ); - } - if ( isDefined( ignore_player ) ) - { - for ( i = 0; i < ignore_player.size; i++ ) - { - arrayremovevalue( players, ignore_player[ i ] ); - } - } - done = 0; - while ( players.size && !done ) - { - done = 1; - for ( i = 0; i < players.size; i++ ) - { - player = players[ i ]; - if ( !is_player_valid( player, 1 ) ) - { - arrayremovevalue( players, player ); - done = 0; - break; - } - } - } - if ( players.size == 0 ) - { - return undefined; - } - while ( !valid_player_found ) - { - if ( isDefined( self.closest_player_override ) ) - { - player = [[ self.closest_player_override ]]( origin, players ); - } - else if ( isDefined( level.closest_player_override ) ) - { - player = [[ level.closest_player_override ]]( origin, players ); - } - else if ( is_true( level.calc_closest_player_using_paths ) ) - { - player = get_closest_player_using_paths( origin, players ); - } - else - { - player = getclosest( origin, players ); - } - if ( !isDefined( player ) || players.size == 0 ) - { - return undefined; - } - if ( is_true( level._zombie_using_humangun ) && isai( player ) ) - { - return player; - } - if ( !is_player_valid( player, 1 ) ) - { - arrayremovevalue( players, player ); - if ( players.size == 0 ) - { - return undefined; - } - } - return player; - } -} - -is_player_valid( player, checkignoremeflag, ignore_laststand_players ) //checked matches cerberus output -{ - if ( !isDefined( player ) ) - { - return 0; - } - if ( !isalive( player ) ) - { - return 0; - } - if ( !isplayer( player ) ) - { - return 0; - } - if ( isDefined( player.is_zombie ) && player.is_zombie == 1 ) - { - return 0; - } - if ( player.sessionstate == "spectator" ) - { - return 0; - } - if ( player.sessionstate == "intermission" ) - { - return 0; - } - if ( is_true( self.intermission ) ) - { - return 0; - } - if ( !is_true( ignore_laststand_players ) ) - { - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - return 0; - } - } - if ( is_true( checkignoremeflag ) && player.ignoreme ) - { - return 0; - } - if ( isDefined( level.is_player_valid_override ) ) - { - return [[ level.is_player_valid_override ]]( player ); - } - return 1; -} - -get_number_of_valid_players() //checked changed to match cerberus output -{ - players = get_players(); - num_player_valid = 0; - for ( i = 0; i < players.size; i++ ) - { - if ( is_player_valid( players[ i ] ) ) - { - num_player_valid += 1; - } - } - return num_player_valid; -} - -in_revive_trigger() //checked changed to match cerberus output -{ - if ( isDefined( self.rt_time ) && ( self.rt_time + 100 ) >= getTime() ) - { - return self.in_rt_cached; - } - self.rt_time = getTime(); - players = level.players; - for ( i = 0; i < players.size; i++ ) - { - current_player = players[ i ]; - if ( isDefined( current_player ) && isDefined( current_player.revivetrigger ) && isalive( current_player ) ) - { - if ( self istouching( current_player.revivetrigger ) ) - { - self.in_rt_cached = 1; - return 1; - } - } - } - self.in_rt_cached = 0; - return 0; -} - -get_closest_node( org, nodes ) //checked matches cerberus output -{ - return getclosest( org, nodes ); -} - -non_destroyed_bar_board_order( origin, chunks ) //checked partially changed to match cerberus output //did not change while loop with continue to for loop to prevent infinite continue loop bug -{ - first_bars = []; - first_bars1 = []; - first_bars2 = []; - i = 0; - while ( i < chunks.size ) - { - if ( isDefined( chunks[ i ].script_team ) && chunks[ i ].script_team == "classic_boards" ) - { - if ( isDefined( chunks[ i ].script_parameters ) && chunks[ i ].script_parameters == "board" ) - { - return get_closest_2d( origin, chunks ); - } - else if ( isDefined( chunks[ i ].script_team ) && chunks[ i ].script_team != "bar_board_variant1" && chunks[ i ].script_team != "bar_board_variant2" || chunks[ i ].script_team == "bar_board_variant4" && chunks[ i ].script_team == "bar_board_variant5" ) - { - return undefined; - } - i++; - continue; - } - if ( isDefined( chunks[ i ].script_team ) && chunks[ i ].script_team == "new_barricade" ) - { - if ( isDefined( chunks[ i ].script_parameters ) || chunks[ i ].script_parameters == "repair_board" && chunks[ i ].script_parameters == "barricade_vents" ) - { - return get_closest_2d( origin, chunks ); - } - } - i++; - } - for ( i = 0; i < chunks.size; i++ ) - { - if ( isDefined( chunks[ i ].script_team ) && chunks[ i ].script_team == "6_bars_bent" || chunks[ i ].script_team == "6_bars_prestine" ) - { - if ( isDefined( chunks[ i ].script_parameters ) && chunks[ i ].script_parameters == "bar" ) - { - if ( isDefined( chunks[ i ].script_noteworthy ) ) - { - if ( chunks[ i ].script_noteworthy == "4" || chunks[ i ].script_noteworthy == "6" ) - { - first_bars[ first_bars.size ] = chunks[ i ]; - } - } - } - } - } - for ( i = 0; i < chunks.size; i++ ) - { - if ( isDefined( chunks[ i ].script_team ) && chunks[ i ].script_team == "6_bars_bent" || chunks[ i ].script_team == "6_bars_prestine" ) - { - if ( isDefined( chunks[ i ].script_parameters ) && chunks[ i ].script_parameters == "bar" ) - { - if ( !first_bars[ i ].destroyed ) - { - return first_bars[ i ]; - } - } - } - } - for ( i = 0; i < chunks.size; i++ ) - { - if ( isDefined( chunks[ i ].script_team ) && chunks[ i ].script_team == "6_bars_bent" || chunks[ i ].script_team == "6_bars_prestine" ) - { - if ( isDefined( chunks[ i ].script_parameters ) && chunks[ i ].script_parameters == "bar" ) - { - if ( !chunks[ i ].destroyed ) - { - return get_closest_2d( origin, chunks ); - } - } - } - } -} - -non_destroyed_grate_order( origin, chunks_grate ) //checked partially changed to match cerberus output //did not include continues because they would be redundant -{ - grate_order = []; - grate_order1 = []; - grate_order2 = []; - grate_order3 = []; - grate_order4 = []; - grate_order5 = []; - grate_order6 = []; - if ( isDefined( chunks_grate ) ) - { - for ( i = 0; i < chunks_grate.size; i++ ) - { - if ( isDefined( chunks_grate[ i ].script_parameters ) && chunks_grate[ i ].script_parameters == "grate" ) - { - if ( isDefined( chunks_grate[ i ].script_noteworthy ) && chunks_grate[ i ].script_noteworthy == "1" ) - { - grate_order1[ grate_order1.size ] = chunks_grate[ i ]; - } - if ( isDefined( chunks_grate[ i ].script_noteworthy ) && chunks_grate[ i ].script_noteworthy == "2" ) - { - grate_order2[ grate_order2.size ] = chunks_grate[ i ]; - } - if ( isDefined( chunks_grate[ i ].script_noteworthy ) && chunks_grate[ i ].script_noteworthy == "3" ) - { - grate_order3[ grate_order3.size ] = chunks_grate[ i ]; - } - if ( isDefined( chunks_grate[ i ].script_noteworthy ) && chunks_grate[ i ].script_noteworthy == "4" ) - { - grate_order4[ grate_order4.size ] = chunks_grate[ i ]; - } - if ( isDefined( chunks_grate[ i ].script_noteworthy ) && chunks_grate[ i ].script_noteworthy == "5" ) - { - grate_order5[ grate_order5.size ] = chunks_grate[ i ]; - } - if ( isDefined( chunks_grate[ i ].script_noteworthy ) && chunks_grate[ i ].script_noteworthy == "6" ) - { - grate_order6[ grate_order6.size ] = chunks_grate[ i ]; - } - } - } - for ( i = 0; i < chunks_grate.size; i++ ) - { - if ( isDefined( chunks_grate[ i ].script_parameters ) && chunks_grate[ i ].script_parameters == "grate" ) - { - if ( isDefined( grate_order1[ i ] ) ) - { - if ( grate_order1[ i ].state == "repaired" ) - { - grate_order2[ i ] thread show_grate_pull(); - return grate_order1[ i ]; - } - if ( grate_order2[ i ].state == "repaired" ) - { - /* -/# - iprintlnbold( " pull bar2 " ); -#/ - */ - grate_order3[ i ] thread show_grate_pull(); - return grate_order2[ i ]; - } - if ( grate_order3[ i ].state == "repaired" ) - { - /* -/# - iprintlnbold( " pull bar3 " ); -#/ - */ - grate_order4[ i ] thread show_grate_pull(); - return grate_order3[ i ]; - } - if ( grate_order4[ i ].state == "repaired" ) - { - /* -/# - iprintlnbold( " pull bar4 " ); -#/ - */ - grate_order5[ i ] thread show_grate_pull(); - return grate_order4[ i ]; - } - if ( grate_order5[ i ].state == "repaired" ) - { - /* -/# - iprintlnbold( " pull bar5 " ); -#/ - */ - grate_order6[ i ] thread show_grate_pull(); - return grate_order5[ i ]; - } - if ( grate_order6[ i ].state == "repaired" ) - { - return grate_order6[ i ]; - } - } - } - } - } -} - -non_destroyed_variant1_order( origin, chunks_variant1 ) //checked partially changed to match cerberus output //did not include continues because they would be redundant -{ - variant1_order = []; - variant1_order1 = []; - variant1_order2 = []; - variant1_order3 = []; - variant1_order4 = []; - variant1_order5 = []; - variant1_order6 = []; - if ( isDefined( chunks_variant1 ) ) - { - for ( i = 0; i < chunks_variant1.size; i++ ) - { - if ( isDefined( chunks_variant1[ i ].script_team ) && chunks_variant1[ i ].script_team == "bar_board_variant1" ) - { - if ( isDefined( chunks_variant1[ i ].script_noteworthy ) ) - { - if ( chunks_variant1[ i ].script_noteworthy == "1" ) - { - variant1_order1[ variant1_order1.size ] = chunks_variant1[ i ]; - } - if ( chunks_variant1[ i ].script_noteworthy == "2" ) - { - variant1_order2[ variant1_order2.size ] = chunks_variant1[ i ]; - } - if ( chunks_variant1[ i ].script_noteworthy == "3" ) - { - variant1_order3[ variant1_order3.size ] = chunks_variant1[ i ]; - } - if ( chunks_variant1[ i ].script_noteworthy == "4" ) - { - variant1_order4[ variant1_order4.size ] = chunks_variant1[ i ]; - } - if ( chunks_variant1[ i ].script_noteworthy == "5" ) - { - variant1_order5[ variant1_order5.size ] = chunks_variant1[ i ]; - } - if ( chunks_variant1[ i ].script_noteworthy == "6" ) - { - variant1_order6[ variant1_order6.size ] = chunks_variant1[ i ]; - } - } - } - } - for ( i = 0; i < chunks_variant1.size; i++ ) - { - if ( isDefined( chunks_variant1[ i ].script_team ) && chunks_variant1[ i ].script_team == "bar_board_variant1" ) - { - if ( isDefined( variant1_order2[ i ] ) ) - { - if ( variant1_order2[ i ].state == "repaired" ) - { - return variant1_order2[ i ]; - } - if ( variant1_order3[ i ].state == "repaired" ) - { - return variant1_order3[ i ]; - } - if ( variant1_order4[ i ].state == "repaired" ) - { - return variant1_order4[ i ]; - } - if ( variant1_order6[ i ].state == "repaired" ) - { - return variant1_order6[ i ]; - } - if ( variant1_order5[ i ].state == "repaired" ) - { - return variant1_order5[ i ]; - } - if ( variant1_order1[ i ].state == "repaired" ) - { - return variant1_order1[ i ]; - } - } - } - } - } -} - -non_destroyed_variant2_order( origin, chunks_variant2 ) //checked partially changed to match cerberus output //did not include continues because they would be redundant -{ - variant2_order = []; - variant2_order1 = []; - variant2_order2 = []; - variant2_order3 = []; - variant2_order4 = []; - variant2_order5 = []; - variant2_order6 = []; - if ( isDefined( chunks_variant2 ) ) - { - for ( i = 0; i < chunks_variant2.size; i++ ) - { - if ( isDefined( chunks_variant2[ i ].script_team ) && chunks_variant2[ i ].script_team == "bar_board_variant2" ) - { - if ( isDefined( chunks_variant2[ i ].script_noteworthy ) && chunks_variant2[ i ].script_noteworthy == "1" ) - { - variant2_order1[ variant2_order1.size ] = chunks_variant2[ i ]; - } - if ( isDefined( chunks_variant2[ i ].script_noteworthy ) && chunks_variant2[ i ].script_noteworthy == "2" ) - { - variant2_order2[ variant2_order2.size ] = chunks_variant2[ i ]; - } - if ( isDefined( chunks_variant2[ i ].script_noteworthy ) && chunks_variant2[ i ].script_noteworthy == "3" ) - { - variant2_order3[ variant2_order3.size ] = chunks_variant2[ i ]; - } - if ( isDefined( chunks_variant2[ i ].script_noteworthy ) && chunks_variant2[ i ].script_noteworthy == "4" ) - { - variant2_order4[ variant2_order4.size ] = chunks_variant2[ i ]; - } - if ( isDefined( chunks_variant2[ i ].script_noteworthy ) && chunks_variant2[ i ].script_noteworthy == "5" && isDefined( chunks_variant2[ i ].script_location ) && chunks_variant2[ i ].script_location == "5" ) - { - variant2_order5[ variant2_order5.size ] = chunks_variant2[ i ]; - } - if ( isDefined( chunks_variant2[ i ].script_noteworthy ) && chunks_variant2[ i ].script_noteworthy == "5" && isDefined( chunks_variant2[ i ].script_location ) && chunks_variant2[ i ].script_location == "6" ) - { - variant2_order6[ variant2_order6.size ] = chunks_variant2[ i ]; - } - } - } - for ( i = 0; i < chunks_variant2.size; i++ ) - { - if ( isDefined( chunks_variant2[ i ].script_team ) && chunks_variant2[ i ].script_team == "bar_board_variant2" ) - { - if ( isDefined( variant2_order1[ i ] ) ) - { - if ( variant2_order1[ i ].state == "repaired" ) - { - return variant2_order1[ i ]; - } - if ( variant2_order2[ i ].state == "repaired" ) - { - return variant2_order2[ i ]; - } - if ( variant2_order3[ i ].state == "repaired" ) - { - return variant2_order3[ i ]; - } - if ( variant2_order5[ i ].state == "repaired" ) - { - return variant2_order5[ i ]; - } - if ( variant2_order4[ i ].state == "repaired" ) - { - return variant2_order4[ i ]; - } - if ( variant2_order6[ i ].state == "repaired" ) - { - return variant2_order6[ i ]; - } - } - } - } - } -} - -non_destroyed_variant4_order( origin, chunks_variant4 ) //checked partially changed to match cerberus output //did not include continues because they would be redundant -{ - variant4_order = []; - variant4_order1 = []; - variant4_order2 = []; - variant4_order3 = []; - variant4_order4 = []; - variant4_order5 = []; - variant4_order6 = []; - if ( isDefined( chunks_variant4 ) ) - { - for ( i = 0; i < chunks_variant4.size; i++ ) - { - if ( isDefined( chunks_variant4[ i ].script_team ) && chunks_variant4[ i ].script_team == "bar_board_variant4" ) - { - if ( isDefined( chunks_variant4[ i ].script_noteworthy ) && chunks_variant4[ i ].script_noteworthy == "1" && !isDefined( chunks_variant4[ i ].script_location ) ) - { - variant4_order1[ variant4_order1.size ] = chunks_variant4[ i ]; - } - if ( isDefined( chunks_variant4[ i ].script_noteworthy ) && chunks_variant4[ i ].script_noteworthy == "2" ) - { - variant4_order2[ variant4_order2.size ] = chunks_variant4[ i ]; - } - if ( isDefined( chunks_variant4[ i ].script_noteworthy ) && chunks_variant4[ i ].script_noteworthy == "3" ) - { - variant4_order3[ variant4_order3.size ] = chunks_variant4[ i ]; - } - if ( isDefined( chunks_variant4[ i ].script_noteworthy ) && chunks_variant4[ i ].script_noteworthy == "1" && isDefined( chunks_variant4[ i ].script_location ) && chunks_variant4[ i ].script_location == "3" ) - { - variant4_order4[ variant4_order4.size ] = chunks_variant4[ i ]; - } - if ( isDefined( chunks_variant4[ i ].script_noteworthy ) && chunks_variant4[ i ].script_noteworthy == "5" ) - { - variant4_order5[ variant4_order5.size ] = chunks_variant4[ i ]; - } - if ( isDefined( chunks_variant4[ i ].script_noteworthy ) && chunks_variant4[ i ].script_noteworthy == "6" ) - { - variant4_order6[ variant4_order6.size ] = chunks_variant4[ i ]; - } - } - } - for ( i = 0; i < chunks_variant4.size; i++ ) - { - if ( isDefined( chunks_variant4[ i ].script_team ) && chunks_variant4[ i ].script_team == "bar_board_variant4" ) - { - if ( isDefined( variant4_order1[ i ] ) ) - { - if ( variant4_order1[ i ].state == "repaired" ) - { - return variant4_order1[ i ]; - } - if ( variant4_order6[ i ].state == "repaired" ) - { - return variant4_order6[ i ]; - } - if ( variant4_order3[ i ].state == "repaired" ) - { - return variant4_order3[ i ]; - } - if ( variant4_order4[ i ].state == "repaired" ) - { - return variant4_order4[ i ]; - } - if ( variant4_order2[ i ].state == "repaired" ) - { - return variant4_order2[ i ]; - } - if ( variant4_order5[ i ].state == "repaired" ) - { - return variant4_order5[ i ]; - } - } - } - } - } -} - -non_destroyed_variant5_order( origin, chunks_variant5 ) //checked partially changed to match cerberus output //did not include continues because they would be redundant -{ - variant5_order = []; - variant5_order1 = []; - variant5_order2 = []; - variant5_order3 = []; - variant5_order4 = []; - variant5_order5 = []; - variant5_order6 = []; - if ( isDefined( chunks_variant5 ) ) - { - for ( i = 0; i < chunks_variant5.size; i++ ) - { - if ( isDefined( chunks_variant5[ i ].script_team ) && chunks_variant5[ i ].script_team == "bar_board_variant5" ) - { - if ( isDefined( chunks_variant5[ i ].script_noteworthy ) ) - { - if ( chunks_variant5[ i ].script_noteworthy == "1" && !isDefined( chunks_variant5[ i ].script_location ) ) - { - variant5_order1[ variant5_order1.size ] = chunks_variant5[ i ]; - } - if ( chunks_variant5[ i ].script_noteworthy == "2" ) - { - variant5_order2[ variant5_order2.size ] = chunks_variant5[ i ]; - } - if ( isDefined( chunks_variant5[ i ].script_noteworthy ) && chunks_variant5[ i ].script_noteworthy == "1" && isDefined( chunks_variant5[ i ].script_location ) && chunks_variant5[ i ].script_location == "3" ) - { - variant5_order3[ variant5_order3.size ] = chunks_variant5[ i ]; - } - if ( chunks_variant5[ i ].script_noteworthy == "4" ) - { - variant5_order4[ variant5_order4.size ] = chunks_variant5[ i ]; - } - if ( chunks_variant5[ i ].script_noteworthy == "5" ) - { - variant5_order5[ variant5_order5.size ] = chunks_variant5[ i ]; - } - if ( chunks_variant5[ i ].script_noteworthy == "6" ) - { - variant5_order6[ variant5_order6.size ] = chunks_variant5[ i ]; - } - } - } - } - for ( i = 0; i < chunks_variant5.size; i++ ) - { - if ( isDefined( chunks_variant5[ i ].script_team ) && chunks_variant5[ i ].script_team == "bar_board_variant5" ) - { - if ( isDefined( variant5_order1[ i ] ) ) - { - if ( variant5_order1[ i ].state == "repaired" ) - { - return variant5_order1[ i ]; - } - if ( variant5_order6[ i ].state == "repaired" ) - { - return variant5_order6[ i ]; - } - if ( variant5_order3[ i ].state == "repaired" ) - { - return variant5_order3[ i ]; - } - if ( variant5_order2[ i ].state == "repaired" ) - { - return variant5_order2[ i ]; - } - if ( variant5_order5[ i ].state == "repaired" ) - { - return variant5_order5[ i ]; - } - if ( variant5_order4[ i ].state == "repaired" ) - { - return variant5_order4[ i ]; - } - } - } - } - } -} - -show_grate_pull() //checked changed to match cerberus output -{ - wait 0.53; - self show(); - self vibrate( vectorScale( ( 0, 1, 0 ), 270 ), 0.2, 0.4, 0.4 ); -} - -get_closest_2d( origin, ents ) //checked changed to match cerberus output -{ - if ( !isDefined( ents ) ) - { - return undefined; - } - dist = distance2d( origin, ents[ 0 ].origin ); - index = 0; - temp_array = []; - for ( i = 1; i < ents.size; i++ ) - { - if ( isDefined( ents[ i ].unbroken ) && ents[ i ].unbroken == 1 ) - { - ents[ i ].index = i; - temp_array[ temp_array.size ] = ents[ i ]; - } - } - if ( temp_array.size > 0 ) - { - index = temp_array[ randomintrange( 0, temp_array.size ) ].index; - return ents[ index ]; - } - else - { - for ( i = 1; i < ents.size; i++ ) - { - temp_dist = distance2d( origin, ents[ i ].origin ); - if ( temp_dist < dist ) - { - dist = temp_dist; - index = i; - } - } - return ents[ index ]; - } -} - -disable_trigger() //checked matches cerberus output -{ - if ( !is_true( self.disabled ) ) - { - self.disabled = 1; - self.origin -= vectorScale( ( 0, 0, 1 ), 10000 ); - } -} - -enable_trigger() //checked matches cerberus output -{ - if ( !is_true( self.disabled ) ) - { - return; - } - self.disabled = 0; - self.origin += vectorScale( ( 0, 0, 1 ), 10000 ); -} - -in_playable_area() //checked changed to match cerberus output -{ - playable_area = getentarray( "player_volume", "script_noteworthy" ); - if ( !isDefined( playable_area ) ) - { - /* -/# - println( "No playable area playable_area found! Assume EVERYWHERE is PLAYABLE" ); -#/ - */ - return 1; - } - for ( i = 0; i < playable_area.size; i++ ) - { - if ( self istouching( playable_area[ i ] ) ) - { - return 1; - } - } - return 0; -} - -get_closest_non_destroyed_chunk( origin, barrier, barrier_chunks ) //checked changed to match cerberus output -{ - chunks = undefined; - chunks_grate = undefined; - chunks_grate = get_non_destroyed_chunks_grate( barrier, barrier_chunks ); - chunks = get_non_destroyed_chunks( barrier, barrier_chunks ); - if ( isDefined( barrier.zbarrier ) ) - { - if ( isDefined( chunks ) ) - { - return array_randomize( chunks )[ 0 ]; - } - if ( isDefined( chunks_grate ) ) - { - return array_randomize( chunks_grate )[ 0 ]; - } - } - else if ( isDefined( chunks ) ) - { - return non_destroyed_bar_board_order( origin, chunks ); - } - else if ( isDefined( chunks_grate ) ) - { - return non_destroyed_grate_order( origin, chunks_grate ); - } - return undefined; -} - -get_random_destroyed_chunk( barrier, barrier_chunks ) //checked changed to match cerberus output -{ - if ( isDefined( barrier.zbarrier ) ) - { - ret = undefined; - pieces = barrier.zbarrier getzbarrierpieceindicesinstate( "open" ); - if ( pieces.size ) - { - ret = array_randomize( pieces )[ 0 ]; - } - return ret; - } - else - { - chunk = undefined; - chunks_repair_grate = undefined; - chunks = get_destroyed_chunks( barrier_chunks ); - chunks_repair_grate = get_destroyed_repair_grates( barrier_chunks ); - if ( isDefined( chunks ) ) - { - return chunks[ randomint( chunks.size ) ]; - } - else if ( isDefined( chunks_repair_grate ) ) - { - return grate_order_destroyed( chunks_repair_grate ); - } - return undefined; - } -} - -get_destroyed_repair_grates( barrier_chunks ) //checked changed to match cerberus output -{ - array = []; - for ( i = 0; i < barrier_chunks.size; i++ ) - { - if ( isDefined( barrier_chunks[ i ] ) ) - { - if ( isDefined( barrier_chunks[ i ].script_parameters ) && barrier_chunks[ i ].script_parameters == "grate" ) - { - array[ array.size ] = barrier_chunks[ i ]; - } - } - } - if ( array.size == 0 ) - { - return undefined; - } - return array; -} - -get_non_destroyed_chunks( barrier, barrier_chunks ) //checked partially changed to match cerberus output //did not change while loop to for loop because continues in for loops go infinite -{ - if ( isDefined( barrier.zbarrier ) ) - { - return barrier.zbarrier getzbarrierpieceindicesinstate( "closed" ); - } - else - { - array = []; - i = 0; - while ( i < barrier_chunks.size ) - { - if ( isDefined( barrier_chunks[ i ].script_team ) && barrier_chunks[ i ].script_team == "classic_boards" ) - { - if ( isDefined( barrier_chunks[ i ].script_parameters ) && barrier_chunks[ i ].script_parameters == "board" ) - { - if ( barrier_chunks[ i ] get_chunk_state() == "repaired" ) - { - if ( barrier_chunks[ i ].origin == barrier_chunks[ i ].og_origin ) - { - array[ array.size ] = barrier_chunks[ i ]; - } - } - } - } - if ( isDefined( barrier_chunks[ i ].script_team ) && barrier_chunks[ i ].script_team == "new_barricade" ) - { - if ( isDefined( barrier_chunks[ i ].script_parameters ) && barrier_chunks[ i ].script_parameters == "repair_board" || barrier_chunks[ i ].script_parameters == "barricade_vents" ) - { - if ( barrier_chunks[ i ] get_chunk_state() == "repaired" ) - { - if ( barrier_chunks[ i ].origin == barrier_chunks[ i ].og_origin ) - { - array[ array.size ] = barrier_chunks[ i ]; - } - } - } - i++; - continue; - } - if ( isDefined( barrier_chunks[ i ].script_team ) && barrier_chunks[ i ].script_team == "6_bars_bent" ) - { - if ( isDefined( barrier_chunks[ i ].script_parameters ) && barrier_chunks[ i ].script_parameters == "bar" ) - { - if ( barrier_chunks[ i ] get_chunk_state() == "repaired" ) - { - if ( barrier_chunks[ i ].origin == barrier_chunks[ i ].og_origin ) - { - array[ array.size ] = barrier_chunks[ i ]; - } - } - } - i++; - continue; - } - if ( isDefined( barrier_chunks[ i ].script_team ) && barrier_chunks[ i ].script_team == "6_bars_prestine" ) - { - if ( isDefined( barrier_chunks[ i ].script_parameters ) && barrier_chunks[ i ].script_parameters == "bar" ) - { - if ( barrier_chunks[ i ] get_chunk_state() == "repaired" ) - { - if ( barrier_chunks[ i ].origin == barrier_chunks[ i ].og_origin ) - { - array[ array.size ] = barrier_chunks[ i ]; - } - } - } - } - i++; - } - if ( array.size == 0 ) - { - return undefined; - } - return array; - } -} - -get_non_destroyed_chunks_grate( barrier, barrier_chunks ) //checked changed to match cerberus output -{ - if ( isDefined( barrier.zbarrier ) ) - { - return barrier.zbarrier getzbarrierpieceindicesinstate( "closed" ); - } - else - { - array = []; - for ( i = 0; i < barrier_chunks.size; i++ ) - { - if ( isDefined( barrier_chunks[ i ].script_parameters ) && barrier_chunks[ i ].script_parameters == "grate" ) - { - if ( isDefined( barrier_chunks[ i ] ) ) - { - array[ array.size ] = barrier_chunks[ i ]; - } - } - } - if ( array.size == 0 ) - { - return undefined; - } - return array; - } -} - -get_non_destroyed_variant1( barrier_chunks ) //checked changed to match cerberus output -{ - array = []; - for ( i = 0; i < barrier_chunks.size; i++ ) - { - if ( isDefined( barrier_chunks[ i ].script_team ) && barrier_chunks[ i ].script_team == "bar_board_variant1" ) - { - if ( isDefined( barrier_chunks[ i ] ) ) - { - array[ array.size ] = barrier_chunks[ i ]; - } - } - } - if ( array.size == 0 ) - { - return undefined; - } - return array; -} - -get_non_destroyed_variant2( barrier_chunks ) //checked changed to match cerberus output -{ - array = []; - for ( i = 0; i < barrier_chunks.size; i++ ) - { - if ( isDefined( barrier_chunks[ i ].script_team ) && barrier_chunks[ i ].script_team == "bar_board_variant2" ) - { - if ( isDefined( barrier_chunks[ i ] ) ) - { - array[ array.size ] = barrier_chunks[ i ]; - } - } - } - if ( array.size == 0 ) - { - return undefined; - } - return array; -} - -get_non_destroyed_variant4( barrier_chunks ) //checked changed to match cerberus output -{ - array = []; - for ( i = 0; i < barrier_chunks.size; i++ ) - { - if ( isDefined( barrier_chunks[ i ].script_team ) && barrier_chunks[ i ].script_team == "bar_board_variant4" ) - { - if ( isDefined( barrier_chunks[ i ] ) ) - { - array[ array.size ] = barrier_chunks[ i ]; - } - } - } - if ( array.size == 0 ) - { - return undefined; - } - return array; -} - -get_non_destroyed_variant5( barrier_chunks ) //checked changed to match cerberus output -{ - array = []; - for ( i = 0; i < barrier_chunks.size; i++ ) - { - if ( isDefined( barrier_chunks[ i ].script_team ) && barrier_chunks[ i ].script_team == "bar_board_variant5" ) - { - if ( isDefined( barrier_chunks[ i ] ) ) - { - array[ array.size ] = barrier_chunks[ i ]; - } - } - } - if ( array.size == 0 ) - { - return undefined; - } - return array; -} - -get_destroyed_chunks( barrier_chunks ) //checked partially changed to match cerberus output //did not change while loop to for loop because continues in for loops go infinite -{ - array = []; - i = 0; - while ( i < barrier_chunks.size ) - { - if ( barrier_chunks[ i ] get_chunk_state() == "destroyed" ) - { - if ( isDefined( barrier_chunks[ i ].script_parameters ) && barrier_chunks[ i ].script_parameters == "board" ) - { - array[ array.size ] = barrier_chunks[ i ]; - i++; - continue; - } - if ( isDefined( barrier_chunks[ i ].script_parameters ) && barrier_chunks[ i ].script_parameters == "repair_board" || barrier_chunks[ i ].script_parameters == "barricade_vents" ) - { - array[ array.size ] = barrier_chunks[ i ]; - i++; - continue; - } - if ( isDefined( barrier_chunks[ i ].script_parameters ) && barrier_chunks[ i ].script_parameters == "bar" ) - { - array[ array.size ] = barrier_chunks[ i ]; - i++; - continue; - } - if ( isDefined( barrier_chunks[ i ].script_parameters ) && barrier_chunks[ i ].script_parameters == "grate" ) - { - return undefined; - } - } - i++; - } - if ( array.size == 0 ) - { - return undefined; - } - return array; -} - -grate_order_destroyed( chunks_repair_grate ) //checked changed to match cerberus output -{ - grate_repair_order = []; - grate_repair_order1 = []; - grate_repair_order2 = []; - grate_repair_order3 = []; - grate_repair_order4 = []; - grate_repair_order5 = []; - grate_repair_order6 = []; - for ( i = 0; i < chunks_repair_grate.size; i++ ) - { - if ( isDefined( chunks_repair_grate[ i ].script_parameters ) && chunks_repair_grate[ i ].script_parameters == "grate" ) - { - if ( isDefined( chunks_repair_grate[ i ].script_noteworthy ) && chunks_repair_grate[ i ].script_noteworthy == "1" ) - { - grate_repair_order1[ grate_repair_order1.size ] = chunks_repair_grate[ i ]; - } - if ( isDefined( chunks_repair_grate[ i ].script_noteworthy ) && chunks_repair_grate[ i ].script_noteworthy == "2" ) - { - grate_repair_order2[ grate_repair_order2.size ] = chunks_repair_grate[ i ]; - } - if ( isDefined( chunks_repair_grate[ i ].script_noteworthy ) && chunks_repair_grate[ i ].script_noteworthy == "3" ) - { - grate_repair_order3[ grate_repair_order3.size ] = chunks_repair_grate[ i ]; - } - if ( isDefined( chunks_repair_grate[ i ].script_noteworthy ) && chunks_repair_grate[ i ].script_noteworthy == "4" ) - { - grate_repair_order4[ grate_repair_order4.size ] = chunks_repair_grate[ i ]; - } - if ( isDefined( chunks_repair_grate[ i ].script_noteworthy ) && chunks_repair_grate[ i ].script_noteworthy == "5" ) - { - grate_repair_order5[ grate_repair_order5.size ] = chunks_repair_grate[ i ]; - } - if ( isDefined( chunks_repair_grate[ i ].script_noteworthy ) && chunks_repair_grate[ i ].script_noteworthy == "6" ) - { - grate_repair_order6[ grate_repair_order6.size ] = chunks_repair_grate[ i ]; - } - } - } - for ( i = 0; i < chunks_repair_grate.size; i++ ) - { - if ( isDefined( chunks_repair_grate[ i ].script_parameters ) && chunks_repair_grate[ i ].script_parameters == "grate" ) - { - if ( isDefined( grate_repair_order1[ i ] ) ) - { - if ( grate_repair_order6[ i ].state == "destroyed" ) - { - /* -/# - iprintlnbold( " Fix grate6 " ); -#/ - */ - return grate_repair_order6[ i ]; - } - if ( grate_repair_order5[ i ].state == "destroyed" ) - { - /* -/# - iprintlnbold( " Fix grate5 " ); -#/ - */ - grate_repair_order6[ i ] thread show_grate_repair(); - return grate_repair_order5[ i ]; - } - if ( grate_repair_order4[ i ].state == "destroyed" ) - { - /* -/# - iprintlnbold( " Fix grate4 " ); -#/ - */ - grate_repair_order5[ i ] thread show_grate_repair(); - return grate_repair_order4[ i ]; - } - if ( grate_repair_order3[ i ].state == "destroyed" ) - { - /* -/# - iprintlnbold( " Fix grate3 " ); -#/ - */ - grate_repair_order4[ i ] thread show_grate_repair(); - return grate_repair_order3[ i ]; - } - if ( grate_repair_order2[ i ].state == "destroyed" ) - { - /* -/# - iprintlnbold( " Fix grate2 " ); -#/ - */ - grate_repair_order3[ i ] thread show_grate_repair(); - return grate_repair_order2[ i ]; - } - if ( grate_repair_order1[ i ].state == "destroyed" ) - { - /* -/# - iprintlnbold( " Fix grate1 " ); -#/ - */ - grate_repair_order2[ i ] thread show_grate_repair(); - return grate_repair_order1[ i ]; - } - } - } - } -} - -show_grate_repair() //checked matches cerberus output -{ - wait 0.34; - self hide(); -} - -get_chunk_state() //checked matches cerberus output -{ - /* -/# - assert( isDefined( self.state ) ); -#/ - */ - return self.state; -} - -is_float( num ) //checked matches cerberus output -{ - val = num - int( num ); - if ( val != 0 ) - { - return 1; - } - else - { - return 0; - } -} - -array_limiter( array, total ) //checked changed to match cerberus output -{ - new_array = []; - for ( i = 0; i < array.size; i++ ) - { - if ( i < total ) - { - new_array[ new_array.size ] = array[ i ]; - } - } - return new_array; -} - -array_validate( array ) //checked matches cerberus output -{ - if ( isDefined( array ) && array.size > 0 ) - { - return 1; - } - else - { - return 0; - } -} - -add_spawner( spawner ) //checked matches cerberus output -{ - if ( isDefined( spawner.script_start ) && level.round_number < spawner.script_start ) - { - return; - } - if ( !is_true( spawner.is_enabled ) ) - { - return; - } - if ( is_true( spawner.has_been_added ) ) - { - return; - } - spawner.has_been_added = 1; - level.zombie_spawn_locations[ level.zombie_spawn_locations.size ] = spawner; -} - -fake_physicslaunch( target_pos, power ) //checked matches cerberus output -{ - start_pos = self.origin; - gravity = getDvarInt( "bg_gravity" ) * -1; - dist = distance( start_pos, target_pos ); - time = dist / power; - delta = target_pos - start_pos; - drop = ( 0.5 * gravity ) * ( time * time ); - velocity = ( delta[ 0 ] / time, delta[ 1 ] / time, ( delta[ 2 ] - drop ) / time ); - level thread draw_line_ent_to_pos( self, target_pos ); - self movegravity( velocity, time ); - return time; -} - -add_zombie_hint( ref, text ) //checked matches cerberus output -{ - if ( !isDefined( level.zombie_hints ) ) - { - level.zombie_hints = []; - } - precachestring( text ); - level.zombie_hints[ ref ] = text; -} - -get_zombie_hint( ref ) //checked matches cerberus output -{ - if ( isDefined( level.zombie_hints[ ref ] ) ) - { - return level.zombie_hints[ ref ]; - } - /* -/# - println( "UNABLE TO FIND HINT STRING " + ref ); -#/ - */ - return level.zombie_hints[ "undefined" ]; -} - -set_hint_string( ent, default_ref, cost ) //checked matches cerberus output -{ - ref = default_ref; - if ( isDefined( ent.script_hint ) ) - { - ref = ent.script_hint; - } - if ( is_true( level.legacy_hint_system ) ) - { - ref = ref + "_" + cost; - self sethintstring( get_zombie_hint( ref ) ); - } - else - { - hint = get_zombie_hint( ref ); - if ( isDefined( cost ) ) - { - self sethintstring( hint, cost ); - return; - } - else - { - self sethintstring( hint ); - } - } -} - -get_hint_string( ent, default_ref, cost ) //checked matches cerberus output -{ - ref = default_ref; - if ( isDefined( ent.script_hint ) ) - { - ref = ent.script_hint; - } - if ( is_true( level.legacy_hint_system ) && isDefined( cost ) ) - { - ref = ref + "_" + cost; - } - return get_zombie_hint( ref ); -} - -unitrigger_set_hint_string( ent, default_ref, cost ) //checked partially changed to match cerberus output //did not change while loop to foreach to prevent infinite loop related to continues -{ - triggers = []; - if ( self.trigger_per_player ) - { - triggers = self.playertrigger; - } - else - { - triggers[ 0 ] = self.trigger; - } - i = 0; - while ( i < triggers.size ) - { - ref = default_ref; - if ( isDefined( ent.script_hint ) ) - { - ref = ent.script_hint; - } - if ( is_true( level.legacy_hint_system ) ) - { - ref = ref + "_" + cost; - triggers[ i ] sethintstring( get_zombie_hint( ref ) ); - i++; - continue; - } - hint = get_zombie_hint( ref ); - if ( isDefined( cost ) ) - { - triggers[ i ] sethintstring( hint, cost ); - i++; - continue; - } - triggers[ i ] sethintstring( hint ); - i++; - } -} - -add_sound( ref, alias ) //checked matches cerberus output -{ - if ( !isDefined( level.zombie_sounds ) ) - { - level.zombie_sounds = []; - } - level.zombie_sounds[ ref ] = alias; -} - -play_sound_at_pos( ref, pos, ent ) //checked matches cerberus output -{ - if ( isDefined( ent ) ) - { - if ( isDefined( ent.script_soundalias ) ) - { - playsoundatposition( ent.script_soundalias, pos ); - return; - } - if ( isDefined( self.script_sound ) ) - { - ref = self.script_sound; - } - } - if ( ref == "none" ) - { - return; - } - if ( !isDefined( level.zombie_sounds[ ref ] ) ) - { - /* -/# - assertmsg( "Sound "" + ref + "" was not put to the zombie sounds list, please use add_sound( ref, alias ) at the start of your level." ); -#/ - */ - return; - } - playsoundatposition( level.zombie_sounds[ ref ], pos ); -} - -play_sound_on_ent( ref ) //checked matches cerberus output -{ - if ( isDefined( self.script_soundalias ) ) - { - self playsound( self.script_soundalias ); - return; - } - if ( isDefined( self.script_sound ) ) - { - ref = self.script_sound; - } - if ( ref == "none" ) - { - return; - } - if ( !isDefined( level.zombie_sounds[ ref ] ) ) - { - /* -/# - assertmsg( "Sound "" + ref + "" was not put to the zombie sounds list, please use add_sound( ref, alias ) at the start of your level." ); -#/ - */ - return; - } - self playsound( level.zombie_sounds[ ref ] ); -} - -play_loopsound_on_ent( ref ) //checked matches cerberus output -{ - if ( isDefined( self.script_firefxsound ) ) - { - ref = self.script_firefxsound; - } - if ( ref == "none" ) - { - return; - } - if ( !isDefined( level.zombie_sounds[ ref ] ) ) - { - /* -/# - assertmsg( "Sound "" + ref + "" was not put to the zombie sounds list, please use add_sound( ref, alias ) at the start of your level." ); -#/ - */ - return; - } - self playsound( level.zombie_sounds[ ref ] ); -} - -string_to_float( string ) //checked changed to match cerberus output -{ - floatparts = strtok( string, "." ); - if ( floatparts.size == 1 ) - { - return int( floatparts[ 0 ] ); - } - whole = int( floatparts[ 0 ] ); - decimal = 0; - for ( i = floatparts[1].size - 1; i >= 0; i-- ) - { - decimal = ( decimal / 10 ) + ( int( floatparts[ 1 ][ i ] ) / 10 ); - } - if ( whole >= 0 ) - { - return whole + decimal; - } - else - { - return whole - decimal; - } -} - -onplayerconnect_callback( func ) //checked matches cerberus output -{ - addcallback( "on_player_connect", func ); -} - -onplayerdisconnect_callback( func ) //checked matches cerberus output -{ - addcallback( "on_player_disconnect", func ); -} - -set_zombie_var( var, value, is_float, column, is_team_based ) //checked changed to match cerberus output -{ - if ( !isDefined( is_float ) ) - { - is_float = 0; - } - if ( !isDefined( column ) ) - { - column = 1; - } - table = "mp/zombiemode.csv"; - table_value = tablelookup( table, 0, var, column ); - if ( isDefined( table_value ) && table_value != "" ) - { - if ( is_float ) - { - value = float( table_value ); - } - else - { - value = int( table_value ); - } - } - if ( is_true( is_team_based ) ) - { - foreach ( team in level.teams ) - { - level.zombie_vars[ team ][ var ] = value; - } - } - else - { - level.zombie_vars[ var ] = value; - } - return value; -} - -get_table_var( table, var_name, value, is_float, column ) //checked matches cerberus output -{ - if ( !isDefined( table ) ) - { - table = "mp/zombiemode.csv"; - } - if ( !isDefined( is_float ) ) - { - is_float = 0; - } - if ( !isDefined( column ) ) - { - column = 1; - } - table_value = tablelookup( table, 0, var_name, column ); - if ( isDefined( table_value ) && table_value != "" ) - { - if ( is_float ) - { - value = string_to_float( table_value ); - } - else - { - value = int( table_value ); - } - } - return value; -} - -hudelem_count() //checked matches cerberus output -{ - /* -/# - max = 0; - curr_total = 0; - while ( 1 ) - { - if ( level.hudelem_count > max ) - { - max = level.hudelem_count; - } - println( "HudElems: " + level.hudelem_count + "[Peak: " + max + "]" ); - wait 0.05; -#/ - } - */ -} - -debug_round_advancer() //checked changed to match cerberus output -{ - /* -/# - while ( 1 ) - { - zombs = get_round_enemy_array(); - i = 0; - while ( i < zombs.size ) - { - zombs[ i ] dodamage( zombs[ i ].health + 666, ( 0, 0, 0 ) ); - wait 0.5; - i++; - } -#/ - } - */ -} - -print_run_speed( speed ) //checked changed to match cerberus output -{ - /* -/# - self endon( "death" ); - while ( 1 ) - { - print3d( self.origin + vectorScale( ( 0, 0, 1 ), 64 ), speed, ( 1, 1, 1 ) ); - wait 0.05; -#/ - } - */ -} - -draw_line_ent_to_ent( ent1, ent2 ) //checked matches cerberus output -{ - /* -/# - if ( getDvarInt( "zombie_debug" ) != 1 ) - { - return; - } - ent1 endon( "death" ); - ent2 endon( "death" ); - while ( 1 ) - { - line( ent1.origin, ent2.origin ); - wait 0.05; -#/ - } - */ -} - -draw_line_ent_to_pos( ent, pos, end_on ) //checked changed to match cerberus output -{ - /* -/# - if ( getDvarInt( "zombie_debug" ) != 1 ) - { - return; - } - ent endon( "death" ); - ent notify( "stop_draw_line_ent_to_pos" ); - ent endon( "stop_draw_line_ent_to_pos" ); - if ( isDefined( end_on ) ) - { - ent endon( end_on ); - } - while ( 1 ) - { - line( ent.origin, pos ); - wait 0.05; -#/ - } - */ -} - -debug_print( msg ) //checked matches cerberus output -{ - /* -/# - if ( getDvarInt( "zombie_debug" ) > 0 ) - { - println( "######### ZOMBIE: " + msg ); -#/ - } - */ -} - -debug_blocker( pos, rad, height ) //checked matches cerberus output -{ - /* -/# - self notify( "stop_debug_blocker" ); - self endon( "stop_debug_blocker" ); - for ( ;; ) - { - if ( getDvarInt( "zombie_debug" ) != 1 ) - { - return; - } - wait 0.05; - drawcylinder( pos, rad, height ); -#/ - } - */ -} - -drawcylinder( pos, rad, height ) //checked changed to match cerberus output -{ - /* -/# - currad = rad; - curheight = height; - for ( r = 0; r < 20; r++ ) - { - theta = ( r / 20 ) * 360; - theta2 = ( ( r + 1 ) / 20 ) * 360; - line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, 0 ) ); - line( pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, curheight ) ); - line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ) ); -#/ - } - */ -} - -print3d_at_pos( msg, pos, thread_endon, offset ) //checked changed to match cerberus output -{ - /* -/# - self endon( "death" ); - if ( isDefined( thread_endon ) ) - { - self notify( thread_endon ); - self endon( thread_endon ); - } - if ( !isDefined( offset ) ) - { - offset = ( 0, 0, 0 ); - } - while ( 1 ) - { - print3d( self.origin + offset, msg ); - wait 0.05; -#/ - } - */ -} - -debug_breadcrumbs() //checked changed to match cerberus output -{ - /* -/# - self endon( "disconnect" ); - self notify( "stop_debug_breadcrumbs" ); - self endon( "stop_debug_breadcrumbs" ); - while ( 1 ) - { - while ( getDvarInt( "zombie_debug" ) != 1 ) - { - wait 1; - } - for ( i = 0; i < self.zombie_breadcrumbs.size; i++ ) - { - drawcylinder( self.zombie_breadcrumbs[ i ], 5, 5 ); - } - wait 0.05; -#/ - } - */ -} - -debug_attack_spots_taken() //checked partially changed to match cerberus output //did not change while loop to for loop because continues in for loops go infinite -{ - /* -/# - self notify( "stop_debug_breadcrumbs" ); - self endon( "stop_debug_breadcrumbs" ); - while ( 1 ) - { - if ( getDvarInt( "zombie_debug" ) != 2 ) - { - wait 1; - continue; - } - wait 0.05; - count = 0; - i = 0; - while ( i < self.attack_spots_taken.size ) - { - if ( self.attack_spots_taken[ i ] ) - { - count++; - circle( self.attack_spots[ i ], 12, ( 1, 0, 0 ), 0, 1, 1 ); - i++; - continue; - } - circle( self.attack_spots[ i ], 12, ( 0, 1, 0 ), 0, 1, 1 ); - i++; - } - msg = "" + count + " / " + self.attack_spots_taken.size; - print3d( self.origin, msg ); -#/ - } - */ -} - -float_print3d( msg, time ) //checked changed to match cerberus output -{ - /* -/# - self endon( "death" ); - time = getTime() + ( time * 1000 ); - offset = vectorScale( ( 0, 0, 1 ), 72 ); - while ( getTime() < time ) - { - offset += vectorScale( ( 0, 0, 1 ), 2 ); - print3d( self.origin + offset, msg, ( 1, 1, 1 ) ); - wait 0.05; -#/ - } - */ -} - -do_player_vo( snd, variation_count ) //checked matches cerberus output -{ - index = maps/mp/zombies/_zm_weapons::get_player_index( self ); - sound = "zmb_vox_plr_" + index + "_" + snd; - if ( isDefined( variation_count ) ) - { - sound = sound + "_" + randomintrange( 0, variation_count ); - } - if ( !isDefined( level.player_is_speaking ) ) - { - level.player_is_speaking = 0; - } - if ( level.player_is_speaking == 0 ) - { - level.player_is_speaking = 1; - self playsoundwithnotify( sound, "sound_done" ); - self waittill( "sound_done" ); - wait 2; - level.player_is_speaking = 0; - } -} - -stop_magic_bullet_shield() //checked matches cerberus output -{ - self.attackeraccuracy = 1; - self notify( "stop_magic_bullet_shield" ); - self.magic_bullet_shield = undefined; - self._mbs = undefined; -} - -magic_bullet_shield() //checked matches cerberus output -{ - if ( !is_true( self.magic_bullet_shield ) ) - { - if ( isai( self ) || isplayer( self ) ) - { - self.magic_bullet_shield = 1; - /* -/# - level thread debug_magic_bullet_shield_death( self ); -#/ - */ - if ( !isDefined( self._mbs ) ) - { - self._mbs = spawnstruct(); - } - if ( isai( self ) ) - { - /* -/# - assert( isalive( self ), "Tried to do magic_bullet_shield on a dead or undefined guy." ); -#/ - */ - self._mbs.last_pain_time = 0; - self._mbs.ignore_time = 2; - self._mbs.turret_ignore_time = 5; - } - self.attackeraccuracy = 0.1; - return; - } - else - { - /* -/# - assertmsg( "magic_bullet_shield does not support entity of classname '" + self.classname + "'." ); -#/ - */ - } - } -} - -debug_magic_bullet_shield_death( guy ) //checked matches cerberus output -{ - targetname = "none"; - if ( isDefined( guy.targetname ) ) - { - targetname = guy.targetname; - } - guy endon( "stop_magic_bullet_shield" ); - guy waittill( "death" ); - /* -/# - assert( !isDefined( guy ), "Guy died with magic bullet shield on with targetname: " + targetname ); -#/ - */ -} - -is_magic_bullet_shield_enabled( ent ) //checked changed at own discretion -{ - if ( !isDefined( ent ) ) - { - return 0; - } - if ( isDefined( ent.magic_bullet_shield ) && ent.magic_bullet_shield == 1 ) - { - return 1; - } - return 0; -} - -really_play_2d_sound( sound ) //checked changed to match cerberus output -{ - temp_ent = spawn( "script_origin", ( 0, 0, 0 ) ); - temp_ent playsoundwithnotify( sound, sound + "wait" ); - temp_ent waittill( sound + "wait" ); - wait 0.05; - temp_ent delete(); -} - -play_sound_2d( sound ) //checked matches cerberus output -{ - level thread really_play_2d_sound( sound ); -} - -include_weapon( weapon_name, in_box, collector, weighting_func ) //checked matches cerberus output -{ - /* -/# - println( "ZM >> include_weapon = " + weapon_name ); -#/ - */ - if ( !isDefined( in_box ) ) - { - in_box = 1; - } - if ( !isDefined( collector ) ) - { - collector = 0; - } - maps/mp/zombies/_zm_weapons::include_zombie_weapon( weapon_name, in_box, collector, weighting_func ); -} - -include_buildable( buildable_struct ) //checked matches cerberus output -{ - /* -/# - println( "ZM >> include_buildable = " + buildable_struct.name ); -#/ - */ - maps/mp/zombies/_zm_buildables::include_zombie_buildable( buildable_struct ); -} - -is_buildable_included( name ) //checked matches cerberus output -{ - if ( isDefined( level.zombie_include_buildables[ name ] ) ) - { - return 1; - } - return 0; -} - -create_zombie_buildable_piece( modelname, radius, height, hud_icon ) //checked matches cerberus output -{ - /* -/# - println( "ZM >> create_zombie_buildable_piece = " + modelname ); -#/ - */ - self maps/mp/zombies/_zm_buildables::create_zombie_buildable_piece( modelname, radius, height, hud_icon ); -} - -is_buildable() //checked matches cerberus output -{ - return self maps/mp/zombies/_zm_buildables::is_buildable(); -} - -wait_for_buildable( buildable_name ) //checked matches cerberus output -{ - level waittill( buildable_name + "_built", player ); - return player; -} - -include_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, start_power, target ) //checked matches cerberus output -{ - return maps/mp/zombies/_zm_power::add_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, start_power, target ); -} - -include_powerup( powerup_name ) //checked matches cerberus output -{ - maps/mp/zombies/_zm_powerups::include_zombie_powerup( powerup_name ); -} - -include_equipment( equipment_name ) //checked matches cerberus output -{ - maps/mp/zombies/_zm_equipment::include_zombie_equipment( equipment_name ); -} - -limit_equipment( equipment_name, limited ) //checked matches cerberus output -{ - maps/mp/zombies/_zm_equipment::limit_zombie_equipment( equipment_name, limited ); -} - -trigger_invisible( enable ) //checked changed to match cerberus output -{ - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - if ( isDefined( players[ i ] ) ) - { - self setinvisibletoplayer( players[ i ], enable ); - } - } -} - -print3d_ent( text, color, scale, offset, end_msg, overwrite ) //checked changed to match cerberus output -{ - self endon( "death" ); - if ( is_true( overwrite ) && isDefined( self._debug_print3d_msg ) ) - { - self notify( "end_print3d" ); - wait 0.05; - } - self endon( "end_print3d" ); - if ( !isDefined( color ) ) - { - color = ( 1, 1, 1 ); - } - if ( !isDefined( scale ) ) - { - scale = 1; - } - if ( !isDefined( offset ) ) - { - offset = ( 0, 0, 0 ); - } - if ( isDefined( end_msg ) ) - { - self endon( end_msg ); - } - self._debug_print3d_msg = text; - /* -/# - while ( 1 ) - { - print3d( self.origin + offset, self._debug_print3d_msg, color, scale ); - wait 0,05; -#/ - } - */ -} - -isexplosivedamage( meansofdeath ) //checked matches cerberus output -{ - explosivedamage = "MOD_GRENADE MOD_GRENADE_SPLASH MOD_PROJECTILE_SPLASH MOD_EXPLOSIVE"; - if ( issubstr( explosivedamage, meansofdeath ) ) - { - return 1; - } - return 0; -} - -isprimarydamage( meansofdeath ) //checked matches cerberus output -{ - if ( meansofdeath == "MOD_RIFLE_BULLET" || meansofdeath == "MOD_PISTOL_BULLET" ) - { - return 1; - } - return 0; -} - -isfiredamage( weapon, meansofdeath ) //checked changed to match cerberus output -{ - if ( ( issubstr( weapon, "flame" ) || issubstr( weapon, "molotov_" ) ) && ( meansofdeath == "MOD_BURNED" || meansofdeath == "MOD_GRENADE" ) ) - { - return 1; - } - else if ( ( issubstr( weapon, "flame" ) || issubstr( weapon, "molotov_" ) ) && meansofdeath == "MOD_GRENADE_SPLASH" ) - { - return 1; - } - else if ( ( meansofdeath == "MOD_BURNED" || meansofdeath == "MOD_GRENADE" ) && issubstr( weapon, "napalmblob_" ) ) - { - return 1; - } - else if ( issubstr( weapon, "napalmblob_" ) && meansofdeath == "MOD_GRENADE_SPLASH" ) - { - return 1; - } - return 0; -} - -isplayerexplosiveweapon( weapon, meansofdeath ) //checked matches cerberus output -{ - if ( !isexplosivedamage( meansofdeath ) ) - { - return 0; - } - if ( weapon == "artillery_mp" ) - { - return 0; - } - if ( issubstr( weapon, "turret" ) ) - { - return 0; - } - return 1; -} - -create_counter_hud( x ) //checked changed to match cerberus output -{ - if ( !isDefined( x ) ) - { - x = 0; - } - hud = create_simple_hud(); - hud.alignx = "left"; - hud.aligny = "top"; - hud.horzalign = "user_left"; - hud.vertalign = "user_top"; - hud.color = ( 1, 1, 1 ); - hud.fontscale = 32; - hud.x = x; - hud.alpha = 0; - hud setshader( "hud_chalk_1", 64, 64 ); - return hud; -} - -get_current_zone( return_zone ) //checked changed to match cerberus output -{ - flag_wait( "zones_initialized" ); - for ( z = 0; z < level.zone_keys.size; z++ ) - { - zone_name = level.zone_keys[ z ]; - zone = level.zones[ zone_name ]; - for ( i = 0; i < zone.volumes.size; i++ ) - { - if ( self istouching( zone.volumes[ i ] ) ) - { - if ( is_true( return_zone ) ) - { - return zone; - } - return zone_name; - } - } - } - return undefined; -} - -remove_mod_from_methodofdeath( mod ) //checked matches cerberus output -{ - return mod; -} - -clear_fog_threads() //checked changed to match cerberus output -{ - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - players[ i ] notify( "stop_fog" ); - } -} - -display_message( titletext, notifytext, duration ) //checked changed to match cerberus output -{ - notifydata = spawnstruct(); - notifydata.titletext = notifytext; - notifydata.notifytext = titletext; - notifydata.sound = "mus_level_up"; - notifydata.duration = duration; - notifydata.glowcolor = ( 1, 0, 0 ); - notifydata.color = ( 0, 0, 0 ); - notifydata.iconname = "hud_zombies_meat"; - self thread maps/mp/gametypes_zm/_hud_message::notifymessage( notifydata ); -} - -is_quad() //checked matches cerberus output -{ - return self.animname == "quad_zombie"; -} - -is_leaper() //checked matches cerberus output -{ - return self.animname == "leaper_zombie"; -} - -shock_onpain() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self notify( "stop_shock_onpain" ); - self endon( "stop_shock_onpain" ); - if ( getDvar( "blurpain" ) == "" ) - { - setdvar( "blurpain", "on" ); - } - while ( 1 ) - { - oldhealth = self.health; - self waittill( "damage", damage, attacker, direction_vec, point, mod ); - if( IsDefined( level.shock_onpain ) && !level.shock_onpain ) - { - continue; - } - if( IsDefined( self.shock_onpain ) && !self.shock_onpain ) - { - continue; - } - if ( self.health < 1 ) - { - continue; - } - if ( mod == "MOD_PROJECTILE" || mod == "MOD_PROJECTILE_SPLASH" ) - { - continue; - } - else if ( mod == "MOD_GRENADE_SPLASH" || mod == "MOD_GRENADE" || mod == "MOD_EXPLOSIVE" ) - { - shocktype = undefined; - shocklight = undefined; - if ( is_true( self.is_burning ) ) - { - shocktype = "lava"; - shocklight = "lava_small"; - } - self shock_onexplosion( damage, shocktype, shocklight ); - } - else if ( getDvar( "blurpain" ) == "on" ) - { - self shellshock( "pain", 0.5 ); - } - } -} - -shock_onexplosion( damage, shocktype, shocklight ) //checked changed to match cerberus output -{ - time = 0; - scaled_damage = ( 100 * damage ) / self.maxhealth; - if ( scaled_damage >= 90 ) - { - time = 4; - } - else if ( scaled_damage >= 50 ) - { - time = 3; - } - else if ( scaled_damage >= 25 ) - { - time = 2; - } - else if ( scaled_damage > 10 ) - { - time = 1; - } - if ( time ) - { - if ( !isDefined( shocktype ) ) - { - shocktype = "explosion"; - } - self shellshock( shocktype, time ); - } - else if ( isDefined( shocklight ) ) - { - self shellshock( shocklight, time ); - } -} - -increment_is_drinking() //checked matches cerberus output -{ - /* -/# - if ( isDefined( level.devgui_dpad_watch ) && level.devgui_dpad_watch ) - { - self.is_drinking++; - return; -#/ - } - */ - if ( !isDefined( self.is_drinking ) ) - { - self.is_drinking = 0; - } - if ( self.is_drinking == 0 ) - { - self disableoffhandweapons(); - self disableweaponcycling(); - } - self.is_drinking++; -} - -is_multiple_drinking() //checked matches cerberus output -{ - return self.is_drinking > 1; -} - -decrement_is_drinking() //checked matches cerberus output -{ - if ( self.is_drinking > 0 ) - { - self.is_drinking--; - - } - else - { - /* -/# - assertmsg( "making is_drinking less than 0" ); -#/ - */ - } - if ( self.is_drinking == 0 ) - { - self enableoffhandweapons(); - self enableweaponcycling(); - } -} - -clear_is_drinking() //checked matches cerberus output -{ - self.is_drinking = 0; - self enableoffhandweapons(); - self enableweaponcycling(); -} - -getweaponclasszm( weapon ) //checked matches cerberus output -{ - /* -/# - assert( isDefined( weapon ) ); -#/ - */ - if ( !isDefined( weapon ) ) - { - return undefined; - } - if ( !isDefined( level.weaponclassarray ) ) - { - level.weaponclassarray = []; - } - if ( isDefined( level.weaponclassarray[ weapon ] ) ) - { - return level.weaponclassarray[ weapon ]; - } - baseweaponindex = getbaseweaponitemindex( weapon ) + 1; - weaponclass = tablelookupcolumnforrow( "zm/zm_statstable.csv", baseweaponindex, 2 ); - level.weaponclassarray[ weapon ] = weaponclass; - return weaponclass; -} - -spawn_weapon_model( weapon, model, origin, angles, options ) //checked matches cerberus output -{ - if ( !isDefined( model ) ) - { - model = getweaponmodel( weapon ); - } - weapon_model = spawn( "script_model", origin ); - if ( isDefined( angles ) ) - { - weapon_model.angles = angles; - } - if ( isDefined( options ) ) - { - weapon_model useweaponmodel( weapon, model, options ); - } - else - { - weapon_model useweaponmodel( weapon, model ); - } - return weapon_model; -} - -is_limited_weapon( weapname ) //checked matches cerberus output -{ - if ( isDefined( level.limited_weapons ) ) - { - if ( isDefined( level.limited_weapons[ weapname ] ) ) - { - return 1; - } - } - return 0; -} - -is_alt_weapon( weapname ) //checked matches cerberus output -{ - if ( getsubstr( weapname, 0, 3 ) == "gl_" ) - { - return 1; - } - if ( getsubstr( weapname, 0, 3 ) == "sf_" ) - { - return 1; - } - if ( getsubstr( weapname, 0, 10 ) == "dualoptic_" ) - { - return 1; - } - return 0; -} - -is_grenade_launcher( weapname ) //checked changed to match cerberus output -{ - return weapname == "m32_zm" || weapname == "m32_upgraded_zm"; -} - -register_lethal_grenade_for_level( weaponname ) //checked changed at own discretion -{ - if ( !is_lethal_grenade( weaponname ) ) - { - return; - } - if ( !isDefined( level.zombie_lethal_grenade_list ) ) - { - level.zombie_lethal_grenade_list = []; - } - level.zombie_lethal_grenade_list[ weaponname ] = weaponname; -} - -is_lethal_grenade( weaponname ) //checked matches cerberus output //changed at own discretion -{ - if ( !isDefined( weaponname ) || !isDefined( level.zombie_lethal_grenade_list ) ) - { - return 0; - } - if ( isDefined( level.zombie_lethal_grenade_list[ weaponname ] ) ) - { - return 1; - } - return 0; -} - -is_player_lethal_grenade( weaponname ) //checked matches cerberus output //changed at own discretion -{ - if ( !isDefined( weaponname ) || !isDefined( self.current_lethal_grenade ) ) - { - return 0; - } - if ( self.current_lethal_grenade == weaponname ) - { - return 1; - } - return 0; -} - -get_player_lethal_grenade() //checked matches cerberus output -{ - grenade = ""; - if ( isDefined( self.current_lethal_grenade ) ) - { - grenade = self.current_lethal_grenade; - } - return grenade; -} - -set_player_lethal_grenade( weaponname ) //checked matches cerberus output -{ - self.current_lethal_grenade = weaponname; -} - -init_player_lethal_grenade() //checked matches cerberus output -{ - self set_player_lethal_grenade( level.zombie_lethal_grenade_player_init ); -} - -register_tactical_grenade_for_level( weaponname ) //checked changed at own discretion -{ - if ( !is_tactical_grenade( weaponname ) ) - { - return; - } - if ( !isDefined( level.zombie_tactical_grenade_list ) ) - { - level.zombie_tactical_grenade_list = []; - } - level.zombie_tactical_grenade_list[ weaponname ] = weaponname; -} - -is_tactical_grenade( weaponname ) //checked matches cerberus output //checked changed at own discretion -{ - if ( !isDefined( weaponname ) || !isDefined( level.zombie_tactical_grenade_list ) ) - { - return 0; - } - if ( isDefined( level.zombie_tactical_grenade_list[ weaponname ] ) ) - { - return 1; - } - return 0; -} - -is_player_tactical_grenade( weaponname ) //checked matches cerberus output //checked changed at own discretion -{ - if ( !isDefined( weaponname ) || !isDefined( self.current_tactical_grenade ) ) - { - return 0; - } - if ( self.current_tactical_grenade == weaponname ) - { - return 1; - } - return 0; -} - -get_player_tactical_grenade() //checked matches cerberus output -{ - tactical = ""; - if ( isDefined( self.current_tactical_grenade ) ) - { - tactical = self.current_tactical_grenade; - } - return tactical; -} - -set_player_tactical_grenade( weaponname ) //checked changed to match cerberus output -{ - self notify( "new_tactical_grenade", weaponname ); - self.current_tactical_grenade = weaponname; -} - -init_player_tactical_grenade() //checked matches cerberus output -{ - self set_player_tactical_grenade( level.zombie_tactical_grenade_player_init ); -} - -register_placeable_mine_for_level( weaponname ) //checked changed at own discretion -{ - if ( !is_placeable_mine( weaponname ) ) - { - return; - } - if ( !isDefined( level.zombie_placeable_mine_list ) ) - { - level.zombie_placeable_mine_list = []; - } - level.zombie_placeable_mine_list[ weaponname ] = weaponname; -} - -is_placeable_mine( weaponname ) //checked matches cerberus output //changed at own discretion -{ - if ( !isDefined( weaponname ) || !isDefined( level.zombie_placeable_mine_list ) ) - { - return 0; - } - if ( isDefined( level.zombie_placeable_mine_list[ weaponname ] ) ) - { - return 1; - } - return 0; -} - -is_player_placeable_mine( weaponname ) //checked matches cerberus output //changed at own discretion -{ - if ( !isDefined( weaponname ) || !isDefined( self.current_placeable_mine ) ) - { - return 0; - } - if ( self.current_placeable_mine == weaponname ) - { - return 1; - } - return 0; -} - -get_player_placeable_mine() //checked matches cerberus output -{ - return self.current_placeable_mine; -} - -set_player_placeable_mine( weaponname ) //checked matches cerberus output -{ - self.current_placeable_mine = weaponname; -} - -init_player_placeable_mine() //checked matches cerberus output -{ - self set_player_placeable_mine( level.zombie_placeable_mine_player_init ); -} - -register_melee_weapon_for_level( weaponname ) //checked matches cerberus output -{ - if ( !is_melee_weapon( weaponname ) ) - { - return; - } - if ( !isDefined( level.zombie_melee_weapon_list ) ) - { - level.zombie_melee_weapon_list = []; - } - level.zombie_melee_weapon_list[ weaponname ] = weaponname; -} - -is_melee_weapon( weaponname ) //checked matches cerberus output //changed at own discretion -{ - if ( !isDefined( weaponname ) || !isDefined( level.zombie_melee_weapon_list ) ) - { - return 0; - } - if ( isDefined( level.zombie_melee_weapon_list[ weaponname ] ) ) - { - return 1; - } - return 0; -} - -is_player_melee_weapon( weaponname ) //checked matches cerberus output //changed at own discretion -{ - if ( !isDefined( weaponname ) || !isDefined( self.current_melee_weapon ) ) - { - return 0; - } - if ( self.current_melee_weapon == weaponname ) - { - return 1; - } - return 0; -} - -get_player_melee_weapon() //checked matches cerberus output -{ - return self.current_melee_weapon; -} - -set_player_melee_weapon( weaponname ) //checked matches cerberus output -{ - self.current_melee_weapon = weaponname; -} - -init_player_melee_weapon() //checked matches cerberus output -{ - self set_player_melee_weapon( level.zombie_melee_weapon_player_init ); -} - -should_watch_for_emp() //checked matches cerberus output -{ - return isDefined( level.zombie_weapons[ "emp_grenade_zm" ] ); -} - -register_equipment_for_level( weaponname ) //checked matches cerberus output -{ - if ( is_equipment( weaponname ) ) - { - return; - } - if ( !isDefined( level.zombie_equipment_list ) ) - { - level.zombie_equipment_list = []; - } - level.zombie_equipment_list[ weaponname ] = weaponname; -} - -is_equipment( weaponname ) //checked matches cerberus output //changed at own discretion -{ - if ( !isDefined( weaponname ) || !isDefined( level.zombie_equipment_list ) ) - { - return 0; - } - if ( isDefined( level.zombie_equipment_list[ weaponname ] ) ) - { - return 1; - } - return 0; -} - -is_equipment_that_blocks_purchase( weaponname ) //checked matches cerberus output //changed at own discretion -{ - if ( is_equipment( weaponname ) ) - { - return 1; - } - return 0; -} - -is_player_equipment( weaponname ) //checked matches cerberus output //changed at own discretion -{ - if ( !isDefined( weaponname ) || !isDefined( self.current_equipment ) ) - { - return 0; - } - if ( self.current_equipment == weaponname ) - { - return 1; - } - return 0; -} - -has_deployed_equipment( weaponname ) //checked changed to match cerberus output -{ - if ( !isDefined( weaponname ) || !isDefined( self.deployed_equipment ) || self.deployed_equipment.size < 1 ) - { - return 0; - } - for ( i = 0; i < self.deployed_equipment.size; i++ ) - { - if ( self.deployed_equipment[ i ] == weaponname ) - { - return 1; - } - } - return 0; -} - -has_player_equipment( weaponname ) //checked changed at own discretion -{ - if ( self is_player_equipment( weaponname ) || self has_deployed_equipment( weaponname ) ) - { - return 1; - } - return 0; -} - -get_player_equipment() //checked matches cerberus output -{ - return self.current_equipment; -} - -hacker_active() //checked matches cerberus output //changed at own discretion -{ - if ( self maps/mp/zombies/_zm_equipment::is_equipment_active( "equip_hacker_zm" ) ) - { - return 1; - } - return 0; -} - -set_player_equipment( weaponname ) //checked matches cerberus output -{ - if ( !isDefined( self.current_equipment_active ) ) - { - self.current_equipment_active = []; - } - if ( isDefined( weaponname ) ) - { - self.current_equipment_active[ weaponname ] = 0; - } - if ( !isDefined( self.equipment_got_in_round ) ) - { - self.equipment_got_in_round = []; - } - if ( isDefined( weaponname ) ) - { - self.equipment_got_in_round[ weaponname ] = level.round_number; - } - self.current_equipment = weaponname; -} - -init_player_equipment() //checked matches cerberus output -{ - self set_player_equipment( level.zombie_equipment_player_init ); -} - -register_offhand_weapons_for_level_defaults() //checked matches cerberus output -{ - if ( isDefined( level.register_offhand_weapons_for_level_defaults_override ) ) - { - [[ level.register_offhand_weapons_for_level_defaults_override ]](); - return; - } - register_lethal_grenade_for_level( "frag_grenade_zm" ); - level.zombie_lethal_grenade_player_init = "frag_grenade_zm"; - register_tactical_grenade_for_level( "cymbal_monkey_zm" ); - level.zombie_tactical_grenade_player_init = undefined; - register_placeable_mine_for_level( "claymore_zm" ); - level.zombie_placeable_mine_player_init = undefined; - register_melee_weapon_for_level( "knife_zm" ); - register_melee_weapon_for_level( "bowie_knife_zm" ); - level.zombie_melee_weapon_player_init = "knife_zm"; - level.zombie_equipment_player_init = undefined; -} - -init_player_offhand_weapons() //checked matches cerberus output -{ - init_player_lethal_grenade(); - init_player_tactical_grenade(); - init_player_placeable_mine(); - init_player_melee_weapon(); - init_player_equipment(); -} - -is_offhand_weapon( weaponname ) //checked changed at own discretion -{ - if ( is_lethal_grenade( weaponname ) || is_tactical_grenade( weaponname ) || is_placeable_mine( weaponname ) || is_melee_weapon( weaponname ) || is_equipment( weaponname ) ) - { - return 1; - } - return 0; -} - -is_player_offhand_weapon( weaponname ) //checked changed at own discretion -{ - if ( self is_player_lethal_grenade( weaponname ) || self is_player_tactical_grenade( weaponname ) || self is_player_placeable_mine( weaponname ) || self is_player_melee_weapon( weaponname ) || self is_player_equipment( weaponname ) ) - { - return 1; - } - return 0; -} - -has_powerup_weapon() //checked changed at own discretion -{ - if ( is_true( self.has_powerup_weapon ) ) - { - return 1; - } - return 0; -} - -give_start_weapon( switch_to_weapon ) //checked matches cerberus output -{ - self giveweapon( level.start_weapon ); - self givestartammo( level.start_weapon ); - if ( is_true( switch_to_weapon ) ) - { - self switchtoweapon( level.start_weapon ); - } -} - -array_flag_wait_any( flag_array ) //checked changed to match cerberus output -{ - if ( !isDefined( level._array_flag_wait_any_calls ) ) - { - level._n_array_flag_wait_any_calls = 0; - } - else - { - level._n_array_flag_wait_any_calls++; - } - str_condition = "array_flag_wait_call_" + level._n_array_flag_wait_any_calls; - for ( index = 0; index < flag_array.size; index++ ) - { - level thread array_flag_wait_any_thread( flag_array[ index ], str_condition ); - } - level waittill( str_condition ); -} - -array_flag_wait_any_thread( flag_name, condition ) //checked matches cerberus output -{ - level endon( condition ); - flag_wait( flag_name ); - level notify( condition ); -} - -array_removedead( array ) //checked partially changed to match cerberus output //did not change while loop to for loop because continues in for loops go infinite -{ - newarray = []; - if ( !isDefined( array ) ) - { - return undefined; - } - i = 0; - while ( i < array.size ) - { - if ( !isalive( array[ i ] ) || is_true( array[ i ].isacorpse ) ) - { - i++; - continue; - } - newarray[ newarray.size ] = array[ i ]; - i++; - } - return newarray; -} - -groundpos( origin ) //checked matches cerberus output -{ - return bullettrace( origin, origin + vectorScale( ( 0, 0, -1 ), 100000 ), 0, self )[ "position" ]; -} - -groundpos_ignore_water( origin ) //checked matches cerberus output -{ - return bullettrace( origin, origin + vectorScale( ( 0, 0, -1 ), 100000 ), 0, self, 1 )[ "position" ]; -} - -groundpos_ignore_water_new( origin ) //checked matches cerberus output -{ - return groundtrace( origin, origin + vectorScale( ( 0, 0, -1 ), 100000 ), 0, self, 1 )[ "position" ]; -} - -waittill_notify_or_timeout( msg, timer ) //checked matches cerberus output -{ - self endon( msg ); - wait timer; - return timer; -} - -self_delete() //checked matches cerberus output -{ - if ( isDefined( self ) ) - { - self delete(); - } -} - -script_delay() //checked changed to match cerberus output -{ - if ( isDefined( self.script_delay ) ) - { - wait self.script_delay; - return 1; - } - else if ( isDefined( self.script_delay_min ) && isDefined( self.script_delay_max ) ) - { - wait randomfloatrange( self.script_delay_min, self.script_delay_max ); - return 1; - } - return 0; -} - -button_held_think( which_button ) //checked changed to match cerberus output -{ - self endon( "disconnect" ); - if ( !isDefined( self._holding_button ) ) - { - self._holding_button = []; - } - self._holding_button[ which_button ] = 0; - time_started = 0; - use_time = 250; - while ( 1 ) - { - if ( self._holding_button[ which_button ] ) - { - if ( !( self [[ level._button_funcs[ which_button ] ]]() ) ) - { - self._holding_button[ which_button ] = 0; - } - } - else if ( self [[ level._button_funcs[ which_button ] ]]() ) - { - if ( time_started == 0 ) - { - time_started = getTime(); - } - if ( ( getTime() - time_started ) > use_time ) - { - self._holding_button[ which_button ] = 1; - } - } - else if ( time_started != 0 ) - { - time_started = 0; - } - wait 0.05; - } -} - -use_button_held() //checked matches cerberus output -{ - init_button_wrappers(); - if ( !isDefined( self._use_button_think_threaded ) ) - { - self thread button_held_think( level.button_use ); - self._use_button_think_threaded = 1; - } - return self._holding_button[ level.button_use ]; -} - -ads_button_held() //checked matches cerberus output -{ - init_button_wrappers(); - if ( !isDefined( self._ads_button_think_threaded ) ) - { - self thread button_held_think( level.button_ads ); - self._ads_button_think_threaded = 1; - } - return self._holding_button[ level.button_ads ]; -} - -attack_button_held() //checked matches cerberus output -{ - init_button_wrappers(); - if ( !isDefined( self._attack_button_think_threaded ) ) - { - self thread button_held_think( level.button_attack ); - self._attack_button_think_threaded = 1; - } - return self._holding_button[ level.button_attack ]; -} - -use_button_pressed() //checked matches cerberus output -{ - return self usebuttonpressed(); -} - -ads_button_pressed() //checked matches cerberus output -{ - return self adsbuttonpressed(); -} - -attack_button_pressed() //checked matches cerberus output -{ - return self attackbuttonpressed(); -} - -init_button_wrappers() //checked matches cerberus output -{ - if ( !isDefined( level._button_funcs ) ) - { - level.button_use = 0; - level.button_ads = 1; - level.button_attack = 2; - level._button_funcs[ level.button_use ] = ::use_button_pressed; - level._button_funcs[ level.button_ads ] = ::ads_button_pressed; - level._button_funcs[ level.button_attack ] = ::attack_button_pressed; - } -} - -wait_network_frame() //checked partially changed to match cerberus output //did not change while loop to for loop -{ - if ( numremoteclients() ) - { - snapshot_ids = getsnapshotindexarray(); - acked = undefined; - while ( !isDefined( acked ) ) - { - level waittill( "snapacknowledged" ); - acked = snapshotacknowledged( snapshot_ids ); - } - } - else - { - wait 0.1; - } -} - -ignore_triggers( timer ) //checked matches cerberus output -{ - self endon( "death" ); - self.ignoretriggers = 1; - if ( isDefined( timer ) ) - { - wait timer; - } - else - { - wait 0.5; - } - self.ignoretriggers = 0; -} - -giveachievement_wrapper( achievement, all_players ) //checked changed to match cerberus output -{ - if ( achievement == "" ) - { - return; - } - if ( is_true( level.zm_disable_recording_stats ) ) - { - return; - } - achievement_lower = tolower( achievement ); - global_counter = 0; - if ( is_true( all_players ) ) - { - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - players[ i ] giveachievement( achievement ); - has_achievement = players[ i ] maps/mp/zombies/_zm_stats::get_global_stat( achievement_lower ); - if ( !is_true( has_achievement ) ) - { - global_counter++; - } - players[ i ] maps/mp/zombies/_zm_stats::increment_client_stat( achievement_lower, 0 ); - if ( issplitscreen() && i == 0 || !issplitscreen() ) - { - if ( isDefined( level.achievement_sound_func ) ) - { - players[ i ] thread [[ level.achievement_sound_func ]]( achievement_lower ); - } - } - } - } - else if ( !isplayer( self ) ) - { - /* -/# - println( "^1self needs to be a player for _utility::giveachievement_wrapper()" ); -#/ - */ - return; - } - self giveachievement( achievement ); - has_achievement = self maps/mp/zombies/_zm_stats::get_global_stat( achievement_lower ); - if ( !is_true( has_achievement ) ) - { - global_counter++; - } - self maps/mp/zombies/_zm_stats::increment_client_stat( achievement_lower, 0 ); - if ( isDefined( level.achievement_sound_func ) ) - { - self thread [[ level.achievement_sound_func ]]( achievement_lower ); - } - if ( global_counter ) - { - incrementcounter( "global_" + achievement_lower, global_counter ); - } -} - -spawn_failed( spawn ) //checked matches cerberus output -{ - if ( isDefined( spawn ) && isalive( spawn ) ) - { - if ( isalive( spawn ) ) - { - return 0; - } - } - return 1; -} - -getyaw( org ) //checked matches cerberus output -{ - angles = vectorToAngles( org - self.origin ); - return angles[ 1 ]; -} - -getyawtospot( spot ) //checked matches cerberus output -{ - pos = spot; - yaw = self.angles[ 1 ] - getyaw( pos ); - yaw = AbsAngleClamp180( yaw ); - return yaw; -} - -add_spawn_function( function, param1, param2, param3, param4 ) //checked matches cerberus output -{ - /* -/# - if ( isDefined( level._loadstarted ) ) - { - assert( !isalive( self ), "Tried to add_spawn_function to a living guy." ); - } -#/ - */ - func = []; - func[ "function" ] = function; - func[ "param1" ] = param1; - func[ "param2" ] = param2; - func[ "param3" ] = param3; - func[ "param4" ] = param4; - if ( !isDefined( self.spawn_funcs ) ) - { - self.spawn_funcs = []; - } - self.spawn_funcs[ self.spawn_funcs.size ] = func; -} - -disable_react() //checked matches cerberus output -{ - /* -/# - assert( isalive( self ), "Tried to disable react on a non ai" ); -#/ - */ - self.a.disablereact = 1; - self.allowreact = 0; -} - -enable_react() //checked matches cerberus output -{ - /* -/# - assert( isalive( self ), "Tried to enable react on a non ai" ); -#/ - */ - self.a.disablereact = 0; - self.allowreact = 1; -} - -flag_wait_or_timeout( flagname, timer ) //not sure what to do here -{ - start_time = getTime(); - for ( ;; ) - { - if ( level.flag[ flagname ] ) - { - return; - } - else if ( getTime() >= ( start_time + ( timer * 1000 ) ) ) - { - return; - } - else - { - wait_for_flag_or_time_elapses( flagname, timer ); - } - } -} - -wait_for_flag_or_time_elapses( flagname, timer ) //checked matches cerberus output -{ - level endon( flagname ); - wait timer; -} - -isads( player ) //checked matches cerberus output -{ - return player playerads() > 0.5; -} - -bullet_attack( type ) //checked matches cerberus output -{ - if ( type == "MOD_PISTOL_BULLET" ) - { - return 1; - } - return type == "MOD_RIFLE_BULLET"; -} - -pick_up() //checked matches cerberus output -{ - player = self.owner; - self destroy_ent(); - clip_ammo = player getweaponammoclip( self.name ); - clip_max_ammo = weaponclipsize( self.name ); - if ( clip_ammo < clip_max_ammo ) - { - clip_ammo++; - } - player setweaponammoclip( self.name, clip_ammo ); -} - -destroy_ent() //checked matches cerberus output -{ - self delete(); -} - -waittill_not_moving() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "detonated" ); - level endon( "game_ended" ); - if ( self.classname == "grenade" ) - { - self waittill( "stationary" ); - } - prevorigin = self.origin; - while ( 1 ) - { - wait 0.15; - if ( self.origin == prevorigin ) - { - return; - } - prevorigin = self.origin; - } -} - -get_closest_player( org ) //checked matches cerberus output -{ - players = []; - players = get_players(); - return getclosest( org, players ); -} - -ent_flag_wait( msg ) //checked matches cerberus output -{ - self endon( "death" ); - while ( !self.ent_flag[ msg ] ) - { - self waittill( msg ); - } -} - -ent_flag_wait_either( flag1, flag2 ) //no idea what to do here -{ - self endon( "death" ); - for ( ;; ) - { - if ( ent_flag( flag1 ) ) - { - return; - } - if ( ent_flag( flag2 ) ) - { - return; - } - self waittill_either( flag1, flag2 ); - } -} - -ent_wait_for_flag_or_time_elapses( flagname, timer ) //checked matches cerberus output -{ - self endon( flagname ); - wait timer; -} - -ent_flag_wait_or_timeout( flagname, timer ) //no idea what to do here -{ - self endon( "death" ); - start_time = getTime(); - for ( ;; ) - { - if ( self.ent_flag[ flagname ] ) - { - return; - } - else if ( getTime() >= ( start_time + ( timer * 1000 ) ) ) - { - return; - } - else - { - self ent_wait_for_flag_or_time_elapses( flagname, timer ); - } - } -} - -ent_flag_waitopen( msg ) //checked matches cerberus output -{ - self endon( "death" ); - while ( self.ent_flag[ msg ] ) - { - self waittill( msg ); - } -} - -ent_flag_init( message, val ) //checked matches cerberus output -{ - if ( !isDefined( self.ent_flag ) ) - { - self.ent_flag = []; - self.ent_flags_lock = []; - } - if ( !isDefined( level.first_frame ) ) - { - /* -/# - assert( !isDefined( self.ent_flag[ message ] ), "Attempt to reinitialize existing flag '" + message + "' on entity." ); -#/ - */ - } - if ( is_true( val ) ) - { - self.ent_flag[ message ] = 1; - /* -/# - self.ent_flags_lock[ message ] = 1; -#/ - */ - } - else - { - self.ent_flag[ message ] = 0; - /* -/# - self.ent_flags_lock[ message ] = 0; -#/ - */ - } -} - -ent_flag_exist( message ) //checked matches cerberus output -{ - if ( isDefined( self.ent_flag ) && isDefined( self.ent_flag[ message ] ) ) - { - return 1; - } - return 0; -} - -ent_flag_set_delayed( message, delay ) //checked matches cerberus output -{ - wait delay; - self ent_flag_set( message ); -} - -ent_flag_set( message ) //checked matches cerberus output -{ - /* -/# - assert( isDefined( self ), "Attempt to set a flag on entity that is not defined" ); - assert( isDefined( self.ent_flag[ message ] ), "Attempt to set a flag before calling flag_init: '" + message + "'." ); - assert( self.ent_flag[ message ] == self.ent_flags_lock[ message ] ); - self.ent_flags_lock[ message ] = 1; -#/ - */ - self.ent_flag[ message ] = 1; - self notify( message ); -} - -ent_flag_toggle( message ) //checked matches cerberus output -{ - if ( self ent_flag( message ) ) - { - self ent_flag_clear( message ); - } - else - { - self ent_flag_set( message ); - } -} - -ent_flag_clear( message ) //checked matches cerberus output -{ - /* -/# - assert( isDefined( self ), "Attempt to clear a flag on entity that is not defined" ); - assert( isDefined( self.ent_flag[ message ] ), "Attempt to set a flag before calling flag_init: '" + message + "'." ); - assert( self.ent_flag[ message ] == self.ent_flags_lock[ message ] ); - self.ent_flags_lock[ message ] = 0; -#/ - */ - if ( self.ent_flag[ message ] ) - { - self.ent_flag[ message ] = 0; - self notify( message ); - } -} - -ent_flag_clear_delayed( message, delay ) //checked matches cerberus output -{ - wait delay; - self ent_flag_clear( message ); -} - -ent_flag( message ) //checked matches cerberus output -{ - /* -/# - assert( isDefined( message ), "Tried to check flag but the flag was not defined." ); -#/ -/# - assert( isDefined( self.ent_flag[ message ] ), "Tried to check entity flag '" + message + "', but the flag was not initialized." ); -#/ - */ - if ( !self.ent_flag[ message ] ) - { - return 0; - } - return 1; -} - -ent_flag_init_ai_standards() //checked changed to match cerberus output -{ - message_array = []; - message_array[ message_array.size ] = "goal"; - message_array[ message_array.size ] = "damage"; - for ( i = 0; i < message_array.size; i++ ) - { - self ent_flag_init( message_array[ i ] ); - self thread ent_flag_wait_ai_standards( message_array[ i ] ); - } -} - -ent_flag_wait_ai_standards( message ) //checked matches cerberus output -{ - self endon( "death" ); - self waittill( message ); - self.ent_flag[ message ] = 1; -} - -flat_angle( angle ) //checked matches cerberus output -{ - rangle = ( 0, angle[ 1 ], 0 ); - return rangle; -} - -waittill_any_or_timeout( timer, string1, string2, string3, string4, string5 ) //checked matches cerberus output -{ - /* -/# - assert( isDefined( string1 ) ); -#/ - */ - self endon( string1 ); - if ( isDefined( string2 ) ) - { - self endon( string2 ); - } - if ( isDefined( string3 ) ) - { - self endon( string3 ); - } - if ( isDefined( string4 ) ) - { - self endon( string4 ); - } - if ( isDefined( string5 ) ) - { - self endon( string5 ); - } - wait timer; -} - -clear_run_anim() //checked matches cerberus output -{ - self.alwaysrunforward = undefined; - self.a.combatrunanim = undefined; - self.run_noncombatanim = undefined; - self.walk_combatanim = undefined; - self.walk_noncombatanim = undefined; - self.precombatrunenabled = 1; -} - -track_players_intersection_tracker() //checked partially changed to match cerberus output //did not change while loop to for loop because continues in for loops go infinite -{ - self endon( "disconnect" ); - self endon( "death" ); - level endon( "end_game" ); - wait 5; - while ( 1 ) - { - killed_players = 0; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() || players[ i ].sessionstate != "playing" ) - { - i++; - continue; - } - j = 0; - while ( j < players.size ) - { - if ( j == i || players[ j ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() || players[ j ].sessionstate != "playing" ) - { - j++; - continue; - } - if ( isDefined( level.player_intersection_tracker_override ) ) - { - if ( players[ i ] [[ level.player_intersection_tracker_override ]]( players[ j ] ) ) - { - j++; - continue; - } - } - playeri_origin = players[ i ].origin; - playerj_origin = players[ j ].origin; - if ( abs( playeri_origin[ 2 ] - playerj_origin[ 2 ] ) > 60 ) - { - j++; - continue; - } - distance_apart = distance2d( playeri_origin, playerj_origin ); - if ( abs( distance_apart ) > 18 ) - { - j++; - continue; - } - /* -/# - iprintlnbold( "PLAYERS ARE TOO FRIENDLY!!!!!" ); -#/ - */ - players[ i ] dodamage( 1000, ( 0, 0, 1 ) ); - players[ j ] dodamage( 1000, ( 0, 0, 1 ) ); - if ( !killed_players ) - { - players[ i ] playlocalsound( level.zmb_laugh_alias ); - } - players[ i ] maps/mp/zombies/_zm_stats::increment_map_cheat_stat( "cheat_too_friendly" ); - players[ i ] maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_too_friendly", 0 ); - players[ i ] maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 ); - players[ j ] maps/mp/zombies/_zm_stats::increment_map_cheat_stat( "cheat_too_friendly" ); - players[ j ] maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_too_friendly", 0 ); - players[ j ] maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 ); - killed_players = 1; - j++; - } - i++; - } - wait 0.5; - } -} - -get_eye() //checked matches cerberus output -{ - if ( isplayer( self ) ) - { - linked_ent = self getlinkedent(); - if ( isDefined( linked_ent ) && getDvarInt( "cg_cameraUseTagCamera" ) > 0 ) - { - camera = linked_ent gettagorigin( "tag_camera" ); - if ( isDefined( camera ) ) - { - return camera; - } - } - } - pos = self geteye(); - return pos; -} - -is_player_looking_at( origin, dot, do_trace, ignore_ent ) //checked matches cerberus output -{ - /* -/# - assert( isplayer( self ), "player_looking_at must be called on a player." ); -#/ - */ - if ( !isDefined( dot ) ) - { - dot = 0.7; - } - if ( !isDefined( do_trace ) ) - { - do_trace = 1; - } - eye = self get_eye(); - delta_vec = anglesToForward( vectorToAngles( origin - eye ) ); - view_vec = anglesToForward( self getplayerangles() ); - new_dot = vectordot( delta_vec, view_vec ); - if ( new_dot >= dot ) - { - if ( do_trace ) - { - return bullettracepassed( origin, eye, 0, ignore_ent ); - } - else - { - return 1; - } - } - return 0; -} - -add_gametype( gt, dummy1, name, dummy2 ) //checked matches cerberus output -{ -} - -add_gameloc( gl, dummy1, name, dummy2 ) //checked matches cerberus output -{ -} - -get_closest_index( org, array, dist ) //checked partially changed to match cerberus output //did not change while loop to for loop because continues in for loops go infinite -{ - if ( !isDefined( dist ) ) - { - dist = 9999999; - } - distsq = dist * dist; - if ( array.size < 1 ) - { - return; - } - index = undefined; - i = 0; - while ( i < array.size ) - { - newdistsq = distancesquared( array[ i ].origin, org ); - if ( newdistsq >= distsq ) - { - i++; - continue; - } - distsq = newdistsq; - index = i; - i++; - } - return index; -} - -is_valid_zombie_spawn_point( point ) //checked matches cerberus output -{ - liftedorigin = point.origin + vectorScale( ( 0, 0, 1 ), 5 ); - size = 48; - height = 64; - mins = ( -1 * size, -1 * size, 0 ); - maxs = ( size, size, height ); - absmins = liftedorigin + mins; - absmaxs = liftedorigin + maxs; - if ( boundswouldtelefrag( absmins, absmaxs ) ) - { - return 0; - } - return 1; -} - -get_closest_index_to_entity( entity, array, dist, extra_check ) //checked partially changed to match cerberus output //did not change while loop to for loop because continues in for loops go infinite -{ - org = entity.origin; - if ( !isDefined( dist ) ) - { - dist = 9999999; - } - distsq = dist * dist; - if ( array.size < 1 ) - { - return; - } - index = undefined; - i = 0; - while ( i < array.size ) - { - if ( isDefined( extra_check ) && !( [[ extra_check ]]( entity, array[ i ] ) ) ) - { - i++; - continue; - } - newdistsq = distancesquared( array[ i ].origin, org ); - if ( newdistsq >= distsq ) - { - i++; - continue; - } - distsq = newdistsq; - index = i; - i++; - } - return index; -} - -set_gamemode_var( var, val ) //checked matches cerberus output -{ - if ( !isDefined( game[ "gamemode_match" ] ) ) - { - game[ "gamemode_match" ] = []; - } - game[ "gamemode_match" ][ var ] = val; -} - -set_gamemode_var_once( var, val ) //checked matches cerberus output -{ - if ( !isDefined( game[ "gamemode_match" ] ) ) - { - game[ "gamemode_match" ] = []; - } - if ( !isDefined( game[ "gamemode_match" ][ var ] ) ) - { - game[ "gamemode_match" ][ var ] = val; - } -} - -set_game_var( var, val ) //checked matches cerberus output -{ - game[ var ] = val; -} - -set_game_var_once( var, val ) //checked matches cerberus output -{ - if ( !isDefined( game[ var ] ) ) - { - game[ var ] = val; - } -} - -get_game_var( var ) //checked matches cerberus output -{ - if ( isDefined( game[ var ] ) ) - { - return game[ var ]; - } - return undefined; -} - -get_gamemode_var( var ) //checked matches cerberus output -{ - if ( isDefined( game[ "gamemode_match" ] ) && isDefined( game[ "gamemode_match" ][ var ] ) ) - { - return game[ "gamemode_match" ][ var ]; - } - return undefined; -} - -waittill_subset( min_num, string1, string2, string3, string4, string5 ) //checked matches cerberus output -{ - self endon( "death" ); - ent = spawnstruct(); - ent.threads = 0; - returned_threads = 0; - if ( isDefined( string1 ) ) - { - self thread waittill_string( string1, ent ); - ent.threads++; - } - if ( isDefined( string2 ) ) - { - self thread waittill_string( string2, ent ); - ent.threads++; - } - if ( isDefined( string3 ) ) - { - self thread waittill_string( string3, ent ); - ent.threads++; - } - if ( isDefined( string4 ) ) - { - self thread waittill_string( string4, ent ); - ent.threads++; - } - if ( isDefined( string5 ) ) - { - self thread waittill_string( string5, ent ); - ent.threads++; - } - while ( ent.threads ) - { - ent waittill( "returned" ); - ent.threads--; - - returned_threads++; - if ( returned_threads >= min_num ) - { - break; - } - } - ent notify( "die" ); -} - -is_headshot( sweapon, shitloc, smeansofdeath ) //checked changed at own diecretion -{ - if ( shitloc == "head" && shitloc == "helmet" ) - { - return 1; - } - if ( smeansofdeath == "MOD_IMPACT" && issubstr( sweapon, "knife_ballistic" ) && shitloc == "head" ) - { - return 1; - } - if ( smeansofdeath != "MOD_MELEE" && smeansofdeath != "MOD_BAYONET" && smeansofdeath != "MOD_IMPACT" && smeansofdeath != "MOD_UNKNOWN" ) - { - return 0; - } -} - -is_jumping() //checked matches cerberus output -{ - ground_ent = self getgroundent(); - return !isDefined( ground_ent ); -} - -is_explosive_damage( mod ) //checked changed to match cerberus output -{ - if ( !isDefined( mod ) ) - { - return 0; - } - if ( mod == "MOD_GRENADE" || mod == "MOD_GRENADE_SPLASH" || mod == "MOD_PROJECTILE" || mod == "MOD_PROJECTILE_SPLASH" || mod == "MOD_EXPLOSIVE" ) - { - return 1; - } - return 0; -} - -sndswitchannouncervox( who ) //checked matches cerberus output -{ - switch( who ) - { - case "sam": - game[ "zmbdialog" ][ "prefix" ] = "vox_zmba_sam"; - level.zmb_laugh_alias = "zmb_laugh_sam"; - level.sndannouncerisrich = 0; - break; - case "richtofen": - game[ "zmbdialog" ][ "prefix" ] = "vox_zmba"; - level.zmb_laugh_alias = "zmb_laugh_richtofen"; - level.sndannouncerisrich = 1; - break; - } -} - -do_player_general_vox( category, type, timer, chance ) //checked matches cerberus output -{ - if ( isDefined( timer ) && isDefined( level.votimer[ type ] ) && level.votimer[ type ] > 0 ) - { - return; - } - if ( !isDefined( chance ) ) - { - chance = maps/mp/zombies/_zm_audio::get_response_chance( type ); - } - if ( chance > randomint( 100 ) ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( category, type ); - if ( isDefined( timer ) ) - { - level.votimer[ type ] = timer; - level thread general_vox_timer( level.votimer[ type ], type ); - } - } -} - -general_vox_timer( timer, type ) //checked matches cerberus output -{ - level endon( "end_game" ); - /* -/# - println( "ZM >> VOX TIMER STARTED FOR " + type + " ( " + timer + ")" ); -#/ - */ - while ( timer > 0 ) - { - wait 1; - timer--; - - } - level.votimer[ type ] = timer; - /* -/# - println( "ZM >> VOX TIMER ENDED FOR " + type + " ( " + timer + ")" ); -#/ - */ -} - -create_vox_timer( type ) //checked matches cerberus output -{ - level.votimer[ type ] = 0; -} - -play_vox_to_player( category, type, force_variant ) //checked matches cerberus output -{ - self thread maps/mp/zombies/_zm_audio::playvoxtoplayer( category, type, force_variant ); -} - -is_favorite_weapon( weapon_to_check ) -{ - if ( !isDefined( self.favorite_wall_weapons_list ) ) - { - return 0; - } - foreach ( weapon in self.favorite_wall_weapons_list ) - { - if ( weapon_to_check == weapon ) - { - return 1; - } - } - return 0; -} - -add_vox_response_chance( event, chance ) -{ - level.response_chances[ event ] = chance; -} - -set_demo_intermission_point() //checked changed to match cerberus output -{ - spawnpoints = getentarray( "mp_global_intermission", "classname" ); - if ( !spawnpoints.size ) - { - return; - } - spawnpoint = spawnpoints[ 0 ]; - match_string = ""; - location = level.scr_zm_map_start_location; - if ( ( location != "default" || location == "" ) && isDefined( level.default_start_location ) ) - { - location = level.default_start_location; - } - match_string = level.scr_zm_ui_gametype + "_" + location; - for ( i = 0; i < spawnpoints.size; i++ ) - { - if ( isDefined( spawnpoints[ i ].script_string ) ) - { - tokens = strtok( spawnpoints[ i ].script_string, " " ); - foreach ( token in tokens ) - { - if ( token == match_string ) - { - spawnpoint = spawnpoints[ i ]; - i = spawnpoints.size; - break; - } - } - } - } - setdemointermissionpoint( spawnpoint.origin, spawnpoint.angles ); -} - -register_map_navcard( navcard_on_map, navcard_needed_for_computer ) //checked matches cerberus output -{ - level.navcard_needed = navcard_needed_for_computer; - level.map_navcard = navcard_on_map; -} - -does_player_have_map_navcard( player ) //checked matches cerberus output -{ - return player maps/mp/zombies/_zm_stats::get_global_stat( level.map_navcard ); -} - -does_player_have_correct_navcard( player ) //checked matches cerberus output -{ - if ( !isDefined( level.navcard_needed ) ) - { - return 0; - } - return player maps/mp/zombies/_zm_stats::get_global_stat( level.navcard_needed ); -} - -place_navcard( str_model, str_stat, org, angles ) //checked changed to match cerberus output -{ - navcard = spawn( "script_model", org ); - navcard setmodel( str_model ); - navcard.angles = angles; - wait 1; - navcard_pickup_trig = spawn( "trigger_radius_use", org, 0, 84, 72 ); - navcard_pickup_trig setcursorhint( "HINT_NOICON" ); - navcard_pickup_trig sethintstring( &"ZOMBIE_NAVCARD_PICKUP" ); - navcard_pickup_trig triggerignoreteam(); - a_navcard_stats = array( "navcard_held_zm_transit", "navcard_held_zm_highrise", "navcard_held_zm_buried" ); - is_holding_card = 0; - str_placing_stat = undefined; - while ( 1 ) - { - navcard_pickup_trig waittill( "trigger", who ); - if ( is_player_valid( who ) ) - { - foreach ( str_cur_stat in a_navcard_stats ) - { - if ( who maps/mp/zombies/_zm_stats::get_global_stat( str_cur_stat ) ) - { - str_placing_stat = str_cur_stat; - is_holding_card = 1; - who maps/mp/zombies/_zm_stats::set_global_stat( str_cur_stat, 0 ); - } - } - who playsound( "zmb_buildable_piece_add" ); - who maps/mp/zombies/_zm_stats::set_global_stat( str_stat, 1 ); - who.navcard_grabbed = str_stat; - wait_network_frame(); - is_stat = who maps/mp/zombies/_zm_stats::get_global_stat( str_stat ); - thread sq_refresh_player_navcard_hud(); - break; - } - } - navcard delete(); - navcard_pickup_trig delete(); - if ( is_holding_card ) - { - level thread place_navcard( str_model, str_placing_stat, org, angles ); - } -} - -sq_refresh_player_navcard_hud() //checked changed to match cerberus output -{ - if ( !isDefined( level.navcards ) ) - { - return; - } - players = get_players(); - foreach ( player in players ) - { - player thread sq_refresh_player_navcard_hud_internal(); - } -} - -sq_refresh_player_navcard_hud_internal() //checked changed to match cerberus output -{ - self endon( "disconnect" ); - navcard_bits = 0; - for ( i = 0; i < level.navcards.size; i++ ) - { - hasit = self maps/mp/zombies/_zm_stats::get_global_stat( level.navcards[ i ] ); - if ( isDefined( self.navcard_grabbed ) && self.navcard_grabbed == level.navcards[ i ] ) - { - hasit = 1; - } - if ( hasit ) - { - navcard_bits += 1; - } - } - wait_network_frame(); - self setclientfield( "navcard_held", 0 ); - if ( navcard_bits > 0 ) - { - wait_network_frame(); - self setclientfield( "navcard_held", navcard_bits ); - } -} - -set_player_is_female( onoff ) //checked matches cerberus output -{ - if ( is_true( level.use_female_animations ) ) - { - female_perk = "specialty_gpsjammer"; - if ( onoff ) - { - self setperk( female_perk ); - return; - } - else - { - self unsetperk( female_perk ); - } - } -} - -disable_player_move_states( forcestancechange ) //checked matches cerberus output -{ - self allowcrouch( 1 ); - self allowlean( 0 ); - self allowads( 0 ); - self allowsprint( 0 ); - self allowprone( 0 ); - self allowmelee( 0 ); - if ( isDefined( forcestancechange ) && forcestancechange == 1 ) - { - if ( self getstance() == "prone" ) - { - self setstance( "crouch" ); - } - } -} - -enable_player_move_states() //checked matches cerberus output -{ - if ( !isDefined( self._allow_lean ) || self._allow_lean == 1 ) - { - self allowlean( 1 ); - } - if ( !isDefined( self._allow_ads ) || self._allow_ads == 1 ) - { - self allowads( 1 ); - } - if ( !isDefined( self._allow_sprint ) || self._allow_sprint == 1 ) - { - self allowsprint( 1 ); - } - if ( !isDefined( self._allow_prone ) || self._allow_prone == 1 ) - { - self allowprone( 1 ); - } - if ( !isDefined( self._allow_melee ) || self._allow_melee == 1 ) - { - self allowmelee( 1 ); - } -} - -check_and_create_node_lists() //checked matches cerberus output -{ - if ( !isDefined( level._link_node_list ) ) - { - level._link_node_list = []; - } - if ( !isDefined( level._unlink_node_list ) ) - { - level._unlink_node_list = []; - } -} - -link_nodes( a, b, bdontunlinkonmigrate ) //checked changed to match cerberus output -{ - if ( !isDefined( bdontunlinkonmigrate ) ) - { - bdontunlinkonmigrate = 0; - } - if ( nodesarelinked( a, b ) ) - { - return; - } - check_and_create_node_lists(); - a_index_string = "" + a.origin; - b_index_string = "" + b.origin; - if ( !isDefined( level._link_node_list[ a_index_string ] ) ) - { - level._link_node_list[ a_index_string ] = spawnstruct(); - level._link_node_list[ a_index_string ].node = a; - level._link_node_list[ a_index_string ].links = []; - level._link_node_list[ a_index_string ].ignore_on_migrate = []; - } - if ( !isDefined( level._link_node_list[ a_index_string ].links[ b_index_string ] ) ) - { - level._link_node_list[ a_index_string ].links[ b_index_string ] = b; - level._link_node_list[ a_index_string ].ignore_on_migrate[ b_index_string ] = bdontunlinkonmigrate; - } - if ( isDefined( level._unlink_node_list[ a_index_string ] ) ) - { - if ( isDefined( level._unlink_node_list[ a_index_string ].links[ b_index_string ] ) ) - { - level._unlink_node_list[a_index_string].links[b_index_string] = undefined; - level._unlink_node_list[a_index_string].ignore_on_migrate[b_index_string] = undefined; - } - } - linknodes( a, b ); -} - -unlink_nodes( a, b, bdontlinkonmigrate ) //checked changed to match cerberus output -{ - if ( !isDefined( bdontlinkonmigrate ) ) - { - bdontlinkonmigrate = 0; - } - if ( !nodesarelinked( a, b ) ) - { - return; - } - check_and_create_node_lists(); - a_index_string = "" + a.origin; - b_index_string = "" + b.origin; - if ( !isDefined( level._unlink_node_list[ a_index_string ] ) ) - { - level._unlink_node_list[ a_index_string ] = spawnstruct(); - level._unlink_node_list[ a_index_string ].node = a; - level._unlink_node_list[ a_index_string ].links = []; - level._unlink_node_list[ a_index_string ].ignore_on_migrate = []; - } - if ( !isDefined( level._unlink_node_list[ a_index_string ].links[ b_index_string ] ) ) - { - level._unlink_node_list[ a_index_string ].links[ b_index_string ] = b; - level._unlink_node_list[ a_index_string ].ignore_on_migrate[ b_index_string ] = bdontlinkonmigrate; - } - if ( isDefined( level._link_node_list[ a_index_string ] ) ) - { - if ( isDefined( level._link_node_list[ a_index_string ].links[ b_index_string ] ) ) - { - level._link_node_list[a_index_string].links[b_index_string] = undefined; - level._link_node_list[a_index_string].ignore_on_migrate[b_index_string] = undefined; - } - } - unlinknodes( a, b ); -} - -spawn_path_node( origin, angles, k1, v1, k2, v2 ) //checked matches cerberus output -{ - if ( !isDefined( level._spawned_path_nodes ) ) - { - level._spawned_path_nodes = []; - } - node = spawnstruct(); - node.origin = origin; - node.angles = angles; - node.k1 = k1; - node.v1 = v1; - node.k2 = k2; - node.v2 = v2; - node.node = spawn_path_node_internal( origin, angles, k1, v1, k2, v2 ); - level._spawned_path_nodes[ level._spawned_path_nodes.size ] = node; - return node.node; -} - -spawn_path_node_internal( origin, angles, k1, v1, k2, v2 ) //checked matches cerberus output -{ - if ( isDefined( k2 ) ) - { - return spawnpathnode( "node_pathnode", origin, angles, k1, v1, k2, v2 ); - } - else if ( isDefined( k1 ) ) - { - return spawnpathnode( "node_pathnode", origin, angles, k1, v1 ); - } - else - { - return spawnpathnode( "node_pathnode", origin, angles ); - } - return undefined; -} - -delete_spawned_path_nodes() //checked matches cerberus output -{ -} - -respawn_path_nodes() //checked changed to match cerberus output -{ - if ( !isDefined( level._spawned_path_nodes ) ) - { - return; - } - for ( i = 0; i < level._spawned_path_nodes.size; i++ ) - { - node_struct = level._spawned_path_nodes[ i ]; - /* -/# - println( "Re-spawning spawned path node @ " + node_struct.origin ); -#/ - */ - node_struct.node = spawn_path_node_internal( node_struct.origin, node_struct.angles, node_struct.k1, node_struct.v1, node_struct.k2, node_struct.v2 ); - } -} - -link_changes_internal_internal( list, func ) //checked partially changed to match cerberus output //did not change while loop to for loop because continues in for loops go infinite -{ - keys = getarraykeys( list ); - for ( i = 0; i < keys.size; i++ ) - { - node = list[ keys[ i ] ].node; - node_keys = getarraykeys( list[ keys[ i ] ].links ); - j = 0; - while ( j < node_keys.size ) - { - if ( isDefined( list[ keys[ i ] ].links[ node_keys[ j ] ] ) ) - { - if ( isDefined( list[ keys[ i ] ].ignore_on_migrate[ node_keys[ j ] ] ) && list[ keys[ i ] ].ignore_on_migrate[ node_keys[ j ] ] ) - { - /* -/# - println( "Node at " + keys[ i ] + " to node at " + node_keys[ j ] + " - IGNORED" ); -#/ - */ - j++; - continue; - } - /* -/# - println( "Node at " + keys[ i ] + " to node at " + node_keys[ j ] ); -#/ - */ - [[ func ]]( node, list[ keys[ i ] ].links[ node_keys[ j ] ] ); - } - j++; - } - } -} - -link_changes_internal( func_for_link_list, func_for_unlink_list ) //checked matches cerberus output -{ - if ( isDefined( level._link_node_list ) ) - { - /* -/# - println( "Link List" ); -#/ - */ - link_changes_internal_internal( level._link_node_list, func_for_link_list ); - } - if ( isDefined( level._unlink_node_list ) ) - { - /* -/# - println( "UnLink List" ); -#/ - */ - link_changes_internal_internal( level._unlink_node_list, func_for_unlink_list ); - } -} - -link_nodes_wrapper( a, b ) //checked matches cerberus output -{ - if ( !nodesarelinked( a, b ) ) - { - linknodes( a, b ); - } -} - -unlink_nodes_wrapper( a, b ) //checked matches cerberus output -{ - if ( nodesarelinked( a, b ) ) - { - unlinknodes( a, b ); - } -} - -undo_link_changes() //checked matches cerberus output -{ - /* -/# - println( "***" ); - println( "***" ); - println( "*** Undoing link changes" ); -#/ - */ - link_changes_internal( ::unlink_nodes_wrapper, ::link_nodes_wrapper ); - delete_spawned_path_nodes(); -} - -redo_link_changes() //checked matches cerberus output -{ - /* -/# - println( "***" ); - println( "***" ); - println( "*** Redoing link changes" ); -#/ - */ - respawn_path_nodes(); - link_changes_internal( ::link_nodes_wrapper, ::unlink_nodes_wrapper ); -} - -set_player_tombstone_index() //checked matches cerberus output -{ - if ( !isDefined( level.tombstone_index ) ) - { - level.tombstone_index = 0; - } - if ( !isDefined( self.tombstone_index ) ) - { - self.tombstone_index = level.tombstone_index; - level.tombstone_index++; - } -} - -hotjoin_setup_player( viewmodel ) //checked matches cerberus output -{ - if ( is_true( level.passed_introscreen ) && !isDefined( self.first_spawn ) && !isDefined( self.characterindex ) ) - { - self.first_spawn = 1; - self setviewmodel( viewmodel ); - return 1; - } - return 0; -} - -is_temporary_zombie_weapon( str_weapon ) //checked changed at own discretion -{ - if ( is_zombie_perk_bottle(str_weapon) || str_weapon == level.revive_tool || str_weapon == "zombie_builder_zm" || str_weapon == "chalk_draw_zm" || str_weapon == "no_hands_zm" || str_weapon == level.machine_assets["packapunch"].weapon ) - { - return 1; - } - return 0; -} - -is_gametype_active( a_gametypes ) //checked changed to match cerberus output -{ - b_is_gametype_active = 0; - if ( !isarray( a_gametypes ) ) - { - a_gametypes = array( a_gametypes ); - } - for ( i = 0; i < a_gametypes.size; i++ ) - { - if ( getDvar( "g_gametype" ) == a_gametypes[ i ] ) - { - b_is_gametype_active = 1; - } - } - return b_is_gametype_active; -} - -is_createfx_active() //checked changed at own discretion -{ - if ( !isDefined( level.createfx_enabled ) ) - { - level.createfx_enabled = getDvar( "createfx" ); - } - return level.createfx_enabled; -} - -is_zombie_perk_bottle( str_weapon ) //checked matches cerberus output -{ - switch( str_weapon ) - { - case "zombie_perk_bottle_additionalprimaryweapon": - case "zombie_perk_bottle_cherry": - case "zombie_perk_bottle_deadshot": - case "zombie_perk_bottle_doubletap": - case "zombie_perk_bottle_jugg": - case "zombie_perk_bottle_marathon": - case "zombie_perk_bottle_nuke": - case "zombie_perk_bottle_oneinch": - case "zombie_perk_bottle_revive": - case "zombie_perk_bottle_sixth_sense": - case "zombie_perk_bottle_sleight": - case "zombie_perk_bottle_tombstone": - case "zombie_perk_bottle_vulture": - case "zombie_perk_bottle_whoswho": - b_is_perk_bottle = 1; - break; - default: - b_is_perk_bottle = 0; - break; - } - return b_is_perk_bottle; -} - -register_custom_spawner_entry( spot_noteworthy, func ) //checked matches cerberus output -{ - if ( !isDefined( level.custom_spawner_entry ) ) - { - level.custom_spawner_entry = []; - } - level.custom_spawner_entry[ spot_noteworthy ] = func; -} - -get_player_weapon_limit( player ) //checked matches cerberus output -{ - if ( isDefined( level.get_player_weapon_limit ) ) - { - return [[ level.get_player_weapon_limit ]]( player ); - } - weapon_limit = 2; - if ( player hasperk( "specialty_additionalprimaryweapon" ) ) - { - weapon_limit = level.additionalprimaryweapon_limit; - } - return weapon_limit; -} - -get_player_perk_purchase_limit() //checked matches cerberus output -{ - if ( isDefined( level.get_player_perk_purchase_limit ) ) - { - return self [[ level.get_player_perk_purchase_limit ]](); - } - return level.perk_purchase_limit; -} - - - - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc deleted file mode 100644 index 10ad76c..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc +++ /dev/null @@ -1,568 +0,0 @@ -#include maps/mp/zombies/_zm_clone; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -//#using_animtree( "zombie_cymbal_monkey" ); - -init() //checked matches cerberus output -{ - if ( !cymbal_monkey_exists() ) - { - return; - } - /* -/# - level.zombiemode_devgui_cymbal_monkey_give = ::player_give_cymbal_monkey; -#/ - */ - if ( is_true( level.legacy_cymbal_monkey ) ) - { - level.cymbal_monkey_model = "weapon_zombie_monkey_bomb"; - } - else - { - level.cymbal_monkey_model = "t6_wpn_zmb_monkey_bomb_world"; - } - level._effect[ "monkey_glow" ] = loadfx( "maps/zombie/fx_zombie_monkey_light" ); - level._effect[ "grenade_samantha_steal" ] = loadfx( "maps/zombie/fx_zmb_blackhole_trap_end" ); - level.cymbal_monkeys = []; - scriptmodelsuseanimtree( -1 ); -} - -player_give_cymbal_monkey() //checked matches cerberus output -{ - self giveweapon( "cymbal_monkey_zm" ); - self set_player_tactical_grenade( "cymbal_monkey_zm" ); - self thread player_handle_cymbal_monkey(); -} - -player_handle_cymbal_monkey() //checked matches cerberus output -{ - self notify( "starting_monkey_watch" ); - self endon( "disconnect" ); - self endon( "starting_monkey_watch" ); - attract_dist_diff = level.monkey_attract_dist_diff; - if ( !isDefined( attract_dist_diff ) ) - { - attract_dist_diff = 45; - } - num_attractors = level.num_monkey_attractors; - if ( !isDefined( num_attractors ) ) - { - num_attractors = 96; - } - max_attract_dist = level.monkey_attract_dist; - if ( !isDefined( max_attract_dist ) ) - { - max_attract_dist = 1536; - } - while ( 1 ) - { - grenade = get_thrown_monkey(); - self player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff ); - wait 0.05; - } -} - -watch_for_dud( model, actor ) //checked matches cerberus output -{ - self endon( "death" ); - self waittill( "grenade_dud" ); - model.dud = 1; - self playsound( "zmb_vox_monkey_scream" ); - self.monk_scream_vox = 1; - wait 3; - if ( isDefined( model ) ) - { - model delete(); - } - if ( isDefined( actor ) ) - { - actor delete(); - } - if ( isDefined( self.damagearea ) ) - { - self.damagearea delete(); - } - if ( isDefined( self ) ) - { - self delete(); - } -} - -watch_for_emp( model, actor ) //checked changed to match cerberus output -{ - self endon( "death" ); - if ( !should_watch_for_emp() ) - { - return; - } - while ( 1 ) - { - level waittill( "emp_detonate", origin, radius ); - if ( distancesquared( origin, self.origin ) < radius * radius ) - { - break; - } - } - self.stun_fx = 1; - if ( isDefined( level._equipment_emp_destroy_fx ) ) - { - playfx( level._equipment_emp_destroy_fx, self.origin + vectorScale( ( 0, 0, 1 ), 5 ), ( 0, randomfloat( 360 ), 0 ) ); - } - wait 0.15; - self.attract_to_origin = 0; - self deactivate_zombie_point_of_interest(); - model clearanim( %o_monkey_bomb, 0 ); - wait 1; - self detonate(); - wait 1; - if ( isDefined( model ) ) - { - model delete(); - } - if ( isDefined( actor ) ) - { - actor delete(); - } - if ( isDefined( self.damagearea ) ) - { - self.damagearea delete(); - } - if ( isDefined( self ) ) - { - self delete(); - } -} - -clone_player_angles( owner ) //checked matches cerberus output -{ - self endon( "death" ); - owner endon( "death" ); - while ( isDefined( self ) ) - { - self.angles = owner.angles; - wait 0.05; - } -} - -show_briefly( showtime ) //checked matches cerberus output -{ - self endon( "show_owner" ); - if ( isDefined( self.show_for_time ) ) - { - self.show_for_time = showtime; - return; - } - self.show_for_time = showtime; - self setvisibletoall(); - while ( self.show_for_time > 0 ) - { - self.show_for_time -= 0.05; - wait 0.05; - } - self setvisibletoallexceptteam( level.zombie_team ); - self.show_for_time = undefined; -} - -show_owner_on_attack( owner ) //checked matches cerberus output -{ - owner endon( "hide_owner" ); - owner endon( "show_owner" ); - self endon( "explode" ); - self endon( "death" ); - self endon( "grenade_dud" ); - owner.show_for_time = undefined; - for ( ;; ) - { - owner waittill( "weapon_fired" ); - owner thread show_briefly( 0.5 ); - } -} - -hide_owner( owner ) //checked matches cerberus output -{ - owner notify( "hide_owner" ); - owner endon( "hide_owner" ); - owner setperk( "specialty_immunemms" ); - owner.no_burning_sfx = 1; - owner notify( "stop_flame_sounds" ); - owner setvisibletoallexceptteam( level.zombie_team ); - owner.hide_owner = 1; - if ( isDefined( level._effect[ "human_disappears" ] ) ) - { - playfx( level._effect[ "human_disappears" ], owner.origin ); - } - self thread show_owner_on_attack( owner ); - evt = self waittill_any_return( "explode", "death", "grenade_dud" ); - /* -/# - println( "ZMCLONE: Player visible again because of " + evt ); -#/ - */ - owner notify( "show_owner" ); - owner unsetperk( "specialty_immunemms" ); - if ( isDefined( level._effect[ "human_disappears" ] ) ) - { - playfx( level._effect[ "human_disappears" ], owner.origin ); - } - owner.no_burning_sfx = undefined; - owner setvisibletoall(); - owner.hide_owner = undefined; - owner show(); -} - -proximity_detonate( owner ) //checked changed to match cerberus output -{ - wait 1.5; - if ( !isDefined( self ) ) - { - return; - } - detonateradius = 96; - explosionradius = detonateradius * 2; - damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 1.5 ); - damagearea setexcludeteamfortrigger( owner.team ); - damagearea enablelinkto(); - damagearea linkto( self ); - self.damagearea = damagearea; - while ( isDefined( self ) ) - { - damagearea waittill( "trigger", ent ); - if ( isDefined( owner ) && ent == owner ) - { - continue; - } - if ( isDefined( ent.team ) && ent.team == owner.team ) - { - continue; - } - self playsound( "wpn_claymore_alert" ); - dist = distance( self.origin, ent.origin ); - radiusdamage( self.origin + vectorScale( ( 0, 0, 1 ), 12 ), explosionradius, 1, 1, owner, "MOD_GRENADE_SPLASH", "cymbal_monkey_zm" ); - if ( isDefined( owner ) ) - { - self detonate( owner ); - } - else - { - self detonate( undefined ); - } - break; - } - if ( isDefined( damagearea ) ) - { - damagearea delete(); - } -} - -player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff ) //checked matches cerberus output -{ - self endon( "disconnect" ); - self endon( "starting_monkey_watch" ); - if ( isDefined( grenade ) ) - { - grenade endon( "death" ); - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - if ( isDefined( grenade.damagearea ) ) - { - grenade.damagearea delete(); - } - grenade delete(); - return; - } - grenade hide(); - model = spawn( "script_model", grenade.origin ); - model setmodel( level.cymbal_monkey_model ); - model useanimtree( -1 ); - model linkto( grenade ); - model.angles = grenade.angles; - model thread monkey_cleanup( grenade ); - clone = undefined; - if ( is_true( level.cymbal_monkey_dual_view ) ) - { - model setvisibletoallexceptteam( level.zombie_team ); - clone = maps/mp/zombies/_zm_clone::spawn_player_clone( self, vectorScale( ( 0, 0, -1 ), 999 ), level.cymbal_monkey_clone_weapon, undefined ); - model.simulacrum = clone; - clone maps/mp/zombies/_zm_clone::clone_animate( "idle" ); - clone thread clone_player_angles( self ); - clone notsolid(); - clone ghost(); - } - grenade thread watch_for_dud( model, clone ); - grenade thread watch_for_emp( model, clone ); - info = spawnstruct(); - info.sound_attractors = []; - grenade thread monitor_zombie_groans( info ); - grenade waittill( "stationary" ); - if ( isDefined( level.grenade_planted ) ) - { - self thread [[ level.grenade_planted ]]( grenade, model ); - } - if ( isDefined( grenade ) ) - { - if ( isDefined( model ) ) - { - model setanim( %o_monkey_bomb ); - if ( !is_true( grenade.backlinked ) ) - { - model unlink(); - model.origin = grenade.origin; - model.angles = grenade.angles; - } - } - if ( isDefined( clone ) ) - { - clone forceteleport( grenade.origin, grenade.angles ); - clone thread hide_owner( self ); - grenade thread proximity_detonate( self ); - clone show(); - clone setinvisibletoall(); - clone setvisibletoteam( level.zombie_team ); - } - grenade resetmissiledetonationtime(); - playfxontag( level._effect[ "monkey_glow" ], model, "origin_animate_jnt" ); - valid_poi = check_point_in_enabled_zone( grenade.origin, undefined, undefined ); - if ( isDefined( level.check_valid_poi ) ) - { - valid_poi = grenade [[ level.check_valid_poi ]]( valid_poi ); - } - if ( valid_poi ) - { - grenade create_zombie_point_of_interest( max_attract_dist, num_attractors, 10000 ); - grenade.attract_to_origin = 1; - grenade thread create_zombie_point_of_interest_attractor_positions( 4, attract_dist_diff ); - grenade thread wait_for_attractor_positions_complete(); - grenade thread do_monkey_sound( model, info ); - level.cymbal_monkeys[ level.cymbal_monkeys.size ] = grenade; - } - else - { - grenade.script_noteworthy = undefined; - level thread grenade_stolen_by_sam( grenade, model, clone ); - } - return; - } - else - { - grenade.script_noteworthy = undefined; - level thread grenade_stolen_by_sam( grenade, model, clone ); - } - } -} - -grenade_stolen_by_sam( ent_grenade, ent_model, ent_actor ) //checked changed to match cerberus output -{ - if ( !isDefined( ent_model ) ) - { - return; - } - direction = ent_model.origin; - direction = ( direction[ 1 ], direction[ 0 ], 0 ); - if ( direction[ 1 ] < 0 || direction[ 0 ] > 0 && direction[ 1 ] > 0 ) - { - direction = ( direction[ 0 ], direction[ 1 ] * -1, 0 ); - } - else - { - if ( direction[ 0 ] < 0 ) - { - direction = ( direction[ 0 ] * -1, direction[ 1 ], 0 ); - } - } - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - if ( isalive( players[ i ] ) ) - { - players[ i ] playlocalsound( level.zmb_laugh_alias ); - } - } - playfxontag( level._effect[ "grenade_samantha_steal" ], ent_model, "tag_origin" ); - ent_model movez( 60, 1, 0.25, 0.25 ); - ent_model vibrate( direction, 1.5, 2.5, 1 ); - ent_model waittill( "movedone" ); - if ( isDefined( self.damagearea ) ) - { - self.damagearea delete(); - } - ent_model delete(); - if ( isDefined( ent_actor ) ) - { - ent_actor delete(); - } - if ( isDefined( ent_grenade ) ) - { - if ( isDefined( ent_grenade.damagearea ) ) - { - ent_grenade.damagearea delete(); - } - ent_grenade delete(); - } -} - -wait_for_attractor_positions_complete() //checked matches cerberus output -{ - self waittill( "attractor_positions_generated" ); - self.attract_to_origin = 0; -} - -monkey_cleanup( parent ) //checked matches cerberus output -{ - while ( 1 ) - { - if ( !isDefined( parent ) ) - { - if ( isDefined( self ) && is_true( self.dud ) ) - { - wait 6; - } - if ( isDefined( self.simulacrum ) ) - { - self.simulacrum delete(); - } - self_delete(); - return; - } - wait 0.05; - } -} - -do_monkey_sound( model, info ) //checked changed to match cerberus output -{ - self.monk_scream_vox = 0; - if ( isDefined( level.grenade_safe_to_bounce ) ) - { - if ( ![[ level.grenade_safe_to_bounce ]]( self.owner, "cymbal_monkey_zm" ) ) - { - self playsound( "zmb_vox_monkey_scream" ); - self.monk_scream_vox = 1; - } - } - if ( !self.monk_scream_vox && level.music_override == 0 ) - { - if ( is_true( level.cymbal_monkey_dual_view ) ) - { - self playsoundtoteam( "zmb_monkey_song", "allies" ); - } - else - { - self playsound( "zmb_monkey_song" ); - } - } - if ( !self.monk_scream_vox ) - { - self thread play_delayed_explode_vox(); - } - self waittill( "explode", position ); - level notify( "grenade_exploded", position, 100, 5000, 450 ); - monkey_index = -1; - for ( i = 0; i < level.cymbal_monkeys.size; i++ ) - { - if ( !isDefined( level.cymbal_monkeys[ i ] ) ) - { - monkey_index = i; - break; - } - } - if ( monkey_index >= 0 ) - { - arrayremoveindex( level.cymbal_monkeys, monkey_index ); - } - if ( isDefined( model ) ) - { - model clearanim( %o_monkey_bomb, 0,2 ); - } - for ( i = 0; i < info.sound_attractors.size; i++ ) - { - if ( isDefined( info.sound_attractors[ i ] ) ) - { - info.sound_attractors[ i ] notify( "monkey_blown_up" ); - } - } -} - -play_delayed_explode_vox() //checked matches cerberus output -{ - wait 6.5; - if ( isDefined( self ) ) - { - self playsound( "zmb_vox_monkey_explode" ); - } -} - -get_thrown_monkey() //checked matches cerberus output -{ - self endon( "disconnect" ); - self endon( "starting_monkey_watch" ); - while ( 1 ) - { - self waittill( "grenade_fire", grenade, weapname ); - if ( weapname == "cymbal_monkey_zm" ) - { - grenade.use_grenade_special_long_bookmark = 1; - grenade.grenade_multiattack_bookmark_count = 1; - return grenade; - } - wait 0.05; - } -} - -monitor_zombie_groans( info ) //checked changed to match cerberus output -{ - self endon( "explode" ); - while ( 1 ) - { - if ( !isDefined( self ) ) - { - return; - } - if ( !isDefined( self.attractor_array ) ) - { - wait 0.05; - continue; - } - for ( i = 0; i < self.attractor_array.size; i++ ) - { - if ( array_check_for_dupes( info.sound_attractors, self.attractor_array[ i ] ) ) - { - if ( isDefined( self.origin ) && isDefined( self.attractor_array[ i ].origin ) ) - { - if ( distancesquared( self.origin, self.attractor_array[ i ].origin ) < 250000 ) - { - info.sound_attractors[ info.sound_attractors.size ] = self.attractor_array[ i ]; - self.attractor_array[ i ] thread play_zombie_groans(); - } - } - } - } - wait 0.05; - } -} - -play_zombie_groans() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "monkey_blown_up" ); - while ( 1 ) - { - if ( isDefined( self ) ) - { - self playsound( "zmb_vox_zombie_groan" ); - wait randomfloatrange( 2, 3 ); - } - else - { - return; - } - } -} - -cymbal_monkey_exists() //checked matches cerberus output -{ - return isDefined( level.zombie_weapons[ "cymbal_monkey_zm" ] ); -} - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_weapons.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_weapons.gsc deleted file mode 100644 index a4476cf..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_weapons.gsc +++ /dev/null @@ -1,2799 +0,0 @@ -#include maps/mp/zombies/_zm_weap_cymbal_monkey; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_pers_upgrades_functions; -#include maps/mp/zombies/_zm_melee_weapon; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/gametypes_zm/_weapons; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; -#include maps/mp/zombies/_zm_weap_claymore; -#include maps/mp/zombies/_zm_weap_ballistic_knife; - - -init() //checked matches cerberus output -{ - init_weapons(); - init_weapon_upgrade(); - init_weapon_toggle(); - precacheshader( "minimap_icon_mystery_box" ); - precacheshader( "specialty_instakill_zombies" ); - precacheshader( "specialty_firesale_zombies" ); - precacheitem( "zombie_fists_zm" ); - level._weaponobjects_on_player_connect_override = ::weaponobjects_on_player_connect_override; - level._zombiemode_check_firesale_loc_valid_func = ::default_check_firesale_loc_valid_func; - level.missileentities = []; - setupretrievablehintstrings(); - level thread onplayerconnect(); - -} - -setupretrievablehintstrings() //checked matches cerberus output -{ - maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "claymore", &"ZOMBIE_CLAYMORE_PICKUP" ); -} - -onplayerconnect() //checked matches cerberus output -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread onplayerspawned(); - } -} - -onplayerspawned() //checked matches cerberus output -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread watchforgrenadeduds(); - self thread watchforgrenadelauncherduds(); - self.staticweaponsstarttime = getTime(); - } -} - -watchforgrenadeduds() //checked matches cerberus output -{ - self endon( "spawned_player" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "grenade_fire", grenade, weapname ); - if ( !is_equipment( weapname ) && weapname != "claymore_zm" ) - { - grenade thread checkgrenadefordud( weapname, 1, self ); - grenade thread watchforscriptexplosion( weapname, 1, self ); - } - } -} - -watchforgrenadelauncherduds() //checked matches cerberus output -{ - self endon( "spawned_player" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "grenade_launcher_fire", grenade, weapname ); - grenade thread checkgrenadefordud( weapname, 0, self ); - grenade thread watchforscriptexplosion( weapname, 0, self ); - } -} - -grenade_safe_to_throw( player, weapname ) //checked matches cerberus output -{ - if ( isDefined( level.grenade_safe_to_throw ) ) - { - return self [[ level.grenade_safe_to_throw ]]( player, weapname ); - } - return 1; -} - -grenade_safe_to_bounce( player, weapname ) //checked matches cerberus output -{ - if ( isDefined( level.grenade_safe_to_bounce ) ) - { - return self [[ level.grenade_safe_to_bounce ]]( player, weapname ); - } - return 1; -} - -makegrenadedudanddestroy() //checked matches cerberus output -{ - self endon( "death" ); - self notify( "grenade_dud" ); - self makegrenadedud(); - wait 3; - if ( isDefined( self ) ) - { - self delete(); - } -} - -checkgrenadefordud( weapname, isthrowngrenade, player ) //checked matches cerberus output -{ - self endon( "death" ); - player endon( "zombify" ); - if ( !self grenade_safe_to_throw( player, weapname ) ) - { - self thread makegrenadedudanddestroy(); - return; - } - for ( ;; ) - { - self waittill_any_timeout( 0.25, "grenade_bounce", "stationary" ); - if ( !self grenade_safe_to_bounce( player, weapname ) ) - { - self thread makegrenadedudanddestroy(); - return; - } - } -} - -wait_explode() //checked matches cerberus output -{ - self endon( "grenade_dud" ); - self endon( "done" ); - self waittill( "explode", position ); - level.explode_position = position; - level.explode_position_valid = 1; - self notify( "done" ); -} - -wait_timeout( time ) //checked matches cerberus output -{ - self endon( "grenade_dud" ); - self endon( "done" ); - wait time; - self notify( "done" ); -} - -wait_for_explosion( time ) //checked changed to match cerberus output -{ - level.explode_position = ( 0, 0, 0 ); - level.explode_position_valid = 0; - self thread wait_explode(); - self thread wait_timeout( time ); - self waittill( "done" ); - self notify( "death_or_explode", level.explode_position_valid, level.explode_position ); -} - -watchforscriptexplosion( weapname, isthrowngrenade, player ) //checked changed to match cerberus output -{ - self endon( "grenade_dud" ); - if ( is_lethal_grenade( weapname ) || is_grenade_launcher( weapname ) ) - { - self thread wait_for_explosion( 20 ); - self waittill( "death_or_explode", exploded, position ); - if ( exploded ) - { - level notify( "grenade_exploded", position, 256, 300, 75 ); - } - } -} - -get_nonalternate_weapon( altweapon ) //checked changed to match cerberus output -{ - if ( is_alt_weapon( altweapon ) ) - { - alt = weaponaltweaponname( altweapon ); - if ( alt == "none" ) - { - primaryweapons = self getweaponslistprimaries(); - alt = primaryweapons[ 0 ]; - foreach ( weapon in primaryweapons ) - { - if ( weaponaltweaponname( weapon ) == altweapon ) - { - alt = weapon; - break; - } - } - } - return alt; - } - return altweapon; -} - -switch_from_alt_weapon( current_weapon ) //checked changed to match cerberus output -{ - if ( is_alt_weapon( current_weapon ) ) - { - alt = weaponaltweaponname( current_weapon ); - if ( alt == "none" ) - { - primaryweapons = self getweaponslistprimaries(); - alt = primaryweapons[ 0 ]; - foreach ( weapon in primaryweapons ) - { - if ( weaponaltweaponname( weapon ) == current_weapon ) - { - alt = weapon; - break; - } - } - } - self switchtoweaponimmediate( alt ); - self waittill_notify_or_timeout( "weapon_change_complete", 1 ); - return alt; - } - return current_weapon; -} - -give_fallback_weapon() //checked matches cerberus output -{ - self giveweapon( "zombie_fists_zm" ); - self switchtoweapon( "zombie_fists_zm" ); -} - -take_fallback_weapon() //checked matches cerberus output -{ - if ( self hasweapon( "zombie_fists_zm" ) ) - { - self takeweapon( "zombie_fists_zm" ); - } -} - -switch_back_primary_weapon( oldprimary ) //checked changed to match cerberus output -{ - if ( is_true( self.laststand ) ) - { - return; - } - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( oldprimary ) && isinarray( primaryweapons, oldprimary ) ) - { - self switchtoweapon( oldprimary ); - } - else if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } -} - -add_retrievable_knife_init_name( name ) //checked matches cerberus output -{ - if ( !isDefined( level.retrievable_knife_init_names ) ) - { - level.retrievable_knife_init_names = []; - } - level.retrievable_knife_init_names[ level.retrievable_knife_init_names.size ] = name; -} - -watchweaponusagezm() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon( "game_ended" ); - for ( ;; ) - { - self waittill( "weapon_fired", curweapon ); - self.lastfiretime = getTime(); - self.hasdonecombat = 1; - if ( isDefined( self.hitsthismag[ curweapon ] ) ) - { - self thread updatemagshots( curweapon ); - } - switch( weaponclass( curweapon ) ) - { - case "rifle": - if ( curweapon == "crossbow_explosive_mp" ) - { - level.globalcrossbowfired++; - self addweaponstat( curweapon, "shots", 1 ); - self thread begingrenadetracking(); - break; - } - case "pistol": - case "pistol spread": - case "pistolspread": - case "mg": - case "smg": - case "spread": - self trackweaponfire( curweapon ); - level.globalshotsfired++; - break; - case "grenade": - case "rocketlauncher": - if ( is_alt_weapon( curweapon ) ) - { - curweapon = weaponaltweaponname( curweapon ); - } - self addweaponstat( curweapon, "shots", 1 ); - break; - default: - - switch( curweapon ) - { - case "m202_flash_mp": - case "m220_tow_mp": - case "m32_mp": - case "minigun_mp": - case "mp40_blinged_mp": - self.usedkillstreakweapon[ curweapon ] = 1; - break; - default: - - } - } - } -} - -trackweaponzm() //checked changed to match cerberus output -{ - self.currentweapon = self getcurrentweapon(); - self.currenttime = getTime(); - spawnid = getplayerspawnid( self ); - while ( 1 ) - { - event = self waittill_any_return( "weapon_change", "death", "disconnect", "bled_out" ); - newtime = getTime(); - if ( event == "weapon_change" ) - { - newweapon = self getcurrentweapon(); - if ( newweapon != "none" && newweapon != self.currentweapon ) - { - updatelastheldweapontimingszm( newtime ); - self.currentweapon = newweapon; - self.currenttime = newtime; - } - } - if ( event != "disconnect" ) - { - updateweapontimingszm( newtime ); - } - //return; //changed at own discretion - } -} - -updatelastheldweapontimingszm( newtime ) //checked matches cerberus output -{ - if ( isDefined( self.currentweapon ) && isDefined( self.currenttime ) ) - { - curweapon = self.currentweapon; - totaltime = int( ( newtime - self.currenttime ) / 1000 ); - if ( totaltime > 0 ) - { - if ( is_alt_weapon( curweapon ) ) - { - curweapon = weaponaltweaponname( curweapon ); - } - self addweaponstat( curweapon, "timeUsed", totaltime ); - } - } -} - -updateweapontimingszm( newtime ) //checked matches cerberus output -{ - if ( self is_bot() ) - { - return; - } - updatelastheldweapontimingszm( newtime ); - if ( !isDefined( self.staticweaponsstarttime ) ) - { - return; - } - totaltime = int( ( newtime - self.staticweaponsstarttime ) / 1000 ); - if ( totaltime < 0 ) - { - return; - } - self.staticweaponsstarttime = newtime; -} - -watchweaponchangezm() //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self.lastdroppableweapon = self getcurrentweapon(); - self.hitsthismag = []; - weapon = self getcurrentweapon(); - if ( isDefined( weapon ) && weapon != "none" && !isDefined( self.hitsthismag[ weapon ] ) ) - { - self.hitsthismag[ weapon ] = weaponclipsize( weapon ); - } - while ( 1 ) - { - previous_weapon = self getcurrentweapon(); - self waittill( "weapon_change", newweapon ); - if ( maydropweapon( newweapon ) ) - { - self.lastdroppableweapon = newweapon; - } - if ( newweapon != "none" ) - { - if ( !isDefined( self.hitsthismag[ newweapon ] ) ) - { - self.hitsthismag[ newweapon ] = weaponclipsize( newweapon ); - } - } - } -} - -weaponobjects_on_player_connect_override_internal() //checked changed to match cerberus output -{ - self maps/mp/gametypes_zm/_weaponobjects::createbasewatchers(); - self createclaymorewatcher_zm(); - for ( i = 0; i < level.retrievable_knife_init_names.size; i++ ) - { - self createballisticknifewatcher_zm( level.retrievable_knife_init_names[ i ], level.retrievable_knife_init_names[ i ] + "_zm" ); - } - self maps/mp/gametypes_zm/_weaponobjects::setupretrievablewatcher(); - if ( !isDefined( self.weaponobjectwatcherarray ) ) - { - self.weaponobjectwatcherarray = []; - } - self thread maps/mp/gametypes_zm/_weaponobjects::watchweaponobjectspawn(); - self thread maps/mp/gametypes_zm/_weaponobjects::watchweaponprojectileobjectspawn(); - self thread maps/mp/gametypes_zm/_weaponobjects::deleteweaponobjectson(); - self.concussionendtime = 0; - self.hasdonecombat = 0; - self.lastfiretime = 0; - self thread watchweaponusagezm(); - self thread maps/mp/gametypes_zm/_weapons::watchgrenadeusage(); - self thread maps/mp/gametypes_zm/_weapons::watchmissileusage(); - self thread watchweaponchangezm(); - self thread maps/mp/gametypes_zm/_weapons::watchturretuse(); - self thread trackweaponzm(); - self notify( "weapon_watchers_created" ); -} - -weaponobjects_on_player_connect_override() //checked matches cerberus output -{ - add_retrievable_knife_init_name( "knife_ballistic" ); - add_retrievable_knife_init_name( "knife_ballistic_upgraded" ); - onplayerconnect_callback( ::weaponobjects_on_player_connect_override_internal ); -} - -createclaymorewatcher_zm() //checked changed to match cerberus output -{ - watcher = self maps/mp/gametypes_zm/_weaponobjects::createuseweaponobjectwatcher( "claymore", "claymore_zm", self.team ); - watcher.onspawnretrievetriggers = maps/mp/zombies/_zm_weap_claymore::on_spawn_retrieve_trigger; - watcher.adjusttriggerorigin = maps/mp/zombies/_zm_weap_claymore::adjust_trigger_origin; - watcher.pickup = level.pickup_claymores; - watcher.pickup_trigger_listener = level.pickup_claymores_trigger_listener; - watcher.skip_weapon_object_damage = 1; - watcher.headicon = 0; - watcher.watchforfire = 1; - watcher.detonate = ::claymoredetonate; - watcher.ondamage = level.claymores_on_damage; -} - -createballisticknifewatcher_zm( name, weapon ) //checked changed to match cerberus output -{ - watcher = self maps/mp/gametypes_zm/_weaponobjects::createuseweaponobjectwatcher( name, weapon, self.team ); - watcher.onspawn = maps/mp/zombies/_zm_weap_ballistic_knife::on_spawn; - watcher.onspawnretrievetriggers = maps/mp/zombies/_zm_weap_ballistic_knife::on_spawn_retrieve_trigger; - watcher.storedifferentobject = 1; - watcher.headicon = 0; -} - -isempweapon( weaponname ) //checked changed at own discretion -{ - if ( isDefined( weaponname ) && weaponname == "emp_grenade_zm" ) - { - return 1; - } - return 0; -} - -claymoredetonate( attacker, weaponname ) //checked matches cerberus output -{ - from_emp = isempweapon( weaponname ); - if ( from_emp ) - { - self delete(); - return; - } - if ( isDefined( attacker ) ) - { - self detonate( attacker ); - } - else if ( isDefined( self.owner ) && isplayer( self.owner ) ) - { - self detonate( self.owner ); - } - else - { - self detonate(); - } -} - -default_check_firesale_loc_valid_func() //checked matches cerberus output -{ - return 1; -} - -add_zombie_weapon( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp, ammo_cost, create_vox ) //checked matches cerberus output -{ - if ( isDefined( level.zombie_include_weapons ) && !isDefined( level.zombie_include_weapons[ weapon_name ] ) ) - { - return; - } - table = "mp/zombiemode.csv"; - table_cost = tablelookup( table, 0, weapon_name, 1 ); - table_ammo_cost = tablelookup( table, 0, weapon_name, 2 ); - if ( isDefined( table_cost ) && table_cost != "" ) - { - cost = round_up_to_ten( int( table_cost ) ); - } - if ( isDefined( table_ammo_cost ) && table_ammo_cost != "" ) - { - ammo_cost = round_up_to_ten( int( table_ammo_cost ) ); - } - precachestring( hint ); - struct = spawnstruct(); - if ( !isDefined( level.zombie_weapons ) ) - { - level.zombie_weapons = []; - } - if ( !isDefined( level.zombie_weapons_upgraded ) ) - { - level.zombie_weapons_upgraded = []; - } - if ( isDefined( upgrade_name ) ) - { - level.zombie_weapons_upgraded[ upgrade_name ] = weapon_name; - } - - struct.weapon_name = weapon_name; - struct.upgrade_name = upgrade_name; - struct.weapon_classname = "weapon_" + weapon_name; - struct.hint = hint; - struct.cost = cost; - struct.vox = weaponvo; - struct.vox_response = weaponvoresp; - struct.is_in_box = level.zombie_include_weapons[ weapon_name ]; - if ( !isDefined( ammo_cost ) ) - { - ammo_cost = round_up_to_ten( int( cost * 0.5 ) ); - } - struct.ammo_cost = ammo_cost; - - - level.zombie_weapons[ weapon_name ] = struct; - if ( is_true( level.zombiemode_reusing_pack_a_punch ) && isDefined( upgrade_name ) ) - { - add_attachments( weapon_name, upgrade_name ); - } - if ( isDefined( create_vox ) ) - { - level.vox maps/mp/zombies/_zm_audio::zmbvoxadd( "player", "weapon_pickup", weapon_name, weaponvo, undefined ); - } -} - -add_attachments( weapon_name, upgrade_name ) //checked does not match cerberus output did not change -{ - table = "zm/pap_attach.csv"; - if ( isDefined( level.weapon_attachment_table ) ) - { - table = level.weapon_attachment_table; - } - row = tablelookuprownum( table, 0, upgrade_name ); - if ( row > -1 ) - { - level.zombie_weapons[ weapon_name ].default_attachment = TableLookUp( table, 0, upgrade_name, 1 ); - level.zombie_weapons[ weapon_name ].addon_attachments = []; - index = 2; - next_addon = TableLookUp( table, 0, upgrade_name, index ); - - while ( isdefined( next_addon ) && next_addon.size > 0 ) - { - level.zombie_weapons[ weapon_name ].addon_attachments[ level.zombie_weapons[ weapon_name ].addon_attachments.size ] = next_addon; - index++; - next_addon = TableLookUp( table, 0, upgrade_name, index ); - } - } -} - -default_weighting_func() //checked matches cerberus output -{ - return 1; -} - -default_tesla_weighting_func() //checked changed to match cerberus output -{ - num_to_add = 1; - if ( isDefined( level.pulls_since_last_tesla_gun ) ) - { - if ( isDefined( level.player_drops_tesla_gun ) && level.player_drops_tesla_gun == 1 ) - { - num_to_add += int( 0.2 * level.zombie_include_weapons.size ); - } - if ( !isDefined( level.player_seen_tesla_gun ) || level.player_seen_tesla_gun == 0 ) - { - if ( level.round_number > 10 ) - { - num_to_add += int( 0.2 * level.zombie_include_weapons.size ); - } - else if ( level.round_number > 5 ) - { - num_to_add += int( 0.15 * level.zombie_include_weapons.size ); - } - } - } - return num_to_add; -} - -default_1st_move_weighting_func() //checked matches cerberus output -{ - if ( level.chest_moves > 0 ) - { - num_to_add = 1; - return num_to_add; - } - else - { - return 0; - } -} - -default_upgrade_weapon_weighting_func() //checked matches cerberus output -{ - if ( level.chest_moves > 1 ) - { - return 1; - } - else - { - return 0; - } -} - -default_cymbal_monkey_weighting_func() //checked changed to match cerberus output -{ - players = get_players(); - count = 0; - for ( i = 0; i < players.size; i++ ) - { - if ( players[ i ] has_weapon_or_upgrade( "cymbal_monkey_zm" ) ) - { - count++; - } - } - if ( count > 0 ) - { - return 1; - } - else if ( level.round_number < 10 ) - { - return 3; - } - else - { - return 5; - } -} - -is_weapon_included( weapon_name ) //checked matches cerberus output -{ - if ( !isDefined( level.zombie_weapons ) ) - { - return 0; - } - return isDefined( level.zombie_weapons[ weapon_name ] ); -} - -is_weapon_or_base_included( weapon_name ) //checked matches cerberus output -{ - if ( !isDefined( level.zombie_weapons ) ) - { - return 0; - } - if ( isDefined( level.zombie_weapons[ weapon_name ] ) ) - { - return 1; - } - base = get_base_weapon_name( weapon_name, 1 ); - if ( isDefined( level.zombie_weapons[ base ] ) ) - { - return 1; - } - return 0; -} - -include_zombie_weapon( weapon_name, in_box, collector, weighting_func ) //checked matches cerberus output -{ - if ( !isDefined( level.zombie_include_weapons ) ) - { - level.zombie_include_weapons = []; - } - if ( !isDefined( in_box ) ) - { - in_box = 1; - } - - level.zombie_include_weapons[ weapon_name ] = in_box; - precacheitem( weapon_name ); - if ( !isDefined( weighting_func ) ) - { - level.weapon_weighting_funcs[ weapon_name ] = ::default_weighting_func; - } - else - { - level.weapon_weighting_funcs[ weapon_name ] = weighting_func; - } -} - -init_weapons() //checked matches cerberus output -{ - if ( isdefined( level._zombie_custom_add_weapons ) ) - { - [[ level._zombie_custom_add_weapons ]](); - } - precachemodel( "zombie_teddybear" ); -} - -add_limited_weapon( weapon_name, amount ) //checked matches cerberus output -{ - if ( !isDefined( level.limited_weapons ) ) - { - level.limited_weapons = []; - } - level.limited_weapons[ weapon_name ] = amount; -} - -limited_weapon_below_quota( weapon, ignore_player, pap_triggers ) //checked changed to match cerberus output -{ - if ( isDefined( level.limited_weapons[ weapon ] ) ) - { - if ( !isDefined( pap_triggers ) ) - { - if ( !isDefined( level.pap_triggers ) ) - { - pap_triggers = getentarray( "specialty_weapupgrade", "script_noteworthy" ); - } - else - { - pap_triggers = level.pap_triggers; - } - } - if ( is_true( level.no_limited_weapons ) ) - { - return 0; - } - upgradedweapon = weapon; - if ( isDefined( level.zombie_weapons[ weapon ] ) && isDefined( level.zombie_weapons[ weapon ].upgrade_name ) ) - { - upgradedweapon = level.zombie_weapons[ weapon ].upgrade_name; - } - players = get_players(); - count = 0; - limit = level.limited_weapons[ weapon ]; - i = 0; - while ( i < players.size) - { - if ( isDefined( ignore_player ) && ignore_player == players[ i ] ) - { - i++; - continue; - } - if ( players[ i ] has_weapon_or_upgrade( weapon ) ) - { - count++; - if ( count >= limit ) - { - return 0; - } - } - i++; - } - for ( k = 0; k < pap_triggers.size; k++ ) - { - if ( isDefined( pap_triggers[ k ].current_weapon ) && pap_triggers[ k ].current_weapon == weapon || isDefined( pap_triggers[ k ].current_weapon ) && pap_triggers[ k ].current_weapon == upgradedweapon ) - { - count++; - if ( count >= limit ) - { - return 0; - } - } - } - for ( chestindex = 0; chestindex < level.chests.size; chestindex++ ) - { - if ( isDefined( level.chests[ chestindex ].zbarrier.weapon_string ) && level.chests[ chestindex ].zbarrier.weapon_string == weapon ) - { - count++; - if ( count >= limit ) - { - return 0; - } - } - } - if ( isDefined( level.custom_limited_weapon_checks ) ) - { - foreach ( check in level.custom_limited_weapon_checks ) - { - count = count + [[ check ]]( weapon ); - } - if ( count >= limit ) - { - return 0; - } - } - if ( isDefined( level.random_weapon_powerups ) ) - { - for ( powerupindex = 0; powerupindex < level.random_weapon_powerups.size; powerupindex++ ) - { - if ( isDefined( level.random_weapon_powerups[ powerupindex ] ) && level.random_weapon_powerups[ powerupindex ].base_weapon == weapon ) - { - count++; - if ( count >= limit ) - { - return 0; - } - } - } - } - } - return 1; -} - -add_custom_limited_weapon_check( callback ) //checked matches cerberus output -{ - if ( !isDefined( level.custom_limited_weapon_checks ) ) - { - level.custom_limited_weapon_checks = []; - } - level.custom_limited_weapon_checks[ level.custom_limited_weapon_checks.size ] = callback; -} - -add_weapon_to_content( weapon_name, package ) //checked matches cerberus output -{ - if ( !isDefined( level.content_weapons ) ) - { - level.content_weapons = []; - } - level.content_weapons[ weapon_name ] = package; -} - -player_can_use_content( weapon ) //checked matches cerberus output -{ - if ( isDefined( level.content_weapons ) ) - { - if ( isDefined( level.content_weapons[ weapon ] ) ) - { - return self hasdlcavailable( level.content_weapons[ weapon ] ); - } - } - return 1; -} - -init_spawnable_weapon_upgrade() //checked partially changed to match cerberus output -{ - spawn_list = []; - spawnable_weapon_spawns = getstructarray( "weapon_upgrade", "targetname" ); - spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "bowie_upgrade", "targetname" ), 1, 0 ); - spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "sickle_upgrade", "targetname" ), 1, 0 ); - spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "tazer_upgrade", "targetname" ), 1, 0 ); - spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "buildable_wallbuy", "targetname" ), 1, 0 ); - if ( !is_true( level.headshots_only ) ) - { - spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "claymore_purchase", "targetname" ), 1, 0 ); - } - match_string = ""; - location = level.scr_zm_map_start_location; - if ( location == "default" || location == "" && isDefined( level.default_start_location ) ) - { - location = level.default_start_location; - } - match_string = level.scr_zm_ui_gametype; - if ( location != "" ) - { - match_string = match_string + "_" + location; - } - match_string_plus_space = " " + match_string; - i = 0; - while ( i < spawnable_weapon_spawns.size ) - { - spawnable_weapon = spawnable_weapon_spawns[ i ]; - if ( isDefined( spawnable_weapon.zombie_weapon_upgrade ) && spawnable_weapon.zombie_weapon_upgrade == "sticky_grenade_zm" && is_true( level.headshots_only ) ) - { - i++; - continue; - } - if ( !isDefined( spawnable_weapon.script_noteworthy ) || spawnable_weapon.script_noteworthy == "" ) - { - spawn_list[ spawn_list.size ] = spawnable_weapon; - i++; - continue; - } - matches = strtok( spawnable_weapon.script_noteworthy, "," ); - for ( j = 0; j < matches.size; j++ ) - { - if ( matches[ j ] == match_string || matches[ j ] == match_string_plus_space ) - { - spawn_list[ spawn_list.size ] = spawnable_weapon; - } - } - i++; - } - tempmodel = spawn( "script_model", ( 0, 0, 0 ) ); - i = 0; - while ( i < spawn_list.size ) - { - clientfieldname = spawn_list[ i ].zombie_weapon_upgrade + "_" + spawn_list[ i ].origin; - numbits = 2; - if ( isDefined( level._wallbuy_override_num_bits ) ) - { - numbits = level._wallbuy_override_num_bits; - } - registerclientfield( "world", clientfieldname, 1, numbits, "int" ); - target_struct = getstruct( spawn_list[ i ].target, "targetname" ); - if ( spawn_list[ i ].targetname == "buildable_wallbuy" ) - { - bits = 4; - if ( isDefined( level.buildable_wallbuy_weapons ) ) - { - bits = getminbitcountfornum( level.buildable_wallbuy_weapons.size + 1 ); - } - registerclientfield( "world", clientfieldname + "_idx", 12000, bits, "int" ); - spawn_list[ i ].clientfieldname = clientfieldname; - i++; - continue; - } - precachemodel( target_struct.model ); - unitrigger_stub = spawnstruct(); - unitrigger_stub.origin = spawn_list[ i ].origin; - unitrigger_stub.angles = spawn_list[ i ].angles; - tempmodel.origin = spawn_list[ i ].origin; - tempmodel.angles = spawn_list[ i ].angles; - mins = undefined; - maxs = undefined; - absmins = undefined; - absmaxs = undefined; - tempmodel setmodel( target_struct.model ); - tempmodel useweaponhidetags( spawn_list[ i ].zombie_weapon_upgrade ); - mins = tempmodel getmins(); - maxs = tempmodel getmaxs(); - absmins = tempmodel getabsmins(); - absmaxs = tempmodel getabsmaxs(); - bounds = absmaxs - absmins; - unitrigger_stub.script_length = bounds[ 0 ] * 0.25; - unitrigger_stub.script_width = bounds[ 1 ]; - unitrigger_stub.script_height = bounds[ 2 ]; - unitrigger_stub.origin -= anglesToRight( unitrigger_stub.angles ) * ( unitrigger_stub.script_length * 0.4 ); - unitrigger_stub.target = spawn_list[ i ].target; - unitrigger_stub.targetname = spawn_list[ i ].targetname; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - if ( spawn_list[ i ].targetname == "weapon_upgrade" ) - { - unitrigger_stub.cost = get_weapon_cost( spawn_list[ i ].zombie_weapon_upgrade ); - if ( !is_true( level.monolingustic_prompt_format ) ) - { - unitrigger_stub.hint_string = get_weapon_hint( spawn_list[ i ].zombie_weapon_upgrade ); - unitrigger_stub.hint_parm1 = unitrigger_stub.cost; - } - else - { - unitrigger_stub.hint_parm1 = get_weapon_display_name( spawn_list[ i ].zombie_weapon_upgrade ); - if ( !isDefined( unitrigger_stub.hint_parm1 ) || unitrigger_stub.hint_parm1 == "" || unitrigger_stub.hint_parm1 == "none" ) - { - unitrigger_stub.hint_parm1 = "missing weapon name " + spawn_list[ i ].zombie_weapon_upgrade; - } - unitrigger_stub.hint_parm2 = unitrigger_stub.cost; - unitrigger_stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; - } - } - unitrigger_stub.weapon_upgrade = spawn_list[ i ].zombie_weapon_upgrade; - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.require_look_at = 1; - if ( isDefined( spawn_list[ i ].require_look_from ) && spawn_list[ i ].require_look_from ) - { - unitrigger_stub.require_look_from = 1; - } - unitrigger_stub.zombie_weapon_upgrade = spawn_list[ i ].zombie_weapon_upgrade; - unitrigger_stub.clientfieldname = clientfieldname; - maps/mp/zombies/_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - if ( is_melee_weapon( unitrigger_stub.zombie_weapon_upgrade ) ) - { - if ( unitrigger_stub.zombie_weapon_upgrade == "tazer_knuckles_zm" && isDefined( level.taser_trig_adjustment ) ) - { - unitrigger_stub.origin += level.taser_trig_adjustment; - } - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think ); - } - else if ( unitrigger_stub.zombie_weapon_upgrade == "claymore_zm" ) - { - unitrigger_stub.prompt_and_visibility_func = ::claymore_unitrigger_update_prompt; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::buy_claymores ); - } - else - { - unitrigger_stub.prompt_and_visibility_func = ::wall_weapon_update_prompt; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think ); - } - spawn_list[ i ].trigger_stub = unitrigger_stub; - i++; - } - level._spawned_wallbuys = spawn_list; - tempmodel delete(); -} - -add_dynamic_wallbuy( weapon, wallbuy, pristine ) //checked partially changed to match cerberus output -{ - spawned_wallbuy = undefined; - for ( i = 0; i < level._spawned_wallbuys.size; i++ ) - { - if ( level._spawned_wallbuys[ i ].target == wallbuy ) - { - spawned_wallbuy = level._spawned_wallbuys[ i ]; - break; - } - } - if ( !isDefined( spawned_wallbuy ) ) - { - return; - } - if ( isDefined( spawned_wallbuy.trigger_stub ) ) - { - return; - } - target_struct = getstruct( wallbuy, "targetname" ); - wallmodel = spawn_weapon_model( weapon, undefined, target_struct.origin, target_struct.angles ); - clientfieldname = spawned_wallbuy.clientfieldname; - model = getweaponmodel( weapon ); - unitrigger_stub = spawnstruct(); - unitrigger_stub.origin = target_struct.origin; - unitrigger_stub.angles = target_struct.angles; - wallmodel.origin = target_struct.origin; - wallmodel.angles = target_struct.angles; - mins = undefined; - maxs = undefined; - absmins = undefined; - absmaxs = undefined; - wallmodel setmodel( model ); - wallmodel useweaponhidetags( weapon ); - mins = wallmodel getmins(); - maxs = wallmodel getmaxs(); - absmins = wallmodel getabsmins(); - absmaxs = wallmodel getabsmaxs(); - bounds = absmaxs - absmins; - unitrigger_stub.script_length = bounds[ 0 ] * 0.25; - unitrigger_stub.script_width = bounds[ 1 ]; - unitrigger_stub.script_height = bounds[ 2 ]; - unitrigger_stub.origin -= anglesToRight( unitrigger_stub.angles ) * ( unitrigger_stub.script_length * 0.4 ); - unitrigger_stub.target = spawned_wallbuy.target; - unitrigger_stub.targetname = "weapon_upgrade"; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - unitrigger_stub.first_time_triggered = !pristine; - if ( !is_melee_weapon( weapon ) ) - { - if ( pristine || weapon == "claymore_zm" ) - { - unitrigger_stub.hint_string = get_weapon_hint( weapon ); - } - else - { - unitrigger_stub.hint_string = get_weapon_hint_ammo(); - } - unitrigger_stub.cost = get_weapon_cost( weapon ); - unitrigger_stub.hint_parm1 = unitrigger_stub.cost; - } - unitrigger_stub.weapon_upgrade = weapon; - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.require_look_at = 1; - unitrigger_stub.zombie_weapon_upgrade = weapon; - unitrigger_stub.clientfieldname = clientfieldname; - maps/mp/zombies/_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - if ( is_melee_weapon( weapon ) ) - { - if ( weapon == "tazer_knuckles_zm" && isDefined( level.taser_trig_adjustment ) ) - { - unitrigger_stub.origin += level.taser_trig_adjustment; - } - maps/mp/zombies/_zm_melee_weapon::add_stub( unitrigger_stub, weapon ); - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::melee_weapon_think ); - } - else if ( weapon == "claymore_zm" ) - { - unitrigger_stub.prompt_and_visibility_func = ::claymore_unitrigger_update_prompt; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::buy_claymores ); - } - else - { - unitrigger_stub.prompt_and_visibility_func = ::wall_weapon_update_prompt; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think ); - } - spawned_wallbuy.trigger_stub = unitrigger_stub; - weaponidx = undefined; - if ( isDefined( level.buildable_wallbuy_weapons ) ) - { - for ( i = 0; i < level.buildable_wallbuy_weapons.size; i++ ) - { - if ( weapon == level.buildable_wallbuy_weapons[ i ] ) - { - weaponidx = i; - break; - } - } - } - if ( isDefined( weaponidx ) ) - { - level setclientfield( clientfieldname + "_idx", weaponidx + 1 ); - wallmodel delete(); - if ( !pristine ) - { - level setclientfield( clientfieldname, 1 ); - } - } - else - { - level setclientfield( clientfieldname, 1 ); - wallmodel show(); - } -} - -wall_weapon_update_prompt( player ) //checked partially changed to match cerberus output //partially changed at own discretion -{ - weapon = self.stub.zombie_weapon_upgrade; - if ( isDefined( level.monolingustic_prompt_format ) && !level.monolingustic_prompt_format ) - { - player_has_weapon = player has_weapon_or_upgrade( weapon ); - if ( !player_has_weapon && is_true( level.weapons_using_ammo_sharing ) ) - { - shared_ammo_weapon = player get_shared_ammo_weapon( self.zombie_weapon_upgrade ); - if ( isDefined( shared_ammo_weapon ) ) - { - weapon = shared_ammo_weapon; - player_has_weapon = 1; - } - } - if ( !player_has_weapon ) - { - cost = get_weapon_cost( weapon ); - self.stub.hint_string = get_weapon_hint( weapon ); - self sethintstring( self.stub.hint_string, cost ); - } - else if ( is_true( level.use_legacy_weapon_prompt_format ) ) - { - cost = get_weapon_cost( weapon ); - ammo_cost = get_ammo_cost( weapon ); - self.stub.hint_string = get_weapon_hint_ammo(); - self sethintstring( self.stub.hint_string, cost, ammo_cost ); - } - else if ( player has_upgrade( weapon ) ) - { - ammo_cost = get_upgraded_ammo_cost( weapon ); - } - else - { - ammo_cost = get_ammo_cost( weapon ); - } - self.stub.hint_string = &"ZOMBIE_WEAPONAMMOONLY"; - self sethintstring( self.stub.hint_string, ammo_cost ); - } - else if ( !player has_weapon_or_upgrade( weapon ) ) - { - string_override = 0; - if ( is_true( player.pers_upgrades_awarded[ "nube" ] ) ) - { - string_override = maps/mp/zombies/_zm_pers_upgrades_functions::pers_nube_ammo_hint_string( player, weapon ); - } - if ( !string_override ) - { - cost = get_weapon_cost( weapon ); - weapon_display = get_weapon_display_name( weapon ); - if ( !isDefined( weapon_display ) || weapon_display == "" || weapon_display == "none" ) - { - weapon_display = "missing weapon name " + weapon; - } - self.stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; - self sethintstring( self.stub.hint_string, weapon_display, cost ); - } - } - else if ( player has_upgrade( weapon ) ) - { - ammo_cost = get_upgraded_ammo_cost( weapon ); - } - else - { - ammo_cost = get_ammo_cost( weapon ); - } - self.stub.hint_string = &"ZOMBIE_WEAPONAMMOONLY"; - self sethintstring( self.stub.hint_string, ammo_cost ); - self.stub.cursor_hint = "HINT_WEAPON"; - self.stub.cursor_hint_weapon = weapon; - self setcursorhint( self.stub.cursor_hint, self.stub.cursor_hint_weapon ); - return 1; -} - -reset_wallbuy_internal( set_hint_string ) //checked matches cerberus output -{ - if ( isDefined( self.first_time_triggered ) && self.first_time_triggered == 1 ) - { - self.first_time_triggered = 0; - if ( isDefined( self.clientfieldname ) ) - { - level setclientfield( self.clientfieldname, 0 ); - } - if ( set_hint_string ) - { - hint_string = get_weapon_hint( self.zombie_weapon_upgrade ); - cost = get_weapon_cost( self.zombie_weapon_upgrade ); - self sethintstring( hint_string, cost ); - } - } -} - -reset_wallbuys() //checked changed to match cerberus output -{ - weapon_spawns = []; - weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); - melee_and_grenade_spawns = []; - melee_and_grenade_spawns = getentarray( "bowie_upgrade", "targetname" ); - melee_and_grenade_spawns = arraycombine( melee_and_grenade_spawns, getentarray( "sickle_upgrade", "targetname" ), 1, 0 ); - melee_and_grenade_spawns = arraycombine( melee_and_grenade_spawns, getentarray( "tazer_upgrade", "targetname" ), 1, 0 ); - if ( !is_true( level.headshots_only ) ) - { - melee_and_grenade_spawns = arraycombine( melee_and_grenade_spawns, getentarray( "claymore_purchase", "targetname" ), 1, 0 ); - } - for ( i = 0; i < weapon_spawns.size; i++ ) - { - weapon_spawns[ i ] reset_wallbuy_internal( 1 ); - } - for ( i = 0; i < melee_and_grenade_spawns.size; i++ ) - { - melee_and_grenade_spawns[ i ] reset_wallbuy_internal( 0 ); - } - if ( isDefined( level._unitriggers ) ) - { - candidates = []; - for ( i = 0; i < level._unitriggers.trigger_stubs.size; i++ ) - { - stub = level._unitriggers.trigger_stubs[ i ]; - tn = stub.targetname; - if ( tn == "weapon_upgrade" || tn == "bowie_upgrade" || tn == "sickle_upgrade" || tn == "tazer_upgrade" || tn == "claymore_purchase" ) - { - stub.first_time_triggered = 0; - if ( isDefined( stub.clientfieldname ) ) - { - level setclientfield( stub.clientfieldname, 0 ); - } - if ( tn == "weapon_upgrade" ) - { - stub.hint_string = get_weapon_hint( stub.zombie_weapon_upgrade ); - stub.cost = get_weapon_cost( stub.zombie_weapon_upgrade ); - stub.hint_parm1 = stub.cost; - } - } - } - } -} - -init_weapon_upgrade() //checked changed to match cerberus output -{ - init_spawnable_weapon_upgrade(); - weapon_spawns = []; - weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); - for ( i = 0; i < weapon_spawns.size; i++ ) - { - if ( !is_true( level.monolingustic_prompt_format ) ) - { - hint_string = get_weapon_hint( weapon_spawns[ i ].zombie_weapon_upgrade ); - cost = get_weapon_cost( weapon_spawns[ i ].zombie_weapon_upgrade ); - weapon_spawns[ i ] sethintstring( hint_string, cost ); - weapon_spawns[ i ] setcursorhint( "HINT_NOICON" ); - } - else - { - cost = get_weapon_cost( weapon_spawns[ i ].zombie_weapon_upgrade ); - weapon_display = get_weapon_display_name( weapon_spawns[ i ].zombie_weapon_upgrade ); - if ( !isDefined( weapon_display ) || weapon_display == "" || weapon_display == "none" ) - { - weapon_display = "missing weapon name " + weapon_spawns[ i ].zombie_weapon_upgrade; - } - hint_string = &"ZOMBIE_WEAPONCOSTONLY"; - weapon_spawns[ i ] sethintstring( hint_string, weapon_display, cost ); - } - weapon_spawns[ i ] usetriggerrequirelookat(); - weapon_spawns[ i ] thread weapon_spawn_think(); - model = getent( weapon_spawns[ i ].target, "targetname" ); - if ( isDefined( model ) ) - { - model useweaponhidetags( weapon_spawns[ i ].zombie_weapon_upgrade ); - model hide(); - } - } -} - -init_weapon_toggle() //checked changed to match cerberus output -{ - if ( !isDefined( level.magic_box_weapon_toggle_init_callback ) ) - { - return; - } - level.zombie_weapon_toggles = []; - level.zombie_weapon_toggle_max_active_count = 0; - level.zombie_weapon_toggle_active_count = 0; - precachestring( &"ZOMBIE_WEAPON_TOGGLE_DISABLED" ); - precachestring( &"ZOMBIE_WEAPON_TOGGLE_ACTIVATE" ); - precachestring( &"ZOMBIE_WEAPON_TOGGLE_DEACTIVATE" ); - precachestring( &"ZOMBIE_WEAPON_TOGGLE_ACQUIRED" ); - level.zombie_weapon_toggle_disabled_hint = &"ZOMBIE_WEAPON_TOGGLE_DISABLED"; - level.zombie_weapon_toggle_activate_hint = &"ZOMBIE_WEAPON_TOGGLE_ACTIVATE"; - level.zombie_weapon_toggle_deactivate_hint = &"ZOMBIE_WEAPON_TOGGLE_DEACTIVATE"; - level.zombie_weapon_toggle_acquired_hint = &"ZOMBIE_WEAPON_TOGGLE_ACQUIRED"; - precachemodel( "zombie_zapper_cagelight" ); - precachemodel( "zombie_zapper_cagelight_green" ); - precachemodel( "zombie_zapper_cagelight_red" ); - precachemodel( "zombie_zapper_cagelight_on" ); - level.zombie_weapon_toggle_disabled_light = "zombie_zapper_cagelight"; - level.zombie_weapon_toggle_active_light = "zombie_zapper_cagelight_green"; - level.zombie_weapon_toggle_inactive_light = "zombie_zapper_cagelight_red"; - level.zombie_weapon_toggle_acquired_light = "zombie_zapper_cagelight_on"; - weapon_toggle_ents = []; - weapon_toggle_ents = getentarray( "magic_box_weapon_toggle", "targetname" ); - for ( i = 0; i < weapon_toggle_ents.size; i++ ) - { - struct = spawnstruct(); - struct.trigger = weapon_toggle_ents[ i ]; - struct.weapon_name = struct.trigger.script_string; - struct.upgrade_name = level.zombie_weapons[ struct.trigger.script_string ].upgrade_name; - struct.enabled = 0; - struct.active = 0; - struct.acquired = 0; - target_array = []; - target_array = getentarray( struct.trigger.target, "targetname" ); - for ( j = 0; j < target_array.size; j++ ) - { - switch( target_array[ j ].script_string ) - { - case "light": - struct.light = target_array[ j ]; - struct.light setmodel( level.zombie_weapon_toggle_disabled_light ); - break; - case "weapon": - struct.weapon_model = target_array[ j ]; - struct.weapon_model hide(); - break; - } - } - struct.trigger sethintstring( level.zombie_weapon_toggle_disabled_hint ); - struct.trigger setcursorhint( "HINT_NOICON" ); - struct.trigger usetriggerrequirelookat(); - struct thread weapon_toggle_think(); - level.zombie_weapon_toggles[ struct.weapon_name ] = struct; - } - level thread [[ level.magic_box_weapon_toggle_init_callback ]](); -} - -get_weapon_toggle( weapon_name ) //checked changed to match cerberus output -{ - if ( !isDefined( level.zombie_weapon_toggles ) ) - { - return undefined; - } - if ( isDefined( level.zombie_weapon_toggles[ weapon_name ] ) ) - { - return level.zombie_weapon_toggles[ weapon_name ]; - } - keys = getarraykeys( level.zombie_weapon_toggles ); - for ( i = 0; i < keys.size; i++ ) - { - if ( weapon_name == level.zombie_weapon_toggles[ keys[ i ] ].upgrade_name ) - { - return level.zombie_weapon_toggles[ keys[ i ] ]; - } - } - return undefined; -} - -is_weapon_toggle( weapon_name ) //checked matches cerberus output -{ - return isDefined( get_weapon_toggle( weapon_name ) ); -} - -disable_weapon_toggle( weapon_name ) //checked matches cerberus output -{ - toggle = get_weapon_toggle( weapon_name ); - if ( !isDefined( toggle ) ) - { - return; - } - if ( toggle.active ) - { - level.zombie_weapon_toggle_active_count--; - - } - toggle.enabled = 0; - toggle.active = 0; - toggle.light setmodel( level.zombie_weapon_toggle_disabled_light ); - toggle.weapon_model hide(); - toggle.trigger sethintstring( level.zombie_weapon_toggle_disabled_hint ); -} - -enable_weapon_toggle( weapon_name ) //checked matches cerberus output -{ - toggle = get_weapon_toggle( weapon_name ); - if ( !isDefined( toggle ) ) - { - return; - } - toggle.enabled = 1; - toggle.weapon_model show(); - toggle.weapon_model useweaponhidetags( weapon_name ); - deactivate_weapon_toggle( weapon_name ); -} - -activate_weapon_toggle( weapon_name, trig_for_vox ) //checked matches cerberus output -{ - if ( level.zombie_weapon_toggle_active_count >= level.zombie_weapon_toggle_max_active_count ) - { - if ( isDefined( trig_for_vox ) ) - { - trig_for_vox thread maps/mp/zombies/_zm_audio::weapon_toggle_vox( "max" ); - } - return; - } - toggle = get_weapon_toggle( weapon_name ); - if ( !isDefined( toggle ) ) - { - return; - } - if ( isDefined( trig_for_vox ) ) - { - trig_for_vox thread maps/mp/zombies/_zm_audio::weapon_toggle_vox( "activate", weapon_name ); - } - level.zombie_weapon_toggle_active_count++; - toggle.active = 1; - toggle.light setmodel( level.zombie_weapon_toggle_active_light ); - toggle.trigger sethintstring( level.zombie_weapon_toggle_deactivate_hint ); -} - -deactivate_weapon_toggle( weapon_name, trig_for_vox ) //checked matches cerberus output -{ - toggle = get_weapon_toggle( weapon_name ); - if ( !isDefined( toggle ) ) - { - return; - } - if ( isDefined( trig_for_vox ) ) - { - trig_for_vox thread maps/mp/zombies/_zm_audio::weapon_toggle_vox( "deactivate", weapon_name ); - } - if ( toggle.active ) - { - level.zombie_weapon_toggle_active_count--; - - } - toggle.active = 0; - toggle.light setmodel( level.zombie_weapon_toggle_inactive_light ); - toggle.trigger sethintstring( level.zombie_weapon_toggle_activate_hint ); -} - -acquire_weapon_toggle( weapon_name, player ) //checked matches cerberus output -{ - toggle = get_weapon_toggle( weapon_name ); - if ( !isDefined( toggle ) ) - { - return; - } - if ( !toggle.active || toggle.acquired ) - { - return; - } - toggle.acquired = 1; - toggle.light setmodel( level.zombie_weapon_toggle_acquired_light ); - toggle.trigger sethintstring( level.zombie_weapon_toggle_acquired_hint ); - toggle thread unacquire_weapon_toggle_on_death_or_disconnect_thread( player ); -} - -unacquire_weapon_toggle_on_death_or_disconnect_thread( player ) //checked matches cerberus output -{ - self notify( "end_unacquire_weapon_thread" ); - self endon( "end_unacquire_weapon_thread" ); - player waittill_any( "spawned_spectator", "disconnect" ); - unacquire_weapon_toggle( self.weapon_name ); -} - -unacquire_weapon_toggle( weapon_name ) //checked matches cerberus output -{ - toggle = get_weapon_toggle( weapon_name ); - if ( !isDefined( toggle ) ) - { - return; - } - if ( !toggle.active || !toggle.acquired ) - { - return; - } - toggle.acquired = 0; - toggle.light setmodel( level.zombie_weapon_toggle_active_light ); - toggle.trigger sethintstring( level.zombie_weapon_toggle_deactivate_hint ); - toggle notify( "end_unacquire_weapon_thread" ); -} - -weapon_toggle_think() //checked changed to match cerberus output -{ - for ( ;; ) - { - self.trigger waittill( "trigger", player ); - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0.5 ); - continue; - } - if ( !self.enabled || self.acquired ) - { - self.trigger thread maps/mp/zombies/_zm_audio::weapon_toggle_vox( "max" ); - continue; - } - if ( !self.active ) - { - activate_weapon_toggle( self.weapon_name, self.trigger ); - break; - } - deactivate_weapon_toggle( self.weapon_name, self.trigger ); - } -} - -get_weapon_hint( weapon_name ) //checked matches cerberus output -{ - return level.zombie_weapons[ weapon_name ].hint; -} - -get_weapon_cost( weapon_name ) //checked matches cerberus output -{ - return level.zombie_weapons[ weapon_name ].cost; -} - -get_ammo_cost( weapon_name ) //checked matches cerberus output -{ - return level.zombie_weapons[ weapon_name ].ammo_cost; -} - -get_upgraded_ammo_cost( weapon_name ) //checked matches cerberus output -{ - if ( isDefined( level.zombie_weapons[ weapon_name ].upgraded_ammo_cost ) ) - { - return level.zombie_weapons[ weapon_name ].upgraded_ammo_cost; - } - return 4500; -} - -get_weapon_display_name( weapon_name ) //checked changed to match cerberus output -{ - weapon_display = getweapondisplayname( weapon_name ); - if ( !isDefined( weapon_display ) || weapon_display == "" || weapon_display == "none" ) - { - weapon_display = &"MPUI_NONE"; - } - return weapon_display; -} - -get_is_in_box( weapon_name ) //checked matches cerberus output -{ - return level.zombie_weapons[ weapon_name ].is_in_box; -} - -weapon_supports_default_attachment( weaponname ) //checked matches cerberus output -{ - weaponname = get_base_weapon_name( weaponname ); - if ( isDefined( weaponname ) ) - { - attachment = level.zombie_weapons[ weaponname ].default_attachment; - } - return isDefined( attachment ); -} - -default_attachment( weaponname ) //checked matches cerberus output -{ - weaponname = get_base_weapon_name( weaponname ); - if ( isDefined( weaponname ) ) - { - attachment = level.zombie_weapons[ weaponname ].default_attachment; - } - if ( isDefined( attachment ) ) - { - return attachment; - } - else - { - return "none"; - } -} - -weapon_supports_attachments( weaponname ) //checked changed at own discretion -{ - weaponname = get_base_weapon_name( weaponname ); - if ( isDefined( weaponname ) ) - { - attachments = level.zombie_weapons[ weaponname ].addon_attachments; - } - if ( isDefined( attachments ) && attachments.size > 0 ) //was 1 - { - return 1; - } - return 0; -} - -random_attachment( weaponname, exclude ) //checked changed to match cerberus output -{ - lo = 0; - if ( isDefined( level.zombie_weapons[ weaponname ].addon_attachments ) && level.zombie_weapons[ weaponname ].addon_attachments.size > 0 ) - { - attachments = level.zombie_weapons[ weaponname ].addon_attachments; - } - else - { - attachments = getweaponsupportedattachments( weaponname ); - lo = 1; - } - minatt = lo; - if ( isDefined( exclude ) && exclude != "none" ) - { - minatt = lo + 1; - } - if ( attachments.size > minatt ) - { - while ( 1 ) - { - idx = randomint( attachments.size - lo ) + lo; - if ( !isDefined( exclude ) || attachments[ idx ] != exclude ) - { - return attachments[ idx ]; - } - } - } - return "none"; -} - -get_base_name( weaponname ) //checked matches cerberus output -{ - split = strtok( weaponname, "+" ); - if ( split.size > 1 ) - { - return split[ 0 ]; - } - return weaponname; -} - -get_attachment_name( weaponname, att_id ) //checked changed to match cerberus output -{ - split = strtok( weaponname, "+" ); - if ( isDefined( att_id ) ) - { - attachment = att_id + 1; - if ( split.size > attachment ) - { - return split[ attachment ]; - } - } - else if ( split.size > 1 ) - { - att = split[ 1 ]; - for ( idx = 2; split.size > idx; idx++ ) - { - att = ( att + "+" ) + split[ idx ]; - } - return att; - } - return undefined; -} - -get_attachment_index( weapon ) //checked changed to match cerberus output -{ - att = get_attachment_name( weapon ); - if ( att == "none" ) - { - return -1; - } - base = get_base_name( weapon ); - if ( att == level.zombie_weapons[ base ].default_attachment ) - { - return 0; - } - if ( isDefined( level.zombie_weapons[ base ].addon_attachments ) ) - { - for ( i = 0; i < level.zombie_weapons[base].addon_attachments.size; i++ ) - { - if ( level.zombie_weapons[ base ].addon_attachments[ i ] == att ) - { - return i + 1; - } - } - } - return -1; -} - -weapon_supports_this_attachment( weapon, att ) //checked changed to match cerberus output -{ - base = get_base_name( weapon ); - if ( att == level.zombie_weapons[ base ].default_attachment ) - { - return 1; - } - if ( isDefined( level.zombie_weapons[ base ].addon_attachments ) ) - { - for(i = 0; i < level.zombie_weapons[base].addon_attachments.size; i++) - { - if ( level.zombie_weapons[ base ].addon_attachments[ i ] == att ) - { - return 1; - } - } - } - return 0; -} - -has_attachment( weaponname, att ) //checked matches cerberus output -{ - split = strtok( weaponname, "+" ); - idx = 1; - while ( split.size > idx ) - { - if ( att == split[ idx ] ) - { - return 1; - } - } - return 0; -} - -get_base_weapon_name( upgradedweaponname, base_if_not_upgraded ) //checked matches cerberus output -{ - if ( !isDefined( upgradedweaponname ) || upgradedweaponname == "" ) - { - return undefined; - } - upgradedweaponname = tolower( upgradedweaponname ); - upgradedweaponname = get_base_name( upgradedweaponname ); - if ( isDefined( level.zombie_weapons_upgraded[ upgradedweaponname ] ) ) - { - return level.zombie_weapons_upgraded[ upgradedweaponname ]; - } - if ( isDefined( base_if_not_upgraded ) && base_if_not_upgraded ) - { - return upgradedweaponname; - } - return undefined; -} - -get_upgrade_weapon( weaponname, add_attachment ) //checked changed to match cerberus output -{ - rootweaponname = tolower( weaponname ); - rootweaponname = get_base_name( rootweaponname ); - baseweaponname = get_base_weapon_name( rootweaponname, 1 ); - newweapon = rootweaponname; - if ( !is_weapon_upgraded( rootweaponname ) ) - { - newweapon = level.zombie_weapons[ rootweaponname ].upgrade_name; - } - if ( is_true( add_attachment ) && is_true( level.zombiemode_reusing_pack_a_punch ) ) - { - oldatt = get_attachment_name( weaponname ); - att = random_attachment( baseweaponname, oldatt ); - newweapon = newweapon + "+" + att; - } - else if ( isDefined( level.zombie_weapons[ rootweaponname ] ) && isDefined( level.zombie_weapons[ rootweaponname ].default_attachment ) ) - { - att = level.zombie_weapons[ rootweaponname ].default_attachment; - newweapon = newweapon + "+" + att; - } - return newweapon; -} - -can_upgrade_weapon( weaponname ) //checked changed to match cerberus output -{ - if ( !isDefined( weaponname ) || weaponname == "" || weaponname == "zombie_fists_zm" ) - { - return 0; - } - weaponname = tolower( weaponname ); - weaponname = get_base_name( weaponname ); - if ( !is_weapon_upgraded( weaponname ) && isDefined( level.zombie_weapons[ weaponname ].upgrade_name ) ) - { - return 1; - } - if ( is_true( level.zombiemode_reusing_pack_a_punch ) && weapon_supports_attachments( weaponname ) ) - { - return 1; - } - return 0; -} - -will_upgrade_weapon_as_attachment( weaponname ) //checked changed to match cerberus output -{ - if ( !isDefined( weaponname ) || weaponname == "" || weaponname == "zombie_fists_zm" ) - { - return 0; - } - weaponname = tolower( weaponname ); - weaponname = get_base_name( weaponname ); - if ( !is_weapon_upgraded( weaponname ) ) - { - return 0; - } - if ( is_true( level.zombiemode_reusing_pack_a_punch ) && weapon_supports_attachments( weaponname ) ) - { - return 1; - } - return 0; -} - -is_weapon_upgraded( weaponname ) //checked changed to match cerberus output -{ - if ( !isDefined( weaponname ) || weaponname == "" || weaponname == "zombie_fists_zm" ) - { - return 0; - } - weaponname = tolower( weaponname ); - weaponname = get_base_name( weaponname ); - if ( isDefined( level.zombie_weapons_upgraded[ weaponname ] ) ) - { - return 1; - } - return 0; -} - -get_weapon_with_attachments( weaponname ) //checked changed to match cerberus output -{ - if ( self hasweapon( weaponname ) ) - { - return weaponname; - } - if ( is_true( level.zombiemode_reusing_pack_a_punch ) ) - { - weaponname = tolower( weaponname ); - weaponname = get_base_name( weaponname ); - weapons = self getweaponslist( 1 ); - foreach ( weapon in weapons ) - { - weapon = tolower( weapon ); - weapon_base = get_base_name( weapon ); - if ( weaponname == weapon_base ) - { - return weapon; - } - } - } - return undefined; -} - -has_weapon_or_attachments( weaponname ) //checked changed to match cerberus output -{ - if ( self hasweapon( weaponname ) ) - { - return 1; - } - if ( is_true( level.zombiemode_reusing_pack_a_punch ) ) - { - weaponname = tolower( weaponname ); - weaponname = get_base_name( weaponname ); - weapons = self getweaponslist( 1 ); - foreach ( weapon in weapons ) - { - weapon = tolower( weapon ); - weapon = get_base_name( weapon ); - if ( weaponname == weapon ) - { - return 1; - } - } - } - return 0; -} - -has_upgrade( weaponname ) //checked matches cerberus output -{ - weaponname = get_base_name( weaponname ); - has_upgrade = 0; - if ( isDefined( level.zombie_weapons[ weaponname ] ) && isDefined( level.zombie_weapons[ weaponname ].upgrade_name ) ) - { - has_upgrade = self has_weapon_or_attachments( level.zombie_weapons[ weaponname ].upgrade_name ); - } - if ( !has_upgrade && weaponname == "knife_ballistic_zm" ) - { - has_weapon = self maps/mp/zombies/_zm_melee_weapon::has_upgraded_ballistic_knife(); - } - return has_upgrade; -} - -has_weapon_or_upgrade( weaponname ) //checked changed at own discretion -{ - weaponname = get_base_name( weaponname ); - upgradedweaponname = weaponname; - if ( isDefined( level.zombie_weapons[ weaponname ] ) && isDefined( level.zombie_weapons[ weaponname ].upgrade_name ) ) - { - upgradedweaponname = level.zombie_weapons[ weaponname ].upgrade_name; - } - has_weapon = 0; - if ( isDefined( level.zombie_weapons[ weaponname ] ) ) - { - if ( self has_weapon_or_attachments( weaponname ) || self has_upgrade( weaponname ) ) - { - has_weapon = 1; - } - } - if ( !has_weapon && weaponname == "knife_ballistic_zm" ) - { - has_weapon = self maps/mp/zombies/_zm_melee_weapon::has_any_ballistic_knife(); - } - if ( !has_weapon && is_equipment( weaponname ) ) - { - has_weapon = self is_equipment_active( weaponname ); - } - return has_weapon; -} - -add_shared_ammo_weapon( str_weapon, str_base_weapon ) //checked matches cerberus output -{ - level.zombie_weapons[ str_weapon ].shared_ammo_weapon = str_base_weapon; -} - -get_shared_ammo_weapon( base_weapon ) //checked changed to match cerberus output -{ - base_weapon = get_base_name( base_weapon ); - weapons = self getweaponslist( 1 ); - foreach ( weapon in weapons ) - { - weapon = tolower( weapon ); - weapon = get_base_name( weapon ); - if ( !isdefined( level.zombie_weapons[ weapon ] ) && isdefined( level.zombie_weapons_upgraded[ weapon ] ) ) - { - weapon = level.zombie_weapons_upgraded[ weapon ]; - } - if ( isdefined( level.zombie_weapons[ weapon ] ) && isdefined( level.zombie_weapons[ weapon ].shared_ammo_weapon ) && level.zombie_weapons[ weapon ].shared_ammo_weapon == base_weapon ) - { - return weapon; - } - } - return undefined; -} - -get_player_weapon_with_same_base( weaponname ) //checked changed tp match cerberus output -{ - weaponname = tolower( weaponname ); - weaponname = get_base_name( weaponname ); - retweapon = get_weapon_with_attachments( weaponname ); - if ( !isDefined( retweapon ) ) - { - if ( isDefined( level.zombie_weapons[ weaponname ] ) ) - { - retweapon = get_weapon_with_attachments( level.zombie_weapons[ weaponname ].upgrade_name ); - } - else if ( isDefined( level.zombie_weapons_upgraded[ weaponname ] ) ) - { - return get_weapon_with_attachments( level.zombie_weapons_upgraded[ weaponname ] ); - } - } - return retweapon; -} - -get_weapon_hint_ammo() //checked matches cerberus output -{ - if ( !is_true( level.has_pack_a_punch ) ) - { - return &"ZOMBIE_WEAPONCOSTAMMO"; - } - else - { - return &"ZOMBIE_WEAPONCOSTAMMO_UPGRADE"; - } -} - -weapon_set_first_time_hint( cost, ammo_cost ) //checked matches cerberus output -{ - self sethintstring( get_weapon_hint_ammo(), cost, ammo_cost ); -} - -weapon_spawn_think() //checked changed to match cerberus output -{ - cost = get_weapon_cost( self.zombie_weapon_upgrade ); - ammo_cost = get_ammo_cost( self.zombie_weapon_upgrade ); - is_grenade = weapontype( self.zombie_weapon_upgrade ) == "grenade"; - shared_ammo_weapon = undefined; - second_endon = undefined; - if ( isDefined( self.stub ) ) - { - second_endon = "kill_trigger"; - self.first_time_triggered = self.stub.first_time_triggered; - } - if ( isDefined( self.stub ) && is_true( self.stub.trigger_per_player ) ) - { - self thread decide_hide_show_hint( "stop_hint_logic", second_endon, self.parent_player ); - } - else - { - self thread decide_hide_show_hint( "stop_hint_logic", second_endon ); - } - if ( is_grenade ) - { - self.first_time_triggered = 0; - hint = get_weapon_hint( self.zombie_weapon_upgrade ); - self sethintstring( hint, cost ); - } - else if ( !isDefined( self.first_time_triggered ) ) - { - self.first_time_triggered = 0; - if ( isDefined( self.stub ) ) - { - self.stub.first_time_triggered = 0; - } - } - else if ( self.first_time_triggered ) - { - if ( is_true( level.use_legacy_weapon_prompt_format ) ) - { - self weapon_set_first_time_hint( cost, get_ammo_cost( self.zombie_weapon_upgrade ) ); - } - } - for ( ;; ) - { - self waittill( "trigger", player ); - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0.5 ); - continue; - } - if ( !player can_buy_weapon() ) - { - wait 0.1; - continue; - } - if ( isDefined( self.stub ) && is_true( self.stub.require_look_from ) ) - { - toplayer = player get_eye() - self.origin; - forward = -1 * anglesToRight( self.angles ); - dot = vectordot( toplayer, forward ); - if ( dot < 0 ) - { - continue; - } - } - if ( player has_powerup_weapon() ) - { - wait 0.1; - continue; - } - player_has_weapon = player has_weapon_or_upgrade( self.zombie_weapon_upgrade ); - if ( !player_has_weapon && is_true( level.weapons_using_ammo_sharing ) ) - { - shared_ammo_weapon = player get_shared_ammo_weapon( self.zombie_weapon_upgrade ); - if ( isDefined( shared_ammo_weapon ) ) - { - player_has_weapon = 1; - } - } - if ( is_true( level.pers_upgrade_nube ) ) - { - player_has_weapon = maps/mp/zombies/_zm_pers_upgrades_functions::pers_nube_should_we_give_raygun( player_has_weapon, player, self.zombie_weapon_upgrade ); - } - cost = get_weapon_cost( self.zombie_weapon_upgrade ); - if ( player maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() ) - { - cost = int( cost / 2 ); - } - if ( !player_has_weapon ) - { - if ( player.score >= cost ) - { - if ( self.first_time_triggered == 0 ) - { - self show_all_weapon_buys( player, cost, ammo_cost, is_grenade ); - } - player maps/mp/zombies/_zm_score::minus_to_player_score( cost, 1 ); - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, self.zombie_weapon_upgrade, self.origin, "weapon" ); - level notify( "weapon_bought", player, self.zombie_weapon_upgrade ); - if ( self.zombie_weapon_upgrade == "riotshield_zm" ) - { - player maps/mp/zombies/_zm_equipment::equipment_give( "riotshield_zm" ); - if ( isDefined( player.player_shield_reset_health ) ) - { - player [[ player.player_shield_reset_health ]](); - } - } - else if ( self.zombie_weapon_upgrade == "jetgun_zm" ) - { - player maps/mp/zombies/_zm_equipment::equipment_give( "jetgun_zm" ); - } - else if ( is_lethal_grenade( self.zombie_weapon_upgrade ) ) - { - player takeweapon( player get_player_lethal_grenade() ); - player set_player_lethal_grenade( self.zombie_weapon_upgrade ); - } - str_weapon = self.zombie_weapon_upgrade; - if ( is_true( level.pers_upgrade_nube ) ) - { - str_weapon = maps/mp/zombies/_zm_pers_upgrades_functions::pers_nube_weapon_upgrade_check( player, str_weapon ); - } - player weapon_give( str_weapon ); - player maps/mp/zombies/_zm_stats::increment_client_stat( "wallbuy_weapons_purchased" ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "wallbuy_weapons_purchased" ); - } - else - { - play_sound_on_ent( "no_purchase" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); - } - } - else - { - str_weapon = self.zombie_weapon_upgrade; - if ( isDefined( shared_ammo_weapon ) ) - { - str_weapon = shared_ammo_weapon; - } - if ( is_true( level.pers_upgrade_nube ) ) - { - str_weapon = maps/mp/zombies/_zm_pers_upgrades_functions::pers_nube_weapon_ammo_check( player, str_weapon ); - } - if ( is_true( self.hacked ) ) - { - if ( !player has_upgrade( str_weapon ) ) - { - ammo_cost = 4500; - } - else - { - ammo_cost = get_ammo_cost( str_weapon ); - } - } - else if ( player has_upgrade( str_weapon ) ) - { - ammo_cost = 4500; - } - else - { - ammo_cost = get_ammo_cost( str_weapon ); - } - if ( is_true( player.pers_upgrades_awarded[ "nube" ] ) ) - { - ammo_cost = maps/mp/zombies/_zm_pers_upgrades_functions::pers_nube_override_ammo_cost( player, self.zombie_weapon_upgrade, ammo_cost ); - } - if ( player maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() ) - { - ammo_cost = int( ammo_cost / 2 ); - } - if ( str_weapon == "riotshield_zm" ) - { - play_sound_on_ent( "no_purchase" ); - } - else if ( player.score >= ammo_cost ) - { - if ( self.first_time_triggered == 0 ) - { - self show_all_weapon_buys( player, cost, ammo_cost, is_grenade ); - } - if ( player has_upgrade( str_weapon ) ) - { - player maps/mp/zombies/_zm_stats::increment_client_stat( "upgraded_ammo_purchased" ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "upgraded_ammo_purchased" ); - } - else - { - player maps/mp/zombies/_zm_stats::increment_client_stat( "ammo_purchased" ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "ammo_purchased" ); - } - if ( str_weapon == "riotshield_zm" ) - { - if ( isDefined( player.player_shield_reset_health ) ) - { - ammo_given = player [[ player.player_shield_reset_health ]](); - } - else - { - ammo_given = 0; - } - } - else if ( player has_upgrade( str_weapon ) ) - { - ammo_given = player ammo_give( level.zombie_weapons[ str_weapon ].upgrade_name ); - } - else - { - ammo_given = player ammo_give( str_weapon ); - } - if ( ammo_given ) - { - player maps/mp/zombies/_zm_score::minus_to_player_score( ammo_cost, 1 ); - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, ammo_cost, str_weapon, self.origin, "ammo" ); - } - } - else - { - play_sound_on_ent( "no_purchase" ); - if ( isDefined( level.custom_generic_deny_vo_func ) ) - { - player [[ level.custom_generic_deny_vo_func ]](); - } - else - { - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); - } - } - } - if ( isDefined( self.stub ) && isDefined( self.stub.prompt_and_visibility_func ) ) - { - self [[ self.stub.prompt_and_visibility_func ]]( player ); - } - } -} - -show_all_weapon_buys( player, cost, ammo_cost, is_grenade ) //checked changed to match cerberus output -{ - model = getent( self.target, "targetname" ); - if ( isDefined( model ) ) - { - model thread weapon_show( player ); - } - else if ( isDefined( self.clientfieldname ) ) - { - level setclientfield( self.clientfieldname, 1 ); - } - self.first_time_triggered = 1; - if ( isDefined( self.stub ) ) - { - self.stub.first_time_triggered = 1; - } - if ( !is_grenade ) - { - self weapon_set_first_time_hint( cost, ammo_cost ); - } - if ( !is_true( level.dont_link_common_wallbuys ) && isDefined( level._spawned_wallbuys ) ) - { - i = 0; - while ( i < level._spawned_wallbuys.size ) - { - wallbuy = level._spawned_wallbuys[ i ]; - if ( isDefined( self.stub ) && isDefined( wallbuy.trigger_stub ) && self.stub.clientfieldname == wallbuy.trigger_stub.clientfieldname ) - { - i++; - continue; - } - if ( self.zombie_weapon_upgrade == wallbuy.zombie_weapon_upgrade ) - { - if ( isDefined( wallbuy.trigger_stub ) && isDefined( wallbuy.trigger_stub.clientfieldname ) ) - { - level setclientfield( wallbuy.trigger_stub.clientfieldname, 1 ); - } - else if ( isDefined( wallbuy.target ) ) - { - model = getent( wallbuy.target, "targetname" ); - if ( isDefined( model ) ) - { - model thread weapon_show( player ); - } - } - if ( isDefined( wallbuy.trigger_stub ) ) - { - wallbuy.trigger_stub.first_time_triggered = 1; - if ( isDefined( wallbuy.trigger_stub.trigger ) ) - { - wallbuy.trigger_stub.trigger.first_time_triggered = 1; - if ( !is_grenade ) - { - wallbuy.trigger_stub.trigger weapon_set_first_time_hint( cost, ammo_cost ); - } - } - i++; - continue; - } - if ( !is_grenade ) - { - wallbuy weapon_set_first_time_hint( cost, ammo_cost ); - } - } - i++; - } - } -} - -weapon_show( player ) //checked matches cerberus output -{ - player_angles = vectorToAngles( player.origin - self.origin ); - player_yaw = player_angles[ 1 ]; - weapon_yaw = self.angles[ 1 ]; - if ( isDefined( self.script_int ) ) - { - weapon_yaw -= self.script_int; - } - yaw_diff = absAngleClamp180( player_yaw - weapon_yaw ); - if ( yaw_diff > 0 ) - { - yaw = weapon_yaw - 90; - } - else - { - yaw = weapon_yaw + 90; - } - self.og_origin = self.origin; - self.origin += anglesToForward( ( 0, yaw, 0 ) ) * 8; - wait 0.05; - self show(); - play_sound_at_pos( "weapon_show", self.origin, self ); - time = 1; - if ( !isDefined( self._linked_ent ) ) - { - self moveto( self.og_origin, time ); - } -} - -get_pack_a_punch_weapon_options( weapon ) //checked changed to match cerberus output -{ - if ( !isDefined( self.pack_a_punch_weapon_options ) ) - { - self.pack_a_punch_weapon_options = []; - } - if ( !is_weapon_upgraded( weapon ) ) - { - return self calcweaponoptions( 0, 0, 0, 0, 0 ); - } - if ( isDefined( self.pack_a_punch_weapon_options[ weapon ] ) ) - { - return self.pack_a_punch_weapon_options[ weapon ]; - } - smiley_face_reticle_index = 1; - base = get_base_name( weapon ); - camo_index = 39; - if ( level.script == "zm_prison" ) - { - camo_index = 40; - } - else if ( level.script == "zm_tomb" ) - { - camo_index = 45; - } - lens_index = randomintrange( 0, 6 ); - reticle_index = randomintrange( 0, 16 ); - reticle_color_index = randomintrange( 0, 6 ); - plain_reticle_index = 16; - r = randomint( 10 ); - use_plain = r < 3; - if ( base == "saritch_upgraded_zm" ) - { - reticle_index = smiley_face_reticle_index; - } - else if ( use_plain ) - { - reticle_index = plain_reticle_index; - } - scary_eyes_reticle_index = 8; - purple_reticle_color_index = 3; - if ( reticle_index == scary_eyes_reticle_index ) - { - reticle_color_index = purple_reticle_color_index; - } - letter_a_reticle_index = 2; - pink_reticle_color_index = 6; - if ( reticle_index == letter_a_reticle_index ) - { - reticle_color_index = pink_reticle_color_index; - } - letter_e_reticle_index = 7; - green_reticle_color_index = 1; - if ( reticle_index == letter_e_reticle_index ) - { - reticle_color_index = green_reticle_color_index; - } - self.pack_a_punch_weapon_options[ weapon ] = self calcweaponoptions( camo_index, lens_index, reticle_index, reticle_color_index ); - return self.pack_a_punch_weapon_options[ weapon ]; -} - -weapon_give( weapon, is_upgrade, magic_box, nosound ) //checked changed to match cerberus output -{ - primaryweapons = self getweaponslistprimaries(); - current_weapon = self getcurrentweapon(); - current_weapon = self maps/mp/zombies/_zm_weapons::switch_from_alt_weapon( current_weapon ); - if ( !isDefined( is_upgrade ) ) - { - is_upgrade = 0; - } - weapon_limit = get_player_weapon_limit( self ); - if ( is_equipment( weapon ) ) - { - self maps/mp/zombies/_zm_equipment::equipment_give( weapon ); - } - if ( weapon == "riotshield_zm" ) - { - if ( isDefined( self.player_shield_reset_health ) ) - { - self [[ self.player_shield_reset_health ]](); - } - } - if ( self hasweapon( weapon ) ) - { - if ( issubstr( weapon, "knife_ballistic_" ) ) - { - self notify( "zmb_lost_knife" ); - } - self givestartammo( weapon ); - if ( !is_offhand_weapon( weapon ) ) - { - self switchtoweapon( weapon ); - } - return; - } - if ( is_melee_weapon( weapon ) ) - { - current_weapon = maps/mp/zombies/_zm_melee_weapon::change_melee_weapon( weapon, current_weapon ); - } - else if ( is_lethal_grenade( weapon ) ) - { - old_lethal = self get_player_lethal_grenade(); - if ( isDefined( old_lethal ) && old_lethal != "" ) - { - self takeweapon( old_lethal ); - unacquire_weapon_toggle( old_lethal ); - } - self set_player_lethal_grenade( weapon ); - } - else if ( is_tactical_grenade( weapon ) ) - { - old_tactical = self get_player_tactical_grenade(); - if ( isDefined( old_tactical ) && old_tactical != "" ) - { - self takeweapon( old_tactical ); - unacquire_weapon_toggle( old_tactical ); - } - self set_player_tactical_grenade( weapon ); - } - else if ( is_placeable_mine( weapon ) ) - { - old_mine = self get_player_placeable_mine(); - if ( isDefined( old_mine ) ) - { - self takeweapon( old_mine ); - unacquire_weapon_toggle( old_mine ); - } - self set_player_placeable_mine( weapon ); - } - if ( !is_offhand_weapon( weapon ) ) - { - self maps/mp/zombies/_zm_weapons::take_fallback_weapon(); - } - if ( primaryweapons.size >= weapon_limit ) - { - if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) ) - { - current_weapon = undefined; - } - if ( isDefined( current_weapon ) ) - { - if ( !is_offhand_weapon( weapon ) ) - { - if ( current_weapon == "tesla_gun_zm" ) - { - level.player_drops_tesla_gun = 1; - } - if ( issubstr( current_weapon, "knife_ballistic_" ) ) - { - self notify( "zmb_lost_knife" ); - } - self takeweapon( current_weapon ); - unacquire_weapon_toggle( current_weapon ); - } - } - } - if ( isDefined( level.zombiemode_offhand_weapon_give_override ) ) - { - if ( self [[ level.zombiemode_offhand_weapon_give_override ]]( weapon ) ) - { - return; - } - } - if ( weapon == "cymbal_monkey_zm" ) - { - self maps/mp/zombies/_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); - self play_weapon_vo( weapon, magic_box ); - return; - } - else if ( issubstr( weapon, "knife_ballistic_" ) ) - { - weapon = self maps/mp/zombies/_zm_melee_weapon::give_ballistic_knife( weapon, issubstr( weapon, "upgraded" ) ); - } - else if ( weapon == "claymore_zm" ) - { - self thread maps/mp/zombies/_zm_weap_claymore::claymore_setup(); - self play_weapon_vo( weapon, magic_box ); - return; - } - if ( isDefined( level.zombie_weapons_callbacks ) && isDefined( level.zombie_weapons_callbacks[ weapon ] ) ) - { - self thread [[ level.zombie_weapons_callbacks[ weapon ] ]](); - play_weapon_vo( weapon, magic_box ); - return; - } - if ( !is_true( nosound ) ) - { - self play_sound_on_ent( "purchase" ); - } - if ( weapon == "ray_gun_zm" ) - { - playsoundatposition( "mus_raygun_stinger", ( 0, 0, 0 ) ); - } - if ( !is_weapon_upgraded( weapon ) ) - { - self giveweapon( weapon ); - } - else - { - self giveweapon( weapon, 0, self get_pack_a_punch_weapon_options( weapon ) ); - } - acquire_weapon_toggle( weapon, self ); - self givestartammo( weapon ); - if ( !is_offhand_weapon( weapon ) ) - { - if ( !is_melee_weapon( weapon ) ) - { - self switchtoweapon( weapon ); - } - else - { - self switchtoweapon( current_weapon ); - } - } - self play_weapon_vo( weapon, magic_box ); -} - -play_weapon_vo( weapon, magic_box ) //checked matches cerberus output -{ - if ( isDefined( level._audio_custom_weapon_check ) ) - { - type = self [[ level._audio_custom_weapon_check ]]( weapon, magic_box ); - } - else - { - type = self weapon_type_check( weapon ); - } - if ( type == "crappy" ) - { - return; - } - if ( type != "favorite" && type != "upgrade" ) - { - type = weapon; - } - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", type ); -} - -weapon_type_check( weapon ) //checked matches cerberus output -{ - if ( !isDefined( self.entity_num ) ) - { - return "crappy"; - } - weapon = get_base_name( weapon ); - if ( self is_favorite_weapon( weapon ) ) - { - return "favorite"; - } - if ( issubstr( weapon, "upgraded" ) ) - { - return "upgrade"; - } - else - { - return level.zombie_weapons[ weapon ].vox; - } -} - -get_player_index( player ) //checked matches cerberus output -{ - return player.characterindex; -} - -ammo_give( weapon ) //checked changed to match cerberus output -{ - give_ammo = 0; - if ( !is_offhand_weapon( weapon ) ) - { - weapon = get_weapon_with_attachments( weapon ); - if ( isDefined( weapon ) ) - { - stockmax = 0; - stockmax = weaponstartammo( weapon ); - clipcount = self getweaponammoclip( weapon ); - currstock = self getammocount( weapon ); - if ( ( currstock - clipcount ) >= stockmax ) - { - give_ammo = 0; - } - else - { - give_ammo = 1; - } - } - } - else if ( self has_weapon_or_upgrade( weapon ) ) - { - if ( self getammocount( weapon ) < weaponmaxammo( weapon ) ) - { - give_ammo = 1; - } - } - if ( give_ammo ) - { - self play_sound_on_ent( "purchase" ); - self givemaxammo( weapon ); - alt_weap = weaponaltweaponname( weapon ); - if ( alt_weap != "none" ) - { - self givemaxammo( alt_weap ); - } - return 1; - } - if ( !give_ammo ) - { - return 0; - } -} - -get_player_weapondata( player, weapon ) //checked matches cerberus output -{ - weapondata = []; - if ( !isDefined( weapon ) ) - { - weapondata[ "name" ] = player getcurrentweapon(); - } - else - { - weapondata[ "name" ] = weapon; - } - weapondata[ "dw_name" ] = weapondualwieldweaponname( weapondata[ "name" ] ); - weapondata[ "alt_name" ] = weaponaltweaponname( weapondata[ "name" ] ); - if ( weapondata[ "name" ] != "none" ) - { - weapondata[ "clip" ] = player getweaponammoclip( weapondata[ "name" ] ); - weapondata[ "stock" ] = player getweaponammostock( weapondata[ "name" ] ); - weapondata[ "fuel" ] = player getweaponammofuel( weapondata[ "name" ] ); - weapondata[ "heat" ] = player isweaponoverheating( 1, weapondata[ "name" ] ); - weapondata[ "overheat" ] = player isweaponoverheating( 0, weapondata[ "name" ] ); - } - else - { - weapondata[ "clip" ] = 0; - weapondata[ "stock" ] = 0; - weapondata[ "fuel" ] = 0; - weapondata[ "heat" ] = 0; - weapondata[ "overheat" ] = 0; - } - if ( weapondata[ "dw_name" ] != "none" ) - { - weapondata[ "lh_clip" ] = player getweaponammoclip( weapondata[ "dw_name" ] ); - } - else - { - weapondata[ "lh_clip" ] = 0; - } - if ( weapondata[ "alt_name" ] != "none" ) - { - weapondata[ "alt_clip" ] = player getweaponammoclip( weapondata[ "alt_name" ] ); - weapondata[ "alt_stock" ] = player getweaponammostock( weapondata[ "alt_name" ] ); - } - else - { - weapondata[ "alt_clip" ] = 0; - weapondata[ "alt_stock" ] = 0; - } - return weapondata; -} - -weapon_is_better( left, right ) //checked changed to match cerberus output -{ - if ( left != right ) - { - left_upgraded = !isDefined( level.zombie_weapons[ left ] ); - right_upgraded = !isDefined( level.zombie_weapons[ right ] ); - if ( left_upgraded && right_upgraded ) - { - leftatt = get_attachment_index( left ); - rightatt = get_attachment_index( right ); - return leftatt > rightatt; - } - else if ( left_upgraded ) - { - return 1; - } - } - return 0; -} - -merge_weapons( oldweapondata, newweapondata ) //checked matches cerberus output -{ - weapondata = []; - weapondata[ "name" ] = "none"; - if ( weapon_is_better( oldweapondata[ "name" ], newweapondata[ "name" ] ) ) - { - weapondata[ "name" ] = oldweapondata[ "name" ]; - } - else - { - weapondata[ "name" ] = newweapondata[ "name" ]; - } - name = weapondata[ "name" ]; - dw_name = weapondualwieldweaponname( name ); - alt_name = weaponaltweaponname( name ); - if ( name != "none" ) - { - weapondata[ "clip" ] = newweapondata[ "clip" ] + oldweapondata[ "clip" ]; - weapondata[ "clip" ] = int( min( weapondata[ "clip" ], weaponclipsize( name ) ) ); - weapondata[ "stock" ] = newweapondata[ "stock" ] + oldweapondata[ "stock" ]; - weapondata[ "stock" ] = int( min( weapondata[ "stock" ], weaponmaxammo( name ) ) ); - weapondata[ "fuel" ] = newweapondata[ "fuel" ] + oldweapondata[ "fuel" ]; - weapondata[ "fuel" ] = int( min( weapondata[ "fuel" ], weaponfuellife( name ) ) ); - weapondata[ "heat" ] = int( min( newweapondata[ "heat" ], oldweapondata[ "heat" ] ) ); - weapondata[ "overheat" ] = int( min( newweapondata[ "overheat" ], oldweapondata[ "overheat" ] ) ); - } - if ( dw_name != "none" ) - { - weapondata[ "lh_clip" ] = newweapondata[ "lh_clip" ] + oldweapondata[ "lh_clip" ]; - weapondata[ "lh_clip" ] = int( min( weapondata[ "lh_clip" ], weaponclipsize( dw_name ) ) ); - } - if ( alt_name != "none" ) - { - weapondata[ "alt_clip" ] = newweapondata[ "alt_clip" ] + oldweapondata[ "alt_clip" ]; - weapondata[ "alt_clip" ] = int( min( weapondata[ "alt_clip" ], weaponclipsize( alt_name ) ) ); - weapondata[ "alt_stock" ] = newweapondata[ "alt_stock" ] + oldweapondata[ "alt_stock" ]; - weapondata[ "alt_stock" ] = int( min( weapondata[ "alt_stock" ], weaponmaxammo( alt_name ) ) ); - } - return weapondata; -} - -weapondata_give( weapondata ) //checked matches cerberus output -{ - current = get_player_weapon_with_same_base( weapondata[ "name" ] ); - if ( isDefined( current ) ) - { - curweapondata = get_player_weapondata( self, current ); - self takeweapon( current ); - weapondata = merge_weapons( curweapondata, weapondata ); - } - name = weapondata[ "name" ]; - weapon_give( name, undefined, undefined, 1 ); - dw_name = weapondualwieldweaponname( name ); - alt_name = weaponaltweaponname( name ); - if ( name != "none" ) - { - self setweaponammoclip( name, weapondata[ "clip" ] ); - self setweaponammostock( name, weapondata[ "stock" ] ); - if ( isDefined( weapondata[ "fuel" ] ) ) - { - self setweaponammofuel( name, weapondata[ "fuel" ] ); - } - if ( isDefined( weapondata[ "heat" ] ) && isDefined( weapondata[ "overheat" ] ) ) - { - self setweaponoverheating( weapondata[ "overheat" ], weapondata[ "heat" ], name ); - } - } - if ( dw_name != "none" ) - { - self setweaponammoclip( dw_name, weapondata[ "lh_clip" ] ); - } - if ( alt_name != "none" ) - { - self setweaponammoclip( alt_name, weapondata[ "alt_clip" ] ); - self setweaponammostock( alt_name, weapondata[ "alt_stock" ] ); - } -} - -register_zombie_weapon_callback( str_weapon, func ) //checked matches cerberus output -{ - if ( !isDefined( level.zombie_weapons_callbacks ) ) - { - level.zombie_weapons_callbacks = []; - } - if ( !isDefined( level.zombie_weapons_callbacks[ str_weapon ] ) ) - { - level.zombie_weapons_callbacks[ str_weapon ] = func; - } -} - - - - - - - - - - diff --git a/Zombie Core/patch_zm/maps/mp/zombies/_zm_zonemgr.gsc b/Zombie Core/patch_zm/maps/mp/zombies/_zm_zonemgr.gsc deleted file mode 100644 index 9066293..0000000 --- a/Zombie Core/patch_zm/maps/mp/zombies/_zm_zonemgr.gsc +++ /dev/null @@ -1,1105 +0,0 @@ -//checked include match cerberus output -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - flag_init( "zones_initialized" ); - level.zones = []; - level.zone_flags = []; - level.zone_scanning_active = 0; - if ( !isDefined( level.create_spawner_list_func ) ) - { - level.create_spawner_list_func = ::create_spawner_list; - } -} - -zone_is_enabled( zone_name ) //checked matches cerberus output -{ - if ( !isDefined( level.zones ) || !isDefined( level.zones[ zone_name ] ) || !level.zones[ zone_name ].is_enabled ) - { - return 0; - } - return 1; -} - -get_player_zone() //checked changed to match cerberus output -{ - player_zone = undefined; - keys = getarraykeys( level.zones ); - for ( i = 0; i < keys.size; i++ ) - { - if ( self entity_in_zone( keys[ i ] ) ) - { - player_zone = keys[ i ]; - break; - } - } - return player_zone; -} - -get_zone_from_position( v_pos, ignore_enabled_check ) //checked changed to match cerberus output -{ - zone = undefined; - scr_org = spawn( "script_origin", v_pos ); - keys = getarraykeys(level.zones); - for ( i = 0; i < keys.size; i++ ) - { - if ( scr_org entity_in_zone( keys[ i ], ignore_enabled_check ) ) - { - zone = keys [i ]; - break; - } - } - scr_org delete(); - return zone; -} - -get_zone_magic_boxes( zone_name ) //checked matches cerberus output -{ - if ( isDefined( zone_name ) && !zone_is_enabled( zone_name ) ) - { - return undefined; - } - zone = level.zones[ zone_name ]; - return zone.magic_boxes; -} - -get_zone_zbarriers( zone_name ) //checked matches cerberus output -{ - if ( isDefined( zone_name ) && !zone_is_enabled( zone_name ) ) - { - return undefined; - } - zone = level.zones[ zone_name ]; - return zone.zbarriers; -} - -get_players_in_zone( zone_name, return_players ) //checked changed to match cerberus output -{ - if ( !zone_is_enabled( zone_name ) ) - { - return 0; - } - zone = level.zones[zone_name]; - num_in_zone = 0; - players_in_zone = []; - players = get_players(); - for ( i = 0; i < zone.volumes.size; i++ ) - { - for ( j = 0; j < players.size; j++ ) - { - if ( players[ j ] istouching( zone.volumes[ i ] ) ) - { - num_in_zone++; - players_in_zone[ players_in_zone.size ] = players[ j ]; - } - } - } - if ( isdefined( return_players ) ) - { - return players_in_zone; - } - return num_in_zone; -} - -player_in_zone( zone_name ) //checked changed to match cerberus output -{ - if ( !zone_is_enabled( zone_name ) ) - { - return 0; - } - zone = level.zones[ zone_name ]; - for ( i = 0; i < zone.volumes.size; i++ ) - { - players = get_players(); - for ( j = 0; j < players.size; j++ ) - { - if ( players[ j ] istouching( zone.volumes[ i ] ) && !players[ j ] .sessionstate == "spectator" ) - { - return 1; - } - } - } - return 0; -} - -entity_in_zone( zone_name, ignore_enabled_check ) //checked changed to match cerberus output -{ - if ( !zone_is_enabled( zone_name ) && !is_true( ignore_enabled_check ) ) - { - return 0; - } - zone = level.zones[ zone_name ]; - for ( i = 0; i < zone.volumes.size; i++ ) - { - if ( self istouching( zone.volumes[ i ] ) ) - { - return 1; - } - } - return 0; -} - -deactivate_initial_barrier_goals() //checked changed to match cerberus output -{ - special_goals = getstructarray( "exterior_goal", "targetname" ); - for ( i = 0; i < special_goals.size; i++ ) - { - if ( isdefined( special_goals[ i ].script_noteworthy ) ) - { - special_goals[ i ].is_active = 0; - special_goals[ i ] trigger_off(); - } - } -} - -zone_init( zone_name ) //checked changed to match cerberus output -{ - - if ( isDefined( level.zones[ zone_name ] ) ) - { - return; - } - - level.zones[ zone_name ] = spawnstruct(); - zone = level.zones[ zone_name ]; - zone.is_enabled = 0; - zone.is_occupied = 0; - zone.is_active = 0; - zone.adjacent_zones = []; - zone.is_spawning_allowed = 0; - - spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype(); - for( i = 0; i < spawn_points.size; i++ ) - { - if ( spawn_points[ i ].script_noteworthy == zone_name ) - { - spawn_points[ i ].locked = 0; - } - } - - - zone.volumes = []; - volumes = getentarray( zone_name, "targetname" ); - i = 0; - for ( i = 0; i < volumes.size; i++ ) - { - if ( volumes[ i ].classname == "info_volume" ) - { - zone.volumes[ zone.volumes.size ] = volumes[ i ]; - } - } - if ( isdefined( zone.volumes[ 0 ].target ) ) - { - spots = getstructarray( zone.volumes[ 0 ].target, "targetname" ); - zone.spawn_locations = []; - zone.dog_locations = []; - zone.screecher_locations = []; - zone.avogadro_locations = []; - zone.inert_locations = []; - zone.quad_locations = []; - zone.leaper_locations = []; - zone.brutus_locations = []; - zone.mechz_locations = []; - zone.astro_locations = []; - zone.napalm_locations = []; - zone.zbarriers = []; - zone.magic_boxes = []; - barricades = getstructarray( "exterior_goal", "targetname" ); - box_locs = getstructarray( "treasure_chest_use", "targetname" ); - for (i = 0; i < spots.size; i++) - { - spots[ i ].zone_name = zone_name; - if ( !is_true( spots[ i ].is_blocked ) ) - { - spots[ i ].is_enabled = 1; - } - else - { - spots[ i ].is_enabled = 0; - } - tokens = strtok( spots[ i ].script_noteworthy, " " ); - foreach ( token in tokens ) - { - if ( token == "dog_location" ) - { - zone.dog_locations[ zone.dog_locations.size ] = spots[ i ]; - } - else if ( token == "screecher_location" ) - { - zone.screecher_locations[ zone.screecher_locations.size ] = spots[ i ]; - } - else if ( token == "avogadro_location" ) - { - zone.avogadro_locations[ zone.avogadro_locations.size ] = spots[ i] ; - } - else if ( token == "inert_location" ) - { - zone.inert_locations[ zone.inert_locations.size ] = spots[ i ]; - } - else if ( token == "quad_location" ) - { - zone.quad_locations[ zone.quad_locations.size ] = spots[ i ]; - } - else if ( token == "leaper_location" ) - { - zone.leaper_locations[ zone.leaper_locations.size ] = spots[ i ]; - } - else if ( token == "brutus_location" ) - { - zone.brutus_locations[ zone.brutus_locations.size ] = spots[ i ]; - } - else if ( token == "mechz_location" ) - { - zone.mechz_locations[ zone.mechz_locations.size ] = spots[ i ]; - } - else if ( token == "astro_location" ) - { - zone.astro_locations[ zone.astro_locations.size ] = spots[ i ]; - } - else if ( token == "napalm_location" ) - { - zone.napalm_locations[ zone.napalm_locations.size ] = spots[ i ]; - } - else - { - zone.spawn_locations[ zone.spawn_locations.size ] = spots[ i ]; - } - } - if ( isdefined( spots[ i ].script_string ) ) - { - barricade_id = spots[ i ].script_string; - for ( k = 0; k < barricades.size; k++ ) - { - if ( isdefined( barricades[ k ].script_string ) && barricades[ k ].script_string == barricade_id ) - { - nodes = getnodearray( barricades[ k ].target, "targetname" ); - for ( j = 0; j < nodes.size; j++ ) - { - if ( isdefined( nodes[ j ].type ) && nodes[ j ].type == "Begin" ) - { - spots[ i ].target = nodes[ j ].targetname; - } - } - } - } - } - } - for ( i = 0; i < barricades.size; i++ ) - { - targets = getentarray( barricades[ i ].target, "targetname" ); - for ( j = 0; j < targets.size; j++ ) - { - if ( targets[ j ] iszbarrier() && isdefined( targets[ j ].script_string ) && targets[ j ].script_string == zone_name ) - { - zone.zbarriers[ zone.zbarriers.size ] = targets[ j ]; - } - } - } - for ( i = 0; i < box_locs.size; i++ ) - { - chest_ent = getent( box_locs[ i ].script_noteworthy + "_zbarrier", "script_noteworthy" ); - if ( chest_ent entity_in_zone( zone_name, 1 ) ) - { - zone.magic_boxes[zone.magic_boxes.size] = box_locs[ i ]; - } - } - } -} - -//unused code -/* -reinit_zone_spawners() //checked changed to match cerberus output -{ - zkeys = getarraykeys( level.zones ); - for( i = 0; i < level.zones.size; i++ ) - { - zone = level.zones[ zkeys[ i ] ]; - if ( isdefined( zone.volumes[ 0 ].target ) ) - { - spots = getstructarray( zone.volumes[ 0 ].target, "targetname" ); - zone.spawn_locations = []; - zone.dog_locations = []; - zone.screecher_locations = []; - zone.avogadro_locations = []; - zone.quad_locations = []; - zone.leaper_locations = []; - zone.brutus_locations = []; - zone.mechz_locations = []; - zone.astro_locations = []; - zone.napalm_locations = []; - for ( j = 0; j < spots.size; j++ ) - { - spots[ j ].zone_name = zkeys[ j ]; - if ( isdefined( spots[ j ].is_blocked ) && !spots[ j ].is_blocked ) - { - spots[ j ].is_enabled = 1; - } - else - { - spots[ j ].is_enabled = 0; - } - tokens = strtok( spots[ j ].script_noteworthy, " " ); - foreach ( token in tokens ) - { - if ( token == "dog_location" ) - { - zone.dog_locations[ zone.dog_locations.size ] = spots[ j ]; - } - else if ( token == "screecher_location" ) - { - zone.screecher_locations[ zone.screecher_locations.size ] = spots[ j ]; - } - else if ( token == "avogadro_location" ) - { - zone.avogadro_locations[ zone.avogadro_locations.size ] = spots[ j ]; - } - else if ( token == "quad_location" ) - { - zone.quad_locations[ zone.quad_locations.size ] = spots[ j ]; - } - else if ( token == "leaper_location" ) - { - zone.leaper_locations[ zone.leaper_locations.size ] = spots[ j ]; - } - else if ( token == "brutus_location" ) - { - zone.brutus_locations[ zone.brutus_locations.size ] = spots[ j ]; - } - else if ( token == "mechz_location" ) - { - zone.mechz_locations[ zone.mechz_locations.size ] = spots[ j ]; - } - else if ( token == "astro_location" ) - { - zone.astro_locations[ zone.astro_locations.size ] = spots[ j ]; - } - else if ( token == "napalm_location" ) - { - zone.napalm_locations[ zone.napalm_locations.size ] = spots[ j ]; - } - else - { - zone.spawn_locations[ zone.spawn_locations.size ] = spots[ j ]; - } - } - } - } - } -} -*/ - -enable_zone( zone_name ) //checked changed to match cerberus output -{ - if ( level.zones[ zone_name ].is_enabled ) - { - return; - } - level.zones[ zone_name ].is_enabled = 1; - level.zones[zone_name].is_spawning_allowed = 1; - level notify( zone_name ); - spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype(); - for( i = 0; i < spawn_points.size; i++ ) - { - if ( spawn_points[ i ].script_noteworthy == zone_name ) - { - spawn_points[ i ].locked = 0; - } - } - entry_points = getstructarray( zone_name + "_barriers", "script_noteworthy" ); - for( i = 0; i < entry_points.size; i++ ) - { - entry_points[ i ].is_active = 1; - entry_points[ i ] trigger_on(); - } -} - -make_zone_adjacent( main_zone_name, adj_zone_name, flag_name ) //checked matches cerberus output -{ - main_zone = level.zones[ main_zone_name ]; - if ( !isDefined( main_zone.adjacent_zones[ adj_zone_name ] ) ) - { - main_zone.adjacent_zones[ adj_zone_name ] = spawnstruct(); - adj_zone = main_zone.adjacent_zones[ adj_zone_name ]; - adj_zone.is_connected = 0; - adj_zone.flags_do_or_check = 0; - if ( isarray( flag_name ) ) - { - adj_zone.flags = flag_name; - } - else - { - adj_zone.flags[ 0 ] = flag_name; - } - } - else - { - adj_zone = main_zone.adjacent_zones[ adj_zone_name ]; - size = adj_zone.flags.size; - adj_zone.flags_do_or_check = 1; - adj_zone.flags[ size ] = flag_name; - } -} - -add_zone_flags( wait_flag, add_flags ) //checked changed to match cerberus output -{ - if ( !isarray( add_flags ) ) - { - temp = add_flags; - add_flags = []; - add_flags[ 0 ] = temp; - } - keys = getarraykeys( level.zone_flags ); - i = 0; - for ( i = 0; i < keys.size; i++ ) - { - if ( keys[ i ] == wait_flag ) - { - level.zone_flags[ keys[ i ] ] = arraycombine( level.zone_flags[ keys[ i ] ], add_flags, 1, 0 ); - return; - } - } - level.zone_flags[ wait_flag ] = add_flags; -} - -add_adjacent_zone( zone_name_a, zone_name_b, flag_name, one_way ) //checked matches cerberus output -{ - if ( !isDefined( one_way ) ) - { - one_way = 0; - } - if ( !isDefined( level.flag[ flag_name ] ) ) - { - flag_init( flag_name ); - } - zone_init( zone_name_a ); - zone_init( zone_name_b ); - make_zone_adjacent( zone_name_a, zone_name_b, flag_name ); - if ( !one_way ) - { - make_zone_adjacent( zone_name_b, zone_name_a, flag_name ); - } -} - -setup_zone_flag_waits() //checked changed to match cerberus output -{ - flags = []; - zkeys = getarraykeys( level.zones ); - for ( z = 0; z < level.zones.size; z++ ) - { - zone = level.zones[ zkeys[ z ] ]; - azkeys = getarraykeys( zone.adjacent_zones ); - for ( az = 0; az < zone.adjacent_zones.size; az++ ) - { - azone = zone.adjacent_zones[ azkeys[ az ] ]; - for ( f = 0; f < azone.flags.size; f++ ) - { - flags = add_to_array( flags, azone.flags[ f ], 0); - } - } - } - for ( i = 0; i < flags.size; i++ ) - { - level thread zone_flag_wait( flags[ i ] ); - } -} - -zone_flag_wait( flag_name ) -{ - if ( !isdefined( level.flag[ flag_name ] ) ) - { - flag_init( flag_name ); - } - flag_wait( flag_name ); - flags_set = 0; - for ( z = 0; z < level.zones.size; z++ ) - { - zkeys = getarraykeys( level.zones ); - zone = level.zones[ zkeys[ z ] ]; - for ( az = 0; az < zone.adjacent_zones.size; az++ ) - { - azkeys = getarraykeys( zone.adjacent_zones ); - azone = zone.adjacent_zones[ azkeys[ az ] ]; - if ( !azone.is_connected ) - { - if ( azone.flags_do_or_check ) - { - flags_set = 0; - for ( f = 0; f < azone.flags.size; f++ ) - { - if ( flag( azone.flags[ f ] ) ) - { - flags_set = 1; - break; - } - } - } - else - { - flags_set = 1; - for ( f = 0; f < azone.flags.size; f++ ) - { - if ( !flag(azone.flags[ f ] ) ) - { - flags_set = 0; - } - } - } - if ( flags_set ) - { - enable_zone( zkeys[ z ] ); //essential priority over manage_zones //was disabled - azone.is_connected = 1; - if ( !level.zones[ azkeys[ az ] ].is_enabled ) - { - enable_zone( azkeys[ az ] ); //essential priority over manage_zones //was disabled - } - if ( flag( "door_can_close" ) ) - { - azone thread door_close_disconnect( flag_name ); - } - } - } - } - } - keys = getarraykeys( level.zone_flags ); - for ( i = 0; i < keys.size; i++ ) - { - if ( keys[ i ] == flag_name ) - { - check_flag = level.zone_flags[ keys[ i ] ]; - for ( k = 0; k < check_flag.size; k++ ) - { - flag_set( check_flag[ k ] ); - } - break; - } - } -} - -door_close_disconnect( flag_name ) //checked matches cerberus output -{ - while ( flag( flag_name ) ) - { - wait 1; - } - self.is_connected = 0; - level thread zone_flag_wait( flag_name ); -} - -connect_zones( zone_name_a, zone_name_b, one_way ) //checked matches cerberus output -{ - if ( !isDefined( one_way ) ) - { - one_way = 0; - } - zone_init( zone_name_a ); - zone_init( zone_name_b ); - enable_zone( zone_name_a ); - enable_zone( zone_name_b ); - if ( !isDefined( level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ] ) ) - { - level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ] = spawnstruct(); - level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ].is_connected = 1; - } - if ( !one_way ) - { - if ( !isDefined( level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ] ) ) - { - level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ] = spawnstruct(); - level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ].is_connected = 1; - } - } -} - -manage_zones( initial_zone ) //checked changed to match cerberus output -{ - - deactivate_initial_barrier_goals(); - zone_choke = 0; - spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype(); - for ( i = 0; i < spawn_points.size; i++ ) - { - spawn_points[ i ].locked = 1; - } - if ( isDefined( level.zone_manager_init_func ) ) - { - [[ level.zone_manager_init_func ]](); - } - - if ( isarray( initial_zone ) ) - { - for ( i = 0; i < initial_zone.size; i++ ) - { - zone_init( initial_zone[ i ] ); - enable_zone( initial_zone[ i ] ); - } - } - else - { - zone_init( initial_zone ); - enable_zone( initial_zone ); - } - setup_zone_flag_waits(); - zkeys = getarraykeys( level.zones ); - level.zone_keys = zkeys; - level.newzones = []; - for ( z = 0; z < zkeys.size; z++ ) - { - level.newzones[ zkeys[ z ] ] = spawnstruct(); - } - oldzone = undefined; - flag_set( "zones_initialized" ); - flag_wait( "begin_spawning" ); - while ( getDvarInt( "noclip" ) == 0 || getDvarInt( "notarget" ) != 0 ) - { - for( z = 0; z < zkeys.size; z++ ) - { - level.newzones[ zkeys[ z ] ].is_active = 0; - level.newzones[ zkeys[ z ] ].is_occupied = 0; - } - a_zone_is_active = 0; - a_zone_is_spawning_allowed = 0; - level.zone_scanning_active = 1; - z = 0; - while ( z < zkeys.size ) - { - zone = level.zones[ zkeys[ z ] ]; - newzone = level.newzones[ zkeys[ z ] ]; - if( !zone.is_enabled ) - { - z++; - continue; - } - if ( isdefined(level.zone_occupied_func ) ) - { - newzone.is_occupied = [[ level.zone_occupied_func ]]( zkeys[ z ] ); - } - else - { - newzone.is_occupied = player_in_zone( zkeys[ z ] ); - } - if ( newzone.is_occupied ) - { - newzone.is_active = 1; - a_zone_is_active = 1; - if ( zone.is_spawning_allowed ) - { - a_zone_is_spawning_allowed = 1; - } - if ( !isdefined(oldzone) || oldzone != newzone ) - { - level notify( "newzoneActive", zkeys[ z ] ); - oldzone = newzone; - } - azkeys = getarraykeys( zone.adjacent_zones ); - for ( az = 0; az < zone.adjacent_zones.size; az++ ) - { - if ( zone.adjacent_zones[ azkeys[ az ] ].is_connected && level.zones[ azkeys[ az ] ].is_enabled ) - { - level.newzones[ azkeys[ az ] ].is_active = 1; - if ( level.zones[ azkeys[ az ] ].is_spawning_allowed ) - { - a_zone_is_spawning_allowed = 1; - } - } - } - } - zone_choke++; - if ( zone_choke >= 3 ) - { - zone_choke = 0; - wait 0.05; - } - z++; - } - level.zone_scanning_active = 0; - for ( z = 0; z < zkeys.size; z++ ) - { - level.zones[ zkeys[ z ] ].is_active = level.newzones[ zkeys[ z ] ].is_active; - level.zones[ zkeys[ z ] ].is_occupied = level.newzones[ zkeys[ z ] ].is_occupied; - } - if ( !a_zone_is_active || !a_zone_is_spawning_allowed ) - { - if ( isarray( initial_zone ) ) - { - level.zones[ initial_zone[ 0 ] ].is_active = 1; - level.zones[ initial_zone[ 0 ] ].is_occupied = 1; - level.zones[ initial_zone[ 0 ] ].is_spawning_allowed = 1; - } - else - { - level.zones[ initial_zone ].is_active = 1; - level.zones[ initial_zone ].is_occupied = 1; - level.zones[ initial_zone ].is_spawning_allowed = 1; - } - } - [[ level.create_spawner_list_func ]]( zkeys ); - level.active_zone_names = maps/mp/zombies/_zm_zonemgr::get_active_zone_names(); - wait 1; - } -} - -debug_show_spawn_locations() //checked dev call deleted -{ -} - -//unused code -/* -old_manage_zones( initial_zone ) //checked changed to match cerberus output -{ - - deactivate_initial_barrier_goals(); - spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype(); - for ( i = 0; i < spawn_points.size; i++ ) - { - spawn_points[i].locked = 1; - } - if ( isDefined( level.zone_manager_init_func ) ) - { - [[ level.zone_manager_init_func ]](); - } - if ( isarray( initial_zone ) ) - { - for ( i = 0; i < initial_zone.size; i++ ) - { - zone_init(initial_zone[ i ]); - enable_zone(initial_zone[ i ]); - } - } - else - { - zone_init( initial_zone ); - enable_zone( initial_zone ); - } - setup_zone_flag_waits(); - zkeys = getarraykeys( level.zones ); - level.zone_keys = zkeys; - flag_set( "zones_initialized" ); - flag_wait( "begin_spawning" ); - while ( getDvarInt( "noclip" ) == 0 || getDvarInt( "notarget" ) != 0 ) - { - for(z = 0; z < zkeys.size; z++) - { - level.zones[ zkeys[ z ] ].is_active = 0; - level.zones[ zkeys[ z ] ].is_occupied = 0; - } - a_zone_is_active = 0; - a_zone_is_spawning_allowed = 0; - for ( z = 0; z < zkeys.size; z++ ) - { - zone = level.zones[ zkeys[ z ] ]; - if ( !zone.is_enabled ) - { - continue; - } - if ( isdefined( level.zone_occupied_func ) ) - { - zone.is_occupied = [[ level.zone_occupied_func ]]( zkeys[ z ] ); - } - else - { - zone.is_occupied = player_in_zone( zkeys[ z ] ); - } - if ( zone.is_occupied ) - { - zone.is_active = 1; - a_zone_is_active = 1; - if ( zone.is_spawning_allowed ) - { - a_zone_is_spawning_allowed = 1; - } - azkeys = getarraykeys(zone.adjacent_zones); - for ( az = 0; az < zone.adjacent_zones.size; az++ ) - { - if ( zone.adjacent_zones[ azkeys[ az ] ].is_connected && level.zones[ azkeys[ az ] ].is_enabled ) - { - level.zones[ azkeys[ az ] ].is_active = 1; - if ( level.zones[ azkeys[ az ] ].is_spawning_allowed ) - { - a_zone_is_spawning_allowed = 1; - } - } - } - } - } - if ( !a_zone_is_active || !a_zone_is_spawning_allowed ) - { - if ( isarray( initial_zone ) ) - { - level.zones[ initial_zone[ 0 ] ].is_active = 1; - level.zones[ initial_zone[ 0 ] ].is_occupied = 1; - level.zones[ initial_zone[ 0 ] ].is_spawning_allowed = 1; - } - else - { - level.zones[ initial_zone ].is_active = 1; - level.zones[ initial_zone ].is_occupied = 1; - level.zones[ initial_zone ].is_spawning_allowed = 1; - } - } - [[ level.create_spawner_list_func ]]( zkeys ); - level.active_zone_names = maps/mp/zombies/_zm_zonemgr::get_active_zone_names(); - wait 1; - } -} -*/ -create_spawner_list( zkeys ) //checked changed to match cerberus output -{ - level.zombie_spawn_locations = []; - level.inert_locations = []; - level.enemy_dog_locations = []; - level.zombie_screecher_locations = []; - level.zombie_avogadro_locations = []; - level.quad_locations = []; - level.zombie_leaper_locations = []; - level.zombie_astro_locations = []; - level.zombie_brutus_locations = []; - level.zombie_mechz_locations = []; - level.zombie_napalm_locations = []; - for ( z = 0; z < zkeys.size; z++ ) - { - zone = level.zones[ zkeys[ z ] ]; - if ( zone.is_enabled && zone.is_active && zone.is_spawning_allowed ) - { - for ( i = 0; i < zone.spawn_locations.size; i++ ) - { - if(zone.spawn_locations[ i ].is_enabled) - { - level.zombie_spawn_locations[level.zombie_spawn_locations.size] = zone.spawn_locations[i]; - } - } - for(x = 0; x < zone.inert_locations.size; x++) - { - if(zone.inert_locations[x].is_enabled) - { - level.inert_locations[level.inert_locations.size] = zone.inert_locations[x]; - } - } - for(x = 0; x < zone.dog_locations.size; x++) - { - if(zone.dog_locations[x].is_enabled) - { - level.enemy_dog_locations[level.enemy_dog_locations.size] = zone.dog_locations[x]; - } - } - for(x = 0; x < zone.screecher_locations.size; x++) - { - if(zone.screecher_locations[x].is_enabled) - { - level.zombie_screecher_locations[level.zombie_screecher_locations.size] = zone.screecher_locations[x]; - } - } - for(x = 0; x < zone.avogadro_locations.size; x++) - { - if(zone.avogadro_locations[x].is_enabled) - { - level.zombie_avogadro_locations[level.zombie_avogadro_locations.size] = zone.avogadro_locations[x]; - } - } - for(x = 0; x < zone.quad_locations.size; x++) - { - if(zone.quad_locations[x].is_enabled) - { - level.quad_locations[level.quad_locations.size] = zone.quad_locations[x]; - } - } - for(x = 0; x < zone.leaper_locations.size; x++) - { - if(zone.leaper_locations[x].is_enabled) - { - level.zombie_leaper_locations[level.zombie_leaper_locations.size] = zone.leaper_locations[x]; - } - } - for(x = 0; x < zone.astro_locations.size; x++) - { - if(zone.astro_locations[x].is_enabled) - { - level.zombie_astro_locations[level.zombie_astro_locations.size] = zone.astro_locations[x]; - } - } - for(x = 0; x < zone.napalm_locations.size; x++) - { - if(zone.napalm_locations[x].is_enabled) - { - level.zombie_napalm_locations[level.zombie_napalm_locations.size] = zone.napalm_locations[x]; - } - } - for(x = 0; x < zone.brutus_locations.size; x++) - { - if(zone.brutus_locations[x].is_enabled) - { - level.zombie_brutus_locations[level.zombie_brutus_locations.size] = zone.brutus_locations[x]; - } - } - for(x = 0; x < zone.mechz_locations.size; x++) - { - if(zone.mechz_locations[x].is_enabled) - { - level.zombie_mechz_locations[level.zombie_mechz_locations.size] = zone.mechz_locations[x]; - } - } - } - } -} - - -get_active_zone_names() //checked changed to match cerberus output -{ - ret_list = []; - if ( !isDefined( level.zone_keys ) ) - { - return ret_list; - } - while ( level.zone_scanning_active ) - { - wait 0.05; - } - for ( i = 0; i < level.zone_keys.size; i++ ) - { - if ( level.zones[ level.zone_keys[ i ] ].is_active ) - { - ret_list[ ret_list.size ] = level.zone_keys[ i ]; - } - } - return ret_list; -} - -//commented out -/* -_init_debug_zones() //checked changed to match cerberus output -{ - current_y = 30; - current_x = 20; - xloc = []; - xloc[ 0 ] = 50; - xloc[ 1 ] = 60; - xloc[ 2 ] = 100; - xloc[ 3 ] = 130; - xloc[ 4 ] = 170; - zkeys = getarraykeys( level.zones ); - for(i = 0; i < zkeys.size; i++) - { - zonename = zkeys[i]; - zone = level.zones[zonename]; - zone.debug_hud = []; - for(j = 0; j < 5; j++) - { - zone.debug_hud[j] = newdebughudelem(); - if(!j) - { - zone.debug_hud[j].alignx = "right"; - } - else - { - zone.debug_hud[j].alignx = "left"; - } - zone.debug_hud[j].x = xloc[j]; - zone.debug_hud[j].y = current_y; - } - current_y = current_y + 10; - zone.debug_hud[0] settext(zonename); - } -} - -_destroy_debug_zones() //checked changed to match cerberus output -{ - zkeys = getarraykeys(level.zones); - for(i = 0; i < zkeys.size; i++) - { - zonename = zkeys[i]; - zone = level.zones[zonename]; - for(j = 0; j < 5; j++) - { - zone.debug_hud[j] destroy(); - zone.debug_hud[j] = undefined; - } - } -} - -_debug_zones() //checked changed to match cerberus output -{ - enabled = 0; - if ( getDvar( "zombiemode_debug_zones" ) == "" ) - { - setdvar( "zombiemode_debug_zones", "0" ); - } - while(1) - { - wasenabled = enabled; - enabled = GetDvarInt(hash_10e35bc4); - if(enabled && !wasenabled) - { - _init_debug_zones(); - } - else if(!enabled && wasenabled) - { - _destroy_debug_zones(); - } - if(enabled) - { - zkeys = getarraykeys(level.zones); - for(i = 0; i < zkeys.size; i++) - { - zonename = zkeys[i]; - zone = level.zones[zonename]; - text = zonename; - zone.debug_hud[0] settext(text); - if(zone.is_enabled) - { - text = text + " Enabled"; - zone.debug_hud[1] settext("Enabled"); - } - else - { - zone.debug_hud[1] settext(""); - } - if(zone.is_active) - { - text = text + " Active"; - zone.debug_hud[2] settext("Active"); - } - else - { - zone.debug_hud[2] settext(""); - } - if(zone.is_occupied) - { - text = text + " Occupied"; - zone.debug_hud[3] settext("Occupied"); - } - else - { - zone.debug_hud[3] settext(""); - } - if(zone.is_spawning_allowed) - { - text = text + " SpawningAllowed"; - zone.debug_hud[4] settext("SpawningAllowed"); - } - else - { - zone.debug_hud[4] settext(""); - } - } - } - wait(0.1); - } -} -*/ - -is_player_in_zone( zone_name ) //checked changed to match cerberus output -{ - zone = level.zones[ zone_name ]; - for ( i = 0; i < zone.volumes.size; i++ ) - { - if ( self istouching( level.zones[zone_name].volumes[ i ] ) && !self.sessionstate == "spectator" ) - { - return 1; - } - } - return 0; -} diff --git a/Zombie Core/patch_zm/patch_zm functions descriptions and locations.md b/Zombie Core/patch_zm/patch_zm functions descriptions and locations.md deleted file mode 100644 index 98d41c0..0000000 --- a/Zombie Core/patch_zm/patch_zm functions descriptions and locations.md +++ /dev/null @@ -1,53 +0,0 @@ -# Black Ops 2 Functions Descriptions and Locations List - -### Functions in _zm_utility.gsc: - -convertsecondstomilliseconds( seconds ) - returns seconds multiplied by 1000 -usage - use this to compare actual seconds with getTime() which uses milliseconds - -in_revive_trigger() - returns 1 if the player is currently in a revive trigger or 0 if they are not -- must be called on a player - -is_classic() - returns 1 if the value of getDvar( "ui_zm_gamemodegroup" ) is "zclassic" returns 0 otherwise - -is_player() - returns 0 if not called on a player, returns 0 if called on a bot, returns 1 otherwise - -is_standard() - returns 1 if the value of getDvar( "ui_gametype" ) is "zstandard" returns 0 otherwise - -lerp( chunk ) - - -clear_mature_blood() - deletes blood patches if is_mature() returns 0 - -recalc_zombie_array() - empty function - -clear_all_corpses() - deletes all corpses when called - -get_current_corpse_count() - returns the number of corpses, if corpses are not defined returns 0 - -get_current_actor_count() - returns the number of alive zombies and corpses combined - -get_round_enemy_array() - returns an array of the enemies on the level.zombie_team if an enemy has the property .ignore_enemy_count -they are not included - -init_zombie_run_cycle() - picks whether a zombie should have different speed on spawn -- must be called on a zombie - -change_zombie_run_cycle() - sets a zombies speed depending on the difficulty on easy zombies are sprinters on normal they are walkers -- must be called on a zombie - -speed_change_watcher() - reduces the counter that tracks the number of zombies with unique speeds such as walkers or sprinters when they die -- must be called on a zombie - -set_zombie_run_cycle( new_move_speed ) - sets a zombies speed to the new_move_speed input -- valid inputs are walk, run, sprint, super_sprint, and bus_sprint( tranzit maps only ) -- must be called on a zombie - -set_run_speed() - sets a zombies movespeed randomly on spawn on normal difficulty -- must be called on a zombie - -set_run_speed_easy() = sets a zombies movespeed randomly on spawn on easy difficulty -- must be called on a zombie - -spawn_zombie( spawner, target_name, spawn_point, round_number ) -- - diff --git a/Zombie Core/patch_zm/readme.md b/Zombie Core/patch_zm/readme.md deleted file mode 100644 index 0e17031..0000000 --- a/Zombie Core/patch_zm/readme.md +++ /dev/null @@ -1,148 +0,0 @@ -### The following scripts compile and run successfully with no known errors: -``` -patch_zm/maps/mp/gametypes_zm/_clientids.gsc -patch_zm/maps/mp/gametypes_zm/_globalentities.gsc -patch_zm/maps/mp/gametypes_zm/_globallogic.gsc -patch_zm/maps/mp/gametypes_zm/_scoreboard.gsc -patch_zm/maps/mp/gametypes_zm/_shellshock.gsc -patch_zm/maps/mp/gametypes_zm/_zm_gametype.gsc -patch_zm/maps/mp/gametypes_zm/zclassic.gsc -patch_zm/maps/mp/zombies/_load.gsc -patch_zm/maps/mp/zombies/_zm_ai_basic.gsc -patch_zm/maps/mp/zombies/_zm_ai_dogs.gsc -patch_zm/maps/mp/zombies/_zm_ai_faller.gsc -patch_zm/maps/mp/zombies/_zm_audio.gsc -patch_zm/maps/mp/zombies/_zm_audio_announcer.gsc -patch_zm/maps/mp/zombies/_zm_bot.gsc -patch_zm/maps/mp/zombies/_zm_chugabud.gsc -patch_zm/maps/mp/zombies/_zm_clone.gsc -patch_zm/maps/mp/zombies/_zm_ffotd.gsc -patch_zm/maps/mp/zombies/_zm_gump.gsc -patch_zm/maps/mp/zombies/_zm_laststand.gsc -patch_zm/maps/mp/zombies/_zm_magicbox.gsc -patch_zm/maps/mp/zombies/_zm_net.gsc -patch_zm/maps/mp/zombies/_zm_perk_electric_cherry.gsc -patch_zm/maps/mp/zombies/_zm_perks.gsc -patch_zm/maps/mp/zombies/_zm_pers_upgrades.gsc -patch_zm/maps/mp/zombies/_zm_pers_upgrades_functions.gsc -patch_zm/maps/mp/zombies/_zm_pers_upgrades_system.gsc -patch_zm/maps/mp/zombies/_zm_powerups.gsc -patch_zm/maps/mp/zombies/_zm_server_throttle.gsc -patch_zm/maps/mp/zombies/_zm_score.gsc -patch_zm/maps/mp/zombies/_zm_spawner.gsc -patch_zm/maps/mp/zombies/_zm_tombstone.gsc -patch_zm/maps/mp/zombies/_zm_weapons.gsc -patch_zm/maps/mp/zombies/_zm_zonemgr.gsc -``` -### The following scripts compile and run successfully with minor errors: -``` -patch_zm/maps/mp/zombies/_zm.gsc -patch_zm/maps/mp/zombies/_zm_timer.gsc -``` -### The following scripts compile and run successfully with major errors: -``` -patch_zm/maps/mp/zombies/_zm_utility.gsc -``` -### The following scripts compile and run serverside but clients cannot join due to exe_client_field_mismatch -``` -``` -### The following scripts compile but cause a minidump or other severe error: -``` -``` -### The following scripts have been checked, but they have not been tested yet -``` -patch_zm/maps/mp/gametypes_zm/_callbacksetup.gsc -patch_zm/maps/mp/gametypes_zm/_damagefeedback.gsc -patch_zm/maps/mp/gametypes_zm/_globallogic_actor.gsc -patch_zm/maps/mp/gametypes_zm/_globallogic_spawn.gsc -patch_zm/maps/mp/gametypes_zm/_healthoverlay.gsc -patch_zm/maps/mp/gametypes_zm/_hostmigration.gsc -patch_zm/maps/mp/gametypes_zm/_hud.gsc -patch_zm/maps/mp/gametypes_zm/_menus.gsc -patch_zm/maps/mp/gametypes_zm/_perplayer.gsc -patch_zm/maps/mp/gametypes_zm/_serversettings.gsc -patch_zm/maps/mp/gametypes_zm/_spectating.gsc -patch_zm/maps/mp/gametypes_zm/_tweakables.gsc -patch_zm/maps/mp/gametypes_zm/_weapons.gsc -patch_zm/maps/mp/gametypes_zm/_weapon_utils.gsc -patch_zm/maps/mp/zombies/_zm_blockers.gsc -patch_zm/maps/mp/zombies/_zm_buildables.gsc -patch_zm/maps/mp/zombies/_zm_equipment.gsc -patch_zm/maps/mp/zombies/_zm_equip_turbine.gsc -patch_zm/maps/mp/zombies/_zm_game_module.gsc -patch_zm/maps/mp/zombies/_zm_magicbox_lock.gsc -patch_zm/maps/mp/zombies/_zm_playerhealth.gsc -patch_zm/maps/mp/zombies/_zm_power.gsc -patch_zm/maps/mp/zombies/_zm_sidequests.gsc -patch_zm/maps/mp/zombies/_zm_stats.gsc -patch_zm/maps/mp/zombies/_zm_traps.gsc -patch_zm/maps/mp/zombies/_zm_turned.gsc -patch_zm/maps/mp/zombies/_zm_unitrigger.gsc -patch_zm/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc -patch_zm/maps/mp/_visionset_mgr.gsc -``` -### The following scripts are not checked yet, uploaded to setup a baseline: -``` -patch_zm/maps/codescripts/character_mp.gsc -patch_zm/maps/common_scripts/utility.gsc - -patch_zm/maps/mp/_art.gsc -patch_zm/maps/mp/_audio.gsc -patch_zm/maps/mp/_ballistic_knife.gsc -patch_zm/maps/mp/_bb.gsc -patch_zm/maps/mp/_busing.gsc -patch_zm/maps/mp/_challenges.gsc -patch_zm/maps/mp/_compass.gsc -patch_zm/maps/mp/_createfx.gsc -patch_zm/maps/mp/_createfxmenu.gsc -patch_zm/maps/mp/_createfxundo.gsc -patch_zm/maps/mp/_demo.gsc -patch_zm/maps/mp/_fx.gsc -patch_zm/maps/mp/_fxanim.gsc -patch_zm/maps/mp/_global_fx.gsc -patch_zm/maps/mp/_interactive_objects.gsc -patch_zm/maps/mp/_music.gsc -patch_zm/maps/mp/_script_gen.gsc -patch_zm/maps/mp/serverfaceanim_mp.gsc -patch_zm/maps/mp/_sticky_grenade.gsc -patch_zm/maps/mp/_utility.gsc - -patch_zm/maps/mp/gametypes_zm/_gameobjects.gsc -patch_zm/maps/mp/gametypes_zm/_globallogic_audio.gsc -patch_zm/maps/mp/gametypes_zm/_globallogic_defaults.gsc -patch_zm/maps/mp/gametypes_zm/_globallogic_player.gsc -patch_zm/maps/mp/gametypes_zm/_globallogic_score.gsc -patch_zm/maps/mp/gametypes_zm/_globallogic_ui.gsc -patch_zm/maps/mp/gametypes_zm/_globallogic_utils.gsc -patch_zm/maps/mp/gametypes_zm/_globallogic_vehicle.gsc -patch_zm/maps/mp/gametypes_zm/_gv_actions.gsc -patch_zm/maps/mp/gametypes_zm/_hud_message.gsc -patch_zm/maps/mp/gametypes_zm/_hud_util.gsc -patch_zm/maps/mp/gametypes_zm/_spawning.gsc -patch_zm/maps/mp/gametypes_zm/_spawnlogic.gsc -patch_zm/maps/mp/gametypes_zm/_weaponobjects.gsc -``` -### The following scripts have not been checked using the proper debugging methods: -``` -//I will put these off to towards much later since the hacker and gas mask are parts of the game that do not exist inside the game in any capacity whatsoever. -//Therefore, whether or not they work is irrelevant. -patch_zm/maps/mp/gametypes_zm/_dev.gsc -patch_zm/maps/mp/zombies/_zm_devgui.gsc -patch_zm/maps/mp/zombies/_zm_equip_hacker.gsc -patch_zm/maps/mp/zombies/_zm_equip_gasmask.gsc -patch_zm/maps/mp/zombies/_zm_hackables_boards.gsc -patch_zm/maps/mp/zombies/_zm_hackables_box.gsc -patch_zm/maps/mp/zombies/_zm_hackables_doors.gsc -patch_zm/maps/mp/zombies/_zm_hackables_packapunch.gsc -patch_zm/maps/mp/zombies/_zm_hackables_perks.gsc -patch_zm/maps/mp/zombies/_zm_hackables_powerups.gsc -patch_zm/maps/mp/zombies/_zm_hackables_wallbuys.gsc -patch_zm/maps/mp/zombies/_zm_jump_pad.gsc -patch_zm/maps/mp/zombies/_zm_mgturret.gsc -``` -### notes: -``` -The shaders that _zm_timer.gsc relies on do not exist. -``` - - diff --git a/Zombie Maps/Alcatraz/so_zencounter_zm_prison/maps/mp/teams/_teamset_cdc.gsc b/Zombie Maps/Alcatraz/so_zencounter_zm_prison/maps/mp/teams/_teamset_cdc.gsc deleted file mode 100644 index 62ec842..0000000 --- a/Zombie Maps/Alcatraz/so_zencounter_zm_prison/maps/mp/teams/_teamset_cdc.gsc +++ /dev/null @@ -1,51 +0,0 @@ - -register() -{ - game[ "teamset" ] = []; - game[ "teamset" ][ "cdc" ] = ::cdc; -} - -level_init() -{ - game[ "allies" ] = "cdc"; - game[ "axis" ] = "cia"; - setdvar( "g_TeamName_Allies", &"ZMUI_CDC_SHORT" ); - setdvar( "g_TeamName_Axis", &"ZMUI_CIA_SHORT" ); - game[ "strings" ][ "allies_win" ] = &"ZM_CDC_WIN_MATCH"; - game[ "strings" ][ "allies_win_round" ] = &"ZM_CDC_WIN_ROUND"; - game[ "strings" ][ "allies_mission_accomplished" ] = &"ZM_CDC_MISSION_ACCOMPLISHED"; - game[ "strings" ][ "allies_eliminated" ] = &"ZM_CDC_ELIMINATED"; - game[ "strings" ][ "allies_forfeited" ] = &"ZM_CDC_FORFEITED"; - game[ "strings" ][ "allies_name" ] = &"ZM_CDC_NAME"; - game[ "music" ][ "spawn_allies" ] = "SPAWN_OPS"; - game[ "music" ][ "victory_allies" ] = "mus_victory_usa"; - game[ "icons" ][ "allies" ] = "faction_cdc"; - game[ "colors" ][ "allies" ] = ( 0, 0, 0 ); - game[ "voice" ][ "allies" ] = "vox_st6_"; - setdvar( "scr_allies", "marines" ); - game[ "strings" ][ "axis_win" ] = &"ZM_CIA_WIN_MATCH"; - game[ "strings" ][ "axis_win_round" ] = &"ZM_CIA_WIN_ROUND"; - game[ "strings" ][ "axis_mission_accomplished" ] = &"ZM_CIA_MISSION_ACCOMPLISHED"; - game[ "strings" ][ "axis_eliminated" ] = &"ZM_CIA_ELIMINATED"; - game[ "strings" ][ "axis_forfeited" ] = &"ZM_CIA_FORFEITED"; - game[ "strings" ][ "axis_name" ] = &"ZM_CIA_NAME"; - game[ "music" ][ "spawn_axis" ] = "SPAWN_RUS"; - game[ "music" ][ "victory_axis" ] = "mus_victory_soviet"; - game[ "icons" ][ "axis" ] = "faction_cia"; - game[ "colors" ][ "axis" ] = ( 0,65, 0,57, 0,41 ); - game[ "voice" ][ "axis" ] = "vox_pmc_"; -} - -cdc() -{ - allies(); - axis(); -} - -allies() -{ -} - -axis() -{ -} diff --git a/Zombie Maps/Alcatraz/zm_prison/aitype/zm_alcatraz_basic.gsc b/Zombie Maps/Alcatraz/zm_prison/aitype/zm_alcatraz_basic.gsc deleted file mode 100644 index a40f938..0000000 --- a/Zombie Maps/Alcatraz/zm_prison/aitype/zm_alcatraz_basic.gsc +++ /dev/null @@ -1,401 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_prison_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_v4; - dummy_anim_ref = %ai_zombie_inert_v6; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_inert_2_awake_v6; - dummy_anim_ref = %ai_zombie_inert_2_awake_v7; - dummy_anim_ref = %ai_zombie_inert_2_awake_v8; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_dreamcatch_shrink; - dummy_anim_ref = %ai_zombie_dreamcatch_impact; - dummy_anim_ref = %ai_zombie_dreamcatch_rise; - dummy_anim_ref = %ai_zombie_dreamcatch_shrink_a; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_climb_down_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_down_pothole; - dummy_anim_ref = %ai_zombie_climb_up_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_up_pothole; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_stumble_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_stumble_90; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_stumble_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_jump_down_stumble_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_stumble_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_jump_down_cellblock; - dummy_anim_ref = %ai_zombie_jump_up_cellblock; - dummy_anim_ref = %ai_zombie_crawl_jump_down_cellblock; - dummy_anim_ref = %ai_zombie_crawl_jump_up_cellblock; - dummy_anim_ref = %ai_zombie_sprint_jump_up_cellblock; - dummy_anim_ref = %ai_zombie_sprint_jump_down_cellblock; - dummy_anim_ref = %ai_zombie_crawl_sprint_jump_up_cellblock; - dummy_anim_ref = %ai_zombie_crawl_sprint_jump_down_cellblock; - dummy_anim_ref = %ai_zombie_jump_down_dock_tommygun; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_crawl_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_traverse_garage_roll; - dummy_anim_ref = %ai_zombie_crawl_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_jump_up_2_climb; - dummy_anim_ref = %ai_zombie_crawl_jump_up_2_climb; - dummy_anim_ref = %ai_zombie_climb_over_dock_fence; - dummy_anim_ref = %ai_zombie_crawl_climb_over_dock_fence; - dummy_anim_ref = %ai_zombie_jump_up_goldengate; - dummy_anim_ref = %ai_zombie_jump_up_dock; - dummy_anim_ref = %ai_zombie_climb_up_ext_low; - dummy_anim_ref = %ai_zombie_climb_up_ext_mid; - dummy_anim_ref = %ai_zombie_climb_up_ext_roof; - dummy_anim_ref = %ai_zombie_jump_down_cellblock_basic; - dummy_anim_ref = %ai_zombie_crawl_jump_down_cellblock_basic; - dummy_anim_ref = %ai_zombie_traverse_lower_gondola; - dummy_anim_ref = %ai_zombie_crawl_jump_up_dock_middle; - dummy_anim_ref = %ai_zombie_jump_up_dock_middle; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_sprint_v6; - dummy_anim_ref = %ai_zombie_sprint_v7; - dummy_anim_ref = %ai_zombie_sprint_v8; - dummy_anim_ref = %ai_zombie_sprint_v9; - dummy_anim_ref = %ai_zombie_sprint_v10; - dummy_anim_ref = %ai_zombie_sprint_v11; - dummy_anim_ref = %ai_zombie_sprint_v12; - dummy_anim_ref = %ai_zombie_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_riotshield_breakthrough_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_breakthrough_v1; - dummy_anim_ref = %ai_zombie_afterlife_stun_a; - dummy_anim_ref = %ai_zombie_afterlife_stun_b; - dummy_anim_ref = %ai_zombie_afterlife_stun_c; - dummy_anim_ref = %ai_zombie_afterlife_stun_d; - dummy_anim_ref = %ai_zombie_afterlife_stun_e; - dummy_anim_ref = %ai_zombie_acid_stun_a; - dummy_anim_ref = %ai_zombie_acid_stun_b; - dummy_anim_ref = %ai_zombie_acid_stun_c; - dummy_anim_ref = %ai_zombie_acid_stun_d; - dummy_anim_ref = %ai_zombie_acid_stun_e; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_prison_basic.asd"; - self.animtree = "zm_prison_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 3 ); - switch( randchar ) - { - case 0: - character/c_zom_guard::main(); - break; - case 1: - character/c_zom_inmate1::main(); - break; - case 2: - character/c_zom_inmate2::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_prison_basic" ); - character/c_zom_guard::precache(); - character/c_zom_inmate1::precache(); - character/c_zom_inmate2::precache(); -} diff --git a/Zombie Maps/Alcatraz/zm_prison/aitype/zm_alcatraz_brutus.gsc b/Zombie Maps/Alcatraz/zm_prison/aitype/zm_alcatraz_brutus.gsc deleted file mode 100644 index 192efb5..0000000 --- a/Zombie Maps/Alcatraz/zm_prison/aitype/zm_alcatraz_brutus.gsc +++ /dev/null @@ -1,80 +0,0 @@ - -#using_animtree( "zm_alcatraz_brutus" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_cellbreaker_attack_swingleft; - dummy_anim_ref = %ai_zombie_cellbreaker_attack_swingright_a; - dummy_anim_ref = %ai_zombie_cellbreaker_attack_swingright_b; - dummy_anim_ref = %ai_zombie_cellbreaker_death; - dummy_anim_ref = %ai_zombie_cellbreaker_death_a; - dummy_anim_ref = %ai_zombie_cellbreaker_death_explode; - dummy_anim_ref = %ai_zombie_cellbreaker_death_mg; - dummy_anim_ref = %ai_zombie_cellbreaker_tesla_death_a; - dummy_anim_ref = %ai_zombie_cellbreaker_enrage_start; - dummy_anim_ref = %ai_zombie_cellbreaker_idle_a; - dummy_anim_ref = %ai_zombie_cellbreaker_idle_b; - dummy_anim_ref = %ai_zombie_cellbreaker_run_a; - dummy_anim_ref = %ai_zombie_cellbreaker_run_b; - dummy_anim_ref = %ai_zombie_cellbreaker_run_c; - dummy_anim_ref = %ai_zombie_cellbreaker_run_d; - dummy_anim_ref = %ai_zombie_cellbreaker_sprint_a; - dummy_anim_ref = %ai_zombie_cellbreaker_sprint_b; - dummy_anim_ref = %ai_zombie_cellbreaker_walk_a; - dummy_anim_ref = %ai_zombie_cellbreaker_boardsmash_a; - dummy_anim_ref = %ai_zombie_cellbreaker_boardsmash_b; - dummy_anim_ref = %ai_zombie_cellbreaker_boardsmash_c; - dummy_anim_ref = %ai_zombie_cellbreaker_lock_magicbox; - dummy_anim_ref = %ai_zombie_cellbreaker_lock_perkmachine; - dummy_anim_ref = %ai_zombie_cellbreaker_lock_planeramp; - dummy_anim_ref = %ai_zombie_cellbreaker_bullcharge_tell; - dummy_anim_ref = %ai_zombie_cellbreaker_gasattack; - dummy_anim_ref = %ai_zombie_cellbreaker_headpain; - dummy_anim_ref = %ai_zombie_cellbreaker_spawn; - dummy_anim_ref = %ai_zombie_cellbreaker_stumble_running; - dummy_anim_ref = %ai_zombie_cellbreaker_summondogs; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_alcatraz_brutus.asd"; - self.animtree = "zm_alcatraz_brutus.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = "zm_brutus_footstepfxtable"; - self.footstepprepend = "fly_step_brutus"; - self.footstepscriptcallback = 1; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_cellbreaker::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_alcatraz_brutus" ); - character/c_zom_cellbreaker::precache(); -} diff --git a/Zombie Maps/Alcatraz/zm_prison/character/c_zom_cellbreaker.gsc b/Zombie Maps/Alcatraz/zm_prison/character/c_zom_cellbreaker.gsc deleted file mode 100644 index 8044e54..0000000 --- a/Zombie Maps/Alcatraz/zm_prison/character/c_zom_cellbreaker.gsc +++ /dev/null @@ -1,15 +0,0 @@ - -main() -{ - self setmodel( "c_zom_cellbreaker_fb" ); - self.hatmodel = "c_zom_cellbreaker_helmet"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_cellbreaker_fb" ); - precachemodel( "c_zom_cellbreaker_helmet" ); -} diff --git a/Zombie Maps/Alcatraz/zm_prison/character/c_zom_guard.gsc b/Zombie Maps/Alcatraz/zm_prison/character/c_zom_guard.gsc deleted file mode 100644 index 0d0c6d1..0000000 --- a/Zombie Maps/Alcatraz/zm_prison/character/c_zom_guard.gsc +++ /dev/null @@ -1,47 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_guard_body" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_prison_guard_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = codescripts/character::randomelement( xmodelalias/c_zom_prison_guard_hat_als::main() ); - self attach( self.hatmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_guard_body_g_upclean"; - self.torsodmg2 = "c_zom_guard_body_g_rarmoff"; - self.torsodmg3 = "c_zom_guard_body_g_larmoff"; - self.torsodmg5 = "c_zom_inmate_body2_g_behead"; - self.legdmg1 = "c_zom_guard_body_g_lowclean"; - self.legdmg2 = "c_zom_guard_body_g_rlegoff"; - self.legdmg3 = "c_zom_guard_body_g_llegoff"; - self.legdmg4 = "c_zom_guard_body_g_legsoff"; - self.gibspawn1 = "c_zom_inmate_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_inmate_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_inmate_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_inmate_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_guard_body" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_prison_guard_head_als::main() ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_prison_guard_hat_als::main() ); - precachemodel( "c_zom_guard_body_g_upclean" ); - precachemodel( "c_zom_guard_body_g_rarmoff" ); - precachemodel( "c_zom_guard_body_g_larmoff" ); - precachemodel( "c_zom_inmate_body2_g_behead" ); - precachemodel( "c_zom_guard_body_g_lowclean" ); - precachemodel( "c_zom_guard_body_g_rlegoff" ); - precachemodel( "c_zom_guard_body_g_llegoff" ); - precachemodel( "c_zom_guard_body_g_legsoff" ); - precachemodel( "c_zom_inmate_g_rarmspawn" ); - precachemodel( "c_zom_inmate_g_larmspawn" ); - precachemodel( "c_zom_inmate_g_rlegspawn" ); - precachemodel( "c_zom_inmate_g_llegspawn" ); -} diff --git a/Zombie Maps/Alcatraz/zm_prison/character/c_zom_inmate1.gsc b/Zombie Maps/Alcatraz/zm_prison/character/c_zom_inmate1.gsc deleted file mode 100644 index 3bca92e..0000000 --- a/Zombie Maps/Alcatraz/zm_prison/character/c_zom_inmate1.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_inmate_body1" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_prison_inmate_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_inmate_body1_g_upclean"; - self.torsodmg2 = "c_zom_inmate_body1_g_rarmoff"; - self.torsodmg3 = "c_zom_inmate_body1_g_larmoff"; - self.torsodmg5 = "c_zom_inmate_body2_g_behead"; - self.legdmg1 = "c_zom_inmate_body1_g_lowclean"; - self.legdmg2 = "c_zom_inmate_body1_g_rlegoff"; - self.legdmg3 = "c_zom_inmate_body1_g_llegoff"; - self.legdmg4 = "c_zom_inmate_body1_g_legsoff"; - self.gibspawn1 = "c_zom_inmate_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_inmate_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_inmate_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_inmate_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_inmate_body1" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_prison_inmate_head_als::main() ); - precachemodel( "c_zom_inmate_body1_g_upclean" ); - precachemodel( "c_zom_inmate_body1_g_rarmoff" ); - precachemodel( "c_zom_inmate_body1_g_larmoff" ); - precachemodel( "c_zom_inmate_body2_g_behead" ); - precachemodel( "c_zom_inmate_body1_g_lowclean" ); - precachemodel( "c_zom_inmate_body1_g_rlegoff" ); - precachemodel( "c_zom_inmate_body1_g_llegoff" ); - precachemodel( "c_zom_inmate_body1_g_legsoff" ); - precachemodel( "c_zom_inmate_g_rarmspawn" ); - precachemodel( "c_zom_inmate_g_larmspawn" ); - precachemodel( "c_zom_inmate_g_rlegspawn" ); - precachemodel( "c_zom_inmate_g_llegspawn" ); -} diff --git a/Zombie Maps/Alcatraz/zm_prison/character/c_zom_inmate2.gsc b/Zombie Maps/Alcatraz/zm_prison/character/c_zom_inmate2.gsc deleted file mode 100644 index 8ec1fcc..0000000 --- a/Zombie Maps/Alcatraz/zm_prison/character/c_zom_inmate2.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_inmate_body2" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_prison_inmate_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_inmate_body2_g_upclean"; - self.torsodmg2 = "c_zom_inmate_body2_g_rarmoff"; - self.torsodmg3 = "c_zom_inmate_body2_g_larmoff"; - self.torsodmg5 = "c_zom_inmate_body2_g_behead"; - self.legdmg1 = "c_zom_inmate_body1_g_lowclean"; - self.legdmg2 = "c_zom_inmate_body1_g_rlegoff"; - self.legdmg3 = "c_zom_inmate_body1_g_llegoff"; - self.legdmg4 = "c_zom_inmate_body1_g_legsoff"; - self.gibspawn1 = "c_zom_inmate_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_inmate_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_inmate_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_inmate_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_inmate_body2" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_prison_inmate_head_als::main() ); - precachemodel( "c_zom_inmate_body2_g_upclean" ); - precachemodel( "c_zom_inmate_body2_g_rarmoff" ); - precachemodel( "c_zom_inmate_body2_g_larmoff" ); - precachemodel( "c_zom_inmate_body2_g_behead" ); - precachemodel( "c_zom_inmate_body1_g_lowclean" ); - precachemodel( "c_zom_inmate_body1_g_rlegoff" ); - precachemodel( "c_zom_inmate_body1_g_llegoff" ); - precachemodel( "c_zom_inmate_body1_g_legsoff" ); - precachemodel( "c_zom_inmate_g_rarmspawn" ); - precachemodel( "c_zom_inmate_g_larmspawn" ); - precachemodel( "c_zom_inmate_g_rlegspawn" ); - precachemodel( "c_zom_inmate_g_llegspawn" ); -} diff --git a/Zombie Maps/Alcatraz/zm_prison/xmodelalias/c_zom_prison_guard_hat_als.gsc b/Zombie Maps/Alcatraz/zm_prison/xmodelalias/c_zom_prison_guard_hat_als.gsc deleted file mode 100644 index 3117918..0000000 --- a/Zombie Maps/Alcatraz/zm_prison/xmodelalias/c_zom_prison_guard_hat_als.gsc +++ /dev/null @@ -1,7 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_guard_hat"; - a[ 1 ] = "c_viet_zombie_nohat"; - return a; -} diff --git a/Zombie Maps/Alcatraz/zm_prison/xmodelalias/c_zom_prison_guard_head_als.gsc b/Zombie Maps/Alcatraz/zm_prison/xmodelalias/c_zom_prison_guard_head_als.gsc deleted file mode 100644 index e98cf9a..0000000 --- a/Zombie Maps/Alcatraz/zm_prison/xmodelalias/c_zom_prison_guard_head_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_barbwire_head"; - a[ 1 ] = "c_zom_zombie_hellcatraz_head"; - a[ 2 ] = "c_zom_zombie_mask_head"; - a[ 3 ] = "c_zom_zombie_slackjaw_head"; - return a; -} diff --git a/Zombie Maps/Alcatraz/zm_prison/xmodelalias/c_zom_prison_inmate_head_als.gsc b/Zombie Maps/Alcatraz/zm_prison/xmodelalias/c_zom_prison_inmate_head_als.gsc deleted file mode 100644 index a0e0a74..0000000 --- a/Zombie Maps/Alcatraz/zm_prison/xmodelalias/c_zom_prison_inmate_head_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_barbwire_head"; - a[ 1 ] = "c_zom_zombie_hellcatraz_head"; - a[ 2 ] = "c_zom_zombie_mask_head_device"; - a[ 3 ] = "c_zom_zombie_slackjaw_head"; - return a; -} diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/character/c_zom_arlington.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/character/c_zom_arlington.gsc deleted file mode 100644 index 1ba8568..0000000 --- a/Zombie Maps/Alcatraz/zm_prison_patch/character/c_zom_arlington.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_arlington_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_arlington_fb" ); -} diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/character/c_zom_deluca.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/character/c_zom_deluca.gsc deleted file mode 100644 index 9dde50a..0000000 --- a/Zombie Maps/Alcatraz/zm_prison_patch/character/c_zom_deluca.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_deluca_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_deluca_fb" ); -} diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/character/c_zom_handsome.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/character/c_zom_handsome.gsc deleted file mode 100644 index 9591983..0000000 --- a/Zombie Maps/Alcatraz/zm_prison_patch/character/c_zom_handsome.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_handsome_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_handsome_fb" ); -} diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/character/c_zom_oleary.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/character/c_zom_oleary.gsc deleted file mode 100644 index bc64b4e..0000000 --- a/Zombie Maps/Alcatraz/zm_prison_patch/character/c_zom_oleary.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_oleary_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_oleary_fb" ); -} diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/gametypes_zm/zgrief.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/gametypes_zm/zgrief.gsc deleted file mode 100644 index b06e3b4..0000000 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/gametypes_zm/zgrief.gsc +++ /dev/null @@ -1,815 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include maps\mp\_utility; -#include maps\mp\gametypes_zm\_hud_util; -#include common_scripts\utility; -#include maps\mp\zombies\_zm_utility; -#include maps\mp\gametypes_zm\_zm_gametype; -#include maps\mp\zombies\_zm_stats; -#include maps\mp\gametypes_zm\zmeat; -#include maps\mp\zombies\_zm_powerups; -#include maps\mp\zombies\_zm_game_module_meat_utility; -#include maps\mp\zombies\_zm; -#include maps\mp\zombies\_zm_game_module; -#include maps\mp\zombies\_zm_magicbox; -#include maps\mp\zombies\_zm_weap_cymbal_monkey; -#include maps\mp\zombies\_zm_laststand; -#include maps\mp\_demo; -#include maps\mp\zombies\_zm_zonemgr; -#include maps\mp\zombies\_zm_audio_announcer; -#include maps\mp\zombies\_zm_weapons; -#include maps\mp\zombies\_zm_equipment; - -main() -{ - maps\mp\gametypes_zm\_zm_gametype::main(); - level.onprecachegametype = ::onprecachegametype; - level.onstartgametype = ::onstartgametype; - level.custom_spectate_permissions = ::setspectatepermissionsgrief; - level._game_module_custom_spawn_init_func = maps\mp\gametypes_zm\_zm_gametype::custom_spawn_init_func; - level._game_module_stat_update_func = maps\mp\zombies\_zm_stats::grief_custom_stat_update; - level._game_module_player_damage_callback = maps\mp\gametypes_zm\_zm_gametype::game_module_player_damage_callback; - level.custom_end_screen = ::custom_end_screen; - level.gamemode_map_postinit["zgrief"] = ::postinit_func; - level._supress_survived_screen = 1; - level.game_module_team_name_override_og_x = 155; - level.prevent_player_damage = ::player_prevent_damage; - level._game_module_player_damage_grief_callback = ::game_module_player_damage_grief_callback; - level._grief_reset_message = ::grief_reset_message; - level._game_module_player_laststand_callback = ::grief_laststand_weapon_save; - level.onplayerspawned_restore_previous_weapons = ::grief_laststand_weapons_return; - level.game_module_onplayerconnect = ::grief_onplayerconnect; - level.game_mode_spawn_player_logic = ::game_mode_spawn_player_logic; - level.game_mode_custom_onplayerdisconnect = ::grief_onplayerdisconnect; - maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zgrief" ); -} - -grief_onplayerconnect() -{ - self thread move_team_icons(); - self thread maps\mp\gametypes_zm\zmeat::create_item_meat_watcher(); - self thread zgrief_player_bled_out_msg(); -} - -grief_onplayerdisconnect( disconnecting_player ) -{ - level thread update_players_on_bleedout_or_disconnect( disconnecting_player ); -} - -setspectatepermissionsgrief() -{ - self allowspectateteam( "allies", 1 ); - self allowspectateteam( "axis", 1 ); - self allowspectateteam( "freelook", 0 ); - self allowspectateteam( "none", 1 ); -} - -custom_end_screen() -{ - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - players[i].game_over_hud = newclienthudelem( players[i] ); - players[i].game_over_hud.alignx = "center"; - players[i].game_over_hud.aligny = "middle"; - players[i].game_over_hud.horzalign = "center"; - players[i].game_over_hud.vertalign = "middle"; - players[i].game_over_hud.y -= 130; - players[i].game_over_hud.foreground = 1; - players[i].game_over_hud.fontscale = 3; - players[i].game_over_hud.alpha = 0; - players[i].game_over_hud.color = ( 1, 1, 1 ); - players[i].game_over_hud.hidewheninmenu = 1; - players[i].game_over_hud settext( &"ZOMBIE_GAME_OVER" ); - players[i].game_over_hud fadeovertime( 1 ); - players[i].game_over_hud.alpha = 1; - - if ( players[i] issplitscreen() ) - { - players[i].game_over_hud.fontscale = 2; - players[i].game_over_hud.y += 40; - } - - players[i].survived_hud = newclienthudelem( players[i] ); - players[i].survived_hud.alignx = "center"; - players[i].survived_hud.aligny = "middle"; - players[i].survived_hud.horzalign = "center"; - players[i].survived_hud.vertalign = "middle"; - players[i].survived_hud.y -= 100; - players[i].survived_hud.foreground = 1; - players[i].survived_hud.fontscale = 2; - players[i].survived_hud.alpha = 0; - players[i].survived_hud.color = ( 1, 1, 1 ); - players[i].survived_hud.hidewheninmenu = 1; - - if ( players[i] issplitscreen() ) - { - players[i].survived_hud.fontscale = 1.5; - players[i].survived_hud.y += 40; - } - - winner_text = &"ZOMBIE_GRIEF_WIN"; - loser_text = &"ZOMBIE_GRIEF_LOSE"; - - if ( level.round_number < 2 ) - { - winner_text = &"ZOMBIE_GRIEF_WIN_SINGLE"; - loser_text = &"ZOMBIE_GRIEF_LOSE_SINGLE"; - } - - if ( isdefined( level.host_ended_game ) && level.host_ended_game ) - players[i].survived_hud settext( &"MP_HOST_ENDED_GAME" ); - else if ( isdefined( level.gamemodulewinningteam ) && players[i]._encounters_team == level.gamemodulewinningteam ) - players[i].survived_hud settext( winner_text, level.round_number ); - else - players[i].survived_hud settext( loser_text, level.round_number ); - - players[i].survived_hud fadeovertime( 1 ); - players[i].survived_hud.alpha = 1; - } -} - -postinit_func() -{ - level.min_humans = 1; - level.zombie_ai_limit = 24; - level.prevent_player_damage = ::player_prevent_damage; - level.lock_player_on_team_score = 1; - level._zombiemode_powerup_grab = ::meat_stink_powerup_grab; - level.meat_bounce_override = ::meat_bounce_override; - level._zombie_spawning = 0; - level._get_game_module_players = undefined; - level.powerup_drop_count = 0; - level.is_zombie_level = 1; - level._effect["meat_impact"] = loadfx( "maps/zombie/fx_zmb_meat_impact" ); - level._effect["spawn_cloud"] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); - level._effect["meat_stink_camera"] = loadfx( "maps/zombie/fx_zmb_meat_stink_camera" ); - level._effect["meat_stink_torso"] = loadfx( "maps/zombie/fx_zmb_meat_stink_torso" ); - include_powerup( "meat_stink" ); - maps\mp\zombies\_zm_powerups::add_zombie_powerup( "meat_stink", "t6_wpn_zmb_meat_world", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_drop_meat, 0, 0, 0 ); - setmatchtalkflag( "DeadChatWithDead", 1 ); - setmatchtalkflag( "DeadChatWithTeam", 1 ); - setmatchtalkflag( "DeadHearTeamLiving", 1 ); - setmatchtalkflag( "DeadHearAllLiving", 1 ); - setmatchtalkflag( "EveryoneHearsEveryone", 1 ); -} - -func_should_drop_meat() -{ - if ( minigun_no_drop() ) - return false; - - return true; -} - -minigun_no_drop() -{ - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - if ( players[i].ignoreme == 1 ) - return true; - } - - if ( isdefined( level.meat_on_ground ) && level.meat_on_ground ) - return true; - - return false; -} - -grief_game_end_check_func() -{ - return 0; -} - -player_prevent_damage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) -{ - if ( isdefined( eattacker ) && isplayer( eattacker ) && self != eattacker && !eattacker hasperk( "specialty_noname" ) && !( isdefined( self.is_zombie ) && self.is_zombie ) ) - return true; - - return false; -} - -game_module_player_damage_grief_callback( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) -{ - penalty = 10; - - if ( isdefined( eattacker ) && isplayer( eattacker ) && eattacker != self && eattacker.team != self.team && smeansofdeath == "MOD_MELEE" ) - self applyknockback( idamage, vdir ); -} - -onprecachegametype() -{ - level.playersuicideallowed = 1; - level.canplayersuicide = ::canplayersuicide; - level.suicide_weapon = "death_self_zm"; - precacheitem( "death_self_zm" ); - precacheshellshock( "grief_stab_zm" ); - precacheshader( "faction_cdc" ); - precacheshader( "faction_cia" ); - precacheshader( "waypoint_revive_cdc_zm" ); - precacheshader( "waypoint_revive_cia_zm" ); - level._effect["butterflies"] = loadfx( "maps/zombie/fx_zmb_impact_noharm" ); - level thread maps\mp\zombies\_zm_game_module_meat_utility::init_item_meat( "zgrief" ); - level thread maps\mp\gametypes_zm\_zm_gametype::init(); - maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zgrief" ); -} - -onstartgametype() -{ - level.no_end_game_check = 1; - level._game_module_game_end_check = ::grief_game_end_check_func; - level.round_end_custom_logic = ::grief_round_end_custom_logic; - maps\mp\gametypes_zm\_zm_gametype::setup_classic_gametype(); - maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zgrief", ::zgrief_main ); -} - -zgrief_main() -{ - level thread maps\mp\zombies\_zm::round_start(); - level thread maps\mp\gametypes_zm\_zm_gametype::kill_all_zombies(); - flag_wait( "initial_blackscreen_passed" ); - level thread maps\mp\zombies\_zm_game_module::wait_for_team_death_and_round_end(); - players = get_players(); - - foreach ( player in players ) - player.is_hotjoin = 0; - - wait 1; - playsoundatposition( "vox_zmba_grief_intro_0", ( 0, 0, 0 ) ); -} - -move_team_icons() -{ - self endon( "disconnect" ); - flag_wait( "initial_blackscreen_passed" ); - wait 0.5; -} - -kill_start_chest() -{ - flag_wait( "initial_blackscreen_passed" ); - wait 2; - start_chest = getstruct( "start_chest", "script_noteworthy" ); - start_chest maps\mp\zombies\_zm_magicbox::hide_chest(); -} - -meat_stink_powerup_grab( powerup, who ) -{ - switch ( powerup.powerup_name ) - { - case "meat_stink": - level thread meat_stink( who ); - break; - } -} - -meat_stink( who ) -{ - weapons = who getweaponslist(); - has_meat = 0; - - foreach ( weapon in weapons ) - { - if ( weapon == "item_meat_zm" ) - has_meat = 1; - } - - if ( has_meat ) - return; - - who.pre_meat_weapon = who getcurrentweapon(); - level notify( "meat_grabbed" ); - who notify( "meat_grabbed" ); - who playsound( "zmb_pickup_meat" ); - who increment_is_drinking(); - who giveweapon( "item_meat_zm" ); - who switchtoweapon( "item_meat_zm" ); - who setweaponammoclip( "item_meat_zm", 1 ); -} - -meat_stink_on_ground( position_to_play ) -{ - level.meat_on_ground = 1; - attractor_point = spawn( "script_model", position_to_play ); - attractor_point setmodel( "tag_origin" ); - attractor_point playsound( "zmb_land_meat" ); - wait 0.2; - playfxontag( level._effect["meat_stink_torso"], attractor_point, "tag_origin" ); - attractor_point playloopsound( "zmb_meat_flies" ); - attractor_point create_zombie_point_of_interest( 1536, 32, 10000 ); - attractor_point.attract_to_origin = 1; - attractor_point thread create_zombie_point_of_interest_attractor_positions( 4, 45 ); - attractor_point thread maps\mp\zombies\_zm_weap_cymbal_monkey::wait_for_attractor_positions_complete(); - attractor_point delay_thread( 15, ::self_delete ); - wait 16.0; - level.meat_on_ground = undefined; -} - -meat_bounce_override( pos, normal, ent ) -{ - if ( isdefined( ent ) && isplayer( ent ) ) - { - if ( !ent maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) - { - level thread meat_stink_player( ent ); - - if ( isdefined( self.owner ) ) - { - maps\mp\_demo::bookmark( "zm_player_meat_stink", gettime(), ent, self.owner, 0, self ); - self.owner maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_given" ); - } - } - } - else - { - players = getplayers(); - closest_player = undefined; - closest_player_dist = 10000.0; - - for ( player_index = 0; player_index < players.size; player_index++ ) - { - player_to_check = players[player_index]; - - if ( self.owner == player_to_check ) - continue; - - if ( player_to_check maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) - continue; - - distsq = distancesquared( pos, player_to_check.origin ); - - if ( distsq < closest_player_dist ) - { - closest_player = player_to_check; - closest_player_dist = distsq; - } - } - - if ( isdefined( closest_player ) ) - { - level thread meat_stink_player( closest_player ); - - if ( isdefined( self.owner ) ) - { - maps\mp\_demo::bookmark( "zm_player_meat_stink", gettime(), closest_player, self.owner, 0, self ); - self.owner maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_given" ); - } - } - else - { - valid_poi = check_point_in_enabled_zone( pos, undefined, undefined ); - - if ( valid_poi ) - { - self hide(); - level thread meat_stink_on_ground( self.origin ); - } - } - - playfx( level._effect["meat_impact"], self.origin ); - } - - self delete(); -} - -meat_stink_player( who ) -{ - level notify( "new_meat_stink_player" ); - level endon( "new_meat_stink_player" ); - who.ignoreme = 0; - players = get_players(); - - foreach ( player in players ) - { - player thread meat_stink_player_cleanup(); - - if ( player != who ) - player.ignoreme = 1; - } - - who thread meat_stink_player_create(); - who waittill_any_or_timeout( 30, "disconnect", "player_downed", "bled_out" ); - players = get_players(); - - foreach ( player in players ) - { - player thread meat_stink_player_cleanup(); - player.ignoreme = 0; - } -} - -meat_stink_player_create() -{ - self maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_received" ); - self endon( "disconnect" ); - self endon( "death" ); - tagname = "J_SpineLower"; - self.meat_stink_3p = spawn( "script_model", self gettagorigin( tagname ) ); - self.meat_stink_3p setmodel( "tag_origin" ); - self.meat_stink_3p linkto( self, tagname ); - wait 0.5; - playfxontag( level._effect["meat_stink_torso"], self.meat_stink_3p, "tag_origin" ); - self setclientfieldtoplayer( "meat_stink", 1 ); -} - -meat_stink_player_cleanup() -{ - if ( isdefined( self.meat_stink_3p ) ) - { - self.meat_stink_3p unlink(); - self.meat_stink_3p delete(); - } - - self setclientfieldtoplayer( "meat_stink", 0 ); -} - -door_close_zombie_think() -{ - self endon( "death" ); - - while ( isalive( self ) ) - { - if ( isdefined( self.enemy ) && isplayer( self.enemy ) ) - { - insamezone = 0; - keys = getarraykeys( level.zones ); - - for ( i = 0; i < keys.size; i++ ) - { - if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( keys[i] ) && self.enemy maps\mp\zombies\_zm_zonemgr::entity_in_zone( keys[i] ) ) - insamezone = 1; - } - - if ( insamezone ) - { - wait 3; - continue; - } - - nearestzombienode = getnearestnode( self.origin ); - nearestplayernode = getnearestnode( self.enemy.origin ); - - if ( isdefined( nearestzombienode ) && isdefined( nearestplayernode ) ) - { - if ( !nodesvisible( nearestzombienode, nearestplayernode ) && !nodescanpath( nearestzombienode, nearestplayernode ) ) - self silentlyremovezombie(); - } - } - - wait 1; - } -} - -silentlyremovezombie() -{ - level.zombie_total++; - playfx( level._effect["spawn_cloud"], self.origin ); - self.skip_death_notetracks = 1; - self.nodeathragdoll = 1; - self dodamage( self.maxhealth * 2, self.origin, self, self, "none", "MOD_SUICIDE" ); - self self_delete(); -} - -zgrief_player_bled_out_msg() -{ - level endon( "end_game" ); - self endon( "disconnect" ); - - while ( true ) - { - self waittill( "bled_out" ); - - level thread update_players_on_bleedout_or_disconnect( self ); - } -} - -show_grief_hud_msg( msg, msg_parm, offset, cleanup_end_game ) -{ - self endon( "disconnect" ); - - while ( isdefined( level.hostmigrationtimer ) ) - wait 0.05; - - zgrief_hudmsg = newclienthudelem( self ); - zgrief_hudmsg.alignx = "center"; - zgrief_hudmsg.aligny = "middle"; - zgrief_hudmsg.horzalign = "center"; - zgrief_hudmsg.vertalign = "middle"; - zgrief_hudmsg.y -= 130; - - if ( self issplitscreen() ) - zgrief_hudmsg.y += 70; - - if ( isdefined( offset ) ) - zgrief_hudmsg.y += offset; - - zgrief_hudmsg.foreground = 1; - zgrief_hudmsg.fontscale = 5; - zgrief_hudmsg.alpha = 0; - zgrief_hudmsg.color = ( 1, 1, 1 ); - zgrief_hudmsg.hidewheninmenu = 1; - zgrief_hudmsg.font = "default"; - - if ( isdefined( cleanup_end_game ) && cleanup_end_game ) - { - level endon( "end_game" ); - zgrief_hudmsg thread show_grief_hud_msg_cleanup(); - } - - if ( isdefined( msg_parm ) ) - zgrief_hudmsg settext( msg, msg_parm ); - else - zgrief_hudmsg settext( msg ); - - zgrief_hudmsg changefontscaleovertime( 0.25 ); - zgrief_hudmsg fadeovertime( 0.25 ); - zgrief_hudmsg.alpha = 1; - zgrief_hudmsg.fontscale = 2; - wait 3.25; - zgrief_hudmsg changefontscaleovertime( 1 ); - zgrief_hudmsg fadeovertime( 1 ); - zgrief_hudmsg.alpha = 0; - zgrief_hudmsg.fontscale = 5; - wait 1; - zgrief_hudmsg notify( "death" ); - - if ( isdefined( zgrief_hudmsg ) ) - zgrief_hudmsg destroy(); -} - -show_grief_hud_msg_cleanup() -{ - self endon( "death" ); - - level waittill( "end_game" ); - - if ( isdefined( self ) ) - self destroy(); -} - -grief_reset_message() -{ - msg = &"ZOMBIE_GRIEF_RESET"; - players = get_players(); - - if ( isdefined( level.hostmigrationtimer ) ) - { - while ( isdefined( level.hostmigrationtimer ) ) - wait 0.05; - - wait 4; - } - - foreach ( player in players ) - player thread show_grief_hud_msg( msg ); - - level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "grief_restarted" ); -} - -grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) -{ - self.grief_savedweapon_weapons = self getweaponslist(); - self.grief_savedweapon_weaponsammo_stock = []; - self.grief_savedweapon_weaponsammo_clip = []; - self.grief_savedweapon_currentweapon = self getcurrentweapon(); - self.grief_savedweapon_grenades = self get_player_lethal_grenade(); - - if ( isdefined( self.grief_savedweapon_grenades ) ) - self.grief_savedweapon_grenades_clip = self getweaponammoclip( self.grief_savedweapon_grenades ); - - self.grief_savedweapon_tactical = self get_player_tactical_grenade(); - - if ( isdefined( self.grief_savedweapon_tactical ) ) - self.grief_savedweapon_tactical_clip = self getweaponammoclip( self.grief_savedweapon_tactical ); - - for ( i = 0; i < self.grief_savedweapon_weapons.size; i++ ) - { - self.grief_savedweapon_weaponsammo_clip[i] = self getweaponammoclip( self.grief_savedweapon_weapons[i] ); - self.grief_savedweapon_weaponsammo_stock[i] = self getweaponammostock( self.grief_savedweapon_weapons[i] ); - } - - if ( isdefined( self.hasriotshield ) && self.hasriotshield ) - self.grief_hasriotshield = 1; - - if ( self hasweapon( "claymore_zm" ) ) - { - self.grief_savedweapon_claymore = 1; - self.grief_savedweapon_claymore_clip = self getweaponammoclip( "claymore_zm" ); - } - - if ( isdefined( self.current_equipment ) ) - self.grief_savedweapon_equipment = self.current_equipment; -} - -grief_laststand_weapons_return() -{ - if ( !( isdefined( level.isresetting_grief ) && level.isresetting_grief ) ) - return false; - - if ( !isdefined( self.grief_savedweapon_weapons ) ) - return false; - - primary_weapons_returned = 0; - - foreach ( index, weapon in self.grief_savedweapon_weapons ) - { - if ( isdefined( self.grief_savedweapon_grenades ) && weapon == self.grief_savedweapon_grenades || isdefined( self.grief_savedweapon_tactical ) && weapon == self.grief_savedweapon_tactical ) - continue; - - if ( isweaponprimary( weapon ) ) - { - if ( primary_weapons_returned >= 2 ) - continue; - - primary_weapons_returned++; - } - - if ( "item_meat_zm" == weapon ) - continue; - - self giveweapon( weapon, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); - - if ( isdefined( self.grief_savedweapon_weaponsammo_clip[index] ) ) - self setweaponammoclip( weapon, self.grief_savedweapon_weaponsammo_clip[index] ); - - if ( isdefined( self.grief_savedweapon_weaponsammo_stock[index] ) ) - self setweaponammostock( weapon, self.grief_savedweapon_weaponsammo_stock[index] ); - } - - if ( isdefined( self.grief_savedweapon_grenades ) ) - { - self giveweapon( self.grief_savedweapon_grenades ); - - if ( isdefined( self.grief_savedweapon_grenades_clip ) ) - self setweaponammoclip( self.grief_savedweapon_grenades, self.grief_savedweapon_grenades_clip ); - } - - if ( isdefined( self.grief_savedweapon_tactical ) ) - { - self giveweapon( self.grief_savedweapon_tactical ); - - if ( isdefined( self.grief_savedweapon_tactical_clip ) ) - self setweaponammoclip( self.grief_savedweapon_tactical, self.grief_savedweapon_tactical_clip ); - } - - if ( isdefined( self.current_equipment ) ) - self maps\mp\zombies\_zm_equipment::equipment_take( self.current_equipment ); - - if ( isdefined( self.grief_savedweapon_equipment ) ) - { - self.do_not_display_equipment_pickup_hint = 1; - self maps\mp\zombies\_zm_equipment::equipment_give( self.grief_savedweapon_equipment ); - self.do_not_display_equipment_pickup_hint = undefined; - } - - if ( isdefined( self.grief_hasriotshield ) && self.grief_hasriotshield ) - { - if ( isdefined( self.player_shield_reset_health ) ) - self [[ self.player_shield_reset_health ]](); - } - - if ( isdefined( self.grief_savedweapon_claymore ) && self.grief_savedweapon_claymore ) - { - self giveweapon( "claymore_zm" ); - self set_player_placeable_mine( "claymore_zm" ); - self setactionslot( 4, "weapon", "claymore_zm" ); - self setweaponammoclip( "claymore_zm", self.grief_savedweapon_claymore_clip ); - } - - primaries = self getweaponslistprimaries(); - - foreach ( weapon in primaries ) - { - if ( isdefined( self.grief_savedweapon_currentweapon ) && self.grief_savedweapon_currentweapon == weapon ) - { - self switchtoweapon( weapon ); - return true; - } - } - - if ( primaries.size > 0 ) - { - self switchtoweapon( primaries[0] ); - return true; - } -/# - assert( primaries.size > 0, "GRIEF: There was a problem restoring the weapons" ); -#/ - return false; -} - -grief_store_player_scores() -{ - players = get_players(); - - foreach ( player in players ) - player._pre_round_score = player.score; -} - -grief_restore_player_score() -{ - if ( !isdefined( self._pre_round_score ) ) - self._pre_round_score = self.score; - - if ( isdefined( self._pre_round_score ) ) - { - self.score = self._pre_round_score; - self.pers["score"] = self._pre_round_score; - } -} - -game_mode_spawn_player_logic() -{ - if ( flag( "start_zombie_round_logic" ) && !isdefined( self.is_hotjoin ) ) - { - self.is_hotjoin = 1; - return true; - } - - return false; -} - -update_players_on_bleedout_or_disconnect( excluded_player ) -{ - other_team = undefined; - players = get_players(); - players_remaining = 0; - - foreach ( player in players ) - { - if ( player == excluded_player ) - continue; - - if ( player.team == excluded_player.team ) - { - if ( is_player_valid( player ) ) - players_remaining++; - - continue; - } - } - - foreach ( player in players ) - { - if ( player == excluded_player ) - continue; - - if ( player.team != excluded_player.team ) - { - other_team = player.team; - - if ( players_remaining < 1 ) - { - player thread show_grief_hud_msg( &"ZOMBIE_ZGRIEF_ALL_PLAYERS_DOWN", undefined, undefined, 1 ); - player delay_thread_watch_host_migrate( 2, ::show_grief_hud_msg, &"ZOMBIE_ZGRIEF_SURVIVE", undefined, 30, 1 ); - continue; - } - - player thread show_grief_hud_msg( &"ZOMBIE_ZGRIEF_PLAYER_BLED_OUT", players_remaining ); - } - } - - if ( players_remaining == 1 ) - level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "last_player", excluded_player.team ); - - if ( !isdefined( other_team ) ) - return; - - if ( players_remaining < 1 ) - level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "4_player_down", other_team ); - else - level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( players_remaining + "_player_left", other_team ); -} - -delay_thread_watch_host_migrate( timer, func, param1, param2, param3, param4, param5, param6 ) -{ - self thread _delay_thread_watch_host_migrate_proc( func, timer, param1, param2, param3, param4, param5, param6 ); -} - -_delay_thread_watch_host_migrate_proc( func, timer, param1, param2, param3, param4, param5, param6 ) -{ - self endon( "death" ); - self endon( "disconnect" ); - wait( timer ); - - if ( isdefined( level.hostmigrationtimer ) ) - { - while ( isdefined( level.hostmigrationtimer ) ) - wait 0.05; - - wait( timer ); - } - - single_thread( self, func, param1, param2, param3, param4, param5, param6 ); -} - -grief_round_end_custom_logic() -{ - waittillframeend; - - if ( isdefined( level.gamemodulewinningteam ) ) - level notify( "end_round_think" ); -} diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/gametypes_zm/zmeat.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/gametypes_zm/zmeat.gsc deleted file mode 100644 index 0f0a9b3..0000000 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/gametypes_zm/zmeat.gsc +++ /dev/null @@ -1,2296 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include maps\mp\_utility; -#include maps\mp\gametypes_zm\_hud_util; -#include common_scripts\utility; -#include maps\mp\zombies\_zm_game_module_meat_utility; -#include maps\mp\gametypes_zm\_zm_gametype; -#include maps\mp\zombies\_zm; -#include maps\mp\zombies\_zm_game_module; -#include maps\mp\zombies\_zm_audio; -#include maps\mp\gametypes_zm\_weaponobjects; -#include maps\mp\zombies\_zm_audio_announcer; -#include maps\mp\zombies\_zm_weapons; -#include maps\mp\zombies\_zm_laststand; -#include maps\mp\gametypes_zm\_globallogic_score; -#include maps\mp\zombies\_zm_utility; -#include maps\mp\zombies\_zm_spawner; - -main() -{ - maps\mp\gametypes_zm\_zm_gametype::main(); - registerclientfield( "allplayers", "holding_meat", 7000, 1, "int" ); - registerclientfield( "scriptmover", "ring_glowfx", 7000, 1, "int" ); - registerclientfield( "scriptmover", "ring_glow_meatfx", 7000, 1, "int" ); - level.onprecachegametype = ::onprecachegametype; - level.onstartgametype = ::onstartgametype; - set_game_var( "ZM_roundLimit", 5 ); - set_game_var( "ZM_scoreLimit", 5 ); - set_gamemode_var( "post_init_zombie_spawn_func", ::meat_zombie_post_spawn_init ); - set_gamemode_var( "match_end_notify", "meat_end" ); - set_gamemode_var( "match_end_func", ::meat_end_match ); - level._no_static_unitriggers = 1; - level._game_module_player_damage_callback = maps\mp\gametypes_zm\_zm_gametype::game_module_player_damage_callback; - level._game_module_player_laststand_callback = ::meat_last_stand_callback; - level.no_end_game_check = 1; - maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zmeat" ); - level thread maps\mp\gametypes_zm\_zm_gametype::init(); - level.zm_roundswitch = 1; - level.zm_switchsides_on_roundswitch = 1; - level._effect["meat_marker"] = loadfx( "maps/zombie/fx_zmb_meat_marker" ); - level._effect["butterflies"] = loadfx( "maps/zombie/fx_zmb_impact_noharm" ); - level._effect["meat_glow"] = loadfx( "maps/zombie/fx_zmb_meat_glow" ); - level._effect["meat_glow3p"] = loadfx( "maps/zombie/fx_zmb_meat_glow_3p" ); - level._effect["spawn_cloud"] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); - level._effect["fw_burst"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_burst_center" ); - level._effect["fw_impact"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_drop_impact" ); - level._effect["fw_drop"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_drop_trail" ); - level._effect["fw_trail"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_trail" ); - level._effect["fw_trail_cheap"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_trail_intro" ); - level._effect["fw_pre_burst"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_burst_small" ); - level._effect["meat_bounce"] = loadfx( "maps/zombie/fx_zmb_meat_collision_glow" ); - level._effect["ring_glow"] = loadfx( "misc/fx_zombie_powerup_on" ); - level.can_revive_game_module = ::can_revive; - onplayerconnect_callback( ::meat_on_player_connect ); - spawn_level_meat_manager(); - init_animtree(); -} - -onprecachegametype() -{ - level thread maps\mp\zombies\_zm_game_module_meat_utility::init_item_meat( "zmeat" ); - maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zmeat" ); - game_mode_objects = getstructarray( "game_mode_object", "targetname" ); - meat_objects = getstructarray( "meat_object", "targetname" ); - all_structs = arraycombine( game_mode_objects, meat_objects, 1, 0 ); - - for ( i = 0; i < all_structs.size; i++ ) - { - if ( isdefined( all_structs[i].script_parameters ) ) - precachemodel( all_structs[i].script_parameters ); - } - - precacheshellshock( "grief_stab_zm" ); - precacheitem( "minigun_zm" ); - precacheshader( "faction_cdc" ); - precacheshader( "faction_cia" ); - precachemodel( "p6_zm_sign_meat_01_step1" ); - precachemodel( "p6_zm_sign_meat_01_step2" ); - precachemodel( "p6_zm_sign_meat_01_step3" ); - precachemodel( "p6_zm_sign_meat_01_step4" ); -} - -meat_hub_start_func() -{ - level thread meat_player_initial_spawn(); - level thread item_meat_reset( level._meat_start_point ); - level thread spawn_meat_zombies(); - level thread monitor_meat_on_team(); - level thread init_minigun_ring(); - level thread init_splitter_ring(); - level thread init_ammo_ring(); - level thread hide_non_meat_objects(); - level thread setup_meat_world_objects(); - level._zombie_path_timer_override = ::zombie_path_timer_override; - level.zombie_health = level.zombie_vars["zombie_health_start"]; - level._zombie_spawning = 0; - level._poi_override = ::meat_poi_override_func; - level._meat_on_team = undefined; - level._meat_zombie_spawn_timer = 2; - level._meat_zombie_spawn_health = 1; - level._minigun_time_override = 15; - level._get_game_module_players = ::get_game_module_players; - level.powerup_drop_count = 0; - level.meat_spawners = level.zombie_spawners; - - if ( !( isdefined( level._meat_callback_initialized ) && level._meat_callback_initialized ) ) - { - maps\mp\zombies\_zm::register_player_damage_callback( maps\mp\zombies\_zm_game_module::damage_callback_no_pvp_damage ); - level._meat_callback_initialized = 1; - } - - setmatchtalkflag( "DeadChatWithDead", 1 ); - setmatchtalkflag( "DeadChatWithTeam", 1 ); - setmatchtalkflag( "DeadHearTeamLiving", 1 ); - setmatchtalkflag( "DeadHearAllLiving", 1 ); - setmatchtalkflag( "EveryoneHearsEveryone", 1 ); - setteamhasmeat( "allies", 0 ); - setteamhasmeat( "axis", 0 ); - level thread zmbmusicsetupmeat(); - level.zombie_spawn_fx = level._effect["spawn_cloud"]; - weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); - - for ( i = 0; i < weapon_spawns.size; i++ ) - weapon_spawns[i] trigger_off(); - - level thread monitor_meat_on_side(); - level thread item_meat_watch_for_throw(); - level thread hold_meat_monitor(); - flag_wait( "start_encounters_match_logic" ); - level thread wait_for_team_death( 1 ); - level thread wait_for_team_death( 2 ); - level.team_a_downed = 0; - level.team_b_downed = 0; -} - -meat_on_player_connect() -{ - hotjoined = flag( "initial_players_connected" ); - self thread spawn_player_meat_manager(); - self thread wait_for_player_disconnect(); - self thread wait_for_player_downed(); -/# - self thread watch_debug_input(); -#/ - if ( hotjoined ) - { - one = 1; - two = 2; - - if ( get_game_var( "switchedsides" ) ) - { - one = 2; - two = 1; - } - - if ( get_game_var( "side_selection" ) == 1 ) - { - if ( self.team == "allies" ) - self._meat_team = one; - else - self._meat_team = two; - } - else if ( self.team == "allies" ) - self._meat_team = two; - else - self._meat_team = one; - - self meat_player_setup(); - } -} - -meat_on_player_disconnect() -{ - team0 = 1; - team1 = 2; - team_counts = []; - team_counts[team0] = 0; - team_counts[team1] = 0; - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - team_counts[players[i]._meat_team] += 1; - - if ( team_counts[team0] == 0 ) - maps\mp\gametypes_zm\_zm_gametype::end_rounds_early( "B" ); - - if ( team_counts[team1] == 0 ) - maps\mp\gametypes_zm\_zm_gametype::end_rounds_early( "A" ); -} - -wait_for_player_disconnect() -{ - level endon( "end_game" ); - - self waittill( "disconnect" ); - - meat_on_player_disconnect(); -} - -watch_debug_input() -{ -/# - self endon( "disconnect" ); - - for (;;) - { - if ( self actionslottwobuttonpressed() ) - { - if ( getdvar( _hash_B188A91 ) != "" ) - { - self disableinvulnerability(); - self dodamage( self.health + 666, self.origin ); - } - } - - wait 0.05; - } -#/ -} - -zmbmusicsetupmeat() -{ - level.zmb_music_states["game_over"] = undefined; - level thread maps\mp\zombies\_zm_audio::setupmusicstate( "waiting", "ENC_WAITING", 0, 0, 0, undefined ); - level thread maps\mp\zombies\_zm_audio::setupmusicstate( "round_start", "ENC_ROUND_START", 0, 0, 0, undefined ); - level thread maps\mp\zombies\_zm_audio::setupmusicstate( "round_end", "ENC_ROUND_END", 0, 0, 0, undefined ); - level thread maps\mp\zombies\_zm_audio::setupmusicstate( "halftime", "ENC_HALFTIME", 0, 0, 0, undefined ); - level thread maps\mp\zombies\_zm_audio::setupmusicstate( "match_over", "ENC_MATCH_OVER", 0, 0, 0, undefined ); -} - -monitor_meat_on_side() -{ - level endon( "meat_end" ); - - level waittill( "meat_grabbed" ); - - last_team = level._meat_on_team; - level.meat_lost_time_limit = 5000; - - while ( true ) - { - if ( isdefined( level.item_meat ) ) - { - if ( !isdefined( level._meat_team_1_volume ) || !isdefined( level._meat_team_2_volume ) ) - iprintlnbold( "BUG: There is something wrong with the team volumes" ); - - if ( isdefined( level._meat_team_1_volume ) && level.item_meat istouching( level._meat_team_1_volume ) ) - { - level._meat_on_team = 1; - level.meat_lost_time = undefined; - } - else if ( isdefined( level._meat_team_2_volume ) && level.item_meat istouching( level._meat_team_2_volume ) ) - { - level._meat_on_team = 2; - level.meat_lost_time = undefined; - } - else if ( isdefined( last_team ) ) - { - if ( !isdefined( level.meat_lost_time ) ) - level.meat_lost_time = gettime(); - else if ( gettime() - level.meat_lost_time > level.meat_lost_time_limit ) - { - add_meat_event( "level_lost_meat" ); - level thread item_meat_reset( level._meat_start_point, 1 ); - level.meat_lost_time = undefined; - - level waittill( "meat_grabbed" ); - } - } - } - else - { - player_with_meat = get_player_with_meat(); - - if ( !isdefined( player_with_meat ) ) - { - if ( !isdefined( level.meat_lost_time ) ) - level.meat_lost_time = gettime(); - else if ( gettime() - level.meat_lost_time > level.meat_lost_time_limit ) - { - add_meat_event( "level_lost_meat" ); - level thread item_meat_reset( level._meat_start_point, 1 ); - level.meat_lost_time = undefined; - - level waittill( "meat_grabbed" ); - } - } - else - level.meat_lost_time = undefined; - } - - if ( isdefined( level._meat_on_team ) && isdefined( last_team ) && level._meat_on_team != last_team ) - { - level notify( "clear_ignore_all" ); - add_meat_event( "level_meat_team", level._meat_on_team ); - last_team = level._meat_on_team; - assign_meat_to_team( undefined, level._meat_on_team ); -/# - if ( isdefined( level.item_meat ) ) - playfx( level._effect["spawn_cloud"], level.item_meat.origin ); -#/ - } - - wait 0.05; - } -} - -item_meat_watch_for_throw() -{ - level endon( "meat_end" ); - - for (;;) - { - level waittill( "meat_thrown", who ); - - add_meat_event( "player_thrown", who ); - - if ( isdefined( who._spawning_meat ) && who._spawning_meat ) - continue; - - if ( randomintrange( 1, 101 ) <= 10 ) - { - - } - - who._has_meat = 0; - - if ( isdefined( who._has_meat_hud ) ) - who._has_meat_hud destroy(); - - assign_meat_to_team( undefined, level._meat_on_team ); - } -} - -hold_meat_monitor() -{ - level endon( "meat_end" ); - - level waittill( "meat_grabbed" ); - - while ( true ) - { - player = get_player_with_meat(); - - if ( !isdefined( player ) ) - { - wait 0.2; - continue; - } - - if ( !should_try_to_bring_back_teammate( player._meat_team ) ) - { - wait 0.2; - continue; - } - - if ( !( isdefined( player._bringing_back_teammate ) && player._bringing_back_teammate ) ) - player thread bring_back_teammate_progress(); - - wait 0.2; - } -} - -meat_zombie_post_spawn_init() -{ - -} - -create_item_meat_watcher() -{ - wait 0.05; - watcher = self maps\mp\gametypes_zm\_weaponobjects::createuseweaponobjectwatcher( "item_meat", get_gamemode_var( "item_meat_name" ), self.team ); - watcher.pickup = ::item_meat_on_pickup; - watcher.onspawn = ::item_meat_spawned; - watcher.onspawnretrievetriggers = ::play_item_meat_on_spawn_retrieve_trigger; - watcher.headicon = 0; -} - -item_meat_spawned( unused0, unused1 ) -{ - maps\mp\gametypes_zm\_weaponobjects::voidonspawn( unused0, unused1 ); - self.meat_is_moving = 0; - self.meat_is_flying = 0; -} - -wait_for_player_downed() -{ - self endon( "disconnect" ); - - while ( isdefined( self ) ) - { - self waittill_any( "player_downed", "fake_death", "death" ); - add_meat_event( "player_down", self ); - wait 0.1; - - if ( isdefined( self._meat_team ) ) - { - self thread watch_save_player(); - players = get_players_on_meat_team( self._meat_team ); - - if ( players.size >= 2 ) - { - - } - } - } -} - -item_meat_watch_stationary() -{ - self endon( "death" ); - self endon( "picked_up" ); - self.meat_is_moving = 1; - - self waittill( "stationary" ); - - self playloopsound( "zmb_meat_looper", 2 ); - - if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) - add_meat_event( "meat_stationary", self ); - else - add_meat_event( "fake_meat_stationary", self ); - - if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) - { - level._meat_moving = 0; - level._meat_splitter_activated = 0; - level._last_person_to_throw_meat = undefined; - } - - self.meat_is_moving = 0; - - if ( isdefined( level._meat_on_team ) ) - { - teamplayers = get_players_on_meat_team( level._meat_on_team ); - - for ( i = 0; i < teamplayers.size; i++ ) - { - if ( isdefined( teamplayers[i] ) && isdefined( teamplayers[i]._encounters_team ) ) - { - level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_land", teamplayers[i]._encounters_team ); - break; - } - } - } -} - -item_meat_watch_bounce() -{ - self endon( "death" ); - self endon( "picked_up" ); - self.meat_is_flying = 1; - - self waittill( "grenade_bounce", pos, normal, ent ); - - if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) - add_meat_event( "meat_bounce", self, pos, normal, ent ); - else - add_meat_event( "fake_meat_bounce", self, pos, normal, ent ); - - if ( isdefined( level.meat_bounce_override ) ) - { - self thread [[ level.meat_bounce_override ]]( pos, normal, ent ); - return; - } - - if ( isdefined( level.spawned_collmap ) ) - { - if ( isdefined( ent ) && ent == level.spawned_collmap ) - playfx( level._effect["meat_bounce"], pos, normal ); - } - - if ( isdefined( ent ) && isplayer( ent ) ) - { - add_meat_event( "player_hit_player", self.owner, ent ); - self.owner hit_player_with_meat( ent ); - } - - self.meat_is_flying = 0; - self thread watch_for_roll(); - playfxontag( level._effect["meat_marker"], self, "tag_origin" ); -} - -watch_for_roll() -{ - self endon( "stationary" ); - self endon( "death" ); - self endon( "picked_up" ); - self.meat_is_rolling = 0; - - while ( true ) - { - old_z = self.origin[2]; - wait 1; - - if ( abs( old_z - self.origin[2] ) < 10 ) - { - self.meat_is_rolling = 1; - self playloopsound( "zmb_meat_looper", 2 ); - } - } -} - -stop_rolling() -{ - self.origin = self.origin; - self.angles = self.angles; -} - -hit_player_with_meat( hit_player ) -{ -/# - println( "MEAT: Player " + self.name + " hit " + hit_player.name + " with the meat\n" ); -#/ -} - -item_meat_pickup() -{ - self.meat_is_moving = 0; - self.meat_is_flying = 0; - level._meat_moving = 0; - level._meat_splitter_activated = 0; - self notify( "picked_up" ); -} - -player_wait_take_meat( meat_name ) -{ - self.dont_touch_the_meat = 1; - - if ( isdefined( self.pre_meat_weapon ) && self hasweapon( self.pre_meat_weapon ) ) - self switchtoweapon( self.pre_meat_weapon ); - else - { - primaryweapons = self getweaponslistprimaries(); - - if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) - self switchtoweapon( primaryweapons[0] ); - else - { -/# - assert( 0, "Player has no weapon" ); -#/ - self maps\mp\zombies\_zm_weapons::give_fallback_weapon(); - } - } - - self waittill_notify_or_timeout( "weapon_change_complete", 3 ); - self takeweapon( meat_name ); - self.pre_meat_weapon = undefined; - - if ( self.is_drinking ) - self decrement_is_drinking(); - - self.dont_touch_the_meat = 0; -} - -cleanup_meat() -{ - if ( isdefined( self.altmodel ) ) - self.altmodel delete(); - - self delete(); -} - -init_animtree() -{ - scriptmodelsuseanimtree( -1 ); -} - -#using_animtree("zombie_meat"); - -animate_meat( grenade ) -{ - grenade waittill_any( "bounce", "stationary", "death" ); - waittillframeend; - - if ( isdefined( grenade ) ) - { - grenade hide(); - altmodel = spawn( "script_model", grenade.origin ); - altmodel setmodel( get_gamemode_var( "item_meat_model" ) ); - altmodel useanimtree( -1 ); - altmodel.angles = grenade.angles; - altmodel linkto( grenade, "", ( 0, 0, 0 ), ( 0, 0, 0 ) ); - altmodel setanim( %o_zombie_head_idle_v1 ); - grenade.altmodel = altmodel; - - while ( isdefined( grenade ) ) - wait 0.05; - - if ( isdefined( altmodel ) ) - altmodel delete(); - } -} - -indexinarray( array, value ) -{ - if ( !isdefined( array ) || !isarray( array ) || !isdefined( value ) || !isinarray( array, value ) ) - return undefined; - - foreach ( index, item in array ) - { - if ( item == value ) - return index; - } - - return undefined; -} - -item_meat_on_spawn_retrieve_trigger( watcher, player, weaponname ) -{ - self endon( "death" ); - add_meat_event( "meat_spawn", self ); - thread animate_meat( self ); - - while ( isdefined( level.splitting_meat ) && level.splitting_meat ) - wait 0.15; - - if ( isdefined( player ) ) - { - self setowner( player ); - self setteam( player.pers["team"] ); - self.owner = player; - self.oldangles = self.angles; - - if ( player hasweapon( weaponname ) ) - { - if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) - player thread player_wait_take_meat( weaponname ); - else - { - player takeweapon( weaponname ); - player decrement_is_drinking(); - } - } - - if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) - { - if ( !( isdefined( self._respawned_meat ) && self._respawned_meat ) ) - { - level notify( "meat_thrown", player ); - level._last_person_to_throw_meat = player; - level._last_person_to_throw_meat_time = gettime(); - } - } - } - - if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) - { - level._meat_moving = 1; - - if ( isdefined( level.item_meat ) && level.item_meat != self ) - level.item_meat cleanup_meat(); - - level.item_meat = self; - } - - self thread item_meat_watch_stationary(); - self thread item_meat_watch_bounce(); - self.item_meat_pick_up_trigger = spawn( "trigger_radius_use", self.origin, 0, 36, 72 ); - self.item_meat_pick_up_trigger setcursorhint( "HINT_NOICON" ); - self.item_meat_pick_up_trigger sethintstring( &"ZOMBIE_MEAT_PICKUP" ); - self.item_meat_pick_up_trigger enablelinkto(); - self.item_meat_pick_up_trigger linkto( self ); - self.item_meat_pick_up_trigger triggerignoreteam(); - level.item_meat_pick_up_trigger = self.item_meat_pick_up_trigger; - self thread item_meat_watch_shutdown(); - self.meat_id = indexinarray( level._fake_meats, self ); - - if ( !isdefined( self.meat_id ) ) - self.meat_id = 0; - - if ( isdefined( level.dont_allow_meat_interaction ) && level.dont_allow_meat_interaction ) - self.item_meat_pick_up_trigger setinvisibletoall(); - else - { - self thread item_meat_watch_trigger( self.meat_id, self.item_meat_pick_up_trigger, ::item_meat_on_pickup, level.meat_pickupsoundplayer, level.meat_pickupsound ); - self thread kick_meat_monitor(); - self thread last_stand_meat_nudge(); - } - - self._respawned_meat = undefined; -} - -last_stand_meat_nudge() -{ - level endon( "meat_grabbed" ); - level endon( "end_meat" ); - self endon( "death" ); - wait 0.15; - - while ( true ) - { - players = get_players(); - - foreach ( player in players ) - { - if ( distancesquared( player.origin, self.origin ) < 2304 && player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) - player thread kick_the_meat( self, 1 ); - } - - wait 0.05; - } -} - -kick_meat_monitor() -{ - level endon( "meat_grabbed" ); - level endon( "end_meat" ); - self endon( "death" ); - kick_meat_timeout = 150; - - while ( true ) - { - players = get_players(); - curr_time = gettime(); - - foreach ( player in players ) - { - if ( isdefined( level._last_person_to_throw_meat ) && player == level._last_person_to_throw_meat && curr_time - level._last_person_to_throw_meat_time <= kick_meat_timeout ) - continue; - - if ( distancesquared( player.origin, self.origin ) < 2304 && player issprinting() && !player usebuttonpressed() ) - { - if ( isdefined( player._meat_team ) && isdefined( level._meat_on_team ) && level._meat_on_team == player._meat_team ) - { - add_meat_event( "player_kick_meat", player, self ); - player thread kick_the_meat( self ); - } - } - } - - wait 0.05; - } -} - -is_meat( weapon ) -{ - return weapon == get_gamemode_var( "item_meat_name" ); -} - -spike_the_meat( meat ) -{ - if ( isdefined( self._kicking_meat ) && self._kicking_meat ) - return; - - fake_meat = 0; - self._kicking_meat = 1; - self._spawning_meat = 1; - org = self getweaponmuzzlepoint(); - vel = meat getvelocity(); - - if ( !( isdefined( meat._fake_meat ) && meat._fake_meat ) ) - { - meat cleanup_meat(); - level._last_person_to_throw_meat = self; - level._last_person_to_throw_meat_time = gettime(); - level._meat_splitter_activated = 0; - } - else - { - fake_meat = 1; - meat cleanup_meat(); - } - - kickangles = self.angles; - kickangles += ( randomfloatrange( -30, -20 ), randomfloatrange( -5, 5 ), 0 ); - launchdir = anglestoforward( kickangles ); - speed = length( vel ) * 1.5; - launchvel = vectorscale( launchdir, speed ); - grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( launchvel[0], launchvel[1], 380 ) ); - grenade playsound( "zmb_meat_meat_tossed" ); - grenade thread waittill_loopstart(); - - if ( fake_meat ) - { - grenade._fake_meat = 1; - grenade thread delete_on_real_meat_pickup(); - level._kicked_meat = grenade; - } - - wait 0.1; - self._spawning_meat = 0; - self._kicking_meat = 0; - - if ( !fake_meat ) - { - level notify( "meat_thrown", self ); - level notify( "meat_kicked" ); - } -} - -show_meat_throw_hint() -{ - level endon( "meat_thrown" ); - self endon( "player_downed" ); - self thread meat_screen_message_delete_on_death(); - wait 1; - self meat_create_hint_message( &"ZOMBIE_THROW_MEAT_HINT" ); - self thread meat_screen_message_delete(); -} - -meat_create_hint_message( string_message_1, string_message_2, string_message_3, n_offset_y ) -{ - if ( !isdefined( n_offset_y ) ) - n_offset_y = 0; - - if ( !isdefined( self._screen_message_1 ) ) - { - self._screen_message_1 = newclienthudelem( self ); - self._screen_message_1.elemtype = "font"; - self._screen_message_1.font = "objective"; - self._screen_message_1.fontscale = 1.8; - self._screen_message_1.horzalign = "center"; - self._screen_message_1.vertalign = "middle"; - self._screen_message_1.alignx = "center"; - self._screen_message_1.aligny = "middle"; - self._screen_message_1.y = -60 + n_offset_y; - self._screen_message_1.sort = 2; - self._screen_message_1.color = ( 1, 1, 1 ); - self._screen_message_1.alpha = 0.7; - self._screen_message_1.hidewheninmenu = 1; - } - - self._screen_message_1 settext( string_message_1 ); - - if ( isdefined( string_message_2 ) ) - { - if ( !isdefined( self._screen_message_2 ) ) - { - self._screen_message_2 = newclienthudelem( self ); - self._screen_message_2.elemtype = "font"; - self._screen_message_2.font = "objective"; - self._screen_message_2.fontscale = 1.8; - self._screen_message_2.horzalign = "center"; - self._screen_message_2.vertalign = "middle"; - self._screen_message_2.alignx = "center"; - self._screen_message_2.aligny = "middle"; - self._screen_message_2.y = -33 + n_offset_y; - self._screen_message_2.sort = 2; - self._screen_message_2.color = ( 1, 1, 1 ); - self._screen_message_2.alpha = 0.7; - self._screen_message_2.hidewheninmenu = 1; - } - - level._screen_message_2 settext( string_message_2 ); - } - else if ( isdefined( self._screen_message_2 ) ) - self._screen_message_2 destroy(); - - if ( isdefined( string_message_3 ) ) - { - if ( !isdefined( self._screen_message_3 ) ) - { - self._screen_message_3 = newclienthudelem( self ); - self._screen_message_3.elemtype = "font"; - self._screen_message_3.font = "objective"; - self._screen_message_3.fontscale = 1.8; - self._screen_message_3.horzalign = "center"; - self._screen_message_3.vertalign = "middle"; - self._screen_message_3.alignx = "center"; - self._screen_message_3.aligny = "middle"; - self._screen_message_3.y = -6 + n_offset_y; - self._screen_message_3.sort = 2; - self._screen_message_3.color = ( 1, 1, 1 ); - self._screen_message_3.alpha = 0.7; - self._screen_message_3.hidewheninmenu = 1; - } - - self._screen_message_3 settext( string_message_3 ); - } - else if ( isdefined( self._screen_message_3 ) ) - self._screen_message_3 destroy(); -} - -meat_screen_message_delete() -{ - self endon( "disconnect" ); - level waittill_notify_or_timeout( "meat_thrown", 5 ); - - if ( isdefined( self._screen_message_1 ) ) - self._screen_message_1 destroy(); - - if ( isdefined( self._screen_message_2 ) ) - self._screen_message_2 destroy(); - - if ( isdefined( self._screen_message_3 ) ) - self._screen_message_3 destroy(); -} - -meat_screen_message_delete_on_death() -{ - level endon( "meat_thrown" ); - self endon( "disconnect" ); - - self waittill( "player_downed" ); - - if ( isdefined( self._screen_message_1 ) ) - self._screen_message_1 destroy(); - - if ( isdefined( self._screen_message_2 ) ) - self._screen_message_2 destroy(); - - if ( isdefined( self._screen_message_3 ) ) - self._screen_message_3 destroy(); -} - -set_ignore_all() -{ - level endon( "clear_ignore_all" ); - - if ( isdefined( level._zombies_ignoring_all ) && level._zombies_ignoring_all ) - return; - - level._zombies_ignoring_all = 1; - zombies = getaiarray( level.zombie_team ); - - foreach ( zombie in zombies ) - { - if ( isdefined( zombie ) ) - zombie.ignoreall = 1; - } - - wait 0.5; - clear_ignore_all(); -} - -clear_ignore_all() -{ - if ( !( isdefined( level._zombies_ignoring_all ) && level._zombies_ignoring_all ) ) - return; - - zombies = getaiarray( level.zombie_team ); - - foreach ( zombie in zombies ) - { - if ( isdefined( zombie ) ) - zombie.ignoreall = 0; - } - - level._zombies_ignoring_all = 0; -} - -bring_back_teammate_progress() -{ - self notify( "bring_back_teammate_progress" ); - self endon( "bring_back_teammate_progress" ); - self endon( "disconnect" ); - player = self; - player._bringing_back_teammate = 1; - revivetime = 15; - progress = 0; - - while ( player_has_meat( player ) && is_player_valid( player ) && progress >= 0 ) - { - if ( !isdefined( player.revive_team_progressbar ) ) - { - player.revive_team_progressbar = player createprimaryprogressbar(); - player.revive_team_progressbar updatebar( 0.01, 1 / revivetime ); - player.revive_team_progressbar.progresstext = player createprimaryprogressbartext(); - player.revive_team_progressbar.progresstext settext( &"ZOMBIE_MEAT_RESPAWN_TEAMMATE" ); - player thread destroy_revive_progress_on_downed(); - } - - progress++; - - if ( progress > revivetime * 10 ) - { - level bring_back_dead_teammate( player._meat_team ); - player destroy_revive_progress(); - wait 1; - player._bringing_back_teammate = 0; - progress = -1; - } - - wait 0.1; - } - - player._bringing_back_teammate = 0; - player destroy_revive_progress(); -} - -should_try_to_bring_back_teammate( team ) -{ - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - if ( players[i]._meat_team == team && players[i].sessionstate == "spectator" ) - return true; - } - - return false; -} - -bring_back_dead_teammate( team ) -{ - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - if ( players[i]._meat_team == team && players[i].sessionstate == "spectator" ) - { - player = players[i]; - break; - } - } - - if ( !isdefined( player ) ) - return; - - player playsound( level.zmb_laugh_alias ); - wait 0.25; - playfx( level._effect["poltergeist"], player.spectator_respawn.origin ); - playsoundatposition( "zmb_bolt", player.spectator_respawn.origin ); - earthquake( 0.5, 0.75, player.spectator_respawn.origin, 1000 ); - level.custom_spawnplayer = ::respawn_meat_player; - player.pers["spectator_respawn"] = player.spectator_respawn; - player [[ level.spawnplayer ]](); - level.custom_spawnplayer = undefined; -} - -respawn_meat_player() -{ - spawnpoint = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "meat_spectator_respawn" ); - self spawn( spawnpoint.origin, spawnpoint.angles ); - self._meat_team = self.pers["zteam"]; - self._encounters_team = self.pers["encounters_team"]; - self.characterindex = self.pers["characterindex"]; - self._team_name = self.pers["team_name"]; - self.spectator_respawn = self.pers["meat_spectator_respawn"]; - self reviveplayer(); - self.is_burning = 0; - self.is_zombie = 0; - self.ignoreme = 0; -} - -destroy_revive_progress_on_downed() -{ - level endon( "end_game" ); - level endon( "meat_end" ); - self waittill_any( "fake_death", "player_downed", "death" ); - self destroy_revive_progress(); -} - -destroy_revive_progress() -{ - if ( isdefined( self.revive_team_progressbar ) ) - { - self.revive_team_progressbar destroyelem(); - self.revive_team_progressbar.progresstext destroyelem(); - } -} - -kick_the_meat( meat, laststand_nudge ) -{ - if ( isdefined( self._kicking_meat ) && self._kicking_meat ) - return; - - fake_meat = 0; - self._kicking_meat = 1; - self._spawning_meat = 1; - org = meat.origin; - - if ( !( isdefined( meat._fake_meat ) && meat._fake_meat ) ) - { - meat cleanup_meat(); - level._last_person_to_throw_meat = self; - level._last_person_to_throw_meat_time = gettime(); - level._meat_splitter_activated = 0; - } - else - { - fake_meat = 1; - meat cleanup_meat(); - } - - kickangles = self.angles; - kickangles += ( randomfloatrange( -30, -20 ), randomfloatrange( -5, 5 ), 0 ); - launchdir = anglestoforward( kickangles ); - vel = self getvelocity(); - speed = length( vel ) * 1.5; - height_boost = 380; - - if ( isdefined( laststand_nudge ) && laststand_nudge ) - { - if ( vel == ( 0, 0, 0 ) ) - vel = ( 30, 30, 5 ); - - speed = length( vel ) * 2; - height_boost = 120; - } - - launchvel = vectorscale( launchdir, speed ); - grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( launchvel[0], launchvel[1], height_boost ) ); - grenade playsound( "zmb_meat_meat_tossed" ); - grenade thread waittill_loopstart(); - - if ( fake_meat ) - { - grenade._fake_meat = 1; - grenade thread delete_on_real_meat_pickup(); - level._kicked_meat = grenade; - } - - wait 0.1; - self._spawning_meat = 0; - self._kicking_meat = 0; - - if ( !fake_meat ) - { - level notify( "meat_thrown", self ); - level notify( "meat_kicked" ); - } -} - -delete_on_real_meat_pickup() -{ - if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) - return; - - self endon( "death" ); - level waittill_any( "meat_grabbed", "end_game", "meat_kicked" ); - add_meat_event( "fake_meat_killed_by_real", self ); - - if ( isdefined( level._kicked_meat ) && level._kicked_meat == self ) - level._kicked_meat = undefined; - - if ( isdefined( self ) ) - self cleanup_meat(); -} - -play_item_meat_on_spawn_retrieve_trigger( watcher, player ) -{ - self item_meat_on_spawn_retrieve_trigger( watcher, player, get_gamemode_var( "item_meat_name" ) ); -} - -can_revive( revivee ) -{ - if ( self hasweapon( get_gamemode_var( "item_meat_name" ) ) ) - return false; - - if ( !self maps\mp\zombies\_zm_laststand::is_reviving_any() && isdefined( level.item_meat_pick_up_trigger ) && self istouching( level.item_meat_pick_up_trigger ) ) - return false; - - return true; -} - -pickup_origin() -{ - origin = self get_eye(); - - if ( !isdefined( origin ) ) - origin = self gettagorigin( "tag_weapon" ); - - if ( !isdefined( origin ) ) - origin = self gettagorigin( "tag_weapon_right" ); - - if ( !isdefined( origin ) ) - origin = self.origin; - - return origin; -} - -can_spike_meat() -{ - if ( isdefined( level._last_person_to_throw_meat ) && self == level._last_person_to_throw_meat ) - return false; - - meat = level.item_meat; - meat_spike_dist_sq = 4096; - meat_spike_dot = 0.1; - - if ( isdefined( meat ) ) - { - view_pos = self getweaponmuzzlepoint(); - - if ( distancesquared( view_pos, meat.origin ) < meat_spike_dist_sq ) - return true; - } - - return false; -} - -start_encounters_round_logic() -{ - if ( isdefined( level.flag["start_zombie_round_logic"] ) ) - flag_wait( "start_zombie_round_logic" ); - - flag_wait( "initial_players_connected" ); - - if ( !flag( "start_encounters_match_logic" ) ) - flag_set( "start_encounters_match_logic" ); -} - -onstartgametype() -{ - thread start_encounters_round_logic(); - maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zmeat", ::meat_hub_start_func, 1 ); -} - -hide_non_meat_objects() -{ - door_trigs = getentarray( "zombie_door", "targetname" ); - - for ( i = 0; i < door_trigs.size; i++ ) - { - if ( isdefined( door_trigs[i] ) ) - door_trigs[i] delete(); - } - - objects = getentarray(); - - for ( i = 0; i < objects.size; i++ ) - { - if ( objects[i] is_meat_object() ) - continue; - - if ( objects[i] iszbarrier() ) - continue; - - if ( isdefined( objects[i].spawnflags ) && objects[i].spawnflags == 1 ) - objects[i] connectpaths(); - - objects[i] notsolid(); - objects[i] hide(); - } -} - -is_meat_object() -{ - if ( !isdefined( self.script_parameters ) ) - return true; - - tokens = strtok( self.script_parameters, " " ); - - for ( i = 0; i < tokens.size; i++ ) - { - if ( tokens[i] == "meat_remove" ) - return false; - } - - return true; -} - -setup_meat_world_objects() -{ - objects = getentarray( level.scr_zm_map_start_location, "script_noteworthy" ); - - for ( i = 0; i < objects.size; i++ ) - { - if ( !objects[i] is_meat_object() ) - continue; - - if ( isdefined( objects[i].script_gameobjectname ) ) - continue; - - if ( isdefined( objects[i].script_vector ) ) - { - objects[i] moveto( objects[i].origin + objects[i].script_vector, 0.05 ); - - objects[i] waittill( "movedone" ); - } - - if ( isdefined( objects[i].spawnflags ) && objects[i].spawnflags == 1 && !( isdefined( level._dont_reconnect_paths ) && level._dont_reconnect_paths ) ) - objects[i] disconnectpaths(); - } - - level clientnotify( "meat_" + level.scr_zm_map_start_location ); -} - -spawn_meat_zombies() -{ - level endon( "meat_end" ); - force_riser = 0; - force_chaser = 0; - num = 0; - max_ai_num = 15; - - if ( getdvarint( _hash_CD22CF55 ) > 0 ) - max_ai_num = 0; - - if ( getdvarint( _hash_FA81816F ) == 2 ) - max_ai_num = -1; - - level waittill( "meat_grabbed" ); - - while ( true ) - { - ai = getaiarray( level.zombie_team ); - - if ( ai.size > max_ai_num ) - wait 0.1; - else - { - if ( num % 2 == 0 ) - spawn_points = level._meat_team_1_zombie_spawn_points; - else - spawn_points = level._meat_team_2_zombie_spawn_points; - - num++; - spawn_point = undefined; - dist = 512; - distcheck = dist * dist; - startindex = randomint( spawn_points.size ); - - while ( !isdefined( spawn_point ) ) - { - for ( i = 0; i < spawn_points.size; i++ ) - { - index = ( startindex + i ) % spawn_points.size; - point = spawn_points[index]; - - if ( num % 2 == 0 ) - players = get_players_on_meat_team( 1 ); - else - players = get_players_on_meat_team( 2 ); - - clear = 1; - - foreach ( player in players ) - { - if ( distancesquared( player.origin, point.origin ) < distcheck ) - clear = 0; - } - - if ( clear ) - { - spawn_point = point; - break; - } - } - - if ( dist <= 128 ) - spawn_point = point; - else - { - dist /= 4; - distcheck = dist * dist; - } - - wait 0.05; - } - - zombie = spawn_meat_zombie( level.meat_spawners[0], "meat_zombie", spawn_point, level._meat_zombie_spawn_health ); - - if ( isdefined( zombie ) ) - zombie maps\mp\zombies\_zm_game_module::make_supersprinter(); - } - - wait( level._meat_zombie_spawn_timer ); - } -} - -spawn_meat_zombie( spawner, target_name, spawn_point, round_number ) -{ - level endon( "meat_end" ); - - if ( !isdefined( spawner ) ) - { - iprintlnbold( "BUG: There is something wrong with the zombie spawners" ); - return; - } - - while ( isdefined( level._meat_zombie_spawning ) && level._meat_zombie_spawning ) - wait 0.05; - - level._meat_zombie_spawning = 1; - level.zombie_spawn_locations = []; - level.zombie_spawn_locations[level.zombie_spawn_locations.size] = spawn_point; - zombie = maps\mp\zombies\_zm_utility::spawn_zombie( spawner, target_name, spawn_point, round_number ); - - if ( isdefined( zombie ) ) - { - zombie thread maps\mp\zombies\_zm_spawner::zombie_spawn_init(); - zombie thread maps\mp\zombies\_zm::round_spawn_failsafe(); - } - else - iprintlnbold( "BUG: There is something wrong with the zombie spawning" ); - - spawner._spawning = undefined; - level._meat_zombie_spawning = 0; - return zombie; -} - -monitor_meat_on_team() -{ - level endon( "meat_end" ); - - while ( true ) - { - players = get_players(); - - if ( isdefined( level._meat_on_team ) ) - { - for ( i = 0; i < players.size; i++ ) - { - if ( !isdefined( players[i] ) ) - continue; - - if ( players[i]._meat_team == level._meat_on_team ) - { - if ( players[i].ignoreme ) - players[i].ignoreme = 0; - } - else if ( !players[i].ignoreme ) - players[i].ignoreme = 1; - - wait 0.05; - } - } - else - { - for ( i = 0; i < players.size; i++ ) - { - if ( !isdefined( players[i] ) ) - continue; - - if ( players[i].ignoreme ) - players[i].ignoreme = 0; - - wait 0.05; - } - } - - wait 0.1; - } -} - -item_meat_reset( origin, immediate ) -{ - level notify( "new_meat" ); - level endon( "new_meat" ); - - if ( isdefined( level.item_meat ) ) - { - level.item_meat cleanup_meat(); - level.item_meat = undefined; - } - - if ( !( isdefined( immediate ) && immediate ) ) - level waittill( "reset_meat" ); - - item_meat_clear(); - - if ( isdefined( origin ) ) - item_meat_spawn( origin ); -} - -meat_player_initial_spawn() -{ - players = get_players(); - one = 1; - two = 2; - - if ( get_game_var( "switchedsides" ) ) - { - one = 2; - two = 1; - } - - for ( i = 0; i < players.size; i++ ) - { - if ( get_game_var( "side_selection" ) == 1 ) - { - if ( players[i].team == "allies" ) - players[i]._meat_team = one; - else - players[i]._meat_team = two; - } - else if ( players[i].team == "allies" ) - players[i]._meat_team = two; - else - players[i]._meat_team = one; - - if ( isdefined( level.custom_player_fake_death_cleanup ) ) - players[i] [[ level.custom_player_fake_death_cleanup ]](); - - players[i] setstance( "stand" ); - - if ( isdefined( players[i]._meat_team ) ) - { - if ( players[i]._meat_team == one ) - players[i]._meat_team = one; - else - players[i]._meat_team = two; - } - else if ( players[i].team == "axis" ) - players[i]._meat_team = one; - else - players[i]._meat_team = two; - - players[i] meat_player_setup(); - } - - waittillframeend; - maps\mp\gametypes_zm\_zm_gametype::start_round(); - award_grenades_for_team( 1 ); - award_grenades_for_team( 2 ); -} - -meat_player_setup() -{ - self.pers["zteam"] = self._meat_team; - self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "encounters_team", 0 ); - self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "characterindex", 0 ); - self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "team_name", 0 ); - self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "spectator_respawn", 0 ); - self.pers["encounters_team"] = self._encounters_team; - self.pers["characterindex"] = self.characterindex; - self.pers["team_name"] = self._team_name; - self.pers["meat_spectator_respawn"] = self.spectator_respawn; - self.score = 1000; - self.pers["score"] = 1000; - self takeallweapons(); - self giveweapon( "knife_zm" ); - self give_start_weapon( 1 ); - - if ( !isdefined( self._saved_by_throw ) ) - self._saved_by_throw = 0; - - self setmovespeedscale( 1 ); - self._has_meat = 0; - self setclientfield( "holding_meat", 0 ); - self freeze_player_controls( 1 ); -} - -can_touch_meat() -{ - if ( isdefined( self.dont_touch_the_meat ) && self.dont_touch_the_meat ) - return 0; - - meat = level.item_meat; - - if ( isdefined( meat ) ) - { - meatorg = meat.origin + vectorscale( ( 0, 0, 1 ), 8.0 ); - trace = bullettrace( self pickup_origin(), meatorg, 0, meat ); - return distancesquared( trace["position"], meatorg ) < 1; - } - - return 0; -} - -trying_to_use() -{ - self.use_ever_released |= !self usebuttonpressed(); - return self.use_ever_released && self usebuttonpressed(); -} - -trying_to_spike( item ) -{ - return item.meat_is_flying && self meleebuttonpressed(); -} - -item_quick_trigger( meat_id, trigger ) -{ - self endon( "death" ); - meat_trigger_time = 150; - - if ( isdefined( trigger.radius ) ) - radius = trigger.radius + 15.0; - else - radius = 51.0; - - trigrad2 = radius * radius; - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - player = players[i]; - player.use_ever_released = !player usebuttonpressed(); - } - - while ( isdefined( trigger ) ) - { - trigorg = trigger.origin; - players = get_players(); - - if ( players.size ) - { - random_start_point = randomint( players.size ); - - for ( i = 0; i < players.size; i++ ) - { - player = players[( i + random_start_point ) % players.size]; - - if ( !isdefined( player.trying_to_trigger_meat ) ) - player.trying_to_trigger_meat = []; - - if ( !isdefined( player.trying_to_trigger_meat_time ) ) - player.trying_to_trigger_meat_time = []; - - if ( player maps\mp\zombies\_zm_laststand::is_reviving_any() ) - continue; - - meleeing = player ismeleeing(); - - if ( isdefined( trigger ) && player istouching( trigger ) && distance2dsquared( player.origin, trigorg ) < trigrad2 && !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && ( player trying_to_use() || self.meat_is_flying && meleeing ) && player can_touch_meat() ) - { - if ( self.meat_is_flying && meleeing ) - { - if ( player can_spike_meat() ) - { - player.trying_to_trigger_meat[meat_id] = 0; - trigger notify( "usetrigger", player ); - } - } - else if ( !( isdefined( player.trying_to_trigger_meat[meat_id] ) && player.trying_to_trigger_meat[meat_id] ) ) - { - player.trying_to_trigger_meat[meat_id] = 1; - player.trying_to_trigger_meat_time[meat_id] = gettime(); - } - else if ( gettime() - player.trying_to_trigger_meat_time[meat_id] >= meat_trigger_time ) - { - player.trying_to_trigger_meat[meat_id] = 0; - trigger notify( "usetrigger", player ); - } - - continue; - } - - player.trying_to_trigger_meat[meat_id] = 0; - player.trying_to_trigger_meat_time[meat_id] = undefined; - } - } - - wait 0.05; - } -} - -item_meat_watch_trigger( meat_id, trigger, callback, playersoundonuse, npcsoundonuse ) -{ - self endon( "death" ); - self thread item_quick_trigger( meat_id, trigger ); - - while ( true ) - { - trigger waittill( "usetrigger", player ); - - if ( !isalive( player ) ) - continue; - - if ( !is_player_valid( player ) ) - continue; - - if ( player has_powerup_weapon() ) - continue; - - if ( player maps\mp\zombies\_zm_laststand::is_reviving_any() ) - continue; - - volley = self.meat_is_flying && player meleebuttonpressed(); - player.volley_meat = volley; - - if ( isdefined( self._fake_meat ) && self._fake_meat ) - add_meat_event( "player_fake_take", player, self ); - else if ( volley ) - add_meat_event( "player_volley", player, self ); - else if ( self.meat_is_moving ) - add_meat_event( "player_catch", player, self ); - else - add_meat_event( "player_take", player, self ); - - if ( isdefined( self._fake_meat ) && self._fake_meat ) - { - player playlocalsound( level.zmb_laugh_alias ); - wait_network_frame(); - - if ( !isdefined( self ) ) - return; - - self cleanup_meat(); - return; - } - - curr_weap = player getcurrentweapon(); - - if ( !is_meat( curr_weap ) ) - player.pre_meat_weapon = curr_weap; - - if ( self.meat_is_moving ) - { - if ( volley ) - self item_meat_volley( player ); - else - self item_meat_caught( player, self.meat_is_flying ); - } - - self item_meat_pickup(); - - if ( isdefined( playersoundonuse ) ) - player playlocalsound( playersoundonuse ); - - if ( isdefined( npcsoundonuse ) ) - player playsound( npcsoundonuse ); - - if ( volley ) - player thread spike_the_meat( self ); - else - { - self thread [[ callback ]]( player ); - - if ( !isdefined( player._meat_hint_shown ) ) - { - player thread show_meat_throw_hint(); - player._meat_hint_shown = 1; - } - } - } -} - -item_meat_volley( player ) -{ -/# - println( "MEAT: Spiked the meat\n" ); -#/ -} - -item_meat_caught( player, in_air ) -{ - if ( in_air ) - { -/# - println( "MEAT: Caught the meat on the fly\n" ); -#/ - } - else - { -/# - println( "MEAT: Caught the meat while moving\n" ); -#/ - } -} - -item_meat_on_pickup( player ) -{ -/# - assert( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand(), "Player in last stand triggered meat pickup" ); -#/ - player maps\mp\gametypes_zm\_weaponobjects::deleteweaponobjecthelper( self ); - self cleanup_meat(); - level.item_meat = undefined; - level._last_person_to_throw_meat = undefined; - assign_meat_to_team( player ); - level notify( "meat_grabbed" ); - player notify( "meat_grabbed" ); - level thread zmbvoxmeatonteamspecific( player._encounters_team ); - - if ( !player hasweapon( get_gamemode_var( "item_meat_name" ) ) ) - player giveweapon( get_gamemode_var( "item_meat_name" ) ); - - player increment_is_drinking(); - player switchtoweapon( get_gamemode_var( "item_meat_name" ) ); - player setweaponammoclip( get_gamemode_var( "item_meat_name" ), 2 ); - player thread waittill_thrown(); -} - -waittill_thrown() -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "reset_downed" ); - - self waittill( "grenade_fire", grenade ); - - grenade playsound( "zmb_meat_meat_tossed" ); - grenade thread waittill_loopstart(); -} - -waittill_loopstart() -{ - self endon( "stationary" ); - self endon( "death" ); - level endon( "meat_grabbed" ); - level endon( "end_game" ); - level endon( "meat_kicked" ); - - while ( true ) - { - self waittill( "grenade_bounce", pos, normal, ent ); - - self stopsounds(); - wait 0.05; - self playsound( "zmb_meat_bounce" ); - } -} - -item_meat_watch_shutdown() -{ - self waittill( "death" ); - - if ( isdefined( self.item_meat_pick_up_trigger ) ) - { - self.item_meat_pick_up_trigger delete(); - level.item_meat_pick_up_trigger = undefined; - } -} - -item_meat_clear() -{ - if ( isdefined( level.item_meat ) ) - { - level.item_meat cleanup_meat(); - level.item_meat = undefined; - } - - if ( isdefined( level._fake_meats ) ) - { - foreach ( meat in level._fake_meats ) - { - if ( isdefined( meat ) ) - meat cleanup_meat(); - } - - level._fake_meats = undefined; - } -} - -zombie_path_timer_override() -{ - return gettime() + randomfloatrange( 0.35, 1 ) * 1000; -} - -meat_poi_override_func() -{ - if ( isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving ) ) - { - if ( abs( level.item_meat.origin[2] - groundpos( level.item_meat.origin )[2] ) < 35 ) - { - level._zombies_ignoring_all = 0; - level notify( "clear_ignore_all" ); - return undefined; - } - - level thread set_ignore_all(); - meat_poi = []; - meat_poi[0] = groundpos( level.item_meat.origin ); - meat_poi[1] = level.item_meat; - return meat_poi; - } - - level._zombies_ignoring_all = 0; - return undefined; -} - -meat_end_match( winning_team ) -{ - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - if ( isdefined( players[i].has_minigun ) && players[i].has_minigun ) - { - primaryweapons = players[i] getweaponslistprimaries(); - - for ( x = 0; x < primaryweapons.size; x++ ) - { - if ( primaryweapons[x] == "minigun_zm" ) - players[i] takeweapon( "minigun_zm" ); - } - - players[i] notify( "minigun_time_over" ); - players[i].zombie_vars["zombie_powerup_minigun_on"] = 0; - players[i]._show_solo_hud = 0; - players[i].has_minigun = 0; - players[i].has_powerup_weapon = 0; - } - - if ( isdefined( players[i]._has_meat_hud ) ) - players[i]._has_meat_hud destroy(); - - if ( players[i] hasweapon( get_gamemode_var( "item_meat_name" ) ) ) - { - players[i] takeweapon( get_gamemode_var( "item_meat_name" ) ); - players[i] decrement_is_drinking(); - } - } - - level notify( "game_module_ended", winning_team ); - wait 0.1; - level delay_thread( 2, ::item_meat_clear ); - - if ( isdefined( level.gameended ) && level.gameended ) - level clientnotify( "end_meat" ); -} - -updatedownedcounters() -{ - if ( self._encounters_team == "A" ) - { - level.team_a_downed++; - self thread waitforrevive( "A" ); - level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_revive_" + level.team_a_downed, "A" ); - } - else - { - level.team_b_downed++; - self thread waitforrevive( "B" ); - level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_revive_" + level.team_b_downed, "B" ); - } -} - -waitforrevive( team ) -{ - self endon( "death" ); - - self waittill( "player_revived" ); - - if ( team == "A" ) - level.team_a_downed--; - else - level.team_b_downed--; -} - -assign_meat_to_team( player, team_num ) -{ - meat_team = undefined; - players = get_players(); - - if ( isdefined( player ) ) - { - for ( i = 0; i < players.size; i++ ) - { - if ( !isdefined( players[i] ) ) - continue; - - if ( players[i] != player || isdefined( player._meat_hint_shown ) && player._meat_hint_shown ) - players[i] iprintlnbold( &"ZOMBIE_GRABBED_MEAT", player.name ); - } - - meat_team = player._meat_team; - } - else if ( isdefined( team_num ) ) - { - for ( i = 0; i < players.size; i++ ) - { - if ( players[i]._meat_team == team_num ) - { - players[i] iprintlnbold( &"ZOMBIE_YOUR_TEAM_MEAT" ); - continue; - } - - players[i] iprintlnbold( &"ZOMBIE_OTHER_TEAM_MEAT" ); - } - - meat_team = team_num; - } - - level._meat_on_team = meat_team; - teamplayers = get_players_on_meat_team( meat_team ); - - if ( isdefined( teamplayers ) && teamplayers.size > 0 ) - { - if ( teamplayers[0]._encounters_team == "B" ) - { - setteamhasmeat( "allies", 1 ); - setteamhasmeat( "axis", 0 ); - } - else if ( teamplayers[0]._encounters_team == "A" ) - { - setteamhasmeat( "allies", 0 ); - setteamhasmeat( "axis", 1 ); - } - } - - for ( i = 0; i < players.size; i++ ) - { - if ( !isdefined( players[i] ) ) - continue; - - if ( isdefined( player ) && players[i] == player ) - { - if ( isdefined( players[i]._has_meat ) && players[i]._has_meat ) - continue; - - players[i]._has_meat = 1; - players[i] thread slow_down_player_with_meat(); - players[i] thread reset_meat_when_player_downed(); - players[i] thread reset_meat_when_player_disconnected(); - continue; - } - } -} - -zmbvoxmeatonteamspecific( team ) -{ - if ( !isdefined( level.zmbvoxteamlasthadmeat ) ) - level.zmbvoxteamlasthadmeat = team; - - if ( level.zmbvoxteamlasthadmeat == team ) - return; - - level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_grab", team ); - level.zmbvoxteamlasthadmeat = team; - otherteam = maps\mp\zombies\_zm_audio_announcer::getotherteam( team ); - level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_grab_" + otherteam, otherteam ); -} - -create_meat_team_hud( meat_team, destroy_only ) -{ - if ( isdefined( self._has_meat_hud ) ) - { - self._has_meat_hud destroy(); - - if ( isdefined( destroy_only ) ) - return; - } - - if ( !isdefined( meat_team ) ) - return; - - elem = newclienthudelem( self ); - elem.hidewheninmenu = 1; - elem.horzalign = "LEFT"; - elem.vertalign = "BOTTOM"; - elem.alignx = "left"; - elem.aligny = "middle"; - elem.x = 10; - elem.y = -10; - elem.foreground = 1; - elem.font = "default"; - elem.fontscale = 1.4; - elem.color = vectorscale( ( 1, 1, 0 ), 0.9 ); - elem.alpha = 1.0; - - if ( isdefined( self._meat_team ) && self._meat_team == meat_team ) - elem.label = &"ZOMBIE_TEAM_HAS_MEAT"; - else - elem.label = &"ZOMBIE_OTHER_TEAM_HAS_MEAT"; - - self._has_meat_hud = elem; -} - -create_meat_player_hud() -{ - if ( isdefined( self._has_meat_hud ) ) - self._has_meat_hud destroy(); - - elem = newclienthudelem( self ); - elem.hidewheninmenu = 1; - elem.horzalign = "LEFT"; - elem.vertalign = "BOTTOM"; - elem.alignx = "left"; - elem.aligny = "middle"; - elem.x = 10; - elem.y = -10; - elem.foreground = 1; - elem.font = "default"; - elem.fontscale = 1.4; - elem.color = vectorscale( ( 1, 1, 0 ), 0.9 ); - elem.alpha = 1.0; - elem.label = &"ZOMBIE_PLAYER_HAS_MEAT"; - self._has_meat_hud = elem; -} - -slow_down_player_with_meat() -{ - self endon( "disconnect" ); - self setclientfield( "holding_meat", 1 ); - self setmovespeedscale( 0.6 ); - self thread zmbvoxstartholdcounter(); - - while ( isdefined( self._has_meat ) && self._has_meat ) - { - level._meat_player_tracker_origin = self.origin; - wait 0.2; - } - - self setmovespeedscale( 1 ); - self setclientfield( "holding_meat", 0 ); -} - -zmbvoxstartholdcounter() -{ - for ( meat_hold_counter = 0; isdefined( self._has_meat ) && self._has_meat; meat_hold_counter++ ) - { - if ( meat_hold_counter >= 15 ) - { - self thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "meat_hold" ); - break; - } - - wait 0.5; - } -} - -reset_meat_when_player_downed() -{ - self notify( "reset_downed" ); - self endon( "reset_downed" ); - level endon( "meat_reset" ); - level endon( "meat_thrown" ); - self waittill_any( "player_downed", "death", "fake_death", "replace_weapon_powerup" ); - self._has_meat = 0; - self._spawning_meat = 1; - grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), self.origin + ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 15 ), ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 0 ) ); - grenade._respawned_meat = 1; - level._last_person_to_throw_meat = undefined; - playsoundatposition( "zmb_spawn_powerup", self.origin ); - wait 0.1; - self._spawning_meat = undefined; - level notify( "meat_reset" ); -} - -meat_last_stand_callback( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) -{ - if ( isdefined( self._has_meat ) && self._has_meat ) - level thread item_meat_drop( self.origin, self._meat_team ); -} - -reset_meat_when_player_disconnected() -{ - level endon( "meat_thrown" ); - level endon( "meat_reset" ); - level endon( "meat_end" ); - team = self._meat_team; - - self waittill( "disconnect" ); - - level thread item_meat_drop( level._meat_player_tracker_origin, team ); -} - -item_meat_drop( org, team ) -{ - players = get_alive_players_on_meat_team( team ); - - if ( players.size > 0 ) - { - player = players[0]; - player endon( "disconnect" ); - player._spawning_meat = 1; - grenade = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org + ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 15 ), ( 0, 0, 0 ) ); - grenade._respawned_meat = 1; - level._last_person_to_throw_meat = undefined; - playsoundatposition( "zmb_spawn_powerup", grenade.origin ); - wait 0.1; - player._spawning_meat = undefined; - level notify( "meat_reset" ); - } -} - -player_has_meat( player ) -{ - return player getcurrentweapon() == get_gamemode_var( "item_meat_name" ); -} - -get_player_with_meat() -{ - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - if ( isdefined( players[i]._has_meat ) && players[i]._has_meat ) - return players[i]; - } - - return undefined; -} - -spawn_player_meat_manager() -{ - self thread player_watch_weapon_change(); - self thread player_watch_grenade_throw(); -} - -player_watch_weapon_change() -{ - self endon( "death_or_disconnect" ); - - for (;;) - { - self waittill( "weapon_change", weapon ); - - if ( weapon == get_gamemode_var( "item_meat_name" ) ) - { - add_meat_event( "player_meat", self ); - continue; - } - - add_meat_event( "player_no_meat", self ); - } -} - -player_watch_grenade_throw() -{ - self endon( "death_or_disconnect" ); - - for (;;) - { - self waittill( "grenade_fire", weapon, weapname ); - - if ( weapname == get_gamemode_var( "item_meat_name" ) ) - { - add_meat_event( "player_grenade_fire", self, weapon ); - weapon thread item_meat_on_spawn_retrieve_trigger( undefined, self, get_gamemode_var( "item_meat_name" ) ); - } - } -} - -spawn_level_meat_manager() -{ -/# - level.meat_manager = spawnstruct(); - level.meat_manager.events = []; - level.meat_manager thread handle_meat_events(); -#/ -} - -add_meat_event( e, p1, p2, p3, p4 ) -{ -/# - event = spawnstruct(); - event.e = e; - event.numparams = 0; - event.param = []; - - if ( isdefined( p1 ) ) - { - event.param[0] = p1; - event.numparams = 1; - } - - if ( isdefined( p2 ) ) - { - event.param[1] = p2; - event.numparams = 2; - } - - if ( isdefined( p3 ) ) - { - event.param[2] = p3; - event.numparams = 3; - } - - if ( isdefined( p4 ) ) - { - event.param[3] = p4; - event.numparams = 4; - } - - if ( isdefined( level.meat_manager ) ) - level.meat_manager.events[level.meat_manager.events.size] = event; -#/ -} - -handle_meat_events() -{ - while ( true ) - { - while ( self.events.size ) - { - self handle_meat_event( self.events[0] ); - arrayremoveindex( self.events, 0 ); - } - - wait 0.05; - } -} - -paramstr( param ) -{ -/# - if ( !isdefined( param ) ) - return "undefined"; - - if ( isplayer( param ) ) - return param.name; - - if ( isstring( param ) || isint( param ) || isfloat( param ) || isvec( param ) ) - return param; - - if ( isarray( param ) ) - return "[]"; - - return ""; -#/ -} - -handle_meat_event( event ) -{ -/# - estr = "ZM MEAT: [" + event.e + "]("; - - for ( i = 0; i < event.numparams; i++ ) - { - estr += paramstr( event.param[i] ); - - if ( i < event.numparams - 1 ) - estr += ","; - } - - estr += ") \n"; - println( estr ); -#/ -} diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_craftables.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_craftables.gsc deleted file mode 100644 index 3a8d8f1..0000000 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_craftables.gsc +++ /dev/null @@ -1,2931 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\zombies\_zm_utility; -#include maps\mp\gametypes_zm\_hud_util; -#include maps\mp\zombies\_zm_laststand; -#include maps\mp\zombies\_zm_equipment; -#include maps\mp\zombies\_zm_unitrigger; -#include maps\mp\zombies\_zm_craftables; -#include maps\mp\zombies\_zm_stats; -#include maps\mp\zombies\_zm_weapons; -#include maps\mp\_demo; - -init() -{ - precachestring( &"ZOMBIE_BUILDING" ); - precachestring( &"ZOMBIE_BUILD_PIECE_MISSING" ); - precachestring( &"ZOMBIE_BUILD_PIECE_GRAB" ); - precacheitem( "zombie_builder_zm" ); - precacheitem( "buildable_piece_zm" ); - level.craftable_piece_swap_allowed = 1; - zombie_craftables_callbacks = []; - level.craftablepickups = []; - level.craftables_crafted = []; - level.a_uts_craftables = []; - level.craftable_piece_count = 0; - level._effect["building_dust"] = loadfx( "maps/zombie/fx_zmb_buildable_assemble_dust" ); - - if ( isdefined( level.init_craftables ) ) - [[ level.init_craftables ]](); - - open_table = spawnstruct(); - open_table.name = "open_table"; - open_table.triggerthink = ::opentablecraftable; - open_table.custom_craftablestub_update_prompt = ::open_craftablestub_update_prompt; - include_zombie_craftable( open_table ); - add_zombie_craftable( "open_table", &"" ); - - if ( isdefined( level.use_swipe_protection ) ) - onplayerconnect_callback( ::craftables_watch_swipes ); -} - -anystub_update_prompt( player ) -{ - if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || player in_revive_trigger() ) - { - self.hint_string = ""; - return false; - } - - if ( isdefined( player.is_drinking ) && player.is_drinking > 0 ) - { - self.hint_string = ""; - return false; - } - - if ( isdefined( player.screecher_weapon ) ) - { - self.hint_string = ""; - return false; - } - - return true; -} - -anystub_get_unitrigger_origin() -{ - if ( isdefined( self.origin_parent ) ) - return self.origin_parent.origin; - - return self.origin; -} - -anystub_on_spawn_trigger( trigger ) -{ - if ( isdefined( self.link_parent ) ) - { - trigger enablelinkto(); - trigger linkto( self.link_parent ); - trigger setmovingplatformenabled( 1 ); - } -} - -craftables_watch_swipes() -{ - self endon( "disconnect" ); - self notify( "craftables_watch_swipes" ); - self endon( "craftables_watch_swipes" ); - - while ( true ) - { - self waittill( "melee_swipe", zombie ); - - if ( distancesquared( zombie.origin, self.origin ) > zombie.meleeattackdist * zombie.meleeattackdist ) - continue; - - trigger = level._unitriggers.trigger_pool[self getentitynumber()]; - - if ( isdefined( trigger ) && isdefined( trigger.stub.piece ) ) - { - piece = trigger.stub.piece; - - if ( !isdefined( piece.damage ) ) - piece.damage = 0; - - piece.damage++; - - if ( piece.damage > 12 ) - { - thread maps\mp\zombies\_zm_equipment::equipment_disappear_fx( trigger.stub maps\mp\zombies\_zm_unitrigger::unitrigger_origin() ); - piece maps\mp\zombies\_zm_craftables::piece_unspawn(); - self maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); - - if ( isalive( self ) ) - self playlocalsound( level.zmb_laugh_alias ); - } - } - } -} - -explosiondamage( damage, pos ) -{ -/# - println( "ZM CRAFTABLE Explode do " + damage + " damage to " + self.name + "\n" ); -#/ - self dodamage( damage, pos ); -} - -make_zombie_craftable_open( str_craftable, str_model, v_angle_offset, v_origin_offset ) -{ -/# - assert( isdefined( level.zombie_craftablestubs[str_craftable] ), "Craftable " + str_craftable + " has not been added yet." ); -#/ - precachemodel( str_model ); - s_craftable = level.zombie_craftablestubs[str_craftable]; - s_craftable.is_open_table = 1; - s_craftable.str_model = str_model; - s_craftable.v_angle_offset = v_angle_offset; - s_craftable.v_origin_offset = v_origin_offset; -} - -add_zombie_craftable( craftable_name, str_to_craft, str_crafting, str_taken, onfullycrafted, need_all_pieces ) -{ - if ( !isdefined( level.zombie_include_craftables ) ) - level.zombie_include_craftables = []; - - if ( isdefined( level.zombie_include_craftables ) && !isdefined( level.zombie_include_craftables[craftable_name] ) ) - return; - - if ( isdefined( str_to_craft ) ) - precachestring( str_to_craft ); - - if ( isdefined( str_crafting ) ) - precachestring( str_crafting ); - - if ( isdefined( str_taken ) ) - precachestring( str_taken ); - - craftable_struct = level.zombie_include_craftables[craftable_name]; - - if ( !isdefined( level.zombie_craftablestubs ) ) - level.zombie_craftablestubs = []; - - craftable_struct.str_to_craft = str_to_craft; - craftable_struct.str_crafting = str_crafting; - craftable_struct.str_taken = str_taken; - craftable_struct.onfullycrafted = onfullycrafted; - craftable_struct.need_all_pieces = need_all_pieces; -/# - println( "ZM >> Looking for craftable - " + craftable_struct.name ); -#/ - level.zombie_craftablestubs[craftable_struct.name] = craftable_struct; - - if ( !level.createfx_enabled ) - { - if ( level.zombie_craftablestubs.size == 2 ) - { - bits = getminbitcountfornum( level.craftable_piece_count ); - registerclientfield( "toplayer", "craftable", 9000, bits, "int" ); - } - } -} - -add_zombie_craftable_vox_category( craftable_name, vox_id ) -{ - craftable_struct = level.zombie_include_craftables[craftable_name]; - craftable_struct.vox_id = vox_id; -} - -include_zombie_craftable( craftablestub ) -{ - if ( !isdefined( level.zombie_include_craftables ) ) - level.zombie_include_craftables = []; -/# - println( "ZM >> Including craftable - " + craftablestub.name ); -#/ - level.zombie_include_craftables[craftablestub.name] = craftablestub; -} - -generate_zombie_craftable_piece( craftablename, piecename, modelname, radius, height, drop_offset, hud_icon, onpickup, ondrop, oncrafted, use_spawn_num, tag_name, can_reuse, client_field_value, is_shared, vox_id, b_one_time_vo ) -{ - if ( !isdefined( is_shared ) ) - is_shared = 0; - - if ( !isdefined( b_one_time_vo ) ) - b_one_time_vo = 0; - - precachemodel( modelname ); - - if ( isdefined( hud_icon ) ) - precacheshader( hud_icon ); - - piecestub = spawnstruct(); - craftable_pieces = []; - piece_alias = ""; - - if ( !isdefined( piecename ) ) - piecename = modelname; - - craftable_pieces_structs = getstructarray( craftablename + "_" + piecename, "targetname" ); -/# - if ( craftable_pieces_structs.size < 1 ) - println( "ERROR: Missing craftable piece <" + craftablename + "> <" + piecename + ">\n" ); -#/ - foreach ( index, struct in craftable_pieces_structs ) - { - craftable_pieces[index] = struct; - craftable_pieces[index].hasspawned = 0; - } - - piecestub.spawns = craftable_pieces; - piecestub.craftablename = craftablename; - piecestub.piecename = piecename; - piecestub.modelname = modelname; - piecestub.hud_icon = hud_icon; - piecestub.radius = radius; - piecestub.height = height; - piecestub.tag_name = tag_name; - piecestub.can_reuse = can_reuse; - piecestub.drop_offset = drop_offset; - piecestub.max_instances = 256; - piecestub.onpickup = onpickup; - piecestub.ondrop = ondrop; - piecestub.oncrafted = oncrafted; - piecestub.use_spawn_num = use_spawn_num; - piecestub.is_shared = is_shared; - piecestub.vox_id = vox_id; - - if ( isdefined( b_one_time_vo ) && b_one_time_vo ) - piecestub.b_one_time_vo = b_one_time_vo; - - if ( isdefined( client_field_value ) ) - { - if ( isdefined( is_shared ) && is_shared ) - { -/# - assert( isstring( client_field_value ), "Client field value for shared item (" + piecename + ") should be a string (the name of the ClientField to use)" ); -#/ - piecestub.client_field_id = client_field_value; - } - else - piecestub.client_field_state = client_field_value; - } - - return piecestub; -} - -manage_multiple_pieces( max_instances ) -{ - self.max_instances = max_instances; - self.managing_pieces = 1; - self.piece_allocated = []; -} - -combine_craftable_pieces( piece1, piece2, piece3 ) -{ - spawns1 = piece1.spawns; - spawns2 = piece2.spawns; - spawns = arraycombine( spawns1, spawns2, 1, 0 ); - - if ( isdefined( piece3 ) ) - { - spawns3 = piece3.spawns; - spawns = arraycombine( spawns, spawns3, 1, 0 ); - spawns = array_randomize( spawns ); - piece3.spawns = spawns; - } - else - spawns = array_randomize( spawns ); - - piece1.spawns = spawns; - piece2.spawns = spawns; -} - -add_craftable_piece( piecestub, tag_name, can_reuse ) -{ - if ( !isdefined( self.a_piecestubs ) ) - self.a_piecestubs = []; - - if ( isdefined( tag_name ) ) - piecestub.tag_name = tag_name; - - if ( isdefined( can_reuse ) ) - piecestub.can_reuse = can_reuse; - - self.a_piecestubs[self.a_piecestubs.size] = piecestub; -} - -player_drop_piece_on_downed() -{ - self endon( "craftable_piece_released" ); - - self waittill( "bled_out" ); - - onplayerlaststand(); -} - -onplayerlaststand() -{ - piece = self.current_craftable_piece; - - if ( isdefined( piece ) ) - { - return_to_start_pos = 0; - - if ( isdefined( level.safe_place_for_craftable_piece ) ) - { - if ( !self [[ level.safe_place_for_craftable_piece ]]( piece ) ) - return_to_start_pos = 1; - } - - if ( return_to_start_pos ) - piece piece_spawn_at(); - else - piece piece_spawn_at( self.origin + vectorscale( ( 1, 1, 0 ), 5.0 ), self.angles ); - - if ( isdefined( piece.ondrop ) ) - piece [[ piece.ondrop ]]( self ); - - self setclientfieldtoplayer( "craftable", 0 ); - } - - self.current_craftable_piece = undefined; - self notify( "craftable_piece_released" ); -} - -piecestub_get_unitrigger_origin() -{ - if ( isdefined( self.origin_parent ) ) - return self.origin_parent.origin + vectorscale( ( 0, 0, 1 ), 12.0 ); - - return self.origin; -} - -generate_piece_unitrigger( classname, origin, angles, flags, radius, script_height, moving ) -{ - if ( !isdefined( radius ) ) - radius = 64; - - if ( !isdefined( script_height ) ) - script_height = 64; - - script_width = script_height; - - if ( !isdefined( script_width ) ) - script_width = 64; - - script_length = script_height; - - if ( !isdefined( script_length ) ) - script_length = 64; - - unitrigger_stub = spawnstruct(); - unitrigger_stub.origin = origin; - - if ( isdefined( script_length ) ) - unitrigger_stub.script_length = script_length; - else - unitrigger_stub.script_length = 13.5; - - if ( isdefined( script_width ) ) - unitrigger_stub.script_width = script_width; - else - unitrigger_stub.script_width = 27.5; - - if ( isdefined( script_height ) ) - unitrigger_stub.script_height = script_height; - else - unitrigger_stub.script_height = 24; - - unitrigger_stub.radius = radius; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - unitrigger_stub.hint_string = &"ZOMBIE_BUILD_PIECE_GRAB"; - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.require_look_at = 0; - - switch ( classname ) - { - case "trigger_radius": - unitrigger_stub.script_unitrigger_type = "unitrigger_radius"; - break; - case "trigger_radius_use": - unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - break; - case "trigger_box": - unitrigger_stub.script_unitrigger_type = "unitrigger_box"; - break; - case "trigger_box_use": - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - break; - } - - unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - unitrigger_stub.prompt_and_visibility_func = ::piecetrigger_update_prompt; - unitrigger_stub.originfunc = ::piecestub_get_unitrigger_origin; - unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; - - if ( isdefined( moving ) && moving ) - maps\mp\zombies\_zm_unitrigger::register_unitrigger( unitrigger_stub, ::piece_unitrigger_think ); - else - maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::piece_unitrigger_think ); - - return unitrigger_stub; -} - -piecetrigger_update_prompt( player ) -{ - can_use = self.stub piecestub_update_prompt( player ); - self setinvisibletoplayer( player, !can_use ); - self sethintstring( self.stub.hint_string ); - return can_use; -} - -piecestub_update_prompt( player ) -{ - if ( !self anystub_update_prompt( player ) ) - return false; - - if ( isdefined( player.current_craftable_piece ) && !( isdefined( self.piece.is_shared ) && self.piece.is_shared ) ) - { - if ( !level.craftable_piece_swap_allowed ) - self.hint_string = &"ZM_CRAFTABLES_PIECE_NO_SWITCH"; - else - { - spiece = self.piece; - cpiece = player.current_craftable_piece; - - if ( spiece.piecename == cpiece.piecename && spiece.craftablename == cpiece.craftablename ) - { - self.hint_string = ""; - return false; - } - - self.hint_string = &"ZOMBIE_BUILD_PIECE_SWITCH"; - } - } - else - self.hint_string = &"ZOMBIE_BUILD_PIECE_GRAB"; - - return true; -} - -piece_unitrigger_think() -{ - self endon( "kill_trigger" ); - - while ( true ) - { - self waittill( "trigger", player ); - - if ( player != self.parent_player ) - continue; - - if ( isdefined( player.screecher_weapon ) ) - continue; - - if ( !level.craftable_piece_swap_allowed && isdefined( player.current_craftable_piece ) && !( isdefined( self.stub.piece.is_shared ) && self.stub.piece.is_shared ) ) - continue; - - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0.5 ); - continue; - } - - status = player player_can_take_piece( self.stub.piece ); - - if ( !status ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - } - else - player thread player_take_piece( self.stub.piece ); - } -} - -player_can_take_piece( piece ) -{ - if ( !isdefined( piece ) ) - return false; - - return true; -} - -dbline( from, to ) -{ -/# - time = 20; - - while ( time > 0 ) - { - line( from, to, ( 0, 0, 1 ), 0, 1 ); - time -= 0.05; - wait 0.05; - } -#/ -} - -player_throw_piece( piece, origin, dir, return_to_spawn, return_time, endangles ) -{ -/# - assert( isdefined( piece ) ); -#/ - if ( isdefined( piece ) ) - { -/# - thread dbline( origin, origin + dir ); -#/ - pass = 0; - done = 0; - altmodel = undefined; - - while ( pass < 2 && !done ) - { - grenade = self magicgrenadetype( "buildable_piece_zm", origin, dir, 30000 ); - grenade thread watch_hit_players(); - grenade ghost(); - - if ( !isdefined( altmodel ) ) - { - altmodel = spawn( "script_model", grenade.origin ); - altmodel setmodel( piece.modelname ); - } - - altmodel.origin = grenade.angles; - altmodel.angles = grenade.angles; - altmodel linkto( grenade, "", ( 0, 0, 0 ), ( 0, 0, 0 ) ); - grenade.altmodel = altmodel; - - grenade waittill( "stationary" ); - - grenade_origin = grenade.origin; - grenade_angles = grenade.angles; - landed_on = grenade getgroundent(); - grenade delete(); - - if ( isdefined( landed_on ) && landed_on == level ) - done = 1; - else - { - origin = grenade_origin; - dir = ( dir[0] * -1 / 10, dir[1] * -1 / 10, -1 ); - pass++; - } - } - - if ( !isdefined( endangles ) ) - endangles = grenade_angles; - - piece piece_spawn_at( grenade_origin, endangles ); - - if ( isdefined( altmodel ) ) - altmodel delete(); - - if ( isdefined( piece.ondrop ) ) - piece [[ piece.ondrop ]]( self ); - - if ( isdefined( return_to_spawn ) && return_to_spawn ) - piece piece_wait_and_return( return_time ); - } -} - -watch_hit_players() -{ - self endon( "death" ); - self endon( "stationary" ); - - while ( isdefined( self ) ) - { - self waittill( "grenade_bounce", pos, normal, ent ); - - if ( isplayer( ent ) ) - ent explosiondamage( 25, pos ); - } -} - -piece_wait_and_return( return_time ) -{ - self endon( "pickup" ); - wait 0.15; - - if ( isdefined( level.exploding_jetgun_fx ) ) - playfxontag( level.exploding_jetgun_fx, self.model, "tag_origin" ); - else - playfxontag( level._effect["powerup_on"], self.model, "tag_origin" ); - - wait( return_time - 6 ); - self piece_hide(); - wait 1; - self piece_show(); - wait 1; - self piece_hide(); - wait 1; - self piece_show(); - wait 1; - self piece_hide(); - wait 1; - self piece_show(); - wait 1; - self notify( "respawn" ); - self piece_unspawn(); - self piece_spawn_at(); -} - -player_return_piece_to_original_spawn() -{ - self notify( "craftable_piece_released" ); - piece = self.current_craftable_piece; - self.current_craftable_piece = undefined; - - if ( isdefined( piece ) ) - { - piece piece_spawn_at(); - self setclientfieldtoplayer( "craftable", 0 ); - } -} - -player_drop_piece_on_death() -{ - self notify( "craftable_piece_released" ); - self endon( "craftable_piece_released" ); - self thread player_drop_piece_on_downed(); - origin = self.origin; - angles = self.angles; - piece = self.current_craftable_piece; - - self waittill( "disconnect" ); - - piece piece_spawn_at( origin, angles ); - - if ( isdefined( self ) ) - self setclientfieldtoplayer( "craftable", 0 ); -} - -player_drop_piece( piece ) -{ - if ( !isdefined( piece ) ) - piece = self.current_craftable_piece; - - if ( isdefined( piece ) ) - { - piece.damage = 0; - piece piece_spawn_at( self.origin, self.angles ); - self setclientfieldtoplayer( "craftable", 0 ); - - if ( isdefined( piece.ondrop ) ) - piece [[ piece.ondrop ]]( self ); - } - - self.current_craftable_piece = undefined; - self notify( "craftable_piece_released" ); -} - -player_take_piece( piecespawn ) -{ - piecestub = piecespawn.piecestub; - damage = piecespawn.damage; - - if ( !( isdefined( piecestub.is_shared ) && piecestub.is_shared ) && isdefined( self.current_craftable_piece ) ) - { - other_piece = self.current_craftable_piece; - self player_drop_piece( self.current_craftable_piece ); - other_piece.damage = damage; - self do_player_general_vox( "general", "craft_swap" ); - } - - if ( isdefined( piecestub.onpickup ) ) - piecespawn [[ piecestub.onpickup ]]( self ); - - if ( isdefined( piecestub.is_shared ) && piecestub.is_shared ) - { - if ( isdefined( piecestub.client_field_id ) ) - level setclientfield( piecestub.client_field_id, 1 ); - } - else if ( isdefined( piecestub.client_field_state ) ) - self setclientfieldtoplayer( "craftable", piecestub.client_field_state ); - - piecespawn piece_unspawn(); - piecespawn notify( "pickup" ); - - if ( isdefined( piecestub.is_shared ) && piecestub.is_shared ) - piecespawn.in_shared_inventory = 1; - else - { - self.current_craftable_piece = piecespawn; - self thread player_drop_piece_on_death(); - } - - self track_craftable_piece_pickedup( piecespawn ); -} - -player_destroy_piece( piece ) -{ - if ( !isdefined( piece ) ) - piece = self.current_craftable_piece; - - if ( isdefined( piece ) ) - self setclientfieldtoplayer( "craftable", 0 ); - - self.current_craftable_piece = undefined; - self notify( "craftable_piece_released" ); -} - -claim_location( location ) -{ - if ( !isdefined( level.craftable_claimed_locations ) ) - level.craftable_claimed_locations = []; - - if ( !isdefined( level.craftable_claimed_locations[location] ) ) - { - level.craftable_claimed_locations[location] = 1; - return true; - } - - return false; -} - -is_point_in_craft_trigger( point ) -{ - candidate_list = []; - - foreach ( zone in level.zones ) - { - if ( isdefined( zone.unitrigger_stubs ) ) - candidate_list = arraycombine( candidate_list, zone.unitrigger_stubs, 1, 0 ); - } - - valid_range = 128; - closest = maps\mp\zombies\_zm_unitrigger::get_closest_unitriggers( point, candidate_list, valid_range ); - - for ( index = 0; index < closest.size; index++ ) - { - if ( isdefined( closest[index].registered ) && closest[index].registered && isdefined( closest[index].piece ) ) - return true; - } - - return false; -} - -piece_allocate_spawn( piecestub ) -{ - self.current_spawn = 0; - self.managed_spawn = 1; - self.piecestub = piecestub; - - if ( self.spawns.size >= 1 && self.spawns.size > 1 ) - { - any_good = 0; - any_okay = 0; - totalweight = 0; - spawnweights = []; - - for ( i = 0; i < self.spawns.size; i++ ) - { - if ( isdefined( piecestub.piece_allocated[i] ) && piecestub.piece_allocated[i] ) - spawnweights[i] = 0; - else if ( is_point_in_craft_trigger( self.spawns[i].origin ) ) - { - any_okay = 1; - spawnweights[i] = 0.01; - } - else - { - any_good = 1; - spawnweights[i] = 1.0; - } - - totalweight += spawnweights[i]; - } -/# - assert( any_good || any_okay, "There is nowhere to spawn this piece" ); -#/ - if ( any_good ) - totalweight = float( int( totalweight ) ); - - r = randomfloat( totalweight ); - - for ( i = 0; i < self.spawns.size; i++ ) - { - if ( !any_good || spawnweights[i] >= 1.0 ) - { - r -= spawnweights[i]; - - if ( r < 0 ) - { - self.current_spawn = i; - piecestub.piece_allocated[self.current_spawn] = 1; - return; - } - } - } - - self.current_spawn = randomint( self.spawns.size ); - piecestub.piece_allocated[self.current_spawn] = 1; - } -} - -piece_deallocate_spawn() -{ - if ( isdefined( self.current_spawn ) ) - { - self.piecestub.piece_allocated[self.current_spawn] = 0; - self.current_spawn = undefined; - } - - self.start_origin = undefined; -} - -piece_pick_random_spawn() -{ - self.current_spawn = 0; - - if ( self.spawns.size >= 1 && self.spawns.size > 1 ) - { - for ( self.current_spawn = randomint( self.spawns.size ); isdefined( self.spawns[self.current_spawn].claim_location ) && !claim_location( self.spawns[self.current_spawn].claim_location ); self.current_spawn = randomint( self.spawns.size ) ) - { - arrayremoveindex( self.spawns, self.current_spawn ); - - if ( self.spawns.size < 1 ) - { - self.current_spawn = 0; -/# - println( "ERROR: All craftable spawn locations claimed" ); -#/ - return; - } - } - } -} - -piece_set_spawn( num ) -{ - self.current_spawn = 0; - - if ( self.spawns.size >= 1 && self.spawns.size > 1 ) - self.current_spawn = int( min( num, self.spawns.size - 1 ) ); -} - -piece_spawn_in( piecestub ) -{ - if ( self.spawns.size < 1 ) - return; - - if ( isdefined( self.managed_spawn ) && self.managed_spawn ) - { - if ( !isdefined( self.current_spawn ) ) - self piece_allocate_spawn( self.piecestub ); - } - - if ( !isdefined( self.current_spawn ) ) - self.current_spawn = 0; - - spawndef = self.spawns[self.current_spawn]; - self.unitrigger = generate_piece_unitrigger( "trigger_radius_use", spawndef.origin + vectorscale( ( 0, 0, 1 ), 12.0 ), spawndef.angles, 0, piecestub.radius, piecestub.height, 0 ); - self.unitrigger.piece = self; - self.radius = piecestub.radius; - self.height = piecestub.height; - self.craftablename = piecestub.craftablename; - self.piecename = piecestub.piecename; - self.modelname = piecestub.modelname; - self.hud_icon = piecestub.hud_icon; - self.tag_name = piecestub.tag_name; - self.drop_offset = piecestub.drop_offset; - self.start_origin = spawndef.origin; - self.start_angles = spawndef.angles; - self.client_field_state = piecestub.client_field_state; - self.is_shared = piecestub.is_shared; - self.model = spawn( "script_model", self.start_origin ); - - if ( isdefined( self.start_angles ) ) - self.model.angles = self.start_angles; - - self.model setmodel( piecestub.modelname ); - - if ( isdefined( piecestub.onspawn ) ) - self [[ piecestub.onspawn ]](); - - self.model ghostindemo(); - self.model.hud_icon = piecestub.hud_icon; - self.piecestub = piecestub; - self.unitrigger.origin_parent = self.model; -} - -piece_spawn_at( origin, angles, use_random_start ) -{ - if ( self.spawns.size < 1 ) - return; - - if ( isdefined( self.managed_spawn ) && self.managed_spawn ) - { - if ( !isdefined( self.current_spawn ) && !isdefined( origin ) ) - { - self piece_allocate_spawn( self.piecestub ); - spawndef = self.spawns[self.current_spawn]; - self.start_origin = spawndef.origin; - self.start_angles = spawndef.angles; - } - } - else if ( !isdefined( self.current_spawn ) ) - self.current_spawn = 0; - - unitrigger_offset = vectorscale( ( 0, 0, 1 ), 12.0 ); - - if ( isdefined( use_random_start ) && use_random_start ) - { - self piece_pick_random_spawn(); - spawndef = self.spawns[self.current_spawn]; - self.start_origin = spawndef.origin; - self.start_angles = spawndef.angles; - origin = spawndef.origin; - angles = spawndef.angles; - } - else - { - if ( !isdefined( origin ) ) - origin = self.start_origin; - else - { - origin += ( 0, 0, self.drop_offset ); - unitrigger_offset -= ( 0, 0, self.drop_offset ); - } - - if ( !isdefined( angles ) ) - angles = self.start_angles; -/# - if ( !isdefined( level.drop_offset ) ) - level.drop_offset = 0; - - origin += ( 0, 0, level.drop_offset ); - unitrigger_offset -= ( 0, 0, level.drop_offset ); -#/ - } - - self.model = spawn( "script_model", origin ); - - if ( isdefined( angles ) ) - self.model.angles = angles; - - self.model setmodel( self.modelname ); - - if ( isdefined( level.equipment_safe_to_drop ) ) - { - if ( ![[ level.equipment_safe_to_drop ]]( self.model ) ) - { - origin = self.start_origin; - angles = self.start_angles; - self.model.origin = origin; - self.model.angles = angles; - } - } - - if ( isdefined( self.onspawn ) ) - self [[ self.onspawn ]](); - - self.unitrigger = generate_piece_unitrigger( "trigger_radius_use", origin + unitrigger_offset, angles, 0, self.radius, self.height, isdefined( self.model.canmove ) && self.model.canmove ); - self.unitrigger.piece = self; - self.model.hud_icon = self.hud_icon; - self.unitrigger.origin_parent = self.model; -} - -piece_unspawn() -{ - if ( isdefined( self.managed_spawn ) && self.managed_spawn ) - self piece_deallocate_spawn(); - - if ( isdefined( self.model ) ) - self.model delete(); - - self.model = undefined; - - if ( isdefined( self.unitrigger ) ) - thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger ); - - self.unitrigger = undefined; -} - -piece_hide() -{ - if ( isdefined( self.model ) ) - self.model ghost(); -} - -piece_show() -{ - if ( isdefined( self.model ) ) - self.model show(); -} - -generate_piece( piecestub ) -{ - piecespawn = spawnstruct(); - piecespawn.spawns = piecestub.spawns; - - if ( isdefined( piecestub.managing_pieces ) && piecestub.managing_pieces ) - piecespawn piece_allocate_spawn( piecestub ); - else if ( isdefined( piecestub.use_spawn_num ) ) - piecespawn piece_set_spawn( piecestub.use_spawn_num ); - else - piecespawn piece_pick_random_spawn(); - - piecespawn piece_spawn_in( piecestub ); - - if ( piecespawn.spawns.size >= 1 ) - piecespawn.hud_icon = piecestub.hud_icon; - - if ( isdefined( piecestub.onpickup ) ) - piecespawn.onpickup = piecestub.onpickup; - else - piecespawn.onpickup = ::onpickuputs; - - if ( isdefined( piecestub.ondrop ) ) - piecespawn.ondrop = piecestub.ondrop; - else - piecespawn.ondrop = ::ondroputs; - - if ( isdefined( piecestub.oncrafted ) ) - piecespawn.oncrafted = piecestub.oncrafted; - - return piecespawn; -} - -craftable_piece_unitriggers( craftable_name, origin ) -{ -/# - assert( isdefined( craftable_name ) ); -#/ -/# - assert( isdefined( level.zombie_craftablestubs[craftable_name] ), "Called craftable_think() without including the craftable - " + craftable_name ); -#/ - craftable = level.zombie_craftablestubs[craftable_name]; - - if ( !isdefined( craftable.a_piecestubs ) ) - craftable.a_piecestubs = []; - - flag_wait( "start_zombie_round_logic" ); - craftablespawn = spawnstruct(); - craftablespawn.craftable_name = craftable_name; - - if ( !isdefined( craftablespawn.a_piecespawns ) ) - craftablespawn.a_piecespawns = []; - - craftablepickups = []; - - foreach ( piecestub in craftable.a_piecestubs ) - { - if ( !isdefined( piecestub.generated_instances ) ) - piecestub.generated_instances = 0; - - if ( isdefined( piecestub.piecespawn ) && ( isdefined( piecestub.can_reuse ) && piecestub.can_reuse ) ) - piece = piecestub.piecespawn; - else if ( piecestub.generated_instances >= piecestub.max_instances ) - piece = piecestub.piecespawn; - else - { - piece = generate_piece( piecestub ); - piecestub.piecespawn = piece; - piecestub.generated_instances++; - } - - craftablespawn.a_piecespawns[craftablespawn.a_piecespawns.size] = piece; - } - - craftablespawn.stub = self; - return craftablespawn; -} - -hide_craftable_table_model( trigger_targetname ) -{ - trig = getent( trigger_targetname, "targetname" ); - - if ( !isdefined( trig ) ) - return; - - if ( isdefined( trig.target ) ) - { - model = getent( trig.target, "targetname" ); - - if ( isdefined( model ) ) - { - model ghost(); - model notsolid(); - } - } -} - -setup_unitrigger_craftable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) -{ - trig = getent( trigger_targetname, "targetname" ); - - if ( !isdefined( trig ) ) - return; - - return setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); -} - -setup_unitrigger_craftable_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) -{ - triggers = getentarray( trigger_targetname, "targetname" ); - stubs = []; - - foreach ( trig in triggers ) - stubs[stubs.size] = setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); - - return stubs; -} - -setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) -{ - if ( !isdefined( trig ) ) - return; - - unitrigger_stub = spawnstruct(); - unitrigger_stub.craftablestub = level.zombie_include_craftables[equipname]; - angles = trig.script_angles; - - if ( !isdefined( angles ) ) - angles = ( 0, 0, 0 ); - - unitrigger_stub.origin = trig.origin + anglestoright( angles ) * -6; - unitrigger_stub.angles = trig.angles; - - if ( isdefined( trig.script_angles ) ) - unitrigger_stub.angles = trig.script_angles; - - unitrigger_stub.equipname = equipname; - unitrigger_stub.weaponname = weaponname; - unitrigger_stub.trigger_hintstring = trigger_hintstring; - unitrigger_stub.delete_trigger = delete_trigger; - unitrigger_stub.crafted = 0; - unitrigger_stub.persistent = persistent; - unitrigger_stub.usetime = int( 3000 ); - unitrigger_stub.onbeginuse = ::onbeginuseuts; - unitrigger_stub.onenduse = ::onenduseuts; - unitrigger_stub.onuse = ::onuseplantobjectuts; - unitrigger_stub.oncantuse = ::oncantuseuts; - - if ( isdefined( trig.script_length ) ) - unitrigger_stub.script_length = trig.script_length; - else - unitrigger_stub.script_length = 32; - - if ( isdefined( trig.script_width ) ) - unitrigger_stub.script_width = trig.script_width; - else - unitrigger_stub.script_width = 100; - - if ( isdefined( trig.script_height ) ) - unitrigger_stub.script_height = trig.script_height; - else - unitrigger_stub.script_height = 64; - - unitrigger_stub.target = trig.target; - unitrigger_stub.targetname = trig.targetname; - unitrigger_stub.script_noteworthy = trig.script_noteworthy; - unitrigger_stub.script_parameters = trig.script_parameters; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - - if ( isdefined( level.zombie_craftablestubs[equipname].str_to_craft ) ) - unitrigger_stub.hint_string = level.zombie_craftablestubs[equipname].str_to_craft; - - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.require_look_at = 1; - unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - - if ( isdefined( unitrigger_stub.craftablestub.custom_craftablestub_update_prompt ) ) - unitrigger_stub.custom_craftablestub_update_prompt = unitrigger_stub.craftablestub.custom_craftablestub_update_prompt; - - unitrigger_stub.prompt_and_visibility_func = ::craftabletrigger_update_prompt; - maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::craftable_place_think ); - unitrigger_stub.piece_trigger = trig; - trig.trigger_stub = unitrigger_stub; - unitrigger_stub.zombie_weapon_upgrade = trig.zombie_weapon_upgrade; - - if ( isdefined( unitrigger_stub.target ) ) - { - unitrigger_stub.model = getent( unitrigger_stub.target, "targetname" ); - - if ( isdefined( unitrigger_stub.model ) ) - { - if ( isdefined( unitrigger_stub.zombie_weapon_upgrade ) ) - unitrigger_stub.model useweaponhidetags( unitrigger_stub.zombie_weapon_upgrade ); - - unitrigger_stub.model ghost(); - unitrigger_stub.model notsolid(); - } - } - - if ( unitrigger_stub.equipname == "open_table" ) - { - unitrigger_stub.a_uts_open_craftables_available = []; - unitrigger_stub.n_open_craftable_choice = -1; - unitrigger_stub.b_open_craftable_checking_input = 0; - } - - unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( equipname, unitrigger_stub.origin ); - - if ( delete_trigger ) - trig delete(); - - level.a_uts_craftables[level.a_uts_craftables.size] = unitrigger_stub; - return unitrigger_stub; -} - -setup_craftable_pieces() -{ - unitrigger_stub = spawnstruct(); - unitrigger_stub.craftablestub = level.zombie_include_craftables[self.name]; - unitrigger_stub.equipname = self.name; - unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( self.name, unitrigger_stub.origin ); - level.a_uts_craftables[level.a_uts_craftables.size] = unitrigger_stub; - return unitrigger_stub; -} - -craftable_has_piece( piece ) -{ - for ( i = 0; i < self.a_piecespawns.size; i++ ) - { - if ( self.a_piecespawns[i].piecename == piece.piecename && self.a_piecespawns[i].craftablename == piece.craftablename ) - return true; - } - - return false; -} - -get_actual_uts_craftable() -{ - if ( self.craftable_name == "open_table" && self.n_open_craftable_choice != -1 ) - return self.stub.a_uts_open_craftables_available[self.n_open_craftable_choice]; - else - return self.stub; -} - -get_actual_craftablespawn() -{ - if ( self.craftable_name == "open_table" && self.stub.n_open_craftable_choice != -1 && isdefined( self.stub.a_uts_open_craftables_available[self.stub.n_open_craftable_choice].craftablespawn ) ) - return self.stub.a_uts_open_craftables_available[self.stub.n_open_craftable_choice].craftablespawn; - else - return self; -} - -craftable_can_use_shared_piece() -{ - uts_craftable = self.stub; - - if ( isdefined( uts_craftable.n_open_craftable_choice ) && uts_craftable.n_open_craftable_choice != -1 && isdefined( uts_craftable.a_uts_open_craftables_available[uts_craftable.n_open_craftable_choice] ) ) - return true; - - if ( isdefined( uts_craftable.craftablestub.need_all_pieces ) && uts_craftable.craftablestub.need_all_pieces ) - { - foreach ( piece in self.a_piecespawns ) - { - if ( !( isdefined( piece.in_shared_inventory ) && piece.in_shared_inventory ) ) - return false; - } - - return true; - } - else - { - foreach ( piece in self.a_piecespawns ) - { - if ( !( isdefined( piece.crafted ) && piece.crafted ) && ( isdefined( piece.in_shared_inventory ) && piece.in_shared_inventory ) ) - return true; - } - } - - return false; -} - -craftable_set_piece_crafted( piecespawn_check, player ) -{ - craftablespawn_check = get_actual_craftablespawn(); - - foreach ( piecespawn in craftablespawn_check.a_piecespawns ) - { - if ( isdefined( piecespawn_check ) ) - { - if ( piecespawn.piecename == piecespawn_check.piecename && piecespawn.craftablename == piecespawn_check.craftablename ) - { - piecespawn.crafted = 1; - - if ( isdefined( piecespawn.oncrafted ) ) - piecespawn thread [[ piecespawn.oncrafted ]]( player ); - - continue; - } - } - - if ( isdefined( piecespawn.is_shared ) && piecespawn.is_shared && ( isdefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) ) - { - piecespawn.crafted = 1; - - if ( isdefined( piecespawn.oncrafted ) ) - piecespawn thread [[ piecespawn.oncrafted ]]( player ); - - piecespawn.in_shared_inventory = 0; - } - } -} - -craftable_set_piece_crafting( piecespawn_check ) -{ - craftablespawn_check = get_actual_craftablespawn(); - - foreach ( piecespawn in craftablespawn_check.a_piecespawns ) - { - if ( isdefined( piecespawn_check ) ) - { - if ( piecespawn.piecename == piecespawn_check.piecename && piecespawn.craftablename == piecespawn_check.craftablename ) - piecespawn.crafting = 1; - } - - if ( isdefined( piecespawn.is_shared ) && piecespawn.is_shared && ( isdefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) ) - piecespawn.crafting = 1; - } -} - -craftable_clear_piece_crafting( piecespawn_check ) -{ - if ( isdefined( piecespawn_check ) ) - piecespawn_check.crafting = 0; - - craftablespawn_check = get_actual_craftablespawn(); - - foreach ( piecespawn in craftablespawn_check.a_piecespawns ) - { - if ( isdefined( piecespawn.is_shared ) && piecespawn.is_shared && ( isdefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) ) - piecespawn.crafting = 0; - } -} - -craftable_is_piece_crafted( piece ) -{ - for ( i = 0; i < self.a_piecespawns.size; i++ ) - { - if ( self.a_piecespawns[i].piecename == piece.piecename && self.a_piecespawns[i].craftablename == piece.craftablename ) - return isdefined( self.a_piecespawns[i].crafted ) && self.a_piecespawns[i].crafted; - } - - return 0; -} - -craftable_is_piece_crafting( piecespawn_check ) -{ - craftablespawn_check = get_actual_craftablespawn(); - - foreach ( piecespawn in craftablespawn_check.a_piecespawns ) - { - if ( isdefined( piecespawn_check ) ) - { - if ( piecespawn.piecename == piecespawn_check.piecename && piecespawn.craftablename == piecespawn_check.craftablename ) - return piecespawn.crafting; - } - - if ( isdefined( piecespawn.is_shared ) && piecespawn.is_shared && ( isdefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) && ( isdefined( piecespawn.crafting ) && piecespawn.crafting ) ) - return 1; - } - - return 0; -} - -craftable_is_piece_crafted_or_crafting( piece ) -{ - for ( i = 0; i < self.a_piecespawns.size; i++ ) - { - if ( self.a_piecespawns[i].piecename == piece.piecename && self.a_piecespawns[i].craftablename == piece.craftablename ) - return isdefined( self.a_piecespawns[i].crafted ) && self.a_piecespawns[i].crafted || isdefined( self.a_piecespawns[i].crafting ) && self.a_piecespawns[i].crafting; - } - - return 0; -} - -craftable_all_crafted() -{ - for ( i = 0; i < self.a_piecespawns.size; i++ ) - { - if ( !( isdefined( self.a_piecespawns[i].crafted ) && self.a_piecespawns[i].crafted ) ) - return false; - } - - return true; -} - -waittill_crafted( craftable_name ) -{ - level waittill( craftable_name + "_crafted", player ); - - return player; -} - -player_can_craft( craftablespawn, continuing ) -{ - if ( !isdefined( craftablespawn ) ) - return false; - - if ( !craftablespawn craftable_can_use_shared_piece() ) - { - if ( !isdefined( self.current_craftable_piece ) ) - return false; - - if ( !craftablespawn craftable_has_piece( self.current_craftable_piece ) ) - return false; - - if ( isdefined( continuing ) && continuing ) - { - if ( craftablespawn craftable_is_piece_crafted( self.current_craftable_piece ) ) - return false; - } - else if ( craftablespawn craftable_is_piece_crafted_or_crafting( self.current_craftable_piece ) ) - return false; - } - - if ( isdefined( craftablespawn.stub ) && isdefined( craftablespawn.stub.custom_craftablestub_update_prompt ) && isdefined( craftablespawn.stub.playertrigger[0] ) && isdefined( craftablespawn.stub.playertrigger[0].stub ) && !craftablespawn.stub.playertrigger[0].stub [[ craftablespawn.stub.custom_craftablestub_update_prompt ]]( self, 1, craftablespawn.stub.playertrigger[self getentitynumber()] ) ) - return false; - - return true; -} - -craftable_transfer_data() -{ - uts_craftable = self.stub; - - if ( uts_craftable.n_open_craftable_choice == -1 || !isdefined( uts_craftable.a_uts_open_craftables_available[uts_craftable.n_open_craftable_choice] ) ) - return; - - uts_source = uts_craftable.a_uts_open_craftables_available[uts_craftable.n_open_craftable_choice]; - uts_target = uts_craftable; - uts_target.craftablestub = uts_source.craftablestub; - uts_target.craftablespawn = uts_source.craftablespawn; - uts_target.crafted = uts_source.crafted; - uts_target.cursor_hint = uts_source.cursor_hint; - uts_target.custom_craftable_update_prompt = uts_source.custom_craftable_update_prompt; - uts_target.equipname = uts_source.equipname; - uts_target.hint_string = uts_source.hint_string; - uts_target.persistent = uts_source.persistent; - uts_target.prompt_and_visibility_func = uts_source.prompt_and_visibility_func; - uts_target.trigger_func = uts_source.trigger_func; - uts_target.trigger_hintstring = uts_source.trigger_hintstring; - uts_target.weaponname = uts_source.weaponname; - uts_target.craftablespawn.stub = uts_target; - thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( uts_source ); - uts_source craftablestub_remove(); - return uts_target; -} - -player_craft( craftablespawn ) -{ - craftablespawn craftable_set_piece_crafted( self.current_craftable_piece, self ); - - if ( isdefined( self.current_craftable_piece ) && ( isdefined( self.current_craftable_piece.crafted ) && self.current_craftable_piece.crafted ) ) - player_destroy_piece( self.current_craftable_piece ); - - if ( isdefined( craftablespawn.stub.n_open_craftable_choice ) ) - { - uts_craftable = craftablespawn craftable_transfer_data(); - craftablespawn = uts_craftable.craftablespawn; - update_open_table_status(); - } - else - uts_craftable = craftablespawn.stub; - - if ( !isdefined( uts_craftable.model ) && isdefined( uts_craftable.craftablestub.str_model ) ) - { - craftablestub = uts_craftable.craftablestub; - s_model = getstruct( uts_craftable.target, "targetname" ); - - if ( isdefined( s_model ) ) - { - m_spawn = spawn( "script_model", s_model.origin ); - - if ( isdefined( craftablestub.v_origin_offset ) ) - m_spawn.origin += craftablestub.v_origin_offset; - - m_spawn.angles = s_model.angles; - - if ( isdefined( craftablestub.v_angle_offset ) ) - m_spawn.angles += craftablestub.v_angle_offset; - - m_spawn setmodel( craftablestub.str_model ); - uts_craftable.model = m_spawn; - } - } - - if ( isdefined( uts_craftable.model ) ) - { - for ( i = 0; i < craftablespawn.a_piecespawns.size; i++ ) - { - if ( isdefined( craftablespawn.a_piecespawns[i].tag_name ) ) - { - uts_craftable.model notsolid(); - - if ( !( isdefined( craftablespawn.a_piecespawns[i].crafted ) && craftablespawn.a_piecespawns[i].crafted ) ) - { - uts_craftable.model hidepart( craftablespawn.a_piecespawns[i].tag_name ); - continue; - } - - uts_craftable.model show(); - uts_craftable.model showpart( craftablespawn.a_piecespawns[i].tag_name ); - } - } - } - - self track_craftable_pieces_crafted( craftablespawn ); - - if ( craftablespawn craftable_all_crafted() ) - { - self player_finish_craftable( craftablespawn ); - self track_craftables_crafted( craftablespawn ); - - if ( isdefined( level.craftable_crafted_custom_func ) ) - self thread [[ level.craftable_crafted_custom_func ]]( craftablespawn ); - - self playsound( "zmb_buildable_complete" ); - } - else - { - self playsound( "zmb_buildable_piece_add" ); -/# - assert( isdefined( level.zombie_craftablestubs[craftablespawn.craftable_name].str_crafting ), "Missing builing hint" ); -#/ - if ( isdefined( level.zombie_craftablestubs[craftablespawn.craftable_name].str_crafting ) ) - return level.zombie_craftablestubs[craftablespawn.craftable_name].str_crafting; - } - - return ""; -} - -update_open_table_status() -{ - b_open_craftables_remaining = 0; - - foreach ( uts_craftable in level.a_uts_craftables ) - { - if ( isdefined( level.zombie_include_craftables[uts_craftable.equipname] ) && ( isdefined( level.zombie_include_craftables[uts_craftable.equipname].is_open_table ) && level.zombie_include_craftables[uts_craftable.equipname].is_open_table ) ) - { - b_piece_crafted = 0; - - foreach ( piecespawn in uts_craftable.craftablespawn.a_piecespawns ) - { - if ( isdefined( piecespawn.crafted ) && piecespawn.crafted ) - { - b_piece_crafted = 1; - break; - } - } - - if ( !b_piece_crafted ) - b_open_craftables_remaining = 1; - } - } - - if ( !b_open_craftables_remaining ) - { - foreach ( uts_craftable in level.a_uts_craftables ) - { - if ( uts_craftable.equipname == "open_table" ) - thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( uts_craftable ); - } - } -} - -player_finish_craftable( craftablespawn ) -{ - craftablespawn.crafted = 1; - craftablespawn.stub.crafted = 1; - craftablespawn notify( "crafted", self ); - level.craftables_crafted[craftablespawn.craftable_name] = 1; - level notify( craftablespawn.craftable_name + "_crafted", self ); -} - -complete_craftable( str_craftable_name ) -{ - foreach ( uts_craftable in level.a_uts_craftables ) - { - if ( uts_craftable.craftablestub.name == str_craftable_name ) - { - player = getplayers()[0]; - player player_finish_craftable( uts_craftable.craftablespawn ); - thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( uts_craftable ); - - if ( isdefined( uts_craftable.craftablestub.onfullycrafted ) ) - uts_craftable [[ uts_craftable.craftablestub.onfullycrafted ]](); - - return; - } - } -} - -craftablestub_remove() -{ - arrayremovevalue( level.a_uts_craftables, self ); -} - -craftabletrigger_update_prompt( player ) -{ - can_use = self.stub craftablestub_update_prompt( player ); - self sethintstring( self.stub.hint_string ); - return can_use; -} - -craftablestub_update_prompt( player, unitrigger ) -{ - if ( !self anystub_update_prompt( player ) ) - return false; - - if ( isdefined( self.is_locked ) && self.is_locked ) - return true; - - can_use = 1; - - if ( isdefined( self.custom_craftablestub_update_prompt ) && !self [[ self.custom_craftablestub_update_prompt ]]( player ) ) - return false; - - if ( !( isdefined( self.crafted ) && self.crafted ) ) - { - if ( !self.craftablespawn craftable_can_use_shared_piece() ) - { - if ( !isdefined( player.current_craftable_piece ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE"; - return false; - } - else if ( !self.craftablespawn craftable_has_piece( player.current_craftable_piece ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG"; - return false; - } - } -/# - assert( isdefined( level.zombie_craftablestubs[self.equipname].str_to_craft ), "Missing craftable hint" ); -#/ - self.hint_string = level.zombie_craftablestubs[self.equipname].str_to_craft; - } - else if ( self.persistent == 1 ) - { - if ( maps\mp\zombies\_zm_equipment::is_limited_equipment( self.weaponname ) && maps\mp\zombies\_zm_equipment::limited_equipment_in_use( self.weaponname ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_ONLY_ONE"; - return false; - } - - if ( player has_player_equipment( self.weaponname ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_HAVE_ONE"; - return false; - } - - self.hint_string = self.trigger_hintstring; - } - else if ( self.persistent == 2 ) - { - if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.weaponname, undefined ) ) - { - self.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; - return false; - } - else if ( isdefined( self.str_taken ) && self.str_taken ) - { - self.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; - return false; - } - - self.hint_string = self.trigger_hintstring; - } - else - { - self.hint_string = ""; - return false; - } - - return true; -} - -choose_open_craftable( player ) -{ - self endon( "kill_choose_open_craftable" ); - n_playernum = player getentitynumber(); - self.b_open_craftable_checking_input = 1; - b_got_input = 1; - hinttexthudelem = newclienthudelem( player ); - hinttexthudelem.alignx = "center"; - hinttexthudelem.aligny = "middle"; - hinttexthudelem.horzalign = "center"; - hinttexthudelem.vertalign = "bottom"; - hinttexthudelem.y = -100; - - if ( player issplitscreen() ) - hinttexthudelem.y = -50; - - hinttexthudelem.foreground = 1; - hinttexthudelem.font = "default"; - hinttexthudelem.fontscale = 1.0; - hinttexthudelem.alpha = 1; - hinttexthudelem.color = ( 1, 1, 1 ); - hinttexthudelem settext( &"ZM_CRAFTABLES_CHANGE_BUILD" ); - - if ( !isdefined( self.opencraftablehudelem ) ) - self.opencraftablehudelem = []; - - self.opencraftablehudelem[n_playernum] = hinttexthudelem; - - while ( isdefined( self.playertrigger[n_playernum] ) && !self.crafted ) - { - if ( player actionslotonebuttonpressed() ) - { - self.n_open_craftable_choice++; - b_got_input = 1; - } - else if ( player actionslottwobuttonpressed() ) - { - self.n_open_craftable_choice--; - b_got_input = 1; - } - - if ( self.n_open_craftable_choice >= self.a_uts_open_craftables_available.size ) - self.n_open_craftable_choice = 0; - else if ( self.n_open_craftable_choice < 0 ) - self.n_open_craftable_choice = self.a_uts_open_craftables_available.size - 1; - - if ( b_got_input ) - { - self.equipname = self.a_uts_open_craftables_available[self.n_open_craftable_choice].equipname; - self.hint_string = self.a_uts_open_craftables_available[self.n_open_craftable_choice].hint_string; - self.playertrigger[n_playernum] sethintstring( self.hint_string ); - b_got_input = 0; - } - - if ( player is_player_looking_at( self.playertrigger[n_playernum].origin, 0.76 ) ) - self.opencraftablehudelem[n_playernum].alpha = 1; - else - self.opencraftablehudelem[n_playernum].alpha = 0; - - wait 0.05; - } - - self.b_open_craftable_checking_input = 0; - self.opencraftablehudelem[n_playernum] destroy(); - self.opencraftablehudelem[n_playernum] = undefined; -} - -open_craftablestub_update_prompt( player ) -{ - if ( !( isdefined( self.crafted ) && self.crafted ) ) - { - self.a_uts_open_craftables_available = []; - - foreach ( uts_craftable in level.a_uts_craftables ) - { - if ( isdefined( uts_craftable.craftablestub.is_open_table ) && uts_craftable.craftablestub.is_open_table && !( isdefined( uts_craftable.crafted ) && uts_craftable.crafted ) && uts_craftable.craftablespawn.craftable_name != "open_table" && uts_craftable.craftablespawn craftable_can_use_shared_piece() ) - self.a_uts_open_craftables_available[self.a_uts_open_craftables_available.size] = uts_craftable; - } - - if ( self.a_uts_open_craftables_available.size < 2 ) - { - self notify( "kill_choose_open_craftable" ); - self.b_open_craftable_checking_input = 0; - n_entitynum = player getentitynumber(); - - if ( isdefined( self.opencraftablehudelem ) && isdefined( self.opencraftablehudelem[n_entitynum] ) ) - { - self.opencraftablehudelem[n_entitynum] destroy(); - self.opencraftablehudelem[n_entitynum] = undefined; - } - } - - switch ( self.a_uts_open_craftables_available.size ) - { - case "0": - if ( !isdefined( player.current_craftable_piece ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE"; - self.n_open_craftable_choice = -1; - return false; - } - - break; - case "1": - self.n_open_craftable_choice = 0; - self.equipname = self.a_uts_open_craftables_available[self.n_open_craftable_choice].equipname; - return true; - default: - if ( !self.b_open_craftable_checking_input ) - thread choose_open_craftable( player ); - - return true; - } - } - else if ( self.persistent == 1 || self.persistent == 2 && !( isdefined( self.bought ) && self.bought ) ) - return true; - - return false; -} - -player_continue_crafting( craftablespawn ) -{ - if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || self in_revive_trigger() ) - return false; - - if ( !self player_can_craft( craftablespawn, 1 ) ) - return false; - - if ( isdefined( self.screecher ) ) - return false; - - if ( !self usebuttonpressed() ) - return false; - - if ( !craftablespawn craftable_is_piece_crafting( self.current_craftable_piece ) ) - return false; - - trigger = craftablespawn.stub maps\mp\zombies\_zm_unitrigger::unitrigger_trigger( self ); - - if ( craftablespawn.stub.script_unitrigger_type == "unitrigger_radius_use" ) - { - torigin = craftablespawn.stub unitrigger_origin(); - porigin = self geteye(); - radius_sq = 2.25 * craftablespawn.stub.radius * craftablespawn.stub.radius; - - if ( distance2dsquared( torigin, porigin ) > radius_sq ) - return false; - } - else if ( !isdefined( trigger ) || !trigger istouching( self ) ) - return false; - - if ( isdefined( craftablespawn.stub.require_look_at ) && craftablespawn.stub.require_look_at && !self is_player_looking_at( trigger.origin, 0.76 ) ) - return false; - - return true; -} - -player_progress_bar_update( start_time, craft_time ) -{ - self endon( "entering_last_stand" ); - self endon( "death" ); - self endon( "disconnect" ); - self endon( "craftable_progress_end" ); - - while ( isdefined( self ) && gettime() - start_time < craft_time ) - { - progress = ( gettime() - start_time ) / craft_time; - - if ( progress < 0 ) - progress = 0; - - if ( progress > 1 ) - progress = 1; - - self.usebar updatebar( progress ); - wait 0.05; - } -} - -player_progress_bar( start_time, craft_time ) -{ - self.usebar = self createprimaryprogressbar(); - self.usebartext = self createprimaryprogressbartext(); - self.usebartext settext( &"ZOMBIE_BUILDING" ); - - if ( isdefined( self ) && isdefined( start_time ) && isdefined( craft_time ) ) - self player_progress_bar_update( start_time, craft_time ); - - self.usebartext destroyelem(); - self.usebar destroyelem(); -} - -craftable_use_hold_think_internal( player ) -{ - wait 0.01; - - if ( !isdefined( self ) ) - { - self notify( "craft_failed" ); - - if ( isdefined( player.craftableaudio ) ) - { - player.craftableaudio delete(); - player.craftableaudio = undefined; - } - - return; - } - - if ( !isdefined( self.usetime ) ) - self.usetime = int( 3000 ); - - self.craft_time = self.usetime; - self.craft_start_time = gettime(); - craft_time = self.craft_time; - craft_start_time = self.craft_start_time; - player disable_player_move_states( 1 ); - player increment_is_drinking(); - orgweapon = player getcurrentweapon(); - player giveweapon( "zombie_builder_zm" ); - player switchtoweapon( "zombie_builder_zm" ); - self.stub.craftablespawn craftable_set_piece_crafting( player.current_craftable_piece ); - player thread player_progress_bar( craft_start_time, craft_time ); - - if ( isdefined( level.craftable_craft_custom_func ) ) - player thread [[ level.craftable_craft_custom_func ]]( self.stub ); - - while ( isdefined( self ) && player player_continue_crafting( self.stub.craftablespawn ) && gettime() - self.craft_start_time < self.craft_time ) - wait 0.05; - - player notify( "craftable_progress_end" ); - player maps\mp\zombies\_zm_weapons::switch_back_primary_weapon( orgweapon ); - player takeweapon( "zombie_builder_zm" ); - - if ( isdefined( player.is_drinking ) && player.is_drinking ) - player decrement_is_drinking(); - - player enable_player_move_states(); - - if ( isdefined( self ) && player player_continue_crafting( self.stub.craftablespawn ) && gettime() - self.craft_start_time >= self.craft_time ) - { - self.stub.craftablespawn craftable_clear_piece_crafting( player.current_craftable_piece ); - self notify( "craft_succeed" ); - } - else - { - if ( isdefined( player.craftableaudio ) ) - { - player.craftableaudio delete(); - player.craftableaudio = undefined; - } - - self.stub.craftablespawn craftable_clear_piece_crafting( player.current_craftable_piece ); - self notify( "craft_failed" ); - } -} - -craftable_play_craft_fx( player ) -{ - self endon( "kill_trigger" ); - self endon( "craft_succeed" ); - self endon( "craft_failed" ); - - while ( true ) - { - playfx( level._effect["building_dust"], player getplayercamerapos(), player.angles ); - wait 0.5; - } -} - -craftable_use_hold_think( player ) -{ - self thread craftable_play_craft_fx( player ); - self thread craftable_use_hold_think_internal( player ); - retval = self waittill_any_return( "craft_succeed", "craft_failed" ); - - if ( retval == "craft_succeed" ) - return true; - - return false; -} - -craftable_place_think() -{ - self endon( "kill_trigger" ); - player_crafted = undefined; - - while ( !( isdefined( self.stub.crafted ) && self.stub.crafted ) ) - { - self waittill( "trigger", player ); - - if ( isdefined( level.custom_craftable_validation ) ) - { - valid = self [[ level.custom_craftable_validation ]]( player ); - - if ( !valid ) - continue; - } - - if ( player != self.parent_player ) - continue; - - if ( isdefined( player.screecher_weapon ) ) - continue; - - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0.5 ); - continue; - } - - status = player player_can_craft( self.stub.craftablespawn ); - - if ( !status ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - - if ( isdefined( self.stub.oncantuse ) ) - self.stub [[ self.stub.oncantuse ]]( player ); - } - else - { - if ( isdefined( self.stub.onbeginuse ) ) - self.stub [[ self.stub.onbeginuse ]]( player ); - - result = self craftable_use_hold_think( player ); - team = player.pers["team"]; - - if ( isdefined( self.stub.onenduse ) ) - self.stub [[ self.stub.onenduse ]]( team, player, result ); - - if ( !result ) - continue; - - if ( isdefined( self.stub.onuse ) ) - self.stub [[ self.stub.onuse ]]( player ); - - prompt = player player_craft( self.stub.craftablespawn ); - player_crafted = player; - self.stub.hint_string = prompt; - self sethintstring( self.stub.hint_string ); - } - } - - if ( isdefined( self.stub.craftablestub.onfullycrafted ) ) - { - b_result = self.stub [[ self.stub.craftablestub.onfullycrafted ]](); - - if ( !b_result ) - return; - } - - if ( isdefined( player_crafted ) ) - { - - } - - if ( self.stub.persistent == 0 ) - { - self.stub craftablestub_remove(); - thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub ); - return; - } - - if ( self.stub.persistent == 3 ) - { - stub_uncraft_craftable( self.stub, 1 ); - return; - } - - if ( self.stub.persistent == 2 ) - { - if ( isdefined( player_crafted ) ) - self craftabletrigger_update_prompt( player_crafted ); - - if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) - { - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; - self sethintstring( self.stub.hint_string ); - return; - } - - if ( isdefined( self.stub.str_taken ) && self.stub.str_taken ) - { - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; - self sethintstring( self.stub.hint_string ); - return; - } - - if ( isdefined( self.stub.model ) ) - { - self.stub.model notsolid(); - self.stub.model show(); - } - - while ( self.stub.persistent == 2 ) - { - self waittill( "trigger", player ); - - if ( isdefined( player.screecher_weapon ) ) - continue; - - if ( isdefined( level.custom_craftable_validation ) ) - { - valid = self [[ level.custom_craftable_validation ]]( player ); - - if ( !valid ) - continue; - } - - if ( !( isdefined( self.stub.crafted ) && self.stub.crafted ) ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - return; - } - - if ( player != self.parent_player ) - continue; - - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0.5 ); - continue; - } - - self.stub.bought = 1; - - if ( isdefined( self.stub.model ) ) - self.stub.model thread model_fly_away( self ); - - player maps\mp\zombies\_zm_weapons::weapon_give( self.stub.weaponname ); - - if ( isdefined( level.zombie_include_craftables[self.stub.equipname].onbuyweapon ) ) - self [[ level.zombie_include_craftables[self.stub.equipname].onbuyweapon ]]( player ); - - if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; - else - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; - - self sethintstring( self.stub.hint_string ); - player track_craftables_pickedup( self.stub.craftablespawn ); - } - } - else if ( !isdefined( player_crafted ) || self craftabletrigger_update_prompt( player_crafted ) ) - { - if ( isdefined( self.stub.model ) ) - { - self.stub.model notsolid(); - self.stub.model show(); - } - - while ( self.stub.persistent == 1 ) - { - self waittill( "trigger", player ); - - if ( isdefined( player.screecher_weapon ) ) - continue; - - if ( isdefined( level.custom_craftable_validation ) ) - { - valid = self [[ level.custom_craftable_validation ]]( player ); - - if ( !valid ) - continue; - } - - if ( !( isdefined( self.stub.crafted ) && self.stub.crafted ) ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - return; - } - - if ( player != self.parent_player ) - continue; - - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0.5 ); - continue; - } - - if ( player has_player_equipment( self.stub.weaponname ) ) - continue; - - if ( isdefined( level.zombie_craftable_persistent_weapon ) ) - { - if ( self [[ level.zombie_craftable_persistent_weapon ]]( player ) ) - continue; - } - - if ( isdefined( level.zombie_custom_equipment_setup ) ) - { - if ( self [[ level.zombie_custom_equipment_setup ]]( player ) ) - continue; - } - - if ( !maps\mp\zombies\_zm_equipment::is_limited_equipment( self.stub.weaponname ) || !maps\mp\zombies\_zm_equipment::limited_equipment_in_use( self.stub.weaponname ) ) - { - player maps\mp\zombies\_zm_equipment::equipment_buy( self.stub.weaponname ); - player giveweapon( self.stub.weaponname ); - player setweaponammoclip( self.stub.weaponname, 1 ); - - if ( isdefined( level.zombie_include_craftables[self.stub.equipname].onbuyweapon ) ) - self [[ level.zombie_include_craftables[self.stub.equipname].onbuyweapon ]]( player ); - else if ( self.stub.weaponname != "keys_zm" ) - player setactionslot( 1, "weapon", self.stub.weaponname ); - - if ( isdefined( level.zombie_craftablestubs[self.stub.equipname].str_taken ) ) - self.stub.hint_string = level.zombie_craftablestubs[self.stub.equipname].str_taken; - else - self.stub.hint_string = ""; - - self sethintstring( self.stub.hint_string ); - player track_craftables_pickedup( self.stub.craftablespawn ); - } - else - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - } - } - } -} - -model_fly_away( unitrigger ) -{ - self moveto( self.origin + vectorscale( ( 0, 0, 1 ), 40.0 ), 3 ); - direction = self.origin; - direction = ( direction[1], direction[0], 0 ); - - if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 ) - direction = ( direction[0], direction[1] * -1, 0 ); - else if ( direction[0] < 0 ) - direction = ( direction[0] * -1, direction[1], 0 ); - - self vibrate( direction, 10, 0.5, 4 ); - - self waittill( "movedone" ); - - self ghost(); - playfx( level._effect["poltergeist"], self.origin ); -} - -find_craftable_stub( equipname ) -{ - foreach ( stub in level.a_uts_craftables ) - { - if ( stub.equipname == equipname ) - return stub; - } - - return undefined; -} - -uncraft_craftable( equipname, return_pieces, origin, angles ) -{ - stub = find_craftable_stub( equipname ); - stub_uncraft_craftable( stub, return_pieces, origin, angles ); -} - -stub_uncraft_craftable( stub, return_pieces, origin, angles, use_random_start ) -{ - if ( isdefined( stub ) ) - { - craftable = stub.craftablespawn; - craftable.crafted = 0; - craftable.stub.crafted = 0; - craftable notify( "uncrafted" ); - level.craftables_crafted[craftable.craftable_name] = 0; - level notify( craftable.craftable_name + "_uncrafted" ); - - for ( i = 0; i < craftable.a_piecespawns.size; i++ ) - { - craftable.a_piecespawns[i].crafted = 0; - - if ( isdefined( craftable.a_piecespawns[i].tag_name ) ) - { - craftable.stub.model notsolid(); - - if ( !( isdefined( craftable.a_piecespawns[i].crafted ) && craftable.a_piecespawns[i].crafted ) ) - craftable.stub.model hidepart( craftable.a_piecespawns[i].tag_name ); - else - { - craftable.stub.model show(); - craftable.stub.model showpart( craftable.a_piecespawns[i].tag_name ); - } - } - - if ( isdefined( return_pieces ) && return_pieces ) - craftable.a_piecespawns[i] piece_spawn_at( origin, angles, use_random_start ); - } - - if ( isdefined( craftable.stub.model ) ) - craftable.stub.model ghost(); - } -} - -player_explode_craftable( equipname, origin, speed, return_to_spawn, return_time ) -{ - self explosiondamage( 50, origin ); - stub = find_craftable_stub( equipname ); - - if ( isdefined( stub ) ) - { - craftable = stub.craftablespawn; - craftable.crafted = 0; - craftable.stub.crafted = 0; - craftable notify( "uncrafted" ); - level.craftables_crafted[craftable.craftable_name] = 0; - level notify( craftable.craftable_name + "_uncrafted" ); - - for ( i = 0; i < craftable.a_piecespawns.size; i++ ) - { - craftable.a_piecespawns[i].crafted = 0; - - if ( isdefined( craftable.a_piecespawns[i].tag_name ) ) - { - craftable.stub.model notsolid(); - - if ( !( isdefined( craftable.a_piecespawns[i].crafted ) && craftable.a_piecespawns[i].crafted ) ) - craftable.stub.model hidepart( craftable.a_piecespawns[i].tag_name ); - else - { - craftable.stub.model show(); - craftable.stub.model showpart( craftable.a_piecespawns[i].tag_name ); - } - } - - ang = randomfloat( 360 ); - h = 0.25 + randomfloat( 0.5 ); - dir = ( sin( ang ), cos( ang ), h ); - self thread player_throw_piece( craftable.a_piecespawns[i], origin, speed * dir, return_to_spawn, return_time ); - } - - craftable.stub.model ghost(); - } -} - -think_craftables() -{ - foreach ( craftable in level.zombie_include_craftables ) - { - if ( isdefined( craftable.triggerthink ) ) - craftable [[ craftable.triggerthink ]](); - } -} - -opentablecraftable() -{ - a_trigs = getentarray( "open_craftable_trigger", "targetname" ); - - foreach ( trig in a_trigs ) - setup_unitrigger_craftable_internal( trig, "open_table", "", "OPEN_CRAFTABLE", 1, 0 ); -} - -craftable_trigger_think( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) -{ - return setup_unitrigger_craftable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); -} - -craftable_trigger_think_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) -{ - return setup_unitrigger_craftable_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); -} - -setup_vehicle_unitrigger_craftable( parent, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) -{ - trig = getent( trigger_targetname, "targetname" ); - - if ( !isdefined( trig ) ) - return; - - unitrigger_stub = spawnstruct(); - unitrigger_stub.craftablestub = level.zombie_include_craftables[equipname]; - unitrigger_stub.link_parent = parent; - unitrigger_stub.origin_parent = trig; - unitrigger_stub.trigger_targetname = trigger_targetname; - unitrigger_stub.originfunc = ::anystub_get_unitrigger_origin; - unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; - unitrigger_stub.origin = trig.origin; - unitrigger_stub.angles = trig.angles; - unitrigger_stub.equipname = equipname; - unitrigger_stub.weaponname = weaponname; - unitrigger_stub.trigger_hintstring = trigger_hintstring; - unitrigger_stub.delete_trigger = delete_trigger; - unitrigger_stub.crafted = 0; - unitrigger_stub.persistent = persistent; - unitrigger_stub.usetime = int( 3000 ); - unitrigger_stub.onbeginuse = ::onbeginuseuts; - unitrigger_stub.onenduse = ::onenduseuts; - unitrigger_stub.onuse = ::onuseplantobjectuts; - unitrigger_stub.oncantuse = ::oncantuseuts; - - if ( isdefined( trig.script_length ) ) - unitrigger_stub.script_length = trig.script_length; - else - unitrigger_stub.script_length = 24; - - if ( isdefined( trig.script_width ) ) - unitrigger_stub.script_width = trig.script_width; - else - unitrigger_stub.script_width = 64; - - if ( isdefined( trig.script_height ) ) - unitrigger_stub.script_height = trig.script_height; - else - unitrigger_stub.script_height = 24; - - if ( isdefined( trig.radius ) ) - unitrigger_stub.radius = trig.radius; - else - unitrigger_stub.radius = 64; - - unitrigger_stub.target = trig.target; - unitrigger_stub.targetname = trig.targetname + "_trigger"; - unitrigger_stub.script_noteworthy = trig.script_noteworthy; - unitrigger_stub.script_parameters = trig.script_parameters; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - - if ( isdefined( level.zombie_craftablestubs[equipname].str_to_craft ) ) - unitrigger_stub.hint_string = level.zombie_craftablestubs[equipname].str_to_craft; - - unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - unitrigger_stub.require_look_at = 1; - unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - unitrigger_stub.prompt_and_visibility_func = ::craftabletrigger_update_prompt; - maps\mp\zombies\_zm_unitrigger::register_unitrigger( unitrigger_stub, ::craftable_place_think ); - unitrigger_stub.piece_trigger = trig; - trig.trigger_stub = unitrigger_stub; - unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( equipname, unitrigger_stub.origin ); - - if ( delete_trigger ) - trig delete(); - - level.a_uts_craftables[level.a_uts_craftables.size] = unitrigger_stub; - return unitrigger_stub; -} - -vehicle_craftable_trigger_think( vehicle, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) -{ - return setup_vehicle_unitrigger_craftable( vehicle, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); -} - -onpickuputs( player ) -{ -/# - if ( isdefined( player ) && isdefined( player.name ) ) - println( "ZM >> Craftable piece recovered by - " + player.name ); -#/ -} - -ondroputs( player ) -{ -/# - if ( isdefined( player ) && isdefined( player.name ) ) - println( "ZM >> Craftable piece dropped by - " + player.name ); -#/ - player notify( "event_ended" ); -} - -onbeginuseuts( player ) -{ -/# - if ( isdefined( player ) && isdefined( player.name ) ) - println( "ZM >> Craftable piece begin use by - " + player.name ); -#/ - if ( isdefined( self.craftablestub.onbeginuse ) ) - self [[ self.craftablestub.onbeginuse ]]( player ); - - if ( isdefined( player ) && !isdefined( player.craftableaudio ) ) - { - player.craftableaudio = spawn( "script_origin", player.origin ); - player.craftableaudio playloopsound( "zmb_craftable_loop" ); - } -} - -onenduseuts( team, player, result ) -{ -/# - if ( isdefined( player ) && isdefined( player.name ) ) - println( "ZM >> Craftable piece end use by - " + player.name ); -#/ - if ( !isdefined( player ) ) - return; - - if ( isdefined( player.craftableaudio ) ) - { - player.craftableaudio delete(); - player.craftableaudio = undefined; - } - - if ( isdefined( self.craftablestub.onenduse ) ) - self [[ self.craftablestub.onenduse ]]( team, player, result ); - - player notify( "event_ended" ); -} - -oncantuseuts( player ) -{ -/# - if ( isdefined( player ) && isdefined( player.name ) ) - println( "ZM >> Craftable piece can't use by - " + player.name ); -#/ - if ( isdefined( self.craftablestub.oncantuse ) ) - self [[ self.craftablestub.oncantuse ]]( player ); -} - -onuseplantobjectuts( player ) -{ -/# - if ( isdefined( player ) && isdefined( player.name ) ) - println( "ZM >> Craftable piece crafted by - " + player.name ); -#/ - if ( isdefined( self.craftablestub.onuseplantobject ) ) - self [[ self.craftablestub.onuseplantobject ]]( player ); - - player notify( "bomb_planted" ); -} - -is_craftable() -{ - if ( !isdefined( level.zombie_craftablestubs ) ) - return false; - - if ( isdefined( self.zombie_weapon_upgrade ) && isdefined( level.zombie_craftablestubs[self.zombie_weapon_upgrade] ) ) - return true; - - if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "specialty_weapupgrade" ) - { - if ( isdefined( level.craftables_crafted["pap"] ) && level.craftables_crafted["pap"] ) - return false; - - return true; - } - - return false; -} - -craftable_crafted() -{ - self.a_piecespawns--; -} - -craftable_complete() -{ - if ( self.a_piecespawns <= 0 ) - return true; - - return false; -} - -get_craftable_hint( craftable_name ) -{ -/# - assert( isdefined( level.zombie_craftablestubs[craftable_name] ), craftable_name + " was not included or is not part of the zombie weapon list." ); -#/ - return level.zombie_craftablestubs[craftable_name].str_to_craft; -} - -delete_on_disconnect( craftable, self_notify, skip_delete ) -{ - craftable endon( "death" ); - - self waittill( "disconnect" ); - - if ( isdefined( self_notify ) ) - self notify( self_notify ); - - if ( !( isdefined( skip_delete ) && skip_delete ) ) - { - if ( isdefined( craftable.stub ) ) - { - thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( craftable.stub ); - craftable.stub = undefined; - } - - if ( isdefined( craftable ) ) - craftable delete(); - } -} - -is_holding_part( craftable_name, piece_name ) -{ - if ( isdefined( self.current_craftable_piece ) ) - { - if ( self.current_craftable_piece.craftablename == craftable_name && self.current_craftable_piece.modelname == piece_name ) - return true; - } - - if ( isdefined( level.a_uts_craftables ) ) - { - foreach ( craftable_stub in level.a_uts_craftables ) - { - if ( craftable_stub.craftablestub.name == craftable_name ) - { - foreach ( piece in craftable_stub.craftablespawn.a_piecespawns ) - { - if ( piece.piecename == piece_name ) - { - if ( isdefined( piece.in_shared_inventory ) && piece.in_shared_inventory ) - return true; - } - } - } - } - } - - return false; -} - -is_part_crafted( craftable_name, piece_name ) -{ - if ( isdefined( level.a_uts_craftables ) ) - { - foreach ( craftable_stub in level.a_uts_craftables ) - { - if ( craftable_stub.craftablestub.name == craftable_name ) - { - if ( isdefined( craftable_stub.crafted ) && craftable_stub.crafted ) - return true; - - foreach ( piece in craftable_stub.craftablespawn.a_piecespawns ) - { - if ( piece.piecename == piece_name ) - { - if ( isdefined( piece.crafted ) && piece.crafted ) - return true; - } - } - } - } - } - - return false; -} - -track_craftable_piece_pickedup( piece ) -{ - if ( !isdefined( piece ) || !isdefined( piece.craftablename ) ) - { -/# - println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftable_piece_pickedup() \n" ); -#/ - return; - } - - self add_map_craftable_stat( piece.craftablename, "pieces_pickedup", 1 ); - - if ( isdefined( piece.piecestub.vox_id ) ) - { - if ( isdefined( piece.piecestub.b_one_time_vo ) && piece.piecestub.b_one_time_vo ) - { - if ( !isdefined( self.a_one_time_piece_pickup_vo ) ) - self.a_one_time_piece_pickup_vo = []; - - if ( isdefined( self.dontspeak ) && self.dontspeak ) - return; - - if ( isinarray( self.a_one_time_piece_pickup_vo, piece.piecestub.vox_id ) ) - return; - - self.a_one_time_piece_pickup_vo[self.a_one_time_piece_pickup_vo.size] = piece.piecestub.vox_id; - } - - self thread do_player_general_vox( "general", piece.piecestub.vox_id + "_pickup" ); - } - else - self thread do_player_general_vox( "general", "build_pickup" ); -} - -track_craftable_pieces_crafted( craftable ) -{ - if ( !isdefined( craftable ) || !isdefined( craftable.craftable_name ) ) - { -/# - println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftable_pieces_crafted() \n" ); -#/ - return; - } - - bname = craftable.craftable_name; - - if ( isdefined( craftable.stat_name ) ) - bname = craftable.stat_name; - - self add_map_craftable_stat( bname, "pieces_built", 1 ); - - if ( !craftable craftable_all_crafted() ) - self thread do_player_general_vox( "general", "build_add" ); -} - -track_craftables_crafted( craftable ) -{ - if ( !isdefined( craftable ) || !isdefined( craftable.craftable_name ) ) - { -/# - println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftables_crafted() \n" ); -#/ - return; - } - - bname = craftable.craftable_name; - - if ( isdefined( craftable.stat_name ) ) - bname = craftable.stat_name; - - self add_map_craftable_stat( bname, "buildable_built", 1 ); - self maps\mp\zombies\_zm_stats::increment_client_stat( "buildables_built", 0 ); - self maps\mp\zombies\_zm_stats::increment_player_stat( "buildables_built" ); - - if ( isdefined( craftable.stub.craftablestub.vox_id ) ) - { - if ( isdefined( level.zombie_custom_craftable_built_vo ) ) - self thread [[ level.zombie_custom_craftable_built_vo ]]( craftable.stub ); - - self thread do_player_general_vox( "general", craftable.stub.craftablestub.vox_id + "_final" ); - } -} - -track_craftables_pickedup( craftable ) -{ - if ( !isdefined( craftable ) ) - { -/# - println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftables_pickedup() \n" ); -#/ - return; - } - - stat_name = get_craftable_stat_name( craftable.craftable_name ); - - if ( !isdefined( stat_name ) ) - { -/# - println( "STAT TRACKING FAILURE: NO STAT NAME FOR " + craftable.craftable_name + "\n" ); -#/ - return; - } - - self add_map_craftable_stat( stat_name, "buildable_pickedup", 1 ); - - if ( isdefined( craftable.stub.craftablestub.vox_id ) ) - self thread do_player_general_vox( "general", craftable.stub.craftablestub.vox_id + "_plc" ); - - self say_pickup_craftable_vo( craftable, 0 ); -} - -track_craftables_planted( equipment ) -{ - if ( !isdefined( equipment ) ) - { -/# - println( "STAT TRACKING FAILURE: NOT DEFINED for track_craftables_planted() \n" ); -#/ - return; - } - - craftable_name = undefined; - - if ( isdefined( equipment.name ) ) - craftable_name = get_craftable_stat_name( equipment.name ); - - if ( !isdefined( craftable_name ) ) - { -/# - println( "STAT TRACKING FAILURE: NO CRAFTABLE NAME FOR track_craftables_planted() " + equipment.name + "\n" ); -#/ - return; - } - - maps\mp\_demo::bookmark( "zm_player_buildable_placed", gettime(), self ); - self add_map_craftable_stat( craftable_name, "buildable_placed", 1 ); -} - -placed_craftable_vo_timer() -{ - self endon( "disconnect" ); - self.craftable_timer = 1; - wait 60; - self.craftable_timer = 0; -} - -craftable_pickedup_timer() -{ - self endon( "disconnect" ); - self.craftable_pickedup_timer = 1; - wait 60; - self.craftable_pickedup_timer = 0; -} - -track_planted_craftables_pickedup( equipment ) -{ - if ( !isdefined( equipment ) ) - return; - - if ( equipment == "equip_turbine_zm" || equipment == "equip_turret_zm" || equipment == "equip_electrictrap_zm" || equipment == "riotshield_zm" || equipment == "alcatraz_shield_zm" || equipment == "tomb_shield_zm" ) - { - self maps\mp\zombies\_zm_stats::increment_client_stat( "planted_buildables_pickedup", 0 ); - self maps\mp\zombies\_zm_stats::increment_player_stat( "planted_buildables_pickedup" ); - } - - if ( !( isdefined( self.craftable_pickedup_timer ) && self.craftable_pickedup_timer ) ) - { - self say_pickup_craftable_vo( equipment, 1 ); - self thread craftable_pickedup_timer(); - } -} - -track_placed_craftables( craftable_name ) -{ - if ( !isdefined( craftable_name ) ) - return; - - self add_map_craftable_stat( craftable_name, "buildable_placed", 1 ); - vo_name = undefined; - - if ( craftable_name == level.riotshield_name ) - vo_name = "craft_plc_shield"; - - if ( !isdefined( vo_name ) ) - return; - - self thread do_player_general_vox( "general", vo_name ); -} - -add_map_craftable_stat( piece_name, stat_name, value ) -{ - if ( !isdefined( piece_name ) || piece_name == "sq_common" || piece_name == "keys_zm" ) - return; - - if ( isdefined( level.zm_disable_recording_stats ) && level.zm_disable_recording_stats || isdefined( level.zm_disable_recording_buildable_stats ) && level.zm_disable_recording_buildable_stats ) - return; - - self adddstat( "buildables", piece_name, stat_name, value ); -} - -say_pickup_craftable_vo( craftable_name, world ) -{ - -} - -get_craftable_vo_name( craftable_name ) -{ - -} - -get_craftable_stat_name( craftable_name ) -{ - if ( isdefined( craftable_name ) ) - { - switch ( craftable_name ) - { - case "equip_riotshield_zm": - return "riotshield_zm"; - case "equip_turbine_zm": - return "turbine"; - case "equip_turret_zm": - return "turret"; - case "equip_electrictrap_zm": - return "electric_trap"; - case "equip_springpad_zm": - return "springpad_zm"; - case "equip_slipgun_zm": - return "slipgun_zm"; - } - } - - return craftable_name; -} - -get_craftable_model( str_craftable ) -{ - foreach ( uts_craftable in level.a_uts_craftables ) - { - if ( uts_craftable.craftablestub.name == str_craftable ) - { - if ( isdefined( uts_craftable.model ) ) - return uts_craftable.model; - - break; - } - } - - return undefined; -} - -get_craftable_piece( str_craftable, str_piece ) -{ - foreach ( uts_craftable in level.a_uts_craftables ) - { - if ( uts_craftable.craftablestub.name == str_craftable ) - { - foreach ( piecespawn in uts_craftable.craftablespawn.a_piecespawns ) - { - if ( piecespawn.piecename == str_piece ) - return piecespawn; - } - - break; - } - } - - return undefined; -} - -player_get_craftable_piece( str_craftable, str_piece ) -{ - piecespawn = get_craftable_piece( str_craftable, str_piece ); - - if ( isdefined( piecespawn ) ) - self player_take_piece( piecespawn ); -} - -get_craftable_piece_model( str_craftable, str_piece ) -{ - foreach ( uts_craftable in level.a_uts_craftables ) - { - if ( uts_craftable.craftablestub.name == str_craftable ) - { - foreach ( piecespawn in uts_craftable.craftablespawn.a_piecespawns ) - { - if ( piecespawn.piecename == str_piece && isdefined( piecespawn.model ) ) - return piecespawn.model; - } - - break; - } - } - - return undefined; -} diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_melee_weapon.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_melee_weapon.gsc deleted file mode 100644 index adfca7a..0000000 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_melee_weapon.gsc +++ /dev/null @@ -1,580 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\zombies\_zm_utility; -#include maps\mp\zombies\_zm_weapons; -#include maps\mp\zombies\_zm_laststand; -#include maps\mp\zombies\_zm_pers_upgrades_functions; -#include maps\mp\zombies\_zm_score; -#include maps\mp\zombies\_zm_audio; - -init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) -{ - precacheitem( weapon_name ); - precacheitem( flourish_weapon_name ); - add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); - melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" ); - - for ( i = 0; i < melee_weapon_triggers.size; i++ ) - { - knife_model = getent( melee_weapon_triggers[i].target, "targetname" ); - - if ( isdefined( knife_model ) ) - knife_model hide(); - - melee_weapon_triggers[i] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); - - if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) - { - melee_weapon_triggers[i] sethintstring( hint_string, cost ); - - if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) - { - cursor_hint = "HINT_WEAPON"; - cursor_hint_weapon = weapon_name; - melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); - } - else - melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); - } - else - { - weapon_display = get_weapon_display_name( weapon_name ); - hint_string = &"ZOMBIE_WEAPONCOSTONLY"; - melee_weapon_triggers[i] sethintstring( hint_string, weapon_display, cost ); - - if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) - { - cursor_hint = "HINT_WEAPON"; - cursor_hint_weapon = weapon_name; - melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); - } - else - melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); - } - - melee_weapon_triggers[i] usetriggerrequirelookat(); - } - - melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" ); - - for ( i = 0; i < melee_weapon_structs.size; i++ ) - prepare_stub( melee_weapon_structs[i].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); - - register_melee_weapon_for_level( weapon_name ); - - if ( !isdefined( level.ballistic_weapon_name ) ) - level.ballistic_weapon_name = []; - - level.ballistic_weapon_name[weapon_name] = ballistic_weapon_name; - - if ( !isdefined( level.ballistic_upgraded_weapon_name ) ) - level.ballistic_upgraded_weapon_name = []; - - level.ballistic_upgraded_weapon_name[weapon_name] = ballistic_upgraded_weapon_name; -/# - if ( !isdefined( level.zombie_weapons[weapon_name] ) ) - { - if ( isdefined( level.devgui_add_weapon ) ) - [[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost ); - } -#/ -} - -prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) -{ - if ( isdefined( stub ) ) - { - if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) - { - stub.hint_string = hint_string; - - if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) - { - stub.cursor_hint = "HINT_WEAPON"; - stub.cursor_hint_weapon = weapon_name; - } - else - { - stub.cursor_hint = "HINT_NOICON"; - stub.cursor_hint_weapon = undefined; - } - } - else - { - stub.hint_parm1 = get_weapon_display_name( weapon_name ); - stub.hint_parm2 = cost; - stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; - - if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) - { - stub.cursor_hint = "HINT_WEAPON"; - stub.cursor_hint_weapon = weapon_name; - } - else - { - stub.cursor_hint = "HINT_NOICON"; - stub.cursor_hint_weapon = undefined; - } - } - - stub.cost = cost; - stub.weapon_name = weapon_name; - stub.vo_dialog_id = vo_dialog_id; - stub.flourish_weapon_name = flourish_weapon_name; - stub.ballistic_weapon_name = ballistic_weapon_name; - stub.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; - stub.trigger_func = ::melee_weapon_think; - stub.flourish_fn = flourish_fn; - } -} - -add_stub( stub, weapon_name ) -{ - melee_weapon = undefined; - - for ( i = 0; i < level._melee_weapons.size; i++ ) - { - if ( level._melee_weapons[i].weapon_name == weapon_name ) - { - melee_weapon = level._melee_weapons[i]; - break; - } - } - - if ( isdefined( stub ) && isdefined( melee_weapon ) ) - prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn ); -} - -give_melee_weapon_by_name( weapon_name ) -{ - melee_weapon = undefined; - - for ( i = 0; i < level._melee_weapons.size; i++ ) - { - if ( level._melee_weapons[i].weapon_name == weapon_name ) - { - melee_weapon = level._melee_weapons[i]; - break; - } - } - - if ( isdefined( melee_weapon ) ) - self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined ); -} - -add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) -{ - melee_weapon = spawnstruct(); - melee_weapon.weapon_name = weapon_name; - melee_weapon.flourish_weapon_name = flourish_weapon_name; - melee_weapon.ballistic_weapon_name = ballistic_weapon_name; - melee_weapon.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; - melee_weapon.cost = cost; - melee_weapon.wallbuy_targetname = wallbuy_targetname; - melee_weapon.hint_string = hint_string; - melee_weapon.vo_dialog_id = vo_dialog_id; - melee_weapon.flourish_fn = flourish_fn; - - if ( !isdefined( level._melee_weapons ) ) - level._melee_weapons = []; - - level._melee_weapons[level._melee_weapons.size] = melee_weapon; -} - -player_can_see_weapon_prompt( weapon_name ) -{ - if ( is_true( level._allow_melee_weapon_switching ) ) - return true; - - if ( isdefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) ) - return false; - - return true; -} - -spectator_respawn_all() -{ - for ( i = 0; i < level._melee_weapons.size; i++ ) - self spectator_respawn( level._melee_weapons[i].wallbuy_targetname, level._melee_weapons[i].weapon_name ); -} - -spectator_respawn( wallbuy_targetname, weapon_name ) -{ - melee_triggers = getentarray( wallbuy_targetname, "targetname" ); - players = get_players(); - - for ( i = 0; i < melee_triggers.size; i++ ) - { - melee_triggers[i] setvisibletoall(); - - if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) - { - for ( j = 0; j < players.size; j++ ) - { - if ( !players[j] player_can_see_weapon_prompt( weapon_name ) ) - melee_triggers[i] setinvisibletoplayer( players[j] ); - } - } - } -} - -trigger_hide_all() -{ - for ( i = 0; i < level._melee_weapons.size; i++ ) - self trigger_hide( level._melee_weapons[i].wallbuy_targetname ); -} - -trigger_hide( wallbuy_targetname ) -{ - melee_triggers = getentarray( wallbuy_targetname, "targetname" ); - - for ( i = 0; i < melee_triggers.size; i++ ) - melee_triggers[i] setinvisibletoplayer( self ); -} - -has_any_ballistic_knife() -{ - if ( self hasweapon( "knife_ballistic_zm" ) ) - return true; - - if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) - return true; - - for ( i = 0; i < level._melee_weapons.size; i++ ) - { - if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) ) - return true; - - if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) - return true; - } - - return false; -} - -has_upgraded_ballistic_knife() -{ - if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) - return true; - - for ( i = 0; i < level._melee_weapons.size; i++ ) - { - if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) - return true; - } - - return false; -} - -give_ballistic_knife( weapon_string, upgraded ) -{ - current_melee_weapon = self get_player_melee_weapon(); - - if ( isdefined( current_melee_weapon ) ) - { - if ( upgraded && isdefined( level.ballistic_upgraded_weapon_name ) && isdefined( level.ballistic_upgraded_weapon_name[current_melee_weapon] ) ) - weapon_string = level.ballistic_upgraded_weapon_name[current_melee_weapon]; - - if ( !upgraded && isdefined( level.ballistic_weapon_name ) && isdefined( level.ballistic_weapon_name[current_melee_weapon] ) ) - weapon_string = level.ballistic_weapon_name[current_melee_weapon]; - } - - return weapon_string; -} - -change_melee_weapon( weapon_name, current_weapon ) -{ - current_melee_weapon = self get_player_melee_weapon(); - - if ( isdefined( current_melee_weapon ) && current_melee_weapon != weapon_name ) - { - self takeweapon( current_melee_weapon ); - unacquire_weapon_toggle( current_melee_weapon ); - } - - self set_player_melee_weapon( weapon_name ); - had_ballistic = 0; - had_ballistic_upgraded = 0; - ballistic_was_primary = 0; - primaryweapons = self getweaponslistprimaries(); - - for ( i = 0; i < primaryweapons.size; i++ ) - { - primary_weapon = primaryweapons[i]; - - if ( issubstr( primary_weapon, "knife_ballistic_" ) ) - { - had_ballistic = 1; - - if ( primary_weapon == current_weapon ) - ballistic_was_primary = 1; - - self notify( "zmb_lost_knife" ); - self takeweapon( primary_weapon ); - unacquire_weapon_toggle( primary_weapon ); - - if ( issubstr( primary_weapon, "upgraded" ) ) - had_ballistic_upgraded = 1; - } - } - - if ( had_ballistic ) - { - if ( had_ballistic_upgraded ) - { - new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name]; - - if ( ballistic_was_primary ) - current_weapon = new_ballistic; - - self giveweapon( new_ballistic, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) ); - } - else - { - new_ballistic = level.ballistic_weapon_name[weapon_name]; - - if ( ballistic_was_primary ) - current_weapon = new_ballistic; - - self giveweapon( new_ballistic, 0 ); - } - } - - return current_weapon; -} - -melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) -{ - self.first_time_triggered = 0; - - if ( isdefined( self.stub ) ) - { - self endon( "kill_trigger" ); - - if ( isdefined( self.stub.first_time_triggered ) ) - self.first_time_triggered = self.stub.first_time_triggered; - - weapon_name = self.stub.weapon_name; - cost = self.stub.cost; - flourish_fn = self.stub.flourish_fn; - vo_dialog_id = self.stub.vo_dialog_id; - flourish_weapon_name = self.stub.flourish_weapon_name; - ballistic_weapon_name = self.stub.ballistic_weapon_name; - ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name; - players = getplayers(); - - if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) - { - for ( i = 0; i < players.size; i++ ) - { - if ( !players[i] player_can_see_weapon_prompt( weapon_name ) ) - self setinvisibletoplayer( players[i] ); - } - } - } - - for (;;) - { - self waittill( "trigger", player ); - - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0.5 ); - continue; - } - - if ( player in_revive_trigger() ) - { - wait 0.1; - continue; - } - - if ( player isthrowinggrenade() ) - { - wait 0.1; - continue; - } - - if ( player.is_drinking > 0 ) - { - wait 0.1; - continue; - } - - if ( player hasweapon( weapon_name ) || player has_powerup_weapon() ) - { - wait 0.1; - continue; - } - - if ( player isswitchingweapons() ) - { - wait 0.1; - continue; - } - - current_weapon = player getcurrentweapon(); - - if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) || player has_powerup_weapon() ) - { - wait 0.1; - continue; - } - - if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission ) - { - wait 0.1; - continue; - } - - player_has_weapon = player hasweapon( weapon_name ); - - if ( !player_has_weapon ) - { - cost = self.stub.cost; - - if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) - cost = int( cost / 2 ); - - if ( player.score >= cost ) - { - if ( self.first_time_triggered == 0 ) - { - model = getent( self.target, "targetname" ); - - if ( isdefined( model ) ) - model thread melee_weapon_show( player ); - else if ( isdefined( self.clientfieldname ) ) - level setclientfield( self.clientfieldname, 1 ); - - self.first_time_triggered = 1; - - if ( isdefined( self.stub ) ) - self.stub.first_time_triggered = 1; - } - - player maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 ); - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" ); - player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self ); - } - else - { - play_sound_on_ent( "no_purchase" ); - player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 ); - } - - continue; - } - - if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) - self setinvisibletoplayer( player ); - } -} - -melee_weapon_show( player ) -{ - player_angles = vectortoangles( player.origin - self.origin ); - player_yaw = player_angles[1]; - weapon_yaw = self.angles[1]; - yaw_diff = angleclamp180( player_yaw - weapon_yaw ); - - if ( yaw_diff > 0 ) - yaw = weapon_yaw - 90; - else - yaw = weapon_yaw + 90; - - self.og_origin = self.origin; - self.origin += anglestoforward( ( 0, yaw, 0 ) ) * 8; - wait 0.05; - self show(); - play_sound_at_pos( "weapon_show", self.origin, self ); - time = 1; - self moveto( self.og_origin, time ); -} - -give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger ) -{ - if ( isdefined( flourish_fn ) ) - self thread [[ flourish_fn ]](); - - gun = self do_melee_weapon_flourish_begin( flourish_weapon_name ); - self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id ); - self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); - self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); - - if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) - return; - - if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) - { - if ( isdefined( trigger ) ) - trigger setinvisibletoplayer( self ); - - self trigger_hide_all(); - } -} - -do_melee_weapon_flourish_begin( flourish_weapon_name ) -{ - self increment_is_drinking(); - self disable_player_move_states( 1 ); - gun = self getcurrentweapon(); - weapon = flourish_weapon_name; - self giveweapon( weapon ); - self switchtoweapon( weapon ); - return gun; -} - -do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) -{ -/# - assert( !is_zombie_perk_bottle( gun ) ); -#/ -/# - assert( gun != level.revive_tool ); -#/ - self enable_player_move_states(); - weapon = flourish_weapon_name; - - if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) - { - self takeweapon( weapon ); - self.lastactiveweapon = "none"; - return; - } - - self takeweapon( weapon ); - self giveweapon( weapon_name ); - gun = change_melee_weapon( weapon_name, gun ); - - if ( self hasweapon( "knife_zm" ) ) - self takeweapon( "knife_zm" ); - - if ( self is_multiple_drinking() ) - { - self decrement_is_drinking(); - return; - } - else if ( gun == "knife_zm" ) - { - self switchtoweapon( weapon_name ); - self decrement_is_drinking(); - return; - } - else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) - self switchtoweapon( gun ); - else - { - primaryweapons = self getweaponslistprimaries(); - - if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) - self switchtoweapon( primaryweapons[0] ); - } - - self waittill( "weapon_change_complete" ); - - if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) ) - self decrement_is_drinking(); -} diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/readme.md b/Zombie Maps/Alcatraz/zm_prison_patch/readme.md deleted file mode 100644 index 1373506..0000000 --- a/Zombie Maps/Alcatraz/zm_prison_patch/readme.md +++ /dev/null @@ -1,70 +0,0 @@ -### The following scripts compile and run successfully with no known errors: -``` -zm_prison_patch/maps/mp/zm_alcatraz_classic.gsc -zm_prison_patch/maps/mp/zm_prison.gsc - -zm_prison_patch/maps/mp/gametypes_zm/zstandard.gsc - -zm_prison_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc -``` -### The following scripts compile and run successfully with minor errors: -``` -``` -### The following scripts compile and run successfully with major errors: -``` -``` -### The following scripts compile and run serverside but clients cannot join due to exe_client_field_mismatch -``` -``` -### The following scripts compile but cause a minidump or other severe error: -``` -zm_prison_patch/maps/mp/zm_alcatraz_weap_quest.gsc -``` -### The following scripts have been checked, but they have not been tested yet -``` -zm_prison_patch/maps/mp/_sticky_grenade.gsc -zm_prison_patch/maps/mp/zm_alcatraz_gamemodes.gsc -zm_prison_patch/maps/mp/zm_alcatraz_grief_cellblock.gsc -zm_prison_patch/maps/mp/zm_alcatraz_standard.gsc -zm_prison_patch/maps/mp/zombies/_zm_game_module_grief.gsc -zm_prison_patch/maps/mp/zombies/_zm_game_module_meat.gsc -zm_prison_patch/maps/mp/zombies/_zm_game_module_utility.gsc -zm_prison_patch/maps/mp/zombies/_zm_weap_blundersplat.gsc -zm_prison_patch/maps/mp/zombies/_zm_weap_tomahawk.gsc -``` -### The following scripts are not checked yet, uploaded to setup a baseline: -``` -zm_prison_patch/maps/mp/zm_alcatraz_amb.gsc -zm_prison_patch/maps/mp/zm_alcatraz_craftables.gsc -zm_prison_patch/maps/mp/zm_alcatraz_distance_tracking.gsc -zm_prison_patch/maps/mp/zm_alcatraz_sq.gsc -zm_prison_patch/maps/mp/zm_alcatraz_sq_nixie.gsc -zm_prison_patch/maps/mp/zm_alcatraz_sq_vo.gsc -zm_prison_patch/maps/mp/zm_alcatraz_traps.gsc -zm_prison_patch/maps/mp/zm_alcatraz_travel.gsc -zm_prison_patch/maps/mp/zm_alcatraz_utility.gsc -zm_prison_patch/maps/mp/zm_prison_achievement.gsc -zm_prison_patch/maps/mp/zm_prison_ffotd.gsc -zm_prison_patch/maps/mp/zm_prison_fx.gsc -zm_prison_patch/maps/mp/zm_prison_spoon.gsc -zm_prison_patch/maps/mp/zm_prison_sq_bg.gsc -zm_prison_patch/maps/mp/zm_prison_sq_fc.gsc -zm_prison_patch/maps/mp/zm_prison_sq_final.gsc -zm_prison_patch/maps/mp/zm_prison_sq_wth.gsc - -zm_prison_patch/maps/mp/gametypes_zm/zgrief.gsc -zm_prison_patch/maps/mp/gametypes_zm/zmeat.gsc - -zm_prison_patch/maps/mp/zombies/_zm_afterlife.gsc -zm_prison_patch/maps/mp/zombies/_zm_ai_brutus.gsc -zm_prison_patch/maps/mp/zombies/_zm_craftables.gsc -zm_prison_patch/maps/mp/zombies/_zm_game_module_meat_utility.gsc -zm_prison_patch/maps/mp/zombies/_zm_magicbox_prison.gsc -zm_prison_patch/maps/mp/zombies/_zm_melee_weapon.gsc -zm_prison_patch/maps/mp/zombies/_zm_riotshield_prison.gsc -zm_prison_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc -zm_prison_patch/maps/mp/zombies/_zm_weap_claymore.gsc -zm_prison_patch/maps/mp/zombies/_zm_weap_riotshield_prison.gsc -``` - - diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_01_char_01.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_01_char_01.gsc deleted file mode 100644 index 543f5a2..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_01_char_01.gsc +++ /dev/null @@ -1,384 +0,0 @@ - -#using_animtree( "zm_buried_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_slipslide_collapse; - dummy_anim_ref = %ai_zombie_walk_slipslide; - dummy_anim_ref = %ai_zombie_walk_slipslide_a; - dummy_anim_ref = %ai_zombie_run_slipslide; - dummy_anim_ref = %ai_zombie_run_slipslide_a; - dummy_anim_ref = %ai_zombie_sprint_slipslide; - dummy_anim_ref = %ai_zombie_sprint_slipslide_a; - dummy_anim_ref = %ai_zombie_stand_slipslide_recover; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_240; - dummy_anim_ref = %ai_zombie_crawl_jump_down_240; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_48; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_buried_basic.asd"; - self.animtree = "zm_buried_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_zombie_buried_civilian1::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_buried_basic" ); - character/c_zom_zombie_buried_civilian1::precache(); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_01_char_02.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_01_char_02.gsc deleted file mode 100644 index 6b54a55..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_01_char_02.gsc +++ /dev/null @@ -1,399 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_buried_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_slipslide_collapse; - dummy_anim_ref = %ai_zombie_walk_slipslide; - dummy_anim_ref = %ai_zombie_walk_slipslide_a; - dummy_anim_ref = %ai_zombie_run_slipslide; - dummy_anim_ref = %ai_zombie_run_slipslide_a; - dummy_anim_ref = %ai_zombie_sprint_slipslide; - dummy_anim_ref = %ai_zombie_sprint_slipslide_a; - dummy_anim_ref = %ai_zombie_stand_slipslide_recover; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_240; - dummy_anim_ref = %ai_zombie_crawl_jump_down_240; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_48; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_buried_basic.asd"; - self.animtree = "zm_buried_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 3 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie_buried_civilian2::main(); - break; - case 1: - character/c_zom_zombie_buried_civilian2_nohat::main(); - break; - case 2: - character/c_zom_zombie_buried_civilian2_nohat::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_buried_basic" ); - character/c_zom_zombie_buried_civilian2::precache(); - character/c_zom_zombie_buried_civilian2_nohat::precache(); - character/c_zom_zombie_buried_civilian2_nohat::precache(); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_01_char_03.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_01_char_03.gsc deleted file mode 100644 index 270be7e..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_01_char_03.gsc +++ /dev/null @@ -1,399 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_buried_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_slipslide_collapse; - dummy_anim_ref = %ai_zombie_walk_slipslide; - dummy_anim_ref = %ai_zombie_walk_slipslide_a; - dummy_anim_ref = %ai_zombie_run_slipslide; - dummy_anim_ref = %ai_zombie_run_slipslide_a; - dummy_anim_ref = %ai_zombie_sprint_slipslide; - dummy_anim_ref = %ai_zombie_sprint_slipslide_a; - dummy_anim_ref = %ai_zombie_stand_slipslide_recover; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_240; - dummy_anim_ref = %ai_zombie_crawl_jump_down_240; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_48; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_buried_basic.asd"; - self.animtree = "zm_buried_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 3 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie_buried_civilian3::main(); - break; - case 1: - character/c_zom_zombie_buried_civilian3_nohat::main(); - break; - case 2: - character/c_zom_zombie_buried_civilian3_nohat::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_buried_basic" ); - character/c_zom_zombie_buried_civilian3::precache(); - character/c_zom_zombie_buried_civilian3_nohat::precache(); - character/c_zom_zombie_buried_civilian3_nohat::precache(); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_01_char_04.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_01_char_04.gsc deleted file mode 100644 index b0e3058..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_01_char_04.gsc +++ /dev/null @@ -1,399 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_buried_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_slipslide_collapse; - dummy_anim_ref = %ai_zombie_walk_slipslide; - dummy_anim_ref = %ai_zombie_walk_slipslide_a; - dummy_anim_ref = %ai_zombie_run_slipslide; - dummy_anim_ref = %ai_zombie_run_slipslide_a; - dummy_anim_ref = %ai_zombie_sprint_slipslide; - dummy_anim_ref = %ai_zombie_sprint_slipslide_a; - dummy_anim_ref = %ai_zombie_stand_slipslide_recover; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_240; - dummy_anim_ref = %ai_zombie_crawl_jump_down_240; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_48; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_buried_basic.asd"; - self.animtree = "zm_buried_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 3 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie_buried_civilian4::main(); - break; - case 1: - character/c_zom_zombie_buried_civilian4_nohat::main(); - break; - case 2: - character/c_zom_zombie_buried_civilian4_nohat::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_buried_basic" ); - character/c_zom_zombie_buried_civilian4::precache(); - character/c_zom_zombie_buried_civilian4_nohat::precache(); - character/c_zom_zombie_buried_civilian4_nohat::precache(); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_01_char_05.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_01_char_05.gsc deleted file mode 100644 index deedb27..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_01_char_05.gsc +++ /dev/null @@ -1,403 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_buried_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_slipslide_collapse; - dummy_anim_ref = %ai_zombie_walk_slipslide; - dummy_anim_ref = %ai_zombie_walk_slipslide_a; - dummy_anim_ref = %ai_zombie_run_slipslide; - dummy_anim_ref = %ai_zombie_run_slipslide_a; - dummy_anim_ref = %ai_zombie_sprint_slipslide; - dummy_anim_ref = %ai_zombie_sprint_slipslide_a; - dummy_anim_ref = %ai_zombie_stand_slipslide_recover; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_240; - dummy_anim_ref = %ai_zombie_crawl_jump_down_240; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_48; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_buried_basic.asd"; - self.animtree = "zm_buried_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 4 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie_buried_civilian5::main(); - break; - case 1: - character/c_zom_zombie_buried_civilian5_nohat::main(); - break; - case 2: - character/c_zom_zombie_buried_civilian5_nohat::main(); - break; - case 3: - character/c_zom_zombie_buried_civilian5_nohat::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_buried_basic" ); - character/c_zom_zombie_buried_civilian5::precache(); - character/c_zom_zombie_buried_civilian5_nohat::precache(); - character/c_zom_zombie_buried_civilian5_nohat::precache(); - character/c_zom_zombie_buried_civilian5_nohat::precache(); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_02_char_01.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_02_char_01.gsc deleted file mode 100644 index cf488c0..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_02_char_01.gsc +++ /dev/null @@ -1,384 +0,0 @@ - -#using_animtree( "zm_buried_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_slipslide_collapse; - dummy_anim_ref = %ai_zombie_walk_slipslide; - dummy_anim_ref = %ai_zombie_walk_slipslide_a; - dummy_anim_ref = %ai_zombie_run_slipslide; - dummy_anim_ref = %ai_zombie_run_slipslide_a; - dummy_anim_ref = %ai_zombie_sprint_slipslide; - dummy_anim_ref = %ai_zombie_sprint_slipslide_a; - dummy_anim_ref = %ai_zombie_stand_slipslide_recover; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_240; - dummy_anim_ref = %ai_zombie_crawl_jump_down_240; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_48; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_buried_basic.asd"; - self.animtree = "zm_buried_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_zombie_buried_miner1::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_buried_basic" ); - character/c_zom_zombie_buried_miner1::precache(); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_02_char_02.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_02_char_02.gsc deleted file mode 100644 index f08837e..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_02_char_02.gsc +++ /dev/null @@ -1,399 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_buried_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_slipslide_collapse; - dummy_anim_ref = %ai_zombie_walk_slipslide; - dummy_anim_ref = %ai_zombie_walk_slipslide_a; - dummy_anim_ref = %ai_zombie_run_slipslide; - dummy_anim_ref = %ai_zombie_run_slipslide_a; - dummy_anim_ref = %ai_zombie_sprint_slipslide; - dummy_anim_ref = %ai_zombie_sprint_slipslide_a; - dummy_anim_ref = %ai_zombie_stand_slipslide_recover; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_240; - dummy_anim_ref = %ai_zombie_crawl_jump_down_240; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_48; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_buried_basic.asd"; - self.animtree = "zm_buried_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 3 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie_buried_miner2::main(); - break; - case 1: - character/c_zom_zombie_buried_miner2_nohat::main(); - break; - case 2: - character/c_zom_zombie_buried_miner2_nohat::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_buried_basic" ); - character/c_zom_zombie_buried_miner2::precache(); - character/c_zom_zombie_buried_miner2_nohat::precache(); - character/c_zom_zombie_buried_miner2_nohat::precache(); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_02_char_03.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_02_char_03.gsc deleted file mode 100644 index 99000ab..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_02_char_03.gsc +++ /dev/null @@ -1,399 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_buried_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_slipslide_collapse; - dummy_anim_ref = %ai_zombie_walk_slipslide; - dummy_anim_ref = %ai_zombie_walk_slipslide_a; - dummy_anim_ref = %ai_zombie_run_slipslide; - dummy_anim_ref = %ai_zombie_run_slipslide_a; - dummy_anim_ref = %ai_zombie_sprint_slipslide; - dummy_anim_ref = %ai_zombie_sprint_slipslide_a; - dummy_anim_ref = %ai_zombie_stand_slipslide_recover; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_240; - dummy_anim_ref = %ai_zombie_crawl_jump_down_240; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_48; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_buried_basic.asd"; - self.animtree = "zm_buried_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 3 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie_buried_miner3::main(); - break; - case 1: - character/c_zom_zombie_buried_miner3_nohat::main(); - break; - case 2: - character/c_zom_zombie_buried_miner3_nohat::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_buried_basic" ); - character/c_zom_zombie_buried_miner3::precache(); - character/c_zom_zombie_buried_miner3_nohat::precache(); - character/c_zom_zombie_buried_miner3_nohat::precache(); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_03.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_03.gsc deleted file mode 100644 index caf0454..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_basic_03.gsc +++ /dev/null @@ -1,399 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_buried_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_slipslide_collapse; - dummy_anim_ref = %ai_zombie_walk_slipslide; - dummy_anim_ref = %ai_zombie_walk_slipslide_a; - dummy_anim_ref = %ai_zombie_run_slipslide; - dummy_anim_ref = %ai_zombie_run_slipslide_a; - dummy_anim_ref = %ai_zombie_sprint_slipslide; - dummy_anim_ref = %ai_zombie_sprint_slipslide_a; - dummy_anim_ref = %ai_zombie_stand_slipslide_recover; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_240; - dummy_anim_ref = %ai_zombie_crawl_jump_down_240; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_48; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_buried_basic.asd"; - self.animtree = "zm_buried_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 3 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie_buried_saloongirl1::main(); - break; - case 1: - character/c_zom_zombie_buried_saloongirl2::main(); - break; - case 2: - character/c_zom_zombie_buried_saloongirl3::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_buried_basic" ); - character/c_zom_zombie_buried_saloongirl1::precache(); - character/c_zom_zombie_buried_saloongirl2::precache(); - character/c_zom_zombie_buried_saloongirl3::precache(); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_ghost_female.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_ghost_female.gsc deleted file mode 100644 index 6564d5b..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_ghost_female.gsc +++ /dev/null @@ -1,83 +0,0 @@ - -#using_animtree( "zm_buried_ghost" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_ghost_idle; - dummy_anim_ref = %ai_zombie_ghost_supersprint; - dummy_anim_ref = %ai_zombie_ghost_walk; - dummy_anim_ref = %ai_zombie_ghost_melee; - dummy_anim_ref = %ai_zombie_ghost_pointdrain; - dummy_anim_ref = %ai_zombie_ghost_float_death; - dummy_anim_ref = %ai_zombie_ghost_float_death_b; - dummy_anim_ref = %ai_zombie_ghost_spawn; - dummy_anim_ref = %ai_zombie_ghost_ground_pain; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_ghost_jump_across_120; - dummy_anim_ref = %ai_zombie_ghost_jump_down_48; - dummy_anim_ref = %ai_zombie_ghost_jump_down_72; - dummy_anim_ref = %ai_zombie_ghost_jump_down_96; - dummy_anim_ref = %ai_zombie_ghost_jump_down_127; - dummy_anim_ref = %ai_zombie_ghost_jump_down_154; - dummy_anim_ref = %ai_zombie_ghost_jump_down_176; - dummy_anim_ref = %ai_zombie_ghost_jump_down_190; - dummy_anim_ref = %ai_zombie_ghost_jump_down_222; - dummy_anim_ref = %ai_zombie_ghost_jump_down_240; - dummy_anim_ref = %ai_zombie_ghost_jump_up_72; - dummy_anim_ref = %ai_zombie_ghost_jump_up_96; - dummy_anim_ref = %ai_zombie_ghost_jump_up_127; - dummy_anim_ref = %ai_zombie_ghost_jump_up_154; - dummy_anim_ref = %ai_zombie_ghost_jump_up_176; - dummy_anim_ref = %ai_zombie_ghost_jump_up_190; - dummy_anim_ref = %ai_zombie_ghost_jump_up_222; - dummy_anim_ref = %ai_zombie_ghost_jump_up_240; - dummy_anim_ref = %ai_zombie_ghost_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_ghost_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_ghost_jump_up_48; - dummy_anim_ref = %ai_zombie_ghost_playing_piano; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_buried_ghost.asd"; - self.animtree = "zm_buried_ghost.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 70; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = "fly_step_ghost"; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_zombie_buried_ghost_woman::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_buried_ghost" ); - character/c_zom_zombie_buried_ghost_woman::precache(); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_sloth.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_sloth.gsc deleted file mode 100644 index 7ea5083..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/aitype/zm_buried_sloth.gsc +++ /dev/null @@ -1,175 +0,0 @@ - -#using_animtree( "zm_buried_sloth" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_sloth_idle_cower; - dummy_anim_ref = %ai_zombie_sloth_idle_cower_jumpback; - dummy_anim_ref = %ai_zombie_sloth_idle_jail; - dummy_anim_ref = %ai_zombie_sloth_idle_jail_2_cower; - dummy_anim_ref = %ai_zombie_sloth_idle_jail_2_cower_jumpback; - dummy_anim_ref = %ai_zombie_sloth_run; - dummy_anim_ref = %ai_zombie_sloth_run_berserk; - dummy_anim_ref = %ai_zombie_sloth_run_hunched; - dummy_anim_ref = %ai_zombie_sloth_run_scared; - dummy_anim_ref = %ai_zombie_sloth_pain; - dummy_anim_ref = %ai_zombie_sloth_run_wounded; - dummy_anim_ref = %ai_zombie_sloth_run_into_jail_2_idle_jail; - dummy_anim_ref = %ai_zombie_sloth_run_into_jail_2_cower; - dummy_anim_ref = %ai_zombie_sloth_cower_2_close_door; - dummy_anim_ref = %ai_zombie_sloth_door_close; - dummy_anim_ref = %ai_zombie_sloth_door_open; - dummy_anim_ref = %ai_zombie_sloth_walk; - dummy_anim_ref = %ai_zombie_sloth_walk_scared; - dummy_anim_ref = %ai_zombie_sloth_walk_hunched; - dummy_anim_ref = %ai_zombie_sloth_skip; - dummy_anim_ref = %ai_zombie_sloth_idle_protect; - dummy_anim_ref = %ai_zombie_sloth_run_protect; - dummy_anim_ref = %ai_zombie_sloth_frantic_run; - dummy_anim_ref = %ai_zombie_sloth_frantic_run_hunched; - dummy_anim_ref = %ai_zombie_sloth_gimme_booze; - dummy_anim_ref = %ai_zombie_sloth_gimme_candy; - dummy_anim_ref = %ai_zombie_sloth_drinkbooze; - dummy_anim_ref = %ai_zombie_sloth_drinkbooze_aim; - dummy_anim_ref = %ai_zombie_sloth_eatcandy; - dummy_anim_ref = %ai_zombie_sloth_hit_barrier; - dummy_anim_ref = %ai_zombie_sloth_hit_wall; - dummy_anim_ref = %ai_zombie_sloth_idle; - dummy_anim_ref = %ai_zombie_sloth_pickup_part; - dummy_anim_ref = %ai_zombie_sloth_make_buildable; - dummy_anim_ref = %ai_zombie_sloth_make_buildable_intro; - dummy_anim_ref = %ai_zombie_sloth_sling_equipment; - dummy_anim_ref = %ai_zombie_sloth_unsling_equipment; - dummy_anim_ref = %ai_zombie_sloth_drop_equipment; - dummy_anim_ref = %ai_zombie_sloth_idle_holding_equipment; - dummy_anim_ref = %ai_zombie_sloth_kick_old_equipment; - dummy_anim_ref = %ai_zombie_sloth_pickup_equipment; - dummy_anim_ref = %ai_zombie_sloth_run_holding_equipment; - dummy_anim_ref = %ai_zombie_sloth_wallbuy_add; - dummy_anim_ref = %ai_zombie_sloth_wallbuy_remove; - dummy_anim_ref = %ai_zombie_sloth_place_magicbox; - dummy_anim_ref = %ai_zombie_sloth_pull_magicbox; - dummy_anim_ref = %ai_zombie_sloth_magicbox_point; - dummy_anim_ref = %ai_zombie_sloth_lock_magicbox; - dummy_anim_ref = %ai_zombie_sloth_sling_magicbox; - dummy_anim_ref = %ai_zombie_sloth_unsling_magicbox; - dummy_anim_ref = %ai_zombie_sloth_run_holding_magicbox; - dummy_anim_ref = %ai_zombie_sloth_cycle_magicbox; - dummy_anim_ref = %ai_zombie_sloth_cycle_powerup; - dummy_anim_ref = %ai_zombie_sloth_dance_before_vomit; - dummy_anim_ref = %ai_zombie_sloth_vomit; - dummy_anim_ref = %ai_zombie_sloth_smell_react; - dummy_anim_ref = %ai_zombie_sloth_death; - dummy_anim_ref = %ai_zombie_sloth_attack_v1; - dummy_anim_ref = %ai_zombie_sloth_attack_v2; - dummy_anim_ref = %ai_zombie_sloth_attack_v3; - dummy_anim_ref = %ai_zombie_sloth_attack_v4; - dummy_anim_ref = %ai_zombie_sloth_crawlerhold_walk; - dummy_anim_ref = %ai_zombie_sloth_crawlerhold_walk_hunched; - dummy_anim_ref = %ai_zombie_sloth_crawlerhold_idle; - dummy_anim_ref = %ai_zombie_sloth_crawlerhold_sling; - dummy_anim_ref = %ai_zombie_sloth_crawlerhold_unsling; - dummy_anim_ref = %ai_zombie_sloth_pickup_crawler; - dummy_anim_ref = %ai_zombie_sloth_putdown_crawler; - dummy_anim_ref = %ai_zombie_sloth_kill_crawler_stomp; - dummy_anim_ref = %ai_zombie_sloth_kill_crawler_suplex; - dummy_anim_ref = %ai_zombie_sloth_crawlerhold_idle_hunched; - dummy_anim_ref = %ai_zombie_sloth_crawlerhold_sling_hunched; - dummy_anim_ref = %ai_zombie_sloth_crawlerhold_unsling_hunched; - dummy_anim_ref = %ai_zombie_sloth_pickup_crawler_hunched; - dummy_anim_ref = %ai_zombie_sloth_putdown_crawler_hunched; - dummy_anim_ref = %ai_zombie_sloth_kill_crawler_stomp_hunched; - dummy_anim_ref = %ai_zombie_sloth_kill_crawler_suplex_hunched; - dummy_anim_ref = %ai_zombie_sloth_walk_turn_180; - dummy_anim_ref = %ai_zombie_sloth_walk_crawlerhold_turn_180; - dummy_anim_ref = %ai_zombie_sloth_walk_crawlerhold_hunched_turn_180; - dummy_anim_ref = %ai_zombie_sloth_walk_scare_turn_180; - dummy_anim_ref = %ai_zombie_sloth_walk_hunched_turn_180; - dummy_anim_ref = %ai_zombie_sloth_run_turn_180; - dummy_anim_ref = %ai_zombie_sloth_run_hunched_turn_180; - dummy_anim_ref = %ai_zombie_sloth_run_holding_equipment_turn_180; - dummy_anim_ref = %ai_zombie_sloth_run_holding_magicbox_turn_180; - dummy_anim_ref = %ai_zombie_sloth_run_wounded_turn_180; - dummy_anim_ref = %ai_zombie_sloth_run_protect_turn_180; - dummy_anim_ref = %ai_zombie_sloth_jump_up_96; - dummy_anim_ref = %ai_zombie_sloth_jump_across_120; - dummy_anim_ref = %ai_zombie_sloth_jump_down_48; - dummy_anim_ref = %ai_zombie_sloth_jump_down_48_bank; - dummy_anim_ref = %ai_zombie_sloth_jump_down_72; - dummy_anim_ref = %ai_zombie_sloth_jump_down_96; - dummy_anim_ref = %ai_zombie_sloth_jump_down_96_powerroom; - dummy_anim_ref = %ai_zombie_sloth_jump_down_127; - dummy_anim_ref = %ai_zombie_sloth_jump_down_127_bank_back; - dummy_anim_ref = %ai_zombie_sloth_jump_down_127_barncorner; - dummy_anim_ref = %ai_zombie_sloth_jump_down_127_candystore_alley; - dummy_anim_ref = %ai_zombie_sloth_jump_down_127_saloon_int; - dummy_anim_ref = %ai_zombie_sloth_jump_down_176; - dummy_anim_ref = %ai_zombie_sloth_jump_down_190; - dummy_anim_ref = %ai_zombie_sloth_jump_down_190_gunshop_ext; - dummy_anim_ref = %ai_zombie_sloth_jump_down_222; - dummy_anim_ref = %ai_zombie_sloth_jump_down_222_mineshaft_gunsmith; - dummy_anim_ref = %ai_zombie_sloth_jump_down_240; - dummy_anim_ref = %ai_zombie_sloth_jump_up_127; - dummy_anim_ref = %ai_zombie_sloth_jump_up_127_powerroom; - dummy_anim_ref = %ai_zombie_sloth_jump_up_154; - dummy_anim_ref = %ai_zombie_sloth_jump_up_154_bank_back; - dummy_anim_ref = %ai_zombie_sloth_jump_up_154_bankroof_hole; - dummy_anim_ref = %ai_zombie_sloth_jump_up_154_genstore_back; - dummy_anim_ref = %ai_zombie_sloth_jump_up_222; - dummy_anim_ref = %ai_zombie_sloth_jump_up_222_church; - dummy_anim_ref = %ai_zombie_sloth_jump_up_222_gunshop_ext; - dummy_anim_ref = %ai_zombie_sloth_jump_down_154_equip; - dummy_anim_ref = %ai_zombie_sloth_jump_down_176_equip; - dummy_anim_ref = %ai_zombie_sloth_jump_down_190_equip; - dummy_anim_ref = %ai_zombie_sloth_jump_down_190_gunshop_ext_equip; - dummy_anim_ref = %ai_zombie_sloth_jump_down_222_equip; - dummy_anim_ref = %ai_zombie_sloth_jump_down_222_mineshaft_gunsmith_equip; - dummy_anim_ref = %ai_zombie_sloth_jump_down_240_equip; - dummy_anim_ref = %ai_zombie_sloth_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_sloth_jump_up_48; - dummy_anim_ref = %ai_zombie_sloth_traverse_v1; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_buried_sloth.asd"; - self.animtree = "zm_buried_sloth.asd"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 70; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = "fly_step_sloth"; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_buried_sloth::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_buried_sloth" ); - character/c_zom_buried_sloth::precache(); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_buried_player_reporter_dam.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_buried_player_reporter_dam.gsc deleted file mode 100644 index 85f15ac..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_buried_player_reporter_dam.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_reporter_dam_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_reporter_dam_fb" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_transit_player_engineer.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_transit_player_engineer.gsc deleted file mode 100644 index b123803..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_transit_player_engineer.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_engineer_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_engineer_fb" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_transit_player_farmgirl.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_transit_player_farmgirl.gsc deleted file mode 100644 index 05c38e9..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_transit_player_farmgirl.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_farmgirl_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_farmgirl_fb" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_transit_player_oldman.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_transit_player_oldman.gsc deleted file mode 100644 index 5d5f2c5..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_transit_player_oldman.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_oldman_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_oldman_fb" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_buried_sloth.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_buried_sloth.gsc deleted file mode 100644 index da141bb..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_buried_sloth.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_buried_sloth_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_buried_sloth_fb" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian1.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian1.gsc deleted file mode 100644 index 6966939..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian1.gsc +++ /dev/null @@ -1,47 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_civilian_body1" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_civilian_hat1_als::main() ); - self attach( self.hatmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean"; - self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff"; - self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean"; - self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff"; - self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff"; - self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_civilian_body1" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_civilian_hat1_als::main() ); - precachemodel( "c_zom_zombie_buried_civilian_g_upclean" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff" ); - precachemodel( "c_zom_zombie_buried_civilian_g_larmoff" ); - precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); - precachemodel( "c_zom_zombie_buried_civilian_g_lowclean" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff" ); - precachemodel( "c_zom_zombie_buried_civilian_g_llegoff" ); - precachemodel( "c_zom_zombie_buried_civilian_g_legsoff" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian2.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian2.gsc deleted file mode 100644 index 722663b..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian2.gsc +++ /dev/null @@ -1,50 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_civilian_body2" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_zombie_buried_civilian_hats3"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean2"; - self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff2"; - self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff2"; - self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean2"; - self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff2"; - self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff2"; - self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff2"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; - self.gibspawn5 = "c_zom_zombie_buried_civilian_hats3"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_civilian_body2" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - precachemodel( "c_zom_zombie_buried_civilian_hats3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_upclean2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_larmoff2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); - precachemodel( "c_zom_zombie_buried_civilian_g_lowclean2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_llegoff2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_legsoff2" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_zombie_buried_civilian_hats3" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian2_nohat.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian2_nohat.gsc deleted file mode 100644 index 715a1c1..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian2_nohat.gsc +++ /dev/null @@ -1,47 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_civilian_body2_nohat" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_civilian_hat2_als::main() ); - self attach( self.hatmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean2"; - self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff2"; - self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff2"; - self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean2"; - self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff2"; - self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff2"; - self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff2"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_civilian_body2_nohat" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_civilian_hat2_als::main() ); - precachemodel( "c_zom_zombie_buried_civilian_g_upclean2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_larmoff2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); - precachemodel( "c_zom_zombie_buried_civilian_g_lowclean2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_llegoff2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_legsoff2" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian3.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian3.gsc deleted file mode 100644 index 283552f..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian3.gsc +++ /dev/null @@ -1,50 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_civilian_body3" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_zombie_buried_civilian_hats1"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean3"; - self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff3"; - self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff3"; - self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean3"; - self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff3"; - self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff3"; - self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff3"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; - self.gibspawn5 = "c_zom_zombie_buried_civilian_hats1"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_civilian_body3" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - precachemodel( "c_zom_zombie_buried_civilian_hats1" ); - precachemodel( "c_zom_zombie_buried_civilian_g_upclean3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_larmoff3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); - precachemodel( "c_zom_zombie_buried_civilian_g_lowclean3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_llegoff3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_legsoff3" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_zombie_buried_civilian_hats1" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian3_nohat.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian3_nohat.gsc deleted file mode 100644 index 16728ea..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian3_nohat.gsc +++ /dev/null @@ -1,47 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_civilian_body3_nohat" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_civilian_hat3_als::main() ); - self attach( self.hatmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean3"; - self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff3"; - self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff3"; - self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean3"; - self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff3"; - self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff3"; - self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff3"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_civilian_body3_nohat" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_civilian_hat3_als::main() ); - precachemodel( "c_zom_zombie_buried_civilian_g_upclean3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_larmoff3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); - precachemodel( "c_zom_zombie_buried_civilian_g_lowclean3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_llegoff3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_legsoff3" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian4.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian4.gsc deleted file mode 100644 index 423cec7..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian4.gsc +++ /dev/null @@ -1,50 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_civilian_body4" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_zombie_buried_civilian_hats4"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean4"; - self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff4"; - self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff4"; - self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean4"; - self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff4"; - self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff4"; - self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff4"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; - self.gibspawn5 = "c_zom_zombie_buried_civilian_hats4"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_civilian_body4" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - precachemodel( "c_zom_zombie_buried_civilian_hats4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_upclean4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_larmoff4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); - precachemodel( "c_zom_zombie_buried_civilian_g_lowclean4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_llegoff4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_legsoff4" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_zombie_buried_civilian_hats4" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian4_nohat.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian4_nohat.gsc deleted file mode 100644 index 133fb49..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian4_nohat.gsc +++ /dev/null @@ -1,47 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_civilian_body4_nohat" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_civilian_hat4_als::main() ); - self attach( self.hatmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean4"; - self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff4"; - self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff4"; - self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean4"; - self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff4"; - self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff4"; - self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff4"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_civilian_body4_nohat" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_civilian_hat4_als::main() ); - precachemodel( "c_zom_zombie_buried_civilian_g_upclean4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_larmoff4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); - precachemodel( "c_zom_zombie_buried_civilian_g_lowclean4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_llegoff4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_legsoff4" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian5.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian5.gsc deleted file mode 100644 index 9d1e339..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian5.gsc +++ /dev/null @@ -1,50 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_civilian_body5" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_zombie_buried_civilian_hats2"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean5"; - self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff5"; - self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff5"; - self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean5"; - self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff5"; - self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff5"; - self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff5"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; - self.gibspawn5 = "c_zom_zombie_buried_civilian_hats2"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_civilian_body5" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - precachemodel( "c_zom_zombie_buried_civilian_hats2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_upclean5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_larmoff5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); - precachemodel( "c_zom_zombie_buried_civilian_g_lowclean5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_llegoff5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_legsoff5" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_zombie_buried_civilian_hats2" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian5_nohat.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian5_nohat.gsc deleted file mode 100644 index cb6a6e1..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_civilian5_nohat.gsc +++ /dev/null @@ -1,47 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_civilian_body5_nohat" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_civilian_hat5_als::main() ); - self attach( self.hatmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean5"; - self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff5"; - self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff5"; - self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean5"; - self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff5"; - self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff5"; - self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff5"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_civilian_body5_nohat" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_civilian_hat5_als::main() ); - precachemodel( "c_zom_zombie_buried_civilian_g_upclean5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_larmoff5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); - precachemodel( "c_zom_zombie_buried_civilian_g_lowclean5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_llegoff5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_legsoff5" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_ghost_woman.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_ghost_woman.gsc deleted file mode 100644 index 871be60..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_ghost_woman.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_zombie_buried_ghost_woman_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_ghost_woman_fb" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_miner1.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_miner1.gsc deleted file mode 100644 index 098b02e..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_miner1.gsc +++ /dev/null @@ -1,48 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_miner_body1" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_zombie_buried_miner_hats1"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_miner_g_upclean"; - self.torsodmg2 = "c_zom_zombie_buried_miner_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie_buried_miner_g_larmoff"; - self.legdmg1 = "c_zom_zombie_buried_miner_g_lowclean"; - self.legdmg2 = "c_zom_zombie_buried_miner_g_rlegoff"; - self.legdmg3 = "c_zom_zombie_buried_miner_g_llegoff"; - self.legdmg4 = "c_zom_zombie_buried_miner_g_legsoff"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_knee_LE"; - self.gibspawn5 = "c_zom_zombie_buried_miner_hats1"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_miner_body1" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - precachemodel( "c_zom_zombie_buried_miner_hats1" ); - precachemodel( "c_zom_zombie_buried_miner_g_upclean" ); - precachemodel( "c_zom_zombie_buried_miner_g_rarmoff" ); - precachemodel( "c_zom_zombie_buried_miner_g_larmoff" ); - precachemodel( "c_zom_zombie_buried_miner_g_lowclean" ); - precachemodel( "c_zom_zombie_buried_miner_g_rlegoff" ); - precachemodel( "c_zom_zombie_buried_miner_g_llegoff" ); - precachemodel( "c_zom_zombie_buried_miner_g_legsoff" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_zombie_buried_miner_hats1" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_miner2.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_miner2.gsc deleted file mode 100644 index b3f5e79..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_miner2.gsc +++ /dev/null @@ -1,48 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_miner_body2" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_zombie_buried_miner_hats1"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_miner_g_upclean2"; - self.torsodmg2 = "c_zom_zombie_buried_miner_g_rarmoff2"; - self.torsodmg3 = "c_zom_zombie_buried_miner_g_larmoff2"; - self.legdmg1 = "c_zom_zombie_buried_miner_g_lowclean2"; - self.legdmg2 = "c_zom_zombie_buried_miner_g_rlegoff2"; - self.legdmg3 = "c_zom_zombie_buried_miner_g_llegoff2"; - self.legdmg4 = "c_zom_zombie_buried_miner_g_legsoff2"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_knee_LE"; - self.gibspawn5 = "c_zom_zombie_buried_miner_hats1"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_miner_body2" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - precachemodel( "c_zom_zombie_buried_miner_hats1" ); - precachemodel( "c_zom_zombie_buried_miner_g_upclean2" ); - precachemodel( "c_zom_zombie_buried_miner_g_rarmoff2" ); - precachemodel( "c_zom_zombie_buried_miner_g_larmoff2" ); - precachemodel( "c_zom_zombie_buried_miner_g_lowclean2" ); - precachemodel( "c_zom_zombie_buried_miner_g_rlegoff2" ); - precachemodel( "c_zom_zombie_buried_miner_g_llegoff2" ); - precachemodel( "c_zom_zombie_buried_miner_g_legsoff2" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_zombie_buried_miner_hats1" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_miner2_nohat.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_miner2_nohat.gsc deleted file mode 100644 index d0a9cdc..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_miner2_nohat.gsc +++ /dev/null @@ -1,45 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_miner_body2_nohat" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_miner_hats_als::main() ); - self attach( self.hatmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_miner_g_upclean2"; - self.torsodmg2 = "c_zom_zombie_buried_miner_g_rarmoff2"; - self.torsodmg3 = "c_zom_zombie_buried_miner_g_larmoff2"; - self.legdmg1 = "c_zom_zombie_buried_miner_g_lowclean2"; - self.legdmg2 = "c_zom_zombie_buried_miner_g_rlegoff2"; - self.legdmg3 = "c_zom_zombie_buried_miner_g_llegoff2"; - self.legdmg4 = "c_zom_zombie_buried_miner_g_legsoff2"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_miner_body2_nohat" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_miner_hats_als::main() ); - precachemodel( "c_zom_zombie_buried_miner_g_upclean2" ); - precachemodel( "c_zom_zombie_buried_miner_g_rarmoff2" ); - precachemodel( "c_zom_zombie_buried_miner_g_larmoff2" ); - precachemodel( "c_zom_zombie_buried_miner_g_lowclean2" ); - precachemodel( "c_zom_zombie_buried_miner_g_rlegoff2" ); - precachemodel( "c_zom_zombie_buried_miner_g_llegoff2" ); - precachemodel( "c_zom_zombie_buried_miner_g_legsoff2" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_miner3.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_miner3.gsc deleted file mode 100644 index f435558..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_miner3.gsc +++ /dev/null @@ -1,48 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_miner_body3" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_zombie_buried_miner_hats2"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_miner_g_upclean3"; - self.torsodmg2 = "c_zom_zombie_buried_miner_g_rarmoff3"; - self.torsodmg3 = "c_zom_zombie_buried_miner_g_larmoff3"; - self.legdmg1 = "c_zom_zombie_buried_miner_g_lowclean3"; - self.legdmg2 = "c_zom_zombie_buried_miner_g_rlegoff3"; - self.legdmg3 = "c_zom_zombie_buried_miner_g_llegoff3"; - self.legdmg4 = "c_zom_zombie_buried_miner_g_legsoff3"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_knee_LE"; - self.gibspawn5 = "c_zom_zombie_buried_miner_hats2"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_miner_body3" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - precachemodel( "c_zom_zombie_buried_miner_hats2" ); - precachemodel( "c_zom_zombie_buried_miner_g_upclean3" ); - precachemodel( "c_zom_zombie_buried_miner_g_rarmoff3" ); - precachemodel( "c_zom_zombie_buried_miner_g_larmoff3" ); - precachemodel( "c_zom_zombie_buried_miner_g_lowclean3" ); - precachemodel( "c_zom_zombie_buried_miner_g_rlegoff3" ); - precachemodel( "c_zom_zombie_buried_miner_g_llegoff3" ); - precachemodel( "c_zom_zombie_buried_miner_g_legsoff3" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_zombie_buried_miner_hats2" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_miner3_nohat.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_miner3_nohat.gsc deleted file mode 100644 index ef5bc7c..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_miner3_nohat.gsc +++ /dev/null @@ -1,45 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_miner_body3_nohat" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_miner_hats_als::main() ); - self attach( self.hatmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_miner_g_upclean3"; - self.torsodmg2 = "c_zom_zombie_buried_miner_g_rarmoff3"; - self.torsodmg3 = "c_zom_zombie_buried_miner_g_larmoff3"; - self.legdmg1 = "c_zom_zombie_buried_miner_g_lowclean3"; - self.legdmg2 = "c_zom_zombie_buried_miner_g_rlegoff3"; - self.legdmg3 = "c_zom_zombie_buried_miner_g_llegoff3"; - self.legdmg4 = "c_zom_zombie_buried_miner_g_legsoff3"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_miner_body3_nohat" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_miner_hats_als::main() ); - precachemodel( "c_zom_zombie_buried_miner_g_upclean3" ); - precachemodel( "c_zom_zombie_buried_miner_g_rarmoff3" ); - precachemodel( "c_zom_zombie_buried_miner_g_larmoff3" ); - precachemodel( "c_zom_zombie_buried_miner_g_lowclean3" ); - precachemodel( "c_zom_zombie_buried_miner_g_rlegoff3" ); - precachemodel( "c_zom_zombie_buried_miner_g_llegoff3" ); - precachemodel( "c_zom_zombie_buried_miner_g_legsoff3" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_saloongirl1.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_saloongirl1.gsc deleted file mode 100644 index 9152d3b..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_saloongirl1.gsc +++ /dev/null @@ -1,47 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_sgirl_body1" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_female_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_sgirl_hair_als::main() ); - self attach( self.hatmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_sgirl_g_upclean"; - self.torsodmg2 = "c_zom_zombie_buried_sgirl_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie_buried_sgirl_g_larmoff"; - self.torsodmg5 = "c_zom_zombie_buried_sgirl_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_sgirl_g_lowclean"; - self.legdmg2 = "c_zom_zombie_buried_sgirl_g_rlegoff"; - self.legdmg3 = "c_zom_zombie_buried_sgirl_g_llegoff"; - self.legdmg4 = "c_zom_zombie_buried_sgirl_g_legsoff"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_sgirl_body1" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_female_heads_als::main() ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_sgirl_hair_als::main() ); - precachemodel( "c_zom_zombie_buried_sgirl_g_upclean" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_rarmoff" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_larmoff" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_behead" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_lowclean" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_rlegoff" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_llegoff" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_legsoff" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_saloongirl2.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_saloongirl2.gsc deleted file mode 100644 index f0740a3..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_saloongirl2.gsc +++ /dev/null @@ -1,47 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_sgirl_body2" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_female_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_sgirl_hair_als::main() ); - self attach( self.hatmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_sgirl_g_upclean2"; - self.torsodmg2 = "c_zom_zombie_buried_sgirl_g_rarmoff2"; - self.torsodmg3 = "c_zom_zombie_buried_sgirl_g_larmoff2"; - self.torsodmg5 = "c_zom_zombie_buried_sgirl_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_sgirl_g_lowclean2"; - self.legdmg2 = "c_zom_zombie_buried_sgirl_g_rlegoff2"; - self.legdmg3 = "c_zom_zombie_buried_sgirl_g_llegoff2"; - self.legdmg4 = "c_zom_zombie_buried_sgirl_g_legsoff2"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_sgirl_body2" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_female_heads_als::main() ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_sgirl_hair_als::main() ); - precachemodel( "c_zom_zombie_buried_sgirl_g_upclean2" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_rarmoff2" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_larmoff2" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_behead" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_lowclean2" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_rlegoff2" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_llegoff2" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_legsoff2" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_saloongirl3.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_saloongirl3.gsc deleted file mode 100644 index 8f1f2b7..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/character/c_zom_zombie_buried_saloongirl3.gsc +++ /dev/null @@ -1,47 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_sgirl_body3" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_female_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_sgirl_hair_als::main() ); - self attach( self.hatmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_sgirl_g_upclean3"; - self.torsodmg2 = "c_zom_zombie_buried_sgirl_g_rarmoff3"; - self.torsodmg3 = "c_zom_zombie_buried_sgirl_g_larmoff3"; - self.torsodmg5 = "c_zom_zombie_buried_sgirl_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_sgirl_g_lowclean3"; - self.legdmg2 = "c_zom_zombie_buried_sgirl_g_rlegoff3"; - self.legdmg3 = "c_zom_zombie_buried_sgirl_g_llegoff3"; - self.legdmg4 = "c_zom_zombie_buried_sgirl_g_legsoff3"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_sgirl_body3" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_female_heads_als::main() ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_sgirl_hair_als::main() ); - precachemodel( "c_zom_zombie_buried_sgirl_g_upclean3" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_rarmoff3" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_larmoff3" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_behead" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_lowclean3" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_rlegoff3" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_llegoff3" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_legsoff3" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat1_als.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat1_als.gsc deleted file mode 100644 index 80899ad..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat1_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_buried_civilian_nohat"; - a[ 1 ] = "c_zom_zombie_buried_male_hair1"; - a[ 2 ] = "c_zom_zombie_buried_male_hair2"; - a[ 3 ] = "c_zom_zombie_buried_male_hair3"; - return a; -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat2_als.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat2_als.gsc deleted file mode 100644 index 80899ad..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat2_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_buried_civilian_nohat"; - a[ 1 ] = "c_zom_zombie_buried_male_hair1"; - a[ 2 ] = "c_zom_zombie_buried_male_hair2"; - a[ 3 ] = "c_zom_zombie_buried_male_hair3"; - return a; -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat3_als.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat3_als.gsc deleted file mode 100644 index 80899ad..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat3_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_buried_civilian_nohat"; - a[ 1 ] = "c_zom_zombie_buried_male_hair1"; - a[ 2 ] = "c_zom_zombie_buried_male_hair2"; - a[ 3 ] = "c_zom_zombie_buried_male_hair3"; - return a; -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat4_als.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat4_als.gsc deleted file mode 100644 index 80899ad..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat4_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_buried_civilian_nohat"; - a[ 1 ] = "c_zom_zombie_buried_male_hair1"; - a[ 2 ] = "c_zom_zombie_buried_male_hair2"; - a[ 3 ] = "c_zom_zombie_buried_male_hair3"; - return a; -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat5_als.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat5_als.gsc deleted file mode 100644 index 80899ad..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat5_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_buried_civilian_nohat"; - a[ 1 ] = "c_zom_zombie_buried_male_hair1"; - a[ 2 ] = "c_zom_zombie_buried_male_hair2"; - a[ 3 ] = "c_zom_zombie_buried_male_hair3"; - return a; -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_female_heads_als.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_female_heads_als.gsc deleted file mode 100644 index b7d570d..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_female_heads_als.gsc +++ /dev/null @@ -1,7 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_buried_sgirl_head1"; - a[ 1 ] = "c_zom_zombie_buried_sgirl_head2"; - return a; -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_male_heads_als.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_male_heads_als.gsc deleted file mode 100644 index 4557a13..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_male_heads_als.gsc +++ /dev/null @@ -1,8 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_buried_male_head1"; - a[ 1 ] = "c_zom_zombie_buried_male_head2"; - a[ 2 ] = "c_zom_zombie_buried_male_head3"; - return a; -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_miner_hats_als.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_miner_hats_als.gsc deleted file mode 100644 index b947a59..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_miner_hats_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_buried_miner_nohat"; - a[ 1 ] = "c_zom_zombie_buried_male_hair1"; - a[ 2 ] = "c_zom_zombie_buried_male_hair2"; - a[ 3 ] = "c_zom_zombie_buried_male_hair3"; - return a; -} diff --git a/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_sgirl_hair_als.gsc b/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_sgirl_hair_als.gsc deleted file mode 100644 index 6f20d3a..0000000 --- a/Zombie Maps/Buried/so_zclassic_zm_buried/xmodelalias/c_zom_zombie_buried_sgirl_hair_als.gsc +++ /dev/null @@ -1,11 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_buried_sgirl_hair1"; - a[ 1 ] = "c_zom_zombie_buried_sgirl_hair1_2"; - a[ 2 ] = "c_zom_zombie_buried_sgirl_hair1_3"; - a[ 3 ] = "c_zom_zombie_buried_sgirl_hair2"; - a[ 4 ] = "c_zom_zombie_buried_sgirl_hair2_2"; - a[ 5 ] = "c_zom_zombie_buried_sgirl_hair1_3"; - return a; -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_ally_cdc.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_ally_cdc.gsc deleted file mode 100644 index bef97ac..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_ally_cdc.gsc +++ /dev/null @@ -1,55 +0,0 @@ - -#using_animtree( "zm_ally" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %pb_laststand_idle; - dummy_anim_ref = %pb_stand_alert; - dummy_anim_ref = %pb_crouch_alert; - dummy_anim_ref = %pb_afterlife_laststand_idle; - dummy_anim_ref = %ai_actor_elec_chair_idle; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_ally_basic.asd"; - self.animtree = "zm_ally.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "allies"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_ally_cdc::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "allies" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_ally_basic" ); - character/c_zom_ally_cdc::precache(); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_01_char_01.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_01_char_01.gsc deleted file mode 100644 index 543f5a2..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_01_char_01.gsc +++ /dev/null @@ -1,384 +0,0 @@ - -#using_animtree( "zm_buried_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_slipslide_collapse; - dummy_anim_ref = %ai_zombie_walk_slipslide; - dummy_anim_ref = %ai_zombie_walk_slipslide_a; - dummy_anim_ref = %ai_zombie_run_slipslide; - dummy_anim_ref = %ai_zombie_run_slipslide_a; - dummy_anim_ref = %ai_zombie_sprint_slipslide; - dummy_anim_ref = %ai_zombie_sprint_slipslide_a; - dummy_anim_ref = %ai_zombie_stand_slipslide_recover; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_240; - dummy_anim_ref = %ai_zombie_crawl_jump_down_240; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_48; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_buried_basic.asd"; - self.animtree = "zm_buried_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_zombie_buried_civilian1::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_buried_basic" ); - character/c_zom_zombie_buried_civilian1::precache(); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_01_char_02.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_01_char_02.gsc deleted file mode 100644 index 6b54a55..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_01_char_02.gsc +++ /dev/null @@ -1,399 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_buried_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_slipslide_collapse; - dummy_anim_ref = %ai_zombie_walk_slipslide; - dummy_anim_ref = %ai_zombie_walk_slipslide_a; - dummy_anim_ref = %ai_zombie_run_slipslide; - dummy_anim_ref = %ai_zombie_run_slipslide_a; - dummy_anim_ref = %ai_zombie_sprint_slipslide; - dummy_anim_ref = %ai_zombie_sprint_slipslide_a; - dummy_anim_ref = %ai_zombie_stand_slipslide_recover; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_240; - dummy_anim_ref = %ai_zombie_crawl_jump_down_240; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_48; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_buried_basic.asd"; - self.animtree = "zm_buried_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 3 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie_buried_civilian2::main(); - break; - case 1: - character/c_zom_zombie_buried_civilian2_nohat::main(); - break; - case 2: - character/c_zom_zombie_buried_civilian2_nohat::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_buried_basic" ); - character/c_zom_zombie_buried_civilian2::precache(); - character/c_zom_zombie_buried_civilian2_nohat::precache(); - character/c_zom_zombie_buried_civilian2_nohat::precache(); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_01_char_03.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_01_char_03.gsc deleted file mode 100644 index 270be7e..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_01_char_03.gsc +++ /dev/null @@ -1,399 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_buried_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_slipslide_collapse; - dummy_anim_ref = %ai_zombie_walk_slipslide; - dummy_anim_ref = %ai_zombie_walk_slipslide_a; - dummy_anim_ref = %ai_zombie_run_slipslide; - dummy_anim_ref = %ai_zombie_run_slipslide_a; - dummy_anim_ref = %ai_zombie_sprint_slipslide; - dummy_anim_ref = %ai_zombie_sprint_slipslide_a; - dummy_anim_ref = %ai_zombie_stand_slipslide_recover; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_240; - dummy_anim_ref = %ai_zombie_crawl_jump_down_240; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_48; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_buried_basic.asd"; - self.animtree = "zm_buried_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 3 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie_buried_civilian3::main(); - break; - case 1: - character/c_zom_zombie_buried_civilian3_nohat::main(); - break; - case 2: - character/c_zom_zombie_buried_civilian3_nohat::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_buried_basic" ); - character/c_zom_zombie_buried_civilian3::precache(); - character/c_zom_zombie_buried_civilian3_nohat::precache(); - character/c_zom_zombie_buried_civilian3_nohat::precache(); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_01_char_04.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_01_char_04.gsc deleted file mode 100644 index b0e3058..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_01_char_04.gsc +++ /dev/null @@ -1,399 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_buried_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_slipslide_collapse; - dummy_anim_ref = %ai_zombie_walk_slipslide; - dummy_anim_ref = %ai_zombie_walk_slipslide_a; - dummy_anim_ref = %ai_zombie_run_slipslide; - dummy_anim_ref = %ai_zombie_run_slipslide_a; - dummy_anim_ref = %ai_zombie_sprint_slipslide; - dummy_anim_ref = %ai_zombie_sprint_slipslide_a; - dummy_anim_ref = %ai_zombie_stand_slipslide_recover; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_240; - dummy_anim_ref = %ai_zombie_crawl_jump_down_240; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_48; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_buried_basic.asd"; - self.animtree = "zm_buried_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 3 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie_buried_civilian4::main(); - break; - case 1: - character/c_zom_zombie_buried_civilian4_nohat::main(); - break; - case 2: - character/c_zom_zombie_buried_civilian4_nohat::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_buried_basic" ); - character/c_zom_zombie_buried_civilian4::precache(); - character/c_zom_zombie_buried_civilian4_nohat::precache(); - character/c_zom_zombie_buried_civilian4_nohat::precache(); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_01_char_05.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_01_char_05.gsc deleted file mode 100644 index deedb27..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_01_char_05.gsc +++ /dev/null @@ -1,403 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_buried_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_slipslide_collapse; - dummy_anim_ref = %ai_zombie_walk_slipslide; - dummy_anim_ref = %ai_zombie_walk_slipslide_a; - dummy_anim_ref = %ai_zombie_run_slipslide; - dummy_anim_ref = %ai_zombie_run_slipslide_a; - dummy_anim_ref = %ai_zombie_sprint_slipslide; - dummy_anim_ref = %ai_zombie_sprint_slipslide_a; - dummy_anim_ref = %ai_zombie_stand_slipslide_recover; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_240; - dummy_anim_ref = %ai_zombie_crawl_jump_down_240; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_48; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_buried_basic.asd"; - self.animtree = "zm_buried_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 4 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie_buried_civilian5::main(); - break; - case 1: - character/c_zom_zombie_buried_civilian5_nohat::main(); - break; - case 2: - character/c_zom_zombie_buried_civilian5_nohat::main(); - break; - case 3: - character/c_zom_zombie_buried_civilian5_nohat::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_buried_basic" ); - character/c_zom_zombie_buried_civilian5::precache(); - character/c_zom_zombie_buried_civilian5_nohat::precache(); - character/c_zom_zombie_buried_civilian5_nohat::precache(); - character/c_zom_zombie_buried_civilian5_nohat::precache(); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_02_char_01.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_02_char_01.gsc deleted file mode 100644 index cf488c0..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_02_char_01.gsc +++ /dev/null @@ -1,384 +0,0 @@ - -#using_animtree( "zm_buried_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_slipslide_collapse; - dummy_anim_ref = %ai_zombie_walk_slipslide; - dummy_anim_ref = %ai_zombie_walk_slipslide_a; - dummy_anim_ref = %ai_zombie_run_slipslide; - dummy_anim_ref = %ai_zombie_run_slipslide_a; - dummy_anim_ref = %ai_zombie_sprint_slipslide; - dummy_anim_ref = %ai_zombie_sprint_slipslide_a; - dummy_anim_ref = %ai_zombie_stand_slipslide_recover; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_240; - dummy_anim_ref = %ai_zombie_crawl_jump_down_240; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_48; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_buried_basic.asd"; - self.animtree = "zm_buried_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_zombie_buried_miner1::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_buried_basic" ); - character/c_zom_zombie_buried_miner1::precache(); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_02_char_02.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_02_char_02.gsc deleted file mode 100644 index f08837e..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_02_char_02.gsc +++ /dev/null @@ -1,399 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_buried_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_slipslide_collapse; - dummy_anim_ref = %ai_zombie_walk_slipslide; - dummy_anim_ref = %ai_zombie_walk_slipslide_a; - dummy_anim_ref = %ai_zombie_run_slipslide; - dummy_anim_ref = %ai_zombie_run_slipslide_a; - dummy_anim_ref = %ai_zombie_sprint_slipslide; - dummy_anim_ref = %ai_zombie_sprint_slipslide_a; - dummy_anim_ref = %ai_zombie_stand_slipslide_recover; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_240; - dummy_anim_ref = %ai_zombie_crawl_jump_down_240; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_48; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_buried_basic.asd"; - self.animtree = "zm_buried_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 3 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie_buried_miner2::main(); - break; - case 1: - character/c_zom_zombie_buried_miner2_nohat::main(); - break; - case 2: - character/c_zom_zombie_buried_miner2_nohat::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_buried_basic" ); - character/c_zom_zombie_buried_miner2::precache(); - character/c_zom_zombie_buried_miner2_nohat::precache(); - character/c_zom_zombie_buried_miner2_nohat::precache(); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_02_char_03.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_02_char_03.gsc deleted file mode 100644 index 99000ab..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_02_char_03.gsc +++ /dev/null @@ -1,399 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_buried_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_slipslide_collapse; - dummy_anim_ref = %ai_zombie_walk_slipslide; - dummy_anim_ref = %ai_zombie_walk_slipslide_a; - dummy_anim_ref = %ai_zombie_run_slipslide; - dummy_anim_ref = %ai_zombie_run_slipslide_a; - dummy_anim_ref = %ai_zombie_sprint_slipslide; - dummy_anim_ref = %ai_zombie_sprint_slipslide_a; - dummy_anim_ref = %ai_zombie_stand_slipslide_recover; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_240; - dummy_anim_ref = %ai_zombie_crawl_jump_down_240; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_48; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_buried_basic.asd"; - self.animtree = "zm_buried_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 3 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie_buried_miner3::main(); - break; - case 1: - character/c_zom_zombie_buried_miner3_nohat::main(); - break; - case 2: - character/c_zom_zombie_buried_miner3_nohat::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_buried_basic" ); - character/c_zom_zombie_buried_miner3::precache(); - character/c_zom_zombie_buried_miner3_nohat::precache(); - character/c_zom_zombie_buried_miner3_nohat::precache(); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_03.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_03.gsc deleted file mode 100644 index caf0454..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_basic_03.gsc +++ /dev/null @@ -1,399 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_buried_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_slipslide_collapse; - dummy_anim_ref = %ai_zombie_walk_slipslide; - dummy_anim_ref = %ai_zombie_walk_slipslide_a; - dummy_anim_ref = %ai_zombie_run_slipslide; - dummy_anim_ref = %ai_zombie_run_slipslide_a; - dummy_anim_ref = %ai_zombie_sprint_slipslide; - dummy_anim_ref = %ai_zombie_sprint_slipslide_a; - dummy_anim_ref = %ai_zombie_stand_slipslide_recover; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_vertical; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_slow; - dummy_anim_ref = %ai_zombie_hedgemaze_emerge_fast; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_slung_idle; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_idle_hunched; - dummy_anim_ref = %ai_zombie_crawler_pickup_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_putdown_by_sloth_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_stomp_hunched; - dummy_anim_ref = %ai_zombie_crawler_slothkill_suplex_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_sling_hunched; - dummy_anim_ref = %ai_zombie_crawler_sloth_crawlerhold_unsling_hunched; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_hunched_turn_180; - dummy_anim_ref = %ai_zombie_crawler_crawlerhold_walk_turn_180; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_240; - dummy_anim_ref = %ai_zombie_crawl_jump_down_240; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_crawl_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_48; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_buried_basic.asd"; - self.animtree = "zm_buried_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 3 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie_buried_saloongirl1::main(); - break; - case 1: - character/c_zom_zombie_buried_saloongirl2::main(); - break; - case 2: - character/c_zom_zombie_buried_saloongirl3::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_buried_basic" ); - character/c_zom_zombie_buried_saloongirl1::precache(); - character/c_zom_zombie_buried_saloongirl2::precache(); - character/c_zom_zombie_buried_saloongirl3::precache(); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_ghost_female.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_ghost_female.gsc deleted file mode 100644 index 6564d5b..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/aitype/zm_buried_ghost_female.gsc +++ /dev/null @@ -1,83 +0,0 @@ - -#using_animtree( "zm_buried_ghost" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_ghost_idle; - dummy_anim_ref = %ai_zombie_ghost_supersprint; - dummy_anim_ref = %ai_zombie_ghost_walk; - dummy_anim_ref = %ai_zombie_ghost_melee; - dummy_anim_ref = %ai_zombie_ghost_pointdrain; - dummy_anim_ref = %ai_zombie_ghost_float_death; - dummy_anim_ref = %ai_zombie_ghost_float_death_b; - dummy_anim_ref = %ai_zombie_ghost_spawn; - dummy_anim_ref = %ai_zombie_ghost_ground_pain; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_ghost_jump_across_120; - dummy_anim_ref = %ai_zombie_ghost_jump_down_48; - dummy_anim_ref = %ai_zombie_ghost_jump_down_72; - dummy_anim_ref = %ai_zombie_ghost_jump_down_96; - dummy_anim_ref = %ai_zombie_ghost_jump_down_127; - dummy_anim_ref = %ai_zombie_ghost_jump_down_154; - dummy_anim_ref = %ai_zombie_ghost_jump_down_176; - dummy_anim_ref = %ai_zombie_ghost_jump_down_190; - dummy_anim_ref = %ai_zombie_ghost_jump_down_222; - dummy_anim_ref = %ai_zombie_ghost_jump_down_240; - dummy_anim_ref = %ai_zombie_ghost_jump_up_72; - dummy_anim_ref = %ai_zombie_ghost_jump_up_96; - dummy_anim_ref = %ai_zombie_ghost_jump_up_127; - dummy_anim_ref = %ai_zombie_ghost_jump_up_154; - dummy_anim_ref = %ai_zombie_ghost_jump_up_176; - dummy_anim_ref = %ai_zombie_ghost_jump_up_190; - dummy_anim_ref = %ai_zombie_ghost_jump_up_222; - dummy_anim_ref = %ai_zombie_ghost_jump_up_240; - dummy_anim_ref = %ai_zombie_ghost_jump_up_startrailing; - dummy_anim_ref = %ai_zombie_ghost_jump_down_startrailing; - dummy_anim_ref = %ai_zombie_ghost_jump_up_48; - dummy_anim_ref = %ai_zombie_ghost_playing_piano; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_buried_ghost.asd"; - self.animtree = "zm_buried_ghost.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 70; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = "fly_step_ghost"; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_zombie_buried_ghost_woman::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_buried_ghost" ); - character/c_zom_zombie_buried_ghost_woman::precache(); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_buried_player_reporter_dam.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_buried_player_reporter_dam.gsc deleted file mode 100644 index 85f15ac..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_buried_player_reporter_dam.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_reporter_dam_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_reporter_dam_fb" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_transit_player_engineer.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_transit_player_engineer.gsc deleted file mode 100644 index b123803..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_transit_player_engineer.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_engineer_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_engineer_fb" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_transit_player_farmgirl.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_transit_player_farmgirl.gsc deleted file mode 100644 index 05c38e9..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_transit_player_farmgirl.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_farmgirl_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_farmgirl_fb" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_transit_player_oldman.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_transit_player_oldman.gsc deleted file mode 100644 index 5d5f2c5..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_transit_player_oldman.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_oldman_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_oldman_fb" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_ally_cdc.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_ally_cdc.gsc deleted file mode 100644 index 9530aee..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_ally_cdc.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_cdc_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_cdc_fb" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian1.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian1.gsc deleted file mode 100644 index 6966939..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian1.gsc +++ /dev/null @@ -1,47 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_civilian_body1" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_civilian_hat1_als::main() ); - self attach( self.hatmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean"; - self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff"; - self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean"; - self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff"; - self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff"; - self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_civilian_body1" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_civilian_hat1_als::main() ); - precachemodel( "c_zom_zombie_buried_civilian_g_upclean" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff" ); - precachemodel( "c_zom_zombie_buried_civilian_g_larmoff" ); - precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); - precachemodel( "c_zom_zombie_buried_civilian_g_lowclean" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff" ); - precachemodel( "c_zom_zombie_buried_civilian_g_llegoff" ); - precachemodel( "c_zom_zombie_buried_civilian_g_legsoff" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian2.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian2.gsc deleted file mode 100644 index 722663b..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian2.gsc +++ /dev/null @@ -1,50 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_civilian_body2" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_zombie_buried_civilian_hats3"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean2"; - self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff2"; - self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff2"; - self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean2"; - self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff2"; - self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff2"; - self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff2"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; - self.gibspawn5 = "c_zom_zombie_buried_civilian_hats3"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_civilian_body2" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - precachemodel( "c_zom_zombie_buried_civilian_hats3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_upclean2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_larmoff2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); - precachemodel( "c_zom_zombie_buried_civilian_g_lowclean2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_llegoff2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_legsoff2" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_zombie_buried_civilian_hats3" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian2_nohat.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian2_nohat.gsc deleted file mode 100644 index 715a1c1..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian2_nohat.gsc +++ /dev/null @@ -1,47 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_civilian_body2_nohat" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_civilian_hat2_als::main() ); - self attach( self.hatmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean2"; - self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff2"; - self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff2"; - self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean2"; - self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff2"; - self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff2"; - self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff2"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_civilian_body2_nohat" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_civilian_hat2_als::main() ); - precachemodel( "c_zom_zombie_buried_civilian_g_upclean2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_larmoff2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); - precachemodel( "c_zom_zombie_buried_civilian_g_lowclean2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_llegoff2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_legsoff2" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian3.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian3.gsc deleted file mode 100644 index 283552f..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian3.gsc +++ /dev/null @@ -1,50 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_civilian_body3" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_zombie_buried_civilian_hats1"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean3"; - self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff3"; - self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff3"; - self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean3"; - self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff3"; - self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff3"; - self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff3"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; - self.gibspawn5 = "c_zom_zombie_buried_civilian_hats1"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_civilian_body3" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - precachemodel( "c_zom_zombie_buried_civilian_hats1" ); - precachemodel( "c_zom_zombie_buried_civilian_g_upclean3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_larmoff3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); - precachemodel( "c_zom_zombie_buried_civilian_g_lowclean3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_llegoff3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_legsoff3" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_zombie_buried_civilian_hats1" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian3_nohat.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian3_nohat.gsc deleted file mode 100644 index 16728ea..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian3_nohat.gsc +++ /dev/null @@ -1,47 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_civilian_body3_nohat" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_civilian_hat3_als::main() ); - self attach( self.hatmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean3"; - self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff3"; - self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff3"; - self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean3"; - self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff3"; - self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff3"; - self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff3"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_civilian_body3_nohat" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_civilian_hat3_als::main() ); - precachemodel( "c_zom_zombie_buried_civilian_g_upclean3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_larmoff3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); - precachemodel( "c_zom_zombie_buried_civilian_g_lowclean3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_llegoff3" ); - precachemodel( "c_zom_zombie_buried_civilian_g_legsoff3" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian4.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian4.gsc deleted file mode 100644 index 423cec7..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian4.gsc +++ /dev/null @@ -1,50 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_civilian_body4" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_zombie_buried_civilian_hats4"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean4"; - self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff4"; - self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff4"; - self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean4"; - self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff4"; - self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff4"; - self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff4"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; - self.gibspawn5 = "c_zom_zombie_buried_civilian_hats4"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_civilian_body4" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - precachemodel( "c_zom_zombie_buried_civilian_hats4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_upclean4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_larmoff4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); - precachemodel( "c_zom_zombie_buried_civilian_g_lowclean4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_llegoff4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_legsoff4" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_zombie_buried_civilian_hats4" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian4_nohat.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian4_nohat.gsc deleted file mode 100644 index 133fb49..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian4_nohat.gsc +++ /dev/null @@ -1,47 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_civilian_body4_nohat" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_civilian_hat4_als::main() ); - self attach( self.hatmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean4"; - self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff4"; - self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff4"; - self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean4"; - self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff4"; - self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff4"; - self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff4"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_civilian_body4_nohat" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_civilian_hat4_als::main() ); - precachemodel( "c_zom_zombie_buried_civilian_g_upclean4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_larmoff4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); - precachemodel( "c_zom_zombie_buried_civilian_g_lowclean4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_llegoff4" ); - precachemodel( "c_zom_zombie_buried_civilian_g_legsoff4" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian5.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian5.gsc deleted file mode 100644 index 9d1e339..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian5.gsc +++ /dev/null @@ -1,50 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_civilian_body5" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_zombie_buried_civilian_hats2"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean5"; - self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff5"; - self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff5"; - self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean5"; - self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff5"; - self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff5"; - self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff5"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; - self.gibspawn5 = "c_zom_zombie_buried_civilian_hats2"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_civilian_body5" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - precachemodel( "c_zom_zombie_buried_civilian_hats2" ); - precachemodel( "c_zom_zombie_buried_civilian_g_upclean5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_larmoff5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); - precachemodel( "c_zom_zombie_buried_civilian_g_lowclean5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_llegoff5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_legsoff5" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_zombie_buried_civilian_hats2" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian5_nohat.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian5_nohat.gsc deleted file mode 100644 index cb6a6e1..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_civilian5_nohat.gsc +++ /dev/null @@ -1,47 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_civilian_body5_nohat" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_civilian_hat5_als::main() ); - self attach( self.hatmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_civilian_g_upclean5"; - self.torsodmg2 = "c_zom_zombie_buried_civilian_g_rarmoff5"; - self.torsodmg3 = "c_zom_zombie_buried_civilian_g_larmoff5"; - self.torsodmg5 = "c_zom_zombie_buried_civilian_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_civilian_g_lowclean5"; - self.legdmg2 = "c_zom_zombie_buried_civilian_g_rlegoff5"; - self.legdmg3 = "c_zom_zombie_buried_civilian_g_llegoff5"; - self.legdmg4 = "c_zom_zombie_buried_civilian_g_legsoff5"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_civilian_body5_nohat" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_civilian_hat5_als::main() ); - precachemodel( "c_zom_zombie_buried_civilian_g_upclean5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rarmoff5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_larmoff5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_behead" ); - precachemodel( "c_zom_zombie_buried_civilian_g_lowclean5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_rlegoff5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_llegoff5" ); - precachemodel( "c_zom_zombie_buried_civilian_g_legsoff5" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_ghost_woman.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_ghost_woman.gsc deleted file mode 100644 index 871be60..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_ghost_woman.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_zombie_buried_ghost_woman_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_ghost_woman_fb" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_miner1.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_miner1.gsc deleted file mode 100644 index 098b02e..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_miner1.gsc +++ /dev/null @@ -1,48 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_miner_body1" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_zombie_buried_miner_hats1"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_miner_g_upclean"; - self.torsodmg2 = "c_zom_zombie_buried_miner_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie_buried_miner_g_larmoff"; - self.legdmg1 = "c_zom_zombie_buried_miner_g_lowclean"; - self.legdmg2 = "c_zom_zombie_buried_miner_g_rlegoff"; - self.legdmg3 = "c_zom_zombie_buried_miner_g_llegoff"; - self.legdmg4 = "c_zom_zombie_buried_miner_g_legsoff"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_knee_LE"; - self.gibspawn5 = "c_zom_zombie_buried_miner_hats1"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_miner_body1" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - precachemodel( "c_zom_zombie_buried_miner_hats1" ); - precachemodel( "c_zom_zombie_buried_miner_g_upclean" ); - precachemodel( "c_zom_zombie_buried_miner_g_rarmoff" ); - precachemodel( "c_zom_zombie_buried_miner_g_larmoff" ); - precachemodel( "c_zom_zombie_buried_miner_g_lowclean" ); - precachemodel( "c_zom_zombie_buried_miner_g_rlegoff" ); - precachemodel( "c_zom_zombie_buried_miner_g_llegoff" ); - precachemodel( "c_zom_zombie_buried_miner_g_legsoff" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_zombie_buried_miner_hats1" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_miner2.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_miner2.gsc deleted file mode 100644 index b3f5e79..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_miner2.gsc +++ /dev/null @@ -1,48 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_miner_body2" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_zombie_buried_miner_hats1"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_miner_g_upclean2"; - self.torsodmg2 = "c_zom_zombie_buried_miner_g_rarmoff2"; - self.torsodmg3 = "c_zom_zombie_buried_miner_g_larmoff2"; - self.legdmg1 = "c_zom_zombie_buried_miner_g_lowclean2"; - self.legdmg2 = "c_zom_zombie_buried_miner_g_rlegoff2"; - self.legdmg3 = "c_zom_zombie_buried_miner_g_llegoff2"; - self.legdmg4 = "c_zom_zombie_buried_miner_g_legsoff2"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_knee_LE"; - self.gibspawn5 = "c_zom_zombie_buried_miner_hats1"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_miner_body2" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - precachemodel( "c_zom_zombie_buried_miner_hats1" ); - precachemodel( "c_zom_zombie_buried_miner_g_upclean2" ); - precachemodel( "c_zom_zombie_buried_miner_g_rarmoff2" ); - precachemodel( "c_zom_zombie_buried_miner_g_larmoff2" ); - precachemodel( "c_zom_zombie_buried_miner_g_lowclean2" ); - precachemodel( "c_zom_zombie_buried_miner_g_rlegoff2" ); - precachemodel( "c_zom_zombie_buried_miner_g_llegoff2" ); - precachemodel( "c_zom_zombie_buried_miner_g_legsoff2" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_zombie_buried_miner_hats1" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_miner2_nohat.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_miner2_nohat.gsc deleted file mode 100644 index d0a9cdc..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_miner2_nohat.gsc +++ /dev/null @@ -1,45 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_miner_body2_nohat" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_miner_hats_als::main() ); - self attach( self.hatmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_miner_g_upclean2"; - self.torsodmg2 = "c_zom_zombie_buried_miner_g_rarmoff2"; - self.torsodmg3 = "c_zom_zombie_buried_miner_g_larmoff2"; - self.legdmg1 = "c_zom_zombie_buried_miner_g_lowclean2"; - self.legdmg2 = "c_zom_zombie_buried_miner_g_rlegoff2"; - self.legdmg3 = "c_zom_zombie_buried_miner_g_llegoff2"; - self.legdmg4 = "c_zom_zombie_buried_miner_g_legsoff2"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_miner_body2_nohat" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_miner_hats_als::main() ); - precachemodel( "c_zom_zombie_buried_miner_g_upclean2" ); - precachemodel( "c_zom_zombie_buried_miner_g_rarmoff2" ); - precachemodel( "c_zom_zombie_buried_miner_g_larmoff2" ); - precachemodel( "c_zom_zombie_buried_miner_g_lowclean2" ); - precachemodel( "c_zom_zombie_buried_miner_g_rlegoff2" ); - precachemodel( "c_zom_zombie_buried_miner_g_llegoff2" ); - precachemodel( "c_zom_zombie_buried_miner_g_legsoff2" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_miner3.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_miner3.gsc deleted file mode 100644 index f435558..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_miner3.gsc +++ /dev/null @@ -1,48 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_miner_body3" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_zombie_buried_miner_hats2"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_miner_g_upclean3"; - self.torsodmg2 = "c_zom_zombie_buried_miner_g_rarmoff3"; - self.torsodmg3 = "c_zom_zombie_buried_miner_g_larmoff3"; - self.legdmg1 = "c_zom_zombie_buried_miner_g_lowclean3"; - self.legdmg2 = "c_zom_zombie_buried_miner_g_rlegoff3"; - self.legdmg3 = "c_zom_zombie_buried_miner_g_llegoff3"; - self.legdmg4 = "c_zom_zombie_buried_miner_g_legsoff3"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_knee_LE"; - self.gibspawn5 = "c_zom_zombie_buried_miner_hats2"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_miner_body3" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - precachemodel( "c_zom_zombie_buried_miner_hats2" ); - precachemodel( "c_zom_zombie_buried_miner_g_upclean3" ); - precachemodel( "c_zom_zombie_buried_miner_g_rarmoff3" ); - precachemodel( "c_zom_zombie_buried_miner_g_larmoff3" ); - precachemodel( "c_zom_zombie_buried_miner_g_lowclean3" ); - precachemodel( "c_zom_zombie_buried_miner_g_rlegoff3" ); - precachemodel( "c_zom_zombie_buried_miner_g_llegoff3" ); - precachemodel( "c_zom_zombie_buried_miner_g_legsoff3" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_zombie_buried_miner_hats2" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_miner3_nohat.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_miner3_nohat.gsc deleted file mode 100644 index ef5bc7c..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_miner3_nohat.gsc +++ /dev/null @@ -1,45 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_miner_body3_nohat" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_miner_hats_als::main() ); - self attach( self.hatmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_miner_g_upclean3"; - self.torsodmg2 = "c_zom_zombie_buried_miner_g_rarmoff3"; - self.torsodmg3 = "c_zom_zombie_buried_miner_g_larmoff3"; - self.legdmg1 = "c_zom_zombie_buried_miner_g_lowclean3"; - self.legdmg2 = "c_zom_zombie_buried_miner_g_rlegoff3"; - self.legdmg3 = "c_zom_zombie_buried_miner_g_llegoff3"; - self.legdmg4 = "c_zom_zombie_buried_miner_g_legsoff3"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_miner_body3_nohat" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_male_heads_als::main() ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_miner_hats_als::main() ); - precachemodel( "c_zom_zombie_buried_miner_g_upclean3" ); - precachemodel( "c_zom_zombie_buried_miner_g_rarmoff3" ); - precachemodel( "c_zom_zombie_buried_miner_g_larmoff3" ); - precachemodel( "c_zom_zombie_buried_miner_g_lowclean3" ); - precachemodel( "c_zom_zombie_buried_miner_g_rlegoff3" ); - precachemodel( "c_zom_zombie_buried_miner_g_llegoff3" ); - precachemodel( "c_zom_zombie_buried_miner_g_legsoff3" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_saloongirl1.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_saloongirl1.gsc deleted file mode 100644 index 9152d3b..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_saloongirl1.gsc +++ /dev/null @@ -1,47 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_sgirl_body1" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_female_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_sgirl_hair_als::main() ); - self attach( self.hatmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_sgirl_g_upclean"; - self.torsodmg2 = "c_zom_zombie_buried_sgirl_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie_buried_sgirl_g_larmoff"; - self.torsodmg5 = "c_zom_zombie_buried_sgirl_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_sgirl_g_lowclean"; - self.legdmg2 = "c_zom_zombie_buried_sgirl_g_rlegoff"; - self.legdmg3 = "c_zom_zombie_buried_sgirl_g_llegoff"; - self.legdmg4 = "c_zom_zombie_buried_sgirl_g_legsoff"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_sgirl_body1" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_female_heads_als::main() ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_sgirl_hair_als::main() ); - precachemodel( "c_zom_zombie_buried_sgirl_g_upclean" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_rarmoff" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_larmoff" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_behead" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_lowclean" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_rlegoff" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_llegoff" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_legsoff" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_saloongirl2.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_saloongirl2.gsc deleted file mode 100644 index f0740a3..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_saloongirl2.gsc +++ /dev/null @@ -1,47 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_sgirl_body2" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_female_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_sgirl_hair_als::main() ); - self attach( self.hatmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_sgirl_g_upclean2"; - self.torsodmg2 = "c_zom_zombie_buried_sgirl_g_rarmoff2"; - self.torsodmg3 = "c_zom_zombie_buried_sgirl_g_larmoff2"; - self.torsodmg5 = "c_zom_zombie_buried_sgirl_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_sgirl_g_lowclean2"; - self.legdmg2 = "c_zom_zombie_buried_sgirl_g_rlegoff2"; - self.legdmg3 = "c_zom_zombie_buried_sgirl_g_llegoff2"; - self.legdmg4 = "c_zom_zombie_buried_sgirl_g_legsoff2"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_sgirl_body2" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_female_heads_als::main() ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_sgirl_hair_als::main() ); - precachemodel( "c_zom_zombie_buried_sgirl_g_upclean2" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_rarmoff2" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_larmoff2" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_behead" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_lowclean2" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_rlegoff2" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_llegoff2" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_legsoff2" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_saloongirl3.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_saloongirl3.gsc deleted file mode 100644 index 8f1f2b7..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_saloongirl3.gsc +++ /dev/null @@ -1,47 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_buried_sgirl_body3" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_female_heads_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_buried_sgirl_hair_als::main() ); - self attach( self.hatmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_buried_sgirl_g_upclean3"; - self.torsodmg2 = "c_zom_zombie_buried_sgirl_g_rarmoff3"; - self.torsodmg3 = "c_zom_zombie_buried_sgirl_g_larmoff3"; - self.torsodmg5 = "c_zom_zombie_buried_sgirl_g_behead"; - self.legdmg1 = "c_zom_zombie_buried_sgirl_g_lowclean3"; - self.legdmg2 = "c_zom_zombie_buried_sgirl_g_rlegoff3"; - self.legdmg3 = "c_zom_zombie_buried_sgirl_g_llegoff3"; - self.legdmg4 = "c_zom_zombie_buried_sgirl_g_legsoff3"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_sgirl_body3" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_female_heads_als::main() ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_buried_sgirl_hair_als::main() ); - precachemodel( "c_zom_zombie_buried_sgirl_g_upclean3" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_rarmoff3" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_larmoff3" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_behead" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_lowclean3" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_rlegoff3" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_llegoff3" ); - precachemodel( "c_zom_zombie_buried_sgirl_g_legsoff3" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_saloongirl_mp.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_saloongirl_mp.gsc deleted file mode 100644 index c12749a..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/character/c_zom_zombie_buried_saloongirl_mp.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_zombie_buried_sgirl_player_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_zombie_buried_sgirl_player_fb" ); -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat1_als.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat1_als.gsc deleted file mode 100644 index 80899ad..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat1_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_buried_civilian_nohat"; - a[ 1 ] = "c_zom_zombie_buried_male_hair1"; - a[ 2 ] = "c_zom_zombie_buried_male_hair2"; - a[ 3 ] = "c_zom_zombie_buried_male_hair3"; - return a; -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat2_als.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat2_als.gsc deleted file mode 100644 index 80899ad..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat2_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_buried_civilian_nohat"; - a[ 1 ] = "c_zom_zombie_buried_male_hair1"; - a[ 2 ] = "c_zom_zombie_buried_male_hair2"; - a[ 3 ] = "c_zom_zombie_buried_male_hair3"; - return a; -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat3_als.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat3_als.gsc deleted file mode 100644 index 80899ad..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat3_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_buried_civilian_nohat"; - a[ 1 ] = "c_zom_zombie_buried_male_hair1"; - a[ 2 ] = "c_zom_zombie_buried_male_hair2"; - a[ 3 ] = "c_zom_zombie_buried_male_hair3"; - return a; -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat4_als.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat4_als.gsc deleted file mode 100644 index 80899ad..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat4_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_buried_civilian_nohat"; - a[ 1 ] = "c_zom_zombie_buried_male_hair1"; - a[ 2 ] = "c_zom_zombie_buried_male_hair2"; - a[ 3 ] = "c_zom_zombie_buried_male_hair3"; - return a; -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat5_als.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat5_als.gsc deleted file mode 100644 index 80899ad..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_civilian_hat5_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_buried_civilian_nohat"; - a[ 1 ] = "c_zom_zombie_buried_male_hair1"; - a[ 2 ] = "c_zom_zombie_buried_male_hair2"; - a[ 3 ] = "c_zom_zombie_buried_male_hair3"; - return a; -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_female_heads_als.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_female_heads_als.gsc deleted file mode 100644 index b7d570d..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_female_heads_als.gsc +++ /dev/null @@ -1,7 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_buried_sgirl_head1"; - a[ 1 ] = "c_zom_zombie_buried_sgirl_head2"; - return a; -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_male_heads_als.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_male_heads_als.gsc deleted file mode 100644 index 4557a13..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_male_heads_als.gsc +++ /dev/null @@ -1,8 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_buried_male_head1"; - a[ 1 ] = "c_zom_zombie_buried_male_head2"; - a[ 2 ] = "c_zom_zombie_buried_male_head3"; - return a; -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_miner_hats_als.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_miner_hats_als.gsc deleted file mode 100644 index b947a59..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_miner_hats_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_buried_miner_nohat"; - a[ 1 ] = "c_zom_zombie_buried_male_hair1"; - a[ 2 ] = "c_zom_zombie_buried_male_hair2"; - a[ 3 ] = "c_zom_zombie_buried_male_hair3"; - return a; -} diff --git a/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_sgirl_hair_als.gsc b/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_sgirl_hair_als.gsc deleted file mode 100644 index 6f20d3a..0000000 --- a/Zombie Maps/Buried/so_zencounter_zm_buried/xmodelalias/c_zom_zombie_buried_sgirl_hair_als.gsc +++ /dev/null @@ -1,11 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_buried_sgirl_hair1"; - a[ 1 ] = "c_zom_zombie_buried_sgirl_hair1_2"; - a[ 2 ] = "c_zom_zombie_buried_sgirl_hair1_3"; - a[ 3 ] = "c_zom_zombie_buried_sgirl_hair2"; - a[ 4 ] = "c_zom_zombie_buried_sgirl_hair2_2"; - a[ 5 ] = "c_zom_zombie_buried_sgirl_hair1_3"; - return a; -} diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/gametypes_zm/zcleansed.gsc b/Zombie Maps/Buried/zm_buried_patch/maps/mp/gametypes_zm/zcleansed.gsc deleted file mode 100644 index a0dc117..0000000 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/gametypes_zm/zcleansed.gsc +++ /dev/null @@ -1,2048 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include maps\mp\_utility; -#include maps\mp\gametypes_zm\_hud; -#include maps\mp\gametypes_zm\_hud_util; -#include common_scripts\utility; -#include maps\mp\zombies\_zm_utility; -#include maps\mp\zombies\_zm_turned; -#include maps\mp\gametypes_zm\_zm_gametype; -#include maps\mp\zombies\_zm_stats; -#include maps\mp\zombies\_zm_powerups; -#include maps\mp\zombies\_zm_score; -#include maps\mp\zombies\_zm_laststand; -#include maps\mp\gametypes_zm\_weapons; -#include maps\mp\zombies\_zm; -#include maps\mp\zombies\_zm_audio_announcer; -#include maps\mp\gametypes_zm\_globallogic_utils; -#include maps\mp\zombies\_zm_blockers; -#include maps\mp\zombies\_zm_magicbox; -#include maps\mp\zombies\_zm_weap_cymbal_monkey; -#include maps\mp\_visionset_mgr; - -main() -{ - level.using_zombie_powerups = 1; - level._game_mode_powerup_zombie_grab = ::zcleansed_zombie_powerup_grab; - level._zombiemode_powerup_grab = ::zcleansed_powerup_grab; - level._powerup_timeout_custom_time = ::zcleansed_powerup_custom_time_logic; - level._powerup_grab_check = ::powerup_can_player_grab; - setdvar( "aim_target_player_enabled", 1 ); - maps\mp\gametypes_zm\_zm_gametype::main(); - setscoreboardcolumns( "none", "score", "kills", "downs", "headshots" ); - level.cymbal_monkey_dual_view = 1; - level.onprecachegametype = ::onprecachegametype; - level.onstartgametype = ::onstartgametype; - level.custom_end_screen = ::custom_end_screen; - level._game_module_custom_spawn_init_func = maps\mp\gametypes_zm\_zm_gametype::custom_spawn_init_func; - level._game_module_state_update_func = maps\mp\zombies\_zm_stats::survival_classic_custom_stat_update; - level._effect["human_disappears"] = loadfx( "maps/zombie/fx_zmb_returned_spawn_puff" ); - level._effect["zombie_disappears"] = loadfx( "maps/zombie/fx_zmb_returned_spawn_puff" ); - level.human_finish_bonus_points = 250; - level.human_bonus_points = 10; - level.zombie_penalty_points = 5; - level.human_bonus_period = 1; - level.zombie_penalty_period = 10; - level.zombie_player_kill_points = 50; - level.human_player_kill_points = 50; - level.human_player_suicide_penalty = 0; - level.score_rank_bonus = array( 1.5, 0.75, 0.5, 0.25 ); - - if ( isdefined( level.should_use_cia ) && level.should_use_cia ) - level.characterindex = 0; - else - level.characterindex = 1; - - level.graceperiodfunc = ::waitforhumanselection; - level.customalivecheck = ::cleansed_alive_check; - level thread onplayerconnect(); - maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zcleansed" ); - init_cleansed_powerup_fx(); -} - -onprecachegametype() -{ - level.playersuicideallowed = 1; - level.canplayersuicide = ::canplayersuicide; - level.suicide_weapon = "death_self_zm"; - precacheitem( "death_self_zm" ); - precachemodel( "zombie_pickup_perk_bottle" ); - precache_trophy(); - precacheshader( "faction_cdc" ); - precacheshader( "faction_cia" ); - init_default_zcleansed_powerups(); - maps\mp\zombies\_zm_turned::init(); - level thread maps\mp\gametypes_zm\_zm_gametype::init(); - maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zcleansed" ); - init_cleansed_powerups(); -} - -init_default_zcleansed_powerups() -{ - maps\mp\zombies\_zm_powerups::include_zombie_powerup( "the_cure" ); - maps\mp\zombies\_zm_powerups::include_zombie_powerup( "blue_monkey" ); - maps\mp\zombies\_zm_powerups::add_zombie_powerup( "the_cure", "zombie_pickup_perk_bottle", &"ZOMBIE_POWERUP_MAX_AMMO", maps\mp\zombies\_zm_powerups::func_should_never_drop, 0, 0, 1 ); - maps\mp\zombies\_zm_powerups::add_zombie_powerup( "blue_monkey", level.cymbal_monkey_model, &"ZOMBIE_POWERUP_MAX_AMMO", maps\mp\zombies\_zm_powerups::func_should_never_drop, 1, 0, 0 ); -} - -init_cleansed_powerup_fx() -{ - level._effect["powerup_on_caution"] = loadfx( "misc/fx_zombie_powerup_on_blue" ); -} - -onstartgametype() -{ - maps\mp\gametypes_zm\_zm_gametype::setup_classic_gametype(); - level thread makefindfleshstructs(); - flag_init( "start_supersprint" ); - level.custom_player_fake_death = ::empty; - level.custom_player_fake_death_cleanup = ::empty; - level.overrideplayerdamage = ::cleanseddamagechecks; - level.playerlaststand_func = ::cleansed_player_laststand; - level.onendgame = ::cleansedonendgame; - level.ontimelimit = ::cleansedontimelimit; - level.powerup_player_valid = ::cleansed_alive_check; - level.nml_zombie_spawners = level.zombie_spawners; - level.dodge_score_highlight = 1; - level.dodge_show_revive_icon = 1; - level.custom_max_zombies = 6; - level.custom_zombie_health = 200; - level.nml_dogs_enabled = 0; - level.timercountdown = 1; - level.initial_spawn = 1; - level.nml_reaction_interval = 2000; - level.nml_min_reaction_dist_sq = 1024; - level.nml_max_reaction_dist_sq = 5760000; - level.min_humans = 1; - level.no_end_game_check = 1; - level.zombie_health = level.zombie_vars["zombie_health_start"]; - level._get_game_module_players = undefined; - level.powerup_drop_count = 0; - level.is_zombie_level = 1; - level.player_becomes_zombie = ::onzombifyplayer; - level.player_kills_player = ::player_kills_player; - set_zombie_var( "zombify_player", 1 ); - set_zombie_var( "penalty_died", 1.0 ); - set_zombie_var( "penalty_downed", 1.0 ); - - if ( isdefined( level._zcleansed_weapon_progression ) ) - { - for ( i = 0; i < level._zcleansed_weapon_progression.size; i++ ) - addguntoprogression( level._zcleansed_weapon_progression[i] ); - } - - maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zcleansed", ::zcleansed_logic ); -} - -turnedlog( text ) -{ -/# - println( "TURNEDLOG: " + text + "\n" ); -#/ -} - -cleansed_player_laststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) -{ -/# - -#/ - self maps\mp\zombies\_zm_score::player_downed_penalty(); - - if ( isdefined( attacker ) && isplayer( attacker ) && attacker != self ) - { - if ( isdefined( self.hide_owner ) && self.hide_owner ) - attacker notify( "invisible_player_killed" ); - } - - if ( isdefined( self.is_zombie ) && self.is_zombie && deathanimduration == 0 ) - self stopsounds(); -} - -cleansed_alive_check( player ) -{ - if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.nuked ) && player.nuked || isdefined( player.is_in_process_of_zombify ) && player.is_in_process_of_zombify || isdefined( player.is_in_process_of_humanify ) && player.is_in_process_of_humanify ) - return false; - - return true; -} - -cleanseddamagechecks( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) -{ - if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.is_in_process_of_zombify ) && self.is_in_process_of_zombify || isdefined( self.is_in_process_of_humanify ) && self.is_in_process_of_humanify ) - return 0; - - if ( isdefined( self.nuked ) && self.nuked && eattacker != self.nuker && eattacker != self ) - return 0; - - if ( isdefined( eattacker ) && isplayer( eattacker ) && eattacker != self ) - { - if ( eattacker.team == self.team ) - return 0; - - if ( ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie ) == ( isdefined( self.is_zombie ) && self.is_zombie ) ) - return 0; - - if ( !cleansed_alive_check( eattacker ) ) - return 0; - - if ( isdefined( self.nuked ) && self.nuked && isdefined( self.nuker ) && eattacker != self.nuker ) - return 0; - - if ( isdefined( self.is_zombie ) && self.is_zombie && sweapon == "cymbal_monkey_zm" && smeansofdeath != "MOD_IMPACT" ) - { - level notify( "killed_by_decoy", eattacker, self ); - idamage = self.health + 666; - } - else - self.last_player_attacker = eattacker; -/# - -#/ - eattacker thread maps\mp\gametypes_zm\_weapons::checkhit( sweapon ); - - if ( !eattacker.is_zombie && eattacker maps\mp\zombies\_zm_powerups::is_insta_kill_active() ) - idamage = self.health + 666; - } - - if ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie ) - self playsoundtoplayer( "evt_player_swiped", self ); - - return self maps\mp\zombies\_zm::player_damage_override( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); -} - -custom_end_screen() -{ - players = get_players(); - winner = players[0]; - - foreach ( player in players ) - { - if ( isdefined( winner ) && player.score > winner.score ) - winner = player; - } - - if ( isdefined( level.last_human_standing ) ) - { - for ( i = 0; i < players.size; i++ ) - { - players[i].bonus_msg_hud = newclienthudelem( players[i] ); - players[i].bonus_msg_hud.alignx = "center"; - players[i].bonus_msg_hud.aligny = "middle"; - players[i].bonus_msg_hud.horzalign = "center"; - players[i].bonus_msg_hud.vertalign = "middle"; - players[i].bonus_msg_hud.y -= 130; - - if ( players[i] issplitscreen() ) - players[i].bonus_msg_hud.y += 70; - - players[i].bonus_msg_hud.foreground = 1; - players[i].bonus_msg_hud.fontscale = 5; - players[i].bonus_msg_hud.alpha = 0; - players[i].bonus_msg_hud.color = ( 1, 1, 1 ); - players[i].bonus_msg_hud.hidewheninmenu = 1; - players[i].bonus_msg_hud.font = "default"; - players[i].bonus_msg_hud settext( &"ZOMBIE_CLEANSED_SURVIVING_HUMAN_BONUS", level.last_human_standing.name ); - players[i].bonus_msg_hud changefontscaleovertime( 0.25 ); - players[i].bonus_msg_hud fadeovertime( 0.25 ); - players[i].bonus_msg_hud.alpha = 1; - players[i].bonus_msg_hud.fontscale = 2; - } - - wait 3.25; - } - - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - if ( isdefined( players[i].bonus_msg_hud ) ) - { - players[i].bonus_msg_hud changefontscaleovertime( 0.5 ); - players[i].bonus_msg_hud fadeovertime( 0.5 ); - players[i].bonus_msg_hud.alpha = 0; - players[i].bonus_msg_hud.fontscale = 5; - } - } - - wait 0.5; - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - if ( isdefined( players[i].bonus_msg_hud ) ) - players[i].bonus_msg_hud destroy(); - - players[i].game_over_hud = newclienthudelem( players[i] ); - players[i].game_over_hud.alignx = "center"; - players[i].game_over_hud.aligny = "middle"; - players[i].game_over_hud.horzalign = "center"; - players[i].game_over_hud.vertalign = "middle"; - players[i].game_over_hud.y -= 130; - players[i].game_over_hud.foreground = 1; - players[i].game_over_hud.fontscale = 3; - players[i].game_over_hud.alpha = 0; - players[i].game_over_hud.color = ( 1, 1, 1 ); - players[i].game_over_hud.hidewheninmenu = 1; - players[i].game_over_hud settext( &"ZOMBIE_GAME_OVER" ); - players[i].game_over_hud fadeovertime( 1 ); - players[i].game_over_hud.alpha = 1; - - if ( players[i] issplitscreen() ) - { - players[i].game_over_hud.fontscale = 2; - players[i].game_over_hud.y += 40; - } - - players[i].survived_hud = newclienthudelem( players[i] ); - players[i].survived_hud.alignx = "center"; - players[i].survived_hud.aligny = "middle"; - players[i].survived_hud.horzalign = "center"; - players[i].survived_hud.vertalign = "middle"; - players[i].survived_hud.y -= 100; - players[i].survived_hud.foreground = 1; - players[i].survived_hud.fontscale = 2; - players[i].survived_hud.alpha = 0; - players[i].survived_hud.color = ( 1, 1, 1 ); - players[i].survived_hud.hidewheninmenu = 1; - - if ( players[i] issplitscreen() ) - { - players[i].survived_hud.fontscale = 1.5; - players[i].survived_hud.y += 40; - } - - winner_text = &"ZOMBIE_CLEANSED_WIN"; - loser_text = &"ZOMBIE_CLEANSED_LOSE"; - - if ( isdefined( level.host_ended_game ) && level.host_ended_game ) - players[i].survived_hud settext( &"MP_HOST_ENDED_GAME" ); - else if ( players[i] == winner ) - players[i].survived_hud settext( winner_text ); - else - players[i].survived_hud settext( loser_text ); - - players[i].survived_hud fadeovertime( 1 ); - players[i].survived_hud.alpha = 1; - } -} - -allow_player_movement( allowed ) -{ - level.player_movement_suppressed = !allowed; - - foreach ( player in get_players() ) - { - if ( !( isdefined( player.in_zombify_call ) && player.in_zombify_call ) ) - player freezecontrolswrapper( level.player_movement_suppressed ); - } -} - -watch_game_start() -{ - level.start_audio_allowed = 1; - - level waittill( "cleansed_game_started" ); - - level.start_audio_allowed = 0; -} - -listen_to_the_doctor_pregame() -{ - thread watch_game_start(); - level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_start_single_0", undefined, undefined, 1, 4 ); - wait 4; - - if ( level.start_audio_allowed ) - { - level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_start_2", undefined, undefined, 1, 8 ); - wait 8; - } - - if ( level.start_audio_allowed ) - { - level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_start_3", undefined, undefined, 1, 8 ); - wait 4; - } - - if ( level.start_audio_allowed ) - level waittill( "cleansed_game_started" ); -} - -listen_to_the_doctor_started() -{ - level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_cure_found_line", undefined, undefined, 1, 8 ); - wait 8; -} - -listen_to_the_doctor_monkeys() -{ - level endon( "end_game" ); - - while ( true ) - { - level waittill( "killed_by_decoy", killer, killee ); - - if ( !isplayer( killee ) ) - continue; - - if ( isdefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) - continue; - - if ( !( isdefined( killer.heard_dr_monkey_killer ) && killer.heard_dr_monkey_killer ) ) - { - level.playing_turned_kill_vo = 1; - killer.heard_dr_monkey_killer = 1; - killer thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "dr_monkey_killer", undefined, undefined, 0 ); - } - - if ( !( isdefined( killee.heard_dr_monkey_killee ) && killee.heard_dr_monkey_killee ) ) - { - level.playing_turned_kill_vo = 1; - killee.heard_dr_monkey_killee = 1; - wait 0.25; - killee thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "dr_monkey_killee", undefined, undefined, 0 ); - } - - if ( isdefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) - { - wait 8; - level.playing_turned_kill_vo = 0; - } - } -} - -listen_to_the_doctor_human_deaths() -{ - level endon( "end_game" ); - - while ( true ) - { - level waittill( "killed_by_zombie", killer, killee ); - - wait 0.05; - - if ( isdefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) - continue; - - if ( !isdefined( killee.vo_human_killed_chance ) ) - killee.vo_human_killed_chance = 24; - - if ( randomint( 100 ) < killee.vo_human_killed_chance ) - { - level.playing_turned_kill_vo = 1; - killee thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "dr_human_killed", undefined, undefined, 0 ); - killee.vo_human_killed_chance = int( killee.vo_human_killed_chance * 0.5 ); - } - - if ( isdefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) - { - wait 4; - level.playing_turned_kill_vo = 0; - } - } -} - -listen_to_the_doctor_zombie_deaths() -{ - level endon( "end_game" ); - - while ( true ) - { - level waittill( "killed_by_human", killer, killee ); - - wait 0.05; - - if ( isdefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) - continue; - - if ( !isdefined( killer.vo_human_killer_chance ) ) - killer.vo_human_killer_chance = 24; - - if ( randomint( 100 ) < killer.vo_human_killer_chance ) - { - killer.vo_human_killer_chance = int( killer.vo_human_killer_chance * 0.5 ); - level.playing_turned_kill_vo = 1; - killer thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "dr_human_killer", undefined, undefined, 0 ); - } - - if ( isdefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) - { - wait 4; - level.playing_turned_kill_vo = 0; - } - } -} - -listen_to_the_doctor_endgame() -{ - wait 5; - - while ( maps\mp\gametypes_zm\_globallogic_utils::gettimeremaining() > 12000 ) - wait 1; - - r = randomint( 3 ); - - if ( r == 0 ) - level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_countdown0", undefined, undefined, 1, 4 ); - else if ( r == 1 ) - level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_countdown1", undefined, undefined, 1, 4 ); - else - level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_countdown2", undefined, undefined, 1, 4 ); - - while ( maps\mp\gametypes_zm\_globallogic_utils::gettimeremaining() > 500 ) - wait 1; - - level maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_ending", undefined, undefined, 1, 4 ); -} - -anysplitscreen() -{ - foreach ( player in get_players() ) - { - if ( player issplitscreen() ) - return true; - } - - return false; -} - -listen_to_the_doctor() -{ - listen_to_the_doctor_pregame(); - - if ( !anysplitscreen() ) - { - listen_to_the_doctor_started(); - thread listen_to_the_doctor_human_deaths(); - thread listen_to_the_doctor_zombie_deaths(); - thread listen_to_the_doctor_monkeys(); - } - - thread listen_to_the_doctor_endgame(); -} - -watch_survival_time() -{ - level endon( "end_game" ); - level notify( "new_human_suviving" ); - level endon( "new_human_suviving" ); - self endon( "zombify" ); - wait 10; - - if ( !isdefined( self.vo_human_survival_chance ) ) - self.vo_human_survival_chance = 24; - - while ( true ) - { - if ( !( isdefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) ) - { - if ( randomint( 100 ) < self.vo_human_survival_chance ) - { - self.vo_human_survival_chance = int( self.vo_human_survival_chance * 0.25 ); - level.playing_turned_kill_vo = 1; - self thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "dr_survival", undefined, undefined, 0 ); - wait 4; - level.playing_turned_kill_vo = 0; - } - } - - wait 5; - } -} - -zcleansed_logic() -{ - setdvar( "player_lastStandBleedoutTime", "0.05" ); - setmatchtalkflag( "DeadChatWithDead", 1 ); - setmatchtalkflag( "DeadChatWithTeam", 1 ); - setmatchtalkflag( "DeadHearTeamLiving", 1 ); - setmatchtalkflag( "DeadHearAllLiving", 1 ); - setmatchtalkflag( "EveryoneHearsEveryone", 1 ); - level.zombie_include_powerups["carpenter"] = 0; - level.noroundnumber = 1; - level._supress_survived_screen = 1; - doors = getentarray( "zombie_door", "targetname" ); - - foreach ( door in doors ) - door setinvisibletoall(); - - level thread maps\mp\zombies\_zm_blockers::open_all_zbarriers(); - level thread delay_box_hide(); - flag_wait( "initial_players_connected" ); - level.gamestarttime = gettime(); - level.gamelengthtime = undefined; - level.custom_spawnplayer = ::respawn_cleansed_player; - allow_player_movement( 0 ); - setup_players(); - flag_wait( "initial_blackscreen_passed" ); - level thread listen_to_the_doctor(); - level thread playturnedmusic(); - level notify( "start_fullscreen_fade_out" ); - wait 1.5; - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - players[i] thread create_match_start_message( &"ZOMBIE_FIND_THE_CURE", 3.0 ); - - allow_player_movement( 1 ); - spawn_initial_cure_powerup(); - waitforhumanselection(); - level notify( "cleansed_game_started" ); - level thread leaderwatch(); - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - players[i] thread create_match_start_message( &"ZOMBIE_MOST_TIME_AS_HUMAN_TO_WIN", 3.0 ); - - wait 1.2; - flag_clear( "pregame" ); - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - players[i] thread destroystartmsghud(); - - registertimelimit( 0, 1440 ); - level.discardtime = gettime() - level.starttime; - level thread watch_for_end_game(); - wait_for_round_end(); - allow_player_movement( 0 ); - wait_network_frame(); - award_round_end_bonus(); - level notify( "end_game" ); -} - -wait_for_round_end() -{ - level endon( "early_game_end" ); - level endon( "normal_game_end" ); - - while ( maps\mp\gametypes_zm\_globallogic_utils::gettimeremaining() > 0 ) - wait 1; -} - -end_game_early() -{ -/# - iprintlnbold( "SOLO GAME - RELEASE ONLY" ); - return; -#/ - level.forcedend = 1; - level notify( "early_game_end" ); - level notify( "end_game" ); -} - -watch_for_end_game() -{ - level waittill( "end_game" ); - - registertimelimit( 0, 0 ); - setgameendtime( 0 ); -} - -cleansedontimelimit() -{ - level notify( "normal_game_end" ); -} - -cleansedonendgame( winningteam ) -{ - -} - -create_match_start_message( text, duration ) -{ - level endon( "end_game" ); - self endon( "disconnect" ); - self notify( "kill_match_start_message" ); - self endon( "kill_match_start_message" ); - - if ( !isdefined( self.match_start_msg_hud ) ) - { - self.match_start_msg_hud = newclienthudelem( self ); - self.match_start_msg_hud.alignx = "center"; - self.match_start_msg_hud.aligny = "middle"; - self.match_start_msg_hud.horzalign = "center"; - self.match_start_msg_hud.vertalign = "middle"; - self.match_start_msg_hud.y -= 130; - self.match_start_msg_hud.fontscale = 5; - self.match_start_msg_hud.foreground = 1; - - if ( self issplitscreen() ) - self.match_start_msg_hud.y += 70; - - self.match_start_msg_hud.color = ( 1, 1, 1 ); - self.match_start_msg_hud.hidewheninmenu = 1; - self.match_start_msg_hud.font = "default"; - } - - self.match_start_msg_hud settext( text ); - self.match_start_msg_hud changefontscaleovertime( 0.25 ); - self.match_start_msg_hud fadeovertime( 0.25 ); - self.match_start_msg_hud.alpha = 1; - self.match_start_msg_hud.fontscale = 2; - - if ( self issplitscreen() ) - self.match_start_msg_hud.fontscale = 1.5; - - wait( duration ); - - if ( !isdefined( self.match_start_msg_hud ) ) - return; - - self.match_start_msg_hud changefontscaleovertime( 0.5 ); - self.match_start_msg_hud fadeovertime( 0.5 ); - self.match_start_msg_hud.alpha = 0; -} - -destroystartmsghud() -{ - level endon( "end_game" ); - self endon( "disconnect" ); - - if ( !isdefined( self.match_start_msg_hud ) ) - return; - - self.match_start_msg_hud destroy(); - self.match_start_msg_hud = undefined; -} - -delay_box_hide() -{ - wait 2.0; - start_chest = getstruct( "start_chest", "script_noteworthy" ); - - if ( isdefined( start_chest ) ) - start_chest maps\mp\zombies\_zm_magicbox::hide_chest(); -} - -onplayerconnect() -{ - for (;;) - { - level waittill( "connected", player ); - - player thread onplayerlaststand(); - player thread onplayerdisconnect(); - player thread setup_player(); - player thread rewardsthink(); - } -} - -onplayerlaststand() -{ - self endon( "disconnect" ); - - while ( true ) - { - self waittill( "player_downed" ); - - self takeallweapons(); - } -} - -onplayerdisconnect() -{ - level endon( "end_game" ); - - self waittill( "disconnect" ); - - if ( get_players().size <= 1 ) - end_game_early(); - else if ( !( isdefined( level.ingraceperiod ) && level.ingraceperiod ) ) - { - thread checkzombiehumanratio(); - wait 2; - players = get_players(); - - foreach ( player in players ) - player.nuked = undefined; - } -} - -zombie_ramp_up() -{ - self notify( "zombie_ramp_up" ); - self endon( "zombie_ramp_up" ); - self endon( "death_or_disconnect" ); - self endon( "humanify" ); - - if ( isdefined( level.cleansed_zombie_round ) ) - self.maxhealth = maps\mp\zombies\_zm::ai_zombie_health( level.cleansed_zombie_round ); - else - self.maxhealth = maps\mp\zombies\_zm::ai_zombie_health( 2 ); - - self.health = self.maxhealth; -} - -precache_trophy() -{ - -} - -create_trophy() -{ - -} - -give_trophy() -{ - if ( !self.has_trophy ) - { - self setclientfield( "player_eyes_special", 1 ); - self setclientfield( "player_has_eyes", 0 ); - wait_network_frame(); - - if ( cleansed_alive_check( self ) ) - self setclientfield( "player_has_eyes", self.is_zombie ); - - self.has_trophy = 1; - } -} - -remove_trophy() -{ - if ( self.has_trophy ) - { - self setclientfield( "player_eyes_special", 0 ); - self setclientfield( "player_has_eyes", 0 ); - wait_network_frame(); - - if ( cleansed_alive_check( self ) ) - self setclientfield( "player_has_eyes", self.is_zombie ); - - self.has_trophy = 0; - } -} - -enthrone( player ) -{ - player endon( "dethrone" ); - player endon( "disconnect" ); - - while ( true ) - { - if ( cleansed_alive_check( player ) && player.is_zombie ) - { - if ( !player.has_trophy ) - player give_trophy(); - } - else if ( player.has_trophy ) - player remove_trophy(); - - wait 0.1; - } -} - -dethrone( player ) -{ - player notify( "dethrone" ); - player remove_trophy(); -} - -cleansed_set_leader( leader ) -{ - if ( isdefined( leader ) && isdefined( level.cleansed_leader ) ) - { - if ( level.cleansed_leader != leader ) - { - dethrone( level.cleansed_leader ); - level.cleansed_leader = leader; - level thread enthrone( level.cleansed_leader ); - } - - return; - } - - if ( isdefined( leader ) && !isdefined( level.cleansed_leader ) ) - { - level.cleansed_leader = leader; - level thread enthrone( level.cleansed_leader ); - return; - } - - if ( !isdefined( leader ) && isdefined( level.cleansed_leader ) ) - { - if ( isdefined( level.cleansed_leader ) ) - dethrone( level.cleansed_leader ); - - level.cleansed_leader = leader; - return; - } -} - -leaderwatch() -{ - level endon( "early_game_end" ); - level endon( "normal_game_end" ); - create_trophy(); - cleansed_set_leader( undefined ); - - while ( true ) - { - hiscore = -1; - leader = undefined; - players = get_players(); - - foreach ( player in players ) - { - if ( player.score > hiscore ) - hiscore = player.score; - } - - foreach ( player in players ) - { - if ( player.score >= hiscore ) - { - if ( isdefined( leader ) ) - { - leader = undefined; - break; - } - - leader = player; - } - } - - cleansed_set_leader( leader ); - wait 0.25; - } -} - -cover_transition() -{ - self thread fadetoblackforxsec( 0, 0.15, 0.05, 0.1 ); - wait 0.1; -} - -disappear_in_flash( washuman ) -{ - playsoundatposition( "zmb_bolt", self.origin ); - - if ( washuman ) - playfx( level._effect["human_disappears"], self.origin ); - else - playfx( level._effect["zombie_disappears"], self.origin ); - - self ghost(); -} - -humanifyplayer( for_killing ) -{ -/# - -#/ - self freezecontrolswrapper( 1 ); - self thread cover_transition(); - self disappear_in_flash( 1 ); - self.team = self.prevteam; - self.pers["team"] = self.prevteam; - self.sessionteam = self.prevteam; - self turnedhuman(); - for_killing waittill_notify_or_timeout( "respawned", 0.75 ); - wait_network_frame(); - checkzombiehumanratio( self ); - self.last_player_attacker = undefined; - self freezecontrolswrapper( level.player_movement_suppressed ); - self thread watch_survival_time(); -/# - -#/ -} - -onzombifyplayer() -{ -/# - -#/ - if ( isdefined( self.in_zombify_call ) && self.in_zombify_call ) - return; - - self.in_zombify_call = 1; - - while ( isdefined( level.in_zombify_call ) && level.in_zombify_call ) - wait 0.1; - - level.in_zombify_call = 1; - self freezecontrolswrapper( 1 ); - - if ( isdefined( self.last_player_attacker ) && isplayer( self.last_player_attacker ) && ( isdefined( self.last_player_attacker.is_zombie ) && self.last_player_attacker.is_zombie ) ) - { - - } - - if ( isdefined( self.is_zombie ) && self.is_zombie ) - { -/# - -#/ - self check_for_drops( 0 ); - } - else if ( isdefined( self.last_player_attacker ) && isplayer( self.last_player_attacker ) && ( isdefined( self.last_player_attacker.is_zombie ) && self.last_player_attacker.is_zombie ) ) - { -/# - -#/ - self check_for_drops( 1 ); - self.team = level.zombie_team; - self.pers["team"] = level.zombie_team; - self.sessionteam = level.zombie_team; - self.last_player_attacker thread humanifyplayer( self ); - self.player_was_turned_by = self.last_player_attacker; - } - else - { -/# - -#/ - self check_for_drops( 1 ); - self player_suicide(); - checkzombiehumanratio( undefined, self ); - } - - self setclientfield( "player_has_eyes", 0 ); - - if ( isdefined( self.is_zombie ) && self.is_zombie ) - { - - } - - self notify( "zombified" ); - self disappear_in_flash( 0 ); - self cover_transition(); - self notify( "clear_red_flashing_overlay" ); - self.zombification_time = gettime() / 1000; - self.last_player_attacker = undefined; - self maps\mp\zombies\_zm_laststand::laststand_enable_player_weapons(); - self.ignoreme = 1; - - if ( isdefined( self.revivetrigger ) ) - self.revivetrigger delete(); - - self.revivetrigger = undefined; - self reviveplayer(); - self maps\mp\zombies\_zm_turned::turn_to_zombie(); - self freezecontrolswrapper( level.player_movement_suppressed ); - self thread zombie_ramp_up(); - level.in_zombify_call = 0; - self.in_zombify_call = 0; -/# - -#/ -} - -playerfakedeath( vdir ) -{ - if ( !( isdefined( self.is_zombie ) && self.is_zombie ) ) - { - self endon( "disconnect" ); - level endon( "game_module_ended" ); - level notify( "fake_death" ); - self notify( "fake_death" ); - self enableinvulnerability(); - self takeallweapons(); - self freezecontrolswrapper( 1 ); - self.ignoreme = 1; - origin = self.origin; - xyspeed = ( 0, 0, 0 ); - angles = self getplayerangles(); - angles = ( angles[0], angles[1], angles[2] + randomfloatrange( -5, 5 ) ); - - if ( isdefined( vdir ) && length( vdir ) > 0 ) - { - xyspeedmag = 40 + randomint( 12 ) + randomint( 12 ); - xyspeed = xyspeedmag * vectornormalize( ( vdir[0], vdir[1], 0 ) ); - } - - linker = spawn( "script_origin", ( 0, 0, 0 ) ); - linker.origin = origin; - linker.angles = angles; - self._fall_down_anchor = linker; - self playerlinkto( linker ); - self playsoundtoplayer( "zmb_player_death_fall", self ); - origin = playerphysicstrace( origin, origin + xyspeed ); - origin += vectorscale( ( 0, 0, -1 ), 52.0 ); - lerptime = 0.5; - linker moveto( origin, lerptime, lerptime ); - linker rotateto( angles, lerptime, lerptime ); - self freezecontrolswrapper( 1 ); - - linker waittill( "movedone" ); - - self giveweapon( "death_throe_zm" ); - self switchtoweapon( "death_throe_zm" ); - bounce = randomint( 4 ) + 8; - origin = origin + ( 0, 0, bounce ) - xyspeed * 0.1; - lerptime = bounce / 50.0; - linker moveto( origin, lerptime, 0, lerptime ); - - linker waittill( "movedone" ); - - origin = origin + ( 0, 0, bounce * -1 ) + xyspeed * 0.1; - lerptime /= 2.0; - linker moveto( origin, lerptime, lerptime ); - - linker waittill( "movedone" ); - - linker moveto( origin, 5, 0 ); - wait 5; - linker delete(); - self.ignoreme = 0; - self takeweapon( "death_throe_zm" ); - self disableinvulnerability(); - self freezecontrolswrapper( 0 ); - } -} - -onspawnzombie() -{ - -} - -makefindfleshstructs() -{ - structs = getstructarray( "spawn_location", "script_noteworthy" ); - - foreach ( struct in structs ) - struct.script_string = "find_flesh"; -} - -setup_players() -{ -/# - if ( getdvarint( _hash_99BF96D1 ) != 0 ) - { - foreach ( spawnpoint in level._turned_zombie_respawnpoints ) - { - text = ""; - color = ( 0, 1, 0 ); - - if ( !isdefined( spawnpoint.angles ) ) - { - text = "No Angles Defined"; - color = ( 1, 0, 0 ); - spawnpoint.angles = ( 0, 0, 0 ); - } - } - } -#/ -} - -setup_player() -{ - hotjoined = flag( "initial_players_connected" ); - flag_wait( "initial_players_connected" ); - wait 0.05; - self ghost(); - self freezecontrolswrapper( 1 ); - self.ignoreme = 0; - self.score = 0; - self.characterindex = level.characterindex; - self takeallweapons(); - self giveweapon( "knife_zm" ); - self give_start_weapon( 1 ); - self.prevteam = self.team; - self.no_revive_trigger = 1; - self.human_score = 0; - self thread player_score_update(); - self.is_zombie = 0; - self.has_trophy = 0; - self.home_team = self.team; - - if ( self.home_team == "axis" ) - self.home_team = "team3"; - - self thread wait_turn_to_zombie( hotjoined ); -} - -wait_turn_to_zombie( hot ) -{ - if ( hot ) - { - self thread fadetoblackforxsec( 0, 1.25, 0.05, 0.25 ); - wait 1; - } - - self.is_zombie = 0; - self turn_to_zombie(); - self freezecontrolswrapper( level.player_movement_suppressed ); -} - -addguntoprogression( gunname ) -{ - if ( !isdefined( level.gunprogression ) ) - level.gunprogression = []; - - level.gunprogression[level.gunprogression.size] = gunname; -} - -check_spawn_cymbal_monkey( origin, weapon ) -{ - chance = -0.05; - - if ( !self hasweapon( "cymbal_monkey_zm" ) || self getweaponammoclip( "cymbal_monkey_zm" ) < 1 ) - { - if ( weapon == "cymbal_monkey_zm" || randomfloat( 1 ) < chance ) - { - self notify( "awarded_cymbal_monkey" ); - level.spawned_cymbal_monkey = spawn_cymbalmonkey( origin ); - level.spawned_cymbal_monkey thread delete_spawned_monkey_on_turned( self ); - return true; - } - } - - return false; -} - -delete_spawned_monkey_on_turned( player ) -{ - wait 1; - - while ( isdefined( self ) && !( isdefined( player.is_zombie ) && player.is_zombie ) ) - wait_network_frame(); - - if ( isdefined( self ) ) - { - self maps\mp\zombies\_zm_powerups::powerup_delete(); - self notify( "powerup_timedout" ); - } -} - -rewardsthink() -{ - self endon( "_zombie_game_over" ); - self endon( "disconnect" ); - - while ( isdefined( self ) ) - { - self waittill( "killed_a_zombie_player", einflictor, target, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); - - if ( !( isdefined( self.is_zombie ) && self.is_zombie ) ) - { - if ( self check_spawn_cymbal_monkey( target.origin, sweapon ) ) - target.suppress_drops = 1; - } - } -} - -shotgunloadout() -{ - self endon( "_zombie_game_over" ); - self endon( "disconnect" ); - self endon( "bled_out" ); - self endon( "zombify" ); - level.cymbal_monkey_clone_weapon = "rottweil72_zm"; - - if ( !self hasweapon( "rottweil72_zm" ) ) - { - self giveweapon( "rottweil72_zm" ); - self switchtoweapon( "rottweil72_zm" ); - } - - if ( !( isdefined( self.is_zombie ) && self.is_zombie ) && !self hasweapon( level.start_weapon ) ) - { - if ( !self hasweapon( "knife_zm" ) ) - self giveweapon( "knife_zm" ); - - self give_start_weapon( 0 ); - } - - if ( self hasweapon( "rottweil72_zm" ) ) - { - self setweaponammoclip( "rottweil72_zm", 2 ); - self setweaponammostock( "rottweil72_zm", 0 ); - } - - if ( self hasweapon( level.start_weapon ) ) - self givemaxammo( level.start_weapon ); - - if ( self hasweapon( self get_player_lethal_grenade() ) ) - self getweaponammoclip( self get_player_lethal_grenade() ); - else - self giveweapon( self get_player_lethal_grenade() ); - - self setweaponammoclip( self get_player_lethal_grenade(), 2 ); - - if ( !( isdefined( self.random_human ) && self.random_human ) ) - { - - } -} - -gunprogressionthink() -{ - self endon( "_zombie_game_over" ); - self endon( "disconnect" ); - self endon( "bled_out" ); - self endon( "zombify" ); - counter = 0; - - if ( isdefined( level.gunprogression ) && !isdefined( level.cymbal_monkey_clone_weapon ) ) - level.cymbal_monkey_clone_weapon = level.gunprogression[0]; - - last = level.start_weapon; - - if ( !self hasweapon( self get_player_lethal_grenade() ) ) - self giveweapon( self get_player_lethal_grenade() ); - - self setweaponammoclip( self get_player_lethal_grenade(), 2 ); - - if ( !( isdefined( self.random_human ) && self.random_human ) ) - { - - } - - self disableweaponcycling(); - - while ( !( isdefined( self.is_zombie ) && self.is_zombie ) ) - { - if ( !isdefined( level.gunprogression[counter] ) ) - break; - - self disableweaponcycling(); - self giveweapon( level.gunprogression[counter] ); - self switchtoweapon( level.gunprogression[counter] ); - self waittill_notify_or_timeout( "weapon_change_complete", 0.5 ); - - if ( isdefined( last ) && self hasweapon( last ) ) - self takeweapon( last ); - - last = level.gunprogression[counter]; - - while ( true ) - { - self waittill( "killed_a_zombie_player", einflictor, target, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); - - if ( isdefined( sweapon ) && level.gunprogression[counter] == sweapon ) - break; - } - - counter++; - } - - self giveweapon( level.start_weapon ); - self switchtoweapon( level.start_weapon ); - - self waittill( "weapon_change_complete" ); - - if ( isdefined( last ) && self hasweapon( last ) ) - self takeweapon( last ); - - while ( true ) - { - self waittill( "killed_a_zombie_player", einflictor, target, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); - - if ( isdefined( sweapon ) && level.start_weapon == sweapon ) - { - self notify( "gun_game_achievement" ); - break; - } - } -} - -waitforhumanselection() -{ - level waittill( "initial_human_selected" ); -} - -checkzombiehumanratio( playertomove, playertoignore ) -{ - zombiecount = 0; - humancount = 0; - zombieexist = 0; - humanexist = 0; - earliestzombie = undefined; - earliestzombietime = 99999999; - - if ( get_players().size <= 1 ) - end_game_early(); - - while ( isdefined( level.checking_human_zombie_ratio ) && level.checking_human_zombie_ratio ) - wait 0.05; - - level.checking_human_zombie_ratio = 1; - - if ( isdefined( playertomove ) ) - { - someonebecominghuman = 0; - players = get_players(); - - foreach ( player in players ) - { - if ( isdefined( player.is_in_process_of_humanify ) && player.is_in_process_of_humanify ) - someonebecominghuman = 1; - } - - if ( !( isdefined( someonebecominghuman ) && someonebecominghuman ) ) - playertomove turn_to_human(); - - level.checking_human_zombie_ratio = 0; - return; - } - - players = get_players(); - - foreach ( player in players ) - { - if ( isdefined( playertoignore ) && playertoignore == player ) - continue; - - if ( !( isdefined( player.is_zombie ) && player.is_zombie ) && !( isdefined( player.is_in_process_of_zombify ) && player.is_in_process_of_zombify ) ) - { - humancount++; - humanexist = 1; - continue; - } - - zombiecount++; - zombieexist = 1; - - if ( isdefined( player.zombification_time ) && player.zombification_time < earliestzombietime ) - { - earliestzombie = player; - earliestzombietime = player.zombification_time; - } - } - - if ( humancount > 1 ) - { - players = get_players( "allies" ); - - if ( isdefined( players ) && players.size > 0 ) - { - player = random( players ); - player thread cover_transition(); - player disappear_in_flash( 1 ); -/# - -#/ - player turn_to_zombie(); - zombiecount++; - } - } - - if ( !humanexist ) - { - players = get_players( level.zombie_team ); - - if ( isdefined( players ) && players.size > 0 ) - { - player = random( players ); - player thread cover_transition(); - player disappear_in_flash( 0 ); - player.random_human = 1; -/# - -#/ - player turn_to_human(); - player.random_human = 0; - zombiecount--; - } - } - - level.checking_human_zombie_ratio = 0; -} - -get_player_rank() -{ - level.player_score_sort = []; - players = get_players(); - - foreach ( player in players ) - { - for ( index = 0; index < level.player_score_sort.size && player.score < level.player_score_sort[index].score; index++ ) - { - - } - - arrayinsert( level.player_score_sort, player, index ); - } - - for ( index = 0; index < level.player_score_sort.size; index++ ) - { - if ( self == level.player_score_sort[index] ) - return index; - } -/# - assertmsg( "This should not happen" ); -#/ - return 0; -} - -player_add_score( bonus ) -{ - mult = 1; - - if ( isdefined( self.is_zombie ) && self.is_zombie ) - mult = level.zombie_vars[level.zombie_team]["zombie_point_scalar"]; - else - mult = level.zombie_vars["allies"]["zombie_point_scalar"]; - - self maps\mp\zombies\_zm_score::add_to_player_score( bonus * mult ); -} - -player_sub_score( penalty ) -{ - penalty = int( min( self.score, penalty ) ); - self maps\mp\zombies\_zm_score::add_to_player_score( penalty * -1 ); -} - -player_suicide() -{ - self player_sub_score( level.human_player_suicide_penalty ); -/# - if ( get_players().size < 2 ) - { - self.intermission = 0; - thread spawn_initial_cure_powerup(); - } -#/ -} - -player_kills_player( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) -{ - score_multiplier = 1; - - if ( !( isdefined( eattacker.is_zombie ) && eattacker.is_zombie ) && isdefined( level.zombie_player_kill_points ) ) - { - level notify( "killed_by_human", eattacker, self ); - eattacker player_add_score( int( score_multiplier * level.zombie_player_kill_points ) ); - eattacker maps\mp\zombies\_zm_stats::add_global_stat( "PLAYER_KILLS", 1 ); - - if ( smeansofdeath == "MOD_GRENADE" || smeansofdeath == "MOD_GRENADE_SPLASH" ) - { - eattacker maps\mp\zombies\_zm_stats::increment_client_stat( "grenade_kills" ); - eattacker maps\mp\zombies\_zm_stats::increment_player_stat( "grenade_kills" ); - } - } - - if ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie && isdefined( level.human_player_kill_points ) ) - { - level notify( "killed_by_zombie", eattacker, self ); - eattacker player_add_score( int( score_multiplier * level.human_player_kill_points ) ); - eattacker maps\mp\zombies\_zm_stats::add_global_stat( "PLAYER_RETURNS", 1 ); - } -} - -award_round_end_bonus() -{ - level notify( "stop_player_scores" ); - wait 0.25; - level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "dr_time_line", undefined, undefined, 1 ); - - while ( maps\mp\zombies\_zm_laststand::player_any_player_in_laststand() || isdefined( level.in_zombify_call ) && level.in_zombify_call ) - wait 0.25; - - hiscore = -1; - - foreach ( player in get_players() ) - { - if ( !( isdefined( player.is_zombie ) && player.is_zombie ) ) - { - player player_add_score( level.human_finish_bonus_points ); - level.last_human_standing = player; - } - - if ( player.score > hiscore ) - hiscore = player.score; - } - - foreach ( player in get_players() ) - { - if ( player.score >= hiscore ) - { - player.team = player.prevteam; - player.pers["team"] = player.prevteam; - player.sessionteam = player.prevteam; - player maps\mp\zombies\_zm_stats::increment_client_stat( "wins" ); - player maps\mp\zombies\_zm_stats::add_client_stat( "losses", -1 ); - player adddstat( "skill_rating", 1.0 ); - player setdstat( "skill_variance", 1.0 ); - - if ( gamemodeismode( level.gamemode_public_match ) ) - { - player maps\mp\zombies\_zm_stats::add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "wins", 1 ); - player maps\mp\zombies\_zm_stats::add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "losses", -1 ); - } - - continue; - } - - player.team = level.zombie_team; - player.pers["team"] = level.zombie_team; - player.sessionteam = level.zombie_team; - player setdstat( "skill_rating", 0.0 ); - player setdstat( "skill_variance", 1.0 ); - } -} - -player_score_update() -{ - self endon( "_zombie_game_over" ); - self endon( "disconnect" ); - level endon( "stop_player_scores" ); - waittime = 0.05; - - while ( true ) - { - self waittill_any_or_timeout( waittime, "zombify", "humanify" ); - - if ( !( isdefined( self._can_score ) && self._can_score ) ) - continue; - - if ( isdefined( level.hostmigrationtimer ) && level.hostmigrationtimer ) - continue; - - if ( !( isdefined( level.ingraceperiod ) && level.ingraceperiod ) ) - { - if ( !cleansed_alive_check( self ) ) - waittime = 0.05; - else if ( isdefined( self.is_zombie ) && self.is_zombie ) - { - waittime = level.zombie_penalty_period; - self player_sub_score( level.zombie_penalty_points ); - } - else - { - waittime = level.human_bonus_period; - self player_add_score( level.human_bonus_points ); - } - } - } -} - -respawn_cleansed_player() -{ - spawnpoint = self maps\mp\zombies\_zm_turned::getspawnpoint(); - self.sessionstate = "playing"; - self allowspectateteam( "freelook", 0 ); - self spawn( spawnpoint.origin, spawnpoint.angles ); - self notify( "stop_flame_damage" ); - self reviveplayer(); - self.nuked = 0; - self.nuker = undefined; - self.suppress_drops = 0; - self.is_burning = 0; - self.is_zombie = 0; - self.ignoreme = 0; - self freezecontrolswrapper( level.player_movement_suppressed ); - self notify( "respawned" ); -} - -zcleansed_zombie_powerup_grab( powerup, zombie_player ) -{ - if ( !cleansed_alive_check( zombie_player ) ) - return 0; - - switch ( powerup.powerup_name ) - { - case "the_cure": - level notify( "initial_human_selected" ); - zombie_player freezecontrolswrapper( 1 ); - zombie_player disappear_in_flash( 0 ); - zombie_player turn_to_human(); - players = get_players(); - - foreach ( player in players ) - { - if ( player.is_zombie ) - player thread zombie_ramp_up(); - } - - break; - default: - if ( isdefined( level.cleansed_powerups[powerup.powerup_name] ) ) - { - if ( isdefined( level.cleansed_powerups[powerup.powerup_name].callback ) ) - powerup thread [[ level.cleansed_powerups[powerup.powerup_name].callback ]]( zombie_player ); - } - } -} - -zcleansed_powerup_grab( powerup, player ) -{ - if ( !cleansed_alive_check( player ) ) - return 0; - - switch ( powerup.powerup_name ) - { - case "blue_monkey": - player maps\mp\zombies\_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); - player setweaponammoclip( "cymbal_monkey_zm", 1 ); - player notify( "powerup_blue_monkey" ); - break; - default: - if ( isdefined( level.cleansed_powerups[powerup.powerup_name] ) ) - { - if ( isdefined( level.cleansed_powerups[powerup.powerup_name].callback ) ) - powerup thread [[ level.cleansed_powerups[powerup.powerup_name].callback ]]( player ); - } - } -} - -zcleansed_powerup_custom_time_logic( powerup ) -{ - if ( powerup.powerup_name == "the_cure" ) - return 0; - - return 15; -} - -spawn_initial_cure_powerup() -{ - struct = random( level._turned_powerup_spawnpoints ); - maps\mp\zombies\_zm_powerups::specific_powerup_drop( "the_cure", struct.origin ); -} - -spawn_cymbalmonkey( origin ) -{ - monkey = maps\mp\zombies\_zm_powerups::specific_powerup_drop( "blue_monkey", origin ); - return monkey; -} - -check_for_drops( washuman ) -{ - if ( !isdefined( level.cleansed_kills_for_drops ) ) - level.cleansed_kills_for_drops = 0; - - if ( isdefined( self.nuked ) && self.nuked || isdefined( self.suppress_drops ) && self.suppress_drops ) - return; - - level.cleansed_kills_for_drops++; - chance = ( level.cleansed_kills_for_drops - 2 ) / level.cleansed_kills_for_drops; - - if ( chance > 0 ) - { - r = randomfloatrange( 0, 1 ); - - if ( r < chance ) - { - self thread drop_powerup( washuman ); - level.cleansed_kills_for_drops = 0; - } - } -} - -add_cleansed_powerup( name, powerupmodel, text, team, zombie_death_frequency, human_death_frequency, callback ) -{ - if ( !isdefined( level.cleansed_powerups ) ) - level.cleansed_powerups = []; - - precachemodel( powerupmodel ); - - if ( !isdefined( level.zombie_powerups[name] ) ) - { - maps\mp\zombies\_zm_powerups::include_zombie_powerup( name ); - maps\mp\zombies\_zm_powerups::add_zombie_powerup( name, powerupmodel, text, maps\mp\zombies\_zm_powerups::func_should_never_drop, 0, team == 2, team == 1 ); - - if ( !isdefined( level.statless_powerups ) ) - level.statless_powerups = []; - - level.statless_powerups[name] = 1; - } - - powerup = spawnstruct(); - powerup.name = name; - powerup.model = powerupmodel; - powerup.team = team; - powerup.callback = callback; - powerup.zfrequency = zombie_death_frequency; - powerup.hfrequency = human_death_frequency; - level.cleansed_powerups[name] = powerup; -} - -init_cleansed_powerups() -{ - level._effect["powerup_on_solo"] = loadfx( "misc/fx_zombie_powerup_on_blue" ); - add_cleansed_powerup( "green_nuke", "zombie_bomb", &"ZOMBIE_THIS_IS_A_BUG", 0, 0.4, 0, ::turned_powerup_green_nuke ); - add_cleansed_powerup( "green_double", "zombie_x2_icon", &"ZOMBIE_THIS_IS_A_BUG", 0, 1, 0, ::turned_powerup_green_double ); - add_cleansed_powerup( "green_insta", "zombie_skull", &"ZOMBIE_THIS_IS_A_BUG", 0, 0.1, 0, ::turned_powerup_green_insta ); - add_cleansed_powerup( "green_ammo", "zombie_ammocan", &"ZOMBIE_POWERUP_MAX_AMMO", 0, 1, 0, ::turned_powerup_green_ammo ); - add_cleansed_powerup( "green_monkey", level.cymbal_monkey_model, &"ZOMBIE_THIS_IS_A_BUG", 0, 0.4, 0, ::turned_powerup_green_monkey ); - add_cleansed_powerup( "red_nuke", "zombie_bomb", &"ZOMBIE_THIS_IS_A_BUG", 1, 0, 0.4, ::turned_powerup_red_nuke ); - add_cleansed_powerup( "red_ammo", "zombie_ammocan", &"ZOMBIE_THIS_IS_A_BUG", 1, 0, 1, ::turned_powerup_red_ammo ); - add_cleansed_powerup( "red_double", "zombie_x2_icon", &"ZOMBIE_THIS_IS_A_BUG", 1, 0, 1, ::turned_powerup_red_double ); - add_cleansed_powerup( "yellow_double", "zombie_x2_icon", &"ZOMBIE_THIS_IS_A_BUG", 2, 0.1, 0.1, ::turned_powerup_yellow_double ); - add_cleansed_powerup( "yellow_nuke", "zombie_bomb", &"ZOMBIE_THIS_IS_A_BUG", 2, 0.01, 0.01, ::turned_powerup_yellow_nuke ); - level.cleansed_powerup_history_depth = []; - level.cleansed_powerup_history_depth[0] = 2; - level.cleansed_powerup_history_depth[1] = 1; - level.cleansed_powerup_history = []; - level.cleansed_powerup_history[0] = []; - level.cleansed_powerup_history[1] = []; - level.cleansed_powerup_history_last = []; - level.cleansed_powerup_history_last[0] = 0; - level.cleansed_powerup_history_last[1] = 0; - - for ( i = 0; i < level.cleansed_powerup_history_depth[0]; i++ ) - { - level.cleansed_powerup_history[0][i] = "none"; - level.cleansed_powerup_history[1][i] = "none"; - } -} - -pick_a_powerup( washuman ) -{ - total = 0; - - foreach ( powerup in level.cleansed_powerups ) - { - powerup.recent = 0; - - for ( i = 0; i < level.cleansed_powerup_history_depth[washuman]; i++ ) - { - if ( level.cleansed_powerup_history[washuman][i] == powerup.name ) - powerup.recent = 1; - } - - if ( powerup.recent ) - continue; - - if ( washuman ) - { - total += powerup.hfrequency; - continue; - } - - total += powerup.zfrequency; - } - - if ( total == 0 ) - return undefined; - - r = randomfloat( total ); - - foreach ( powerup in level.cleansed_powerups ) - { - if ( powerup.recent ) - continue; - - if ( washuman ) - r -= powerup.hfrequency; - else - r -= powerup.zfrequency; - - if ( r <= 0 ) - { - level.cleansed_powerup_history[washuman][level.cleansed_powerup_history_last[washuman]] = powerup.name; - level.cleansed_powerup_history_last[washuman]++; - - if ( level.cleansed_powerup_history_last[washuman] >= level.cleansed_powerup_history_depth[washuman] ) - level.cleansed_powerup_history_last[washuman] = 0; - - return powerup; - } - } - - return undefined; -} - -drop_powerup( washuman ) -{ - powerup = pick_a_powerup( washuman ); - - if ( isdefined( powerup ) ) - { - origin = self.origin; - wait 0.25; - maps\mp\zombies\_zm_powerups::specific_powerup_drop( powerup.name, origin ); - } -} - -powerup_can_player_grab( player ) -{ - if ( !cleansed_alive_check( player ) ) - return false; - - if ( isdefined( level.cleansed_powerups[self.powerup_name] ) ) - { - if ( level.cleansed_powerups[self.powerup_name].team == 0 && ( isdefined( player.is_zombie ) && player.is_zombie ) ) - return false; - - if ( level.cleansed_powerups[self.powerup_name].team == 1 && !( isdefined( player.is_zombie ) && player.is_zombie ) ) - return false; - } - else - { - if ( self.zombie_grabbable && !( isdefined( player.is_zombie ) && player.is_zombie ) ) - return false; - - if ( !self.zombie_grabbable && ( isdefined( player.is_zombie ) && player.is_zombie ) ) - return false; - } - - return true; -} - -player_nuke_fx() -{ - self endon( "death" ); - self endon( "respawned" ); - self endon( "stop_flame_damage" ); - - if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_torso"] ) ) - { - if ( !self.isdog ) - playfxontag( level._effect["character_fire_death_torso"], self, "J_SpineLower" ); - } - - if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_sm"] ) ) - { - wait 1; - tagarray = []; - tagarray[0] = "J_Elbow_LE"; - tagarray[1] = "J_Elbow_RI"; - tagarray[2] = "J_Knee_RI"; - tagarray[3] = "J_Knee_LE"; - tagarray = array_randomize( tagarray ); - playfxontag( level._effect["character_fire_death_sm"], self, tagarray[0] ); - wait 1; - tagarray[0] = "J_Wrist_RI"; - tagarray[1] = "J_Wrist_LE"; - - if ( !isdefined( self.a ) || !isdefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" ) - { - tagarray[2] = "J_Ankle_RI"; - tagarray[3] = "J_Ankle_LE"; - } - - tagarray = array_randomize( tagarray ); - playfxontag( level._effect["character_fire_death_sm"], self, tagarray[0] ); - playfxontag( level._effect["character_fire_death_sm"], self, tagarray[1] ); - } -} - -player_nuke( player ) -{ - nuke_time = 2; - self.isdog = 0; - self.nuked = 1; - self.nuker = player; - self freezecontrolswrapper( 1 ); - maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, nuke_time / 2, nuke_time ); - self thread player_nuke_fx(); - wait( nuke_time ); - - if ( isdefined( self ) ) - { - if ( isdefined( player ) ) - self dodamage( self.health + 666, player.origin, player, player, "none", "MOD_EXPLOSIVE", 0, "nuke_zm" ); - else - { - self.nuked = undefined; - self dodamage( self.health + 666, self.origin, self, self, "none", "MOD_EXPLOSIVE", 0, "nuke_zm" ); - } - } -} - -turned_powerup_green_nuke( player ) -{ - location = self.origin; - playfx( level.zombie_powerups["nuke"].fx, location ); - level thread maps\mp\zombies\_zm_powerups::nuke_flash(); - players = get_players(); - - foreach ( target in players ) - { - if ( !cleansed_alive_check( target ) ) - continue; - - if ( isdefined( target.is_zombie ) && target.is_zombie ) - { - target thread player_nuke( player ); - continue; - } - } -} - -turned_powerup_green_double( player ) -{ - level thread maps\mp\zombies\_zm_powerups::double_points_powerup( self, player ); -} - -turned_powerup_green_insta( player ) -{ - level thread maps\mp\zombies\_zm_powerups::insta_kill_powerup( self, player ); -} - -turned_powerup_green_ammo( player ) -{ - level thread maps\mp\zombies\_zm_powerups::full_ammo_powerup( self, player ); - weapon = player getcurrentweapon(); - player givestartammo( weapon ); -} - -turned_powerup_green_monkey( player ) -{ - player maps\mp\zombies\_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); - player setweaponammoclip( "cymbal_monkey_zm", 1 ); - player notify( "powerup_green_monkey" ); -} - -turned_powerup_red_nuke( player ) -{ - location = self.origin; - playfx( level.zombie_powerups["nuke"].fx, location ); - level thread maps\mp\zombies\_zm_powerups::nuke_flash(); - players = get_players(); - - foreach ( target in players ) - { - if ( !cleansed_alive_check( target ) ) - continue; - - if ( isdefined( target.is_zombie ) && target.is_zombie ) - continue; - - target thread player_nuke( player ); - } -} - -turned_powerup_red_ammo( player ) -{ - level thread maps\mp\zombies\_zm_powerups::empty_clip_powerup( self ); -} - -turned_powerup_red_double( player ) -{ - level thread maps\mp\zombies\_zm_powerups::double_points_powerup( self, player ); -} - -turned_powerup_yellow_double( player ) -{ - level thread maps\mp\zombies\_zm_powerups::double_points_powerup( self, player ); -} - -turned_powerup_yellow_nuke( player ) -{ - location = self.origin; - playfx( level.zombie_powerups["nuke"].fx, location ); - level thread maps\mp\zombies\_zm_powerups::nuke_flash(); - players = get_players(); - - foreach ( target in players ) - { - if ( !cleansed_alive_check( target ) ) - continue; - - if ( isdefined( target.team != player.team ) && target.team != player.team ) - target thread player_nuke( player ); - } -} - -playturnedmusic() -{ - ent = spawn( "script_origin", ( 0, 0, 0 ) ); - ent thread stopturnedmusic(); - playsoundatposition( "mus_zmb_gamemode_start", ( 0, 0, 0 ) ); - wait 5; - ent playloopsound( "mus_zmb_gamemode_loop", 5 ); -} - -stopturnedmusic() -{ - level waittill( "end_game" ); - - self stoploopsound( 1.5 ); - wait 1; - self delete(); -} diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/gametypes_zm/zgrief.gsc b/Zombie Maps/Buried/zm_buried_patch/maps/mp/gametypes_zm/zgrief.gsc deleted file mode 100644 index b06e3b4..0000000 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/gametypes_zm/zgrief.gsc +++ /dev/null @@ -1,815 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include maps\mp\_utility; -#include maps\mp\gametypes_zm\_hud_util; -#include common_scripts\utility; -#include maps\mp\zombies\_zm_utility; -#include maps\mp\gametypes_zm\_zm_gametype; -#include maps\mp\zombies\_zm_stats; -#include maps\mp\gametypes_zm\zmeat; -#include maps\mp\zombies\_zm_powerups; -#include maps\mp\zombies\_zm_game_module_meat_utility; -#include maps\mp\zombies\_zm; -#include maps\mp\zombies\_zm_game_module; -#include maps\mp\zombies\_zm_magicbox; -#include maps\mp\zombies\_zm_weap_cymbal_monkey; -#include maps\mp\zombies\_zm_laststand; -#include maps\mp\_demo; -#include maps\mp\zombies\_zm_zonemgr; -#include maps\mp\zombies\_zm_audio_announcer; -#include maps\mp\zombies\_zm_weapons; -#include maps\mp\zombies\_zm_equipment; - -main() -{ - maps\mp\gametypes_zm\_zm_gametype::main(); - level.onprecachegametype = ::onprecachegametype; - level.onstartgametype = ::onstartgametype; - level.custom_spectate_permissions = ::setspectatepermissionsgrief; - level._game_module_custom_spawn_init_func = maps\mp\gametypes_zm\_zm_gametype::custom_spawn_init_func; - level._game_module_stat_update_func = maps\mp\zombies\_zm_stats::grief_custom_stat_update; - level._game_module_player_damage_callback = maps\mp\gametypes_zm\_zm_gametype::game_module_player_damage_callback; - level.custom_end_screen = ::custom_end_screen; - level.gamemode_map_postinit["zgrief"] = ::postinit_func; - level._supress_survived_screen = 1; - level.game_module_team_name_override_og_x = 155; - level.prevent_player_damage = ::player_prevent_damage; - level._game_module_player_damage_grief_callback = ::game_module_player_damage_grief_callback; - level._grief_reset_message = ::grief_reset_message; - level._game_module_player_laststand_callback = ::grief_laststand_weapon_save; - level.onplayerspawned_restore_previous_weapons = ::grief_laststand_weapons_return; - level.game_module_onplayerconnect = ::grief_onplayerconnect; - level.game_mode_spawn_player_logic = ::game_mode_spawn_player_logic; - level.game_mode_custom_onplayerdisconnect = ::grief_onplayerdisconnect; - maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zgrief" ); -} - -grief_onplayerconnect() -{ - self thread move_team_icons(); - self thread maps\mp\gametypes_zm\zmeat::create_item_meat_watcher(); - self thread zgrief_player_bled_out_msg(); -} - -grief_onplayerdisconnect( disconnecting_player ) -{ - level thread update_players_on_bleedout_or_disconnect( disconnecting_player ); -} - -setspectatepermissionsgrief() -{ - self allowspectateteam( "allies", 1 ); - self allowspectateteam( "axis", 1 ); - self allowspectateteam( "freelook", 0 ); - self allowspectateteam( "none", 1 ); -} - -custom_end_screen() -{ - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - players[i].game_over_hud = newclienthudelem( players[i] ); - players[i].game_over_hud.alignx = "center"; - players[i].game_over_hud.aligny = "middle"; - players[i].game_over_hud.horzalign = "center"; - players[i].game_over_hud.vertalign = "middle"; - players[i].game_over_hud.y -= 130; - players[i].game_over_hud.foreground = 1; - players[i].game_over_hud.fontscale = 3; - players[i].game_over_hud.alpha = 0; - players[i].game_over_hud.color = ( 1, 1, 1 ); - players[i].game_over_hud.hidewheninmenu = 1; - players[i].game_over_hud settext( &"ZOMBIE_GAME_OVER" ); - players[i].game_over_hud fadeovertime( 1 ); - players[i].game_over_hud.alpha = 1; - - if ( players[i] issplitscreen() ) - { - players[i].game_over_hud.fontscale = 2; - players[i].game_over_hud.y += 40; - } - - players[i].survived_hud = newclienthudelem( players[i] ); - players[i].survived_hud.alignx = "center"; - players[i].survived_hud.aligny = "middle"; - players[i].survived_hud.horzalign = "center"; - players[i].survived_hud.vertalign = "middle"; - players[i].survived_hud.y -= 100; - players[i].survived_hud.foreground = 1; - players[i].survived_hud.fontscale = 2; - players[i].survived_hud.alpha = 0; - players[i].survived_hud.color = ( 1, 1, 1 ); - players[i].survived_hud.hidewheninmenu = 1; - - if ( players[i] issplitscreen() ) - { - players[i].survived_hud.fontscale = 1.5; - players[i].survived_hud.y += 40; - } - - winner_text = &"ZOMBIE_GRIEF_WIN"; - loser_text = &"ZOMBIE_GRIEF_LOSE"; - - if ( level.round_number < 2 ) - { - winner_text = &"ZOMBIE_GRIEF_WIN_SINGLE"; - loser_text = &"ZOMBIE_GRIEF_LOSE_SINGLE"; - } - - if ( isdefined( level.host_ended_game ) && level.host_ended_game ) - players[i].survived_hud settext( &"MP_HOST_ENDED_GAME" ); - else if ( isdefined( level.gamemodulewinningteam ) && players[i]._encounters_team == level.gamemodulewinningteam ) - players[i].survived_hud settext( winner_text, level.round_number ); - else - players[i].survived_hud settext( loser_text, level.round_number ); - - players[i].survived_hud fadeovertime( 1 ); - players[i].survived_hud.alpha = 1; - } -} - -postinit_func() -{ - level.min_humans = 1; - level.zombie_ai_limit = 24; - level.prevent_player_damage = ::player_prevent_damage; - level.lock_player_on_team_score = 1; - level._zombiemode_powerup_grab = ::meat_stink_powerup_grab; - level.meat_bounce_override = ::meat_bounce_override; - level._zombie_spawning = 0; - level._get_game_module_players = undefined; - level.powerup_drop_count = 0; - level.is_zombie_level = 1; - level._effect["meat_impact"] = loadfx( "maps/zombie/fx_zmb_meat_impact" ); - level._effect["spawn_cloud"] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); - level._effect["meat_stink_camera"] = loadfx( "maps/zombie/fx_zmb_meat_stink_camera" ); - level._effect["meat_stink_torso"] = loadfx( "maps/zombie/fx_zmb_meat_stink_torso" ); - include_powerup( "meat_stink" ); - maps\mp\zombies\_zm_powerups::add_zombie_powerup( "meat_stink", "t6_wpn_zmb_meat_world", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_drop_meat, 0, 0, 0 ); - setmatchtalkflag( "DeadChatWithDead", 1 ); - setmatchtalkflag( "DeadChatWithTeam", 1 ); - setmatchtalkflag( "DeadHearTeamLiving", 1 ); - setmatchtalkflag( "DeadHearAllLiving", 1 ); - setmatchtalkflag( "EveryoneHearsEveryone", 1 ); -} - -func_should_drop_meat() -{ - if ( minigun_no_drop() ) - return false; - - return true; -} - -minigun_no_drop() -{ - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - if ( players[i].ignoreme == 1 ) - return true; - } - - if ( isdefined( level.meat_on_ground ) && level.meat_on_ground ) - return true; - - return false; -} - -grief_game_end_check_func() -{ - return 0; -} - -player_prevent_damage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) -{ - if ( isdefined( eattacker ) && isplayer( eattacker ) && self != eattacker && !eattacker hasperk( "specialty_noname" ) && !( isdefined( self.is_zombie ) && self.is_zombie ) ) - return true; - - return false; -} - -game_module_player_damage_grief_callback( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) -{ - penalty = 10; - - if ( isdefined( eattacker ) && isplayer( eattacker ) && eattacker != self && eattacker.team != self.team && smeansofdeath == "MOD_MELEE" ) - self applyknockback( idamage, vdir ); -} - -onprecachegametype() -{ - level.playersuicideallowed = 1; - level.canplayersuicide = ::canplayersuicide; - level.suicide_weapon = "death_self_zm"; - precacheitem( "death_self_zm" ); - precacheshellshock( "grief_stab_zm" ); - precacheshader( "faction_cdc" ); - precacheshader( "faction_cia" ); - precacheshader( "waypoint_revive_cdc_zm" ); - precacheshader( "waypoint_revive_cia_zm" ); - level._effect["butterflies"] = loadfx( "maps/zombie/fx_zmb_impact_noharm" ); - level thread maps\mp\zombies\_zm_game_module_meat_utility::init_item_meat( "zgrief" ); - level thread maps\mp\gametypes_zm\_zm_gametype::init(); - maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zgrief" ); -} - -onstartgametype() -{ - level.no_end_game_check = 1; - level._game_module_game_end_check = ::grief_game_end_check_func; - level.round_end_custom_logic = ::grief_round_end_custom_logic; - maps\mp\gametypes_zm\_zm_gametype::setup_classic_gametype(); - maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zgrief", ::zgrief_main ); -} - -zgrief_main() -{ - level thread maps\mp\zombies\_zm::round_start(); - level thread maps\mp\gametypes_zm\_zm_gametype::kill_all_zombies(); - flag_wait( "initial_blackscreen_passed" ); - level thread maps\mp\zombies\_zm_game_module::wait_for_team_death_and_round_end(); - players = get_players(); - - foreach ( player in players ) - player.is_hotjoin = 0; - - wait 1; - playsoundatposition( "vox_zmba_grief_intro_0", ( 0, 0, 0 ) ); -} - -move_team_icons() -{ - self endon( "disconnect" ); - flag_wait( "initial_blackscreen_passed" ); - wait 0.5; -} - -kill_start_chest() -{ - flag_wait( "initial_blackscreen_passed" ); - wait 2; - start_chest = getstruct( "start_chest", "script_noteworthy" ); - start_chest maps\mp\zombies\_zm_magicbox::hide_chest(); -} - -meat_stink_powerup_grab( powerup, who ) -{ - switch ( powerup.powerup_name ) - { - case "meat_stink": - level thread meat_stink( who ); - break; - } -} - -meat_stink( who ) -{ - weapons = who getweaponslist(); - has_meat = 0; - - foreach ( weapon in weapons ) - { - if ( weapon == "item_meat_zm" ) - has_meat = 1; - } - - if ( has_meat ) - return; - - who.pre_meat_weapon = who getcurrentweapon(); - level notify( "meat_grabbed" ); - who notify( "meat_grabbed" ); - who playsound( "zmb_pickup_meat" ); - who increment_is_drinking(); - who giveweapon( "item_meat_zm" ); - who switchtoweapon( "item_meat_zm" ); - who setweaponammoclip( "item_meat_zm", 1 ); -} - -meat_stink_on_ground( position_to_play ) -{ - level.meat_on_ground = 1; - attractor_point = spawn( "script_model", position_to_play ); - attractor_point setmodel( "tag_origin" ); - attractor_point playsound( "zmb_land_meat" ); - wait 0.2; - playfxontag( level._effect["meat_stink_torso"], attractor_point, "tag_origin" ); - attractor_point playloopsound( "zmb_meat_flies" ); - attractor_point create_zombie_point_of_interest( 1536, 32, 10000 ); - attractor_point.attract_to_origin = 1; - attractor_point thread create_zombie_point_of_interest_attractor_positions( 4, 45 ); - attractor_point thread maps\mp\zombies\_zm_weap_cymbal_monkey::wait_for_attractor_positions_complete(); - attractor_point delay_thread( 15, ::self_delete ); - wait 16.0; - level.meat_on_ground = undefined; -} - -meat_bounce_override( pos, normal, ent ) -{ - if ( isdefined( ent ) && isplayer( ent ) ) - { - if ( !ent maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) - { - level thread meat_stink_player( ent ); - - if ( isdefined( self.owner ) ) - { - maps\mp\_demo::bookmark( "zm_player_meat_stink", gettime(), ent, self.owner, 0, self ); - self.owner maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_given" ); - } - } - } - else - { - players = getplayers(); - closest_player = undefined; - closest_player_dist = 10000.0; - - for ( player_index = 0; player_index < players.size; player_index++ ) - { - player_to_check = players[player_index]; - - if ( self.owner == player_to_check ) - continue; - - if ( player_to_check maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) - continue; - - distsq = distancesquared( pos, player_to_check.origin ); - - if ( distsq < closest_player_dist ) - { - closest_player = player_to_check; - closest_player_dist = distsq; - } - } - - if ( isdefined( closest_player ) ) - { - level thread meat_stink_player( closest_player ); - - if ( isdefined( self.owner ) ) - { - maps\mp\_demo::bookmark( "zm_player_meat_stink", gettime(), closest_player, self.owner, 0, self ); - self.owner maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_given" ); - } - } - else - { - valid_poi = check_point_in_enabled_zone( pos, undefined, undefined ); - - if ( valid_poi ) - { - self hide(); - level thread meat_stink_on_ground( self.origin ); - } - } - - playfx( level._effect["meat_impact"], self.origin ); - } - - self delete(); -} - -meat_stink_player( who ) -{ - level notify( "new_meat_stink_player" ); - level endon( "new_meat_stink_player" ); - who.ignoreme = 0; - players = get_players(); - - foreach ( player in players ) - { - player thread meat_stink_player_cleanup(); - - if ( player != who ) - player.ignoreme = 1; - } - - who thread meat_stink_player_create(); - who waittill_any_or_timeout( 30, "disconnect", "player_downed", "bled_out" ); - players = get_players(); - - foreach ( player in players ) - { - player thread meat_stink_player_cleanup(); - player.ignoreme = 0; - } -} - -meat_stink_player_create() -{ - self maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_received" ); - self endon( "disconnect" ); - self endon( "death" ); - tagname = "J_SpineLower"; - self.meat_stink_3p = spawn( "script_model", self gettagorigin( tagname ) ); - self.meat_stink_3p setmodel( "tag_origin" ); - self.meat_stink_3p linkto( self, tagname ); - wait 0.5; - playfxontag( level._effect["meat_stink_torso"], self.meat_stink_3p, "tag_origin" ); - self setclientfieldtoplayer( "meat_stink", 1 ); -} - -meat_stink_player_cleanup() -{ - if ( isdefined( self.meat_stink_3p ) ) - { - self.meat_stink_3p unlink(); - self.meat_stink_3p delete(); - } - - self setclientfieldtoplayer( "meat_stink", 0 ); -} - -door_close_zombie_think() -{ - self endon( "death" ); - - while ( isalive( self ) ) - { - if ( isdefined( self.enemy ) && isplayer( self.enemy ) ) - { - insamezone = 0; - keys = getarraykeys( level.zones ); - - for ( i = 0; i < keys.size; i++ ) - { - if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( keys[i] ) && self.enemy maps\mp\zombies\_zm_zonemgr::entity_in_zone( keys[i] ) ) - insamezone = 1; - } - - if ( insamezone ) - { - wait 3; - continue; - } - - nearestzombienode = getnearestnode( self.origin ); - nearestplayernode = getnearestnode( self.enemy.origin ); - - if ( isdefined( nearestzombienode ) && isdefined( nearestplayernode ) ) - { - if ( !nodesvisible( nearestzombienode, nearestplayernode ) && !nodescanpath( nearestzombienode, nearestplayernode ) ) - self silentlyremovezombie(); - } - } - - wait 1; - } -} - -silentlyremovezombie() -{ - level.zombie_total++; - playfx( level._effect["spawn_cloud"], self.origin ); - self.skip_death_notetracks = 1; - self.nodeathragdoll = 1; - self dodamage( self.maxhealth * 2, self.origin, self, self, "none", "MOD_SUICIDE" ); - self self_delete(); -} - -zgrief_player_bled_out_msg() -{ - level endon( "end_game" ); - self endon( "disconnect" ); - - while ( true ) - { - self waittill( "bled_out" ); - - level thread update_players_on_bleedout_or_disconnect( self ); - } -} - -show_grief_hud_msg( msg, msg_parm, offset, cleanup_end_game ) -{ - self endon( "disconnect" ); - - while ( isdefined( level.hostmigrationtimer ) ) - wait 0.05; - - zgrief_hudmsg = newclienthudelem( self ); - zgrief_hudmsg.alignx = "center"; - zgrief_hudmsg.aligny = "middle"; - zgrief_hudmsg.horzalign = "center"; - zgrief_hudmsg.vertalign = "middle"; - zgrief_hudmsg.y -= 130; - - if ( self issplitscreen() ) - zgrief_hudmsg.y += 70; - - if ( isdefined( offset ) ) - zgrief_hudmsg.y += offset; - - zgrief_hudmsg.foreground = 1; - zgrief_hudmsg.fontscale = 5; - zgrief_hudmsg.alpha = 0; - zgrief_hudmsg.color = ( 1, 1, 1 ); - zgrief_hudmsg.hidewheninmenu = 1; - zgrief_hudmsg.font = "default"; - - if ( isdefined( cleanup_end_game ) && cleanup_end_game ) - { - level endon( "end_game" ); - zgrief_hudmsg thread show_grief_hud_msg_cleanup(); - } - - if ( isdefined( msg_parm ) ) - zgrief_hudmsg settext( msg, msg_parm ); - else - zgrief_hudmsg settext( msg ); - - zgrief_hudmsg changefontscaleovertime( 0.25 ); - zgrief_hudmsg fadeovertime( 0.25 ); - zgrief_hudmsg.alpha = 1; - zgrief_hudmsg.fontscale = 2; - wait 3.25; - zgrief_hudmsg changefontscaleovertime( 1 ); - zgrief_hudmsg fadeovertime( 1 ); - zgrief_hudmsg.alpha = 0; - zgrief_hudmsg.fontscale = 5; - wait 1; - zgrief_hudmsg notify( "death" ); - - if ( isdefined( zgrief_hudmsg ) ) - zgrief_hudmsg destroy(); -} - -show_grief_hud_msg_cleanup() -{ - self endon( "death" ); - - level waittill( "end_game" ); - - if ( isdefined( self ) ) - self destroy(); -} - -grief_reset_message() -{ - msg = &"ZOMBIE_GRIEF_RESET"; - players = get_players(); - - if ( isdefined( level.hostmigrationtimer ) ) - { - while ( isdefined( level.hostmigrationtimer ) ) - wait 0.05; - - wait 4; - } - - foreach ( player in players ) - player thread show_grief_hud_msg( msg ); - - level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "grief_restarted" ); -} - -grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) -{ - self.grief_savedweapon_weapons = self getweaponslist(); - self.grief_savedweapon_weaponsammo_stock = []; - self.grief_savedweapon_weaponsammo_clip = []; - self.grief_savedweapon_currentweapon = self getcurrentweapon(); - self.grief_savedweapon_grenades = self get_player_lethal_grenade(); - - if ( isdefined( self.grief_savedweapon_grenades ) ) - self.grief_savedweapon_grenades_clip = self getweaponammoclip( self.grief_savedweapon_grenades ); - - self.grief_savedweapon_tactical = self get_player_tactical_grenade(); - - if ( isdefined( self.grief_savedweapon_tactical ) ) - self.grief_savedweapon_tactical_clip = self getweaponammoclip( self.grief_savedweapon_tactical ); - - for ( i = 0; i < self.grief_savedweapon_weapons.size; i++ ) - { - self.grief_savedweapon_weaponsammo_clip[i] = self getweaponammoclip( self.grief_savedweapon_weapons[i] ); - self.grief_savedweapon_weaponsammo_stock[i] = self getweaponammostock( self.grief_savedweapon_weapons[i] ); - } - - if ( isdefined( self.hasriotshield ) && self.hasriotshield ) - self.grief_hasriotshield = 1; - - if ( self hasweapon( "claymore_zm" ) ) - { - self.grief_savedweapon_claymore = 1; - self.grief_savedweapon_claymore_clip = self getweaponammoclip( "claymore_zm" ); - } - - if ( isdefined( self.current_equipment ) ) - self.grief_savedweapon_equipment = self.current_equipment; -} - -grief_laststand_weapons_return() -{ - if ( !( isdefined( level.isresetting_grief ) && level.isresetting_grief ) ) - return false; - - if ( !isdefined( self.grief_savedweapon_weapons ) ) - return false; - - primary_weapons_returned = 0; - - foreach ( index, weapon in self.grief_savedweapon_weapons ) - { - if ( isdefined( self.grief_savedweapon_grenades ) && weapon == self.grief_savedweapon_grenades || isdefined( self.grief_savedweapon_tactical ) && weapon == self.grief_savedweapon_tactical ) - continue; - - if ( isweaponprimary( weapon ) ) - { - if ( primary_weapons_returned >= 2 ) - continue; - - primary_weapons_returned++; - } - - if ( "item_meat_zm" == weapon ) - continue; - - self giveweapon( weapon, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); - - if ( isdefined( self.grief_savedweapon_weaponsammo_clip[index] ) ) - self setweaponammoclip( weapon, self.grief_savedweapon_weaponsammo_clip[index] ); - - if ( isdefined( self.grief_savedweapon_weaponsammo_stock[index] ) ) - self setweaponammostock( weapon, self.grief_savedweapon_weaponsammo_stock[index] ); - } - - if ( isdefined( self.grief_savedweapon_grenades ) ) - { - self giveweapon( self.grief_savedweapon_grenades ); - - if ( isdefined( self.grief_savedweapon_grenades_clip ) ) - self setweaponammoclip( self.grief_savedweapon_grenades, self.grief_savedweapon_grenades_clip ); - } - - if ( isdefined( self.grief_savedweapon_tactical ) ) - { - self giveweapon( self.grief_savedweapon_tactical ); - - if ( isdefined( self.grief_savedweapon_tactical_clip ) ) - self setweaponammoclip( self.grief_savedweapon_tactical, self.grief_savedweapon_tactical_clip ); - } - - if ( isdefined( self.current_equipment ) ) - self maps\mp\zombies\_zm_equipment::equipment_take( self.current_equipment ); - - if ( isdefined( self.grief_savedweapon_equipment ) ) - { - self.do_not_display_equipment_pickup_hint = 1; - self maps\mp\zombies\_zm_equipment::equipment_give( self.grief_savedweapon_equipment ); - self.do_not_display_equipment_pickup_hint = undefined; - } - - if ( isdefined( self.grief_hasriotshield ) && self.grief_hasriotshield ) - { - if ( isdefined( self.player_shield_reset_health ) ) - self [[ self.player_shield_reset_health ]](); - } - - if ( isdefined( self.grief_savedweapon_claymore ) && self.grief_savedweapon_claymore ) - { - self giveweapon( "claymore_zm" ); - self set_player_placeable_mine( "claymore_zm" ); - self setactionslot( 4, "weapon", "claymore_zm" ); - self setweaponammoclip( "claymore_zm", self.grief_savedweapon_claymore_clip ); - } - - primaries = self getweaponslistprimaries(); - - foreach ( weapon in primaries ) - { - if ( isdefined( self.grief_savedweapon_currentweapon ) && self.grief_savedweapon_currentweapon == weapon ) - { - self switchtoweapon( weapon ); - return true; - } - } - - if ( primaries.size > 0 ) - { - self switchtoweapon( primaries[0] ); - return true; - } -/# - assert( primaries.size > 0, "GRIEF: There was a problem restoring the weapons" ); -#/ - return false; -} - -grief_store_player_scores() -{ - players = get_players(); - - foreach ( player in players ) - player._pre_round_score = player.score; -} - -grief_restore_player_score() -{ - if ( !isdefined( self._pre_round_score ) ) - self._pre_round_score = self.score; - - if ( isdefined( self._pre_round_score ) ) - { - self.score = self._pre_round_score; - self.pers["score"] = self._pre_round_score; - } -} - -game_mode_spawn_player_logic() -{ - if ( flag( "start_zombie_round_logic" ) && !isdefined( self.is_hotjoin ) ) - { - self.is_hotjoin = 1; - return true; - } - - return false; -} - -update_players_on_bleedout_or_disconnect( excluded_player ) -{ - other_team = undefined; - players = get_players(); - players_remaining = 0; - - foreach ( player in players ) - { - if ( player == excluded_player ) - continue; - - if ( player.team == excluded_player.team ) - { - if ( is_player_valid( player ) ) - players_remaining++; - - continue; - } - } - - foreach ( player in players ) - { - if ( player == excluded_player ) - continue; - - if ( player.team != excluded_player.team ) - { - other_team = player.team; - - if ( players_remaining < 1 ) - { - player thread show_grief_hud_msg( &"ZOMBIE_ZGRIEF_ALL_PLAYERS_DOWN", undefined, undefined, 1 ); - player delay_thread_watch_host_migrate( 2, ::show_grief_hud_msg, &"ZOMBIE_ZGRIEF_SURVIVE", undefined, 30, 1 ); - continue; - } - - player thread show_grief_hud_msg( &"ZOMBIE_ZGRIEF_PLAYER_BLED_OUT", players_remaining ); - } - } - - if ( players_remaining == 1 ) - level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "last_player", excluded_player.team ); - - if ( !isdefined( other_team ) ) - return; - - if ( players_remaining < 1 ) - level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "4_player_down", other_team ); - else - level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( players_remaining + "_player_left", other_team ); -} - -delay_thread_watch_host_migrate( timer, func, param1, param2, param3, param4, param5, param6 ) -{ - self thread _delay_thread_watch_host_migrate_proc( func, timer, param1, param2, param3, param4, param5, param6 ); -} - -_delay_thread_watch_host_migrate_proc( func, timer, param1, param2, param3, param4, param5, param6 ) -{ - self endon( "death" ); - self endon( "disconnect" ); - wait( timer ); - - if ( isdefined( level.hostmigrationtimer ) ) - { - while ( isdefined( level.hostmigrationtimer ) ) - wait 0.05; - - wait( timer ); - } - - single_thread( self, func, param1, param2, param3, param4, param5, param6 ); -} - -grief_round_end_custom_logic() -{ - waittillframeend; - - if ( isdefined( level.gamemodulewinningteam ) ) - level notify( "end_round_think" ); -} diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/gametypes_zm/zmeat.gsc b/Zombie Maps/Buried/zm_buried_patch/maps/mp/gametypes_zm/zmeat.gsc deleted file mode 100644 index 0f0a9b3..0000000 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/gametypes_zm/zmeat.gsc +++ /dev/null @@ -1,2296 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include maps\mp\_utility; -#include maps\mp\gametypes_zm\_hud_util; -#include common_scripts\utility; -#include maps\mp\zombies\_zm_game_module_meat_utility; -#include maps\mp\gametypes_zm\_zm_gametype; -#include maps\mp\zombies\_zm; -#include maps\mp\zombies\_zm_game_module; -#include maps\mp\zombies\_zm_audio; -#include maps\mp\gametypes_zm\_weaponobjects; -#include maps\mp\zombies\_zm_audio_announcer; -#include maps\mp\zombies\_zm_weapons; -#include maps\mp\zombies\_zm_laststand; -#include maps\mp\gametypes_zm\_globallogic_score; -#include maps\mp\zombies\_zm_utility; -#include maps\mp\zombies\_zm_spawner; - -main() -{ - maps\mp\gametypes_zm\_zm_gametype::main(); - registerclientfield( "allplayers", "holding_meat", 7000, 1, "int" ); - registerclientfield( "scriptmover", "ring_glowfx", 7000, 1, "int" ); - registerclientfield( "scriptmover", "ring_glow_meatfx", 7000, 1, "int" ); - level.onprecachegametype = ::onprecachegametype; - level.onstartgametype = ::onstartgametype; - set_game_var( "ZM_roundLimit", 5 ); - set_game_var( "ZM_scoreLimit", 5 ); - set_gamemode_var( "post_init_zombie_spawn_func", ::meat_zombie_post_spawn_init ); - set_gamemode_var( "match_end_notify", "meat_end" ); - set_gamemode_var( "match_end_func", ::meat_end_match ); - level._no_static_unitriggers = 1; - level._game_module_player_damage_callback = maps\mp\gametypes_zm\_zm_gametype::game_module_player_damage_callback; - level._game_module_player_laststand_callback = ::meat_last_stand_callback; - level.no_end_game_check = 1; - maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zmeat" ); - level thread maps\mp\gametypes_zm\_zm_gametype::init(); - level.zm_roundswitch = 1; - level.zm_switchsides_on_roundswitch = 1; - level._effect["meat_marker"] = loadfx( "maps/zombie/fx_zmb_meat_marker" ); - level._effect["butterflies"] = loadfx( "maps/zombie/fx_zmb_impact_noharm" ); - level._effect["meat_glow"] = loadfx( "maps/zombie/fx_zmb_meat_glow" ); - level._effect["meat_glow3p"] = loadfx( "maps/zombie/fx_zmb_meat_glow_3p" ); - level._effect["spawn_cloud"] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); - level._effect["fw_burst"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_burst_center" ); - level._effect["fw_impact"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_drop_impact" ); - level._effect["fw_drop"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_drop_trail" ); - level._effect["fw_trail"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_trail" ); - level._effect["fw_trail_cheap"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_trail_intro" ); - level._effect["fw_pre_burst"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_burst_small" ); - level._effect["meat_bounce"] = loadfx( "maps/zombie/fx_zmb_meat_collision_glow" ); - level._effect["ring_glow"] = loadfx( "misc/fx_zombie_powerup_on" ); - level.can_revive_game_module = ::can_revive; - onplayerconnect_callback( ::meat_on_player_connect ); - spawn_level_meat_manager(); - init_animtree(); -} - -onprecachegametype() -{ - level thread maps\mp\zombies\_zm_game_module_meat_utility::init_item_meat( "zmeat" ); - maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zmeat" ); - game_mode_objects = getstructarray( "game_mode_object", "targetname" ); - meat_objects = getstructarray( "meat_object", "targetname" ); - all_structs = arraycombine( game_mode_objects, meat_objects, 1, 0 ); - - for ( i = 0; i < all_structs.size; i++ ) - { - if ( isdefined( all_structs[i].script_parameters ) ) - precachemodel( all_structs[i].script_parameters ); - } - - precacheshellshock( "grief_stab_zm" ); - precacheitem( "minigun_zm" ); - precacheshader( "faction_cdc" ); - precacheshader( "faction_cia" ); - precachemodel( "p6_zm_sign_meat_01_step1" ); - precachemodel( "p6_zm_sign_meat_01_step2" ); - precachemodel( "p6_zm_sign_meat_01_step3" ); - precachemodel( "p6_zm_sign_meat_01_step4" ); -} - -meat_hub_start_func() -{ - level thread meat_player_initial_spawn(); - level thread item_meat_reset( level._meat_start_point ); - level thread spawn_meat_zombies(); - level thread monitor_meat_on_team(); - level thread init_minigun_ring(); - level thread init_splitter_ring(); - level thread init_ammo_ring(); - level thread hide_non_meat_objects(); - level thread setup_meat_world_objects(); - level._zombie_path_timer_override = ::zombie_path_timer_override; - level.zombie_health = level.zombie_vars["zombie_health_start"]; - level._zombie_spawning = 0; - level._poi_override = ::meat_poi_override_func; - level._meat_on_team = undefined; - level._meat_zombie_spawn_timer = 2; - level._meat_zombie_spawn_health = 1; - level._minigun_time_override = 15; - level._get_game_module_players = ::get_game_module_players; - level.powerup_drop_count = 0; - level.meat_spawners = level.zombie_spawners; - - if ( !( isdefined( level._meat_callback_initialized ) && level._meat_callback_initialized ) ) - { - maps\mp\zombies\_zm::register_player_damage_callback( maps\mp\zombies\_zm_game_module::damage_callback_no_pvp_damage ); - level._meat_callback_initialized = 1; - } - - setmatchtalkflag( "DeadChatWithDead", 1 ); - setmatchtalkflag( "DeadChatWithTeam", 1 ); - setmatchtalkflag( "DeadHearTeamLiving", 1 ); - setmatchtalkflag( "DeadHearAllLiving", 1 ); - setmatchtalkflag( "EveryoneHearsEveryone", 1 ); - setteamhasmeat( "allies", 0 ); - setteamhasmeat( "axis", 0 ); - level thread zmbmusicsetupmeat(); - level.zombie_spawn_fx = level._effect["spawn_cloud"]; - weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); - - for ( i = 0; i < weapon_spawns.size; i++ ) - weapon_spawns[i] trigger_off(); - - level thread monitor_meat_on_side(); - level thread item_meat_watch_for_throw(); - level thread hold_meat_monitor(); - flag_wait( "start_encounters_match_logic" ); - level thread wait_for_team_death( 1 ); - level thread wait_for_team_death( 2 ); - level.team_a_downed = 0; - level.team_b_downed = 0; -} - -meat_on_player_connect() -{ - hotjoined = flag( "initial_players_connected" ); - self thread spawn_player_meat_manager(); - self thread wait_for_player_disconnect(); - self thread wait_for_player_downed(); -/# - self thread watch_debug_input(); -#/ - if ( hotjoined ) - { - one = 1; - two = 2; - - if ( get_game_var( "switchedsides" ) ) - { - one = 2; - two = 1; - } - - if ( get_game_var( "side_selection" ) == 1 ) - { - if ( self.team == "allies" ) - self._meat_team = one; - else - self._meat_team = two; - } - else if ( self.team == "allies" ) - self._meat_team = two; - else - self._meat_team = one; - - self meat_player_setup(); - } -} - -meat_on_player_disconnect() -{ - team0 = 1; - team1 = 2; - team_counts = []; - team_counts[team0] = 0; - team_counts[team1] = 0; - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - team_counts[players[i]._meat_team] += 1; - - if ( team_counts[team0] == 0 ) - maps\mp\gametypes_zm\_zm_gametype::end_rounds_early( "B" ); - - if ( team_counts[team1] == 0 ) - maps\mp\gametypes_zm\_zm_gametype::end_rounds_early( "A" ); -} - -wait_for_player_disconnect() -{ - level endon( "end_game" ); - - self waittill( "disconnect" ); - - meat_on_player_disconnect(); -} - -watch_debug_input() -{ -/# - self endon( "disconnect" ); - - for (;;) - { - if ( self actionslottwobuttonpressed() ) - { - if ( getdvar( _hash_B188A91 ) != "" ) - { - self disableinvulnerability(); - self dodamage( self.health + 666, self.origin ); - } - } - - wait 0.05; - } -#/ -} - -zmbmusicsetupmeat() -{ - level.zmb_music_states["game_over"] = undefined; - level thread maps\mp\zombies\_zm_audio::setupmusicstate( "waiting", "ENC_WAITING", 0, 0, 0, undefined ); - level thread maps\mp\zombies\_zm_audio::setupmusicstate( "round_start", "ENC_ROUND_START", 0, 0, 0, undefined ); - level thread maps\mp\zombies\_zm_audio::setupmusicstate( "round_end", "ENC_ROUND_END", 0, 0, 0, undefined ); - level thread maps\mp\zombies\_zm_audio::setupmusicstate( "halftime", "ENC_HALFTIME", 0, 0, 0, undefined ); - level thread maps\mp\zombies\_zm_audio::setupmusicstate( "match_over", "ENC_MATCH_OVER", 0, 0, 0, undefined ); -} - -monitor_meat_on_side() -{ - level endon( "meat_end" ); - - level waittill( "meat_grabbed" ); - - last_team = level._meat_on_team; - level.meat_lost_time_limit = 5000; - - while ( true ) - { - if ( isdefined( level.item_meat ) ) - { - if ( !isdefined( level._meat_team_1_volume ) || !isdefined( level._meat_team_2_volume ) ) - iprintlnbold( "BUG: There is something wrong with the team volumes" ); - - if ( isdefined( level._meat_team_1_volume ) && level.item_meat istouching( level._meat_team_1_volume ) ) - { - level._meat_on_team = 1; - level.meat_lost_time = undefined; - } - else if ( isdefined( level._meat_team_2_volume ) && level.item_meat istouching( level._meat_team_2_volume ) ) - { - level._meat_on_team = 2; - level.meat_lost_time = undefined; - } - else if ( isdefined( last_team ) ) - { - if ( !isdefined( level.meat_lost_time ) ) - level.meat_lost_time = gettime(); - else if ( gettime() - level.meat_lost_time > level.meat_lost_time_limit ) - { - add_meat_event( "level_lost_meat" ); - level thread item_meat_reset( level._meat_start_point, 1 ); - level.meat_lost_time = undefined; - - level waittill( "meat_grabbed" ); - } - } - } - else - { - player_with_meat = get_player_with_meat(); - - if ( !isdefined( player_with_meat ) ) - { - if ( !isdefined( level.meat_lost_time ) ) - level.meat_lost_time = gettime(); - else if ( gettime() - level.meat_lost_time > level.meat_lost_time_limit ) - { - add_meat_event( "level_lost_meat" ); - level thread item_meat_reset( level._meat_start_point, 1 ); - level.meat_lost_time = undefined; - - level waittill( "meat_grabbed" ); - } - } - else - level.meat_lost_time = undefined; - } - - if ( isdefined( level._meat_on_team ) && isdefined( last_team ) && level._meat_on_team != last_team ) - { - level notify( "clear_ignore_all" ); - add_meat_event( "level_meat_team", level._meat_on_team ); - last_team = level._meat_on_team; - assign_meat_to_team( undefined, level._meat_on_team ); -/# - if ( isdefined( level.item_meat ) ) - playfx( level._effect["spawn_cloud"], level.item_meat.origin ); -#/ - } - - wait 0.05; - } -} - -item_meat_watch_for_throw() -{ - level endon( "meat_end" ); - - for (;;) - { - level waittill( "meat_thrown", who ); - - add_meat_event( "player_thrown", who ); - - if ( isdefined( who._spawning_meat ) && who._spawning_meat ) - continue; - - if ( randomintrange( 1, 101 ) <= 10 ) - { - - } - - who._has_meat = 0; - - if ( isdefined( who._has_meat_hud ) ) - who._has_meat_hud destroy(); - - assign_meat_to_team( undefined, level._meat_on_team ); - } -} - -hold_meat_monitor() -{ - level endon( "meat_end" ); - - level waittill( "meat_grabbed" ); - - while ( true ) - { - player = get_player_with_meat(); - - if ( !isdefined( player ) ) - { - wait 0.2; - continue; - } - - if ( !should_try_to_bring_back_teammate( player._meat_team ) ) - { - wait 0.2; - continue; - } - - if ( !( isdefined( player._bringing_back_teammate ) && player._bringing_back_teammate ) ) - player thread bring_back_teammate_progress(); - - wait 0.2; - } -} - -meat_zombie_post_spawn_init() -{ - -} - -create_item_meat_watcher() -{ - wait 0.05; - watcher = self maps\mp\gametypes_zm\_weaponobjects::createuseweaponobjectwatcher( "item_meat", get_gamemode_var( "item_meat_name" ), self.team ); - watcher.pickup = ::item_meat_on_pickup; - watcher.onspawn = ::item_meat_spawned; - watcher.onspawnretrievetriggers = ::play_item_meat_on_spawn_retrieve_trigger; - watcher.headicon = 0; -} - -item_meat_spawned( unused0, unused1 ) -{ - maps\mp\gametypes_zm\_weaponobjects::voidonspawn( unused0, unused1 ); - self.meat_is_moving = 0; - self.meat_is_flying = 0; -} - -wait_for_player_downed() -{ - self endon( "disconnect" ); - - while ( isdefined( self ) ) - { - self waittill_any( "player_downed", "fake_death", "death" ); - add_meat_event( "player_down", self ); - wait 0.1; - - if ( isdefined( self._meat_team ) ) - { - self thread watch_save_player(); - players = get_players_on_meat_team( self._meat_team ); - - if ( players.size >= 2 ) - { - - } - } - } -} - -item_meat_watch_stationary() -{ - self endon( "death" ); - self endon( "picked_up" ); - self.meat_is_moving = 1; - - self waittill( "stationary" ); - - self playloopsound( "zmb_meat_looper", 2 ); - - if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) - add_meat_event( "meat_stationary", self ); - else - add_meat_event( "fake_meat_stationary", self ); - - if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) - { - level._meat_moving = 0; - level._meat_splitter_activated = 0; - level._last_person_to_throw_meat = undefined; - } - - self.meat_is_moving = 0; - - if ( isdefined( level._meat_on_team ) ) - { - teamplayers = get_players_on_meat_team( level._meat_on_team ); - - for ( i = 0; i < teamplayers.size; i++ ) - { - if ( isdefined( teamplayers[i] ) && isdefined( teamplayers[i]._encounters_team ) ) - { - level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_land", teamplayers[i]._encounters_team ); - break; - } - } - } -} - -item_meat_watch_bounce() -{ - self endon( "death" ); - self endon( "picked_up" ); - self.meat_is_flying = 1; - - self waittill( "grenade_bounce", pos, normal, ent ); - - if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) - add_meat_event( "meat_bounce", self, pos, normal, ent ); - else - add_meat_event( "fake_meat_bounce", self, pos, normal, ent ); - - if ( isdefined( level.meat_bounce_override ) ) - { - self thread [[ level.meat_bounce_override ]]( pos, normal, ent ); - return; - } - - if ( isdefined( level.spawned_collmap ) ) - { - if ( isdefined( ent ) && ent == level.spawned_collmap ) - playfx( level._effect["meat_bounce"], pos, normal ); - } - - if ( isdefined( ent ) && isplayer( ent ) ) - { - add_meat_event( "player_hit_player", self.owner, ent ); - self.owner hit_player_with_meat( ent ); - } - - self.meat_is_flying = 0; - self thread watch_for_roll(); - playfxontag( level._effect["meat_marker"], self, "tag_origin" ); -} - -watch_for_roll() -{ - self endon( "stationary" ); - self endon( "death" ); - self endon( "picked_up" ); - self.meat_is_rolling = 0; - - while ( true ) - { - old_z = self.origin[2]; - wait 1; - - if ( abs( old_z - self.origin[2] ) < 10 ) - { - self.meat_is_rolling = 1; - self playloopsound( "zmb_meat_looper", 2 ); - } - } -} - -stop_rolling() -{ - self.origin = self.origin; - self.angles = self.angles; -} - -hit_player_with_meat( hit_player ) -{ -/# - println( "MEAT: Player " + self.name + " hit " + hit_player.name + " with the meat\n" ); -#/ -} - -item_meat_pickup() -{ - self.meat_is_moving = 0; - self.meat_is_flying = 0; - level._meat_moving = 0; - level._meat_splitter_activated = 0; - self notify( "picked_up" ); -} - -player_wait_take_meat( meat_name ) -{ - self.dont_touch_the_meat = 1; - - if ( isdefined( self.pre_meat_weapon ) && self hasweapon( self.pre_meat_weapon ) ) - self switchtoweapon( self.pre_meat_weapon ); - else - { - primaryweapons = self getweaponslistprimaries(); - - if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) - self switchtoweapon( primaryweapons[0] ); - else - { -/# - assert( 0, "Player has no weapon" ); -#/ - self maps\mp\zombies\_zm_weapons::give_fallback_weapon(); - } - } - - self waittill_notify_or_timeout( "weapon_change_complete", 3 ); - self takeweapon( meat_name ); - self.pre_meat_weapon = undefined; - - if ( self.is_drinking ) - self decrement_is_drinking(); - - self.dont_touch_the_meat = 0; -} - -cleanup_meat() -{ - if ( isdefined( self.altmodel ) ) - self.altmodel delete(); - - self delete(); -} - -init_animtree() -{ - scriptmodelsuseanimtree( -1 ); -} - -#using_animtree("zombie_meat"); - -animate_meat( grenade ) -{ - grenade waittill_any( "bounce", "stationary", "death" ); - waittillframeend; - - if ( isdefined( grenade ) ) - { - grenade hide(); - altmodel = spawn( "script_model", grenade.origin ); - altmodel setmodel( get_gamemode_var( "item_meat_model" ) ); - altmodel useanimtree( -1 ); - altmodel.angles = grenade.angles; - altmodel linkto( grenade, "", ( 0, 0, 0 ), ( 0, 0, 0 ) ); - altmodel setanim( %o_zombie_head_idle_v1 ); - grenade.altmodel = altmodel; - - while ( isdefined( grenade ) ) - wait 0.05; - - if ( isdefined( altmodel ) ) - altmodel delete(); - } -} - -indexinarray( array, value ) -{ - if ( !isdefined( array ) || !isarray( array ) || !isdefined( value ) || !isinarray( array, value ) ) - return undefined; - - foreach ( index, item in array ) - { - if ( item == value ) - return index; - } - - return undefined; -} - -item_meat_on_spawn_retrieve_trigger( watcher, player, weaponname ) -{ - self endon( "death" ); - add_meat_event( "meat_spawn", self ); - thread animate_meat( self ); - - while ( isdefined( level.splitting_meat ) && level.splitting_meat ) - wait 0.15; - - if ( isdefined( player ) ) - { - self setowner( player ); - self setteam( player.pers["team"] ); - self.owner = player; - self.oldangles = self.angles; - - if ( player hasweapon( weaponname ) ) - { - if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) - player thread player_wait_take_meat( weaponname ); - else - { - player takeweapon( weaponname ); - player decrement_is_drinking(); - } - } - - if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) - { - if ( !( isdefined( self._respawned_meat ) && self._respawned_meat ) ) - { - level notify( "meat_thrown", player ); - level._last_person_to_throw_meat = player; - level._last_person_to_throw_meat_time = gettime(); - } - } - } - - if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) - { - level._meat_moving = 1; - - if ( isdefined( level.item_meat ) && level.item_meat != self ) - level.item_meat cleanup_meat(); - - level.item_meat = self; - } - - self thread item_meat_watch_stationary(); - self thread item_meat_watch_bounce(); - self.item_meat_pick_up_trigger = spawn( "trigger_radius_use", self.origin, 0, 36, 72 ); - self.item_meat_pick_up_trigger setcursorhint( "HINT_NOICON" ); - self.item_meat_pick_up_trigger sethintstring( &"ZOMBIE_MEAT_PICKUP" ); - self.item_meat_pick_up_trigger enablelinkto(); - self.item_meat_pick_up_trigger linkto( self ); - self.item_meat_pick_up_trigger triggerignoreteam(); - level.item_meat_pick_up_trigger = self.item_meat_pick_up_trigger; - self thread item_meat_watch_shutdown(); - self.meat_id = indexinarray( level._fake_meats, self ); - - if ( !isdefined( self.meat_id ) ) - self.meat_id = 0; - - if ( isdefined( level.dont_allow_meat_interaction ) && level.dont_allow_meat_interaction ) - self.item_meat_pick_up_trigger setinvisibletoall(); - else - { - self thread item_meat_watch_trigger( self.meat_id, self.item_meat_pick_up_trigger, ::item_meat_on_pickup, level.meat_pickupsoundplayer, level.meat_pickupsound ); - self thread kick_meat_monitor(); - self thread last_stand_meat_nudge(); - } - - self._respawned_meat = undefined; -} - -last_stand_meat_nudge() -{ - level endon( "meat_grabbed" ); - level endon( "end_meat" ); - self endon( "death" ); - wait 0.15; - - while ( true ) - { - players = get_players(); - - foreach ( player in players ) - { - if ( distancesquared( player.origin, self.origin ) < 2304 && player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) - player thread kick_the_meat( self, 1 ); - } - - wait 0.05; - } -} - -kick_meat_monitor() -{ - level endon( "meat_grabbed" ); - level endon( "end_meat" ); - self endon( "death" ); - kick_meat_timeout = 150; - - while ( true ) - { - players = get_players(); - curr_time = gettime(); - - foreach ( player in players ) - { - if ( isdefined( level._last_person_to_throw_meat ) && player == level._last_person_to_throw_meat && curr_time - level._last_person_to_throw_meat_time <= kick_meat_timeout ) - continue; - - if ( distancesquared( player.origin, self.origin ) < 2304 && player issprinting() && !player usebuttonpressed() ) - { - if ( isdefined( player._meat_team ) && isdefined( level._meat_on_team ) && level._meat_on_team == player._meat_team ) - { - add_meat_event( "player_kick_meat", player, self ); - player thread kick_the_meat( self ); - } - } - } - - wait 0.05; - } -} - -is_meat( weapon ) -{ - return weapon == get_gamemode_var( "item_meat_name" ); -} - -spike_the_meat( meat ) -{ - if ( isdefined( self._kicking_meat ) && self._kicking_meat ) - return; - - fake_meat = 0; - self._kicking_meat = 1; - self._spawning_meat = 1; - org = self getweaponmuzzlepoint(); - vel = meat getvelocity(); - - if ( !( isdefined( meat._fake_meat ) && meat._fake_meat ) ) - { - meat cleanup_meat(); - level._last_person_to_throw_meat = self; - level._last_person_to_throw_meat_time = gettime(); - level._meat_splitter_activated = 0; - } - else - { - fake_meat = 1; - meat cleanup_meat(); - } - - kickangles = self.angles; - kickangles += ( randomfloatrange( -30, -20 ), randomfloatrange( -5, 5 ), 0 ); - launchdir = anglestoforward( kickangles ); - speed = length( vel ) * 1.5; - launchvel = vectorscale( launchdir, speed ); - grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( launchvel[0], launchvel[1], 380 ) ); - grenade playsound( "zmb_meat_meat_tossed" ); - grenade thread waittill_loopstart(); - - if ( fake_meat ) - { - grenade._fake_meat = 1; - grenade thread delete_on_real_meat_pickup(); - level._kicked_meat = grenade; - } - - wait 0.1; - self._spawning_meat = 0; - self._kicking_meat = 0; - - if ( !fake_meat ) - { - level notify( "meat_thrown", self ); - level notify( "meat_kicked" ); - } -} - -show_meat_throw_hint() -{ - level endon( "meat_thrown" ); - self endon( "player_downed" ); - self thread meat_screen_message_delete_on_death(); - wait 1; - self meat_create_hint_message( &"ZOMBIE_THROW_MEAT_HINT" ); - self thread meat_screen_message_delete(); -} - -meat_create_hint_message( string_message_1, string_message_2, string_message_3, n_offset_y ) -{ - if ( !isdefined( n_offset_y ) ) - n_offset_y = 0; - - if ( !isdefined( self._screen_message_1 ) ) - { - self._screen_message_1 = newclienthudelem( self ); - self._screen_message_1.elemtype = "font"; - self._screen_message_1.font = "objective"; - self._screen_message_1.fontscale = 1.8; - self._screen_message_1.horzalign = "center"; - self._screen_message_1.vertalign = "middle"; - self._screen_message_1.alignx = "center"; - self._screen_message_1.aligny = "middle"; - self._screen_message_1.y = -60 + n_offset_y; - self._screen_message_1.sort = 2; - self._screen_message_1.color = ( 1, 1, 1 ); - self._screen_message_1.alpha = 0.7; - self._screen_message_1.hidewheninmenu = 1; - } - - self._screen_message_1 settext( string_message_1 ); - - if ( isdefined( string_message_2 ) ) - { - if ( !isdefined( self._screen_message_2 ) ) - { - self._screen_message_2 = newclienthudelem( self ); - self._screen_message_2.elemtype = "font"; - self._screen_message_2.font = "objective"; - self._screen_message_2.fontscale = 1.8; - self._screen_message_2.horzalign = "center"; - self._screen_message_2.vertalign = "middle"; - self._screen_message_2.alignx = "center"; - self._screen_message_2.aligny = "middle"; - self._screen_message_2.y = -33 + n_offset_y; - self._screen_message_2.sort = 2; - self._screen_message_2.color = ( 1, 1, 1 ); - self._screen_message_2.alpha = 0.7; - self._screen_message_2.hidewheninmenu = 1; - } - - level._screen_message_2 settext( string_message_2 ); - } - else if ( isdefined( self._screen_message_2 ) ) - self._screen_message_2 destroy(); - - if ( isdefined( string_message_3 ) ) - { - if ( !isdefined( self._screen_message_3 ) ) - { - self._screen_message_3 = newclienthudelem( self ); - self._screen_message_3.elemtype = "font"; - self._screen_message_3.font = "objective"; - self._screen_message_3.fontscale = 1.8; - self._screen_message_3.horzalign = "center"; - self._screen_message_3.vertalign = "middle"; - self._screen_message_3.alignx = "center"; - self._screen_message_3.aligny = "middle"; - self._screen_message_3.y = -6 + n_offset_y; - self._screen_message_3.sort = 2; - self._screen_message_3.color = ( 1, 1, 1 ); - self._screen_message_3.alpha = 0.7; - self._screen_message_3.hidewheninmenu = 1; - } - - self._screen_message_3 settext( string_message_3 ); - } - else if ( isdefined( self._screen_message_3 ) ) - self._screen_message_3 destroy(); -} - -meat_screen_message_delete() -{ - self endon( "disconnect" ); - level waittill_notify_or_timeout( "meat_thrown", 5 ); - - if ( isdefined( self._screen_message_1 ) ) - self._screen_message_1 destroy(); - - if ( isdefined( self._screen_message_2 ) ) - self._screen_message_2 destroy(); - - if ( isdefined( self._screen_message_3 ) ) - self._screen_message_3 destroy(); -} - -meat_screen_message_delete_on_death() -{ - level endon( "meat_thrown" ); - self endon( "disconnect" ); - - self waittill( "player_downed" ); - - if ( isdefined( self._screen_message_1 ) ) - self._screen_message_1 destroy(); - - if ( isdefined( self._screen_message_2 ) ) - self._screen_message_2 destroy(); - - if ( isdefined( self._screen_message_3 ) ) - self._screen_message_3 destroy(); -} - -set_ignore_all() -{ - level endon( "clear_ignore_all" ); - - if ( isdefined( level._zombies_ignoring_all ) && level._zombies_ignoring_all ) - return; - - level._zombies_ignoring_all = 1; - zombies = getaiarray( level.zombie_team ); - - foreach ( zombie in zombies ) - { - if ( isdefined( zombie ) ) - zombie.ignoreall = 1; - } - - wait 0.5; - clear_ignore_all(); -} - -clear_ignore_all() -{ - if ( !( isdefined( level._zombies_ignoring_all ) && level._zombies_ignoring_all ) ) - return; - - zombies = getaiarray( level.zombie_team ); - - foreach ( zombie in zombies ) - { - if ( isdefined( zombie ) ) - zombie.ignoreall = 0; - } - - level._zombies_ignoring_all = 0; -} - -bring_back_teammate_progress() -{ - self notify( "bring_back_teammate_progress" ); - self endon( "bring_back_teammate_progress" ); - self endon( "disconnect" ); - player = self; - player._bringing_back_teammate = 1; - revivetime = 15; - progress = 0; - - while ( player_has_meat( player ) && is_player_valid( player ) && progress >= 0 ) - { - if ( !isdefined( player.revive_team_progressbar ) ) - { - player.revive_team_progressbar = player createprimaryprogressbar(); - player.revive_team_progressbar updatebar( 0.01, 1 / revivetime ); - player.revive_team_progressbar.progresstext = player createprimaryprogressbartext(); - player.revive_team_progressbar.progresstext settext( &"ZOMBIE_MEAT_RESPAWN_TEAMMATE" ); - player thread destroy_revive_progress_on_downed(); - } - - progress++; - - if ( progress > revivetime * 10 ) - { - level bring_back_dead_teammate( player._meat_team ); - player destroy_revive_progress(); - wait 1; - player._bringing_back_teammate = 0; - progress = -1; - } - - wait 0.1; - } - - player._bringing_back_teammate = 0; - player destroy_revive_progress(); -} - -should_try_to_bring_back_teammate( team ) -{ - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - if ( players[i]._meat_team == team && players[i].sessionstate == "spectator" ) - return true; - } - - return false; -} - -bring_back_dead_teammate( team ) -{ - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - if ( players[i]._meat_team == team && players[i].sessionstate == "spectator" ) - { - player = players[i]; - break; - } - } - - if ( !isdefined( player ) ) - return; - - player playsound( level.zmb_laugh_alias ); - wait 0.25; - playfx( level._effect["poltergeist"], player.spectator_respawn.origin ); - playsoundatposition( "zmb_bolt", player.spectator_respawn.origin ); - earthquake( 0.5, 0.75, player.spectator_respawn.origin, 1000 ); - level.custom_spawnplayer = ::respawn_meat_player; - player.pers["spectator_respawn"] = player.spectator_respawn; - player [[ level.spawnplayer ]](); - level.custom_spawnplayer = undefined; -} - -respawn_meat_player() -{ - spawnpoint = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "meat_spectator_respawn" ); - self spawn( spawnpoint.origin, spawnpoint.angles ); - self._meat_team = self.pers["zteam"]; - self._encounters_team = self.pers["encounters_team"]; - self.characterindex = self.pers["characterindex"]; - self._team_name = self.pers["team_name"]; - self.spectator_respawn = self.pers["meat_spectator_respawn"]; - self reviveplayer(); - self.is_burning = 0; - self.is_zombie = 0; - self.ignoreme = 0; -} - -destroy_revive_progress_on_downed() -{ - level endon( "end_game" ); - level endon( "meat_end" ); - self waittill_any( "fake_death", "player_downed", "death" ); - self destroy_revive_progress(); -} - -destroy_revive_progress() -{ - if ( isdefined( self.revive_team_progressbar ) ) - { - self.revive_team_progressbar destroyelem(); - self.revive_team_progressbar.progresstext destroyelem(); - } -} - -kick_the_meat( meat, laststand_nudge ) -{ - if ( isdefined( self._kicking_meat ) && self._kicking_meat ) - return; - - fake_meat = 0; - self._kicking_meat = 1; - self._spawning_meat = 1; - org = meat.origin; - - if ( !( isdefined( meat._fake_meat ) && meat._fake_meat ) ) - { - meat cleanup_meat(); - level._last_person_to_throw_meat = self; - level._last_person_to_throw_meat_time = gettime(); - level._meat_splitter_activated = 0; - } - else - { - fake_meat = 1; - meat cleanup_meat(); - } - - kickangles = self.angles; - kickangles += ( randomfloatrange( -30, -20 ), randomfloatrange( -5, 5 ), 0 ); - launchdir = anglestoforward( kickangles ); - vel = self getvelocity(); - speed = length( vel ) * 1.5; - height_boost = 380; - - if ( isdefined( laststand_nudge ) && laststand_nudge ) - { - if ( vel == ( 0, 0, 0 ) ) - vel = ( 30, 30, 5 ); - - speed = length( vel ) * 2; - height_boost = 120; - } - - launchvel = vectorscale( launchdir, speed ); - grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( launchvel[0], launchvel[1], height_boost ) ); - grenade playsound( "zmb_meat_meat_tossed" ); - grenade thread waittill_loopstart(); - - if ( fake_meat ) - { - grenade._fake_meat = 1; - grenade thread delete_on_real_meat_pickup(); - level._kicked_meat = grenade; - } - - wait 0.1; - self._spawning_meat = 0; - self._kicking_meat = 0; - - if ( !fake_meat ) - { - level notify( "meat_thrown", self ); - level notify( "meat_kicked" ); - } -} - -delete_on_real_meat_pickup() -{ - if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) - return; - - self endon( "death" ); - level waittill_any( "meat_grabbed", "end_game", "meat_kicked" ); - add_meat_event( "fake_meat_killed_by_real", self ); - - if ( isdefined( level._kicked_meat ) && level._kicked_meat == self ) - level._kicked_meat = undefined; - - if ( isdefined( self ) ) - self cleanup_meat(); -} - -play_item_meat_on_spawn_retrieve_trigger( watcher, player ) -{ - self item_meat_on_spawn_retrieve_trigger( watcher, player, get_gamemode_var( "item_meat_name" ) ); -} - -can_revive( revivee ) -{ - if ( self hasweapon( get_gamemode_var( "item_meat_name" ) ) ) - return false; - - if ( !self maps\mp\zombies\_zm_laststand::is_reviving_any() && isdefined( level.item_meat_pick_up_trigger ) && self istouching( level.item_meat_pick_up_trigger ) ) - return false; - - return true; -} - -pickup_origin() -{ - origin = self get_eye(); - - if ( !isdefined( origin ) ) - origin = self gettagorigin( "tag_weapon" ); - - if ( !isdefined( origin ) ) - origin = self gettagorigin( "tag_weapon_right" ); - - if ( !isdefined( origin ) ) - origin = self.origin; - - return origin; -} - -can_spike_meat() -{ - if ( isdefined( level._last_person_to_throw_meat ) && self == level._last_person_to_throw_meat ) - return false; - - meat = level.item_meat; - meat_spike_dist_sq = 4096; - meat_spike_dot = 0.1; - - if ( isdefined( meat ) ) - { - view_pos = self getweaponmuzzlepoint(); - - if ( distancesquared( view_pos, meat.origin ) < meat_spike_dist_sq ) - return true; - } - - return false; -} - -start_encounters_round_logic() -{ - if ( isdefined( level.flag["start_zombie_round_logic"] ) ) - flag_wait( "start_zombie_round_logic" ); - - flag_wait( "initial_players_connected" ); - - if ( !flag( "start_encounters_match_logic" ) ) - flag_set( "start_encounters_match_logic" ); -} - -onstartgametype() -{ - thread start_encounters_round_logic(); - maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zmeat", ::meat_hub_start_func, 1 ); -} - -hide_non_meat_objects() -{ - door_trigs = getentarray( "zombie_door", "targetname" ); - - for ( i = 0; i < door_trigs.size; i++ ) - { - if ( isdefined( door_trigs[i] ) ) - door_trigs[i] delete(); - } - - objects = getentarray(); - - for ( i = 0; i < objects.size; i++ ) - { - if ( objects[i] is_meat_object() ) - continue; - - if ( objects[i] iszbarrier() ) - continue; - - if ( isdefined( objects[i].spawnflags ) && objects[i].spawnflags == 1 ) - objects[i] connectpaths(); - - objects[i] notsolid(); - objects[i] hide(); - } -} - -is_meat_object() -{ - if ( !isdefined( self.script_parameters ) ) - return true; - - tokens = strtok( self.script_parameters, " " ); - - for ( i = 0; i < tokens.size; i++ ) - { - if ( tokens[i] == "meat_remove" ) - return false; - } - - return true; -} - -setup_meat_world_objects() -{ - objects = getentarray( level.scr_zm_map_start_location, "script_noteworthy" ); - - for ( i = 0; i < objects.size; i++ ) - { - if ( !objects[i] is_meat_object() ) - continue; - - if ( isdefined( objects[i].script_gameobjectname ) ) - continue; - - if ( isdefined( objects[i].script_vector ) ) - { - objects[i] moveto( objects[i].origin + objects[i].script_vector, 0.05 ); - - objects[i] waittill( "movedone" ); - } - - if ( isdefined( objects[i].spawnflags ) && objects[i].spawnflags == 1 && !( isdefined( level._dont_reconnect_paths ) && level._dont_reconnect_paths ) ) - objects[i] disconnectpaths(); - } - - level clientnotify( "meat_" + level.scr_zm_map_start_location ); -} - -spawn_meat_zombies() -{ - level endon( "meat_end" ); - force_riser = 0; - force_chaser = 0; - num = 0; - max_ai_num = 15; - - if ( getdvarint( _hash_CD22CF55 ) > 0 ) - max_ai_num = 0; - - if ( getdvarint( _hash_FA81816F ) == 2 ) - max_ai_num = -1; - - level waittill( "meat_grabbed" ); - - while ( true ) - { - ai = getaiarray( level.zombie_team ); - - if ( ai.size > max_ai_num ) - wait 0.1; - else - { - if ( num % 2 == 0 ) - spawn_points = level._meat_team_1_zombie_spawn_points; - else - spawn_points = level._meat_team_2_zombie_spawn_points; - - num++; - spawn_point = undefined; - dist = 512; - distcheck = dist * dist; - startindex = randomint( spawn_points.size ); - - while ( !isdefined( spawn_point ) ) - { - for ( i = 0; i < spawn_points.size; i++ ) - { - index = ( startindex + i ) % spawn_points.size; - point = spawn_points[index]; - - if ( num % 2 == 0 ) - players = get_players_on_meat_team( 1 ); - else - players = get_players_on_meat_team( 2 ); - - clear = 1; - - foreach ( player in players ) - { - if ( distancesquared( player.origin, point.origin ) < distcheck ) - clear = 0; - } - - if ( clear ) - { - spawn_point = point; - break; - } - } - - if ( dist <= 128 ) - spawn_point = point; - else - { - dist /= 4; - distcheck = dist * dist; - } - - wait 0.05; - } - - zombie = spawn_meat_zombie( level.meat_spawners[0], "meat_zombie", spawn_point, level._meat_zombie_spawn_health ); - - if ( isdefined( zombie ) ) - zombie maps\mp\zombies\_zm_game_module::make_supersprinter(); - } - - wait( level._meat_zombie_spawn_timer ); - } -} - -spawn_meat_zombie( spawner, target_name, spawn_point, round_number ) -{ - level endon( "meat_end" ); - - if ( !isdefined( spawner ) ) - { - iprintlnbold( "BUG: There is something wrong with the zombie spawners" ); - return; - } - - while ( isdefined( level._meat_zombie_spawning ) && level._meat_zombie_spawning ) - wait 0.05; - - level._meat_zombie_spawning = 1; - level.zombie_spawn_locations = []; - level.zombie_spawn_locations[level.zombie_spawn_locations.size] = spawn_point; - zombie = maps\mp\zombies\_zm_utility::spawn_zombie( spawner, target_name, spawn_point, round_number ); - - if ( isdefined( zombie ) ) - { - zombie thread maps\mp\zombies\_zm_spawner::zombie_spawn_init(); - zombie thread maps\mp\zombies\_zm::round_spawn_failsafe(); - } - else - iprintlnbold( "BUG: There is something wrong with the zombie spawning" ); - - spawner._spawning = undefined; - level._meat_zombie_spawning = 0; - return zombie; -} - -monitor_meat_on_team() -{ - level endon( "meat_end" ); - - while ( true ) - { - players = get_players(); - - if ( isdefined( level._meat_on_team ) ) - { - for ( i = 0; i < players.size; i++ ) - { - if ( !isdefined( players[i] ) ) - continue; - - if ( players[i]._meat_team == level._meat_on_team ) - { - if ( players[i].ignoreme ) - players[i].ignoreme = 0; - } - else if ( !players[i].ignoreme ) - players[i].ignoreme = 1; - - wait 0.05; - } - } - else - { - for ( i = 0; i < players.size; i++ ) - { - if ( !isdefined( players[i] ) ) - continue; - - if ( players[i].ignoreme ) - players[i].ignoreme = 0; - - wait 0.05; - } - } - - wait 0.1; - } -} - -item_meat_reset( origin, immediate ) -{ - level notify( "new_meat" ); - level endon( "new_meat" ); - - if ( isdefined( level.item_meat ) ) - { - level.item_meat cleanup_meat(); - level.item_meat = undefined; - } - - if ( !( isdefined( immediate ) && immediate ) ) - level waittill( "reset_meat" ); - - item_meat_clear(); - - if ( isdefined( origin ) ) - item_meat_spawn( origin ); -} - -meat_player_initial_spawn() -{ - players = get_players(); - one = 1; - two = 2; - - if ( get_game_var( "switchedsides" ) ) - { - one = 2; - two = 1; - } - - for ( i = 0; i < players.size; i++ ) - { - if ( get_game_var( "side_selection" ) == 1 ) - { - if ( players[i].team == "allies" ) - players[i]._meat_team = one; - else - players[i]._meat_team = two; - } - else if ( players[i].team == "allies" ) - players[i]._meat_team = two; - else - players[i]._meat_team = one; - - if ( isdefined( level.custom_player_fake_death_cleanup ) ) - players[i] [[ level.custom_player_fake_death_cleanup ]](); - - players[i] setstance( "stand" ); - - if ( isdefined( players[i]._meat_team ) ) - { - if ( players[i]._meat_team == one ) - players[i]._meat_team = one; - else - players[i]._meat_team = two; - } - else if ( players[i].team == "axis" ) - players[i]._meat_team = one; - else - players[i]._meat_team = two; - - players[i] meat_player_setup(); - } - - waittillframeend; - maps\mp\gametypes_zm\_zm_gametype::start_round(); - award_grenades_for_team( 1 ); - award_grenades_for_team( 2 ); -} - -meat_player_setup() -{ - self.pers["zteam"] = self._meat_team; - self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "encounters_team", 0 ); - self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "characterindex", 0 ); - self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "team_name", 0 ); - self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "spectator_respawn", 0 ); - self.pers["encounters_team"] = self._encounters_team; - self.pers["characterindex"] = self.characterindex; - self.pers["team_name"] = self._team_name; - self.pers["meat_spectator_respawn"] = self.spectator_respawn; - self.score = 1000; - self.pers["score"] = 1000; - self takeallweapons(); - self giveweapon( "knife_zm" ); - self give_start_weapon( 1 ); - - if ( !isdefined( self._saved_by_throw ) ) - self._saved_by_throw = 0; - - self setmovespeedscale( 1 ); - self._has_meat = 0; - self setclientfield( "holding_meat", 0 ); - self freeze_player_controls( 1 ); -} - -can_touch_meat() -{ - if ( isdefined( self.dont_touch_the_meat ) && self.dont_touch_the_meat ) - return 0; - - meat = level.item_meat; - - if ( isdefined( meat ) ) - { - meatorg = meat.origin + vectorscale( ( 0, 0, 1 ), 8.0 ); - trace = bullettrace( self pickup_origin(), meatorg, 0, meat ); - return distancesquared( trace["position"], meatorg ) < 1; - } - - return 0; -} - -trying_to_use() -{ - self.use_ever_released |= !self usebuttonpressed(); - return self.use_ever_released && self usebuttonpressed(); -} - -trying_to_spike( item ) -{ - return item.meat_is_flying && self meleebuttonpressed(); -} - -item_quick_trigger( meat_id, trigger ) -{ - self endon( "death" ); - meat_trigger_time = 150; - - if ( isdefined( trigger.radius ) ) - radius = trigger.radius + 15.0; - else - radius = 51.0; - - trigrad2 = radius * radius; - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - player = players[i]; - player.use_ever_released = !player usebuttonpressed(); - } - - while ( isdefined( trigger ) ) - { - trigorg = trigger.origin; - players = get_players(); - - if ( players.size ) - { - random_start_point = randomint( players.size ); - - for ( i = 0; i < players.size; i++ ) - { - player = players[( i + random_start_point ) % players.size]; - - if ( !isdefined( player.trying_to_trigger_meat ) ) - player.trying_to_trigger_meat = []; - - if ( !isdefined( player.trying_to_trigger_meat_time ) ) - player.trying_to_trigger_meat_time = []; - - if ( player maps\mp\zombies\_zm_laststand::is_reviving_any() ) - continue; - - meleeing = player ismeleeing(); - - if ( isdefined( trigger ) && player istouching( trigger ) && distance2dsquared( player.origin, trigorg ) < trigrad2 && !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && ( player trying_to_use() || self.meat_is_flying && meleeing ) && player can_touch_meat() ) - { - if ( self.meat_is_flying && meleeing ) - { - if ( player can_spike_meat() ) - { - player.trying_to_trigger_meat[meat_id] = 0; - trigger notify( "usetrigger", player ); - } - } - else if ( !( isdefined( player.trying_to_trigger_meat[meat_id] ) && player.trying_to_trigger_meat[meat_id] ) ) - { - player.trying_to_trigger_meat[meat_id] = 1; - player.trying_to_trigger_meat_time[meat_id] = gettime(); - } - else if ( gettime() - player.trying_to_trigger_meat_time[meat_id] >= meat_trigger_time ) - { - player.trying_to_trigger_meat[meat_id] = 0; - trigger notify( "usetrigger", player ); - } - - continue; - } - - player.trying_to_trigger_meat[meat_id] = 0; - player.trying_to_trigger_meat_time[meat_id] = undefined; - } - } - - wait 0.05; - } -} - -item_meat_watch_trigger( meat_id, trigger, callback, playersoundonuse, npcsoundonuse ) -{ - self endon( "death" ); - self thread item_quick_trigger( meat_id, trigger ); - - while ( true ) - { - trigger waittill( "usetrigger", player ); - - if ( !isalive( player ) ) - continue; - - if ( !is_player_valid( player ) ) - continue; - - if ( player has_powerup_weapon() ) - continue; - - if ( player maps\mp\zombies\_zm_laststand::is_reviving_any() ) - continue; - - volley = self.meat_is_flying && player meleebuttonpressed(); - player.volley_meat = volley; - - if ( isdefined( self._fake_meat ) && self._fake_meat ) - add_meat_event( "player_fake_take", player, self ); - else if ( volley ) - add_meat_event( "player_volley", player, self ); - else if ( self.meat_is_moving ) - add_meat_event( "player_catch", player, self ); - else - add_meat_event( "player_take", player, self ); - - if ( isdefined( self._fake_meat ) && self._fake_meat ) - { - player playlocalsound( level.zmb_laugh_alias ); - wait_network_frame(); - - if ( !isdefined( self ) ) - return; - - self cleanup_meat(); - return; - } - - curr_weap = player getcurrentweapon(); - - if ( !is_meat( curr_weap ) ) - player.pre_meat_weapon = curr_weap; - - if ( self.meat_is_moving ) - { - if ( volley ) - self item_meat_volley( player ); - else - self item_meat_caught( player, self.meat_is_flying ); - } - - self item_meat_pickup(); - - if ( isdefined( playersoundonuse ) ) - player playlocalsound( playersoundonuse ); - - if ( isdefined( npcsoundonuse ) ) - player playsound( npcsoundonuse ); - - if ( volley ) - player thread spike_the_meat( self ); - else - { - self thread [[ callback ]]( player ); - - if ( !isdefined( player._meat_hint_shown ) ) - { - player thread show_meat_throw_hint(); - player._meat_hint_shown = 1; - } - } - } -} - -item_meat_volley( player ) -{ -/# - println( "MEAT: Spiked the meat\n" ); -#/ -} - -item_meat_caught( player, in_air ) -{ - if ( in_air ) - { -/# - println( "MEAT: Caught the meat on the fly\n" ); -#/ - } - else - { -/# - println( "MEAT: Caught the meat while moving\n" ); -#/ - } -} - -item_meat_on_pickup( player ) -{ -/# - assert( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand(), "Player in last stand triggered meat pickup" ); -#/ - player maps\mp\gametypes_zm\_weaponobjects::deleteweaponobjecthelper( self ); - self cleanup_meat(); - level.item_meat = undefined; - level._last_person_to_throw_meat = undefined; - assign_meat_to_team( player ); - level notify( "meat_grabbed" ); - player notify( "meat_grabbed" ); - level thread zmbvoxmeatonteamspecific( player._encounters_team ); - - if ( !player hasweapon( get_gamemode_var( "item_meat_name" ) ) ) - player giveweapon( get_gamemode_var( "item_meat_name" ) ); - - player increment_is_drinking(); - player switchtoweapon( get_gamemode_var( "item_meat_name" ) ); - player setweaponammoclip( get_gamemode_var( "item_meat_name" ), 2 ); - player thread waittill_thrown(); -} - -waittill_thrown() -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "reset_downed" ); - - self waittill( "grenade_fire", grenade ); - - grenade playsound( "zmb_meat_meat_tossed" ); - grenade thread waittill_loopstart(); -} - -waittill_loopstart() -{ - self endon( "stationary" ); - self endon( "death" ); - level endon( "meat_grabbed" ); - level endon( "end_game" ); - level endon( "meat_kicked" ); - - while ( true ) - { - self waittill( "grenade_bounce", pos, normal, ent ); - - self stopsounds(); - wait 0.05; - self playsound( "zmb_meat_bounce" ); - } -} - -item_meat_watch_shutdown() -{ - self waittill( "death" ); - - if ( isdefined( self.item_meat_pick_up_trigger ) ) - { - self.item_meat_pick_up_trigger delete(); - level.item_meat_pick_up_trigger = undefined; - } -} - -item_meat_clear() -{ - if ( isdefined( level.item_meat ) ) - { - level.item_meat cleanup_meat(); - level.item_meat = undefined; - } - - if ( isdefined( level._fake_meats ) ) - { - foreach ( meat in level._fake_meats ) - { - if ( isdefined( meat ) ) - meat cleanup_meat(); - } - - level._fake_meats = undefined; - } -} - -zombie_path_timer_override() -{ - return gettime() + randomfloatrange( 0.35, 1 ) * 1000; -} - -meat_poi_override_func() -{ - if ( isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving ) ) - { - if ( abs( level.item_meat.origin[2] - groundpos( level.item_meat.origin )[2] ) < 35 ) - { - level._zombies_ignoring_all = 0; - level notify( "clear_ignore_all" ); - return undefined; - } - - level thread set_ignore_all(); - meat_poi = []; - meat_poi[0] = groundpos( level.item_meat.origin ); - meat_poi[1] = level.item_meat; - return meat_poi; - } - - level._zombies_ignoring_all = 0; - return undefined; -} - -meat_end_match( winning_team ) -{ - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - if ( isdefined( players[i].has_minigun ) && players[i].has_minigun ) - { - primaryweapons = players[i] getweaponslistprimaries(); - - for ( x = 0; x < primaryweapons.size; x++ ) - { - if ( primaryweapons[x] == "minigun_zm" ) - players[i] takeweapon( "minigun_zm" ); - } - - players[i] notify( "minigun_time_over" ); - players[i].zombie_vars["zombie_powerup_minigun_on"] = 0; - players[i]._show_solo_hud = 0; - players[i].has_minigun = 0; - players[i].has_powerup_weapon = 0; - } - - if ( isdefined( players[i]._has_meat_hud ) ) - players[i]._has_meat_hud destroy(); - - if ( players[i] hasweapon( get_gamemode_var( "item_meat_name" ) ) ) - { - players[i] takeweapon( get_gamemode_var( "item_meat_name" ) ); - players[i] decrement_is_drinking(); - } - } - - level notify( "game_module_ended", winning_team ); - wait 0.1; - level delay_thread( 2, ::item_meat_clear ); - - if ( isdefined( level.gameended ) && level.gameended ) - level clientnotify( "end_meat" ); -} - -updatedownedcounters() -{ - if ( self._encounters_team == "A" ) - { - level.team_a_downed++; - self thread waitforrevive( "A" ); - level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_revive_" + level.team_a_downed, "A" ); - } - else - { - level.team_b_downed++; - self thread waitforrevive( "B" ); - level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_revive_" + level.team_b_downed, "B" ); - } -} - -waitforrevive( team ) -{ - self endon( "death" ); - - self waittill( "player_revived" ); - - if ( team == "A" ) - level.team_a_downed--; - else - level.team_b_downed--; -} - -assign_meat_to_team( player, team_num ) -{ - meat_team = undefined; - players = get_players(); - - if ( isdefined( player ) ) - { - for ( i = 0; i < players.size; i++ ) - { - if ( !isdefined( players[i] ) ) - continue; - - if ( players[i] != player || isdefined( player._meat_hint_shown ) && player._meat_hint_shown ) - players[i] iprintlnbold( &"ZOMBIE_GRABBED_MEAT", player.name ); - } - - meat_team = player._meat_team; - } - else if ( isdefined( team_num ) ) - { - for ( i = 0; i < players.size; i++ ) - { - if ( players[i]._meat_team == team_num ) - { - players[i] iprintlnbold( &"ZOMBIE_YOUR_TEAM_MEAT" ); - continue; - } - - players[i] iprintlnbold( &"ZOMBIE_OTHER_TEAM_MEAT" ); - } - - meat_team = team_num; - } - - level._meat_on_team = meat_team; - teamplayers = get_players_on_meat_team( meat_team ); - - if ( isdefined( teamplayers ) && teamplayers.size > 0 ) - { - if ( teamplayers[0]._encounters_team == "B" ) - { - setteamhasmeat( "allies", 1 ); - setteamhasmeat( "axis", 0 ); - } - else if ( teamplayers[0]._encounters_team == "A" ) - { - setteamhasmeat( "allies", 0 ); - setteamhasmeat( "axis", 1 ); - } - } - - for ( i = 0; i < players.size; i++ ) - { - if ( !isdefined( players[i] ) ) - continue; - - if ( isdefined( player ) && players[i] == player ) - { - if ( isdefined( players[i]._has_meat ) && players[i]._has_meat ) - continue; - - players[i]._has_meat = 1; - players[i] thread slow_down_player_with_meat(); - players[i] thread reset_meat_when_player_downed(); - players[i] thread reset_meat_when_player_disconnected(); - continue; - } - } -} - -zmbvoxmeatonteamspecific( team ) -{ - if ( !isdefined( level.zmbvoxteamlasthadmeat ) ) - level.zmbvoxteamlasthadmeat = team; - - if ( level.zmbvoxteamlasthadmeat == team ) - return; - - level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_grab", team ); - level.zmbvoxteamlasthadmeat = team; - otherteam = maps\mp\zombies\_zm_audio_announcer::getotherteam( team ); - level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_grab_" + otherteam, otherteam ); -} - -create_meat_team_hud( meat_team, destroy_only ) -{ - if ( isdefined( self._has_meat_hud ) ) - { - self._has_meat_hud destroy(); - - if ( isdefined( destroy_only ) ) - return; - } - - if ( !isdefined( meat_team ) ) - return; - - elem = newclienthudelem( self ); - elem.hidewheninmenu = 1; - elem.horzalign = "LEFT"; - elem.vertalign = "BOTTOM"; - elem.alignx = "left"; - elem.aligny = "middle"; - elem.x = 10; - elem.y = -10; - elem.foreground = 1; - elem.font = "default"; - elem.fontscale = 1.4; - elem.color = vectorscale( ( 1, 1, 0 ), 0.9 ); - elem.alpha = 1.0; - - if ( isdefined( self._meat_team ) && self._meat_team == meat_team ) - elem.label = &"ZOMBIE_TEAM_HAS_MEAT"; - else - elem.label = &"ZOMBIE_OTHER_TEAM_HAS_MEAT"; - - self._has_meat_hud = elem; -} - -create_meat_player_hud() -{ - if ( isdefined( self._has_meat_hud ) ) - self._has_meat_hud destroy(); - - elem = newclienthudelem( self ); - elem.hidewheninmenu = 1; - elem.horzalign = "LEFT"; - elem.vertalign = "BOTTOM"; - elem.alignx = "left"; - elem.aligny = "middle"; - elem.x = 10; - elem.y = -10; - elem.foreground = 1; - elem.font = "default"; - elem.fontscale = 1.4; - elem.color = vectorscale( ( 1, 1, 0 ), 0.9 ); - elem.alpha = 1.0; - elem.label = &"ZOMBIE_PLAYER_HAS_MEAT"; - self._has_meat_hud = elem; -} - -slow_down_player_with_meat() -{ - self endon( "disconnect" ); - self setclientfield( "holding_meat", 1 ); - self setmovespeedscale( 0.6 ); - self thread zmbvoxstartholdcounter(); - - while ( isdefined( self._has_meat ) && self._has_meat ) - { - level._meat_player_tracker_origin = self.origin; - wait 0.2; - } - - self setmovespeedscale( 1 ); - self setclientfield( "holding_meat", 0 ); -} - -zmbvoxstartholdcounter() -{ - for ( meat_hold_counter = 0; isdefined( self._has_meat ) && self._has_meat; meat_hold_counter++ ) - { - if ( meat_hold_counter >= 15 ) - { - self thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "meat_hold" ); - break; - } - - wait 0.5; - } -} - -reset_meat_when_player_downed() -{ - self notify( "reset_downed" ); - self endon( "reset_downed" ); - level endon( "meat_reset" ); - level endon( "meat_thrown" ); - self waittill_any( "player_downed", "death", "fake_death", "replace_weapon_powerup" ); - self._has_meat = 0; - self._spawning_meat = 1; - grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), self.origin + ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 15 ), ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 0 ) ); - grenade._respawned_meat = 1; - level._last_person_to_throw_meat = undefined; - playsoundatposition( "zmb_spawn_powerup", self.origin ); - wait 0.1; - self._spawning_meat = undefined; - level notify( "meat_reset" ); -} - -meat_last_stand_callback( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) -{ - if ( isdefined( self._has_meat ) && self._has_meat ) - level thread item_meat_drop( self.origin, self._meat_team ); -} - -reset_meat_when_player_disconnected() -{ - level endon( "meat_thrown" ); - level endon( "meat_reset" ); - level endon( "meat_end" ); - team = self._meat_team; - - self waittill( "disconnect" ); - - level thread item_meat_drop( level._meat_player_tracker_origin, team ); -} - -item_meat_drop( org, team ) -{ - players = get_alive_players_on_meat_team( team ); - - if ( players.size > 0 ) - { - player = players[0]; - player endon( "disconnect" ); - player._spawning_meat = 1; - grenade = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org + ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 15 ), ( 0, 0, 0 ) ); - grenade._respawned_meat = 1; - level._last_person_to_throw_meat = undefined; - playsoundatposition( "zmb_spawn_powerup", grenade.origin ); - wait 0.1; - player._spawning_meat = undefined; - level notify( "meat_reset" ); - } -} - -player_has_meat( player ) -{ - return player getcurrentweapon() == get_gamemode_var( "item_meat_name" ); -} - -get_player_with_meat() -{ - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - if ( isdefined( players[i]._has_meat ) && players[i]._has_meat ) - return players[i]; - } - - return undefined; -} - -spawn_player_meat_manager() -{ - self thread player_watch_weapon_change(); - self thread player_watch_grenade_throw(); -} - -player_watch_weapon_change() -{ - self endon( "death_or_disconnect" ); - - for (;;) - { - self waittill( "weapon_change", weapon ); - - if ( weapon == get_gamemode_var( "item_meat_name" ) ) - { - add_meat_event( "player_meat", self ); - continue; - } - - add_meat_event( "player_no_meat", self ); - } -} - -player_watch_grenade_throw() -{ - self endon( "death_or_disconnect" ); - - for (;;) - { - self waittill( "grenade_fire", weapon, weapname ); - - if ( weapname == get_gamemode_var( "item_meat_name" ) ) - { - add_meat_event( "player_grenade_fire", self, weapon ); - weapon thread item_meat_on_spawn_retrieve_trigger( undefined, self, get_gamemode_var( "item_meat_name" ) ); - } - } -} - -spawn_level_meat_manager() -{ -/# - level.meat_manager = spawnstruct(); - level.meat_manager.events = []; - level.meat_manager thread handle_meat_events(); -#/ -} - -add_meat_event( e, p1, p2, p3, p4 ) -{ -/# - event = spawnstruct(); - event.e = e; - event.numparams = 0; - event.param = []; - - if ( isdefined( p1 ) ) - { - event.param[0] = p1; - event.numparams = 1; - } - - if ( isdefined( p2 ) ) - { - event.param[1] = p2; - event.numparams = 2; - } - - if ( isdefined( p3 ) ) - { - event.param[2] = p3; - event.numparams = 3; - } - - if ( isdefined( p4 ) ) - { - event.param[3] = p4; - event.numparams = 4; - } - - if ( isdefined( level.meat_manager ) ) - level.meat_manager.events[level.meat_manager.events.size] = event; -#/ -} - -handle_meat_events() -{ - while ( true ) - { - while ( self.events.size ) - { - self handle_meat_event( self.events[0] ); - arrayremoveindex( self.events, 0 ); - } - - wait 0.05; - } -} - -paramstr( param ) -{ -/# - if ( !isdefined( param ) ) - return "undefined"; - - if ( isplayer( param ) ) - return param.name; - - if ( isstring( param ) || isint( param ) || isfloat( param ) || isvec( param ) ) - return param; - - if ( isarray( param ) ) - return "[]"; - - return ""; -#/ -} - -handle_meat_event( event ) -{ -/# - estr = "ZM MEAT: [" + event.e + "]("; - - for ( i = 0; i < event.numparams; i++ ) - { - estr += paramstr( event.param[i] ); - - if ( i < event.numparams - 1 ) - estr += ","; - } - - estr += ") \n"; - println( estr ); -#/ -} diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_equip_springpad.gsc b/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_equip_springpad.gsc deleted file mode 100644 index d770c74..0000000 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_equip_springpad.gsc +++ /dev/null @@ -1,632 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\zombies\_zm_utility; -#include maps\mp\zombies\_zm_equipment; -#include maps\mp\gametypes_zm\_weaponobjects; -#include maps\mp\zombies\_zm; -#include maps\mp\zombies\_zm_unitrigger; -#include maps\mp\zombies\_zm_power; -#include maps\mp\zombies\_zm_buildables; - -init( pickupstring, howtostring ) -{ - if ( !maps\mp\zombies\_zm_equipment::is_equipment_included( "equip_springpad_zm" ) ) - return; - - level.springpad_name = "equip_springpad_zm"; - init_animtree(); - maps\mp\zombies\_zm_equipment::register_equipment( "equip_springpad_zm", pickupstring, howtostring, "zom_hud_trample_steam_complete", "springpad", undefined, ::transferspringpad, ::dropspringpad, ::pickupspringpad, ::placespringpad ); - maps\mp\zombies\_zm_equipment::add_placeable_equipment( "equip_springpad_zm", "p6_anim_zm_buildable_view_tramplesteam" ); - level thread onplayerconnect(); - maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "equip_springpad", pickupstring ); - level._effect["springpade_on"] = loadfx( "maps/zombie_highrise/fx_highrise_trmpl_steam_os" ); - - if ( !isdefined( level.springpad_trigger_radius ) ) - level.springpad_trigger_radius = 72; - - thread wait_init_damage(); -} - -wait_init_damage() -{ - while ( !isdefined( level.zombie_vars ) || !isdefined( level.zombie_vars["zombie_health_start"] ) ) - wait 1; - - level.springpad_damage = maps\mp\zombies\_zm::ai_zombie_health( 50 ); -} - -onplayerconnect() -{ - for (;;) - { - level waittill( "connecting", player ); - - player thread onplayerspawned(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - self thread setupwatchers(); - - for (;;) - { - self waittill( "spawned_player" ); - - self thread watchspringpaduse(); - } -} - -setupwatchers() -{ - self waittill( "weapon_watchers_created" ); - - watcher = maps\mp\gametypes_zm\_weaponobjects::getweaponobjectwatcher( "equip_springpad" ); - watcher.onspawnretrievetriggers = maps\mp\zombies\_zm_equipment::equipment_onspawnretrievableweaponobject; -} - -watchspringpaduse() -{ - self notify( "watchSpringPadUse" ); - self endon( "watchSpringPadUse" ); - self endon( "death" ); - self endon( "disconnect" ); - - for (;;) - { - self waittill( "equipment_placed", weapon, weapname ); - - if ( weapname == level.springpad_name ) - { - self cleanupoldspringpad(); - self.buildablespringpad = weapon; - self thread startspringpaddeploy( weapon ); - } - } -} - -cleanupoldspringpad() -{ - if ( isdefined( self.buildablespringpad ) ) - { - if ( isdefined( self.buildablespringpad.stub ) ) - { - thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub ); - self.buildablespringpad.stub = undefined; - } - - self.buildablespringpad delete(); - self.springpad_kills = undefined; - } - - if ( isdefined( level.springpad_sound_ent ) ) - { - level.springpad_sound_ent delete(); - level.springpad_sound_ent = undefined; - } -} - -watchforcleanup() -{ - self notify( "springpad_cleanup" ); - self endon( "springpad_cleanup" ); - self waittill_any( "death_or_disconnect", "equip_springpad_zm_taken", "equip_springpad_zm_pickup" ); - cleanupoldspringpad(); -} - -placespringpad( origin, angles ) -{ - if ( isdefined( self.turret_placement ) && !self.turret_placement["result"] ) - { - forward = anglestoforward( angles ); - origin -= -24 * forward; - } - - item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", origin, angles, level.springpad_trigger_radius, -24 ); - - if ( isdefined( item ) ) - { - item.springpad_kills = self.springpad_kills; - item.requires_pickup = 1; - item.zombie_attack_callback = ::springpad_fling_attacker; - } - - self.springpad_kills = undefined; - return item; -} - -dropspringpad() -{ - item = self maps\mp\zombies\_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", self.origin, self.angles, level.springpad_trigger_radius, -24 ); - - if ( isdefined( item ) ) - { - item.springpad_kills = self.springpad_kills; - item.requires_pickup = 1; - } - - self.springpad_kills = undefined; - return item; -} - -pickupspringpad( item ) -{ - self.springpad_kills = item.springpad_kills; - item.springpad_kills = undefined; -} - -transferspringpad( fromplayer, toplayer ) -{ - buildablespringpad = toplayer.buildablespringpad; - toarmed = 0; - - if ( isdefined( buildablespringpad ) ) - toarmed = isdefined( buildablespringpad.is_armed ) && buildablespringpad.is_armed; - - springpad_kills = toplayer.springpad_kills; - fromarmed = 0; - - if ( isdefined( fromplayer.buildablespringpad ) ) - fromarmed = isdefined( fromplayer.buildablespringpad.is_armed ) && fromplayer.buildablespringpad.is_armed; - - toplayer.buildablespringpad = fromplayer.buildablespringpad; - toplayer.buildablespringpad.original_owner = toplayer; - toplayer.buildablespringpad.owner = toplayer; - toplayer notify( "equip_springpad_zm_taken" ); - toplayer.springpad_kills = fromplayer.springpad_kills; - toplayer thread startspringpaddeploy( toplayer.buildablespringpad, fromarmed ); - fromplayer.buildablespringpad = buildablespringpad; - fromplayer.springpad_kills = springpad_kills; - fromplayer notify( "equip_springpad_zm_taken" ); - - if ( isdefined( fromplayer.buildablespringpad ) ) - { - fromplayer thread startspringpaddeploy( fromplayer.buildablespringpad, toarmed ); - fromplayer.buildablespringpad.original_owner = fromplayer; - fromplayer.buildablespringpad.owner = fromplayer; - } - else - fromplayer maps\mp\zombies\_zm_equipment::equipment_release( "equip_springpad_zm" ); -} - -springpad_in_range( delta, origin, radius ) -{ - if ( distancesquared( self.target.origin, origin ) < radius * radius ) - return true; - - return false; -} - -springpad_power_on( origin, radius ) -{ -/# - println( "^1ZM POWER: trap on\n" ); -#/ - if ( !isdefined( self.target ) ) - return; - - self.target.power_on = 1; - self.target.power_on_time = gettime(); -} - -springpad_power_off( origin, radius ) -{ -/# - println( "^1ZM POWER: trap off\n" ); -#/ - if ( !isdefined( self.target ) ) - return; - - self.target.power_on = 0; -} - -startspringpaddeploy( weapon, armed ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_springpad_zm_taken" ); - self thread watchforcleanup(); - electricradius = 45; - - if ( isdefined( self.springpad_kills ) ) - { - weapon.springpad_kills = self.springpad_kills; - self.springpad_kills = undefined; - } - - if ( !isdefined( weapon.springpad_kills ) ) - weapon.springpad_kills = 0; - - if ( isdefined( weapon ) ) - { -/# - weapon thread debugspringpad( electricradius ); -#/ - if ( isdefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power ) - { - weapon.power_on = 0; - maps\mp\zombies\_zm_power::add_temp_powered_item( ::springpad_power_on, ::springpad_power_off, ::springpad_in_range, maps\mp\zombies\_zm_power::cost_high, 1, weapon.power_on, weapon ); - } - else - weapon.power_on = 1; - - if ( !weapon.power_on ) - self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" ); - - self thread springpadthink( weapon, electricradius, armed ); - - if ( !( isdefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power ) ) - { - - } - - self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( weapon ); - - weapon waittill( "death" ); - - if ( isdefined( level.springpad_sound_ent ) ) - { - level.springpad_sound_ent playsound( "wpn_zmb_electrap_stop" ); - level.springpad_sound_ent delete(); - level.springpad_sound_ent = undefined; - } - - self notify( "springpad_cleanup" ); - } -} - -init_animtree() -{ - scriptmodelsuseanimtree( -1 ); -} - -#using_animtree("zombie_springpad"); - -springpad_animate( weapon, armed ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_springpad_zm_taken" ); - weapon endon( "death" ); - weapon useanimtree( -1 ); - f_animlength = getanimlength( %o_zombie_buildable_tramplesteam_reset_zombie ); - r_animlength = getanimlength( %o_zombie_buildable_tramplesteam_reset ); - l_animlength = getanimlength( %o_zombie_buildable_tramplesteam_launch ); - weapon thread springpad_audio(); - prearmed = 0; - - if ( isdefined( armed ) && armed ) - prearmed = 1; - - fast_reset = 0; - - while ( isdefined( weapon ) ) - { - if ( !prearmed ) - { - if ( fast_reset ) - { - weapon setanim( %o_zombie_buildable_tramplesteam_reset_zombie ); - weapon thread playspringpadresetaudio( f_animlength ); - wait( f_animlength ); - } - else - { - weapon setanim( %o_zombie_buildable_tramplesteam_reset ); - weapon thread playspringpadresetaudio( r_animlength ); - wait( r_animlength ); - } - } - else - wait 0.05; - - prearmed = 0; - weapon notify( "armed" ); - fast_reset = 0; - - if ( isdefined( weapon ) ) - { - weapon setanim( %o_zombie_buildable_tramplesteam_compressed_idle ); - - weapon waittill( "fling", fast ); - - fast_reset = fast; - } - - if ( isdefined( weapon ) ) - { - weapon setanim( %o_zombie_buildable_tramplesteam_launch ); - wait( l_animlength ); - } - } -} - -playspringpadresetaudio( time ) -{ - self endon( "springpadAudioCleanup" ); - ent = spawn( "script_origin", self.origin ); - ent playloopsound( "zmb_highrise_launcher_reset_loop" ); - self thread deleteentwhensounddone( time, ent ); - - self waittill( "death" ); - - ent delete(); -} - -deleteentwhensounddone( time, ent ) -{ - self endon( "death" ); - wait( time ); - self notify( "springpadAudioCleanup" ); - ent delete(); -} - -springpad_audio() -{ - loop_ent = spawn( "script_origin", self.origin ); - loop_ent playloopsound( "zmb_highrise_launcher_loop" ); - - self waittill( "death" ); - - loop_ent delete(); -} - -springpad_fx( weapon ) -{ - weapon endon( "death" ); - self endon( "equip_springpad_zm_taken" ); - - while ( isdefined( weapon ) ) - { - playfxontag( level._effect["springpade_on"], weapon, "tag_origin" ); - wait 1; - } -} - -springpadthink( weapon, electricradius, armed ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_springpad_zm_taken" ); - weapon endon( "death" ); - radiussquared = electricradius * electricradius; - trigger = spawn( "trigger_box", weapon getcentroid(), 1, 48, 48, 32 ); - trigger.origin += anglestoforward( flat_angle( weapon.angles ) ) * -15; - trigger.angles = weapon.angles; - trigger enablelinkto(); - trigger linkto( weapon ); - weapon.trigger = trigger; -/# - trigger.extent = ( 24.0, 24.0, 16.0 ); -#/ - weapon thread springpadthinkcleanup( trigger ); - direction_forward = anglestoforward( flat_angle( weapon.angles ) + vectorscale( ( -1, 0, 0 ), 60.0 ) ); - direction_vector = vectorscale( direction_forward, 1024 ); - direction_origin = weapon.origin + direction_vector; - home_angles = weapon.angles; - weapon.is_armed = 0; - self thread springpad_fx( weapon ); - self thread springpad_animate( weapon, armed ); - - weapon waittill( "armed" ); - - weapon.is_armed = 1; - weapon.fling_targets = []; - self thread targeting_thread( weapon, trigger ); - - while ( isdefined( weapon ) ) - { - wait_for_targets( weapon ); - - if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 ) - { - weapon notify( "fling", weapon.zombies_only ); - weapon.is_armed = 0; - weapon.zombies_only = 1; - - foreach ( ent in weapon.fling_targets ) - { - if ( isplayer( ent ) ) - { - ent thread player_fling( weapon.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), weapon.angles, direction_vector, weapon ); - continue; - } - - if ( isdefined( ent ) && isdefined( ent.custom_springpad_fling ) ) - { - if ( !isdefined( self.num_zombies_flung ) ) - self.num_zombies_flung = 0; - - self.num_zombies_flung++; - self notify( "zombie_flung" ); - ent thread [[ ent.custom_springpad_fling ]]( weapon, self ); - continue; - } - - if ( isdefined( ent ) ) - { - if ( !isdefined( self.num_zombies_flung ) ) - self.num_zombies_flung = 0; - - self.num_zombies_flung++; - self notify( "zombie_flung" ); - - if ( !isdefined( weapon.fling_scaler ) ) - weapon.fling_scaler = 1; - - if ( isdefined( weapon.direction_vec_override ) ) - direction_vector = weapon.direction_vec_override; - - ent dodamage( ent.health + 666, ent.origin ); - ent startragdoll(); - ent launchragdoll( direction_vector / 4 * weapon.fling_scaler ); - weapon.springpad_kills++; - } - } - - if ( weapon.springpad_kills >= 28 ) - self thread springpad_expired( weapon ); - - weapon.fling_targets = []; - - weapon waittill( "armed" ); - - weapon.is_armed = 1; - } - else - wait 0.1; - } -} - -wait_for_targets( weapon ) -{ - weapon endon( "hi_priority_target" ); - - while ( isdefined( weapon ) ) - { - if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 ) - { - wait 0.15; - return; - } - - wait 0.05; - } -} - -targeting_thread( weapon, trigger ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_springpad_zm_taken" ); - weapon endon( "death" ); - weapon.zombies_only = 1; - - while ( isdefined( weapon ) ) - { - if ( weapon.is_armed ) - { - zombies = getaiarray( level.zombie_team ); - - foreach ( zombie in zombies ) - { - if ( !isdefined( zombie ) || !isalive( zombie ) ) - continue; - - if ( isdefined( zombie.ignore_spring_pad ) && zombie.ignore_spring_pad ) - continue; - - if ( zombie istouching( trigger ) ) - weapon springpad_add_fling_ent( zombie ); - } - - players = get_players(); - - foreach ( player in players ) - { - if ( is_player_valid( player ) && player istouching( trigger ) ) - { - weapon springpad_add_fling_ent( player ); - weapon.zombies_only = 0; - } - } - - if ( !weapon.zombies_only ) - weapon notify( "hi_priority_target" ); - } - - wait 0.05; - } -} - -springpad_fling_attacker( ent ) -{ - springpad_add_fling_ent( ent ); - - if ( isdefined( level.springpad_attack_delay ) ) - wait( level.springpad_attack_delay ); -} - -springpad_add_fling_ent( ent ) -{ - self.fling_targets = add_to_array( self.fling_targets, ent, 0 ); -} - -springpad_expired( weapon ) -{ - weapon maps\mp\zombies\_zm_equipment::dropped_equipment_destroy( 1 ); - self maps\mp\zombies\_zm_equipment::equipment_release( "equip_springpad_zm" ); - self.springpad_kills = 0; -} - -player_fling( origin, angles, velocity, weapon ) -{ - torigin = ( self.origin[0], self.origin[1], origin[2] ); - aorigin = ( origin + torigin ) * 0.5; - trace = physicstrace( origin, torigin, vectorscale( ( -1, -1, 0 ), 15.0 ), ( 15, 15, 30 ), self ); - - if ( !isdefined( trace ) || !isdefined( trace["fraction"] ) || trace["fraction"] < 1.0 ) - { - if ( !isdefined( weapon.springpad_kills ) ) - weapon.springpad_kills = 0; - - weapon.springpad_kills += 5; - - if ( weapon.springpad_kills >= 28 ) - weapon.owner thread springpad_expired( weapon ); - - return; - } - - self setorigin( aorigin ); - wait_network_frame(); - self setvelocity( velocity ); -} - -springpadthinkcleanup( trigger ) -{ - self waittill( "death" ); - - if ( isdefined( trigger ) ) - trigger delete(); -} - -debugspringpad( radius ) -{ -/# - color_armed = ( 0, 1, 0 ); - color_unarmed = vectorscale( ( 1, 1, 0 ), 0.65 ); - - while ( isdefined( self ) ) - { - if ( getdvarint( _hash_EB512CB7 ) ) - { - if ( isdefined( self.trigger ) ) - { - color = color_unarmed; - - if ( isdefined( self.is_armed ) && self.is_armed ) - color = color_armed; - - vec = self.trigger.extent; - box( self.trigger.origin, vec * -1, vec, self.trigger.angles[1], color, 1, 0, 1 ); - } - - color = ( 0, 1, 0 ); - text = ""; - - if ( isdefined( self.springpad_kills ) ) - text = "" + self.springpad_kills + ""; - else if ( isdefined( self.owner.springpad_kills ) ) - text = "[" + self.owner.springpad_kills + "]"; - - print3d( self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), text, color, 1, 0.5, 1 ); - } - - wait 0.05; - } -#/ -} diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_melee_weapon.gsc b/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_melee_weapon.gsc deleted file mode 100644 index adfca7a..0000000 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_melee_weapon.gsc +++ /dev/null @@ -1,580 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\zombies\_zm_utility; -#include maps\mp\zombies\_zm_weapons; -#include maps\mp\zombies\_zm_laststand; -#include maps\mp\zombies\_zm_pers_upgrades_functions; -#include maps\mp\zombies\_zm_score; -#include maps\mp\zombies\_zm_audio; - -init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) -{ - precacheitem( weapon_name ); - precacheitem( flourish_weapon_name ); - add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); - melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" ); - - for ( i = 0; i < melee_weapon_triggers.size; i++ ) - { - knife_model = getent( melee_weapon_triggers[i].target, "targetname" ); - - if ( isdefined( knife_model ) ) - knife_model hide(); - - melee_weapon_triggers[i] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); - - if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) - { - melee_weapon_triggers[i] sethintstring( hint_string, cost ); - - if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) - { - cursor_hint = "HINT_WEAPON"; - cursor_hint_weapon = weapon_name; - melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); - } - else - melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); - } - else - { - weapon_display = get_weapon_display_name( weapon_name ); - hint_string = &"ZOMBIE_WEAPONCOSTONLY"; - melee_weapon_triggers[i] sethintstring( hint_string, weapon_display, cost ); - - if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) - { - cursor_hint = "HINT_WEAPON"; - cursor_hint_weapon = weapon_name; - melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); - } - else - melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); - } - - melee_weapon_triggers[i] usetriggerrequirelookat(); - } - - melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" ); - - for ( i = 0; i < melee_weapon_structs.size; i++ ) - prepare_stub( melee_weapon_structs[i].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); - - register_melee_weapon_for_level( weapon_name ); - - if ( !isdefined( level.ballistic_weapon_name ) ) - level.ballistic_weapon_name = []; - - level.ballistic_weapon_name[weapon_name] = ballistic_weapon_name; - - if ( !isdefined( level.ballistic_upgraded_weapon_name ) ) - level.ballistic_upgraded_weapon_name = []; - - level.ballistic_upgraded_weapon_name[weapon_name] = ballistic_upgraded_weapon_name; -/# - if ( !isdefined( level.zombie_weapons[weapon_name] ) ) - { - if ( isdefined( level.devgui_add_weapon ) ) - [[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost ); - } -#/ -} - -prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) -{ - if ( isdefined( stub ) ) - { - if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) - { - stub.hint_string = hint_string; - - if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) - { - stub.cursor_hint = "HINT_WEAPON"; - stub.cursor_hint_weapon = weapon_name; - } - else - { - stub.cursor_hint = "HINT_NOICON"; - stub.cursor_hint_weapon = undefined; - } - } - else - { - stub.hint_parm1 = get_weapon_display_name( weapon_name ); - stub.hint_parm2 = cost; - stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; - - if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) - { - stub.cursor_hint = "HINT_WEAPON"; - stub.cursor_hint_weapon = weapon_name; - } - else - { - stub.cursor_hint = "HINT_NOICON"; - stub.cursor_hint_weapon = undefined; - } - } - - stub.cost = cost; - stub.weapon_name = weapon_name; - stub.vo_dialog_id = vo_dialog_id; - stub.flourish_weapon_name = flourish_weapon_name; - stub.ballistic_weapon_name = ballistic_weapon_name; - stub.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; - stub.trigger_func = ::melee_weapon_think; - stub.flourish_fn = flourish_fn; - } -} - -add_stub( stub, weapon_name ) -{ - melee_weapon = undefined; - - for ( i = 0; i < level._melee_weapons.size; i++ ) - { - if ( level._melee_weapons[i].weapon_name == weapon_name ) - { - melee_weapon = level._melee_weapons[i]; - break; - } - } - - if ( isdefined( stub ) && isdefined( melee_weapon ) ) - prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn ); -} - -give_melee_weapon_by_name( weapon_name ) -{ - melee_weapon = undefined; - - for ( i = 0; i < level._melee_weapons.size; i++ ) - { - if ( level._melee_weapons[i].weapon_name == weapon_name ) - { - melee_weapon = level._melee_weapons[i]; - break; - } - } - - if ( isdefined( melee_weapon ) ) - self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined ); -} - -add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) -{ - melee_weapon = spawnstruct(); - melee_weapon.weapon_name = weapon_name; - melee_weapon.flourish_weapon_name = flourish_weapon_name; - melee_weapon.ballistic_weapon_name = ballistic_weapon_name; - melee_weapon.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; - melee_weapon.cost = cost; - melee_weapon.wallbuy_targetname = wallbuy_targetname; - melee_weapon.hint_string = hint_string; - melee_weapon.vo_dialog_id = vo_dialog_id; - melee_weapon.flourish_fn = flourish_fn; - - if ( !isdefined( level._melee_weapons ) ) - level._melee_weapons = []; - - level._melee_weapons[level._melee_weapons.size] = melee_weapon; -} - -player_can_see_weapon_prompt( weapon_name ) -{ - if ( is_true( level._allow_melee_weapon_switching ) ) - return true; - - if ( isdefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) ) - return false; - - return true; -} - -spectator_respawn_all() -{ - for ( i = 0; i < level._melee_weapons.size; i++ ) - self spectator_respawn( level._melee_weapons[i].wallbuy_targetname, level._melee_weapons[i].weapon_name ); -} - -spectator_respawn( wallbuy_targetname, weapon_name ) -{ - melee_triggers = getentarray( wallbuy_targetname, "targetname" ); - players = get_players(); - - for ( i = 0; i < melee_triggers.size; i++ ) - { - melee_triggers[i] setvisibletoall(); - - if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) - { - for ( j = 0; j < players.size; j++ ) - { - if ( !players[j] player_can_see_weapon_prompt( weapon_name ) ) - melee_triggers[i] setinvisibletoplayer( players[j] ); - } - } - } -} - -trigger_hide_all() -{ - for ( i = 0; i < level._melee_weapons.size; i++ ) - self trigger_hide( level._melee_weapons[i].wallbuy_targetname ); -} - -trigger_hide( wallbuy_targetname ) -{ - melee_triggers = getentarray( wallbuy_targetname, "targetname" ); - - for ( i = 0; i < melee_triggers.size; i++ ) - melee_triggers[i] setinvisibletoplayer( self ); -} - -has_any_ballistic_knife() -{ - if ( self hasweapon( "knife_ballistic_zm" ) ) - return true; - - if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) - return true; - - for ( i = 0; i < level._melee_weapons.size; i++ ) - { - if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) ) - return true; - - if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) - return true; - } - - return false; -} - -has_upgraded_ballistic_knife() -{ - if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) - return true; - - for ( i = 0; i < level._melee_weapons.size; i++ ) - { - if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) - return true; - } - - return false; -} - -give_ballistic_knife( weapon_string, upgraded ) -{ - current_melee_weapon = self get_player_melee_weapon(); - - if ( isdefined( current_melee_weapon ) ) - { - if ( upgraded && isdefined( level.ballistic_upgraded_weapon_name ) && isdefined( level.ballistic_upgraded_weapon_name[current_melee_weapon] ) ) - weapon_string = level.ballistic_upgraded_weapon_name[current_melee_weapon]; - - if ( !upgraded && isdefined( level.ballistic_weapon_name ) && isdefined( level.ballistic_weapon_name[current_melee_weapon] ) ) - weapon_string = level.ballistic_weapon_name[current_melee_weapon]; - } - - return weapon_string; -} - -change_melee_weapon( weapon_name, current_weapon ) -{ - current_melee_weapon = self get_player_melee_weapon(); - - if ( isdefined( current_melee_weapon ) && current_melee_weapon != weapon_name ) - { - self takeweapon( current_melee_weapon ); - unacquire_weapon_toggle( current_melee_weapon ); - } - - self set_player_melee_weapon( weapon_name ); - had_ballistic = 0; - had_ballistic_upgraded = 0; - ballistic_was_primary = 0; - primaryweapons = self getweaponslistprimaries(); - - for ( i = 0; i < primaryweapons.size; i++ ) - { - primary_weapon = primaryweapons[i]; - - if ( issubstr( primary_weapon, "knife_ballistic_" ) ) - { - had_ballistic = 1; - - if ( primary_weapon == current_weapon ) - ballistic_was_primary = 1; - - self notify( "zmb_lost_knife" ); - self takeweapon( primary_weapon ); - unacquire_weapon_toggle( primary_weapon ); - - if ( issubstr( primary_weapon, "upgraded" ) ) - had_ballistic_upgraded = 1; - } - } - - if ( had_ballistic ) - { - if ( had_ballistic_upgraded ) - { - new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name]; - - if ( ballistic_was_primary ) - current_weapon = new_ballistic; - - self giveweapon( new_ballistic, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) ); - } - else - { - new_ballistic = level.ballistic_weapon_name[weapon_name]; - - if ( ballistic_was_primary ) - current_weapon = new_ballistic; - - self giveweapon( new_ballistic, 0 ); - } - } - - return current_weapon; -} - -melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) -{ - self.first_time_triggered = 0; - - if ( isdefined( self.stub ) ) - { - self endon( "kill_trigger" ); - - if ( isdefined( self.stub.first_time_triggered ) ) - self.first_time_triggered = self.stub.first_time_triggered; - - weapon_name = self.stub.weapon_name; - cost = self.stub.cost; - flourish_fn = self.stub.flourish_fn; - vo_dialog_id = self.stub.vo_dialog_id; - flourish_weapon_name = self.stub.flourish_weapon_name; - ballistic_weapon_name = self.stub.ballistic_weapon_name; - ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name; - players = getplayers(); - - if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) - { - for ( i = 0; i < players.size; i++ ) - { - if ( !players[i] player_can_see_weapon_prompt( weapon_name ) ) - self setinvisibletoplayer( players[i] ); - } - } - } - - for (;;) - { - self waittill( "trigger", player ); - - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0.5 ); - continue; - } - - if ( player in_revive_trigger() ) - { - wait 0.1; - continue; - } - - if ( player isthrowinggrenade() ) - { - wait 0.1; - continue; - } - - if ( player.is_drinking > 0 ) - { - wait 0.1; - continue; - } - - if ( player hasweapon( weapon_name ) || player has_powerup_weapon() ) - { - wait 0.1; - continue; - } - - if ( player isswitchingweapons() ) - { - wait 0.1; - continue; - } - - current_weapon = player getcurrentweapon(); - - if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) || player has_powerup_weapon() ) - { - wait 0.1; - continue; - } - - if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission ) - { - wait 0.1; - continue; - } - - player_has_weapon = player hasweapon( weapon_name ); - - if ( !player_has_weapon ) - { - cost = self.stub.cost; - - if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) - cost = int( cost / 2 ); - - if ( player.score >= cost ) - { - if ( self.first_time_triggered == 0 ) - { - model = getent( self.target, "targetname" ); - - if ( isdefined( model ) ) - model thread melee_weapon_show( player ); - else if ( isdefined( self.clientfieldname ) ) - level setclientfield( self.clientfieldname, 1 ); - - self.first_time_triggered = 1; - - if ( isdefined( self.stub ) ) - self.stub.first_time_triggered = 1; - } - - player maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 ); - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" ); - player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self ); - } - else - { - play_sound_on_ent( "no_purchase" ); - player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 ); - } - - continue; - } - - if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) - self setinvisibletoplayer( player ); - } -} - -melee_weapon_show( player ) -{ - player_angles = vectortoangles( player.origin - self.origin ); - player_yaw = player_angles[1]; - weapon_yaw = self.angles[1]; - yaw_diff = angleclamp180( player_yaw - weapon_yaw ); - - if ( yaw_diff > 0 ) - yaw = weapon_yaw - 90; - else - yaw = weapon_yaw + 90; - - self.og_origin = self.origin; - self.origin += anglestoforward( ( 0, yaw, 0 ) ) * 8; - wait 0.05; - self show(); - play_sound_at_pos( "weapon_show", self.origin, self ); - time = 1; - self moveto( self.og_origin, time ); -} - -give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger ) -{ - if ( isdefined( flourish_fn ) ) - self thread [[ flourish_fn ]](); - - gun = self do_melee_weapon_flourish_begin( flourish_weapon_name ); - self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id ); - self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); - self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); - - if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) - return; - - if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) - { - if ( isdefined( trigger ) ) - trigger setinvisibletoplayer( self ); - - self trigger_hide_all(); - } -} - -do_melee_weapon_flourish_begin( flourish_weapon_name ) -{ - self increment_is_drinking(); - self disable_player_move_states( 1 ); - gun = self getcurrentweapon(); - weapon = flourish_weapon_name; - self giveweapon( weapon ); - self switchtoweapon( weapon ); - return gun; -} - -do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) -{ -/# - assert( !is_zombie_perk_bottle( gun ) ); -#/ -/# - assert( gun != level.revive_tool ); -#/ - self enable_player_move_states(); - weapon = flourish_weapon_name; - - if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) - { - self takeweapon( weapon ); - self.lastactiveweapon = "none"; - return; - } - - self takeweapon( weapon ); - self giveweapon( weapon_name ); - gun = change_melee_weapon( weapon_name, gun ); - - if ( self hasweapon( "knife_zm" ) ) - self takeweapon( "knife_zm" ); - - if ( self is_multiple_drinking() ) - { - self decrement_is_drinking(); - return; - } - else if ( gun == "knife_zm" ) - { - self switchtoweapon( weapon_name ); - self decrement_is_drinking(); - return; - } - else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) - self switchtoweapon( gun ); - else - { - primaryweapons = self getweaponslistprimaries(); - - if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) - self switchtoweapon( primaryweapons[0] ); - } - - self waittill( "weapon_change_complete" ); - - if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) ) - self decrement_is_drinking(); -} diff --git a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_weapon_locker.gsc b/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_weapon_locker.gsc deleted file mode 100644 index e3cc38b..0000000 --- a/Zombie Maps/Buried/zm_buried_patch/maps/mp/zombies/_zm_weapon_locker.gsc +++ /dev/null @@ -1,327 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\zombies\_zm_utility; -#include maps\mp\zombies\_zm_magicbox; -#include maps\mp\zombies\_zm_weapons; -#include maps\mp\zombies\_zm_stats; -#include maps\mp\zombies\_zm_unitrigger; -#include maps\mp\zombies\_zm_audio; - -main() -{ - if ( !isdefined( level.weapon_locker_map ) ) - level.weapon_locker_map = level.script; - - level.weapon_locker_online = sessionmodeisonlinegame(); - weapon_lockers = getstructarray( "weapons_locker", "targetname" ); - array_thread( weapon_lockers, ::triggerweaponslockerwatch ); -} - -wl_has_stored_weapondata() -{ - if ( level.weapon_locker_online ) - return self has_stored_weapondata( level.weapon_locker_map ); - else - return isdefined( self.stored_weapon_data ); -} - -wl_get_stored_weapondata() -{ - if ( level.weapon_locker_online ) - return self get_stored_weapondata( level.weapon_locker_map ); - else - return self.stored_weapon_data; -} - -wl_clear_stored_weapondata() -{ - if ( level.weapon_locker_online ) - self clear_stored_weapondata( level.weapon_locker_map ); - else - self.stored_weapon_data = undefined; -} - -wl_set_stored_weapondata( weapondata ) -{ - if ( level.weapon_locker_online ) - self set_stored_weapondata( weapondata, level.weapon_locker_map ); - else - self.stored_weapon_data = weapondata; -} - -triggerweaponslockerwatch() -{ - unitrigger_stub = spawnstruct(); - unitrigger_stub.origin = self.origin; - - if ( isdefined( self.script_angles ) ) - unitrigger_stub.angles = self.script_angles; - else - unitrigger_stub.angles = self.angles; - - unitrigger_stub.script_angles = unitrigger_stub.angles; - - if ( isdefined( self.script_length ) ) - unitrigger_stub.script_length = self.script_length; - else - unitrigger_stub.script_length = 16; - - if ( isdefined( self.script_width ) ) - unitrigger_stub.script_width = self.script_width; - else - unitrigger_stub.script_width = 32; - - if ( isdefined( self.script_height ) ) - unitrigger_stub.script_height = self.script_height; - else - unitrigger_stub.script_height = 64; - - unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * unitrigger_stub.script_length / 2; - unitrigger_stub.targetname = "weapon_locker"; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.clientfieldname = "weapon_locker"; - maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - unitrigger_stub.prompt_and_visibility_func = ::triggerweaponslockerthinkupdateprompt; - maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::triggerweaponslockerthink ); -} - -triggerweaponslockerisvalidweapon( weaponname ) -{ - weaponname = get_base_weapon_name( weaponname, 1 ); - - if ( !is_weapon_included( weaponname ) ) - return false; - - if ( is_offhand_weapon( weaponname ) || is_limited_weapon( weaponname ) ) - return false; - - return true; -} - -triggerweaponslockerisvalidweaponpromptupdate( player, weaponname ) -{ - retrievingweapon = player wl_has_stored_weapondata(); - - if ( !retrievingweapon ) - { - weaponname = player get_nonalternate_weapon( weaponname ); - - if ( !triggerweaponslockerisvalidweapon( weaponname ) ) - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); - else - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_STORE" ); - } - else - { - weapondata = player wl_get_stored_weapondata(); - - if ( isdefined( level.remap_weapon_locker_weapons ) ) - weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons ); - - weapontogive = weapondata["name"]; - primaries = player getweaponslistprimaries(); - maxweapons = get_player_weapon_limit( player ); - weaponname = player get_nonalternate_weapon( weaponname ); - - if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == weaponname ) - { - if ( !triggerweaponslockerisvalidweapon( weaponname ) ) - { - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); - return; - } - } - - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" ); - } -} - -triggerweaponslockerthinkupdateprompt( player ) -{ - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - return 1; -} - -triggerweaponslockerthink() -{ - self.parent_player thread triggerweaponslockerweaponchangethink( self ); - - while ( true ) - { - self waittill( "trigger", player ); - - retrievingweapon = player wl_has_stored_weapondata(); - - if ( !retrievingweapon ) - { - curweapon = player getcurrentweapon(); - curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon ); - - if ( !triggerweaponslockerisvalidweapon( curweapon ) ) - continue; - - weapondata = player maps\mp\zombies\_zm_weapons::get_player_weapondata( player ); - player wl_set_stored_weapondata( weapondata ); -/# - assert( curweapon == weapondata["name"], "weapon data does not match" ); -#/ - player takeweapon( curweapon ); - primaries = player getweaponslistprimaries(); - - if ( isdefined( primaries[0] ) ) - player switchtoweapon( primaries[0] ); - else - player maps\mp\zombies\_zm_weapons::give_fallback_weapon(); - - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - player playsoundtoplayer( "evt_fridge_locker_close", player ); - player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "weapon_storage" ); - } - else - { - curweapon = player getcurrentweapon(); - primaries = player getweaponslistprimaries(); - weapondata = player wl_get_stored_weapondata(); - - if ( isdefined( level.remap_weapon_locker_weapons ) ) - weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons ); - - weapontogive = weapondata["name"]; - - if ( !triggerweaponslockerisvalidweapon( weapontogive ) ) - { - player playlocalsound( level.zmb_laugh_alias ); - player wl_clear_stored_weapondata(); - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - continue; - } - - curweap_base = maps\mp\zombies\_zm_weapons::get_base_weapon_name( curweapon, 1 ); - weap_base = maps\mp\zombies\_zm_weapons::get_base_weapon_name( weapontogive, 1 ); - - if ( player has_weapon_or_upgrade( weap_base ) && weap_base != curweap_base ) - { - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); - wait 3; - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - continue; - } - - maxweapons = get_player_weapon_limit( player ); - - if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == curweapon ) - { - curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon ); - - if ( !triggerweaponslockerisvalidweapon( curweapon ) ) - { - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); - wait 3; - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - continue; - } - - curweapondata = player maps\mp\zombies\_zm_weapons::get_player_weapondata( player ); - player takeweapon( curweapondata["name"] ); - player maps\mp\zombies\_zm_weapons::weapondata_give( weapondata ); - player wl_clear_stored_weapondata(); - player wl_set_stored_weapondata( curweapondata ); - player switchtoweapon( weapondata["name"] ); - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - } - else - { - player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "wall_withdrawl" ); - player wl_clear_stored_weapondata(); - player maps\mp\zombies\_zm_weapons::weapondata_give( weapondata ); - player switchtoweapon( weapondata["name"] ); - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - } - - level notify( "weapon_locker_grab" ); - player playsoundtoplayer( "evt_fridge_locker_open", player ); - } - - wait 0.5; - } -} - -triggerweaponslockerweaponchangethink( trigger ) -{ - self endon( "disconnect" ); - self endon( "death" ); - trigger endon( "kill_trigger" ); - - while ( true ) - { - self waittill( "weapon_change", newweapon ); - - trigger triggerweaponslockerisvalidweaponpromptupdate( self, newweapon ); - } -} - -add_weapon_locker_mapping( fromweapon, toweapon ) -{ - if ( !isdefined( level.remap_weapon_locker_weapons ) ) - level.remap_weapon_locker_weapons = []; - - level.remap_weapon_locker_weapons[fromweapon] = toweapon; -} - -remap_weapon( weapondata, maptable ) -{ - name = get_base_name( weapondata["name"] ); - att = get_attachment_name( weapondata["name"] ); - - if ( isdefined( maptable[name] ) ) - { - weapondata["name"] = maptable[name]; - name = weapondata["name"]; - - if ( is_weapon_upgraded( name ) ) - { - if ( isdefined( att ) && weapon_supports_attachments( name ) ) - { - base = get_base_weapon_name( name, 1 ); - - if ( !weapon_supports_this_attachment( base, att ) ) - att = random_attachment( base ); - - weapondata["name"] = weapondata["name"] + "+" + att; - } - else if ( weapon_supports_default_attachment( name ) ) - { - att = default_attachment( name ); - weapondata["name"] = weapondata["name"] + "+" + att; - } - } - } - else - return weapondata; - - name = weapondata["name"]; - dw_name = weapondualwieldweaponname( name ); - alt_name = weaponaltweaponname( name ); - - if ( name != "none" ) - { - weapondata["clip"] = int( min( weapondata["clip"], weaponclipsize( name ) ) ); - weapondata["stock"] = int( min( weapondata["stock"], weaponmaxammo( name ) ) ); - } - - if ( dw_name != "none" ) - weapondata["lh_clip"] = int( min( weapondata["lh_clip"], weaponclipsize( dw_name ) ) ); - - if ( alt_name != "none" ) - { - weapondata["alt_clip"] = int( min( weapondata["alt_clip"], weaponclipsize( alt_name ) ) ); - weapondata["alt_stock"] = int( min( weapondata["alt_stock"], weaponmaxammo( alt_name ) ) ); - } - - weapondata["dw_name"] = dw_name; - weapondata["alt_name"] = alt_name; - return weapondata; -} diff --git a/Zombie Maps/Buried/zm_buried_patch/readme.md b/Zombie Maps/Buried/zm_buried_patch/readme.md deleted file mode 100644 index f3098d5..0000000 --- a/Zombie Maps/Buried/zm_buried_patch/readme.md +++ /dev/null @@ -1,94 +0,0 @@ -### The following gscs compile and run successfully with no known errors: -``` -zm_buried_patch/maps/mp/zm_buried_gamemodes.gsc -zm_buried_patch/maps/mp/zm_buried_grief_street.gsc -zm_buried_patch/maps/mp/zm_buried_maze.gsc - -zm_buried_patch/maps/mp/gametypes_zm/zstandard.gsc -``` -### The following scripts compile and run successfully with minor errors: -``` -``` -### The following scripts compile and run successfully with major errors: -``` -zm_buried_patch/maps/mp/gametypes_zm/zcleansed.gsc -zm_buried_patch/maps/mp/zombies/_zm_weap_slowgun.gsc -``` -### The following scripts compile and run serverside but clients cannot join due to exe_client_field_mismatch -``` -``` -### The following scripts compile but cause a minidump or other severe error: -``` -``` -### The following scripts are not tested yet, uploaded to setup a baseline: -``` -``` -### The following scripts have been checked, but they have not been tested yet -``` -zm_buried_patch/maps/mp/zm_buried_sq.gsc - -``` -### The following scripts are not checked yet, uploaded to setup a baseline: -``` -zm_buried_patch/maps/mp/zm_buried.gsc -zm_buried_patch/maps/mp/zm_buried_achievement.gsc -zm_buried_patch/maps/mp/zm_buried_amb.gsc -zm_buried_patch/maps/mp/zm_buried_buildables.gsc -zm_buried_patch/maps/mp/zm_buried_classic.gsc -zm_buried_patch/maps/mp/zm_buried_distance_tracking.gsc -zm_buried_patch/maps/mp/zm_buried_ee.gsc -zm_buried_patch/maps/mp/zm_buried_ffotd.gsc -zm_buried_patch/maps/mp/zm_buried_fountain.gsc -zm_buried_patch/maps/mp/zm_buried_fx.gsc -zm_buried_patch/maps/mp/zm_buried_jail.gsc -zm_buried_patch/maps/mp/zm_buried_power.gsc -zm_buried_patch/maps/mp/zm_buried_sq_bt.gsc -zm_buried_patch/maps/mp/zm_buried_sq_ctw.gsc -zm_buried_patch/maps/mp/zm_buried_sq_ftl.gsc -zm_buried_patch/maps/mp/zm_buried_sq_gl.gsc -zm_buried_patch/maps/mp/zm_buried_sq_ip.gsc -zm_buried_patch/maps/mp/zm_buried_sq_ll.gsc -zm_buried_patch/maps/mp/zm_buried_sq_mta.gsc -zm_buried_patch/maps/mp/zm_buried_sq_ows.gsc -zm_buried_patch/maps/mp/zm_buried_sq_tpo.gsc -zm_buried_patch/maps/mp/zm_buried_sq_ts.gsc -zm_buried_patch/maps/mp/zm_buried_standard.gsc -zm_buried_patch/maps/mp/zm_buried_turned_street.gsc - -zm_buried_patch/maps/mp/gametypes_zm/zgrief.gsc -zm_buried_patch/maps/mp/gametypes_zm/zmeat.gsc - -zm_buried_patch/maps/mp/teams/_teamset_cdc.gsc - -zm_buried_patch/maps/mp/zombies/_zm_ai_ghost.gsc -zm_buried_patch/maps/mp/zombies/_zm_ai_ghost_ffotd.gsc -zm_buried_patch/maps/mp/zombies/_zm_ai_sloth.gsc -zm_buried_patch/maps/mp/zombies/_zm_ai_sloth_buildables.gsc -zm_buried_patch/maps/mp/zombies/_zm_ai_sloth_crawler.gsc -zm_buried_patch/maps/mp/zombies/_zm_ai_sloth_ffotd.gsc -zm_buried_patch/maps/mp/zombies/_zm_ai_sloth_magicbox.gsc -zm_buried_patch/maps/mp/zombies/_zm_ai_sloth_utility.gsc -zm_buried_patch/maps/mp/zombies/_zm_banking.gsc -zm_buried_patch/maps/mp/zombies/_zm_buildables_pooled.gsc -zm_buried_patch/maps/mp/zombies/_zm_equip_headchopper.gsc -zm_buried_patch/maps/mp/zombies/_zm_equip_springpad.gsc -zm_buried_patch/maps/mp/zombies/_zm_equip_subwoofer.gsc -zm_buried_patch/maps/mp/zombies/_zm_game_module_cleansed.gsc -zm_buried_patch/maps/mp/zombies/_zm_game_module_grief.gsc -zm_buried_patch/maps/mp/zombies/_zm_game_module_meat.gsc -zm_buried_patch/maps/mp/zombies/_zm_game_module_meat_utility.gsc -zm_buried_patch/maps/mp/zombies/_zm_game_module_turned.gsc -zm_buried_patch/maps/mp/zombies/_zm_game_module_utility.gsc -zm_buried_patch/maps/mp/zombies/_zm_melee_weapon.gsc -zm_buried_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc -zm_buried_patch/maps/mp/zombies/_zm_perk_vulture.gsc -zm_buried_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc -zm_buried_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc -zm_buried_patch/maps/mp/zombies/_zm_weap_tomb_bomb.gsc -zm_buried_patch/maps/mp/zombies/_zm_weapon_locker.gsc -``` -### notes: -``` -``` - - diff --git a/Zombie Maps/Die Rise/zm_highrise/aitype/zm_ally_farmgirl.gsc b/Zombie Maps/Die Rise/zm_highrise/aitype/zm_ally_farmgirl.gsc deleted file mode 100644 index db62e5e..0000000 --- a/Zombie Maps/Die Rise/zm_highrise/aitype/zm_ally_farmgirl.gsc +++ /dev/null @@ -1,53 +0,0 @@ - -#using_animtree( "zm_ally" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %pb_laststand_idle; - dummy_anim_ref = %pb_stand_alert; - dummy_anim_ref = %pb_crouch_alert; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_ally_basic.asd"; - self.animtree = "zm_ally.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "allies"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_ally_farmgirl::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "allies" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_ally_basic" ); - character/c_zom_ally_farmgirl::precache(); -} diff --git a/Zombie Maps/Die Rise/zm_highrise/aitype/zm_highrise_basic_01.gsc b/Zombie Maps/Die Rise/zm_highrise/aitype/zm_highrise_basic_01.gsc deleted file mode 100644 index 76cd75e..0000000 --- a/Zombie Maps/Die Rise/zm_highrise/aitype/zm_highrise_basic_01.gsc +++ /dev/null @@ -1,429 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_highrise_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_slipslide_collapse; - dummy_anim_ref = %ai_zombie_walk_slipslide; - dummy_anim_ref = %ai_zombie_walk_slipslide_a; - dummy_anim_ref = %ai_zombie_run_slipslide; - dummy_anim_ref = %ai_zombie_run_slipslide_a; - dummy_anim_ref = %ai_zombie_sprint_slipslide; - dummy_anim_ref = %ai_zombie_sprint_slipslide_a; - dummy_anim_ref = %ai_zombie_stand_slipslide_recover; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_jump_down_40; - dummy_anim_ref = %ai_zombie_crawl_jump_down_40; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_120; - dummy_anim_ref = %ai_zombie_crawl_jump_down_120; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_down_184; - dummy_anim_ref = %ai_zombie_crawl_jump_down_184; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_175; - dummy_anim_ref = %ai_zombie_crawl_jump_up_175; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_dierise_escape_corridor; - dummy_anim_ref = %ai_zombie_traverse_round_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_round_counter_from_stools; - dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_alt_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_alt_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_gap; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_gap; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_antenna; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_antenna; - dummy_anim_ref = %ai_zombie_jump_up_sewing; - dummy_anim_ref = %ai_zombie_crawl_jump_up_sewing; - dummy_anim_ref = %ai_zombie_traverse_dierise_1_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_2_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_2_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_3_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_3_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_4_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_4_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_5_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_5_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_6_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_6_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_7_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_7_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap1_from_antenna; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap4a_slide_down_beam; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap4b_from_roof; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap6_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap6_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap7_from_top_ledge; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap7_to_top_ledge; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap8_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap15a_from_girder; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap15b_from_girder; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap15f_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap15g_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap16a_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap16a_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap16b_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap16b_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap17a_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap17c_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap17c_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap18_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_jump_down_to_elevator_roof; - dummy_anim_ref = %ai_zombie_crawl_jump_up_from_elevator_roof; - dummy_anim_ref = %ai_zombie_jump_down_to_elevator_roof; - dummy_anim_ref = %ai_zombie_jump_up_from_elevator_roof; - dummy_anim_ref = %ai_zombie_climb_elevator; - dummy_anim_ref = %ai_zombie_crawl_traverse_round_counter_to_stools; - dummy_anim_ref = %ai_zombie_crawl_traverse_round_counter_from_stools; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_alt_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_alt_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_1_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_2_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_2_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_3_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_3_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_4_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_4_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_5_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_5_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_6_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_6_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_7_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_7_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap1_from_antenna; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap4a_slide_down_beam; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap4b_from_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap6_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap6_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap7_from_top_ledge; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap7_to_top_ledge; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap8_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15a_from_girder; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15b_from_girder; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15f_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15f_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15g_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15g_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16a_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16a_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16b_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16b_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap17a_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap17a_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap17c_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap18_high_to_low; - dummy_anim_ref = %ai_zombie_riser_elevator_from_floor; - dummy_anim_ref = %ai_zombie_riser_elevator_from_ceiling; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_highrise_basic.asd"; - self.animtree = "zm_highrise_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 6 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie_civ_shorts::main(); - break; - case 1: - character/c_zom_zombie_civ_shorts2::main(); - break; - case 2: - character/c_zom_zombie_civ_shorts3::main(); - break; - case 3: - character/c_zom_zombie_civ_shorts4::main(); - break; - case 4: - character/c_zom_zombie_civ_shorts5::main(); - break; - case 5: - character/c_zom_zombie_civ_shorts6::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_highrise_basic" ); - character/c_zom_zombie_civ_shorts::precache(); - character/c_zom_zombie_civ_shorts2::precache(); - character/c_zom_zombie_civ_shorts3::precache(); - character/c_zom_zombie_civ_shorts4::precache(); - character/c_zom_zombie_civ_shorts5::precache(); - character/c_zom_zombie_civ_shorts6::precache(); -} diff --git a/Zombie Maps/Die Rise/zm_highrise/aitype/zm_highrise_basic_02.gsc b/Zombie Maps/Die Rise/zm_highrise/aitype/zm_highrise_basic_02.gsc deleted file mode 100644 index 602f9f0..0000000 --- a/Zombie Maps/Die Rise/zm_highrise/aitype/zm_highrise_basic_02.gsc +++ /dev/null @@ -1,402 +0,0 @@ - -#using_animtree( "zm_highrise_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_slipslide_collapse; - dummy_anim_ref = %ai_zombie_walk_slipslide; - dummy_anim_ref = %ai_zombie_walk_slipslide_a; - dummy_anim_ref = %ai_zombie_run_slipslide; - dummy_anim_ref = %ai_zombie_run_slipslide_a; - dummy_anim_ref = %ai_zombie_sprint_slipslide; - dummy_anim_ref = %ai_zombie_sprint_slipslide_a; - dummy_anim_ref = %ai_zombie_stand_slipslide_recover; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_jump_down_40; - dummy_anim_ref = %ai_zombie_crawl_jump_down_40; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_120; - dummy_anim_ref = %ai_zombie_crawl_jump_down_120; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_down_184; - dummy_anim_ref = %ai_zombie_crawl_jump_down_184; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_175; - dummy_anim_ref = %ai_zombie_crawl_jump_up_175; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_dierise_escape_corridor; - dummy_anim_ref = %ai_zombie_traverse_round_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_round_counter_from_stools; - dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_alt_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_alt_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_gap; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_gap; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_antenna; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_antenna; - dummy_anim_ref = %ai_zombie_jump_up_sewing; - dummy_anim_ref = %ai_zombie_crawl_jump_up_sewing; - dummy_anim_ref = %ai_zombie_traverse_dierise_1_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_2_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_2_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_3_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_3_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_4_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_4_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_5_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_5_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_6_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_6_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_7_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_7_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap1_from_antenna; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap4a_slide_down_beam; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap4b_from_roof; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap6_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap6_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap7_from_top_ledge; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap7_to_top_ledge; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap8_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap15a_from_girder; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap15b_from_girder; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap15f_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap15g_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap16a_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap16a_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap16b_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap16b_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap17a_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap17c_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap17c_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap18_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_jump_down_to_elevator_roof; - dummy_anim_ref = %ai_zombie_crawl_jump_up_from_elevator_roof; - dummy_anim_ref = %ai_zombie_jump_down_to_elevator_roof; - dummy_anim_ref = %ai_zombie_jump_up_from_elevator_roof; - dummy_anim_ref = %ai_zombie_climb_elevator; - dummy_anim_ref = %ai_zombie_crawl_traverse_round_counter_to_stools; - dummy_anim_ref = %ai_zombie_crawl_traverse_round_counter_from_stools; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_alt_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_alt_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_1_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_2_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_2_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_3_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_3_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_4_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_4_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_5_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_5_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_6_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_6_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_7_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_7_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap1_from_antenna; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap4a_slide_down_beam; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap4b_from_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap6_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap6_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap7_from_top_ledge; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap7_to_top_ledge; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap8_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15a_from_girder; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15b_from_girder; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15f_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15f_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15g_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15g_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16a_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16a_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16b_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16b_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap17a_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap17a_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap17c_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap18_high_to_low; - dummy_anim_ref = %ai_zombie_riser_elevator_from_floor; - dummy_anim_ref = %ai_zombie_riser_elevator_from_ceiling; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_highrise_basic.asd"; - self.animtree = "zm_highrise_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_zombie_scientist::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_highrise_basic" ); - character/c_zom_zombie_scientist::precache(); -} diff --git a/Zombie Maps/Die Rise/zm_highrise/aitype/zm_highrise_basic_03.gsc b/Zombie Maps/Die Rise/zm_highrise/aitype/zm_highrise_basic_03.gsc deleted file mode 100644 index e0c0004..0000000 --- a/Zombie Maps/Die Rise/zm_highrise/aitype/zm_highrise_basic_03.gsc +++ /dev/null @@ -1,402 +0,0 @@ - -#using_animtree( "zm_highrise_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_slipslide_collapse; - dummy_anim_ref = %ai_zombie_walk_slipslide; - dummy_anim_ref = %ai_zombie_walk_slipslide_a; - dummy_anim_ref = %ai_zombie_run_slipslide; - dummy_anim_ref = %ai_zombie_run_slipslide_a; - dummy_anim_ref = %ai_zombie_sprint_slipslide; - dummy_anim_ref = %ai_zombie_sprint_slipslide_a; - dummy_anim_ref = %ai_zombie_stand_slipslide_recover; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_jump_down_40; - dummy_anim_ref = %ai_zombie_crawl_jump_down_40; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_120; - dummy_anim_ref = %ai_zombie_crawl_jump_down_120; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_down_184; - dummy_anim_ref = %ai_zombie_crawl_jump_down_184; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_175; - dummy_anim_ref = %ai_zombie_crawl_jump_up_175; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_48; - dummy_anim_ref = %ai_zombie_traverse_dierise_escape_corridor; - dummy_anim_ref = %ai_zombie_traverse_round_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_round_counter_from_stools; - dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_alt_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_interior_alt_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_chrest_gap; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_gap; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_antenna; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_antenna; - dummy_anim_ref = %ai_zombie_jump_up_sewing; - dummy_anim_ref = %ai_zombie_crawl_jump_up_sewing; - dummy_anim_ref = %ai_zombie_traverse_dierise_1_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_2_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_2_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_3_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_3_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_4_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_4_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_5_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_5_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_6_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_6_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_7_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_7_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap1_from_antenna; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap4a_slide_down_beam; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap4b_from_roof; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap6_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap6_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap7_from_top_ledge; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap7_to_top_ledge; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap8_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap15a_from_girder; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap15b_from_girder; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap15f_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap15g_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap16a_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap16a_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap16b_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap16b_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap17a_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap17c_high_to_low; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap17c_low_to_high; - dummy_anim_ref = %ai_zombie_traverse_dierise_gap18_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_jump_down_to_elevator_roof; - dummy_anim_ref = %ai_zombie_crawl_jump_up_from_elevator_roof; - dummy_anim_ref = %ai_zombie_jump_down_to_elevator_roof; - dummy_anim_ref = %ai_zombie_jump_up_from_elevator_roof; - dummy_anim_ref = %ai_zombie_climb_elevator; - dummy_anim_ref = %ai_zombie_crawl_traverse_round_counter_to_stools; - dummy_anim_ref = %ai_zombie_crawl_traverse_round_counter_from_stools; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_alt_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_chrest_interior_alt_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_1_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_2_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_2_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_3_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_3_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_4_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_4_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_5_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_5_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_6_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_6_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_7_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_7_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap1_from_antenna; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap4a_slide_down_beam; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap4b_from_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap6_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap6_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap7_from_top_ledge; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap7_to_top_ledge; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap8_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15a_from_girder; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15b_from_girder; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15f_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15f_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15g_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap15g_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16a_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16a_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16b_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap16b_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap17a_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap17a_low_to_high; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap17c_high_to_low; - dummy_anim_ref = %ai_zombie_crawl_traverse_dierise_gap18_high_to_low; - dummy_anim_ref = %ai_zombie_riser_elevator_from_floor; - dummy_anim_ref = %ai_zombie_riser_elevator_from_ceiling; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_highrise_basic.asd"; - self.animtree = "zm_highrise_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 210; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_zombie_soldier::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_highrise_basic" ); - character/c_zom_zombie_soldier::precache(); -} diff --git a/Zombie Maps/Die Rise/zm_highrise/aitype/zm_highrise_leaper.gsc b/Zombie Maps/Die Rise/zm_highrise/aitype/zm_highrise_leaper.gsc deleted file mode 100644 index 3a7eacd..0000000 --- a/Zombie Maps/Die Rise/zm_highrise/aitype/zm_highrise_leaper.gsc +++ /dev/null @@ -1,199 +0,0 @@ - -#using_animtree( "zm_highrise_leaper" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_quad_idle; - dummy_anim_ref = %ai_zombie_quad_idle_2; - dummy_anim_ref = %ai_zombie_leaper_death_v1; - dummy_anim_ref = %ai_zombie_leaper_death_v2; - dummy_anim_ref = %ai_zombie_leaper_run_f; - dummy_anim_ref = %ai_zombie_leaper_run_bounce; - dummy_anim_ref = %ai_zombie_quad_crawl; - dummy_anim_ref = %ai_zombie_quad_crawl_2; - dummy_anim_ref = %ai_zombie_quad_crawl_3; - dummy_anim_ref = %ai_zombie_quad_crawl_run; - dummy_anim_ref = %ai_zombie_quad_crawl_run_2; - dummy_anim_ref = %ai_zombie_quad_crawl_run_3; - dummy_anim_ref = %ai_zombie_quad_crawl_run_4; - dummy_anim_ref = %ai_zombie_quad_crawl_run_5; - dummy_anim_ref = %ai_zombie_quad_crawl_sprint; - dummy_anim_ref = %ai_zombie_quad_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_quad_crawl_sprint_3; - dummy_anim_ref = %ai_zombie_quad_crawl_01; - dummy_anim_ref = %ai_zombie_quad_crawl_02; - dummy_anim_ref = %ai_zombie_quad_crawl_03; - dummy_anim_ref = %ai_zombie_leaper_attack_v1; - dummy_anim_ref = %ai_zombie_leaper_attack_v2; - dummy_anim_ref = %ai_zombie_leaper_wall_traverse_l; - dummy_anim_ref = %ai_zombie_leaper_wall_traverse_r; - dummy_anim_ref = %ai_zombie_leaper_ceiling_traverse; - dummy_anim_ref = %ai_leaper_traverse_dierise_barrier; - dummy_anim_ref = %ai_zombie_jump_down_40; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_jump_down_184; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_leaper_jump_down_120; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_leaper_jump_up_175; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_traverse_48; - dummy_anim_ref = %ai_leaper_jump_up_sewing; - dummy_anim_ref = %ai_leaper_dierise_ventfall_176; - dummy_anim_ref = %ai_leaper_crawl_traverse_round_counter_from_stools; - dummy_anim_ref = %ai_leaper_crawl_traverse_round_counter_to_stools; - dummy_anim_ref = %ai_leaper_traverse_dierise_chrest_interior_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_chrest_interior_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_1_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_1_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_2_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_2_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_3_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_3_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_4_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_4_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_chrest_elevator_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_5_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_6_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_6_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_7_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_7_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap1_to_antenna; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap1_from_antenna; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap2_from_roof; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap2_to_roof; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap4b_to_roof; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap4b_from_roof; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap5a_from_conference; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap5a_to_conference; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap5b_from_conference; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap5b_to_conference; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap6_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap6_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap7_from_top_ledge; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap7_to_top_ledge; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap8_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap8_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap9_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap9_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap10_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap10_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap14a_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap14b_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap14c_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap14c_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap14d_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap14d_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap14e_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap14e_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap14f_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap14f_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap14g_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap14g_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap14h_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap14h_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap15a_from_girder; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap15b_from_girder; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap15f_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap15f_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap15g_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap15g_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap16a_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap16a_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap16b_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap16b_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap17a_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap17a_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap17c_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap17c_low_to_high; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap18_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap19_from_railing; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap19_to_railing; - dummy_anim_ref = %ai_zombie_leaper_wall_traverse_l_large; - dummy_anim_ref = %ai_zombie_leaper_wall_traverse_r_large; - dummy_anim_ref = %ai_leaper_traverse_dierise_gap15c_low_to_high; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_190_dlc1; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_antenna; - dummy_anim_ref = %ai_leaper_traverse_dierise_chrest_gap; - dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_green_ext_a; - dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_green_ext_b; - dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_green_ext_c; - dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_green_ext_d; - dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_green_ext_e; - dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_green_ext_f; - dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_bluegreen_antenna_to_escalator; - dummy_anim_ref = %ai_leaper_traverse_shoestore; - dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_orange_ext_a_right; - dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_orange_ext_a_left; - dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_orange_ext_b_left; - dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_orange_ext_b_right; - dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_orange_ext_c; - dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_blue_ext_a; - dummy_anim_ref = %ai_leaper_traverse_dierise_shaft1_to_bottom; - dummy_anim_ref = %ai_leaper_traverse_dierise_shaft1_from_bottom; - dummy_anim_ref = %ai_leaper_traverse_dierise_shaft2_to_bottom; - dummy_anim_ref = %ai_leaper_traverse_dierise_shaft2_from_bottom; - dummy_anim_ref = %ai_leaper_traverse_dierise_restaurant_in; - dummy_anim_ref = %ai_leaper_traverse_dierise_ac_unit; - dummy_anim_ref = %ai_leaper_traverse_dierise_chrest_interior_alt_high_to_low; - dummy_anim_ref = %ai_leaper_traverse_dierise_chrest_interior_alt_low_to_high; - dummy_anim_ref = %ai_zombie_leaper_traverse_dierise_green_ext_g; - dummy_anim_ref = %ai_leaper_jump_down_to_elevator_roof; - dummy_anim_ref = %ai_leaper_jump_up_from_elevator_roof; - dummy_anim_ref = %ai_zombie_leaper_climb_elevator; - dummy_anim_ref = %ai_zombie_crawl_slipslide_slow; - dummy_anim_ref = %ai_zombie_crawl_slipslide_fast; - dummy_anim_ref = %ai_zombie_crawl_slipslide_recover; - dummy_anim_ref = %ai_zombie_leaper_elevator_from_ceiling; - dummy_anim_ref = %ai_zombie_leaper_elevator_from_floor; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_highrise_leaper.asd"; - self.animtree = "zm_highrise_leaper.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 18; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = "zm_leaper_footstepfxtable"; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 150; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_leaper::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_highrise_leaper" ); - character/c_zom_leaper::precache(); -} diff --git a/Zombie Maps/Die Rise/zm_highrise/character/c_highrise_player_engineer.gsc b/Zombie Maps/Die Rise/zm_highrise/character/c_highrise_player_engineer.gsc deleted file mode 100644 index 8333776..0000000 --- a/Zombie Maps/Die Rise/zm_highrise/character/c_highrise_player_engineer.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_engineer_dlc1_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_engineer_dlc1_fb" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise/character/c_highrise_player_farmgirl.gsc b/Zombie Maps/Die Rise/zm_highrise/character/c_highrise_player_farmgirl.gsc deleted file mode 100644 index d24675b..0000000 --- a/Zombie Maps/Die Rise/zm_highrise/character/c_highrise_player_farmgirl.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_farmgirl_dlc1_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_farmgirl_dlc1_fb" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise/character/c_highrise_player_oldman.gsc b/Zombie Maps/Die Rise/zm_highrise/character/c_highrise_player_oldman.gsc deleted file mode 100644 index 7ee309a..0000000 --- a/Zombie Maps/Die Rise/zm_highrise/character/c_highrise_player_oldman.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_oldman_dlc1_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_oldman_dlc1_fb" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise/character/c_highrise_player_reporter.gsc b/Zombie Maps/Die Rise/zm_highrise/character/c_highrise_player_reporter.gsc deleted file mode 100644 index 32ec8bc..0000000 --- a/Zombie Maps/Die Rise/zm_highrise/character/c_highrise_player_reporter.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_reporter_dlc1_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_reporter_dlc1_fb" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise/character/c_zom_ally_farmgirl.gsc b/Zombie Maps/Die Rise/zm_highrise/character/c_zom_ally_farmgirl.gsc deleted file mode 100644 index d24675b..0000000 --- a/Zombie Maps/Die Rise/zm_highrise/character/c_zom_ally_farmgirl.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_farmgirl_dlc1_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_farmgirl_dlc1_fb" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise/character/c_zom_leaper.gsc b/Zombie Maps/Die Rise/zm_highrise/character/c_zom_leaper.gsc deleted file mode 100644 index 9c6b648..0000000 --- a/Zombie Maps/Die Rise/zm_highrise/character/c_zom_leaper.gsc +++ /dev/null @@ -1,21 +0,0 @@ - -main() -{ - self setmodel( "c_zom_leaper_body" ); - self.headmodel = "c_zom_leaper_head"; - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_leaper_body_g_upclean"; - self.torsodmg5 = "c_zom_leaper_body_g_behead"; - self.legdmg1 = "c_zom_leaper_body_g_lowclean"; -} - -precache() -{ - precachemodel( "c_zom_leaper_body" ); - precachemodel( "c_zom_leaper_head" ); - precachemodel( "c_zom_leaper_body_g_upclean" ); - precachemodel( "c_zom_leaper_body_g_behead" ); - precachemodel( "c_zom_leaper_body_g_lowclean" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_civ_shorts.gsc b/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_civ_shorts.gsc deleted file mode 100644 index 93c19e7..0000000 --- a/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_civ_shorts.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_civ_shorts_body" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_chinese_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_civ_shorts_body_g_upclean"; - self.torsodmg2 = "c_zom_zombie_civ_shorts_body_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie_civ_shorts_body_g_larmoff"; - self.torsodmg5 = "c_zom_zombie_scientist_body_g_behead"; - self.legdmg1 = "c_zom_zombie_civ_shorts_body_g_lowclean"; - self.legdmg2 = "c_zom_zombie_civ_shorts_body_g_rlegoff"; - self.legdmg3 = "c_zom_zombie_civ_shorts_body_g_llegoff"; - self.legdmg4 = "c_zom_zombie_civ_shorts_body_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_civ_shorts_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_civ_shorts_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_civ_shorts_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_civ_shorts_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_civ_shorts_body" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_chinese_zombie_head_als::main() ); - precachemodel( "c_zom_zombie_civ_shorts_body_g_upclean" ); - precachemodel( "c_zom_zombie_civ_shorts_body_g_rarmoff" ); - precachemodel( "c_zom_zombie_civ_shorts_body_g_larmoff" ); - precachemodel( "c_zom_zombie_scientist_body_g_behead" ); - precachemodel( "c_zom_zombie_civ_shorts_body_g_lowclean" ); - precachemodel( "c_zom_zombie_civ_shorts_body_g_rlegoff" ); - precachemodel( "c_zom_zombie_civ_shorts_body_g_llegoff" ); - precachemodel( "c_zom_zombie_civ_shorts_body_g_legsoff" ); - precachemodel( "c_zom_zombie_civ_shorts_g_rarmspawn" ); - precachemodel( "c_zom_zombie_civ_shorts_g_larmspawn" ); - precachemodel( "c_zom_zombie_civ_shorts_g_rlegspawn" ); - precachemodel( "c_zom_zombie_civ_shorts_g_llegspawn" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_civ_shorts2.gsc b/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_civ_shorts2.gsc deleted file mode 100644 index 10015ce..0000000 --- a/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_civ_shorts2.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_civ_shorts_body2" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_chinese_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_civ_shorts_body2_g_upclean"; - self.torsodmg2 = "c_zom_zombie_civ_shorts_body2_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie_civ_shorts_body2_g_larmoff"; - self.torsodmg5 = "c_zom_zombie_scientist_body_g_behead"; - self.legdmg1 = "c_zom_zombie_civ_shorts_body2_g_lowclean"; - self.legdmg2 = "c_zom_zombie_civ_shorts_body2_g_rlegoff"; - self.legdmg3 = "c_zom_zombie_civ_shorts_body2_g_llegoff"; - self.legdmg4 = "c_zom_zombie_civ_shorts_body2_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_civ_shorts_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_civ_shorts_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_civ_shorts_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_civ_shorts_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_civ_shorts_body2" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_chinese_zombie_head_als::main() ); - precachemodel( "c_zom_zombie_civ_shorts_body2_g_upclean" ); - precachemodel( "c_zom_zombie_civ_shorts_body2_g_rarmoff" ); - precachemodel( "c_zom_zombie_civ_shorts_body2_g_larmoff" ); - precachemodel( "c_zom_zombie_scientist_body_g_behead" ); - precachemodel( "c_zom_zombie_civ_shorts_body2_g_lowclean" ); - precachemodel( "c_zom_zombie_civ_shorts_body2_g_rlegoff" ); - precachemodel( "c_zom_zombie_civ_shorts_body2_g_llegoff" ); - precachemodel( "c_zom_zombie_civ_shorts_body2_g_legsoff" ); - precachemodel( "c_zom_zombie_civ_shorts_g_rarmspawn" ); - precachemodel( "c_zom_zombie_civ_shorts_g_larmspawn" ); - precachemodel( "c_zom_zombie_civ_shorts_g_rlegspawn" ); - precachemodel( "c_zom_zombie_civ_shorts_g_llegspawn" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_civ_shorts3.gsc b/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_civ_shorts3.gsc deleted file mode 100644 index 577e706..0000000 --- a/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_civ_shorts3.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_civ_shorts_body3" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_chinese_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_civ_shorts_body3_g_upclean"; - self.torsodmg2 = "c_zom_zombie_civ_shorts_body3_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie_civ_shorts_body3_g_larmoff"; - self.torsodmg5 = "c_zom_zombie_scientist_body_g_behead"; - self.legdmg1 = "c_zom_zombie_civ_shorts_body3_g_lowclean"; - self.legdmg2 = "c_zom_zombie_civ_shorts_body3_g_rlegoff"; - self.legdmg3 = "c_zom_zombie_civ_shorts_body3_g_llegoff"; - self.legdmg4 = "c_zom_zombie_civ_shorts_body3_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_civ_shorts_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_civ_shorts_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_civ_shorts_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_civ_shorts_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_civ_shorts_body3" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_chinese_zombie_head_als::main() ); - precachemodel( "c_zom_zombie_civ_shorts_body3_g_upclean" ); - precachemodel( "c_zom_zombie_civ_shorts_body3_g_rarmoff" ); - precachemodel( "c_zom_zombie_civ_shorts_body3_g_larmoff" ); - precachemodel( "c_zom_zombie_scientist_body_g_behead" ); - precachemodel( "c_zom_zombie_civ_shorts_body3_g_lowclean" ); - precachemodel( "c_zom_zombie_civ_shorts_body3_g_rlegoff" ); - precachemodel( "c_zom_zombie_civ_shorts_body3_g_llegoff" ); - precachemodel( "c_zom_zombie_civ_shorts_body3_g_legsoff" ); - precachemodel( "c_zom_zombie_civ_shorts_g_rarmspawn" ); - precachemodel( "c_zom_zombie_civ_shorts_g_larmspawn" ); - precachemodel( "c_zom_zombie_civ_shorts_g_rlegspawn" ); - precachemodel( "c_zom_zombie_civ_shorts_g_llegspawn" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_civ_shorts4.gsc b/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_civ_shorts4.gsc deleted file mode 100644 index b35b2f5..0000000 --- a/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_civ_shorts4.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_civ_shorts_body4" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_chinese_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_civ_shorts_body4_g_upclean"; - self.torsodmg2 = "c_zom_zombie_civ_shorts_body4_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie_civ_shorts_body4_g_larmoff"; - self.torsodmg5 = "c_zom_zombie_scientist_body_g_behead"; - self.legdmg1 = "c_zom_zombie_civ_shorts_body4_g_lowclean"; - self.legdmg2 = "c_zom_zombie_civ_shorts_body4_g_rlegoff"; - self.legdmg3 = "c_zom_zombie_civ_shorts_body4_g_llegoff"; - self.legdmg4 = "c_zom_zombie_civ_shorts_body4_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_civ_shorts_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_civ_shorts_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_civ_shorts_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_civ_shorts_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_civ_shorts_body4" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_chinese_zombie_head_als::main() ); - precachemodel( "c_zom_zombie_civ_shorts_body4_g_upclean" ); - precachemodel( "c_zom_zombie_civ_shorts_body4_g_rarmoff" ); - precachemodel( "c_zom_zombie_civ_shorts_body4_g_larmoff" ); - precachemodel( "c_zom_zombie_scientist_body_g_behead" ); - precachemodel( "c_zom_zombie_civ_shorts_body4_g_lowclean" ); - precachemodel( "c_zom_zombie_civ_shorts_body4_g_rlegoff" ); - precachemodel( "c_zom_zombie_civ_shorts_body4_g_llegoff" ); - precachemodel( "c_zom_zombie_civ_shorts_body4_g_legsoff" ); - precachemodel( "c_zom_zombie_civ_shorts_g_rarmspawn" ); - precachemodel( "c_zom_zombie_civ_shorts_g_larmspawn" ); - precachemodel( "c_zom_zombie_civ_shorts_g_rlegspawn" ); - precachemodel( "c_zom_zombie_civ_shorts_g_llegspawn" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_civ_shorts5.gsc b/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_civ_shorts5.gsc deleted file mode 100644 index 8478d27..0000000 --- a/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_civ_shorts5.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_civ_shorts_body5" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_chinese_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_civ_shorts_body5_g_upclean"; - self.torsodmg2 = "c_zom_zombie_civ_shorts_body5_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie_civ_shorts_body5_g_larmoff"; - self.torsodmg5 = "c_zom_zombie_scientist_body_g_behead"; - self.legdmg1 = "c_zom_zombie_civ_shorts_body5_g_lowclean"; - self.legdmg2 = "c_zom_zombie_civ_shorts_body5_g_rlegoff"; - self.legdmg3 = "c_zom_zombie_civ_shorts_body5_g_llegoff"; - self.legdmg4 = "c_zom_zombie_civ_shorts_body5_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_civ_shorts_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_civ_shorts_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_civ_shorts_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_civ_shorts_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_civ_shorts_body5" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_chinese_zombie_head_als::main() ); - precachemodel( "c_zom_zombie_civ_shorts_body5_g_upclean" ); - precachemodel( "c_zom_zombie_civ_shorts_body5_g_rarmoff" ); - precachemodel( "c_zom_zombie_civ_shorts_body5_g_larmoff" ); - precachemodel( "c_zom_zombie_scientist_body_g_behead" ); - precachemodel( "c_zom_zombie_civ_shorts_body5_g_lowclean" ); - precachemodel( "c_zom_zombie_civ_shorts_body5_g_rlegoff" ); - precachemodel( "c_zom_zombie_civ_shorts_body5_g_llegoff" ); - precachemodel( "c_zom_zombie_civ_shorts_body5_g_legsoff" ); - precachemodel( "c_zom_zombie_civ_shorts_g_rarmspawn" ); - precachemodel( "c_zom_zombie_civ_shorts_g_larmspawn" ); - precachemodel( "c_zom_zombie_civ_shorts_g_rlegspawn" ); - precachemodel( "c_zom_zombie_civ_shorts_g_llegspawn" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_civ_shorts6.gsc b/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_civ_shorts6.gsc deleted file mode 100644 index ce494ef..0000000 --- a/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_civ_shorts6.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_civ_shorts_body6" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_chinese_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_civ_shorts_body6_g_upclean"; - self.torsodmg2 = "c_zom_zombie_civ_shorts_body6_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie_civ_shorts_body6_g_larmoff"; - self.torsodmg5 = "c_zom_zombie_scientist_body_g_behead"; - self.legdmg1 = "c_zom_zombie_civ_shorts_body6_g_lowclean"; - self.legdmg2 = "c_zom_zombie_civ_shorts_body6_g_rlegoff"; - self.legdmg3 = "c_zom_zombie_civ_shorts_body6_g_llegoff"; - self.legdmg4 = "c_zom_zombie_civ_shorts_body6_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_civ_shorts_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_civ_shorts_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_civ_shorts_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_civ_shorts_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_civ_shorts_body6" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_chinese_zombie_head_als::main() ); - precachemodel( "c_zom_zombie_civ_shorts_body6_g_upclean" ); - precachemodel( "c_zom_zombie_civ_shorts_body6_g_rarmoff" ); - precachemodel( "c_zom_zombie_civ_shorts_body6_g_larmoff" ); - precachemodel( "c_zom_zombie_scientist_body_g_behead" ); - precachemodel( "c_zom_zombie_civ_shorts_body6_g_lowclean" ); - precachemodel( "c_zom_zombie_civ_shorts_body6_g_rlegoff" ); - precachemodel( "c_zom_zombie_civ_shorts_body6_g_llegoff" ); - precachemodel( "c_zom_zombie_civ_shorts_body6_g_legsoff" ); - precachemodel( "c_zom_zombie_civ_shorts_g_rarmspawn" ); - precachemodel( "c_zom_zombie_civ_shorts_g_larmspawn" ); - precachemodel( "c_zom_zombie_civ_shorts_g_rlegspawn" ); - precachemodel( "c_zom_zombie_civ_shorts_g_llegspawn" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_scientist.gsc b/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_scientist.gsc deleted file mode 100644 index 4d19e0b..0000000 --- a/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_scientist.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_scientist_body" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_chinese_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_scientist_body_g_upclean"; - self.torsodmg2 = "c_zom_zombie_scientist_body_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie_scientist_body_g_larmoff"; - self.torsodmg5 = "c_zom_zombie_scientist_body_g_behead"; - self.legdmg1 = "c_zom_zombie_scientist_body_g_lowclean"; - self.legdmg2 = "c_zom_zombie_scientist_body_g_rlegoff"; - self.legdmg3 = "c_zom_zombie_scientist_body_g_llegoff"; - self.legdmg4 = "c_zom_zombie_scientist_body_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_scientist_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_scientist_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_scientist_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_scientist_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_scientist_body" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_chinese_zombie_head_als::main() ); - precachemodel( "c_zom_zombie_scientist_body_g_upclean" ); - precachemodel( "c_zom_zombie_scientist_body_g_rarmoff" ); - precachemodel( "c_zom_zombie_scientist_body_g_larmoff" ); - precachemodel( "c_zom_zombie_scientist_body_g_behead" ); - precachemodel( "c_zom_zombie_scientist_body_g_lowclean" ); - precachemodel( "c_zom_zombie_scientist_body_g_rlegoff" ); - precachemodel( "c_zom_zombie_scientist_body_g_llegoff" ); - precachemodel( "c_zom_zombie_scientist_body_g_legsoff" ); - precachemodel( "c_zom_zombie_scientist_g_rarmspawn" ); - precachemodel( "c_zom_zombie_scientist_g_larmspawn" ); - precachemodel( "c_zom_zombie_scientist_g_rlegspawn" ); - precachemodel( "c_zom_zombie_scientist_g_llegspawn" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_soldier.gsc b/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_soldier.gsc deleted file mode 100644 index 8468101..0000000 --- a/Zombie Maps/Die Rise/zm_highrise/character/c_zom_zombie_soldier.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie_soldier_body" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_chinese_zombie_head_helmet_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie_soldier_body_g_upclean"; - self.torsodmg2 = "c_zom_zombie_soldier_body_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie_soldier_body_g_larmoff"; - self.torsodmg5 = "c_zom_zombie_scientist_body_g_behead"; - self.legdmg1 = "c_zom_zombie_soldier_body_g_lowclean"; - self.legdmg2 = "c_zom_zombie_soldier_body_g_rlegoff"; - self.legdmg3 = "c_zom_zombie_soldier_body_g_llegoff"; - self.legdmg4 = "c_zom_zombie_soldier_body_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_soldier_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_soldier_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_soldier_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_soldier_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie_soldier_body" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_chinese_zombie_head_helmet_als::main() ); - precachemodel( "c_zom_zombie_soldier_body_g_upclean" ); - precachemodel( "c_zom_zombie_soldier_body_g_rarmoff" ); - precachemodel( "c_zom_zombie_soldier_body_g_larmoff" ); - precachemodel( "c_zom_zombie_scientist_body_g_behead" ); - precachemodel( "c_zom_zombie_soldier_body_g_lowclean" ); - precachemodel( "c_zom_zombie_soldier_body_g_rlegoff" ); - precachemodel( "c_zom_zombie_soldier_body_g_llegoff" ); - precachemodel( "c_zom_zombie_soldier_body_g_legsoff" ); - precachemodel( "c_zom_zombie_soldier_g_rarmspawn" ); - precachemodel( "c_zom_zombie_soldier_g_larmspawn" ); - precachemodel( "c_zom_zombie_soldier_g_rlegspawn" ); - precachemodel( "c_zom_zombie_soldier_g_llegspawn" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise/xmodelalias/c_zom_chinese_zombie_head_als.gsc b/Zombie Maps/Die Rise/zm_highrise/xmodelalias/c_zom_chinese_zombie_head_als.gsc deleted file mode 100644 index eb7f19d..0000000 --- a/Zombie Maps/Die Rise/zm_highrise/xmodelalias/c_zom_chinese_zombie_head_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_chinese_head1"; - a[ 1 ] = "c_zom_zombie_chinese_head2"; - a[ 2 ] = "c_zom_zombie_chinese_head3"; - a[ 3 ] = "c_zom_zombie_chinese_head4"; - return a; -} diff --git a/Zombie Maps/Die Rise/zm_highrise/xmodelalias/c_zom_chinese_zombie_head_helmet_als.gsc b/Zombie Maps/Die Rise/zm_highrise/xmodelalias/c_zom_chinese_zombie_head_helmet_als.gsc deleted file mode 100644 index 91297cf..0000000 --- a/Zombie Maps/Die Rise/zm_highrise/xmodelalias/c_zom_chinese_zombie_head_helmet_als.gsc +++ /dev/null @@ -1,14 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_chinese_head1"; - a[ 1 ] = "c_zom_zombie_chinese_head2"; - a[ 2 ] = "c_zom_zombie_chinese_head3"; - a[ 3 ] = "c_zom_zombie_chinese_head4"; - a[ 4 ] = "c_zom_zombie_chinese_head1"; - a[ 5 ] = "c_zom_zombie_chinese_head2"; - a[ 6 ] = "c_zom_zombie_chinese_head3"; - a[ 7 ] = "c_zom_zombie_chinese_head4"; - a[ 8 ] = "c_zom_zombie_chinese_head3_helmet"; - return a; -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_chrest_gap.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_chrest_gap.gsc deleted file mode 100644 index 9ad4432..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_chrest_gap.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_chrest_gap", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_down.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_down.gsc deleted file mode 100644 index b193065..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_down.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_chrest_interior_high_to_low", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_down_2.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_down_2.gsc deleted file mode 100644 index 705104a..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_down_2.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_chrest_interior_alt_down", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_up.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_up.gsc deleted file mode 100644 index 214fb21..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_up.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_chrest_interior_low_to_high", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_up_2.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_up_2.gsc deleted file mode 100644 index df0f03f..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_chrest_jump_up_2.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_chrest_interior_alt_up", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_counter_from_stools.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_counter_from_stools.gsc deleted file mode 100644 index 42ac648..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_counter_from_stools.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_round_counter_from_stools", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_counter_to_stools.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_counter_to_stools.gsc deleted file mode 100644 index 760868b..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_counter_to_stools.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_round_counter_to_stools", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_escape_hallway.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_escape_hallway.gsc deleted file mode 100644 index cb564df..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_escape_hallway.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_escape_elevator_hallway", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap10_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap10_high_to_low.gsc deleted file mode 100644 index 534ac32..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap10_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap10_high_to_low" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap10_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap10_low_to_high.gsc deleted file mode 100644 index 541cfd5..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap10_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap10_low_to_high" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14a_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14a_high_to_low.gsc deleted file mode 100644 index 5ec0354..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14a_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap14a_high_to_low" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14b_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14b_high_to_low.gsc deleted file mode 100644 index 28fe59b..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14b_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap14b_high_to_low" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14c_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14c_high_to_low.gsc deleted file mode 100644 index 63114e8..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14c_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap14c_high_to_low" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14c_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14c_low_to_high.gsc deleted file mode 100644 index 203a078..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14c_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap14c_low_to_high" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14d_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14d_high_to_low.gsc deleted file mode 100644 index b5edc03..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14d_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap14d_high_to_low" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14d_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14d_low_to_high.gsc deleted file mode 100644 index f98c8ca..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14d_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap14d_low_to_high" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14e_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14e_high_to_low.gsc deleted file mode 100644 index 3e29231..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14e_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap14e_high_to_low" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14e_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14e_low_to_high.gsc deleted file mode 100644 index 6c49436..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14e_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap14e_low_to_high" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14f_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14f_high_to_low.gsc deleted file mode 100644 index 1414c97..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14f_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap14f_high_to_low" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14f_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14f_low_to_high.gsc deleted file mode 100644 index 2c9a7b9..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14f_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap14f_low_to_high" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14g_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14g_high_to_low.gsc deleted file mode 100644 index c29da5c..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14g_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap14g_high_to_low" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14g_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14g_low_to_high.gsc deleted file mode 100644 index 46ddd1e..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14g_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap14g_low_to_high" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14h_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14h_high_to_low.gsc deleted file mode 100644 index c0c8e18..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14h_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap14h_high_to_low" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14h_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14h_low_to_high.gsc deleted file mode 100644 index 34ed846..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap14h_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap14h_low_to_high" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap15a_from_girder.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap15a_from_girder.gsc deleted file mode 100644 index 4e97ef4..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap15a_from_girder.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap15a_from_girder" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap15b_from_girder.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap15b_from_girder.gsc deleted file mode 100644 index 4d00a54..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap15b_from_girder.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap15b_from_girder" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap15f_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap15f_high_to_low.gsc deleted file mode 100644 index 0ee9e1b..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap15f_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap15f_high_to_low" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap15f_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap15f_low_to_high.gsc deleted file mode 100644 index 4303081..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap15f_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap15f_low_to_high" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap15g_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap15g_high_to_low.gsc deleted file mode 100644 index e038cb8..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap15g_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap15g_high_to_low" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap15g_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap15g_low_to_high.gsc deleted file mode 100644 index ffd3557..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap15g_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap15g_low_to_high" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap16a_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap16a_high_to_low.gsc deleted file mode 100644 index e866f3d..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap16a_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap16a_high_to_low", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap16a_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap16a_low_to_high.gsc deleted file mode 100644 index f0bdcdb..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap16a_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap16a_low_to_high", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap16b_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap16b_high_to_low.gsc deleted file mode 100644 index ce8e56f..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap16b_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap16b_high_to_low", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap16b_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap16b_low_to_high.gsc deleted file mode 100644 index 5c90268..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap16b_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap16b_low_to_high", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap17a_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap17a_high_to_low.gsc deleted file mode 100644 index 7553d18..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap17a_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap17a_high_to_low", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap17a_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap17a_low_to_high.gsc deleted file mode 100644 index 76fe72f..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap17a_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap17a_low_to_high", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap17c_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap17c_high_to_low.gsc deleted file mode 100644 index c4c2a17..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap17c_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap17c_high_to_low", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap17c_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap17c_low_to_high.gsc deleted file mode 100644 index ac8df7a..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap17c_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap17c_low_to_high", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap18_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap18_high_to_low.gsc deleted file mode 100644 index 63d0316..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap18_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap18_high_to_low", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap19_from_railing.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap19_from_railing.gsc deleted file mode 100644 index 86bc6f3..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap19_from_railing.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap19_from_railing", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap19_to_railing.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap19_to_railing.gsc deleted file mode 100644 index 22a98ee..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap19_to_railing.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap19_to_railing", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap1_from_antenna.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap1_from_antenna.gsc deleted file mode 100644 index b885303..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap1_from_antenna.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap1_from_antenna" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap1_to_antenna.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap1_to_antenna.gsc deleted file mode 100644 index 5267a8b..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap1_to_antenna.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap1_to_antenna" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap4a_slide_down_beam.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap4a_slide_down_beam.gsc deleted file mode 100644 index 2b1d341..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap4a_slide_down_beam.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap4a_slide_down_beam" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap4b_from_roof.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap4b_from_roof.gsc deleted file mode 100644 index 07f3b75..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap4b_from_roof.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap4b_from_roof" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap4b_to_roof.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap4b_to_roof.gsc deleted file mode 100644 index bb631e7..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap4b_to_roof.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap4b_to_roof" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap5a_from_conference.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap5a_from_conference.gsc deleted file mode 100644 index 2a79ceb..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap5a_from_conference.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap5a_from_conference" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap5a_to_conference.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap5a_to_conference.gsc deleted file mode 100644 index 8167394..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap5a_to_conference.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap5a_to_conference" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap5b_from_conference.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap5b_from_conference.gsc deleted file mode 100644 index 82c2d3c..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap5b_from_conference.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap5b_from_conference" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap5b_to_conference.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap5b_to_conference.gsc deleted file mode 100644 index 5309d3c..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap5b_to_conference.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap5b_to_conference" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap6_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap6_high_to_low.gsc deleted file mode 100644 index 7d3e63a..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap6_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap6_high_to_low" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap6_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap6_low_to_high.gsc deleted file mode 100644 index 4e43e2d..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap6_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap6_low_to_high" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap7_from_top_ledge.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap7_from_top_ledge.gsc deleted file mode 100644 index 8bb441c..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap7_from_top_ledge.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap7_from_top_ledge" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap7_to_top_ledge.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap7_to_top_ledge.gsc deleted file mode 100644 index 5182816..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap7_to_top_ledge.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap7_to_top_ledge" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap8_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap8_high_to_low.gsc deleted file mode 100644 index 9c40efd..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap8_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap8_high_to_low" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap8_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap8_low_to_high.gsc deleted file mode 100644 index f645a41..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap8_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap8_low_to_high" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap9_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap9_high_to_low.gsc deleted file mode 100644 index 556e416..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap9_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap9_high_to_low" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap9_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap9_low_to_high.gsc deleted file mode 100644 index b6cefe0..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_gap9_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_gap9_low_to_high" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_jump_ac_unit.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_jump_ac_unit.gsc deleted file mode 100644 index 89ced34..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_jump_ac_unit.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_blue_ac_unit", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_1_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_1_high_to_low.gsc deleted file mode 100644 index 9b0d1bb..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_1_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_traverse_1_high_to_low" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_1_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_1_low_to_high.gsc deleted file mode 100644 index f33e064..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_1_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_traverse_1_low_to_high" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_2_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_2_high_to_low.gsc deleted file mode 100644 index 7413431..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_2_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_traverse_2_high_to_low" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_2_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_2_low_to_high.gsc deleted file mode 100644 index dd4f0be..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_2_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_traverse_2_low_to_high" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_3_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_3_high_to_low.gsc deleted file mode 100644 index b006d0b..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_3_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_traverse_3_high_to_low" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_3_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_3_low_to_high.gsc deleted file mode 100644 index bc54d8d..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_3_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_traverse_3_low_to_high" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_4_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_4_high_to_low.gsc deleted file mode 100644 index e5bcef2..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_4_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_traverse_4_high_to_low" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_4_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_4_low_to_high.gsc deleted file mode 100644 index 0ee22a5..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_4_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_traverse_4_low_to_high" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_5_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_5_high_to_low.gsc deleted file mode 100644 index 2e43c13..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_5_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_traverse_5_high_to_low" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_5_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_5_low_to_high.gsc deleted file mode 100644 index cc4e042..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_5_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_traverse_5_low_to_high" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_6_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_6_high_to_low.gsc deleted file mode 100644 index 60705ae..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_6_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_traverse_6_high_to_low", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_6_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_6_low_to_high.gsc deleted file mode 100644 index 9c1a8cb..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_6_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_traverse_6_low_to_high", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_7_high_to_low.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_7_high_to_low.gsc deleted file mode 100644 index f65e228..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_7_high_to_low.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_traverse_7_high_to_low", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_7_low_to_high.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_7_low_to_high.gsc deleted file mode 100644 index 32d23a5..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_dierise_traverse_7_low_to_high.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "dierise_traverse_7_low_to_high", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_gap2_to_roof.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_gap2_to_roof.gsc deleted file mode 100644 index 1a68744..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_gap2_to_roof.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "gap2_to_roof" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_120.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_120.gsc deleted file mode 100644 index cb99f14..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_120.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_120" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc deleted file mode 100644 index 8bd9a0e..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_127" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_176.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_176.gsc deleted file mode 100644 index ae88b6a..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_176.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_176" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_184.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_184.gsc deleted file mode 100644 index bf3c1f2..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_184.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_184" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_190.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_190.gsc deleted file mode 100644 index 203cc96..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_190.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_190" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_222.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_222.gsc deleted file mode 100644 index ff54012..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_222.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_222" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_286.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_286.gsc deleted file mode 100644 index 1b54907..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_286.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_286" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_40.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_40.gsc deleted file mode 100644 index a07466c..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_40.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_40" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_48.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_48.gsc deleted file mode 100644 index 8269b0e..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_48.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_48" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc deleted file mode 100644 index e32a251..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc +++ /dev/null @@ -1,14 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - if ( isDefined( self.isdog ) && self.isdog ) - { - dog_jump_down( 96, 7 ); - } - else - { - dosimpletraverse( "jump_down_96" ); - } -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_to_elevator_top.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_to_elevator_top.gsc deleted file mode 100644 index 7c57593..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_down_to_elevator_top.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "zm_jump_down_to_elevator_top", undefined, "zm_traverse_elevator" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc deleted file mode 100644 index 06cec96..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_127" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_175.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_175.gsc deleted file mode 100644 index d8e11e5..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_175.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_175" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_222.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_222.gsc deleted file mode 100644 index 793683d..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_222.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_222" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_antenna.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_antenna.gsc deleted file mode 100644 index 1f69289..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_antenna.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_antenna", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_from_elevator_top.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_from_elevator_top.gsc deleted file mode 100644 index d6e1f03..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_from_elevator_top.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "zm_jump_up_from_elevator_top", undefined, "zm_traverse_elevator" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_grabbed_190.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_grabbed_190.gsc deleted file mode 100644 index 37a6a4a..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_grabbed_190.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_grabbed_190" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_grabbed_48.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_grabbed_48.gsc deleted file mode 100644 index ef6328c..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_grabbed_48.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_grabbed_48" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_sewing.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_sewing.gsc deleted file mode 100644 index 8b4de43..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_jump_up_sewing.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_sewing", undefined, "zm_traverse_dierise" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc deleted file mode 100644 index e97cc4a..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - self dosimpletraverse( "mantle_over_40_hurdle" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_traverse_48.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_traverse_48.gsc deleted file mode 100644 index 068e4df..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/animscripts/traverse/zm_traverse_48.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "traverse_48" ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/createfx/zm_highrise_fx.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/createfx/zm_highrise_fx.gsc deleted file mode 100644 index f424ce0..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/createfx/zm_highrise_fx.gsc +++ /dev/null @@ -1,2497 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 5935,09, -2250,2, 2175,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 106,466, -4415,77, 2175,93 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 7818,6, -5931,26, 2175,42 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2672,52, -8650,92, 2176,46 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3255,3, -8784,61, 2176,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 5738,8, 9199,63, 2176,25 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_bend_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 402,774, -1310,8, 2222,36 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 324 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_bend_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3897,99, 3187,69, 2727,5 ); - ent.v[ "angles" ] = ( 349,08, 288,472, -8,5135 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_sm_right" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2343,23, 1810,53, 2897,93 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 176 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_sm_right" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2966,82, 3192,47, 2470,13 ); - ent.v[ "angles" ] = ( 1,61145, 263,827, 43,5045 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_meteor_lg_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3941,08, -18618,2, 2371,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 337 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_meteor_sm_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -10945, 2448,45, 9642,44 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 328 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_meteor_sm_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -13586,5, -11773,8, 5732,62 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 347 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_meteor_sm_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -16328,9, -318,364, 7701,99 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 325 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_meteor_sm_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 12397,1, 11495,5, 7748,65 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 347 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_meteor_sm_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -5882,88, 14728,6, 7374,86 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 347 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_single" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 12129, 1409,62, 866,84 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_single" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 12606, 5028,84, 1206,96 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_single" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 12474,5, 8828,45, 1550,09 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 192 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_left" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 8354,47, -4012,84, 1369,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 138 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_right" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -7556,62, 2863,86, 1799,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 356 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_single" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -7370,02, 189,047, 790,31 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 6 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_single" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3393,28, -9018,58, 1092,32 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 46 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_left" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 5920,8, -7649,07, 1372,1 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 116 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_left" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1411,54, -9514,42, 1599,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 80 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 8661,2, 2527,4, 2180,03 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 9842, 6568,17, 2175,87 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1111,98, 527,838, 2177,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_left" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 10270,9, 2025,71, 2203,89 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 171 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_left" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 9208,79, 4737,63, 2040,35 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 166 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_right" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -5043,68, 2250,88, 2384,84 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_right" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -5356,47, -1325,88, 2194,51 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_sm_right" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1188,77, 3058,28, 2923,57 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 264 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_sm_right" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2212,19, 2870,7, 2830,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 279 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_bend_01" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2317,76, 1036,57, 2862,55 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 336 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_single" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4163,52, -4574,02, 909,17 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 356 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_lg_single" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -11158,4, -7156,55, 1322,75 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 356 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_md_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1975,85, 1571,8, 3549,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_edge_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1699,46, 1974,64, 3550,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 272 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_edge_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2064,12, 1471,11, 3547,83 ); - ent.v[ "angles" ] = ( 360, 327, 0 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_smk_plume_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 12000,9, -15308,9, 4389,8 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 332 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_smk_plume_xlg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 25323,8, 14531,9, 4119,45 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 21 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_bld_crumble_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 244,523, -7888,57, 5098,28 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 157 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_bld_crumble_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -5242,37, 2336,9, 4755,06 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 326 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_sm_bottom" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2321,77, 1179,26, 1228,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 336 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_sm_bottom" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2390,81, 1066,62, 1281,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 204 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_sm_bottom" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2547,69, 2656,36, 1280,62 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 268 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_sm_bottom" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3569,18, 903,619, 1278,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 305 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_sm_bottom" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3791,86, 186,275, 1157,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_zmb_highrise_sun" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -809485, -539953, 221553 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_moon" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 68697,9, -157016, 150210 ); - ent.v[ "angles" ] = ( 31, 113, 0 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1452,47, 1691,38, 3737,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 298 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1713,63, 1398,64, 3707,18 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 237 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1255,6, 1385,61, 3733,04 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 353 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2115,14, 2098,9, 3525,12 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 180 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1985,15, 1228,08, 3558,29 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 351 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2788,92, 2487,89, 3031,84 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 181 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3051,21, 1055,55, 1240,19 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 267 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2936,09, 1613,68, 1618,27 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 356 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2925,32, 1379,21, 1614,31 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 6 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_haze_int_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2306,41, -414,808, 1127,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 331 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_haze_int_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2331,25, -43,3334, 1121,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 240 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_haze_int_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2466,94, 275,75, 1126,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 150 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_haze_int_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2627,32, -227,895, 1120,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 240 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_haze_int_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2651,92, -267,98, 1299,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 240 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_haze_int_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2715,99, 220,238, 1303,74 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 151 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_haze_int_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2104,64, 364,181, 1305,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 240 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_haze_int_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2019,41, 2268,25, 3041,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 277 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_haze_int_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1801,31, -92,9678, 2704,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 330 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1734,18, 1887,28, 3404,85 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3256,31, 1580,39, 1328,04 ); - ent.v[ "angles" ] = ( 0, 274, 12 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2352,67, 758,995, 1120,62 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 335 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createexploder( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2749,41, 187, 1296,99 ); - ent.v[ "angles" ] = ( 38,5801, 310,23, -179,832 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 69; - ent = maps/mp/_utility::createexploder( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2458,49, -389,29, 1420,89 ); - ent.v[ "angles" ] = ( 17,6406, 150,717, 4,09245 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 12; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_meteor_sm_horizon" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 89,944, -13457,5, 2203,45 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 330 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_meteor_sm_horizon" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -8358,44, 11771, 2424,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 46 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_meteor_sm_horizon" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -15394, 449,764, 2112,77 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 315 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_meteor_lg_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -11972,1, 14833,9, 2407,89 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 349 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_meteor_lg_top2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 14784,3, 13721, 2387,97 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 347 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2109,19, 1126,85, 3202,97 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 279 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2705,13, 1223,19, 3014,58 ); - ent.v[ "angles" ] = ( 11, 182, 0 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2749,42, 1079,91, 3018,68 ); - ent.v[ "angles" ] = ( 0, 272, 13 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_md_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2316,36, 611,464, 2861,88 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 331 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_haze_int_med" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2465,47, -503,223, 2704,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 330 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3074,99, 303,748, 2872,09 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 18 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3350,41, 1007,86, 3126 ); - ent.v[ "angles" ] = ( 0,190822, 271,019, 12,9983 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2959,2, 1071,99, 1584,12 ); - ent.v[ "angles" ] = ( 0,190823, 271,019, 11,9983 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3384,78, 1012,04, 1680,04 ); - ent.v[ "angles" ] = ( 0,190823, 271,019, 11,9983 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1965,3, 996,418, 1402,92 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2098,97, 830,184, 1284,43 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 109 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2694,02, 1684,57, 1357,74 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 189 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_meteor_lg_top" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -715,213, -4251,6, 2320,43 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 342 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createexploder( "fx_highrise_dragon_breath_max" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1918,86, 532,453, 3321,03 ); - ent.v[ "angles" ] = ( 348,03, 39,1898, 7,34176 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createexploder( "fx_highrise_dragon_tower_absorb_max" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2208,55, 682,084, 2876,98 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 331 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 902; - ent = maps/mp/_utility::createexploder( "fx_highrise_dragon_tower_glow_max" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2223,62, 625,375, 3145,55 ); - ent.v[ "angles" ] = ( 277,118, 112,306, -11,3598 ); - ent.v[ "delay" ] = 1,6; - ent.v[ "exploder" ] = 902; - ent = maps/mp/_utility::createexploder( "fx_highrise_dragon_tower_glow_max" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2150,42, 667,116, 3145,98 ); - ent.v[ "angles" ] = ( 277,441, 10,918, -1,13407 ); - ent.v[ "delay" ] = 1,8; - ent.v[ "exploder" ] = 902; - ent = maps/mp/_utility::createexploder( "fx_highrise_dragon_tower_glow_max" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2191,95, 738,555, 3145,98 ); - ent.v[ "angles" ] = ( 276,704, 278,17, 6,16471 ); - ent.v[ "delay" ] = 1,7; - ent.v[ "exploder" ] = 902; - ent = maps/mp/_utility::createexploder( "fx_highrise_dragon_tower_glow_max" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2266,34, 697,975, 3145,98 ); - ent.v[ "angles" ] = ( 277,596, 199,948, -7,9795 ); - ent.v[ "delay" ] = 1,9; - ent.v[ "exploder" ] = 902; - ent = maps/mp/_utility::createexploder( "fx_highrise_sidequest_complete" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2208,55, 682,084, 3289,98 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 331 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 903; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1952,4, 2125,58, 3398,93 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2198,4, 1921,55, 3244,55 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1608,42, 1630,07, 3226,55 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2002,86, 1336,04, 3226,55 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2187,74, 1793,8, 3373,88 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1625,76, 1113,24, 3373,88 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_wire_spark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1923,99, 2279,89, 3308,66 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_wire_spark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1887, 2237,51, 3316,22 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_wire_spark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2042,95, 2326,89, 3332,03 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_wire_spark" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1925,14, 2291,73, 3331,91 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1565,87, -517,59, 1427,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1556,66, -532,052, 1427,22 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1494,07, -333,813, 2845,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1465,97, -354,304, 2843,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1506,43, -282,557, 2844,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_god_ray_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2286,46, -258,277, 1338,85 ); - ent.v[ "angles" ] = ( 297,779, 286,045, 42,5871 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_god_ray_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2334,38, -344,373, 1334,13 ); - ent.v[ "angles" ] = ( 288,7, 265,245, 60,9518 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_fire_distant" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 500,75, -7715,98, 4930,45 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 183 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_fire_distant" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1034,61, -7566,86, 4920,16 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 172 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_fire_distant" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 793,604, -7873,05, 6300,18 ); - ent.v[ "angles" ] = ( 360, 172, 0 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_fire_distant" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4974,55, -12499,4, 4144,27 ); - ent.v[ "angles" ] = ( 360, 172, 0 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_fire_distant" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 5141,25, -12654,9, 4243,13 ); - ent.v[ "angles" ] = ( 360, 172, 0 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_fire_distant" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4784,9, -12900,5, 5414,96 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 222 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_smk_plume_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 422,245, -7855,01, 4978,71 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_smk_plume_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 594,24, -8075,24, 3829,66 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_fire_distant" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 533,759, -7934,7, 3892,52 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 172 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_smk_plume_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4824,61, -12909,8, 5325,78 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 359 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_smk_plume_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4948,76, -12635,6, 4202,86 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 355 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_fire_distant" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 7660,25, -1274,45, 5002,88 ); - ent.v[ "angles" ] = ( 342, 228, 0 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_bld_crumble_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4406,97, 3642,98, 3621,17 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 326 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_fire_distant" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 7681,66, -1588,11, 5146,58 ); - ent.v[ "angles" ] = ( 340,092, 278,077, -7,10236 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_fire_distant" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 7896,63, -2259,78, 5234,29 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 299 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_fire_distant" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 8080,7, -1962,36, 6759,67 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 233 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_smk_plume_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 8022,27, -2422,76, 5241,34 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 30 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_smk_plume_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 8035,48, -2094,06, 6683,01 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 30 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_smk_plume_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 10619, -12056,5, 4815,85 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 16 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_fire_distant" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 10664,4, -11803, 4670,8 ); - ent.v[ "angles" ] = ( 345, 215, 0 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_fire_distant" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 10941,4, -11896,5, 4532,56 ); - ent.v[ "angles" ] = ( 27,222, 200,347, -6,82065 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_smk_plume_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -5638,88, 2487,48, 4888,77 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 91 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_fire_distant" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -5537,59, 2599,76, 4889,63 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 238 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_smk_plume_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -5077,21, -3439,84, 4725,64 ); - ent.v[ "angles" ] = ( 3,01569, 92,1197, -1,59938 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_fire_distant" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -5010,98, -3387,14, 4776,28 ); - ent.v[ "angles" ] = ( 36, 274, 0 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_fire_distant" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -5235,39, 2774,52, 5073,47 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 238 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_smk_plume_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1866,25, 5580,06, 3870,03 ); - ent.v[ "angles" ] = ( 344,309, 131,366, -3,53595 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_fire_distant" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1768,48, 5602,07, 3833,98 ); - ent.v[ "angles" ] = ( 7, 27, 0 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_fire_distant" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1200,82, 5481,87, 3237,64 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 334 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_smk_plume_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1246,92, 5426,59, 3368 ); - ent.v[ "angles" ] = ( 344,384, 136,516, -4,13286 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_fire_distant" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4280,09, 10160,2, 4329,69 ); - ent.v[ "angles" ] = ( 50, 42, -3 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_smk_plume_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4433,3, 10083,5, 5709,05 ); - ent.v[ "angles" ] = ( 352, 181, 8 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_smk_plume_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4114, 10279,9, 4180,68 ); - ent.v[ "angles" ] = ( 352, 181, 8 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_fire_distant" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -4313,89, 9720,46, 5534,85 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_sm_right" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4714,76, 2493,84, 1648,97 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 183 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_sm_right" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4739,57, 1471,74, 1650,95 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 183 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_sm_bottom" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3383,68, 834,141, 1742,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 331 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_cloud_sm_bottom" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 5043,55, 2601,05, 1715,63 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 258 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2352,25, 1617,06, 3361,02 ); - ent.v[ "angles" ] = ( 314, 171, 0 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_smk_plume_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1337,35, -7436,84, 5055,08 ); - ent.v[ "angles" ] = ( 351, 339, 0 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_smk_plume_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 7797,33, -1295,94, 5201,8 ); - ent.v[ "angles" ] = ( 25,4786, 72,6761, -82,8493 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_bld_crumble_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 8862,87, -691,298, 4961,33 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 39 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2420,08, -68,38, 1418,5 ); - ent.v[ "angles" ] = ( 1,00179, 150,2, 1,05802 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createexploder( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2335,79, 668,45, 1297,26 ); - ent.v[ "angles" ] = ( 48,3264, 341,649, -179,643 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 15; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2300,57, 242,033, 1441,06 ); - ent.v[ "angles" ] = ( 35,7756, 248,973, 14,7926 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2454,23, 457,859, 1351,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2268,55, 623,049, 1380,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3064,03, 257,858, 1443,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_god_ray_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1930,25, -297,457, 1296,13 ); - ent.v[ "angles" ] = ( 328, 124, 0 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_god_ray_cool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1780,43, 157,226, 1308,13 ); - ent.v[ "angles" ] = ( 322, 138, 0 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_god_ray_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1671,64, 1907,73, 3429,92 ); - ent.v[ "angles" ] = ( 297, 210, 0 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_god_ray_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1790,95, 1871,1, 3436,84 ); - ent.v[ "angles" ] = ( 297, 210, 0 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_god_ray_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1745,13, 1947,4, 3437,16 ); - ent.v[ "angles" ] = ( 297, 210, 0 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_god_ray_cool_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2022,25, 2127,31, 3399,22 ); - ent.v[ "angles" ] = ( 309,598, 336,39, 8,77238 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1251,71, 1117,82, 3731,79 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 3 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2351,43, 1533,15, 3314,29 ); - ent.v[ "angles" ] = ( 314, 171, 0 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createexploder( "fx_highrise_god_ray_sm" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1502,64, 2488,15, 3049,78 ); - ent.v[ "angles" ] = ( 335, 241, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 28; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1793,73, 2728,99, 3178,13 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2190,42, 2650,2, 3189,13 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2240,3, 2522,11, 3184,13 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1578,41, 2731,91, 3185,88 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2055,04, 2579,59, 3052,44 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2058,35, 1104,91, 3066,57 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_god_ray_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1914,25, 1584,22, 3072,13 ); - ent.v[ "angles" ] = ( 333,048, 189,653, 1,8324 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_god_ray_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1887,19, 1577,48, 3046,13 ); - ent.v[ "angles" ] = ( 327,051, 189,424, 1,94656 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createexploder( "fx_highrise_light_recessed" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1944, 1917, 3377 ); - ent.v[ "angles" ] = ( 0, 180, 180 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 23; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_recessed" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1116, 2298, 3201 ); - ent.v[ "angles" ] = ( 0, 180, 180 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createexploder( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2013,66, 1980,6, 3046,75 ); - ent.v[ "angles" ] = ( 313,59, 181,264, -172,778 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 26; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1542,89, 1951,23, 3173,63 ); - ent.v[ "angles" ] = ( 326,084, 274,704, -8,09602 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1733,96, 1578,33, 3173,75 ); - ent.v[ "angles" ] = ( 26,3999, 180,221, 0 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1668,67, 2079,96, 3174 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270,2 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createexploder( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2804,27, 1289,79, 2711,14 ); - ent.v[ "angles" ] = ( 19,8618, 15,8454, 179,579 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 18; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent_wall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1491, 1325, 3346 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent_wall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1300, 2250, 3349,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1510,18, 2082,19, 3217,85 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2031,9, 2283,8, 3242,38 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1876,9, 2235,33, 3252,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1584,94, 1558,86, 3374,88 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1663,65, 1806,64, 3368,18 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1447,13, 2092,95, 3371,88 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1886,75, 2215,98, 3374,88 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1959,83, 2149,67, 3372,88 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1983,27, 1562,68, 3367,09 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2381,82, 1122,82, 3372,03 ); - ent.v[ "angles" ] = ( 0, 274, -57 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1969,61, 1435,29, 3192,13 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1741,48, 1380,96, 3192,13 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2200,38, 1819,39, 3051,24 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1689,91, 1358,33, 3052,11 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_recessed_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1961,97, 1571,4, 3561,7 ); - ent.v[ "angles" ] = ( 0, 180, 180 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_recessed_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1650, 2064, 3562 ); - ent.v[ "angles" ] = ( 0, 180, 180 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_recessed_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1940, 1328, 3562 ); - ent.v[ "angles" ] = ( 0, 180, 180 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_recessed" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1851, 1384, 3377 ); - ent.v[ "angles" ] = ( 0, 180, 180 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_recessed" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2036, 1917, 3377 ); - ent.v[ "angles" ] = ( 0, 180, 180 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_recessed" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1265, 1843, 3377 ); - ent.v[ "angles" ] = ( 0, 180, 180 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_recessed" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1297, 2073, 3377 ); - ent.v[ "angles" ] = ( 0, 180, 180 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_recessed" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1884, 2482, 3201 ); - ent.v[ "angles" ] = ( 0, 180, 180 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_recessed" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1850, 2339, 3201 ); - ent.v[ "angles" ] = ( 0, 180, 180 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_recessed" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1850, 2217, 3201 ); - ent.v[ "angles" ] = ( 0, 180, 180 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_recessed" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2092, 2377, 3201 ); - ent.v[ "angles" ] = ( 0, 180, 180 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_mall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2068, 1578, 3369 ); - ent.v[ "angles" ] = ( 356,6, 0, -9,40337 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createexploder( "fx_highrise_light_mall" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1852, 2018, 3371 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 24; - ent = maps/mp/_utility::createexploder( "fx_highrise_light_mall" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1580, 1430, 3363 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 29,7 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 25; - ent = maps/mp/_utility::createexploder( "fx_highrise_light_mall" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1892, 1578, 3367 ); - ent.v[ "angles" ] = ( 4,99999, 0, 7,39999 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 27; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_mall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1532, 2018, 3368 ); - ent.v[ "angles" ] = ( 355,002, 359,848, 7,60746 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_mall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2012, 2018, 3364 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 19,7 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_lantern_red" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1896,65, 1340,69, 3156,13 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_lantern_red" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1921,67, 1130,63, 3180,67 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2199,16, -220,508, 1429,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1412,87, -317,377, 1370,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2190,55, 38,0294, 1199,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2136,92, 163,026, 2801,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1822,83, 117,922, 2797,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2073,98, 162,96, 2844,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2501,97, 740,485, 2844,17 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 61 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2380,05, 501,915, 2704,13 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1958,82, 182,506, 1373,02 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2379,38, 735,746, 1265,35 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 62 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2408,28, 797,57, 1449,82 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 61 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2237,09, 769,693, 1453,12 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 156 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1465,22, 1277,82, 1582,88 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1657,8, 1289, 1582,88 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1826,1, 1284,82, 1583,88 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1966,86, 1212,15, 1583,13 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1960,06, 1097,5, 1569,73 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2159,83, 846,448, 1604,34 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 107 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1924,86, 616,804, 1611,94 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 149 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2050,99, 1040,36, 1262,44 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2680,12, 761,659, 1102,06 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 335 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1298,86, 1009,47, 3545,62 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1336,88, 1010,24, 3711,77 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1693,27, 959,043, 3530,37 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 186 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1997,79, 1055,94, 3322,29 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1996,55, 1061,2, 3529,25 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2341,56, 1105,49, 3428,15 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 257 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3155,15, 1100,68, 3550,87 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2691,08, 1335,75, 3182,49 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2668,41, 1106,93, 1624,14 ); - ent.v[ "angles" ] = ( 17, 220, 102 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2468,95, 1690,2, 1634,15 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 263 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1877,81, 1000,92, 1412,75 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 267 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2178,88, 651,967, 1461,02 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 116 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1798,07, 429,98, 1281,16 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 78 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1831,99, 1263,11, 1573,88 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 179 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2983,84, 904,311, 1310,93 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 273 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1283,82, 1636,99, 3709,96 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 311 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1807,44, 1413,16, 3728,99 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 242 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1881,13, 1606,04, 3729,87 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 186 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1793,23, 1792,73, 3735,49 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 185 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1773,68, 1672,45, 3727,26 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 175 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1808,83, 1654,44, 3730,23 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 235 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1598,64, 1959,85, 3568,3 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 279 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2293,09, 1571,05, 3481,99 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 184 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2205,1, 2086,23, 3518,15 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 122 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2192,27, 1897,3, 3550,88 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2189,52, 1765,57, 3403,76 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1595,98, 1131,52, 3374,83 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1753,55, 1598,67, 3549,88 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2206,62, 1581,68, 3218,61 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2355,97, 1593,8, 3362,9 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 190 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2414,11, 1546,99, 3140,54 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 157 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2412,42, 1645,27, 3113,76 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 211 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2036,6, 2263,32, 3209,88 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 157 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1366,75, 2463,64, 3199,88 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 157 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1185,07, 2592,36, 3198,88 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1280,89, 2331,35, 3198,88 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1647,71, 2474,42, 3196,88 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2090,02, 1947,2, 3064,96 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1184,45, 2643,36, 3050,2 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_god_ray_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3348,46, 1819,9, 2144,83 ); - ent.v[ "angles" ] = ( 312, 217, 0 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_god_ray_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3728,51, 1721,09, 1590,06 ); - ent.v[ "angles" ] = ( 346,078, 202,818, 1,49289 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_god_ray_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3705,99, 1549,6, 1618,51 ); - ent.v[ "angles" ] = ( 351,045, 143,012, 1,31743 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createexploder( "fx_highrise_light_sconce_glow" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2739,03, 1858,59, 1482,86 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 20; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2837,48, 1445,67, 1402,51 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3542,62, 1929,24, 1636,69 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3548,12, 1685,85, 1637,25 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3520,89, 1046,67, 1549,98 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3758,57, 1452,44, 1426,46 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3908,33, 1245,27, 1638,82 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4023,99, 1442,62, 1665,64 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createexploder( "fx_highrise_light_sconce_glow" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 4172,35, 1511,87, 1780 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 22; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3594,78, 2243,49, 1570,96 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_sconce_beam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3226,98, 2480,47, 3028,1 ); - ent.v[ "angles" ] = ( 4,99389, 207,012, -158,738 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_sconce_beam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3226,7, 2191,97, 3028,26 ); - ent.v[ "angles" ] = ( 3,9309, 206,708, -160,564 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_sconce_beam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3026,51, 1709,73, 2968,03 ); - ent.v[ "angles" ] = ( 277,259, 135,851, -17,0955 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_sconce_beam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3057,61, 1660,14, 2991,92 ); - ent.v[ "angles" ] = ( 2, 206,4, -179,256 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_edge_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2615,73, 1685,46, 2986,14 ); - ent.v[ "angles" ] = ( 0, 90, -12 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_edge_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2635,7, 1792,44, 2993,77 ); - ent.v[ "angles" ] = ( 0,831006, 266,087, 11,9716 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2467,62, 1746,58, 2958,04 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 348 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2967,36, 1820,95, 3064,02 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 348 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_edge_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2597,82, 1400,42, 2982,13 ); - ent.v[ "angles" ] = ( 358,342, 82,1724, -11,8865 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_sconce_beam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2563,95, 1659,66, 2872,03 ); - ent.v[ "angles" ] = ( 18,7394, 109,451, 141,039 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_sconce_beam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2806,95, 2253,15, 2923,49 ); - ent.v[ "angles" ] = ( 40,9643, 212,62, -140,933 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_recessed_tall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3208,36, 2056,22, 2950,64 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 348 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_recessed_tall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3209,28, 1994,32, 2950,71 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 348 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_sconce_beam" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2903,99, 1571,61, 2787,13 ); - ent.v[ "angles" ] = ( 81,5036, 99,0796, -140,169 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3444,61, 1688,04, 2910,43 ); - ent.v[ "angles" ] = ( 280, 180, 176 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2592,64, 1844,79, 2648,19 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_recessed_tall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2549,11, 1626,02, 2630,58 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 348 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2538,1, 2333,24, 2972,01 ); - ent.v[ "angles" ] = ( 0, 91, -12 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2634,33, 2647,39, 2818,6 ); - ent.v[ "angles" ] = ( 0, 271, 11 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_edge_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2619,11, 2630,41, 3171,93 ); - ent.v[ "angles" ] = ( 1,86388, 262,194, 11,8565 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2636,8, 2536,55, 2893,93 ); - ent.v[ "angles" ] = ( 40, 356, 0 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2464,71, 2500,98, 2955,02 ); - ent.v[ "angles" ] = ( 8, 283, 0 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3215,75, 1847,41, 3042,1 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_sconce_glow" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3573,48, 1400,34, 3117,84 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_god_ray_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3028,11, 2049,5, 2949,23 ); - ent.v[ "angles" ] = ( 303,859, 245,428, 21,855 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_god_ray_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2954,03, 2075,37, 2944,19 ); - ent.v[ "angles" ] = ( 302,055, 255,961, 13,0087 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_god_ray_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2992,71, 2049,56, 2942,22 ); - ent.v[ "angles" ] = ( 303,859, 245,428, 21,855 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3078,6, 2667,22, 2944,06 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3336,91, 2371,02, 3002 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2755,36, 2062, 2875,12 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3319,7, 1292,55, 3017,43 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2696,8, 1576,14, 2884,94 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2696,59, 1240,93, 2870,7 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_edge_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2878,47, 1350,19, 2866,37 ); - ent.v[ "angles" ] = ( 348,007, 357,955, 0,425021 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_god_ray_cool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2630,69, 1758,08, 2863,39 ); - ent.v[ "angles" ] = ( 289,644, 199,455, 66,814 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_god_ray_cool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2716,57, 1720,64, 2865,82 ); - ent.v[ "angles" ] = ( 288,659, 190,807, 74,9859 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3081,57, 2268,88, 3086,73 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 348 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3044,25, 2442,17, 3082,37 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 348 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3297,04, 1730,78, 3132,54 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 348 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3487,61, 1497,85, 3173,85 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 348 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3317,15, 1203,93, 3134,62 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 348 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2991,17, 1280,22, 3068,33 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 348 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3082,49, 1318,66, 3085,87 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 348 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3098,47, 1578,75, 3090,14 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 348 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2634,14, 1467,84, 2668,77 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3317,45, 1767,88, 2824,96 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2787,9, 1713,16, 2713,49 ); - ent.v[ "angles" ] = ( 0, 270, 16 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2876,07, 1575,63, 3031,39 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createexploder( "fx_highrise_dragon_breath_ric" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1147,24, -1392,91, 3321,97 ); - ent.v[ "angles" ] = ( 350,302, 117,825, -10,165 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 901; - ent = maps/mp/_utility::createexploder( "fx_highrise_dragon_tower_glow_ric" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2223,62, 625,375, 3145,55 ); - ent.v[ "angles" ] = ( 277,118, 112,306, -11,3598 ); - ent.v[ "delay" ] = 1,6; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_highrise_dragon_tower_glow_ric" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2150,42, 667,116, 3145,98 ); - ent.v[ "angles" ] = ( 277,441, 10,918, -1,13407 ); - ent.v[ "delay" ] = 1,8; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_highrise_dragon_tower_glow_ric" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2191,95, 738,555, 3145,98 ); - ent.v[ "angles" ] = ( 276,704, 278,17, 6,16471 ); - ent.v[ "delay" ] = 1,7; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_highrise_dragon_tower_glow_ric" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2266,34, 697,975, 3145,98 ); - ent.v[ "angles" ] = ( 277,596, 199,948, -7,9795 ); - ent.v[ "delay" ] = 1,9; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_highrise_sidequest_complete_ric" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2208,55, 682,084, 3289,98 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 331 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1003; - ent = maps/mp/_utility::createexploder( "fx_highrise_dragon_tower_absorb_ric" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2208,55, 682,084, 2876,98 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 331 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1002; - ent = maps/mp/_utility::createexploder( "fx_highrise_dragon_breath_max" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1899,62, 540,89, 3321,77 ); - ent.v[ "angles" ] = ( 347,645, 99,6825, -6,66593 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1001; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_recessed_tiny" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3222,28, 1478,04, 3007,25 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 348 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_recessed_tiny" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3222,58, 1440,63, 3006,85 ); - ent.v[ "angles" ] = ( 348, 358,978, 0,212549 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_recessed_tiny" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3222,48, 1403,17, 3007,86 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 348 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_build_lamp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3600,67, 1225,37, 3104,76 ); - ent.v[ "angles" ] = ( 11, 180, -180 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2193,95, 2002,36, 3370,71 ); - ent.v[ "angles" ] = ( 332,532, 4,55492, -11,3167 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent_wal2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1432, 1533, 3346 ); - ent.v[ "angles" ] = ( 90, 301,964, 75,964 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent_wal2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1859, 1179, 3346 ); - ent.v[ "angles" ] = ( 90, 75,964, 75,963 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent_wal2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1489, 1112, 3346 ); - ent.v[ "angles" ] = ( 90, 153,435, -26,565 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent_wall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1487, 1304, 3160 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_edge_100" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2584,43, 1269,03, 2802,3 ); - ent.v[ "angles" ] = ( 348,007, 2,04464, -0,425018 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_lantern_yel" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3239,42, 1323,42, 1325,28 ); - ent.v[ "angles" ] = ( 321,37, 357,201, 15,6156 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_lantern_yel" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3423,39, 1044,76, 1361,18 ); - ent.v[ "angles" ] = ( 29,3002, 0,63371, -31,6874 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createexploder( "fx_highrise_light_lantern_yel" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3115,04, 1509,73, 1291,21 ); - ent.v[ "angles" ] = ( 300, 244, 2 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 19; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3654,46, 2101,78, 1586,84 ); - ent.v[ "angles" ] = ( 357,181, 273,973, 12,0252 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3731,35, 1548,45, 1594,73 ); - ent.v[ "angles" ] = ( 357,181, 273,973, 12,0252 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4304,49, 1364,34, 1722,44 ); - ent.v[ "angles" ] = ( 357,181, 273,973, 12,0252 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3833,2, 1131,74, 1635,28 ); - ent.v[ "angles" ] = ( 357,181, 273,973, 12,0252 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3705,37, 1293,27, 1607,74 ); - ent.v[ "angles" ] = ( 357,181, 273,973, 12,0252 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4017,75, 1682,72, 1677,84 ); - ent.v[ "angles" ] = ( 357,181, 273,973, 12,0252 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3513,18, 1777,46, 1385,47 ); - ent.v[ "angles" ] = ( 357,181, 273,973, 33,0252 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3011,3, 1544,56, 1290,37 ); - ent.v[ "angles" ] = ( 357,181, 273,974, -11,9748 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3207,7, 1207,77, 1337,61 ); - ent.v[ "angles" ] = ( 357,181, 273,974, -11,9748 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2833,14, 286,665, 2790,74 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2921,53, 485,156, 2795,59 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2544,51, -730,449, 2776,97 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2566,46, 471,317, 2962,02 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1655,29, -173,601, 2788,43 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1921,23, 1,804, 2788,62 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1535,95, -605,784, 1205,21 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1854,47, -206,391, 1198,72 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_lantern_red" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1956,36, 193,943, 1232,18 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1738,24, 90,4635, 1214,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1485,65, 1540,57, 3399,58 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1463,46, 1288,78, 3397,15 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1259,22, 1070,13, 3410,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1765,28, 1087,43, 3410,44 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1766,18, 1712,03, 3571,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1654,98, 2019,46, 3577,66 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2182,6, 1557,06, 3400,09 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1602,86, 1530,88, 3222,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1704,82, 1125,59, 3224,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1899,05, 1970,54, 3221,01 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1363,86, 1872,36, 3222,11 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ceiling_dust_sm_runner" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1458,94, 1657,15, 3380,88 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1337,38, 1026,47, 3711,14 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1637,23, 1803,45, 3402,52 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createexploder( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1503,41, 2486,2, 3047,74 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 28; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1524,83, 2025,97, 3047,16 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 354 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1695,5, 1594,28, 3040,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 357 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1709,53, 1747,17, 3043,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 75 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createexploder( "fx_highrise_god_ray_cool_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3069,09, 1315,31, 3074,5 ); - ent.v[ "angles" ] = ( 73,8317, 162,315, 152,562 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 18; - ent = maps/mp/_utility::createexploder( "fx_highrise_god_ray_cool_md" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2998,64, 1446,27, 3074,65 ); - ent.v[ "angles" ] = ( 73,4575, 221,539, -150,225 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 18; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3303,9, 1526,44, 3011,21 ); - ent.v[ "angles" ] = ( 355, 270,088, -1,00244 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_god_ray_cool_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2679,84, 1805,5, 2876,87 ); - ent.v[ "angles" ] = ( 296,261, 213,47, 53,6678 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3517,86, 1484,69, 3037,26 ); - ent.v[ "angles" ] = ( 358, 270,035, -1 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2570,9, 1409,15, 3105,96 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 76 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2548,95, 1413,6, 3104,49 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_point_crumble_ext" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2708,6, 1426,81, 3010,88 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 91 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3070,14, 1387,29, 2901,64 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 324 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1887,95, 2601,71, 3079,12 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1924,07, 2594,16, 3051,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1889,12, 2640,49, 3079,11 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1895,27, 2497,53, 3092 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1847,81, 2514, 3042 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2079,36, 2330,44, 3083,88 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2855, 1575,13, 2951,85 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2836,25, 1476,09, 2889,67 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3408,4, 1724,81, 2870,78 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3308,16, 1796,09, 2137,05 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_ash_rising_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3926,66, 1843,34, 2284,8 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3691,42, 1435,88, 1445,93 ); - ent.v[ "angles" ] = ( 290, 180, 180 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3728,29, 1439,72, 1448,04 ); - ent.v[ "angles" ] = ( 290, 180, 180 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3227,45, 1301,67, 1336,88 ); - ent.v[ "angles" ] = ( 270, 360, 0 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1749,81, -161,746, 2880,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1797,26, -157,369, 2880,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2620,55, 520,277, 3050,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2843,22, 306,648, 3040,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2676,16, 282,999, 2895,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2593,87, -511,697, 2885,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1407,57, -465,3, 2704,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1408,65, -457,887, 2735,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2560,5, -705,708, 2741,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2716,95, 500,098, 2712,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2126,64, 191,041, 2744,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2105,6, 183,397, 2791,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1853,52, -159,018, 2733,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2105,87, 490,816, 2737,94 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2108,57, 484,478, 2767,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2214,35, 398,459, 2732,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1841,72, -696,837, 1442,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1797,24, -774,835, 1455,88 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1796,43, -107,169, 1455,88 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1645,46, -293,835, 1455,88 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1787,7, -102,926, 1397,01 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1829,45, -163,244, 1331,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1717,33, -569,234, 1327,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2299,73, -311,967, 1341,57 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_build_lamp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2374,76, -319,422, 1222,82 ); - ent.v[ "angles" ] = ( 0, 241, 20 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_build_lamp" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3599,9, 1175,49, 3106,71 ); - ent.v[ "angles" ] = ( 11, 180, -180 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createexploder( "fx_highrise_light_sconce_glow" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 3541,54, 1399,8, 1636,2 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 21; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2012,42, 1347,3, 1532,28 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1490, 1270, 2111 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3176,1, 2190,87, 2527,66 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2673,41, 421, 1251,5 ); - ent.v[ "angles" ] = ( 1,00179, 60,2, 1,05802 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2208,23, 518, 1247,5 ); - ent.v[ "angles" ] = ( 1,00179, 60,2, 1,05802 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2088, 234,23, 1419,5 ); - ent.v[ "angles" ] = ( 1,00179, 150,2, 1,05802 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2707,23, 748,23, 1253,14 ); - ent.v[ "angles" ] = ( 28,2045, 55,6718, -17,8869 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2436, -289, 2838 ); - ent.v[ "angles" ] = ( 357,168, 327,961, 1,49371 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createexploder( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2672,31, -228,43, 2825,07 ); - ent.v[ "angles" ] = ( 324,396, 327,426, 4,03309 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 17; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1867,08, -126,5, 2825,5 ); - ent.v[ "angles" ] = ( 1,00179, 60, 1,05802 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1445,46, -535,1, 2845,35 ); - ent.v[ "angles" ] = ( 338,7, 63,6553, -7,41061 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2432,53, 260,46, 2838,18 ); - ent.v[ "angles" ] = ( 29,9493, 328,321, -3,83146 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2457,14, 556, 2883,48 ); - ent.v[ "angles" ] = ( 304,4, 180, 180 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2815, 497, 2996 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 240 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1874,15, 1546,99, 1532,04 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1598,59, 1546,6, 1531,72 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1384,83, 1209,33, 1892,45 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2007,63, 1346,43, 1892,85 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2799,48, 545,947, 3095,23 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent_wall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2123,63, 515,78, 2801 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 240 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent_wall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2374,03, 676,13, 2974 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 150 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createexploder( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1671,34, 278,75, 1414,9 ); - ent.v[ "angles" ] = ( 42,0435, 154,841, 10,9704 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 13; - ent = maps/mp/_utility::createexploder( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1457,92, -411,62, 1255,5 ); - ent.v[ "angles" ] = ( 1,00179, 330,2, 1,05802 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 14; - ent = maps/mp/_utility::createexploder( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2630,67, -137,02, 1251,24 ); - ent.v[ "angles" ] = ( 31,6559, 150,193, -0,919528 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 16; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_bulb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3746,12, 1924,82, 1432,95 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4007,23, 1848,55, 2317 ); - ent.v[ "angles" ] = ( 326,505, 277,849, -93,3464 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3929,63, 1868,95, 2893 ); - ent.v[ "angles" ] = ( 311,657, 154,584, 17,5664 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1410,58, 1112,11, 1511,13 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_water_drip_fast" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1432,67, 1116, 1511,4 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1678, 1163, 1584 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3056,85, 349,04, 1251,07 ); - ent.v[ "angles" ] = ( 1,00179, 60,2, 1,05802 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_recessed" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3799,43, 1406,53, 1434,99 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 343,9 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createexploder( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1407,3, 2289,71, 3169,82 ); - ent.v[ "angles" ] = ( 16,5044, 175,086, -17,483 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 28; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent_wall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1658,06, 267,17, 1208,98 ); - ent.v[ "angles" ] = ( 5,77029, 330,51, 10,08 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2677,81, -215,77, 1419,49 ); - ent.v[ "angles" ] = ( 2,42953, 330,171, -1,39235 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1674,98, -546,49, 1419,41 ); - ent.v[ "angles" ] = ( 11,7655, 152,791, 6,45455 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1559,83, -450,2, 1256,2 ); - ent.v[ "angles" ] = ( 329,098, 330,754, 4,30758 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2032,62, -308,08, 1258,5 ); - ent.v[ "angles" ] = ( 1,00179, 60,2, 1,05802 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_highrise_light_fluorescent_wal2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2816,01, 1601,82, 2893,92 ); - ent.v[ "angles" ] = ( 316,44, 273,037, -2,090482 ); - ent.v[ "delay" ] = -92; -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/gametypes_zm/zstandard.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/gametypes_zm/zstandard.gsc deleted file mode 100644 index c380171..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/gametypes_zm/zstandard.gsc +++ /dev/null @@ -1,45 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_ai_dogs; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/gametypes_zm/_zm_gametype; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; - -main() //checked matches cerberus output -{ - maps/mp/gametypes_zm/_zm_gametype::main(); - level.onprecachegametype = ::onprecachegametype; - level.onstartgametype = ::onstartgametype; - level._game_module_custom_spawn_init_func = maps/mp/gametypes_zm/_zm_gametype::custom_spawn_init_func; - level._game_module_stat_update_func = maps/mp/zombies/_zm_stats::survival_classic_custom_stat_update; - maps/mp/gametypes_zm/_zm_gametype::post_gametype_main( "zstandard" ); -} - -onprecachegametype() //checked matches cerberus output -{ - level.playersuicideallowed = 1; - level.canplayersuicide = ::canplayersuicide; - level.suicide_weapon = "death_self_zm"; - precacheitem( "death_self_zm" ); - maps/mp/zombies/_zm_ai_dogs::init(); - maps/mp/gametypes_zm/_zm_gametype::rungametypeprecache( "zstandard" ); -} - -onstartgametype() //checked matches cerberus output -{ - maps/mp/gametypes_zm/_zm_gametype::setup_classic_gametype(); - maps/mp/gametypes_zm/_zm_gametype::rungametypemain( "zstandard", ::zstandard_main ); -} - -zstandard_main() //checked matches cerberus output -{ - level.dog_rounds_allowed = getgametypesetting( "allowdogs" ); - if ( level.dog_rounds_allowed ) - { - maps/mp/zombies/_zm_ai_dogs::enable_dog_rounds(); - } - level thread maps/mp/zombies/_zm::round_start(); - level thread maps/mp/gametypes_zm/_zm_gametype::kill_all_zombies(); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_equip_springpad.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_equip_springpad.gsc deleted file mode 100644 index d770c74..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_equip_springpad.gsc +++ /dev/null @@ -1,632 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\zombies\_zm_utility; -#include maps\mp\zombies\_zm_equipment; -#include maps\mp\gametypes_zm\_weaponobjects; -#include maps\mp\zombies\_zm; -#include maps\mp\zombies\_zm_unitrigger; -#include maps\mp\zombies\_zm_power; -#include maps\mp\zombies\_zm_buildables; - -init( pickupstring, howtostring ) -{ - if ( !maps\mp\zombies\_zm_equipment::is_equipment_included( "equip_springpad_zm" ) ) - return; - - level.springpad_name = "equip_springpad_zm"; - init_animtree(); - maps\mp\zombies\_zm_equipment::register_equipment( "equip_springpad_zm", pickupstring, howtostring, "zom_hud_trample_steam_complete", "springpad", undefined, ::transferspringpad, ::dropspringpad, ::pickupspringpad, ::placespringpad ); - maps\mp\zombies\_zm_equipment::add_placeable_equipment( "equip_springpad_zm", "p6_anim_zm_buildable_view_tramplesteam" ); - level thread onplayerconnect(); - maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "equip_springpad", pickupstring ); - level._effect["springpade_on"] = loadfx( "maps/zombie_highrise/fx_highrise_trmpl_steam_os" ); - - if ( !isdefined( level.springpad_trigger_radius ) ) - level.springpad_trigger_radius = 72; - - thread wait_init_damage(); -} - -wait_init_damage() -{ - while ( !isdefined( level.zombie_vars ) || !isdefined( level.zombie_vars["zombie_health_start"] ) ) - wait 1; - - level.springpad_damage = maps\mp\zombies\_zm::ai_zombie_health( 50 ); -} - -onplayerconnect() -{ - for (;;) - { - level waittill( "connecting", player ); - - player thread onplayerspawned(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - self thread setupwatchers(); - - for (;;) - { - self waittill( "spawned_player" ); - - self thread watchspringpaduse(); - } -} - -setupwatchers() -{ - self waittill( "weapon_watchers_created" ); - - watcher = maps\mp\gametypes_zm\_weaponobjects::getweaponobjectwatcher( "equip_springpad" ); - watcher.onspawnretrievetriggers = maps\mp\zombies\_zm_equipment::equipment_onspawnretrievableweaponobject; -} - -watchspringpaduse() -{ - self notify( "watchSpringPadUse" ); - self endon( "watchSpringPadUse" ); - self endon( "death" ); - self endon( "disconnect" ); - - for (;;) - { - self waittill( "equipment_placed", weapon, weapname ); - - if ( weapname == level.springpad_name ) - { - self cleanupoldspringpad(); - self.buildablespringpad = weapon; - self thread startspringpaddeploy( weapon ); - } - } -} - -cleanupoldspringpad() -{ - if ( isdefined( self.buildablespringpad ) ) - { - if ( isdefined( self.buildablespringpad.stub ) ) - { - thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub ); - self.buildablespringpad.stub = undefined; - } - - self.buildablespringpad delete(); - self.springpad_kills = undefined; - } - - if ( isdefined( level.springpad_sound_ent ) ) - { - level.springpad_sound_ent delete(); - level.springpad_sound_ent = undefined; - } -} - -watchforcleanup() -{ - self notify( "springpad_cleanup" ); - self endon( "springpad_cleanup" ); - self waittill_any( "death_or_disconnect", "equip_springpad_zm_taken", "equip_springpad_zm_pickup" ); - cleanupoldspringpad(); -} - -placespringpad( origin, angles ) -{ - if ( isdefined( self.turret_placement ) && !self.turret_placement["result"] ) - { - forward = anglestoforward( angles ); - origin -= -24 * forward; - } - - item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", origin, angles, level.springpad_trigger_radius, -24 ); - - if ( isdefined( item ) ) - { - item.springpad_kills = self.springpad_kills; - item.requires_pickup = 1; - item.zombie_attack_callback = ::springpad_fling_attacker; - } - - self.springpad_kills = undefined; - return item; -} - -dropspringpad() -{ - item = self maps\mp\zombies\_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", self.origin, self.angles, level.springpad_trigger_radius, -24 ); - - if ( isdefined( item ) ) - { - item.springpad_kills = self.springpad_kills; - item.requires_pickup = 1; - } - - self.springpad_kills = undefined; - return item; -} - -pickupspringpad( item ) -{ - self.springpad_kills = item.springpad_kills; - item.springpad_kills = undefined; -} - -transferspringpad( fromplayer, toplayer ) -{ - buildablespringpad = toplayer.buildablespringpad; - toarmed = 0; - - if ( isdefined( buildablespringpad ) ) - toarmed = isdefined( buildablespringpad.is_armed ) && buildablespringpad.is_armed; - - springpad_kills = toplayer.springpad_kills; - fromarmed = 0; - - if ( isdefined( fromplayer.buildablespringpad ) ) - fromarmed = isdefined( fromplayer.buildablespringpad.is_armed ) && fromplayer.buildablespringpad.is_armed; - - toplayer.buildablespringpad = fromplayer.buildablespringpad; - toplayer.buildablespringpad.original_owner = toplayer; - toplayer.buildablespringpad.owner = toplayer; - toplayer notify( "equip_springpad_zm_taken" ); - toplayer.springpad_kills = fromplayer.springpad_kills; - toplayer thread startspringpaddeploy( toplayer.buildablespringpad, fromarmed ); - fromplayer.buildablespringpad = buildablespringpad; - fromplayer.springpad_kills = springpad_kills; - fromplayer notify( "equip_springpad_zm_taken" ); - - if ( isdefined( fromplayer.buildablespringpad ) ) - { - fromplayer thread startspringpaddeploy( fromplayer.buildablespringpad, toarmed ); - fromplayer.buildablespringpad.original_owner = fromplayer; - fromplayer.buildablespringpad.owner = fromplayer; - } - else - fromplayer maps\mp\zombies\_zm_equipment::equipment_release( "equip_springpad_zm" ); -} - -springpad_in_range( delta, origin, radius ) -{ - if ( distancesquared( self.target.origin, origin ) < radius * radius ) - return true; - - return false; -} - -springpad_power_on( origin, radius ) -{ -/# - println( "^1ZM POWER: trap on\n" ); -#/ - if ( !isdefined( self.target ) ) - return; - - self.target.power_on = 1; - self.target.power_on_time = gettime(); -} - -springpad_power_off( origin, radius ) -{ -/# - println( "^1ZM POWER: trap off\n" ); -#/ - if ( !isdefined( self.target ) ) - return; - - self.target.power_on = 0; -} - -startspringpaddeploy( weapon, armed ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_springpad_zm_taken" ); - self thread watchforcleanup(); - electricradius = 45; - - if ( isdefined( self.springpad_kills ) ) - { - weapon.springpad_kills = self.springpad_kills; - self.springpad_kills = undefined; - } - - if ( !isdefined( weapon.springpad_kills ) ) - weapon.springpad_kills = 0; - - if ( isdefined( weapon ) ) - { -/# - weapon thread debugspringpad( electricradius ); -#/ - if ( isdefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power ) - { - weapon.power_on = 0; - maps\mp\zombies\_zm_power::add_temp_powered_item( ::springpad_power_on, ::springpad_power_off, ::springpad_in_range, maps\mp\zombies\_zm_power::cost_high, 1, weapon.power_on, weapon ); - } - else - weapon.power_on = 1; - - if ( !weapon.power_on ) - self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" ); - - self thread springpadthink( weapon, electricradius, armed ); - - if ( !( isdefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power ) ) - { - - } - - self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( weapon ); - - weapon waittill( "death" ); - - if ( isdefined( level.springpad_sound_ent ) ) - { - level.springpad_sound_ent playsound( "wpn_zmb_electrap_stop" ); - level.springpad_sound_ent delete(); - level.springpad_sound_ent = undefined; - } - - self notify( "springpad_cleanup" ); - } -} - -init_animtree() -{ - scriptmodelsuseanimtree( -1 ); -} - -#using_animtree("zombie_springpad"); - -springpad_animate( weapon, armed ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_springpad_zm_taken" ); - weapon endon( "death" ); - weapon useanimtree( -1 ); - f_animlength = getanimlength( %o_zombie_buildable_tramplesteam_reset_zombie ); - r_animlength = getanimlength( %o_zombie_buildable_tramplesteam_reset ); - l_animlength = getanimlength( %o_zombie_buildable_tramplesteam_launch ); - weapon thread springpad_audio(); - prearmed = 0; - - if ( isdefined( armed ) && armed ) - prearmed = 1; - - fast_reset = 0; - - while ( isdefined( weapon ) ) - { - if ( !prearmed ) - { - if ( fast_reset ) - { - weapon setanim( %o_zombie_buildable_tramplesteam_reset_zombie ); - weapon thread playspringpadresetaudio( f_animlength ); - wait( f_animlength ); - } - else - { - weapon setanim( %o_zombie_buildable_tramplesteam_reset ); - weapon thread playspringpadresetaudio( r_animlength ); - wait( r_animlength ); - } - } - else - wait 0.05; - - prearmed = 0; - weapon notify( "armed" ); - fast_reset = 0; - - if ( isdefined( weapon ) ) - { - weapon setanim( %o_zombie_buildable_tramplesteam_compressed_idle ); - - weapon waittill( "fling", fast ); - - fast_reset = fast; - } - - if ( isdefined( weapon ) ) - { - weapon setanim( %o_zombie_buildable_tramplesteam_launch ); - wait( l_animlength ); - } - } -} - -playspringpadresetaudio( time ) -{ - self endon( "springpadAudioCleanup" ); - ent = spawn( "script_origin", self.origin ); - ent playloopsound( "zmb_highrise_launcher_reset_loop" ); - self thread deleteentwhensounddone( time, ent ); - - self waittill( "death" ); - - ent delete(); -} - -deleteentwhensounddone( time, ent ) -{ - self endon( "death" ); - wait( time ); - self notify( "springpadAudioCleanup" ); - ent delete(); -} - -springpad_audio() -{ - loop_ent = spawn( "script_origin", self.origin ); - loop_ent playloopsound( "zmb_highrise_launcher_loop" ); - - self waittill( "death" ); - - loop_ent delete(); -} - -springpad_fx( weapon ) -{ - weapon endon( "death" ); - self endon( "equip_springpad_zm_taken" ); - - while ( isdefined( weapon ) ) - { - playfxontag( level._effect["springpade_on"], weapon, "tag_origin" ); - wait 1; - } -} - -springpadthink( weapon, electricradius, armed ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_springpad_zm_taken" ); - weapon endon( "death" ); - radiussquared = electricradius * electricradius; - trigger = spawn( "trigger_box", weapon getcentroid(), 1, 48, 48, 32 ); - trigger.origin += anglestoforward( flat_angle( weapon.angles ) ) * -15; - trigger.angles = weapon.angles; - trigger enablelinkto(); - trigger linkto( weapon ); - weapon.trigger = trigger; -/# - trigger.extent = ( 24.0, 24.0, 16.0 ); -#/ - weapon thread springpadthinkcleanup( trigger ); - direction_forward = anglestoforward( flat_angle( weapon.angles ) + vectorscale( ( -1, 0, 0 ), 60.0 ) ); - direction_vector = vectorscale( direction_forward, 1024 ); - direction_origin = weapon.origin + direction_vector; - home_angles = weapon.angles; - weapon.is_armed = 0; - self thread springpad_fx( weapon ); - self thread springpad_animate( weapon, armed ); - - weapon waittill( "armed" ); - - weapon.is_armed = 1; - weapon.fling_targets = []; - self thread targeting_thread( weapon, trigger ); - - while ( isdefined( weapon ) ) - { - wait_for_targets( weapon ); - - if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 ) - { - weapon notify( "fling", weapon.zombies_only ); - weapon.is_armed = 0; - weapon.zombies_only = 1; - - foreach ( ent in weapon.fling_targets ) - { - if ( isplayer( ent ) ) - { - ent thread player_fling( weapon.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), weapon.angles, direction_vector, weapon ); - continue; - } - - if ( isdefined( ent ) && isdefined( ent.custom_springpad_fling ) ) - { - if ( !isdefined( self.num_zombies_flung ) ) - self.num_zombies_flung = 0; - - self.num_zombies_flung++; - self notify( "zombie_flung" ); - ent thread [[ ent.custom_springpad_fling ]]( weapon, self ); - continue; - } - - if ( isdefined( ent ) ) - { - if ( !isdefined( self.num_zombies_flung ) ) - self.num_zombies_flung = 0; - - self.num_zombies_flung++; - self notify( "zombie_flung" ); - - if ( !isdefined( weapon.fling_scaler ) ) - weapon.fling_scaler = 1; - - if ( isdefined( weapon.direction_vec_override ) ) - direction_vector = weapon.direction_vec_override; - - ent dodamage( ent.health + 666, ent.origin ); - ent startragdoll(); - ent launchragdoll( direction_vector / 4 * weapon.fling_scaler ); - weapon.springpad_kills++; - } - } - - if ( weapon.springpad_kills >= 28 ) - self thread springpad_expired( weapon ); - - weapon.fling_targets = []; - - weapon waittill( "armed" ); - - weapon.is_armed = 1; - } - else - wait 0.1; - } -} - -wait_for_targets( weapon ) -{ - weapon endon( "hi_priority_target" ); - - while ( isdefined( weapon ) ) - { - if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 ) - { - wait 0.15; - return; - } - - wait 0.05; - } -} - -targeting_thread( weapon, trigger ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_springpad_zm_taken" ); - weapon endon( "death" ); - weapon.zombies_only = 1; - - while ( isdefined( weapon ) ) - { - if ( weapon.is_armed ) - { - zombies = getaiarray( level.zombie_team ); - - foreach ( zombie in zombies ) - { - if ( !isdefined( zombie ) || !isalive( zombie ) ) - continue; - - if ( isdefined( zombie.ignore_spring_pad ) && zombie.ignore_spring_pad ) - continue; - - if ( zombie istouching( trigger ) ) - weapon springpad_add_fling_ent( zombie ); - } - - players = get_players(); - - foreach ( player in players ) - { - if ( is_player_valid( player ) && player istouching( trigger ) ) - { - weapon springpad_add_fling_ent( player ); - weapon.zombies_only = 0; - } - } - - if ( !weapon.zombies_only ) - weapon notify( "hi_priority_target" ); - } - - wait 0.05; - } -} - -springpad_fling_attacker( ent ) -{ - springpad_add_fling_ent( ent ); - - if ( isdefined( level.springpad_attack_delay ) ) - wait( level.springpad_attack_delay ); -} - -springpad_add_fling_ent( ent ) -{ - self.fling_targets = add_to_array( self.fling_targets, ent, 0 ); -} - -springpad_expired( weapon ) -{ - weapon maps\mp\zombies\_zm_equipment::dropped_equipment_destroy( 1 ); - self maps\mp\zombies\_zm_equipment::equipment_release( "equip_springpad_zm" ); - self.springpad_kills = 0; -} - -player_fling( origin, angles, velocity, weapon ) -{ - torigin = ( self.origin[0], self.origin[1], origin[2] ); - aorigin = ( origin + torigin ) * 0.5; - trace = physicstrace( origin, torigin, vectorscale( ( -1, -1, 0 ), 15.0 ), ( 15, 15, 30 ), self ); - - if ( !isdefined( trace ) || !isdefined( trace["fraction"] ) || trace["fraction"] < 1.0 ) - { - if ( !isdefined( weapon.springpad_kills ) ) - weapon.springpad_kills = 0; - - weapon.springpad_kills += 5; - - if ( weapon.springpad_kills >= 28 ) - weapon.owner thread springpad_expired( weapon ); - - return; - } - - self setorigin( aorigin ); - wait_network_frame(); - self setvelocity( velocity ); -} - -springpadthinkcleanup( trigger ) -{ - self waittill( "death" ); - - if ( isdefined( trigger ) ) - trigger delete(); -} - -debugspringpad( radius ) -{ -/# - color_armed = ( 0, 1, 0 ); - color_unarmed = vectorscale( ( 1, 1, 0 ), 0.65 ); - - while ( isdefined( self ) ) - { - if ( getdvarint( _hash_EB512CB7 ) ) - { - if ( isdefined( self.trigger ) ) - { - color = color_unarmed; - - if ( isdefined( self.is_armed ) && self.is_armed ) - color = color_armed; - - vec = self.trigger.extent; - box( self.trigger.origin, vec * -1, vec, self.trigger.angles[1], color, 1, 0, 1 ); - } - - color = ( 0, 1, 0 ); - text = ""; - - if ( isdefined( self.springpad_kills ) ) - text = "" + self.springpad_kills + ""; - else if ( isdefined( self.owner.springpad_kills ) ) - text = "[" + self.owner.springpad_kills + "]"; - - print3d( self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), text, color, 1, 0.5, 1 ); - } - - wait 0.05; - } -#/ -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_melee_weapon.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_melee_weapon.gsc deleted file mode 100644 index adfca7a..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_melee_weapon.gsc +++ /dev/null @@ -1,580 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\zombies\_zm_utility; -#include maps\mp\zombies\_zm_weapons; -#include maps\mp\zombies\_zm_laststand; -#include maps\mp\zombies\_zm_pers_upgrades_functions; -#include maps\mp\zombies\_zm_score; -#include maps\mp\zombies\_zm_audio; - -init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) -{ - precacheitem( weapon_name ); - precacheitem( flourish_weapon_name ); - add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); - melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" ); - - for ( i = 0; i < melee_weapon_triggers.size; i++ ) - { - knife_model = getent( melee_weapon_triggers[i].target, "targetname" ); - - if ( isdefined( knife_model ) ) - knife_model hide(); - - melee_weapon_triggers[i] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); - - if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) - { - melee_weapon_triggers[i] sethintstring( hint_string, cost ); - - if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) - { - cursor_hint = "HINT_WEAPON"; - cursor_hint_weapon = weapon_name; - melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); - } - else - melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); - } - else - { - weapon_display = get_weapon_display_name( weapon_name ); - hint_string = &"ZOMBIE_WEAPONCOSTONLY"; - melee_weapon_triggers[i] sethintstring( hint_string, weapon_display, cost ); - - if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) - { - cursor_hint = "HINT_WEAPON"; - cursor_hint_weapon = weapon_name; - melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); - } - else - melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); - } - - melee_weapon_triggers[i] usetriggerrequirelookat(); - } - - melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" ); - - for ( i = 0; i < melee_weapon_structs.size; i++ ) - prepare_stub( melee_weapon_structs[i].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); - - register_melee_weapon_for_level( weapon_name ); - - if ( !isdefined( level.ballistic_weapon_name ) ) - level.ballistic_weapon_name = []; - - level.ballistic_weapon_name[weapon_name] = ballistic_weapon_name; - - if ( !isdefined( level.ballistic_upgraded_weapon_name ) ) - level.ballistic_upgraded_weapon_name = []; - - level.ballistic_upgraded_weapon_name[weapon_name] = ballistic_upgraded_weapon_name; -/# - if ( !isdefined( level.zombie_weapons[weapon_name] ) ) - { - if ( isdefined( level.devgui_add_weapon ) ) - [[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost ); - } -#/ -} - -prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) -{ - if ( isdefined( stub ) ) - { - if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) - { - stub.hint_string = hint_string; - - if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) - { - stub.cursor_hint = "HINT_WEAPON"; - stub.cursor_hint_weapon = weapon_name; - } - else - { - stub.cursor_hint = "HINT_NOICON"; - stub.cursor_hint_weapon = undefined; - } - } - else - { - stub.hint_parm1 = get_weapon_display_name( weapon_name ); - stub.hint_parm2 = cost; - stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; - - if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) - { - stub.cursor_hint = "HINT_WEAPON"; - stub.cursor_hint_weapon = weapon_name; - } - else - { - stub.cursor_hint = "HINT_NOICON"; - stub.cursor_hint_weapon = undefined; - } - } - - stub.cost = cost; - stub.weapon_name = weapon_name; - stub.vo_dialog_id = vo_dialog_id; - stub.flourish_weapon_name = flourish_weapon_name; - stub.ballistic_weapon_name = ballistic_weapon_name; - stub.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; - stub.trigger_func = ::melee_weapon_think; - stub.flourish_fn = flourish_fn; - } -} - -add_stub( stub, weapon_name ) -{ - melee_weapon = undefined; - - for ( i = 0; i < level._melee_weapons.size; i++ ) - { - if ( level._melee_weapons[i].weapon_name == weapon_name ) - { - melee_weapon = level._melee_weapons[i]; - break; - } - } - - if ( isdefined( stub ) && isdefined( melee_weapon ) ) - prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn ); -} - -give_melee_weapon_by_name( weapon_name ) -{ - melee_weapon = undefined; - - for ( i = 0; i < level._melee_weapons.size; i++ ) - { - if ( level._melee_weapons[i].weapon_name == weapon_name ) - { - melee_weapon = level._melee_weapons[i]; - break; - } - } - - if ( isdefined( melee_weapon ) ) - self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined ); -} - -add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) -{ - melee_weapon = spawnstruct(); - melee_weapon.weapon_name = weapon_name; - melee_weapon.flourish_weapon_name = flourish_weapon_name; - melee_weapon.ballistic_weapon_name = ballistic_weapon_name; - melee_weapon.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; - melee_weapon.cost = cost; - melee_weapon.wallbuy_targetname = wallbuy_targetname; - melee_weapon.hint_string = hint_string; - melee_weapon.vo_dialog_id = vo_dialog_id; - melee_weapon.flourish_fn = flourish_fn; - - if ( !isdefined( level._melee_weapons ) ) - level._melee_weapons = []; - - level._melee_weapons[level._melee_weapons.size] = melee_weapon; -} - -player_can_see_weapon_prompt( weapon_name ) -{ - if ( is_true( level._allow_melee_weapon_switching ) ) - return true; - - if ( isdefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) ) - return false; - - return true; -} - -spectator_respawn_all() -{ - for ( i = 0; i < level._melee_weapons.size; i++ ) - self spectator_respawn( level._melee_weapons[i].wallbuy_targetname, level._melee_weapons[i].weapon_name ); -} - -spectator_respawn( wallbuy_targetname, weapon_name ) -{ - melee_triggers = getentarray( wallbuy_targetname, "targetname" ); - players = get_players(); - - for ( i = 0; i < melee_triggers.size; i++ ) - { - melee_triggers[i] setvisibletoall(); - - if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) - { - for ( j = 0; j < players.size; j++ ) - { - if ( !players[j] player_can_see_weapon_prompt( weapon_name ) ) - melee_triggers[i] setinvisibletoplayer( players[j] ); - } - } - } -} - -trigger_hide_all() -{ - for ( i = 0; i < level._melee_weapons.size; i++ ) - self trigger_hide( level._melee_weapons[i].wallbuy_targetname ); -} - -trigger_hide( wallbuy_targetname ) -{ - melee_triggers = getentarray( wallbuy_targetname, "targetname" ); - - for ( i = 0; i < melee_triggers.size; i++ ) - melee_triggers[i] setinvisibletoplayer( self ); -} - -has_any_ballistic_knife() -{ - if ( self hasweapon( "knife_ballistic_zm" ) ) - return true; - - if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) - return true; - - for ( i = 0; i < level._melee_weapons.size; i++ ) - { - if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) ) - return true; - - if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) - return true; - } - - return false; -} - -has_upgraded_ballistic_knife() -{ - if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) - return true; - - for ( i = 0; i < level._melee_weapons.size; i++ ) - { - if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) - return true; - } - - return false; -} - -give_ballistic_knife( weapon_string, upgraded ) -{ - current_melee_weapon = self get_player_melee_weapon(); - - if ( isdefined( current_melee_weapon ) ) - { - if ( upgraded && isdefined( level.ballistic_upgraded_weapon_name ) && isdefined( level.ballistic_upgraded_weapon_name[current_melee_weapon] ) ) - weapon_string = level.ballistic_upgraded_weapon_name[current_melee_weapon]; - - if ( !upgraded && isdefined( level.ballistic_weapon_name ) && isdefined( level.ballistic_weapon_name[current_melee_weapon] ) ) - weapon_string = level.ballistic_weapon_name[current_melee_weapon]; - } - - return weapon_string; -} - -change_melee_weapon( weapon_name, current_weapon ) -{ - current_melee_weapon = self get_player_melee_weapon(); - - if ( isdefined( current_melee_weapon ) && current_melee_weapon != weapon_name ) - { - self takeweapon( current_melee_weapon ); - unacquire_weapon_toggle( current_melee_weapon ); - } - - self set_player_melee_weapon( weapon_name ); - had_ballistic = 0; - had_ballistic_upgraded = 0; - ballistic_was_primary = 0; - primaryweapons = self getweaponslistprimaries(); - - for ( i = 0; i < primaryweapons.size; i++ ) - { - primary_weapon = primaryweapons[i]; - - if ( issubstr( primary_weapon, "knife_ballistic_" ) ) - { - had_ballistic = 1; - - if ( primary_weapon == current_weapon ) - ballistic_was_primary = 1; - - self notify( "zmb_lost_knife" ); - self takeweapon( primary_weapon ); - unacquire_weapon_toggle( primary_weapon ); - - if ( issubstr( primary_weapon, "upgraded" ) ) - had_ballistic_upgraded = 1; - } - } - - if ( had_ballistic ) - { - if ( had_ballistic_upgraded ) - { - new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name]; - - if ( ballistic_was_primary ) - current_weapon = new_ballistic; - - self giveweapon( new_ballistic, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) ); - } - else - { - new_ballistic = level.ballistic_weapon_name[weapon_name]; - - if ( ballistic_was_primary ) - current_weapon = new_ballistic; - - self giveweapon( new_ballistic, 0 ); - } - } - - return current_weapon; -} - -melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) -{ - self.first_time_triggered = 0; - - if ( isdefined( self.stub ) ) - { - self endon( "kill_trigger" ); - - if ( isdefined( self.stub.first_time_triggered ) ) - self.first_time_triggered = self.stub.first_time_triggered; - - weapon_name = self.stub.weapon_name; - cost = self.stub.cost; - flourish_fn = self.stub.flourish_fn; - vo_dialog_id = self.stub.vo_dialog_id; - flourish_weapon_name = self.stub.flourish_weapon_name; - ballistic_weapon_name = self.stub.ballistic_weapon_name; - ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name; - players = getplayers(); - - if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) - { - for ( i = 0; i < players.size; i++ ) - { - if ( !players[i] player_can_see_weapon_prompt( weapon_name ) ) - self setinvisibletoplayer( players[i] ); - } - } - } - - for (;;) - { - self waittill( "trigger", player ); - - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0.5 ); - continue; - } - - if ( player in_revive_trigger() ) - { - wait 0.1; - continue; - } - - if ( player isthrowinggrenade() ) - { - wait 0.1; - continue; - } - - if ( player.is_drinking > 0 ) - { - wait 0.1; - continue; - } - - if ( player hasweapon( weapon_name ) || player has_powerup_weapon() ) - { - wait 0.1; - continue; - } - - if ( player isswitchingweapons() ) - { - wait 0.1; - continue; - } - - current_weapon = player getcurrentweapon(); - - if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) || player has_powerup_weapon() ) - { - wait 0.1; - continue; - } - - if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission ) - { - wait 0.1; - continue; - } - - player_has_weapon = player hasweapon( weapon_name ); - - if ( !player_has_weapon ) - { - cost = self.stub.cost; - - if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) - cost = int( cost / 2 ); - - if ( player.score >= cost ) - { - if ( self.first_time_triggered == 0 ) - { - model = getent( self.target, "targetname" ); - - if ( isdefined( model ) ) - model thread melee_weapon_show( player ); - else if ( isdefined( self.clientfieldname ) ) - level setclientfield( self.clientfieldname, 1 ); - - self.first_time_triggered = 1; - - if ( isdefined( self.stub ) ) - self.stub.first_time_triggered = 1; - } - - player maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 ); - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" ); - player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self ); - } - else - { - play_sound_on_ent( "no_purchase" ); - player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 ); - } - - continue; - } - - if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) - self setinvisibletoplayer( player ); - } -} - -melee_weapon_show( player ) -{ - player_angles = vectortoangles( player.origin - self.origin ); - player_yaw = player_angles[1]; - weapon_yaw = self.angles[1]; - yaw_diff = angleclamp180( player_yaw - weapon_yaw ); - - if ( yaw_diff > 0 ) - yaw = weapon_yaw - 90; - else - yaw = weapon_yaw + 90; - - self.og_origin = self.origin; - self.origin += anglestoforward( ( 0, yaw, 0 ) ) * 8; - wait 0.05; - self show(); - play_sound_at_pos( "weapon_show", self.origin, self ); - time = 1; - self moveto( self.og_origin, time ); -} - -give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger ) -{ - if ( isdefined( flourish_fn ) ) - self thread [[ flourish_fn ]](); - - gun = self do_melee_weapon_flourish_begin( flourish_weapon_name ); - self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id ); - self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); - self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); - - if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) - return; - - if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) - { - if ( isdefined( trigger ) ) - trigger setinvisibletoplayer( self ); - - self trigger_hide_all(); - } -} - -do_melee_weapon_flourish_begin( flourish_weapon_name ) -{ - self increment_is_drinking(); - self disable_player_move_states( 1 ); - gun = self getcurrentweapon(); - weapon = flourish_weapon_name; - self giveweapon( weapon ); - self switchtoweapon( weapon ); - return gun; -} - -do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) -{ -/# - assert( !is_zombie_perk_bottle( gun ) ); -#/ -/# - assert( gun != level.revive_tool ); -#/ - self enable_player_move_states(); - weapon = flourish_weapon_name; - - if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) - { - self takeweapon( weapon ); - self.lastactiveweapon = "none"; - return; - } - - self takeweapon( weapon ); - self giveweapon( weapon_name ); - gun = change_melee_weapon( weapon_name, gun ); - - if ( self hasweapon( "knife_zm" ) ) - self takeweapon( "knife_zm" ); - - if ( self is_multiple_drinking() ) - { - self decrement_is_drinking(); - return; - } - else if ( gun == "knife_zm" ) - { - self switchtoweapon( weapon_name ); - self decrement_is_drinking(); - return; - } - else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) - self switchtoweapon( gun ); - else - { - primaryweapons = self getweaponslistprimaries(); - - if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) - self switchtoweapon( primaryweapons[0] ); - } - - self waittill( "weapon_change_complete" ); - - if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) ) - self decrement_is_drinking(); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weapon_locker.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weapon_locker.gsc deleted file mode 100644 index e3cc38b..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weapon_locker.gsc +++ /dev/null @@ -1,327 +0,0 @@ -// T6 GSC SOURCE -// Decompiled by https://github.com/xensik/gsc-tool -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\zombies\_zm_utility; -#include maps\mp\zombies\_zm_magicbox; -#include maps\mp\zombies\_zm_weapons; -#include maps\mp\zombies\_zm_stats; -#include maps\mp\zombies\_zm_unitrigger; -#include maps\mp\zombies\_zm_audio; - -main() -{ - if ( !isdefined( level.weapon_locker_map ) ) - level.weapon_locker_map = level.script; - - level.weapon_locker_online = sessionmodeisonlinegame(); - weapon_lockers = getstructarray( "weapons_locker", "targetname" ); - array_thread( weapon_lockers, ::triggerweaponslockerwatch ); -} - -wl_has_stored_weapondata() -{ - if ( level.weapon_locker_online ) - return self has_stored_weapondata( level.weapon_locker_map ); - else - return isdefined( self.stored_weapon_data ); -} - -wl_get_stored_weapondata() -{ - if ( level.weapon_locker_online ) - return self get_stored_weapondata( level.weapon_locker_map ); - else - return self.stored_weapon_data; -} - -wl_clear_stored_weapondata() -{ - if ( level.weapon_locker_online ) - self clear_stored_weapondata( level.weapon_locker_map ); - else - self.stored_weapon_data = undefined; -} - -wl_set_stored_weapondata( weapondata ) -{ - if ( level.weapon_locker_online ) - self set_stored_weapondata( weapondata, level.weapon_locker_map ); - else - self.stored_weapon_data = weapondata; -} - -triggerweaponslockerwatch() -{ - unitrigger_stub = spawnstruct(); - unitrigger_stub.origin = self.origin; - - if ( isdefined( self.script_angles ) ) - unitrigger_stub.angles = self.script_angles; - else - unitrigger_stub.angles = self.angles; - - unitrigger_stub.script_angles = unitrigger_stub.angles; - - if ( isdefined( self.script_length ) ) - unitrigger_stub.script_length = self.script_length; - else - unitrigger_stub.script_length = 16; - - if ( isdefined( self.script_width ) ) - unitrigger_stub.script_width = self.script_width; - else - unitrigger_stub.script_width = 32; - - if ( isdefined( self.script_height ) ) - unitrigger_stub.script_height = self.script_height; - else - unitrigger_stub.script_height = 64; - - unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * unitrigger_stub.script_length / 2; - unitrigger_stub.targetname = "weapon_locker"; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.clientfieldname = "weapon_locker"; - maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - unitrigger_stub.prompt_and_visibility_func = ::triggerweaponslockerthinkupdateprompt; - maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::triggerweaponslockerthink ); -} - -triggerweaponslockerisvalidweapon( weaponname ) -{ - weaponname = get_base_weapon_name( weaponname, 1 ); - - if ( !is_weapon_included( weaponname ) ) - return false; - - if ( is_offhand_weapon( weaponname ) || is_limited_weapon( weaponname ) ) - return false; - - return true; -} - -triggerweaponslockerisvalidweaponpromptupdate( player, weaponname ) -{ - retrievingweapon = player wl_has_stored_weapondata(); - - if ( !retrievingweapon ) - { - weaponname = player get_nonalternate_weapon( weaponname ); - - if ( !triggerweaponslockerisvalidweapon( weaponname ) ) - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); - else - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_STORE" ); - } - else - { - weapondata = player wl_get_stored_weapondata(); - - if ( isdefined( level.remap_weapon_locker_weapons ) ) - weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons ); - - weapontogive = weapondata["name"]; - primaries = player getweaponslistprimaries(); - maxweapons = get_player_weapon_limit( player ); - weaponname = player get_nonalternate_weapon( weaponname ); - - if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == weaponname ) - { - if ( !triggerweaponslockerisvalidweapon( weaponname ) ) - { - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); - return; - } - } - - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" ); - } -} - -triggerweaponslockerthinkupdateprompt( player ) -{ - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - return 1; -} - -triggerweaponslockerthink() -{ - self.parent_player thread triggerweaponslockerweaponchangethink( self ); - - while ( true ) - { - self waittill( "trigger", player ); - - retrievingweapon = player wl_has_stored_weapondata(); - - if ( !retrievingweapon ) - { - curweapon = player getcurrentweapon(); - curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon ); - - if ( !triggerweaponslockerisvalidweapon( curweapon ) ) - continue; - - weapondata = player maps\mp\zombies\_zm_weapons::get_player_weapondata( player ); - player wl_set_stored_weapondata( weapondata ); -/# - assert( curweapon == weapondata["name"], "weapon data does not match" ); -#/ - player takeweapon( curweapon ); - primaries = player getweaponslistprimaries(); - - if ( isdefined( primaries[0] ) ) - player switchtoweapon( primaries[0] ); - else - player maps\mp\zombies\_zm_weapons::give_fallback_weapon(); - - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - player playsoundtoplayer( "evt_fridge_locker_close", player ); - player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "weapon_storage" ); - } - else - { - curweapon = player getcurrentweapon(); - primaries = player getweaponslistprimaries(); - weapondata = player wl_get_stored_weapondata(); - - if ( isdefined( level.remap_weapon_locker_weapons ) ) - weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons ); - - weapontogive = weapondata["name"]; - - if ( !triggerweaponslockerisvalidweapon( weapontogive ) ) - { - player playlocalsound( level.zmb_laugh_alias ); - player wl_clear_stored_weapondata(); - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - continue; - } - - curweap_base = maps\mp\zombies\_zm_weapons::get_base_weapon_name( curweapon, 1 ); - weap_base = maps\mp\zombies\_zm_weapons::get_base_weapon_name( weapontogive, 1 ); - - if ( player has_weapon_or_upgrade( weap_base ) && weap_base != curweap_base ) - { - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); - wait 3; - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - continue; - } - - maxweapons = get_player_weapon_limit( player ); - - if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == curweapon ) - { - curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon ); - - if ( !triggerweaponslockerisvalidweapon( curweapon ) ) - { - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); - wait 3; - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - continue; - } - - curweapondata = player maps\mp\zombies\_zm_weapons::get_player_weapondata( player ); - player takeweapon( curweapondata["name"] ); - player maps\mp\zombies\_zm_weapons::weapondata_give( weapondata ); - player wl_clear_stored_weapondata(); - player wl_set_stored_weapondata( curweapondata ); - player switchtoweapon( weapondata["name"] ); - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - } - else - { - player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "wall_withdrawl" ); - player wl_clear_stored_weapondata(); - player maps\mp\zombies\_zm_weapons::weapondata_give( weapondata ); - player switchtoweapon( weapondata["name"] ); - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - } - - level notify( "weapon_locker_grab" ); - player playsoundtoplayer( "evt_fridge_locker_open", player ); - } - - wait 0.5; - } -} - -triggerweaponslockerweaponchangethink( trigger ) -{ - self endon( "disconnect" ); - self endon( "death" ); - trigger endon( "kill_trigger" ); - - while ( true ) - { - self waittill( "weapon_change", newweapon ); - - trigger triggerweaponslockerisvalidweaponpromptupdate( self, newweapon ); - } -} - -add_weapon_locker_mapping( fromweapon, toweapon ) -{ - if ( !isdefined( level.remap_weapon_locker_weapons ) ) - level.remap_weapon_locker_weapons = []; - - level.remap_weapon_locker_weapons[fromweapon] = toweapon; -} - -remap_weapon( weapondata, maptable ) -{ - name = get_base_name( weapondata["name"] ); - att = get_attachment_name( weapondata["name"] ); - - if ( isdefined( maptable[name] ) ) - { - weapondata["name"] = maptable[name]; - name = weapondata["name"]; - - if ( is_weapon_upgraded( name ) ) - { - if ( isdefined( att ) && weapon_supports_attachments( name ) ) - { - base = get_base_weapon_name( name, 1 ); - - if ( !weapon_supports_this_attachment( base, att ) ) - att = random_attachment( base ); - - weapondata["name"] = weapondata["name"] + "+" + att; - } - else if ( weapon_supports_default_attachment( name ) ) - { - att = default_attachment( name ); - weapondata["name"] = weapondata["name"] + "+" + att; - } - } - } - else - return weapondata; - - name = weapondata["name"]; - dw_name = weapondualwieldweaponname( name ); - alt_name = weaponaltweaponname( name ); - - if ( name != "none" ) - { - weapondata["clip"] = int( min( weapondata["clip"], weaponclipsize( name ) ) ); - weapondata["stock"] = int( min( weapondata["stock"], weaponmaxammo( name ) ) ); - } - - if ( dw_name != "none" ) - weapondata["lh_clip"] = int( min( weapondata["lh_clip"], weaponclipsize( dw_name ) ) ); - - if ( alt_name != "none" ) - { - weapondata["alt_clip"] = int( min( weapondata["alt_clip"], weaponclipsize( alt_name ) ) ); - weapondata["alt_stock"] = int( min( weapondata["alt_stock"], weaponmaxammo( alt_name ) ) ); - } - - weapondata["dw_name"] = dw_name; - weapondata["alt_name"] = alt_name; - return weapondata; -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/readme.md b/Zombie Maps/Die Rise/zm_highrise_patch/readme.md deleted file mode 100644 index 6d26cf6..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/readme.md +++ /dev/null @@ -1,42 +0,0 @@ -### The following gscs compile and run successfully with no known errors: -``` -zm_highrise_patch/maps/mp/gametypes_zm/zstandard.gsc - -``` -### The following scripts compile and run successfully with minor errors: - -### The following scripts compile and run successfully with major errors: -``` -zm_highrise_patch/maps/mp/zombies/_zm_ai_leapers.gsc - -``` -### The following scripts compile and run serverside but clients cannot join due to exe_client_field_mismatch - -### The following scripts compile but cause a minidump or other severe error: - -### The following scripts have been checked, but they have not been tested yet -``` -zm_highrise_patch/maps/mp/zm_highrise.gsc -zm_highrise_patch/maps/mp/zm_highrise_ffotd.gsc -zm_highrise_patch/maps/mp/zombies/_zm_weap_slipgun.gsc -``` -### The following scripts are not checked yet, uploaded to setup a baseline: -``` -zm_highrise_patch/maps/mp/_sticky_grenade.gsc -zm_highrise_patch/maps/mp/zm_highrise_achievement.gsc -zm_highrise_patch/maps/mp/zm_highrise_amb.gsc -zm_highrise_patch/maps/mp/zm_highrise_buildables.gsc -zm_highrise_patch/maps/mp/zm_highrise_classic.gsc -zm_highrise_patch/maps/mp/zm_highrise_distance_tracking.gsc -zm_highrise_patch/maps/mp/zm_highrise_elevators.gsc -zm_highrise_patch/maps/mp/zm_highrise_fx.gsc -zm_highrise_patch/maps/mp/zm_highrise_gamemodes.gsc -zm_highrise_patch/maps/mp/zm_highrise_sq.gsc -zm_highrise_patch/maps/mp/zm_highrise_sq_atd.gsc -zm_highrise_patch/maps/mp/zm_highrise_sq_pts.gsc -zm_highrise_patch/maps/mp/zm_highrise_sq_slb.gsc -zm_highrise_patch/maps/mp/zm_highrise_sq_ssp.gsc -zm_highrise_patch/maps/mp/zm_highrise_utility.gsc -``` -### notes: - diff --git a/Zombie Maps/Nuketown/zm_nuked/aitype/zm_nuked_basic_01.gsc b/Zombie Maps/Nuketown/zm_nuked/aitype/zm_nuked_basic_01.gsc deleted file mode 100644 index 3603fdc..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/aitype/zm_nuked_basic_01.gsc +++ /dev/null @@ -1,333 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_nuked_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_jump_down_40; - dummy_anim_ref = %ai_zombie_crawl_jump_down_40; - dummy_anim_ref = %ai_zombie_jump_down_fast_40; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_up_72; - dummy_anim_ref = %ai_zombie_crawl_jump_up_72; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_jump_up_2_climb; - dummy_anim_ref = %ai_zombie_crawl_jump_up_2_climb; - dummy_anim_ref = %ai_zombie_traverse_garage_roll; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_nuked_basic.asd"; - self.animtree = "zm_nuked_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 2 ); - switch( randchar ) - { - case 0: - character/c_zom_dlc0_zombie_hazmat_1::main(); - break; - case 1: - character/c_zom_dlc0_zombie_hazmat_2::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_nuked_basic" ); - character/c_zom_dlc0_zombie_hazmat_1::precache(); - character/c_zom_dlc0_zombie_hazmat_2::precache(); -} diff --git a/Zombie Maps/Nuketown/zm_nuked/aitype/zm_nuked_basic_01_beyes.gsc b/Zombie Maps/Nuketown/zm_nuked/aitype/zm_nuked_basic_01_beyes.gsc deleted file mode 100644 index c7d31ca..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/aitype/zm_nuked_basic_01_beyes.gsc +++ /dev/null @@ -1,333 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_nuked_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_jump_down_40; - dummy_anim_ref = %ai_zombie_crawl_jump_down_40; - dummy_anim_ref = %ai_zombie_jump_down_fast_40; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_up_72; - dummy_anim_ref = %ai_zombie_crawl_jump_up_72; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_jump_up_2_climb; - dummy_anim_ref = %ai_zombie_crawl_jump_up_2_climb; - dummy_anim_ref = %ai_zombie_traverse_garage_roll; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_nuked_basic.asd"; - self.animtree = "zm_nuked_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 2 ); - switch( randchar ) - { - case 0: - character/c_zom_dlc0_zombie_hazmat_1_beyes::main(); - break; - case 1: - character/c_zom_dlc0_zombie_hazmat_2_beyes::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_nuked_basic" ); - character/c_zom_dlc0_zombie_hazmat_1_beyes::precache(); - character/c_zom_dlc0_zombie_hazmat_2_beyes::precache(); -} diff --git a/Zombie Maps/Nuketown/zm_nuked/aitype/zm_nuked_basic_02.gsc b/Zombie Maps/Nuketown/zm_nuked/aitype/zm_nuked_basic_02.gsc deleted file mode 100644 index d282159..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/aitype/zm_nuked_basic_02.gsc +++ /dev/null @@ -1,333 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_nuked_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_jump_down_40; - dummy_anim_ref = %ai_zombie_crawl_jump_down_40; - dummy_anim_ref = %ai_zombie_jump_down_fast_40; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_up_72; - dummy_anim_ref = %ai_zombie_crawl_jump_up_72; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_jump_up_2_climb; - dummy_anim_ref = %ai_zombie_crawl_jump_up_2_climb; - dummy_anim_ref = %ai_zombie_traverse_garage_roll; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_nuked_basic.asd"; - self.animtree = "zm_nuked_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 2 ); - switch( randchar ) - { - case 0: - character/c_zom_dlc0_zombie_soldier_1::main(); - break; - case 1: - character/c_zom_dlc0_zombie_soldier_civ_1::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_nuked_basic" ); - character/c_zom_dlc0_zombie_soldier_1::precache(); - character/c_zom_dlc0_zombie_soldier_civ_1::precache(); -} diff --git a/Zombie Maps/Nuketown/zm_nuked/aitype/zm_nuked_basic_02_beyes.gsc b/Zombie Maps/Nuketown/zm_nuked/aitype/zm_nuked_basic_02_beyes.gsc deleted file mode 100644 index 1b9c604..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/aitype/zm_nuked_basic_02_beyes.gsc +++ /dev/null @@ -1,333 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_nuked_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_look_v1; - dummy_anim_ref = %ai_zombie_inert_look_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_walk_v11; - dummy_anim_ref = %ai_zombie_inert_2_walk_v12; - dummy_anim_ref = %ai_zombie_inert_2_walk_v13; - dummy_anim_ref = %ai_zombie_inert_2_walk_v14; - dummy_anim_ref = %ai_zombie_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_walk_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_run_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_sprint_v2; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_jump_down_40; - dummy_anim_ref = %ai_zombie_crawl_jump_down_40; - dummy_anim_ref = %ai_zombie_jump_down_fast_40; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_176; - dummy_anim_ref = %ai_zombie_crawl_jump_down_176; - dummy_anim_ref = %ai_zombie_jump_up_72; - dummy_anim_ref = %ai_zombie_crawl_jump_up_72; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_154; - dummy_anim_ref = %ai_zombie_crawl_jump_up_154; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_jump_up_2_climb; - dummy_anim_ref = %ai_zombie_crawl_jump_up_2_climb; - dummy_anim_ref = %ai_zombie_traverse_garage_roll; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_nuked_basic.asd"; - self.animtree = "zm_nuked_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 2 ); - switch( randchar ) - { - case 0: - character/c_zom_dlc0_zombie_soldier_1_beyes::main(); - break; - case 1: - character/c_zom_dlc0_zombie_soldier_civ_1_beyes::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_nuked_basic" ); - character/c_zom_dlc0_zombie_soldier_1_beyes::precache(); - character/c_zom_dlc0_zombie_soldier_civ_1_beyes::precache(); -} diff --git a/Zombie Maps/Nuketown/zm_nuked/aitype/zm_nuked_dog.gsc b/Zombie Maps/Nuketown/zm_nuked/aitype/zm_nuked_dog.gsc deleted file mode 100644 index 7111e31..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/aitype/zm_nuked_dog.gsc +++ /dev/null @@ -1,91 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_nuked_dog" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %zombie_dog_idle; - dummy_anim_ref = %zombie_dog_attackidle_growl; - dummy_anim_ref = %zombie_dog_attackidle; - dummy_anim_ref = %zombie_dog_attackidle_bark; - dummy_anim_ref = %zombie_dog_run_stop; - dummy_anim_ref = %zombie_dog_run; - dummy_anim_ref = %zombie_dog_trot; - dummy_anim_ref = %zombie_dog_run_start; - dummy_anim_ref = %zombie_dog_turn_90_left; - dummy_anim_ref = %zombie_dog_turn_90_right; - dummy_anim_ref = %zombie_dog_turn_180_left; - dummy_anim_ref = %zombie_dog_turn_180_right; - dummy_anim_ref = %zombie_dog_run_turn_90_left; - dummy_anim_ref = %zombie_dog_run_turn_90_right; - dummy_anim_ref = %zombie_dog_run_turn_180_left; - dummy_anim_ref = %zombie_dog_run_turn_180_right; - dummy_anim_ref = %zombie_dog_death_front; - dummy_anim_ref = %zombie_dog_death_hit_back; - dummy_anim_ref = %zombie_dog_death_hit_left; - dummy_anim_ref = %zombie_dog_death_hit_right; - dummy_anim_ref = %zombie_dog_run_attack; - dummy_anim_ref = %zombie_dog_run_attack_low; - dummy_anim_ref = %zombie_dog_run_jump_window_40; - dummy_anim_ref = %zombie_dog_traverse_down_40; - dummy_anim_ref = %zombie_dog_traverse_down_96; - dummy_anim_ref = %zombie_dog_traverse_down_126; - dummy_anim_ref = %zombie_dog_traverse_down_190; - dummy_anim_ref = %zombie_dog_traverse_up_40; - dummy_anim_ref = %zombie_dog_traverse_up_80; - dummy_anim_ref = %ai_zombie_dog_jump_across_120; -} - -main() -{ - self.accuracy = 0,2; - self.animstatedef = "zm_nuked_dog.asd"; - self.animtree = "zm_nuked_dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie_dog"; - self.weapon = ""; - self setengagementmindist( 256, 0 ); - self setengagementmaxdist( 768, 1024 ); - randchar = codescripts/character::get_random_character( 2 ); - switch( randchar ) - { - case 0: - character/character_sp_zombie_dog::main(); - break; - case 1: - character/character_sp_zombie_dog::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_nuked_dog" ); - character/character_sp_zombie_dog::precache(); - character/character_sp_zombie_dog::precache(); -} diff --git a/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_hazmat_1.gsc b/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_hazmat_1.gsc deleted file mode 100644 index 60b924a..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_hazmat_1.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_dlc0_zom_haz_body1" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_dlc0_zom_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_dlc0_zom_haz_body1_upclean"; - self.torsodmg2 = "c_zom_dlc0_zom_haz_body1_rarmoff"; - self.torsodmg3 = "c_zom_dlc0_zom_haz_body1_larmoff"; - self.torsodmg5 = "c_zom_dlc0_zom_haz_body1_behead"; - self.legdmg1 = "c_zom_dlc0_zom_haz_body1_lowclean"; - self.legdmg2 = "c_zom_dlc0_zom_haz_body1_rlegoff"; - self.legdmg3 = "c_zom_dlc0_zom_haz_body1_llegoff"; - self.legdmg4 = "c_zom_dlc0_zom_haz_body1_legsoff"; - self.gibspawn1 = "c_zom_dlc0_zom_haz_body1_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_dlc0_zom_haz_body1_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_dlc0_zom_haz_body1_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_dlc0_zom_haz_body1_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_dlc0_zom_haz_body1" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_dlc0_zom_head_als::main() ); - precachemodel( "c_zom_dlc0_zom_haz_body1_upclean" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_rarmoff" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_larmoff" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_behead" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_lowclean" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_rlegoff" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_llegoff" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_legsoff" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_g_rarmspawn" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_g_larmspawn" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_g_rlegspawn" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_g_llegspawn" ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_hazmat_1_beyes.gsc b/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_hazmat_1_beyes.gsc deleted file mode 100644 index 10f5f9c..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_hazmat_1_beyes.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_dlc0_zom_haz_body1" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_dlc0_zom_head_blueeyes_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_dlc0_zom_haz_body1_upclean"; - self.torsodmg2 = "c_zom_dlc0_zom_haz_body1_rarmoff"; - self.torsodmg3 = "c_zom_dlc0_zom_haz_body1_larmoff"; - self.torsodmg5 = "c_zom_dlc0_zom_haz_body1_behead"; - self.legdmg1 = "c_zom_dlc0_zom_haz_body1_lowclean"; - self.legdmg2 = "c_zom_dlc0_zom_haz_body1_rlegoff"; - self.legdmg3 = "c_zom_dlc0_zom_haz_body1_llegoff"; - self.legdmg4 = "c_zom_dlc0_zom_haz_body1_legsoff"; - self.gibspawn1 = "c_zom_dlc0_zom_haz_body1_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_dlc0_zom_haz_body1_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_dlc0_zom_haz_body1_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_dlc0_zom_haz_body1_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_dlc0_zom_haz_body1" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_dlc0_zom_head_blueeyes_als::main() ); - precachemodel( "c_zom_dlc0_zom_haz_body1_upclean" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_rarmoff" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_larmoff" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_behead" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_lowclean" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_rlegoff" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_llegoff" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_legsoff" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_g_rarmspawn" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_g_larmspawn" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_g_rlegspawn" ); - precachemodel( "c_zom_dlc0_zom_haz_body1_g_llegspawn" ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_hazmat_2.gsc b/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_hazmat_2.gsc deleted file mode 100644 index 286614b..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_hazmat_2.gsc +++ /dev/null @@ -1,43 +0,0 @@ - -main() -{ - self setmodel( "c_zom_dlc0_zom_haz_body2" ); - self.headmodel = "c_zom_dlc0_zom_haz_head_mask"; - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_dlc0_zom_haz_body2_upclean"; - self.torsodmg2 = "c_zom_dlc0_zom_haz_body2_rarmoff"; - self.torsodmg3 = "c_zom_dlc0_zom_haz_body2_larmoff"; - self.torsodmg5 = "c_zom_dlc0_zom_haz_body2_behead"; - self.legdmg1 = "c_zom_dlc0_zom_haz_body2_lowclean"; - self.legdmg2 = "c_zom_dlc0_zom_haz_body2_rlegoff"; - self.legdmg3 = "c_zom_dlc0_zom_haz_body2_llegoff"; - self.legdmg4 = "c_zom_dlc0_zom_haz_body2_legsoff"; - self.gibspawn1 = "c_zom_dlc0_zom_haz_body2_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_dlc0_zom_haz_body2_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_dlc0_zom_haz_body2_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_dlc0_zom_haz_body2_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_dlc0_zom_haz_body2" ); - precachemodel( "c_zom_dlc0_zom_haz_head_mask" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_upclean" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_rarmoff" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_larmoff" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_behead" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_lowclean" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_rlegoff" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_llegoff" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_legsoff" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_g_rarmspawn" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_g_larmspawn" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_g_rlegspawn" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_g_llegspawn" ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_hazmat_2_beyes.gsc b/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_hazmat_2_beyes.gsc deleted file mode 100644 index 623a628..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_hazmat_2_beyes.gsc +++ /dev/null @@ -1,43 +0,0 @@ - -main() -{ - self setmodel( "c_zom_dlc0_zom_haz_body2" ); - self.headmodel = "c_zom_dlc0_zom_haz_head_mask_blueeyes"; - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_dlc0_zom_haz_body2_upclean"; - self.torsodmg2 = "c_zom_dlc0_zom_haz_body2_rarmoff"; - self.torsodmg3 = "c_zom_dlc0_zom_haz_body2_larmoff"; - self.torsodmg5 = "c_zom_dlc0_zom_haz_body2_behead"; - self.legdmg1 = "c_zom_dlc0_zom_haz_body2_lowclean"; - self.legdmg2 = "c_zom_dlc0_zom_haz_body2_rlegoff"; - self.legdmg3 = "c_zom_dlc0_zom_haz_body2_llegoff"; - self.legdmg4 = "c_zom_dlc0_zom_haz_body2_legsoff"; - self.gibspawn1 = "c_zom_dlc0_zom_haz_body2_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_dlc0_zom_haz_body2_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_dlc0_zom_haz_body2_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_dlc0_zom_haz_body2_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_dlc0_zom_haz_body2" ); - precachemodel( "c_zom_dlc0_zom_haz_head_mask_blueeyes" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_upclean" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_rarmoff" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_larmoff" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_behead" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_lowclean" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_rlegoff" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_llegoff" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_legsoff" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_g_rarmspawn" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_g_larmspawn" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_g_rlegspawn" ); - precachemodel( "c_zom_dlc0_zom_haz_body2_g_llegspawn" ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_soldier_1.gsc b/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_soldier_1.gsc deleted file mode 100644 index 5864ec2..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_soldier_1.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_dlc0_zom_sol_body1" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_dlc0_zom_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_dlc0_zom_sol_body1_upclean"; - self.torsodmg2 = "c_zom_dlc0_zom_sol_body1_rarmoff"; - self.torsodmg3 = "c_zom_dlc0_zom_sol_body1_larmoff"; - self.torsodmg5 = "c_zom_dlc0_zom_sol_body1_behead"; - self.legdmg1 = "c_zom_dlc0_zom_sol_body1_lowclean"; - self.legdmg2 = "c_zom_dlc0_zom_sol_body1_rlegoff"; - self.legdmg3 = "c_zom_dlc0_zom_sol_body1_llegoff"; - self.legdmg4 = "c_zom_dlc0_zom_sol_body1_legsoff"; - self.gibspawn1 = "c_zom_dlc0_zom_sol_body1_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_dlc0_zom_sol_body1_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_dlc0_zom_sol_body1_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_dlc0_zom_sol_body1_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_dlc0_zom_sol_body1" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_dlc0_zom_head_als::main() ); - precachemodel( "c_zom_dlc0_zom_sol_body1_upclean" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_rarmoff" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_larmoff" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_behead" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_lowclean" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_rlegoff" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_llegoff" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_legsoff" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_g_rarmspawn" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_g_larmspawn" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_g_rlegspawn" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_g_llegspawn" ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_soldier_1_beyes.gsc b/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_soldier_1_beyes.gsc deleted file mode 100644 index a19817a..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_soldier_1_beyes.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_dlc0_zom_sol_body1" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_dlc0_zom_head_blueeyes_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_dlc0_zom_sol_body1_upclean"; - self.torsodmg2 = "c_zom_dlc0_zom_sol_body1_rarmoff"; - self.torsodmg3 = "c_zom_dlc0_zom_sol_body1_larmoff"; - self.torsodmg5 = "c_zom_dlc0_zom_sol_body1_behead"; - self.legdmg1 = "c_zom_dlc0_zom_sol_body1_lowclean"; - self.legdmg2 = "c_zom_dlc0_zom_sol_body1_rlegoff"; - self.legdmg3 = "c_zom_dlc0_zom_sol_body1_llegoff"; - self.legdmg4 = "c_zom_dlc0_zom_sol_body1_legsoff"; - self.gibspawn1 = "c_zom_dlc0_zom_sol_body1_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_dlc0_zom_sol_body1_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_dlc0_zom_sol_body1_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_dlc0_zom_sol_body1_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_dlc0_zom_sol_body1" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_dlc0_zom_head_blueeyes_als::main() ); - precachemodel( "c_zom_dlc0_zom_sol_body1_upclean" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_rarmoff" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_larmoff" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_behead" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_lowclean" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_rlegoff" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_llegoff" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_legsoff" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_g_rarmspawn" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_g_larmspawn" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_g_rlegspawn" ); - precachemodel( "c_zom_dlc0_zom_sol_body1_g_llegspawn" ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_soldier_civ_1.gsc b/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_soldier_civ_1.gsc deleted file mode 100644 index d4fc15e..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_soldier_civ_1.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_dlc0_zom_solciv_body1" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_dlc0_zom_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_dlc0_zom_solciv_body1_upclean"; - self.torsodmg2 = "c_zom_dlc0_zom_solciv_body1_rarmoff"; - self.torsodmg3 = "c_zom_dlc0_zom_solciv_body1_larmoff"; - self.torsodmg5 = "c_zom_dlc0_zom_solciv_body1_behead"; - self.legdmg1 = "c_zom_dlc0_zom_solciv_body1_lowclean"; - self.legdmg2 = "c_zom_dlc0_zom_solciv_body1_rlegoff"; - self.legdmg3 = "c_zom_dlc0_zom_solciv_body1_llegoff"; - self.legdmg4 = "c_zom_dlc0_zom_solciv_body1_legsoff"; - self.gibspawn1 = "c_zom_dlc0_zom_solciv_body1_g_larmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_dlc0_zom_solciv_body1_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_dlc0_zom_solciv_body1_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_dlc0_zom_solciv_body1_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_dlc0_zom_solciv_body1" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_dlc0_zom_head_als::main() ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_upclean" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_rarmoff" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_larmoff" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_behead" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_lowclean" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_rlegoff" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_llegoff" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_legsoff" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_g_larmspawn" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_g_larmspawn" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_g_rlegspawn" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_g_llegspawn" ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_soldier_civ_1_beyes.gsc b/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_soldier_civ_1_beyes.gsc deleted file mode 100644 index 845c6d6..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/character/c_zom_dlc0_zombie_soldier_civ_1_beyes.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_dlc0_zom_solciv_body1" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_dlc0_zom_head_blueeyes_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_dlc0_zom_solciv_body1_upclean"; - self.torsodmg2 = "c_zom_dlc0_zom_solciv_body1_rarmoff"; - self.torsodmg3 = "c_zom_dlc0_zom_solciv_body1_larmoff"; - self.torsodmg5 = "c_zom_dlc0_zom_solciv_body1_behead"; - self.legdmg1 = "c_zom_dlc0_zom_solciv_body1_lowclean"; - self.legdmg2 = "c_zom_dlc0_zom_solciv_body1_rlegoff"; - self.legdmg3 = "c_zom_dlc0_zom_solciv_body1_llegoff"; - self.legdmg4 = "c_zom_dlc0_zom_solciv_body1_legsoff"; - self.gibspawn1 = "c_zom_dlc0_zom_solciv_body1_g_larmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_dlc0_zom_solciv_body1_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_dlc0_zom_solciv_body1_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_dlc0_zom_solciv_body1_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_dlc0_zom_solciv_body1" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_dlc0_zom_head_blueeyes_als::main() ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_upclean" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_rarmoff" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_larmoff" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_behead" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_lowclean" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_rlegoff" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_llegoff" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_legsoff" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_g_larmspawn" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_g_larmspawn" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_g_rlegspawn" ); - precachemodel( "c_zom_dlc0_zom_solciv_body1_g_llegspawn" ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked/character/character_sp_zombie_dog.gsc b/Zombie Maps/Nuketown/zm_nuked/character/character_sp_zombie_dog.gsc deleted file mode 100644 index 1b84c96..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/character/character_sp_zombie_dog.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "zombie_wolf" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "zombie_wolf" ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked/maps/mp/_sticky_grenade.gsc b/Zombie Maps/Nuketown/zm_nuked/maps/mp/_sticky_grenade.gsc deleted file mode 100644 index eb8885c..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/maps/mp/_sticky_grenade.gsc +++ /dev/null @@ -1,12 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" ); - loadfx( "weapon/crossbow/fx_trail_crossbow_blink_red_os" ); -} - -watch_bolt_detonation( owner ) -{ -} diff --git a/Zombie Maps/Nuketown/zm_nuked/maps/mp/teams/_teamset_cdc.gsc b/Zombie Maps/Nuketown/zm_nuked/maps/mp/teams/_teamset_cdc.gsc deleted file mode 100644 index 62ec842..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/maps/mp/teams/_teamset_cdc.gsc +++ /dev/null @@ -1,51 +0,0 @@ - -register() -{ - game[ "teamset" ] = []; - game[ "teamset" ][ "cdc" ] = ::cdc; -} - -level_init() -{ - game[ "allies" ] = "cdc"; - game[ "axis" ] = "cia"; - setdvar( "g_TeamName_Allies", &"ZMUI_CDC_SHORT" ); - setdvar( "g_TeamName_Axis", &"ZMUI_CIA_SHORT" ); - game[ "strings" ][ "allies_win" ] = &"ZM_CDC_WIN_MATCH"; - game[ "strings" ][ "allies_win_round" ] = &"ZM_CDC_WIN_ROUND"; - game[ "strings" ][ "allies_mission_accomplished" ] = &"ZM_CDC_MISSION_ACCOMPLISHED"; - game[ "strings" ][ "allies_eliminated" ] = &"ZM_CDC_ELIMINATED"; - game[ "strings" ][ "allies_forfeited" ] = &"ZM_CDC_FORFEITED"; - game[ "strings" ][ "allies_name" ] = &"ZM_CDC_NAME"; - game[ "music" ][ "spawn_allies" ] = "SPAWN_OPS"; - game[ "music" ][ "victory_allies" ] = "mus_victory_usa"; - game[ "icons" ][ "allies" ] = "faction_cdc"; - game[ "colors" ][ "allies" ] = ( 0, 0, 0 ); - game[ "voice" ][ "allies" ] = "vox_st6_"; - setdvar( "scr_allies", "marines" ); - game[ "strings" ][ "axis_win" ] = &"ZM_CIA_WIN_MATCH"; - game[ "strings" ][ "axis_win_round" ] = &"ZM_CIA_WIN_ROUND"; - game[ "strings" ][ "axis_mission_accomplished" ] = &"ZM_CIA_MISSION_ACCOMPLISHED"; - game[ "strings" ][ "axis_eliminated" ] = &"ZM_CIA_ELIMINATED"; - game[ "strings" ][ "axis_forfeited" ] = &"ZM_CIA_FORFEITED"; - game[ "strings" ][ "axis_name" ] = &"ZM_CIA_NAME"; - game[ "music" ][ "spawn_axis" ] = "SPAWN_RUS"; - game[ "music" ][ "victory_axis" ] = "mus_victory_soviet"; - game[ "icons" ][ "axis" ] = "faction_cia"; - game[ "colors" ][ "axis" ] = ( 0,65, 0,57, 0,41 ); - game[ "voice" ][ "axis" ] = "vox_pmc_"; -} - -cdc() -{ - allies(); - axis(); -} - -allies() -{ -} - -axis() -{ -} diff --git a/Zombie Maps/Nuketown/zm_nuked/maps/mp/zombies/_zm_melee_weapon.gsc b/Zombie Maps/Nuketown/zm_nuked/maps/mp/zombies/_zm_melee_weapon.gsc deleted file mode 100644 index 49998b4..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/maps/mp/zombies/_zm_melee_weapon.gsc +++ /dev/null @@ -1,527 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn ) -{ - precacheitem( weapon_name ); - precacheitem( flourish_weapon_name ); - add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon ); - melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" ); - i = 0; - while ( i < melee_weapon_triggers.size ) - { - knife_model = getent( melee_weapon_triggers[ i ].target, "targetname" ); - if ( isDefined( knife_model ) ) - { - knife_model hide(); - } - melee_weapon_triggers[ i ] thread melee_weapon_think( weapon_name, cost, has_weapon, give_weapon, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); - melee_weapon_triggers[ i ] sethintstring( hint_string, cost ); - melee_weapon_triggers[ i ] setcursorhint( "HINT_NOICON" ); - melee_weapon_triggers[ i ] usetriggerrequirelookat(); - i++; - } - melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" ); - i = 0; - while ( i < melee_weapon_structs.size ) - { - if ( isDefined( melee_weapon_structs[ i ].trigger_stub ) ) - { - melee_weapon_structs[ i ].trigger_stub.hint_string = hint_string; - melee_weapon_structs[ i ].trigger_stub.cost = cost; - melee_weapon_structs[ i ].trigger_stub.weapon_name = weapon_name; - melee_weapon_structs[ i ].trigger_stub.has_weapon = has_weapon; - melee_weapon_structs[ i ].trigger_stub.give_weapon = give_weapon; - melee_weapon_structs[ i ].trigger_stub.vo_dialog_id = vo_dialog_id; - melee_weapon_structs[ i ].trigger_stub.flourish_weapon_name = flourish_weapon_name; - melee_weapon_structs[ i ].trigger_stub.ballistic_weapon_name = ballistic_weapon_name; - melee_weapon_structs[ i ].trigger_stub.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; - melee_weapon_structs[ i ].trigger_stub.trigger_func = ::melee_weapon_think; - melee_weapon_structs[ i ].trigger_stub.flourish_fn = flourish_fn; - } - i++; - } - register_melee_weapon_for_level( weapon_name ); - if ( !isDefined( level.ballistic_weapon_name ) ) - { - level.ballistic_weapon_name = []; - } - level.ballistic_weapon_name[ weapon_name ] = ballistic_weapon_name; - if ( !isDefined( level.ballistic_upgraded_weapon_name ) ) - { - level.ballistic_upgraded_weapon_name = []; - } - level.ballistic_upgraded_weapon_name[ weapon_name ] = ballistic_upgraded_weapon_name; -} - -add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn ) -{ - melee_weapon = spawnstruct(); - melee_weapon.weapon_name = weapon_name; - melee_weapon.flourish_weapon_name = flourish_weapon_name; - melee_weapon.ballistic_weapon_name = ballistic_weapon_name; - melee_weapon.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; - melee_weapon.cost = cost; - melee_weapon.wallbuy_targetname = wallbuy_targetname; - melee_weapon.hint_string = hint_string; - melee_weapon.vo_dialog_id = vo_dialog_id; - melee_weapon.has_weapon = has_weapon; - melee_weapon.give_weapon = give_weapon; - melee_weapon.take_weapon = take_weapon; - melee_weapon.flourish_fn = flourish_fn; - if ( !isDefined( level._melee_weapons ) ) - { - level._melee_weapons = []; - } - level._melee_weapons[ level._melee_weapons.size ] = melee_weapon; -} - -spectator_respawn_all() -{ - i = 0; - while ( i < level._melee_weapons.size ) - { - self [[ level._melee_weapons[ i ].take_weapon ]](); - i++; - } - i = 0; - while ( i < level._melee_weapons.size ) - { - self spectator_respawn( level._melee_weapons[ i ].wallbuy_targetname, level._melee_weapons[ i ].take_weapon, level._melee_weapons[ i ].has_weapon ); - i++; - } -} - -spectator_respawn( wallbuy_targetname, take_weapon, has_weapon ) -{ - melee_triggers = getentarray( wallbuy_targetname, "targetname" ); - players = get_players(); - i = 0; - while ( i < melee_triggers.size ) - { - melee_triggers[ i ] setvisibletoall(); - while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - j = 0; - while ( j < players.size ) - { - if ( players[ j ] [[ has_weapon ]]() ) - { - melee_triggers[ i ] setinvisibletoplayer( players[ j ] ); - } - j++; - } - } - i++; - } -} - -trigger_hide_all() -{ - i = 0; - while ( i < level._melee_weapons.size ) - { - self trigger_hide( level._melee_weapons[ i ].wallbuy_targetname ); - i++; - } -} - -trigger_hide( wallbuy_targetname ) -{ - melee_triggers = getentarray( wallbuy_targetname, "targetname" ); - i = 0; - while ( i < melee_triggers.size ) - { - melee_triggers[ i ] setinvisibletoplayer( self ); - i++; - } -} - -has_any_ballistic_knife() -{ - if ( self hasweapon( "knife_ballistic_zm" ) ) - { - return 1; - } - if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) - { - return 1; - } - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( self hasweapon( level._melee_weapons[ i ].ballistic_weapon_name ) ) - { - return 1; - } - if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) ) - { - return 1; - } - i++; - } - return 0; -} - -has_upgraded_ballistic_knife() -{ - if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) - { - return 1; - } - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) ) - { - return 1; - } - i++; - } - return 0; -} - -give_ballistic_knife( weapon_string, upgraded ) -{ - current_melee_weapon = self get_player_melee_weapon(); - if ( isDefined( current_melee_weapon ) ) - { - if ( upgraded && isDefined( level.ballistic_upgraded_weapon_name ) && isDefined( level.ballistic_upgraded_weapon_name[ current_melee_weapon ] ) ) - { - weapon_string = level.ballistic_upgraded_weapon_name[ current_melee_weapon ]; - } - if ( !upgraded && isDefined( level.ballistic_weapon_name ) && isDefined( level.ballistic_weapon_name[ current_melee_weapon ] ) ) - { - weapon_string = level.ballistic_weapon_name[ current_melee_weapon ]; - } - } - return weapon_string; -} - -change_melee_weapon( weapon_name, current_weapon ) -{ - current_melee_weapon = self get_player_melee_weapon(); - if ( isDefined( current_melee_weapon ) ) - { - self takeweapon( current_melee_weapon ); - unacquire_weapon_toggle( current_melee_weapon ); - } - self set_player_melee_weapon( weapon_name ); - had_ballistic = 0; - had_ballistic_upgraded = 0; - ballistic_was_primary = 0; - primaryweapons = self getweaponslistprimaries(); - i = 0; - while ( i < primaryweapons.size ) - { - primary_weapon = primaryweapons[ i ]; - if ( issubstr( primary_weapon, "knife_ballistic_" ) ) - { - had_ballistic = 1; - if ( primary_weapon == current_weapon ) - { - ballistic_was_primary = 1; - } - self notify( "zmb_lost_knife" ); - self takeweapon( primary_weapon ); - unacquire_weapon_toggle( primary_weapon ); - if ( issubstr( primary_weapon, "upgraded" ) ) - { - had_ballistic_upgraded = 1; - } - } - i++; - } - if ( had_ballistic ) - { - if ( had_ballistic_upgraded ) - { - new_ballistic = level.ballistic_upgraded_weapon_name[ weapon_name ]; - if ( ballistic_was_primary ) - { - current_weapon = new_ballistic; - } - self giveweapon( new_ballistic, 0, self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) ); - } - else - { - new_ballistic = level.ballistic_weapon_name[ weapon_name ]; - if ( ballistic_was_primary ) - { - current_weapon = new_ballistic; - } - self giveweapon( new_ballistic, 0 ); - } - } - return current_weapon; -} - -melee_weapon_think( weapon_name, cost, has_weapon, give_weapon, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) -{ - self.first_time_triggered = 0; - while ( isDefined( self.stub ) ) - { - self endon( "kill_trigger" ); - if ( isDefined( self.stub.first_time_triggered ) ) - { - self.first_time_triggered = self.stub.first_time_triggered; - } - weapon_name = self.stub.weapon_name; - cost = self.stub.cost; - has_weapon = self.stub.has_weapon; - give_weapon = self.stub.give_weapon; - flourish_fn = self.stub.flourish_fn; - vo_dialog_id = self.stub.vo_dialog_id; - flourish_weapon_name = self.stub.flourish_weapon_name; - ballistic_weapon_name = self.stub.ballistic_weapon_name; - ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name; - players = getplayers(); - while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - i = 0; - while ( i < players.size ) - { - if ( players[ i ] [[ has_weapon ]]() ) - { - self setinvisibletoplayer( players[ i ] ); - } - i++; - } - } - } - for ( ;; ) - { - self waittill( "trigger", player ); - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - continue; - } - else if ( player in_revive_trigger() ) - { - wait 0,1; - continue; - } - else if ( player isthrowinggrenade() ) - { - wait 0,1; - continue; - } - else if ( player.is_drinking > 0 ) - { - wait 0,1; - continue; - } - else if ( player hasweapon( weapon_name ) || player has_powerup_weapon() ) - { - wait 0,1; - continue; - } - else - { - if ( player isswitchingweapons() ) - { - wait 0,1; - break; - } - else current_weapon = player getcurrentweapon(); - if ( !is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) && player has_powerup_weapon() ) - { - wait 0,1; - break; - } - else - { - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( player.intermission ) && player.intermission ) - { - wait 0,1; - break; - } - else - { - player_has_weapon = player [[ has_weapon ]](); - if ( !player_has_weapon ) - { - if ( player.score >= cost ) - { - if ( self.first_time_triggered == 0 ) - { - model = getent( self.target, "targetname" ); - if ( isDefined( model ) ) - { - model thread melee_weapon_show( player ); - } - else - { - if ( isDefined( self.clientfieldname ) ) - { - level setclientfield( self.clientfieldname, 1 ); - } - } - self.first_time_triggered = 1; - if ( isDefined( self.stub ) ) - { - self.stub.first_time_triggered = 1; - } - } - player maps/mp/zombies/_zm_score::minus_to_player_score( cost ); - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" ); - player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, give_weapon, flourish_fn, self ); - } - else - { - play_sound_on_ent( "no_purchase" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 ); - } - break; - } - else - { - if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - self setinvisibletoplayer( player ); - } - } - } - } - } - } -} - -melee_weapon_show( player ) -{ - player_angles = vectorToAngle( player.origin - self.origin ); - player_yaw = player_angles[ 1 ]; - weapon_yaw = self.angles[ 1 ]; - yaw_diff = angleClamp180( player_yaw - weapon_yaw ); - if ( yaw_diff > 0 ) - { - yaw = weapon_yaw - 90; - } - else - { - yaw = weapon_yaw + 90; - } - self.og_origin = self.origin; - self.origin += anglesToForward( ( 0, yaw, 0 ) ) * 8; - wait 0,05; - self show(); - play_sound_at_pos( "weapon_show", self.origin, self ); - time = 1; - self moveto( self.og_origin, time ); -} - -give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, give_weapon, flourish_fn, trigger ) -{ - if ( isDefined( flourish_fn ) ) - { - self thread [[ flourish_fn ]](); - } - gun = self do_melee_weapon_flourish_begin( flourish_weapon_name ); - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id ); - self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); - self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission ) - { - return; - } - self [[ give_weapon ]](); - if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - trigger setinvisibletoplayer( self ); - self trigger_hide_all(); - } -} - -do_melee_weapon_flourish_begin( flourish_weapon_name ) -{ - self increment_is_drinking(); - self disable_player_move_states( 1 ); - gun = self getcurrentweapon(); - weapon = flourish_weapon_name; - self giveweapon( weapon ); - self switchtoweapon( weapon ); - return gun; -} - -do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) -{ -/# - assert( gun != "zombie_perk_bottle_doubletap" ); -#/ -/# - assert( gun != "zombie_perk_bottle_revive" ); -#/ -/# - assert( gun != "zombie_perk_bottle_jugg" ); -#/ -/# - assert( gun != "zombie_perk_bottle_sleight" ); -#/ -/# - assert( gun != "zombie_perk_bottle_marathon" ); -#/ -/# - assert( gun != "zombie_perk_bottle_nuke" ); -#/ -/# - assert( gun != "zombie_perk_bottle_deadshot" ); -#/ -/# - assert( gun != "zombie_perk_bottle_additionalprimaryweapon" ); -#/ -/# - assert( gun != "zombie_perk_bottle_tombstone" ); -#/ -/# - assert( gun != level.revive_tool ); -#/ - self enable_player_move_states(); - weapon = flourish_weapon_name; - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission ) - { - self takeweapon( weapon ); - self.lastactiveweapon = "none"; - return; - } - self takeweapon( weapon ); - self giveweapon( weapon_name ); - gun = change_melee_weapon( weapon_name, gun ); - if ( self hasweapon( "knife_zm" ) ) - { - self takeweapon( "knife_zm" ); - } - if ( self is_multiple_drinking() ) - { - self decrement_is_drinking(); - return; - } - else if ( gun == "knife_zm" ) - { - self switchtoweapon( weapon_name ); - self decrement_is_drinking(); - return; - } - else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) - { - self switchtoweapon( gun ); - } - else - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - } - self waittill( "weapon_change_complete" ); - if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.intermission ) && !self.intermission ) - { - self decrement_is_drinking(); - } -} diff --git a/Zombie Maps/Nuketown/zm_nuked/maps/mp/zombies/_zm_weap_ballistic_knife.gsc b/Zombie Maps/Nuketown/zm_nuked/maps/mp/zombies/_zm_weap_ballistic_knife.gsc deleted file mode 100644 index cd33180..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/maps/mp/zombies/_zm_weap_ballistic_knife.gsc +++ /dev/null @@ -1,278 +0,0 @@ -#include maps/mp/zombies/_zm_stats; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - if ( isDefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 ) - { - precachemodel( "t5_weapon_ballistic_knife_projectile" ); - precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" ); - } -} - -on_spawn( watcher, player ) -{ - player endon( "death" ); - player endon( "disconnect" ); - player endon( "zmb_lost_knife" ); - level endon( "game_ended" ); - self waittill( "stationary", endpos, normal, angles, attacker, prey, bone ); - isfriendly = 0; - if ( isDefined( endpos ) ) - { - retrievable_model = spawn( "script_model", endpos ); - retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); - retrievable_model setowner( player ); - retrievable_model.owner = player; - retrievable_model.angles = angles; - retrievable_model.name = watcher.weapon; - if ( isDefined( prey ) ) - { - if ( isplayer( prey ) && player.team == prey.team ) - { - isfriendly = 1; - } - else - { - if ( isai( prey ) && player.team == prey.team ) - { - isfriendly = 1; - } - } - if ( !isfriendly ) - { - retrievable_model linkto( prey, bone ); - retrievable_model thread force_drop_knives_to_ground_on_death( player, prey ); - } - else - { - if ( isfriendly ) - { - retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) ); - normal = ( 0, 0, 1 ); - } - } - } - watcher.objectarray[ watcher.objectarray.size ] = retrievable_model; - if ( isfriendly ) - { - retrievable_model waittill( "stationary" ); - } - retrievable_model thread drop_knives_to_ground( player ); - if ( isfriendly ) - { - player notify( "ballistic_knife_stationary" ); - } - else - { - player notify( "ballistic_knife_stationary" ); - } - retrievable_model thread wait_to_show_glowing_model( prey ); - } -} - -wait_to_show_glowing_model( prey ) -{ - level endon( "game_ended" ); - self endon( "death" ); - wait 2; - self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); -} - -on_spawn_retrieve_trigger( watcher, player ) -{ - player endon( "death" ); - player endon( "disconnect" ); - player endon( "zmb_lost_knife" ); - level endon( "game_ended" ); - player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey ); - if ( !isDefined( retrievable_model ) ) - { - return; - } - trigger_pos = []; - if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) ) - { - trigger_pos[ 0 ] = prey.origin[ 0 ]; - trigger_pos[ 1 ] = prey.origin[ 1 ]; - trigger_pos[ 2 ] = prey.origin[ 2 ] + 10; - } - else - { - trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( 10 * normal[ 0 ] ); - trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( 10 * normal[ 1 ] ); - trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( 10 * normal[ 2 ] ); - } - pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ) ); - pickup_trigger setcursorhint( "HINT_NOICON" ); - pickup_trigger.owner = player; - retrievable_model.retrievabletrigger = pickup_trigger; - hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP"; - if ( isDefined( hint_string ) ) - { - pickup_trigger sethintstring( hint_string ); - } - else - { - pickup_trigger sethintstring( &"GENERIC_PICKUP" ); - } - pickup_trigger setteamfortrigger( player.team ); - player clientclaimtrigger( pickup_trigger ); - pickup_trigger enablelinkto(); - if ( isDefined( prey ) ) - { - pickup_trigger linkto( prey ); - } - else - { - pickup_trigger linkto( retrievable_model ); - } - if ( isDefined( level.knife_planted ) ) - { - [[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey ); - } - retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound ); - player thread watch_shutdown( pickup_trigger, retrievable_model ); -} - -debug_print( endpos ) -{ -/# - self endon( "death" ); - while ( 1 ) - { - print3d( endpos, "pickup_trigger" ); - wait 0,05; -#/ - } -} - -watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse ) -{ - self endon( "death" ); - self endon( "delete" ); - level endon( "game_ended" ); - while ( 1 ) - { - trigger waittill( "trigger", player ); - while ( !isalive( player ) ) - { - continue; - } - while ( !player isonground() ) - { - continue; - } - if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam ) - { - continue; - } - if ( isDefined( trigger.claimedby ) && player != trigger.claimedby ) - { - continue; - } - if ( player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() ) - { - if ( isDefined( playersoundonuse ) ) - { - player playlocalsound( playersoundonuse ); - } - if ( isDefined( npcsoundonuse ) ) - { - player playsound( npcsoundonuse ); - } - player thread [[ callback ]]( weapon, model, trigger ); - return; - } - else - { - } - } -} - -pick_up( weapon, model, trigger ) -{ - current_weapon = self getcurrentweapon(); - if ( current_weapon != weapon ) - { - clip_ammo = self getweaponammoclip( weapon ); - if ( !clip_ammo ) - { - self setweaponammoclip( weapon, 1 ); - } - else - { - new_ammo_stock = self getweaponammostock( weapon ) + 1; - self setweaponammostock( weapon, new_ammo_stock ); - } - } - else - { - new_ammo_stock = self getweaponammostock( weapon ) + 1; - self setweaponammostock( weapon, new_ammo_stock ); - } - self maps/mp/zombies/_zm_stats::increment_client_stat( "ballistic_knives_pickedup" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "ballistic_knives_pickedup" ); - model destroy_ent(); - trigger destroy_ent(); -} - -destroy_ent() -{ - if ( isDefined( self ) ) - { - if ( isDefined( self.glowing_model ) ) - { - self.glowing_model delete(); - } - self delete(); - } -} - -watch_shutdown( trigger, model ) -{ - self waittill_any( "death", "disconnect", "zmb_lost_knife" ); - trigger destroy_ent(); - model destroy_ent(); -} - -drop_knives_to_ground( player ) -{ - player endon( "death" ); - player endon( "zmb_lost_knife" ); - for ( ;; ) - { - level waittill( "drop_objects_to_ground", origin, radius ); - if ( distancesquared( origin, self.origin ) < ( radius * radius ) ) - { - self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) ); - self thread update_retrieve_trigger( player ); - } - } -} - -force_drop_knives_to_ground_on_death( player, prey ) -{ - self endon( "death" ); - player endon( "zmb_lost_knife" ); - prey waittill( "death" ); - self unlink(); - self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) ); - self thread update_retrieve_trigger( player ); -} - -update_retrieve_trigger( player ) -{ - self endon( "death" ); - player endon( "zmb_lost_knife" ); - if ( isDefined( level.custom_update_retrieve_trigger ) ) - { - self [[ level.custom_update_retrieve_trigger ]]( player ); - return; - } - self waittill( "stationary" ); - trigger = self.retrievabletrigger; - trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 ); - trigger linkto( self ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked/maps/mp/zombies/_zm_weap_bowie.gsc b/Zombie Maps/Nuketown/zm_nuked/maps/mp/zombies/_zm_weap_bowie.gsc deleted file mode 100644 index 54968b5..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/maps/mp/zombies/_zm_weap_bowie.gsc +++ /dev/null @@ -1,53 +0,0 @@ -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( isDefined( level.bowie_cost ) ) - { - cost = level.bowie_cost; - } - else - { - cost = 3000; - } - maps/mp/zombies/_zm_melee_weapon::init( "bowie_knife_zm", "zombie_bowie_flourish", "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", cost, "bowie_upgrade", &"ZOMBIE_WEAPON_BOWIE_BUY", "bowie", ::has_bowie, ::give_bowie, ::take_bowie, ::bowie_flourish ); - maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie" ); - maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie_upgraded" ); -} - -spectator_respawn() -{ - maps/mp/zombies/_zm_melee_weapon::spectator_respawn( "bowie_upgrade", ::take_bowie, ::has_bowie ); -} - -has_bowie() -{ - if ( is_true( level._allow_melee_weapon_switching ) ) - { - return 0; - } - if ( !is_true( self._sickle_zm_equipped ) || is_true( self._bowie_zm_equipped ) && is_true( self._tazer_zm_equipped ) ) - { - return 1; - } - return 0; -} - -give_bowie() -{ - self._bowie_zm_equipped = 1; - self._sickle_zm_equipped = undefined; - self._tazer_zm_equipped = undefined; -} - -take_bowie() -{ - self._bowie_zm_equipped = undefined; -} - -bowie_flourish() -{ -} diff --git a/Zombie Maps/Nuketown/zm_nuked/maps/mp/zombies/_zm_weap_claymore.gsc b/Zombie Maps/Nuketown/zm_nuked/maps/mp/zombies/_zm_weap_claymore.gsc deleted file mode 100644 index 57ac3c0..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/maps/mp/zombies/_zm_weap_claymore.gsc +++ /dev/null @@ -1,487 +0,0 @@ -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( !isDefined( level.claymores_max_per_player ) ) - { - level.claymores_max_per_player = 12; - } - trigs = getentarray( "claymore_purchase", "targetname" ); - i = 0; - while ( i < trigs.size ) - { - model = getent( trigs[ i ].target, "targetname" ); - if ( isDefined( model ) ) - { - model hide(); - } - i++; - } - array_thread( trigs, ::buy_claymores ); - level thread give_claymores_after_rounds(); - level.claymores_on_damage = ::satchel_damage; - level.pickup_claymores = ::pickup_claymores; - level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener; - level.claymore_detectiondot = cos( 70 ); - level.claymore_detectionmindist = 20; - level._effect[ "claymore_laser" ] = loadfx( "weapon/claymore/fx_claymore_laser" ); -} - -buy_claymores() -{ - self.zombie_cost = 1000; - self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); - self setcursorhint( "HINT_NOICON" ); - self endon( "kill_trigger" ); - if ( !isDefined( self.stub ) ) - { - return; - } - if ( isDefined( self.stub ) && !isDefined( self.stub.claymores_triggered ) ) - { - self.stub.claymores_triggered = 0; - } - self.claymores_triggered = self.stub.claymores_triggered; - while ( 1 ) - { - self waittill( "trigger", who ); - while ( who in_revive_trigger() ) - { - continue; - } - while ( who has_powerup_weapon() ) - { - wait 0,1; - } - if ( is_player_valid( who ) ) - { - if ( who.score >= self.zombie_cost ) - { - if ( !who is_player_placeable_mine( "claymore_zm" ) ) - { - play_sound_at_pos( "purchase", self.origin ); - who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost ); - who thread claymore_setup(); - who thread show_claymore_hint( "claymore_purchased" ); - who thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" ); - if ( isDefined( self.stub ) ) - { - self.claymores_triggered = self.stub.claymores_triggered; - } - if ( self.claymores_triggered == 0 ) - { - model = getent( self.target, "targetname" ); - if ( isDefined( model ) ) - { - model thread maps/mp/zombies/_zm_weapons::weapon_show( who ); - } - else - { - if ( isDefined( self.clientfieldname ) ) - { - level setclientfield( self.clientfieldname, 1 ); - } - } - self.claymores_triggered = 1; - if ( isDefined( self.stub ) ) - { - self.stub.claymores_triggered = 1; - } - } - trigs = getentarray( "claymore_purchase", "targetname" ); - i = 0; - while ( i < trigs.size ) - { - trigs[ i ] setinvisibletoplayer( who ); - i++; - } - } - else who thread show_claymore_hint( "already_purchased" ); - } - } - } -} - -claymore_unitrigger_update_prompt( player ) -{ - if ( player is_player_placeable_mine( "claymore_zm" ) ) - { - return 0; - } - return 1; -} - -set_claymore_visible() -{ - players = get_players(); - trigs = getentarray( "claymore_purchase", "targetname" ); - while ( 1 ) - { - j = 0; - while ( j < players.size ) - { - while ( !players[ j ] is_player_placeable_mine( "claymore_zm" ) ) - { - i = 0; - while ( i < trigs.size ) - { - trigs[ i ] setinvisibletoplayer( players[ j ], 0 ); - i++; - } - } - j++; - } - wait 1; - players = get_players(); - } -} - -claymore_safe_to_plant() -{ - if ( self.owner.claymores.size >= level.claymores_max_per_player ) - { - return 0; - } - if ( isDefined( level.claymore_safe_to_plant ) ) - { - return self [[ level.claymore_safe_to_plant ]](); - } - return 1; -} - -claymore_wait_and_detonate() -{ - wait 0,1; - self detonate( self.owner ); -} - -claymore_watch() -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( "grenade_fire", claymore, weapname ); - if ( weapname == "claymore_zm" ) - { - claymore.owner = self; - claymore.team = self.team; - self notify( "zmb_enable_claymore_prompt" ); - if ( claymore claymore_safe_to_plant() ) - { - if ( isDefined( level.claymore_planted ) ) - { - self thread [[ level.claymore_planted ]]( claymore ); - } - claymore thread satchel_damage(); - claymore thread claymore_detonation(); - claymore thread play_claymore_effects(); - self maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_planted" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_planted" ); - break; - } - else - { - claymore thread claymore_wait_and_detonate(); - } - } - } -} - -claymore_setup() -{ - if ( !isDefined( self.claymores ) ) - { - self.claymores = []; - } - self thread claymore_watch(); - self giveweapon( "claymore_zm" ); - self set_player_placeable_mine( "claymore_zm" ); - self setactionslot( 4, "weapon", "claymore_zm" ); - self setweaponammostock( "claymore_zm", 2 ); -} - -adjust_trigger_origin( origin ) -{ - origin += vectorScale( ( 0, 0, 1 ), 20 ); - return origin; -} - -on_spawn_retrieve_trigger( watcher, player ) -{ - self maps/mp/gametypes_zm/_weaponobjects::onspawnretrievableweaponobject( watcher, player ); - if ( isDefined( self.pickuptrigger ) ) - { - self.pickuptrigger sethintlowpriority( 0 ); - } -} - -pickup_claymores() -{ - player = self.owner; - if ( !player hasweapon( "claymore_zm" ) ) - { - player thread claymore_watch(); - player giveweapon( "claymore_zm" ); - player set_player_placeable_mine( "claymore_zm" ); - player setactionslot( 4, "weapon", "claymore_zm" ); - player setweaponammoclip( "claymore_zm", 0 ); - player notify( "zmb_enable_claymore_prompt" ); - } - else - { - clip_ammo = player getweaponammoclip( self.name ); - clip_max_ammo = weaponclipsize( self.name ); - if ( clip_ammo >= clip_max_ammo ) - { - player notify( "zmb_disable_claymore_prompt" ); - return; - } - } - self pick_up(); - clip_ammo = player getweaponammoclip( self.name ); - clip_max_ammo = weaponclipsize( self.name ); - if ( clip_ammo >= clip_max_ammo ) - { - player notify( "zmb_disable_claymore_prompt" ); - } - player maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_pickedup" ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_pickedup" ); -} - -pickup_claymores_trigger_listener( trigger, player ) -{ - self thread pickup_claymores_trigger_listener_enable( trigger, player ); - self thread pickup_claymores_trigger_listener_disable( trigger, player ); -} - -pickup_claymores_trigger_listener_enable( trigger, player ) -{ - self endon( "delete" ); - while ( 1 ) - { - player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" ); - if ( !isDefined( trigger ) ) - { - return; - } - trigger trigger_on(); - trigger linkto( self ); - } -} - -pickup_claymores_trigger_listener_disable( trigger, player ) -{ - self endon( "delete" ); - while ( 1 ) - { - player waittill( "zmb_disable_claymore_prompt" ); - if ( !isDefined( trigger ) ) - { - return; - } - trigger unlink(); - trigger trigger_off(); - } -} - -shouldaffectweaponobject( object ) -{ - pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 ); - dirtopos = pos - object.origin; - objectforward = anglesToForward( object.angles ); - dist = vectordot( dirtopos, objectforward ); - if ( dist < level.claymore_detectionmindist ) - { - return 0; - } - dirtopos = vectornormalize( dirtopos ); - dot = vectordot( dirtopos, objectforward ); - return dot > level.claymore_detectiondot; -} - -claymore_detonation() -{ - self endon( "death" ); - self waittill_not_moving(); - detonateradius = 96; - damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 ); - damagearea setexcludeteamfortrigger( self.team ); - damagearea enablelinkto(); - damagearea linkto( self ); - if ( is_true( self.isonbus ) ) - { - damagearea setmovingplatformenabled( 1 ); - } - self.damagearea = damagearea; - self thread delete_claymores_on_death( self.owner, damagearea ); - self.owner.claymores[ self.owner.claymores.size ] = self; - while ( 1 ) - { - damagearea waittill( "trigger", ent ); - if ( isDefined( self.owner ) && ent == self.owner ) - { - continue; - } - while ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team ) - { - continue; - } - while ( !ent shouldaffectweaponobject( self ) ) - { - continue; - } - if ( ent damageconetrace( self.origin, self ) > 0 ) - { - self playsound( "wpn_claymore_alert" ); - wait 0,4; - if ( isDefined( self.owner ) ) - { - self detonate( self.owner ); - } - else - { - self detonate( undefined ); - } - return; - } - } -} - -delete_claymores_on_death( player, ent ) -{ - self waittill( "death" ); - if ( isDefined( player ) ) - { - arrayremovevalue( player.claymores, self ); - } - wait 0,05; - if ( isDefined( ent ) ) - { - ent delete(); - } -} - -satchel_damage() -{ - self setcandamage( 1 ); - self.health = 100000; - self.maxhealth = self.health; - attacker = undefined; - while ( 1 ) - { - self waittill( "damage", amount, attacker ); - if ( !isDefined( self ) ) - { - return; - } - self.health = self.maxhealth; - while ( !isplayer( attacker ) ) - { - continue; - } - if ( isDefined( self.owner ) && attacker == self.owner ) - { - continue; - } - while ( isDefined( attacker.pers ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] != level.zombie_team ) - { - continue; - } - } - if ( level.satchelexplodethisframe ) - { - wait ( 0,1 + randomfloat( 0,4 ) ); - } - else wait 0,05; - if ( !isDefined( self ) ) - { - return; - } - level.satchelexplodethisframe = 1; - thread reset_satchel_explode_this_frame(); - self detonate( attacker ); -} - -reset_satchel_explode_this_frame() -{ - wait 0,05; - level.satchelexplodethisframe = 0; -} - -play_claymore_effects() -{ - self endon( "death" ); - self waittill_not_moving(); - playfxontag( level._effect[ "claymore_laser" ], self, "tag_fx" ); -} - -give_claymores_after_rounds() -{ - while ( 1 ) - { - level waittill( "between_round_over" ); - while ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] is_player_placeable_mine( "claymore_zm" ) ) - { - players[ i ] giveweapon( "claymore_zm" ); - players[ i ] set_player_placeable_mine( "claymore_zm" ); - players[ i ] setactionslot( 4, "weapon", "claymore_zm" ); - players[ i ] setweaponammoclip( "claymore_zm", 2 ); - } - i++; - } - } - } -} - -init_hint_hudelem( x, y, alignx, aligny, fontscale, alpha ) -{ - self.x = x; - self.y = y; - self.alignx = alignx; - self.aligny = aligny; - self.fontscale = fontscale; - self.alpha = alpha; - self.sort = 20; -} - -setup_client_hintelem() -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( !isDefined( self.hintelem ) ) - { - self.hintelem = newclienthudelem( self ); - } - self.hintelem init_hint_hudelem( 320, 220, "center", "bottom", 1,6, 1 ); -} - -show_claymore_hint( string ) -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( string == "claymore_purchased" ) - { - text = &"ZOMBIE_CLAYMORE_HOWTO"; - } - else - { - text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED"; - } - self setup_client_hintelem(); - self.hintelem settext( text ); - wait 3,5; - self.hintelem settext( "" ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc b/Zombie Maps/Nuketown/zm_nuked/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc deleted file mode 100644 index 926716f..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc +++ /dev/null @@ -1,137 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - registerclientfield( "toplayer", "tazer_flourish", 1, 1, "int" ); - register_melee_weapon_for_level( "tazer_knuckles_zm" ); - if ( isDefined( level.tazer_cost ) ) - { - cost = level.tazer_cost; - } - else - { - cost = 6000; - } - maps/mp/zombies/_zm_melee_weapon::init( "tazer_knuckles_zm", "zombie_tazer_flourish", "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", cost, "tazer_upgrade", &"ZOMBIE_WEAPON_TAZER_BUY", "tazerknuckles", ::has_tazer, ::give_tazer, ::take_tazer, ::tazer_flourish_fx ); - maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee" ); - maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee_upgraded" ); - maps/mp/zombies/_zm_spawner::add_cusom_zombie_spawn_logic( ::watch_bodily_functions ); - level._effect[ "fx_zmb_taser_vomit" ] = loadfx( "maps/zombie/fx_zmb_taser_vomit" ); - level._effect[ "fx_zmb_taser_flourish" ] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" ); - level.tazer_flourish_delay = 0,5; -} - -spectator_respawn() -{ - maps/mp/zombies/_zm_melee_weapon::spectator_respawn( "tazer_upgrade", ::take_tazer, ::has_tazer ); -} - -watch_bodily_functions() -{ - if ( isDefined( self.isscreecher ) || self.isscreecher && isDefined( self.is_avogadro ) && self.is_avogadro ) - { - return; - } - while ( 1 ) - { - self waittill( "damage", amount, attacker, direction_vec, point, type ); - if ( !isDefined( self ) ) - { - return; - } - if ( !isDefined( attacker ) || !isplayer( attacker ) ) - { - continue; - } - while ( type != "MOD_MELEE" ) - { - continue; - } - if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isDefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped ) - { - continue; - } - ch = randomint( 100 ); - if ( ch < 4 ) - { - playfxontag( level._effect[ "fx_zmb_taser_vomit" ], self, "j_neck" ); - } - } -} - -onplayerconnect() -{ - self thread onplayerspawned(); -} - -onplayerspawned() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread watchtazerknucklemelee(); - } -} - -watchtazerknucklemelee() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "weapon_melee", weapon ); - if ( weapon == "tazer_knuckles_zm" ) - { - self tazerknuckle_melee(); - } - } -} - -tazerknuckle_melee() -{ -} - -has_tazer() -{ - if ( isDefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) - { - return 0; - } - if ( isDefined( self._sickle_zm_equipped ) && !self._sickle_zm_equipped && isDefined( self._bowie_zm_equipped ) || self._bowie_zm_equipped && isDefined( self._tazer_zm_equipped ) && self._tazer_zm_equipped ) - { - return 1; - } - return 0; -} - -give_tazer() -{ - self._tazer_zm_equipped = 1; - self._bowie_zm_equipped = undefined; - self._sickle_zm_equipped = undefined; -} - -take_tazer() -{ - self._tazer_zm_equipped = undefined; -} - -tazer_flourish_fx() -{ - self waittill( "weapon_change", newweapon ); - if ( newweapon == "zombie_tazer_flourish" ) - { - self endon( "weapon_change" ); - wait level.tazer_flourish_delay; - self thread maps/mp/zombies/_zm_audio::playerexert( "hitmed" ); - self setclientfieldtoplayer( "tazer_flourish", 1 ); - wait_network_frame(); - self setclientfieldtoplayer( "tazer_flourish", 0 ); - } -} diff --git a/Zombie Maps/Nuketown/zm_nuked/xmodelalias/c_zom_dlc0_zom_head_als.gsc b/Zombie Maps/Nuketown/zm_nuked/xmodelalias/c_zom_dlc0_zom_head_als.gsc deleted file mode 100644 index 431ef4c..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/xmodelalias/c_zom_dlc0_zom_head_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_dlc0_zom_head1"; - a[ 1 ] = "c_zom_dlc0_zom_head2"; - a[ 2 ] = "c_zom_dlc0_zom_head3"; - a[ 3 ] = "c_zom_dlc0_zom_head4"; - return a; -} diff --git a/Zombie Maps/Nuketown/zm_nuked/xmodelalias/c_zom_dlc0_zom_head_blueeyes_als.gsc b/Zombie Maps/Nuketown/zm_nuked/xmodelalias/c_zom_dlc0_zom_head_blueeyes_als.gsc deleted file mode 100644 index 82011f1..0000000 --- a/Zombie Maps/Nuketown/zm_nuked/xmodelalias/c_zom_dlc0_zom_head_blueeyes_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_dlc0_zom_head1_blueeyes"; - a[ 1 ] = "c_zom_dlc0_zom_head2_blueeyes"; - a[ 2 ] = "c_zom_dlc0_zom_head3_blueeyes"; - a[ 3 ] = "c_zom_dlc0_zom_head4_blueeyes"; - return a; -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc deleted file mode 100644 index 8bd9a0e..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_127" ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_down_176.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_down_176.gsc deleted file mode 100644 index ae88b6a..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_down_176.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_176" ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_down_40.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_down_40.gsc deleted file mode 100644 index a07466c..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_down_40.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_40" ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_down_72.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_down_72.gsc deleted file mode 100644 index eb80121..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_down_72.gsc +++ /dev/null @@ -1,14 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - if ( isDefined( self.isdog ) && self.isdog ) - { - dog_jump_down( 72, 7 ); - } - else - { - dosimpletraverse( "jump_down_72" ); - } -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc deleted file mode 100644 index e32a251..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc +++ /dev/null @@ -1,14 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - if ( isDefined( self.isdog ) && self.isdog ) - { - dog_jump_down( 96, 7 ); - } - else - { - dosimpletraverse( "jump_down_96" ); - } -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_down_fast_40.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_down_fast_40.gsc deleted file mode 100644 index 7eb18ba..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_down_fast_40.gsc +++ /dev/null @@ -1,14 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - if ( self.zombie_move_speed == "sprint" ) - { - dosimpletraverse( "jump_down_fast_40" ); - } - else - { - dosimpletraverse( "jump_down_40" ); - } -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc deleted file mode 100644 index 06cec96..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_127" ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_up_154.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_up_154.gsc deleted file mode 100644 index 7bfc6a9..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_up_154.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_154" ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_up_222.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_up_222.gsc deleted file mode 100644 index 793683d..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_up_222.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_222" ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_up_72.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_up_72.gsc deleted file mode 100644 index 607262d..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_up_72.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_72" ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_up_96.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_up_96.gsc deleted file mode 100644 index fa18212..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_up_96.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_96" ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_up_to_climb.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_up_to_climb.gsc deleted file mode 100644 index 10967b6..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_jump_up_to_climb.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_to_climb" ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_traverse_garage_door.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_traverse_garage_door.gsc deleted file mode 100644 index ace7bd7..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/animscripts/traverse/zm_traverse_garage_door.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "traverse_garage_door", 1 ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/createart/zm_nuked_art.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/createart/zm_nuked_art.gsc deleted file mode 100644 index f68ae26..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/createart/zm_nuked_art.gsc +++ /dev/null @@ -1,44 +0,0 @@ - -main() -{ - level.tweakfile = 1; - visionsetnaked( "mp_nuked", 1 ); - setdvar( "r_lightGridEnableTweaks", 1 ); - setdvar( "r_lightGridIntensity", 1,25 ); - setdvar( "r_lightGridContrast", 0,18 ); - setdvar( "scr_fog_exp_halfplane", "639.219" ); - setdvar( "scr_fog_exp_halfheight", "18691.3" ); - setdvar( "scr_fog_nearplane", "138.679" ); - setdvar( "scr_fog_red", "0.806694" ); - setdvar( "scr_fog_green", "0.962521" ); - setdvar( "scr_fog_blue", "0.9624" ); - setdvar( "scr_fog_baseheight", "1145.21" ); - setdvar( "visionstore_glowTweakEnable", "0" ); - setdvar( "visionstore_glowTweakRadius0", "5" ); - setdvar( "visionstore_glowTweakRadius1", "" ); - setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); - setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); - setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); - setdvar( "visionstore_glowTweakBloomIntensity1", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); - start_dist = 138,679; - half_dist = 1011,624; - half_height = 10834,5; - base_height = 1145,21; - fog_r = 0,501961; - fog_g = 0,501961; - fog_b = 0,501961; - fog_scale = 7,5834; - sun_col_r = 0,501961; - sun_col_g = 0,501961; - sun_col_b = 0,501961; - sun_dir_x = -0,99; - sun_dir_y = 0,06; - sun_dir_z = -0,11; - sun_start_ang = 0; - sun_stop_ang = 0; - time = 0; - max_fog_opacity = 0,8546; - setvolfog( start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale, sun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, sun_stop_ang, time, max_fog_opacity ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/createfx/zm_nuked_fx.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/createfx/zm_nuked_fx.gsc deleted file mode 100644 index 4a1dfdd..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/createfx/zm_nuked_fx.gsc +++ /dev/null @@ -1,1491 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_linger_core" ); - ent.v[ "origin" ] = ( 445,226, 10827,9, -3660,41 ); - ent.v[ "angles" ] = ( 270, 0, -14 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( 41,525, -2750,68, -75,3277 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 273 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( -937,065, -3497,88, -50,1126 ); - ent.v[ "angles" ] = ( 273,652, 322,536, 117,531 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_debris_streamer_volume" ); - ent.v[ "origin" ] = ( 18,2005, 101,9, -54,6617 ); - ent.v[ "angles" ] = ( 270, 0,516025, -0,516014 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_sm_pole" ); - ent.v[ "origin" ] = ( 1081,89, 493,638, 127,047 ); - ent.v[ "angles" ] = ( 270, 0, 141 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_sm_pole" ); - ent.v[ "origin" ] = ( -249,48, -377,549, 200,445 ); - ent.v[ "angles" ] = ( 298, 321, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_sm_pole" ); - ent.v[ "origin" ] = ( 643,139, 700,744, -53,5099 ); - ent.v[ "angles" ] = ( 270, 0, 36 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_sand_blowing_lg" ); - ent.v[ "origin" ] = ( 1873,09, 975,065, 155,143 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 279 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_sand_blowing_lg" ); - ent.v[ "origin" ] = ( -1966,19, 1368,03, 107,328 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 266 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_radioactive_ash_gusty" ); - ent.v[ "origin" ] = ( -41,6646, 630,257, -32,715 ); - ent.v[ "angles" ] = ( 3, 281, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_ceiling_edge_md" ); - ent.v[ "origin" ] = ( 504,862, 667,287, 67,3657 ); - ent.v[ "angles" ] = ( 72,9077, 267,649, -13,2309 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_fire_windblown_md" ); - ent.v[ "origin" ] = ( -709,762, -571,211, 134,819 ); - ent.v[ "angles" ] = ( 354,1, 264,518, -15,6971 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_wood_floor_int" ); - ent.v[ "origin" ] = ( 890,183, 519,432, 118,773 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_wood_floor_int" ); - ent.v[ "origin" ] = ( 776,965, 497,249, 106,67 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm" ); - ent.v[ "origin" ] = ( -187,638, 545,083, -3,0519 ); - ent.v[ "angles" ] = ( 349,396, 207,878, -44,9608 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_eaves_md" ); - ent.v[ "origin" ] = ( -276,783, 1006,11, 76,125 ); - ent.v[ "angles" ] = ( 334,459, 290,689, -4,2706 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_sm_pole" ); - ent.v[ "origin" ] = ( 637,937, 661,921, 73,7494 ); - ent.v[ "angles" ] = ( 347, 285, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm" ); - ent.v[ "origin" ] = ( 1533,28, 73,7367, 5,7648 ); - ent.v[ "angles" ] = ( 0, 258, -45 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_xsm" ); - ent.v[ "origin" ] = ( -287,163, -816,474, 4,5551 ); - ent.v[ "angles" ] = ( 314,389, 248,061, -138,142 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_radioactive_ash_gusty" ); - ent.v[ "origin" ] = ( -1725,6, 567,512, -33 ); - ent.v[ "angles" ] = ( 3, 290, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_radioactive_ash_gusty" ); - ent.v[ "origin" ] = ( 1510,3, 842,699, -59 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 281 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_rubble_md_int" ); - ent.v[ "origin" ] = ( 612,678, 709,124, -48,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 231 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_plume_md_blk_wispy_dist" ); - ent.v[ "origin" ] = ( -596,399, 497,52, 290,26 ); - ent.v[ "angles" ] = ( 26, 276, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_wood_sm_black" ); - ent.v[ "origin" ] = ( 645,654, 668,519, -19,3929 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 237 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_sm" ); - ent.v[ "origin" ] = ( 1449,32, 1110,58, -54,9784 ); - ent.v[ "angles" ] = ( 335, 283,772, 0,574565 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_md" ); - ent.v[ "origin" ] = ( -1907,01, -67,6244, -80,4186 ); - ent.v[ "angles" ] = ( 2, 241, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_md" ); - ent.v[ "origin" ] = ( -93,7951, -820,453, -65 ); - ent.v[ "angles" ] = ( 357, 273, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_md" ); - ent.v[ "origin" ] = ( 1671,55, 260,601, -53,6296 ); - ent.v[ "angles" ] = ( 346, 283, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_md" ); - ent.v[ "origin" ] = ( -1346,46, -234,953, -57,5488 ); - ent.v[ "angles" ] = ( 357, 263, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_sm" ); - ent.v[ "origin" ] = ( -1277,63, 1256,54, 3,8342 ); - ent.v[ "angles" ] = ( 347,005, 237,864, 2,85391 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_md" ); - ent.v[ "origin" ] = ( 129,994, 1168,57, 146,125 ); - ent.v[ "angles" ] = ( 358,068, 261,992, 0,517913 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_xsm" ); - ent.v[ "origin" ] = ( -627,548, -288,422, -19,7478 ); - ent.v[ "angles" ] = ( 6, 256, -26 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm" ); - ent.v[ "origin" ] = ( 579,779, -285,6, -47,0624 ); - ent.v[ "angles" ] = ( 272, 360, 105 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 1958,86, 624,942, -46,2195 ); - ent.v[ "angles" ] = ( 338,131, 284,83, 93,5505 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 2048,79, 341,904, -47,0714 ); - ent.v[ "angles" ] = ( 272, 360, 36 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 1603,57, 599,497, -3,86064 ); - ent.v[ "angles" ] = ( 315,381, 281,951, 87,2322 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 1759,17, 87,4756, -18,1138 ); - ent.v[ "angles" ] = ( 272, 360, 36 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); - ent.v[ "origin" ] = ( 338,176, -555,153, 218,675 ); - ent.v[ "angles" ] = ( 68,0054, 224,425, 47 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); - ent.v[ "origin" ] = ( -228,368, -338,549, 248,159 ); - ent.v[ "angles" ] = ( 36, 270, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); - ent.v[ "origin" ] = ( -637,081, 238,816, 172,508 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_elec_spark_wire_xsm_runner" ); - ent.v[ "origin" ] = ( -862,532, 322,962, 20,2642 ); - ent.v[ "angles" ] = ( 90, 334,669, 64,6695 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_mp_elec_spark_burst_xsm_thin_runner" ); - ent.v[ "origin" ] = ( 562,947, -195,76, 45,7788 ); - ent.v[ "angles" ] = ( 3, 250, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_ceiling_rafter_md" ); - ent.v[ "origin" ] = ( -44,1217, 1280,19, 71,0198 ); - ent.v[ "angles" ] = ( 356,102, 294,872, 177,633 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm" ); - ent.v[ "origin" ] = ( -148,616, 1230,93, 97,875 ); - ent.v[ "angles" ] = ( 0,315608, 299,435, -148,474 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm" ); - ent.v[ "origin" ] = ( -339,905, 986,868, 46,0477 ); - ent.v[ "angles" ] = ( 291,561, 213,792, -103,719 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_ceiling_rafter_md" ); - ent.v[ "origin" ] = ( 486,764, 1088,3, 97,7656 ); - ent.v[ "angles" ] = ( 357, 249, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_xsm" ); - ent.v[ "origin" ] = ( 544,56, 1081,85, 115,174 ); - ent.v[ "angles" ] = ( 346,168, 246,191, -71,5734 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 732,396, 12,911, 181,087 ); - ent.v[ "angles" ] = ( 281,384, 156,871, 127,577 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_xsm" ); - ent.v[ "origin" ] = ( 745,596, 65,6857, 209,106 ); - ent.v[ "angles" ] = ( 14,4775, 278,496, -3,96713 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm_pole" ); - ent.v[ "origin" ] = ( 870,11, 816,714, 107,283 ); - ent.v[ "angles" ] = ( 15,9545, 287,701, -6,3861 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm" ); - ent.v[ "origin" ] = ( 810,803, 772,44, -23,1783 ); - ent.v[ "angles" ] = ( 341,553, 218,663, -10,2158 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm_pole" ); - ent.v[ "origin" ] = ( 825,547, 738,247, 23,7776 ); - ent.v[ "angles" ] = ( 272, 285, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 820,731, 709,463, -53,875 ); - ent.v[ "angles" ] = ( 359,53, 287, -0,8831 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 705,286, 679,889, -53,875 ); - ent.v[ "angles" ] = ( 359,245, 266, -0,656188 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_burning_ash_gusty" ); - ent.v[ "origin" ] = ( 77,2403, -78,4967, -45,9001 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 278 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_burning_ash_gusty" ); - ent.v[ "origin" ] = ( -1584,16, -211,734, -64 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 278 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_burning_ash_gusty" ); - ent.v[ "origin" ] = ( 1411,21, -381,773, -80,896 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 275 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_radioactive_embers" ); - ent.v[ "origin" ] = ( 61,5189, 1775,38, 304,187 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 271 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_radioactive_embers_crater" ); - ent.v[ "origin" ] = ( -109,662, 4081,69, 849,8 ); - ent.v[ "angles" ] = ( 19, 271, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_wall_wood_ext_md" ); - ent.v[ "origin" ] = ( -437,299, 533,905, 194,518 ); - ent.v[ "angles" ] = ( 0, 345, 66 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_sm_pole" ); - ent.v[ "origin" ] = ( -487,159, 506,119, 241,591 ); - ent.v[ "angles" ] = ( 336,811, 154,342, -42,8908 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_pole_md_long" ); - ent.v[ "origin" ] = ( -572,404, 575,137, 265,125 ); - ent.v[ "angles" ] = ( 314,125, 255,325, 155,6 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_sm_pole" ); - ent.v[ "origin" ] = ( -695,51, 525,979, 265,379 ); - ent.v[ "angles" ] = ( 331,322, 319,284, 72,4991 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_rubble_md_int" ); - ent.v[ "origin" ] = ( -511,016, 520,297, 86,4583 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 248 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -478,575, 437,648, 220,639 ); - ent.v[ "angles" ] = ( 339,66, 247,856, 84,5675 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -504,978, 358,411, 221,958 ); - ent.v[ "angles" ] = ( 329,708, 248,947, 84,0991 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_fire_windblown_md" ); - ent.v[ "origin" ] = ( -703,411, -845,709, 130,691 ); - ent.v[ "angles" ] = ( 354,1, 264,518, -15,6971 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_fire_windblown_md" ); - ent.v[ "origin" ] = ( -609,896, -1223,16, 193,685 ); - ent.v[ "angles" ] = ( 339,658, 260,34, 16,2592 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_sm" ); - ent.v[ "origin" ] = ( -1049,36, -1107,05, 175,154 ); - ent.v[ "angles" ] = ( 355,788, 332,293, 82,0389 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_fire_windblown_md" ); - ent.v[ "origin" ] = ( 712,441, -626,117, 84,125 ); - ent.v[ "angles" ] = ( 350,706, 279,562, 0,696748 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_sm" ); - ent.v[ "origin" ] = ( 642,866, -692,345, 96,7364 ); - ent.v[ "angles" ] = ( 1,87194, 328,296, 47,287 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm_pole" ); - ent.v[ "origin" ] = ( 883,783, -429,588, 31,125 ); - ent.v[ "angles" ] = ( 271, 180, -86 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm_pole" ); - ent.v[ "origin" ] = ( 823,72, -389,939, 48,125 ); - ent.v[ "angles" ] = ( 13,1575, 317,775, 44,5273 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_fire_windblown_md" ); - ent.v[ "origin" ] = ( 383,536, 1010,29, 131,652 ); - ent.v[ "angles" ] = ( 354,095, 251,449, 0,652758 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_wall_wood_ext_md" ); - ent.v[ "origin" ] = ( -436,711, 1145,36, 1,49848 ); - ent.v[ "angles" ] = ( 0, 203, -46 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_xsm" ); - ent.v[ "origin" ] = ( -321,146, -209,831, -14,0275 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 277 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm" ); - ent.v[ "origin" ] = ( 104,142, -479,193, -25,978 ); - ent.v[ "angles" ] = ( 9,67821, 221,348, -74,5512 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm" ); - ent.v[ "origin" ] = ( -26,1763, -437,007, -19,2142 ); - ent.v[ "angles" ] = ( 0,911239, 230,547, 4,81652 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 88,3389, -508,587, -59,8167 ); - ent.v[ "angles" ] = ( 299,272, 66,5849, 48,0344 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_fast" ); - ent.v[ "origin" ] = ( 54,516, -511,388, -36,7732 ); - ent.v[ "angles" ] = ( 6, 276, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_smolder_area_sm" ); - ent.v[ "origin" ] = ( 1299,44, 638,812, -55,783 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 350 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_smolder_area_sm" ); - ent.v[ "origin" ] = ( 1087,07, 625,523, -57,2874 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_rubble_md_int" ); - ent.v[ "origin" ] = ( 902,073, 355,675, 93,236 ); - ent.v[ "angles" ] = ( 3, 291, 6 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 939,399, 762,949, 31,9496 ); - ent.v[ "angles" ] = ( 321,957, 18,3462, 86,1918 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_nic_fire_ceiling_edge_sm" ); - ent.v[ "origin" ] = ( 833,663, 695,377, 75,8235 ); - ent.v[ "angles" ] = ( 81,6093, 298,882, 15,4692 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_ceiling_md" ); - ent.v[ "origin" ] = ( 840,874, 642,215, 90,875 ); - ent.v[ "angles" ] = ( 86, 304, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 862,286, 741,768, -39,4932 ); - ent.v[ "angles" ] = ( 295,064, 22,428, 82,9064 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 1126,11, 718,831, -64,8801 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 305 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 1206,55, 652,177, -63 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 289 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 1436,12, 446,719, -54,4219 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 286 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 1496,4, 260,401, -63 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 286 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 1379,63, 437,967, -55,0723 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 286 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 1699,91, 847,433, -31,1341 ); - ent.v[ "angles" ] = ( 0, 286, 10 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm_pole" ); - ent.v[ "origin" ] = ( 1258,8, 1113,46, -116,975 ); - ent.v[ "angles" ] = ( 301,159, 102,265, 0,975478 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_xsm" ); - ent.v[ "origin" ] = ( 1150,71, 998,591, -76,651 ); - ent.v[ "angles" ] = ( 8,73988, 282,726, 27,5934 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 1199,56, 1014,64, 3,10688 ); - ent.v[ "angles" ] = ( 315,397, 293,367, 176,746 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 817,827, 791,393, -33,1773 ); - ent.v[ "angles" ] = ( 322,371, 292,56, -94,7225 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm" ); - ent.v[ "origin" ] = ( 970,598, 775,64, 10,36 ); - ent.v[ "angles" ] = ( 322,37, 292,56, -39,7225 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_pole_md_long" ); - ent.v[ "origin" ] = ( 1003,54, 703,304, 91,6861 ); - ent.v[ "angles" ] = ( 340,221, 283,986, -91,0187 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm" ); - ent.v[ "origin" ] = ( 1010,57, 628,573, 8,27523 ); - ent.v[ "angles" ] = ( 294,421, 317,647, -176,431 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm_pole" ); - ent.v[ "origin" ] = ( 1036,8, 599,061, 129,51 ); - ent.v[ "angles" ] = ( 342,391, 288,54, 177,155 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_smolder_area_sm" ); - ent.v[ "origin" ] = ( 1167,18, 433,861, 77,6994 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 288 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_smolder_area_sm" ); - ent.v[ "origin" ] = ( 877,835, 365,641, 91,4731 ); - ent.v[ "angles" ] = ( 10,4144, 281,025, 5,88351 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_xsm" ); - ent.v[ "origin" ] = ( 902,363, 336,777, 250,031 ); - ent.v[ "angles" ] = ( 4,40402, 286,154, 131,967 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_nic_fire_ceiling_edge_sm" ); - ent.v[ "origin" ] = ( 752,705, 132,337, 216,57 ); - ent.v[ "angles" ] = ( 85,0493, 102,932, -150,795 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_nic_fire_ceiling_edge_sm" ); - ent.v[ "origin" ] = ( 766,26, 166,922, 220,636 ); - ent.v[ "angles" ] = ( 84,6047, 129,841, -119,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_lf_zmb_nuke_sun" ); - ent.v[ "origin" ] = ( -338396, -327676, 221727 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_xsm" ); - ent.v[ "origin" ] = ( 350,535, -1031,63, -39,8235 ); - ent.v[ "angles" ] = ( 3,09771, 264,722, 22,2979 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_xsm" ); - ent.v[ "origin" ] = ( -46,2206, 1184,99, -48,697 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 305 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -170,6, 1199,31, -49,358 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 284 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_nic_fire_ceiling_edge_sm" ); - ent.v[ "origin" ] = ( 489,115, 1020,15, 98,9513 ); - ent.v[ "angles" ] = ( 89,9128, 90,2751, -178,729 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -281,018, 504,195, 21,7972 ); - ent.v[ "angles" ] = ( 291,608, 257,58, 59,7848 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -455,244, 462,779, 90,6362 ); - ent.v[ "angles" ] = ( 0, 255, -73 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm" ); - ent.v[ "origin" ] = ( -427,615, 399,407, 65,8158 ); - ent.v[ "angles" ] = ( 345,654, 233,354, -97,6119 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm" ); - ent.v[ "origin" ] = ( -472,01, 421,038, 132,085 ); - ent.v[ "angles" ] = ( 352,104, 242,192, -70,85 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_sm" ); - ent.v[ "origin" ] = ( 226,868, -252,836, -57,6819 ); - ent.v[ "angles" ] = ( 358,982, 266,028, -0,809154 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_sm" ); - ent.v[ "origin" ] = ( -436,565, 952,713, -62 ); - ent.v[ "angles" ] = ( 1,21988, 289,002, -0,36118 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_sm" ); - ent.v[ "origin" ] = ( 340,212, 816,277, -59,7699 ); - ent.v[ "angles" ] = ( 0,981772, 266, -0,809142 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_sm" ); - ent.v[ "origin" ] = ( -1485,23, 486,065, -59,6137 ); - ent.v[ "angles" ] = ( 358,775, 253,035, -1,00939 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); - ent.v[ "origin" ] = ( -2263,81, -889,092, -24,1558 ); - ent.v[ "angles" ] = ( 270, 357,51, 80,4895 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); - ent.v[ "origin" ] = ( -2266,79, -1297,7, -65,1407 ); - ent.v[ "angles" ] = ( 359,001, 275,996, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); - ent.v[ "origin" ] = ( -2389,42, -837,586, -110,366 ); - ent.v[ "angles" ] = ( 359,086, 254,994, 0,406816 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_fire_lg_black" ); - ent.v[ "origin" ] = ( -2279,62, -960,342, 9,62501 ); - ent.v[ "angles" ] = ( 285, 258, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -695,94, -300,493, -16,9227 ); - ent.v[ "angles" ] = ( 335,002, 301,314, 25,2887 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm" ); - ent.v[ "origin" ] = ( -601,21, -398,426, 44,668 ); - ent.v[ "angles" ] = ( 330,244, 230,725, -25,9171 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm" ); - ent.v[ "origin" ] = ( -766,159, -344,729, -15,3255 ); - ent.v[ "angles" ] = ( 279,292, 278,179, -131,334 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_xsm" ); - ent.v[ "origin" ] = ( -933,685, -354,732, -18,6244 ); - ent.v[ "angles" ] = ( 270, 0, 150 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_eaves_md_right" ); - ent.v[ "origin" ] = ( -1029,84, -596,344, 101,689 ); - ent.v[ "angles" ] = ( 9,97539, 208,061, 0,704702 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 484,874, 197,525, 62,7568 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 293 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 546,028, -856,478, 96,6235 ); - ent.v[ "angles" ] = ( 344, 293, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 370,921, -171,36, -26,4123 ); - ent.v[ "angles" ] = ( 316, 293, 36 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_nic_fire_building_md_dist" ); - ent.v[ "origin" ] = ( 1862,85, -317,07, -95,7691 ); - ent.v[ "angles" ] = ( 358,623, 239,058, -4,80797 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_nic_fire_building_md_dist" ); - ent.v[ "origin" ] = ( 2140,39, -156,88, -123,797 ); - ent.v[ "angles" ] = ( 357,889, 230,084, -4,53358 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_nic_fire_building_md_dist" ); - ent.v[ "origin" ] = ( 4520,86, -20,4233, -31,2087 ); - ent.v[ "angles" ] = ( 358,623, 239,058, -4,80797 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_nic_fire_building_md_dist" ); - ent.v[ "origin" ] = ( 4611,85, 276,534, -56,3477 ); - ent.v[ "angles" ] = ( 358,719, 275,176, -4,69962 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_nic_fire_building_md_dist" ); - ent.v[ "origin" ] = ( -2045,06, 1057,59, -79,4201 ); - ent.v[ "angles" ] = ( 356,919, 251,225, -3,77449 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_nic_fire_building_md_dist" ); - ent.v[ "origin" ] = ( -2295,18, 879,646, -107,663 ); - ent.v[ "angles" ] = ( 356,919, 251,225, -3,77449 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_nic_fire_building_md_dist" ); - ent.v[ "origin" ] = ( -2273,14, -800,201, -120,875 ); - ent.v[ "angles" ] = ( 353,999, 290,636, -4,89762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_plume_md_blk_wispy_dist" ); - ent.v[ "origin" ] = ( -763,556, -613,056, 152,35 ); - ent.v[ "angles" ] = ( 16, 276, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_plume_md_blk_wispy_dist" ); - ent.v[ "origin" ] = ( 751,634, -675,851, 97,0018 ); - ent.v[ "angles" ] = ( 12, 276, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm" ); - ent.v[ "origin" ] = ( -1672,58, 752,365, 71,8731 ); - ent.v[ "angles" ] = ( 356,082, 314,264, 25,1809 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm" ); - ent.v[ "origin" ] = ( -1629,84, 762,029, -38 ); - ent.v[ "angles" ] = ( 272, 0, 107 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm" ); - ent.v[ "origin" ] = ( -1808,34, 798,464, -45 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 317 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_nuclear_lightning_runner" ); - ent.v[ "origin" ] = ( 17288,3, -29227,3, 63550,7 ); - ent.v[ "angles" ] = ( 270, 357,51, 80,4895 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_nuclear_lightning_runner" ); - ent.v[ "origin" ] = ( 63900,4, 27524,3, 76800,3 ); - ent.v[ "angles" ] = ( 270, 357,51, 80,4895 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_nuclear_lightning_runner" ); - ent.v[ "origin" ] = ( -66762,3, 4052,32, 92128,8 ); - ent.v[ "angles" ] = ( 270, 357,51, 80,4895 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_nuclear_lightning_runner" ); - ent.v[ "origin" ] = ( -1851,37, -132734, 93025,4 ); - ent.v[ "angles" ] = ( 270, 0,65106, -177,651 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_nuclear_lightning_runner" ); - ent.v[ "origin" ] = ( 126197, -18115,3, 71243,8 ); - ent.v[ "angles" ] = ( 270, 0,65106, -177,651 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_nuclear_lightning_runner" ); - ent.v[ "origin" ] = ( -52580,2, -13623, 45759,2 ); - ent.v[ "angles" ] = ( 270, 357,51, 80,4895 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_sm" ); - ent.v[ "origin" ] = ( 1005,48, 1161,97, -130,671 ); - ent.v[ "angles" ] = ( 337,777, 285,349, -3,40055 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( -96,2962, -2298,03, -48,9383 ); - ent.v[ "angles" ] = ( 354,204, 288,079, -1,55846 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_nic_fire_building_md_dist" ); - ent.v[ "origin" ] = ( 4894,47, 564,066, -72,9304 ); - ent.v[ "angles" ] = ( 1,07245, 303,079, -14,7514 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_ash_embers_up_lg" ); - ent.v[ "origin" ] = ( 724,001, -656,697, 124,384 ); - ent.v[ "angles" ] = ( 1,92204, 279,101, -3,20506 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_ash_embers_up_lg" ); - ent.v[ "origin" ] = ( -537,17, 533,386, 272,409 ); - ent.v[ "angles" ] = ( 356, 279, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_exp_perk_impact_ext" ); - ent.v[ "origin" ] = ( -84,0686, 733,174, -64 ); - ent.v[ "angles" ] = ( 270, 0, 25 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 502; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_rubble_md_int" ); - ent.v[ "origin" ] = ( 751,718, 270,039, 93,7874 ); - ent.v[ "angles" ] = ( 6, 244, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 652,838, 336,776, 86,4649 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 259 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_xsm" ); - ent.v[ "origin" ] = ( 581,059, 305,474, 227,486 ); - ent.v[ "angles" ] = ( 0, 293, -177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_xsm" ); - ent.v[ "origin" ] = ( 644,644, 269,331, 235,694 ); - ent.v[ "angles" ] = ( 7,1649, 277,993, -121,838 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm" ); - ent.v[ "origin" ] = ( 798,918, 227,273, 223,815 ); - ent.v[ "angles" ] = ( 18,0053, 222,798, -98,529 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_exp_perk_impact_ext" ); - ent.v[ "origin" ] = ( -67,7972, 266,944, -43,6904 ); - ent.v[ "angles" ] = ( 270, 0, 25 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 666; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_exp_perk_impact_int" ); - ent.v[ "origin" ] = ( -448,66, 612,547, -64,2531 ); - ent.v[ "angles" ] = ( 270, 1,48787, -22,4878 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 501; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_exp_perk_impact_int_shockwave" ); - ent.v[ "origin" ] = ( -444,488, 621,286, -64,48 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 71 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 501; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_exp_perk_impact_int" ); - ent.v[ "origin" ] = ( 795,783, -70,8028, -61,6158 ); - ent.v[ "angles" ] = ( 270, 0, -72 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 503; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_exp_perk_impact_int_shockwave" ); - ent.v[ "origin" ] = ( 801,75, -77,1695, -64 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 198 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 503; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_exp_perk_impact_int" ); - ent.v[ "origin" ] = ( -835,375, 64,6386, -54,6829 ); - ent.v[ "angles" ] = ( 270, 0, -60 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 504; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_exp_perk_impact_int_shockwave" ); - ent.v[ "origin" ] = ( -842,976, 52,3471, -56,0671 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 111 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 504; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_exp_perk_impact_int_shockwave" ); - ent.v[ "origin" ] = ( 719,362, 50,6538, 78,4329 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 155 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 505; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_exp_perk_impact_int" ); - ent.v[ "origin" ] = ( 718,327, 54,9845, 79,8171 ); - ent.v[ "angles" ] = ( 270, 0, 15 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 505; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_exp_perk_impact_ext" ); - ent.v[ "origin" ] = ( 1621,1, 955,583, -61,2986 ); - ent.v[ "angles" ] = ( 270, 16,1094, -1,10941 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 506; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_exp_perk_impact_ext" ); - ent.v[ "origin" ] = ( -2031,07, 232,356, -62,698 ); - ent.v[ "angles" ] = ( 270, 16,1094, -1,10941 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 507; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_exp_perk_impact_ext" ); - ent.v[ "origin" ] = ( -1692,58, 960,953, -64 ); - ent.v[ "angles" ] = ( 270, 16,1094, -1,10941 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 508; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_exp_perk_impact_ext" ); - ent.v[ "origin" ] = ( 2041,86, 154,715, -63,5821 ); - ent.v[ "angles" ] = ( 270, 16,1094, -1,10941 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 509; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_exp_perk_impact_int" ); - ent.v[ "origin" ] = ( 1357,97, 580,943, -56,7789 ); - ent.v[ "angles" ] = ( 270, 0, -73 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 510; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_exp_perk_impact_int_shockwave" ); - ent.v[ "origin" ] = ( 1359,34, 581,444, -56,7662 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 107 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 510; - ent = maps/mp/_utility::createexploder( "fx_smk_smolder_gray_fast" ); - ent.v[ "origin" ] = ( 1348,08, 601,578, -48,804 ); - ent.v[ "angles" ] = ( 297, 102, 21 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 510; - ent = maps/mp/_utility::createexploder( "fx_smk_smolder_gray_fast" ); - ent.v[ "origin" ] = ( 2031,87, 170,67, -63,3168 ); - ent.v[ "angles" ] = ( 297, 102, 21 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 509; - ent = maps/mp/_utility::createexploder( "fx_smk_smolder_gray_fast" ); - ent.v[ "origin" ] = ( 1615,58, 951,798, -48,0679 ); - ent.v[ "angles" ] = ( 350, 263, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 506; - ent = maps/mp/_utility::createexploder( "fx_smk_smolder_gray_slow" ); - ent.v[ "origin" ] = ( 786,688, -81,2597, -54 ); - ent.v[ "angles" ] = ( 358,746, 268,447, 32,1635 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 503; - ent = maps/mp/_utility::createexploder( "fx_smk_smolder_gray_slow" ); - ent.v[ "origin" ] = ( 705,493, 54,8815, 85,125 ); - ent.v[ "angles" ] = ( 0,432776, 212,866, -8,54822 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 505; - ent = maps/mp/_utility::createexploder( "fx_smk_smolder_gray_fast" ); - ent.v[ "origin" ] = ( -90,7017, 726,382, -64 ); - ent.v[ "angles" ] = ( 356,648, 290,836, 19,5181 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 502; - ent = maps/mp/_utility::createexploder( "fx_smk_smolder_gray_fast" ); - ent.v[ "origin" ] = ( -448,82, 622,422, -55,3517 ); - ent.v[ "angles" ] = ( 348,817, 314,792, 16,4361 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 501; - ent = maps/mp/_utility::createexploder( "fx_smk_smolder_gray_slow" ); - ent.v[ "origin" ] = ( -843,836, 65,1143, -43,875 ); - ent.v[ "angles" ] = ( 347,327, 182,037, -18,1646 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 504; - ent = maps/mp/_utility::createexploder( "fx_smk_smolder_gray_fast" ); - ent.v[ "origin" ] = ( -1687,56, 962,63, -54 ); - ent.v[ "angles" ] = ( 337,478, 268,869, 0,613819 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 508; - ent = maps/mp/_utility::createexploder( "fx_smk_smolder_gray_fast" ); - ent.v[ "origin" ] = ( -2030,81, 237,488, -47,4957 ); - ent.v[ "angles" ] = ( 349,543, 300,994, -34,6538 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 507; - ent = maps/mp/_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); - ent.v[ "origin" ] = ( 758,039, 368,914, 260,544 ); - ent.v[ "angles" ] = ( 26,2469, 272,323, -25,0868 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); - ent.v[ "origin" ] = ( 536,447, 309,012, 250,579 ); - ent.v[ "angles" ] = ( 32,9779, 305,74, 5,92861 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); - ent.v[ "origin" ] = ( 714,263, 114,348, 224,186 ); - ent.v[ "angles" ] = ( 42,4676, 260,329, -23,3999 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); - ent.v[ "origin" ] = ( 900,685, 460,238, 232,833 ); - ent.v[ "angles" ] = ( 33,1859, 265,055, -20,4905 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); - ent.v[ "origin" ] = ( 856,037, 457,029, 191,592 ); - ent.v[ "angles" ] = ( 7,57328, 274,281, -7,18966 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_sm" ); - ent.v[ "origin" ] = ( 38,9442, 357,353, 48,0998 ); - ent.v[ "angles" ] = ( 13,3813, 348,185, -38,7605 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); - ent.v[ "origin" ] = ( 38,6534, 546,094, 53,3111 ); - ent.v[ "angles" ] = ( 12,7355, 291,767, 3,0367 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); - ent.v[ "origin" ] = ( -72,2776, 1146,67, 28,1412 ); - ent.v[ "angles" ] = ( 1,05724, 285,143, 2,86748 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); - ent.v[ "origin" ] = ( -539,143, 599,544, 228,286 ); - ent.v[ "angles" ] = ( 26,8589, 254,988, -11,8748 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_sm" ); - ent.v[ "origin" ] = ( -777,084, 593,841, 195,875 ); - ent.v[ "angles" ] = ( 31,8369, 246,503, -10,3563 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_sm_pole" ); - ent.v[ "origin" ] = ( -765,656, 676,502, 232,931 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 252 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_sm_pole" ); - ent.v[ "origin" ] = ( -857,199, 729,038, 244,187 ); - ent.v[ "angles" ] = ( 3,25894, 340,925, 117,052 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); - ent.v[ "origin" ] = ( -739,369, 728,214, 159,875 ); - ent.v[ "angles" ] = ( 9,2012, 258,681, -10,7176 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); - ent.v[ "origin" ] = ( -740,655, 700,344, 235,875 ); - ent.v[ "angles" ] = ( 54,8516, 274,975, 5,78444 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); - ent.v[ "origin" ] = ( -890,777, 786,765, 144,538 ); - ent.v[ "angles" ] = ( 1,86959, 269,11, -8,99706 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); - ent.v[ "origin" ] = ( -834,546, 78,237, 104,908 ); - ent.v[ "angles" ] = ( 50,4017, 243,511, -17,8334 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_md" ); - ent.v[ "origin" ] = ( -971,698, 106,477, 112,158 ); - ent.v[ "angles" ] = ( 53,9039, 272,917, 10,1142 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_nuked_water_stream_radioactive_thin" ); - ent.v[ "origin" ] = ( -827,841, 562,784, 72,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_nuked_water_stream_radioactive_thin" ); - ent.v[ "origin" ] = ( -988,132, 474,414, 74,344 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_nuked_water_stream_radioactive_spatter" ); - ent.v[ "origin" ] = ( -826,169, 565,039, -55,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_nuked_water_stream_radioactive_spatter" ); - ent.v[ "origin" ] = ( -984,647, 473,859, -55,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_sm" ); - ent.v[ "origin" ] = ( -1581,76, 63,3593, -5,97322 ); - ent.v[ "angles" ] = ( 338,551, 281,573, 17,906 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_ash_embers_falling_radioactive_sm" ); - ent.v[ "origin" ] = ( -1398,31, 100,802, -4,54848 ); - ent.v[ "angles" ] = ( 340,749, 275,707, 12,0232 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_ash_embers_up_lg" ); - ent.v[ "origin" ] = ( -704,127, -563,141, 152,04 ); - ent.v[ "angles" ] = ( 343,152, 305,492, -12,1529 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_ash_embers_up_lg" ); - ent.v[ "origin" ] = ( -621,927, -1220,26, 192,207 ); - ent.v[ "angles" ] = ( 359,121, 313,849, -6,13558 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_xsm" ); - ent.v[ "origin" ] = ( 951,777, 361,991, 229,199 ); - ent.v[ "angles" ] = ( 4,40401, 286,154, -113,033 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); - ent.v[ "origin" ] = ( 757,662, 283,895, 69,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 350 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 511; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); - ent.v[ "origin" ] = ( 693,471, 167,917, 224,787 ); - ent.v[ "angles" ] = ( 357,001, 41,9972, 0,104802 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 511; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); - ent.v[ "origin" ] = ( -622,128, 431,41, 68,875 ); - ent.v[ "angles" ] = ( 357,011, 38,9931, 0,261735 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 511; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); - ent.v[ "origin" ] = ( -902,323, 495,906, 67,3331 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 42 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 511; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); - ent.v[ "origin" ] = ( -753,758, 632,906, 229,217 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 339 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 511; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); - ent.v[ "origin" ] = ( -899,967, 511,921, 192,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 15 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 511; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); - ent.v[ "origin" ] = ( -1122,69, 603,186, 70,9287 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 90 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 511; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); - ent.v[ "origin" ] = ( 615,005, 564,502, 97,4658 ); - ent.v[ "angles" ] = ( 15,3598, 122,284, 9,50017 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 511; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); - ent.v[ "origin" ] = ( 536,657, 111,88, 67,7328 ); - ent.v[ "angles" ] = ( 357,374, 99,7013, 2,18813 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 511; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); - ent.v[ "origin" ] = ( 982,398, 300,54, 67,875 ); - ent.v[ "angles" ] = ( 356,623, 130,736, 0,522271 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 511; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); - ent.v[ "origin" ] = ( 1239,46, 335,822, 72,875 ); - ent.v[ "angles" ] = ( 3,15055, 296,715, -1,32492 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 511; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_xsm" ); - ent.v[ "origin" ] = ( 1103,83, 426,366, 27,9148 ); - ent.v[ "angles" ] = ( 347,196, 290,515, -31,9129 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 1121,59, 361,034, 20,394 ); - ent.v[ "angles" ] = ( 331,219, 291,431, -93,2406 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow" ); - ent.v[ "origin" ] = ( 776,715, 679,094, -56,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 294 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -1856,48, 846,551, 61,1532 ); - ent.v[ "angles" ] = ( 344,855, 304,04, -17,7261 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm_pole" ); - ent.v[ "origin" ] = ( -990,401, 701,174, 138,432 ); - ent.v[ "angles" ] = ( 271, 81, -36 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm_pole" ); - ent.v[ "origin" ] = ( -1057,11, 728,051, 191,199 ); - ent.v[ "angles" ] = ( 4,66833, 342,211, 93,8223 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -1044,92, 530,902, 149,229 ); - ent.v[ "angles" ] = ( 337,009, 246,09, 86,8292 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -967,441, 746,726, 107,668 ); - ent.v[ "angles" ] = ( 321,009, 246,15, 89,7976 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_linger_lit_z" ); - ent.v[ "origin" ] = ( -888,748, 167,505, -56,875 ); - ent.v[ "angles" ] = ( 305,852, 224,678, -90,0354 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow" ); - ent.v[ "origin" ] = ( -846,922, 434,851, 100,5 ); - ent.v[ "angles" ] = ( 351, 209, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_smolder_gray_slow" ); - ent.v[ "origin" ] = ( -587,957, 515,134, 103,743 ); - ent.v[ "angles" ] = ( 356,496, 276,254, -8,29492 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_linger_lit" ); - ent.v[ "origin" ] = ( 18,3445, 347,718, 40,6696 ); - ent.v[ "angles" ] = ( 30,9725, 337,299, 21,0652 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_linger_lit" ); - ent.v[ "origin" ] = ( -53,8461, 1118,8, 28,125 ); - ent.v[ "angles" ] = ( 25, 280,774, -11,8562 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_linger_lit" ); - ent.v[ "origin" ] = ( 750,533, 183,32, 93,125 ); - ent.v[ "angles" ] = ( 327,188, 229,439, 4,59922 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); - ent.v[ "origin" ] = ( 721,942, 125,367, 69,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 62 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0,3; - ent.v[ "exploder" ] = 511; - ent = maps/mp/_utility::createexploder( "fx_zm_nuked_perk_impact_ceiling_dust" ); - ent.v[ "origin" ] = ( 1034,01, 131,68, 207,459 ); - ent.v[ "angles" ] = ( 358,003, 193,8, -2,77325 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 511; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_fireplace_md" ); - ent.v[ "origin" ] = ( 683,285, 377,83, -49,5459 ); - ent.v[ "angles" ] = ( 274, 180, -72 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_radiation_140x300" ); - ent.v[ "origin" ] = ( -891,539, 515,361, -55,875 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 261 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_radiation_140x300" ); - ent.v[ "origin" ] = ( -896,733, 542,604, 80,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 203 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_elec_spark_wire_xsm_runner" ); - ent.v[ "origin" ] = ( -1041,55, 519,275, 101,507 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 45 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createloopeffect( "fx_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -76,2322, 91,6051, -60,0491 ); - ent.v[ "angles" ] = ( 11,7408, 83,7822, 49,2868 ); - ent.v[ "type" ] = "loopfx"; - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_ray_grate_warm" ); - ent.v[ "origin" ] = ( 550,155, 280,534, 243,017 ); - ent.v[ "angles" ] = ( 60,5506, 55,7581, 117,849 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_ray_grate_warm" ); - ent.v[ "origin" ] = ( 640,509, 292,827, 248,176 ); - ent.v[ "angles" ] = ( 58,8515, 53,4092, 124,99 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_ray_grate_warm" ); - ent.v[ "origin" ] = ( 701,585, 91,2234, 222,035 ); - ent.v[ "angles" ] = ( 68,6387, 46,439, 89,4071 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_ray_grate_warm" ); - ent.v[ "origin" ] = ( -579,39, 422,91, 282,327 ); - ent.v[ "angles" ] = ( 79,267, 103,447, 37,1853 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_ray_grate_warm" ); - ent.v[ "origin" ] = ( -528,27, 446,041, 258,311 ); - ent.v[ "angles" ] = ( 68,8982, 61,2584, -5,38676 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_ray_grate_warm" ); - ent.v[ "origin" ] = ( 669,56, 48,9236, 238,125 ); - ent.v[ "angles" ] = ( 70,1478, 53,8143, 23,3122 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide" ); - ent.v[ "origin" ] = ( 905,223, 352,314, 109,825 ); - ent.v[ "angles" ] = ( 305,884, 219,334, 133,147 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide_streak" ); - ent.v[ "origin" ] = ( 1003,55, 403,728, 115,433 ); - ent.v[ "angles" ] = ( 305,884, 219,334, 133,147 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_flour_glow_cool_sngl_shrt" ); - ent.v[ "origin" ] = ( 1048,19, 98,7792, 2,43868 ); - ent.v[ "angles" ] = ( 316,848, 16,5884, -93,6101 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide_streak" ); - ent.v[ "origin" ] = ( -894,866, 173,81, -62,875 ); - ent.v[ "angles" ] = ( 300,234, 213,189, 150,527 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide_streak" ); - ent.v[ "origin" ] = ( -786,558, 153,172, -26,3997 ); - ent.v[ "angles" ] = ( 300,234, 213,189, 150,527 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide_streak_1s" ); - ent.v[ "origin" ] = ( -907,393, 666,849, 32,1068 ); - ent.v[ "angles" ] = ( 302,859, 91,0294, 20,9428 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide_streak" ); - ent.v[ "origin" ] = ( -867,067, 580,141, 109,107 ); - ent.v[ "angles" ] = ( 317,956, 76,5415, 102,488 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide_streak_1s" ); - ent.v[ "origin" ] = ( -572,652, 509,568, -50,7644 ); - ent.v[ "angles" ] = ( 308,279, 126,711, -2,20114 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_light_ray_grate_warm" ); - ent.v[ "origin" ] = ( -751,485, 690,114, 198,125 ); - ent.v[ "angles" ] = ( 40,3701, 263,547, -91,4733 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide" ); - ent.v[ "origin" ] = ( -820,457, 418,156, 64,0783 ); - ent.v[ "angles" ] = ( 300,856, 220,363, 18,3297 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide_streak" ); - ent.v[ "origin" ] = ( -805,39, 586,709, 104,125 ); - ent.v[ "angles" ] = ( 304,845, 74,9583, 104,122 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_linger_lit_slow" ); - ent.v[ "origin" ] = ( -660,76, 641,186, 102,866 ); - ent.v[ "angles" ] = ( 51,0816, 285,502, 85,9167 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_smk_linger_lit_z" ); - ent.v[ "origin" ] = ( -912,221, 742,967, 155,488 ); - ent.v[ "angles" ] = ( 21,4677, 336,379, 94,7282 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide_streak_1s" ); - ent.v[ "origin" ] = ( -625,866, 472,437, -50 ); - ent.v[ "angles" ] = ( 310,239, 109,613, -0,883288 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_nuked_light_ray_streaks_1s" ); - ent.v[ "origin" ] = ( -677,512, 592,392, 46,125 ); - ent.v[ "angles" ] = ( 318,803, 294,406, -2,45177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_nuked_light_ray_streaks_1s" ); - ent.v[ "origin" ] = ( -851,032, 650,305, 108,125 ); - ent.v[ "angles" ] = ( 337,322, 223,59, 48,5054 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_nuked_light_ray_md_wide_streak_1s" ); - ent.v[ "origin" ] = ( -623,865, 549,649, -48,4828 ); - ent.v[ "angles" ] = ( 299,966, 109,834, 46,8043 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createexploder( "fx_cloud_cover_flat" ); - ent.v[ "origin" ] = ( 22367,2, 18595,2, 5624,66 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 676; - ent = maps/mp/_utility::createexploder( "fx_cloud_cover_flat" ); - ent.v[ "origin" ] = ( -24470,6, 26405,6, 5199,8 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 676; - ent = maps/mp/_utility::createexploder( "fx_cloud_cover_flat" ); - ent.v[ "origin" ] = ( 37860,6, 21667,1, 4713,99 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 676; - ent = maps/mp/_utility::createexploder( "fx_cloud_cover_flat" ); - ent.v[ "origin" ] = ( -32651,2, 15251,8, 4013,16 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 676; - ent = maps/mp/_utility::createexploder( "fx_cloud_cover_flat" ); - ent.v[ "origin" ] = ( 30523,3, -4471,4, 3328,24 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 676; - ent = maps/mp/_utility::createexploder( "fx_cloud_cover_volume" ); - ent.v[ "origin" ] = ( 12900,7, -11077,4, 7956,09 ); - ent.v[ "angles" ] = ( 279, 140, -90 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 676; - ent = maps/mp/_utility::createexploder( "fx_cloud_cover_volume" ); - ent.v[ "origin" ] = ( -16962,3, -3560,39, 6221,83 ); - ent.v[ "angles" ] = ( 270, 354,289, 141,711 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 676; - ent = maps/mp/_utility::createexploder( "fx_cloud_cover_volume" ); - ent.v[ "origin" ] = ( 433,252, 24186,5, 7322,05 ); - ent.v[ "angles" ] = ( 270, 0, 85 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 676; - ent = maps/mp/_utility::createexploder( "fx_cloud_cover_volume" ); - ent.v[ "origin" ] = ( -3556,4, -17019,2, 5327,17 ); - ent.v[ "angles" ] = ( 270, 357,797, 110,203 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 676; - ent = maps/mp/_utility::createexploder( "fx_cloud_cover_volume" ); - ent.v[ "origin" ] = ( -14488,4, 13918,8, 7082 ); - ent.v[ "angles" ] = ( 270, 2,86241, 117,138 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 676; - ent = maps/mp/_utility::createexploder( "fx_cloud_cover_volume" ); - ent.v[ "origin" ] = ( 16939,5, 15417,8, 6238,46 ); - ent.v[ "angles" ] = ( 270, 0, 19 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 676; - ent = maps/mp/_utility::createexploder( "fx_cloud_cover_volume" ); - ent.v[ "origin" ] = ( 5304,38, 35180,7, 9297,49 ); - ent.v[ "angles" ] = ( 270, 3,36646, 73,6335 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 676; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_nuked_water_stream_radioactive_thin" ); - ent.v[ "origin" ] = ( -1009,86, 517,158, 195,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_nuked_water_stream_radioactive_thin" ); - ent.v[ "origin" ] = ( -859,311, 572,6, 195,875 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_nuked_water_stream_radioactive_spatter" ); - ent.v[ "origin" ] = ( -859,311, 572,6, 80,125 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_nuked_water_stream_radioactive_spatter" ); - ent.v[ "origin" ] = ( -1009,86, 517,158, 80,125 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_zm_elec_arc_vert" ); - ent.v[ "origin" ] = ( -2335,36, -945,512, 103,773 ); - ent.v[ "angles" ] = ( 270, 356,82, -129,82 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_elec_transformer_sparks_runner" ); - ent.v[ "origin" ] = ( -2319,89, -921,68, 101,125 ); - ent.v[ "angles" ] = ( 38,8277, 307,037, -37,5344 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_fire_line_xsm" ); - ent.v[ "origin" ] = ( -884,313, -368,767, -17,998 ); - ent.v[ "angles" ] = ( 324,92, 290,565, -60,0378 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_sm" ); - ent.v[ "origin" ] = ( -473,334, 174,651, -51,2521 ); - ent.v[ "angles" ] = ( 358,942, 263,029, -0,702441 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_nuke_sand_windy_hvy_md" ); - ent.v[ "origin" ] = ( 1360,67, -765,871, -59,1856 ); - ent.v[ "angles" ] = ( 359, 283, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/gametypes_zm/zstandard.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/gametypes_zm/zstandard.gsc deleted file mode 100644 index e5b9d4e..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/gametypes_zm/zstandard.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_ai_dogs; -#include maps/mp/zombies/_zm_stats; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; - -main() //checked matches cerberus ouput -{ - maps/mp/gametypes_zm/_zm_gametype::main(); - level.onprecachegametype = ::onprecachegametype; - level.onstartgametype = ::onstartgametype; - level._game_module_custom_spawn_init_func = maps/mp/gametypes_zm/_zm_gametype::custom_spawn_init_func; - level._game_module_stat_update_func = maps/mp/zombies/_zm_stats::survival_classic_custom_stat_update; - maps/mp/gametypes_zm/_zm_gametype::post_gametype_main( "zstandard" ); -} - -onprecachegametype() //checked matches cerberus output -{ - level.playersuicideallowed = 1; - level.canplayersuicide = ::canplayersuicide; - level.suicide_weapon = "death_self_zm"; - precacheitem( "death_self_zm" ); - maps/mp/zombies/_zm_ai_dogs::init(); - maps/mp/gametypes_zm/_zm_gametype::rungametypeprecache( "zstandard" ); -} - -onstartgametype() //checked matches cerberus output -{ - maps/mp/gametypes_zm/_zm_gametype::setup_classic_gametype(); - maps/mp/gametypes_zm/_zm_gametype::rungametypemain( "zstandard", ::zstandard_main ); -} - -zstandard_main() //checked matches cerberus output -{ - level.dog_rounds_allowed = getgametypesetting( "allowdogs" ); - if ( level.dog_rounds_allowed ) - { - maps/mp/zombies/_zm_ai_dogs::enable_dog_rounds(); - } - level thread maps/mp/zombies/_zm::round_start(); - level thread maps/mp/gametypes_zm/_zm_gametype::kill_all_zombies(); -} - diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zm_nuked.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zm_nuked.gsc deleted file mode 100644 index 73ce33c..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zm_nuked.gsc +++ /dev/null @@ -1,1548 +0,0 @@ -#include maps/mp/_compass; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_blockers; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_score; -#include maps/mp/animscripts/zm_run; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_weap_ballistic_knife; -#include maps/mp/zombies/_zm_weap_claymore; -#include maps/mp/zombies/_zm_weap_cymbal_monkey; -#include maps/mp/zombies/_zm_weap_bowie; -#include maps/mp/zombies/_zm_weap_tazer_knuckles; -#include maps/mp/_sticky_grenade; -#include maps/mp/zm_nuked_perks; -#include maps/mp/gametypes_zm/_spawning; -#include maps/mp/teams/_teamset_cdc; -#include maps/mp/zombies/_load; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm; -#include maps/mp/zm_nuked_fx; -#include maps/mp/zm_nuked_ffotd; -#include maps/mp/zm_nuked_gamemodes; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -gamemode_callback_setup() //checked matches cerberus output -{ - maps/mp/zm_nuked_gamemodes::init(); -} - -survival_init() //checked matches cerberus output -{ - level.force_team_characters = 1; - level.should_use_cia = 0; - if ( randomint( 100 ) > 50 ) - { - level.should_use_cia = 1; - } - level.precachecustomcharacters = ::precache_team_characters; - level.givecustomcharacters = ::give_team_characters; - flag_wait( "start_zombie_round_logic" ); -} - -zstandard_preinit() //checked matches cerberus output -{ - survival_init(); -} - -createfx_callback() //checked matches cerberus output -{ - ents = getentarray(); - i = 0; - while ( i < ents.size ) - { - if ( ents[ i ].classname != "info_player_start" ) - { - ents[ i ] delete(); - } - i++; - } -} - -main() //checked matches cerberus output -{ - level thread maps/mp/zm_nuked_ffotd::main_start(); - level.level_createfx_callback_thread = ::createfx_callback; - level.default_game_mode = "zstandard"; - level.default_start_location = "nuked"; - level.zombiemode_using_perk_intro_fx = 1; - level.revive_machine_spawned = 0; - level.riser_fx_on_client = 1; - setup_rex_starts(); - maps/mp/zm_nuked_fx::main(); - maps/mp/zombies/_zm::init_fx(); - maps/mp/animscripts/zm_death::precache_gib_fx(); - level.zombiemode = 1; - level._no_water_risers = 1; - precachemodel( "p6_zm_nuked_rocket_cam" ); - precacheshellshock( "default" ); - precacherumble( "damage_light" ); - precachemodel( "collision_wall_128x128x10_standard" ); - precachemodel( "collision_player_256x256x10" ); - precachemodel( "collision_player_512x512x10" ); - precachemodel( "fx_axis_createfx" ); - maps/mp/zombies/_load::main(); - if ( getDvar( "createfx" ) == "1" ) - { - return; - } - - maps/mp/teams/_teamset_cdc::level_init(); - maps/mp/gametypes_zm/_spawning::level_use_unified_spawning( 1 ); - level.givecustomloadout = ::givecustomloadout; - level.precachecustomcharacters = ::precache_team_characters; - level.givecustomcharacters = ::give_team_characters; - initcharacterstartindex(); - level.custom_player_fake_death = ::nuked_player_fake_death; - level.custom_player_fake_death_cleanup = ::nuked_player_fake_death_cleanup; - level.initial_round_wait_func = ::initial_round_wait_func; - level.ignore_path_delays = 1; - level.calc_closest_player_using_paths = 1; - level.melee_miss_func = ::melee_miss_func; - level.zombie_init_done = ::zombie_init_done; - level._zombie_path_timer_override = ::zombie_path_timer_override; - level.zombiemode_using_pack_a_punch = 1; - level.zombiemode_reusing_pack_a_punch = 1; - level.pap_interaction_height = 47; - level.taser_trig_adjustment = ( -7, -2, 0 ); - level.zombiemode_using_doubletap_perk = 1; - level.zombiemode_using_juggernaut_perk = 1; - level.zombiemode_using_revive_perk = 1; - level.zombiemode_using_sleightofhand_perk = 1; - level.register_offhand_weapons_for_level_defaults_override = ::offhand_weapon_overrride; - level.zombiemode_offhand_weapon_give_override = ::offhand_weapon_give_override; - level._zombie_custom_add_weapons = ::custom_add_weapons; - level._allow_melee_weapon_switching = 1; - level.custom_ai_type = []; - level.raygun2_included = 1; - include_weapons(); - include_powerups(); - include_equipment_for_level(); - registerclientfield( "world", "zombie_eye_change", 4000, 1, "int" ); - maps/mp/zm_nuked_perks::init_nuked_perks(); - maps/mp/zombies/_zm::init(); - level.custom_intermission = ::nuked_standard_intermission; - level thread maps/mp/_sticky_grenade::init(); - maps/mp/zombies/_zm_weap_tazer_knuckles::init(); - maps/mp/zombies/_zm_weap_bowie::init(); - level.legacy_cymbal_monkey = 1; - maps/mp/zombies/_zm_weap_cymbal_monkey::init(); - maps/mp/zombies/_zm_weap_claymore::init(); - maps/mp/zombies/_zm_weap_ballistic_knife::init(); - level.special_weapon_magicbox_check = ::nuked_special_weapon_magicbox_check; - precacheitem( "death_throe_zm" ); - level.zones = []; - level.zone_manager_init_func = ::nuked_zone_init; - init_zones = []; - init_zones[ 0 ] = "culdesac_yellow_zone"; - init_zones[ 1 ] = "culdesac_green_zone"; - level thread maps/mp/zombies/_zm_zonemgr::manage_zones( init_zones ); - level.zombie_ai_limit = 24; - level thread inermission_rocket_init(); - flag_init( "rocket_hit_nuketown" ); - flag_init( "moon_transmission_over" ); - if ( level.round_number == 1 && is_true( level.enable_magic ) && level.gamedifficulty != 0 ) - { - level thread zombie_eye_glow_change(); - level thread switch_announcer_to_richtofen(); - level thread moon_transmission_vo(); - level thread marlton_vo_inside_bunker(); - level thread bus_random_horn(); - } - level thread nuked_mannequin_init(); - level thread fake_lighting_cleanup(); - level thread bus_taser_blocker(); - level thread nuked_doomsday_clock_think(); - level thread nuked_population_sign_think(); - level thread maps/mp/zm_nuked_perks::perks_from_the_sky(); - level thread perks_behind_door(); - level.destructible_callbacks[ "headless" ] = ::sndmusegg3_counter; - level thread sndswitchannouncervox( "sam" ); - level thread sndgameend(); - if ( level.round_number == 1 && is_true( level.enable_magic ) && level.gamedifficulty != 0 ) - { - level thread sndmusiceastereggs(); - } - setdvar( "zombiemode_path_minz_bias", 28 ); - level.speed_change_round = 15; - level.speed_change_max = 5; - level thread nuked_update_traversals(); - level thread nuked_collision_patch(); - level thread maps/mp/zm_nuked_ffotd::main_end(); -} - -door_powerup_drop( powerup_name, drop_spot, powerup_team, powerup_location ) //checked matches cerberus output -{ - if ( isDefined( level.door_powerup ) ) - { - level.door_powerup powerup_delete(); - } - powerup = maps/mp/zombies/_zm_net::network_safe_spawn( "powerup", 1, "script_model", drop_spot + vectorScale( ( 0, 1, 0 ), 40 ) ); - level notify( "powerup_dropped" ); - if ( isDefined( powerup ) ) - { - powerup.grabbed_level_notify = "magic_door_power_up_grabbed"; - powerup maps/mp/zombies/_zm_powerups::powerup_setup( powerup_name, powerup_team, powerup_location ); - powerup thread maps/mp/zombies/_zm_powerups::powerup_wobble(); - powerup thread maps/mp/zombies/_zm_powerups::powerup_grab( powerup_team ); - powerup thread maps/mp/zombies/_zm_powerups::powerup_move(); - level.door_powerup = powerup; - } -} - -perks_behind_door() //checked matches cerberus output -{ - if ( !is_true( level.enable_magic ) ) - { - return; - } - level endon( "magic_door_power_up_grabbed" ); - flag_wait( "initial_blackscreen_passed" ); - door_perk_drop_list = []; - door_perk_drop_list[ 0 ] = "nuke"; - door_perk_drop_list[ 1 ] = "double_points"; - door_perk_drop_list[ 2 ] = "insta_kill"; - door_perk_drop_list[ 3 ] = "fire_sale"; - door_perk_drop_list[ 4 ] = "full_ammo"; - index = 0; - ammodrop = getstruct( "zm_nuked_ammo_drop", "script_noteworthy" ); - perk_type = door_perk_drop_list[ index ]; - index++; - door_powerup_drop( perk_type, ammodrop.origin ); - while ( 1 ) - { - level waittill( "nuke_clock_moved" ); - if ( index == door_perk_drop_list.size ) - { - index = 0; - } - perk_type = door_perk_drop_list[ index ]; - index++; - door_powerup_drop( perk_type, ammodrop.origin ); - } -} - -nuked_doomsday_clock_think() //checked matches cerberus output -{ - min_hand_model = getent( "clock_min_hand", "targetname" ); - min_hand_model.position = 0; - while ( 1 ) - { - level waittill( "update_doomsday_clock" ); - level thread update_doomsday_clock( min_hand_model ); - } -} - -update_doomsday_clock( min_hand_model ) //checked partially changed to match cerberus output -{ - while ( is_true( min_hand_model.is_updating ) ) - { - wait 0.05; - } - min_hand_model.is_updating = 1; - if ( min_hand_model.position == 0 ) - { - min_hand_model.position = 3; - min_hand_model rotatepitch( -90, 1 ); - min_hand_model playsound( "zmb_clock_hand" ); - min_hand_model waittill( "rotatedone" ); - min_hand_model playsound( "zmb_clock_chime" ); - } - else - { - min_hand_model.position--; - - min_hand_model rotatepitch( 30, 1 ); - min_hand_model playsound( "zmb_clock_hand" ); - min_hand_model waittill( "rotatedone" ); - } - level notify( "nuke_clock_moved" ); - min_hand_model.is_updating = 0; -} - -fall_down( vdir, stance ) //checked partially changed to match cerberus output -{ - self endon( "disconnect" ); - level endon( "game_module_ended" ); - self ghost(); - origin = self.origin; - xyspeed = ( 0, 0, 0 ); - angles = self getplayerangles(); - angles = ( angles[ 0 ], angles[ 1 ], angles[ 2 ] + randomfloatrange( -5, 5 ) ); - if ( isDefined( vdir ) && length( vdir ) > 0 ) - { - xyspeedmag = 40 + randomint( 12 ) + randomint( 12 ); - xyspeed = xyspeedmag * vectornormalize( ( vdir[ 0 ], vdir[ 1 ], 0 ) ); - } - linker = spawn( "script_origin", ( 0, 0, 0 ) ); - linker.origin = origin; - linker.angles = angles; - self._fall_down_anchor = linker; - self playerlinkto( linker ); - self playsoundtoplayer( "zmb_player_death_fall", self ); - falling = stance != "prone"; - if ( falling ) - { - origin = playerphysicstrace( origin, origin + xyspeed ); - eye = self get_eye(); - floor_height = ( 10 + origin[ 2 ] ) - eye[ 2 ]; - origin += ( 0, 0, floor_height ); - lerptime = 0.5; - linker moveto( origin, lerptime, lerptime ); - linker rotateto( angles, lerptime, lerptime ); - } - self freezecontrols( 1 ); - if ( falling ) - { - linker waittill( "movedone" ); - } - self giveweapon( "death_throe_zm" ); - self switchtoweapon( "death_throe_zm" ); - if ( falling ) - { - bounce = randomint( 4 ) + 8; - origin = ( origin + ( 0, 0, bounce ) ) - ( xyspeed * 0.1 ); - lerptime = bounce / 50; - linker moveto( origin, lerptime, 0, lerptime ); - linker waittill( "movedone" ); - origin = ( origin + ( 0, 0, bounce * -1 ) ) + ( xyspeed * 0.1 ); - lerptime /= 2; - linker moveto( origin, lerptime, lerptime ); - linker waittill( "movedone" ); - linker moveto( origin, 5, 0 ); - } - wait 15; - linker delete(); -} - -nuked_player_fake_death_cleanup() //chcecked matches cerberus output -{ - if ( isDefined( self._fall_down_anchor ) ) - { - self._fall_down_anchor delete(); - self._fall_down_anchor = undefined; - } -} - -nuked_player_fake_death( vdir ) //checked partially changed to match cerberus output -{ - level notify( "fake_death" ); - self notify( "fake_death" ); - stance = self getstance(); - self.ignoreme = 1; - self enableinvulnerability(); - self takeallweapons(); - if ( is_true( self.insta_killed ) ) - { - self maps/mp/zombies/_zm::player_fake_death(); - self allowprone( 1 ); - self allowcrouch( 0 ); - self allowstand( 0 ); - wait 0.25; - self freezecontrols( 1 ); - } - else - { - self freezecontrols( 1 ); - self thread fall_down( vdir, stance ); - wait 1; - } -} - -initial_round_wait_func() //checked matches cerberus output -{ - flag_wait( "initial_blackscreen_passed" ); -} - -melee_miss_func() //checked matches cerberus output -{ - if ( isDefined( self.enemy ) ) - { - if ( self.enemy maps/mp/zombies/_zm_laststand::is_reviving_any() ) - { - dist_sq = distancesquared( self.enemy.origin, self.origin ); - melee_dist_sq = self.meleeattackdist * self.meleeattackdist; - if ( dist_sq < melee_dist_sq ) - { - self.enemy dodamage( self.meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); - } - } - } -} - -zombie_init_done() //checked matches cerberus output -{ - self.allowpain = 0; - if ( isDefined( self.script_parameters ) && self.script_parameters == "crater" ) - { - self thread zombie_crater_locomotion(); - } - self setphysparams( 15, 0, 48 ); -} - -zombie_crater_locomotion() //checked partially changed to match cerberus output -{ - self endon( "death" ); - stand_trigger = getentarray( "zombie_crawler_standup", "targetname" ); - while ( is_true( self.needs_run_update ) ) - { - wait 0.1; - } - self allowpitchangle( 1 ); - self setpitchorient(); - if ( self.zombie_move_speed == "sprint" ) - { - self setanimstatefromasd( "zm_move_sprint_crawl", 2 ); - } - else - { - self setanimstatefromasd( "zm_move_sprint_crawl", 1 ); - } - touched = 0; - while ( !touched ) - { - if ( is_true( self.completed_emerging_into_playable_area ) ) - { - self allowpitchangle( 0 ); - self clearpitchorient(); - return; - } - i = 0; - for(i = 0; i < stand_trigger.size; i++) - { - if(self istouching(stand_trigger[i])) - { - touched = 1; - break; - } - } - wait 0.1; - } - self allowpitchangle( 0 ); - self clearpitchorient(); - self maps/mp/animscripts/zm_run::needsupdate(); -} - -zombie_path_timer_override() //checked matches cerberus output -{ - timer = getTime() + 100; - return timer; -} - -nuked_update_traversals() //checked partially changed to match cerberus output -{ - level.yellow_awning_clip = getentarray( "yellow_awning_clip", "targetname" ); - level.yellow_patio_clip = getentarray( "yellow_patio_clip", "targetname" ); - level.green_awning_clip = getentarray( "green_awning_clip", "targetname" ); - level.green_patio_clip = getentarray( "green_patio_clip", "targetname" ); - level.yellow_awning = 0; - level.yellow_patio = 0; - level.green_awning = 0; - level.green_patio = 0; - wait 5; - while ( 1 ) - { - level.yellow_backyard = 0; - level.green_backyard = 0; - level.culdesac = 0; - level.other = 0; - nuked_update_player_zones(); - if ( !level.culdesac && !level.other ) - { - if ( level.yellow_backyard > 0 ) - { - set_yellow_awning( 1 ); - set_yellow_patio( 0 ); - } - if ( level.green_backyard > 0 ) - { - set_green_awning( 1 ); - set_green_patio( 0 ); - } - } - else if ( !level.yellow_backyard && !level.green_backyard && !level.other ) - { - set_yellow_awning( 0 ); - set_yellow_patio( 1 ); - set_green_awning( 0 ); - set_green_patio( 1 ); - } - else if ( !level.other ) - { - set_yellow_awning( 0 ); - set_yellow_patio( 0 ); - set_green_awning( 0 ); - set_green_patio( 0 ); - } - else - { - set_yellow_awning( 1 ); - set_yellow_patio( 1 ); - set_green_awning( 1 ); - set_green_patio( 1 ); - } - wait 0.2; - } -} - -set_yellow_awning( enable ) //checked changed to match cerberus output -{ - if(enable) - { - if(!level.yellow_awning) - { - level.yellow_awning = 1; - house_clip(level.yellow_awning_clip, 1); - } - } - else if(level.yellow_awning) - { - level.yellow_awning = 0; - house_clip(level.yellow_awning_clip, 0); - } -} - -set_yellow_patio( enable ) //checked changed to match cerberus output -{ - if(enable) - { - if(!level.yellow_patio) - { - level.yellow_patio = 1; - house_clip(level.yellow_patio_clip, 1); - } - } - else if(level.yellow_patio) - { - level.yellow_patio = 0; - house_clip(level.yellow_patio_clip, 0); - } -} - -set_green_awning( enable ) //checked changed to match cerberus output -{ - if(enable) - { - if(!level.green_awning) - { - level.green_awning = 1; - house_clip(level.green_awning_clip, 1); - } - } - else if(level.green_awning) - { - level.green_awning = 0; - house_clip(level.green_awning_clip, 0); - } -} - -set_green_patio( enable ) //checked changed to match cerberus output -{ - if(enable) - { - if(!level.green_patio) - { - level.green_patio = 1; - house_clip(level.green_patio_clip, 1); - } - } - else if(level.green_patio) - { - level.green_patio = 0; - house_clip(level.green_patio_clip, 0); - } -} - -nuked_update_player_zones() //checked changed to match cerberus output -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if(is_player_valid(players[i])) - { - if(players[i] maps/mp/zombies/_zm_zonemgr::entity_in_zone("openhouse1_backyard_zone")) - { - level.green_backyard++; - i++; - continue; - } - if(players[i] maps/mp/zombies/_zm_zonemgr::entity_in_zone("openhouse2_backyard_zone")) - { - level.yellow_backyard++; - i++; - continue; - } - if(players[i] maps/mp/zombies/_zm_zonemgr::entity_in_zone("culdesac_green_zone") || players[i] maps/mp/zombies/_zm_zonemgr::entity_in_zone("culdesac_yellow_zone")) - { - level.culdesac++; - i++; - continue; - } - level.other++; - } - i++; - } -} - -house_clip( clips, connect ) //checked changed to match cerberus output -{ - i = 0; - while ( i < clips.size ) - { - if(connect) - { - clips[i] notsolid(); - clips[i] connectpaths(); - i++; - continue; - } - clips[i] solid(); - clips[i] disconnectpaths(); - i++; - } -} - -setup_rex_starts() //checked matches cerberus output -{ - add_gametype( "zstandard", ::dummy, "zstandard", ::dummy ); - add_gameloc( "nuked", ::dummy, "nuked", ::dummy ); -} - -dummy() //checked matches cerberus output -{ -} - -precache_team_characters() //checked matches cerberus output -{ - precachemodel( "c_zom_player_cdc_fb" ); - precachemodel( "c_zom_hazmat_viewhands_light" ); - precachemodel( "c_zom_player_cia_fb" ); - precachemodel( "c_zom_suit_viewhands" ); -} - -give_team_characters() //checked matches cerberus output -{ - if ( isDefined( level.hotjoin_player_setup ) && [[ level.hotjoin_player_setup ]]( "c_zom_suit_viewhands" ) ) - { - return; - } - self detachall(); - self set_player_is_female( 0 ); - if ( is_true( level.should_use_cia ) ) - { - self setmodel( "c_zom_player_cia_fb" ); - self setviewmodel( "c_zom_suit_viewhands" ); - self.characterindex = 0; - } - else - { - self setmodel( "c_zom_player_cdc_fb" ); - self setviewmodel( "c_zom_hazmat_viewhands_light" ); - self.characterindex = 1; - } - self setmovespeedscale( 1 ); - self setsprintduration( 4 ); - self setsprintcooldown( 0 ); - self set_player_tombstone_index(); -} - -initcharacterstartindex() //checked matches cerberus output -{ - level.characterstartindex = randomint( 4 ); -} - -selectcharacterindextouse() //checked matchers cerberus output -{ - if ( level.characterstartindex >= 4 ) - { - level.characterstartindex = 0; - } - self.characterindex = level.characterstartindex; - level.characterstartindex++; - return self.characterindex; -} - -givecustomloadout( takeallweapons, alreadyspawned ) //checked matches cerberus output -{ - self giveweapon( "knife_zm" ); - self give_start_weapon( 1 ); -} - -nuked_zone_init() //checked matches cerberus output -{ - flag_init( "always_on" ); - flag_set( "always_on" ); - add_adjacent_zone( "culdesac_yellow_zone", "culdesac_green_zone", "always_on" ); - add_adjacent_zone( "culdesac_yellow_zone", "openhouse2_f1_zone", "culdesac_2_openhouse2_f1" ); - add_adjacent_zone( "openhouse2_backyard_zone", "openhouse2_f1_zone", "openhouse2_f1_2_openhouse2_backyard" ); - add_adjacent_zone( "openhouse2_f1_zone", "openhouse2_f2_zone", "openhouse2_f1_2_openhouse2_f2" ); - add_adjacent_zone( "openhouse2_backyard_zone", "openhouse2_f2_zone", "openhouse2_f1_2_openhouse2_f2" ); - add_adjacent_zone( "openhouse2_backyard_zone", "openhouse2_f2_zone", "openhouse2_backyard_2_openhouse2_f2" ); - add_adjacent_zone( "culdesac_green_zone", "openhouse1_f1_zone", "culdesac_2_openhouse1_f1" ); - add_adjacent_zone( "openhouse1_f1_zone", "openhouse1_backyard_zone", "openhouse1_f1_2_openhouse1_backyard" ); - add_adjacent_zone( "openhouse1_f2_zone", "openhouse1_f1_zone", "openhouse1_f2_openhouse1_f1" ); - add_adjacent_zone( "openhouse1_f2_zone", "openhouse1_backyard_zone", "openhouse1_f2_openhouse1_f1" ); - add_adjacent_zone( "openhouse1_backyard_zone", "openhouse1_f2_zone", "openhouse1_backyard_2_openhouse1_f2" ); - add_adjacent_zone( "culdesac_yellow_zone", "truck_zone", "culdesac_2_truck" ); - add_adjacent_zone( "culdesac_green_zone", "truck_zone", "culdesac_2_truck" ); - add_adjacent_zone( "openhouse2_backyard_zone", "ammo_door_zone", "openhouse2_backyard_2_ammo_door" ); -} - -include_powerups() //checked matches cerberus output -{ - include_powerup( "nuke" ); - include_powerup( "insta_kill" ); - include_powerup( "double_points" ); - include_powerup( "full_ammo" ); - include_powerup( "fire_sale" ); -} - -include_perks() //checked matches cerberus output -{ -} - -include_equipment_for_level() //checked matches cerberus output -{ -} - -include_weapons() //checked matches cerberus output -{ - include_weapon( "knife_zm", 0 ); - include_weapon( "frag_grenade_zm", 0 ); - include_weapon( "claymore_zm", 0 ); - include_weapon( "sticky_grenade_zm", 0 ); - include_weapon( "m1911_zm", 0 ); - include_weapon( "m1911_upgraded_zm", 0 ); - include_weapon( "python_zm" ); - include_weapon( "python_upgraded_zm", 0 ); - include_weapon( "judge_zm" ); - include_weapon( "judge_upgraded_zm", 0 ); - include_weapon( "kard_zm" ); - include_weapon( "kard_upgraded_zm", 0 ); - include_weapon( "fiveseven_zm" ); - include_weapon( "fiveseven_upgraded_zm", 0 ); - include_weapon( "beretta93r_zm", 0 ); - include_weapon( "beretta93r_upgraded_zm", 0 ); - include_weapon( "fivesevendw_zm" ); - include_weapon( "fivesevendw_upgraded_zm", 0 ); - include_weapon( "ak74u_zm", 0 ); - include_weapon( "ak74u_upgraded_zm", 0 ); - include_weapon( "mp5k_zm", 0 ); - include_weapon( "mp5k_upgraded_zm", 0 ); - include_weapon( "qcw05_zm" ); - include_weapon( "qcw05_upgraded_zm", 0 ); - include_weapon( "870mcs_zm", 0 ); - include_weapon( "870mcs_upgraded_zm", 0 ); - include_weapon( "rottweil72_zm", 0 ); - include_weapon( "rottweil72_upgraded_zm", 0 ); - include_weapon( "saiga12_zm" ); - include_weapon( "saiga12_upgraded_zm", 0 ); - include_weapon( "srm1216_zm" ); - include_weapon( "srm1216_upgraded_zm", 0 ); - include_weapon( "m14_zm", 0 ); - include_weapon( "m14_upgraded_zm", 0 ); - include_weapon( "saritch_zm" ); - include_weapon( "saritch_upgraded_zm", 0 ); - include_weapon( "m16_zm", 0 ); - include_weapon( "m16_gl_upgraded_zm", 0 ); - include_weapon( "xm8_zm" ); - include_weapon( "xm8_upgraded_zm", 0 ); - include_weapon( "type95_zm" ); - include_weapon( "type95_upgraded_zm", 0 ); - include_weapon( "tar21_zm" ); - include_weapon( "tar21_upgraded_zm", 0 ); - include_weapon( "galil_zm" ); - include_weapon( "galil_upgraded_zm", 0 ); - include_weapon( "fnfal_zm" ); - include_weapon( "fnfal_upgraded_zm", 0 ); - include_weapon( "dsr50_zm" ); - include_weapon( "dsr50_upgraded_zm", 0 ); - include_weapon( "barretm82_zm" ); - include_weapon( "barretm82_upgraded_zm", 0 ); - include_weapon( "rpd_zm" ); - include_weapon( "rpd_upgraded_zm", 0 ); - include_weapon( "hamr_zm" ); - include_weapon( "hamr_upgraded_zm", 0 ); - include_weapon( "usrpg_zm" ); - include_weapon( "usrpg_upgraded_zm", 0 ); - include_weapon( "m32_zm" ); - include_weapon( "m32_upgraded_zm", 0 ); - include_weapon( "hk416_zm" ); - include_weapon( "hk416_upgraded_zm", 0 ); - include_weapon( "lsat_zm" ); - include_weapon( "lsat_upgraded_zm", 0 ); - include_weapon( "cymbal_monkey_zm" ); - include_weapon( "ray_gun_zm" ); - include_weapon( "ray_gun_upgraded_zm", 0 ); - include_weapon( "tazer_knuckles_zm", 0 ); - include_weapon( "knife_ballistic_no_melee_zm", 0 ); - include_weapon( "knife_ballistic_no_melee_upgraded_zm", 0 ); - include_weapon( "knife_ballistic_zm" ); - include_weapon( "knife_ballistic_upgraded_zm", 0 ); - include_weapon( "knife_ballistic_bowie_zm", 0 ); - include_weapon( "knife_ballistic_bowie_upgraded_zm", 0 ); - level._uses_retrievable_ballisitic_knives = 1; - add_limited_weapon( "m1911_zm", 0 ); - add_limited_weapon( "knife_ballistic_zm", 1 ); - add_limited_weapon( "jetgun_zm", 1 ); - add_limited_weapon( "ray_gun_zm", 4 ); - add_limited_weapon( "ray_gun_upgraded_zm", 4 ); - add_limited_weapon( "knife_ballistic_upgraded_zm", 0 ); - add_limited_weapon( "knife_ballistic_no_melee_zm", 0 ); - add_limited_weapon( "knife_ballistic_no_melee_upgraded_zm", 0 ); - add_limited_weapon( "knife_ballistic_bowie_zm", 0 ); - add_limited_weapon( "knife_ballistic_bowie_upgraded_zm", 0 ); - if ( is_true( level.raygun2_included ) ) - { - include_weapon( "raygun_mark2_zm" ); - include_weapon( "raygun_mark2_upgraded_zm", 0 ); - add_weapon_to_content( "raygun_mark2_zm", "dlc3" ); - add_limited_weapon( "raygun_mark2_zm", 1 ); - add_limited_weapon( "raygun_mark2_upgraded_zm", 1 ); - } -} - -offhand_weapon_overrride() //checked matches cerberus output -{ - register_lethal_grenade_for_level( "frag_grenade_zm" ); - register_lethal_grenade_for_level( "sticky_grenade_zm" ); - level.zombie_lethal_grenade_player_init = "frag_grenade_zm"; - register_tactical_grenade_for_level( "cymbal_monkey_zm" ); - level.zombie_tactical_grenade_player_init = undefined; - register_placeable_mine_for_level( "claymore_zm" ); - level.zombie_placeable_mine_player_init = undefined; - register_melee_weapon_for_level( "knife_zm" ); - register_melee_weapon_for_level( "bowie_knife_zm" ); - register_melee_weapon_for_level( "tazer_knuckles_zm" ); - level.zombie_melee_weapon_player_init = "knife_zm"; - level.zombie_equipment_player_init = undefined; -} - -offhand_weapon_give_override( str_weapon ) //checked matches cerberus output -{ - self endon( "death" ); - if ( is_tactical_grenade( str_weapon ) && isDefined( self get_player_tactical_grenade() ) && !self is_player_tactical_grenade( str_weapon ) ) - { - self setweaponammoclip( self get_player_tactical_grenade(), 0 ); - self takeweapon( self get_player_tactical_grenade() ); - } - return 0; -} - -custom_add_weapons() //checked matches cerberus output -{ - add_zombie_weapon( "m1911_zm", "m1911_upgraded_zm", &"ZOMBIE_WEAPON_M1911", 50, "", "", undefined ); - add_zombie_weapon( "python_zm", "python_upgraded_zm", &"ZOMBIE_WEAPON_PYTHON", 50, "wpck_python", "", undefined, 1 ); - add_zombie_weapon( "judge_zm", "judge_upgraded_zm", &"ZOMBIE_WEAPON_JUDGE", 50, "wpck_judge", "", undefined, 1 ); - add_zombie_weapon( "kard_zm", "kard_upgraded_zm", &"ZOMBIE_WEAPON_KARD", 50, "wpck_kap", "", undefined, 1 ); - add_zombie_weapon( "fiveseven_zm", "fiveseven_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVEN", 50, "wpck_57", "", undefined, 1 ); - add_zombie_weapon( "beretta93r_zm", "beretta93r_upgraded_zm", &"ZOMBIE_WEAPON_BERETTA93r", 1000, "", "", undefined ); - add_zombie_weapon( "fivesevendw_zm", "fivesevendw_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVENDW", 50, "wpck_duel57", "", undefined, 1 ); - add_zombie_weapon( "ak74u_zm", "ak74u_upgraded_zm", &"ZOMBIE_WEAPON_AK74U", 1200, "smg", "", undefined ); - add_zombie_weapon( "mp5k_zm", "mp5k_upgraded_zm", &"ZOMBIE_WEAPON_MP5K", 1000, "smg", "", undefined ); - add_zombie_weapon( "qcw05_zm", "qcw05_upgraded_zm", &"ZOMBIE_WEAPON_QCW05", 50, "wpck_chicom", "", undefined, 1 ); - add_zombie_weapon( "870mcs_zm", "870mcs_upgraded_zm", &"ZOMBIE_WEAPON_870MCS", 1500, "shotgun", "", undefined ); - add_zombie_weapon( "rottweil72_zm", "rottweil72_upgraded_zm", &"ZOMBIE_WEAPON_ROTTWEIL72", 500, "shotgun", "", undefined ); - add_zombie_weapon( "saiga12_zm", "saiga12_upgraded_zm", &"ZOMBIE_WEAPON_SAIGA12", 50, "wpck_saiga12", "", undefined, 1 ); - add_zombie_weapon( "srm1216_zm", "srm1216_upgraded_zm", &"ZOMBIE_WEAPON_SRM1216", 50, "wpck_m1216", "", undefined, 1 ); - add_zombie_weapon( "m14_zm", "m14_upgraded_zm", &"ZOMBIE_WEAPON_M14", 500, "rifle", "", undefined ); - add_zombie_weapon( "saritch_zm", "saritch_upgraded_zm", &"ZOMBIE_WEAPON_SARITCH", 50, "wpck_sidr", "", undefined, 1 ); - add_zombie_weapon( "m16_zm", "m16_gl_upgraded_zm", &"ZOMBIE_WEAPON_M16", 1200, "burstrifle", "", undefined ); - add_zombie_weapon( "xm8_zm", "xm8_upgraded_zm", &"ZOMBIE_WEAPON_XM8", 50, "wpck_m8a1", "", undefined, 1 ); - add_zombie_weapon( "type95_zm", "type95_upgraded_zm", &"ZOMBIE_WEAPON_TYPE95", 50, "wpck_type25", "", undefined, 1 ); - add_zombie_weapon( "tar21_zm", "tar21_upgraded_zm", &"ZOMBIE_WEAPON_TAR21", 50, "wpck_x95l", "", undefined, 1 ); - add_zombie_weapon( "galil_zm", "galil_upgraded_zm", &"ZOMBIE_WEAPON_GALIL", 50, "wpck_galil", "", undefined, 1 ); - add_zombie_weapon( "fnfal_zm", "fnfal_upgraded_zm", &"ZOMBIE_WEAPON_FNFAL", 50, "wpck_fal", "", undefined, 1 ); - add_zombie_weapon( "dsr50_zm", "dsr50_upgraded_zm", &"ZOMBIE_WEAPON_DR50", 50, "wpck_dsr50", "", undefined, 1 ); - add_zombie_weapon( "barretm82_zm", "barretm82_upgraded_zm", &"ZOMBIE_WEAPON_BARRETM82", 50, "sniper", "", undefined ); - add_zombie_weapon( "rpd_zm", "rpd_upgraded_zm", &"ZOMBIE_WEAPON_RPD", 50, "wpck_rpd", "", undefined, 1 ); - add_zombie_weapon( "hamr_zm", "hamr_upgraded_zm", &"ZOMBIE_WEAPON_HAMR", 50, "wpck_hamr", "", undefined, 1 ); - add_zombie_weapon( "frag_grenade_zm", undefined, &"ZOMBIE_WEAPON_FRAG_GRENADE", 250, "grenade", "", 250 ); - add_zombie_weapon( "sticky_grenade_zm", undefined, &"ZOMBIE_WEAPON_STICKY_GRENADE", 250, "grenade", "", 250 ); - add_zombie_weapon( "claymore_zm", undefined, &"ZOMBIE_WEAPON_CLAYMORE", 1000, "grenade", "", undefined ); - add_zombie_weapon( "usrpg_zm", "usrpg_upgraded_zm", &"ZOMBIE_WEAPON_USRPG", 50, "wpck_rpg", "", undefined, 1 ); - add_zombie_weapon( "m32_zm", "m32_upgraded_zm", &"ZOMBIE_WEAPON_M32", 50, "wpck_m32", "", undefined, 1 ); - add_zombie_weapon( "cymbal_monkey_zm", undefined, &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 ); - add_zombie_weapon( "ray_gun_zm", "ray_gun_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN", 10000, "wpck_ray", "", undefined, 1 ); - add_zombie_weapon( "knife_ballistic_zm", "knife_ballistic_upgraded_zm", &"ZOMBIE_WEAPON_KNIFE_BALLISTIC", 10, "sickle", "", undefined ); - add_zombie_weapon( "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", &"ZOMBIE_WEAPON_KNIFE_BALLISTIC", 10, "wpck_knife", "", undefined, 1 ); - add_zombie_weapon( "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", &"ZOMBIE_WEAPON_KNIFE_BALLISTIC", 10, "sickle", "", undefined ); - add_zombie_weapon( "tazer_knuckles_zm", undefined, &"ZOMBIE_WEAPON_TAZER_KNUCKLES", 100, "tazerknuckles", "", undefined ); - add_zombie_weapon( "hk416_zm", "hk416_upgraded_zm", &"ZOMBIE_WEAPON_HK416", 100, "", "", undefined ); - add_zombie_weapon( "lsat_zm", "lsat_upgraded_zm", &"ZOMBIE_WEAPON_LSAT", 100, "", "", undefined ); - if ( is_true( level.raygun2_included ) ) - { - add_zombie_weapon( "raygun_mark2_zm", "raygun_mark2_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN_MARK2", 10000, "raygun_mark2", "", undefined ); - } -} - -nuked_population_sign_think() //checked partially changed to match cerberus output -{ - tens_model = getent( "counter_tens", "targetname" ); - ones_model = getent( "counter_ones", "targetname" ); - step = 36; - ones = 0; - tens = 0; - local_zombies_killed = 0; - tens_model rotateroll( step, 0.05 ); - ones_model rotateroll( step, 0.05 ); - while ( 1 ) - { - if ( local_zombies_killed < ( level.total_zombies_killed - level.zombie_total_subtract ) ) - { - ones--; - - time = set_dvar_float_if_unset( "scr_dial_rotate_time", "0.5" ); - if ( ones < 0 ) - { - ones = 9; - tens_model rotateroll( 0 - step, time ); - tens_model playsound( "zmb_counter_flip" ); - tens--; - - } - if ( tens < 0 ) - { - tens = 9; - } - ones_model rotateroll( 0 - step, time ); - ones_model playsound( "zmb_counter_flip" ); - ones_model waittill( "rotatedone" ); - level.population_count = ones + ( tens * 10 ); - if(level.population_count == 0 || level.population_count == 33 || level.population_count == 66 || level.population_count == 99) - { - level notify("update_doomsday_clock"); - } - local_zombies_killed++; - } - wait 0.05; - } -} - -assign_lowest_unused_character_index() //checked changed to match cerberus output -{ - charindexarray = []; - charindexarray[0] = 0; - charindexarray[1] = 1; - charindexarray[2] = 2; - charindexarray[3] = 3; - players = get_players(); - if(players.size == 1) - { - charindexarray = array_randomize(charindexarray); - return charindexarray[0]; - } - else if(players.size == 2) - { - foreach(player in players) - { - if(isdefined(player.characterindex)) - { - if(player.characterindex == 0 || player.characterindex == 1) - { - if(randomint(100) > 50) - { - return 2; - } - return 3; - } - if(player.characterindex == 2 || player.characterindex == 3) - { - if(randomint(100) > 50) - { - return 0; - } - return 1; - } - } - } - } - else - { - foreach(player in players) - { - if(isdefined(player.characterindex)) - { - arrayremovevalue(charindexarray, player.characterindex, 0); - } - } - if(charindexarray.size > 0) - { - return charindexarray[0]; - } - } - return 0; -} - -nuked_mannequin_init() //checked partially matches cerberus output did not change -{ - keep_count = 28; - level.mannequin_count = 0; - destructibles = getentarray( "destructible", "targetname" ); - mannequins = nuked_mannequin_filter( destructibles ); - if ( mannequins.size <= 0 ) - { - return; - } - remove_count = mannequins.size - keep_count; - remove_count = clamp( remove_count, 0, remove_count ); - mannequins = array_randomize( mannequins ); - i = 0; - while ( i < remove_count ) - { - /* -/# - assert( isDefined( mannequins[ i ].target ) ); -#/ - */ - collision = getent( mannequins[ i ].target, "targetname" ); - /* -/# - assert( isDefined( collision ) ); -#/ - */ - collision delete(); - mannequins[ i ] delete(); - level.mannequin_count--; - - i++; - } - level waittill( "prematch_over" ); - level.mannequin_time = getTime(); -} - -nuked_mannequin_filter( destructibles ) //checked partially matches cerberus output did not change -{ - mannequins = []; - i = 0; - while ( i < destructibles.size ) - { - destructible = destructibles[ i ]; - if ( issubstr( destructible.destructibledef, "male" ) ) - { - mannequins[ mannequins.size ] = destructible; - level.mannequin_count++; - } - i++; - } - return mannequins; -} - -custom_debris_function() //checked changed to match cerberus output -{ - cost = 1000; - if(isdefined(self.zombie_cost)) - { - cost = self.zombie_cost; - } - while(1) - { - if(isdefined(self.script_noteworthy)) - { - if(self.script_noteworthy == "electric_door" || self.script_noteworthy == "electric_buyable_door") - { - self sethintstring(&"ZOMBIE_NEED_POWER"); - flag_wait("power_on"); - } - } - self set_hint_string(self, "default_buy_door", cost); - self waittill("trigger", who, force); - if(!who usebuttonpressed()) - { - continue; - } - if(who in_revive_trigger()) - { - continue; - } - if(is_player_valid(who)) - { - players = get_players(); - if(who.score >= self.zombie_cost) - { - who maps/mp/zombies/_zm_score::minus_to_player_score(self.zombie_cost); - } - else - { - play_sound_at_pos("no_purchase", self.origin); - who maps/mp/zombies/_zm_audio::create_and_play_dialog("general", "door_deny", undefined, 1); - continue; - } - bbprint("zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", who.name, who.score, level.round_number, self.zombie_cost, self.script_flag, self.origin, "door"); - junk = getentarray(self.target, "targetname"); - if(isdefined(self.script_flag)) - { - tokens = strtok(self.script_flag, ","); - for(i = 0; i < tokens.size; i++) - { - flag_set(tokens[i]); - } - } - play_sound_at_pos("purchase", self.origin); - level notify("junk purchased"); - move_ent = undefined; - clip = undefined; - for(i = 0; i < junk.size; i++) - { - junk[i] connectpaths(); - if(isdefined(junk[i].script_noteworthy)) - { - if(junk[i].script_noteworthy == "clip") - { - clip = junk[i]; - continue; - } - } - struct = undefined; - if(isdefined(junk[i].script_linkto)) - { - struct = getstruct(junk[i].script_linkto, "script_linkname"); - if(isdefined(struct)) - { - move_ent = junk[i]; - junk[i] thread maps/mp/zombies/_zm_blockers::debris_move(struct); - } - else - { - junk[i] delete(); - } - continue; - } - junk[i] delete(); - } - all_trigs = getentarray(self.target, "target"); - for(i = 0; i < all_trigs.size; i++) - { - all_trigs[i] delete(); - } - if(isdefined(clip)) - { - if(isdefined(move_ent)) - { - move_ent waittill("movedone"); - } - clip delete(); - } - break; - } - } -} - -sndgameend() //checked partially changed to match cerberus output -{ - level waittill( "intermission" ); - playsoundatposition( "zmb_endgame", ( 0, 0, 0 ) ); -} - -sndmusiceastereggs() //checked matches cerberus output -{ - level.music_override = 0; - level thread sndmusegg1(); - level thread sndmusegg2(); -} - -sndmusegg1() //checked matches cerberus output -{ - level waittill( "nuke_clock_moved" ); - level waittill( "magic_door_power_up_grabbed" ); - min_hand_model = getent( "clock_min_hand", "targetname" ); - if ( level.population_count == 15 && level.music_override == 0 ) - { - level thread sndmuseggplay( spawn( "script_origin", ( 0, 1, 0 ) ), "zmb_nuked_song_1", 88 ); - } -} - -sndmusegg2() //checked matches cerberus output -{ - origins = []; - origins[ 0 ] = ( -1998, 632, -48 ); - origins[ 1 ] = ( -80, 35, -18 ); - origins[ 2 ] = ( 617, 313, 152 ); - level.meteor_counter = 0; - level.music_override = 0; - i = 0; - while ( i < origins.size ) - { - level thread sndmusegg2_wait( origins[ i ] ); - i++; - } -} - -sndmusegg2_wait( bear_origin ) //checked partially changed to match cerberus output -{ - temp_ent = spawn( "script_origin", bear_origin ); - temp_ent playloopsound( "zmb_meteor_loop" ); - temp_ent thread maps/mp/zombies/_zm_sidequests::fake_use( "main_music_egg_hit", ::sndmusegg2_override ); - temp_ent waittill( "main_music_egg_hit", player ); - temp_ent stoploopsound( 1 ); - player playsound( "zmb_meteor_activate" ); - level.meteor_counter += 1; - if ( level.meteor_counter == 3 ) - { - level thread sndmuseggplay( temp_ent, "zmb_nuked_song_2", 60 ); - } - else - { - wait 1.5; - temp_ent delete(); - } -} - -sndmusegg2_override() //checked matches cerberus output -{ - if ( is_true( level.music_override ) ) - { - return 0; - } - return 1; -} - -sndmusegg3_counter( event, attacker ) //checked partially changed to match cerberus output -{ - if ( level.mannequin_count <= 0 ) - { - return; - } - - level.mannequin_count--; - - if ( level.mannequin_count <= 0 ) - { - while ( is_true( level.music_override ) ) - { - wait 5; - } - level thread sndmuseggplay( spawn( "script_origin", ( 0, 0, 0 ) ), "zmb_nuked_song_3", 80 ); - } -} - -sndmuseggplay( ent, alias, time ) //checked partially changed to match cerberus output -{ - level.music_override = 1; - wait 1; - ent playsound( alias ); - level thread sndeggmusicwait( time ); - level waittill_either( "end_game", "sndSongDone" ); - ent stopsounds(); - wait 0.05; - ent delete(); - level.music_override = 0; -} - -sndeggmusicwait( time ) //checked matches cerberus output -{ - level endon( "end_game" ); - wait time; - level notify( "sndSongDone" ); -} - -nuked_standard_intermission() //checked partially changed to match cerberus output -{ - self closemenu(); - self closeingamemenu(); - level endon( "stop_intermission" ); - self endon( "disconnect" ); - self endon( "death" ); - self notify( "_zombie_game_over" ); - self.score = self.score_total; - self.sessionstate = "intermission"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - self.game_over_bg = newclienthudelem( self ); - self.game_over_bg.x = 0; - self.game_over_bg.y = 0; - self.game_over_bg.horzalign = "fullscreen"; - self.game_over_bg.vertalign = "fullscreen"; - self.game_over_bg.foreground = 1; - self.game_over_bg.sort = 1; - self.game_over_bg setshader( "black", 640, 480 ); - self.game_over_bg.alpha = 1; - clientnotify( "znfg" ); - level thread moon_rocket_follow_path(); - wait 0.1; - self.game_over_bg fadeovertime( 1 ); - self.game_over_bg.alpha = 0; - flag_wait( "rocket_hit_nuketown" ); - self.game_over_bg fadeovertime( 1 ); - self.game_over_bg.alpha = 1; -} - -moon_rocket_follow_path() //checked partially changed to match cerberus output -{ - rocket_start_struct = getstruct( "inertmission_rocket_start", "targetname" ); - rocket_end_struct = getstruct( "inertmission_rocket_end", "targetname" ); - rocket_cam_start_struct = getstruct( "intermission_rocket_cam_start", "targetname" ); - rocket_cam_end_struct = getstruct( "intermission_rocket_cam_end", "targetname" ); - rocket_camera_ent = spawn( "script_model", rocket_cam_start_struct.origin ); - rocket_camera_ent.angles = rocket_cam_start_struct.angles; - rocket = getent( "intermission_rocket", "targetname" ); - rocket show(); - rocket.origin = rocket_start_struct.origin; - camera = spawn( "script_model", rocket_cam_start_struct.origin ); - camera.angles = rocket_cam_start_struct.angles; - camera setmodel( "tag_origin" ); - exploder( 676 ); - players = get_players(); - foreach ( player in players ) - { - player setclientuivisibilityflag( "hud_visible", 0 ); - player thread player_rocket_rumble(); - player thread intermission_rocket_blur(); - player setdepthoffield( 0, 128, 7000, 10000, 6, 1.8 ); - player camerasetposition( camera ); - player camerasetlookat(); - player cameraactivate( 1 ); - } - rocket moveto( rocket_end_struct.origin, 9 ); - rocket rotateto( rocket_end_struct.angles, 11 ); - camera moveto( rocket_cam_end_struct.origin, 9 ); - camera rotateto( rocket_cam_end_struct.angles, 8 ); - playfxontag( level._effect[ "rocket_entry" ], rocket, "tag_fx" ); - playfxontag( level._effect[ "rocket_entry_light" ], rocket, "tag_fx" ); - wait 7.5; - flag_set( "rocket_hit_nuketown" ); -} - -intermission_rocket_blur() //checked matches cerberus output -{ - while ( !flag( "rocket_hit_nuketown" ) ) - { - blur = randomfloatrange( 1, 5 ); - self setblur( blur, 1 ); - wait randomintrange( 1, 3 ); - } -} - -inermission_rocket_init() //checked matches cerberus output -{ - rocket = getent( "intermission_rocket", "targetname" ); - rocket hide(); -} - -player_rocket_rumble() //checked matches cerberus output -{ - while ( !flag( "rocket_hit_nuketown" ) ) - { - self playrumbleonentity( "damage_light" ); - wait 1; - } -} - -bus_taser_blocker() //checked matches cerberus output -{ - trig = getent( "bus_taser_trigger", "targetname" ); - if ( isDefined( trig ) ) - { - clip = getent( trig.target, "targetname" ); - } - trig waittill( "trigger" ); - if ( isDefined( clip ) ) - { - clip delete(); - } -} - -marlton_vo_inside_bunker() //checked matches cerberus output -{ - marlton_bunker_trig = getent( "marlton_bunker_trig", "targetname" ); - marlton_sound_pos = marlton_bunker_trig.origin; - marlton_vo = []; - marlton_vo[ marlton_vo.size ] = "vox_plr_3_pap_wait_0"; - marlton_vo[ marlton_vo.size ] = "vox_plr_3_pap_wait2_0"; - marlton_vo[ marlton_vo.size ] = "vox_plr_3_pap_wait2_2"; - marlton_vo[ marlton_vo.size ] = "vox_plr_3_avogadro_attack_1"; - marlton_vo[ marlton_vo.size ] = "vox_plr_3_avogadro_attack_2"; - marlton_vo[ marlton_vo.size ] = "vox_plr_3_build_add_1"; - marlton_vo[ marlton_vo.size ] = "vox_plr_3_build_pck_bjetgun_0"; - marlton_vo[ marlton_vo.size ] = "vox_plr_3_bus_zom_chase_1"; - marlton_vo[ marlton_vo.size ] = "vox_plr_3_bus_zom_roof_4"; - marlton_vo[ marlton_vo.size ] = "vox_plr_3_cough_0"; - marlton_vo[ marlton_vo.size ] = "vox_plr_3_map_in_fog_0"; - marlton_vo[ marlton_vo.size ] = "vox_plr_3_map_in_fog_1"; - marlton_vo[ marlton_vo.size ] = "vox_plr_3_map_in_fog_2"; - marlton_vo[ marlton_vo.size ] = "vox_plr_3_oh_shit_0_alt01"; - while ( 1 ) - { - marlton_bunker_trig waittill( "trigger" ); - playsoundatposition( marlton_vo[ randomintrange( 0, marlton_vo.size ) ], marlton_sound_pos ); - wait_for_next_round( level.round_number ); - } -} - -wait_for_next_round( current_round ) //checked matches cerberus output -{ - while ( level.round_number <= current_round ) - { - wait 1; - } -} - -moon_transmission_vo() //checked matches cerberus output -{ - start_round = 3; - end_round = 25; - moon_transmission_struct = getstruct( "moon_transmission_struct", "targetname" ); - wait_for_round_range( 3 ); - playsoundatposition( "vox_nuked_tbase_transmission_0", moon_transmission_struct.origin ); - wait_for_round_range( randomintrange( 4, 9 ) ); - playsoundatposition( "vox_nuked_tbase_transmission_1", moon_transmission_struct.origin ); - wait_for_round_range( randomintrange( 10, 17 ) ); - playsoundatposition( "vox_nuked_tbase_transmission_2", moon_transmission_struct.origin ); - wait_for_round_range( randomintrange( 18, 22 ) ); - playsoundatposition( "vox_nuked_tbase_transmission_3", moon_transmission_struct.origin ); - wait_for_round_range( 25 ); - playsoundatposition( "vox_nuked_tbase_transmission_4", moon_transmission_struct.origin ); - flag_set( "moon_transmission_over" ); -} - -wait_for_round_range( round ) //checked matches cerberus output -{ - while ( level.round_number < round ) - { - wait 1; - } -} - -death_to_all_zombies() //checked does not match cerberus output did not change -{ - zombies = getaiarray( level.zombie_team ); - foreach ( zombie in zombies ) - { - if ( !isalive( zombie ) ) - { - } - else - { - if ( isDefined( zombie ) ) - { - zombie dodamage( zombie.health + 666, zombie.origin ); - } - if ( ( index % 3 ) == 0 ) - { - wait_network_frame(); - } - } - } -} - -zombie_eye_glow_change() //checked matches cerberus output -{ - flag_wait( "moon_transmission_over" ); - flag_clear( "spawn_zombies" ); - death_to_all_zombies(); - level.zombie_spawners = getentarray( "zombie_spawner_beyes", "script_noteworthy" ); - if ( isDefined( level._game_module_custom_spawn_init_func ) ) - { - [[ level._game_module_custom_spawn_init_func ]](); - } - flag_set( "spawn_zombies" ); - level setclientfield( "zombie_eye_change", 1 ); -} - -switch_announcer_to_richtofen() //checked matches cerberus output -{ - flag_wait( "moon_transmission_over" ); - sndswitchannouncervox( "richtofen" ); -} - -bus_random_horn() //checked matches cerberus output -{ - horn_struct = getstruct( "bus_horn_struct", "targetname" ); - wait_for_round_range( randomintrange( 5, 10 ) ); - playsoundatposition( "zmb_bus_horn_leave", horn_struct.origin ); -} - -fake_lighting_cleanup() //checked matches cerberus output -{ - ent = getent( "nuke_reflection", "targetname" ); - if ( isDefined( ent ) ) - { - ent delete(); - } -} - -nuked_collision_patch() //checked partially changed to match cerberus output -{ - minimap_upperr = spawn( "script_origin", ( 2146, 1354, 384 ) ); - minimap_upperr.targetname = "minimap_corner"; - maps/mp/_compass::setupminimap( "compass_map_zm_nuked" ); - collision1 = spawn( "script_model", ( -48, -700, 100 ) ); - collision1 setmodel( "collision_wall_128x128x10_standard" ); - collision1.angles = ( 0, 0, 0 ); - collision1 ghost(); - collision2 = spawn( "script_model", ( 11, -759, 100 ) ); - collision2 setmodel( "collision_wall_128x128x10_standard" ); - collision2.angles = vectorScale( ( 0, 1, 0 ), 270 ); - collision2 ghost(); - collision3 = spawn( "script_model", ( -48, -818, 100 ) ); - collision3 setmodel( "collision_wall_128x128x10_standard" ); - collision3.angles = ( 0, 0, 0 ); - collision3 ghost(); - collision4 = spawn( "script_model", ( -107, -759, 100 ) ); - collision4 setmodel( "collision_wall_128x128x10_standard" ); - collision4.angles = vectorScale( ( 0, 1, 0 ), 270 ); - collision4 ghost(); - collision5 = spawn( "script_model", ( -48, -759, 169 ) ); - collision5 setmodel( "collision_wall_128x128x10_standard" ); - collision5.angles = ( 0, 270, 90 ); - collision5 ghost(); - collision6 = spawn( "script_model", ( -48, -759, 31 ) ); - collision6 setmodel( "collision_wall_128x128x10_standard" ); - collision6.angles = ( 0, 270, 90 ); - collision6 ghost(); - collision7 = spawn( "script_model", ( -490, 963, 63 ) ); - collision7 setmodel( "collision_player_256x256x10" ); - collision7.angles = ( 0, 25.2, -90 ); - collision7 ghost(); - collision8 = spawn( "script_model", ( 752, 1079, 120 ) ); - collision8 setmodel( "collision_player_512x512x10" ); - collision8.angles = vectorScale( ( 0, 0, -1 ), 90 ); - collision8 ghost(); - collision9 = spawn( "script_model", ( -1349, 1016, 0 ) ); - collision9 setmodel( "collision_wall_128x128x10_standard" ); - collision9.angles = vectorScale( ( 0, 1, 0 ), 339.8 ); - collision9 ghost(); - collision10 = spawn( "script_model", ( 132, 280, 25 ) ); - collision10 setmodel( "collision_wall_128x128x10_standard" ); - collision10.angles = vectorScale( ( 0, 1, 0 ), 20.4 ); - collision10 ghost(); -} - -nuked_special_weapon_magicbox_check( weapon ) //checked matches cerberus output -{ - if ( is_true( level.raygun2_included ) ) - { - if ( weapon == "ray_gun_zm" ) - { - if ( self has_weapon_or_upgrade( "raygun_mark2_zm" ) ) - { - return 0; - } - } - if ( weapon == "raygun_mark2_zm" ) - { - if ( self has_weapon_or_upgrade( "ray_gun_zm" ) ) - { - return 0; - } - if ( randomint( 100 ) >= 33 ) - { - return 0; - } - } - } - return 1; -} - - - diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zm_nuked_ffotd.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zm_nuked_ffotd.gsc deleted file mode 100644 index 5c9cb83..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zm_nuked_ffotd.gsc +++ /dev/null @@ -1,117 +0,0 @@ -#include maps/mp/zombies/_zm_ffotd; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -main_start() -{ - precachemodel( "collision_wall_128x128x10_standard" ); - precachemodel( "collision_player_256x256x10" ); - precachemodel( "collision_wall_64x64x10_standard" ); - if ( isDefined( level.use_swipe_protection ) ) - { - onplayerconnect_callback( ::claymore_watch_swipes ); - } -} - -main_end() -{ - setdvar( "zombiemode_path_minz_bias", 28 ); - collision7 = spawn( "script_model", ( -490, 963, 63 ) ); - collision7 setmodel( "collision_player_256x256x10" ); - collision7.angles = ( 0, 25,2, -90 ); - collision7 ghost(); - collision9 = spawn( "script_model", ( -1349, 1016, 0 ) ); - collision9 setmodel( "collision_wall_128x128x10_standard" ); - collision9.angles = vectorScale( ( 0, 1, 0 ), 339,8 ); - collision9 ghost(); - collision11 = spawn( "script_model", ( 1074, 584, 126 ) ); - collision11 setmodel( "collision_wall_64x64x10_standard" ); - collision11.angles = vectorScale( ( 0, 1, 0 ), 15 ); - collision11 ghost(); - collision12 = spawn( "script_model", ( 380, -112, 150 ) ); - collision12 setmodel( "collision_wall_128x128x10_standard" ); - collision12.angles = vectorScale( ( 0, 1, 0 ), 275 ); - collision12 ghost(); - collision13 = spawn( "script_model", ( 501, 212, 64 ) ); - collision13 setmodel( "collision_wall_64x64x10_standard" ); - collision13.angles = ( 0, 10,8, 90 ); - collision13 ghost(); - level thread prone_under_garage_door_exploit(); -} - -prone_under_garage_door_exploit() -{ - zombie_trigger_origin = ( -679, 339, -40 ); - zombie_trigger_radius = 100; - zombie_trigger_height = 128; - player_trigger_origin = ( -750, 189, -60 ); - player_trigger_radius = 72; - zombie_goto_point = ( -863, 320, -40 ); - level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); - zombie_trigger_origin = ( -652,6, 143,2, -58,6015 ); - zombie_trigger_radius = 85; - zombie_trigger_height = 128; - player_trigger_origin = ( -741, 177, -52 ); - player_trigger_radius = 35; - zombie_goto_point = ( -729,61, 156,24, -50 ); - level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); - zombie_trigger_origin = ( -863, 320, -20 ); - zombie_trigger_radius = 150; - zombie_trigger_height = 128; - player_trigger_origin = ( -750, 189, -60 ); - player_trigger_radius = 72; - zombie_goto_point = ( -804,61, 198,24, -40 ); - level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); -} - -claymore_watch_swipes() -{ - self endon( "disconnect" ); - self notify( "claymore_watch_swipes" ); - self endon( "claymore_watch_swipes" ); - while ( 1 ) - { - self waittill( "weapon_change", weapon ); - if ( is_placeable_mine( weapon ) ) - { - self.mine_damage = 0; - self thread watch_melee_swipes( weapon ); - } - } -} - -watch_melee_swipes( weapname ) -{ - self endon( "weapon_change" ); - self endon( "death" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "melee_swipe", zombie ); - self.mine_damage++; - if ( self.mine_damage > 5 ) - { - self.mine_damage = 0; - ammo = self getweaponammoclip( weapname ); - if ( ammo >= 1 ) - { - self setweaponammoclip( weapname, ammo - 1 ); - if ( ammo == 1 ) - { - self setweaponammoclip( weapname, ammo - 1 ); - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons[ 0 ] ) ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - } - break; - } - else - { - self takeweapon( weapname ); - } - } - } -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zm_nuked_fx.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zm_nuked_fx.gsc deleted file mode 100644 index 7d27adf..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zm_nuked_fx.gsc +++ /dev/null @@ -1,137 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); - -precache_util_fx() -{ -} - -precache_scripted_fx() -{ - level._effect[ "powerup_on" ] = loadfx( "misc/fx_zombie_powerup_on" ); - level._effect[ "powerup_on_solo" ] = loadfx( "misc/fx_zombie_powerup_solo_on" ); - level._effect[ "powerup_on_caution" ] = loadfx( "misc/fx_zombie_powerup_caution_on" ); - level._effect[ "blue_eyes" ] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" ); - level._effect[ "large_ceiling_dust" ] = loadfx( "maps/zombie/fx_dust_ceiling_impact_lg_mdbrown" ); - level._effect[ "lght_marker" ] = loadfx( "maps/zombie/fx_zombie_coast_marker" ); - level._effect[ "lght_marker_flare" ] = loadfx( "maps/zombie/fx_zombie_coast_marker_fl" ); - level._effect[ "poltergeist" ] = loadfx( "misc/fx_zombie_couch_effect" ); - level._effect[ "zomb_gib" ] = loadfx( "maps/zombie/fx_zombie_dog_explosion" ); - level._effect[ "perk_meteor" ] = loadfx( "maps/zombie/fx_zmb_trail_perk_meteor" ); - level._effect[ "fire_devil_lg" ] = loadfx( "maps/zombie/fx_zmb_fire_devil_lg" ); - level._effect[ "fire_devil_sm" ] = loadfx( "maps/zombie/fx_zmb_fire_devil_sm" ); - level._effect[ "rocket_entry" ] = loadfx( "maps/zombie/fx_zmb_nuke_reentry" ); - level._effect[ "rocket_entry_light" ] = loadfx( "maps/zombie/fx_zmb_nuke_rocket_light" ); - level._effect[ "fx_mp_elec_spark_burst_xsm_thin" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin" ); - level._effect[ "wire_spark" ] = loadfx( "electrical/fx_elec_wire_spark_burst_xsm" ); -} - -precache_createfx_fx() -{ - level._effect[ "fx_zm_nuked_exp_perk_impact_int_shockwave" ] = loadfx( "explosions/fx_zm_nuked_exp_perk_impact_int_shockwave" ); - level._effect[ "fx_zm_nuked_exp_perk_impact_int" ] = loadfx( "explosions/fx_zm_nuked_exp_perk_impact_int" ); - level._effect[ "fx_zm_nuked_exp_perk_impact_ext" ] = loadfx( "explosions/fx_zm_nuked_exp_perk_impact_ext" ); - level._effect[ "fx_zm_nuked_perk_impact_ceiling_dust" ] = loadfx( "dirt/fx_zm_nuked_perk_impact_ceiling_dust" ); - level._effect[ "fx_lf_zmb_nuke_sun" ] = loadfx( "lens_flares/fx_lf_zmb_nuke_sun" ); - level._effect[ "fx_zm_nuked_water_stream_radioactive_thin" ] = loadfx( "water/fx_zm_nuked_water_drip_radioactive" ); - level._effect[ "fx_zm_nuked_water_stream_radioactive_spatter" ] = loadfx( "water/fx_zm_nuked_water_drip_radioactive_spatter" ); - level._effect[ "fx_zmb_nuke_nuclear_lightning_runner" ] = loadfx( "maps/zombie/fx_zmb_nuke_nuclear_lightning_runner" ); - level._effect[ "fx_zmb_nuke_radioactive_embers_crater" ] = loadfx( "maps/zombie/fx_zmb_nuke_radioactive_embers_crater" ); - level._effect[ "fx_zmb_nuke_radioactive_embers" ] = loadfx( "maps/zombie/fx_zmb_nuke_radioactive_embers" ); - level._effect[ "fx_zmb_nuke_linger_core" ] = loadfx( "maps/zombie/fx_zmb_nuke_linger_core" ); - level._effect[ "fx_zmb_nuke_sand_blowing_lg" ] = loadfx( "maps/zombie/fx_zmb_nuke_sand_blowing_lg" ); - level._effect[ "fx_zmb_nuke_debris_streamer_volume" ] = loadfx( "maps/zombie/fx_zmb_nuke_debris_streamer_volume" ); - level._effect[ "fx_zmb_nuke_burning_ash_gusty" ] = loadfx( "maps/zombie/fx_zmb_nuke_burning_ash_gusty" ); - level._effect[ "fx_zmb_nuke_radioactive_ash_gusty" ] = loadfx( "maps/zombie/fx_zmb_nuke_radioactive_ash_gusty" ); - level._effect[ "fx_zmb_nuke_sand_windy_hvy_md" ] = loadfx( "maps/zombie/fx_zmb_nuke_sand_windy_hvy_md" ); - level._effect[ "fx_zmb_nuke_sand_windy_hvy_sm" ] = loadfx( "maps/zombie/fx_zmb_nuke_sand_windy_hvy_sm" ); - level._effect[ "fx_embers_falling_md" ] = loadfx( "env/fire/fx_embers_falling_md" ); - level._effect[ "fx_embers_falling_sm" ] = loadfx( "env/fire/fx_embers_falling_sm" ); - level._effect[ "fx_ash_embers_falling_radioactive_md" ] = loadfx( "debris/fx_ash_embers_falling_radioactive_md" ); - level._effect[ "fx_ash_embers_falling_radioactive_sm" ] = loadfx( "debris/fx_ash_embers_falling_radioactive_sm" ); - level._effect[ "fx_mp_elec_spark_burst_xsm_thin_runner" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin_runner" ); - level._effect[ "fx_elec_spark_wire_xsm_runner" ] = loadfx( "electrical/fx_elec_spark_wire_xsm_runner" ); - level._effect[ "fx_zm_elec_arc_vert" ] = loadfx( "electrical/fx_zm_elec_arc_vert" ); - level._effect[ "fx_elec_transformer_sparks_runner" ] = loadfx( "electrical/fx_elec_transformer_sparks_runner" ); - level._effect[ "fx_zmb_nuke_fire_windblown_md" ] = loadfx( "fire/fx_zmb_nuke_fire_windblown_md" ); - level._effect[ "fx_fire_xsm" ] = loadfx( "fire/fx_fire_xsm_no_flicker" ); - level._effect[ "fx_fire_line_xsm" ] = loadfx( "fire/fx_fire_line_xsm_no_flicker" ); - level._effect[ "fx_fire_sm_smolder" ] = loadfx( "fire/fx_zm_fire_sm_smolder_near" ); - level._effect[ "fx_fire_line_sm" ] = loadfx( "fire/fx_nic_fire_line_sm" ); - level._effect[ "fx_fire_wall_wood_ext_md" ] = loadfx( "fire/fx_fire_wall_wood_ext_md" ); - level._effect[ "fx_fire_ceiling_md" ] = loadfx( "fire/fx_nic_fire_ceiling_md" ); - level._effect[ "fx_fire_ceiling_edge_md" ] = loadfx( "fire/fx_nic_fire_ceiling_edge_md" ); - level._effect[ "fx_nic_fire_ceiling_edge_sm" ] = loadfx( "fire/fx_nic_fire_ceiling_edge_sm" ); - level._effect[ "fx_nic_fire_building_md_dist" ] = loadfx( "fire/fx_nic_fire_building_md_dist" ); - level._effect[ "fx_fire_fireplace_md" ] = loadfx( "fire/fx_fire_fireplace_md" ); - level._effect[ "fx_fire_wood_floor_int" ] = loadfx( "fire/fx_fire_wood_floor_int" ); - level._effect[ "fx_fire_ceiling_rafter_md" ] = loadfx( "fire/fx_nic_fire_ceiling_rafter_md" ); - level._effect[ "fx_fire_eaves_md" ] = loadfx( "fire/fx_nic_fire_eaves_md" ); - level._effect[ "fx_fire_eaves_md_left" ] = loadfx( "fire/fx_nic_fire_eaves_md_left" ); - level._effect[ "fx_fire_eaves_md_right" ] = loadfx( "fire/fx_nic_fire_eaves_md_right" ); - level._effect[ "fx_fire_line_xsm_pole" ] = loadfx( "fire/fx_nic_fire_line_xsm_pole" ); - level._effect[ "fx_fire_line_sm_pole" ] = loadfx( "fire/fx_nic_fire_line_sm_pole" ); - level._effect[ "fx_fire_pole_md_long" ] = loadfx( "fire/fx_nic_fire_pole_md_long" ); - level._effect[ "fx_fire_smolder_area_sm" ] = loadfx( "fire/fx_fire_smolder_area_sm" ); - level._effect[ "fx_smk_wood_sm_black" ] = loadfx( "smoke/fx_smk_wood_sm_black" ); - level._effect[ "fx_smk_fire_lg_black" ] = loadfx( "smoke/fx_smk_fire_lg_black" ); - level._effect[ "fx_smk_plume_md_blk_wispy_dist" ] = loadfx( "smoke/fx_smk_plume_md_blk_wispy_dist" ); - level._effect[ "fx_smk_smolder_rubble_md_int" ] = loadfx( "smoke/fx_smk_smolder_rubble_md_int_cheap" ); - level._effect[ "fx_smk_hallway_md_dark" ] = loadfx( "smoke/fx_smk_hallway_md_dark" ); - level._effect[ "fx_smk_linger_lit" ] = loadfx( "smoke/fx_smk_linger_lit" ); - level._effect[ "fx_smk_linger_lit_slow" ] = loadfx( "smoke/fx_smk_linger_lit_slow" ); - level._effect[ "fx_smk_linger_lit_slow_bright" ] = loadfx( "smoke/fx_smk_linger_lit_slow_bright" ); - level._effect[ "fx_smk_linger_lit_z" ] = loadfx( "smoke/fx_smk_linger_lit_z" ); - level._effect[ "fx_smk_smolder_gray_fast" ] = loadfx( "smoke/fx_smk_smolder_gray_fast" ); - level._effect[ "fx_smk_smolder_gray_slow" ] = loadfx( "smoke/fx_smk_smolder_gray_slow" ); - level._effect[ "fx_zmb_fog_low_radiation_140x300" ] = loadfx( "fog/fx_zmb_fog_low_radiation_140x300" ); - level._effect[ "fx_zm_nuked_light_ray_md_wide" ] = loadfx( "light/fx_zm_nuked_light_ray_md_wide" ); - level._effect[ "fx_zm_nuked_light_ray_md_wide_streak" ] = loadfx( "light/fx_zm_nuked_light_ray_md_wide_streak" ); - level._effect[ "fx_light_ray_grate_warm" ] = loadfx( "light/fx_zm_nuked_light_ray_streaks" ); - level._effect[ "fx_light_flour_glow_cool_sngl_shrt" ] = loadfx( "light/fx_light_flour_glow_cool_sngl_shrt" ); - level._effect[ "fx_zm_nuked_light_ray_streaks_1s" ] = loadfx( "light/fx_zm_nuked_light_ray_streaks_1s" ); - level._effect[ "fx_zm_nuked_light_ray_md_wide_streak_1s" ] = loadfx( "light/fx_zm_nuked_light_ray_md_wide_streak_1s" ); - level._effect[ "fx_mp_nuked_hose_spray" ] = loadfx( "maps/mp_maps/fx_mp_nuked_hose_spray" ); - level._effect[ "fx_ash_embers_up_lg" ] = loadfx( "debris/fx_ash_embers_up_lg" ); - level._effect[ "fx_ash_burning_falling_interior" ] = loadfx( "debris/fx_ash_burning_falling_interior" ); - level._effect[ "fx_zmb_nuke_fire_med" ] = loadfx( "maps/zombie/fx_zmb_nuke_fire_med" ); - level._effect[ "fx_zmb_tranzit_fire_lrg" ] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_lrg" ); - level._effect[ "fx_zmb_tranzit_fire_med" ] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_med" ); - level._effect[ "fx_cloud_cover_volume" ] = loadfx( "maps/zombie/fx_zmb_nuke_cloud_cover_volume" ); - level._effect[ "fx_cloud_cover_volume_sm" ] = loadfx( "maps/zombie/fx_zmb_nuke_cloud_cover_volume_sm" ); - level._effect[ "fx_cloud_cover_flat" ] = loadfx( "maps/zombie/fx_zmb_nuke_cloud_cover_flat" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "pant01_fast" ] = %fxanim_gp_pant01_fast_anim; - level.scr_anim[ "fxanim_props" ][ "shirt01_fast" ] = %fxanim_gp_shirt01_fast_anim; - level.scr_anim[ "fxanim_props" ][ "sheet_med" ] = %fxanim_gp_cloth_sheet_med_fast_anim; - level.scr_anim[ "fxanim_props" ][ "wirespark_long" ] = %fxanim_gp_wirespark_long_anim; - level.scr_anim[ "fxanim_props" ][ "wirespark_med" ] = %fxanim_gp_wirespark_med_anim; - level.scr_anim[ "fxanim_props" ][ "roaches" ] = %fxanim_gp_roaches_anim; - level.scr_anim[ "fxanim_props" ][ "wht_shutters" ] = %fxanim_zom_nuketown_shutters_anim; - level.scr_anim[ "fxanim_props" ][ "wht_shutters02" ] = %fxanim_zom_nuketown_shutters02_anim; - level.scr_anim[ "fxanim_props" ][ "win_curtains" ] = %fxanim_zom_curtains_anim; - level.scr_anim[ "fxanim_props" ][ "cabinets_brwn" ] = %fxanim_zom_nuketown_cabinets_brwn_anim; - level.scr_anim[ "fxanim_props" ][ "cabinets_brwn02" ] = %fxanim_zom_nuketown_cabinets_brwn02_anim; - level.scr_anim[ "fxanim_props" ][ "cabinets_red" ] = %fxanim_zom_nuketown_cabinets_red_anim; - level.scr_anim[ "fxanim_props" ][ "porch" ] = %fxanim_zom_nuketown_porch_anim; - level.scr_anim[ "fxanim_props" ][ "roofvent" ] = %fxanim_gp_roofvent_small_wobble_anim; - level.nuked_fxanims = []; - level.nuked_fxanims[ "fxanim_mp_dustdevil_anim" ] = %fxanim_mp_dustdevil_anim; -} - -main() -{ - precache_util_fx(); - precache_createfx_fx(); - precache_scripted_fx(); - precache_fxanim_props(); - maps/mp/createfx/zm_nuked_fx::main(); - setdvar( "enable_global_wind", 1 ); - setdvar( "wind_global_vector", "1 0 0" ); - setdvar( "wind_global_low_altitude", 0 ); - setdvar( "wind_global_hi_altitude", 0 ); - setdvar( "wind_global_low_strength_percent", 0 ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zm_nuked_gamemodes.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zm_nuked_gamemodes.gsc deleted file mode 100644 index ee3f5d4..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zm_nuked_gamemodes.gsc +++ /dev/null @@ -1,14 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/zm_nuked_standard; -#include maps/mp/zm_nuked; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - add_map_gamemode( "zstandard", maps/mp/zm_nuked::zstandard_preinit, undefined, undefined ); - add_map_location_gamemode( "zstandard", "nuked", maps/mp/zm_nuked_standard::precache, maps/mp/zm_nuked_standard::main ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zm_nuked_perks.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zm_nuked_perks.gsc deleted file mode 100644 index 4ec8409..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zm_nuked_perks.gsc +++ /dev/null @@ -1,389 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init_nuked_perks() //checked changed to match cerberus output -{ - level.perk_arrival_vehicle = getent( "perk_arrival_vehicle", "targetname" ); - level.perk_arrival_vehicle setmodel( "tag_origin" ); - flag_init( "perk_vehicle_bringing_in_perk" ); - structs = getstructarray( "zm_perk_machine", "targetname" ); - for ( i = 0; i < structs.size; i++ ) - { - structs[ i ] structdelete(); - } - level.nuked_perks = []; - level.nuked_perks[ 0 ] = spawnstruct(); - level.nuked_perks[ 0 ].model = "zombie_vending_revive"; - level.nuked_perks[ 0 ].script_noteworthy = "specialty_quickrevive"; - level.nuked_perks[ 0 ].turn_on_notify = "revive_on"; - level.nuked_perks[ 1 ] = spawnstruct(); - level.nuked_perks[ 1 ].model = "zombie_vending_sleight"; - level.nuked_perks[ 1 ].script_noteworthy = "specialty_fastreload"; - level.nuked_perks[ 1 ].turn_on_notify = "sleight_on"; - level.nuked_perks[ 2 ] = spawnstruct(); - level.nuked_perks[ 2 ].model = "zombie_vending_doubletap2"; - level.nuked_perks[ 2 ].script_noteworthy = "specialty_rof"; - level.nuked_perks[ 2 ].turn_on_notify = "doubletap_on"; - level.nuked_perks[ 3 ] = spawnstruct(); - level.nuked_perks[ 3 ].model = "zombie_vending_jugg"; - level.nuked_perks[ 3 ].script_noteworthy = "specialty_armorvest"; - level.nuked_perks[ 3 ].turn_on_notify = "juggernog_on"; - level.nuked_perks[ 4 ] = spawnstruct(); - level.nuked_perks[ 4 ].model = "p6_anim_zm_buildable_pap"; - level.nuked_perks[ 4 ].script_noteworthy = "specialty_weapupgrade"; - level.nuked_perks[ 4 ].turn_on_notify = "Pack_A_Punch_on"; - players = getnumexpectedplayers(); - if ( players == 1 ) - { - level.override_perk_targetname = "zm_perk_machine_override"; - revive_perk_structs = getstructarray( "solo_revive", "targetname" ); - for ( i = 0; i < revive_perk_structs.size; i++ ) - { - random_revive_structs[ i ] = getstruct( revive_perk_structs[ i ].target, "targetname" ); - random_revive_structs[ i ].script_int = revive_perk_structs[ i ].script_int; - } - level.random_revive_structs = array_randomize( random_revive_structs ); - level.random_revive_structs[ 0 ].targetname = "zm_perk_machine_override"; - level.random_revive_structs[ 0 ].model = level.nuked_perks[ 0 ].model; - level.random_revive_structs[ 0 ].blocker_model = getent( level.random_revive_structs[ 0 ].target, "targetname" ); - level.random_revive_structs[ 0 ].script_noteworthy = level.nuked_perks[ 0 ].script_noteworthy; - level.random_revive_structs[ 0 ].turn_on_notify = level.nuked_perks[ 0 ].turn_on_notify; - if ( !isDefined( level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ] ) ) - { - level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ] = []; - } - level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ][ level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ].size ] = level.random_revive_structs[ 0 ]; - /* -/# - level.random_revive_structs[ 0 ] thread draw_debug_location(); -#/ - */ - random_perk_structs = []; - perk_structs = getstructarray( "zm_random_machine", "script_noteworthy" ); - perk_structs = array_exclude( perk_structs, revive_perk_structs ); - for ( i = 0; i < perk_structs.size; i++ ) - { - random_perk_structs[ i ] = getstruct( perk_structs[ i ].target, "targetname" ); - random_perk_structs[ i ].script_int = perk_structs[ i ].script_int; - } - level.random_perk_structs = array_randomize( random_perk_structs ); - for ( i = 1; i < 5; i++ ) - { - level.random_perk_structs[ i ].targetname = "zm_perk_machine_override"; - level.random_perk_structs[ i ].model = level.nuked_perks[ i ].model; - level.random_perk_structs[ i ].blocker_model = getent( level.random_perk_structs[ i ].target, "targetname" ); - level.random_perk_structs[ i ].script_noteworthy = level.nuked_perks[ i ].script_noteworthy; - level.random_perk_structs[ i ].turn_on_notify = level.nuked_perks[ i ].turn_on_notify; - if ( !isDefined( level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ] ) ) - { - level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ] = []; - } - level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ][ level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ].size ] = level.random_perk_structs[ i ]; - /* -/# - level.random_perk_structs[ i ] thread draw_debug_location(); -#/ - */ - } - return; - } - level.override_perk_targetname = "zm_perk_machine_override"; - random_perk_structs = []; - perk_structs = getstructarray( "zm_random_machine", "script_noteworthy" ); - for ( i = 0; i < perk_structs.size; i++ ) - { - random_perk_structs[ i ] = getstruct( perk_structs[ i ].target, "targetname" ); - random_perk_structs[ i ].script_int = perk_structs[ i ].script_int; - } - level.random_perk_structs = array_randomize( random_perk_structs ); - for ( i = 0; i < 5; i++ ) - { - level.random_perk_structs[ i ].targetname = "zm_perk_machine_override"; - level.random_perk_structs[ i ].model = level.nuked_perks[ i ].model; - level.random_perk_structs[ i ].blocker_model = getent( level.random_perk_structs[ i ].target, "targetname" ); - level.random_perk_structs[ i ].script_noteworthy = level.nuked_perks[ i ].script_noteworthy; - level.random_perk_structs[ i ].turn_on_notify = level.nuked_perks[ i ].turn_on_notify; - if ( !isDefined( level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ] ) ) - { - level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ] = []; - } - level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ][ level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ].size ] = level.random_perk_structs[ i ]; - /* -/# - level.random_perk_structs[ i ] thread draw_debug_location(); -#/ - */ - } -} - -draw_debug_location() //checked matches cerberus output -{ -} - -wait_for_round_range( start_round, end_round ) //checked matches cerberus output -{ - round_to_spawn = randomintrange( start_round, end_round ); - while ( level.round_number < round_to_spawn ) - { - wait 1; - } -} - -bring_random_perk( machines, machine_triggers ) //checked matches cerberus output -{ - count = machines.size; - if ( count <= 0 ) - { - return; - } - index = randomintrange( 0, count ); - bring_perk( machines[ index ], machine_triggers[ index ] ); - arrayremoveindex( machines, index ); - arrayremoveindex( machine_triggers, index ); -} - -bring_perk( machine, trigger ) //checked changed to match cerberus output -{ - players = get_players(); - is_doubletap = 0; - is_sleight = 0; - is_revive = 0; - is_jugger = 0; - flag_waitopen( "perk_vehicle_bringing_in_perk" ); - playsoundatposition( "zmb_perks_incoming_quad_front", ( 0, 0, 0 ) ); - playsoundatposition( "zmb_perks_incoming_alarm", ( -2198, 486, 327 ) ); - machine setclientfield( "clientfield_perk_intro_fx", 1 ); - machine.fx = spawn( "script_model", machine.origin ); - machine.fx playloopsound( "zmb_perks_incoming_loop", 6 ); - machine.fx thread perk_incoming_sound(); - machine.fx.angles = machine.angles; - machine.fx setmodel( "tag_origin" ); - machine.fx linkto( machine ); - machine linkto( level.perk_arrival_vehicle, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) ); - start_node = getvehiclenode( "perk_arrival_path_" + machine.script_int, "targetname" ); - /* -/# - level.perk_arrival_vehicle thread draw_debug_location(); -#/ - */ - level.perk_arrival_vehicle perk_follow_path( start_node ); - machine unlink(); - offset = ( 0, 0, 0 ); - if ( issubstr( machine.targetname, "doubletap" ) ) - { - forward_dir = anglesToForward( machine.original_angles + vectorScale( ( 0, -1, 0 ), 90 ) ); - offset = vectorScale( forward_dir * -1, 20 ); - is_doubletap = 1; - } - else if ( issubstr( machine.targetname, "sleight" ) ) - { - forward_dir = anglesToForward( machine.original_angles + vectorScale( ( 0, -1, 0 ), 90 ) ); - offset = vectorScale( forward_dir * -1, 5 ); - is_sleight = 1; - } - else if ( issubstr( machine.targetname, "revive" ) ) - { - forward_dir = anglesToForward( machine.original_angles + vectorScale( ( 0, -1, 0 ), 90 ) ); - offset = vectorScale( forward_dir * -1, 10 ); - trigger.blocker_model hide(); - is_revive = 1; - } - else if ( issubstr( machine.targetname, "jugger" ) ) - { - forward_dir = anglesToForward( machine.original_angles + vectorScale( ( 0, -1, 0 ), 90 ) ); - offset = vectorScale( forward_dir * -1, 10 ); - is_jugger = 1; - } - if ( !is_revive ) - { - trigger.blocker_model delete(); - } - machine.original_pos += ( offset[ 0 ], offset[ 1 ], 0 ); - machine.origin = machine.original_pos; - machine.angles = machine.original_angles; - if ( is_revive ) - { - level.quick_revive_final_pos = machine.origin; - level.quick_revive_final_angles = machine.angles; - } - machine.fx stoploopsound( 0.5 ); - machine setclientfield( "clientfield_perk_intro_fx", 0 ); - playsoundatposition( "zmb_perks_incoming_land", machine.origin ); - trigger trigger_on(); - machine thread bring_perk_landing_damage(); - machine.fx unlink(); - machine.fx delete(); - machine notify( machine.turn_on_notify ); - level notify( machine.turn_on_notify ); - machine vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); - machine playsound( "zmb_perks_power_on" ); - machine maps/mp/zombies/_zm_perks::perk_fx( undefined, 1 ); - if ( is_revive ) - { - level.revive_machine_spawned = 1; - machine thread maps/mp/zombies/_zm_perks::perk_fx( "revive_light" ); - } - else if ( is_jugger ) - { - machine thread maps/mp/zombies/_zm_perks::perk_fx( "jugger_light" ); - } - else if ( is_doubletap ) - { - machine thread maps/mp/zombies/_zm_perks::perk_fx( "doubletap_light" ); - } - else if ( is_sleight ) - { - machine thread maps/mp/zombies/_zm_perks::perk_fx( "sleight_light" ); - } -} - -perk_incoming_sound() //checked matches cerberus output -{ - self endon( "death" ); - wait 10; - self playsound( "zmb_perks_incoming" ); -} - -bring_perk_landing_damage() //checked partially changed to match cerberus output see info.md No. 2 -{ - player_prone_damage_radius = 300; - earthquake( 0.7, 2.5, self.origin, 1000 ); - radiusdamage( self.origin, player_prone_damage_radius, 10, 5, undefined, "MOD_EXPLOSIVE" ); - exploder( 500 + self.script_int ); - exploder( 511 ); - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - if ( distancesquared( players[ i ].origin, self.origin ) <= ( player_prone_damage_radius * player_prone_damage_radius ) ) - { - players[ i ] setstance( "prone" ); - players[ i ] shellshock( "default", 1.5 ); - radiusdamage( players[ i ].origin, player_prone_damage_radius / 2, 10, 5, undefined, "MOD_EXPLOSIVE" ); - } - } - zombies = getaiarray( level.zombie_team ); - for ( i = 0; i < zombies.size; i++ ) - { - zombie = zombies[ i ]; - if ( !isDefined( zombie ) || !isalive( zombie ) ) - { - } - else - { - if ( distancesquared( zombie.origin, self.origin ) > 250000 ) - { - } - else - { - zombie thread perk_machine_knockdown_zombie( self.origin ); - } - } - } -} - -perk_machine_knockdown_zombie( origin ) //checked matches cerberus output -{ - self.a.gib_ref = random( array( "guts", "right_arm", "left_arm" ) ); - self thread maps/mp/animscripts/zm_death::do_gib(); - level.zombie_total++; - level.zombie_total_subtract++; - self dodamage( self.health + 100, origin ); -} - -perk_follow_path( node ) //checked matches cerberus output -{ - flag_set( "perk_vehicle_bringing_in_perk" ); - self notify( "newpath" ); - if ( isDefined( node ) ) - { - self.attachedpath = node; - } - pathstart = self.attachedpath; - self.currentnode = self.attachedpath; - if ( !isDefined( pathstart ) ) - { - return; - } - self attachpath( pathstart ); - self startpath(); - self waittill( "reached_end_node" ); - flag_clear( "perk_vehicle_bringing_in_perk" ); -} - -turn_perks_on() //checked matches cerberus output -{ - wait 3; - maps/mp/zombies/_zm_game_module::turn_power_on_and_open_doors(); -} - -perks_from_the_sky() //checked matches cerberus output -{ - level thread turn_perks_on(); - top_height = 8000; - machines = []; - machine_triggers = []; - machines[ 0 ] = getent( "vending_revive", "targetname" ); - if ( !isDefined( machines[ 0 ] ) ) - { - return; - } - machine_triggers[ 0 ] = getent( "vending_revive", "target" ); - move_perk( machines[ 0 ], top_height, 5, 0.001 ); - machine_triggers[ 0 ] trigger_off(); - machines[ 1 ] = getent( "vending_doubletap", "targetname" ); - machine_triggers[ 1 ] = getent( "vending_doubletap", "target" ); - move_perk( machines[ 1 ], top_height, 5, 0.001 ); - machine_triggers[ 1 ] trigger_off(); - machines[ 2 ] = getent( "vending_sleight", "targetname" ); - machine_triggers[ 2 ] = getent( "vending_sleight", "target" ); - move_perk( machines[ 2 ], top_height, 5, 0.001 ); - machine_triggers[ 2 ] trigger_off(); - machines[ 3 ] = getent( "vending_jugg", "targetname" ); - machine_triggers[ 3 ] = getent( "vending_jugg", "target" ); - move_perk( machines[ 3 ], top_height, 5, 0.001 ); - machine_triggers[ 3 ] trigger_off(); - machine_triggers[ 4 ] = getent( "specialty_weapupgrade", "script_noteworthy" ); - machines[ 4 ] = getent( machine_triggers[ 4 ].target, "targetname" ); - move_perk( machines[ 4 ], top_height, 5, 0.001 ); - machine_triggers[ 4 ] trigger_off(); - flag_wait( "initial_blackscreen_passed" ); - wait randomfloatrange( 5, 15 ); - players = get_players(); - if ( players.size == 1 ) - { - wait 4; - index = 0; - bring_perk( machines[ index ], machine_triggers[ index ] ); - arrayremoveindex( machines, index ); - arrayremoveindex( machine_triggers, index ); - } - wait_for_round_range( 3, 5 ); - wait randomintrange( 30, 60 ); - bring_random_perk( machines, machine_triggers ); - wait_for_round_range( 6, 9 ); - wait randomintrange( 30, 60 ); - bring_random_perk( machines, machine_triggers ); - wait_for_round_range( 10, 14 ); - wait randomintrange( 60, 120 ); - bring_random_perk( machines, machine_triggers ); - wait_for_round_range( 15, 19 ); - wait randomintrange( 60, 120 ); - bring_random_perk( machines, machine_triggers ); - wait_for_round_range( 20, 25 ); - wait randomintrange( 60, 120 ); - bring_random_perk( machines, machine_triggers ); -} - -move_perk( ent, dist, time, accel ) //checked matches cerberus output -{ - ent.original_pos = ent.origin; - ent.original_angles = ent.angles; - pos = ( ent.origin[ 0 ], ent.origin[ 1 ], ent.origin[ 2 ] + dist ); - ent moveto( pos, time, accel, accel ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zm_nuked_standard.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zm_nuked_standard.gsc deleted file mode 100644 index 736009f..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zm_nuked_standard.gsc +++ /dev/null @@ -1,49 +0,0 @@ -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -precache() -{ -} - -main() -{ - maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "nuked" ); - maps/mp/zombies/_zm_game_module::set_current_game_module( level.game_module_standard_index ); - level.enemy_location_override_func = ::enemy_location_override; - flag_wait( "initial_blackscreen_passed" ); - flag_set( "power_on" ); - nuked_treasure_chest_init(); -} - -enemy_location_override( zombie, enemy ) -{ - location = enemy.origin; - if ( is_true( self.reroute ) ) - { - if ( isDefined( self.reroute_origin ) ) - { - location = self.reroute_origin; - } - } - return location; -} - -nuked_treasure_chest_init() -{ - chest1 = getstruct( "start_chest1", "script_noteworthy" ); - chest2 = getstruct( "start_chest2", "script_noteworthy" ); - chest3 = getstruct( "culdesac_chest", "script_noteworthy" ); - chest4 = getstruct( "oh2_chest", "script_noteworthy" ); - chest5 = getstruct( "oh1_chest", "script_noteworthy" ); - level.chests = []; - level.chests[ level.chests.size ] = chest1; - level.chests[ level.chests.size ] = chest2; - level.chests[ level.chests.size ] = chest3; - level.chests[ level.chests.size ] = chest4; - level.chests[ level.chests.size ] = chest5; - maps/mp/zombies/_zm_magicbox::treasure_chest_init( "start_chest" ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zombies/_zm_melee_weapon.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zombies/_zm_melee_weapon.gsc deleted file mode 100644 index ed494ee..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zombies/_zm_melee_weapon.gsc +++ /dev/null @@ -1,627 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_pers_upgrades_functions; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) -{ - precacheitem( weapon_name ); - precacheitem( flourish_weapon_name ); - add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); - melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" ); - i = 0; - while ( i < melee_weapon_triggers.size ) - { - knife_model = getent( melee_weapon_triggers[ i ].target, "targetname" ); - if ( isDefined( knife_model ) ) - { - knife_model hide(); - } - melee_weapon_triggers[ i ] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); - if ( isDefined( level.monolingustic_prompt_format ) && !level.monolingustic_prompt_format ) - { - melee_weapon_triggers[ i ] sethintstring( hint_string, cost ); - if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons ) - { - cursor_hint = "HINT_WEAPON"; - cursor_hint_weapon = weapon_name; - melee_weapon_triggers[ i ] setcursorhint( cursor_hint, cursor_hint_weapon ); - } - else - { - melee_weapon_triggers[ i ] setcursorhint( "HINT_NOICON" ); - } - } - else - { - weapon_display = get_weapon_display_name( weapon_name ); - hint_string = &"ZOMBIE_WEAPONCOSTONLY"; - melee_weapon_triggers[ i ] sethintstring( hint_string, weapon_display, cost ); - if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons ) - { - cursor_hint = "HINT_WEAPON"; - cursor_hint_weapon = weapon_name; - melee_weapon_triggers[ i ] setcursorhint( cursor_hint, cursor_hint_weapon ); - break; - } - else - { - melee_weapon_triggers[ i ] setcursorhint( "HINT_NOICON" ); - } - } - melee_weapon_triggers[ i ] usetriggerrequirelookat(); - i++; - } - melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" ); - i = 0; - while ( i < melee_weapon_structs.size ) - { - prepare_stub( melee_weapon_structs[ i ].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); - i++; - } - register_melee_weapon_for_level( weapon_name ); - if ( !isDefined( level.ballistic_weapon_name ) ) - { - level.ballistic_weapon_name = []; - } - level.ballistic_weapon_name[ weapon_name ] = ballistic_weapon_name; - if ( !isDefined( level.ballistic_upgraded_weapon_name ) ) - { - level.ballistic_upgraded_weapon_name = []; - } - level.ballistic_upgraded_weapon_name[ weapon_name ] = ballistic_upgraded_weapon_name; -/# - if ( !isDefined( level.zombie_weapons[ weapon_name ] ) ) - { - if ( isDefined( level.devgui_add_weapon ) ) - { - [[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost ); -#/ - } - } -} - -prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) -{ - if ( isDefined( stub ) ) - { - if ( isDefined( level.monolingustic_prompt_format ) && !level.monolingustic_prompt_format ) - { - stub.hint_string = hint_string; - if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons ) - { - stub.cursor_hint = "HINT_WEAPON"; - stub.cursor_hint_weapon = weapon_name; - } - else - { - stub.cursor_hint = "HINT_NOICON"; - stub.cursor_hint_weapon = undefined; - } - } - else - { - stub.hint_parm1 = get_weapon_display_name( weapon_name ); - stub.hint_parm2 = cost; - stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; - if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons ) - { - stub.cursor_hint = "HINT_WEAPON"; - stub.cursor_hint_weapon = weapon_name; - } - else - { - stub.cursor_hint = "HINT_NOICON"; - stub.cursor_hint_weapon = undefined; - } - } - stub.cost = cost; - stub.weapon_name = weapon_name; - stub.vo_dialog_id = vo_dialog_id; - stub.flourish_weapon_name = flourish_weapon_name; - stub.ballistic_weapon_name = ballistic_weapon_name; - stub.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; - stub.trigger_func = ::melee_weapon_think; - stub.flourish_fn = flourish_fn; - } -} - -add_stub( stub, weapon_name ) -{ - melee_weapon = undefined; - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( level._melee_weapons[ i ].weapon_name == weapon_name ) - { - melee_weapon = level._melee_weapons[ i ]; - break; - } - else - { - i++; - } - } - if ( isDefined( stub ) && isDefined( melee_weapon ) ) - { - prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn ); - } -} - -give_melee_weapon_by_name( weapon_name ) -{ - melee_weapon = undefined; - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( level._melee_weapons[ i ].weapon_name == weapon_name ) - { - melee_weapon = level._melee_weapons[ i ]; - break; - } - else - { - i++; - } - } - if ( isDefined( melee_weapon ) ) - { - self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined ); - } -} - -add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) -{ - melee_weapon = spawnstruct(); - melee_weapon.weapon_name = weapon_name; - melee_weapon.flourish_weapon_name = flourish_weapon_name; - melee_weapon.ballistic_weapon_name = ballistic_weapon_name; - melee_weapon.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; - melee_weapon.cost = cost; - melee_weapon.wallbuy_targetname = wallbuy_targetname; - melee_weapon.hint_string = hint_string; - melee_weapon.vo_dialog_id = vo_dialog_id; - melee_weapon.flourish_fn = flourish_fn; - if ( !isDefined( level._melee_weapons ) ) - { - level._melee_weapons = []; - } - level._melee_weapons[ level._melee_weapons.size ] = melee_weapon; -} - -player_can_see_weapon_prompt( weapon_name ) -{ - if ( is_true( level._allow_melee_weapon_switching ) ) - { - return 1; - } - if ( isDefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) ) - { - return 0; - } - return 1; -} - -spectator_respawn_all() -{ - i = 0; - while ( i < level._melee_weapons.size ) - { - self spectator_respawn( level._melee_weapons[ i ].wallbuy_targetname, level._melee_weapons[ i ].weapon_name ); - i++; - } -} - -spectator_respawn( wallbuy_targetname, weapon_name ) -{ - melee_triggers = getentarray( wallbuy_targetname, "targetname" ); - players = get_players(); - i = 0; - while ( i < melee_triggers.size ) - { - melee_triggers[ i ] setvisibletoall(); - while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - j = 0; - while ( j < players.size ) - { - if ( !players[ j ] player_can_see_weapon_prompt( weapon_name ) ) - { - melee_triggers[ i ] setinvisibletoplayer( players[ j ] ); - } - j++; - } - } - i++; - } -} - -trigger_hide_all() -{ - i = 0; - while ( i < level._melee_weapons.size ) - { - self trigger_hide( level._melee_weapons[ i ].wallbuy_targetname ); - i++; - } -} - -trigger_hide( wallbuy_targetname ) -{ - melee_triggers = getentarray( wallbuy_targetname, "targetname" ); - i = 0; - while ( i < melee_triggers.size ) - { - melee_triggers[ i ] setinvisibletoplayer( self ); - i++; - } -} - -has_any_ballistic_knife() -{ - if ( self hasweapon( "knife_ballistic_zm" ) ) - { - return 1; - } - if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) - { - return 1; - } - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( self hasweapon( level._melee_weapons[ i ].ballistic_weapon_name ) ) - { - return 1; - } - if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) ) - { - return 1; - } - i++; - } - return 0; -} - -has_upgraded_ballistic_knife() -{ - if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) - { - return 1; - } - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) ) - { - return 1; - } - i++; - } - return 0; -} - -give_ballistic_knife( weapon_string, upgraded ) -{ - current_melee_weapon = self get_player_melee_weapon(); - if ( isDefined( current_melee_weapon ) ) - { - if ( upgraded && isDefined( level.ballistic_upgraded_weapon_name ) && isDefined( level.ballistic_upgraded_weapon_name[ current_melee_weapon ] ) ) - { - weapon_string = level.ballistic_upgraded_weapon_name[ current_melee_weapon ]; - } - if ( !upgraded && isDefined( level.ballistic_weapon_name ) && isDefined( level.ballistic_weapon_name[ current_melee_weapon ] ) ) - { - weapon_string = level.ballistic_weapon_name[ current_melee_weapon ]; - } - } - return weapon_string; -} - -change_melee_weapon( weapon_name, current_weapon ) -{ - current_melee_weapon = self get_player_melee_weapon(); - if ( isDefined( current_melee_weapon ) && current_melee_weapon != weapon_name ) - { - self takeweapon( current_melee_weapon ); - unacquire_weapon_toggle( current_melee_weapon ); - } - self set_player_melee_weapon( weapon_name ); - had_ballistic = 0; - had_ballistic_upgraded = 0; - ballistic_was_primary = 0; - primaryweapons = self getweaponslistprimaries(); - i = 0; - while ( i < primaryweapons.size ) - { - primary_weapon = primaryweapons[ i ]; - if ( issubstr( primary_weapon, "knife_ballistic_" ) ) - { - had_ballistic = 1; - if ( primary_weapon == current_weapon ) - { - ballistic_was_primary = 1; - } - self notify( "zmb_lost_knife" ); - self takeweapon( primary_weapon ); - unacquire_weapon_toggle( primary_weapon ); - if ( issubstr( primary_weapon, "upgraded" ) ) - { - had_ballistic_upgraded = 1; - } - } - i++; - } - if ( had_ballistic ) - { - if ( had_ballistic_upgraded ) - { - new_ballistic = level.ballistic_upgraded_weapon_name[ weapon_name ]; - if ( ballistic_was_primary ) - { - current_weapon = new_ballistic; - } - self giveweapon( new_ballistic, 0, self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) ); - } - else - { - new_ballistic = level.ballistic_weapon_name[ weapon_name ]; - if ( ballistic_was_primary ) - { - current_weapon = new_ballistic; - } - self giveweapon( new_ballistic, 0 ); - } - } - return current_weapon; -} - -melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) -{ - self.first_time_triggered = 0; - while ( isDefined( self.stub ) ) - { - self endon( "kill_trigger" ); - if ( isDefined( self.stub.first_time_triggered ) ) - { - self.first_time_triggered = self.stub.first_time_triggered; - } - weapon_name = self.stub.weapon_name; - cost = self.stub.cost; - flourish_fn = self.stub.flourish_fn; - vo_dialog_id = self.stub.vo_dialog_id; - flourish_weapon_name = self.stub.flourish_weapon_name; - ballistic_weapon_name = self.stub.ballistic_weapon_name; - ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name; - players = getplayers(); - while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - i = 0; - while ( i < players.size ) - { - if ( !players[ i ] player_can_see_weapon_prompt( weapon_name ) ) - { - self setinvisibletoplayer( players[ i ] ); - } - i++; - } - } - } - for ( ;; ) - { - self waittill( "trigger", player ); - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - continue; - } - else if ( player in_revive_trigger() ) - { - wait 0,1; - continue; - } - else if ( player isthrowinggrenade() ) - { - wait 0,1; - continue; - } - else if ( player.is_drinking > 0 ) - { - wait 0,1; - continue; - } - else if ( player hasweapon( weapon_name ) || player has_powerup_weapon() ) - { - wait 0,1; - continue; - } - else - { - if ( player isswitchingweapons() ) - { - wait 0,1; - break; - } - else current_weapon = player getcurrentweapon(); - if ( !is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) && player has_powerup_weapon() ) - { - wait 0,1; - break; - } - else - { - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( player.intermission ) && player.intermission ) - { - wait 0,1; - break; - } - else - { - player_has_weapon = player hasweapon( weapon_name ); - if ( !player_has_weapon ) - { - cost = self.stub.cost; - if ( player maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() ) - { - cost = int( cost / 2 ); - } - if ( player.score >= cost ) - { - if ( self.first_time_triggered == 0 ) - { - model = getent( self.target, "targetname" ); - if ( isDefined( model ) ) - { - model thread melee_weapon_show( player ); - } - else - { - if ( isDefined( self.clientfieldname ) ) - { - level setclientfield( self.clientfieldname, 1 ); - } - } - self.first_time_triggered = 1; - if ( isDefined( self.stub ) ) - { - self.stub.first_time_triggered = 1; - } - } - player maps/mp/zombies/_zm_score::minus_to_player_score( cost, 1 ); - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" ); - player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self ); - } - else - { - play_sound_on_ent( "no_purchase" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 ); - } - break; - } - else - { - if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - self setinvisibletoplayer( player ); - } - } - } - } - } - } -} - -melee_weapon_show( player ) -{ - player_angles = vectorToAngle( player.origin - self.origin ); - player_yaw = player_angles[ 1 ]; - weapon_yaw = self.angles[ 1 ]; - yaw_diff = angleClamp180( player_yaw - weapon_yaw ); - if ( yaw_diff > 0 ) - { - yaw = weapon_yaw - 90; - } - else - { - yaw = weapon_yaw + 90; - } - self.og_origin = self.origin; - self.origin += anglesToForward( ( 0, yaw, 0 ) ) * 8; - wait 0,05; - self show(); - play_sound_at_pos( "weapon_show", self.origin, self ); - time = 1; - self moveto( self.og_origin, time ); -} - -give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger ) -{ - if ( isDefined( flourish_fn ) ) - { - self thread [[ flourish_fn ]](); - } - gun = self do_melee_weapon_flourish_begin( flourish_weapon_name ); - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id ); - self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); - self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission ) - { - return; - } - if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - if ( isDefined( trigger ) ) - { - trigger setinvisibletoplayer( self ); - } - self trigger_hide_all(); - } -} - -do_melee_weapon_flourish_begin( flourish_weapon_name ) -{ - self increment_is_drinking(); - self disable_player_move_states( 1 ); - gun = self getcurrentweapon(); - weapon = flourish_weapon_name; - self giveweapon( weapon ); - self switchtoweapon( weapon ); - return gun; -} - -do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) -{ -/# - assert( !is_zombie_perk_bottle( gun ) ); -#/ -/# - assert( gun != level.revive_tool ); -#/ - self enable_player_move_states(); - weapon = flourish_weapon_name; - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission ) - { - self takeweapon( weapon ); - self.lastactiveweapon = "none"; - return; - } - self takeweapon( weapon ); - self giveweapon( weapon_name ); - gun = change_melee_weapon( weapon_name, gun ); - if ( self hasweapon( "knife_zm" ) ) - { - self takeweapon( "knife_zm" ); - } - if ( self is_multiple_drinking() ) - { - self decrement_is_drinking(); - return; - } - else if ( gun == "knife_zm" ) - { - self switchtoweapon( weapon_name ); - self decrement_is_drinking(); - return; - } - else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) - { - self switchtoweapon( gun ); - } - else - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - } - self waittill( "weapon_change_complete" ); - if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.intermission ) && !self.intermission ) - { - self decrement_is_drinking(); - } -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc deleted file mode 100644 index 04f7af6..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc +++ /dev/null @@ -1,308 +0,0 @@ -#include maps/mp/zombies/_zm_stats; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - if ( !isDefined( level.ballistic_knife_autorecover ) ) - { - level.ballistic_knife_autorecover = 1; - } - if ( isDefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 ) - { - precachemodel( "t5_weapon_ballistic_knife_projectile" ); - precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" ); - } -} - -on_spawn( watcher, player ) -{ - player endon( "death" ); - player endon( "disconnect" ); - player endon( "zmb_lost_knife" ); - level endon( "game_ended" ); - self waittill( "stationary", endpos, normal, angles, attacker, prey, bone ); - isfriendly = 0; - if ( isDefined( endpos ) ) - { - retrievable_model = spawn( "script_model", endpos ); - retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); - retrievable_model setowner( player ); - retrievable_model.owner = player; - retrievable_model.angles = angles; - retrievable_model.name = watcher.weapon; - if ( isDefined( prey ) ) - { - if ( isplayer( prey ) && player.team == prey.team ) - { - isfriendly = 1; - } - else - { - if ( isai( prey ) && player.team == prey.team ) - { - isfriendly = 1; - } - } - if ( !isfriendly ) - { - retrievable_model linkto( prey, bone ); - retrievable_model thread force_drop_knives_to_ground_on_death( player, prey ); - } - else - { - if ( isfriendly ) - { - retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) ); - normal = ( 0, 0, 1 ); - } - } - } - watcher.objectarray[ watcher.objectarray.size ] = retrievable_model; - if ( isfriendly ) - { - retrievable_model waittill( "stationary" ); - } - retrievable_model thread drop_knives_to_ground( player ); - if ( isfriendly ) - { - player notify( "ballistic_knife_stationary" ); - } - else - { - player notify( "ballistic_knife_stationary" ); - } - retrievable_model thread wait_to_show_glowing_model( prey ); - } -} - -wait_to_show_glowing_model( prey ) -{ - level endon( "game_ended" ); - self endon( "death" ); - wait 2; - self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); -} - -on_spawn_retrieve_trigger( watcher, player ) -{ - player endon( "death" ); - player endon( "disconnect" ); - player endon( "zmb_lost_knife" ); - level endon( "game_ended" ); - player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey ); - if ( !isDefined( retrievable_model ) ) - { - return; - } - trigger_pos = []; - if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) ) - { - trigger_pos[ 0 ] = prey.origin[ 0 ]; - trigger_pos[ 1 ] = prey.origin[ 1 ]; - trigger_pos[ 2 ] = prey.origin[ 2 ] + 10; - } - else - { - trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( 10 * normal[ 0 ] ); - trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( 10 * normal[ 1 ] ); - trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( 10 * normal[ 2 ] ); - } - if ( is_true( level.ballistic_knife_autorecover ) ) - { - trigger_pos[ 2 ] -= 50; - pickup_trigger = spawn( "trigger_radius", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ), 0, 50, 100 ); - } - else - { - pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ) ); - pickup_trigger setcursorhint( "HINT_NOICON" ); - } - pickup_trigger.owner = player; - retrievable_model.retrievabletrigger = pickup_trigger; - hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP"; - if ( isDefined( hint_string ) ) - { - pickup_trigger sethintstring( hint_string ); - } - else - { - pickup_trigger sethintstring( &"GENERIC_PICKUP" ); - } - pickup_trigger setteamfortrigger( player.team ); - player clientclaimtrigger( pickup_trigger ); - pickup_trigger enablelinkto(); - if ( isDefined( prey ) ) - { - pickup_trigger linkto( prey ); - } - else - { - pickup_trigger linkto( retrievable_model ); - } - if ( isDefined( level.knife_planted ) ) - { - [[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey ); - } - retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound ); - player thread watch_shutdown( pickup_trigger, retrievable_model ); -} - -debug_print( endpos ) -{ -/# - self endon( "death" ); - while ( 1 ) - { - print3d( endpos, "pickup_trigger" ); - wait 0,05; -#/ - } -} - -watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse ) -{ - self endon( "death" ); - self endon( "delete" ); - level endon( "game_ended" ); - max_ammo = weaponmaxammo( weapon ) + 1; - autorecover = is_true( level.ballistic_knife_autorecover ); - while ( 1 ) - { - trigger waittill( "trigger", player ); - while ( !isalive( player ) ) - { - continue; - } - if ( !player isonground() && !is_true( trigger.force_pickup ) ) - { - continue; - } - if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam ) - { - continue; - } - if ( isDefined( trigger.claimedby ) && player != trigger.claimedby ) - { - continue; - } - ammo_stock = player getweaponammostock( weapon ); - ammo_clip = player getweaponammoclip( weapon ); - current_weapon = player getcurrentweapon(); - total_ammo = ammo_stock + ammo_clip; - hasreloaded = 1; - if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon ) - { - hasreloaded = 0; - } - if ( total_ammo >= max_ammo || !hasreloaded ) - { - continue; - } - if ( !autorecover && player usebuttonpressed() && !player.throwinggrenade || !player meleebuttonpressed() && is_true( trigger.force_pickup ) ) - { - if ( isDefined( playersoundonuse ) ) - { - player playlocalsound( playersoundonuse ); - } - if ( isDefined( npcsoundonuse ) ) - { - player playsound( npcsoundonuse ); - } - player thread [[ callback ]]( weapon, model, trigger ); - return; - } - else - { - } - } -} - -pick_up( weapon, model, trigger ) -{ - if ( self hasweapon( weapon ) ) - { - current_weapon = self getcurrentweapon(); - if ( current_weapon != weapon ) - { - clip_ammo = self getweaponammoclip( weapon ); - if ( !clip_ammo ) - { - self setweaponammoclip( weapon, 1 ); - } - else - { - new_ammo_stock = self getweaponammostock( weapon ) + 1; - self setweaponammostock( weapon, new_ammo_stock ); - } - } - else - { - new_ammo_stock = self getweaponammostock( weapon ) + 1; - self setweaponammostock( weapon, new_ammo_stock ); - } - } - self maps/mp/zombies/_zm_stats::increment_client_stat( "ballistic_knives_pickedup" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "ballistic_knives_pickedup" ); - model destroy_ent(); - trigger destroy_ent(); -} - -destroy_ent() -{ - if ( isDefined( self ) ) - { - if ( isDefined( self.glowing_model ) ) - { - self.glowing_model delete(); - } - self delete(); - } -} - -watch_shutdown( trigger, model ) -{ - self waittill_any( "death_or_disconnect", "zmb_lost_knife" ); - trigger destroy_ent(); - model destroy_ent(); -} - -drop_knives_to_ground( player ) -{ - player endon( "death" ); - player endon( "zmb_lost_knife" ); - for ( ;; ) - { - level waittill( "drop_objects_to_ground", origin, radius ); - if ( distancesquared( origin, self.origin ) < ( radius * radius ) ) - { - self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) ); - self thread update_retrieve_trigger( player ); - } - } -} - -force_drop_knives_to_ground_on_death( player, prey ) -{ - self endon( "death" ); - player endon( "zmb_lost_knife" ); - prey waittill( "death" ); - self unlink(); - self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) ); - self thread update_retrieve_trigger( player ); -} - -update_retrieve_trigger( player ) -{ - self endon( "death" ); - player endon( "zmb_lost_knife" ); - if ( isDefined( level.custom_update_retrieve_trigger ) ) - { - self [[ level.custom_update_retrieve_trigger ]]( player ); - return; - } - self waittill( "stationary" ); - trigger = self.retrievabletrigger; - trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 ); - trigger linkto( self ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zombies/_zm_weap_bowie.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zombies/_zm_weap_bowie.gsc deleted file mode 100644 index 4ad88c6..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zombies/_zm_weap_bowie.gsc +++ /dev/null @@ -1,19 +0,0 @@ -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( isDefined( level.bowie_cost ) ) - { - cost = level.bowie_cost; - } - else - { - cost = 3000; - } - maps/mp/zombies/_zm_melee_weapon::init( "bowie_knife_zm", "zombie_bowie_flourish", "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", cost, "bowie_upgrade", &"ZOMBIE_WEAPON_BOWIE_BUY", "bowie", undefined ); - maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie" ); - maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie_upgraded" ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zombies/_zm_weap_claymore.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zombies/_zm_weap_claymore.gsc deleted file mode 100644 index 47f5b66..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zombies/_zm_weap_claymore.gsc +++ /dev/null @@ -1,482 +0,0 @@ -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( !isDefined( level.claymores_max_per_player ) ) - { - level.claymores_max_per_player = 12; - } - trigs = getentarray( "claymore_purchase", "targetname" ); - i = 0; - while ( i < trigs.size ) - { - model = getent( trigs[ i ].target, "targetname" ); - if ( isDefined( model ) ) - { - model hide(); - } - i++; - } - array_thread( trigs, ::buy_claymores ); - level thread give_claymores_after_rounds(); - level.claymores_on_damage = ::satchel_damage; - level.pickup_claymores = ::pickup_claymores; - level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener; - level.claymore_detectiondot = cos( 70 ); - level.claymore_detectionmindist = 20; - level._effect[ "claymore_laser" ] = loadfx( "weapon/claymore/fx_claymore_laser" ); -} - -buy_claymores() -{ - self.zombie_cost = 1000; - self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); - self setcursorhint( "HINT_WEAPON", "claymore_zm" ); - self endon( "kill_trigger" ); - if ( !isDefined( self.stub ) ) - { - return; - } - if ( isDefined( self.stub ) && !isDefined( self.stub.claymores_triggered ) ) - { - self.stub.claymores_triggered = 0; - } - self.claymores_triggered = self.stub.claymores_triggered; - while ( 1 ) - { - self waittill( "trigger", who ); - while ( who in_revive_trigger() ) - { - continue; - } - while ( who has_powerup_weapon() ) - { - wait 0,1; - } - if ( is_player_valid( who ) ) - { - if ( who.score >= self.zombie_cost ) - { - if ( !who is_player_placeable_mine( "claymore_zm" ) ) - { - play_sound_at_pos( "purchase", self.origin ); - who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost ); - who thread claymore_setup(); - who thread show_claymore_hint( "claymore_purchased" ); - who thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" ); - if ( isDefined( self.stub ) ) - { - self.claymores_triggered = self.stub.claymores_triggered; - } - if ( self.claymores_triggered == 0 ) - { - model = getent( self.target, "targetname" ); - if ( isDefined( model ) ) - { - model thread maps/mp/zombies/_zm_weapons::weapon_show( who ); - } - else - { - if ( isDefined( self.clientfieldname ) ) - { - level setclientfield( self.clientfieldname, 1 ); - } - } - self.claymores_triggered = 1; - if ( isDefined( self.stub ) ) - { - self.stub.claymores_triggered = 1; - } - } - trigs = getentarray( "claymore_purchase", "targetname" ); - i = 0; - while ( i < trigs.size ) - { - trigs[ i ] setinvisibletoplayer( who ); - i++; - } - } - else who thread show_claymore_hint( "already_purchased" ); - break; - } - else - { - who play_sound_on_ent( "no_purchase" ); - who maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); - } - } - } -} - -claymore_unitrigger_update_prompt( player ) -{ - if ( player is_player_placeable_mine( "claymore_zm" ) ) - { - self sethintstring( "" ); - self setcursorhint( "HINT_NOICON" ); - return 0; - } - self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); - self setcursorhint( "HINT_WEAPON", "claymore_zm" ); - return 1; -} - -set_claymore_visible() -{ - players = get_players(); - trigs = getentarray( "claymore_purchase", "targetname" ); - while ( 1 ) - { - j = 0; - while ( j < players.size ) - { - while ( !players[ j ] is_player_placeable_mine( "claymore_zm" ) ) - { - i = 0; - while ( i < trigs.size ) - { - trigs[ i ] setinvisibletoplayer( players[ j ], 0 ); - i++; - } - } - j++; - } - wait 1; - players = get_players(); - } -} - -claymore_safe_to_plant() -{ - if ( self.owner.claymores.size >= level.claymores_max_per_player ) - { - return 0; - } - if ( isDefined( level.claymore_safe_to_plant ) ) - { - return self [[ level.claymore_safe_to_plant ]](); - } - return 1; -} - -claymore_wait_and_detonate() -{ - wait 0,1; - self detonate( self.owner ); -} - -claymore_watch() -{ - self endon( "death" ); - self notify( "claymore_watch" ); - self endon( "claymore_watch" ); - while ( 1 ) - { - self waittill( "grenade_fire", claymore, weapname ); - if ( weapname == "claymore_zm" ) - { - claymore.owner = self; - claymore.team = self.team; - self notify( "zmb_enable_claymore_prompt" ); - if ( claymore claymore_safe_to_plant() ) - { - if ( isDefined( level.claymore_planted ) ) - { - self thread [[ level.claymore_planted ]]( claymore ); - } - claymore thread claymore_detonation(); - claymore thread play_claymore_effects(); - self maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_planted" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_planted" ); - break; - } - else - { - claymore thread claymore_wait_and_detonate(); - } - } - } -} - -claymore_setup() -{ - if ( !isDefined( self.claymores ) ) - { - self.claymores = []; - } - self thread claymore_watch(); - self giveweapon( "claymore_zm" ); - self set_player_placeable_mine( "claymore_zm" ); - self setactionslot( 4, "weapon", "claymore_zm" ); - self setweaponammostock( "claymore_zm", 2 ); -} - -adjust_trigger_origin( origin ) -{ - origin += vectorScale( ( 0, 0, 1 ), 20 ); - return origin; -} - -on_spawn_retrieve_trigger( watcher, player ) -{ - self maps/mp/gametypes_zm/_weaponobjects::onspawnretrievableweaponobject( watcher, player ); - if ( isDefined( self.pickuptrigger ) ) - { - self.pickuptrigger sethintlowpriority( 0 ); - } -} - -pickup_claymores() -{ - player = self.owner; - if ( !player hasweapon( "claymore_zm" ) ) - { - player thread claymore_watch(); - player giveweapon( "claymore_zm" ); - player set_player_placeable_mine( "claymore_zm" ); - player setactionslot( 4, "weapon", "claymore_zm" ); - player setweaponammoclip( "claymore_zm", 0 ); - player notify( "zmb_enable_claymore_prompt" ); - } - else - { - clip_ammo = player getweaponammoclip( self.name ); - clip_max_ammo = weaponclipsize( self.name ); - if ( clip_ammo >= clip_max_ammo ) - { - self destroy_ent(); - player notify( "zmb_disable_claymore_prompt" ); - return; - } - } - self pick_up(); - clip_ammo = player getweaponammoclip( self.name ); - clip_max_ammo = weaponclipsize( self.name ); - if ( clip_ammo >= clip_max_ammo ) - { - player notify( "zmb_disable_claymore_prompt" ); - } - player maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_pickedup" ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_pickedup" ); -} - -pickup_claymores_trigger_listener( trigger, player ) -{ - self thread pickup_claymores_trigger_listener_enable( trigger, player ); - self thread pickup_claymores_trigger_listener_disable( trigger, player ); -} - -pickup_claymores_trigger_listener_enable( trigger, player ) -{ - self endon( "delete" ); - self endon( "death" ); - while ( 1 ) - { - player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" ); - if ( !isDefined( trigger ) ) - { - return; - } - trigger trigger_on(); - trigger linkto( self ); - } -} - -pickup_claymores_trigger_listener_disable( trigger, player ) -{ - self endon( "delete" ); - self endon( "death" ); - while ( 1 ) - { - player waittill( "zmb_disable_claymore_prompt" ); - if ( !isDefined( trigger ) ) - { - return; - } - trigger unlink(); - trigger trigger_off(); - } -} - -shouldaffectweaponobject( object ) -{ - pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 ); - dirtopos = pos - object.origin; - objectforward = anglesToForward( object.angles ); - dist = vectordot( dirtopos, objectforward ); - if ( dist < level.claymore_detectionmindist ) - { - return 0; - } - dirtopos = vectornormalize( dirtopos ); - dot = vectordot( dirtopos, objectforward ); - return dot > level.claymore_detectiondot; -} - -claymore_detonation() -{ - self endon( "death" ); - self waittill_not_moving(); - detonateradius = 96; - damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 ); - damagearea setexcludeteamfortrigger( self.team ); - damagearea enablelinkto(); - damagearea linkto( self ); - if ( is_true( self.isonbus ) ) - { - damagearea setmovingplatformenabled( 1 ); - } - self.damagearea = damagearea; - self thread delete_claymores_on_death( self.owner, damagearea ); - self.owner.claymores[ self.owner.claymores.size ] = self; - while ( 1 ) - { - damagearea waittill( "trigger", ent ); - if ( isDefined( self.owner ) && ent == self.owner ) - { - continue; - } - while ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team ) - { - continue; - } - if ( isDefined( ent.ignore_claymore ) && ent.ignore_claymore ) - { - continue; - } - while ( !ent shouldaffectweaponobject( self ) ) - { - continue; - } - if ( ent damageconetrace( self.origin, self ) > 0 ) - { - self playsound( "wpn_claymore_alert" ); - wait 0,4; - if ( isDefined( self.owner ) ) - { - self detonate( self.owner ); - } - else - { - self detonate( undefined ); - } - return; - } - } -} - -delete_claymores_on_death( player, ent ) -{ - self waittill( "death" ); - if ( isDefined( player ) ) - { - arrayremovevalue( player.claymores, self ); - } - wait 0,05; - if ( isDefined( ent ) ) - { - ent delete(); - } -} - -satchel_damage() -{ - self endon( "death" ); - self setcandamage( 1 ); - self.health = 100000; - self.maxhealth = self.health; - attacker = undefined; - while ( 1 ) - { - self waittill( "damage", amount, attacker ); - if ( !isDefined( self ) ) - { - return; - } - self.health = self.maxhealth; - while ( !isplayer( attacker ) ) - { - continue; - } - if ( isDefined( self.owner ) && attacker == self.owner ) - { - continue; - } - while ( isDefined( attacker.pers ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] != level.zombie_team ) - { - continue; - } - } - if ( level.satchelexplodethisframe ) - { - wait ( 0,1 + randomfloat( 0,4 ) ); - } - else wait 0,05; - if ( !isDefined( self ) ) - { - return; - } - level.satchelexplodethisframe = 1; - thread reset_satchel_explode_this_frame(); - self detonate( attacker ); -} - -reset_satchel_explode_this_frame() -{ - wait 0,05; - level.satchelexplodethisframe = 0; -} - -play_claymore_effects() -{ - self endon( "death" ); - self waittill_not_moving(); - playfxontag( level._effect[ "claymore_laser" ], self, "tag_fx" ); -} - -give_claymores_after_rounds() -{ - while ( 1 ) - { - level waittill( "between_round_over" ); - while ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] is_player_placeable_mine( "claymore_zm" ) ) - { - players[ i ] giveweapon( "claymore_zm" ); - players[ i ] set_player_placeable_mine( "claymore_zm" ); - players[ i ] setactionslot( 4, "weapon", "claymore_zm" ); - players[ i ] setweaponammoclip( "claymore_zm", 2 ); - } - i++; - } - } - } -} - -show_claymore_hint( string ) -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( string == "claymore_purchased" ) - { - text = &"ZOMBIE_CLAYMORE_HOWTO"; - } - else - { - text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED"; - } - show_equipment_hint_text( text ); -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc b/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc deleted file mode 100644 index 48ea6b2..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc +++ /dev/null @@ -1,120 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - registerclientfield( "toplayer", "tazer_flourish", 1, 1, "int" ); - register_melee_weapon_for_level( "tazer_knuckles_zm" ); - if ( isDefined( level.tazer_cost ) ) - { - cost = level.tazer_cost; - } - else - { - cost = 6000; - } - level.use_tazer_impact_fx = 0; - maps/mp/zombies/_zm_melee_weapon::init( "tazer_knuckles_zm", "zombie_tazer_flourish", "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", cost, "tazer_upgrade", &"ZOMBIE_WEAPON_TAZER_BUY", "tazerknuckles", ::tazer_flourish_fx ); - maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee" ); - maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee_upgraded" ); - maps/mp/zombies/_zm_spawner::add_cusom_zombie_spawn_logic( ::watch_bodily_functions ); - level._effect[ "fx_zmb_taser_vomit" ] = loadfx( "maps/zombie/fx_zmb_taser_vomit" ); - level._effect[ "fx_zmb_taser_flourish" ] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" ); - if ( level.script != "zm_transit" ) - { - level._effect[ "fx_zmb_tazer_impact" ] = loadfx( "weapon/taser/fx_taser_knuckles_impact_zmb" ); - level.use_tazer_impact_fx = 1; - } - level.tazer_flourish_delay = 0,5; -} - -watch_bodily_functions() -{ - if ( isDefined( self.isscreecher ) || self.isscreecher && isDefined( self.is_avogadro ) && self.is_avogadro ) - { - return; - } - while ( isDefined( self ) && isalive( self ) ) - { - self waittill( "damage", amount, attacker, direction_vec, point, type ); - if ( !isDefined( self ) ) - { - return; - } - if ( !isDefined( attacker ) || !isplayer( attacker ) ) - { - continue; - } - while ( type != "MOD_MELEE" ) - { - continue; - } - if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isDefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped ) - { - continue; - } - ch = randomint( 100 ); - if ( ch < 4 ) - { - playfxontag( level._effect[ "fx_zmb_taser_vomit" ], self, "j_neck" ); - } - if ( level.use_tazer_impact_fx ) - { - tags = []; - tags[ 0 ] = "J_Head"; - tags[ 1 ] = "J_Neck"; - playfxontag( level._effect[ "fx_zmb_tazer_impact" ], self, random( tags ) ); - } - } -} - -onplayerconnect() -{ - self thread onplayerspawned(); -} - -onplayerspawned() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread watchtazerknucklemelee(); - } -} - -watchtazerknucklemelee() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "weapon_melee", weapon ); - if ( weapon == "tazer_knuckles_zm" ) - { - self tazerknuckle_melee(); - } - } -} - -tazerknuckle_melee() -{ -} - -tazer_flourish_fx() -{ - self waittill( "weapon_change", newweapon ); - if ( newweapon == "zombie_tazer_flourish" ) - { - self endon( "weapon_change" ); - wait level.tazer_flourish_delay; - self thread maps/mp/zombies/_zm_audio::playerexert( "hitmed" ); - self setclientfieldtoplayer( "tazer_flourish", 1 ); - wait_network_frame(); - self setclientfieldtoplayer( "tazer_flourish", 0 ); - } -} diff --git a/Zombie Maps/Nuketown/zm_nuked_patch/readme.md b/Zombie Maps/Nuketown/zm_nuked_patch/readme.md deleted file mode 100644 index d40ea29..0000000 --- a/Zombie Maps/Nuketown/zm_nuked_patch/readme.md +++ /dev/null @@ -1,29 +0,0 @@ -### The following gscs compile and run successfully with no known errors: -``` -zm_nuked_patch/maps/mp/gametypes_zm/zstandard.gsc -zm_nuked_patch/maps/mp/zm_nuked.gsc -zm_nuked_patch/maps/mp/zm_nuked_perks.gsc -``` -### The following scripts compile and run successfully with minor errors: - -### The following scripts compile and run successfully with major errors: - -### The following scripts compile and run serverside but clients cannot join due to exe_client_field_mismatch - -### The following scripts compile but cause a minidump or other severe error: - -### The following scripts are not checked yet, uploaded to setup a baseline: -``` -zm_nuked_patch/maps/mp/zombies/_zm_melee_weapon.gsc -zm_nuked_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc -zm_nuked_patch/maps/mp/zombies/_zm_weap_bowie.gsc -zm_nuked_patch/maps/mp/zombies/_zm_weap_claymore.gsc -zm_nuked_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc - -zm_nuked_patch/maps/mp/zm_nuked_ffotd.gsc -zm_nuked_patch/maps/mp/zm_nuked_fx.gsc -zm_nuked_patch/maps/mp/zm_nuked_gamemodes.gsc -zm_nuked_patch/maps/mp/zm_nuked_standard.gsc -``` - -### notes: diff --git a/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_basic_crusader.gsc b/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_basic_crusader.gsc deleted file mode 100644 index c901aa6..0000000 --- a/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_basic_crusader.gsc +++ /dev/null @@ -1,413 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_tomb_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_dugup; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_jump_down_markiv_front; - dummy_anim_ref = %ai_zombie_jump_down_markiv_leftfront; - dummy_anim_ref = %ai_zombie_jump_down_markiv_leftmid; - dummy_anim_ref = %ai_zombie_jump_down_markiv_leftrear; - dummy_anim_ref = %ai_zombie_jump_down_markiv_rear; - dummy_anim_ref = %ai_zombie_jump_down_markiv_rightfront; - dummy_anim_ref = %ai_zombie_jump_down_markiv_rightmid; - dummy_anim_ref = %ai_zombie_jump_down_markiv_rightrear; - dummy_anim_ref = %ai_zombie_jump_up_markiv_front; - dummy_anim_ref = %ai_zombie_jump_up_markiv_leftfront; - dummy_anim_ref = %ai_zombie_jump_up_markiv_leftmid; - dummy_anim_ref = %ai_zombie_jump_up_markiv_leftrear; - dummy_anim_ref = %ai_zombie_jump_up_markiv_rear; - dummy_anim_ref = %ai_zombie_jump_up_markiv_rightfront; - dummy_anim_ref = %ai_zombie_jump_up_markiv_rightmid; - dummy_anim_ref = %ai_zombie_jump_up_markiv_rightrear; - dummy_anim_ref = %ai_zombie_jump_up_onto_markiv_rear; - dummy_anim_ref = %ai_zombie_crawl_jump_up_onto_markiv_rear; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_front; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftfront; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftmid; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftrear; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rear; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightfront; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightmid; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightrear; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_front; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftfront; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftmid; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftrear; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rear; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightfront; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightmid; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightrear; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_up_48; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_traverse_alcove_40; - dummy_anim_ref = %ai_zombie_traverse_alcove_56; - dummy_anim_ref = %ai_zombie_traverse_alcove_96; - dummy_anim_ref = %ai_zombie_traverse_scaffold_72; - dummy_anim_ref = %ai_zombie_traverse_scaffold_84; - dummy_anim_ref = %ai_zombie_traverse_scaffold_100; - dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_72; - dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_84; - dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_100; - dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_96; - dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_112; - dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_120; - dummy_anim_ref = %ai_zombie_jump_up_dlc4_trench_wall_140; - dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_112; - dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_120; - dummy_anim_ref = %ai_zombie_crawl_jump_up_dlc4_trench_wall_140; - dummy_anim_ref = %ai_zombie_vaultover_barbedwire; - dummy_anim_ref = %ai_zombie_vaultover_barbedwire_24; - dummy_anim_ref = %ai_zombie_crawl_vaultover_barbedwire; - dummy_anim_ref = %ai_zombie_crawl_vaultover_barbedwire_24; - dummy_anim_ref = %ai_zombie_crawl_jump_down_church; - dummy_anim_ref = %ai_zombie_jump_down_church; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_c; - dummy_anim_ref = %ai_zombie_dlc4_tesla_death_a; - dummy_anim_ref = %ai_zombie_dlc4_tesla_death_b; - dummy_anim_ref = %ai_zombie_dlc4_tesla_death_c; - dummy_anim_ref = %ai_zombie_dlc4_tesla_death_d; - dummy_anim_ref = %ai_zombie_dlc4_tesla_death_e; - dummy_anim_ref = %ai_zombie_dlc4_tesla_crawl_death_a; - dummy_anim_ref = %ai_zombie_dlc4_tesla_crawl_death_b; - dummy_anim_ref = %ai_zombie_dlc4_freeze_death_a; - dummy_anim_ref = %ai_zombie_dlc4_freeze_death_b; - dummy_anim_ref = %ai_zombie_dlc4_freeze_death_c; - dummy_anim_ref = %ai_zombie_dlc4_freeze_death_d; - dummy_anim_ref = %ai_zombie_dlc4_freeze_death_e; - dummy_anim_ref = %ai_zombie_death_icestaff_a; - dummy_anim_ref = %ai_zombie_death_icestaff_b; - dummy_anim_ref = %ai_zombie_death_icestaff_c; - dummy_anim_ref = %ai_zombie_death_icestaff_d; - dummy_anim_ref = %ai_zombie_death_icestaff_e; - dummy_anim_ref = %ai_zombie_dlc4_crawl_freeze_death_01; - dummy_anim_ref = %ai_zombie_dlc4_crawl_freeze_death_02; - dummy_anim_ref = %ai_zombie_afterlife_stun_a; - dummy_anim_ref = %ai_zombie_afterlife_stun_b; - dummy_anim_ref = %ai_zombie_afterlife_stun_c; - dummy_anim_ref = %ai_zombie_afterlife_stun_d; - dummy_anim_ref = %ai_zombie_afterlife_stun_e; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_a; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_b; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_c; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_a; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_b; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_c; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_d; - dummy_anim_ref = %ai_zombie_firestaff_death_walking_a; - dummy_anim_ref = %ai_zombie_firestaff_death_walking_b; - dummy_anim_ref = %ai_zombie_firestaff_death_walking_c; - dummy_anim_ref = %ai_zombie_firestaff_death_collapse_a; - dummy_anim_ref = %ai_zombie_firestaff_death_collapse_b; - dummy_anim_ref = %ai_zombie_grabbed_by_mech; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_tomb_basic.asd"; - self.animtree = "zm_tomb_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = "fly_step_crusader"; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 6 ); - switch( randchar ) - { - case 0: - character/c_zom_tomb_crusader_1a::main(); - break; - case 1: - character/c_zom_tomb_crusader_1a_nohat::main(); - break; - case 2: - character/c_zom_tomb_crusader_2b::main(); - break; - case 3: - character/c_zom_tomb_crusader_2b_nohat::main(); - break; - case 4: - character/c_zom_tomb_crusader_2c::main(); - break; - case 5: - character/c_zom_tomb_crusader_1c::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_tomb_basic" ); - character/c_zom_tomb_crusader_1a::precache(); - character/c_zom_tomb_crusader_1a_nohat::precache(); - character/c_zom_tomb_crusader_2b::precache(); - character/c_zom_tomb_crusader_2b_nohat::precache(); - character/c_zom_tomb_crusader_2c::precache(); - character/c_zom_tomb_crusader_1c::precache(); -} diff --git a/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_basic_german.gsc b/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_basic_german.gsc deleted file mode 100644 index 943e3bb..0000000 --- a/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_basic_german.gsc +++ /dev/null @@ -1,413 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_tomb_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_dugup; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_jump_down_markiv_front; - dummy_anim_ref = %ai_zombie_jump_down_markiv_leftfront; - dummy_anim_ref = %ai_zombie_jump_down_markiv_leftmid; - dummy_anim_ref = %ai_zombie_jump_down_markiv_leftrear; - dummy_anim_ref = %ai_zombie_jump_down_markiv_rear; - dummy_anim_ref = %ai_zombie_jump_down_markiv_rightfront; - dummy_anim_ref = %ai_zombie_jump_down_markiv_rightmid; - dummy_anim_ref = %ai_zombie_jump_down_markiv_rightrear; - dummy_anim_ref = %ai_zombie_jump_up_markiv_front; - dummy_anim_ref = %ai_zombie_jump_up_markiv_leftfront; - dummy_anim_ref = %ai_zombie_jump_up_markiv_leftmid; - dummy_anim_ref = %ai_zombie_jump_up_markiv_leftrear; - dummy_anim_ref = %ai_zombie_jump_up_markiv_rear; - dummy_anim_ref = %ai_zombie_jump_up_markiv_rightfront; - dummy_anim_ref = %ai_zombie_jump_up_markiv_rightmid; - dummy_anim_ref = %ai_zombie_jump_up_markiv_rightrear; - dummy_anim_ref = %ai_zombie_jump_up_onto_markiv_rear; - dummy_anim_ref = %ai_zombie_crawl_jump_up_onto_markiv_rear; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_front; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftfront; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftmid; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftrear; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rear; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightfront; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightmid; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightrear; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_front; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftfront; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftmid; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftrear; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rear; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightfront; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightmid; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightrear; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_up_48; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_traverse_alcove_40; - dummy_anim_ref = %ai_zombie_traverse_alcove_56; - dummy_anim_ref = %ai_zombie_traverse_alcove_96; - dummy_anim_ref = %ai_zombie_traverse_scaffold_72; - dummy_anim_ref = %ai_zombie_traverse_scaffold_84; - dummy_anim_ref = %ai_zombie_traverse_scaffold_100; - dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_72; - dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_84; - dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_100; - dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_96; - dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_112; - dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_120; - dummy_anim_ref = %ai_zombie_jump_up_dlc4_trench_wall_140; - dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_112; - dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_120; - dummy_anim_ref = %ai_zombie_crawl_jump_up_dlc4_trench_wall_140; - dummy_anim_ref = %ai_zombie_vaultover_barbedwire; - dummy_anim_ref = %ai_zombie_vaultover_barbedwire_24; - dummy_anim_ref = %ai_zombie_crawl_vaultover_barbedwire; - dummy_anim_ref = %ai_zombie_crawl_vaultover_barbedwire_24; - dummy_anim_ref = %ai_zombie_crawl_jump_down_church; - dummy_anim_ref = %ai_zombie_jump_down_church; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_c; - dummy_anim_ref = %ai_zombie_dlc4_tesla_death_a; - dummy_anim_ref = %ai_zombie_dlc4_tesla_death_b; - dummy_anim_ref = %ai_zombie_dlc4_tesla_death_c; - dummy_anim_ref = %ai_zombie_dlc4_tesla_death_d; - dummy_anim_ref = %ai_zombie_dlc4_tesla_death_e; - dummy_anim_ref = %ai_zombie_dlc4_tesla_crawl_death_a; - dummy_anim_ref = %ai_zombie_dlc4_tesla_crawl_death_b; - dummy_anim_ref = %ai_zombie_dlc4_freeze_death_a; - dummy_anim_ref = %ai_zombie_dlc4_freeze_death_b; - dummy_anim_ref = %ai_zombie_dlc4_freeze_death_c; - dummy_anim_ref = %ai_zombie_dlc4_freeze_death_d; - dummy_anim_ref = %ai_zombie_dlc4_freeze_death_e; - dummy_anim_ref = %ai_zombie_death_icestaff_a; - dummy_anim_ref = %ai_zombie_death_icestaff_b; - dummy_anim_ref = %ai_zombie_death_icestaff_c; - dummy_anim_ref = %ai_zombie_death_icestaff_d; - dummy_anim_ref = %ai_zombie_death_icestaff_e; - dummy_anim_ref = %ai_zombie_dlc4_crawl_freeze_death_01; - dummy_anim_ref = %ai_zombie_dlc4_crawl_freeze_death_02; - dummy_anim_ref = %ai_zombie_afterlife_stun_a; - dummy_anim_ref = %ai_zombie_afterlife_stun_b; - dummy_anim_ref = %ai_zombie_afterlife_stun_c; - dummy_anim_ref = %ai_zombie_afterlife_stun_d; - dummy_anim_ref = %ai_zombie_afterlife_stun_e; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_a; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_b; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_c; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_a; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_b; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_c; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_d; - dummy_anim_ref = %ai_zombie_firestaff_death_walking_a; - dummy_anim_ref = %ai_zombie_firestaff_death_walking_b; - dummy_anim_ref = %ai_zombie_firestaff_death_walking_c; - dummy_anim_ref = %ai_zombie_firestaff_death_collapse_a; - dummy_anim_ref = %ai_zombie_firestaff_death_collapse_b; - dummy_anim_ref = %ai_zombie_grabbed_by_mech; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_tomb_basic.asd"; - self.animtree = "zm_tomb_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 6 ); - switch( randchar ) - { - case 0: - character/c_zom_tomb_german_1a::main(); - break; - case 1: - character/c_zom_tomb_german_1a_nohat::main(); - break; - case 2: - character/c_zom_tomb_german_2b::main(); - break; - case 3: - character/c_zom_tomb_german_bare::main(); - break; - case 4: - character/c_zom_tomb_german_bare_nohat::main(); - break; - case 5: - character/c_zom_tomb_german_bare_nohat::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_tomb_basic" ); - character/c_zom_tomb_german_1a::precache(); - character/c_zom_tomb_german_1a_nohat::precache(); - character/c_zom_tomb_german_2b::precache(); - character/c_zom_tomb_german_bare::precache(); - character/c_zom_tomb_german_bare_nohat::precache(); - character/c_zom_tomb_german_bare_nohat::precache(); -} diff --git a/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_basic_german2.gsc b/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_basic_german2.gsc deleted file mode 100644 index 3814ef6..0000000 --- a/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_basic_german2.gsc +++ /dev/null @@ -1,413 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_tomb_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_dugup; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_jump_down_markiv_front; - dummy_anim_ref = %ai_zombie_jump_down_markiv_leftfront; - dummy_anim_ref = %ai_zombie_jump_down_markiv_leftmid; - dummy_anim_ref = %ai_zombie_jump_down_markiv_leftrear; - dummy_anim_ref = %ai_zombie_jump_down_markiv_rear; - dummy_anim_ref = %ai_zombie_jump_down_markiv_rightfront; - dummy_anim_ref = %ai_zombie_jump_down_markiv_rightmid; - dummy_anim_ref = %ai_zombie_jump_down_markiv_rightrear; - dummy_anim_ref = %ai_zombie_jump_up_markiv_front; - dummy_anim_ref = %ai_zombie_jump_up_markiv_leftfront; - dummy_anim_ref = %ai_zombie_jump_up_markiv_leftmid; - dummy_anim_ref = %ai_zombie_jump_up_markiv_leftrear; - dummy_anim_ref = %ai_zombie_jump_up_markiv_rear; - dummy_anim_ref = %ai_zombie_jump_up_markiv_rightfront; - dummy_anim_ref = %ai_zombie_jump_up_markiv_rightmid; - dummy_anim_ref = %ai_zombie_jump_up_markiv_rightrear; - dummy_anim_ref = %ai_zombie_jump_up_onto_markiv_rear; - dummy_anim_ref = %ai_zombie_crawl_jump_up_onto_markiv_rear; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_front; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftfront; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftmid; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftrear; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rear; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightfront; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightmid; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightrear; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_front; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftfront; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftmid; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftrear; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rear; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightfront; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightmid; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightrear; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_up_48; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_traverse_alcove_40; - dummy_anim_ref = %ai_zombie_traverse_alcove_56; - dummy_anim_ref = %ai_zombie_traverse_alcove_96; - dummy_anim_ref = %ai_zombie_traverse_scaffold_72; - dummy_anim_ref = %ai_zombie_traverse_scaffold_84; - dummy_anim_ref = %ai_zombie_traverse_scaffold_100; - dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_72; - dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_84; - dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_100; - dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_96; - dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_112; - dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_120; - dummy_anim_ref = %ai_zombie_jump_up_dlc4_trench_wall_140; - dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_112; - dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_120; - dummy_anim_ref = %ai_zombie_crawl_jump_up_dlc4_trench_wall_140; - dummy_anim_ref = %ai_zombie_vaultover_barbedwire; - dummy_anim_ref = %ai_zombie_vaultover_barbedwire_24; - dummy_anim_ref = %ai_zombie_crawl_vaultover_barbedwire; - dummy_anim_ref = %ai_zombie_crawl_vaultover_barbedwire_24; - dummy_anim_ref = %ai_zombie_crawl_jump_down_church; - dummy_anim_ref = %ai_zombie_jump_down_church; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_c; - dummy_anim_ref = %ai_zombie_dlc4_tesla_death_a; - dummy_anim_ref = %ai_zombie_dlc4_tesla_death_b; - dummy_anim_ref = %ai_zombie_dlc4_tesla_death_c; - dummy_anim_ref = %ai_zombie_dlc4_tesla_death_d; - dummy_anim_ref = %ai_zombie_dlc4_tesla_death_e; - dummy_anim_ref = %ai_zombie_dlc4_tesla_crawl_death_a; - dummy_anim_ref = %ai_zombie_dlc4_tesla_crawl_death_b; - dummy_anim_ref = %ai_zombie_dlc4_freeze_death_a; - dummy_anim_ref = %ai_zombie_dlc4_freeze_death_b; - dummy_anim_ref = %ai_zombie_dlc4_freeze_death_c; - dummy_anim_ref = %ai_zombie_dlc4_freeze_death_d; - dummy_anim_ref = %ai_zombie_dlc4_freeze_death_e; - dummy_anim_ref = %ai_zombie_death_icestaff_a; - dummy_anim_ref = %ai_zombie_death_icestaff_b; - dummy_anim_ref = %ai_zombie_death_icestaff_c; - dummy_anim_ref = %ai_zombie_death_icestaff_d; - dummy_anim_ref = %ai_zombie_death_icestaff_e; - dummy_anim_ref = %ai_zombie_dlc4_crawl_freeze_death_01; - dummy_anim_ref = %ai_zombie_dlc4_crawl_freeze_death_02; - dummy_anim_ref = %ai_zombie_afterlife_stun_a; - dummy_anim_ref = %ai_zombie_afterlife_stun_b; - dummy_anim_ref = %ai_zombie_afterlife_stun_c; - dummy_anim_ref = %ai_zombie_afterlife_stun_d; - dummy_anim_ref = %ai_zombie_afterlife_stun_e; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_a; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_b; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_c; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_a; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_b; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_c; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_d; - dummy_anim_ref = %ai_zombie_firestaff_death_walking_a; - dummy_anim_ref = %ai_zombie_firestaff_death_walking_b; - dummy_anim_ref = %ai_zombie_firestaff_death_walking_c; - dummy_anim_ref = %ai_zombie_firestaff_death_collapse_a; - dummy_anim_ref = %ai_zombie_firestaff_death_collapse_b; - dummy_anim_ref = %ai_zombie_grabbed_by_mech; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_tomb_basic.asd"; - self.animtree = "zm_tomb_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 6 ); - switch( randchar ) - { - case 0: - character/c_zom_tomb_german_2b_nohat::main(); - break; - case 1: - character/c_zom_tomb_german_3c::main(); - break; - case 2: - character/c_zom_tomb_german_3c_nohat::main(); - break; - case 3: - character/c_zom_tomb_german_bare::main(); - break; - case 4: - character/c_zom_tomb_german_bare_nohat::main(); - break; - case 5: - character/c_zom_tomb_german_bare_nohat::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_tomb_basic" ); - character/c_zom_tomb_german_2b_nohat::precache(); - character/c_zom_tomb_german_3c::precache(); - character/c_zom_tomb_german_3c_nohat::precache(); - character/c_zom_tomb_german_bare::precache(); - character/c_zom_tomb_german_bare_nohat::precache(); - character/c_zom_tomb_german_bare_nohat::precache(); -} diff --git a/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_basic_zone_capture.gsc b/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_basic_zone_capture.gsc deleted file mode 100644 index 66ec9cf..0000000 --- a/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_basic_zone_capture.gsc +++ /dev/null @@ -1,386 +0,0 @@ - -#using_animtree( "zm_tomb_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_dugup; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_jump_down_markiv_front; - dummy_anim_ref = %ai_zombie_jump_down_markiv_leftfront; - dummy_anim_ref = %ai_zombie_jump_down_markiv_leftmid; - dummy_anim_ref = %ai_zombie_jump_down_markiv_leftrear; - dummy_anim_ref = %ai_zombie_jump_down_markiv_rear; - dummy_anim_ref = %ai_zombie_jump_down_markiv_rightfront; - dummy_anim_ref = %ai_zombie_jump_down_markiv_rightmid; - dummy_anim_ref = %ai_zombie_jump_down_markiv_rightrear; - dummy_anim_ref = %ai_zombie_jump_up_markiv_front; - dummy_anim_ref = %ai_zombie_jump_up_markiv_leftfront; - dummy_anim_ref = %ai_zombie_jump_up_markiv_leftmid; - dummy_anim_ref = %ai_zombie_jump_up_markiv_leftrear; - dummy_anim_ref = %ai_zombie_jump_up_markiv_rear; - dummy_anim_ref = %ai_zombie_jump_up_markiv_rightfront; - dummy_anim_ref = %ai_zombie_jump_up_markiv_rightmid; - dummy_anim_ref = %ai_zombie_jump_up_markiv_rightrear; - dummy_anim_ref = %ai_zombie_jump_up_onto_markiv_rear; - dummy_anim_ref = %ai_zombie_crawl_jump_up_onto_markiv_rear; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_front; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftfront; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftmid; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_leftrear; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rear; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightfront; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightmid; - dummy_anim_ref = %ai_zombie_crawl_jump_down_markiv_rightrear; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_front; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftfront; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftmid; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_leftrear; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rear; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightfront; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightmid; - dummy_anim_ref = %ai_zombie_crawl_jump_up_markiv_rightrear; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_72; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_up_48; - dummy_anim_ref = %ai_zombie_jump_up_96; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_72; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_96; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_traverse_alcove_40; - dummy_anim_ref = %ai_zombie_traverse_alcove_56; - dummy_anim_ref = %ai_zombie_traverse_alcove_96; - dummy_anim_ref = %ai_zombie_traverse_scaffold_72; - dummy_anim_ref = %ai_zombie_traverse_scaffold_84; - dummy_anim_ref = %ai_zombie_traverse_scaffold_100; - dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_72; - dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_84; - dummy_anim_ref = %ai_zombie_crawler_traverse_scaffold_100; - dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_96; - dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_112; - dummy_anim_ref = %ai_zombie_jump_down_dlc4_trench_wall_120; - dummy_anim_ref = %ai_zombie_jump_up_dlc4_trench_wall_140; - dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_96; - dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_112; - dummy_anim_ref = %ai_zombie_crawl_jump_down_dlc4_trench_wall_120; - dummy_anim_ref = %ai_zombie_crawl_jump_up_dlc4_trench_wall_140; - dummy_anim_ref = %ai_zombie_vaultover_barbedwire; - dummy_anim_ref = %ai_zombie_vaultover_barbedwire_24; - dummy_anim_ref = %ai_zombie_crawl_vaultover_barbedwire; - dummy_anim_ref = %ai_zombie_crawl_vaultover_barbedwire_24; - dummy_anim_ref = %ai_zombie_crawl_jump_down_church; - dummy_anim_ref = %ai_zombie_jump_down_church; - dummy_anim_ref = %ai_zombie_thundergun_hit; - dummy_anim_ref = %ai_zombie_thundergun_hit_armslegsforward; - dummy_anim_ref = %ai_zombie_thundergun_hit_doublebounce; - dummy_anim_ref = %ai_zombie_thundergun_hit_forwardtoface; - dummy_anim_ref = %ai_zombie_thundergun_hit_upontoback; - dummy_anim_ref = %ai_zombie_thundergun_hit_stumblefall; - dummy_anim_ref = %ai_zombie_thundergun_hit_deadfallknee; - dummy_anim_ref = %ai_zombie_thundergun_hit_flatonback; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_legsout_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_left; - dummy_anim_ref = %ai_zombie_thundergun_hit_jackiespin_right; - dummy_anim_ref = %ai_zombie_thundergun_hit_faceplant; - dummy_anim_ref = %ai_zombie_thundergun_getup; - dummy_anim_ref = %ai_zombie_thundergun_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_c; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_a; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_b; - dummy_anim_ref = %ai_zombie_thundergun_getup_quick_c; - dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_a; - dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_b; - dummy_anim_ref = %ai_zombie_thundergun_sprinter_getup_c; - dummy_anim_ref = %ai_zombie_dlc4_tesla_death_a; - dummy_anim_ref = %ai_zombie_dlc4_tesla_death_b; - dummy_anim_ref = %ai_zombie_dlc4_tesla_death_c; - dummy_anim_ref = %ai_zombie_dlc4_tesla_death_d; - dummy_anim_ref = %ai_zombie_dlc4_tesla_death_e; - dummy_anim_ref = %ai_zombie_dlc4_tesla_crawl_death_a; - dummy_anim_ref = %ai_zombie_dlc4_tesla_crawl_death_b; - dummy_anim_ref = %ai_zombie_dlc4_freeze_death_a; - dummy_anim_ref = %ai_zombie_dlc4_freeze_death_b; - dummy_anim_ref = %ai_zombie_dlc4_freeze_death_c; - dummy_anim_ref = %ai_zombie_dlc4_freeze_death_d; - dummy_anim_ref = %ai_zombie_dlc4_freeze_death_e; - dummy_anim_ref = %ai_zombie_death_icestaff_a; - dummy_anim_ref = %ai_zombie_death_icestaff_b; - dummy_anim_ref = %ai_zombie_death_icestaff_c; - dummy_anim_ref = %ai_zombie_death_icestaff_d; - dummy_anim_ref = %ai_zombie_death_icestaff_e; - dummy_anim_ref = %ai_zombie_dlc4_crawl_freeze_death_01; - dummy_anim_ref = %ai_zombie_dlc4_crawl_freeze_death_02; - dummy_anim_ref = %ai_zombie_afterlife_stun_a; - dummy_anim_ref = %ai_zombie_afterlife_stun_b; - dummy_anim_ref = %ai_zombie_afterlife_stun_c; - dummy_anim_ref = %ai_zombie_afterlife_stun_d; - dummy_anim_ref = %ai_zombie_afterlife_stun_e; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_a; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_b; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_c; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_a; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_b; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_c; - dummy_anim_ref = %ai_zombie_airstaff_death_vacuumed_midair_d; - dummy_anim_ref = %ai_zombie_firestaff_death_walking_a; - dummy_anim_ref = %ai_zombie_firestaff_death_walking_b; - dummy_anim_ref = %ai_zombie_firestaff_death_walking_c; - dummy_anim_ref = %ai_zombie_firestaff_death_collapse_a; - dummy_anim_ref = %ai_zombie_firestaff_death_collapse_b; - dummy_anim_ref = %ai_zombie_grabbed_by_mech; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_tomb_basic.asd"; - self.animtree = "zm_tomb_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = "fly_step_crusader"; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_tomb_crusader_zc::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_tomb_basic" ); - character/c_zom_tomb_crusader_zc::precache(); -} diff --git a/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_giant_robot.gsc b/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_giant_robot.gsc deleted file mode 100644 index 259fcf1..0000000 --- a/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_giant_robot.gsc +++ /dev/null @@ -1,62 +0,0 @@ - -#using_animtree( "zm_tomb_giant_robot" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_giant_robot_walk_a; - dummy_anim_ref = %ai_zombie_giant_robot_walk_b; - dummy_anim_ref = %ai_zombie_giant_robot_walk_nml_intro; - dummy_anim_ref = %ai_zombie_giant_robot_walk_nml; - dummy_anim_ref = %ai_zombie_giant_robot_walk_nml_outtro; - dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches_intro; - dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches; - dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches_outtro; - dummy_anim_ref = %ai_zombie_giant_robot_walk_village_intro; - dummy_anim_ref = %ai_zombie_giant_robot_walk_village; - dummy_anim_ref = %ai_zombie_giant_robot_walk_village_outtro; - dummy_anim_ref = %ai_zombie_giant_robot_bunker_intro; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_tomb_giant_robot.asd"; - self.animtree = "zm_tomb_giant_robot.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "neutral"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_giant_robot::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "neutral" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_tomb_giant_robot" ); - character/c_zom_giant_robot::precache(); -} diff --git a/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_giant_robot_0.gsc b/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_giant_robot_0.gsc deleted file mode 100644 index 2365c3f..0000000 --- a/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_giant_robot_0.gsc +++ /dev/null @@ -1,62 +0,0 @@ - -#using_animtree( "zm_tomb_giant_robot" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_giant_robot_walk_a; - dummy_anim_ref = %ai_zombie_giant_robot_walk_b; - dummy_anim_ref = %ai_zombie_giant_robot_walk_nml_intro; - dummy_anim_ref = %ai_zombie_giant_robot_walk_nml; - dummy_anim_ref = %ai_zombie_giant_robot_walk_nml_outtro; - dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches_intro; - dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches; - dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches_outtro; - dummy_anim_ref = %ai_zombie_giant_robot_walk_village_intro; - dummy_anim_ref = %ai_zombie_giant_robot_walk_village; - dummy_anim_ref = %ai_zombie_giant_robot_walk_village_outtro; - dummy_anim_ref = %ai_zombie_giant_robot_bunker_intro; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_tomb_giant_robot.asd"; - self.animtree = "zm_tomb_giant_robot.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "neutral"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_giant_robot_0::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "neutral" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_tomb_giant_robot" ); - character/c_zom_giant_robot_0::precache(); -} diff --git a/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_giant_robot_1.gsc b/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_giant_robot_1.gsc deleted file mode 100644 index eba30d2..0000000 --- a/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_giant_robot_1.gsc +++ /dev/null @@ -1,62 +0,0 @@ - -#using_animtree( "zm_tomb_giant_robot" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_giant_robot_walk_a; - dummy_anim_ref = %ai_zombie_giant_robot_walk_b; - dummy_anim_ref = %ai_zombie_giant_robot_walk_nml_intro; - dummy_anim_ref = %ai_zombie_giant_robot_walk_nml; - dummy_anim_ref = %ai_zombie_giant_robot_walk_nml_outtro; - dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches_intro; - dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches; - dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches_outtro; - dummy_anim_ref = %ai_zombie_giant_robot_walk_village_intro; - dummy_anim_ref = %ai_zombie_giant_robot_walk_village; - dummy_anim_ref = %ai_zombie_giant_robot_walk_village_outtro; - dummy_anim_ref = %ai_zombie_giant_robot_bunker_intro; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_tomb_giant_robot.asd"; - self.animtree = "zm_tomb_giant_robot.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "neutral"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_giant_robot_1::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "neutral" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_tomb_giant_robot" ); - character/c_zom_giant_robot_1::precache(); -} diff --git a/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_giant_robot_2.gsc b/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_giant_robot_2.gsc deleted file mode 100644 index 61f7194..0000000 --- a/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_giant_robot_2.gsc +++ /dev/null @@ -1,62 +0,0 @@ - -#using_animtree( "zm_tomb_giant_robot" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_giant_robot_walk_a; - dummy_anim_ref = %ai_zombie_giant_robot_walk_b; - dummy_anim_ref = %ai_zombie_giant_robot_walk_nml_intro; - dummy_anim_ref = %ai_zombie_giant_robot_walk_nml; - dummy_anim_ref = %ai_zombie_giant_robot_walk_nml_outtro; - dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches_intro; - dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches; - dummy_anim_ref = %ai_zombie_giant_robot_walk_trenches_outtro; - dummy_anim_ref = %ai_zombie_giant_robot_walk_village_intro; - dummy_anim_ref = %ai_zombie_giant_robot_walk_village; - dummy_anim_ref = %ai_zombie_giant_robot_walk_village_outtro; - dummy_anim_ref = %ai_zombie_giant_robot_bunker_intro; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_tomb_giant_robot.asd"; - self.animtree = "zm_tomb_giant_robot.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "neutral"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_giant_robot_2::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "neutral" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_tomb_giant_robot" ); - character/c_zom_giant_robot_2::precache(); -} diff --git a/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_mech_zombie.gsc b/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_mech_zombie.gsc deleted file mode 100644 index 56b242a..0000000 --- a/Zombie Maps/Origins/zm_tomb/aitype/zm_tomb_mech_zombie.gsc +++ /dev/null @@ -1,122 +0,0 @@ - -#using_animtree( "zm_tomb_mechz" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_mech_death; - dummy_anim_ref = %ai_zombie_mech_death_explode; - dummy_anim_ref = %ai_zombie_mech_ft_aim_1; - dummy_anim_ref = %ai_zombie_mech_ft_aim_2; - dummy_anim_ref = %ai_zombie_mech_ft_aim_3; - dummy_anim_ref = %ai_zombie_mech_ft_aim_4; - dummy_anim_ref = %ai_zombie_mech_ft_aim_5; - dummy_anim_ref = %ai_zombie_mech_ft_aim_6; - dummy_anim_ref = %ai_zombie_mech_ft_aim_7; - dummy_anim_ref = %ai_zombie_mech_ft_aim_8; - dummy_anim_ref = %ai_zombie_mech_ft_aim_9; - dummy_anim_ref = %ai_zombie_mech_ft_intro_sprint_to_aim_5; - dummy_anim_ref = %ai_zombie_mech_ft_aim_idle; - dummy_anim_ref = %ai_zombie_mech_ft_fire_end; - dummy_anim_ref = %ai_zombie_mech_ft_fire_loop; - dummy_anim_ref = %ai_zombie_mech_ft_fire_start; - dummy_anim_ref = %ai_zombie_mech_ft_sweep; - dummy_anim_ref = %ai_zombie_mech_ft_sweep_up; - dummy_anim_ref = %ai_zombie_mech_ft_burn_player; - dummy_anim_ref = %ai_zombie_mech_grapple_aim_1; - dummy_anim_ref = %ai_zombie_mech_grapple_aim_2; - dummy_anim_ref = %ai_zombie_mech_grapple_aim_3; - dummy_anim_ref = %ai_zombie_mech_grapple_aim_4; - dummy_anim_ref = %ai_zombie_mech_grapple_aim_5; - dummy_anim_ref = %ai_zombie_mech_grapple_aim_6; - dummy_anim_ref = %ai_zombie_mech_grapple_aim_7; - dummy_anim_ref = %ai_zombie_mech_grapple_aim_8; - dummy_anim_ref = %ai_zombie_mech_grapple_aim_9; - dummy_anim_ref = %ai_zombie_mech_grapple_intro_sprint_to_aim_5; - dummy_anim_ref = %ai_zombie_mech_grapple_arm_closed_idle; - dummy_anim_ref = %ai_zombie_mech_grapple_arm_open_idle; - dummy_anim_ref = %ai_zombie_mech_idle; - dummy_anim_ref = %ai_zombie_mech_melee_a; - dummy_anim_ref = %ai_zombie_mech_melee_b; - dummy_anim_ref = %ai_zombie_mech_run_melee; - dummy_anim_ref = %ai_zombie_mech_sprint_melee; - dummy_anim_ref = %ai_zombie_mech_pain; - dummy_anim_ref = %ai_zombie_mech_injury_hit_by_tank; - dummy_anim_ref = %ai_zombie_mech_injury_down_by_tank_loop; - dummy_anim_ref = %ai_zombie_mech_injury_recover_from_tank; - dummy_anim_ref = %ai_zombie_mech_injury_hit_by_footstep; - dummy_anim_ref = %ai_zombie_mech_injury_down_by_footstep_loop; - dummy_anim_ref = %ai_zombie_mech_injury_recover_from_footstep; - dummy_anim_ref = %ai_zombie_mech_stunned; - dummy_anim_ref = %ai_zombie_mech_powercore_pain; - dummy_anim_ref = %ai_zombie_mech_faceplate_pain; - dummy_anim_ref = %ai_zombie_mech_head_pain; - dummy_anim_ref = %ai_zombie_mech_run; - dummy_anim_ref = %ai_zombie_mech_walk_basic; - dummy_anim_ref = %ai_zombie_mech_walk_patrol; - dummy_anim_ref = %ai_zombie_mech_sprint; - dummy_anim_ref = %ai_zombie_mech_sprint_booster_liftoff; - dummy_anim_ref = %ai_zombie_mech_sprint_booster_loop; - dummy_anim_ref = %ai_zombie_mech_sprint_booster_touchdown; - dummy_anim_ref = %ai_zombie_mech_intro_jump_in; - dummy_anim_ref = %ai_zombie_mech_exit; - dummy_anim_ref = %ai_zombie_mech_exit_hover; - dummy_anim_ref = %ai_zombie_mech_arrive; - dummy_anim_ref = %ai_zombie_mech_jump_down_48; - dummy_anim_ref = %ai_zombie_mech_jump_down_72; - dummy_anim_ref = %ai_zombie_mech_jump_down_96; - dummy_anim_ref = %ai_zombie_mech_jump_down_127; - dummy_anim_ref = %ai_zombie_mech_jump_up_48; - dummy_anim_ref = %ai_zombie_mech_jump_up_96; - dummy_anim_ref = %ai_zombie_mech_jump_up_127; - dummy_anim_ref = %ai_zombie_mech_traverse_hurdle_40; - dummy_anim_ref = %ai_zombie_mech_jump_across_120; - dummy_anim_ref = %ai_zombie_mech_jump_down_church; - dummy_anim_ref = %ai_zombie_mech_jump_down_dlc4_trench_wall_96; - dummy_anim_ref = %ai_zombie_mech_jump_down_dlc4_trench_wall_112; - dummy_anim_ref = %ai_zombie_mech_jump_down_dlc4_trench_wall_120; - dummy_anim_ref = %ai_zombie_mech_jump_up_dlc4_trench_wall_140; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_tomb_mechz.asd"; - self.animtree = "zm_tomb_mechz.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = "zm_mechz_footstepfxtable"; - self.footstepprepend = "fly_step_mechz"; - self.footstepscriptcallback = 1; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_dlc_mech::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_tomb_mechz" ); - character/c_zom_dlc_mech::precache(); -} diff --git a/Zombie Maps/Origins/zm_tomb/character/c_zom_dlc_mech.gsc b/Zombie Maps/Origins/zm_tomb/character/c_zom_dlc_mech.gsc deleted file mode 100644 index e30b2af..0000000 --- a/Zombie Maps/Origins/zm_tomb/character/c_zom_dlc_mech.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_mech_body" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_mech_body" ); -} diff --git a/Zombie Maps/Origins/zm_tomb/character/c_zom_giant_robot.gsc b/Zombie Maps/Origins/zm_tomb/character/c_zom_giant_robot.gsc deleted file mode 100644 index 8daea0c..0000000 --- a/Zombie Maps/Origins/zm_tomb/character/c_zom_giant_robot.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "veh_t6_dlc_zm_robot" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "veh_t6_dlc_zm_robot" ); -} diff --git a/Zombie Maps/Origins/zm_tomb/character/c_zom_giant_robot_0.gsc b/Zombie Maps/Origins/zm_tomb/character/c_zom_giant_robot_0.gsc deleted file mode 100644 index 26f8d9a..0000000 --- a/Zombie Maps/Origins/zm_tomb/character/c_zom_giant_robot_0.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "veh_t6_dlc_zm_robot_0" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "veh_t6_dlc_zm_robot_0" ); -} diff --git a/Zombie Maps/Origins/zm_tomb/character/c_zom_giant_robot_1.gsc b/Zombie Maps/Origins/zm_tomb/character/c_zom_giant_robot_1.gsc deleted file mode 100644 index 2f3093e..0000000 --- a/Zombie Maps/Origins/zm_tomb/character/c_zom_giant_robot_1.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "veh_t6_dlc_zm_robot_1" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "veh_t6_dlc_zm_robot_1" ); -} diff --git a/Zombie Maps/Origins/zm_tomb/character/c_zom_giant_robot_2.gsc b/Zombie Maps/Origins/zm_tomb/character/c_zom_giant_robot_2.gsc deleted file mode 100644 index 0dfc9fa..0000000 --- a/Zombie Maps/Origins/zm_tomb/character/c_zom_giant_robot_2.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "veh_t6_dlc_zm_robot_2" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "veh_t6_dlc_zm_robot_2" ); -} diff --git a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_crusader_1a.gsc b/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_crusader_1a.gsc deleted file mode 100644 index 5dcfced..0000000 --- a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_crusader_1a.gsc +++ /dev/null @@ -1,50 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_tomb_crusader_body_1a" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_tomb_crusader_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_tomb_crusader_hat_1"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_tomb_crusader_body_g_upclean_1a"; - self.torsodmg2 = "c_zom_tomb_crusader_body_g_rarm_1a"; - self.torsodmg3 = "c_zom_tomb_crusader_body_g_larm_1a"; - self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; - self.legdmg1 = "c_zom_tomb_crusader_body_g_lowclean_1a"; - self.legdmg2 = "c_zom_tomb_crusader_body_g_rleg_1a"; - self.legdmg3 = "c_zom_tomb_crusader_body_g_lleg_1a"; - self.legdmg4 = "c_zom_tomb_crusader_body_g_legsoff_1a"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; - self.gibspawn5 = "c_zom_tomb_crusader_hat_1"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_tomb_crusader_body_1a" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_tomb_crusader_head_als::main() ); - precachemodel( "c_zom_tomb_crusader_hat_1" ); - precachemodel( "c_zom_tomb_crusader_body_g_upclean_1a" ); - precachemodel( "c_zom_tomb_crusader_body_g_rarm_1a" ); - precachemodel( "c_zom_tomb_crusader_body_g_larm_1a" ); - precachemodel( "c_zom_tomb_german_body_g_behead" ); - precachemodel( "c_zom_tomb_crusader_body_g_lowclean_1a" ); - precachemodel( "c_zom_tomb_crusader_body_g_rleg_1a" ); - precachemodel( "c_zom_tomb_crusader_body_g_lleg_1a" ); - precachemodel( "c_zom_tomb_crusader_body_g_legsoff_1a" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_tomb_crusader_hat_1" ); -} diff --git a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_crusader_1a_nohat.gsc b/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_crusader_1a_nohat.gsc deleted file mode 100644 index 5737d3f..0000000 --- a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_crusader_1a_nohat.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_tomb_crusader_body_1a_nohat" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_tomb_crusader_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_tomb_crusader_body_g_upclean_1a"; - self.torsodmg2 = "c_zom_tomb_crusader_body_g_rarm_1a"; - self.torsodmg3 = "c_zom_tomb_crusader_body_g_larm_1a"; - self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; - self.legdmg1 = "c_zom_tomb_crusader_body_g_lowclean_1a"; - self.legdmg2 = "c_zom_tomb_crusader_body_g_rleg_1a"; - self.legdmg3 = "c_zom_tomb_crusader_body_g_lleg_1a"; - self.legdmg4 = "c_zom_tomb_crusader_body_g_legsoff_1a"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_tomb_crusader_body_1a_nohat" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_tomb_crusader_head_als::main() ); - precachemodel( "c_zom_tomb_crusader_body_g_upclean_1a" ); - precachemodel( "c_zom_tomb_crusader_body_g_rarm_1a" ); - precachemodel( "c_zom_tomb_crusader_body_g_larm_1a" ); - precachemodel( "c_zom_tomb_german_body_g_behead" ); - precachemodel( "c_zom_tomb_crusader_body_g_lowclean_1a" ); - precachemodel( "c_zom_tomb_crusader_body_g_rleg_1a" ); - precachemodel( "c_zom_tomb_crusader_body_g_lleg_1a" ); - precachemodel( "c_zom_tomb_crusader_body_g_legsoff_1a" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_crusader_1c.gsc b/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_crusader_1c.gsc deleted file mode 100644 index 48f838d..0000000 --- a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_crusader_1c.gsc +++ /dev/null @@ -1,50 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_tomb_crusader_body_1c" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_tomb_crusader_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_tomb_crusader_hat_1"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_tomb_crusader_body_g_upclean_1c"; - self.torsodmg2 = "c_zom_tomb_crusader_body_g_rarm_1c"; - self.torsodmg3 = "c_zom_tomb_crusader_body_g_larm_1c"; - self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; - self.legdmg1 = "c_zom_tomb_crusader_body_g_lowclean_1c"; - self.legdmg2 = "c_zom_tomb_crusader_body_g_rleg_1c"; - self.legdmg3 = "c_zom_tomb_crusader_body_g_lleg_1c"; - self.legdmg4 = "c_zom_tomb_crusader_body_g_legsoff_1c"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; - self.gibspawn5 = "c_zom_tomb_crusader_hat_3"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_tomb_crusader_body_1c" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_tomb_crusader_head_als::main() ); - precachemodel( "c_zom_tomb_crusader_hat_1" ); - precachemodel( "c_zom_tomb_crusader_body_g_upclean_1c" ); - precachemodel( "c_zom_tomb_crusader_body_g_rarm_1c" ); - precachemodel( "c_zom_tomb_crusader_body_g_larm_1c" ); - precachemodel( "c_zom_tomb_german_body_g_behead" ); - precachemodel( "c_zom_tomb_crusader_body_g_lowclean_1c" ); - precachemodel( "c_zom_tomb_crusader_body_g_rleg_1c" ); - precachemodel( "c_zom_tomb_crusader_body_g_lleg_1c" ); - precachemodel( "c_zom_tomb_crusader_body_g_legsoff_1c" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_tomb_crusader_hat_3" ); -} diff --git a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_crusader_2b.gsc b/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_crusader_2b.gsc deleted file mode 100644 index f5fc18b..0000000 --- a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_crusader_2b.gsc +++ /dev/null @@ -1,50 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_tomb_crusader_body_2b" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_tomb_crusader_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_tomb_crusader_hat_2"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_tomb_crusader_body_g_upclean_2b"; - self.torsodmg2 = "c_zom_tomb_crusader_body_g_rarm_2b"; - self.torsodmg3 = "c_zom_tomb_crusader_body_g_larm_2b"; - self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; - self.legdmg1 = "c_zom_tomb_crusader_body_g_lowclean_2b"; - self.legdmg2 = "c_zom_tomb_crusader_body_g_rleg_2b"; - self.legdmg3 = "c_zom_tomb_crusader_body_g_lleg_2b"; - self.legdmg4 = "c_zom_tomb_crusader_body_g_legsoff_2b"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; - self.gibspawn5 = "c_zom_tomb_crusader_hat_3"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_tomb_crusader_body_2b" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_tomb_crusader_head_als::main() ); - precachemodel( "c_zom_tomb_crusader_hat_2" ); - precachemodel( "c_zom_tomb_crusader_body_g_upclean_2b" ); - precachemodel( "c_zom_tomb_crusader_body_g_rarm_2b" ); - precachemodel( "c_zom_tomb_crusader_body_g_larm_2b" ); - precachemodel( "c_zom_tomb_german_body_g_behead" ); - precachemodel( "c_zom_tomb_crusader_body_g_lowclean_2b" ); - precachemodel( "c_zom_tomb_crusader_body_g_rleg_2b" ); - precachemodel( "c_zom_tomb_crusader_body_g_lleg_2b" ); - precachemodel( "c_zom_tomb_crusader_body_g_legsoff_2b" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_tomb_crusader_hat_3" ); -} diff --git a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_crusader_2b_nohat.gsc b/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_crusader_2b_nohat.gsc deleted file mode 100644 index 7e85a4e..0000000 --- a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_crusader_2b_nohat.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_tomb_crusader_body_2b_nohat" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_tomb_crusader_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_tomb_crusader_body_g_upclean_2b"; - self.torsodmg2 = "c_zom_tomb_crusader_body_g_rarm_2b"; - self.torsodmg3 = "c_zom_tomb_crusader_body_g_larm_2b"; - self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; - self.legdmg1 = "c_zom_tomb_crusader_body_g_lowclean_2b"; - self.legdmg2 = "c_zom_tomb_crusader_body_g_rleg_2b"; - self.legdmg3 = "c_zom_tomb_crusader_body_g_lleg_2b"; - self.legdmg4 = "c_zom_tomb_crusader_body_g_legsoff_2b"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_tomb_crusader_body_2b_nohat" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_tomb_crusader_head_als::main() ); - precachemodel( "c_zom_tomb_crusader_body_g_upclean_2b" ); - precachemodel( "c_zom_tomb_crusader_body_g_rarm_2b" ); - precachemodel( "c_zom_tomb_crusader_body_g_larm_2b" ); - precachemodel( "c_zom_tomb_german_body_g_behead" ); - precachemodel( "c_zom_tomb_crusader_body_g_lowclean_2b" ); - precachemodel( "c_zom_tomb_crusader_body_g_rleg_2b" ); - precachemodel( "c_zom_tomb_crusader_body_g_lleg_2b" ); - precachemodel( "c_zom_tomb_crusader_body_g_legsoff_2b" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_crusader_2c.gsc b/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_crusader_2c.gsc deleted file mode 100644 index ed32d15..0000000 --- a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_crusader_2c.gsc +++ /dev/null @@ -1,50 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_tomb_crusader_body_2c" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_tomb_crusader_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_tomb_crusader_hat_2"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_tomb_crusader_body_g_upclean_2c"; - self.torsodmg2 = "c_zom_tomb_crusader_body_g_rarm_2c"; - self.torsodmg3 = "c_zom_tomb_crusader_body_g_larm_2c"; - self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; - self.legdmg1 = "c_zom_tomb_crusader_body_g_lowclean_2c"; - self.legdmg2 = "c_zom_tomb_crusader_body_g_rleg_2c"; - self.legdmg3 = "c_zom_tomb_crusader_body_g_lleg_2c"; - self.legdmg4 = "c_zom_tomb_crusader_body_g_legsoff_2c"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; - self.gibspawn5 = "c_zom_tomb_crusader_hat_1"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_tomb_crusader_body_2c" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_tomb_crusader_head_als::main() ); - precachemodel( "c_zom_tomb_crusader_hat_2" ); - precachemodel( "c_zom_tomb_crusader_body_g_upclean_2c" ); - precachemodel( "c_zom_tomb_crusader_body_g_rarm_2c" ); - precachemodel( "c_zom_tomb_crusader_body_g_larm_2c" ); - precachemodel( "c_zom_tomb_german_body_g_behead" ); - precachemodel( "c_zom_tomb_crusader_body_g_lowclean_2c" ); - precachemodel( "c_zom_tomb_crusader_body_g_rleg_2c" ); - precachemodel( "c_zom_tomb_crusader_body_g_lleg_2c" ); - precachemodel( "c_zom_tomb_crusader_body_g_legsoff_2c" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_tomb_crusader_hat_1" ); -} diff --git a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_crusader_zc.gsc b/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_crusader_zc.gsc deleted file mode 100644 index 1f92889..0000000 --- a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_crusader_zc.gsc +++ /dev/null @@ -1,49 +0,0 @@ - -main() -{ - self setmodel( "c_zom_tomb_crusader_body_zc" ); - self.headmodel = "c_zom_tomb_crusader_headz"; - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_tomb_crusader_hat_3"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_tomb_crusader_body_g_upclean_zc"; - self.torsodmg2 = "c_zom_tomb_crusader_body_g_rarm_zc"; - self.torsodmg3 = "c_zom_tomb_crusader_body_g_larm_zc"; - self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; - self.legdmg1 = "c_zom_tomb_crusader_body_g_lowclean_zc"; - self.legdmg2 = "c_zom_tomb_crusader_body_g_rleg_zc"; - self.legdmg3 = "c_zom_tomb_crusader_body_g_lleg_zc"; - self.legdmg4 = "c_zom_tomb_crusader_body_g_legsoff_zc"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; - self.gibspawn5 = "c_zom_tomb_crusader_hat_3"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_tomb_crusader_body_zc" ); - precachemodel( "c_zom_tomb_crusader_headz" ); - precachemodel( "c_zom_tomb_crusader_hat_3" ); - precachemodel( "c_zom_tomb_crusader_body_g_upclean_zc" ); - precachemodel( "c_zom_tomb_crusader_body_g_rarm_zc" ); - precachemodel( "c_zom_tomb_crusader_body_g_larm_zc" ); - precachemodel( "c_zom_tomb_german_body_g_behead" ); - precachemodel( "c_zom_tomb_crusader_body_g_lowclean_zc" ); - precachemodel( "c_zom_tomb_crusader_body_g_rleg_zc" ); - precachemodel( "c_zom_tomb_crusader_body_g_lleg_zc" ); - precachemodel( "c_zom_tomb_crusader_body_g_legsoff_zc" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_tomb_crusader_hat_3" ); -} diff --git a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_1a.gsc b/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_1a.gsc deleted file mode 100644 index e91b016..0000000 --- a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_1a.gsc +++ /dev/null @@ -1,50 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_tomb_german_body_1a" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_tomb_german_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_tomb_german_hat_1"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_tomb_german_body_g_upclean_1a"; - self.torsodmg2 = "c_zom_tomb_german_body_g_rarm_1a"; - self.torsodmg3 = "c_zom_tomb_german_body_g_larm_1a"; - self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; - self.legdmg1 = "c_zom_tomb_german_body_g_lowclean_1a"; - self.legdmg2 = "c_zom_tomb_german_body_g_rleg_1a"; - self.legdmg3 = "c_zom_tomb_german_body_g_lleg_1a"; - self.legdmg4 = "c_zom_tomb_german_body_g_legsoff_1a"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; - self.gibspawn5 = "c_zom_tomb_german_hat_1"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_tomb_german_body_1a" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_tomb_german_head_als::main() ); - precachemodel( "c_zom_tomb_german_hat_1" ); - precachemodel( "c_zom_tomb_german_body_g_upclean_1a" ); - precachemodel( "c_zom_tomb_german_body_g_rarm_1a" ); - precachemodel( "c_zom_tomb_german_body_g_larm_1a" ); - precachemodel( "c_zom_tomb_german_body_g_behead" ); - precachemodel( "c_zom_tomb_german_body_g_lowclean_1a" ); - precachemodel( "c_zom_tomb_german_body_g_rleg_1a" ); - precachemodel( "c_zom_tomb_german_body_g_lleg_1a" ); - precachemodel( "c_zom_tomb_german_body_g_legsoff_1a" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_tomb_german_hat_1" ); -} diff --git a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_1a_nohat.gsc b/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_1a_nohat.gsc deleted file mode 100644 index 35f5c0a..0000000 --- a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_1a_nohat.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_tomb_german_body_1a_nohat" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_tomb_german_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_tomb_german_body_g_upclean_1a"; - self.torsodmg2 = "c_zom_tomb_german_body_g_rarm_1a"; - self.torsodmg3 = "c_zom_tomb_german_body_g_larm_1a"; - self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; - self.legdmg1 = "c_zom_tomb_german_body_g_lowclean_1a"; - self.legdmg2 = "c_zom_tomb_german_body_g_rleg_1a"; - self.legdmg3 = "c_zom_tomb_german_body_g_lleg_1a"; - self.legdmg4 = "c_zom_tomb_german_body_g_legsoff_1a"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_tomb_german_body_1a_nohat" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_tomb_german_head_als::main() ); - precachemodel( "c_zom_tomb_german_body_g_upclean_1a" ); - precachemodel( "c_zom_tomb_german_body_g_rarm_1a" ); - precachemodel( "c_zom_tomb_german_body_g_larm_1a" ); - precachemodel( "c_zom_tomb_german_body_g_behead" ); - precachemodel( "c_zom_tomb_german_body_g_lowclean_1a" ); - precachemodel( "c_zom_tomb_german_body_g_rleg_1a" ); - precachemodel( "c_zom_tomb_german_body_g_lleg_1a" ); - precachemodel( "c_zom_tomb_german_body_g_legsoff_1a" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_2b.gsc b/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_2b.gsc deleted file mode 100644 index 4382a17..0000000 --- a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_2b.gsc +++ /dev/null @@ -1,50 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_tomb_german_body_1b" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_tomb_german_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_tomb_german_hat_2"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_tomb_german_body_g_upclean_1b"; - self.torsodmg2 = "c_zom_tomb_german_body_g_rarm_1b"; - self.torsodmg3 = "c_zom_tomb_german_body_g_larm_1b"; - self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; - self.legdmg1 = "c_zom_tomb_german_body_g_lowclean_1b"; - self.legdmg2 = "c_zom_tomb_german_body_g_rleg_1b"; - self.legdmg3 = "c_zom_tomb_german_body_g_lleg_1b"; - self.legdmg4 = "c_zom_tomb_german_body_g_legsoff_1b"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; - self.gibspawn5 = "c_zom_tomb_german_hat_2"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_tomb_german_body_1b" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_tomb_german_head_als::main() ); - precachemodel( "c_zom_tomb_german_hat_2" ); - precachemodel( "c_zom_tomb_german_body_g_upclean_1b" ); - precachemodel( "c_zom_tomb_german_body_g_rarm_1b" ); - precachemodel( "c_zom_tomb_german_body_g_larm_1b" ); - precachemodel( "c_zom_tomb_german_body_g_behead" ); - precachemodel( "c_zom_tomb_german_body_g_lowclean_1b" ); - precachemodel( "c_zom_tomb_german_body_g_rleg_1b" ); - precachemodel( "c_zom_tomb_german_body_g_lleg_1b" ); - precachemodel( "c_zom_tomb_german_body_g_legsoff_1b" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_tomb_german_hat_2" ); -} diff --git a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_2b_nohat.gsc b/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_2b_nohat.gsc deleted file mode 100644 index 91981da..0000000 --- a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_2b_nohat.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_tomb_german_body_1b_nohat" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_tomb_german_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_tomb_german_body_g_upclean_1b"; - self.torsodmg2 = "c_zom_tomb_german_body_g_rarm_1b"; - self.torsodmg3 = "c_zom_tomb_german_body_g_larm_1b"; - self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; - self.legdmg1 = "c_zom_tomb_german_body_g_lowclean_1b"; - self.legdmg2 = "c_zom_tomb_german_body_g_rleg_1b"; - self.legdmg3 = "c_zom_tomb_german_body_g_lleg_1b"; - self.legdmg4 = "c_zom_tomb_german_body_g_legsoff_1b"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_tomb_german_body_1b_nohat" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_tomb_german_head_als::main() ); - precachemodel( "c_zom_tomb_german_body_g_upclean_1b" ); - precachemodel( "c_zom_tomb_german_body_g_rarm_1b" ); - precachemodel( "c_zom_tomb_german_body_g_larm_1b" ); - precachemodel( "c_zom_tomb_german_body_g_behead" ); - precachemodel( "c_zom_tomb_german_body_g_lowclean_1b" ); - precachemodel( "c_zom_tomb_german_body_g_rleg_1b" ); - precachemodel( "c_zom_tomb_german_body_g_lleg_1b" ); - precachemodel( "c_zom_tomb_german_body_g_legsoff_1b" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_3c.gsc b/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_3c.gsc deleted file mode 100644 index b49c55c..0000000 --- a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_3c.gsc +++ /dev/null @@ -1,50 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_tomb_german_body_3c" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_tomb_german_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_tomb_german_hat_3"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_tomb_german_body_g_upclean_3c"; - self.torsodmg2 = "c_zom_tomb_german_body_g_rarm_3c"; - self.torsodmg3 = "c_zom_tomb_german_body_g_larm_3c"; - self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; - self.legdmg1 = "c_zom_tomb_german_body_g_lowclean_3c"; - self.legdmg2 = "c_zom_tomb_german_body_g_rleg_3c"; - self.legdmg3 = "c_zom_tomb_german_body_g_lleg_3c"; - self.legdmg4 = "c_zom_tomb_german_body_g_legsoff_3c"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; - self.gibspawn5 = "c_zom_tomb_german_hat_3"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_tomb_german_body_3c" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_tomb_german_head_als::main() ); - precachemodel( "c_zom_tomb_german_hat_3" ); - precachemodel( "c_zom_tomb_german_body_g_upclean_3c" ); - precachemodel( "c_zom_tomb_german_body_g_rarm_3c" ); - precachemodel( "c_zom_tomb_german_body_g_larm_3c" ); - precachemodel( "c_zom_tomb_german_body_g_behead" ); - precachemodel( "c_zom_tomb_german_body_g_lowclean_3c" ); - precachemodel( "c_zom_tomb_german_body_g_rleg_3c" ); - precachemodel( "c_zom_tomb_german_body_g_lleg_3c" ); - precachemodel( "c_zom_tomb_german_body_g_legsoff_3c" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_tomb_german_hat_3" ); -} diff --git a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_3c_nohat.gsc b/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_3c_nohat.gsc deleted file mode 100644 index 8f1170d..0000000 --- a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_3c_nohat.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_tomb_german_body_3c_nohat" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_tomb_german_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_tomb_german_body_g_upclean_3c"; - self.torsodmg2 = "c_zom_tomb_german_body_g_rarm_3c"; - self.torsodmg3 = "c_zom_tomb_german_body_g_larm_3c"; - self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; - self.legdmg1 = "c_zom_tomb_german_body_g_lowclean_3c"; - self.legdmg2 = "c_zom_tomb_german_body_g_rleg_3c"; - self.legdmg3 = "c_zom_tomb_german_body_g_lleg_3c"; - self.legdmg4 = "c_zom_tomb_german_body_g_legsoff_3c"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_tomb_german_body_3c_nohat" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_tomb_german_head_als::main() ); - precachemodel( "c_zom_tomb_german_body_g_upclean_3c" ); - precachemodel( "c_zom_tomb_german_body_g_rarm_3c" ); - precachemodel( "c_zom_tomb_german_body_g_larm_3c" ); - precachemodel( "c_zom_tomb_german_body_g_behead" ); - precachemodel( "c_zom_tomb_german_body_g_lowclean_3c" ); - precachemodel( "c_zom_tomb_german_body_g_rleg_3c" ); - precachemodel( "c_zom_tomb_german_body_g_lleg_3c" ); - precachemodel( "c_zom_tomb_german_body_g_legsoff_3c" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_bare.gsc b/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_bare.gsc deleted file mode 100644 index e91b016..0000000 --- a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_bare.gsc +++ /dev/null @@ -1,50 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_tomb_german_body_1a" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_tomb_german_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.hatmodel = "c_zom_tomb_german_hat_1"; - self attach( self.hatmodel ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_tomb_german_body_g_upclean_1a"; - self.torsodmg2 = "c_zom_tomb_german_body_g_rarm_1a"; - self.torsodmg3 = "c_zom_tomb_german_body_g_larm_1a"; - self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; - self.legdmg1 = "c_zom_tomb_german_body_g_lowclean_1a"; - self.legdmg2 = "c_zom_tomb_german_body_g_rleg_1a"; - self.legdmg3 = "c_zom_tomb_german_body_g_lleg_1a"; - self.legdmg4 = "c_zom_tomb_german_body_g_legsoff_1a"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; - self.gibspawn5 = "c_zom_tomb_german_hat_1"; - self.gibspawntag5 = "J_Head"; -} - -precache() -{ - precachemodel( "c_zom_tomb_german_body_1a" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_tomb_german_head_als::main() ); - precachemodel( "c_zom_tomb_german_hat_1" ); - precachemodel( "c_zom_tomb_german_body_g_upclean_1a" ); - precachemodel( "c_zom_tomb_german_body_g_rarm_1a" ); - precachemodel( "c_zom_tomb_german_body_g_larm_1a" ); - precachemodel( "c_zom_tomb_german_body_g_behead" ); - precachemodel( "c_zom_tomb_german_body_g_lowclean_1a" ); - precachemodel( "c_zom_tomb_german_body_g_rleg_1a" ); - precachemodel( "c_zom_tomb_german_body_g_lleg_1a" ); - precachemodel( "c_zom_tomb_german_body_g_legsoff_1a" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); - precachemodel( "c_zom_tomb_german_hat_1" ); -} diff --git a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_bare_nohat.gsc b/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_bare_nohat.gsc deleted file mode 100644 index 7a1a08c..0000000 --- a/Zombie Maps/Origins/zm_tomb/character/c_zom_tomb_german_bare_nohat.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_tomb_german_body_1a" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_tomb_german_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_tomb_german_body_g_upclean_1a"; - self.torsodmg2 = "c_zom_tomb_german_body_g_rarm_1a"; - self.torsodmg3 = "c_zom_tomb_german_body_g_larm_1a"; - self.torsodmg5 = "c_zom_tomb_german_body_g_behead"; - self.legdmg1 = "c_zom_tomb_german_body_g_lowclean_1a"; - self.legdmg2 = "c_zom_tomb_german_body_g_rleg_1a"; - self.legdmg3 = "c_zom_tomb_german_body_g_lleg_1a"; - self.legdmg4 = "c_zom_tomb_german_body_g_legsoff_1a"; - self.gibspawn1 = "c_zom_buried_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_buried_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_buried_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_buried_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_tomb_german_body_1a" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_tomb_german_head_als::main() ); - precachemodel( "c_zom_tomb_german_body_g_upclean_1a" ); - precachemodel( "c_zom_tomb_german_body_g_rarm_1a" ); - precachemodel( "c_zom_tomb_german_body_g_larm_1a" ); - precachemodel( "c_zom_tomb_german_body_g_behead" ); - precachemodel( "c_zom_tomb_german_body_g_lowclean_1a" ); - precachemodel( "c_zom_tomb_german_body_g_rleg_1a" ); - precachemodel( "c_zom_tomb_german_body_g_lleg_1a" ); - precachemodel( "c_zom_tomb_german_body_g_legsoff_1a" ); - precachemodel( "c_zom_buried_g_rarmspawn" ); - precachemodel( "c_zom_buried_g_larmspawn" ); - precachemodel( "c_zom_buried_g_rlegspawn" ); - precachemodel( "c_zom_buried_g_llegspawn" ); -} diff --git a/Zombie Maps/Origins/zm_tomb/xmodelalias/c_zom_tomb_crusader_head_als.gsc b/Zombie Maps/Origins/zm_tomb/xmodelalias/c_zom_tomb_crusader_head_als.gsc deleted file mode 100644 index f8028d3..0000000 --- a/Zombie Maps/Origins/zm_tomb/xmodelalias/c_zom_tomb_crusader_head_als.gsc +++ /dev/null @@ -1,7 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_tomb_crusader_head1"; - a[ 1 ] = "c_zom_tomb_crusader_head2"; - return a; -} diff --git a/Zombie Maps/Origins/zm_tomb/xmodelalias/c_zom_tomb_german_head_als.gsc b/Zombie Maps/Origins/zm_tomb/xmodelalias/c_zom_tomb_german_head_als.gsc deleted file mode 100644 index 5acce0c..0000000 --- a/Zombie Maps/Origins/zm_tomb/xmodelalias/c_zom_tomb_german_head_als.gsc +++ /dev/null @@ -1,8 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_tomb_german_head1"; - a[ 1 ] = "c_zom_tomb_german_head2"; - a[ 2 ] = "c_zom_tomb_german_head3"; - return a; -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/character/c_ger_richtofen_dlc4.gsc b/Zombie Maps/Origins/zm_tomb_patch/character/c_ger_richtofen_dlc4.gsc deleted file mode 100644 index 2abf094..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/character/c_ger_richtofen_dlc4.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_tomb_richtofen_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_tomb_richtofen_fb" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/character/c_jap_takeo_dlc4.gsc b/Zombie Maps/Origins/zm_tomb_patch/character/c_jap_takeo_dlc4.gsc deleted file mode 100644 index 71c600f..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/character/c_jap_takeo_dlc4.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_tomb_takeo_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_tomb_takeo_fb" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/character/c_rus_nikolai_dlc4.gsc b/Zombie Maps/Origins/zm_tomb_patch/character/c_rus_nikolai_dlc4.gsc deleted file mode 100644 index a5ba18d..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/character/c_rus_nikolai_dlc4.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_tomb_nikolai_fb" ); - self.voice = "russian"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_tomb_nikolai_fb" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/character/c_usa_dempsey_dlc4.gsc b/Zombie Maps/Origins/zm_tomb_patch/character/c_usa_dempsey_dlc4.gsc deleted file mode 100644 index f30ccbe..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/character/c_usa_dempsey_dlc4.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_tomb_dempsey_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_tomb_dempsey_fb" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_alcove_40.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_alcove_40.gsc deleted file mode 100644 index af8ba57..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_alcove_40.gsc +++ /dev/null @@ -1,18 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - self thread alcove_traverse_fx( "rise_billow" ); - dosimpletraverse( "alcove_40" ); -} - -alcove_traverse_fx( str_fx ) -{ - self endon( "death" ); - wait 0,15; - v_facing = anglesToForward( self.angles ); - v_offset = v_facing * 32; - playfx( level._effect[ str_fx ], self.origin + v_offset ); - self playsound( "zmb_spawn_tomb" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_alcove_56.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_alcove_56.gsc deleted file mode 100644 index 2bb9ef1..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_alcove_56.gsc +++ /dev/null @@ -1,18 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - self thread alcove_traverse_fx( "rise_billow" ); - dosimpletraverse( "alcove_56" ); -} - -alcove_traverse_fx( str_fx ) -{ - self endon( "death" ); - wait 0,15; - v_facing = anglesToForward( self.angles ); - v_offset = v_facing * 32; - playfx( level._effect[ str_fx ], self.origin + v_offset ); - self playsound( "zmb_spawn_tomb" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_alcove_96.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_alcove_96.gsc deleted file mode 100644 index 2250044..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_alcove_96.gsc +++ /dev/null @@ -1,18 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - self thread alcove_traverse_fx( "rise_billow" ); - dosimpletraverse( "alcove_96" ); -} - -alcove_traverse_fx( str_fx ) -{ - self endon( "death" ); - wait 0,15; - v_facing = anglesToForward( self.angles ); - v_offset = v_facing * 32; - playfx( level._effect[ str_fx ], self.origin + v_offset ); - self playsound( "zmb_spawn_tomb" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_across_120.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_across_120.gsc deleted file mode 100644 index 0e8b6df..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_across_120.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_across_120" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc deleted file mode 100644 index 8bd9a0e..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_127" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_48.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_48.gsc deleted file mode 100644 index 8269b0e..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_48.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_48" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_72.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_72.gsc deleted file mode 100644 index eb80121..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_72.gsc +++ /dev/null @@ -1,14 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - if ( isDefined( self.isdog ) && self.isdog ) - { - dog_jump_down( 72, 7 ); - } - else - { - dosimpletraverse( "jump_down_72" ); - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc deleted file mode 100644 index e32a251..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc +++ /dev/null @@ -1,14 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - if ( isDefined( self.isdog ) && self.isdog ) - { - dog_jump_down( 96, 7 ); - } - else - { - dosimpletraverse( "jump_down_96" ); - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_church.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_church.gsc deleted file mode 100644 index 85df3a0..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_church.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_church" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_dlc4_112.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_dlc4_112.gsc deleted file mode 100644 index a2b8813..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_dlc4_112.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_dlc4_112" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_dlc4_120.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_dlc4_120.gsc deleted file mode 100644 index 7f9ef33..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_dlc4_120.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_dlc4_120" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_dlc4_96.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_dlc4_96.gsc deleted file mode 100644 index 43a4112..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_down_dlc4_96.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_dlc4_96" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc deleted file mode 100644 index 06cec96..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_127" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_up_48.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_up_48.gsc deleted file mode 100644 index 922b6ed..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_up_48.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_48" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_up_72.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_up_72.gsc deleted file mode 100644 index 607262d..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_up_72.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_72" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_up_96.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_up_96.gsc deleted file mode 100644 index fa18212..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_up_96.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_96" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_up_dlc4_140.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_up_dlc4_140.gsc deleted file mode 100644 index 7e009d1..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_jump_up_dlc4_140.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_dlc4_140" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc deleted file mode 100644 index e97cc4a..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - self dosimpletraverse( "mantle_over_40_hurdle" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_scaffold_100.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_scaffold_100.gsc deleted file mode 100644 index c142e24..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_scaffold_100.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "scaffold_100" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_scaffold_72.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_scaffold_72.gsc deleted file mode 100644 index f50140f..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_scaffold_72.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "scaffold_72" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_scaffold_84.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_scaffold_84.gsc deleted file mode 100644 index c3c3b4d..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_scaffold_84.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "scaffold_84" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_vault_barbedwire_24.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_vault_barbedwire_24.gsc deleted file mode 100644 index d1f64ab..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_vault_barbedwire_24.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "vault_barbedwire_24" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_vault_barbedwire_48.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_vault_barbedwire_48.gsc deleted file mode 100644 index 60c7dd2..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/animscripts/traverse/zm_vault_barbedwire_48.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "vault_barbedwire_48" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/createfx/zm_tomb_fx.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/createfx/zm_tomb_fx.gsc deleted file mode 100644 index 6b9760d..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/createfx/zm_tomb_fx.gsc +++ /dev/null @@ -1,2945 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_sky_dist_aa_tracers" ); - ent.v[ "origin" ] = ( 3985,87, -2266,88, 620,347 ); - ent.v[ "angles" ] = ( 308, 157, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = 0,5; - ent = maps/mp/_utility::createoneshoteffect( "fx_sky_dist_aa_tracers" ); - ent.v[ "origin" ] = ( -3484,26, -2358,33, 390,429 ); - ent.v[ "angles" ] = ( 303, 51, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = 0,6; - ent = maps/mp/_utility::createoneshoteffect( "fx_sky_dist_aa_tracers" ); - ent.v[ "origin" ] = ( -3517,84, 6068,08, -148,928 ); - ent.v[ "angles" ] = ( 309, 304, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = 0,7; - ent = maps/mp/_utility::createoneshoteffect( "fx_sky_dist_aa_tracers" ); - ent.v[ "origin" ] = ( 4636,09, 6184,08, -566,447 ); - ent.v[ "angles" ] = ( 309, 238, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = 0,8; - ent = maps/mp/_utility::createoneshoteffect( "fx_sky_dist_aa_tracers" ); - ent.v[ "origin" ] = ( 5658,25, 2371,44, 67,287 ); - ent.v[ "angles" ] = ( 302, 210, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = 0,9; - ent = maps/mp/_utility::createoneshoteffect( "fx_sky_dist_aa_tracers" ); - ent.v[ "origin" ] = ( -5002,88, -1552,28, 428,395 ); - ent.v[ "angles" ] = ( 304, 16, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = 0,4; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 2843,54, 5293,37, -363,418 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 2513,15, 4672,39, -310,401 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 2195,31, 4228,35, -339,899 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 2106,41, 3592,28, -320,587 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 1795, 3512,73, -306,407 ); - ent.v[ "angles" ] = ( 277, 52, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 1734,71, 4133,62, -351 ); - ent.v[ "angles" ] = ( 270, 0, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 1879,3, 2885,36, -288,043 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 1049,73, 2752,76, -238,953 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 267,334, 3081,48, -177,704 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 542,076, 2284,97, -127,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -41,8083, 2641,51, -258,645 ); - ent.v[ "angles" ] = ( 270, 359,984, 1,01559 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 1553,53, 4354,24, -312 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 1494,96, 3911,27, -312 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 993,339, 3876,16, -317,868 ); - ent.v[ "angles" ] = ( 270, 0, 37 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 659,486, 3478,13, -297 ); - ent.v[ "angles" ] = ( 281, 119, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 90,9842, 3546,92, -296 ); - ent.v[ "angles" ] = ( 270, 2,3736, -30,3736 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -107,699, 3837,61, -347,875 ); - ent.v[ "angles" ] = ( 270, 358,457, -19,4571 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -216,538, 4350,95, -347,875 ); - ent.v[ "angles" ] = ( 270, 1,54295, 19,457 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -845,08, 3449,43, -296 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -1281,75, 3621,73, -293 ); - ent.v[ "angles" ] = ( 270, 0, -17 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -842,809, 2436,9, -255,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -842,608, 2949,29, -111,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -513,288, 2499,41, -111,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -768,808, 2100,21, -106,74 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -711,139, 933,946, 129,849 ); - ent.v[ "angles" ] = ( 270, 0, 24 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 1341,75, 1790,74, -17,5413 ); - ent.v[ "angles" ] = ( 274, 90, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 1209,29, 3329,64, -138,948 ); - ent.v[ "angles" ] = ( 270, 357,397, 125,603 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 396,941, 4628,73, -268,046 ); - ent.v[ "angles" ] = ( 281, 135,998, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -607,777, 4721,78, -276,636 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -1627,84, 2857,51, -25,1478 ); - ent.v[ "angles" ] = ( 284, 90, 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -1298,53, 1958,12, 40,8049 ); - ent.v[ "angles" ] = ( 275, 104, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -934,452, 742,622, 101,931 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 209,42, 784,732, 59,6209 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 794,491, 795,849, 60,9929 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -1357,57, 648,062, 85,4531 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -1904,92, 636,498, 79,4319 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -2540,43, 639,014, 212,896 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -2764,06, -396,495, 172 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -1549,44, -272,618, 100,397 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -719,127, -376,698, 81,4781 ); - ent.v[ "angles" ] = ( 270, 0, 126 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 608,319, -809,919, 79,5367 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 2044,26, -243,885, 124,88 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 1446,3, 535,853, 143,553 ); - ent.v[ "angles" ] = ( 270, 3,57633, 104,424 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 1349,04, 1051,96, 85,1172 ); - ent.v[ "angles" ] = ( 274,242, 44,0377, 45,0407 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 1821,32, 828,037, 125,811 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 2368,44, 829,501, 121,936 ); - ent.v[ "angles" ] = ( 270, 357,614, 98,386 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 2587,41, -298,682, 158,935 ); - ent.v[ "angles" ] = ( 270, 0, 94 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 1804,63, -1329,32, 153,411 ); - ent.v[ "angles" ] = ( 270, 0, 53 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -2437,57, 199,836, 97,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 1512,23, -241,161, 74,6395 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 998,818, -268,386, 81,603 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 1195,17, 160,436, 120,57 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 2355,6, 105,519, 121,476 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 1764,29, 4555,32, -312 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 2650,65, 5290,56, -360,636 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -1131,71, -1371,34, 138,544 ); - ent.v[ "angles" ] = ( 271, 112,998, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_smoke_pillar_xlg" ); - ent.v[ "origin" ] = ( -6497,13, 4398, 151,701 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_smoke_pillar_xlg" ); - ent.v[ "origin" ] = ( -9726,2, 162,926, 578,613 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_smoke_pillar_xlg" ); - ent.v[ "origin" ] = ( 8988,9, -1245,46, 644,195 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 277 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_smoke_pillar_xlg" ); - ent.v[ "origin" ] = ( -8543,64, -7276,44, 1080,45 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 124 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_smoke_pillar_xlg" ); - ent.v[ "origin" ] = ( 7667,85, -9841,25, 1197,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( 2875,71, 5386,04, -257,821 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( 2875,93, 5171,45, -262,48 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( 2561,32, 5148,23, -252,125 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( 1090,19, 4160,7, -217,153 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 84 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( 1026,02, 4211,22, -217,172 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( -367,441, 3824,84, -254,85 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( -343,797, 4302,17, -254,435 ); - ent.v[ "angles" ] = ( 270, 0, 87 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( 19,3975, -2586,96, 248,965 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 102 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 78,0901, -1974,09, 230 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 590,711, -1970,39, 231 ); - ent.v[ "angles" ] = ( 270, 0, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 1153,77, -2082,84, 129,98 ); - ent.v[ "angles" ] = ( 281, 221, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -30,2676, -2805,18, 342,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -191,168, -2411,97, 94,861 ); - ent.v[ "angles" ] = ( 284,96, 288,648, -142,7 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 199,73, -2663,18, 35,5706 ); - ent.v[ "angles" ] = ( 270, 356,424, 114,576 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_skybox_vortex" ); - ent.v[ "origin" ] = ( 26,83, 9,96018, 4049,5 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 2160,18, 2773,14, -230,924 ); - ent.v[ "angles" ] = ( 20, 90, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 2208,49, 2652,52, -258,351 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 1308,4, 4527,73, -280,926 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 333 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 1376,79, 4592,89, -288,057 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 323 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 1397,91, 4588, -219,295 ); - ent.v[ "angles" ] = ( 283,348, 205,493, 46,1594 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 2289,97, 2705,53, -169,962 ); - ent.v[ "angles" ] = ( 20, 90, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 2300,55, 2668,53, -219,029 ); - ent.v[ "angles" ] = ( 15,6786, 62,0124, -26,4169 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 1343,77, 4556,23, -285,912 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 324 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( -55,2918, 3401,85, -278,681 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -45,7065, 3426,32, -275,438 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 0,345567, 3401,86, -275,368 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 275 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -34,9274, 3405,64, -275,731 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 1413,27, 4481,31, -295,167 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 1468,43, 4469,1, -294,749 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 1463,66, 4403,79, -300,51 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 2269,8, 2801,16, -250,057 ); - ent.v[ "angles" ] = ( 294, 90, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 2225,06, 2818,2, -259,935 ); - ent.v[ "angles" ] = ( 294, 90, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 389,473, -2562,03, 335,952 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 454,156, -2758,77, 346,363 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 723,578, -2771,22, 313,931 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_church_fire_vista" ); - ent.v[ "origin" ] = ( 443,498, -2377,31, 613,078 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_church_fire_vista" ); - ent.v[ "origin" ] = ( 698,322, -2484,87, 732,146 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); - ent.v[ "origin" ] = ( 650,999, -2463,41, 685,933 ); - ent.v[ "angles" ] = ( 329, 286, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); - ent.v[ "origin" ] = ( 691,35, -2507,74, 673,446 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 106 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); - ent.v[ "origin" ] = ( 693,113, -2523,15, 720,126 ); - ent.v[ "angles" ] = ( 32, 104, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_church_fire_vista" ); - ent.v[ "origin" ] = ( 1159,1, -2376, 923,934 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 1141,58, 2634,92, -194,103 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 1660,77, 3112,93, -266,737 ); - ent.v[ "angles" ] = ( 329,03, 356,938, 9,35358 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 1679,45, 3656,57, -294,379 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 296 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 2051,16, 3460,72, -169,785 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 142 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 1987,99, 4066,36, -202,976 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 91 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( -1798,14, 3941,63, -190,553 ); - ent.v[ "angles" ] = ( 18,9826, 300,926, -6,41724 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( -1832,25, 3959,03, -245,62 ); - ent.v[ "angles" ] = ( 15,2317, 291,084, -26,6643 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( -1735,25, 4014,26, -262,608 ); - ent.v[ "angles" ] = ( 314, 130, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( -1661,89, 3999,32, -257,515 ); - ent.v[ "angles" ] = ( 20, 320, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -1720,48, 3950,62, -270,983 ); - ent.v[ "angles" ] = ( 294, 320, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( -2507,07, 457,774, 234,358 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( -2282,47, 428,981, 212,731 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 165 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( -2006,2, 218,543, 231,684 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 156 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( -2203,47, 274,642, 201,723 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( -2028,65, 343,274, 156,023 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 139 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( -1914,86, 229,743, 155,351 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 139 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( -2027,79, 831,058, 128,021 ); - ent.v[ "angles" ] = ( 339, 91, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( -2782,65, 717,79, 195,923 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 62 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 892,313, -2423,24, 444,256 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 282 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 677,344, -2445,57, 549,02 ); - ent.v[ "angles" ] = ( 271, 89,9982, -89,9982 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 659,946, 338,159, 190,876 ); - ent.v[ "angles" ] = ( 339, 28, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 959,444, 463,092, 118,669 ); - ent.v[ "angles" ] = ( 328, 182, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 752,085, 255,592, 161,188 ); - ent.v[ "angles" ] = ( 345, 28, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 705,07, 330,688, 171,721 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 300 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 817,163, 185,378, 148,054 ); - ent.v[ "angles" ] = ( 294,543, 32,7905, -30,371 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 989,417, 249,04, 129,222 ); - ent.v[ "angles" ] = ( 270, 359,851, 0,149435 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 827,541, 60,0739, 155 ); - ent.v[ "angles" ] = ( 270, 359,851, 0,149435 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 793,703, 81,6701, 156,077 ); - ent.v[ "angles" ] = ( 345, 28, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 1,0968, 838,705, 175,673 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 136 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( -283,606, 801,684, 179,177 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 153 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( -380,428, 795,687, 168,183 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 136 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( -578,668, -581,305, 172,375 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( -581,151, -617,212, 181,994 ); - ent.v[ "angles" ] = ( 329, 180, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 478,173, -2748,89, 361,913 ); - ent.v[ "angles" ] = ( 270, 359,851, 0,149435 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 268,286, -2544,9, 302,125 ); - ent.v[ "angles" ] = ( 270, 359,851, 0,149435 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 694,386, -2786,22, 320,088 ); - ent.v[ "angles" ] = ( 270, 359,851, 0,149435 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 638,601, -2522,27, 341,795 ); - ent.v[ "angles" ] = ( 288,346, 22,7803, -21,7329 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 472,588, -2779,91, 354,697 ); - ent.v[ "angles" ] = ( 284, 269, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 378,694, -2597,49, 342,625 ); - ent.v[ "angles" ] = ( 286,115, 188,513, 168,918 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( 2703,99, 5214,27, -316,065 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( 2885,49, 5538,88, -305,067 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( 2634,75, 5565,34, -294,132 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( 2782,81, 5557,19, -304,19 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( 2547,86, 5550,3, -297,722 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( 2236,17, 5118,87, -244,6 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( 2084,75, 5132,85, -243,383 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( 2688,17, 5392,29, -311,22 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( 2520,88, 4961,95, -307,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( 2510,4, 4600,03, -245,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( 2279,26, 4754,1, -246,004 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( 2075,91, 4788,76, -246,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( 2809,88, 5357,93, -259,22 ); - ent.v[ "angles" ] = ( 21, 189, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 2673,81, 5036,29, -340,404 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 106 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 2949,31, 5486,56, -332,275 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 260 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 2973,05, 5084,47, -369,322 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 2799,71, 5279,23, -287,968 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 218 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 2600,74, 4771,45, -246,324 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 2730,44, 4663,85, -226,716 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 2273,2, 4541,53, -254,446 ); - ent.v[ "angles" ] = ( 1, 90, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 1898,08, 4731,97, -225,834 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 1893,93, 5011,8, -213,504 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 2482,88, 4398,17, -225,285 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 2572,84, 5009,08, -285,413 ); - ent.v[ "angles" ] = ( 358, 180, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( 2082,53, 4540,48, -260,773 ); - ent.v[ "angles" ] = ( 4,98628, 60,9853, -0,419415 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 2310,53, 5103,81, -232,435 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( 2498,93, 4610,06, -183,748 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( 2088,24, 4638,71, -186,244 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( 2091,71, 4943,25, -185,956 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( -225,877, 4507,16, -282,272 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( -44,1163, 4515,35, -283,457 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( -331,545, 4517, -287,192 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( -458,555, 4522,05, -282,519 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( -488,026, 3753,75, -278,824 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( -297,115, 3751,99, -273,808 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( -236,313, 3937,23, -249,751 ); - ent.v[ "angles" ] = ( 20, 96, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( -420,134, 4254,74, -252,309 ); - ent.v[ "angles" ] = ( 14,7821, 279,345, 2,49013 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( -248,143, 4066,55, -239,033 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( 30,1202, 3823,51, -250,795 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( -115,75, 4411,9, -259,453 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_sparks" ); - ent.v[ "origin" ] = ( -267,517, 4407,53, -242,127 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( 1648,8, 4438,5, -201,243 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 45 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 1884,67, 3880,74, -263,908 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( -23,9182, 3801,96, -310,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( -359,256, 3947,16, -311,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 95 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( -209,556, 4363,93, -295,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 347 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( -739,46, 2984,29, -202,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 7 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( -906,312, 2671,99, -210,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 267 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( -500,135, 2579,71, -203,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 86 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( -487,117, 2688,07, -50,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 86 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( -668,324, 2922,5, -55,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 7 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( -911,921, 2668,62, -55,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 86 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( -824,429, 2413,35, -53,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 38 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( -744,125, 3138,41, -62,2236 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( -892,647, 3143,82, -60,446 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( -464,178, 3027,59, -64,9351 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( -607,875, 3022,34, -62,8019 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( -373,261, 2688,13, -65,7059 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( -366,715, 2898,08, -63,6646 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -867,931, 2571,14, -244,699 ); - ent.v[ "angles" ] = ( 345,951, 98,3236, 5,1274 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -908,891, 3102,88, -59,4165 ); - ent.v[ "angles" ] = ( 14,965, 315,952, -1,3608 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_lg" ); - ent.v[ "origin" ] = ( -752,271, 2667, -3,7368 ); - ent.v[ "angles" ] = ( 90, 348,57, -11,4301 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( -864,203, 3042,82, -148,299 ); - ent.v[ "angles" ] = ( 17, 29, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( -933,163, 2335,36, -182,641 ); - ent.v[ "angles" ] = ( 359, 5, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( -701,552, 2358,15, -249,06 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 174 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( -254,399, 2659,47, -163,352 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 189 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( -953,347, 2535,07, -76,8882 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 5 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( -855,73, 2267,31, -23,1974 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 141 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( -728,289, 2912,31, -146,921 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( -883,269, 2471,4, -146,34 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( -515,883, 2474,13, -145,385 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( -455,035, 2655,2, -145,546 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( -889,403, 2654,85, -3,52275 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( -723,984, 2937,93, -2,73427 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( -868,283, 2487,89, -1,82285 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( -890,798, 2893,5, -10,0809 ); - ent.v[ "angles" ] = ( 23,9186, 90,5422, -1,86874 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 870,208, -2594,04, 44,6886 ); - ent.v[ "angles" ] = ( 270, 0, -143 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 676,735, -3108,88, 251 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 1119,58, -3121,99, 254 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 1019,99, -3579,06, 304,999 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( 936,016, -2283,55, 266,033 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 66 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( 1076,87, -2570,95, 125,575 ); - ent.v[ "angles" ] = ( 354,002, 237,989, 0,175246 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( 777,844, -2400,58, 57,6874 ); - ent.v[ "angles" ] = ( 350, 164, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( 290,811, -2980,77, 79,794 ); - ent.v[ "angles" ] = ( 348,185, 162,781, 0,113837 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_chamber_glow_yellow" ); - ent.v[ "origin" ] = ( 11257,1, -8661,46, -409,236 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 152 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_chamber_glow_red" ); - ent.v[ "origin" ] = ( 9457,3, -8557,93, -399,199 ); - ent.v[ "angles" ] = ( 271, 260,001, 89,9988 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_chamber_glow_purple" ); - ent.v[ "origin" ] = ( 9628,91, -7008,51, -347,199 ); - ent.v[ "angles" ] = ( 270, 32,3849, -132,385 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_chamber_glow_blue" ); - ent.v[ "origin" ] = ( 11232,6, -7046,67, -347,204 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 242 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_chamber_glow" ); - ent.v[ "origin" ] = ( 10342,7, -7907, -465,205 ); - ent.v[ "angles" ] = ( 270, 11,536, -11,5361 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); - ent.v[ "origin" ] = ( 10045,3, -7655,25, -370 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 83 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); - ent.v[ "origin" ] = ( 9939,63, -8328,28, -382,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 84 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); - ent.v[ "origin" ] = ( 10710,7, -8497,33, -371,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 127 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); - ent.v[ "origin" ] = ( 10657,3, -7581,2, -391 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 273 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( 2618,88, 5226,64, -366,908 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 303 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( 148,477, -229,972, 332,336 ); - ent.v[ "angles" ] = ( 343, 217, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( 81,0742, -290,633, 332,269 ); - ent.v[ "angles" ] = ( 345, 41, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -85,5674, 258,429, 332,456 ); - ent.v[ "angles" ] = ( 341, 234, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( 293,829, -116,064, 393,685 ); - ent.v[ "angles" ] = ( 344, 118,728, -0,20071 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 235,295, 207,457, 480,164 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -336,632, -21,5365, 52,0506 ); - ent.v[ "angles" ] = ( 337, 55, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -42,0723, 83,5241, -196,473 ); - ent.v[ "angles" ] = ( 346,056, 95,9726, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 158,776, 225,973, 186,913 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 208,091, -207,317, 146,846 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( -300,493, 95,2871, -318,576 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 360,626, 208,227, -340,934 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( -24,682, -323,078, -241,03 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( -266,653, -388,68, -381,606 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 303,529, -349,916, -466,108 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( -59,9885, -460,848, -488,396 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( -251,721, -47,1445, -744,559 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 141,999, -113,932, -584,605 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( -206,125, 177,255, -486,853 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 176,873, 174,28, -480,175 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( -214,958, -292,397, 47,2714 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -164,141, 144,725, 40 ); - ent.v[ "angles" ] = ( 270, 359,851, 0,149435 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 0, 425,465, -256 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -23,5406, 121,805, -752 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 3,18417, -87,4657, -752 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( -155,871, 159,395, 103,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( 191,129, 323,609, -170,269 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( -72,5692, -358,98, -543 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 349 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( 1,01975, -83,7614, -691 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 95 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( 1602,48, 4274,19, -200,575 ); - ent.v[ "angles" ] = ( 16,1712, 210,896, 1,9318 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( 1582,16, 3870,77, -216,131 ); - ent.v[ "angles" ] = ( 27, 143, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( 952,958, 3723,55, -245,65 ); - ent.v[ "angles" ] = ( 14,1001, 107,45, 10,2631 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( 1207,01, 3990,99, -222,561 ); - ent.v[ "angles" ] = ( 43, 275, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( 622,099, 3607,75, -201,135 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 30 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( 123,534, 3379,65, -184,955 ); - ent.v[ "angles" ] = ( 35,9597, 55,8346, -18,8444 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( 284,705, 3470,19, -187,941 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( -617,429, 3524,84, -194,706 ); - ent.v[ "angles" ] = ( 47,8791, 261,182, -3,02978 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( -1407,97, 3583,77, -184,816 ); - ent.v[ "angles" ] = ( 25,8576, 71,2699, 7,33332 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( 2157, 4367,14, -264,372 ); - ent.v[ "angles" ] = ( 16, 294, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( 2215,63, 4015,23, -229,596 ); - ent.v[ "angles" ] = ( 35,5426, 152,453, -11,0361 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( 2020,71, 3510,25, -194,629 ); - ent.v[ "angles" ] = ( 32,1279, 46,8079, -8,2971 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( 2012,03, 3589,01, -200,556 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( 1646,83, 3450,24, -185,618 ); - ent.v[ "angles" ] = ( 32,055, 358,851, -1,37262 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( 1875,15, 3683,47, -184,219 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 957,693, -2407,48, 302,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 281 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 974,777, -2400,66, 323,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 281 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( 2040,78, 2819,25, -165,725 ); - ent.v[ "angles" ] = ( 26,2483, 97,8143, -11,184 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( 1157,1, 2714,94, -136,112 ); - ent.v[ "angles" ] = ( 14,6648, 134,59, -3,18866 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( 594,332, 2080,93, -30,374 ); - ent.v[ "angles" ] = ( 26,7182, 10,0306, 3,59838 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( 362,67, 2082,48, -27,9839 ); - ent.v[ "angles" ] = ( 23,8053, 74,1944, -5,97859 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( -459,457, 2873,44, -144,026 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( -852,351, 2309,82, -148,638 ); - ent.v[ "angles" ] = ( 57,411, 79,5042, 76,3496 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( -834,641, 2736,93, -151,951 ); - ent.v[ "angles" ] = ( 39,2228, 150,082, -19,2557 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( -406,088, 2606,67, -148,478 ); - ent.v[ "angles" ] = ( 39,3881, 160,466, -16,4229 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( -718,652, 2598,86, -114,082 ); - ent.v[ "angles" ] = ( 26, 66, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( -804,725, 2692,08, -128,814 ); - ent.v[ "angles" ] = ( 326,162, 41,3746, -22,5945 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( -503,313, 2939,71, -3,82324 ); - ent.v[ "angles" ] = ( 63,8394, 276,125, -83,1825 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( -816,107, 2485,12, -4,38391 ); - ent.v[ "angles" ] = ( 33,054, 149,72, 162,335 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( -699,652, 3027,46, -60,3237 ); - ent.v[ "angles" ] = ( 334,005, 204,497, -10,7883 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( 2695,68, 5417,73, -246,715 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 264 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( 2560, 5354,25, -248,917 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips" ); - ent.v[ "origin" ] = ( 2183,59, 4713, -177,781 ); - ent.v[ "angles" ] = ( 0,347275, 95,9946, -1,96994 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_church_custom" ); - ent.v[ "origin" ] = ( 681,349, -2595,57, 608,737 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 195 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); - ent.v[ "origin" ] = ( 2795,17, 4183,73, -405,009 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 64 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); - ent.v[ "origin" ] = ( 2880,22, 4359,05, -442,161 ); - ent.v[ "angles" ] = ( 360, 64, 17 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); - ent.v[ "origin" ] = ( 3044,18, 4419,97, -441,19 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); - ent.v[ "origin" ] = ( 2515,69, 4130,01, -285,311 ); - ent.v[ "angles" ] = ( 19,6657, 62,0059, 28,3106 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 701,636, -2344,06, 303,81 ); - ent.v[ "angles" ] = ( 350, 194, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 756,836, -2369,53, 287,125 ); - ent.v[ "angles" ] = ( 350, 194, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 489,365, -2714,28, 363,36 ); - ent.v[ "angles" ] = ( 273,512, 214,2, 143,332 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 498,27, -2607,26, 370,013 ); - ent.v[ "angles" ] = ( 277,132, 194,595, 162,864 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 505,993, -2623,91, 370,894 ); - ent.v[ "angles" ] = ( 278,408, 199,119, 158,372 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 480,375, -2642,37, 369,803 ); - ent.v[ "angles" ] = ( 278,408, 199,119, 158,372 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 547,523, -2721,24, 354,662 ); - ent.v[ "angles" ] = ( 273,306, 288,565, 69,1685 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 387,845, -2696,87, 342,987 ); - ent.v[ "angles" ] = ( 281,25, 193,445, 163,965 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 1052,39, -2617,35, 444,731 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 281 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 317,388, -2411,52, 62,3941 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 250,292, -2461,82, 59,9847 ); - ent.v[ "angles" ] = ( 359,983, 183, -1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 445,707, -2803,21, 159,462 ); - ent.v[ "angles" ] = ( 359,212, 132, -0,61612 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 914,732, -2315,37, 301,764 ); - ent.v[ "angles" ] = ( 315, 159, -12 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 879,013, -2300,16, 333,393 ); - ent.v[ "angles" ] = ( 354, 160,005, -0,105097 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); - ent.v[ "origin" ] = ( 885,397, -2585,22, 674,972 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 103 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 2705,66, 4463,83, -270,923 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); - ent.v[ "origin" ] = ( 2719,29, 802,905, 33,7266 ); - ent.v[ "angles" ] = ( 13,6698, 72,8641, 31,4379 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); - ent.v[ "origin" ] = ( 3040,21, 837,337, -79,9756 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); - ent.v[ "origin" ] = ( 3349,84, 1181,77, -177,67 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 2389,08, 808,252, -19,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 3344,57, 1214,05, -348 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( 2882,28, 4378,22, -510,695 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 30 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( 2996,82, 828,878, -162,675 ); - ent.v[ "angles" ] = ( 6, 358, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( 3360,2, 1095,44, -281,759 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( 2609,27, 4136,97, -394,49 ); - ent.v[ "angles" ] = ( 29, 19, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( -3068,94, -294,956, -105,446 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 219 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -3177,68, -366,599, -178,459 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); - ent.v[ "origin" ] = ( -3174,32, -338,977, -34,3424 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 187 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( -3199,05, 69,1339, -23,0807 ); - ent.v[ "angles" ] = ( 9, 284, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( -2442,69, 86,6662, 146,125 ); - ent.v[ "angles" ] = ( 17, 183, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); - ent.v[ "origin" ] = ( -3102,39, -165,34, -9,34888 ); - ent.v[ "angles" ] = ( 0, 194, -8 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); - ent.v[ "origin" ] = ( -3113,18, 77,107, 62,4578 ); - ent.v[ "angles" ] = ( 7,68019, 228,622, 9,24817 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); - ent.v[ "origin" ] = ( -2733,38, 121,802, 187,903 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 1409,82, -1769,21, -118,84 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( 1400,44, -1968,41, -31 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); - ent.v[ "origin" ] = ( 1426,17, -1785,95, 24,9835 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 85 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); - ent.v[ "origin" ] = ( 1427,72, -2088,64, 86,6268 ); - ent.v[ "angles" ] = ( 0, 30, -10 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); - ent.v[ "origin" ] = ( 1431,06, -2395,14, 140,669 ); - ent.v[ "angles" ] = ( 2,27364, 41,7857, -10,7653 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_water_drips_sm" ); - ent.v[ "origin" ] = ( 1336,67, -2647,78, 231,553 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 77 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( 1447,22, -2473,26, 76,026 ); - ent.v[ "angles" ] = ( 16, 88, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 1480,21, -2233,9, -51,5 ); - ent.v[ "angles" ] = ( 270,934, 269,834, 89,8081 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 1228,07, -2613,91, 120,632 ); - ent.v[ "angles" ] = ( 0,484785, 335,002, 0,875333 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 1479,28, -2617,36, 102,338 ); - ent.v[ "angles" ] = ( 0,211954, 131,989, -0,616066 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 1539,2, -2232,74, -37,2481 ); - ent.v[ "angles" ] = ( 359,281, 138, -0,695113 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 1574,45, -1678,21, -70,6174 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 197 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 1248,96, -1762,17, -73,5857 ); - ent.v[ "angles" ] = ( 357,947, 6,96405, 1 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); - ent.v[ "origin" ] = ( 10314,1, -7150,76, -392 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 273 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); - ent.v[ "origin" ] = ( 10494,8, -8444,68, -373,006 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 189 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); - ent.v[ "origin" ] = ( 10925,2, -7680,32, -371,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 66 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); - ent.v[ "origin" ] = ( 10864,3, -7851,97, -386,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 231 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createexploder( "fx_tomb_probe_elec_on" ); - ent.v[ "origin" ] = ( 0,661174, 231,756, 480,401 ); - ent.v[ "angles" ] = ( 6, 269, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5003; - ent = maps/mp/_utility::createexploder( "fx_tomb_probe_elec_on" ); - ent.v[ "origin" ] = ( 211,622, 153,136, 379,376 ); - ent.v[ "angles" ] = ( 15,9883, 223,818, -2,05218 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5001; - ent = maps/mp/_utility::createexploder( "fx_tomb_probe_elec_on" ); - ent.v[ "origin" ] = ( 239,078, -0,145034, 480,568 ); - ent.v[ "angles" ] = ( 7, 180, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5004; - ent = maps/mp/_utility::createexploder( "fx_tomb_probe_elec_on" ); - ent.v[ "origin" ] = ( 0,328866, -226,613, 480,627 ); - ent.v[ "angles" ] = ( 5, 89,9963, -0,104926 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5006; - ent = maps/mp/_utility::createexploder( "fx_tomb_probe_elec_on" ); - ent.v[ "origin" ] = ( -231,022, 2,10779, 480,198 ); - ent.v[ "angles" ] = ( 6,39872, 358,994, -0,122636 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5005; - ent = maps/mp/_utility::createexploder( "fx_tomb_probe_elec_on" ); - ent.v[ "origin" ] = ( -176,719, 181,685, 379,28 ); - ent.v[ "angles" ] = ( 18,4675, 313,665, -1,77444 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 5002; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); - ent.v[ "origin" ] = ( 10454,6, -7281,5, 173,545 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); - ent.v[ "origin" ] = ( 10485,7, -7317,26, -380 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 354 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); - ent.v[ "origin" ] = ( 9617,92, -8129,65, -387,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 84 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); - ent.v[ "origin" ] = ( 10972,6, -7722,63, -390,5 ); - ent.v[ "angles" ] = ( 360, 291, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); - ent.v[ "origin" ] = ( 10746,6, -7466,48, 147,506 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); - ent.v[ "origin" ] = ( 10683,1, -8114, 144,593 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 255 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); - ent.v[ "origin" ] = ( 10323,3, -8613,96, 338,993 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); - ent.v[ "origin" ] = ( 9795,59, -8158,02, 144,314 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 136 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); - ent.v[ "origin" ] = ( 9609,18, -7574,33, 349,643 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 10 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); - ent.v[ "origin" ] = ( 10219,4, -7332,73, 258,772 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); - ent.v[ "origin" ] = ( 10007, -7701,44, 96,1417 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 112 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); - ent.v[ "origin" ] = ( 10436,4, -7609,52, 86,5436 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 327 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); - ent.v[ "origin" ] = ( 10596,6, -8459,21, 254,372 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 157 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); - ent.v[ "origin" ] = ( 10252,5, -8171,73, 78,6495 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); - ent.v[ "origin" ] = ( 11031,7, -8139,35, -11,6038 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 96 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); - ent.v[ "origin" ] = ( 11132,6, -7470,59, 192,216 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 215 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); - ent.v[ "origin" ] = ( 9585,82, -7911,54, 149,268 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 282 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall_lg" ); - ent.v[ "origin" ] = ( 9971,95, -7216,54, -3,51153 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 327 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 2033,26, 2295,77, -74,7656 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 16 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 2475,21, 5226,47, -340,284 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 304 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( 959,389, 4120,41, -264,619 ); - ent.v[ "angles" ] = ( 7,93895, 75,0805, 0,80711 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -148,475, 3764,52, -333,659 ); - ent.v[ "angles" ] = ( 5,83727, 50,927, -1,283 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -450,963, 4021,8, -309,163 ); - ent.v[ "angles" ] = ( 353,11, 258,086, -1,06419 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -457,248, 4475,68, -333,242 ); - ent.v[ "angles" ] = ( 354,576, 217,872, 2,34151 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -217,985, 4255,18, -333,163 ); - ent.v[ "angles" ] = ( 354,575, 22,4658, -3,32847 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( -475,534, 2980,81, -215,173 ); - ent.v[ "angles" ] = ( 1, 199, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( -492,738, 2419,32, -47,6733 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 7 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 1621,74, 2966,11, -199,898 ); - ent.v[ "angles" ] = ( 359, 269, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 1565,87, 2931,96, -213,247 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 274 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 1747,56, 3125,74, -280,035 ); - ent.v[ "angles" ] = ( 285,001, 90,6045, -91,571 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( -38,0725, -342,728, -558 ); - ent.v[ "angles" ] = ( 15, 83, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( 2948,94, 5359,98, -233,125 ); - ent.v[ "angles" ] = ( 90, 0, -138 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( 1133,51, 4272,66, -196,973 ); - ent.v[ "angles" ] = ( 90, 180, -49 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( 1028,23, 4220,94, -210,669 ); - ent.v[ "angles" ] = ( 90, 0, 34 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( 1140,35, 4188,18, -206,86 ); - ent.v[ "angles" ] = ( 90, 0, 34 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_godray_mist_md" ); - ent.v[ "origin" ] = ( 1072,54, 4165,21, -216,38 ); - ent.v[ "angles" ] = ( 90, 0, -57 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 906,456, 119,554, 249,939 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( -257,863, 137,638, 291,484 ); - ent.v[ "angles" ] = ( 342,959, 323,713, 9,31921 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( -293,576, -102,746, 285,825 ); - ent.v[ "angles" ] = ( 344,971, 14,8678, -7,11365 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( 116,541, 290,542, 285,574 ); - ent.v[ "angles" ] = ( 341, 224, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( 296,156, 108,418, 282,497 ); - ent.v[ "angles" ] = ( 342,43, 200,863, 0,349833 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( 129,157, -279,986, 285,259 ); - ent.v[ "angles" ] = ( 343,132, 114,334, -5,37842 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( 280,798, -357,617, -39,0851 ); - ent.v[ "angles" ] = ( 0, 224, -10 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( -82,3579, -387,457, -279,283 ); - ent.v[ "angles" ] = ( 8,56001, 345,389, 5,18908 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( 313,501, -273,195, -381,992 ); - ent.v[ "angles" ] = ( 356,924, 206,256, -9,51976 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( 28,399, -421,37, -510,974 ); - ent.v[ "angles" ] = ( 352,704, 177,438, -3,85717 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( -170,228, -14,9198, -527,653 ); - ent.v[ "angles" ] = ( 355,196, 94,9094, 6,71258 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( 176,501, -59,5695, -630,95 ); - ent.v[ "angles" ] = ( 355,196, 94,9094, 3,71258 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( 166,315, 147,49, -508,358 ); - ent.v[ "angles" ] = ( 355,818, 179,226, -4,40185 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( -172,36, 147,426, -516,285 ); - ent.v[ "angles" ] = ( 3,86511, 3,22329, 4,68246 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( -44,3194, 157,479, -511,06 ); - ent.v[ "angles" ] = ( 4,18201, 359,226, 4,40187 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( -374,971, -192,826, -330,311 ); - ent.v[ "angles" ] = ( 17,039, 306,915, -0,619566 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( -418,439, 95,0414, -246,474 ); - ent.v[ "angles" ] = ( 7,53049, 260,701, 0,349842 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( -429,244, 202,176, -47,6421 ); - ent.v[ "angles" ] = ( 347, 357, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( 55,9099, 395,92, -22,1698 ); - ent.v[ "angles" ] = ( 359,958, 175,717, 14,0284 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( 441,239, 51,6459, -33,0588 ); - ent.v[ "angles" ] = ( 341,449, 171,586, 7,59726 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( 385,354, -85,733, -265,99 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 76 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( 168,035, -362,538, -261,271 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 201 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( 103,482, -152,476, -229,36 ); - ent.v[ "angles" ] = ( 3, 55, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( 165,365, -9,84316, -226,36 ); - ent.v[ "angles" ] = ( 2,08381, 101,039, 2,15929 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( -73,3678, -141,08, -229,36 ); - ent.v[ "angles" ] = ( 0,62358, 336,984, -2,93498 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( -170,797, 43,6615, -226,36 ); - ent.v[ "angles" ] = ( 357,428, 266,035, -1,54641 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( 412,138, 148,755, -275,002 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 104 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( -337,351, -238,606, -26,4608 ); - ent.v[ "angles" ] = ( 353, 76, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( 201,552, -25,9036, 200,948 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 93 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( -416,633, -61,2323, -207,855 ); - ent.v[ "angles" ] = ( 15, 310, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( 250,325, -110,651, -329,761 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( 384,129, -64,2074, -454,204 ); - ent.v[ "angles" ] = ( 21, 251, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( -411,481, 36,0763, -387,427 ); - ent.v[ "angles" ] = ( 21,0357, 283,252, 6,44551 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( -94,8236, 141,464, -470,899 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( -159,296, -86,2895, -480,26 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( 157,621, -234,53, 187,209 ); - ent.v[ "angles" ] = ( 16, 176, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( 275,338, 160,242, 192,587 ); - ent.v[ "angles" ] = ( 15, 160, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_md" ); - ent.v[ "origin" ] = ( 303,366, 117,409, 196,842 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 268 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createexploder( "fx_tomb_chamber_walls_impact" ); - ent.v[ "origin" ] = ( -83,6255, -83,0232, 40,125 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 222; - ent = maps/mp/_utility::createexploder( "fx_tomb_chamber_walls_impact" ); - ent.v[ "origin" ] = ( 128,404, -69,5363, 40,125 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 222; - ent = maps/mp/_utility::createexploder( "fx_tomb_chamber_walls_impact" ); - ent.v[ "origin" ] = ( 92,8486, 116,891, 40,125 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 222; - ent = maps/mp/_utility::createexploder( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( 179,975, -131,823, 6,02911 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 61 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 222; - ent = maps/mp/_utility::createexploder( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( 220,96, -33,1347, 4,43854 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 89 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 222; - ent = maps/mp/_utility::createexploder( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( 207,889, 83,1946, 2,74467 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 129 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 222; - ent = maps/mp/_utility::createexploder( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( 95,8509, 201,332, 1,74655 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 168 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 222; - ent = maps/mp/_utility::createexploder( "fx_tomb_dust_fall" ); - ent.v[ "origin" ] = ( -55,8782, 215,914, 1,10722 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 226 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 222; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); - ent.v[ "origin" ] = ( 1792,05, 1068,25, 199,75 ); - ent.v[ "angles" ] = ( 288,027, 93,074, -93,2325 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); - ent.v[ "origin" ] = ( 1758,98, 1067,25, 188,072 ); - ent.v[ "angles" ] = ( 288,027, 93,074, -93,2325 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 2716,82, 671,266, 182,486 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 99 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 1954,99, 928,275, 124,325 ); - ent.v[ "angles" ] = ( 270, 359,851, 0,149435 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 2737,12, 770,118, 199,224 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 99 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 2047,36, 1110,18, 183,487 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 1806,28, 1011,32, 178,827 ); - ent.v[ "angles" ] = ( 307, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 1828,6, 927,214, 125,786 ); - ent.v[ "angles" ] = ( 270, 359,851, 0,149435 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 2683,07, 717,006, 186,013 ); - ent.v[ "angles" ] = ( 295,128, 172,773, -174,24 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 2969,28, 585,145, 446,513 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 82 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 2981,97, 461,458, 210,013 ); - ent.v[ "angles" ] = ( 0, 186, 2 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 2703,85, 477,618, 165,687 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 2683,27, 424,04, 153,219 ); - ent.v[ "angles" ] = ( 270, 359,851, 0,149435 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 2351,76, 914,346, 122,328 ); - ent.v[ "angles" ] = ( 270, 359,851, 0,149435 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( 2354,54, 861,476, 121,712 ); - ent.v[ "angles" ] = ( 270, 359,851, 0,149435 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm" ); - ent.v[ "origin" ] = ( 2676,3, 907,538, 207,752 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 99 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); - ent.v[ "origin" ] = ( 2658,73, 984,453, 205,764 ); - ent.v[ "angles" ] = ( 286,022, 349,64, -1,88535 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); - ent.v[ "origin" ] = ( 2972,64, 616,95, 452,771 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 86 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); - ent.v[ "origin" ] = ( 3018,72, 592,45, 415,265 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 82 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); - ent.v[ "origin" ] = ( 3070,29, 574,625, 384,331 ); - ent.v[ "angles" ] = ( 4, 82, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); - ent.v[ "origin" ] = ( -2784,14, 23,7212, 437,68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -2529,32, 487,749, 228,712 ); - ent.v[ "angles" ] = ( 286, 90, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -2561,07, 465,52, 239,28 ); - ent.v[ "angles" ] = ( 286, 90, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -2817,6, 374,432, 235,732 ); - ent.v[ "angles" ] = ( 290,318, 290,544, 69,6291 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -2827,96, -27,9267, 241,05 ); - ent.v[ "angles" ] = ( 286, 90, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -2837,76, 4,07393, 237,865 ); - ent.v[ "angles" ] = ( 286, 90, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); - ent.v[ "origin" ] = ( -2740,58, -79,9137, 362,455 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); - ent.v[ "origin" ] = ( -2905,31, -220,352, 205,987 ); - ent.v[ "angles" ] = ( 312,347, 152,927, -6,62182 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); - ent.v[ "origin" ] = ( -2409,46, 421,066, 367,153 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -2402,83, 335,627, 234,166 ); - ent.v[ "angles" ] = ( 270, 0,149457, -0,149446 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -2385,87, 282,789, 234,164 ); - ent.v[ "angles" ] = ( 270, 0,149457, -0,149446 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -2380,3, -28,0319, 237,588 ); - ent.v[ "angles" ] = ( 278, 89,9989, -89,9988 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_sm_smolder" ); - ent.v[ "origin" ] = ( -2380,05, 7,49297, 234,29 ); - ent.v[ "angles" ] = ( 278, 89,9989, -89,9988 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); - ent.v[ "origin" ] = ( -2840,54, 382,458, 229,167 ); - ent.v[ "angles" ] = ( 344, 142, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); - ent.v[ "origin" ] = ( -2759,26, 410,759, 378,307 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( -127,464, -4641,96, 559,502 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( -249,624, -4644,14, 562,46 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( -514,078, -4126,47, 494,044 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 300,204, -4024,28, 377,834 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( -174,343, -4624,4, 559,465 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 805,26, -5094,32, 465,76 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 846,434, -5082,77, 557,171 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 330,265, -5662,64, 569,648 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 1267,92, -4487,96, 541,213 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 1473,05, -4488,89, 531,005 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 1594,58, -3831,53, 395,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 279 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 2439,75, -4891,33, 688,666 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 213 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 2644,44, -4859,16, 713,522 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 213 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 1991,36, -3376,02, 519,384 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 279 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 384,953, -3378,87, 349,757 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 153 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( -1999,6, -3580,82, 555,986 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_robot_ambient" ); - ent.v[ "origin" ] = ( -5704,13, -6535,94, 153,436 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_robot_ambient" ); - ent.v[ "origin" ] = ( -6224,03, -6535,92, 153,434 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_robot_ambient" ); - ent.v[ "origin" ] = ( -6760,11, -6536,09, 153,429 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_sparks" ); - ent.v[ "origin" ] = ( -5520,45, -6640,33, 273,628 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_sparks" ); - ent.v[ "origin" ] = ( -6419,11, -6577,88, 346,793 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( 2269,48, 1126,3, 167,505 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( 2133,06, 5069,61, -293,064 ); - ent.v[ "angles" ] = ( 351,084, 0,802813, -4,61889 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( 1919,41, 4905,8, -278,831 ); - ent.v[ "angles" ] = ( 353,054, 82,6612, 0,145041 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( 1955,21, 3903,11, -339,93 ); - ent.v[ "angles" ] = ( 350,38, 129,37, 2,4631 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( 3098,24, -237,82, 157,277 ); - ent.v[ "angles" ] = ( 270, 356,309, 90,6913 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -2249,13, -394,012, 174,999 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_ground_fog" ); - ent.v[ "origin" ] = ( -1135,72, -395,117, 80 ); - ent.v[ "angles" ] = ( 270, 357,614, 99,386 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_smoke_pillar_xlg" ); - ent.v[ "origin" ] = ( 117,876, -6647,86, 670,966 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 124 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_smoke_pillar_xlg" ); - ent.v[ "origin" ] = ( 1859,17, 12435,9, -358,777 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 124 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); - ent.v[ "origin" ] = ( 10311,3, -7517,3, -382 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 274 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); - ent.v[ "origin" ] = ( 9948,29, -7878,86, -403 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 355 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_dust_motes_lg" ); - ent.v[ "origin" ] = ( 10358,5, -8299,95, -383 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 83 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_crafting_chamber_glow" ); - ent.v[ "origin" ] = ( 0,496392, -0,110062, -227,408 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createexploder( "fx_tomb_vortex_glow" ); - ent.v[ "origin" ] = ( -2,90164, 1,17459, 334,67 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 333; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -5844,45, -6591,27, 388,802 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( -5497,38, -6537,85, 178,5 ); - ent.v[ "angles" ] = ( 345, 212, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -5759,94, -6675,6, 390,349 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -5844,61, -6479,78, 390,422 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -5759,06, -6396,1, 387,73 ); - ent.v[ "angles" ] = ( 78, 298, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -5648,2, -6395,92, 389,661 ); - ent.v[ "angles" ] = ( 80, 262, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -5563,55, -6479,73, 390,421 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -5647,62, -6676,44, 389,768 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -5563,52, -6591,28, 389,724 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_sparks" ); - ent.v[ "origin" ] = ( -5771,88, -6712,72, 264,609 ); - ent.v[ "angles" ] = ( 21, 37, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( -5870,37, -6396,77, 255,442 ); - ent.v[ "angles" ] = ( 9,74116, 318,194, 2,27144 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6083,79, -6590,49, 389,826 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6167,89, -6675,65, 389,871 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6280,22, -6674,81, 390,451 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6364,72, -6590,48, 388,905 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6364,88, -6478,99, 390,524 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6279,33, -6395,31, 387,832 ); - ent.v[ "angles" ] = ( 78, 298, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6168,48, -6395,13, 389,763 ); - ent.v[ "angles" ] = ( 80, 262, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6083,82, -6478,94, 390,523 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6619,8, -6591,35, 389,713 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6703,9, -6676,51, 389,758 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6816,23, -6675,67, 390,339 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6900,73, -6591,34, 388,792 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6900,89, -6479,85, 390,411 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6815,34, -6396,17, 387,719 ); - ent.v[ "angles" ] = ( 78, 298, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6704,49, -6395,99, 389,65 ); - ent.v[ "angles" ] = ( 80, 262, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6619,83, -6479,79, 390,411 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6863,17, -6671,96, 272,833 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6794,64, -6700,83, 272,911 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6724,74, -6701,16, 272,687 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6655,81, -6673,05, 272,781 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6188,89, -6700,92, 272,197 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6258,8, -6700,59, 272,421 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6327,33, -6671,71, 272,343 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -6119,97, -6672,8, 272,291 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -5669,38, -6700,92, 272,39 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -5739,29, -6700,6, 272,615 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -5807,82, -6671,72, 272,536 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -5600,46, -6672,81, 272,484 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( -6362,55, -6411,19, 189,427 ); - ent.v[ "angles" ] = ( 311, 310, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( -6058,33, -6602,14, 283,19 ); - ent.v[ "angles" ] = ( 40, 155, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_sparks" ); - ent.v[ "origin" ] = ( -6032,19, -6484,8, 271,361 ); - ent.v[ "angles" ] = ( 28, 195, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_sparks" ); - ent.v[ "origin" ] = ( -6706,01, -6675,33, 387,642 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_steam_lg" ); - ent.v[ "origin" ] = ( -6650,1, -6551,61, 116,796 ); - ent.v[ "angles" ] = ( 293,234, 29,4734, -25,0788 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_church_fire_vista" ); - ent.v[ "origin" ] = ( 248,72, 6464,08, -123,851 ); - ent.v[ "angles" ] = ( 332, 180, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_church_fire_vista" ); - ent.v[ "origin" ] = ( -396,657, 6194,97, -125,263 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_smoke_pillar_xlg" ); - ent.v[ "origin" ] = ( -1846,57, 7753,14, -589,768 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 124 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( -387,006, 5853,76, -453,25 ); - ent.v[ "angles" ] = ( 345,461, 226,585, 12,3341 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_sparks" ); - ent.v[ "origin" ] = ( -251,569, 6054,81, -294,964 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 315 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_sparks" ); - ent.v[ "origin" ] = ( -257,678, 6031,75, -318,769 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 300 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_sparks" ); - ent.v[ "origin" ] = ( -1206,52, 5282,3, -50,9786 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 259 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_sparks" ); - ent.v[ "origin" ] = ( -1246,17, 5318,86, 133,77 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 295 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_church_fire_vista" ); - ent.v[ "origin" ] = ( -1018,92, 5610,69, -3,49614 ); - ent.v[ "angles" ] = ( 330, 180, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_lg" ); - ent.v[ "origin" ] = ( -292,259, 5902,1, -491,126 ); - ent.v[ "angles" ] = ( 345,461, 226,585, 12,3341 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 2473,31, 4089,7, -280,51 ); - ent.v[ "angles" ] = ( 19, 41, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 2855,58, 4153,37, -536,792 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 120 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 3180,85, 4192,81, -556,868 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( 3062,73, 4306,96, -585,469 ); - ent.v[ "angles" ] = ( 352, 65, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -2546,49, -17,4801, 102,603 ); - ent.v[ "angles" ] = ( 355,044, 58,9857, 0,836672 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( -2782,02, 151,467, 55,9396 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( -3293,42, 38,6278, -61,6823 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 335 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( -3333,75, -159,603, -178,559 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 319 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( -3018,82, -296,116, -134,467 ); - ent.v[ "angles" ] = ( 1,97051, 240,028, -0,746979 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 3487,99, 1251,07, -292,593 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 184 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_md" ); - ent.v[ "origin" ] = ( 3421, 1300,95, -328,283 ); - ent.v[ "angles" ] = ( 358,779, 192,212, -4,19317 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 3392,22, 927,885, -292,369 ); - ent.v[ "angles" ] = ( 0, 184, 13 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 3058,66, 740,127, -214,788 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 75 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 2346,32, 714,132, 31,2441 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 75 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_light_expensive" ); - ent.v[ "origin" ] = ( 241,377, -2985,24, 353,839 ); - ent.v[ "angles" ] = ( 358,252, 73,0043, -1,46938 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_tomb_fire_line_sm" ); - ent.v[ "origin" ] = ( -1258,53, 3764,31, -178,677 ); - ent.v[ "angles" ] = ( 279, 179, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/gametypes_zm/zstandard.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/gametypes_zm/zstandard.gsc deleted file mode 100644 index c380171..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/gametypes_zm/zstandard.gsc +++ /dev/null @@ -1,45 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_ai_dogs; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/gametypes_zm/_zm_gametype; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; - -main() //checked matches cerberus output -{ - maps/mp/gametypes_zm/_zm_gametype::main(); - level.onprecachegametype = ::onprecachegametype; - level.onstartgametype = ::onstartgametype; - level._game_module_custom_spawn_init_func = maps/mp/gametypes_zm/_zm_gametype::custom_spawn_init_func; - level._game_module_stat_update_func = maps/mp/zombies/_zm_stats::survival_classic_custom_stat_update; - maps/mp/gametypes_zm/_zm_gametype::post_gametype_main( "zstandard" ); -} - -onprecachegametype() //checked matches cerberus output -{ - level.playersuicideallowed = 1; - level.canplayersuicide = ::canplayersuicide; - level.suicide_weapon = "death_self_zm"; - precacheitem( "death_self_zm" ); - maps/mp/zombies/_zm_ai_dogs::init(); - maps/mp/gametypes_zm/_zm_gametype::rungametypeprecache( "zstandard" ); -} - -onstartgametype() //checked matches cerberus output -{ - maps/mp/gametypes_zm/_zm_gametype::setup_classic_gametype(); - maps/mp/gametypes_zm/_zm_gametype::rungametypemain( "zstandard", ::zstandard_main ); -} - -zstandard_main() //checked matches cerberus output -{ - level.dog_rounds_allowed = getgametypesetting( "allowdogs" ); - if ( level.dog_rounds_allowed ) - { - maps/mp/zombies/_zm_ai_dogs::enable_dog_rounds(); - } - level thread maps/mp/zombies/_zm::round_start(); - level thread maps/mp/gametypes_zm/_zm_gametype::kill_all_zombies(); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb.gsc deleted file mode 100644 index ced2203..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb.gsc +++ /dev/null @@ -1,2235 +0,0 @@ -//checked includes changed to match cerberus output -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_challenges; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_devgui; -#include maps/mp/zombies/_zm_powerup_zombie_blood; -#include character/c_jap_takeo_dlc4; -#include character/c_ger_richtofen_dlc4; -#include character/c_rus_nikolai_dlc4; -#include character/c_usa_dempsey_dlc4; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/_visionset_mgr; -#include maps/mp/zm_tomb_chamber; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zm_tomb_ee_side; -#include maps/mp/zm_tomb_ee_main; -#include maps/mp/zm_tomb_main_quest; -#include maps/mp/zm_tomb_dig; -#include maps/mp/zm_tomb_ambient_scripts; -#include maps/mp/zombies/_zm_weap_cymbal_monkey; -#include maps/mp/zombies/_zm_weap_staff_revive; -#include maps/mp/zombies/_zm_weap_riotshield_tomb; -#include maps/mp/zombies/_zm_weap_claymore; -#include maps/mp/zombies/_zm_weap_beacon; -#include maps/mp/_sticky_grenade; -#include maps/mp/zombies/_zm_perk_random; -#include maps/mp/zm_tomb_challenges; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_magicbox_tomb; -#include maps/mp/zm_tomb_distance_tracking; -#include maps/mp/zm_tomb_achievement; -#include maps/mp/zm_tomb; -#include maps/mp/zombies/_zm_weap_staff_air; -#include maps/mp/zombies/_zm_weap_staff_lightning; -#include maps/mp/zombies/_zm_weap_staff_water; -#include maps/mp/zombies/_zm_weap_staff_fire; -#include maps/mp/zombies/_zm_weap_one_inch_punch; -#include maps/mp/zombies/_zm_perk_electric_cherry; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_perk_divetonuke; -#include maps/mp/zm_tomb_vo; -#include maps/mp/gametypes_zm/_spawning; -#include maps/mp/zombies/_load; -#include maps/mp/zombies/_zm_ai_quadrotor; -#include maps/mp/zombies/_zm_ai_mechz; -#include maps/mp/zm_tomb_amb; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm; -#include maps/mp/zm_tomb_giant_robot; -#include maps/mp/zm_tomb_teleporter; -#include maps/mp/zm_tomb_capture_zones; -#include maps/mp/zm_tomb_quest_fire; -#include maps/mp/zm_tomb_tank; -#include maps/mp/zm_tomb_ffotd; -#include maps/mp/zm_tomb_fx; -#include maps/mp/zm_tomb_gamemodes; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -gamemode_callback_setup() //checked matches cerberus output -{ - maps/mp/zm_tomb_gamemodes::init(); -} - -survival_init() //checked matches cerberus output -{ - level.force_team_characters = 1; - level.should_use_cia = 0; - if ( randomint( 100 ) > 50 ) - { - level.should_use_cia = 1; - } - level.precachecustomcharacters = ::precache_team_characters; - level.givecustomcharacters = ::give_team_characters; - flag_wait( "start_zombie_round_logic" ); -} - -zstandard_preinit() //checked matches cerberus output -{ -} - -createfx_callback() //checked changed to match cerberus output -{ - ents = getentarray(); - for ( i = 0; i < ents.size; i++ ) - { - if ( ents[ i ].classname != "info_player_start" ) - { - ents[ i ] delete(); - } - } -} - -main() //checked matches cerberus output -{ - level._no_equipment_activated_clientfield = 1; - level._no_navcards = 1; - level._wallbuy_override_num_bits = 1; - maps/mp/zm_tomb_fx::main(); - level thread maps/mp/zm_tomb_ffotd::main_start(); - level.default_game_mode = "zclassic"; - level.default_start_location = "tomb"; - setup_rex_starts(); - maps/mp/zm_tomb_tank::init_animtree(); - maps/mp/zm_tomb_quest_fire::init_animtree(); - maps/mp/zm_tomb_capture_zones::init_pap_animtree(); - maps/mp/zm_tomb_teleporter::init_animtree(); - maps/mp/zm_tomb_giant_robot::init_animtree(); - level.fx_exclude_edge_fog = 1; - level.fx_exclude_tesla_head_light = 1; - level.fx_exclude_default_explosion = 1; - level.fx_exclude_footsteps = 1; - level._uses_sticky_grenades = 1; - level.disable_fx_zmb_wall_buy_semtex = 1; - level._uses_taser_knuckles = 0; - level.disable_fx_upgrade_aquired = 1; - level._uses_default_wallbuy_fx = 0; - maps/mp/zombies/_zm::init_fx(); - maps/mp/animscripts/zm_death::precache_gib_fx(); - level.zombiemode = 1; - level._no_water_risers = 1; - level.riser_fx_on_client = 1; - maps/mp/zm_tomb_amb::main(); - maps/mp/zombies/_zm_ai_mechz::precache(); - maps/mp/zombies/_zm_ai_quadrotor::precache(); - level.n_active_ragdolls = 0; - level.ragdoll_limit_check = ::ragdoll_attempt; - level._limited_equipment = []; - level._limited_equipment[ level._limited_equipment.size ] = "equip_dieseldrone_zm"; - level._limited_equipment[ level._limited_equipment.size ] = "staff_fire_zm"; - level._limited_equipment[ level._limited_equipment.size ] = "staff_air_zm"; - level._limited_equipment[ level._limited_equipment.size ] = "staff_lightning_zm"; - level._limited_equipment[ level._limited_equipment.size ] = "staff_water_zm"; - level.a_func_vehicle_damage_override = []; - level.callbackvehicledamage = ::tomb_vehicle_damage_override_wrapper; - level.level_specific_stats_init = ::init_tomb_stats; - maps/mp/zombies/_load::main(); - setdvar( "zombiemode_path_minz_bias", 13 ); - setdvar( "tu14_bg_chargeShotExponentialAmmoPerChargeLevel", 1 ); - if ( getDvar( "createfx" ) == "1" ) - { - return; - } - level_precache(); - - maps/mp/gametypes_zm/_spawning::level_use_unified_spawning( 1 ); - level thread setup_tomb_spawn_groups(); - spawner_main_chamber_capture_zombies = getent( "chamber_capture_zombie_spawner", "targetname" ); - spawner_main_chamber_capture_zombies add_spawn_function( ::chamber_capture_zombie_spawn_init ); - level.has_richtofen = 0; - level.givecustomloadout = ::givecustomloadout; - level.precachecustomcharacters = ::precache_personality_characters; - level.givecustomcharacters = ::give_personality_characters; - level.setupcustomcharacterexerts = ::setup_personality_character_exerts; - level._zmbvoxlevelspecific = maps/mp/zm_tomb_vo::init_level_specific_audio; - level.custom_player_track_ammo_count = ::tomb_custom_player_track_ammo_count; - level.custom_player_fake_death = ::zm_player_fake_death; - level.custom_player_fake_death_cleanup = ::zm_player_fake_death_cleanup; - level.initial_round_wait_func = ::initial_round_wait_func; - level.zombie_init_done = ::zombie_init_done; - level._zombies_round_spawn_failsafe = ::tomb_round_spawn_failsafe; - level.random_pandora_box_start = 1; - level.zombiemode_using_pack_a_punch = 1; - level.zombiemode_reusing_pack_a_punch = 1; - level.zombiemode_using_juggernaut_perk = 1; - level.zombiemode_using_revive_perk = 1; - level.zombiemode_using_sleightofhand_perk = 1; - level.zombiemode_using_additionalprimaryweapon_perk = 1; - level.zombiemode_using_marathon_perk = 1; - level.zombiemode_using_deadshot_perk = 1; - level.zombiemode_using_doubletap_perk = 1; - level.zombiemode_using_random_perk = 1; - level.zombiemode_using_divetonuke_perk = 1; - maps/mp/zombies/_zm_perk_divetonuke::enable_divetonuke_perk_for_level(); - level.custom_electric_cherry_perk_threads = maps/mp/zombies/_zm_perks::register_perk_threads( "specialty_grenadepulldeath", ::tomb_custom_electric_cherry_reload_attack, maps/mp/zombies/_zm_perk_electric_cherry::electric_cherry_perk_lost ); - level.zombiemode_using_electric_cherry_perk = 1; - maps/mp/zombies/_zm_perk_electric_cherry::enable_electric_cherry_perk_for_level(); - level.flopper_network_optimized = 1; - level.perk_random_vo_func_usemachine = maps/mp/zm_tomb_vo::wunderfizz_used_vo; - maps/mp/zombies/_zm_weap_one_inch_punch::one_inch_precache(); - maps/mp/zombies/_zm_weap_staff_fire::precache(); - maps/mp/zombies/_zm_weap_staff_water::precache(); - maps/mp/zombies/_zm_weap_staff_lightning::precache(); - maps/mp/zombies/_zm_weap_staff_air::precache(); - level._custom_turn_packapunch_on = maps/mp/zm_tomb_capture_zones::pack_a_punch_dummy_init; - level.custom_vending_precaching = ::custom_vending_precaching; - level.register_offhand_weapons_for_level_defaults_override = ::offhand_weapon_overrride; - level.zombiemode_offhand_weapon_give_override = ::offhand_weapon_give_override; - level._zombie_custom_add_weapons = ::custom_add_weapons; - level._allow_melee_weapon_switching = 1; - include_equipment( "equip_dieseldrone_zm" ); - include_equipment( "tomb_shield_zm" ); - level.custom_ai_type = []; - level.raygun2_included = 1; - include_weapons(); - include_powerups(); - include_perks_in_random_rotation(); - level maps/mp/zm_tomb_achievement::init(); - precacheitem( "death_throe_zm" ); - if ( level.splitscreen && getDvarInt( "splitscreen_playerCount" ) > 2 ) - { - level.optimise_for_splitscreen = 1; - } - else - { - level.optimise_for_splitscreen = 0; - } - if ( isDefined( level.optimise_for_splitscreen ) && level.optimise_for_splitscreen ) - { - level.culldist = 2500; - } - else - { - level.culldist = 5500; - } - - setculldist( level.culldist ); - level thread maps/mp/zm_tomb_distance_tracking::zombie_tracking_init(); - maps/mp/zombies/_zm_magicbox_tomb::init(); - level.special_weapon_magicbox_check = ::tomb_special_weapon_magicbox_check; - maps/mp/zombies/_zm::init(); - level.callbackactordamage = ::tomb_actor_damage_override_wrapper; - level._weaponobjects_on_player_connect_override = ::tomb_weaponobjects_on_player_connect_override; - maps/mp/zombies/_zm_spawner::register_zombie_death_event_callback( ::tomb_zombie_death_event_callback ); - level.player_intersection_tracker_override = ::tomb_player_intersection_tracker_override; - maps/mp/zm_tomb_challenges::challenges_init(); - maps/mp/zombies/_zm_perk_random::init(); - tomb_register_client_fields(); - register_burn_overlay(); - level thread maps/mp/_sticky_grenade::init(); - maps/mp/zm_tomb_tank::init(); - maps/mp/zombies/_zm_weap_beacon::init(); - maps/mp/zombies/_zm_weap_claymore::init(); - maps/mp/zombies/_zm_weap_riotshield_tomb::init(); - maps/mp/zombies/_zm_weap_staff_air::init(); - maps/mp/zombies/_zm_weap_staff_fire::init(); - maps/mp/zombies/_zm_weap_staff_lightning::init(); - maps/mp/zombies/_zm_weap_staff_water::init(); - maps/mp/zombies/_zm_weap_staff_revive::init(); - maps/mp/zombies/_zm_weap_cymbal_monkey::init(); - level._melee_weapons = []; - maps/mp/zm_tomb_giant_robot::init_giant_robot_glows(); - maps/mp/zm_tomb_giant_robot::init_giant_robot(); - level.can_revive = maps/mp/zm_tomb_giant_robot::tomb_can_revive_override; - maps/mp/zm_tomb_capture_zones::init_capture_zones(); - level.a_e_slow_areas = getentarray( "player_slow_area", "targetname" ); - maps/mp/zm_tomb_ambient_scripts::init_tomb_ambient_scripts(); - - level thread maps/mp/zombies/_zm_ai_mechz::init(); - level thread maps/mp/zombies/_zm_perk_random::init_animtree(); - level thread maps/mp/zombies/_zm_ai_quadrotor::init(); - level.zombiemode_divetonuke_perk_func = ::tomb_custom_divetonuke_explode; - set_zombie_var( "zombie_perk_divetonuke_min_damage", 500 ); - set_zombie_var( "zombie_perk_divetonuke_max_damage", 2000 ); - level.custom_laststand_func = ::tomb_custom_electric_cherry_laststand; - maps/mp/zm_tomb_dig::init_shovel(); - level.n_crystals_pickedup = 0; - level thread maps/mp/zm_tomb_main_quest::main_quest_init(); - level thread maps/mp/zm_tomb_teleporter::teleporter_init(); - level thread maps/mp/zombies/_zm_perk_random::start_random_machine(); - level.closest_player_override = ::tomb_closest_player_override; - level.validate_enemy_path_length = ::tomb_validate_enemy_path_length; - level thread maps/mp/zm_tomb_ee_main::init(); - level thread maps/mp/zm_tomb_ee_side::init(); - - level.zones = []; - level.zone_manager_init_func = ::working_zone_init; - init_zones = []; - init_zones[ 0 ] = "zone_start"; - level thread maps/mp/zombies/_zm_zonemgr::manage_zones( init_zones ); - if ( isDefined( level.optimise_for_splitscreen ) && level.optimise_for_splitscreen ) - { - if ( is_classic() ) - { - level.zombie_ai_limit = 20; - } - setdvar( "fx_marks_draw", 0 ); - setdvar( "disable_rope", 1 ); - setdvar( "cg_disableplayernames", 1 ); - setdvar( "disableLookAtEntityLogic", 1 ); - } - else - { - level.zombie_ai_limit = 24; - } - - level thread drop_all_barriers(); - level thread traversal_blocker(); - onplayerconnect_callback( ::on_player_connect ); - maps/mp/zombies/_zm::register_player_damage_callback( ::tomb_player_damage_callback ); - level.custom_get_round_enemy_array_func = ::zm_tomb_get_round_enemy_array; - flag_wait( "start_zombie_round_logic" ); - wait_network_frame(); - level notify( "specialty_additionalprimaryweapon_power_on" ); - wait_network_frame(); - level notify( "additionalprimaryweapon_on" ); - set_zombie_var( "zombie_use_failsafe", 0 ); - level check_solo_status(); - level thread adjustments_for_solo(); - level thread zone_capture_powerup(); - level thread clean_up_bunker_doors(); - level setclientfield( "lantern_fx", 1 ); - level thread maps/mp/zm_tomb_chamber::tomb_watch_chamber_player_activity(); - /* -/# - maps/mp/zm_tomb_utility::setup_devgui(); -#/ - */ - init_weather_manager(); - level thread maps/mp/zm_tomb_ffotd::main_end(); -} - -tomb_register_client_fields() //checked matches cerberus output -{ - registerclientfield( "scriptmover", "stone_frozen", 14000, 1, "int" ); - n_bits = getminbitcountfornum( 5 ); - registerclientfield( "world", "rain_level", 14000, n_bits, "int" ); - registerclientfield( "world", "snow_level", 14000, n_bits, "int" ); - registerclientfield( "toplayer", "player_weather_visionset", 14000, 2, "int" ); - n_bits = getminbitcountfornum( 6 ); - registerclientfield( "toplayer", "player_rumble_and_shake", 14000, n_bits, "int" ); - registerclientfield( "scriptmover", "sky_pillar", 14000, 1, "int" ); - registerclientfield( "scriptmover", "staff_charger", 14000, 3, "int" ); - registerclientfield( "toplayer", "player_staff_charge", 14000, 2, "int" ); - registerclientfield( "toplayer", "player_tablet_state", 14000, 2, "int" ); - registerclientfield( "actor", "zombie_soul", 14000, 1, "int" ); - registerclientfield( "zbarrier", "magicbox_runes", 14000, 1, "int" ); - registerclientfield( "scriptmover", "barbecue_fx", 14000, 1, "int" ); - registerclientfield( "world", "cooldown_steam", 14000, 2, "int" ); - registerclientfield( "world", "mus_zmb_egg_snapshot_loop", 14000, 1, "int" ); - registerclientfield( "world", "sndMaelstromPlr0", 14000, 1, "int" ); - registerclientfield( "world", "sndMaelstromPlr1", 14000, 1, "int" ); - registerclientfield( "world", "sndMaelstromPlr2", 14000, 1, "int" ); - registerclientfield( "world", "sndMaelstromPlr3", 14000, 1, "int" ); - registerclientfield( "world", "sndChamberMusic", 14000, 3, "int" ); - registerclientfield( "actor", "foot_print_box_fx", 14000, 1, "int" ); - registerclientfield( "scriptmover", "foot_print_box_glow", 14000, 1, "int" ); - registerclientfield( "world", "crypt_open_exploder", 14000, 1, "int" ); - registerclientfield( "world", "lantern_fx", 14000, 1, "int" ); - registerclientfield( "allplayers", "oneinchpunch_impact", 14000, 1, "int" ); - registerclientfield( "actor", "oneinchpunch_physics_launchragdoll", 14000, 1, "int" ); -} - -register_burn_overlay() //checked matches cerberus output -{ - level.zm_transit_burn_max_duration = 2; - if ( !isDefined( level.vsmgr_prio_overlay_zm_transit_burn ) ) - { - level.vsmgr_prio_overlay_zm_transit_burn = 20; - } - maps/mp/_visionset_mgr::vsmgr_register_info( "overlay", "zm_transit_burn", 14000, level.vsmgr_prio_overlay_zm_transit_burn, 15, 1, maps/mp/_visionset_mgr::vsmgr_duration_lerp_thread_per_player, 0 ); -} - -tomb_closest_player_override( v_zombie_origin, a_players_to_check ) //checked partially changed to match cerberus output see info.md -{ - e_player_to_attack = undefined; - while ( !isDefined( e_player_to_attack ) ) - { - e_player_to_attack = tomb_get_closest_player_using_paths( v_zombie_origin, a_players_to_check ); - a_players = maps/mp/zm_tomb_tank::get_players_on_tank( 1 ); - if ( a_players.size > 0 ) - { - e_player_closest_on_tank = undefined; - n_dist_tank_min = 99999999; - foreach ( e_player in a_players ) - { - n_dist_sq = distance2dsquared( self.origin, e_player.origin ); - if ( n_dist_sq < n_dist_tank_min ) - { - n_dist_tank_min = n_dist_sq; - e_player_closest_on_tank = e_player; - } - } - if ( is_player_valid( e_player_to_attack ) ) - { - n_dist_for_path = distance2dsquared( self.origin, e_player_to_attack.origin ); - if ( n_dist_tank_min < n_dist_for_path ) - { - e_player_to_attack = e_player_closest_on_tank; - } - } - else if ( is_player_valid( e_player_closest_on_tank ) ) - { - e_player_to_attack = e_player_closest_on_tank; - } - } - wait 0.5; - } - return e_player_to_attack; -} - -zm_tomb_get_round_enemy_array() //checked changed to match cerberus output see info.md -{ - enemies = []; - valid_enemies = []; - enemies = getaispeciesarray( level.zombie_team, "all" ); - for ( i = 0; i < enemies.size; i++ ) - { - if ( ( !isDefined( enemies[ i ].script_noteworthy ) || enemies[ i ].script_noteworthy != "capture_zombie" ) && isDefined( enemies[ i ].ignore_enemy_count ) && enemies[ i ].ignore_enemy_count ) - { - } - else - { - valid_enemies[ valid_enemies.size ] = enemies[ i ]; - } - } - return valid_enemies; -} - -tomb_player_damage_callback( e_inflictor, e_attacker, n_damage, n_dflags, str_means_of_death, str_weapon, v_point, v_dir, str_hit_loc, psoffsettime, b_damage_from_underneath, n_model_index, str_part_name ) //checked did not change to match cerberus output changed at own discretion -{ - if ( isDefined( str_weapon ) ) - { - if ( issubstr( str_weapon, "staff" ) ) - { - return 0; - } - if ( str_weapon == "t72_turret" ) - { - return 0; - } - if ( str_weapon == "quadrotorturret_zm" || str_weapon == "quadrotorturret_upgraded_zm" ) - { - return 0; - } - if ( str_weapon == "zombie_markiv_side_cannon" ) - { - return 0; - } - if ( str_weapon == "zombie_markiv_turret" ) - { - return 0; - } - if ( str_weapon == "zombie_markiv_cannon" ) - { - return 0; - } - } - return n_damage; -} - -tomb_random_perk_weights() //checked matches cerberus output -{ - temp_array = []; - if ( randomint( 4 ) == 0 ) - { - arrayinsert( temp_array, "specialty_rof", 0 ); - } - if ( randomint( 4 ) == 0 ) - { - arrayinsert( temp_array, "specialty_deadshot", 0 ); - } - if ( randomint( 4 ) == 0 ) - { - arrayinsert( temp_array, "specialty_additionalprimaryweapon", 0 ); - } - if ( randomint( 4 ) == 0 ) - { - arrayinsert( temp_array, "specialty_flakjacket", 0 ); - } - if ( randomint( 4 ) == 0 ) - { - arrayinsert( temp_array, "specialty_grenadepulldeath", 0 ); - } - temp_array = array_randomize( temp_array ); - level._random_perk_machine_perk_list = array_randomize( level._random_perk_machine_perk_list ); - level._random_perk_machine_perk_list = arraycombine( level._random_perk_machine_perk_list, temp_array, 1, 0 ); - keys = getarraykeys( level._random_perk_machine_perk_list ); - return keys; -} - -level_precache() //checked matches cerberus output -{ - precacheshader( "specialty_zomblood_zombies" ); - precachemodel( "c_zom_guard" ); - precachemodel( "p6_zm_tm_orb_fire" ); - precachemodel( "p6_zm_tm_orb_wind" ); - precachemodel( "p6_zm_tm_orb_lightning" ); - precachemodel( "p6_zm_tm_orb_ice" ); - precachemodel( "fx_tomb_vortex_beam_mesh" ); - precachemodel( "fxuse_sky_pillar_new" ); -} - -on_player_connect() //checked matches cerberus output -{ - self thread revive_watcher(); - wait_network_frame(); - self thread player_slow_movement_speed_monitor(); - self thread sndmeleewpnsound(); -} - -sndmeleewpnsound() //checked changed to match cerberus output -{ - self endon( "disconnect" ); - level endon( "end_game" ); - while ( 1 ) - { - while ( !self ismeleeing() ) - { - wait 0.05; - } - current_melee_weapon = self get_player_melee_weapon(); - current_weapon = self getcurrentweapon(); - if ( current_weapon == "tomb_shield_zm" ) - { - self playsound( "fly_riotshield_zm_swing" ); - while ( self ismeleeing() ) - { - wait 0.05; - } - continue; - } - alias = "zmb_melee_whoosh_"; - if ( isDefined( self.is_player_zombie ) && self.is_player_zombie ) - { - alias = "zmb_melee_whoosh_zmb_"; - } - else if ( current_melee_weapon == "bowie_knife_zm" ) - { - alias = "zmb_bowie_swing_"; - } - else if ( current_melee_weapon == "one_inch_punch_zm" ) - { - alias = "wpn_one_inch_punch_"; - } - else if ( current_melee_weapon == "one_inch_punch_upgraded_zm" ) - { - alias = "wpn_one_inch_punch_"; - } - else if ( current_melee_weapon == "one_inch_punch_fire_zm" ) - { - alias = "wpn_one_inch_punch_fire_"; - } - else if ( current_melee_weapon == "one_inch_punch_air_zm" ) - { - alias = "wpn_one_inch_punch_air_"; - } - else if ( current_melee_weapon == "one_inch_punch_ice_zm" ) - { - alias = "wpn_one_inch_punch_ice_"; - } - else if ( current_melee_weapon == "one_inch_punch_lightning_zm" ) - { - alias = "wpn_one_inch_punch_lightning_"; - } - else if ( sndmeleewpn_isstaff( current_melee_weapon ) ) - { - alias = "zmb_melee_staff_upgraded_"; - } - self playsoundtoplayer( alias + "plr", self ); - wait_network_frame(); - if ( maps/mp/zombies/_zm_audio::sndisnetworksafe() ) - { - self playsound( alias + "npc" ); - } - while ( self ismeleeing() ) - { - wait 0.05; - } - wait 0.05; - } -} - -sndmeleewpn_isstaff( weapon ) //checked matches cerberus output -{ - switch( weapon ) - { - case "staff_air_melee_zm": - case "staff_fire_melee_zm": - case "staff_lightning_melee_zm": - case "staff_melee_zm": - case "staff_watermelee_zm": - isstaff = 1; - break; - default: - isstaff = 0; - } - return isstaff; -} - -revive_watcher() //checked matches cerberus output -{ - self endon( "death_or_disconnect" ); - while ( 1 ) - { - self waittill( "do_revive_ended_normally" ); - if ( self hasperk( "specialty_quickrevive" ) ) - { - self notify( "quick_revived_player" ); - } - else - { - self notify( "revived_player" ); - } - } -} - -setup_tomb_spawn_groups() //checked matches cerberus output -{ - level.use_multiple_spawns = 1; - level.spawner_int = 1; - level waittill( "start_zombie_round_logic" ); - level.zones[ "ug_bottom_zone" ].script_int = 2; - level.zones[ "zone_nml_19" ].script_int = 2; - level.zones[ "zone_chamber_0" ].script_int = 3; - level.zones[ "zone_chamber_1" ].script_int = 3; - level.zones[ "zone_chamber_2" ].script_int = 3; - level.zones[ "zone_chamber_3" ].script_int = 3; - level.zones[ "zone_chamber_4" ].script_int = 3; - level.zones[ "zone_chamber_5" ].script_int = 3; - level.zones[ "zone_chamber_6" ].script_int = 3; - level.zones[ "zone_chamber_7" ].script_int = 3; - level.zones[ "zone_chamber_8" ].script_int = 3; - level.zones[ "zone_ice_stairs" ].script_int = 2; - level.zones[ "zone_bolt_stairs" ].script_int = 2; - level.zones[ "zone_air_stairs" ].script_int = 2; - level.zones[ "zone_fire_stairs" ].script_int = 2; - level.zones[ "zone_bolt_stairs_1" ].script_int = 2; - level.zones[ "zone_air_stairs_1" ].script_int = 2; - level.zones[ "zone_fire_stairs_1" ].script_int = 2; -} - -chamber_capture_zombie_spawn_init() //checked matches cerberus output -{ - self endon( "death" ); - self waittill( "completed_emerging_into_playable_area" ); - self setclientfield( "zone_capture_zombie", 1 ); -} - -tomb_round_spawn_failsafe() //checked changed to match cerberus output -{ - self endon( "death" ); - prevorigin = self.origin; - while ( 1 ) - { - if ( isDefined( self.ignore_round_spawn_failsafe ) && self.ignore_round_spawn_failsafe ) - { - return; - } - wait 15; - if ( isDefined( self.is_inert ) && self.is_inert ) - { - continue; - } - if ( isDefined( self.lastchunk_destroy_time ) ) - { - if ( ( getTime() - self.lastchunk_destroy_time ) < 8000 ) - { - continue; - } - } - if ( self.origin[ 2 ] < -3000 ) - { - if ( isDefined( level.put_timed_out_zombies_back_in_queue ) && level.put_timed_out_zombies_back_in_queue && !flag( "dog_round" ) && isDefined( self.isscreecher ) && !self.isscreecher ) - { - level.zombie_total++; - level.zombie_total_subtract++; - } - self dodamage( self.health + 100, ( 0, 0, 0 ) ); - break; - } - if ( distancesquared( self.origin, prevorigin ) < 576 ) - { - if ( isDefined( level.put_timed_out_zombies_back_in_queue ) && level.put_timed_out_zombies_back_in_queue && !flag( "dog_round" ) ) - { - if ( !self.ignoreall && isDefined( self.nuked ) && !self.nuked && isDefined( self.marked_for_death ) && !self.marked_for_death && isDefined( self.isscreecher ) && !self.isscreecher && isDefined( self.has_legs ) && self.has_legs && isDefined( self.is_brutus ) && !self.is_brutus ) - { - level.zombie_total++; - level.zombie_total_subtract++; - } - } - level.zombies_timeout_playspace++; - self dodamage( self.health + 100, ( 0, 0, 0 ) ); - break; - } - prevorigin = self.origin; - } -} - -givecustomloadout( takeallweapons, alreadyspawned ) //checked matches cerberus output -{ - self giveweapon( "knife_zm" ); - self give_start_weapon( 1 ); -} - -precache_team_characters() //checked matches cerberus output -{ - precachemodel( "c_zom_player_cdc_fb" ); - precachemodel( "c_zom_hazmat_viewhands" ); - precachemodel( "c_zom_player_cia_fb" ); - precachemodel( "c_zom_suit_viewhands" ); -} - -precache_personality_characters() //checked matches cerberus output -{ - character/c_usa_dempsey_dlc4::precache(); - character/c_rus_nikolai_dlc4::precache(); - character/c_ger_richtofen_dlc4::precache(); - character/c_jap_takeo_dlc4::precache(); - precachemodel( "c_zom_richtofen_viewhands" ); - precachemodel( "c_zom_nikolai_viewhands" ); - precachemodel( "c_zom_takeo_viewhands" ); - precachemodel( "c_zom_dempsey_viewhands" ); -} - -give_personality_characters() //checked matches cerberus output could not find dvar -{ - if ( isDefined( level.hotjoin_player_setup ) && [[ level.hotjoin_player_setup ]]( "c_zom_arlington_coat_viewhands" ) ) - { - return; - } - self detachall(); - if ( !isDefined( self.characterindex ) ) - { - self.characterindex = assign_lowest_unused_character_index(); - } - self.favorite_wall_weapons_list = []; - self.talks_in_danger = 0; - /* -/# - if ( getDvar( #"40772CF1" ) != "" ) - { - self.characterindex = getDvarInt( #"40772CF1" ); -#/ - } - */ - switch( self.characterindex ) - { - case 0: - self character/c_usa_dempsey_dlc4::main(); - self setviewmodel( "c_zom_dempsey_viewhands" ); - level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); - self set_player_is_female( 0 ); - self.character_name = "Dempsey"; - break; - case 1: - self character/c_rus_nikolai_dlc4::main(); - self setviewmodel( "c_zom_nikolai_viewhands" ); - level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); - self set_player_is_female( 0 ); - self.character_name = "Nikolai"; - break; - case 2: - self character/c_ger_richtofen_dlc4::main(); - self setviewmodel( "c_zom_richtofen_viewhands" ); - level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); - self set_player_is_female( 0 ); - self.character_name = "Richtofen"; - break; - case 3: - self character/c_jap_takeo_dlc4::main(); - self setviewmodel( "c_zom_takeo_viewhands" ); - level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); - self set_player_is_female( 0 ); - self.character_name = "Takeo"; - break; - } - self setmovespeedscale( 1 ); - self setsprintduration( 4 ); - self setsprintcooldown( 0 ); - self thread set_exert_id(); -} - -set_exert_id() //checked matches cerberus output -{ - self endon( "disconnect" ); - wait_network_frame(); - wait_network_frame(); - self maps/mp/zombies/_zm_audio::setexertvoice( self.characterindex + 1 ); -} - -assign_lowest_unused_character_index() //checked changed to match cerberus output -{ - charindexarray = []; - charindexarray[ 0 ] = 0; - charindexarray[ 1 ] = 1; - charindexarray[ 2 ] = 2; - charindexarray[ 3 ] = 3; - players = get_players(); - if ( players.size == 1 ) - { - charindexarray = array_randomize( charindexarray ); - if ( charindexarray[ 0 ] == 2 ) - { - level.has_richtofen = 1; - } - return charindexarray[ 0 ]; - } - else - { - n_characters_defined = 0; - foreach ( player in players ) - { - if ( isDefined( player.characterindex ) ) - { - arrayremovevalue( charindexarray, player.characterindex, 0 ); - n_characters_defined++; - } - } - if ( charindexarray.size > 0 ) - { - if ( n_characters_defined == ( players.size - 1 ) ) - { - if ( !is_true( level.has_richtofen ) ) - { - level.has_richtofen = 1; - return 2; - } - } - charindexarray = array_randomize( charindexarray ); - if ( charindexarray[ 0 ] == 2 ) - { - level.has_richtofen = 1; - } - return charindexarray[ 0 ]; - } - } - return 0; -} - -give_team_characters() //checked matches cerberus output -{ - self detachall(); - self set_player_is_female( 0 ); - if ( !isDefined( self.characterindex ) ) - { - self.characterindex = 1; - if ( self.team == "axis" ) - { - self.characterindex = 0; - } - } - switch( self.characterindex ) - { - case 0: - case 2: - self setmodel( "c_zom_player_cia_fb" ); - self.voice = "american"; - self.skeleton = "base"; - self setviewmodel( "c_zom_suit_viewhands" ); - self.characterindex = 0; - break; - case 1: - case 3: - self setmodel( "c_zom_player_cdc_fb" ); - self.voice = "american"; - self.skeleton = "base"; - self setviewmodel( "c_zom_hazmat_viewhands" ); - self.characterindex = 1; - break; - } - self setmovespeedscale( 1 ); - self setsprintduration( 4 ); - self setsprintcooldown( 0 ); -} - -initcharacterstartindex() //checked matches cerberus output -{ - level.characterstartindex = randomint( 4 ); -} - -zm_player_fake_death_cleanup() //checked matches cerberus output -{ - if ( isDefined( self._fall_down_anchor ) ) - { - self._fall_down_anchor delete(); - self._fall_down_anchor = undefined; - } -} - -zm_player_fake_death( vdir ) //checked matches cerberus output -{ - level notify( "fake_death" ); - self notify( "fake_death" ); - stance = self getstance(); - self.ignoreme = 1; - self enableinvulnerability(); - self takeallweapons(); - if ( isDefined( self.insta_killed ) && self.insta_killed ) - { - self maps/mp/zombies/_zm::player_fake_death(); - self allowprone( 1 ); - self allowcrouch( 0 ); - self allowstand( 0 ); - wait 0.25; - self freezecontrols( 1 ); - } - else - { - self freezecontrols( 1 ); - self thread fall_down( vdir, stance ); - wait 1; - } -} - -fall_down( vdir, stance ) //checked matches cerberus output -{ - self endon( "disconnect" ); - level endon( "game_module_ended" ); - self ghost(); - origin = self.origin; - xyspeed = ( 0, 0, 0 ); - angles = self getplayerangles(); - angles = ( angles[ 0 ], angles[ 1 ], angles[ 2 ] + randomfloatrange( -5, 5 ) ); - if ( isDefined( vdir ) && length( vdir ) > 0 ) - { - xyspeedmag = 40 + randomint( 12 ) + randomint( 12 ); - xyspeed = xyspeedmag * vectornormalize( ( vdir[ 0 ], vdir[ 1 ], 0 ) ); - } - linker = spawn( "script_origin", ( 0, 0, 0 ) ); - linker.origin = origin; - linker.angles = angles; - self._fall_down_anchor = linker; - self playerlinkto( linker ); - self playsoundtoplayer( "zmb_player_death_fall", self ); - falling = stance != "prone"; - if ( falling ) - { - origin = playerphysicstrace( origin, origin + xyspeed ); - eye = self get_eye(); - floor_height = ( 10 + origin[ 2 ] ) - eye[ 2 ]; - origin += ( 0, 0, floor_height ); - lerptime = 0.5; - linker moveto( origin, lerptime, lerptime ); - linker rotateto( angles, lerptime, lerptime ); - } - self freezecontrols( 1 ); - if ( falling ) - { - linker waittill( "movedone" ); - } - self giveweapon( "death_throe_zm" ); - self switchtoweapon( "death_throe_zm" ); - if ( falling ) - { - bounce = randomint( 4 ) + 8; - origin = ( origin + ( 0, 0, bounce ) ) - ( xyspeed * 0.1 ); - lerptime = bounce / 50; - linker moveto( origin, lerptime, 0, lerptime ); - linker waittill( "movedone" ); - origin = ( origin + ( 0, 0, bounce * -1 ) ) + ( xyspeed * 0.1 ); - lerptime /= 2; - linker moveto( origin, lerptime, lerptime ); - linker waittill( "movedone" ); - linker moveto( origin, 5, 0 ); - } - wait 15; - linker delete(); -} - -initial_round_wait_func() //checked matches cerberus output -{ - flag_wait( "initial_blackscreen_passed" ); -} - -offhand_weapon_overrride() //checked matches cerberus output -{ - register_lethal_grenade_for_level( "frag_grenade_zm" ); - level.zombie_lethal_grenade_player_init = "frag_grenade_zm"; - register_lethal_grenade_for_level( "sticky_grenade_zm" ); - register_tactical_grenade_for_level( "cymbal_monkey_zm" ); - register_tactical_grenade_for_level( "emp_grenade_zm" ); - register_tactical_grenade_for_level( "beacon_zm" ); - register_placeable_mine_for_level( "claymore_zm" ); - register_melee_weapon_for_level( "knife_zm" ); - register_melee_weapon_for_level( "staff_air_melee_zm" ); - register_melee_weapon_for_level( "staff_fire_melee_zm" ); - register_melee_weapon_for_level( "staff_lightning_melee_zm" ); - register_melee_weapon_for_level( "staff_water_melee_zm" ); - level.zombie_melee_weapon_player_init = "knife_zm"; - register_equipment_for_level( "tomb_shield_zm" ); - level.zombie_equipment_player_init = undefined; - level.equipment_safe_to_drop = ::equipment_safe_to_drop; -} - -equipment_safe_to_drop( weapon ) //checked matches cerberus output -{ - if ( !isDefined( self.origin ) ) - { - return 1; - } - return 1; -} - -offhand_weapon_give_override( str_weapon ) //checked matches cerberus output -{ - self endon( "death" ); - if ( is_tactical_grenade( str_weapon ) && isDefined( self get_player_tactical_grenade() ) && !self is_player_tactical_grenade( str_weapon ) ) - { - self setweaponammoclip( self get_player_tactical_grenade(), 0 ); - self takeweapon( self get_player_tactical_grenade() ); - } - return 0; -} - -tomb_weaponobjects_on_player_connect_override() //checked matches cerberus output -{ - level.retrievable_knife_init_names = []; - onplayerconnect_callback( ::weaponobjects_on_player_connect_override_internal ); -} - -tomb_player_intersection_tracker_override( e_player ) //checked changed to match cerberus output -{ - if ( isDefined( e_player.b_already_on_tank ) && e_player.b_already_on_tank || isDefined( self.b_already_on_tank ) && self.b_already_on_tank ) - { - return 1; - } - if ( isDefined( e_player.giant_robot_transition ) && e_player.giant_robot_transition || isDefined( self.giant_robot_transition ) && self.giant_robot_transition ) - { - return 1; - } - return 0; -} - -init_tomb_stats() //checked matches cerberus output -{ - self maps/mp/zm_tomb_achievement::init_player_achievement_stats(); -} - -custom_add_weapons() //checked matches cerberus output -{ - level.laststandpistol = "c96_zm"; - level.default_laststandpistol = "c96_zm"; - level.default_solo_laststandpistol = "c96_upgraded_zm"; - level.start_weapon = "c96_zm"; - add_zombie_weapon( "mg08_zm", "mg08_upgraded_zm", &"ZOMBIE_WEAPON_MG08", 50, "wpck_mg", "", undefined, 1 ); - add_zombie_weapon( "hamr_zm", "hamr_upgraded_zm", &"ZOMBIE_WEAPON_HAMR", 50, "wpck_mg", "", undefined, 1 ); - add_zombie_weapon( "type95_zm", "type95_upgraded_zm", &"ZOMBIE_WEAPON_TYPE95", 50, "wpck_rifle", "", undefined, 1 ); - add_zombie_weapon( "galil_zm", "galil_upgraded_zm", &"ZOMBIE_WEAPON_GALIL", 50, "wpck_rifle", "", undefined, 1 ); - add_zombie_weapon( "fnfal_zm", "fnfal_upgraded_zm", &"ZOMBIE_WEAPON_FNFAL", 50, "wpck_rifle", "", undefined, 1 ); - add_zombie_weapon( "m14_zm", "m14_upgraded_zm", &"ZOMBIE_WEAPON_M14", 500, "wpck_rifle", "", undefined, 1 ); - add_zombie_weapon( "mp44_zm", "mp44_upgraded_zm", &"ZMWEAPON_MP44_WALLBUY", 1400, "wpck_rifle", "", undefined, 1 ); - add_zombie_weapon( "scar_zm", "scar_upgraded_zm", &"ZOMBIE_WEAPON_SCAR", 50, "wpck_rifle", "", undefined, 1 ); - add_zombie_weapon( "870mcs_zm", "870mcs_upgraded_zm", &"ZOMBIE_WEAPON_870MCS", 900, "wpck_shotgun", "", undefined, 1 ); - add_zombie_weapon( "srm1216_zm", "srm1216_upgraded_zm", &"ZOMBIE_WEAPON_SRM1216", 50, "wpck_shotgun", "", undefined, 1 ); - add_zombie_weapon( "ksg_zm", "ksg_upgraded_zm", &"ZOMBIE_WEAPON_KSG", 1100, "wpck_shotgun", "", undefined, 1 ); - add_zombie_weapon( "ak74u_zm", "ak74u_upgraded_zm", &"ZOMBIE_WEAPON_AK74U", 1200, "wpck_smg", "", undefined, 1 ); - add_zombie_weapon( "ak74u_extclip_zm", "ak74u_extclip_upgraded_zm", &"ZOMBIE_WEAPON_AK74U", 1200, "wpck_smg", "", undefined, 1 ); - add_zombie_weapon( "pdw57_zm", "pdw57_upgraded_zm", &"ZOMBIE_WEAPON_PDW57", 1000, "wpck_smg", "", undefined, 1 ); - add_zombie_weapon( "thompson_zm", "thompson_upgraded_zm", &"ZMWEAPON_THOMPSON_WALLBUY", 1500, "wpck_smg", "", 800, 1 ); - add_zombie_weapon( "qcw05_zm", "qcw05_upgraded_zm", &"ZOMBIE_WEAPON_QCW05", 50, "wpck_smg", "", undefined, 1 ); - add_zombie_weapon( "mp40_zm", "mp40_upgraded_zm", &"ZOMBIE_WEAPON_MP40", 1300, "wpck_smg", "", undefined, 1 ); - add_zombie_weapon( "mp40_stalker_zm", "mp40_stalker_upgraded_zm", &"ZOMBIE_WEAPON_MP40", 1300, "wpck_smg", "", undefined, 1 ); - add_zombie_weapon( "evoskorpion_zm", "evoskorpion_upgraded_zm", &"ZOMBIE_WEAPON_EVOSKORPION", 50, "wpck_smg", "", undefined, 1 ); - add_zombie_weapon( "ballista_zm", "ballista_upgraded_zm", &"ZMWEAPON_BALLISTA_WALLBUY", 500, "wpck_snipe", "", undefined, 1 ); - add_zombie_weapon( "dsr50_zm", "dsr50_upgraded_zm", &"ZOMBIE_WEAPON_DR50", 50, "wpck_snipe", "", undefined, 1 ); - add_zombie_weapon( "beretta93r_zm", "beretta93r_upgraded_zm", &"ZOMBIE_WEAPON_BERETTA93r", 1000, "wpck_pistol", "", undefined, 1 ); - add_zombie_weapon( "beretta93r_extclip_zm", "beretta93r_extclip_upgraded_zm", &"ZOMBIE_WEAPON_BERETTA93r", 1000, "wpck_pistol", "", undefined, 1 ); - add_zombie_weapon( "kard_zm", "kard_upgraded_zm", &"ZOMBIE_WEAPON_KARD", 50, "wpck_pistol", "", undefined, 1 ); - add_zombie_weapon( "fiveseven_zm", "fiveseven_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVEN", 1100, "wpck_pistol", "", undefined, 1 ); - add_zombie_weapon( "python_zm", "python_upgraded_zm", &"ZOMBIE_WEAPON_PYTHON", 50, "wpck_pistol", "", undefined, 1 ); - add_zombie_weapon( "c96_zm", "c96_upgraded_zm", &"ZOMBIE_WEAPON_C96", 50, "wpck_pistol", "", undefined, 1 ); - add_zombie_weapon( "fivesevendw_zm", "fivesevendw_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVENDW", 50, "wpck_duel", "", undefined, 1 ); - add_zombie_weapon( "m32_zm", "m32_upgraded_zm", &"ZOMBIE_WEAPON_M32", 50, "wpck_crappy", "", undefined, 1 ); - add_zombie_weapon( "beacon_zm", undefined, &"ZOMBIE_WEAPON_BEACON", 2000, "wpck_explo", "", undefined, 1 ); - add_zombie_weapon( "claymore_zm", undefined, &"ZOMBIE_WEAPON_CLAYMORE", 1000, "wpck_explo", "", undefined, 1 ); - add_zombie_weapon( "cymbal_monkey_zm", undefined, &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 ); - add_zombie_weapon( "frag_grenade_zm", undefined, &"ZOMBIE_WEAPON_FRAG_GRENADE", 250, "wpck_explo", "", 250 ); - add_zombie_weapon( "ray_gun_zm", "ray_gun_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN", 10000, "wpck_ray", "", undefined, 1 ); - if ( isDefined( level.raygun2_included ) && level.raygun2_included ) - { - add_zombie_weapon( "raygun_mark2_zm", "raygun_mark2_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN_MARK2", 10000, "wpck_raymk2", "", undefined ); - } - add_zombie_weapon( "sticky_grenade_zm", undefined, &"ZOMBIE_WEAPON_STICKY_GRENADE", 250, "wpck_explo", "", 250 ); - add_zombie_weapon( "staff_air_zm", undefined, &"AIR_STAFF", 50, "wpck_rpg", "", undefined, 1 ); - add_zombie_weapon( "staff_air_upgraded_zm", undefined, &"AIR_STAFF_CHARGED", 50, "wpck_rpg", "", undefined, 1 ); - add_zombie_weapon( "staff_fire_zm", undefined, &"FIRE_STAFF", 50, "wpck_rpg", "", undefined, 1 ); - add_zombie_weapon( "staff_fire_upgraded_zm", undefined, &"FIRE_STAFF_CHARGED", 50, "wpck_rpg", "", undefined, 1 ); - add_zombie_weapon( "staff_lightning_zm", undefined, &"LIGHTNING_STAFF", 50, "wpck_rpg", "", undefined, 1 ); - add_zombie_weapon( "staff_lightning_upgraded_zm", undefined, &"LIGHTNING_STAFF_CHARGED", 50, "wpck_rpg", "", undefined, 1 ); - add_zombie_weapon( "staff_water_zm", undefined, &"WATER_STAFF", 50, "wpck_rpg", "", undefined, 1 ); - add_zombie_weapon( "staff_water_zm_cheap", undefined, &"WATER_STAFF", 50, "wpck_rpg", "", undefined, 1 ); - add_zombie_weapon( "staff_water_upgraded_zm", undefined, &"WATER_STAFF_CHARGED", 50, "wpck_rpg", "", undefined, 1 ); - add_zombie_weapon( "staff_revive_zm", undefined, &"ZM_TOMB_WEAP_STAFF_REVIVE", 50, "wpck_rpg", "", undefined, 1 ); - change_weapon_cost( "mp40_zm", 1300 ); - level.weapons_using_ammo_sharing = 1; - add_shared_ammo_weapon( "ak74u_extclip_zm", "ak74u_zm" ); - add_shared_ammo_weapon( "mp40_stalker_zm", "mp40_zm" ); - add_shared_ammo_weapon( "beretta93r_extclip_zm", "beretta93r_zm" ); -} - -include_weapons() //checked matches cerberus output -{ - include_weapon( "hamr_zm" ); - include_weapon( "hamr_upgraded_zm", 0 ); - include_weapon( "mg08_zm" ); - include_weapon( "mg08_upgraded_zm", 0 ); - include_weapon( "type95_zm" ); - include_weapon( "type95_upgraded_zm", 0 ); - include_weapon( "galil_zm" ); - include_weapon( "galil_upgraded_zm", 0 ); - include_weapon( "fnfal_zm" ); - include_weapon( "fnfal_upgraded_zm", 0 ); - include_weapon( "m14_zm", 0 ); - include_weapon( "m14_upgraded_zm", 0 ); - include_weapon( "mp44_zm", 0 ); - include_weapon( "mp44_upgraded_zm", 0 ); - include_weapon( "scar_zm" ); - include_weapon( "scar_upgraded_zm", 0 ); - include_weapon( "870mcs_zm", 0 ); - include_weapon( "870mcs_upgraded_zm", 0 ); - include_weapon( "ksg_zm" ); - include_weapon( "ksg_upgraded_zm", 0 ); - include_weapon( "srm1216_zm" ); - include_weapon( "srm1216_upgraded_zm", 0 ); - include_weapon( "ak74u_zm", 0 ); - include_weapon( "ak74u_upgraded_zm", 0 ); - include_weapon( "ak74u_extclip_zm" ); - include_weapon( "ak74u_extclip_upgraded_zm", 0 ); - include_weapon( "pdw57_zm" ); - include_weapon( "pdw57_upgraded_zm", 0 ); - include_weapon( "thompson_zm" ); - include_weapon( "thompson_upgraded_zm", 0 ); - include_weapon( "qcw05_zm" ); - include_weapon( "qcw05_upgraded_zm", 0 ); - include_weapon( "mp40_zm", 0 ); - include_weapon( "mp40_upgraded_zm", 0 ); - include_weapon( "mp40_stalker_zm" ); - include_weapon( "mp40_stalker_upgraded_zm", 0 ); - include_weapon( "evoskorpion_zm" ); - include_weapon( "evoskorpion_upgraded_zm", 0 ); - include_weapon( "ballista_zm", 0 ); - include_weapon( "ballista_upgraded_zm", 0 ); - include_weapon( "dsr50_zm" ); - include_weapon( "dsr50_upgraded_zm", 0 ); - include_weapon( "beretta93r_zm", 0 ); - include_weapon( "beretta93r_upgraded_zm", 0 ); - include_weapon( "beretta93r_extclip_zm" ); - include_weapon( "beretta93r_extclip_upgraded_zm", 0 ); - include_weapon( "kard_zm" ); - include_weapon( "kard_upgraded_zm", 0 ); - include_weapon( "fiveseven_zm", 0 ); - include_weapon( "fiveseven_upgraded_zm", 0 ); - include_weapon( "python_zm" ); - include_weapon( "python_upgraded_zm", 0 ); - include_weapon( "c96_zm", 0 ); - include_weapon( "c96_upgraded_zm", 0 ); - include_weapon( "fivesevendw_zm" ); - include_weapon( "fivesevendw_upgraded_zm", 0 ); - include_weapon( "m32_zm" ); - include_weapon( "m32_upgraded_zm", 0 ); - include_weapon( "beacon_zm", 0 ); - include_weapon( "claymore_zm", 0 ); - include_weapon( "cymbal_monkey_zm" ); - include_weapon( "frag_grenade_zm", 0 ); - include_weapon( "knife_zm", 0 ); - include_weapon( "ray_gun_zm" ); - include_weapon( "ray_gun_upgraded_zm", 0 ); - include_weapon( "sticky_grenade_zm", 0 ); - include_weapon( "tomb_shield_zm", 0 ); - add_limited_weapon( "c96_zm", 0 ); - add_limited_weapon( "ray_gun_zm", 4 ); - add_limited_weapon( "ray_gun_upgraded_zm", 4 ); - include_weapon( "staff_air_zm", 0 ); - include_weapon( "staff_air_upgraded_zm", 0 ); - precacheitem( "staff_air_upgraded2_zm" ); - precacheitem( "staff_air_upgraded3_zm" ); - include_weapon( "staff_fire_zm", 0 ); - include_weapon( "staff_fire_upgraded_zm", 0 ); - precacheitem( "staff_fire_upgraded2_zm" ); - precacheitem( "staff_fire_upgraded3_zm" ); - include_weapon( "staff_lightning_zm", 0 ); - include_weapon( "staff_lightning_upgraded_zm", 0 ); - precacheitem( "staff_lightning_upgraded2_zm" ); - precacheitem( "staff_lightning_upgraded3_zm" ); - include_weapon( "staff_water_zm", 0 ); - include_weapon( "staff_water_zm_cheap", 0 ); - include_weapon( "staff_water_upgraded_zm", 0 ); - precacheitem( "staff_water_upgraded2_zm" ); - precacheitem( "staff_water_upgraded3_zm" ); - include_weapon( "staff_revive_zm", 0 ); - add_limited_weapon( "staff_air_zm", 0 ); - add_limited_weapon( "staff_air_upgraded_zm", 0 ); - add_limited_weapon( "staff_fire_zm", 0 ); - add_limited_weapon( "staff_fire_upgraded_zm", 0 ); - add_limited_weapon( "staff_lightning_zm", 0 ); - add_limited_weapon( "staff_lightning_upgraded_zm", 0 ); - add_limited_weapon( "staff_water_zm", 0 ); - add_limited_weapon( "staff_water_zm_cheap", 0 ); - add_limited_weapon( "staff_water_upgraded_zm", 0 ); - if ( isDefined( level.raygun2_included ) && level.raygun2_included ) - { - include_weapon( "raygun_mark2_zm", 1 ); - include_weapon( "raygun_mark2_upgraded_zm", 0 ); - add_weapon_to_content( "raygun_mark2_zm", "dlc3" ); - add_limited_weapon( "raygun_mark2_zm", 1 ); - add_limited_weapon( "raygun_mark2_upgraded_zm", 1 ); - } -} - -include_powerups() //checked matches cerberus output -{ - include_powerup( "nuke" ); - include_powerup( "insta_kill" ); - include_powerup( "double_points" ); - include_powerup( "full_ammo" ); - include_powerup( "fire_sale" ); - include_powerup( "free_perk" ); - include_powerup( "zombie_blood" ); - include_powerup( "bonus_points_player" ); - include_powerup( "bonus_points_team" ); - level.level_specific_init_powerups = ::tomb_powerup_init; - level._zombiemode_powerup_grab = ::tomb_powerup_grab; - /* -/# - setup_powerup_devgui(); -#/ -/# - setup_oneinchpunch_devgui(); -#/ -/# - setup_tablet_devgui(); -#/ - */ -} - -include_perks_in_random_rotation() //checked matches cerberus output -{ - include_perk_in_random_rotation( "specialty_armorvest" ); - include_perk_in_random_rotation( "specialty_quickrevive" ); - include_perk_in_random_rotation( "specialty_fastreload" ); - include_perk_in_random_rotation( "specialty_rof" ); - include_perk_in_random_rotation( "specialty_longersprint" ); - include_perk_in_random_rotation( "specialty_deadshot" ); - include_perk_in_random_rotation( "specialty_additionalprimaryweapon" ); - include_perk_in_random_rotation( "specialty_flakjacket" ); - include_perk_in_random_rotation( "specialty_grenadepulldeath" ); - level.custom_random_perk_weights = ::tomb_random_perk_weights; -} - -tomb_powerup_init() //checked matches cerberus output -{ - maps/mp/zombies/_zm_powerup_zombie_blood::init( "c_zom_tomb_german_player_fb" ); -} - -tomb_powerup_grab( s_powerup, e_player ) //checked matches cerberus output -{ - if ( s_powerup.powerup_name == "zombie_blood" ) - { - level thread maps/mp/zombies/_zm_powerup_zombie_blood::zombie_blood_powerup( s_powerup, e_player ); - } -} - -setup_powerup_devgui() //checked matches cerberus output -{ - /* -/# - setdvar( "zombie_blood", "off" ); - adddebugcommand( "devgui_cmd "Zombies:2/Power Ups:2/Now:1/Drop Zombie Blood:1" "zombie_blood on"\n" ); - level thread watch_devgui_zombie_blood(); -#/ - */ -} - -setup_oneinchpunch_devgui() //checked matches cerberus output -{ - /* -/# - setdvar( "test_oneinchpunch", "off" ); - adddebugcommand( "devgui_cmd "Zombies:2/Tomb:1/OneInchPunch:2/OneInchPunch:1" "test_oneinchpunch on"\n" ); - setdvar( "test_oneinchpunch_upgraded", "off" ); - adddebugcommand( "devgui_cmd "Zombies:2/Tomb:1/OneInchPunch:2/OneInchPunch_Upgraded:1" "test_oneinchpunch_upgraded on"\n" ); - setdvar( "test_oneinchpunch_air", "off" ); - adddebugcommand( "devgui_cmd "Zombies:2/Tomb:1/OneInchPunch:2/OneInchPunch_Air:1" "test_oneinchpunch_air on"\n" ); - setdvar( "test_oneinchpunch_fire", "off" ); - adddebugcommand( "devgui_cmd "Zombies:2/Tomb:1/OneInchPunch:2/OneInchPunch_Fire:1" "test_oneinchpunch_fire on"\n" ); - setdvar( "test_oneinchpunch_ice", "off" ); - adddebugcommand( "devgui_cmd "Zombies:2/Tomb:1/OneInchPunch:2/OneInchPunch_Ice:1" "test_oneinchpunch_ice on"\n" ); - setdvar( "test_oneinchpunch_lightning", "off" ); - adddebugcommand( "devgui_cmd "Zombies:2/Tomb:1/OneInchPunch:2/OneInchPunch_Lightning:1" "test_oneinchpunch_lightning on"\n" ); - level thread watch_devgui_oneinchpunch(); -#/ - */ -} - -watch_devgui_oneinchpunch() //checked matches cerberus output -{ - /* -/# - while ( 1 ) - { - if ( getDvar( "test_oneinchpunch" ) == "on" ) - { - setdvar( "test_oneinchpunch", "off" ); - player = get_players()[ 0 ]; - player thread maps/mp/zombies/_zm_weap_one_inch_punch::one_inch_punch_melee_attack(); - } - else if ( getDvar( "test_oneinchpunch_upgraded" ) == "on" ) - { - setdvar( "test_oneinchpunch_upgraded", "off" ); - player = get_players()[ 0 ]; - player.b_punch_upgraded = 1; - player.str_punch_element = "upgraded"; - player thread maps/mp/zombies/_zm_weap_one_inch_punch::one_inch_punch_melee_attack(); - } - else if ( getDvar( "test_oneinchpunch_air" ) == "on" ) - { - setdvar( "test_oneinchpunch_air", "off" ); - player = get_players()[ 0 ]; - player.b_punch_upgraded = 1; - player.str_punch_element = "air"; - player thread maps/mp/zombies/_zm_weap_one_inch_punch::one_inch_punch_melee_attack(); - } - else if ( getDvar( "test_oneinchpunch_fire" ) == "on" ) - { - setdvar( "test_oneinchpunch_fire", "off" ); - player = get_players()[ 0 ]; - player.b_punch_upgraded = 1; - player.str_punch_element = "fire"; - player thread maps/mp/zombies/_zm_weap_one_inch_punch::one_inch_punch_melee_attack(); - } - else if ( getDvar( "test_oneinchpunch_ice" ) == "on" ) - { - setdvar( "test_oneinchpunch_ice", "off" ); - player = get_players()[ 0 ]; - player.b_punch_upgraded = 1; - player.str_punch_element = "ice"; - player thread maps/mp/zombies/_zm_weap_one_inch_punch::one_inch_punch_melee_attack(); - } - else - { - if ( getDvar( "test_oneinchpunch_lightning" ) == "on" ) - { - setdvar( "test_oneinchpunch_lightning", "off" ); - player = get_players()[ 0 ]; - player.b_punch_upgraded = 1; - player.str_punch_element = "lightning"; - player thread maps/mp/zombies/_zm_weap_one_inch_punch::one_inch_punch_melee_attack(); - } - } - wait 0.1; -#/ - } - */ -} - -setup_tablet_devgui() //checked matches cerberus output -{ - /* -/# - setdvar( "test_player_tablet", "3" ); - adddebugcommand( "devgui_cmd "Zombies:2/Tomb:1/Easter Ann:3/Tablet-None:1" "test_player_tablet 0"\n" ); - adddebugcommand( "devgui_cmd "Zombies:2/Tomb:1/Easter Ann:3/Tablet-Clean:1" "test_player_tablet 1"\n" ); - adddebugcommand( "devgui_cmd "Zombies:2/Tomb:1/Easter Ann:3/Tablet-Dirty:1" "test_player_tablet 2"\n" ); - level thread watch_devgui_tablet(); -#/ - */ -} - -watch_devgui_tablet() //checked matches cerberus output -{ - /* -/# - while ( 1 ) - { - if ( getDvar( "test_player_tablet" ) != "3" ) - { - player = get_players()[ 0 ]; - n_tablet_state = int( getDvar( "test_player_tablet" ) ); - player setclientfieldtoplayer( "player_tablet_state", n_tablet_state ); - setdvar( "test_player_tablet", "3" ); - } - wait 0.1; -#/ - } - */ -} - -watch_devgui_zombie_blood() //checked matches cerberus output -{ - /* -/# - while ( 1 ) - { - if ( getDvar( "zombie_blood" ) == "on" ) - { - setdvar( "zombie_blood", "off" ); - level thread maps/mp/zombies/_zm_devgui::zombie_devgui_give_powerup( "zombie_blood", 1 ); - } - wait 0.1; -#/ - } - */ -} - -watch_devgui_double_points() //checked matches cerberus output -{ - /* -/# - while ( 1 ) - { - if ( getDvar( "double_points" ) == "on" ) - { - setdvar( "double_points", "off" ); - level thread maps/mp/zombies/_zm_devgui::zombie_devgui_give_powerup( "double_points", 1 ); - iprintlnbold( "change" ); - } - wait 0.1; -#/ - } - */ -} - -setup_rex_starts() //checked matches cerberus output -{ - add_gametype( "zclassic", ::dummy, "zclassic", ::dummy ); - add_gameloc( "tomb", ::dummy, "tomb", ::dummy ); -} - -dummy() //checked matches cerberus output -{ -} - -working_zone_init() //checked matches cerberus output -{ - flag_init( "always_on" ); - flag_set( "always_on" ); - add_adjacent_zone( "zone_robot_head", "zone_robot_head", "always_on" ); - add_adjacent_zone( "zone_start", "zone_start_a", "always_on" ); - add_adjacent_zone( "zone_start", "zone_start_b", "always_on" ); - add_adjacent_zone( "zone_start_a", "zone_start_b", "always_on" ); - add_adjacent_zone( "zone_start_a", "zone_bunker_1a", "activate_zone_bunker_1" ); - add_adjacent_zone( "zone_bunker_1a", "zone_bunker_1", "activate_zone_bunker_1" ); - add_adjacent_zone( "zone_bunker_1a", "zone_bunker_1", "activate_zone_bunker_3a" ); - add_adjacent_zone( "zone_bunker_1", "zone_bunker_3a", "activate_zone_bunker_3a" ); - add_adjacent_zone( "zone_bunker_3a", "zone_bunker_3b", "activate_zone_bunker_3a" ); - add_adjacent_zone( "zone_bunker_3a", "zone_bunker_3b", "activate_zone_bunker_3b" ); - add_adjacent_zone( "zone_bunker_3b", "zone_bunker_5a", "activate_zone_bunker_3b" ); - add_adjacent_zone( "zone_bunker_5a", "zone_bunker_5b", "activate_zone_bunker_3b" ); - add_adjacent_zone( "zone_start_b", "zone_bunker_2a", "activate_zone_bunker_2" ); - add_adjacent_zone( "zone_bunker_2a", "zone_bunker_2", "activate_zone_bunker_2" ); - add_adjacent_zone( "zone_bunker_2a", "zone_bunker_2", "activate_zone_bunker_4a" ); - add_adjacent_zone( "zone_bunker_2", "zone_bunker_4a", "activate_zone_bunker_4a" ); - add_adjacent_zone( "zone_bunker_4a", "zone_bunker_4b", "activate_zone_bunker_4a" ); - add_adjacent_zone( "zone_bunker_4a", "zone_bunker_4c", "activate_zone_bunker_4a" ); - add_adjacent_zone( "zone_bunker_4b", "zone_bunker_4f", "activate_zone_bunker_4a" ); - add_adjacent_zone( "zone_bunker_4c", "zone_bunker_4d", "activate_zone_bunker_4a" ); - add_adjacent_zone( "zone_bunker_4c", "zone_bunker_4e", "activate_zone_bunker_4a" ); - add_adjacent_zone( "zone_bunker_4e", "zone_bunker_tank_c1", "activate_zone_bunker_4a" ); - add_adjacent_zone( "zone_bunker_4e", "zone_bunker_tank_d", "activate_zone_bunker_4a" ); - add_adjacent_zone( "zone_bunker_tank_c", "zone_bunker_tank_c1", "activate_zone_bunker_4a" ); - add_adjacent_zone( "zone_bunker_tank_d", "zone_bunker_tank_d1", "activate_zone_bunker_4a" ); - add_adjacent_zone( "zone_bunker_4a", "zone_bunker_4b", "activate_zone_bunker_4b" ); - add_adjacent_zone( "zone_bunker_4a", "zone_bunker_4c", "activate_zone_bunker_4b" ); - add_adjacent_zone( "zone_bunker_4b", "zone_bunker_4f", "activate_zone_bunker_4b" ); - add_adjacent_zone( "zone_bunker_4c", "zone_bunker_4d", "activate_zone_bunker_4b" ); - add_adjacent_zone( "zone_bunker_4c", "zone_bunker_4e", "activate_zone_bunker_4b" ); - add_adjacent_zone( "zone_bunker_4b", "zone_bunker_5a", "activate_zone_bunker_4b" ); - add_adjacent_zone( "zone_bunker_5a", "zone_bunker_5b", "activate_zone_bunker_4b" ); - add_adjacent_zone( "zone_bunker_4e", "zone_bunker_tank_c1", "activate_zone_bunker_4b" ); - add_adjacent_zone( "zone_bunker_4e", "zone_bunker_tank_d", "activate_zone_bunker_4b" ); - add_adjacent_zone( "zone_bunker_tank_c", "zone_bunker_tank_c1", "activate_zone_bunker_4b" ); - add_adjacent_zone( "zone_bunker_tank_d", "zone_bunker_tank_d1", "activate_zone_bunker_4b" ); - add_adjacent_zone( "zone_bunker_tank_a", "zone_nml_7", "activate_zone_nml" ); - add_adjacent_zone( "zone_bunker_tank_a", "zone_nml_7a", "activate_zone_nml" ); - add_adjacent_zone( "zone_bunker_tank_a", "zone_bunker_tank_a1", "activate_zone_nml" ); - add_adjacent_zone( "zone_bunker_tank_a1", "zone_bunker_tank_a2", "activate_zone_nml" ); - add_adjacent_zone( "zone_bunker_tank_a1", "zone_bunker_tank_b", "activate_zone_nml" ); - add_adjacent_zone( "zone_bunker_tank_b", "zone_bunker_tank_c", "activate_zone_nml" ); - add_adjacent_zone( "zone_bunker_tank_c", "zone_bunker_tank_c1", "activate_zone_nml" ); - add_adjacent_zone( "zone_bunker_tank_d", "zone_bunker_tank_d1", "activate_zone_nml" ); - add_adjacent_zone( "zone_bunker_tank_d1", "zone_bunker_tank_e", "activate_zone_nml" ); - add_adjacent_zone( "zone_bunker_tank_e", "zone_bunker_tank_e1", "activate_zone_nml" ); - add_adjacent_zone( "zone_bunker_tank_e1", "zone_bunker_tank_e2", "activate_zone_nml" ); - add_adjacent_zone( "zone_bunker_tank_e1", "zone_bunker_tank_f", "activate_zone_nml" ); - add_adjacent_zone( "zone_bunker_tank_f", "zone_nml_1", "activate_zone_nml" ); - add_adjacent_zone( "zone_bunker_5b", "zone_nml_2a", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_0", "zone_nml_1", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_0", "zone_nml_farm", "activate_zone_farm" ); - add_adjacent_zone( "zone_nml_1", "zone_nml_2", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_1", "zone_nml_4", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_1", "zone_nml_20", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_2", "zone_nml_2a", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_2", "zone_nml_2b", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_2", "zone_nml_3", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_3", "zone_nml_4", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_3", "zone_nml_13", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_4", "zone_nml_5", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_4", "zone_nml_13", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_5", "zone_nml_farm", "activate_zone_farm" ); - add_adjacent_zone( "zone_nml_6", "zone_nml_2b", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_6", "zone_nml_7", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_6", "zone_nml_7a", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_6", "zone_nml_8", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_7", "zone_nml_7a", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_7", "zone_nml_9", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_7", "zone_nml_10", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_8", "zone_nml_10a", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_8", "zone_nml_14", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_8", "zone_nml_16", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_9", "zone_nml_7a", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_9", "zone_nml_9a", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_9", "zone_nml_11", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_10", "zone_nml_10a", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_10", "zone_nml_11", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_10a", "zone_nml_12", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_10a", "zone_village_4", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_11", "zone_nml_9a", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_11", "zone_nml_11a", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_11", "zone_nml_12", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_12", "zone_nml_11a", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_12", "zone_nml_12a", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_13", "zone_nml_15", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_14", "zone_nml_15", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_15", "zone_nml_17", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_15a", "zone_nml_14", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_15a", "zone_nml_15", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_16", "zone_nml_2b", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_16", "zone_nml_16a", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_16", "zone_nml_18", "activate_zone_ruins" ); - add_adjacent_zone( "zone_nml_17", "zone_nml_17a", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_17", "zone_nml_18", "activate_zone_ruins" ); - add_adjacent_zone( "zone_nml_18", "zone_nml_19", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_farm", "zone_nml_celllar", "activate_zone_farm" ); - add_adjacent_zone( "zone_nml_farm", "zone_nml_farm_1", "activate_zone_farm" ); - add_adjacent_zone( "zone_nml_19", "ug_bottom_zone", "activate_zone_crypt" ); - add_adjacent_zone( "zone_village_0", "zone_nml_15", "activate_zone_village_0" ); - add_adjacent_zone( "zone_village_0", "zone_village_4b", "activate_zone_village_0" ); - add_adjacent_zone( "zone_village_1", "zone_village_1a", "activate_zone_village_0" ); - add_adjacent_zone( "zone_village_1", "zone_village_2", "activate_zone_village_1" ); - add_adjacent_zone( "zone_village_1", "zone_village_4b", "activate_zone_village_0" ); - add_adjacent_zone( "zone_village_1", "zone_village_5b", "activate_zone_village_0" ); - add_adjacent_zone( "zone_village_2", "zone_village_3", "activate_zone_village_1" ); - add_adjacent_zone( "zone_village_3", "zone_village_3a", "activate_zone_village_1" ); - add_adjacent_zone( "zone_village_3", "zone_ice_stairs", "activate_zone_village_1" ); - add_adjacent_zone( "zone_ice_stairs", "zone_ice_stairs_1", "activate_zone_village_1" ); - add_adjacent_zone( "zone_village_3a", "zone_village_3b", "activate_zone_village_1" ); - add_adjacent_zone( "zone_village_4", "zone_nml_14", "activate_zone_village_0" ); - add_adjacent_zone( "zone_village_4", "zone_village_4a", "activate_zone_village_0" ); - add_adjacent_zone( "zone_village_4", "zone_village_4b", "activate_zone_village_0" ); - add_adjacent_zone( "zone_village_5", "zone_nml_4", "activate_zone_village_0" ); - add_adjacent_zone( "zone_village_5", "zone_village_5a", "activate_zone_village_0" ); - add_adjacent_zone( "zone_village_5a", "zone_village_5b", "activate_zone_village_0" ); - add_adjacent_zone( "zone_village_6", "zone_village_5b", "activate_zone_village_0" ); - add_adjacent_zone( "zone_village_6", "zone_village_6a", "activate_zone_village_0" ); - add_adjacent_zone( "zone_chamber_0", "zone_chamber_1", "activate_zone_chamber" ); - add_adjacent_zone( "zone_chamber_0", "zone_chamber_3", "activate_zone_chamber" ); - add_adjacent_zone( "zone_chamber_0", "zone_chamber_4", "activate_zone_chamber" ); - add_adjacent_zone( "zone_chamber_1", "zone_chamber_2", "activate_zone_chamber" ); - add_adjacent_zone( "zone_chamber_1", "zone_chamber_3", "activate_zone_chamber" ); - add_adjacent_zone( "zone_chamber_1", "zone_chamber_4", "activate_zone_chamber" ); - add_adjacent_zone( "zone_chamber_1", "zone_chamber_5", "activate_zone_chamber" ); - add_adjacent_zone( "zone_chamber_2", "zone_chamber_4", "activate_zone_chamber" ); - add_adjacent_zone( "zone_chamber_2", "zone_chamber_5", "activate_zone_chamber" ); - add_adjacent_zone( "zone_chamber_3", "zone_chamber_4", "activate_zone_chamber" ); - add_adjacent_zone( "zone_chamber_3", "zone_chamber_6", "activate_zone_chamber" ); - add_adjacent_zone( "zone_chamber_3", "zone_chamber_7", "activate_zone_chamber" ); - add_adjacent_zone( "zone_chamber_4", "zone_chamber_5", "activate_zone_chamber" ); - add_adjacent_zone( "zone_chamber_4", "zone_chamber_6", "activate_zone_chamber" ); - add_adjacent_zone( "zone_chamber_4", "zone_chamber_7", "activate_zone_chamber" ); - add_adjacent_zone( "zone_chamber_4", "zone_chamber_8", "activate_zone_chamber" ); - add_adjacent_zone( "zone_chamber_5", "zone_chamber_7", "activate_zone_chamber" ); - add_adjacent_zone( "zone_chamber_5", "zone_chamber_8", "activate_zone_chamber" ); - add_adjacent_zone( "zone_chamber_6", "zone_chamber_7", "activate_zone_chamber" ); - add_adjacent_zone( "zone_chamber_7", "zone_chamber_8", "activate_zone_chamber" ); - add_adjacent_zone( "zone_bunker_1", "zone_bunker_1a", "activate_zone_bunker_1_tank" ); - add_adjacent_zone( "zone_bunker_1a", "zone_fire_stairs", "activate_zone_bunker_1_tank" ); - add_adjacent_zone( "zone_fire_stairs", "zone_fire_stairs_1", "activate_zone_bunker_1_tank" ); - add_adjacent_zone( "zone_bunker_2", "zone_bunker_2a", "activate_zone_bunker_2_tank" ); - add_adjacent_zone( "zone_bunker_4a", "zone_bunker_4b", "activate_zone_bunker_4_tank" ); - add_adjacent_zone( "zone_bunker_4a", "zone_bunker_4c", "activate_zone_bunker_4_tank" ); - add_adjacent_zone( "zone_bunker_4c", "zone_bunker_4d", "activate_zone_bunker_4_tank" ); - add_adjacent_zone( "zone_bunker_4c", "zone_bunker_4e", "activate_zone_bunker_4_tank" ); - add_adjacent_zone( "zone_bunker_4e", "zone_bunker_tank_c1", "activate_zone_bunker_4_tank" ); - add_adjacent_zone( "zone_bunker_4e", "zone_bunker_tank_d", "activate_zone_bunker_4_tank" ); - add_adjacent_zone( "zone_bunker_tank_c", "zone_bunker_tank_c1", "activate_zone_bunker_4_tank" ); - add_adjacent_zone( "zone_bunker_tank_d", "zone_bunker_tank_d1", "activate_zone_bunker_4_tank" ); - add_adjacent_zone( "zone_bunker_tank_b", "zone_bunker_6", "activate_zone_bunker_6_tank" ); - add_adjacent_zone( "zone_bunker_1", "zone_bunker_6", "activate_zone_bunker_6_tank" ); - level thread activate_zone_trig( "trig_zone_bunker_1", "activate_zone_bunker_1_tank" ); - level thread activate_zone_trig( "trig_zone_bunker_2", "activate_zone_bunker_2_tank" ); - level thread activate_zone_trig( "trig_zone_bunker_4", "activate_zone_bunker_4_tank" ); - level thread activate_zone_trig( "trig_zone_bunker_6", "activate_zone_bunker_6_tank", "activate_zone_bunker_1_tank" ); - add_adjacent_zone( "zone_bunker_1a", "zone_fire_stairs", "activate_zone_bunker_1" ); - add_adjacent_zone( "zone_fire_stairs", "zone_fire_stairs_1", "activate_zone_bunker_1" ); - add_adjacent_zone( "zone_bunker_1a", "zone_fire_stairs", "activate_zone_bunker_3a" ); - add_adjacent_zone( "zone_fire_stairs", "zone_fire_stairs_1", "activate_zone_bunker_3a" ); - add_adjacent_zone( "zone_nml_9", "zone_air_stairs", "activate_zone_nml" ); - add_adjacent_zone( "zone_air_stairs", "zone_air_stairs_1", "activate_zone_nml" ); - add_adjacent_zone( "zone_nml_celllar", "zone_bolt_stairs", "activate_zone_farm" ); - add_adjacent_zone( "zone_bolt_stairs", "zone_bolt_stairs_1", "activate_zone_farm" ); -} - -activate_zone_trig( str_name, str_zone1, str_zone2 ) //checked matches cerberus output -{ - trig = getent( str_name, "targetname" ); - trig waittill( "trigger" ); - if ( isDefined( str_zone1 ) ) - { - flag_set( str_zone1 ); - } - if ( isDefined( str_zone2 ) ) - { - flag_set( str_zone2 ); - } - trig delete(); -} - -check_tank_platform_zone() //checked changed to match cerberus output -{ - while ( 1 ) - { - level waittill( "newzoneActive", activezone ); - if ( activezone == "zone_bunker_3" ) - { - break; - } - wait 1; - } - flag_set( "activate_zone_nml" ); -} - -tomb_vehicle_damage_override_wrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname ) //checked matches cerberus output -{ - if ( isDefined( level.a_func_vehicle_damage_override[ self.vehicletype ] ) ) - { - return level.a_func_vehicle_damage_override[ self.vehicletype ]; - } - return idamage; -} - -drop_all_barriers() //checked changed to match cerberus output -{ - zkeys = getarraykeys( level.zones ); - for ( z = 0; z < level.zones.size; z++ ) - { - zbarriers = get_all_zone_zbarriers( zkeys[ z ] ); - if ( !isDefined( zbarriers ) ) - { - break; - } - else - { - foreach ( zbarrier in zbarriers ) - { - zbarrier_pieces = zbarrier getnumzbarrierpieces(); - for ( i = 0; i < zbarrier_pieces; i++ ) - { - zbarrier hidezbarrierpiece( i ); - zbarrier setzbarrierpiecestate( i, "open" ); - } - wait 0.05; - } - } - } -} - -get_all_zone_zbarriers( zone_name ) //checked matches cerberus output -{ - if ( !isDefined( zone_name ) ) - { - return undefined; - } - zone = level.zones[ zone_name ]; - return zone.zbarriers; -} - -tomb_special_weapon_magicbox_check( weapon ) //checked matches cerberus output -{ - if ( isDefined( level.raygun2_included ) && level.raygun2_included ) - { - if ( weapon == "ray_gun_zm" ) - { - if ( self has_weapon_or_upgrade( "raygun_mark2_zm" ) ) - { - return 0; - } - } - if ( weapon == "raygun_mark2_zm" ) - { - if ( self has_weapon_or_upgrade( "ray_gun_zm" ) ) - { - return 0; - } - if ( randomint( 100 ) >= 33 ) - { - return 0; - } - } - } - if ( weapon == "beacon_zm" ) - { - if ( isDefined( self.beacon_ready ) && self.beacon_ready ) - { - return 1; - } - else - { - return 0; - } - } - if ( isDefined( level.zombie_weapons[ weapon ].shared_ammo_weapon ) ) - { - if ( self has_weapon_or_upgrade( level.zombie_weapons[ weapon ].shared_ammo_weapon ) ) - { - return 0; - } - } - return 1; -} - -custom_vending_precaching() //checked changed to match cerberus output -{ - if ( level._custom_perks.size > 0 ) - { - a_keys = getarraykeys( level._custom_perks ); - for ( i = 0; i < a_keys.size; i++ ) - { - if ( isDefined( level._custom_perks[ a_keys[ i ] ].precache_func ) ) - { - level [[ level._custom_perks[ a_keys[ i ] ].precache_func ]](); - } - } - } - if ( isDefined( level.zombiemode_using_pack_a_punch ) && level.zombiemode_using_pack_a_punch ) - { - precacheitem( "zombie_knuckle_crack" ); - precachemodel( "p6_anim_zm_buildable_pap" ); - precachemodel( "p6_anim_zm_buildable_pap_on" ); - precachestring( &"ZOMBIE_PERK_PACKAPUNCH" ); - precachestring( &"ZOMBIE_PERK_PACKAPUNCH_ATT" ); - level._effect[ "packapunch_fx" ] = loadfx( "maps/zombie/fx_zombie_packapunch" ); - level.machine_assets[ "packapunch" ] = spawnstruct(); - level.machine_assets[ "packapunch" ].weapon = "zombie_knuckle_crack"; - } - if ( isDefined( level.zombiemode_using_additionalprimaryweapon_perk ) && level.zombiemode_using_additionalprimaryweapon_perk ) - { - precacheitem( "zombie_perk_bottle_additionalprimaryweapon" ); - precacheshader( "specialty_additionalprimaryweapon_zombies" ); - precachemodel( "p6_zm_tm_vending_three_gun" ); - precachestring( &"ZOMBIE_PERK_ADDITIONALWEAPONPERK" ); - level._effect[ "additionalprimaryweapon_light" ] = loadfx( "misc/fx_zombie_cola_arsenal_on" ); - level.machine_assets[ "additionalprimaryweapon" ] = spawnstruct(); - level.machine_assets[ "additionalprimaryweapon" ].weapon = "zombie_perk_bottle_additionalprimaryweapon"; - level.machine_assets[ "additionalprimaryweapon" ].off_model = "p6_zm_tm_vending_three_gun"; - level.machine_assets[ "additionalprimaryweapon" ].on_model = "p6_zm_tm_vending_three_gun"; - level.machine_assets[ "additionalprimaryweapon" ].power_on_callback = maps/mp/zm_tomb_capture_zones::custom_vending_power_on; - level.machine_assets[ "additionalprimaryweapon" ].power_off_callback = maps/mp/zm_tomb_capture_zones::custom_vending_power_off; - } - if ( isDefined( level.zombiemode_using_deadshot_perk ) && level.zombiemode_using_deadshot_perk ) - { - precacheitem( "zombie_perk_bottle_deadshot" ); - precacheshader( "specialty_ads_zombies" ); - precachemodel( "zombie_vending_ads" ); - precachemodel( "zombie_vending_ads_on" ); - precachestring( &"ZOMBIE_PERK_DEADSHOT" ); - level._effect[ "deadshot_light" ] = loadfx( "misc/fx_zombie_cola_dtap_on" ); - level.machine_assets[ "deadshot" ] = spawnstruct(); - level.machine_assets[ "deadshot" ].weapon = "zombie_perk_bottle_deadshot"; - level.machine_assets[ "deadshot" ].off_model = "zombie_vending_ads"; - level.machine_assets[ "deadshot" ].on_model = "zombie_vending_ads_on"; - level.machine_assets[ "deadshot" ].power_on_callback = maps/mp/zm_tomb_capture_zones::custom_vending_power_on; - level.machine_assets[ "deadshot" ].power_off_callback = maps/mp/zm_tomb_capture_zones::custom_vending_power_off; - } - if ( isDefined( level.zombiemode_using_divetonuke_perk ) && level.zombiemode_using_divetonuke_perk ) - { - precacheitem( "zombie_perk_bottle_nuke" ); - precacheshader( "specialty_divetonuke_zombies" ); - precachemodel( "zombie_vending_nuke" ); - precachemodel( "zombie_vending_nuke_on" ); - precachestring( &"ZOMBIE_PERK_DIVETONUKE" ); - level._effect[ "divetonuke_light" ] = loadfx( "misc/fx_zombie_cola_dtap_on" ); - level.machine_assets[ "divetonuke" ] = spawnstruct(); - level.machine_assets[ "divetonuke" ].weapon = "zombie_perk_bottle_nuke"; - level.machine_assets[ "divetonuke" ].off_model = "zombie_vending_nuke"; - level.machine_assets[ "divetonuke" ].on_model = "zombie_vending_nuke_on"; - level.machine_assets[ "divetonuke" ].power_on_callback = maps/mp/zm_tomb_capture_zones::custom_vending_power_on; - level.machine_assets[ "divetonuke" ].power_off_callback = maps/mp/zm_tomb_capture_zones::custom_vending_power_off; - } - if ( isDefined( level.zombiemode_using_doubletap_perk ) && level.zombiemode_using_doubletap_perk ) - { - precacheitem( "zombie_perk_bottle_doubletap" ); - precacheshader( "specialty_doubletap_zombies" ); - precachemodel( "zombie_vending_doubletap2" ); - precachemodel( "zombie_vending_doubletap2_on" ); - precachestring( &"ZOMBIE_PERK_DOUBLETAP" ); - level._effect[ "doubletap_light" ] = loadfx( "misc/fx_zombie_cola_dtap_on" ); - level.machine_assets[ "doubletap" ] = spawnstruct(); - level.machine_assets[ "doubletap" ].weapon = "zombie_perk_bottle_doubletap"; - level.machine_assets[ "doubletap" ].off_model = "zombie_vending_doubletap2"; - level.machine_assets[ "doubletap" ].on_model = "zombie_vending_doubletap2_on"; - level.machine_assets[ "doubletap" ].power_on_callback = maps/mp/zm_tomb_capture_zones::custom_vending_power_on; - level.machine_assets[ "doubletap" ].power_off_callback = maps/mp/zm_tomb_capture_zones::custom_vending_power_off; - } - if ( isDefined( level.zombiemode_using_juggernaut_perk ) && level.zombiemode_using_juggernaut_perk ) - { - precacheitem( "zombie_perk_bottle_jugg" ); - precacheshader( "specialty_juggernaut_zombies" ); - precachemodel( "zombie_vending_jugg" ); - precachemodel( "zombie_vending_jugg_on" ); - precachestring( &"ZOMBIE_PERK_JUGGERNAUT" ); - level._effect[ "jugger_light" ] = loadfx( "misc/fx_zombie_cola_jugg_on" ); - level.machine_assets[ "juggernog" ] = spawnstruct(); - level.machine_assets[ "juggernog" ].weapon = "zombie_perk_bottle_jugg"; - level.machine_assets[ "juggernog" ].off_model = "zombie_vending_jugg"; - level.machine_assets[ "juggernog" ].on_model = "zombie_vending_jugg_on"; - level.machine_assets[ "juggernog" ].power_on_callback = maps/mp/zm_tomb_capture_zones::custom_vending_power_on; - level.machine_assets[ "juggernog" ].power_off_callback = maps/mp/zm_tomb_capture_zones::custom_vending_power_off; - } - if ( isDefined( level.zombiemode_using_marathon_perk ) && level.zombiemode_using_marathon_perk ) - { - precacheitem( "zombie_perk_bottle_marathon" ); - precacheshader( "specialty_marathon_zombies" ); - precachemodel( "zombie_vending_marathon" ); - precachemodel( "zombie_vending_marathon_on" ); - precachestring( &"ZOMBIE_PERK_MARATHON" ); - level._effect[ "marathon_light" ] = loadfx( "maps/zombie/fx_zmb_cola_staminup_on" ); - level.machine_assets[ "marathon" ] = spawnstruct(); - level.machine_assets[ "marathon" ].weapon = "zombie_perk_bottle_marathon"; - level.machine_assets[ "marathon" ].off_model = "zombie_vending_marathon"; - level.machine_assets[ "marathon" ].on_model = "zombie_vending_marathon_on"; - level.machine_assets[ "marathon" ].power_on_callback = maps/mp/zm_tomb_capture_zones::custom_vending_power_on; - level.machine_assets[ "marathon" ].power_off_callback = maps/mp/zm_tomb_capture_zones::custom_vending_power_off; - } - if ( isDefined( level.zombiemode_using_revive_perk ) && level.zombiemode_using_revive_perk ) - { - precacheitem( "zombie_perk_bottle_revive" ); - precacheshader( "specialty_quickrevive_zombies" ); - precachemodel( "p6_zm_tm_vending_revive" ); - precachemodel( "p6_zm_tm_vending_revive_on" ); - precachestring( &"ZOMBIE_PERK_QUICKREVIVE" ); - level._effect[ "revive_light" ] = loadfx( "misc/fx_zombie_cola_revive_on" ); - level._effect[ "revive_light_flicker" ] = loadfx( "maps/zombie/fx_zmb_cola_revive_flicker" ); - level.machine_assets[ "revive" ] = spawnstruct(); - level.machine_assets[ "revive" ].weapon = "zombie_perk_bottle_revive"; - level.machine_assets[ "revive" ].off_model = "p6_zm_tm_vending_revive"; - level.machine_assets[ "revive" ].on_model = "p6_zm_tm_vending_revive_on"; - level.machine_assets[ "revive" ].power_on_callback = maps/mp/zm_tomb_capture_zones::custom_vending_power_on; - level.machine_assets[ "revive" ].power_off_callback = maps/mp/zm_tomb_capture_zones::custom_vending_power_off; - } - if ( isDefined( level.zombiemode_using_sleightofhand_perk ) && level.zombiemode_using_sleightofhand_perk ) - { - precacheitem( "zombie_perk_bottle_sleight" ); - precacheshader( "specialty_fastreload_zombies" ); - precachemodel( "zombie_vending_sleight" ); - precachemodel( "zombie_vending_sleight_on" ); - precachestring( &"ZOMBIE_PERK_FASTRELOAD" ); - level._effect[ "sleight_light" ] = loadfx( "misc/fx_zombie_cola_on" ); - level.machine_assets[ "speedcola" ] = spawnstruct(); - level.machine_assets[ "speedcola" ].weapon = "zombie_perk_bottle_sleight"; - level.machine_assets[ "speedcola" ].off_model = "zombie_vending_sleight"; - level.machine_assets[ "speedcola" ].on_model = "zombie_vending_sleight_on"; - level.machine_assets[ "speedcola" ].power_on_callback = maps/mp/zm_tomb_capture_zones::custom_vending_power_on; - level.machine_assets[ "speedcola" ].power_off_callback = maps/mp/zm_tomb_capture_zones::custom_vending_power_off; - } - if ( isDefined( level.zombiemode_using_tombstone_perk ) && level.zombiemode_using_tombstone_perk ) - { - precacheitem( "zombie_perk_bottle_tombstone" ); - precacheshader( "specialty_tombstone_zombies" ); - precachemodel( "zombie_vending_tombstone" ); - precachemodel( "zombie_vending_tombstone_on" ); - precachemodel( "ch_tombstone1" ); - precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); - level._effect[ "tombstone_light" ] = loadfx( "misc/fx_zombie_cola_on" ); - level.machine_assets[ "tombstone" ] = spawnstruct(); - level.machine_assets[ "tombstone" ].weapon = "zombie_perk_bottle_tombstone"; - level.machine_assets[ "tombstone" ].off_model = "zombie_vending_tombstone"; - level.machine_assets[ "tombstone" ].on_model = "zombie_vending_tombstone_on"; - level.machine_assets[ "tombstone" ].power_on_callback = maps/mp/zm_tomb_capture_zones::custom_vending_power_on; - level.machine_assets[ "tombstone" ].power_off_callback = maps/mp/zm_tomb_capture_zones::custom_vending_power_off; - } - if ( isDefined( level.zombiemode_using_chugabud_perk ) && level.zombiemode_using_chugabud_perk ) - { - precacheitem( "zombie_perk_bottle_whoswho" ); - precacheshader( "specialty_quickrevive_zombies" ); - precachemodel( "p6_zm_vending_chugabud" ); - precachemodel( "p6_zm_vending_chugabud_on" ); - precachemodel( "ch_tombstone1" ); - precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); - level._effect[ "tombstone_light" ] = loadfx( "misc/fx_zombie_cola_on" ); - level.machine_assets[ "whoswho" ] = spawnstruct(); - level.machine_assets[ "whoswho" ].weapon = "zombie_perk_bottle_whoswho"; - level.machine_assets[ "whoswho" ].off_model = "p6_zm_vending_chugabud"; - level.machine_assets[ "whoswho" ].on_model = "p6_zm_vending_chugabud_on"; - level.machine_assets[ "whoswho" ].power_on_callback = maps/mp/zm_tomb_capture_zones::custom_vending_power_on; - level.machine_assets[ "whoswho" ].power_off_callback = maps/mp/zm_tomb_capture_zones::custom_vending_power_off; - } -} - -tomb_actor_damage_override_wrapper( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) //checked matches cerberus output -{ - if ( isDefined( self.b_zombie_blood_damage_only ) && self.b_zombie_blood_damage_only ) - { - if ( !isplayer( attacker ) || !attacker.zombie_vars[ "zombie_powerup_zombie_blood_on" ] ) - { - return 0; - } - } - if ( isDefined( self.script_noteworthy ) && self.script_noteworthy == "capture_zombie" && isDefined( attacker ) && isplayer( attacker ) ) - { - if ( damage >= self.health ) - { - if ( ( 100 * level.round_number ) > attacker.n_capture_zombie_points ) - { - attacker maps/mp/zombies/_zm_score::player_add_points( "rebuild_board", 10 ); - attacker.n_capture_zombie_points += 10; - } - } - } - return_val = self maps/mp/zombies/_zm::actor_damage_override_wrapper( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - if ( damage >= self.health ) - { - if ( weapon == "zombie_markiv_cannon" && meansofdeath == "MOD_CRUSH" ) - { - self thread zombie_gib_guts(); - } - else if ( isDefined( self.b_on_tank ) && self.b_on_tank || isDefined( self.b_climbing_tank ) && self.b_climbing_tank ) - { - self maps/mp/zm_tomb_tank::zombie_on_tank_death_animscript_callback( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - } - } - return return_val; -} - -tomb_zombie_death_event_callback() //checked changed at own discretion -{ - if ( isDefined( self ) && isDefined( self.damagelocation ) && isDefined( self.damagemod ) && isDefined( self.damageweapon ) && isDefined( self.attacker ) && isplayer( self.attacker ) ) - { - if ( is_headshot( self.damageweapon, self.damagelocation, self.damagemod ) && maps/mp/zombies/_zm_challenges::challenge_exists( "zc_headshots" ) && !isDefined( self.script_noteworthy ) && isDefined( "capture_zombie" ) ) - { - self.attacker maps/mp/zombies/_zm_challenges::increment_stat( "zc_headshots" ); - } - else if ( is_headshot( self.damageweapon, self.damagelocation, self.damagemod ) && maps/mp/zombies/_zm_challenges::challenge_exists( "zc_headshots" ) && isDefined( self.script_noteworthy ) && isDefined( "capture_zombie" ) && self.script_noteworthy != "capture_zombie" ) - { - self.attacker maps/mp/zombies/_zm_challenges::increment_stat( "zc_headshots" ); - } - } -} - -zombie_init_done() //checked matches cerberus output -{ - self.allowpain = 0; - self thread maps/mp/zm_tomb_distance_tracking::escaped_zombies_cleanup_init(); -} - -tomb_validate_enemy_path_length( player ) //checked matches cerberus output -{ - max_dist = 1296; - d = distancesquared( self.origin, player.origin ); - if ( d <= max_dist ) - { - return 1; - } - return 0; -} - -show_zombie_count() //checked matches cerberus output -{ - self endon( "death_or_disconnect" ); - flag_wait( "start_zombie_round_logic" ); - while ( 1 ) - { - n_round_zombies = get_current_zombie_count(); - str_hint = "Alive: " + n_round_zombies + "\nTo Spawn: " + level.zombie_total; - iprintln( str_hint ); - wait 5; - } -} - -tomb_custom_divetonuke_explode( attacker, origin ) //checked matches cerberus output -{ - radius = level.zombie_vars[ "zombie_perk_divetonuke_radius" ]; - min_damage = level.zombie_vars[ "zombie_perk_divetonuke_min_damage" ]; - max_damage = level.zombie_vars[ "zombie_perk_divetonuke_max_damage" ]; - if ( isDefined( level.flopper_network_optimized ) && level.flopper_network_optimized ) - { - attacker thread tomb_custom_divetonuke_explode_network_optimized( origin, radius, max_damage, min_damage, "MOD_GRENADE_SPLASH" ); - } - else - { - radiusdamage( origin, radius, max_damage, min_damage, attacker, "MOD_GRENADE_SPLASH" ); - } - playfx( level._effect[ "divetonuke_groundhit" ], origin ); - attacker playsound( "zmb_phdflop_explo" ); - maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker ); - wait 1; - maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker ); -} - -tomb_custom_divetonuke_explode_network_optimized( origin, radius, max_damage, min_damage, damage_mod ) //checked partially changed to match cerberus output see info.md -{ - self endon( "disconnect" ); - a_all_zombies = getaispeciesarray( "axis", "all" ); - a_zombies = get_array_of_closest( origin, a_all_zombies, undefined, undefined, radius ); - network_stall_counter = 0; - if ( isDefined( a_zombies ) ) - { - i = 0; - while ( i < a_zombies.size ) - { - e_zombie = a_zombies[ i ]; - if ( !isDefined( e_zombie ) || !isalive( e_zombie ) ) - { - i++; - continue; - } - dist = distance( e_zombie.origin, origin ); - damage = min_damage + ( ( max_damage - min_damage ) * ( 1 - ( dist / radius ) ) ); - e_zombie dodamage( damage, e_zombie.origin, self, self, 0, damage_mod ); - network_stall_counter--; - - if ( network_stall_counter <= 0 ) - { - wait_network_frame(); - network_stall_counter = randomintrange( 1, 3 ); - } - i++; - } - } -} - -tomb_custom_electric_cherry_laststand() //checked changed to match cerberus output -{ - visionsetlaststand( "zombie_last_stand", 1 ); - if ( isDefined( self ) ) - { - playfx( level._effect[ "electric_cherry_explode" ], self.origin ); - self playsound( "zmb_cherry_explode" ); - self notify( "electric_cherry_start" ); - wait 0.05; - a_zombies = getaispeciesarray( "axis", "all" ); - a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, 500 ); - for ( i = 0; i < a_zombies.size; i++ ) - { - if ( isalive( self ) ) - { - if ( a_zombies[ i ].health <= 1000 ) - { - a_zombies[ i ] thread maps/mp/zombies/_zm_perk_electric_cherry::electric_cherry_death_fx(); - if ( isDefined( self.cherry_kills ) ) - { - self.cherry_kills++; - } - self maps/mp/zombies/_zm_score::add_to_player_score( 40 ); - } - else - { - a_zombies[ i ] thread maps/mp/zombies/_zm_perk_electric_cherry::electric_cherry_stun(); - a_zombies[ i ] thread maps/mp/zombies/_zm_perk_electric_cherry::electric_cherry_shock_fx(); - } - wait 0.1; - a_zombies[ i ] dodamage( 1000, self.origin, self, self, "none" ); - } - } - self notify( "electric_cherry_end" ); - } -} - -tomb_custom_electric_cherry_reload_attack() //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "stop_electric_cherry_reload_attack" ); - self.wait_on_reload = []; - self.consecutive_electric_cherry_attacks = 0; - while ( 1 ) - { - self waittill( "reload_start" ); - str_current_weapon = self getcurrentweapon(); - if ( isinarray( self.wait_on_reload, str_current_weapon ) ) - { - continue; - } - self.wait_on_reload[ self.wait_on_reload.size ] = str_current_weapon; - self.consecutive_electric_cherry_attacks++; - n_clip_current = self getweaponammoclip( str_current_weapon ); - n_clip_max = weaponclipsize( str_current_weapon ); - n_fraction = n_clip_current / n_clip_max; - perk_radius = linear_map( n_fraction, 1, 0, 32, 128 ); - perk_dmg = linear_map( n_fraction, 1, 0, 1, 1045 ); - self thread maps/mp/zombies/_zm_perk_electric_cherry::check_for_reload_complete( str_current_weapon ); - if ( isDefined( self ) ) - { - switch( self.consecutive_electric_cherry_attacks ) - { - case 0: - case 1: - n_zombie_limit = undefined; - break; - case 2: - n_zombie_limit = 8; - break; - case 3: - n_zombie_limit = 4; - break; - case 4: - n_zombie_limit = 2; - break; - default: - n_zombie_limit = 0; - } - self thread maps/mp/zombies/_zm_perk_electric_cherry::electric_cherry_cooldown_timer( str_current_weapon ); - if ( isDefined( n_zombie_limit ) && n_zombie_limit == 0 ) - { - continue; - } - self thread electric_cherry_reload_fx( n_fraction ); - self notify( "electric_cherry_start" ); - self playsound( "zmb_cherry_explode" ); - a_zombies = getaispeciesarray( "axis", "all" ); - a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, perk_radius ); - n_zombies_hit = 0; - for ( i = 0; i < a_zombies.size; i++ ) - { - if ( isalive( self ) && isalive( a_zombies[ i ] ) ) - { - if ( isDefined( n_zombie_limit ) ) - { - if ( n_zombies_hit < n_zombie_limit ) - { - n_zombies_hit++; - } - else - { - break; - } - } - if ( a_zombies[ i ].health <= perk_dmg ) - { - a_zombies[ i ] thread maps/mp/zombies/_zm_perk_electric_cherry::electric_cherry_death_fx(); - if ( isDefined( self.cherry_kills ) ) - { - self.cherry_kills++; - } - self maps/mp/zombies/_zm_score::add_to_player_score( 40 ); - } - else if ( !isDefined( a_zombies[ i ].is_mechz ) ) - { - a_zombies[ i ] thread maps/mp/zombies/_zm_perk_electric_cherry::electric_cherry_stun(); - } - a_zombies[ i ] thread maps/mp/zombies/_zm_perk_electric_cherry::electric_cherry_shock_fx(); - wait 0.1; - if ( isalive( a_zombies[ i ] ) ) - { - a_zombies[ i ] dodamage( perk_dmg, self.origin, self, self, "none" ); - } - } - } - self notify( "electric_cherry_end" ); - } - } -} - -tomb_custom_player_track_ammo_count() //checked changed to match cerberus output -{ - self notify( "stop_ammo_tracking" ); - self endon( "disconnect" ); - self endon( "stop_ammo_tracking" ); - ammolowcount = 0; - ammooutcount = 0; - while ( 1 ) - { - wait 0.5; - weap = self getcurrentweapon(); - if ( isDefined( weap ) || weap == "none" || !tomb_can_track_ammo_custom( weap ) ) - { - continue; - } - if ( self getammocount( weap ) > 5 || self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - ammooutcount = 0; - ammolowcount = 0; - } - if ( self getammocount( weap ) > 0 ) - { - if ( ammolowcount < 1 ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "ammo_low" ); - ammolowcount++; - } - } - else if ( ammooutcount < 1 ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "ammo_out" ); - ammooutcount++; - } - wait 20; - } -} - -tomb_can_track_ammo_custom( weap ) -{ - if ( !isDefined( weap ) ) - { - return 0; - } - switch( weap ) - { - case "alcatraz_shield_zm": - case "chalk_draw_zm": - case "death_throe_zm": - case "equip_dieseldrone_zm": - case "equip_gasmask_zm": - case "falling_hands_tomb_zm": - case "humangun_upgraded_zm": - case "humangun_zm": - case "lower_equip_gasmask_zm": - case "no_hands_zm": - case "none": - case "one_inch_punch_air_zm": - case "one_inch_punch_fire_zm": - case "one_inch_punch_ice_zm": - case "one_inch_punch_lightning_zm": - case "one_inch_punch_upgraded_zm": - case "one_inch_punch_zm": - case "riotshield_zm": - case "screecher_arms_zm": - case "slowgun_upgraded_zm": - case "slowgun_zm": - case "staff_revive_zm": - case "tazer_knuckles_upgraded_zm": - case "tazer_knuckles_zm": - case "time_bomb_detonator_zm": - case "time_bomb_zm": - case "zombie_bowie_flourish": - case "zombie_builder_zm": - case "zombie_fists_zm": - case "zombie_knuckle_crack": - case "zombie_one_inch_punch_flourish": - case "zombie_one_inch_punch_upgrade_flourish": - case "zombie_sickle_flourish": - case "zombie_tazer_flourish": - return 0; - default: - if ( is_zombie_perk_bottle( weap ) || is_placeable_mine( weap ) || is_equipment( weap ) || issubstr( weap, "knife_ballistic_" ) || getsubstr( weap, 0, 3 ) == "gl_" || weaponfuellife( weap ) > 0 || weap == level.revive_tool ) - { - return 0; - } - } - return 1; -} - diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_achievement.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_achievement.gsc deleted file mode 100644 index bae34b5..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_achievement.gsc +++ /dev/null @@ -1,239 +0,0 @@ -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - level thread achievement_tomb_sidequest(); - level thread achievement_all_your_base(); - level thread achievement_playing_with_power(); - level.achievement_sound_func = ::achievement_sound_func; - onplayerconnect_callback( ::onplayerconnect ); -} - -achievement_sound_func( achievement_name_lower ) -{ - self endon( "disconnect" ); - if ( !sessionmodeisonlinegame() ) - { - return; - } - i = 0; - while ( i < ( self getentitynumber() + 1 ) ) - { - wait_network_frame(); - i++; - } - self thread do_player_general_vox( "general", "achievement" ); -} - -init_player_achievement_stats() -{ - if ( !is_gametype_active( "zclassic" ) ) - { - return; - } - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc4_tomb_sidequest", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc4_not_a_gold_digger", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc4_all_your_base", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc4_kung_fu_grip", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc4_playing_with_power", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc4_im_on_a_tank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc4_saving_the_day_all_day", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc4_master_of_disguise", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc4_overachiever", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc4_master_wizard", 0 ); -} - -onplayerconnect() -{ - self thread achievement_not_a_gold_digger(); - self thread achievement_kung_fu_grip(); - self thread achievement_im_on_a_tank(); - self thread achievement_saving_the_day_all_day(); - self thread achievement_master_of_disguise(); - self thread achievement_master_wizard(); - self thread achievement_overachiever(); -} - -achievement_tomb_sidequest() -{ - level endon( "end_game" ); - level waittill( "tomb_sidequest_complete" ); -/# -#/ - level giveachievement_wrapper( "ZM_DLC4_TOMB_SIDEQUEST", 1 ); -} - -achievement_all_your_base() -{ - level endon( "end_game" ); - level waittill( "all_zones_captured_none_lost" ); -/# -#/ - level giveachievement_wrapper( "ZM_DLC4_ALL_YOUR_BASE", 1 ); -} - -achievement_playing_with_power() -{ - level endon( "end_game" ); - flag_wait( "ee_all_staffs_crafted" ); -/# -#/ - level giveachievement_wrapper( "ZM_DLC4_PLAYING_WITH_POWER", 1 ); -} - -achievement_overachiever() -{ - level endon( "end_game" ); - self endon( "disconnect" ); - self waittill( "all_challenges_complete" ); -/# -#/ - self giveachievement_wrapper( "ZM_DLC4_OVERACHIEVER" ); -} - -achievement_not_a_gold_digger() -{ - level endon( "end_game" ); - self endon( "disconnect" ); - self waittill( "dig_up_weapon_shared" ); -/# -#/ - self giveachievement_wrapper( "ZM_DLC4_NOT_A_GOLD_DIGGER" ); -} - -achievement_kung_fu_grip() -{ - level endon( "end_game" ); - self endon( "disconnect" ); - self waittill_multiple( "mechz_grab_released_self", "mechz_grab_released_friendly" ); -/# -#/ - self giveachievement_wrapper( "ZM_DLC4_KUNG_FU_GRIP" ); -} - -achievement_im_on_a_tank() -{ - level endon( "end_game" ); - self endon( "disconnect" ); - self waittill( "rode_tank_around_map" ); -/# -#/ - self giveachievement_wrapper( "ZM_DLC4_IM_ON_A_TANK" ); -} - -achievement_saving_the_day_all_day() -{ - level endon( "end_game" ); - self endon( "disconnect" ); - self waittill_multiple( "revived_player", "quick_revived_player", "revived_player_with_quadrotor", "revived_player_with_upgraded_staff" ); -/# -#/ - self giveachievement_wrapper( "ZM_DLC4_SAVING_THE_DAY_ALL_DAY" ); -} - -_zombie_blood_achievement_think() -{ - self endon( "zombie_blood_over" ); - b_finished_achievement = 0; - if ( !isDefined( self.zombie_blood_revives ) ) - { - self.zombie_blood_revives = 0; - } - if ( !isDefined( self.zombie_blood_generators_started ) ) - { - self.zombie_blood_generators_started = 0; - } - b_did_capture = 0; - n_revives = 0; - while ( 1 ) - { - str_action = waittill_any_return( "completed_zone_capture", "do_revive_ended_normally", "revived_player_with_quadrotor", "revived_player_with_upgraded_staff" ); - if ( issubstr( str_action, "revive" ) ) - { - self.zombie_blood_revives++; - } - else - { - if ( str_action == "completed_zone_capture" ) - { - self.zombie_blood_generators_started++; - } - } - if ( self.zombie_blood_generators_started > 0 && self.zombie_blood_revives >= 3 ) - { - return 1; - } - } -} - -achievement_master_of_disguise() -{ - level endon( "end_game" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "zombie_blood" ); - b_finished_achievement = self _zombie_blood_achievement_think(); - if ( isDefined( b_finished_achievement ) && b_finished_achievement ) - { - break; - } - else - { - } - } -/# -#/ - self giveachievement_wrapper( "ZM_DLC4_MASTER_OF_DISGUISE" ); -} - -watch_equipped_weapons_for_upgraded_staffs() -{ - self endon( "disconnect" ); - self endon( "stop_weapon_switch_watcher_thread" ); - while ( 1 ) - { - self waittill( "weapon_change", str_weapon ); - while ( self.sessionstate != "playing" ) - { - continue; - } - if ( str_weapon == "staff_water_upgraded_zm" ) - { - self notify( "upgraded_water_staff_equipped" ); - continue; - } - else if ( str_weapon == "staff_lightning_upgraded_zm" ) - { - self notify( "upgraded_lightning_staff_equipped" ); - continue; - } - else if ( str_weapon == "staff_fire_upgraded_zm" ) - { - self notify( "upgraded_fire_staff_equipped" ); - continue; - } - else - { - if ( str_weapon == "staff_air_upgraded_zm" ) - { - self notify( "upgraded_air_staff_equipped" ); - } - } - } -} - -achievement_master_wizard() -{ - level endon( "end_game" ); - self endon( "disconnect" ); - self thread watch_equipped_weapons_for_upgraded_staffs(); - self waittill_multiple( "upgraded_air_staff_equipped", "upgraded_lightning_staff_equipped", "upgraded_water_staff_equipped", "upgraded_fire_staff_equipped" ); - self notify( "stop_weapon_switch_watcher_thread" ); -/# -#/ - self giveachievement_wrapper( "ZM_DLC4_MASTER_WIZARD" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_amb.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_amb.gsc deleted file mode 100644 index 9146012..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_amb.gsc +++ /dev/null @@ -1,669 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/_ambientpackage; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -main() //checked matches cerberus output -{ - level thread sndsetupendgamemusicstates(); - if ( is_classic() ) - { - thread sndmusicegg(); - thread snd115egg(); - thread sndstingersetup(); - onplayerconnect_callback( ::sndtrackers ); - level thread sndmaelstrom(); - } -} - -sndsetupendgamemusicstates() //checked matches cerberus output -{ - flag_wait( "start_zombie_round_logic" ); - level thread maps/mp/zombies/_zm_audio::setupmusicstate( "game_over_ee", "mus_zombie_game_over_ee", 1, 0, undefined, "SILENCE" ); -} - -sndtrackers() //checked matches cerberus output -{ -} - -sndstingersetup() //checked matches cerberus output -{ - level.sndmusicstingerevent = ::sndplaystinger; - level.sndstinger = spawnstruct(); - level.sndstinger.ent = spawn( "script_origin", ( 0, 0, 0 ) ); - level.sndstinger.queue = 0; - level.sndstinger.isplaying = 0; - level.sndstinger.states = []; - level.sndroundwait = 1; - flag_wait( "start_zombie_round_logic" ); - level sndstingersetupstates(); - level thread sndstingerroundwait(); - level thread sndboardmonitor(); - level thread locationstingerwait(); - level thread snddoormusictrigs(); -} - -sndstingersetupstates() //checked matches cerberus output -{ - createstingerstate( "door_open", "mus_event_group_03", 2.5, "ignore" ); - createstingerstate( "boards_gone", "mus_event_group_02", 0.5, "ignore" ); - createstingerstate( "zone_nml_18", "mus_event_location_hilltop", 0.75, "queue" ); - createstingerstate( "zone_village_2", "mus_event_location_church", 0.75, "queue" ); - createstingerstate( "ug_bottom_zone", "mus_event_location_crypt", 0.75, "queue" ); - createstingerstate( "zone_robot_head", "mus_event_location_robot", 0.75, "queue" ); - createstingerstate( "zone_air_stairs", "mus_event_cave_air", 0.75, "queue" ); - createstingerstate( "zone_fire_stairs", "mus_event_cave_fire", 0.75, "queue" ); - createstingerstate( "zone_bolt_stairs", "mus_event_cave_bolt", 0.75, "queue" ); - createstingerstate( "zone_ice_stairs", "mus_event_cave_ice", 0.75, "queue" ); - createstingerstate( "poweron", "mus_event_poweron", 0, "reject" ); - createstingerstate( "tank_ride", "mus_event_tank_ride", 0, "queue" ); - createstingerstate( "generator_1", "mus_event_generator_1", 1, "reject" ); - createstingerstate( "generator_2", "mus_event_generator_2", 1, "reject" ); - createstingerstate( "generator_3", "mus_event_generator_3", 1, "reject" ); - createstingerstate( "generator_4", "mus_event_generator_4", 1, "reject" ); - createstingerstate( "generator_5", "mus_event_generator_5", 1, "reject" ); - createstingerstate( "generator_6", "mus_event_generator_6", 1, "reject" ); - createstingerstate( "staff_fire", "mus_event_staff_fire", 0.1, "reject" ); - createstingerstate( "staff_ice", "mus_event_staff_ice", 0.1, "reject" ); - createstingerstate( "staff_lightning", "mus_event_staff_lightning", 0.1, "reject" ); - createstingerstate( "staff_wind", "mus_event_staff_wind", 0.1, "reject" ); - createstingerstate( "staff_fire_upgraded", "mus_event_staff_fire_upgraded", 0.1, "reject" ); - createstingerstate( "staff_ice_upgraded", "mus_event_staff_ice_upgraded", 0.1, "reject" ); - createstingerstate( "staff_lightning_upgraded", "mus_event_staff_lightning_upgraded", 0.1, "reject" ); - createstingerstate( "staff_wind_upgraded", "mus_event_staff_wind_upgraded", 0.1, "reject" ); - createstingerstate( "staff_all_upgraded", "mus_event_staff_all_upgraded", 0.1, "reject" ); - createstingerstate( "side_sting_1", "mus_side_stinger_1", 0.1, "reject" ); - createstingerstate( "side_sting_2", "mus_side_stinger_2", 0.1, "reject" ); - createstingerstate( "side_sting_3", "mus_side_stinger_3", 0.1, "reject" ); - createstingerstate( "side_sting_4", "mus_side_stinger_4", 0.1, "reject" ); - createstingerstate( "side_sting_5", "mus_side_stinger_5", 0.1, "reject" ); - createstingerstate( "side_sting_6", "mus_side_stinger_6", 0.1, "reject" ); -} - -createstingerstate( state, alias, prewait, interrupt ) //checked matches cerberus output -{ - s = level.sndstinger; - if ( !isDefined( s.states[ state ] ) ) - { - s.states[ state ] = spawnstruct(); - s.states[ state ].alias = alias; - s.states[ state ].prewait = prewait; - s.states[ state ].interrupt = interrupt; - } -} - -sndboardmonitor() //checked changed to match cerberus output -{ - while ( 1 ) - { - level waittill( "last_board_torn", barrier_origin ); - players = getplayers(); - foreach ( player in players ) - { - if ( distancesquared( player.origin, barrier_origin ) <= 22500 ) - { - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "boards_gone" ); - break; - } - } - } -} - -locationstingerwait( zone_name, type ) //checked changed to match cerberus output -{ - array = sndlocationsarray(); - sndnorepeats = 3; - numcut = 0; - level.sndlastzone = undefined; - level.sndlocationplayed = 0; - level thread sndlocationbetweenroundswait(); - while ( 1 ) - { - level waittill( "newzoneActive", activezone ); - wait 0.1; - if ( !sndlocationshouldplay( array, activezone ) ) - { - continue; - } - if ( is_true( level.sndroundwait ) ) - { - continue; - } - else if ( is_true( level.sndstinger.isplaying ) ) - { - level thread sndlocationqueue( activezone ); - continue; - } - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( activezone ); - level.sndlocationplayed = 1; - array = sndcurrentlocationarray( array, activezone, numcut, sndnorepeats ); - level.sndlastzone = activezone; - if ( numcut >= sndnorepeats ) - { - numcut = 0; - } - else - { - numcut++; - } - level waittill( "between_round_over" ); - while ( is_true( level.sndroundwait ) ) - { - wait 0.1; - } - level.sndlocationplayed = 0; - } -} - -sndlocationsarray() //checked matches cerberus output -{ - array = []; - array[ 0 ] = "zone_nml_18"; - array[ 1 ] = "zone_village_2"; - array[ 2 ] = "ug_bottom_zone"; - array[ 3 ] = "zone_air_stairs"; - array[ 4 ] = "zone_fire_stairs"; - array[ 5 ] = "zone_bolt_stairs"; - array[ 6 ] = "zone_ice_stairs"; - return array; -} - -sndlocationshouldplay( array, activezone ) //checked changed to match cerberus output -{ - shouldplay = 0; - if ( activezone == "zone_start_lower" && !flag( "fountain_transport_active" ) ) - { - return shouldplay; - } - if ( is_true( level.music_override ) ) - { - return shouldplay; - } - foreach ( place in array ) - { - if ( place == activezone ) - { - shouldplay = 1; - } - } - if ( shouldplay == 0 ) - { - return shouldplay; - } - playersinlocal = 0; - players = getplayers(); - foreach ( player in players ) - { - if ( player maps/mp/zombies/_zm_zonemgr::is_player_in_zone( activezone ) ) - { - if ( !is_true( player.afterlife ) ) - { - playersinlocal++; - } - } - } - if ( playersinlocal >= 1 ) - { - shouldplay = 1; - } - else - { - shouldplay = 0; - } - return shouldplay; -} - -sndcurrentlocationarray( current_array, activezone, numcut, max_num_removed ) //checked changed to match cerberus output -{ - if ( numcut >= max_num_removed ) - { - current_array = sndlocationsarray(); - } - foreach ( place in current_array ) - { - if ( place == activezone ) - { - arrayremovevalue( current_array, place ); - break; - } - } - return current_array; -} - -sndlocationbetweenrounds() //checked partially changed to match cerberus output see info.md -{ - level endon( "newzoneActive" ); - activezones = maps/mp/zombies/_zm_zonemgr::get_active_zone_names(); - foreach ( zone in activezones ) - { - if ( isDefined( level.sndlastzone ) && zone == level.sndlastzone ) - { - } - else - { - players = getplayers(); - for ( i = 0; i < players.size; i++ ) - { - if ( is_true( players[ i ].afterlife ) ) - { - } - else - { - if ( players[ i ] maps/mp/zombies/_zm_zonemgr::is_player_in_zone( zone ) ) - { - wait 0.1; - level notify( "newzoneActive" ); - return; - } - } - } - } - } -} - -sndlocationbetweenroundswait() //checked matches cerberus output -{ - while ( is_true( level.sndroundwait ) ) - { - wait 0.1; - } - while ( 1 ) - { - level thread sndlocationbetweenrounds(); - level waittill( "between_round_over" ); - while ( is_true( level.sndroundwait ) ) - { - wait 0.1; - } - } -} - -sndlocationqueue( zone ) //checked matches cerberus output -{ - level endon( "newzoneActive" ); - while ( is_true( level.sndstinger.isplaying ) ) - { - wait 0.5; - } - level notify( "newzoneActive" ); -} - -sndplaystinger( state, player ) //checked changed to match cerberus output -{ - s = level.sndstinger; - if ( !isDefined( s.states[ state ] ) ) - { - return; - } - interrupt = s.states[ state ].interrupt == "ignore"; - if ( !is_true( s.isplaying ) || is_true( interrupt ) ) - { - if ( interrupt ) - { - wait s.states[ state ].prewait; - playstinger( state, player, 1 ); - } - else if ( !level.sndroundwait ) - { - s.isplaying = 1; - wait s.states[ state ].prewait; - playstinger( state, player, 0 ); - level notify( "sndStingerDone" ); - s.isplaying = 0; - } - else if ( s.states[ state ].interrupt == "queue" ) - { - level thread sndqueuestinger( state, player ); - } - return; - } - if ( s.states[ state ].interrupt == "queue" ) - { - level thread sndqueuestinger( state, player ); - } -} - -playstinger( state, player, ignore ) //checked matches cerberus output -{ - s = level.sndstinger; - if ( !isDefined( s.states[ state ] ) ) - { - return; - } - if ( is_true( level.music_override ) ) - { - return; - } - if ( is_true( ignore ) ) - { - if ( isDefined( player ) ) - { - player playsoundtoplayer( s.states[ state ].alias, player ); - } - else - { - s.ent playsound( s.states[ state ].alias ); - s.ent thread playstingerstop(); - } - } - else if ( isDefined( player ) ) - { - player playsoundtoplayer( s.states[ state ].alias, player ); - wait 8; - } - else - { - s.ent playsoundwithnotify( s.states[ state ].alias, "sndStingerDone" ); - s.ent thread playstingerstop(); - s.ent waittill( "sndStingerDone" ); - } -} - -sndqueuestinger( state, player ) //checked changed to match cerberus output -{ - s = level.sndstinger; - count = 0; - if ( is_true( s.queue ) ) - { - return; - } - else - { - s.queue = 1; - while ( 1 ) - { - if ( is_true( level.sndroundwait ) || is_true( s.isplaying ) ) - { - wait 0.5; - count++; - if ( count >= 120 ) - { - return; - } - } - else - { - break; - } - } - level thread sndplaystinger( state, player ); - s.queue = 0; - } -} - -sndstingerroundwait() //checked matches cerberus output -{ - wait 25; - level.sndroundwait = 0; - while ( 1 ) - { - level waittill( "end_of_round" ); - level thread sndstingerroundwait_start(); - } -} - -sndstingerroundwait_start() //checked matches cerberus output -{ - level.sndroundwait = 1; - wait 0.05; - level thread sndstingerroundwait_end(); -} - -sndstingerroundwait_end() //checked matches cerberus output -{ - level endon( "end_of_round" ); - level waittill( "between_round_over" ); - wait 28; - level.sndroundwait = 0; -} - -playstingerstop() //checked matches cerberus output -{ - self endon( "sndStingerDone" ); - level endon( "sndStingerDone" ); - level waittill_any( "end_of_round", "sndStingerForceStop" ); - wait 2; - self stopsounds(); -} - -sndmusicegg() //checked changed to match cerberus output -{ - origins = []; - origins[ 0 ] = ( 2682.23, 4456.15, -302.352 ); - origins[ 1 ] = ( 721.043, -87.7068, 285.986 ); - origins[ 2 ] = ( -674.048, 2536.67, -112.483 ); - level.meteor_counter = 0; - level.music_override = 0; - for ( i = 0; i < origins.size; i++ ) - { - level thread sndmusicegg_wait( origins[ i ] ); - } -} - -sndmusicegg_wait( bottle_origin ) //checked matches cerberus output -{ - temp_ent = spawn( "script_origin", bottle_origin ); - temp_ent playloopsound( "zmb_meteor_loop" ); - temp_ent thread maps/mp/zombies/_zm_sidequests::fake_use( "main_music_egg_hit", ::sndmusicegg_override ); - temp_ent waittill( "main_music_egg_hit", player ); - temp_ent stoploopsound( 1 ); - player playsound( "zmb_meteor_activate" ); - level.meteor_counter += 1; - if ( level.meteor_counter == 3 ) - { - level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 310 ); - } - else - { - wait 1.5; - temp_ent delete(); - } -} - -sndmusicegg_override() //checked matches cerberus output -{ - if ( is_true( level.music_override ) ) - { - return 0; - } - return 1; -} - -sndmuseggplay( ent, alias, time ) //checked matches cerberus output -{ - level.music_override = 1; - wait 1; - ent playsound( alias ); - level setclientfield( "mus_zmb_egg_snapshot_loop", 1 ); - level notify( "sndStingerForceStop" ); - level thread sndeggmusicwait( time ); - level waittill_either( "end_game", "sndSongDone" ); - ent stopsounds(); - level setclientfield( "mus_zmb_egg_snapshot_loop", 0 ); - wait 0.05; - ent delete(); - level.music_override = 0; -} - -sndeggmusicwait( time ) //checked matches cerberus output -{ - level endon( "end_game" ); - wait time; - level notify( "sndSongDone" ); -} - -sndplaystingerwithoverride( alias, length ) //checked matches cerberus output -{ - shouldplay = sndwait(); - if ( !shouldplay ) - { - return; - } - level.music_override = 1; - level setclientfield( "mus_zmb_egg_snapshot_loop", 1 ); - level notify( "sndStingerForceStop" ); - ent = spawn( "script_origin", ( 0, 0, 0 ) ); - ent playsound( alias ); - wait length; - level setclientfield( "mus_zmb_egg_snapshot_loop", 0 ); - level.music_override = 0; - wait 0.05; - ent delete(); -} - -sndwait() //checked matches cerberus output -{ - counter = 0; - while ( is_true( level.music_override ) ) - { - wait 1; - counter++; - if ( counter >= 60 ) - { - return 0; - } - } - return 1; -} - -snddoormusictrigs() //checked changed to match cerberus output -{ - trigs = getentarray( "sndMusicDoor", "script_noteworthy" ); - foreach ( trig in trigs ) - { - trig thread snddoormusic(); - } -} - -snddoormusic() //checked changed to match cerberus output -{ - self endon( "sndDoorMusic_Triggered" ); - while ( 1 ) - { - self waittill( "trigger" ); - if ( is_true( level.music_override ) ) - { - wait 0.1; - } - else - { - break; - } - } - if ( isDefined( self.target ) ) - { - ent = getent( self.target, "targetname" ); - ent notify( "sndDoorMusic_Triggered" ); - } - level thread sndplaystingerwithoverride( self.script_sound, self.script_int ); -} - -sndmaelstrom() //checked matches cerberus output -{ - trig = getent( "sndMaelstrom", "targetname" ); - if ( !isDefined( trig ) ) - { - return; - } - while ( 1 ) - { - trig waittill( "trigger", who ); - if ( isplayer( who ) && !is_true( who.sndmaelstrom ) ) - { - who.sndmaelstrom = 1; - level setclientfield( "sndMaelstromPlr" + who getentitynumber(), 1 ); - } - who thread sndmaelstrom_timeout(); - wait 0.1; - } -} - -sndmaelstrom_timeout() //checked matches cerberus output -{ - self notify( "sndMaelstrom_Timeout" ); - self endon( "sndMaelstrom_Timeout" ); - wait 2; - self.sndmaelstrom = 0; - level setclientfield( "sndMaelstromPlr" + self getentitynumber(), 0 ); -} - -snd115egg() //checked changed to match cerberus output -{ - level.snd115count = 0; - oneorigin = []; - oneorigin[ 0 ] = ( 2168, 4617, -289 ); - oneorigin[ 1 ] = ( 2170, 4953, -289 ); - fiveorigin = []; - fiveorigin[ 0 ] = ( -2459, 176, 243 ); - fiveorigin[ 1 ] = ( -2792, 175, 243 ); - foreach ( origin in oneorigin ) - { - level thread snd115egg_wait( origin, 0 ); - } - foreach ( origin in fiveorigin ) - { - level thread snd115egg_wait( origin, 1 ); - } -} - -snd115egg_wait( origin, shouldwait ) //checked matches cerberus output -{ - level endon( "sndEnd115" ); - temp_ent = spawn( "script_origin", origin ); - temp_ent thread snddelete115ent(); - if ( shouldwait ) - { - temp_ent thread maps/mp/zombies/_zm_sidequests::fake_use( "main_music_egg_hit", ::snd115egg_5_override ); - } - else - { - temp_ent thread maps/mp/zombies/_zm_sidequests::fake_use( "main_music_egg_hit", ::snd115egg_1_override ); - } - temp_ent waittill( "main_music_egg_hit", player ); - player playsound( "zmb_meteor_activate" ); - level.snd115count++; - if ( level.snd115count == 3 ) - { - temp_ent notify( "sndDeleting" ); - level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song_aether", 135 ); - level notify( "sndEnd115" ); - } - else - { - temp_ent notify( "sndDeleting" ); - temp_ent delete(); - } -} - -snd115egg_1_override() //checked matches cerberus output -{ - stance = self getstance(); - if ( is_true( level.music_override ) || stance != "prone" ) - { - return 0; - } - return 1; -} - -snd115egg_5_override() //checked matches cerberus output -{ - stance = self getstance(); - if ( !is_true( level.music_override ) || stance != "prone" || level.snd115count < 2 ) - { - return 0; - } - return 1; -} - -snddelete115ent() //checked matches cerberus output -{ - self endon( "sndDeleting" ); - level waittill( "sndEnd115" ); - self delete(); -} - - diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ambient_scripts.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ambient_scripts.gsc deleted file mode 100644 index dd1fa8b..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ambient_scripts.gsc +++ /dev/null @@ -1,122 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -//#using_animtree( "fxanim_props_dlc4" ); - -tomb_ambient_precache() //checked matches cerberus output -{ - precachemodel( "veh_t6_dlc_zm_zeppelin" ); -} - -init_tomb_ambient_scripts() //checked matches cerberus output -{ - tomb_ambient_precache(); - registerclientfield( "world", "sky_battle_ambient_fx", 14000, 1, "int" ); - level thread start_sky_battle(); - level thread init_zeppelin( "sky_cowbell_zeppelin_low", "stop_ambient_zeppelins" ); - delay_thread( 20, ::init_zeppelin, "sky_cowbell_zeppelin_mid", "stop_ambient_zeppelins" ); - delay_thread( 40, ::init_zeppelin, "sky_cowbell_zeppelin_high", "stop_ambient_zeppelins" ); - level thread vista_robot_pose(); -} - -init_zeppelin( str_script_noteworthy, str_ender ) //checked changed to match cerberus output -{ - level endon( str_ender ); - a_path_structs = getstructarray( str_script_noteworthy, "script_noteworthy" ); - if ( a_path_structs.size > 0 ) - { - m_zeppelin = spawn( "script_model", ( 0, 0, 0 ) ); - m_zeppelin setmodel( "veh_t6_dlc_zm_zeppelin" ); - m_zeppelin setforcenocull(); - while ( 1 ) - { - m_zeppelin move_zeppelin_down_new_path( a_path_structs ); - } - } -} - -move_zeppelin_down_new_path( a_structs ) //checked matches cerberus output -{ - s_path_start = get_unused_struct( a_structs ); - self ghost(); - self moveto( s_path_start.origin, 0.1 ); - self rotateto( s_path_start.angles, 0.1 ); - self waittill( "movedone" ); - self show(); - if ( !isDefined( s_path_start.goal_struct ) ) - { - /* -/# - assert( isDefined( s_path_start.target ), "move_zeppelin_down_new_path found start struct at " + s_path_start.origin + " without a target! These are needed for zeppelin splines!" ); -#/ - */ - s_path_start.goal_struct = getstruct( s_path_start.target, "targetname" ); - /* -/# - assert( isDefined( s_path_start.goal_struct ), "move_zeppelin_down_new_path couldn't find goal for path start struct at " + s_path_start.origin ); -#/ - */ - } - n_move_time = randomfloatrange( 120, 150 ); - self moveto( s_path_start.goal_struct.origin, n_move_time ); - self waittill( "movedone" ); -} - -get_unused_struct( a_structs ) //checked changed to match cerberus output -{ - a_valid_structs = []; - b_no_unused_structs = 0; - while ( !a_valid_structs.size ) - { - foreach ( struct in a_structs ) - { - if ( !isDefined( struct.used ) || b_no_unused_structs ) - { - struct.used = 0; - } - if ( !struct.used ) - { - a_valid_structs[ a_valid_structs.size ] = struct; - } - } - if ( !a_valid_structs.size ) - { - b_no_unused_structs = 1; - } - } - s_unused = random( a_valid_structs ); - s_unused.used = 1; - return s_unused; -} - -start_sky_battle() //checked matches cerberus output -{ - flag_wait( "start_zombie_round_logic" ); - level setclientfield( "sky_battle_ambient_fx", 1 ); -} - -vista_robot_pose() //checked changed to match cerberus output -{ - flag_wait( "start_zombie_round_logic" ); - a_robots = getstructarray( "trench_downed_robot_struct", "targetname" ); - for ( i = 0; i < a_robots.size; i++ ) - { - if ( !isDefined( a_robots[ i ].angles ) ) - { - a_robots[ i ].angles = ( 0, 0, 0 ); - } - v_origin = getstartorigin( a_robots[ i ].origin, a_robots[ i ].angles, %ai_zombie_giant_robot_vista ); - v_angles = getstartangles( a_robots[ i ].origin, a_robots[ i ].angles, %ai_zombie_giant_robot_vista ); - e_robot = spawn( "script_model", v_origin ); - e_robot.angles = v_angles; - e_robot setmodel( "veh_t6_dlc_zm_robot" ); - e_robot useanimtree( -1 ); - e_robot setanim( %ai_zombie_giant_robot_vista, 1, 0, 1 ); - } -} - diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_capture_zones.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_capture_zones.gsc deleted file mode 100644 index de7a73c..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_capture_zones.gsc +++ /dev/null @@ -1,2777 +0,0 @@ -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_magicbox_tomb; -#include maps/mp/zombies/_zm_challenges; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zm_tomb_capture_zones_ffotd; -#include maps/mp/zm_tomb_vo; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zm_tomb_utility; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -#using_animtree( "fxanim_props_dlc4" ); - -init_capture_zones() -{ - maps/mp/zm_tomb_capture_zones_ffotd::capture_zone_init_start(); - precache_everything(); - declare_objectives(); - flag_init( "zone_capture_in_progress" ); - flag_init( "recapture_event_in_progress" ); - flag_init( "capture_zones_init_done" ); - flag_init( "recapture_zombies_cleared" ); - flag_init( "generator_under_attack" ); - flag_init( "all_zones_captured" ); - flag_init( "generator_lost_to_recapture_zombies" ); - root = %root; - i = %fxanim_zom_tomb_generator_start_anim; - i = %fxanim_zom_tomb_generator_up_idle_anim; - i = %fxanim_zom_tomb_generator_down_idle_anim; - i = %fxanim_zom_tomb_generator_end_anim; - i = %fxanim_zom_tomb_generator_fluid_down_anim; - i = %fxanim_zom_tomb_generator_fluid_up_anim; - i = %fxanim_zom_tomb_generator_fluid_rotate_down_anim; - i = %fxanim_zom_tomb_generator_fluid_rotate_up_anim; - i = %fxanim_zom_tomb_packapunch_pc1_anim; - i = %fxanim_zom_tomb_packapunch_pc2_anim; - i = %fxanim_zom_tomb_packapunch_pc3_anim; - i = %fxanim_zom_tomb_packapunch_pc4_anim; - i = %fxanim_zom_tomb_packapunch_pc5_anim; - i = %fxanim_zom_tomb_packapunch_pc6_anim; - i = %fxanim_zom_tomb_packapunch_pc7_anim; - i = %fxanim_zom_tomb_pack_return_pc1_anim; - i = %fxanim_zom_tomb_pack_return_pc2_anim; - i = %fxanim_zom_tomb_pack_return_pc3_anim; - i = %fxanim_zom_tomb_pack_return_pc4_anim; - i = %fxanim_zom_tomb_pack_return_pc5_anim; - i = %fxanim_zom_tomb_pack_return_pc6_anim; - i = %fxanim_zom_tomb_monolith_inductor_pull_anim; - i = %fxanim_zom_tomb_monolith_inductor_pull_idle_anim; - i = %fxanim_zom_tomb_monolith_inductor_release_anim; - i = %fxanim_zom_tomb_monolith_inductor_shake_anim; - i = %fxanim_zom_tomb_monolith_inductor_idle_anim; - level thread setup_capture_zones(); -} - -precache_everything() -{ - precachemodel( "p6_zm_tm_zone_capture_hole" ); - precachemodel( "p6_zm_tm_packapunch" ); - precacherumble( "generator_active" ); - precachestring( &"ZM_TOMB_OBJ_CAPTURE_1" ); - precachestring( &"ZM_TOMB_OBJ_RECAPTURE_1" ); - precachestring( &"ZM_TOMB_OBJ_CAPTURE_2" ); - precachestring( &"ZM_TOMB_OBJ_RECAPTURE_2" ); - precachestring( &"ZM_TOMB_OBJ_RECAPTURE_ZOMBIE" ); -} - -declare_objectives() -{ - objective_add( 0, "invisible", ( 0, 0, 1 ), &"ZM_TOMB_OBJ_CAPTURE_1" ); - objective_add( 1, "invisible", ( 0, 0, 1 ), &"ZM_TOMB_OBJ_RECAPTURE_2" ); - objective_add( 2, "invisible", ( 0, 0, 1 ), &"ZM_TOMB_OBJ_CAPTURE_2" ); - objective_add( 3, "invisible", ( 0, 0, 1 ), &"ZM_TOMB_OBJ_RECAPTURE_ZOMBIE" ); -} - -init_pap_animtree() -{ - scriptmodelsuseanimtree( -1 ); -} - -setup_capture_zones() -{ - spawner_capture_zombie = getent( "capture_zombie_spawner", "targetname" ); - spawner_capture_zombie add_spawn_function( ::capture_zombie_spawn_init ); - a_s_generator = getstructarray( "s_generator", "targetname" ); - registerclientfield( "world", "packapunch_anim", 14000, 3, "int" ); - registerclientfield( "actor", "zone_capture_zombie", 14000, 1, "int" ); - registerclientfield( "scriptmover", "zone_capture_emergence_hole", 14000, 1, "int" ); - registerclientfield( "world", "zc_change_progress_bar_color", 14000, 1, "int" ); - registerclientfield( "world", "zone_capture_hud_all_generators_captured", 14000, 1, "int" ); - registerclientfield( "world", "zone_capture_perk_machine_smoke_fx_always_on", 14000, 1, "int" ); - registerclientfield( "world", "pap_monolith_ring_shake", 14000, 1, "int" ); - _a149 = a_s_generator; - _k149 = getFirstArrayKey( _a149 ); - while ( isDefined( _k149 ) ) - { - struct = _a149[ _k149 ]; - registerclientfield( "world", struct.script_noteworthy, 14000, 7, "float" ); - registerclientfield( "world", "state_" + struct.script_noteworthy, 14000, 3, "int" ); - registerclientfield( "world", "zone_capture_hud_generator_" + struct.script_int, 14000, 2, "int" ); - registerclientfield( "world", "zone_capture_monolith_crystal_" + struct.script_int, 14000, 1, "int" ); - registerclientfield( "world", "zone_capture_perk_machine_smoke_fx_" + struct.script_int, 14000, 1, "int" ); - _k149 = getNextArrayKey( _a149, _k149 ); - } - flag_wait( "start_zombie_round_logic" ); - level.magic_box_zbarrier_state_func = ::set_magic_box_zbarrier_state; - level.custom_perk_validation = ::check_perk_machine_valid; - level thread track_max_player_zombie_points(); - _a168 = a_s_generator; - _k168 = getFirstArrayKey( _a168 ); - while ( isDefined( _k168 ) ) - { - s_generator = _a168[ _k168 ]; - s_generator thread init_capture_zone(); - _k168 = getNextArrayKey( _a168, _k168 ); - } - register_elements_powered_by_zone_capture_generators(); - setup_perk_machines_not_controlled_by_zone_capture(); - pack_a_punch_init(); - level thread recapture_round_tracker(); - level.zone_capture.recapture_zombies = []; - level.zone_capture.last_zone_captured = undefined; - level.zone_capture.spawn_func_capture_zombie = ::init_capture_zombie; - level.zone_capture.spawn_func_recapture_zombie = ::init_recapture_zombie; -/# - level thread watch_for_open_sesame(); - level thread debug_watch_for_zone_capture(); - level thread debug_watch_for_zone_recapture(); -#/ - maps/mp/zombies/_zm_spawner::register_zombie_death_event_callback( ::recapture_zombie_death_func ); - level.custom_derive_damage_refs = ::zone_capture_gib_think; - setup_inaccessible_zombie_attack_points(); - level thread quick_revive_game_type_watcher(); - level thread quick_revive_solo_leave_watcher(); - level thread all_zones_captured_vo(); - flag_set( "capture_zones_init_done" ); - level setclientfield( "zone_capture_perk_machine_smoke_fx_always_on", 1 ); - maps/mp/zm_tomb_capture_zones_ffotd::capture_zone_init_end(); -} - -all_zones_captured_vo() -{ - flag_wait( "all_zones_captured" ); - flag_waitopen( "story_vo_playing" ); - set_players_dontspeak( 1 ); - flag_set( "story_vo_playing" ); - e_speaker = get_closest_player_to_richtofen(); - if ( isDefined( e_speaker ) ) - { - e_speaker set_player_dontspeak( 0 ); - e_speaker create_and_play_dialog( "zone_capture", "all_generators_captured" ); - e_speaker waittill_any( "done_speaking", "disconnect" ); - } - e_richtofen = get_player_named( "Richtofen" ); - if ( isDefined( e_richtofen ) ) - { - e_richtofen set_player_dontspeak( 0 ); - e_richtofen create_and_play_dialog( "zone_capture", "all_generators_captured" ); - } - set_players_dontspeak( 0 ); - flag_clear( "story_vo_playing" ); -} - -get_closest_player_to_richtofen() -{ - a_players = get_players(); - e_speaker = undefined; - e_richtofen = get_player_named( "Richtofen" ); - if ( isDefined( e_richtofen ) ) - { - if ( a_players.size > 1 ) - { - arrayremovevalue( a_players, e_richtofen, 0 ); - e_speaker = arraysort( a_players, e_richtofen.origin, 1 )[ 0 ]; - } - else - { - e_speaker = undefined; - } - } - else - { - e_speaker = get_random_speaker(); - } - return e_speaker; -} - -get_player_named( str_character_name ) -{ - e_character = undefined; - _a269 = get_players(); - _k269 = getFirstArrayKey( _a269 ); - while ( isDefined( _k269 ) ) - { - player = _a269[ _k269 ]; - if ( isDefined( player.character_name ) && player.character_name == str_character_name ) - { - e_character = player; - } - _k269 = getNextArrayKey( _a269, _k269 ); - } - return e_character; -} - -quick_revive_game_type_watcher() -{ - while ( 1 ) - { - level waittill( "revive_hide" ); - wait 1; - t_revive_machine = level.zone_capture.zones[ "generator_start_bunker" ].perk_machines[ "revive" ]; - if ( level.zone_capture.zones[ "generator_start_bunker" ] ent_flag( "player_controlled" ) ) - { - level notify( "revive_on" ); - t_revive_machine.is_locked = 0; - t_revive_machine maps/mp/zombies/_zm_perks::reset_vending_hint_string(); - continue; - } - else - { - level notify( "revive_off" ); - t_revive_machine.is_locked = 1; - t_revive_machine sethintstring( &"ZM_TOMB_ZC" ); - } - } -} - -quick_revive_solo_leave_watcher() -{ - if ( flag_exists( "solo_revive" ) ) - { - flag_wait( "solo_revive" ); - level setclientfield( "zone_capture_perk_machine_smoke_fx_1", 0 ); - } -} - -revive_perk_fx_think() -{ - if ( flag_exists( "solo_revive" ) ) - { - return !flag( "solo_revive" ); - } -} - -setup_inaccessible_zombie_attack_points() -{ - set_attack_point_as_inaccessible( "generator_start_bunker", 5 ); - set_attack_point_as_inaccessible( "generator_start_bunker", 11 ); - set_attack_point_as_inaccessible( "generator_tank_trench", 4 ); - set_attack_point_as_inaccessible( "generator_tank_trench", 5 ); - set_attack_point_as_inaccessible( "generator_tank_trench", 6 ); -} - -set_attack_point_as_inaccessible( str_zone, n_index ) -{ -/# - assert( isDefined( level.zone_capture.zones[ str_zone ] ), "set_attack_point_as_inaccessible couldn't find " + str_zone + " in level.zone_capture's zone array!" ); -#/ - level.zone_capture.zones[ str_zone ] ent_flag_wait( "zone_initialized" ); -/# - assert( isDefined( level.zone_capture.zones[ str_zone ].zombie_attack_points[ n_index ] ), "set_attack_points_as_inaccessible couldn't find index " + n_index + " on zone " + str_zone ); -#/ - level.zone_capture.zones[ str_zone ].zombie_attack_points[ n_index ].inaccessible = 1; -} - -setup_perk_machines_not_controlled_by_zone_capture() -{ - level.zone_capture.perk_machines_always_on = array( "specialty_additionalprimaryweapon" ); -} - -track_max_player_zombie_points() -{ - while ( 1 ) - { - a_players = get_players(); - _a356 = a_players; - _k356 = getFirstArrayKey( _a356 ); - while ( isDefined( _k356 ) ) - { - player = _a356[ _k356 ]; - player.n_capture_zombie_points = 0; - _k356 = getNextArrayKey( _a356, _k356 ); - } - level waittill( "between_round_over" ); - } -} - -pack_a_punch_dummy_init() -{ -} - -pack_a_punch_init() -{ - vending_weapon_upgrade_trigger = getentarray( "specialty_weapupgrade", "script_noteworthy" ); - level.pap_triggers = vending_weapon_upgrade_trigger; - t_pap = getent( "specialty_weapupgrade", "script_noteworthy" ); - t_pap.machine ghost(); - t_pap.machine notsolid(); - t_pap.bump enablelinkto(); - t_pap.bump linkto( t_pap ); - level thread pack_a_punch_think(); -} - -pack_a_punch_think() -{ - while ( 1 ) - { - flag_wait( "all_zones_captured" ); - pack_a_punch_enable(); - flag_waitopen( "all_zones_captured" ); - pack_a_punch_disable(); - } -} - -pack_a_punch_enable() -{ - t_pap = getent( "specialty_weapupgrade", "script_noteworthy" ); - t_pap trigger_on(); - flag_set( "power_on" ); - level setclientfield( "zone_capture_hud_all_generators_captured", 1 ); - if ( !flag( "generator_lost_to_recapture_zombies" ) ) - { - level notify( "all_zones_captured_none_lost" ); - } -} - -pack_a_punch_disable() -{ - t_pap = getent( "specialty_weapupgrade", "script_noteworthy" ); - level setclientfield( "zone_capture_hud_all_generators_captured", 0 ); - flag_waitopen( "pack_machine_in_use" ); - t_pap trigger_off(); -} - -register_elements_powered_by_zone_capture_generators() -{ - register_random_perk_machine_for_zone( "generator_start_bunker", "starting_bunker" ); - register_perk_machine_for_zone( "generator_start_bunker", "revive", "vending_revive", ::revive_perk_fx_think ); - register_mystery_box_for_zone( "generator_start_bunker", "bunker_start_chest" ); - register_random_perk_machine_for_zone( "generator_tank_trench", "trenches_right" ); - register_mystery_box_for_zone( "generator_tank_trench", "bunker_tank_chest" ); - register_random_perk_machine_for_zone( "generator_mid_trench", "trenches_left" ); - register_perk_machine_for_zone( "generator_mid_trench", "sleight", "vending_sleight" ); - register_mystery_box_for_zone( "generator_mid_trench", "bunker_cp_chest" ); - register_random_perk_machine_for_zone( "generator_nml_right", "nml" ); - register_perk_machine_for_zone( "generator_nml_right", "juggernog", "vending_jugg" ); - register_mystery_box_for_zone( "generator_nml_right", "nml_open_chest" ); - register_random_perk_machine_for_zone( "generator_nml_left", "farmhouse" ); - register_perk_machine_for_zone( "generator_nml_left", "marathon", "vending_marathon" ); - register_mystery_box_for_zone( "generator_nml_left", "nml_farm_chest" ); - register_random_perk_machine_for_zone( "generator_church", "church" ); - register_mystery_box_for_zone( "generator_church", "village_church_chest" ); -} - -register_perk_machine_for_zone( str_zone_name, str_perk_name, str_machine_targetname, func_perk_fx_think ) -{ -/# - assert( isDefined( level.zone_capture.zones[ str_zone_name ] ), "register_perk_machine_for_zone can't find " + str_zone_name + " has not been initialized in level.zone_capture.zones array!" ); -#/ - if ( !isDefined( level.zone_capture.zones[ str_zone_name ].perk_machines ) ) - { - level.zone_capture.zones[ str_zone_name ].perk_machines = []; - } - if ( !isDefined( level.zone_capture.zones[ str_zone_name ].perk_machines[ str_perk_name ] ) ) - { - e_perk_machine_trigger = get_perk_machine_trigger_from_vending_entity( str_machine_targetname ); - e_perk_machine_trigger.str_zone_name = str_zone_name; - level.zone_capture.zones[ str_zone_name ].perk_machines[ str_perk_name ] = e_perk_machine_trigger; - } - level.zone_capture.zones[ str_zone_name ].perk_fx_func = func_perk_fx_think; -} - -register_random_perk_machine_for_zone( str_zone_name, str_identifier ) -{ -/# - assert( isDefined( level.zone_capture.zones[ str_zone_name ] ), "register_random_perk_machine_for_zone can't find " + str_zone_name + " has not been initialized in level.zone_capture.zones array!" ); -#/ - if ( !isDefined( level.zone_capture.zones[ str_zone_name ].perk_machines_random ) ) - { - level.zone_capture.zones[ str_zone_name ].perk_machines_random = []; - } - a_random_perk_machines = getentarray( "random_perk_machine", "targetname" ); - _a492 = a_random_perk_machines; - _k492 = getFirstArrayKey( _a492 ); - while ( isDefined( _k492 ) ) - { - random_perk_machine = _a492[ _k492 ]; - if ( isDefined( random_perk_machine.script_string ) && random_perk_machine.script_string == str_identifier ) - { - level.zone_capture.zones[ str_zone_name ].perk_machines_random[ level.zone_capture.zones[ str_zone_name ].perk_machines_random.size ] = random_perk_machine; - } - _k492 = getNextArrayKey( _a492, _k492 ); - } -} - -register_mystery_box_for_zone( str_zone_name, str_identifier ) -{ -/# - assert( isDefined( level.zone_capture.zones[ str_zone_name ] ), "register_mystery_box_for_zone can't find " + str_zone_name + " has not been initialized in level.zone_capture.zones array!" ); -#/ - if ( !isDefined( level.zone_capture.zones[ str_zone_name ].mystery_boxes ) ) - { - level.zone_capture.zones[ str_zone_name ].mystery_boxes = []; - } - s_mystery_box = get_mystery_box_from_script_noteworthy( str_identifier ); - s_mystery_box.unitrigger_stub.prompt_and_visibility_func = ::magic_box_trigger_update_prompt; - s_mystery_box.unitrigger_stub.zone = str_zone_name; - s_mystery_box.zone_capture_area = str_zone_name; - s_mystery_box.zbarrier.zone_capture_area = str_zone_name; - level.zone_capture.zones[ str_zone_name ].mystery_boxes[ level.zone_capture.zones[ str_zone_name ].mystery_boxes.size ] = s_mystery_box; -} - -get_mystery_box_from_script_noteworthy( str_script_noteworthy ) -{ - s_box = undefined; - _a524 = level.chests; - _k524 = getFirstArrayKey( _a524 ); - while ( isDefined( _k524 ) ) - { - s_mystery_box = _a524[ _k524 ]; - if ( isDefined( s_mystery_box.script_noteworthy ) && s_mystery_box.script_noteworthy == str_script_noteworthy ) - { - s_box = s_mystery_box; - } - _k524 = getNextArrayKey( _a524, _k524 ); - } -/# - assert( isDefined( s_mystery_box ), "get_mystery_box_from_script_noteworthy() couldn't find a mystery box with script_noteworthy = " + str_script_noteworthy ); -#/ - return s_box; -} - -enable_perk_machines_in_zone() -{ - while ( isDefined( self.perk_machines ) && isarray( self.perk_machines ) ) - { - a_keys = getarraykeys( self.perk_machines ); - i = 0; - while ( i < a_keys.size ) - { - level notify( a_keys[ i ] + "_on" ); - i++; - } - i = 0; - while ( i < a_keys.size ) - { - e_perk_trigger = self.perk_machines[ a_keys[ i ] ]; - e_perk_trigger.is_locked = 0; - e_perk_trigger maps/mp/zombies/_zm_perks::reset_vending_hint_string(); - i++; - } - } -} - -disable_perk_machines_in_zone() -{ - while ( isDefined( self.perk_machines ) && isarray( self.perk_machines ) ) - { - a_keys = getarraykeys( self.perk_machines ); - i = 0; - while ( i < a_keys.size ) - { - level notify( a_keys[ i ] + "_off" ); - i++; - } - i = 0; - while ( i < a_keys.size ) - { - e_perk_trigger = self.perk_machines[ a_keys[ i ] ]; - e_perk_trigger.is_locked = 1; - e_perk_trigger sethintstring( &"ZM_TOMB_ZC" ); - i++; - } - } -} - -enable_random_perk_machines_in_zone() -{ - while ( isDefined( self.perk_machines_random ) && isarray( self.perk_machines_random ) ) - { - _a586 = self.perk_machines_random; - _k586 = getFirstArrayKey( _a586 ); - while ( isDefined( _k586 ) ) - { - random_perk_machine = _a586[ _k586 ]; - random_perk_machine.is_locked = 0; - random_perk_machine sethintstring( &"ZM_TOMB_RPB", level._random_zombie_perk_cost ); - _k586 = getNextArrayKey( _a586, _k586 ); - } - } -} - -disable_random_perk_machines_in_zone() -{ - while ( isDefined( self.perk_machines_random ) && isarray( self.perk_machines_random ) ) - { - _a598 = self.perk_machines_random; - _k598 = getFirstArrayKey( _a598 ); - while ( isDefined( _k598 ) ) - { - random_perk_machine = _a598[ _k598 ]; - random_perk_machine.is_locked = 1; - _k598 = getNextArrayKey( _a598, _k598 ); - } - } -} - -enable_mystery_boxes_in_zone() -{ - _a608 = self.mystery_boxes; - _k608 = getFirstArrayKey( _a608 ); - while ( isDefined( _k608 ) ) - { - mystery_box = _a608[ _k608 ]; - mystery_box.is_locked = 0; - mystery_box.zbarrier set_magic_box_zbarrier_state( "player_controlled" ); - mystery_box.zbarrier setclientfield( "magicbox_runes", 1 ); - _k608 = getNextArrayKey( _a608, _k608 ); - } -} - -disable_mystery_boxes_in_zone() -{ - _a621 = self.mystery_boxes; - _k621 = getFirstArrayKey( _a621 ); - while ( isDefined( _k621 ) ) - { - mystery_box = _a621[ _k621 ]; - mystery_box.is_locked = 1; - mystery_box.zbarrier set_magic_box_zbarrier_state( "zombie_controlled" ); - mystery_box.zbarrier setclientfield( "magicbox_runes", 0 ); - _k621 = getNextArrayKey( _a621, _k621 ); - } -} - -get_perk_machine_trigger_from_vending_entity( str_vending_machine_targetname ) -{ - e_trigger = getent( str_vending_machine_targetname, "target" ); -/# - assert( isDefined( e_trigger ), "get_perk_machine_trigger_from_vending_entity couldn't find perk machine trigger with target = " + str_vending_machine_targetname ); -#/ - return e_trigger; -} - -check_perk_machine_valid( player ) -{ - if ( isDefined( self.script_noteworthy ) && isinarray( level.zone_capture.perk_machines_always_on, self.script_noteworthy ) ) - { - b_machine_valid = 1; - } - else - { -/# - assert( isDefined( self.str_zone_name ), "str_zone_name field missing on perk machine! This is required by the zone capture system!" ); -#/ - b_machine_valid = level.zone_capture.zones[ self.str_zone_name ] ent_flag( "player_controlled" ); - } - if ( !b_machine_valid ) - { - player create_and_play_dialog( "lockdown", "power_off" ); - } - return b_machine_valid; -} - -init_capture_zone() -{ -/# - assert( isDefined( self.script_noteworthy ), "capture zone struct is missing script_noteworthy KVP! This is required for init_capture_zone()" ); -#/ - if ( !isDefined( level.zone_capture ) ) - { - level.zone_capture = spawnstruct(); - } - if ( !isDefined( level.zone_capture.zones ) ) - { - level.zone_capture.zones = []; - } -/# - assert( !isDefined( level.zone_capture.zones[ self.script_noteworthy ] ), "init_capture_zone() attempting to initialize an existing zone with name '" + self.script_noteworthy + "'" ); -#/ - self.n_current_progress = 0; - self.n_last_progress = 0; - self setup_generator_unitrigger(); - self.str_zone = get_zone_from_position( self.origin, 1 ); - self.sndent = spawn( "script_origin", self.origin ); -/# - assert( isDefined( self.script_int ), "script_int KVP is required by init_capture_zone() to identify the objective index, but it's missing on zone '" + self.script_noteworthy + "'" ); -#/ - self ent_flag_init( "attacked_by_recapture_zombies" ); - self ent_flag_init( "current_recapture_target_zone" ); - self ent_flag_init( "player_controlled" ); - self ent_flag_init( "zone_contested" ); - self ent_flag_init( "zone_initialized" ); - level.zone_capture.zones[ self.script_noteworthy ] = self; - self set_zombie_controlled_area( 1 ); - self setup_zombie_attack_points(); - self ent_flag_set( "zone_initialized" ); - self thread wait_for_capture_trigger(); -} - -setup_generator_unitrigger() -{ - s_unitrigger_stub = spawnstruct(); - s_unitrigger_stub.origin = self.origin; - s_unitrigger_stub.angles = self.angles; - s_unitrigger_stub.radius = 32; - s_unitrigger_stub.script_length = 128; - s_unitrigger_stub.script_width = 128; - s_unitrigger_stub.script_height = 128; - s_unitrigger_stub.cursor_hint = "HINT_NOICON"; - s_unitrigger_stub.hint_string = &"ZM_TOMB_CAP"; - s_unitrigger_stub.hint_parm1 = [[ ::get_generator_capture_start_cost ]](); - s_unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - s_unitrigger_stub.require_look_at = 1; - s_unitrigger_stub.prompt_and_visibility_func = ::generator_trigger_prompt_and_visibility; - s_unitrigger_stub.generator_struct = self; - unitrigger_force_per_player_triggers( s_unitrigger_stub, 1 ); - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( s_unitrigger_stub, ::generator_unitrigger_think ); -} - -generator_trigger_prompt_and_visibility( e_player ) -{ - b_can_see_hint = 1; - s_zone = self.stub.generator_struct; - if ( s_zone ent_flag( "zone_contested" ) || s_zone ent_flag( "player_controlled" ) ) - { - b_can_see_hint = 0; - } - if ( flag( "zone_capture_in_progress" ) ) - { - self sethintstring( &"ZM_TOMB_ZCIP" ); - } - else - { - self sethintstring( &"ZM_TOMB_CAP", get_generator_capture_start_cost() ); - } - self setinvisibletoplayer( e_player, !b_can_see_hint ); - return b_can_see_hint; -} - -generator_unitrigger_think() -{ - self endon( "kill_trigger" ); - while ( 1 ) - { - self waittill( "trigger", e_player ); - while ( is_player_valid( e_player ) || e_player is_reviving_any() && e_player != self.parent_player ) - { - continue; - } - while ( e_player.score < get_generator_capture_start_cost() ) - { - e_player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_capture" ); - } - while ( flag( "zone_capture_in_progress" ) ) - { - continue; - } - self setinvisibletoall(); - self.stub.generator_struct notify( "start_generator_capture" ); - } -} - -setup_zombie_attack_points() -{ - self.zombie_attack_points = []; - v_right = anglesToRight( self.angles ); - self add_attack_points_from_anchor_origin( self.origin, 0, 52 ); - self add_attack_points_from_anchor_origin( self.origin + ( v_right * 170 ), 4, 32 ); - self add_attack_points_from_anchor_origin( self.origin + ( ( v_right * -1 ) * 170 ), 8, 32 ); -} - -add_attack_points_from_anchor_origin( v_origin, n_start_index, n_scale ) -{ - v_forward = anglesToForward( self.angles ); - v_right = anglesToRight( self.angles ); - self.zombie_attack_points[ n_start_index ] = init_attack_point( v_origin + ( v_forward * n_scale ), v_origin ); - self.zombie_attack_points[ n_start_index + 1 ] = init_attack_point( v_origin + ( v_right * n_scale ), v_origin ); - self.zombie_attack_points[ n_start_index + 2 ] = init_attack_point( v_origin + ( ( v_forward * -1 ) * n_scale ), v_origin ); - self.zombie_attack_points[ n_start_index + 3 ] = init_attack_point( v_origin + ( ( v_right * -1 ) * n_scale ), v_origin ); -} - -init_attack_point( v_origin, v_center_pillar ) -{ - s_temp = spawnstruct(); - s_temp.is_claimed = 0; - s_temp.claimed_by = undefined; - s_temp.origin = v_origin; - s_temp.inaccessible = 0; - s_temp.v_center_pillar = v_center_pillar; - return s_temp; -} - -wait_for_capture_trigger() -{ - while ( 1 ) - { - self waittill( "start_generator_capture", e_player ); - if ( !flag( "zone_capture_in_progress" ) ) - { - flag_set( "zone_capture_in_progress" ); - self.generator_cost = get_generator_capture_start_cost(); - e_player minus_to_player_score( self.generator_cost ); - e_player delay_thread( 2,5, ::create_and_play_dialog, "zone_capture", "capture_started" ); - self maps/mp/zm_tomb_capture_zones_ffotd::capture_event_start(); - self thread monitor_capture_zombies(); - self thread activate_capture_zone(); - self ent_flag_wait( "zone_contested" ); - capture_event_handle_ai_limit(); - self ent_flag_waitopen( "zone_contested" ); - self maps/mp/zm_tomb_capture_zones_ffotd::capture_event_end(); - wait 1; - if ( isDefined( e_player ) && self ent_flag( "player_controlled" ) ) - { - self refund_generator_cost_if_player_captured_it( e_player ); - } - } - else - { - flag_wait( "zone_capture_in_progress" ); - flag_waitopen( "zone_capture_in_progress" ); - } - capture_event_handle_ai_limit(); - if ( self ent_flag( "player_controlled" ) ) - { - self ent_flag_waitopen( "player_controlled" ); - } - } -} - -refund_generator_cost_if_player_captured_it( e_player ) -{ - if ( isinarray( self get_players_in_capture_zone(), e_player ) ) - { - n_refund_amount = self.generator_cost; - b_double_points_active = level.zombie_vars[ "allies" ][ "zombie_point_scalar" ] == 2; - n_multiplier = 1; - if ( b_double_points_active ) - { - n_multiplier = 0,5; - } - e_player add_to_player_score( int( n_refund_amount * n_multiplier ) ); - } -} - -get_generator_capture_start_cost() -{ - return 200 * get_players().size; -} - -capture_event_handle_ai_limit() -{ - n_capture_zombies_needed = calculate_capture_event_zombies_needed(); - level.zombie_ai_limit = 24 - n_capture_zombies_needed; - while ( get_current_zombie_count() > level.zombie_ai_limit ) - { - ai_zombie = get_zombie_to_delete(); - if ( isDefined( ai_zombie ) ) - { - ai_zombie thread delete_zombie_for_capture_event(); - } - wait_network_frame(); - } -} - -get_zombie_to_delete() -{ - ai_zombie = undefined; - a_zombies = get_round_enemy_array(); - if ( a_zombies.size > 0 ) - { - ai_zombie = random( a_zombies ); - } - return ai_zombie; -} - -delete_zombie_for_capture_event() -{ - if ( isDefined( self ) ) - { - playfx( level._effect[ "tesla_elec_kill" ], self.origin ); - self ghost(); - } - wait_network_frame(); - if ( isDefined( self ) ) - { - self delete(); - } -} - -calculate_capture_event_zombies_needed() -{ - n_capture_zombies_needed = get_capture_zombies_needed(); - n_recapture_zombies_needed = 0; - if ( flag( "recapture_event_in_progress" ) ) - { - n_recapture_zombies_needed = get_recapture_zombies_needed(); - } - return n_capture_zombies_needed + n_recapture_zombies_needed; -} - -get_capture_zombies_needed( b_per_zone ) -{ - if ( !isDefined( b_per_zone ) ) - { - b_per_zone = 0; - } - a_contested_zones = get_contested_zones(); - switch( a_contested_zones.size ) - { - case 0: - n_capture_zombies_needed = 0; - n_capture_zombies_needed_per_zone = 0; - break; - case 1: - n_capture_zombies_needed = 4; - n_capture_zombies_needed_per_zone = 4; - break; - case 2: - n_capture_zombies_needed = 6; - n_capture_zombies_needed_per_zone = 3; - break; - case 3: - n_capture_zombies_needed = 6; - n_capture_zombies_needed_per_zone = 2; - break; - case 4: - n_capture_zombies_needed = 8; - n_capture_zombies_needed_per_zone = 2; - break; - default: -/# - iprintlnbold( "get_capture_zombies_needed() unhandled case. active capture events = " + a_contested_zones.size ); -#/ - n_capture_zombies_needed = 2 * a_contested_zones.size; - n_capture_zombies_needed_per_zone = 2; - break; - } - if ( b_per_zone ) - { - b_capture_zombies_needed = n_capture_zombies_needed_per_zone; - } - return n_capture_zombies_needed; -} - -set_capture_zombies_needed_per_zone() -{ - a_contested_zones = get_contested_zones(); - n_zombies_needed_per_zone = get_capture_zombies_needed( 1 ); - _a1032 = a_contested_zones; - _k1032 = getFirstArrayKey( _a1032 ); - while ( isDefined( _k1032 ) ) - { - zone = _a1032[ _k1032 ]; - if ( zone ent_flag( "current_recapture_target_zone" ) ) - { - } - else - { - zone.capture_zombie_limit = n_zombies_needed_per_zone; - } - _k1032 = getNextArrayKey( _a1032, _k1032 ); - } - return n_zombies_needed_per_zone; -} - -get_recapture_zombies_needed() -{ - if ( level.is_forever_solo_game ) - { - n_recapture_zombies_needed = 4; - } - else - { - n_recapture_zombies_needed = 6; - } - return n_recapture_zombies_needed; -} - -activate_capture_zone( b_show_emergence_holes ) -{ - if ( !isDefined( b_show_emergence_holes ) ) - { - b_show_emergence_holes = 1; - } - if ( !flag( "recapture_event_in_progress" ) ) - { - self thread generator_initiated_vo(); - } - self.a_emergence_hole_structs = getstructarray( self.target, "targetname" ); - self show_emergence_holes( b_show_emergence_holes ); - if ( flag( "recapture_event_in_progress" ) && self ent_flag( "current_recapture_target_zone" ) ) - { - flag_wait_any( "generator_under_attack", "recapture_zombies_cleared" ); - if ( flag( "recapture_zombies_cleared" ) ) - { - return; - } - } - self capture_progress_think(); - self destroy_emergence_holes(); -} - -show_emergence_holes( b_show_emergence_holes ) -{ - self destroy_emergence_holes(); - while ( b_show_emergence_holes ) - { - self.a_spawner_holes = []; - self.a_emergence_holes = []; - _a1097 = self.a_emergence_hole_structs; - _k1097 = getFirstArrayKey( _a1097 ); - while ( isDefined( _k1097 ) ) - { - s_spawner_hole = _a1097[ _k1097 ]; - self.a_emergence_holes[ self.a_emergence_holes.size ] = s_spawner_hole emergence_hole_spawn(); - _k1097 = getNextArrayKey( _a1097, _k1097 ); - } - } -} - -destroy_emergence_holes() -{ - while ( isDefined( self.a_emergence_holes ) && self.a_emergence_holes.size > 0 ) - { - _a1108 = self.a_emergence_holes; - _k1108 = getFirstArrayKey( _a1108 ); - while ( isDefined( _k1108 ) ) - { - m_emergence_hole = _a1108[ _k1108 ]; - if ( isDefined( m_emergence_hole ) ) - { - m_emergence_hole setclientfield( "zone_capture_emergence_hole", 0 ); - m_emergence_hole ghost(); - m_emergence_hole thread delete_self_after_time( randomfloatrange( 0,5, 2 ) ); - } - wait_network_frame(); - _k1108 = getNextArrayKey( _a1108, _k1108 ); - } - } -} - -delete_self_after_time( n_time ) -{ - wait n_time; - if ( isDefined( self ) ) - { - self delete(); - } -} - -monitor_capture_zombies() -{ - self ent_flag_wait( "zone_contested" ); - e_spawner_capture_zombie = getent( "capture_zombie_spawner", "targetname" ); - self.capture_zombies = []; - self.capture_zombie_limit = self set_capture_zombies_needed_per_zone(); - while ( self ent_flag( "zone_contested" ) ) - { - self.capture_zombies = array_removedead( self.capture_zombies ); - if ( self.capture_zombies.size < self.capture_zombie_limit ) - { - ai = spawn_zombie( e_spawner_capture_zombie ); - s_spawn_point = self get_emergence_hole_spawn_point(); - ai thread [[ level.zone_capture.spawn_func_capture_zombie ]]( self, s_spawn_point ); - self.capture_zombies[ self.capture_zombies.size ] = ai; - } - wait 0,5; - } -} - -monitor_recapture_zombies() -{ - e_spawner_capture_zombie = getent( "capture_zombie_spawner", "targetname" ); - self.capture_zombie_limit = get_recapture_zombies_needed(); - n_capture_zombie_spawns = 0; - self thread play_vo_when_generator_is_attacked(); - while ( flag( "recapture_event_in_progress" ) && n_capture_zombie_spawns < self.capture_zombie_limit ) - { - level.zone_capture.recapture_zombies = array_removedead( level.zone_capture.recapture_zombies ); - ai = spawn_zombie( e_spawner_capture_zombie ); - n_capture_zombie_spawns++; - s_spawn_point = self get_emergence_hole_spawn_point(); - ai thread [[ level.zone_capture.spawn_func_recapture_zombie ]]( self, s_spawn_point ); - level.zone_capture.recapture_zombies[ level.zone_capture.recapture_zombies.size ] = ai; - wait 0,5; - } - level monitor_recapture_zombie_count(); -} - -play_vo_when_generator_is_attacked() -{ - self endon( "zone_contested" ); - level endon( "recapture_event_in_progress" ); - self waittill( "zombies_attacking_generator" ); - broadcast_vo_category_to_team( "recapture_generator_attacked", 3,5 ); -} - -get_emergence_hole_spawn_point() -{ - while ( 1 ) - { - if ( isDefined( self.a_emergence_hole_structs ) && self.a_emergence_hole_structs.size > 0 ) - { - s_spawn_point = self get_unused_emergence_hole_spawn_point(); - s_spawn_point.spawned_zombie = 1; - return s_spawn_point; - } - else - { - self.a_emergence_hole_structs = getstructarray( self.target, "targetname" ); - } - wait 0,05; - } -} - -get_unused_emergence_hole_spawn_point() -{ - a_valid_spawn_points = []; - b_all_points_used = 0; - while ( !a_valid_spawn_points.size ) - { - _a1237 = self.a_emergence_hole_structs; - _k1237 = getFirstArrayKey( _a1237 ); - while ( isDefined( _k1237 ) ) - { - s_emergence_hole = _a1237[ _k1237 ]; - if ( !isDefined( s_emergence_hole.spawned_zombie ) || b_all_points_used ) - { - s_emergence_hole.spawned_zombie = 0; - } - if ( !s_emergence_hole.spawned_zombie ) - { - a_valid_spawn_points[ a_valid_spawn_points.size ] = s_emergence_hole; - } - _k1237 = getNextArrayKey( _a1237, _k1237 ); - } - if ( !a_valid_spawn_points.size ) - { - b_all_points_used = 1; - } - } - s_spawn_point = random( a_valid_spawn_points ); - return s_spawn_point; -} - -emergence_hole_spawn() -{ - m_emergence_hole = spawn( "script_model", self.origin ); - m_emergence_hole.angles = self.angles; - m_emergence_hole setmodel( "p6_zm_tm_zone_capture_hole" ); - wait_network_frame(); - m_emergence_hole setclientfield( "zone_capture_emergence_hole", 1 ); - return m_emergence_hole; -} - -init_zone_capture_zombie_common( s_spawn_point ) -{ - self setphysparams( 15, 0, 72 ); - self.ignore_enemy_count = 1; - self dug_zombie_rise( s_spawn_point ); - self playsound( "zmb_vocals_capzomb_spawn" ); - self setclientfield( "zone_capture_zombie", 1 ); - self init_anim_rate(); -} - -init_anim_rate() -{ - self setclientfield( "anim_rate", 1 ); - n_rate = self getclientfield( "anim_rate" ); - self setentityanimrate( n_rate ); -} - -zone_capture_gib_think( refs, point, weaponname ) -{ - if ( isDefined( self.is_recapture_zombie ) && self.is_recapture_zombie ) - { - arrayremovevalue( refs, "right_leg", 0 ); - arrayremovevalue( refs, "left_leg", 0 ); - arrayremovevalue( refs, "no_legs", 0 ); - } - return refs; -} - -init_capture_zombie( zone_struct, s_spawn_point ) -{ - self endon( "death" ); - self init_zone_capture_zombie_common( s_spawn_point ); - if ( isDefined( self.zombie_move_speed ) && self.zombie_move_speed == "walk" ) - { - self.zombie_move_speed = "run"; - self set_zombie_run_cycle( "run" ); - } - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - find_flesh_struct_string = "find_flesh"; - self notify( "zombie_custom_think_done" ); - self thread capture_zombies_only_attack_nearby_players( zone_struct ); -} - -init_recapture_zombie( zone_struct, s_spawn_point ) -{ - self endon( "death" ); - self.is_recapture_zombie = 1; - self init_zone_capture_zombie_common( s_spawn_point ); - self.goalradius = 30; - self.zombie_move_speed = "sprint"; - self.s_attack_generator = zone_struct; - self.attacking_new_generator = 1; - self.attacking_point = undefined; - self thread recapture_zombie_poi_think(); - while ( 1 ) - { - self.is_attacking_zone = 0; - if ( self.zombie_has_point_of_interest ) - { - v_attack_origin = self.point_of_interest; - } - else - { - if ( self.attacking_new_generator || !isDefined( self.attacking_point ) ) - { - if ( isDefined( self.attacking_point ) ) - { - self.attacking_point unclaim_attacking_point(); - } - self.attacking_point = self get_unclaimed_attack_point( self.s_attack_generator ); - } - v_attack_origin = self.attacking_point.origin; - } - self setgoalpos( v_attack_origin ); - self waittill_either( "goal", "poi_state_changed" ); - if ( !self.zombie_has_point_of_interest ) - { - while ( distance( self.attacking_point.origin, self.origin ) > 50 ) - { - continue; - } - self.is_attacking_zone = 1; - if ( !isDefined( level.zone_capture.recapture_target ) || !isDefined( self.s_attack_generator.script_noteworthy ) && isDefined( level.zone_capture.recapture_target ) && isDefined( self.s_attack_generator.script_noteworthy ) && level.zone_capture.recapture_target == self.s_attack_generator.script_noteworthy ) - { - flag_set( "generator_under_attack" ); - self.s_attack_generator ent_flag_set( "attacked_by_recapture_zombies" ); - self.attacking_new_generator = 0; - zone_struct notify( "zombies_attacking_generator" ); - } - } - else - { - if ( isDefined( self.attacking_point ) ) - { - self.attacking_point unclaim_attacking_point(); - } - } - self play_melee_attack_animation(); - } -} - -capture_zombie_rise_fx( ai_zombie ) -{ - playfx( level._effect[ "zone_capture_zombie_spawn" ], self.origin, anglesToForward( self.angles ), anglesToUp( self.angles ) ); -} - -get_unclaimed_attack_point( s_zone ) -{ - s_zone clean_up_unused_attack_points(); - n_claimed_center = s_zone get_claimed_attack_points_between_indicies( 0, 3 ); - n_claimed_left = s_zone get_claimed_attack_points_between_indicies( 4, 7 ); - n_claimed_right = s_zone get_claimed_attack_points_between_indicies( 8, 11 ); - b_use_center_pillar = n_claimed_center < 3; - b_use_left_pillar = n_claimed_left < 1; - b_use_right_pillar = n_claimed_right < 1; - if ( b_use_center_pillar ) - { - a_valid_attack_points = s_zone get_unclaimed_attack_points_between_indicies( 0, 3 ); - } - else if ( b_use_left_pillar ) - { - a_valid_attack_points = s_zone get_unclaimed_attack_points_between_indicies( 4, 7 ); - } - else if ( b_use_right_pillar ) - { - a_valid_attack_points = s_zone get_unclaimed_attack_points_between_indicies( 8, 11 ); - } - else - { - a_valid_attack_points = s_zone get_unclaimed_attack_points_between_indicies( 0, 11 ); - } - if ( a_valid_attack_points.size == 0 ) - { - a_valid_attack_points = s_zone get_unclaimed_attack_points_between_indicies( 0, 11 ); - } -/# - assert( a_valid_attack_points.size > 0, "get_unclaimed_attack_point() couldn't find any valid attack points in zone " + s_zone.script_noteworthy ); -#/ - s_attack_point = random( a_valid_attack_points ); - s_attack_point.is_claimed = 1; - s_attack_point.claimed_by = self; - return s_attack_point; -} - -clean_up_unused_attack_points() -{ - _a1472 = self.zombie_attack_points; - _k1472 = getFirstArrayKey( _a1472 ); - while ( isDefined( _k1472 ) ) - { - s_attack_point = _a1472[ _k1472 ]; - if ( s_attack_point.is_claimed && !isDefined( s_attack_point.claimed_by ) ) - { - s_attack_point.is_claimed = 0; - s_attack_point.claimed_by = undefined; - } - _k1472 = getNextArrayKey( _a1472, _k1472 ); - } -} - -get_unclaimed_attack_points_between_indicies( n_start, n_end ) -{ - a_valid_attack_points = []; - i = n_start; - while ( i < n_end ) - { - if ( !self.zombie_attack_points[ i ].is_claimed && !self.zombie_attack_points[ i ].inaccessible ) - { - a_valid_attack_points[ a_valid_attack_points.size ] = self.zombie_attack_points[ i ]; - } - i++; - } - return a_valid_attack_points; -} - -get_claimed_attack_points_between_indicies( n_start, n_end ) -{ - a_valid_points = []; - i = n_start; - while ( i < n_end ) - { - if ( self.zombie_attack_points[ i ].is_claimed ) - { - a_valid_points[ a_valid_points.size ] = self.zombie_attack_points[ i ]; - } - i++; - } - return a_valid_points.size; -} - -unclaim_attacking_point() -{ - self.is_claimed = 0; - self.claimed_by = undefined; -} - -clear_all_zombie_attack_points_in_zone() -{ - _a1523 = self.zombie_attack_points; - _k1523 = getFirstArrayKey( _a1523 ); - while ( isDefined( _k1523 ) ) - { - s_attack_point = _a1523[ _k1523 ]; - s_attack_point unclaim_attacking_point(); - _k1523 = getNextArrayKey( _a1523, _k1523 ); - } -} - -capture_zombies_only_attack_nearby_players( s_zone ) -{ - self endon( "death" ); - n_goal_radius = self.goalradius; - while ( 1 ) - { - self.goalradius = n_goal_radius; - while ( self should_capture_zombie_attack_generator( s_zone ) ) - { - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - self.goalradius = 30; - if ( !isDefined( self.attacking_point ) ) - { - self.attacking_point = self get_unclaimed_attack_point( s_zone ); - } - self setgoalpos( self.attacking_point.origin ); - self thread cancel_generator_attack_if_player_gets_close_to_generator( s_zone ); - str_notify = self waittill_any_return( "goal", "stop_attacking_generator" ); - if ( !isDefined( str_notify ) || !isDefined( "stop_attacking_generator" ) && isDefined( str_notify ) && isDefined( "stop_attacking_generator" ) && str_notify == "stop_attacking_generator" ) - { - self.attacking_point unclaim_attacking_point(); - break; - } - else - { - self play_melee_attack_animation(); - } - } - wait 0,5; - } -} - -cancel_generator_attack_if_player_gets_close_to_generator( s_zone ) -{ - self notify( "generator_attack_cancel_think" ); - self endon( "generator_attack_cancel_think" ); - self endon( "death" ); - while ( 1 ) - { - if ( !self should_capture_zombie_attack_generator( s_zone ) ) - { - self notify( "stop_attacking_generator" ); - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - return; - } - else - { - wait randomfloatrange( 0,2, 1,5 ); - } - } -} - -should_capture_zombie_attack_generator( s_zone ) -{ - a_players = get_players(); - a_valid_targets = arraysort( a_players, s_zone.origin, 1, undefined, 700 ); - _a1598 = a_players; - _k1598 = getFirstArrayKey( _a1598 ); - while ( isDefined( _k1598 ) ) - { - player = _a1598[ _k1598 ]; - if ( !isDefined( self.ignore_player ) ) - { - self.ignore_player = []; - } - if ( isinarray( a_valid_targets, player ) ) - { - b_is_valid_target = is_player_valid( player ); - } - b_is_currently_ignored = isinarray( self.ignore_player, player ); - if ( b_is_valid_target && b_is_currently_ignored ) - { - arrayremovevalue( self.ignore_player, player, 0 ); - } - else - { - if ( !b_is_valid_target && !b_is_currently_ignored ) - { - self.ignore_player[ self.ignore_player.size ] = player; - } - } - _k1598 = getNextArrayKey( _a1598, _k1598 ); - } - if ( isDefined( self.enemy ) ) - { - if ( a_valid_targets.size != 0 ) - { - b_should_attack_generator = self.ignore_player.size == a_players.size; - } - } - return b_should_attack_generator; -} - -play_melee_attack_animation() -{ - self endon( "death" ); - self endon( "poi_state_changed" ); - v_angles = self.angles; - if ( isDefined( self.attacking_point ) ) - { - v_angles = self.attacking_point.v_center_pillar - self.origin; - v_angles = vectorToAngle( ( v_angles[ 0 ], v_angles[ 1 ], 0 ) ); - } - self animscripted( self.origin, v_angles, "zm_generator_melee" ); - while ( 1 ) - { - self waittill( "static_melee_anim", note ); - if ( note == "end" ) - { - return; - } - else - { - } - } -} - -recapture_zombie_poi_think() -{ - self endon( "death" ); - self.zombie_has_point_of_interest = 0; - while ( isDefined( self ) && isalive( self ) ) - { - if ( isDefined( level._poi_override ) ) - { - zombie_poi = self [[ level._poi_override ]](); - } - if ( !isDefined( zombie_poi ) ) - { - zombie_poi = self get_zombie_point_of_interest( self.origin ); - } - self.using_poi_last_check = self.zombie_has_point_of_interest; - if ( isDefined( zombie_poi ) && isarray( zombie_poi ) && isDefined( zombie_poi[ 1 ] ) ) - { - self.goalradius = 16; - self.zombie_has_point_of_interest = 1; - self.is_attacking_zone = 0; - self.point_of_interest = zombie_poi[ 0 ]; - } - else - { - self.goalradius = 30; - self.zombie_has_point_of_interest = 0; - self.point_of_interest = undefined; - zombie_poi = undefined; - } - if ( self.using_poi_last_check != self.zombie_has_point_of_interest ) - { - self notify( "poi_state_changed" ); - self stopanimscripted( 0,2 ); - } - wait 1; - } -} - -kill_all_capture_zombies() -{ - while ( isDefined( self.capture_zombies ) && self.capture_zombies.size > 0 ) - { - _a1702 = self.capture_zombies; - _k1702 = getFirstArrayKey( _a1702 ); - while ( isDefined( _k1702 ) ) - { - zombie = _a1702[ _k1702 ]; - if ( isDefined( zombie ) && isalive( zombie ) ) - { - playfx( level._effect[ "tesla_elec_kill" ], zombie.origin ); - zombie dodamage( zombie.health + 100, zombie.origin ); - } - wait_network_frame(); - _k1702 = getNextArrayKey( _a1702, _k1702 ); - } - self.capture_zombies = array_removedead( self.capture_zombies ); - } - self.capture_zombies = []; -} - -kill_all_recapture_zombies() -{ - while ( isDefined( level.zone_capture.recapture_zombies ) && level.zone_capture.recapture_zombies.size > 0 ) - { - _a1726 = level.zone_capture.recapture_zombies; - _k1726 = getFirstArrayKey( _a1726 ); - while ( isDefined( _k1726 ) ) - { - zombie = _a1726[ _k1726 ]; - if ( isDefined( zombie ) && isalive( zombie ) ) - { - playfx( level._effect[ "tesla_elec_kill" ], zombie.origin ); - zombie dodamage( zombie.health + 100, zombie.origin ); - } - wait_network_frame(); - _k1726 = getNextArrayKey( _a1726, _k1726 ); - } - level.zone_capture.recapture_zombies = array_removedead( level.zone_capture.recapture_zombies ); - } - level.zone_capture.recapture_zombies = []; -} - -is_capture_area_occupied( parent_zone ) -{ - if ( parent_zone.is_occupied ) - { - return 1; - } - _a1754 = parent_zone.child_capture_zones; - _k1754 = getFirstArrayKey( _a1754 ); - while ( isDefined( _k1754 ) ) - { - s_child_zone = _a1754[ _k1754 ]; - if ( s_child_zone.is_occupied ) - { - return 1; - } - _k1754 = getNextArrayKey( _a1754, _k1754 ); - } - return 0; -} - -set_player_controlled_area() -{ - level.zone_capture.last_zone_captured = self; - self set_player_controlled_zone(); - self play_pap_anim( 1 ); -} - -update_captured_zone_count() -{ - level.total_capture_zones = get_captured_zone_count(); - if ( level.total_capture_zones == 6 ) - { - flag_set( "all_zones_captured" ); - } - else - { - flag_clear( "all_zones_captured" ); - } -} - -get_captured_zone_count() -{ - n_player_controlled_zones = 0; - _a1795 = level.zone_capture.zones; - _k1795 = getFirstArrayKey( _a1795 ); - while ( isDefined( _k1795 ) ) - { - generator = _a1795[ _k1795 ]; - if ( generator ent_flag( "player_controlled" ) ) - { - n_player_controlled_zones++; - } - _k1795 = getNextArrayKey( _a1795, _k1795 ); - } - return n_player_controlled_zones; -} - -get_contested_zone_count() -{ - return get_contested_zones().size; -} - -get_contested_zones() -{ - a_contested_zones = []; - _a1815 = level.zone_capture.zones; - _k1815 = getFirstArrayKey( _a1815 ); - while ( isDefined( _k1815 ) ) - { - generator = _a1815[ _k1815 ]; - if ( generator ent_flag( "zone_contested" ) ) - { - a_contested_zones[ a_contested_zones.size ] = generator; - } - _k1815 = getNextArrayKey( _a1815, _k1815 ); - } - return a_contested_zones; -} - -set_player_controlled_zone() -{ - self ent_flag_set( "player_controlled" ); - self ent_flag_clear( "attacked_by_recapture_zombies" ); - level setclientfield( "zone_capture_hud_generator_" + self.script_int, 1 ); - level setclientfield( "zone_capture_monolith_crystal_" + self.script_int, 0 ); - if ( !isDefined( self.perk_fx_func ) || [[ self.perk_fx_func ]]() ) - { - level setclientfield( "zone_capture_perk_machine_smoke_fx_" + self.script_int, 1 ); - } - self ent_flag_set( "player_controlled" ); - update_captured_zone_count(); - self enable_perk_machines_in_zone(); - self enable_random_perk_machines_in_zone(); - self enable_mystery_boxes_in_zone(); - level notify( "zone_captured_by_player" ); -} - -set_zombie_controlled_area( b_is_level_initializing ) -{ - if ( !isDefined( b_is_level_initializing ) ) - { - b_is_level_initializing = 0; - } - update_captured_zone_count(); - if ( b_is_level_initializing ) - { - level setclientfield( "state_" + self.script_noteworthy, 3 ); - wait_network_frame(); - level setclientfield( "state_" + self.script_noteworthy, 0 ); - } - if ( self ent_flag( "player_controlled" ) ) - { - flag_set( "generator_lost_to_recapture_zombies" ); - } - self set_zombie_controlled_zone( b_is_level_initializing ); - self play_pap_anim( 0 ); -} - -play_pap_anim( b_assemble ) -{ - level setclientfield( "packapunch_anim", get_captured_zone_count() ); -} - -set_zombie_controlled_zone( b_is_level_initializing ) -{ - if ( !isDefined( b_is_level_initializing ) ) - { - b_is_level_initializing = 0; - } - n_hud_state = 2; - if ( b_is_level_initializing ) - { - n_hud_state = 0; - } - self ent_flag_clear( "player_controlled" ); - level setclientfield( "zone_capture_hud_generator_" + self.script_int, n_hud_state ); - level setclientfield( "zone_capture_monolith_crystal_" + self.script_int, 1 ); - level setclientfield( "zone_capture_perk_machine_smoke_fx_" + self.script_int, 0 ); - update_captured_zone_count(); - self disable_perk_machines_in_zone(); - self disable_random_perk_machines_in_zone(); - self disable_mystery_boxes_in_zone(); -} - -capture_progress_think() -{ - self init_capture_progress(); - self clear_zone_objective_index(); - self show_zone_capture_objective( 1 ); - self get_zone_objective_index(); - while ( self ent_flag( "zone_contested" ) ) - { - a_players = get_players(); - a_players_in_capture_zone = self get_players_in_capture_zone(); - _a1930 = a_players; - _k1930 = getFirstArrayKey( _a1930 ); - while ( isDefined( _k1930 ) ) - { - player = _a1930[ _k1930 ]; - if ( isinarray( a_players_in_capture_zone, player ) ) - { - if ( !flag( "recapture_event_in_progress" ) || !self ent_flag( "current_recapture_target_zone" ) ) - { - objective_setplayerusing( self.n_objective_index, player ); - } - } - else - { - if ( is_player_valid( player ) ) - { - objective_clearplayerusing( self.n_objective_index, player ); - } - } - _k1930 = getNextArrayKey( _a1930, _k1930 ); - } - self.n_last_progress = self.n_current_progress; - self.n_current_progress += self get_progress_rate( a_players_in_capture_zone.size, a_players.size ); - if ( self.n_last_progress != self.n_current_progress ) - { - self.n_current_progress = clamp( self.n_current_progress, 0, 100 ); - objective_setprogress( self.n_objective_index, self.n_current_progress / 100 ); - self zone_capture_sound_state_think(); - level setclientfield( self.script_noteworthy, self.n_current_progress / 100 ); - self generator_set_state(); - if ( !flag( "recapture_event_in_progress" ) || !self ent_flag( "attacked_by_recapture_zombies" ) ) - { - b_set_color_to_white = a_players_in_capture_zone.size > 0; - if ( !flag( "recapture_event_in_progress" ) && self ent_flag( "current_recapture_target_zone" ) ) - { - b_set_color_to_white = 1; - } - level setclientfield( "zc_change_progress_bar_color", b_set_color_to_white ); - } - update_objective_on_momentum_change(); - if ( self.n_current_progress == 0 || self.n_current_progress == 100 && !self ent_flag( "attacked_by_recapture_zombies" ) ) - { - self ent_flag_clear( "zone_contested" ); - } - } - show_zone_capture_debug_info(); - wait 0,1; - } - self ent_flag_clear( "attacked_by_recapture_zombies" ); - self handle_generator_capture(); - self clear_all_zombie_attack_points_in_zone(); -} - -update_objective_on_momentum_change() -{ - if ( self ent_flag( "current_recapture_target_zone" ) && !flag( "recapture_event_in_progress" ) && self.n_objective_index == 1 && self.n_current_progress > self.n_last_progress ) - { - self clear_zone_objective_index(); - self show_zone_capture_objective( 1 ); - level setclientfield( "zc_change_progress_bar_color", 1 ); - } -} - -get_zone_objective_index() -{ - if ( !isDefined( self.n_objective_index ) ) - { - if ( self ent_flag( "current_recapture_target_zone" ) ) - { - if ( flag( "recapture_event_in_progress" ) ) - { - n_objective = 1; - } - else - { - n_objective = 2; - } - } - else - { - n_objective = 0; - } - self.n_objective_index = n_objective; - } - return self.n_objective_index; -} - -get_zones_using_objective_index( n_index ) -{ - n_zones_using_objective_index = 0; - _a2040 = level.zone_capture.zones; - _k2040 = getFirstArrayKey( _a2040 ); - while ( isDefined( _k2040 ) ) - { - zone = _a2040[ _k2040 ]; - if ( isDefined( zone.n_objective_index ) && zone.n_objective_index == n_index ) - { - n_zones_using_objective_index++; - } - _k2040 = getNextArrayKey( _a2040, _k2040 ); - } - return n_zones_using_objective_index; -} - -zone_capture_sound_state_think() -{ - if ( !isDefined( self.is_playing_audio ) ) - { - self.is_playing_audio = 0; - } - if ( self.n_current_progress > self.n_last_progress ) - { - if ( self.is_playing_audio ) - { - self.sndent stoploopsound(); - self.is_playing_audio = 0; - } - } - else - { - if ( !self.is_playing_audio && flag( "generator_under_attack" ) ) - { - self.sndent playloopsound( "zmb_capturezone_generator_alarm", 0,25 ); - self.is_playing_audio = 1; - } - } -} - -handle_generator_capture() -{ - level setclientfield( "zc_change_progress_bar_color", 0 ); - self show_zone_capture_objective( 0 ); - if ( self.n_current_progress == 100 ) - { - self players_capture_zone(); - self kill_all_capture_zombies(); - } - else if ( self.n_current_progress == 0 ) - { - while ( self ent_flag( "player_controlled" ) ) - { - self.sndent stoploopsound( 0,25 ); - self thread generator_deactivated_vo(); - self.is_playing_audio = 0; - _a2095 = get_players(); - _k2095 = getFirstArrayKey( _a2095 ); - while ( isDefined( _k2095 ) ) - { - player = _a2095[ _k2095 ]; - player maps/mp/zombies/_zm_stats::increment_client_stat( "tomb_generator_lost", 0 ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "tomb_generator_lost" ); - _k2095 = getNextArrayKey( _a2095, _k2095 ); - } - } - self set_zombie_controlled_area(); - if ( flag( "recapture_event_in_progress" ) && get_captured_zone_count() > 0 ) - { - } - else - { - self kill_all_capture_zombies(); - } - } - if ( get_contested_zone_count() == 0 ) - { - flag_clear( "zone_capture_in_progress" ); - } -} - -init_capture_progress() -{ - if ( !isDefined( level.zone_capture.rate_capture ) ) - { - level.zone_capture.rate_capture = get_update_rate( 10 ); - } - if ( !isDefined( level.zone_capture.rate_capture_solo ) ) - { - level.zone_capture.rate_capture_solo = get_update_rate( 12 ); - } - if ( !isDefined( level.zone_capture.rate_decay ) ) - { - level.zone_capture.rate_decay = get_update_rate( 20 ) * -1; - } - if ( !isDefined( level.zone_capture.rate_recapture ) ) - { - level.zone_capture.rate_recapture = get_update_rate( 40 ) * -1; - } - if ( !isDefined( level.zone_capture.rate_recapture_players ) ) - { - level.zone_capture.rate_recapture_players = get_update_rate( 10 ); - } - if ( !self ent_flag( "player_controlled" ) ) - { - self.n_current_progress = 0; - self ent_flag_clear( "attacked_by_recapture_zombies" ); - } - self ent_flag_set( "zone_contested" ); -} - -get_progress_rate( n_players_in_zone, n_players_total ) -{ - if ( flag( "recapture_event_in_progress" ) && self ent_flag( "current_recapture_target_zone" ) ) - { - if ( self get_recapture_attacker_count() > 0 ) - { - n_rate = level.zone_capture.rate_recapture; - } - else if ( !self ent_flag( "attacked_by_recapture_zombies" ) ) - { - n_rate = 0; - } - else - { - n_rate = level.zone_capture.rate_recapture_players; - } - } - else - { - if ( self ent_flag( "current_recapture_target_zone" ) ) - { - n_rate = level.zone_capture.rate_recapture_players; - } - else if ( n_players_in_zone > 0 ) - { - if ( isDefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) - { - n_rate = level.zone_capture.rate_capture_solo; - } - else - { - n_rate = level.zone_capture.rate_capture * ( n_players_in_zone / n_players_total ); - } - } - else - { - n_rate = level.zone_capture.rate_decay; - } - } - return n_rate; -} - -show_zone_capture_objective( b_show_objective ) -{ - self get_zone_objective_index(); - if ( b_show_objective ) - { - objective_position( self.n_objective_index, self.origin ); - objective_setgamemodeflags( self.n_objective_index, self.script_int ); - objective_state( self.n_objective_index, "active" ); - } - else - { - self clear_zone_objective_index(); - } -} - -clear_zone_objective_index() -{ - while ( isDefined( self.n_objective_index ) && get_zones_using_objective_index( self.n_objective_index ) < 2 ) - { - objective_state( self.n_objective_index, "invisible" ); - a_players = get_players(); - _a2205 = a_players; - _k2205 = getFirstArrayKey( _a2205 ); - while ( isDefined( _k2205 ) ) - { - player = _a2205[ _k2205 ]; - objective_clearplayerusing( self.n_objective_index, player ); - _k2205 = getNextArrayKey( _a2205, _k2205 ); - } - } - self.n_objective_index = undefined; -} - -hide_zone_objective_while_recapture_group_runs_to_next_generator( b_hide_icon ) -{ - self clear_zone_objective_index(); - flag_clear( "generator_under_attack" ); - if ( !b_hide_icon ) - { - recapture_zombie_group_icon_show(); - } - wait 1; - if ( !flag( "recapture_zombies_cleared" ) && !flag( "recapture_zombies_cleared" ) ) - { - self thread generator_compromised_vo(); - } -} - -recapture_zombie_group_icon_show() -{ - level endon( "recapture_zombies_cleared" ); - if ( isDefined( level.zone_capture.recapture_zombies ) && flag( "recapture_event_in_progress" ) ) - { - while ( !level.zone_capture.recapture_zombies.size ) - { - wait_network_frame(); - level.zone_capture.recapture_zombies = array_removedead( level.zone_capture.recapture_zombies ); - } - flag_waitopen( "generator_under_attack" ); - if ( level.zone_capture.recapture_zombies.size > 0 ) - { - ai_zombie = random( level.zone_capture.recapture_zombies ); - objective_state( 3, "active" ); - objective_onentity( 3, ai_zombie ); - ai_zombie thread recapture_zombie_icon_think(); - } - } -} - -recapture_zombie_icon_think() -{ - while ( isalive( self ) && !flag( "generator_under_attack" ) ) - { -/# - debugstar( self.origin, 20, ( 0, 0, 1 ) ); -#/ - wait 1; - } - recapture_zombie_group_icon_hide(); - wait_network_frame(); - if ( !flag( "recapture_zombies_cleared" ) ) - { - recapture_zombie_group_icon_show(); - } -} - -recapture_zombie_group_icon_hide() -{ - objective_state( 3, "invisible" ); - if ( isalive( self ) ) - { - objective_clearentity( 3 ); - } -} - -players_capture_zone() -{ - self.sndent playsound( "zmb_capturezone_success" ); - self.sndent stoploopsound( 0,25 ); - wait_network_frame(); - if ( !flag( "recapture_event_in_progress" ) && !self ent_flag( "player_controlled" ) ) - { - self thread zone_capture_complete_vo(); - } - reward_players_in_capture_zone(); - self set_player_controlled_area(); - wait_network_frame(); - playfx( level._effect[ "capture_complete" ], self.origin ); - level thread sndplaygeneratormusicstinger(); -} - -reward_players_in_capture_zone() -{ - b_challenge_exists = maps/mp/zombies/_zm_challenges::challenge_exists( "zc_zone_captures" ); - while ( !self ent_flag( "player_controlled" ) ) - { - _a2321 = get_players_in_capture_zone(); - _k2321 = getFirstArrayKey( _a2321 ); - while ( isDefined( _k2321 ) ) - { - player = _a2321[ _k2321 ]; - player notify( "completed_zone_capture" ); - player maps/mp/zombies/_zm_score::player_add_points( "bonus_points_powerup", 100 ); - if ( b_challenge_exists ) - { - player maps/mp/zombies/_zm_challenges::increment_stat( "zc_zone_captures" ); - } - player maps/mp/zombies/_zm_stats::increment_client_stat( "tomb_generator_captured", 0 ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "tomb_generator_captured" ); - _k2321 = getNextArrayKey( _a2321, _k2321 ); - } - } -} - -show_zone_capture_debug_info() -{ -/# - while ( getDvarInt( #"1AD074DA" ) > 0 ) - { - print3d( self.origin, "progress = " + self.n_current_progress, ( 0, 0, 1 ) ); - circle( groundtrace( self.origin, self.origin - vectorScale( ( 0, 0, 1 ), 1000 ), 0, undefined )[ "position" ], 220, ( 0, 0, 1 ), 0, 4 ); - _a2349 = self.zombie_attack_points; - n_index = getFirstArrayKey( _a2349 ); - while ( isDefined( n_index ) ) - { - attack_point = _a2349[ n_index ]; - if ( attack_point.inaccessible ) - { - v_color = ( 0, 0, 1 ); - } - else if ( attack_point.is_claimed ) - { - v_color = ( 0, 0, 1 ); - } - else - { - v_color = ( 0, 0, 1 ); - } - debugstar( attack_point.origin, 4, v_color ); - print3d( attack_point.origin + vectorScale( ( 0, 0, 1 ), 10 ), n_index, v_color, 1, 1, 4 ); - n_index = getNextArrayKey( _a2349, n_index ); -#/ - } - } -} - -get_players_in_capture_zone() -{ - a_players_in_capture_zone = []; - _a2376 = get_players(); - _k2376 = getFirstArrayKey( _a2376 ); - while ( isDefined( _k2376 ) ) - { - player = _a2376[ _k2376 ]; - if ( is_player_valid( player ) && distance2dsquared( player.origin, self.origin ) < 48400 && player.origin[ 2 ] > ( self.origin[ 2 ] + -20 ) ) - { - a_players_in_capture_zone[ a_players_in_capture_zone.size ] = player; - } - _k2376 = getNextArrayKey( _a2376, _k2376 ); - } - return a_players_in_capture_zone; -} - -get_update_rate( n_duration ) -{ - n_change_per_update = ( 100 / n_duration ) * 0,1; - return n_change_per_update; -} - -generator_set_state() -{ - n_generator_state = level getclientfield( "state_" + self.script_noteworthy ); - if ( self.n_current_progress == 0 ) - { - self generator_state_turn_off(); - } - else if ( n_generator_state == 0 && self.n_current_progress > 0 ) - { - self generator_state_turn_on(); - } - else - { - if ( self can_start_generator_power_up_anim() ) - { - self generator_state_power_up(); - return; - } - else - { - if ( n_generator_state == 2 && self.n_current_progress < self.n_last_progress ) - { - self generator_state_power_down(); - if ( !flag( "recapture_event_in_progress" ) ) - { - self thread generator_interrupted_vo(); - } - } - } - } -} - -generator_state_turn_on() -{ - level setclientfield( "state_" + self.script_noteworthy, 1 ); - self.n_time_started_generator = getTime(); -} - -generator_state_power_up() -{ - level setclientfield( "state_" + self.script_noteworthy, 2 ); -} - -generator_state_power_down() -{ - if ( self ent_flag( "attacked_by_recapture_zombies" ) ) - { - n_state = 5; - } - else - { - n_state = 3; - } - level setclientfield( "state_" + self.script_noteworthy, n_state ); -} - -generator_state_turn_off() -{ - level setclientfield( "state_" + self.script_noteworthy, 4 ); - self thread generator_turns_off_after_anim(); -} - -generator_turns_off_after_anim() -{ - wait getanimlength( %fxanim_zom_tomb_generator_end_anim ); - self generator_state_off(); -} - -generator_state_off() -{ - level setclientfield( "state_" + self.script_noteworthy, 0 ); -} - -can_start_generator_power_up_anim() -{ - if ( !isDefined( self.n_time_started_generator ) ) - { - self.n_time_started_generator = 0; - } - if ( !isDefined( self.n_time_start_anim ) ) - { - self.n_time_start_anim = getanimlength( %fxanim_zom_tomb_generator_start_anim ); - } - if ( self.n_current_progress > self.n_last_progress ) - { - return ( ( getTime() - self.n_time_started_generator ) * 0,001 ) > self.n_time_start_anim; - } -} - -get_recapture_attacker_count() -{ - n_zone_attacker_count = 0; - _a2475 = level.zone_capture.recapture_zombies; - _k2475 = getFirstArrayKey( _a2475 ); - while ( isDefined( _k2475 ) ) - { - zombie = _a2475[ _k2475 ]; - if ( isalive( zombie ) && isDefined( zombie.is_attacking_zone ) && zombie.is_attacking_zone && !isDefined( self.script_noteworthy ) || !isDefined( level.zone_capture.recapture_target ) && isDefined( self.script_noteworthy ) && isDefined( level.zone_capture.recapture_target ) && self.script_noteworthy == level.zone_capture.recapture_target ) - { - n_zone_attacker_count++; - } - _k2475 = getNextArrayKey( _a2475, _k2475 ); - } - return n_zone_attacker_count; -} - -watch_for_open_sesame() -{ -/# - level waittill( "open_sesame" ); - level.b_open_sesame = 1; - a_generators = getstructarray( "s_generator", "targetname" ); - _a2495 = a_generators; - _k2495 = getFirstArrayKey( _a2495 ); - while ( isDefined( _k2495 ) ) - { - s_generator = _a2495[ _k2495 ]; - s_temp = level.zone_capture.zones[ s_generator.script_noteworthy ]; - s_temp debug_set_generator_active(); - wait_network_frame(); - _k2495 = getNextArrayKey( _a2495, _k2495 ); -#/ - } -} - -debug_watch_for_zone_capture() -{ -/# - while ( 1 ) - { - level waittill( "force_zone_capture", n_zone ); - _a2510 = level.zone_capture.zones; - _k2510 = getFirstArrayKey( _a2510 ); - while ( isDefined( _k2510 ) ) - { - zone = _a2510[ _k2510 ]; - if ( zone.script_int == n_zone && !zone ent_flag( "player_controlled" ) ) - { - zone debug_set_generator_active(); - } - _k2510 = getNextArrayKey( _a2510, _k2510 ); - } -#/ - } -} - -debug_watch_for_zone_recapture() -{ -/# - while ( 1 ) - { - level waittill( "force_zone_recapture", n_zone ); - _a2526 = level.zone_capture.zones; - _k2526 = getFirstArrayKey( _a2526 ); - while ( isDefined( _k2526 ) ) - { - zone = _a2526[ _k2526 ]; - if ( zone.script_int == n_zone && zone ent_flag( "player_controlled" ) ) - { - zone debug_set_generator_inactive(); - } - _k2526 = getNextArrayKey( _a2526, _k2526 ); - } -#/ - } -} - -debug_set_generator_active() -{ -/# - self set_player_controlled_area(); - self.n_current_progress = 100; - self generator_state_power_up(); - level setclientfield( self.script_noteworthy, self.n_current_progress / 100 ); -#/ -} - -debug_set_generator_inactive() -{ -/# - self set_zombie_controlled_area(); - self.n_current_progress = 0; - self generator_state_turn_off(); - level setclientfield( self.script_noteworthy, self.n_current_progress / 100 ); -#/ -} - -set_magic_box_zbarrier_state( state ) -{ - i = 0; - while ( i < self getnumzbarrierpieces() ) - { - self hidezbarrierpiece( i ); - i++; - } - self notify( "zbarrier_state_change" ); - switch( state ) - { - case "away": - self showzbarrierpiece( 0 ); - self.state = "away"; - self.owner.is_locked = 0; - break; - case "arriving": - self showzbarrierpiece( 1 ); - self thread magic_box_arrives(); - self.state = "arriving"; - break; - case "initial": - self showzbarrierpiece( 1 ); - self thread magic_box_initial(); - thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.owner.unitrigger_stub, ::maps/mp/zombies/_zm_magicbox::magicbox_unitrigger_think ); - self.state = "close"; - break; - case "open": - self showzbarrierpiece( 2 ); - self thread maps/mp/zombies/_zm_magicbox_tomb::magic_box_opens(); - self.state = "open"; - break; - case "close": - self showzbarrierpiece( 2 ); - self thread maps/mp/zombies/_zm_magicbox_tomb::magic_box_closes(); - self.state = "close"; - break; - case "leaving": - self showzbarrierpiece( 1 ); - self thread magic_box_leaves(); - self.state = "leaving"; - self.owner.is_locked = 0; - break; - case "zombie_controlled": - if ( isDefined( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) && level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) - { - self showzbarrierpiece( 2 ); - self setclientfield( "magicbox_amb_fx", 0 ); - } - if ( self.state == "initial" || self.state == "close" ) - { - self showzbarrierpiece( 1 ); - self setclientfield( "magicbox_amb_fx", 1 ); - } - else - { - if ( self.state == "away" ) - { - self showzbarrierpiece( 0 ); - self setclientfield( "magicbox_amb_fx", 0 ); - } - else - { - if ( self.state == "open" || self.state == "leaving" ) - { - self showzbarrierpiece( 2 ); - self setclientfield( "magicbox_amb_fx", 0 ); - } - } - } - break; - case "player_controlled": - if ( self.state == "arriving" || self.state == "close" ) - { - self showzbarrierpiece( 2 ); - self setclientfield( "magicbox_amb_fx", 2 ); - break; - } - else - { - if ( self.state == "away" ) - { - self showzbarrierpiece( 0 ); - self setclientfield( "magicbox_amb_fx", 3 ); - } - break; - return; - default: - if ( isDefined( level.custom_magicbox_state_handler ) ) - { - self [[ level.custom_magicbox_state_handler ]]( state ); - } - break; - return; - } -} -} - -magic_box_trigger_update_prompt( player ) -{ - can_use = self magic_box_stub_update_prompt( player ); - if ( isDefined( self.stub.hint_string ) ) - { - if ( isDefined( self.stub.hint_parm1 ) ) - { - self sethintstring( self.stub.hint_string, self.stub.hint_parm1 ); - } - else - { - self sethintstring( self.stub.hint_string ); - } - } - return can_use; -} - -magic_box_stub_update_prompt( player ) -{ - self setcursorhint( "HINT_NOICON" ); - if ( !self trigger_visible_to_player( player ) ) - { - return 0; - } - self.stub.hint_parm1 = undefined; - if ( isDefined( self.stub.trigger_target.grab_weapon_hint ) && self.stub.trigger_target.grab_weapon_hint ) - { - self.stub.hint_string = &"ZOMBIE_TRADE_WEAPONS"; - } - else - { - if ( !level.zone_capture.zones[ self.stub.zone ] ent_flag( "player_controlled" ) ) - { - self.stub.hint_string = &"ZM_TOMB_ZC"; - return 0; - } - else - { - self.stub.hint_parm1 = self.stub.trigger_target.zombie_cost; - self.stub.hint_string = get_hint_string( self, "default_treasure_chest" ); - } - } - return 1; -} - -recapture_round_tracker() -{ - n_next_recapture_round = 10; - while ( 1 ) - { -/# - iprintln( "Next Recapture Round = " + n_next_recapture_round ); -#/ - level waittill_any( "between_round_over", "force_recapture_start" ); -/# - if ( getDvarInt( #"EF89C4FC" ) > 0 ) - { - n_next_recapture_round = level.round_number; -#/ - } - if ( level.round_number >= n_next_recapture_round && !flag( "zone_capture_in_progress" ) && get_captured_zone_count() >= get_player_controlled_zone_count_for_recapture() ) - { - n_next_recapture_round = level.round_number + randomintrange( 3, 6 ); - level thread recapture_round_start(); - } - } -} - -get_player_controlled_zone_count_for_recapture() -{ - n_zones_required = 4; -/# - if ( getDvarInt( #"EF89C4FC" ) > 0 ) - { - n_zones_required = 1; -#/ - } - return n_zones_required; -} - -get_recapture_zone( s_last_recapture_zone ) -{ - a_s_player_zones = []; - _a2770 = level.zone_capture.zones; - str_key = getFirstArrayKey( _a2770 ); - while ( isDefined( str_key ) ) - { - s_zone = _a2770[ str_key ]; - if ( s_zone ent_flag( "player_controlled" ) ) - { - a_s_player_zones[ str_key ] = s_zone; - } - str_key = getNextArrayKey( _a2770, str_key ); - } - s_recapture_zone = undefined; - while ( a_s_player_zones.size ) - { - if ( isDefined( s_last_recapture_zone ) ) - { - n_distance_closest = undefined; - _a2788 = a_s_player_zones; - _k2788 = getFirstArrayKey( _a2788 ); - while ( isDefined( _k2788 ) ) - { - s_zone = _a2788[ _k2788 ]; - n_distance = distancesquared( s_zone.origin, s_last_recapture_zone.origin ); - if ( !isDefined( n_distance_closest ) || n_distance < n_distance_closest ) - { - s_recapture_zone = s_zone; - n_distance_closest = n_distance; - } - _k2788 = getNextArrayKey( _a2788, _k2788 ); - } - } - else s_recapture_zone = random( a_s_player_zones ); -/# - while ( getDvarInt( #"8178CABA" ) > 0 ) - { - n_zone = getDvarInt( #"8178CABA" ); - _a2808 = level.zone_capture.zones; - _k2808 = getFirstArrayKey( _a2808 ); - while ( isDefined( _k2808 ) ) - { - zone = _a2808[ _k2808 ]; - if ( n_zone == zone.script_int && zone ent_flag( "player_controlled" ) ) - { - s_recapture_zone = zone; - break; - } - else - { - _k2808 = getNextArrayKey( _a2808, _k2808 ); -#/ - } - } - } - } - return s_recapture_zone; -} - -recapture_round_start() -{ - flag_set( "recapture_event_in_progress" ); - flag_clear( "recapture_zombies_cleared" ); - flag_clear( "generator_under_attack" ); - level.recapture_zombies_killed = 0; - b_is_first_generator_attack = 1; - s_recapture_target_zone = undefined; - capture_event_handle_ai_limit(); - recapture_round_audio_starts(); - while ( !flag( "recapture_zombies_cleared" ) && get_captured_zone_count() > 0 ) - { - s_recapture_target_zone = get_recapture_zone( s_recapture_target_zone ); - level.zone_capture.recapture_target = s_recapture_target_zone.script_noteworthy; - s_recapture_target_zone maps/mp/zm_tomb_capture_zones_ffotd::recapture_event_start(); - if ( b_is_first_generator_attack ) - { - s_recapture_target_zone thread monitor_recapture_zombies(); - } - set_recapture_zombie_attack_target( s_recapture_target_zone ); - s_recapture_target_zone thread generator_under_attack_warnings(); - s_recapture_target_zone ent_flag_set( "current_recapture_target_zone" ); - s_recapture_target_zone thread hide_zone_objective_while_recapture_group_runs_to_next_generator( b_is_first_generator_attack ); - s_recapture_target_zone activate_capture_zone( b_is_first_generator_attack ); - s_recapture_target_zone ent_flag_clear( "attacked_by_recapture_zombies" ); - s_recapture_target_zone ent_flag_clear( "current_recapture_target_zone" ); - if ( b_is_first_generator_attack && !s_recapture_target_zone ent_flag( "player_controlled" ) ) - { - delay_thread( 3, ::broadcast_vo_category_to_team, "recapture_started" ); - } - b_is_first_generator_attack = 0; - s_recapture_target_zone maps/mp/zm_tomb_capture_zones_ffotd::recapture_event_end(); - wait 0,05; - } - if ( s_recapture_target_zone.n_current_progress == 0 || s_recapture_target_zone.n_current_progress == 100 ) - { - s_recapture_target_zone handle_generator_capture(); - } - capture_event_handle_ai_limit(); - kill_all_recapture_zombies(); - recapture_round_audio_ends(); - flag_clear( "recapture_event_in_progress" ); - flag_clear( "generator_under_attack" ); -} - -broadcast_vo_category_to_team( str_category, n_delay ) -{ - if ( !isDefined( n_delay ) ) - { - n_delay = 1; - } - a_players = get_players(); - a_speakers = []; - e_speaker = get_random_speaker( a_players ); - a_speakers[ a_speakers.size ] = e_speaker; - arrayremovevalue( a_players, e_speaker ); - a_players = e_speaker get_players_too_far_to_hear( a_players ); - i = 0; - while ( i < a_speakers.size ) - { - a_speakers[ i ] delay_thread( n_delay, ::create_and_play_dialog, "zone_capture", str_category ); - i++; - } -} - -get_players_too_far_to_hear( a_players ) -{ - a_distant = []; - _a2921 = a_players; - _k2921 = getFirstArrayKey( _a2921 ); - while ( isDefined( _k2921 ) ) - { - player = _a2921[ _k2921 ]; - if ( distancesquared( player.origin, self.origin ) > 640000 && is_player_valid( player ) && !player isplayeronsamemachine( self ) ) - { - a_distant[ a_distant.size ] = player; - } - _k2921 = getNextArrayKey( _a2921, _k2921 ); - } - return a_distant; -} - -get_random_speaker( a_players ) -{ - if ( !isDefined( a_players ) ) - { - a_players = get_players(); - } - a_valid_players = []; - _a2942 = a_players; - _k2942 = getFirstArrayKey( _a2942 ); - while ( isDefined( _k2942 ) ) - { - player = _a2942[ _k2942 ]; - if ( is_player_valid( player ) ) - { - a_valid_players[ a_valid_players.size ] = player; - } - _k2942 = getNextArrayKey( _a2942, _k2942 ); - } - return random( a_valid_players ); -} - -set_recapture_zombie_attack_target( s_recapture_target_zone ) -{ - flag_clear( "generator_under_attack" ); - s_recapture_target_zone ent_flag_clear( "attacked_by_recapture_zombies" ); - _a2958 = level.zone_capture.recapture_zombies; - _k2958 = getFirstArrayKey( _a2958 ); - while ( isDefined( _k2958 ) ) - { - zombie = _a2958[ _k2958 ]; - zombie.is_attacking_zone = 0; - zombie.s_attack_generator = s_recapture_target_zone; - zombie.attacking_new_generator = 1; - _k2958 = getNextArrayKey( _a2958, _k2958 ); - } -} - -sndrecaptureroundloop() -{ - level endon( "sndEndRoundLoop" ); - wait 5; - ent = spawn( "script_origin", ( 0, 0, 1 ) ); - ent playloopsound( "mus_recapture_round_loop", 5 ); - ent thread sndrecaptureroundloop_stop(); -} - -sndrecaptureroundloop_stop() -{ - flag_wait( "recapture_zombies_cleared" ); - self stoploopsound( 2 ); - wait 2; - self delete(); -} - -monitor_recapture_zombie_count() -{ - while ( 1 ) - { - level.zone_capture.recapture_zombies = array_removedead( level.zone_capture.recapture_zombies ); - if ( level.zone_capture.recapture_zombies.size == 0 ) - { - flag_set( "recapture_zombies_cleared" ); - flag_clear( "recapture_event_in_progress" ); - flag_clear( "generator_under_attack" ); - if ( isDefined( level.zone_capture.recapture_target ) ) - { - level.zone_capture.zones[ level.zone_capture.recapture_target ] ent_flag_clear( "attacked_by_recapture_zombies" ); - level.zone_capture.recapture_target = undefined; - } - return; - } - else - { - wait 1; - } - } -} - -recapture_zombie_death_func() -{ - if ( isDefined( self.is_recapture_zombie ) && self.is_recapture_zombie ) - { - level.recapture_zombies_killed++; - while ( isDefined( self.attacker ) && isplayer( self.attacker ) && level.recapture_zombies_killed == get_recapture_zombies_needed() ) - { - self.attacker thread delay_thread( 2, ::create_and_play_dialog, "zone_capture", "recapture_prevented" ); - _a3017 = get_players(); - _k3017 = getFirstArrayKey( _a3017 ); - while ( isDefined( _k3017 ) ) - { - player = _a3017[ _k3017 ]; - player maps/mp/zombies/_zm_stats::increment_client_stat( "tomb_generator_defended", 0 ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "tomb_generator_defended" ); - _k3017 = getNextArrayKey( _a3017, _k3017 ); - } - } - if ( level.recapture_zombies_killed == get_recapture_zombies_needed() && flag( "generator_under_attack" ) ) - { - self drop_max_ammo_at_death_location(); - } - } -} - -drop_max_ammo_at_death_location() -{ - if ( isDefined( self ) ) - { - v_powerup_origin = groundtrace( self.origin + vectorScale( ( 0, 0, 1 ), 10 ), self.origin + vectorScale( ( 0, 0, 1 ), 150 ), 0, undefined, 1 )[ "position" ]; - } - if ( isDefined( v_powerup_origin ) ) - { - level thread maps/mp/zombies/_zm_powerups::specific_powerup_drop( "full_ammo", v_powerup_origin ); - } -} - -generator_under_attack_warnings() -{ - flag_wait_any( "generator_under_attack", "recapture_zombies_cleared" ); - if ( !flag( "recapture_zombies_cleared" ) ) - { - e_alarm_sound = spawn( "script_origin", self.origin ); - e_alarm_sound playloopsound( "zmb_capturezone_losing" ); - e_alarm_sound thread play_flare_effect(); - wait 0,5; - flag_waitopen( "generator_under_attack" ); - e_alarm_sound stoploopsound( 0,2 ); - wait 0,5; - e_alarm_sound delete(); - } -} - -play_flare_effect() -{ - self endon( "death" ); - n_end_time = getTime() + 5000; - while ( flag( "generator_under_attack" ) ) - { - playfx( level._effect[ "lght_marker_flare" ], self.origin ); - wait 4; - } -} - -recapture_round_audio_starts() -{ - level.music_round_override = 1; - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "dog_start" ); - level thread sndrecaptureroundloop(); -} - -recapture_round_audio_ends() -{ - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "dog_end" ); - level.music_round_override = 0; - level notify( "sndEndRoundLoop" ); -} - -custom_vending_power_on() -{ -} - -custom_vending_power_off() -{ -} - -generator_initiated_vo() -{ - e_vo_origin = spawn( "script_origin", self.origin ); - level.maxis_generator_vo = 1; - e_vo_origin playsoundwithnotify( "vox_maxi_generator_initiate_0", "vox_maxi_generator_initiate_0_done" ); - e_vo_origin waittill( "vox_maxi_generator_initiate_0_done" ); - level.maxis_generator_vo = 0; - e_vo_origin delete(); -} - -zone_capture_complete_vo() -{ - e_vo_origin = spawn( "script_origin", self.origin ); - e_vo_origin playsoundwithnotify( "vox_maxi_generator_process_complete_0", "vox_maxi_generator_process_complete_0_done" ); - e_vo_origin waittill( "vox_maxi_generator_process_complete_0_done" ); - e_vo_origin playsoundwithnotify( "vox_maxi_generator_" + self.script_int + "_activated_0", "vox_maxi_generator_" + self.script_int + "_activated_0_done" ); - e_vo_origin waittill( "vox_maxi_generator_" + self.script_int + "_activated_0_done" ); - e_vo_origin delete(); -} - -generator_interrupted_vo() -{ - e_vo_origin = spawn( "script_origin", self.origin ); - e_vo_origin playsoundwithnotify( "vox_maxi_generator_interrupted_0", "vox_maxi_generator_interrupted_0_done" ); - e_vo_origin waittill( "vox_maxi_generator_interrupted_0_done" ); - e_vo_origin delete(); -} - -generator_compromised_vo() -{ - e_vo_origin = spawn( "script_origin", self.origin ); - e_vo_origin playsoundwithnotify( "vox_maxi_generator_" + self.script_int + "_compromised_0", "vox_maxi_generator_" + self.script_int + "_compromised_0_done" ); - e_vo_origin waittill( "vox_maxi_generator_" + self.script_int + "_compromised_0_done" ); - e_vo_origin delete(); -} - -generator_deactivated_vo() -{ - e_vo_origin = spawn( "script_origin", self.origin ); - e_vo_origin playsoundwithnotify( "vox_maxi_generator_" + self.script_int + "_deactivated_0", "vox_maxi_generator_" + self.script_int + "_deactivated_0_done" ); - e_vo_origin waittill( "vox_maxi_generator_" + self.script_int + "_deactivated_0_done" ); - e_vo_origin delete(); -} - -sndplaygeneratormusicstinger() -{ - num = get_captured_zone_count(); - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "generator_" + num ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_capture_zones_ffotd.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_capture_zones_ffotd.gsc deleted file mode 100644 index bc1b990..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_capture_zones_ffotd.gsc +++ /dev/null @@ -1,29 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -capture_zone_init_start() //checked matches cerberus output -{ -} - -capture_zone_init_end() //checked matches cerberus output -{ -} - -capture_event_start() //checked matches cerberus output -{ -} - -capture_event_end() //checked matches cerberus output -{ -} - -recapture_event_start() //checked matches cerberus output -{ -} - -recapture_event_end() //checked matches cerberus output -{ -} - diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_challenges.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_challenges.gsc deleted file mode 100644 index 66ec5e9..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_challenges.gsc +++ /dev/null @@ -1,380 +0,0 @@ -//checked includes changed to match cerberus output -#include maps/mp/zombies/_zm_weap_one_inch_punch; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_powerup_zombie_blood; -#include maps/mp/zombies/_zm_audio_announcer; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_challenges; -#include maps/mp/zm_tomb_vo; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -//#using_animtree( "fxanim_props_dlc4" ); - -challenges_init() //checked matches cerberus output -{ - level.challenges_add_stats = ::tomb_challenges_add_stats; - maps/mp/zombies/_zm_challenges::init(); -} - -tomb_challenges_add_stats() //checked matches cerberus output -{ - n_kills = 115; - n_zone_caps = 6; - n_points_spent = 30000; - n_boxes_filled = 4; - /* -/# - if ( getDvarInt( "zombie_cheat" ) > 0 ) - { - n_kills = 1; - n_zone_caps = 2; - n_points_spent = 500; - n_boxes_filled = 1; -#/ - } - */ - add_stat( "zc_headshots", 0, &"ZM_TOMB_CH1", n_kills, undefined, ::reward_packed_weapon ); - add_stat( "zc_zone_captures", 0, &"ZM_TOMB_CH2", n_zone_caps, undefined, ::reward_powerup_max_ammo ); - add_stat( "zc_points_spent", 0, &"ZM_TOMB_CH3", n_points_spent, undefined, ::reward_double_tap, ::track_points_spent ); - add_stat( "zc_boxes_filled", 1, &"ZM_TOMB_CHT", n_boxes_filled, undefined, ::reward_one_inch_punch, ::init_box_footprints ); -} - -track_points_spent() //checked matches cerberus output -{ - while ( 1 ) - { - level waittill( "spent_points", player, points ); - player increment_stat( "zc_points_spent", points ); - } -} - -init_box_footprints() //checked matches cerberus output -{ - level.n_soul_boxes_completed = 0; - flag_init( "vo_soul_box_intro_played" ); - flag_init( "vo_soul_box_continue_played" ); - a_boxes = getentarray( "foot_box", "script_noteworthy" ); - array_thread( a_boxes, ::box_footprint_think ); -} - -box_footprint_think() //checked changed to match cerberus output -{ - self.n_souls_absorbed = 0; - n_souls_required = 30; - /* -/# - if ( getDvarInt( "zombie_cheat" ) > 0 ) - { - n_souls_required = 10; -#/ - } - */ - self useanimtree( -1 ); - self thread watch_for_foot_stomp(); - wait 1; - self setclientfield( "foot_print_box_glow", 1 ); - wait 1; - self setclientfield( "foot_print_box_glow", 0 ); - while ( self.n_souls_absorbed < n_souls_required ) - { - self waittill( "soul_absorbed", player ); - self.n_souls_absorbed++; - if ( self.n_souls_absorbed == 1 ) - { - self clearanim( %o_zombie_dlc4_challenge_box_close, 0 ); - self setanim( %o_zombie_dlc4_challenge_box_open ); - self delay_thread( 1, ::setclientfield, "foot_print_box_glow", 1 ); - if ( isDefined( player ) && !flag( "vo_soul_box_intro_played" ) ) - { - player delay_thread( 1.5, ::richtofenrespondvoplay, "zm_box_start", 0, "vo_soul_box_intro_played" ); - } - } - if ( self.n_souls_absorbed == floor( n_souls_required / 4 ) ) - { - if ( isDefined( player ) && flag( "vo_soul_box_intro_played" ) && !flag( "vo_soul_box_continue_played" ) ) - { - player thread richtofenrespondvoplay( "zm_box_continue", 1, "vo_soul_box_continue_played" ); - } - } - if ( self.n_souls_absorbed == floor( n_souls_required / 2 ) || self.n_souls_absorbed == floor( n_souls_required / 1,3 ) ) - { - if ( isDefined( player ) ) - { - player create_and_play_dialog( "soul_box", "zm_box_encourage" ); - } - } - if ( self.n_souls_absorbed == n_souls_required ) - { - wait 1; - self clearanim( %o_zombie_dlc4_challenge_box_open, 0 ); - self setanim( %o_zombie_dlc4_challenge_box_close ); - } - } - self notify( "box_finished" ); - level.n_soul_boxes_completed++; - e_volume = getent( self.target, "targetname" ); - e_volume delete(); - self delay_thread( 0.5, ::setclientfield, "foot_print_box_glow", 0 ); - wait 1; - self movez( 30, 1, 1 ); - wait 0.5; - n_rotations = randomintrange( 5, 7 ); - v_start_angles = self.angles; - for ( i = 0; i < n_rotations; i++ ) - { - v_rotate_angles = v_start_angles + ( randomfloatrange( -10, 10 ), randomfloatrange( -10, 10 ), randomfloatrange( -10, 10 ) ); - n_rotate_time = randomfloatrange( 0.2, 0.4 ); - self rotateto( v_rotate_angles, n_rotate_time ); - self waittill( "rotatedone" ); - } - self rotateto( v_start_angles, 0.3 ); - self movez( -60, 0.5, 0.5 ); - self waittill( "rotatedone" ); - trace_start = self.origin + vectorScale( ( 0, 0, 1 ), 200 ); - trace_end = self.origin; - fx_trace = bullettrace( trace_start, trace_end, 0, self ); - playfx( level._effect[ "mech_booster_landing" ], fx_trace[ "position" ], anglesToForward( self.angles ), anglesToUp( self.angles ) ); - playsoundatposition( "zmb_footprintbox_disappear", self.origin ); - self waittill( "movedone" ); - level maps/mp/zombies/_zm_challenges::increment_stat( "zc_boxes_filled" ); - if ( isDefined( player ) ) - { - if ( level.n_soul_boxes_completed == 1 ) - { - player thread richtofenrespondvoplay( "zm_box_complete" ); - } - else if ( level.n_soul_boxes_completed == 4 ) - { - player thread richtofenrespondvoplay( "zm_box_final_complete", 1 ); - } - } - self delete(); -} - -watch_for_foot_stomp() //checked matches cerberus output -{ - self endon( "box_finished" ); - while ( 1 ) - { - self waittill( "robot_foot_stomp" ); - self clearanim( %o_zombie_dlc4_challenge_box_open, 0 ); - self setanim( %o_zombie_dlc4_challenge_box_close ); - self setclientfield( "foot_print_box_glow", 0 ); - self.n_souls_absorbed = 0; - wait 5; - } -} - -footprint_zombie_killed( attacker ) //checked changed to match cerberus output -{ - a_volumes = getentarray( "foot_box_volume", "script_noteworthy" ); - foreach ( e_volume in a_volumes ) - { - if ( self istouching( e_volume ) && isDefined( attacker ) && isplayer( attacker ) ) - { - self setclientfield( "foot_print_box_fx", 1 ); - m_box = getent( e_volume.target, "targetname" ); - m_box notify( "soul_absorbed" ); - return 1; - } - } - return 0; -} - -reward_packed_weapon( player, s_stat ) //checked matches cerberus output -{ - if ( !isDefined( s_stat.str_reward_weapon ) ) - { - a_weapons = array( "scar_zm", "galil_zm", "mp44_zm" ); - s_stat.str_reward_weapon = maps/mp/zombies/_zm_weapons::get_upgrade_weapon( random( a_weapons ) ); - } - m_weapon = spawn( "script_model", self.origin ); - m_weapon.angles = self.angles + vectorScale( ( 0, 1, 0 ), 180 ); - m_weapon playsound( "zmb_spawn_powerup" ); - m_weapon playloopsound( "zmb_spawn_powerup_loop", 0.5 ); - str_model = getweaponmodel( s_stat.str_reward_weapon ); - options = player maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( s_stat.str_reward_weapon ); - m_weapon useweaponmodel( s_stat.str_reward_weapon, str_model, options ); - wait_network_frame(); - if ( !reward_rise_and_grab( m_weapon, 50, 2, 2, 10 ) ) - { - return 0; - } - weapon_limit = get_player_weapon_limit( player ); - primaries = player getweaponslistprimaries(); - if ( isDefined( primaries ) && primaries.size >= weapon_limit ) - { - player maps/mp/zombies/_zm_weapons::weapon_give( s_stat.str_reward_weapon ); - } - else - { - player giveweapon( s_stat.str_reward_weapon, 0, player maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( s_stat.str_reward_weapon ) ); - player givestartammo( s_stat.str_reward_weapon ); - } - player switchtoweapon( s_stat.str_reward_weapon ); - m_weapon stoploopsound( 0.1 ); - player playsound( "zmb_powerup_grabbed" ); - m_weapon delete(); - return 1; -} - -reward_powerup_max_ammo( player, s_stat ) //checked matches cerberus output -{ - return reward_powerup( player, "full_ammo" ); -} - -reward_powerup_double_points( player, n_timeout ) //checked matches cerberus output -{ - return reward_powerup( player, "double_points", n_timeout ); -} - -reward_powerup_zombie_blood( player, n_timeout ) //checked matches cerberus output -{ - return reward_powerup( player, "zombie_blood", n_timeout ); -} - -reward_powerup( player, str_powerup, n_timeout ) //checked matches cerberus output -{ - if ( !isDefined( n_timeout ) ) - { - n_timeout = 10; - } - if ( !isDefined( level.zombie_powerups[ str_powerup ] ) ) - { - return; - } - s_powerup = level.zombie_powerups[ str_powerup ]; - m_reward = spawn( "script_model", self.origin ); - m_reward.angles = self.angles + vectorScale( ( 0, 1, 0 ), 180 ); - m_reward setmodel( s_powerup.model_name ); - m_reward playsound( "zmb_spawn_powerup" ); - m_reward playloopsound( "zmb_spawn_powerup_loop", 0.5 ); - wait_network_frame(); - if ( !reward_rise_and_grab( m_reward, 50, 2, 2, n_timeout ) ) - { - return 0; - } - m_reward.hint = s_powerup.hint; - if ( !isDefined( player ) ) - { - player = self.player_using; - } - switch ( str_powerup ) - { - case "full_ammo": - level thread maps/mp/zombies/_zm_powerups::full_ammo_powerup( m_reward, player ); - player thread powerup_vo( "full_ammo" ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "full_ammo", player.pers[ "team" ] ); - break; - case "double_points": - level thread maps/mp/zombies/_zm_powerups::double_points_powerup( m_reward, player ); - player thread powerup_vo( "double_points" ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "double_points", player.pers[ "team" ] ); - break; - case "zombie_blood": - level thread maps/mp/zombies/_zm_powerup_zombie_blood::zombie_blood_powerup( m_reward, player ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "zombie_blood", player.pers[ "team" ] ); - } - wait 0.1; - m_reward stoploopsound( 0.1 ); - player playsound( "zmb_powerup_grabbed" ); - m_reward delete(); - return 1; -} - -reward_double_tap( player, s_stat ) //checked matches cerberus output -{ - m_reward = spawn( "script_model", self.origin ); - m_reward.angles = self.angles + vectorScale( ( 0, 1, 0 ), 180 ); - str_model = getweaponmodel( "zombie_perk_bottle_doubletap" ); - m_reward setmodel( str_model ); - m_reward playsound( "zmb_spawn_powerup" ); - m_reward playloopsound( "zmb_spawn_powerup_loop", 0.5 ); - wait_network_frame(); - if ( !reward_rise_and_grab( m_reward, 50, 2, 2, 10 ) ) - { - return 0; - } - if ( player hasperk( "specialty_rof" ) || player has_perk_paused( "specialty_rof" ) ) - { - m_reward thread bottle_reject_sink( player ); - return 0; - } - m_reward stoploopsound( 0.1 ); - player playsound( "zmb_powerup_grabbed" ); - m_reward thread maps/mp/zombies/_zm_perks::vending_trigger_post_think( player, "specialty_rof" ); - m_reward delete(); - return 1; -} - -bottle_reject_sink( player ) //checked matches cerberus output -{ - n_time = 1; - player playlocalsound( level.zmb_laugh_alias ); - self thread maps/mp/zombies/_zm_challenges::reward_sink( 0, 61, n_time ); - wait n_time; - self delete(); -} - -reward_one_inch_punch( player, s_stat ) //checked matches cerberus output -{ - m_reward = spawn( "script_model", self.origin ); - m_reward.angles = self.angles + vectorScale( ( 0, 1, 0 ), 180 ); - m_reward setmodel( "tag_origin" ); - playfxontag( level._effect[ "staff_soul" ], m_reward, "tag_origin" ); - m_reward playsound( "zmb_spawn_powerup" ); - m_reward playloopsound( "zmb_spawn_powerup_loop", 0.5 ); - wait_network_frame(); - if ( !reward_rise_and_grab( m_reward, 50, 2, 2, 10 ) ) - { - return 0; - } - player thread maps/mp/zombies/_zm_weap_one_inch_punch::one_inch_punch_melee_attack(); - m_reward stoploopsound( 0,1 ); - player playsound( "zmb_powerup_grabbed" ); - m_reward delete(); - player thread one_inch_punch_watch_for_death( s_stat ); - return 1; -} - -one_inch_punch_watch_for_death( s_stat ) //checked matches cerberus output -{ - self endon( "disconnect" ); - self waittill( "bled_out" ); - if ( s_stat.b_reward_claimed ) - { - s_stat.b_reward_claimed = 0; - } - s_stat.a_b_player_rewarded[ self.characterindex ] = 0; -} - -reward_beacon( player, s_stat ) -{ - m_reward = spawn( "script_model", self.origin ); - m_reward.angles = self.angles + vectorScale( ( 0, 1, 0 ), 180 ); - str_model = getweaponmodel( "beacon_zm" ); - m_reward setmodel( str_model ); - m_reward playsound( "zmb_spawn_powerup" ); - m_reward playloopsound( "zmb_spawn_powerup_loop", 0.5 ); - wait_network_frame(); - if ( !reward_rise_and_grab( m_reward, 50, 2, 2, 10 ) ) - { - return 0; - } - player maps/mp/zombies/_zm_weapons::weapon_give( "beacon_zm" ); - if ( !is_true( level.zombie_include_weapons[ "beacon_zm" ] ) ) - { - level.zombie_include_weapons[ "beacon_zm" ] = 1; - level.zombie_weapons[ "beacon_zm" ].is_in_box = 1; - } - m_reward stoploopsound( 0.1 ); - player playsound( "zmb_powerup_grabbed" ); - m_reward delete(); - return 1; -} - diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_chamber.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_chamber.gsc deleted file mode 100644 index dfa3730..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_chamber.gsc +++ /dev/null @@ -1,349 +0,0 @@ -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -main() -{ - level thread inits(); - level thread chamber_wall_change_randomly(); -} - -inits() -{ - a_walls = getentarray( "chamber_wall", "script_noteworthy" ); - _a24 = a_walls; - _k24 = getFirstArrayKey( _a24 ); - while ( isDefined( _k24 ) ) - { - e_wall = _a24[ _k24 ]; - e_wall.down_origin = e_wall.origin; - e_wall.up_origin = ( e_wall.origin[ 0 ], e_wall.origin[ 1 ], e_wall.origin[ 2 ] + 1000 ); - _k24 = getNextArrayKey( _a24, _k24 ); - } - level.n_chamber_wall_active = 0; - flag_wait( "start_zombie_round_logic" ); - wait 3; - _a40 = a_walls; - _k40 = getFirstArrayKey( _a40 ); - while ( isDefined( _k40 ) ) - { - e_wall = _a40[ _k40 ]; - e_wall moveto( e_wall.up_origin, 0,05 ); - e_wall connectpaths(); - _k40 = getNextArrayKey( _a40, _k40 ); - } -/# - level thread chamber_devgui(); -#/ -} - -chamber_devgui() -{ -/# - setdvarint( "chamber_wall", 5 ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Chamber:1/Fire:1" "chamber_wall 1"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Chamber:1/Air:2" "chamber_wall 2"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Chamber:1/Lightning:3" "chamber_wall 3"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Chamber:1/Water:4" "chamber_wall 4"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Chamber:1/None:5" "chamber_wall 0"\n" ); - level thread watch_chamber_wall(); -#/ -} - -watch_chamber_wall() -{ -/# - while ( 1 ) - { - if ( getDvarInt( #"763A3046" ) != 5 ) - { - chamber_change_walls( getDvarInt( #"763A3046" ) ); - setdvarint( "chamber_wall", 5 ); - } - wait 0,05; -#/ - } -} - -cap_value( val, min, max ) -{ - if ( val < min ) - { - return min; - } - else - { - if ( val > max ) - { - return max; - } - else - { - return val; - } - } -} - -chamber_wall_dust() -{ - i = 1; - while ( i <= 9 ) - { - playfxontag( level._effect[ "crypt_wall_drop" ], self, "tag_fx_dust_0" + i ); - wait_network_frame(); - i++; - } -} - -chamber_change_walls( n_element ) -{ - if ( n_element == level.n_chamber_wall_active ) - { - return; - } - e_current_wall = undefined; - e_new_wall = undefined; - playsoundatposition( "zmb_chamber_wallchange", ( 10342, -7921, -272 ) ); - a_walls = getentarray( "chamber_wall", "script_noteworthy" ); - _a123 = a_walls; - _k123 = getFirstArrayKey( _a123 ); - while ( isDefined( _k123 ) ) - { - e_wall = _a123[ _k123 ]; - if ( e_wall.script_int == n_element ) - { - e_wall thread move_wall_down(); - } - else - { - if ( e_wall.script_int == level.n_chamber_wall_active ) - { - e_wall thread move_wall_up(); - } - } - _k123 = getNextArrayKey( _a123, _k123 ); - } - level.n_chamber_wall_active = n_element; -} - -is_chamber_occupied() -{ - a_players = getplayers(); - _a142 = a_players; - _k142 = getFirstArrayKey( _a142 ); - while ( isDefined( _k142 ) ) - { - e_player = _a142[ _k142 ]; - if ( is_point_in_chamber( e_player.origin ) ) - { - return 1; - } - _k142 = getNextArrayKey( _a142, _k142 ); - } - return 0; -} - -is_point_in_chamber( v_origin ) -{ - if ( !isDefined( level.s_chamber_center ) ) - { - level.s_chamber_center = getstruct( "chamber_center", "targetname" ); - level.s_chamber_center.radius_sq = level.s_chamber_center.script_float * level.s_chamber_center.script_float; - } - return distance2dsquared( level.s_chamber_center.origin, v_origin ) < level.s_chamber_center.radius_sq; -} - -chamber_wall_change_randomly() -{ - flag_wait( "start_zombie_round_logic" ); - a_element_enums = array( 1, 2, 3, 4 ); - level endon( "stop_random_chamber_walls" ); - n_elem_prev = undefined; - while ( 1 ) - { - while ( !is_chamber_occupied() ) - { - wait 1; - } - flag_wait( "any_crystal_picked_up" ); - n_round = cap_value( level.round_number, 10, 30 ); - f_progression_pct = ( n_round - 10 ) / ( 30 - 10 ); - n_change_wall_time = lerpfloat( 15, 5, f_progression_pct ); - n_elem = random( a_element_enums ); - arrayremovevalue( a_element_enums, n_elem, 0 ); - if ( isDefined( n_elem_prev ) ) - { - a_element_enums[ a_element_enums.size ] = n_elem_prev; - } - chamber_change_walls( n_elem ); - wait n_change_wall_time; - n_elem_prev = n_elem; - } -} - -move_wall_up() -{ - self moveto( self.up_origin, 1 ); - self waittill( "movedone" ); - self connectpaths(); -} - -move_wall_down() -{ - self moveto( self.down_origin, 1 ); - self waittill( "movedone" ); - rumble_players_in_chamber( 2, 0,1 ); - self thread chamber_wall_dust(); - self disconnectpaths(); -} - -random_shuffle( a_items, item ) -{ - b_done_shuffling = undefined; - if ( !isDefined( item ) ) - { - item = a_items[ a_items.size - 1 ]; - } - while ( isDefined( b_done_shuffling ) && !b_done_shuffling ) - { - a_items = array_randomize( a_items ); - if ( a_items[ 0 ] != item ) - { - b_done_shuffling = 1; - } - wait 0,05; - } - return a_items; -} - -tomb_chamber_find_exit_point() -{ - self endon( "death" ); - player = get_players()[ 0 ]; - dist_zombie = 0; - dist_player = 0; - dest = 0; - away = vectornormalize( self.origin - player.origin ); - endpos = self.origin + vectorScale( away, 600 ); - locs = array_randomize( level.enemy_dog_locations ); - i = 0; - while ( i < locs.size ) - { - dist_zombie = distancesquared( locs[ i ].origin, endpos ); - dist_player = distancesquared( locs[ i ].origin, player.origin ); - if ( dist_zombie < dist_player ) - { - dest = i; - break; - } - else - { - i++; - } - } - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - if ( isDefined( locs[ dest ] ) ) - { - self setgoalpos( locs[ dest ].origin ); - } - self.b_wandering_in_chamber = 1; - flag_wait( "player_active_in_chamber" ); - self.b_wandering_in_chamber = 0; - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); -} - -chamber_zombies_find_poi() -{ - zombies = getaiarray( level.zombie_team ); - i = 0; - while ( i < zombies.size ) - { - if ( isDefined( zombies[ i ].b_wandering_in_chamber ) && zombies[ i ].b_wandering_in_chamber ) - { - i++; - continue; - } - else - { - if ( !is_point_in_chamber( zombies[ i ].origin ) ) - { - i++; - continue; - } - else - { - zombies[ i ] thread tomb_chamber_find_exit_point(); - } - } - i++; - } -} - -tomb_is_valid_target_in_chamber() -{ - a_players = getplayers(); - _a322 = a_players; - _k322 = getFirstArrayKey( _a322 ); - while ( isDefined( _k322 ) ) - { - e_player = _a322[ _k322 ]; - if ( e_player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - } - else if ( isDefined( e_player.b_zombie_blood ) || e_player.b_zombie_blood && isDefined( e_player.ignoreme ) && e_player.ignoreme ) - { - } - else - { - if ( !is_point_in_chamber( e_player.origin ) ) - { - break; - } - else - { - return 1; - } - } - _k322 = getNextArrayKey( _a322, _k322 ); - } - return 0; -} - -is_player_in_chamber() -{ - if ( is_point_in_chamber( self.origin ) ) - { - return 1; - } - else - { - return 0; - } -} - -tomb_watch_chamber_player_activity() -{ - flag_init( "player_active_in_chamber" ); - flag_wait( "start_zombie_round_logic" ); - while ( 1 ) - { - wait 1; - if ( is_chamber_occupied() ) - { - if ( tomb_is_valid_target_in_chamber() ) - { - flag_set( "player_active_in_chamber" ); - break; - } - else - { - flag_clear( "player_active_in_chamber" ); - chamber_zombies_find_poi(); - } - } - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_classic.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_classic.gsc deleted file mode 100644 index 212e015..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_classic.gsc +++ /dev/null @@ -1,38 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zm_tomb_craftables; -#include maps/mp/zombies/_zm_craftables; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -precache() //checked matches cerberus output -{ - if ( is_true( level.createfx_enabled ) ) - { - return; - } - maps/mp/zombies/_zm_craftables::init(); - maps/mp/zm_tomb_craftables::randomize_craftable_spawns(); - maps/mp/zm_tomb_craftables::include_craftables(); - maps/mp/zm_tomb_craftables::init_craftables(); -} - -main() //checked matches cerberus output -{ - maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "tomb" ); - maps/mp/zombies/_zm_game_module::set_current_game_module( level.game_module_standard_index ); - level thread maps/mp/zombies/_zm_craftables::think_craftables(); - flag_wait( "initial_blackscreen_passed" ); -} - -zm_treasure_chest_init() //checked matches cerberus output -{ - chest1 = getstruct( "start_chest", "script_noteworthy" ); - level.chests = []; - level.chests[ level.chests.size ] = chest1; - maps/mp/zombies/_zm_magicbox::treasure_chest_init( "start_chest" ); -} - diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_craftables.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_craftables.gsc deleted file mode 100644 index 0bf9438..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_craftables.gsc +++ /dev/null @@ -1,1444 +0,0 @@ -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_ai_quadrotor; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zm_tomb_vo; -#include maps/mp/zm_tomb_main_quest; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/zombies/_zm_craftables; -#include maps/mp/_utility; -#include common_scripts/utility; - -randomize_craftable_spawns() //checked partially changed to match cerberus output see info.md -{ - a_randomized_craftables = array( "gramophone_vinyl_ice", "gramophone_vinyl_air", "gramophone_vinyl_elec", "gramophone_vinyl_fire", "gramophone_vinyl_master", "gramophone_vinyl_player" ); - foreach ( str_craftable in a_randomized_craftables ) - { - s_original_pos = getstruct( str_craftable, "targetname" ); - a_alt_locations = getstructarray( str_craftable + "_alt", "targetname" ); - n_loc_index = randomintrange( 0, a_alt_locations.size + 1 ); - if ( n_loc_index == a_alt_locations.size ) - { - } - else - { - s_original_pos.origin = a_alt_locations[ n_loc_index ].origin; - s_original_pos.angles = a_alt_locations[ n_loc_index ].angles; - } - } -} - -init_craftables() //checked changed to match cerberus output -{ - precachemodel( "p6_zm_tm_quadrotor_stand" ); - flag_init( "quadrotor_cooling_down" ); - level.craftable_piece_count = 4; - flag_init( "any_crystal_picked_up" ); - flag_init( "staff_air_zm_enabled" ); - flag_init( "staff_fire_zm_enabled" ); - flag_init( "staff_lightning_zm_enabled" ); - flag_init( "staff_water_zm_enabled" ); - register_clientfields(); - add_zombie_craftable( "equip_dieseldrone_zm", &"ZM_TOMB_CRQ", &"ZM_TOMB_CRQ", &"ZM_TOMB_TQ", ::onfullycrafted_quadrotor, 1 ); - add_zombie_craftable_vox_category( "equip_dieseldrone_zm", "build_dd" ); - make_zombie_craftable_open( "equip_dieseldrone_zm", "veh_t6_dlc_zm_quadrotor", ( 0, 0, 0 ), ( 0, -4, 10 ) ); - add_zombie_craftable( "tomb_shield_zm", &"ZM_TOMB_CRRI", undefined, &"ZOMBIE_BOUGHT_RIOT", undefined, 1 ); - add_zombie_craftable_vox_category( "tomb_shield_zm", "build_zs" ); - make_zombie_craftable_open( "tomb_shield_zm", "t6_wpn_zmb_shield_dlc4_dmg0_world", vectorScale( ( 0, -1, 0 ), 90 ), ( 0, 0, level.riotshield_placement_zoffset ) ); - add_zombie_craftable( "elemental_staff_fire", &"ZM_TOMB_CRF", &"ZM_TOMB_INS", &"ZM_TOMB_BOF", ::staff_fire_fullycrafted, 1 ); - add_zombie_craftable_vox_category( "elemental_staff_fire", "fire_staff" ); - add_zombie_craftable( "elemental_staff_air", &"ZM_TOMB_CRA", &"ZM_TOMB_INS", &"ZM_TOMB_BOA", ::staff_air_fullycrafted, 1 ); - add_zombie_craftable_vox_category( "elemental_staff_air", "air_staff" ); - add_zombie_craftable( "elemental_staff_lightning", &"ZM_TOMB_CRL", &"ZM_TOMB_INS", &"ZM_TOMB_BOL", ::staff_lightning_fullycrafted, 1 ); - add_zombie_craftable_vox_category( "elemental_staff_lightning", "light_staff" ); - add_zombie_craftable( "elemental_staff_water", &"ZM_TOMB_CRW", &"ZM_TOMB_INS", &"ZM_TOMB_BOW", ::staff_water_fullycrafted, 1 ); - add_zombie_craftable_vox_category( "elemental_staff_water", "ice_staff" ); - add_zombie_craftable( "gramophone", &"ZM_TOMB_CRAFT_GRAMOPHONE", &"ZM_TOMB_CRAFT_GRAMOPHONE", &"ZM_TOMB_BOUGHT_GRAMOPHONE", undefined, 0 ); - add_zombie_craftable_vox_category( "gramophone", "gramophone" ); - level.zombie_craftable_persistent_weapon = ::tomb_check_crafted_weapon_persistence; - level.custom_craftable_validation = ::tomb_custom_craftable_validation; - level.zombie_custom_equipment_setup = ::setup_quadrotor_purchase; - level thread hide_staff_model(); - level.quadrotor_status = spawnstruct(); - level.quadrotor_status.crafted = 0; - level.quadrotor_status.picked_up = 0; - level.num_staffpieces_picked_up = []; - level.n_staffs_crafted = 0; -} - -add_craftable_cheat( craftable ) //dev call skipped -{ - /* -/# - if ( !isDefined( level.cheat_craftables ) ) - { - level.cheat_craftables = []; - } - _a112 = craftable.a_piecestubs; - _k112 = getFirstArrayKey( _a112 ); - while ( isDefined( _k112 ) ) - { - s_piece = _a112[ _k112 ]; - id_string = undefined; - client_field_val = undefined; - if ( isDefined( s_piece.client_field_id ) ) - { - id_string = s_piece.client_field_id; - client_field_val = id_string; - } - else if ( isDefined( s_piece.client_field_state ) ) - { - id_string = "gem"; - client_field_val = s_piece.client_field_state; - } - else - { - } - tokens = strtok( id_string, "_" ); - display_string = "piece"; - _a134 = tokens; - _k134 = getFirstArrayKey( _a134 ); - while ( isDefined( _k134 ) ) - { - token = _a134[ _k134 ]; - if ( token != "piece" && token != "staff" && token != "zm" ) - { - display_string = ( display_string + "_" ) + token; - } - _k134 = getNextArrayKey( _a134, _k134 ); - } - level.cheat_craftables[ "" + client_field_val ] = s_piece; - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Craftables:1/" + craftable.name + "/" + display_string + "" "give_craftable " + client_field_val + ""\n" ); - s_piece.waste = "waste"; - _k112 = getNextArrayKey( _a112, _k112 ); - } - flag_wait( "start_zombie_round_logic" ); - _a149 = craftable.a_piecestubs; - _k149 = getFirstArrayKey( _a149 ); - while ( isDefined( _k149 ) ) - { - s_piece = _a149[ _k149 ]; - s_piece craftable_waittill_spawned(); - s_piece.piecespawn.model thread puzzle_debug_position( "C", vectorScale( ( 0, 0, 1 ), 255 ), undefined, "show_craftable_locations" ); - _k149 = getNextArrayKey( _a149, _k149 ); -#/ - } - */ -} - -autocraft_staffs() //checked changed to match cerberus output -{ - setdvar( "autocraft_staffs", "off" ); - /* -/# - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Craftables:1/Give All Staff Pieces:0" "autocraft_staffs on"\n" ); -#/ - */ - while ( getDvar( "autocraft_staffs" ) != "on" ) - { - wait_network_frame(); - } - flag_wait( "start_zombie_round_logic" ); - keys = getarraykeys( level.cheat_craftables ); - a_players = getplayers(); - foreach ( key in keys ) - { - if ( issubstr( key, "staff" ) || issubstr( key, "record" ) ) - { - s_piece = level.cheat_craftables[ key ]; - if ( isDefined( s_piece.piecespawn ) ) - { - a_players[ 0 ] maps/mp/zombies/_zm_craftables::player_take_piece( s_piece.piecespawn ); - } - } - } - for ( i = 1; i <= 4; i++ ) - { - level notify( "player_teleported", a_players[0], i ); - wait_network_frame(); - piece_spawn = level.cheat_craftables[ "" + i ].piecespawn; - if ( isDefined( piece_spawn ) ) - { - if ( isDefined( a_players[ i - 1 ] ) ) - { - a_players[ i - 1 ] maps/mp/zombies/_zm_craftables::player_take_piece( piece_spawn ); - wait_network_frame(); - } - } - wait_network_frame(); - } -} - -run_craftables_devgui() //dev call skipped -{ - /* -/# - level thread autocraft_staffs(); - setdvar( "give_craftable", "" ); - while ( 1 ) - { - craftable_id = getDvar( "give_craftable" ); - if ( craftable_id != "" ) - { - piece_spawn = level.cheat_craftables[ craftable_id ].piecespawn; - if ( isDefined( piece_spawn ) ) - { - players = getplayers(); - players[ 0 ] maps/mp/zombies/_zm_craftables::player_take_piece( piece_spawn ); - } - setdvar( "give_craftable", "" ); - } - wait 0,05; -#/ - } - */ -} - -include_craftables() //checked matches cerberus output -{ - level thread run_craftables_devgui(); - craftable_name = "equip_dieseldrone_zm"; - quadrotor_body = generate_zombie_craftable_piece( craftable_name, "body", "veh_t6_dlc_zm_quad_piece_body", 32, 64, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_quadrotor_zm_body", 1, "build_dd" ); - quadrotor_brain = generate_zombie_craftable_piece( craftable_name, "brain", "veh_t6_dlc_zm_quad_piece_brain", 32, 64, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_quadrotor_zm_brain", 1, "build_dd_brain" ); - quadrotor_engine = generate_zombie_craftable_piece( craftable_name, "engine", "veh_t6_dlc_zm_quad_piece_engine", 32, 64, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_quadrotor_zm_engine", 1, "build_dd" ); - quadrotor = spawnstruct(); - quadrotor.name = craftable_name; - quadrotor add_craftable_piece( quadrotor_body ); - quadrotor add_craftable_piece( quadrotor_brain ); - quadrotor add_craftable_piece( quadrotor_engine ); - quadrotor.triggerthink = ::quadrotorcraftable; - include_zombie_craftable( quadrotor ); - level thread add_craftable_cheat( quadrotor ); - craftable_name = "tomb_shield_zm"; - riotshield_top = generate_zombie_craftable_piece( craftable_name, "top", "t6_wpn_zmb_shield_dlc4_top", 48, 64, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_dolly", 1, "build_zs" ); - riotshield_door = generate_zombie_craftable_piece( craftable_name, "door", "t6_wpn_zmb_shield_dlc4_door", 48, 15, 25, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_door", 1, "build_zs" ); - riotshield_bracket = generate_zombie_craftable_piece( craftable_name, "bracket", "t6_wpn_zmb_shield_dlc4_bracket", 48, 15, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_clamp", 1, "build_zs" ); - riotshield = spawnstruct(); - riotshield.name = craftable_name; - riotshield add_craftable_piece( riotshield_top ); - riotshield add_craftable_piece( riotshield_door ); - riotshield add_craftable_piece( riotshield_bracket ); - riotshield.onbuyweapon = ::onbuyweapon_riotshield; - riotshield.triggerthink = ::riotshieldcraftable; - include_craftable( riotshield ); - level thread add_craftable_cheat( riotshield ); - craftable_name = "elemental_staff_air"; - staff_air_gem = generate_zombie_craftable_piece( craftable_name, "gem", "t6_wpn_zmb_staff_crystal_air_part", 48, 64, 0, undefined, ::onpickup_aircrystal, ::ondrop_aircrystal, undefined, undefined, undefined, undefined, 2, 0, "crystal", 1 ); - staff_air_upper_staff = generate_zombie_craftable_piece( craftable_name, "upper_staff", "t6_wpn_zmb_staff_tip_air_world", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_ustaff_air", 1, "staff_part" ); - staff_air_middle_staff = generate_zombie_craftable_piece( craftable_name, "middle_staff", "t6_wpn_zmb_staff_stem_air_part", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_mstaff_air", 1, "staff_part" ); - staff_air_lower_staff = generate_zombie_craftable_piece( craftable_name, "lower_staff", "t6_wpn_zmb_staff_revive_part", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_lstaff_air", 1, "staff_part" ); - staff = spawnstruct(); - staff.name = craftable_name; - staff add_craftable_piece( staff_air_gem ); - staff add_craftable_piece( staff_air_upper_staff ); - staff add_craftable_piece( staff_air_middle_staff ); - staff add_craftable_piece( staff_air_lower_staff ); - staff.triggerthink = ::staffcraftable_air; - staff.custom_craftablestub_update_prompt = ::tomb_staff_update_prompt; - include_zombie_craftable( staff ); - level thread add_craftable_cheat( staff ); - count_staff_piece_pickup( array( staff_air_upper_staff, staff_air_middle_staff, staff_air_lower_staff ) ); - craftable_name = "elemental_staff_fire"; - staff_fire_gem = generate_zombie_craftable_piece( craftable_name, "gem", "t6_wpn_zmb_staff_crystal_fire_part", 48, 64, 0, undefined, ::onpickup_firecrystal, ::ondrop_firecrystal, undefined, undefined, undefined, undefined, 1, 0, "crystal", 1 ); - staff_fire_upper_staff = generate_zombie_craftable_piece( craftable_name, "upper_staff", "t6_wpn_zmb_staff_tip_fire_world", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_ustaff_fire", 1, "staff_part" ); - staff_fire_middle_staff = generate_zombie_craftable_piece( craftable_name, "middle_staff", "t6_wpn_zmb_staff_stem_fire_part", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_mstaff_fire", 1, "staff_part" ); - staff_fire_lower_staff = generate_zombie_craftable_piece( craftable_name, "lower_staff", "t6_wpn_zmb_staff_revive_part", 64, 128, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_lstaff_fire", 1, "staff_part" ); - level thread maps/mp/zm_tomb_main_quest::staff_mechz_drop_pieces( staff_fire_lower_staff ); - level thread maps/mp/zm_tomb_main_quest::staff_biplane_drop_pieces( array( staff_fire_middle_staff ) ); - level thread maps/mp/zm_tomb_main_quest::staff_unlock_with_zone_capture( staff_fire_upper_staff ); - staff = spawnstruct(); - staff.name = craftable_name; - staff add_craftable_piece( staff_fire_gem ); - staff add_craftable_piece( staff_fire_upper_staff ); - staff add_craftable_piece( staff_fire_middle_staff ); - staff add_craftable_piece( staff_fire_lower_staff ); - staff.triggerthink = ::staffcraftable_fire; - staff.custom_craftablestub_update_prompt = ::tomb_staff_update_prompt; - include_zombie_craftable( staff ); - level thread add_craftable_cheat( staff ); - count_staff_piece_pickup( array( staff_fire_upper_staff, staff_fire_middle_staff, staff_fire_lower_staff ) ); - craftable_name = "elemental_staff_lightning"; - staff_lightning_gem = generate_zombie_craftable_piece( craftable_name, "gem", "t6_wpn_zmb_staff_crystal_bolt_part", 48, 64, 0, undefined, ::onpickup_lightningcrystal, ::ondrop_lightningcrystal, undefined, undefined, undefined, undefined, 3, 0, "crystal", 1 ); - staff_lightning_upper_staff = generate_zombie_craftable_piece( craftable_name, "upper_staff", "t6_wpn_zmb_staff_tip_lightning_world", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_ustaff_lightning", 1, "staff_part" ); - staff_lightning_middle_staff = generate_zombie_craftable_piece( craftable_name, "middle_staff", "t6_wpn_zmb_staff_stem_bolt_part", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_mstaff_lightning", 1, "staff_part" ); - staff_lightning_lower_staff = generate_zombie_craftable_piece( craftable_name, "lower_staff", "t6_wpn_zmb_staff_revive_part", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_lstaff_lightning", 1, "staff_part" ); - staff = spawnstruct(); - staff.name = craftable_name; - staff add_craftable_piece( staff_lightning_gem ); - staff add_craftable_piece( staff_lightning_upper_staff ); - staff add_craftable_piece( staff_lightning_middle_staff ); - staff add_craftable_piece( staff_lightning_lower_staff ); - staff.triggerthink = ::staffcraftable_lightning; - staff.custom_craftablestub_update_prompt = ::tomb_staff_update_prompt; - include_zombie_craftable( staff ); - level thread add_craftable_cheat( staff ); - count_staff_piece_pickup( array( staff_lightning_upper_staff, staff_lightning_middle_staff, staff_lightning_lower_staff ) ); - craftable_name = "elemental_staff_water"; - staff_water_gem = generate_zombie_craftable_piece( craftable_name, "gem", "t6_wpn_zmb_staff_crystal_water_part", 48, 64, 0, undefined, ::onpickup_watercrystal, ::ondrop_watercrystal, undefined, undefined, undefined, undefined, 4, 0, "crystal", 1 ); - staff_water_upper_staff = generate_zombie_craftable_piece( craftable_name, "upper_staff", "t6_wpn_zmb_staff_tip_water_world", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_ustaff_water", 1, "staff_part" ); - staff_water_middle_staff = generate_zombie_craftable_piece( craftable_name, "middle_staff", "t6_wpn_zmb_staff_stem_water_part", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_mstaff_water", 1, "staff_part" ); - staff_water_lower_staff = generate_zombie_craftable_piece( craftable_name, "lower_staff", "t6_wpn_zmb_staff_revive_part", 32, 64, 0, undefined, ::onpickup_staffpiece, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_staff_zm_lstaff_water", 1, "staff_part" ); - a_ice_staff_parts = array( staff_water_lower_staff, staff_water_middle_staff, staff_water_upper_staff ); - level thread maps/mp/zm_tomb_main_quest::staff_ice_dig_pieces( a_ice_staff_parts ); - staff = spawnstruct(); - staff.name = craftable_name; - staff add_craftable_piece( staff_water_gem ); - staff add_craftable_piece( staff_water_upper_staff ); - staff add_craftable_piece( staff_water_middle_staff ); - staff add_craftable_piece( staff_water_lower_staff ); - staff.triggerthink = ::staffcraftable_water; - staff.custom_craftablestub_update_prompt = ::tomb_staff_update_prompt; - include_zombie_craftable( staff ); - level thread add_craftable_cheat( staff ); - count_staff_piece_pickup( array( staff_water_upper_staff, staff_water_middle_staff, staff_water_lower_staff ) ); - craftable_name = "gramophone"; - vinyl_pickup_player = vinyl_add_pickup( craftable_name, "vinyl_player", "p6_zm_tm_gramophone", "piece_record_zm_player", undefined, "gramophone" ); - vinyl_pickup_master = vinyl_add_pickup( craftable_name, "vinyl_master", "p6_zm_tm_record_master", "piece_record_zm_vinyl_master", undefined, "record" ); - vinyl_pickup_air = vinyl_add_pickup( craftable_name, "vinyl_air", "p6_zm_tm_record_wind", "piece_record_zm_vinyl_air", "quest_state2", "record" ); - vinyl_pickup_ice = vinyl_add_pickup( craftable_name, "vinyl_ice", "p6_zm_tm_record_ice", "piece_record_zm_vinyl_water", "quest_state4", "record" ); - vinyl_pickup_fire = vinyl_add_pickup( craftable_name, "vinyl_fire", "p6_zm_tm_record_fire", "piece_record_zm_vinyl_fire", "quest_state1", "record" ); - vinyl_pickup_elec = vinyl_add_pickup( craftable_name, "vinyl_elec", "p6_zm_tm_record_lightning", "piece_record_zm_vinyl_lightning", "quest_state3", "record" ); - vinyl_pickup_player.sam_line = "gramophone_found"; - vinyl_pickup_master.sam_line = "master_found"; - vinyl_pickup_air.sam_line = "first_record_found"; - vinyl_pickup_ice.sam_line = "first_record_found"; - vinyl_pickup_fire.sam_line = "first_record_found"; - vinyl_pickup_elec.sam_line = "first_record_found"; - level thread maps/mp/zm_tomb_vo::watch_one_shot_samantha_line( "vox_sam_1st_record_found_0", "first_record_found" ); - level thread maps/mp/zm_tomb_vo::watch_one_shot_samantha_line( "vox_sam_gramophone_found_0", "gramophone_found" ); - level thread maps/mp/zm_tomb_vo::watch_one_shot_samantha_line( "vox_sam_master_found_0", "master_found" ); - gramophone = spawnstruct(); - gramophone.name = craftable_name; - gramophone add_craftable_piece( vinyl_pickup_player ); - gramophone add_craftable_piece( vinyl_pickup_master ); - gramophone add_craftable_piece( vinyl_pickup_air ); - gramophone add_craftable_piece( vinyl_pickup_ice ); - gramophone add_craftable_piece( vinyl_pickup_fire ); - gramophone add_craftable_piece( vinyl_pickup_elec ); - gramophone.triggerthink = ::gramophonecraftable; - include_zombie_craftable( gramophone ); - level thread add_craftable_cheat( gramophone ); - staff_fire_gem thread watch_part_pickup( "quest_state1", 2 ); - staff_air_gem thread watch_part_pickup( "quest_state2", 2 ); - staff_lightning_gem thread watch_part_pickup( "quest_state3", 2 ); - staff_water_gem thread watch_part_pickup( "quest_state4", 2 ); - staff_fire_gem thread staff_crystal_wait_for_teleport( 1 ); - staff_air_gem thread staff_crystal_wait_for_teleport( 2 ); - staff_lightning_gem thread staff_crystal_wait_for_teleport( 3 ); - staff_water_gem thread staff_crystal_wait_for_teleport( 4 ); - level thread maps/mp/zm_tomb_vo::staff_craft_vo(); - level thread maps/mp/zm_tomb_vo::samantha_discourage_think(); - level thread maps/mp/zm_tomb_vo::samantha_encourage_think(); - level thread craftable_add_glow_fx(); -} - -register_clientfields() //checked matches cerberus output -{ - bits = 1; - registerclientfield( "world", "piece_quadrotor_zm_body", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_quadrotor_zm_brain", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_quadrotor_zm_engine", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_riotshield_dolly", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_riotshield_door", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_riotshield_clamp", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_staff_zm_gem_air", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_staff_zm_ustaff_air", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_staff_zm_mstaff_air", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_staff_zm_lstaff_air", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_staff_zm_gem_fire", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_staff_zm_ustaff_fire", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_staff_zm_mstaff_fire", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_staff_zm_lstaff_fire", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_staff_zm_gem_lightning", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_staff_zm_ustaff_lightning", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_staff_zm_mstaff_lightning", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_staff_zm_lstaff_lightning", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_staff_zm_gem_water", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_staff_zm_ustaff_water", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_staff_zm_mstaff_water", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_staff_zm_lstaff_water", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_record_zm_player", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_record_zm_vinyl_master", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_record_zm_vinyl_air", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_record_zm_vinyl_water", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_record_zm_vinyl_fire", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_record_zm_vinyl_lightning", 14000, bits, "int", undefined, 0 ); - registerclientfield( "scriptmover", "element_glow_fx", 14000, 4, "int", undefined, 0 ); - registerclientfield( "scriptmover", "bryce_cake", 14000, 2, "int", undefined, 0 ); - registerclientfield( "scriptmover", "switch_spark", 14000, 1, "int", undefined, 0 ); - bits = getminbitcountfornum( 5 ); - registerclientfield( "world", "staff_player1", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "staff_player2", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "staff_player3", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "staff_player4", 14000, bits, "int", undefined, 0 ); - bits = getminbitcountfornum( 5 ); - registerclientfield( "world", "quest_state1", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "quest_state2", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "quest_state3", 14000, bits, "int", undefined, 0 ); - registerclientfield( "world", "quest_state4", 14000, bits, "int", undefined, 0 ); - registerclientfield( "toplayer", "sndMudSlow", 14000, 1, "int" ); -} - -craftable_add_glow_fx() //checked partially changed to match cerberus output -{ - flag_wait( "start_zombie_round_logic" ); - foreach ( s_craftable in level.zombie_include_craftables ) - { - if ( !issubstr( s_craftable.name, "elemental_staff" ) ) - { - } - else - { - n_elem = 0; - if ( issubstr( s_craftable.name, "fire" ) ) - { - n_elem = 1; - } - else if ( issubstr( s_craftable.name, "air" ) ) - { - n_elem = 2; - } - else if ( issubstr( s_craftable.name, "lightning" ) ) - { - n_elem = 3; - } - else if ( issubstr( s_craftable.name, "water" ) ) - { - n_elem = 4; - } - else - { - /* -/# - iprintlnbold( "ERROR: Unknown staff element type in craftable_add_glow_fx: " + s_craftable.name ); -#/ - */ - return; - } - piecestubs_array = s_craftable.a_piecestubs; - piecestubs_key = getFirstArrayKey( piecestubs_array ); - while ( isDefined( piecestubs_key ) ) - { - s_piece = piecestubs_array[ piecestubs_key ]; if ( s_piece.piecename == "gem" ) - { - } - else - { - s_piece craftable_waittill_spawned(); - if ( n_elem == 3 || n_elem == 2) - { - do_glow_now = 1; - } - else - { - do_glow_now = 1; - } - s_piece.piecespawn.model thread craftable_model_attach_glow( n_elem, do_glow_now ); - } - piecestubs_key = getNextArrayKey( piecestubs_array, piecestubs_key ); - } - } - } -} - -craftable_model_attach_glow( n_elem, do_glow_now ) //checked matches cerberus output -{ - self endon( "death" ); - if ( !do_glow_now ) - { - self waittill( "staff_piece_glow" ); - } - self setclientfield( "element_glow_fx", n_elem ); -} - -tomb_staff_update_prompt( player, b_set_hint_string_now, trigger ) //checked matches cerberus output -{ - if ( is_true( self.crafted ) ) - { - return 1; - } - self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE"; - if ( isDefined( player ) ) - { - if ( !isDefined( player.current_craftable_piece ) ) - { - return 0; - } - if ( !self.craftablespawn craftable_has_piece( player.current_craftable_piece ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG"; - return 0; - } - } - if ( level.staff_part_count[ self.craftablespawn.craftable_name ] == 0 ) - { - self.hint_string = level.zombie_craftablestubs[ self.equipname ].str_to_craft; - return 1; - } - else - { - return 0; - } -} - -init_craftable_choke() //checked matches cerberus output -{ - level.craftables_spawned_this_frame = 0; - while ( 1 ) - { - wait_network_frame(); - level.craftables_spawned_this_frame = 0; - } -} - -craftable_wait_your_turn() //checked matches cerberus output -{ - if ( !isDefined( level.craftables_spawned_this_frame ) ) - { - level thread init_craftable_choke(); - } - while ( level.craftables_spawned_this_frame >= 2 ) - { - wait_network_frame(); - } - level.craftables_spawned_this_frame++; -} - -quadrotorcraftable() //checked matches cerberus output -{ - craftable_wait_your_turn(); - maps/mp/zombies/_zm_craftables::craftable_trigger_think( "quadrotor_zm_craftable_trigger", "equip_dieseldrone_zm", "equip_dieseldrone_zm", &"ZM_TOMB_TQ", 1, 1 ); -} - -riotshieldcraftable() //checked matches cerberus output -{ - craftable_wait_your_turn(); - maps/mp/zombies/_zm_craftables::craftable_trigger_think( "riotshield_zm_craftable_trigger", "tomb_shield_zm", "tomb_shield_zm", &"ZOMBIE_GRAB_RIOTSHIELD", 1, 1 ); -} - -staffcraftable_air() //checked matches cerberus output -{ - craftable_wait_your_turn(); - maps/mp/zombies/_zm_craftables::craftable_trigger_think( "staff_air_craftable_trigger", "elemental_staff_air", "staff_air_zm", &"ZM_TOMB_PUAS", 1, 1 ); -} - -staffcraftable_fire() //checked matches cerberus output -{ - craftable_wait_your_turn(); - maps/mp/zombies/_zm_craftables::craftable_trigger_think( "staff_fire_craftable_trigger", "elemental_staff_fire", "staff_fire_zm", &"ZM_TOMB_PUFS", 1, 1 ); -} - -staffcraftable_lightning() //checked matches cerberus output -{ - craftable_wait_your_turn(); - maps/mp/zombies/_zm_craftables::craftable_trigger_think( "staff_lightning_craftable_trigger", "elemental_staff_lightning", "staff_lightning_zm", &"ZM_TOMB_PULS", 1, 1 ); -} - -staffcraftable_water() //checked matches cerberus output -{ - craftable_wait_your_turn(); - maps/mp/zombies/_zm_craftables::craftable_trigger_think( "staff_water_craftable_trigger", "elemental_staff_water", "staff_water_zm", &"ZM_TOMB_PUIS", 1, 1 ); -} - -gramophonecraftable() //checked matches cerberus output -{ - craftable_wait_your_turn(); - maps/mp/zombies/_zm_craftables::craftable_trigger_think( "gramophone_craftable_trigger", "gramophone", "gramophone", &"ZOMBIE_GRAB_GRAMOPHONE", 1, 1 ); -} - -tankcraftableupdateprompt( player, sethintstringnow, buildabletrigger ) //checked matches cerberus output -{ - if ( level.vh_tank getspeedmph() > 0 ) - { - if ( isDefined( self ) ) - { - self.hint_string = ""; - if ( is_true( sethintstringnow ) && isDefined( buildabletrigger ) ) - { - buildabletrigger sethintstring( self.hint_string ); - } - } - return 0; - } - return 1; -} - -ondrop_common( player ) //checked matches cerberus output -{ - self.piece_owner = undefined; -} - -ondrop_crystal( player ) //checked matches cerberus output -{ - ondrop_common( player ); - s_piece = self.piecestub; - s_piece.piecespawn.canmove = 1; - maps/mp/zombies/_zm_unitrigger::reregister_unitrigger_as_dynamic( s_piece.piecespawn.unitrigger ); - s_original_pos = getstruct( ( self.craftablename + "_" ) + self.piecename ); - s_piece.piecespawn.unitrigger trigger_off(); - s_piece.piecespawn.model ghost(); - s_piece.piecespawn.model moveto( s_original_pos.origin, 0.05 ); - s_piece.piecespawn.model waittill( "movedone" ); - s_piece.piecespawn.model show(); - s_piece.piecespawn.unitrigger trigger_on(); -} - -ondrop_firecrystal( player ) //checked matches cerberus output -{ - level setclientfield( "piece_staff_zm_gem_fire", 0 ); - level setclientfield( "quest_state1", 1 ); - level setclientfield( "piece_record_zm_vinyl_fire", 0 ); - player clear_player_crystal( 1 ); - ondrop_crystal( player ); -} - -ondrop_aircrystal( player ) //checked matches cerberus output -{ - level setclientfield( "piece_staff_zm_gem_air", 0 ); - level setclientfield( "quest_state2", 1 ); - level setclientfield( "piece_record_zm_vinyl_air", 0 ); - player clear_player_crystal( 2 ); - ondrop_crystal( player ); -} - -ondrop_lightningcrystal( player ) //checked matches cerberus output -{ - level setclientfield( "piece_staff_zm_gem_lightning", 0 ); - level setclientfield( "quest_state3", 1 ); - level setclientfield( "piece_record_zm_vinyl_lightning", 0 ); - player clear_player_crystal( 3 ); - ondrop_crystal( player ); -} - -ondrop_watercrystal( player ) //checked matches cerberus output -{ - level setclientfield( "piece_staff_zm_gem_water", 0 ); - level setclientfield( "quest_state4", 1 ); - level setclientfield( "piece_record_zm_vinyl_water", 0 ); - player clear_player_crystal( 4 ); - ondrop_crystal( player ); -} - -clear_player_crystal( n_element ) //checked matches cerberus output -{ - if ( n_element == self.crystal_id ) - { - n_player = self getentitynumber() + 1; - level setclientfield( "staff_player" + n_player, 0 ); - self.crystal_id = 0; - } -} - -piece_pickup_conversation( player ) //checked changed to match cerberus output -{ - wait 1; - while ( is_true( player.isspeaking ) ) - { - wait_network_frame(); - } - if ( isDefined( self.piecestub.vo_line_notify ) ) - { - level notify( "quest_progressed", player, 0 ); - level notify( self.piecestub.vo_line_notify, player ); - } - else if ( isDefined( self.piecestub.sam_line ) ) - { - level notify( "quest_progressed", player, 0 ); - level notify( self.piecestub.sam_line, player ); - } - else - { - level notify( "quest_progressed", player, 1 ); - } -} - -onpickup_common( player ) //checked changed to match cerberus output -{ - player playsound( "zmb_craftable_pickup" ); - self.piece_owner = player; - self thread piece_pickup_conversation( player ); - /* -/# - foreach ( spawn in self.spawns ) - { - spawn notify( "stop_debug_position" ); -#/ - } - */ -} - -staff_pickup_vo() //checked matches cerberus output -{ - if ( !flag( "samantha_intro_done" ) ) - { - return; - } - if ( !is_true( level.sam_staff_line_played ) ) - { - level.sam_staff_line_played = 1; - wait 1; - maps/mp/zm_tomb_vo::set_players_dontspeak( 1 ); - maps/mp/zm_tomb_vo::samanthasay( "vox_sam_1st_staff_found_1_0", self, 1 ); - maps/mp/zm_tomb_vo::samanthasay( "vox_sam_1st_staff_found_2_0", self ); - maps/mp/zm_tomb_vo::set_players_dontspeak( 0 ); - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "staff", "first_piece" ); - } -} - -onpickup_staffpiece( player ) //checked matches cerberus output -{ - onpickup_common( player ); - if ( !isDefined( level.num_staffpieces_picked_up[ self.craftablename ] ) ) - { - level.num_staffpieces_picked_up[ self.craftablename ] = 0; - } - level.num_staffpieces_picked_up[ self.craftablename ]++; - if ( level.num_staffpieces_picked_up[ self.craftablename ] == 3 ) - { - level notify( self.craftablename + "_all_pieces_found" ); - } - player thread staff_pickup_vo(); -} - -onpickup_crystal( player, elementname, elementenum ) //checked matches cerberus output -{ - onpickup_common( player ); - level setclientfield( "piece_staff_zm_gem_" + elementname, 1 ); - n_player = player getentitynumber() + 1; - level setclientfield( "staff_player" + n_player, elementenum ); - if ( flag( "any_crystal_picked_up" ) ) - { - self.piecestub.vox_id = undefined; - } - flag_set( "any_crystal_picked_up" ); -} - -onpickup_firecrystal( player ) //checked matches cerberus output -{ - level setclientfield( "quest_state1", 2 ); - player.crystal_id = 1; - onpickup_crystal( player, "fire", 1 ); -} - -onpickup_aircrystal( player ) //checked matches cerberus output -{ - level setclientfield( "quest_state2", 2 ); - player.crystal_id = 2; - onpickup_crystal( player, "air", 2 ); -} - -onpickup_lightningcrystal( player ) //checked matches cerberus output -{ - level setclientfield( "quest_state3", 2 ); - player.crystal_id = 3; - onpickup_crystal( player, "lightning", 3 ); -} - -onpickup_watercrystal( player ) //checked matches cerberus output -{ - level setclientfield( "quest_state4", 2 ); - player.crystal_id = 4; - onpickup_crystal( player, "water", 4 ); -} - -vinyl_add_pickup( str_craftable_name, str_piece_name, str_model_name, str_bit_clientfield, str_quest_clientfield, str_vox_id ) //checked matches cerberus output -{ - b_one_time_vo = 1; - craftable = generate_zombie_craftable_piece( str_craftable_name, str_piece_name, str_model_name, 32, 62, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, str_bit_clientfield, 1, str_vox_id, b_one_time_vo ); - craftable thread watch_part_pickup( str_quest_clientfield, 1 ); - return craftable; -} - -watch_part_pickup( str_quest_clientfield, n_clientfield_val ) //checked matches cerberus output -{ - self craftable_waittill_spawned(); - self.piecespawn waittill( "pickup" ); - level notify( ( self.craftablename + "_" ) + self.piecename + "_picked_up" ); - if ( isDefined( str_quest_clientfield ) && isDefined( n_clientfield_val ) ) - { - level setclientfield( str_quest_clientfield, n_clientfield_val ); - } -} - -count_staff_piece_pickup( a_staff_pieces ) //checked changed to match cerberus output -{ - if ( !isDefined( level.staff_part_count ) ) - { - level.staff_part_count = []; - } - str_name = a_staff_pieces[ 0 ].craftablename; - level.staff_part_count[ str_name ] = a_staff_pieces.size; - foreach ( piece in a_staff_pieces ) - { - /* -/# - assert( piece.craftablename == str_name ); -#/ - */ - piece thread watch_staff_pickup(); - } -} - -craftable_waittill_spawned() //checked matches cerberus output -{ - while ( !isDefined( self.piecespawn ) ) - { - wait_network_frame(); - } -} - -watch_staff_pickup() //checked matches cerberus output -{ - self craftable_waittill_spawned(); - self.piecespawn waittill( "pickup" ); - level.staff_part_count[ self.craftablename ]--; - -} - -onfullycrafted_quadrotor( player ) //checked changed to match cerberus output -{ - level.quadrotor_status.crafted = 1; - pickup_trig = level.quadrotor_status.pickup_trig; - level.quadrotor_status.str_zone = maps/mp/zombies/_zm_zonemgr::get_zone_from_position( pickup_trig.origin, 1 ); - level.quadrotor_status.pickup_indicator = spawn( "script_model", pickup_trig.model.origin + vectorScale( ( 0, 0, -1 ), 10 ) ); - level.quadrotor_status.pickup_indicator setmodel( "p6_zm_tm_quadrotor_stand" ); - level notify( "quest_progressed", player, 1 ); - return 1; -} - -onbuyweapon_riotshield( player ) //checked matches cerberus output -{ - if ( isDefined( player.player_shield_reset_health ) ) - { - player [[ player.player_shield_reset_health ]](); - } - if ( isDefined( player.player_shield_reset_location ) ) - { - player [[ player.player_shield_reset_location ]](); - } -} - -staff_fullycrafted( modelname, elementenum ) //checked changed to match cerberus output -{ - player = get_closest_player( self.origin ); - staff_model = getent( modelname, "targetname" ); - staff_info = get_staff_info_from_element_index( elementenum ); - staff_model useweaponmodel( staff_info.weapname ); - staff_model showallparts(); - level notify( "quest_progressed", player, 0 ); - if ( !isDefined( staff_model.inused ) ) - { - staff_model show(); - staff_model.inused = 1; - level.n_staffs_crafted++; - if ( level.n_staffs_crafted == 4 ) - { - flag_set( "ee_all_staffs_crafted" ); - } - } - str_fieldname = "quest_state" + elementenum; - level setclientfield( str_fieldname, 3 ); - return 1; -} - -staff_fire_fullycrafted() //checked matches cerberus output -{ - level thread sndplaystaffstingeronce( "fire" ); - return staff_fullycrafted( "craftable_staff_fire_zm", 1 ); -} - -staff_air_fullycrafted() //checked matches cerberus output -{ - level thread sndplaystaffstingeronce( "wind" ); - return staff_fullycrafted( "craftable_staff_air_zm", 2 ); -} - -staff_lightning_fullycrafted() //checked matches cerberus output -{ - level thread sndplaystaffstingeronce( "lightning" ); - return staff_fullycrafted( "craftable_staff_lightning_zm", 3 ); -} - -staff_water_fullycrafted() //checked matches cerberus output -{ - level thread sndplaystaffstingeronce( "ice" ); - return staff_fullycrafted( "craftable_staff_water_zm", 4 ); -} - -sndplaystaffstingeronce( type ) //checked matches cerberus output -{ - if ( !isDefined( level.sndstaffbuilt ) ) - { - level.sndstaffbuilt = []; - } - if ( !isinarray( level.sndstaffbuilt, type ) ) - { - level.sndstaffbuilt[ level.sndstaffbuilt.size ] = type; - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "staff_" + type ); - } -} - -quadrotor_watcher( player ) //checked matches cerberus output -{ - quadrotor_set_unavailable(); - player thread quadrotor_return_condition_watcher(); - player thread quadrotor_control_thread(); - level waittill( "drone_available" ); - level.maxis_quadrotor = undefined; - if ( flag( "ee_quadrotor_disabled" ) ) - { - flag_waitopen( "ee_quadrotor_disabled" ); - } - quadrotor_set_available(); -} - -quadrotor_return_condition_watcher() //checked matches cerberus output -{ - self waittill_any( "bled_out", "disconnect" ); - if ( isDefined( level.maxis_quadrotor ) ) - { - level notify( "drone_should_return" ); - } - else - { - level notify( "drone_available" ); - } -} - -quadrotor_control_thread() //checked matches cerberus output -{ - self endon( "bled_out" ); - self endon( "disconnect" ); - while ( 1 ) - { - if ( self actionslottwobuttonpressed() && self hasweapon( "equip_dieseldrone_zm" ) ) - { - self waittill( "weapon_change_complete" ); - self playsound( "veh_qrdrone_takeoff" ); - weapons = self getweaponslistprimaries(); - self switchtoweapon( weapons[ 0 ] ); - self waittill( "weapon_change_complete" ); - if ( self hasweapon( "equip_dieseldrone_zm" ) ) - { - self takeweapon( "equip_dieseldrone_zm" ); - self setactionslot( 2, "" ); - } - str_vehicle = "heli_quadrotor_zm"; - if ( flag( "ee_maxis_drone_retrieved" ) ) - { - str_vehicle = "heli_quadrotor_upgraded_zm"; - } - qr = spawnvehicle( "veh_t6_dlc_zm_quadrotor", "quadrotor_ai", str_vehicle, self.origin + vectorScale( ( 0, 0, 1 ), 96 ), self.angles ); - level thread quadrotor_death_watcher( qr ); - qr thread quadrotor_instance_watcher( self ); - return; - } - wait 0.05; - } -} - -quadrotor_debug_send_home( player_owner ) //checked matches cerberus output -{ - self endon( "drone_should_return" ); - level endon( "drone_available" ); - while ( 1 ) - { - if ( player_owner actionslottwobuttonpressed() ) - { - self quadrotor_fly_back_to_table(); - } - wait 0.05; - } -} - -quadrotor_instance_watcher( player_owner ) //checked matches cerberus output -{ - self endon( "death" ); - self.player_owner = player_owner; - self.health = 200; - level.maxis_quadrotor = self; - self makevehicleunusable(); - self thread maps/mp/zombies/_zm_ai_quadrotor::quadrotor_think(); - self thread follow_ent( player_owner ); - self thread quadrotor_timer(); - level waittill( "drone_should_return" ); - self quadrotor_fly_back_to_table(); -} - -quadrotor_death_watcher( quadrotor ) //checked matches cerberus output -{ - level endon( "drone_available" ); - quadrotor waittill( "death" ); - level notify( "drone_available" ); -} - -quadrotor_fly_back_to_table() //checked matches cerberus output -{ - self endon( "death" ); - level endon( "drone_available" ); - if ( isDefined( self ) ) - { - /* -/# - iprintln( "Maxis sez: time to bounce" ); -#/ - */ - self.returning_home = 1; - self thread quadrotor_fly_back_to_table_timeout(); - self waittill_any( "attempting_return", "return_timeout" ); - } - if ( isDefined( self ) ) - { - self waittill_any( "near_goal", "force_goal", "reached_end_node", "return_timeout" ); - } - if ( isDefined( self ) ) - { - playfx( level._effect[ "tesla_elec_kill" ], self.origin ); - self playsound( "zmb_qrdrone_leave" ); - self delete(); - /* -/# - iprintln( "Maxis deleted" ); -#/ - */ - } - level notify( "drone_available" ); -} - -report_notify( str_notify ) //checked matches cerberus output -{ - self waittill( str_notify ); - iprintln( str_notify ); -} - -quadrotor_fly_back_to_table_timeout() //checked matches cerberus output -{ - self endon( "death" ); - level endon( "drone_available" ); - wait 30; - if ( isDefined( self ) ) - { - self delete(); - /* -/# - iprintln( "Maxis deleted" ); -#/ - */ - } - self notify( "return_timeout" ); -} - -quadrotor_timer() //checked matches cerberus output -{ - self endon( "death" ); - level endon( "drone_available" ); - wait 80; - vox_line = "vox_maxi_drone_cool_down_" + randomintrange( 0, 2 ); - self thread maps/mp/zm_tomb_vo::maxissay( vox_line, self ); - wait 10; - vox_line = "vox_maxi_drone_cool_down_2"; - self thread maps/mp/zm_tomb_vo::maxissay( vox_line, self ); - level notify( "drone_should_return" ); -} - -quadrotor_set_available() //checked matches cerberus output -{ - /* -/# - iprintln( "Quad returned to table" ); -#/ - */ - playfx( level._effect[ "tesla_elec_kill" ], level.quadrotor_status.pickup_trig.model.origin ); - level.quadrotor_status.pickup_trig.model playsound( "zmb_qrdrone_leave" ); - level.quadrotor_status.picked_up = 0; - level.quadrotor_status.pickup_trig.model show(); - flag_set( "quadrotor_cooling_down" ); - str_zone = level.quadrotor_status.str_zone; - switch( str_zone ) - { - case "zone_nml_9": - setclientfield( "cooldown_steam", 1 ); - break; - case "zone_bunker_5a": - setclientfield( "cooldown_steam", 2 ); - break; - case "zone_village_1": - setclientfield( "cooldown_steam", 3 ); - break; - } - vox_line = "vox_maxi_drone_cool_down_3"; - thread maxissay( vox_line, level.quadrotor_status.pickup_trig.model ); - wait 60; - flag_clear( "quadrotor_cooling_down" ); - setclientfield( "cooldown_steam", 0 ); - level.quadrotor_status.pickup_trig trigger_on(); - vox_line = "vox_maxi_drone_cool_down_4"; - maxissay( vox_line, level.quadrotor_status.pickup_trig.model ); -} - -quadrotor_set_unavailable() //checked matches cerberus output -{ - level.quadrotor_status.picked_up = 1; - level.quadrotor_status.pickup_trig trigger_off(); - level.quadrotor_status.pickup_trig.model ghost(); -} - -sqcommoncraftable() //checked matches cerberus output -{ - level.sq_craftable = maps/mp/zombies/_zm_craftables::craftable_trigger_think( "sq_common_craftable_trigger", "sq_common", "sq_common", "", 1, 0 ); -} - -droponmover( player ) //checked matches cerberus output -{ -} - -pickupfrommover() //checked matches cerberus output -{ -} - -setup_quadrotor_purchase( player ) //checked matches cerberus output -{ - if ( self.stub.weaponname == "equip_dieseldrone_zm" ) - { - if ( players_has_weapon( "equip_dieseldrone_zm" ) ) - { - return 1; - } - quadrotor = getentarray( "quadrotor_ai", "targetname" ); - if ( quadrotor.size >= 1 ) - { - return 1; - } - quadrotor_set_unavailable(); - player giveweapon( "equip_dieseldrone_zm" ); - player setweaponammoclip( "equip_dieseldrone_zm", 1 ); - player playsoundtoplayer( "zmb_buildable_pickup_complete", player ); - if ( isDefined( self.stub.craftablestub.use_actionslot ) ) - { - player setactionslot( self.stub.craftablestub.use_actionslot, "weapon", "equip_dieseldrone_zm" ); - } - else - { - player setactionslot( 2, "weapon", "equip_dieseldrone_zm" ); - } - player notify( "equip_dieseldrone_zm_given" ); - level thread quadrotor_watcher( player ); - player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "build_dd_plc" ); - return 1; - } - return 0; -} - -players_has_weapon( weaponname ) //checked changed to match cerberus output -{ - players = getplayers(); - for ( i = 0; i < players.size; i++ ) - { - if ( players[ i ] hasweapon( weaponname ) ) - { - return 1; - } - } - return 0; -} - -tomb_custom_craftable_validation( player ) //checked changed to match cerberus output -{ - if ( self.stub.equipname == "equip_dieseldrone_zm" ) - { - level.quadrotor_status.pickup_trig = self.stub; - if ( level.quadrotor_status.crafted ) - { - return !level.quadrotor_status.picked_up && !flag( "quadrotor_cooling_down" ); - } - } - if ( !issubstr( self.stub.weaponname, "staff" ) ) - { - return 1; - } - str_craftable = self.stub.equipname; - if ( !is_true( level.craftables_crafted[ str_craftable ] ) ) - { - return 1; - } - if ( !player can_pickup_staff() ) - { - return 0; - } - s_elemental_staff = get_staff_info_from_weapon_name( self.stub.weaponname, 0 ); - str_weapon_check = s_elemental_staff.weapname; - a_weapons = player getweaponslistprimaries(); - foreach ( weapon in a_weapons ) - { - if ( issubstr( weapon, "staff" ) && weapon != str_weapon_check ) - { - player takeweapon( weapon ); - } - } - return 1; -} - -tomb_check_crafted_weapon_persistence( player ) //checked changed to match cerberus output -{ - if ( self.stub.equipname == "equip_dieseldrone_zm" ) - { - if ( level.quadrotor_status.picked_up ) - { - return 1; - } - else if ( level.quadrotor_status.crafted ) - { - return 0; - } - } - else if ( self.stub.weaponname == "staff_air_zm" || self.stub.weaponname == "staff_fire_zm" || self.stub.weaponname == "staff_lightning_zm" || self.stub.weaponname == "staff_water_zm" ) - { - if ( self is_unclaimed_staff_weapon( self.stub.weaponname ) ) - { - s_elemental_staff = get_staff_info_from_weapon_name( self.stub.weaponname, 0 ); - player maps/mp/zombies/_zm_weapons::weapon_give( s_elemental_staff.weapname, 0, 0 ); - if ( isDefined( s_elemental_staff.prev_ammo_stock ) && isDefined( s_elemental_staff.prev_ammo_clip ) ) - { - player setweaponammostock( s_elemental_staff.weapname, s_elemental_staff.prev_ammo_stock ); - player setweaponammoclip( s_elemental_staff.weapname, s_elemental_staff.prev_ammo_clip ); - } - if ( isDefined( level.zombie_craftablestubs[ self.stub.equipname ].str_taken ) ) - { - self.stub.hint_string = level.zombie_craftablestubs[ self.stub.equipname ].str_taken; - } - else - { - self.stub.hint_string = ""; - } - self sethintstring( self.stub.hint_string ); - player track_craftables_pickedup( self.stub.craftablespawn ); - model = getent( "craftable_" + self.stub.weaponname, "targetname" ); - model ghost(); - self.stub thread track_crafted_staff_trigger(); - self.stub thread track_staff_weapon_respawn( player ); - set_player_staff( self.stub.weaponname, player ); - } - else - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - } - return 1; - } - return 0; -} - -is_unclaimed_staff_weapon( str_weapon ) //checked changed to match cerberus output -{ - if ( !maps/mp/zombies/_zm_equipment::is_limited_equipment( str_weapon ) ) - { - return 1; - } - s_elemental_staff = get_staff_info_from_weapon_name( str_weapon, 0 ); - str_weapon_check = s_elemental_staff.weapname; - players = get_players(); - foreach ( player in players ) - { - if ( isDefined( player ) && player has_weapon_or_upgrade( str_weapon_check ) ) - { - return 0; - } - } - return 1; -} - -get_staff_info_from_weapon_name( str_name, b_base_info_only ) //checked partially changed to match cerberus output see info.md -{ - if ( !isDefined( b_base_info_only ) ) - { - b_base_info_only = 1; - } - foreach ( s_staff in level.a_elemental_staffs ) - { - if ( s_staff.weapname == str_name || s_staff.upgrade.weapname == str_name ) - { - if ( s_staff.charger.is_charged && !b_base_info_only ) - { - return s_staff.upgrade; - } - else - { - return s_staff; - } - } - } - return undefined; -} - -get_staff_info_from_element_index( n_index ) //checked changed to match cerberus output -{ - foreach ( s_staff in level.a_elemental_staffs ) - { - if ( s_staff.enum == n_index ) - { - return s_staff; - } - } - return undefined; -} - -track_crafted_staff_trigger() //checked matches cerberus output -{ - s_elemental_staff = get_staff_info_from_weapon_name( self.weaponname, 1 ); - if ( !isDefined( self.base_weaponname ) ) - { - self.base_weaponname = s_elemental_staff.weapname; - } - flag_waitopen( self.base_weaponname + "_enabled" ); - self trigger_off(); - flag_wait( self.base_weaponname + "_enabled" ); - self trigger_on(); -} - -track_staff_weapon_respawn( player ) //checked partially changed to match cerberus output see info.md -{ - self notify( "kill_track_staff_weapon_respawn" ); - self endon( "kill_track_staff_weapon_respawn" ); - s_elemental_staff = get_staff_info_from_weapon_name( self.weaponname, 1 ); - s_upgraded_staff = s_elemental_staff.upgrade; - if ( !isDefined( self.base_weaponname ) ) - { - self.base_weaponname = s_elemental_staff.weapname; - } - flag_clear( self.base_weaponname + "_enabled" ); - has_weapon = 0; - while ( isalive( player ) ) - { - if ( is_true( s_elemental_staff.charger.is_inserted ) || is_true( s_upgraded_staff.charger.is_inserted ) || is_true( s_upgraded_staff.ee_in_use ) ) - { - has_weapon = 1; - break; - } - weapons = player getweaponslistprimaries(); - foreach ( weapon in weapons ) - { - n_melee_element = 0; - if ( weapon == self.base_weaponname ) - { - s_elemental_staff.prev_ammo_stock = player getweaponammostock( weapon ); - s_elemental_staff.prev_ammo_clip = player getweaponammoclip( weapon ); - has_weapon = 1; - } - else if ( weapon == s_upgraded_staff.weapname ) - { - s_upgraded_staff.prev_ammo_stock = player getweaponammostock( weapon ); - s_upgraded_staff.prev_ammo_clip = player getweaponammoclip( weapon ); - has_weapon = 1; - n_melee_element = s_upgraded_staff.enum; - } - if ( player hasweapon( "staff_revive_zm" ) ) - { - s_upgraded_staff.revive_ammo_stock = player getweaponammostock( "staff_revive_zm" ); - s_upgraded_staff.revive_ammo_clip = player getweaponammoclip( "staff_revive_zm" ); - } - if ( has_weapon && !is_true( player.one_inch_punch_flag_has_been_init ) && n_melee_element != 0 ) - { - cur_weapon = player getcurrentweapon(); - if ( cur_weapon != weapon && is_true( player.use_staff_melee ) ) - { - player update_staff_accessories( 0 ); - } - else - { - if ( cur_weapon == weapon && !is_true( player.use_staff_melee ) ) - { - player update_staff_accessories( n_melee_element ); - } - } - } - } - if ( !has_weapon ) - { - break; - } - wait 0.5; - has_weapon = 0; - } - b_staff_in_use = 0; - a_players = getplayers(); - foreach ( check_player in a_players ) - { - weapons = check_player getweaponslistprimaries(); - for ( i = 0; i < weapons.size; i++ ) - { - if ( weapons[ i ] == self.base_weaponname || weapons[ i ] == s_upgraded_staff.weapname ) - { - b_staff_in_use = 1; - } - } - } - if ( !b_staff_in_use ) - { - model = getent( "craftable_" + self.base_weaponname, "targetname" ); - model show(); - flag_set( self.base_weaponname + "_enabled" ); - } - clear_player_staff( self.base_weaponname, player ); -} - -set_player_staff( str_weaponname, e_player ) //checked matches cerberus output -{ - s_staff = get_staff_info_from_weapon_name( str_weaponname ); - s_staff.e_owner = e_player; - n_player = e_player getentitynumber() + 1; - e_player.staff_enum = s_staff.enum; - level setclientfield( "staff_player" + n_player, s_staff.enum ); - e_player update_staff_accessories( s_staff.enum ); - /* -/# - iprintlnbold( "Player " + n_player + " has staff " + s_staff.enum ); -#/ - */ -} - -clear_player_staff_by_player_number( n_player ) //checked matches cerberus output -{ - level setclientfield( "staff_player" + n_player, 0 ); -} - -clear_player_staff( str_weaponname, e_owner ) //checked changed to match cerberus output -{ - s_staff = get_staff_info_from_weapon_name( str_weaponname ); - if ( isDefined( e_owner ) && isDefined( s_staff.e_owner ) && e_owner != s_staff.e_owner ) - { - return; - } - if ( !isDefined( e_owner ) ) - { - e_owner = s_staff.e_owner; - } - if ( isDefined( e_owner ) ) - { - if ( !isDefined( e_owner.staff_enum ) && !isDefined( s_staff.enum ) || isDefined( e_owner.staff_enum ) && isDefined( s_staff.enum ) && e_owner.staff_enum == s_staff.enum ) - { - n_player = e_owner getentitynumber() + 1; - e_owner.staff_enum = 0; - level setclientfield( "staff_player" + n_player, 0 ); - e_owner update_staff_accessories( 0 ); - } - } - /* -/# - iprintlnbold( "Nobody has staff " + s_staff.enum ); -#/ - */ - s_staff.e_owner = undefined; -} - -hide_staff_model() //checked changed to match cerberus output -{ - staffs = getentarray( "craftable_staff_model", "script_noteworthy" ); - foreach ( stave in staffs ) - { - stave ghost(); - } -} - diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_dig.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_dig.gsc deleted file mode 100644 index a57c9f4..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_dig.gsc +++ /dev/null @@ -1,1010 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm_powerup_zombie_blood; -#include maps/mp/zombies/_zm_weap_claymore; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zm_tomb_main_quest; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_audio_announcer; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init_shovel() //checked changed to match cerberus output -{ - precachemodel( "p6_zm_tm_dig_mound" ); - precachemodel( "p6_zm_tm_dig_mound_blood" ); - precachemodel( "p6_zm_tm_shovel" ); - precachemodel( "zombie_pickup_perk_bottle" ); - precachemodel( "t6_wpn_claymore_world" ); - maps/mp/zombies/_zm_audio_announcer::createvox( "blood_money", "powerup_blood_money" ); - onplayerconnect_callback( ::init_shovel_player ); - a_shovel_pos = getstructarray( "shovel_location", "targetname" ); - a_shovel_zone = []; - foreach ( s_shovel_pos in a_shovel_pos ) - { - if ( !isDefined( a_shovel_zone[ s_shovel_pos.script_noteworthy ] ) ) - { - a_shovel_zone[ s_shovel_pos.script_noteworthy ] = []; - } - a_shovel_zone[ s_shovel_pos.script_noteworthy ][ a_shovel_zone[ s_shovel_pos.script_noteworthy ].size ] = s_shovel_pos; - } - foreach ( a_zone in a_shovel_zone ) - { - s_pos = a_zone[ randomint( a_zone.size ) ]; - m_shovel = spawn( "script_model", s_pos.origin ); - m_shovel.angles = s_pos.angles; - m_shovel setmodel( "p6_zm_tm_shovel" ); - generate_shovel_unitrigger( m_shovel ); - } - level.get_player_perk_purchase_limit = ::get_player_perk_purchase_limit; - level.bonus_points_powerup_override = ::bonus_points_powerup_override; - level thread dig_powerups_tracking(); - level thread dig_spots_init(); - registerclientfield( "world", "shovel_player1", 14000, 2, "int", undefined, 0 ); - registerclientfield( "world", "shovel_player2", 14000, 2, "int", undefined, 0 ); - registerclientfield( "world", "shovel_player3", 14000, 2, "int", undefined, 0 ); - registerclientfield( "world", "shovel_player4", 14000, 2, "int", undefined, 0 ); - registerclientfield( "world", "helmet_player1", 14000, 1, "int", undefined, 0 ); - registerclientfield( "world", "helmet_player2", 14000, 1, "int", undefined, 0 ); - registerclientfield( "world", "helmet_player3", 14000, 1, "int", undefined, 0 ); - registerclientfield( "world", "helmet_player4", 14000, 1, "int", undefined, 0 ); - /* -/# - level thread setup_dig_devgui(); -#/ - */ -} - -init_shovel_player() //checked matches cerberus output -{ - self.dig_vars[ "has_shovel" ] = 0; - self.dig_vars[ "has_upgraded_shovel" ] = 0; - self.dig_vars[ "has_helmet" ] = 0; - self.dig_vars[ "n_spots_dug" ] = 0; - self.dig_vars[ "n_losing_streak" ] = 0; -} - -generate_shovel_unitrigger( e_shovel ) //checked changed to match cerberus output -{ - s_unitrigger_stub = spawnstruct(); - s_unitrigger_stub.origin = e_shovel.origin + vectorScale( ( 0, 0, 1 ), 32 ); - s_unitrigger_stub.angles = e_shovel.angles; - s_unitrigger_stub.radius = 32; - s_unitrigger_stub.script_length = 64; - s_unitrigger_stub.script_width = 64; - s_unitrigger_stub.script_height = 64; - s_unitrigger_stub.cursor_hint = "HINT_NOICON"; - s_unitrigger_stub.hint_string = &"ZM_TOMB_SHPU"; - s_unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - s_unitrigger_stub.require_look_at = 1; - s_unitrigger_stub.prompt_and_visibility_func = ::shovel_trigger_prompt_and_visiblity; - s_unitrigger_stub.e_shovel = e_shovel; - unitrigger_force_per_player_triggers( s_unitrigger_stub, 1 ); - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( s_unitrigger_stub, ::shovel_unitrigger_think ); -} - -shovel_trigger_prompt_and_visiblity( e_player ) //checked matches cerberus output -{ - can_use = self.stub shovel_prompt_update( e_player ); - self setinvisibletoplayer( e_player, !can_use ); - self sethintstring( self.stub.hint_string ); - return can_use; -} - -shovel_prompt_update( e_player ) //checked matches cerberus output -{ - if ( !self unitrigger_stub_show_hint_prompt_valid( e_player ) ) - { - return 0; - } - self.hint_string = &"ZM_TOMB_SHPU"; - if ( is_true( e_player.dig_vars[ "has_shovel" ] ) ) - { - self.hint_string = &"ZM_TOMB_SHAG"; - } - return 1; -} - -shovel_unitrigger_think() //checked changed to match cerberus output -{ - self endon( "kill_trigger" ); - while ( 1 ) - { - self waittill( "trigger", e_player ); - if ( e_player != self.parent_player ) - { - continue; - } - if ( !is_true( e_player.dig_vars[ "has_shovel" ] ) ) - { - e_player.dig_vars[ "has_shovel" ] = 1; - e_player playsound( "zmb_craftable_pickup" ); - e_player dig_reward_dialog( "pickup_shovel" ); - n_player = e_player getentitynumber() + 1; - level setclientfield( "shovel_player" + n_player, 1 ); - e_player thread dig_disconnect_watch( n_player, self.stub.e_shovel.origin, self.stub.e_shovel.angles ); - self.stub.e_shovel delete(); - maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.stub ); - } - } -} - -dig_reward_dialog( str_category ) //checked matches cerberus output -{ - if ( !is_true( self.dig_vo_cooldown ) ) - { - self do_player_general_vox( "digging", str_category ); - if ( str_category != "pickup_shovel" ) - { - self thread dig_reward_vo_cooldown(); - } - } -} - -dig_reward_vo_cooldown() //checked matches cerberus output -{ - self endon( "disconnect" ); - self.dig_vo_cooldown = 1; - wait 60; - self.dig_vo_cooldown = undefined; -} - -unitrigger_stub_show_hint_prompt_valid( e_player ) //checked matches cerberus output -{ - if ( !is_player_valid( e_player ) ) - { - self.hint_string = ""; - return 0; - } - return 1; -} - -dig_disconnect_watch( n_player, v_origin, v_angles ) //checked matches cerberus output -{ - self waittill( "disconnect" ); - level setclientfield( "shovel_player" + n_player, 0 ); - level setclientfield( "helmet_player" + n_player, 0 ); - m_shovel = spawn( "script_model", v_origin ); - m_shovel.angles = v_angles; - m_shovel setmodel( "p6_zm_tm_shovel" ); - generate_shovel_unitrigger( m_shovel ); -} - -dig_spots_init() //checked changed to match cerberus output -{ - flag_wait( "start_zombie_round_logic" ); - level.n_dig_spots_cur = 0; - level.n_dig_spots_max = 15; - level.a_dig_spots = getstructarray( "dig_spot", "targetname" ); - foreach ( s_dig_spot in level.a_dig_spots ) - { - if ( !isDefined( s_dig_spot.angles ) ) - { - s_dig_spot.angles = ( 0, 0, 0 ); - } - if ( isDefined( s_dig_spot.script_noteworthy ) && s_dig_spot.script_noteworthy == "initial_spot" ) - { - s_dig_spot thread dig_spot_spawn(); - } - else - { - s_dig_spot.dug = 1; - } - s_dig_spot.str_zone = maps/mp/zombies/_zm_zonemgr::get_zone_from_position( s_dig_spot.origin + vectorScale( ( 0, 0, 1 ), 32 ), 1 ); - if ( !isDefined( s_dig_spot.str_zone ) ) - { - s_dig_spot.str_zone = ""; - /* -/# - assertmsg( "Dig spot at ( " + s_dig_spot.origin[ 0 ] + ", " + s_dig_spot.origin[ 1 ] + ", " + s_dig_spot.origin[ 2 ] + ") is not in a zone." ); -#/ - */ - } - wait_network_frame(); - } - level thread dig_spots_respawn(); -} - -dig_spots_respawn( a_dig_spots ) //checked partially changed to match cerberus output see info.md -{ - while ( 1 ) - { - level waittill( "end_of_round" ); - wait 2; - a_dig_spots = array_randomize( level.a_dig_spots ); - n_respawned = 0; - n_respawned_max = 3; - if ( level.weather_snow > 0 ) - { - n_respawned_max = 0; - } - else if ( level.weather_rain > 0 ) - { - n_respawned_max = 5; - } - if ( level.weather_snow == 0 ) - { - n_respawned_max += randomint( get_players().size ); - } - for ( i = 0; i < a_dig_spots.size; i++ ) - { - if ( is_true( a_dig_spots[ i ].dug ) && n_respawned < n_respawned_max && level.n_dig_spots_cur <= level.n_dig_spots_max ) - { - a_dig_spots[ i ].dug = undefined; - a_dig_spots[ i ] thread dig_spot_spawn(); - wait_network_frame(); - n_respawned++; - } - } - if ( level.weather_snow > 0 && level.ice_staff_pieces.size > 0 ) - { - foreach ( s_staff in level.ice_staff_pieces ) - { - a_staff_spots = []; - n_active_mounds = 0; - for ( i = 0; i < level.a_dig_spots.size; i++ ) - { - if ( isDefined( s_dig_spot.str_zone ) && issubstr( s_dig_spot.str_zone, s_staff.zone_substr ) ) - { - if ( !is_true( s_dig_spot.dug ) ) - { - n_active_mounds++; - } - else - { - a_staff_spots[ a_staff_spots.size ] = s_dig_spot; - } - } - } - if ( n_active_mounds < 2 && a_staff_spots.size > 0 && level.n_dig_spots_cur <= level.n_dig_spots_max ) - { - n_index = randomint( a_staff_spots.size ); - a_staff_spots[ n_index ].dug = undefined; - a_staff_spots[ n_index ] thread dig_spot_spawn(); - arrayremoveindex( a_staff_spots, n_index ); - n_active_mounds++; - wait_network_frame(); - } - } - } - } -} - -dig_spot_spawn() //checked changed to match cerberus output -{ - level.n_dig_spots_cur++; - self.m_dig = spawn( "script_model", self.origin + vectorScale( ( 0, 0, -1 ), 40 ) ); - self.m_dig setmodel( "p6_zm_tm_dig_mound" ); - self.m_dig.angles = self.angles; - self.m_dig moveto( self.origin, 3, 0, 1 ); - self.m_dig waittill( "movedone" ); - t_dig = tomb_spawn_trigger_radius( self.origin + vectorScale( ( 0, 0, 1 ), 20 ), 100, 1 ); - t_dig.prompt_and_visibility_func = ::dig_spot_trigger_visibility; - t_dig.require_look_at = 1; - t_dig waittill_dug( self ); - t_dig tomb_unitrigger_delete(); - t_dig = undefined; - self.m_dig delete(); - self.m_dig = undefined; -} - -dig_spot_trigger_visibility( player ) //checked matches cerberus output -{ - if ( is_true( player.dig_vars[ "has_shovel" ] ) ) - { - self sethintstring( &"ZM_TOMB_X2D" ); - } - else - { - self sethintstring( &"ZM_TOMB_NS" ); - } - return 1; -} - -waittill_dug( s_dig_spot ) //checked changed to match cerberus output -{ - while ( 1 ) - { - self waittill( "trigger", player ); - if ( is_true( player.dig_vars[ "has_shovel" ] ) ) - { - player playsound( "evt_dig" ); - s_dig_spot.dug = 1; - level.n_dig_spots_cur--; - - playfx( level._effect[ "digging" ], self.origin ); - player setclientfieldtoplayer( "player_rumble_and_shake", 1 ); - player maps/mp/zombies/_zm_stats::increment_client_stat( "tomb_dig", 0 ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "tomb_dig" ); - s_staff_piece = s_dig_spot maps/mp/zm_tomb_main_quest::dig_spot_get_staff_piece( player ); - if ( isDefined( s_staff_piece ) ) - { - s_staff_piece maps/mp/zm_tomb_main_quest::show_ice_staff_piece( self.origin ); - player dig_reward_dialog( "dig_staff_part" ); - } - else - { - n_good_chance = 50; - if ( player.dig_vars[ "n_spots_dug" ] == 0 || player.dig_vars[ "n_losing_streak" ] == 3 ) - { - player.dig_vars[ "n_losing_streak" ] = 0; - n_good_chance = 100; - } - if ( player.dig_vars[ "has_upgraded_shovel" ] ) - { - if ( !player.dig_vars[ "has_helmet" ] ) - { - n_helmet_roll = randomint( 100 ); - if ( n_helmet_roll >= 95 ) - { - player.dig_vars[ "has_helmet" ] = 1; - n_player = player getentitynumber() + 1; - level setclientfield( "helmet_player" + n_player, 1 ); - player playsoundtoplayer( "zmb_squest_golden_anything", player ); - player maps/mp/zombies/_zm_stats::increment_client_stat( "tomb_golden_hard_hat", 0 ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "tomb_golden_hard_hat" ); - return; - } - } - n_good_chance = 70; - } - n_prize_roll = randomint( 100 ); - if ( n_prize_roll > n_good_chance ) - { - if ( cointoss() ) - { - player dig_reward_dialog( "dig_grenade" ); - self thread dig_up_grenade( player ); - } - else - { - player dig_reward_dialog( "dig_zombie" ); - self thread dig_up_zombie( player, s_dig_spot ); - } - player.dig_vars[ "n_losing_streak" ]++; - } - else if ( cointoss() ) - { - self thread dig_up_powerup( player ); - } - else - { - player dig_reward_dialog( "dig_gun" ); - self thread dig_up_weapon( player ); - } - } - if ( !player.dig_vars[ "has_upgraded_shovel" ] ) - { - player.dig_vars[ "n_spots_dug" ]++; - if ( player.dig_vars[ "n_spots_dug" ] >= 30 ) - { - player.dig_vars[ "has_upgraded_shovel" ] = 1; - player thread ee_zombie_blood_dig(); - n_player = player getentitynumber() + 1; - level setclientfield( "shovel_player" + n_player, 2 ); - player playsoundtoplayer( "zmb_squest_golden_anything", player ); - player maps/mp/zombies/_zm_stats::increment_client_stat( "tomb_golden_shovel", 0 ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "tomb_golden_shovel" ); - } - } - return; - } - } -} - -dig_up_zombie( player, s_dig_spot ) //checked changed to match cerberus output -{ - ai_zombie = spawn_zombie( level.dig_spawners[ 0 ] ); - ai_zombie endon( "death" ); - ai_zombie ghost(); - e_linker = spawn( "script_origin", ( 0, 0, 0 ) ); - e_linker.origin = ai_zombie.origin; - e_linker.angles = ai_zombie.angles; - ai_zombie linkto( e_linker ); - e_linker moveto( player.origin + vectorScale( ( 1, 1, 0 ), 100 ), 0.1 ); - e_linker waittill( "movedone" ); - ai_zombie unlink(); - e_linker delete(); - ai_zombie show(); - ai_zombie playsound( "evt_zombie_dig_dirt" ); - ai_zombie dug_zombie_rise( s_dig_spot ); - find_flesh_struct_string = "find_flesh"; - ai_zombie notify( "zombie_custom_think_done", find_flesh_struct_string ); -} - -dig_up_powerup( player ) //checked changed to match cerberus output -{ - powerup = spawn( "script_model", self.origin ); - powerup endon( "powerup_grabbed" ); - powerup endon( "powerup_timedout" ); - a_rare_powerups = dig_get_rare_powerups( player ); - powerup_item = undefined; - if ( ( level.dig_n_powerups_spawned + level.powerup_drop_count ) > 4 || level.dig_last_prize_rare || a_rare_powerups.size == 0 || randomint( 100 ) < 80 ) - { - if ( level.dig_n_zombie_bloods_spawned < 1 && randomint( 100 ) > 70 ) - { - powerup_item = "zombie_blood"; - level.dig_n_zombie_bloods_spawned++; - level.dig_n_powerups_spawned++; - player dig_reward_dialog( "dig_powerup" ); - } - else - { - powerup_item = "bonus_points_player"; - player dig_reward_dialog( "dig_cash" ); - } - level.dig_last_prize_rare = 0; - } - else - { - powerup_item = a_rare_powerups[ randomint( a_rare_powerups.size ) ]; - level.dig_last_prize_rare = 1; - level.dig_n_powerups_spawned++; - player dig_reward_dialog( "dig_powerup" ); - dig_set_powerup_spawned( powerup_item ); - } - powerup maps/mp/zombies/_zm_powerups::powerup_setup( powerup_item ); - powerup movez( 40, 0.6 ); - powerup waittill( "movedone" ); - powerup thread maps/mp/zombies/_zm_powerups::powerup_timeout(); - powerup thread maps/mp/zombies/_zm_powerups::powerup_wobble(); - powerup thread maps/mp/zombies/_zm_powerups::powerup_grab(); -} - -dig_get_rare_powerups( player ) //checked changed to match cerberus output -{ - a_rare_powerups = []; - a_possible_powerups = array( "nuke", "double_points" ); - if ( level.dig_magic_box_moved && !dig_has_powerup_spawned( "fire_sale" ) ) - { - a_possible_powerups[ a_possible_powerups.size ] = "fire_sale"; - } - if ( player.dig_vars[ "has_upgraded_shovel" ] ) - { - a_possible_powerups = combinearrays( a_possible_powerups, array( "insta_kill", "full_ammo" ) ); - } - foreach ( powerup in a_possible_powerups ) - { - if ( !dig_has_powerup_spawned( powerup ) ) - { - a_rare_powerups[ a_rare_powerups.size ] = powerup; - } - } - return a_rare_powerups; -} - -dig_up_grenade( player ) //checked changed to match cerberus output -{ - player endon( "disconnect" ); - v_spawnpt = self.origin; - grenade = "frag_grenade_zm"; - n_rand = randomintrange( 0, 4 ); - player magicgrenadetype( grenade, v_spawnpt, vectorScale( ( 0, 0, 1 ), 300 ), 3 ); - player playsound( "evt_grenade_digup" ); - if ( n_rand ) - { - wait 0.3; - if ( cointoss() ) - { - player magicgrenadetype( grenade, v_spawnpt, ( 50, 50, 300 ), 3 ); - } - } -} - -dig_up_weapon( digger ) //checked changed to match cerberus output -{ - a_common_weapons = array( "ballista_zm", "c96_zm", "870mcs_zm" ); - a_rare_weapons = array( "dsr50_zm", "srm1216_zm" ); - if ( digger.dig_vars[ "has_upgraded_shovel" ] ) - { - a_rare_weapons = combinearrays( a_rare_weapons, array( "claymore_zm", "ak74u_zm", "ksg_zm", "mp40_zm", "mp44_zm" ) ); - } - str_weapon = undefined; - if ( randomint( 100 ) < 90 ) - { - str_weapon = a_common_weapons[ getarraykeys( a_common_weapons )[ randomint( getarraykeys( a_common_weapons ).size ) ] ]; - } - else - { - str_weapon = a_rare_weapons[ getarraykeys( a_rare_weapons )[ randomint( getarraykeys( a_rare_weapons ).size ) ] ]; - } - v_spawnpt = self.origin + ( 0, 0, 40 ); - v_spawnang = ( 0, 0, 0 ); - str_spec_model = undefined; - if ( str_weapon == "claymore_zm" ) - { - str_spec_model = "t6_wpn_claymore_world"; - v_spawnang += vectorScale( ( 0, 1, 0 ), 90 ); - } - v_angles = digger getplayerangles(); - v_angles = ( 0, v_angles[ 1 ], 0 ) + vectorScale( ( 0, 1, 0 ), 90 ) + v_spawnang; - m_weapon = spawn_weapon_model( str_weapon, str_spec_model, v_spawnpt, v_angles ); - if ( str_weapon == "claymore_zm" ) - { - m_weapon setmodel( "t6_wpn_claymore_world" ); - v_spawnang += vectorScale( ( 0, 0, 1 ), 90 ); - } - m_weapon.angles = v_angles; - m_weapon playloopsound( "evt_weapon_digup" ); - m_weapon thread timer_til_despawn( v_spawnpt, 40 * -1 ); - m_weapon endon( "dig_up_weapon_timed_out" ); - playfxontag( level._effect[ "special_glow" ], m_weapon, "tag_origin" ); - m_weapon.trigger = tomb_spawn_trigger_radius( v_spawnpt, 100, 1 ); - m_weapon.trigger.hint_string = &"ZM_TOMB_X2PU"; - m_weapon.trigger.hint_parm1 = getweapondisplayname( str_weapon ); - m_weapon.trigger waittill( "trigger", player ); - m_weapon.trigger notify( "weapon_grabbed" ); - m_weapon.trigger thread swap_weapon( str_weapon, player ); - if ( isDefined( m_weapon.trigger ) ) - { - m_weapon.trigger tomb_unitrigger_delete(); - m_weapon.trigger = undefined; - } - if ( isDefined( m_weapon ) ) - { - m_weapon delete(); - } - if ( player != digger ) - { - digger notify( "dig_up_weapon_shared" ); - } -} - -swap_weapon( str_weapon, e_player ) //checked matches cerberus output -{ - str_current_weapon = e_player getcurrentweapon(); - if ( str_weapon == "claymore_zm" ) - { - if ( !e_player hasweapon( str_weapon ) ) - { - e_player thread maps/mp/zombies/_zm_weap_claymore::show_claymore_hint( "claymore_purchased" ); - e_player thread maps/mp/zombies/_zm_weap_claymore::claymore_setup(); - e_player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" ); - } - else - { - e_player givemaxammo( str_weapon ); - } - return; - } - if ( is_player_valid( e_player ) && !e_player.is_drinking && !is_placeable_mine( str_current_weapon ) && !is_equipment( str_current_weapon ) && level.revive_tool != str_current_weapon && str_current_weapon != "none" && !e_player hacker_active() ) - { - if ( !e_player hasweapon( str_weapon ) ) - { - e_player take_old_weapon_and_give_new( str_current_weapon, str_weapon ); - return; - } - else - { - e_player givemaxammo( str_weapon ); - } - } -} - -take_old_weapon_and_give_new( current_weapon, weapon ) //checked matches cerberus output -{ - a_weapons = self getweaponslistprimaries(); - if ( isDefined( a_weapons ) && a_weapons.size >= get_player_weapon_limit( self ) ) - { - self takeweapon( current_weapon ); - } - self giveweapon( weapon ); - self switchtoweapon( weapon ); -} - -timer_til_despawn( v_float, n_dist ) //checked matches cerberus output -{ - self endon( "weapon_grabbed" ); - putbacktime = 12; - self movez( n_dist, putbacktime, putbacktime * 0.5 ); - self waittill( "movedone" ); - self notify( "dig_up_weapon_timed_out" ); - if ( isDefined( self.trigger ) ) - { - self.trigger tomb_unitrigger_delete(); - self.trigger = undefined; - } - if ( isDefined( self ) ) - { - self delete(); - } -} - -get_player_perk_purchase_limit() //checked matches cerberus output -{ - if ( isDefined( self.player_perk_purchase_limit ) ) - { - return self.player_perk_purchase_limit; - } - return level.perk_purchase_limit; -} - -increment_player_perk_purchase_limit() //checked matches cerberus output -{ - if ( !isDefined( self.player_perk_purchase_limit ) ) - { - self.player_perk_purchase_limit = level.perk_purchase_limit; - } - if ( self.player_perk_purchase_limit < 8 ) - { - self.player_perk_purchase_limit++; - } -} - -ee_zombie_blood_dig() //checked changed to match cerberus output -{ - self endon( "disconnect" ); - n_z_spots_found = 0; - a_z_spots = getstructarray( "zombie_blood_dig_spot", "targetname" ); - self.t_zombie_blood_dig = spawn( "trigger_radius_use", ( 0, 0, 0 ), 0, 100, 50 ); - self.t_zombie_blood_dig.e_unique_player = self; - self.t_zombie_blood_dig triggerignoreteam(); - self.t_zombie_blood_dig setcursorhint( "HINT_NOICON" ); - self.t_zombie_blood_dig sethintstring( &"ZM_TOMB_X2D" ); - self.t_zombie_blood_dig maps/mp/zombies/_zm_powerup_zombie_blood::make_zombie_blood_entity(); - while ( n_z_spots_found < 4 ) - { - a_randomized = array_randomize( a_z_spots ); - n_index = undefined; - for ( i = 0; i < a_randomized.size; i++ ) - { - if ( !isDefined( a_randomized[ i ].n_player ) ) - { - n_index = i; - break; - } - } - /* -/# - assert( isDefined( n_index ), "No more zombie blood dig spots. Add more to the map." ); -#/ - */ - s_z_spot = a_randomized[ n_index ]; - s_z_spot.n_player = self getentitynumber(); - s_z_spot create_zombie_blood_dig_spot( self ); - n_z_spots_found++; - level waittill( "end_of_round" ); - } - self.t_zombie_blood_dig delete(); -} - -ee_zombie_blood_dig_disconnect_watch() //checked changed to match cerberus output -{ - self waittill( "disconnect" ); - if ( isDefined( self.t_zombie_blood_dig ) ) - { - self.t_zombie_blood_dig delete(); - } - a_z_spots = getstructarray( "zombie_blood_dig_spot", "targetname" ); - foreach ( s_pos in a_z_spots ) - { - if ( isDefined( s_pos.n_player ) && s_pos.n_player == self getentitynumber() ) - { - s_pos.n_player = undefined; - } - if ( isDefined( s_pos.m_dig ) ) - { - s_pos delete(); - } - } -} - -create_zombie_blood_dig_spot( e_player ) //checked changed to match cerberus output -{ - self.m_dig = spawn( "script_model", self.origin + vectorScale( ( 0, 0, -1 ), 40 ) ); - self.m_dig.angles = self.angles; - self.m_dig setmodel( "p6_zm_tm_dig_mound_blood" ); - self.m_dig maps/mp/zombies/_zm_powerup_zombie_blood::make_zombie_blood_entity(); - self.m_dig moveto( self.origin, 3, 0, 1 ); - self.m_dig waittill( "movedone" ); - self.m_dig.e_unique_player = e_player; - /* -/# - self thread puzzle_debug_position( "+", vectorScale( ( 0, 0, 1 ), 255 ), self.origin ); -#/ - */ - e_player.t_zombie_blood_dig.origin = self.origin + vectorScale( ( 0, 0, 1 ), 20 ); - e_player.t_zombie_blood_dig waittill_zombie_blood_dug( self ); - /* -/# - self notify( "stop_debug_position" ); -#/ - */ -} - -waittill_zombie_blood_dug( s_dig_spot ) //checked changed to match cerberus output -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( "trigger", player ); - if ( is_true( player.dig_vars[ "has_shovel" ] ) ) - { - player.t_zombie_blood_dig.origin = ( 0, 0, 0 ); - player playsound( "evt_dig" ); - playfx( level._effect[ "digging" ], self.origin ); - s_dig_spot.m_dig delete(); - spawn_perk_upgrade_bottle( s_dig_spot.origin, player ); - return; - } - } -} - -spawn_perk_upgrade_bottle( v_origin, e_player ) //checked changed to match cerberus output -{ - m_bottle = spawn( "script_model", v_origin + vectorScale( ( 0, 0, 1 ), 40 ) ); - m_bottle setmodel( "zombie_pickup_perk_bottle" ); - m_bottle.angles = vectorScale( ( 1, 0, 0 ), 10 ); - m_bottle setinvisibletoall(); - m_bottle setvisibletoplayer( e_player ); - m_fx = spawn( "script_model", m_bottle.origin ); - m_fx setmodel( "tag_origin" ); - m_fx setinvisibletoall(); - m_fx setvisibletoplayer( e_player ); - playfxontag( level._effect[ "special_glow" ], m_fx, "tag_origin" ); - m_bottle linkto( m_fx ); - m_fx thread rotate_perk_upgrade_bottle(); - while ( isDefined( e_player ) && !e_player istouching( m_bottle ) ) - { - wait 0.05; - } - m_bottle delete(); - m_fx delete(); - if ( isDefined( e_player ) ) - { - e_player increment_player_perk_purchase_limit(); - e_player maps/mp/zombies/_zm_stats::increment_client_stat( "tomb_perk_extension", 0 ); - e_player maps/mp/zombies/_zm_stats::increment_player_stat( "tomb_perk_extension" ); - } -} - -rotate_perk_upgrade_bottle() //checked matches cerberus output -{ - self endon( "death" ); - while ( 1 ) - { - self rotateyaw( 360, 5 ); - self waittill( "rotatedone" ); - } -} - -bonus_points_powerup_override() //checked matches cerberus output -{ - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "blood_money" ); - points = randomintrange( 1, 6 ) * 50; - return points; -} - -dig_powerups_tracking() //checked changed to match cerberus output -{ - level endon( "end_game" ); - level.dig_powerups_tracking = []; - level.dig_magic_box_moved = 0; - level.dig_last_prize_rare = 0; - level.dig_n_zombie_bloods_spawned = 0; - level.dig_n_powerups_spawned = 0; - while ( 1 ) - { - level waittill( "end_of_round" ); - foreach ( value in level.dig_powerups_tracking ) - { - level.dig_powerups_tracking[ value ] = 0; - } - level.dig_n_zombie_bloods_spawned = 0; - level.dig_n_powerups_spawned = 0; - } -} - -dig_has_powerup_spawned( str_powerup ) //checked matches cerberus output -{ - if ( !isDefined( level.dig_powerups_tracking[ str_powerup ] ) ) - { - level.dig_powerups_tracking[ str_powerup ] = 0; - } - return level.dig_powerups_tracking[ str_powerup ]; -} - -dig_set_powerup_spawned( str_powerup ) //checked matches cerberus output -{ - level.dig_powerups_tracking[ str_powerup ] = 1; -} - -setup_dig_devgui() //dev call skipped -{ - /* -/# - setdvar( "give_shovel", "off" ); - setdvar( "give_golden_shovel", "off" ); - setdvar( "give_helmet", "off" ); - setdvar( "spawn_max_mounds", "off" ); - setdvar( "spawn_all_mounds", "off" ); - setdvar( "test_blood_mounds", "off" ); - setdvar( "force_weather_rain", "off" ); - setdvar( "force_weather_snow", "off" ); - setdvar( "force_weather_none", "off" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Digging:1/Give Shovel:1" "give_shovel on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Digging:1/Give Golden Shovel:2" "give_golden_shovel on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Digging:1/Give Helmet:3" "give_helmet on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Digging:1/Spawn Max Mounds:4" "spawn_max_mounds on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Digging:1/Spawn All Mounds:5" "spawn_all_mounds on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Digging:1/Test Blood Mounds:6" "test_blood_mounds on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Weather:1/Rain:1" "force_weather_rain on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Weather:1/Snow:2" "force_weather_snow on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Weather:1/Clear:3" "force_weather_none on"\n" ); - level thread watch_devgui_dig(); -#/ - */ -} - -watch_devgui_dig() //dev call skipped -{ - /* -/# - while ( 1 ) - { - while ( getDvar( "give_shovel" ) == "on" ) - { - setdvar( "give_shovel", "off" ); - _a1131 = getplayers(); - _k1131 = getFirstArrayKey( _a1131 ); - while ( isDefined( _k1131 ) ) - { - player = _a1131[ _k1131 ]; - player.dig_vars[ "has_shovel" ] = 1; - n_player = player getentitynumber() + 1; - level setclientfield( "shovel_player" + n_player, 1 ); - _k1131 = getNextArrayKey( _a1131, _k1131 ); - } - } - while ( getDvar( "give_golden_shovel" ) == "on" ) - { - setdvar( "give_golden_shovel", "off" ); - _a1141 = getplayers(); - _k1141 = getFirstArrayKey( _a1141 ); - while ( isDefined( _k1141 ) ) - { - player = _a1141[ _k1141 ]; - player.dig_vars[ "has_shovel" ] = 1; - player.dig_vars[ "has_upgraded_shovel" ] = 1; - player thread ee_zombie_blood_dig(); - n_player = player getentitynumber() + 1; - level setclientfield( "shovel_player" + n_player, 2 ); - _k1141 = getNextArrayKey( _a1141, _k1141 ); - } - } - while ( getDvar( "give_helmet" ) == "on" ) - { - setdvar( "give_helmet", "off" ); - _a1153 = getplayers(); - _k1153 = getFirstArrayKey( _a1153 ); - while ( isDefined( _k1153 ) ) - { - player = _a1153[ _k1153 ]; - player.dig_vars[ "has_helmet" ] = 1; - n_player = player getentitynumber() + 1; - level setclientfield( "helmet_player" + n_player, 1 ); - _k1153 = getNextArrayKey( _a1153, _k1153 ); - } - } - while ( getDvar( "spawn_max_mounds" ) == "on" ) - { - setdvar( "spawn_max_mounds", "off" ); - a_dig_spots = array_randomize( level.a_dig_spots ); - i = 0; - while ( i < a_dig_spots.size ) - { - if ( is_true( a_dig_spots[ i ].dug ) && level.n_dig_spots_cur <= level.n_dig_spots_max ) - { - a_dig_spots[ i ].dug = undefined; - a_dig_spots[ i ] thread dig_spot_spawn(); - wait_network_frame(); - } - i++; - } - } - while ( getDvar( "spawn_all_mounds" ) == "on" ) - { - setdvar( "spawn_all_mounds", "off" ); - a_dig_spots = array_randomize( level.a_dig_spots ); - i = 0; - while ( i < a_dig_spots.size ) - { - if ( is_true( a_dig_spots[ i ].dug ) ) - { - a_dig_spots[ i ].dug = undefined; - a_dig_spots[ i ] thread dig_spot_spawn(); - wait_network_frame(); - } - i++; - } - } - while ( getDvar( "test_blood_mounds" ) == "on" ) - { - setdvar( "test_blood_mounds", "off" ); - a_z_spots = getstructarray( "zombie_blood_dig_spot", "targetname" ); - _a1193 = a_z_spots; - _k1193 = getFirstArrayKey( _a1193 ); - while ( isDefined( _k1193 ) ) - { - s_spot = _a1193[ _k1193 ]; - s_spot.m_dig = spawn( "script_model", s_spot.origin + vectorScale( ( 0, 0, -1 ), 40 ) ); - s_spot.m_dig.angles = s_spot.angles; - s_spot.m_dig setmodel( "p6_zm_tm_dig_mound_blood" ); - s_spot.m_dig moveto( s_spot.origin, 3, 0, 1 ); - wait_network_frame(); - _k1193 = getNextArrayKey( _a1193, _k1193 ); - } - } - while ( getDvar( "force_weather_rain" ) == "on" ) - { - setdvar( "force_weather_rain", "off" ); - level.weather_snow = 0; - level.weather_rain = 5; - level.weather_vision = 1; - level setclientfield( "rain_level", level.weather_rain ); - level setclientfield( "snow_level", level.weather_snow ); - wait 1; - _a1212 = getplayers(); - _k1212 = getFirstArrayKey( _a1212 ); - while ( isDefined( _k1212 ) ) - { - player = _a1212[ _k1212 ]; - if ( is_player_valid( player, 0, 1 ) ) - { - player set_weather_to_player(); - } - _k1212 = getNextArrayKey( _a1212, _k1212 ); - } - } - while ( getDvar( "force_weather_snow" ) == "on" ) - { - setdvar( "force_weather_snow", "off" ); - level.weather_snow = 5; - level.weather_rain = 0; - level.weather_vision = 2; - level setclientfield( "rain_level", level.weather_rain ); - level setclientfield( "snow_level", level.weather_snow ); - wait 1; - _a1229 = getplayers(); - _k1229 = getFirstArrayKey( _a1229 ); - while ( isDefined( _k1229 ) ) - { - player = _a1229[ _k1229 ]; - if ( is_player_valid( player, 0, 1 ) ) - { - player set_weather_to_player(); - } - _k1229 = getNextArrayKey( _a1229, _k1229 ); - } - } - while ( getDvar( "force_weather_none" ) == "on" ) - { - setdvar( "force_weather_none", "off" ); - level.weather_snow = 0; - level.weather_rain = 0; - level.weather_vision = 3; - level setclientfield( "rain_level", level.weather_rain ); - level setclientfield( "snow_level", level.weather_snow ); - wait 1; - _a1246 = getplayers(); - _k1246 = getFirstArrayKey( _a1246 ); - while ( isDefined( _k1246 ) ) - { - player = _a1246[ _k1246 ]; - if ( is_player_valid( player, 0, 1 ) ) - { - player set_weather_to_player(); - } - _k1246 = getNextArrayKey( _a1246, _k1246 ); - } - } - wait 0,05; -#/ - } - */ -} - diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_distance_tracking.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_distance_tracking.gsc deleted file mode 100644 index be8efe5..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_distance_tracking.gsc +++ /dev/null @@ -1,433 +0,0 @@ -#include maps/mp/zm_tomb_chamber; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -zombie_tracking_init() -{ - level.zombie_respawned_health = []; - if ( !isDefined( level.zombie_tracking_dist ) ) - { - level.zombie_tracking_dist = 1520; - } - if ( !isDefined( level.zombie_tracking_high ) ) - { - level.zombie_tracking_high = 1000; - } - if ( !isDefined( level.zombie_tracking_wait ) ) - { - level.zombie_tracking_wait = 10; - } - for ( ;; ) - { - while ( 1 ) - { - a_players = get_players(); - _a33 = a_players; - _k33 = getFirstArrayKey( _a33 ); - while ( isDefined( _k33 ) ) - { - player = _a33[ _k33 ]; - if ( !player maps/mp/zombies/_zm_zonemgr::player_in_zone( "zone_air_stairs" ) && !player maps/mp/zombies/_zm_zonemgr::player_in_zone( "zone_bolt_stairs" ) || player maps/mp/zombies/_zm_zonemgr::player_in_zone( "zone_fire_stairs" ) && player maps/mp/zombies/_zm_zonemgr::player_in_zone( "zone_ice_stairs" ) ) - { - player.b_in_tunnels = 1; - } - else - { - player.b_in_tunnels = 0; - } - _k33 = getNextArrayKey( _a33, _k33 ); - } - zombies = get_round_enemy_array(); - if ( !isDefined( zombies ) || isDefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking ) - { - wait level.zombie_tracking_wait; - } - } - else i = 0; - while ( i < zombies.size ) - { - if ( isDefined( zombies[ i ] ) && isDefined( zombies[ i ].ignore_distance_tracking ) && !zombies[ i ].ignore_distance_tracking ) - { - zombies[ i ] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high ); - } - i++; - } - wait level.zombie_tracking_wait; - } -} - -delete_zombie_noone_looking( how_close, how_high ) -{ - self endon( "death" ); - if ( !isDefined( how_close ) ) - { - how_close = 1500; - } - if ( !isDefined( how_high ) ) - { - how_high = 600; - } - distance_squared_check = how_close * how_close; - too_far_dist = distance_squared_check * 3; - if ( isDefined( level.zombie_tracking_too_far_dist ) ) - { - too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist; - } - self.inview = 0; - self.player_close = 0; - n_distance_squared = 0; - n_height_difference = 0; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ].sessionstate == "spectator" ) - { - i++; - continue; - } - else if ( isDefined( level.only_track_targeted_players ) ) - { - if ( !isDefined( self.favoriteenemy ) || self.favoriteenemy != players[ i ] ) - { - i++; - continue; - } - } - else - { - can_be_seen = self player_can_see_me( players[ i ] ); - if ( can_be_seen && distancesquared( self.origin, players[ i ].origin ) < too_far_dist ) - { - self.inview++; - } - n_modifier = 1; - if ( isDefined( players[ i ].b_in_tunnels ) && players[ i ].b_in_tunnels ) - { - n_modifier = 2,25; - } - n_distance_squared = distancesquared( self.origin, players[ i ].origin ); - n_height_difference = abs( self.origin[ 2 ] - players[ i ].origin[ 2 ] ); - if ( n_distance_squared < ( distance_squared_check * n_modifier ) && n_height_difference < how_high ) - { - self.player_close++; - } - } - i++; - } - if ( self.inview == 0 && self.player_close == 0 ) - { - if ( !isDefined( self.animname ) || self.animname != "zombie" && self.animname != "mechz_zombie" ) - { - return; - } - if ( isDefined( self.electrified ) && self.electrified == 1 ) - { - return; - } - if ( isDefined( self.in_the_ground ) && self.in_the_ground == 1 ) - { - return; - } - zombies = getaiarray( "axis" ); - if ( isDefined( self.damagemod ) && self.damagemod == "MOD_UNKNOWN" && self.health < self.maxhealth ) - { - if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher ) - { - level.zombie_total++; - level.zombie_respawned_health[ level.zombie_respawned_health.size ] = self.health; - } - } - else - { - if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && self.health >= self.maxhealth ) - { - if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher ) - { - level.zombie_total++; - if ( self.health < level.zombie_health ) - { - level.zombie_respawned_health[ level.zombie_respawned_health.size ] = self.health; - } - } - } - } - self maps/mp/zombies/_zm_spawner::reset_attack_spot(); - self notify( "zombie_delete" ); - if ( isDefined( self.is_mechz ) && self.is_mechz ) - { - self notify( "mechz_cleanup" ); - level.mechz_left_to_spawn++; - wait_network_frame(); - level notify( "spawn_mechz" ); - } - self delete(); - recalc_zombie_array(); - } -} - -player_can_see_me( player ) -{ - playerangles = player getplayerangles(); - playerforwardvec = anglesToForward( playerangles ); - playerunitforwardvec = vectornormalize( playerforwardvec ); - banzaipos = self.origin; - playerpos = player getorigin(); - playertobanzaivec = banzaipos - playerpos; - playertobanzaiunitvec = vectornormalize( playertobanzaivec ); - forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec ); - if ( forwarddotbanzai >= 1 ) - { - anglefromcenter = 0; - } - else if ( forwarddotbanzai <= -1 ) - { - anglefromcenter = 180; - } - else - { - anglefromcenter = acos( forwarddotbanzai ); - } - playerfov = getDvarFloat( "cg_fov" ); - banzaivsplayerfovbuffer = getDvarFloat( "g_banzai_player_fov_buffer" ); - if ( banzaivsplayerfovbuffer <= 0 ) - { - banzaivsplayerfovbuffer = 0,2; - } - playercanseeme = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) ); - return playercanseeme; -} - -escaped_zombies_cleanup_init() -{ - self endon( "death" ); - self.zombie_path_bad = 0; - while ( 1 ) - { - if ( !self.zombie_path_bad ) - { - self waittill( "bad_path" ); - } - found_player = undefined; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( is_player_valid( players[ i ] ) && self maymovetopoint( players[ i ].origin, 1 ) ) - { - self.favoriteenemy = players[ i ]; - found_player = 1; - i++; - continue; - } - i++; - } - n_delete_distance = 1500; - n_delete_height = 1000; - if ( !isDefined( found_player ) && isDefined( self.in_the_ground ) && !isDefined( self.completed_emerging_into_playable_area ) ) - { - self thread delete_zombie_noone_looking( n_delete_distance, n_delete_height ); - self.zombie_path_bad = 1; - self escaped_zombies_cleanup(); - } - else - { - if ( !isDefined( found_player ) && isDefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area ) - { - self thread delete_zombie_noone_looking( n_delete_distance, n_delete_height ); - self.zombie_path_bad = 1; - self escaped_zombies_cleanup(); - } - } - wait 0,1; - } -} - -escaped_zombies_cleanup() -{ - self endon( "death" ); - s_escape = self get_escape_position(); - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - if ( isDefined( s_escape ) ) - { - self setgoalpos( s_escape.origin ); - self thread check_player_available(); - self waittill_any( "goal", "reaquire_player" ); - } - self.zombie_path_bad = !can_zombie_path_to_any_player(); - wait 0,1; - if ( !self.zombie_path_bad ) - { - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - } -} - -get_escape_position() -{ - self endon( "death" ); - str_zone = get_current_zone(); - if ( !isDefined( str_zone ) ) - { - str_zone = self.zone_name; - } - if ( isDefined( str_zone ) ) - { - a_zones = get_adjacencies_to_zone( str_zone ); - a_dog_locations = get_dog_locations_in_zones( a_zones ); - s_farthest = self get_farthest_dog_location( a_dog_locations ); - } - return s_farthest; -} - -check_player_available() -{ - self notify( "_check_player_available" ); - self endon( "_check_player_available" ); - self endon( "death" ); - self endon( "goal" ); - while ( self.zombie_path_bad ) - { - wait randomfloatrange( 0,2, 0,5 ); - if ( self can_zombie_see_any_player() ) - { - self notify( "reaquire_player" ); - return; - } - } - self notify( "reaquire_player" ); -} - -can_zombie_path_to_any_player() -{ - a_players = get_players(); - i = 0; - while ( i < a_players.size ) - { - if ( !is_player_valid( a_players[ i ] ) ) - { - i++; - continue; - } - else - { - v_player_origin = a_players[ i ].origin; - if ( isDefined( self.b_on_tank ) ) - { - if ( isDefined( a_players[ i ].b_already_on_tank ) ) - { - if ( self.b_on_tank != a_players[ i ].b_already_on_tank ) - { - v_player_origin = level.vh_tank gettagorigin( "window_left_rear_jmp_jnt" ); - } - } - } - if ( findpath( self.origin, v_player_origin ) ) - { - return 1; - } - } - i++; - } - return 0; -} - -can_zombie_see_any_player() -{ - a_players = get_players(); - zombie_in_chamber = maps/mp/zm_tomb_chamber::is_point_in_chamber( self.origin ); - i = 0; - while ( i < a_players.size ) - { - if ( !is_player_valid( a_players[ i ] ) ) - { - i++; - continue; - } - else player_origin = a_players[ i ].origin; - if ( isDefined( a_players[ i ].b_already_on_tank ) && a_players[ i ].b_already_on_tank ) - { - if ( isDefined( self.b_on_tank ) && self.b_on_tank ) - { - return 1; - } - else - { - player_origin = level.vh_tank gettagorigin( "window_left_rear_jmp_jnt" ); - } - } - else - { - player_in_chamber = maps/mp/zm_tomb_chamber::is_point_in_chamber( a_players[ i ].origin ); - if ( player_in_chamber != zombie_in_chamber ) - { - i++; - continue; - } - } - else - { - path_length = 0; - path_length = self calcpathlength( player_origin ); - if ( self maymovetopoint( player_origin, 1 ) || path_length != 0 ) - { - return 1; - } - } - i++; - } - return 0; -} - -get_adjacencies_to_zone( str_zone ) -{ - a_adjacencies = []; - a_adjacencies[ 0 ] = str_zone; - a_adjacent_zones = getarraykeys( level.zones[ str_zone ].adjacent_zones ); - i = 0; - while ( i < a_adjacent_zones.size ) - { - if ( level.zones[ str_zone ].adjacent_zones[ a_adjacent_zones[ i ] ].is_connected ) - { - a_adjacencies[ a_adjacencies.size ] = a_adjacent_zones[ i ]; - } - i++; - } - return a_adjacencies; -} - -get_dog_locations_in_zones( a_zones ) -{ - a_dog_locations = []; - _a471 = a_zones; - _k471 = getFirstArrayKey( _a471 ); - while ( isDefined( _k471 ) ) - { - zone = _a471[ _k471 ]; - a_dog_locations = arraycombine( a_dog_locations, level.zones[ zone ].dog_locations, 0, 0 ); - _k471 = getNextArrayKey( _a471, _k471 ); - } - return a_dog_locations; -} - -get_farthest_dog_location( a_dog_locations ) -{ - n_farthest_index = 0; - n_distance_farthest = 0; - i = 0; - while ( i < a_dog_locations.size ) - { - n_distance_sq = distancesquared( self.origin, a_dog_locations[ i ].origin ); - if ( n_distance_sq > n_distance_farthest ) - { - n_distance_farthest = n_distance_sq; - n_farthest_index = i; - } - i++; - } - return a_dog_locations[ n_farthest_index ]; -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_lights.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_lights.gsc deleted file mode 100644 index 64186f6..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_lights.gsc +++ /dev/null @@ -1,175 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/zm_tomb_quest_crypt; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_craftables; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -main() //checked changed to match cerberus output -{ - registerclientfield( "world", "light_show", 14000, 2, "int" ); - flag_init( "show_morse_code" ); - init_morse_code(); - flag_wait( "start_zombie_round_logic" ); - chamber_discs = getentarray( "crypt_puzzle_disc", "script_noteworthy" ); - lit_discs = []; - foreach ( disc in chamber_discs ) - { - if ( isDefined( disc.script_int ) ) - { - lit_discs[ disc.script_int - 1 ] = disc; - } - } - flag_wait_any( "ee_all_staffs_upgraded", "show_morse_code" ); - while ( 1 ) - { - setclientfield( "light_show", 1 ); - if ( randomint( 100 ) < 10 ) - { - turn_all_lights_off( lit_discs ); - wait 10; - setclientfield( "light_show", 3 ); - light_show_morse( lit_discs, "GIOVAN BATTISTA BELLASO" ); - setclientfield( "light_show", 1 ); - } - turn_all_lights_off( lit_discs ); - wait 10; - setclientfield( "light_show", 2 ); - light_show_morse( lit_discs, level.cipher_key ); - foreach ( message in level.morse_messages ) - { - setclientfield( "light_show", 1 ); - cipher = phrase_convert_to_cipher( message, level.cipher_key ); - turn_all_lights_off( lit_discs ); - wait 10; - light_show_morse( lit_discs, cipher ); - } - } -} - -init_morse_code() //checked matches cerberus output -{ - level.morse_letters = []; - level.morse_letters[ "A" ] = ".-"; - level.morse_letters[ "B" ] = "-..."; - level.morse_letters[ "C" ] = "-.-."; - level.morse_letters[ "D" ] = "-.."; - level.morse_letters[ "E" ] = "."; - level.morse_letters[ "F" ] = "..-."; - level.morse_letters[ "G" ] = "--."; - level.morse_letters[ "H" ] = "...."; - level.morse_letters[ "I" ] = ".."; - level.morse_letters[ "J" ] = ".---"; - level.morse_letters[ "K" ] = "-.-"; - level.morse_letters[ "L" ] = ".-.."; - level.morse_letters[ "M" ] = "--"; - level.morse_letters[ "N" ] = "-."; - level.morse_letters[ "O" ] = "---"; - level.morse_letters[ "P" ] = ".--."; - level.morse_letters[ "Q" ] = "--.-"; - level.morse_letters[ "R" ] = ".-."; - level.morse_letters[ "S" ] = "..."; - level.morse_letters[ "T" ] = "-"; - level.morse_letters[ "U" ] = "..-"; - level.morse_letters[ "V" ] = "...-"; - level.morse_letters[ "W" ] = ".--"; - level.morse_letters[ "X" ] = "-..-"; - level.morse_letters[ "Y" ] = "-.--"; - level.morse_letters[ "Z" ] = "--.."; - level.morse_messages = []; - level.morse_messages[ 0 ] = "WARN MESSINES"; - level.morse_messages[ 1 ] = "SOMETHING BLUE IN THE EARTH"; - level.morse_messages[ 2 ] = "NOT CLAY"; - level.morse_messages[ 3 ] = "WE GREW WEAK"; - level.morse_messages[ 4 ] = "THOUGHT IT WAS FLU"; - level.morse_messages[ 5 ] = "MEN BECAME BEASTS"; - level.morse_messages[ 6 ] = "BLOOD TURNED TO ASH"; - level.morse_messages[ 7 ] = "LIBERATE TUTE DE INFERNIS"; - level.cipher_key = "INFERNO"; -} - -turn_all_lights_off( a_discs ) -{ - foreach ( disc in a_discs ) - { - disc maps/mp/zm_tomb_quest_crypt::bryce_cake_light_update( 0 ); - } -} - -turn_all_lights_on( a_discs ) -{ - foreach ( disc in a_discs ) - { - disc maps/mp/zm_tomb_quest_crypt::bryce_cake_light_update( 1 ); - } -} - -phrase_convert_to_cipher( str_phrase, str_key ) //checked partially changed to match cerberus output see info.md -{ - alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - alphabet_vals = []; - num = 0; - for ( i = 0; i < alphabet.size; i++ ) - { - letter = alphabet[ i ]; - alphabet_vals[ letter ] = num; - num++; - } - encrypted_phrase = []; - j = 0; - for ( i = 0; i < str_phrase.size; i++ ) - { - cipher_letter = str_key[ j % str_key.size ]; - original_letter = str_phrase[ i ]; - n_original_letter = alphabet_vals[ original_letter ]; - if ( !isDefined( n_original_letter ) ) - { - encrypted_phrase[ encrypted_phrase.size ] = original_letter; - } - else - { - n_cipher_offset = alphabet_vals[ cipher_letter ]; - n_ciphered_letter = ( n_original_letter + n_cipher_offset ) % alphabet.size; - encrypted_phrase[ encrypted_phrase.size ] = alphabet[ n_ciphered_letter ]; - j++; - } - } - return encrypted_phrase; -} - -light_show_morse( a_discs, message ) -{ - for ( i = 0; i < message.size; i++ ) - { - letter = message[ i ]; - letter_code = level.morse_letters[ letter ]; - if ( isDefined( letter_code ) ) - { - j = 0; - while ( j < letter_code.size ) - { - turn_all_lights_on( a_discs ); - if ( letter_code[ j ] == "." ) - { - wait 0.2; - } - else if ( letter_code[ j ] == "-" ) - { - wait 1; - } - turn_all_lights_off( a_discs ); - wait 0.5; - j++; - } - } - else - { - wait 2; - } - wait 1.5; - } -} - diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main.gsc deleted file mode 100644 index dbec07d..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main.gsc +++ /dev/null @@ -1,527 +0,0 @@ -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm; -#include maps/mp/zm_tomb_amb; -#include maps/mp/gametypes_zm/_hud; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zm_tomb_vo; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - registerclientfield( "actor", "ee_zombie_fist_fx", 14000, 1, "int" ); - registerclientfield( "actor", "ee_zombie_soul_portal", 14000, 1, "int" ); - registerclientfield( "world", "ee_sam_portal", 14000, 2, "int" ); - registerclientfield( "vehicle", "ee_plane_fx", 14000, 1, "int" ); - registerclientfield( "world", "ee_ending", 14000, 1, "int" ); - precache_models(); - flag_init( "ee_all_staffs_crafted" ); - flag_init( "ee_all_staffs_upgraded" ); - flag_init( "ee_all_staffs_placed" ); - flag_init( "ee_mech_zombie_hole_opened" ); - flag_init( "ee_mech_zombie_fight_completed" ); - flag_init( "ee_maxis_drone_retrieved" ); - flag_init( "ee_all_players_upgraded_punch" ); - flag_init( "ee_souls_absorbed" ); - flag_init( "ee_samantha_released" ); - flag_init( "ee_quadrotor_disabled" ); - flag_init( "ee_sam_portal_active" ); - if ( !is_sidequest_allowed( "zclassic" ) ) - { - return; - } -/# - level thread setup_ee_main_devgui(); -#/ - declare_sidequest( "little_girl_lost", ::init_sidequest, ::sidequest_logic, ::complete_sidequest, ::generic_stage_start, ::generic_stage_end ); - maps/mp/zm_tomb_ee_main_step_1::init(); - maps/mp/zm_tomb_ee_main_step_2::init(); - maps/mp/zm_tomb_ee_main_step_3::init(); - maps/mp/zm_tomb_ee_main_step_4::init(); - maps/mp/zm_tomb_ee_main_step_5::init(); - maps/mp/zm_tomb_ee_main_step_6::init(); - maps/mp/zm_tomb_ee_main_step_7::init(); - maps/mp/zm_tomb_ee_main_step_8::init(); - flag_wait( "start_zombie_round_logic" ); - sidequest_start( "little_girl_lost" ); -} - -precache_models() -{ - precachemodel( "p_rus_alarm_button" ); - precachemodel( "p6_zm_tm_staff_holder" ); - precachemodel( "p6_zm_tm_runes" ); - precachemodel( "drone_collision" ); -} - -init_sidequest() -{ - level.n_ee_step = 0; - level.n_ee_robot_staffs_planted = 0; -} - -sidequest_logic() -{ - level._cur_stage_name = "step_0"; - flag_wait( "ee_all_staffs_crafted" ); - flag_wait( "all_zones_captured" ); - level.n_ee_step++; - level thread zombie_blood_hint_watch(); - stage_start( "little_girl_lost", "step_1" ); - level waittill( "little_girl_lost_step_1_over" ); - stage_start( "little_girl_lost", "step_2" ); - level waittill( "little_girl_lost_step_2_over" ); - level thread maps/mp/zm_tomb_amb::sndplaystingerwithoverride( "mus_event_ee_step2", 15 ); - stage_start( "little_girl_lost", "step_3" ); - level waittill( "little_girl_lost_step_3_over" ); - level thread maps/mp/zm_tomb_amb::sndplaystingerwithoverride( "mus_event_ee_step3", 35 ); - stage_start( "little_girl_lost", "step_4" ); - level waittill( "little_girl_lost_step_4_over" ); - level thread maps/mp/zm_tomb_amb::sndplaystingerwithoverride( "mus_event_ee_step4", 30 ); - stage_start( "little_girl_lost", "step_5" ); - level waittill( "little_girl_lost_step_5_over" ); - level thread maps/mp/zm_tomb_amb::sndplaystingerwithoverride( "mus_event_ee_step5", 29 ); - stage_start( "little_girl_lost", "step_6" ); - level waittill( "little_girl_lost_step_6_over" ); - level thread maps/mp/zm_tomb_amb::sndplaystingerwithoverride( "mus_event_ee_step6", 28 ); - stage_start( "little_girl_lost", "step_7" ); - level waittill( "little_girl_lost_step_7_over" ); - level thread maps/mp/zm_tomb_amb::sndplaystingerwithoverride( "mus_event_ee_step7", 31 ); - stage_start( "little_girl_lost", "step_8" ); - level waittill( "little_girl_lost_step_8_over" ); -} - -zombie_blood_hint_watch() -{ - n_curr_step = level.n_ee_step; - a_player_hint[ 0 ] = 0; - a_player_hint[ 1 ] = 0; - a_player_hint[ 2 ] = 0; - a_player_hint[ 3 ] = 0; - while ( !flag( "ee_samantha_released" ) ) - { - level waittill( "player_zombie_blood", e_player ); - while ( n_curr_step != level.n_ee_step ) - { - n_curr_step = level.n_ee_step; - i = 0; - while ( i < a_player_hint.size ) - { - a_player_hint[ i ] = 0; - i++; - } - } - if ( !a_player_hint[ e_player.characterindex ] ) - { - wait randomfloatrange( 3, 7 ); - if ( isDefined( e_player.vo_promises_playing ) && e_player.vo_promises_playing ) - { - continue; - } - while ( isDefined( level.sam_talking ) && level.sam_talking ) - { - wait 0,05; - } - if ( isDefined( e_player ) && isplayer( e_player ) && e_player.zombie_vars[ "zombie_powerup_zombie_blood_on" ] ) - { - a_player_hint[ e_player.characterindex ] = 1; - set_players_dontspeak( 1 ); - level.sam_talking = 1; - str_vox = get_zombie_blood_hint_vox(); - e_player playsoundtoplayer( str_vox, e_player ); - n_duration = soundgetplaybacktime( str_vox ); - wait ( n_duration / 1000 ); - level.sam_talking = 0; - set_players_dontspeak( 0 ); - } - continue; - } - else - { - if ( randomint( 100 ) < 20 ) - { - wait randomfloatrange( 3, 7 ); - if ( isDefined( e_player.vo_promises_playing ) && e_player.vo_promises_playing ) - { - continue; - } - while ( isDefined( level.sam_talking ) && level.sam_talking ) - { - wait 0,05; - } - if ( isDefined( e_player ) && isplayer( e_player ) && e_player.zombie_vars[ "zombie_powerup_zombie_blood_on" ] ) - { - str_vox = get_zombie_blood_hint_generic_vox(); - if ( isDefined( str_vox ) ) - { - set_players_dontspeak( 1 ); - level.sam_talking = 1; - e_player playsoundtoplayer( str_vox, e_player ); - n_duration = soundgetplaybacktime( str_vox ); - wait ( n_duration / 1000 ); - level.sam_talking = 0; - set_players_dontspeak( 0 ); - } - } - } - } - } -} - -get_step_announce_vox() -{ - switch( level.n_ee_step ) - { - case 1: - return "vox_sam_all_staff_upgrade_key_0"; - case 2: - return "vox_sam_all_staff_ascend_darkness_0"; - case 3: - return "vox_sam_all_staff_rain_fire_0"; - case 4: - return "vox_sam_all_staff_unleash_hoard_0"; - case 5: - return "vox_sam_all_staff_skewer_beast_0"; - case 6: - return "vox_sam_all_staff_fist_iron_0"; - case 7: - return "vox_sam_all_staff_raise_hell_0"; - default: - return undefined; - } -} - -get_zombie_blood_hint_vox() -{ - if ( flag( "all_zones_captured" ) ) - { - return "vox_sam_upgrade_staff_clue_" + level.n_ee_step + "_0"; - } - return "vox_sam_upgrade_staff_clue_" + level.n_ee_step + "_grbld_0"; -} - -get_zombie_blood_hint_generic_vox() -{ - if ( !isDefined( level.generic_clue_index ) ) - { - level.generic_clue_index = 0; - } - vo_array[ 0 ] = "vox_sam_heard_by_all_1_0"; - vo_array[ 1 ] = "vox_sam_heard_by_all_2_0"; - vo_array[ 2 ] = "vox_sam_heard_by_all_3_0"; - vo_array[ 3 ] = "vox_sam_slow_progress_0"; - vo_array[ 4 ] = "vox_sam_slow_progress_2"; - vo_array[ 5 ] = "vox_sam_slow_progress_3"; - if ( level.generic_clue_index >= vo_array.size ) - { - return undefined; - } - str_vo = vo_array[ level.generic_clue_index ]; - level.generic_clue_index++; - return str_vo; -} - -complete_sidequest() -{ - level.sndgameovermusicoverride = "game_over_ee"; - a_players = getplayers(); - _a293 = a_players; - _k293 = getFirstArrayKey( _a293 ); - while ( isDefined( _k293 ) ) - { - player = _a293[ _k293 ]; - player freezecontrols( 1 ); - player thread fadetoblackforxsec( 0, 5, 0,5, 0, "white" ); - _k293 = getNextArrayKey( _a293, _k293 ); - } - playsoundatposition( "zmb_squest_whiteout", ( 0, 0, -1 ) ); - delay_thread( 0,5, ::remove_portal_beam ); - level.custom_intermission = ::player_intermission_ee; - level setclientfield( "ee_ending", 1 ); - wait_network_frame(); - level notify( "end_game" ); -} - -remove_portal_beam() -{ - if ( isDefined( level.ee_ending_beam_fx ) ) - { - level.ee_ending_beam_fx delete(); - } -} - -generic_stage_start() -{ - str_vox = get_step_announce_vox(); - if ( isDefined( str_vox ) ) - { - level thread ee_samantha_say( str_vox ); - } -} - -generic_stage_end() -{ - level.n_ee_step++; - if ( level.n_ee_step <= 6 ) - { - flag_wait( "all_zones_captured" ); - } - wait_network_frame(); - wait_network_frame(); -} - -all_staffs_inserted_in_puzzle_room() -{ - n_staffs_inserted = 0; - _a350 = level.a_elemental_staffs; - _k350 = getFirstArrayKey( _a350 ); - while ( isDefined( _k350 ) ) - { - staff = _a350[ _k350 ]; - if ( staff.upgrade.charger.is_inserted ) - { - n_staffs_inserted++; - } - _k350 = getNextArrayKey( _a350, _k350 ); - } - if ( n_staffs_inserted == 4 ) - { - return 1; - } - else - { - return 0; - } -} - -ee_samantha_say( str_vox ) -{ - flag_waitopen( "story_vo_playing" ); - flag_set( "story_vo_playing" ); - set_players_dontspeak( 1 ); - samanthasay( str_vox, get_players()[ 0 ] ); - set_players_dontspeak( 0 ); - flag_clear( "story_vo_playing" ); -} - -player_intermission_ee() -{ - self closemenu(); - self closeingamemenu(); - level endon( "stop_intermission" ); - self endon( "disconnect" ); - self endon( "death" ); - self notify( "_zombie_game_over" ); - self.score = self.score_total; - self.sessionstate = "intermission"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - points = getstructarray( "ee_cam", "targetname" ); - if ( !isDefined( points ) || points.size == 0 ) - { - points = getentarray( "info_intermission", "classname" ); - if ( points.size < 1 ) - { -/# - println( "NO info_intermission POINTS IN MAP" ); -#/ - return; - } - } - self.game_over_bg = newclienthudelem( self ); - self.game_over_bg.horzalign = "fullscreen"; - self.game_over_bg.vertalign = "fullscreen"; - self.game_over_bg setshader( "black", 640, 480 ); - self.game_over_bg.alpha = 1; - visionsetnaked( "cheat_bw", 0,05 ); - org = undefined; - while ( 1 ) - { - points = array_randomize( points ); - i = 0; - while ( i < points.size ) - { - point = points[ i ]; - if ( !isDefined( org ) ) - { - self spawn( point.origin, point.angles ); - } - if ( isDefined( points[ i ].target ) ) - { - if ( !isDefined( org ) ) - { - org = spawn( "script_model", self.origin + vectorScale( ( 0, 0, -1 ), 60 ) ); - org setmodel( "tag_origin" ); - } - org.origin = points[ i ].origin; - org.angles = points[ i ].angles; - j = 0; - while ( j < get_players().size ) - { - player = get_players()[ j ]; - player camerasetposition( org ); - player camerasetlookat(); - player cameraactivate( 1 ); - j++; - } - speed = 20; - if ( isDefined( points[ i ].speed ) ) - { - speed = points[ i ].speed; - } - target_point = getstruct( points[ i ].target, "targetname" ); - dist = distance( points[ i ].origin, target_point.origin ); - time = dist / speed; - q_time = time * 0,25; - if ( q_time > 1 ) - { - q_time = 1; - } - self.game_over_bg fadeovertime( q_time ); - self.game_over_bg.alpha = 0; - org moveto( target_point.origin, time, q_time, q_time ); - org rotateto( target_point.angles, time, q_time, q_time ); - wait ( time - q_time ); - self.game_over_bg fadeovertime( q_time ); - self.game_over_bg.alpha = 1; - wait q_time; - i++; - continue; - } - else - { - self.game_over_bg fadeovertime( 1 ); - self.game_over_bg.alpha = 0; - wait 5; - self.game_over_bg thread maps/mp/zombies/_zm::fade_up_over_time( 1 ); - } - i++; - } - } -} - -setup_ee_main_devgui() -{ -/# - wait 5; - b_activated = 0; - while ( !b_activated ) - { - _a507 = getplayers(); - _k507 = getFirstArrayKey( _a507 ); - while ( isDefined( _k507 ) ) - { - player = _a507[ _k507 ]; - if ( distance2d( player.origin, ( 2904, 5040, -336 ) ) < 100 && player usebuttonpressed() ) - { - wait 2; - if ( player usebuttonpressed() ) - { - b_activated = 1; - } - } - _k507 = getNextArrayKey( _a507, _k507 ); - } - wait 0,05; - } - setdvar( "ee_main_progress", "off" ); - setdvar( "ee_main_end_level", "off" ); - setdvar( "ee_upgrade_beacon", "off" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/EE Main:1/Next Step:1" "ee_main_progress on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/EE Main:1/Upgrade Beacon:2" "ee_upgrade_beacon on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/EE Main:1/End Level:3" "ee_main_end_level on"\n" ); - level thread watch_devgui_ee_main(); -#/ -} - -watch_devgui_ee_main() -{ -/# - while ( 1 ) - { - if ( getDvar( "ee_main_progress" ) == "on" ) - { - setdvar( "ee_main_progress", "off" ); - level.ee_debug = 1; - flag_set( "samantha_intro_done" ); - switch( level._cur_stage_name ) - { - case "step_0": - flag_set( "ee_all_staffs_crafted" ); - flag_set( "all_zones_captured" ); - break; - break; - case "step_1": - flag_set( "ee_all_staffs_upgraded" ); - level waittill( "little_girl_lost_step_1_over" ); - break; - break; - case "step_2": - flag_set( "ee_all_staffs_placed" ); - level waittill( "little_girl_lost_step_2_over" ); - break; - break; - case "step_3": - flag_set( "ee_mech_zombie_hole_opened" ); - m_floor = getent( "easter_mechzombie_spawn", "targetname" ); - if ( isDefined( m_floor ) ) - { - m_floor delete(); - } - level waittill( "little_girl_lost_step_3_over" ); - break; - break; - case "step_4": - flag_set( "ee_mech_zombie_fight_completed" ); - flag_set( "ee_quadrotor_disabled" ); - level waittill( "little_girl_lost_step_4_over" ); - break; - break; - case "step_5": - flag_set( "ee_maxis_drone_retrieved" ); - flag_clear( "ee_quadrotor_disabled" ); - level waittill( "little_girl_lost_step_5_over" ); - break; - break; - case "step_6": - flag_set( "ee_all_players_upgraded_punch" ); - level waittill( "little_girl_lost_step_6_over" ); - break; - break; - case "step_7": - flag_set( "ee_souls_absorbed" ); - level waittill( "little_girl_lost_step_7_over" ); - break; - break; - case "step_8": - flag_set( "ee_quadrotor_disabled" ); - level waittill( "little_girl_lost_step_8_over" ); - break; - break; - default: - } - } - if ( getDvar( "ee_main_end_level" ) == "on" ) - { - setdvar( "ee_main_end_level", "off" ); - level setclientfield( "ee_sam_portal", 2 ); - complete_sidequest(); - } - if ( getDvar( "ee_upgrade_beacon" ) == "on" ) - { - setdvar( "ee_upgrade_beacon", "off" ); - setdvar( "force_three_robot_round", "on" ); - flag_set( "fire_link_enabled" ); - array_thread( get_players(), ::maps/mp/zombies/_zm_weapons::weapon_give, "beacon_zm" ); - } - wait 0,05; -#/ - } - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_1.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_1.gsc deleted file mode 100644 index 3a0ef74..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_1.gsc +++ /dev/null @@ -1,32 +0,0 @@ -//checked includes matche cerberus output -#include maps/mp/zm_tomb_ee_main; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - declare_sidequest_stage( "little_girl_lost", "step_1", ::init_stage, ::stage_logic, ::exit_stage ); -} - -init_stage() //checked matches cerberus output -{ - level._cur_stage_name = "step_1"; -} - -stage_logic() //checked matches cerberus output -{ - /* -/# - iprintln( level._cur_stage_name + " of little girl lost started" ); -#/ - */ - flag_wait( "ee_all_staffs_upgraded" ); - wait_network_frame(); - stage_completed( "little_girl_lost", level._cur_stage_name ); -} - -exit_stage( success ) //checked matches cerberus output -{ -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_2.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_2.gsc deleted file mode 100644 index 92d0b8c..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_2.gsc +++ /dev/null @@ -1,155 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/zm_tomb_craftables; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_powerup_zombie_blood; -#include maps/mp/zm_tomb_ee_main; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - declare_sidequest_stage( "little_girl_lost", "step_2", ::init_stage, ::stage_logic, ::exit_stage ); - precachemodel( "p6_zm_tm_staff_holder" ); -} - -init_stage() //checked changed to match cerberus output -{ - level._cur_stage_name = "step_2"; - a_structs = getstructarray( "robot_head_staff", "targetname" ); - foreach ( unitrigger_stub in a_structs ) - { - level thread create_robot_head_trigger( unitrigger_stub ); - wait_network_frame(); - wait_network_frame(); - wait_network_frame(); - } -} - -stage_logic() //checked matches cerberus output -{ - /* -/# - iprintln( level._cur_stage_name + " of little girl lost started" ); -#/ - */ - flag_wait( "ee_all_staffs_placed" ); - playsoundatposition( "zmb_squest_robot_alarm_high", ( -14, -1, 871 ) ); - wait 3; - wait_network_frame(); - stage_completed( "little_girl_lost", level._cur_stage_name ); -} - -exit_stage( success ) //checked changed to match cerberus output -{ - a_structs = getstructarray( "robot_head_staff", "targetname" ); - foreach ( struct in a_structs ) - { - struct thread remove_plinth(); - wait_network_frame(); - wait_network_frame(); - wait_network_frame(); - } -} - -remove_plinth() //checked matches cerberus output -{ - playfx( level._effect[ "teleport_1p" ], self.m_plinth.origin ); - playsoundatposition( "zmb_footprintbox_disappear", self.m_plinth.origin ); - wait 3; - if ( isDefined( self.m_plinth.m_staff ) ) - { - self.m_plinth.m_staff unlink(); - self.m_plinth.m_staff.origin = self.m_plinth.v_old_origin; - self.m_plinth.m_staff.angles = self.m_plinth.v_old_angles; - self.m_plinth.e_staff.ee_in_use = undefined; - } - self.m_sign delete(); - self.m_plinth delete(); - self.m_coll delete(); - unregister_unitrigger( self ); -} - -create_robot_head_trigger( unitrigger_stub ) //checked matches cerberus output -{ - playfx( level._effect[ "teleport_1p" ], unitrigger_stub.origin ); - playsoundatposition( "zmb_footprintbox_disappear", unitrigger_stub.origin ); - wait 3; - unitrigger_stub.radius = 50; - unitrigger_stub.height = 256; - unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - unitrigger_stub.require_look_at = 1; - m_coll = spawn( "script_model", unitrigger_stub.origin ); - m_coll setmodel( "drone_collision" ); - unitrigger_stub.m_coll = m_coll; - wait_network_frame(); - m_plinth = spawn( "script_model", unitrigger_stub.origin ); - m_plinth.angles = unitrigger_stub.angles; - m_plinth setmodel( "p6_zm_tm_staff_holder" ); - unitrigger_stub.m_plinth = m_plinth; - wait_network_frame(); - m_sign = spawn( "script_model", unitrigger_stub.origin ); - m_sign setmodel( "p6_zm_tm_runes" ); - m_sign linkto( unitrigger_stub.m_plinth, "tag_origin", ( 0, 15, 40 ) ); - m_sign hidepart( "j_fire" ); - m_sign hidepart( "j_ice" ); - m_sign hidepart( "j_lightning" ); - m_sign hidepart( "j_wind" ); - switch ( unitrigger_stub.script_noteworthy ) - { - case "fire": - m_sign showpart( "j_fire" ); - break; - case "water": - m_sign showpart( "j_ice" ); - break; - case "lightning": - m_sign showpart( "j_lightning" ); - break; - case "air": - m_sign showpart( "j_wind" ); - break; - } - m_sign maps/mp/zombies/_zm_powerup_zombie_blood::make_zombie_blood_entity(); - unitrigger_stub.m_sign = m_sign; - unitrigger_stub.origin += vectorScale( ( 0, 0, 1 ), 30 ); - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::robot_head_trigger_think ); -} - -robot_head_trigger_think() //checked matches cerberus output -{ - self endon( "kill_trigger" ); - str_weap_staff = "staff_" + self.script_noteworthy + "_upgraded_zm"; - e_upgraded_staff = maps/mp/zm_tomb_craftables::get_staff_info_from_weapon_name( str_weap_staff ); - while ( 1 ) - { - self waittill( "trigger", player ); - if ( player hasweapon( str_weap_staff ) ) - { - e_upgraded_staff.ee_in_use = 1; - player takeweapon( str_weap_staff ); - maps/mp/zm_tomb_craftables::clear_player_staff( str_weap_staff ); - level.n_ee_robot_staffs_planted++; - if ( level.n_ee_robot_staffs_planted == 4 ) - { - flag_set( "ee_all_staffs_placed" ); - } - e_upgraded_staff thread place_staff( self.stub.m_plinth ); - } - } -} - -place_staff( m_plinth ) -{ - m_staff = getent( "craftable_" + self.weapname, "targetname" ); - m_plinth.e_staff = self; - m_plinth.m_staff = m_staff; - m_plinth.v_old_angles = m_staff.angles; - m_plinth.v_old_origin = m_staff.origin; - m_staff linkto( m_plinth, "tag_origin", ( 0, 10, 30 ), ( 345, 90, 0 ) ); - m_staff show(); - m_plinth playsound( "zmb_squest_robot_place_staff" ); -} - diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_3.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_3.gsc deleted file mode 100644 index f8b3895..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_3.gsc +++ /dev/null @@ -1,148 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zm_tomb_ee_main; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - declare_sidequest_stage( "little_girl_lost", "step_3", ::init_stage, ::stage_logic, ::exit_stage ); -} - -init_stage() //checked matches cerberus output -{ - level._cur_stage_name = "step_3"; - level.check_valid_poi = ::mech_zombie_hole_valid; - create_buttons_and_triggers(); -} - -stage_logic() //checked matches cerberus output -{ - /* -/# - iprintln( level._cur_stage_name + " of little girl lost started" ); -#/ - */ - level thread watch_for_triple_attack(); - flag_wait( "ee_mech_zombie_hole_opened" ); - wait_network_frame(); - stage_completed( "little_girl_lost", level._cur_stage_name ); -} - -exit_stage( success ) //checked changed to match cerberus output -{ - level.check_valid_poi = undefined; - level notify( "fire_link_cooldown" ); - flag_set( "fire_link_enabled" ); - a_buttons = getentarray( "fire_link_button", "targetname" ); - array_delete( a_buttons ); - a_structs = getstructarray( "fire_link", "targetname" ); - foreach ( unitrigger_stub in a_structs ) - { - unregister_unitrigger( unitrigger_stub ); - } -} - -create_buttons_and_triggers() //checked changed to match cerberus output -{ - a_structs = getstructarray( "fire_link", "targetname" ); - foreach ( unitrigger_stub in a_structs ) - { - unitrigger_stub.radius = 36; - unitrigger_stub.height = 256; - unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - unitrigger_stub.require_look_at = 1; - m_model = spawn( "script_model", unitrigger_stub.origin ); - m_model setmodel( "p_rus_alarm_button" ); - m_model.angles = unitrigger_stub.angles; - m_model.targetname = "fire_link_button"; - m_model thread ready_to_activate( unitrigger_stub ); - wait_network_frame(); - } -} - -ready_to_activate( unitrigger_stub ) //checked matches cerberus output -{ - self endon( "death" ); - self playsoundwithnotify( "vox_maxi_robot_sync_0", "sync_done" ); - self waittill( "sync_done" ); - wait 0.5; - self playsoundwithnotify( "vox_maxi_robot_await_0", "ready_to_use" ); - self waittill( "ready_to_use" ); - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::activate_fire_link ); -} - -watch_for_triple_attack() //checked matches cerberus output -{ - t_hole = getent( "fire_link_damage", "targetname" ); - while ( !flag( "ee_mech_zombie_hole_opened" ) ) - { - t_hole waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname ); - if ( isDefined( weaponname ) && weaponname == "beacon_zm" && flag( "fire_link_enabled" ) ) - { - playsoundatposition( "zmb_squest_robot_floor_collapse", t_hole.origin ); - wait 3; - m_floor = getent( "easter_mechzombie_spawn", "targetname" ); - m_floor delete(); - flag_set( "ee_mech_zombie_hole_opened" ); - t_hole delete(); - return; - } - } -} - -mech_zombie_hole_valid( valid ) //checked matches cerberus output -{ - t_hole = getent( "fire_link_damage", "targetname" ); - if ( self istouching( t_hole ) ) - { - return 1; - } - return valid; -} - -activate_fire_link() //checked changed to match cerberus output -{ - self endon( "kill_trigger" ); - while ( 1 ) - { - self waittill( "trigger", player ); - self playsound( "zmb_squest_robot_button" ); - if ( flag( "three_robot_round" ) ) - { - level thread fire_link_cooldown( self ); - self playsound( "zmb_squest_robot_button_activate" ); - self playloopsound( "zmb_squest_robot_button_timer", 0.5 ); - flag_waitopen( "fire_link_enabled" ); - self stoploopsound( 0.5 ); - self playsound( "zmb_squest_robot_button_deactivate" ); - } - else - { - self playsound( "vox_maxi_robot_abort_0" ); - self playsound( "zmb_squest_robot_button_deactivate" ); - wait 3; - } - } -} - -fire_link_cooldown( t_button ) //checked matches cerberus output -{ - level notify( "fire_link_cooldown" ); - level endon( "fire_link_cooldown" ); - flag_set( "fire_link_enabled" ); - if ( isDefined( t_button ) ) - { - t_button playsound( "vox_maxi_robot_activated_0" ); - } - wait 25; - if ( isDefined( t_button ) ) - { - t_button playsound( "vox_maxi_robot_deactivated_0" ); - } - flag_clear( "fire_link_enabled" ); -} - diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_4.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_4.gsc deleted file mode 100644 index f1b37d3..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_4.gsc +++ /dev/null @@ -1,257 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/animscripts/zm_shared; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_ai_mechz_ffotd; -#include maps/mp/zm_tomb_vo; -#include maps/mp/zombies/_zm_ai_mechz_booster; -#include maps/mp/zombies/_zm_ai_mechz_ft; -#include maps/mp/zombies/_zm_ai_mechz_claw; -#include maps/mp/zombies/_zm_ai_mechz_dev; -#include maps/mp/zombies/_zm_ai_mechz; -#include maps/mp/zm_tomb_ee_main; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - declare_sidequest_stage( "little_girl_lost", "step_4", ::init_stage, ::stage_logic, ::exit_stage ); -} - -init_stage() //checked matches cerberus output -{ - level._cur_stage_name = "step_4"; - level.ee_mech_zombies_killed = 0; - level.ee_mech_zombies_alive = 0; - level.ee_mech_zombies_spawned = 0; - level.quadrotor_custom_behavior = ::mech_zombie_hole_search; -} - -stage_logic() //checked changed to match cerberus output -{ - /* -/# - iprintln( level._cur_stage_name + " of little girl lost started" ); -#/ - */ - flag_wait( "ee_quadrotor_disabled" ); - level thread sndee4music(); - if ( !flag( "ee_mech_zombie_fight_completed" ) ) - { - while ( level.ee_mech_zombies_spawned < 8 ) - { - if ( level.ee_mech_zombies_alive < 4 ) - { - ai = spawn_zombie( level.mechz_spawners[ 0 ] ); - ai thread ee_mechz_spawn( level.ee_mech_zombies_spawned % 4 ); - level.ee_mech_zombies_alive++; - level.ee_mech_zombies_spawned++; - } - wait randomfloatrange( 0.5, 1 ); - } - } - flag_wait( "ee_mech_zombie_fight_completed" ); - wait_network_frame(); - stage_completed( "little_girl_lost", level._cur_stage_name ); -} - -exit_stage( success ) //checked matches cerberus output -{ - level.quadrotor_custom_behavior = undefined; -} - -mech_zombie_hole_search() //checked matches cerberus output -{ - s_goal = getstruct( "ee_mech_hole_goal_0", "targetname" ); - if ( distance2dsquared( self.origin, s_goal.origin ) < 250000 ) - { - self setvehgoalpos( s_goal.origin, 1, 2, 1 ); - self waittill_any( "near_goal", "force_goal", "reached_end_node" ); - s_goal = getstruct( "ee_mech_hole_goal_1", "targetname" ); - self setvehgoalpos( s_goal.origin, 1, 0, 1 ); - self waittill_any( "near_goal", "force_goal", "reached_end_node" ); - wait 2; - s_goal = getstruct( "ee_mech_hole_goal_2", "targetname" ); - self setvehgoalpos( s_goal.origin, 1, 0, 1 ); - self waittill_any( "near_goal", "force_goal", "reached_end_node" ); - playsoundatposition( "zmb_squest_maxis_folly", s_goal.origin ); - maxissay( "vox_maxi_drone_upgraded_3", self ); - flag_set( "ee_quadrotor_disabled" ); - self dodamage( 200, self.origin ); - self delete(); - level.maxis_quadrotor = undefined; - } -} - -ee_mechz_spawn( n_spawn_pos ) //checked matches cerberus output -{ - self maps/mp/zombies/_zm_ai_mechz_ffotd::spawn_start(); - self endon( "death" ); - level endon( "intermission" ); - self mechz_attach_objects(); - self mechz_set_starting_health(); - self mechz_setup_fx(); - self mechz_setup_snd(); - self.closest_player_override = maps/mp/zombies/_zm_ai_mechz::get_favorite_enemy; - self.animname = "mechz_zombie"; - self.has_legs = 1; - self.no_gib = 1; - self.ignore_all_poi = 1; - self.is_mechz = 1; - self.ignore_enemy_count = 1; - self.no_damage_points = 1; - self.melee_anim_func = ::melee_anim_func; - self.meleedamage = 75; - recalc_zombie_array(); - self setphysparams( 20, 0, 80 ); - self.zombie_init_done = 1; - self notify( "zombie_init_done" ); - self.allowpain = 0; - self animmode( "normal" ); - self orientmode( "face enemy" ); - self maps/mp/zombies/_zm_spawner::zombie_setup_attack_properties(); - self.completed_emerging_into_playable_area = 1; - self notify( "completed_emerging_into_playable_area" ); - self.no_powerups = 0; - self setfreecameralockonallowed( 0 ); - self thread maps/mp/zombies/_zm_spawner::zombie_eye_glow(); - level thread maps/mp/zombies/_zm_spawner::zombie_death_event( self ); - self thread maps/mp/zombies/_zm_spawner::enemy_death_detection(); - a_spawner_structs = getstructarray( "mech_hole_spawner", "targetname" ); - spawn_pos = a_spawner_structs[ n_spawn_pos ]; - if ( !isDefined( spawn_pos.angles ) ) - { - spawn_pos.angles = ( 0, 0, 0 ); - } - self thread mechz_death(); - self thread mechz_death_ee(); - self forceteleport( spawn_pos.origin, spawn_pos.angles ); - self set_zombie_run_cycle( "walk" ); - if ( isDefined( level.mechz_find_flesh_override_func ) ) - { - level thread [[ level.mechz_find_flesh_override_func ]](); - } - else - { - self thread mechz_find_flesh(); - } - self thread mechz_jump_think( spawn_pos ); - self ee_mechz_do_jump( spawn_pos ); - self maps/mp/zombies/_zm_ai_mechz_ffotd::spawn_end(); -} - -mechz_death_ee() //checked matches cerberus output -{ - self waittill( "death" ); - level.ee_mech_zombies_killed++; - level.ee_mech_zombies_alive--; - - if ( level.ee_mech_zombies_killed == 4 ) - { - v_max_ammo_origin = self.origin; - level thread maps/mp/zombies/_zm_powerups::specific_powerup_drop( "full_ammo", v_max_ammo_origin ); - } - if ( level.ee_mech_zombies_killed == 8 ) - { - v_nuke_origin = self.origin; - level thread maps/mp/zombies/_zm_powerups::specific_powerup_drop( "nuke", v_nuke_origin ); - flag_set( "ee_mech_zombie_fight_completed" ); - } -} - -ee_mechz_do_jump( s_spawn_pos ) //checked matches cerberus output -{ - self endon( "death" ); - self endon( "kill_jump" ); - /* -/# - if ( getDvarInt( #"E7121222" ) > 0 ) - { - println( "\nMZ: Doing Jump-Teleport\n" ); -#/ - } -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\nMZ: Jump setting not interruptable\n" ); -#/ - } - */ - self.not_interruptable = 1; - self setfreecameralockonallowed( 0 ); - self animscripted( self.origin, self.angles, "zm_fly_out" ); - self maps/mp/animscripts/zm_shared::donotetracks( "jump_anim" ); - self ghost(); - if ( isDefined( self.m_claw ) ) - { - self.m_claw ghost(); - } - old_fx = self.fx_field; - self thread maps/mp/zombies/_zm_spawner::zombie_eye_glow_stop(); - self fx_cleanup(); - self animscripted( self.origin, self.angles, "zm_fly_hover" ); - wait level.mechz_jump_delay; - s_landing_point = getstruct( s_spawn_pos.target, "targetname" ); - if ( !isDefined( s_landing_point.angles ) ) - { - s_landing_point.angles = ( 0, 0, 0 ); - } - self animscripted( s_landing_point.origin, s_landing_point.angles, "zm_fly_in" ); - self show(); - self.fx_field = old_fx; - self setclientfield( "mechz_fx", self.fx_field ); - self thread maps/mp/zombies/_zm_spawner::zombie_eye_glow(); - if ( isDefined( self.m_claw ) ) - { - self.m_claw show(); - } - self maps/mp/animscripts/zm_shared::donotetracks( "jump_anim" ); - self.not_interruptable = 0; - self setfreecameralockonallowed( 1 ); - /* -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\nMZ: Jump clearing not interruptable\n" ); -#/ - } - */ - mechz_jump_cleanup(); - self.closest_jump_point = s_landing_point; -} - -sndee4music() //checked matches cerberus output -{ - shouldplay = sndwait(); - if ( !shouldplay ) - { - return; - } - level.music_override = 1; - level setclientfield( "mus_zmb_egg_snapshot_loop", 1 ); - ent = spawn( "script_origin", ( 0, 0, 0 ) ); - ent playloopsound( "mus_mechz_fight_loop" ); - flag_wait( "ee_mech_zombie_fight_completed" ); - level setclientfield( "mus_zmb_egg_snapshot_loop", 0 ); - level.music_override = 0; - wait 0.05; - ent delete(); -} - -sndwait() //checked matches cerberus output -{ - counter = 0; - while ( is_true( level.music_override ) ) - { - wait 1; - counter++; - if ( counter >= 60 ) - { - return 0; - } - } - return 1; -} - diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_5.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_5.gsc deleted file mode 100644 index d995a01..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_5.gsc +++ /dev/null @@ -1,155 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_powerup_zombie_blood; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zm_tomb_ee_main; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - declare_sidequest_stage( "little_girl_lost", "step_5", ::init_stage, ::stage_logic, ::exit_stage ); -} - -init_stage() //checked matches cerberus output -{ - level._cur_stage_name = "step_5"; - level.callbackvehicledamage = ::ee_plane_vehicledamage; - level.zombie_ai_limit--; - -} - -stage_logic() //checked matches cerberus output -{ - /* -/# - iprintln( level._cur_stage_name + " of little girl lost started" ); -#/ - */ - level thread spawn_zombie_blood_plane(); - flag_wait( "ee_maxis_drone_retrieved" ); - wait_network_frame(); - stage_completed( "little_girl_lost", level._cur_stage_name ); -} - -exit_stage( success ) //checked matches cerberus output -{ - level.zombie_ai_limit++; -} - -spawn_zombie_blood_plane() //checked changed to match cerberus output -{ - s_biplane_pos = getstruct( "air_crystal_biplane_pos", "targetname" ); - vh_biplane = spawnvehicle( "veh_t6_dlc_zm_biplane", "zombie_blood_biplane", "biplane_zm", ( 0, 0, 0 ), ( 0, 0, 0 ) ); - vh_biplane ent_flag_init( "biplane_down", 0 ); - vh_biplane maps/mp/zombies/_zm_powerup_zombie_blood::make_zombie_blood_entity(); - vh_biplane playloopsound( "zmb_zombieblood_3rd_plane_loop", 1 ); - vh_biplane.health = 10000; - vh_biplane setcandamage( 1 ); - vh_biplane setforcenocull(); - vh_biplane attachpath( getvehiclenode( "biplane_start", "targetname" ) ); - vh_biplane startpath(); - vh_biplane setclientfield( "ee_plane_fx", 1 ); - vh_biplane ent_flag_wait( "biplane_down" ); - vh_biplane playsound( "zmb_zombieblood_3rd_plane_explode" ); - e_special_zombie = getentarray( "zombie_spawner_dig", "script_noteworthy" )[ 0 ]; - ai_pilot = spawn_zombie( e_special_zombie, "zombie_blood_pilot" ); - ai_pilot magic_bullet_shield(); - ai_pilot.ignore_enemy_count = 1; - ai_pilot maps/mp/zombies/_zm_powerup_zombie_blood::make_zombie_blood_entity(); - ai_pilot forceteleport( vh_biplane.origin, vh_biplane.angles ); - ai_pilot.sndname = "capzomb"; - ai_pilot.ignore_nuke = 1; - ai_pilot.b_zombie_blood_damage_only = 1; - playfx( level._effect[ "biplane_explode" ], vh_biplane.origin ); - vh_biplane delete(); - a_start_pos = getstructarray( "pilot_goal", "script_noteworthy" ); - a_start_pos = get_array_of_closest( ai_pilot.origin, a_start_pos ); - linker = spawn( "script_model", ai_pilot.origin ); - linker setmodel( "tag_origin" ); - ai_pilot linkto( linker ); - linker moveto( a_start_pos[ 0 ].origin, 3 ); - linker waittill( "movedone" ); - linker delete(); - ai_pilot stop_magic_bullet_shield(); - level thread zombie_pilot_sound( ai_pilot ); - ai_pilot.ignoreall = 1; - ai_pilot.zombie_move_speed = "sprint"; - ai_pilot set_zombie_run_cycle( "sprint" ); - ai_pilot thread pilot_loop_logic( a_start_pos[ 0 ] ); - ai_pilot waittill( "death" ); - level thread spawn_quadrotor_pickup( ai_pilot.origin, ai_pilot.angles ); -} - -zombie_pilot_sound( ai_pilot ) //checked matches cerberus output -{ - sndent = spawn( "script_origin", ai_pilot.origin ); - sndent playloopsound( "zmb_zombieblood_3rd_loop_other" ); - while ( isDefined( ai_pilot ) && isalive( ai_pilot ) ) - { - sndent.origin = ai_pilot.origin; - wait 0.3; - } - sndent delete(); -} - -pilot_loop_logic( s_start ) //checked matches cerberus output -{ - self endon( "death" ); - s_goal = s_start; - while ( isalive( self ) ) - { - self setgoalpos( s_goal.origin ); - self waittill( "goal" ); - s_goal = getstruct( s_goal.target, "targetname" ); - } -} - -ee_plane_vehicledamage( e_inflictor, e_attacker, n_damage, n_dflags, str_means_of_death, str_weapon, v_point, v_dir, str_hit_loc, psoffsettime, b_damage_from_underneath, n_model_index, str_part_name ) //checked matches cerberus output -{ - if ( self.vehicletype == "biplane_zm" && !self ent_flag( "biplane_down" ) ) - { - if ( isplayer( e_attacker ) && e_attacker.zombie_vars[ "zombie_powerup_zombie_blood_on" ] ) - { - self ent_flag_set( "biplane_down" ); - } - return 0; - } - return n_damage; -} - -spawn_quadrotor_pickup( v_origin, v_angles ) //checked matches cerberus output -{ - m_quadrotor = spawn( "script_model", v_origin + vectorScale( ( 0, 0, 1 ), 30 ) ); - m_quadrotor.angles = v_angles; - m_quadrotor setmodel( "veh_t6_dlc_zm_quadrotor" ); - m_quadrotor.targetname = "quadrotor_pickup"; - unitrigger_stub = spawnstruct(); - unitrigger_stub.origin = v_origin; - unitrigger_stub.radius = 36; - unitrigger_stub.height = 256; - unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - unitrigger_stub.hint_string = &"ZM_TOMB_DIHS"; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - unitrigger_stub.require_look_at = 1; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::quadrotor_pickup_think ); - flag_wait( "ee_maxis_drone_retrieved" ); - unregister_unitrigger( unitrigger_stub ); -} - -quadrotor_pickup_think() //checked matches cerberus output -{ - self endon( "kill_trigger" ); - m_quadrotor = getent( "quadrotor_pickup", "targetname" ); - while ( 1 ) - { - self waittill( "trigger", player ); - player playsound( "vox_maxi_drone_upgraded_0" ); - flag_clear( "ee_quadrotor_disabled" ); - flag_set( "ee_maxis_drone_retrieved" ); - m_quadrotor delete(); - } -} - diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_6.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_6.gsc deleted file mode 100644 index cc5fa65..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_6.gsc +++ /dev/null @@ -1,152 +0,0 @@ -//checked includes cerberus output -#include maps/mp/zombies/_zm_weap_one_inch_punch; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/gametypes_zm/_hud; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zm_tomb_ee_main; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - declare_sidequest_stage( "little_girl_lost", "step_6", ::init_stage, ::stage_logic, ::exit_stage ); -} - -init_stage() //checked matches cerberus output -{ - level._cur_stage_name = "step_6"; - maps/mp/zombies/_zm_spawner::add_custom_zombie_spawn_logic( ::ruins_fist_glow_monitor ); -} - -stage_logic() //checked matches cerberus output -{ - /* -/# - iprintln( level._cur_stage_name + " of little girl lost started" ); -#/ - */ - level setclientfield( "sndChamberMusic", 1 ); - flag_wait( "ee_all_players_upgraded_punch" ); - level setclientfield( "sndChamberMusic", 0 ); - wait_network_frame(); - stage_completed( "little_girl_lost", level._cur_stage_name ); -} - -exit_stage( success ) //checked matches cerberus output -{ -} - -ruins_fist_glow_monitor() //checked changed to match cerberus output -{ - if ( flag( "ee_all_players_upgraded_punch" ) ) - { - return; - } - if ( isDefined( self.zone_name ) && self.zone_name == "ug_bottom_zone" ) - { - wait 0.1; - self setclientfield( "ee_zombie_fist_fx", 1 ); - self.has_soul = 1; - while ( isalive( self ) ) - { - self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); - if ( !isDefined( inflictor.n_ee_punch_souls ) ) - { - inflictor.n_ee_punch_souls = 0; - inflictor.b_punch_upgraded = 0; - } - if ( self.has_soul && inflictor.n_ee_punch_souls < 20 && isDefined( weaponname ) && weaponname == "one_inch_punch_zm" && is_true( self.completed_emerging_into_playable_area ) ) - { - self setclientfield( "ee_zombie_fist_fx", 0 ); - self.has_soul = 0; - playsoundatposition( "zmb_squest_punchtime_punched", self.origin ); - inflictor.n_ee_punch_souls++; - if ( inflictor.n_ee_punch_souls == 20 ) - { - level thread spawn_punch_upgrade_tablet( self.origin, inflictor ); - } - } - } - } -} - -spawn_punch_upgrade_tablet( v_origin, e_player ) //checked changed to match cerberus output -{ - m_tablet = spawn( "script_model", v_origin + vectorScale( ( 0, 0, 1 ), 50 ) ); - m_tablet setmodel( "p6_zm_tm_tablet" ); - m_fx = spawn( "script_model", m_tablet.origin ); - m_fx setmodel( "tag_origin" ); - m_fx setinvisibletoall(); - m_fx setvisibletoplayer( e_player ); - m_tablet linkto( m_fx ); - playfxontag( level._effect[ "special_glow" ], m_fx, "tag_origin" ); - m_fx thread rotate_punch_upgrade_tablet(); - m_tablet playloopsound( "zmb_squest_punchtime_tablet_loop", 0.5 ); - m_tablet setinvisibletoall(); - m_tablet setvisibletoplayer( e_player ); - while ( isDefined( e_player ) && !e_player istouching( m_tablet ) ) - { - wait 0.05; - } - m_tablet delete(); - m_fx delete(); - e_player playsound( "zmb_squest_punchtime_tablet_pickup" ); - if ( isDefined( e_player ) ) - { - e_player thread fadetoblackforxsec( 0, 0.3, 0.5, 0.5, "white" ); - a_zombies = getaispeciesarray( level.zombie_team, "all" ); - foreach ( zombie in a_zombies ) - { - if ( distance2dsquared( e_player.origin, zombie.origin ) < 65536 && !is_true( zombie.is_mechz ) && is_true( zombie.has_legs ) && is_true( zombie.completed_emerging_into_playable_area ) ) - { - zombie.v_punched_from = e_player.origin; - zombie animcustom( maps/mp/zombies/_zm_weap_one_inch_punch::knockdown_zombie_animate ); - } - } - wait 1; - e_player.b_punch_upgraded = 1; - if ( e_player hasweapon( "staff_fire_upgraded_zm" ) ) - { - e_player.str_punch_element = "fire"; - } - else if ( e_player hasweapon( "staff_air_upgraded_zm" ) ) - { - e_player.str_punch_element = "air"; - } - else if ( e_player hasweapon( "staff_lightning_upgraded_zm" ) ) - { - e_player.str_punch_element = "lightning"; - } - else if ( e_player hasweapon( "staff_water_upgraded_zm" ) ) - { - e_player.str_punch_element = "ice"; - } - else - { - e_player.str_punch_element = "upgraded"; - } - e_player thread maps/mp/zombies/_zm_weap_one_inch_punch::one_inch_punch_melee_attack(); - a_players = getplayers(); - foreach ( player in a_players ) - { - if ( !isDefined( player.b_punch_upgraded ) || !player.b_punch_upgraded ) - { - return; - } - } - flag_set( "ee_all_players_upgraded_punch" ); - } -} - -rotate_punch_upgrade_tablet() //checked matches cerberus output -{ - self endon( "death" ); - while ( 1 ) - { - self rotateyaw( 360, 5 ); - self waittill( "rotatedone" ); - } -} - diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_7.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_7.gsc deleted file mode 100644 index 4c57fcc..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_7.gsc +++ /dev/null @@ -1,92 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/zm_tomb_chamber; -#include maps/mp/zm_tomb_vo; -#include maps/mp/zm_tomb_ee_main; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - declare_sidequest_stage( "little_girl_lost", "step_7", ::init_stage, ::stage_logic, ::exit_stage ); -} - -init_stage() //checked matches cerberus output -{ - level._cur_stage_name = "step_7"; - level.n_ee_portal_souls = 0; -} - -stage_logic() //checked matches cerberus output -{ - /* -/# - iprintln( level._cur_stage_name + " of little girl lost started" ); -#/ - */ - level thread monitor_puzzle_portal(); - level setclientfield( "sndChamberMusic", 2 ); - flag_wait( "ee_souls_absorbed" ); - level setclientfield( "sndChamberMusic", 3 ); - wait_network_frame(); - stage_completed( "little_girl_lost", level._cur_stage_name ); -} - -exit_stage( success ) //checked matches cerberus output -{ -} - -ee_zombie_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) //checked changed to match cerberus output -{ - if ( isDefined( attacker ) && isplayer( attacker ) && maps/mp/zm_tomb_chamber::is_point_in_chamber( self.origin ) ) - { - level.n_ee_portal_souls++; - if ( level.n_ee_portal_souls == 1 ) - { - level thread ee_samantha_say( "vox_sam_generic_encourage_3" ); - } - else if ( level.n_ee_portal_souls == floor( 33.33333 ) ) - { - level thread ee_samantha_say( "vox_sam_generic_encourage_4" ); - } - else if ( level.n_ee_portal_souls == floor( 66.66666 ) ) - { - level thread ee_samantha_say( "vox_sam_generic_encourage_5" ); - } - else if ( level.n_ee_portal_souls == 100 ) - { - level thread ee_samantha_say( "vox_sam_generic_encourage_0" ); - flag_set( "ee_souls_absorbed" ); - } - self setclientfield( "ee_zombie_soul_portal", 1 ); - } -} - -monitor_puzzle_portal() //checked changed to match cerberus output -{ - /* -/# - if ( is_true( level.ee_debug ) ) - { - flag_set( "ee_sam_portal_active" ); - level setclientfield( "ee_sam_portal", 1 ); - return; -#/ - } - */ - while ( !flag( "ee_souls_absorbed" ) ) - { - if ( all_staffs_inserted_in_puzzle_room() && !flag( "ee_sam_portal_active" ) ) - { - flag_set( "ee_sam_portal_active" ); - level setclientfield( "ee_sam_portal", 1 ); - } - else if ( !all_staffs_inserted_in_puzzle_room() && flag( "ee_sam_portal_active" ) ) - { - flag_clear( "ee_sam_portal_active" ); - level setclientfield( "ee_sam_portal", 0 ); - } - wait 0.5; - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_8.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_8.gsc deleted file mode 100644 index e265b7e..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_8.gsc +++ /dev/null @@ -1,101 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/zm_tomb_chamber; -#include maps/mp/gametypes_zm/_hud; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zm_tomb_vo; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zm_tomb_ee_main; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - declare_sidequest_stage( "little_girl_lost", "step_8", ::init_stage, ::stage_logic, ::exit_stage ); -} - -init_stage() //checked matches cerberus output -{ - level._cur_stage_name = "step_8"; - level.quadrotor_custom_behavior = ::move_into_portal; -} - -stage_logic() //checked changed to match cerberus output -{ - /* -/# - iprintln( level._cur_stage_name + " of little girl lost started" ); -#/ - */ - level notify( "tomb_sidequest_complete" ); - foreach ( player in get_players() ) - { - if ( player is_player_in_chamber() ) - { - player thread fadetoblackforxsec( 0, 1, 0.5, 0.5, "white" ); - } - } - wait 0.5; - level setclientfield( "ee_sam_portal", 2 ); - level notify( "stop_random_chamber_walls" ); - a_walls = getentarray( "chamber_wall", "script_noteworthy" ); - foreach ( e_wall in a_walls ) - { - e_wall thread maps/mp/zm_tomb_chamber::move_wall_up(); - e_wall hide(); - } - flag_wait( "ee_quadrotor_disabled" ); - wait 1; - level thread ee_samantha_say( "vox_sam_all_staff_freedom_0" ); - s_pos = getstruct( "player_portal_final", "targetname" ); - t_portal = tomb_spawn_trigger_radius( s_pos.origin, 100, 1 ); - t_portal.require_look_at = 1; - t_portal.hint_string = &"ZM_TOMB_TELE"; - t_portal thread waittill_player_activates(); - level.ee_ending_beam_fx = spawn( "script_model", s_pos.origin + vectorScale( ( 0, 0, -1 ), 300 ) ); - level.ee_ending_beam_fx.angles = vectorScale( ( 0, 1, 0 ), 90 ); - level.ee_ending_beam_fx setmodel( "tag_origin" ); - playfxontag( level._effect[ "ee_beam" ], level.ee_ending_beam_fx, "tag_origin" ); - level.ee_ending_beam_fx playsound( "zmb_squest_crystal_sky_pillar_start" ); - level.ee_ending_beam_fx playloopsound( "zmb_squest_crystal_sky_pillar_loop", 3 ); - flag_wait( "ee_samantha_released" ); - t_portal tomb_unitrigger_delete(); - wait_network_frame(); - stage_completed( "little_girl_lost", level._cur_stage_name ); -} - -exit_stage( success ) //checked matches cerberus output -{ -} - -waittill_player_activates() //checked matches cerberus output -{ - while ( 1 ) - { - self waittill( "trigger", player ); - flag_set( "ee_samantha_released" ); - } -} - -move_into_portal() //checked matches cerberus output -{ - s_goal = getstruct( "maxis_portal_path", "targetname" ); - if ( distance2dsquared( self.origin, s_goal.origin ) < 250000 ) - { - self setvehgoalpos( s_goal.origin, 1, 2, 1 ); - self waittill_any( "near_goal", "force_goal", "reached_end_node" ); - maxissay( "vox_maxi_drone_upgraded_1", self ); - wait 1; - level thread maxissay( "vox_maxi_drone_upgraded_2", self ); - s_goal = getstruct( s_goal.target, "targetname" ); - self setvehgoalpos( s_goal.origin, 1, 0, 1 ); - self waittill_any( "near_goal", "force_goal", "reached_end_node" ); - self playsound( "zmb_qrdrone_leave" ); - flag_set( "ee_quadrotor_disabled" ); - self dodamage( 200, self.origin ); - self delete(); - level.maxis_quadrotor = undefined; - } -} - diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_side.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_side.gsc deleted file mode 100644 index 3a3eee5..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ee_side.gsc +++ /dev/null @@ -1,668 +0,0 @@ -#include maps/mp/zm_tomb_amb; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zm_tomb_ee_lights; -#include maps/mp/zm_tomb_vo; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - precacheshader( "zm_tm_wth_dog" ); - precachemodel( "p6_zm_tm_tablet" ); - precachemodel( "p6_zm_tm_tablet_muddy" ); - precachemodel( "p6_zm_tm_radio_01" ); - precachemodel( "p6_zm_tm_radio_01_panel2_blood" ); - registerclientfield( "world", "wagon_1_fire", 14000, 1, "int" ); - registerclientfield( "world", "wagon_2_fire", 14000, 1, "int" ); - registerclientfield( "world", "wagon_3_fire", 14000, 1, "int" ); - registerclientfield( "actor", "ee_zombie_tablet_fx", 14000, 1, "int" ); - registerclientfield( "toplayer", "ee_beacon_reward", 14000, 1, "int" ); - onplayerconnect_callback( ::onplayerconnect_ee_jump_scare ); - onplayerconnect_callback( ::onplayerconnect_ee_oneinchpunch ); - sq_one_inch_punch(); - a_triggers = getentarray( "audio_bump_trigger", "targetname" ); - _a43 = a_triggers; - _k43 = getFirstArrayKey( _a43 ); - while ( isDefined( _k43 ) ) - { - trigger = _a43[ _k43 ]; - if ( isDefined( trigger.script_sound ) && trigger.script_sound == "zmb_perks_bump_bottle" ) - { - trigger thread check_for_change(); - } - _k43 = getNextArrayKey( _a43, _k43 ); - } - level thread wagon_fire_challenge(); - level thread wall_hole_poster(); - level thread quadrotor_medallions(); - level thread maps/mp/zm_tomb_ee_lights::main(); - level thread radio_ee_song(); -} - -quadrotor_medallions() -{ - flag_init( "ee_medallions_collected" ); - level thread quadrotor_medallions_vo(); - level.n_ee_medallions = 4; - flag_wait( "ee_medallions_collected" ); - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "side_sting_4" ); - s_mg_spawn = getstruct( "mgspawn", "targetname" ); - v_spawnpt = s_mg_spawn.origin; - v_spawnang = s_mg_spawn.angles; - player = get_players()[ 0 ]; - options = player maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( "mg08_upgraded_zm" ); - m_mg_model = spawn_weapon_model( "mg08_upgraded_zm", undefined, v_spawnpt, v_spawnang, options ); - playfxontag( level._effect[ "special_glow" ], m_mg_model, "tag_origin" ); - t_weapon_swap = tomb_spawn_trigger_radius( v_spawnpt, 100, 1 ); - t_weapon_swap.require_look_at = 1; - t_weapon_swap.hint_string = &"ZM_TOMB_X2PU"; - t_weapon_swap.hint_parm1 = getweapondisplayname( "mg08_upgraded_zm" ); - b_retrieved = 0; - while ( !b_retrieved ) - { - t_weapon_swap waittill( "trigger", e_player ); - b_retrieved = swap_mg( e_player ); - } - t_weapon_swap tomb_unitrigger_delete(); - m_mg_model delete(); -} - -quadrotor_medallions_vo() -{ - n_vo_counter = 0; - while ( n_vo_counter < 4 ) - { - level waittill( "quadrotor_medallion_found", v_quadrotor ); - v_quadrotor playsound( "zmb_medallion_pickup" ); - if ( isDefined( v_quadrotor ) ) - { - maxissay( "vox_maxi_drone_pickups_" + n_vo_counter, v_quadrotor ); - n_vo_counter++; - if ( isDefined( v_quadrotor ) && n_vo_counter == 4 ) - { - maxissay( "vox_maxi_drone_pickups_" + n_vo_counter, v_quadrotor ); - } - } - } -} - -swap_mg( e_player ) -{ - str_current_weapon = e_player getcurrentweapon(); - str_reward_weapon = maps/mp/zombies/_zm_weapons::get_upgrade_weapon( "mg08_zm" ); - if ( is_player_valid( e_player ) && !e_player.is_drinking && !is_placeable_mine( str_current_weapon ) && !is_equipment( str_current_weapon ) && level.revive_tool != str_current_weapon && str_current_weapon != "none" && !e_player hacker_active() ) - { - if ( e_player hasweapon( str_reward_weapon ) ) - { - e_player givemaxammo( str_reward_weapon ); - } - else - { - a_weapons = e_player getweaponslistprimaries(); - if ( isDefined( a_weapons ) && a_weapons.size >= get_player_weapon_limit( e_player ) ) - { - e_player takeweapon( str_current_weapon ); - } - e_player giveweapon( str_reward_weapon, 0, e_player maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( str_reward_weapon ) ); - e_player givestartammo( str_reward_weapon ); - e_player switchtoweapon( str_reward_weapon ); - } - return 1; - } - else - { - return 0; - } -} - -wall_hole_poster() -{ - m_poster = getent( "hole_poster", "targetname" ); - m_poster setcandamage( 1 ); - m_poster.health = 1000; - m_poster.maxhealth = m_poster.health; - while ( 1 ) - { - m_poster waittill( "damage" ); - if ( m_poster.health <= 0 ) - { - m_poster physicslaunch( m_poster.origin, ( 0, 0, 0 ) ); - } - } -} - -wagon_fire_challenge() -{ - flag_init( "ee_wagon_timer_start" ); - flag_init( "ee_wagon_challenge_complete" ); - s_powerup = getstruct( "wagon_powerup", "targetname" ); - flag_wait( "start_zombie_round_logic" ); - wagon_fire_start(); - while ( 1 ) - { - flag_wait( "ee_wagon_timer_start" ); - flag_wait_or_timeout( "ee_wagon_challenge_complete", 30 ); - if ( !flag( "ee_wagon_challenge_complete" ) ) - { - wagon_fire_start(); - flag_clear( "ee_wagon_timer_start" ); - continue; - } - else - { - maps/mp/zombies/_zm_powerups::specific_powerup_drop( "zombie_blood", s_powerup.origin ); - level waittill( "end_of_round" ); - waittillframeend; - while ( level.weather_rain > 0 ) - { - level waittill( "end_of_round" ); - waittillframeend; - } - wagon_fire_start(); - flag_clear( "ee_wagon_timer_start" ); - flag_clear( "ee_wagon_challenge_complete" ); - } - } -} - -wagon_fire_start() -{ - level.n_wagon_fires_out = 0; - a_triggers = getentarray( "wagon_damage_trigger", "targetname" ); - _a249 = a_triggers; - _k249 = getFirstArrayKey( _a249 ); - while ( isDefined( _k249 ) ) - { - trigger = _a249[ _k249 ]; - trigger thread wagon_fire_trigger_watch(); - level setclientfield( trigger.script_noteworthy, 1 ); - _k249 = getNextArrayKey( _a249, _k249 ); - } -} - -wagon_fire_trigger_watch() -{ - self notify( "watch_reset" ); - self endon( "watch_reset" ); - while ( 1 ) - { - self waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname ); - if ( isplayer( attacker ) || attacker getcurrentweapon() == "staff_water_zm" && attacker getcurrentweapon() == "staff_water_upgraded_zm" ) - { - level.n_wagon_fires_out++; - if ( !flag( "ee_wagon_timer_start" ) ) - { - flag_set( "ee_wagon_timer_start" ); - } - level setclientfield( self.script_noteworthy, 0 ); - if ( level.n_wagon_fires_out == 3 ) - { - flag_set( "ee_wagon_challenge_complete" ); - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "side_sting_1" ); - } - return; - } - } -} - -check_for_change() -{ - while ( 1 ) - { - self waittill( "trigger", e_player ); - if ( e_player getstance() == "prone" ) - { - e_player maps/mp/zombies/_zm_score::add_to_player_score( 25 ); - play_sound_at_pos( "purchase", e_player.origin ); - return; - } - else - { - wait 0,1; - } - } -} - -onplayerconnect_ee_jump_scare() -{ - self endon( "disconnect" ); - if ( !isDefined( level.jump_scare_lookat_point ) ) - { - level.jump_scare_lookat_point = getstruct( "struct_gg_look", "targetname" ); - } - if ( !isDefined( level.b_saw_jump_scare ) ) - { - level.b_saw_jump_scare = 0; - } - while ( !level.b_saw_jump_scare ) - { - n_time = 0; - while ( self adsbuttonpressed() && n_time < 25 ) - { - n_time++; - wait 0,05; - } - if ( n_time >= 25 && self adsbuttonpressed() && self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_nml_18" ) && sq_is_weapon_sniper( self getcurrentweapon() ) && is_player_looking_at( level.jump_scare_lookat_point.origin, 0,998, 0, undefined ) ) - { - self playsoundtoplayer( "zmb_easteregg_scarydog", self ); - self.wth_elem = newclienthudelem( self ); - self.wth_elem.horzalign = "fullscreen"; - self.wth_elem.vertalign = "fullscreen"; - self.wth_elem.sort = 1000; - self.wth_elem.foreground = 0; - self.wth_elem setshader( "zm_tm_wth_dog", 640, 480 ); - self.wth_elem.hidewheninmenu = 1; - j_time = 0; - while ( self adsbuttonpressed() && j_time < 5 ) - { - j_time++; - wait 0,05; - } - self.wth_elem destroy(); - level.b_saw_jump_scare = 1; - } - wait 0,05; - } -} - -sq_is_weapon_sniper( str_weapon ) -{ - a_snipers = array( "dsr50" ); - _a380 = a_snipers; - _k380 = getFirstArrayKey( _a380 ); - while ( isDefined( _k380 ) ) - { - str_sniper = _a380[ _k380 ]; - if ( issubstr( str_weapon, str_sniper ) && !issubstr( str_weapon, "+is" ) ) - { - return 1; - } - _k380 = getNextArrayKey( _a380, _k380 ); - } - return 0; -} - -onplayerconnect_ee_oneinchpunch() -{ - self.sq_one_inch_punch_stage = 0; - self.sq_one_inch_punch_kills = 0; -} - -sq_one_inch_punch_disconnect_watch() -{ - self waittill( "disconnect" ); - if ( isDefined( self.sq_one_inch_punch_tablet ) ) - { - self.sq_one_inch_punch_tablet delete(); - } - spawn_tablet_model( self.sq_one_inch_punch_tablet_num, "bunker", "muddy" ); - level.n_tablets_remaining++; -} - -sq_one_inch_punch_death_watch() -{ - self endon( "disconnect" ); - self waittill( "bled_out" ); - if ( self.sq_one_inch_punch_stage < 6 ) - { - self.sq_one_inch_punch_stage = 0; - self.sq_one_inch_punch_kills = 0; - if ( isDefined( self.sq_one_inch_punch_tablet ) ) - { - self.sq_one_inch_punch_tablet delete(); - } - spawn_tablet_model( self.sq_one_inch_punch_tablet_num, "bunker", "muddy" ); - level.n_tablets_remaining++; - } -} - -sq_one_inch_punch() -{ - maps/mp/zombies/_zm_spawner::add_custom_zombie_spawn_logic( ::bunker_volume_death_check ); - maps/mp/zombies/_zm_spawner::add_custom_zombie_spawn_logic( ::church_volume_death_check ); - level.n_tablets_remaining = 4; - a_tablets = []; - n_player_id = 0; - while ( n_player_id < level.n_tablets_remaining ) - { - a_tablets[ n_player_id ] = spawn_tablet_model( n_player_id + 1, "bunker", "muddy" ); - n_player_id++; - } - t_bunker = getent( "trigger_oneinchpunch_bunker_table", "targetname" ); - t_bunker thread bunker_trigger_thread(); - t_bunker setcursorhint( "HINT_NOICON" ); - t_birdbath = getent( "trigger_oneinchpunch_church_birdbath", "targetname" ); - t_birdbath thread birdbath_trigger_thread(); - t_birdbath setcursorhint( "HINT_NOICON" ); -} - -bunker_trigger_thread() -{ - while ( 1 ) - { - self waittill( "trigger", player ); - if ( player.sq_one_inch_punch_stage == 0 ) - { - player.sq_one_inch_punch_stage++; - player.sq_one_inch_punch_tablet_num = level.n_tablets_remaining; - player setclientfieldtoplayer( "player_tablet_state", 2 ); - player playsound( "zmb_squest_oiptablet_pickup" ); - player thread sq_one_inch_punch_disconnect_watch(); - player thread sq_one_inch_punch_death_watch(); - m_tablet = getent( "tablet_bunker_" + level.n_tablets_remaining, "targetname" ); - m_tablet delete(); - level.n_tablets_remaining--; - -/# - iprintln( "1 - take the tablet to the church" ); -#/ - } - if ( player.sq_one_inch_punch_stage == 4 ) - { - player.sq_one_inch_punch_tablet = spawn_tablet_model( player.sq_one_inch_punch_tablet_num, "bunker", "clean" ); - player.sq_one_inch_punch_stage++; - player setclientfieldtoplayer( "player_tablet_state", 0 ); - player playsound( "zmb_squest_oiptablet_place_table" ); -/# - iprintln( "5 - charge the tablet in the bunker" ); -#/ - continue; - } - else - { - if ( player.sq_one_inch_punch_stage == 6 && isDefined( player.beacon_ready ) && player.beacon_ready ) - { - player setclientfieldtoplayer( "ee_beacon_reward", 0 ); - player maps/mp/zombies/_zm_weapons::weapon_give( "beacon_zm" ); - player thread richtofenrespondvoplay( "get_beacon" ); - if ( isDefined( level.zombie_include_weapons[ "beacon_zm" ] ) && !level.zombie_include_weapons[ "beacon_zm" ] ) - { - level.zombie_include_weapons[ "beacon_zm" ] = 1; - level.zombie_weapons[ "beacon_zm" ].is_in_box = 1; - } - player playsound( "zmb_squest_oiptablet_get_reward" ); - player.sq_one_inch_punch_stage++; -/# - iprintln( "7 - tablet is activated; bestow rewards" ); -#/ - } - } - } -} - -birdbath_trigger_thread() -{ - while ( 1 ) - { - self waittill( "trigger", player ); - if ( player.sq_one_inch_punch_stage == 1 ) - { - if ( isDefined( player.sq_one_inch_punch_reclean ) ) - { - player.sq_one_inch_punch_reclean = undefined; - player.sq_one_inch_punch_stage++; - player.sq_one_inch_punch_tablet = spawn_tablet_model( player.sq_one_inch_punch_tablet_num, "church", "clean" ); - level thread tablet_cleanliness_chastise( player, 1 ); - } - else - { - player.sq_one_inch_punch_tablet = spawn_tablet_model( player.sq_one_inch_punch_tablet_num, "church", "muddy" ); - } - player playsound( "zmb_squest_oiptablet_bathe" ); - player setclientfieldtoplayer( "player_tablet_state", 0 ); - player.sq_one_inch_punch_stage++; -/# - iprintln( "2 - charge the tablet in the church" ); -#/ - } - if ( player.sq_one_inch_punch_stage == 3 ) - { - player setclientfieldtoplayer( "player_tablet_state", 1 ); - player.sq_one_inch_punch_stage++; - if ( isDefined( player.sq_one_inch_punch_tablet ) ) - { - player.sq_one_inch_punch_tablet delete(); - } - player playsound( "zmb_squest_oiptablet_pickup_clean" ); - player thread tablet_cleanliness_thread(); -/# - iprintln( "4 - take the tablet to the tank bunker" ); -#/ - } - } -} - -tablet_cleanliness_thread() -{ - self endon( "death_or_disconnect" ); - while ( self.sq_one_inch_punch_stage == 4 ) - { - if ( self.is_player_slowed ) - { - self setclientfieldtoplayer( "player_tablet_state", 2 ); - self playsoundtoplayer( "zmb_squest_oiptablet_dirtied", self ); - self.sq_one_inch_punch_stage = 1; - self.sq_one_inch_punch_reclean = 1; - level thread tablet_cleanliness_chastise( self ); -/# - iprintln( "1 - take the tablet to the church" ); -#/ - } - wait 1; - } -} - -tablet_cleanliness_chastise( e_player, b_cleaned ) -{ - if ( !isDefined( b_cleaned ) ) - { - b_cleaned = 0; - } - if ( isDefined( e_player ) && isDefined( level.sam_talking ) || level.sam_talking && flag( "story_vo_playing" ) ) - { - return; - } - flag_set( "story_vo_playing" ); - e_player set_player_dontspeak( 1 ); - level.sam_talking = 1; - str_line = "vox_sam_generic_chastise_7"; - if ( b_cleaned ) - { - str_line = "vox_sam_generic_chastise_8"; - } - if ( isDefined( e_player ) ) - { - e_player playsoundtoplayer( str_line, e_player ); - } - n_duration = soundgetplaybacktime( str_line ); - wait ( n_duration / 1000 ); - level.sam_talking = 0; - flag_clear( "story_vo_playing" ); - if ( isDefined( e_player ) ) - { - e_player set_player_dontspeak( 0 ); - } -} - -bunker_volume_death_check() -{ - self waittill( "death" ); - if ( !isDefined( self ) ) - { - return; - } - volume_name = "oneinchpunch_bunker_volume"; - volume = getent( volume_name, "targetname" ); -/# - assert( isDefined( volume ), volume_name + " does not exist" ); -#/ - attacker = self.attacker; - if ( isDefined( attacker ) && isplayer( attacker ) ) - { - if ( attacker.sq_one_inch_punch_stage == 5 || self.damagemod == "MOD_MELEE" && self.damageweapon == "tomb_shield_zm" ) - { - if ( self istouching( volume ) ) - { - self setclientfield( "ee_zombie_tablet_fx", 1 ); - attacker.sq_one_inch_punch_kills++; -/# - iprintln( "kill count: " + attacker.sq_one_inch_punch_kills ); -#/ - if ( attacker.sq_one_inch_punch_kills >= 20 ) - { - attacker thread bunker_spawn_reward(); - attacker.sq_one_inch_punch_stage++; - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "side_sting_3" ); -/# - iprintln( "6 - activate the tablet in the bunker" ); -#/ - } - } - } - } -} - -bunker_spawn_reward() -{ - self endon( "disconnect" ); - wait 2; - self setclientfieldtoplayer( "ee_beacon_reward", 1 ); - wait 2; - self.beacon_ready = 1; -} - -church_volume_death_check() -{ - self waittill( "death" ); - if ( !isDefined( self ) ) - { - return; - } - volume_name = "oneinchpunch_church_volume"; - volume = getent( volume_name, "targetname" ); -/# - assert( isDefined( volume ), volume_name + " does not exist" ); -#/ - attacker = self.attacker; - if ( isDefined( attacker ) && isplayer( attacker ) ) - { - if ( attacker.sq_one_inch_punch_stage == 2 || self.damagemod == "MOD_MELEE" && self.damageweapon == "tomb_shield_zm" ) - { - if ( self istouching( volume ) ) - { - self setclientfield( "ee_zombie_tablet_fx", 1 ); - attacker.sq_one_inch_punch_kills++; -/# - iprintln( "kill count: " + attacker.sq_one_inch_punch_kills ); -#/ - if ( attacker.sq_one_inch_punch_kills >= 20 ) - { - attacker.sq_one_inch_punch_stage++; - attacker.sq_one_inch_punch_kills = 0; - attacker.sq_one_inch_punch_tablet delete(); - attacker.sq_one_inch_punch_tablet = spawn_tablet_model( attacker.sq_one_inch_punch_tablet_num, "church", "clean" ); - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "side_sting_6" ); -/# - iprintln( "3 - tablet is charged, pick up the tablet from the birdbath" ); -#/ - } - } - } - } -} - -spawn_tablet_model( n_player_id, str_location, str_state ) -{ - s_tablet_spawn = getstruct( "oneinchpunch_" + str_location + "_tablet_" + n_player_id, "targetname" ); - v_spawnpt = s_tablet_spawn.origin; - v_spawnang = s_tablet_spawn.angles; - m_tablet = spawn( "script_model", v_spawnpt ); - m_tablet.angles = v_spawnang; - if ( str_state == "clean" ) - { - m_tablet setmodel( "p6_zm_tm_tablet" ); - if ( str_location == "church" ) - { - m_tablet playsound( "zmb_squest_oiptablet_charged" ); - } - } - else - { - m_tablet setmodel( "p6_zm_tm_tablet_muddy" ); - } - m_tablet.targetname = "tablet_" + str_location + "_" + n_player_id; - return m_tablet; -} - -radio_ee_song() -{ - level.found_ee_radio_count = 0; - wait 3; - a_structs = getstructarray( "ee_radio_pos", "targetname" ); - _a775 = a_structs; - _k775 = getFirstArrayKey( _a775 ); - while ( isDefined( _k775 ) ) - { - unitrigger_stub = _a775[ _k775 ]; - unitrigger_stub.radius = 50; - unitrigger_stub.height = 128; - unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - unitrigger_stub.require_look_at = 1; - m_radio = spawn( "script_model", unitrigger_stub.origin ); - m_radio.angles = unitrigger_stub.angles; - m_radio setmodel( "p6_zm_tm_radio_01" ); - m_radio attach( "p6_zm_tm_radio_01_panel2_blood", "tag_j_cover" ); - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::radio_ee_think ); -/# - unitrigger_stub thread radio_ee_debug(); -#/ - wait_network_frame(); - _k775 = getNextArrayKey( _a775, _k775 ); - } -} - -radio_ee_debug() -{ -/# - self endon( "stop_display" ); - while ( 1 ) - { - print3d( self.origin, "R", vectorScale( ( 0, 0, 0 ), 255 ), 1 ); - wait 0,05; -#/ - } -} - -radio_ee_think() -{ - self endon( "kill_trigger" ); - while ( 1 ) - { - self waittill( "trigger", player ); - if ( is_player_valid( player ) && isDefined( level.music_override ) && !level.music_override ) - { - level.found_ee_radio_count++; - if ( level.found_ee_radio_count == 3 ) - { - level.music_override = 1; - ent = spawn( "script_origin", ( 0, 0, 0 ) ); - level thread maps/mp/zm_tomb_amb::sndmuseggplay( ent, "mus_zmb_secret_song_a7x", 352 ); - } -/# - self.stub notify( "stop_display" ); -#/ - maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.stub ); - return; - } - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ffotd.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ffotd.gsc deleted file mode 100644 index 5bb88de..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_ffotd.gsc +++ /dev/null @@ -1,240 +0,0 @@ -#include codescripts/struct; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -main_start() -{ - level thread spawned_collision_ffotd(); - level thread spawn_kill_brushes(); - level thread respawn_struct_fix(); - onplayerconnect_callback( ::one_inch_punch_take_think ); -} - -main_end() -{ - level thread player_spawn_fix(); - level thread update_charger_position(); - level thread traversal_blocker_disabler(); -} - -update_charger_position() -{ - _a26 = level.a_elemental_staffs; - _k26 = getFirstArrayKey( _a26 ); - while ( isDefined( _k26 ) ) - { - e_staff = _a26[ _k26 ]; - e_staff moveto( e_staff.charger.origin, 0,05 ); - _k26 = getNextArrayKey( _a26, _k26 ); - } - _a31 = level.a_elemental_staffs_upgraded; - _k31 = getFirstArrayKey( _a31 ); - while ( isDefined( _k31 ) ) - { - e_staff = _a31[ _k31 ]; - e_staff moveto( e_staff.charger.origin, 0,05 ); - _k31 = getNextArrayKey( _a31, _k31 ); - } -} - -spawned_collision_ffotd() -{ - precachemodel( "collision_ai_64x64x10" ); - precachemodel( "collision_wall_256x256x10_standard" ); - precachemodel( "collision_wall_512x512x10_standard" ); - precachemodel( "collision_geo_256x256x10_standard" ); - precachemodel( "collision_geo_512x512x10_standard" ); - precachemodel( "collision_geo_ramp_standard" ); - precachemodel( "collision_player_512x512x512" ); - precachemodel( "collision_geo_32x32x128_standard" ); - precachemodel( "collision_geo_64x64x128_standard" ); - precachemodel( "collision_geo_64x64x256_standard" ); - precachemodel( "collision_player_wall_256x256x10" ); - precachemodel( "collision_player_wall_512x512x10" ); - precachemodel( "collision_player_wall_32x32x10" ); - precachemodel( "collision_geo_64x64x10_standard" ); - precachemodel( "p6_zm_tm_barbedwire_tube" ); - precachemodel( "p6_zm_tm_rubble_rebar_group" ); - flag_wait( "start_zombie_round_logic" ); - m_disconnector = spawn( "script_model", ( -568, -956, 160 ), 1 ); - m_disconnector setmodel( "collision_ai_64x64x10" ); - m_disconnector.angles = vectorScale( ( 0, 0, -1 ), 35 ); - m_disconnector disconnectpaths(); - m_disconnector ghost(); - if ( isDefined( level.optimise_for_splitscreen ) && !level.optimise_for_splitscreen ) - { - collision1a = spawn( "script_model", ( 1128, -2664,25, 122 ) ); - collision1a setmodel( "collision_player_wall_256x256x10" ); - collision1a.angles = vectorScale( ( 0, 0, -1 ), 285 ); - collision1a ghost(); - collision1b = spawn( "script_model", ( 909,5, -2856,5, -6 ) ); - collision1b setmodel( "collision_player_wall_512x512x10" ); - collision1b.angles = vectorScale( ( 0, 0, -1 ), 195 ); - collision1b ghost(); - collision1c = spawn( "script_model", ( 415, -2989, -6 ) ); - collision1c setmodel( "collision_player_wall_512x512x10" ); - collision1c.angles = vectorScale( ( 0, 0, -1 ), 195 ); - collision1c ghost(); - collision2a = spawn( "script_model", ( -6760, -6536, 280 ) ); - collision2a setmodel( "collision_geo_512x512x10_standard" ); - collision2a.angles = ( 0, 0, -1 ); - collision2a ghost(); - collision2b = spawn( "script_model", ( -6224, -6536, 280 ) ); - collision2b setmodel( "collision_geo_512x512x10_standard" ); - collision2b.angles = ( 0, 0, -1 ); - collision2b ghost(); - collision2c = spawn( "script_model", ( -5704, -6536, 280 ) ); - collision2c setmodel( "collision_geo_512x512x10_standard" ); - collision2c.angles = ( 0, 0, -1 ); - collision2c ghost(); - collision3a = spawn( "script_model", ( 1088, 4216, -192 ) ); - collision3a setmodel( "collision_geo_256x256x10_standard" ); - collision3a.angles = ( 0, 0, -1 ); - collision3a ghost(); - collision4a = spawn( "script_model", ( 545,36, -2382,3, 404 ) ); - collision4a setmodel( "collision_wall_256x256x10_standard" ); - collision4a.angles = ( 0, 293,8, 180 ); - collision4a ghost(); - collision4b = spawn( "script_model", ( 579,36, -2367,3, 264 ) ); - collision4b setmodel( "collision_geo_ramp_standard" ); - collision4b.angles = ( 0, 293,8, 180 ); - collision4b ghost(); - collision5a = spawn( "script_model", ( 67,87, -3193,25, 504 ) ); - collision5a setmodel( "collision_player_512x512x512" ); - collision5a.angles = vectorScale( ( 0, 0, -1 ), 14,1 ); - collision5a ghost(); - collision5b = spawn( "script_model", ( 292,5, -2865,5, 286 ) ); - collision5b setmodel( "collision_geo_32x32x128_standard" ); - collision5b.angles = ( 270, 22,4, 0 ); - collision5b ghost(); - collision5c = spawn( "script_model", ( 292,5, -2865,5, 266 ) ); - collision5c setmodel( "collision_geo_32x32x128_standard" ); - collision5c.angles = ( 270, 22,4, 0 ); - collision5c ghost(); - collision5d = spawn( "script_model", ( 339, -3024,5, 280 ) ); - collision5d setmodel( "collision_geo_64x64x128_standard" ); - collision5d.angles = ( 270, 18,2, 0 ); - collision5d ghost(); - model5a = spawn( "script_model", ( 248,15, -2917,26, 351,01 ) ); - model5a setmodel( "p6_zm_tm_barbedwire_tube" ); - model5a.angles = ( 6,00001, 188, 90 ); - collision6a = spawn( "script_model", ( -227,25, 4010,25, -96 ) ); - collision6a setmodel( "collision_player_wall_256x256x10" ); - collision6a.angles = vectorScale( ( 0, 0, -1 ), 265,299 ); - collision6a ghost(); - model6a = spawn( "script_model", ( -231,124, 4093,08, -230,685 ) ); - model6a setmodel( "p6_zm_tm_rubble_rebar_group" ); - model6a.angles = ( 25,883, 2,13901, 0,55601 ); - collision7a = spawn( "script_model", ( 599, -2478, 184 ) ); - collision7a setmodel( "collision_geo_64x64x128_standard" ); - collision7a.angles = ( 270, 14,7, 0 ); - collision7a ghost(); - collision8a = spawn( "script_model", ( -3190, -555, -111 ) ); - collision8a setmodel( "collision_player_wall_512x512x10" ); - collision8a.angles = vectorScale( ( 0, 0, -1 ), 1,8 ); - collision8a ghost(); - collision11a = spawn( "script_model", ( 812,812, -64,1434, 384 ) ); - collision11a setmodel( "collision_player_wall_256x256x10" ); - collision11a.angles = vectorScale( ( 0, 0, -1 ), 9,99998 ); - collision11a ghost(); - collision12a = spawn( "script_model", ( 180, 4128, 40 ) ); - collision12a setmodel( "collision_player_wall_512x512x10" ); - collision12a.angles = vectorScale( ( 0, 0, -1 ), 270 ); - collision12a ghost(); - collision13a = spawn( "script_model", ( 2088, 588, 240 ) ); - collision13a setmodel( "collision_player_wall_512x512x10" ); - collision13a.angles = ( 0, 0, -1 ); - collision13a ghost(); - collision14a = spawn( "script_model", ( -787, 375, 380 ) ); - collision14a setmodel( "collision_player_wall_256x256x10" ); - collision14a.angles = ( 0, 0, -1 ); - collision14a ghost(); - collision14b = spawn( "script_model", ( -899, 375, 236 ) ); - collision14b setmodel( "collision_player_wall_32x32x10" ); - collision14b.angles = ( 0, 0, -1 ); - collision14b ghost(); - collision15a = spawn( "script_model", ( 1704, 2969,34, -187,83 ) ); - collision15a setmodel( "collision_geo_64x64x10_standard" ); - collision15a.angles = vectorScale( ( 0, 0, -1 ), 47,4 ); - collision15a ghost(); - } -} - -spawn_kill_brushes() -{ - t_killbrush_1 = spawn( "trigger_box", ( 1643, 2168, 96 ), 0, 256, 1200, 512 ); - t_killbrush_1.script_noteworthy = "kill_brush"; - t_killbrush_2 = spawn( "trigger_box", ( -1277, 892, 184 ), 0, 148, 88, 128 ); - t_killbrush_2.script_noteworthy = "kill_brush"; -} - -one_inch_punch_take_think() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "bled_out" ); - self.one_inch_punch_flag_has_been_init = 0; - if ( self ent_flag_exist( "melee_punch_cooldown" ) ) - { - } - } -} - -player_spawn_fix() -{ - s_zone_nml_18 = level.zones[ "zone_nml_18" ]; - s_zone_nml_19 = level.zones[ "zone_nml_19" ]; - add_adjacent_zone( "zone_nml_18", "zone_nml_19", "activate_zone_ruins" ); -} - -respawn_struct_fix() -{ - spawn1 = createstruct(); - spawn1.model = undefined; - spawn1.origin = ( 2400, 120, 160 ); - spawn1.targetname = "nml_11_spawn_points"; - spawn1.radius = 32; - spawn1.script_int = 1; - spawn2 = createstruct(); - spawn2.model = undefined; - spawn2.origin = ( 2392, 360, 160 ); - spawn2.targetname = "nml_11_spawn_points"; - spawn2.radius = 32; - spawn2.script_int = 1; - spawn3 = createstruct(); - spawn3.model = undefined; - spawn3.origin = ( 2616, 152, 160 ); - spawn3.targetname = "nml_11_spawn_points"; - spawn3.radius = 32; - spawn3.script_int = 1; -} - -traversal_blocker_disabler() -{ - level endon( "activate_zone_nml" ); - pos1 = ( -1509, 3912, -168 ); - pos2 = ( 672, 3720, -179 ); - b_too_close = 0; - while ( level.round_number < 10 && !b_too_close ) - { - a_players = getplayers(); - _a310 = a_players; - _k310 = getFirstArrayKey( _a310 ); - while ( isDefined( _k310 ) ) - { - player = _a310[ _k310 ]; - if ( distancesquared( player.origin, pos1 ) < 4096 || distancesquared( player.origin, pos2 ) < 4096 ) - { - b_too_close = 1; - } - _k310 = getNextArrayKey( _a310, _k310 ); - } - wait 1; - } - m_traversal_blocker = getent( "traversal_blocker", "targetname" ); - m_traversal_blocker.origin += vectorScale( ( 0, 0, -1 ), 10000 ); - m_traversal_blocker connectpaths(); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_fx.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_fx.gsc deleted file mode 100644 index be5fb1f..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_fx.gsc +++ /dev/null @@ -1,147 +0,0 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); -#using_animtree( "fxanim_props_dlc4" ); - -main() -{ - precache_createfx_fx(); - precache_scripted_fx(); - precache_fxanim_props(); - precache_fxanim_props_dlc4(); - maps/mp/createfx/zm_tomb_fx::main(); -} - -precache_scripted_fx() -{ - level._effect[ "eye_glow_blue" ] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" ); - level._effect[ "switch_sparks" ] = loadfx( "env/electrical/fx_elec_wire_spark_burst" ); - level._effect[ "zapper_light_ready" ] = loadfx( "maps/zombie_tomb/fx_tomb_capture_light_green" ); - level._effect[ "zapper_light_notready" ] = loadfx( "maps/zombie_tomb/fx_tomb_capture_light_red" ); - level._effect[ "m14_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_rifle" ); - level._effect[ "fx_tomb_ee_vortex" ] = loadfx( "maps/zombie_tomb/fx_tomb_ee_vortex" ); - level._effect[ "poltergeist" ] = loadfx( "misc/fx_zombie_couch_effect" ); - level._effect[ "door_steam" ] = loadfx( "maps/zombie_tomb/fx_tomb_dieselmagic_doors_steam" ); - level._effect[ "zomb_gib" ] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" ); - level._effect[ "spawn_cloud" ] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); - level._effect[ "robot_foot_stomp" ] = loadfx( "maps/zombie_tomb/fx_tomb_robot_dust" ); - level._effect[ "eject_warning" ] = loadfx( "maps/zombie_tomb/fx_tomb_robot_eject_warning" ); - level._effect[ "eject_steam" ] = loadfx( "maps/zombie_tomb/fx_tomb_robot_eject_steam" ); - level._effect[ "giant_robot_footstep_warning_light" ] = loadfx( "maps/zombie_tomb/fx_tomb_foot_warning_light_red" ); - level._effect[ "air_glow" ] = loadfx( "maps/zombie_tomb/fx_tomb_elem_reveal_air_glow" ); - level._effect[ "elec_glow" ] = loadfx( "maps/zombie_tomb/fx_tomb_elem_reveal_elec_glow" ); - level._effect[ "fire_glow" ] = loadfx( "maps/zombie_tomb/fx_tomb_elem_reveal_fire_glow" ); - level._effect[ "ice_glow" ] = loadfx( "maps/zombie_tomb/fx_tomb_elem_reveal_ice_glow" ); - level._effect[ "digging" ] = loadfx( "maps/zombie_tomb/fx_tomb_shovel_dig" ); - level._effect[ "mechz_death" ] = loadfx( "maps/zombie_tomb/fx_tomb_mech_death" ); - level._effect[ "mechz_sparks" ] = loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_sparks" ); - level._effect[ "mechz_steam" ] = loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_steam" ); - level._effect[ "mechz_claw" ] = loadfx( "maps/zombie_tomb/fx_tomb_mech_wpn_claw" ); - level._effect[ "mechz_claw_arm" ] = loadfx( "maps/zombie_tomb/fx_tomb_mech_wpn_source" ); - level._effect[ "staff_charge" ] = loadfx( "weapon/zmb_staff/fx_zmb_staff_charge" ); - level._effect[ "staff_soul" ] = loadfx( "weapon/zmb_staff/fx_zmb_staff_charge_souls" ); - level._effect[ "fire_muzzle" ] = loadfx( "weapon/zmb_staff/fx_zmb_staff_fire_muz_flash_1p" ); - level._effect[ "crypt_gem_beam" ] = loadfx( "weapon/zmb_staff/fx_zmb_staff_charge_souls" ); - level._effect[ "crypt_wall_drop" ] = loadfx( "maps/zombie_tomb/fx_tomb_chamber_walls_impact" ); - level._effect[ "air_puzzle_smoke" ] = loadfx( "maps/zombie_tomb/fx_tomb_puzzle_air_smoke" ); - level._effect[ "elec_piano_glow" ] = loadfx( "maps/zombie_tomb/fx_tomb_puzzle_elec_sparks" ); - level._effect[ "fire_ash_explosion" ] = loadfx( "maps/zombie_tomb/fx_tomb_puzzle_fire_exp_ash" ); - level._effect[ "fire_sacrifice_flame" ] = loadfx( "maps/zombie_tomb/fx_tomb_puzzle_fire_sacrifice" ); - level._effect[ "fire_torch" ] = loadfx( "maps/zombie_tomb/fx_tomb_puzzle_fire_torch" ); - level._effect[ "ice_explode" ] = loadfx( "maps/zombie_tomb/fx_tomb_puzzle_ice_pipe_burst" ); - level._effect[ "puzzle_orb_trail" ] = loadfx( "maps/zombie_tomb/fx_tomb_puzzle_plinth_trail" ); - level._effect[ "teleport_1p" ] = loadfx( "maps/zombie_tomb/fx_tomb_teleport_1p" ); - level._effect[ "teleport_3p" ] = loadfx( "maps/zombie_tomb/fx_tomb_teleport_3p" ); - level._effect[ "teleport_air" ] = loadfx( "maps/zombie_tomb/fx_tomb_portal_air" ); - level._effect[ "teleport_elec" ] = loadfx( "maps/zombie_tomb/fx_tomb_portal_elec" ); - level._effect[ "teleport_fire" ] = loadfx( "maps/zombie_tomb/fx_tomb_portal_fire" ); - level._effect[ "teleport_ice" ] = loadfx( "maps/zombie_tomb/fx_tomb_portal_ice" ); - level._effect[ "tesla_elec_kill" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_afterlife_zmb_tport" ); - level._effect[ "capture_progression" ] = loadfx( "maps/zombie_tomb/fx_tomb_capture_progression" ); - level._effect[ "capture_complete" ] = loadfx( "maps/zombie_tomb/fx_tomb_capture_complete" ); - level._effect[ "capture_exhaust" ] = loadfx( "maps/zombie_tomb/fx_tomb_capture_exhaust_back" ); - level._effect[ "screecher_hole" ] = loadfx( "maps/zombie_tomb/fx_tomb_screecher_vortex" ); - level._effect[ "zone_capture_zombie_spawn" ] = loadfx( "maps/zombie_tomb/fx_tomb_emergence_spawn" ); - level._effect[ "crusader_zombie_eyes" ] = loadfx( "maps/zombie/fx_zombie_crusader_eyes" ); - level._effect[ "zone_capture_zombie_torso_fx" ] = loadfx( "maps/zombie_tomb/fx_tomb_crusader_torso_loop" ); - level._effect[ "player_rain" ] = loadfx( "maps/zombie_tomb/fx_tomb_player_weather_rain" ); - level._effect[ "player_snow" ] = loadfx( "maps/zombie_tomb/fx_tomb_player_weather_snow" ); - level._effect[ "lightning_flash" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_lg" ); - level._effect[ "tank_treads" ] = loadfx( "maps/zombie_tomb/fx_tomb_veh_tank_treadfx_mud" ); - level._effect[ "tank_light_grn" ] = loadfx( "maps/zombie_tomb/fx_tomb_capture_light_green" ); - level._effect[ "tank_light_red" ] = loadfx( "maps/zombie_tomb/fx_tomb_capture_light_red" ); - level._effect[ "tank_overheat" ] = loadfx( "maps/zombie_tomb/fx_tomb_veh_tank_exhaust_overheat" ); - level._effect[ "tank_exhaust" ] = loadfx( "maps/zombie_tomb/fx_tomb_veh_tank_exhaust" ); - level._effect[ "bottle_glow" ] = loadfx( "maps/zombie_tomb/fx_tomb_dieselmagic_portal" ); - level._effect[ "perk_pipe_smoke" ] = loadfx( "maps/zombie_tomb/fx_tomb_perk_machine_exhaust" ); - level._effect[ "wagon_fire" ] = loadfx( "maps/zombie_tomb/fx_tomb_ee_fire_wagon" ); - level._effect[ "zombie_fist_glow" ] = loadfx( "maps/zombie_tomb/fx_tomb_ee_fists" ); - level._effect[ "ee_vortex" ] = loadfx( "maps/zombie_tomb/fx_tomb_ee_vortex" ); - level._effect[ "ee_beam" ] = loadfx( "maps/zombie_tomb/fx_tomb_ee_beam" ); - level._effect[ "foot_box_glow" ] = loadfx( "maps/zombie_tomb/fx_tomb_challenge_fire" ); - level._effect[ "couch_fx" ] = loadfx( "maps/zombie_tomb/fx_tomb_debris_blocker" ); - level._effect[ "sky_plane_tracers" ] = loadfx( "maps/zombie_tomb/fx_tomb_sky_plane_tracers" ); - level._effect[ "sky_plane_trail" ] = loadfx( "maps/zombie_tomb/fx_tomb_sky_plane_trail" ); - level._effect[ "biplane_explode" ] = loadfx( "maps/zombie_tomb/fx_tomb_explo_airplane" ); - level._effect[ "special_glow" ] = loadfx( "maps/zombie_tomb/fx_tomb_elem_reveal_glow" ); -} - -precache_createfx_fx() -{ - level._effect[ "fx_sky_dist_aa_tracers" ] = loadfx( "maps/zombie_tomb/fx_tomb_sky_dist_aa_tracers" ); - level._effect[ "fx_tomb_vortex_glow" ] = loadfx( "maps/zombie_tomb/fx_tomb_vortex_glow" ); - level._effect[ "fx_pack_a_punch" ] = loadfx( "maps/zombie_tomb/fx_tomb_pack_a_punch_light_beams" ); - level._effect[ "fx_tomb_dust_fall" ] = loadfx( "maps/zombie_tomb/fx_tomb_dust_fall" ); - level._effect[ "fx_tomb_dust_fall_lg" ] = loadfx( "maps/zombie_tomb/fx_tomb_dust_fall_lg" ); - level._effect[ "fx_tomb_embers_flat" ] = loadfx( "maps/zombie_tomb/fx_tomb_embers_flat" ); - level._effect[ "fx_tomb_fire_lg" ] = loadfx( "maps/zombie_tomb/fx_tomb_fire_lg" ); - level._effect[ "fx_tomb_fire_sm" ] = loadfx( "maps/zombie_tomb/fx_tomb_fire_sm" ); - level._effect[ "fx_tomb_fire_line_sm" ] = loadfx( "maps/zombie_tomb/fx_tomb_fire_line_sm" ); - level._effect[ "fx_tomb_fire_sm_smolder" ] = loadfx( "maps/zombie_tomb/fx_tomb_fire_sm_smolder" ); - level._effect[ "fx_tomb_ground_fog" ] = loadfx( "maps/zombie_tomb/fx_tomb_ground_fog" ); - level._effect[ "fx_tomb_sparks" ] = loadfx( "maps/zombie_tomb/fx_tomb_sparks" ); - level._effect[ "fx_tomb_water_drips" ] = loadfx( "maps/zombie_tomb/fx_tomb_water_drips" ); - level._effect[ "fx_tomb_water_drips_sm" ] = loadfx( "maps/zombie_tomb/fx_tomb_water_drips_sm" ); - level._effect[ "fx_tomb_smoke_pillar_xlg" ] = loadfx( "maps/zombie_tomb/fx_tomb_smoke_pillar_xlg" ); - level._effect[ "fx_tomb_godray_md" ] = loadfx( "maps/zombie_tomb/fx_tomb_godray_md" ); - level._effect[ "fx_tomb_godray_mist_md" ] = loadfx( "maps/zombie_tomb/fx_tomb_godray_mist_md" ); - level._effect[ "fx_tomb_dust_motes_md" ] = loadfx( "maps/zombie_tomb/fx_tomb_dust_motes_md" ); - level._effect[ "fx_tomb_dust_motes_lg" ] = loadfx( "maps/zombie_tomb/fx_tomb_dust_motes_lg" ); - level._effect[ "fx_tomb_light_md" ] = loadfx( "maps/zombie_tomb/fx_tomb_light_md" ); - level._effect[ "fx_tomb_light_lg" ] = loadfx( "maps/zombie_tomb/fx_tomb_light_lg" ); - level._effect[ "fx_tomb_light_expensive" ] = loadfx( "maps/zombie_tomb/fx_tomb_light_expensive" ); - level._effect[ "fx_tomb_steam_md" ] = loadfx( "maps/zombie_tomb/fx_tomb_steam_md" ); - level._effect[ "fx_tomb_steam_lg" ] = loadfx( "maps/zombie_tomb/fx_tomb_steam_lg" ); - level._effect[ "fx_tomb_church_fire_vista" ] = loadfx( "maps/zombie_tomb/fx_tomb_church_fire_vista" ); - level._effect[ "fx_tomb_church_custom" ] = loadfx( "maps/zombie_tomb/fx_tomb_church_custom" ); - level._effect[ "fx_tomb_chamber_glow" ] = loadfx( "maps/zombie_tomb/fx_tomb_chamber_glow" ); - level._effect[ "fx_tomb_chamber_glow_blue" ] = loadfx( "maps/zombie_tomb/fx_tomb_chamber_glow_blue" ); - level._effect[ "fx_tomb_chamber_glow_purple" ] = loadfx( "maps/zombie_tomb/fx_tomb_chamber_glow_purple" ); - level._effect[ "fx_tomb_chamber_glow_yellow" ] = loadfx( "maps/zombie_tomb/fx_tomb_chamber_glow_yellow" ); - level._effect[ "fx_tomb_chamber_glow_red" ] = loadfx( "maps/zombie_tomb/fx_tomb_chamber_glow_red" ); - level._effect[ "fx_tomb_chamber_walls_impact" ] = loadfx( "maps/zombie_tomb/fx_tomb_chamber_walls_impact" ); - level._effect[ "fx_tomb_crafting_chamber_glow" ] = loadfx( "maps/zombie_tomb/fx_tomb_crafting_chamber_glow" ); - level._effect[ "fx_tomb_probe_elec_on" ] = loadfx( "maps/zombie_tomb/fx_tomb_probe_elec_on" ); - level._effect[ "fx_tomb_robot_ambient" ] = loadfx( "maps/zombie_tomb/fx_tomb_robot_ambient" ); - level._effect[ "fx_tomb_skybox_vortex" ] = loadfx( "maps/zombie_tomb/fx_tomb_skybox_vortex" ); -} - -precache_fxanim_props() -{ - level.scr_anim[ "fxanim_props" ][ "dogfights" ] = %fxanim_zom_tomb_dogfights_anim; -} - -precache_fxanim_props_dlc4() -{ - level.scr_anim[ "fxanim_props_dlc4" ][ "church_wires" ] = %fxanim_zom_tomb_church_wires_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "no_mans_wire" ] = %fxanim_zom_tomb_no_mans_wire_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "float_bunker" ] = %fxanim_zom_tomb_debris_float_bunker_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "chamber_rocks01" ] = %fxanim_zom_tomb_chamber_rocks01_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "chamber_rocks02" ] = %fxanim_zom_tomb_chamber_rocks02_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "head_fans" ] = %fxanim_zom_tomb_robot_head_fans_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "church_drain" ] = %fxanim_zom_tomb_church_drain_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "wires_ruins" ] = %fxanim_zom_tomb_wires_ruins_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "pap_ropes" ] = %fxanim_zom_tomb_pap_ropes_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "church_ceiling" ] = %fxanim_zom_tomb_church_ceiling_anim; - level.scr_anim[ "fxanim_props_dlc4" ][ "crane_hook" ] = %fxanim_zom_tomb_crane_hook_anim; -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_gamemodes.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_gamemodes.gsc deleted file mode 100644 index 5912656..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_gamemodes.gsc +++ /dev/null @@ -1,14 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/zm_tomb_classic; -#include maps/mp/zm_tomb; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - add_map_gamemode( "zclassic", maps/mp/zm_tomb::zstandard_preinit, undefined, undefined ); - add_map_location_gamemode( "zclassic", "tomb", maps/mp/zm_tomb_classic::precache, maps/mp/zm_tomb_classic::main ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_giant_robot.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_giant_robot.gsc deleted file mode 100644 index becbbf4..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_giant_robot.gsc +++ /dev/null @@ -1,2337 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm; -#include maps/mp/zm_tomb_vo; -#include maps/mp/zombies/_zm_clone; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zm_tomb_teleporter; -#include maps/mp/zombies/_zm_weap_one_inch_punch; -#include maps/mp/zombies/_zm_ai_mechz; -#include maps/mp/animscripts/zm_shared; -#include maps/mp/zm_tomb_giant_robot_ffotd; -#include maps/mp/zombies/_zm_net; -#include maps/mp/gametypes_zm/_hud; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -//Uncomment anim tree when compiler supports it. -//#using_animtree( "zm_tomb_giant_robot_hatch" ); - -init_giant_robot_glows() //checked changed to match cerberus output -{ - maps/mp/zm_tomb_giant_robot_ffotd::init_giant_robot_glows_start(); - precacheitem( "falling_hands_tomb_zm" ); - precachemodel( "veh_t6_dlc_zm_robot_foot_hatch" ); - precachemodel( "veh_t6_dlc_zm_robot_foot_hatch_lights" ); - flag_init( "foot_shot" ); - flag_init( "three_robot_round" ); - flag_init( "fire_link_enabled" ); - flag_init( "timeout_vo_robot_0" ); - flag_init( "timeout_vo_robot_1" ); - flag_init( "timeout_vo_robot_2" ); - level thread setup_giant_robot_devgui(); - level.gr_foot_hatch_closed = []; - level.gr_foot_hatch_closed[ 0 ] = 1; - level.gr_foot_hatch_closed[ 1 ] = 1; - level.gr_foot_hatch_closed[ 2 ] = 1; - a_gr_head_triggers = getstructarray( "giant_robot_head_exit_trigger", "script_noteworthy" ); - foreach ( struct in a_gr_head_triggers ) - { - gr_head_exit_trigger_start( struct ); - } - level thread handle_wind_tunnel_bunker_collision(); - level thread handle_tank_bunker_collision(); - maps/mp/zm_tomb_giant_robot_ffotd::init_giant_robot_glows_end(); -} - -init_animtree() //checked matches cerberus output -{ - scriptmodelsuseanimtree( -1 ); -} - -init_giant_robot() //checked matches cerberus output -{ - maps/mp/zm_tomb_giant_robot_ffotd::init_giant_robot_start(); - registerclientfield( "actor", "register_giant_robot", 14000, 1, "int" ); - registerclientfield( "world", "start_anim_robot_0", 14000, 1, "int" ); - registerclientfield( "world", "start_anim_robot_1", 14000, 1, "int" ); - registerclientfield( "world", "start_anim_robot_2", 14000, 1, "int" ); - registerclientfield( "world", "play_foot_stomp_fx_robot_0", 14000, 2, "int" ); - registerclientfield( "world", "play_foot_stomp_fx_robot_1", 14000, 2, "int" ); - registerclientfield( "world", "play_foot_stomp_fx_robot_2", 14000, 2, "int" ); - registerclientfield( "world", "play_foot_open_fx_robot_0", 14000, 2, "int" ); - registerclientfield( "world", "play_foot_open_fx_robot_1", 14000, 2, "int" ); - registerclientfield( "world", "play_foot_open_fx_robot_2", 14000, 2, "int" ); - registerclientfield( "world", "eject_warning_fx_robot_0", 14000, 1, "int" ); - registerclientfield( "world", "eject_warning_fx_robot_1", 14000, 1, "int" ); - registerclientfield( "world", "eject_warning_fx_robot_2", 14000, 1, "int" ); - registerclientfield( "allplayers", "eject_steam_fx", 14000, 1, "int" ); - registerclientfield( "allplayers", "all_tubes_play_eject_steam_fx", 14000, 1, "int" ); - registerclientfield( "allplayers", "gr_eject_player_impact_fx", 14000, 1, "int" ); - registerclientfield( "toplayer", "giant_robot_rumble_and_shake", 14000, 2, "int" ); - registerclientfield( "world", "church_ceiling_fxanim", 14000, 1, "int" ); - level thread giant_robot_initial_spawns(); - level.custom_intermission = ::tomb_standard_intermission; - init_footstep_safe_spots(); - maps/mp/zm_tomb_giant_robot_ffotd::init_giant_robot_end(); -} - -init_footstep_safe_spots() //checked changed to match cerberus output -{ - level.giant_robot_footstep_safe_spots = []; - make_safe_spot_trigger_box_at_point( ( -493, -198, 389 ), ( 0, 0, 0 ), 80, 64, 150 ); -} - -make_safe_spot_trigger_box_at_point( v_origin, v_angles, n_length, n_width, n_height ) //checked matches cerberus output -{ - trig = spawn( "trigger_box", v_origin, 0, n_length, n_width, n_height ); - trig.angles = v_angles; - level.giant_robot_footstep_safe_spots[ level.giant_robot_footstep_safe_spots.size ] = trig; -} - -tomb_can_revive_override( player_down ) //checked matches cerberus output used is_true() instead -{ - if ( is_true( player_down.is_stomped ) ) - { - return 0; - } - return 1; -} - -giant_robot_initial_spawns() //checked changed to match cerberus output -{ - flag_wait( "start_zombie_round_logic" ); - level.a_giant_robots = []; - for ( i = 0; i < 3; i++ ) - { - level.gr_foot_hatch_closed[ i ] = 1; - trig_stomp_kill_right = getent( "trig_stomp_kill_right_" + i, "targetname" ); - trig_stomp_kill_left = getent( "trig_stomp_kill_left_" + i, "targetname" ); - trig_stomp_kill_right enablelinkto(); - trig_stomp_kill_left enablelinkto(); - clip_foot_right = getent( "clip_foot_right_" + i, "targetname" ); - clip_foot_left = getent( "clip_foot_left_" + i, "targetname" ); - sp_giant_robot = getent( "ai_giant_robot_" + i, "targetname" ); - ai = sp_giant_robot spawnactor(); - ai maps/mp/zm_tomb_giant_robot_ffotd::giant_robot_spawn_start(); - ai.is_giant_robot = 1; - ai.giant_robot_id = i; - tag_right_foot = ai gettagorigin( "TAG_ATTACH_HATCH_RI" ); - tag_left_foot = ai gettagorigin( "TAG_ATTACH_HATCH_LE" ); - trig_stomp_kill_right.origin = tag_right_foot + vectorScale( ( 0, 0, 1 ), 72 ); - trig_stomp_kill_right.angles = ai gettagangles( "TAG_ATTACH_HATCH_RI" ); - trig_stomp_kill_left.origin = tag_left_foot + vectorScale( ( 0, 0, 1 ), 72 ); - trig_stomp_kill_left.angles = ai gettagangles( "TAG_ATTACH_HATCH_LE" ); - wait 0,1; - trig_stomp_kill_right linkto( ai, "TAG_ATTACH_HATCH_RI", vectorScale( ( 0, 0, 1 ), 72 ) ); - wait_network_frame(); - trig_stomp_kill_left linkto( ai, "TAG_ATTACH_HATCH_LE", vectorScale( ( 0, 0, 1 ), 72 ) ); - wait_network_frame(); - ai.trig_stomp_kill_right = trig_stomp_kill_right; - ai.trig_stomp_kill_left = trig_stomp_kill_left; - clip_foot_right.origin = tag_right_foot + ( 0, 0, 1 ); - clip_foot_left.origin = tag_left_foot + ( 0, 0, 1 ); - clip_foot_right.angles = ai gettagangles( "TAG_ATTACH_HATCH_RI" ); - clip_foot_left.angles = ai gettagangles( "TAG_ATTACH_HATCH_LE" ); - wait 0,1; - clip_foot_right linkto( ai, "TAG_ATTACH_HATCH_RI", ( 0, 0, 1 ) ); - wait_network_frame(); - clip_foot_left linkto( ai, "TAG_ATTACH_HATCH_LE", ( 0, 0, 1 ) ); - wait_network_frame(); - ai.clip_foot_right = clip_foot_right; - ai.clip_foot_left = clip_foot_left; - ai.is_zombie = 0; - ai.targetname = "giant_robot_walker_" + i; - ai.animname = "giant_robot_walker"; - ai.script_noteworthy = "giant_robot"; - ai.audio_type = "giant_robot"; - ai.ignoreall = 1; - ai.ignoreme = 1; - ai setcandamage( 0 ); - ai magic_bullet_shield(); - ai setplayercollision( 1 ); - ai setforcenocull(); - ai setfreecameralockonallowed( 0 ); - ai.goalradius = 100000; - ai setgoalpos( ai.origin ); - ai setclientfield( "register_giant_robot", 1 ); - ai ghost(); - ai ent_flag_init( "robot_head_entered" ); - ai ent_flag_init( "kill_trigger_active" ); - level.a_giant_robots[ i ] = ai; - ai maps/mp/zm_tomb_giant_robot_ffotd::giant_robot_spawn_end(); - wait_network_frame(); - } - level thread robot_cycling(); -} - -robot_cycling() //checked partially changed to match cerberus output -{ - three_robot_round = 0; - last_robot = -1; - level thread giant_robot_intro_walk( 1 ); - level waittill( "giant_robot_intro_complete" ); - while ( 1 ) - { - if ( level.round_number % 4 && three_robot_round != level.round_number ) - { - flag_set( "three_robot_round" ); - } - if ( flag( "ee_all_staffs_placed" ) && !flag( "ee_mech_zombie_hole_opened" ) ) - { - flag_set( "three_robot_round" ); - } - /* -/# - if ( isDefined( level.devgui_force_three_robot_round ) && level.devgui_force_three_robot_round ) - { - flag_set( "three_robot_round" ); -#/ - } - */ - if ( flag( "three_robot_round" ) ) - { - level.zombie_ai_limit = 22; - random_number = randomint( 3 ); - if ( random_number == 2 ) - { - level thread giant_robot_start_walk( 2 ); - } - else - { - level thread giant_robot_start_walk( 2, 0 ); - } - wait 5; - if ( random_number == 0 ) - { - level thread giant_robot_start_walk( 0 ); - } - else - { - level thread giant_robot_start_walk( 0, 0 ); - } - wait 5; - if ( random_number == 1 ) - { - level thread giant_robot_start_walk( 1 ); - } - else - { - level thread giant_robot_start_walk( 1, 0 ); - } - level waittill( "giant_robot_walk_cycle_complete" ); - level waittill( "giant_robot_walk_cycle_complete" ); - level waittill( "giant_robot_walk_cycle_complete" ); - wait 5; - level.zombie_ai_limit = 24; - three_robot_round = level.round_number; - last_robot = -1; - flag_clear( "three_robot_round" ); - } - else - { - if ( !flag( "activate_zone_nml" ) ) - { - random_number = randomint( 2 ); - } - else - { - random_number = randomint( 3 ); - } - /* -/# - if ( isDefined( level.devgui_force_giant_robot ) ) - { - random_number = level.devgui_force_giant_robot; -#/ - } - */ - last_robot = random_number; - level thread giant_robot_start_walk( random_number ); - level waittill( "giant_robot_walk_cycle_complete" ); - wait 5; - } - } -} - -giant_robot_intro_walk( n_robot_id ) //checked changed to match cerberus output -{ - ai = getent( "giant_robot_walker_" + n_robot_id, "targetname" ); - ai attach( "veh_t6_dlc_zm_robot_foot_hatch", "TAG_ATTACH_HATCH_LE" ); - ai attach( "veh_t6_dlc_zm_robot_foot_hatch", "TAG_ATTACH_HATCH_RI" ); - ai thread giant_robot_think( ai.trig_stomp_kill_right, ai.trig_stomp_kill_left, ai.clip_foot_right, ai.clip_foot_left, undefined, 3 ); - level thread starting_spawn_light(); - wait 0.5; - level setclientfield( "play_foot_stomp_fx_robot_" + ai.giant_robot_id, 2 ); - level thread giant_robot_intro_exploder(); - a_players = getplayers(); - foreach ( player in a_players ) - { - player setclientfieldtoplayer( "giant_robot_rumble_and_shake", 3 ); - player thread turn_clientside_rumble_off(); - } - level waittill( "giant_robot_walk_cycle_complete" ); - level notify( "giant_robot_intro_complete" ); -} - -giant_robot_intro_exploder() //checked matches cerberus output -{ - exploder( 111 ); - wait 3; - stop_exploder( 111 ); -} - -giant_robot_start_walk( n_robot_id, b_has_hatch ) //checked changed to match cerberus output -{ - if ( !isDefined( b_has_hatch ) ) - { - b_has_hatch = 1; - } - ai = getent( "giant_robot_walker_" + n_robot_id, "targetname" ); - level.gr_foot_hatch_closed[ n_robot_id ] = 1; - ai.b_has_hatch = b_has_hatch; - ai ent_flag_clear( "kill_trigger_active" ); - ai ent_flag_clear( "robot_head_entered" ); - if ( isDefined( ai.b_has_hatch ) && ai.b_has_hatch ) - { - m_sole = getent( "target_sole_" + n_robot_id, "targetname" ); - } - if ( isDefined( m_sole ) && isDefined( ai.b_has_hatch ) && ai.b_has_hatch ) - { - m_sole setcandamage( 1 ); - m_sole.health = 99999; - m_sole useanimtree( -1 ); - m_sole unlink(); - } - wait 10; - if ( isDefined( m_sole ) ) - { - if ( cointoss() ) - { - ai.hatch_foot = "left"; - } - else - { - ai.hatch_foot = "right"; - } - /* -/# - if ( isDefined( level.devgui_force_giant_robot_foot ) && isDefined( ai.b_has_hatch ) && ai.b_has_hatch ) - { - ai.hatch_foot = level.devgui_force_giant_robot_foot; -#/ - } - */ - if ( ai.hatch_foot == "left" ) - { - n_sole_origin = ai gettagorigin( "TAG_ATTACH_HATCH_LE" ); - v_sole_angles = ai gettagangles( "TAG_ATTACH_HATCH_LE" ); - ai.hatch_foot = "left"; - str_sole_tag = "TAG_ATTACH_HATCH_LE"; - ai attach( "veh_t6_dlc_zm_robot_foot_hatch", "TAG_ATTACH_HATCH_RI" ); - } - else if ( ai.hatch_foot == "right" ) - { - n_sole_origin = ai gettagorigin( "TAG_ATTACH_HATCH_RI" ); - v_sole_angles = ai gettagangles( "TAG_ATTACH_HATCH_RI" ); - ai.hatch_foot = "right"; - str_sole_tag = "TAG_ATTACH_HATCH_RI"; - ai attach( "veh_t6_dlc_zm_robot_foot_hatch", "TAG_ATTACH_HATCH_LE" ); - } - m_sole.origin = n_sole_origin; - m_sole.angles = v_sole_angles; - wait 0.1; - m_sole linkto( ai, str_sole_tag, ( 0, 0, 0 ) ); - m_sole show(); - ai attach( "veh_t6_dlc_zm_robot_foot_hatch_lights", str_sole_tag ); - } - if ( isDefined( ai.b_has_hatch ) && !ai.b_has_hatch ) - { - ai attach( "veh_t6_dlc_zm_robot_foot_hatch", "TAG_ATTACH_HATCH_RI" ); - ai attach( "veh_t6_dlc_zm_robot_foot_hatch", "TAG_ATTACH_HATCH_LE" ); - } - wait 0.05; - ai thread giant_robot_think( ai.trig_stomp_kill_right, ai.trig_stomp_kill_left, ai.clip_foot_right, ai.clip_foot_left, m_sole, n_robot_id ); -} - -giant_robot_think( trig_stomp_kill_right, trig_stomp_kill_left, clip_foot_right, clip_foot_left, m_sole, n_robot_id ) //checked changed to match cerberus output use is_true() instead -{ - self thread robot_walk_animation( n_robot_id ); - self show(); - if ( isDefined( m_sole ) ) - { - self thread sole_cleanup( m_sole ); - } - self.is_walking = 1; - self thread monitor_footsteps( trig_stomp_kill_right, "right" ); - self thread monitor_footsteps( trig_stomp_kill_left, "left" ); - self thread monitor_footsteps_fx( trig_stomp_kill_right, "right" ); - self thread monitor_footsteps_fx( trig_stomp_kill_left, "left" ); - self thread monitor_shadow_notetracks( "right" ); - self thread monitor_shadow_notetracks( "left" ); - self thread sndgrthreads( "left" ); - self thread sndgrthreads( "right" ); - if ( isDefined( m_sole ) && level.gr_foot_hatch_closed[ n_robot_id ] && is_true( self.b_has_hatch ) ) - { - self thread giant_robot_foot_waittill_sole_shot( m_sole ); - } - a_players = getplayers(); - if ( n_robot_id != 3 && !is_true( level.giant_robot_discovered ) ) - { - foreach ( player in a_players ) - { - player thread giant_robot_discovered_vo( self ); - } - } - if ( flag( "three_robot_round" ) && !is_true( level.three_robot_round_vo ) ) - { - foreach ( player in a_players ) - { - player thread three_robot_round_vo( self ); - } - } - if ( n_robot_id != 3 && !is_true( level.shoot_robot_vo ) ) - { - foreach ( player in a_players ) - { - player thread shoot_at_giant_robot_vo( self ); - } - } - self waittill( "giant_robot_stop" ); - self.is_walking = 0; - self stopanimscripted(); - sp_giant_robot = getent( "ai_giant_robot_" + self.giant_robot_id, "targetname" ); - self.origin = sp_giant_robot.origin; - level setclientfield( "play_foot_open_fx_robot_" + self.giant_robot_id, 0 ); - self ghost(); - self detachall(); - level notify( "giant_robot_walk_cycle_complete" ); -} - -sole_cleanup( m_sole ) //checked matches cerberus output -{ - self endon( "death" ); - self endon( "giant_robot_stop" ); - wait_network_frame(); - m_sole clearanim( %root, 0 ); - wait_network_frame(); - m_sole setanim( %ai_zombie_giant_robot_hatch_close, 1, 0.2, 1 ); -} - -giant_robot_foot_waittill_sole_shot( m_sole ) //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "giant_robot_stop" ); - if ( isDefined( self.hatch_foot ) && self.hatch_foot == "left" ) - { - str_tag = "TAG_ATTACH_HATCH_LE"; - n_foot = 2; - } - else if ( isDefined( self.hatch_foot ) && self.hatch_foot == "right" ) - { - str_tag = "TAG_ATTACH_HATCH_RI"; - n_foot = 1; - } - self waittillmatch( "scripted_walk" ); - return "kill_zombies_leftfoot_1"; - wait 1; - m_sole waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); - m_sole.health = 99999; - level.gr_foot_hatch_closed[ self.giant_robot_id ] = 0; - level setclientfield( "play_foot_open_fx_robot_" + self.giant_robot_id, n_foot ); - m_sole clearanim( %ai_zombie_giant_robot_hatch_close, 1 ); - m_sole setanim( %ai_zombie_giant_robot_hatch_open, 1, 0.2, 1 ); - n_time = getanimlength( %ai_zombie_giant_robot_hatch_open ); - wait n_time; - m_sole clearanim( %ai_zombie_giant_robot_hatch_open, 1 ); - m_sole setanim( %ai_zombie_giant_robot_hatch_open_idle, 1, 0.2, 1 ); -} - -giant_robot_close_head_entrance( foot_side ) //checked changed to match cerberus output -{ - wait 5; - level.gr_foot_hatch_closed[ self.giant_robot_id ] = 1; - level setclientfield( "play_foot_open_fx_robot_" + self.giant_robot_id, 0 ); - m_sole = getent( "target_sole_" + self.giant_robot_id, "targetname" ); - if ( isDefined( m_sole ) ) - { - m_sole clearanim( %ai_zombie_giant_robot_hatch_open, 1 ); - m_sole clearanim( %ai_zombie_giant_robot_hatch_open_idle, 1 ); - m_sole setanim( %ai_zombie_giant_robot_hatch_close, 1, 0.2, 1 ); - } - if ( isDefined( foot_side ) ) - { - if ( foot_side == "right" ) - { - str_tag = "TAG_ATTACH_HATCH_RI"; - } - else if ( foot_side == "left" ) - { - str_tag = "TAG_ATTACH_HATCH_LE"; - } - self detach( "veh_t6_dlc_zm_robot_foot_hatch_lights", str_tag ); - } -} - -robot_walk_animation( n_robot_id ) //checked changed to match cerberus output -{ - if ( n_robot_id != 3 ) - { - level setclientfield( "start_anim_robot_" + n_robot_id, 1 ); - self thread start_footprint_warning_vo( n_robot_id ); - } - if ( n_robot_id == 0 ) - { - animationid = self getanimfromasd( "zm_robot_walk_nml", 0 ); - str_anim_scripted_name = "zm_robot_walk_nml"; - s_robot_path = getstruct( "anim_align_robot_nml", "targetname" ); - s_robot_path.angles = ( 0, 0, 0 ); - self animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 0 ); - self thread maps/mp/animscripts/zm_shared::donotetracks( "scripted_walk" ); - self waittillmatch( "scripted_walk" ); - return "end"; - animationid = self getanimfromasd( "zm_robot_walk_nml", 1 ); - self thread maps/mp/animscripts/zm_shared::donotetracks( "scripted_walk" ); - self animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 1 ); - self waittillmatch( "scripted_walk" ); - return "end"; - animationid = self getanimfromasd( "zm_robot_walk_nml", 2 ); - self thread maps/mp/animscripts/zm_shared::donotetracks( "scripted_walk" ); - self animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 2 ); - self waittillmatch( "scripted_walk" ); - return "end"; - self notify( "giant_robot_stop" ); - } - else if ( n_robot_id == 1 ) - { - animationid = self getanimfromasd( "zm_robot_walk_trenches", 0 ); - str_anim_scripted_name = "zm_robot_walk_trenches"; - s_robot_path = getstruct( "anim_align_robot_trenches", "targetname" ); - s_robot_path.angles = ( 0, 0, 0 ); - self animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 0 ); - self thread maps/mp/animscripts/zm_shared::donotetracks( "scripted_walk" ); - self waittillmatch( "scripted_walk" ); - return "end"; - animationid = self getanimfromasd( "zm_robot_walk_trenches", 1 ); - self thread maps/mp/animscripts/zm_shared::donotetracks( "scripted_walk" ); - self animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 1 ); - self waittillmatch( "scripted_walk" ); - return "end"; - animationid = self getanimfromasd( "zm_robot_walk_trenches", 2 ); - self thread maps/mp/animscripts/zm_shared::donotetracks( "scripted_walk" ); - self animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 2 ); - self waittillmatch( "scripted_walk" ); - return "end"; - self notify( "giant_robot_stop" ); - } - else if ( n_robot_id == 2 ) - { - animationid = self getanimfromasd( "zm_robot_walk_village", 0 ); - str_anim_scripted_name = "zm_robot_walk_village"; - s_robot_path = getstruct( "anim_align_robot_village", "targetname" ); - s_robot_path.angles = ( 0, 0, 0 ); - self animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 0 ); - self thread maps/mp/animscripts/zm_shared::donotetracks( "scripted_walk" ); - self waittillmatch( "scripted_walk" ); - return "end"; - animationid = self getanimfromasd( "zm_robot_walk_village", 1 ); - self thread maps/mp/animscripts/zm_shared::donotetracks( "scripted_walk" ); - self animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 1 ); - self waittillmatch( "scripted_walk" ); - return "end"; - animationid = self getanimfromasd( "zm_robot_walk_village", 2 ); - self thread maps/mp/animscripts/zm_shared::donotetracks( "scripted_walk" ); - self animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 2 ); - self waittillmatch( "scripted_walk" ); - return "end"; - self notify( "giant_robot_stop" ); - } - else if ( n_robot_id == 3 ) - { - animationid = self getanimfromasd( "zm_robot_walk_intro", 0 ); - str_anim_scripted_name = "zm_robot_walk_intro"; - s_robot_path = getstruct( "anim_align_robot_trenches", "targetname" ); - s_robot_path.angles = ( 0, 0, 0 ); - self animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 0 ); - self thread maps/mp/animscripts/zm_shared::donotetracks( "scripted_walk" ); - self waittillmatch( "scripted_walk" ); - return "end"; - self notify( "giant_robot_stop" ); - } - if ( n_robot_id != 3 ) - { - level setclientfield( "start_anim_robot_" + n_robot_id, 0 ); - } -} - -sndgrthreads( side ) -{ - self thread sndrobot( "soundfootstart_" + side, "zmb_robot_leg_move_" + side, side ); - self thread sndrobot( "soundfootwarning_" + side, "zmb_robot_foot_alarm", side ); - self thread sndrobot( "soundfootdown_" + side, "zmb_robot_leg_whoosh", side ); - self thread sndrobot( "soundfootalarm_" + side, "zmb_robot_pre_stomp_a", side ); -} - -sndrobot( notetrack, alias, side ) -{ - self endon( "giant_robot_stop" ); - if ( side == "right" ) - { - str_tag = "TAG_ATTACH_HATCH_RI"; - } - else - { - if ( side == "left" ) - { - str_tag = "TAG_ATTACH_HATCH_LE"; - } - } - while ( 1 ) - { - self waittillmatch( "scripted_walk" ); - return notetrack; - self playsoundontag( alias, str_tag ); - wait 0,1; - } -} - -monitor_footsteps( trig_stomp_kill, foot_side ) -{ - self endon( "death" ); - self endon( "giant_robot_stop" ); - str_start_stomp = "kill_zombies_" + foot_side + "foot_1"; - str_end_stomp = "footstep_" + foot_side + "_large"; - while ( 1 ) - { - self waittillmatch( "scripted_walk" ); - return str_start_stomp; - self thread toggle_kill_trigger_flag( trig_stomp_kill, 1, foot_side ); - self waittillmatch( "scripted_walk" ); - return str_end_stomp; - if ( self.giant_robot_id == 0 && foot_side == "left" ) - { - self thread toggle_wind_bunker_collision(); - } - else - { - if ( self.giant_robot_id == 1 && foot_side == "left" ) - { - self thread toggle_tank_bunker_collision(); - } - } - wait 0,5; - self thread toggle_kill_trigger_flag( trig_stomp_kill, 0, foot_side ); - } -} - -monitor_footsteps_fx( trig_stomp_kill, foot_side ) -{ - self endon( "death" ); - self endon( "giant_robot_stop" ); - str_end_stomp = "footstep_" + foot_side + "_large"; - while ( 1 ) - { - level setclientfield( "play_foot_stomp_fx_robot_" + self.giant_robot_id, 0 ); - self waittillmatch( "scripted_walk" ); - return str_end_stomp; - if ( foot_side == "right" ) - { - level setclientfield( "play_foot_stomp_fx_robot_" + self.giant_robot_id, 1 ); - } - else - { - level setclientfield( "play_foot_stomp_fx_robot_" + self.giant_robot_id, 2 ); - } - trig_stomp_kill thread rumble_and_shake( self ); - if ( self.giant_robot_id == 2 ) - { - self thread church_ceiling_fxanim( foot_side ); - } - else - { - if ( self.giant_robot_id == 0 ) - { - self thread play_pap_shake_fxanim( foot_side ); - } - } - wait_network_frame(); - } -} - -monitor_shadow_notetracks( foot_side ) -{ - self endon( "death" ); - self endon( "giant_robot_stop" ); - while ( 1 ) - { - self waittillmatch( "scripted_walk" ); - return "shadow_" + foot_side; - start_robot_stomp_warning_vo( foot_side ); - } -} - -rumble_and_shake( robot ) -{ - a_players = get_players(); - wait 0,2; - _a893 = a_players; - _k893 = getFirstArrayKey( _a893 ); - while ( isDefined( _k893 ) ) - { - player = _a893[ _k893 ]; - if ( is_player_valid( player ) ) - { - if ( isDefined( player.in_giant_robot_head ) ) - { - if ( isDefined( player.giant_robot_transition ) && player.giant_robot_transition ) - { - break; - } - else - { - if ( player.in_giant_robot_head == robot.giant_robot_id ) - { - player setclientfieldtoplayer( "giant_robot_rumble_and_shake", 2 ); - } - else - { - } - } - else dist = distance( player.origin, self.origin ); - if ( dist < 1500 ) - { - player setclientfieldtoplayer( "giant_robot_rumble_and_shake", 3 ); - level notify( "sam_clue_giant" ); - } - else if ( dist < 3000 ) - { - player setclientfieldtoplayer( "giant_robot_rumble_and_shake", 2 ); - } - else if ( dist < 6000 ) - { - player setclientfieldtoplayer( "giant_robot_rumble_and_shake", 1 ); - } - else - { - } - player thread turn_clientside_rumble_off(); - } - } - _k893 = getNextArrayKey( _a893, _k893 ); - } -} - -toggle_kill_trigger_flag( trig_stomp, b_flag, foot_side ) -{ - if ( !isDefined( foot_side ) ) - { - foot_side = undefined; - } - if ( b_flag ) - { - self ent_flag_set( "kill_trigger_active" ); - trig_stomp thread activate_kill_trigger( self, foot_side ); - } - else - { - self ent_flag_clear( "kill_trigger_active" ); - level notify( "stop_kill_trig_think" ); - if ( self ent_flag( "robot_head_entered" ) ) - { - self ent_flag_clear( "robot_head_entered" ); - self thread giant_robot_close_head_entrance( foot_side ); - level thread giant_robot_head_teleport_timeout( self.giant_robot_id ); - } - } -} - -activate_kill_trigger( robot, foot_side ) -{ - level endon( "stop_kill_trig_think" ); - if ( foot_side == "left" ) - { - str_foot_tag = "TAG_ATTACH_HATCH_LE"; - } - else - { - if ( foot_side == "right" ) - { - str_foot_tag = "TAG_ATTACH_HATCH_RI"; - } - } - while ( robot ent_flag( "kill_trigger_active" ) ) - { - a_zombies = getaispeciesarray( level.zombie_team, "all" ); - a_zombies_to_kill = []; - _a985 = a_zombies; - _k985 = getFirstArrayKey( _a985 ); - while ( isDefined( _k985 ) ) - { - zombie = _a985[ _k985 ]; - if ( distancesquared( zombie.origin, self.origin ) < 360000 ) - { - if ( isDefined( zombie.is_giant_robot ) && zombie.is_giant_robot ) - { - break; - } - else - { - if ( isDefined( zombie.marked_for_death ) && zombie.marked_for_death ) - { - break; - } - else - { - if ( isDefined( zombie.robot_stomped ) && zombie.robot_stomped ) - { - break; - } - else - { - if ( zombie istouching( self ) ) - { - if ( isDefined( zombie.is_mechz ) && zombie.is_mechz ) - { - zombie thread maps/mp/zombies/_zm_ai_mechz::mechz_robot_stomp_callback(); - break; - } - else - { - zombie setgoalpos( zombie.origin ); - zombie.marked_for_death = 1; - a_zombies_to_kill[ a_zombies_to_kill.size ] = zombie; - break; - } - else - { - if ( isDefined( zombie.is_mechz ) && !zombie.is_mechz && isDefined( zombie.has_legs ) && zombie.has_legs && isDefined( zombie.completed_emerging_into_playable_area ) && zombie.completed_emerging_into_playable_area ) - { - n_my_z = zombie.origin[ 2 ]; - v_giant_robot = robot gettagorigin( str_foot_tag ); - n_giant_robot_z = v_giant_robot[ 2 ]; - z_diff = abs( n_my_z - n_giant_robot_z ); - if ( z_diff <= 100 ) - { - zombie.v_punched_from = self.origin; - zombie animcustom( ::maps/mp/zombies/_zm_weap_one_inch_punch::knockdown_zombie_animate ); - } - } - } - } - } - } - } - } - _k985 = getNextArrayKey( _a985, _k985 ); - } - if ( a_zombies_to_kill.size > 0 ) - { - level thread zombie_stomp_death( robot, a_zombies_to_kill ); - robot thread zombie_stomped_by_gr_vo( foot_side ); - } - if ( isDefined( level.maxis_quadrotor ) ) - { - if ( level.maxis_quadrotor istouching( self ) ) - { - level.maxis_quadrotor thread quadrotor_stomp_death(); - } - } - a_boxes = getentarray( "foot_box", "script_noteworthy" ); - _a1052 = a_boxes; - _k1052 = getFirstArrayKey( _a1052 ); - while ( isDefined( _k1052 ) ) - { - m_box = _a1052[ _k1052 ]; - if ( m_box istouching( self ) ) - { - m_box notify( "robot_foot_stomp" ); - } - _k1052 = getNextArrayKey( _a1052, _k1052 ); - } - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( is_player_valid( players[ i ], 0, 1 ) ) - { - if ( !players[ i ] istouching( self ) ) - { - i++; - continue; - } - else if ( players[ i ] is_in_giant_robot_footstep_safe_spot() ) - { - i++; - continue; - } - else if ( isDefined( players[ i ].in_giant_robot_head ) ) - { - i++; - continue; - } - else if ( isDefined( players[ i ].is_stomped ) && players[ i ].is_stomped ) - { - i++; - continue; - } - else - { - if ( !level.gr_foot_hatch_closed[ robot.giant_robot_id ] && isDefined( robot.hatch_foot ) && isDefined( robot.b_has_hatch ) && robot.b_has_hatch && issubstr( self.targetname, robot.hatch_foot ) && !self player_is_in_laststand() ) - { - players[ i ].ignoreme = 1; - players[ i ].teleport_initial_origin = self.origin; - if ( robot.giant_robot_id == 0 ) - { - level thread maps/mp/zm_tomb_teleporter::stargate_teleport_player( "head_0_teleport_player", players[ i ], 4, 0 ); - players[ i ].in_giant_robot_head = 0; - } - else if ( robot.giant_robot_id == 1 ) - { - level thread maps/mp/zm_tomb_teleporter::stargate_teleport_player( "head_1_teleport_player", players[ i ], 4, 0 ); - players[ i ].in_giant_robot_head = 1; - if ( players[ i ] maps/mp/zombies/_zm_zonemgr::player_in_zone( "zone_bunker_4d" ) || players[ i ] maps/mp/zombies/_zm_zonemgr::player_in_zone( "zone_bunker_4c" ) ) - { - players[ i ].entered_foot_from_tank_bunker = 1; - } - } - else - { - level thread maps/mp/zm_tomb_teleporter::stargate_teleport_player( "head_2_teleport_player", players[ i ], 4, 0 ); - players[ i ].in_giant_robot_head = 2; - } - robot ent_flag_set( "robot_head_entered" ); - players[ i ] maps/mp/zombies/_zm_stats::increment_client_stat( "tomb_giant_robot_accessed", 0 ); - players[ i ] maps/mp/zombies/_zm_stats::increment_player_stat( "tomb_giant_robot_accessed" ); - players[ i ] playsoundtoplayer( "zmb_bot_elevator_ride_up", players[ i ] ); - start_wait = 0; - black_screen_wait = 4; - fade_in_time = 0,01; - fade_out_time = 0,2; - players[ i ] thread fadetoblackforxsec( start_wait, black_screen_wait, fade_in_time, fade_out_time, "white" ); - n_transition_time = start_wait + black_screen_wait + fade_in_time + fade_out_time; - n_start_time = start_wait + fade_in_time; - players[ i ] thread player_transition_into_robot_head_start( n_start_time ); - players[ i ] thread player_transition_into_robot_head_finish( n_transition_time ); - players[ i ] thread player_death_watch_on_giant_robot(); - i++; - continue; - } - else if ( isDefined( players[ i ].dig_vars[ "has_helmet" ] ) && players[ i ].dig_vars[ "has_helmet" ] ) - { - players[ i ] thread player_stomp_fake_death( robot ); - } - else - { - players[ i ] thread player_stomp_death( robot ); - } - start_wait = 0; - black_screen_wait = 5; - fade_in_time = 0,01; - fade_out_time = 0,2; - players[ i ] thread fadetoblackforxsec( start_wait, black_screen_wait, fade_in_time, fade_out_time, "black", 1 ); - } - } - i++; - } - wait 0,05; - } -} - -is_in_giant_robot_footstep_safe_spot() -{ - b_is_in_safe_spot = 0; - while ( isDefined( level.giant_robot_footstep_safe_spots ) ) - { - _a1166 = level.giant_robot_footstep_safe_spots; - _k1166 = getFirstArrayKey( _a1166 ); - while ( isDefined( _k1166 ) ) - { - e_volume = _a1166[ _k1166 ]; - if ( self istouching( e_volume ) ) - { - b_is_in_safe_spot = 1; - break; - } - else - { - _k1166 = getNextArrayKey( _a1166, _k1166 ); - } - } - } - return b_is_in_safe_spot; -} - -player_stomp_death( robot ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self.is_stomped = 1; - self playsound( "zmb_zombie_arc" ); - self freezecontrols( 1 ); - if ( self player_is_in_laststand() ) - { - self shellshock( "explosion", 7 ); - } - else - { - self dodamage( self.health, self.origin, robot ); - } - self maps/mp/zombies/_zm_stats::increment_client_stat( "tomb_giant_robot_stomped", 0 ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "tomb_giant_robot_stomped" ); - wait 5; - self.is_stomped = 0; - if ( isDefined( self.hostmigrationcontrolsfrozen ) && !self.hostmigrationcontrolsfrozen ) - { - self freezecontrols( 0 ); - } - self thread play_robot_crush_player_vo(); -} - -player_stomp_fake_death( robot ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self.is_stomped = 1; - self playsound( "zmb_zombie_arc" ); - self freezecontrols( 1 ); - self setstance( "prone" ); - self shellshock( "explosion", 7 ); - wait 5; - self.is_stomped = 0; - if ( isDefined( self.hostmigrationcontrolsfrozen ) && !self.hostmigrationcontrolsfrozen ) - { - self freezecontrols( 0 ); - } - if ( isDefined( self.ee_stepped_on ) && !self.ee_stepped_on ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "robot_crush_golden" ); - self.ee_stepped_on = 1; - } -} - -zombie_stomp_death( robot, a_zombies_to_kill ) -{ - n_interval = 0; - i = 0; - while ( i < a_zombies_to_kill.size ) - { - zombie = a_zombies_to_kill[ i ]; - if ( !isDefined( zombie ) || !isalive( zombie ) ) - { - i++; - continue; - } - else - { - zombie dodamage( zombie.health, zombie.origin, robot ); - n_interval++; - if ( n_interval >= 4 ) - { - wait_network_frame(); - n_interval = 0; - } - } - i++; - } -} - -quadrotor_stomp_death() -{ - self endon( "death" ); - self delete(); -} - -toggle_wind_bunker_collision() -{ - s_org = getstruct( "wind_tunnel_bunker", "script_noteworthy" ); - v_foot = self gettagorigin( "TAG_ATTACH_HATCH_LE" ); - if ( distance2dsquared( s_org.origin, v_foot ) < 57600 ) - { - level notify( "wind_bunker_collision_on" ); - wait 5; - level notify( "wind_bunker_collision_off" ); - } -} - -toggle_tank_bunker_collision() -{ - s_org = getstruct( "tank_bunker", "script_noteworthy" ); - v_foot = self gettagorigin( "TAG_ATTACH_HATCH_LE" ); - if ( distance2dsquared( s_org.origin, v_foot ) < 57600 ) - { - level notify( "tank_bunker_collision_on" ); - wait 5; - level notify( "tank_bunker_collision_off" ); - } -} - -handle_wind_tunnel_bunker_collision() -{ - e_collision = getent( "clip_foot_bottom_wind", "targetname" ); - e_collision notsolid(); - e_collision connectpaths(); - while ( 1 ) - { - level waittill( "wind_bunker_collision_on" ); - wait 0,1; - e_collision solid(); - e_collision disconnectpaths(); - level waittill( "wind_bunker_collision_off" ); - e_collision notsolid(); - e_collision connectpaths(); - } -} - -handle_tank_bunker_collision() -{ - e_collision = getent( "clip_foot_bottom_tank", "targetname" ); - e_collision notsolid(); - e_collision connectpaths(); - while ( 1 ) - { - level waittill( "tank_bunker_collision_on" ); - wait 0,1; - e_collision solid(); - e_collision disconnectpaths(); - level waittill( "tank_bunker_collision_off" ); - e_collision notsolid(); - e_collision connectpaths(); - } -} - -church_ceiling_fxanim( foot_side ) -{ - if ( foot_side == "left" ) - { - tag_foot = self gettagorigin( "TAG_ATTACH_HATCH_LE" ); - } - else - { - tag_foot = self gettagorigin( "TAG_ATTACH_HATCH_RI" ); - } - s_church = getstruct( "giant_robot_church_marker", "targetname" ); - n_distance = distance2dsquared( tag_foot, s_church.origin ); - if ( n_distance < 1000000 ) - { - level setclientfield( "church_ceiling_fxanim", 1 ); - wait_network_frame(); - level setclientfield( "church_ceiling_fxanim", 0 ); - } -} - -play_pap_shake_fxanim( foot_side ) -{ - if ( foot_side == "left" ) - { - tag_foot = self gettagorigin( "TAG_ATTACH_HATCH_LE" ); - } - else - { - tag_foot = self gettagorigin( "TAG_ATTACH_HATCH_RI" ); - } - s_pap = getstruct( "giant_robot_pap_marker", "targetname" ); - wait 0,2; - n_distance = distance2dsquared( tag_foot, s_pap.origin ); - if ( n_distance < 2250000 ) - { - level setclientfield( "pap_monolith_ring_shake", 1 ); - wait_network_frame(); - level setclientfield( "pap_monolith_ring_shake", 0 ); - } -} - -player_transition_into_robot_head_start( n_start_time ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self.giant_robot_transition = 1; - self.dontspeak = 1; - self setclientfieldtoplayer( "giant_robot_rumble_and_shake", 3 ); - wait 1,5; - self setclientfieldtoplayer( "player_rumble_and_shake", 4 ); -} - -player_transition_into_robot_head_finish( n_transition_time ) -{ - self endon( "death" ); - self endon( "disconnect" ); - wait n_transition_time; - self setclientfieldtoplayer( "player_rumble_and_shake", 0 ); - self setclientfieldtoplayer( "giant_robot_rumble_and_shake", 0 ); - self.giant_robot_transition = 0; - wait 2; - if ( !flag( "story_vo_playing" ) ) - { - self.dontspeak = 0; - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "enter_robot" ); - } - if ( !isDefined( level.sndrobotheadcount ) || level.sndrobotheadcount == 0 ) - { - level.sndrobotheadcount = 4; - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "zone_robot_head" ); - } - else - { - level.sndrobotheadcount--; - - } -} - -gr_head_exit_trigger_start( s_origin ) -{ - s_origin.unitrigger_stub = spawnstruct(); - s_origin.unitrigger_stub.origin = s_origin.origin; - s_origin.unitrigger_stub.radius = 36; - s_origin.unitrigger_stub.height = 256; - s_origin.unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - s_origin.unitrigger_stub.hint_string = &"ZM_TOMB_EHT"; - s_origin.unitrigger_stub.cursor_hint = "HINT_NOICON"; - s_origin.unitrigger_stub.require_look_at = 1; - s_origin.unitrigger_stub.target = s_origin.target; - s_origin.unitrigger_stub.script_int = s_origin.script_int; - s_origin.unitrigger_stub.is_available = 1; - s_origin.unitrigger_stub.prompt_and_visibility_func = ::gr_head_eject_trigger_visibility; - maps/mp/zombies/_zm_unitrigger::unitrigger_force_per_player_triggers( s_origin.unitrigger_stub, 1 ); - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( s_origin.unitrigger_stub, ::player_exits_giant_robot_head_trigger_think ); -} - -gr_head_eject_trigger_visibility( player ) -{ - if ( isDefined( self.stub.is_available )b_is_invis = !self.stub.is_available; - self setinvisibletoplayer( player, b_is_invis ); - self sethintstring( self.stub.hint_string ); - return !b_is_invis; -} - -reset_gr_head_unitriggers() -{ - maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::player_exits_giant_robot_head_trigger_think ); -} - -player_exits_giant_robot_head_trigger_think() -{ - self endon( "tube_used_for_timeout" ); - while ( 1 ) - { - self waittill( "trigger", player ); - if ( isDefined( self.stub.is_available ) && !self.stub.is_available ) - { - continue; - } - if ( !isplayer( player ) || !is_player_valid( player ) ) - { - continue; - } - level thread init_player_eject_logic( self.stub, player ); - self.stub.is_available = 0; - } -} - -init_player_eject_logic( s_unitrigger, player, b_timeout ) -{ - if ( !isDefined( b_timeout ) ) - { - b_timeout = 0; - } - s_unitrigger.is_available = 0; - s_origin = getstruct( s_unitrigger.target, "targetname" ); - v_origin = s_origin.origin; - v_angles = s_origin.angles; - m_linkpoint = spawn_model( "tag_origin", v_origin, v_angles ); - if ( isDefined( level.giant_robot_head_player_eject_thread_custom_func ) ) - { - player thread [[ level.giant_robot_head_player_eject_thread_custom_func ]]( m_linkpoint, s_origin.script_noteworthy, b_timeout ); - } - else - { - player thread giant_robot_head_player_eject_thread( m_linkpoint, s_origin.script_noteworthy, b_timeout ); - } - tube_clone = player maps/mp/zombies/_zm_clone::spawn_player_clone( player, player.origin, undefined ); - player thread giant_robot_eject_disconnect_watcher( m_linkpoint, tube_clone ); - tube_clone linkto( m_linkpoint, "tag_origin", ( 0, 0, 1 ), ( 0, 0, 1 ) ); - tube_clone.ignoreme = 1; - tube_clone show(); - tube_clone detachall(); - tube_clone setvisibletoall(); - tube_clone setinvisibletoplayer( player ); - tube_clone maps/mp/zombies/_zm_clone::clone_animate( "idle" ); - tube_clone thread tube_clone_falls_to_earth( m_linkpoint ); - m_linkpoint waittill( "movedone" ); - wait 6; - s_unitrigger.is_available = 1; -} - -giant_robot_head_player_eject_thread( m_linkpoint, str_tube, b_timeout ) -{ - if ( !isDefined( b_timeout ) ) - { - b_timeout = 0; - } - self endon( "death_or_disconnect" ); - self maps/mp/zm_tomb_giant_robot_ffotd::giant_robot_head_player_eject_start(); - str_current_weapon = self getcurrentweapon(); - self disableweapons(); - self disableoffhandweapons(); - self enableinvulnerability(); - self setstance( "stand" ); - self allowstand( 1 ); - self allowcrouch( 0 ); - self allowprone( 0 ); - self playerlinktodelta( m_linkpoint, "tag_origin", 1, 20, 20, 20, 20 ); - self setplayerangles( m_linkpoint.angles ); - self ghost(); - self.dontspeak = 1; - self setclientfieldtoplayer( "isspeaking", 1 ); - self notify( "teleport" ); - self.giant_robot_transition = 1; - self playsoundtoplayer( "zmb_bot_timeout_alarm", self ); - self.old_angles = self.angles; - if ( !b_timeout ) - { - self setclientfield( "eject_steam_fx", 1 ); - self thread in_tube_manual_looping_rumble(); - wait 3; - } - self stopsounds(); - wait_network_frame(); - self playsoundtoplayer( "zmb_giantrobot_exit", self ); - self notify( "end_in_tube_rumble" ); - self thread exit_gr_manual_looping_rumble(); - m_linkpoint moveto( m_linkpoint.origin + vectorScale( ( 0, 0, 1 ), 2000 ), 2,5 ); - self thread fadetoblackforxsec( 0, 2, 1, 0, "white" ); - wait 1; - m_linkpoint moveto( self.teleport_initial_origin + vectorScale( ( 0, 0, 1 ), 3000 ), 0,05 ); - m_linkpoint.angles = vectorScale( ( 0, 0, 1 ), 90 ); - self enableweapons(); - self giveweapon( "falling_hands_tomb_zm" ); - self switchtoweaponimmediate( "falling_hands_tomb_zm" ); - self setweaponammoclip( "falling_hands_tomb_zm", 0 ); - wait 1; - self playsoundtoplayer( "zmb_giantrobot_fall", self ); - self playerlinktodelta( m_linkpoint, "tag_origin", 1, 180, 180, 20, 20 ); - m_linkpoint moveto( self.teleport_initial_origin, 3, 1 ); - m_linkpoint thread play_gr_eject_impact_player_fx( self ); - m_linkpoint notify( "start_gr_eject_fall_to_earth" ); - self thread player_screams_while_falling(); - wait 2,75; - self thread fadetoblackforxsec( 0, 1, 0, 0,5, "black" ); - self waittill( "gr_eject_fall_complete" ); - self takeweapon( "falling_hands_tomb_zm" ); - if ( isDefined( str_current_weapon ) && str_current_weapon != "none" ) - { - self switchtoweaponimmediate( str_current_weapon ); - } - self enableoffhandweapons(); - self unlink(); - m_linkpoint delete(); - self teleport_player_to_gr_footprint_safe_spot(); - self show(); - self setplayerangles( self.old_angles ); - self disableinvulnerability(); - self.dontspeak = 0; - self allowstand( 1 ); - self allowcrouch( 1 ); - self allowprone( 1 ); - self setclientfieldtoplayer( "isspeaking", 0 ); - self.in_giant_robot_head = undefined; - self.teleport_initial_origin = undefined; - self.old_angles = undefined; - self thread gr_eject_landing_rumble(); - self thread gr_eject_landing_rumble_on_position(); - self setclientfield( "eject_steam_fx", 0 ); - n_post_eject_time = 2,5; - self setstance( "prone" ); - self shellshock( "explosion", n_post_eject_time ); - self.giant_robot_transition = 0; - self notify( "gr_eject_sequence_complete" ); - if ( !flag( "story_vo_playing" ) ) - { - self delay_thread( 3, ::maps/mp/zombies/_zm_audio::create_and_play_dialog, "general", "air_chute_landing" ); - } -/# - debug_level = getDvarInt( "zombie_cheat" ); - if ( isDefined( debug_level ) && debug_level ) - { - self enableinvulnerability(); -#/ - } - wait n_post_eject_time; - self.ignoreme = 0; - self maps/mp/zm_tomb_giant_robot_ffotd::giant_robot_head_player_eject_end(); -} - -player_screams_while_falling() -{ - self endon( "disconnect" ); - self stopsounds(); - wait_network_frame(); - self playsoundtoplayer( "vox_plr_" + self.characterindex + "_exit_robot_0", self ); -} - -tube_clone_falls_to_earth( m_linkpoint ) -{ - m_linkpoint waittill( "start_gr_eject_fall_to_earth" ); - self maps/mp/zombies/_zm_clone::clone_animate( "falling" ); - m_linkpoint waittill( "movedone" ); - self delete(); -} - -in_tube_manual_looping_rumble() -{ - self endon( "end_in_tube_rumble" ); - self endon( "death" ); - self endon( "disconnect" ); - while ( 1 ) - { - self setclientfieldtoplayer( "giant_robot_rumble_and_shake", 1 ); - wait_network_frame(); - self setclientfieldtoplayer( "giant_robot_rumble_and_shake", 0 ); - wait_network_frame(); - wait 0,1; - } -} - -exit_gr_manual_looping_rumble() -{ - self endon( "end_exit_gr_rumble" ); - self endon( "death" ); - self endon( "disconnect" ); - while ( 1 ) - { - self setclientfieldtoplayer( "giant_robot_rumble_and_shake", 1 ); - wait_network_frame(); - self setclientfieldtoplayer( "giant_robot_rumble_and_shake", 0 ); - wait_network_frame(); - wait 0,1; - } -} - -gr_eject_landing_rumble() -{ - self endon( "death" ); - self endon( "disconnect" ); - self notify( "end_exit_gr_rumble" ); - wait_network_frame(); - self setclientfieldtoplayer( "giant_robot_rumble_and_shake", 0 ); - wait_network_frame(); - self setclientfieldtoplayer( "giant_robot_rumble_and_shake", 3 ); - wait_network_frame(); - self setclientfieldtoplayer( "giant_robot_rumble_and_shake", 0 ); -} - -gr_eject_landing_rumble_on_position() -{ - self endon( "death" ); - self endon( "disconnect" ); - a_players = getplayers(); - _a1781 = a_players; - _k1781 = getFirstArrayKey( _a1781 ); - while ( isDefined( _k1781 ) ) - { - player = _a1781[ _k1781 ]; - if ( player == self ) - { - } - else if ( isDefined( player.giant_robot_transition ) && player.giant_robot_transition ) - { - } - else - { - if ( distance2dsquared( player.origin, self.origin ) < 250000 ) - { - player thread gr_eject_landing_rumble(); - } - } - _k1781 = getNextArrayKey( _a1781, _k1781 ); - } -} - -teleport_player_to_gr_footprint_safe_spot() -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( isDefined( self.entered_foot_from_tank_bunker ) && self.entered_foot_from_tank_bunker ) - { - a_s_orgs = getstructarray( "tank_platform_safe_spots", "targetname" ); - _a1809 = a_s_orgs; - _k1809 = getFirstArrayKey( _a1809 ); - while ( isDefined( _k1809 ) ) - { - struct = _a1809[ _k1809 ]; - if ( !positionwouldtelefrag( struct.origin ) ) - { - self setorigin( struct.origin ); - break; - } - else - { - _k1809 = getNextArrayKey( _a1809, _k1809 ); - } - } - self.entered_foot_from_tank_bunker = 0; - return; - } - a_s_footprints = getstructarray( "giant_robot_footprint", "targetname" ); - a_s_footprints = get_array_of_closest( self.teleport_initial_origin, a_s_footprints ); - s_footprint = a_s_footprints[ 0 ]; - a_v_offset = []; - a_v_offset[ 0 ] = ( 0, 0, 1 ); - a_v_offset[ 1 ] = vectorScale( ( 0, 0, 1 ), 50 ); - a_v_offset[ 2 ] = vectorScale( ( 0, 0, 1 ), 50 ); - a_v_offset[ 3 ] = vectorScale( ( 0, 0, 1 ), 50 ); - a_v_offset[ 4 ] = vectorScale( ( 0, 0, 1 ), 50 ); - a_v_offset[ 5 ] = vectorScale( ( 0, 0, 1 ), 50 ); - a_v_offset[ 6 ] = vectorScale( ( 0, 0, 1 ), 50 ); - a_v_offset[ 7 ] = vectorScale( ( 0, 0, 1 ), 50 ); - a_v_offset[ 8 ] = vectorScale( ( 0, 0, 1 ), 50 ); - i = 0; - while ( i < a_v_offset.size ) - { - v_origin = s_footprint.origin + a_v_offset[ i ]; - v_trace_start = v_origin + vectorScale( ( 0, 0, 1 ), 100 ); - v_final = playerphysicstrace( v_trace_start, v_origin ); - if ( !positionwouldtelefrag( v_final ) ) - { - self setorigin( v_final ); - return; - } - else - { - i++; - } - } -} - -giant_robot_head_teleport_timeout( n_robot_id ) -{ - wait 15; - n_players_in_robot = count_players_in_gr_head( n_robot_id ); - if ( n_players_in_robot == 0 ) - { - return; - } - while ( flag( "maxis_audiolog_gr" + n_robot_id + "_playing" ) ) - { - wait 0,1; - } - n_players_in_robot = count_players_in_gr_head( n_robot_id ); - if ( n_players_in_robot == 0 ) - { - return; - } - level thread play_timeout_warning_vo( n_robot_id ); - maps/mp/zm_tomb_vo::reset_maxis_audiolog_unitrigger( n_robot_id ); - level setclientfield( "eject_warning_fx_robot_" + n_robot_id, 1 ); - a_players = getplayers(); - a_players[ 0 ] setclientfield( "all_tubes_play_eject_steam_fx", 1 ); - level waittill( "timeout_warning_vo_complete_" + n_robot_id ); - a_gr_head_triggers = getstructarray( "giant_robot_head_exit_trigger", "script_noteworthy" ); - a_shutdown_triggers = []; - _a1896 = a_gr_head_triggers; - _k1896 = getFirstArrayKey( _a1896 ); - while ( isDefined( _k1896 ) ) - { - trigger = _a1896[ _k1896 ]; - if ( trigger.script_int == n_robot_id ) - { - if ( isDefined( trigger.unitrigger_stub.is_available ) && trigger.unitrigger_stub.is_available ) - { - maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( trigger.unitrigger_stub ); - a_shutdown_triggers[ a_shutdown_triggers.size ] = trigger; - } - } - _k1896 = getNextArrayKey( _a1896, _k1896 ); - } - a_players = getplayers(); - a_m_linkspots = []; - _a1911 = a_players; - _k1911 = getFirstArrayKey( _a1911 ); - while ( isDefined( _k1911 ) ) - { - player = _a1911[ _k1911 ]; - if ( isDefined( player.in_giant_robot_head ) && player.in_giant_robot_head == n_robot_id ) - { - if ( isDefined( player.giant_robot_transition ) && !player.giant_robot_transition ) - { - if ( player player_is_in_laststand() ) - { - if ( isDefined( player.waiting_to_revive ) && player.waiting_to_revive && a_players.size <= 1 ) - { - flag_set( "instant_revive" ); - player.stopflashingbadlytime = getTime() + 1000; - wait_network_frame(); - flag_clear( "instant_revive" ); - break; - } - else - { - player thread maps/mp/zombies/_zm_laststand::bleed_out(); - player notify( "gr_head_forced_bleed_out" ); - break; - } - } - else - { - if ( isalive( player ) ) - { - m_linkspot = spawn_model( "tag_origin", player.origin, player.angles ); - a_m_linkspots[ a_m_linkspots.size ] = m_linkspot; - player start_drag_player_to_eject_tube( n_robot_id, m_linkspot ); - wait 0,1; - } - } - } - } - _k1911 = getNextArrayKey( _a1911, _k1911 ); - } - wait 10; - maps/mp/zm_tomb_vo::restart_maxis_audiolog_unitrigger( n_robot_id ); - level setclientfield( "eject_warning_fx_robot_" + n_robot_id, 0 ); - a_players = getplayers(); - a_players[ 0 ] setclientfield( "all_tubes_play_eject_steam_fx", 0 ); - _a1958 = a_shutdown_triggers; - _k1958 = getFirstArrayKey( _a1958 ); - while ( isDefined( _k1958 ) ) - { - trigger = _a1958[ _k1958 ]; - if ( trigger.script_int == n_robot_id ) - { - trigger thread reset_gr_head_unitriggers(); - } - _k1958 = getNextArrayKey( _a1958, _k1958 ); - } - while ( a_m_linkspots.size > 0 ) - { - i = 0; - while ( i < a_m_linkspots.size ) - { - if ( isDefined( a_m_linkspots[ i ] ) ) - { - a_m_linkspots[ i ] delete(); - } - i++; - } - } -} - -start_drag_player_to_eject_tube( n_robot_id, m_linkspot ) -{ - self endon( "death" ); - self endon( "disconnect" ); - a_gr_head_triggers = getstructarray( "giant_robot_head_exit_trigger", "script_noteworthy" ); - a_gr_head_triggers = get_array_of_closest( self.origin, a_gr_head_triggers ); - _a1987 = a_gr_head_triggers; - _k1987 = getFirstArrayKey( _a1987 ); - while ( isDefined( _k1987 ) ) - { - trigger = _a1987[ _k1987 ]; - if ( trigger.unitrigger_stub.script_int == n_robot_id ) - { - if ( isDefined( trigger.unitrigger_stub.is_available ) && trigger.unitrigger_stub.is_available ) - { - self thread in_tube_manual_looping_rumble(); - trigger.unitrigger_stub.is_available = 0; - s_tube = getstruct( trigger.target, "targetname" ); - self playerlinktodelta( m_linkspot, "tag_origin", 1, 20, 20, 20, 20 ); - self thread move_player_to_eject_tube( m_linkspot, s_tube, trigger ); - return; - } - } - else - { - _k1987 = getNextArrayKey( _a1987, _k1987 ); - } - } -} - -move_player_to_eject_tube( m_linkspot, s_tube, trigger ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self.giant_robot_transition = 1; - n_speed = 500; - n_dist = distance( m_linkspot.origin, s_tube.origin ); - n_time = n_dist / n_speed; - m_linkspot moveto( s_tube.origin, n_time ); - m_linkspot waittill( "movedone" ); - m_linkspot delete(); - level thread init_player_eject_logic( trigger.unitrigger_stub, self, 1 ); -} - -sndalarmtimeout() -{ - self endon( "teleport" ); - self endon( "disconnect" ); - self playsoundtoplayer( "zmb_bot_timeout_alarm", self ); - wait 2,5; - self playsoundtoplayer( "zmb_bot_timeout_alarm", self ); -} - -play_gr_eject_impact_player_fx( player ) -{ - player endon( "death" ); - player endon( "disconnect" ); - self waittill( "movedone" ); - player setclientfield( "gr_eject_player_impact_fx", 1 ); - wait_network_frame(); - player notify( "gr_eject_fall_complete" ); - wait 1; - player setclientfield( "gr_eject_player_impact_fx", 0 ); -} - -player_death_watch_on_giant_robot() -{ - self endon( "disconnect" ); - self endon( "gr_eject_sequence_complete" ); - self waittill_either( "bled_out", "gr_head_forced_bleed_out" ); - self.entered_foot_from_tank_bunker = undefined; - self.giant_robot_transition = undefined; - self.in_giant_robot_head = undefined; - self.ignoreme = 0; - self.dontspeak = 0; -} - -giant_robot_eject_disconnect_watcher( m_linkpoint, tube_clone ) -{ - self endon( "gr_eject_sequence_complete" ); - self waittill( "disconnect" ); - if ( isDefined( m_linkpoint ) ) - { - m_linkpoint delete(); - } - if ( isDefined( tube_clone ) ) - { - tube_clone delete(); - } -} - -turn_clientside_rumble_off() -{ - self endon( "death" ); - self endon( "disconnect" ); - wait_network_frame(); - self setclientfieldtoplayer( "giant_robot_rumble_and_shake", 0 ); -} - -spawn_model( model_name, origin, angles, n_spawnflags ) -{ - if ( !isDefined( n_spawnflags ) ) - { - n_spawnflags = 0; - } - if ( !isDefined( origin ) ) - { - origin = ( 0, 0, 1 ); - } - model = spawn( "script_model", origin, n_spawnflags ); - model setmodel( model_name ); - if ( isDefined( angles ) ) - { - model.angles = angles; - } - return model; -} - -count_players_in_gr_head( n_robot_id ) -{ - n_players_in_robot = 0; - a_players = getplayers(); - _a2116 = a_players; - _k2116 = getFirstArrayKey( _a2116 ); - while ( isDefined( _k2116 ) ) - { - player = _a2116[ _k2116 ]; - if ( isDefined( player.in_giant_robot_head ) && player.in_giant_robot_head == n_robot_id ) - { - n_players_in_robot++; - } - _k2116 = getNextArrayKey( _a2116, _k2116 ); - } - return n_players_in_robot; -} - -tomb_standard_intermission() -{ - self closemenu(); - self closeingamemenu(); - level endon( "stop_intermission" ); - self endon( "disconnect" ); - self endon( "death" ); - self notify( "_zombie_game_over" ); - level thread setup_giant_robots_intermission(); - self.score = self.score_total; - self.sessionstate = "intermission"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - points = getstructarray( "intermission", "targetname" ); - if ( !isDefined( points ) || points.size == 0 ) - { - points = getentarray( "info_intermission", "classname" ); - if ( points.size < 1 ) - { -/# - println( "NO info_intermission POINTS IN MAP" ); -#/ - return; - } - } - self.game_over_bg = newclienthudelem( self ); - self.game_over_bg.horzalign = "fullscreen"; - self.game_over_bg.vertalign = "fullscreen"; - self.game_over_bg setshader( "black", 640, 480 ); - self.game_over_bg.alpha = 1; - org = undefined; - while ( 1 ) - { - points = array_randomize( points ); - i = 0; - while ( i < points.size ) - { - point = points[ i ]; - if ( !isDefined( org ) ) - { - self spawn( point.origin, point.angles ); - } - if ( isDefined( points[ i ].target ) ) - { - if ( !isDefined( org ) ) - { - org = spawn( "script_model", self.origin + vectorScale( ( 0, 0, 1 ), 60 ) ); - org setmodel( "tag_origin" ); - } - org.origin = points[ i ].origin; - org.angles = points[ i ].angles; - j = 0; - while ( j < get_players().size ) - { - player = get_players()[ j ]; - player camerasetposition( org ); - player camerasetlookat(); - player cameraactivate( 1 ); - j++; - } - speed = 20; - if ( isDefined( points[ i ].speed ) ) - { - speed = points[ i ].speed; - } - target_point = getstruct( points[ i ].target, "targetname" ); - dist = distance( points[ i ].origin, target_point.origin ); - time = dist / speed; - q_time = time * 0,25; - if ( q_time > 1 ) - { - q_time = 1; - } - self.game_over_bg fadeovertime( q_time ); - self.game_over_bg.alpha = 0; - org moveto( target_point.origin, time, q_time, q_time ); - org rotateto( target_point.angles, time, q_time, q_time ); - wait ( time - q_time ); - self.game_over_bg fadeovertime( q_time ); - self.game_over_bg.alpha = 1; - wait q_time; - i++; - continue; - } - else - { - self.game_over_bg fadeovertime( 1 ); - self.game_over_bg.alpha = 0; - wait 5; - self.game_over_bg thread maps/mp/zombies/_zm::fade_up_over_time( 1 ); - } - i++; - } - } -} - -setup_giant_robots_intermission() -{ - i = 0; - while ( i < 3 ) - { - ai_giant_robot = getent( "giant_robot_walker_" + i, "targetname" ); - if ( !isDefined( ai_giant_robot ) ) - { - i++; - continue; - } - else - { - ai_giant_robot ghost(); - ai_giant_robot stopanimscripted( 0,05 ); - ai_giant_robot notify( "giant_robot_stop" ); - if ( i == 2 ) - { - wait_network_frame(); - ai_giant_robot show(); - str_anim_scripted_name = "zm_robot_walk_village"; - s_robot_path = getstruct( "anim_align_robot_village", "targetname" ); - s_robot_path.angles = ( 0, 0, 1 ); - animationid = ai_giant_robot getanimfromasd( "zm_robot_walk_village", 1 ); - ai_giant_robot thread maps/mp/animscripts/zm_shared::donotetracks( "scripted_walk" ); - ai_giant_robot animscripted( s_robot_path.origin, s_robot_path.angles, str_anim_scripted_name, 1 ); - } - } - i++; - } -} - -giant_robot_discovered_vo( ai_giant_robot ) -{ - ai_giant_robot endon( "giant_robot_stop" ); - self endon( "disconnect" ); - level endon( "giant_robot_discovered" ); - while ( 1 ) - { - if ( distance2dsquared( self.origin, ai_giant_robot.origin ) < 16000000 ) - { - if ( self is_player_looking_at( ai_giant_robot.origin + vectorScale( ( 0, 0, 1 ), 2000 ), 0,85 ) ) - { - if ( isDefined( self.dontspeak ) && !self.dontspeak ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "discover_robot" ); - level.giant_robot_discovered = 1; - level notify( "giant_robot_discovered" ); - return; - } - } - } - else - { - wait 0,1; - } - } -} - -three_robot_round_vo( ai_giant_robot ) -{ - ai_giant_robot endon( "giant_robot_stop" ); - self endon( "disconnect" ); - level endon( "three_robot_round_vo" ); - while ( 1 ) - { - if ( distance2dsquared( self.origin, ai_giant_robot.origin ) < 16000000 ) - { - if ( self is_player_looking_at( ai_giant_robot.origin + vectorScale( ( 0, 0, 1 ), 2000 ), 0,85 ) ) - { - if ( isDefined( self.dontspeak ) && !self.dontspeak ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "see_robots" ); - level.three_robot_round_vo = 1; - level notify( "three_robot_round_vo" ); - return; - } - } - } - else - { - wait 0,1; - } - } -} - -shoot_at_giant_robot_vo( ai_giant_robot ) -{ - ai_giant_robot endon( "giant_robot_stop" ); - self endon( "disconnect" ); - level endon( "shoot_robot_vo" ); - while ( 1 ) - { - while ( distance2dsquared( self.origin, ai_giant_robot.origin ) < 16000000 && self is_player_looking_at( ai_giant_robot.origin + vectorScale( ( 0, 0, 1 ), 2000 ), 0,7 ) ) - { - self waittill( "weapon_fired" ); - if ( distance2dsquared( self.origin, ai_giant_robot.origin ) < 16000000 && self is_player_looking_at( ai_giant_robot.origin + vectorScale( ( 0, 0, 1 ), 2000 ), 0,7 ) ) - { - if ( isDefined( self.dontspeak ) && !self.dontspeak ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "shoot_robot" ); - level.shoot_robot_vo = 1; - level notify( "shoot_robot_vo" ); - return; - } - } - } - wait 0,1; - } -} - -start_robot_stomp_warning_vo( foot_side ) -{ - if ( foot_side == "right" ) - { - str_tag = "TAG_ATTACH_HATCH_RI"; - } - else - { - if ( foot_side == "left" ) - { - str_tag = "TAG_ATTACH_HATCH_LE"; - } - } - v_origin = self gettagorigin( str_tag ); - a_s_footprint_all = getstructarray( "giant_robot_footprint_center", "targetname" ); - a_s_footprint = []; - _a2384 = a_s_footprint_all; - _k2384 = getFirstArrayKey( _a2384 ); - while ( isDefined( _k2384 ) ) - { - footprint = _a2384[ _k2384 ]; - if ( footprint.script_int == self.giant_robot_id ) - { - a_s_footprint[ a_s_footprint.size ] = footprint; - } - _k2384 = getNextArrayKey( _a2384, _k2384 ); - } - if ( a_s_footprint.size == 0 ) - { - return; - } - else - { - a_s_footprint = get_array_of_closest( v_origin, a_s_footprint ); - s_footprint = a_s_footprint[ 0 ]; - } - a_players = getplayers(); - _a2404 = a_players; - _k2404 = getFirstArrayKey( _a2404 ); - while ( isDefined( _k2404 ) ) - { - player = _a2404[ _k2404 ]; - if ( distance2dsquared( player.origin, s_footprint.origin ) < 160000 ) - { - player thread play_robot_stomp_warning_vo(); - } - _k2404 = getNextArrayKey( _a2404, _k2404 ); - } -} - -play_robot_stomp_warning_vo() -{ - a_players = getplayers(); - _a2417 = a_players; - _k2417 = getFirstArrayKey( _a2417 ); - while ( isDefined( _k2417 ) ) - { - player = _a2417[ _k2417 ]; - if ( player == self ) - { - } - else - { - if ( distance2dsquared( self.origin, player.origin ) < 640000 ) - { - if ( player is_player_looking_at( self.origin + vectorScale( ( 0, 0, 1 ), 60 ) ) ) - { - if ( isDefined( player.dontspeak ) && !player.dontspeak ) - { - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "warn_robot_foot" ); - return; - } - } - } - } - else - { - _k2417 = getNextArrayKey( _a2417, _k2417 ); - } - } -} - -zombie_stomped_by_gr_vo( foot_side ) -{ - self endon( "giant_robot_stop" ); - if ( foot_side == "right" ) - { - str_tag = "TAG_ATTACH_HATCH_RI"; - } - else - { - if ( foot_side == "left" ) - { - str_tag = "TAG_ATTACH_HATCH_LE"; - } - } - v_origin = self gettagorigin( str_tag ); - a_players = getplayers(); - _a2454 = a_players; - _k2454 = getFirstArrayKey( _a2454 ); - while ( isDefined( _k2454 ) ) - { - player = _a2454[ _k2454 ]; - if ( distancesquared( v_origin, player.origin ) < 640000 ) - { - if ( player is_player_looking_at( v_origin, 0,25 ) ) - { - if ( isDefined( player.dontspeak ) && !player.dontspeak ) - { - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "robot_crush_zombie" ); - return; - } - } - } - _k2454 = getNextArrayKey( _a2454, _k2454 ); - } -} - -play_robot_crush_player_vo() -{ - self endon( "disconnect" ); - if ( self player_is_in_laststand() ) - { - if ( cointoss() ) - { - n_alt = 1; - } - else - { - n_alt = 0; - } - self playsoundwithnotify( "vox_plr_" + self.characterindex + "_robot_crush_player_" + n_alt, "sound_done" + "vox_plr_" + self.characterindex + "_robot_crush_player_" + n_alt ); - } -} - -play_timeout_warning_vo( n_robot_id ) -{ - flag_set( "timeout_vo_robot_" + n_robot_id ); - s_origin = getstruct( "eject_warning_fx_robot_" + n_robot_id, "targetname" ); - e_vo_origin = spawn_model( "tag_origin", s_origin.origin ); - e_vo_origin playsoundwithnotify( "vox_maxi_purge_robot_0", "vox_maxi_purge_robot_0_done" ); - e_vo_origin waittill( "vox_maxi_purge_robot_0_done" ); - a_players = getplayers(); - _a2499 = a_players; - _k2499 = getFirstArrayKey( _a2499 ); - while ( isDefined( _k2499 ) ) - { - player = _a2499[ _k2499 ]; - if ( isDefined( player.in_giant_robot_head ) && player.in_giant_robot_head == n_robot_id ) - { - if ( isDefined( player.giant_robot_transition ) && !player.giant_robot_transition ) - { - if ( isDefined( player.dontspeak ) && !player.dontspeak ) - { - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "purge_robot" ); - break; - } - } - } - else - { - _k2499 = getNextArrayKey( _a2499, _k2499 ); - } - } - while ( isDefined( player ) && isDefined( player.isspeaking ) && player.isspeaking ) - { - wait 0,1; - } - wait 1; - e_vo_origin playsoundwithnotify( "vox_maxi_purge_countdown_0", "vox_maxi_purge_countdown_0_done" ); - e_vo_origin waittill( "vox_maxi_purge_countdown_0_done" ); - wait 1; - level notify( "timeout_warning_vo_complete_" + n_robot_id ); - e_vo_origin playsoundwithnotify( "vox_maxi_purge_now_0", "vox_maxi_purge_now_0_done" ); - e_vo_origin waittill( "vox_maxi_purge_now_0_done" ); - e_vo_origin delete(); - flag_clear( "timeout_vo_robot_" + n_robot_id ); -} - -start_footprint_warning_vo( n_robot_id ) -{ - wait 20; - a_structs = getstructarray( "giant_robot_footprint_center", "targetname" ); - _a2540 = a_structs; - _k2540 = getFirstArrayKey( _a2540 ); - while ( isDefined( _k2540 ) ) - { - struct = _a2540[ _k2540 ]; - if ( struct.script_int == n_robot_id ) - { - struct thread footprint_check_for_nearby_players( self ); - } - _k2540 = getNextArrayKey( _a2540, _k2540 ); - } -} - -footprint_check_for_nearby_players( ai_giant_robot ) -{ - level endon( "footprint_warning_vo" ); - ai_giant_robot endon( "giant_robot_stop" ); - while ( 1 ) - { - a_players = getplayers(); - _a2558 = a_players; - _k2558 = getFirstArrayKey( _a2558 ); - while ( isDefined( _k2558 ) ) - { - player = _a2558[ _k2558 ]; - if ( distance2dsquared( player.origin, self.origin ) < 90000 ) - { - if ( distance2dsquared( player.origin, ai_giant_robot.origin ) < 16000000 ) - { - if ( player.origin[ 0 ] > ai_giant_robot.origin[ 0 ] ) - { - if ( isDefined( player.dontspeak ) && !player.dontspeak ) - { - player do_player_general_vox( "general", "warn_robot" ); - level.footprint_warning_vo = 1; - level notify( "footprint_warning_vo" ); - return; - } - } - } - } - _k2558 = getNextArrayKey( _a2558, _k2558 ); - } - wait 1; - } -} - -setup_giant_robot_devgui() -{ -/# - setdvar( "force_giant_robot_0", "off" ); - setdvar( "force_giant_robot_1", "off" ); - setdvar( "force_giant_robot_2", "off" ); - setdvar( "force_three_robot_round", "off" ); - setdvar( "force_left_foot", "off" ); - setdvar( "force_right_foot", "off" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Giant Robot:1/Force Robot 0 (NML):1" "force_giant_robot_0 on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Giant Robot:1/Force Robot 1 (Trench):2" "force_giant_robot_1 on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Giant Robot:1/Force Robot 2 (Village):3" "force_giant_robot_2 on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Giant Robot:1/Force Three Robot Round:4" "force_three_robot_round on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Giant Robot:1/Force Left Foot:5" "force_left_foot on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Giant Robot:1/Force Right Foot:6" "force_right_foot on"\n" ); - level thread watch_for_force_giant_robot(); -#/ -} - -watch_for_force_giant_robot() -{ -/# - while ( 1 ) - { - if ( getDvar( "force_giant_robot_0" ) == "on" ) - { - setdvar( "force_giant_robot_0", "off" ); - if ( isDefined( level.devgui_force_giant_robot ) && level.devgui_force_giant_robot == 0 ) - { - level.devgui_force_giant_robot = undefined; - iprintlnbold( "Force Giant Robot off" ); - break; - } - else - { - level.devgui_force_giant_robot = 0; - iprintlnbold( "Force Giant Robot 0 (NML)" ); - } - } - if ( getDvar( "force_giant_robot_1" ) == "on" ) - { - setdvar( "force_giant_robot_1", "off" ); - if ( isDefined( level.devgui_force_giant_robot ) && level.devgui_force_giant_robot == 1 ) - { - level.devgui_force_giant_robot = undefined; - iprintlnbold( "Force Giant Robot off" ); - break; - } - else - { - level.devgui_force_giant_robot = 1; - iprintlnbold( "Force Giant Robot 1 (Trench)" ); - } - } - if ( getDvar( "force_giant_robot_2" ) == "on" ) - { - setdvar( "force_giant_robot_2", "off" ); - if ( isDefined( level.devgui_force_giant_robot ) && level.devgui_force_giant_robot == 2 ) - { - level.devgui_force_giant_robot = undefined; - iprintlnbold( "Force Giant Robot off" ); - break; - } - else - { - level.devgui_force_giant_robot = 2; - iprintlnbold( "Force Giant Robot 2 (Village)" ); - } - } - if ( getDvar( "force_three_robot_round" ) == "on" ) - { - setdvar( "force_three_robot_round", "off" ); - if ( isDefined( level.devgui_force_three_robot_round ) && level.devgui_force_three_robot_round ) - { - level.devgui_force_three_robot_round = undefined; - iprintlnbold( "Force Three Robot Round off" ); - break; - } - else - { - level.devgui_force_three_robot_round = 1; - iprintlnbold( "Force Three Robot Round" ); - } - } - if ( getDvar( "force_left_foot" ) == "on" ) - { - setdvar( "force_left_foot", "off" ); - if ( isDefined( level.devgui_force_giant_robot_foot ) && level.devgui_force_giant_robot_foot == "left" ) - { - level.devgui_force_giant_robot_foot = undefined; - iprintlnbold( "Force Giant Robot Foot Off" ); - break; - } - else - { - level.devgui_force_giant_robot_foot = "left"; - iprintlnbold( "Force Giant Robot Hatch on Left Foot" ); - } - } - if ( getDvar( "force_right_foot" ) == "on" ) - { - setdvar( "force_right_foot", "off" ); - if ( isDefined( level.devgui_force_giant_robot_foot ) && level.devgui_force_giant_robot_foot == "right" ) - { - level.devgui_force_giant_robot_foot = undefined; - iprintlnbold( "Force Giant Robot Foot Off" ); - break; - } - else - { - level.devgui_force_giant_robot_foot = "right"; - iprintlnbold( "Force Giant Robot Hatch on Right Foot" ); - } - } - wait 0,05; -#/ - } -} - -starting_spawn_light() -{ - light = getent( "start_bunker_footprint_light", "targetname" ); - if ( !isDefined( light ) ) - { - return; - } - light setlightintensity( 0 ); - wait 5,4; - i = 8; - while ( i <= 16 ) - { - light setlightintensity( i ); - wait 0,1; - i += 8; - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_giant_robot_ffotd.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_giant_robot_ffotd.gsc deleted file mode 100644 index c1862d4..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_giant_robot_ffotd.gsc +++ /dev/null @@ -1,36 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init_giant_robot_start() //checked matches cerberus output -{ -} - -init_giant_robot_end() //checked matches cerberus output -{ -} - -init_giant_robot_glows_start() //checked matches cerberus output -{ -} - -init_giant_robot_glows_end() //checked matches cerberus output -{ -} - -giant_robot_spawn_start() //checked matches cerberus output -{ -} - -giant_robot_spawn_end() //checked matches cerberus output -{ -} - -giant_robot_head_player_eject_start() //checked matches cerberus output -{ -} - -giant_robot_head_player_eject_end() //checked matches cerberus output -{ -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_main_quest.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_main_quest.gsc deleted file mode 100644 index d2e3250..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_main_quest.gsc +++ /dev/null @@ -1,1268 +0,0 @@ -//checked includes changed to match cerberus output -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zm_tomb_amb; -#include maps/mp/zm_tomb_challenges; -#include maps/mp/zm_tomb_ee_main_step_7; -#include maps/mp/zombies/_zm_challenges; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zm_tomb_craftables; -#include maps/mp/zombies/_zm_blockers; -#include maps/mp/zm_tomb_teleporter; -#include maps/mp/zm_tomb_vo; -#include maps/mp/zm_tomb_chamber; -#include maps/mp/zm_tomb_quest_crypt; -#include maps/mp/zm_tomb_quest_elec; -#include maps/mp/zm_tomb_quest_ice; -#include maps/mp/zm_tomb_quest_fire; -#include maps/mp/zm_tomb_quest_air; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_craftables; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -//#using_animtree( "fxanim_props_dlc4" ); - -main_quest_init() //checked changed to match cerberus output -{ - flag_init( "dug" ); - flag_init( "air_open" ); - flag_init( "fire_open" ); - flag_init( "lightning_open" ); - flag_init( "ice_open" ); - flag_init( "panels_solved" ); - flag_init( "fire_solved" ); - flag_init( "ice_solved" ); - flag_init( "chamber_puzzle_cheat" ); - flag_init( "activate_zone_crypt" ); - level.callbackvehicledamage = ::aircrystalbiplanecallback_vehicledamage; - level.game_mode_custom_onplayerdisconnect = ::player_disconnect_callback; - onplayerconnect_callback( ::onplayerconnect ); - staff_air = getent( "prop_staff_air", "targetname" ); - staff_fire = getent( "prop_staff_fire", "targetname" ); - staff_lightning = getent( "prop_staff_lightning", "targetname" ); - staff_water = getent( "prop_staff_water", "targetname" ); - staff_air.weapname = "staff_air_zm"; - staff_fire.weapname = "staff_fire_zm"; - staff_lightning.weapname = "staff_lightning_zm"; - staff_water.weapname = "staff_water_zm"; - staff_air.element = "air"; - staff_fire.element = "fire"; - staff_lightning.element = "lightning"; - staff_water.element = "water"; - staff_air.craftable_name = "elemental_staff_air"; - staff_fire.craftable_name = "elemental_staff_fire"; - staff_lightning.craftable_name = "elemental_staff_lightning"; - staff_water.craftable_name = "elemental_staff_water"; - staff_air.charger = getstruct( "staff_air_charger", "script_noteworthy" ); - staff_fire.charger = getstruct( "staff_fire_charger", "script_noteworthy" ); - staff_lightning.charger = getstruct( "zone_bolt_chamber", "script_noteworthy" ); - staff_water.charger = getstruct( "staff_ice_charger", "script_noteworthy" ); - staff_fire.quest_clientfield = "quest_state1"; - staff_air.quest_clientfield = "quest_state2"; - staff_lightning.quest_clientfield = "quest_state3"; - staff_water.quest_clientfield = "quest_state4"; - staff_fire.enum = 1; - staff_air.enum = 2; - staff_lightning.enum = 3; - staff_water.enum = 4; - level.a_elemental_staffs = []; - level.a_elemental_staffs[ level.a_elemental_staffs.size ] = staff_air; - level.a_elemental_staffs[ level.a_elemental_staffs.size ] = staff_fire; - level.a_elemental_staffs[ level.a_elemental_staffs.size ] = staff_lightning; - level.a_elemental_staffs[ level.a_elemental_staffs.size ] = staff_water; - foreach ( staff in level.a_elemental_staffs ) - { - staff.charger.charges_received = 0; - staff.charger.is_inserted = 0; - staff thread place_staffs_encasement(); - staff thread staff_charger_check(); - staff ghost(); - } - staff_air_upgraded = getent( "prop_staff_air_upgraded", "targetname" ); - staff_fire_upgraded = getent( "prop_staff_fire_upgraded", "targetname" ); - staff_lightning_upgraded = getent( "prop_staff_lightning_upgraded", "targetname" ); - staff_water_upgraded = getent( "prop_staff_water_upgraded", "targetname" ); - staff_air_upgraded.weapname = "staff_air_upgraded_zm"; - staff_fire_upgraded.weapname = "staff_fire_upgraded_zm"; - staff_lightning_upgraded.weapname = "staff_lightning_upgraded_zm"; - staff_water_upgraded.weapname = "staff_water_upgraded_zm"; - staff_air_upgraded.melee = "staff_air_melee_zm"; - staff_fire_upgraded.melee = "staff_fire_melee_zm"; - staff_lightning_upgraded.melee = "staff_lightning_melee_zm"; - staff_water_upgraded.melee = "staff_water_melee_zm"; - staff_air_upgraded.base_weapname = "staff_air_zm"; - staff_fire_upgraded.base_weapname = "staff_fire_zm"; - staff_lightning_upgraded.base_weapname = "staff_lightning_zm"; - staff_water_upgraded.base_weapname = "staff_water_zm"; - staff_air_upgraded.element = "air"; - staff_fire_upgraded.element = "fire"; - staff_lightning_upgraded.element = "lightning"; - staff_water_upgraded.element = "water"; - staff_air_upgraded.charger = staff_air.charger; - staff_fire_upgraded.charger = staff_fire.charger; - staff_lightning_upgraded.charger = staff_lightning.charger; - staff_water_upgraded.charger = staff_water.charger; - staff_fire_upgraded.enum = 1; - staff_air_upgraded.enum = 2; - staff_lightning_upgraded.enum = 3; - staff_water_upgraded.enum = 4; - staff_air.upgrade = staff_air_upgraded; - staff_fire.upgrade = staff_fire_upgraded; - staff_water.upgrade = staff_water_upgraded; - staff_lightning.upgrade = staff_lightning_upgraded; - level.a_elemental_staffs_upgraded = []; - level.a_elemental_staffs_upgraded[ level.a_elemental_staffs_upgraded.size ] = staff_air_upgraded; - level.a_elemental_staffs_upgraded[ level.a_elemental_staffs_upgraded.size ] = staff_fire_upgraded; - level.a_elemental_staffs_upgraded[ level.a_elemental_staffs_upgraded.size ] = staff_lightning_upgraded; - level.a_elemental_staffs_upgraded[ level.a_elemental_staffs_upgraded.size ] = staff_water_upgraded; - foreach ( staff_upgraded in level.a_elemental_staffs_upgraded ) - { - staff_upgraded.charger.charges_received = 0; - staff_upgraded.charger.is_inserted = 0; - staff_upgraded.charger.is_charged = 0; - staff_upgraded.prev_ammo_clip = weaponclipsize( staff_upgraded.weapname ); - staff_upgraded.prev_ammo_stock = weaponmaxammo( staff_upgraded.weapname ); - staff_upgraded thread place_staffs_encasement(); - staff_upgraded ghost(); - } - foreach ( staff in level.a_elemental_staffs ) - { - staff.prev_ammo_clip = weaponclipsize( staff_upgraded.weapname ); - staff.prev_ammo_stock = weaponmaxammo( staff_upgraded.weapname ); - staff.upgrade.downgrade = staff; - staff.upgrade useweaponmodel( staff.weapname ); - staff.upgrade showallparts(); - } - level.staffs_charged = 0; - array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_spawn_func ); - level thread watch_for_staff_upgrades(); - level thread chambers_init(); - level thread maps/mp/zm_tomb_quest_air::main(); - level thread maps/mp/zm_tomb_quest_fire::main(); - level thread maps/mp/zm_tomb_quest_ice::main(); - level thread maps/mp/zm_tomb_quest_elec::main(); - level thread maps/mp/zm_tomb_quest_crypt::main(); - level thread maps/mp/zm_tomb_chamber::main(); - level thread maps/mp/zm_tomb_vo::watch_occasional_line( "puzzle", "puzzle_confused", "vo_puzzle_confused" ); - level thread maps/mp/zm_tomb_vo::watch_occasional_line( "puzzle", "puzzle_good", "vo_puzzle_good" ); - level thread maps/mp/zm_tomb_vo::watch_occasional_line( "puzzle", "puzzle_bad", "vo_puzzle_bad" ); - level thread maps/mp/zm_tomb_vo::watch_one_shot_samantha_clue( "vox_sam_ice_staff_clue_0", "sam_clue_dig", "elemental_staff_water_all_pieces_found" ); - level thread maps/mp/zm_tomb_vo::watch_one_shot_samantha_clue( "vox_sam_fire_staff_clue_0", "sam_clue_mechz", "mechz_killed" ); - level thread maps/mp/zm_tomb_vo::watch_one_shot_samantha_clue( "vox_sam_fire_staff_clue_1", "sam_clue_biplane", "biplane_down" ); - level thread maps/mp/zm_tomb_vo::watch_one_shot_samantha_clue( "vox_sam_fire_staff_clue_2", "sam_clue_zonecap", "staff_piece_capture_complete" ); - level thread maps/mp/zm_tomb_vo::watch_one_shot_samantha_clue( "vox_sam_lightning_staff_clue_0", "sam_clue_tank", "elemental_staff_lightning_all_pieces_found" ); - level thread maps/mp/zm_tomb_vo::watch_one_shot_samantha_clue( "vox_sam_wind_staff_clue_0", "sam_clue_giant", "elemental_staff_air_all_pieces_found" ); - level.dig_spawners = getentarray( "zombie_spawner_dig", "script_noteworthy" ); - array_thread( level.dig_spawners, ::add_spawn_function, ::dug_zombie_spawn_init ); -} - -onplayerconnect() //checked matches cerberus output -{ -} - -player_disconnect_callback( player ) //checked matches cerberus output //looks suspicious -{ - n_player = player getentitynumber() + 1; - level delay_thread( 0.5, ::clear_player_staff_by_player_number, n_player ); -} - -clear_player_staff_by_player_number( n_player ) -{ - level setclientfield( "staff_player" + n_player, 0 ); -} - -place_staffs_encasement() //checked matches cerberus output -{ - s_pos = getstruct( "staff_pos_" + self.element, "targetname" ); - self.origin = s_pos.origin; - self.angles = s_pos.angles; -} - -chambers_init() //checked matches cerberus output -{ - flag_init( "gramophone_placed" ); - array_thread( getentarray( "trigger_death_floor", "targetname" ), ::monitor_chamber_death_trigs ); - a_stargate_gramophones = getstructarray( "stargate_gramophone_pos", "targetname" ); - array_thread( a_stargate_gramophones, ::run_gramophone_teleporter ); - a_door_main = getentarray( "chamber_entrance", "targetname" ); - array_thread( a_door_main, ::run_gramophone_door, "vinyl_master" ); -} - -monitor_chamber_death_trigs() //checked matches cerberus output -{ - while ( 1 ) - { - self waittill( "trigger", ent ); - if ( isplayer( ent ) ) - { - ent.bleedout_time = 0; - } - ent dodamage( ent.health + 666, ent.origin ); - wait 0.05; - } -} - -watch_gramophone_vinyl_pickup() //checked matches cerberus output -{ - str_vinyl_record = "vinyl_main"; - switch( self.script_int ) - { - case 1: - str_vinyl_record = "vinyl_fire"; - break; - case 2: - str_vinyl_record = "vinyl_air"; - break; - case 3: - str_vinyl_record = "vinyl_elec"; - break; - case 4: - str_vinyl_record = "vinyl_ice"; - break; - default: - str_vinyl_record = "vinyl_master"; - break; - } - level waittill( "gramophone_" + str_vinyl_record + "_picked_up" ); - self.has_vinyl = 1; -} - -get_gramophone_song() //checked changed to match cerberus output -{ - switch( self.script_int ) - { - case 1: - return "mus_gramophone_fire"; - case 2: - return "mus_gramophone_air"; - case 3: - return "mus_gramophone_electric"; - case 4: - return "mus_gramophone_ice"; - default: - return "mus_gramophone_electric"; - } -} - -run_gramophone_teleporter( str_vinyl_record ) //checked changed to match cerberus output -{ - self.has_vinyl = 0; - self.gramophone_model = undefined; - self thread watch_gramophone_vinyl_pickup(); - t_gramophone = tomb_spawn_trigger_radius( self.origin, 60, 1 ); - t_gramophone set_unitrigger_hint_string( &"ZOMBIE_BUILD_PIECE_MORE" ); - level waittill( "gramophone_vinyl_player_picked_up" ); - str_craftablename = "gramophone"; - t_gramophone set_unitrigger_hint_string( &"ZM_TOMB_RU" ); - while ( !self.has_vinyl ) - { - wait 0.05; - } - t_gramophone set_unitrigger_hint_string( &"ZM_TOMB_PLGR" ); - while ( 1 ) - { - t_gramophone waittill( "trigger", player ); - if ( !isDefined( self.gramophone_model ) ) - { - if ( !flag( "gramophone_placed" ) ) - { - self.gramophone_model = spawn( "script_model", self.origin ); - self.gramophone_model.angles = self.angles; - self.gramophone_model setmodel( "p6_zm_tm_gramophone" ); - level setclientfield( "piece_record_zm_player", 0 ); - flag_set( "gramophone_placed" ); - t_gramophone set_unitrigger_hint_string( "" ); - t_gramophone trigger_off(); - str_song_id = self get_gramophone_song(); - self.gramophone_model playsound( str_song_id ); - player thread maps/mp/zm_tomb_vo::play_gramophone_place_vo(); - maps/mp/zm_tomb_teleporter::stargate_teleport_enable( self.script_int ); - flag_wait( "teleporter_building_" + self.script_int ); - flag_waitopen( "teleporter_building_" + self.script_int ); - t_gramophone trigger_on(); - t_gramophone set_unitrigger_hint_string( &"ZM_TOMB_PUGR" ); - if ( isDefined( self.script_flag ) ) - { - flag_set( self.script_flag ); - } - } - else - { - player door_gramophone_elsewhere_hint(); - } - } - else - { - self.gramophone_model delete(); - self.gramophone_model = undefined; - player playsound( "zmb_craftable_pickup" ); - flag_clear( "gramophone_placed" ); - level setclientfield( "piece_record_zm_player", 1 ); - maps/mp/zm_tomb_teleporter::stargate_teleport_disable( self.script_int ); - t_gramophone set_unitrigger_hint_string( &"ZM_TOMB_PLGR" ); - } - } -} - -door_watch_open_sesame() //checked changed to match cerberus output -{ - /* -/# - level waittill_any( "open_sesame", "open_all_gramophone_doors" ); - self.has_vinyl = 1; - level.b_open_all_gramophone_doors = 1; - wait 0.5; - if ( isDefined( self.trigger ) ) - { - self.trigger notify( "trigger", getplayers()[0] ); -#/ - } - */ -} - -run_gramophone_door( str_vinyl_record ) //checked changed to match cerberus output -{ - flag_init( self.targetname + "_opened" ); - trig_position = getstruct( self.targetname + "_position", "targetname" ); - trig_position.has_vinyl = 0; - trig_position.gramophone_model = undefined; - trig_position thread watch_gramophone_vinyl_pickup(); - trig_position thread door_watch_open_sesame(); - t_door = tomb_spawn_trigger_radius( trig_position.origin, 60, 1 ); - t_door set_unitrigger_hint_string( &"ZOMBIE_BUILD_PIECE_MORE" ); - level waittill_any( "gramophone_vinyl_player_picked_up", "open_sesame", "open_all_gramophone_doors" ); - str_craftablename = "gramophone"; - t_door set_unitrigger_hint_string( &"ZM_TOMB_RU" ); - trig_position.trigger = t_door; - while ( !trig_position.has_vinyl ) - { - wait 0.05; - } - t_door set_unitrigger_hint_string( &"ZM_TOMB_PLGR" ); - while ( 1 ) - { - t_door waittill( "trigger", player ); - if ( !isDefined( trig_position.gramophone_model ) ) - { - if ( !flag( "gramophone_placed" ) || isDefined( level.b_open_all_gramophone_doors ) && level.b_open_all_gramophone_doors ) - { - if ( isDefined( level.b_open_all_gramophone_doors ) && !level.b_open_all_gramophone_doors ) - { - trig_position.gramophone_model = spawn( "script_model", trig_position.origin ); - trig_position.gramophone_model.angles = trig_position.angles; - trig_position.gramophone_model setmodel( "p6_zm_tm_gramophone" ); - flag_set( "gramophone_placed" ); - level setclientfield( "piece_record_zm_player", 0 ); - } - t_door trigger_off(); - str_song = trig_position get_gramophone_song(); - playsoundatposition( str_song, self.origin ); - self playsound( "zmb_crypt_stairs" ); - wait 6; - chamber_blocker(); - flag_set( self.targetname + "_opened" ); - if ( isDefined( trig_position.script_flag ) ) - { - flag_set( trig_position.script_flag ); - } - level setclientfield( "crypt_open_exploder", 1 ); - self movez( -260, 10, 1, 1 ); - self waittill( "movedone" ); - self connectpaths(); - self delete(); - t_door trigger_on(); - t_door set_unitrigger_hint_string( &"ZM_TOMB_PUGR" ); - if ( isDefined( level.b_open_all_gramophone_doors ) && level.b_open_all_gramophone_doors ) - { - break; - } - } - else - { - player door_gramophone_elsewhere_hint(); - } - } - else - { - trig_position.gramophone_model delete(); - trig_position.gramophone_model = undefined; - flag_clear( "gramophone_placed" ); - player playsound( "zmb_craftable_pickup" ); - level setclientfield( "piece_record_zm_player", 1 ); - break; - } - } - t_door tomb_unitrigger_delete(); - trig_position.trigger = undefined; -} - -chamber_blocker() //checked matches cerberus output -{ - a_blockers = getentarray( "junk_nml_chamber", "targetname" ); - m_blocker = getent( "junk_nml_chamber", "targetname" ); - s_blocker_end = getstruct( m_blocker.script_linkto, "script_linkname" ); - m_blocker thread maps/mp/zombies/_zm_blockers::debris_move( s_blocker_end ); - m_blocker_clip = getent( "junk_nml_chamber_clip", "targetname" ); - m_blocker_clip connectpaths(); - m_blocker waittill( "movedone" ); - m_blocker_clip delete(); -} - -watch_for_staff_upgrades() //checked changed to match cerberus output -{ - foreach ( staff in level.a_elemental_staffs ) - { - staff thread staff_upgrade_watch(); - } -} - -staff_upgrade_watch() //checked matches cerberus output -{ - flag_wait( self.weapname + "_upgrade_unlocked" ); - self thread place_staff_in_charger(); -} - -staff_get_pickup_message() //checked changed to match cerberus output -{ - if ( self.element == "air" ) - { - return &"ZM_TOMB_PUAS"; - } - else if ( self.element == "fire" ) - { - return &"ZM_TOMB_PUFS"; - } - else if ( self.element == "lightning" ) - { - return &"ZM_TOMB_PULS"; - } - else - { - return &"ZM_TOMB_PUIS"; - } -} - -staff_get_insert_message() //checked changed to match cerberus output -{ - if ( self.element == "air" ) - { - return &"ZM_TOMB_INAS"; - } - else if ( self.element == "fire" ) - { - return &"ZM_TOMB_INFS"; - } - else if ( self.element == "lightning" ) - { - return &"ZM_TOMB_INLS"; - } - else - { - return &"ZM_TOMB_INWS"; - } -} - -player_has_staff() //checked changed to match cerberus output -{ - a_weapons = self getweaponslistprimaries(); - foreach ( weapon in a_weapons ) - { - if ( issubstr( weapon, "staff" ) ) - { - return 1; - } - } - return 0; -} - -can_pickup_staff() //checked changed at own discretion -{ - b_has_staff = self player_has_staff(); - b_staff_equipped = issubstr( self getcurrentweapon(), "staff" ); - if ( b_has_staff && !b_staff_equipped ) - { - self thread swap_staff_hint(); - } - if ( !b_has_staff ) - { - return b_has_staff; - } - else - { - return b_staff_equipped; - } -} - -watch_for_player_pickup_staff() //checked changed to match cerberus output -{ - staff_picked_up = 0; - pickup_message = self staff_get_pickup_message(); - self.trigger set_unitrigger_hint_string( pickup_message ); - self show(); - self.trigger trigger_on(); - while ( !staff_picked_up ) - { - self.trigger waittill( "trigger", player ); - self notify( "retrieved", player ); - if ( player can_pickup_staff() ) - { - weapon_drop = player getcurrentweapon(); - a_weapons = player getweaponslistprimaries(); - n_max_other_weapons = get_player_weapon_limit( player ) - 1; - if ( a_weapons.size > n_max_other_weapons || issubstr( weapon_drop, "staff" ) ) - { - player takeweapon( weapon_drop ); - } - player thread watch_staff_ammo_reload(); - self ghost(); - self setinvisibletoall(); - player giveweapon( self.weapname ); - player switchtoweapon( self.weapname ); - clip_size = weaponclipsize( self.weapname ); - player setweaponammoclip( self.weapname, clip_size ); - self.owner = player; - level notify( "stop_staff_sound" ); - self notify( "staff_equip" ); - staff_picked_up = 1; - self.charger.is_inserted = 0; - self setclientfield( "staff_charger", 0 ); - self.charger.full = 1; - maps/mp/zm_tomb_craftables::set_player_staff( self.weapname, player ); - } - } -} - -watch_staff_ammo_reload() //checked changed to match cerberus output -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "zmb_max_ammo" ); - a_weapons = self getweaponslistprimaries(); - foreach ( weapon in a_weapons ) - { - if ( issubstr( weapon, "staff" ) ) - { - self setweaponammoclip( weapon, weaponmaxammo( weapon ) ); - } - } - } -} - -rotate_forever( rotate_time ) //checked matches cerberus output -{ - if ( !isDefined( rotate_time ) ) - { - rotate_time = 20; - } - self endon( "death" ); - while ( 1 ) - { - self rotateyaw( 360, 20, 0, 0 ); - self waittill( "rotatedone" ); - } -} - -staff_crystal_wait_for_teleport( n_element_enum ) //checked partially changed to match cerberus output changed at own discretion -{ - flag_init( "charger_ready_" + n_element_enum ); - self craftable_waittill_spawned(); - self.origin = self.piecespawn.model.origin; - self.piecespawn.model ghost(); - self.piecespawn.model movez( -1000, 0.05 ); - e_plinth = getent( "crystal_plinth" + n_element_enum, "targetname" ); - e_plinth.v_start = e_plinth.origin; - e_plinth.v_start = ( e_plinth.v_start[ 0 ], e_plinth.v_start[ 1 ], e_plinth.origin[ 2 ] - 78 ); - e_plinth.v_crystal = e_plinth.origin; - e_plinth.v_crystal = ( e_plinth.v_crystal[ 0 ], e_plinth.v_crystal[ 1 ], e_plinth.origin[ 2 ] - 40 ); - e_plinth.v_staff = e_plinth.origin; - e_plinth.v_staff = ( e_plinth.v_staff[ 0 ], e_plinth.v_staff[ 1 ], e_plinth.origin[ 2 ] + 15 ); - e_plinth moveto( e_plinth.v_start, 0,05 ); - while ( 1 ) - { - level waittill( "player_teleported", e_player, n_teleport_enum ); - if ( n_teleport_enum == n_element_enum ) - { - break; - } - } - e_plinth moveto( e_plinth.v_crystal, 6 ); - e_plinth thread sndmoveplinth( 6 ); - lookat_dot = cos( 90 ); - dist_sq = 250000; - lookat_time = 0; - while ( lookat_time < 1 && isDefined( self.piecespawn.model ) ) - { - wait 0.1; - if ( !isDefined( self.piecespawn.model ) ) - { - continue; - } - if ( self.piecespawn.model any_player_looking_at_plinth( lookat_dot, dist_sq ) ) - { - lookat_time += 0.1; - } - else - { - lookat_time = 0; - } - } - if ( isDefined( self.piecespawn.model ) ) - { - self.piecespawn.model movez( 985, 0.05 ); - self.piecespawn.model waittill( "movedone" ); - self.piecespawn.model show(); - self.piecespawn.model thread rotate_forever(); - self.piecespawn.model movez( 15, 2 ); - self.piecespawn.model playloopsound( "zmb_squest_crystal_loop", 4.25 ); - } - flag_wait( "charger_ready_" + n_element_enum ); - while ( !maps/mp/zm_tomb_chamber::is_chamber_occupied() ) - { - wait_network_frame(); - } - e_plinth moveto( e_plinth.v_staff, 3 ); - e_plinth thread sndmoveplinth( 3 ); - e_plinth waittill( "movedone" ); -} - -sndmoveplinth( time ) //checked matches cerberus output -{ - self notify( "sndMovePlinth" ); - self endon( "sndMovePlinth" ); - self playloopsound( "zmb_chamber_plinth_move", 0.25 ); - wait time; - self stoploopsound( 0.1 ); - self playsound( "zmb_chamber_plinth_stop" ); -} - -staff_mechz_drop_pieces( s_piece ) //checked changed to match cerberus output -{ - s_piece craftable_waittill_spawned(); - s_piece.piecespawn.model ghost(); - for ( i = 0; i < 1; i++ ) - { - level waittill("mechz_killed", origin); - } - s_piece.piecespawn.canmove = 1; - maps/mp/zombies/_zm_unitrigger::reregister_unitrigger_as_dynamic( s_piece.piecespawn.unitrigger ); - origin = groundpos_ignore_water_new( origin + vectorScale( ( 0, 0, 1 ), 40 ) ); - s_piece.piecespawn.model moveto( origin + vectorScale( ( 0, 0, 1 ), 32 ), 0.05 ); - s_piece.piecespawn.model waittill( "movedone" ); - if ( isDefined( s_piece.piecespawn.model ) ) - { - s_piece.piecespawn.model show(); - s_piece.piecespawn.model notify( "staff_piece_glow" ); - s_piece.piecespawn.model thread mechz_staff_piece_failsafe(); - } -} - -mechz_staff_piece_failsafe() //checked changed to match cerberus output -{ - min_dist_sq = 1000000; - self endon( "death" ); - wait 120; - while ( 1 ) - { - a_players = getplayers(); - b_anyone_near = 0; - foreach ( e_player in a_players ) - { - dist_sq = distance2dsquared( e_player.origin, self.origin ); - if ( dist_sq < min_dist_sq ) - { - b_anyone_near = 1; - } - } - if ( !b_anyone_near ) - { - break; - } - wait 1; - } - a_locations = getstructarray( "mechz_location", "script_noteworthy" ); - s_location = get_closest_2d( self.origin, a_locations ); - self moveto( s_location.origin + vectorScale( ( 0, 0, 1 ), 32 ), 3 ); -} - -biplane_clue() //checked changed to match cerberus output -{ - self endon( "death" ); - level endon( "biplane_down" ); - while ( 1 ) - { - cur_round = level.round_number; - while ( level.round_number == cur_round ) - { - wait 1; - } - wait randomfloatrange( 5, 15 ); - a_players = getplayers(); - foreach ( e_player in a_players ) - { - level notify( "sam_clue_biplane" ); - } - } -} - -staff_biplane_drop_pieces( a_staff_pieces ) //checked changed to match cerberus output -{ - foreach ( staff_piece in a_staff_pieces ) - { - staff_piece craftable_waittill_spawned(); - staff_piece.origin = staff_piece.piecespawn.model.origin; - staff_piece.piecespawn.model notify( "staff_piece_glow" ); - staff_piece.piecespawn.model ghost(); - staff_piece.piecespawn.model movez( -500, 0.05 ); - } - flag_wait( "activate_zone_village_0" ); - cur_round = level.round_number; - while ( level.round_number == cur_round ) - { - wait 1; - } - s_biplane_pos = getstruct( "air_crystal_biplane_pos", "targetname" ); - vh_biplane = spawnvehicle( "veh_t6_dlc_zm_biplane", "air_crystal_biplane", "biplane_zm", s_biplane_pos.origin, s_biplane_pos.angles ); - vh_biplane ent_flag_init( "biplane_down", 0 ); - vh_biplane thread biplane_clue(); - e_fx_tag = getent( "air_crystal_biplane_tag", "targetname" ); - e_fx_tag moveto( vh_biplane.origin, 0.05 ); - e_fx_tag waittill( "movedone" ); - e_fx_tag linkto( vh_biplane, "tag_origin" ); - vh_biplane.health = 10000; - vh_biplane setcandamage( 1 ); - vh_biplane setforcenocull(); - vh_biplane attachpath( getvehiclenode( "biplane_start", "targetname" ) ); - vh_biplane startpath(); - s_biplane_pos structdelete(); - e_fx_tag setclientfield( "element_glow_fx", 1 ); - vh_biplane ent_flag_wait( "biplane_down" ); - vh_biplane playsound( "zmb_zombieblood_3rd_plane_explode" ); - foreach ( staff_piece in a_staff_pieces ) - { - staff_piece.e_fx = spawn( "script_model", e_fx_tag.origin ); - staff_piece.e_fx setmodel( "tag_origin" ); - staff_piece.e_fx setclientfield( "element_glow_fx", 1 ); - staff_piece.e_fx moveto( staff_piece.origin, 5 ); - } - playfx( level._effect[ "biplane_explode" ], vh_biplane.origin ); - vh_biplane delete(); - e_fx_tag delete(); - a_staff_pieces[ 0 ].e_fx waittill( "movedone" ); - foreach ( staff_piece in a_staff_pieces ) - { - staff_piece.e_fx delete(); - staff_piece.piecespawn.model show(); - staff_piece.piecespawn.model movez( 500, 0.05 ); - staff_piece.piecespawn.model waittill( "movedone" ); - } -} - -aircrystalbiplanecallback_vehicledamage( e_inflictor, e_attacker, n_damage, n_dflags, str_means_of_death, str_weapon, v_point, v_dir, str_hit_loc, psoffsettime, b_damage_from_underneath, n_model_index, str_part_name ) //checked matches cerberus output -{ - if ( isplayer( e_attacker ) && self.vehicletype == "biplane_zm" && !self ent_flag( "biplane_down" ) ) - { - self ent_flag_set( "biplane_down" ); - level notify( "biplane_down" ); - } - return n_damage; -} - -zone_capture_clue( str_zone ) //checked changed to match cerberus output -{ - level endon( "staff_piece_capture_complete" ); - while ( 1 ) - { - wait 5; - while ( !level.zones[ str_zone ].is_occupied ) - { - wait 1; - } - a_players = getplayers(); - foreach ( e_player in a_players ) - { - level notify( "sam_clue_zonecap" ); - } - } -} - -staff_unlock_with_zone_capture( s_staff_piece ) //checked changed to match cerberus output -{ - flag_wait( "start_zombie_round_logic" ); - s_staff_piece craftable_waittill_spawned(); - str_zone = maps/mp/zombies/_zm_zonemgr::get_zone_from_position( s_staff_piece.piecespawn.model.origin, 1 ); - if ( !isDefined( str_zone ) ) - { - /* -/# - assertmsg( "Zone capture staff piece is not in a zone." ); -#/ - */ - return; - } - level thread zone_capture_clue( str_zone ); - s_staff_piece.piecespawn.model ghost(); - while ( 1 ) - { - level waittill( "zone_captured_by_player", str_captured_zone ); - if ( str_captured_zone == str_zone ) - { - break; - } - } - level notify( "staff_piece_capture_complete" ); - foreach ( uts_box in level.a_uts_challenge_boxes ) - { - if ( uts_box.str_location == "church_capture" ) - { - uts_box.s_staff_piece = s_staff_piece; - level thread maps/mp/zombies/_zm_challenges::open_box( undefined, uts_box, ::reward_staff_piece ); - return; - } - } -} - -reward_staff_piece( player, s_stat ) //checked changed to match cerberus output -{ - m_piece = spawn( "script_model", self.origin ); - m_piece.angles = self.angles + vectorScale( ( 0, 1, 0 ), 180 ); - m_piece setmodel( "t6_wpn_zmb_staff_tip_fire_world" ); - m_piece.origin = self.origin; - m_piece.angles = self.angles + vectorScale( ( 0, 1, 0 ), 90 ); - m_piece setclientfield( "element_glow_fx", 1 ); - wait_network_frame(); - if ( !reward_rise_and_grab( m_piece, 50, 2, 2, -1 ) ) - { - return 0; - } - n_dist = 9999; - a_players = getplayers(); - a_players = get_array_of_closest( self.m_box.origin, a_players ); - if ( isDefined( a_players[ 0 ] ) ) - { - a_players[ 0 ] maps/mp/zombies/_zm_craftables::player_take_piece( self.s_staff_piece.piecespawn ); - } - m_piece delete(); - return 1; -} - -dig_spot_get_staff_piece( e_player ) //checked changed to match cerberus output -{ - level notify( "sam_clue_dig" ); - str_zone = self.str_zone; - foreach ( s_staff in level.ice_staff_pieces ) - { - if ( !isDefined( s_staff.num_misses ) ) - { - s_staff.num_misses = 0; - } - if ( issubstr( str_zone, s_staff.zone_substr ) ) - { - miss_chance = 100 / ( s_staff.num_misses + 1 ); - if ( level.weather_snow <= 0 ) - { - miss_chance = 101; - } - if ( randomint( 100 ) > miss_chance || s_staff.num_misses > 3 && miss_chance < 100 ) - { - return s_staff; - } - else - { - s_staff.num_misses++; - break; - } - } - } - return undefined; -} - -show_ice_staff_piece( origin ) //checked matches cerberus output -{ - arrayremovevalue( level.ice_staff_pieces, self ); - wait 0.5; - self.piecespawn.canmove = 1; - maps/mp/zombies/_zm_unitrigger::reregister_unitrigger_as_dynamic( self.piecespawn.unitrigger ); - vert_offset = 32; - self.piecespawn.model moveto( origin + ( 0, 0, vert_offset ), 0.05 ); - self.piecespawn.model waittill( "movedone" ); - self.piecespawn.model showindemo(); - self.piecespawn.model show(); - self.piecespawn.model notify( "staff_piece_glow" ); - self.piecespawn.model playsound( "evt_staff_digup" ); - self.piecespawn.model playloopsound( "evt_staff_digup_lp" ); -} - -staff_ice_dig_pieces( a_staff_pieces ) //checked changed to match cerberus output -{ - flag_wait( "start_zombie_round_logic" ); - level.ice_staff_pieces = arraycopy( a_staff_pieces ); - foreach ( s_piece in level.ice_staff_pieces ) - { - s_piece craftable_waittill_spawned(); - s_piece.piecespawn.model ghost(); - } - level.ice_staff_pieces[ 0 ].zone_substr = "bunker"; - level.ice_staff_pieces[ 1 ].zone_substr = "nml"; - level.ice_staff_pieces[ 2 ].zone_substr = "village"; - level.ice_staff_pieces[ 2 ].num_misses = 2; -} - -crystal_play_glow_fx( s_crystal ) //checked matches cerberus output -{ - flag_wait( "start_zombie_round_logic" ); - switch( s_crystal.modelname ) - { - case "t6_wpn_zmb_staff_crystal_air_part": - watch_for_crystal_pickup( s_crystal, 2 ); - break; - case "t6_wpn_zmb_staff_crystal_fire_part": - watch_for_crystal_pickup( s_crystal, 1 ); - break; - case "t6_wpn_zmb_staff_crystal_bolt_part": - watch_for_crystal_pickup( s_crystal, 3 ); - break; - case "t6_wpn_zmb_staff_crystal_water_part": - watch_for_crystal_pickup( s_crystal, 4 ); - break; - } -} - -watch_for_crystal_pickup( s_crystal, n_enum ) //checked matches cerberus output -{ - s_crystal.piecespawn.model setclientfield( "element_glow_fx", n_enum ); - s_crystal.piecespawn waittill( "pickup" ); - self playsound( "evt_crystal" ); - level.n_crystals_pickedup++; -} - -crystal_dropped( s_crystal ) //checked matches cerberus output -{ - flag_wait( "start_zombie_round_logic" ); - s_crystal.piecespawn waittill( "piece_released" ); - level.n_crystals_pickedup--; - - level thread crystal_play_glow_fx( s_crystal ); -} - -staff_charger_get_player_msg( e_player ) //checked changed to match cerberus output -{ - weapon_available = 1; - charge_ready = 0; - if ( self.stub.staff_data.charger.is_inserted ) - { - if ( self.stub.staff_data.charger.is_charged ) - { - charge_ready = 1; - } - } - if ( e_player hasweapon( self.stub.staff_data.weapname ) ) - { - msg = self.stub.staff_data staff_get_insert_message(); - return msg; - } - else if ( charge_ready ) - { - msg = self.stub.staff_data staff_get_pickup_message(); - return msg; - } - else - { - return ""; - } -} - -place_staff_in_charger() //checked matches cerberus output -{ - flag_set( "charger_ready_" + self.enum ); - v_trigger_pos = self.charger.origin; - v_trigger_pos = ( v_trigger_pos[ 0 ], v_trigger_pos[ 1 ], v_trigger_pos[ 2 ] - 30 ); - if ( isDefined( self.charge_trigger ) ) - { - self.charge_trigger tomb_unitrigger_delete(); - } - self.charge_trigger = tomb_spawn_trigger_radius( v_trigger_pos, 120, 1, ::staff_charger_get_player_msg ); - self.charge_trigger.require_look_at = 1; - self.charge_trigger.staff_data = self; - waittill_staff_inserted(); -} - -debug_staff_charge() //checked changed to match cerberus output -{ - /* -/# - if ( !isDefined( self.charger.charges_received ) ) - { - self.charger.charges_received = 0; - } - while ( self.charger.is_inserted ) - { - if ( self.charger.is_charged ) - { - maxammo = weaponmaxammo( self.weapname ); - if ( !isDefined( self.prev_ammo_stock ) ) - { - self.prev_ammo_stock = maxammo; - } - print3d( self.origin, ( self.prev_ammo_stock + "/" ) + maxammo, vectorScale( ( 1, 1, 1 ), 255 ), 1 ); - } - else - { - print3d( self.origin, ( self.charger.charges_received + "/" ) + 20, vectorScale( ( 1, 1, 1 ), 255 ), 1 ); - } - wait 0.05; -#/ - } - */ -} - -waittill_staff_inserted() //checked matches cerberus output -{ - while ( 1 ) - { - self.charge_trigger waittill( "trigger", player ); - weapon_available = 1; - if ( isDefined( player ) ) - { - weapon_available = player hasweapon( self.weapname ); - if ( weapon_available ) - { - player takeweapon( self.weapname ); - } - } - if ( weapon_available ) - { - self.charger.is_inserted = 1; - self thread debug_staff_charge(); - maps/mp/zm_tomb_craftables::clear_player_staff( self.weapname ); - self.charge_trigger trigger_off(); - if ( isDefined( self.charger.angles ) ) - { - self.angles = self.charger.angles; - } - self moveto( self.charger.origin, 0.05 ); - self waittill( "movedone" ); - self setclientfield( "staff_charger", self.enum ); - self.charger.full = 0; - self show(); - self playsound( "zmb_squest_charge_place_staff" ); - return; - } - } -} - -zombie_spawn_func() //checked matches cerberus output -{ - self.actor_killed_override = ::zombie_killed_override; -} - -zombie_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) //checked partially changed to match cerberus output see info.md -{ - if ( flag( "ee_sam_portal_active" ) && !flag( "ee_souls_absorbed" ) ) - { - maps/mp/zm_tomb_ee_main_step_7::ee_zombie_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ); - return; - } - if ( maps/mp/zm_tomb_challenges::footprint_zombie_killed( attacker ) ) - { - return; - } - n_max_dist_sq = 9000000; - if ( isplayer( attacker ) || sweapon == "one_inch_punch_zm" ) - { - if ( !flag( "fire_puzzle_1_complete" ) ) - { - maps/mp/zm_tomb_quest_fire::sacrifice_puzzle_zombie_killed( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ); - } - s_nearest_staff = undefined; - n_nearest_dist_sq = n_max_dist_sq; - foreach ( staff in level.a_elemental_staffs ) - { - if ( isDefined( staff.charger.full ) && staff.charger.full ) - { - } - else - { - if ( staff.charger.is_inserted || staff.upgrade.charger.is_inserted ) - { - if ( isDefined( staff.charger.is_charged ) && !staff.charger.is_charged ) - { - dist_sq = distance2dsquared( self.origin, staff.origin ); - if ( dist_sq <= n_nearest_dist_sq ) - { - n_nearest_dist_sq = dist_sq; - s_nearest_staff = staff; - } - } - } - } - } - if ( isDefined( s_nearest_staff ) ) - { - if ( s_nearest_staff.charger.is_charged ) - { - return; - } - else - { - s_nearest_staff.charger.charges_received++; - s_nearest_staff.charger thread zombie_soul_to_charger( self, s_nearest_staff.enum ); - } - } - } -} - -zombie_soul_to_charger( ai_zombie, n_element ) //checked matches cerberus output -{ - ai_zombie setclientfield( "zombie_soul", 1 ); - wait 1.5; - self notify( "soul_received" ); -} - -staff_charger_check() //checked changed to match cerberus output -{ - self.charger.is_charged = 0; - flag_wait( self.weapname + "_upgrade_unlocked" ); - self useweaponmodel( self.weapname ); - self showallparts(); - while ( 1 ) - { - if ( self.charger.charges_received >= 20 || getDvarInt( "zombie_cheat" ) >= 2 && self.charger.is_inserted ) - { - wait 0.5; - self.charger.is_charged = 1; - e_player = get_closest_player( self.charger.origin ); - e_player thread maps/mp/zm_tomb_vo::say_puzzle_completion_line( self.enum ); - self setclientfield( "staff_charger", 0 ); - self.charger.full = 1; - level setclientfield( self.quest_clientfield, 4 ); - level thread spawn_upgraded_staff_triggers( self.enum ); - level.staffs_charged++; - if ( level.staffs_charged == 4 ) - { - flag_set( "ee_all_staffs_upgraded" ); - } - self thread staff_sound(); - return; - } - wait 1; - } -} - -staff_sound() //checked matches cerberus output -{ - self thread sndstaffupgradedstinger(); - self playsound( "zmb_squest_charge_soul_full" ); - self playloopsound( "zmb_squest_charge_soul_full_loop", 0.1 ); - level waittill( "stop_staff_sound" ); - self stoploopsound( 0.1 ); -} - -sndstaffupgradedstinger() //checked matches cerberus output -{ - if ( level.staffs_charged == 4 ) - { - level thread maps/mp/zm_tomb_amb::sndplaystingerwithoverride( "mus_event_staff_all_upgraded", 55 ); - return; - } - if ( self.weapname == "staff_air_zm" ) - { - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "staff_wind_upgraded" ); - } - if ( self.weapname == "staff_fire_zm" ) - { - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "staff_fire_upgraded" ); - } - if ( self.weapname == "staff_lightning_zm" ) - { - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "staff_lightning_upgraded" ); - } - if ( self.weapname == "staff_water_zm" ) - { - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "staff_ice_upgraded" ); - } -} - -spawn_upgraded_staff_triggers( n_index ) //checked changed to match cerberus output -{ - e_staff_standard = get_staff_info_from_element_index( n_index ); - e_staff_standard_upgraded = e_staff_standard.upgrade; - e_staff_standard.charge_trigger trigger_on(); - e_staff_standard.charge_trigger.require_look_at = 1; - pickup_message = e_staff_standard staff_get_pickup_message(); - e_staff_standard.charge_trigger set_unitrigger_hint_string( pickup_message ); - e_staff_standard ghost(); - e_staff_standard_upgraded.trigger = e_staff_standard.charge_trigger; - e_staff_standard_upgraded.angles = e_staff_standard.angles; - e_staff_standard_upgraded moveto( e_staff_standard.origin, 0.05 ); - e_staff_standard_upgraded waittill( "movedone" ); - e_staff_standard_upgraded show(); - e_fx = spawn( "script_model", e_staff_standard_upgraded.origin + vectorScale( ( 0, 0, 1 ), 8 ) ); - e_fx setmodel( "tag_origin" ); - wait 0.6; - e_fx setclientfield( "element_glow_fx", e_staff_standard.enum ); - e_staff_standard_upgraded watch_for_player_pickup_staff(); - e_staff_standard_upgraded.trigger trigger_off(); - player = e_staff_standard_upgraded.owner; - e_fx delete(); - while ( 1 ) - { - if ( e_staff_standard.charger.is_charged ) - { - e_staff_standard_upgraded thread staff_upgraded_reload_monitor(); - break; - } - wait_network_frame(); - } -} - -staff_upgraded_reload_monitor() //checked matches cerberus output -{ - self.weaponname = self.weapname; - self thread track_staff_weapon_respawn( self.owner ); - while ( 1 ) - { - place_staff_in_charger(); - self thread staff_upgraded_reload(); - self watch_for_player_pickup_staff(); - self.trigger trigger_off(); - self.charger.is_inserted = 0; - maxammo = weaponmaxammo( self.weapname ); - n_ammo = int( min( maxammo, self.prev_ammo_stock ) ); - if ( isDefined( self.owner ) ) - { - self.owner setweaponammostock( self.weapname, n_ammo ); - self.owner setweaponammoclip( self.weapname, self.prev_ammo_clip ); - self thread track_staff_weapon_respawn( self.owner ); - } - } -} - -staff_upgraded_reload() //checked matches cerberus output -{ - self endon( "staff_equip" ); - max_ammo = weaponmaxammo( self.weapname ); - n_count = int( max_ammo / 20 ); - b_reloaded = 0; - while ( 1 ) - { - self.charger waittill( "soul_received" ); - self.prev_ammo_stock += n_count; - if ( self.prev_ammo_stock > max_ammo ) - { - self.prev_ammo_stock = max_ammo; - self setclientfield( "staff_charger", 0 ); - self.charger.full = 1; - } - if ( !b_reloaded ) - { - self.trigger trigger_on(); - b_reloaded = 1; - } - } -} - diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_quest_air.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_quest_air.gsc deleted file mode 100644 index d1c39b4..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_quest_air.gsc +++ /dev/null @@ -1,283 +0,0 @@ -#include maps/mp/zm_tomb_vo; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_craftables; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -main() -{ - flag_init( "air_puzzle_1_complete" ); - flag_init( "air_puzzle_2_complete" ); - flag_init( "air_upgrade_available" ); - air_puzzle_1_init(); - air_puzzle_2_init(); - maps/mp/zm_tomb_vo::add_puzzle_completion_line( 2, "vox_sam_wind_puz_solve_1" ); - maps/mp/zm_tomb_vo::add_puzzle_completion_line( 2, "vox_sam_wind_puz_solve_0" ); - maps/mp/zm_tomb_vo::add_puzzle_completion_line( 2, "vox_sam_wind_puz_solve_2" ); - level thread maps/mp/zm_tomb_vo::watch_one_shot_line( "puzzle", "try_puzzle", "vo_try_puzzle_air1" ); - level thread maps/mp/zm_tomb_vo::watch_one_shot_line( "puzzle", "try_puzzle", "vo_try_puzzle_air2" ); - level thread air_puzzle_1_run(); - flag_wait( "air_puzzle_1_complete" ); - playsoundatposition( "zmb_squest_step1_finished", ( 0, 0, 0 ) ); - level thread air_puzzle_1_cleanup(); - level thread rumble_players_in_chamber( 5, 3 ); - level thread air_puzzle_2_run(); -} - -air_puzzle_1_init() -{ - level.a_ceiling_rings = getentarray( "ceiling_ring", "script_noteworthy" ); - _a56 = level.a_ceiling_rings; - _k56 = getFirstArrayKey( _a56 ); - while ( isDefined( _k56 ) ) - { - e_ring = _a56[ _k56 ]; - e_ring ceiling_ring_init(); - _k56 = getNextArrayKey( _a56, _k56 ); - } -} - -air_puzzle_1_cleanup() -{ - i = 1; - while ( i <= 3 ) - { - n_move = ( 4 - i ) * 20; - e_ring = getent( "ceiling_ring_0" + i, "targetname" ); - e_ring rotateyaw( 360, 1,5, 0,5, 0 ); - e_ring movez( n_move, 1,5, 0,5, 0 ); - e_ring waittill( "movedone" ); - i++; - } - playsoundatposition( "zmb_squest_wind_ring_disappear", level.a_ceiling_rings[ 0 ].origin ); -} - -air_puzzle_1_run() -{ - array_thread( level.a_ceiling_rings, ::ceiling_ring_run ); -} - -check_puzzle_solved() -{ - num_solved = 0; - _a85 = level.a_ceiling_rings; - _k85 = getFirstArrayKey( _a85 ); - while ( isDefined( _k85 ) ) - { - e_ring = _a85[ _k85 ]; - if ( e_ring.script_int != e_ring.position ) - { - return 0; - } - _k85 = getNextArrayKey( _a85, _k85 ); - } - return 1; -} - -ceiling_ring_randomize() -{ - n_offset_from_final = randomintrange( 1, 4 ); - self.position = ( self.script_int + n_offset_from_final ) % 4; - ceiling_ring_update_position(); -/# - assert( self.position != self.script_int ); -#/ -} - -ceiling_ring_update_position() -{ - new_angles = ( self.angles[ 0 ], self.position * 90, self.angles[ 2 ] ); - self rotateto( new_angles, 0,5, 0,2, 0,2 ); - self playsound( "zmb_squest_wind_ring_turn" ); - self waittill( "rotatedone" ); -} - -ceiling_ring_rotate() -{ - self.position = ( self.position + 1 ) % 4; -/# - if ( self.position == self.script_int ) - { - iprintlnbold( "Ring is in place." ); -#/ - } - self ceiling_ring_update_position(); - solved = check_puzzle_solved(); - if ( solved && !flag( "air_puzzle_1_complete" ) ) - { - self thread maps/mp/zm_tomb_vo::say_puzzle_completion_line( 2 ); - flag_set( "air_puzzle_1_complete" ); - } -} - -ceiling_ring_init() -{ - self.position = 0; -} - -ceiling_ring_run() -{ - level endon( "air_puzzle_1_complete" ); - self setcandamage( 1 ); - self.position = 0; - ceiling_ring_randomize(); - n_rotations = 0; - while ( 1 ) - { - self waittill( "damage", damage, attacker, direction_vec, point, mod, tagname, modelname, partname, weaponname ); - if ( weaponname == "staff_air_zm" ) - { - level notify( "vo_try_puzzle_air1" ); - self ceiling_ring_rotate(); - rumble_nearby_players( self.origin, 1500, 2 ); - n_rotations++; - if ( ( n_rotations % 4 ) == 0 ) - { - level notify( "vo_puzzle_bad" ); - } - continue; - } - else - { - level notify( "vo_puzzle_confused" ); - } - } -} - -air_puzzle_2_init() -{ - a_smoke_pos = getstructarray( "puzzle_smoke_origin", "targetname" ); - _a179 = a_smoke_pos; - _k179 = getFirstArrayKey( _a179 ); - while ( isDefined( _k179 ) ) - { - s_smoke_pos = _a179[ _k179 ]; - s_smoke_pos.detector_brush = getent( s_smoke_pos.target, "targetname" ); - s_smoke_pos.detector_brush ghost(); - _k179 = getNextArrayKey( _a179, _k179 ); - } -} - -air_puzzle_2_run() -{ - a_smoke_pos = getstructarray( "puzzle_smoke_origin", "targetname" ); - _a190 = a_smoke_pos; - _k190 = getFirstArrayKey( _a190 ); - while ( isDefined( _k190 ) ) - { - s_smoke_pos = _a190[ _k190 ]; - s_smoke_pos thread air_puzzle_smoke(); - _k190 = getNextArrayKey( _a190, _k190 ); - } - while ( 1 ) - { - level waittill( "air_puzzle_smoke_solved" ); - all_smoke_solved = 1; - _a200 = a_smoke_pos; - _k200 = getFirstArrayKey( _a200 ); - while ( isDefined( _k200 ) ) - { - s_smoke_pos = _a200[ _k200 ]; - if ( !s_smoke_pos.solved ) - { - all_smoke_solved = 0; - } - _k200 = getNextArrayKey( _a200, _k200 ); - } - if ( all_smoke_solved ) - { - a_players = getplayers(); - _a211 = a_players; - _k211 = getFirstArrayKey( _a211 ); - while ( isDefined( _k211 ) ) - { - e_player = _a211[ _k211 ]; - if ( e_player hasweapon( "staff_air_zm" ) ) - { - e_player thread maps/mp/zm_tomb_vo::say_puzzle_completion_line( 2 ); - break; - } - else - { - _k211 = getNextArrayKey( _a211, _k211 ); - } - } - flag_set( "air_puzzle_2_complete" ); - level thread play_puzzle_stinger_on_all_players(); - return; - } - else - { - } - } -} - -air_puzzle_smoke() -{ - self.e_fx = spawn( "script_model", self.origin ); - self.e_fx.angles = self.angles; - self.e_fx setmodel( "tag_origin" ); - self.e_fx playloopsound( "zmb_squest_wind_incense_loop", 2 ); - s_dest = getstruct( "puzzle_smoke_dest", "targetname" ); - playfxontag( level._effect[ "air_puzzle_smoke" ], self.e_fx, "tag_origin" ); - self thread air_puzzle_run_smoke_direction(); - flag_wait( "air_puzzle_2_complete" ); - self.e_fx movez( -1000, 1, 0,1, 0,1 ); - self.e_fx waittill( "movedone" ); - wait 5; - self.e_fx delete(); - self.detector_brush delete(); -} - -air_puzzle_run_smoke_direction() -{ - level endon( "air_puzzle_2_complete" ); - self endon( "death" ); - s_dest = getstruct( "puzzle_smoke_dest", "targetname" ); - v_to_dest = vectornormalize( s_dest.origin - self.origin ); - f_min_dot = cos( self.script_int ); - self.solved = 0; - self.detector_brush setcandamage( 1 ); - direction_failures = 0; - while ( 1 ) - { - self.detector_brush waittill( "damage", damage, attacker, direction_vec, point, mod, tagname, modelname, partname, weaponname ); - if ( weaponname == "staff_air_zm" ) - { - level notify( "vo_try_puzzle_air2" ); - new_yaw = vectoangles( direction_vec ); - new_orient = ( 0, new_yaw, 0 ); - self.e_fx rotateto( new_orient, 1, 0,3, 0,3 ); - self.e_fx waittill( "rotatedone" ); - f_dot = vectordot( v_to_dest, direction_vec ); - self.solved = f_dot > f_min_dot; - if ( !self.solved ) - { - direction_failures++; - if ( direction_failures > 4 ) - { - level notify( "vo_puzzle_confused" ); - } - } - else - { - if ( randomint( 100 ) < 10 ) - { - level notify( "vo_puzzle_good" ); - } - } - level notify( "air_puzzle_smoke_solved" ); - continue; - } - else - { - if ( issubstr( weaponname, "staff" ) ) - { - level notify( "vo_puzzle_bad" ); - } - } - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_quest_crypt.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_quest_crypt.gsc deleted file mode 100644 index f93b64e..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_quest_crypt.gsc +++ /dev/null @@ -1,377 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zm_tomb_vo; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_craftables; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -#using_animtree( "fxanim_props_dlc4" ); - -main() -{ - precachemodel( "p6_power_lever" ); - onplayerconnect_callback( ::on_player_connect_crypt ); - flag_init( "staff_air_zm_upgrade_unlocked" ); - flag_init( "staff_water_zm_upgrade_unlocked" ); - flag_init( "staff_fire_zm_upgrade_unlocked" ); - flag_init( "staff_lightning_zm_upgrade_unlocked" ); - flag_init( "disc_rotation_active" ); - level thread maps/mp/zm_tomb_vo::watch_one_shot_line( "puzzle", "try_puzzle", "vo_try_puzzle_crypt" ); - init_crypt_gems(); - chamber_disc_puzzle_init(); -} - -on_player_connect_crypt() -{ - discs = getentarray( "crypt_puzzle_disc", "script_noteworthy" ); - _a42 = discs; - _k42 = getFirstArrayKey( _a42 ); - while ( isDefined( _k42 ) ) - { - disc = _a42[ _k42 ]; - disc delay_thread( 0,5, ::bryce_cake_light_update, 0 ); - _k42 = getNextArrayKey( _a42, _k42 ); - } -} - -chamber_disc_puzzle_init() -{ - level.gem_start_pos = []; - level.gem_start_pos[ "crypt_gem_fire" ] = 2; - level.gem_start_pos[ "crypt_gem_air" ] = 3; - level.gem_start_pos[ "crypt_gem_ice" ] = 0; - level.gem_start_pos[ "crypt_gem_elec" ] = 1; - chamber_discs = getentarray( "crypt_puzzle_disc", "script_noteworthy" ); - array_thread( chamber_discs, ::chamber_disc_run ); - flag_wait( "chamber_entrance_opened" ); - chamber_discs_randomize(); -} - -chamber_disc_run() -{ - flag_wait( "start_zombie_round_logic" ); - self.position = 0; - self bryce_cake_light_update( 0 ); - if ( isDefined( self.target ) ) - { - a_levers = getentarray( self.target, "targetname" ); - _a77 = a_levers; - _k77 = getFirstArrayKey( _a77 ); - while ( isDefined( _k77 ) ) - { - e_lever = _a77[ _k77 ]; - e_lever.trigger_stub = tomb_spawn_trigger_radius( e_lever.origin, 100, 1 ); - e_lever.trigger_stub.require_look_at = 0; - if ( !isDefined( e_lever.script_string ) && isDefined( "clockwise" ) ) - { - if ( isDefined( e_lever.script_string ) && isDefined( "clockwise" ) ) - { - clockwise = e_lever.script_string == "clockwise"; - } - } - e_lever.trigger_stub thread chamber_disc_trigger_run( self, e_lever, clockwise ); - _k77 = getNextArrayKey( _a77, _k77 ); - } - self thread chamber_disc_move_to_position(); - } - self useanimtree( -1 ); - n_wait = randomfloatrange( 0, 5 ); - wait n_wait; - self setanim( %fxanim_zom_tomb_chamber_piece_anim ); -} - -init_crypt_gems() -{ - disc = getent( "crypt_puzzle_disc_main", "targetname" ); - gems = getentarray( "crypt_gem", "script_noteworthy" ); - _a101 = gems; - _k101 = getFirstArrayKey( _a101 ); - while ( isDefined( _k101 ) ) - { - gem = _a101[ _k101 ]; - gem linkto( disc ); - gem thread run_crypt_gem_pos(); - _k101 = getNextArrayKey( _a101, _k101 ); - } -} - -light_discs_bottom_to_top() -{ - discs = getentarray( "crypt_puzzle_disc", "script_noteworthy" ); - i = 1; - while ( i <= 4 ) - { - _a113 = discs; - _k113 = getFirstArrayKey( _a113 ); - while ( isDefined( _k113 ) ) - { - disc = _a113[ _k113 ]; - if ( !isDefined( disc.script_int ) || !isDefined( i ) && isDefined( disc.script_int ) && isDefined( i ) && disc.script_int == i ) - { - disc bryce_cake_light_update( 1 ); - break; - } - else - { - _k113 = getNextArrayKey( _a113, _k113 ); - } - } - wait 1; - i++; - } -} - -run_crypt_gem_pos() -{ - str_weapon = undefined; - complete_flag = undefined; - str_orb_path = undefined; - str_glow_fx = undefined; - n_element = self.script_int; - switch( self.targetname ) - { - case "crypt_gem_air": - str_weapon = "staff_air_zm"; - complete_flag = "staff_air_zm_upgrade_unlocked"; - str_orb_path = "air_orb_exit_path"; - str_final_pos = "air_orb_plinth_final"; - break; - case "crypt_gem_ice": - str_weapon = "staff_water_zm"; - complete_flag = "staff_water_zm_upgrade_unlocked"; - str_orb_path = "ice_orb_exit_path"; - str_final_pos = "ice_orb_plinth_final"; - break; - case "crypt_gem_fire": - str_weapon = "staff_fire_zm"; - complete_flag = "staff_fire_zm_upgrade_unlocked"; - str_orb_path = "fire_orb_exit_path"; - str_final_pos = "fire_orb_plinth_final"; - break; - case "crypt_gem_elec": - str_weapon = "staff_lightning_zm"; - complete_flag = "staff_lightning_zm_upgrade_unlocked"; - str_orb_path = "lightning_orb_exit_path"; - str_final_pos = "lightning_orb_plinth_final"; - break; - default: -/# - assertmsg( "Unknown crypt gem targetname: " + self.targetname ); -#/ - return; - } - e_gem_model = puzzle_orb_chamber_to_crypt( str_orb_path, self ); - e_main_disc = getent( "crypt_puzzle_disc_main", "targetname" ); - e_gem_model linkto( e_main_disc ); - str_targetname = self.targetname; - self delete(); - e_gem_model setcandamage( 1 ); - while ( 1 ) - { - e_gem_model waittill( "damage", damage, attacker, direction_vec, point, mod, tagname, modelname, partname, weaponname ); - if ( weaponname == str_weapon ) - { - break; - } - else - { - } - } - e_gem_model setclientfield( "element_glow_fx", n_element ); - e_gem_model playsound( "zmb_squest_crystal_charge" ); - e_gem_model playloopsound( "zmb_squest_crystal_charge_loop", 2 ); - while ( 1 ) - { - if ( chamber_disc_gem_has_clearance( str_targetname ) ) - { - break; - } - else level waittill( "crypt_disc_rotation" ); - } - flag_set( "disc_rotation_active" ); - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "side_sting_5" ); - light_discs_bottom_to_top(); - level thread puzzle_orb_pillar_show(); - e_gem_model unlink(); - s_ascent = getstruct( "orb_crypt_ascent_path", "targetname" ); - v_next_pos = ( e_gem_model.origin[ 0 ], e_gem_model.origin[ 1 ], s_ascent.origin[ 2 ] ); - e_gem_model setclientfield( "element_glow_fx", n_element ); - playfxontag( level._effect[ "puzzle_orb_trail" ], e_gem_model, "tag_origin" ); - e_gem_model playsound( "zmb_squest_crystal_leave" ); - e_gem_model puzzle_orb_move( v_next_pos ); - flag_clear( "disc_rotation_active" ); - level thread chamber_discs_randomize(); - e_gem_model puzzle_orb_follow_path( s_ascent ); - v_next_pos = ( e_gem_model.origin[ 0 ], e_gem_model.origin[ 1 ], e_gem_model.origin[ 2 ] + 2000 ); - e_gem_model puzzle_orb_move( v_next_pos ); - s_chamber_path = getstruct( str_orb_path, "targetname" ); - str_model = e_gem_model.model; - e_gem_model delete(); - e_gem_model = puzzle_orb_follow_return_path( s_chamber_path, n_element ); - s_final = getstruct( str_final_pos, "targetname" ); - e_gem_model puzzle_orb_move( s_final.origin ); - e_new_gem = spawn( "script_model", s_final.origin ); - e_new_gem setmodel( e_gem_model.model ); - e_new_gem.script_int = n_element; - e_new_gem setclientfield( "element_glow_fx", n_element ); - e_gem_model delete(); - e_new_gem playsound( "zmb_squest_crystal_arrive" ); - e_new_gem playloopsound( "zmb_squest_crystal_charge_loop", 0,1 ); - flag_set( complete_flag ); -} - -chamber_disc_move_to_position() -{ - new_angles = ( self.angles[ 0 ], self.position * 90, self.angles[ 2 ] ); - self rotateto( new_angles, 1, 0, 0 ); - self playsound( "zmb_crypt_disc_turn" ); - wait ( 1 * 0,75 ); - self bryce_cake_light_update( 0 ); - wait ( 1 * 0,25 ); - self bryce_cake_light_update( 0 ); - self playsound( "zmb_crypt_disc_stop" ); - rumble_nearby_players( self.origin, 1000, 2 ); -} - -chamber_discs_move_all_to_position( discs ) -{ - if ( !isDefined( discs ) ) - { - discs = undefined; - } - flag_set( "disc_rotation_active" ); - if ( !isDefined( discs ) ) - { - discs = getentarray( "chamber_puzzle_disc", "script_noteworthy" ); - } - _a285 = discs; - _k285 = getFirstArrayKey( _a285 ); - while ( isDefined( _k285 ) ) - { - e_disc = _a285[ _k285 ]; - e_disc chamber_disc_move_to_position(); - _k285 = getNextArrayKey( _a285, _k285 ); - } - flag_clear( "disc_rotation_active" ); -} - -chamber_disc_get_gem_position( gem_name ) -{ - disc = getent( "crypt_puzzle_disc_main", "targetname" ); - return ( disc.position + level.gem_start_pos[ gem_name ] ) % 4; -} - -chamber_disc_gem_has_clearance( gem_name ) -{ - gem_position = chamber_disc_get_gem_position( gem_name ); - discs = getentarray( "crypt_puzzle_disc", "script_noteworthy" ); - _a303 = discs; - _k303 = getFirstArrayKey( _a303 ); - while ( isDefined( _k303 ) ) - { - disc = _a303[ _k303 ]; - if ( !isDefined( disc.targetname ) || !isDefined( "crypt_puzzle_disc_main" ) && isDefined( disc.targetname ) && isDefined( "crypt_puzzle_disc_main" ) && disc.targetname == "crypt_puzzle_disc_main" ) - { - } - else - { - if ( disc.position != gem_position ) - { - return 0; - } - } - _k303 = getNextArrayKey( _a303, _k303 ); - } - return 1; -} - -chamber_disc_rotate( b_clockwise ) -{ - if ( b_clockwise ) - { - self.position = ( self.position + 1 ) % 4; - } - else - { - self.position = ( self.position + 3 ) % 4; - } - self chamber_disc_move_to_position(); -} - -bryce_cake_light_update( b_on ) -{ - if ( !isDefined( b_on ) ) - { - b_on = 1; - } - if ( !isDefined( self.n_bryce_cake ) ) - { - self.n_bryce_cake = 0; - } - if ( !b_on ) - { - self.n_bryce_cake = ( self.n_bryce_cake + 1 ) % 2; - } - else - { - self.n_bryce_cake = 2; - } - self setclientfield( "bryce_cake", self.n_bryce_cake ); -} - -chamber_discs_randomize() -{ - discs = getentarray( "crypt_puzzle_disc", "script_noteworthy" ); - prev_disc_pos = 0; - _a345 = discs; - _k345 = getFirstArrayKey( _a345 ); - while ( isDefined( _k345 ) ) - { - disc = _a345[ _k345 ]; - if ( !isDefined( disc.target ) ) - { - } - else - { - disc.position = ( prev_disc_pos + randomintrange( 1, 3 ) ) % 4; - prev_disc_pos = disc.position; - } - _k345 = getNextArrayKey( _a345, _k345 ); - } - chamber_discs_move_all_to_position( discs ); -} - -chamber_disc_switch_spark() -{ - self setclientfield( "switch_spark", 1 ); - wait 0,5; - self setclientfield( "switch_spark", 0 ); -} - -chamber_disc_trigger_run( e_disc, e_lever, b_clockwise ) -{ - discs_to_rotate = array( e_disc ); - e_lever useanimtree( -1 ); - n_anim_time = getanimlength( %fxanim_zom_tomb_puzzle_lever_switch_anim ); - while ( 1 ) - { - self waittill( "trigger", e_triggerer ); - if ( !flag( "disc_rotation_active" ) ) - { - flag_set( "disc_rotation_active" ); - e_lever setanim( %fxanim_zom_tomb_puzzle_lever_switch_anim, 1, 0, 1 ); - e_lever playsound( "zmb_crypt_lever" ); - wait ( n_anim_time * 0,5 ); - e_lever thread chamber_disc_switch_spark(); - array_thread( discs_to_rotate, ::chamber_disc_rotate, b_clockwise ); - wait 1; - e_lever clearanim( %fxanim_zom_tomb_puzzle_lever_switch_anim, 0 ); - flag_clear( "disc_rotation_active" ); - level notify( "vo_try_puzzle_crypt" ); - } - level notify( "crypt_disc_rotation" ); - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_quest_elec.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_quest_elec.gsc deleted file mode 100644 index 58315eb..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_quest_elec.gsc +++ /dev/null @@ -1,476 +0,0 @@ -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zm_tomb_chamber; -#include maps/mp/zm_tomb_vo; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_craftables; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -main() -{ - onplayerconnect_callback( ::onplayerconnect ); - flag_init( "electric_puzzle_1_complete" ); - flag_init( "electric_puzzle_2_complete" ); - flag_init( "electric_upgrade_available" ); - maps/mp/zm_tomb_vo::add_puzzle_completion_line( 3, "vox_sam_lightning_puz_solve_0" ); - maps/mp/zm_tomb_vo::add_puzzle_completion_line( 3, "vox_sam_lightning_puz_solve_1" ); - maps/mp/zm_tomb_vo::add_puzzle_completion_line( 3, "vox_sam_lightning_puz_solve_2" ); - level thread maps/mp/zm_tomb_vo::watch_one_shot_line( "puzzle", "try_puzzle", "vo_try_puzzle_lightning1" ); - level thread maps/mp/zm_tomb_vo::watch_one_shot_line( "puzzle", "try_puzzle", "vo_try_puzzle_lightning2" ); - electric_puzzle_1_init(); - electric_puzzle_2_init(); - level thread electric_puzzle_1_run(); - flag_wait( "electric_puzzle_1_complete" ); - playsoundatposition( "zmb_squest_step1_finished", ( 0, 0, -1 ) ); - level thread rumble_players_in_chamber( 5, 3 ); - level thread electric_puzzle_2_run(); - flag_wait( "electric_puzzle_2_complete" ); - level thread electric_puzzle_2_cleanup(); -} - -onplayerconnect() -{ - self thread electric_puzzle_watch_staff(); -} - -electric_puzzle_watch_staff() -{ - self endon( "disconnect" ); - a_piano_keys = getstructarray( "piano_key", "script_noteworthy" ); - while ( 1 ) - { - self waittill( "projectile_impact", str_weap_name, v_explode_point, n_radius, e_projectile, n_impact ); - while ( str_weap_name == "staff_lightning_zm" ) - { - while ( !flag( "electric_puzzle_1_complete" ) && maps/mp/zm_tomb_chamber::is_chamber_occupied() ) - { - n_index = get_closest_index( v_explode_point, a_piano_keys, 20 ); - while ( isDefined( n_index ) ) - { - a_piano_keys[ n_index ] notify( "piano_key_shot" ); - a_players = getplayers(); - _a77 = a_players; - _k77 = getFirstArrayKey( _a77 ); - while ( isDefined( _k77 ) ) - { - e_player = _a77[ _k77 ]; - if ( e_player hasweapon( "staff_lightning_zm" ) ) - { - level notify( "vo_try_puzzle_lightning1" ); - } - _k77 = getNextArrayKey( _a77, _k77 ); - } - } - } - } - } -} - -electric_puzzle_1_init() -{ - flag_init( "piano_chord_ringing" ); -} - -electric_puzzle_1_run() -{ - a_piano_keys = getstructarray( "piano_key", "script_noteworthy" ); - level.a_piano_keys_playing = []; - array_thread( a_piano_keys, ::piano_key_run ); - level thread piano_run_chords(); -} - -piano_keys_stop() -{ - level notify( "piano_keys_stop" ); - level.a_piano_keys_playing = []; -} - -show_chord_debug( a_chord_notes ) -{ -/# - if ( !isDefined( a_chord_notes ) ) - { - a_chord_notes = []; - } - a_piano_keys = getstructarray( "piano_key", "script_noteworthy" ); - _a129 = a_piano_keys; - _k129 = getFirstArrayKey( _a129 ); - while ( isDefined( _k129 ) ) - { - e_key = _a129[ _k129 ]; - e_key notify( "stop_debug_position" ); - _a132 = a_chord_notes; - _k132 = getFirstArrayKey( _a132 ); - while ( isDefined( _k132 ) ) - { - note = _a132[ _k132 ]; - if ( note == e_key.script_string ) - { - e_key thread puzzle_debug_position(); - break; - } - else - { - _k132 = getNextArrayKey( _a132, _k132 ); - } - } - _k129 = getNextArrayKey( _a129, _k129 ); -#/ - } -} - -piano_run_chords() -{ - a_chords = getstructarray( "piano_chord", "targetname" ); - _a147 = a_chords; - _k147 = getFirstArrayKey( _a147 ); - while ( isDefined( _k147 ) ) - { - s_chord = _a147[ _k147 ]; - s_chord.notes = strtok( s_chord.script_string, " " ); -/# - assert( s_chord.notes.size == 3 ); -#/ - _k147 = getNextArrayKey( _a147, _k147 ); - } - a_chord_order = array( "a_minor", "e_minor", "d_minor" ); - _a154 = a_chord_order; - _k154 = getFirstArrayKey( _a154 ); - while ( isDefined( _k154 ) ) - { - chord_name = _a154[ _k154 ]; - s_chord = getstruct( "piano_chord_" + chord_name, "script_noteworthy" ); -/# - show_chord_debug( s_chord.notes ); -#/ - chord_solved = 0; - while ( !chord_solved ) - { - level waittill( "piano_key_played" ); - while ( level.a_piano_keys_playing.size == 3 ) - { - correct_notes_playing = 0; - _a169 = level.a_piano_keys_playing; - _k169 = getFirstArrayKey( _a169 ); - while ( isDefined( _k169 ) ) - { - played_note = _a169[ _k169 ]; - _a171 = s_chord.notes; - _k171 = getFirstArrayKey( _a171 ); - while ( isDefined( _k171 ) ) - { - requested_note = _a171[ _k171 ]; - if ( requested_note == played_note ) - { - correct_notes_playing++; - } - _k171 = getNextArrayKey( _a171, _k171 ); - } - _k169 = getNextArrayKey( _a169, _k169 ); - } - if ( correct_notes_playing == 3 ) - { - chord_solved = 1; - break; - } - else - { - a_players = getplayers(); - _a185 = a_players; - _k185 = getFirstArrayKey( _a185 ); - while ( isDefined( _k185 ) ) - { - e_player = _a185[ _k185 ]; - if ( e_player hasweapon( "staff_lightning_zm" ) ) - { - level notify( "vo_puzzle_bad" ); - } - _k185 = getNextArrayKey( _a185, _k185 ); - } - } - } - } - a_players = getplayers(); - _a197 = a_players; - _k197 = getFirstArrayKey( _a197 ); - while ( isDefined( _k197 ) ) - { - e_player = _a197[ _k197 ]; - if ( e_player hasweapon( "staff_lightning_zm" ) ) - { - level notify( "vo_puzzle_good" ); - } - _k197 = getNextArrayKey( _a197, _k197 ); - } - flag_set( "piano_chord_ringing" ); - rumble_nearby_players( a_chords[ 0 ].origin, 1500, 2 ); - wait 4; - flag_clear( "piano_chord_ringing" ); - piano_keys_stop(); -/# - show_chord_debug(); -#/ - _k154 = getNextArrayKey( _a154, _k154 ); - } - e_player = get_closest_player( a_chords[ 0 ].origin ); - e_player thread maps/mp/zm_tomb_vo::say_puzzle_completion_line( 3 ); - flag_set( "electric_puzzle_1_complete" ); -} - -piano_key_run() -{ - piano_key_note = self.script_string; - while ( 1 ) - { - self waittill( "piano_key_shot" ); - if ( !flag( "piano_chord_ringing" ) ) - { - if ( level.a_piano_keys_playing.size >= 3 ) - { - piano_keys_stop(); - } - self.e_fx = spawn( "script_model", self.origin ); - self.e_fx playloopsound( "zmb_kbd_" + piano_key_note ); - self.e_fx.angles = self.angles; - self.e_fx setmodel( "tag_origin" ); - playfxontag( level._effect[ "elec_piano_glow" ], self.e_fx, "tag_origin" ); - level.a_piano_keys_playing[ level.a_piano_keys_playing.size ] = piano_key_note; - level notify( "piano_key_played" ); - level waittill( "piano_keys_stop" ); - self.e_fx delete(); - } - } -} - -electric_puzzle_2_init() -{ - level.electric_relays = []; - level.electric_relays[ "bunker" ] = spawnstruct(); - level.electric_relays[ "tank_platform" ] = spawnstruct(); - level.electric_relays[ "start" ] = spawnstruct(); - level.electric_relays[ "elec" ] = spawnstruct(); - level.electric_relays[ "ruins" ] = spawnstruct(); - level.electric_relays[ "air" ] = spawnstruct(); - level.electric_relays[ "ice" ] = spawnstruct(); - level.electric_relays[ "village" ] = spawnstruct(); - _a273 = level.electric_relays; - _k273 = getFirstArrayKey( _a273 ); - while ( isDefined( _k273 ) ) - { - s_relay = _a273[ _k273 ]; - s_relay.connections = []; - _k273 = getNextArrayKey( _a273, _k273 ); - } - level.electric_relays[ "tank_platform" ].connections[ 0 ] = "ruins"; - level.electric_relays[ "start" ].connections[ 1 ] = "tank_platform"; - level.electric_relays[ "elec" ].connections[ 0 ] = "ice"; - level.electric_relays[ "ruins" ].connections[ 2 ] = "chamber"; - level.electric_relays[ "air" ].connections[ 2 ] = "start"; - level.electric_relays[ "ice" ].connections[ 3 ] = "village"; - level.electric_relays[ "village" ].connections[ 2 ] = "air"; - level.electric_relays[ "bunker" ].position = 2; - level.electric_relays[ "tank_platform" ].position = 1; - level.electric_relays[ "start" ].position = 3; - level.electric_relays[ "elec" ].position = 1; - level.electric_relays[ "ruins" ].position = 3; - level.electric_relays[ "air" ].position = 0; - level.electric_relays[ "ice" ].position = 1; - level.electric_relays[ "village" ].position = 1; - a_switches = getentarray( "puzzle_relay_switch", "script_noteworthy" ); - _a303 = a_switches; - _k303 = getFirstArrayKey( _a303 ); - while ( isDefined( _k303 ) ) - { - e_switch = _a303[ _k303 ]; - level.electric_relays[ e_switch.script_string ].e_switch = e_switch; - _k303 = getNextArrayKey( _a303, _k303 ); - } - array_thread( level.electric_relays, ::relay_switch_run ); -} - -electric_puzzle_2_run() -{ - update_relays(); -} - -electric_puzzle_2_cleanup() -{ - _a320 = level.electric_relays; - _k320 = getFirstArrayKey( _a320 ); - while ( isDefined( _k320 ) ) - { - s_relay = _a320[ _k320 ]; - if ( isDefined( s_relay.trigger_stub ) ) - { - maps/mp/zombies/_zm_unitrigger::register_unitrigger( s_relay.trigger_stub ); - } - if ( isDefined( s_relay.e_switch ) ) - { - s_relay.e_switch stoploopsound( 0,5 ); - } - if ( isDefined( s_relay.e_fx ) ) - { - s_relay.e_fx delete(); - } - _k320 = getNextArrayKey( _a320, _k320 ); - } -} - -kill_all_relay_power() -{ - _a341 = level.electric_relays; - _k341 = getFirstArrayKey( _a341 ); - while ( isDefined( _k341 ) ) - { - s_relay = _a341[ _k341 ]; - s_relay.receiving_power = 0; - s_relay.sending_power = 0; - _k341 = getNextArrayKey( _a341, _k341 ); - } -} - -relay_give_power( s_relay ) -{ - if ( !flag( "electric_puzzle_1_complete" ) ) - { - return; - } - if ( !isDefined( s_relay ) ) - { - kill_all_relay_power(); - s_relay = level.electric_relays[ "elec" ]; - } - s_relay.receiving_power = 1; - str_target_relay = s_relay.connections[ s_relay.position ]; - if ( isDefined( str_target_relay ) ) - { - if ( str_target_relay == "chamber" ) - { - s_relay.e_switch thread maps/mp/zm_tomb_vo::say_puzzle_completion_line( 3 ); - level thread play_puzzle_stinger_on_all_players(); - flag_set( "electric_puzzle_2_complete" ); - return; - } - else - { - s_relay.sending_power = 1; - s_target_relay = level.electric_relays[ str_target_relay ]; - relay_give_power( s_target_relay ); - } - } -} - -update_relay_fx_and_sound() -{ - if ( !flag( "electric_puzzle_1_complete" ) ) - { - return; - } - _a398 = level.electric_relays; - _k398 = getFirstArrayKey( _a398 ); - while ( isDefined( _k398 ) ) - { - s_relay = _a398[ _k398 ]; - if ( s_relay.sending_power ) - { - if ( isDefined( s_relay.e_fx ) ) - { - s_relay.e_fx delete(); - } - s_relay.e_switch playloopsound( "zmb_squest_elec_switch_hum", 1 ); - } - else if ( s_relay.receiving_power ) - { - if ( !isDefined( s_relay.e_fx ) ) - { - v_offset = anglesToRight( s_relay.e_switch.angles ) * 1; - s_relay.e_fx = spawn( "script_model", s_relay.e_switch.origin + v_offset ); - s_relay.e_fx.angles = s_relay.e_switch.angles + vectorScale( ( 0, 0, -1 ), 90 ); - s_relay.e_fx setmodel( "tag_origin" ); - playfxontag( level._effect[ "fx_tomb_sparks" ], s_relay.e_fx, "tag_origin" ); - } - s_relay.e_switch playloopsound( "zmb_squest_elec_switch_spark", 1 ); - } - else - { - if ( isDefined( s_relay.e_fx ) ) - { - s_relay.e_fx delete(); - } - s_relay.e_switch stoploopsound( 1 ); - } - _k398 = getNextArrayKey( _a398, _k398 ); - } -} - -update_relay_rotation() -{ - self.e_switch rotateto( ( self.position * 90, self.e_switch.angles[ 1 ], self.e_switch.angles[ 2 ] ), 0,1, 0, 0 ); - self.e_switch playsound( "zmb_squest_elec_switch" ); - self.e_switch waittill( "rotatedone" ); -} - -update_relays() -{ - relay_give_power(); - update_relay_fx_and_sound(); -} - -relay_switch_run() -{ -/# - assert( isDefined( self.e_switch ) ); -#/ - self.trigger_stub = spawnstruct(); - self.trigger_stub.origin = self.e_switch.origin; - self.trigger_stub.radius = 50; - self.trigger_stub.cursor_hint = "HINT_NOICON"; - self.trigger_stub.hint_string = ""; - self.trigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - self.trigger_stub.require_look_at = 1; - maps/mp/zombies/_zm_unitrigger::register_unitrigger( self.trigger_stub, ::relay_unitrigger_think ); - level endon( "electric_puzzle_2_complete" ); - self thread update_relay_rotation(); - n_tries = 0; - while ( 1 ) - { - self.trigger_stub waittill( "trigger", e_user ); - n_tries++; - level notify( "vo_try_puzzle_lightning2" ); - self.position = ( self.position + 1 ) % 4; - str_target_relay = self.connections[ self.position ]; - if ( isDefined( str_target_relay ) ) - { - if ( str_target_relay == "village" || str_target_relay == "ruins" ) - { - level notify( "vo_puzzle_good" ); - } - } - else if ( ( n_tries % 8 ) == 0 ) - { - level notify( "vo_puzzle_confused" ); - } - else - { - if ( ( n_tries % 4 ) == 0 ) - { - level notify( "vo_puzzle_bad" ); - } - } - self update_relay_rotation(); - update_relays(); - } -} - -relay_unitrigger_think() -{ - self endon( "kill_trigger" ); - while ( 1 ) - { - self waittill( "trigger", player ); - self.stub notify( "trigger" ); - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_quest_fire.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_quest_fire.gsc deleted file mode 100644 index af28c27..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_quest_fire.gsc +++ /dev/null @@ -1,525 +0,0 @@ -#include maps/mp/zm_tomb_chamber; -#include maps/mp/zm_tomb_vo; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_craftables; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -#using_animtree( "zm_tomb_basic" ); - -main() -{ - flag_init( "fire_puzzle_1_complete" ); - flag_init( "fire_puzzle_2_complete" ); - flag_init( "fire_upgrade_available" ); - onplayerconnect_callback( ::onplayerconnect ); - fire_puzzle_1_init(); - fire_puzzle_2_init(); - maps/mp/zm_tomb_vo::add_puzzle_completion_line( 1, "vox_sam_fire_puz_solve_0" ); - maps/mp/zm_tomb_vo::add_puzzle_completion_line( 1, "vox_sam_fire_puz_solve_1" ); - maps/mp/zm_tomb_vo::add_puzzle_completion_line( 1, "vox_sam_fire_puz_solve_2" ); - level thread maps/mp/zm_tomb_vo::watch_one_shot_line( "puzzle", "try_puzzle", "vo_try_puzzle_fire1" ); - level thread maps/mp/zm_tomb_vo::watch_one_shot_line( "puzzle", "try_puzzle", "vo_try_puzzle_fire2" ); - level thread fire_puzzle_1_run(); - flag_wait( "fire_puzzle_1_complete" ); - playsoundatposition( "zmb_squest_step1_finished", ( -1, 0, 0 ) ); - level thread rumble_players_in_chamber( 5, 3 ); - level thread fire_puzzle_1_cleanup(); - level thread fire_puzzle_2_run(); - flag_wait( "fire_puzzle_2_complete" ); - level thread fire_puzzle_2_cleanup(); - flag_wait( "staff_fire_zm_upgrade_unlocked" ); -} - -onplayerconnect() -{ - self thread fire_puzzle_watch_staff(); -} - -init_animtree() -{ - scriptmodelsuseanimtree( -1 ); -} - -fire_puzzle_1_init() -{ -} - -fire_puzzle_1_run() -{ - level.sacrifice_volumes = getentarray( "fire_sacrifice_volume", "targetname" ); - level.clone_list = []; - level thread clone_cleanup_watch_player_presence(); - array_thread( level.sacrifice_volumes, ::init_sacrifice_volume ); - b_any_volumes_unfinished = 1; - while ( b_any_volumes_unfinished ) - { - level waittill( "fire_sacrifice_completed" ); - b_any_volumes_unfinished = 0; - _a98 = level.sacrifice_volumes; - _k98 = getFirstArrayKey( _a98 ); - while ( isDefined( _k98 ) ) - { - e_volume = _a98[ _k98 ]; - if ( !e_volume.b_gods_pleased ) - { - b_any_volumes_unfinished = 1; - } - _k98 = getNextArrayKey( _a98, _k98 ); - } - } -/# - iprintlnbold( "Fire Chamber Puzzle Completed" ); -#/ - e_player = get_closest_player( level.sacrifice_volumes[ 0 ].origin ); - e_player thread maps/mp/zm_tomb_vo::say_puzzle_completion_line( 1 ); - flag_set( "fire_puzzle_1_complete" ); -} - -fire_puzzle_1_cleanup() -{ - array_delete( level.sacrifice_volumes ); - level.sacrifice_volumes = []; - array_delete( level.clone_list ); - level.clone_list = []; -} - -clone_cleanup_watch_player_presence() -{ - level endon( "fire_puzzle_1_complete" ); - while ( 1 ) - { - wait 1; - if ( level.clone_list.size > 0 ) - { - if ( !maps/mp/zm_tomb_chamber::is_chamber_occupied() ) - { - array_delete( level.clone_list ); - level.clone_list = []; - } - } - } -} - -init_sacrifice_volume() -{ - self.b_gods_pleased = 0; - self.num_sacrifices_received = 0; - self.pct_sacrifices_received = 0; - self.e_ignition_point = getstruct( self.target, "targetname" ); - self.e_ignition_point thread run_sacrifice_ignition( self ); -} - -run_sacrifice_plinth( e_volume ) -{ - while ( 1 ) - { - if ( flag( "fire_puzzle_1_complete" ) ) - { - break; - } - else if ( isDefined( e_volume ) ) - { - if ( e_volume.pct_sacrifices_received > self.script_float || e_volume.b_gods_pleased ) - { - break; - } - } - else - { - wait 0,5; - } - } - light_plinth(); -} - -run_sacrifice_ignition( e_volume ) -{ - e_volume ent_flag_init( "flame_on" ); - if ( flag( "fire_puzzle_1_complete" ) ) - { - return; - } - level endon( "fire_puzzle_1_complete" ); - a_torch_pos = getstructarray( self.target, "targetname" ); - array_thread( a_torch_pos, ::run_sacrifice_plinth, e_volume ); - sndorigin = a_torch_pos[ 0 ].origin; - if ( !isDefined( self.angles ) ) - { - self.angles = ( -1, 0, 0 ); - } - max_hit_distance_sq = 10000; - while ( !e_volume.b_gods_pleased ) - { - e_volume ent_flag_clear( "flame_on" ); - level waittill( "fire_staff_explosion", v_point, e_projectile ); - while ( !maps/mp/zm_tomb_chamber::is_chamber_occupied() ) - { - continue; - } - while ( !e_projectile istouching( e_volume ) ) - { - continue; - } - self.e_fx = spawn( "script_model", self.origin ); - self.e_fx.angles = vectorScale( ( -1, 0, 0 ), 90 ); - self.e_fx setmodel( "tag_origin" ); - self.e_fx setclientfield( "barbecue_fx", 1 ); - e_volume ent_flag_set( "flame_on" ); - wait 6; - self.e_fx delete(); - } - level notify( "fire_sacrifice_completed" ); -} - -light_plinth() -{ - e_fx = spawn( "script_model", self.origin ); - e_fx setmodel( "tag_origin" ); - playfxontag( level._effect[ "fire_torch" ], e_fx, "tag_origin" ); - e_fx.angles = vectorScale( ( -1, 0, 0 ), 90 ); - e_fx playsound( "zmb_squest_fire_torch_ignite" ); - e_fx playloopsound( "zmb_squest_fire_torch_loop", 0,6 ); - flag_wait( "fire_puzzle_1_complete" ); - wait 30; - e_fx stoploopsound( 0,1 ); - e_fx playsound( "zmb_squest_fire_torch_out" ); - e_fx delete(); -} - -is_church_occupied() -{ - return 1; -} - -sacrifice_puzzle_zombie_killed( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) -{ - if ( isDefined( level.craftables_crafted[ "elemental_staff_fire" ] ) && !level.craftables_crafted[ "elemental_staff_fire" ] && getDvarInt( "zombie_cheat" ) <= 0 ) - { - return; - } - if ( isDefined( self.is_mechz ) && self.is_mechz ) - { - return; - } - if ( !isDefined( level.sacrifice_volumes ) ) - { - return; - } - if ( !maps/mp/zm_tomb_chamber::is_chamber_occupied() ) - { - return; - } - _a297 = level.sacrifice_volumes; - _k297 = getFirstArrayKey( _a297 ); - while ( isDefined( _k297 ) ) - { - e_volume = _a297[ _k297 ]; - if ( e_volume.b_gods_pleased ) - { - } - else - { - if ( self istouching( e_volume ) ) - { - level notify( "vo_try_puzzle_fire1" ); - self thread fire_sacrifice_death_clone( e_volume ); - return; - } - } - _k297 = getNextArrayKey( _a297, _k297 ); - } -} - -delete_oldest_clone() -{ - if ( level.clone_list.size == 0 ) - { - return; - } - clone = level.clone_list[ 0 ]; - arrayremoveindex( level.clone_list, 0, 0 ); - clone delete(); -} - -fire_sacrifice_death_clone( e_sacrifice_volume ) -{ - if ( level.clone_list.size >= 15 ) - { - level delete_oldest_clone(); - } - self ghost(); - clone = self spawn_zombie_clone(); - if ( self.has_legs ) - { - clone setanim( %ch_dazed_a_death, 1, 0, 1 ); - } - else - { - clone setanim( %ai_zombie_crawl_death_v1, 1, 0, 1 ); - } - n_anim_time = getanimlength( %ch_dazed_a_death ); - level.clone_list[ level.clone_list.size ] = clone; - clone endon( "death" ); - wait n_anim_time; - e_sacrifice_volume ent_flag_wait( "flame_on" ); - a_players = getplayers(); - _a359 = a_players; - _k359 = getFirstArrayKey( _a359 ); - while ( isDefined( _k359 ) ) - { - e_player = _a359[ _k359 ]; - if ( e_player hasweapon( "staff_fire_zm" ) ) - { - level notify( "vo_puzzle_good" ); - } - _k359 = getNextArrayKey( _a359, _k359 ); - } - playfx( level._effect[ "fire_ash_explosion" ], clone.origin, anglesToForward( clone.angles ), anglesToUp( clone.angles ) ); - e_sacrifice_volume.num_sacrifices_received++; - e_sacrifice_volume.pct_sacrifices_received = e_sacrifice_volume.num_sacrifices_received / 32; - if ( e_sacrifice_volume.num_sacrifices_received >= 32 ) - { - e_sacrifice_volume.b_gods_pleased = 1; - } - e_sacrifice_volume notify( "sacrifice_received" ); - arrayremovevalue( level.clone_list, clone ); - clone delete(); -} - -spawn_zombie_clone() -{ - clone = spawn( "script_model", self.origin ); - clone.angles = self.angles; - clone setmodel( self.model ); - if ( isDefined( self.headmodel ) ) - { - clone.headmodel = self.headmodel; - clone attach( clone.headmodel, "", 1 ); - } - clone useanimtree( -1 ); - return clone; -} - -fire_puzzle_2_init() -{ - i = 1; - while ( i <= 4 ) - { - a_ternary = getentarray( "fire_torch_ternary_group_0" + i, "targetname" ); - if ( a_ternary.size > 1 ) - { - index_to_save = randomintrange( 0, a_ternary.size ); - a_ternary[ index_to_save ] ghost(); - arrayremoveindex( a_ternary, index_to_save, 0 ); - array_delete( a_ternary ); - i++; - continue; - } - else - { - a_ternary[ 0 ] ghost(); - } - i++; - } - a_torches = getstructarray( "church_torch_target", "script_noteworthy" ); - array_thread( a_torches, ::fire_puzzle_torch_run ); -} - -fire_puzzle_2_run() -{ - a_ternary = getentarray( "fire_torch_ternary", "script_noteworthy" ); -/# - assert( a_ternary.size == 4 ); -#/ - _a434 = a_ternary; - _k434 = getFirstArrayKey( _a434 ); - while ( isDefined( _k434 ) ) - { - e_number = _a434[ _k434 ]; - e_number show(); - e_target_torch = getstruct( e_number.target, "targetname" ); - e_target_torch.b_correct_torch = 1; - e_target_torch thread puzzle_debug_position(); - _k434 = getNextArrayKey( _a434, _k434 ); - } -} - -fire_puzzle_2_cleanup() -{ - a_torches = getstructarray( "church_torch_target", "script_noteworthy" ); - _a446 = a_torches; - _k446 = getFirstArrayKey( _a446 ); - while ( isDefined( _k446 ) ) - { - s_torch = _a446[ _k446 ]; - if ( !isDefined( s_torch.e_fx ) ) - { - s_torch thread fire_puzzle_2_torch_flame(); - wait 0,25; - } - _k446 = getNextArrayKey( _a446, _k446 ); - } - wait 30; - _a459 = a_torches; - _k459 = getFirstArrayKey( _a459 ); - while ( isDefined( _k459 ) ) - { - s_torch = _a459[ _k459 ]; - if ( isDefined( s_torch.e_fx ) ) - { - s_torch.e_fx delete(); - wait 0,25; - } - _k459 = getNextArrayKey( _a459, _k459 ); - } -} - -fire_puzzle_2_is_complete() -{ - a_torches = getstructarray( "church_torch_target", "script_noteworthy" ); - wrong_torch = 0; - unlit_torch = 0; - _a476 = a_torches; - _k476 = getFirstArrayKey( _a476 ); - while ( isDefined( _k476 ) ) - { - e_torch = _a476[ _k476 ]; - if ( isDefined( e_torch.e_fx ) && !e_torch.b_correct_torch ) - { - wrong_torch = 1; - } - if ( !isDefined( e_torch.e_fx ) && e_torch.b_correct_torch ) - { - unlit_torch = 1; - } - _k476 = getNextArrayKey( _a476, _k476 ); - } - if ( !isDefined( level.n_torches_lit ) ) - { - level.n_torches_lit = 0; - } - if ( !isDefined( level.n_wrong_torches ) ) - { - level.n_wrong_torches = 0; - } - level.n_torches_lit++; - a_players = getplayers(); - _a504 = a_players; - _k504 = getFirstArrayKey( _a504 ); - while ( isDefined( _k504 ) ) - { - e_player = _a504[ _k504 ]; - if ( e_player hasweapon( "staff_fire_zm" ) ) - { - if ( ( level.n_torches_lit % 12 ) == 0 && !flag( "fire_puzzle_2_complete" ) ) - { - level notify( "vo_puzzle_confused" ); - break; - } - else - { - if ( wrong_torch && !flag( "fire_puzzle_2_complete" ) ) - { - level.n_wrong_torches++; - if ( ( level.n_wrong_torches % 5 ) == 0 ) - { - level notify( "vo_puzzle_bad" ); - } - break; - } - else - { - if ( unlit_torch ) - { - level notify( "vo_puzzle_good" ); - } - } - } - } - _k504 = getNextArrayKey( _a504, _k504 ); - } - if ( !wrong_torch ) - { - return !unlit_torch; - } -} - -fire_puzzle_watch_staff() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "projectile_impact", str_weap_name, v_explode_point, n_radius, e_projectile, n_impact ); - if ( str_weap_name == "staff_fire_zm" ) - { - level notify( "fire_staff_explosion" ); - } - } -} - -fire_puzzle_2_torch_flame() -{ - if ( isDefined( self.e_fx ) ) - { - self.e_fx delete(); - } - self.e_fx = spawn( "script_model", self.origin ); - self.e_fx.angles = vectorScale( ( -1, 0, 0 ), 90 ); - self.e_fx setmodel( "tag_origin" ); - playfxontag( level._effect[ "fire_torch" ], self.e_fx, "tag_origin" ); - self.e_fx playsound( "zmb_squest_fire_torch_ignite" ); - self.e_fx playloopsound( "zmb_squest_fire_torch_loop", 0,6 ); - rumble_nearby_players( self.origin, 1500, 2 ); - self.e_fx endon( "death" ); - if ( fire_puzzle_2_is_complete() && !flag( "fire_puzzle_2_complete" ) ) - { - self.e_fx thread maps/mp/zm_tomb_vo::say_puzzle_completion_line( 1 ); - level thread play_puzzle_stinger_on_all_players(); - flag_set( "fire_puzzle_2_complete" ); - } - wait 15; - self.e_fx stoploopsound( 0,1 ); - self.e_fx playsound( "zmb_squest_fire_torch_out" ); - if ( !flag( "fire_puzzle_2_complete" ) ) - { - self.e_fx delete(); - } -} - -fire_puzzle_torch_run() -{ - level endon( "fire_puzzle_2_complete" ); - self.b_correct_torch = 0; - max_hit_distance_sq = 4096; - while ( 1 ) - { - level waittill( "fire_staff_explosion", v_point ); - while ( !is_church_occupied() ) - { - continue; - } - dist_sq = distancesquared( v_point, self.origin ); - while ( dist_sq > max_hit_distance_sq ) - { - continue; - } - a_players = getplayers(); - _a614 = a_players; - _k614 = getFirstArrayKey( _a614 ); - while ( isDefined( _k614 ) ) - { - e_player = _a614[ _k614 ]; - if ( e_player hasweapon( "staff_fire_zm" ) ) - { - level notify( "vo_try_puzzle_fire2" ); - } - _k614 = getNextArrayKey( _a614, _k614 ); - } - self thread fire_puzzle_2_torch_flame(); - wait 2; - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_quest_ice.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_quest_ice.gsc deleted file mode 100644 index 2c81fed..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_quest_ice.gsc +++ /dev/null @@ -1,357 +0,0 @@ -#include maps/mp/zm_tomb_vo; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_craftables; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -main() -{ - precachemodel( "p6_zm_tm_note_rock_01_anim" ); - flag_init( "ice_puzzle_1_complete" ); - flag_init( "ice_puzzle_2_complete" ); - flag_init( "ice_upgrade_available" ); - flag_init( "ice_tile_flipping" ); - maps/mp/zm_tomb_vo::add_puzzle_completion_line( 4, "vox_sam_ice_puz_solve_0" ); - maps/mp/zm_tomb_vo::add_puzzle_completion_line( 4, "vox_sam_ice_puz_solve_1" ); - maps/mp/zm_tomb_vo::add_puzzle_completion_line( 4, "vox_sam_ice_puz_solve_2" ); - level thread maps/mp/zm_tomb_vo::watch_one_shot_line( "puzzle", "try_puzzle", "vo_try_puzzle_water1" ); - level thread maps/mp/zm_tomb_vo::watch_one_shot_line( "puzzle", "try_puzzle", "vo_try_puzzle_water2" ); - ice_puzzle_1_init(); - level thread ice_puzzle_2_init(); - level thread ice_puzzle_1_run(); - flag_wait( "ice_puzzle_1_complete" ); - playsoundatposition( "zmb_squest_step1_finished", ( 0, 0, 0 ) ); - level thread rumble_players_in_chamber( 5, 3 ); - ice_puzzle_1_cleanup(); - level thread ice_puzzle_2_run(); - flag_wait( "ice_puzzle_2_complete" ); - flag_wait( "staff_water_zm_upgrade_unlocked" ); -} - -ice_puzzle_1_init() -{ - ice_tiles_randomize(); - a_ceiling_tile_brushes = getentarray( "ice_ceiling_tile", "script_noteworthy" ); - level.unsolved_tiles = a_ceiling_tile_brushes; - _a68 = a_ceiling_tile_brushes; - _k68 = getFirstArrayKey( _a68 ); - while ( isDefined( _k68 ) ) - { - tile = _a68[ _k68 ]; - tile.showing_tile_side = 0; - tile.value = int( tile.script_string ); - tile thread ceiling_tile_flip(); - tile thread ceiling_tile_process_damage(); - _k68 = getNextArrayKey( _a68, _k68 ); - } - a_ice_ternary_digit_brushes = getentarray( "ice_chamber_digit", "targetname" ); - _a77 = a_ice_ternary_digit_brushes; - _k77 = getFirstArrayKey( _a77 ); - while ( isDefined( _k77 ) ) - { - digit = _a77[ _k77 ]; - digit ghost(); - digit notsolid(); - _k77 = getNextArrayKey( _a77, _k77 ); - } - level.ternary_digits = []; - level.ternary_digits[ 0 ] = array( -1, 0, -1 ); - level.ternary_digits[ 1 ] = array( -1, 1, -1 ); - level.ternary_digits[ 2 ] = array( -1, 2, -1 ); - level.ternary_digits[ 3 ] = array( 1, -1, 0 ); - level.ternary_digits[ 4 ] = array( 1, -1, 1 ); - level.ternary_digits[ 5 ] = array( 1, -1, 2 ); - level.ternary_digits[ 6 ] = array( 2, -1, 0 ); - level.ternary_digits[ 7 ] = array( 2, -1, 1 ); - level.ternary_digits[ 8 ] = array( 2, -1, 2 ); - level.ternary_digits[ 9 ] = array( 1, 0, 0 ); - level.ternary_digits[ 10 ] = array( 1, 0, 1 ); - level.ternary_digits[ 11 ] = array( 1, 0, 2 ); - level thread update_ternary_display(); -} - -ice_puzzle_1_cleanup() -{ - a_ceiling_tile_brushes = getentarray( "ice_ceiling_tile", "script_noteworthy" ); - _a105 = a_ceiling_tile_brushes; - _k105 = getFirstArrayKey( _a105 ); - while ( isDefined( _k105 ) ) - { - tile = _a105[ _k105 ]; - tile thread ceiling_tile_flip( 0 ); - _k105 = getNextArrayKey( _a105, _k105 ); - } - a_ice_ternary_digit_brushes = getentarray( "ice_chamber_digit", "targetname" ); - array_delete( a_ice_ternary_digit_brushes ); -} - -ice_tiles_randomize() -{ - a_original_tiles = getentarray( "ice_tile_original", "targetname" ); - a_original_positions = []; - _a120 = a_original_tiles; - _k120 = getFirstArrayKey( _a120 ); - while ( isDefined( _k120 ) ) - { - e_tile = _a120[ _k120 ]; - a_original_positions[ a_original_positions.size ] = e_tile.origin; - _k120 = getNextArrayKey( _a120, _k120 ); - } - a_unused_tiles = getentarray( "ice_ceiling_tile", "script_noteworthy" ); - n_total_tiles = a_unused_tiles.size; - _a127 = a_original_positions; - _k127 = getFirstArrayKey( _a127 ); - while ( isDefined( _k127 ) ) - { - v_pos = _a127[ _k127 ]; - e_tile = random( a_unused_tiles ); - arrayremovevalue( a_unused_tiles, e_tile, 0 ); - e_tile moveto( v_pos, 0,5, 0,1, 0,1 ); - e_tile waittill( "movedone" ); - _k127 = getNextArrayKey( _a127, _k127 ); - } -/# - assert( a_unused_tiles.size == ( n_total_tiles - a_original_positions.size ) ); -#/ - array_delete( a_unused_tiles ); -} - -reset_tiles() -{ - a_ceiling_tile_brushes = getentarray( "ice_ceiling_tile", "script_noteworthy" ); - _a144 = a_ceiling_tile_brushes; - _k144 = getFirstArrayKey( _a144 ); - while ( isDefined( _k144 ) ) - { - tile = _a144[ _k144 ]; - tile thread ceiling_tile_flip( 1 ); - _k144 = getNextArrayKey( _a144, _k144 ); - } -} - -update_ternary_display() -{ - a_ice_ternary_digit_brushes = getentarray( "ice_chamber_digit", "targetname" ); - level endon( "ice_puzzle_1_complete" ); - while ( 1 ) - { - level waittill( "update_ice_chamber_digits", newval ); - _a160 = a_ice_ternary_digit_brushes; - _k160 = getFirstArrayKey( _a160 ); - while ( isDefined( _k160 ) ) - { - digit = _a160[ _k160 ]; - digit ghost(); - if ( isDefined( newval ) ) - { - digit_slot = int( digit.script_noteworthy ); - shown_value = level.ternary_digits[ newval ][ digit_slot ]; - digit_value = int( digit.script_string ); - if ( shown_value == digit_value ) - { - digit show(); - } - } - _k160 = getNextArrayKey( _a160, _k160 ); - } - } -} - -change_ice_gem_value() -{ - ice_gem = getent( "ice_chamber_gem", "targetname" ); - if ( level.unsolved_tiles.size != 0 ) - { - correct_tile = random( level.unsolved_tiles ); - ice_gem.value = correct_tile.value; - level notify( "update_ice_chamber_digits" ); - } - else - { - level notify( "update_ice_chamber_digits" ); - } -} - -process_gem_shooting() -{ - level endon( "ice_puzzle_1_complete" ); - ice_gem = getent( "ice_chamber_gem", "targetname" ); - ice_gem.value = -1; - ice_gem setcandamage( 1 ); - while ( 1 ) - { - self waittill( "damage", damage, attacker, direction_vec, point, mod, tagname, modelname, partname, weaponname ); - if ( weaponname == "staff_water_zm" ) - { - change_ice_gem_value(); - } - } -} - -ice_puzzle_1_run() -{ - level thread process_gem_shooting(); - change_ice_gem_value(); -} - -ceiling_tile_flip( b_flip_to_tile_side ) -{ - if ( !isDefined( b_flip_to_tile_side ) ) - { - b_flip_to_tile_side = !self.showing_tile_side; - } - if ( b_flip_to_tile_side == self.showing_tile_side ) - { - return; - } - self.showing_tile_side = !self.showing_tile_side; - self rotateroll( 180, 0,5, 0,1, 0,1 ); - self playsound( "zmb_squest_ice_tile_flip" ); - if ( !self.showing_tile_side ) - { - arrayremovevalue( level.unsolved_tiles, self, 0 ); - } - else - { - level.unsolved_tiles[ level.unsolved_tiles.size ] = self; - } - if ( level.unsolved_tiles.size == 0 && !flag( "ice_puzzle_1_complete" ) ) - { - self thread maps/mp/zm_tomb_vo::say_puzzle_completion_line( 4 ); - flag_set( "ice_puzzle_1_complete" ); - } - self waittill( "rotatedone" ); -} - -ceiling_tile_process_damage() -{ - level endon( "ice_puzzle_1_complete" ); - ice_gem = getent( "ice_chamber_gem", "targetname" ); - self setcandamage( 1 ); - ice_gem setcandamage( 1 ); - while ( 1 ) - { - self waittill( "damage", damage, attacker, direction_vec, point, mod, tagname, modelname, partname, weaponname ); - if ( issubstr( weaponname, "water" ) && self.showing_tile_side && !flag( "ice_tile_flipping" ) ) - { - level notify( "vo_try_puzzle_water1" ); - flag_set( "ice_tile_flipping" ); - if ( ice_gem.value == self.value ) - { - level notify( "vo_puzzle_good" ); - self ceiling_tile_flip( 0 ); - rumble_nearby_players( self.origin, 1500, 2 ); - wait 0,2; - } - else - { - level notify( "vo_puzzle_bad" ); - reset_tiles(); - rumble_nearby_players( self.origin, 1500, 2 ); - wait 2; - } - change_ice_gem_value(); - flag_clear( "ice_tile_flipping" ); - continue; - } - else - { - level notify( "vo_puzzle_confused" ); - } - } -} - -ice_puzzle_2_init() -{ -} - -ice_puzzle_2_run() -{ - a_stone_positions = getstructarray( "puzzle_stone_water", "targetname" ); - level.ice_stones_remaining = a_stone_positions.size; - _a328 = a_stone_positions; - _k328 = getFirstArrayKey( _a328 ); - while ( isDefined( _k328 ) ) - { - s_stone = _a328[ _k328 ]; - s_stone thread ice_stone_run(); - wait_network_frame(); - _k328 = getNextArrayKey( _a328, _k328 ); - } -} - -ice_stone_run() -{ - v_up = anglesToUp( self.angles ); - v_spawn_pos = self.origin - ( 64 * v_up ); - self.e_model = spawn( "script_model", v_spawn_pos ); - self.e_model.angles = self.angles; - self.e_model setmodel( "p6_zm_tm_note_rock_01_anim" ); - self.e_model moveto( self.origin, 1, 0,5, 0,5 ); - playfx( level._effect[ "digging" ], self.origin ); - self.e_model setcandamage( 1 ); - has_tried = 0; - while ( !flag( "ice_puzzle_2_complete" ) ) - { - self.e_model waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); - level notify( "vo_try_puzzle_water2" ); - if ( issubstr( weaponname, "water" ) ) - { - level notify( "vo_puzzle_good" ); - break; - } - else if ( has_tried ) - { - level notify( "vo_puzzle_bad" ); - } - has_tried = 1; - } - self.e_model setclientfield( "stone_frozen", 1 ); - playsoundatposition( "zmb_squest_ice_stone_freeze", self.origin ); - while ( !flag( "ice_puzzle_2_complete" ) ) - { - self.e_model waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); - if ( !issubstr( weaponname, "staff" ) && issubstr( type, "BULLET" ) ) - { - level notify( "vo_puzzle_good" ); - break; - } - else level notify( "vo_puzzle_confused" ); - } - self.e_model delete(); - playfx( level._effect[ "ice_explode" ], self.origin, anglesToForward( self.angles ), anglesToUp( self.angles ) ); - playsoundatposition( "zmb_squest_ice_stone_shatter", self.origin ); - level.ice_stones_remaining--; - - while ( level.ice_stones_remaining <= 0 && !flag( "ice_puzzle_2_complete" ) ) - { - flag_set( "ice_puzzle_2_complete" ); - e_player = get_closest_player( self.origin ); - e_player thread maps/mp/zm_tomb_vo::say_puzzle_completion_line( 4 ); - level thread play_puzzle_stinger_on_all_players(); - level.weather_snow = 5; - level.weather_rain = 0; - _a408 = getplayers(); - _k408 = getFirstArrayKey( _a408 ); - while ( isDefined( _k408 ) ) - { - player = _a408[ _k408 ]; - player set_weather_to_player(); - _k408 = getNextArrayKey( _a408, _k408 ); - } - wait 5; - level.weather_snow = 0; - level.weather_rain = 0; - _a419 = getplayers(); - _k419 = getFirstArrayKey( _a419 ); - while ( isDefined( _k419 ) ) - { - player = _a419[ _k419 ]; - player set_weather_to_player(); - _k419 = getNextArrayKey( _a419, _k419 ); - } - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_standard.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_standard.gsc deleted file mode 100644 index a9ada49..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_standard.gsc +++ /dev/null @@ -1,28 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -precache() //checked matches cerberus output -{ -} - -main() //checked matches cerberus output -{ - maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "tomb" ); - maps/mp/zombies/_zm_game_module::set_current_game_module( level.game_module_standard_index ); - flag_wait( "initial_blackscreen_passed" ); - flag_set( "power_on" ); - zm_treasure_chest_init(); -} - -zm_treasure_chest_init() //checked matches cerberus output -{ - chest1 = getstruct( "start_chest", "script_noteworthy" ); - level.chests = []; - level.chests[ level.chests.size ] = chest1; - maps/mp/zombies/_zm_magicbox::treasure_chest_init( "start_chest" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_tank.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_tank.gsc deleted file mode 100644 index c787a23..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_tank.gsc +++ /dev/null @@ -1,1835 +0,0 @@ -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_weap_staff_fire; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/gametypes_zm/_hud; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zm_tomb_amb; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zm_tomb_vo; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_craftables; -#include maps/mp/_utility; -#include common_scripts/utility; - -#using_animtree( "zm_tomb_tank" ); - -tank_precache() -{ -} - -init() -{ - registerclientfield( "vehicle", "tank_tread_fx", 14000, 1, "int" ); - registerclientfield( "vehicle", "tank_flamethrower_fx", 14000, 2, "int" ); - registerclientfield( "vehicle", "tank_cooldown_fx", 14000, 2, "int" ); - tank_precache(); - onplayerconnect_callback( ::onplayerconnect ); - level.enemy_location_override_func = ::enemy_location_override; - level.adjust_enemyoverride_func = ::adjust_enemyoverride; - level.zm_mantle_over_40_move_speed_override = ::zm_mantle_over_40_move_speed_override; - level.vh_tank = getent( "tank", "targetname" ); - level.vh_tank tank_setup(); - level.vh_tank thread tankuseanimtree(); - level.vh_tank thread tank_discovery_vo(); - level thread maps/mp/zm_tomb_vo::watch_occasional_line( "tank", "tank_flame_zombie", "vo_tank_flame_zombie" ); - level thread maps/mp/zm_tomb_vo::watch_occasional_line( "tank", "tank_leave", "vo_tank_leave" ); - level thread maps/mp/zm_tomb_vo::watch_occasional_line( "tank", "tank_cooling", "vo_tank_cooling" ); -} - -onplayerconnect() -{ - self thread onplayerspawned(); -} - -onplayerspawned() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self.b_already_on_tank = 0; - } -} - -tank_discovery_vo() -{ - max_dist_sq = 640000; - flag_wait( "activate_zone_village_0" ); - while ( 1 ) - { - a_players = getplayers(); - _a89 = a_players; - _k89 = getFirstArrayKey( _a89 ); - while ( isDefined( _k89 ) ) - { - e_player = _a89[ _k89 ]; - dist_sq = distance2dsquared( level.vh_tank.origin, e_player.origin ); - height_diff = abs( level.vh_tank.origin[ 2 ] - e_player.origin[ 2 ] ); - if ( dist_sq < max_dist_sq && height_diff < 150 && isDefined( e_player.isspeaking ) && !e_player.isspeaking ) - { - e_player maps/mp/zombies/_zm_audio::create_and_play_dialog( "tank", "discover_tank" ); - return; - } - _k89 = getNextArrayKey( _a89, _k89 ); - } - wait 0,1; - } -} - -tank_drop_powerups() -{ - flag_wait( "start_zombie_round_logic" ); - a_drop_nodes = []; - i = 0; - while ( i < 3 ) - { - drop_num = i + 1; - a_drop_nodes[ i ] = getvehiclenode( "tank_powerup_drop_" + drop_num, "script_noteworthy" ); - a_drop_nodes[ i ].next_drop_round = level.round_number + i; - s_drop = getstruct( "tank_powerup_drop_" + drop_num, "targetname" ); - a_drop_nodes[ i ].drop_pos = s_drop.origin; - i++; - } - a_possible_powerups = array( "nuke", "full_ammo", "zombie_blood", "insta_kill", "fire_sale", "double_points" ); - while ( 1 ) - { - self ent_flag_wait( "tank_moving" ); - _a129 = a_drop_nodes; - _k129 = getFirstArrayKey( _a129 ); - while ( isDefined( _k129 ) ) - { - node = _a129[ _k129 ]; - dist_sq = distance2dsquared( node.origin, self.origin ); - if ( dist_sq < 250000 ) - { - a_players = get_players_on_tank( 1 ); - if ( a_players.size > 0 ) - { - if ( level.staff_part_count[ "elemental_staff_lightning" ] == 0 && level.round_number >= node.next_drop_round ) - { - str_powerup = random( a_possible_powerups ); - level thread maps/mp/zombies/_zm_powerups::specific_powerup_drop( str_powerup, node.drop_pos ); - node.next_drop_round = level.round_number + randomintrange( 8, 12 ); - break; - } - else - { - level notify( "sam_clue_tank" ); - } - } - } - _k129 = getNextArrayKey( _a129, _k129 ); - } - wait 2; - } -} - -zm_mantle_over_40_move_speed_override() -{ - traversealias = "barrier_walk"; - switch( self.zombie_move_speed ) - { - case "chase_bus": - traversealias = "barrier_sprint"; - break; - default: -/# - assertmsg( "Zombie move speed of '" + self.zombie_move_speed + "' is not supported for mantle_over_40." ); -#/ - } - return traversealias; -} - -init_animtree() -{ - scriptmodelsuseanimtree( -1 ); -} - -tankuseanimtree() -{ - self useanimtree( -1 ); -} - -drawtag( tag, opcolor ) -{ -/# - org = self gettagorigin( tag ); - ang = self gettagangles( tag ); - box( org, vectorScale( ( 0, 0, 1 ), 8 ), vectorScale( ( 0, 0, 1 ), 8 ), ang[ 1 ], opcolor, 1, 0, 1 ); -#/ -} - -draw_tank_tag( tag, opcolor ) -{ -/# - self endon( "death" ); - for ( ;; ) - { - if ( self tank_tag_is_valid( tag ) ) - { - drawtag( tag.str_tag, vectorScale( ( 0, 0, 1 ), 255 ) ); - } - else - { - drawtag( tag.str_tag, vectorScale( ( 0, 0, 1 ), 255 ) ); - } - wait 0,05; -#/ - } -} - -tank_debug_tags() -{ -/# - setdvar( "debug_tank", "off" ); - adddebugcommand( "devgui_cmd "Zombies:2/Tomb:1/Tank Debug:5" "debug_tank on"\n" ); - flag_wait( "start_zombie_round_logic" ); - a_spots = getstructarray( "tank_jump_down_spots", "script_noteworthy" ); - while ( 1 ) - { - while ( getDvar( "debug_tank" ) == "on" ) - { - if ( isDefined( self.tags_drawing ) && !self.tags_drawing ) - { - _a224 = self.a_tank_tags; - _k224 = getFirstArrayKey( _a224 ); - while ( isDefined( _k224 ) ) - { - s_tag = _a224[ _k224 ]; - self thread draw_tank_tag( s_tag ); - _k224 = getNextArrayKey( _a224, _k224 ); - } - self.tags_drawing = 1; - } - ang = self.angles; - _a232 = a_spots; - _k232 = getFirstArrayKey( _a232 ); - while ( isDefined( _k232 ) ) - { - s_spot = _a232[ _k232 ]; - org = self tank_get_jump_down_offset( s_spot ); - box( org, vectorScale( ( 0, 0, 1 ), 4 ), vectorScale( ( 0, 0, 1 ), 4 ), ang[ 1 ], vectorScale( ( 0, 0, 1 ), 128 ), 1, 0, 1 ); - _k232 = getNextArrayKey( _a232, _k232 ); - } - a_zombies = get_round_enemy_array(); - _a239 = a_zombies; - _k239 = getFirstArrayKey( _a239 ); - while ( isDefined( _k239 ) ) - { - e_zombie = _a239[ _k239 ]; - if ( isDefined( e_zombie.tank_state ) ) - { - print3d( e_zombie.origin + vectorScale( ( 0, 0, 1 ), 60 ), e_zombie.tank_state, vectorScale( ( 0, 0, 1 ), 255 ), 1 ); - } - _k239 = getNextArrayKey( _a239, _k239 ); - } - } - wait 0,05; -#/ - } -} - -tank_jump_down_store_offset( s_pos ) -{ - v_up = anglesToUp( self.angles ); - v_right = anglesToRight( self.angles ); - v_fwd = anglesToForward( self.angles ); - offset = s_pos.origin - self.origin; - s_pos.tank_offset = ( vectordot( v_fwd, offset ), vectordot( v_right, offset ), vectordot( v_up, offset ) ); -} - -tank_get_jump_down_offset( s_pos ) -{ - v_up = anglesToUp( self.angles ); - v_right = anglesToRight( self.angles ); - v_fwd = anglesToForward( self.angles ); - v_offset = s_pos.tank_offset; - return ( ( self.origin + ( v_offset[ 0 ] * v_fwd ) ) + ( v_offset[ 1 ] * v_right ) ) + ( v_offset[ 2 ] * v_up ); -} - -tank_setup() -{ - self ent_flag_init( "tank_moving" ); - self ent_flag_init( "tank_activated" ); - self ent_flag_init( "tank_cooldown" ); - level.tank_boxes_enabled = 0; - self.tag_occupied = []; - self.health = 1000; - self.n_players_on = 0; - self.chase_pos_time = 0; - self hidepart( "tag_flamethrower" ); - self setmovingplatformenabled( 1 ); - self.e_roof = getent( "vol_on_tank_watch", "targetname" ); - self.e_roof enablelinkto(); - self.e_roof linkto( self ); - self.t_use = getent( "trig_use_tank", "targetname" ); - self.t_use enablelinkto(); - self.t_use linkto( self ); - self.t_use sethintstring( &"ZM_TOMB_X2AT", 500 ); - self.t_kill = spawn( "trigger_box", ( -8192, -4300, 0 ), 0, 200, 150, 128 ); - self.t_kill enablelinkto(); - self.t_kill linkto( self ); - m_tank_path_blocker = getent( "tank_path_blocker", "targetname" ); - m_tank_path_blocker delete(); - a_tank_jump_down_spots = getstructarray( "tank_jump_down_spots", "script_noteworthy" ); - _a312 = a_tank_jump_down_spots; - _k312 = getFirstArrayKey( _a312 ); - while ( isDefined( _k312 ) ) - { - s_spot = _a312[ _k312 ]; - self tank_jump_down_store_offset( s_spot ); - _k312 = getNextArrayKey( _a312, _k312 ); - } - self thread players_on_tank_update(); - self thread zombies_watch_tank(); - self thread tank_station(); - self thread tank_run_flamethrowers(); - self thread do_treadfx(); - self thread do_cooldown_fx(); - self thread tank_drop_powerups(); -/# - self thread tank_debug_tags(); -#/ - self playloopsound( "zmb_tank_idle", 0,5 ); -} - -do_cooldown_fx() -{ - self endon( "death" ); - flag_wait( "start_zombie_round_logic" ); - while ( 1 ) - { - self setclientfield( "tank_cooldown_fx", 2 ); - self ent_flag_wait( "tank_moving" ); - self setclientfield( "tank_cooldown_fx", 0 ); - self ent_flag_wait( "tank_cooldown" ); - self setclientfield( "tank_cooldown_fx", 1 ); - self ent_flag_waitopen( "tank_cooldown" ); - } -} - -do_treadfx() -{ - self endon( "death" ); - while ( 1 ) - { - self ent_flag_wait( "tank_moving" ); - self setclientfield( "tank_tread_fx", 1 ); - self ent_flag_waitopen( "tank_moving" ); - self setclientfield( "tank_tread_fx", 0 ); - } -} - -disconnect_reconnect_paths( vh_tank ) -{ - self endon( "death" ); - while ( 1 ) - { - self disconnectpaths(); - wait 1; - while ( vh_tank getspeedmph() < 1 ) - { - wait 0,05; - } - self connectpaths(); - wait 0,5; - } -} - -tank_rumble_update() -{ - while ( self.b_already_on_tank ) - { - if ( level.vh_tank ent_flag( "tank_moving" ) ) - { - self setclientfieldtoplayer( "player_rumble_and_shake", 6 ); - } - else - { - self setclientfieldtoplayer( "player_rumble_and_shake", 0 ); - } - wait 1; - } - self setclientfieldtoplayer( "player_rumble_and_shake", 0 ); -} - -players_on_tank_update() -{ - flag_wait( "start_zombie_round_logic" ); - self thread tank_disconnect_paths(); - while ( 1 ) - { - a_players = getplayers(); - _a422 = a_players; - _k422 = getFirstArrayKey( _a422 ); - while ( isDefined( _k422 ) ) - { - e_player = _a422[ _k422 ]; - if ( is_player_valid( e_player ) ) - { - if ( isDefined( e_player.b_already_on_tank ) && !e_player.b_already_on_tank && e_player entity_on_tank() ) - { - e_player.b_already_on_tank = 1; - self.n_players_on++; - if ( self ent_flag( "tank_cooldown" ) ) - { - level notify( "vo_tank_cooling" ); - } - e_player thread tank_rumble_update(); - e_player thread tank_rides_around_map_achievement_watcher(); - e_player thread tank_force_crouch_from_prone_after_on_tank(); - e_player allowcrouch( 1 ); - e_player allowprone( 0 ); - break; - } - else - { - if ( isDefined( e_player.b_already_on_tank ) && e_player.b_already_on_tank && !e_player entity_on_tank() ) - { - e_player.b_already_on_tank = 0; - self.n_players_on--; - - level notify( "vo_tank_leave" ); - e_player notify( "player_jumped_off_tank" ); - e_player setclientfieldtoplayer( "player_rumble_and_shake", 0 ); - e_player allowprone( 1 ); - } - } - } - _k422 = getNextArrayKey( _a422, _k422 ); - } - wait 0,05; - } -} - -tank_force_crouch_from_prone_after_on_tank() -{ - self endon( "disconnect" ); - self endon( "bled_out" ); - wait 1; - if ( self getstance() == "prone" ) - { - self setstance( "crouch" ); - } -} - -tank_rides_around_map_achievement_watcher() -{ - self endon( "death_or_disconnect" ); - self endon( "player_jumped_off_tank" ); - if ( level.vh_tank ent_flag( "tank_moving" ) ) - { - level.vh_tank ent_flag_waitopen( "tank_moving" ); - } - str_starting_location = level.vh_tank.str_location_current; - level.vh_tank ent_flag_wait( "tank_moving" ); - level.vh_tank ent_flag_waitopen( "tank_moving" ); - self notify( "rode_tank_around_map" ); -} - -entity_on_tank() -{ - if ( self istouching( level.vh_tank.e_roof ) ) - { - return 1; - } - return 0; -} - -tank_station() -{ - self thread tank_watch_use(); - self thread tank_movement(); - a_call_boxes = getentarray( "trig_tank_station_call", "targetname" ); - _a518 = a_call_boxes; - _k518 = getFirstArrayKey( _a518 ); - while ( isDefined( _k518 ) ) - { - t_call_box = _a518[ _k518 ]; - t_call_box thread tank_call_box(); - _k518 = getNextArrayKey( _a518, _k518 ); - } - self.t_use waittill( "trigger" ); - level.tank_boxes_enabled = 1; -} - -tank_left_behind() -{ - wait 4; - n_valid_dist_sq = 1000000; - a_riders = get_players_on_tank( 1 ); - if ( a_riders.size == 0 ) - { - return; - } - e_rider = random( a_riders ); - a_players = getplayers(); - a_victims = []; - v_tank_fwd = anglesToForward( self.angles ); - _a547 = a_players; - _k547 = getFirstArrayKey( _a547 ); - while ( isDefined( _k547 ) ) - { - e_player = _a547[ _k547 ]; - if ( isDefined( e_player.b_already_on_tank ) && e_player.b_already_on_tank ) - { - } - else - { - if ( distance2dsquared( e_player.origin, self.origin ) > n_valid_dist_sq ) - { - break; - } - else v_to_tank = self.origin - e_player.origin; - v_to_tank = vectornormalize( v_to_tank ); - if ( vectordot( v_to_tank, v_tank_fwd ) < 0 ) - { - break; - } - else v_player_fwd = anglesToForward( e_player.angles ); - if ( vectordot( v_player_fwd, v_to_tank ) < 0 ) - { - break; - } - else - { - a_victims[ a_victims.size ] = e_player; - } - } - _k547 = getNextArrayKey( _a547, _k547 ); - } - if ( a_victims.size == 0 ) - { - return; - } - e_victim = random( a_victims ); - maps/mp/zm_tomb_vo::tank_left_behind_vo( e_victim, e_rider ); -} - -tank_watch_use() -{ - while ( 1 ) - { - self.t_use waittill( "trigger", e_player ); - level thread maps/mp/zm_tomb_amb::sndplaystingerwithoverride( "mus_event_tank_ride", 70 ); - cooling_down = self ent_flag( "tank_cooldown" ); - if ( is_player_valid( e_player ) && e_player.score >= 500 && !cooling_down ) - { - self ent_flag_set( "tank_activated" ); - self ent_flag_set( "tank_moving" ); - e_player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "tank", "tank_buy" ); - self thread tank_left_behind(); - e_player maps/mp/zombies/_zm_score::minus_to_player_score( 500 ); - self waittill( "tank_stop" ); - self playsound( "zmb_tank_stop" ); - self stoploopsound( 1,5 ); - if ( isDefined( self.b_call_box_used ) && self.b_call_box_used ) - { - self.b_call_box_used = 0; - self activate_tank_wait_with_no_cost(); - } - } - } -} - -activate_tank_wait_with_no_cost() -{ - self endon( "call_box_used" ); - self.b_no_cost = 1; - self.t_use waittill( "trigger", e_player ); - self ent_flag_set( "tank_activated" ); - self ent_flag_set( "tank_moving" ); - self.b_no_cost = 0; -} - -tank_call_box() -{ - while ( 1 ) - { - self waittill( "trigger", e_player ); - cooling_down = level.vh_tank ent_flag( "tank_cooldown" ); - if ( !level.vh_tank ent_flag( "tank_activated" ) && e_player.score >= 500 && !cooling_down ) - { - level.vh_tank notify( "call_box_used" ); - level.vh_tank.b_call_box_used = 1; - e_switch = getent( self.target, "targetname" ); - self setinvisibletoall(); - wait 0,05; - e_switch rotatepitch( -180, 0,5 ); - e_switch waittill( "rotatedone" ); - e_switch rotatepitch( 180, 0,5 ); - level.vh_tank.t_use useby( e_player ); - level.vh_tank waittill( "tank_stop" ); - } - } -} - -tank_call_boxes_update() -{ - str_loc = level.vh_tank.str_location_current; - a_trigs = getentarray( "trig_tank_station_call", "targetname" ); - moving = level.vh_tank ent_flag( "tank_moving" ); - cooling = level.vh_tank ent_flag( "tank_cooldown" ); - _a683 = a_trigs; - _k683 = getFirstArrayKey( _a683 ); - while ( isDefined( _k683 ) ) - { - trig = _a683[ _k683 ]; - at_this_station = trig.script_noteworthy == ( "call_box_" + str_loc ); - if ( moving ) - { - trig setvisibletoall(); - trig sethintstring( &"ZM_TOMB_TNKM" ); - } - else if ( !level.tank_boxes_enabled || at_this_station ) - { - trig setinvisibletoall(); - } - else - { - if ( cooling ) - { - trig setvisibletoall(); - trig sethintstring( &"ZM_TOMB_TNKC" ); - break; - } - else - { - trig setvisibletoall(); - trig sethintstring( &"ZM_TOMB_X2CT", 500 ); - } - } - _k683 = getNextArrayKey( _a683, _k683 ); - } -} - -tank_movement() -{ - n_path_start = getvehiclenode( "tank_start", "targetname" ); - self attachpath( n_path_start ); - self startpath(); - self thread follow_path( n_path_start ); - self setspeedimmediate( 0 ); - self.a_locations = array( "village", "bunkers" ); - n_location_index = 0; - self.str_location_current = self.a_locations[ n_location_index ]; - tank_call_boxes_update(); - while ( 1 ) - { - self ent_flag_wait( "tank_activated" ); -/# - iprintln( "The tank is moving." ); -#/ - self thread tank_connect_paths(); - self playsound( "evt_tank_call" ); - self setspeedimmediate( 8 ); - self.t_use setinvisibletoall(); - tank_call_boxes_update(); - self thread tank_kill_players(); - self thread tank_cooldown_timer(); - self waittill( "tank_stop" ); - self ent_flag_set( "tank_cooldown" ); - self.t_use setvisibletoall(); - self.t_use sethintstring( &"ZM_TOMB_TNKC" ); - self ent_flag_clear( "tank_moving" ); - self thread tank_disconnect_paths(); - self setspeedimmediate( 0 ); - n_location_index++; - if ( n_location_index == self.a_locations.size ) - { - n_location_index = 0; - } - self.str_location_current = self.a_locations[ n_location_index ]; - tank_call_boxes_update(); - self wait_for_tank_cooldown(); - self ent_flag_clear( "tank_cooldown" ); - if ( isDefined( self.b_no_cost ) && self.b_no_cost ) - { - self.t_use sethintstring( &"ZM_TOMB_X2ATF" ); - } - else - { - self.t_use sethintstring( &"ZM_TOMB_X2AT", 500 ); - } - self ent_flag_clear( "tank_activated" ); - tank_call_boxes_update(); - } -} - -tank_disconnect_paths() -{ - self endon( "death" ); - while ( self getspeedmph() > 0 ) - { - wait 0,05; - } - self disconnectpaths(); -} - -tank_connect_paths() -{ - self endon( "death" ); - self connectpaths(); -} - -tank_kill_players() -{ - self endon( "tank_cooldown" ); - while ( 1 ) - { - self.t_kill waittill( "trigger", player ); - player thread tank_ran_me_over(); - wait 0,05; - } -} - -tank_ran_me_over() -{ - self disableinvulnerability(); - self dodamage( self.health + 1000, self.origin ); - a_nodes = getnodesinradiussorted( self.origin, 256, 0, 72, "path", 15 ); - _a838 = a_nodes; - _k838 = getFirstArrayKey( _a838 ); - while ( isDefined( _k838 ) ) - { - node = _a838[ _k838 ]; - str_zone = maps/mp/zombies/_zm_zonemgr::get_zone_from_position( node.origin ); - if ( !isDefined( str_zone ) ) - { - } - else - { - if ( isDefined( node.b_player_downed_here ) && !node.b_player_downed_here ) - { - start_wait = 0; - black_screen_wait = 4; - fade_in_time = 0,01; - fade_out_time = 0,2; - self thread maps/mp/gametypes_zm/_hud::fadetoblackforxsec( start_wait, black_screen_wait, fade_in_time, fade_out_time, "black" ); - node.b_player_downed_here = 1; - e_linker = spawn( "script_origin", self.origin ); - self playerlinkto( e_linker ); - e_linker moveto( node.origin + vectorScale( ( 0, 0, 1 ), 8 ), 1 ); - e_linker wait_to_unlink( self ); - node.b_player_downed_here = undefined; - e_linker delete(); - return; - } - } - _k838 = getNextArrayKey( _a838, _k838 ); - } -} - -wait_to_unlink( player ) -{ - player endon( "disconnect" ); - wait 4; - self unlink(); -} - -tank_cooldown_timer() -{ - self.n_cooldown_timer = 0; - str_location_original = self.str_location_current; - self playsound( "zmb_tank_start" ); - self stoploopsound( 0,4 ); - wait 0,4; - self playloopsound( "zmb_tank_loop", 1 ); - while ( str_location_original == self.str_location_current ) - { - self.n_cooldown_timer += self.n_players_on * 0,05; - wait 0,05; - } -} - -wait_for_tank_cooldown() -{ - self thread snd_fuel(); - if ( self.n_cooldown_timer < 2 ) - { - self.n_cooldown_timer = 2; - } - else - { - if ( self.n_cooldown_timer > 120 ) - { - self.n_cooldown_timer = 120; - } - } - wait self.n_cooldown_timer; - level notify( "stp_cd" ); - self playsound( "zmb_tank_ready" ); - self playloopsound( "zmb_tank_idle" ); -} - -snd_fuel() -{ - snd_cd_ent = spawn( "script_origin", self.origin ); - snd_cd_ent linkto( self ); - wait 4; - snd_cd_ent playsound( "zmb_tank_fuel_start" ); - wait 0,5; - snd_cd_ent playloopsound( "zmb_tank_fuel_loop" ); - level waittill( "stp_cd" ); - snd_cd_ent stoploopsound( 0,5 ); - snd_cd_ent playsound( "zmb_tank_fuel_end" ); - wait 2; - snd_cd_ent delete(); -} - -follow_path( n_path_start ) -{ - self endon( "death" ); -/# - assert( isDefined( n_path_start ), "vehicle_path() called without a path" ); -#/ - self notify( "newpath" ); - self endon( "newpath" ); - n_next_point = n_path_start; - while ( isDefined( n_next_point ) ) - { - self.n_next_node = getvehiclenode( n_next_point.target, "targetname" ); - self waittill( "reached_node", n_next_point ); - self.n_current = n_next_point; - n_next_point notify( "trigger" ); - if ( isDefined( n_next_point.script_noteworthy ) ) - { - self notify( n_next_point.script_noteworthy ); - self notify( "noteworthy" ); - } - waittillframeend; - } -} - -tank_tag_array_setup() -{ - a_tank_tags = []; - a_tank_tags[ 0 ] = spawnstruct(); - a_tank_tags[ 0 ].str_tag = "window_left_1_jmp_jnt"; - a_tank_tags[ 0 ].disabled_at_bunker = 1; - a_tank_tags[ 0 ].disabled_at_church = 1; - a_tank_tags[ 0 ].side = "left"; - a_tank_tags[ 1 ] = spawnstruct(); - a_tank_tags[ 1 ].str_tag = "window_left_2_jmp_jnt"; - a_tank_tags[ 1 ].disabled_at_bunker = 1; - a_tank_tags[ 1 ].disabled_at_church = 1; - a_tank_tags[ 1 ].side = "left"; - a_tank_tags[ 2 ] = spawnstruct(); - a_tank_tags[ 2 ].str_tag = "window_left_3_jmp_jnt"; - a_tank_tags[ 2 ].disabled_at_bunker = 1; - a_tank_tags[ 2 ].disabled_at_church = 1; - a_tank_tags[ 2 ].side = "left"; - a_tank_tags[ 3 ] = spawnstruct(); - a_tank_tags[ 3 ].str_tag = "window_right_front_jmp_jnt"; - a_tank_tags[ 3 ].side = "front"; - a_tank_tags[ 4 ] = spawnstruct(); - a_tank_tags[ 4 ].str_tag = "window_right_1_jmp_jnt"; - a_tank_tags[ 4 ].side = "right"; - a_tank_tags[ 5 ] = spawnstruct(); - a_tank_tags[ 5 ].str_tag = "window_right_2_jmp_jnt"; - a_tank_tags[ 5 ].disabled_at_church = 1; - a_tank_tags[ 5 ].side = "right"; - a_tank_tags[ 6 ] = spawnstruct(); - a_tank_tags[ 6 ].str_tag = "window_right_3_jmp_jnt"; - a_tank_tags[ 6 ].disabled_at_church = 1; - a_tank_tags[ 6 ].side = "right"; - a_tank_tags[ 7 ] = spawnstruct(); - a_tank_tags[ 7 ].str_tag = "window_left_rear_jmp_jnt"; - a_tank_tags[ 7 ].side = "rear"; - return a_tank_tags; -} - -get_players_on_tank( valid_targets_only ) -{ - if ( !isDefined( valid_targets_only ) ) - { - valid_targets_only = 0; - } - a_players_on_tank = []; - a_players = getplayers(); - _a1032 = a_players; - _k1032 = getFirstArrayKey( _a1032 ); - while ( isDefined( _k1032 ) ) - { - e_player = _a1032[ _k1032 ]; - if ( is_player_valid( e_player ) && isDefined( e_player.b_already_on_tank ) && e_player.b_already_on_tank ) - { - if ( !valid_targets_only || isDefined( e_player.ignoreme ) && !e_player.ignoreme && is_player_valid( e_player ) ) - { - a_players_on_tank[ a_players_on_tank.size ] = e_player; - } - } - _k1032 = getNextArrayKey( _a1032, _k1032 ); - } - return a_players_on_tank; -} - -mechz_tag_array_setup() -{ - a_mechz_tags = []; - a_mechz_tags[ 0 ] = spawnstruct(); - a_mechz_tags[ 0 ].str_tag = "tag_mechz_1"; - a_mechz_tags[ 0 ].in_use = 0; - a_mechz_tags[ 0 ].in_use_by = undefined; - a_mechz_tags[ 1 ] = spawnstruct(); - a_mechz_tags[ 1 ].str_tag = "tag_mechz_2"; - a_mechz_tags[ 1 ].in_use = 0; - a_mechz_tags[ 1 ].in_use_by = undefined; - a_mechz_tags[ 2 ] = spawnstruct(); - a_mechz_tags[ 2 ].str_tag = "tag_mechz_3"; - a_mechz_tags[ 2 ].in_use = 0; - a_mechz_tags[ 2 ].in_use_by = undefined; - a_mechz_tags[ 3 ] = spawnstruct(); - a_mechz_tags[ 3 ].str_tag = "tag_mechz_4"; - a_mechz_tags[ 3 ].in_use = 0; - a_mechz_tags[ 3 ].in_use_by = undefined; - return a_mechz_tags; -} - -mechz_tag_in_use_cleanup( mechz, tag_struct_index ) -{ - mechz notify( "kill_mechz_tag_in_use_cleanup" ); - mechz endon( "kill_mechz_tag_in_use_cleanup" ); - mechz waittill_any_or_timeout( 30, "death", "kill_ft", "tank_flamethrower_attack_complete" ); - self.a_mechz_tags[ tag_struct_index ].in_use = 0; - self.a_mechz_tags[ tag_struct_index ].in_use_by = undefined; -} - -get_closest_mechz_tag_on_tank( mechz, target_org ) -{ - best_dist = -1; - best_tag_index = undefined; - i = 0; - while ( i < self.a_mechz_tags.size ) - { - if ( self.a_mechz_tags[ i ].in_use && self.a_mechz_tags[ i ].in_use_by != mechz ) - { - i++; - continue; - } - else - { - s_tag = self.a_mechz_tags[ i ]; - tag_org = self gettagorigin( s_tag.str_tag ); - dist = distancesquared( tag_org, target_org ); - if ( dist < best_dist || best_dist < 0 ) - { - best_dist = dist; - best_tag_index = i; - } - } - i++; - } - if ( isDefined( best_tag_index ) ) - { - i = 0; - while ( i < self.a_mechz_tags.size ) - { - if ( self.a_mechz_tags[ i ].in_use && self.a_mechz_tags[ i ].in_use_by == mechz ) - { - self.a_mechz_tags[ i ].in_use = 0; - self.a_mechz_tags[ i ].in_use_by = undefined; - } - i++; - } - self.a_mechz_tags[ best_tag_index ].in_use = 1; - self.a_mechz_tags[ best_tag_index ].in_use_by = mechz; - self thread mechz_tag_in_use_cleanup( mechz, best_tag_index ); - return self.a_mechz_tags[ best_tag_index ].str_tag; - } - return undefined; -} - -tank_tag_is_valid( s_tag, disable_sides ) -{ - if ( !isDefined( disable_sides ) ) - { - disable_sides = 0; - } - if ( disable_sides ) - { - if ( s_tag.side == "right" || s_tag.side == "left" ) - { - return 0; - } - } - if ( self ent_flag( "tank_moving" ) ) - { - if ( s_tag.side == "front" ) - { - return 0; - } - if ( !isDefined( self.n_next_node ) ) - { - return 1; - } - if ( !isDefined( self.n_next_node.script_string ) ) - { - return 1; - } - if ( issubstr( self.n_next_node.script_string, "disable_" + s_tag.side ) ) - { - return 0; - } - else - { - return 1; - } - } - at_church = self.str_location_current == "village"; - at_bunker = self.str_location_current == "bunkers"; - if ( at_church ) - { - if ( isDefined( s_tag.disabled_at_church )return !s_tag.disabled_at_church; - } - else - { - && at_bunker ) - { - if ( isDefined( s_tag.disabled_at_bunker )return !s_tag.disabled_at_bunker; - } - } - return 1; -} - -zombies_watch_tank() -{ - a_tank_tags = tank_tag_array_setup(); - self.a_tank_tags = a_tank_tags; - a_mechz_tags = mechz_tag_array_setup(); - self.a_mechz_tags = a_mechz_tags; - while ( 1 ) - { - a_zombies = get_round_enemy_array(); - _a1198 = a_zombies; - _k1198 = getFirstArrayKey( _a1198 ); - while ( isDefined( _k1198 ) ) - { - e_zombie = _a1198[ _k1198 ]; - if ( !isDefined( e_zombie.tank_state ) ) - { - e_zombie thread tank_zombie_think(); - } - _k1198 = getNextArrayKey( _a1198, _k1198 ); - } - wait_network_frame(); - } -} - -start_chasing_tank() -{ - self.tank_state = "tank_chase"; -} - -stop_chasing_tank() -{ - self.tank_state = "none"; - self.str_tank_tag = undefined; - self.tank_tag = undefined; - self.b_on_tank = 0; - self.tank_re_eval_time = undefined; - self notify( "change_goal" ); - if ( isDefined( self.zombie_move_speed_original ) ) - { - self set_zombie_run_cycle( self.zombie_move_speed_original ); - } -} - -choose_tag_and_chase() -{ - s_tag = self get_closest_valid_tank_tag(); - if ( isDefined( s_tag ) ) - { - self.str_tank_tag = s_tag.str_tag; - self.tank_tag = s_tag; - self.tank_state = "tag_chase"; - } - else - { - wait 1; - } -} - -choose_tag_and_jump_down() -{ - s_tag = self get_closest_valid_tank_tag( 1 ); - if ( isDefined( s_tag ) ) - { - self.str_tank_tag = s_tag.str_tag; - self.tank_tag = getstruct( s_tag.str_tag + "_down_start", "targetname" ); - self.tank_state = "exit_tank"; - self set_zombie_run_cycle( "walk" ); -/# - assert( isDefined( self.tank_tag ) ); -#/ - } - else - { - wait 1; - } -} - -climb_tag() -{ - self endon( "death" ); - self.tank_state = "climbing"; - self.b_on_tank = 1; - str_tag = self.str_tank_tag; - self linkto( level.vh_tank, str_tag ); - v_tag_origin = level.vh_tank gettagorigin( str_tag ); - v_tag_angles = level.vh_tank gettagangles( str_tag ); - str_anim_alias = str_tag; - if ( level.vh_tank ent_flag( "tank_moving" ) && str_tag == "window_left_rear_jmp_jnt" ) - { - str_anim_alias = "window_rear_long_jmp_jnt"; - } - if ( !self.has_legs ) - { - str_anim_alias += "_crawler"; - } - n_anim_index = self getanimsubstatefromasd( "zm_tank_jump_up", str_anim_alias ); - self.b_climbing_tank = 1; - self animscripted( v_tag_origin, v_tag_angles, "zm_tank_jump_up", n_anim_index ); - self zombieanimnotetrackthink( "tank_jump_up" ); - self unlink(); - self.b_climbing_tank = 0; - level.vh_tank tank_mark_tag_occupied( str_tag, self, 0 ); - set_zombie_on_tank(); -} - -set_zombie_on_tank() -{ - self setgoalpos( self.origin ); - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - self.tank_state = "on_tank"; -} - -jump_down_tag() -{ - self endon( "death" ); - self.tank_state = "jumping_down"; - str_tag = self.str_tank_tag; - self linkto( level.vh_tank, str_tag ); - v_tag_origin = level.vh_tank gettagorigin( str_tag ); - v_tag_angles = level.vh_tank gettagangles( str_tag ); - self setgoalpos( v_tag_origin ); - str_anim_alias = str_tag; - if ( !self.has_legs ) - { - str_anim_alias += "_crawler"; - } - n_anim_index = self getanimsubstatefromasd( "zm_tank_jump_down", str_anim_alias ); - self.b_climbing_tank = 1; - self animscripted( v_tag_origin, v_tag_angles, "zm_tank_jump_down", n_anim_index ); - self zombieanimnotetrackthink( "tank_jump_down" ); - self unlink(); - self.b_climbing_tank = 0; - level.vh_tank tank_mark_tag_occupied( str_tag, self, 0 ); - self.pursuing_tank_tag = 0; - stop_chasing_tank(); -} - -watch_zombie_fall_off_tank() -{ - self endon( "death" ); - while ( 1 ) - { - if ( self.tank_state == "on_tank" || self.tank_state == "exit_tank" ) - { - if ( !self entity_on_tank() ) - { - stop_chasing_tank(); - } - wait 0,5; - } - else - { - if ( self.tank_state == "none" ) - { - if ( self entity_on_tank() ) - { - set_zombie_on_tank(); - } - wait 5; - } - } - wait_network_frame(); - } -} - -in_range_2d( v1, v2, range, vert_allowance ) -{ - if ( abs( v1[ 2 ] - v2[ 2 ] ) > vert_allowance ) - { - return 0; - } - return distance2dsquared( v1, v2 ) < ( range * range ); -} - -tank_zombie_think() -{ - self endon( "death" ); - self.tank_state = "none"; - self thread watch_zombie_fall_off_tank(); - think_time = 0,5; - while ( 1 ) - { - a_players_on_tank = get_players_on_tank( 1 ); - tag_range = 32; - if ( level.vh_tank ent_flag( "tank_moving" ) ) - { - tag_range = 64; - } - switch( self.tank_state ) - { - case "none": - if ( !isDefined( self.ai_state ) || self.ai_state != "find_flesh" ) - { - break; - } - else - { - if ( a_players_on_tank.size == 0 ) - { - break; - break; - } - else if ( is_player_valid( self.favoriteenemy ) ) - { - if ( isDefined( self.favoriteenemy.b_already_on_tank ) && self.favoriteenemy.b_already_on_tank ) - { - self start_chasing_tank(); - } - } - else a_players = getplayers(); - a_eligible_players = []; - _a1439 = a_players; - _k1439 = getFirstArrayKey( _a1439 ); - while ( isDefined( _k1439 ) ) - { - e_player = _a1439[ _k1439 ]; - if ( isDefined( e_player.ignoreme ) && !e_player.ignoreme && is_player_valid( e_player ) ) - { - a_eligible_players[ a_eligible_players.size ] = e_player; - } - _k1439 = getNextArrayKey( _a1439, _k1439 ); - } - if ( a_eligible_players.size > 0 ) - { - if ( a_players_on_tank.size == a_players.size ) - { - self.favoriteenemy = random( a_eligible_players ); - break; - } - else - { - self.favoriteenemy = tomb_get_closest_player_using_paths( self.origin, a_eligible_players ); - } - } - break; - break; - case "tank_chase": - if ( a_players_on_tank.size == 0 ) - { - self stop_chasing_tank(); - break; - break; - } - else dist_sq_to_tank = distancesquared( self.origin, level.vh_tank.origin ); - if ( dist_sq_to_tank < 250000 ) - { - self choose_tag_and_chase(); - } - if ( self.has_legs && self.zombie_move_speed != "super_sprint" && isDefined( self.is_traversing ) && !self.is_traversing && self.ai_state == "find_flesh" ) - { - if ( level.vh_tank ent_flag( "tank_moving" ) ) - { - self set_zombie_run_cycle( "super_sprint" ); - self thread zombie_chasing_tank_turn_crawler(); - } - } - break; - break; - case "tag_chase": - if ( !isDefined( self.tank_re_eval_time ) ) - { - self.tank_re_eval_time = 6; - } - else - { - if ( self.tank_re_eval_time <= 0 ) - { - if ( self entity_on_tank() ) - { - self set_zombie_on_tank(); - } - else - { - self stop_chasing_tank(); - } - break; - break; - } - } - else self notify( "stop_path_to_tag" ); - if ( a_players_on_tank.size == 0 ) - { - self stop_chasing_tank(); - break; - break; -} -else dist_sq_to_tank = distancesquared( self.origin, level.vh_tank.origin ); -if ( dist_sq_to_tank > 1000000 || a_players_on_tank.size == 0 ) -{ - start_chasing_tank(); - break; -break; -} -else -{ -v_tag = level.vh_tank gettagorigin( self.str_tank_tag ); -if ( in_range_2d( v_tag, self.origin, tag_range, tag_range ) ) -{ - tag_claimed = level.vh_tank tank_mark_tag_occupied( self.str_tank_tag, self, 1 ); - if ( tag_claimed ) - { - self thread climb_tag(); - } -} -else -{ - self thread update_zombie_goal_pos( self.str_tank_tag, "stop_path_to_tag" ); - self.tank_re_eval_time -= think_time; -} -break; -break; -case "climbing": -case "on_tank": - if ( a_players_on_tank.size == 0 ) - { - choose_tag_and_jump_down(); - } - else if ( !isDefined( self.favoriteenemy ) || !is_player_valid( self.favoriteenemy, 1 ) ) - { - self.favoriteenemy = random( a_players_on_tank ); - } - break; -break; -case "exit_tank": - self notify( "stop_exit_tank" ); - if ( a_players_on_tank.size > 0 ) - { - set_zombie_on_tank(); - break; - break; -} -else v_tag_pos = level.vh_tank tank_get_jump_down_offset( self.tank_tag ); -if ( in_range_2d( v_tag_pos, self.origin, tag_range, tag_range ) ) -{ - tag_claimed = level.vh_tank tank_mark_tag_occupied( self.str_tank_tag, self, 1 ); - if ( tag_claimed ) - { - self thread jump_down_tag(); - } -} -else -{ - self thread update_zombie_goal_pos( self.tank_tag.targetname, "stop_exit_tank" ); - wait 1; -} -break; -break; -case "jumping_down": -} -} -} -wait think_time; -} -} - -update_zombie_goal_pos( str_position, stop_notify ) -{ - self notify( "change_goal" ); - self endon( "death" ); - self endon( "goal" ); - self endon( "near_goal" ); - self endon( "change_goal" ); - if ( isDefined( stop_notify ) ) - { - self endon( stop_notify ); - } - s_script_origin = getstruct( str_position, "targetname" ); - while ( self.tank_state != "none" ) - { - if ( isDefined( s_script_origin ) ) - { - v_origin = level.vh_tank tank_get_jump_down_offset( s_script_origin ); -/# - if ( getDvar( "debug_tank" ) == "on" ) - { - line( self.origin + vectorScale( ( 0, 0, 1 ), 30 ), v_origin ); -#/ - } - } - else - { - v_origin = level.vh_tank gettagorigin( str_position ); - } - self setgoalpos( v_origin ); - wait 0,05; - } -} - -zombie_chasing_tank_turn_crawler() -{ - self notify( "tank_watch_turn_crawler" ); - self endon( "tank_watch_turn_crawler" ); - self endon( "death" ); - while ( self.has_legs ) - { - wait 0,05; - } - self set_zombie_run_cycle( self.zombie_move_speed_original ); -} - -tank_mark_tag_occupied( str_tag, ai_occupier, set_occupied ) -{ - current_occupier = self.tag_occupied[ str_tag ]; - min_dist_sq_to_tag = 1024; - if ( set_occupied ) - { - if ( !isDefined( current_occupier ) ) - { - self.tag_occupied[ str_tag ] = ai_occupier; - return 1; - } - else - { - if ( ai_occupier == current_occupier || !isalive( current_occupier ) ) - { - dist_sq_to_tag = distance2dsquared( ai_occupier.origin, self gettagorigin( str_tag ) ); - if ( dist_sq_to_tag < min_dist_sq_to_tag ) - { - self.tag_occupied[ str_tag ] = ai_occupier; - return 1; - } - } - } - return 0; - } - else - { - if ( !isDefined( current_occupier ) ) - { - return 1; - } - else - { - if ( current_occupier != ai_occupier ) - { - return 0; - } - else - { - return 1; - } - } - } -} - -is_tag_crowded( str_tag ) -{ - v_tag = self gettagorigin( str_tag ); - a_zombies = getaiarray( level.zombie_team ); - n_nearby_zombies = 0; - _a1714 = a_zombies; - _k1714 = getFirstArrayKey( _a1714 ); - while ( isDefined( _k1714 ) ) - { - e_zombie = _a1714[ _k1714 ]; - dist_sq = distancesquared( v_tag, e_zombie.origin ); - if ( dist_sq < 4096 ) - { - if ( isDefined( e_zombie.tank_state ) ) - { - if ( e_zombie.tank_state != "tank_chase" && e_zombie.tank_state != "tag_chase" && e_zombie.tank_state != "none" ) - { - break; - } - } - else - { - n_nearby_zombies++; - if ( n_nearby_zombies >= 4 ) - { - return 1; - } - } - } - _k1714 = getNextArrayKey( _a1714, _k1714 ); - } - return 0; -} - -get_closest_valid_tank_tag( jumping_down ) -{ - if ( !isDefined( jumping_down ) ) - { - jumping_down = 0; - } - closest_dist_sq = 100000000; - closest_tag = undefined; - disable_sides = 0; - if ( jumping_down && level.vh_tank ent_flag( "tank_moving" ) ) - { - disable_sides = 1; - } - _a1752 = level.vh_tank.a_tank_tags; - _k1752 = getFirstArrayKey( _a1752 ); - while ( isDefined( _k1752 ) ) - { - s_tag = _a1752[ _k1752 ]; - if ( level.vh_tank tank_tag_is_valid( s_tag, disable_sides ) ) - { - v_tag = level.vh_tank gettagorigin( s_tag.str_tag ); - dist_sq = distancesquared( self.origin, v_tag ); - if ( dist_sq < closest_dist_sq ) - { - if ( !level.vh_tank is_tag_crowded( s_tag.str_tag ) ) - { - closest_tag = s_tag; - closest_dist_sq = dist_sq; - } - } - } - _k1752 = getNextArrayKey( _a1752, _k1752 ); - } - return closest_tag; -} - -zombieanimnotetrackthink( str_anim_notetrack_notify, chunk, node ) -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( str_anim_notetrack_notify, str_notetrack ); - if ( str_notetrack == "end" ) - { - return; - } - } -} - -tank_run_flamethrowers() -{ - self thread tank_flamethrower( "tag_flash", 1 ); - wait 0,25; - self thread tank_flamethrower( "tag_flash_gunner1", 2 ); - wait 0,25; - self thread tank_flamethrower( "tag_flash_gunner2", 3 ); -} - -tank_flamethrower_get_targets( str_tag, n_flamethrower_id ) -{ - a_zombies = getaiarray( level.zombie_team ); - a_targets = []; - v_tag_pos = self gettagorigin( str_tag ); - v_tag_angles = self gettagangles( str_tag ); - v_tag_fwd = anglesToForward( v_tag_angles ); - v_kill_pos = v_tag_pos + ( v_tag_fwd * 80 ); - _a1813 = a_zombies; - _k1813 = getFirstArrayKey( _a1813 ); - while ( isDefined( _k1813 ) ) - { - ai_zombie = _a1813[ _k1813 ]; - dist_sq = distance2dsquared( ai_zombie.origin, v_kill_pos ); - if ( dist_sq > ( 80 * 80 ) ) - { - } - else if ( isDefined( ai_zombie.tank_state ) ) - { - if ( ai_zombie.tank_state == "climbing" || ai_zombie.tank_state == "jumping_down" ) - { - } - } - else - { - v_to_zombie = vectornormalize( ai_zombie.origin - v_tag_pos ); - n_dot = vectordot( v_tag_fwd, ai_zombie.origin ); - if ( n_dot < 0,95 ) - { - break; - } - else - { - a_targets[ a_targets.size ] = ai_zombie; - } - } - _k1813 = getNextArrayKey( _a1813, _k1813 ); - } - return a_targets; -} - -tank_flamethrower_cycle_targets( str_tag, n_flamethrower_id ) -{ - self endon( "flamethrower_stop_" + n_flamethrower_id ); - while ( 1 ) - { - a_targets = tank_flamethrower_get_targets( str_tag, n_flamethrower_id ); - _a1854 = a_targets; - _k1854 = getFirstArrayKey( _a1854 ); - while ( isDefined( _k1854 ) ) - { - ai = _a1854[ _k1854 ]; - if ( isalive( ai ) ) - { - self setturrettargetent( ai ); - wait 1; - } - _k1854 = getNextArrayKey( _a1854, _k1854 ); - } - wait 1; - } -} - -tank_flamethrower( str_tag, n_flamethrower_id ) -{ - zombieless_waits = 0; - time_between_flames = randomfloatrange( 3, 6 ); - while ( 1 ) - { - wait 1; - if ( n_flamethrower_id == 1 ) - { - self setturrettargetvec( self.origin + ( anglesToForward( self.angles ) * 1000 ) ); - } - self ent_flag_wait( "tank_moving" ); - a_targets = tank_flamethrower_get_targets( str_tag, n_flamethrower_id ); - if ( a_targets.size > 0 || zombieless_waits > time_between_flames ) - { - self setclientfield( "tank_flamethrower_fx", n_flamethrower_id ); - self thread flamethrower_damage_zombies( n_flamethrower_id, str_tag ); - if ( n_flamethrower_id == 1 ) - { - self thread tank_flamethrower_cycle_targets( str_tag, n_flamethrower_id ); - } - if ( a_targets.size > 0 ) - { - wait 6; - } - else - { - wait 3; - } - self setclientfield( "tank_flamethrower_fx", 0 ); - self notify( "flamethrower_stop_" + n_flamethrower_id ); - zombieless_waits = 0; - time_between_flames = randomfloatrange( 3, 6 ); - continue; - } - else - { - zombieless_waits++; - } - } -} - -flamethrower_damage_zombies( n_flamethrower_id, str_tag ) -{ - self endon( "flamethrower_stop_" + n_flamethrower_id ); - while ( 1 ) - { - a_targets = tank_flamethrower_get_targets( str_tag, n_flamethrower_id ); - _a1926 = a_targets; - _k1926 = getFirstArrayKey( _a1926 ); - while ( isDefined( _k1926 ) ) - { - ai_zombie = _a1926[ _k1926 ]; - if ( isalive( ai_zombie ) ) - { - a_players = get_players_on_tank( 1 ); - if ( a_players.size > 0 ) - { - level notify( "vo_tank_flame_zombie" ); - } - if ( str_tag == "tag_flash" ) - { - ai_zombie do_damage_network_safe( self, ai_zombie.health, "zm_tank_flamethrower", "MOD_BURNED" ); - ai_zombie thread zombie_gib_guts(); - } - else - { - ai_zombie thread maps/mp/zombies/_zm_weap_staff_fire::flame_damage_fx( "zm_tank_flamethrower", self ); - } - wait 0,05; - } - _k1926 = getNextArrayKey( _a1926, _k1926 ); - } - wait_network_frame(); - } -} - -enemy_location_override() -{ - self endon( "death" ); - enemy = self.favoriteenemy; - location = enemy.origin; - tank = level.vh_tank; - if ( isDefined( self.is_mechz ) && self.is_mechz ) - { - return location; - } - if ( isDefined( self.item ) ) - { - return self.origin; - } - if ( is_true( self.reroute ) ) - { - if ( isDefined( self.reroute_origin ) ) - { - location = self.reroute_origin; - } - } - if ( isDefined( self.tank_state ) ) - { - if ( self.tank_state == "tank_chase" ) - { - self.goalradius = 128; - } - else if ( self.tank_state == "tag_chase" ) - { - self.goalradius = 16; - } - else - { - self.goalradius = 32; - } - if ( self.tank_state == "tank_chase" || self.tank_state == "none" && isDefined( enemy.b_already_on_tank ) && enemy.b_already_on_tank ) - { - tank_front = tank gettagorigin( "window_right_front_jmp_jnt" ); - tank_back = tank gettagorigin( "window_left_rear_jmp_jnt" ); - if ( tank ent_flag( "tank_moving" ) ) - { - self.ignoreall = 1; - if ( isDefined( self.close_to_tank ) && !self.close_to_tank ) - { - if ( getTime() != tank.chase_pos_time ) - { - tank.chase_pos_time = getTime(); - tank.chase_pos_index = 0; - tank_forward = vectornormalize( anglesToForward( level.vh_tank.angles ) ); - tank_right = vectornormalize( anglesToRight( level.vh_tank.angles ) ); - tank.chase_pos = []; - tank.chase_pos[ 0 ] = level.vh_tank.origin + vectorScale( tank_forward, -164 ); - tank.chase_pos[ 1 ] = tank_front; - tank.chase_pos[ 2 ] = tank_back; - } - location = tank.chase_pos[ tank.chase_pos_index ]; - tank.chase_pos_index++; - if ( tank.chase_pos_index >= 3 ) - { - tank.chase_pos_index = 0; - } - dist_sq = distancesquared( self.origin, location ); - if ( dist_sq < 4096 ) - { - self.close_to_tank = 1; - } - } - return location; - } - self.close_to_tank = 0; - front_dist = distance2dsquared( enemy.origin, level.vh_tank.origin ); - back_dist = distance2dsquared( enemy.origin, level.vh_tank.origin ); - if ( front_dist < back_dist ) - { - location = tank_front; - } - else - { - location = tank_back; - } - self.ignoreall = 0; - } - else - { - if ( self.tank_state == "tag_chase" ) - { - location = level.vh_tank gettagorigin( self.str_tank_tag ); - } - else - { - if ( self.tank_state == "exit_tank" ) - { - location = level.vh_tank tank_get_jump_down_offset( self.tank_tag ); - } - } - } - } - return location; -} - -adjust_enemyoverride() -{ - self endon( "death" ); - location = self.enemyoverride[ 0 ]; - tank = level.vh_tank; - ent = self.enemyoverride[ 1 ]; - return location; -} - -closest_player_tank( origin, players ) -{ - if ( isDefined( level.vh_tank ) || level.vh_tank.n_players_on > 0 && isDefined( level.calc_closest_player_using_paths ) && !level.calc_closest_player_using_paths ) - { - player = getclosest( origin, players ); - } - else - { - player = get_closest_player_using_paths( origin, players ); - } - if ( isDefined( player ) ) - { - return player; - } -} - -zombie_on_tank_death_animscript_callback( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) -{ - if ( isDefined( self.exploding ) && self.exploding ) - { - self notify( "killanimscript" ); - self maps/mp/zombies/_zm_spawner::reset_attack_spot(); - return 1; - } - if ( isDefined( self ) ) - { - level maps/mp/zombies/_zm_spawner::zombie_death_points( self.origin, meansofdeath, shitloc, attacker, self ); - launchvector = undefined; - self thread maps/mp/zombies/_zm_spawner::zombie_ragdoll_then_explode( launchvector, attacker ); - self notify( "killanimscript" ); - self maps/mp/zombies/_zm_spawner::reset_attack_spot(); - return 1; - } - return 0; -} - -tomb_get_path_length_to_tank() -{ - tank_front = level.vh_tank gettagorigin( "window_right_front_jmp_jnt" ) + vectorScale( ( 0, 0, 1 ), 30 ); - tank_back = level.vh_tank gettagorigin( "window_left_rear_jmp_jnt" ) + vectorScale( ( 0, 0, 1 ), 30 ); - path_length_1 = self calcpathlength( tank_front ); - path_length_2 = self calcpathlength( tank_back ); - if ( path_length_1 < path_length_2 ) - { - return path_length_1; - } - else - { - return path_length_2; - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_teleporter.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_teleporter.gsc deleted file mode 100644 index 0b643ad..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_teleporter.gsc +++ /dev/null @@ -1,432 +0,0 @@ -#include maps/mp/zombies/_zm_score; -#include maps/mp/zm_tomb_vo; -#include maps/mp/gametypes_zm/_hud; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_craftables; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -#using_animtree( "fxanim_props_dlc4" ); - -teleporter_init() -{ - registerclientfield( "scriptmover", "teleporter_fx", 14000, 1, "int" ); - precacheshellshock( "lava" ); - level.teleport = []; - level.n_active_links = 0; - level.n_countdown = 0; - level.n_teleport_delay = 0; - level.teleport_cost = 0; - level.n_teleport_cooldown = 0; - level.is_cooldown = 0; - level.n_active_timer = -1; - level.n_teleport_time = 0; - level.a_teleport_models = []; - a_entrance_models = getentarray( "teleport_model", "targetname" ); - _a40 = a_entrance_models; - _k40 = getFirstArrayKey( _a40 ); - while ( isDefined( _k40 ) ) - { - e_model = _a40[ _k40 ]; - e_model useanimtree( -1 ); - level.a_teleport_models[ e_model.script_int ] = e_model; - _k40 = getNextArrayKey( _a40, _k40 ); - } - array_thread( a_entrance_models, ::teleporter_samantha_chamber_line ); - a_portal_frames = getentarray( "portal_exit_frame", "script_noteworthy" ); - level.a_portal_exit_frames = []; - _a51 = a_portal_frames; - _k51 = getFirstArrayKey( _a51 ); - while ( isDefined( _k51 ) ) - { - e_frame = _a51[ _k51 ]; - e_frame useanimtree( -1 ); - e_frame ghost(); - level.a_portal_exit_frames[ e_frame.script_int ] = e_frame; - _k51 = getNextArrayKey( _a51, _k51 ); - } - level.a_teleport_exits = []; - a_exits = getstructarray( "portal_exit", "script_noteworthy" ); - _a62 = a_exits; - _k62 = getFirstArrayKey( _a62 ); - while ( isDefined( _k62 ) ) - { - s_portal = _a62[ _k62 ]; - level.a_teleport_exits[ s_portal.script_int ] = s_portal; - _k62 = getNextArrayKey( _a62, _k62 ); - } - level.a_teleport_exit_triggers = []; - a_trigs = getstructarray( "chamber_exit_trigger", "script_noteworthy" ); - _a70 = a_trigs; - _k70 = getFirstArrayKey( _a70 ); - while ( isDefined( _k70 ) ) - { - s_trig = _a70[ _k70 ]; - level.a_teleport_exit_triggers[ s_trig.script_int ] = s_trig; - _k70 = getNextArrayKey( _a70, _k70 ); - } - a_s_teleporters = getstructarray( "trigger_teleport_pad", "targetname" ); - array_thread( a_s_teleporters, ::run_chamber_entrance_teleporter ); - spawn_stargate_fx_origins(); - root = %root; - i = %fxanim_zom_tomb_portal_open_anim; - i = %fxanim_zom_tomb_portal_collapse_anim; -} - -init_animtree() -{ - scriptmodelsuseanimtree( -1 ); -} - -teleporter_samantha_chamber_line() -{ - max_dist_sq = 640000; - level.sam_chamber_line_played = 0; - flag_wait( "samantha_intro_done" ); - while ( !level.sam_chamber_line_played ) - { - a_players = getplayers(); - _a103 = a_players; - _k103 = getFirstArrayKey( _a103 ); - while ( isDefined( _k103 ) ) - { - e_player = _a103[ _k103 ]; - dist_sq = distance2dsquared( self.origin, e_player.origin ); - height_diff = abs( self.origin[ 2 ] - e_player.origin[ 2 ] ); - if ( dist_sq < max_dist_sq && height_diff < 150 && isDefined( e_player.isspeaking ) && !e_player.isspeaking ) - { - level thread play_teleporter_samantha_chamber_line( e_player ); - return; - } - _k103 = getNextArrayKey( _a103, _k103 ); - } - wait 0,1; - } -} - -play_teleporter_samantha_chamber_line( e_player ) -{ - if ( level.sam_chamber_line_played ) - { - return; - } - level.sam_chamber_line_played = 1; - flag_waitopen( "story_vo_playing" ); - flag_set( "story_vo_playing" ); - set_players_dontspeak( 1 ); - maps/mp/zm_tomb_vo::samanthasay( "vox_sam_enter_chamber_1_0", e_player, 1 ); - maps/mp/zm_tomb_vo::samanthasay( "vox_sam_enter_chamber_2_0", e_player ); - set_players_dontspeak( 0 ); - flag_clear( "story_vo_playing" ); -} - -run_chamber_exit( n_enum ) -{ - s_portal = level.a_teleport_exits[ n_enum ]; - s_activate_pos = level.a_teleport_exit_triggers[ n_enum ]; - e_portal_frame = level.a_portal_exit_frames[ n_enum ]; - e_portal_frame show(); - str_building_flag = e_portal_frame.targetname + "_building"; - flag_init( str_building_flag ); - s_activate_pos.trigger_stub = tomb_spawn_trigger_radius( s_activate_pos.origin, 50, 1 ); - s_activate_pos.trigger_stub set_unitrigger_hint_string( &"ZM_TOMB_TELE" ); - s_portal.target = s_activate_pos.target; - s_portal.origin = e_portal_frame gettagorigin( "fx_portal_jnt" ); - s_portal.angles = e_portal_frame gettagangles( "fx_portal_jnt" ); - s_portal.angles = ( s_portal.angles[ 0 ], s_portal.angles[ 1 ] + 180, s_portal.angles[ 2 ] ); - str_fx = get_teleport_fx_from_enum( n_enum ); - collapse_time = getanimlength( %fxanim_zom_tomb_portal_collapse_anim ); - open_time = getanimlength( %fxanim_zom_tomb_portal_open_anim ); - flag_wait( "start_zombie_round_logic" ); - while ( 1 ) - { - s_activate_pos.trigger_stub waittill( "trigger", e_player ); - while ( !is_player_valid( e_player ) ) - { - continue; - } - while ( e_player.score < level.teleport_cost ) - { - continue; - } - s_activate_pos.trigger_stub set_unitrigger_hint_string( "" ); - s_activate_pos.trigger_stub trigger_off(); - if ( level.teleport_cost > 0 ) - { - e_player maps/mp/zombies/_zm_score::minus_to_player_score( level.teleport_cost ); - } - e_portal_frame playloopsound( "zmb_teleporter_loop_pre", 1 ); - e_portal_frame setanim( %fxanim_zom_tomb_portal_open_anim, 1, 0,1, 1 ); - flag_set( str_building_flag ); - e_portal_frame thread whirlwind_rumble_nearby_players( str_building_flag ); - wait open_time; - e_portal_frame setanim( %fxanim_zom_tomb_portal_open_1frame_anim, 1, 0,1, 1 ); - wait_network_frame(); - flag_clear( str_building_flag ); - e_fx = spawn( "script_model", s_portal.origin ); - e_fx.angles = s_portal.angles; - e_fx setmodel( "tag_origin" ); - e_fx setclientfield( "element_glow_fx", n_enum + 4 ); - rumble_nearby_players( e_fx.origin, 1000, 2 ); - e_portal_frame playloopsound( "zmb_teleporter_loop_post", 1 ); - s_portal thread teleporter_radius_think(); - wait 20; - e_portal_frame setanim( %fxanim_zom_tomb_portal_collapse_anim, 1, 0,1, 1 ); - e_portal_frame stoploopsound( 0,5 ); - e_portal_frame playsound( "zmb_teleporter_anim_collapse_pew" ); - s_portal notify( "teleporter_radius_stop" ); - e_fx setclientfield( "element_glow_fx", 0 ); - wait collapse_time; - e_fx delete(); - s_activate_pos.trigger_stub trigger_on(); - s_activate_pos.trigger_stub set_unitrigger_hint_string( &"ZM_TOMB_TELE" ); - } -} - -run_chamber_entrance_teleporter() -{ - self endon( "death" ); - fx_glow = get_teleport_fx_from_enum( self.script_int ); - e_model = level.a_teleport_models[ self.script_int ]; - self.origin = e_model gettagorigin( "fx_portal_jnt" ); - self.angles = e_model gettagangles( "fx_portal_jnt" ); - self.angles = ( self.angles[ 0 ], self.angles[ 1 ] + 180, self.angles[ 2 ] ); - self.trigger_stub = tomb_spawn_trigger_radius( self.origin - vectorScale( ( 0, 0, 0 ), 30 ), 50 ); - flag_init( "enable_teleporter_" + self.script_int ); - str_building_flag = "teleporter_building_" + self.script_int; - flag_init( str_building_flag ); - collapse_time = getanimlength( %fxanim_zom_tomb_portal_collapse_anim ); - open_time = getanimlength( %fxanim_zom_tomb_portal_open_anim ); - flag_wait( "start_zombie_round_logic" ); - e_model setanim( %fxanim_zom_tomb_portal_collapse_anim, 1, 0,1, 1 ); - wait collapse_time; - while ( 1 ) - { - flag_wait( "enable_teleporter_" + self.script_int ); - flag_set( str_building_flag ); - e_model thread whirlwind_rumble_nearby_players( str_building_flag ); - e_model setanim( %fxanim_zom_tomb_portal_open_anim, 1, 0,1, 1 ); - e_model playloopsound( "zmb_teleporter_loop_pre", 1 ); - wait open_time; - e_model setanim( %fxanim_zom_tomb_portal_open_1frame_anim, 1, 0,1, 1 ); - wait_network_frame(); - e_fx = spawn( "script_model", self.origin ); - e_fx.angles = self.angles; - e_fx setmodel( "tag_origin" ); - e_fx setclientfield( "element_glow_fx", self.script_int + 4 ); - rumble_nearby_players( e_fx.origin, 1000, 2 ); - e_model playloopsound( "zmb_teleporter_loop_post", 1 ); - if ( isDefined( self.exit_enabled ) && !self.exit_enabled ) - { - self.exit_enabled = 1; - level thread run_chamber_exit( self.script_int ); - } - self thread stargate_teleport_think(); - flag_clear( str_building_flag ); - flag_waitopen( "enable_teleporter_" + self.script_int ); - level notify( "disable_teleporter_" + self.script_int ); - e_fx setclientfield( "element_glow_fx", 0 ); - e_model stoploopsound( 0,5 ); - e_model playsound( "zmb_teleporter_anim_collapse_pew" ); - e_model setanim( %fxanim_zom_tomb_portal_collapse_anim, 1, 0,1, 1 ); - wait collapse_time; - e_fx delete(); - } -} - -teleporter_radius_think( radius ) -{ - if ( !isDefined( radius ) ) - { - radius = 120; - } - self endon( "teleporter_radius_stop" ); - radius_sq = radius * radius; - while ( 1 ) - { - a_players = getplayers(); - _a336 = a_players; - _k336 = getFirstArrayKey( _a336 ); - while ( isDefined( _k336 ) ) - { - e_player = _a336[ _k336 ]; - dist_sq = distancesquared( e_player.origin, self.origin ); - if ( dist_sq < radius_sq && e_player getstance() != "prone" && isDefined( e_player.teleporting ) && !e_player.teleporting ) - { - playfx( level._effect[ "teleport_3p" ], self.origin, ( 0, 0, 0 ), ( 0, 0, 0 ) ); - playsoundatposition( "zmb_teleporter_tele_3d", self.origin ); - level thread stargate_teleport_player( self.target, e_player ); - } - _k336 = getNextArrayKey( _a336, _k336 ); - } - wait_network_frame(); - } -} - -stargate_teleport_think() -{ - self endon( "death" ); - level endon( "disable_teleporter_" + self.script_int ); - e_potal = level.a_teleport_models[ self.script_int ]; - while ( 1 ) - { - self.trigger_stub waittill( "trigger", e_player ); - if ( e_player getstance() != "prone" && isDefined( e_player.teleporting ) && !e_player.teleporting ) - { - playfx( level._effect[ "teleport_3p" ], self.origin, ( 0, 0, 0 ), ( 0, 0, 0 ) ); - playsoundatposition( "zmb_teleporter_tele_3d", self.origin ); - level notify( "player_teleported" ); - level thread stargate_teleport_player( self.target, e_player ); - } - } -} - -stargate_teleport_enable( n_index ) -{ - flag_set( "enable_teleporter_" + n_index ); -} - -stargate_teleport_disable( n_index ) -{ - flag_clear( "enable_teleporter_" + n_index ); -} - -stargate_play_fx() -{ - self.e_fx setclientfield( "teleporter_fx", 1 ); - self waittill( "stop_teleport_fx" ); - self.e_fx setclientfield( "teleporter_fx", 0 ); -} - -spawn_stargate_fx_origins() -{ - a_teleport_positions = getstructarray( "teleport_room", "script_noteworthy" ); - _a406 = a_teleport_positions; - _k406 = getFirstArrayKey( _a406 ); - while ( isDefined( _k406 ) ) - { - s_teleport = _a406[ _k406 ]; - v_fx_pos = ( s_teleport.origin + ( 0, 0, 64 ) ) + ( anglesToForward( s_teleport.angles ) * 120 ); - s_teleport.e_fx = spawn( "script_model", v_fx_pos ); - s_teleport.e_fx setmodel( "tag_origin" ); - s_teleport.e_fx.angles = s_teleport.angles + vectorScale( ( 0, 0, 0 ), 180 ); - _k406 = getNextArrayKey( _a406, _k406 ); - } -} - -stargate_teleport_player( str_teleport_to, player, n_teleport_time_sec, show_fx ) -{ - if ( !isDefined( n_teleport_time_sec ) ) - { - n_teleport_time_sec = 2; - } - if ( !isDefined( show_fx ) ) - { - show_fx = 1; - } - player.teleporting = 1; - if ( show_fx ) - { - player thread fadetoblackforxsec( 0, 0,3, 0, 0,5, "white" ); - wait_network_frame(); - } - n_pos = player.characterindex; - prone_offset = vectorScale( ( 0, 0, 0 ), 49 ); - crouch_offset = vectorScale( ( 0, 0, 0 ), 20 ); - stand_offset = ( 0, 0, 0 ); - image_room = getstruct( "teleport_room_" + n_pos, "targetname" ); - player disableoffhandweapons(); - player disableweapons(); - player freezecontrols( 1 ); - wait_network_frame(); - if ( player getstance() == "prone" ) - { - desired_origin = image_room.origin + prone_offset; - } - else if ( player getstance() == "crouch" ) - { - desired_origin = image_room.origin + crouch_offset; - } - else - { - desired_origin = image_room.origin + stand_offset; - } - player.teleport_origin = spawn( "script_model", player.origin ); - player.teleport_origin setmodel( "tag_origin" ); - player.teleport_origin.angles = player.angles; - player playerlinktoabsolute( player.teleport_origin, "tag_origin" ); - player.teleport_origin.origin = desired_origin; - player.teleport_origin.angles = image_room.angles; - if ( show_fx ) - { - player playsoundtoplayer( "zmb_teleporter_tele_2d", player ); - } - wait_network_frame(); - player.teleport_origin.angles = image_room.angles; - if ( show_fx ) - { - image_room thread stargate_play_fx(); - } - wait n_teleport_time_sec; - if ( show_fx ) - { - player thread fadetoblackforxsec( 0, 0,3, 0, 0,5, "white" ); - wait_network_frame(); - } - image_room notify( "stop_teleport_fx" ); - a_pos = getstructarray( str_teleport_to, "targetname" ); - s_pos = get_free_teleport_pos( player, a_pos ); - player unlink(); - if ( isDefined( player.teleport_origin ) ) - { - player.teleport_origin delete(); - player.teleport_origin = undefined; - } - player setorigin( s_pos.origin ); - player setplayerangles( s_pos.angles ); - player enableweapons(); - player enableoffhandweapons(); - player freezecontrols( 0 ); - player.teleporting = 0; -} - -is_teleport_landing_valid( s_pos, n_radius ) -{ - n_radius_sq = n_radius * n_radius; - a_players = getplayers(); - _a514 = a_players; - _k514 = getFirstArrayKey( _a514 ); - while ( isDefined( _k514 ) ) - { - e_player = _a514[ _k514 ]; - if ( distance2dsquared( s_pos.origin, e_player.origin ) < n_radius_sq ) - { - return 0; - } - _k514 = getNextArrayKey( _a514, _k514 ); - } - return 1; -} - -get_free_teleport_pos( player, a_structs ) -{ - n_player_radius = 64; - while ( 1 ) - { - a_players = getplayers(); - _a534 = a_structs; - _k534 = getFirstArrayKey( _a534 ); - while ( isDefined( _k534 ) ) - { - s_pos = _a534[ _k534 ]; - if ( is_teleport_landing_valid( s_pos, n_player_radius ) ) - { - return s_pos; - } - _k534 = getNextArrayKey( _a534, _k534 ); - } - wait 0,05; - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_utility.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_utility.gsc deleted file mode 100644 index bd983ed..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_utility.gsc +++ /dev/null @@ -1,1923 +0,0 @@ -#include maps/mp/zm_tomb_craftables; -#include maps/mp/zm_tomb_tank; -#include maps/mp/zm_tomb_challenges; -#include maps/mp/zombies/_zm_challenges; -#include maps/mp/zm_tomb_chamber; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/animscripts/zm_shared; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zm_tomb_vo; -#include maps/mp/zm_tomb_teleporter; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -setup_devgui() -{ -/# - execdevgui( "devgui_zombie_tomb" ); - level.custom_devgui = ::zombie_devgui_tomb; - setdvar( "complete_puzzles1", "off" ); - setdvar( "complete_puzzles2", "off" ); - setdvar( "open_all_teleporters", "off" ); - setdvar( "show_craftable_locations", "off" ); - setdvar( "show_morse_code", "off" ); - setdvar( "sam_intro_skip", "off" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Quest:1/Open All Teleporters:1" "open_all_teleporters on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Quest:1/Skip Chamber Puzzles:2" "complete_puzzles1 on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Quest:1/Skip Top-side Puzzles:3" "complete_puzzles2 on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Quest:1/Show Craftable Locations:4" "show_craftable_locations on "\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Quest:1/Skip Samantha Intro:5" "sam_intro_skip on"\n" ); - adddebugcommand( "devgui_cmd "Zombies:2/Tomb:1/Easter Ann:3/Show Morse Code:1" "show_morse_code on "\n" ); - level thread watch_devgui_quadrotor(); - level thread watch_devgui_complete_puzzles(); - level thread watch_for_upgraded_staffs(); -#/ -} - -zombie_devgui_tomb( cmd ) -{ -/# - cmd_strings = strtok( cmd, " " ); - switch( cmd_strings[ 0 ] ) - { - case "force_recapture_start": - level notify( "force_recapture_start" ); - break; - case "force_capture_zone_1": - case "force_capture_zone_2": - case "force_capture_zone_3": - case "force_capture_zone_4": - case "force_capture_zone_5": - case "force_capture_zone_6": - level notify( "force_zone_capture" ); - break; - case "force_recapture_zone_1": - case "force_recapture_zone_2": - case "force_recapture_zone_3": - case "force_recapture_zone_4": - case "force_recapture_zone_5": - case "force_recapture_zone_6": - level notify( "force_zone_recapture" ); - break; - } -#/ -} - -watch_for_upgraded_staffs() -{ -/# - cmd = ""; - while ( 1 ) - { - wait 0,25; - while ( !isDefined( level.zombie_devgui_gun ) || level.zombie_devgui_gun != cmd ) - { - a_players = get_players(); - _a102 = a_players; - _k102 = getFirstArrayKey( _a102 ); - while ( isDefined( _k102 ) ) - { - player = _a102[ _k102 ]; - has_upgraded_staff = 0; - a_str_weapons = player getweaponslist(); - _a107 = a_str_weapons; - _k107 = getFirstArrayKey( _a107 ); - while ( isDefined( _k107 ) ) - { - str_weapon = _a107[ _k107 ]; - if ( is_weapon_upgraded_staff( str_weapon ) ) - { - has_upgraded_staff = 1; - } - _k107 = getNextArrayKey( _a107, _k107 ); - } - if ( has_upgraded_staff ) - { - player update_staff_accessories(); - } - _k102 = getNextArrayKey( _a102, _k102 ); - } - } -#/ - } -} - -watch_devgui_complete_puzzles() -{ -/# - while ( 1 ) - { - if ( getDvar( "complete_puzzles1" ) == "on" || getDvar( "complete_puzzles2" ) == "on" ) - { - flag_set( "air_puzzle_1_complete" ); - flag_set( "ice_puzzle_1_complete" ); - flag_set( "electric_puzzle_1_complete" ); - flag_set( "fire_puzzle_1_complete" ); - flag_set( "chamber_puzzle_cheat" ); - setdvar( "complete_puzzles1", "off" ); - level notify( "open_all_gramophone_doors" ); - } - if ( getDvar( "show_morse_code" ) == "on" ) - { - flag_set( "show_morse_code" ); - setdvar( "show_morse_code", "off" ); - } - if ( getDvar( "complete_puzzles2" ) == "on" ) - { - flag_set( "air_puzzle_2_complete" ); - flag_set( "ice_puzzle_2_complete" ); - flag_set( "electric_puzzle_2_complete" ); - flag_set( "fire_puzzle_2_complete" ); - flag_set( "chamber_puzzle_cheat" ); - flag_set( "staff_air_zm_upgrade_unlocked" ); - flag_set( "staff_water_zm_upgrade_unlocked" ); - flag_set( "staff_fire_zm_upgrade_unlocked" ); - flag_set( "staff_lightning_zm_upgrade_unlocked" ); - setdvar( "complete_puzzles2", "off" ); - } - if ( getDvar( "sam_intro_skip" ) == "on" ) - { - flag_set( "samantha_intro_done" ); - setdvar( "sam_intro_skip", "off" ); - } - if ( getDvar( "open_all_teleporters" ) == "on" ) - { - maps/mp/zm_tomb_teleporter::stargate_teleport_enable( 1 ); - maps/mp/zm_tomb_teleporter::stargate_teleport_enable( 2 ); - maps/mp/zm_tomb_teleporter::stargate_teleport_enable( 3 ); - maps/mp/zm_tomb_teleporter::stargate_teleport_enable( 4 ); - setdvar( "open_all_teleporters", "off" ); - flag_set( "activate_zone_chamber" ); - } - wait 0,5; -#/ - } -} - -get_teleport_fx_from_enum( n_enum ) -{ - switch( n_enum ) - { - case 1: - return "teleport_fire"; - case 4: - return "teleport_ice"; - case 3: - return "teleport_elec"; - case 2: - default: - return "teleport_air"; - } -} - -watch_devgui_quadrotor() -{ -/# - while ( getDvar( #"7D075455" ) != "on" ) - { - wait 0,1; - } - players = getplayers(); - _a218 = players; - _k218 = getFirstArrayKey( _a218 ); - while ( isDefined( _k218 ) ) - { - player = _a218[ _k218 ]; - player set_player_equipment( "equip_dieseldrone_zm" ); - player giveweapon( "equip_dieseldrone_zm" ); - player setweaponammoclip( "equip_dieseldrone_zm", 1 ); - player thread show_equipment_hint( "equip_dieseldrone_zm" ); - player notify( "equip_dieseldrone_zm" + "_given" ); - player set_equipment_invisibility_to_player( "equip_dieseldrone_zm", 1 ); - player setactionslot( 1, "weapon", "equip_dieseldrone_zm" ); - _k218 = getNextArrayKey( _a218, _k218 ); -#/ - } -} - -include_craftable( craftable_struct ) -{ -/# - println( "ZM >> include_craftable = " + craftable_struct.name ); -#/ - maps/mp/zombies/_zm_craftables::include_zombie_craftable( craftable_struct ); -} - -is_craftable() -{ - return self maps/mp/zombies/_zm_craftables::is_craftable(); -} - -is_part_crafted( craftable_name, part_modelname ) -{ - return maps/mp/zombies/_zm_craftables::is_part_crafted( craftable_name, part_modelname ); -} - -wait_for_craftable( craftable_name ) -{ - level waittill( craftable_name + "_crafted", player ); - return player; -} - -check_solo_status() -{ - if ( getnumexpectedplayers() == 1 || !sessionmodeisonlinegame() && !sessionmodeisprivate() ) - { - level.is_forever_solo_game = 1; - } - else - { - level.is_forever_solo_game = 0; - } -} - -player_slow_movement_speed_monitor() -{ - self endon( "disconnect" ); - n_movescale_delta_no_perk = 0,4 / 4; - n_movescale_delta_staminup = 0,3 / 6; - n_new_move_scale = 1; - n_move_scale_delta = 1; - self.n_move_scale = n_new_move_scale; - while ( 1 ) - { - is_player_slowed = 0; - self.is_player_slowed = 0; - _a305 = level.a_e_slow_areas; - _k305 = getFirstArrayKey( _a305 ); - while ( isDefined( _k305 ) ) - { - area = _a305[ _k305 ]; - if ( self istouching( area ) ) - { - self setclientfieldtoplayer( "sndMudSlow", 1 ); - is_player_slowed = 1; - self.is_player_slowed = 1; - if ( isDefined( self.played_mud_vo ) && !self.played_mud_vo && isDefined( self.dontspeak ) && !self.dontspeak ) - { - self thread maps/mp/zm_tomb_vo::struggle_mud_vo(); - } - if ( self hasperk( "specialty_longersprint" ) ) - { - n_new_move_scale = 0,7; - n_move_scale_delta = n_movescale_delta_staminup; - } - else - { - n_new_move_scale = 0,6; - n_move_scale_delta = n_movescale_delta_no_perk; - } - break; - } - else - { - _k305 = getNextArrayKey( _a305, _k305 ); - } - } - if ( !is_player_slowed ) - { - self setclientfieldtoplayer( "sndMudSlow", 0 ); - self notify( "mud_slowdown_cleared" ); - n_new_move_scale = 1; - } - if ( self.n_move_scale != n_new_move_scale ) - { - if ( self.n_move_scale > ( n_new_move_scale + n_move_scale_delta ) ) - { - self.n_move_scale -= n_move_scale_delta; - } - else - { - self.n_move_scale = n_new_move_scale; - } - self setmovespeedscale( self.n_move_scale ); - } - wait 0,1; - } -} - -dug_zombie_spawn_init( animname_set ) -{ - if ( !isDefined( animname_set ) ) - { - animname_set = 0; - } - self.targetname = "zombie"; - self.script_noteworthy = undefined; - if ( !animname_set ) - { - self.animname = "zombie"; - } - if ( isDefined( get_gamemode_var( "pre_init_zombie_spawn_func" ) ) ) - { - self [[ get_gamemode_var( "pre_init_zombie_spawn_func" ) ]](); - } - self thread play_ambient_zombie_vocals(); - self.zmb_vocals_attack = "zmb_vocals_zombie_attack"; - self.ignoreall = 1; - self.ignoreme = 1; - self.allowdeath = 1; - self.force_gib = 1; - self.is_zombie = 1; - self.has_legs = 1; - self allowedstances( "stand" ); - self.zombie_damaged_by_bar_knockdown = 0; - self.gibbed = 0; - self.head_gibbed = 0; - self setphysparams( 15, 0, 72 ); - self.disablearrivals = 1; - self.disableexits = 1; - self.grenadeawareness = 0; - self.badplaceawareness = 0; - self.ignoresuppression = 1; - self.suppressionthreshold = 1; - self.nododgemove = 1; - self.dontshootwhilemoving = 1; - self.pathenemylookahead = 0; - self.badplaceawareness = 0; - self.chatinitialized = 0; - self.a.disablepain = 1; - self disable_react(); - if ( isDefined( level.zombie_health ) ) - { - self.maxhealth = level.zombie_health; - if ( isDefined( level.zombie_respawned_health ) && level.zombie_respawned_health.size > 0 ) - { - self.health = level.zombie_respawned_health[ 0 ]; - arrayremovevalue( level.zombie_respawned_health, level.zombie_respawned_health[ 0 ] ); - } - else - { - self.health = level.zombie_health; - } - } - else - { - self.maxhealth = level.zombie_vars[ "zombie_health_start" ]; - self.health = self.maxhealth; - } - self.freezegun_damage = 0; - self.dropweapon = 0; - level thread zombie_death_event( self ); - self init_zombie_run_cycle(); - self thread dug_zombie_think(); - self thread zombie_gib_on_damage(); - self thread zombie_damage_failsafe(); - self thread enemy_death_detection(); - if ( isDefined( level._zombie_custom_spawn_logic ) ) - { - if ( isarray( level._zombie_custom_spawn_logic ) ) - { - i = 0; - while ( i < level._zombie_custom_spawn_logic.size ) - { - self thread [[ level._zombie_custom_spawn_logic[ i ] ]](); - i++; - } - } - else self thread [[ level._zombie_custom_spawn_logic ]](); - } - if ( !isDefined( self.no_eye_glow ) || !self.no_eye_glow ) - { - if ( isDefined( self.is_inert ) && !self.is_inert ) - { - self thread delayed_zombie_eye_glow(); - } - } - self.deathfunction = ::zombie_death_animscript; - self.flame_damage_time = 0; - self.meleedamage = 60; - self.no_powerups = 1; - self zombie_history( "zombie_spawn_init -> Spawned = " + self.origin ); - self.thundergun_knockdown_func = level.basic_zombie_thundergun_knockdown; - self.tesla_head_gib_func = ::zombie_tesla_head_gib; - self.team = level.zombie_team; - if ( isDefined( get_gamemode_var( "post_init_zombie_spawn_func" ) ) ) - { - self [[ get_gamemode_var( "post_init_zombie_spawn_func" ) ]](); - } - if ( isDefined( level.zombie_init_done ) ) - { - self [[ level.zombie_init_done ]](); - } - self.zombie_init_done = 1; - self notify( "zombie_init_done" ); -} - -dug_zombie_think() -{ - self endon( "death" ); -/# - assert( !self.isdog ); -#/ - self.ai_state = "zombie_think"; - find_flesh_struct_string = undefined; - self waittill( "zombie_custom_think_done", find_flesh_struct_string ); - node = undefined; - desired_nodes = []; - self.entrance_nodes = []; - if ( isDefined( level.max_barrier_search_dist_override ) ) - { - max_dist = level.max_barrier_search_dist_override; - } - else - { - max_dist = 500; - } - if ( !isDefined( find_flesh_struct_string ) && isDefined( self.target ) && self.target != "" ) - { - desired_origin = get_desired_origin(); -/# - assert( isDefined( desired_origin ), "Spawner @ " + self.origin + " has a .target but did not find a target" ); -#/ - origin = desired_origin; - node = getclosest( origin, level.exterior_goals ); - self.entrance_nodes[ self.entrance_nodes.size ] = node; - self zombie_history( "zombie_think -> #1 entrance (script_forcegoal) origin = " + self.entrance_nodes[ 0 ].origin ); - } - else - { - if ( self should_skip_teardown( find_flesh_struct_string ) ) - { - self zombie_setup_attack_properties(); - if ( isDefined( self.target ) ) - { - end_at_node = getnode( self.target, "targetname" ); - if ( isDefined( end_at_node ) ) - { - self setgoalnode( end_at_node ); - self waittill( "goal" ); - } - } - if ( isDefined( self.start_inert ) && self.start_inert ) - { - self thread maps/mp/zombies/_zm_ai_basic::start_inert( 1 ); - self zombie_complete_emerging_into_playable_area(); - } - else - { - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - self thread dug_zombie_entered_playable(); - } - return; - } - else if ( isDefined( find_flesh_struct_string ) ) - { -/# - assert( isDefined( find_flesh_struct_string ) ); -#/ - i = 0; - while ( i < level.exterior_goals.size ) - { - if ( level.exterior_goals[ i ].script_string == find_flesh_struct_string ) - { - node = level.exterior_goals[ i ]; - break; - } - else - { - i++; - } - } - self.entrance_nodes[ self.entrance_nodes.size ] = node; - self zombie_history( "zombie_think -> #1 entrance origin = " + node.origin ); - self thread zombie_assure_node(); - } - else - { - origin = self.origin; - desired_origin = get_desired_origin(); - if ( isDefined( desired_origin ) ) - { - origin = desired_origin; - } - nodes = get_array_of_closest( origin, level.exterior_goals, undefined, 3 ); - desired_nodes[ 0 ] = nodes[ 0 ]; - prev_dist = distance( self.origin, nodes[ 0 ].origin ); - i = 1; - while ( i < nodes.size ) - { - dist = distance( self.origin, nodes[ i ].origin ); - if ( ( dist - prev_dist ) > max_dist ) - { - break; - } - else - { - prev_dist = dist; - desired_nodes[ i ] = nodes[ i ]; - i++; - } - } - node = desired_nodes[ 0 ]; - if ( desired_nodes.size > 1 ) - { - node = desired_nodes[ randomint( desired_nodes.size ) ]; - } - self.entrance_nodes = desired_nodes; - self zombie_history( "zombie_think -> #1 entrance origin = " + node.origin ); - self thread zombie_assure_node(); - } - } -/# - assert( isDefined( node ), "Did not find a node!!! [Should not see this!]" ); -#/ - level thread draw_line_ent_to_pos( self, node.origin, "goal" ); - self.first_node = node; - self thread zombie_goto_entrance( node ); -} - -dug_zombie_entered_playable() -{ - self endon( "death" ); - if ( !isDefined( level.playable_areas ) ) - { - level.playable_areas = getentarray( "player_volume", "script_noteworthy" ); - } - while ( 1 ) - { - _a671 = level.playable_areas; - _k671 = getFirstArrayKey( _a671 ); - while ( isDefined( _k671 ) ) - { - area = _a671[ _k671 ]; - if ( self istouching( area ) ) - { - self dug_zombie_complete_emerging_into_playable_area(); - return; - } - _k671 = getNextArrayKey( _a671, _k671 ); - } - wait 1; - } -} - -dug_zombie_complete_emerging_into_playable_area() -{ - self.completed_emerging_into_playable_area = 1; - self notify( "completed_emerging_into_playable_area" ); - self.no_powerups = 1; - self thread zombie_free_cam_allowed(); -} - -dug_zombie_rise( spot, func_rise_fx ) -{ - if ( !isDefined( func_rise_fx ) ) - { - func_rise_fx = ::zombie_rise_fx; - } - self endon( "death" ); - self.in_the_ground = 1; - self.no_eye_glow = 1; - self.anchor = spawn( "script_origin", self.origin ); - self.anchor.angles = self.angles; - self linkto( self.anchor ); - if ( !isDefined( spot.angles ) ) - { - spot.angles = ( 0, 0, 1 ); - } - anim_org = spot.origin; - anim_ang = spot.angles; - self ghost(); - self.anchor moveto( anim_org, 0,05 ); - self.anchor waittill( "movedone" ); - target_org = get_desired_origin(); - if ( isDefined( target_org ) ) - { - anim_ang = vectorToAngle( target_org - self.origin ); - self.anchor rotateto( ( 0, anim_ang[ 1 ], 0 ), 0,05 ); - self.anchor waittill( "rotatedone" ); - } - self unlink(); - if ( isDefined( self.anchor ) ) - { - self.anchor delete(); - } - self thread hide_pop(); - level thread zombie_rise_death( self, spot ); - spot thread [[ func_rise_fx ]]( self ); - substate = 0; - if ( self.zombie_move_speed == "walk" ) - { - substate = randomint( 2 ); - } - else if ( self.zombie_move_speed == "run" ) - { - substate = 2; - } - else - { - if ( self.zombie_move_speed == "sprint" ) - { - substate = 3; - } - } - self orientmode( "face default" ); - self playsound( "zmb_vocals_capzomb_spawn" ); - self animscripted( self.origin, spot.angles, "zm_dug_rise" ); - self maps/mp/animscripts/zm_shared::donotetracks( "rise_anim", ::handle_rise_notetracks, spot ); - self.no_eye_glow = 0; - self thread zombie_eye_glow(); - self notify( "rise_anim_finished" ); - spot notify( "stop_zombie_rise_fx" ); - self.in_the_ground = 0; - self notify( "risen" ); -} - -is_weapon_upgraded_staff( weapon ) -{ - if ( weapon == "staff_water_upgraded_zm" ) - { - return 1; - } - else - { - if ( weapon == "staff_lightning_upgraded_zm" ) - { - return 1; - } - else - { - if ( weapon == "staff_fire_upgraded_zm" ) - { - return 1; - } - else - { - if ( weapon == "staff_air_upgraded_zm" ) - { - return 1; - } - } - } - } - return 0; -} - -watch_staff_usage() -{ - self notify( "watch_staff_usage" ); - self endon( "watch_staff_usage" ); - self endon( "disconnect" ); - self setclientfieldtoplayer( "player_staff_charge", 0 ); - while ( 1 ) - { - self waittill( "weapon_change", weapon ); - has_upgraded_staff = 0; - has_revive_staff = 0; - weapon_is_upgraded_staff = is_weapon_upgraded_staff( weapon ); - str_upgraded_staff_weapon = undefined; - a_str_weapons = self getweaponslist(); - _a820 = a_str_weapons; - _k820 = getFirstArrayKey( _a820 ); - while ( isDefined( _k820 ) ) - { - str_weapon = _a820[ _k820 ]; - if ( is_weapon_upgraded_staff( str_weapon ) ) - { - has_upgraded_staff = 1; - str_upgraded_staff_weapon = str_weapon; - } - if ( str_weapon == "staff_revive_zm" ) - { - has_revive_staff = 1; - } - _k820 = getNextArrayKey( _a820, _k820 ); - } -/# - if ( has_upgraded_staff && !has_revive_staff ) - { - has_revive_staff = 1; -#/ - } - if ( has_upgraded_staff && !has_revive_staff ) - { - self takeweapon( str_upgraded_staff_weapon ); - has_upgraded_staff = 0; - } - if ( !has_upgraded_staff && has_revive_staff ) - { - self takeweapon( "staff_revive_zm" ); - has_revive_staff = 0; - } - if ( !has_revive_staff || !weapon_is_upgraded_staff && weapon != "none" && weaponaltweaponname( weapon ) != "none" ) - { - self setactionslot( 3, "altmode" ); - } - else - { - self setactionslot( 3, "weapon", "staff_revive_zm" ); - } - if ( weapon_is_upgraded_staff ) - { - self thread staff_charge_watch_wrapper( weapon ); - } - } -} - -staff_charge_watch() -{ - self endon( "disconnect" ); - self endon( "player_downed" ); - self endon( "weapon_change" ); - self endon( "weapon_fired" ); - while ( !self attackbuttonpressed() ) - { - wait 0,05; - } - n_old_charge = 0; - while ( 1 ) - { - if ( n_old_charge != self.chargeshotlevel ) - { - self setclientfieldtoplayer( "player_staff_charge", self.chargeshotlevel ); - n_old_charge = self.chargeshotlevel; - } - wait 0,1; - } -} - -staff_charge_watch_wrapper( weapon ) -{ - self notify( "staff_charge_watch_wrapper" ); - self endon( "staff_charge_watch_wrapper" ); - self endon( "disconnect" ); - self setclientfieldtoplayer( "player_staff_charge", 0 ); - while ( is_weapon_upgraded_staff( weapon ) ) - { - self staff_charge_watch(); - self setclientfieldtoplayer( "player_staff_charge", 0 ); - weapon = self getcurrentweapon(); - } -} - -door_record_hint() -{ - hud = setting_tutorial_hud(); - hud settext( &"ZM_TOMB_RU" ); - wait 3; - hud destroy(); -} - -swap_staff_hint() -{ - level notify( "staff_Hint" ); - hud = setting_tutorial_hud(); - hud settext( &"ZM_TOMB_OSO" ); - level waittill_any_or_timeout( 3, "staff_hint" ); - hud destroy(); -} - -door_gramophone_elsewhere_hint() -{ - hud = setting_tutorial_hud(); - hud settext( &"ZM_TOMB_GREL" ); - wait 3; - hud destroy(); -} - -puzzle_debug_position( string_to_show, color, origin, str_dvar, n_show_time ) -{ -/# - self endon( "death" ); - self endon( "stop_debug_position" ); - if ( !isDefined( string_to_show ) ) - { - string_to_show = "+"; - } - if ( !isDefined( color ) ) - { - color = vectorScale( ( 0, 0, 1 ), 255 ); - } - while ( isDefined( str_dvar ) ) - { - while ( getDvar( "show_craftable_locations" ) != "on" ) - { - wait 1; - } - } - while ( 1 ) - { - if ( isDefined( origin ) ) - { - where_to_draw = origin; - } - else - { - where_to_draw = self.origin; - } - print3d( where_to_draw, string_to_show, color, 1 ); - wait 0,1; - if ( isDefined( n_show_time ) ) - { - n_show_time -= 0,1; - if ( n_show_time <= 0 ) - { - return; - } - } - else - { -#/ - } - } -} - -placeholder_puzzle_delete_ent( str_flag_name ) -{ - self endon( "death" ); - flag_wait( str_flag_name ); - self delete(); -} - -placeholder_puzzle_spin_model() -{ - self endon( "death" ); - while ( 1 ) - { - self rotateyaw( 360, 10, 0, 0 ); - wait 9,9; - } -} - -setting_tutorial_hud() -{ - client_hint = newclienthudelem( self ); - client_hint.alignx = "center"; - client_hint.aligny = "middle"; - client_hint.horzalign = "center"; - client_hint.vertalign = "bottom"; - client_hint.y = -120; - client_hint.foreground = 1; - client_hint.font = "default"; - client_hint.fontscale = 1,5; - client_hint.alpha = 1; - client_hint.color = ( 0, 0, 1 ); - return client_hint; -} - -tomb_trigger_update_message( func_per_player_msg ) -{ - a_players = getplayers(); - _a1041 = a_players; - _k1041 = getFirstArrayKey( _a1041 ); - while ( isDefined( _k1041 ) ) - { - e_player = _a1041[ _k1041 ]; - n_player = e_player getentitynumber(); - if ( !isDefined( self.stub.playertrigger[ n_player ] ) ) - { - } - else - { - new_msg = self [[ func_per_player_msg ]]( e_player ); - self.stub.playertrigger[ n_player ].stored_hint_string = new_msg; - self.stub.playertrigger[ n_player ] sethintstring( new_msg ); - } - _k1041 = getNextArrayKey( _a1041, _k1041 ); - } -} - -set_unitrigger_hint_string( str_message ) -{ - self.hint_string = str_message; - maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self ); - maps/mp/zombies/_zm_unitrigger::register_unitrigger( self, ::tomb_unitrigger_think ); -} - -tomb_spawn_trigger_radius( origin, radius, use_trigger, func_per_player_msg ) -{ - if ( !isDefined( use_trigger ) ) - { - use_trigger = 0; - } - trigger_stub = spawnstruct(); - trigger_stub.origin = origin; - trigger_stub.radius = radius; - if ( use_trigger ) - { - trigger_stub.cursor_hint = "HINT_NOICON"; - trigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - } - else - { - trigger_stub.script_unitrigger_type = "unitrigger_radius"; - } - if ( isDefined( func_per_player_msg ) ) - { - trigger_stub.func_update_msg = func_per_player_msg; - maps/mp/zombies/_zm_unitrigger::unitrigger_force_per_player_triggers( trigger_stub, 1 ); - } - maps/mp/zombies/_zm_unitrigger::register_unitrigger( trigger_stub, ::tomb_unitrigger_think ); - return trigger_stub; -} - -tomb_unitrigger_think() -{ - self endon( "kill_trigger" ); - if ( isDefined( self.stub.func_update_msg ) ) - { - self thread tomb_trigger_update_message( self.stub.func_update_msg ); - } - while ( 1 ) - { - self waittill( "trigger", player ); - self.stub notify( "trigger" ); - } -} - -tomb_unitrigger_delete() -{ - maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self ); - self structdelete(); -} - -zombie_gib_all() -{ - if ( !isDefined( self ) ) - { - return; - } - if ( isDefined( self.is_mechz ) && self.is_mechz ) - { - return; - } - a_gib_ref = []; - a_gib_ref[ 0 ] = level._zombie_gib_piece_index_all; - self gib( "normal", a_gib_ref ); - self ghost(); - wait 0,4; - if ( isDefined( self ) ) - { - self self_delete(); - } -} - -zombie_gib_guts() -{ - if ( !isDefined( self ) ) - { - return; - } - if ( isDefined( self.is_mechz ) && self.is_mechz ) - { - return; - } - v_origin = self gettagorigin( "J_SpineLower" ); - if ( isDefined( v_origin ) ) - { - v_forward = anglesToForward( ( 0, randomint( 360 ), 0 ) ); - playfx( level._effect[ "zombie_guts_explosion" ], v_origin, v_forward ); - } - wait_network_frame(); - if ( isDefined( self ) ) - { - self ghost(); - wait randomfloatrange( 0,4, 1,1 ); - if ( isDefined( self ) ) - { - self self_delete(); - } - } -} - -link_platform_nodes( nd_1, nd_2 ) -{ - if ( !nodesarelinked( nd_1, nd_2 ) ) - { - link_nodes( nd_1, nd_2 ); - } - if ( !nodesarelinked( nd_2, nd_1 ) ) - { - link_nodes( nd_2, nd_1 ); - } -} - -unlink_platform_nodes( nd_1, nd_2 ) -{ - if ( nodesarelinked( nd_1, nd_2 ) ) - { - unlink_nodes( nd_1, nd_2 ); - } - if ( nodesarelinked( nd_2, nd_1 ) ) - { - unlink_nodes( nd_2, nd_1 ); - } -} - -init_weather_manager() -{ - level.weather_snow = 0; - level.weather_rain = 0; - level.weather_fog = 0; - level.weather_vision = 0; - level thread weather_manager(); - level thread rotate_skydome(); - onplayerconnect_callback( ::set_weather_to_player ); - level.force_weather = []; - if ( cointoss() ) - { - level.force_weather[ 3 ] = "snow"; - } - else - { - level.force_weather[ 4 ] = "snow"; - } - i = 5; - while ( i <= 9 ) - { - if ( cointoss() ) - { - level.force_weather[ i ] = "none"; - i++; - continue; - } - else - { - level.force_weather[ i ] = "rain"; - } - i++; - } - level.force_weather[ 10 ] = "snow"; -} - -randomize_weather() -{ - weather_name = level.force_weather[ level.round_number ]; - if ( !isDefined( weather_name ) ) - { - n_round_weather = randomint( 100 ); - rounds_since_snow = level.round_number - level.last_snow_round; - rounds_since_rain = level.round_number - level.last_rain_round; - if ( n_round_weather < 40 || rounds_since_snow > 3 ) - { - weather_name = "snow"; - } - else - { - if ( n_round_weather < 80 || rounds_since_rain > 4 ) - { - weather_name = "rain"; - } - else - { - weather_name = "none"; - } - } - } - if ( weather_name == "snow" ) - { - level.weather_snow = randomintrange( 1, 5 ); - level.weather_rain = 0; - level.weather_vision = 2; - level.last_snow_round = level.round_number; - } - else if ( weather_name == "rain" ) - { - level.weather_snow = 0; - level.weather_rain = randomintrange( 1, 5 ); - level.weather_vision = 1; - level.last_rain_round = level.round_number; - } - else - { - level.weather_snow = 0; - level.weather_rain = 0; - level.weather_vision = 3; - } -} - -weather_manager() -{ - level.last_snow_round = 0; - level.last_rain_round = 0; - while ( 1 ) - { - level waittill( "end_of_round" ); - randomize_weather(); - level setclientfield( "rain_level", level.weather_rain ); - level setclientfield( "snow_level", level.weather_snow ); - wait 2; - _a1330 = getplayers(); - _k1330 = getFirstArrayKey( _a1330 ); - while ( isDefined( _k1330 ) ) - { - player = _a1330[ _k1330 ]; - if ( is_player_valid( player, 0, 1 ) ) - { - player set_weather_to_player(); - } - _k1330 = getNextArrayKey( _a1330, _k1330 ); - } - } -} - -set_weather_to_player() -{ - self setclientfieldtoplayer( "player_weather_visionset", level.weather_vision ); -} - -rotate_skydome() -{ - level.sky_rotation = 360; - while ( 1 ) - { - level.sky_rotation -= 0,025; - if ( level.sky_rotation < 0 ) - { - level.sky_rotation += 360; - } - setdvar( "r_skyRotation", level.sky_rotation ); - wait 0,1; - } -} - -play_puzzle_stinger_on_all_players() -{ - players = getplayers(); - _a1367 = players; - _k1367 = getFirstArrayKey( _a1367 ); - while ( isDefined( _k1367 ) ) - { - player = _a1367[ _k1367 ]; - player playsound( "zmb_squest_step2_finished" ); - _k1367 = getNextArrayKey( _a1367, _k1367 ); - } -} - -puzzle_orb_move( v_to_pos ) -{ - dist = distance( self.origin, v_to_pos ); - if ( dist == 0 ) - { - return; - } - movetime = dist / 300; - self moveto( v_to_pos, movetime, 0, 0 ); - self waittill( "movedone" ); -} - -puzzle_orb_follow_path( s_start ) -{ - s_next_pos = s_start; - while ( isDefined( s_next_pos ) ) - { - self puzzle_orb_move( s_next_pos.origin ); - if ( isDefined( s_next_pos.target ) ) - { - s_next_pos = getstruct( s_next_pos.target, "targetname" ); - continue; - } - else - { - s_next_pos = undefined; - } - } -} - -puzzle_orb_follow_return_path( s_start, n_element ) -{ - a_path = []; - s_next = s_start; - while ( isDefined( s_next ) ) - { - a_path[ a_path.size ] = s_next; - if ( isDefined( s_next.target ) ) - { - s_next = getstruct( s_next.target, "targetname" ); - continue; - } - else - { - s_next = undefined; - } - } - v_start = a_path[ a_path.size - 1 ].origin + vectorScale( ( 0, 0, 1 ), 1000 ); - e_model = spawn( "script_model", v_start ); - e_model setmodel( s_start.model ); - e_model setclientfield( "element_glow_fx", n_element ); - playfxontag( level._effect[ "puzzle_orb_trail" ], e_model, "tag_origin" ); - i = a_path.size - 1; - while ( i >= 0 ) - { - e_model puzzle_orb_move( a_path[ i ].origin ); - i--; - - } - return e_model; -} - -puzzle_orb_pillar_show() -{ - level notify( "sky_pillar_reset" ); - level endon( "sky_pillar_reset" ); - s_pillar = getstruct( "crypt_pillar", "targetname" ); - exploder( 333 ); - if ( isDefined( s_pillar.e_model ) ) - { - s_pillar.e_model delete(); - } - s_pillar.e_model = spawn( "script_model", s_pillar.origin ); - s_pillar.e_model endon( "death" ); - s_pillar.e_model ghost(); - s_pillar.e_model setmodel( "fxuse_sky_pillar_new" ); - s_pillar.e_model setclientfield( "sky_pillar", 1 ); - wait_network_frame(); - s_pillar.e_model show(); - wait 1; - wait 27,5; - s_pillar.e_model setclientfield( "sky_pillar", 0 ); - wait 1; - s_pillar.e_model delete(); -} - -any_player_looking_at_plinth( min_lookat_dot, n_near_dist_sq ) -{ - players = getplayers(); - _a1482 = players; - _k1482 = getFirstArrayKey( _a1482 ); - while ( isDefined( _k1482 ) ) - { - player = _a1482[ _k1482 ]; - dist_sq = distance2dsquared( player.origin, self.origin ); - if ( dist_sq < n_near_dist_sq ) - { - fvec = anglesToForward( player.angles ); - to_self = self.origin - player.origin; - to_self = vectornormalize( to_self ); - dot_to_self = vectordot( to_self, fvec ); - if ( dot_to_self > min_lookat_dot ) - { - return 1; - } - } - _k1482 = getNextArrayKey( _a1482, _k1482 ); - } - return 0; -} - -puzzle_orb_ready_to_leave( str_zone, min_lookat_dot, n_near_dist_sq ) -{ - if ( !level.zones[ str_zone ].is_occupied || flag( "chamber_puzzle_cheat" ) ) - { - return 1; - } - return any_player_looking_at_plinth( min_lookat_dot, n_near_dist_sq ); -} - -puzzle_orb_chamber_to_crypt( str_start_point, e_gem_pos ) -{ - a_puzzle_flags = strtok( e_gem_pos.script_flag, " " ); -/# - assert( a_puzzle_flags.size == 2 ); -#/ - _a1517 = a_puzzle_flags; - _k1517 = getFirstArrayKey( _a1517 ); - while ( isDefined( _k1517 ) ) - { - str_flag = _a1517[ _k1517 ]; -/# - assert( level flag_exists( str_flag ) ); -#/ - _k1517 = getNextArrayKey( _a1517, _k1517 ); - } - flag_wait( a_puzzle_flags[ 0 ] ); - s_start = getstruct( str_start_point, "targetname" ); - e_model = spawn( "script_model", s_start.origin ); - e_model setmodel( s_start.model ); - e_model.script_int = e_gem_pos.script_int; - wait_network_frame(); - e_model playsound( "zmb_squest_crystal_leave" ); - wait_network_frame(); - e_model playloopsound( "zmb_squest_crystal_loop", 1 ); - str_zone = maps/mp/zombies/_zm_zonemgr::get_zone_from_position( s_start.origin, 1 ); - time_looking_at_orb = 0; - min_lookat_dot = cos( 30 ); - n_near_dist_sq = 32400; - while ( time_looking_at_orb < 1 ) - { - wait 0,1; - if ( s_start puzzle_orb_ready_to_leave( str_zone, min_lookat_dot, n_near_dist_sq ) ) - { - time_looking_at_orb += 0,1; - continue; - } - else - { - time_looking_at_orb = 0; - } - } - wait_network_frame(); - playfxontag( level._effect[ "puzzle_orb_trail" ], e_model, "tag_origin" ); - wait_network_frame(); - s_next_pos = getstruct( s_start.target, "targetname" ); - e_model puzzle_orb_follow_path( s_next_pos ); - v_sky_pos = e_model.origin; - v_sky_pos = ( v_sky_pos[ 0 ], v_sky_pos[ 1 ], v_sky_pos[ 2 ] + 1000 ); - e_model puzzle_orb_move( v_sky_pos ); - e_model ghost(); - s_descend_start = getstruct( "orb_crypt_descent_path", "targetname" ); - v_pos_above_gem = s_descend_start.origin + vectorScale( ( 0, 0, 1 ), 3000 ); - e_model moveto( v_pos_above_gem, 0,05, 0, 0 ); - e_model waittill( "movedone" ); - flag_wait( a_puzzle_flags[ 1 ] ); - e_model show(); - level thread puzzle_orb_pillar_show(); - e_model puzzle_orb_follow_path( s_descend_start ); - flag_set( "disc_rotation_active" ); - e_model puzzle_orb_move( e_gem_pos.origin ); - e_model_nofx = spawn( "script_model", e_model.origin ); - e_model_nofx setmodel( e_model.model ); - e_model_nofx.script_int = e_gem_pos.script_int; - e_model delete(); - wait_network_frame(); - e_model_nofx playsound( "zmb_squest_crystal_arrive" ); - wait_network_frame(); - e_model_nofx playloopsound( "zmb_squest_crystal_loop", 1 ); - flag_clear( "disc_rotation_active" ); - return e_model_nofx; -} - -capture_zombie_spawn_init( animname_set ) -{ - if ( !isDefined( animname_set ) ) - { - animname_set = 0; - } - self.targetname = "capture_zombie_ai"; - if ( !animname_set ) - { - self.animname = "zombie"; - } - self.sndname = "capzomb"; - if ( isDefined( get_gamemode_var( "pre_init_zombie_spawn_func" ) ) ) - { - self [[ get_gamemode_var( "pre_init_zombie_spawn_func" ) ]](); - } - self thread play_ambient_zombie_vocals(); - self.zmb_vocals_attack = "zmb_vocals_capzomb_attack"; - self.no_damage_points = 1; - self.deathpoints_already_given = 1; - self.ignore_enemy_count = 1; - self.ignoreall = 1; - self.ignoreme = 1; - self.allowdeath = 1; - self.force_gib = 1; - self.is_zombie = 1; - self.has_legs = 1; - self allowedstances( "stand" ); - self.zombie_damaged_by_bar_knockdown = 0; - self.gibbed = 0; - self.head_gibbed = 0; - self.disablearrivals = 1; - self.disableexits = 1; - self.grenadeawareness = 0; - self.badplaceawareness = 0; - self.ignoresuppression = 1; - self.suppressionthreshold = 1; - self.nododgemove = 1; - self.dontshootwhilemoving = 1; - self.pathenemylookahead = 0; - self.badplaceawareness = 0; - self.chatinitialized = 0; - self.a.disablepain = 1; - self disable_react(); - if ( isDefined( level.zombie_health ) ) - { - self.maxhealth = level.zombie_health; - if ( isDefined( level.zombie_respawned_health ) && level.zombie_respawned_health.size > 0 ) - { - self.health = level.zombie_respawned_health[ 0 ]; - arrayremovevalue( level.zombie_respawned_health, level.zombie_respawned_health[ 0 ] ); - } - else - { - self.health = level.zombie_health; - } - } - else - { - self.maxhealth = level.zombie_vars[ "zombie_health_start" ]; - self.health = self.maxhealth; - } - self.freezegun_damage = 0; - self.dropweapon = 0; - level thread zombie_death_event( self ); - self set_zombie_run_cycle(); - self thread dug_zombie_think(); - self thread zombie_gib_on_damage(); - self thread zombie_damage_failsafe(); - self thread enemy_death_detection(); - if ( !isDefined( self.no_eye_glow ) || !self.no_eye_glow ) - { - if ( isDefined( self.is_inert ) && !self.is_inert ) - { - self thread delayed_zombie_eye_glow(); - } - } - self.deathfunction = ::zombie_death_animscript; - self.flame_damage_time = 0; - self.meleedamage = 60; - self.no_powerups = 1; - self zombie_history( "zombie_spawn_init -> Spawned = " + self.origin ); - self.thundergun_knockdown_func = level.basic_zombie_thundergun_knockdown; - self.tesla_head_gib_func = ::zombie_tesla_head_gib; - self.team = level.zombie_team; - if ( isDefined( get_gamemode_var( "post_init_zombie_spawn_func" ) ) ) - { - self [[ get_gamemode_var( "post_init_zombie_spawn_func" ) ]](); - } - self.zombie_init_done = 1; - self notify( "zombie_init_done" ); -} - -rumble_players_in_chamber( n_rumble_enum, n_rumble_time ) -{ - if ( !isDefined( n_rumble_time ) ) - { - n_rumble_time = 0,1; - } - a_players = getplayers(); - a_rumbled_players = []; - _a1753 = a_players; - _k1753 = getFirstArrayKey( _a1753 ); - while ( isDefined( _k1753 ) ) - { - e_player = _a1753[ _k1753 ]; - if ( maps/mp/zm_tomb_chamber::is_point_in_chamber( e_player.origin ) ) - { - e_player setclientfieldtoplayer( "player_rumble_and_shake", n_rumble_enum ); - a_rumbled_players[ a_rumbled_players.size ] = e_player; - } - _k1753 = getNextArrayKey( _a1753, _k1753 ); - } - wait n_rumble_time; - _a1764 = a_rumbled_players; - _k1764 = getFirstArrayKey( _a1764 ); - while ( isDefined( _k1764 ) ) - { - e_player = _a1764[ _k1764 ]; - e_player setclientfieldtoplayer( "player_rumble_and_shake", 0 ); - _k1764 = getNextArrayKey( _a1764, _k1764 ); - } -} - -rumble_nearby_players( v_center, n_range, n_rumble_enum ) -{ - n_range_sq = n_range * n_range; - a_players = getplayers(); - a_rumbled_players = []; - _a1775 = a_players; - _k1775 = getFirstArrayKey( _a1775 ); - while ( isDefined( _k1775 ) ) - { - e_player = _a1775[ _k1775 ]; - if ( distancesquared( v_center, e_player.origin ) < n_range_sq ) - { - e_player setclientfieldtoplayer( "player_rumble_and_shake", n_rumble_enum ); - a_rumbled_players[ a_rumbled_players.size ] = e_player; - } - _k1775 = getNextArrayKey( _a1775, _k1775 ); - } - wait_network_frame(); - _a1786 = a_rumbled_players; - _k1786 = getFirstArrayKey( _a1786 ); - while ( isDefined( _k1786 ) ) - { - e_player = _a1786[ _k1786 ]; - e_player setclientfieldtoplayer( "player_rumble_and_shake", 0 ); - _k1786 = getNextArrayKey( _a1786, _k1786 ); - } -} - -whirlwind_rumble_player( e_whirlwind, str_active_flag ) -{ - if ( isDefined( self.whirlwind_rumble_on ) && self.whirlwind_rumble_on ) - { - return; - } - self.whirlwind_rumble_on = 1; - n_rumble_level = 1; - self setclientfieldtoplayer( "player_rumble_and_shake", 4 ); - dist_sq = distancesquared( self.origin, e_whirlwind.origin ); - range_inner_sq = 10000; - range_sq = 90000; - while ( dist_sq < range_sq ) - { - wait 0,05; - if ( !isDefined( e_whirlwind ) ) - { - break; - } - else if ( isDefined( str_active_flag ) ) - { - if ( !flag( str_active_flag ) ) - { - break; - } - } - else - { - dist_sq = distancesquared( self.origin, e_whirlwind.origin ); - if ( n_rumble_level == 1 && dist_sq < range_inner_sq ) - { - n_rumble_level = 2; - self setclientfieldtoplayer( "player_rumble_and_shake", 5 ); - continue; - } - else - { - if ( n_rumble_level == 2 && dist_sq >= range_inner_sq ) - { - n_rumble_level = 1; - self setclientfieldtoplayer( "player_rumble_and_shake", 4 ); - } - } - } - } - self setclientfieldtoplayer( "player_rumble_and_shake", 0 ); - self.whirlwind_rumble_on = 0; -} - -whirlwind_rumble_nearby_players( str_active_flag ) -{ - range_sq = 90000; - while ( flag( str_active_flag ) ) - { - a_players = getplayers(); - _a1853 = a_players; - _k1853 = getFirstArrayKey( _a1853 ); - while ( isDefined( _k1853 ) ) - { - player = _a1853[ _k1853 ]; - dist_sq = distancesquared( self.origin, player.origin ); - if ( dist_sq < range_sq ) - { - player thread whirlwind_rumble_player( self, str_active_flag ); - } - _k1853 = getNextArrayKey( _a1853, _k1853 ); - } - wait_network_frame(); - } -} - -clean_up_bunker_doors() -{ - a_door_models = getentarray( "bunker_door", "script_noteworthy" ); - array_thread( a_door_models, ::bunker_door_clean_up ); -} - -bunker_door_clean_up() -{ - self waittill( "movedone" ); - self delete(); -} - -adjustments_for_solo() -{ - if ( isDefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) - { - a_door_buys = getentarray( "zombie_door", "targetname" ); - array_thread( a_door_buys, ::door_price_reduction_for_solo ); - a_debris_buys = getentarray( "zombie_debris", "targetname" ); - array_thread( a_debris_buys, ::door_price_reduction_for_solo ); - change_weapon_cost( "beretta93r_zm", 750 ); - change_weapon_cost( "870mcs_zm", 750 ); - } -} - -door_price_reduction_for_solo() -{ - if ( self.zombie_cost >= 750 ) - { - self.zombie_cost -= 250; - if ( self.zombie_cost >= 2500 ) - { - self.zombie_cost -= 250; - } - if ( self.targetname == "zombie_door" ) - { - self set_hint_string( self, "default_buy_door", self.zombie_cost ); - return; - } - else - { - self set_hint_string( self, "default_buy_debris", self.zombie_cost ); - } - } -} - -change_weapon_cost( str_weapon, n_cost ) -{ - level.zombie_weapons[ str_weapon ].cost = n_cost; - level.zombie_weapons[ str_weapon ].ammo_cost = round_up_to_ten( int( n_cost * 0,5 ) ); -} - -zone_capture_powerup() -{ - while ( 1 ) - { - flag_wait( "zone_capture_in_progress" ); - flag_waitopen( "zone_capture_in_progress" ); - wait 2; - _a1945 = level.zone_capture.zones; - _k1945 = getFirstArrayKey( _a1945 ); - while ( isDefined( _k1945 ) ) - { - generator = _a1945[ _k1945 ]; - while ( generator ent_flag( "player_controlled" ) ) - { - _a1950 = level.a_uts_challenge_boxes; - _k1950 = getFirstArrayKey( _a1950 ); - while ( isDefined( _k1950 ) ) - { - uts_box = _a1950[ _k1950 ]; - if ( uts_box.str_location == "start_bunker" ) - { - if ( isDefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) - { - level thread maps/mp/zombies/_zm_challenges::open_box( undefined, uts_box, ::maps/mp/zm_tomb_challenges::reward_powerup_double_points, -1 ); - } - else - { - level thread maps/mp/zombies/_zm_challenges::open_box( undefined, uts_box, ::maps/mp/zm_tomb_challenges::reward_powerup_zombie_blood, -1 ); - } - return; - } - _k1950 = getNextArrayKey( _a1950, _k1950 ); - } - } - _k1945 = getNextArrayKey( _a1945, _k1945 ); - } - } -} - -traversal_blocker() -{ - flag_wait( "activate_zone_nml" ); - m_traversal_blocker = getent( "traversal_blocker", "targetname" ); - m_traversal_blocker connectpaths(); - m_traversal_blocker delete(); -} - -_kill_zombie_network_safe_internal( e_attacker, str_weapon ) -{ - if ( !isDefined( self ) ) - { - return; - } - if ( !isalive( self ) ) - { - return; - } - self.staff_dmg = str_weapon; - self dodamage( self.health, self.origin, e_attacker, e_attacker, "none", self.kill_damagetype, 0, str_weapon ); -} - -_damage_zombie_network_safe_internal( e_attacker, str_weapon, n_damage_amt ) -{ - if ( !isDefined( self ) ) - { - return; - } - if ( !isalive( self ) ) - { - return; - } - self dodamage( n_damage_amt, self.origin, e_attacker, e_attacker, "none", self.kill_damagetype, 0, str_weapon ); -} - -do_damage_network_safe( e_attacker, n_amount, str_weapon, str_mod ) -{ - if ( isDefined( self.is_mechz ) && self.is_mechz ) - { - self dodamage( n_amount, self.origin, e_attacker, e_attacker, "none", str_mod, 0, str_weapon ); - } - else - { - if ( n_amount < self.health ) - { - self.kill_damagetype = str_mod; - maps/mp/zombies/_zm_net::network_safe_init( "dodamage", 6 ); - self maps/mp/zombies/_zm_net::network_choke_action( "dodamage", ::_damage_zombie_network_safe_internal, e_attacker, str_weapon, n_amount ); - return; - } - else - { - self.kill_damagetype = str_mod; - maps/mp/zombies/_zm_net::network_safe_init( "dodamage_kill", 4 ); - self maps/mp/zombies/_zm_net::network_choke_action( "dodamage_kill", ::_kill_zombie_network_safe_internal, e_attacker, str_weapon ); - } - } -} - -_throttle_bullet_trace_think() -{ - level.bullet_traces_this_frame = 0; - wait_network_frame(); -} - -bullet_trace_throttled( v_start, v_end, e_ignore ) -{ - if ( !isDefined( level.bullet_traces_this_frame ) ) - { - level thread _throttle_bullet_trace_think(); - } - while ( level.bullet_traces_this_frame >= 2 ) - { - wait_network_frame(); - } - level.bullet_traces_this_frame++; - return bullettracepassed( v_start, v_end, 0, e_ignore ); -} - -tomb_get_closest_player_using_paths( origin, players ) -{ - min_length_to_player = 9999999; - n_2d_distance_squared = 9999999; - player_to_return = undefined; - dist_to_tank = undefined; - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - if ( !isDefined( player ) ) - { - i++; - continue; - } - else if ( isDefined( player.b_already_on_tank ) && player.b_already_on_tank ) - { - if ( !isDefined( dist_to_tank ) ) - { - length_to_player = self maps/mp/zm_tomb_tank::tomb_get_path_length_to_tank(); - dist_to_tank = length_to_player; - } - else - { - length_to_player = dist_to_tank; - } - } - else - { - length_to_player = self get_path_length_to_enemy( player ); - } - if ( isDefined( level.validate_enemy_path_length ) ) - { - if ( length_to_player == 0 ) - { - valid = self thread [[ level.validate_enemy_path_length ]]( player ); - if ( !valid ) - { - i++; - continue; - } - } - } - else if ( length_to_player < min_length_to_player ) - { - min_length_to_player = length_to_player; - player_to_return = player; - n_2d_distance_squared = distance2dsquared( self.origin, player.origin ); - i++; - continue; - } - else - { - if ( length_to_player == min_length_to_player && length_to_player <= 5 ) - { - n_new_distance = distance2dsquared( self.origin, player.origin ); - if ( n_new_distance < n_2d_distance_squared ) - { - min_length_to_player = length_to_player; - player_to_return = player; - n_2d_distance_squared = n_new_distance; - } - } - } - i++; - } - return player_to_return; -} - -update_staff_accessories( n_element_index ) -{ -/# - if ( !isDefined( n_element_index ) ) - { - n_element_index = 0; - str_weapon = self getcurrentweapon(); - if ( is_weapon_upgraded_staff( str_weapon ) ) - { - s_info = maps/mp/zm_tomb_craftables::get_staff_info_from_weapon_name( str_weapon ); - if ( isDefined( s_info ) ) - { - n_element_index = s_info.enum; - s_info.charger.is_charged = 1; -#/ - } - } - } - if ( isDefined( self.one_inch_punch_flag_has_been_init ) && !self.one_inch_punch_flag_has_been_init ) - { - cur_weapon = self get_player_melee_weapon(); - weapon_to_keep = "knife_zm"; - self.use_staff_melee = 0; - if ( n_element_index != 0 ) - { - staff_info = maps/mp/zm_tomb_craftables::get_staff_info_from_element_index( n_element_index ); - if ( staff_info.charger.is_charged ) - { - staff_info = staff_info.upgrade; - } - if ( isDefined( staff_info.melee ) ) - { - weapon_to_keep = staff_info.melee; - self.use_staff_melee = 1; - } - } - melee_changed = 0; - if ( cur_weapon != weapon_to_keep ) - { - self takeweapon( cur_weapon ); - self giveweapon( weapon_to_keep ); - self set_player_melee_weapon( weapon_to_keep ); - melee_changed = 1; - } - } - has_revive = self hasweapon( "staff_revive_zm" ); - has_upgraded_staff = 0; - a_weapons = self getweaponslistprimaries(); - staff_info = maps/mp/zm_tomb_craftables::get_staff_info_from_element_index( n_element_index ); - _a2199 = a_weapons; - _k2199 = getFirstArrayKey( _a2199 ); - while ( isDefined( _k2199 ) ) - { - str_weapon = _a2199[ _k2199 ]; - if ( is_weapon_upgraded_staff( str_weapon ) ) - { - has_upgraded_staff = 1; - } - _k2199 = getNextArrayKey( _a2199, _k2199 ); - } - if ( has_revive && !has_upgraded_staff ) - { - self setactionslot( 3, "altmode" ); - self takeweapon( "staff_revive_zm" ); - } - else - { - if ( !has_revive && has_upgraded_staff ) - { - self setactionslot( 3, "weapon", "staff_revive_zm" ); - self giveweapon( "staff_revive_zm" ); - if ( isDefined( staff_info ) ) - { - if ( isDefined( staff_info.upgrade.revive_ammo_stock ) ) - { - self setweaponammostock( "staff_revive_zm", staff_info.upgrade.revive_ammo_stock ); - self setweaponammoclip( "staff_revive_zm", staff_info.upgrade.revive_ammo_clip ); - } - } - } - } -} - -get_round_enemy_array_wrapper() -{ - if ( isDefined( level.custom_get_round_enemy_array_func ) ) - { - a_enemies = [[ level.custom_get_round_enemy_array_func ]](); - } - else - { - a_enemies = get_round_enemy_array(); - } - return a_enemies; -} - -add_ragdoll() -{ - level.n_active_ragdolls++; - wait 1; - if ( level.n_active_ragdolls > 0 ) - { - level.n_active_ragdolls--; - - } -} - -ragdoll_attempt() -{ - if ( level.n_active_ragdolls >= 4 ) - { - return 0; - } - level thread add_ragdoll(); - return 1; -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_vo.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_vo.gsc deleted file mode 100644 index 7ca65f0..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zm_tomb_vo.gsc +++ /dev/null @@ -1,2789 +0,0 @@ -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init_level_specific_audio() -{ - flag_init( "story_vo_playing" ); - flag_init( "round_one_narrative_vo_complete" ); - flag_init( "maxis_audiolog_gr0_playing" ); - flag_init( "maxis_audiolog_gr1_playing" ); - flag_init( "maxis_audiolog_gr2_playing" ); - flag_init( "maxis_audio_log_1" ); - flag_init( "maxis_audio_log_2" ); - flag_init( "maxis_audio_log_3" ); - flag_init( "maxis_audio_log_4" ); - flag_init( "maxis_audio_log_5" ); - flag_init( "maxis_audio_log_6" ); - flag_init( "generator_find_vo_playing" ); - flag_init( "samantha_intro_done" ); - flag_init( "maxis_crafted_intro_done" ); - level.oh_shit_vo_cooldown = 0; - level.remove_perk_vo_delay = 1; - setdvar( "zombie_kills", "5" ); - setdvar( "zombie_kill_timer", "6" ); - if ( is_classic() ) - { - level._audio_custom_response_line = ::tomb_audio_custom_response_line; - level.audio_get_mod_type = ::tomb_audio_get_mod_type_override; - level.custom_kill_damaged_vo = ::maps/mp/zombies/_zm_audio::custom_kill_damaged_vo; - level._custom_zombie_oh_shit_vox_func = ::tomb_custom_zombie_oh_shit_vox; - level.gib_on_damage = ::tomb_custom_crawler_spawned_vo; - level._audio_custom_weapon_check = ::tomb_audio_custom_weapon_check; - level._magic_box_used_vo = ::tomb_magic_box_used_vo; - level thread start_narrative_vo(); - level thread first_magic_box_seen_vo(); - level thread start_samantha_intro_vo(); - level.zombie_custom_craftable_built_vo = ::tomb_drone_built_vo; - level thread discover_dig_site_vo(); - level thread maxis_audio_logs(); - level thread discover_pack_a_punch(); - } - tomb_add_player_dialogue( "player", "general", "no_money_weapon", "nomoney_generic", undefined ); - tomb_add_player_dialogue( "player", "general", "no_money_box", "nomoney_generic", undefined ); - tomb_add_player_dialogue( "player", "general", "perk_deny", "nomoney_generic", undefined ); - tomb_add_player_dialogue( "player", "general", "no_money_capture", "nomoney_generic", undefined ); - tomb_add_player_dialogue( "player", "perk", "specialty_armorvest", "perk_jugga", undefined ); - tomb_add_player_dialogue( "player", "perk", "specialty_quickrevive", "perk_revive", undefined ); - tomb_add_player_dialogue( "player", "perk", "specialty_fastreload", "perk_speed", undefined ); - tomb_add_player_dialogue( "player", "perk", "specialty_longersprint", "perk_stamine", undefined ); - tomb_add_player_dialogue( "player", "perk", "specialty_additionalprimaryweapon", "perk_mule", undefined ); - tomb_add_player_dialogue( "player", "kill", "closekill", "kill_close", undefined, 15 ); - tomb_add_player_dialogue( "player", "kill", "damage", "kill_damaged", undefined, 50 ); - tomb_add_player_dialogue( "player", "kill", "headshot", "kill_headshot", "resp_kill_headshot", 25 ); - tomb_add_player_dialogue( "player", "kill", "raygun", "kill_ray", undefined, 15 ); - tomb_add_player_dialogue( "player", "kill", "raymk2", "kill_raymk2", undefined, 15 ); - tomb_add_player_dialogue( "player", "kill", "one_inch_punch", "kill_one_inch", undefined, 15 ); - tomb_add_player_dialogue( "player", "kill", "ice_staff", "kill_ice", undefined, 15 ); - tomb_add_player_dialogue( "player", "kill", "ice_staff_upgrade", "kill_ice_upgrade", undefined, 15 ); - tomb_add_player_dialogue( "player", "kill", "fire_staff", "kill_fire", undefined, 15 ); - tomb_add_player_dialogue( "player", "kill", "fire_staff_upgrade", "kill_fire_upgrade", undefined, 15 ); - tomb_add_player_dialogue( "player", "kill", "light_staff", "kill_light", undefined, 15 ); - tomb_add_player_dialogue( "player", "kill", "light_staff_upgrade", "kill_light_upgrade", undefined, 15 ); - tomb_add_player_dialogue( "player", "kill", "wind_staff", "kill_wind", undefined, 15 ); - tomb_add_player_dialogue( "player", "kill", "wind_staff_upgrade", "kill_wind_upgrade", undefined, 15 ); - tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_0_neg", "head_rspnd_to_plr_0_neg", undefined, 100 ); - tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_0_pos", "head_rspnd_to_plr_0_pos", undefined, 100 ); - tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_1_neg", "head_rspnd_to_plr_1_neg", undefined, 100 ); - tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_1_pos", "head_rspnd_to_plr_1_pos", undefined, 100 ); - tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_2_neg", "head_rspnd_to_plr_2_neg", undefined, 100 ); - tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_2_pos", "head_rspnd_to_plr_2_pos", undefined, 100 ); - tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_3_neg", "head_rspnd_to_plr_3_neg", undefined, 100 ); - tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_3_pos", "head_rspnd_to_plr_3_pos", undefined, 100 ); - tomb_add_player_dialogue( "player", "powerup", "zombie_blood", "powerup_zombie_blood", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "revive_up", "revive_player", "revive_player", 100 ); - tomb_add_player_dialogue( "player", "general", "heal_revived_pos", "heal_revived_pos", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "heal_revived_neg", "heal_revived_neg", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "exert_sigh", "exert_sigh", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "exert_laugh", "exert_laugh", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "pain_high", "pain_high", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "build_dd_pickup", "build_dd_pickup", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "build_dd_brain_pickup", "pickup_brain", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "build_dd_final", "build_dd_final", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "build_dd_plc", "build_dd_take", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "build_zs_pickup", "build_zs_pickup", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "build_zs_final", "build_zs_final", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "build_zs_plc", "build_zs_take", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "record_pickup", "pickup_record", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "gramophone_pickup", "pickup_gramophone", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "place_gramophone", "place_gramophone", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "staff_part_pickup", "pickup_staff_part", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "crystal_pickup", "pickup_crystal", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "pickup_fire", "pickup_fire", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "pickup_ice", "pickup_ice", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "pickup_light", "pickup_light", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "pickup_wind", "pickup_wind", undefined, 100 ); - tomb_add_player_dialogue( "player", "puzzle", "try_puzzle", "activate_generic", undefined ); - tomb_add_player_dialogue( "player", "puzzle", "puzzle_confused", "confusion_generic", undefined ); - tomb_add_player_dialogue( "player", "puzzle", "puzzle_good", "outcome_yes_generic", undefined ); - tomb_add_player_dialogue( "player", "puzzle", "puzzle_bad", "outcome_no_generic", undefined ); - tomb_add_player_dialogue( "player", "puzzle", "berate_respond", "generic_chastise", undefined ); - tomb_add_player_dialogue( "player", "puzzle", "encourage_respond", "generic_encourage", undefined ); - tomb_add_player_dialogue( "player", "staff", "first_piece", "1st_staff_found", undefined ); - tomb_add_player_dialogue( "player", "general", "build_pickup", "pickup_generic", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "reboard", "rebuild_boards", undefined, 100 ); - tomb_add_player_dialogue( "player", "weapon_pickup", "explo", "wpck_explo", undefined, 100 ); - tomb_add_player_dialogue( "player", "weapon_pickup", "raygun_mark2_zm", "wpck_raymk2", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "use_box_intro", "use_box_intro", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "use_box_2nd_time", "use_box_2nd_time", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "take_weapon_intro", "take_weapon_intro", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "take_weapon_2nd_time", "take_weapon_2nd_time", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "discover_wall_buy", "discover_wall_buy", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "generic_wall_buy", "generic_wall_buy", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "pap_arm", "pap_arm", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "pap_discovered", "capture_zones", undefined, 100 ); - tomb_add_player_dialogue( "player", "tank", "discover_tank", "discover_tank", undefined ); - tomb_add_player_dialogue( "player", "tank", "tank_flame_zombie", "kill_tank", undefined ); - tomb_add_player_dialogue( "player", "tank", "tank_buy", "buy_tank", undefined ); - tomb_add_player_dialogue( "player", "tank", "tank_leave", "exit_tank", undefined ); - tomb_add_player_dialogue( "player", "tank", "tank_cooling", "cool_tank", undefined ); - tomb_add_player_dialogue( "player", "tank", "tank_left_behind", "miss_tank", undefined ); - tomb_add_player_dialogue( "player", "general", "siren_1st_time", "siren_1st_time", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "siren_generic", "siren_generic", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "multiple_mechs", "multiple_mechs", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "discover_mech", "discover_mech", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "mech_defeated", "mech_defeated", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "mech_grab", "rspnd_mech_grab", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "shoot_mech_arm", "shoot_mech_arm", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "shoot_mech_head", "shoot_mech_head", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "shoot_mech_power", "shoot_mech_power", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "rspnd_mech_jump", "rspnd_mech_jump", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "enter_robot", "enter_robot", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "purge_robot", "purge_robot", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "exit_robot", "exit_robot", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "air_chute_landing", "air_chute_landing", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "robot_crush_golden", "robot_crush_golden", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "robot_crush_player", "robot_crush_player", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "discover_robot", "discover_robot", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "see_robots", "see_robots", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "robot_crush_zombie", "robot_crush_zombie", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "robot_crush_mech", "robot_crush_mech", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "shoot_robot", "shoot_robot", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "warn_robot_foot", "warn_robot_foot", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "warn_robot", "warn_robot", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "use_beacon", "use_beacon", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_0_neg", "srnd_rspnd_to_plr_0_neg", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_1_neg", "srnd_rspnd_to_plr_1_neg", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_2_neg", "srnd_rspnd_to_plr_2_neg", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_3_neg", "srnd_rspnd_to_plr_3_neg", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_0_pos", "srnd_rspnd_to_plr_0_pos", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_1_pos", "srnd_rspnd_to_plr_1_pos", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_2_pos", "srnd_rspnd_to_plr_2_pos", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_3_pos", "srnd_rspnd_to_plr_3_pos", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "achievement", "earn_acheivement", undefined, 100 ); - tomb_add_player_dialogue( "player", "quest", "find_secret", "find_secret", undefined, 100 ); - tomb_add_player_dialogue( "player", "perk", "one_inch", "perk_one_inch", undefined, 100 ); - tomb_add_player_dialogue( "player", "digging", "pickup_shovel", "pickup_shovel", undefined, 100 ); - tomb_add_player_dialogue( "player", "digging", "dig_gun", "dig_gun", undefined, 15 ); - tomb_add_player_dialogue( "player", "digging", "dig_grenade", "dig_grenade", undefined, 15 ); - tomb_add_player_dialogue( "player", "digging", "dig_zombie", "dig_zombie", undefined, 15 ); - tomb_add_player_dialogue( "player", "digging", "dig_staff_part", "dig_staff_part", undefined, 100 ); - tomb_add_player_dialogue( "player", "digging", "dig_powerup", "dig_powerup", undefined, 15 ); - tomb_add_player_dialogue( "player", "digging", "dig_cash", "dig_cash", undefined, 15 ); - tomb_add_player_dialogue( "player", "soul_box", "zm_box_encourage", "zm_box_encourage", undefined, 100 ); - tomb_add_player_dialogue( "player", "zone_capture", "capture_started", "capture_zombies", undefined, 100 ); - tomb_add_player_dialogue( "player", "zone_capture", "recapture_started", "roaming_zombies", undefined, 100 ); - tomb_add_player_dialogue( "player", "zone_capture", "recapture_generator_attacked", "recapture_initiated", undefined, 100 ); - tomb_add_player_dialogue( "player", "zone_capture", "recapture_prevented", "recapture_prevented", undefined, 100 ); - tomb_add_player_dialogue( "player", "zone_capture", "all_generators_captured", "zones_held", undefined, 100 ); - tomb_add_player_dialogue( "player", "lockdown", "power_off", "lockdown_generic", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "struggle_mud", "struggle_mud", undefined, 100 ); - tomb_add_player_dialogue( "player", "general", "discover_dig_site", "discover_dig_site", undefined, 100 ); - tomb_add_player_dialogue( "player", "quadrotor", "kill_drone", "kill_drone", undefined, 100 ); - tomb_add_player_dialogue( "player", "quadrotor", "rspnd_drone_revive", "rspnd_drone_revive", undefined, 100 ); - tomb_add_player_dialogue( "player", "wunderfizz", "perk_wonder", "perk_wonder", undefined, 100 ); - tomb_add_player_dialogue( "player", "samantha", "hear_samantha_1", "hear_samantha_1", undefined, 100 ); - tomb_add_player_dialogue( "player", "samantha", "heroes_confer", "heroes_confer", undefined, 100 ); - tomb_add_player_dialogue( "player", "samantha", "hear_samantha_3", "hear_samantha_3", undefined, 100 ); - init_sam_promises(); -} - -tomb_add_player_dialogue( speaker, category, type, alias, response, chance ) -{ - level.vox zmbvoxadd( speaker, category, type, alias, response ); - if ( isDefined( chance ) ) - { - add_vox_response_chance( type, chance ); - } -} - -tomb_audio_get_mod_type_override( impact, mod, weapon, zombie, instakill, dist, player ) -{ - close_dist = 4096; - med_dist = 15376; - far_dist = 75625; - a_str_mod = []; - if ( isDefined( zombie.staff_dmg ) ) - { - weapon = zombie.staff_dmg; - } - else - { - if ( isDefined( zombie ) && isDefined( zombie.damageweapon ) ) - { - weapon = zombie.damageweapon; - } - } - if ( weapon == "staff_water_zm" || weapon == "staff_water_upgraded_zm" ) - { - a_str_mod[ a_str_mod.size ] = "ice_staff"; - } - if ( weapon == "staff_water_upgraded2_zm" || weapon == "staff_water_upgraded3_zm" ) - { - a_str_mod[ a_str_mod.size ] = "ice_staff_upgrade"; - } - if ( weapon == "staff_fire_zm" || weapon == "staff_fire_upgraded_zm" ) - { - a_str_mod[ a_str_mod.size ] = "fire_staff"; - } - if ( weapon == "staff_fire_upgraded2_zm" || weapon == "staff_fire_upgraded3_zm" ) - { - a_str_mod[ a_str_mod.size ] = "fire_staff_upgrade"; - } - if ( weapon == "staff_lightning_zm" || weapon == "staff_lightning_upgraded_zm" ) - { - a_str_mod[ a_str_mod.size ] = "light_staff"; - } - if ( weapon == "staff_lightning_upgraded2_zm" || weapon == "staff_lightning_upgraded3_zm" ) - { - a_str_mod[ a_str_mod.size ] = "light_staff_upgrade"; - } - if ( weapon == "staff_air_zm" || weapon == "staff_air_upgraded_zm" ) - { - a_str_mod[ a_str_mod.size ] = "wind_staff"; - } - if ( weapon == "staff_air_upgraded2_zm" || weapon == "staff_air_upgraded3_zm" ) - { - a_str_mod[ a_str_mod.size ] = "wind_staff_upgrade"; - } - if ( is_headshot( weapon, impact, mod ) && dist >= far_dist ) - { - a_str_mod[ a_str_mod.size ] = "headshot"; - } - if ( weapon == "ray_gun_zm" || weapon == "ray_gun_upgraded_zm" ) - { - if ( dist > far_dist ) - { - if ( !instakill ) - { - a_str_mod[ a_str_mod.size ] = "raygun"; - } - else - { - a_str_mod[ a_str_mod.size ] = "weapon_instakill"; - } - } - } - if ( weapon == "raygun_mark2_zm" || weapon == "raygun_mark2_upgraded_zm" ) - { - if ( dist > far_dist ) - { - if ( !instakill ) - { - a_str_mod[ a_str_mod.size ] = "raymk2"; - } - else - { - a_str_mod[ a_str_mod.size ] = "weapon_instakill"; - } - } - } - if ( is_explosive_damage( mod ) && weapon != "ray_gun_zm" && weapon != "ray_gun_upgraded_zm" && weapon != "raygun_mark2_zm" && weapon != "raygun_mark2_upgraded_zm" && isDefined( zombie.is_on_fire ) && !zombie.is_on_fire ) - { - if ( !issubstr( weapon, "staff" ) ) - { - if ( !instakill ) - { - a_str_mod[ a_str_mod.size ] = "explosive"; - } - else - { - a_str_mod[ a_str_mod.size ] = "weapon_instakill"; - } - } - } - if ( instakill ) - { - if ( mod == "MOD_MELEE" ) - { - a_str_mod[ a_str_mod.size ] = "melee_instakill"; - } - else - { - a_str_mod[ a_str_mod.size ] = "weapon_instakill"; - } - } - if ( mod != "MOD_MELEE" && !zombie.has_legs ) - { - a_str_mod[ a_str_mod.size ] = "crawler"; - } - if ( mod != "MOD_BURNED" && dist < close_dist ) - { - a_str_mod[ a_str_mod.size ] = "closekill"; - } - if ( a_str_mod.size == 0 ) - { - str_mod_final = "default"; - } - else if ( a_str_mod.size == 1 ) - { - str_mod_final = a_str_mod[ 0 ]; - } - else - { - i = 0; - while ( i < a_str_mod.size ) - { - if ( cointoss() ) - { - str_mod_final = a_str_mod[ i ]; - } - i++; - } - str_mod_final = a_str_mod[ randomint( a_str_mod.size ) ]; - } - return str_mod_final; -} - -tomb_custom_zombie_oh_shit_vox() -{ - self endon( "death_or_disconnect" ); - while ( 1 ) - { - wait 1; - if ( isDefined( self.oh_shit_vo_cooldown ) && self.oh_shit_vo_cooldown ) - { - continue; - } - players = get_players(); - zombs = get_round_enemy_array(); - if ( players.size <= 1 ) - { - n_distance = 250; - n_zombies = 5; - n_chance = 30; - n_cooldown_time = 20; - } - else - { - n_distance = 250; - n_zombies = 5; - n_chance = 30; - n_cooldown_time = 15; - } - close_zombs = 0; - i = 0; - while ( i < zombs.size ) - { - if ( isDefined( zombs[ i ].favoriteenemy ) || zombs[ i ].favoriteenemy == self && !isDefined( zombs[ i ].favoriteenemy ) ) - { - if ( distancesquared( zombs[ i ].origin, self.origin ) < ( n_distance * n_distance ) ) - { - close_zombs++; - } - } - i++; - } - if ( close_zombs >= n_zombies ) - { - if ( randomint( 100 ) < n_chance && isDefined( self.giant_robot_transition ) && !self.giant_robot_transition && !isDefined( self.in_giant_robot_head ) ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "oh_shit" ); - self thread global_oh_shit_cooldown_timer( n_cooldown_time ); - wait n_cooldown_time; - } - } - } -} - -global_oh_shit_cooldown_timer( n_cooldown_time ) -{ - self endon( "disconnect" ); - self.oh_shit_vo_cooldown = 1; - wait n_cooldown_time; - self.oh_shit_vo_cooldown = 0; -} - -tomb_custom_crawler_spawned_vo() -{ - self endon( "death" ); - if ( isDefined( self.a.gib_ref ) && isalive( self ) ) - { - if ( self.a.gib_ref != "no_legs" || self.a.gib_ref == "right_leg" && self.a.gib_ref == "left_leg" ) - { - if ( isDefined( self.attacker ) && isplayer( self.attacker ) ) - { - if ( isDefined( self.attacker.crawler_created_vo_cooldown ) && self.attacker.crawler_created_vo_cooldown ) - { - return; - } - rand = randomintrange( 0, 100 ); - if ( rand < 15 ) - { - self.attacker maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "crawl_spawn" ); - self.attacker thread crawler_created_vo_cooldown(); - } - } - } - } -} - -crawler_created_vo_cooldown() -{ - self endon( "disconnect" ); - self.crawler_created_vo_cooldown = 1; - wait 30; - self.crawler_created_vo_cooldown = 0; -} - -tomb_audio_custom_weapon_check( weapon, magic_box ) -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( isDefined( magic_box ) && magic_box ) - { - if ( isDefined( self.magic_box_uses ) && self.magic_box_uses == 1 ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "take_weapon_intro" ); - } - else - { - if ( isDefined( self.magic_box_uses ) && self.magic_box_uses == 2 ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "take_weapon_2nd_time" ); - } - else - { - type = self maps/mp/zombies/_zm_weapons::weapon_type_check( weapon ); - return type; - } - } - } - else - { - if ( issubstr( weapon, "staff" ) ) - { - if ( weapon == "staff_fire_zm" ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "pickup_fire" ); - level notify( "staff_crafted_vo" ); - } - else if ( weapon == "staff_water_zm" ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "pickup_ice" ); - level notify( "staff_crafted_vo" ); - } - else if ( weapon == "staff_air_zm" ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "pickup_wind" ); - level notify( "staff_crafted_vo" ); - } - else - { - if ( weapon == "staff_lightning_zm" ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "pickup_light" ); - level notify( "staff_crafted_vo" ); - } - } - } - else if ( !isDefined( self.wallbuys_purchased ) ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "discover_wall_buy" ); - self.wallbuys_purchased = 1; - } - else if ( weapon == "sticky_grenade_zm" || weapon == "claymore_zm" ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "explo" ); - } - else - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "generic_wall_buy" ); - } - } - return "crappy"; -} - -tomb_magic_box_used_vo() -{ - if ( !isDefined( self.magic_box_uses ) ) - { - self.magic_box_uses = 1; - } - else - { - self.magic_box_uses++; - } - if ( self.magic_box_uses == 1 ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "use_box_intro" ); - } - else - { - if ( self.magic_box_uses == 2 ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "use_box_2nd_time" ); - } - } -} - -easter_egg_song_vo( player ) -{ - wait 3,5; - if ( isalive( player ) ) - { - player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "quest", "find_secret" ); - } - else - { - while ( 1 ) - { - a_players = getplayers(); - _a643 = a_players; - _k643 = getFirstArrayKey( _a643 ); - while ( isDefined( _k643 ) ) - { - player = _a643[ _k643 ]; - if ( isalive( player ) ) - { - if ( isDefined( player.dontspeak ) && !player.dontspeak ) - { - player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "quest", "find_secret" ); - } - } - _k643 = getNextArrayKey( _a643, _k643 ); - } - } - wait 0,1; - } -} - -play_gramophone_place_vo() -{ - if ( isDefined( self.dontspeak ) && !self.dontspeak ) - { - if ( isDefined( self.gramophone_place_vo ) && !self.gramophone_place_vo ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "place_gramophone" ); - self.gramophone_place_vo = 1; - } - } -} - -setup_personality_character_exerts() -{ - level.exert_sounds[ 1 ][ "burp" ][ 0 ] = "vox_plr_0_exert_burp_0"; - level.exert_sounds[ 1 ][ "burp" ][ 1 ] = "vox_plr_0_exert_burp_1"; - level.exert_sounds[ 1 ][ "burp" ][ 2 ] = "vox_plr_0_exert_burp_2"; - level.exert_sounds[ 1 ][ "burp" ][ 3 ] = "vox_plr_0_exert_burp_3"; - level.exert_sounds[ 1 ][ "burp" ][ 4 ] = "vox_plr_0_exert_burp_4"; - level.exert_sounds[ 1 ][ "burp" ][ 5 ] = "vox_plr_0_exert_burp_5"; - level.exert_sounds[ 1 ][ "burp" ][ 6 ] = "vox_plr_0_exert_burp_6"; - level.exert_sounds[ 2 ][ "burp" ][ 0 ] = "vox_plr_1_exert_burp_0"; - level.exert_sounds[ 2 ][ "burp" ][ 1 ] = "vox_plr_1_exert_burp_1"; - level.exert_sounds[ 2 ][ "burp" ][ 2 ] = "vox_plr_1_exert_burp_2"; - level.exert_sounds[ 2 ][ "burp" ][ 3 ] = "vox_plr_1_exert_burp_3"; - level.exert_sounds[ 3 ][ "burp" ][ 0 ] = "vox_plr_2_exert_burp_0"; - level.exert_sounds[ 3 ][ "burp" ][ 1 ] = "vox_plr_2_exert_burp_1"; - level.exert_sounds[ 3 ][ "burp" ][ 2 ] = "vox_plr_2_exert_burp_2"; - level.exert_sounds[ 3 ][ "burp" ][ 3 ] = "vox_plr_2_exert_burp_3"; - level.exert_sounds[ 3 ][ "burp" ][ 4 ] = "vox_plr_2_exert_burp_4"; - level.exert_sounds[ 3 ][ "burp" ][ 5 ] = "vox_plr_2_exert_burp_5"; - level.exert_sounds[ 3 ][ "burp" ][ 6 ] = "vox_plr_2_exert_burp_6"; - level.exert_sounds[ 4 ][ "burp" ][ 0 ] = "vox_plr_3_exert_burp_0"; - level.exert_sounds[ 4 ][ "burp" ][ 1 ] = "vox_plr_3_exert_burp_1"; - level.exert_sounds[ 4 ][ "burp" ][ 2 ] = "vox_plr_3_exert_burp_2"; - level.exert_sounds[ 4 ][ "burp" ][ 3 ] = "vox_plr_3_exert_burp_3"; - level.exert_sounds[ 4 ][ "burp" ][ 4 ] = "vox_plr_3_exert_burp_4"; - level.exert_sounds[ 4 ][ "burp" ][ 5 ] = "vox_plr_3_exert_burp_5"; - level.exert_sounds[ 4 ][ "burp" ][ 6 ] = "vox_plr_3_exert_burp_6"; - level.exert_sounds[ 1 ][ "hitmed" ][ 0 ] = "vox_plr_0_exert_pain_medium_0"; - level.exert_sounds[ 1 ][ "hitmed" ][ 1 ] = "vox_plr_0_exert_pain_medium_1"; - level.exert_sounds[ 1 ][ "hitmed" ][ 2 ] = "vox_plr_0_exert_pain_medium_2"; - level.exert_sounds[ 1 ][ "hitmed" ][ 3 ] = "vox_plr_0_exert_pain_medium_3"; - level.exert_sounds[ 2 ][ "hitmed" ][ 0 ] = "vox_plr_1_exert_pain_medium_0"; - level.exert_sounds[ 2 ][ "hitmed" ][ 1 ] = "vox_plr_1_exert_pain_medium_1"; - level.exert_sounds[ 2 ][ "hitmed" ][ 2 ] = "vox_plr_1_exert_pain_medium_2"; - level.exert_sounds[ 2 ][ "hitmed" ][ 3 ] = "vox_plr_1_exert_pain_medium_3"; - level.exert_sounds[ 3 ][ "hitmed" ][ 0 ] = "vox_plr_2_exert_pain_medium_0"; - level.exert_sounds[ 3 ][ "hitmed" ][ 1 ] = "vox_plr_2_exert_pain_medium_1"; - level.exert_sounds[ 3 ][ "hitmed" ][ 2 ] = "vox_plr_2_exert_pain_medium_2"; - level.exert_sounds[ 3 ][ "hitmed" ][ 3 ] = "vox_plr_2_exert_pain_medium_3"; - level.exert_sounds[ 4 ][ "hitmed" ][ 0 ] = "vox_plr_3_exert_pain_medium_0"; - level.exert_sounds[ 4 ][ "hitmed" ][ 1 ] = "vox_plr_3_exert_pain_medium_1"; - level.exert_sounds[ 4 ][ "hitmed" ][ 2 ] = "vox_plr_3_exert_pain_medium_2"; - level.exert_sounds[ 4 ][ "hitmed" ][ 3 ] = "vox_plr_3_exert_pain_medium_3"; - level.exert_sounds[ 1 ][ "hitlrg" ][ 0 ] = "vox_plr_0_exert_pain_high_0"; - level.exert_sounds[ 1 ][ "hitlrg" ][ 1 ] = "vox_plr_0_exert_pain_high_1"; - level.exert_sounds[ 1 ][ "hitlrg" ][ 2 ] = "vox_plr_0_exert_pain_high_2"; - level.exert_sounds[ 1 ][ "hitlrg" ][ 3 ] = "vox_plr_0_exert_pain_high_3"; - level.exert_sounds[ 2 ][ "hitlrg" ][ 0 ] = "vox_plr_1_exert_pain_high_0"; - level.exert_sounds[ 2 ][ "hitlrg" ][ 1 ] = "vox_plr_1_exert_pain_high_1"; - level.exert_sounds[ 2 ][ "hitlrg" ][ 2 ] = "vox_plr_1_exert_pain_high_2"; - level.exert_sounds[ 2 ][ "hitlrg" ][ 3 ] = "vox_plr_1_exert_pain_high_3"; - level.exert_sounds[ 3 ][ "hitlrg" ][ 0 ] = "vox_plr_2_exert_pain_high_0"; - level.exert_sounds[ 3 ][ "hitlrg" ][ 1 ] = "vox_plr_2_exert_pain_high_1"; - level.exert_sounds[ 3 ][ "hitlrg" ][ 2 ] = "vox_plr_2_exert_pain_high_2"; - level.exert_sounds[ 3 ][ "hitlrg" ][ 3 ] = "vox_plr_2_exert_pain_high_3"; - level.exert_sounds[ 4 ][ "hitlrg" ][ 0 ] = "vox_plr_3_exert_pain_high_0"; - level.exert_sounds[ 4 ][ "hitlrg" ][ 1 ] = "vox_plr_3_exert_pain_high_1"; - level.exert_sounds[ 4 ][ "hitlrg" ][ 2 ] = "vox_plr_3_exert_pain_high_2"; - level.exert_sounds[ 4 ][ "hitlrg" ][ 3 ] = "vox_plr_3_exert_pain_high_3"; -} - -tomb_audio_custom_response_line( player, index, category, type ) -{ - if ( type == "revive_up" ) - { - player thread play_pos_neg_response_on_closest_player( "general", "heal_revived", "kills" ); - } - else if ( type == "headshot" ) - { - player thread play_pos_neg_response_on_closest_player( "kill", "headshot_respond_to_plr_" + player.characterindex, "kills" ); - } - else - { - if ( type == "oh_shit" ) - { - player thread play_pos_neg_response_on_closest_player( "general", "srnd_rspnd_to_plr_" + player.characterindex, "kills" ); - player thread global_oh_shit_cooldown_timer( 15 ); - } - } -} - -play_vo_category_on_closest_player( category, type ) -{ - a_players = getplayers(); - if ( a_players.size <= 1 ) - { - return; - } - arrayremovevalue( a_players, self ); - a_closest = arraysort( a_players, self.origin, 1 ); - if ( distancesquared( self.origin, a_closest[ 0 ].origin ) <= 250000 ) - { - if ( isalive( a_closest[ 0 ] ) ) - { - a_closest[ 0 ] maps/mp/zombies/_zm_audio::create_and_play_dialog( category, type ); - } - } -} - -play_pos_neg_response_on_closest_player( category, type, str_stat ) -{ - a_players = getplayers(); - if ( a_players.size <= 1 ) - { - return; - } - arrayremovevalue( a_players, self ); - a_closest = arraysort( a_players, self.origin, 1 ); - _a801 = a_closest; - _k801 = getFirstArrayKey( _a801 ); - while ( isDefined( _k801 ) ) - { - player = _a801[ _k801 ]; - if ( distancesquared( self.origin, player.origin ) <= 250000 ) - { - if ( isalive( player ) ) - { - str_suffix = get_positive_or_negative_suffix( self, player, str_stat ); - if ( isDefined( str_suffix ) ) - { - type += str_suffix; - } - player maps/mp/zombies/_zm_audio::create_and_play_dialog( category, type ); - return; - } - } - else - { - _k801 = getNextArrayKey( _a801, _k801 ); - } - } -} - -get_positive_or_negative_suffix( e_player1, e_player2, str_stat ) -{ - n_player1_stat = e_player1 maps/mp/gametypes_zm/_globallogic_score::getpersstat( str_stat ); - n_player2_stat = e_player2 maps/mp/gametypes_zm/_globallogic_score::getpersstat( str_stat ); - if ( !isDefined( n_player1_stat ) || !isDefined( n_player2_stat ) ) - { - return undefined; - } - if ( n_player1_stat >= n_player2_stat ) - { - str_result = "_pos"; - } - else - { - str_result = "_neg"; - } - return str_result; -} - -struggle_mud_vo() -{ - self endon( "disconnect" ); - self.played_mud_vo = 1; - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "struggle_mud" ); - self waittill( "mud_slowdown_cleared" ); - self thread struggle_mud_vo_cooldown(); -} - -struggle_mud_vo_cooldown() -{ - self endon( "disconnect" ); - wait 600; - self.played_mud_vo = 0; -} - -discover_dig_site_vo() -{ - flag_wait( "activate_zone_nml" ); - s_origin = getstruct( "discover_dig_site_vo_trigger", "targetname" ); - s_origin.unitrigger_stub = spawnstruct(); - s_origin.unitrigger_stub.origin = s_origin.origin; - s_origin.unitrigger_stub.script_width = 320; - s_origin.unitrigger_stub.script_length = 88; - s_origin.unitrigger_stub.script_height = 256; - s_origin.unitrigger_stub.script_unitrigger_type = "unitrigger_box"; - s_origin.unitrigger_stub.angles = ( 0, 0, 0 ); - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( s_origin.unitrigger_stub, ::discover_dig_site_trigger_touch ); -} - -discover_dig_site_trigger_touch() -{ - while ( 1 ) - { - self waittill( "trigger", player ); - if ( isplayer( player ) ) - { - if ( isDefined( player.dontspeak ) && !player.dontspeak ) - { - player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "discover_dig_site" ); - maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.stub ); - return; - } - } - else - { - } - } -} - -maxis_audio_logs() -{ - a_s_radios = getstructarray( "maxis_audio_log", "targetname" ); - _a912 = a_s_radios; - _k912 = getFirstArrayKey( _a912 ); - while ( isDefined( _k912 ) ) - { - s_origin = _a912[ _k912 ]; - s_origin.unitrigger_stub = spawnstruct(); - s_origin.unitrigger_stub.origin = s_origin.origin; - s_origin.unitrigger_stub.radius = 36; - s_origin.unitrigger_stub.height = 256; - s_origin.unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - s_origin.unitrigger_stub.hint_string = &"ZM_TOMB_MAXIS_AUDIOLOG"; - s_origin.unitrigger_stub.cursor_hint = "HINT_NOICON"; - s_origin.unitrigger_stub.require_look_at = 1; - s_origin.unitrigger_stub.script_int = s_origin.script_int; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( s_origin.unitrigger_stub, ::maxis_audio_log_think ); - _k912 = getNextArrayKey( _a912, _k912 ); - } -} - -discover_pack_a_punch() -{ - t_pap_intro = getent( "pack_a_punch_intro_trigger", "targetname" ); - if ( !isDefined( t_pap_intro ) ) - { - return; - } - s_lookat = getstruct( t_pap_intro.target, "targetname" ); - while ( 1 ) - { - t_pap_intro waittill( "trigger", e_player ); - if ( !isDefined( e_player.discover_pap_vo_played ) ) - { - e_player.discover_pap_vo_played = 0; - } - while ( !e_player.discover_pap_vo_played ) - { - while ( vectordot( anglesToForward( e_player getplayerangles() ), vectornormalize( s_lookat.origin - e_player.origin ) ) > 0,8 && e_player can_player_speak() ) - { - e_player.discover_pap_vo_played = 1; - e_player create_and_play_dialog( "general", "pap_discovered" ); - _a955 = get_players(); - _k955 = getFirstArrayKey( _a955 ); - while ( isDefined( _k955 ) ) - { - player = _a955[ _k955 ]; - if ( distance( player.origin, e_player.origin ) < 800 ) - { - player.discover_pap_vo_played = 1; - } - _k955 = getNextArrayKey( _a955, _k955 ); - } - } - } - } -} - -can_player_speak() -{ - if ( isplayer( self ) && isDefined( self.dontspeak ) && !self.dontspeak ) - { - return self getclientfieldtoplayer( "isspeaking" ) == 0; - } -} - -maxis_audio_log_think() -{ - self waittill( "trigger", player ); - if ( !isplayer( player ) || !is_player_valid( player ) ) - { - return; - } - level thread play_maxis_audio_log( self.stub.origin, self.stub.script_int ); -} - -play_maxis_audio_log( v_trigger_origin, n_audiolog_id ) -{ - a_audiolog = get_audiolog_vo(); - a_audiolog_to_play = a_audiolog[ n_audiolog_id ]; - if ( n_audiolog_id == 4 ) - { - flag_set( "maxis_audiolog_gr0_playing" ); - } - else if ( n_audiolog_id == 5 ) - { - flag_set( "maxis_audiolog_gr1_playing" ); - } - else - { - if ( n_audiolog_id == 6 ) - { - flag_set( "maxis_audiolog_gr2_playing" ); - } - } - e_vo_origin = spawn( "script_origin", v_trigger_origin ); - flag_set( "maxis_audio_log_" + n_audiolog_id ); - a_s_triggers = getstructarray( "maxis_audio_log", "targetname" ); - _a1009 = a_s_triggers; - _k1009 = getFirstArrayKey( _a1009 ); - while ( isDefined( _k1009 ) ) - { - s_trigger = _a1009[ _k1009 ]; - if ( s_trigger.script_int == n_audiolog_id ) - { - break; - } - else - { - _k1009 = getNextArrayKey( _a1009, _k1009 ); - } - } - level thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( s_trigger.unitrigger_stub ); - i = 0; - while ( i < a_audiolog_to_play.size ) - { - e_vo_origin playsoundwithnotify( a_audiolog_to_play[ i ], a_audiolog_to_play[ i ] + "_done" ); - e_vo_origin waittill( a_audiolog_to_play[ i ] + "_done" ); - i++; - } - e_vo_origin delete(); - if ( n_audiolog_id == 4 ) - { - flag_clear( "maxis_audiolog_gr0_playing" ); - } - else if ( n_audiolog_id == 5 ) - { - flag_clear( "maxis_audiolog_gr1_playing" ); - } - else - { - if ( n_audiolog_id == 6 ) - { - flag_clear( "maxis_audiolog_gr2_playing" ); - } - } - level thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( s_trigger.unitrigger_stub, ::maxis_audio_log_think ); -} - -reset_maxis_audiolog_unitrigger( n_robot_id ) -{ - if ( n_robot_id == 0 ) - { - n_script_int = 4; - } - else if ( n_robot_id == 1 ) - { - n_script_int = 5; - } - else - { - if ( n_robot_id == 2 ) - { - n_script_int = 6; - } - } - if ( flag( "maxis_audio_log_" + n_script_int ) ) - { - return; - } - a_s_radios = getstructarray( "maxis_audio_log", "targetname" ); - _a1065 = a_s_radios; - _k1065 = getFirstArrayKey( _a1065 ); - while ( isDefined( _k1065 ) ) - { - s_origin = _a1065[ _k1065 ]; - if ( s_origin.script_int == n_script_int ) - { - if ( isDefined( s_origin.unitrigger_stub ) ) - { - maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( s_origin.unitrigger_stub ); - } - } - _k1065 = getNextArrayKey( _a1065, _k1065 ); - } -} - -restart_maxis_audiolog_unitrigger( n_robot_id ) -{ - if ( n_robot_id == 0 ) - { - n_script_int = 4; - } - else if ( n_robot_id == 1 ) - { - n_script_int = 5; - } - else - { - if ( n_robot_id == 2 ) - { - n_script_int = 6; - } - } - a_s_radios = getstructarray( "maxis_audio_log", "targetname" ); - _a1094 = a_s_radios; - _k1094 = getFirstArrayKey( _a1094 ); - while ( isDefined( _k1094 ) ) - { - s_origin = _a1094[ _k1094 ]; - if ( s_origin.script_int == n_script_int ) - { - if ( isDefined( s_origin.unitrigger_stub ) ) - { - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( s_origin.unitrigger_stub, ::maxis_audio_log_think ); - } - } - _k1094 = getNextArrayKey( _a1094, _k1094 ); - } -} - -get_audiolog_vo() -{ - a_audiologs = []; - a_audiologs[ 1 ] = []; - a_audiologs[ 1 ][ 0 ] = "vox_maxi_audio_log_1_1_0"; - a_audiologs[ 1 ][ 1 ] = "vox_maxi_audio_log_1_2_0"; - a_audiologs[ 1 ][ 2 ] = "vox_maxi_audio_log_1_3_0"; - a_audiologs[ 2 ] = []; - a_audiologs[ 2 ][ 0 ] = "vox_maxi_audio_log_2_1_0"; - a_audiologs[ 2 ][ 1 ] = "vox_maxi_audio_log_2_2_0"; - a_audiologs[ 3 ] = []; - a_audiologs[ 3 ][ 0 ] = "vox_maxi_audio_log_3_1_0"; - a_audiologs[ 3 ][ 1 ] = "vox_maxi_audio_log_3_2_0"; - a_audiologs[ 3 ][ 2 ] = "vox_maxi_audio_log_3_3_0"; - a_audiologs[ 4 ] = []; - a_audiologs[ 4 ][ 0 ] = "vox_maxi_audio_log_4_1_0"; - a_audiologs[ 4 ][ 1 ] = "vox_maxi_audio_log_4_2_0"; - a_audiologs[ 4 ][ 2 ] = "vox_maxi_audio_log_4_3_0"; - a_audiologs[ 5 ] = []; - a_audiologs[ 5 ][ 0 ] = "vox_maxi_audio_log_5_1_0"; - a_audiologs[ 5 ][ 1 ] = "vox_maxi_audio_log_5_2_0"; - a_audiologs[ 5 ][ 2 ] = "vox_maxi_audio_log_5_3_0"; - a_audiologs[ 6 ] = []; - a_audiologs[ 6 ][ 0 ] = "vox_maxi_audio_log_6_1_0"; - a_audiologs[ 6 ][ 1 ] = "vox_maxi_audio_log_6_2_0"; - return a_audiologs; -} - -start_narrative_vo() -{ - flag_wait( "start_zombie_round_logic" ); - set_players_dontspeak( 1 ); - wait 10; - if ( is_game_solo() ) - { - game_start_solo_vo(); - } - else - { - game_start_vo(); - } - level waittill( "end_of_round" ); - level thread round_two_end_narrative_vo(); - if ( is_game_solo() ) - { - round_one_end_solo_vo(); - } - else - { - round_one_end_vo(); - } - flag_set( "round_one_narrative_vo_complete" ); -} - -start_samantha_intro_vo() -{ - while ( 1 ) - { - level waittill( "start_of_round" ); - if ( level.round_number == 5 ) - { - samantha_intro_1(); - continue; - } - else if ( level.round_number == 6 ) - { - samantha_intro_2(); - continue; - } - else - { - if ( level.round_number == 7 ) - { - samantha_intro_3(); - flag_set( "samantha_intro_done" ); - return; - } - } - else - { - } - } -} - -samantha_intro_1() -{ -/# - iprintln( "samantha_intro_1" ); -#/ - players = getplayers(); - if ( !isDefined( players[ 0 ] ) ) - { - return; - } - flag_waitopen( "story_vo_playing" ); - flag_set( "story_vo_playing" ); - set_players_dontspeak( 1 ); - samanthasay( "vox_sam_sam_help_5_0", players[ 0 ], 1, 1 ); - players = getplayers(); - _a1221 = players; - _k1221 = getFirstArrayKey( _a1221 ); - while ( isDefined( _k1221 ) ) - { - player = _a1221[ _k1221 ]; - if ( player.character_name != "Richtofen" ) - { - player play_category_on_player_character_if_present( "hear_samantha_1", player.character_name ); - wait 1; - play_line_on_player_character_if_present( "vox_plr_2_hear_samantha_1_0", "Richtofen" ); - break; - } - else - { - _k1221 = getNextArrayKey( _a1221, _k1221 ); - } - } - set_players_dontspeak( 0 ); - flag_clear( "story_vo_playing" ); -} - -samantha_intro_2() -{ -/# - iprintln( "samantha_intro_2" ); -#/ - player_richtofen = get_player_character_if_present( "Richtofen" ); - if ( !isDefined( player_richtofen ) ) - { - return; - } - flag_waitopen( "story_vo_playing" ); - flag_set( "story_vo_playing" ); - set_players_dontspeak( 1 ); - if ( isDefined( player_richtofen ) ) - { - nearest_friend = get_nearest_friend_within_speaking_distance( player_richtofen ); - if ( isDefined( nearest_friend ) ) - { - nearest_friend play_category_on_player_character_if_present( "heroes_confer", nearest_friend.character_name ); - wait 1; - play_line_on_player_character_if_present( "vox_plr_2_heroes_confer_0", "Richtofen" ); - } - } - set_players_dontspeak( 0 ); - flag_clear( "story_vo_playing" ); -} - -samantha_intro_3() -{ -/# - iprintln( "samantha_intro_3" ); -#/ - players = getplayers(); - if ( !isDefined( players[ 0 ] ) ) - { - return; - } - flag_waitopen( "story_vo_playing" ); - flag_set( "story_vo_playing" ); - set_players_dontspeak( 1 ); - samanthasay( "vox_sam_hear_samantha_3_0", players[ 0 ], 1, 1 ); - players = getplayers(); - player = players[ randomintrange( 0, players.size ) ]; - if ( isDefined( player ) ) - { - player play_category_on_player_character_if_present( "hear_samantha_3", player.character_name ); - } - set_players_dontspeak( 0 ); - flag_clear( "story_vo_playing" ); -} - -play_category_on_player_character_if_present( category, character_name ) -{ - vox_line_prefix = undefined; - switch( character_name ) - { - case "Dempsey": - vox_line_prefix = "vox_plr_0_"; - break; - case "Nikolai": - vox_line_prefix = "vox_plr_1_"; - break; - case "Richtofen": - vox_line_prefix = "vox_plr_2_"; - break; - case "Takeo": - vox_line_prefix = "vox_plr_3_"; - break; - } - vox_line = vox_line_prefix + category + "_0"; - play_line_on_player_character_if_present( vox_line, character_name ); -} - -get_nearest_friend_within_speaking_distance( other_player ) -{ - distance_nearest = 800; - nearest_friend = undefined; - players = getplayers(); - _a1326 = players; - _k1326 = getFirstArrayKey( _a1326 ); - while ( isDefined( _k1326 ) ) - { - player = _a1326[ _k1326 ]; - distance_between_players = distance( player.origin, other_player.origin ); - if ( player != other_player && distance_between_players < distance_nearest ) - { - nearest_friend = player; - distance_nearest = distance_between_players; - } - _k1326 = getNextArrayKey( _a1326, _k1326 ); - } - if ( isDefined( nearest_friend ) ) - { - return nearest_friend; - } - else - { - return undefined; - } -} - -play_line_on_player_character_if_present( vox_line, character_name ) -{ - player_character = get_player_character_if_present( character_name ); - if ( isDefined( player_character ) ) - { -/# - iprintln( "" + character_name + " says " + vox_line ); -#/ - player_character playsoundwithnotify( vox_line, "sound_done" + vox_line ); - player_character waittill( "sound_done" + vox_line ); - return 1; - } - else - { - return 0; - } -} - -get_player_character_if_present( character_name ) -{ - players = getplayers(); - _a1366 = players; - _k1366 = getFirstArrayKey( _a1366 ); - while ( isDefined( _k1366 ) ) - { - player = _a1366[ _k1366 ]; - if ( player.character_name == character_name ) - { - return player; - } - _k1366 = getNextArrayKey( _a1366, _k1366 ); - } - return undefined; -} - -round_two_end_narrative_vo() -{ - level waittill( "end_of_round" ); - flag_wait( "round_one_narrative_vo_complete" ); - if ( flag( "generator_find_vo_playing" ) ) - { - flag_waitopen( "generator_find_vo_playing" ); - wait 3; - } - if ( is_game_solo() ) - { - round_two_end_solo_vo(); - } -} - -game_start_solo_vo() -{ - if ( flag( "story_vo_playing" ) ) - { - return; - } - players = getplayers(); - e_speaker = players[ 0 ]; - if ( !isDefined( e_speaker ) ) - { - return; - } - a_convo = build_game_start_solo_convo(); - flag_set( "story_vo_playing" ); - set_players_dontspeak( 1 ); - lines = a_convo[ e_speaker.character_name ]; - if ( isarray( lines ) ) - { - i = 0; - while ( i < lines.size ) - { - e_speaker playsoundwithnotify( lines[ i ], "sound_done" + lines[ i ] ); - e_speaker waittill( "sound_done" + lines[ i ] ); - wait 1; - i++; - } - } - else e_speaker playsoundwithnotify( a_convo[ e_speaker.character_name ], "sound_done" + a_convo[ e_speaker.character_name ] ); - e_speaker waittill( "sound_done" + a_convo[ e_speaker.character_name ] ); - set_players_dontspeak( 0 ); - flag_clear( "story_vo_playing" ); -} - -build_game_start_solo_convo() -{ - a_game_start_solo_convo = []; - a_game_start_solo_convo[ "Dempsey" ] = "vox_plr_0_game_start_0"; - a_game_start_solo_convo[ "Nikolai" ] = "vox_plr_1_game_start_0"; - a_game_start_solo_convo[ "Richtofen" ] = []; - a_game_start_solo_convo[ "Richtofen" ][ 0 ] = "vox_plr_2_game_start_0"; - a_game_start_solo_convo[ "Richtofen" ][ 1 ] = "vox_plr_2_game_start_1"; - a_game_start_solo_convo[ "Takeo" ] = "vox_plr_3_game_start_0"; - return a_game_start_solo_convo; -} - -game_start_vo() -{ - players = getplayers(); - if ( players.size <= 1 ) - { - return; - } - if ( flag( "story_vo_playing" ) ) - { - return; - } - a_game_start_convo = build_game_start_convo(); - flag_set( "story_vo_playing" ); - e_dempsey = undefined; - e_nikolai = undefined; - e_richtofen = undefined; - e_takeo = undefined; - _a1477 = players; - _k1477 = getFirstArrayKey( _a1477 ); - while ( isDefined( _k1477 ) ) - { - player = _a1477[ _k1477 ]; - if ( isDefined( player ) ) - { - switch( player.character_name ) - { - case "Dempsey": - e_dempsey = player; - break; - break; - case "Nikolai": - e_nikolai = player; - break; - break; - case "Richtofen": - e_richtofen = player; - break; - break; - case "Takeo": - e_takeo = player; - break; - break; - } - } - _k1477 = getNextArrayKey( _a1477, _k1477 ); - } - set_players_dontspeak( 1 ); - i = 0; - while ( i < a_game_start_convo.size ) - { - players = getplayers(); - if ( players.size <= 1 ) - { - set_players_dontspeak( 0 ); - flag_clear( "story_vo_playing" ); - return; - } - if ( !isDefined( e_richtofen ) ) - { - i++; - continue; - } - else line_number = i + 1; - if ( line_number == 2 ) - { - a_richtofen_lines = a_game_start_convo[ "line_" + line_number ]; - j = 0; - while ( j < a_richtofen_lines.size ) - { - e_richtofen playsoundwithnotify( a_richtofen_lines[ j ], "sound_done" + a_richtofen_lines[ j ] ); - e_richtofen waittill( "sound_done" + a_richtofen_lines[ j ] ); - j++; - } - } - else arrayremovevalue( players, e_richtofen ); - players = get_array_of_closest( e_richtofen.origin, players ); - e_speaker = players[ 0 ]; - if ( !isDefined( e_speaker ) ) - { - i++; - continue; - } - else - { - e_speaker playsoundwithnotify( a_game_start_convo[ "line_" + line_number ][ e_speaker.character_name ], "sound_done" + a_game_start_convo[ "line_" + line_number ][ e_speaker.character_name ] ); - e_speaker waittill( "sound_done" + a_game_start_convo[ "line_" + line_number ][ e_speaker.character_name ] ); - } - i++; - } - set_players_dontspeak( 0 ); - flag_clear( "story_vo_playing" ); -} - -build_game_start_convo() -{ - a_game_start_convo = []; - a_game_start_convo[ "line_1" ] = []; - a_game_start_convo[ "line_1" ][ "Dempsey" ] = "vox_plr_0_game_start_meet_2_0"; - a_game_start_convo[ "line_1" ][ "Nikolai" ] = "vox_plr_1_game_start_meet_1_0"; - a_game_start_convo[ "line_1" ][ "Takeo" ] = "vox_plr_3_game_start_meet_3_0"; - a_game_start_convo[ "line_2" ] = []; - a_game_start_convo[ "line_2" ][ 0 ] = "vox_plr_2_game_start_meet_4_0"; - a_game_start_convo[ "line_2" ][ 1 ] = "vox_plr_2_generator_find_0"; - a_game_start_convo[ "line_3" ] = []; - a_game_start_convo[ "line_3" ][ "Dempsey" ] = "vox_plr_0_generator_find_0"; - a_game_start_convo[ "line_3" ][ "Nikolai" ] = "vox_plr_1_generator_find_0"; - a_game_start_convo[ "line_3" ][ "Takeo" ] = "vox_plr_3_generator_find_0"; - return a_game_start_convo; -} - -run_staff_crafted_vo( str_sam_line ) -{ - wait 1; - while ( isDefined( self.isspeaking ) && self.isspeaking ) - { - wait_network_frame(); - } - if ( level.n_staffs_crafted == 4 ) - { - all_staffs_crafted_vo(); - } - else - { - if ( isDefined( str_sam_line ) ) - { - flag_waitopen( "story_vo_playing" ); - flag_set( "story_vo_playing" ); - set_players_dontspeak( 1 ); - samanthasay( str_sam_line, self, 1 ); - set_players_dontspeak( 0 ); - flag_clear( "story_vo_playing" ); - } - } -} - -staff_craft_vo() -{ - staff_crafted = []; - lines = array( "vox_sam_1st_staff_crafted_0", "vox_sam_2nd_staff_crafted_0", "vox_sam_3rd_staff_crafted_0" ); - while ( staff_crafted.size < 4 ) - { - level waittill( "staff_crafted_vo", e_crafter, n_element ); - if ( isDefined( staff_crafted[ n_element ] ) && !staff_crafted[ n_element ] ) - { - staff_crafted[ n_element ] = 1; - line = lines[ level.n_staffs_crafted - 1 ]; - e_crafter thread run_staff_crafted_vo( line ); - } - } -} - -all_staffs_crafted_vo() -{ - while ( flag( "story_vo_playing" ) ) - { - wait_network_frame(); - } - a_convo = build_all_staffs_crafted_vo(); - flag_set( "story_vo_playing" ); - set_players_dontspeak( 1 ); - i = 0; - while ( i < a_convo.size ) - { - line_number = i + 1; - index = "line_" + line_number; - if ( isDefined( a_convo[ index ][ "Sam" ] ) ) - { - samanthasay( a_convo[ index ][ "Sam" ], self ); - i++; - continue; - } - else - { - line = a_convo[ index ][ self.character_name ]; - self playsoundwithnotify( line, "sound_done" + line ); - self waittill( "sound_done" + line ); - } - i++; - } - set_players_dontspeak( 0 ); - flag_clear( "story_vo_playing" ); -} - -build_all_staffs_crafted_vo() -{ - a_staff_convo = []; - a_staff_convo[ "line_1" ] = []; - a_staff_convo[ "line_1" ][ "Sam" ] = "vox_sam_4th_staff_crafted_0"; - a_staff_convo[ "line_2" ] = []; - a_staff_convo[ "line_2" ][ "Dempsey" ] = "vox_plr_0_4th_staff_crafted_0"; - a_staff_convo[ "line_2" ][ "Nikolai" ] = "vox_plr_1_4th_staff_crafted_0"; - a_staff_convo[ "line_2" ][ "Richtofen" ] = "vox_plr_2_4th_staff_crafted_0"; - a_staff_convo[ "line_2" ][ "Takeo" ] = "vox_plr_3_4th_staff_crafted_0"; - a_staff_convo[ "line_3" ] = []; - a_staff_convo[ "line_3" ][ "Sam" ] = "vox_sam_4th_staff_crafted_1"; - a_staff_convo[ "line_4" ] = []; - a_staff_convo[ "line_4" ][ "Dempsey" ] = "vox_plr_0_4th_staff_crafted_1"; - a_staff_convo[ "line_4" ][ "Nikolai" ] = "vox_plr_1_4th_staff_crafted_1"; - a_staff_convo[ "line_4" ][ "Richtofen" ] = "vox_plr_2_4th_staff_crafted_1"; - a_staff_convo[ "line_4" ][ "Takeo" ] = "vox_plr_3_4th_staff_crafted_1"; - a_staff_convo[ "line_5" ] = []; - a_staff_convo[ "line_5" ][ "Sam" ] = "vox_sam_generic_encourage_6"; - return a_staff_convo; -} - -get_left_behind_plea() -{ - pl_num = 0; - if ( self.character_name == "Nikolai" ) - { - pl_num = 1; - } - else if ( self.character_name == "Richtofen" ) - { - pl_num = 2; - } - else - { - if ( self.character_name == "Takeo" ) - { - pl_num = 3; - } - } - return "vox_plr_" + pl_num + "_miss_tank_" + randomint( 3 ); -} - -get_left_behind_response( e_victim ) -{ - if ( self.character_name == "Dempsey" ) - { - if ( cointoss() ) - { - return "vox_plr_0_tank_rspnd_generic_0"; - } - else - { - if ( e_victim.character_name == "Nikolai" ) - { - return "vox_plr_0_tank_rspnd_to_plr_1_0"; - } - else - { - if ( e_victim.character_name == "Richtofen" ) - { - return "vox_plr_0_tank_rspnd_to_plr_2_0"; - } - else - { - if ( e_victim.character_name == "Takeo" ) - { - return "vox_plr_0_tank_rspnd_to_plr_3_0"; - } - } - } - } - } - else - { - if ( self.character_name == "Nikolai" ) - { - if ( cointoss() ) - { - return "vox_plr_1_tank_rspnd_generic_0"; - } - else - { - if ( e_victim.character_name == "Dempsey" ) - { - return "vox_plr_1_tank_rspnd_to_plr_0_0"; - } - else - { - if ( e_victim.character_name == "Richtofen" ) - { - return "vox_plr_1_tank_rspnd_to_plr_2_0"; - } - else - { - if ( e_victim.character_name == "Takeo" ) - { - return "vox_plr_1_tank_rspnd_to_plr_3_0"; - } - } - } - } - } - else - { - if ( self.character_name == "Richtofen" ) - { - if ( cointoss() ) - { - return "vox_plr_2_tank_rspnd_generic_0"; - } - else - { - if ( e_victim.character_name == "Dempsey" ) - { - return "vox_plr_2_tank_rspnd_to_plr_0_0"; - } - else - { - if ( e_victim.character_name == "Nikolai" ) - { - return "vox_plr_2_tank_rspnd_to_plr_1_0"; - } - else - { - if ( e_victim.character_name == "Takeo" ) - { - return "vox_plr_2_tank_rspnd_to_plr_3_0"; - } - } - } - } - } - else - { - if ( self.character_name == "Takeo" ) - { - if ( cointoss() ) - { - return "vox_plr_3_tank_rspnd_generic_0"; - } - else - { - if ( e_victim.character_name == "Dempsey" ) - { - return "vox_plr_3_tank_rspnd_to_plr_0_0"; - } - else - { - if ( e_victim.character_name == "Nikolai" ) - { - return "vox_plr_3_tank_rspnd_to_plr_1_0"; - } - else - { - if ( e_victim.character_name == "Richtofen" ) - { - return "vox_plr_3_tank_rspnd_to_plr_2_0"; - } - } - } - } - } - } - } - } - return undefined; -} - -tank_left_behind_vo( e_victim, e_rider ) -{ - if ( !isDefined( e_victim ) || !isDefined( e_rider ) ) - { - return; - } - if ( flag( "story_vo_playing" ) ) - { - return; - } - flag_set( "story_vo_playing" ); - set_players_dontspeak( 1 ); - e_victim.isspeaking = 1; - e_rider.isspeaking = 1; - str_plea_line = e_victim get_left_behind_plea(); - e_victim playsoundwithnotify( str_plea_line, "sound_done" + str_plea_line ); - e_victim waittill( "sound_done" + str_plea_line ); - str_rider_line = e_rider get_left_behind_response( e_victim ); - e_victim playsoundwithnotify( str_rider_line, "sound_done" + str_rider_line ); - e_victim waittill( "sound_done" + str_rider_line ); - e_victim.isspeaking = 0; - e_rider.isspeaking = 0; - set_players_dontspeak( 0 ); - flag_clear( "story_vo_playing" ); -} - -round_one_end_solo_vo() -{ - if ( flag( "story_vo_playing" ) ) - { - return; - } - players = getplayers(); - e_speaker = players[ 0 ]; - if ( !isDefined( e_speaker ) ) - { - return; - } - a_convo = build_round_one_end_solo_convo(); - flag_set( "story_vo_playing" ); - set_players_dontspeak( 1 ); - lines = a_convo[ e_speaker.character_name ]; - if ( isarray( lines ) ) - { - i = 0; - while ( i < lines.size ) - { - e_speaker playsoundwithnotify( lines[ i ], "sound_done" + lines[ i ] ); - e_speaker waittill( "sound_done" + lines[ i ] ); - wait 1; - i++; - } - } - else e_speaker playsoundwithnotify( a_convo[ e_speaker.character_name ], "sound_done" + a_convo[ e_speaker.character_name ] ); - e_speaker waittill( "sound_done" + a_convo[ e_speaker.character_name ] ); - set_players_dontspeak( 0 ); - flag_clear( "story_vo_playing" ); -} - -build_round_one_end_solo_convo() -{ - a_round_one_end_solo_convo = []; - a_round_one_end_solo_convo[ "Dempsey" ] = []; - a_round_one_end_solo_convo[ "Dempsey" ][ 0 ] = "vox_plr_0_end_round_1_5_0"; - a_round_one_end_solo_convo[ "Dempsey" ][ 1 ] = "vox_plr_0_end_round_1_6_1"; - a_round_one_end_solo_convo[ "Nikolai" ] = "vox_plr_1_end_round_1_9_0"; - a_round_one_end_solo_convo[ "Richtofen" ] = "vox_plr_2_end_round_1_7_0"; - a_round_one_end_solo_convo[ "Takeo" ] = "vox_plr_3_end_round_1_8_0"; - return a_round_one_end_solo_convo; -} - -round_one_end_vo() -{ - players = getplayers(); - if ( players.size <= 1 ) - { - return; - } - if ( flag( "story_vo_playing" ) ) - { - return; - } - a_convo = build_round_one_end_convo(); - flag_set( "story_vo_playing" ); - e_dempsey = undefined; - e_nikolai = undefined; - e_richtofen = undefined; - e_takeo = undefined; - _a1894 = players; - _k1894 = getFirstArrayKey( _a1894 ); - while ( isDefined( _k1894 ) ) - { - player = _a1894[ _k1894 ]; - if ( isDefined( player ) ) - { - switch( player.character_name ) - { - case "Dempsey": - e_dempsey = player; - break; - break; - case "Nikolai": - e_nikolai = player; - break; - break; - case "Richtofen": - e_richtofen = player; - break; - break; - case "Takeo": - e_takeo = player; - break; - break; - } - } - _k1894 = getNextArrayKey( _a1894, _k1894 ); - } - set_players_dontspeak( 1 ); - i = 0; - while ( i < a_convo.size ) - { - players = getplayers(); - if ( players.size <= 1 ) - { - set_players_dontspeak( 0 ); - flag_clear( "story_vo_playing" ); - return; - } - if ( !isDefined( e_richtofen ) ) - { - i++; - continue; - } - else line_number = i + 1; - if ( line_number == 2 ) - { - a_richtofen_lines = a_convo[ "line_" + line_number ]; - j = 0; - while ( j < a_richtofen_lines.size ) - { - e_richtofen playsoundwithnotify( a_richtofen_lines[ j ], "sound_done" + a_richtofen_lines[ j ] ); - e_richtofen waittill( "sound_done" + a_richtofen_lines[ j ] ); - j++; - } - } - else arrayremovevalue( players, e_richtofen ); - players = get_array_of_closest( e_richtofen.origin, players ); - e_speaker = players[ 0 ]; - if ( !isDefined( e_speaker ) ) - { - i++; - continue; - } - else - { - e_speaker playsoundwithnotify( a_convo[ "line_" + line_number ][ e_speaker.character_name ], "sound_done" + a_convo[ "line_" + line_number ][ e_speaker.character_name ] ); - e_speaker waittill( "sound_done" + a_convo[ "line_" + line_number ][ e_speaker.character_name ] ); - } - i++; - } - set_players_dontspeak( 0 ); - flag_clear( "story_vo_playing" ); -} - -build_round_one_end_convo() -{ - a_round_one_end_convo = []; - a_round_one_end_convo[ "line_1" ] = []; - a_round_one_end_convo[ "line_1" ][ "Dempsey" ] = "vox_plr_0_end_round_1_1_0"; - a_round_one_end_convo[ "line_1" ][ "Nikolai" ] = "vox_plr_1_end_round_1_3_0"; - a_round_one_end_convo[ "line_1" ][ "Takeo" ] = "vox_plr_3_end_round_1_2_0"; - a_round_one_end_convo[ "line_2" ] = []; - a_round_one_end_convo[ "line_2" ][ 0 ] = "vox_plr_2_story_exposition_4_0"; - a_round_one_end_convo[ "line_3" ] = []; - a_round_one_end_convo[ "line_3" ][ "Dempsey" ] = "vox_plr_0_during_round_1_0"; - a_round_one_end_convo[ "line_3" ][ "Nikolai" ] = "vox_plr_1_during_round_2_0"; - a_round_one_end_convo[ "line_3" ][ "Takeo" ] = "vox_plr_3_during_round_2_0"; - return a_round_one_end_convo; -} - -round_two_end_solo_vo() -{ - if ( flag( "story_vo_playing" ) ) - { - return; - } - players = getplayers(); - e_speaker = players[ 0 ]; - if ( !isDefined( e_speaker ) ) - { - return; - } - a_convo = build_round_two_end_solo_convo(); - flag_set( "story_vo_playing" ); - set_players_dontspeak( 1 ); - lines = a_convo[ e_speaker.character_name ]; - if ( isarray( lines ) ) - { - i = 0; - while ( i < lines.size ) - { - e_speaker playsoundwithnotify( lines[ i ], "sound_done" + lines[ i ] ); - e_speaker waittill( "sound_done" + lines[ i ] ); - wait 1; - i++; - } - } - else e_speaker playsoundwithnotify( a_convo[ e_speaker.character_name ], "sound_done" + a_convo[ e_speaker.character_name ] ); - e_speaker waittill( "sound_done" + a_convo[ e_speaker.character_name ] ); - set_players_dontspeak( 0 ); - flag_clear( "story_vo_playing" ); -} - -build_round_two_end_solo_convo() -{ - a_round_two_end_solo_convo = []; - a_round_two_end_solo_convo[ "Dempsey" ] = "vox_plr_0_end_round_2_1_0"; - a_round_two_end_solo_convo[ "Nikolai" ] = "vox_plr_1_end_round_2_5_0"; - a_round_two_end_solo_convo[ "Richtofen" ] = []; - a_round_two_end_solo_convo[ "Richtofen" ][ 0 ] = "vox_plr_2_end_round_2_2_0"; - a_round_two_end_solo_convo[ "Richtofen" ][ 1 ] = "vox_plr_2_end_round_2_3_1"; - a_round_two_end_solo_convo[ "Takeo" ] = "vox_plr_3_end_round_2_4_0"; - return a_round_two_end_solo_convo; -} - -first_magic_box_seen_vo() -{ - flag_wait( "start_zombie_round_logic" ); - magicbox = level.chests[ level.chest_index ]; - a_players = getplayers(); - _a2048 = a_players; - _k2048 = getFirstArrayKey( _a2048 ); - while ( isDefined( _k2048 ) ) - { - player = _a2048[ _k2048 ]; - player thread wait_and_play_first_magic_box_seen_vo( magicbox.unitrigger_stub ); - _k2048 = getNextArrayKey( _a2048, _k2048 ); - } -} - -wait_and_play_first_magic_box_seen_vo( struct ) -{ - self endon( "disconnect" ); - level endon( "first_maigc_box_discovered" ); - while ( 1 ) - { - if ( distancesquared( self.origin, struct.origin ) < 40000 ) - { - if ( self is_player_looking_at( struct.origin, 0,75 ) ) - { - if ( isDefined( self.dontspeak ) && !self.dontspeak ) - { - while ( flag( "story_vo_playing" ) ) - { - wait 0,1; - } - players = getplayers(); - a_speakers = []; - _a2077 = players; - _k2077 = getFirstArrayKey( _a2077 ); - while ( isDefined( _k2077 ) ) - { - player = _a2077[ _k2077 ]; - if ( isDefined( player ) && distance2dsquared( player.origin, self.origin ) <= 1000000 ) - { - switch( player.character_name ) - { - case "Dempsey": - e_dempsey = player; - a_speakers[ a_speakers.size ] = e_dempsey; - break; - break; - case "Nikolai": - e_nikolai = player; - a_speakers[ a_speakers.size ] = e_nikolai; - break; - break; - case "Richtofen": - e_richtofen = player; - a_speakers[ a_speakers.size ] = e_richtofen; - break; - break; - case "Takeo": - e_takeo = player; - a_speakers[ a_speakers.size ] = e_takeo; - break; - break; - } - } - _k2077 = getNextArrayKey( _a2077, _k2077 ); - } - while ( !isDefined( e_richtofen ) ) - { - wait 0,1; - } - while ( a_speakers.size < 2 ) - { - wait 0,1; - } - flag_set( "story_vo_playing" ); - set_players_dontspeak( 1 ); - a_convo = build_first_magic_box_seen_vo(); - if ( isDefined( e_richtofen ) ) - { - e_richtofen playsoundwithnotify( a_convo[ 0 ][ e_richtofen.character_name ], "sound_done" + a_convo[ 0 ][ e_richtofen.character_name ] ); - e_richtofen waittill( "sound_done" + a_convo[ 0 ][ e_richtofen.character_name ] ); - } - if ( isDefined( struct.trigger_target ) && isDefined( struct.trigger_target.is_locked ) ) - { - arrayremovevalue( a_speakers, e_richtofen ); - a_speakers = get_array_of_closest( e_richtofen.origin, a_speakers ); - e_speaker = a_speakers[ 0 ]; - if ( distancesquared( e_speaker.origin, e_richtofen.origin ) < 2250000 ) - { - if ( isDefined( e_speaker ) ) - { - e_speaker playsoundwithnotify( a_convo[ 1 ][ e_speaker.character_name ], "sound_done" + a_convo[ 1 ][ e_speaker.character_name ] ); - e_speaker waittill( "sound_done" + a_convo[ 1 ][ e_speaker.character_name ] ); - } - } - } - if ( isDefined( struct.trigger_target ) && isDefined( struct.trigger_target.is_locked ) ) - { - if ( struct.trigger_target.is_locked == 1 ) - { - if ( isDefined( e_richtofen ) ) - { - e_richtofen playsoundwithnotify( a_convo[ 2 ][ e_richtofen.character_name ], "sound_done" + a_convo[ 2 ][ e_richtofen.character_name ] ); - e_richtofen waittill( "sound_done" + a_convo[ 2 ][ e_richtofen.character_name ] ); - } - } - } - set_players_dontspeak( 0 ); - flag_clear( "story_vo_playing" ); - level notify( "first_maigc_box_discovered" ); - return; - } - } - } - else - { - wait 0,1; - } - } -} - -build_first_magic_box_seen_vo() -{ - a_first_magic_box_seen_convo = []; - a_first_magic_box_seen_convo[ 0 ] = []; - a_first_magic_box_seen_convo[ 0 ][ "Richtofen" ] = "vox_plr_2_respond_maxis_1_0"; - a_first_magic_box_seen_convo[ 1 ] = []; - a_first_magic_box_seen_convo[ 1 ][ "Dempsey" ] = "vox_plr_0_respond_maxis_2_0"; - a_first_magic_box_seen_convo[ 1 ][ "Takeo" ] = "vox_plr_3_respond_maxis_3_0"; - a_first_magic_box_seen_convo[ 1 ][ "Nikolai" ] = "vox_plr_1_respond_maxis_4_0"; - a_first_magic_box_seen_convo[ 2 ] = []; - a_first_magic_box_seen_convo[ 2 ][ "Richtofen" ] = "vox_plr_2_respond_maxis_5_0"; - return a_first_magic_box_seen_convo; -} - -tomb_drone_built_vo( s_craftable ) -{ - if ( s_craftable.weaponname != "equip_dieseldrone_zm" ) - { - return; - } - flag_waitopen( "story_vo_playing" ); - flag_set( "story_vo_playing" ); - set_players_dontspeak( 1 ); - wait 1; - e_vo_origin = get_speaking_location_maxis_drone( self, s_craftable ); - vox_line = "vox_maxi_maxis_drone_1_0"; - e_vo_origin playsoundwithnotify( vox_line, "sound_done" + vox_line ); -/# - iprintln( "Maxis says " + vox_line ); -#/ - e_vo_origin waittill( "sound_done" + vox_line ); - e_vo_origin delete(); - wait 1; - e_vo_origin = get_speaking_location_maxis_drone( self, s_craftable ); - vox_line = "vox_maxi_maxis_drone_4_0"; - e_vo_origin playsoundwithnotify( vox_line, "sound_done" + vox_line ); -/# - iprintln( "Maxis says " + vox_line ); -#/ - e_vo_origin waittill( "sound_done" + vox_line ); - e_vo_origin delete(); - wait 1; - if ( isDefined( self ) && self.character_name == "Richtofen" ) - { - vox_line = "vox_plr_2_maxis_drone_5_0"; -/# - iprintln( "" + self.character_name + " says " + vox_line ); -#/ - self playsoundwithnotify( vox_line, "sound_done" + vox_line ); - self waittill( "sound_done" + vox_line ); - } - set_players_dontspeak( 0 ); - flag_clear( "story_vo_playing" ); - flag_set( "maxis_crafted_intro_done" ); -} - -get_speaking_location_maxis_drone( player, s_craftable ) -{ - e_vo_origin = undefined; - if ( isDefined( level.maxis_quadrotor ) ) - { - e_vo_origin = spawn( "script_origin", level.maxis_quadrotor.origin ); - e_vo_origin linkto( level.maxis_quadrotor ); - } - else player = b_player_has_dieseldrone_weapon(); - if ( isDefined( player ) ) - { - e_vo_origin = spawn( "script_origin", player.origin ); - e_vo_origin linkto( player ); - } - else - { - e_vo_origin = spawn( "script_origin", s_craftable.origin ); - } - return e_vo_origin; -} - -b_player_has_dieseldrone_weapon() -{ - a_players = getplayers(); - _a2268 = a_players; - _k2268 = getFirstArrayKey( _a2268 ); - while ( isDefined( _k2268 ) ) - { - player = _a2268[ _k2268 ]; - if ( player hasweapon( "equip_dieseldrone_zm" ) ) - { - return player; - } - _k2268 = getNextArrayKey( _a2268, _k2268 ); - } - return undefined; -} - -set_players_dontspeak( bool ) -{ - players = getplayers(); - if ( bool ) - { - _a2289 = players; - _k2289 = getFirstArrayKey( _a2289 ); - while ( isDefined( _k2289 ) ) - { - player = _a2289[ _k2289 ]; - if ( isDefined( player ) ) - { - player.dontspeak = 1; - player setclientfieldtoplayer( "isspeaking", 1 ); - } - _k2289 = getNextArrayKey( _a2289, _k2289 ); - } - _a2298 = players; - _k2298 = getFirstArrayKey( _a2298 ); - while ( isDefined( _k2298 ) ) - { - player = _a2298[ _k2298 ]; - while ( isDefined( player ) && isDefined( player.isspeaking ) && player.isspeaking ) - { - wait 0,1; - } - _k2298 = getNextArrayKey( _a2298, _k2298 ); - } - } - else _a2308 = players; - _k2308 = getFirstArrayKey( _a2308 ); - while ( isDefined( _k2308 ) ) - { - player = _a2308[ _k2308 ]; - if ( isDefined( player ) ) - { - player.dontspeak = 0; - player setclientfieldtoplayer( "isspeaking", 0 ); - } - _k2308 = getNextArrayKey( _a2308, _k2308 ); - } -} - -set_player_dontspeak( bool ) -{ - if ( bool ) - { - self.dontspeak = 1; - self setclientfieldtoplayer( "isspeaking", 1 ); - while ( isDefined( self ) && isDefined( self.isspeaking ) && self.isspeaking ) - { - wait 0,1; - } - } - else self.dontspeak = 0; - self setclientfieldtoplayer( "isspeaking", 0 ); -} - -is_game_solo() -{ - players = getplayers(); - if ( players.size == 1 ) - { - return 1; - } - else - { - return 0; - } -} - -add_puzzle_completion_line( n_element_enum, str_line ) -{ - if ( !isDefined( level.puzzle_completion_lines ) ) - { - level.puzzle_completion_lines = []; - level.puzzle_completion_lines_count = []; - } - if ( !isDefined( level.puzzle_completion_lines[ n_element_enum ] ) ) - { - level.puzzle_completion_lines[ n_element_enum ] = []; - level.puzzle_completion_lines_count[ n_element_enum ] = 0; - } - level.puzzle_completion_lines[ n_element_enum ][ level.puzzle_completion_lines[ n_element_enum ].size ] = str_line; -} - -say_puzzle_completion_line( n_element_enum ) -{ - level notify( "quest_progressed" ); - wait 4; - if ( level.puzzle_completion_lines_count[ n_element_enum ] >= level.puzzle_completion_lines[ n_element_enum ].size ) - { -/# - iprintlnbold( "Out of puzzle completion lines for element " + n_element_enum ); -#/ - return; - } - str_line = level.puzzle_completion_lines[ n_element_enum ][ level.puzzle_completion_lines_count[ n_element_enum ] ]; - level.puzzle_completion_lines_count[ n_element_enum ]++; - set_players_dontspeak( 1 ); - level samanthasay( str_line, self ); - set_players_dontspeak( 0 ); -} - -watch_occasional_line( str_category, str_line, str_notify, n_time_between, n_times_to_play ) -{ - if ( !isDefined( n_time_between ) ) - { - n_time_between = 30; - } - if ( !isDefined( n_times_to_play ) ) - { - n_times_to_play = 100; - } - i = 0; - while ( i < n_times_to_play ) - { - level waittill( str_notify, e_player ); - if ( isDefined( e_player ) ) - { - e_player maps/mp/zombies/_zm_audio::create_and_play_dialog( str_category, str_line ); - wait n_time_between; - } - i++; - } -} - -watch_one_shot_line( str_category, str_line, str_notify ) -{ - while ( 1 ) - { - level waittill( str_notify, e_player ); - if ( isDefined( e_player ) ) - { - e_player maps/mp/zombies/_zm_audio::create_and_play_dialog( str_category, str_line ); - return; - } - } -} - -watch_one_shot_samantha_line( str_line, str_notify ) -{ - while ( 1 ) - { - level waittill( str_notify, e_play_on ); - if ( isDefined( e_play_on ) ) - { - set_players_dontspeak( 1 ); - if ( samanthasay( str_line, e_play_on ) ) - { - set_players_dontspeak( 0 ); - return; - } - set_players_dontspeak( 0 ); - } - } -} - -watch_one_shot_samantha_clue( str_line, str_notify, str_endon ) -{ - if ( isDefined( str_endon ) ) - { - level endon( str_endon ); - } - if ( !isDefined( level.next_samantha_clue_time ) ) - { - level.next_samantha_clue_time = getTime(); - } - while ( 1 ) - { - level waittill( str_notify, e_player ); - wait 10; - if ( isDefined( e_player ) && isDefined( e_player.vo_promises_playing ) && e_player.vo_promises_playing ) - { - continue; - } - while ( isDefined( level.sam_talking ) && level.sam_talking ) - { - wait_network_frame(); - } - while ( level.next_samantha_clue_time > getTime() ) - { - continue; - } - while ( !isplayer( e_player ) ) - { - a_players = getplayers(); - _a2486 = a_players; - _k2486 = getFirstArrayKey( _a2486 ); - while ( isDefined( _k2486 ) ) - { - player = _a2486[ _k2486 ]; - if ( player.zombie_vars[ "zombie_powerup_zombie_blood_on" ] ) - { - e_player = player; - break; - } - else - { - _k2486 = getNextArrayKey( _a2486, _k2486 ); - } - } - } - if ( isDefined( e_player ) && isplayer( e_player ) && e_player.zombie_vars[ "zombie_powerup_zombie_blood_on" ] && flag( "samantha_intro_done" ) ) - { - flag_waitopen( "story_vo_playing" ); - flag_set( "story_vo_playing" ); - while ( isDefined( e_player.isspeaking ) && e_player.isspeaking ) - { - wait_network_frame(); - } - while ( !is_player_valid( e_player ) ) - { - continue; - } - set_players_dontspeak( 1 ); - level.sam_talking = 1; - e_player playsoundtoplayer( str_line, e_player ); - n_duration = soundgetplaybacktime( str_line ); - wait ( n_duration / 1000 ); - level.sam_talking = 0; - level.next_samantha_clue_time = getTime() + 300000; - flag_clear( "story_vo_playing" ); - set_players_dontspeak( 0 ); - return; - } - } -} - -samantha_discourage_reset() -{ - n_min_time = 60000 * 5; - n_max_time = 60000 * 10; - level.sam_next_beratement = getTime() + randomintrange( n_min_time, n_max_time ); -} - -samantha_encourage_watch_good_lines() -{ - while ( 1 ) - { - level waittill( "vo_puzzle_good", e_player ); - wait 1; - level notify( "quest_progressed" ); - } -} - -samantha_encourage_think() -{ - original_list = array( "vox_sam_generic_encourage_0", "vox_sam_generic_encourage_1", "vox_sam_generic_encourage_2", "vox_sam_generic_encourage_3", "vox_sam_generic_encourage_4", "vox_sam_generic_encourage_5" ); - available_list = []; - n_min_time = 60000 * 5; - n_max_time = 60000 * 10; - next_encouragement = 0; - level thread samantha_encourage_watch_good_lines(); - while ( 1 ) - { - if ( available_list.size == 0 ) - { - available_list = arraycopy( original_list ); - } - e_player = undefined; - say_something = 0; - level waittill( "quest_progressed", e_player, say_something ); - samantha_discourage_reset(); - while ( getTime() < next_encouragement ) - { - continue; - } - if ( isDefined( say_something ) && !say_something ) - { - continue; - } - while ( !isDefined( e_player ) ) - { - continue; - } - while ( !is_player_valid( e_player ) ) - { - continue; - } - if ( isDefined( level.sam_talking ) && level.sam_talking ) - { - continue; - } - while ( flag( "story_vo_playing" ) || isDefined( e_player.isspeaking ) && e_player.isspeaking ) - { - wait_network_frame(); - } - line = random( available_list ); - arrayremovevalue( available_list, line ); - set_players_dontspeak( 1 ); - if ( samanthasay( line, e_player, 1 ) ) - { - set_players_dontspeak( 0 ); - e_player maps/mp/zombies/_zm_audio::create_and_play_dialog( "puzzle", "encourage_respond" ); - next_encouragement = getTime() + randomintrange( n_min_time, n_max_time ); - } - set_players_dontspeak( 0 ); - } -} - -samantha_discourage_think() -{ - level endon( "ee_all_staffs_upgraded" ); - original_list = array( "vox_sam_generic_chastise_0", "vox_sam_generic_chastise_1", "vox_sam_generic_chastise_2", "vox_sam_generic_chastise_3", "vox_sam_generic_chastise_4", "vox_sam_generic_chastise_5", "vox_sam_generic_chastise_6" ); - available_list = []; - flag_wait( "samantha_intro_done" ); - while ( 1 ) - { - if ( available_list.size == 0 ) - { - available_list = arraycopy( original_list ); - } - samantha_discourage_reset(); - while ( getTime() < level.sam_next_beratement ) - { - wait 1; - } - line = random( available_list ); - arrayremovevalue( available_list, line ); - a_players = getplayers(); - while ( a_players.size > 0 ) - { - e_player = random( a_players ); - arrayremovevalue( a_players, e_player ); - if ( is_player_valid( e_player ) ) - { - samanthasay( line, e_player, 1 ); - e_player maps/mp/zombies/_zm_audio::create_and_play_dialog( "puzzle", "berate_respond" ); - break; - } - else - { - } - } - } -} - -samanthasay( vox_line, e_source, b_wait_for_nearby_speakers, intro_line ) -{ - if ( !isDefined( b_wait_for_nearby_speakers ) ) - { - b_wait_for_nearby_speakers = 0; - } - if ( !isDefined( intro_line ) ) - { - intro_line = 0; - } - level endon( "end_game" ); - if ( !intro_line && !flag( "samantha_intro_done" ) ) - { - return 0; - } - else - { - if ( intro_line && flag( "samantha_intro_done" ) ) - { - return 0; - } - } - while ( isDefined( level.sam_talking ) && level.sam_talking ) - { - wait_network_frame(); - } - level.sam_talking = 1; - while ( b_wait_for_nearby_speakers ) - { - nearbyplayers = get_array_of_closest( e_source.origin, get_players(), undefined, undefined, 256 ); - while ( isDefined( nearbyplayers ) && nearbyplayers.size > 0 ) - { - _a2717 = nearbyplayers; - _k2717 = getFirstArrayKey( _a2717 ); - while ( isDefined( _k2717 ) ) - { - player = _a2717[ _k2717 ]; - while ( isDefined( player ) && isDefined( player.isspeaking ) && player.isspeaking ) - { - wait 0,05; - } - _k2717 = getNextArrayKey( _a2717, _k2717 ); - } - } - } - level thread samanthasayvoplay( e_source, vox_line ); - level waittill( "SamanthaSay_vo_finished" ); - return 1; -} - -samanthasayvoplay( e_source, vox_line ) -{ - e_source playsoundwithnotify( vox_line, "sound_done" + vox_line ); - e_source waittill( "sound_done" + vox_line ); - level.sam_talking = 0; - level notify( "SamanthaSay_vo_finished" ); -} - -maxissay( vox_line, m_spot_override, b_wait_for_nearby_speakers ) -{ - level endon( "end_game" ); - level endon( "intermission" ); - if ( isDefined( level.intermission ) && level.intermission ) - { - return; - } - if ( !flag( "maxis_crafted_intro_done" ) ) - { - return; - } - while ( isDefined( level.maxis_talking ) && level.maxis_talking ) - { - wait 0,05; - } - level.maxis_talking = 1; -/# - iprintlnbold( "Maxis Says: " + vox_line ); -#/ - if ( isDefined( m_spot_override ) ) - { - m_vo_spot = m_spot_override; - } - while ( isDefined( b_wait_for_nearby_speakers ) && b_wait_for_nearby_speakers ) - { - nearbyplayers = get_array_of_closest( m_vo_spot.origin, get_players(), undefined, undefined, 256 ); - while ( isDefined( nearbyplayers ) && nearbyplayers.size > 0 ) - { - _a2793 = nearbyplayers; - _k2793 = getFirstArrayKey( _a2793 ); - while ( isDefined( _k2793 ) ) - { - player = _a2793[ _k2793 ]; - while ( isDefined( player ) && isDefined( player.isspeaking ) && player.isspeaking ) - { - wait 0,05; - } - _k2793 = getNextArrayKey( _a2793, _k2793 ); - } - } - } - level thread maxissayvoplay( m_vo_spot, vox_line ); - level waittill( "MaxisSay_vo_finished" ); -} - -maxissayvoplay( m_vo_spot, vox_line ) -{ - m_vo_spot playsoundwithnotify( vox_line, "sound_done" + vox_line ); - m_vo_spot waittill_either( "sound_done" + vox_line, "death" ); - level.maxis_talking = 0; - level notify( "MaxisSay_vo_finished" ); -} - -richtofenrespondvoplay( vox_category, b_richtofen_first, str_flag ) -{ - if ( !isDefined( b_richtofen_first ) ) - { - b_richtofen_first = 0; - } - if ( flag( "story_vo_playing" ) ) - { - return; - } - flag_set( "story_vo_playing" ); - set_players_dontspeak( 1 ); - if ( b_richtofen_first ) - { - if ( self.character_name == "Richtofen" ) - { - str_vox_line = "vox_plr_" + self.characterindex + "_" + vox_category + "_0"; - self playsoundwithnotify( str_vox_line, "rich_done" ); - self waittill( "rich_done" ); - wait 0,5; - _a2846 = getplayers(); - _k2846 = getFirstArrayKey( _a2846 ); - while ( isDefined( _k2846 ) ) - { - player = _a2846[ _k2846 ]; - if ( player.character_name != "Richtofen" && distance2d( player.origin, self.origin ) < 800 ) - { - str_vox_line = "vox_plr_" + player.characterindex + "_" + vox_category + "_0"; - player playsoundwithnotify( str_vox_line, "rich_done" ); - player waittill( "rich_done" ); - } - _k2846 = getNextArrayKey( _a2846, _k2846 ); - } - } - else _a2859 = getplayers(); - _k2859 = getFirstArrayKey( _a2859 ); - while ( isDefined( _k2859 ) ) - { - player = _a2859[ _k2859 ]; - if ( player.character_name == "Richtofen" && distance2d( player.origin, self.origin ) < 800 ) - { - str_vox_line = "vox_plr_" + player.characterindex + "_" + vox_category + "_0"; - player playsoundwithnotify( str_vox_line, "rich_done" ); - player waittill( "rich_done" ); - wait 0,5; - } - _k2859 = getNextArrayKey( _a2859, _k2859 ); - } - if ( isDefined( self ) ) - { - str_vox_line = "vox_plr_" + self.characterindex + "_" + vox_category + "_0"; - self playsoundwithnotify( str_vox_line, "rich_response" ); - self waittill( "rich_response" ); - } - } - else if ( self.character_name == "Richtofen" ) - { - _a2886 = getplayers(); - _k2886 = getFirstArrayKey( _a2886 ); - while ( isDefined( _k2886 ) ) - { - player = _a2886[ _k2886 ]; - if ( player.character_name != "Richtofen" && distance2d( player.origin, self.origin ) < 800 ) - { - str_vox_line = "vox_plr_" + player.characterindex + "_" + vox_category + "_0"; - player playsoundwithnotify( str_vox_line, "rich_done" ); - player waittill( "rich_done" ); - wait 0,5; - } - _k2886 = getNextArrayKey( _a2886, _k2886 ); - } - if ( isDefined( self ) ) - { - str_vox_line = "vox_plr_" + self.characterindex + "_" + vox_category + "_0"; - self playsoundwithnotify( str_vox_line, "rich_done" ); - self waittill( "rich_done" ); - } - } - else - { - str_vox_line = "vox_plr_" + self.characterindex + "_" + vox_category + "_0"; - self playsoundwithnotify( str_vox_line, "rich_response" ); - self waittill( "rich_response" ); - wait 0,5; - _a2916 = getplayers(); - _k2916 = getFirstArrayKey( _a2916 ); - while ( isDefined( _k2916 ) ) - { - player = _a2916[ _k2916 ]; - if ( player.character_name == "Richtofen" && distance2d( player.origin, self.origin ) < 800 ) - { - str_vox_line = "vox_plr_" + player.characterindex + "_" + vox_category + "_0"; - player playsoundwithnotify( str_vox_line, "rich_done" ); - player waittill( "rich_done" ); - } - _k2916 = getNextArrayKey( _a2916, _k2916 ); - } - } - if ( isDefined( str_flag ) ) - { - flag_set( str_flag ); - } - set_players_dontspeak( 0 ); - flag_clear( "story_vo_playing" ); -} - -wunderfizz_used_vo() -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( isDefined( self.has_used_perk_random ) && self.has_used_perk_random ) - { - return; - } - if ( isDefined( self.character_name ) && self.character_name != "Richtofen" ) - { - return; - } - if ( flag( "story_vo_playing" ) ) - { - return; - } - if ( isDefined( self.dontspeak ) && self.dontspeak ) - { - return; - } - set_players_dontspeak( 1 ); - self.has_used_perk_random = 1; - i = 1; - while ( i < 4 ) - { - vox_line = "vox_plr_2_discover_wonder_" + i + "_0"; - self playsoundwithnotify( vox_line, "sound_done" + vox_line ); - self waittill( "sound_done" + vox_line ); - wait 0,1; - i++; - } - set_players_dontspeak( 0 ); -} - -init_sam_promises() -{ - level.vo_promises[ "Richtofen_1" ][ 0 ] = "vox_sam_hear_samantha_2_plr_2_0"; - level.vo_promises[ "Richtofen_1" ][ 1 ] = "vox_plr_2_hear_samantha_2_0"; - level.vo_promises[ "Richtofen_2" ][ 0 ] = "vox_sam_sam_richtofen_1_0"; - level.vo_promises[ "Richtofen_2" ][ 1 ] = "vox_sam_sam_richtofen_2_0"; - level.vo_promises[ "Richtofen_2" ][ 2 ] = "vox_plr_2_sam_richtofen_3_0"; - level.vo_promises[ "Richtofen_3" ][ 0 ] = "vox_sam_sam_richtofen_4_0"; - level.vo_promises[ "Richtofen_3" ][ 1 ] = "vox_plr_2_sam_richtofen_5_0"; - level.vo_promises[ "Richtofen_3" ][ 2 ] = "vox_plr_2_sam_richtofen_6_0"; - level.vo_promises[ "Dempsey_1" ][ 0 ] = "vox_sam_hear_samantha_2_plr_0_0"; - level.vo_promises[ "Dempsey_1" ][ 1 ] = "vox_plr_0_hear_samantha_2_0"; - level.vo_promises[ "Dempsey_2" ][ 0 ] = "vox_sam_sam_dempsey_1_0"; - level.vo_promises[ "Dempsey_2" ][ 1 ] = "vox_sam_sam_dempsey_1_1"; - level.vo_promises[ "Dempsey_2" ][ 2 ] = "vox_plr_0_sam_dempsey_1_0"; - level.vo_promises[ "Dempsey_3" ][ 0 ] = "vox_sam_sam_dempsey_2_0"; - level.vo_promises[ "Dempsey_3" ][ 1 ] = "vox_sam_sam_dempsey_2_1"; - level.vo_promises[ "Dempsey_3" ][ 2 ] = "vox_plr_0_sam_dempsey_2_0"; - level.vo_promises[ "Nikolai_1" ][ 0 ] = "vox_sam_hear_samantha_2_plr_1_0"; - level.vo_promises[ "Nikolai_1" ][ 1 ] = "vox_plr_1_hear_samantha_2_0"; - level.vo_promises[ "Nikolai_2" ][ 0 ] = "vox_sam_sam_nikolai_1_0"; - level.vo_promises[ "Nikolai_2" ][ 1 ] = "vox_sam_sam_nikolai_1_1"; - level.vo_promises[ "Nikolai_2" ][ 2 ] = "vox_plr_1_sam_nikolai_1_0"; - level.vo_promises[ "Nikolai_3" ][ 0 ] = "vox_sam_sam_nikolai_2_0"; - level.vo_promises[ "Nikolai_3" ][ 1 ] = "vox_sam_sam_nikolai_2_1"; - level.vo_promises[ "Nikolai_3" ][ 2 ] = "vox_plr_1_sam_nikolai_2_0"; - level.vo_promises[ "Takeo_1" ][ 0 ] = "vox_sam_hear_samantha_2_plr_3_0"; - level.vo_promises[ "Takeo_1" ][ 1 ] = "vox_plr_3_hear_samantha_2_0"; - level.vo_promises[ "Takeo_2" ][ 0 ] = "vox_sam_sam_takeo_1_0"; - level.vo_promises[ "Takeo_2" ][ 1 ] = "vox_sam_sam_takeo_1_1"; - level.vo_promises[ "Takeo_2" ][ 2 ] = "vox_plr_3_sam_takeo_1_0"; - level.vo_promises[ "Takeo_3" ][ 0 ] = "vox_sam_sam_takeo_2_0"; - level.vo_promises[ "Takeo_3" ][ 1 ] = "vox_sam_sam_takeo_2_1"; - level.vo_promises[ "Takeo_3" ][ 2 ] = "vox_plr_3_sam_takeo_2_0"; - level thread sam_promises_watch(); -} - -sam_promises_watch() -{ - flag_wait( "samantha_intro_done" ); - while ( 1 ) - { - level waittill( "player_zombie_blood", e_player ); - a_players = get_players(); - if ( randomint( 100 ) < 20 ) - { - e_player thread sam_promises_conversation(); - } - } -} - -sam_promises_conversation() -{ - self endon( "disconnect" ); - self.vo_promises_playing = 1; - wait 3; - if ( !isDefined( self.n_vo_promises ) ) - { - self.n_vo_promises = 1; - } - if ( self.n_vo_promises > 3 && isDefined( self.b_promise_cooldown ) || self.b_promise_cooldown && flag( "story_vo_playing" ) ) - { - self.vo_promises_playing = undefined; - return; - } - a_promises = level.vo_promises[ ( self.character_name + "_" ) + self.n_vo_promises ]; - self.n_vo_promises++; - self thread sam_promises_cooldown(); - level.sam_talking = 1; - self set_player_dontspeak( 1 ); - flag_set( "story_vo_playing" ); - self play_sam_promises_conversation( a_promises ); - level.sam_talking = 0; - self set_player_dontspeak( 0 ); - flag_clear( "story_vo_playing" ); - self.vo_promises_playing = undefined; -} - -play_sam_promises_conversation( a_promises ) -{ - i = 0; - while ( i < a_promises.size ) - { - self endon( "zombie_blood_over" ); - self endon( "disconnect" ); - if ( issubstr( a_promises[ i ], "sam_sam" ) || issubstr( a_promises[ i ], "samantha" ) ) - { - self thread sam_promises_conversation_ended_early( a_promises[ i ] ); - self playsoundtoplayer( a_promises[ i ], self ); - n_duration = soundgetplaybacktime( a_promises[ i ] ); - wait ( n_duration / 1000 ); - self notify( "promises_VO_end_early" ); - } - else - { - self playsoundwithnotify( a_promises[ i ], "player_done" ); - self waittill( "player_done" ); - } - wait 0,3; - i++; - } -} - -sam_promises_conversation_ended_early( str_alias ) -{ - self notify( "promises_VO_end_early" ); - self endon( "promises_VO_end_early" ); - while ( self.zombie_vars[ "zombie_powerup_zombie_blood_on" ] ) - { - wait 0,05; - } - self stoplocalsound( str_alias ); -} - -sam_promises_cooldown() -{ - self endon( "disconnect" ); - self.b_promise_cooldown = 1; - level waittill( "end_of_round" ); - self.b_promise_cooldown = undefined; -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz.gsc deleted file mode 100644 index bddf303..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz.gsc +++ /dev/null @@ -1,2174 +0,0 @@ -//checked includes match -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zm_tomb_chamber; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/animscripts/zm_shared; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_ai_mechz; -#include maps/mp/zombies/_zm_ai_mechz_ffotd; -#include maps/mp/zombies/_zm_ai_mechz_booster; -#include maps/mp/zombies/_zm_ai_mechz_ft; -#include maps/mp/zombies/_zm_ai_mechz_claw; -#include maps/mp/zombies/_zm_ai_mechz_dev; -#include maps/mp/zm_tomb_tank; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/zombies/_zm_net; -#include maps/mp/_utility; -#include common_scripts/utility; -#include maps/mp/zombies/_zm_zonemgr; - -#using_animtree( "mechz_claw" ); - -precache() //checked matches cerberus output -{ - level thread mechz_setup_armor_pieces(); - precachemodel( "c_zom_mech_claw" ); - precachemodel( "c_zom_mech_faceplate" ); - precachemodel( "c_zom_mech_powersupply_cap" ); - level._effect[ "mech_dmg_sparks" ] = loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_sparks" ); - level._effect[ "mech_dmg_steam" ] = loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_steam" ); - level._effect[ "mech_booster" ] = loadfx( "maps/zombie_tomb/fx_tomb_mech_jump_booster" ); - level._effect[ "mech_wpn_source" ] = loadfx( "maps/zombie_tomb/fx_tomb_mech_wpn_source" ); - level._effect[ "mech_wpn_flamethrower" ] = loadfx( "maps/zombie_tomb/fx_tomb_mech_wpn_flamethrower" ); - level._effect[ "mech_booster_landing" ] = loadfx( "maps/zombie_tomb/fx_tomb_mech_jump_landing" ); - level._effect[ "mech_faceplate_dmg" ] = loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_armor_face" ); - level._effect[ "mech_armor_dmg" ] = loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_armor" ); - level._effect[ "mech_exhaust" ] = loadfx( "maps/zombie_tomb/fx_tomb_mech_exhaust_smoke" ); - level._effect[ "mech_booster_feet" ] = loadfx( "maps/zombie_tomb/fx_tomb_mech_jump_booster_sm" ); - level._effect[ "mech_headlamp" ] = loadfx( "maps/zombie_tomb/fx_tomb_mech_head_light" ); - level._effect[ "mech_footstep_steam" ] = loadfx( "maps/zombie_tomb/fx_tomb_mech_foot_step_steam" ); - setdvar( "zombie_double_wide_checks", 1 ); - precacherumble( "mechz_footsteps" ); - precacheshellshock( "lava_small" ); -} - -init() //checked changed to match cerberus output -{ - maps/mp/zombies/_zm_ai_mechz_ffotd::mechz_init_start(); - level.mechz_spawners = getentarray( "mechz_spawner", "script_noteworthy" ); - if ( level.mechz_spawners.size == 0 ) - { - return; - } - for ( i = 0; i < level.mechz_spawners.size; i++ ) - { - level.mechz_spawners[ i ].is_enabled = 1; - level.mechz_spawners[ i ].script_forcespawn = 1; - } - level.mechz_base_health = 5000; - level.mechz_health = level.mechz_base_health; - level.mechz_health_increase = 1000; - level.mechz_round_count = 0; - level.mechz_damage_percent = 0,1; - level.mechz_remove_helmet_head_dmg_base = 500; - level.mechz_remove_helmet_head_dmg = level.mechz_remove_helmet_head_dmg_base; - level.mechz_remove_helmet_head_dmg_increase = 250; - level.mechz_explosive_dmg_head_scaler = 0,25; - level.mechz_helmet_health_percentage = 0,1; - level.mechz_powerplant_expose_dmg_base = 300; - level.mechz_powerplant_expose_dmg = level.mechz_powerplant_expose_base_dmg; - level.mechz_powerplant_expose_dmg_increase = 100; - level.mechz_powerplant_destroy_dmg_base = 500; - level.mechz_powerplant_destroy_dmg = level.mechz_powerplant_destroy_dmg_base; - level.mechz_powerplant_destroy_dmg_increase = 150; - level.mechz_powerplant_expose_health_percentage = 0,05; - level.mechz_powerplant_destroyed_health_percentage = 0,025; - level.mechz_explosive_dmg_to_cancel_claw_percentage = 0,1; - level.mechz_min_round_fq = 3; - level.mechz_max_round_fq = 4; - level.mechz_min_round_fq_solo = 4; - level.mechz_max_round_fq_solo = 6; - level.mechz_reset_dist_sq = 65536; - level.mechz_sticky_dist_sq = 1048576; - level.mechz_aggro_dist_sq = 16384; - level.mechz_zombie_per_round = 1; - level.mechz_left_to_spawn = 0; - level.mechz_players_in_zone_spawn_point_cap = 120; - level.mechz_shotgun_damage_mod = 1,5; - level.mechz_failed_paths_to_jump = 3; - level.mechz_jump_dist_threshold = 4410000; - level.mechz_jump_delay = 3; - level.mechz_player_flame_dmg = 10; - level.mechz_half_front_arc = cos( 45 ); - level.mechz_ft_sweep_chance = 10; - level.mechz_aim_max_pitch = 60; - level.mechz_aim_max_yaw = 45; - level.mechz_custom_goalradius = 48; - level.mechz_custom_goalradius_sq = level.mechz_custom_goalradius * level.mechz_custom_goalradius; - level.mechz_tank_knockdown_time = 5; - level.mechz_robot_knockdown_time = 10; - level.mechz_dist_for_sprint = 129600; - level.mechz_dist_for_stop_sprint = 57600; - level.mechz_claw_cooldown_time = 7000; - level.mechz_flamethrower_cooldown_time = 5000; - level.mechz_min_extra_spawn = 8; - level.mechz_max_extra_spawn = 11; - level.mechz_points_for_killer = 250; - level.mechz_points_for_team = 500; - level.mechz_points_for_helmet = 100; - level.mechz_points_for_powerplant = 100; - level.mechz_flogger_stun_time = 3; - level.mechz_powerplant_stun_time = 4; - flag_init( "mechz_launching_claw" ); - flag_init( "mechz_claw_move_complete" ); - registerclientfield( "actor", "mechz_fx", 14000, 12, "int" ); - registerclientfield( "toplayer", "mechz_grab", 14000, 1, "int" ); - level thread init_flamethrower_triggers(); - if ( isDefined( level.mechz_spawning_logic_override_func ) ) - { - level thread [[ level.mechz_spawning_logic_override_func ]](); - } - else - { - level thread mechz_spawning_logic(); - } - scriptmodelsuseanimtree( -1 ); - /* -/# - setup_devgui(); -#/ - */ - maps/mp/zombies/_zm_ai_mechz_ffotd::mechz_init_end(); -} - -mechz_setup_armor_pieces() //checked changed to match cerberus output -{ - level.mechz_armor_info = []; - level.mechz_armor_info[ 0 ] = spawnstruct(); - level.mechz_armor_info[ 0 ].model = "c_zom_mech_armor_knee_left"; - level.mechz_armor_info[ 0 ].tag = "J_Knee_Attach_LE"; - level.mechz_armor_info[ 1 ] = spawnstruct(); - level.mechz_armor_info[ 1 ].model = "c_zom_mech_armor_knee_right"; - level.mechz_armor_info[ 1 ].tag = "J_Knee_attach_RI"; - level.mechz_armor_info[ 2 ] = spawnstruct(); - level.mechz_armor_info[ 2 ].model = "c_zom_mech_armor_shoulder_left"; - level.mechz_armor_info[ 2 ].tag = "J_ShoulderArmor_LE"; - level.mechz_armor_info[ 3 ] = spawnstruct(); - level.mechz_armor_info[ 3 ].model = "c_zom_mech_armor_shoulder_right"; - level.mechz_armor_info[ 3 ].tag = "J_ShoulderArmor_RI"; - level.mechz_armor_info[ 4 ] = spawnstruct(); - level.mechz_armor_info[ 4 ].tag = "J_Root_Attach_LE"; - level.mechz_armor_info[ 5 ] = spawnstruct(); - level.mechz_armor_info[ 5 ].tag = "J_Root_Attach_RI"; - for ( i = 0; i < level.mechz_armor_info.size; i++ ) - { - if ( isDefined( level.mechz_armor_info[ i ].model ) ) - { - precachemodel( level.mechz_armor_info[ i ].model ); - } - } -} - -mechz_setup_fx() //checked matches cerberus output -{ - self.fx_field = 0; - self thread booster_fx_watcher(); - self thread flamethrower_fx_watcher(); -} - -clear_one_off_fx( fx_id ) -{ - self endon( "death" ); - wait 10; - self.fx_field &= fx_id; - self setclientfield( "mechz_fx", self.fx_field ); -} - -traversal_booster_fx_watcher() -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( "traverse_anim", notetrack ); - if ( notetrack == "booster_on" ) - { - self.fx_field |= 128; - self.sndloopent playsound( "zmb_ai_mechz_rocket_start" ); - self.sndloopent playloopsound( "zmb_ai_mechz_rocket_loop", 0,75 ); - } - else - { - if ( notetrack == "booster_off" ) - { - self.fx_field &= 128; - self.sndloopent playsound( "zmb_ai_mechz_rocket_stop" ); - self.sndloopent stoploopsound( 1 ); - } - } - self setclientfield( "mechz_fx", self.fx_field ); - } -} - -booster_fx_watcher() -{ - self endon( "death" ); - self thread traversal_booster_fx_watcher(); - while ( 1 ) - { - self waittill( "jump_anim", notetrack ); - if ( isDefined( self.mechz_hidden ) && self.mechz_hidden ) - { - continue; - } - if ( notetrack == "booster_on" ) - { - self.fx_field |= 128; - self.sndloopent playsound( "zmb_ai_mechz_rocket_start" ); - self.sndloopent playloopsound( "zmb_ai_mechz_rocket_loop", 0,75 ); - } - else if ( notetrack == "booster_off" ) - { - self.fx_field &= 128; - self.sndloopent playsound( "zmb_ai_mechz_rocket_stop" ); - self.sndloopent stoploopsound( 1 ); - } - else - { - if ( notetrack == "impact" ) - { - self.fx_field |= 512; - if ( isDefined( self.has_helmet ) && self.has_helmet ) - { - self.fx_field |= 2048; - } - self thread clear_one_off_fx( 512 ); - } - } - self setclientfield( "mechz_fx", self.fx_field ); - } -} - -flamethrower_fx_watcher() -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( "flamethrower_anim", notetrack ); - if ( notetrack == "start_ft" ) - { - self.fx_field |= 64; - } - else - { - if ( notetrack == "stop_ft" ) - { - self.fx_field &= 64; - } - } - self setclientfield( "mechz_fx", self.fx_field ); - } -} - -fx_cleanup() -{ - self.fx_field = 0; - self setclientfield( "mechz_fx", self.fx_field ); - wait_network_frame(); -} - -mechz_setup_snd() -{ - self.audio_type = "mechz"; - if ( !isDefined( self.sndloopent ) ) - { - self.sndloopent = spawn( "script_origin", self.origin ); - self.sndloopent linkto( self, "tag_origin" ); - self thread snddeleteentondeath( self.sndloopent ); - } - self thread play_ambient_mechz_vocals(); -} - -snddeleteentondeath( ent ) -{ - self waittill( "death" ); - ent delete(); -} - -play_ambient_mechz_vocals() -{ - self endon( "death" ); - wait randomintrange( 2, 4 ); - while ( 1 ) - { - if ( isDefined( self ) ) - { - if ( isDefined( self.favoriteenemy ) && distance( self.origin, self.favoriteenemy.origin ) <= 150 ) - { - break; - } - else - { - self playsound( "zmb_ai_mechz_vox_ambient" ); - } - } - wait randomfloatrange( 3, 6 ); - } -} - -enable_mechz_rounds() -{ -/# - if ( getDvarInt( "zombie_cheat" ) >= 2 ) - { - return; -#/ - } - level.mechz_rounds_enabled = 1; - flag_init( "mechz_round" ); - level thread mechz_round_tracker(); -} - -mechz_round_tracker() -{ - maps/mp/zombies/_zm_ai_mechz_ffotd::mechz_round_tracker_start(); - level.num_mechz_spawned = 0; - old_spawn_func = level.round_spawn_func; - old_wait_func = level.round_wait_func; - while ( !isDefined( level.zombie_mechz_locations ) ) - { - wait 0,05; - } - flag_wait( "activate_zone_nml" ); - mech_start_round_num = 8; - if ( isDefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) - { - mech_start_round_num = 8; - } - while ( level.round_number < mech_start_round_num ) - { - level waittill( "between_round_over" ); - } - level.next_mechz_round = level.round_number; - level thread debug_print_mechz_round(); - while ( 1 ) - { - maps/mp/zombies/_zm_ai_mechz_ffotd::mechz_round_tracker_loop_start(); - if ( level.num_mechz_spawned > 0 ) - { - level.mechz_should_drop_powerup = 1; - } - while ( level.next_mechz_round <= level.round_number ) - { - a_zombies = getaispeciesarray( level.zombie_team, "all" ); - _a485 = a_zombies; - _k485 = getFirstArrayKey( _a485 ); - while ( isDefined( _k485 ) ) - { - zombie = _a485[ _k485 ]; - if ( isDefined( zombie.is_mechz ) && zombie.is_mechz && isalive( zombie ) ) - { - level.next_mechz_round++; - break; - } - else - { - _k485 = getNextArrayKey( _a485, _k485 ); - } - } - } - if ( level.mechz_left_to_spawn == 0 && level.next_mechz_round <= level.round_number ) - { - mechz_health_increases(); - if ( isDefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) - { - level.mechz_zombie_per_round = 1; - } - else - { - if ( level.mechz_round_count < 2 ) - { - level.mechz_zombie_per_round = 1; - break; - } - else if ( level.mechz_round_count < 5 ) - { - level.mechz_zombie_per_round = 2; - break; - } - else - { - level.mechz_zombie_per_round = 3; - } - } - level.mechz_left_to_spawn = level.mechz_zombie_per_round; - mechz_spawning = level.mechz_left_to_spawn; - wait randomfloatrange( 10, 15 ); - level notify( "spawn_mechz" ); - if ( isDefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) - { - n_round_gap = randomintrange( level.mechz_min_round_fq_solo, level.mechz_max_round_fq_solo ); - } - else - { - n_round_gap = randomintrange( level.mechz_min_round_fq, level.mechz_max_round_fq ); - } - level.next_mechz_round = level.round_number + n_round_gap; - level.mechz_round_count++; - level thread debug_print_mechz_round(); - level.num_mechz_spawned += mechz_spawning; - } - maps/mp/zombies/_zm_ai_mechz_ffotd::mechz_round_tracker_loop_end(); - level waittill( "between_round_over" ); - mechz_clear_spawns(); - } -} - -debug_print_mechz_round() -{ - flag_wait( "start_zombie_round_logic" ); -/# - iprintln( "Next mechz Round = " + level.next_mechz_round ); -#/ -} - -mechz_spawning_logic() -{ - level thread enable_mechz_rounds(); - while ( 1 ) - { - level waittill( "spawn_mechz" ); - while ( level.mechz_left_to_spawn ) - { - while ( level.zombie_mechz_locations.size < 1 ) - { - wait randomfloatrange( 5, 10 ); - } - ai = spawn_zombie( level.mechz_spawners[ 0 ] ); - ai thread mechz_spawn(); - level.mechz_left_to_spawn--; - - if ( level.mechz_left_to_spawn == 0 ) - { - level thread response_to_air_raid_siren_vo(); - } - ai thread mechz_hint_vo(); - wait randomfloatrange( 3, 6 ); - } - } -} - -mechz_prespawn() -{ -} - -mechz_attach_objects() -{ - self detachall(); - self.armor_state = []; - i = 0; - while ( i < level.mechz_armor_info.size ) - { - self.armor_state[ i ] = spawnstruct(); - self.armor_state[ i ].index = i; - self.armor_state[ i ].tag = level.mechz_armor_info[ i ].tag; - if ( isDefined( level.mechz_armor_info[ i ].model ) ) - { - self attach( level.mechz_armor_info[ i ].model, level.mechz_armor_info[ i ].tag, 1 ); - self.armor_state[ i ].model = level.mechz_armor_info[ i ].model; - } - i++; - } - if ( isDefined( self.m_claw ) ) - { - self.m_claw delete(); - self.m_claw = undefined; - } - org = self gettagorigin( "tag_claw" ); - ang = self gettagangles( "tag_claw" ); - self.m_claw = spawn( "script_model", org ); - self.m_claw setmodel( "c_zom_mech_claw" ); - self.m_claw.angles = ang; - self.m_claw linkto( self, "tag_claw" ); - self.m_claw useanimtree( -1 ); - if ( isDefined( self.m_claw_damage_trigger ) ) - { - self.m_claw_damage_trigger unlink(); - self.m_claw_damage_trigger delete(); - self.m_claw_damage_trigger = undefined; - } - trigger_spawnflags = 0; - trigger_radius = 3; - trigger_height = 15; - self.m_claw_damage_trigger = spawn( "trigger_damage", org, trigger_spawnflags, trigger_radius, trigger_height ); - self.m_claw_damage_trigger.angles = ang; - self.m_claw_damage_trigger enablelinkto(); - self.m_claw_damage_trigger linkto( self, "tag_claw" ); - self thread mechz_claw_damage_trigger_thread(); - self attach( "c_zom_mech_faceplate", "J_Helmet", 0 ); - self.has_helmet = 1; - self attach( "c_zom_mech_powersupply_cap", "tag_powersupply", 0 ); - self.has_powerplant = 1; - self.powerplant_covered = 1; - self.armor_state = array_randomize( self.armor_state ); -} - -mechz_set_starting_health() -{ - self.maxhealth = level.mechz_health; - self.helmet_dmg = 0; - self.helmet_dmg_for_removal = self.maxhealth * level.mechz_helmet_health_percentage; - self.powerplant_cover_dmg = 0; - self.powerplant_cover_dmg_for_removal = self.maxhealth * level.mechz_powerplant_expose_health_percentage; - self.powerplant_dmg = 0; - self.powerplant_dmg_for_destroy = self.maxhealth * level.mechz_powerplant_destroyed_health_percentage; - level.mechz_explosive_dmg_to_cancel_claw = self.maxhealth * level.mechz_explosive_dmg_to_cancel_claw_percentage; -/# - if ( getDvarInt( #"E7121222" ) > 0 ) - { - println( "\nMZ: MechZ Starting Health: " + self.maxhealth ); - println( "\nMZ: MechZ Required Helmet Dmg: " + self.helmet_dmg_for_removal ); - println( "\nMZ: MechZ Required Powerplant Cover Dmg: " + self.powerplant_cover_dmg_for_removal ); - println( "\nMZ: MechZ Required Powerplant Dmg: " + self.powerplant_dmg_for_destroy ); -#/ - } - self.health = level.mechz_health; - self.non_attacker_func = ::mechz_non_attacker_damage_override; - self.non_attack_func_takes_attacker = 1; - self.actor_damage_func = ::mechz_damage_override; - self.instakill_func = ::mechz_instakill_override; - self.nuke_damage_func = ::mechz_nuke_override; -} - -mechz_spawn() -{ - self maps/mp/zombies/_zm_ai_mechz_ffotd::spawn_start(); - self endon( "death" ); - level endon( "intermission" ); - self mechz_attach_objects(); - self mechz_set_starting_health(); - self mechz_setup_fx(); - self mechz_setup_snd(); - level notify( "sam_clue_mechz" ); - self.closest_player_override = ::get_favorite_enemy; - self.animname = "mechz_zombie"; - self.has_legs = 1; - self.no_gib = 1; - self.ignore_all_poi = 1; - self.is_mechz = 1; - self.ignore_enemy_count = 1; - self.no_damage_points = 1; - self.melee_anim_func = ::melee_anim_func; - self.meleedamage = 75; - self.custom_item_dmg = 2000; - recalc_zombie_array(); - self setphysparams( 20, 0, 80 ); - self setcandamage( 0 ); - self.zombie_init_done = 1; - self notify( "zombie_init_done" ); - self.allowpain = 0; - self animmode( "normal" ); - self orientmode( "face enemy" ); - self maps/mp/zombies/_zm_spawner::zombie_setup_attack_properties(); - self.completed_emerging_into_playable_area = 1; - self notify( "completed_emerging_into_playable_area" ); - self.no_powerups = 0; - self setfreecameralockonallowed( 0 ); - self notsolid(); - self thread maps/mp/zombies/_zm_spawner::zombie_eye_glow(); - level thread maps/mp/zombies/_zm_spawner::zombie_death_event( self ); - self thread maps/mp/zombies/_zm_spawner::enemy_death_detection(); - if ( level.zombie_mechz_locations.size ) - { - spawn_pos = self get_best_mechz_spawn_pos(); - } - if ( !isDefined( spawn_pos ) ) - { -/# - println( "ERROR: Tried to spawn mechz with no mechz spawn_positions!\n" ); - iprintln( "ERROR: Tried to spawn mechz with no mechz spawn_positions!" ); -#/ - self delete(); - return; - } - if ( isDefined( level.mechz_force_spawn_pos ) ) - { - spawn_pos = level.mechz_force_spawn_pos; - level.mechz_force_spawn_pos = undefined; - } - if ( !isDefined( spawn_pos.angles ) ) - { - spawn_pos.angles = ( 0, 0, 1 ); - } - self thread mechz_death(); - self forceteleport( spawn_pos.origin, spawn_pos.angles ); - self playsound( "zmb_ai_mechz_incoming_alarm" ); - if ( !isDefined( spawn_pos.angles ) ) - { - spawn_pos.angles = ( 0, 0, 1 ); - } - self animscripted( spawn_pos.origin, spawn_pos.angles, "zm_spawn" ); - self maps/mp/animscripts/zm_shared::donotetracks( "jump_anim" ); - self setfreecameralockonallowed( 1 ); - self solid(); - self set_zombie_run_cycle( "walk" ); - if ( isDefined( level.mechz_find_flesh_override_func ) ) - { - level thread [[ level.mechz_find_flesh_override_func ]](); - } - else - { - self thread mechz_find_flesh(); - } - self thread mechz_jump_think( spawn_pos ); - self setcandamage( 1 ); - self init_anim_rate(); - self maps/mp/zombies/_zm_ai_mechz_ffotd::spawn_end(); -} - -get_closest_mechz_spawn_pos( org ) -{ - best_dist = -1; - best_pos = undefined; - players = get_players(); - i = 0; - while ( i < level.zombie_mechz_locations.size ) - { - dist = distancesquared( org, level.zombie_mechz_locations[ i ].origin ); - if ( dist < best_dist || best_dist < 0 ) - { - best_dist = dist; - best_pos = level.zombie_mechz_locations[ i ]; - } - i++; - } -/# - if ( !isDefined( best_pos ) ) - { - println( "Error: Mechz could not find a valid jump pos from position ( " + self.origin[ 0 ] + ", " + self.origin[ 1 ] + ", " + self.origin[ 2 ] + " )" ); -#/ - } - return best_pos; -} - -get_best_mechz_spawn_pos( ignore_used_positions ) -{ - if ( !isDefined( ignore_used_positions ) ) - { - ignore_used_positions = 0; - } - best_dist = -1; - best_pos = undefined; - players = get_players(); - i = 0; - while ( i < level.zombie_mechz_locations.size ) - { - if ( !ignore_used_positions && isDefined( level.zombie_mechz_locations[ i ].has_been_used ) && level.zombie_mechz_locations[ i ].has_been_used ) - { - i++; - continue; - } - else - { - if ( ignore_used_positions == 1 && isDefined( level.zombie_mechz_locations[ i ].used_cooldown ) && level.zombie_mechz_locations[ i ].used_cooldown ) - { - i++; - continue; - } - else - { - j = 0; - while ( j < players.size ) - { - if ( is_player_valid( players[ j ], 1, 1 ) ) - { - dist = distancesquared( level.zombie_mechz_locations[ i ].origin, players[ j ].origin ); - if ( dist < best_dist || best_dist < 0 ) - { - best_dist = dist; - best_pos = level.zombie_mechz_locations[ i ]; - } - } - j++; - } - } - } - i++; - } - if ( ignore_used_positions && isDefined( best_pos ) ) - { - best_pos thread jump_pos_used_cooldown(); - } - if ( isDefined( best_pos ) ) - { - best_pos.has_been_used = 1; - } - else - { - if ( level.zombie_mechz_locations.size > 0 ) - { - return level.zombie_mechz_locations[ randomint( level.zombie_mechz_locations.size ) ]; - } - } - return best_pos; -} - -mechz_clear_spawns() -{ - i = 0; - while ( i < level.zombie_mechz_locations.size ) - { - level.zombie_mechz_locations[ i ].has_been_used = 0; - i++; - } -} - -jump_pos_used_cooldown() -{ - self.used_cooldown = 1; - wait 5; - self.used_cooldown = 0; -} - -mechz_health_increases() -{ - if ( !isDefined( level.mechz_last_spawn_round ) || level.round_number > level.mechz_last_spawn_round ) - { - a_players = getplayers(); - n_player_modifier = 1; - if ( a_players.size > 1 ) - { - n_player_modifier = a_players.size * 0,75; - } - level.mechz_health = int( n_player_modifier * ( level.mechz_base_health + ( level.mechz_health_increase * level.mechz_round_count ) ) ); - if ( level.mechz_health >= ( 22500 * n_player_modifier ) ) - { - level.mechz_health = int( 22500 * n_player_modifier ); - } - level.mechz_last_spawn_round = level.round_number; - } -} - -mechz_death() -{ - self endon( "mechz_cleanup" ); - thread mechz_cleanup(); - self waittill( "death" ); - death_origin = self.origin; - if ( isDefined( self.robot_stomped ) && self.robot_stomped ) - { - death_origin += vectorScale( ( 0, 0, 1 ), 90 ); - } - self mechz_claw_detach(); - self release_flamethrower_trigger(); - self.fx_field = 0; - self setclientfield( "mechz_fx", self.fx_field ); - self thread maps/mp/zombies/_zm_spawner::zombie_eye_glow_stop(); - self mechz_interrupt(); - if ( isDefined( self.favoriteenemy ) ) - { - if ( isDefined( self.favoriteenemy.hunted_by ) ) - { - self.favoriteenemy.hunted_by--; - - } - } - self thread mechz_explode( "tag_powersupply", death_origin ); - if ( get_current_zombie_count() == 0 && level.zombie_total == 0 ) - { - level.last_mechz_origin = self.origin; - level notify( "last_mechz_down" ); - } - if ( isplayer( self.attacker ) ) - { - event = "death"; - if ( issubstr( self.damageweapon, "knife_ballistic_" ) ) - { - event = "ballistic_knife_death"; - } - self.attacker delay_thread( 4, ::maps/mp/zombies/_zm_audio::create_and_play_dialog, "general", "mech_defeated" ); - self.attacker maps/mp/zombies/_zm_score::player_add_points( event, self.damagemod, self.damagelocation, 1 ); - self.attacker maps/mp/zombies/_zm_stats::increment_client_stat( "tomb_mechz_killed", 0 ); - self.attacker maps/mp/zombies/_zm_stats::increment_player_stat( "tomb_mechz_killed" ); - if ( isDefined( level.mechz_should_drop_powerup ) && level.mechz_should_drop_powerup ) - { - wait_network_frame(); - wait_network_frame(); - level.mechz_should_drop_powerup = 0; - if ( level.powerup_drop_count >= level.zombie_vars[ "zombie_powerup_drop_max_per_round" ] ) - { - level.powerup_drop_count = level.zombie_vars[ "zombie_powerup_drop_max_per_round" ] - 1; - } - level.zombie_vars[ "zombie_drop_item" ] = 1; - level thread maps/mp/zombies/_zm_powerups::powerup_drop( self.origin ); - } - } -} - -mechz_explode( str_tag, death_origin ) -{ - wait 2; - v_origin = self gettagorigin( str_tag ); - level notify( "mechz_exploded" ); - playsoundatposition( "zmb_ai_mechz_death_explode", v_origin ); - playfx( level._effect[ "mechz_death" ], v_origin ); - radiusdamage( v_origin, 128, 100, 25, undefined, "MOD_GRENADE_SPLASH" ); - earthquake( 0,5, 1, v_origin, 256 ); - playrumbleonposition( "grenade_rumble", v_origin ); - level notify( "mechz_killed" ); -} - -mechz_cleanup() -{ - self waittill( "mechz_cleanup" ); - self mechz_interrupt(); - level.sndmechzistalking = 0; - if ( isDefined( self.sndmechzmusicent ) ) - { - self.sndmechzmusicent delete(); - self.sndmechzmusicent = undefined; - } - if ( isDefined( self.favoriteenemy ) ) - { - if ( isDefined( self.favoriteenemy.hunted_by ) ) - { - self.favoriteenemy.hunted_by--; - - } - } -} - -mechz_interrupt() -{ - self notify( "kill_claw" ); - self notify( "kill_ft" ); - self notify( "kill_jump" ); -} - -mechz_stun( time ) -{ - self endon( "death" ); - if ( isalive( self ) && isDefined( self.not_interruptable ) || self.not_interruptable && isDefined( self.is_traversing ) && self.is_traversing ) - { - return; - } - curr_time = 0; - anim_time = self getanimlengthfromasd( "zm_stun", 0 ); - self mechz_interrupt(); - self mechz_claw_detach(); - wait 0,05; - self.not_interruptable = 1; -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\nMZ: Stun setting not interruptable\n" ); -#/ - } - while ( curr_time < time ) - { - self animscripted( self.origin, self.angles, "zm_stun" ); - self maps/mp/animscripts/zm_shared::donotetracks( "stun_anim" ); - self clearanim( %root, 0 ); - curr_time += anim_time; - } - self.not_interruptable = 0; -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\nMZ: Stun clearing not interruptable\n" ); -#/ - } -} - -mechz_tank_hit_callback() -{ - self endon( "death" ); - if ( isDefined( self.mechz_hit_by_tank ) && self.mechz_hit_by_tank ) - { - return; - } -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\nMZ: Tank damage setting not interruptable\n" ); -#/ - } - self.not_interruptable = 1; - self.mechz_hit_by_tank = 1; - self mechz_interrupt(); - v_trace_start = self.origin + vectorScale( ( 0, 0, 1 ), 100 ); - v_trace_end = self.origin - vectorScale( ( 0, 0, 1 ), 500 ); - v_trace = physicstrace( self.origin, v_trace_end, ( -15, -15, -5 ), ( 15, 15, 5 ), self ); - self.origin = v_trace[ "position" ]; - timer = 0; - self animscripted( self.origin, self.angles, "zm_tank_hit_in" ); - self maps/mp/animscripts/zm_shared::donotetracks( "pain_anim" ); - anim_length = self getanimlengthfromasd( "zm_tank_hit_loop", 0 ); - while ( timer < level.mechz_tank_knockdown_time ) - { - timer += anim_length; - self animscripted( self.origin, self.angles, "zm_tank_hit_loop" ); - self maps/mp/animscripts/zm_shared::donotetracks( "pain_anim" ); - } - self animscripted( self.origin, self.angles, "zm_tank_hit_out" ); - self maps/mp/animscripts/zm_shared::donotetracks( "pain_anim" ); -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\nMZ: Tank damage clearing not interruptable\n" ); -#/ - } - self.not_interruptable = 0; - self.mechz_hit_by_tank = 0; - if ( !level.vh_tank ent_flag( "tank_moving" ) && self istouching( level.vh_tank ) ) - { - self notsolid(); - self ghost(); - self.mechz_hidden = 1; - if ( isDefined( self.m_claw ) ) - { - self.m_claw ghost(); - } - self.fx_field_old = self.fx_field; - self thread maps/mp/zombies/_zm_spawner::zombie_eye_glow_stop(); - self fx_cleanup(); - self mechz_do_jump(); - self solid(); - self.mechz_hidden = 0; - } -} - -mechz_robot_stomp_callback() -{ - self endon( "death" ); - if ( isDefined( self.robot_stomped ) && self.robot_stomped ) - { - return; - } - self.not_interruptable = 1; - self.robot_stomped = 1; - self mechz_interrupt(); -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\nMZ: Robot stomp setting not interruptable\n" ); -#/ - } - self thread mechz_stomped_by_giant_robot_vo(); - v_trace_start = self.origin + vectorScale( ( 0, 0, 1 ), 100 ); - v_trace_end = self.origin - vectorScale( ( 0, 0, 1 ), 500 ); - v_trace = physicstrace( self.origin, v_trace_end, ( -15, -15, -5 ), ( 15, 15, 5 ), self ); - self.origin = v_trace[ "position" ]; - timer = 0; - self animscripted( self.origin, self.angles, "zm_robot_hit_in" ); - self maps/mp/animscripts/zm_shared::donotetracks( "pain_anim" ); - anim_length = self getanimlengthfromasd( "zm_robot_hit_loop", 0 ); - while ( timer < level.mechz_robot_knockdown_time ) - { - timer += anim_length; - self animscripted( self.origin, self.angles, "zm_robot_hit_loop" ); - self maps/mp/animscripts/zm_shared::donotetracks( "pain_anim" ); - } - self animscripted( self.origin, self.angles, "zm_robot_hit_out" ); - self maps/mp/animscripts/zm_shared::donotetracks( "jump_anim" ); -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\nMZ: Robot stomp clearing not interruptable\n" ); -#/ - } - self.not_interruptable = 0; - self.robot_stomped = 0; -} - -mechz_delayed_item_delete() -{ - wait 30; - self delete(); -} - -mechz_get_closest_valid_player() -{ - players = get_players(); - while ( isDefined( self.ignore_player ) ) - { - i = 0; - while ( i < self.ignore_player.size ) - { - arrayremovevalue( players, self.ignore_player[ i ] ); - i++; - } - } - i = 0; - while ( i < players.size ) - { - if ( isDefined( level._zombie_using_humangun ) && level._zombie_using_humangun && isai( players[ i ] ) ) - { - return players[ i ]; - } - if ( !is_player_valid( players[ i ], 1, 1 ) ) - { - arrayremovevalue( players, players[ i ] ); - i--; - - } - i++; - } - switch( players.size ) - { - case 0: - return undefined; - case 1: - return players[ 0 ]; - default: - if ( isDefined( level.closest_player_override ) ) - { - player = [[ level.closest_player_override ]]( self.origin, players ); - } - else if ( isDefined( level.calc_closest_player_using_paths ) && level.calc_closest_player_using_paths ) - { - player = get_closest_player_using_paths( self.origin, players ); - } - else - { - player = getclosest( self.origin, players ); - } - return player; - } -} - -get_favorite_enemy( origin, players ) -{ - mechz_targets = getplayers(); - least_hunted = undefined; - best_hunted_val = -1; - best_dist = -1; - distances = []; - if ( isDefined( self.favoriteenemy ) && is_player_valid( self.favoriteenemy, 1, 1 ) && !isDefined( self.favoriteenemy.in_giant_robot_head ) && !self.favoriteenemy maps/mp/zm_tomb_chamber::is_player_in_chamber() ) - { -/# - assert( isDefined( self.favoriteenemy.hunted_by ) ); -#/ - self.favoriteenemy.hunted_by--; - - least_hunted = self.favoriteenemy; - } - i = 0; - while ( i < mechz_targets.size ) - { - if ( !isDefined( mechz_targets[ i ].hunted_by ) || mechz_targets[ i ].hunted_by < 0 ) - { - mechz_targets[ i ].hunted_by = 0; - } - if ( !is_player_valid( mechz_targets[ i ], 1, 1 ) ) - { - i++; - continue; - } - else - { - distances[ i ] = distancesquared( self.origin, mechz_targets[ i ].origin ); - } - i++; - } - found_weapon_target = 0; - i = 0; - while ( i < mechz_targets.size ) - { - if ( abs( mechz_targets[ i ].origin[ 2 ] - self.origin[ 2 ] ) > 60 ) - { - i++; - continue; - } - else dist = distances[ i ]; - if ( !isDefined( dist ) ) - { - i++; - continue; - } - else - { - if ( dist < 50000 || dist < best_dist && best_dist < 0 ) - { - found_weapon_target = 1; - least_hunted = mechz_targets[ i ]; - best_dist = dist; - } - } - i++; - } - if ( found_weapon_target ) - { - least_hunted.hunted_by++; - return least_hunted; - } - if ( isDefined( self.favoriteenemy ) && is_player_valid( self.favoriteenemy, 1, 1 ) ) - { - if ( distancesquared( self.origin, self.favoriteenemy.origin ) <= level.mechz_sticky_dist_sq ) - { - self.favoriteenemy.hunted_by++; - return self.favoriteenemy; - } - } - i = 0; - while ( i < mechz_targets.size ) - { - if ( isDefined( mechz_targets[ i ].in_giant_robot_head ) ) - { - i++; - continue; - } - else if ( mechz_targets[ i ] maps/mp/zm_tomb_chamber::is_player_in_chamber() ) - { - i++; - continue; - } - else if ( isDefined( distances[ i ] ) ) - { - dist = distances[ i ]; - } - else - { - } - hunted = mechz_targets[ i ].hunted_by; - if ( !isDefined( least_hunted ) || hunted <= least_hunted.hunted_by ) - { - if ( dist < best_dist || best_dist < 0 ) - { - least_hunted = mechz_targets[ i ]; - best_dist = dist; - } - } - i++; - } - if ( isDefined( least_hunted ) ) - { - least_hunted.hunted_by++; - } - return least_hunted; -} - -mechz_check_in_arc( right_offset ) -{ - origin = self.origin; - if ( isDefined( right_offset ) ) - { - right_angle = anglesToRight( self.angles ); - origin += right_angle * right_offset; - } - facing_vec = anglesToForward( self.angles ); - enemy_vec = self.favoriteenemy.origin - origin; - enemy_yaw_vec = ( enemy_vec[ 0 ], enemy_vec[ 1 ], 0 ); - facing_yaw_vec = ( facing_vec[ 0 ], facing_vec[ 1 ], 0 ); - enemy_yaw_vec = vectornormalize( enemy_yaw_vec ); - facing_yaw_vec = vectornormalize( facing_yaw_vec ); - enemy_dot = vectordot( facing_yaw_vec, enemy_yaw_vec ); - if ( enemy_dot < cos( level.mechz_aim_max_yaw ) ) - { - return 0; - } - enemy_angles = vectorToAngle( enemy_vec ); - if ( abs( angleClamp180( enemy_angles[ 0 ] ) ) > level.mechz_aim_max_pitch ) - { - return 0; - } - return 1; -} - -mechz_get_aim_anim( anim_prefix, target_pos, right_offset ) -{ - in_arc = self mechz_check_in_arc( right_offset ); - if ( !in_arc ) - { - return undefined; - } - origin = self.origin; - if ( isDefined( right_offset ) ) - { - right_angle = anglesToRight( self.angles ); - origin += right_angle * right_offset; - } - aiming_vec = vectorToAngle( target_pos - origin ); - pitch = angleClamp180( aiming_vec[ 0 ] ); - yaw = angleClamp180( self.angles[ 1 ] - aiming_vec[ 1 ] ); - centered_ud = abs( pitch ) < ( level.mechz_aim_max_pitch / 2 ); - centered_lr = abs( yaw ) < ( level.mechz_aim_max_yaw / 2 ); - right_anim = angleClamp180( self.angles[ 1 ] - aiming_vec[ 1 ] ) > 0; - up_anim = pitch < 0; - if ( centered_ud && centered_lr ) - { - return anim_prefix + "_aim_5"; - } - else - { - if ( centered_ud && right_anim ) - { - return anim_prefix + "_aim_6"; - } - else - { - if ( centered_ud ) - { - return anim_prefix + "_aim_4"; - } - else - { - if ( centered_lr && up_anim ) - { - return anim_prefix + "_aim_8"; - } - else - { - if ( centered_lr ) - { - return anim_prefix + "_aim_2"; - } - else - { - if ( right_anim && up_anim ) - { - return anim_prefix + "_aim_9"; - } - else - { - if ( right_anim ) - { - return anim_prefix + "_aim_3"; - } - else - { - if ( up_anim ) - { - return anim_prefix + "_aim_7"; - } - else - { - return anim_prefix + "_aim_1"; - } - } - } - } - } - } - } - } -} - -mechz_start_basic_find_flesh() -{ - self.goalradius = level.mechz_custom_goalradius; - self.custom_goalradius_override = level.mechz_custom_goalradius; - if ( !isDefined( self.ai_state ) || self.ai_state != "find_flesh" ) - { - self.ai_state = "find_flesh"; - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - } -} - -mechz_stop_basic_find_flesh() -{ - if ( isDefined( self.ai_state ) && self.ai_state == "find_flesh" ) - { - self.ai_state = undefined; - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - } -} - -watch_for_player_dist() -{ - self endon( "death" ); - while ( 1 ) - { - player = mechz_get_closest_valid_player(); - if ( isDefined( player ) && isDefined( player.is_player_slowed ) && player.is_player_slowed ) - { - reset_dist = level.mechz_reset_dist_sq / 2; - } - else - { - reset_dist = level.mechz_reset_dist_sq; - } - if ( !isDefined( player ) || distancesquared( player.origin, self.origin ) > reset_dist ) - { - self.disable_complex_behaviors = 0; - } - wait 0,5; - } -} - -mechz_find_flesh() -{ - self endon( "death" ); - level endon( "intermission" ); - if ( level.intermission ) - { - return; - } - self.helitarget = 1; - self.ignoreme = 0; - self.nododgemove = 1; - self.ignore_player = []; - self.goalradius = 32; - self.ai_state = "spawning"; - self thread watch_for_player_dist(); - for ( ;; ) - { - while ( 1 ) - { -/# - while ( isDefined( self.force_behavior ) && self.force_behavior ) - { - wait 0,05; -#/ - } - while ( isDefined( self.not_interruptable ) && self.not_interruptable ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\nMZ: Not thinking since a behavior has set not_interruptable\n" ); -#/ - } - wait 0,05; - } - while ( isDefined( self.is_traversing ) && self.is_traversing ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\nMZ: Not thinking since mech is traversing\n" ); -#/ - } - wait 0,05; - } - player = [[ self.closest_player_override ]](); - self mechz_set_locomotion_speed(); -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\nMZ: Doing think\n" ); -#/ - } - self.favoriteenemy = player; - while ( !isDefined( player ) ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\tMZ: No Enemy, idling\n" ); -#/ - } - self.goal_pos = self.origin; - self setgoalpos( self.goal_pos ); - self.ai_state = "idle"; - self setanimstatefromasd( "zm_idle" ); - wait 0,5; - } - if ( player entity_on_tank() ) - { - if ( level.vh_tank ent_flag( "tank_moving" ) ) - { - if ( isDefined( self.jump_pos ) && self mechz_in_range_for_jump() ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\tMZ: Enemy on moving tank, do jump out and jump in when tank is stationary\n" ); -#/ - } - self mechz_do_jump( 1 ); - break; - } - else - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\tMZ: Enemy on moving tank, Jump Requested, going to jump pos\n" ); -#/ - } - if ( !isDefined( self.jump_pos ) ) - { - self.jump_pos = get_closest_mechz_spawn_pos( self.origin ); - } - if ( isDefined( self.jump_pos ) ) - { - self.goal_pos = self.jump_pos.origin; - self setgoalpos( self.goal_pos ); - } - wait 0,5; - } - } - } - else /# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\tMZ: Enemy on tank, targetting a tank pos\n" ); -#/ - } - self.disable_complex_behaviors = 0; - self mechz_stop_basic_find_flesh(); - self.ai_state = "tracking_tank"; - self.goalradius = level.mechz_custom_goalradius; - self.custom_goalradius_override = level.mechz_custom_goalradius; - closest_tank_tag = level.vh_tank get_closest_mechz_tag_on_tank( self, self.origin ); - while ( !isDefined( closest_tank_tag ) ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\tMZ: Enemy on tank, no closest tank pos found, continuing\n" ); -#/ - } - wait 0,5; - } - closest_tank_tag_pos = level.vh_tank gettagorigin( closest_tank_tag ); - while ( abs( self.origin[ 2 ] - closest_tank_tag_pos[ 2 ] ) >= level.mechz_custom_goalradius || distance2dsquared( self.origin, closest_tank_tag_pos ) >= level.mechz_custom_goalradius_sq ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\tMZ: Enemy on tank, setting tank pos as goal\n" ); -#/ - } - self.goal_pos = closest_tank_tag_pos; - self setgoalpos( self.goal_pos ); - self waittill_any_or_timeout( 0,5, "goal", "bad_path" ); - while ( !player entity_on_tank() ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\tMZ: Enemy got off tank by the time we reached our goal, continuing\n" ); -#/ - } - } - } - if ( abs( self.origin[ 2 ] - closest_tank_tag_pos[ 2 ] ) < level.mechz_custom_goalradius && distance2dsquared( self.origin, closest_tank_tag_pos ) < level.mechz_custom_goalradius_sq ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\tMZ: Enemy on tank, reached tank pos, doing flamethrower sweep\n" ); -#/ - } - self.angles = vectorToAngle( level.vh_tank.origin - self.origin ); - self mechz_do_flamethrower_attack( 1 ); - self notify( "tank_flamethrower_attack_complete" ); - } - } - } - else if ( isDefined( self.jump_requested ) || self.jump_requested && isDefined( self.force_jump ) && self.force_jump ) - { - if ( self mechz_in_range_for_jump() ) - { - self mechz_do_jump(); - } - else - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\tMZ: Jump Requested, going to jump pos\n" ); -#/ - } - self.goal_pos = self.jump_pos.origin; - self setgoalpos( self.goal_pos ); - wait 0,5; - } - } -} -else if ( self.zombie_move_speed == "sprint" && isDefined( player ) ) -{ -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\tMZ: Sprinting\n" ); -#/ - } - self.goal_pos = player.origin; - self setgoalpos( self.goal_pos ); - wait 0,5; -} -} -else if ( distancesquared( self.origin, player.origin ) < level.mechz_aggro_dist_sq ) -{ -/# -if ( getDvarInt( #"E7121222" ) > 1 ) -{ - println( "\n\tMZ: Player very close, switching to melee only\n" ); -#/ -} -self.disable_complex_behaviors = 1; -} -else if ( self should_do_claw_attack() ) -{ -self mechz_do_claw_grab(); -} -} -else while ( self should_do_flamethrower_attack() ) -{ -self mechz_do_flamethrower_attack(); -} -/# -if ( getDvarInt( #"E7121222" ) > 1 ) -{ -println( "\n\tMZ: No special behavior valid, heading after player\n" ); -#/ -} -self.goal_pos = player.origin; -if ( isDefined( level.damage_prone_players_override_func ) ) -{ -level thread [[ level.damage_prone_players_override_func ]](); -} -else -{ -self thread damage_prone_players(); -} -mechz_start_basic_find_flesh(); -wait 0,5; -} -} - -damage_prone_players() -{ - self endon( "death" ); - a_players = getplayers(); - _a1878 = a_players; - _k1878 = getFirstArrayKey( _a1878 ); - while ( isDefined( _k1878 ) ) - { - player = _a1878[ _k1878 ]; - if ( isDefined( self.favoriteenemy ) && self.favoriteenemy == player ) - { - n_dist = distance2dsquared( player.origin, self.origin ); - if ( n_dist < 2025 ) - { - player_z = player.origin[ 2 ]; - mechz_z = self.origin[ 2 ]; - if ( player_z < mechz_z && ( mechz_z - player_z ) <= 75 ) - { - if ( isDefined( self.meleedamage ) ) - { - idamage = self.meleedamage; - } - else - { - idamage = 50; - } - player dodamage( idamage, self.origin, self, self, "none", "MOD_MELEE" ); - } - } - } - _k1878 = getNextArrayKey( _a1878, _k1878 ); - } -} - -melee_anim_func() -{ - self.next_leap_time = getTime() + 1500; -} - -mechz_launch_armor_piece() -{ - if ( !isDefined( self.next_armor_piece ) ) - { - self.next_armor_piece = 0; - } - if ( !isDefined( self.armor_state ) || self.next_armor_piece >= self.armor_state.size ) - { -/# - println( "Trying to launch armor piece after all pieces have already been launched!" ); -#/ - return; - } - if ( isDefined( self.armor_state[ self.next_armor_piece ].model ) ) - { - self detach( self.armor_state[ self.next_armor_piece ].model, self.armor_state[ self.next_armor_piece ].tag ); - } - self.fx_field |= 1 << self.armor_state[ self.next_armor_piece ].index; - self setclientfield( "mechz_fx", self.fx_field ); - if ( sndmechzisnetworksafe( "destruction" ) ) - { - self playsound( "zmb_ai_mechz_destruction" ); - } - self.next_armor_piece++; -} - -mechz_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, poffsettime, boneindex ) -{ - num_tiers = level.mechz_armor_info.size + 1; - old_health_tier = int( ( num_tiers * self.health ) / self.maxhealth ); - bonename = getpartname( "c_zom_mech_body", boneindex ); - if ( isDefined( attacker ) && isalive( attacker ) && isplayer( attacker ) || level.zombie_vars[ attacker.team ][ "zombie_insta_kill" ] && isDefined( attacker.personal_instakill ) && attacker.personal_instakill ) - { - n_mechz_damage_percent = 1; - n_mechz_headshot_modifier = 2; - } - else - { - n_mechz_damage_percent = level.mechz_damage_percent; - n_mechz_headshot_modifier = 1; - } - if ( isDefined( weapon ) && is_weapon_shotgun( weapon ) ) - { - n_mechz_damage_percent *= level.mechz_shotgun_damage_mod; - n_mechz_headshot_modifier *= level.mechz_shotgun_damage_mod; - } - if ( damage <= 10 ) - { - n_mechz_damage_percent = 1; - } - if ( is_explosive_damage( meansofdeath ) || issubstr( weapon, "staff" ) ) - { - if ( n_mechz_damage_percent < 0,5 ) - { - n_mechz_damage_percent = 0,5; - } - if ( isDefined( self.has_helmet ) && !self.has_helmet && issubstr( weapon, "staff" ) && n_mechz_damage_percent < 1 ) - { - n_mechz_damage_percent = 1; - } - final_damage = damage * n_mechz_damage_percent; - if ( !isDefined( self.explosive_dmg_taken ) ) - { - self.explosive_dmg_taken = 0; - } - self.explosive_dmg_taken += final_damage; - self.helmet_dmg += final_damage; - if ( isDefined( self.explosive_dmg_taken_on_grab_start ) ) - { - if ( isDefined( self.e_grabbed ) && ( self.explosive_dmg_taken - self.explosive_dmg_taken_on_grab_start ) > level.mechz_explosive_dmg_to_cancel_claw ) - { - if ( isDefined( self.has_helmet ) && self.has_helmet || self.helmet_dmg < self.helmet_dmg_for_removal && isDefined( self.has_helmet ) && !self.has_helmet ) - { - self thread mechz_claw_shot_pain_reaction(); - } - self thread ent_released_from_claw_grab_achievement( attacker, self.e_grabbed ); - self thread mechz_claw_release(); - } - } - } - else - { - if ( shitloc != "head" && shitloc != "helmet" ) - { - if ( bonename == "tag_powersupply" ) - { - final_damage = damage * n_mechz_damage_percent; - if ( isDefined( self.powerplant_covered ) && !self.powerplant_covered ) - { - self.powerplant_dmg += final_damage; - } - else - { - self.powerplant_cover_dmg += final_damage; - } - } - if ( isDefined( self.e_grabbed ) && shitloc != "left_hand" || shitloc == "left_arm_lower" && shitloc == "left_arm_upper" ) - { - if ( isDefined( self.e_grabbed ) ) - { - self thread mechz_claw_shot_pain_reaction(); - } - self thread ent_released_from_claw_grab_achievement( attacker, self.e_grabbed ); - self thread mechz_claw_release( 1 ); - } - final_damage = damage * n_mechz_damage_percent; - } - else - { - if ( isDefined( self.has_helmet ) && !self.has_helmet ) - { - final_damage = damage * n_mechz_headshot_modifier; - } - else - { - final_damage = damage * n_mechz_damage_percent; - self.helmet_dmg += final_damage; - } - } - } - if ( !isDefined( weapon ) || weapon == "none" ) - { - if ( !isplayer( attacker ) ) - { - final_damage = 0; - } - } - new_health_tier = int( ( num_tiers * ( self.health - final_damage ) ) / self.maxhealth ); - while ( old_health_tier > new_health_tier ) - { - while ( old_health_tier > new_health_tier ) - { -/# - if ( getDvarInt( #"E7121222" ) > 0 ) - { - println( "\nMZ: Old tier: " + old_health_tier + " New Health Tier: " + new_health_tier + " Launching armor piece" ); -#/ - } - if ( old_health_tier < num_tiers ) - { - self mechz_launch_armor_piece(); - } - old_health_tier--; - - } - } - if ( isDefined( self.has_helmet ) && self.has_helmet && self.helmet_dmg >= self.helmet_dmg_for_removal ) - { - self.has_helmet = 0; - self detach( "c_zom_mech_faceplate", "J_Helmet" ); - if ( sndmechzisnetworksafe( "destruction" ) ) - { - self playsound( "zmb_ai_mechz_destruction" ); - } - if ( sndmechzisnetworksafe( "angry" ) ) - { - self playsound( "zmb_ai_mechz_vox_angry" ); - } - self.fx_field |= 1024; - self.fx_field &= 2048; - self setclientfield( "mechz_fx", self.fx_field ); - if ( isDefined( self.not_interruptable ) && !self.not_interruptable && isDefined( self.is_traversing ) && !self.is_traversing ) - { - self mechz_interrupt(); - self animscripted( self.origin, self.angles, "zm_pain_faceplate" ); - self maps/mp/animscripts/zm_shared::donotetracks( "pain_anim_faceplate" ); - } - self thread shoot_mechz_head_vo(); - } - if ( isDefined( self.powerplant_covered ) && self.powerplant_covered && self.powerplant_cover_dmg >= self.powerplant_cover_dmg_for_removal ) - { - self.powerplant_covered = 0; - self detach( "c_zom_mech_powersupply_cap", "tag_powersupply" ); - cap_model = spawn( "script_model", self gettagorigin( "tag_powersupply" ) ); - cap_model.angles = self gettagangles( "tag_powersupply" ); - cap_model setmodel( "c_zom_mech_powersupply_cap" ); - cap_model physicslaunch( cap_model.origin, anglesToForward( cap_model.angles ) ); - cap_model thread mechz_delayed_item_delete(); - if ( sndmechzisnetworksafe( "destruction" ) ) - { - self playsound( "zmb_ai_mechz_destruction" ); - } - if ( isDefined( self.not_interruptable ) && !self.not_interruptable && isDefined( self.is_traversing ) && !self.is_traversing ) - { - self mechz_interrupt(); - self animscripted( self.origin, self.angles, "zm_pain_powercore" ); - self maps/mp/animscripts/zm_shared::donotetracks( "pain_anim_powercore" ); - } - } - else - { - if ( isDefined( self.powerplant_covered ) && !self.powerplant_covered && isDefined( self.has_powerplant ) && self.has_powerplant && self.powerplant_dmg >= self.powerplant_dmg_for_destroy ) - { - self.has_powerplant = 0; - self thread mechz_stun( level.mechz_powerplant_stun_time ); - if ( sndmechzisnetworksafe( "destruction" ) ) - { - self playsound( "zmb_ai_mechz_destruction" ); - } - } - } -/# - if ( getDvarInt( #"E7121222" ) > 0 ) - { - println( "\nMZ: Doing " + final_damage + " damage to mechz, Health Remaining: " + self.health ); - if ( self.helmet_dmg < self.helmet_dmg_for_removal ) - { - println( "\nMZ: Current helmet dmg: " + self.helmet_dmg + " Required helmet dmg: " + self.helmet_dmg_for_removal ); -#/ - } - } - return final_damage; -} - -mechz_non_attacker_damage_override( damage, weapon, attacker ) -{ - if ( attacker == level.vh_tank ) - { - self thread mechz_tank_hit_callback(); - } - return 0; -} - -mechz_instakill_override() -{ - return; -} - -mechz_nuke_override() -{ - self endon( "death" ); - wait randomfloatrange( 0,1, 0,7 ); - self playsound( "evt_nuked" ); - self dodamage( self.health * 0,25, self.origin ); - return; -} - -mechz_set_locomotion_speed() -{ - self endon( "death" ); - self.prev_move_speed = self.zombie_move_speed; - if ( !isDefined( self.favoriteenemy ) ) - { - self.zombie_move_speed = "walk"; - } - else if ( isDefined( self.force_run ) && self.force_run ) - { - self.zombie_move_speed = "run"; - } - else - { - if ( isDefined( self.force_sprint ) && self.force_sprint ) - { - self.zombie_move_speed = "sprint"; - } - else - { - if ( isDefined( self.favoriteenemy ) && self.favoriteenemy entity_on_tank() && isDefined( level.vh_tank ) && level.vh_tank ent_flag( "tank_activated" ) ) - { - self.zombie_move_speed = "run"; - } - else - { - if ( isDefined( self.favoriteenemy ) && distancesquared( self.origin, self.favoriteenemy.origin ) > level.mechz_dist_for_sprint ) - { - self.zombie_move_speed = "run"; - } - else - { - if ( isDefined( self.has_powerplant ) && !self.has_powerplant ) - { - self.zombie_move_speed = "walk"; - } - else - { - self.zombie_move_speed = "walk"; - } - } - } - } - } - if ( self.zombie_move_speed == "sprint" && self.prev_move_speed != "sprint" ) - { - self mechz_interrupt(); - self animscripted( self.origin, self.angles, "zm_sprint_intro" ); - self maps/mp/animscripts/zm_shared::donotetracks( "jump_anim" ); - } - else - { - if ( self.zombie_move_speed != "sprint" && self.prev_move_speed == "sprint" ) - { - self animscripted( self.origin, self.angles, "zm_sprint_outro" ); - self maps/mp/animscripts/zm_shared::donotetracks( "jump_anim" ); - } - } - self set_zombie_run_cycle( self.zombie_move_speed ); -} - -response_to_air_raid_siren_vo() -{ - wait 3; - a_players = getplayers(); - if ( a_players.size == 0 ) - { - return; - } - a_players = array_randomize( a_players ); - _a2280 = a_players; - _k2280 = getFirstArrayKey( _a2280 ); - while ( isDefined( _k2280 ) ) - { - player = _a2280[ _k2280 ]; - if ( is_player_valid( player ) ) - { - if ( isDefined( player.dontspeak ) && !player.dontspeak ) - { - if ( !isDefined( level.air_raid_siren_count ) ) - { - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "siren_1st_time" ); - level.air_raid_siren_count = 1; - while ( isDefined( player ) && isDefined( player.isspeaking ) && player.isspeaking ) - { - wait 0,1; - } - level thread start_see_mech_zombie_vo(); - return; - } - else if ( level.mechz_zombie_per_round == 1 ) - { - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "siren_generic" ); - return; - } - else player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "multiple_mechs" ); - return; - } - } - else - { - _k2280 = getNextArrayKey( _a2280, _k2280 ); - } - } -} - -start_see_mech_zombie_vo() -{ - wait 1; - a_zombies = getaispeciesarray( level.zombie_team, "all" ); - _a2321 = a_zombies; - _k2321 = getFirstArrayKey( _a2321 ); - while ( isDefined( _k2321 ) ) - { - zombie = _a2321[ _k2321 ]; - if ( isDefined( zombie.is_mechz ) && zombie.is_mechz ) - { - ai_mechz = zombie; - } - _k2321 = getNextArrayKey( _a2321, _k2321 ); - } - a_players = getplayers(); - if ( a_players.size == 0 ) - { - return; - } - while ( isalive( ai_mechz ) ) - { - _a2337 = a_players; - _k2337 = getFirstArrayKey( _a2337 ); - while ( isDefined( _k2337 ) ) - { - player = _a2337[ _k2337 ]; - player thread player_looking_at_mechz_watcher( ai_mechz ); - _k2337 = getNextArrayKey( _a2337, _k2337 ); - } - } -} - -player_looking_at_mechz_watcher( ai_mechz ) -{ - self endon( "disconnect" ); - ai_mechz endon( "death" ); - level endon( "first_mech_zombie_seen" ); - while ( 1 ) - { - if ( distancesquared( self.origin, ai_mechz.origin ) < 1000000 ) - { - if ( self is_player_looking_at( ai_mechz.origin + vectorScale( ( 0, 0, 1 ), 60 ), 0,75 ) ) - { - if ( isDefined( self.dontspeak ) && !self.dontspeak ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "discover_mech" ); - level notify( "first_mech_zombie_seen" ); - return; - } - } - } - else - { - wait 0,1; - } - } -} - -mechz_grabbed_played_vo( ai_mechz ) -{ - self endon( "disconnect" ); - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "mech_grab" ); - while ( isDefined( self ) && isDefined( self.isspeaking ) && self.isspeaking ) - { - wait 0,1; - } - wait 1; - if ( isalive( ai_mechz ) && isDefined( ai_mechz.e_grabbed ) ) - { - ai_mechz thread play_shoot_arm_hint_vo(); - } -} - -play_shoot_arm_hint_vo() -{ - self endon( "death" ); - while ( 1 ) - { - if ( !isDefined( self.e_grabbed ) ) - { - return; - } - a_players = getplayers(); - _a2399 = a_players; - _k2399 = getFirstArrayKey( _a2399 ); - while ( isDefined( _k2399 ) ) - { - player = _a2399[ _k2399 ]; - if ( player == self.e_grabbed ) - { - } - else - { - if ( distancesquared( self.origin, player.origin ) < 1000000 ) - { - if ( player is_player_looking_at( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), 0,75 ) ) - { - if ( isDefined( player.dontspeak ) && !player.dontspeak ) - { - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "shoot_mech_arm" ); - return; - } - } - } - } - _k2399 = getNextArrayKey( _a2399, _k2399 ); - } - wait 0,1; - } -} - -mechz_hint_vo() -{ - self endon( "death" ); - wait 30; - while ( 1 ) - { - while ( self.health > ( self.maxhealth * 0,5 ) ) - { - wait 1; - } - while ( isDefined( self.powerplant_covered ) && !self.powerplant_covered ) - { - wait 1; - } - a_players = getplayers(); - _a2444 = a_players; - _k2444 = getFirstArrayKey( _a2444 ); - while ( isDefined( _k2444 ) ) - { - player = _a2444[ _k2444 ]; - if ( isDefined( self.e_grabbed ) && self.e_grabbed == player ) - { - } - else - { - if ( distancesquared( self.origin, player.origin ) < 1000000 ) - { - if ( player is_player_looking_at( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), 0,75 ) ) - { - if ( isDefined( player.dontspeak ) && !player.dontspeak ) - { - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "shoot_mech_power" ); - return; - } - } - } - } - _k2444 = getNextArrayKey( _a2444, _k2444 ); - } - wait 0,1; - } -} - -shoot_mechz_head_vo() -{ - self endon( "death" ); - a_players = getplayers(); - _a2473 = a_players; - _k2473 = getFirstArrayKey( _a2473 ); - while ( isDefined( _k2473 ) ) - { - player = _a2473[ _k2473 ]; - if ( isDefined( self.e_grabbed ) && self.e_grabbed == player ) - { - } - else - { - if ( distancesquared( self.origin, player.origin ) < 1000000 ) - { - if ( player is_player_looking_at( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), 0,75 ) ) - { - if ( isDefined( player.dontspeak ) && !player.dontspeak ) - { - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "shoot_mech_head" ); - return; - } - } - } - } - _k2473 = getNextArrayKey( _a2473, _k2473 ); - } -} - -mechz_jump_vo() -{ - a_players = getplayers(); - _a2497 = a_players; - _k2497 = getFirstArrayKey( _a2497 ); - while ( isDefined( _k2497 ) ) - { - player = _a2497[ _k2497 ]; - if ( distancesquared( self.origin, player.origin ) < 1000000 ) - { - if ( player is_player_looking_at( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), 0,5 ) ) - { - if ( isDefined( player.dontspeak ) && !player.dontspeak ) - { - player delay_thread( 3, ::maps/mp/zombies/_zm_audio::create_and_play_dialog, "general", "rspnd_mech_jump" ); - return; - } - } - } - _k2497 = getNextArrayKey( _a2497, _k2497 ); - } -} - -mechz_stomped_by_giant_robot_vo() -{ - self endon( "death" ); - wait 5; - a_players = getplayers(); - _a2520 = a_players; - _k2520 = getFirstArrayKey( _a2520 ); - while ( isDefined( _k2520 ) ) - { - player = _a2520[ _k2520 ]; - if ( distancesquared( self.origin, player.origin ) < 1000000 ) - { - if ( player is_player_looking_at( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), 0,75 ) ) - { - if ( isDefined( player.dontspeak ) && !player.dontspeak ) - { - player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "robot_crush_mech" ); - return; - } - } - } - _k2520 = getNextArrayKey( _a2520, _k2520 ); - } -} - -init_anim_rate() -{ - self setclientfield( "anim_rate", 1 ); - n_rate = self getclientfield( "anim_rate" ); - self setentityanimrate( n_rate ); -} - -sndmechzisnetworksafe( type ) -{ - if ( !isDefined( level.sndmechz ) ) - { - level.sndmechz = []; - } - if ( !isDefined( level.sndmechz[ type ] ) ) - { - level thread sndmechznetworkchoke( type ); - } - if ( level.sndmechz[ type ] > 1 ) - { - return 0; - } - level.sndmechz[ type ]++; - return 1; -} - -sndmechznetworkchoke( type ) -{ - while ( 1 ) - { - level.sndmechz[ type ] = 0; - wait_network_frame(); - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz_booster.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz_booster.gsc deleted file mode 100644 index a69f85f..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz_booster.gsc +++ /dev/null @@ -1,300 +0,0 @@ -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/animscripts/zm_shared; -#include maps/mp/zombies/_zm_ai_mechz; -#include maps/mp/zombies/_zm_ai_mechz_dev; -#include maps/mp/zm_tomb_tank; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/zombies/_zm_net; -#include maps/mp/_utility; -#include common_scripts/utility; -#include maps/mp/zombies/_zm_zonemgr; - -#using_animtree( "mechz_claw" ); - -mechz_in_range_for_jump() -{ - if ( !isDefined( self.jump_pos ) ) - { -/# - iprintln( "\nMZ Error: Trying to jump without valid jump_pos\n" ); -#/ - self.jump_requested = 0; - return 0; - } - dist = distancesquared( self.origin, self.jump_pos.origin ); - if ( dist <= 100 ) - { - return 1; - } - return 0; -} - -mechz_jump_think( spawn_pos ) -{ - self endon( "death" ); - self endon( "stop_jump_think" ); - self.closest_jump_point = spawn_pos; - self.goal_pos = self.origin; - self setgoalpos( self.goal_pos ); - self thread mechz_jump_stuck_watcher(); - while ( 1 ) - { - while ( isDefined( self.jump_requested ) && self.jump_requested ) - { - if ( !self mechz_should_jump() ) - { - self.jump_requested = 0; - self.jump_pos = undefined; - } - wait 1; - } - while ( !isDefined( self.ai_state ) || self.ai_state != "find_flesh" ) - { - wait 0,05; - } - while ( isDefined( self.not_interruptable ) && self.not_interruptable ) - { - wait 0,05; - } -/# - while ( isDefined( self.force_behavior ) && self.force_behavior ) - { - wait 0,05; -#/ - } - if ( self mechz_should_jump() ) - { - self.jump_requested = 1; - self.jump_pos = get_closest_mechz_spawn_pos( self.origin ); - if ( !isDefined( self.jump_pos ) ) - { - self.jump_requested = 0; - } - } - wait 1; - } -} - -watch_for_riot_shield_melee() -{ - self endon( "new_stuck_watcher" ); - self endon( "death" ); - while ( 1 ) - { - self waittill( "item_attack" ); -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\tMZ: Resetting fail count because of item attack\n" ); -#/ - } - self.fail_count = 0; - } -} - -watch_for_valid_melee() -{ - self endon( "new_stuck_watcher" ); - self endon( "death" ); - while ( 1 ) - { - self waittillmatch( "melee_anim" ); - return "end"; - if ( isDefined( self.favoriteenemy ) && distancesquared( self.origin, self.favoriteenemy.origin ) < 16384 ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\tMZ: Resetting fail count because of melee\n" ); -#/ - } - self.fail_count = 0; - } - } -} - -mechz_jump_stuck_watcher() -{ - self notify( "new_stuck_watcher" ); - self endon( "death" ); - self endon( "new_stuck_watcher" ); - self.fail_count = 0; - self thread watch_for_valid_melee(); - self thread watch_for_riot_shield_melee(); - while ( 1 ) - { - while ( !isDefined( self.goal_pos ) ) - { - wait 0,05; - } - while ( isDefined( self.not_interruptable ) && self.not_interruptable ) - { - wait 0,05; - } - while ( isDefined( self.ai_state ) && self.ai_state != "find_flesh" ) - { - wait 0,05; - } -/# - while ( isDefined( self.force_behavior ) && self.force_behavior ) - { - wait 0,05; -#/ - } - if ( !findpath( self.origin, self.goal_pos, self, 0, 0 ) ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\tMZ: Incrementing fail count\n" ); -#/ - } -/# - println( "Mechz could not path to goal_pos " + self.goal_pos ); -#/ - self.fail_count++; - } - else - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\tMZ: Resetting fail count because of good path\n" ); -#/ - } - self.fail_count = 0; - } - wait 1; - } -} - -mechz_should_jump() -{ -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\tMZ: Checking should jump\n" ); -#/ - } - if ( !isDefined( self.favoriteenemy ) ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\t\tMZ: Not doing jump because has no enemy\n" ); -#/ - } - return 0; - } - dist = distancesquared( self.origin, self.favoriteenemy.origin ); - if ( dist >= level.mechz_jump_dist_threshold ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\t\tMZ: Doing jump because target is too far\n" ); -#/ - } - return 1; - } - if ( self.fail_count >= level.mechz_failed_paths_to_jump ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\t\tMZ: Doing jump because has failed too many pathfind checks\n" ); -#/ - } - return 1; - } - return 0; -} - -mechz_do_jump( wait_for_stationary_tank ) -{ - self endon( "death" ); - self endon( "kill_jump" ); -/# - if ( getDvarInt( #"E7121222" ) > 0 ) - { - println( "\nMZ: Doing Jump-Teleport\n" ); -#/ - } -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\nMZ: Jump setting not interruptable\n" ); -#/ - } - self.not_interruptable = 1; - self setfreecameralockonallowed( 0 ); - self thread mechz_jump_vo(); - self animscripted( self.origin, self.angles, "zm_fly_out" ); - self maps/mp/animscripts/zm_shared::donotetracks( "jump_anim" ); - self ghost(); - self.mechz_hidden = 1; - if ( isDefined( self.m_claw ) ) - { - self.m_claw ghost(); - } - if ( self.fx_field ) - { - self.fx_field_old = self.fx_field; - } - self thread maps/mp/zombies/_zm_spawner::zombie_eye_glow_stop(); - self fx_cleanup(); - self animscripted( self.origin, self.angles, "zm_fly_hover" ); - wait level.mechz_jump_delay; - if ( isDefined( wait_for_stationary_tank ) && wait_for_stationary_tank ) - { - level.vh_tank ent_flag_waitopen( "tank_moving" ); - } - self notsolid(); - closest_jump_point = get_best_mechz_spawn_pos( 1 ); - if ( isDefined( closest_jump_point ) ) - { - self.closest_jump_point = closest_jump_point; - } - if ( !isDefined( self.closest_jump_point.angles ) ) - { - self.closest_jump_point.angles = ( 0, 0, 0 ); - } - self animscripted( self.closest_jump_point.origin, self.closest_jump_point.angles, "zm_fly_in" ); - self solid(); - self.mechz_hidden = 0; - self show(); - self.fx_field = self.fx_field_old; - self.fx_field_old = undefined; - self setclientfield( "mechz_fx", self.fx_field ); - self thread maps/mp/zombies/_zm_spawner::zombie_eye_glow(); - if ( isDefined( self.m_claw ) ) - { - self.m_claw show(); - } - self maps/mp/animscripts/zm_shared::donotetracks( "jump_anim" ); - self.not_interruptable = 0; - self setfreecameralockonallowed( 1 ); -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\nMZ: Jump clearing not interruptable\n" ); -#/ - } - mechz_jump_cleanup(); -} - -mechz_kill_jump_watcher() -{ - self endon( "jump_complete" ); - self waittill_either( "death", "kill_jump" ); - self mechz_jump_cleanup(); -} - -mechz_jump_cleanup() -{ - self.fx_field &= 128; - self setclientfield( "mechz_fx", self.fx_field ); - self stopanimscripted(); - self notify( "jump_complete" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz_claw.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz_claw.gsc deleted file mode 100644 index 38e09ea..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz_claw.gsc +++ /dev/null @@ -1,637 +0,0 @@ -#include maps/mp/zombies/_zm_weap_riotshield_tomb; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/animscripts/zm_shared; -#include maps/mp/zombies/_zm_ai_mechz_ft; -#include maps/mp/zombies/_zm_ai_mechz; -#include maps/mp/zombies/_zm_ai_mechz_dev; -#include maps/mp/zm_tomb_tank; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/zombies/_zm_net; -#include maps/mp/_utility; -#include common_scripts/utility; -#include maps/mp/zombies/_zm_zonemgr; - -#using_animtree( "mechz_claw" ); - -mechz_claw_detach() -{ - if ( isDefined( self.m_claw ) ) - { - self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0,2, 1 ); - if ( isDefined( self.m_claw.fx_ent ) ) - { - self.m_claw.fx_ent delete(); - } - self.m_claw unlink(); - self.m_claw physicslaunch( self.m_claw.origin, ( 0, 0, 0 ) ); - self.m_claw thread mechz_delayed_item_delete(); - self.m_claw = undefined; - } - if ( isDefined( self.m_claw_damage_trigger ) ) - { - self.m_claw_damage_trigger unlink(); - self.m_claw_damage_trigger delete(); - self.m_claw_damage_trigger = undefined; - } -} - -mechz_claw_release( bopenclaw ) -{ - self.explosive_dmg_taken_on_grab_start = undefined; - if ( isDefined( self.e_grabbed ) ) - { - if ( isplayer( self.e_grabbed ) ) - { - self.e_grabbed setclientfieldtoplayer( "mechz_grab", 0 ); - self.e_grabbed allowcrouch( 1 ); - self.e_grabbed allowprone( 1 ); - } - if ( !isDefined( self.e_grabbed._fall_down_anchor ) ) - { - trace_start = self.e_grabbed.origin + vectorScale( ( 0, 0, 0 ), 70 ); - trace_end = self.e_grabbed.origin + vectorScale( ( 0, 0, 0 ), 500 ); - drop_trace = playerphysicstrace( trace_start, trace_end ) + vectorScale( ( 0, 0, 0 ), 24 ); - self.e_grabbed unlink(); - self.e_grabbed setorigin( drop_trace ); - } - self.e_grabbed = undefined; - if ( isDefined( bopenclaw ) && bopenclaw ) - { - self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0,2, 1 ); - } - } -} - -mechz_claw_shot_pain_reaction() -{ - self mechz_interrupt(); - self animscripted( self.origin, self.angles, "zm_head_pain" ); - self maps/mp/animscripts/zm_shared::donotetracks( "head_pain_anim" ); -} - -ent_released_from_claw_grab_achievement( e_releaser, e_held_by_mechz ) -{ - if ( isDefined( e_releaser ) && isDefined( e_held_by_mechz ) && isplayer( e_releaser ) && isplayer( e_held_by_mechz ) ) - { - if ( e_releaser == e_held_by_mechz ) - { - e_releaser notify( "mechz_grab_released_self" ); - return; - } - else - { - e_releaser notify( "mechz_grab_released_friendly" ); - } - } -} - -mechz_claw_notetracks() -{ - self endon( "death" ); - self endon( "kill_claw" ); - self waittillmatch( "grapple_anim" ); - return "muzzleflash"; - self waittillmatch( "grapple_anim" ); - return "end"; -} - -mechz_claw_aim( target_pos ) -{ - self endon( "death" ); - self endon( "kill_claw" ); - self endon( "claw_complete" ); - aim_anim = mechz_get_aim_anim( "zm_grapple", target_pos ); - self animscripted( self.origin, self.angles, "zm_grapple_aim_start" ); - self thread mechz_claw_notetracks(); - self maps/mp/animscripts/zm_shared::donotetracks( "grapple_anim" ); - while ( flag( "mechz_launching_claw" ) ) - { - self animscripted( self.origin, self.angles, aim_anim ); - self maps/mp/animscripts/zm_shared::donotetracks( "grapple_anim" ); - self clearanim( %root, 0 ); - } -} - -player_can_be_grabbed() -{ - if ( self getstance() == "prone" && isDefined( self.is_dtp ) && self.is_dtp ) - { - return 0; - } - if ( !is_player_valid( self, 1, 1 ) ) - { - return 0; - } - return 1; -} - -mechz_claw_explosive_watcher() -{ - if ( !isDefined( self.explosive_dmg_taken ) ) - { - self.explosive_dmg_taken = 0; - } - self.explosive_dmg_taken_on_grab_start = self.explosive_dmg_taken; -} - -mechz_unlink_on_laststand( mechz ) -{ - self endon( "death" ); - self endon( "disconnect" ); - mechz endon( "death" ); - mechz endon( "claw_complete" ); - mechz endon( "kill_claw" ); - while ( 1 ) - { - if ( isDefined( self ) && self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - mechz thread mechz_claw_release(); - return; - } - wait 0,05; - } -} - -claw_grapple() -{ - self endon( "death" ); - self endon( "kill_claw" ); - if ( !isDefined( self.favoriteenemy ) ) - { - return; - } - v_claw_origin = self gettagorigin( "tag_claw" ); - v_claw_angles = vectorToAngle( self.origin - self.favoriteenemy.origin ); - self.fx_field |= 256; - self setclientfield( "mechz_fx", self.fx_field ); - self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0, 1 ); - self.m_claw unlink(); - self.m_claw.fx_ent = spawn( "script_model", self.m_claw gettagorigin( "tag_claw" ) ); - self.m_claw.fx_ent.angles = self.m_claw gettagangles( "tag_claw" ); - self.m_claw.fx_ent setmodel( "tag_origin" ); - self.m_claw.fx_ent linkto( self.m_claw, "tag_claw" ); - network_safe_play_fx_on_tag( "mech_claw", 1, level._effect[ "mechz_claw" ], self.m_claw.fx_ent, "tag_origin" ); - v_enemy_origin = self.favoriteenemy.origin + vectorScale( ( 0, 0, 0 ), 36 ); - n_dist = distance( v_claw_origin, v_enemy_origin ); - n_time = n_dist / 1200; - self playsound( "zmb_ai_mechz_claw_fire" ); - self.m_claw moveto( v_enemy_origin, n_time ); - self.m_claw thread check_for_claw_move_complete(); - self.m_claw playloopsound( "zmb_ai_mechz_claw_loop_out", 0,1 ); - self.e_grabbed = undefined; - a_players = getplayers(); - _a260 = a_players; - _k260 = getFirstArrayKey( _a260 ); - while ( isDefined( _k260 ) ) - { - player = _a260[ _k260 ]; - if ( !is_player_valid( player, 1, 1 ) || !player player_can_be_grabbed() ) - { - } - else - { - n_dist_sq = distancesquared( player.origin + vectorScale( ( 0, 0, 0 ), 36 ), self.m_claw.origin ); - if ( n_dist_sq < 2304 ) - { - if ( isDefined( player.hasriotshield ) && player.hasriotshield && player getcurrentweapon() == level.riotshield_name ) - { - shield_dmg = level.zombie_vars[ "riotshield_hit_points" ]; - player maps/mp/zombies/_zm_weap_riotshield_tomb::player_damage_shield( shield_dmg - 1, 1 ); - wait 1; - player maps/mp/zombies/_zm_weap_riotshield_tomb::player_damage_shield( 1, 1 ); - } - else - { - self.e_grabbed = player; - self.e_grabbed setclientfieldtoplayer( "mechz_grab", 1 ); - self.e_grabbed playerlinktodelta( self.m_claw, "tag_attach_player" ); - self.e_grabbed setplayerangles( vectorToAngle( self.origin - self.e_grabbed.origin ) ); - self.e_grabbed playsound( "zmb_ai_mechz_claw_grab" ); - self.e_grabbed setstance( "stand" ); - self.e_grabbed allowcrouch( 0 ); - self.e_grabbed allowprone( 0 ); - self.e_grabbed thread mechz_grabbed_played_vo( self ); - if ( !flag( "mechz_claw_move_complete" ) ) - { - self.m_claw moveto( self.m_claw.origin, 0,05 ); - } - } - break; - } - } - else - { - _k260 = getNextArrayKey( _a260, _k260 ); - } - } - wait 0,05; - if ( !flag( "mechz_claw_move_complete" ) && !isDefined( self.e_grabbed ) ) - { - a_ai_zombies = get_round_enemy_array(); - _a306 = a_ai_zombies; - _k306 = getFirstArrayKey( _a306 ); - while ( isDefined( _k306 ) ) - { - ai_zombie = _a306[ _k306 ]; - if ( isalive( ai_zombie ) && isDefined( ai_zombie.is_giant_robot ) || ai_zombie.is_giant_robot && isDefined( ai_zombie.is_mechz ) && ai_zombie.is_mechz ) - { - } - else - { - n_dist_sq = distancesquared( ai_zombie.origin + vectorScale( ( 0, 0, 0 ), 36 ), self.m_claw.origin ); - if ( n_dist_sq < 2304 ) - { - self.e_grabbed = ai_zombie; - self.e_grabbed linkto( self.m_claw, "tag_attach_player", ( 0, 0, 0 ) ); - self.e_grabbed.mechz_grabbed_by = self; - self.e_grabbed animcustom( ::zombie_grabbed_by_mechz_claw ); - break; - } - } - else - { - _k306 = getNextArrayKey( _a306, _k306 ); - } - } - } - self.m_claw clearanim( %root, 0,2 ); - self.m_claw setanim( %ai_zombie_mech_grapple_arm_closed_idle, 1, 0,2, 1 ); - wait 0,5; - if ( isDefined( self.e_grabbed ) ) - { - n_time = n_dist / 200; - } - else - { - n_time = n_dist / 1000; - } - self mechz_claw_explosive_watcher(); - v_claw_origin = self gettagorigin( "tag_claw" ); - v_claw_angles = self gettagangles( "tag_claw" ); - self.m_claw moveto( v_claw_origin, max( 0,05, n_time ) ); - self.m_claw playloopsound( "zmb_ai_mechz_claw_loop_in", 0,1 ); - self.m_claw waittill( "movedone" ); - v_claw_origin = self gettagorigin( "tag_claw" ); - v_claw_angles = self gettagangles( "tag_claw" ); - self.m_claw playsound( "zmb_ai_mechz_claw_back" ); - self.m_claw stoploopsound( 1 ); - if ( maps/mp/zombies/_zm_ai_mechz::sndmechzisnetworksafe( "angry" ) ) - { - self playsound( "zmb_ai_mechz_vox_angry" ); - } - self.m_claw.origin = v_claw_origin; - self.m_claw.angles = v_claw_angles; - self.m_claw clearanim( %root, 0,2 ); - self.m_claw linkto( self, "tag_claw", ( 0, 0, 0 ) ); - self.m_claw setanim( %ai_zombie_mech_grapple_arm_closed_idle, 1, 0,2, 1 ); - self.m_claw.fx_ent delete(); - self.m_claw.fx_ent = undefined; - self.fx_field &= 256; - self setclientfield( "mechz_fx", self.fx_field ); - flag_clear( "mechz_launching_claw" ); - if ( isDefined( self.e_grabbed ) ) - { - if ( !isDefined( self.flamethrower_trigger ) ) - { - self mechz_flamethrower_initial_setup(); - } - if ( isplayer( self.e_grabbed ) && is_player_valid( self.e_grabbed ) ) - { - self.e_grabbed thread mechz_unlink_on_laststand( self ); - } - else - { - if ( isai( self.e_grabbed ) ) - { - self.e_grabbed thread mechz_zombie_flamethrower_gib( self ); - } - } - self thread check_for_claw_damaged( self.e_grabbed ); - self animscripted( self.origin, self.angles, "zm_flamethrower_claw_victim" ); - self maps/mp/animscripts/zm_shared::donotetracks( "flamethrower_anim" ); - } - flag_clear( "mechz_claw_move_complete" ); -} - -zombie_grabbed_by_mechz_claw() -{ - self endon( "death" ); - self setanimstatefromasd( "zm_grabbed_by_mech" ); - self.mechz_grabbed_by waittill_any( "death", "claw_complete", "kill_claw" ); -} - -check_for_claw_damaged( player ) -{ - player endon( "death" ); - player endon( "disconnect" ); - self endon( "death" ); - self endon( "claw_complete" ); - self endon( "kill_claw" ); - self thread claw_damaged_mechz_endon_watcher( player ); - player thread claw_damaged_player_endon_watcher( self ); - self.m_claw setcandamage( 1 ); - while ( isDefined( self.e_grabbed ) ) - { - self.m_claw waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); - if ( is_player_valid( inflictor ) ) - { - self dodamage( 1, inflictor.origin, inflictor, inflictor, "left_hand", type ); - self.m_claw setcandamage( 0 ); - self notify( "claw_damaged" ); - return; - } - else - { - } - } -} - -claw_damaged_mechz_endon_watcher( player ) -{ - self endon( "claw_damaged" ); - player endon( "death" ); - player endon( "disconnect" ); - self waittill_any( "death", "claw_complete", "kill_claw" ); - if ( isDefined( self ) && isDefined( self.m_claw ) ) - { - self.m_claw setcandamage( 0 ); - } -} - -claw_damaged_player_endon_watcher( mechz ) -{ - mechz endon( "claw_damaged" ); - mechz endon( "death" ); - mechz endon( "claw_complete" ); - mechz endon( "kill_claw" ); - self waittill_any( "death", "disconnect" ); - if ( isDefined( mechz ) && isDefined( mechz.m_claw ) ) - { - mechz.m_claw setcandamage( 0 ); - } -} - -check_for_players_mid_grapple() -{ - self endon( "movedone" ); - while ( 1 ) - { - a_players = getplayers(); - _a471 = a_players; - _k471 = getFirstArrayKey( _a471 ); - while ( isDefined( _k471 ) ) - { - player = _a471[ _k471 ]; - if ( !is_player_valid( player, 1, 1 ) || !player player_can_be_grabbed() ) - { - } - else - { - n_dist_sq = distancesquared( player.origin + vectorScale( ( 0, 0, 0 ), 36 ), self.origin ); - if ( n_dist_sq < 2304 ) - { - self moveto( self.origin, 0,05 ); - self notify( "movedone" ); - return; - } - } - _k471 = getNextArrayKey( _a471, _k471 ); - } - wait 0,05; - } -} - -check_for_claw_move_complete() -{ - self waittill( "movedone" ); - wait 0,05; - flag_set( "mechz_claw_move_complete" ); -} - -mechz_zombie_flamethrower_gib( mechz ) -{ - mechz waittillmatch( "flamethrower_anim" ); - return "start_ft"; - if ( isalive( self ) ) - { - self thread zombie_gib_all(); - self dodamage( self.health, self.origin, self ); - } -} - -should_do_claw_attack() -{ -/# - assert( isDefined( self.favoriteenemy ) ); -#/ -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\tMZ: Checking should claw\n" ); -#/ - } - if ( isDefined( self.has_powerplant ) && !self.has_powerplant ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\t\tMZ: Not doing claw because powerplant has been destroyed\n" ); -#/ - } - return 0; - } - if ( isDefined( self.disable_complex_behaviors ) && self.disable_complex_behaviors ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\t\tMZ: Not doing claw because doing force aggro\n" ); -#/ - } - return 0; - } - if ( isDefined( self.not_interruptable ) && self.not_interruptable ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\t\tMZ: Not doing claw because another behavior has set not_interruptable\n" ); -#/ - } - return 0; - } - if ( isDefined( self.last_claw_time ) && ( getTime() - self.last_claw_time ) < level.mechz_claw_cooldown_time ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\t\tMZ: Not doing claw because claw is on cooldown\n" ); -#/ - } - return 0; - } - if ( !self mechz_check_in_arc() ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\t\tMZ: Not doing claw because target is not in front arc\n" ); -#/ - } - return 0; - } - n_dist_sq = distancesquared( self.origin, self.favoriteenemy.origin ); - if ( n_dist_sq < 90000 || n_dist_sq > 1000000 ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\t\tMZ: Not doing claw because target is not in range\n" ); -#/ - } - return 0; - } - if ( !self.favoriteenemy player_can_be_grabbed() ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\t\tMZ: Not doing claw because player is prone or dtp\n" ); -#/ - } - return 0; - } - curr_zone = get_zone_from_position( self.origin + vectorScale( ( 0, 0, 0 ), 36 ) ); - if ( isDefined( curr_zone ) && curr_zone == "ug_bottom_zone" ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\t\tMZ: Not doing claw because mech is in main chamber\n" ); -#/ - } - return 0; - } - clip_mask = level.physicstracemaskclip | level.physicstracemaskphysics; - claw_origin = self.origin + vectorScale( ( 0, 0, 0 ), 65 ); - trace = physicstrace( claw_origin, self.favoriteenemy.origin + vectorScale( ( 0, 0, 0 ), 30 ), ( -15, -15, -20 ), ( 15, 15, 40 ), self, clip_mask ); - if ( trace[ "fraction" ] != 1 ) - { - if ( isDefined( trace[ "entity" ] ) ) - { - b_cansee = trace[ "entity" ] == self.favoriteenemy; - } - } - if ( !b_cansee ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\t\tMZ: Not doing claw because capsule trace failed\n" ); -#/ - } - return 0; - } - return 1; -} - -mechz_do_claw_grab() -{ - self endon( "death" ); - self endon( "kill_claw" ); -/# - if ( getDvarInt( #"E7121222" ) > 0 ) - { - println( "\n\tMZ: Doing Claw Attack\n" ); -#/ - } -/# - assert( isDefined( self.favoriteenemy ) ); -#/ - self thread mechz_kill_claw_watcher(); - self.last_claw_time = getTime(); - target_pos = self.favoriteenemy.origin + vectorScale( ( 0, 0, 0 ), 30 ); - self thread mechz_stop_basic_find_flesh(); - self.ai_state = "grapple_attempt"; - flag_set( "mechz_launching_claw" ); - self thread mechz_claw_aim( target_pos ); - self orientmode( "face enemy" ); - self waittillmatch( "grapple_anim" ); - return "muzzleflash"; - self claw_grapple(); - self mechz_claw_cleanup(); -} - -mechz_kill_claw_watcher() -{ - self endon( "claw_complete" ); - self waittill_either( "death", "kill_claw" ); - self mechz_claw_cleanup(); -} - -mechz_claw_cleanup() -{ - self.fx_field &= 256; - self.fx_field &= 64; - self setclientfield( "mechz_fx", self.fx_field ); - self mechz_claw_release(); - if ( isDefined( self.m_claw ) ) - { - self.m_claw clearanim( %root, 0,2 ); - if ( isDefined( self.m_claw.fx_ent ) ) - { - self.m_claw.fx_ent delete(); - self.m_claw.fx_ent = undefined; - } - if ( isDefined( self.has_powerplant ) && !self.has_powerplant ) - { - self mechz_claw_detach(); - flag_clear( "mechz_launching_claw" ); - } - else - { - if ( !self.m_claw islinkedto( self ) ) - { - v_claw_origin = self gettagorigin( "tag_claw" ); - v_claw_angles = self gettagangles( "tag_claw" ); - n_dist = distance( self.m_claw.origin, v_claw_origin ); - n_time = n_dist / 1000; - self.m_claw moveto( v_claw_origin, max( 0,05, n_time ) ); - self.m_claw playloopsound( "zmb_ai_mechz_claw_loop_in", 0,1 ); - self.m_claw waittill( "movedone" ); - v_claw_origin = self gettagorigin( "tag_claw" ); - v_claw_angles = self gettagangles( "tag_claw" ); - self.m_claw playsound( "zmb_ai_mechz_claw_back" ); - self.m_claw stoploopsound( 1 ); - self.m_claw.origin = v_claw_origin; - self.m_claw.angles = v_claw_angles; - self.m_claw clearanim( %root, 0,2 ); - self.m_claw linkto( self, "tag_claw", ( 0, 0, 0 ) ); - } - self.m_claw setanim( %ai_zombie_mech_grapple_arm_closed_idle, 1, 0,2, 1 ); - } - } - self notify( "claw_complete" ); -} - -mechz_claw_damage_trigger_thread() -{ - self endon( "death" ); - self.m_claw_damage_trigger endon( "death" ); - while ( 1 ) - { - self.m_claw_damage_trigger waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); - while ( self.m_claw islinkedto( self ) ) - { - continue; - } - if ( is_player_valid( inflictor ) ) - { - self dodamage( 1, inflictor.origin, inflictor, inflictor, "left_hand", type ); - self.m_claw setcandamage( 0 ); - self notify( "claw_damaged" ); - } - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz_dev.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz_dev.gsc deleted file mode 100644 index fc5e842..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz_dev.gsc +++ /dev/null @@ -1,505 +0,0 @@ -#include maps/mp/animscripts/zm_shared; -#include maps/mp/zombies/_zm_ai_mechz; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -#using_animtree( "mechz_claw" ); - -mechz_debug() -{ -/# - while ( 1 ) - { - debug_level = getDvarInt( #"E7121222" ); - while ( isDefined( debug_level ) && debug_level ) - { - while ( debug_level == 1 ) - { - mechz_array = getentarray( "mechz_zombie_ai" ); - i = 0; - while ( i < mechz_array.size ) - { - if ( isDefined( mechz_array[ i ].goal_pos ) ) - { - debugstar( mechz_array[ i ].goal_pos, ( 0, 0, 1 ), 1 ); - line( mechz_array[ i ].goal_pos, mechz_array[ i ].origin, ( 0, 0, 1 ), 0, 1 ); - } - i++; - } - } - } -#/ - } -} - -setup_devgui() -{ -/# - setdvar( "spawn_Mechz", "off" ); - setdvar( "force_mechz_jump", "off" ); - setdvar( "test_mechz_tank", "off" ); - setdvar( "test_mechz_robot", "off" ); - setdvar( "reset_mechz_thinking", "off" ); - setdvar( "test_mechz_sprint", "off" ); - setdvar( "mechz_force_behavior", "none" ); - setdvarint( "mechz_behavior_orient", 0 ); - setdvarint( "mechz_behavior_dist", 300 ); - adddebugcommand( "devgui_cmd "Zombies/Zombie Spawning:2/Spawn Zombie:1/Mech Zombie:1" "spawn_Mechz on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Jump In:1" "mechz_force_behavior jump_in"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Jump Out:2" "mechz_force_behavior jump_out"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Flamethrower:3" "mechz_force_behavior flamethrower"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Damage Armor:4" "mechz_force_behavior damage_armor"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Damage Faceplate:5" "mechz_force_behavior damage_faceplate"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Claw Attack:5" "mechz_force_behavior claw_attack"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Melee:6" "mechz_force_behavior melee"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Angles:7/zero degrees:1" "mechz_behavior_orient 0"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Angles:7/forty-five degrees:2" "mechz_behavior_orient 45"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Angles:7/ninety degrees:3" "mechz_behavior_orient 90"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Angles:7/one thirty five degrees:4" "mechz_behavior_orient 135"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Angles:7/one eighty degrees:5" "mechz_behavior_orient 180"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Angles:7/two twenty five degrees:6" "mechz_behavior_orient 225"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Angles:7/two seventy degrees:7" "mechz_behavior_orient 270"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Angles:7/three fifteen degrees:8" "mechz_behavior_orient 315"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Distance:8/one hundred:1" "mechz_behavior_dist 100"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Distance:8/two hundred:2" "mechz_behavior_dist 200"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Distance:8/three hundred:3" "mechz_behavior_dist 300"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Distance:8/four hundred:4" "mechz_behavior_dist 400"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Distance:8/five hundred:5" "mechz_behavior_dist 500"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Test Tank Knockdown:2" "test_mechz_tank on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Test Robot Knockdown:3" "test_mechz_robot on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Test Sprint:4" "test_mechz_sprint on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Reset Mech:5" "reset_mechz_thinking on"\n" ); - level thread watch_devgui_mechz(); -#/ -} - -watch_devgui_mechz() -{ -/# - while ( 1 ) - { - if ( getDvar( "spawn_Mechz" ) == "on" ) - { - mechz_health_increases(); - level.mechz_left_to_spawn = 1; - if ( getDvarInt( "zombie_cheat" ) >= 2 ) - { - level.round_number++; - } - level notify( "spawn_mechz" ); - setdvar( "spawn_Mechz", "off" ); - level.mechz_last_spawn_round = 0; - } - if ( getDvar( "mechz_force_behavior" ) != "none" ) - { - behavior = getDvar( "mechz_force_behavior" ); - zombies = getaiarray( "axis" ); - i = 0; - while ( i < zombies.size ) - { - if ( isDefined( zombies[ i ].is_mechz ) && zombies[ i ].is_mechz ) - { - zombies[ i ] thread mechz_force_behavior( behavior ); - } - i++; - } - setdvar( "mechz_force_behavior", "none" ); - } - if ( getDvar( "test_mechz_tank" ) == "on" ) - { - setdvar( "test_mechz_tank", "off" ); - mechz = undefined; - zombies = getaiarray( "axis" ); - i = 0; - while ( i < zombies.size ) - { - if ( isDefined( zombies[ i ].is_mechz ) && zombies[ i ].is_mechz ) - { - mechz = zombies[ i ]; - } - i++; - } - while ( !isDefined( mechz ) ) - { - continue; - } - mechz.not_interruptable = 1; - mechz mechz_stop_basic_find_flesh(); - mechz.ai_state = "devgui"; - mechz.goal_pos = ( 446, -4318, 200 ); - mechz setgoalpos( mechz.goal_pos ); - } - if ( getDvar( "test_mechz_robot" ) == "on" ) - { - setdvar( "test_mechz_robot", "off" ); - mechz = undefined; - zombies = getaiarray( "axis" ); - i = 0; - while ( i < zombies.size ) - { - if ( isDefined( zombies[ i ].is_mechz ) && zombies[ i ].is_mechz ) - { - mechz = zombies[ i ]; - } - i++; - } - while ( !isDefined( mechz ) ) - { - continue; - } - mechz.not_interruptable = 1; - mechz mechz_stop_basic_find_flesh(); - mechz.ai_state = "devgui"; - mechz.goal_pos = ( 1657, -336, 92 ); - mechz setgoalpos( mechz.goal_pos ); - } - while ( getDvar( "test_mechz_sprint" ) == "on" ) - { - setdvar( "test_mechz_sprint", "off" ); - zombies = getaiarray( "axis" ); - i = 0; - while ( i < zombies.size ) - { - if ( isDefined( zombies[ i ].is_mechz ) && zombies[ i ].is_mechz ) - { - zombies[ i ].force_sprint = 1; - } - i++; - } - } - while ( getDvar( "reset_mechz_thinking" ) == "on" ) - { - setdvar( "reset_mechz_thinking", "off" ); - zombies = getaiarray( "axis" ); - i = 0; - while ( i < zombies.size ) - { - if ( isDefined( zombies[ i ].is_mechz ) && zombies[ i ].is_mechz ) - { - zombies[ i ].not_interruptable = 0; - zombies[ i ].force_sprint = 0; - } - i++; - } - } - wait 0,1; -#/ - } -} - -mechz_force_behavior( behavior ) -{ -/# - self notify( "kill_force_behavior" ); - self thread mechz_stop_basic_find_flesh(); - self.ignoreall = 1; - self.force_behavior = 1; - if ( behavior == "jump_in" ) - { - self thread mechz_force_jump_in(); - } - if ( behavior == "jump_out" ) - { - self thread mechz_force_jump_out(); - } - if ( behavior == "flamethrower" ) - { - self thread mechz_force_flamethrower(); - } - if ( behavior == "claw_attack" ) - { - self thread mechz_force_claw_attack(); - } - if ( behavior == "damage_armor" ) - { - self thread mechz_force_damage_armor(); - } - if ( behavior == "damage_faceplate" ) - { - self thread mechz_force_damage_faceplate(); - } - if ( behavior == "melee" ) - { - self thread mechz_force_melee(); - } - if ( behavior == "none" ) - { - self.ignoreall = 0; - self.force_behavior = 0; - self notify( "kill_force_behavior" ); -#/ - } -} - -get_behavior_orient() -{ -/# - behavior_orient = getDvarInt( #"2F660A7B" ); - return level.players[ 0 ].angles + vectorScale( ( 0, 0, 1 ), 180 ) + ( 0, behavior_orient, 0 ); -#/ -} - -setup_force_behavior() -{ -/# - if ( !isDefined( level.test_align_struct ) ) - { - player = get_players()[ 0 ]; - pos = player.origin; - offset = anglesToForward( player.angles ); - offset = vectornormalize( offset ); - level.test_align_struct = spawn( "script_model", pos + ( 300 * offset ) ); - level.test_align_struct setmodel( "tag_origin" ); - level.test_align_struct.angles = player.angles + vectorScale( ( 0, 0, 1 ), 180 ); - level.test_align_struct thread align_test_struct(); - level.test_align_struct.angles = player.angles + vectorScale( ( 0, 0, 1 ), 180 ); - } - self linkto( level.test_align_struct, "tag_origin", ( 0, 0, 1 ), ( 0, 0, 1 ) ); - self.fx_field &= 64; - self.fx_field &= 128; - self.fx_field &= 256; -#/ -} - -align_test_struct() -{ -/# - while ( 1 ) - { - pos = level.players[ 0 ].origin; - offset = anglesToForward( level.players[ 0 ].angles ); - offset = vectornormalize( offset ); - dist = getDvarInt( #"6DCD047E" ); - level.test_align_struct.origin = pos + ( dist * offset ); - level.test_align_struct.angles = get_behavior_orient(); - wait 0,05; -#/ - } -} - -scripted_behavior( anim_scripted_name, notify_name ) -{ -/# - self animscripted( level.test_align_struct.origin, level.test_align_struct.angles, anim_scripted_name ); - self maps/mp/animscripts/zm_shared::donotetracks( notify_name ); -#/ -} - -mechz_force_jump_in() -{ -/# - self endon( "kill_force_behavior" ); - self setup_force_behavior(); - while ( 1 ) - { - self animscripted( self.origin, self.angles, "zm_idle" ); - wait 0,2; - self scripted_behavior( "zm_spawn", "jump_anim" ); -#/ - } -} - -mechz_force_jump_out() -{ -/# - self endon( "kill_force_behavior" ); - self setup_force_behavior(); - while ( 1 ) - { - self animscripted( self.origin, self.angles, "zm_idle" ); - wait 0,2; - self scripted_behavior( "zm_fly_out", "jump_anim" ); - self ghost(); - self animscripted( self.origin, self.angles, "zm_fly_hover" ); - wait level.mechz_jump_delay; - self show(); - self scripted_behavior( "zm_fly_in", "jump_anim" ); -#/ - } -} - -mechz_force_flamethrower() -{ -/# - self endon( "kill_force_behavior" ); - self setup_force_behavior(); - curr_aim_anim = 1; - curr_timer = 0; - self animscripted( self.origin, self.angles, "zm_idle" ); - wait 0,2; - self scripted_behavior( "zm_flamethrower_aim_start", "flamethrower_anim" ); - while ( 1 ) - { - if ( curr_timer > 3 ) - { - curr_aim_anim++; - curr_timer = 0; - if ( curr_aim_anim < 10 ) - { - iprintln( "Testing aim_" + curr_aim_anim ); - } - } - if ( curr_aim_anim >= 10 ) - { - iprintln( "Testing flamethrower sweep" ); - curr_aim_anim = 1; - self scripted_behavior( "zm_flamethrower_sweep", "flamethrower_anim" ); - self.fx_field |= 64; - self setclientfield( "mechz_fx", self.fx_field ); - continue; - } - else - { - length = self getanimlengthfromasd( "zm_flamethrower_aim_" + curr_aim_anim, 0 ); - self clearanim( %root, 0 ); - self scripted_behavior( "zm_flamethrower_aim_" + curr_aim_anim, "flamethrower_anim" ); - curr_timer += length; - } -#/ - } -} - -fake_launch_claw() -{ -/# - self.launching_claw = 1; - v_claw_origin = self gettagorigin( "tag_claw" ); - v_claw_angles = vectorToAngle( self.origin - level.players[ 0 ].origin ); - self.fx_field |= 256; - self setclientfield( "mechz_fx", self.fx_field ); - self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0, 1 ); - self.m_claw unlink(); - self.m_claw.fx_ent = spawn( "script_model", self.m_claw gettagorigin( "tag_claw" ) ); - self.m_claw.fx_ent.angles = self.m_claw gettagangles( "tag_claw" ); - self.m_claw.fx_ent setmodel( "tag_origin" ); - self.m_claw.fx_ent linkto( self.m_claw, "tag_claw" ); - network_safe_play_fx_on_tag( "mech_claw", 1, level._effect[ "mechz_claw" ], self.m_claw.fx_ent, "tag_origin" ); - self.m_claw clearanim( %root, 0,2 ); - self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0,2, 1 ); - offset = anglesToForward( self.angles ); - offset = vectornormalize( offset ); - target_pos = self.origin + ( offset * 500 ) + vectorScale( ( 0, 0, 1 ), 36 ); - n_time = 0,08333334; - self.m_claw moveto( target_pos, n_time ); - self.m_claw waittill( "movedone" ); - self.m_claw clearanim( %root, 0,2 ); - self.m_claw setanim( %ai_zombie_mech_grapple_arm_closed_idle, 1, 0,2, 1 ); - wait 0,5; - self.m_claw moveto( v_claw_origin, 0,5 ); - self.m_claw waittill( "movedone" ); - self.m_claw.fx_ent delete(); - self.fx_field &= 256; - self setclientfield( "mechz_fx", self.fx_field ); - v_claw_origin = self gettagorigin( "tag_claw" ); - v_claw_angles = self gettagangles( "tag_claw" ); - self.m_claw.origin = v_claw_origin; - self.m_claw.angles = v_claw_angles; - self.m_claw linkto( self, "tag_claw" ); - self.launching_claw = 0; -#/ -} - -mechz_force_claw_attack() -{ -/# - self endon( "kill_force_behavior" ); - self setup_force_behavior(); - while ( 1 ) - { - self animscripted( self.origin, self.angles, "zm_idle" ); - wait 0,2; - self scripted_behavior( "zm_grapple_aim_start", "grapple_anim" ); - self thread fake_launch_claw(); - while ( isDefined( self.launching_claw ) && self.launching_claw ) - { - self clearanim( %root, 0 ); - wait 0,05; - self scripted_behavior( "zm_grapple_aim_5", "grapple_anim" ); - } - self scripted_behavior( "zm_flamethrower_claw_victim", "flamethrower_anim" ); -#/ - } -} - -mechz_force_damage_armor() -{ -/# - self endon( "kill_force_behavior" ); - self setup_force_behavior(); - if ( !isDefined( self.next_armor_piece ) ) - { - self.next_armor_piece = 0; - } - self thread scripted_behavior( "zm_idle", "idle_anim" ); - if ( self.next_armor_piece == self.armor_state.size ) - { - self.next_armor_piece = 0; - i = 0; - while ( i < self.armor_state.size ) - { - self.fx_field &= 1 << self.armor_state[ i ].index; - if ( isDefined( self.armor_state[ i ].model ) ) - { - self attach( self.armor_state[ i ].model, self.armor_state[ i ].tag ); - } - i++; - } - } - else self.fx_field |= 1 << self.armor_state[ self.next_armor_piece ].index; - if ( isDefined( self.armor_state[ self.next_armor_piece ].model ) ) - { - self detach( self.armor_state[ self.next_armor_piece ].model, self.armor_state[ self.next_armor_piece ].tag ); - } - self.next_armor_piece++; - self setclientfield( "mechz_fx", self.fx_field ); - while ( 1 ) - { - self scripted_behavior( "zm_idle", "idle_anim" ); -#/ - } -} - -mechz_force_damage_faceplate() -{ -/# - self endon( "kill_force_behavior" ); - self setup_force_behavior(); - self thread scripted_behavior( "zm_idle", "idle_anim" ); - if ( isDefined( self.has_helmet ) && self.has_helmet ) - { - self.has_helmet = 0; - self detach( "c_zom_mech_faceplate", "J_Helmet" ); - self.fx_field |= 1024; - self.fx_field &= 2048; - } - else - { - self.has_helmet = 1; - self.fx_field &= 1024; - self.fx_field |= 2048; - self attach( "c_zom_mech_faceplate", "J_Helmet" ); - } - self setclientfield( "mechz_fx", self.fx_field ); - while ( 1 ) - { - self scripted_behavior( "zm_idle", "idle_anim" ); -#/ - } -} - -mechz_force_melee() -{ -/# - self endon( "kill_force_behavior" ); - self setup_force_behavior(); - while ( 1 ) - { - self animscripted( self.origin, self.angles, "zm_idle" ); - wait 0,2; - self scripted_behavior( "zm_melee_stand", "melee_anim" ); -#/ - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz_ffotd.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz_ffotd.gsc deleted file mode 100644 index 8970ad3..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz_ffotd.gsc +++ /dev/null @@ -1,33 +0,0 @@ -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -mechz_init_start() -{ -} - -mechz_init_end() -{ -} - -spawn_start() -{ - self.not_interruptable = 1; -} - -spawn_end() -{ - self.not_interruptable = 0; -} - -mechz_round_tracker_start() -{ -} - -mechz_round_tracker_loop_start() -{ -} - -mechz_round_tracker_loop_end() -{ -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz_ft.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz_ft.gsc deleted file mode 100644 index 5910bb0..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz_ft.gsc +++ /dev/null @@ -1,589 +0,0 @@ -#include maps/mp/_visionset_mgr; -#include maps/mp/animscripts/zm_shared; -#include maps/mp/zombies/_zm_ai_mechz; -#include maps/mp/zombies/_zm_ai_mechz_dev; -#include maps/mp/zm_tomb_tank; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/zombies/_zm_net; -#include maps/mp/_utility; -#include common_scripts/utility; -#include maps/mp/zombies/_zm_zonemgr; - -#using_animtree( "mechz_claw" ); - -init_flamethrower_triggers() -{ - flag_wait( "initial_players_connected" ); - level.flamethrower_trigger_array = getentarray( "flamethrower_trigger", "script_noteworthy" ); -/# - if ( isDefined( level.flamethrower_trigger_array ) ) - { - assert( level.flamethrower_trigger_array.size >= 4 ); - } -#/ - i = 0; - while ( i < level.flamethrower_trigger_array.size ) - { - level.flamethrower_trigger_array[ i ] enablelinkto(); - i++; - } -} - -mechz_flamethrower_initial_setup() -{ - self endon( "death" ); - if ( isDefined( self.flamethrower_trigger ) ) - { - self release_flamethrower_trigger(); - } - self.flamethrower_trigger = get_flamethrower_trigger(); - if ( !isDefined( self.flamethrower_trigger ) ) - { -/# - println( "Error: No free flamethrower triggers! Make sure you haven't spawned more than 4 mech zombies" ); -#/ - return; - } - self.flamethrower_trigger.origin = self gettagorigin( "tag_flamethrower_FX" ); - self.flamethrower_trigger.angles = self gettagangles( "tag_flamethrower_FX" ); - self.flamethrower_trigger linkto( self, "tag_flamethrower_FX" ); - self thread mechz_watch_for_flamethrower_damage(); -} - -get_flamethrower_trigger() -{ - i = 0; - while ( i < level.flamethrower_trigger_array.size ) - { - if ( isDefined( level.flamethrower_trigger_array[ i ].in_use ) && !level.flamethrower_trigger_array[ i ].in_use ) - { - level.flamethrower_trigger_array[ i ].in_use = 1; - level.flamethrower_trigger_array[ i ].original_position = level.flamethrower_trigger_array[ i ].origin; - return level.flamethrower_trigger_array[ i ]; - } - i++; - } - return undefined; -} - -release_flamethrower_trigger() -{ - if ( !isDefined( self.flamethrower_trigger ) ) - { - return; - } - self.flamethrower_trigger.in_use = 0; - self.flamethrower_trigger unlink(); - self.flamethrower_trigger.origin = self.flamethrower_trigger.original_position; - self.flamethrower_linked = 0; - self.flamethrower_trigger = undefined; -} - -mechz_flamethrower_dist_watcher() -{ - self endon( "kill_ft" ); - wait 0,5; - while ( 1 ) - { - if ( isDefined( self.favoriteenemy ) || !is_player_valid( self.favoriteenemy, 1, 1 ) && distancesquared( self.origin, self.favoriteenemy.origin ) > 50000 ) - { - self notify( "stop_ft" ); - return; - } - wait 0,05; - } -} - -mechz_flamethrower_arc_watcher() -{ - self endon( "death" ); - self endon( "kill_ft" ); - self endon( "stop_ft" ); - aim_anim = undefined; - while ( 1 ) - { - old_anim = aim_anim; - aim_anim = mechz_get_aim_anim( "zm_flamethrower", self.favoriteenemy.origin, 26 ); - self.curr_aim_anim = aim_anim; - if ( !isDefined( aim_anim ) ) - { - self notify( "stop_ft" ); - return; - } - if ( !isDefined( old_anim ) || old_anim != aim_anim ) - { - self notify( "arc_change" ); - } - wait 0,05; - } -} - -mechz_play_flamethrower_aim() -{ - self endon( "death" ); - self endon( "kill_ft" ); - self endon( "stop_ft" ); - self endon( "arc_change" ); - if ( isDefined( self.curr_aim_anim ) ) - { - self stopanimscripted(); - self animscripted( self.origin, self.angles, self.curr_aim_anim ); - self maps/mp/animscripts/zm_shared::donotetracks( "flamethrower_anim" ); - } - else - { - wait 0,05; - } -} - -mechz_flamethrower_aim() -{ - self endon( "death" ); - self endon( "kill_ft" ); - self endon( "stop_ft" ); - self waittillmatch( "flamethrower_anim" ); - return "end"; - self thread mechz_flamethrower_dist_watcher(); - self thread mechz_flamethrower_arc_watcher(); - aim_anim = undefined; - while ( 1 ) - { - self mechz_play_flamethrower_aim(); - } -} - -mechz_flamethrower_tank_sweep() -{ - self endon( "death" ); - self endon( "kill_ft" ); - self endon( "stop_ft" ); - while ( 1 ) - { - self stopanimscripted(); - self.angles = vectorToAngle( level.vh_tank.origin - self.origin ); - self animscripted( self.origin, self.angles, "zm_flamethrower_sweep_up" ); - self maps/mp/animscripts/zm_shared::donotetracks( "flamethrower_anim" ); - if ( level.vh_tank ent_flag( "tank_moving" ) ) - { - break; - } - else a_players_on_tank = get_players_on_tank( 1 ); - if ( !a_players_on_tank.size ) - { - break; - } - else - { - } - } - self notify( "stop_ft" ); -} - -mechz_stop_firing_watcher() -{ - self endon( "death" ); - self endon( "kill_ft" ); - self endon( "flamethrower_complete" ); - self waittillmatch( "flamethrower_anim" ); - return "stop_ft"; - self.firing = 0; -} - -mechz_watch_for_flamethrower_damage() -{ - self endon( "death" ); - while ( 1 ) - { - self waittillmatch( "flamethrower_anim" ); - return "start_ft"; - self.firing = 1; - self thread mechz_stop_firing_watcher(); - while ( isDefined( self.firing ) && self.firing ) - { - if ( isDefined( self.doing_tank_sweep ) && self.doing_tank_sweep ) - { - do_tank_sweep_auto_damage = !level.vh_tank ent_flag( "tank_moving" ); - } - players = getplayers(); - i = 0; - while ( i < players.size ) - { - if ( isDefined( players[ i ].is_burning ) && !players[ i ].is_burning ) - { - if ( do_tank_sweep_auto_damage || players[ i ] entity_on_tank() && players[ i ] istouching( self.flamethrower_trigger ) ) - { - players[ i ] thread player_flame_damage(); - } - } - i++; - } - zombies = getaispeciesarray( "axis", "all" ); - i = 0; - while ( i < zombies.size ) - { - if ( isDefined( zombies[ i ].is_mechz ) && zombies[ i ].is_mechz ) - { - i++; - continue; - } - else - { - if ( isDefined( zombies[ i ].on_fire ) && zombies[ i ].on_fire ) - { - i++; - continue; - } - else - { - if ( do_tank_sweep_auto_damage || zombies[ i ] entity_on_tank() && zombies[ i ] istouching( self.flamethrower_trigger ) ) - { - zombies[ i ].on_fire = 1; - zombies[ i ] promote_to_explosive(); - } - } - } - i++; - } - wait 0,1; - } - } -} - -player_flame_damage() -{ - self endon( "zombified" ); - self endon( "death" ); - self endon( "disconnect" ); - n_player_dmg = 30; - n_jugga_dmg = 45; - n_burn_time = 1,5; - if ( isDefined( self.is_zombie ) && self.is_zombie ) - { - return; - } - self thread player_stop_burning(); - if ( !isDefined( self.is_burning ) && is_player_valid( self, 1, 0 ) ) - { - self.is_burning = 1; - maps/mp/_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, n_burn_time, level.zm_transit_burn_max_duration ); - self notify( "burned" ); - if ( !self hasperk( "specialty_armorvest" ) ) - { - self dodamage( n_player_dmg, self.origin ); - } - else - { - self dodamage( n_jugga_dmg, self.origin ); - } - wait 0,5; - self.is_burning = undefined; - } -} - -player_stop_burning() -{ - self notify( "player_stop_burning" ); - self endon( "player_stop_burning" ); - self endon( "death_or_disconnect" ); - self waittill( "zombified" ); - self notify( "stop_flame_damage" ); - maps/mp/_visionset_mgr::vsmgr_deactivate( "overlay", "zm_transit_burn", self ); -} - -zombie_burning_fx() -{ - self endon( "death" ); - self endon( "stop_flame_damage" ); - while ( 1 ) - { - if ( isDefined( level._effect ) && isDefined( level._effect[ "character_fire_death_torso" ] ) ) - { - if ( !self.isdog ) - { - playfxontag( level._effect[ "character_fire_death_torso" ], self, "J_SpineLower" ); - } - } - if ( isDefined( level._effect ) && isDefined( level._effect[ "character_fire_death_sm" ] ) ) - { - wait 1; - tagarray = []; - if ( randomint( 2 ) == 0 ) - { - tagarray[ 0 ] = "J_Elbow_LE"; - tagarray[ 1 ] = "J_Elbow_RI"; - tagarray[ 2 ] = "J_HEAD"; - } - else - { - tagarray[ 0 ] = "J_Wrist_RI"; - tagarray[ 1 ] = "J_Wrist_LE"; - tagarray[ 2 ] = "J_HEAD"; - } - tagarray = array_randomize( tagarray ); - self thread network_safe_play_fx_on_tag( "flamethrower", 2, level._effect[ "character_fire_death_sm" ], self, tagarray[ 0 ] ); - } - wait 12; - } -} - -zombie_burning_audio() -{ - self playloopsound( "zmb_fire_loop" ); - self waittill_any( "death", "stop_flame_damage" ); - if ( isDefined( self ) && isalive( self ) ) - { - self stoploopsound( 0,25 ); - } -} - -zombie_burning_dmg() -{ - self endon( "death" ); - self endon( "stop_flame_damage" ); - damageradius = 25; - damage = 2; - while ( 1 ) - { - eyeorigin = self geteye(); - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( is_player_valid( players[ i ], 1, 0 ) ) - { - playereye = players[ i ] geteye(); - if ( distancesquared( eyeorigin, playereye ) < ( damageradius * damageradius ) ) - { - players[ i ] dodamage( damage, self.origin, self ); - players[ i ] notify( "burned" ); - } - } - i++; - } - wait 1; - } -} - -promote_to_explosive() -{ - self endon( "death" ); - self thread zombie_burning_audio(); - self thread zombie_burning_fx(); - self thread explode_on_death(); - self thread zombie_burning_dmg(); - self thread on_fire_timeout(); -} - -explode_on_death() -{ - self endon( "stop_flame_damage" ); - self waittill( "death" ); - if ( !isDefined( self ) ) - { - return; - } - tag = "J_SpineLower"; - if ( isDefined( self.animname ) && self.animname == "zombie_dog" ) - { - tag = "tag_origin"; - } - if ( is_mature() ) - { - if ( isDefined( level._effect[ "zomb_gib" ] ) ) - { - playfx( level._effect[ "zomb_gib" ], self gettagorigin( tag ) ); - } - } - else - { - if ( isDefined( level._effect[ "spawn_cloud" ] ) ) - { - playfx( level._effect[ "spawn_cloud" ], self gettagorigin( tag ) ); - } - } - self radiusdamage( self.origin, 128, 30, 15, undefined, "MOD_EXPLOSIVE" ); - self ghost(); - if ( isDefined( self.isdog ) && self.isdog ) - { - self hide(); - } - else - { - self delay_thread( 1, ::self_delete ); - } -} - -on_fire_timeout() -{ - self endon( "death" ); - wait 12; - if ( isDefined( self ) && isalive( self ) ) - { - self.is_on_fire = 0; - self notify( "stop_flame_damage" ); - } -} - -should_do_flamethrower_attack() -{ -/# - assert( isDefined( self.favoriteenemy ) ); -#/ -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\tMZ: Checking should flame\n" ); -#/ - } - if ( isDefined( self.disable_complex_behaviors ) && self.disable_complex_behaviors ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\t\tMZ: Not doing flamethrower because doing force aggro\n" ); -#/ - } - return 0; - } - if ( isDefined( self.not_interruptable ) && self.not_interruptable ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\t\tMZ: Not doing flamethrower because another behavior has set not_interruptable\n" ); -#/ - } - return 0; - } - if ( !self mechz_check_in_arc( 26 ) ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\t\tMZ: Not doing flamethrower because target is not in front arc\n" ); -#/ - } - return 0; - } - if ( isDefined( self.last_flamethrower_time ) && ( getTime() - self.last_flamethrower_time ) < level.mechz_flamethrower_cooldown_time ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\t\tMZ: Not doing flamethrower because it is still on cooldown\n" ); -#/ - } - return 0; - } - n_dist_sq = distancesquared( self.origin, self.favoriteenemy.origin ); - if ( n_dist_sq < 10000 || n_dist_sq > 50000 ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\t\tMZ: Not doing flamethrower because target is not in range\n" ); -#/ - } - return 0; - } - b_cansee = bullettracepassed( self.origin + vectorScale( ( 0, 0, 1 ), 36 ), self.favoriteenemy.origin + vectorScale( ( 0, 0, 1 ), 36 ), 0, undefined ); - if ( !b_cansee ) - { -/# - if ( getDvarInt( #"E7121222" ) > 1 ) - { - println( "\n\t\tMZ: Not doing flamethrower because cannot see target\n" ); -#/ - } - return 0; - } - return 1; -} - -mechz_do_flamethrower_attack( tank_sweep ) -{ - self endon( "death" ); - self endon( "kill_ft" ); -/# - if ( getDvarInt( #"E7121222" ) > 0 ) - { - println( "\n\tMZ: Doing Flamethrower Attack\n" ); -#/ - } - self thread mechz_stop_basic_find_flesh(); - self.ai_state = "flamethrower_attack"; - self setgoalpos( self.origin ); - self clearanim( %root, 0,2 ); - self.last_flamethrower_time = getTime(); - self thread mechz_kill_flamethrower_watcher(); - if ( !isDefined( self.flamethrower_trigger ) ) - { - self mechz_flamethrower_initial_setup(); - } - n_nearby_enemies = 0; - a_players = getplayers(); - _a628 = a_players; - _k628 = getFirstArrayKey( _a628 ); - while ( isDefined( _k628 ) ) - { - player = _a628[ _k628 ]; - if ( distance2dsquared( player.origin, self.favoriteenemy.origin ) < 10000 ) - { - n_nearby_enemies++; - } - _k628 = getNextArrayKey( _a628, _k628 ); - } - if ( isDefined( tank_sweep ) && tank_sweep ) - { - self.doing_tank_sweep = 1; - self thread mechz_flamethrower_tank_sweep(); - } - else - { - if ( randomint( 100 ) < level.mechz_ft_sweep_chance && n_nearby_enemies > 1 ) - { - self.doing_ft_sweep = 1; - self animscripted( self.origin, self.angles, "zm_flamethrower_sweep" ); - self maps/mp/animscripts/zm_shared::donotetracks( "flamethrower_anim" ); - } - else - { - self animscripted( self.origin, self.angles, "zm_flamethrower_aim_start" ); - self thread mechz_flamethrower_aim(); - self maps/mp/animscripts/zm_shared::donotetracks( "flamethrower_anim" ); - } - } - self orientmode( "face default" ); - if ( isDefined( self.doing_ft_sweep ) && self.doing_ft_sweep ) - { - self.doing_ft_sweep = 0; - } - else - { - self.cant_melee = 1; - self waittill( "stop_ft" ); - self mechz_flamethrower_cleanup(); - wait 0,5; - self stopanimscripted(); - return; - } - self mechz_flamethrower_cleanup(); -} - -mechz_kill_flamethrower_watcher() -{ - self endon( "flamethrower_complete" ); - self waittill_either( "kill_ft", "death" ); - self mechz_flamethrower_cleanup(); -} - -mechz_flamethrower_cleanup() -{ - self.fx_field &= 64; - self setclientfield( "mechz_fx", self.fx_field ); - self.firing = 0; - self.doing_tank_sweep = 0; - self.cant_melee = 0; - self notify( "flamethrower_complete" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_ai_quadrotor.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_ai_quadrotor.gsc deleted file mode 100644 index 2c2135b..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_ai_quadrotor.gsc +++ /dev/null @@ -1,1264 +0,0 @@ -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zm_tomb_vo; -#include maps/mp/zombies/_zm_equipment; -#include maps/_vehicle; -#include maps/_quadrotor; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; -#include animscripts/utility; - -precache() -{ - precachemodel( "veh_t6_dlc_zm_quadrotor" ); - precachevehicle( "heli_quadrotor_zm" ); - precachevehicle( "heli_quadrotor_upgraded_zm" ); -} - -init() -{ - level._effect[ "quadrotor_nudge" ] = loadfx( "destructibles/fx_quadrotor_nudge01" ); - level._effect[ "qd_revive" ] = loadfx( "maps/zombie_tomb/fx_tomb_veh_quadrotor_revive_health" ); - maps/mp/zombies/_zm_equipment::register_equipment( "equip_dieseldrone_zm", &"ZM_TOMB_DIHS", &"ZM_TOMB_DIHO", "riotshield_zm_icon", "riotshield" ); -} - -quadrotor_dealt_no_damage_to_player( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) -{ - if ( isDefined( sweapon ) && sweapon == "quadrotorturret_zm" ) - { - return 0; - } - return idamage; -} - -quadrotor_think() -{ - self enableaimassist(); - self sethoverparams( 5, 60, 40 ); - self setneargoalnotifydist( 64 ); - self.flyheight = 128; - self setvehicleavoidance( 1 ); - self.vehfovcosine = 0; - self.vehfovcosinebusy = 0,574; - self.vehaircraftcollisionenabled = 1; - if ( !isDefined( self.goalradius ) ) - { - self.goalradius = 128; - } - if ( !isDefined( self.goalpos ) ) - { - self.goalpos = self.origin; - } - self thread quadrotor_death(); - self thread quadrotor_damage(); - quadrotor_start_ai(); - self thread quadrotor_set_team( "allies" ); -} - -follow_ent( e_followee ) -{ - level endon( "end_game" ); - self endon( "death" ); - while ( isDefined( e_followee ) ) - { - if ( !self.returning_home ) - { - v_facing = e_followee getplayerangles(); - v_forward = anglesToForward( ( 0, v_facing[ 1 ], 0 ) ); - candidate_goalpos = e_followee.origin + ( v_forward * 128 ); - trace_goalpos = physicstrace( self.origin, candidate_goalpos ); - if ( trace_goalpos[ "position" ] == candidate_goalpos ) - { - self.goalpos = e_followee.origin + ( v_forward * 128 ); - break; - } - else - { - self.goalpos = e_followee.origin + vectorScale( ( 0, 0, 1 ), 60 ); - } - } - wait randomfloatrange( 1, 2 ); - } -} - -quadrotor_start_ai() -{ - self.goalpos = self.origin; - self.returning_home = 0; - quadrotor_main(); -} - -quadrotor_main() -{ - self thread quadrotor_blink_lights(); - self thread quadrotor_fireupdate(); - self thread quadrotor_movementupdate(); - self thread quadrotor_collision(); - self thread quadrotor_ambient_vo(); - self thread quadrotor_watch_for_game_end(); -} - -quadrotor_ambient_vo() -{ - level endon( "end_game" ); - self endon( "death" ); - spawn_lines = []; - spawn_lines[ 0 ] = "vox_maxi_drone_standby_0"; - spawn_lines[ 1 ] = "vox_maxi_drone_hover_0"; - spawn_lines[ 2 ] = "vox_maxi_drone_holding_0"; - vox_line = spawn_lines[ randomintrange( 0, spawn_lines.size ) ]; - self thread maps/mp/zm_tomb_vo::maxissay( vox_line, self ); - current_ambient_line_cooldown = randomintrange( 10000, 30000 ); - wait current_ambient_line_cooldown; - while ( 1 ) - { - current_time = getTime(); - if ( ( current_time - self.time_last_spoke_attack_line ) > current_ambient_line_cooldown ) - { - if ( ( current_time - self.time_last_spoke_killed_line ) > current_ambient_line_cooldown ) - { - vox_line = "vox_maxi_drone_ambient_" + randomintrange( 0, 10 ) + "_0"; - self thread maps/mp/zm_tomb_vo::maxissay( vox_line, self ); - current_ambient_line_cooldown = randomintrange( 10000, 30000 ); - } - } - wait 0,1; - } -} - -quadrotor_fireupdate() -{ - level endon( "end_game" ); - self endon( "death" ); - current_time = getTime(); - self.time_last_spoke_attack_line = current_time; - self.time_last_spoke_killed_line = current_time; - current_attack_line_cooldown = 10000; - current_killed_line_cooldown = 10000; - while ( 1 ) - { - if ( isDefined( self.enemy ) && self vehcansee( self.enemy ) ) - { - dist_squared = distancesquared( self.enemy.origin, self.origin ); - if ( dist_squared < ( 384 * 384 ) && dist_squared > ( 96 * 96 ) ) - { - self setturrettargetent( self.enemy ); - current_time = getTime(); - if ( ( current_time - self.time_last_spoke_attack_line ) > current_attack_line_cooldown ) - { - vox_line = "vox_maxi_drone_attacking_" + randomintrange( 0, 3 ); - self thread maps/mp/zm_tomb_vo::maxissay( vox_line, self ); - self.time_last_spoke_attack_line = current_time; - current_attack_line_cooldown = randomintrange( 10000, 30000 ); - } - self quadrotor_fire_for_time( randomfloatrange( 1,5, 3 ) ); - } - if ( isDefined( self.enemy ) && isai( self.enemy ) ) - { - wait randomfloatrange( 0,5, 1 ); - } - else - { - current_time = getTime(); - if ( ( current_time - self.time_last_spoke_killed_line ) > current_killed_line_cooldown ) - { - vox_line = "vox_maxi_drone_killed_" + randomintrange( 0, 4 ); - self maps/mp/zm_tomb_vo::maxissay( vox_line, self ); - do_thank_maxis = randomintrange( 0, 2 ); - if ( do_thank_maxis > 0 ) - { - players = getplayers(); - player = players[ randomintrange( 0, players.size ) ]; - player thread do_player_general_vox( "quadrotor", "kill_drone", undefined, 100 ); - } - self.time_last_spoke_killed_line = current_time; - current_killed_line_cooldown = randomintrange( 10000, 30000 ); - } - wait randomfloatrange( 0,5, 1,5 ); - } - continue; - } - else - { - current_time = getTime(); - if ( ( current_time - self.time_last_spoke_attack_line ) > current_attack_line_cooldown ) - { - vox_line = "vox_maxi_drone_scan_0"; - self thread maps/mp/zm_tomb_vo::maxissay( vox_line, self ); - self.time_last_spoke_attack_line = current_time; - current_attack_line_cooldown = randomintrange( 10000, 30000 ); - } - wait 0,4; - } - } -} - -quadrotor_watch_for_game_end() -{ - self endon( "death" ); - level waittill( "end_game" ); - if ( isDefined( self ) ) - { - playfx( level._effect[ "tesla_elec_kill" ], self.origin ); - self playsound( "zmb_qrdrone_leave" ); - self delete(); -/# - iprintln( "Maxis deleted" ); -#/ - } -} - -quadrotor_check_move( position ) -{ - results = physicstrace( self.origin, position, ( -15, -15, -5 ), ( 15, 15, 5 ) ); - if ( results[ "fraction" ] == 1 ) - { - return 1; - } - return 0; -} - -quadrotor_adjust_goal_for_enemy_height( goalpos ) -{ - if ( isDefined( self.enemy ) ) - { - if ( isai( self.enemy ) ) - { - offset = 45; - } - else - { - offset = -100; - } - if ( ( self.enemy.origin[ 2 ] + offset ) > goalpos[ 2 ] ) - { - goal_z = self.enemy.origin[ 2 ] + offset; - if ( goal_z > ( goalpos[ 2 ] + 400 ) ) - { - goal_z = goalpos[ 2 ] + 400; - } - results = physicstrace( goalpos, ( goalpos[ 0 ], goalpos[ 1 ], goal_z ), ( -15, -15, -5 ), ( 15, 15, 5 ) ); - if ( results[ "fraction" ] == 1 ) - { - goalpos = ( goalpos[ 0 ], goalpos[ 1 ], goal_z ); - } - } - } - return goalpos; -} - -make_sure_goal_is_well_above_ground( pos ) -{ - start = pos + ( 0, 0, self.flyheight ); - end = pos + ( 0, 0, self.flyheight * -1 ); - trace = bullettrace( start, end, 0, self, 0, 0 ); - end = trace[ "position" ]; - pos = end + ( 0, 0, self.flyheight ); - z = self getheliheightlockheight( pos ); - pos = ( pos[ 0 ], pos[ 1 ], z ); - return pos; -} - -waittill_pathing_done() -{ - level endon( "end_game" ); - self endon( "death" ); - self endon( "change_state" ); - if ( self.vehonpath ) - { - self waittill_any( "near_goal", "reached_end_node", "force_goal" ); - } -} - -quadrotor_movementupdate() -{ - level endon( "end_game" ); - self endon( "death" ); - self endon( "change_state" ); -/# - assert( isalive( self ) ); -#/ - a_powerups = []; - old_goalpos = self.goalpos; - self.goalpos = self make_sure_goal_is_well_above_ground( self.goalpos ); - if ( !self.vehonpath ) - { - if ( isDefined( self.attachedpath ) ) - { - self script_delay(); - } - else if ( distancesquared( self.origin, self.goalpos ) < 10000 || self.goalpos[ 2 ] > ( old_goalpos[ 2 ] + 10 ) && ( self.origin[ 2 ] + 10 ) < self.goalpos[ 2 ] ) - { - self setvehgoalpos( self.goalpos, 1, 2, 0 ); - self pathvariableoffset( vectorScale( ( 0, 0, 1 ), 20 ), 2 ); - self waittill_any_or_timeout( 4, "near_goal", "force_goal" ); - } - else - { - goalpos = self quadrotor_get_closest_node(); - self setvehgoalpos( goalpos, 1, 2, 0 ); - self waittill_any_or_timeout( 2, "near_goal", "force_goal" ); - } - } -/# - assert( isalive( self ) ); -#/ - self setvehicleavoidance( 1 ); - goalfailures = 0; - for ( ;; ) - { - while ( 1 ) - { - self waittill_pathing_done(); - self thread quadrotor_blink_lights(); - if ( self.returning_home ) - { - self setneargoalnotifydist( 64 ); - self setheliheightlock( 0 ); - is_valid_exit_path_found = 0; - quadrotor_table = level.quadrotor_status.pickup_trig.model; - is_valid_exit_path_found = self setvehgoalpos( quadrotor_table.origin, 1, 2, 1 ); - while ( is_valid_exit_path_found ) - { - self notify( "attempting_return" ); - self waittill_any( "near_goal", "force_goal", "reached_end_node", "return_timeout" ); - } - self setneargoalnotifydist( 8 ); - str_zone = level.quadrotor_status.str_zone; -/# - iprintln( "EXIT ZONE: " + str_zone ); -#/ - switch( str_zone ) - { - case "zone_nml_9": - exit_path = getvehiclenode( "quadrotor_nml_exit_path", "targetname" ); - is_valid_exit_path_found = self setvehgoalpos( exit_path.origin, 1, 2, 1 ); - break; - case "zone_bunker_5a": - if ( flag( "activate_zone_nml" ) ) - { - exit_path = getvehiclenode( "quadrotor_bunker_north_exit_path", "targetname" ); - is_valid_exit_path_found = self setvehgoalpos( exit_path.origin, 1, 2, 1 ); - break; - } - if ( !is_valid_exit_path_found ) - { - if ( flag( "activate_zone_bunker_3b" ) ) - { - exit_path = getvehiclenode( "quadrotor_bunker_west_exit_path", "targetname" ); - is_valid_exit_path_found = self setvehgoalpos( exit_path.origin, 1, 2, 1 ); - break; - } - } - if ( !is_valid_exit_path_found ) - { - if ( flag( "activate_zone_bunker_4b" ) ) - { - exit_path = getvehiclenode( "quadrotor_bunker_south_exit_path", "targetname" ); - is_valid_exit_path_found = self setvehgoalpos( exit_path.origin, 1, 2, 1 ); - break; - } - } - case "zone_village_2": - } - if ( is_valid_exit_path_found ) - { - self waittill_any( "near_goal", "force_goal" ); - self cancelaimove(); - self clearvehgoalpos(); - self pathvariableoffsetclear(); - self pathfixedoffsetclear(); - self clearlookatent(); - self setvehicleavoidance( 0 ); - self.drivepath = 1; - self attachpath( exit_path ); - self pathvariableoffset( vectorScale( ( 0, 0, 1 ), 8 ), randomintrange( 1, 3 ) ); - self drivepath( exit_path ); - wait 1; - self notify( "attempting_return" ); - } - else self thread quadrotor_escape_into_air(); - self waittill_any( "near_goal", "force_goal", "reached_end_node", "return_timeout" ); - } - if ( !isDefined( self.revive_target ) ) - { - player = self player_in_last_stand_within_range( 500 ); - if ( isDefined( player ) ) - { - self.revive_target = player; - player.quadrotor_revive = 1; - vox_line = "vox_maxi_drone_revive_" + randomintrange( 0, 5 ); - maps/mp/zm_tomb_vo::maxissay( vox_line, self ); - } - } - if ( isDefined( self.revive_target ) ) - { - origin = self.revive_target.origin; - origin = ( origin[ 0 ], origin[ 1 ], origin[ 2 ] + 150 ); - z = self getheliheightlockheight( origin ); - origin = ( origin[ 0 ], origin[ 1 ], z ); - if ( self setvehgoalpos( origin, 1, 2, 1 ) ) - { - self waittill_any( "near_goal", "force_goal", "reached_end_node" ); - level thread watch_for_fail_revive( self ); - wait 1; - if ( isDefined( self.revive_target ) && self.revive_target maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - playfxontag( level._effect[ "staff_charge" ], self.revive_target, "tag_origin" ); - self.revive_target notify( "remote_revive" ); - self.revive_target do_player_general_vox( "quadrotor", "rspnd_drone_revive", undefined, 100 ); - self.player_owner notify( "revived_player_with_quadrotor" ); - } - self.revive_target = undefined; - self setvehgoalpos( origin, 1 ); - wait 1; - } - } - else player.quadrotor_revive = undefined; - wait 0,1; - } - a_powerups = []; - if ( level.active_powerups.size > 0 && isDefined( self.player_owner ) ) - { - a_powerups = get_array_of_closest( self.player_owner.origin, level.active_powerups, undefined, undefined, 500 ); - } - if ( a_powerups.size > 0 ) - { - b_got_powerup = 0; - _a565 = a_powerups; - _k565 = getFirstArrayKey( _a565 ); - while ( isDefined( _k565 ) ) - { - powerup = _a565[ _k565 ]; - if ( self setvehgoalpos( powerup.origin, 1, 2, 1 ) ) - { - self waittill_any( "near_goal", "force_goal", "reached_end_node" ); - if ( isDefined( powerup ) ) - { - self.player_owner.ignore_range_powerup = powerup; - b_got_powerup = 1; - } - wait 1; - break; - } - else - { - _k565 = getNextArrayKey( _a565, _k565 ); - } - } - while ( b_got_powerup ) - { - continue; - } - wait 0,1; - } - a_special_items = getentarray( "quad_special_item", "script_noteworthy" ); - if ( level.n_ee_medallions > 0 && isDefined( self.player_owner ) ) - { - e_special_item = getclosest( self.player_owner.origin, a_special_items, 500 ); - if ( isDefined( e_special_item ) ) - { - self setneargoalnotifydist( 4 ); - if ( isDefined( e_special_item.target ) ) - { - s_start_pos = getstruct( e_special_item.target, "targetname" ); - self setvehgoalpos( s_start_pos.origin, 1, 0, 1 ); - self waittill_any( "near_goal", "force_goal", "reached_end_node" ); - } - self setvehgoalpos( e_special_item.origin + vectorScale( ( 0, 0, 1 ), 30 ), 1, 0, 1 ); - self waittill_any( "near_goal", "force_goal", "reached_end_node" ); - wait 1; - playfx( level._effect[ "staff_charge" ], e_special_item.origin ); - e_special_item hide(); - level.n_ee_medallions--; - - level notify( "quadrotor_medallion_found" ); - if ( isDefined( e_special_item.target ) ) - { - s_start_pos = getstruct( e_special_item.target, "targetname" ); - self setvehgoalpos( s_start_pos.origin, 1, 0, 1 ); - self waittill_any( "near_goal", "force_goal", "reached_end_node" ); - } - if ( level.n_ee_medallions == 0 ) - { - s_mg_spawn = getstruct( "mgspawn", "targetname" ); - self setvehgoalpos( s_mg_spawn.origin + vectorScale( ( 0, 0, 1 ), 30 ), 1, 0, 1 ); - self waittill_any( "near_goal", "force_goal", "reached_end_node" ); - wait 1; - playfx( level._effect[ "staff_charge" ], s_mg_spawn.origin ); - e_special_item playsound( "zmb_perks_packa_ready" ); - flag_set( "ee_medallions_collected" ); - } - e_special_item delete(); - self setneargoalnotifydist( 30 ); - self setvehgoalpos( self.origin, 1 ); - } - } - if ( isDefined( level.quadrotor_custom_behavior ) ) - { - self [[ level.quadrotor_custom_behavior ]](); - } - goalpos = quadrotor_find_new_position(); - if ( self setvehgoalpos( goalpos, 1, 2, 1 ) ) - { - goalfailures = 0; - if ( isDefined( self.goal_node ) ) - { - self.goal_node.quadrotor_claimed = 1; - } - if ( isDefined( self.enemy ) && self vehcansee( self.enemy ) ) - { - if ( randomint( 100 ) > 50 ) - { - self setlookatent( self.enemy ); - } - } - self waittill_any_timeout( 12, "near_goal", "force_goal", "reached_end_node" ); - if ( isDefined( self.enemy ) && self vehcansee( self.enemy ) ) - { - self setlookatent( self.enemy ); - wait randomfloatrange( 1, 4 ); - self clearlookatent(); - } - if ( isDefined( self.goal_node ) ) - { - self.goal_node.quadrotor_claimed = undefined; - } - continue; - } - else - { - goalfailures++; - if ( isDefined( self.goal_node ) ) - { - self.goal_node.quadrotor_fails = 1; - } - if ( goalfailures == 1 ) - { - wait 0,5; - } - } - else if ( goalfailures == 2 ) - { - goalpos = self.origin; - } - else if ( goalfailures == 3 ) - { - goalpos = self quadrotor_get_closest_node(); - self setvehgoalpos( goalpos, 1 ); - self waittill( "near_goal" ); - } - else - { - if ( goalfailures > 3 ) - { -/# - println( "WARNING: Quadrotor can't find path to goal over 4 times." + self.origin + " " + goalpos ); - line( self.origin, goalpos, ( 0, 0, 1 ), 1, 100 ); -#/ - self.goalpos = make_sure_goal_is_well_above_ground( goalpos ); - } - } - old_goalpos = goalpos; - offset = ( randomfloatrange( -50, 50 ), randomfloatrange( -50, 50 ), randomfloatrange( 50, 150 ) ); - goalpos += offset; - goalpos = quadrotor_adjust_goal_for_enemy_height( goalpos ); - if ( self quadrotor_check_move( goalpos ) ) - { - self setvehgoalpos( goalpos, 1 ); - self waittill_any( "near_goal", "force_goal", "start_vehiclepath" ); - wait randomfloatrange( 1, 3 ); - if ( !self.vehonpath ) - { - self setvehgoalpos( old_goalpos, 1 ); - self waittill_any( "near_goal", "force_goal", "start_vehiclepath" ); - } - } - wait 0,5; - } - } - } -} - -quadrotor_escape_into_air() -{ -/# - iprintln( "couldn't path to exit" ); -#/ - self.goalpos = self.origin + vectorScale( ( 0, 0, 1 ), 2048 ); - can_path_straight_up = self setvehgoalpos( self.goalpos, 1, 0, 1 ); - trace_goalpos = physicstrace( self.origin, self.goalpos ); - if ( can_path_straight_up && trace_goalpos[ "position" ] == self.goalpos ) - { -/# - iprintln( "I can go straight up" ); -#/ - self notify( "attempting_return" ); - } - else - { -/# - iprintln( "Failed pathing straight up" ); -#/ - self notify( "attempting_return" ); - playfx( level._effect[ "tesla_elec_kill" ], self.origin ); - self playsound( "zmb_qrdrone_leave" ); - self delete(); - level notify( "drone_available" ); - } -} - -quadrotor_get_closest_node() -{ - nodes = getnodesinradiussorted( self.origin, 200, 0, 500, "Path" ); - if ( nodes.size == 0 ) - { - nodes = getnodesinradiussorted( self.goalpos, 3000, 0, 2000, "Path" ); - } - _a775 = nodes; - _k775 = getFirstArrayKey( _a775 ); - while ( isDefined( _k775 ) ) - { - node = _a775[ _k775 ]; - if ( node.type == "BAD NODE" || !node has_spawnflag( 2097152 ) ) - { - } - else - { - return make_sure_goal_is_well_above_ground( node.origin ); - } - _k775 = getNextArrayKey( _a775, _k775 ); - } - return self.origin; -} - -quadrotor_find_new_position() -{ - if ( !isDefined( self.goalpos ) ) - { - self.goalpos = self.origin; - } - origin = self.goalpos; - nodes = getnodesinradius( self.goalpos, self.goalradius, 0, self.flyheight + 300, "Path" ); - if ( nodes.size == 0 ) - { - nodes = getnodesinradius( self.goalpos, self.goalradius + 1000, 0, self.flyheight + 1000, "Path" ); - } - if ( nodes.size == 0 ) - { - nodes = getnodesinradius( self.goalpos, self.goalradius + 5000, 0, self.flyheight + 4000, "Path" ); - } - best_node = undefined; - best_score = 0; - _a812 = nodes; - _k812 = getFirstArrayKey( _a812 ); - while ( isDefined( _k812 ) ) - { - node = _a812[ _k812 ]; - if ( node.type == "BAD NODE" || !node has_spawnflag( 2097152 ) ) - { - } - else - { - if ( isDefined( node.quadrotor_fails ) || isDefined( node.quadrotor_claimed ) ) - { - score = randomfloat( 30 ); - } - else - { - score = randomfloat( 100 ); - } - if ( score > best_score ) - { - best_score = score; - best_node = node; - } - } - _k812 = getNextArrayKey( _a812, _k812 ); - } - if ( isDefined( best_node ) ) - { - origin = best_node.origin + ( 0, 0, self.flyheight + randomfloatrange( -30, 40 ) ); - z = self getheliheightlockheight( origin ); - origin = ( origin[ 0 ], origin[ 1 ], z ); - self.goal_node = best_node; - } - return origin; -} - -quadrotor_teleport_to_nearest_node() -{ - self.origin = self quadrotor_get_closest_node(); -} - -quadrotor_damage() -{ - self endon( "crash_done" ); - while ( isDefined( self ) ) - { - self waittill( "damage", damage ); - while ( isDefined( self.off ) ) - { - continue; - } - if ( type != "MOD_EXPLOSIVE" || type == "MOD_GRENADE_SPLASH" && type == "MOD_PROJECTILE_SPLASH" ) - { - self setvehvelocity( self.velocity + ( vectornormalize( dir ) * 300 ) ); - ang_vel = self getangularvelocity(); - ang_vel += ( randomfloatrange( -300, 300 ), randomfloatrange( -300, 300 ), randomfloatrange( -300, 300 ) ); - self setangularvelocity( ang_vel ); - } - else - { - ang_vel = self getangularvelocity(); - yaw_vel = randomfloatrange( -320, 320 ); - if ( yaw_vel < 0 ) - { - yaw_vel -= 150; - } - else - { - yaw_vel += 150; - } - ang_vel += ( randomfloatrange( -150, 150 ), yaw_vel, randomfloatrange( -150, 150 ) ); - self setangularvelocity( ang_vel ); - } - wait 0,3; - } -} - -quadrotor_cleanup_fx() -{ - if ( isDefined( self.stun_fx ) ) - { - self.stun_fx delete(); - } -} - -quadrotor_death() -{ - wait 0,1; - self notify( "nodeath_thread" ); - self waittill( "death", attacker, damagefromunderneath, weaponname, point, dir ); - self notify( "nodeath_thread" ); - if ( isDefined( self.goal_node ) && isDefined( self.goal_node.quadrotor_claimed ) ) - { - self.goal_node.quadrotor_claimed = undefined; - } - if ( isDefined( self.delete_on_death ) ) - { - if ( isDefined( self ) ) - { - self quadrotor_cleanup_fx(); - self delete(); - level.maxis_quadrotor = undefined; - } - return; - } - if ( !isDefined( self ) ) - { - return; - } - self endon( "death" ); - self disableaimassist(); - self death_fx(); - self thread death_radius_damage(); - self thread set_death_model( self.deathmodel, self.modelswapdelay ); - self thread quadrotor_crash_movement( attacker, dir ); - self quadrotor_cleanup_fx(); - self waittill( "crash_done" ); - self delete(); - level.maxis_quadrotor = undefined; -} - -death_fx() -{ - if ( isDefined( self.deathfx ) ) - { - playfxontag( self.deathfx, self, self.deathfxtag ); - } - self playsound( "veh_qrdrone_sparks" ); -} - -quadrotor_crash_movement( attacker, hitdir ) -{ - level endon( "end_game" ); - self endon( "crash_done" ); - self endon( "death" ); - self cancelaimove(); - self clearvehgoalpos(); - self clearlookatent(); - self setphysacceleration( vectorScale( ( 0, 0, 1 ), 800 ) ); - self.vehcheckforpredictedcrash = 1; - if ( !isDefined( hitdir ) ) - { - hitdir = ( 0, 0, 1 ); - } - side_dir = vectorcross( hitdir, ( 0, 0, 1 ) ); - side_dir_mag = randomfloatrange( -100, 100 ); - side_dir_mag += sign( side_dir_mag ) * 80; - side_dir *= side_dir_mag; - self setvehvelocity( self.velocity + vectorScale( ( 0, 0, 1 ), 100 ) + vectornormalize( side_dir ) ); - ang_vel = self getangularvelocity(); - ang_vel = ( ang_vel[ 0 ] * 0,3, ang_vel[ 1 ], ang_vel[ 2 ] * 0,3 ); - yaw_vel = randomfloatrange( 0, 210 ) * sign( ang_vel[ 1 ] ); - yaw_vel += sign( yaw_vel ) * 180; - ang_vel += ( randomfloatrange( -1, 1 ), yaw_vel, randomfloatrange( -1, 1 ) ); - self setangularvelocity( ang_vel ); - self.crash_accel = randomfloatrange( 75, 110 ); - if ( !isDefined( self.off ) ) - { - self thread quadrotor_crash_accel(); - } - self thread quadrotor_collision(); - self playsound( "veh_qrdrone_dmg_hit" ); - if ( !isDefined( self.off ) ) - { - self thread qrotor_dmg_snd(); - } - wait 0,1; - if ( randomint( 100 ) < 40 && !isDefined( self.off ) ) - { - self thread quadrotor_fire_for_time( randomfloatrange( 0,7, 2 ) ); - } - wait 15; - self notify( "crash_done" ); -} - -qrotor_dmg_snd() -{ - dmg_ent = spawn( "script_origin", self.origin ); - dmg_ent linkto( self ); - dmg_ent playloopsound( "veh_qrdrone_dmg_loop" ); - self waittill_any( "crash_done", "death" ); - dmg_ent stoploopsound( 1 ); - wait 2; - dmg_ent delete(); -} - -quadrotor_fire_for_time( totalfiretime ) -{ - level endon( "end_game" ); - self endon( "crash_done" ); - self endon( "change_state" ); - self endon( "death" ); - if ( isDefined( self.emped ) ) - { - return; - } - weaponname = self seatgetweapon( 0 ); - firetime = weaponfiretime( weaponname ); - time = 0; - firecount = 1; - while ( time < totalfiretime && !isDefined( self.emped ) ) - { - if ( isDefined( self.enemy ) && isDefined( self.enemy.attackeraccuracy ) && self.enemy.attackeraccuracy == 0 ) - { - self fireweapon( undefined, undefined, 1 ); - firecount++; - continue; - } - else - { - self fireweapon(); - } - firecount++; - wait firetime; - time += firetime; - } -} - -quadrotor_crash_accel() -{ - level endon( "end_game" ); - self endon( "crash_done" ); - self endon( "death" ); - count = 0; - while ( 1 ) - { - self setvehvelocity( self.velocity + ( anglesToUp( self.angles ) * self.crash_accel ) ); - self.crash_accel *= 0,98; - wait 0,1; - count++; - if ( ( count % 8 ) == 0 ) - { - if ( randomint( 100 ) > 40 ) - { - if ( self.velocity[ 2 ] > 150 ) - { - self.crash_accel *= 0,75; - break; - } - else if ( self.velocity[ 2 ] < 40 && count < 60 ) - { - if ( abs( self.angles[ 0 ] ) > 30 || abs( self.angles[ 2 ] ) > 30 ) - { - self.crash_accel = randomfloatrange( 160, 200 ); - break; - } - else - { - self.crash_accel = randomfloatrange( 85, 120 ); - } - } - } - } - } -} - -quadrotor_predicted_collision() -{ - level endon( "end_game" ); - self endon( "crash_done" ); - self endon( "death" ); - while ( 1 ) - { - self waittill( "veh_predictedcollision", velocity, normal ); - if ( normal[ 2 ] >= 0,6 ) - { - self notify( "veh_collision" ); - } - } -} - -quadrotor_collision_player() -{ - level endon( "end_game" ); - self endon( "change_state" ); - self endon( "crash_done" ); - self endon( "death" ); - while ( 1 ) - { - self waittill( "veh_collision", velocity, normal ); - driver = self getseatoccupant( 0 ); - if ( isDefined( driver ) && lengthsquared( velocity ) > 4900 ) - { - earthquake( 0,25, 0,25, driver.origin, 50 ); - driver playrumbleonentity( "damage_heavy" ); - } - } -} - -quadrotor_collision() -{ - level endon( "end_game" ); - self endon( "change_state" ); - self endon( "crash_done" ); - self endon( "death" ); - if ( !isalive( self ) ) - { - self thread quadrotor_predicted_collision(); - } - self.bounce_count = 0; - time_of_last_bounce = 0; - while ( 1 ) - { - self waittill( "veh_collision", velocity, normal ); - ang_vel = self getangularvelocity() * 0,5; - self setangularvelocity( ang_vel ); - if ( normal[ 2 ] < 0,6 || isalive( self ) && !isDefined( self.emped ) ) - { - self setvehvelocity( self.velocity + ( normal * 90 ) ); - self playsound( "veh_qrdrone_wall" ); - if ( normal[ 2 ] < 0,6 ) - { - fx_origin = self.origin - ( normal * 28 ); - } - else - { - fx_origin = self.origin - ( normal * 10 ); - } - playfx( level._effect[ "quadrotor_nudge" ], fx_origin, normal ); - current_time = getTime(); - if ( ( current_time - time_of_last_bounce ) < 1000 ) - { - self.bounce_count += 1; - if ( self.bounce_count > 2 ) - { - self notify( "force_goal" ); - self.bounce_count = 0; - } - } - else - { - self.bounce_count = 0; - } - time_of_last_bounce = getTime(); - continue; - } - else - { - if ( isDefined( self.emped ) ) - { - if ( isDefined( self.bounced ) ) - { - self playsound( "veh_qrdrone_wall" ); - self setvehvelocity( ( 0, 0, 1 ) ); - self setangularvelocity( ( 0, 0, 1 ) ); - if ( self.angles[ 0 ] < 0 ) - { - if ( self.angles[ 0 ] < -15 ) - { - self.angles = ( -15, self.angles[ 1 ], self.angles[ 2 ] ); - } - else - { - if ( self.angles[ 0 ] > -10 ) - { - self.angles = ( -10, self.angles[ 1 ], self.angles[ 2 ] ); - } - } - } - else if ( self.angles[ 0 ] > 15 ) - { - self.angles = ( 15, self.angles[ 1 ], self.angles[ 2 ] ); - } - else - { - if ( self.angles[ 0 ] < 10 ) - { - self.angles = ( 10, self.angles[ 1 ], self.angles[ 2 ] ); - } - } - self.bounced = undefined; - self notify( "landed" ); - return; - } - else - { - self.bounced = 1; - self setvehvelocity( self.velocity + ( normal * 120 ) ); - self playsound( "veh_qrdrone_wall" ); - if ( normal[ 2 ] < 0,6 ) - { - fx_origin = self.origin - ( normal * 28 ); - } - else - { - fx_origin = self.origin - ( normal * 10 ); - } - playfx( level._effect[ "quadrotor_nudge" ], fx_origin, normal ); - } - break; - } - else - { - createdynentandlaunch( self.deathmodel, self.origin, self.angles, self.origin, self.velocity * 0,01 ); - self playsound( "veh_qrdrone_explo" ); - self thread death_fire_loop_audio(); - self notify( "crash_done" ); - } - } - } -} - -death_fire_loop_audio() -{ - sound_ent = spawn( "script_origin", self.origin ); - sound_ent playloopsound( "veh_qrdrone_death_fire_loop", 0,1 ); - wait 11; - sound_ent stoploopsound( 1 ); - sound_ent delete(); -} - -quadrotor_set_team( team ) -{ - self.team = team; - self.vteam = team; - self setteam( team ); - if ( !isDefined( self.off ) ) - { - quadrotor_blink_lights(); - } -} - -quadrotor_blink_lights() -{ - level endon( "end_game" ); - self endon( "death" ); - self lights_off(); - wait 0,1; - self lights_on(); -} - -quadrotor_self_destruct() -{ - level endon( "end_game" ); - self endon( "death" ); - self endon( "exit_vehicle" ); - self_destruct = 0; - self_destruct_time = 0; - for ( ;; ) - { - while ( 1 ) - { - if ( !self_destruct ) - { - if ( level.player meleebuttonpressed() ) - { - self_destruct = 1; - self_destruct_time = 5; - } - wait 0,05; - } - } - else iprintlnbold( self_destruct_time ); - wait 1; - self_destruct_time -= 1; - if ( self_destruct_time == 0 ) - { - driver = self getseatoccupant( 0 ); - if ( isDefined( driver ) ) - { - driver disableinvulnerability(); - } - earthquake( 3, 1, self.origin, 256 ); - radiusdamage( self.origin, 1000, 15000, 15000, level.player, "MOD_EXPLOSIVE" ); - self dodamage( self.health + 1000, self.origin ); - } - } -} -} - -quadrotor_level_out_for_landing() -{ - level endon( "end_game" ); - self endon( "death" ); - self endon( "emped" ); - self endon( "landed" ); - while ( isDefined( self.emped ) ) - { - velocity = self.velocity; - self.angles = ( self.angles[ 0 ] * 0,85, self.angles[ 1 ], self.angles[ 2 ] * 0,85 ); - ang_vel = self getangularvelocity() * 0,85; - self setangularvelocity( ang_vel ); - self setvehvelocity( velocity ); - wait 0,05; - } -} - -quadrotor_temp_bullet_shield( invulnerable_time ) -{ - self notify( "bullet_shield" ); - self endon( "bullet_shield" ); - self.bullet_shield = 1; - wait invulnerable_time; - if ( isDefined( self ) ) - { - self.bullet_shield = undefined; - wait 3; - if ( isDefined( self ) && self.health < 40 ) - { - self.health = 40; - } - } -} - -lights_on() -{ - self clearclientflag( 10 ); -} - -lights_off() -{ - self setclientflag( 10 ); -} - -death_radius_damage() -{ - if ( !isDefined( self ) || self.radiusdamageradius <= 0 ) - { - return; - } - wait 0,05; - if ( isDefined( self ) ) - { - self radiusdamage( self.origin + vectorScale( ( 0, 0, 1 ), 15 ), self.radiusdamageradius, self.radiusdamagemax, self.radiusdamagemin, self, "MOD_EXPLOSIVE" ); - } -} - -set_death_model( smodel, fdelay ) -{ -/# - assert( isDefined( smodel ) ); -#/ - if ( isDefined( fdelay ) && fdelay > 0 ) - { - wait fdelay; - } - if ( !isDefined( self ) ) - { - return; - } - if ( isDefined( self.deathmodel_attached ) ) - { - return; - } - self setmodel( smodel ); -} - -player_in_last_stand_within_range( range ) -{ - players = getplayers(); - if ( players.size == 1 ) - { - return; - } - _a1448 = players; - _k1448 = getFirstArrayKey( _a1448 ); - while ( isDefined( _k1448 ) ) - { - player = _a1448[ _k1448 ]; - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() && distancesquared( self.origin, player.origin ) < ( range * range ) && !isDefined( player.quadrotor_revive ) ) - { - return player; - } - _k1448 = getNextArrayKey( _a1448, _k1448 ); - } - return; -} - -watch_for_fail_revive( quad_rotor ) -{ - quadrotor = quad_rotor; - owner = quad_rotor.player_owner; - revive_target = quad_rotor.revive_target; - revive_target endon( "bled_out" ); - revive_target endon( "disconnect" ); - level thread kill_fx_if_target_revive( quadrotor, revive_target ); - revive_target.revive_hud settext( &"GAME_PLAYER_IS_REVIVING_YOU", owner ); - revive_target revive_hud_show_n_fade( 1 ); - wait 1; - if ( isDefined( revive_target ) ) - { - revive_target.quadrotor_revive = undefined; - } -} - -kill_fx_if_target_revive( quadrotor, revive_target ) -{ - e_fx = spawn( "script_model", quadrotor gettagorigin( "tag_origin" ) ); - e_fx setmodel( "tag_origin" ); - e_fx playsound( "zmb_drone_revive_fire" ); - e_fx playloopsound( "zmb_drone_revive_loop", 0,2 ); - playfxontag( level._effect[ "qd_revive" ], e_fx, "tag_origin" ); - e_fx moveto( revive_target.origin, 1 ); - timer = 0; - while ( 1 ) - { - if ( isDefined( revive_target ) && revive_target maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( quadrotor ) ) - { - wait 0,1; - timer += 0,1; - if ( timer >= 1 ) - { - playfxontag( level._effect[ "staff_soul" ], e_fx, "tag_origin" ); - e_fx stoploopsound( 0,1 ); - e_fx playsound( "zmb_drone_revive_revive_3d" ); - revive_target playsoundtoplayer( "zmb_drone_revive_revive_plr", revive_target ); - break; - } - else } - else } - e_fx delete(); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_challenges.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_challenges.gsc deleted file mode 100644 index fc2901d..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_challenges.gsc +++ /dev/null @@ -1,884 +0,0 @@ -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -#using_animtree( "fxanim_props_dlc4" ); - -init() -{ - level._challenges = spawnstruct(); - stats_init(); - level.a_m_challenge_boards = []; - level.a_uts_challenge_boxes = []; - a_m_challenge_boxes = getentarray( "challenge_box", "targetname" ); - array_thread( a_m_challenge_boxes, ::box_init ); - onplayerconnect_callback( ::onplayerconnect ); - n_bits = getminbitcountfornum( 14 ); - registerclientfield( "toplayer", "challenge_complete_1", 14000, 1, "int" ); - registerclientfield( "toplayer", "challenge_complete_2", 14000, 1, "int" ); - registerclientfield( "toplayer", "challenge_complete_3", 14000, 1, "int" ); - registerclientfield( "toplayer", "challenge_complete_4", 14000, 1, "int" ); -/# - level thread challenges_devgui(); -#/ -} - -onplayerconnect() -{ - player_stats_init( self.characterindex ); - _a55 = level._challenges.a_players[ self.characterindex ].a_stats; - _k55 = getFirstArrayKey( _a55 ); - while ( isDefined( _k55 ) ) - { - s_stat = _a55[ _k55 ]; - s_stat.b_display_tag = 1; - _a58 = level.a_m_challenge_boards; - _k58 = getFirstArrayKey( _a58 ); - while ( isDefined( _k58 ) ) - { - m_board = _a58[ _k58 ]; - m_board showpart( s_stat.str_medal_tag ); - m_board hidepart( s_stat.str_glow_tag ); - _k58 = getNextArrayKey( _a58, _k58 ); - } - _k55 = getNextArrayKey( _a55, _k55 ); - } - self thread onplayerspawned(); -} - -onplayerspawned() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - _a81 = level._challenges.a_players[ self.characterindex ].a_stats; - _k81 = getFirstArrayKey( _a81 ); - while ( isDefined( _k81 ) ) - { - s_stat = _a81[ _k81 ]; - while ( s_stat.b_medal_awarded && !s_stat.b_reward_claimed ) - { - _a85 = level.a_m_challenge_boards; - _k85 = getFirstArrayKey( _a85 ); - while ( isDefined( _k85 ) ) - { - m_board = _a85[ _k85 ]; - self setclientfieldtoplayer( s_stat.s_parent.cf_complete, 1 ); - _k85 = getNextArrayKey( _a85, _k85 ); - } - } - _k81 = getNextArrayKey( _a81, _k81 ); - } - _a92 = level._challenges.s_team.a_stats; - _k92 = getFirstArrayKey( _a92 ); - while ( isDefined( _k92 ) ) - { - s_stat = _a92[ _k92 ]; - while ( s_stat.b_medal_awarded && s_stat.a_b_player_rewarded[ self.characterindex ] ) - { - _a96 = level.a_m_challenge_boards; - _k96 = getFirstArrayKey( _a96 ); - while ( isDefined( _k96 ) ) - { - m_board = _a96[ _k96 ]; - self setclientfieldtoplayer( s_stat.s_parent.cf_complete, 1 ); - _k96 = getNextArrayKey( _a96, _k96 ); - } - } - _k92 = getNextArrayKey( _a92, _k92 ); - } - } -} - -stats_init() -{ - level._challenges.a_stats = []; - if ( isDefined( level.challenges_add_stats ) ) - { - [[ level.challenges_add_stats ]](); - } - _a124 = level._challenges.a_stats; - _k124 = getFirstArrayKey( _a124 ); - while ( isDefined( _k124 ) ) - { - stat = _a124[ _k124 ]; - if ( isDefined( stat.fp_init_stat ) ) - { - level thread [[ stat.fp_init_stat ]](); - } - _k124 = getNextArrayKey( _a124, _k124 ); - } - level._challenges.a_players = []; - i = 0; - while ( i < 4 ) - { - player_stats_init( i ); - i++; - } - team_stats_init(); -} - -add_stat( str_name, b_team, str_hint, n_goal, str_reward_model, fp_give_reward, fp_init_stat ) -{ - if ( !isDefined( b_team ) ) - { - b_team = 0; - } - if ( !isDefined( str_hint ) ) - { - str_hint = &""; - } - if ( !isDefined( n_goal ) ) - { - n_goal = 1; - } - stat = spawnstruct(); - stat.str_name = str_name; - stat.b_team = b_team; - stat.str_hint = str_hint; - stat.n_goal = n_goal; - stat.str_reward_model = str_reward_model; - stat.fp_give_reward = fp_give_reward; - if ( isDefined( fp_init_stat ) ) - { - stat.fp_init_stat = fp_init_stat; - } - level._challenges.a_stats[ str_name ] = stat; - stat.cf_complete = "challenge_complete_" + level._challenges.a_stats.size; -} - -player_stats_init( n_index ) -{ - a_characters = array( "d", "n", "r", "t" ); - str_character = a_characters[ n_index ]; - if ( !isDefined( level._challenges.a_players[ n_index ] ) ) - { - level._challenges.a_players[ n_index ] = spawnstruct(); - level._challenges.a_players[ n_index ].a_stats = []; - } - s_player_set = level._challenges.a_players[ n_index ]; - n_challenge_index = 1; - _a196 = level._challenges.a_stats; - _k196 = getFirstArrayKey( _a196 ); - while ( isDefined( _k196 ) ) - { - s_challenge = _a196[ _k196 ]; - if ( !s_challenge.b_team ) - { - if ( !isDefined( s_player_set.a_stats[ s_challenge.str_name ] ) ) - { - s_player_set.a_stats[ s_challenge.str_name ] = spawnstruct(); - } - s_stat = s_player_set.a_stats[ s_challenge.str_name ]; - s_stat.s_parent = s_challenge; - s_stat.n_value = 0; - s_stat.b_medal_awarded = 0; - s_stat.b_reward_claimed = 0; - n_index = level._challenges.a_stats.size + 1; - s_stat.str_medal_tag = "j_" + str_character + "_medal_0" + n_challenge_index; - s_stat.str_glow_tag = "j_" + str_character + "_glow_0" + n_challenge_index; - s_stat.b_display_tag = 0; - n_challenge_index++; - } - _k196 = getNextArrayKey( _a196, _k196 ); - } - s_player_set.n_completed = 0; - s_player_set.n_medals_held = 0; -} - -team_stats_init( n_index ) -{ - if ( !isDefined( level._challenges.s_team ) ) - { - level._challenges.s_team = spawnstruct(); - level._challenges.s_team.a_stats = []; - } - s_team_set = level._challenges.s_team; - _a243 = level._challenges.a_stats; - _k243 = getFirstArrayKey( _a243 ); - while ( isDefined( _k243 ) ) - { - s_challenge = _a243[ _k243 ]; - if ( s_challenge.b_team ) - { - if ( !isDefined( s_team_set.a_stats[ s_challenge.str_name ] ) ) - { - s_team_set.a_stats[ s_challenge.str_name ] = spawnstruct(); - } - s_stat = s_team_set.a_stats[ s_challenge.str_name ]; - s_stat.s_parent = s_challenge; - s_stat.n_value = 0; - s_stat.b_medal_awarded = 0; - s_stat.b_reward_claimed = 0; - s_stat.a_b_player_rewarded = array( 0, 0, 0, 0 ); - s_stat.str_medal_tag = "j_g_medal"; - s_stat.str_glow_tag = "j_g_glow"; - s_stat.b_display_tag = 1; - } - _k243 = getNextArrayKey( _a243, _k243 ); - } - s_team_set.n_completed = 0; - s_team_set.n_medals_held = 0; -} - -challenge_exists( str_name ) -{ - if ( isDefined( level._challenges.a_stats[ str_name ] ) ) - { - return 1; - } - else - { - return 0; - } -} - -get_stat( str_stat, player ) -{ - s_parent_stat = level._challenges.a_stats[ str_stat ]; -/# - assert( isDefined( s_parent_stat ), "Challenge stat: " + str_stat + " does not exist" ); -#/ -/# - if ( !s_parent_stat.b_team ) - { - assert( isDefined( player ), "Challenge stat: " + str_stat + " is a player stat, but no player passed in" ); - } -#/ - if ( s_parent_stat.b_team ) - { - s_stat = level._challenges.s_team.a_stats[ str_stat ]; - } - else - { - s_stat = level._challenges.a_players[ player.characterindex ].a_stats[ str_stat ]; - } - return s_stat; -} - -increment_stat( str_stat, n_increment ) -{ - if ( !isDefined( n_increment ) ) - { - n_increment = 1; - } - s_stat = get_stat( str_stat, self ); - if ( !s_stat.b_medal_awarded ) - { - s_stat.n_value += n_increment; - check_stat_complete( s_stat ); - } -} - -set_stat( str_stat, n_set ) -{ - s_stat = get_stat( str_stat, self ); - if ( !s_stat.b_medal_awarded ) - { - s_stat.n_value = n_set; - check_stat_complete( s_stat ); - } -} - -check_stat_complete( s_stat ) -{ - if ( s_stat.b_medal_awarded ) - { - return 1; - } - if ( s_stat.n_value >= s_stat.s_parent.n_goal ) - { - s_stat.b_medal_awarded = 1; - if ( s_stat.s_parent.b_team ) - { - s_team_stats = level._challenges.s_team; - s_team_stats.n_completed++; - s_team_stats.n_medals_held++; - a_players = get_players(); - _a358 = a_players; - _k358 = getFirstArrayKey( _a358 ); - while ( isDefined( _k358 ) ) - { - player = _a358[ _k358 ]; - player setclientfieldtoplayer( s_stat.s_parent.cf_complete, 1 ); - player playsound( "evt_medal_acquired" ); - wait_network_frame(); - _k358 = getNextArrayKey( _a358, _k358 ); - } - } - else s_player_stats = level._challenges.a_players[ self.characterindex ]; - s_player_stats.n_completed++; - s_player_stats.n_medals_held++; - self playsound( "evt_medal_acquired" ); - self setclientfieldtoplayer( s_stat.s_parent.cf_complete, 1 ); - _a376 = level.a_m_challenge_boards; - _k376 = getFirstArrayKey( _a376 ); - while ( isDefined( _k376 ) ) - { - m_board = _a376[ _k376 ]; - m_board showpart( s_stat.str_glow_tag ); - _k376 = getNextArrayKey( _a376, _k376 ); - } - if ( isplayer( self ) ) - { - if ( ( level._challenges.a_players[ self.characterindex ].n_completed + level._challenges.s_team.n_completed ) == level._challenges.a_stats.size ) - { - self notify( "all_challenges_complete" ); - } - } - else - { - _a391 = get_players(); - _k391 = getFirstArrayKey( _a391 ); - while ( isDefined( _k391 ) ) - { - player = _a391[ _k391 ]; - if ( isDefined( player.characterindex ) ) - { - if ( ( level._challenges.a_players[ player.characterindex ].n_completed + level._challenges.s_team.n_completed ) == level._challenges.a_stats.size ) - { - player notify( "all_challenges_complete" ); - } - } - _k391 = getNextArrayKey( _a391, _k391 ); - } - } - wait_network_frame(); - } -} - -stat_reward_available( stat, player ) -{ - if ( isstring( stat ) ) - { - s_stat = get_stat( stat, player ); - } - else - { - s_stat = stat; - } - if ( !s_stat.b_medal_awarded ) - { - return 0; - } - if ( s_stat.b_reward_claimed ) - { - return 0; - } - if ( s_stat.s_parent.b_team && s_stat.a_b_player_rewarded[ player.characterindex ] ) - { - return 0; - } - return 1; -} - -player_has_unclaimed_team_reward() -{ - _a441 = level._challenges.s_team.a_stats; - _k441 = getFirstArrayKey( _a441 ); - while ( isDefined( _k441 ) ) - { - s_stat = _a441[ _k441 ]; - if ( s_stat.b_medal_awarded && !s_stat.a_b_player_rewarded[ self.characterindex ] ) - { - return 1; - } - _k441 = getNextArrayKey( _a441, _k441 ); - } - return 0; -} - -board_init( m_board ) -{ - self.m_board = m_board; - a_challenges = getarraykeys( level._challenges.a_stats ); - a_characters = array( "d", "n", "r", "t" ); - m_board.a_s_medal_tags = []; - b_team_hint_added = 0; - _a473 = level._challenges.a_players; - n_char_index = getFirstArrayKey( _a473 ); - while ( isDefined( n_char_index ) ) - { - s_set = _a473[ n_char_index ]; - str_character = a_characters[ n_char_index ]; - n_challenge_index = 1; - _a477 = s_set.a_stats; - _k477 = getFirstArrayKey( _a477 ); - while ( isDefined( _k477 ) ) - { - s_stat = _a477[ _k477 ]; - str_medal_tag = "j_" + str_character + "_medal_0" + n_challenge_index; - str_glow_tag = "j_" + str_character + "_glow_0" + n_challenge_index; - s_tag = spawnstruct(); - s_tag.v_origin = m_board gettagorigin( str_medal_tag ); - s_tag.s_stat = s_stat; - s_tag.n_character_index = n_char_index; - s_tag.str_medal_tag = str_medal_tag; - m_board.a_s_medal_tags[ m_board.a_s_medal_tags.size ] = s_tag; - m_board hidepart( str_medal_tag ); - m_board hidepart( str_glow_tag ); - n_challenge_index++; - _k477 = getNextArrayKey( _a477, _k477 ); - } - n_char_index = getNextArrayKey( _a473, n_char_index ); - } - _a495 = level._challenges.s_team.a_stats; - _k495 = getFirstArrayKey( _a495 ); - while ( isDefined( _k495 ) ) - { - s_stat = _a495[ _k495 ]; - str_medal_tag = "j_g_medal"; - str_glow_tag = "j_g_glow"; - s_tag = spawnstruct(); - s_tag.v_origin = m_board gettagorigin( str_medal_tag ); - s_tag.s_stat = s_stat; - s_tag.n_character_index = 4; - s_tag.str_medal_tag = str_medal_tag; - m_board.a_s_medal_tags[ m_board.a_s_medal_tags.size ] = s_tag; - m_board hidepart( str_glow_tag ); - b_team_hint_added = 1; - _k495 = getNextArrayKey( _a495, _k495 ); - } - level.a_m_challenge_boards[ level.a_m_challenge_boards.size ] = m_board; -} - -box_init() -{ - self useanimtree( -1 ); - s_unitrigger_stub = spawnstruct(); - s_unitrigger_stub.origin = self.origin + ( 0, 0, 0 ); - s_unitrigger_stub.angles = self.angles; - s_unitrigger_stub.radius = 64; - s_unitrigger_stub.script_length = 64; - s_unitrigger_stub.script_width = 64; - s_unitrigger_stub.script_height = 64; - s_unitrigger_stub.cursor_hint = "HINT_NOICON"; - s_unitrigger_stub.hint_string = &""; - s_unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - s_unitrigger_stub.prompt_and_visibility_func = ::box_prompt_and_visiblity; - s_unitrigger_stub ent_flag_init( "waiting_for_grab" ); - s_unitrigger_stub ent_flag_init( "reward_timeout" ); - s_unitrigger_stub.b_busy = 0; - s_unitrigger_stub.m_box = self; - s_unitrigger_stub.b_disable_trigger = 0; - if ( isDefined( self.script_string ) ) - { - s_unitrigger_stub.str_location = self.script_string; - } - if ( isDefined( s_unitrigger_stub.m_box.target ) ) - { - s_unitrigger_stub.m_board = getent( s_unitrigger_stub.m_box.target, "targetname" ); - s_unitrigger_stub board_init( s_unitrigger_stub.m_board ); - } - unitrigger_force_per_player_triggers( s_unitrigger_stub, 1 ); - level.a_uts_challenge_boxes[ level.a_uts_challenge_boxes.size ] = s_unitrigger_stub; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( s_unitrigger_stub, ::box_think ); -} - -box_prompt_and_visiblity( player ) -{ - if ( self.stub.b_disable_trigger ) - { - return 0; - } - self thread update_box_prompt( player ); - return 1; -} - -update_box_prompt( player ) -{ - self endon( "kill_trigger" ); - player endon( "death_or_disconnect" ); - str_hint = &""; - str_old_hint = &""; - m_board = self.stub.m_board; - self sethintstring( str_hint ); - while ( 1 ) - { - s_hint_tag = undefined; - b_showing_stat = 0; - self.b_can_open = 0; - if ( self.stub.b_busy ) - { - if ( self.stub ent_flag( "waiting_for_grab" ) || !isDefined( self.stub.player_using ) && self.stub.player_using == player ) - { - str_hint = &"ZM_TOMB_CH_G"; - } - else - { - str_hint = &""; - } - } - else str_hint = &""; - player.s_lookat_stat = undefined; - n_closest_dot = 0,996; - v_eye_origin = player getplayercamerapos(); - v_eye_direction = anglesToForward( player getplayerangles() ); - _a619 = m_board.a_s_medal_tags; - str_tag = getFirstArrayKey( _a619 ); - while ( isDefined( str_tag ) ) - { - s_tag = _a619[ str_tag ]; - if ( !s_tag.s_stat.b_display_tag ) - { - } - else - { - v_tag_origin = s_tag.v_origin; - v_eye_to_tag = vectornormalize( v_tag_origin - v_eye_origin ); - n_dot = vectordot( v_eye_to_tag, v_eye_direction ); - if ( n_dot > n_closest_dot ) - { - n_closest_dot = n_dot; - str_hint = s_tag.s_stat.s_parent.str_hint; - s_hint_tag = s_tag; - b_showing_stat = 1; - self.b_can_open = 0; - if ( s_tag.n_character_index == player.characterindex || s_tag.n_character_index == 4 ) - { - player.s_lookat_stat = s_tag.s_stat; - if ( stat_reward_available( s_tag.s_stat, player ) ) - { - str_hint = &"ZM_TOMB_CH_S"; - b_showing_stat = 0; - self.b_can_open = 1; - } - } - } - } - str_tag = getNextArrayKey( _a619, str_tag ); - } - if ( str_hint == &"" ) - { - s_player = level._challenges.a_players[ player.characterindex ]; - s_team = level._challenges.s_team; - if ( s_player.n_medals_held > 0 || player player_has_unclaimed_team_reward() ) - { - str_hint = &"ZM_TOMB_CH_O"; - self.b_can_open = 1; - break; - } - else - { - str_hint = &"ZM_TOMB_CH_V"; - } - } - if ( str_old_hint != str_hint ) - { - str_old_hint = str_hint; - self.stub.hint_string = str_hint; - if ( isDefined( s_hint_tag ) ) - { - str_name = s_hint_tag.s_stat.s_parent.str_name; - n_character_index = s_hint_tag.n_character_index; - if ( n_character_index != 4 ) - { - s_player_stat = level._challenges.a_players[ n_character_index ].a_stats[ str_name ]; - break; - } - } - self sethintstring( self.stub.hint_string ); - } - wait 0,1; - } -} - -box_think() -{ - self endon( "kill_trigger" ); - s_team = level._challenges.s_team; - while ( 1 ) - { - self waittill( "trigger", player ); - while ( !is_player_valid( player ) ) - { - continue; - } - while ( self.stub.b_busy ) - { - current_weapon = player getcurrentweapon(); - while ( isDefined( player.intermission ) && !player.intermission && !is_placeable_mine( current_weapon ) && !is_equipment_that_blocks_purchase( current_weapon ) && current_weapon != "none" && !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() && !player isthrowinggrenade() && !player in_revive_trigger() || player isswitchingweapons() && player.is_drinking > 0 ) - { - wait 0,1; - } - if ( self.stub ent_flag( "waiting_for_grab" ) ) - { - if ( !isDefined( self.stub.player_using ) ) - { - self.stub.player_using = player; - } - if ( player == self.stub.player_using ) - { - self.stub ent_flag_clear( "waiting_for_grab" ); - } - } - wait 0,05; - } - if ( self.b_can_open ) - { - self.stub.hint_string = &""; - self sethintstring( self.stub.hint_string ); - level thread open_box( player, self.stub ); - } - } -} - -get_reward_category( player, s_select_stat ) -{ - if ( isDefined( s_select_stat ) || s_select_stat.s_parent.b_team && level._challenges.s_team.n_medals_held > 0 ) - { - return level._challenges.s_team; - } - if ( level._challenges.a_players[ player.characterindex ].n_medals_held > 0 ) - { - return level._challenges.a_players[ player.characterindex ]; - } - return undefined; -} - -get_reward_stat( s_category ) -{ - _a809 = s_category.a_stats; - _k809 = getFirstArrayKey( _a809 ); - while ( isDefined( _k809 ) ) - { - s_stat = _a809[ _k809 ]; - if ( s_stat.b_medal_awarded && !s_stat.b_reward_claimed ) - { - if ( s_stat.s_parent.b_team && s_stat.a_b_player_rewarded[ self.characterindex ] ) - { - break; - } - else - { - return s_stat; - } - } - _k809 = getNextArrayKey( _a809, _k809 ); - } - return undefined; -} - -open_box( player, ut_stub, fp_reward_override, param1 ) -{ - m_box = ut_stub.m_box; - while ( ut_stub.b_busy ) - { - wait 1; - } - ut_stub.b_busy = 1; - ut_stub.player_using = player; - if ( isDefined( player ) && isDefined( player.s_lookat_stat ) ) - { - s_select_stat = player.s_lookat_stat; - } - m_box setanim( %o_zombie_dlc4_challenge_box_open ); - m_box delay_thread( 0,75, ::setclientfield, "foot_print_box_glow", 1 ); - wait 0,5; - if ( isDefined( fp_reward_override ) ) - { - ut_stub [[ fp_reward_override ]]( player, param1 ); - } - else - { - ut_stub spawn_reward( player, s_select_stat ); - } - wait 1; - m_box setanim( %o_zombie_dlc4_challenge_box_close ); - m_box delay_thread( 0,75, ::setclientfield, "foot_print_box_glow", 0 ); - wait 2; - ut_stub.b_busy = 0; - ut_stub.player_using = undefined; -} - -spawn_reward( player, s_select_stat ) -{ - if ( isDefined( player ) ) - { - player endon( "death_or_disconnect" ); - if ( isDefined( s_select_stat ) ) - { - s_category = get_reward_category( player, s_select_stat ); - if ( stat_reward_available( s_select_stat, player ) ) - { - s_stat = s_select_stat; - } - } - if ( !isDefined( s_stat ) ) - { - s_category = get_reward_category( player ); - s_stat = player get_reward_stat( s_category ); - } - if ( self [[ s_stat.s_parent.fp_give_reward ]]( player, s_stat ) ) - { - if ( isDefined( s_stat.s_parent.cf_complete ) ) - { - player setclientfieldtoplayer( s_stat.s_parent.cf_complete, 0 ); - } - while ( s_stat.s_parent.b_team ) - { - s_stat.a_b_player_rewarded[ player.characterindex ] = 1; - a_players = get_players(); - _a917 = a_players; - _k917 = getFirstArrayKey( _a917 ); - while ( isDefined( _k917 ) ) - { - player = _a917[ _k917 ]; - if ( !s_stat.a_b_player_rewarded[ player.characterindex ] ) - { - return; - } - _k917 = getNextArrayKey( _a917, _k917 ); - } - } - s_stat.b_reward_claimed = 1; - s_category.n_medals_held--; - - } - } -} - -reward_grab_wait( n_timeout ) -{ - if ( !isDefined( n_timeout ) ) - { - n_timeout = 10; - } - self ent_flag_clear( "reward_timeout" ); - self ent_flag_set( "waiting_for_grab" ); - self endon( "waiting_for_grab" ); - if ( n_timeout > 0 ) - { - wait n_timeout; - self ent_flag_set( "reward_timeout" ); - self ent_flag_clear( "waiting_for_grab" ); - } - else - { - self ent_flag_waitopen( "waiting_for_grab" ); - } -} - -reward_sink( n_delay, n_z, n_time ) -{ - if ( isDefined( n_delay ) ) - { - wait n_delay; - if ( isDefined( self ) ) - { - self movez( n_z * -1, n_time ); - } - } -} - -reward_rise_and_grab( m_reward, n_z, n_rise_time, n_delay, n_timeout ) -{ - m_reward movez( n_z, n_rise_time ); - wait n_rise_time; - if ( n_timeout > 0 ) - { - m_reward thread reward_sink( n_delay, n_z, n_timeout + 1 ); - } - self reward_grab_wait( n_timeout ); - if ( self ent_flag( "reward_timeout" ) ) - { - return 0; - } - return 1; -} - -reward_points( player, s_stat ) -{ - player maps/mp/zombies/_zm_score::add_to_player_score( 2500 ); -} - -challenges_devgui() -{ -/# - setdvar( "award_challenge", "0" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Challenges:10/Award Player1" "award_challenge 1"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Challenges:10/Award Player2" "award_challenge 2"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Challenges:10/Award Player3" "award_challenge 3"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Tomb:1/Challenges:10/Award Team" "award_challenge 4"\n" ); - thread watch_devgui_award_challenges(); -#/ -} - -watch_devgui_award_challenges() -{ -/# - while ( 1 ) - { - n_award_challenge = getDvarInt( "award_challenge" ); - if ( n_award_challenge != 0 ) - { - devgui_award_challenge( n_award_challenge ); - setdvarint( "award_challenge", 0 ); - } - wait 0,5; -#/ - } -} - -devgui_award_challenge( n_index ) -{ -/# - if ( n_index == 4 ) - { - s_team_stats = level._challenges.s_team; - s_team_stats.n_completed = 1; - s_team_stats.n_medals_held = 1; - a_keys = getarraykeys( level._challenges.s_team.a_stats ); - s_stat = level._challenges.s_team.a_stats[ a_keys[ 0 ] ]; - s_stat.b_medal_awarded = 1; - s_stat.b_reward_claimed = 0; - a_players = get_players(); - _a1055 = a_players; - _k1055 = getFirstArrayKey( _a1055 ); - while ( isDefined( _k1055 ) ) - { - player = _a1055[ _k1055 ]; - s_stat.a_b_player_rewarded[ player.characterindex ] = 0; - player setclientfieldtoplayer( s_stat.s_parent.cf_complete, 1 ); - _k1055 = getNextArrayKey( _a1055, _k1055 ); - } - _a1061 = level.a_m_challenge_boards; - _k1061 = getFirstArrayKey( _a1061 ); - while ( isDefined( _k1061 ) ) - { - m_board = _a1061[ _k1061 ]; - m_board showpart( s_stat.str_glow_tag ); - _k1061 = getNextArrayKey( _a1061, _k1061 ); - } - } - else a_keys = getarraykeys( level._challenges.a_players[ 0 ].a_stats ); - a_players = get_players(); - _a1071 = a_players; - _k1071 = getFirstArrayKey( _a1071 ); - while ( isDefined( _k1071 ) ) - { - player = _a1071[ _k1071 ]; - s_player_data = level._challenges.a_players[ player.characterindex ]; - s_player_data.n_completed++; - s_player_data.n_medals_held++; - s_stat = s_player_data.a_stats[ a_keys[ n_index - 1 ] ]; - s_stat.b_medal_awarded = 1; - s_stat.b_reward_claimed = 0; - player setclientfieldtoplayer( s_stat.s_parent.cf_complete, 1 ); - _a1082 = level.a_m_challenge_boards; - _k1082 = getFirstArrayKey( _a1082 ); - while ( isDefined( _k1082 ) ) - { - m_board = _a1082[ _k1082 ]; - m_board showpart( s_stat.str_glow_tag ); - _k1082 = getNextArrayKey( _a1082, _k1082 ); - } - _k1071 = getNextArrayKey( _a1071, _k1071 ); -#/ - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_craftables.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_craftables.gsc deleted file mode 100644 index cd59548..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_craftables.gsc +++ /dev/null @@ -1,3241 +0,0 @@ -#include maps/mp/_demo; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_craftables; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - precachestring( &"ZOMBIE_BUILDING" ); - precachestring( &"ZOMBIE_BUILD_PIECE_MISSING" ); - precachestring( &"ZOMBIE_BUILD_PIECE_GRAB" ); - precacheitem( "zombie_builder_zm" ); - precacheitem( "buildable_piece_zm" ); - level.craftable_piece_swap_allowed = 1; - zombie_craftables_callbacks = []; - level.craftablepickups = []; - level.craftables_crafted = []; - level.a_uts_craftables = []; - level.craftable_piece_count = 0; - level._effect[ "building_dust" ] = loadfx( "maps/zombie/fx_zmb_buildable_assemble_dust" ); - if ( isDefined( level.init_craftables ) ) - { - [[ level.init_craftables ]](); - } - open_table = spawnstruct(); - open_table.name = "open_table"; - open_table.triggerthink = ::opentablecraftable; - open_table.custom_craftablestub_update_prompt = ::open_craftablestub_update_prompt; - include_zombie_craftable( open_table ); - add_zombie_craftable( "open_table", &"" ); - if ( isDefined( level.use_swipe_protection ) ) - { - onplayerconnect_callback( ::craftables_watch_swipes ); - } -} - -anystub_update_prompt( player ) -{ - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || player in_revive_trigger() ) - { - self.hint_string = ""; - return 0; - } - if ( isDefined( player.is_drinking ) && player.is_drinking > 0 ) - { - self.hint_string = ""; - return 0; - } - if ( isDefined( player.screecher_weapon ) ) - { - self.hint_string = ""; - return 0; - } - return 1; -} - -anystub_get_unitrigger_origin() -{ - if ( isDefined( self.origin_parent ) ) - { - return self.origin_parent.origin; - } - return self.origin; -} - -anystub_on_spawn_trigger( trigger ) -{ - if ( isDefined( self.link_parent ) ) - { - trigger enablelinkto(); - trigger linkto( self.link_parent ); - trigger setmovingplatformenabled( 1 ); - } -} - -craftables_watch_swipes() -{ - self endon( "disconnect" ); - self notify( "craftables_watch_swipes" ); - self endon( "craftables_watch_swipes" ); - while ( 1 ) - { - self waittill( "melee_swipe", zombie ); - while ( distancesquared( zombie.origin, self.origin ) > ( zombie.meleeattackdist * zombie.meleeattackdist ) ) - { - continue; - } - trigger = level._unitriggers.trigger_pool[ self getentitynumber() ]; - if ( isDefined( trigger ) && isDefined( trigger.stub.piece ) ) - { - piece = trigger.stub.piece; - if ( !isDefined( piece.damage ) ) - { - piece.damage = 0; - } - piece.damage++; - if ( piece.damage > 12 ) - { - thread maps/mp/zombies/_zm_equipment::equipment_disappear_fx( trigger.stub maps/mp/zombies/_zm_unitrigger::unitrigger_origin() ); - piece maps/mp/zombies/_zm_craftables::piece_unspawn(); - self maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 ); - if ( isalive( self ) ) - { - self playlocalsound( level.zmb_laugh_alias ); - } - } - } - } -} - -explosiondamage( damage, pos ) -{ -/# - println( "ZM CRAFTABLE Explode do " + damage + " damage to " + self.name + "\n" ); -#/ - self dodamage( damage, pos ); -} - -make_zombie_craftable_open( str_craftable, str_model, v_angle_offset, v_origin_offset ) -{ -/# - assert( isDefined( level.zombie_craftablestubs[ str_craftable ] ), "Craftable " + str_craftable + " has not been added yet." ); -#/ - precachemodel( str_model ); - s_craftable = level.zombie_craftablestubs[ str_craftable ]; - s_craftable.is_open_table = 1; - s_craftable.str_model = str_model; - s_craftable.v_angle_offset = v_angle_offset; - s_craftable.v_origin_offset = v_origin_offset; -} - -add_zombie_craftable( craftable_name, str_to_craft, str_crafting, str_taken, onfullycrafted, need_all_pieces ) -{ - if ( !isDefined( level.zombie_include_craftables ) ) - { - level.zombie_include_craftables = []; - } - if ( isDefined( level.zombie_include_craftables ) && !isDefined( level.zombie_include_craftables[ craftable_name ] ) ) - { - return; - } - if ( isDefined( str_to_craft ) ) - { - precachestring( str_to_craft ); - } - if ( isDefined( str_crafting ) ) - { - precachestring( str_crafting ); - } - if ( isDefined( str_taken ) ) - { - precachestring( str_taken ); - } - craftable_struct = level.zombie_include_craftables[ craftable_name ]; - if ( !isDefined( level.zombie_craftablestubs ) ) - { - level.zombie_craftablestubs = []; - } - craftable_struct.str_to_craft = str_to_craft; - craftable_struct.str_crafting = str_crafting; - craftable_struct.str_taken = str_taken; - craftable_struct.onfullycrafted = onfullycrafted; - craftable_struct.need_all_pieces = need_all_pieces; -/# - println( "ZM >> Looking for craftable - " + craftable_struct.name ); -#/ - level.zombie_craftablestubs[ craftable_struct.name ] = craftable_struct; - if ( !level.createfx_enabled ) - { - if ( level.zombie_craftablestubs.size == 2 ) - { - bits = getminbitcountfornum( level.craftable_piece_count ); - registerclientfield( "toplayer", "craftable", 9000, bits, "int" ); - } - } -} - -add_zombie_craftable_vox_category( craftable_name, vox_id ) -{ - craftable_struct = level.zombie_include_craftables[ craftable_name ]; - craftable_struct.vox_id = vox_id; -} - -include_zombie_craftable( craftablestub ) -{ - if ( !isDefined( level.zombie_include_craftables ) ) - { - level.zombie_include_craftables = []; - } -/# - println( "ZM >> Including craftable - " + craftablestub.name ); -#/ - level.zombie_include_craftables[ craftablestub.name ] = craftablestub; -} - -generate_zombie_craftable_piece( craftablename, piecename, modelname, radius, height, drop_offset, hud_icon, onpickup, ondrop, oncrafted, use_spawn_num, tag_name, can_reuse, client_field_value, is_shared, vox_id, b_one_time_vo ) -{ - if ( !isDefined( is_shared ) ) - { - is_shared = 0; - } - if ( !isDefined( b_one_time_vo ) ) - { - b_one_time_vo = 0; - } - precachemodel( modelname ); - if ( isDefined( hud_icon ) ) - { - precacheshader( hud_icon ); - } - piecestub = spawnstruct(); - craftable_pieces = []; - piece_alias = ""; - if ( !isDefined( piecename ) ) - { - piecename = modelname; - } - craftable_pieces_structs = getstructarray( ( craftablename + "_" ) + piecename, "targetname" ); -/# - if ( craftable_pieces_structs.size < 1 ) - { - println( "ERROR: Missing craftable piece <" + craftablename + "> <" + piecename + ">\n" ); -#/ - } - _a345 = craftable_pieces_structs; - index = getFirstArrayKey( _a345 ); - while ( isDefined( index ) ) - { - struct = _a345[ index ]; - craftable_pieces[ index ] = struct; - craftable_pieces[ index ].hasspawned = 0; - index = getNextArrayKey( _a345, index ); - } - piecestub.spawns = craftable_pieces; - piecestub.craftablename = craftablename; - piecestub.piecename = piecename; - piecestub.modelname = modelname; - piecestub.hud_icon = hud_icon; - piecestub.radius = radius; - piecestub.height = height; - piecestub.tag_name = tag_name; - piecestub.can_reuse = can_reuse; - piecestub.drop_offset = drop_offset; - piecestub.max_instances = 256; - piecestub.onpickup = onpickup; - piecestub.ondrop = ondrop; - piecestub.oncrafted = oncrafted; - piecestub.use_spawn_num = use_spawn_num; - piecestub.is_shared = is_shared; - piecestub.vox_id = vox_id; - if ( isDefined( b_one_time_vo ) && b_one_time_vo ) - { - piecestub.b_one_time_vo = b_one_time_vo; - } - if ( isDefined( client_field_value ) ) - { - if ( isDefined( is_shared ) && is_shared ) - { -/# - assert( isstring( client_field_value ), "Client field value for shared item (" + piecename + ") should be a string (the name of the ClientField to use)" ); -#/ - piecestub.client_field_id = client_field_value; - } - else - { - piecestub.client_field_state = client_field_value; - } - } - return piecestub; -} - -manage_multiple_pieces( max_instances ) -{ - self.max_instances = max_instances; - self.managing_pieces = 1; - self.piece_allocated = []; -} - -combine_craftable_pieces( piece1, piece2, piece3 ) -{ - spawns1 = piece1.spawns; - spawns2 = piece2.spawns; - spawns = arraycombine( spawns1, spawns2, 1, 0 ); - if ( isDefined( piece3 ) ) - { - spawns3 = piece3.spawns; - spawns = arraycombine( spawns, spawns3, 1, 0 ); - spawns = array_randomize( spawns ); - piece3.spawns = spawns; - } - else - { - spawns = array_randomize( spawns ); - } - piece1.spawns = spawns; - piece2.spawns = spawns; -} - -add_craftable_piece( piecestub, tag_name, can_reuse ) -{ - if ( !isDefined( self.a_piecestubs ) ) - { - self.a_piecestubs = []; - } - if ( isDefined( tag_name ) ) - { - piecestub.tag_name = tag_name; - } - if ( isDefined( can_reuse ) ) - { - piecestub.can_reuse = can_reuse; - } - self.a_piecestubs[ self.a_piecestubs.size ] = piecestub; -} - -player_drop_piece_on_downed() -{ - self endon( "craftable_piece_released" ); - self waittill( "bled_out" ); - onplayerlaststand(); -} - -onplayerlaststand() -{ - piece = self.current_craftable_piece; - if ( isDefined( piece ) ) - { - return_to_start_pos = 0; - if ( isDefined( level.safe_place_for_craftable_piece ) ) - { - if ( !( self [[ level.safe_place_for_craftable_piece ]]( piece ) ) ) - { - return_to_start_pos = 1; - } - } - if ( return_to_start_pos ) - { - piece piece_spawn_at(); - } - else - { - piece piece_spawn_at( self.origin + vectorScale( ( 0, 0, 1 ), 5 ), self.angles ); - } - if ( isDefined( piece.ondrop ) ) - { - piece [[ piece.ondrop ]]( self ); - } - self setclientfieldtoplayer( "craftable", 0 ); - } - self.current_craftable_piece = undefined; - self notify( "craftable_piece_released" ); -} - -piecestub_get_unitrigger_origin() -{ - if ( isDefined( self.origin_parent ) ) - { - return self.origin_parent.origin + vectorScale( ( 0, 0, 1 ), 12 ); - } - return self.origin; -} - -generate_piece_unitrigger( classname, origin, angles, flags, radius, script_height, moving ) -{ - if ( !isDefined( radius ) ) - { - radius = 64; - } - if ( !isDefined( script_height ) ) - { - script_height = 64; - } - script_width = script_height; - if ( !isDefined( script_width ) ) - { - script_width = 64; - } - script_length = script_height; - if ( !isDefined( script_length ) ) - { - script_length = 64; - } - unitrigger_stub = spawnstruct(); - unitrigger_stub.origin = origin; - if ( isDefined( script_length ) ) - { - unitrigger_stub.script_length = script_length; - } - else - { - unitrigger_stub.script_length = 13,5; - } - if ( isDefined( script_width ) ) - { - unitrigger_stub.script_width = script_width; - } - else - { - unitrigger_stub.script_width = 27,5; - } - if ( isDefined( script_height ) ) - { - unitrigger_stub.script_height = script_height; - } - else - { - unitrigger_stub.script_height = 24; - } - unitrigger_stub.radius = radius; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - unitrigger_stub.hint_string = &"ZOMBIE_BUILD_PIECE_GRAB"; - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.require_look_at = 0; - switch( classname ) - { - case "trigger_radius": - unitrigger_stub.script_unitrigger_type = "unitrigger_radius"; - break; - case "trigger_radius_use": - unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - break; - case "trigger_box": - unitrigger_stub.script_unitrigger_type = "unitrigger_box"; - break; - case "trigger_box_use": - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - break; - } - unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - unitrigger_stub.prompt_and_visibility_func = ::piecetrigger_update_prompt; - unitrigger_stub.originfunc = ::piecestub_get_unitrigger_origin; - unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; - if ( isDefined( moving ) && moving ) - { - maps/mp/zombies/_zm_unitrigger::register_unitrigger( unitrigger_stub, ::piece_unitrigger_think ); - } - else - { - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::piece_unitrigger_think ); - } - return unitrigger_stub; -} - -piecetrigger_update_prompt( player ) -{ - can_use = self.stub piecestub_update_prompt( player ); - self setinvisibletoplayer( player, !can_use ); - self sethintstring( self.stub.hint_string ); - return can_use; -} - -piecestub_update_prompt( player ) -{ - if ( !self anystub_update_prompt( player ) ) - { - return 0; - } - if ( isDefined( player.current_craftable_piece ) && isDefined( self.piece.is_shared ) && !self.piece.is_shared ) - { - if ( !level.craftable_piece_swap_allowed ) - { - self.hint_string = &"ZM_CRAFTABLES_PIECE_NO_SWITCH"; - } - else - { - spiece = self.piece; - cpiece = player.current_craftable_piece; - if ( spiece.piecename == cpiece.piecename && spiece.craftablename == cpiece.craftablename ) - { - self.hint_string = ""; - return 0; - } - self.hint_string = &"ZOMBIE_BUILD_PIECE_SWITCH"; - } - } - else - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_GRAB"; - } - return 1; -} - -piece_unitrigger_think() -{ - self endon( "kill_trigger" ); - while ( 1 ) - { - self waittill( "trigger", player ); - while ( player != self.parent_player ) - { - continue; - } - while ( isDefined( player.screecher_weapon ) ) - { - continue; - } - while ( !level.craftable_piece_swap_allowed && isDefined( player.current_craftable_piece ) && isDefined( self.stub.piece.is_shared ) && !self.stub.piece.is_shared ) - { - continue; - } - while ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - } - status = player player_can_take_piece( self.stub.piece ); - if ( !status ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - continue; - } - else - { - player thread player_take_piece( self.stub.piece ); - } - } -} - -player_can_take_piece( piece ) -{ - if ( !isDefined( piece ) ) - { - return 0; - } - return 1; -} - -dbline( from, to ) -{ -/# - time = 20; - while ( time > 0 ) - { - line( from, to, ( 0, 0, 1 ), 0, 1 ); - time -= 0,05; - wait 0,05; -#/ - } -} - -player_throw_piece( piece, origin, dir, return_to_spawn, return_time, endangles ) -{ -/# - assert( isDefined( piece ) ); -#/ - if ( isDefined( piece ) ) - { -/# - thread dbline( origin, origin + dir ); -#/ - pass = 0; - done = 0; - altmodel = undefined; - while ( pass < 2 && !done ) - { - grenade = self magicgrenadetype( "buildable_piece_zm", origin, dir, 30000 ); - grenade thread watch_hit_players(); - grenade ghost(); - if ( !isDefined( altmodel ) ) - { - altmodel = spawn( "script_model", grenade.origin ); - altmodel setmodel( piece.modelname ); - } - altmodel.origin = grenade.angles; - altmodel.angles = grenade.angles; - altmodel linkto( grenade, "", ( 0, 0, 1 ), ( 0, 0, 1 ) ); - grenade.altmodel = altmodel; - grenade waittill( "stationary" ); - grenade_origin = grenade.origin; - grenade_angles = grenade.angles; - landed_on = grenade getgroundent(); - grenade delete(); - if ( isDefined( landed_on ) && landed_on == level ) - { - done = 1; - continue; - } - else - { - origin = grenade_origin; - dir = ( ( dir[ 0 ] * -1 ) / 10, ( dir[ 1 ] * -1 ) / 10, -1 ); - pass++; - } - } - if ( !isDefined( endangles ) ) - { - endangles = grenade_angles; - } - piece piece_spawn_at( grenade_origin, endangles ); - if ( isDefined( altmodel ) ) - { - altmodel delete(); - } - if ( isDefined( piece.ondrop ) ) - { - piece [[ piece.ondrop ]]( self ); - } - if ( isDefined( return_to_spawn ) && return_to_spawn ) - { - piece piece_wait_and_return( return_time ); - } - } -} - -watch_hit_players() -{ - self endon( "death" ); - self endon( "stationary" ); - while ( isDefined( self ) ) - { - self waittill( "grenade_bounce", pos, normal, ent ); - if ( isplayer( ent ) ) - { - ent explosiondamage( 25, pos ); - } - } -} - -piece_wait_and_return( return_time ) -{ - self endon( "pickup" ); - wait 0,15; - if ( isDefined( level.exploding_jetgun_fx ) ) - { - playfxontag( level.exploding_jetgun_fx, self.model, "tag_origin" ); - } - else - { - playfxontag( level._effect[ "powerup_on" ], self.model, "tag_origin" ); - } - wait ( return_time - 6 ); - self piece_hide(); - wait 1; - self piece_show(); - wait 1; - self piece_hide(); - wait 1; - self piece_show(); - wait 1; - self piece_hide(); - wait 1; - self piece_show(); - wait 1; - self notify( "respawn" ); - self piece_unspawn(); - self piece_spawn_at(); -} - -player_return_piece_to_original_spawn() -{ - self notify( "craftable_piece_released" ); - piece = self.current_craftable_piece; - self.current_craftable_piece = undefined; - if ( isDefined( piece ) ) - { - piece piece_spawn_at(); - self setclientfieldtoplayer( "craftable", 0 ); - } -} - -player_drop_piece_on_death() -{ - self notify( "craftable_piece_released" ); - self endon( "craftable_piece_released" ); - self thread player_drop_piece_on_downed(); - origin = self.origin; - angles = self.angles; - piece = self.current_craftable_piece; - self waittill( "disconnect" ); - piece piece_spawn_at( origin, angles ); - if ( isDefined( self ) ) - { - self setclientfieldtoplayer( "craftable", 0 ); - } -} - -player_drop_piece( piece ) -{ - if ( !isDefined( piece ) ) - { - piece = self.current_craftable_piece; - } - if ( isDefined( piece ) ) - { - piece.damage = 0; - piece piece_spawn_at( self.origin, self.angles ); - self setclientfieldtoplayer( "craftable", 0 ); - if ( isDefined( piece.ondrop ) ) - { - piece [[ piece.ondrop ]]( self ); - } - } - self.current_craftable_piece = undefined; - self notify( "craftable_piece_released" ); -} - -player_take_piece( piecespawn ) -{ - piecestub = piecespawn.piecestub; - damage = piecespawn.damage; - if ( isDefined( piecestub.is_shared ) && !piecestub.is_shared && isDefined( self.current_craftable_piece ) ) - { - other_piece = self.current_craftable_piece; - self player_drop_piece( self.current_craftable_piece ); - other_piece.damage = damage; - self do_player_general_vox( "general", "craft_swap" ); - } - if ( isDefined( piecestub.onpickup ) ) - { - piecespawn [[ piecestub.onpickup ]]( self ); - } - if ( isDefined( piecestub.is_shared ) && piecestub.is_shared ) - { - if ( isDefined( piecestub.client_field_id ) ) - { - level setclientfield( piecestub.client_field_id, 1 ); - } - } - else - { - if ( isDefined( piecestub.client_field_state ) ) - { - self setclientfieldtoplayer( "craftable", piecestub.client_field_state ); - } - } - piecespawn piece_unspawn(); - piecespawn notify( "pickup" ); - if ( isDefined( piecestub.is_shared ) && piecestub.is_shared ) - { - piecespawn.in_shared_inventory = 1; - } - else - { - self.current_craftable_piece = piecespawn; - self thread player_drop_piece_on_death(); - } - self track_craftable_piece_pickedup( piecespawn ); -} - -player_destroy_piece( piece ) -{ - if ( !isDefined( piece ) ) - { - piece = self.current_craftable_piece; - } - if ( isDefined( piece ) ) - { - self setclientfieldtoplayer( "craftable", 0 ); - } - self.current_craftable_piece = undefined; - self notify( "craftable_piece_released" ); -} - -claim_location( location ) -{ - if ( !isDefined( level.craftable_claimed_locations ) ) - { - level.craftable_claimed_locations = []; - } - if ( !isDefined( level.craftable_claimed_locations[ location ] ) ) - { - level.craftable_claimed_locations[ location ] = 1; - return 1; - } - return 0; -} - -is_point_in_craft_trigger( point ) -{ - candidate_list = []; - _a958 = level.zones; - _k958 = getFirstArrayKey( _a958 ); - while ( isDefined( _k958 ) ) - { - zone = _a958[ _k958 ]; - if ( isDefined( zone.unitrigger_stubs ) ) - { - candidate_list = arraycombine( candidate_list, zone.unitrigger_stubs, 1, 0 ); - } - _k958 = getNextArrayKey( _a958, _k958 ); - } - valid_range = 128; - closest = maps/mp/zombies/_zm_unitrigger::get_closest_unitriggers( point, candidate_list, valid_range ); - index = 0; - while ( index < closest.size ) - { - if ( isDefined( closest[ index ].registered ) && closest[ index ].registered && isDefined( closest[ index ].piece ) ) - { - return 1; - } - index++; - } - return 0; -} - -piece_allocate_spawn( piecestub ) -{ - self.current_spawn = 0; - self.managed_spawn = 1; - self.piecestub = piecestub; - if ( self.spawns.size >= 1 && self.spawns.size > 1 ) - { - any_good = 0; - any_okay = 0; - totalweight = 0; - spawnweights = []; - i = 0; - while ( i < self.spawns.size ) - { - if ( isDefined( piecestub.piece_allocated[ i ] ) && piecestub.piece_allocated[ i ] ) - { - spawnweights[ i ] = 0; - } - else - { - if ( is_point_in_craft_trigger( self.spawns[ i ].origin ) ) - { - any_okay = 1; - spawnweights[ i ] = 0,01; - break; - } - else - { - any_good = 1; - spawnweights[ i ] = 1; - } - } - totalweight += spawnweights[ i ]; - i++; - } -/# - if ( !any_good ) - { - assert( any_okay, "There is nowhere to spawn this piece" ); - } -#/ - if ( any_good ) - { - totalweight = float( int( totalweight ) ); - } - r = randomfloat( totalweight ); - i = 0; - while ( i < self.spawns.size ) - { - if ( !any_good || spawnweights[ i ] >= 1 ) - { - r -= spawnweights[ i ]; - if ( r < 0 ) - { - self.current_spawn = i; - piecestub.piece_allocated[ self.current_spawn ] = 1; - return; - } - } - i++; - } - self.current_spawn = randomint( self.spawns.size ); - piecestub.piece_allocated[ self.current_spawn ] = 1; - } -} - -piece_deallocate_spawn() -{ - if ( isDefined( self.current_spawn ) ) - { - self.piecestub.piece_allocated[ self.current_spawn ] = 0; - self.current_spawn = undefined; - } - self.start_origin = undefined; -} - -piece_pick_random_spawn() -{ - self.current_spawn = 0; - while ( self.spawns.size >= 1 && self.spawns.size > 1 ) - { - self.current_spawn = randomint( self.spawns.size ); - while ( isDefined( self.spawns[ self.current_spawn ].claim_location ) && !claim_location( self.spawns[ self.current_spawn ].claim_location ) ) - { - arrayremoveindex( self.spawns, self.current_spawn ); - if ( self.spawns.size < 1 ) - { - self.current_spawn = 0; -/# - println( "ERROR: All craftable spawn locations claimed" ); -#/ - return; - } - self.current_spawn = randomint( self.spawns.size ); - } - } -} - -piece_set_spawn( num ) -{ - self.current_spawn = 0; - if ( self.spawns.size >= 1 && self.spawns.size > 1 ) - { - self.current_spawn = int( min( num, self.spawns.size - 1 ) ); - } -} - -piece_spawn_in( piecestub ) -{ - if ( self.spawns.size < 1 ) - { - return; - } - if ( isDefined( self.managed_spawn ) && self.managed_spawn ) - { - if ( !isDefined( self.current_spawn ) ) - { - self piece_allocate_spawn( self.piecestub ); - } - } - if ( !isDefined( self.current_spawn ) ) - { - self.current_spawn = 0; - } - spawndef = self.spawns[ self.current_spawn ]; - self.unitrigger = generate_piece_unitrigger( "trigger_radius_use", spawndef.origin + vectorScale( ( 0, 0, 1 ), 12 ), spawndef.angles, 0, piecestub.radius, piecestub.height, 0 ); - self.unitrigger.piece = self; - self.radius = piecestub.radius; - self.height = piecestub.height; - self.craftablename = piecestub.craftablename; - self.piecename = piecestub.piecename; - self.modelname = piecestub.modelname; - self.hud_icon = piecestub.hud_icon; - self.tag_name = piecestub.tag_name; - self.drop_offset = piecestub.drop_offset; - self.start_origin = spawndef.origin; - self.start_angles = spawndef.angles; - self.client_field_state = piecestub.client_field_state; - self.is_shared = piecestub.is_shared; - self.model = spawn( "script_model", self.start_origin ); - if ( isDefined( self.start_angles ) ) - { - self.model.angles = self.start_angles; - } - self.model setmodel( piecestub.modelname ); - if ( isDefined( piecestub.onspawn ) ) - { - self [[ piecestub.onspawn ]](); - } - self.model ghostindemo(); - self.model.hud_icon = piecestub.hud_icon; - self.piecestub = piecestub; - self.unitrigger.origin_parent = self.model; -} - -piece_spawn_at( origin, angles, use_random_start ) -{ - if ( self.spawns.size < 1 ) - { - return; - } - if ( isDefined( self.managed_spawn ) && self.managed_spawn ) - { - if ( !isDefined( self.current_spawn ) && !isDefined( origin ) ) - { - self piece_allocate_spawn( self.piecestub ); - spawndef = self.spawns[ self.current_spawn ]; - self.start_origin = spawndef.origin; - self.start_angles = spawndef.angles; - } - } - else - { - if ( !isDefined( self.current_spawn ) ) - { - self.current_spawn = 0; - } - } - unitrigger_offset = vectorScale( ( 0, 0, 1 ), 12 ); - if ( isDefined( use_random_start ) && use_random_start ) - { - self piece_pick_random_spawn(); - spawndef = self.spawns[ self.current_spawn ]; - self.start_origin = spawndef.origin; - self.start_angles = spawndef.angles; - origin = spawndef.origin; - angles = spawndef.angles; - } - else - { - if ( !isDefined( origin ) ) - { - origin = self.start_origin; - } - else - { - origin += ( 0, 0, self.drop_offset ); - unitrigger_offset -= ( 0, 0, self.drop_offset ); - } - if ( !isDefined( angles ) ) - { - angles = self.start_angles; - } -/# - if ( !isDefined( level.drop_offset ) ) - { - level.drop_offset = 0; - } - origin += ( 0, 0, level.drop_offset ); - unitrigger_offset -= ( 0, 0, level.drop_offset ); -#/ - } - self.model = spawn( "script_model", origin ); - if ( isDefined( angles ) ) - { - self.model.angles = angles; - } - self.model setmodel( self.modelname ); - if ( isDefined( level.equipment_safe_to_drop ) ) - { - if ( !( [[ level.equipment_safe_to_drop ]]( self.model ) ) ) - { - origin = self.start_origin; - angles = self.start_angles; - self.model.origin = origin; - self.model.angles = angles; - } - } - if ( isDefined( self.onspawn ) ) - { - self [[ self.onspawn ]](); - } - if ( isDefined( self.model.canmove ) ) - { - self.unitrigger = generate_piece_unitrigger( "trigger_radius_use", origin + unitrigger_offset, angles, 0, self.radius, self.height, self.model.canmove ); - } - self.unitrigger.piece = self; - self.model.hud_icon = self.hud_icon; - self.unitrigger.origin_parent = self.model; -} - -piece_unspawn() -{ - if ( isDefined( self.managed_spawn ) && self.managed_spawn ) - { - self piece_deallocate_spawn(); - } - if ( isDefined( self.model ) ) - { - self.model delete(); - } - self.model = undefined; - if ( isDefined( self.unitrigger ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger ); - } - self.unitrigger = undefined; -} - -piece_hide() -{ - if ( isDefined( self.model ) ) - { - self.model ghost(); - } -} - -piece_show() -{ - if ( isDefined( self.model ) ) - { - self.model show(); - } -} - -generate_piece( piecestub ) -{ - piecespawn = spawnstruct(); - piecespawn.spawns = piecestub.spawns; - if ( isDefined( piecestub.managing_pieces ) && piecestub.managing_pieces ) - { - piecespawn piece_allocate_spawn( piecestub ); - } - else - { - if ( isDefined( piecestub.use_spawn_num ) ) - { - piecespawn piece_set_spawn( piecestub.use_spawn_num ); - } - else - { - piecespawn piece_pick_random_spawn(); - } - } - piecespawn piece_spawn_in( piecestub ); - if ( piecespawn.spawns.size >= 1 ) - { - piecespawn.hud_icon = piecestub.hud_icon; - } - if ( isDefined( piecestub.onpickup ) ) - { - piecespawn.onpickup = piecestub.onpickup; - } - else - { - piecespawn.onpickup = ::onpickuputs; - } - if ( isDefined( piecestub.ondrop ) ) - { - piecespawn.ondrop = piecestub.ondrop; - } - else - { - piecespawn.ondrop = ::ondroputs; - } - if ( isDefined( piecestub.oncrafted ) ) - { - piecespawn.oncrafted = piecestub.oncrafted; - } - return piecespawn; -} - -craftable_piece_unitriggers( craftable_name, origin ) -{ -/# - assert( isDefined( craftable_name ) ); -#/ -/# - assert( isDefined( level.zombie_craftablestubs[ craftable_name ] ), "Called craftable_think() without including the craftable - " + craftable_name ); -#/ - craftable = level.zombie_craftablestubs[ craftable_name ]; - if ( !isDefined( craftable.a_piecestubs ) ) - { - craftable.a_piecestubs = []; - } - flag_wait( "start_zombie_round_logic" ); - craftablespawn = spawnstruct(); - craftablespawn.craftable_name = craftable_name; - if ( !isDefined( craftablespawn.a_piecespawns ) ) - { - craftablespawn.a_piecespawns = []; - } - craftablepickups = []; - _a1320 = craftable.a_piecestubs; - _k1320 = getFirstArrayKey( _a1320 ); - while ( isDefined( _k1320 ) ) - { - piecestub = _a1320[ _k1320 ]; - if ( !isDefined( piecestub.generated_instances ) ) - { - piecestub.generated_instances = 0; - } - if ( isDefined( piecestub.piecespawn ) && isDefined( piecestub.can_reuse ) && piecestub.can_reuse ) - { - piece = piecestub.piecespawn; - } - else - { - if ( piecestub.generated_instances >= piecestub.max_instances ) - { - piece = piecestub.piecespawn; - break; - } - else - { - piece = generate_piece( piecestub ); - piecestub.piecespawn = piece; - piecestub.generated_instances++; - } - } - craftablespawn.a_piecespawns[ craftablespawn.a_piecespawns.size ] = piece; - _k1320 = getNextArrayKey( _a1320, _k1320 ); - } - craftablespawn.stub = self; - return craftablespawn; -} - -hide_craftable_table_model( trigger_targetname ) -{ - trig = getent( trigger_targetname, "targetname" ); - if ( !isDefined( trig ) ) - { - return; - } - if ( isDefined( trig.target ) ) - { - model = getent( trig.target, "targetname" ); - if ( isDefined( model ) ) - { - model ghost(); - model notsolid(); - } - } -} - -setup_unitrigger_craftable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) -{ - trig = getent( trigger_targetname, "targetname" ); - if ( !isDefined( trig ) ) - { - return; - } - return setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); -} - -setup_unitrigger_craftable_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) -{ - triggers = getentarray( trigger_targetname, "targetname" ); - stubs = []; - _a1382 = triggers; - _k1382 = getFirstArrayKey( _a1382 ); - while ( isDefined( _k1382 ) ) - { - trig = _a1382[ _k1382 ]; - stubs[ stubs.size ] = setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); - _k1382 = getNextArrayKey( _a1382, _k1382 ); - } - return stubs; -} - -setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) -{ - if ( !isDefined( trig ) ) - { - return; - } - unitrigger_stub = spawnstruct(); - unitrigger_stub.craftablestub = level.zombie_include_craftables[ equipname ]; - angles = trig.script_angles; - if ( !isDefined( angles ) ) - { - angles = ( 0, 0, 1 ); - } - unitrigger_stub.origin = trig.origin + ( anglesToRight( angles ) * -6 ); - unitrigger_stub.angles = trig.angles; - if ( isDefined( trig.script_angles ) ) - { - unitrigger_stub.angles = trig.script_angles; - } - unitrigger_stub.equipname = equipname; - unitrigger_stub.weaponname = weaponname; - unitrigger_stub.trigger_hintstring = trigger_hintstring; - unitrigger_stub.delete_trigger = delete_trigger; - unitrigger_stub.crafted = 0; - unitrigger_stub.persistent = persistent; - unitrigger_stub.usetime = int( 3000 ); - unitrigger_stub.onbeginuse = ::onbeginuseuts; - unitrigger_stub.onenduse = ::onenduseuts; - unitrigger_stub.onuse = ::onuseplantobjectuts; - unitrigger_stub.oncantuse = ::oncantuseuts; - if ( isDefined( trig.script_length ) ) - { - unitrigger_stub.script_length = trig.script_length; - } - else - { - unitrigger_stub.script_length = 32; - } - if ( isDefined( trig.script_width ) ) - { - unitrigger_stub.script_width = trig.script_width; - } - else - { - unitrigger_stub.script_width = 100; - } - if ( isDefined( trig.script_height ) ) - { - unitrigger_stub.script_height = trig.script_height; - } - else - { - unitrigger_stub.script_height = 64; - } - unitrigger_stub.target = trig.target; - unitrigger_stub.targetname = trig.targetname; - unitrigger_stub.script_noteworthy = trig.script_noteworthy; - unitrigger_stub.script_parameters = trig.script_parameters; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - if ( isDefined( level.zombie_craftablestubs[ equipname ].str_to_craft ) ) - { - unitrigger_stub.hint_string = level.zombie_craftablestubs[ equipname ].str_to_craft; - } - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.require_look_at = 1; - unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - if ( isDefined( unitrigger_stub.craftablestub.custom_craftablestub_update_prompt ) ) - { - unitrigger_stub.custom_craftablestub_update_prompt = unitrigger_stub.craftablestub.custom_craftablestub_update_prompt; - } - unitrigger_stub.prompt_and_visibility_func = ::craftabletrigger_update_prompt; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::craftable_place_think ); - unitrigger_stub.piece_trigger = trig; - trig.trigger_stub = unitrigger_stub; - unitrigger_stub.zombie_weapon_upgrade = trig.zombie_weapon_upgrade; - if ( isDefined( unitrigger_stub.target ) ) - { - unitrigger_stub.model = getent( unitrigger_stub.target, "targetname" ); - if ( isDefined( unitrigger_stub.model ) ) - { - if ( isDefined( unitrigger_stub.zombie_weapon_upgrade ) ) - { - unitrigger_stub.model useweaponhidetags( unitrigger_stub.zombie_weapon_upgrade ); - } - unitrigger_stub.model ghost(); - unitrigger_stub.model notsolid(); - } - } - if ( unitrigger_stub.equipname == "open_table" ) - { - unitrigger_stub.a_uts_open_craftables_available = []; - unitrigger_stub.n_open_craftable_choice = -1; - unitrigger_stub.b_open_craftable_checking_input = 0; - } - unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( equipname, unitrigger_stub.origin ); - if ( delete_trigger ) - { - trig delete(); - } - level.a_uts_craftables[ level.a_uts_craftables.size ] = unitrigger_stub; - return unitrigger_stub; -} - -setup_craftable_pieces() -{ - unitrigger_stub = spawnstruct(); - unitrigger_stub.craftablestub = level.zombie_include_craftables[ self.name ]; - unitrigger_stub.equipname = self.name; - unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( self.name, unitrigger_stub.origin ); - level.a_uts_craftables[ level.a_uts_craftables.size ] = unitrigger_stub; - return unitrigger_stub; -} - -craftable_has_piece( piece ) -{ - i = 0; - while ( i < self.a_piecespawns.size ) - { - if ( self.a_piecespawns[ i ].piecename == piece.piecename && self.a_piecespawns[ i ].craftablename == piece.craftablename ) - { - return 1; - } - i++; - } - return 0; -} - -get_actual_uts_craftable() -{ - if ( self.craftable_name == "open_table" && self.n_open_craftable_choice != -1 ) - { - return self.stub.a_uts_open_craftables_available[ self.n_open_craftable_choice ]; - } - else - { - return self.stub; - } -} - -get_actual_craftablespawn() -{ - if ( self.craftable_name == "open_table" && self.stub.n_open_craftable_choice != -1 && isDefined( self.stub.a_uts_open_craftables_available[ self.stub.n_open_craftable_choice ].craftablespawn ) ) - { - return self.stub.a_uts_open_craftables_available[ self.stub.n_open_craftable_choice ].craftablespawn; - } - else - { - return self; - } -} - -craftable_can_use_shared_piece() -{ - uts_craftable = self.stub; - if ( isDefined( uts_craftable.n_open_craftable_choice ) && uts_craftable.n_open_craftable_choice != -1 && isDefined( uts_craftable.a_uts_open_craftables_available[ uts_craftable.n_open_craftable_choice ] ) ) - { - return 1; - } - if ( isDefined( uts_craftable.craftablestub.need_all_pieces ) && uts_craftable.craftablestub.need_all_pieces ) - { - _a1601 = self.a_piecespawns; - _k1601 = getFirstArrayKey( _a1601 ); - while ( isDefined( _k1601 ) ) - { - piece = _a1601[ _k1601 ]; - if ( isDefined( piece.in_shared_inventory ) && !piece.in_shared_inventory ) - { - return 0; - } - _k1601 = getNextArrayKey( _a1601, _k1601 ); - } - return 1; - } - else - { - _a1614 = self.a_piecespawns; - _k1614 = getFirstArrayKey( _a1614 ); - while ( isDefined( _k1614 ) ) - { - piece = _a1614[ _k1614 ]; - if ( isDefined( piece.crafted ) && !piece.crafted && isDefined( piece.in_shared_inventory ) && piece.in_shared_inventory ) - { - return 1; - } - _k1614 = getNextArrayKey( _a1614, _k1614 ); - } - } - return 0; -} - -craftable_set_piece_crafted( piecespawn_check, player ) -{ - craftablespawn_check = get_actual_craftablespawn(); - _a1631 = craftablespawn_check.a_piecespawns; - _k1631 = getFirstArrayKey( _a1631 ); - while ( isDefined( _k1631 ) ) - { - piecespawn = _a1631[ _k1631 ]; - if ( isDefined( piecespawn_check ) ) - { - if ( piecespawn.piecename == piecespawn_check.piecename && piecespawn.craftablename == piecespawn_check.craftablename ) - { - piecespawn.crafted = 1; - if ( isDefined( piecespawn.oncrafted ) ) - { - piecespawn thread [[ piecespawn.oncrafted ]]( player ); - } - } - } - else - { - if ( isDefined( piecespawn.is_shared ) && piecespawn.is_shared && isDefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) - { - piecespawn.crafted = 1; - if ( isDefined( piecespawn.oncrafted ) ) - { - piecespawn thread [[ piecespawn.oncrafted ]]( player ); - } - piecespawn.in_shared_inventory = 0; - } - } - _k1631 = getNextArrayKey( _a1631, _k1631 ); - } -} - -craftable_set_piece_crafting( piecespawn_check ) -{ - craftablespawn_check = get_actual_craftablespawn(); - _a1670 = craftablespawn_check.a_piecespawns; - _k1670 = getFirstArrayKey( _a1670 ); - while ( isDefined( _k1670 ) ) - { - piecespawn = _a1670[ _k1670 ]; - if ( isDefined( piecespawn_check ) ) - { - if ( piecespawn.piecename == piecespawn_check.piecename && piecespawn.craftablename == piecespawn_check.craftablename ) - { - piecespawn.crafting = 1; - } - } - if ( isDefined( piecespawn.is_shared ) && piecespawn.is_shared && isDefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) - { - piecespawn.crafting = 1; - } - _k1670 = getNextArrayKey( _a1670, _k1670 ); - } -} - -craftable_clear_piece_crafting( piecespawn_check ) -{ - if ( isDefined( piecespawn_check ) ) - { - piecespawn_check.crafting = 0; - } - craftablespawn_check = get_actual_craftablespawn(); - _a1699 = craftablespawn_check.a_piecespawns; - _k1699 = getFirstArrayKey( _a1699 ); - while ( isDefined( _k1699 ) ) - { - piecespawn = _a1699[ _k1699 ]; - if ( isDefined( piecespawn.is_shared ) && piecespawn.is_shared && isDefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) - { - piecespawn.crafting = 0; - } - _k1699 = getNextArrayKey( _a1699, _k1699 ); - } -} - -craftable_is_piece_crafted( piece ) -{ - i = 0; - while ( i < self.a_piecespawns.size ) - { - if ( self.a_piecespawns[ i ].piecename == piece.piecename && self.a_piecespawns[ i ].craftablename == piece.craftablename ) - { - if ( isDefined( self.a_piecespawns[ i ].crafted ) ) - { - return self.a_piecespawns[ i ].crafted; - } - } - i++; - } - return 0; -} - -craftable_is_piece_crafting( piecespawn_check ) -{ - craftablespawn_check = get_actual_craftablespawn(); - _a1726 = craftablespawn_check.a_piecespawns; - _k1726 = getFirstArrayKey( _a1726 ); - while ( isDefined( _k1726 ) ) - { - piecespawn = _a1726[ _k1726 ]; - if ( isDefined( piecespawn_check ) ) - { - if ( piecespawn.piecename == piecespawn_check.piecename && piecespawn.craftablename == piecespawn_check.craftablename ) - { - return piecespawn.crafting; - } - } - if ( isDefined( piecespawn.is_shared ) && piecespawn.is_shared && isDefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory && isDefined( piecespawn.crafting ) && piecespawn.crafting ) - { - return 1; - } - _k1726 = getNextArrayKey( _a1726, _k1726 ); - } - return 0; -} - -craftable_is_piece_crafted_or_crafting( piece ) -{ - i = 0; - while ( i < self.a_piecespawns.size ) - { - if ( self.a_piecespawns[ i ].piecename == piece.piecename && self.a_piecespawns[ i ].craftablename == piece.craftablename ) - { - if ( isDefined( self.a_piecespawns[ i ].crafted ) && !self.a_piecespawns[ i ].crafted ) - { - if ( isDefined( self.a_piecespawns[ i ].crafting ) ) - { - return self.a_piecespawns[ i ].crafting; - } - } - } - i++; - } - return 0; -} - -craftable_all_crafted() -{ - i = 0; - while ( i < self.a_piecespawns.size ) - { - if ( isDefined( self.a_piecespawns[ i ].crafted ) && !self.a_piecespawns[ i ].crafted ) - { - return 0; - } - i++; - } - return 1; -} - -waittill_crafted( craftable_name ) -{ - level waittill( craftable_name + "_crafted", player ); - return player; -} - -player_can_craft( craftablespawn, continuing ) -{ - if ( !isDefined( craftablespawn ) ) - { - return 0; - } - if ( !craftablespawn craftable_can_use_shared_piece() ) - { - if ( !isDefined( self.current_craftable_piece ) ) - { - return 0; - } - if ( !craftablespawn craftable_has_piece( self.current_craftable_piece ) ) - { - return 0; - } - if ( isDefined( continuing ) && continuing ) - { - if ( craftablespawn craftable_is_piece_crafted( self.current_craftable_piece ) ) - { - return 0; - } - } - else - { - if ( craftablespawn craftable_is_piece_crafted_or_crafting( self.current_craftable_piece ) ) - { - return 0; - } - } - } - if ( isDefined( craftablespawn.stub ) && isDefined( craftablespawn.stub.custom_craftablestub_update_prompt ) && isDefined( craftablespawn.stub.playertrigger[ 0 ] ) && isDefined( craftablespawn.stub.playertrigger[ 0 ].stub ) && !( craftablespawn.stub.playertrigger[ 0 ].stub [[ craftablespawn.stub.custom_craftablestub_update_prompt ]]( self, 1, craftablespawn.stub.playertrigger[ self getentitynumber() ] ) ) ) - { - return 0; - } - return 1; -} - -craftable_transfer_data() -{ - uts_craftable = self.stub; - if ( uts_craftable.n_open_craftable_choice == -1 || !isDefined( uts_craftable.a_uts_open_craftables_available[ uts_craftable.n_open_craftable_choice ] ) ) - { - return; - } - uts_source = uts_craftable.a_uts_open_craftables_available[ uts_craftable.n_open_craftable_choice ]; - uts_target = uts_craftable; - uts_target.craftablestub = uts_source.craftablestub; - uts_target.craftablespawn = uts_source.craftablespawn; - uts_target.crafted = uts_source.crafted; - uts_target.cursor_hint = uts_source.cursor_hint; - uts_target.custom_craftable_update_prompt = uts_source.custom_craftable_update_prompt; - uts_target.equipname = uts_source.equipname; - uts_target.hint_string = uts_source.hint_string; - uts_target.persistent = uts_source.persistent; - uts_target.prompt_and_visibility_func = uts_source.prompt_and_visibility_func; - uts_target.trigger_func = uts_source.trigger_func; - uts_target.trigger_hintstring = uts_source.trigger_hintstring; - uts_target.weaponname = uts_source.weaponname; - uts_target.craftablespawn.stub = uts_target; - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( uts_source ); - uts_source craftablestub_remove(); - return uts_target; -} - -player_craft( craftablespawn ) -{ - craftablespawn craftable_set_piece_crafted( self.current_craftable_piece, self ); - if ( isDefined( self.current_craftable_piece ) && isDefined( self.current_craftable_piece.crafted ) && self.current_craftable_piece.crafted ) - { - player_destroy_piece( self.current_craftable_piece ); - } - if ( isDefined( craftablespawn.stub.n_open_craftable_choice ) ) - { - uts_craftable = craftablespawn craftable_transfer_data(); - craftablespawn = uts_craftable.craftablespawn; - update_open_table_status(); - } - else - { - uts_craftable = craftablespawn.stub; - } - if ( !isDefined( uts_craftable.model ) && isDefined( uts_craftable.craftablestub.str_model ) ) - { - craftablestub = uts_craftable.craftablestub; - s_model = getstruct( uts_craftable.target, "targetname" ); - if ( isDefined( s_model ) ) - { - m_spawn = spawn( "script_model", s_model.origin ); - if ( isDefined( craftablestub.v_origin_offset ) ) - { - m_spawn.origin += craftablestub.v_origin_offset; - } - m_spawn.angles = s_model.angles; - if ( isDefined( craftablestub.v_angle_offset ) ) - { - m_spawn.angles += craftablestub.v_angle_offset; - } - m_spawn setmodel( craftablestub.str_model ); - uts_craftable.model = m_spawn; - } - } - while ( isDefined( uts_craftable.model ) ) - { - i = 0; - while ( i < craftablespawn.a_piecespawns.size ) - { - if ( isDefined( craftablespawn.a_piecespawns[ i ].tag_name ) ) - { - uts_craftable.model notsolid(); - if ( isDefined( craftablespawn.a_piecespawns[ i ].crafted ) && !craftablespawn.a_piecespawns[ i ].crafted ) - { - uts_craftable.model hidepart( craftablespawn.a_piecespawns[ i ].tag_name ); - i++; - continue; - } - else - { - uts_craftable.model show(); - uts_craftable.model showpart( craftablespawn.a_piecespawns[ i ].tag_name ); - } - } - i++; - } - } - self track_craftable_pieces_crafted( craftablespawn ); - if ( craftablespawn craftable_all_crafted() ) - { - self player_finish_craftable( craftablespawn ); - self track_craftables_crafted( craftablespawn ); - if ( isDefined( level.craftable_crafted_custom_func ) ) - { - self thread [[ level.craftable_crafted_custom_func ]]( craftablespawn ); - } - self playsound( "zmb_buildable_complete" ); - } - else - { - self playsound( "zmb_buildable_piece_add" ); -/# - assert( isDefined( level.zombie_craftablestubs[ craftablespawn.craftable_name ].str_crafting ), "Missing builing hint" ); -#/ - if ( isDefined( level.zombie_craftablestubs[ craftablespawn.craftable_name ].str_crafting ) ) - { - return level.zombie_craftablestubs[ craftablespawn.craftable_name ].str_crafting; - } - } - return ""; -} - -update_open_table_status() -{ - b_open_craftables_remaining = 0; - _a1969 = level.a_uts_craftables; - _k1969 = getFirstArrayKey( _a1969 ); - while ( isDefined( _k1969 ) ) - { - uts_craftable = _a1969[ _k1969 ]; - if ( isDefined( level.zombie_include_craftables[ uts_craftable.equipname ] ) && isDefined( level.zombie_include_craftables[ uts_craftable.equipname ].is_open_table ) && level.zombie_include_craftables[ uts_craftable.equipname ].is_open_table ) - { - b_piece_crafted = 0; - _a1976 = uts_craftable.craftablespawn.a_piecespawns; - _k1976 = getFirstArrayKey( _a1976 ); - while ( isDefined( _k1976 ) ) - { - piecespawn = _a1976[ _k1976 ]; - if ( isDefined( piecespawn.crafted ) && piecespawn.crafted ) - { - b_piece_crafted = 1; - break; - } - else - { - _k1976 = getNextArrayKey( _a1976, _k1976 ); - } - } - if ( !b_piece_crafted ) - { - b_open_craftables_remaining = 1; - } - } - _k1969 = getNextArrayKey( _a1969, _k1969 ); - } - while ( !b_open_craftables_remaining ) - { - _a1995 = level.a_uts_craftables; - _k1995 = getFirstArrayKey( _a1995 ); - while ( isDefined( _k1995 ) ) - { - uts_craftable = _a1995[ _k1995 ]; - if ( uts_craftable.equipname == "open_table" ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( uts_craftable ); - } - _k1995 = getNextArrayKey( _a1995, _k1995 ); - } - } -} - -player_finish_craftable( craftablespawn ) -{ - craftablespawn.crafted = 1; - craftablespawn.stub.crafted = 1; - craftablespawn notify( "crafted" ); - level.craftables_crafted[ craftablespawn.craftable_name ] = 1; - level notify( craftablespawn.craftable_name + "_crafted" ); -} - -complete_craftable( str_craftable_name ) -{ - _a2020 = level.a_uts_craftables; - _k2020 = getFirstArrayKey( _a2020 ); - while ( isDefined( _k2020 ) ) - { - uts_craftable = _a2020[ _k2020 ]; - if ( uts_craftable.craftablestub.name == str_craftable_name ) - { - player = getplayers()[ 0 ]; - player player_finish_craftable( uts_craftable.craftablespawn ); - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( uts_craftable ); - if ( isDefined( uts_craftable.craftablestub.onfullycrafted ) ) - { - uts_craftable [[ uts_craftable.craftablestub.onfullycrafted ]](); - } - return; - } - _k2020 = getNextArrayKey( _a2020, _k2020 ); - } -} - -craftablestub_remove() -{ - arrayremovevalue( level.a_uts_craftables, self ); -} - -craftabletrigger_update_prompt( player ) -{ - can_use = self.stub craftablestub_update_prompt( player ); - self sethintstring( self.stub.hint_string ); - return can_use; -} - -craftablestub_update_prompt( player, unitrigger ) -{ - if ( !self anystub_update_prompt( player ) ) - { - return 0; - } - if ( isDefined( self.is_locked ) && self.is_locked ) - { - return 1; - } - can_use = 1; - if ( isDefined( self.custom_craftablestub_update_prompt ) && !( self [[ self.custom_craftablestub_update_prompt ]]( player ) ) ) - { - return 0; - } - if ( isDefined( self.crafted ) && !self.crafted ) - { - if ( !self.craftablespawn craftable_can_use_shared_piece() ) - { - if ( !isDefined( player.current_craftable_piece ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE"; - return 0; - } - else - { - if ( !self.craftablespawn craftable_has_piece( player.current_craftable_piece ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG"; - return 0; - } - } - } -/# - assert( isDefined( level.zombie_craftablestubs[ self.equipname ].str_to_craft ), "Missing craftable hint" ); -#/ - self.hint_string = level.zombie_craftablestubs[ self.equipname ].str_to_craft; - } - else - { - if ( self.persistent == 1 ) - { - if ( maps/mp/zombies/_zm_equipment::is_limited_equipment( self.weaponname ) && maps/mp/zombies/_zm_equipment::limited_equipment_in_use( self.weaponname ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_ONLY_ONE"; - return 0; - } - if ( player has_player_equipment( self.weaponname ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_HAVE_ONE"; - return 0; - } - self.hint_string = self.trigger_hintstring; - } - else if ( self.persistent == 2 ) - { - if ( !maps/mp/zombies/_zm_weapons::limited_weapon_below_quota( self.weaponname, undefined ) ) - { - self.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; - return 0; - } - else - { - if ( isDefined( self.str_taken ) && self.str_taken ) - { - self.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; - return 0; - } - } - self.hint_string = self.trigger_hintstring; - } - else - { - self.hint_string = ""; - return 0; - } - } - return 1; -} - -choose_open_craftable( player ) -{ - self endon( "kill_choose_open_craftable" ); - n_playernum = player getentitynumber(); - self.b_open_craftable_checking_input = 1; - b_got_input = 1; - hinttexthudelem = newclienthudelem( player ); - hinttexthudelem.alignx = "center"; - hinttexthudelem.aligny = "middle"; - hinttexthudelem.horzalign = "center"; - hinttexthudelem.vertalign = "bottom"; - hinttexthudelem.y = -100; - if ( player issplitscreen() ) - { - hinttexthudelem.y = -50; - } - hinttexthudelem.foreground = 1; - hinttexthudelem.font = "default"; - hinttexthudelem.fontscale = 1; - hinttexthudelem.alpha = 1; - hinttexthudelem.color = ( 0, 0, 1 ); - hinttexthudelem settext( &"ZM_CRAFTABLES_CHANGE_BUILD" ); - if ( !isDefined( self.opencraftablehudelem ) ) - { - self.opencraftablehudelem = []; - } - self.opencraftablehudelem[ n_playernum ] = hinttexthudelem; - while ( isDefined( self.playertrigger[ n_playernum ] ) && !self.crafted ) - { - if ( player actionslotonebuttonpressed() ) - { - self.n_open_craftable_choice++; - b_got_input = 1; - } - else - { - if ( player actionslottwobuttonpressed() ) - { - self.n_open_craftable_choice--; - - b_got_input = 1; - } - } - if ( self.n_open_craftable_choice >= self.a_uts_open_craftables_available.size ) - { - self.n_open_craftable_choice = 0; - } - else - { - if ( self.n_open_craftable_choice < 0 ) - { - self.n_open_craftable_choice = self.a_uts_open_craftables_available.size - 1; - } - } - if ( b_got_input ) - { - self.equipname = self.a_uts_open_craftables_available[ self.n_open_craftable_choice ].equipname; - self.hint_string = self.a_uts_open_craftables_available[ self.n_open_craftable_choice ].hint_string; - self.playertrigger[ n_playernum ] sethintstring( self.hint_string ); - b_got_input = 0; - } - if ( player is_player_looking_at( self.playertrigger[ n_playernum ].origin, 0,76 ) ) - { - self.opencraftablehudelem[ n_playernum ].alpha = 1; - } - else - { - self.opencraftablehudelem[ n_playernum ].alpha = 0; - } - wait 0,05; - } - self.b_open_craftable_checking_input = 0; - self.opencraftablehudelem[ n_playernum ] destroy(); -} - -open_craftablestub_update_prompt( player ) -{ - if ( isDefined( self.crafted ) && !self.crafted ) - { - self.a_uts_open_craftables_available = []; - _a2241 = level.a_uts_craftables; - _k2241 = getFirstArrayKey( _a2241 ); - while ( isDefined( _k2241 ) ) - { - uts_craftable = _a2241[ _k2241 ]; - if ( isDefined( uts_craftable.craftablestub.is_open_table ) && uts_craftable.craftablestub.is_open_table && isDefined( uts_craftable.crafted ) && !uts_craftable.crafted && uts_craftable.craftablespawn.craftable_name != "open_table" && uts_craftable.craftablespawn craftable_can_use_shared_piece() ) - { - self.a_uts_open_craftables_available[ self.a_uts_open_craftables_available.size ] = uts_craftable; - } - _k2241 = getNextArrayKey( _a2241, _k2241 ); - } - if ( self.a_uts_open_craftables_available.size < 2 ) - { - self notify( "kill_choose_open_craftable" ); - self.b_open_craftable_checking_input = 0; - n_entitynum = player getentitynumber(); - if ( isDefined( self.opencraftablehudelem ) && isDefined( self.opencraftablehudelem[ n_entitynum ] ) ) - { - self.opencraftablehudelem[ n_entitynum ] destroy(); - } - } - switch( self.a_uts_open_craftables_available.size ) - { - case 0: - if ( !isDefined( player.current_craftable_piece ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE"; - self.n_open_craftable_choice = -1; - return 0; - } - case 1: - self.n_open_craftable_choice = 0; - self.equipname = self.a_uts_open_craftables_available[ self.n_open_craftable_choice ].equipname; - return 1; - default: - if ( !self.b_open_craftable_checking_input ) - { - thread choose_open_craftable( player ); - } - return 1; - } - } - else - { - if ( self.persistent == 1 || self.persistent == 2 && isDefined( self.bought ) && !self.bought ) - { - return 1; - } - } - return 0; - } -} - -player_continue_crafting( craftablespawn ) -{ - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || self in_revive_trigger() ) - { - return 0; - } - if ( !self player_can_craft( craftablespawn, 1 ) ) - { - return 0; - } - if ( isDefined( self.screecher ) ) - { - return 0; - } - if ( !self usebuttonpressed() ) - { - return 0; - } - if ( !craftablespawn craftable_is_piece_crafting( self.current_craftable_piece ) ) - { - return 0; - } - trigger = craftablespawn.stub maps/mp/zombies/_zm_unitrigger::unitrigger_trigger( self ); - if ( craftablespawn.stub.script_unitrigger_type == "unitrigger_radius_use" ) - { - torigin = craftablespawn.stub unitrigger_origin(); - porigin = self geteye(); - radius_sq = 2,25 * craftablespawn.stub.radius * craftablespawn.stub.radius; - if ( distance2dsquared( torigin, porigin ) > radius_sq ) - { - return 0; - } - } - else - { - if ( !isDefined( trigger ) || !trigger istouching( self ) ) - { - return 0; - } - } - if ( isDefined( craftablespawn.stub.require_look_at ) && craftablespawn.stub.require_look_at && !self is_player_looking_at( trigger.origin, 0,76 ) ) - { - return 0; - } - return 1; -} - -player_progress_bar_update( start_time, craft_time ) -{ - self endon( "entering_last_stand" ); - self endon( "death" ); - self endon( "disconnect" ); - self endon( "craftable_progress_end" ); - while ( isDefined( self ) && ( getTime() - start_time ) < craft_time ) - { - progress = ( getTime() - start_time ) / craft_time; - if ( progress < 0 ) - { - progress = 0; - } - if ( progress > 1 ) - { - progress = 1; - } - self.usebar updatebar( progress ); - wait 0,05; - } -} - -player_progress_bar( start_time, craft_time ) -{ - self.usebar = self createprimaryprogressbar(); - self.usebartext = self createprimaryprogressbartext(); - self.usebartext settext( &"ZOMBIE_BUILDING" ); - if ( isDefined( self ) && isDefined( start_time ) && isDefined( craft_time ) ) - { - self player_progress_bar_update( start_time, craft_time ); - } - self.usebartext destroyelem(); - self.usebar destroyelem(); -} - -craftable_use_hold_think_internal( player ) -{ - wait 0,01; - if ( !isDefined( self ) ) - { - self notify( "craft_failed" ); - if ( isDefined( player.craftableaudio ) ) - { - player.craftableaudio delete(); - player.craftableaudio = undefined; - } - return; - } - if ( !isDefined( self.usetime ) ) - { - self.usetime = int( 3000 ); - } - self.craft_time = self.usetime; - self.craft_start_time = getTime(); - craft_time = self.craft_time; - craft_start_time = self.craft_start_time; - player disable_player_move_states( 1 ); - player increment_is_drinking(); - orgweapon = player getcurrentweapon(); - player giveweapon( "zombie_builder_zm" ); - player switchtoweapon( "zombie_builder_zm" ); - self.stub.craftablespawn craftable_set_piece_crafting( player.current_craftable_piece ); - player thread player_progress_bar( craft_start_time, craft_time ); - if ( isDefined( level.craftable_craft_custom_func ) ) - { - player thread [[ level.craftable_craft_custom_func ]]( self.stub ); - } - while ( isDefined( self ) && player player_continue_crafting( self.stub.craftablespawn ) && ( getTime() - self.craft_start_time ) < self.craft_time ) - { - wait 0,05; - } - player notify( "craftable_progress_end" ); - player maps/mp/zombies/_zm_weapons::switch_back_primary_weapon( orgweapon ); - player takeweapon( "zombie_builder_zm" ); - if ( isDefined( player.is_drinking ) && player.is_drinking ) - { - player decrement_is_drinking(); - } - player enable_player_move_states(); - if ( isDefined( self ) && player player_continue_crafting( self.stub.craftablespawn ) && ( getTime() - self.craft_start_time ) >= self.craft_time ) - { - self.stub.craftablespawn craftable_clear_piece_crafting( player.current_craftable_piece ); - self notify( "craft_succeed" ); - } - else - { - if ( isDefined( player.craftableaudio ) ) - { - player.craftableaudio delete(); - player.craftableaudio = undefined; - } - self.stub.craftablespawn craftable_clear_piece_crafting( player.current_craftable_piece ); - self notify( "craft_failed" ); - } -} - -craftable_play_craft_fx( player ) -{ - self endon( "kill_trigger" ); - self endon( "craft_succeed" ); - self endon( "craft_failed" ); - while ( 1 ) - { - playfx( level._effect[ "building_dust" ], player getplayercamerapos(), player.angles ); - wait 0,5; - } -} - -craftable_use_hold_think( player ) -{ - self thread craftable_play_craft_fx( player ); - self thread craftable_use_hold_think_internal( player ); - retval = self waittill_any_return( "craft_succeed", "craft_failed" ); - if ( retval == "craft_succeed" ) - { - return 1; - } - return 0; -} - -craftable_place_think() -{ - self endon( "kill_trigger" ); - player_crafted = undefined; - while ( isDefined( self.stub.crafted ) && !self.stub.crafted ) - { - self waittill( "trigger", player ); - while ( isDefined( level.custom_craftable_validation ) ) - { - valid = self [[ level.custom_craftable_validation ]]( player ); - while ( !valid ) - { - continue; - } - } - while ( player != self.parent_player ) - { - continue; - } - while ( isDefined( player.screecher_weapon ) ) - { - continue; - } - while ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - } - status = player player_can_craft( self.stub.craftablespawn ); - if ( !status ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - if ( isDefined( self.stub.oncantuse ) ) - { - self.stub [[ self.stub.oncantuse ]]( player ); - } - continue; - } - else - { - if ( isDefined( self.stub.onbeginuse ) ) - { - self.stub [[ self.stub.onbeginuse ]]( player ); - } - result = self craftable_use_hold_think( player ); - team = player.pers[ "team" ]; - if ( isDefined( self.stub.onenduse ) ) - { - self.stub [[ self.stub.onenduse ]]( team, player, result ); - } - while ( !result ) - { - continue; - } - if ( isDefined( self.stub.onuse ) ) - { - self.stub [[ self.stub.onuse ]]( player ); - } - prompt = player player_craft( self.stub.craftablespawn ); - player_crafted = player; - self.stub.hint_string = prompt; - self sethintstring( self.stub.hint_string ); - } - } - if ( isDefined( self.stub.craftablestub.onfullycrafted ) ) - { - b_result = self.stub [[ self.stub.craftablestub.onfullycrafted ]](); - if ( !b_result ) - { - return; - } - } - if ( isDefined( player_crafted ) ) - { - } - if ( self.stub.persistent == 0 ) - { - self.stub craftablestub_remove(); - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.stub ); - return; - } - if ( self.stub.persistent == 3 ) - { - stub_uncraft_craftable( self.stub, 1 ); - return; - } - if ( self.stub.persistent == 2 ) - { - if ( isDefined( player_crafted ) ) - { - self craftabletrigger_update_prompt( player_crafted ); - } - if ( !maps/mp/zombies/_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) - { - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; - self sethintstring( self.stub.hint_string ); - return; - } - if ( isDefined( self.stub.str_taken ) && self.stub.str_taken ) - { - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; - self sethintstring( self.stub.hint_string ); - return; - } - if ( isDefined( self.stub.model ) ) - { - self.stub.model notsolid(); - self.stub.model show(); - } - while ( self.stub.persistent == 2 ) - { - self waittill( "trigger", player ); - while ( isDefined( player.screecher_weapon ) ) - { - continue; - } - while ( isDefined( level.custom_craftable_validation ) ) - { - valid = self [[ level.custom_craftable_validation ]]( player ); - while ( !valid ) - { - continue; - } - } - if ( isDefined( self.stub.crafted ) && !self.stub.crafted ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - return; - } - while ( player != self.parent_player ) - { - continue; - } - while ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - } - self.stub.bought = 1; - if ( isDefined( self.stub.model ) ) - { - self.stub.model thread model_fly_away( self ); - } - player maps/mp/zombies/_zm_weapons::weapon_give( self.stub.weaponname ); - if ( isDefined( level.zombie_include_craftables[ self.stub.equipname ].onbuyweapon ) ) - { - self [[ level.zombie_include_craftables[ self.stub.equipname ].onbuyweapon ]]( player ); - } - if ( !maps/mp/zombies/_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) - { - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; - } - else - { - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; - } - self sethintstring( self.stub.hint_string ); - player track_craftables_pickedup( self.stub.craftablespawn ); - } - } - else while ( !isDefined( player_crafted ) || self craftabletrigger_update_prompt( player_crafted ) ) - { - if ( isDefined( self.stub.model ) ) - { - self.stub.model notsolid(); - self.stub.model show(); - } - while ( self.stub.persistent == 1 ) - { - self waittill( "trigger", player ); - while ( isDefined( player.screecher_weapon ) ) - { - continue; - } - while ( isDefined( level.custom_craftable_validation ) ) - { - valid = self [[ level.custom_craftable_validation ]]( player ); - while ( !valid ) - { - continue; - } - } - if ( isDefined( self.stub.crafted ) && !self.stub.crafted ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - return; - } - while ( player != self.parent_player ) - { - continue; - } - while ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - } - while ( player has_player_equipment( self.stub.weaponname ) ) - { - continue; - } - while ( isDefined( level.zombie_craftable_persistent_weapon ) ) - { - while ( self [[ level.zombie_craftable_persistent_weapon ]]( player ) ) - { - continue; - } - } - while ( isDefined( level.zombie_custom_equipment_setup ) ) - { - while ( self [[ level.zombie_custom_equipment_setup ]]( player ) ) - { - continue; - } - } - if ( !maps/mp/zombies/_zm_equipment::is_limited_equipment( self.stub.weaponname ) || !maps/mp/zombies/_zm_equipment::limited_equipment_in_use( self.stub.weaponname ) ) - { - player maps/mp/zombies/_zm_equipment::equipment_buy( self.stub.weaponname ); - player giveweapon( self.stub.weaponname ); - player setweaponammoclip( self.stub.weaponname, 1 ); - if ( isDefined( level.zombie_include_craftables[ self.stub.equipname ].onbuyweapon ) ) - { - self [[ level.zombie_include_craftables[ self.stub.equipname ].onbuyweapon ]]( player ); - } - else - { - if ( self.stub.weaponname != "keys_zm" ) - { - player setactionslot( 1, "weapon", self.stub.weaponname ); - } - } - if ( isDefined( level.zombie_craftablestubs[ self.stub.equipname ].str_taken ) ) - { - self.stub.hint_string = level.zombie_craftablestubs[ self.stub.equipname ].str_taken; - } - else - { - self.stub.hint_string = ""; - } - self sethintstring( self.stub.hint_string ); - player track_craftables_pickedup( self.stub.craftablespawn ); - continue; - } - else - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - } - } - } -} - -model_fly_away( unitrigger ) -{ - self moveto( self.origin + vectorScale( ( 0, 0, 1 ), 40 ), 3 ); - direction = self.origin; - direction = ( direction[ 1 ], direction[ 0 ], 0 ); - if ( direction[ 1 ] < 0 || direction[ 0 ] > 0 && direction[ 1 ] > 0 ) - { - direction = ( direction[ 0 ], direction[ 1 ] * -1, 0 ); - } - else - { - if ( direction[ 0 ] < 0 ) - { - direction = ( direction[ 0 ] * -1, direction[ 1 ], 0 ); - } - } - self vibrate( direction, 10, 0,5, 4 ); - self waittill( "movedone" ); - self ghost(); - playfx( level._effect[ "poltergeist" ], self.origin ); -} - -find_craftable_stub( equipname ) -{ - _a2775 = level.a_uts_craftables; - _k2775 = getFirstArrayKey( _a2775 ); - while ( isDefined( _k2775 ) ) - { - stub = _a2775[ _k2775 ]; - if ( stub.equipname == equipname ) - { - return stub; - } - _k2775 = getNextArrayKey( _a2775, _k2775 ); - } - return undefined; -} - -uncraft_craftable( equipname, return_pieces, origin, angles ) -{ - stub = find_craftable_stub( equipname ); - stub_uncraft_craftable( stub, return_pieces, origin, angles ); -} - -stub_uncraft_craftable( stub, return_pieces, origin, angles, use_random_start ) -{ - if ( isDefined( stub ) ) - { - craftable = stub.craftablespawn; - craftable.crafted = 0; - craftable.stub.crafted = 0; - craftable notify( "uncrafted" ); - level.craftables_crafted[ craftable.craftable_name ] = 0; - level notify( craftable.craftable_name + "_uncrafted" ); - i = 0; - while ( i < craftable.a_piecespawns.size ) - { - craftable.a_piecespawns[ i ].crafted = 0; - if ( isDefined( craftable.a_piecespawns[ i ].tag_name ) ) - { - craftable.stub.model notsolid(); - if ( isDefined( craftable.a_piecespawns[ i ].crafted ) && !craftable.a_piecespawns[ i ].crafted ) - { - craftable.stub.model hidepart( craftable.a_piecespawns[ i ].tag_name ); - break; - } - else - { - craftable.stub.model show(); - craftable.stub.model showpart( craftable.a_piecespawns[ i ].tag_name ); - } - } - if ( isDefined( return_pieces ) && return_pieces ) - { - craftable.a_piecespawns[ i ] piece_spawn_at( origin, angles, use_random_start ); - } - i++; - } - if ( isDefined( craftable.stub.model ) ) - { - craftable.stub.model ghost(); - } - } -} - -player_explode_craftable( equipname, origin, speed, return_to_spawn, return_time ) -{ - self explosiondamage( 50, origin ); - stub = find_craftable_stub( equipname ); - if ( isDefined( stub ) ) - { - craftable = stub.craftablespawn; - craftable.crafted = 0; - craftable.stub.crafted = 0; - craftable notify( "uncrafted" ); - level.craftables_crafted[ craftable.craftable_name ] = 0; - level notify( craftable.craftable_name + "_uncrafted" ); - i = 0; - while ( i < craftable.a_piecespawns.size ) - { - craftable.a_piecespawns[ i ].crafted = 0; - if ( isDefined( craftable.a_piecespawns[ i ].tag_name ) ) - { - craftable.stub.model notsolid(); - if ( isDefined( craftable.a_piecespawns[ i ].crafted ) && !craftable.a_piecespawns[ i ].crafted ) - { - craftable.stub.model hidepart( craftable.a_piecespawns[ i ].tag_name ); - break; - } - else - { - craftable.stub.model show(); - craftable.stub.model showpart( craftable.a_piecespawns[ i ].tag_name ); - } - } - ang = randomfloat( 360 ); - h = 0,25 + randomfloat( 0,5 ); - dir = ( sin( ang ), cos( ang ), h ); - self thread player_throw_piece( craftable.a_piecespawns[ i ], origin, speed * dir, return_to_spawn, return_time ); - i++; - } - craftable.stub.model ghost(); - } -} - -think_craftables() -{ - _a2873 = level.zombie_include_craftables; - _k2873 = getFirstArrayKey( _a2873 ); - while ( isDefined( _k2873 ) ) - { - craftable = _a2873[ _k2873 ]; - if ( isDefined( craftable.triggerthink ) ) - { - craftable [[ craftable.triggerthink ]](); - } - _k2873 = getNextArrayKey( _a2873, _k2873 ); - } -} - -opentablecraftable() -{ - a_trigs = getentarray( "open_craftable_trigger", "targetname" ); - _a2887 = a_trigs; - _k2887 = getFirstArrayKey( _a2887 ); - while ( isDefined( _k2887 ) ) - { - trig = _a2887[ _k2887 ]; - setup_unitrigger_craftable_internal( trig, "open_table", "", "OPEN_CRAFTABLE", 1, 0 ); - _k2887 = getNextArrayKey( _a2887, _k2887 ); - } -} - -craftable_trigger_think( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) -{ - return setup_unitrigger_craftable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); -} - -craftable_trigger_think_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) -{ - return setup_unitrigger_craftable_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); -} - -setup_vehicle_unitrigger_craftable( parent, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) -{ - trig = getent( trigger_targetname, "targetname" ); - if ( !isDefined( trig ) ) - { - return; - } - unitrigger_stub = spawnstruct(); - unitrigger_stub.craftablestub = level.zombie_include_craftables[ equipname ]; - unitrigger_stub.link_parent = parent; - unitrigger_stub.origin_parent = trig; - unitrigger_stub.trigger_targetname = trigger_targetname; - unitrigger_stub.originfunc = ::anystub_get_unitrigger_origin; - unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; - unitrigger_stub.origin = trig.origin; - unitrigger_stub.angles = trig.angles; - unitrigger_stub.equipname = equipname; - unitrigger_stub.weaponname = weaponname; - unitrigger_stub.trigger_hintstring = trigger_hintstring; - unitrigger_stub.delete_trigger = delete_trigger; - unitrigger_stub.crafted = 0; - unitrigger_stub.persistent = persistent; - unitrigger_stub.usetime = int( 3000 ); - unitrigger_stub.onbeginuse = ::onbeginuseuts; - unitrigger_stub.onenduse = ::onenduseuts; - unitrigger_stub.onuse = ::onuseplantobjectuts; - unitrigger_stub.oncantuse = ::oncantuseuts; - if ( isDefined( trig.script_length ) ) - { - unitrigger_stub.script_length = trig.script_length; - } - else - { - unitrigger_stub.script_length = 24; - } - if ( isDefined( trig.script_width ) ) - { - unitrigger_stub.script_width = trig.script_width; - } - else - { - unitrigger_stub.script_width = 64; - } - if ( isDefined( trig.script_height ) ) - { - unitrigger_stub.script_height = trig.script_height; - } - else - { - unitrigger_stub.script_height = 24; - } - if ( isDefined( trig.radius ) ) - { - unitrigger_stub.radius = trig.radius; - } - else - { - unitrigger_stub.radius = 64; - } - unitrigger_stub.target = trig.target; - unitrigger_stub.targetname = trig.targetname + "_trigger"; - unitrigger_stub.script_noteworthy = trig.script_noteworthy; - unitrigger_stub.script_parameters = trig.script_parameters; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - if ( isDefined( level.zombie_craftablestubs[ equipname ].str_to_craft ) ) - { - unitrigger_stub.hint_string = level.zombie_craftablestubs[ equipname ].str_to_craft; - } - unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - unitrigger_stub.require_look_at = 1; - unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - unitrigger_stub.prompt_and_visibility_func = ::craftabletrigger_update_prompt; - maps/mp/zombies/_zm_unitrigger::register_unitrigger( unitrigger_stub, ::craftable_place_think ); - unitrigger_stub.piece_trigger = trig; - trig.trigger_stub = unitrigger_stub; - unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( equipname, unitrigger_stub.origin ); - if ( delete_trigger ) - { - trig delete(); - } - level.a_uts_craftables[ level.a_uts_craftables.size ] = unitrigger_stub; - return unitrigger_stub; -} - -vehicle_craftable_trigger_think( vehicle, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) -{ - return setup_vehicle_unitrigger_craftable( vehicle, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); -} - -onpickuputs( player ) -{ -/# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Craftable piece recovered by - " + player.name ); -#/ - } -} - -ondroputs( player ) -{ -/# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Craftable piece dropped by - " + player.name ); -#/ - } - player notify( "event_ended" ); -} - -onbeginuseuts( player ) -{ -/# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Craftable piece begin use by - " + player.name ); -#/ - } - if ( isDefined( self.craftablestub.onbeginuse ) ) - { - self [[ self.craftablestub.onbeginuse ]]( player ); - } - if ( isDefined( player ) && !isDefined( player.craftableaudio ) ) - { - player.craftableaudio = spawn( "script_origin", player.origin ); - player.craftableaudio playloopsound( "zmb_craftable_loop" ); - } -} - -onenduseuts( team, player, result ) -{ -/# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Craftable piece end use by - " + player.name ); -#/ - } - if ( !isDefined( player ) ) - { - return; - } - if ( isDefined( player.craftableaudio ) ) - { - player.craftableaudio delete(); - player.craftableaudio = undefined; - } - if ( isDefined( self.craftablestub.onenduse ) ) - { - self [[ self.craftablestub.onenduse ]]( team, player, result ); - } - player notify( "event_ended" ); -} - -oncantuseuts( player ) -{ -/# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Craftable piece can't use by - " + player.name ); -#/ - } - if ( isDefined( self.craftablestub.oncantuse ) ) - { - self [[ self.craftablestub.oncantuse ]]( player ); - } -} - -onuseplantobjectuts( player ) -{ -/# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Craftable piece crafted by - " + player.name ); -#/ - } - if ( isDefined( self.craftablestub.onuseplantobject ) ) - { - self [[ self.craftablestub.onuseplantobject ]]( player ); - } - player notify( "bomb_planted" ); -} - -is_craftable() -{ - if ( !isDefined( level.zombie_craftablestubs ) ) - { - return 0; - } - if ( isDefined( self.zombie_weapon_upgrade ) && isDefined( level.zombie_craftablestubs[ self.zombie_weapon_upgrade ] ) ) - { - return 1; - } - if ( isDefined( self.script_noteworthy ) && self.script_noteworthy == "specialty_weapupgrade" ) - { - if ( isDefined( level.craftables_crafted[ "pap" ] ) && level.craftables_crafted[ "pap" ] ) - { - return 0; - } - return 1; - } - return 0; -} - -craftable_crafted() -{ - self.a_piecespawns--; - -} - -craftable_complete() -{ - if ( self.a_piecespawns <= 0 ) - { - return 1; - } - return 0; -} - -get_craftable_hint( craftable_name ) -{ -/# - assert( isDefined( level.zombie_craftablestubs[ craftable_name ] ), craftable_name + " was not included or is not part of the zombie weapon list." ); -#/ - return level.zombie_craftablestubs[ craftable_name ].str_to_craft; -} - -delete_on_disconnect( craftable, self_notify, skip_delete ) -{ - craftable endon( "death" ); - self waittill( "disconnect" ); - if ( isDefined( self_notify ) ) - { - self notify( self_notify ); - } - if ( isDefined( skip_delete ) && !skip_delete ) - { - if ( isDefined( craftable.stub ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( craftable.stub ); - craftable.stub = undefined; - } - if ( isDefined( craftable ) ) - { - craftable delete(); - } - } -} - -is_holding_part( craftable_name, piece_name ) -{ - if ( isDefined( self.current_craftable_piece ) ) - { - if ( self.current_craftable_piece.craftablename == craftable_name && self.current_craftable_piece.modelname == piece_name ) - { - return 1; - } - } - while ( isDefined( level.a_uts_craftables ) ) - { - _a3246 = level.a_uts_craftables; - _k3246 = getFirstArrayKey( _a3246 ); - while ( isDefined( _k3246 ) ) - { - craftable_stub = _a3246[ _k3246 ]; - while ( craftable_stub.craftablestub.name == craftable_name ) - { - _a3251 = craftable_stub.craftablespawn.a_piecespawns; - _k3251 = getFirstArrayKey( _a3251 ); - while ( isDefined( _k3251 ) ) - { - piece = _a3251[ _k3251 ]; - if ( piece.piecename == piece_name ) - { - if ( isDefined( piece.in_shared_inventory ) && piece.in_shared_inventory ) - { - return 1; - } - } - _k3251 = getNextArrayKey( _a3251, _k3251 ); - } - } - _k3246 = getNextArrayKey( _a3246, _k3246 ); - } - } - return 0; -} - -is_part_crafted( craftable_name, piece_name ) -{ - while ( isDefined( level.a_uts_craftables ) ) - { - _a3276 = level.a_uts_craftables; - _k3276 = getFirstArrayKey( _a3276 ); - while ( isDefined( _k3276 ) ) - { - craftable_stub = _a3276[ _k3276 ]; - while ( craftable_stub.craftablestub.name == craftable_name ) - { - if ( isDefined( craftable_stub.crafted ) && craftable_stub.crafted ) - { - return 1; - } - _a3287 = craftable_stub.craftablespawn.a_piecespawns; - _k3287 = getFirstArrayKey( _a3287 ); - while ( isDefined( _k3287 ) ) - { - piece = _a3287[ _k3287 ]; - if ( piece.piecename == piece_name ) - { - if ( isDefined( piece.crafted ) && piece.crafted ) - { - return 1; - } - } - _k3287 = getNextArrayKey( _a3287, _k3287 ); - } - } - _k3276 = getNextArrayKey( _a3276, _k3276 ); - } - } - return 0; -} - -track_craftable_piece_pickedup( piece ) -{ - if ( !isDefined( piece ) || !isDefined( piece.craftablename ) ) - { -/# - println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftable_piece_pickedup() \n" ); -#/ - return; - } - self add_map_craftable_stat( piece.craftablename, "pieces_pickedup", 1 ); - if ( isDefined( piece.piecestub.vox_id ) ) - { - if ( isDefined( piece.piecestub.b_one_time_vo ) && piece.piecestub.b_one_time_vo ) - { - if ( !isDefined( self.a_one_time_piece_pickup_vo ) ) - { - self.a_one_time_piece_pickup_vo = []; - } - if ( isDefined( self.dontspeak ) && self.dontspeak ) - { - return; - } - if ( isinarray( self.a_one_time_piece_pickup_vo, piece.piecestub.vox_id ) ) - { - return; - } - self.a_one_time_piece_pickup_vo[ self.a_one_time_piece_pickup_vo.size ] = piece.piecestub.vox_id; - } - self thread do_player_general_vox( "general", piece.piecestub.vox_id + "_pickup" ); - } - else - { - self thread do_player_general_vox( "general", "build_pickup" ); - } -} - -track_craftable_pieces_crafted( craftable ) -{ - if ( !isDefined( craftable ) || !isDefined( craftable.craftable_name ) ) - { -/# - println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftable_pieces_crafted() \n" ); -#/ - return; - } - bname = craftable.craftable_name; - if ( isDefined( craftable.stat_name ) ) - { - bname = craftable.stat_name; - } - self add_map_craftable_stat( bname, "pieces_built", 1 ); - if ( !craftable craftable_all_crafted() ) - { - self thread do_player_general_vox( "general", "build_add" ); - } -} - -track_craftables_crafted( craftable ) -{ - if ( !isDefined( craftable ) || !isDefined( craftable.craftable_name ) ) - { -/# - println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftables_crafted() \n" ); -#/ - return; - } - bname = craftable.craftable_name; - if ( isDefined( craftable.stat_name ) ) - { - bname = craftable.stat_name; - } - self add_map_craftable_stat( bname, "buildable_built", 1 ); - self maps/mp/zombies/_zm_stats::increment_client_stat( "buildables_built", 0 ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "buildables_built" ); - if ( isDefined( craftable.stub.craftablestub.vox_id ) ) - { - if ( isDefined( level.zombie_custom_craftable_built_vo ) ) - { - self thread [[ level.zombie_custom_craftable_built_vo ]]( craftable.stub ); - } - self thread do_player_general_vox( "general", craftable.stub.craftablestub.vox_id + "_final" ); - } -} - -track_craftables_pickedup( craftable ) -{ - if ( !isDefined( craftable ) ) - { -/# - println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftables_pickedup() \n" ); -#/ - return; - } - stat_name = get_craftable_stat_name( craftable.craftable_name ); - if ( !isDefined( stat_name ) ) - { -/# - println( "STAT TRACKING FAILURE: NO STAT NAME FOR " + craftable.craftable_name + "\n" ); -#/ - return; - } - self add_map_craftable_stat( stat_name, "buildable_pickedup", 1 ); - if ( isDefined( craftable.stub.craftablestub.vox_id ) ) - { - self thread do_player_general_vox( "general", craftable.stub.craftablestub.vox_id + "_plc" ); - } - self say_pickup_craftable_vo( craftable, 0 ); -} - -track_craftables_planted( equipment ) -{ - if ( !isDefined( equipment ) ) - { -/# - println( "STAT TRACKING FAILURE: NOT DEFINED for track_craftables_planted() \n" ); -#/ - return; - } - craftable_name = undefined; - if ( isDefined( equipment.name ) ) - { - craftable_name = get_craftable_stat_name( equipment.name ); - } - if ( !isDefined( craftable_name ) ) - { -/# - println( "STAT TRACKING FAILURE: NO CRAFTABLE NAME FOR track_craftables_planted() " + equipment.name + "\n" ); -#/ - return; - } - maps/mp/_demo::bookmark( "zm_player_buildable_placed", getTime(), self ); - self add_map_craftable_stat( craftable_name, "buildable_placed", 1 ); -} - -placed_craftable_vo_timer() -{ - self endon( "disconnect" ); - self.craftable_timer = 1; - wait 60; - self.craftable_timer = 0; -} - -craftable_pickedup_timer() -{ - self endon( "disconnect" ); - self.craftable_pickedup_timer = 1; - wait 60; - self.craftable_pickedup_timer = 0; -} - -track_planted_craftables_pickedup( equipment ) -{ - if ( !isDefined( equipment ) ) - { - return; - } - if ( equipment != "equip_turbine_zm" && equipment != "equip_turret_zm" && equipment != "equip_electrictrap_zm" && equipment != "riotshield_zm" || equipment == "alcatraz_shield_zm" && equipment == "tomb_shield_zm" ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "planted_buildables_pickedup", 0 ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "planted_buildables_pickedup" ); - } - if ( isDefined( self.craftable_pickedup_timer ) && !self.craftable_pickedup_timer ) - { - self say_pickup_craftable_vo( equipment, 1 ); - self thread craftable_pickedup_timer(); - } -} - -track_placed_craftables( craftable_name ) -{ - if ( !isDefined( craftable_name ) ) - { - return; - } - self add_map_craftable_stat( craftable_name, "buildable_placed", 1 ); - vo_name = undefined; - if ( craftable_name == level.riotshield_name ) - { - vo_name = "craft_plc_shield"; - } - if ( !isDefined( vo_name ) ) - { - return; - } - self thread do_player_general_vox( "general", vo_name ); -} - -add_map_craftable_stat( piece_name, stat_name, value ) -{ - if ( isDefined( piece_name ) || piece_name == "sq_common" && piece_name == "keys_zm" ) - { - return; - } - if ( isDefined( level.zm_disable_recording_stats ) || level.zm_disable_recording_stats && isDefined( level.zm_disable_recording_buildable_stats ) && level.zm_disable_recording_buildable_stats ) - { - return; - } - self adddstat( "buildables", piece_name, stat_name, value ); -} - -say_pickup_craftable_vo( craftable_name, world ) -{ -} - -get_craftable_vo_name( craftable_name ) -{ -} - -get_craftable_stat_name( craftable_name ) -{ - if ( isDefined( craftable_name ) ) - { - switch( craftable_name ) - { - case "equip_riotshield_zm": - return "riotshield_zm"; - case "equip_turbine_zm": - return "turbine"; - case "equip_turret_zm": - return "turret"; - case "equip_electrictrap_zm": - return "electric_trap"; - case "equip_springpad_zm": - return "springpad_zm"; - case "equip_slipgun_zm": - return "slipgun_zm"; - } - } - return craftable_name; -} - -get_craftable_model( str_craftable ) -{ - _a3598 = level.a_uts_craftables; - _k3598 = getFirstArrayKey( _a3598 ); - while ( isDefined( _k3598 ) ) - { - uts_craftable = _a3598[ _k3598 ]; - if ( uts_craftable.craftablestub.name == str_craftable ) - { - if ( isDefined( uts_craftable.model ) ) - { - return uts_craftable.model; - } - } - else - { - _k3598 = getNextArrayKey( _a3598, _k3598 ); - } - } - return undefined; -} - -get_craftable_piece( str_craftable, str_piece ) -{ - _a3618 = level.a_uts_craftables; - _k3618 = getFirstArrayKey( _a3618 ); - while ( isDefined( _k3618 ) ) - { - uts_craftable = _a3618[ _k3618 ]; - if ( uts_craftable.craftablestub.name == str_craftable ) - { - _a3622 = uts_craftable.craftablespawn.a_piecespawns; - _k3622 = getFirstArrayKey( _a3622 ); - while ( isDefined( _k3622 ) ) - { - piecespawn = _a3622[ _k3622 ]; - if ( piecespawn.piecename == str_piece ) - { - return piecespawn; - } - _k3622 = getNextArrayKey( _a3622, _k3622 ); - } - } - else _k3618 = getNextArrayKey( _a3618, _k3618 ); - } - return undefined; -} - -player_get_craftable_piece( str_craftable, str_piece ) -{ - piecespawn = get_craftable_piece( str_craftable, str_piece ); - if ( isDefined( piecespawn ) ) - { - self player_take_piece( piecespawn ); - } -} - -get_craftable_piece_model( str_craftable, str_piece ) -{ - _a3654 = level.a_uts_craftables; - _k3654 = getFirstArrayKey( _a3654 ); - while ( isDefined( _k3654 ) ) - { - uts_craftable = _a3654[ _k3654 ]; - if ( uts_craftable.craftablestub.name == str_craftable ) - { - _a3658 = uts_craftable.craftablespawn.a_piecespawns; - _k3658 = getFirstArrayKey( _a3658 ); - while ( isDefined( _k3658 ) ) - { - piecespawn = _a3658[ _k3658 ]; - if ( piecespawn.piecename == str_piece && isDefined( piecespawn.model ) ) - { - return piecespawn.model; - } - _k3658 = getNextArrayKey( _a3658, _k3658 ); - } - } - else _k3654 = getNextArrayKey( _a3654, _k3654 ); - } - return undefined; -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_magicbox_tomb.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_magicbox_tomb.gsc deleted file mode 100644 index ea9b7a3..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_magicbox_tomb.gsc +++ /dev/null @@ -1,298 +0,0 @@ -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - registerclientfield( "zbarrier", "magicbox_initial_fx", 2000, 1, "int" ); - registerclientfield( "zbarrier", "magicbox_amb_fx", 2000, 2, "int" ); - registerclientfield( "zbarrier", "magicbox_open_fx", 2000, 1, "int" ); - registerclientfield( "zbarrier", "magicbox_leaving_fx", 2000, 1, "int" ); - level._effect[ "lght_marker" ] = loadfx( "maps/zombie_tomb/fx_tomb_marker" ); - level._effect[ "lght_marker_flare" ] = loadfx( "maps/zombie/fx_zmb_tranzit_marker_fl" ); - level._effect[ "poltergeist" ] = loadfx( "system_elements/fx_null" ); - level._effect[ "box_powered" ] = loadfx( "maps/zombie_tomb/fx_tomb_magicbox_on" ); - level._effect[ "box_unpowered" ] = loadfx( "maps/zombie_tomb/fx_tomb_magicbox_off" ); - level._effect[ "box_gone_ambient" ] = loadfx( "maps/zombie_tomb/fx_tomb_magicbox_amb_base" ); - level._effect[ "box_here_ambient" ] = loadfx( "maps/zombie_tomb/fx_tomb_magicbox_amb_slab" ); - level._effect[ "box_is_open" ] = loadfx( "maps/zombie_tomb/fx_tomb_magicbox_open" ); - level._effect[ "box_portal" ] = loadfx( "maps/zombie_tomb/fx_tomb_magicbox_portal" ); - level._effect[ "box_is_leaving" ] = loadfx( "maps/zombie_tomb/fx_tomb_magicbox_leave" ); - level.chest_joker_model = "zombie_teddybear"; - precachemodel( level.chest_joker_model ); - level.chest_joker_custom_movement = ::custom_joker_movement; - level.custom_magic_box_timer_til_despawn = ::custom_magic_box_timer_til_despawn; - level.custom_magic_box_do_weapon_rise = ::custom_magic_box_do_weapon_rise; - level.custom_magic_box_weapon_wait = ::custom_magic_box_weapon_wait; - level.custom_magicbox_float_height = 50; - level.magic_box_zbarrier_state_func = ::set_magic_box_zbarrier_state; - level thread wait_then_create_base_magic_box_fx(); - level thread handle_fire_sale(); -} - -custom_joker_movement() -{ - v_origin = self.weapon_model.origin - vectorScale( ( 0, 1, 0 ), 5 ); - self.weapon_model delete(); - m_lock = spawn( "script_model", v_origin ); - m_lock setmodel( level.chest_joker_model ); - m_lock.angles = self.angles + vectorScale( ( 0, 1, 0 ), 270 ); - m_lock playsound( "zmb_hellbox_bear" ); - wait 0,5; - level notify( "weapon_fly_away_start" ); - wait 1; - m_lock rotateyaw( 3000, 4, 4 ); - wait 3; - v_angles = anglesToForward( self.angles - vectorScale( ( 0, 1, 0 ), 90 ) ); - m_lock moveto( m_lock.origin + ( 20 * v_angles ), 0,5, 0,5 ); - m_lock waittill( "movedone" ); - m_lock moveto( m_lock.origin + ( -100 * v_angles ), 0,5, 0,5 ); - m_lock waittill( "movedone" ); - m_lock delete(); - self notify( "box_moving" ); - level notify( "weapon_fly_away_end" ); -} - -custom_magic_box_timer_til_despawn( magic_box ) -{ - self endon( "kill_weapon_movement" ); - putbacktime = 12; - v_float = anglesToForward( magic_box.angles - vectorScale( ( 0, 1, 0 ), 90 ) ) * 40; - self moveto( self.origin - ( v_float * 0,25 ), putbacktime, putbacktime * 0,5 ); - wait putbacktime; - if ( isDefined( self ) ) - { - self delete(); - } -} - -custom_magic_box_weapon_wait() -{ - wait 0,5; -} - -wait_then_create_base_magic_box_fx() -{ - while ( !isDefined( level.chests ) ) - { - wait 0,5; - } - while ( !isDefined( level.chests[ level.chests.size - 1 ].zbarrier ) ) - { - wait 0,5; - } - _a125 = level.chests; - _k125 = getFirstArrayKey( _a125 ); - while ( isDefined( _k125 ) ) - { - chest = _a125[ _k125 ]; - chest.zbarrier setclientfield( "magicbox_initial_fx", 1 ); - _k125 = getNextArrayKey( _a125, _k125 ); - } -} - -set_magic_box_zbarrier_state( state ) -{ - i = 0; - while ( i < self getnumzbarrierpieces() ) - { - self hidezbarrierpiece( i ); - i++; - } - self notify( "zbarrier_state_change" ); - switch( state ) - { - case "away": - self showzbarrierpiece( 0 ); - self.state = "away"; - self.owner.is_locked = 0; - break; - case "arriving": - self showzbarrierpiece( 1 ); - self thread magic_box_arrives(); - self.state = "arriving"; - break; - case "initial": - self showzbarrierpiece( 1 ); - self thread magic_box_initial(); - thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.owner.unitrigger_stub, ::maps/mp/zombies/_zm_magicbox::magicbox_unitrigger_think ); - self.state = "close"; - break; - case "open": - self showzbarrierpiece( 2 ); - self thread magic_box_opens(); - self.state = "open"; - break; - case "close": - self showzbarrierpiece( 2 ); - self thread magic_box_closes(); - self.state = "close"; - break; - case "leaving": - self showzbarrierpiece( 1 ); - self thread magic_box_leaves(); - self.state = "leaving"; - self.owner.is_locked = 0; - break; - default: - if ( isDefined( level.custom_magicbox_state_handler ) ) - { - self [[ level.custom_magicbox_state_handler ]]( state ); - } - break; - } -} - -magic_box_initial() -{ - self setzbarrierpiecestate( 1, "open" ); - wait 1; - self setclientfield( "magicbox_amb_fx", 1 ); -} - -magic_box_arrives() -{ - self setclientfield( "magicbox_leaving_fx", 0 ); - self setzbarrierpiecestate( 1, "opening" ); - while ( self getzbarrierpiecestate( 1 ) == "opening" ) - { - wait 0,05; - } - self notify( "arrived" ); - self.state = "close"; - s_zone_capture_area = level.zone_capture.zones[ self.zone_capture_area ]; - if ( isDefined( s_zone_capture_area ) ) - { - if ( !s_zone_capture_area ent_flag( "player_controlled" ) ) - { - self setclientfield( "magicbox_amb_fx", 1 ); - return; - } - else - { - self setclientfield( "magicbox_amb_fx", 2 ); - } - } -} - -magic_box_leaves() -{ - self setclientfield( "magicbox_leaving_fx", 1 ); - self setclientfield( "magicbox_open_fx", 0 ); - self setzbarrierpiecestate( 1, "closing" ); - self playsound( "zmb_hellbox_rise" ); - while ( self getzbarrierpiecestate( 1 ) == "closing" ) - { - wait 0,1; - } - self notify( "left" ); - s_zone_capture_area = level.zone_capture.zones[ self.zone_capture_area ]; - if ( isDefined( s_zone_capture_area ) ) - { - if ( s_zone_capture_area ent_flag( "player_controlled" ) ) - { - self setclientfield( "magicbox_amb_fx", 3 ); - } - else - { - self setclientfield( "magicbox_amb_fx", 0 ); - } - } - if ( isDefined( level.dig_magic_box_moved ) && !level.dig_magic_box_moved ) - { - level.dig_magic_box_moved = 1; - } -} - -magic_box_opens() -{ - self setclientfield( "magicbox_open_fx", 1 ); - self setzbarrierpiecestate( 2, "opening" ); - self playsound( "zmb_hellbox_open" ); - while ( self getzbarrierpiecestate( 2 ) == "opening" ) - { - wait 0,1; - } - self notify( "opened" ); - self thread magic_box_open_idle(); -} - -magic_box_open_idle() -{ - self endon( "stop_open_idle" ); - self hidezbarrierpiece( 2 ); - self showzbarrierpiece( 5 ); - while ( 1 ) - { - self setzbarrierpiecestate( 5, "opening" ); - while ( self getzbarrierpiecestate( 5 ) != "open" ) - { - wait 0,05; - } - } -} - -magic_box_closes() -{ - self notify( "stop_open_idle" ); - self hidezbarrierpiece( 5 ); - self showzbarrierpiece( 2 ); - self setzbarrierpiecestate( 2, "closing" ); - self playsound( "zmb_hellbox_close" ); - self setclientfield( "magicbox_open_fx", 0 ); - while ( self getzbarrierpiecestate( 2 ) == "closing" ) - { - wait 0,1; - } - self notify( "closed" ); -} - -custom_magic_box_do_weapon_rise() -{ - self endon( "box_hacked_respin" ); - wait 0,5; - self setzbarrierpiecestate( 3, "closed" ); - self setzbarrierpiecestate( 4, "closed" ); - wait_network_frame(); - self zbarrierpieceuseboxriselogic( 3 ); - self zbarrierpieceuseboxriselogic( 4 ); - self showzbarrierpiece( 3 ); - self showzbarrierpiece( 4 ); - self setzbarrierpiecestate( 3, "opening" ); - self setzbarrierpiecestate( 4, "opening" ); - while ( self getzbarrierpiecestate( 3 ) != "open" ) - { - wait 0,5; - } - self hidezbarrierpiece( 3 ); - self hidezbarrierpiece( 4 ); -} - -handle_fire_sale() -{ - while ( 1 ) - { - level waittill( "fire_sale_off" ); - i = 0; - while ( i < level.chests.size ) - { - if ( level.chest_index != i && isDefined( level.chests[ i ].was_temp ) ) - { - if ( isDefined( level.chests[ i ].zbarrier.zone_capture_area ) && level.zone_capture.zones[ level.chests[ i ].zbarrier.zone_capture_area ] ent_flag( "player_controlled" ) ) - { - level.chests[ i ].zbarrier setclientfield( "magicbox_amb_fx", 3 ); - i++; - continue; - } - else - { - level.chests[ i ].zbarrier setclientfield( "magicbox_amb_fx", 0 ); - } - } - i++; - } - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_melee_weapon.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_melee_weapon.gsc deleted file mode 100644 index ed494ee..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_melee_weapon.gsc +++ /dev/null @@ -1,627 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_pers_upgrades_functions; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) -{ - precacheitem( weapon_name ); - precacheitem( flourish_weapon_name ); - add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); - melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" ); - i = 0; - while ( i < melee_weapon_triggers.size ) - { - knife_model = getent( melee_weapon_triggers[ i ].target, "targetname" ); - if ( isDefined( knife_model ) ) - { - knife_model hide(); - } - melee_weapon_triggers[ i ] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); - if ( isDefined( level.monolingustic_prompt_format ) && !level.monolingustic_prompt_format ) - { - melee_weapon_triggers[ i ] sethintstring( hint_string, cost ); - if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons ) - { - cursor_hint = "HINT_WEAPON"; - cursor_hint_weapon = weapon_name; - melee_weapon_triggers[ i ] setcursorhint( cursor_hint, cursor_hint_weapon ); - } - else - { - melee_weapon_triggers[ i ] setcursorhint( "HINT_NOICON" ); - } - } - else - { - weapon_display = get_weapon_display_name( weapon_name ); - hint_string = &"ZOMBIE_WEAPONCOSTONLY"; - melee_weapon_triggers[ i ] sethintstring( hint_string, weapon_display, cost ); - if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons ) - { - cursor_hint = "HINT_WEAPON"; - cursor_hint_weapon = weapon_name; - melee_weapon_triggers[ i ] setcursorhint( cursor_hint, cursor_hint_weapon ); - break; - } - else - { - melee_weapon_triggers[ i ] setcursorhint( "HINT_NOICON" ); - } - } - melee_weapon_triggers[ i ] usetriggerrequirelookat(); - i++; - } - melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" ); - i = 0; - while ( i < melee_weapon_structs.size ) - { - prepare_stub( melee_weapon_structs[ i ].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); - i++; - } - register_melee_weapon_for_level( weapon_name ); - if ( !isDefined( level.ballistic_weapon_name ) ) - { - level.ballistic_weapon_name = []; - } - level.ballistic_weapon_name[ weapon_name ] = ballistic_weapon_name; - if ( !isDefined( level.ballistic_upgraded_weapon_name ) ) - { - level.ballistic_upgraded_weapon_name = []; - } - level.ballistic_upgraded_weapon_name[ weapon_name ] = ballistic_upgraded_weapon_name; -/# - if ( !isDefined( level.zombie_weapons[ weapon_name ] ) ) - { - if ( isDefined( level.devgui_add_weapon ) ) - { - [[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost ); -#/ - } - } -} - -prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) -{ - if ( isDefined( stub ) ) - { - if ( isDefined( level.monolingustic_prompt_format ) && !level.monolingustic_prompt_format ) - { - stub.hint_string = hint_string; - if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons ) - { - stub.cursor_hint = "HINT_WEAPON"; - stub.cursor_hint_weapon = weapon_name; - } - else - { - stub.cursor_hint = "HINT_NOICON"; - stub.cursor_hint_weapon = undefined; - } - } - else - { - stub.hint_parm1 = get_weapon_display_name( weapon_name ); - stub.hint_parm2 = cost; - stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; - if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons ) - { - stub.cursor_hint = "HINT_WEAPON"; - stub.cursor_hint_weapon = weapon_name; - } - else - { - stub.cursor_hint = "HINT_NOICON"; - stub.cursor_hint_weapon = undefined; - } - } - stub.cost = cost; - stub.weapon_name = weapon_name; - stub.vo_dialog_id = vo_dialog_id; - stub.flourish_weapon_name = flourish_weapon_name; - stub.ballistic_weapon_name = ballistic_weapon_name; - stub.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; - stub.trigger_func = ::melee_weapon_think; - stub.flourish_fn = flourish_fn; - } -} - -add_stub( stub, weapon_name ) -{ - melee_weapon = undefined; - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( level._melee_weapons[ i ].weapon_name == weapon_name ) - { - melee_weapon = level._melee_weapons[ i ]; - break; - } - else - { - i++; - } - } - if ( isDefined( stub ) && isDefined( melee_weapon ) ) - { - prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn ); - } -} - -give_melee_weapon_by_name( weapon_name ) -{ - melee_weapon = undefined; - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( level._melee_weapons[ i ].weapon_name == weapon_name ) - { - melee_weapon = level._melee_weapons[ i ]; - break; - } - else - { - i++; - } - } - if ( isDefined( melee_weapon ) ) - { - self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined ); - } -} - -add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) -{ - melee_weapon = spawnstruct(); - melee_weapon.weapon_name = weapon_name; - melee_weapon.flourish_weapon_name = flourish_weapon_name; - melee_weapon.ballistic_weapon_name = ballistic_weapon_name; - melee_weapon.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; - melee_weapon.cost = cost; - melee_weapon.wallbuy_targetname = wallbuy_targetname; - melee_weapon.hint_string = hint_string; - melee_weapon.vo_dialog_id = vo_dialog_id; - melee_weapon.flourish_fn = flourish_fn; - if ( !isDefined( level._melee_weapons ) ) - { - level._melee_weapons = []; - } - level._melee_weapons[ level._melee_weapons.size ] = melee_weapon; -} - -player_can_see_weapon_prompt( weapon_name ) -{ - if ( is_true( level._allow_melee_weapon_switching ) ) - { - return 1; - } - if ( isDefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) ) - { - return 0; - } - return 1; -} - -spectator_respawn_all() -{ - i = 0; - while ( i < level._melee_weapons.size ) - { - self spectator_respawn( level._melee_weapons[ i ].wallbuy_targetname, level._melee_weapons[ i ].weapon_name ); - i++; - } -} - -spectator_respawn( wallbuy_targetname, weapon_name ) -{ - melee_triggers = getentarray( wallbuy_targetname, "targetname" ); - players = get_players(); - i = 0; - while ( i < melee_triggers.size ) - { - melee_triggers[ i ] setvisibletoall(); - while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - j = 0; - while ( j < players.size ) - { - if ( !players[ j ] player_can_see_weapon_prompt( weapon_name ) ) - { - melee_triggers[ i ] setinvisibletoplayer( players[ j ] ); - } - j++; - } - } - i++; - } -} - -trigger_hide_all() -{ - i = 0; - while ( i < level._melee_weapons.size ) - { - self trigger_hide( level._melee_weapons[ i ].wallbuy_targetname ); - i++; - } -} - -trigger_hide( wallbuy_targetname ) -{ - melee_triggers = getentarray( wallbuy_targetname, "targetname" ); - i = 0; - while ( i < melee_triggers.size ) - { - melee_triggers[ i ] setinvisibletoplayer( self ); - i++; - } -} - -has_any_ballistic_knife() -{ - if ( self hasweapon( "knife_ballistic_zm" ) ) - { - return 1; - } - if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) - { - return 1; - } - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( self hasweapon( level._melee_weapons[ i ].ballistic_weapon_name ) ) - { - return 1; - } - if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) ) - { - return 1; - } - i++; - } - return 0; -} - -has_upgraded_ballistic_knife() -{ - if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) - { - return 1; - } - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) ) - { - return 1; - } - i++; - } - return 0; -} - -give_ballistic_knife( weapon_string, upgraded ) -{ - current_melee_weapon = self get_player_melee_weapon(); - if ( isDefined( current_melee_weapon ) ) - { - if ( upgraded && isDefined( level.ballistic_upgraded_weapon_name ) && isDefined( level.ballistic_upgraded_weapon_name[ current_melee_weapon ] ) ) - { - weapon_string = level.ballistic_upgraded_weapon_name[ current_melee_weapon ]; - } - if ( !upgraded && isDefined( level.ballistic_weapon_name ) && isDefined( level.ballistic_weapon_name[ current_melee_weapon ] ) ) - { - weapon_string = level.ballistic_weapon_name[ current_melee_weapon ]; - } - } - return weapon_string; -} - -change_melee_weapon( weapon_name, current_weapon ) -{ - current_melee_weapon = self get_player_melee_weapon(); - if ( isDefined( current_melee_weapon ) && current_melee_weapon != weapon_name ) - { - self takeweapon( current_melee_weapon ); - unacquire_weapon_toggle( current_melee_weapon ); - } - self set_player_melee_weapon( weapon_name ); - had_ballistic = 0; - had_ballistic_upgraded = 0; - ballistic_was_primary = 0; - primaryweapons = self getweaponslistprimaries(); - i = 0; - while ( i < primaryweapons.size ) - { - primary_weapon = primaryweapons[ i ]; - if ( issubstr( primary_weapon, "knife_ballistic_" ) ) - { - had_ballistic = 1; - if ( primary_weapon == current_weapon ) - { - ballistic_was_primary = 1; - } - self notify( "zmb_lost_knife" ); - self takeweapon( primary_weapon ); - unacquire_weapon_toggle( primary_weapon ); - if ( issubstr( primary_weapon, "upgraded" ) ) - { - had_ballistic_upgraded = 1; - } - } - i++; - } - if ( had_ballistic ) - { - if ( had_ballistic_upgraded ) - { - new_ballistic = level.ballistic_upgraded_weapon_name[ weapon_name ]; - if ( ballistic_was_primary ) - { - current_weapon = new_ballistic; - } - self giveweapon( new_ballistic, 0, self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) ); - } - else - { - new_ballistic = level.ballistic_weapon_name[ weapon_name ]; - if ( ballistic_was_primary ) - { - current_weapon = new_ballistic; - } - self giveweapon( new_ballistic, 0 ); - } - } - return current_weapon; -} - -melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) -{ - self.first_time_triggered = 0; - while ( isDefined( self.stub ) ) - { - self endon( "kill_trigger" ); - if ( isDefined( self.stub.first_time_triggered ) ) - { - self.first_time_triggered = self.stub.first_time_triggered; - } - weapon_name = self.stub.weapon_name; - cost = self.stub.cost; - flourish_fn = self.stub.flourish_fn; - vo_dialog_id = self.stub.vo_dialog_id; - flourish_weapon_name = self.stub.flourish_weapon_name; - ballistic_weapon_name = self.stub.ballistic_weapon_name; - ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name; - players = getplayers(); - while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - i = 0; - while ( i < players.size ) - { - if ( !players[ i ] player_can_see_weapon_prompt( weapon_name ) ) - { - self setinvisibletoplayer( players[ i ] ); - } - i++; - } - } - } - for ( ;; ) - { - self waittill( "trigger", player ); - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - continue; - } - else if ( player in_revive_trigger() ) - { - wait 0,1; - continue; - } - else if ( player isthrowinggrenade() ) - { - wait 0,1; - continue; - } - else if ( player.is_drinking > 0 ) - { - wait 0,1; - continue; - } - else if ( player hasweapon( weapon_name ) || player has_powerup_weapon() ) - { - wait 0,1; - continue; - } - else - { - if ( player isswitchingweapons() ) - { - wait 0,1; - break; - } - else current_weapon = player getcurrentweapon(); - if ( !is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) && player has_powerup_weapon() ) - { - wait 0,1; - break; - } - else - { - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( player.intermission ) && player.intermission ) - { - wait 0,1; - break; - } - else - { - player_has_weapon = player hasweapon( weapon_name ); - if ( !player_has_weapon ) - { - cost = self.stub.cost; - if ( player maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() ) - { - cost = int( cost / 2 ); - } - if ( player.score >= cost ) - { - if ( self.first_time_triggered == 0 ) - { - model = getent( self.target, "targetname" ); - if ( isDefined( model ) ) - { - model thread melee_weapon_show( player ); - } - else - { - if ( isDefined( self.clientfieldname ) ) - { - level setclientfield( self.clientfieldname, 1 ); - } - } - self.first_time_triggered = 1; - if ( isDefined( self.stub ) ) - { - self.stub.first_time_triggered = 1; - } - } - player maps/mp/zombies/_zm_score::minus_to_player_score( cost, 1 ); - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" ); - player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self ); - } - else - { - play_sound_on_ent( "no_purchase" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 ); - } - break; - } - else - { - if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - self setinvisibletoplayer( player ); - } - } - } - } - } - } -} - -melee_weapon_show( player ) -{ - player_angles = vectorToAngle( player.origin - self.origin ); - player_yaw = player_angles[ 1 ]; - weapon_yaw = self.angles[ 1 ]; - yaw_diff = angleClamp180( player_yaw - weapon_yaw ); - if ( yaw_diff > 0 ) - { - yaw = weapon_yaw - 90; - } - else - { - yaw = weapon_yaw + 90; - } - self.og_origin = self.origin; - self.origin += anglesToForward( ( 0, yaw, 0 ) ) * 8; - wait 0,05; - self show(); - play_sound_at_pos( "weapon_show", self.origin, self ); - time = 1; - self moveto( self.og_origin, time ); -} - -give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger ) -{ - if ( isDefined( flourish_fn ) ) - { - self thread [[ flourish_fn ]](); - } - gun = self do_melee_weapon_flourish_begin( flourish_weapon_name ); - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id ); - self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); - self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission ) - { - return; - } - if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - if ( isDefined( trigger ) ) - { - trigger setinvisibletoplayer( self ); - } - self trigger_hide_all(); - } -} - -do_melee_weapon_flourish_begin( flourish_weapon_name ) -{ - self increment_is_drinking(); - self disable_player_move_states( 1 ); - gun = self getcurrentweapon(); - weapon = flourish_weapon_name; - self giveweapon( weapon ); - self switchtoweapon( weapon ); - return gun; -} - -do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) -{ -/# - assert( !is_zombie_perk_bottle( gun ) ); -#/ -/# - assert( gun != level.revive_tool ); -#/ - self enable_player_move_states(); - weapon = flourish_weapon_name; - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission ) - { - self takeweapon( weapon ); - self.lastactiveweapon = "none"; - return; - } - self takeweapon( weapon ); - self giveweapon( weapon_name ); - gun = change_melee_weapon( weapon_name, gun ); - if ( self hasweapon( "knife_zm" ) ) - { - self takeweapon( "knife_zm" ); - } - if ( self is_multiple_drinking() ) - { - self decrement_is_drinking(); - return; - } - else if ( gun == "knife_zm" ) - { - self switchtoweapon( weapon_name ); - self decrement_is_drinking(); - return; - } - else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) - { - self switchtoweapon( gun ); - } - else - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - } - self waittill( "weapon_change_complete" ); - if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.intermission ) && !self.intermission ) - { - self decrement_is_drinking(); - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc deleted file mode 100644 index 9bc5e58..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc +++ /dev/null @@ -1,180 +0,0 @@ -#include maps/mp/_visionset_mgr; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -enable_divetonuke_perk_for_level() -{ - maps/mp/zombies/_zm_perks::register_perk_basic_info( "specialty_flakjacket", "divetonuke", 2000, &"ZOMBIE_PERK_DIVETONUKE", "zombie_perk_bottle_nuke" ); - maps/mp/zombies/_zm_perks::register_perk_precache_func( "specialty_flakjacket", ::divetonuke_precache ); - maps/mp/zombies/_zm_perks::register_perk_clientfields( "specialty_flakjacket", ::divetonuke_register_clientfield, ::divetonuke_set_clientfield ); - maps/mp/zombies/_zm_perks::register_perk_machine( "specialty_flakjacket", ::divetonuke_perk_machine_setup, ::divetonuke_perk_machine_think ); - maps/mp/zombies/_zm_perks::register_perk_host_migration_func( "specialty_flakjacket", ::divetonuke_host_migration_func ); -} - -init_divetonuke() -{ - level.zombiemode_divetonuke_perk_func = ::divetonuke_explode; - maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_perk_divetonuke", 9000, 400, 5, 1 ); - level._effect[ "divetonuke_groundhit" ] = loadfx( "maps/zombie/fx_zmb_phdflopper_exp" ); - set_zombie_var( "zombie_perk_divetonuke_radius", 300 ); - set_zombie_var( "zombie_perk_divetonuke_min_damage", 1000 ); - set_zombie_var( "zombie_perk_divetonuke_max_damage", 5000 ); -} - -divetonuke_precache() -{ - if ( isDefined( level.divetonuke_precache_override_func ) ) - { - [[ level.divetonuke_precache_override_func ]](); - return; - } - precacheitem( "zombie_perk_bottle_nuke" ); - precacheshader( "specialty_divetonuke_zombies" ); - precachemodel( "zombie_vending_nuke" ); - precachemodel( "zombie_vending_nuke_on" ); - precachestring( &"ZOMBIE_PERK_DIVETONUKE" ); - level._effect[ "divetonuke_light" ] = loadfx( "misc/fx_zombie_cola_dtap_on" ); - level.machine_assets[ "divetonuke" ] = spawnstruct(); - level.machine_assets[ "divetonuke" ].weapon = "zombie_perk_bottle_nuke"; - level.machine_assets[ "divetonuke" ].off_model = "zombie_vending_nuke"; - level.machine_assets[ "divetonuke" ].on_model = "zombie_vending_nuke_on"; -} - -divetonuke_register_clientfield() -{ - registerclientfield( "toplayer", "perk_dive_to_nuke", 9000, 1, "int" ); -} - -divetonuke_set_clientfield( state ) -{ - self setclientfieldtoplayer( "perk_dive_to_nuke", state ); -} - -divetonuke_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collision ) -{ - use_trigger.script_sound = "mus_perks_phd_jingle"; - use_trigger.script_string = "divetonuke_perk"; - use_trigger.script_label = "mus_perks_phd_sting"; - use_trigger.target = "vending_divetonuke"; - perk_machine.script_string = "divetonuke_perk"; - perk_machine.targetname = "vending_divetonuke"; - if ( isDefined( bump_trigger ) ) - { - bump_trigger.script_string = "divetonuke_perk"; - } -} - -divetonuke_perk_machine_think() -{ - init_divetonuke(); - while ( 1 ) - { - machine = getentarray( "vending_divetonuke", "targetname" ); - machine_triggers = getentarray( "vending_divetonuke", "target" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( level.machine_assets[ "divetonuke" ].off_model ); - i++; - } - array_thread( machine_triggers, ::set_power_on, 0 ); - level thread do_initial_power_off_callback( machine, "divetonuke" ); - level waittill( "divetonuke_on" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( level.machine_assets[ "divetonuke" ].on_model ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "divetonuke_light" ); - machine[ i ] thread play_loop_on_machine(); - i++; - } - level notify( "specialty_flakjacket_power_on" ); - array_thread( machine_triggers, ::set_power_on, 1 ); - if ( isDefined( level.machine_assets[ "divetonuke" ].power_on_callback ) ) - { - array_thread( machine, level.machine_assets[ "divetonuke" ].power_on_callback ); - } - level waittill( "divetonuke_off" ); - if ( isDefined( level.machine_assets[ "divetonuke" ].power_off_callback ) ) - { - array_thread( machine, level.machine_assets[ "divetonuke" ].power_off_callback ); - } - array_thread( machine, ::turn_perk_off ); - } -} - -divetonuke_host_migration_func() -{ - flop = getentarray( "vending_divetonuke", "targetname" ); - _a138 = flop; - _k138 = getFirstArrayKey( _a138 ); - while ( isDefined( _k138 ) ) - { - perk = _a138[ _k138 ]; - if ( isDefined( perk.model ) && perk.model == level.machine_assets[ "divetonuke" ].on_model ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "divetonuke_light" ); - } - _k138 = getNextArrayKey( _a138, _k138 ); - } -} - -divetonuke_explode( attacker, origin ) -{ - radius = level.zombie_vars[ "zombie_perk_divetonuke_radius" ]; - min_damage = level.zombie_vars[ "zombie_perk_divetonuke_min_damage" ]; - max_damage = level.zombie_vars[ "zombie_perk_divetonuke_max_damage" ]; - if ( isDefined( level.flopper_network_optimized ) && level.flopper_network_optimized ) - { - attacker thread divetonuke_explode_network_optimized( origin, radius, max_damage, min_damage, "MOD_GRENADE_SPLASH" ); - } - else - { - radiusdamage( origin, radius, max_damage, min_damage, attacker, "MOD_GRENADE_SPLASH" ); - } - playfx( level._effect[ "divetonuke_groundhit" ], origin ); - attacker playsound( "zmb_phdflop_explo" ); - maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker ); - wait 1; - maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker ); -} - -divetonuke_explode_network_optimized( origin, radius, max_damage, min_damage, damage_mod ) -{ - self endon( "disconnect" ); - a_zombies = get_array_of_closest( origin, get_round_enemy_array(), undefined, undefined, radius ); - network_stall_counter = 0; - while ( isDefined( a_zombies ) ) - { - i = 0; - while ( i < a_zombies.size ) - { - e_zombie = a_zombies[ i ]; - if ( !isDefined( e_zombie ) || !isalive( e_zombie ) ) - { - i++; - continue; - } - else - { - dist = distance( e_zombie.origin, origin ); - damage = min_damage + ( ( max_damage - min_damage ) * ( 1 - ( dist / radius ) ) ); - e_zombie dodamage( damage, e_zombie.origin, self, self, 0, damage_mod ); - network_stall_counter--; - - if ( network_stall_counter <= 0 ) - { - wait_network_frame(); - network_stall_counter = randomintrange( 1, 3 ); - } - } - i++; - } - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_perk_random.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_perk_random.gsc deleted file mode 100644 index c53e7b7..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_perk_random.gsc +++ /dev/null @@ -1,685 +0,0 @@ -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked 100% parity -{ - level._random_zombie_perk_cost = 1500; - level thread precache(); - level thread init_machines(); - registerclientfield( "scriptmover", "perk_bottle_cycle_state", 14000, 2, "int" ); - registerclientfield( "scriptmover", "turn_active_perk_light_red", 14000, 1, "int" ); - registerclientfield( "scriptmover", "turn_active_perk_light_green", 14000, 1, "int" ); - registerclientfield( "scriptmover", "turn_on_location_indicator", 14000, 1, "int" ); - registerclientfield( "scriptmover", "turn_active_perk_ball_light", 14000, 1, "int" ); - registerclientfield( "scriptmover", "zone_captured", 14000, 1, "int" ); - level._effect[ "perk_machine_light" ] = loadfx( "maps/zombie_tomb/fx_tomb_dieselmagic_light" ); - level._effect[ "perk_machine_light_red" ] = loadfx( "maps/zombie_tomb/fx_tomb_dieselmagic_light_red" ); - level._effect[ "perk_machine_light_green" ] = loadfx( "maps/zombie_tomb/fx_tomb_dieselmagic_light_green" ); - level._effect[ "perk_machine_steam" ] = loadfx( "maps/zombie_tomb/fx_tomb_dieselmagic_steam" ); - level._effect[ "perk_machine_location" ] = loadfx( "maps/zombie_tomb/fx_tomb_dieselmagic_identify" ); - level._effect[ "perk_machine_activation_electric_loop" ] = loadfx( "maps/zombie_tomb/fx_tomb_dieselmagic_on" ); - flag_init( "machine_can_reset" ); - -} - -init_machines() -{ - machines = getentarray("random_perk_machine", "targetname"); - foreach(machine in machines) - { - machine.artifact_glow_setting = 1; - machine.machinery_glow_setting = 0; - machine.is_current_ball_location = 0; - machine.unitrigger_stub = spawnstruct(); - machine.unitrigger_stub.origin = machine.origin + AnglesToRight(machine.angles) * 22.5; - machine.unitrigger_stub.angles = machine.angles; - machine.unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - machine.unitrigger_stub.script_width = 64; - machine.unitrigger_stub.script_height = 64; - machine.unitrigger_stub.script_length = 64; - machine.unitrigger_stub.trigger_target = machine; - unitrigger_force_per_player_triggers(machine.unitrigger_stub, 1); - machine.unitrigger_stub.prompt_and_visibility_func = ::wunderfizztrigger_update_prompt; - level thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger(machine.unitrigger_stub, ::wunderfizz_unitrigger_think); - } -} - -wunderfizztrigger_update_prompt( player ) //checked 100% parity -{ - can_use = self wunderfizzstub_update_prompt( player ); - if ( isDefined( self.hint_string ) ) - { - if ( isDefined( self.hint_parm1 ) ) - { - self sethintstring( self.hint_string, self.hint_parm1 ); - } - else - { - self sethintstring( self.hint_string ); - } - } - return can_use; -} - -wunderfizzstub_update_prompt( player ) //checked 100% parity -{ - self setcursorhint( "HINT_NOICON" ); - if ( !self trigger_visible_to_player( player ) ) - { - return 0; - } - self.hint_parm1 = undefined; - if ( isDefined( self.stub.trigger_target.is_locked ) && self.stub.trigger_target.is_locked ) - { - self.hint_string = &"ZM_TOMB_RPU"; - return 0; - } - else - { - if ( self.stub.trigger_target.is_current_ball_location ) - { - if ( isDefined( self.stub.trigger_target.machine_user ) ) - { - if ( isDefined( self.stub.trigger_target.grab_perk_hint ) && self.stub.trigger_target.grab_perk_hint ) - { - n_purchase_limit = player get_player_perk_purchase_limit(); - if ( player.num_perks >= n_purchase_limit ) - { - self.hint_string = &"ZM_TOMB_RPT"; - self.hint_parm1 = n_purchase_limit; - return 0; - } - else - { - self.hint_string = &"ZM_TOMB_RPP"; - return 1; - } - } - else - { - return 0; - } - } - else - { - n_purchase_limit = player get_player_perk_purchase_limit(); - if ( player.num_perks >= n_purchase_limit ) - { - self.hint_string = &"ZM_TOMB_RPT"; - self.hint_parm1 = n_purchase_limit; - return 0; - } - else - { - self.hint_string = &"ZM_TOMB_RPB"; - self.hint_parm1 = level._random_zombie_perk_cost; - return 1; - } - } - } - else - { - self.hint_string = &"ZM_TOMB_RPE"; - return 0; - } - } -} - -trigger_visible_to_player( player ) //checked 100% parity -{ - self setinvisibletoplayer(player); - visible = 1; - if(isdefined(self.stub.trigger_target.machine_user)) - { - if(player != self.stub.trigger_target.machine_user || is_placeable_mine(self.stub.trigger_target.machine_user getcurrentweapon())) - { - visible = 0; - } - } - else if(!player can_buy_perk()) - { - visible = 0; - } - if(!visible) - { - return 0; - } - self setvisibletoplayer(player); - return 1; -} - -can_buy_perk() //checked 100% parity -{ - if ( isDefined( self.is_drinking ) && self.is_drinking > 0 ) - { - return 0; - } - current_weapon = self getcurrentweapon(); - if ( is_placeable_mine( current_weapon ) || is_equipment_that_blocks_purchase( current_weapon ) ) - { - return 0; - } - if ( self in_revive_trigger() ) - { - return 0; - } - if ( current_weapon == "none" ) - { - return 0; - } - return 1; -} - -init_animtree() //checked 100% parity -{ - scriptmodelsuseanimtree( -1 ); -} - -start_random_machine() //checked 100% parity -{ - level thread machines_setup(); - level thread machine_selector(); -} - -precache() //checked 100% parity -{ - precachemodel( "p6_zm_vending_diesel_magic" ); - precachemodel( "t6_wpn_zmb_perk_bottle_bear_world" ); -} - - -machines_setup() //checked 100% parity -{ - wait(0.5); - level.perk_bottle_weapon_array = arraycombine(level.machine_assets, level._custom_perks, 0, 1); - start_machines = getentarray("start_machine", "script_noteworthy"); - machines = getentarray("random_perk_machine", "targetname"); - //level.random_perk_start_machine = machines[5]; - /* - notes - gen1 is machines[5] - gen2 is machines[0] - gen3 is machines[1] - gen4 is machines[2] - gen5 is machines[3] - gen6 is machines[4] - - */ - - - if(start_machines.size == 1) - { - level.random_perk_start_machine = start_machines[0]; - } - else - { - level.random_perk_start_machine = start_machines[randomint(start_machines.size)]; - } - - - foreach(machine in machines) - { - spawn_location = spawn("script_model", machine.origin); - spawn_location setmodel("tag_origin"); - spawn_location.angles = machine.angles; - forward_dir = AnglesToRight(machine.angles); - spawn_location.origin = spawn_location.origin + VectorScale( 0, 0, 1, 65); - machine.bottle_spawn_location = spawn_location; - machine useanimtree(-1); - //broken currently - machine thread machine_power_indicators(); - if(machine != level.random_perk_start_machine) - { - machine hidepart("j_ball"); - machine.is_current_ball_location = 0; - } - else - { - level.wunderfizz_starting_machine = machine; - level notify("wunderfizz_setup"); - machine thread machine_think(); - } - wait_network_frame(); - } -} - -machine_power_indicators() //checked 100% parity -{ - self setclientfield( "zone_captured", 1 ); - wait 1; - self setclientfield( "zone_captured", 0 ); - while ( 1 ) - { - self conditional_power_indicators(); - while ( isDefined( self.is_locked ) && self.is_locked ) - { - wait 1; - } - self conditional_power_indicators(); - while ( !isDefined( self.is_locked ) || !self.is_locked ) - { - wait 1; - } - wait 0.05; - } -} - -conditional_power_indicators() //checked 100% parity -{ - if(isdefined(self.is_locked) && self.is_locked) - { - self setclientfield("turn_active_perk_light_red", 0); - self setclientfield("turn_active_perk_light_green", 0); - self setclientfield("turn_active_perk_ball_light", 0); - self setclientfield("zone_captured", 0); - } - else if(self.is_current_ball_location) - { - self setclientfield("turn_active_perk_light_red", 0); - self setclientfield("turn_active_perk_light_green", 1); - self setclientfield("turn_active_perk_ball_light", 1); - self setclientfield("zone_captured", 1); - } - else - { - self setclientfield("turn_active_perk_light_red", 1); - self setclientfield("turn_active_perk_light_green", 0); - self setclientfield("turn_active_perk_ball_light", 0); - self setclientfield("zone_captured", 1); - } -} - -wunderfizz_unitrigger_think( player ) //checked 100% parity -{ - self endon( "kill_trigger" ); - while ( 1 ) - { - self waittill( "trigger", player ); - self.stub.trigger_target notify( "trigger" ); - level.players_wunderfizz = player; //better way to define player - } -} - -machine_think() //checked 80% parity -{ - level notify("machine_think"); - level endon("machine_think"); - self thread machine_sounds(); - self show(); - self.num_time_used = 0; //0 normally - self.num_til_moved = randomintrange(4, 7); - self.is_current_ball_location = 1; - self setclientfield("turn_on_location_indicator", 1); - self showpart("j_ball"); - self thread update_animation("start"); - while(isdefined(self.is_locked) && self.is_locked) - { - wait(1); - } - self conditional_power_indicators(); - while(1) - { - self waittill("trigger", level.players_wunderfizz); - flag_clear("machine_can_reset"); - player = level.players_wunderfizz; - if(player.score < level._random_zombie_perk_cost) - { - self playsound("evt_perk_deny"); - player maps/mp/zombies/_zm_audio::create_and_play_dialog("general", "perk_deny", undefined, 0); - continue; - } - if(self.num_time_used >= self.num_til_moved) - { - level notify("pmmove"); - self thread update_animation("shut_down"); - level notify("random_perk_moving"); - self setclientfield("turn_on_location_indicator", 0); - self.is_current_ball_location = 0; - self conditional_power_indicators(); - self hidepart("j_ball"); - return; - } - self.machine_user = player; - self.num_time_used++; - player maps/mp/zombies/_zm_stats::increment_client_stat("use_perk_random"); - player maps/mp/zombies/_zm_stats::increment_player_stat("use_perk_random"); - - player maps/mp/zombies/_zm_score::minus_to_player_score(level._random_zombie_perk_cost); - - - self thread update_animation("in_use"); - if(isdefined(level.perk_random_vo_func_usemachine) && isdefined(player)) - { - player thread [[level.perk_random_vo_func_usemachine]](); - } - - while(1) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger(self.unitrigger_stub); - - random_perk = get_weighted_random_perk(player); - - self setclientfield("perk_bottle_cycle_state", 1); - level notify("pmstrt"); - wait(1); - self thread start_perk_bottle_cycling(); - self thread perk_bottle_motion(); - model = get_perk_weapon_model(random_perk); - wait(3); - self notify("done_cycling"); - if(self.num_time_used >= self.num_til_moved) - { - self.bottle_spawn_location setmodel("t6_wpn_zmb_perk_bottle_bear_world"); - level notify("pmmove"); - self thread update_animation("shut_down"); - wait(3); - player maps/mp/zombies/_zm_score::add_to_player_score(level._random_zombie_perk_cost); - self.bottle_spawn_location setmodel("tag_origin"); - level notify("random_perk_moving"); - self setclientfield("perk_bottle_cycle_state", 0); - self setclientfield("turn_on_location_indicator", 0); - self.is_current_ball_location = 0; - self conditional_power_indicators(); - self hidepart("j_ball"); - self.machine_user = undefined; - thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger(self.unitrigger_stub, ::wunderfizz_unitrigger_think); - break; - } - else - { - self.bottle_spawn_location setmodel(model); - } - self.grab_perk_hint = 1; - thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger(self.unitrigger_stub, ::wunderfizz_unitrigger_think); - - self thread grab_check(player, random_perk); - - self thread time_out_check(); - self waittill_either("grab_check", "time_out_check"); - self.grab_perk_hint = 0; - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger(self.unitrigger_stub); - thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger(self.unitrigger_stub, ::wunderfizz_unitrigger_think); - level notify("pmstop"); - if(player.num_perks >= player get_player_perk_purchase_limit()) - { - player maps/mp/zombies/_zm_score::add_to_player_score(level._random_zombie_perk_cost); - } - self setclientfield("perk_bottle_cycle_state", 0); - self.machine_user = undefined; - self.bottle_spawn_location setmodel("tag_origin"); - self thread update_animation("idle"); - break; - } - flag_wait("machine_can_reset"); - } -} - -grab_check( player, random_perk ) //checked 100% parity -{ - self endon("time_out_check"); - perk_is_bought = 0; - while(!perk_is_bought) - { - self waittill("trigger", e_triggerer); - if(e_triggerer == player) - { - while ( isDefined( player.is_drinking ) && player.is_drinking > 0 ) - { - wait 0.1; - } - if(player.num_perks < level.perk_purchase_limit ) - { - perk_is_bought = 1; - } - else - { - self playsound("evt_perk_deny"); - player maps/mp/zombies/_zm_audio::create_and_play_dialog("general", "sigh"); - self notify("time_out_or_perk_grab"); - return; - } - } - } - player maps/mp/zombies/_zm_stats::increment_client_stat("grabbed_from_perk_random"); - player maps/mp/zombies/_zm_stats::increment_player_stat("grabbed_from_perk_random"); - player thread monitor_when_player_acquires_perk(); - self notify("grab_check"); - self notify("time_out_or_perk_grab"); - gun = player maps/mp/zombies/_zm_perks::perk_give_bottle_begin(random_perk); - evt = player waittill_any_return("fake_death", "death", "player_downed", "weapon_change_complete"); - - if(evt == "weapon_change_complete") - { - player thread maps/mp/zombies/_zm_perks::wait_give_perk(random_perk, 1); - } - - player maps/mp/zombies/_zm_perks::perk_give_bottle_end(gun, random_perk); - - if( isDefined( player.has_drunk_wunderfizz ) && !player.has_drunk_wunderfizz ) - { - player do_player_general_vox("wunderfizz", "perk_wonder", undefined, 100); - player.has_drunk_wunderfizz = 1; - } -} - -monitor_when_player_acquires_perk() //checked 100% parity -{ - self waittill_any( "perk_acquired", "death_or_disconnect", "player_downed" ); - flag_set( "machine_can_reset" ); -} - -time_out_check() //checked 100% parity -{ - self endon( "grab_check" ); - wait 10; - self notify( "time_out_check" ); - flag_set( "machine_can_reset" ); -} - -machine_selector() //fixed has 100% parity -{ - while ( 1 ) - { - level waittill( "random_perk_moving" ); - machines = getentarray( "random_perk_machine", "targetname" ); - if(machines.size == 1) - { - new_machine = machines[0]; - new_machine thread machine_think(); - continue; - } - else - { - new_machine = machines[ randomint( machines.size ) ]; - level.random_perk_start_machine = new_machine; - } - wait 10; - new_machine thread machine_think(); - } -} - -include_perk_in_random_rotation( perk ) //checked 100% parity -{ - if ( !isDefined( level._random_perk_machine_perk_list ) ) - { - level._random_perk_machine_perk_list = []; - } - level._random_perk_machine_perk_list = add_to_array( level._random_perk_machine_perk_list, perk ); -} - -get_weighted_random_perk( player ) //checked 100% parity -{ - keys = array_randomize(getarraykeys(level._random_perk_machine_perk_list)); - if(isdefined(level.custom_random_perk_weights)) - { - keys = player [[level.custom_random_perk_weights]](); - } - i = 0; - while ( i < keys.size ) - { - if ( player hasperk( level._random_perk_machine_perk_list[ keys[ i ] ] ) ) - { - i++; - continue; - } - return level._random_perk_machine_perk_list[ keys[ i ] ]; - i++; - } - return level._random_perk_machine_perk_list[ keys[ 0 ] ]; -} -perk_bottle_motion() //checked 100% parity -{ - putouttime = 3; - putbacktime = 10; - v_float = anglesToForward( self.angles - ( 0, 90, 0 ) ) * 10; - self.bottle_spawn_location.origin = self.origin + ( 0, 0, 53 ); - self.bottle_spawn_location.angles = self.angles; - self.bottle_spawn_location.origin -= v_float; - self.bottle_spawn_location moveto( self.bottle_spawn_location.origin + v_float, putouttime, putouttime * 0.5 ); - self.bottle_spawn_location.angles += ( 0, 0, 10 ); - self.bottle_spawn_location rotateyaw( 720, putouttime, putouttime * 0.5 ); - self waittill( "done_cycling" ); - self.bottle_spawn_location.angles = self.angles; - self.bottle_spawn_location moveto( self.bottle_spawn_location.origin - v_float, putbacktime, putbacktime * 0.5 ); - self.bottle_spawn_location rotateyaw( 90, putbacktime, putbacktime * 0.5 ); -} - -start_perk_bottle_cycling() //checked 100% parity -{ - self endon("done_cycling"); - array_key = getarraykeys(level.perk_bottle_weapon_array); - timer = 0; - while(1) - { - for(i = 0; i < array_key.size; i++) - { - perk_bottle_list = array_key[i]; - if(isdefined(level.perk_bottle_weapon_array[perk_bottle_list].weapon)) - { - model = getweaponmodel(level.perk_bottle_weapon_array[perk_bottle_list].weapon); - } - else - { - model = getweaponmodel(level.perk_bottle_weapon_array[perk_bottle_list].perk_bottle); - } - self.bottle_spawn_location setmodel(model); - wait(0.2); - } - } -} - -get_perk_weapon_model( perk ) //checked 100% parity -{ - switch( perk ) - { - case " _upgrade": - case "specialty_armorvest": - weapon = level.machine_assets[ "juggernog" ].weapon; - break; - case "specialty_quickrevive": - case "specialty_quickrevive_upgrade": - weapon = level.machine_assets[ "revive" ].weapon; - break; - case "specialty_fastreload": - case "specialty_fastreload_upgrade": - weapon = level.machine_assets[ "speedcola" ].weapon; - break; - case "specialty_rof": - case "specialty_rof_upgrade": - weapon = level.machine_assets[ "doubletap" ].weapon; - break; - case "specialty_longersprint": - case "specialty_longersprint_upgrade": - weapon = level.machine_assets[ "marathon" ].weapon; - break; - case "specialty_flakjacket": - case "specialty_flakjacket_upgrade": - weapon = level.machine_assets[ "divetonuke" ].weapon; - break; - case "specialty_deadshot": - case "specialty_deadshot_upgrade": - weapon = level.machine_assets[ "deadshot" ].weapon; - break; - case "specialty_additionalprimaryweapon": - case "specialty_additionalprimaryweapon_upgrade": - weapon = level.machine_assets[ "additionalprimaryweapon" ].weapon; - break; - case "specialty_scavenger": - case "specialty_scavenger_upgrade": - weapon = level.machine_assets[ "tombstone" ].weapon; - break; - case "specialty_finalstand": - case "specialty_finalstand_upgrade": - weapon = level.machine_assets[ "whoswho" ].weapon; - break; - } - if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].perk_bottle ) ) - { - weapon = level._custom_perks[ perk ].perk_bottle; - } - return getweaponmodel( weapon ); -} - -update_animation( animation ) -{ - switch( animation ) - { - case "start": - self clearanim( %root, 0.2 ); - self setanim( %o_zombie_dlc4_vending_diesel_turn_on, 1, 0.2, 1 ); - break; - case "shut_down": - self clearanim( %root, 0.2 ); - self setanim( %o_zombie_dlc4_vending_diesel_turn_off, 1, 0.2, 1 ); - break; - case "in_use": - self clearanim( %root, 0.2 ); - self setanim( %o_zombie_dlc4_vending_diesel_ballspin_loop, 1, 0.2, 1 ); - break; - case "idle": - self clearanim( %root, 0.2 ); - self setanim( %o_zombie_dlc4_vending_diesel_on_idle, 1, 0.2, 1 ); - break; - default: - self clearanim( %root, 0.2 ); - self setanim( %o_zombie_dlc4_vending_diesel_on_idle, 1, 0.2, 1 ); - break; - } -} - -machine_sounds() //checked 100% parity -{ - level endon( "machine_think" ); - while ( 1 ) - { - level waittill( "pmstrt" ); - rndprk_ent = spawn( "script_origin", self.origin ); - rndprk_ent stopsounds(); - rndprk_ent playsound( "zmb_rand_perk_start" ); - rndprk_ent playloopsound( "zmb_rand_perk_loop", 0.5 ); - state_switch = level waittill_any_return( "pmstop", "pmmove" ); - rndprk_ent stoploopsound( 1 ); - if ( state_switch == "pmstop" ) - { - rndprk_ent playsound( "zmb_rand_perk_stop" ); - } - else - { - rndprk_ent playsound( "zmb_rand_perk_leave" ); - } - rndprk_ent delete(); - } -} - - - - - - diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_powerup_zombie_blood.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_powerup_zombie_blood.gsc deleted file mode 100644 index b36a329..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_powerup_zombie_blood.gsc +++ /dev/null @@ -1,217 +0,0 @@ -#include maps/mp/_visionset_mgr; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/_utility; -#include common_scripts/utility; - -init( str_zombie_model ) -{ - level.str_zombie_blood_model = str_zombie_model; - precachemodel( level.str_zombie_blood_model ); - registerclientfield( "allplayers", "player_zombie_blood_fx", 14000, 1, "int" ); - level._effect[ "zombie_blood" ] = loadfx( "maps/zombie_tomb/fx_tomb_pwr_up_zmb_blood" ); - level._effect[ "zombie_blood_1st" ] = loadfx( "maps/zombie_tomb/fx_zm_blood_overlay_pclouds" ); - add_zombie_powerup( "zombie_blood", "p6_zm_tm_blood_power_up", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_always_drop, 1, 0, 0, undefined, "powerup_zombie_blood", "zombie_powerup_zombie_blood_time", "zombie_powerup_zombie_blood_on" ); - powerup_set_can_pick_up_in_last_stand( "zombie_blood", 0 ); - onplayerconnect_callback( ::init_player_zombie_blood_vars ); - level.a_zombie_blood_entities = []; - array_thread( getentarray( "zombie_blood_visible", "targetname" ), ::make_zombie_blood_entity ); - if ( !isDefined( level.vsmgr_prio_visionset_zm_powerup_zombie_blood ) ) - { - level.vsmgr_prio_visionset_zm_powerup_zombie_blood = 15; - } - if ( !isDefined( level.vsmgr_prio_overlay_zm_powerup_zombie_blood ) ) - { - level.vsmgr_prio_overlay_zm_powerup_zombie_blood = 16; - } - maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_powerup_zombie_blood_visionset", 14000, level.vsmgr_prio_visionset_zm_powerup_zombie_blood, 15, 1 ); - maps/mp/_visionset_mgr::vsmgr_register_info( "overlay", "zm_powerup_zombie_blood_overlay", 14000, level.vsmgr_prio_overlay_zm_powerup_zombie_blood, 15, 1 ); -} - -init_player_zombie_blood_vars() -{ - self.zombie_vars[ "zombie_powerup_zombie_blood_on" ] = 0; - self.zombie_vars[ "zombie_powerup_zombie_blood_time" ] = 30; -} - -zombie_blood_powerup( m_powerup, e_player ) -{ - e_player notify( "zombie_blood" ); - e_player endon( "zombie_blood" ); - e_player endon( "disconnect" ); - e_player thread powerup_vo( "zombie_blood" ); - e_player.ignoreme = 1; - e_player._show_solo_hud = 1; - e_player.zombie_vars[ "zombie_powerup_zombie_blood_time" ] = 30; - e_player.zombie_vars[ "zombie_powerup_zombie_blood_on" ] = 1; - level notify( "player_zombie_blood" ); - maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_powerup_zombie_blood_visionset", e_player ); - maps/mp/_visionset_mgr::vsmgr_activate( "overlay", "zm_powerup_zombie_blood_overlay", e_player ); - e_player setclientfield( "player_zombie_blood_fx", 1 ); - __new = []; - _a73 = level.a_zombie_blood_entities; - __key = getFirstArrayKey( _a73 ); - while ( isDefined( __key ) ) - { - __value = _a73[ __key ]; - if ( isDefined( __value ) ) - { - if ( isstring( __key ) ) - { - __new[ __key ] = __value; - break; - } - else - { - __new[ __new.size ] = __value; - } - } - __key = getNextArrayKey( _a73, __key ); - } - level.a_zombie_blood_entities = __new; - _a74 = level.a_zombie_blood_entities; - _k74 = getFirstArrayKey( _a74 ); - while ( isDefined( _k74 ) ) - { - e_zombie_blood = _a74[ _k74 ]; - if ( isDefined( e_zombie_blood.e_unique_player ) ) - { - if ( e_zombie_blood.e_unique_player == e_player ) - { - e_zombie_blood setvisibletoplayer( e_player ); - } - } - else - { - e_zombie_blood setvisibletoplayer( e_player ); - } - _k74 = getNextArrayKey( _a74, _k74 ); - } - if ( !isDefined( e_player.m_fx ) ) - { - v_origin = e_player gettagorigin( "J_Eyeball_LE" ); - v_angles = e_player gettagangles( "J_Eyeball_LE" ); - m_fx = spawn( "script_model", v_origin ); - m_fx setmodel( "tag_origin" ); - m_fx.angles = v_angles; - m_fx linkto( e_player, "J_Eyeball_LE", ( 0, 0, 0 ), ( 0, 0, 0 ) ); - m_fx thread fx_disconnect_watch( e_player ); - playfxontag( level._effect[ "zombie_blood" ], m_fx, "tag_origin" ); - e_player.m_fx = m_fx; - e_player.m_fx playloopsound( "zmb_zombieblood_3rd_loop", 1 ); - if ( isDefined( level.str_zombie_blood_model ) ) - { - e_player.hero_model = e_player.model; - e_player setmodel( level.str_zombie_blood_model ); - } - } - e_player thread watch_zombie_blood_early_exit(); - while ( e_player.zombie_vars[ "zombie_powerup_zombie_blood_time" ] >= 0 ) - { - wait 0,05; - e_player.zombie_vars[ "zombie_powerup_zombie_blood_time" ] -= 0,05; - } - e_player notify( "zombie_blood_over" ); - if ( isDefined( e_player.characterindex ) ) - { - e_player playsound( "vox_plr_" + e_player.characterindex + "_exert_grunt_" + randomintrange( 0, 3 ) ); - } - e_player.m_fx delete(); - maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_powerup_zombie_blood_visionset", e_player ); - maps/mp/_visionset_mgr::vsmgr_deactivate( "overlay", "zm_powerup_zombie_blood_overlay", e_player ); - e_player.zombie_vars[ "zombie_powerup_zombie_blood_on" ] = 0; - e_player.zombie_vars[ "zombie_powerup_zombie_blood_time" ] = 30; - e_player._show_solo_hud = 0; - e_player setclientfield( "player_zombie_blood_fx", 0 ); - if ( !isDefined( e_player.early_exit ) ) - { - e_player.ignoreme = 0; - } - else - { - e_player.early_exit = undefined; - } - __new = []; - _a145 = level.a_zombie_blood_entities; - __key = getFirstArrayKey( _a145 ); - while ( isDefined( __key ) ) - { - __value = _a145[ __key ]; - if ( isDefined( __value ) ) - { - if ( isstring( __key ) ) - { - __new[ __key ] = __value; - break; - } - else - { - __new[ __new.size ] = __value; - } - } - __key = getNextArrayKey( _a145, __key ); - } - level.a_zombie_blood_entities = __new; - _a146 = level.a_zombie_blood_entities; - _k146 = getFirstArrayKey( _a146 ); - while ( isDefined( _k146 ) ) - { - e_zombie_blood = _a146[ _k146 ]; - e_zombie_blood setinvisibletoplayer( e_player ); - _k146 = getNextArrayKey( _a146, _k146 ); - } - if ( isDefined( e_player.hero_model ) ) - { - e_player setmodel( e_player.hero_model ); - e_player.hero_model = undefined; - } -} - -fx_disconnect_watch( e_player ) -{ - self endon( "death" ); - e_player waittill( "disconnect" ); - self delete(); -} - -watch_zombie_blood_early_exit() -{ - self notify( "early_exit_watch" ); - self endon( "early_exit_watch" ); - self endon( "zombie_blood_over" ); - self endon( "disconnect" ); - waittill_any_ents_two( self, "player_downed", level, "end_game" ); - self.zombie_vars[ "zombie_powerup_zombie_blood_time" ] = -0,05; - self.early_exit = 1; -} - -make_zombie_blood_entity() -{ -/# - assert( isDefined( level.a_zombie_blood_entities ), "zombie blood powerup not initiliazed in level" ); -#/ - level.a_zombie_blood_entities[ level.a_zombie_blood_entities.size ] = self; - self setinvisibletoall(); - _a196 = getplayers(); - _k196 = getFirstArrayKey( _a196 ); - while ( isDefined( _k196 ) ) - { - e_player = _a196[ _k196 ]; - if ( e_player.zombie_vars[ "zombie_powerup_zombie_blood_on" ] ) - { - if ( isDefined( self.e_unique_player ) ) - { - if ( self.e_unique_player == e_player ) - { - self setvisibletoplayer( e_player ); - } - break; - } - else - { - self setvisibletoplayer( e_player ); - } - } - _k196 = getNextArrayKey( _a196, _k196 ); - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_riotshield_tomb.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_riotshield_tomb.gsc deleted file mode 100644 index c601f12..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_riotshield_tomb.gsc +++ /dev/null @@ -1,671 +0,0 @@ -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_weap_riotshield_tomb; -#include common_scripts/utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; - -init() -{ - level.riotshield_name = "tomb_shield_zm"; - level.deployedshieldmodel = []; - level.stowedshieldmodel = []; - level.carriedshieldmodel = []; - level.deployedshieldmodel[ 0 ] = "t6_wpn_zmb_shield_dlc4_dmg0_world"; - level.deployedshieldmodel[ 2 ] = "t6_wpn_zmb_shield_dlc4_dmg1_world"; - level.deployedshieldmodel[ 3 ] = "t6_wpn_zmb_shield_dlc4_dmg2_world"; - level.stowedshieldmodel[ 0 ] = "t6_wpn_zmb_shield_dlc4_dmg0_stow"; - level.stowedshieldmodel[ 2 ] = "t6_wpn_zmb_shield_dlc4_dmg1_stow"; - level.stowedshieldmodel[ 3 ] = "t6_wpn_zmb_shield_dlc4_dmg2_stow"; - level.carriedshieldmodel[ 0 ] = "t6_wpn_zmb_shield_dlc4_dmg0_world"; - level.carriedshieldmodel[ 2 ] = "t6_wpn_zmb_shield_dlc4_dmg1_world"; - level.carriedshieldmodel[ 3 ] = "t6_wpn_zmb_shield_dlc4_dmg2_world"; - level.viewshieldmodel[ 0 ] = "t6_wpn_zmb_shield_dlc4_dmg0_view"; - level.viewshieldmodel[ 2 ] = "t6_wpn_zmb_shield_dlc4_dmg1_view"; - level.viewshieldmodel[ 3 ] = "t6_wpn_zmb_shield_dlc4_dmg2_view"; - precachemodel( level.stowedshieldmodel[ 0 ] ); - precachemodel( level.stowedshieldmodel[ 2 ] ); - precachemodel( level.stowedshieldmodel[ 3 ] ); - precachemodel( level.carriedshieldmodel[ 0 ] ); - precachemodel( level.carriedshieldmodel[ 2 ] ); - precachemodel( level.carriedshieldmodel[ 3 ] ); - precachemodel( level.viewshieldmodel[ 0 ] ); - precachemodel( level.viewshieldmodel[ 2 ] ); - precachemodel( level.viewshieldmodel[ 3 ] ); - level.riotshield_placement_zoffset = 26; -} - -attachriotshield( model, tag ) -{ - if ( isDefined( self.prev_shield_model ) && isDefined( self.prev_shield_tag ) ) - { - self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); - } - self.prev_shield_model = model; - self.prev_shield_tag = tag; - if ( isDefined( self.prev_shield_model ) && isDefined( self.prev_shield_tag ) ) - { - self attachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); - } -} - -removeriotshield() -{ - if ( isDefined( self.prev_shield_model ) && isDefined( self.prev_shield_tag ) ) - { - self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); - } - self.prev_shield_model = undefined; - self.prev_shield_tag = undefined; - if ( self getcurrentweapon() != level.riotshield_name ) - { - return; - } - self setheldweaponmodel( 0 ); -} - -setriotshieldviewmodel( modelnum ) -{ - self.prev_shield_viewmodel = modelnum; - if ( self getcurrentweapon() != level.riotshield_name ) - { - return; - } - if ( isDefined( self.prev_shield_viewmodel ) ) - { - self setheldweaponmodel( self.prev_shield_viewmodel ); - } - else - { - self setheldweaponmodel( 0 ); - } -} - -specialriotshieldviewmodel() -{ - if ( self getcurrentweapon() != level.riotshield_name ) - { - return; - } - self setheldweaponmodel( 3 ); -} - -restoreriotshieldviewmodel() -{ - if ( self getcurrentweapon() != level.riotshield_name ) - { - return; - } - if ( isDefined( self.prev_shield_viewmodel ) ) - { - self setheldweaponmodel( self.prev_shield_viewmodel ); - } - else - { - self setheldweaponmodel( 0 ); - } -} - -updateriotshieldmodel() -{ - if ( !isDefined( self.shield_damage_level ) ) - { - if ( isDefined( self.player_shield_reset_health ) ) - { - self [[ self.player_shield_reset_health ]](); - } - } - update = 0; - if ( !isDefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level ) - { - self.prev_shield_damage_level = self.shield_damage_level; - update = 1; - } - if ( !isDefined( self.prev_shield_placement ) || self.prev_shield_placement != self.shield_placement ) - { - self.prev_shield_placement = self.shield_placement; - update = 1; - } - if ( update ) - { - if ( self.prev_shield_placement == 0 ) - { - self attachriotshield(); - return; - } - else if ( self.prev_shield_placement == 1 ) - { - self attachriotshield( level.carriedshieldmodel[ self.prev_shield_damage_level ], "tag_weapon_left" ); - self setriotshieldviewmodel( self.prev_shield_damage_level ); - return; - } - else if ( self.prev_shield_placement == 2 ) - { - self attachriotshield( level.stowedshieldmodel[ self.prev_shield_damage_level ], "tag_stowed_back" ); - return; - } - else - { - if ( self.prev_shield_placement == 3 ) - { - self attachriotshield(); - if ( isDefined( self.shield_ent ) ) - { - self.shield_ent setmodel( level.deployedshieldmodel[ self.prev_shield_damage_level ] ); - } - } - } - } -} - -updatestandaloneriotshieldmodel() -{ - update = 0; - if ( !isDefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level ) - { - self.prev_shield_damage_level = self.shield_damage_level; - update = 1; - } - if ( update ) - { - self setmodel( level.deployedshieldmodel[ self.prev_shield_damage_level ] ); - } -} - -watchshieldlaststand() -{ - self endon( "death" ); - self endon( "disconnect" ); - self notify( "watchShieldLastStand" ); - self endon( "watchShieldLastStand" ); - while ( 1 ) - { - self waittill( "weapons_taken_for_last_stand" ); - self.riotshield_hidden = 0; - if ( isDefined( self.hasriotshield ) && self.hasriotshield ) - { - if ( self.prev_shield_placement == 1 || self.prev_shield_placement == 2 ) - { - self.riotshield_hidden = 2; - self.shield_placement = 0; - self updateriotshieldmodel(); - } - } - str_notify = self waittill_any_return( "player_revived", "bled_out" ); - if ( str_notify == "player_revived" ) - { - if ( isDefined( self.riotshield_hidden ) && self.riotshield_hidden > 0 ) - { - self.shield_placement = self.riotshield_hidden; - self updateriotshieldmodel(); - } - } - else - { - self maps/mp/zombies/_zm_weap_riotshield_tomb::player_take_riotshield(); - } - self.riotshield_hidden = undefined; - } -} - -trackriotshield() -{ - self endon( "death" ); - self endon( "disconnect" ); - self.hasriotshield = self hasweapon( level.riotshield_name ); - self.hasriotshieldequipped = self getcurrentweapon() == level.riotshield_name; - self.shield_placement = 0; - if ( self.hasriotshield ) - { - if ( self.hasriotshieldequipped ) - { - self.shield_placement = 1; - self updateriotshieldmodel(); - } - else - { - self.shield_placement = 2; - self updateriotshieldmodel(); - } - } - for ( ;; ) - { - self waittill( "weapon_change", newweapon ); - if ( newweapon == level.riotshield_name ) - { - if ( self.hasriotshieldequipped ) - { - continue; - } - else if ( isDefined( self.riotshieldentity ) ) - { - self notify( "destroy_riotshield" ); - } - self.shield_placement = 1; - self updateriotshieldmodel(); - if ( self.hasriotshield ) - { - break; - } - self.hasriotshield = 1; - self.hasriotshieldequipped = 1; - continue; - } - else if ( self ismantling() && newweapon == "none" ) - { - continue; - } - else - { - if ( self.hasriotshieldequipped ) - { -/# - assert( self.hasriotshield ); -#/ - self.hasriotshield = self hasweapon( level.riotshield_name ); - if ( isDefined( self.riotshield_hidden ) && self.riotshield_hidden ) - { - } - else - { - if ( self.hasriotshield ) - { - self.shield_placement = 2; - break; - } - else if ( isDefined( self.shield_ent ) ) - { -/# - assert( self.shield_placement == 3 ); -#/ - break; - } - else - { - self.shield_placement = 0; - } - } - self updateriotshieldmodel(); - self.hasriotshieldequipped = 0; - break; - } - else if ( self.hasriotshield ) - { - if ( !self hasweapon( level.riotshield_name ) ) - { - self.shield_placement = 0; - self updateriotshieldmodel(); - self.hasriotshield = 0; - } - break; - } - else - { - if ( self hasweapon( level.riotshield_name ) ) - { - self.shield_placement = 2; - self updateriotshieldmodel(); - self.hasriotshield = 1; - } - } - } - } -} - -trackequipmentchange() -{ - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "equipment_dropped", equipname ); - self notify( "weapon_change" ); - } -} - -updateriotshieldplacement() -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "deploy_riotshield" ); - self endon( "start_riotshield_deploy" ); - self endon( "weapon_change" ); - while ( 1 ) - { - placement = self canplaceriotshield( "raise_riotshield" ); - if ( placement[ "result" ] && riotshielddistancetest( placement[ "origin" ] ) ) - { - self restoreriotshieldviewmodel(); - self setplacementhint( 1 ); - } - else - { - self specialriotshieldviewmodel(); - self setplacementhint( 0 ); - } - wait 0,05; - } -} - -startriotshielddeploy() -{ - self notify( "start_riotshield_deploy" ); - self thread updateriotshieldplacement(); - self thread watchriotshielddeploy(); -} - -spawnriotshieldcover( origin, angles ) -{ - shield_ent = spawn( "script_model", origin, 1 ); - shield_ent.angles = angles; - shield_ent setowner( self ); - shield_ent.owner = self; - shield_ent.owner.shield_ent = shield_ent; - shield_ent.isriotshield = 1; - self.shield_placement = 3; - self updateriotshieldmodel(); - shield_ent setscriptmoverflag( 0 ); - self thread maps/mp/zombies/_zm_buildables::delete_on_disconnect( shield_ent, "destroy_riotshield", 1 ); - maps/mp/zombies/_zm_equipment::destructible_equipment_list_add( shield_ent ); - return shield_ent; -} - -watchriotshielddeploy() -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "start_riotshield_deploy" ); - self endon( "destroy_riotshield" ); - self waittill( "deploy_riotshield", deploy_attempt ); - self restoreriotshieldviewmodel(); - self setplacementhint( 1 ); - placement_hint = 0; - if ( deploy_attempt ) - { - placement = self canplaceriotshield( "deploy_riotshield" ); - if ( placement[ "result" ] && riotshielddistancetest( placement[ "origin" ] ) && self check_plant_position( placement[ "origin" ], placement[ "angles" ] ) ) - { - self doriotshielddeploy( placement[ "origin" ], placement[ "angles" ] ); - } - else - { - placement_hint = 1; - clip_max_ammo = weaponclipsize( level.riotshield_name ); - self setweaponammoclip( level.riotshield_name, clip_max_ammo ); - } - } - else - { - placement_hint = 1; - } - if ( placement_hint ) - { - self setriotshieldfailhint(); - } -} - -check_plant_position( origin, angles ) -{ - if ( isDefined( level.equipment_safe_to_drop ) ) - { - ret = 1; - test_ent = spawn( "script_model", origin ); - test_ent setmodel( level.deployedshieldmodel[ 0 ] ); - test_ent.angles = angles; - if ( !( self [[ level.equipment_safe_to_drop ]]( test_ent ) ) ) - { - ret = 0; - } - test_ent delete(); - return ret; - } - return 1; -} - -doriotshielddeploy( origin, angles ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "start_riotshield_deploy" ); - self notify( "deployed_riotshield" ); - self maps/mp/zombies/_zm_buildables::track_placed_buildables( level.riotshield_name ); - if ( isDefined( self.current_equipment ) && self.current_equipment == level.riotshield_name ) - { - self maps/mp/zombies/_zm_equipment::equipment_to_deployed( level.riotshield_name ); - } - zoffset = level.riotshield_placement_zoffset; - shield_ent = self spawnriotshieldcover( origin + ( 0, 0, zoffset ), angles ); - item_ent = deployriotshield( self, shield_ent ); - primaries = self getweaponslistprimaries(); -/# - assert( isDefined( item_ent ) ); - assert( !isDefined( self.riotshieldretrievetrigger ) ); - assert( !isDefined( self.riotshieldentity ) ); -#/ - self maps/mp/zombies/_zm_weapons::switch_back_primary_weapon( primaries[ 0 ] ); - if ( isDefined( level.equipment_planted ) ) - { - self [[ level.equipment_planted ]]( shield_ent, level.riotshield_name, self ); - } - if ( isDefined( level.equipment_safe_to_drop ) ) - { - if ( !( self [[ level.equipment_safe_to_drop ]]( shield_ent ) ) ) - { - self notify( "destroy_riotshield" ); - shield_ent delete(); - item_ent delete(); - return; - } - } - self.riotshieldretrievetrigger = item_ent; - self.riotshieldentity = shield_ent; - self thread watchdeployedriotshieldents(); - self thread deleteshieldondamage( self.riotshieldentity ); - self thread deleteshieldmodelonweaponpickup( self.riotshieldretrievetrigger ); - self thread deleteriotshieldonplayerdeath(); - self thread watchshieldtriggervisibility( self.riotshieldretrievetrigger ); - self.riotshieldentity thread watchdeployedriotshielddamage(); - return shield_ent; -} - -riotshielddistancetest( origin ) -{ -/# - assert( isDefined( origin ) ); -#/ - min_dist_squared = getDvarFloat( "riotshield_deploy_limit_radius" ); - min_dist_squared *= min_dist_squared; - i = 0; - while ( i < level.players.size ) - { - if ( isDefined( level.players[ i ].riotshieldentity ) ) - { - dist_squared = distancesquared( level.players[ i ].riotshieldentity.origin, origin ); - if ( min_dist_squared > dist_squared ) - { -/# - println( "Shield placement denied! Failed distance check to other riotshields." ); -#/ - return 0; - } - } - i++; - } - return 1; -} - -watchdeployedriotshieldents() -{ -/# - assert( isDefined( self.riotshieldretrievetrigger ) ); - assert( isDefined( self.riotshieldentity ) ); -#/ - riotshieldretrievetrigger = self.riotshieldretrievetrigger; - riotshieldentity = self.riotshieldentity; - self waittill_any( "destroy_riotshield", "disconnect", "tomb_shield_zm_taken" ); - if ( isDefined( self ) ) - { - self.shield_placement = 0; - self updateriotshieldmodel(); - } - if ( isDefined( riotshieldretrievetrigger ) ) - { - riotshieldretrievetrigger delete(); - } - if ( isDefined( riotshieldentity ) ) - { - riotshieldentity delete(); - } -} - -watchdeployedriotshielddamage() -{ - self endon( "death" ); - damagemax = getDvarInt( "riotshield_deployed_health" ); - self.damagetaken = 0; - while ( 1 ) - { - self.maxhealth = 100000; - self.health = self.maxhealth; - self waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, idflags ); - if ( isDefined( level.players_can_damage_riotshields ) && !level.players_can_damage_riotshields ) - { - continue; - } - if ( !isDefined( attacker ) || !isplayer( attacker ) ) - { - continue; - } -/# - if ( isDefined( self.owner ) ) - { - assert( isDefined( self.owner.team ) ); - } -#/ - while ( is_encounter() && attacker.team == self.owner.team && attacker != self.owner ) - { - continue; - } - if ( isDefined( level.riotshield_damage_callback ) ) - { - self.owner [[ level.riotshield_damage_callback ]]( damage, 0 ); - continue; - } - else - { - if ( type == "MOD_MELEE" ) - { - damage *= getDvarFloat( "riotshield_melee_damage_scale" ); - } - else if ( type == "MOD_PISTOL_BULLET" || type == "MOD_RIFLE_BULLET" ) - { - damage *= getDvarFloat( "riotshield_bullet_damage_scale" ); - } - else - { - if ( type != "MOD_GRENADE" && type != "MOD_GRENADE_SPLASH" && type != "MOD_EXPLOSIVE" && type != "MOD_EXPLOSIVE_SPLASH" || type == "MOD_PROJECTILE" && type == "MOD_PROJECTILE_SPLASH" ) - { - damage *= getDvarFloat( "riotshield_explosive_damage_scale" ); - break; - } - else - { - if ( type == "MOD_IMPACT" ) - { - damage *= getDvarFloat( "riotshield_projectile_damage_scale" ); - } - } - } - self.damagetaken += damage; - if ( self.damagetaken >= damagemax ) - { - self damagethendestroyriotshield(); - } - } - } -} - -damagethendestroyriotshield() -{ - self endon( "death" ); - self.owner.riotshieldretrievetrigger delete(); - self notsolid(); - self setclientflag( 14 ); - wait getDvarFloat( "riotshield_destroyed_cleanup_time" ); - self.owner notify( "destroy_riotshield" ); -} - -deleteshieldondamage( shield_ent ) -{ - shield_ent waittill( "death" ); - self notify( "destroy_riotshield" ); -} - -deleteshieldmodelonweaponpickup( shield_trigger ) -{ - shield_trigger waittill( "trigger", player ); - self maps/mp/zombies/_zm_equipment::equipment_from_deployed( level.riotshield_name ); - self notify( "destroy_riotshield" ); - if ( self != player ) - { - if ( isDefined( level.transferriotshield ) ) - { - [[ level.transferriotshield ]]( self, player ); - } - } -} - -watchshieldtriggervisibility( trigger ) -{ - self endon( "death" ); - trigger endon( "death" ); - while ( isDefined( trigger ) ) - { - players = get_players(); - _a760 = players; - _k760 = getFirstArrayKey( _a760 ); - while ( isDefined( _k760 ) ) - { - player = _a760[ _k760 ]; - pickup = 1; - if ( !isDefined( player ) ) - { - } - else if ( is_true( player.afterlife ) ) - { - trigger setinvisibletoplayer( player ); - wait 0,05; - } - else - { - if ( isDefined( level.cantransferriotshield ) ) - { - pickup = [[ level.cantransferriotshield ]]( self, player ); - } - if ( !isDefined( trigger ) ) - { - return; - } - if ( pickup ) - { - trigger setvisibletoplayer( player ); - } - else - { - trigger setinvisibletoplayer( player ); - } - wait 0,05; - } - _k760 = getNextArrayKey( _a760, _k760 ); - } - wait 0,05; - } -} - -deleteriotshieldonplayerdeath() -{ - self.riotshieldentity endon( "death" ); - self waittill( "death" ); - self notify( "destroy_riotshield" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc deleted file mode 100644 index 04f7af6..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc +++ /dev/null @@ -1,308 +0,0 @@ -#include maps/mp/zombies/_zm_stats; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - if ( !isDefined( level.ballistic_knife_autorecover ) ) - { - level.ballistic_knife_autorecover = 1; - } - if ( isDefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 ) - { - precachemodel( "t5_weapon_ballistic_knife_projectile" ); - precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" ); - } -} - -on_spawn( watcher, player ) -{ - player endon( "death" ); - player endon( "disconnect" ); - player endon( "zmb_lost_knife" ); - level endon( "game_ended" ); - self waittill( "stationary", endpos, normal, angles, attacker, prey, bone ); - isfriendly = 0; - if ( isDefined( endpos ) ) - { - retrievable_model = spawn( "script_model", endpos ); - retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); - retrievable_model setowner( player ); - retrievable_model.owner = player; - retrievable_model.angles = angles; - retrievable_model.name = watcher.weapon; - if ( isDefined( prey ) ) - { - if ( isplayer( prey ) && player.team == prey.team ) - { - isfriendly = 1; - } - else - { - if ( isai( prey ) && player.team == prey.team ) - { - isfriendly = 1; - } - } - if ( !isfriendly ) - { - retrievable_model linkto( prey, bone ); - retrievable_model thread force_drop_knives_to_ground_on_death( player, prey ); - } - else - { - if ( isfriendly ) - { - retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) ); - normal = ( 0, 0, 1 ); - } - } - } - watcher.objectarray[ watcher.objectarray.size ] = retrievable_model; - if ( isfriendly ) - { - retrievable_model waittill( "stationary" ); - } - retrievable_model thread drop_knives_to_ground( player ); - if ( isfriendly ) - { - player notify( "ballistic_knife_stationary" ); - } - else - { - player notify( "ballistic_knife_stationary" ); - } - retrievable_model thread wait_to_show_glowing_model( prey ); - } -} - -wait_to_show_glowing_model( prey ) -{ - level endon( "game_ended" ); - self endon( "death" ); - wait 2; - self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); -} - -on_spawn_retrieve_trigger( watcher, player ) -{ - player endon( "death" ); - player endon( "disconnect" ); - player endon( "zmb_lost_knife" ); - level endon( "game_ended" ); - player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey ); - if ( !isDefined( retrievable_model ) ) - { - return; - } - trigger_pos = []; - if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) ) - { - trigger_pos[ 0 ] = prey.origin[ 0 ]; - trigger_pos[ 1 ] = prey.origin[ 1 ]; - trigger_pos[ 2 ] = prey.origin[ 2 ] + 10; - } - else - { - trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( 10 * normal[ 0 ] ); - trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( 10 * normal[ 1 ] ); - trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( 10 * normal[ 2 ] ); - } - if ( is_true( level.ballistic_knife_autorecover ) ) - { - trigger_pos[ 2 ] -= 50; - pickup_trigger = spawn( "trigger_radius", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ), 0, 50, 100 ); - } - else - { - pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ) ); - pickup_trigger setcursorhint( "HINT_NOICON" ); - } - pickup_trigger.owner = player; - retrievable_model.retrievabletrigger = pickup_trigger; - hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP"; - if ( isDefined( hint_string ) ) - { - pickup_trigger sethintstring( hint_string ); - } - else - { - pickup_trigger sethintstring( &"GENERIC_PICKUP" ); - } - pickup_trigger setteamfortrigger( player.team ); - player clientclaimtrigger( pickup_trigger ); - pickup_trigger enablelinkto(); - if ( isDefined( prey ) ) - { - pickup_trigger linkto( prey ); - } - else - { - pickup_trigger linkto( retrievable_model ); - } - if ( isDefined( level.knife_planted ) ) - { - [[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey ); - } - retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound ); - player thread watch_shutdown( pickup_trigger, retrievable_model ); -} - -debug_print( endpos ) -{ -/# - self endon( "death" ); - while ( 1 ) - { - print3d( endpos, "pickup_trigger" ); - wait 0,05; -#/ - } -} - -watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse ) -{ - self endon( "death" ); - self endon( "delete" ); - level endon( "game_ended" ); - max_ammo = weaponmaxammo( weapon ) + 1; - autorecover = is_true( level.ballistic_knife_autorecover ); - while ( 1 ) - { - trigger waittill( "trigger", player ); - while ( !isalive( player ) ) - { - continue; - } - if ( !player isonground() && !is_true( trigger.force_pickup ) ) - { - continue; - } - if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam ) - { - continue; - } - if ( isDefined( trigger.claimedby ) && player != trigger.claimedby ) - { - continue; - } - ammo_stock = player getweaponammostock( weapon ); - ammo_clip = player getweaponammoclip( weapon ); - current_weapon = player getcurrentweapon(); - total_ammo = ammo_stock + ammo_clip; - hasreloaded = 1; - if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon ) - { - hasreloaded = 0; - } - if ( total_ammo >= max_ammo || !hasreloaded ) - { - continue; - } - if ( !autorecover && player usebuttonpressed() && !player.throwinggrenade || !player meleebuttonpressed() && is_true( trigger.force_pickup ) ) - { - if ( isDefined( playersoundonuse ) ) - { - player playlocalsound( playersoundonuse ); - } - if ( isDefined( npcsoundonuse ) ) - { - player playsound( npcsoundonuse ); - } - player thread [[ callback ]]( weapon, model, trigger ); - return; - } - else - { - } - } -} - -pick_up( weapon, model, trigger ) -{ - if ( self hasweapon( weapon ) ) - { - current_weapon = self getcurrentweapon(); - if ( current_weapon != weapon ) - { - clip_ammo = self getweaponammoclip( weapon ); - if ( !clip_ammo ) - { - self setweaponammoclip( weapon, 1 ); - } - else - { - new_ammo_stock = self getweaponammostock( weapon ) + 1; - self setweaponammostock( weapon, new_ammo_stock ); - } - } - else - { - new_ammo_stock = self getweaponammostock( weapon ) + 1; - self setweaponammostock( weapon, new_ammo_stock ); - } - } - self maps/mp/zombies/_zm_stats::increment_client_stat( "ballistic_knives_pickedup" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "ballistic_knives_pickedup" ); - model destroy_ent(); - trigger destroy_ent(); -} - -destroy_ent() -{ - if ( isDefined( self ) ) - { - if ( isDefined( self.glowing_model ) ) - { - self.glowing_model delete(); - } - self delete(); - } -} - -watch_shutdown( trigger, model ) -{ - self waittill_any( "death_or_disconnect", "zmb_lost_knife" ); - trigger destroy_ent(); - model destroy_ent(); -} - -drop_knives_to_ground( player ) -{ - player endon( "death" ); - player endon( "zmb_lost_knife" ); - for ( ;; ) - { - level waittill( "drop_objects_to_ground", origin, radius ); - if ( distancesquared( origin, self.origin ) < ( radius * radius ) ) - { - self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) ); - self thread update_retrieve_trigger( player ); - } - } -} - -force_drop_knives_to_ground_on_death( player, prey ) -{ - self endon( "death" ); - player endon( "zmb_lost_knife" ); - prey waittill( "death" ); - self unlink(); - self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) ); - self thread update_retrieve_trigger( player ); -} - -update_retrieve_trigger( player ) -{ - self endon( "death" ); - player endon( "zmb_lost_knife" ); - if ( isDefined( level.custom_update_retrieve_trigger ) ) - { - self [[ level.custom_update_retrieve_trigger ]]( player ); - return; - } - self waittill( "stationary" ); - trigger = self.retrievabletrigger; - trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 ); - trigger linkto( self ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_beacon.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_beacon.gsc deleted file mode 100644 index b3fd75e..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_beacon.gsc +++ /dev/null @@ -1,1008 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_clone; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -#using_animtree( "zombie_beacon" ); - -init() -{ - if ( !beacon_exists() ) - { - return; - } -/# - level.zombiemode_devgui_beacon_give = ::player_give_beacon; -#/ - registerclientfield( "world", "play_launch_artillery_fx_robot_0", 14000, 1, "int" ); - registerclientfield( "world", "play_launch_artillery_fx_robot_1", 14000, 1, "int" ); - registerclientfield( "world", "play_launch_artillery_fx_robot_2", 14000, 1, "int" ); - registerclientfield( "scriptmover", "play_beacon_fx", 14000, 1, "int" ); - registerclientfield( "scriptmover", "play_artillery_barrage", 14000, 2, "int" ); - precachemodel( "jun_missile" ); - level._effect[ "beacon_glow" ] = loadfx( "maps/zombie_tomb/fx_tomb_beacon_glow" ); - level._effect[ "beacon_shell_explosion" ] = loadfx( "maps/zombie_tomb/fx_tomb_beacon_exp" ); - level._effect[ "beacon_shell_trail" ] = loadfx( "maps/zombie_tomb/fx_tomb_beacon_trail" ); - level._effect[ "beacon_launch_fx" ] = loadfx( "maps/zombie_tomb/fx_tomb_beacon_launch" ); - level._effect[ "grenade_samantha_steal" ] = loadfx( "maps/zombie/fx_zmb_blackhole_trap_end" ); - level.beacons = []; - level.zombie_weapons_callbacks[ "beacon_zm" ] = ::player_give_beacon; - scriptmodelsuseanimtree( -1 ); -} - -player_give_beacon() -{ - self giveweapon( "beacon_zm" ); - self set_player_tactical_grenade( "beacon_zm" ); - self thread player_handle_beacon(); -} - -player_handle_beacon() -{ - self notify( "starting_beacon_watch" ); - self endon( "disconnect" ); - self endon( "starting_beacon_watch" ); - attract_dist_diff = level.beacon_attract_dist_diff; - if ( !isDefined( attract_dist_diff ) ) - { - attract_dist_diff = 45; - } - num_attractors = level.num_beacon_attractors; - if ( !isDefined( num_attractors ) ) - { - num_attractors = 96; - } - max_attract_dist = level.beacon_attract_dist; - if ( !isDefined( max_attract_dist ) ) - { - max_attract_dist = 1536; - } - while ( 1 ) - { - grenade = get_thrown_beacon(); - self thread player_throw_beacon( grenade, num_attractors, max_attract_dist, attract_dist_diff ); - wait 0,05; - } -} - -watch_for_dud( model, actor ) -{ - self endon( "death" ); - self waittill( "grenade_dud" ); - model.dud = 1; - self.monk_scream_vox = 1; - wait 3; - if ( isDefined( model ) ) - { - model delete(); - } - if ( isDefined( actor ) ) - { - actor delete(); - } - if ( isDefined( self.damagearea ) ) - { - self.damagearea delete(); - } - if ( isDefined( self ) ) - { - self delete(); - } -} - -watch_for_emp( model, actor ) -{ - self endon( "death" ); - if ( !should_watch_for_emp() ) - { - return; - } - while ( 1 ) - { - level waittill( "emp_detonate", origin, radius ); - if ( distancesquared( origin, self.origin ) < ( radius * radius ) ) - { - break; - } - else - { - } - } - self.stun_fx = 1; - if ( isDefined( level._equipment_emp_destroy_fx ) ) - { - playfx( level._equipment_emp_destroy_fx, self.origin + vectorScale( ( 0, 0, 1 ), 5 ), ( 0, randomfloat( 360 ), 0 ) ); - } - wait 0,15; - self.attract_to_origin = 0; - self deactivate_zombie_point_of_interest(); - wait 1; - self detonate(); - wait 1; - if ( isDefined( model ) ) - { - model delete(); - } - if ( isDefined( actor ) ) - { - actor delete(); - } - if ( isDefined( self.damagearea ) ) - { - self.damagearea delete(); - } - if ( isDefined( self ) ) - { - self delete(); - } -} - -clone_player_angles( owner ) -{ - self endon( "death" ); - owner endon( "bled_out" ); - while ( isDefined( self ) ) - { - self.angles = owner.angles; - wait 0,05; - } -} - -show_briefly( showtime ) -{ - self endon( "show_owner" ); - if ( isDefined( self.show_for_time ) ) - { - self.show_for_time = showtime; - return; - } - self.show_for_time = showtime; - self setvisibletoall(); - while ( self.show_for_time > 0 ) - { - self.show_for_time -= 0,05; - wait 0,05; - } - self setvisibletoallexceptteam( level.zombie_team ); - self.show_for_time = undefined; -} - -show_owner_on_attack( owner ) -{ - owner endon( "hide_owner" ); - owner endon( "show_owner" ); - self endon( "explode" ); - self endon( "death" ); - self endon( "grenade_dud" ); - owner.show_for_time = undefined; - for ( ;; ) - { - owner waittill( "weapon_fired" ); - owner thread show_briefly( 0,5 ); - } -} - -hide_owner( owner ) -{ - owner notify( "hide_owner" ); - owner endon( "hide_owner" ); - owner setperk( "specialty_immunemms" ); - owner.no_burning_sfx = 1; - owner notify( "stop_flame_sounds" ); - owner setvisibletoallexceptteam( level.zombie_team ); - owner.hide_owner = 1; - if ( isDefined( level._effect[ "human_disappears" ] ) ) - { - playfx( level._effect[ "human_disappears" ], owner.origin ); - } - self thread show_owner_on_attack( owner ); - evt = self waittill_any_return( "explode", "death", "grenade_dud" ); -/# - println( "ZMCLONE: Player visible again because of " + evt ); -#/ - owner notify( "show_owner" ); - owner unsetperk( "specialty_immunemms" ); - if ( isDefined( level._effect[ "human_disappears" ] ) ) - { - playfx( level._effect[ "human_disappears" ], owner.origin ); - } - owner.no_burning_sfx = undefined; - owner setvisibletoall(); - owner.hide_owner = undefined; - owner show(); -} - -proximity_detonate( owner ) -{ - wait 1,5; - if ( !isDefined( self ) ) - { - return; - } - detonateradius = 96; - explosionradius = detonateradius * 2; - damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 1,5 ); - damagearea setexcludeteamfortrigger( owner.team ); - damagearea enablelinkto(); - damagearea linkto( self ); - self.damagearea = damagearea; - while ( isDefined( self ) ) - { - damagearea waittill( "trigger", ent ); - if ( isDefined( owner ) && ent == owner ) - { - continue; - } - if ( isDefined( ent.team ) && ent.team == owner.team ) - { - continue; - } - self playsound( "wpn_claymore_alert" ); - dist = distance( self.origin, ent.origin ); - radiusdamage( self.origin + vectorScale( ( 0, 0, 1 ), 12 ), explosionradius, 1, 1, owner, "MOD_GRENADE_SPLASH", "beacon_zm" ); - if ( isDefined( owner ) ) - { - self detonate( owner ); - } - else - { - self detonate( undefined ); - } - break; - } - if ( isDefined( damagearea ) ) - { - damagearea delete(); - } -} - -player_throw_beacon( grenade, num_attractors, max_attract_dist, attract_dist_diff ) -{ - self endon( "disconnect" ); - self endon( "starting_beacon_watch" ); - if ( isDefined( grenade ) ) - { - grenade endon( "death" ); - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - if ( isDefined( grenade.damagearea ) ) - { - grenade.damagearea delete(); - } - grenade delete(); - return; - } - grenade hide(); - model = spawn( "script_model", grenade.origin ); - model endon( "weapon_beacon_timeout" ); - model setmodel( "t6_wpn_zmb_homing_beacon_world" ); - model useanimtree( -1 ); - model linkto( grenade ); - model.angles = grenade.angles; - model thread beacon_cleanup( grenade ); - model.owner = self; - clone = undefined; - if ( isDefined( level.beacon_dual_view ) && level.beacon_dual_view ) - { - model setvisibletoallexceptteam( level.zombie_team ); - clone = maps/mp/zombies/_zm_clone::spawn_player_clone( self, vectorScale( ( 0, 0, 1 ), 999 ), level.beacon_clone_weapon, undefined ); - model.simulacrum = clone; - clone maps/mp/zombies/_zm_clone::clone_animate( "idle" ); - clone thread clone_player_angles( self ); - clone notsolid(); - clone ghost(); - } - grenade thread watch_for_dud( model, clone ); - info = spawnstruct(); - info.sound_attractors = []; - grenade thread monitor_zombie_groans( info ); - grenade waittill( "stationary" ); - if ( isDefined( level.grenade_planted ) ) - { - self thread [[ level.grenade_planted ]]( grenade, model ); - } - if ( isDefined( grenade ) ) - { - if ( isDefined( model ) ) - { - model thread weapon_beacon_anims(); - if ( isDefined( grenade.backlinked ) && !grenade.backlinked ) - { - model unlink(); - model.origin = grenade.origin; - model.angles = grenade.angles; - } - } - if ( isDefined( clone ) ) - { - clone forceteleport( grenade.origin, grenade.angles ); - clone thread hide_owner( self ); - grenade thread proximity_detonate( self ); - clone show(); - clone setinvisibletoall(); - clone setvisibletoteam( level.zombie_team ); - } - grenade resetmissiledetonationtime(); - model setclientfield( "play_beacon_fx", 1 ); - valid_poi = check_point_in_enabled_zone( grenade.origin, undefined, undefined ); - if ( isDefined( level.check_valid_poi ) ) - { - valid_poi = grenade [[ level.check_valid_poi ]]( valid_poi ); - } - if ( valid_poi ) - { - grenade create_zombie_point_of_interest( max_attract_dist, num_attractors, 10000 ); - grenade.attract_to_origin = 1; - grenade thread create_zombie_point_of_interest_attractor_positions( 4, attract_dist_diff ); - grenade thread wait_for_attractor_positions_complete(); - grenade thread do_beacon_sound( model, info ); - model thread wait_and_explode( grenade ); - model.time_thrown = getTime(); - for ( ;; ) - { - while ( isDefined( level.weapon_beacon_busy ) && level.weapon_beacon_busy ) - { - wait 0,1; - } - } - if ( flag( "three_robot_round" ) && flag( "fire_link_enabled" ) ) - { - model thread start_artillery_launch_ee( grenade ); - } - else model thread start_artillery_launch_normal( grenade ); - level.beacons[ level.beacons.size ] = grenade; - } - else - { - grenade.script_noteworthy = undefined; - level thread grenade_stolen_by_sam( grenade, model, clone ); - } - return; - } - else - { - grenade.script_noteworthy = undefined; - level thread grenade_stolen_by_sam( grenade, model, clone ); - } - } -} - -weapon_beacon_anims() -{ - n_time = getanimlength( %o_zombie_dlc4_homing_deploy ); - self setanim( %o_zombie_dlc4_homing_deploy ); - wait n_time; - self setanim( %o_zombie_dlc4_homing_spin ); -} - -grenade_stolen_by_sam( ent_grenade, ent_model, ent_actor ) -{ - if ( !isDefined( ent_model ) ) - { - return; - } - direction = ent_model.origin; - direction = ( direction[ 1 ], direction[ 0 ], 0 ); - if ( direction[ 1 ] < 0 || direction[ 0 ] > 0 && direction[ 1 ] > 0 ) - { - direction = ( direction[ 0 ], direction[ 1 ] * -1, 0 ); - } - else - { - if ( direction[ 0 ] < 0 ) - { - direction = ( direction[ 0 ] * -1, direction[ 1 ], 0 ); - } - } - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( isalive( players[ i ] ) ) - { - players[ i ] playlocalsound( level.zmb_laugh_alias ); - } - i++; - } - playfxontag( level._effect[ "grenade_samantha_steal" ], ent_model, "tag_origin" ); - ent_model movez( 60, 1, 0,25, 0,25 ); - ent_model vibrate( direction, 1,5, 2,5, 1 ); - ent_model waittill( "movedone" ); - if ( isDefined( self.damagearea ) ) - { - self.damagearea delete(); - } - ent_model delete(); - if ( isDefined( ent_actor ) ) - { - ent_actor delete(); - } - if ( isDefined( ent_grenade ) ) - { - if ( isDefined( ent_grenade.damagearea ) ) - { - ent_grenade.damagearea delete(); - } - ent_grenade delete(); - } -} - -wait_for_attractor_positions_complete() -{ - self waittill( "attractor_positions_generated" ); - self.attract_to_origin = 0; -} - -beacon_cleanup( parent ) -{ - while ( 1 ) - { - if ( !isDefined( parent ) ) - { - if ( isDefined( self ) && isDefined( self.dud ) && self.dud ) - { - wait 6; - } - if ( isDefined( self.simulacrum ) ) - { - self.simulacrum delete(); - } - self_delete(); - return; - } - wait 0,05; - } -} - -do_beacon_sound( model, info ) -{ - self.monk_scream_vox = 0; - if ( isDefined( level.grenade_safe_to_bounce ) ) - { - if ( !( [[ level.grenade_safe_to_bounce ]]( self.owner, "beacon_zm" ) ) ) - { - self.monk_scream_vox = 1; - } - } - if ( !self.monk_scream_vox && level.music_override == 0 ) - { - if ( isDefined( level.beacon_dual_view ) && level.beacon_dual_view ) - { - self playsoundtoteam( "null", "allies" ); - } - else - { - self playsound( "null" ); - } - } - if ( !self.monk_scream_vox ) - { - self thread play_delayed_explode_vox(); - } - self waittill( "robot_artillery_barrage", position ); - level notify( "grenade_exploded" ); - beacon_index = -1; - i = 0; - while ( i < level.beacons.size ) - { - if ( !isDefined( level.beacons[ i ] ) ) - { - beacon_index = i; - break; - } - else - { - i++; - } - } - if ( beacon_index >= 0 ) - { - arrayremoveindex( level.beacons, beacon_index ); - } - i = 0; - while ( i < info.sound_attractors.size ) - { - if ( isDefined( info.sound_attractors[ i ] ) ) - { - info.sound_attractors[ i ] notify( "beacon_blown_up" ); - } - i++; - } - self delete(); -} - -play_delayed_explode_vox() -{ - wait 6,5; - if ( isDefined( self ) ) - { - } -} - -get_thrown_beacon() -{ - self endon( "disconnect" ); - self endon( "starting_beacon_watch" ); - while ( 1 ) - { - self waittill( "grenade_fire", grenade, weapname ); - if ( weapname == "beacon_zm" ) - { - grenade.use_grenade_special_long_bookmark = 1; - grenade.grenade_multiattack_bookmark_count = 1; - return grenade; - } - wait 0,05; - } -} - -monitor_zombie_groans( info ) -{ - self endon( "explode" ); - while ( 1 ) - { - if ( !isDefined( self ) ) - { - return; - } - while ( !isDefined( self.attractor_array ) ) - { - wait 0,05; - } - i = 0; - while ( i < self.attractor_array.size ) - { - if ( array_check_for_dupes( info.sound_attractors, self.attractor_array[ i ] ) ) - { - if ( isDefined( self.origin ) && isDefined( self.attractor_array[ i ].origin ) ) - { - if ( distancesquared( self.origin, self.attractor_array[ i ].origin ) < 250000 ) - { - info.sound_attractors[ info.sound_attractors.size ] = self.attractor_array[ i ]; - self.attractor_array[ i ] thread play_zombie_groans(); - } - } - } - i++; - } - wait 0,05; - } -} - -play_zombie_groans() -{ - self endon( "death" ); - self endon( "beacon_blown_up" ); - while ( 1 ) - { - if ( isDefined( self ) ) - { - self playsound( "zmb_vox_zombie_groan" ); - wait randomfloatrange( 2, 3 ); - continue; - } - else - { - return; - } - } -} - -beacon_exists() -{ - return isDefined( level.zombie_weapons[ "beacon_zm" ] ); -} - -wait_and_explode( grenade ) -{ - self endon( "beacon_missile_launch" ); - grenade waittill( "explode", position ); - self notify( "weapon_beacon_timeout" ); - if ( isDefined( grenade ) ) - { - grenade notify( "robot_artillery_barrage" ); - } -} - -start_artillery_launch_normal( grenade ) -{ - self endon( "weapon_beacon_timeout" ); - sp_giant_robot = undefined; - while ( !isDefined( sp_giant_robot ) ) - { - i = 0; - while ( i < 3 ) - { - if ( isDefined( level.a_giant_robots[ i ].is_walking ) && level.a_giant_robots[ i ].is_walking ) - { - if ( isDefined( level.a_giant_robots[ i ].weap_beacon_firing ) && !level.a_giant_robots[ i ].weap_beacon_firing ) - { - sp_giant_robot = level.a_giant_robots[ i ]; - self thread artillery_fx_logic( sp_giant_robot, grenade ); - self notify( "beacon_missile_launch" ); - level.weapon_beacon_busy = 1; - grenade.fuse_reset = 1; - grenade.fuse_time = 100; - grenade resetmissiledetonationtime( 100 ); - break; - } - } - else - { - i++; - } - } - wait 0,1; - } -} - -start_artillery_launch_ee( grenade ) -{ - self endon( "weapon_beacon_timeout" ); - sp_giant_robot = undefined; - n_index = 0; - a_robot_index = []; - a_robot_index[ 0 ] = 1; - a_robot_index[ 1 ] = 0; - a_robot_index[ 2 ] = 2; - while ( n_index < a_robot_index.size ) - { - n_robot_num = a_robot_index[ n_index ]; - if ( isDefined( level.a_giant_robots[ n_robot_num ].is_walking ) && level.a_giant_robots[ n_robot_num ].is_walking ) - { - if ( isDefined( level.a_giant_robots[ n_robot_num ].weap_beacon_firing ) && !level.a_giant_robots[ n_robot_num ].weap_beacon_firing ) - { - sp_giant_robot = level.a_giant_robots[ n_robot_num ]; - self thread artillery_fx_logic_ee( sp_giant_robot, grenade ); - self notify( "beacon_missile_launch" ); - level.weapon_beacon_busy = 1; - grenade.fuse_reset = 1; - grenade.fuse_time = 100; - grenade resetmissiledetonationtime( 100 ); - wait 2; - n_index++; - } - } - else - { - if ( n_index == 0 ) - { - if ( !flag( "three_robot_round" ) ) - { - self thread start_artillery_launch_normal( grenade ); - break; - } - else } - else if ( n_index > 0 ) - { - break; - } - } - else - { - wait 0,1; - } - } - self thread artillery_barrage_logic( grenade, 1 ); -} - -artillery_fx_logic( sp_giant_robot, grenade ) -{ - sp_giant_robot.weap_beacon_firing = 1; - level setclientfield( "play_launch_artillery_fx_robot_" + sp_giant_robot.giant_robot_id, 1 ); - self thread homing_beacon_vo(); - wait 0,5; - if ( isDefined( sp_giant_robot ) ) - { - level setclientfield( "play_launch_artillery_fx_robot_" + sp_giant_robot.giant_robot_id, 0 ); - wait 3; - self thread artillery_barrage_logic( grenade ); - wait 1; - sp_giant_robot.weap_beacon_firing = 0; - } -} - -artillery_fx_logic_ee( sp_giant_robot, grenade ) -{ - sp_giant_robot.weap_beacon_firing = 1; - sp_giant_robot playsound( "zmb_homingbeacon_missiile_alarm" ); - level setclientfield( "play_launch_artillery_fx_robot_" + sp_giant_robot.giant_robot_id, 1 ); - self thread homing_beacon_vo(); - wait 0,5; - if ( isDefined( sp_giant_robot ) ) - { - level setclientfield( "play_launch_artillery_fx_robot_" + sp_giant_robot.giant_robot_id, 0 ); - } - wait 1; - sp_giant_robot.weap_beacon_firing = 0; -} - -homing_beacon_vo() -{ - if ( isDefined( self.owner ) && isplayer( self.owner ) ) - { - n_time = getTime(); - if ( isDefined( self.time_thrown ) ) - { - if ( n_time < ( self.time_thrown + 3000 ) ) - { - self.owner maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "use_beacon" ); - } - } - } -} - -artillery_barrage_logic( grenade, b_ee ) -{ - if ( !isDefined( b_ee ) ) - { - b_ee = 0; - } - if ( isDefined( b_ee ) && b_ee ) - { - a_v_land_offsets = self build_weap_beacon_landing_offsets_ee(); - a_v_start_offsets = self build_weap_beacon_start_offsets_ee(); - n_num_missiles = 15; - n_clientfield = 2; - } - else - { - a_v_land_offsets = self build_weap_beacon_landing_offsets(); - a_v_start_offsets = self build_weap_beacon_start_offsets(); - n_num_missiles = 5; - n_clientfield = 1; - } - self.a_v_land_spots = []; - self.a_v_start_spots = []; - i = 0; - while ( i < n_num_missiles ) - { - self.a_v_start_spots[ i ] = self.origin + a_v_start_offsets[ i ]; - self.a_v_land_spots[ i ] = self.origin + a_v_land_offsets[ i ]; - v_start_trace = self.a_v_start_spots[ i ] - vectorScale( ( 0, 0, 1 ), 5000 ); - trace = bullettrace( v_start_trace, self.a_v_land_spots[ i ], 0, undefined ); - self.a_v_land_spots[ i ] = trace[ "position" ]; - wait 0,05; - i++; - } - i = 0; - while ( i < n_num_missiles ) - { - self setclientfield( "play_artillery_barrage", n_clientfield ); - self thread wait_and_do_weapon_beacon_damage( i ); - wait_network_frame(); - self setclientfield( "play_artillery_barrage", 0 ); - if ( i == 0 ) - { - wait 1; - i++; - continue; - } - else - { - wait 0,25; - } - i++; - } - level thread allow_beacons_to_be_targeted_by_giant_robot(); - wait 6; - grenade notify( "robot_artillery_barrage" ); -} - -allow_beacons_to_be_targeted_by_giant_robot() -{ - wait 3; - level.weapon_beacon_busy = 0; -} - -build_weap_beacon_landing_offsets() -{ - a_offsets = []; - a_offsets[ 0 ] = ( 0, 0, 1 ); - a_offsets[ 1 ] = vectorScale( ( 0, 0, 1 ), 72 ); - a_offsets[ 2 ] = vectorScale( ( 0, 0, 1 ), 72 ); - a_offsets[ 3 ] = vectorScale( ( 0, 0, 1 ), 72 ); - a_offsets[ 4 ] = vectorScale( ( 0, 0, 1 ), 72 ); - return a_offsets; -} - -build_weap_beacon_start_offsets() -{ - a_offsets = []; - a_offsets[ 0 ] = vectorScale( ( 0, 0, 1 ), 8500 ); - a_offsets[ 1 ] = ( -6500, 6500, 8500 ); - a_offsets[ 2 ] = ( 6500, 6500, 8500 ); - a_offsets[ 3 ] = ( 6500, -6500, 8500 ); - a_offsets[ 4 ] = ( -6500, -6500, 8500 ); - return a_offsets; -} - -build_weap_beacon_landing_offsets_ee() -{ - a_offsets = []; - a_offsets[ 0 ] = ( 0, 0, 1 ); - a_offsets[ 1 ] = vectorScale( ( 0, 0, 1 ), 72 ); - a_offsets[ 2 ] = vectorScale( ( 0, 0, 1 ), 72 ); - a_offsets[ 3 ] = vectorScale( ( 0, 0, 1 ), 72 ); - a_offsets[ 4 ] = vectorScale( ( 0, 0, 1 ), 72 ); - a_offsets[ 5 ] = vectorScale( ( 0, 0, 1 ), 72 ); - a_offsets[ 6 ] = vectorScale( ( 0, 0, 1 ), 72 ); - a_offsets[ 7 ] = vectorScale( ( 0, 0, 1 ), 72 ); - a_offsets[ 8 ] = vectorScale( ( 0, 0, 1 ), 72 ); - a_offsets[ 9 ] = vectorScale( ( 0, 0, 1 ), 72 ); - a_offsets[ 10 ] = vectorScale( ( 0, 0, 1 ), 72 ); - a_offsets[ 11 ] = vectorScale( ( 0, 0, 1 ), 72 ); - a_offsets[ 12 ] = vectorScale( ( 0, 0, 1 ), 72 ); - a_offsets[ 13 ] = vectorScale( ( 0, 0, 1 ), 72 ); - a_offsets[ 14 ] = vectorScale( ( 0, 0, 1 ), 72 ); - return a_offsets; -} - -build_weap_beacon_start_offsets_ee() -{ - a_offsets = []; - a_offsets[ 0 ] = vectorScale( ( 0, 0, 1 ), 8500 ); - a_offsets[ 1 ] = ( -6500, 6500, 8500 ); - a_offsets[ 2 ] = ( 6500, 6500, 8500 ); - a_offsets[ 3 ] = ( 6500, -6500, 8500 ); - a_offsets[ 4 ] = ( -6500, -6500, 8500 ); - a_offsets[ 5 ] = ( -6500, 6500, 8500 ); - a_offsets[ 6 ] = ( 6500, 6500, 8500 ); - a_offsets[ 7 ] = ( 6500, -6500, 8500 ); - a_offsets[ 8 ] = ( -6500, -6500, 8500 ); - a_offsets[ 9 ] = ( -6500, 6500, 8500 ); - a_offsets[ 10 ] = ( 6500, 6500, 8500 ); - a_offsets[ 11 ] = ( 6500, -6500, 8500 ); - a_offsets[ 12 ] = ( -6500, -6500, 8500 ); - a_offsets[ 13 ] = ( -6500, 6500, 8500 ); - a_offsets[ 14 ] = ( 6500, 6500, 8500 ); - return a_offsets; -} - -wait_and_do_weapon_beacon_damage( index ) -{ - wait 3; - v_damage_origin = self.a_v_land_spots[ index ]; - level.n_weap_beacon_zombie_thrown_count = 0; - a_zombies_to_kill = []; - a_zombies = getaispeciesarray( "axis", "all" ); - _a969 = a_zombies; - _k969 = getFirstArrayKey( _a969 ); - while ( isDefined( _k969 ) ) - { - zombie = _a969[ _k969 ]; - n_distance = distance( zombie.origin, v_damage_origin ); - if ( n_distance <= 200 ) - { - n_damage = linear_map( n_distance, 200, 0, 7000, 8000 ); - if ( n_damage >= zombie.health ) - { - a_zombies_to_kill[ a_zombies_to_kill.size ] = zombie; - break; - } - else - { - zombie thread set_beacon_damage(); - zombie dodamage( n_damage, zombie.origin, self.owner, self.owner, "none", "MOD_GRENADE_SPLASH", 0, "beacon_zm" ); - } - } - _k969 = getNextArrayKey( _a969, _k969 ); - } - if ( index == 0 ) - { - radiusdamage( self.origin + vectorScale( ( 0, 0, 1 ), 12 ), 10, 1, 1, self.owner, "MOD_GRENADE_SPLASH", "beacon_zm" ); - self ghost(); - self stopanimscripted( 0 ); - } - level thread weap_beacon_zombie_death( self, a_zombies_to_kill ); - self thread weap_beacon_rumble(); -} - -weap_beacon_zombie_death( model, a_zombies_to_kill ) -{ - n_interval = 0; - i = 0; - while ( i < a_zombies_to_kill.size ) - { - zombie = a_zombies_to_kill[ i ]; - if ( !isDefined( zombie ) || !isalive( zombie ) ) - { - i++; - continue; - } - else - { - zombie thread set_beacon_damage(); - zombie dodamage( zombie.health, zombie.origin, model.owner, model.owner, "none", "MOD_GRENADE_SPLASH", 0, "beacon_zm" ); - n_interval++; - zombie thread weapon_beacon_launch_ragdoll(); - if ( n_interval >= 4 ) - { - wait_network_frame(); - n_interval = 0; - } - } - i++; - } -} - -weapon_beacon_launch_ragdoll() -{ - if ( isDefined( self.is_mechz ) && self.is_mechz ) - { - return; - } - if ( isDefined( self.is_giant_robot ) && self.is_giant_robot ) - { - return; - } - if ( level.n_weap_beacon_zombie_thrown_count >= 5 ) - { - return; - } - level.n_weap_beacon_zombie_thrown_count++; - if ( isDefined( level.ragdoll_limit_check ) && !( [[ level.ragdoll_limit_check ]]() ) ) - { - level thread weap_beacon_gib( self ); - return; - } - self startragdoll(); - n_x = randomintrange( 50, 150 ); - n_y = randomintrange( 50, 150 ); - if ( cointoss() ) - { - n_x *= -1; - } - if ( cointoss() ) - { - n_y *= -1; - } - v_launch = ( n_x, n_y, randomintrange( 75, 250 ) ); - self launchragdoll( v_launch ); -} - -weap_beacon_gib( ai_zombie ) -{ - a_gib_ref = []; - a_gib_ref[ 0 ] = level._zombie_gib_piece_index_all; - ai_zombie gib( "normal", a_gib_ref ); -} - -weap_beacon_rumble() -{ - a_players = getplayers(); - _a1087 = a_players; - _k1087 = getFirstArrayKey( _a1087 ); - while ( isDefined( _k1087 ) ) - { - player = _a1087[ _k1087 ]; - if ( isalive( player ) && isDefined( player ) ) - { - if ( distance2dsquared( player.origin, self.origin ) < 250000 ) - { - player thread execute_weap_beacon_rumble(); - } - } - _k1087 = getNextArrayKey( _a1087, _k1087 ); - } -} - -execute_weap_beacon_rumble() -{ - self endon( "death" ); - self endon( "disconnect" ); - self setclientfieldtoplayer( "player_rumble_and_shake", 3 ); - wait_network_frame(); - self setclientfieldtoplayer( "player_rumble_and_shake", 0 ); -} - -set_beacon_damage() -{ - self endon( "death" ); - self.set_beacon_damage = 1; - wait 0,05; - self.set_beacon_damage = 0; -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_claymore.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_claymore.gsc deleted file mode 100644 index 47f5b66..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_claymore.gsc +++ /dev/null @@ -1,482 +0,0 @@ -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( !isDefined( level.claymores_max_per_player ) ) - { - level.claymores_max_per_player = 12; - } - trigs = getentarray( "claymore_purchase", "targetname" ); - i = 0; - while ( i < trigs.size ) - { - model = getent( trigs[ i ].target, "targetname" ); - if ( isDefined( model ) ) - { - model hide(); - } - i++; - } - array_thread( trigs, ::buy_claymores ); - level thread give_claymores_after_rounds(); - level.claymores_on_damage = ::satchel_damage; - level.pickup_claymores = ::pickup_claymores; - level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener; - level.claymore_detectiondot = cos( 70 ); - level.claymore_detectionmindist = 20; - level._effect[ "claymore_laser" ] = loadfx( "weapon/claymore/fx_claymore_laser" ); -} - -buy_claymores() -{ - self.zombie_cost = 1000; - self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); - self setcursorhint( "HINT_WEAPON", "claymore_zm" ); - self endon( "kill_trigger" ); - if ( !isDefined( self.stub ) ) - { - return; - } - if ( isDefined( self.stub ) && !isDefined( self.stub.claymores_triggered ) ) - { - self.stub.claymores_triggered = 0; - } - self.claymores_triggered = self.stub.claymores_triggered; - while ( 1 ) - { - self waittill( "trigger", who ); - while ( who in_revive_trigger() ) - { - continue; - } - while ( who has_powerup_weapon() ) - { - wait 0,1; - } - if ( is_player_valid( who ) ) - { - if ( who.score >= self.zombie_cost ) - { - if ( !who is_player_placeable_mine( "claymore_zm" ) ) - { - play_sound_at_pos( "purchase", self.origin ); - who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost ); - who thread claymore_setup(); - who thread show_claymore_hint( "claymore_purchased" ); - who thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" ); - if ( isDefined( self.stub ) ) - { - self.claymores_triggered = self.stub.claymores_triggered; - } - if ( self.claymores_triggered == 0 ) - { - model = getent( self.target, "targetname" ); - if ( isDefined( model ) ) - { - model thread maps/mp/zombies/_zm_weapons::weapon_show( who ); - } - else - { - if ( isDefined( self.clientfieldname ) ) - { - level setclientfield( self.clientfieldname, 1 ); - } - } - self.claymores_triggered = 1; - if ( isDefined( self.stub ) ) - { - self.stub.claymores_triggered = 1; - } - } - trigs = getentarray( "claymore_purchase", "targetname" ); - i = 0; - while ( i < trigs.size ) - { - trigs[ i ] setinvisibletoplayer( who ); - i++; - } - } - else who thread show_claymore_hint( "already_purchased" ); - break; - } - else - { - who play_sound_on_ent( "no_purchase" ); - who maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); - } - } - } -} - -claymore_unitrigger_update_prompt( player ) -{ - if ( player is_player_placeable_mine( "claymore_zm" ) ) - { - self sethintstring( "" ); - self setcursorhint( "HINT_NOICON" ); - return 0; - } - self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); - self setcursorhint( "HINT_WEAPON", "claymore_zm" ); - return 1; -} - -set_claymore_visible() -{ - players = get_players(); - trigs = getentarray( "claymore_purchase", "targetname" ); - while ( 1 ) - { - j = 0; - while ( j < players.size ) - { - while ( !players[ j ] is_player_placeable_mine( "claymore_zm" ) ) - { - i = 0; - while ( i < trigs.size ) - { - trigs[ i ] setinvisibletoplayer( players[ j ], 0 ); - i++; - } - } - j++; - } - wait 1; - players = get_players(); - } -} - -claymore_safe_to_plant() -{ - if ( self.owner.claymores.size >= level.claymores_max_per_player ) - { - return 0; - } - if ( isDefined( level.claymore_safe_to_plant ) ) - { - return self [[ level.claymore_safe_to_plant ]](); - } - return 1; -} - -claymore_wait_and_detonate() -{ - wait 0,1; - self detonate( self.owner ); -} - -claymore_watch() -{ - self endon( "death" ); - self notify( "claymore_watch" ); - self endon( "claymore_watch" ); - while ( 1 ) - { - self waittill( "grenade_fire", claymore, weapname ); - if ( weapname == "claymore_zm" ) - { - claymore.owner = self; - claymore.team = self.team; - self notify( "zmb_enable_claymore_prompt" ); - if ( claymore claymore_safe_to_plant() ) - { - if ( isDefined( level.claymore_planted ) ) - { - self thread [[ level.claymore_planted ]]( claymore ); - } - claymore thread claymore_detonation(); - claymore thread play_claymore_effects(); - self maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_planted" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_planted" ); - break; - } - else - { - claymore thread claymore_wait_and_detonate(); - } - } - } -} - -claymore_setup() -{ - if ( !isDefined( self.claymores ) ) - { - self.claymores = []; - } - self thread claymore_watch(); - self giveweapon( "claymore_zm" ); - self set_player_placeable_mine( "claymore_zm" ); - self setactionslot( 4, "weapon", "claymore_zm" ); - self setweaponammostock( "claymore_zm", 2 ); -} - -adjust_trigger_origin( origin ) -{ - origin += vectorScale( ( 0, 0, 1 ), 20 ); - return origin; -} - -on_spawn_retrieve_trigger( watcher, player ) -{ - self maps/mp/gametypes_zm/_weaponobjects::onspawnretrievableweaponobject( watcher, player ); - if ( isDefined( self.pickuptrigger ) ) - { - self.pickuptrigger sethintlowpriority( 0 ); - } -} - -pickup_claymores() -{ - player = self.owner; - if ( !player hasweapon( "claymore_zm" ) ) - { - player thread claymore_watch(); - player giveweapon( "claymore_zm" ); - player set_player_placeable_mine( "claymore_zm" ); - player setactionslot( 4, "weapon", "claymore_zm" ); - player setweaponammoclip( "claymore_zm", 0 ); - player notify( "zmb_enable_claymore_prompt" ); - } - else - { - clip_ammo = player getweaponammoclip( self.name ); - clip_max_ammo = weaponclipsize( self.name ); - if ( clip_ammo >= clip_max_ammo ) - { - self destroy_ent(); - player notify( "zmb_disable_claymore_prompt" ); - return; - } - } - self pick_up(); - clip_ammo = player getweaponammoclip( self.name ); - clip_max_ammo = weaponclipsize( self.name ); - if ( clip_ammo >= clip_max_ammo ) - { - player notify( "zmb_disable_claymore_prompt" ); - } - player maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_pickedup" ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_pickedup" ); -} - -pickup_claymores_trigger_listener( trigger, player ) -{ - self thread pickup_claymores_trigger_listener_enable( trigger, player ); - self thread pickup_claymores_trigger_listener_disable( trigger, player ); -} - -pickup_claymores_trigger_listener_enable( trigger, player ) -{ - self endon( "delete" ); - self endon( "death" ); - while ( 1 ) - { - player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" ); - if ( !isDefined( trigger ) ) - { - return; - } - trigger trigger_on(); - trigger linkto( self ); - } -} - -pickup_claymores_trigger_listener_disable( trigger, player ) -{ - self endon( "delete" ); - self endon( "death" ); - while ( 1 ) - { - player waittill( "zmb_disable_claymore_prompt" ); - if ( !isDefined( trigger ) ) - { - return; - } - trigger unlink(); - trigger trigger_off(); - } -} - -shouldaffectweaponobject( object ) -{ - pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 ); - dirtopos = pos - object.origin; - objectforward = anglesToForward( object.angles ); - dist = vectordot( dirtopos, objectforward ); - if ( dist < level.claymore_detectionmindist ) - { - return 0; - } - dirtopos = vectornormalize( dirtopos ); - dot = vectordot( dirtopos, objectforward ); - return dot > level.claymore_detectiondot; -} - -claymore_detonation() -{ - self endon( "death" ); - self waittill_not_moving(); - detonateradius = 96; - damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 ); - damagearea setexcludeteamfortrigger( self.team ); - damagearea enablelinkto(); - damagearea linkto( self ); - if ( is_true( self.isonbus ) ) - { - damagearea setmovingplatformenabled( 1 ); - } - self.damagearea = damagearea; - self thread delete_claymores_on_death( self.owner, damagearea ); - self.owner.claymores[ self.owner.claymores.size ] = self; - while ( 1 ) - { - damagearea waittill( "trigger", ent ); - if ( isDefined( self.owner ) && ent == self.owner ) - { - continue; - } - while ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team ) - { - continue; - } - if ( isDefined( ent.ignore_claymore ) && ent.ignore_claymore ) - { - continue; - } - while ( !ent shouldaffectweaponobject( self ) ) - { - continue; - } - if ( ent damageconetrace( self.origin, self ) > 0 ) - { - self playsound( "wpn_claymore_alert" ); - wait 0,4; - if ( isDefined( self.owner ) ) - { - self detonate( self.owner ); - } - else - { - self detonate( undefined ); - } - return; - } - } -} - -delete_claymores_on_death( player, ent ) -{ - self waittill( "death" ); - if ( isDefined( player ) ) - { - arrayremovevalue( player.claymores, self ); - } - wait 0,05; - if ( isDefined( ent ) ) - { - ent delete(); - } -} - -satchel_damage() -{ - self endon( "death" ); - self setcandamage( 1 ); - self.health = 100000; - self.maxhealth = self.health; - attacker = undefined; - while ( 1 ) - { - self waittill( "damage", amount, attacker ); - if ( !isDefined( self ) ) - { - return; - } - self.health = self.maxhealth; - while ( !isplayer( attacker ) ) - { - continue; - } - if ( isDefined( self.owner ) && attacker == self.owner ) - { - continue; - } - while ( isDefined( attacker.pers ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] != level.zombie_team ) - { - continue; - } - } - if ( level.satchelexplodethisframe ) - { - wait ( 0,1 + randomfloat( 0,4 ) ); - } - else wait 0,05; - if ( !isDefined( self ) ) - { - return; - } - level.satchelexplodethisframe = 1; - thread reset_satchel_explode_this_frame(); - self detonate( attacker ); -} - -reset_satchel_explode_this_frame() -{ - wait 0,05; - level.satchelexplodethisframe = 0; -} - -play_claymore_effects() -{ - self endon( "death" ); - self waittill_not_moving(); - playfxontag( level._effect[ "claymore_laser" ], self, "tag_fx" ); -} - -give_claymores_after_rounds() -{ - while ( 1 ) - { - level waittill( "between_round_over" ); - while ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] is_player_placeable_mine( "claymore_zm" ) ) - { - players[ i ] giveweapon( "claymore_zm" ); - players[ i ] set_player_placeable_mine( "claymore_zm" ); - players[ i ] setactionslot( 4, "weapon", "claymore_zm" ); - players[ i ] setweaponammoclip( "claymore_zm", 2 ); - } - i++; - } - } - } -} - -show_claymore_hint( string ) -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( string == "claymore_purchased" ) - { - text = &"ZOMBIE_CLAYMORE_HOWTO"; - } - else - { - text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED"; - } - show_equipment_hint_text( text ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_one_inch_punch.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_one_inch_punch.gsc deleted file mode 100644 index e407f85..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_one_inch_punch.gsc +++ /dev/null @@ -1,369 +0,0 @@ -#include maps/mp/animscripts/zm_shared; -#include maps/mp/zombies/_zm_weap_staff_lightning; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_weap_staff_water; -#include maps/mp/zombies/_zm_weap_staff_fire; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -one_inch_precache() -{ - precacheitem( "one_inch_punch_zm" ); - precacheitem( "one_inch_punch_fire_zm" ); - precacheitem( "one_inch_punch_air_zm" ); - precacheitem( "one_inch_punch_ice_zm" ); - precacheitem( "one_inch_punch_lightning_zm" ); - precacheitem( "one_inch_punch_upgraded_zm" ); - precacheitem( "zombie_one_inch_punch_flourish" ); - precacheitem( "zombie_one_inch_punch_upgrade_flourish" ); - level._effect[ "oneinch_impact" ] = loadfx( "maps/zombie_tomb/fx_tomb_perk_one_inch_punch" ); - level._effect[ "punch_knockdown_ground" ] = loadfx( "weapon/thunder_gun/fx_thundergun_knockback_ground" ); -} - -one_inch_punch_melee_attack() -{ - self endon( "disconnect" ); - self endon( "stop_one_inch_punch_attack" ); - if ( isDefined( self.one_inch_punch_flag_has_been_init ) && !self.one_inch_punch_flag_has_been_init ) - { - self ent_flag_init( "melee_punch_cooldown" ); - } - self.one_inch_punch_flag_has_been_init = 1; - current_melee_weapon = self get_player_melee_weapon(); - self takeweapon( current_melee_weapon ); - if ( isDefined( self.b_punch_upgraded ) && self.b_punch_upgraded ) - { - str_weapon = self getcurrentweapon(); - self disable_player_move_states( 1 ); - self giveweapon( "zombie_one_inch_punch_upgrade_flourish" ); - self switchtoweapon( "zombie_one_inch_punch_upgrade_flourish" ); - self waittill_any( "player_downed", "weapon_change_complete" ); - self switchtoweapon( str_weapon ); - self enable_player_move_states(); - self takeweapon( "zombie_one_inch_punch_upgrade_flourish" ); - if ( self.str_punch_element == "air" ) - { - self giveweapon( "one_inch_punch_air_zm" ); - self set_player_melee_weapon( "one_inch_punch_air_zm" ); - } - else if ( self.str_punch_element == "fire" ) - { - self giveweapon( "one_inch_punch_fire_zm" ); - self set_player_melee_weapon( "one_inch_punch_fire_zm" ); - } - else if ( self.str_punch_element == "ice" ) - { - self giveweapon( "one_inch_punch_ice_zm" ); - self set_player_melee_weapon( "one_inch_punch_ice_zm" ); - } - else if ( self.str_punch_element == "lightning" ) - { - self giveweapon( "one_inch_punch_lightning_zm" ); - self set_player_melee_weapon( "one_inch_punch_lightning_zm" ); - } - else - { - self giveweapon( "one_inch_punch_upgraded_zm" ); - self set_player_melee_weapon( "one_inch_punch_upgraded_zm" ); - } - } - else - { - str_weapon = self getcurrentweapon(); - self disable_player_move_states( 1 ); - self giveweapon( "zombie_one_inch_punch_flourish" ); - self switchtoweapon( "zombie_one_inch_punch_flourish" ); - self waittill_any( "player_downed", "weapon_change_complete" ); - self switchtoweapon( str_weapon ); - self enable_player_move_states(); - self takeweapon( "zombie_one_inch_punch_flourish" ); - self giveweapon( "one_inch_punch_zm" ); - self set_player_melee_weapon( "one_inch_punch_zm" ); - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "perk", "one_inch" ); - } - self thread monitor_melee_swipe(); -} - -monitor_melee_swipe() -{ - self endon( "disconnect" ); - self notify( "stop_monitor_melee_swipe" ); - self endon( "stop_monitor_melee_swipe" ); - self endon( "bled_out" ); - while ( 1 ) - { - while ( !self ismeleeing() ) - { - wait 0,05; - } - while ( self getcurrentweapon() == level.riotshield_name ) - { - wait 0,1; - } - range_mod = 1; - self setclientfield( "oneinchpunch_impact", 1 ); - wait_network_frame(); - self setclientfield( "oneinchpunch_impact", 0 ); - v_punch_effect_fwd = anglesToForward( self getplayerangles() ); - v_punch_yaw = get2dyaw( ( 0, 0, 0 ), v_punch_effect_fwd ); - if ( isDefined( self.b_punch_upgraded ) && self.b_punch_upgraded && isDefined( self.str_punch_element ) && self.str_punch_element == "air" ) - { - range_mod *= 2; - } - a_zombies = getaispeciesarray( level.zombie_team, "all" ); - a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, 100 ); - _a147 = a_zombies; - _k147 = getFirstArrayKey( _a147 ); - while ( isDefined( _k147 ) ) - { - zombie = _a147[ _k147 ]; - if ( self is_player_facing( zombie, v_punch_yaw ) && distancesquared( self.origin, zombie.origin ) <= ( 4096 * range_mod ) ) - { - self thread zombie_punch_damage( zombie, 1 ); - } - else - { - if ( self is_player_facing( zombie, v_punch_yaw ) ) - { - self thread zombie_punch_damage( zombie, 0,5 ); - } - } - _k147 = getNextArrayKey( _a147, _k147 ); - } - while ( self ismeleeing() ) - { - wait 0,05; - } - wait 0,05; - } -} - -is_player_facing( zombie, v_punch_yaw ) -{ - v_player_to_zombie_yaw = get2dyaw( self.origin, zombie.origin ); - yaw_diff = v_player_to_zombie_yaw - v_punch_yaw; - if ( yaw_diff < 0 ) - { - yaw_diff *= -1; - } - if ( yaw_diff < 35 ) - { - return 1; - } - else - { - return 0; - } -} - -is_oneinch_punch_damage() -{ - if ( isDefined( self.damageweapon ) ) - { - return self.damageweapon == "one_inch_punch_zm"; - } -} - -gib_zombies_head( player ) -{ - player endon( "disconnect" ); - self maps/mp/zombies/_zm_spawner::zombie_head_gib(); -} - -punch_cooldown() -{ - wait 1; - self ent_flag_set( "melee_punch_cooldown" ); -} - -zombie_punch_damage( ai_zombie, n_mod ) -{ - self endon( "disconnect" ); - ai_zombie.punch_handle_pain_notetracks = ::handle_punch_pain_notetracks; - if ( isDefined( n_mod ) ) - { - if ( isDefined( self.b_punch_upgraded ) && self.b_punch_upgraded ) - { - n_base_damage = 11275; - } - else - { - n_base_damage = 2250; - } - n_damage = int( n_base_damage * n_mod ); - if ( isDefined( ai_zombie.is_mechz ) && !ai_zombie.is_mechz ) - { - if ( n_damage >= ai_zombie.health ) - { - self thread zombie_punch_death( ai_zombie ); - self do_player_general_vox( "kill", "one_inch_punch" ); - if ( isDefined( self.b_punch_upgraded ) && self.b_punch_upgraded && isDefined( self.str_punch_element ) ) - { - switch( self.str_punch_element ) - { - case "fire": - ai_zombie thread maps/mp/zombies/_zm_weap_staff_fire::flame_damage_fx( self.current_melee_weapon, self, n_mod ); - break; - case "ice": - ai_zombie thread maps/mp/zombies/_zm_weap_staff_water::ice_affect_zombie( self.current_melee_weapon, self, 0, n_mod ); - break; - case "lightning": - if ( isDefined( ai_zombie.is_mechz ) && ai_zombie.is_mechz ) - { - return; - } - if ( isDefined( ai_zombie.is_electrocuted ) && ai_zombie.is_electrocuted ) - { - return; - } - tag = "J_SpineUpper"; - network_safe_play_fx_on_tag( "lightning_impact", 2, level._effect[ "lightning_impact" ], ai_zombie, tag ); - ai_zombie thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "electrocute", ai_zombie.animname ); - break; - } - } - break; - } - else self maps/mp/zombies/_zm_score::player_add_points( "damage_light" ); - if ( isDefined( self.b_punch_upgraded ) && self.b_punch_upgraded && isDefined( self.str_punch_element ) ) - { - switch( self.str_punch_element ) - { - case "fire": - ai_zombie thread maps/mp/zombies/_zm_weap_staff_fire::flame_damage_fx( self.current_melee_weapon, self, n_mod ); - break; - case "ice": - ai_zombie thread maps/mp/zombies/_zm_weap_staff_water::ice_affect_zombie( self.current_melee_weapon, self, 0, n_mod ); - break; - case "lightning": - ai_zombie thread maps/mp/zombies/_zm_weap_staff_lightning::stun_zombie(); - break; - } - } - } - ai_zombie dodamage( n_damage, ai_zombie.origin, self, self, 0, "MOD_MELEE", 0, self.current_melee_weapon ); -} -} - -zombie_punch_death( ai_zombie ) -{ - ai_zombie thread gib_zombies_head( self ); - if ( isDefined( level.ragdoll_limit_check ) && !( [[ level.ragdoll_limit_check ]]() ) ) - { - return; - } - if ( isDefined( ai_zombie ) ) - { - ai_zombie startragdoll(); - ai_zombie setclientfield( "oneinchpunch_physics_launchragdoll", 1 ); - } - wait_network_frame(); - if ( isDefined( ai_zombie ) ) - { - ai_zombie setclientfield( "oneinchpunch_physics_launchragdoll", 0 ); - } -} - -handle_punch_pain_notetracks( note ) -{ - if ( note == "zombie_knockdown_ground_impact" ) - { - playfx( level._effect[ "punch_knockdown_ground" ], self.origin, anglesToForward( self.angles ), anglesToUp( self.angles ) ); - } -} - -knockdown_zombie_animate() -{ - self notify( "end_play_punch_pain_anim" ); - self endon( "killanimscript" ); - self endon( "death" ); - self endon( "end_play_punch_pain_anim" ); - if ( isDefined( self.marked_for_death ) && self.marked_for_death ) - { - return; - } - self.allowpain = 0; - animation_direction = undefined; - animation_legs = ""; - animation_side = undefined; - animation_duration = "_default"; - v_forward = vectordot( anglesToForward( self.angles ), vectornormalize( self.v_punched_from - self.origin ) ); - if ( v_forward > 0,6 ) - { - animation_direction = "back"; - if ( isDefined( self.has_legs ) && !self.has_legs ) - { - animation_legs = "_crawl"; - } - if ( randomint( 100 ) > 75 ) - { - animation_side = "belly"; - } - else - { - animation_side = "back"; - } - } - else if ( self.damageyaw > 75 && self.damageyaw < 135 ) - { - animation_direction = "left"; - animation_side = "belly"; - } - else - { - if ( self.damageyaw > -135 && self.damageyaw < -75 ) - { - animation_direction = "right"; - animation_side = "belly"; - } - else - { - animation_direction = "front"; - animation_side = "belly"; - } - } - self thread knockdown_zombie_animate_state(); - self setanimstatefromasd( "zm_punch_fall_" + animation_direction + animation_legs ); - self maps/mp/animscripts/zm_shared::donotetracks( "punch_fall_anim", self.punch_handle_pain_notetracks ); - if ( isDefined( self.has_legs ) || !self.has_legs && isDefined( self.marked_for_death ) && self.marked_for_death ) - { - return; - } - if ( isDefined( self.a.gib_ref ) ) - { - if ( self.a.gib_ref != "no_legs" && self.a.gib_ref != "no_arms" && self.a.gib_ref != "left_leg" && self.a.gib_ref == "right_leg" || randomint( 100 ) > 25 && self.a.gib_ref != "left_arm" && self.a.gib_ref == "right_arm" && randomint( 100 ) > 75 ) - { - animation_duration = "_late"; - } - else - { - if ( randomint( 100 ) > 75 ) - { - animation_duration = "_early"; - } - } - } - else - { - if ( randomint( 100 ) > 25 ) - { - animation_duration = "_early"; - } - } - self setanimstatefromasd( "zm_punch_getup_" + animation_side + animation_duration ); - self maps/mp/animscripts/zm_shared::donotetracks( "punch_getup_anim" ); - self.allowpain = 1; - self notify( "back_up" ); -} - -knockdown_zombie_animate_state() -{ - self endon( "death" ); - self.is_knocked_down = 1; - self waittill_any( "damage", "back_up" ); - self.is_knocked_down = 0; -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_riotshield_tomb.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_riotshield_tomb.gsc deleted file mode 100644 index 29a3423..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_riotshield_tomb.gsc +++ /dev/null @@ -1,783 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - maps/mp/zombies/_zm_riotshield_tomb::init(); - set_zombie_var( "riotshield_cylinder_radius", 360 ); - set_zombie_var( "riotshield_fling_range", 90 ); - set_zombie_var( "riotshield_gib_range", 90 ); - set_zombie_var( "riotshield_gib_damage", 75 ); - set_zombie_var( "riotshield_knockdown_range", 90 ); - set_zombie_var( "riotshield_knockdown_damage", 15 ); - set_zombie_var( "riotshield_hit_points", 1500 ); - set_zombie_var( "riotshield_fling_damage_shield", 100 ); - set_zombie_var( "riotshield_knockdown_damage_shield", 15 ); - level.riotshield_network_choke_count = 0; - level.riotshield_gib_refs = []; - level.riotshield_gib_refs[ level.riotshield_gib_refs.size ] = "guts"; - level.riotshield_gib_refs[ level.riotshield_gib_refs.size ] = "right_arm"; - level.riotshield_gib_refs[ level.riotshield_gib_refs.size ] = "left_arm"; - level.riotshield_damage_callback = ::player_damage_shield; - level.deployed_riotshield_damage_callback = ::deployed_damage_shield; - level.transferriotshield = ::transferriotshield; - level.cantransferriotshield = ::cantransferriotshield; - maps/mp/zombies/_zm_spawner::register_zombie_damage_callback( ::riotshield_zombie_damage_response ); - maps/mp/zombies/_zm_equipment::register_equipment( "tomb_shield_zm", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_RIOTSHIELD_HOWTO", "riotshield_zm_icon", "riotshield", ::riotshield_activation_watcher_thread, undefined, ::dropshield, ::pickupshield ); - maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "riotshield", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING" ); - onplayerconnect_callback( ::onplayerconnect ); -} - -onplayerconnect() -{ - self.player_shield_reset_health = ::player_init_shield_health; - self.player_shield_apply_damage = ::player_damage_shield; - self.player_shield_reset_location = ::player_init_shield_location; - self thread watchriotshielduse(); - self thread watchriotshieldmelee(); - self thread player_watch_laststand(); -} - -dropshield() -{ - self.shield_placement = 0; - self maps/mp/zombies/_zm_riotshield_tomb::updateriotshieldmodel(); - item = self maps/mp/zombies/_zm_equipment::placed_equipment_think( "t6_wpn_zmb_shield_dlc4_dmg0_world", "tomb_shield_zm", self.origin + vectorScale( ( 0, 0, 1 ), 30 ), self.angles ); - if ( isDefined( item ) ) - { - item.shielddamagetaken = self.shielddamagetaken; - item.original_owner = self; - item.owner = undefined; - item.name = level.riotshield_name; - item.isriotshield = 1; - item deployed_damage_shield( 0 ); - item setscriptmoverflag( 0 ); - item.requires_pickup = 1; - item thread watchtoofriendly( self ); - } - self takeweapon( level.riotshield_name ); - return item; -} - -watchtoofriendly( player ) -{ - wait 1; - if ( isDefined( self ) && isDefined( player ) && distance2dsquared( self.origin, player.origin ) < 36 ) - { - if ( isalive( player ) ) - { - player playlocalsound( level.zmb_laugh_alias ); - } - player maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 ); - self deployed_damage_shield( 2000 ); - } -} - -pickupshield( item ) -{ - item.owner = self; - damage = item.shielddamagetaken; - damagemax = level.zombie_vars[ "riotshield_hit_points" ]; - self.shielddamagetaken = damage; - self player_set_shield_health( damage, damagemax ); -} - -placeshield( origin, angles ) -{ - if ( self getcurrentweapon() != level.riotshield_name ) - { - self switchtoweapon( level.riotshield_name ); - self waittill( "weapon_change" ); - } - item = self maps/mp/zombies/_zm_riotshield_tomb::doriotshielddeploy( origin, angles ); - if ( isDefined( item ) ) - { - item.origin = self.origin + vectorScale( ( 0, 0, 1 ), 30 ); - item.angles = self.angles; - item.owner = self; - } - return item; -} - -cantransferriotshield( fromplayer, toplayer ) -{ - if ( isDefined( toplayer.screecher_weapon ) ) - { - return 0; - } - if ( isDefined( toplayer.is_drinking ) && toplayer.is_drinking > 0 ) - { - return 0; - } - if ( toplayer maps/mp/zombies/_zm_laststand::player_is_in_laststand() || toplayer in_revive_trigger() ) - { - return 0; - } - if ( toplayer isthrowinggrenade() ) - { - return 0; - } - if ( fromplayer == toplayer ) - { - return 1; - } - if ( toplayer is_player_equipment( level.riotshield_name ) && toplayer.shield_placement != 3 ) - { - return 0; - } - if ( fromplayer.session_team != toplayer.session_team ) - { - return 0; - } - return 1; -} - -transferriotshield( fromplayer, toplayer ) -{ - damage = fromplayer.shielddamagetaken; - toplayer player_take_riotshield(); - fromplayer player_take_riotshield(); - toplayer.shielddamagetaken = damage; - toplayer.shield_placement = 3; - toplayer.shield_damage_level = 0; - toplayer maps/mp/zombies/_zm_equipment::equipment_give( "tomb_shield_zm" ); - toplayer switchtoweapon( "tomb_shield_zm" ); - damagemax = level.zombie_vars[ "riotshield_hit_points" ]; - toplayer player_set_shield_health( damage, damagemax ); -} - -player_take_riotshield() -{ - self notify( "destroy_riotshield" ); - if ( self getcurrentweapon() == "tomb_shield_zm" ) - { - new_primary = ""; - if ( isDefined( self.laststand ) && self.laststand ) - { - new_primary = self.laststandpistol; - self giveweapon( new_primary ); - } - else - { - primaryweapons = self getweaponslistprimaries(); - i = 0; - while ( i < primaryweapons.size ) - { - if ( primaryweapons[ i ] != "tomb_shield_zm" ) - { - new_primary = primaryweapons[ i ]; - break; - } - else - { - i++; - } - } - if ( new_primary == "" ) - { - self maps/mp/zombies/_zm_weapons::give_fallback_weapon(); - new_primary = "zombie_fists_zm"; - } - } - self switchtoweaponimmediate( new_primary ); - self playsound( "wpn_riotshield_zm_destroy" ); - self waittill( "weapon_change" ); - } - self maps/mp/zombies/_zm_riotshield_tomb::removeriotshield(); - self maps/mp/zombies/_zm_equipment::equipment_take( "tomb_shield_zm" ); - self.hasriotshield = 0; - self.hasriotshieldequipped = 0; -} - -player_watch_laststand() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "entering_last_stand" ); - if ( self getcurrentweapon() == "tomb_shield_zm" ) - { - new_primary = self.laststandpistol; - self giveweapon( new_primary ); - self switchtoweaponimmediate( new_primary ); - } - } -} - -player_init_shield_health() -{ - retval = self.shielddamagetaken > 0; - self.shielddamagetaken = 0; - self.shield_damage_level = 0; - self maps/mp/zombies/_zm_riotshield_tomb::updateriotshieldmodel(); - return retval; -} - -player_init_shield_location() -{ - self.hasriotshield = 1; - self.hasriotshieldequipped = 0; - self.shield_placement = 2; - self maps/mp/zombies/_zm_riotshield_tomb::updateriotshieldmodel(); -} - -player_set_shield_health( damage, max_damage ) -{ - shieldhealth = int( ( 100 * ( max_damage - damage ) ) / max_damage ); - if ( shieldhealth >= 50 ) - { - self.shield_damage_level = 0; - } - else if ( shieldhealth >= 25 ) - { - self.shield_damage_level = 2; - } - else - { - self.shield_damage_level = 3; - } - self maps/mp/zombies/_zm_riotshield_tomb::updateriotshieldmodel(); -} - -deployed_set_shield_health( damage, max_damage ) -{ - shieldhealth = int( ( 100 * ( max_damage - damage ) ) / max_damage ); - if ( shieldhealth >= 50 ) - { - self.shield_damage_level = 0; - } - else if ( shieldhealth >= 25 ) - { - self.shield_damage_level = 2; - } - else - { - self.shield_damage_level = 3; - } - self maps/mp/zombies/_zm_riotshield_tomb::updatestandaloneriotshieldmodel(); -} - -player_damage_shield( idamage, bheld ) -{ - damagemax = level.zombie_vars[ "riotshield_hit_points" ]; - if ( !isDefined( self.shielddamagetaken ) ) - { - self.shielddamagetaken = 0; - } - self.shielddamagetaken += idamage; - if ( self.shielddamagetaken >= damagemax ) - { - if ( bheld || !isDefined( self.shield_ent ) ) - { - self playrumbleonentity( "damage_heavy" ); - earthquake( 1, 0,75, self.origin, 100 ); - } - else - { - if ( isDefined( self.shield_ent ) ) - { - if ( is_true( self.shield_ent.destroy_begun ) ) - { - return; - } - self.shield_ent.destroy_begun = 1; - shield_origin = self.shield_ent.origin; - level thread maps/mp/zombies/_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx ); - wait 1; - playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin ); - } - } - self thread player_take_riotshield(); - } - else - { - if ( bheld ) - { - self playrumbleonentity( "damage_light" ); - earthquake( 0,5, 0,5, self.origin, 100 ); - } - self player_set_shield_health( self.shielddamagetaken, damagemax ); - self playsound( "fly_riotshield_zm_impact_zombies" ); - } -} - -deployed_damage_shield( idamage ) -{ - damagemax = level.zombie_vars[ "riotshield_hit_points" ]; - if ( !isDefined( self.shielddamagetaken ) ) - { - self.shielddamagetaken = 0; - } - self.shielddamagetaken += idamage; - if ( self.shielddamagetaken >= damagemax ) - { - shield_origin = self.origin; - if ( isDefined( self.stub ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.stub ); - } - if ( isDefined( self.original_owner ) ) - { - self.original_owner maps/mp/zombies/_zm_equipment::equipment_take( "tomb_shield_zm" ); - } - maps/mp/zombies/_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx ); - playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin ); - self_delete(); - } - else - { - self deployed_set_shield_health( self.shielddamagetaken, damagemax ); - } -} - -riotshield_activation_watcher_thread() -{ - self endon( "zombified" ); - self endon( "disconnect" ); - self endon( "tomb_shield_zm_taken" ); - while ( 1 ) - { - self waittill_either( "tomb_shield_zm_activate", "tomb_shield_zm_deactivate" ); - } -} - -watchriotshielduse() -{ - self endon( "death" ); - self endon( "disconnect" ); - self.shielddamagetaken = 0; - self thread maps/mp/zombies/_zm_riotshield_tomb::trackriotshield(); - self thread maps/mp/zombies/_zm_riotshield_tomb::trackequipmentchange(); - self thread maps/mp/zombies/_zm_riotshield_tomb::watchshieldlaststand(); - self thread trackstuckzombies(); - for ( ;; ) - { - self waittill( "raise_riotshield" ); - self thread maps/mp/zombies/_zm_riotshield_tomb::startriotshielddeploy(); - } -} - -watchriotshieldmelee() -{ - for ( ;; ) - { - self waittill( "weapon_melee", weapon ); - if ( weapon == level.riotshield_name ) - { - self riotshield_melee(); - } - } -} - -is_riotshield_damage( mod, player, amount ) -{ - if ( mod == "MOD_MELEE" && player hasweapon( level.riotshield_name ) && amount < 10 ) - { - return 1; - } - return 0; -} - -riotshield_damage( amount ) -{ -} - -riotshield_fling_zombie( player, fling_vec, index ) -{ - if ( !isDefined( self ) || !isalive( self ) ) - { - return; - } - if ( isDefined( self.ignore_riotshield ) && self.ignore_riotshield ) - { - return; - } - if ( isDefined( self.riotshield_fling_func ) ) - { - self [[ self.riotshield_fling_func ]]( player ); - return; - } - damage = 2500; - self dodamage( damage, player.origin, player, player, "", "MOD_IMPACT" ); - if ( self.health < 1 ) - { - self.riotshield_death = 1; - if ( isDefined( level.ragdoll_limit_check ) && !( [[ level.ragdoll_limit_check ]]() ) ) - { - return; - } - self startragdoll(); - self launchragdoll( fling_vec ); - } -} - -zombie_knockdown( player, gib ) -{ - damage = level.zombie_vars[ "riotshield_knockdown_damage" ]; - if ( isDefined( level.override_riotshield_damage_func ) ) - { - self [[ level.override_riotshield_damage_func ]]( player, gib ); - } - else - { - if ( gib ) - { - self.a.gib_ref = random( level.riotshield_gib_refs ); - self thread maps/mp/animscripts/zm_death::do_gib(); - } - self dodamage( damage, player.origin, player ); - } -} - -riotshield_knockdown_zombie( player, gib ) -{ - self endon( "death" ); - playsoundatposition( "vox_riotshield_forcehit", self.origin ); - playsoundatposition( "wpn_riotshield_proj_impact", self.origin ); - if ( !isDefined( self ) || !isalive( self ) ) - { - return; - } - if ( isDefined( self.riotshield_knockdown_func ) ) - { - self [[ self.riotshield_knockdown_func ]]( player, gib ); - } - else - { - self zombie_knockdown( player, gib ); - } - self dodamage( level.zombie_vars[ "riotshield_knockdown_damage" ], player.origin, player ); - self playsound( "fly_riotshield_forcehit" ); -} - -riotshield_get_enemies_in_range() -{ - view_pos = self geteye(); - zombies = get_array_of_closest( view_pos, get_round_enemy_array_wrapper(), undefined, undefined, 2 * level.zombie_vars[ "riotshield_knockdown_range" ] ); - if ( !isDefined( zombies ) ) - { - return; - } - knockdown_range_squared = level.zombie_vars[ "riotshield_knockdown_range" ] * level.zombie_vars[ "riotshield_knockdown_range" ]; - gib_range_squared = level.zombie_vars[ "riotshield_gib_range" ] * level.zombie_vars[ "riotshield_gib_range" ]; - fling_range_squared = level.zombie_vars[ "riotshield_fling_range" ] * level.zombie_vars[ "riotshield_fling_range" ]; - cylinder_radius_squared = level.zombie_vars[ "riotshield_cylinder_radius" ] * level.zombie_vars[ "riotshield_cylinder_radius" ]; - forward_view_angles = self getweaponforwarddir(); - end_pos = view_pos + vectorScale( forward_view_angles, level.zombie_vars[ "riotshield_knockdown_range" ] ); -/# - if ( getDvarInt( #"BF480CE9" ) == 2 ) - { - near_circle_pos = view_pos + vectorScale( forward_view_angles, 2 ); - circle( near_circle_pos, level.zombie_vars[ "riotshield_cylinder_radius" ], ( 0, 0, 1 ), 0, 0, 100 ); - line( near_circle_pos, end_pos, ( 0, 0, 1 ), 1, 0, 100 ); - circle( end_pos, level.zombie_vars[ "riotshield_cylinder_radius" ], ( 0, 0, 1 ), 0, 0, 100 ); -#/ - } - i = 0; - while ( i < zombies.size ) - { - if ( !isDefined( zombies[ i ] ) || !isalive( zombies[ i ] ) ) - { - i++; - continue; - } - else - { - test_origin = zombies[ i ] getcentroid(); - test_range_squared = distancesquared( view_pos, test_origin ); - if ( test_range_squared > knockdown_range_squared ) - { - zombies[ i ] riotshield_debug_print( "range", ( 0, 0, 1 ) ); - return; - } - normal = vectornormalize( test_origin - view_pos ); - dot = vectordot( forward_view_angles, normal ); - if ( dot <= 0 ) - { - zombies[ i ] riotshield_debug_print( "dot", ( 0, 0, 1 ) ); - i++; - continue; - } - else radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin ); - if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared ) - { - zombies[ i ] riotshield_debug_print( "cylinder", ( 0, 0, 1 ) ); - i++; - continue; - } - else if ( zombies[ i ] damageconetrace( view_pos, self ) == 0 ) - { - zombies[ i ] riotshield_debug_print( "cone", ( 0, 0, 1 ) ); - i++; - continue; - } - else if ( test_range_squared < fling_range_squared ) - { - level.riotshield_fling_enemies[ level.riotshield_fling_enemies.size ] = zombies[ i ]; - dist_mult = ( fling_range_squared - test_range_squared ) / fling_range_squared; - fling_vec = vectornormalize( test_origin - view_pos ); - if ( test_range_squared >= 5000 ) - { - fling_vec += vectornormalize( test_origin - radial_origin ); - } - fling_vec = ( fling_vec[ 0 ], fling_vec[ 1 ], abs( fling_vec[ 2 ] ) ); - fling_vec = vectorScale( fling_vec, 100 + ( 100 * dist_mult ) ); - level.riotshield_fling_vecs[ level.riotshield_fling_vecs.size ] = fling_vec; - zombies[ i ] riotshield_debug_print( "fling", ( 0, 0, 1 ) ); - i++; - continue; - } - else - { - level.riotshield_knockdown_enemies[ level.riotshield_knockdown_enemies.size ] = zombies[ i ]; - level.riotshield_knockdown_gib[ level.riotshield_knockdown_gib.size ] = 0; - zombies[ i ] riotshield_debug_print( "knockdown", ( 0, 0, 1 ) ); - } - } - i++; - } -} - -riotshield_network_choke() -{ - level.riotshield_network_choke_count++; - if ( level.riotshield_network_choke_count % 10 ) - { - wait_network_frame(); - wait_network_frame(); - wait_network_frame(); - } -} - -riotshield_melee() -{ - if ( !isDefined( level.riotshield_knockdown_enemies ) ) - { - level.riotshield_knockdown_enemies = []; - level.riotshield_knockdown_gib = []; - level.riotshield_fling_enemies = []; - level.riotshield_fling_vecs = []; - } - self riotshield_get_enemies_in_range(); - shield_damage = 0; - level.riotshield_network_choke_count = 0; - i = 0; - while ( i < level.riotshield_fling_enemies.size ) - { - riotshield_network_choke(); - if ( isDefined( level.riotshield_fling_enemies[ i ] ) ) - { - level.riotshield_fling_enemies[ i ] thread riotshield_fling_zombie( self, level.riotshield_fling_vecs[ i ], i ); - shield_damage += level.zombie_vars[ "riotshield_fling_damage_shield" ]; - } - i++; - } - i = 0; - while ( i < level.riotshield_knockdown_enemies.size ) - { - riotshield_network_choke(); - level.riotshield_knockdown_enemies[ i ] thread riotshield_knockdown_zombie( self, level.riotshield_knockdown_gib[ i ] ); - shield_damage += level.zombie_vars[ "riotshield_knockdown_damage_shield" ]; - i++; - } - level.riotshield_knockdown_enemies = []; - level.riotshield_knockdown_gib = []; - level.riotshield_fling_enemies = []; - level.riotshield_fling_vecs = []; - if ( shield_damage ) - { - self player_damage_shield( shield_damage, 0 ); - } -} - -trackstuckzombies() -{ - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "deployed_riotshield" ); - if ( isDefined( self.riotshieldentity ) ) - { - self thread watchstuckzombies(); - } - } -} - -attack_shield( shield ) -{ - self endon( "death" ); - shield.owner endon( "death" ); - shield.owner endon( "disconnect" ); - shield.owner endon( "start_riotshield_deploy" ); - shield.owner endon( "destroy_riotshield" ); - if ( isDefined( self.doing_shield_attack ) && self.doing_shield_attack ) - { - return 0; - } - self.old_origin = self.origin; - if ( getDvar( "zombie_shield_attack_freq" ) == "" ) - { - setdvar( "zombie_shield_attack_freq", "15" ); - } - freq = getDvarInt( "zombie_shield_attack_freq" ); - self.doing_shield_attack = 1; - self.enemyoverride[ 0 ] = shield.origin; - self.enemyoverride[ 1 ] = shield; - wait ( randomint( 100 ) / 100 ); - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "attack", self.animname ); - attackanim = "zm_riotshield_melee"; - if ( !self.has_legs ) - { - attackanim += "_crawl"; - } - self orientmode( "face point", shield.origin ); - self animscripted( self.origin, flat_angle( vectorToAngle( shield.origin - self.origin ) ), attackanim ); - if ( isDefined( shield.owner.player_shield_apply_damage ) ) - { - shield.owner [[ shield.owner.player_shield_apply_damage ]]( 100, 0 ); - } - else - { - shield.owner player_damage_shield( 100, 0 ); - } - self thread attack_shield_stop( shield ); - wait ( randomint( 100 ) / 100 ); - self.doing_shield_attack = 0; - self orientmode( "face default" ); -} - -attack_shield_stop( shield ) -{ - self notify( "attack_shield_stop" ); - self endon( "attack_shield_stop" ); - self endon( "death" ); - shield waittill( "death" ); - self stopanimscripted(); - if ( isDefined( self.doing_shield_attack ) && self.doing_shield_attack ) - { - breachanim = "zm_riotshield_breakthrough"; - if ( !self.has_legs ) - { - breachanim += "_crawl"; - } - self animscripted( self.origin, flat_angle( self.angles ), breachanim ); - } -} - -window_notetracks( msg, player ) -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( msg, notetrack ); - if ( notetrack == "end" ) - { - return; - } - if ( notetrack == "fire" ) - { - player player_damage_shield( 100, 0 ); - } - } -} - -watchstuckzombies() -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "start_riotshield_deploy" ); - self endon( "destroy_riotshield" ); - self endon( "deployed_riotshield" ); - level endon( "intermission" ); - self.riotshieldentity maps/mp/zombies/_zm_equipment::item_attract_zombies(); -} - -riotshield_active() -{ - return self maps/mp/zombies/_zm_equipment::is_equipment_active( "tomb_shield_zm" ); -} - -riotshield_debug_print( msg, color ) -{ -/# - if ( !getDvarInt( #"BF480CE9" ) ) - { - return; - } - if ( !isDefined( color ) ) - { - color = ( 0, 0, 1 ); - } - print3d( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), msg, color, 1, 1, 40 ); -#/ -} - -shield_zombie_attract_func( poi ) -{ -} - -shield_zombie_arrive_func( poi ) -{ - self endon( "death" ); - self endon( "zombie_acquire_enemy" ); - self endon( "path_timer_done" ); - self waittill( "goal" ); - if ( isDefined( poi.owner ) ) - { - poi.owner player_damage_shield( 100, 0 ); - if ( isDefined( poi.owner.player_shield_apply_damage ) ) - { - poi.owner [[ poi.owner.player_shield_apply_damage ]]( 100, 0 ); - } - } -} - -createriotshieldattractor() -{ - self create_zombie_point_of_interest( 50, 8, 0, 1, ::shield_zombie_attract_func, ::shield_zombie_arrive_func ); - self thread create_zombie_point_of_interest_attractor_positions( 4, 15, 15 ); - return get_zombie_point_of_interest( self.origin ); -} - -riotshield_zombie_damage_response( mod, hit_location, hit_origin, player, amount ) -{ - if ( self is_riotshield_damage( mod, player, amount ) ) - { - self riotshield_damage( amount ); - return 1; - } - return 0; -} - -watchriotshieldattractor() -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "start_riotshield_deploy" ); - self endon( "destroy_riotshield" ); - self endon( "deployed_riotshield" ); - poi = self.riotshieldentity createriotshieldattractor(); -} - -trackriotshieldattractor() -{ - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "deployed_riotshield" ); - self thread watchriotshieldattractor(); - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_staff_air.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_staff_air.gsc deleted file mode 100644 index c88e120..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_staff_air.gsc +++ /dev/null @@ -1,640 +0,0 @@ -#include maps/mp/animscripts/shared; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - level._effect[ "whirlwind" ] = loadfx( "weapon/zmb_staff/fx_zmb_staff_air_ug_impact_miss" ); - registerclientfield( "scriptmover", "whirlwind_play_fx", 14000, 1, "int" ); - registerclientfield( "actor", "air_staff_launch", 14000, 1, "int" ); - registerclientfield( "allplayers", "air_staff_source", 14000, 1, "int" ); - onplayerconnect_callback( ::onplayerconnect ); - maps/mp/zombies/_zm_ai_basic::init_inert_zombies(); - flag_init( "whirlwind_active" ); - maps/mp/zombies/_zm_spawner::register_zombie_damage_callback( ::staff_air_zombie_damage_response ); - maps/mp/zombies/_zm_spawner::register_zombie_death_event_callback( ::staff_air_death_event ); -} - -precache() -{ - precacheitem( "staff_air_melee_zm" ); -} - -onplayerconnect() -{ - self thread onplayerspawned(); -} - -onplayerspawned() -{ - self endon( "disconnect" ); - self thread watch_staff_air_fired(); - self thread watch_staff_air_impact(); - self thread watch_staff_usage(); -} - -air_projectile_delete() -{ - self endon( "death" ); - wait 0,75; - self delete(); -} - -watch_staff_air_fired() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "missile_fire", e_projectile, str_weapon ); - if ( str_weapon == "staff_air_upgraded_zm" || str_weapon == "staff_air_zm" ) - { - e_projectile thread air_projectile_delete(); - wind_damage_cone( str_weapon ); - self setclientfield( "air_staff_source", 1 ); - wait_network_frame(); - self setclientfield( "air_staff_source", 0 ); - } - } -} - -watch_staff_air_impact() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "projectile_impact", str_weap_name, v_explode_point, n_radius, projectile ); - if ( str_weap_name == "staff_air_upgraded2_zm" || str_weap_name == "staff_air_upgraded3_zm" ) - { - self thread staff_air_find_source( v_explode_point, str_weap_name ); - } - } -} - -staff_air_find_source( v_detonate, str_weapon ) -{ - self endon( "disconnect" ); - if ( !isDefined( v_detonate ) ) - { - return; - } - a_zombies = getaiarray( level.zombie_team ); - a_zombies = get_array_of_closest( v_detonate, a_zombies ); - if ( a_zombies.size ) - { - i = 0; - while ( i < a_zombies.size ) - { - if ( isalive( a_zombies[ i ] ) ) - { - if ( is_true( a_zombies[ i ].staff_hit ) ) - { - i++; - continue; - } - else - { - if ( distance2dsquared( v_detonate, a_zombies[ i ].origin ) <= 10000 ) - { - self thread staff_air_zombie_source( a_zombies[ 0 ], str_weapon ); - } - else - { - self thread staff_air_position_source( v_detonate, str_weapon ); - } - return; - } - } - i++; - } - } - else self thread staff_air_position_source( v_detonate, str_weapon ); -} - -staff_air_zombie_source( ai_zombie, str_weapon ) -{ - self endon( "disconnect" ); - ai_zombie.staff_hit = 1; - ai_zombie.is_source = 1; - v_whirlwind_pos = ai_zombie.origin; - self thread staff_air_position_source( v_whirlwind_pos, str_weapon ); - if ( !isDefined( ai_zombie.is_mechz ) ) - { - self thread source_zombie_death( ai_zombie ); - } -} - -staff_air_position_source( v_detonate, str_weapon ) -{ - self endon( "disconnect" ); - if ( !isDefined( v_detonate ) ) - { - return; - } - if ( flag( "whirlwind_active" ) ) - { - level notify( "whirlwind_stopped" ); - while ( flag( "whirlwind_active" ) ) - { - wait_network_frame(); - } - wait 0,3; - } - flag_set( "whirlwind_active" ); - n_time = self.chargeshotlevel * 3,5; - e_whirlwind = spawn( "script_model", v_detonate + vectorScale( ( 0, 0, 0 ), 100 ) ); - e_whirlwind setmodel( "tag_origin" ); - e_whirlwind.angles = vectorScale( ( 0, 0, 0 ), 90 ); - e_whirlwind thread puzzle_debug_position( "X", vectorScale( ( 0, 0, 0 ), 255 ) ); - e_whirlwind moveto( groundpos_ignore_water_new( e_whirlwind.origin ), 0,05 ); - e_whirlwind waittill( "movedone" ); - e_whirlwind setclientfield( "whirlwind_play_fx", 1 ); - e_whirlwind thread whirlwind_rumble_nearby_players( "whirlwind_active" ); - e_whirlwind thread whirlwind_timeout( n_time ); - wait 0,5; - e_whirlwind.player_owner = self; - e_whirlwind thread whirlwind_seek_zombies( self.chargeshotlevel, str_weapon ); -} - -whirlwind_seek_zombies( n_level, str_weapon ) -{ - self endon( "death" ); - self.b_found_zombies = 0; - n_range = get_air_blast_range( n_level ); - while ( 1 ) - { - a_zombies = staff_air_zombie_range( self.origin, n_range ); - if ( a_zombies.size ) - { - self.b_found_zombies = 1; - self thread whirlwind_kill_zombies( n_level, str_weapon ); - return; - } - else - { - wait 0,1; - } - } -} - -whirlwind_timeout( n_time ) -{ - self endon( "death" ); - level waittill_any_or_timeout( n_time, "whirlwind_stopped" ); - level notify( "whirlwind_stopped" ); - self setclientfield( "whirlwind_play_fx", 0 ); - self notify( "stop_debug_position" ); - flag_clear( "whirlwind_active" ); - wait 1,5; - self delete(); -} - -move_along_ground_position( v_position, n_time ) -{ - v_diff = vectornormalize( v_position - self.origin ); - v_newpos = self.origin + ( v_diff * 50 ) + vectorScale( ( 0, 0, 0 ), 50 ); - v_ground = groundpos_ignore_water_new( v_newpos ); - self moveto( v_ground, n_time ); -} - -whirlwind_kill_zombies( n_level, str_weapon ) -{ - self endon( "death" ); - n_range = get_air_blast_range( n_level ); - self.n_charge_level = n_level; - while ( 1 ) - { - a_zombies = staff_air_zombie_range( self.origin, n_range ); - a_zombies = get_array_of_closest( self.origin, a_zombies ); - i = 0; - while ( i < a_zombies.size ) - { - if ( !isDefined( a_zombies[ i ] ) ) - { - i++; - continue; - } - else if ( a_zombies[ i ].ai_state != "find_flesh" ) - { - i++; - continue; - } - else if ( is_true( a_zombies[ i ].is_mechz ) ) - { - i++; - continue; - } - else if ( is_true( self._whirlwind_attract_anim ) ) - { - i++; - continue; - } - else v_offset = ( 10, 10, 32 ); - if ( !bullet_trace_throttled( self.origin + v_offset, a_zombies[ i ].origin + v_offset, undefined ) ) - { - i++; - continue; - } - else if ( !isDefined( a_zombies[ i ] ) || !isalive( a_zombies[ i ] ) ) - { - i++; - continue; - } - else - { - v_offset = ( -10, -10, 64 ); - if ( !bullet_trace_throttled( self.origin + v_offset, a_zombies[ i ].origin + v_offset, undefined ) ) - { - i++; - continue; - } - else if ( !isDefined( a_zombies[ i ] ) || !isalive( a_zombies[ i ] ) ) - { - i++; - continue; - } - else - { - a_zombies[ i ] thread whirlwind_drag_zombie( self, str_weapon ); - wait 0,5; - } - } - i++; - } - wait_network_frame(); - } -} - -whirlwind_drag_zombie( e_whirlwind, str_weapon ) -{ - if ( isDefined( self.e_linker ) ) - { - return; - } - self whirlwind_move_zombie( e_whirlwind ); - if ( isDefined( self ) && isDefined( e_whirlwind ) && flag( "whirlwind_active" ) ) - { - player = e_whirlwind.player_owner; - self do_damage_network_safe( player, self.health, str_weapon, "MOD_IMPACT" ); - level thread staff_air_gib( self ); - } -} - -whirlwind_move_zombie( e_whirlwind ) -{ - if ( isDefined( self.e_linker ) ) - { - return; - } - self.e_linker = spawn( "script_origin", ( 0, 0, 0 ) ); - self.e_linker.origin = self.origin; - self.e_linker.angles = self.angles; - self linkto( self.e_linker ); - self thread whirlwind_unlink( e_whirlwind ); - if ( isDefined( e_whirlwind ) ) - { - n_dist_sq = distance2dsquared( e_whirlwind.origin, self.origin ); - } - n_fling_range_sq = 900; - while ( isalive( self ) && n_dist_sq > n_fling_range_sq && isDefined( e_whirlwind ) && flag( "whirlwind_active" ) ) - { - n_dist_sq = distance2dsquared( e_whirlwind.origin, self.origin ); - if ( isDefined( self.ai_state ) && self.ai_state == "find_flesh" ) - { - b_supercharged = e_whirlwind.n_charge_level == 3; - self thread whirlwind_attract_anim( e_whirlwind.origin, b_supercharged ); - n_movetime = 1; - if ( b_supercharged ) - { - n_movetime = 0,8; - } - self.e_linker thread move_along_ground_position( e_whirlwind.origin, n_movetime ); - } - else - { - } - wait 0,05; - } - self notify( "reached_whirlwind" ); - self.e_linker delete(); -} - -whirlwind_unlink( e_whirlwind ) -{ - self endon( "death" ); - e_whirlwind waittill( "death" ); - self unlink(); -} - -source_zombie_death( ai_zombie ) -{ - self endon( "disconnect" ); - n_range = get_air_blast_range( self.chargeshotlevel ); - tag = "J_SpineUpper"; - if ( ai_zombie.isdog ) - { - tag = "J_Spine1"; - } - v_source = ai_zombie gettagorigin( tag ); - ai_zombie thread staff_air_fling_zombie( self ); - a_zombies = staff_air_zombie_range( v_source, n_range ); - if ( !isDefined( a_zombies ) ) - { - return; - } - self thread staff_air_proximity_kill( a_zombies ); -} - -get_air_blast_range( n_charge ) -{ - switch( n_charge ) - { - case 1: - n_range = 100; - break; - default: - n_range = 250; - break; - } - return n_range; -} - -staff_air_proximity_kill( a_zombies ) -{ - self endon( "disconnect" ); - if ( !isDefined( a_zombies ) ) - { - return; - } - i = 0; - while ( i < a_zombies.size ) - { - if ( isalive( a_zombies[ i ] ) ) - { - a_zombies[ i ] thread staff_air_fling_zombie( self ); - wait 0,05; - } - i++; - } -} - -staff_air_zombie_range( v_source, n_range ) -{ - a_enemies = []; - a_zombies = getaiarray( level.zombie_team ); - a_zombies = get_array_of_closest( v_source, a_zombies ); - n_range_sq = n_range * n_range; - while ( isDefined( a_zombies ) ) - { - i = 0; - while ( i < a_zombies.size ) - { - if ( !isDefined( a_zombies[ i ] ) ) - { - i++; - continue; - } - else v_zombie_pos = a_zombies[ i ].origin; - if ( isDefined( a_zombies[ i ].staff_hit ) && a_zombies[ i ].staff_hit == 1 ) - { - i++; - continue; - } - else - { - if ( distancesquared( v_source, v_zombie_pos ) > n_range_sq ) - { - i++; - continue; - } - else - { - a_enemies[ a_enemies.size ] = a_zombies[ i ]; - } - } - i++; - } - } - return a_enemies; -} - -staff_air_fling_zombie( player ) -{ - player endon( "disconnect" ); - if ( !isalive( self ) ) - { - return; - } - if ( isDefined( self.is_source ) || cointoss() ) - { - self thread zombie_launch( player, "staff_air_upgraded_zm" ); - } - else - { - self do_damage_network_safe( player, self.health, "staff_air_upgraded_zm", "MOD_IMPACT" ); - level thread staff_air_gib( self ); - } -} - -zombie_launch( e_attacker, str_weapon ) -{ - self do_damage_network_safe( e_attacker, self.health, str_weapon, "MOD_IMPACT" ); - if ( isDefined( level.ragdoll_limit_check ) && !( [[ level.ragdoll_limit_check ]]() ) ) - { - level thread staff_air_gib( self ); - } - else - { - self startragdoll(); - self setclientfield( "air_staff_launch", 1 ); - } -} - -determine_launch_vector( e_attacker, ai_target ) -{ - v_launch = ( vectornormalize( ai_target.origin - e_attacker.origin ) * randomintrange( 125, 150 ) ) + ( 0, 0, randomintrange( 75, 150 ) ); - return v_launch; -} - -staff_air_gib( ai_zombie ) -{ - if ( cointoss() ) - { - ai_zombie thread zombie_gib_all(); - } - ai_zombie thread zombie_gib_guts(); -} - -staff_air_zombie_damage_response( mod, hit_location, hit_origin, player, amount ) -{ - if ( self is_staff_air_damage() && mod != "MOD_MELEE" ) - { - self thread stun_zombie(); - return 1; - } - return 0; -} - -is_staff_air_damage() -{ - if ( isDefined( self.damageweapon ) && self.damageweapon != "staff_air_zm" && self.damageweapon == "staff_air_upgraded_zm" ) - { - return !is_true( self.set_beacon_damage ); - } -} - -staff_air_death_event() -{ - if ( is_staff_air_damage() && self.damagemod != "MOD_MELEE" ) - { - if ( is_true( self.is_mechz ) ) - { - return; - } - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "death", self.animname ); - self thread zombie_eye_glow_stop(); - if ( isDefined( level.ragdoll_limit_check ) && !( [[ level.ragdoll_limit_check ]]() ) ) - { - level thread staff_air_gib( self ); - return; - } - else - { - self startragdoll(); - self setclientfield( "air_staff_launch", 1 ); - } - } -} - -wind_damage_cone( str_weapon ) -{ - fire_angles = self getplayerangles(); - fire_origin = self getplayercamerapos(); - a_targets = getaiarray( "axis" ); - a_targets = get_array_of_closest( self.origin, a_targets, undefined, 12, 400 ); - if ( str_weapon == "staff_air_upgraded_zm" ) - { - n_damage = 3300; - n_fov = 60; - } - else - { - n_damage = 2050; - n_fov = 45; - } - _a675 = a_targets; - _k675 = getFirstArrayKey( _a675 ); - while ( isDefined( _k675 ) ) - { - target = _a675[ _k675 ]; - if ( isai( target ) ) - { - if ( within_fov( fire_origin, fire_angles, target gettagorigin( "j_spine4" ), cos( n_fov ) ) ) - { - if ( self maps/mp/zombies/_zm_powerups::is_insta_kill_active() ) - { - n_damage = target.health; - } - target do_damage_network_safe( self, n_damage, str_weapon, "MOD_IMPACT" ); - } - } - _k675 = getNextArrayKey( _a675, _k675 ); - } -} - -stun_zombie() -{ - self endon( "death" ); - if ( is_true( self.is_mechz ) ) - { - return; - } - if ( is_true( self.is_electrocuted ) ) - { - return; - } - if ( !isDefined( self.ai_state ) || self.ai_state != "find_flesh" ) - { - return; - } - self.forcemovementscriptstate = 1; - self.ignoreall = 1; - self.is_electrocuted = 1; - tag = "J_SpineUpper"; - if ( self.isdog ) - { - tag = "J_Spine1"; - } - self animscripted( self.origin, self.angles, "zm_electric_stun" ); - self maps/mp/animscripts/shared::donotetracks( "stunned" ); - self.forcemovementscriptstate = 0; - self.ignoreall = 0; - self.is_electrocuted = 0; -} - -whirlwind_attract_anim_watch_cancel() -{ - self endon( "death" ); - while ( flag( "whirlwind_active" ) ) - { - wait_network_frame(); - } - self.deathanim = undefined; - self stopanimscripted(); - self._whirlwind_attract_anim = 0; -} - -whirlwind_attract_anim( v_attract_point, b_move_fast ) -{ - if ( !isDefined( b_move_fast ) ) - { - b_move_fast = 0; - } - self endon( "death" ); - level endon( "whirlwind_stopped" ); - if ( is_true( self._whirlwind_attract_anim ) ) - { - return; - } - v_angles_to_source = vectorToAngle( v_attract_point - self.origin ); - v_source_to_target = vectorToAngle( self.origin - v_attract_point ); - self.a.runblendtime = 0,9; - if ( self.has_legs ) - { - self.needs_run_update = 1; - self._had_legs = 1; - if ( b_move_fast ) - { - self animscripted( self.origin, v_source_to_target, "zm_move_whirlwind_fast" ); - } - else - { - self animscripted( self.origin, v_source_to_target, "zm_move_whirlwind" ); - } - } - else self.needs_run_update = 1; - self._had_legs = 0; - if ( b_move_fast ) - { - self animscripted( self.origin, v_source_to_target, "zm_move_whirlwind_crawl" ); - } - else - { - self animscripted( self.origin, v_source_to_target, "zm_move_whirlwind_fast_crawl" ); - } - if ( is_true( self.nogravity ) ) - { - self animmode( "none" ); - self.nogravity = undefined; - } - self._whirlwind_attract_anim = 1; - self.a.runblendtime = self._normal_run_blend_time; - self thread whirlwind_attract_anim_watch_cancel(); - self waittill( "reached_whirlwind" ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_staff_fire.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_staff_fire.gsc deleted file mode 100644 index a01403f..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_staff_fire.gsc +++ /dev/null @@ -1,452 +0,0 @@ -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - registerclientfield( "actor", "fire_char_fx", 14000, 1, "int" ); - registerclientfield( "toplayer", "fire_muzzle_fx", 14000, 1, "int" ); - onplayerconnect_callback( ::onplayerconnect ); - maps/mp/zombies/_zm_ai_basic::init_inert_zombies(); - maps/mp/zombies/_zm_spawner::register_zombie_damage_callback( ::staff_fire_zombie_damage_response ); - maps/mp/zombies/_zm_spawner::register_zombie_death_event_callback( ::staff_fire_death_event ); -} - -precache() -{ - precacheitem( "staff_fire_melee_zm" ); -} - -onplayerconnect() -{ - self thread onplayerspawned(); -} - -onplayerspawned() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "spawned_player" ); - self thread watch_staff_fire_upgrade_fired(); - self thread watch_staff_fire_fired(); - self thread watch_staff_usage(); - } -} - -watch_staff_fire_fired() -{ - self notify( "watch_staff_fired" ); - self endon( "disconnect" ); - self endon( "watch_staff_fired" ); - while ( 1 ) - { - self waittill( "missile_fire", e_projectile, str_weapon ); - while ( is_true( e_projectile.additional_shot ) ) - { - continue; - } - if ( str_weapon == "staff_fire_zm" || str_weapon == "staff_fire_upgraded_zm" ) - { - self fire_spread_shots( str_weapon ); - } - } -} - -watch_staff_fire_upgrade_fired() -{ - self notify( "watch_staff_upgrade_fired" ); - self endon( "disconnect" ); - self endon( "watch_staff_upgrade_fired" ); - while ( 1 ) - { - self waittill( "grenade_fire", e_projectile, str_weapon ); - while ( is_true( e_projectile.additional_shot ) ) - { - continue; - } - if ( str_weapon == "staff_fire_upgraded2_zm" || str_weapon == "staff_fire_upgraded3_zm" ) - { - e_projectile thread fire_staff_update_grenade_fuse(); - e_projectile thread fire_staff_area_of_effect( self, str_weapon ); - self fire_additional_shots( str_weapon ); - } - } -} - -fire_spread_shots( str_weapon ) -{ - wait_network_frame(); - wait_network_frame(); - v_fwd = self getweaponforwarddir(); - fire_angles = vectorToAngle( v_fwd ); - fire_origin = self getweaponmuzzlepoint(); - trace = bullettrace( fire_origin, fire_origin + ( v_fwd * 100 ), 0, undefined ); - if ( trace[ "fraction" ] != 1 ) - { - return; - } - v_left_angles = ( fire_angles[ 0 ], fire_angles[ 1 ] - 15, fire_angles[ 2 ] ); - v_left = anglesToForward( v_left_angles ); - e_proj = magicbullet( str_weapon, fire_origin + ( v_fwd * 50 ), fire_origin + ( v_left * 100 ), self ); - e_proj.additional_shot = 1; - wait_network_frame(); - wait_network_frame(); - v_fwd = self getweaponforwarddir(); - fire_angles = vectorToAngle( v_fwd ); - fire_origin = self getweaponmuzzlepoint(); - v_right_angles = ( fire_angles[ 0 ], fire_angles[ 1 ] + 15, fire_angles[ 2 ] ); - v_right = anglesToForward( v_right_angles ); - e_proj = magicbullet( str_weapon, fire_origin + ( v_fwd * 50 ), fire_origin + ( v_right * 100 ), self ); - e_proj.additional_shot = 1; -} - -fire_staff_area_of_effect( e_attacker, str_weapon ) -{ - self waittill( "explode", v_pos ); - ent = spawn( "script_origin", v_pos ); - ent playloopsound( "wpn_firestaff_grenade_loop", 1 ); -/# - level thread puzzle_debug_position( "X", vectorScale( ( 0, 0, 0 ), 255 ), v_pos, undefined, 5 ); -#/ - n_alive_time = 5; - aoe_radius = 80; - if ( str_weapon == "staff_fire_upgraded3_zm" ) - { - aoe_radius = 100; - } - n_step_size = 0,2; - while ( n_alive_time > 0 ) - { - if ( ( n_alive_time - n_step_size ) <= 0 ) - { - aoe_radius *= 2; - } - a_targets = getaiarray( "axis" ); - a_targets = get_array_of_closest( v_pos, a_targets, undefined, undefined, aoe_radius ); - wait n_step_size; - n_alive_time -= n_step_size; - _a213 = a_targets; - _k213 = getFirstArrayKey( _a213 ); - while ( isDefined( _k213 ) ) - { - e_target = _a213[ _k213 ]; - if ( isDefined( e_target ) && isalive( e_target ) ) - { - if ( !is_true( self.is_on_fire ) ) - { - e_target thread flame_damage_fx( str_weapon, e_attacker ); - } - } - _k213 = getNextArrayKey( _a213, _k213 ); - } - } - ent playsound( "wpn_firestaff_proj_impact" ); - ent delete(); -} - -grenade_waittill_still_or_bounce() -{ - self endon( "death" ); - self endon( "grenade_bounce" ); - wait 0,5; - prev_origin = self.origin; - wait_network_frame(); - wait_network_frame(); -} - -fire_staff_update_grenade_fuse() -{ - self endon( "death" ); - self grenade_waittill_still_or_bounce(); - self notify( "fire_aoe_start" ); - self resetmissiledetonationtime( 0 ); -} - -fire_additional_shots( str_weapon ) -{ - self endon( "disconnect" ); - self endon( "weapon_change" ); - n_shots = 1; - if ( str_weapon == "staff_fire_upgraded3_zm" ) - { - n_shots = 2; - } - i = 1; - while ( i <= n_shots ) - { - wait 0,35; - if ( isDefined( self ) && self getcurrentweapon() == "staff_fire_upgraded_zm" ) - { - v_player_angles = vectorToAngle( self getweaponforwarddir() ); - n_player_pitch = v_player_angles[ 0 ]; - n_player_pitch += 5 * i; - n_player_yaw = v_player_angles[ 1 ] + randomfloatrange( -15, 15 ); - v_shot_angles = ( n_player_pitch, n_player_yaw, v_player_angles[ 2 ] ); - v_shot_start = self getweaponmuzzlepoint(); - v_shot_end = v_shot_start + anglesToForward( v_shot_angles ); - e_proj = magicbullet( str_weapon, v_shot_start, v_shot_end, self ); - e_proj.additional_shot = 1; - e_proj thread fire_staff_update_grenade_fuse(); - e_proj thread fire_staff_area_of_effect( self, str_weapon ); - self setclientfieldtoplayer( "fire_muzzle_fx", 1 ); - wait_network_frame(); - self setclientfieldtoplayer( "fire_muzzle_fx", 0 ); - } - i++; - } -} - -staff_fire_zombie_damage_response( mod, hit_location, hit_origin, player, amount ) -{ - if ( self is_staff_fire_damage() && mod != "MOD_MELEE" ) - { - self thread staff_fire_zombie_hit_response_internal( mod, self.damageweapon, player, amount ); - return 1; - } - return 0; -} - -is_staff_fire_damage() -{ - if ( isDefined( self.damageweapon ) && self.damageweapon != "staff_fire_zm" && self.damageweapon != "staff_fire_upgraded_zm" && self.damageweapon != "staff_fire_upgraded2_zm" && self.damageweapon == "staff_fire_upgraded3_zm" ) - { - return !is_true( self.set_beacon_damage ); - } -} - -staff_fire_zombie_hit_response_internal( mod, damageweapon, player, amount ) -{ - player endon( "disconnect" ); - if ( !isalive( self ) ) - { - return; - } - if ( mod != "MOD_BURNED" && mod != "MOD_GRENADE_SPLASH" ) - { - pct_from_center = ( amount - 1 ) / 10; - pct_damage = 0,5 + ( 0,5 * pct_from_center ); - if ( is_true( self.is_mechz ) ) - { - self thread mechz_flame_damage( damageweapon, player, pct_damage ); - return; - } - self thread flame_damage_fx( damageweapon, player, pct_damage ); - } -} - -staff_fire_death_event() -{ - if ( is_staff_fire_damage() && self.damagemod != "MOD_MELEE" ) - { - self setclientfield( "fire_char_fx", 1 ); - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "death", self.animname ); - self thread zombie_eye_glow_stop(); - } -} - -on_fire_timeout( n_duration ) -{ - self endon( "death" ); - wait n_duration; - self.is_on_fire = 0; - self notify( "stop_flame_damage" ); -} - -flame_damage_fx( damageweapon, e_attacker, pct_damage ) -{ - if ( !isDefined( pct_damage ) ) - { - pct_damage = 1; - } - was_on_fire = is_true( self.is_on_fire ); - n_initial_dmg = get_impact_damage( damageweapon ) * pct_damage; - if ( damageweapon != "staff_fire_upgraded_zm" && damageweapon != "staff_fire_upgraded2_zm" ) - { - is_upgraded = damageweapon == "staff_fire_upgraded3_zm"; - } - if ( is_upgraded && pct_damage > 0,5 && n_initial_dmg > self.health && cointoss() ) - { - self do_damage_network_safe( e_attacker, self.health, damageweapon, "MOD_BURNED" ); - if ( cointoss() ) - { - self thread zombie_gib_all(); - } - else - { - self thread zombie_gib_guts(); - } - return; - } - self endon( "death" ); - if ( !was_on_fire ) - { - self.is_on_fire = 1; - self thread zombie_set_and_restore_flame_state(); - wait 0,5; - self thread flame_damage_over_time( e_attacker, damageweapon, pct_damage ); - } - if ( n_initial_dmg > 0 ) - { - self do_damage_network_safe( e_attacker, n_initial_dmg, damageweapon, "MOD_BURNED" ); - } -} - -_fire_stun_zombie_internal( do_stun, run_cycle ) -{ - if ( !isalive( self ) ) - { - return; - } - if ( is_true( self.has_legs ) ) - { - self set_zombie_run_cycle( run_cycle ); - } - if ( do_stun ) - { - self animscripted( self.origin, self.angles, "zm_afterlife_stun" ); - } -} - -fire_stun_zombie_choked( do_stun, run_cycle ) -{ - maps/mp/zombies/_zm_net::network_safe_init( "fire_stun", 2 ); - self maps/mp/zombies/_zm_net::network_choke_action( "fire_stun", ::_fire_stun_zombie_internal, do_stun, run_cycle ); -} - -zombie_set_and_restore_flame_state() -{ - if ( !isalive( self ) ) - { - return; - } - if ( is_true( self.is_mechz ) ) - { - return; - } - self setclientfield( "fire_char_fx", 1 ); - self.disablemelee = 1; - prev_run_cycle = self.zombie_move_speed; - if ( is_true( self.has_legs ) ) - { - self.deathanim = "zm_death_fire"; - } - if ( self.ai_state == "find_flesh" ) - { - self fire_stun_zombie_choked( 1, "burned" ); - } - self waittill( "stop_flame_damage" ); - self.deathanim = undefined; - self.disablemelee = undefined; - if ( self.ai_state == "find_flesh" ) - { - self fire_stun_zombie_choked( 0, prev_run_cycle ); - } - self setclientfield( "fire_char_fx", 0 ); -} - -get_impact_damage( damageweapon ) -{ - switch( damageweapon ) - { - case "staff_fire_zm": - return 2050; - case "staff_fire_upgraded_zm": - return 3300; - case "staff_fire_upgraded2_zm": - return 11500; - case "staff_fire_upgraded3_zm": - return 20000; - case "one_inch_punch_fire_zm": - return 0; - default: - return 0; - } -} - -get_damage_per_second( damageweapon ) -{ - switch( damageweapon ) - { - case "staff_fire_zm": - return 75; - case "staff_fire_upgraded_zm": - return 150; - case "staff_fire_upgraded2_zm": - return 300; - case "staff_fire_upgraded3_zm": - return 450; - case "one_inch_punch_fire_zm": - return 250; - default: - return self.health; - } -} - -get_damage_duration( damageweapon ) -{ - switch( damageweapon ) - { - case "staff_fire_zm": - return 8; - case "staff_fire_upgraded_zm": - return 8; - case "staff_fire_upgraded2_zm": - return 8; - case "staff_fire_upgraded3_zm": - return 8; - case "one_inch_punch_fire_zm": - return 8; - default: - return 8; - } -} - -flame_damage_over_time( e_attacker, damageweapon, pct_damage ) -{ - e_attacker endon( "disconnect" ); - self endon( "death" ); - self endon( "stop_flame_damage" ); - n_damage = get_damage_per_second( damageweapon ); - n_duration = get_damage_duration( damageweapon ); - n_damage *= pct_damage; - self thread on_fire_timeout( n_duration ); - while ( 1 ) - { - if ( isDefined( e_attacker ) && isplayer( e_attacker ) ) - { - if ( e_attacker maps/mp/zombies/_zm_powerups::is_insta_kill_active() ) - { - n_damage = self.health; - } - } - self do_damage_network_safe( e_attacker, n_damage, damageweapon, "MOD_BURNED" ); - wait 1; - } -} - -mechz_flame_damage( damageweapon, e_attacker, pct_damage ) -{ - self endon( "death" ); - n_initial_dmg = get_impact_damage( damageweapon ); - if ( n_initial_dmg > 0 ) - { - self do_damage_network_safe( e_attacker, n_initial_dmg, damageweapon, "MOD_BURNED" ); - } -} - -stop_zombie() -{ - e_linker = spawn( "script_origin", ( 0, 0, 0 ) ); - e_linker.origin = self.origin; - e_linker.angles = self.angles; - self linkto( e_linker ); - self waittill( "death" ); - e_linker delete(); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_staff_lightning.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_staff_lightning.gsc deleted file mode 100644 index 3211423..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_staff_lightning.gsc +++ /dev/null @@ -1,437 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/animscripts/shared; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - level._effect[ "lightning_miss" ] = loadfx( "weapon/zmb_staff/fx_zmb_staff_elec_ug_impact_miss" ); - level._effect[ "lightning_arc" ] = loadfx( "weapon/zmb_staff/fx_zmb_staff_elec_trail_bolt_cheap" ); - level._effect[ "lightning_impact" ] = loadfx( "weapon/zmb_staff/fx_zmb_staff_elec_ug_impact_hit_torso" ); - level._effect[ "tesla_shock_eyes" ] = loadfx( "maps/zombie/fx_zombie_tesla_shock_eyes" ); - registerclientfield( "actor", "lightning_impact_fx", 14000, 1, "int" ); - registerclientfield( "scriptmover", "lightning_miss_fx", 14000, 1, "int" ); - registerclientfield( "actor", "lightning_arc_fx", 14000, 1, "int" ); - set_zombie_var( "tesla_head_gib_chance", 50 ); - onplayerconnect_callback( ::onplayerconnect ); - maps/mp/zombies/_zm_spawner::register_zombie_damage_callback( ::staff_lightning_zombie_damage_response ); - maps/mp/zombies/_zm_spawner::register_zombie_death_event_callback( ::staff_lightning_death_event ); -} - -precache() //checked matches cerberus output -{ - precacheitem( "staff_lightning_melee_zm" ); -} - -onplayerconnect() //checked matches cerberus output -{ - self thread onplayerspawned(); -} - -onplayerspawned() //checked matches cerberus output -{ - self endon( "disconnect" ); - self thread watch_staff_lightning_fired(); - self thread watch_staff_usage(); -} - -watch_staff_lightning_fired() //checked matches cerberus output -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "missile_fire", e_projectile, str_weapon ); - if ( str_weapon == "staff_lightning_upgraded2_zm" || str_weapon == "staff_lightning_upgraded3_zm" ) - { - fire_angles = vectorToAngle( self getweaponforwarddir() ); - fire_origin = self getweaponmuzzlepoint(); - self thread staff_lightning_position_source( fire_origin, fire_angles, str_weapon ); - } - } -} - -lightning_ball_wait( n_lifetime_after_move ) //checked matches cerberus output -{ - level endon( "lightning_ball_created" ); - self waittill( "movedone" ); - wait n_lifetime_after_move; - return 1; -} - -staff_lightning_position_source( v_detonate, v_angles, str_weapon ) //checked matches cerberus output -{ - self endon( "disconnect" ); - level notify( "lightning_ball_created" ); - if ( !isDefined( v_angles ) ) - { - v_angles = ( 0, 0, 1 ); - } - e_ball_fx = spawn( "script_model", v_detonate + ( anglesToForward( v_angles ) * 100 ) ); - e_ball_fx.angles = v_angles; - e_ball_fx.str_weapon = str_weapon; - e_ball_fx setmodel( "tag_origin" ); - e_ball_fx.n_range = get_lightning_blast_range( self.chargeshotlevel ); - e_ball_fx.n_damage_per_sec = get_lightning_ball_damage_per_sec( self.chargeshotlevel ); - e_ball_fx setclientfield( "lightning_miss_fx", 1 ); - n_shot_range = staff_lightning_get_shot_range( self.chargeshotlevel ); - v_end = v_detonate + ( anglesToForward( v_angles ) * n_shot_range ); - trace = bullettrace( v_detonate, v_end, 0, undefined ); - if ( trace[ "fraction" ] != 1 ) - { - v_end = trace[ "position" ]; - } - staff_lightning_ball_speed = n_shot_range / 8; - n_dist = distance( e_ball_fx.origin, v_end ); - n_max_movetime_s = n_shot_range / staff_lightning_ball_speed; - n_movetime_s = n_dist / staff_lightning_ball_speed; - n_leftover_time = n_max_movetime_s - n_movetime_s; - e_ball_fx thread staff_lightning_ball_kill_zombies( self ); - /* -/# - e_ball_fx thread puzzle_debug_position( "X", ( 175, 0, 255 ) ); -#/ - */ - e_ball_fx moveto( v_end, n_movetime_s ); - finished_playing = e_ball_fx lightning_ball_wait( n_leftover_time ); - e_ball_fx notify( "stop_killing" ); - e_ball_fx notify( "stop_debug_position" ); - if ( is_true( finished_playing ) ) - { - wait 3; - } - if ( isDefined( e_ball_fx ) ) - { - e_ball_fx delete(); - } -} - -staff_lightning_ball_kill_zombies( e_attacker ) //checked changed to match cerberus output -{ - self endon( "death" ); - self endon( "stop_killing" ); - while ( 1 ) - { - a_zombies = staff_lightning_get_valid_targets( e_attacker, self.origin ); - if ( isDefined( a_zombies ) ) - { - foreach ( zombie in a_zombies ) - { - if ( staff_lightning_is_target_valid( zombie ) ) - { - e_attacker thread staff_lightning_arc_fx( self, zombie ); - wait 0.2; - } - } - } - wait 0.5; - } -} - -staff_lightning_get_valid_targets( player, v_source ) //checked changed to match cerberus output -{ - player endon( "disconnect" ); - a_enemies = []; - a_zombies = getaiarray( level.zombie_team ); - a_zombies = get_array_of_closest( v_source, a_zombies, undefined, undefined, self.n_range ); - if ( isDefined( a_zombies ) ) - { - foreach ( ai_zombie in a_zombies ) - { - if ( staff_lightning_is_target_valid( ai_zombie ) ) - { - a_enemies[ a_enemies.size ] = ai_zombie; - } - } - } - return a_enemies; -} - -staff_lightning_get_shot_range( n_charge ) //checked matches cerberus output -{ - switch ( n_charge ) - { - case 3: - return 1200; - default: - return 800; - } -} - -get_lightning_blast_range( n_charge ) //checked matches cerberus output -{ - switch( n_charge ) - { - case 1: - n_range = 200; - break; - case 2: - n_range = 150; - break; - case 3: - default: - n_range = 250; - break; - } - return n_range; -} - -get_lightning_ball_damage_per_sec( n_charge ) //checked matches cerberus output -{ - if ( !isDefined( n_charge ) ) - { - return 2500; - } - switch ( n_charge ) - { - case 3: - return 3500; - default: - return 2500; - } -} - -staff_lightning_is_target_valid( ai_zombie ) //checked matches cerberus output -{ - if ( !isDefined( ai_zombie ) ) - { - return 0; - } - if ( is_true( ai_zombie.is_being_zapped ) ) - { - return 0; - } - if ( is_true( ai_zombie.is_mechz ) ) - { - return 0; - } - return 1; -} - -staff_lightning_ball_damage_over_time( e_source, e_target, e_attacker ) //checked changed at own discretion -{ - e_attacker endon( "disconnect" ); - e_target setclientfield( "lightning_impact_fx", 1 ); - e_target thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "electrocute", e_target.animname ); - n_range_sq = e_source.n_range * e_source.n_range; - e_target.is_being_zapped = 1; - e_target setclientfield( "lightning_arc_fx", 1 ); - wait 0.5; - if ( isDefined( e_source ) ) - { - if ( !isDefined( e_source.n_damage_per_sec ) ) - { - e_source.n_damage_per_sec = get_lightning_ball_damage_per_sec( e_attacker.chargeshotlevel ); - } - n_damage_per_pulse = e_source.n_damage_per_sec * 1; - } - while ( isDefined( e_source ) && isalive( e_target ) ) - { - e_target thread stun_zombie(); - wait 1; - if ( !isDefined( e_source ) || !isalive( e_target ) ) - { - continue; - } - n_dist_sq = distancesquared( e_source.origin, e_target.origin ); - if ( n_dist_sq > n_range_sq ) - { - continue; - } - if ( isalive( e_target ) && isDefined( e_source ) ) - { - instakill_on = e_attacker maps/mp/zombies/_zm_powerups::is_insta_kill_active(); - if ( n_damage_per_pulse < e_target.health && !instakill_on ) - { - e_target do_damage_network_safe( e_attacker, n_damage_per_pulse, e_source.str_weapon, "MOD_RIFLE_BULLET" ); - } - else - { - e_target thread zombie_shock_eyes(); - e_target thread staff_lightning_kill_zombie( e_attacker, e_source.str_weapon ); - } - } - } - if ( isDefined( e_target ) ) - { - e_target.is_being_zapped = 0; - e_target setclientfield( "lightning_arc_fx", 0 ); - } -} - -staff_lightning_arc_fx( e_source, ai_zombie ) //checked matches cerberus output -{ - self endon( "disconnect" ); - if ( !isDefined( ai_zombie ) ) - { - return; - } - if ( !bullet_trace_throttled( e_source.origin, ai_zombie.origin + vectorScale( ( 0, 0, 1 ), 20 ), ai_zombie ) ) - { - return; - } - if ( isDefined( e_source ) && isDefined( ai_zombie ) && isalive( ai_zombie ) ) - { - level thread staff_lightning_ball_damage_over_time( e_source, ai_zombie, self ); - } -} - -staff_lightning_kill_zombie( player, str_weapon ) //checked didn't change to match cerberus output -{ - player endon( "disconnect" ); - if ( !isalive( self ) ) - { - return; - } - if ( is_true( self.has_legs ) ) - { - if ( !self hasanimstatefromasd( "zm_death_tesla" ) ) - { - return; - } - self.deathanim = "zm_death_tesla"; - } - else - { - if ( !self hasanimstatefromasd( "zm_death_tesla_crawl" ) ) - { - return; - } - self.deathanim = "zm_death_tesla_crawl"; - } - if ( is_true( self.is_traversing ) ) - { - self.deathanim = undefined; - } - self do_damage_network_safe( player, self.health, str_weapon, "MOD_RIFLE_BULLET" ); - player maps/mp/zombies/_zm_score::player_add_points( "death", "", "" ); -} - -staff_lightning_death_fx() //checked matches cerberus output -{ - if ( isDefined( self ) ) - { - self setclientfield( "lightning_impact_fx", 1 ); - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "electrocute", self.animname ); - self thread zombie_shock_eyes(); - } -} - -zombie_shock_eyes_network_safe( fx, entity, tag ) //checked matches cerberus output -{ - if ( network_entity_valid( entity ) ) - { - if ( !is_true( self.head_gibbed ) ) - { - playfxontag( fx, entity, tag ); - } - } -} - -zombie_shock_eyes() //checked changed at own discretion -{ - if ( is_true( self.head_gibbed ) ) - { - return; - } - maps/mp/zombies/_zm_net::network_safe_init( "shock_eyes", 2 ); - maps/mp/zombies/_zm_net::network_choke_action( "shock_eyes", ::zombie_shock_eyes_network_safe, level._effect[ "tesla_shock_eyes" ], self, "J_Eyeball_LE" ); -} - -staff_lightning_zombie_damage_response( mod, hit_location, hit_origin, player, amount ) //checked matches cerberus output -{ - if ( self is_staff_lightning_damage() && self.damagemod != "MOD_RIFLE_BULLET" ) - { - self thread stun_zombie(); - } - return 0; -} - -is_staff_lightning_damage() //checked partially changed to match cerberus output see info.md -{ - if ( isDefined( self.damageweapon ) && self.damageweapon == "staff_lightning_zm" && !is_true( self.set_beacon_damage ) || isDefined( self.damageweapon ) && self.damageweapon == "staff_lightning_upgraded_zm" && !is_true( self.set_beacon_damage ) ) - { - return 1; - } - return 0; -} - -staff_lightning_death_event() //checked didn't change to match cerberus output -{ - if ( is_staff_lightning_damage() && self.damagemod != "MOD_MELEE" ) - { - if ( is_true( self.is_mechz ) ) - { - return; - } - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "death", self.animname ); - self thread zombie_eye_glow_stop(); - if ( is_true( self.has_legs ) ) - { - if ( !self hasanimstatefromasd( "zm_death_tesla" ) ) - { - return; - } - self.deathanim = "zm_death_tesla"; - } - else - { - if ( !self hasanimstatefromasd( "zm_death_tesla_crawl" ) ) - { - return; - } - self.deathanim = "zm_death_tesla_crawl"; - } - if ( is_true( self.is_traversing ) ) - { - self.deathanim = undefined; - } - tag = "J_SpineUpper"; - self setclientfield( "lightning_impact_fx", 1 ); - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "electrocute", self.animname ); - self thread zombie_shock_eyes(); - if ( isDefined( self.deathanim ) ) - { - self waittillmatch( "death_anim" ); - return "die"; - } - self do_damage_network_safe( self.attacker, self.health, self.damageweapon, "MOD_RIFLE_BULLET" ); - } -} - -stun_zombie() //checked matches cerberus output -{ - self endon( "death" ); - if ( is_true( self.is_mechz ) ) - { - return; - } - if ( is_true( self.is_electrocuted ) ) - { - return; - } - if ( !isDefined( self.ai_state ) || self.ai_state != "find_flesh" ) - { - return; - } - self.forcemovementscriptstate = 1; - self.ignoreall = 1; - self.is_electrocuted = 1; - tag = "J_SpineUpper"; - network_safe_play_fx_on_tag( "lightning_impact", 2, level._effect[ "lightning_impact" ], self, tag ); - if ( is_true( self.has_legs ) ) - { - self animscripted( self.origin, self.angles, "zm_electric_stun" ); - } - self maps/mp/animscripts/shared::donotetracks( "stunned" ); - self.forcemovementscriptstate = 0; - self.ignoreall = 0; - self.is_electrocuted = 0; -} - diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_staff_revive.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_staff_revive.gsc deleted file mode 100644 index 237857b..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_staff_revive.gsc +++ /dev/null @@ -1,74 +0,0 @@ -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - onplayerconnect_callback( ::onplayerconnect ); -} - -onplayerconnect() -{ - self thread onplayerspawned(); -} - -onplayerspawned() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "spawned_player" ); - self thread watch_staff_revive_fired(); - } -} - -watch_staff_revive_fired() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "missile_fire", e_projectile, str_weapon ); - while ( str_weapon != "staff_revive_zm" ) - { - continue; - } - self waittill( "projectile_impact", e_ent, v_explode_point, n_radius, str_name, n_impact ); - self thread staff_revive_impact( v_explode_point ); - } -} - -staff_revive_impact( v_explode_point ) -{ - self endon( "disconnect" ); - e_closest_player = undefined; - n_closest_dist_sq = 1024; - playsoundatposition( "wpn_revivestaff_proj_impact", v_explode_point ); - a_e_players = getplayers(); - _a70 = a_e_players; - _k70 = getFirstArrayKey( _a70 ); - while ( isDefined( _k70 ) ) - { - e_player = _a70[ _k70 ]; - if ( e_player == self || !e_player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - } - else - { - n_dist_sq = distancesquared( v_explode_point, e_player.origin ); - if ( n_dist_sq < n_closest_dist_sq ) - { - e_closest_player = e_player; - } - } - _k70 = getNextArrayKey( _a70, _k70 ); - } - if ( isDefined( e_closest_player ) ) - { - e_closest_player notify( "remote_revive" ); - e_closest_player playsoundtoplayer( "wpn_revivestaff_revive_plr", e_player ); - self notify( "revived_player_with_upgraded_staff" ); - } -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_staff_water.gsc b/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_staff_water.gsc deleted file mode 100644 index 1b60c18..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/maps/mp/zombies/_zm_weap_staff_water.gsc +++ /dev/null @@ -1,545 +0,0 @@ -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zm_tomb_utility; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - level._effect[ "staff_water_blizzard" ] = loadfx( "weapon/zmb_staff/fx_zmb_staff_ice_ug_impact_hit" ); - level._effect[ "staff_water_ice_shard" ] = loadfx( "weapon/zmb_staff/fx_zmb_staff_ice_trail_bolt" ); - level._effect[ "staff_water_shatter" ] = loadfx( "weapon/zmb_staff/fx_zmb_staff_ice_exp" ); - registerclientfield( "scriptmover", "staff_blizzard_fx", 14000, 1, "int" ); - registerclientfield( "actor", "anim_rate", 14000, 2, "float" ); - registerclientfield( "actor", "attach_bullet_model", 14000, 1, "int" ); - onplayerconnect_callback( ::onplayerconnect ); - precacheitem( "staff_water_fake_dart_zm" ); - precacheitem( "staff_water_dart_zm" ); - flag_init( "blizzard_active" ); - init_tag_array(); - level thread water_dart_cleanup(); - maps/mp/zombies/_zm_spawner::register_zombie_death_event_callback( ::staff_water_death_event ); - maps/mp/zombies/_zm_spawner::add_cusom_zombie_spawn_logic( ::staff_water_on_zombie_spawned ); -} - -precache() -{ - precacheitem( "staff_water_melee_zm" ); -} - -init_tag_array() -{ - level.zombie_water_icicle_tag = []; - level.zombie_water_icicle_tag[ 0 ] = "j_hip_le"; - level.zombie_water_icicle_tag[ 1 ] = "j_hip_ri"; - level.zombie_water_icicle_tag[ 2 ] = "j_spine4"; - level.zombie_water_icicle_tag[ 3 ] = "j_elbow_le"; - level.zombie_water_icicle_tag[ 4 ] = "j_elbow_ri"; - level.zombie_water_icicle_tag[ 5 ] = "j_clavicle_le"; - level.zombie_water_icicle_tag[ 6 ] = "j_clavicle_ri"; -} - -water_dart_cleanup() -{ - while ( 1 ) - { - a_grenades = getentarray( "grenade", "classname" ); - _a73 = a_grenades; - _k73 = getFirstArrayKey( _a73 ); - while ( isDefined( _k73 ) ) - { - e_grenade = _a73[ _k73 ]; - if ( isDefined( e_grenade.model ) && e_grenade.model == "p6_zm_tm_staff_projectile_ice" ) - { - time = getTime(); - if ( ( time - e_grenade.birthtime ) >= 1000 ) - { - e_grenade delete(); - } - } - _k73 = getNextArrayKey( _a73, _k73 ); - } - wait 0,1; - } -} - -onplayerconnect() -{ - self thread onplayerspawned(); -} - -onplayerspawned() -{ - self endon( "disconnect" ); - self thread watch_staff_water_fired(); - self thread watch_staff_water_impact(); - self thread watch_staff_usage(); -} - -watch_staff_water_fired() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "missile_fire", e_projectile, str_weapon ); - if ( str_weapon == "staff_water_zm" || str_weapon == "staff_water_upgraded_zm" ) - { - wait_network_frame(); - _icicle_locate_target( str_weapon ); - wait_network_frame(); - _icicle_locate_target( str_weapon ); - wait_network_frame(); - _icicle_locate_target( str_weapon ); - } - } -} - -watch_staff_water_impact() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "projectile_impact", str_weapon, v_explode_point, n_radius, str_name, n_impact ); - if ( str_weapon == "staff_water_upgraded2_zm" || str_weapon == "staff_water_upgraded3_zm" ) - { - n_lifetime = 6; - if ( str_weapon == "staff_water_upgraded3_zm" ) - { - n_lifetime = 9; - } - self thread staff_water_position_source( v_explode_point, n_lifetime, str_weapon ); - } - } -} - -staff_water_kill_zombie( player, str_weapon ) -{ - self freeze_zombie(); - self do_damage_network_safe( player, self.health, str_weapon, "MOD_RIFLE_BULLET" ); - if ( isDefined( self.deathanim ) ) - { - self waittillmatch( "death_anim" ); - return "shatter"; - } - if ( isDefined( self ) ) - { - self thread frozen_zombie_shatter(); - } - player maps/mp/zombies/_zm_score::player_add_points( "death", "", "" ); -} - -freeze_zombie() -{ - if ( is_true( self.is_mechz ) ) - { - return; - } - if ( !self.isdog ) - { - if ( self.has_legs ) - { - if ( !self hasanimstatefromasd( "zm_death_freeze" ) ) - { - return; - } - self.deathanim = "zm_death_freeze"; - } - else - { - if ( !self hasanimstatefromasd( "zm_death_freeze_crawl" ) ) - { - return; - } - self.deathanim = "zm_death_freeze_crawl"; - } - } - else - { - self.a.nodeath = undefined; - } - if ( is_true( self.is_traversing ) ) - { - self.deathanim = undefined; - } -} - -_network_safe_play_fx( fx, v_origin ) -{ - playfx( fx, v_origin, ( 0, 0, 1 ), ( 0, 0, 1 ) ); -} - -network_safe_play_fx( id, max, fx, v_origin ) -{ - network_safe_init( id, max ); - network_choke_action( id, ::_network_safe_play_fx, fx, v_origin ); -} - -frozen_zombie_shatter() -{ - if ( is_true( self.is_mechz ) ) - { - return; - } - if ( isDefined( self ) ) - { - if ( is_mature() ) - { - v_fx = self gettagorigin( "J_SpineLower" ); - level thread network_safe_play_fx( "frozen_shatter", 2, level._effect[ "staff_water_shatter" ], v_fx ); - self thread frozen_zombie_gib( "normal" ); - return; - } - else - { - self startragdoll(); - } - } -} - -frozen_zombie_gib( gib_type ) -{ - gibarray = []; - gibarray[ gibarray.size ] = level._zombie_gib_piece_index_all; - self gib( gib_type, gibarray ); - self ghost(); - wait 0,4; - if ( isDefined( self ) ) - { - self self_delete(); - } -} - -staff_water_position_source( v_detonate, n_lifetime_sec, str_weapon ) -{ - self endon( "disconnect" ); - if ( isDefined( v_detonate ) ) - { - level notify( "blizzard_shot" ); - e_fx = spawn( "script_model", v_detonate + vectorScale( ( 0, 0, 1 ), 33 ) ); - e_fx setmodel( "tag_origin" ); - e_fx setclientfield( "staff_blizzard_fx", 1 ); - e_fx thread puzzle_debug_position( "X", ( 0, 64, 255 ) ); - wait 1; - flag_set( "blizzard_active" ); - e_fx thread ice_staff_blizzard_do_kills( self, str_weapon ); - e_fx thread whirlwind_rumble_nearby_players( "blizzard_active" ); - e_fx thread ice_staff_blizzard_timeout( n_lifetime_sec ); - e_fx thread ice_staff_blizzard_off(); - e_fx waittill( "blizzard_off" ); - flag_clear( "blizzard_active" ); - e_fx notify( "stop_debug_position" ); - wait 0,1; - e_fx setclientfield( "staff_blizzard_fx", 0 ); - wait 0,1; - e_fx delete(); - } -} - -ice_staff_blizzard_do_kills( player, str_weapon ) -{ - player endon( "disconnect" ); - self endon( "blizzard_off" ); - while ( 1 ) - { - a_zombies = getaiarray( level.zombie_team ); - _a317 = a_zombies; - _k317 = getFirstArrayKey( _a317 ); - while ( isDefined( _k317 ) ) - { - zombie = _a317[ _k317 ]; - if ( !is_true( zombie.is_on_ice ) ) - { - if ( distancesquared( self.origin, zombie.origin ) <= 30625 ) - { - if ( is_true( zombie.is_mechz ) ) - { - zombie thread ice_affect_mechz( player, 1 ); - break; - } - else - { - if ( isalive( zombie ) ) - { - zombie thread ice_affect_zombie( str_weapon, player, 1 ); - } - } - } - } - _k317 = getNextArrayKey( _a317, _k317 ); - } - wait 0,1; - } -} - -ice_staff_blizzard_timeout( n_time ) -{ - self endon( "death" ); - self endon( "blizzard_off" ); - wait n_time; - self notify( "blizzard_off" ); -} - -ice_staff_blizzard_off() -{ - self endon( "death" ); - self endon( "blizzard_off" ); - level waittill( "blizzard_shot" ); - self notify( "blizzard_off" ); -} - -get_ice_blast_range( n_charge ) -{ - switch( n_charge ) - { - case 0: - case 1: - n_range = 250000; - break; - case 2: - n_range = 640000; - break; - case 3: - n_range = 1000000; - break; - } - return n_range; -} - -staff_water_zombie_range( v_source, n_range ) -{ - a_enemies = []; - a_zombies = getaiarray( level.zombie_team ); - a_zombies = get_array_of_closest( v_source, a_zombies ); - while ( isDefined( a_zombies ) ) - { - i = 0; - while ( i < a_zombies.size ) - { - if ( !isDefined( a_zombies[ i ] ) ) - { - i++; - continue; - } - else v_zombie_pos = a_zombies[ i ] gettagorigin( "j_head" ); - if ( distancesquared( v_source, v_zombie_pos ) > n_range ) - { - i++; - continue; - } - else if ( !bullet_trace_throttled( v_source, v_zombie_pos, undefined ) ) - { - i++; - continue; - } - else - { - if ( isDefined( a_zombies[ i ] ) && isalive( a_zombies[ i ] ) ) - { - a_enemies[ a_enemies.size ] = a_zombies[ i ]; - } - } - i++; - } - } - return a_enemies; -} - -is_staff_water_damage() -{ - if ( isDefined( self.damageweapon ) && self.damageweapon != "staff_water_zm" && self.damageweapon != "staff_water_upgraded_zm" && self.damageweapon == "staff_water_fake_dart_zm" ) - { - return !is_true( self.set_beacon_damage ); - } -} - -ice_affect_mechz( e_player, is_upgraded ) -{ - if ( is_true( self.is_on_ice ) ) - { - return; - } - self.is_on_ice = 1; - if ( is_upgraded ) - { - self do_damage_network_safe( e_player, 3300, "staff_water_upgraded_zm", "MOD_RIFLE_BULLET" ); - } - else - { - self do_damage_network_safe( e_player, 2050, "staff_water_zm", "MOD_RIFLE_BULLET" ); - } - wait 1; - self.is_on_ice = 0; -} - -ice_affect_zombie( str_weapon, e_player, always_kill, n_mod ) -{ - if ( !isDefined( str_weapon ) ) - { - str_weapon = "staff_water_zm"; - } - if ( !isDefined( always_kill ) ) - { - always_kill = 0; - } - if ( !isDefined( n_mod ) ) - { - n_mod = 1; - } - self endon( "death" ); - instakill_on = e_player maps/mp/zombies/_zm_powerups::is_insta_kill_active(); - if ( str_weapon == "staff_water_zm" ) - { - n_damage = 2050; - } - else if ( str_weapon != "staff_water_upgraded_zm" || str_weapon == "staff_water_upgraded2_zm" && str_weapon == "staff_water_upgraded3_zm" ) - { - n_damage = 3300; - } - else - { - if ( str_weapon == "one_inch_punch_ice_zm" ) - { - n_damage = 11275; - } - } - if ( is_true( self.is_on_ice ) ) - { - return; - } - self.is_on_ice = 1; - self setclientfield( "attach_bullet_model", 1 ); - n_speed = 0,3; - self set_anim_rate( 0,3 ); - if ( instakill_on || always_kill ) - { - wait randomfloatrange( 0,5, 0,7 ); - } - else - { - wait randomfloatrange( 1,8, 2,3 ); - } - if ( n_damage >= self.health || instakill_on && always_kill ) - { - self set_anim_rate( 1 ); - wait_network_frame(); - if ( str_weapon != "one_inch_punch_ice_zm" ) - { - staff_water_kill_zombie( e_player, str_weapon ); - } - } - else - { - self do_damage_network_safe( e_player, n_damage, str_weapon, "MOD_RIFLE_BULLET" ); - self.deathanim = undefined; - self setclientfield( "attach_bullet_model", 0 ); - wait 0,5; - self set_anim_rate( 1 ); - self.is_on_ice = 0; - } -} - -set_anim_rate( n_speed ) -{ - self setclientfield( "anim_rate", n_speed ); - n_rate = self getclientfield( "anim_rate" ); - self setentityanimrate( n_rate ); - if ( n_speed != 1 ) - { - self.preserve_asd_substates = 1; - } - wait_network_frame(); - if ( !is_true( self.is_traversing ) ) - { - self.needs_run_update = 1; - self notify( "needs_run_update" ); - } - wait_network_frame(); - if ( n_speed == 1 ) - { - self.preserve_asd_substates = 0; - } -} - -staff_water_on_zombie_spawned() -{ - self setclientfield( "anim_rate", 1 ); - n_rate = self getclientfield( "anim_rate" ); - self setentityanimrate( n_rate ); -} - -staff_water_death_event() -{ - if ( is_staff_water_damage() && self.damagemod != "MOD_MELEE" ) - { - self.no_gib = 1; - self.nodeathragdoll = 1; - self freeze_zombie(); - if ( isDefined( self.deathanim ) ) - { - self waittillmatch( "death_anim" ); - return "shatter"; - } - self thread frozen_zombie_shatter(); - } -} - -_icicle_locate_target( str_weapon ) -{ - is_upgraded = str_weapon == "staff_water_upgraded_zm"; - fire_angles = self getplayerangles(); - fire_origin = self getplayercamerapos(); - a_targets = getaiarray( "axis" ); - a_targets = get_array_of_closest( self.origin, a_targets, undefined, undefined, 600 ); - _a592 = a_targets; - _k592 = getFirstArrayKey( _a592 ); - while ( isDefined( _k592 ) ) - { - target = _a592[ _k592 ]; - if ( is_true( target.is_on_ice ) ) - { - } - else - { - if ( within_fov( fire_origin, fire_angles, target gettagorigin( "j_spine4" ), cos( 25 ) ) ) - { - if ( isai( target ) ) - { - a_tags = []; - a_tags[ 0 ] = "j_hip_le"; - a_tags[ 1 ] = "j_hip_ri"; - a_tags[ 2 ] = "j_spine4"; - a_tags[ 3 ] = "j_elbow_le"; - a_tags[ 4 ] = "j_elbow_ri"; - a_tags[ 5 ] = "j_clavicle_le"; - a_tags[ 6 ] = "j_clavicle_ri"; - str_tag = a_tags[ randomint( a_tags.size ) ]; - b_trace_pass = bullet_trace_throttled( fire_origin, target gettagorigin( str_tag ), target ); - if ( b_trace_pass && isDefined( target ) && isalive( target ) ) - { - if ( is_true( target.is_mechz ) ) - { - target thread ice_affect_mechz( self, is_upgraded ); - } - else - { - target thread ice_affect_zombie( str_weapon, self ); - } - return; - } - } - } - } - _k592 = getNextArrayKey( _a592, _k592 ); - } -} - -_icicle_get_spread( n_spread ) -{ - n_x = randomintrange( n_spread * -1, n_spread ); - n_y = randomintrange( n_spread * -1, n_spread ); - n_z = randomintrange( n_spread * -1, n_spread ); - return ( n_x, n_y, n_z ); -} diff --git a/Zombie Maps/Origins/zm_tomb_patch/readme.md b/Zombie Maps/Origins/zm_tomb_patch/readme.md deleted file mode 100644 index bf94205..0000000 --- a/Zombie Maps/Origins/zm_tomb_patch/readme.md +++ /dev/null @@ -1,89 +0,0 @@ -### The following gscs compile and run successfully with no known errors: -``` - -zm_tomb_patch/maps/mp/zm_tomb.gsc -zm_tomb_patch/maps/mp/zm_tomb_classic.gsc -zm_tomb_patch/maps/mp/zm_tomb_dig.gsc - -zm_tomb_patch/maps/mp/gametypes_zm/zstandard.gsc - -zm_tomb_patch/maps/mp/zombies/_zm_perk_random.gsc -``` -### The following scripts compile and run successfully with minor errors: -``` -zm_tomb_patch/maps/mp/zm_tomb_amb.gsc -``` -### The following scripts compile and run successfully with major errors: - -### The following scripts compile and run serverside but clients cannot join due to exe_client_field_mismatch - -### The following scripts compile but cause a minidump or other severe error: - -### The following scripts have been checked, but they have not been tested yet -``` -zm_tomb_patch/maps/mp/zm_tomb_ambient_scripts.gsc -zm_tomb_patch/maps/mp/zm_tomb_capture_zones_ffotd.gsc -zm_tomb_patch/maps/mp/zm_tomb_challenges.gsc -zm_tomb_patch/maps/mp/zm_tomb_craftables.gsc -zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_1.gsc -zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_2.gsc -zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_3.gsc -zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_4.gsc -zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_5.gsc -zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_6.gsc -zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_7.gsc -zm_tomb_patch/maps/mp/zm_tomb_ee_main_step_8.gsc -zm_tomb_patch/maps/mp/zm_tomb_gamemodes.gsc -zm_tomb_patch/maps/mp/zm_tomb_giant_robot_ffotd.gsc -zm_tomb_patch/maps/mp/zm_tomb_main_quest.gsc -zm_tomb_patch/maps/mp/zm_tomb_standard.gsc -``` -### The following scripts are not checked yet, uploaded to setup a baseline: -``` -zm_tomb_patch/maps/mp/zm_tomb_achivement.gsc -zm_tomb_patch/maps/mp/zm_tomb_capture_zones.gsc -zm_tomb_patch/maps/mp/zm_tomb_chamber.gsc -zm_tomb_patch/maps/mp/zm_tomb_distance_tracking.gsc -zm_tomb_patch/maps/mp/zm_tomb_ee_lights.gsc -zm_tomb_patch/maps/mp/zm_tomb_ee_main.gsc -zm_tomb_patch/maps/mp/zm_tomb_ee_side.gsc -zm_tomb_patch/maps/mp/zm_tomb_ffotd.gsc -zm_tomb_patch/maps/mp/zm_tomb_fx.gsc -zm_tomb_patch/maps/mp/zm_tomb_giant_robot.gsc -zm_tomb_patch/maps/mp/zm_tomb_quest_air.gsc -zm_tomb_patch/maps/mp/zm_tomb_quest_crypt.gsc -zm_tomb_patch/maps/mp/zm_tomb_quest_elec.gsc -zm_tomb_patch/maps/mp/zm_tomb_quest_fire.gsc -zm_tomb_patch/maps/mp/zm_tomb_quest_ice.gsc -zm_tomb_patch/maps/mp/zm_tomb_tank.gsc -zm_tomb_patch/maps/mp/zm_tomb_teleporter.gsc -zm_tomb_patch/maps/mp/zm_tomb_utility.gsc -zm_tomb_patch/maps/mp/zm_tomb_vo.gsc - -zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz.gsc -zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz_booster.gsc -zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz_claw.gsc -zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz_dev.gsc -zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz_ffotd.gsc -zm_tomb_patch/maps/mp/zombies/_zm_ai_mechz_ft.gsc -zm_tomb_patch/maps/mp/zombies/_zm_ai_quadrotor.gsc -zm_tomb_patch/maps/mp/zombies/_zm_challenges.gsc -zm_tomb_patch/maps/mp/zombies/_zm_craftables.gsc -zm_tomb_patch/maps/mp/zombies/_zm_magicbox_tomb.gsc -zm_tomb_patch/maps/mp/zombies/_zm_melee_weapon.gsc -zm_tomb_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc -zm_tomb_patch/maps/mp/zombies/_zm_powerup_zombie_blood.gsc -zm_tomb_patch/maps/mp/zombies/_zm_riotshield_tomb.gsc -zm_tomb_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc -zm_tomb_patch/maps/mp/zombies/_zm_weap_beacon.gsc -zm_tomb_patch/maps/mp/zombies/_zm_weap_claymore.gsc -zm_tomb_patch/maps/mp/zombies/_zm_weap_one_inch_punch.gsc -zm_tomb_patch/maps/mp/zombies/_zm_weap_riotshield.gsc -zm_tomb_patch/maps/mp/zombies/_zm_weap_staff_air.gsc -zm_tomb_patch/maps/mp/zombies/_zm_weap_staff_fire.gsc -zm_tomb_patch/maps/mp/zombies/_zm_weap_staff_lightning.gsc -zm_tomb_patch/maps/mp/zombies/_zm_weap_staff_revive.gsc -zm_tomb_patch/maps/mp/zombies/_zm_weap_staff_water.gsc -``` - -### notes: diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr/aitype/zm_ally_cdc.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr/aitype/zm_ally_cdc.gsc deleted file mode 100644 index f12c067..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr/aitype/zm_ally_cdc.gsc +++ /dev/null @@ -1,53 +0,0 @@ - -#using_animtree( "zm_ally" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %pb_laststand_idle; - dummy_anim_ref = %pb_stand_alert; - dummy_anim_ref = %pb_crouch_alert; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_ally_basic.asd"; - self.animtree = "zm_ally.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "allies"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_ally_cdc::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "allies" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_ally_basic" ); - character/c_zom_ally_cdc::precache(); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr/character/c_transit_player_engineer.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr/character/c_transit_player_engineer.gsc deleted file mode 100644 index b123803..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr/character/c_transit_player_engineer.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_engineer_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_engineer_fb" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr/character/c_transit_player_farmgirl.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr/character/c_transit_player_farmgirl.gsc deleted file mode 100644 index 05c38e9..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr/character/c_transit_player_farmgirl.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_farmgirl_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_farmgirl_fb" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr/character/c_transit_player_oldman.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr/character/c_transit_player_oldman.gsc deleted file mode 100644 index 5d5f2c5..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr/character/c_transit_player_oldman.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_oldman_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_oldman_fb" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr/character/c_transit_player_reporter.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr/character/c_transit_player_reporter.gsc deleted file mode 100644 index 71e8021..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr/character/c_transit_player_reporter.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_reporter_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_reporter_fb" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr/character/c_zom_ally_cdc.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr/character/c_zom_ally_cdc.gsc deleted file mode 100644 index 9530aee..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr/character/c_zom_ally_cdc.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_cdc_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_cdc_fb" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr/maps/mp/teams/_teamset_cdc.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr/maps/mp/teams/_teamset_cdc.gsc deleted file mode 100644 index 62ec842..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr/maps/mp/teams/_teamset_cdc.gsc +++ /dev/null @@ -1,51 +0,0 @@ - -register() -{ - game[ "teamset" ] = []; - game[ "teamset" ][ "cdc" ] = ::cdc; -} - -level_init() -{ - game[ "allies" ] = "cdc"; - game[ "axis" ] = "cia"; - setdvar( "g_TeamName_Allies", &"ZMUI_CDC_SHORT" ); - setdvar( "g_TeamName_Axis", &"ZMUI_CIA_SHORT" ); - game[ "strings" ][ "allies_win" ] = &"ZM_CDC_WIN_MATCH"; - game[ "strings" ][ "allies_win_round" ] = &"ZM_CDC_WIN_ROUND"; - game[ "strings" ][ "allies_mission_accomplished" ] = &"ZM_CDC_MISSION_ACCOMPLISHED"; - game[ "strings" ][ "allies_eliminated" ] = &"ZM_CDC_ELIMINATED"; - game[ "strings" ][ "allies_forfeited" ] = &"ZM_CDC_FORFEITED"; - game[ "strings" ][ "allies_name" ] = &"ZM_CDC_NAME"; - game[ "music" ][ "spawn_allies" ] = "SPAWN_OPS"; - game[ "music" ][ "victory_allies" ] = "mus_victory_usa"; - game[ "icons" ][ "allies" ] = "faction_cdc"; - game[ "colors" ][ "allies" ] = ( 0, 0, 0 ); - game[ "voice" ][ "allies" ] = "vox_st6_"; - setdvar( "scr_allies", "marines" ); - game[ "strings" ][ "axis_win" ] = &"ZM_CIA_WIN_MATCH"; - game[ "strings" ][ "axis_win_round" ] = &"ZM_CIA_WIN_ROUND"; - game[ "strings" ][ "axis_mission_accomplished" ] = &"ZM_CIA_MISSION_ACCOMPLISHED"; - game[ "strings" ][ "axis_eliminated" ] = &"ZM_CIA_ELIMINATED"; - game[ "strings" ][ "axis_forfeited" ] = &"ZM_CIA_FORFEITED"; - game[ "strings" ][ "axis_name" ] = &"ZM_CIA_NAME"; - game[ "music" ][ "spawn_axis" ] = "SPAWN_RUS"; - game[ "music" ][ "victory_axis" ] = "mus_victory_soviet"; - game[ "icons" ][ "axis" ] = "faction_cia"; - game[ "colors" ][ "axis" ] = ( 0,65, 0,57, 0,41 ); - game[ "voice" ][ "axis" ] = "vox_pmc_"; -} - -cdc() -{ - allies(); - axis(); -} - -allies() -{ -} - -axis() -{ -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/codescripts/character_mp.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/codescripts/character_mp.gsc deleted file mode 100644 index 99f3c87..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/codescripts/character_mp.gsc +++ /dev/null @@ -1,21 +0,0 @@ -#include codescripts/character; - -setmodelfromarray( a ) -{ - self setmodel( a[ randomint( a.size ) ] ); -} - -precachemodelarray( a ) -{ - i = 0; - while ( i < a.size ) - { - precachemodel( a[ i ] ); - i++; - } -} - -attachfromarray( a ) -{ - self attach( codescripts/character::randomelement( a ), "", 1 ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/common_scripts/utility.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/common_scripts/utility.gsc deleted file mode 100644 index 256268e..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/common_scripts/utility.gsc +++ /dev/null @@ -1,2011 +0,0 @@ - -init_session_mode_flags() -{ - level.gamemode_public_match = 0; - level.gamemode_private_match = 1; - level.gamemode_local_splitscreen = 2; - level.gamemode_wager_match = 3; - level.gamemode_theater = 5; - level.gamemode_league_match = 6; - level.gamemode_rts = 7; - level.language = getDvar( "language" ); -} - -empty( a, b, c, d, e ) -{ -} - -add_to_array( array, item, allow_dupes ) -{ - if ( !isDefined( item ) ) - { - return array; - } - if ( !isDefined( allow_dupes ) ) - { - allow_dupes = 1; - } - if ( !isDefined( array ) ) - { - array[ 0 ] = item; - } - else - { - if ( allow_dupes || !isinarray( array, item ) ) - { - array[ array.size ] = item; - } - } - return array; -} - -array_copy( array ) -{ - a_copy = []; - _a92 = array; - _k92 = getFirstArrayKey( _a92 ); - while ( isDefined( _k92 ) ) - { - elem = _a92[ _k92 ]; - a_copy[ a_copy.size ] = elem; - _k92 = getNextArrayKey( _a92, _k92 ); - } - return a_copy; -} - -array_delete( array, is_struct ) -{ - _a109 = array; - _k109 = getFirstArrayKey( _a109 ); - while ( isDefined( _k109 ) ) - { - ent = _a109[ _k109 ]; - if ( isDefined( is_struct ) && is_struct ) - { - ent structdelete(); - ent = undefined; - } - else - { - if ( isDefined( ent ) ) - { - ent delete(); - } - } - _k109 = getNextArrayKey( _a109, _k109 ); - } -} - -array_randomize( array ) -{ - i = 0; - while ( i < array.size ) - { - j = randomint( array.size ); - temp = array[ i ]; - array[ i ] = array[ j ]; - array[ j ] = temp; - i++; - } - return array; -} - -array_reverse( array ) -{ - array2 = []; - i = array.size - 1; - while ( i >= 0 ) - { - array2[ array2.size ] = array[ i ]; - i--; - - } - return array2; -} - -array_exclude( array, arrayexclude ) -{ - newarray = array; - if ( isarray( arrayexclude ) ) - { - i = 0; - while ( i < arrayexclude.size ) - { - arrayremovevalue( newarray, arrayexclude[ i ] ); - i++; - } - } - else arrayremovevalue( newarray, arrayexclude ); - return newarray; -} - -array_notify( ents, notifier ) -{ - i = 0; - while ( i < ents.size ) - { - ents[ i ] notify( notifier ); - i++; - } -} - -array_wait( array, msg, timeout ) -{ - keys = getarraykeys( array ); - structs = []; - i = 0; - while ( i < keys.size ) - { - key = keys[ i ]; - structs[ key ] = spawnstruct(); - structs[ key ]._array_wait = 1; - structs[ key ] thread array_waitlogic1( array[ key ], msg, timeout ); - i++; - } - i = 0; - while ( i < keys.size ) - { - key = keys[ i ]; - if ( isDefined( array[ key ] ) && structs[ key ]._array_wait ) - { - structs[ key ] waittill( "_array_wait" ); - } - i++; - } -} - -array_wait_any( array, msg, timeout ) -{ - if ( array.size == 0 ) - { - return undefined; - } - keys = getarraykeys( array ); - structs = []; - internal_msg = msg + "array_wait"; - i = 0; - while ( i < keys.size ) - { - key = keys[ i ]; - structs[ key ] = spawnstruct(); - structs[ key ]._array_wait = 1; - structs[ key ] thread array_waitlogic3( array[ key ], msg, internal_msg, timeout ); - i++; - } - level waittill( internal_msg, ent ); - return ent; -} - -array_waitlogic1( ent, msg, timeout ) -{ - self array_waitlogic2( ent, msg, timeout ); - self._array_wait = 0; - self notify( "_array_wait" ); -} - -array_waitlogic2( ent, msg, timeout ) -{ - ent endon( msg ); - ent endon( "death" ); - if ( isDefined( timeout ) ) - { - wait timeout; - } - else - { - ent waittill( msg ); - } -} - -array_waitlogic3( ent, msg, internal_msg, timeout ) -{ - if ( msg != "death" ) - { - ent endon( "death" ); - } - level endon( internal_msg ); - self array_waitlogic2( ent, msg, timeout ); - level notify( internal_msg ); -} - -array_check_for_dupes( array, single ) -{ - i = 0; - while ( i < array.size ) - { - if ( array[ i ] == single ) - { - return 0; - } - i++; - } - return 1; -} - -array_swap( array, index1, index2 ) -{ -/# - assert( index1 < array.size, "index1 to swap out of range" ); -#/ -/# - assert( index2 < array.size, "index2 to swap out of range" ); -#/ - temp = array[ index1 ]; - array[ index1 ] = array[ index2 ]; - array[ index2 ] = temp; - return array; -} - -array_average( array ) -{ -/# - assert( isarray( array ) ); -#/ -/# - assert( array.size > 0 ); -#/ - total = 0; - i = 0; - while ( i < array.size ) - { - total += array[ i ]; - i++; - } - return total / array.size; -} - -array_std_deviation( array, mean ) -{ -/# - assert( isarray( array ) ); -#/ -/# - assert( array.size > 0 ); -#/ - tmp = []; - i = 0; - while ( i < array.size ) - { - tmp[ i ] = ( array[ i ] - mean ) * ( array[ i ] - mean ); - i++; - } - total = 0; - i = 0; - while ( i < tmp.size ) - { - total += tmp[ i ]; - i++; - } - return sqrt( total / array.size ); -} - -random_normal_distribution( mean, std_deviation, lower_bound, upper_bound ) -{ - x1 = 0; - x2 = 0; - w = 1; - y1 = 0; - while ( w >= 1 ) - { - x1 = ( 2 * randomfloatrange( 0, 1 ) ) - 1; - x2 = ( 2 * randomfloatrange( 0, 1 ) ) - 1; - w = ( x1 * x1 ) + ( x2 * x2 ); - } - w = sqrt( ( -2 * log( w ) ) / w ); - y1 = x1 * w; - number = mean + ( y1 * std_deviation ); - if ( isDefined( lower_bound ) && number < lower_bound ) - { - number = lower_bound; - } - if ( isDefined( upper_bound ) && number > upper_bound ) - { - number = upper_bound; - } - return number; -} - -random( array ) -{ - keys = getarraykeys( array ); - return array[ keys[ randomint( keys.size ) ] ]; -} - -get_players( str_team ) -{ - if ( isDefined( str_team ) ) - { - return getplayers( str_team ); - } - else - { - return getplayers(); - } -} - -is_prefix( msg, prefix ) -{ - if ( prefix.size > msg.size ) - { - return 0; - } - i = 0; - while ( i < prefix.size ) - { - if ( msg[ i ] != prefix[ i ] ) - { - return 0; - } - i++; - } - return 1; -} - -is_suffix( msg, suffix ) -{ - if ( suffix.size > msg.size ) - { - return 0; - } - i = 0; - while ( i < suffix.size ) - { - if ( msg[ ( msg.size - 1 ) - i ] != suffix[ ( suffix.size - 1 ) - i ] ) - { - return 0; - } - i++; - } - return 1; -} - -vector_compare( vec1, vec2 ) -{ - if ( abs( vec1[ 0 ] - vec2[ 0 ] ) < 0,001 && abs( vec1[ 1 ] - vec2[ 1 ] ) < 0,001 ) - { - return abs( vec1[ 2 ] - vec2[ 2 ] ) < 0,001; - } -} - -draw_debug_line( start, end, timer ) -{ -/# - i = 0; - while ( i < ( timer * 20 ) ) - { - line( start, end, ( 1, 1, 0,5 ) ); - wait 0,05; - i++; -#/ - } -} - -waittillend( msg ) -{ - self waittillmatch( msg ); - return "end"; -} - -random_vector( max_length ) -{ - return ( randomfloatrange( -1 * max_length, max_length ), randomfloatrange( -1 * max_length, max_length ), randomfloatrange( -1 * max_length, max_length ) ); -} - -angle_dif( oldangle, newangle ) -{ - outvalue = ( oldangle - newangle ) % 360; - if ( outvalue < 0 ) - { - outvalue += 360; - } - if ( outvalue > 180 ) - { - outvalue = ( outvalue - 360 ) * -1; - } - return outvalue; -} - -sign( x ) -{ - if ( x >= 0 ) - { - return 1; - } - return -1; -} - -track( spot_to_track ) -{ - if ( isDefined( self.current_target ) ) - { - if ( spot_to_track == self.current_target ) - { - return; - } - } - self.current_target = spot_to_track; -} - -clear_exception( type ) -{ -/# - assert( isDefined( self.exception[ type ] ) ); -#/ - self.exception[ type ] = anim.defaultexception; -} - -set_exception( type, func ) -{ -/# - assert( isDefined( self.exception[ type ] ) ); -#/ - self.exception[ type ] = func; -} - -set_all_exceptions( exceptionfunc ) -{ - keys = getarraykeys( self.exception ); - i = 0; - while ( i < keys.size ) - { - self.exception[ keys[ i ] ] = exceptionfunc; - i++; - } -} - -cointoss() -{ - return randomint( 100 ) >= 50; -} - -waittill_string( msg, ent ) -{ - if ( msg != "death" ) - { - self endon( "death" ); - } - ent endon( "die" ); - self waittill( msg ); - ent notify( "returned" ); -} - -waittill_multiple( string1, string2, string3, string4, string5 ) -{ - self endon( "death" ); - ent = spawnstruct(); - ent.threads = 0; - if ( isDefined( string1 ) ) - { - self thread waittill_string( string1, ent ); - ent.threads++; - } - if ( isDefined( string2 ) ) - { - self thread waittill_string( string2, ent ); - ent.threads++; - } - if ( isDefined( string3 ) ) - { - self thread waittill_string( string3, ent ); - ent.threads++; - } - if ( isDefined( string4 ) ) - { - self thread waittill_string( string4, ent ); - ent.threads++; - } - if ( isDefined( string5 ) ) - { - self thread waittill_string( string5, ent ); - ent.threads++; - } - while ( ent.threads ) - { - ent waittill( "returned" ); - ent.threads--; - - } - ent notify( "die" ); -} - -waittill_multiple_ents( ent1, string1, ent2, string2, ent3, string3, ent4, string4 ) -{ - self endon( "death" ); - ent = spawnstruct(); - ent.threads = 0; - if ( isDefined( ent1 ) ) - { -/# - assert( isDefined( string1 ) ); -#/ - ent1 thread waittill_string( string1, ent ); - ent.threads++; - } - if ( isDefined( ent2 ) ) - { -/# - assert( isDefined( string2 ) ); -#/ - ent2 thread waittill_string( string2, ent ); - ent.threads++; - } - if ( isDefined( ent3 ) ) - { -/# - assert( isDefined( string3 ) ); -#/ - ent3 thread waittill_string( string3, ent ); - ent.threads++; - } - if ( isDefined( ent4 ) ) - { -/# - assert( isDefined( string4 ) ); -#/ - ent4 thread waittill_string( string4, ent ); - ent.threads++; - } - while ( ent.threads ) - { - ent waittill( "returned" ); - ent.threads--; - - } - ent notify( "die" ); -} - -waittill_any_return( string1, string2, string3, string4, string5, string6, string7 ) -{ - if ( isDefined( string1 ) && string1 != "death" && isDefined( string2 ) && string2 != "death" && isDefined( string3 ) && string3 != "death" && isDefined( string4 ) && string4 != "death" && isDefined( string5 ) && string5 != "death" && isDefined( string6 ) && string6 != "death" || !isDefined( string7 ) && string7 != "death" ) - { - self endon( "death" ); - } - ent = spawnstruct(); - if ( isDefined( string1 ) ) - { - self thread waittill_string( string1, ent ); - } - if ( isDefined( string2 ) ) - { - self thread waittill_string( string2, ent ); - } - if ( isDefined( string3 ) ) - { - self thread waittill_string( string3, ent ); - } - if ( isDefined( string4 ) ) - { - self thread waittill_string( string4, ent ); - } - if ( isDefined( string5 ) ) - { - self thread waittill_string( string5, ent ); - } - if ( isDefined( string6 ) ) - { - self thread waittill_string( string6, ent ); - } - if ( isDefined( string7 ) ) - { - self thread waittill_string( string7, ent ); - } - ent waittill( "returned", msg ); - ent notify( "die" ); - return msg; -} - -waittill_any_array_return( a_notifies ) -{ - if ( isinarray( a_notifies, "death" ) ) - { - self endon( "death" ); - } - s_tracker = spawnstruct(); - _a825 = a_notifies; - _k825 = getFirstArrayKey( _a825 ); - while ( isDefined( _k825 ) ) - { - str_notify = _a825[ _k825 ]; - if ( isDefined( str_notify ) ) - { - self thread waittill_string( str_notify, s_tracker ); - } - _k825 = getNextArrayKey( _a825, _k825 ); - } - s_tracker waittill( "returned", msg ); - s_tracker notify( "die" ); - return msg; -} - -waittill_any( str_notify1, str_notify2, str_notify3, str_notify4, str_notify5 ) -{ -/# - assert( isDefined( str_notify1 ) ); -#/ - waittill_any_array( array( str_notify1, str_notify2, str_notify3, str_notify4, str_notify5 ) ); -} - -waittill_any_array( a_notifies ) -{ -/# - assert( isDefined( a_notifies[ 0 ] ), "At least the first element has to be defined for waittill_any_array." ); -#/ - i = 1; - while ( i < a_notifies.size ) - { - if ( isDefined( a_notifies[ i ] ) ) - { - self endon( a_notifies[ i ] ); - } - i++; - } - self waittill( a_notifies[ 0 ] ); -} - -waittill_any_timeout( n_timeout, string1, string2, string3, string4, string5 ) -{ - if ( isDefined( string1 ) && string1 != "death" && isDefined( string2 ) && string2 != "death" && isDefined( string3 ) && string3 != "death" && isDefined( string4 ) && string4 != "death" || !isDefined( string5 ) && string5 != "death" ) - { - self endon( "death" ); - } - ent = spawnstruct(); - if ( isDefined( string1 ) ) - { - self thread waittill_string( string1, ent ); - } - if ( isDefined( string2 ) ) - { - self thread waittill_string( string2, ent ); - } - if ( isDefined( string3 ) ) - { - self thread waittill_string( string3, ent ); - } - if ( isDefined( string4 ) ) - { - self thread waittill_string( string4, ent ); - } - if ( isDefined( string5 ) ) - { - self thread waittill_string( string5, ent ); - } - ent thread _timeout( n_timeout ); - ent waittill( "returned", msg ); - ent notify( "die" ); - return msg; -} - -_timeout( delay ) -{ - self endon( "die" ); - wait delay; - self notify( "returned" ); -} - -waittill_any_ents( ent1, string1, ent2, string2, ent3, string3, ent4, string4, ent5, string5, ent6, string6, ent7, string7 ) -{ -/# - assert( isDefined( ent1 ) ); -#/ -/# - assert( isDefined( string1 ) ); -#/ - if ( isDefined( ent2 ) && isDefined( string2 ) ) - { - ent2 endon( string2 ); - } - if ( isDefined( ent3 ) && isDefined( string3 ) ) - { - ent3 endon( string3 ); - } - if ( isDefined( ent4 ) && isDefined( string4 ) ) - { - ent4 endon( string4 ); - } - if ( isDefined( ent5 ) && isDefined( string5 ) ) - { - ent5 endon( string5 ); - } - if ( isDefined( ent6 ) && isDefined( string6 ) ) - { - ent6 endon( string6 ); - } - if ( isDefined( ent7 ) && isDefined( string7 ) ) - { - ent7 endon( string7 ); - } - ent1 waittill( string1 ); -} - -waittill_any_ents_two( ent1, string1, ent2, string2 ) -{ -/# - assert( isDefined( ent1 ) ); -#/ -/# - assert( isDefined( string1 ) ); -#/ - if ( isDefined( ent2 ) && isDefined( string2 ) ) - { - ent2 endon( string2 ); - } - ent1 waittill( string1 ); -} - -waittill_flag_exists( msg ) -{ - while ( !flag_exists( msg ) ) - { - waittillframeend; - if ( flag_exists( msg ) ) - { - return; - } - else - { - wait 0,05; - } - } -} - -isflashed() -{ - if ( !isDefined( self.flashendtime ) ) - { - return 0; - } - return getTime() < self.flashendtime; -} - -isstunned() -{ - if ( !isDefined( self.flashendtime ) ) - { - return 0; - } - return getTime() < self.flashendtime; -} - -flag( flagname ) -{ -/# - assert( isDefined( flagname ), "Tried to check flag but the flag was not defined." ); -#/ -/# - assert( isDefined( level.flag[ flagname ] ), "Tried to check flag " + flagname + " but the flag was not initialized." ); -#/ - if ( !level.flag[ flagname ] ) - { - return 0; - } - return 1; -} - -flag_delete( flagname ) -{ - if ( isDefined( level.flag[ flagname ] ) ) - { - } - else - { -/# - println( "flag_delete() called on flag that does not exist: " + flagname ); -#/ - } -} - -flag_init( flagname, val, b_is_trigger ) -{ - if ( !isDefined( b_is_trigger ) ) - { - b_is_trigger = 0; - } - if ( !isDefined( level.flag ) ) - { - level.flag = []; - } - if ( !isDefined( level.sp_stat_tracking_func ) ) - { - level.sp_stat_tracking_func = ::empty; - } - if ( !isDefined( level.first_frame ) ) - { -/# - assert( !isDefined( level.flag[ flagname ] ), "Attempt to reinitialize existing flag: " + flagname ); -#/ - } - if ( isDefined( val ) && val ) - { - level.flag[ flagname ] = 1; - } - else - { - level.flag[ flagname ] = 0; - } - if ( b_is_trigger ) - { - if ( !isDefined( level.trigger_flags ) ) - { - init_trigger_flags(); - level.trigger_flags[ flagname ] = []; - } - else - { - if ( !isDefined( level.trigger_flags[ flagname ] ) ) - { - level.trigger_flags[ flagname ] = []; - } - } - } - if ( is_suffix( flagname, "aa_" ) ) - { - thread [[ level.sp_stat_tracking_func ]]( flagname ); - } -} - -flag_set( flagname ) -{ -/# - assert( isDefined( level.flag[ flagname ] ), "Attempt to set a flag before calling flag_init: " + flagname ); -#/ - level.flag[ flagname ] = 1; - level notify( flagname ); - set_trigger_flag_permissions( flagname ); -} - -flag_set_for_time( n_time, str_flag ) -{ - level notify( "set_flag_for_time:" + str_flag ); - flag_set( str_flag ); - level endon( "set_flag_for_time:" + str_flag ); - wait n_time; - flag_clear( str_flag ); -} - -flag_toggle( flagname ) -{ - if ( flag( flagname ) ) - { - flag_clear( flagname ); - } - else - { - flag_set( flagname ); - } -} - -flag_wait( flagname ) -{ - level waittill_flag_exists( flagname ); - while ( !level.flag[ flagname ] ) - { - level waittill( flagname ); - } -} - -flag_wait_any( str_flag1, str_flag2, str_flag3, str_flag4, str_flag5 ) -{ - level flag_wait_any_array( array( str_flag1, str_flag2, str_flag3, str_flag4, str_flag5 ) ); -} - -flag_wait_any_array( a_flags ) -{ - while ( 1 ) - { - i = 0; - while ( i < a_flags.size ) - { - if ( flag( a_flags[ i ] ) ) - { - return a_flags[ i ]; - } - i++; - } - level waittill_any_array( a_flags ); - } -} - -flag_clear( flagname ) -{ -/# - assert( isDefined( level.flag[ flagname ] ), "Attempt to set a flag before calling flag_init: " + flagname ); -#/ - if ( level.flag[ flagname ] ) - { - level.flag[ flagname ] = 0; - level notify( flagname ); - set_trigger_flag_permissions( flagname ); - } -} - -flag_waitopen( flagname ) -{ - while ( level.flag[ flagname ] ) - { - level waittill( flagname ); - } -} - -flag_waitopen_array( a_flags ) -{ - _a1324 = a_flags; - _k1324 = getFirstArrayKey( _a1324 ); - while ( isDefined( _k1324 ) ) - { - str_flag = _a1324[ _k1324 ]; - if ( flag( str_flag ) ) - { - flag_waitopen( str_flag ); - break; - } - _k1324 = getNextArrayKey( _a1324, _k1324 ); - } -} - -flag_exists( flagname ) -{ - if ( self == level ) - { - if ( !isDefined( level.flag ) ) - { - return 0; - } - if ( isDefined( level.flag[ flagname ] ) ) - { - return 1; - } - } - else - { - if ( !isDefined( self.ent_flag ) ) - { - return 0; - } - if ( isDefined( self.ent_flag[ flagname ] ) ) - { - return 1; - } - } - return 0; -} - -script_gen_dump_addline( string, signature ) -{ - if ( !isDefined( string ) ) - { - string = "nowrite"; - } - if ( !isDefined( level._loadstarted ) ) - { - if ( !isDefined( level.script_gen_dump_preload ) ) - { - level.script_gen_dump_preload = []; - } - struct = spawnstruct(); - struct.string = string; - struct.signature = signature; - level.script_gen_dump_preload[ level.script_gen_dump_preload.size ] = struct; - return; - } - if ( !isDefined( level.script_gen_dump[ signature ] ) ) - { - level.script_gen_dump_reasons[ level.script_gen_dump_reasons.size ] = "Added: " + string; - } - level.script_gen_dump[ signature ] = string; - level.script_gen_dump2[ signature ] = string; -} - -array_func( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ) -{ - if ( !isDefined( entities ) ) - { - return; - } - if ( isarray( entities ) ) - { - while ( entities.size ) - { - keys = getarraykeys( entities ); - i = 0; - while ( i < keys.size ) - { - single_func( entities[ keys[ i ] ], func, arg1, arg2, arg3, arg4, arg5, arg6 ); - i++; - } - } - } - else single_func( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ); -} - -single_func( entity, func, arg1, arg2, arg3, arg4, arg5, arg6 ) -{ - if ( !isDefined( entity ) ) - { - entity = level; - } - if ( isDefined( arg6 ) ) - { - return entity [[ func ]]( arg1, arg2, arg3, arg4, arg5, arg6 ); - } - else - { - if ( isDefined( arg5 ) ) - { - return entity [[ func ]]( arg1, arg2, arg3, arg4, arg5 ); - } - else - { - if ( isDefined( arg4 ) ) - { - return entity [[ func ]]( arg1, arg2, arg3, arg4 ); - } - else - { - if ( isDefined( arg3 ) ) - { - return entity [[ func ]]( arg1, arg2, arg3 ); - } - else - { - if ( isDefined( arg2 ) ) - { - return entity [[ func ]]( arg1, arg2 ); - } - else - { - if ( isDefined( arg1 ) ) - { - return entity [[ func ]]( arg1 ); - } - else - { - return entity [[ func ]](); - } - } - } - } - } - } -} - -new_func( func, arg1, arg2, arg3, arg4, arg5, arg6 ) -{ - s_func = spawnstruct(); - s_func.func = func; - s_func.arg1 = arg1; - s_func.arg2 = arg2; - s_func.arg3 = arg3; - s_func.arg4 = arg4; - s_func.arg5 = arg5; - s_func.arg6 = arg6; - return s_func; -} - -call_func( s_func ) -{ - return single_func( self, s_func.func, s_func.arg1, s_func.arg2, s_func.arg3, s_func.arg4, s_func.arg5, s_func.arg6 ); -} - -array_thread( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ) -{ -/# - assert( isDefined( entities ), "Undefined entity array passed to common_scriptsutility::array_thread" ); -#/ -/# - assert( isDefined( func ), "Undefined function passed to common_scriptsutility::array_thread" ); -#/ - if ( isarray( entities ) ) - { - if ( isDefined( arg6 ) ) - { - _a1554 = entities; - _k1554 = getFirstArrayKey( _a1554 ); - while ( isDefined( _k1554 ) ) - { - ent = _a1554[ _k1554 ]; - ent thread [[ func ]]( arg1, arg2, arg3, arg4, arg5, arg6 ); - _k1554 = getNextArrayKey( _a1554, _k1554 ); - } - } - else if ( isDefined( arg5 ) ) - { - _a1561 = entities; - _k1561 = getFirstArrayKey( _a1561 ); - while ( isDefined( _k1561 ) ) - { - ent = _a1561[ _k1561 ]; - ent thread [[ func ]]( arg1, arg2, arg3, arg4, arg5 ); - _k1561 = getNextArrayKey( _a1561, _k1561 ); - } - } - else if ( isDefined( arg4 ) ) - { - _a1568 = entities; - _k1568 = getFirstArrayKey( _a1568 ); - while ( isDefined( _k1568 ) ) - { - ent = _a1568[ _k1568 ]; - ent thread [[ func ]]( arg1, arg2, arg3, arg4 ); - _k1568 = getNextArrayKey( _a1568, _k1568 ); - } - } - else if ( isDefined( arg3 ) ) - { - _a1575 = entities; - _k1575 = getFirstArrayKey( _a1575 ); - while ( isDefined( _k1575 ) ) - { - ent = _a1575[ _k1575 ]; - ent thread [[ func ]]( arg1, arg2, arg3 ); - _k1575 = getNextArrayKey( _a1575, _k1575 ); - } - } - else if ( isDefined( arg2 ) ) - { - _a1582 = entities; - _k1582 = getFirstArrayKey( _a1582 ); - while ( isDefined( _k1582 ) ) - { - ent = _a1582[ _k1582 ]; - ent thread [[ func ]]( arg1, arg2 ); - _k1582 = getNextArrayKey( _a1582, _k1582 ); - } - } - else if ( isDefined( arg1 ) ) - { - _a1589 = entities; - _k1589 = getFirstArrayKey( _a1589 ); - while ( isDefined( _k1589 ) ) - { - ent = _a1589[ _k1589 ]; - ent thread [[ func ]]( arg1 ); - _k1589 = getNextArrayKey( _a1589, _k1589 ); - } - } - else _a1596 = entities; - _k1596 = getFirstArrayKey( _a1596 ); - while ( isDefined( _k1596 ) ) - { - ent = _a1596[ _k1596 ]; - ent thread [[ func ]](); - _k1596 = getNextArrayKey( _a1596, _k1596 ); - } - } - else single_thread( entities, func, arg1, arg2, arg3, arg4, arg5, arg6 ); -} - -array_ent_thread( entities, func, arg1, arg2, arg3, arg4, arg5 ) -{ -/# - assert( isDefined( entities ), "Undefined entity array passed to common_scriptsutility::array_ent_thread" ); -#/ -/# - assert( isDefined( func ), "Undefined function passed to common_scriptsutility::array_ent_thread" ); -#/ - if ( isarray( entities ) ) - { - while ( entities.size ) - { - keys = getarraykeys( entities ); - i = 0; - while ( i < keys.size ) - { - single_thread( self, func, entities[ keys[ i ] ], arg1, arg2, arg3, arg4, arg5 ); - i++; - } - } - } - else single_thread( self, func, entities, arg1, arg2, arg3, arg4, arg5 ); -} - -single_thread( entity, func, arg1, arg2, arg3, arg4, arg5, arg6 ) -{ -/# - assert( isDefined( entity ), "Undefined entity passed to common_scriptsutility::single_thread()" ); -#/ - if ( isDefined( arg6 ) ) - { - entity thread [[ func ]]( arg1, arg2, arg3, arg4, arg5, arg6 ); - } - else if ( isDefined( arg5 ) ) - { - entity thread [[ func ]]( arg1, arg2, arg3, arg4, arg5 ); - } - else if ( isDefined( arg4 ) ) - { - entity thread [[ func ]]( arg1, arg2, arg3, arg4 ); - } - else if ( isDefined( arg3 ) ) - { - entity thread [[ func ]]( arg1, arg2, arg3 ); - } - else if ( isDefined( arg2 ) ) - { - entity thread [[ func ]]( arg1, arg2 ); - } - else if ( isDefined( arg1 ) ) - { - entity thread [[ func ]]( arg1 ); - } - else - { - entity thread [[ func ]](); - } -} - -remove_undefined_from_array( array ) -{ - newarray = []; - i = 0; - while ( i < array.size ) - { - if ( !isDefined( array[ i ] ) ) - { - i++; - continue; - } - else - { - newarray[ newarray.size ] = array[ i ]; - } - i++; - } - return newarray; -} - -trigger_on( name, type ) -{ - if ( isDefined( name ) ) - { - if ( !isDefined( type ) ) - { - type = "targetname"; - } - ents = getentarray( name, type ); - array_thread( ents, ::trigger_on_proc ); - } - else - { - self trigger_on_proc(); - } -} - -trigger_on_proc() -{ - if ( isDefined( self.realorigin ) ) - { - self.origin = self.realorigin; - } - self.trigger_off = undefined; -} - -trigger_off( name, type ) -{ - if ( isDefined( name ) ) - { - if ( !isDefined( type ) ) - { - type = "targetname"; - } - ents = getentarray( name, type ); - array_thread( ents, ::trigger_off_proc ); - } - else - { - self trigger_off_proc(); - } -} - -trigger_off_proc() -{ - if ( !isDefined( self.trigger_off ) || !self.trigger_off ) - { - self.realorigin = self.origin; - self.origin += vectorScale( ( 0, 0, -1 ), 10000 ); - self.trigger_off = 1; - } -} - -trigger_wait( str_name, str_key, e_entity ) -{ - if ( !isDefined( str_key ) ) - { - str_key = "targetname"; - } - if ( isDefined( str_name ) ) - { - triggers = getentarray( str_name, str_key ); -/# - assert( triggers.size > 0, "trigger not found: " + str_name + " key: " + str_key ); -#/ - if ( triggers.size == 1 ) - { - trigger_hit = triggers[ 0 ]; - trigger_hit _trigger_wait( e_entity ); - } - else - { - s_tracker = spawnstruct(); - array_thread( triggers, ::_trigger_wait_think, s_tracker, e_entity ); - s_tracker waittill( "trigger", e_other, trigger_hit ); - trigger_hit.who = e_other; - } - level notify( str_name ); - return trigger_hit; - } - else - { - return _trigger_wait( e_entity ); - } -} - -_trigger_wait( e_entity ) -{ - if ( is_look_trigger( self ) ) - { - self waittill( "trigger_look", e_other ); - } - else - { - self waittill( "trigger", e_other ); - } - if ( isDefined( e_entity )self.who = e_other; - return self; -} - -_trigger_wait_think( s_tracker, e_entity ) -{ - self endon( "death" ); - s_tracker endon( "trigger" ); - e_other = _trigger_wait( e_entity ); - s_tracker notify( "trigger" ); -} - -trigger_use( str_name, str_key, ent, b_assert ) -{ - if ( !isDefined( str_key ) ) - { - str_key = "targetname"; - } - if ( !isDefined( b_assert ) ) - { - b_assert = 1; - } - if ( !isDefined( ent ) ) - { - ent = get_players()[ 0 ]; - } - if ( isDefined( str_name ) ) - { - e_trig = getent( str_name, str_key ); - if ( !isDefined( e_trig ) ) - { - if ( b_assert ) - { -/# - assertmsg( "trigger not found: " + str_name + " key: " + str_key ); -#/ - } - return; - } - } - else - { - e_trig = self; - str_name = self.targetname; - } - e_trig useby( ent ); - level notify( str_name ); - if ( is_look_trigger( e_trig ) ) - { - e_trig notify( "trigger_look" ); - } - return e_trig; -} - -set_trigger_flag_permissions( msg ) -{ - if ( !isDefined( level.trigger_flags ) || !isDefined( level.trigger_flags[ msg ] ) ) - { - return; - } - level.trigger_flags[ msg ] = remove_undefined_from_array( level.trigger_flags[ msg ] ); - array_thread( level.trigger_flags[ msg ], ::update_trigger_based_on_flags ); -} - -update_trigger_based_on_flags() -{ - true_on = 1; - while ( isDefined( self.script_flag_true ) ) - { - true_on = 0; - tokens = create_flags_and_return_tokens( self.script_flag_true ); - i = 0; - while ( i < tokens.size ) - { - if ( flag( tokens[ i ] ) ) - { - true_on = 1; - break; - } - else - { - i++; - } - } - } - false_on = 1; - while ( isDefined( self.script_flag_false ) ) - { - tokens = create_flags_and_return_tokens( self.script_flag_false ); - i = 0; - while ( i < tokens.size ) - { - if ( flag( tokens[ i ] ) ) - { - false_on = 0; - break; - } - else - { - i++; - } - } - } - if ( true_on ) - { - [[ level.trigger_func[ false_on ] ]](); - } -} - -create_flags_and_return_tokens( flags ) -{ - tokens = strtok( flags, " " ); - i = 0; - while ( i < tokens.size ) - { - if ( !isDefined( level.flag[ tokens[ i ] ] ) ) - { - flag_init( tokens[ i ], undefined, 1 ); - } - i++; - } - return tokens; -} - -init_trigger_flags() -{ - level.trigger_flags = []; - level.trigger_func[ 1 ] = ::trigger_on; - level.trigger_func[ 0 ] = ::trigger_off; -} - -is_look_trigger( trig ) -{ - if ( isDefined( trig ) ) - { - if ( trig has_spawnflag( 256 ) ) - { - if ( !isDefined( trig.classname ) && isDefined( "trigger_damage" ) && isDefined( trig.classname ) && isDefined( "trigger_damage" )} - } - else - { - } - return 0; -} - -is_trigger_once( trig ) -{ - if ( isDefined( trig ) ) - { - if ( !trig has_spawnflag( 1024 ) ) - { - if ( !isDefined( self.classname ) && isDefined( "trigger_once" ) ) - { - if ( isDefined( self.classname ) && isDefined( "trigger_once" ) ) - { - } - } - } - } - else - { - } - return 0; -} - -getstruct( name, type ) -{ - if ( !isDefined( type ) ) - { - type = "targetname"; - } -/# - assert( isDefined( level.struct_class_names ), "Tried to getstruct before the structs were init" ); -#/ - array = level.struct_class_names[ type ][ name ]; - if ( !isDefined( array ) ) - { - return undefined; - } - if ( array.size > 1 ) - { -/# - assertmsg( "getstruct used for more than one struct of type " + type + " called " + name + "." ); -#/ - return undefined; - } - return array[ 0 ]; -} - -getstructarray( name, type ) -{ - if ( !isDefined( type ) ) - { - type = "targetname"; - } -/# - assert( isDefined( level.struct_class_names ), "Tried to getstruct before the structs were init" ); -#/ - array = level.struct_class_names[ type ][ name ]; - if ( !isDefined( array ) ) - { - return []; - } - return array; -} - -structdelete() -{ - if ( isDefined( self.target ) && isDefined( level.struct_class_names[ "target" ][ self.target ] ) ) - { - } - if ( isDefined( self.targetname ) && isDefined( level.struct_class_names[ "targetname" ][ self.targetname ] ) ) - { - } - if ( isDefined( self.script_noteworthy ) && isDefined( level.struct_class_names[ "script_noteworthy" ][ self.script_noteworthy ] ) ) - { - } - if ( isDefined( self.script_linkname ) && isDefined( level.struct_class_names[ "script_linkname" ][ self.script_linkname ] ) ) - { - } -} - -struct_class_init() -{ -/# - assert( !isDefined( level.struct_class_names ), "level.struct_class_names is being initialized in the wrong place! It shouldn't be initialized yet." ); -#/ - level.struct_class_names = []; - level.struct_class_names[ "target" ] = []; - level.struct_class_names[ "targetname" ] = []; - level.struct_class_names[ "script_noteworthy" ] = []; - level.struct_class_names[ "script_linkname" ] = []; - level.struct_class_names[ "script_unitrigger_type" ] = []; - _a2064 = level.struct; - _k2064 = getFirstArrayKey( _a2064 ); - while ( isDefined( _k2064 ) ) - { - s_struct = _a2064[ _k2064 ]; - if ( isDefined( s_struct.targetname ) ) - { - if ( !isDefined( level.struct_class_names[ "targetname" ][ s_struct.targetname ] ) ) - { - level.struct_class_names[ "targetname" ][ s_struct.targetname ] = []; - } - size = level.struct_class_names[ "targetname" ][ s_struct.targetname ].size; - level.struct_class_names[ "targetname" ][ s_struct.targetname ][ size ] = s_struct; - } - if ( isDefined( s_struct.target ) ) - { - if ( !isDefined( level.struct_class_names[ "target" ][ s_struct.target ] ) ) - { - level.struct_class_names[ "target" ][ s_struct.target ] = []; - } - size = level.struct_class_names[ "target" ][ s_struct.target ].size; - level.struct_class_names[ "target" ][ s_struct.target ][ size ] = s_struct; - } - if ( isDefined( s_struct.script_noteworthy ) ) - { - if ( !isDefined( level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ] ) ) - { - level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ] = []; - } - size = level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ].size; - level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ][ size ] = s_struct; - } - if ( isDefined( s_struct.script_linkname ) ) - { -/# - assert( !isDefined( level.struct_class_names[ "script_linkname" ][ s_struct.script_linkname ] ), "Two structs have the same linkname" ); -#/ - level.struct_class_names[ "script_linkname" ][ s_struct.script_linkname ][ 0 ] = s_struct; - } - if ( isDefined( s_struct.script_unitrigger_type ) ) - { - if ( !isDefined( level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ] ) ) - { - level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ] = []; - } - size = level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ].size; - level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ][ size ] = s_struct; - } - _k2064 = getNextArrayKey( _a2064, _k2064 ); - } -} - -fileprint_start( file ) -{ -/# - filename = file; - file = openfile( filename, "write" ); - level.fileprint = file; - level.fileprintlinecount = 0; - level.fileprint_filename = filename; -#/ -} - -fileprint_map_start( file ) -{ -/# - file = "map_source/" + file + ".map"; - fileprint_start( file ); - level.fileprint_mapentcount = 0; - fileprint_map_header( 1 ); -#/ -} - -fileprint_chk( file, str ) -{ -/# - level.fileprintlinecount++; - if ( level.fileprintlinecount > 400 ) - { - wait 0,05; - level.fileprintlinecount++; - level.fileprintlinecount = 0; - } - fprintln( file, str ); -#/ -} - -fileprint_map_header( binclude_blank_worldspawn ) -{ - if ( !isDefined( binclude_blank_worldspawn ) ) - { - binclude_blank_worldspawn = 0; - } -/# - assert( isDefined( level.fileprint ) ); -#/ -/# - fileprint_chk( level.fileprint, "iwmap 4" ); - fileprint_chk( level.fileprint, ""000_Global" flags active" ); - fileprint_chk( level.fileprint, ""The Map" flags" ); - if ( !binclude_blank_worldspawn ) - { - return; - } - fileprint_map_entity_start(); - fileprint_map_keypairprint( "classname", "worldspawn" ); - fileprint_map_entity_end(); -#/ -} - -fileprint_map_keypairprint( key1, key2 ) -{ -/# - assert( isDefined( level.fileprint ) ); - fileprint_chk( level.fileprint, """ + key1 + "" "" + key2 + """ ); -#/ -} - -fileprint_map_entity_start() -{ -/# - assert( !isDefined( level.fileprint_entitystart ) ); - level.fileprint_entitystart = 1; - assert( isDefined( level.fileprint ) ); - fileprint_chk( level.fileprint, "// entity " + level.fileprint_mapentcount ); - fileprint_chk( level.fileprint, "{" ); - level.fileprint_mapentcount++; -#/ -} - -fileprint_map_entity_end() -{ -/# - assert( isDefined( level.fileprint_entitystart ) ); - assert( isDefined( level.fileprint ) ); - level.fileprint_entitystart = undefined; - fileprint_chk( level.fileprint, "}" ); -#/ -} - -fileprint_end() -{ -/# - assert( !isDefined( level.fileprint_entitystart ) ); - saved = closefile( level.fileprint ); - if ( saved != 1 ) - { - println( "-----------------------------------" ); - println( " " ); - println( "file write failure" ); - println( "file with name: " + level.fileprint_filename ); - println( "make sure you checkout the file you are trying to save" ); - println( "note: USE P4 Search to find the file and check that one out" ); - println( " Do not checkin files in from the xenonoutput folder, " ); - println( " this is junctioned to the proper directory where you need to go" ); - println( "junctions looks like this" ); - println( " " ); - println( "..\\xenonOutput\\scriptdata\\createfx ..\\share\\raw\\maps\\createfx" ); - println( "..\\xenonOutput\\scriptdata\\createart ..\\share\\raw\\maps\\createart" ); - println( "..\\xenonOutput\\scriptdata\\vision ..\\share\\raw\\vision" ); - println( "..\\xenonOutput\\scriptdata\\scriptgen ..\\share\\raw\\maps\\scriptgen" ); - println( "..\\xenonOutput\\scriptdata\\zone_source ..\\xenon\\zone_source" ); - println( "..\\xenonOutput\\accuracy ..\\share\\raw\\accuracy" ); - println( "..\\xenonOutput\\scriptdata\\map_source ..\\map_source\\xenon_export" ); - println( " " ); - println( "-----------------------------------" ); - println( "File not saved( see console.log for info ) " ); - } - level.fileprint = undefined; - level.fileprint_filename = undefined; -#/ -} - -fileprint_radiant_vec( vector ) -{ -/# - string = "" + vector[ 0 ] + " " + vector[ 1 ] + " " + vector[ 2 ] + ""; - return string; -#/ -} - -is_mature() -{ - if ( level.onlinegame ) - { - return 1; - } - return getlocalprofileint( "cg_mature" ); -} - -is_german_build() -{ - if ( level.language == "german" ) - { - return 1; - } - return 0; -} - -is_gib_restricted_build() -{ - if ( getDvar( "language" ) == "japanese" ) - { - return 1; - } - return 0; -} - -is_true( check ) -{ - if ( isDefined( check ) ) - { - return check; - } -} - -is_false( check ) -{ - if ( isDefined( check ) ) - { - return !check; - } -} - -has_spawnflag( spawnflags ) -{ - if ( isDefined( self.spawnflags ) ) - { - return ( self.spawnflags & spawnflags ) == spawnflags; - } - return 0; -} - -clamp( val, val_min, val_max ) -{ - if ( val < val_min ) - { - val = val_min; - } - else - { - if ( val > val_max ) - { - val = val_max; - } - } - return val; -} - -linear_map( num, min_a, max_a, min_b, max_b ) -{ - return clamp( ( ( ( num - min_a ) / ( max_a - min_a ) ) * ( max_b - min_b ) ) + min_b, min_b, max_b ); -} - -lag( desired, curr, k, dt ) -{ - r = 0; - if ( ( k * dt ) >= 1 || k <= 0 ) - { - r = desired; - } - else - { - err = desired - curr; - r = curr + ( k * err * dt ); - } - return r; -} - -death_notify_wrapper( attacker, damagetype ) -{ - level notify( "face" ); - self notify( "death" ); -} - -damage_notify_wrapper( damage, attacker, direction_vec, point, type, modelname, tagname, partname, idflags ) -{ - level notify( "face" ); - self notify( "damage" ); -} - -explode_notify_wrapper() -{ - level notify( "face" ); - self notify( "explode" ); -} - -alert_notify_wrapper() -{ - level notify( "face" ); - self notify( "alert" ); -} - -shoot_notify_wrapper() -{ - level notify( "face" ); - self notify( "shoot" ); -} - -melee_notify_wrapper() -{ - level notify( "face" ); - self notify( "melee" ); -} - -isusabilityenabled() -{ - return !self.disabledusability; -} - -_disableusability() -{ - self.disabledusability++; - self disableusability(); -} - -_enableusability() -{ - self.disabledusability--; - -/# - assert( self.disabledusability >= 0 ); -#/ - if ( !self.disabledusability ) - { - self enableusability(); - } -} - -resetusability() -{ - self.disabledusability = 0; - self enableusability(); -} - -_disableweapon() -{ - if ( !isDefined( self.disabledweapon ) ) - { - self.disabledweapon = 0; - } - self.disabledweapon++; - self disableweapons(); -} - -_enableweapon() -{ - self.disabledweapon--; - -/# - assert( self.disabledweapon >= 0 ); -#/ - if ( !self.disabledweapon ) - { - self enableweapons(); - } -} - -isweaponenabled() -{ - return !self.disabledweapon; -} - -delay_thread( timer, func, param1, param2, param3, param4, param5, param6 ) -{ - self thread _delay_thread_proc( func, timer, param1, param2, param3, param4, param5, param6 ); -} - -_delay_thread_proc( func, timer, param1, param2, param3, param4, param5, param6 ) -{ - self endon( "death" ); - self endon( "disconnect" ); - wait timer; - single_thread( self, func, param1, param2, param3, param4, param5, param6 ); -} - -delay_notify( str_notify, n_delay, str_endon ) -{ -/# - assert( isDefined( str_notify ) ); -#/ -/# - assert( isDefined( n_delay ) ); -#/ - self thread _delay_notify_proc( str_notify, n_delay, str_endon ); -} - -_delay_notify_proc( str_notify, n_delay, str_endon ) -{ - self endon( "death" ); - if ( isDefined( str_endon ) ) - { - self endon( str_endon ); - } - if ( n_delay > 0 ) - { - wait n_delay; - } - self notify( str_notify ); -} - -notify_delay_with_ender( snotifystring, fdelay, ender ) -{ - if ( isDefined( ender ) ) - { - level endon( ender ); - } -/# - assert( isDefined( self ) ); -#/ -/# - assert( isDefined( snotifystring ) ); -#/ -/# - assert( isDefined( fdelay ) ); -#/ - self endon( "death" ); - if ( fdelay > 0 ) - { - wait fdelay; - } - if ( !isDefined( self ) ) - { - return; - } - self notify( snotifystring ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_art.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_art.gsc deleted file mode 100644 index 84313fc..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_art.gsc +++ /dev/null @@ -1,497 +0,0 @@ -#include maps/mp/_utility; -#include common_scripts/utility; - -main() -{ -/# - if ( getDvar( "scr_art_tweak" ) == "" || getDvar( "scr_art_tweak" ) == "0" ) - { - setdvar( "scr_art_tweak", 0 ); - } - if ( getDvar( "scr_dof_enable" ) == "" ) - { - setdvar( "scr_dof_enable", "1" ); - } - if ( getDvar( "scr_cinematic_autofocus" ) == "" ) - { - setdvar( "scr_cinematic_autofocus", "1" ); - } - if ( getDvar( "scr_art_visionfile" ) == "" && isDefined( level.script ) ) - { - setdvar( "scr_art_visionfile", level.script ); - } - if ( getDvar( "debug_reflection" ) == "" ) - { - setdvar( "debug_reflection", "0" ); - } - if ( getDvar( "debug_reflection_matte" ) == "" ) - { - setdvar( "debug_reflection_matte", "0" ); - } - if ( getDvar( "debug_color_pallete" ) == "" ) - { - setdvar( "debug_color_pallete", "0" ); - } - precachemodel( "test_sphere_lambert" ); - precachemodel( "test_macbeth_chart" ); - precachemodel( "test_macbeth_chart_unlit" ); - precachemodel( "test_sphere_silver" ); - level thread debug_reflection(); - level thread debug_reflection_matte(); - level thread debug_color_pallete(); -#/ - if ( !isDefined( level.dofdefault ) ) - { - level.dofdefault[ "nearStart" ] = 0; - level.dofdefault[ "nearEnd" ] = 1; - level.dofdefault[ "farStart" ] = 8000; - level.dofdefault[ "farEnd" ] = 10000; - level.dofdefault[ "nearBlur" ] = 6; - level.dofdefault[ "farBlur" ] = 0; - } - level.curdof = ( level.dofdefault[ "farStart" ] - level.dofdefault[ "nearEnd" ] ) / 2; -/# - thread tweakart(); -#/ - if ( !isDefined( level.script ) ) - { - level.script = tolower( getDvar( "mapname" ) ); - } -} - -artfxprintln( file, string ) -{ -/# - if ( file == -1 ) - { - return; - } - fprintln( file, string ); -#/ -} - -strtok_loc( string, par1 ) -{ - stringlist = []; - indexstring = ""; - i = 0; - while ( i < string.size ) - { - if ( string[ i ] == " " ) - { - stringlist[ stringlist.size ] = indexstring; - indexstring = ""; - i++; - continue; - } - else - { - indexstring += string[ i ]; - } - i++; - } - if ( indexstring.size ) - { - stringlist[ stringlist.size ] = indexstring; - } - return stringlist; -} - -setfogsliders() -{ - fogall = strtok_loc( getDvar( "g_fogColorReadOnly" ), " " ); - red = fogall[ 0 ]; - green = fogall[ 1 ]; - blue = fogall[ 2 ]; - halfplane = getDvar( "g_fogHalfDistReadOnly" ); - nearplane = getDvar( "g_fogStartDistReadOnly" ); - if ( isDefined( red ) && isDefined( green ) || !isDefined( blue ) && !isDefined( halfplane ) ) - { - red = 1; - green = 1; - blue = 1; - halfplane = 10000001; - nearplane = 10000000; - } - setdvar( "scr_fog_exp_halfplane", halfplane ); - setdvar( "scr_fog_nearplane", nearplane ); - setdvar( "scr_fog_color", ( red + " " ) + green + " " + blue ); -} - -tweakart() -{ -/# - if ( !isDefined( level.tweakfile ) ) - { - level.tweakfile = 0; - } - if ( getDvar( "scr_fog_baseheight" ) == "" ) - { - setdvar( "scr_fog_exp_halfplane", "500" ); - setdvar( "scr_fog_exp_halfheight", "500" ); - setdvar( "scr_fog_nearplane", "0" ); - setdvar( "scr_fog_baseheight", "0" ); - } - setdvar( "scr_fog_fraction", "1.0" ); - setdvar( "scr_art_dump", "0" ); - setdvar( "scr_art_sun_fog_dir_set", "0" ); - setdvar( "scr_dof_nearStart", level.dofdefault[ "nearStart" ] ); - setdvar( "scr_dof_nearEnd", level.dofdefault[ "nearEnd" ] ); - setdvar( "scr_dof_farStart", level.dofdefault[ "farStart" ] ); - setdvar( "scr_dof_farEnd", level.dofdefault[ "farEnd" ] ); - setdvar( "scr_dof_nearBlur", level.dofdefault[ "nearBlur" ] ); - setdvar( "scr_dof_farBlur", level.dofdefault[ "farBlur" ] ); - file = undefined; - filename = undefined; - tweak_toggle = 1; - for ( ;; ) - { - while ( getDvarInt( "scr_art_tweak" ) == 0 ) - { - tweak_toggle = 1; - wait 0,05; - } - if ( tweak_toggle ) - { - tweak_toggle = 0; - fogsettings = getfogsettings(); - setdvar( "scr_fog_nearplane", fogsettings[ 0 ] ); - setdvar( "scr_fog_exp_halfplane", fogsettings[ 1 ] ); - setdvar( "scr_fog_exp_halfheight", fogsettings[ 3 ] ); - setdvar( "scr_fog_baseheight", fogsettings[ 2 ] ); - setdvar( "scr_fog_color", fogsettings[ 4 ] + " " + fogsettings[ 5 ] + " " + fogsettings[ 6 ] ); - setdvar( "scr_fog_color_scale", fogsettings[ 7 ] ); - setdvar( "scr_sun_fog_color", fogsettings[ 8 ] + " " + fogsettings[ 9 ] + " " + fogsettings[ 10 ] ); - level.fogsundir = []; - level.fogsundir[ 0 ] = fogsettings[ 11 ]; - level.fogsundir[ 1 ] = fogsettings[ 12 ]; - level.fogsundir[ 2 ] = fogsettings[ 13 ]; - setdvar( "scr_sun_fog_start_angle", fogsettings[ 14 ] ); - setdvar( "scr_sun_fog_end_angle", fogsettings[ 15 ] ); - setdvar( "scr_fog_max_opacity", fogsettings[ 16 ] ); - } - level.fogexphalfplane = getDvarFloat( "scr_fog_exp_halfplane" ); - level.fogexphalfheight = getDvarFloat( "scr_fog_exp_halfheight" ); - level.fognearplane = getDvarFloat( "scr_fog_nearplane" ); - level.fogbaseheight = getDvarFloat( "scr_fog_baseheight" ); - level.fogcolorred = getDvarColorRed( "scr_fog_color" ); - level.fogcolorgreen = getDvarColorGreen( "scr_fog_color" ); - level.fogcolorblue = getDvarColorBlue( "scr_fog_color" ); - level.fogcolorscale = getDvarFloat( "scr_fog_color_scale" ); - level.sunfogcolorred = getDvarColorRed( "scr_sun_fog_color" ); - level.sunfogcolorgreen = getDvarColorGreen( "scr_sun_fog_color" ); - level.sunfogcolorblue = getDvarColorBlue( "scr_sun_fog_color" ); - level.sunstartangle = getDvarFloat( "scr_sun_fog_start_angle" ); - level.sunendangle = getDvarFloat( "scr_sun_fog_end_angle" ); - level.fogmaxopacity = getDvarFloat( "scr_fog_max_opacity" ); - if ( getDvarInt( "scr_art_sun_fog_dir_set" ) ) - { - setdvar( "scr_art_sun_fog_dir_set", "0" ); - println( "Setting sun fog direction to facing of player" ); - players = get_players(); - dir = vectornormalize( anglesToForward( players[ 0 ] getplayerangles() ) ); - level.fogsundir = []; - level.fogsundir[ 0 ] = dir[ 0 ]; - level.fogsundir[ 1 ] = dir[ 1 ]; - level.fogsundir[ 2 ] = dir[ 2 ]; - } - fovslidercheck(); - dumpsettings(); - if ( !getDvarInt( "scr_fog_disable" ) ) - { - if ( !isDefined( level.fogsundir ) ) - { - level.fogsundir = []; - level.fogsundir[ 0 ] = 1; - level.fogsundir[ 1 ] = 0; - level.fogsundir[ 2 ] = 0; - } - setvolfog( level.fognearplane, level.fogexphalfplane, level.fogexphalfheight, level.fogbaseheight, level.fogcolorred, level.fogcolorgreen, level.fogcolorblue, level.fogcolorscale, level.sunfogcolorred, level.sunfogcolorgreen, level.sunfogcolorblue, level.fogsundir[ 0 ], level.fogsundir[ 1 ], level.fogsundir[ 2 ], level.sunstartangle, level.sunendangle, 0, level.fogmaxopacity ); - } - else - { - setexpfog( 100000000, 100000001, 0, 0, 0, 0 ); - } - wait 0,1; -#/ - } -} - -fovslidercheck() -{ - if ( level.dofdefault[ "nearStart" ] >= level.dofdefault[ "nearEnd" ] ) - { - level.dofdefault[ "nearStart" ] = level.dofdefault[ "nearEnd" ] - 1; - setdvar( "scr_dof_nearStart", level.dofdefault[ "nearStart" ] ); - } - if ( level.dofdefault[ "nearEnd" ] <= level.dofdefault[ "nearStart" ] ) - { - level.dofdefault[ "nearEnd" ] = level.dofdefault[ "nearStart" ] + 1; - setdvar( "scr_dof_nearEnd", level.dofdefault[ "nearEnd" ] ); - } - if ( level.dofdefault[ "farStart" ] >= level.dofdefault[ "farEnd" ] ) - { - level.dofdefault[ "farStart" ] = level.dofdefault[ "farEnd" ] - 1; - setdvar( "scr_dof_farStart", level.dofdefault[ "farStart" ] ); - } - if ( level.dofdefault[ "farEnd" ] <= level.dofdefault[ "farStart" ] ) - { - level.dofdefault[ "farEnd" ] = level.dofdefault[ "farStart" ] + 1; - setdvar( "scr_dof_farEnd", level.dofdefault[ "farEnd" ] ); - } - if ( level.dofdefault[ "farBlur" ] >= level.dofdefault[ "nearBlur" ] ) - { - level.dofdefault[ "farBlur" ] = level.dofdefault[ "nearBlur" ] - 0,1; - setdvar( "scr_dof_farBlur", level.dofdefault[ "farBlur" ] ); - } - if ( level.dofdefault[ "farStart" ] <= level.dofdefault[ "nearEnd" ] ) - { - level.dofdefault[ "farStart" ] = level.dofdefault[ "nearEnd" ] + 1; - setdvar( "scr_dof_farStart", level.dofdefault[ "farStart" ] ); - } -} - -dumpsettings() -{ -/# - if ( getDvar( "scr_art_dump" ) != "0" ) - { - println( "\tstart_dist = " + level.fognearplane + ";" ); - println( "\thalf_dist = " + level.fogexphalfplane + ";" ); - println( "\thalf_height = " + level.fogexphalfheight + ";" ); - println( "\tbase_height = " + level.fogbaseheight + ";" ); - println( "\tfog_r = " + level.fogcolorred + ";" ); - println( "\tfog_g = " + level.fogcolorgreen + ";" ); - println( "\tfog_b = " + level.fogcolorblue + ";" ); - println( "\tfog_scale = " + level.fogcolorscale + ";" ); - println( "\tsun_col_r = " + level.sunfogcolorred + ";" ); - println( "\tsun_col_g = " + level.sunfogcolorgreen + ";" ); - println( "\tsun_col_b = " + level.sunfogcolorblue + ";" ); - println( "\tsun_dir_x = " + level.fogsundir[ 0 ] + ";" ); - println( "\tsun_dir_y = " + level.fogsundir[ 1 ] + ";" ); - println( "\tsun_dir_z = " + level.fogsundir[ 2 ] + ";" ); - println( "\tsun_start_ang = " + level.sunstartangle + ";" ); - println( "\tsun_stop_ang = " + level.sunendangle + ";" ); - println( "\ttime = 0;" ); - println( "\tmax_fog_opacity = " + level.fogmaxopacity + ";" ); - println( "" ); - println( "\tsetVolFog(start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale," ); - println( "\t\tsun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, " ); - println( "\t\tsun_stop_ang, time, max_fog_opacity);" ); - setdvar( "scr_art_dump", "0" ); -#/ - } -} - -debug_reflection() -{ -/# - level.debug_reflection = 0; - while ( 1 ) - { - wait 0,1; - if ( getDvar( "debug_reflection" ) == "2" || level.debug_reflection != 2 && getDvar( "debug_reflection" ) == "3" && level.debug_reflection != 3 ) - { - remove_reflection_objects(); - if ( getDvar( "debug_reflection" ) == "2" ) - { - create_reflection_objects(); - level.debug_reflection = 2; - } - else - { - create_reflection_objects(); - create_reflection_object(); - level.debug_reflection = 3; - } - continue; - } - else - { - if ( getDvar( "debug_reflection" ) == "1" && level.debug_reflection != 1 ) - { - setdvar( "debug_reflection_matte", "0" ); - setdvar( "debug_color_pallete", "0" ); - remove_reflection_objects(); - create_reflection_object(); - level.debug_reflection = 1; - break; - } - else - { - if ( getDvar( "debug_reflection" ) == "0" && level.debug_reflection != 0 ) - { - remove_reflection_objects(); - level.debug_reflection = 0; - } - } - } -#/ - } -} - -remove_reflection_objects() -{ -/# - if ( level.debug_reflection != 2 && level.debug_reflection == 3 && isDefined( level.debug_reflection_objects ) ) - { - i = 0; - while ( i < level.debug_reflection_objects.size ) - { - level.debug_reflection_objects[ i ] delete(); - i++; - } - level.debug_reflection_objects = undefined; - } - if ( level.debug_reflection != 1 && level.debug_reflection != 3 && level.debug_reflection_matte != 1 || level.debug_color_pallete == 1 && level.debug_color_pallete == 2 ) - { - if ( isDefined( level.debug_reflectionobject ) ) - { - level.debug_reflectionobject delete(); -#/ - } - } -} - -create_reflection_objects() -{ -/# - reflection_locs = getreflectionlocs(); - i = 0; - while ( i < reflection_locs.size ) - { - level.debug_reflection_objects[ i ] = spawn( "script_model", reflection_locs[ i ] ); - level.debug_reflection_objects[ i ] setmodel( "test_sphere_silver" ); - i++; -#/ - } -} - -create_reflection_object( model ) -{ - if ( !isDefined( model ) ) - { - model = "test_sphere_silver"; - } -/# - if ( isDefined( level.debug_reflectionobject ) ) - { - level.debug_reflectionobject delete(); - } - players = get_players(); - player = players[ 0 ]; - level.debug_reflectionobject = spawn( "script_model", player geteye() + vectorScale( anglesToForward( player.angles ), 100 ) ); - level.debug_reflectionobject setmodel( model ); - level.debug_reflectionobject.origin = player geteye() + vectorScale( anglesToForward( player getplayerangles() ), 100 ); - level.debug_reflectionobject linkto( player ); - thread debug_reflection_buttons(); -#/ -} - -debug_reflection_buttons() -{ -/# - level notify( "new_reflection_button_running" ); - level endon( "new_reflection_button_running" ); - level.debug_reflectionobject endon( "death" ); - offset = 100; - lastoffset = offset; - while ( getDvar( "debug_reflection" ) != "1" && getDvar( "debug_reflection" ) != "3" && getDvar( "debug_reflection_matte" ) != "1" || getDvar( "debug_color_pallete" ) == "1" && getDvar( "debug_color_pallete" ) == "2" ) - { - players = get_players(); - if ( players[ 0 ] buttonpressed( "BUTTON_X" ) ) - { - offset += 50; - } - if ( players[ 0 ] buttonpressed( "BUTTON_Y" ) ) - { - offset -= 50; - } - if ( offset > 1000 ) - { - offset = 1000; - } - if ( offset < 64 ) - { - offset = 64; - } - level.debug_reflectionobject unlink(); - level.debug_reflectionobject.origin = players[ 0 ] geteye() + vectorScale( anglesToForward( players[ 0 ] getplayerangles() ), offset ); - temp_angles = vectorToAngle( players[ 0 ].origin - level.debug_reflectionobject.origin ); - level.debug_reflectionobject.angles = ( 0, temp_angles[ 1 ], 0 ); - lastoffset = offset; - line( level.debug_reflectionobject.origin, getreflectionorigin( level.debug_reflectionobject.origin ), ( 1, 0, 0 ), 1, 1 ); - wait 0,05; - if ( isDefined( level.debug_reflectionobject ) ) - { - level.debug_reflectionobject linkto( players[ 0 ] ); - } -#/ - } -} - -debug_reflection_matte() -{ -/# - level.debug_reflection_matte = 0; - while ( 1 ) - { - wait 0,1; - if ( getDvar( "debug_reflection_matte" ) == "1" && level.debug_reflection_matte != 1 ) - { - setdvar( "debug_reflection", "0" ); - setdvar( "debug_color_pallete", "0" ); - remove_reflection_objects(); - create_reflection_object( "test_sphere_lambert" ); - level.debug_reflection_matte = 1; - continue; - } - else - { - if ( getDvar( "debug_reflection_matte" ) == "0" && level.debug_reflection_matte != 0 ) - { - remove_reflection_objects(); - level.debug_reflection_matte = 0; - } - } -#/ - } -} - -debug_color_pallete() -{ -/# - level.debug_color_pallete = 0; - while ( 1 ) - { - wait 0,1; - if ( getDvar( "debug_color_pallete" ) == "1" && level.debug_color_pallete != 1 ) - { - setdvar( "debug_reflection", "0" ); - setdvar( "debug_reflection_matte", "0" ); - remove_reflection_objects(); - create_reflection_object( "test_macbeth_chart" ); - level.debug_color_pallete = 1; - continue; - } - else - { - if ( getDvar( "debug_color_pallete" ) == "2" && level.debug_color_pallete != 2 ) - { - remove_reflection_objects(); - create_reflection_object( "test_macbeth_chart_unlit" ); - level.debug_color_pallete = 2; - break; - } - else - { - if ( getDvar( "debug_color_pallete" ) == "0" && level.debug_color_pallete != 0 ) - { - remove_reflection_objects(); - level.debug_color_pallete = 0; - } - } - } -#/ - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_audio.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_audio.gsc deleted file mode 100644 index bbfcf66..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_audio.gsc +++ /dev/null @@ -1,150 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ -} - -wait_until_first_player() -{ - players = get_players(); - if ( !isDefined( players[ 0 ] ) ) - { - level waittill( "first_player_ready" ); - } - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] thread monitor_player_sprint(); - i++; - } -} - -stand_think( trig ) -{ - killtext = "kill_stand_think" + trig getentitynumber(); - self endon( "disconnect" ); - self endon( "death" ); - self endon( killtext ); - while ( 1 ) - { - if ( self.player_is_moving ) - { - trig playsound( trig.script_label ); - } - wait 1; - } -} - -monitor_player_sprint() -{ - self endon( "disconnect" ); - self thread monitor_player_movement(); - self._is_sprinting = 0; - while ( 1 ) - { - self waittill( "sprint_begin" ); - self._is_sprinting = 1; - self waittill( "sprint_end" ); - self._is_sprinting = 0; - } -} - -monitor_player_movement() -{ - self endon( "disconnect" ); - while ( 1 ) - { - org_1 = self.origin; - wait 1; - org_2 = self.origin; - distancemoved = distancesquared( org_1, org_2 ); - if ( distancemoved > 4096 ) - { - self.player_is_moving = 1; - continue; - } - else - { - self.player_is_moving = 0; - } - } -} - -thread_enter_exit_sound( trig ) -{ - self endon( "death" ); - self endon( "disconnect" ); - trig.touchingplayers[ self getentitynumber() ] = 1; - if ( isDefined( trig.script_sound ) && trig.script_activated && self._is_sprinting ) - { - self playsound( trig.script_sound ); - } - self thread stand_think( trig ); - while ( self istouching( trig ) ) - { - wait 0,1; - } - self notify( "kill_stand_think" + trig getentitynumber() ); - self playsound( trig.script_noteworthy ); - trig.touchingplayers[ self getentitynumber() ] = 0; -} - -thread_step_trigger() -{ - if ( !isDefined( self.script_activated ) ) - { - self.script_activated = 1; - } - while ( !isDefined( self.touchingplayers ) ) - { - self.touchingplayers = []; - i = 0; - while ( i < 4 ) - { - self.touchingplayers[ i ] = 0; - i++; - } - } - while ( 1 ) - { - self waittill( "trigger", who ); - if ( self.touchingplayers[ who getentitynumber() ] == 0 ) - { - who thread thread_enter_exit_sound( self ); - } - } -} - -disable_bump_trigger( triggername ) -{ - triggers = getentarray( "audio_bump_trigger", "targetname" ); - while ( isDefined( triggers ) ) - { - i = 0; - while ( i < triggers.size ) - { - if ( isDefined( triggers[ i ].script_label ) && triggers[ i ].script_label == triggername ) - { - triggers[ i ].script_activated = 0; - } - i++; - } - } -} - -get_player_index_number( player ) -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] == player ) - { - return i; - } - i++; - } - return 1; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_ballistic_knife.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_ballistic_knife.gsc deleted file mode 100644 index 8b4286c..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_ballistic_knife.gsc +++ /dev/null @@ -1,273 +0,0 @@ -#include maps/mp/_challenges; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - precachemodel( "t6_wpn_ballistic_knife_projectile" ); - precachemodel( "t6_wpn_ballistic_knife_blade_retrieve" ); -} - -onspawn( watcher, player ) -{ - player endon( "death" ); - player endon( "disconnect" ); - level endon( "game_ended" ); - self waittill( "stationary", endpos, normal, angles, attacker, prey, bone ); - isfriendly = 0; - if ( isDefined( endpos ) ) - { - retrievable_model = spawn( "script_model", endpos ); - retrievable_model setmodel( "t6_wpn_ballistic_knife_projectile" ); - retrievable_model setteam( player.team ); - retrievable_model setowner( player ); - retrievable_model.owner = player; - retrievable_model.angles = angles; - retrievable_model.name = watcher.weapon; - retrievable_model.targetname = "sticky_weapon"; - if ( isDefined( prey ) ) - { - if ( level.teambased && isplayer( prey ) && player.team == prey.team ) - { - isfriendly = 1; - } - else - { - if ( level.teambased && isai( prey ) && player.team == prey.aiteam ) - { - isfriendly = 1; - } - } - if ( !isfriendly ) - { - if ( isalive( prey ) ) - { - retrievable_model droptoground( retrievable_model.origin, 80 ); - } - else - { - retrievable_model linkto( prey, bone ); - } - } - else - { - if ( isfriendly ) - { - retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) ); - normal = ( 0, 0, 1 ); - } - } - } - watcher.objectarray[ watcher.objectarray.size ] = retrievable_model; - if ( isfriendly ) - { - retrievable_model waittill( "stationary" ); - } - retrievable_model thread dropknivestoground(); - if ( isfriendly ) - { - player notify( "ballistic_knife_stationary" ); - } - else - { - player notify( "ballistic_knife_stationary" ); - } - retrievable_model thread wait_to_show_glowing_model( prey ); - } -} - -wait_to_show_glowing_model( prey ) -{ - level endon( "game_ended" ); - self endon( "death" ); - glowing_retrievable_model = spawn( "script_model", self.origin ); - self.glowing_model = glowing_retrievable_model; - glowing_retrievable_model.angles = self.angles; - glowing_retrievable_model linkto( self ); - if ( isDefined( prey ) && !isalive( prey ) ) - { - wait 2; - } - glowing_retrievable_model setmodel( "t6_wpn_ballistic_knife_blade_retrieve" ); -} - -watch_shutdown() -{ - pickuptrigger = self.pickuptrigger; - glowing_model = self.glowing_model; - self waittill( "death" ); - if ( isDefined( pickuptrigger ) ) - { - pickuptrigger delete(); - } - if ( isDefined( glowing_model ) ) - { - glowing_model delete(); - } -} - -onspawnretrievetrigger( watcher, player ) -{ - player endon( "death" ); - player endon( "disconnect" ); - level endon( "game_ended" ); - player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey ); - if ( !isDefined( retrievable_model ) ) - { - return; - } - vec_scale = 10; - trigger_pos = []; - if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) ) - { - trigger_pos[ 0 ] = prey.origin[ 0 ]; - trigger_pos[ 1 ] = prey.origin[ 1 ]; - trigger_pos[ 2 ] = prey.origin[ 2 ] + vec_scale; - } - else - { - trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( vec_scale * normal[ 0 ] ); - trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( vec_scale * normal[ 1 ] ); - trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( vec_scale * normal[ 2 ] ); - } - trigger_pos[ 2 ] -= 50; - pickup_trigger = spawn( "trigger_radius", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ), 0, 50, 100 ); - pickup_trigger.owner = player; - retrievable_model.pickuptrigger = pickup_trigger; - pickup_trigger enablelinkto(); - if ( isDefined( prey ) ) - { - pickup_trigger linkto( prey ); - } - else - { - pickup_trigger linkto( retrievable_model ); - } - retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.pickupsoundplayer, watcher.pickupsound ); - retrievable_model thread watch_shutdown(); -} - -watch_use_trigger( trigger, model, callback, playersoundonuse, npcsoundonuse ) -{ - self endon( "death" ); - self endon( "delete" ); - level endon( "game_ended" ); - max_ammo = weaponmaxammo( "knife_ballistic_mp" ) + 1; - while ( 1 ) - { - trigger waittill( "trigger", player ); - while ( !isalive( player ) ) - { - continue; - } - while ( !player isonground() ) - { - continue; - } - if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam ) - { - continue; - } - if ( isDefined( trigger.claimedby ) && player != trigger.claimedby ) - { - continue; - } - while ( !player hasweapon( "knife_ballistic_mp" ) ) - { - continue; - } - ammo_stock = player getweaponammostock( "knife_ballistic_mp" ); - ammo_clip = player getweaponammoclip( "knife_ballistic_mp" ); - current_weapon = player getcurrentweapon(); - total_ammo = ammo_stock + ammo_clip; - hasreloaded = 1; - if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == "knife_ballistic_mp" ) - { - hasreloaded = 0; - } - if ( total_ammo >= max_ammo || !hasreloaded ) - { - continue; - } - if ( isDefined( playersoundonuse ) ) - { - player playlocalsound( playersoundonuse ); - } - if ( isDefined( npcsoundonuse ) ) - { - player playsound( npcsoundonuse ); - } - self thread [[ callback ]]( player ); - return; - } -} - -pick_up( player ) -{ - self destroy_ent(); - current_weapon = player getcurrentweapon(); - player maps/mp/_challenges::pickedupballisticknife(); - if ( current_weapon != "knife_ballistic_mp" ) - { - clip_ammo = player getweaponammoclip( "knife_ballistic_mp" ); - if ( !clip_ammo ) - { - player setweaponammoclip( "knife_ballistic_mp", 1 ); - } - else - { - new_ammo_stock = player getweaponammostock( "knife_ballistic_mp" ) + 1; - player setweaponammostock( "knife_ballistic_mp", new_ammo_stock ); - } - } - else - { - new_ammo_stock = player getweaponammostock( "knife_ballistic_mp" ) + 1; - player setweaponammostock( "knife_ballistic_mp", new_ammo_stock ); - } -} - -destroy_ent() -{ - if ( isDefined( self ) ) - { - pickuptrigger = self.pickuptrigger; - if ( isDefined( pickuptrigger ) ) - { - pickuptrigger delete(); - } - if ( isDefined( self.glowing_model ) ) - { - self.glowing_model delete(); - } - self delete(); - } -} - -dropknivestoground() -{ - self endon( "death" ); - for ( ;; ) - { - level waittill( "drop_objects_to_ground", origin, radius ); - self droptoground( origin, radius ); - } -} - -droptoground( origin, radius ) -{ - if ( distancesquared( origin, self.origin ) < ( radius * radius ) ) - { - self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) ); - self thread updateretrievetrigger(); - } -} - -updateretrievetrigger() -{ - self endon( "death" ); - self waittill( "stationary" ); - trigger = self.pickuptrigger; - trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 ); - trigger linkto( self ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_bb.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_bb.gsc deleted file mode 100644 index d24054b..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_bb.gsc +++ /dev/null @@ -1,87 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - level thread onplayerconnect(); -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connected", player ); - player thread onplayerspawned(); - player thread onplayerdeath(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - self._bbdata = []; - for ( ;; ) - { - self waittill( "spawned_player" ); - self._bbdata[ "score" ] = 0; - self._bbdata[ "momentum" ] = 0; - self._bbdata[ "spawntime" ] = getTime(); - self._bbdata[ "shots" ] = 0; - self._bbdata[ "hits" ] = 0; - } -} - -onplayerdisconnect() -{ - for ( ;; ) - { - self waittill( "disconnect" ); - self commitspawndata(); - return; - } -} - -onplayerdeath() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "death" ); - self commitspawndata(); - } -} - -commitspawndata() -{ -/# - assert( isDefined( self._bbdata ) ); -#/ - if ( !isDefined( self._bbdata ) ) - { - return; - } - bbprint( "mpplayerlives", "gametime %d spawnid %d lifescore %d lifemomentum %d lifetime %d name %s", getTime(), getplayerspawnid( self ), self._bbdata[ "score" ], self._bbdata[ "momentum" ], getTime() - self._bbdata[ "spawntime" ], self.name ); -} - -commitweapondata( spawnid, currentweapon, time0 ) -{ -/# - assert( isDefined( self._bbdata ) ); -#/ - if ( !isDefined( self._bbdata ) ) - { - return; - } - time1 = getTime(); - bbprint( "mpweapons", "spawnid %d name %s duration %d shots %d hits %d", spawnid, currentweapon, time1 - time0, self._bbdata[ "shots" ], self._bbdata[ "hits" ] ); - self._bbdata[ "shots" ] = 0; - self._bbdata[ "hits" ] = 0; -} - -bbaddtostat( statname, delta ) -{ - if ( isDefined( self._bbdata ) && isDefined( self._bbdata[ statname ] ) ) - { - self._bbdata[ statname ] += delta; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_busing.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_busing.gsc deleted file mode 100644 index 75250e7..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_busing.gsc +++ /dev/null @@ -1,19 +0,0 @@ -#include maps/mp/_utility; - -businit() -{ -/# - assert( level.clientscripts ); -#/ - level.busstate = ""; - registerclientsys( "busCmd" ); -} - -setbusstate( state ) -{ - if ( level.busstate != state ) - { - setclientsysstate( "busCmd", state ); - } - level.busstate = state; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_challenges.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_challenges.gsc deleted file mode 100644 index cd9dc43..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_challenges.gsc +++ /dev/null @@ -1,2109 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - if ( !isDefined( level.challengescallbacks ) ) - { - level.challengescallbacks = []; - } - waittillframeend; - if ( canprocesschallenges() ) - { - registerchallengescallback( "playerKilled", ::challengekills ); - registerchallengescallback( "gameEnd", ::challengegameend ); - registerchallengescallback( "roundEnd", ::challengeroundend ); - } - level thread onplayerconnect(); - _a24 = level.teams; - _k24 = getFirstArrayKey( _a24 ); - while ( isDefined( _k24 ) ) - { - team = _a24[ _k24 ]; - initteamchallenges( team ); - _k24 = getNextArrayKey( _a24, _k24 ); - } -} - -addflyswatterstat( weapon, aircraft ) -{ - if ( !isDefined( self.pers[ "flyswattercount" ] ) ) - { - self.pers[ "flyswattercount" ] = 0; - } - self addweaponstat( weapon, "destroyed_aircraft", 1 ); - self.pers[ "flyswattercount" ]++; - if ( self.pers[ "flyswattercount" ] == 5 ) - { - self addweaponstat( weapon, "destroyed_5_aircraft", 1 ); - } - if ( isDefined( aircraft ) && isDefined( aircraft.birthtime ) ) - { - if ( ( getTime() - aircraft.birthtime ) < 20000 ) - { - self addweaponstat( weapon, "destroyed_aircraft_under20s", 1 ); - } - } - if ( !isDefined( self.destroyedaircrafttime ) ) - { - self.destroyedaircrafttime = []; - } - if ( isDefined( self.destroyedaircrafttime[ weapon ] ) && ( getTime() - self.destroyedaircrafttime[ weapon ] ) < 10000 ) - { - self addweaponstat( weapon, "destroyed_2aircraft_quickly", 1 ); - } - else - { - self.destroyedaircrafttime[ weapon ] = getTime(); - } -} - -canprocesschallenges() -{ -/# - if ( getdvarintdefault( "scr_debug_challenges", 0 ) ) - { - return 1; -#/ - } - if ( level.rankedmatch || level.wagermatch ) - { - return 1; - } - return 0; -} - -initteamchallenges( team ) -{ - if ( !isDefined( game[ "challenge" ] ) ) - { - game[ "challenge" ] = []; - } - if ( !isDefined( game[ "challenge" ][ team ] ) ) - { - game[ "challenge" ][ team ] = []; - game[ "challenge" ][ team ][ "plantedBomb" ] = 0; - game[ "challenge" ][ team ][ "destroyedBombSite" ] = 0; - game[ "challenge" ][ team ][ "capturedFlag" ] = 0; - } - game[ "challenge" ][ team ][ "allAlive" ] = 1; -} - -registerchallengescallback( callback, func ) -{ - if ( !isDefined( level.challengescallbacks[ callback ] ) ) - { - level.challengescallbacks[ callback ] = []; - } - level.challengescallbacks[ callback ][ level.challengescallbacks[ callback ].size ] = func; -} - -dochallengecallback( callback, data ) -{ - if ( !isDefined( level.challengescallbacks ) ) - { - return; - } - if ( !isDefined( level.challengescallbacks[ callback ] ) ) - { - return; - } - if ( isDefined( data ) ) - { - i = 0; - while ( i < level.challengescallbacks[ callback ].size ) - { - thread [[ level.challengescallbacks[ callback ][ i ] ]]( data ); - i++; - } - } - else i = 0; - while ( i < level.challengescallbacks[ callback ].size ) - { - thread [[ level.challengescallbacks[ callback ][ i ] ]](); - i++; - } -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connected", player ); - player thread initchallengedata(); - player thread spawnwatcher(); - player thread monitorreloads(); - } -} - -monitorreloads() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "reload" ); - currentweapon = self getcurrentweapon(); - while ( currentweapon == "none" ) - { - continue; - } - time = getTime(); - self.lastreloadtime = time; - if ( currentweapon == "crossbow_mp" ) - { - self.crossbowclipkillcount = 0; - } - if ( weaponhasattachment( currentweapon, "dualclip" ) ) - { - self thread reloadthenkill( currentweapon ); - } - } -} - -reloadthenkill( reloadweapon ) -{ - self endon( "disconnect" ); - self endon( "death" ); - self endon( "reloadThenKillTimedOut" ); - self notify( "reloadThenKillStart" ); - self endon( "reloadThenKillStart" ); - self thread reloadthenkilltimeout( 5 ); - for ( ;; ) - { - self waittill( "killed_enemy_player", time, weapon ); - if ( reloadweapon == weapon ) - { - self addplayerstat( "reload_then_kill_dualclip", 1 ); - } - } -} - -reloadthenkilltimeout( time ) -{ - self endon( "disconnect" ); - self endon( "death" ); - self endon( "reloadThenKillStart" ); - wait time; - self notify( "reloadThenKillTimedOut" ); -} - -initchallengedata() -{ - self.pers[ "bulletStreak" ] = 0; - self.pers[ "lastBulletKillTime" ] = 0; - self.pers[ "stickExplosiveKill" ] = 0; - self.pers[ "carepackagesCalled" ] = 0; - self.explosiveinfo = []; -} - -isdamagefromplayercontrolledaitank( eattacker, einflictor, sweapon ) -{ - if ( sweapon == "ai_tank_drone_gun_mp" ) - { - if ( isDefined( eattacker ) && isDefined( eattacker.remoteweapon ) && isDefined( einflictor ) ) - { - if ( isDefined( einflictor.controlled ) && einflictor.controlled == 1 ) - { - if ( eattacker.remoteweapon == einflictor ) - { - return 1; - } - } - } - } - else - { - if ( sweapon == "ai_tank_drone_rocket_mp" ) - { - if ( isDefined( einflictor ) && !isDefined( einflictor.from_ai ) ) - { - return 1; - } - } - } - return 0; -} - -isdamagefromplayercontrolledsentry( eattacker, einflictor, sweapon ) -{ - if ( sweapon == "auto_gun_turret_mp" ) - { - if ( isDefined( eattacker ) && isDefined( eattacker.remoteweapon ) && isDefined( einflictor ) ) - { - if ( eattacker.remoteweapon == einflictor ) - { - if ( isDefined( einflictor.controlled ) && einflictor.controlled == 1 ) - { - return 1; - } - } - } - } - return 0; -} - -challengekills( data, time ) -{ - victim = data.victim; - player = data.attacker; - attacker = data.attacker; - time = data.time; - victim = data.victim; - weapon = data.sweapon; - time = data.time; - inflictor = data.einflictor; - meansofdeath = data.smeansofdeath; - wasplanting = data.wasplanting; - wasdefusing = data.wasdefusing; - lastweaponbeforetoss = data.lastweaponbeforetoss; - ownerweaponatlaunch = data.ownerweaponatlaunch; - if ( !isDefined( data.sweapon ) ) - { - return; - } - if ( !isDefined( player ) || !isplayer( player ) ) - { - return; - } - weaponclass = getweaponclass( weapon ); - game[ "challenge" ][ victim.team ][ "allAlive" ] = 0; - if ( level.teambased ) - { - if ( player.team == victim.team ) - { - return; - } - } - else - { - if ( player == victim ) - { - return; - } - } - if ( isdamagefromplayercontrolledaitank( player, inflictor, weapon ) == 1 ) - { - player addplayerstat( "kill_with_remote_control_ai_tank", 1 ); - } - if ( weapon == "auto_gun_turret_mp" ) - { - if ( isDefined( inflictor ) ) - { - if ( !isDefined( inflictor.killcount ) ) - { - inflictor.killcount = 0; - } - inflictor.killcount++; - if ( inflictor.killcount >= 5 ) - { - inflictor.killcount = 0; - player addplayerstat( "killstreak_5_with_sentry_gun", 1 ); - } - } - if ( isdamagefromplayercontrolledsentry( player, inflictor, weapon ) == 1 ) - { - player addplayerstat( "kill_with_remote_control_sentry_gun", 1 ); - } - } - if ( weapon == "minigun_mp" ) - { - player.deathmachinekills++; - if ( player.deathmachinekills >= 5 ) - { - player.deathmachinekills = 0; - player addplayerstat( "killstreak_5_with_death_machine", 1 ); - } - } - if ( data.waslockingon == 1 && weapon == "chopper_minigun_mp" ) - { - player addplayerstat( "kill_enemy_locking_on_with_chopper_gunner", 1 ); - } - if ( isDefined( level.iskillstreakweapon ) ) - { - if ( [[ level.iskillstreakweapon ]]( data.sweapon ) ) - { - return; - } - } - attacker notify( "killed_enemy_player" ); - if ( isDefined( player.primaryloadoutweapon ) && weapon == player.primaryloadoutweapon ) - { - if ( player isbonuscardactive( 0, player.class_num ) ) - { - player addbonuscardstat( 0, "kills", 1, player.class_num ); - player addplayerstat( "kill_with_loadout_weapon_with_3_attachments", 1 ); - } - if ( isDefined( player.secondaryweaponkill ) && player.secondaryweaponkill == 1 ) - { - player.primaryweaponkill = 0; - player.secondaryweaponkill = 0; - if ( player isbonuscardactive( 2, player.class_num ) ) - { - player addbonuscardstat( 2, "kills", 1, player.class_num ); - player addplayerstat( "kill_with_both_primary_weapons", 1 ); - } - } - else - { - player.primaryweaponkill = 1; - } - } - else - { - if ( isDefined( player.secondaryloadoutweapon ) && weapon == player.secondaryloadoutweapon ) - { - if ( player isbonuscardactive( 1, player.class_num ) ) - { - player addbonuscardstat( 1, "kills", 1, player.class_num ); - } - if ( isDefined( player.primaryweaponkill ) && player.primaryweaponkill == 1 ) - { - player.primaryweaponkill = 0; - player.secondaryweaponkill = 0; - if ( player isbonuscardactive( 2, player.class_num ) ) - { - player addbonuscardstat( 2, "kills", 1, player.class_num ); - player addplayerstat( "kill_with_both_primary_weapons", 1 ); - } - } - else - { - player.secondaryweaponkill = 1; - } - } - } - if ( !player isbonuscardactive( 5, player.class_num ) || player isbonuscardactive( 4, player.class_num ) && player isbonuscardactive( 3, player.class_num ) ) - { - player addplayerstat( "kill_with_2_perks_same_category", 1 ); - } - baseweaponname = getreffromitemindex( getbaseweaponitemindex( weapon ) ) + "_mp"; - if ( isDefined( player.weaponkills[ baseweaponname ] ) ) - { - player.weaponkills[ baseweaponname ]++; - if ( player.weaponkills[ baseweaponname ] == 5 ) - { - player addweaponstat( baseweaponname, "killstreak_5", 1 ); - } - if ( player.weaponkills[ baseweaponname ] == 10 ) - { - player addweaponstat( baseweaponname, "killstreak_10", 1 ); - } - } - else - { - player.weaponkills[ baseweaponname ] = 1; - } - attachmentname = player getweaponoptic( weapon ); - if ( isDefined( attachmentname ) && attachmentname != "" ) - { - if ( isDefined( player.attachmentkills[ attachmentname ] ) ) - { - player.attachmentkills[ attachmentname ]++; - if ( player.attachmentkills[ attachmentname ] == 5 ) - { - player addweaponstat( weapon, "killstreak_5_attachment", 1 ); - } - } - else - { - player.attachmentkills[ attachmentname ] = 1; - } - } -/# - assert( isDefined( player.activecounteruavs ) ); -#/ -/# - assert( isDefined( player.activeuavs ) ); -#/ -/# - assert( isDefined( player.activesatellites ) ); -#/ - if ( player.activeuavs > 0 ) - { - player addplayerstat( "kill_while_uav_active", 1 ); - } - if ( player.activecounteruavs > 0 ) - { - player addplayerstat( "kill_while_cuav_active", 1 ); - } - if ( player.activesatellites > 0 ) - { - player addplayerstat( "kill_while_satellite_active", 1 ); - } - if ( isDefined( attacker.tacticalinsertiontime ) && ( attacker.tacticalinsertiontime + 5000 ) > time ) - { - player addplayerstat( "kill_after_tac_insert", 1 ); - player addweaponstat( "tactical_insertion_mp", "CombatRecordStat", 1 ); - } - if ( isDefined( victim.tacticalinsertiontime ) && ( victim.tacticalinsertiontime + 5000 ) > time ) - { - player addweaponstat( "tactical_insertion_mp", "headshots", 1 ); - } - if ( isDefined( level.isplayertrackedfunc ) ) - { - if ( attacker [[ level.isplayertrackedfunc ]]( victim, time ) ) - { - attacker addplayerstat( "kill_enemy_revealed_by_sensor", 1 ); - attacker addweaponstat( "sensor_grenade_mp", "CombatRecordStat", 1 ); - } - } - if ( level.teambased ) - { - activeempowner = level.empowners[ player.team ]; - if ( isDefined( activeempowner ) ) - { - if ( activeempowner == player ) - { - player addplayerstat( "kill_while_emp_active", 1 ); - } - } - } - else - { - if ( isDefined( level.empplayer ) ) - { - if ( level.empplayer == player ) - { - player addplayerstat( "kill_while_emp_active", 1 ); - } - } - } - if ( isDefined( player.flakjacketclaymore[ victim.clientid ] ) && player.flakjacketclaymore[ victim.clientid ] == 1 ) - { - player addplayerstat( "survive_claymore_kill_planter_flak_jacket_equipped", 1 ); - } - if ( isDefined( player.dogsactive ) ) - { - if ( weapon != "dog_bite_mp" ) - { - player.dogsactivekillstreak++; - if ( player.dogsactivekillstreak > 5 ) - { - player addplayerstat( "killstreak_5_dogs", 1 ); - } - } - } - isstunned = 0; - if ( victim maps/mp/_utility::isflashbanged() ) - { - if ( isDefined( victim.lastflashedby ) && victim.lastflashedby == player ) - { - player addplayerstat( "kill_flashed_enemy", 1 ); - player addweaponstat( "flash_grenade_mp", "CombatRecordStat", 1 ); - } - isstunned = 1; - } - if ( isDefined( victim.concussionendtime ) && victim.concussionendtime > getTime() ) - { - if ( isDefined( victim.lastconcussedby ) && victim.lastconcussedby == player ) - { - player addplayerstat( "kill_concussed_enemy", 1 ); - player addweaponstat( "concussion_grenade_mp", "CombatRecordStat", 1 ); - } - isstunned = 1; - } - if ( isDefined( player.laststunnedby ) ) - { - if ( player.laststunnedby == victim && ( player.laststunnedtime + 5000 ) > time ) - { - player addplayerstat( "kill_enemy_who_shocked_you", 1 ); - } - } - if ( isDefined( victim.laststunnedby ) && ( victim.laststunnedtime + 5000 ) > time ) - { - isstunned = 1; - if ( victim.laststunnedby == player ) - { - player addplayerstat( "kill_shocked_enemy", 1 ); - player addweaponstat( "proximity_grenade_mp", "CombatRecordStat", 1 ); - if ( data.smeansofdeath == "MOD_MELEE" ) - { - player addplayerstat( "shock_enemy_then_stab_them", 1 ); - } - } - } - if ( ( player.mantletime + 5000 ) > time ) - { - player addplayerstat( "mantle_then_kill", 1 ); - } - if ( isDefined( player.tookweaponfrom ) && isDefined( player.tookweaponfrom[ weapon ] ) && isDefined( player.tookweaponfrom[ weapon ].previousowner ) ) - { - if ( level.teambased ) - { - if ( player.tookweaponfrom[ weapon ].previousowner.team != player.team ) - { - player.pickedupweaponkills[ weapon ]++; - player addplayerstat( "kill_enemy_with_picked_up_weapon", 1 ); - } - } - else - { - player.pickedupweaponkills[ weapon ]++; - player addplayerstat( "kill_enemy_with_picked_up_weapon", 1 ); - } - if ( player.pickedupweaponkills[ weapon ] >= 5 ) - { - player.pickedupweaponkills[ weapon ] = 0; - player addplayerstat( "killstreak_5_picked_up_weapon", 1 ); - } - } - if ( isDefined( victim.explosiveinfo[ "originalOwnerKill" ] ) && victim.explosiveinfo[ "originalOwnerKill" ] == 1 ) - { - if ( victim.explosiveinfo[ "damageExplosiveKill" ] == 1 ) - { - player addplayerstat( "kill_enemy_shoot_their_explosive", 1 ); - } - } - if ( data.attackerstance == "crouch" ) - { - player addplayerstat( "kill_enemy_while_crouched", 1 ); - } - else - { - if ( data.attackerstance == "prone" ) - { - player addplayerstat( "kill_enemy_while_prone", 1 ); - } - } - if ( data.victimstance == "prone" ) - { - player addplayerstat( "kill_prone_enemy", 1 ); - } - if ( data.smeansofdeath != "MOD_HEAD_SHOT" || data.smeansofdeath == "MOD_PISTOL_BULLET" && data.smeansofdeath == "MOD_RIFLE_BULLET" ) - { - player genericbulletkill( data, victim, weapon ); - } - if ( level.teambased ) - { - if ( !isDefined( player.pers[ "kill_every_enemy" ] ) && level.playercount[ victim.pers[ "team" ] ] > 3 && player.pers[ "killed_players" ].size >= level.playercount[ victim.pers[ "team" ] ] ) - { - player addplayerstat( "kill_every_enemy", 1 ); - player.pers[ "kill_every_enemy" ] = 1; - } - } - switch( weaponclass ) - { - case "weapon_pistol": - if ( data.smeansofdeath == "MOD_HEAD_SHOT" ) - { - player.pers[ "pistolHeadshot" ]++; - if ( player.pers[ "pistolHeadshot" ] >= 10 ) - { - player.pers[ "pistolHeadshot" ] = 0; - player addplayerstat( "pistolHeadshot_10_onegame", 1 ); - } - } - break; - case "weapon_assault": - if ( data.smeansofdeath == "MOD_HEAD_SHOT" ) - { - player.pers[ "assaultRifleHeadshot" ]++; - if ( player.pers[ "assaultRifleHeadshot" ] >= 5 ) - { - player.pers[ "assaultRifleHeadshot" ] = 0; - player addplayerstat( "headshot_assault_5_onegame", 1 ); - } - } - break; - case "weapon_lmg": - case "weapon_smg": - case "weapon_sniper": - if ( isDefined( victim.firsttimedamaged ) && victim.firsttimedamaged == time ) - { - player addplayerstat( "kill_enemy_one_bullet_sniper", 1 ); - player addweaponstat( weapon, "kill_enemy_one_bullet_sniper", 1 ); - if ( !isDefined( player.pers[ "one_shot_sniper_kills" ] ) ) - { - player.pers[ "one_shot_sniper_kills" ] = 0; - } - player.pers[ "one_shot_sniper_kills" ]++; - if ( player.pers[ "one_shot_sniper_kills" ] == 10 ) - { - player addplayerstat( "kill_10_enemy_one_bullet_sniper_onegame", 1 ); - } - } - break; - case "weapon_cqb": - if ( isDefined( victim.firsttimedamaged ) && victim.firsttimedamaged == time ) - { - player addplayerstat( "kill_enemy_one_bullet_shotgun", 1 ); - player addweaponstat( weapon, "kill_enemy_one_bullet_shotgun", 1 ); - if ( !isDefined( player.pers[ "one_shot_shotgun_kills" ] ) ) - { - player.pers[ "one_shot_shotgun_kills" ] = 0; - } - player.pers[ "one_shot_shotgun_kills" ]++; - if ( player.pers[ "one_shot_shotgun_kills" ] == 10 ) - { - player addplayerstat( "kill_10_enemy_one_bullet_shotgun_onegame", 1 ); - } - } - break; - } - if ( data.smeansofdeath == "MOD_MELEE" ) - { - if ( weaponhasattachment( weapon, "tacknife" ) ) - { - player addplayerstat( "kill_enemy_with_tacknife", 1 ); - player bladekill(); - } - else if ( weapon == "knife_ballistic_mp" ) - { - player bladekill(); - player addweaponstat( weapon, "ballistic_knife_melee", 1 ); - } - else if ( weapon == "knife_held_mp" || weapon == "knife_mp" ) - { - player bladekill(); - } - else - { - if ( weapon == "riotshield_mp" ) - { - if ( ( victim.lastfiretime + 3000 ) > time ) - { - player addweaponstat( weapon, "shield_melee_while_enemy_shooting", 1 ); - } - } - } - } - else - { - if ( data.smeansofdeath == "MOD_IMPACT" && baseweaponname == "crossbow_mp" ) - { - if ( weaponhasattachment( weapon, "stackfire" ) ) - { - player addplayerstat( "KILL_CROSSBOW_STACKFIRE", 1 ); - } - } - else - { - if ( isDefined( ownerweaponatlaunch ) ) - { - if ( weaponhasattachment( ownerweaponatlaunch, "stackfire" ) ) - { - player addplayerstat( "KILL_CROSSBOW_STACKFIRE", 1 ); - } - } - } - if ( weapon == "knife_ballistic_mp" ) - { - player bladekill(); - if ( isDefined( player.retreivedblades ) && player.retreivedblades > 0 ) - { - player.retreivedblades--; - - player addweaponstat( weapon, "kill_retrieved_blade", 1 ); - } - } - } - lethalgrenadekill = 0; - switch( weapon ) - { - case "bouncingbetty_mp": - lethalgrenadekill = 1; - player notify( "lethalGrenadeKill" ); - break; - case "hatchet_mp": - player bladekill(); - lethalgrenadekill = 1; - player notify( "lethalGrenadeKill" ); - if ( isDefined( lastweaponbeforetoss ) ) - { - if ( lastweaponbeforetoss == level.riotshield_name ) - { - player addweaponstat( level.riotshield_name, "hatchet_kill_with_shield_equiped", 1 ); - player addplayerstat( "hatchet_kill_with_shield_equiped", 1 ); - } - } - break; - case "claymore_mp": - lethalgrenadekill = 1; - player notify( "lethalGrenadeKill" ); - player addplayerstat( "kill_with_claymore", 1 ); - if ( data.washacked ) - { - player addplayerstat( "kill_with_hacked_claymore", 1 ); - } - break; - case "satchel_charge_mp": - lethalgrenadekill = 1; - player notify( "lethalGrenadeKill" ); - player addplayerstat( "kill_with_c4", 1 ); - break; - case "destructible_car_mp": - player addplayerstat( "kill_enemy_withcar", 1 ); - if ( isDefined( inflictor.destroyingweapon ) ) - { - player addweaponstat( inflictor.destroyingweapon, "kills_from_cars", 1 ); - } - break; - case "sticky_grenade_mp": - lethalgrenadekill = 1; - player notify( "lethalGrenadeKill" ); - if ( isDefined( victim.explosiveinfo[ "stuckToPlayer" ] ) && victim.explosiveinfo[ "stuckToPlayer" ] == victim ) - { - attacker.pers[ "stickExplosiveKill" ]++; - if ( attacker.pers[ "stickExplosiveKill" ] >= 5 ) - { - attacker.pers[ "stickExplosiveKill" ] = 0; - player addplayerstat( "stick_explosive_kill_5_onegame", 1 ); - } - } - break; - case "frag_grenade_mp": - lethalgrenadekill = 1; - player notify( "lethalGrenadeKill" ); - if ( isDefined( data.victim.explosiveinfo[ "cookedKill" ] ) && data.victim.explosiveinfo[ "cookedKill" ] == 1 ) - { - player addplayerstat( "kill_with_cooked_grenade", 1 ); - } - if ( isDefined( data.victim.explosiveinfo[ "throwbackKill" ] ) && data.victim.explosiveinfo[ "throwbackKill" ] == 1 ) - { - player addplayerstat( "kill_with_tossed_back_lethal", 1 ); - } - break; - case "crossbow_mp": - case "explosive_bolt_mp": - if ( !isDefined( player.crossbowclipkillcount ) ) - { - player.crossbowclipkillcount = 0; - } - player.crossbowclipkillcount++; - if ( player.crossbowclipkillcount >= weaponclipsize( "crossbow_mp" ) ) - { - player.crossbowclipkillcount = 0; - player addweaponstat( "crossbow_mp", "crossbow_kill_clip", 1 ); - } - break; - } - if ( lethalgrenadekill ) - { - if ( player isbonuscardactive( 6, player.class_num ) ) - { - player addbonuscardstat( 6, "kills", 1, player.class_num ); - if ( !isDefined( player.pers[ "dangerCloseKills" ] ) ) - { - player.pers[ "dangerCloseKills" ] = 0; - } - player.pers[ "dangerCloseKills" ]++; - if ( player.pers[ "dangerCloseKills" ] == 5 ) - { - player addplayerstat( "kill_with_dual_lethal_grenades", 1 ); - } - } - } - player perkkills( victim, isstunned, time ); - } -} - -perkkills( victim, isstunned, time ) -{ - player = self; - if ( player hasperk( "specialty_movefaster" ) ) - { - player addplayerstat( "perk_movefaster_kills", 1 ); - } - if ( player hasperk( "specialty_noname" ) ) - { - player addplayerstat( "perk_noname_kills", 1 ); - } - if ( player hasperk( "specialty_quieter" ) ) - { - player addplayerstat( "perk_quieter_kills", 1 ); - } - if ( player hasperk( "specialty_longersprint" ) ) - { - if ( isDefined( player.lastsprinttime ) && ( getTime() - player.lastsprinttime ) < 2500 ) - { - player addplayerstat( "perk_longersprint", 1 ); - } - } - if ( player hasperk( "specialty_fastmantle" ) ) - { - if ( isDefined( player.lastsprinttime ) && ( getTime() - player.lastsprinttime ) < 2500 && player playerads() >= 1 ) - { - player addplayerstat( "perk_fastmantle_kills", 1 ); - } - } - if ( player hasperk( "specialty_loudenemies" ) ) - { - player addplayerstat( "perk_loudenemies_kills", 1 ); - } - if ( isstunned == 1 && player hasperk( "specialty_stunprotection" ) ) - { - player addplayerstat( "perk_protection_stun_kills", 1 ); - } -/# - assert( isDefined( victim.activecounteruavs ) ); -#/ - activeemp = 0; - if ( level.teambased ) - { - _a903 = level.teams; - _k903 = getFirstArrayKey( _a903 ); - while ( isDefined( _k903 ) ) - { - team = _a903[ _k903 ]; - if ( team == player.team ) - { - } - else - { - if ( isDefined( level.empowners[ team ] ) ) - { - activeemp = 1; - break; - } - } - else - { - _k903 = getNextArrayKey( _a903, _k903 ); - } - } - } - else if ( isDefined( level.empplayer ) ) - { - if ( level.empplayer != player ) - { - activeemp = 1; - } - } - activecuav = 0; - if ( level.teambased ) - { - _a930 = level.teams; - _k930 = getFirstArrayKey( _a930 ); - while ( isDefined( _k930 ) ) - { - team = _a930[ _k930 ]; - if ( team == player.team ) - { - } - else - { - if ( level.activecounteruavs[ team ] > 0 ) - { - activecuav = 1; - break; - } - } - else - { - _k930 = getNextArrayKey( _a930, _k930 ); - } - } - } - else players = level.players; - i = 0; - while ( i < players.size ) - { - if ( players[ i ] != player ) - { - if ( isDefined( level.activecounteruavs[ players[ i ].entnum ] ) && level.activecounteruavs[ players[ i ].entnum ] > 0 ) - { - activecuav = 1; - break; - } - } - else - { - i++; - } - } - if ( activecuav == 1 || activeemp == 1 ) - { - if ( player hasperk( "specialty_immunecounteruav" ) ) - { - player addplayerstat( "perk_immune_cuav_kills", 1 ); - } - } - activeuavvictim = 0; - if ( level.teambased ) - { - if ( level.activeuavs[ victim.team ] > 0 ) - { - activeuavvictim = 1; - } - } - else - { - if ( isDefined( level.activeuavs[ victim.entnum ] ) ) - { - activeuavvictim = level.activeuavs[ victim.entnum ] > 0; - } - } - if ( activeuavvictim == 1 ) - { - if ( player hasperk( "specialty_gpsjammer" ) ) - { - player addplayerstat( "perk_gpsjammer_immune_kills", 1 ); - } - } - if ( ( player.lastweaponchange + 5000 ) > time ) - { - if ( player hasperk( "specialty_fastweaponswitch" ) ) - { - player addplayerstat( "perk_fastweaponswitch_kill_after_swap", 1 ); - } - } - if ( player.scavenged == 1 ) - { - if ( player hasperk( "specialty_scavenger" ) ) - { - player addplayerstat( "perk_scavenger_kills_after_resupply", 1 ); - } - } -} - -flakjacketprotected( weapon, attacker ) -{ - if ( weapon == "claymore_mp" ) - { - self.flakjacketclaymore[ attacker.clientid ] = 1; - } - self addplayerstat( "perk_flak_survive", 1 ); -} - -earnedkillstreak() -{ - if ( self hasperk( "specialty_earnmoremomentum" ) ) - { - self addplayerstat( "perk_earnmoremomentum_earn_streak", 1 ); - } -} - -genericbulletkill( data, victim, weapon ) -{ - player = self; - time = data.time; - if ( player.pers[ "lastBulletKillTime" ] == time ) - { - player.pers[ "bulletStreak" ]++; - } - else - { - player.pers[ "bulletStreak" ] = 1; - } - player.pers[ "lastBulletKillTime" ] = time; - if ( data.victim.idflagstime == time ) - { - if ( data.victim.idflags & level.idflags_penetration ) - { - player addplayerstat( "kill_enemy_through_wall", 1 ); - if ( isDefined( weapon ) && weaponhasattachment( weapon, "fmj" ) ) - { - player addplayerstat( "kill_enemy_through_wall_with_fmj", 1 ); - } - } - } -} - -ishighestscoringplayer( player ) -{ - if ( !isDefined( player.score ) || player.score < 1 ) - { - return 0; - } - players = level.players; - if ( level.teambased ) - { - team = player.pers[ "team" ]; - } - else - { - team = "all"; - } - highscore = player.score; - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ].score ) ) - { - i++; - continue; - } - else if ( players[ i ] == player ) - { - i++; - continue; - } - else if ( players[ i ].score < 1 ) - { - i++; - continue; - } - else if ( team != "all" && players[ i ].pers[ "team" ] != team ) - { - i++; - continue; - } - else - { - if ( players[ i ].score >= highscore ) - { - return 0; - } - } - i++; - } - return 1; -} - -spawnwatcher() -{ - self endon( "disconnect" ); - self.pers[ "stickExplosiveKill" ] = 0; - self.pers[ "pistolHeadshot" ] = 0; - self.pers[ "assaultRifleHeadshot" ] = 0; - self.pers[ "killNemesis" ] = 0; - while ( 1 ) - { - self waittill( "spawned_player" ); - self.pers[ "longshotsPerLife" ] = 0; - self.flakjacketclaymore = []; - self.weaponkills = []; - self.attachmentkills = []; - self.retreivedblades = 0; - self.lastreloadtime = 0; - self.crossbowclipkillcount = 0; - self thread watchfordtp(); - self thread watchformantle(); - self thread monitor_player_sprint(); - } -} - -pickedupballisticknife() -{ - self.retreivedblades++; -} - -watchfordtp() -{ - self endon( "disconnect" ); - self endon( "death" ); - self.dtptime = 0; - while ( 1 ) - { - self waittill( "dtp_end" ); - self.dtptime = getTime() + 4000; - } -} - -watchformantle() -{ - self endon( "disconnect" ); - self endon( "death" ); - self.mantletime = 0; - while ( 1 ) - { - self waittill( "mantle_start", mantleendtime ); - self.mantletime = mantleendtime; - } -} - -disarmedhackedcarepackage() -{ - self addplayerstat( "disarm_hacked_carepackage", 1 ); -} - -destroyed_car() -{ - if ( !isDefined( self ) || !isplayer( self ) ) - { - return; - } - self addplayerstat( "destroy_car", 1 ); -} - -killednemesis() -{ - self.pers[ "killNemesis" ]++; - if ( self.pers[ "killNemesis" ] >= 5 ) - { - self.pers[ "killNemesis" ] = 0; - self addplayerstat( "kill_nemesis", 1 ); - } -} - -killwhiledamagingwithhpm() -{ - self addplayerstat( "kill_while_damaging_with_microwave_turret", 1 ); -} - -longdistancehatchetkill() -{ - self addplayerstat( "long_distance_hatchet_kill", 1 ); -} - -blockedsatellite() -{ - self addplayerstat( "activate_cuav_while_enemy_satelite_active", 1 ); -} - -longdistancekill() -{ - self.pers[ "longshotsPerLife" ]++; - if ( self.pers[ "longshotsPerLife" ] >= 3 ) - { - self.pers[ "longshotsPerLife" ] = 0; - self addplayerstat( "longshot_3_onelife", 1 ); - } -} - -challengeroundend( data ) -{ - player = data.player; - winner = data.winner; - if ( endedearly( winner ) ) - { - return; - } - if ( level.teambased ) - { - winnerscore = game[ "teamScores" ][ winner ]; - loserscore = getlosersteamscores( winner ); - } - switch( level.gametype ) - { - case "sd": - if ( player.team == winner ) - { - if ( game[ "challenge" ][ winner ][ "allAlive" ] ) - { - player addgametypestat( "round_win_no_deaths", 1 ); - } - if ( isDefined( player.lastmansddefeat3enemies ) ) - { - player addgametypestat( "last_man_defeat_3_enemies", 1 ); - } - } - break; - default: - } - } -} - -roundend( winner ) -{ - wait 0,05; - data = spawnstruct(); - data.time = getTime(); - if ( level.teambased ) - { - if ( isDefined( winner ) && isDefined( level.teams[ winner ] ) ) - { - data.winner = winner; - } - } - else - { - if ( isDefined( winner ) ) - { - data.winner = winner; - } - } - index = 0; - while ( index < level.placement[ "all" ].size ) - { - data.player = level.placement[ "all" ][ index ]; - data.place = index; - dochallengecallback( "roundEnd", data ); - index++; - } -} - -gameend( winner ) -{ - wait 0,05; - data = spawnstruct(); - data.time = getTime(); - if ( level.teambased ) - { - if ( isDefined( winner ) && isDefined( level.teams[ winner ] ) ) - { - data.winner = winner; - } - } - else - { - if ( isDefined( winner ) && isplayer( winner ) ) - { - data.winner = winner; - } - } - index = 0; - while ( index < level.placement[ "all" ].size ) - { - data.player = level.placement[ "all" ][ index ]; - data.place = index; - dochallengecallback( "gameEnd", data ); - index++; - } -} - -getfinalkill( player ) -{ - if ( isplayer( player ) ) - { - player addplayerstat( "get_final_kill", 1 ); - } -} - -destroyrcbomb( weaponname ) -{ - self destroyscorestreak( weaponname ); - if ( weaponname == "hatchet_mp" ) - { - self addplayerstat( "destroy_rcbomb_with_hatchet", 1 ); - } -} - -capturedcrate() -{ - if ( isDefined( self.lastrescuedby ) && isDefined( self.lastrescuedtime ) ) - { - if ( ( self.lastrescuedtime + 5000 ) > getTime() ) - { - self.lastrescuedby addplayerstat( "defend_teammate_who_captured_package", 1 ); - } - } -} - -destroyscorestreak( weaponname ) -{ - if ( isDefined( weaponname ) && weaponname == "qrdrone_turret_mp" ) - { - self addplayerstat( "destroy_score_streak_with_qrdrone", 1 ); - } -} - -capturedobjective( capturetime ) -{ - if ( isDefined( self.smokegrenadetime ) && isDefined( self.smokegrenadeposition ) ) - { - if ( ( self.smokegrenadetime + 14000 ) > capturetime ) - { - distsq = distancesquared( self.smokegrenadeposition, self.origin ); - if ( distsq < 57600 ) - { - self addplayerstat( "capture_objective_in_smoke", 1 ); - self addweaponstat( "willy_pete_mp", "CombatRecordStat", 1 ); - return; - } - } - } -} - -hackedordestroyedequipment() -{ - if ( self hasperk( "specialty_showenemyequipment" ) ) - { - self addplayerstat( "perk_hacker_destroy", 1 ); - } -} - -destroyedequipment( weaponname ) -{ - if ( isDefined( weaponname ) && weaponname == "emp_grenade_mp" ) - { - self addplayerstat( "destroy_equipment_with_emp_grenade", 1 ); - self addweaponstat( "emp_grenade_mp", "combatRecordStat", 1 ); - } - self addplayerstat( "destroy_equipment", 1 ); - self hackedordestroyedequipment(); -} - -destroyedtacticalinsert() -{ - if ( !isDefined( self.pers[ "tacticalInsertsDestroyed" ] ) ) - { - self.pers[ "tacticalInsertsDestroyed" ] = 0; - } - self.pers[ "tacticalInsertsDestroyed" ]++; - if ( self.pers[ "tacticalInsertsDestroyed" ] >= 5 ) - { - self.pers[ "tacticalInsertsDestroyed" ] = 0; - self addplayerstat( "destroy_5_tactical_inserts", 1 ); - } -} - -bladekill() -{ - if ( !isDefined( self.pers[ "bladeKills" ] ) ) - { - self.pers[ "bladeKills" ] = 0; - } - self.pers[ "bladeKills" ]++; - if ( self.pers[ "bladeKills" ] >= 15 ) - { - self.pers[ "bladeKills" ] = 0; - self addplayerstat( "kill_15_with_blade", 1 ); - } -} - -destroyedexplosive( weaponname ) -{ - self destroyedequipment( weaponname ); - self addplayerstat( "destroy_explosive", 1 ); -} - -assisted() -{ - self addplayerstat( "assist", 1 ); -} - -earnedmicrowaveassistscore( score ) -{ - self addplayerstat( "assist_score_microwave_turret", score ); - self addplayerstat( "assist_score_killstreak", score ); -} - -earnedcuavassistscore( score ) -{ - self addplayerstat( "assist_score_cuav", score ); - self addplayerstat( "assist_score_killstreak", score ); - self addweaponstat( "counteruav_mp", "assists", 1 ); -} - -earneduavassistscore( score ) -{ - self addplayerstat( "assist_score_uav", score ); - self addplayerstat( "assist_score_killstreak", score ); - self addweaponstat( "radar_mp", "assists", 1 ); -} - -earnedsatelliteassistscore( score ) -{ - self addplayerstat( "assist_score_satellite", score ); - self addplayerstat( "assist_score_killstreak", score ); - self addweaponstat( "radardirection_mp", "assists", 1 ); -} - -earnedempassistscore( score ) -{ - self addplayerstat( "assist_score_emp", score ); - self addplayerstat( "assist_score_killstreak", score ); - self addweaponstat( "emp_mp", "assists", 1 ); -} - -teamcompletedchallenge( team, challenge ) -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( isDefined( players[ i ].team ) && players[ i ].team == team ) - { - players[ i ] addgametypestat( challenge, 1 ); - } - i++; - } -} - -endedearly( winner ) -{ - if ( level.hostforcedend ) - { - return 1; - } - if ( !isDefined( winner ) ) - { - return 1; - } - if ( level.teambased ) - { - if ( winner == "tie" ) - { - return 1; - } - } - return 0; -} - -getlosersteamscores( winner ) -{ - teamscores = 0; - _a1472 = level.teams; - _k1472 = getFirstArrayKey( _a1472 ); - while ( isDefined( _k1472 ) ) - { - team = _a1472[ _k1472 ]; - if ( team == winner ) - { - } - else - { - teamscores += game[ "teamScores" ][ team ]; - } - _k1472 = getNextArrayKey( _a1472, _k1472 ); - } - return teamscores; -} - -didloserfailchallenge( winner, challenge ) -{ - _a1485 = level.teams; - _k1485 = getFirstArrayKey( _a1485 ); - while ( isDefined( _k1485 ) ) - { - team = _a1485[ _k1485 ]; - if ( team == winner ) - { - } - else - { - if ( game[ "challenge" ][ team ][ challenge ] ) - { - return 0; - } - } - _k1485 = getNextArrayKey( _a1485, _k1485 ); - } - return 1; -} - -challengegameend( data ) -{ - player = data.player; - winner = data.winner; - if ( isDefined( level.scoreeventgameendcallback ) ) - { - [[ level.scoreeventgameendcallback ]]( data ); - } - if ( endedearly( winner ) ) - { - return; - } - if ( level.teambased ) - { - winnerscore = game[ "teamScores" ][ winner ]; - loserscore = getlosersteamscores( winner ); - } - switch( level.gametype ) - { - case "tdm": - if ( player.team == winner ) - { - if ( winnerscore >= ( loserscore + 20 ) ) - { - player addgametypestat( "CRUSH", 1 ); - } - } - mostkillsleastdeaths = 1; - index = 0; - while ( index < level.placement[ "all" ].size ) - { - if ( level.placement[ "all" ][ index ].deaths < player.deaths ) - { - mostkillsleastdeaths = 0; - } - if ( level.placement[ "all" ][ index ].kills > player.kills ) - { - mostkillsleastdeaths = 0; - } - index++; - } - if ( mostkillsleastdeaths && player.kills > 0 && level.placement[ "all" ].size > 3 ) - { - player addgametypestat( "most_kills_least_deaths", 1 ); - } - break; - case "dm": - if ( player == winner ) - { - if ( level.placement[ "all" ].size >= 2 ) - { - secondplace = level.placement[ "all" ][ 1 ]; - if ( player.kills >= ( secondplace.kills + 7 ) ) - { - player addgametypestat( "CRUSH", 1 ); - } - } - } - break; - case "ctf": - if ( player.team == winner ) - { - if ( loserscore == 0 ) - { - player addgametypestat( "SHUT_OUT", 1 ); - } - } - break; - case "dom": - if ( player.team == winner ) - { - if ( winnerscore >= ( loserscore + 70 ) ) - { - player addgametypestat( "CRUSH", 1 ); - } - } - break; - case "hq": - if ( player.team == winner && winnerscore > 0 ) - { - if ( winnerscore >= ( loserscore + 70 ) ) - { - player addgametypestat( "CRUSH", 1 ); - } - } - break; - case "koth": - if ( player.team == winner && winnerscore > 0 ) - { - if ( winnerscore >= ( loserscore + 70 ) ) - { - player addgametypestat( "CRUSH", 1 ); - } - } - if ( player.team == winner && winnerscore > 0 ) - { - if ( winnerscore >= ( loserscore + 110 ) ) - { - player addgametypestat( "ANNIHILATION", 1 ); - } - } - break; - case "dem": - if ( player.team == game[ "defenders" ] && player.team == winner ) - { - if ( loserscore == 0 ) - { - player addgametypestat( "SHUT_OUT", 1 ); - } - } - break; - case "sd": - if ( player.team == winner ) - { - if ( loserscore <= 1 ) - { - player addgametypestat( "CRUSH", 1 ); - } - } - default: - break; - } - } -} - -multikill( killcount, weapon ) -{ - if ( killcount >= 3 && isDefined( self.lastkillwheninjured ) ) - { - if ( ( self.lastkillwheninjured + 5000 ) > getTime() ) - { - self addplayerstat( "multikill_3_near_death", 1 ); - } - } -} - -domattackermultikill( killcount ) -{ - self addgametypestat( "kill_2_enemies_capturing_your_objective", 1 ); -} - -totaldomination( team ) -{ - teamcompletedchallenge( team, "control_3_points_3_minutes" ); -} - -holdflagentirematch( team, label ) -{ - switch( label ) - { - case "_a": - event = "hold_a_entire_match"; - break; - case "_b": - event = "hold_b_entire_match"; - break; - case "_c": - event = "hold_c_entire_match"; - break; - default: - return; - } - teamcompletedchallenge( team, event ); -} - -capturedbfirstminute() -{ - self addgametypestat( "capture_b_first_minute", 1 ); -} - -controlzoneentirely( team ) -{ - teamcompletedchallenge( team, "control_zone_entirely" ); -} - -multi_lmg_smg_kill() -{ - self addplayerstat( "multikill_3_lmg_or_smg_hip_fire", 1 ); -} - -killedzoneattacker( weapon ) -{ - if ( weapon != "planemortar_mp" || weapon == "remote_missile_missile_mp" && weapon == "remote_missile_bomblet_mp" ) - { - self thread updatezonemultikills(); - } -} - -killeddog() -{ - origin = self.origin; - while ( level.teambased ) - { - teammates = get_team_alive_players_s( self.team ); - _a1712 = teammates.a; - _k1712 = getFirstArrayKey( _a1712 ); - while ( isDefined( _k1712 ) ) - { - player = _a1712[ _k1712 ]; - if ( player == self ) - { - } - else - { - distsq = distancesquared( origin, player.origin ); - if ( distsq < 57600 ) - { - self addplayerstat( "killed_dog_close_to_teammate", 1 ); - return; - } - } - else - { - _k1712 = getNextArrayKey( _a1712, _k1712 ); - } - } - } -} - -updatezonemultikills() -{ - self endon( "disconnect" ); - level endon( "game_ended" ); - self notify( "updateRecentZoneKills" ); - self endon( "updateRecentZoneKills" ); - if ( !isDefined( self.recentzonekillcount ) ) - { - self.recentzonekillcount = 0; - } - self.recentzonekillcount++; - wait 4; - if ( self.recentzonekillcount > 1 ) - { - self addplayerstat( "multikill_2_zone_attackers", 1 ); - } - self.recentzonekillcount = 0; -} - -multi_rcbomb_kill() -{ - self addplayerstat( "muiltikill_2_with_rcbomb", 1 ); -} - -multi_remotemissile_kill() -{ - self addplayerstat( "multikill_3_remote_missile", 1 ); -} - -multi_mgl_kill() -{ - self addplayerstat( "multikill_3_with_mgl", 1 ); -} - -immediatecapture() -{ - self addgametypestat( "immediate_capture", 1 ); -} - -killedlastcontester() -{ - self addgametypestat( "contest_then_capture", 1 ); -} - -bothbombsdetonatewithintime() -{ - self addgametypestat( "both_bombs_detonate_10_seconds", 1 ); -} - -fullclipnomisses( weaponclass, weapon ) -{ -} - -destroyedturret( weaponname ) -{ - self destroyscorestreak( weaponname ); - self addplayerstat( "destroy_turret", 1 ); -} - -calledincarepackage() -{ - self.pers[ "carepackagesCalled" ]++; - if ( self.pers[ "carepackagesCalled" ] >= 3 ) - { - self addplayerstat( "call_in_3_care_packages", 1 ); - self.pers[ "carepackagesCalled" ] = 0; - } -} - -destroyedhelicopter( attacker, weapon, damagetype ) -{ - attacker destroyscorestreak( weapon ); - if ( damagetype == "MOD_RIFLE_BULLET" || damagetype == "MOD_PISTOL_BULLET" ) - { - attacker addplayerstat( "destroyed_helicopter_with_bullet", 1 ); - } - attacker addplayerstat( "destroy_helicopter", 1 ); -} - -destroyedqrdrone( damagetype, weapon ) -{ - self destroyscorestreak( weapon ); - self addplayerstat( "destroy_qrdrone", 1 ); - if ( damagetype == "MOD_RIFLE_BULLET" || damagetype == "MOD_PISTOL_BULLET" ) - { - self addplayerstat( "destroyed_qrdrone_with_bullet", 1 ); - } -} - -destroyedaircraft( attacker, weapon ) -{ - attacker destroyscorestreak( weapon ); - if ( isDefined( weapon ) ) - { - if ( weapon == "emp_mp" || weapon == "killstreak_emp_mp" ) - { - attacker addplayerstat( "destroy_aircraft_with_emp", 1 ); - } - else - { - if ( weapon == "missile_drone_projectile_mp" || weapon == "missile_drone_mp" ) - { - attacker addplayerstat( "destroy_aircraft_with_missile_drone", 1 ); - } - } - } - if ( attacker hasperk( "specialty_nottargetedbyairsupport" ) ) - { - attacker addplayerstat( "perk_nottargetedbyairsupport_destroy_aircraft", 1 ); - } - attacker addplayerstat( "destroy_aircraft", 1 ); -} - -killstreakten() -{ - primary = self getloadoutitem( self.class_num, "primary" ); - if ( primary != 0 ) - { - return; - } - secondary = self getloadoutitem( self.class_num, "secondary" ); - if ( secondary != 0 ) - { - return; - } - primarygrenade = self getloadoutitem( self.class_num, "primarygrenade" ); - if ( primarygrenade != 0 ) - { - return; - } - specialgrenade = self getloadoutitem( self.class_num, "specialgrenade" ); - if ( specialgrenade != 0 ) - { - return; - } - numspecialties = 0; - while ( numspecialties < level.maxspecialties ) - { - perk = self getloadoutitem( self.class_num, "specialty" + ( numspecialties + 1 ) ); - if ( perk != 0 ) - { - return; - } - numspecialties++; - } - self addplayerstat( "killstreak_10_no_weapons_perks", 1 ); -} - -scavengedgrenade() -{ - self endon( "disconnect" ); - self endon( "death" ); - self notify( "scavengedGrenade" ); - self endon( "scavengedGrenade" ); - for ( ;; ) - { - self waittill( "lethalGrenadeKill" ); - self addplayerstat( "kill_with_resupplied_lethal_grenade", 1 ); - } -} - -stunnedtankwithempgrenade( attacker ) -{ - attacker addplayerstat( "stun_aitank_wIth_emp_grenade", 1 ); -} - -playerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, shitloc, attackerstance ) -{ -/# - print( level.gametype ); -#/ - self.anglesondeath = self getplayerangles(); - if ( isDefined( attacker ) ) - { - attacker.anglesonkill = attacker getplayerangles(); - } - if ( !isDefined( sweapon ) ) - { - sweapon = "none"; - } - self endon( "disconnect" ); - data = spawnstruct(); - data.victim = self; - data.victimstance = self getstance(); - data.einflictor = einflictor; - data.attacker = attacker; - data.attackerstance = attackerstance; - data.idamage = idamage; - data.smeansofdeath = smeansofdeath; - data.sweapon = sweapon; - data.shitloc = shitloc; - data.time = getTime(); - if ( isDefined( einflictor ) && isDefined( einflictor.lastweaponbeforetoss ) ) - { - data.lastweaponbeforetoss = einflictor.lastweaponbeforetoss; - } - if ( isDefined( einflictor ) && isDefined( einflictor.ownerweaponatlaunch ) ) - { - data.ownerweaponatlaunch = einflictor.ownerweaponatlaunch; - } - waslockingon = 0; - if ( isDefined( einflictor.locking_on ) ) - { - waslockingon |= einflictor.locking_on; - } - if ( isDefined( einflictor.locked_on ) ) - { - waslockingon |= einflictor.locked_on; - } - waslockingon &= 1 << data.victim.entnum; - if ( waslockingon != 0 ) - { - data.waslockingon = 1; - } - else - { - data.waslockingon = 0; - } - data.washacked = einflictor maps/mp/_utility::ishacked(); - data.wasplanting = data.victim.isplanting; - if ( !isDefined( data.wasplanting ) ) - { - data.wasplanting = 0; - } - data.wasdefusing = data.victim.isdefusing; - if ( !isDefined( data.wasdefusing ) ) - { - data.wasdefusing = 0; - } - data.victimweapon = data.victim.currentweapon; - data.victimonground = data.victim isonground(); - if ( isplayer( attacker ) ) - { - data.attackeronground = data.attacker isonground(); - if ( !isDefined( data.attackerstance ) ) - { - data.attackerstance = data.attacker getstance(); - } - } - else - { - data.attackeronground = 0; - data.attackerstance = "stand"; - } - waitandprocessplayerkilledcallback( data ); - data.attacker notify( "playerKilledChallengesProcessed" ); -} - -waittillslowprocessallowed() -{ - while ( level.lastslowprocessframe == getTime() ) - { - wait 0,05; - } - level.lastslowprocessframe = getTime(); -} - -doscoreeventcallback( callback, data ) -{ - if ( !isDefined( level.scoreeventcallbacks ) ) - { - return; - } - if ( !isDefined( level.scoreeventcallbacks[ callback ] ) ) - { - return; - } - if ( isDefined( data ) ) - { - i = 0; - while ( i < level.scoreeventcallbacks[ callback ].size ) - { - thread [[ level.scoreeventcallbacks[ callback ][ i ] ]]( data ); - i++; - } - } - else i = 0; - while ( i < level.scoreeventcallbacks[ callback ].size ) - { - thread [[ level.scoreeventcallbacks[ callback ][ i ] ]](); - i++; - } -} - -waitandprocessplayerkilledcallback( data ) -{ - if ( isDefined( data.attacker ) ) - { - data.attacker endon( "disconnect" ); - } - wait 0,05; - waittillslowprocessallowed(); - level thread dochallengecallback( "playerKilled", data ); - level thread doscoreeventcallback( "playerKilled", data ); -} - -weaponisknife( weapon ) -{ - if ( weapon != "knife_held_mp" || weapon == "knife_mp" && weapon == "knife_ballistic_mp" ) - { - return 1; - } - return 0; -} - -eventreceived( eventname ) -{ - self endon( "disconnect" ); - waittillslowprocessallowed(); - switch( level.gametype ) - { - case "tdm": - if ( eventname == "killstreak_10" ) - { - self addgametypestat( "killstreak_10", 1 ); - } - else if ( eventname == "killstreak_15" ) - { - self addgametypestat( "killstreak_15", 1 ); - } - else if ( eventname == "killstreak_20" ) - { - self addgametypestat( "killstreak_20", 1 ); - } - else if ( eventname == "multikill_3" ) - { - self addgametypestat( "multikill_3", 1 ); - } - else if ( eventname == "kill_enemy_who_killed_teammate" ) - { - self addgametypestat( "kill_enemy_who_killed_teammate", 1 ); - } - else - { - if ( eventname == "kill_enemy_injuring_teammate" ) - { - self addgametypestat( "kill_enemy_injuring_teammate", 1 ); - } - } - break; - case "dm": - if ( eventname == "killstreak_10" ) - { - self addgametypestat( "killstreak_10", 1 ); - } - else if ( eventname == "killstreak_15" ) - { - self addgametypestat( "killstreak_15", 1 ); - } - else if ( eventname == "killstreak_20" ) - { - self addgametypestat( "killstreak_20", 1 ); - } - else - { - if ( eventname == "killstreak_30" ) - { - self addgametypestat( "killstreak_30", 1 ); - } - } - break; - case "sd": - if ( eventname == "defused_bomb_last_man_alive" ) - { - self addgametypestat( "defused_bomb_last_man_alive", 1 ); - } - else if ( eventname == "elimination_and_last_player_alive" ) - { - self addgametypestat( "elimination_and_last_player_alive", 1 ); - } - else if ( eventname == "killed_bomb_planter" ) - { - self addgametypestat( "killed_bomb_planter", 1 ); - } - else - { - if ( eventname == "killed_bomb_defuser" ) - { - self addgametypestat( "killed_bomb_defuser", 1 ); - } - } - break; - case "ctf": - if ( eventname == "kill_flag_carrier" ) - { - self addgametypestat( "kill_flag_carrier", 1 ); - } - else - { - if ( eventname == "defend_flag_carrier" ) - { - self addgametypestat( "defend_flag_carrier", 1 ); - } - } - break; - case "dem": - if ( eventname == "killed_bomb_planter" ) - { - self addgametypestat( "killed_bomb_planter", 1 ); - } - else - { - if ( eventname == "killed_bomb_defuser" ) - { - self addgametypestat( "killed_bomb_defuser", 1 ); - } - } - break; - default: - } - } -} - -monitor_player_sprint() -{ - self endon( "disconnect" ); - self endon( "death" ); - self.lastsprinttime = undefined; - while ( 1 ) - { - self waittill( "sprint_begin" ); - self waittill( "sprint_end" ); - self.lastsprinttime = getTime(); - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_compass.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_compass.gsc deleted file mode 100644 index 4b074d8..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_compass.gsc +++ /dev/null @@ -1,67 +0,0 @@ - -setupminimap( material ) -{ - requiredmapaspectratio = getDvarFloat( "scr_RequiredMapAspectratio" ); - corners = getentarray( "minimap_corner", "targetname" ); - if ( corners.size != 2 ) - { -/# - println( "^1Error: There are not exactly two "minimap_corner" entities in the map. Could not set up minimap." ); -#/ - return; - } - corner0 = ( corners[ 0 ].origin[ 0 ], corners[ 0 ].origin[ 1 ], 0 ); - corner1 = ( corners[ 1 ].origin[ 0 ], corners[ 1 ].origin[ 1 ], 0 ); - cornerdiff = corner1 - corner0; - north = ( cos( getnorthyaw() ), sin( getnorthyaw() ), 0 ); - west = ( 0 - north[ 1 ], north[ 0 ], 0 ); - if ( vectordot( cornerdiff, west ) > 0 ) - { - if ( vectordot( cornerdiff, north ) > 0 ) - { - northwest = corner1; - southeast = corner0; - } - else - { - side = vecscale( north, vectordot( cornerdiff, north ) ); - northwest = corner1 - side; - southeast = corner0 + side; - } - } - else if ( vectordot( cornerdiff, north ) > 0 ) - { - side = vecscale( north, vectordot( cornerdiff, north ) ); - northwest = corner0 + side; - southeast = corner1 - side; - } - else - { - northwest = corner0; - southeast = corner1; - } - if ( requiredmapaspectratio > 0 ) - { - northportion = vectordot( northwest - southeast, north ); - westportion = vectordot( northwest - southeast, west ); - mapaspectratio = westportion / northportion; - if ( mapaspectratio < requiredmapaspectratio ) - { - incr = requiredmapaspectratio / mapaspectratio; - addvec = vecscale( west, westportion * ( incr - 1 ) * 0,5 ); - } - else - { - incr = mapaspectratio / requiredmapaspectratio; - addvec = vecscale( north, northportion * ( incr - 1 ) * 0,5 ); - } - northwest += addvec; - southeast -= addvec; - } - setminimap( material, northwest[ 0 ], northwest[ 1 ], southeast[ 0 ], southeast[ 1 ] ); -} - -vecscale( vec, scalar ) -{ - return ( vec[ 0 ] * scalar, vec[ 1 ] * scalar, vec[ 2 ] * scalar ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_createfx.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_createfx.gsc deleted file mode 100644 index 8d142f8..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_createfx.gsc +++ /dev/null @@ -1,3273 +0,0 @@ -#include maps/mp/_script_gen; -#include maps/mp/_fx; -#include maps/mp/_createfxundo; -#include maps/mp/_createfxmenu; -#include maps/mp/_utility; -#include common_scripts/utility; - -createfx() -{ -/# - println( "^2Running CreateFX 2.0" ); -#/ - if ( ismp() ) - { - init_mp_paths(); - level.timelimitoverride = 1; - } - else - { - init_sp_paths(); - } - precachemodel( "fx_axis_createfx" ); - precacheshader( "black" ); - if ( getDvar( "createfx_scaleid" ) == "" ) - { - setdvar( "createfx_scaleid", "0.5" ); - } - if ( getDvar( "createfx_print_frames" ) == "" ) - { - setdvar( "createfx_print_frames", "3" ); - } - if ( getDvar( "createfx_drawaxis" ) == "" ) - { - setdvar( "createfx_drawaxis", "1" ); - } - if ( getDvar( "createfx_drawaxis_range" ) == "" ) - { - setdvar( "createfx_drawaxis_range", "2000" ); - } - if ( getDvar( "createfx_autosave_time" ) == "" ) - { - setdvar( "createfx_autosave_time", "300" ); - } - if ( getDvar( "createfx_oneshot_min_delay" ) == "" ) - { - setdvar( "createfx_oneshot_min_delay", "-100" ); - } - if ( getDvar( "createfx_oneshot_max_delay" ) == "" ) - { - setdvar( "createfx_oneshot_max_delay", "-15" ); - } - flag_init( "createfx_saving" ); - if ( !isDefined( level.createfx ) ) - { - level.createfx = []; - } - if ( !isDefined( level.cfx_uniqueid ) ) - { - level.cfx_uniqueid = 0; - } - level.cfx_last_action = "none"; - if ( !ismp() ) - { - level thread [[ level.cfx_func_run_gump_func ]](); - } - if ( isDefined( level.createfx_callback_thread ) ) - { - level thread [[ level.createfx_callback_thread ]](); - } - if ( ismp() ) - { - level.callbackplayerdisconnect = ::empty; - level.callbackplayerdamage = ::damage_void; - level.callbackplayerkilled = ::empty; - level.callbackplayerconnect = ::callback_playerconnect; - while ( !isDefined( level.player ) ) - { - wait 0,05; - } - thread createfxdelay(); - } - level.is_camera_on = 0; - thread createfxlogic(); - level waittill( "eternity" ); -} - -fx_init() -{ - if ( ismp() ) - { - init_client_mp_variables(); - } - else - { - init_client_sp_variables(); - } - level.exploderfunction = level.cfx_exploder_before; - waittillframeend; - waittillframeend; - level.exploderfunction = level.cfx_exploder_after; - level.non_fx_ents = 0; - if ( level.createfx_enabled ) - { - triggers = getentarray( "trigger_multiple", "classname" ); - i = 0; - while ( i < triggers.size ) - { - triggers[ i ] delete(); - i++; - } - triggers = getentarray( "trigger_once", "classname" ); - i = 0; - while ( i < triggers.size ) - { - triggers[ i ] delete(); - i++; - } - triggers = getentarray( "trigger_box", "classname" ); - i = 0; - while ( i < triggers.size ) - { - triggers[ i ] delete(); - i++; - } - triggers = getentarray( "trigger_radius", "classname" ); - i = 0; - while ( i < triggers.size ) - { - triggers[ i ] delete(); - i++; - } - triggers = getentarray( "trigger_lookat", "classname" ); - i = 0; - while ( i < triggers.size ) - { - triggers[ i ] delete(); - i++; - } - triggers = getentarray( "trigger_damage", "classname" ); - i = 0; - while ( i < triggers.size ) - { - triggers[ i ] delete(); - i++; - } - sm = getentarray( "spawn_manager", "classname" ); - i = 0; - while ( i < sm.size ) - { - sm[ i ] delete(); - i++; - } - delete_spawns(); - if ( !ismp() ) - { - delete_arrays_in_sp(); -/# - println( "We're not in MP!" ); -#/ - } - } - i = 0; - while ( i < level.createfxent.size ) - { - ent = level.createfxent[ i ]; - ent set_forward_and_up_vectors(); - if ( level.clientscripts ) - { - if ( !level.createfx_enabled ) - { - i++; - continue; - } - } - else - { - if ( isDefined( ent.model ) ) - { - level.non_fx_ents++; - } - if ( ent.v[ "type" ] == "loopfx" ) - { - ent thread [[ level.cfx_func_loopfx ]](); - } - if ( ent.v[ "type" ] == "oneshotfx" ) - { - ent thread [[ level.cfx_func_oneshotfx ]](); - } - if ( ent.v[ "type" ] == "soundfx" ) - { - ent thread [[ level.cfx_func_soundfx ]](); - } - } - i++; - } -} - -add_effect( name, effect ) -{ - if ( !isDefined( level._effect ) ) - { - level._effect = []; - } - level._effect[ name ] = loadfx( effect ); -} - -createeffect( type, fxid ) -{ - ent = undefined; - if ( !isDefined( level.createfx_enabled ) ) - { - level.createfx_enabled = getDvar( "createfx" ) != ""; - } - if ( !isDefined( level.createfxent ) ) - { - level.createfxent = []; - } - if ( level.createfx_enabled ) - { - if ( !isDefined( level.cfx_uniqueid ) ) - { - level.cfx_uniqueid = 0; - } - ent = spawnstruct(); - ent.uniqueid = level.cfx_uniqueid; - level.cfx_uniqueid++; - } - else if ( type == "exploder" ) - { - ent = spawnstruct(); - } - else - { - if ( !isDefined( level._fake_createfx_struct ) ) - { - level._fake_createfx_struct = spawnstruct(); - } - ent = level._fake_createfx_struct; - } - level.createfxent[ level.createfxent.size ] = ent; - ent.v = []; - ent.v[ "type" ] = type; - ent.v[ "fxid" ] = fxid; - ent.v[ "angles" ] = ( 1, 1, 1 ); - ent.v[ "origin" ] = ( 1, 1, 1 ); - ent.drawn = 1; - return ent; -} - -createloopsound() -{ - ent = spawnstruct(); - if ( !isDefined( level.createfxent ) ) - { - level.createfxent = []; - } - level.createfxent[ level.createfxent.size ] = ent; - ent.v = []; - ent.v[ "type" ] = "soundfx"; - ent.v[ "fxid" ] = "No FX"; - ent.v[ "soundalias" ] = "nil"; - ent.v[ "angles" ] = ( 1, 1, 1 ); - ent.v[ "origin" ] = ( 1, 1, 1 ); - ent.drawn = 1; - return ent; -} - -set_forward_and_up_vectors() -{ - self.v[ "up" ] = anglesToUp( self.v[ "angles" ] ); - self.v[ "forward" ] = anglesToForward( self.v[ "angles" ] ); -} - -createfxlogic() -{ - waittillframeend; - menu_init(); - if ( !ismp() ) - { - players = get_players(); - if ( !isDefined( players ) || players.size == 0 ) - { - level waittill( "first_player_ready" ); - } - } -/# - adddebugcommand( "noclip" ); -#/ - if ( !isDefined( level._effect ) ) - { - level._effect = []; - } - if ( getDvar( "createfx_map" ) == "" ) - { - setdvar( "createfx_map", level.script ); - } - else - { - if ( getDvar( "createfx_map" ) == level.script ) - { - if ( !ismp() ) - { - playerpos = []; - playerpos[ 0 ] = getDvarInt( #"274F266C" ); - playerpos[ 1 ] = getDvarInt( #"274F266D" ); - playerpos[ 2 ] = getDvarInt( #"274F266E" ); - player = get_players()[ 0 ]; - player setorigin( ( playerpos[ 0 ], playerpos[ 1 ], playerpos[ 2 ] ) ); - } - } - } -/# - filename = level.cfx_server_scriptdata + level.script + "_fx.gsc"; - file = openfile( filename, "append" ); - level.write_error = ""; - if ( file == -1 ) - { - level.write_error = filename; - } - else - { - closefile( file ); -#/ - } - level.createfxhudelements = []; - level.createfx_hudelements = 100; - stroffsetx = []; - stroffsety = []; - stroffsetx[ 0 ] = 0; - stroffsety[ 0 ] = 0; - stroffsetx[ 1 ] = 1; - stroffsety[ 1 ] = 1; - stroffsetx[ 2 ] = -2; - stroffsety[ 2 ] = 1; - setdvar( "fx", "nil" ); - crosshair = newdebughudelem(); - crosshair.location = 0; - crosshair.alignx = "center"; - crosshair.aligny = "middle"; - crosshair.foreground = 1; - crosshair.fontscale = 2; - crosshair.sort = 20; - crosshair.alpha = 1; - crosshair.x = 320; - crosshair.y = 233; - crosshair settext( "." ); - center_text_init(); - level.cleartextmarker = newdebughudelem(); - level.cleartextmarker.alpha = 0; - level.cleartextmarker settext( "marker" ); - i = 0; - while ( i < level.createfx_hudelements ) - { - newstrarray = []; - p = 0; - while ( p < 2 ) - { - newstr = newhudelem(); - newstr.alignx = "left"; - newstr.location = 0; - newstr.foreground = 1; - newstr.fontscale = 1,1; - newstr.sort = 20 - p; - newstr.alpha = 1; - newstr.x = 0 + stroffsetx[ p ]; - newstr.y = ( 60 + stroffsety[ p ] ) + ( i * 15 ); - if ( p > 0 ) - { - newstr.color = ( 1, 1, 1 ); - } - newstrarray[ newstrarray.size ] = newstr; - p++; - } - level.createfxhudelements[ i ] = newstrarray; - i++; - } - level.selectedmove_up = 0; - level.selectedmove_forward = 0; - level.selectedmove_right = 0; - level.selectedrotate_pitch = 0; - level.selectedrotate_roll = 0; - level.selectedrotate_yaw = 0; - level.selected_fx = []; - level.selected_fx_ents = []; - level.createfx_lockedlist = []; - level.createfx_lockedlist[ "escape" ] = 1; - level.createfx_lockedlist[ "BUTTON_LSHLDR" ] = 1; - level.createfx_lockedlist[ "BUTTON_RSHLDR" ] = 1; - level.createfx_lockedlist[ "mouse1" ] = 1; - level.createfx_lockedlist[ "ctrl" ] = 1; - level.createfx_draw_enabled = 1; - level.buttonisheld = []; - axismode = 0; - colors = []; - colors[ "loopfx" ][ "selected" ] = ( 1, 1, 0,2 ); - colors[ "loopfx" ][ "highlighted" ] = ( 0,4, 0,95, 1 ); - colors[ "loopfx" ][ "default" ] = ( 0,3, 0,5, 1 ); - colors[ "oneshotfx" ][ "selected" ] = ( 1, 1, 0,2 ); - colors[ "oneshotfx" ][ "highlighted" ] = ( 0,33, 0,97, 1 ); - colors[ "oneshotfx" ][ "default" ] = ( 0,1, 0,73, 0,73 ); - colors[ "exploder" ][ "selected" ] = ( 1, 1, 0,2 ); - colors[ "exploder" ][ "highlighted" ] = ( 1, 0,1, 0,1 ); - colors[ "exploder" ][ "default" ] = ( 1, 0,1, 0,1 ); - colors[ "rainfx" ][ "selected" ] = ( 1, 1, 0,2 ); - colors[ "rainfx" ][ "highlighted" ] = ( 0,95, 0,4, 0,95 ); - colors[ "rainfx" ][ "default" ] = ( 0,78, 0, 0,73 ); - colors[ "soundfx" ][ "selected" ] = ( 1, 1, 0,2 ); - colors[ "soundfx" ][ "highlighted" ] = ( 0,5, 1, 0,75 ); - colors[ "soundfx" ][ "default" ] = ( 0,2, 0,9, 0,2 ); - lasthighlightedent = undefined; - level.fx_rotating = 0; - setmenu( "none" ); - level.createfx_selecting = 0; - level.createfx_last_player_origin = ( 1, 1, 1 ); - level.createfx_last_player_forward = ( 1, 1, 1 ); - level.createfx_last_view_change_test = 0; - player = get_players()[ 0 ]; - black = newdebughudelem(); - black.x = -120; - black.y = 200; - black.foreground = 0; - black setshader( "black", 250, 160 ); - black.alpha = 0; - level.createfx_inputlocked = 0; - help_on_last_frame = 0; - i = 0; - while ( i < level.createfxent.size ) - { - ent = level.createfxent[ i ]; - ent post_entity_creation_function(); - i++; - } - thread draw_distance(); - lastselectentity = undefined; - thread createfx_autosave(); - if ( !ismp() ) - { - make_sp_player_invulnerable( player ); - } - for ( ;; ) - { - player = get_players()[ 0 ]; - changedselectedents = 0; - right = anglesToRight( player getplayerangles() ); - forward = anglesToForward( player getplayerangles() ); - up = anglesToUp( player getplayerangles() ); - dot = 0,85; - placeent_vector = vectorScale( forward, 750 ); - level.createfxcursor = bullettrace( player geteye(), player geteye() + placeent_vector, 0, undefined ); - highlightedent = undefined; - level.buttonclick = []; - level.button_is_kb = []; - process_button_held_and_clicked(); - ctrlheld = button_is_held( "ctrl", "BUTTON_LSHLDR" ); - shiftheld = button_is_held( "shift" ); - functionheld = button_is_held( "f" ); - leftclick = button_is_clicked( "mouse1", "BUTTON_A" ); - leftheld = button_is_held( "mouse1", "BUTTON_A" ); - create_fx_menu(); - if ( button_is_clicked( "BUTTON_X" ) || shiftheld && button_is_clicked( "x" ) ) - { - axismode = !axismode; - } - if ( button_is_clicked( "F2" ) || functionheld && button_is_clicked( "2" ) ) - { - toggle_createfx_drawing(); - } - if ( button_is_clicked( "F3" ) || functionheld && button_is_clicked( "3" ) ) - { - print_ambient_fx_inventory(); - } - if ( button_is_clicked( "F5" ) || functionheld && button_is_clicked( "5" ) ) - { - createfx_save(); - } - if ( button_is_clicked( "ins", "i" ) ) - { - insert_effect(); - } - if ( button_is_clicked( "c" ) ) - { - if ( level.is_camera_on == 0 ) - { -/# - adddebugcommand( "noclip" ); -#/ - level thread handle_camera(); - level.is_camera_on = 1; - break; - } - else - { - if ( level.is_camera_on == 1 ) - { -/# - adddebugcommand( "noclip" ); -#/ - level notify( "new_camera" ); - level.is_camera_on = 0; - axismode = 0; - } - } - } - if ( button_is_held( "BUTTON_RTRIG" ) && level.is_camera_on ) - { - axismode = 1; - } - else - { - if ( !button_is_held( "BUTTON_RTRIG" ) && level.is_camera_on ) - { - axismode = 0; - } - } - if ( button_is_clicked( "del" ) || !shiftheld && button_is_clicked( "d" ) ) - { - delete_pressed(); - } - if ( button_is_clicked( "end" ) || shiftheld && button_is_clicked( "d" ) ) - { - drop_selection_to_ground(); - changedselectedents = 1; - } - if ( button_is_clicked( "s" ) ) - { - setmenu( "select_by_property" ); - wait 0,05; - } - if ( isDefined( level.cfx_selected_prop ) ) - { - if ( ctrlheld ) - { - select_ents_by_property( level.cfx_selected_prop, 1 ); - } - else - { - select_ents_by_property( level.cfx_selected_prop ); - } - level.cfx_selected_prop = undefined; - } - if ( button_is_clicked( "j" ) ) - { - setmenu( "jump_to_effect" ); - draw_effects_list( "Select effect to jump to:" ); - } - if ( button_is_clicked( "escape" ) ) - { - clear_settable_fx(); - } - if ( button_is_clicked( "space" ) && !shiftheld ) - { - set_off_exploders(); - } - if ( button_is_clicked( "space" ) && shiftheld ) - { - turn_off_exploders(); - } - if ( button_is_clicked( "tab", "BUTTON_RSHLDR" ) ) - { - move_selection_to_cursor(); - changedselectedents = 1; - } - if ( button_is_clicked( "z" ) ) - { - if ( shiftheld ) - { - break; - } - else - { - undo(); - } - } - if ( button_is_held( "q", "F1" ) ) - { - help_on_last_frame = 1; - show_help(); - wait 0,05; - continue; - } - else if ( help_on_last_frame == 1 ) - { - clear_fx_hudelements(); - help_on_last_frame = 0; - } - if ( button_is_clicked( "BUTTON_LSTICK" ) && !ctrlheld ) - { - copy_ents(); - } - if ( button_is_clicked( "BUTTON_RSTICK" ) ) - { - if ( ctrlheld ) - { - paste_ents_onto_ents(); - break; - } - else - { - paste_ents(); - } - } - if ( isDefined( level.selected_fx_option_index ) ) - { - menu_fx_option_set(); - } - if ( button_is_held( "BUTTON_RTRIG" ) && button_is_held( "BUTTON_LTRIG" ) ) - { - move_player_around_map_fast(); - wait 0,25; - continue; - } - else - { - if ( menu( "none" ) ) - { - if ( button_is_clicked( "rightarrow" ) ) - { - move_player_to_next_same_effect( 1, lastselectentity ); - break; - } - else - { - if ( button_is_clicked( "leftarrow" ) ) - { - move_player_to_next_same_effect( 0, lastselectentity ); - } - } - } - if ( level.write_error != "" ) - { - level notify( "write_error" ); - thread write_error_msg( level.write_error ); - level.write_error = ""; - } - highlightedent = level.fx_highlightedent; - if ( leftclick || ( getTime() - level.createfx_last_view_change_test ) > 250 ) - { - if ( !leftclick || vector_changed( level.createfx_last_player_origin, player.origin ) && dot_changed( level.createfx_last_player_forward, forward ) ) - { - i = 0; - while ( i < level.createfxent.size ) - { - ent = level.createfxent[ i ]; - if ( !ent.drawn ) - { - i++; - continue; - } - else difference = vectornormalize( ent.v[ "origin" ] - ( player.origin + vectorScale( ( 1, 1, 1 ), 55 ) ) ); - newdot = vectordot( forward, difference ); - if ( newdot < dot ) - { - i++; - continue; - } - else if ( newdot == dot ) - { - if ( ent_is_selected( ent ) ) - { - i++; - continue; - } - } - else - { - dot = newdot; - highlightedent = ent; - highlightedent.last_fx_index = i; - } - i++; - } - level.fx_highlightedent = highlightedent; - level.createfx_last_player_origin = player.origin; - level.createfx_last_player_forward = forward; - } - level.createfx_last_view_change_test = getTime(); - } - if ( isDefined( highlightedent ) ) - { - if ( isDefined( lasthighlightedent ) ) - { - if ( lasthighlightedent != highlightedent ) - { - if ( !ent_is_selected( lasthighlightedent ) ) - { - lasthighlightedent thread entity_highlight_disable(); - } - if ( !ent_is_selected( highlightedent ) ) - { - highlightedent thread entity_highlight_enable(); - } - } - break; - } - else - { - if ( !ent_is_selected( highlightedent ) ) - { - highlightedent thread entity_highlight_enable(); - } - } - } - manipulate_createfx_ents( highlightedent, leftclick, leftheld, ctrlheld, colors, right ); - if ( axismode && level.selected_fx_ents.size > 0 ) - { - thread process_fx_rotater(); - if ( button_is_clicked( "enter", "r" ) ) - { - reset_axis_of_selected_ents(); - } - if ( button_is_clicked( "v" ) ) - { - copy_angles_of_selected_ents(); - } - while ( getDvarInt( "createfx_drawaxis" ) == 1 ) - { - i = 0; - while ( i < level.selected_fx_ents.size ) - { - level.selected_fx_ents[ i ] draw_axis(); - i++; - } - } - if ( level.selectedrotate_pitch != 0 || level.selectedrotate_yaw != 0 && level.selectedrotate_roll != 0 ) - { - changedselectedents = 1; - } - wait 0,05; - } - else - { - stop_drawing_axis_models(); - selectedmove_vector = get_selected_move_vector(); - if ( distancesquared( ( 1, 1, 1 ), selectedmove_vector ) > 0 ) - { - changedselectedents = 1; - if ( level.cfx_last_action != "translate" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "translate"; - } - } - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - if ( isDefined( ent.model ) ) - { - i++; - continue; - } - else - { - ent.v[ "origin" ] += selectedmove_vector; - } - i++; - } - wait 0,05; - } - if ( changedselectedents ) - { - update_selected_entities(); - } - lasthighlightedent = highlightedent; - if ( last_selected_entity_has_changed( lastselectentity ) ) - { - level.effect_list_offset = 0; - clear_settable_fx(); - setmenu( "none" ); - } - if ( level.selected_fx_ents.size ) - { - lastselectentity = level.selected_fx_ents[ level.selected_fx_ents.size - 1 ]; - break; - } - else - { - lastselectentity = undefined; - } - } - } -} - -toggle_createfx_drawing() -{ - level.createfx_draw_enabled = !level.createfx_draw_enabled; -} - -manipulate_createfx_ents( highlightedent, leftclick, leftheld, ctrlheld, colors, right ) -{ - if ( !level.createfx_draw_enabled ) - { - clear_fx_hudelements(); - return; - } - scale = getDvarFloat( "createfx_scaleid" ); - print_frames = getDvarInt( "createfx_print_frames" ); - if ( !isDefined( level.createfx_manipulate_offset ) ) - { - level.createfx_manipulate_offset = 0; - } - offset = level.createfx_manipulate_offset; - level.createfx_manipulate_offset = ( level.createfx_manipulate_offset + 1 ) % print_frames; - i = offset; - while ( i < level.createfxent.size ) - { - ent = level.createfxent[ i ]; - if ( !ent.drawn ) - { - } - else if ( isDefined( highlightedent ) && ent == highlightedent ) - { - } - else colorindex = "default"; - if ( index_is_selected( i ) ) - { - colorindex = "selected"; - } -/# - print3d( ent.v[ "origin" ], ".", colors[ ent.v[ "type" ] ][ colorindex ], 1, scale, print_frames ); -#/ - if ( ent.textalpha > 0 ) - { - printright = vectorScale( right, ( ent.v[ "fxid" ].size * -2,93 ) * scale ); - printup = ( 0, 0, 15 * scale ); -/# - print3d( ent.v[ "origin" ] + printright + printup, ent.v[ "fxid" ], colors[ ent.v[ "type" ] ][ colorindex ], ent.textalpha, scale, print_frames ); -#/ - } - i += print_frames; - } - if ( isDefined( highlightedent ) ) - { - if ( !entities_are_selected() ) - { - display_fx_info( highlightedent ); - } - if ( leftclick ) - { - entwasselected = index_is_selected( highlightedent.last_fx_index ); - level.createfx_selecting = !entwasselected; - if ( !ctrlheld ) - { - selectedsize = level.selected_fx_ents.size; - clear_entity_selection(); - if ( entwasselected && selectedsize == 1 ) - { - select_entity( highlightedent.last_fx_index, highlightedent ); - } - } - toggle_entity_selection( highlightedent.last_fx_index, highlightedent ); - } - else - { - if ( leftheld ) - { - if ( ctrlheld ) - { - if ( level.createfx_selecting ) - { - select_entity( highlightedent.last_fx_index, highlightedent ); - } - if ( !level.createfx_selecting ) - { - deselect_entity( highlightedent.last_fx_index, highlightedent ); - } - } - } - } - colorindex = "highlighted"; - if ( index_is_selected( highlightedent.last_fx_index ) ) - { - colorindex = "selected"; - } -/# - print3d( highlightedent.v[ "origin" ], ".", colors[ highlightedent.v[ "type" ] ][ colorindex ], 1, scale, 1 ); -#/ - if ( highlightedent.textalpha > 0 ) - { - printright = vectorScale( right, ( highlightedent.v[ "fxid" ].size * -2,93 ) * scale ); - printup = ( 0, 0, 15 * scale ); -/# - print3d( highlightedent.v[ "origin" ] + printright + printup, highlightedent.v[ "fxid" ], colors[ highlightedent.v[ "type" ] ][ colorindex ], highlightedent.textalpha, scale, 1 ); -#/ - } - } -} - -clear_settable_fx() -{ - level.createfx_inputlocked = 0; - setdvar( "fx", "nil" ); - level.selected_fx_option_index = undefined; - reset_fx_hud_colors(); -} - -reset_fx_hud_colors() -{ - i = 0; - while ( i < level.createfx_hudelements ) - { - level.createfxhudelements[ i ][ 0 ].color = ( 1, 1, 1 ); - i++; - } -} - -button_is_held( name, name2 ) -{ - if ( isDefined( name2 ) ) - { - if ( isDefined( level.buttonisheld[ name2 ] ) ) - { - return 1; - } - } - return isDefined( level.buttonisheld[ name ] ); -} - -button_is_clicked( name, name2 ) -{ - if ( isDefined( name2 ) ) - { - if ( isDefined( level.buttonclick[ name2 ] ) ) - { - return 1; - } - } - return isDefined( level.buttonclick[ name ] ); -} - -toggle_entity_selection( index, ent ) -{ - if ( isDefined( level.selected_fx[ index ] ) ) - { - deselect_entity( index, ent ); - } - else - { - select_entity( index, ent ); - } -} - -select_entity( index, ent, skip_undo ) -{ - if ( isDefined( level.selected_fx[ index ] ) ) - { - return; - } - ent.last_fx_index = index; - if ( !isDefined( skip_undo ) && level.cfx_last_action != "none" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "none"; - } - clear_settable_fx(); - level notify( "new_ent_selection" ); - ent thread entity_highlight_enable(); - level.selected_fx[ index ] = 1; - level.selected_fx_ents[ level.selected_fx_ents.size ] = ent; -} - -ent_is_highlighted( ent ) -{ - if ( !isDefined( level.fx_highlightedent ) ) - { - return 0; - } - return ent == level.fx_highlightedent; -} - -deselect_entity( index, ent ) -{ - if ( !isDefined( level.selected_fx[ index ] ) ) - { - return; - } - if ( level.cfx_last_action != "none" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "none"; - } - clear_settable_fx(); - level notify( "new_ent_selection" ); - if ( !ent_is_highlighted( ent ) ) - { - ent thread entity_highlight_disable(); - } - newarray = []; - i = 0; - while ( i < level.selected_fx_ents.size ) - { - if ( level.selected_fx_ents[ i ] != ent ) - { - newarray[ newarray.size ] = level.selected_fx_ents[ i ]; - } - i++; - } - level.selected_fx_ents = newarray; -} - -index_is_selected( index ) -{ - return isDefined( level.selected_fx[ index ] ); -} - -ent_is_selected( ent ) -{ - i = 0; - while ( i < level.selected_fx_ents.size ) - { - if ( level.selected_fx_ents[ i ] == ent ) - { - return 1; - } - i++; - } - return 0; -} - -clear_entity_selection( skip_undo ) -{ - if ( !isDefined( skip_undo ) && level.cfx_last_action != "none" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "none"; - } - i = 0; - while ( i < level.selected_fx_ents.size ) - { - if ( !ent_is_highlighted( level.selected_fx_ents[ i ] ) ) - { - level.selected_fx_ents[ i ] thread entity_highlight_disable(); - } - i++; - } - level.selected_fx = []; - level.selected_fx_ents = []; -} - -draw_axis() -{ - if ( isDefined( self.draw_axis_model ) ) - { - return; - } - self.draw_axis_model = spawn_axis_model( self.v[ "origin" ], self.v[ "angles" ] ); - level thread draw_axis_think( self ); - if ( !isDefined( level.draw_axis_models ) ) - { - level.draw_axis_models = []; - } - level.draw_axis_models[ level.draw_axis_models.size ] = self.draw_axis_model; -} - -spawn_axis_model( origin, angles ) -{ - model = spawn( "script_model", origin ); - model setmodel( "fx_axis_createfx" ); - model.angles = angles; - return model; -} - -draw_axis_think( axis_parent ) -{ - axis_model = axis_parent.draw_axis_model; - axis_model endon( "death" ); - player = get_players()[ 0 ]; - range = getDvarInt( "createfx_drawaxis_range" ); - i = 0; - while ( 1 ) - { - if ( !isDefined( axis_parent ) ) - { - break; - } - else - { - if ( distancesquared( axis_model.origin, player.origin ) > ( range * range ) ) - { - if ( isDefined( axis_model ) ) - { - axis_model delete(); - arrayremovevalue( level.draw_axis_models, undefined ); - } - } - else - { - if ( !isDefined( axis_model ) ) - { - axis_model = spawn_axis_model( axis_parent.v[ "origin" ], axis_parent.v[ "angles" ] ); - axis_parent.draw_axis_model = axis_model; - level.draw_axis_models[ level.draw_axis_models.size ] = axis_model; - } - } - axis_model.origin = axis_parent.v[ "origin" ]; - axis_model.angles = axis_parent.v[ "angles" ]; - wait 0,1; - i++; - if ( i >= 10 ) - { - range = getDvarInt( "createfx_drawaxis_range" ); - i = 0; - } - } - } - if ( isDefined( axis_model ) ) - { - axis_model delete(); - } -} - -stop_drawing_axis_models() -{ - if ( isDefined( level.draw_axis_models ) ) - { - i = 0; - while ( i < level.draw_axis_models.size ) - { - if ( isDefined( level.draw_axis_models[ i ] ) ) - { - level.draw_axis_models[ i ] delete(); - } - i++; - } - arrayremovevalue( level.draw_axis_models, undefined ); - } -} - -clear_fx_hudelements() -{ - level.cfx_center_text[ level.cfx_center_text_max - 1 ] clearalltextafterhudelem(); - i = 0; - while ( i < level.createfx_hudelements ) - { - p = 0; - while ( p < 2 ) - { - level.createfxhudelements[ i ][ p ] settext( "" ); - p++; - } - i++; - } - level.fxhudelements = 0; -} - -set_fx_hudelement( text ) -{ - if ( ismp() && !isDefined( level.createfx_delay_done ) ) - { - return; - } - if ( level.fxhudelements < level.createfx_hudelements ) - { - p = 0; - while ( p < 2 ) - { - level.createfxhudelements[ level.fxhudelements ][ p ] settext( text ); - p++; - } - level.fxhudelements++; - } -} - -buttondown( button, button2 ) -{ - if ( !buttonpressed_internal( button ) ) - { - return buttonpressed_internal( button2 ); - } -} - -buttonpressed_internal( button ) -{ - if ( !isDefined( button ) ) - { - return 0; - } - if ( kb_locked( button ) ) - { - return 0; - } - player = get_players()[ 0 ]; - return player buttonpressed( button ); -} - -get_selected_move_vector() -{ - player = get_players()[ 0 ]; - yaw = player getplayerangles()[ 1 ]; - angles = ( 0, yaw, 0 ); - right = anglesToRight( angles ); - forward = anglesToForward( angles ); - up = anglesToUp( angles ); - ctrlheld = button_is_held( "ctrl", "BUTTON_LSHLDR" ); - if ( buttondown( "kp_uparrow", "DPAD_UP" ) ) - { - if ( level.selectedmove_forward < 0 ) - { - level.selectedmove_forward = 0; - } - if ( ctrlheld ) - { - level.selectedmove_forward = 0,1; - wait 0,05; - } - else - { - level.selectedmove_forward += 1; - } - } - else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) ) - { - if ( level.selectedmove_forward > 0 ) - { - level.selectedmove_forward = 0; - } - if ( ctrlheld ) - { - level.selectedmove_forward = -1 * 0,1; - wait 0,05; - } - else - { - level.selectedmove_forward -= 1; - } - } - else - { - level.selectedmove_forward = 0; - } - if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) ) - { - if ( level.selectedmove_right < 0 ) - { - level.selectedmove_right = 0; - } - if ( ctrlheld ) - { - level.selectedmove_right = 0,1; - wait 0,05; - } - else - { - level.selectedmove_right += 1; - } - } - else if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) ) - { - if ( level.selectedmove_right > 0 ) - { - level.selectedmove_right = 0; - } - if ( ctrlheld ) - { - level.selectedmove_right = -1 * 0,1; - wait 0,05; - } - else - { - level.selectedmove_right -= 1; - } - } - else - { - level.selectedmove_right = 0; - } - if ( buttondown( "BUTTON_Y" ) ) - { - if ( level.selectedmove_up < 0 ) - { - level.selectedmove_up = 0; - } - if ( ctrlheld ) - { - level.selectedmove_up = 0,1; - wait 0,05; - } - else - { - level.selectedmove_up += 1; - } - } - else if ( buttondown( "BUTTON_B" ) ) - { - if ( level.selectedmove_up > 0 ) - { - level.selectedmove_up = 0; - } - if ( ctrlheld ) - { - level.selectedmove_up = -1 * 0,1; - wait 0,05; - } - else - { - level.selectedmove_up -= 1; - } - } - else - { - level.selectedmove_up = 0; - } - vector = ( 1, 1, 1 ); - vector += vectorScale( forward, level.selectedmove_forward ); - vector += vectorScale( right, level.selectedmove_right ); - vector += vectorScale( up, level.selectedmove_up ); - return vector; -} - -process_button_held_and_clicked() -{ - add_button( "mouse1" ); - add_kb_button( "shift" ); - add_kb_button( "ctrl" ); - add_button( "BUTTON_RSHLDR" ); - add_button( "BUTTON_LSHLDR" ); - add_button( "BUTTON_RSTICK" ); - add_button( "BUTTON_LSTICK" ); - add_button( "BUTTON_A" ); - add_button( "BUTTON_B" ); - add_button( "BUTTON_X" ); - add_button( "BUTTON_Y" ); - add_button( "DPAD_UP" ); - add_button( "DPAD_LEFT" ); - add_button( "DPAD_RIGHT" ); - add_button( "DPAD_DOWN" ); - add_kb_button( "escape" ); - add_button( "BUTTON_RTRIG" ); - add_button( "BUTTON_LTRIG" ); - add_kb_button( "a" ); - add_button( "F1" ); - add_button( "F5" ); - add_button( "F2" ); - add_kb_button( "c" ); - add_kb_button( "d" ); - add_kb_button( "f" ); - add_kb_button( "h" ); - add_kb_button( "i" ); - add_kb_button( "j" ); - add_kb_button( "k" ); - add_kb_button( "l" ); - add_kb_button( "m" ); - add_kb_button( "p" ); - add_kb_button( "q" ); - add_kb_button( "r" ); - add_kb_button( "s" ); - add_kb_button( "v" ); - add_kb_button( "x" ); - add_kb_button( "z" ); - add_button( "del" ); - add_kb_button( "end" ); - add_kb_button( "tab" ); - add_kb_button( "ins" ); - add_kb_button( "add" ); - add_kb_button( "space" ); - add_kb_button( "enter" ); - add_kb_button( "leftarrow" ); - add_kb_button( "rightarrow" ); - add_kb_button( "1" ); - add_kb_button( "2" ); - add_kb_button( "3" ); - add_kb_button( "4" ); - add_kb_button( "5" ); - add_kb_button( "6" ); - add_kb_button( "7" ); - add_kb_button( "8" ); - add_kb_button( "9" ); - add_kb_button( "0" ); - add_kb_button( "~" ); -} - -locked( name ) -{ - if ( isDefined( level.createfx_lockedlist[ name ] ) ) - { - return 0; - } - return kb_locked( name ); -} - -kb_locked( name ) -{ - if ( level.createfx_inputlocked ) - { - return isDefined( level.button_is_kb[ name ] ); - } -} - -add_button( name ) -{ - player = get_players()[ 0 ]; - if ( locked( name ) ) - { - return; - } - if ( !isDefined( level.buttonisheld[ name ] ) ) - { - if ( player buttonpressed( name ) ) - { - level.buttonisheld[ name ] = 1; - level.buttonclick[ name ] = 1; - } - } - else - { - if ( !player buttonpressed( name ) ) - { - } - } -} - -add_kb_button( name ) -{ - level.button_is_kb[ name ] = 1; - add_button( name ); -} - -set_anglemod_move_vector() -{ -/# - ctrlheld = button_is_held( "ctrl", "BUTTON_LSHLDR" ); - players = get_players(); - if ( level.is_camera_on == 1 ) - { - newmovement = players[ 0 ] getnormalizedmovement(); - dolly_movement = players[ 0 ] getnormalizedcameramovement(); - if ( newmovement[ 1 ] <= -0,3 ) - { - level.selectedrotate_yaw -= 1; - } - else if ( newmovement[ 1 ] >= 0,3 ) - { - level.selectedrotate_yaw += 1; - } - else if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) ) - { - if ( level.selectedrotate_yaw < 0 ) - { - level.selectedrotate_yaw = 0; - } - level.selectedrotate_yaw += 0,1; - } - else if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) ) - { - if ( level.selectedrotate_yaw > 0 ) - { - level.selectedrotate_yaw = 0; - } - level.selectedrotate_yaw -= 0,1; - } - else - { - level.selectedrotate_yaw = 0; - } - if ( dolly_movement[ 0 ] <= -0,2 ) - { - level.selectedrotate_pitch += 1; - } - else if ( dolly_movement[ 0 ] >= 0,2 ) - { - level.selectedrotate_pitch -= 1; - } - else if ( buttondown( "kp_uparrow", "DPAD_UP" ) ) - { - if ( level.selectedrotate_pitch < 0 ) - { - level.selectedrotate_pitch = 0; - } - level.selectedrotate_pitch += 0,1; - } - else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) ) - { - if ( level.selectedrotate_pitch > 0 ) - { - level.selectedrotate_pitch = 0; - } - level.selectedrotate_pitch -= 0,1; - } - else - { - level.selectedrotate_pitch = 0; - } - if ( buttondown( "BUTTON_Y" ) ) - { - if ( level.selectedrotate_roll < 0 ) - { - level.selectedrotate_roll = 0; - } - level.selectedrotate_roll += 0,1; - } - else if ( buttondown( "BUTTON_B" ) ) - { - if ( level.selectedrotate_roll > 0 ) - { - level.selectedrotate_roll = 0; - } - level.selectedrotate_roll -= 0,1; - } - else - { - level.selectedrotate_roll = 0; - } - } - else if ( buttondown( "kp_uparrow", "DPAD_UP" ) ) - { - if ( level.selectedrotate_pitch < 0 ) - { - level.selectedrotate_pitch = 0; - } - if ( ctrlheld ) - { - level.selectedrotate_pitch = 0,1; - wait 0,05; - } - else - { - level.selectedrotate_pitch += 1; - } - } - else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) ) - { - if ( level.selectedrotate_pitch > 0 ) - { - level.selectedrotate_pitch = 0; - } - if ( ctrlheld ) - { - level.selectedrotate_pitch = -1 * 0,1; - wait 0,05; - } - else - { - level.selectedrotate_pitch -= 1; - } - } - else - { - level.selectedrotate_pitch = 0; - } - if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) ) - { - if ( level.selectedrotate_yaw < 0 ) - { - level.selectedrotate_yaw = 0; - } - if ( ctrlheld ) - { - level.selectedrotate_yaw = 0,1; - wait 0,05; - } - else - { - level.selectedrotate_yaw += 1; - } - } - else if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) ) - { - if ( level.selectedrotate_yaw > 0 ) - { - level.selectedrotate_yaw = 0; - } - if ( ctrlheld ) - { - level.selectedrotate_yaw = -1 * 0,1; - wait 0,05; - } - else - { - level.selectedrotate_yaw -= 1; - } - } - else - { - level.selectedrotate_yaw = 0; - } - if ( buttondown( "BUTTON_Y" ) ) - { - if ( level.selectedrotate_roll < 0 ) - { - level.selectedrotate_roll = 0; - } - if ( ctrlheld ) - { - level.selectedrotate_roll = 0,1; - wait 0,05; - } - else - { - level.selectedrotate_roll += 1; - } - } - else if ( buttondown( "BUTTON_B" ) ) - { - if ( level.selectedrotate_roll > 0 ) - { - level.selectedrotate_roll = 0; - } - if ( ctrlheld ) - { - level.selectedrotate_roll = -1 * 0,1; - wait 0,05; - } - else - { - level.selectedrotate_roll -= 1; - } - } - else - { - level.selectedrotate_roll = 0; -#/ - } -} - -cfxprintln( file, string ) -{ -/# - if ( file == -1 ) - { - return; - } - fprintln( file, string ); -#/ -} - -update_save_bar( number ) -{ - level notify( "saving_start" ); - level endon( "saving_start" ); - level.current_saving_number = 0; - while ( level.current_saving_number < level.createfxent.size ) - { - center_text_clear(); - center_text_add( "Saving Createfx to File" ); - center_text_add( "Saving effect " + level.current_saving_number + "/" + level.createfxent.size ); - center_text_add( "Do not reset Xenon until saving is complete." ); - wait 0,05; - center_text_clear(); - } - center_text_add( "Saving Complete." ); - center_text_add( level.createfxent.size + " effects saved to files." ); -} - -generate_fx_log( type, autosave ) -{ -/# - autosave = isDefined( autosave ); - if ( type == "server" ) - { - if ( !autosave ) - { - filename = level.cfx_server_scriptdata + level.script + "_fx.gsc"; - } - else - { - filename = level.cfx_server_scriptdata + "backup.gsc"; - } - call_loop = level.cfx_server_loop; - call_oneshot = level.cfx_server_oneshot; - call_exploder = level.cfx_server_exploder; - call_loopsound = level.cfx_server_loopsound; - } - else if ( type == "client" ) - { - if ( !autosave ) - { - filename = level.cfx_client_scriptdata + level.script + "_fx.csc"; - } - else - { - filename = level.cfx_client_scriptdata + "backup.csc"; - } - call_loop = level.cfx_client_loop; - call_oneshot = level.cfx_client_oneshot; - call_exploder = level.cfx_client_exploder; - call_loopsound = level.cfx_client_loopsound; - } - else - { - println( "^1Error: Improper type in generate_fx_log()" ); - return; - } - file = openfile( filename, "write" ); - if ( file == -1 ) - { - level.write_error = filename; - if ( type == "server" ) - { - return 1; - } - else - { - if ( type == "client" ) - { - return 2; - } - else - { - return 3; - } - } - } - else - { - cfxprintln( file, "//_createfx generated. Do not touch!!" ); - cfxprintln( file, "main()" ); - cfxprintln( file, "{" ); - p = 0; - while ( p < level.createfxent.size ) - { - ent = level.createfxent[ p ]; - origin = []; - angles = []; - i = 0; - while ( i < 3 ) - { - origin[ i ] = ent.v[ "origin" ][ i ]; - angles[ i ] = ent.v[ "angles" ][ i ]; - if ( origin[ i ] < 0,1 && origin[ i ] > ( 0,1 * -1 ) ) - { - origin[ i ] = 0; - } - if ( angles[ i ] < 0,1 && angles[ i ] > ( 0,1 * -1 ) ) - { - angles[ i ] = 0; - } - i++; - } - ent.v[ "origin" ] = ( origin[ 0 ], origin[ 1 ], origin[ 2 ] ); - ent.v[ "angles" ] = ( angles[ 0 ], angles[ 1 ], angles[ 2 ] ); - p++; - } - if ( !autosave ) - { - println( " *** CREATING EFFECT, COPY THESE LINES TO ", level.script, "_fx.gsc *** " ); - } - cfxprintln( file, "// CreateFX entities placed: " + ( level.createfxent.size - level.non_fx_ents ) ); - breather = 0; - if ( autosave ) - { - breather_pause = 1; - } - else - { - breather_pause = 5; - } - i = 0; - while ( i < level.createfxent.size ) - { - e = level.createfxent[ i ]; - assert( isDefined( e.v[ "type" ] ), "effect at origin " + e.v[ "origin" ] + " has no type" ); - if ( isDefined( e.model ) ) - { - i++; - continue; - } - else if ( e.v[ "fxid" ] == "No FX" ) - { - i++; - continue; - } - else - { - output_name = "\t"; - output_props = "\t"; - ent_type = e.v[ "type" ]; - if ( ent_type == "loopfx" ) - { - output_name += "ent = " + call_loop + "( "" + e.v[ "fxid" ] + "" );"; - } - if ( ent_type == "oneshotfx" ) - { - output_name += "ent = " + call_oneshot + "( "" + e.v[ "fxid" ] + "" );"; - } - if ( ent_type == "exploder" ) - { - output_name += "ent = " + call_exploder + "( "" + e.v[ "fxid" ] + "" );"; - } - if ( ent_type == "soundfx" ) - { - output_name += "ent = " + call_loopsound + "();"; - } - output_props += get_fx_options( e ); - cfxprintln( file, output_name ); - cfxprintln( file, output_props ); - cfxprintln( file, "\t" ); - breather++; - if ( breather >= breather_pause ) - { - wait 0,05; - breather = 0; - } - } - i++; - } - if ( level.bscriptgened ) - { - script_gen_dump_addline( level.cfx_server_scriptgendump, level.script + "_fx" ); - [[ level.cfx_func_script_gen_dump ]](); - } - cfxprintln( file, "}" ); - saved = closefile( file ); - assert( saved == 1, "File not saved (see above message?): " + filename ); - println( "CreateFX entities placed: " + ( level.createfxent.size - level.non_fx_ents ) ); - return 0; -#/ - } -} - -get_fx_options( ent ) -{ - output_props = ""; - i = 0; - while ( i < level.createfx_options.size ) - { - option = level.createfx_options[ i ]; - if ( !isDefined( ent.v[ option[ "name" ] ] ) ) - { - i++; - continue; - } - else if ( !mask( option[ "mask" ], ent.v[ "type" ] ) ) - { - i++; - continue; - } - else if ( option[ "type" ] == "string" ) - { - if ( option[ "name" ] == "fxid" ) - { - i++; - continue; - } - else output_props += "ent.v[ "" + option[ "name" ] + "" ] = "" + ent.v[ option[ "name" ] ] + ""; "; - i++; - continue; - } - else - { - output_props += "ent.v[ "" + option[ "name" ] + "" ] = " + ent.v[ option[ "name" ] ] + "; "; - } - i++; - } - return output_props; -} - -entity_highlight_disable() -{ - self notify( "highlight change" ); - self endon( "highlight change" ); - for ( ;; ) - { - self.textalpha -= 0,05; - if ( self.textalpha < 0,4 ) - { - break; - } - else - { - wait 0,05; - } - } - self.textalpha = 0,4; -} - -entity_highlight_enable() -{ - self notify( "highlight change" ); - self endon( "highlight change" ); - for ( ;; ) - { - self.textalpha += 0,05; - if ( self.textalpha > 1 ) - { - break; - } - else - { - wait 0,05; - } - } - self.textalpha = 1; -} - -get_center_of_array( array ) -{ - center = ( 1, 1, 1 ); - i = 0; - while ( i < array.size ) - { - center = ( center[ 0 ] + array[ i ].v[ "origin" ][ 0 ], center[ 1 ] + array[ i ].v[ "origin" ][ 1 ], center[ 2 ] + array[ i ].v[ "origin" ][ 2 ] ); - i++; - } - return ( center[ 0 ] / array.size, center[ 1 ] / array.size, center[ 2 ] / array.size ); -} - -rotation_is_occuring() -{ - if ( level.selectedrotate_roll != 0 ) - { - return 1; - } - if ( level.selectedrotate_pitch != 0 ) - { - return 1; - } - return level.selectedrotate_yaw != 0; -} - -process_fx_rotater() -{ - if ( level.fx_rotating ) - { - return; - } - set_anglemod_move_vector(); - if ( !rotation_is_occuring() ) - { - return; - } - level.fx_rotating = 1; - if ( level.cfx_last_action != "rotate" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "rotate"; - } - if ( level.selected_fx_ents.size > 1 ) - { - center = get_center_of_array( level.selected_fx_ents ); - org = spawn( "script_origin", center ); - org.v[ "angles" ] = level.selected_fx_ents[ 0 ].v[ "angles" ]; - org.v[ "origin" ] = center; - rotater = []; - i = 0; - while ( i < level.selected_fx_ents.size ) - { - rotater[ i ] = spawn( "script_origin", level.selected_fx_ents[ i ].v[ "origin" ] ); - rotater[ i ].angles = level.selected_fx_ents[ i ].v[ "angles" ]; - rotater[ i ] linkto( org ); - i++; - } - rotate_over_time( org, rotater ); - org delete(); - i = 0; - while ( i < rotater.size ) - { - rotater[ i ] delete(); - i++; - } - } - else if ( level.selected_fx_ents.size == 1 ) - { - ent = level.selected_fx_ents[ 0 ]; - rotater = spawn( "script_origin", ( 1, 1, 1 ) ); - rotater.angles = ent.v[ "angles" ]; - if ( level.selectedrotate_pitch != 0 ) - { - rotater devaddpitch( level.selectedrotate_pitch ); - } - else if ( level.selectedrotate_yaw != 0 ) - { - rotater devaddyaw( level.selectedrotate_yaw ); - } - else - { - rotater devaddroll( level.selectedrotate_roll ); - } - ent.v[ "angles" ] = rotater.angles; - rotater delete(); - wait 0,05; - } - level.fx_rotating = 0; -} - -rotate_over_time( org, rotater ) -{ - level endon( "new_ent_selection" ); - p = 0; - while ( p < 2 ) - { - if ( level.selectedrotate_pitch != 0 ) - { - org devaddpitch( level.selectedrotate_pitch ); - } - else if ( level.selectedrotate_yaw != 0 ) - { - org devaddyaw( level.selectedrotate_yaw ); - } - else - { - org devaddroll( level.selectedrotate_roll ); - } - wait 0,05; - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - if ( isDefined( ent.model ) ) - { - i++; - continue; - } - else - { - ent.v[ "origin" ] = rotater[ i ].origin; - ent.v[ "angles" ] = rotater[ i ].angles; - } - i++; - } - p++; - } -} - -delete_pressed() -{ - if ( level.createfx_inputlocked ) - { - remove_selected_option(); - return; - } - delete_selection(); -} - -remove_selected_option() -{ - if ( !isDefined( level.selected_fx_option_index ) ) - { - return; - } - name = level.createfx_options[ level.selected_fx_option_index ][ "name" ]; - i = 0; - while ( i < level.createfxent.size ) - { - ent = level.createfxent[ i ]; - if ( !ent_is_selected( ent ) ) - { - i++; - continue; - } - else - { - ent remove_option( name ); - } - i++; - } - update_selected_entities(); - clear_settable_fx(); -} - -remove_option( name ) -{ -} - -delete_selection() -{ - newarray = []; - if ( level.selected_fx_ents.size < 1 ) - { - return; - } - store_undo_state( "delete", level.selected_fx_ents ); - level.cfx_last_action = "none"; - i = 0; - while ( i < level.createfxent.size ) - { - ent = level.createfxent[ i ]; - if ( ent_is_selected( ent ) ) - { - if ( isDefined( ent.looper ) ) - { - ent.looper delete(); - } - level.fx_highlightedent = undefined; - ent notify( "stop_loop" ); - i++; - continue; - } - else - { - newarray[ newarray.size ] = ent; - } - i++; - } - level.createfxent = newarray; - level.selected_fx = []; - level.selected_fx_ents = []; - clear_fx_hudelements(); -} - -move_selection_to_cursor( skip_undo ) -{ - origin = level.createfxcursor[ "position" ]; - if ( level.selected_fx_ents.size <= 0 ) - { - return; - } - if ( !isDefined( skip_undo ) && level.cfx_last_action != "move_to_cursor" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "move_to_cursor"; - } - center = get_center_of_array( level.selected_fx_ents ); - difference = center - origin; - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - if ( isDefined( ent.model ) ) - { - i++; - continue; - } - else - { - ent.v[ "origin" ] -= difference; - } - i++; - } -} - -insert_effect() -{ - setmenu( "creation" ); - level.effect_list_offset = 0; - clear_fx_hudelements(); - set_fx_hudelement( "Pick effect type to create:" ); - set_fx_hudelement( "1. One Shot fx" ); - set_fx_hudelement( "2. Looping fx" ); - set_fx_hudelement( "3. Exploder" ); - set_fx_hudelement( "4. Looping sound" ); - set_fx_hudelement( "(c) Cancel" ); - set_fx_hudelement( "(x) Exit" ); -} - -show_help() -{ - clear_fx_hudelements(); - set_fx_hudelement( "Help:" ); - set_fx_hudelement( "I Insert effect" ); - set_fx_hudelement( "Shift + D Delete selected effects" ); - set_fx_hudelement( "F + 5 Save" ); - set_fx_hudelement( "A button Toggle the selection of the current effect" ); - set_fx_hudelement( "X button Toggle effect rotation mode" ); - set_fx_hudelement( "Y button Move selected effects up or rotate X axis" ); - set_fx_hudelement( "B button Move selected effects down or rotate X axis" ); - set_fx_hudelement( "D-pad Up/Down Move selected effects Forward/Backward or rotate Y axis" ); - set_fx_hudelement( "D-pad Left/Right Move selected effects Left/Right or rotate Z axis" ); - set_fx_hudelement( "R Shoulder Move selected effects to the cursor" ); - set_fx_hudelement( "L Shoulder Hold to select multiple effects" ); - set_fx_hudelement( "Right Arrow Next page in options menu" ); - set_fx_hudelement( "Left Arrow Previous page in options menu" ); - set_fx_hudelement( "A Add option to the selected effects" ); - set_fx_hudelement( "X Exit effect options menu" ); - set_fx_hudelement( "Shift + D Drop selected effects to the ground" ); - set_fx_hudelement( "R Reset the rotation of the selected effects" ); - set_fx_hudelement( "L Stick Copy effects" ); - set_fx_hudelement( "R Stick Paste effects" ); - set_fx_hudelement( "V Copy the angles from the most recently selected fx onto all selected fx." ); - set_fx_hudelement( "F + 2 Toggle CreateFX dot and menu drawing" ); - set_fx_hudelement( "U UFO" ); - set_fx_hudelement( "N Noclip" ); - set_fx_hudelement( "R Trig + L Trig Jump forward 8000 units" ); - set_fx_hudelement( "T Toggle Timescale FAST" ); - set_fx_hudelement( "Y Toggle Timescale SLOW" ); - set_fx_hudelement( "H Toggle FX Visibility" ); - set_fx_hudelement( "W Toggle effect wireframe" ); - set_fx_hudelement( "P Toggle FX Profile" ); -} - -center_text_init() -{ - level.cfx_center_text = []; - level.cfx_center_text_index = 0; - level.cfx_center_text_max = 3; - new_array = []; - p = 0; - while ( p < level.cfx_center_text_max ) - { - center_hud = newdebughudelem(); - center_hud settext( " " ); - center_hud.horzalign = "center"; - center_hud.vertalign = "middle"; - center_hud.alignx = "center"; - center_hud.aligny = "middle"; - center_hud.foreground = 1; - center_hud.fontscale = 1,1; - center_hud.sort = 21; - center_hud.alpha = 1; - center_hud.color = ( 1, 1, 1 ); - center_hud.y = p * 25; - new_array[ p ] = center_hud; - p++; - } - level.cfx_center_text = new_array; -} - -center_text_add( text ) -{ - if ( isDefined( text ) && isDefined( level.cfx_center_text ) ) - { - level.cfx_center_text[ level.cfx_center_text_index ] settext( text ); - level.cfx_center_text_index++; - if ( level.cfx_center_text_index >= level.cfx_center_text_max ) - { - level.cfx_center_text_index = level.cfx_center_text_max - 1; - } - } -} - -center_text_clear() -{ - p = 0; - while ( p < level.cfx_center_text_max ) - { - level.cfx_center_text[ p ] settext( " " ); - p++; - } - level.cfx_center_text_index = 0; -} - -write_error_msg( filename ) -{ - level notify( "write_error" ); - level endon( "write_error" ); - while ( isDefined( filename ) ) - { - center_text_clear(); - center_text_add( "File " + filename + " is not writeable." ); - center_text_add( "If it's checked out, restart your computer!" ); - center_text_add( "Hold the A Button to dismiss." ); - for ( ;; ) - { - player = get_players()[ 0 ]; - if ( player buttonpressed( "BUTTON_A" ) ) - { - center_text_clear(); - level.write_error = ""; - return; - } - else - { - wait 0,25; - } - } - } -} - -select_last_entity( skip_undo ) -{ - select_entity( level.createfxent.size - 1, level.createfxent[ level.createfxent.size - 1 ], skip_undo ); -} - -post_entity_creation_function() -{ - self.textalpha = 0; - self.drawn = 1; -} - -copy_ents() -{ - if ( level.selected_fx_ents.size <= 0 ) - { - return; - } - array = []; - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - newent = spawnstruct(); - newent.v = ent.v; - newent post_entity_creation_function(); - array[ array.size ] = newent; - i++; - } - level.stored_ents = array; -} - -paste_ents() -{ - delay_min = getDvarInt( "createfx_oneshot_min_delay" ); - delay_max = getDvarInt( "createfx_oneshot_max_delay" ); - if ( delay_min > delay_max ) - { - temp = delay_min; - delay_min = delay_max; - delay_max = temp; - } - if ( !isDefined( level.stored_ents ) ) - { - return; - } - clear_entity_selection(); - if ( level.cfx_last_action != "none" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - } - level.cfx_last_action = "none"; - i = 0; - while ( i < level.stored_ents.size ) - { - level.stored_ents[ i ].uniqueid = level.cfx_uniqueid; - level.cfx_uniqueid++; - if ( level.stored_ents[ i ].v[ "type" ] == "oneshotfx" ) - { - level.stored_ents[ i ].v[ "delay" ] = randomintrange( delay_min, delay_max ); - } - add_and_select_entity( level.stored_ents[ i ], "skip_undo" ); - i++; - } - move_selection_to_cursor( "skip_undo" ); - update_selected_entities(); - store_undo_state( "add", level.stored_ents ); - level.stored_ents = []; - copy_ents(); -} - -paste_ents_onto_ents() -{ - if ( !isDefined( level.stored_ents ) || !isDefined( level.selected_fx_ents ) ) - { - return; - } - if ( level.stored_ents.size < 1 || level.selected_fx_ents.size < 1 ) - { - return; - } - if ( level.stored_ents.size != level.selected_fx_ents.size ) - { -/# - println( "^2CreateFX: Number of source ents must match the number of destination ents for Paste Into to work." ); -#/ - return; - } - if ( level.cfx_last_action != "none" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - } - level.cfx_last_action = "none"; - selected_ents_temp = level.selected_fx_ents; - i = 0; - while ( i < level.stored_ents.size ) - { - source_ent = level.stored_ents[ i ]; - target_ent = level.selected_fx_ents[ i ]; - source_ent.uniqueid = level.cfx_uniqueid; - level.cfx_uniqueid++; - source_ent.v[ "angles" ] = target_ent.v[ "angles" ]; - source_ent.v[ "origin" ] = target_ent.v[ "origin" ]; - add_and_select_entity( source_ent, "skip_undo" ); - i++; - } - i = 0; - while ( i < selected_ents_temp.size ) - { - deselect_entity( selected_ents_temp[ i ].last_fx_index, selected_ents_temp[ i ] ); - i++; - } - update_selected_entities(); - store_undo_state( "add", level.stored_ents ); - level.stored_ents = []; - copy_ents(); -} - -add_and_select_entity( ent, skip_undo ) -{ - level.createfxent[ level.createfxent.size ] = ent; - select_last_entity( skip_undo ); -} - -stop_fx_looper() -{ - if ( isDefined( self.looper ) ) - { - self.looper delete(); - } - self [[ level.cfx_func_stop_loopsound ]](); -} - -restart_fx_looper() -{ - stop_fx_looper(); - self set_forward_and_up_vectors(); - if ( self.v[ "type" ] == "loopfx" ) - { - self [[ level.cfx_func_create_looper ]](); - } - if ( self.v[ "type" ] == "oneshotfx" ) - { - self [[ level.cfx_func_create_triggerfx ]](); - } - if ( self.v[ "type" ] == "soundfx" ) - { - self [[ level.cfx_func_create_loopsound ]](); - } -} - -update_selected_entities() -{ - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - ent restart_fx_looper(); - i++; - } -} - -copy_angles_of_selected_ents() -{ - level notify( "new_ent_selection" ); - if ( level.cfx_last_action != "copy_angles" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "copy_angles"; - } - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - ent.v[ "angles" ] = level.selected_fx_ents[ level.selected_fx_ents.size - 1 ].v[ "angles" ]; - ent set_forward_and_up_vectors(); - i++; - } - update_selected_entities(); -} - -reset_axis_of_selected_ents() -{ - level notify( "new_ent_selection" ); - if ( level.cfx_last_action != "reset_axis" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "reset_axis"; - } - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - ent.v[ "angles" ] = ( 1, 1, 1 ); - ent set_forward_and_up_vectors(); - i++; - } - update_selected_entities(); -} - -last_selected_entity_has_changed( lastselectentity ) -{ - if ( isDefined( lastselectentity ) ) - { - if ( !entities_are_selected() ) - { - return 1; - } - } - else - { - return entities_are_selected(); - } - return lastselectentity != level.selected_fx_ents[ level.selected_fx_ents.size - 1 ]; -} - -createfx_showorigin( id, org, delay, org2, type, exploder, id2, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout ) -{ -} - -drop_selection_to_ground() -{ - if ( level.cfx_last_action != "drop_to_ground" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "drop_to_ground"; - } - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - trace = bullettrace( ent.v[ "origin" ], ent.v[ "origin" ] + vectorScale( ( 1, 1, 1 ), 2048 ), 0, undefined ); - ent.v[ "origin" ] = trace[ "position" ]; - i++; - } -} - -set_off_exploders() -{ - level notify( "createfx_exploder_reset" ); - exploders = []; - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - if ( isDefined( ent.v[ "exploder" ] ) ) - { - exploders[ ent.v[ "exploder" ] ] = 1; - } - i++; - } - keys = getarraykeys( exploders ); - i = 0; - while ( i < keys.size ) - { - exploder( keys[ i ] ); - i++; - } -} - -turn_off_exploders() -{ - level notify( "createfx_exploder_reset" ); - exploders = []; - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - if ( isDefined( ent.v[ "exploder" ] ) ) - { - exploders[ ent.v[ "exploder" ] ] = 1; - } - i++; - } - keys = getarraykeys( exploders ); - i = 0; - while ( i < keys.size ) - { - stop_exploder( keys[ i ] ); - i++; - } -} - -draw_distance() -{ - count = 0; - last_pos = ( 1, 1, 1 ); - if ( getDvarInt( "createfx_drawdist" ) == 0 ) - { - setdvar( "createfx_drawdist", "1500" ); - } - player = get_players()[ 0 ]; - for ( ;; ) - { - maxdist = getDvarInt( "createfx_drawdist" ); - maxdistsqr = maxdist * maxdist; -/# - if ( flag( "createfx_saving" ) ) - { - println( "Waiting for createfx to save..." ); -#/ - } - flag_waitopen( "createfx_saving" ); - i = 0; - while ( i < level.createfxent.size ) - { - ent = level.createfxent[ i ]; - if ( ent_is_selected( ent ) ) - { - ent.drawn = 1; - count++; - continue; - } - else - { - ent.drawn = distancesquared( player.origin, ent.v[ "origin" ] ) <= maxdistsqr; - } - count++; - if ( count > 50 ) - { - count = 0; - wait 0,05; - } - i++; - } - wait 0,1; - while ( distancesquared( player.origin, last_pos ) < 2500 ) - { - wait 0,1; - } - last_pos = player.origin; - } -} - -createfx_save( autosave ) -{ - flag_waitopen( "createfx_saving" ); - flag_set( "createfx_saving" ); - resettimeout(); - if ( isDefined( autosave ) ) - { - savemode = "AUTOSAVE"; - } - else - { - savemode = "USER SAVE"; - } - type = "server"; - old_time = getTime(); -/# - println( "\n^3#### CREATEFX SERVER " + savemode + " BEGIN ####" ); -#/ - file_error = generate_fx_log( type, autosave ); -/# - println( ( "^3#### CREATEFX SERVER " + savemode + " END (Time: " ) + ( ( getTime() - old_time ) * 0,001 ) + " seconds)####" ); -#/ - if ( file_error ) - { -/# - println( "^3#### CREATEFX " + savemode + " CANCELLED ####" ); -#/ - createfx_emergency_backup(); - } - else - { - if ( level.clientscripts && !isDefined( autosave ) ) - { - old_time = getTime(); -/# - println( "\n^3#### CREATEFX CLIENT " + savemode + " BEGIN ####" ); -#/ - file_error = generate_fx_log( "client" ); -/# - println( ( "^3#### CREATEFX CLIENT " + savemode + " END (Time: " ) + ( ( getTime() - old_time ) * 0,001 ) + " seconds)####" ); -#/ - if ( file_error ) - { -/# - iprintln( "CreateFX clientscript file is not writeable! Aborting save." ); -#/ -/# - println( "^3#### CREATEFX " + savemode + " CANCELLED ####" ); -#/ - return; - } - } - flag_clear( "createfx_saving" ); - } -} - -createfx_autosave() -{ - for ( ;; ) - { - wait_time = getDvarInt( "createfx_autosave_time" ); - if ( wait_time < 120 || isstring( wait_time ) ) - { - wait_time = 120; - } - wait wait_time; - if ( !flag( "createfx_saving" ) ) - { - createfx_save( 1 ); - } - } -} - -createfx_emergency_backup() -{ -/# - println( "^5#### CREATEFX EMERGENCY BACKUP BEGIN ####" ); -#/ - file_error = generate_fx_log( "server", 1 ); - if ( file_error ) - { -/# - iprintln( "Error saving to backup.gsc. All is lost!" ); -#/ - } - else - { -/# - println( "^5#### CREATEFX EMERGENCY BACKUP END ####" ); -#/ - } - flag_clear( "createfx_saving" ); -} - -move_player_around_map_fast() -{ - player = get_players()[ 0 ]; - direction = player getplayerangles(); - direction_vec = anglesToForward( direction ); - eye = player geteye(); - trace = bullettrace( eye, eye + vectorScale( direction_vec, 20000 ), 0, undefined ); - dist = distance( eye, trace[ "position" ] ); - position = eye + vectorScale( direction_vec, dist - 64 ); - player setorigin( position ); -} - -move_player_to_next_same_effect( forward_search, lastselectentity ) -{ - player = get_players()[ 0 ]; - direction = player getplayerangles(); - direction_vec = anglesToForward( direction ); - if ( !isDefined( forward_search ) ) - { - forward_search = 1; - } - ent = level.selected_fx_ents[ level.selected_fx_ents.size - 1 ]; - start_index = 0; - if ( level.selected_fx_ents.size <= 0 ) - { - if ( forward_search ) - { - ent = level.cfx_next_ent; - } - else - { - ent = level.cfx_previous_ent; - } - if ( isDefined( ent ) ) - { - index = get_ent_index( ent ); - if ( index >= 0 ) - { - select_entity( index, ent ); - position = ent.v[ "origin" ] - vectorScale( direction_vec, 175 ); - player setorigin( position ); - level.cfx_previous_ent = ent; - level.cfx_next_ent = get_next_ent_with_same_id( index, ent.v[ "fxid" ] ); - } - else if ( forward_search ) - { - level.cfx_next_ent = undefined; - } - else - { - level.cfx_previous_ent = undefined; - } - } - return; - } - if ( level.selected_fx_ents.size == 1 ) - { - i = 0; - while ( i < level.createfxent.size ) - { - if ( isDefined( level.selected_fx[ i ] ) ) - { - start_index = i; - deselect_entity( i, ent ); - break; - } - else - { - i++; - } - } - if ( forward_search ) - { - level.cfx_previous_ent = ent; - ent = get_next_ent_with_same_id( i, ent.v[ "fxid" ] ); - select_entity( level.ent_found_index, ent ); - position = ent.v[ "origin" ] - vectorScale( direction_vec, 175 ); - player setorigin( position ); - level.cfx_next_ent = get_next_ent_with_same_id( level.ent_found_index, ent.v[ "fxid" ] ); - return; - } - else - { - level.cfx_next_ent = ent; - ent = get_previous_ent_with_same_id( i, ent.v[ "fxid" ] ); - select_entity( level.ent_found_index, ent ); - position = ent.v[ "origin" ] - vectorScale( direction_vec, 175 ); - player setorigin( position ); - level.cfx_previous_ent = get_previous_ent_with_same_id( level.ent_found_index, ent.v[ "fxid" ] ); - return; - } - } - else - { - if ( isDefined( level.last_ent_moved_to ) && !last_selected_entity_has_changed( lastselectentity ) ) - { - ent = level.last_ent_moved_to; - } - i = 0; - while ( i < level.selected_fx_ents.size ) - { - if ( ent == level.selected_fx_ents[ i ] ) - { - break; - } - else - { - i++; - } - } - if ( forward_search ) - { - if ( i < ( level.selected_fx_ents.size - 1 ) ) - { - i++; - ent = level.selected_fx_ents[ i ]; - } - else - { - ent = level.selected_fx_ents[ 0 ]; - } - } - else if ( i > 0 ) - { - ent = level.selected_fx_ents[ i - 1 ]; - } - else - { - ent = level.selected_fx_ents[ level.selected_fx_ents.size - 1 ]; - } - level.last_ent_moved_to = ent; - position = ent.v[ "origin" ] - vectorScale( direction_vec, 175 ); - player setorigin( position ); - } -} - -get_next_ent_with_same_id( index, ent_id ) -{ - i = index + 1; - while ( i < level.createfxent.size ) - { - if ( ent_id == level.createfxent[ i ].v[ "fxid" ] ) - { - level.ent_found_index = i; - return level.createfxent[ i ]; - } - i++; - } - i = 0; - while ( i < index ) - { - if ( ent_id == level.createfxent[ i ].v[ "fxid" ] ) - { - level.ent_found_index = i; - return level.createfxent[ i ]; - } - i++; - } - level.ent_found_index = index; - return level.createfxent[ index ]; -} - -get_previous_ent_with_same_id( index, ent_id ) -{ - i = index - 1; - while ( i > 0 ) - { - if ( ent_id == level.createfxent[ i ].v[ "fxid" ] ) - { - level.ent_found_index = i; - return level.createfxent[ i ]; - } - i--; - - } - i = level.createfxent.size - 1; - while ( i > index ) - { - if ( ent_id == level.createfxent[ i ].v[ "fxid" ] ) - { - level.ent_found_index = i; - return level.createfxent[ i ]; - } - i--; - - } - level.ent_found_index = index; - return level.createfxent[ index ]; -} - -get_ent_index( ent ) -{ - i = 0; - while ( i < level.createfxent.size ) - { - if ( ent == level.createfxent[ i ] ) - { - return i; - } - i++; - } - return -1; -} - -select_ents_by_property( property, add_to_selection ) -{ - ent = level.selected_fx_ents[ level.selected_fx_ents.size - 1 ]; - prop_to_match = ent.v[ property ]; - if ( !isDefined( add_to_selection ) ) - { - clear_entity_selection(); - } - i = 0; - while ( i < level.createfxent.size ) - { - if ( isDefined( level.createfxent[ i ].v[ property ] ) ) - { - if ( level.createfxent[ i ].v[ property ] == prop_to_match ) - { - select_entity( i, level.createfxent[ i ] ); - } - } - i++; - } -} - -print_ambient_fx_inventory() -{ -/# - fx_list = get_level_ambient_fx(); - ent_list = []; - fx_list_count = []; - println( "\n\n^2INVENTORY OF AMBIENT EFFECTS: " ); - i = 0; - while ( i < level.createfxent.size ) - { - ent_list[ i ] = level.createfxent[ i ].v[ "fxid" ]; - i++; - } - i = 0; - while ( i < fx_list.size ) - { - count = 0; - j = 0; - while ( j < ent_list.size ) - { - if ( fx_list[ i ] == ent_list[ j ] ) - { - count++; - ent_list[ j ] = ""; - } - j++; - } - fx_list_count[ i ] = count; - i++; - } - i = 0; - while ( i < ( fx_list_count.size - 1 ) ) - { - j = i + 1; - while ( j < fx_list_count.size ) - { - if ( fx_list_count[ j ] < fx_list_count[ i ] ) - { - temp_count = fx_list_count[ i ]; - temp_id = fx_list[ i ]; - fx_list_count[ i ] = fx_list_count[ j ]; - fx_list[ i ] = fx_list[ j ]; - fx_list_count[ j ] = temp_count; - fx_list[ j ] = temp_id; - } - j++; - } - i++; - } - i = 0; - while ( i < fx_list_count.size ) - { - switch( fx_list_count[ i ] ) - { - case 0: - print( "^1" ); - break; - case 1: - print( "^3" ); - break; - default: - } - print( fx_list_count[ i ] + "\t" + fx_list[ i ] + "\n" ); - i++; - } - print( "\n" ); -#/ - } -} - -vector_changed( old, new ) -{ - if ( distancesquared( old, new ) >= 1 ) - { - return 1; - } - return 0; -} - -dot_changed( old, new ) -{ - dot = vectordot( old, new ); - if ( dot < 1 ) - { - return 1; - } - return 0; -} - -damage_void( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) -{ -} - -handle_camera() -{ -/# - level notify( "new_camera" ); - level endon( "new_camera" ); - movement = ( 1, 1, 1 ); - if ( !isDefined( level.camera ) ) - { - level.camera = spawn( "script_origin", ( 1, 1, 1 ) ); - level.camera setmodel( "tag_origin" ); - } - players = get_players(); - players[ 0 ] playerlinktodelta( level.camera, "tag_origin", 1, 0, 0, 0, 0, 1 ); - players[ 0 ] disableweapons(); - level.camera_snapto = 1; - level.stick_camera = 1; - level.camera_prev_snapto = 0; - level.cameravec = ( 90, 150, 20 ); - model = undefined; - n_y_vector = 0; - n_x_vector = 0; - zoom_level = 300; - b_changes_x = 0; - b_changes_z = 0; - b_changes_y = 0; - test_string = ""; - for ( ;; ) - { - while ( 1 ) - { - if ( level.camera_snapto > 0 ) - { - if ( level.stick_camera ) - { - originoffset = vectorScale( level.cameravec, -1 ); - temp_offset = originoffset + vectorScale( ( 1, 1, 1 ), 60 ); - anglesoffset = vectorToAngle( temp_offset ); - if ( level.camera_prev_snapto == level.camera_snapto ) - { - players = get_players(); - newmovement = players[ 0 ] getnormalizedmovement(); - dolly_movement = players[ 0 ] getnormalizedcameramovement(); - if ( button_is_held( "BUTTON_LTRIG" ) || button_is_held( "BUTTON_RTRIG" ) ) - { - } - else - { - if ( newmovement[ 1 ] <= -0,4 ) - { - n_y_vector += -0,2; - b_changes_y = 1; - } - else if ( newmovement[ 1 ] >= 0,4 ) - { - n_y_vector += 0,2; - b_changes_y = 1; - } - else - { - b_changes_y = 0; - } - if ( newmovement[ 0 ] <= -0,4 ) - { - n_x_vector += -0,4; - b_changes_x = 1; - } - else if ( newmovement[ 0 ] >= 0,4 ) - { - n_x_vector += 0,4; - b_changes_x = 1; - } - else - { - b_changes_x = 0; - } - if ( dolly_movement[ 0 ] <= -0,4 ) - { - zoom_level += 30; - b_changes_z = 1; - } - else if ( dolly_movement[ 0 ] >= 0,4 ) - { - zoom_level += -30; - b_changes_z = 1; - } - else - { - b_changes_z = 0; - } - if ( !b_changes_z || b_changes_x && b_changes_y ) - { - newmovement = ( n_x_vector, n_y_vector, newmovement[ 2 ] ); - movement = ( 1, 1, 1 ); - movement = vectorScale( movement, 0,8 ) + vectorScale( newmovement, 1 - 0,8 ); - tilt = max( 0, 10 + ( movement[ 0 ] * 160 ) ); - level.cameravec = ( cos( movement[ 1 ] * 180 ) * zoom_level, sin( movement[ 1 ] * 180 ) * zoom_level, tilt ); - iprintln( level.cameravec[ 0 ] + " " + level.cameravec[ 1 ] + " " + level.cameravec[ 2 ] ); - } - } - } - else - { - level.camera_prev_snapto = level.camera_snapto; - } - if ( isDefined( level.current_select_ent ) ) - { - originoffset = vectorScale( level.cameravec, -1 ); - temp_offset = originoffset + vectorScale( ( 1, 1, 1 ), 60 ); - anglesoffset = vectorToAngle( temp_offset ); - if ( !isDefined( model ) ) - { - model = spawn( "script_origin", level.current_select_ent.v[ "origin" ] ); - model setmodel( "tag_origin" ); - } - if ( model.origin != level.current_select_ent.v[ "origin" ] ) - { - model.origin = level.current_select_ent.v[ "origin" ]; - } - level.camera linkto( model, "tag_origin", level.cameravec, anglesoffset ); - break; - } - else - { - wait 0,05; - } - } - } - else level.camera unlink(); - } - wait 0,05; -#/ - } -} - -camera_hud_toggle( text ) -{ - if ( isDefined( level.camera_hud ) ) - { - level.camera_hud destroy(); - } - level.camera_hud = newdebughudelem(); - level.camera_hud settext( text ); - level.camera_hud.horzalign = "left"; - level.camera_hud.vertalign = "bottom"; - level.camera_hud.alignx = "left"; - level.camera_hud.aligny = "bottom"; - level.camera_hud.foreground = 1; - level.camera_hud.fontscale = 1,1; - level.camera_hud.sort = 21; - level.camera_hud.alpha = 1; - level.camera_hud.color = ( 1, 1, 1 ); -} - -init_sp_paths() -{ -} - -make_sp_player_invulnerable( player ) -{ -} - -delete_arrays_in_sp() -{ -} - -used_in_animation( sp ) -{ -} - -init_client_sp_variables() -{ -} - -init_mp_paths() -{ - level.cfx_server_scriptdata = "mpcreatefx/"; - level.cfx_client_scriptdata = "mpclientcreatefx/"; - level.cfx_server_loop = "maps\\mp\\_utility::createLoopEffect"; - level.cfx_server_oneshot = "maps\\mp\\_utility::createOneshotEffect"; - level.cfx_server_exploder = "maps\\mp\\_utility::createExploder"; - level.cfx_server_loopsound = "maps\\mp\\_createfx::createLoopSound"; - level.cfx_server_scriptgendump = "maps\\mp\\createfx\\" + level.script + "_fx::main();"; - level.cfx_client_loop = "clientscripts\\mp\\_fx::createLoopEffect"; - level.cfx_client_oneshot = "clientscripts\\mp\\_fx::createOneshotEffect"; - level.cfx_client_exploder = "clientscripts\\mp\\_fx::createExploder"; - level.cfx_client_loopsound = "clientscripts\\mp\\_fx::createLoopSound"; - level.cfx_client_scriptgendump = "clientscripts\\mp\\_createfx\\" + level.script + "_fx::main();"; - level.cfx_func_run_gump_func = ::empty; - level.cfx_func_loopfx = ::maps/mp/_fx::loopfxthread; - level.cfx_func_oneshotfx = ::maps/mp/_fx::oneshotfxthread; - level.cfx_func_soundfx = ::maps/mp/_fx::create_loopsound; - level.cfx_func_script_gen_dump = ::maps/mp/_script_gen::script_gen_dump; - level.cfx_func_stop_loopsound = ::maps/mp/_fx::stop_loopsound; - level.cfx_func_create_looper = ::maps/mp/_fx::create_looper; - level.cfx_func_create_triggerfx = ::maps/mp/_fx::create_triggerfx; - level.cfx_func_create_loopsound = ::maps/mp/_fx::create_loopsound; -} - -callback_playerconnect() -{ - self waittill( "begin" ); - if ( !isDefined( level.hasspawned ) ) - { - spawnpoints = getentarray( "mp_global_intermission", "classname" ); - if ( !spawnpoints.size ) - { - spawnpoints = getentarray( "info_player_start", "classname" ); - } -/# - assert( spawnpoints.size ); -#/ - spawnpoint = spawnpoints[ 0 ]; - self.sessionteam = "none"; - self.sessionstate = "playing"; - if ( !level.teambased ) - { - self.ffateam = "none"; - } - self spawn( spawnpoint.origin, spawnpoint.angles ); - level.player = self; - level.hasspawned = 1; - } - else - { - kick( self.name ); - } -} - -delete_spawns() -{ - spawn_classes = []; - spawn_classes[ spawn_classes.size ] = "mp_dm_spawn"; - spawn_classes[ spawn_classes.size ] = "mp_tdm_spawn"; - spawn_classes[ spawn_classes.size ] = "mp_dom_spawn"; - spawn_classes[ spawn_classes.size ] = "mp_dom_spawn_axis_start"; - spawn_classes[ spawn_classes.size ] = "mp_dom_spawn_allies_start"; - spawn_classes[ spawn_classes.size ] = "mp_res_spawn_allies"; - spawn_classes[ spawn_classes.size ] = "mp_res_spawn_axis"; - spawn_classes[ spawn_classes.size ] = "mp_res_spawn_axis_start"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_attacker"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_attacker_a"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_attacker_b"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_attacker_c"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_attacker_start"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_attackerOT_start"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_defender"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_defender_a"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_defender_b"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_defender_c"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_defender_start"; - spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_defenderOT_start"; - _a4256 = spawn_classes; - _k4256 = getFirstArrayKey( _a4256 ); - while ( isDefined( _k4256 ) ) - { - class = _a4256[ _k4256 ]; - spawns = getentarray( class, "classname" ); - _a4260 = spawns; - _k4260 = getFirstArrayKey( _a4260 ); - while ( isDefined( _k4260 ) ) - { - spawn = _a4260[ _k4260 ]; - spawn delete(); - _k4260 = getNextArrayKey( _a4260, _k4260 ); - } - _k4256 = getNextArrayKey( _a4256, _k4256 ); - } -} - -createfxdelay() -{ - wait 10; - level.createfx_delay_done = 1; -} - -init_client_mp_variables() -{ - level.cfx_exploder_before = ::maps/mp/_utility::exploder_before_load; - level.cfx_exploder_after = ::maps/mp/_utility::exploder_after_load; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_createfxmenu.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_createfxmenu.gsc deleted file mode 100644 index 163c53f..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_createfxmenu.gsc +++ /dev/null @@ -1,1019 +0,0 @@ -#include maps/mp/_createfxundo; -#include maps/mp/_createfx; -#include maps/mp/_utility; -#include common_scripts/utility; - -menu( name ) -{ -/# - return level.create_fx_menu == name; -#/ -} - -setmenu( name ) -{ -/# - level.create_fx_menu = name; -#/ -} - -create_fx_menu() -{ -/# - if ( button_is_clicked( "escape", "x" ) ) - { - exit_menu(); - return; - } - if ( menu( "creation" ) ) - { - if ( button_is_clicked( "1" ) ) - { - setmenu( "create_oneshot" ); - draw_effects_list(); - return; - } - if ( button_is_clicked( "2" ) ) - { - setmenu( "create_loopfx" ); - draw_effects_list(); - return; - } - if ( button_is_clicked( "3" ) ) - { - setmenu( "create_exploder" ); - draw_effects_list(); - return; - } - if ( button_is_clicked( "4" ) ) - { - setmenu( "create_loopsound" ); - ent = createloopsound(); - finish_creating_entity( ent ); - setmenu( "none" ); - return; - } - } - if ( !menu( "create_oneshot" ) && !menu( "create_loopfx" ) || menu( "create_exploder" ) && menu( "change_fxid" ) ) - { - if ( button_is_clicked( "rightarrow" ) ) - { - increment_list_offset(); - draw_effects_list(); - } - if ( button_is_clicked( "leftarrow" ) ) - { - decrement_list_offset(); - draw_effects_list(); - } - menu_fx_creation(); - } - else - { - if ( menu( "none" ) ) - { - menu_change_selected_fx(); - if ( entities_are_selected() ) - { - display_fx_info( get_last_selected_entity() ); - if ( button_is_clicked( "a" ) ) - { - clear_settable_fx(); - setmenu( "add_options" ); - } - } - return; - } - else if ( menu( "add_options" ) ) - { - if ( !entities_are_selected() ) - { - clear_fx_hudelements(); - setmenu( "none" ); - return; - } - display_fx_add_options( get_last_selected_entity() ); - if ( button_is_clicked( "rightarrow" ) ) - { - increment_list_offset(); - } - if ( button_is_clicked( "leftarrow" ) ) - { - decrement_list_offset(); - } - return; - } - else if ( menu( "jump_to_effect" ) ) - { - if ( button_is_clicked( "rightarrow" ) ) - { - increment_list_offset(); - draw_effects_list( "Select effect to jump to:" ); - } - if ( button_is_clicked( "leftarrow" ) ) - { - decrement_list_offset(); - draw_effects_list( "Select effect to jump to:" ); - } - jump_to_effect(); - return; - } - else if ( menu( "select_by_property" ) ) - { - menu_selection(); - if ( button_is_clicked( "rightarrow" ) ) - { - increment_list_offset(); - } - if ( button_is_clicked( "leftarrow" ) ) - { - decrement_list_offset(); - } - return; - } - else if ( menu( "change_type" ) ) - { - if ( !entities_are_selected() ) - { - clear_fx_hudelements(); - setmenu( "none" ); - return; - return; - } - else - { - menu_fx_type(); -#/ - } - } - } -} - -exit_menu() -{ -/# - clear_fx_hudelements(); - clear_entity_selection(); - update_selected_entities(); - setmenu( "none" ); -#/ -} - -get_last_selected_entity() -{ -/# - return level.selected_fx_ents[ level.selected_fx_ents.size - 1 ]; -#/ -} - -menu_fx_creation() -{ -/# - count = 0; - picked_fx = undefined; - keys = get_level_ambient_fx(); - i = level.effect_list_offset; - while ( i < keys.size ) - { - count += 1; - button_to_check = count; - if ( button_to_check == 10 ) - { - button_to_check = 0; - } - if ( button_is_clicked( button_to_check + "" ) && !button_is_held( "f" ) ) - { - picked_fx = keys[ i ]; - break; - } - else - { - if ( count > level.effect_list_offset_max ) - { - break; - } - else - { - i++; - } - } - } - if ( !isDefined( picked_fx ) ) - { - return; - } - if ( menu( "change_fxid" ) ) - { - apply_option_to_selected_fx( get_option( "fxid" ), picked_fx ); - level.effect_list_offset = 0; - clear_fx_hudelements(); - setmenu( "none" ); - return; - } - ent = undefined; - if ( menu( "create_loopfx" ) ) - { - ent = createloopeffect( picked_fx ); - } - if ( menu( "create_oneshot" ) ) - { - ent = createoneshoteffect( picked_fx ); - delay_min = getDvarInt( "createfx_oneshot_min_delay" ); - delay_max = getDvarInt( "createfx_oneshot_max_delay" ); - if ( delay_min > delay_max ) - { - temp = delay_min; - delay_min = delay_max; - delay_max = temp; - } - ent.v[ "delay" ] = randomintrange( delay_min, delay_max ); - } - if ( menu( "create_exploder" ) ) - { - ent = createexploder( picked_fx ); - } - finish_creating_entity( ent ); - if ( level.cfx_last_action != "none" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - } - store_undo_state( "add", level.createfxent[ level.createfxent.size - 1 ] ); - level.cfx_last_action = "none"; - setmenu( "none" ); -#/ -} - -finish_creating_entity( ent ) -{ -/# - ent.v[ "angles" ] = vectorToAngle( ( ent.v[ "origin" ] + vectorScale( ( 1, 1, 0 ), 100 ) ) - ent.v[ "origin" ] ); - assert( isDefined( ent ) ); - ent post_entity_creation_function(); - clear_entity_selection(); - select_last_entity( "skip_undo" ); - move_selection_to_cursor( "skip_undo" ); - update_selected_entities(); -#/ -} - -change_effect_to_oneshot( ent ) -{ -/# - if ( ent.v[ "type" ] == "oneshotfx" ) - { - return; - } - if ( ent.v[ "type" ] == "exploder" ) - { - } - if ( !isDefined( ent.v[ "delay" ] ) || ent.v[ "delay" ] == 0 ) - { - delay_min = getDvarInt( "createfx_oneshot_min_delay" ); - delay_max = getDvarInt( "createfx_oneshot_max_delay" ); - if ( delay_min > delay_max ) - { - temp = delay_min; - delay_min = delay_max; - delay_max = temp; - } - ent.v[ "delay" ] = randomintrange( delay_min, delay_max ); - } - ent.v[ "type" ] = "oneshotfx"; -#/ -} - -change_effect_to_loop( ent ) -{ -/# - if ( ent.v[ "type" ] == "loopfx" ) - { - return; - } - if ( ent.v[ "type" ] == "exploder" ) - { - } - if ( !isDefined( ent.v[ "delay" ] ) || ent.v[ "delay" ] <= 0 ) - { - ent.v[ "delay" ] = 1; - } - ent.v[ "type" ] = "loopfx"; -#/ -} - -change_effect_to_exploder( ent ) -{ -/# - if ( ent.v[ "type" ] == "exploder" ) - { - return; - } - ent.v[ "type" ] = "exploder"; - if ( !isDefined( ent.v[ "delay" ] ) || ent.v[ "delay" ] < 0 ) - { - ent.v[ "delay" ] = 0; - } - ent.v[ "exploder" ] = 1; - ent.v[ "exploder_type" ] = "normal"; -#/ -} - -change_ent_type( newtype ) -{ -/# - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = "ent_type"; - if ( newtype == "oneshotfx" ) - { - i = 0; - while ( i < level.selected_fx_ents.size ) - { - change_effect_to_oneshot( level.selected_fx_ents[ i ] ); - i++; - } - } - else if ( newtype == "loopfx" ) - { - i = 0; - while ( i < level.selected_fx_ents.size ) - { - change_effect_to_loop( level.selected_fx_ents[ i ] ); - i++; - } - } - else while ( newtype == "exploder" ) - { - i = 0; - while ( i < level.selected_fx_ents.size ) - { - change_effect_to_exploder( level.selected_fx_ents[ i ] ); - i++; -#/ - } - } -} - -menu_init() -{ -/# - level.createfx_options = []; - addoption( "string", "type", "Type", "oneshotfx", "fx" ); - addoption( "string", "fxid", "Name", "nil", "fx" ); - addoption( "vector", "origin", "Origin", ( 1, 1, 0 ), "fx" ); - addoption( "vector", "angles", "Angles", ( 1, 1, 0 ), "fx" ); - addoption( "float", "delay", "Repeat rate/start delay", 0,5, "fx" ); - addoption( "int", "repeat", "Number of times to repeat", 5, "exploder" ); - addoption( "float", "primlightfrac", "Primary light fraction", 1, "fx" ); - addoption( "int", "lightoriginoffs", "Light origin offset", 64, "fx" ); - addoption( "float", "delay_min", "Minimum time between repeats", 1, "exploder" ); - addoption( "float", "delay_max", "Maximum time between repeats", 2, "exploder" ); - addoption( "float", "fire_range", "Fire damage range", 0, "fx" ); - addoption( "string", "firefx", "2nd FX id", "nil", "exploder" ); - addoption( "float", "firefxdelay", "2nd FX id repeat rate", 0,5, "exploder" ); - addoption( "float", "firefxtimeout", "2nd FX timeout", 5, "exploder" ); - addoption( "string", "firefxsound", "2nd FX soundalias", "nil", "exploder" ); - addoption( "string", "ender", "Level notify for ending 2nd FX", "nil", "exploder" ); - addoption( "string", "rumble", "Rumble", "nil", "exploder" ); - addoption( "float", "damage", "Radius damage", 150, "exploder" ); - addoption( "float", "damage_radius", "Radius of radius damage", 250, "exploder" ); - addoption( "int", "exploder", "Exploder", 1, "exploder" ); - addoption( "string", "earthquake", "Earthquake", "nil", "exploder" ); - addoption( "string", "soundalias", "Soundalias", "nil", "all" ); - addoption( "int", "stoppable", "Can be stopped from script", "1", "all" ); - level.effect_list_offset = 0; - level.effect_list_offset_max = 9; - level.createfxmasks = []; - level.createfxmasks[ "all" ] = []; - level.createfxmasks[ "all" ][ "exploder" ] = 1; - level.createfxmasks[ "all" ][ "oneshotfx" ] = 1; - level.createfxmasks[ "all" ][ "loopfx" ] = 1; - level.createfxmasks[ "all" ][ "soundfx" ] = 1; - level.createfxmasks[ "fx" ] = []; - level.createfxmasks[ "fx" ][ "exploder" ] = 1; - level.createfxmasks[ "fx" ][ "oneshotfx" ] = 1; - level.createfxmasks[ "fx" ][ "loopfx" ] = 1; - level.createfxmasks[ "exploder" ] = []; - level.createfxmasks[ "exploder" ][ "exploder" ] = 1; - level.createfxmasks[ "loopfx" ] = []; - level.createfxmasks[ "loopfx" ][ "loopfx" ] = 1; - level.createfxmasks[ "oneshotfx" ] = []; - level.createfxmasks[ "oneshotfx" ][ "oneshotfx" ] = 1; - level.createfxmasks[ "soundfx" ] = []; - level.createfxmasks[ "soundfx" ][ "soundalias" ] = 1; -#/ -} - -get_last_selected_ent() -{ -/# - return level.selected_fx_ents[ level.selected_fx_ents.size - 1 ]; -#/ -} - -entities_are_selected() -{ -/# - return level.selected_fx_ents.size > 0; -#/ -} - -menu_change_selected_fx() -{ -/# - if ( !level.selected_fx_ents.size ) - { - return; - } - count = 0; - drawncount = 0; - ent = get_last_selected_ent(); - i = 0; - while ( i < level.createfx_options.size ) - { - option = level.createfx_options[ i ]; - if ( !isDefined( ent.v[ option[ "name" ] ] ) ) - { - i++; - continue; - } - else count++; - if ( count < level.effect_list_offset ) - { - i++; - continue; - } - else - { - drawncount++; - button_to_check = drawncount; - if ( button_to_check == 10 ) - { - button_to_check = 0; - } - if ( button_is_clicked( button_to_check + "" ) && !button_is_held( "f" ) ) - { - prepare_option_for_change( option, drawncount ); - return; - } - else - { - if ( drawncount > level.effect_list_offset_max ) - { - return; - } - } - else - { - i++; -#/ - } - } - } -} - -prepare_option_for_change( option, drawncount ) -{ -/# - if ( option[ "name" ] == "fxid" ) - { - setmenu( "change_fxid" ); - draw_effects_list(); - return; - } - if ( option[ "name" ] == "type" ) - { - setmenu( "change_type" ); - return; - } - level.createfx_inputlocked = 1; - set_option_index( option[ "name" ] ); - setdvar( "fx", "nil" ); - level.createfxhudelements[ drawncount + 1 ][ 0 ].color = ( 1, 1, 0 ); -#/ -} - -menu_fx_option_set() -{ -/# - if ( getDvar( "fx" ) == "nil" ) - { - return; - } - option = get_selected_option(); - setting = undefined; - if ( option[ "type" ] == "string" ) - { - setting = getDvar( "fx" ); - } - if ( option[ "type" ] == "int" ) - { - setting = getDvarInt( "fx" ); - } - if ( option[ "type" ] == "float" ) - { - setting = getDvarFloat( "fx" ); - } - if ( option[ "type" ] == "vector" ) - { - setting = getDvar( "fx" ); - temparray = strtok( setting, " " ); - if ( temparray.size == 3 ) - { - setting = ( float( temparray[ 0 ] ), float( temparray[ 1 ] ), float( temparray[ 2 ] ) ); - } - else - { - clear_settable_fx(); - return; - } - } - apply_option_to_selected_fx( option, setting ); -#/ -} - -menu_fx_type() -{ -/# - clear_fx_hudelements(); - set_fx_hudelement( "Change effect type to:" ); - set_fx_hudelement( " (1) Oneshot" ); - set_fx_hudelement( " (2) Looped" ); - set_fx_hudelement( " (3) Exploder" ); - set_fx_hudelement( "(x) Exit >" ); - if ( button_is_clicked( "1" ) && !button_is_held( "f" ) ) - { - change_ent_type( "oneshotfx" ); - setmenu( "none" ); - } - else - { - if ( button_is_clicked( "2" ) && !button_is_held( "f" ) ) - { - change_ent_type( "loopfx" ); - setmenu( "none" ); - } - else - { - if ( button_is_clicked( "3" ) && !button_is_held( "f" ) ) - { - change_ent_type( "exploder" ); - setmenu( "none" ); - } - } - } - if ( menu( "none" ) ) - { - update_selected_entities(); -#/ - } -} - -menu_selection() -{ -/# - clear_fx_hudelements(); - set_fx_hudelement( "Select all by property:" ); - drawncount = 0; - option_number = 0; - ent = level.selected_fx_ents[ level.selected_fx_ents.size - 1 ]; - if ( level.selected_fx_ents.size < 1 ) - { - set_fx_hudelement( "No ent is selected." ); - } - else i = level.effect_list_offset; - while ( i < level.createfx_options.size ) - { - if ( drawncount > level.effect_list_offset_max ) - { - break; - } - else if ( drawncount > ent.v.size ) - { - break; - } - else - { - prop_name = level.createfx_options[ i ][ "name" ]; - option_number = drawncount + 1; - if ( isDefined( ent.v[ prop_name ] ) ) - { - if ( button_is_clicked( option_number + "" ) && !button_is_held( "f" ) ) - { - level.cfx_selected_prop = prop_name; - menunone(); - level.effect_list_offset = 0; - return; - } - prop_desc = level.createfx_options[ i ][ "description" ]; - set_fx_hudelement( ( option_number + ". " ) + prop_desc + ": " + ent.v[ prop_name ] ); - drawncount++; - i++; - continue; - } - i++; - } - } - if ( drawncount > level.effect_list_offset_max ) - { - pages = ceil( ent.v.size / level.effect_list_offset_max ); - current_page = ( level.effect_list_offset / level.effect_list_offset_max ) + 1; - set_fx_hudelement( "(<-) Page " + current_page + " of " + pages + " (->)" ); - } - set_fx_hudelement( "(x) Exit >" ); -#/ -} - -apply_option_to_selected_fx( option, setting ) -{ -/# - if ( level.cfx_last_action != option[ "name" ] ) - { - store_undo_state( "edit", level.selected_fx_ents ); - level.cfx_last_action = option[ "name" ]; - } - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - if ( mask( option[ "mask" ], ent.v[ "type" ] ) ) - { - ent.v[ option[ "name" ] ] = setting; - } - i++; - } - update_selected_entities(); - clear_settable_fx(); -#/ -} - -set_option_index( name ) -{ -/# - i = 0; - while ( i < level.createfx_options.size ) - { - if ( level.createfx_options[ i ][ "name" ] != name ) - { - i++; - continue; - } - else - { - level.selected_fx_option_index = i; - return; - } - i++; -#/ - } -} - -get_selected_option() -{ -/# - return level.createfx_options[ level.selected_fx_option_index ]; -#/ -} - -mask( type, name ) -{ -/# - return isDefined( level.createfxmasks[ type ][ name ] ); -#/ -} - -addoption( type, name, description, defaultsetting, mask ) -{ -/# - option = []; - option[ "type" ] = type; - option[ "name" ] = name; - option[ "description" ] = description; - option[ "default" ] = defaultsetting; - option[ "mask" ] = mask; - level.createfx_options[ level.createfx_options.size ] = option; -#/ -} - -get_option( name ) -{ -/# - i = 0; - while ( i < level.createfx_options.size ) - { - if ( level.createfx_options[ i ][ "name" ] == name ) - { - return level.createfx_options[ i ]; - } - i++; -#/ - } -} - -display_fx_info( ent ) -{ -/# - if ( !menu( "none" ) ) - { - return; - } - clear_fx_hudelements(); - if ( !level.createfx_draw_enabled ) - { - return; - } - set_fx_hudelement( "Selected: " + level.selected_fx_ents.size + " Distance: " + get_distance_from_ent( ent ) ); - level.createfxhudelements[ 0 ][ 0 ].color = ( 1, 1, 0 ); - set_fx_hudelement( "Name: " + ent.v[ "fxid" ] ); - if ( entities_are_selected() ) - { - count = 0; - drawncount = 0; - i = 0; - while ( i < level.createfx_options.size ) - { - option = level.createfx_options[ i ]; - if ( !isDefined( ent.v[ option[ "name" ] ] ) ) - { - i++; - continue; - } - else count++; - if ( count < level.effect_list_offset ) - { - i++; - continue; - } - else - { - drawncount++; - set_fx_hudelement( ( drawncount + ". " ) + option[ "description" ] + ": " + ent.v[ option[ "name" ] ] ); - if ( drawncount > level.effect_list_offset_max ) - { - more = 1; - break; - } - } - else - { - i++; - } - } - if ( count > level.effect_list_offset_max ) - { - pages = ceil( level.createfx_options.size / level.effect_list_offset_max ); - current_page = ( level.effect_list_offset / level.effect_list_offset_max ) + 1; - set_fx_hudelement( "(<-) Page " + current_page + " of " + pages + " (->)" ); - } - set_fx_hudelement( "(a) Add >" ); - set_fx_hudelement( "(x) Exit >" ); - } - else - { - set_fx_hudelement( "Origin: " + ent.v[ "origin" ] ); - set_fx_hudelement( "Angles: " + ent.v[ "angles" ] ); -#/ - } -} - -display_fx_add_options( ent ) -{ -/# - assert( menu( "add_options" ) ); - assert( entities_are_selected() ); - clear_fx_hudelements(); - set_fx_hudelement( "Selected: " + level.selected_fx_ents.size + " Distance: " + get_distance_from_ent( ent ) ); - level.createfxhudelements[ 0 ][ 0 ].color = ( 1, 1, 0 ); - set_fx_hudelement( "Name: " + ent.v[ "fxid" ] ); - set_fx_hudelement( "Origin: " + ent.v[ "origin" ] ); - set_fx_hudelement( "Angles: " + ent.v[ "angles" ] ); - count = 0; - drawncount = 0; - if ( level.effect_list_offset >= level.createfx_options.size ) - { - level.effect_list_offset = 0; - } - i = 0; - while ( i < level.createfx_options.size ) - { - option = level.createfx_options[ i ]; - if ( isDefined( ent.v[ option[ "name" ] ] ) ) - { - i++; - continue; - } - else if ( !mask( option[ "mask" ], ent.v[ "type" ] ) ) - { - i++; - continue; - } - else count++; - if ( count < level.effect_list_offset ) - { - i++; - continue; - } - else if ( drawncount >= level.effect_list_offset_max ) - { - i++; - continue; - } - else - { - drawncount++; - button_to_check = drawncount; - if ( button_to_check == 10 ) - { - button_to_check = 0; - } - if ( button_is_clicked( button_to_check + "" ) && !button_is_held( "f" ) ) - { - add_option_to_selected_entities( option ); - menunone(); - return; - } - set_fx_hudelement( ( button_to_check + ". " ) + option[ "description" ] ); - } - i++; - } - if ( count > level.effect_list_offset_max ) - { - pages = ceil( level.createfx_options.size / level.effect_list_offset_max ); - current_page = ( level.effect_list_offset / level.effect_list_offset_max ) + 1; - set_fx_hudelement( "(<-) Page " + current_page + " of " + pages + " (->)" ); - } - set_fx_hudelement( "(x) Exit >" ); -#/ -} - -add_option_to_selected_entities( option ) -{ -/# - i = 0; - while ( i < level.selected_fx_ents.size ) - { - ent = level.selected_fx_ents[ i ]; - if ( mask( option[ "mask" ], ent.v[ "type" ] ) ) - { - ent.v[ option[ "name" ] ] = option[ "default" ]; - } - i++; -#/ - } -} - -menunone() -{ -/# - level.effect_list_offset = 0; - clear_fx_hudelements(); - setmenu( "none" ); -#/ -} - -draw_effects_list( title ) -{ -/# - clear_fx_hudelements(); - if ( !isDefined( title ) ) - { - title = "Pick an effect:"; - } - set_fx_hudelement( title ); - count = 0; - more = 0; - keys = get_level_ambient_fx(); - if ( level.effect_list_offset >= keys.size ) - { - level.effect_list_offset = 0; - } - else - { - if ( level.effect_list_offset < 0 ) - { - level.effect_list_offset = int( floor( keys.size / level.effect_list_offset_max ) * level.effect_list_offset_max ); - } - } - i = level.effect_list_offset; - while ( i < keys.size ) - { - count += 1; - set_fx_hudelement( ( count + ". " ) + keys[ i ] ); - if ( count >= level.effect_list_offset_max ) - { - more = 1; - break; - } - else - { - i++; - } - } - if ( keys.size > level.effect_list_offset_max ) - { - pages = ceil( keys.size / level.effect_list_offset_max ); - current_page = ( level.effect_list_offset / level.effect_list_offset_max ) + 1; - set_fx_hudelement( "(<-) Page " + current_page + " of " + pages + " (->)" ); -#/ - } -} - -increment_list_offset() -{ -/# - level.effect_list_offset += level.effect_list_offset_max; -#/ -} - -decrement_list_offset() -{ -/# - level.effect_list_offset -= level.effect_list_offset_max; -#/ -} - -jump_to_effect() -{ -/# - count = 0; - picked_fxid = undefined; - keys = get_level_ambient_fx(); - i = level.effect_list_offset; - while ( i < keys.size ) - { - count += 1; - button_to_check = count; - if ( button_to_check == 10 ) - { - button_to_check = 0; - } - if ( button_is_clicked( button_to_check + "" ) && !button_is_held( "f" ) ) - { - picked_fxid = keys[ i ]; - break; - } - else - { - if ( count > level.effect_list_offset_max ) - { - break; - } - else - { - i++; - } - } - } - if ( !isDefined( picked_fxid ) ) - { - return; - } - clear_entity_selection(); - ent = get_next_ent_with_same_id( -1, picked_fxid ); - if ( isDefined( ent ) ) - { - level.cfx_next_ent = ent; - move_player_to_next_same_effect( 1 ); - } - else - { - iprintln( "Effect " + picked_fxid + " has not been placed." ); - } - level.effect_list_offset = 0; - clear_fx_hudelements(); - setmenu( "none" ); -#/ -} - -get_level_ambient_fx() -{ -/# - if ( !isDefined( level._effect_keys ) ) - { - keys = getarraykeys( level._effect ); - level._effect_keys = []; - k = 0; - i = 0; - while ( i < keys.size ) - { - if ( issubstr( keys[ i ], "fx_" ) ) - { - level._effect_keys[ k ] = keys[ i ]; - k++; - } - i++; - } - if ( level._effect_keys.size == 0 ) - { - level._effect_keys = keys; - } - } - return level._effect_keys; -#/ -} - -get_distance_from_ent( ent ) -{ -/# - player = get_players()[ 0 ]; - return distance( player geteye(), ent.v[ "origin" ] ); -#/ -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_createfxundo.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_createfxundo.gsc deleted file mode 100644 index 082e0ed..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_createfxundo.gsc +++ /dev/null @@ -1,545 +0,0 @@ -#include maps/mp/_createfxmenu; -#include maps/mp/_createfx; -#include maps/mp/_utility; -#include common_scripts/utility; - -store_undo_state( change_type, ents ) -{ - if ( !isDefined( level.cfx_undo_states ) ) - { - level.cfx_undo_states = []; - level.cfx_redo_states = []; - level.cfx_limbo_state = spawnstruct(); - level.cfx_max_states = 10; - } - if ( !isarray( ents ) ) - { - ents = array( ents ); - } - temp_array = []; - i = 0; - while ( i < ents.size ) - { - temp_array[ i ] = copy_fx_ent( ents[ i ] ); - i++; - } - state = spawnstruct(); - state.operation = change_type; - state.last_action = level.cfx_last_action; - state.ent_array = temp_array; - if ( level.cfx_undo_states.size >= level.cfx_max_states ) - { - level.cfx_undo_states = array_drop( level.cfx_undo_states ); - } - level.cfx_undo_states[ level.cfx_undo_states.size ] = state; - level.cfx_redo_states = []; - level.cfx_limbo_state = undefined; - debug_print_latest_state( "undo" ); -} - -undo() -{ - if ( isDefined( level.createfxent ) || !isDefined( level.cfx_undo_states ) && level.cfx_undo_states.size < 1 ) - { - return; - } - revert_state = level.cfx_undo_states[ level.cfx_undo_states.size - 1 ]; - if ( level.cfx_last_action != "none" ) - { - store_undo_state( "edit", level.selected_fx_ents ); - move_undo_state_to_redo(); - clear_entity_selection( "skip_undo" ); - apply_state_change( "undo", revert_state ); - move_undo_state_to_limbo(); - level.cfx_last_action = "none"; - } - else clear_entity_selection( "skip_undo" ); - if ( revert_state.operation != "edit" ) - { - apply_state_change( "undo", revert_state ); - move_undo_state_to_redo(); - level.cfx_last_action = "none"; - } - else if ( isDefined( level.cfx_limbo_state ) ) - { - move_limbo_state_to_redo(); - apply_state_change( "undo", revert_state ); - move_undo_state_to_limbo(); - level.cfx_last_action = "none"; - } - else - { - if ( level.cfx_undo_states.size > 1 ) - { - move_undo_state_to_redo(); - revert_state = level.cfx_undo_states[ level.cfx_undo_states.size - 1 ]; - } - apply_state_change( "undo", revert_state ); - move_undo_state_to_limbo(); - } -} - -apply_state_change( type, revert_state ) -{ - if ( type == "undo" ) - { -/# - println( "^2CreateFX: Undo operation" ); -#/ - if ( revert_state.operation == "edit" ) - { - undo_edit( revert_state.ent_array ); - } - else if ( revert_state.operation == "add" ) - { - undo_add( revert_state.ent_array ); - } - else - { - if ( revert_state.operation == "delete" ) - { - undo_delete( revert_state.ent_array ); - } - } - } - else /# - println( "^2CreateFX: Redo operation" ); -#/ - if ( revert_state.operation == "edit" ) - { - undo_edit( revert_state.ent_array ); - } - else if ( revert_state.operation == "add" ) - { - undo_delete( revert_state.ent_array ); - } - else - { - if ( revert_state.operation == "delete" ) - { - undo_add( revert_state.ent_array ); - } - } -} - -move_undo_state_to_redo() -{ - if ( level.cfx_redo_states.size >= level.cfx_max_states ) - { - level.cfx_redo_states = array_drop( level.cfx_redo_states ); - } - level.cfx_redo_states[ level.cfx_redo_states.size ] = level.cfx_undo_states[ level.cfx_undo_states.size - 1 ]; - level.cfx_undo_states = array_pop( level.cfx_undo_states ); - debug_print_latest_state( "undo" ); - debug_print_latest_state( "redo" ); -} - -move_redo_state_to_undo() -{ - if ( level.cfx_undo_states.size >= level.cfx_max_states ) - { - level.cfx_undo_states = array_drop( level.cfx_undo_states ); - } - level.cfx_undo_states[ level.cfx_undo_states.size ] = level.cfx_redo_states[ level.cfx_redo_states.size - 1 ]; - level.cfx_redo_states = array_pop( level.cfx_redo_states ); - debug_print_latest_state( "undo" ); - debug_print_latest_state( "redo" ); -} - -move_undo_state_to_limbo() -{ - level.cfx_limbo_state = level.cfx_undo_states[ level.cfx_undo_states.size - 1 ]; - level.cfx_undo_states = array_pop( level.cfx_undo_states ); - debug_print_latest_state( "undo" ); - debug_print_latest_state( "limbo" ); -} - -move_redo_state_to_limbo() -{ - level.cfx_limbo_state = level.cfx_redo_states[ level.cfx_redo_states.size - 1 ]; - level.cfx_redo_states = array_pop( level.cfx_redo_states ); - debug_print_latest_state( "redo" ); - debug_print_latest_state( "limbo" ); -} - -move_limbo_state_to_undo() -{ - if ( level.cfx_undo_states.size >= level.cfx_max_states ) - { - level.cfx_undo_states = array_drop( level.cfx_undo_states ); - } - level.cfx_undo_states[ level.cfx_undo_states.size ] = level.cfx_limbo_state; - level.cfx_limbo_state = undefined; - debug_print_latest_state( "undo" ); - debug_print_latest_state( "limbo" ); -} - -move_limbo_state_to_redo() -{ - if ( level.cfx_redo_states.size >= level.cfx_max_states ) - { - level.cfx_redo_states = array_drop( level.cfx_redo_states ); - } - level.cfx_redo_states[ level.cfx_redo_states.size ] = level.cfx_limbo_state; - level.cfx_limbo_state = undefined; - debug_print_latest_state( "redo" ); -} - -undo_edit( ent_array ) -{ - ent_array = reorder_ent_array_by_uniqueid( ent_array ); -/# - println( "^3CreateFX: Undoing edit" ); - debug_print_ent_array( ent_array, "ent_array[]" ); - debug_print_ent_array( level.createfxent, "level.createFXent[]" ); -#/ - last_id = ent_array[ ent_array.size - 1 ].uniqueid; - if ( last_id > ( level.createfxent.size - 1 ) ) - { - last_id = level.createfxent.size - 1; - } - j = ent_array.size - 1; - source_ent = ent_array[ j ]; - i = last_id; - while ( i >= 0 ) - { - target_ent = level.createfxent[ i ]; - if ( source_ent.uniqueid == target_ent.uniqueid ) - { - copy_values_between_fx_ents( source_ent, target_ent ); - select_entity( i, target_ent, "skip_undo" ); - j--; - - if ( j < 0 ) - { - break; - } - else - { - source_ent = ent_array[ j ]; - } - i--; - - } - } - update_selected_entities(); -/# - println( "^1CreateFX: Finished edit" ); - debug_print_ent_array( level.createfxent, "level.createFXent[]" ); -#/ -} - -undo_add( ent_array ) -{ - ent_array = reorder_ent_array_by_uniqueid( ent_array ); -/# - println( "^3createfx: Undoing add." ); - debug_print_ent_array( ent_array, "ent_array[]" ); - debug_print_ent_array( level.createfxent, "level.createFXent[]" ); -#/ - last_id = ent_array[ ent_array.size - 1 ].uniqueid; - if ( last_id > ( level.createfxent.size - 1 ) ) - { - last_id = level.createfxent.size - 1; - } - j = ent_array.size - 1; - source_ent = ent_array[ j ]; - i = last_id; - while ( i >= 0 ) - { - target_ent = level.createfxent[ i ]; - if ( source_ent.uniqueid == target_ent.uniqueid ) - { - if ( isDefined( target_ent.looper ) ) - { - target_ent.looper delete(); - } - target_ent notify( "stop_loop" ); - j--; - - if ( j < 0 ) - { - break; - } - else - { - source_ent = ent_array[ j ]; - } - i--; - - } - } -/# - debug_print_ent_array( level.createfxent, "level.createFXent[]" ); - println( "createfx: Starting array_remove_undefined()" ); -#/ - arrayremovevalue( level.createfxent, undefined ); -/# - println( "^1CreateFX: Finished undo add." ); - debug_print_ent_array( level.createfxent, "level.createFXent[]" ); -#/ - clear_fx_hudelements(); -} - -undo_delete( ent_array ) -{ -/# - println( "^3CreateFX: Undoing delete" ); - debug_print_ent_array( ent_array, "ent_array in undo_delete()" ); - debug_print_ent_array( level.createfxent, "level.createFXent[]" ); -#/ - ent_array = reorder_ent_array_by_uniqueid( ent_array ); - if ( level.createfxent.size == 0 ) - { - i = 0; - while ( i < ent_array.size ) - { - level.createfxent[ i ] = copy_fx_ent( ent_array[ i ] ); - i++; - } - } - else temp_array = []; - i = 0; - j = 0; - while ( j < level.createfxent.size ) - { - target_ent = level.createfxent[ j ]; - if ( i >= ent_array.size ) - { - temp_array[ temp_array.size ] = target_ent; - j++; - continue; - } - else source_ent = ent_array[ i ]; - if ( target_ent.uniqueid < source_ent.uniqueid ) - { - temp_array[ temp_array.size ] = target_ent; - j++; - continue; - } - else - { - temp_array[ temp_array.size ] = copy_fx_ent( source_ent ); - j--; - - i++; - } - j++; - } - while ( i < ent_array.size ) - { - temp_array[ temp_array.size ] = ent_array[ i ]; - i++; - } - level.createfxent = temp_array; -/# - println( "^1Createfx: Finished undoing delete, pre-selection" ); - debug_print_ent_array( level.createfxent, "level.createFXent[]" ); -#/ - last_id = ent_array[ ent_array.size - 1 ].uniqueid; - if ( last_id > ( level.createfxent.size - 1 ) ) - { - last_id = level.createfxent.size - 1; - } - j = ent_array.size - 1; - source_ent = ent_array[ j ]; - i = last_id; - while ( i >= 0 ) - { - target_ent = level.createfxent[ i ]; - if ( source_ent.uniqueid == target_ent.uniqueid ) - { - target_ent post_entity_creation_function(); - select_entity( i, target_ent, "skip_undo" ); - j--; - - if ( j < 0 ) - { - break; - } - else - { - source_ent = ent_array[ j ]; - } - i--; - - } - } - update_selected_entities(); -} - -redo() -{ - if ( isDefined( level.createfxent ) || !isDefined( level.cfx_redo_states ) && level.cfx_redo_states.size < 1 ) - { - return; - } - clear_entity_selection( "skip_undo" ); - if ( isDefined( level.cfx_limbo_state ) ) - { - move_limbo_state_to_undo(); - move_redo_state_to_limbo(); - apply_state_change( "redo", level.cfx_limbo_state ); - } - else revert_state = level.cfx_redo_states[ level.cfx_redo_states.size - 1 ]; - apply_state_change( "redo", revert_state ); - if ( revert_state.operation == "edit" ) - { - move_redo_state_to_limbo(); - } - else - { - move_redo_state_to_undo(); - } - level.cfx_last_action = "none"; -} - -reorder_ent_array_by_uniqueid( ent_array ) -{ - if ( ent_array.size <= 1 ) - { - return ent_array; - } - array_size = ent_array.size; - i = 0; - while ( i < ( array_size - 1 ) ) - { - j = i + 1; - while ( j < array_size ) - { - if ( ent_array[ i ].uniqueid > ent_array[ j ].uniqueid ) - { - temp_ent = ent_array[ i ]; - ent_array[ i ] = ent_array[ j ]; - ent_array[ j ] = temp_ent; - } - j++; - } - i++; - } - return ent_array; -} - -copy_fx_ent( ent ) -{ - temp_ent = spawnstruct(); - temp_ent.drawn = ent.drawn; - temp_ent.drawn_axis_model = ent.drawn_axis_model; - temp_ent.last_fx_index = ent.last_fx_index; - temp_ent.textalpha = ent.textalpha; - temp_ent.uniqueid = ent.uniqueid; - temp_ent.v = ent.v; - return temp_ent; -} - -copy_values_between_fx_ents( source, dest ) -{ - dest.drawn = source.drawn; - dest.drawn_axis_model = source.drawn_axis_model; - dest.last_fx_index = source.last_fx_index; - dest.textalpha = source.textalpha; - dest.v = source.v; - return dest; -} - -array_pop( array ) -{ - array_size = array.size - 1; - temp_array = []; - if ( array_size <= 0 ) - { - return temp_array; - } - i = 0; - while ( i < array_size ) - { - temp_array[ i ] = array[ i ]; - i++; - } - array = temp_array; - return array; -} - -array_drop( array ) -{ - if ( array.size > 0 ) - { - temp_array = []; - i = 1; - while ( i < array.size ) - { - temp_array[ i - 1 ] = array[ i ]; - i++; - } - array = temp_array; - } - return array; -} - -debug_print_ent_array( array, name ) -{ -/# - if ( isDefined( name ) ) - { - println( "Printing out " + name ); - } - else - { - println( "Printing out some array" ); - } - i = 0; - while ( i < array.size ) - { - if ( !isDefined( array[ i ] ) ) - { - println( "" + i + ": deleted effect" ); - i++; - continue; - } - else - { - println( "" + i + ": uniqueid: " + array[ i ].uniqueid + " fxid: " + array[ i ].v[ "fxid" ] ); - } - i++; -#/ - } -} - -debug_print_latest_state( type ) -{ -/# - println( "^3Saving " + type + " state" ); - if ( type == "undo" ) - { - if ( !isDefined( level.cfx_undo_states[ level.cfx_undo_states.size - 1 ] ) ) - { - println( "There are no undo states." ); - return; - } - state = level.cfx_undo_states[ level.cfx_undo_states.size - 1 ]; - size = level.cfx_undo_states.size - 1; - } - else if ( type == "redo" ) - { - if ( !isDefined( level.cfx_redo_states[ level.cfx_redo_states.size - 1 ] ) ) - { - println( "There are no redo states." ); - return; - } - state = level.cfx_redo_states[ level.cfx_redo_states.size - 1 ]; - size = level.cfx_redo_states.size - 1; - } - else - { - if ( !isDefined( level.cfx_limbo_state ) ) - { - println( "There is no limbo state." ); - return; - } - state = level.cfx_limbo_state; - size = 0; - } - println( "State " + size + " - " + state.operation + ": " + state.last_action ); - debug_print_ent_array( state.ent_array, "save state ent_array" ); -#/ -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_demo.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_demo.gsc deleted file mode 100644 index 72e387c..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_demo.gsc +++ /dev/null @@ -1,97 +0,0 @@ - -init() -{ - level.bookmark[ "kill" ] = 0; - level.bookmark[ "event" ] = 1; - level.bookmark[ "zm_round_end" ] = 2; - level.bookmark[ "zm_player_downed" ] = 3; - level.bookmark[ "zm_player_revived" ] = 4; - level.bookmark[ "zm_player_bledout" ] = 5; - level.bookmark[ "zm_player_use_magicbox" ] = 6; - level.bookmark[ "score_event" ] = 7; - level.bookmark[ "medal" ] = 8; - level.bookmark[ "round_result" ] = 9; - level.bookmark[ "game_result" ] = 10; - level.bookmark[ "zm_powerup_dropped" ] = 11; - level.bookmark[ "zm_player_powerup_grabbed" ] = 12; - level.bookmark[ "zm_player_perk" ] = 13; - level.bookmark[ "zm_power" ] = 14; - level.bookmark[ "zm_player_door" ] = 15; - level.bookmark[ "zm_player_buildable_placed" ] = 16; - level.bookmark[ "zm_player_use_packapunch" ] = 17; - level.bookmark[ "zm_player_rampage" ] = 18; - level.bookmark[ "zm_player_grenade_special" ] = 19; - level.bookmark[ "zm_player_grenade_multiattack" ] = 20; - level.bookmark[ "zm_player_meat_stink" ] = 21; - level.bookmark[ "zm_player_grabbed_magicbox" ] = 22; - level.bookmark[ "zm_player_grabbed_packapunch" ] = 23; - level.bookmark[ "zm_player_grenade_special_long" ] = 24; -} - -bookmark( type, time, clientent1, clientent2, eventpriority, inflictorent, overrideentitycamera, actorent ) -{ -/# - assert( isDefined( level.bookmark[ type ] ), "Unable to find a bookmark type for type - " + type ); -#/ - client1 = 255; - client2 = 255; - inflictorentnum = -1; - inflictorenttype = 0; - inflictorbirthtime = 0; - actorentnum = undefined; - scoreeventpriority = 0; - if ( isDefined( clientent1 ) ) - { - client1 = clientent1 getentitynumber(); - } - if ( isDefined( clientent2 ) ) - { - client2 = clientent2 getentitynumber(); - } - if ( isDefined( eventpriority ) ) - { - scoreeventpriority = eventpriority; - } - if ( isDefined( inflictorent ) ) - { - inflictorentnum = inflictorent getentitynumber(); - inflictorenttype = inflictorent getentitytype(); - if ( isDefined( inflictorent.birthtime ) ) - { - inflictorbirthtime = inflictorent.birthtime; - } - } - if ( !isDefined( overrideentitycamera ) ) - { - overrideentitycamera = 0; - } - if ( isDefined( actorent ) ) - { - actorentnum = actorent getentitynumber(); - } - adddemobookmark( level.bookmark[ type ], time, client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum ); -} - -gameresultbookmark( type, winningteamindex, losingteamindex ) -{ -/# - assert( isDefined( level.bookmark[ type ] ), "Unable to find a bookmark type for type - " + type ); -#/ - client1 = 255; - client2 = 255; - scoreeventpriority = 0; - inflictorentnum = -1; - inflictorenttype = 0; - inflictorbirthtime = 0; - overrideentitycamera = 0; - actorentnum = undefined; - if ( isDefined( winningteamindex ) ) - { - client1 = winningteamindex; - } - if ( isDefined( losingteamindex ) ) - { - client2 = losingteamindex; - } - adddemobookmark( level.bookmark[ type ], getTime(), client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_fx.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_fx.gsc deleted file mode 100644 index 568ef04..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_fx.gsc +++ /dev/null @@ -1,458 +0,0 @@ -#include maps/mp/_createfx; -#include maps/mp/_utility; -#include common_scripts/utility; - -print_org( fxcommand, fxid, fxpos, waittime ) -{ -/# - if ( getDvar( "debug" ) == "1" ) - { - println( "{" ); - println( ""origin" "" + fxpos[ 0 ] + " " + fxpos[ 1 ] + " " + fxpos[ 2 ] + """ ); - println( ""classname" "script_model"" ); - println( ""model" "fx"" ); - println( ""script_fxcommand" "" + fxcommand + """ ); - println( ""script_fxid" "" + fxid + """ ); - println( ""script_delay" "" + waittime + """ ); - println( "}" ); -#/ - } -} - -oneshotfx( fxid, fxpos, waittime, fxpos2 ) -{ -} - -oneshotfxthread() -{ - wait 0,05; - if ( self.v[ "delay" ] > 0 ) - { - wait self.v[ "delay" ]; - } - create_triggerfx(); -} - -create_triggerfx() -{ - self.looper = spawnfx_wrapper( self.v[ "fxid" ], self.v[ "origin" ], self.v[ "forward" ], self.v[ "up" ] ); - triggerfx( self.looper, self.v[ "delay" ] ); - create_loopsound(); -} - -exploderfx( num, fxid, fxpos, waittime, fxpos2, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout, exploder_group ) -{ - if ( 1 ) - { - ent = createexploder( fxid ); - ent.v[ "origin" ] = fxpos; - ent.v[ "angles" ] = ( 0, 0, 0 ); - if ( isDefined( fxpos2 ) ) - { - ent.v[ "angles" ] = vectorToAngle( fxpos2 - fxpos ); - } - ent.v[ "delay" ] = waittime; - ent.v[ "exploder" ] = num; - return; - } - fx = spawn( "script_origin", ( 0, 0, 0 ) ); - fx.origin = fxpos; - fx.angles = vectorToAngle( fxpos2 - fxpos ); - fx.script_exploder = num; - fx.script_fxid = fxid; - fx.script_delay = waittime; - fx.script_firefx = firefx; - fx.script_firefxdelay = firefxdelay; - fx.script_firefxsound = firefxsound; - fx.script_sound = fxsound; - fx.script_earthquake = fxquake; - fx.script_damage = fxdamage; - fx.script_radius = damage_radius; - fx.script_soundalias = soundalias; - fx.script_firefxtimeout = firefxtimeout; - fx.script_repeat = repeat; - fx.script_delay_min = delay_min; - fx.script_delay_max = delay_max; - fx.script_exploder_group = exploder_group; - forward = anglesToForward( fx.angles ); - forward = vectorScale( forward, 150 ); - fx.targetpos = fxpos + forward; - if ( !isDefined( level._script_exploders ) ) - { - level._script_exploders = []; - } - level._script_exploders[ level._script_exploders.size ] = fx; - maps/mp/_createfx::createfx_showorigin( fxid, fxpos, waittime, fxpos2, "exploderfx", fx, undefined, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout ); -} - -loopfx( fxid, fxpos, waittime, fxpos2, fxstart, fxstop, timeout ) -{ -/# - println( "Loopfx is deprecated!" ); -#/ - ent = createloopeffect( fxid ); - ent.v[ "origin" ] = fxpos; - ent.v[ "angles" ] = ( 0, 0, 0 ); - if ( isDefined( fxpos2 ) ) - { - ent.v[ "angles" ] = vectorToAngle( fxpos2 - fxpos ); - } - ent.v[ "delay" ] = waittime; -} - -create_looper() -{ - self.looper = playloopedfx( level._effect[ self.v[ "fxid" ] ], self.v[ "delay" ], self.v[ "origin" ], 0, self.v[ "forward" ], self.v[ "up" ] ); - create_loopsound(); -} - -create_loopsound() -{ - self notify( "stop_loop" ); - if ( isDefined( self.v[ "soundalias" ] ) && self.v[ "soundalias" ] != "nil" ) - { - if ( isDefined( self.looper ) ) - { - self.looper thread maps/mp/_utility::loop_fx_sound( self.v[ "soundalias" ], self.v[ "origin" ], "death" ); - return; - } - else - { - thread maps/mp/_utility::loop_fx_sound( self.v[ "soundalias" ], self.v[ "origin" ], "stop_loop" ); - } - } -} - -stop_loopsound() -{ - self notify( "stop_loop" ); -} - -loopfxthread() -{ - wait 0,05; - if ( isDefined( self.fxstart ) ) - { - level waittill( "start fx" + self.fxstart ); - } - while ( 1 ) - { - create_looper(); - if ( isDefined( self.timeout ) ) - { - thread loopfxstop( self.timeout ); - } - if ( isDefined( self.fxstop ) ) - { - level waittill( "stop fx" + self.fxstop ); - } - else - { - return; - } - if ( isDefined( self.looper ) ) - { - self.looper delete(); - } - if ( isDefined( self.fxstart ) ) - { - level waittill( "start fx" + self.fxstart ); - continue; - } - else - { - return; - } - } -} - -loopfxchangeid( ent ) -{ - self endon( "death" ); - ent waittill( "effect id changed", change ); -} - -loopfxchangeorg( ent ) -{ - self endon( "death" ); - for ( ;; ) - { - ent waittill( "effect org changed", change ); - self.origin = change; - } -} - -loopfxchangedelay( ent ) -{ - self endon( "death" ); - ent waittill( "effect delay changed", change ); -} - -loopfxdeletion( ent ) -{ - self endon( "death" ); - ent waittill( "effect deleted" ); - self delete(); -} - -loopfxstop( timeout ) -{ - self endon( "death" ); - wait timeout; - self.looper delete(); -} - -loopsound( sound, pos, waittime ) -{ - level thread loopsoundthread( sound, pos, waittime ); -} - -loopsoundthread( sound, pos, waittime ) -{ - org = spawn( "script_origin", pos ); - org.origin = pos; - org playloopsound( sound ); -} - -gunfireloopfx( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) -{ - thread gunfireloopfxthread( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ); -} - -gunfireloopfxthread( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) -{ - level endon( "stop all gunfireloopfx" ); - wait 0,05; - if ( betweensetsmax < betweensetsmin ) - { - temp = betweensetsmax; - betweensetsmax = betweensetsmin; - betweensetsmin = temp; - } - betweensetsbase = betweensetsmin; - betweensetsrange = betweensetsmax - betweensetsmin; - if ( shotdelaymax < shotdelaymin ) - { - temp = shotdelaymax; - shotdelaymax = shotdelaymin; - shotdelaymin = temp; - } - shotdelaybase = shotdelaymin; - shotdelayrange = shotdelaymax - shotdelaymin; - if ( shotsmax < shotsmin ) - { - temp = shotsmax; - shotsmax = shotsmin; - shotsmin = temp; - } - shotsbase = shotsmin; - shotsrange = shotsmax - shotsmin; - fxent = spawnfx( level._effect[ fxid ], fxpos ); - for ( ;; ) - { - shotnum = shotsbase + randomint( shotsrange ); - i = 0; - while ( i < shotnum ) - { - triggerfx( fxent ); - wait ( shotdelaybase + randomfloat( shotdelayrange ) ); - i++; - } - wait ( betweensetsbase + randomfloat( betweensetsrange ) ); - } -} - -gunfireloopfxvec( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) -{ - thread gunfireloopfxvecthread( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ); -} - -gunfireloopfxvecthread( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax ) -{ - level endon( "stop all gunfireloopfx" ); - wait 0,05; - if ( betweensetsmax < betweensetsmin ) - { - temp = betweensetsmax; - betweensetsmax = betweensetsmin; - betweensetsmin = temp; - } - betweensetsbase = betweensetsmin; - betweensetsrange = betweensetsmax - betweensetsmin; - if ( shotdelaymax < shotdelaymin ) - { - temp = shotdelaymax; - shotdelaymax = shotdelaymin; - shotdelaymin = temp; - } - shotdelaybase = shotdelaymin; - shotdelayrange = shotdelaymax - shotdelaymin; - if ( shotsmax < shotsmin ) - { - temp = shotsmax; - shotsmax = shotsmin; - shotsmin = temp; - } - shotsbase = shotsmin; - shotsrange = shotsmax - shotsmin; - fxpos2 = vectornormalize( fxpos2 - fxpos ); - fxent = spawnfx( level._effect[ fxid ], fxpos, fxpos2 ); - for ( ;; ) - { - shotnum = shotsbase + randomint( shotsrange ); - i = 0; - while ( i < int( shotnum / level.fxfireloopmod ) ) - { - triggerfx( fxent ); - delay = ( shotdelaybase + randomfloat( shotdelayrange ) ) * level.fxfireloopmod; - if ( delay < 0,05 ) - { - delay = 0,05; - } - wait delay; - i++; - } - wait ( shotdelaybase + randomfloat( shotdelayrange ) ); - wait ( betweensetsbase + randomfloat( betweensetsrange ) ); - } -} - -setfireloopmod( value ) -{ - level.fxfireloopmod = 1 / value; -} - -setup_fx() -{ - if ( isDefined( self.script_fxid ) || !isDefined( self.script_fxcommand ) && !isDefined( self.script_delay ) ) - { - return; - } - org = undefined; - if ( isDefined( self.target ) ) - { - ent = getent( self.target, "targetname" ); - if ( isDefined( ent ) ) - { - org = ent.origin; - } - } - fxstart = undefined; - if ( isDefined( self.script_fxstart ) ) - { - fxstart = self.script_fxstart; - } - fxstop = undefined; - if ( isDefined( self.script_fxstop ) ) - { - fxstop = self.script_fxstop; - } - if ( self.script_fxcommand == "OneShotfx" ) - { - oneshotfx( self.script_fxid, self.origin, self.script_delay, org ); - } - if ( self.script_fxcommand == "loopfx" ) - { - loopfx( self.script_fxid, self.origin, self.script_delay, org, fxstart, fxstop ); - } - if ( self.script_fxcommand == "loopsound" ) - { - loopsound( self.script_fxid, self.origin, self.script_delay ); - } - self delete(); -} - -script_print_fx() -{ -/# - if ( isDefined( self.script_fxid ) || !isDefined( self.script_fxcommand ) && !isDefined( self.script_delay ) ) - { - println( "Effect at origin ", self.origin, " doesn't have script_fxid/script_fxcommand/script_delay" ); - self delete(); - return; - } - if ( isDefined( self.target ) ) - { - org = getent( self.target, "targetname" ).origin; - } - else - { - org = "undefined"; - } - if ( self.script_fxcommand == "OneShotfx" ) - { - println( "mapsmp_fx::OneShotfx("" + self.script_fxid + "", " + self.origin + ", " + self.script_delay + ", " + org + ");" ); - } - if ( self.script_fxcommand == "loopfx" ) - { - println( "mapsmp_fx::LoopFx("" + self.script_fxid + "", " + self.origin + ", " + self.script_delay + ", " + org + ");" ); - } - if ( self.script_fxcommand == "loopsound" ) - { - println( "mapsmp_fx::LoopSound("" + self.script_fxid + "", " + self.origin + ", " + self.script_delay + ", " + org + ");" ); -#/ - } -} - -script_playfx( id, pos, pos2 ) -{ - if ( !id ) - { - return; - } - if ( isDefined( pos2 ) ) - { - playfx( id, pos, pos2 ); - } - else - { - playfx( id, pos ); - } -} - -script_playfxontag( id, ent, tag ) -{ - if ( !id ) - { - return; - } - playfxontag( id, ent, tag ); -} - -grenadeexplosionfx( pos ) -{ - playfx( level._effect[ "mechanical explosion" ], pos ); - earthquake( 0,15, 0,5, pos, 250 ); -} - -soundfx( fxid, fxpos, endonnotify ) -{ - org = spawn( "script_origin", ( 0, 0, 0 ) ); - org.origin = fxpos; - org playloopsound( fxid ); - if ( isDefined( endonnotify ) ) - { - org thread soundfxdelete( endonnotify ); - } -} - -soundfxdelete( endonnotify ) -{ - level waittill( endonnotify ); - self delete(); -} - -blenddelete( blend ) -{ - self waittill( "death" ); - blend delete(); -} - -spawnfx_wrapper( fx_id, origin, forward, up ) -{ -/# - assert( isDefined( level._effect[ fx_id ] ), "Missing level._effect["" + fx_id + ""]. You did not setup the fx before calling it in createFx." ); -#/ - fx_object = spawnfx( level._effect[ fx_id ], origin, forward, up ); - return fx_object; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_fxanim.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_fxanim.gsc deleted file mode 100644 index 2a40039..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_fxanim.gsc +++ /dev/null @@ -1,6 +0,0 @@ - -init() -{ - level.scr_anim = []; - level.scr_anim[ "fxanim_props" ] = []; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_global_fx.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_global_fx.gsc deleted file mode 100644 index 8692423..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_global_fx.gsc +++ /dev/null @@ -1,60 +0,0 @@ -#include maps/mp/_utility; -#include common_scripts/utility; - -main() -{ - randomstartdelay = randomfloatrange( -20, -15 ); - global_fx( "barrel_fireFX_origin", "global_barrel_fire", "fire/firelp_barrel_pm", randomstartdelay, "fire_barrel_small" ); - global_fx( "ch_streetlight_02_FX_origin", "ch_streetlight_02_FX", "misc/lighthaze", randomstartdelay ); - global_fx( "me_streetlight_01_FX_origin", "me_streetlight_01_FX", "misc/lighthaze_bog_a", randomstartdelay ); - global_fx( "ch_street_light_01_on", "lamp_glow_FX", "misc/light_glow_white", randomstartdelay ); - global_fx( "highway_lamp_post", "ch_streetlight_02_FX", "misc/lighthaze_villassault", randomstartdelay ); - global_fx( "cs_cargoship_spotlight_on_FX_origin", "cs_cargoship_spotlight_on_FX", "misc/lighthaze", randomstartdelay ); - global_fx( "me_dumpster_fire_FX_origin", "me_dumpster_fire_FX", "fire/firelp_med_pm_nodistort", randomstartdelay, "fire_dumpster_medium" ); - global_fx( "com_tires_burning01_FX_origin", "com_tires_burning01_FX", "fire/tire_fire_med", randomstartdelay ); - global_fx( "icbm_powerlinetower_FX_origin", "icbm_powerlinetower_FX", "misc/power_tower_light_red_blink", randomstartdelay ); -} - -global_fx( targetname, fxname, fxfile, delay, soundalias ) -{ - ents = getstructarray( targetname, "targetname" ); - if ( !isDefined( ents ) ) - { - return; - } - if ( ents.size <= 0 ) - { - return; - } - i = 0; - while ( i < ents.size ) - { - ents[ i ] global_fx_create( fxname, fxfile, delay, soundalias ); - i++; - } -} - -global_fx_create( fxname, fxfile, delay, soundalias ) -{ - if ( !isDefined( level._effect ) ) - { - level._effect = []; - } - if ( !isDefined( level._effect[ fxname ] ) ) - { - level._effect[ fxname ] = loadfx( fxfile ); - } - if ( !isDefined( self.angles ) ) - { - self.angles = ( 0, 0, 0 ); - } - ent = createoneshoteffect( fxname ); - ent.v[ "origin" ] = self.origin; - ent.v[ "angles" ] = self.angles; - ent.v[ "fxid" ] = fxname; - ent.v[ "delay" ] = delay; - if ( isDefined( soundalias ) ) - { - ent.v[ "soundalias" ] = soundalias; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_interactive_objects.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_interactive_objects.gsc deleted file mode 100644 index 62b8ba3..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_interactive_objects.gsc +++ /dev/null @@ -1,407 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - level.barrelexplodingthisframe = 0; - qbarrels = 0; - all_barrels = []; - barrels = getentarray( "explodable_barrel", "targetname" ); - while ( isDefined( barrels ) && barrels.size > 0 ) - { - qbarrels = 1; - i = 0; - while ( i < barrels.size ) - { - all_barrels[ all_barrels.size ] = barrels[ i ]; - i++; - } - } - barrels = getentarray( "explodable_barrel", "script_noteworthy" ); - while ( isDefined( barrels ) && barrels.size > 0 ) - { - qbarrels = 1; - i = 0; - while ( i < barrels.size ) - { - all_barrels[ all_barrels.size ] = barrels[ i ]; - i++; - } - } - if ( qbarrels ) - { - precachemodel( "global_explosive_barrel" ); - level.barrelburn = 100; - level.barrelhealth = 250; - level.barrelingsound = "exp_redbarrel_ignition"; - level.barrelexpsound = "exp_redbarrel"; - level.breakables_fx[ "barrel" ][ "burn_start" ] = loadfx( "destructibles/fx_barrel_ignite" ); - level.breakables_fx[ "barrel" ][ "burn" ] = loadfx( "destructibles/fx_barrel_fire_top" ); - level.breakables_fx[ "barrel" ][ "explode" ] = loadfx( "destructibles/fx_barrelexp" ); - array_thread( all_barrels, ::explodable_barrel_think ); - } - qcrates = 0; - all_crates = []; - crates = getentarray( "flammable_crate", "targetname" ); - while ( isDefined( crates ) && crates.size > 0 ) - { - qcrates = 1; - i = 0; - while ( i < crates.size ) - { - all_crates[ all_crates.size ] = crates[ i ]; - i++; - } - } - crates = getentarray( "flammable_crate", "script_noteworthy" ); - while ( isDefined( crates ) && crates.size > 0 ) - { - qcrates = 1; - i = 0; - while ( i < crates.size ) - { - all_crates[ all_crates.size ] = crates[ i ]; - i++; - } - } - if ( qcrates ) - { - precachemodel( "global_flammable_crate_jap_piece01_d" ); - level.crateburn = 100; - level.cratehealth = 200; - level.breakables_fx[ "ammo_crate" ][ "burn_start" ] = loadfx( "destructibles/fx_ammobox_ignite" ); - level.breakables_fx[ "ammo_crate" ][ "burn" ] = loadfx( "destructibles/fx_ammobox_fire_top" ); - level.breakables_fx[ "ammo_crate" ][ "explode" ] = loadfx( "destructibles/fx_ammoboxExp" ); - level.crateignsound = "Ignition_ammocrate"; - level.crateexpsound = "Explo_ammocrate"; - array_thread( all_crates, ::flammable_crate_think ); - } - if ( !qbarrels && !qcrates ) - { - return; - } -} - -explodable_barrel_think() -{ - if ( self.classname != "script_model" ) - { - return; - } - self endon( "exploding" ); - self breakable_clip(); - self.health = level.barrelhealth; - self setcandamage( 1 ); - self.targetname = "explodable_barrel"; - if ( sessionmodeiszombiesgame() ) - { - self.removeexplodable = 1; - } - for ( ;; ) - { - self waittill( "damage", amount, attacker, direction_vec, p, type ); -/# - println( "BARRELDAMAGE: " + type ); -#/ - if ( type == "MOD_MELEE" || type == "MOD_IMPACT" ) - { - continue; - } - else - { - if ( isDefined( self.script_requires_player ) && self.script_requires_player && !isplayer( attacker ) ) - { - break; - } - else - { - if ( isDefined( self.script_selfisattacker ) && self.script_selfisattacker ) - { - self.damageowner = self; - } - else - { - self.damageowner = attacker; - } - self.health -= amount; - if ( self.health <= level.barrelburn ) - { - self thread explodable_barrel_burn(); - } - } - } - } -} - -explodable_barrel_burn() -{ - count = 0; - startedfx = 0; - up = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) ); - worldup = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) ); - dot = vectordot( up, worldup ); - offset1 = ( 0, 0, 1 ); - offset2 = up * vectorScale( ( 0, 0, 1 ), 44 ); - if ( dot < 0,5 ) - { - offset1 = ( up * vectorScale( ( 0, 0, 1 ), 22 ) ) - vectorScale( ( 0, 0, 1 ), 30 ); - offset2 = ( up * vectorScale( ( 0, 0, 1 ), 22 ) ) + vectorScale( ( 0, 0, 1 ), 14 ); - } - while ( self.health > 0 ) - { - if ( !startedfx ) - { - playfx( level.breakables_fx[ "barrel" ][ "burn_start" ], self.origin + offset1 ); - level thread play_sound_in_space( level.barrelingsound, self.origin ); - startedfx = 1; - } - if ( count > 20 ) - { - count = 0; - } - playfx( level.breakables_fx[ "barrel" ][ "burn" ], self.origin + offset2 ); - self playloopsound( "barrel_fuse" ); - if ( count == 0 ) - { - self.health -= 10 + randomint( 10 ); - } - count++; - wait 0,05; - } - level notify( "explosion_started" ); - self thread explodable_barrel_explode(); -} - -explodable_barrel_explode() -{ - self notify( "exploding" ); - self death_notify_wrapper(); - up = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) ); - worldup = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) ); - dot = vectordot( up, worldup ); - offset = ( 0, 0, 1 ); - if ( dot < 0,5 ) - { - start = self.origin + vectorScale( up, 22 ); - trace = physicstrace( start, start + vectorScale( ( 0, 0, 1 ), 64 ) ); - end = trace[ "position" ]; - offset = end - self.origin; - } - offset += vectorScale( ( 0, 0, 1 ), 4 ); - mindamage = 1; - maxdamage = 250; - blastradius = 250; - level thread play_sound_in_space( level.barrelexpsound, self.origin ); - playfx( level.breakables_fx[ "barrel" ][ "explode" ], self.origin + offset ); - physicsexplosionsphere( self.origin + offset, 100, 80, 1, maxdamage, mindamage ); - level.barrelexplodingthisframe = 1; - if ( isDefined( self.remove ) ) - { - self.remove delete(); - } - if ( isDefined( self.radius ) ) - { - blastradius = self.radius; - } - self radiusdamage( self.origin + vectorScale( ( 0, 0, 1 ), 56 ), blastradius, maxdamage, mindamage, self.damageowner ); - attacker = undefined; - if ( isDefined( self.damageowner ) ) - { - attacker = self.damageowner; - } - level.lastexplodingbarrel[ "time" ] = getTime(); - level.lastexplodingbarrel[ "origin" ] = self.origin + vectorScale( ( 0, 0, 1 ), 30 ); - if ( isDefined( self.removeexplodable ) ) - { - self hide(); - } - else - { - self setmodel( "global_explosive_barrel" ); - } - if ( dot < 0,5 ) - { - start = self.origin + vectorScale( up, 22 ); - trace = physicstrace( start, start + vectorScale( ( 0, 0, 1 ), 64 ) ); - pos = trace[ "position" ]; - self.origin = pos; - self.angles += vectorScale( ( 0, 0, 1 ), 90 ); - } - wait 0,05; - level.barrelexplodingthisframe = 0; -} - -flammable_crate_think() -{ - if ( self.classname != "script_model" ) - { - return; - } - self endon( "exploding" ); - self breakable_clip(); - self.health = level.cratehealth; - self setcandamage( 1 ); - for ( ;; ) - { - self waittill( "damage", amount, attacker, direction_vec, p, type ); - if ( isDefined( self.script_requires_player ) && self.script_requires_player && !isplayer( attacker ) ) - { - continue; - } - else - { - if ( isDefined( self.script_selfisattacker ) && self.script_selfisattacker ) - { - self.damageowner = self; - } - else - { - self.damageowner = attacker; - } - if ( level.barrelexplodingthisframe ) - { - wait randomfloat( 1 ); - } - self.health -= amount; - if ( self.health <= level.crateburn ) - { - self thread flammable_crate_burn(); - } - } - } -} - -flammable_crate_burn() -{ - count = 0; - startedfx = 0; - up = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) ); - worldup = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) ); - dot = vectordot( up, worldup ); - offset1 = ( 0, 0, 1 ); - offset2 = up * vectorScale( ( 0, 0, 1 ), 44 ); - if ( dot < 0,5 ) - { - offset1 = ( up * vectorScale( ( 0, 0, 1 ), 22 ) ) - vectorScale( ( 0, 0, 1 ), 30 ); - offset2 = ( up * vectorScale( ( 0, 0, 1 ), 22 ) ) + vectorScale( ( 0, 0, 1 ), 14 ); - } - while ( self.health > 0 ) - { - if ( !startedfx ) - { - playfx( level.breakables_fx[ "ammo_crate" ][ "burn_start" ], self.origin ); - level thread play_sound_in_space( level.crateignsound, self.origin ); - startedfx = 1; - } - if ( count > 20 ) - { - count = 0; - } - playfx( level.breakables_fx[ "ammo_crate" ][ "burn" ], self.origin ); - if ( count == 0 ) - { - self.health -= 10 + randomint( 10 ); - } - count++; - wait 0,05; - } - self thread flammable_crate_explode(); -} - -flammable_crate_explode() -{ - self notify( "exploding" ); - self death_notify_wrapper(); - up = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) ); - worldup = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) ); - dot = vectordot( up, worldup ); - offset = ( 0, 0, 1 ); - if ( dot < 0,5 ) - { - start = self.origin + vectorScale( up, 22 ); - trace = physicstrace( start, start + vectorScale( ( 0, 0, 1 ), 64 ) ); - end = trace[ "position" ]; - offset = end - self.origin; - } - offset += vectorScale( ( 0, 0, 1 ), 4 ); - mindamage = 1; - maxdamage = 250; - blastradius = 250; - level thread play_sound_in_space( level.crateexpsound, self.origin ); - playfx( level.breakables_fx[ "ammo_crate" ][ "explode" ], self.origin ); - physicsexplosionsphere( self.origin + offset, 100, 80, 1, maxdamage, mindamage ); - level.barrelexplodingthisframe = 1; - if ( isDefined( self.remove ) ) - { - self.remove delete(); - } - if ( isDefined( self.radius ) ) - { - blastradius = self.radius; - } - attacker = undefined; - if ( isDefined( self.damageowner ) ) - { - attacker = self.damageowner; - } - self radiusdamage( self.origin + vectorScale( ( 0, 0, 1 ), 30 ), blastradius, maxdamage, mindamage, attacker ); - self setmodel( "global_flammable_crate_jap_piece01_d" ); - if ( dot < 0,5 ) - { - start = self.origin + vectorScale( up, 22 ); - trace = physicstrace( start, start + vectorScale( ( 0, 0, 1 ), 64 ) ); - pos = trace[ "position" ]; - self.origin = pos; - self.angles += vectorScale( ( 0, 0, 1 ), 90 ); - } - wait 0,05; - level.barrelexplodingthisframe = 0; -} - -breakable_clip() -{ - if ( isDefined( self.target ) ) - { - targ = getent( self.target, "targetname" ); - if ( targ.classname == "script_brushmodel" ) - { - self.remove = targ; - return; - } - } - if ( isDefined( level.breakables_clip ) && level.breakables_clip.size > 0 ) - { - self.remove = getclosestent( self.origin, level.breakables_clip ); - } - if ( isDefined( self.remove ) ) - { - arrayremovevalue( level.breakables_clip, self.remove ); - } -} - -getclosestent( org, array ) -{ - if ( array.size < 1 ) - { - return; - } - dist = 256; - ent = undefined; - i = 0; - while ( i < array.size ) - { - newdist = distance( array[ i ] getorigin(), org ); - if ( newdist >= dist ) - { - i++; - continue; - } - else - { - dist = newdist; - ent = array[ i ]; - } - i++; - } - return ent; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_music.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_music.gsc deleted file mode 100644 index 9faa900..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_music.gsc +++ /dev/null @@ -1,30 +0,0 @@ -#include maps/mp/_utility; - -music_init() -{ -/# - assert( level.clientscripts ); -#/ - level.musicstate = ""; - registerclientsys( "musicCmd" ); -} - -setmusicstate( state, player ) -{ - if ( isDefined( level.musicstate ) ) - { - if ( isDefined( player ) ) - { - setclientsysstate( "musicCmd", state, player ); - return; - } - else - { - if ( level.musicstate != state ) - { - setclientsysstate( "musicCmd", state ); - } - } - } - level.musicstate = state; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_script_gen.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_script_gen.gsc deleted file mode 100644 index f5dbda6..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_script_gen.gsc +++ /dev/null @@ -1,342 +0,0 @@ -#include maps/mp/_script_gen; -#include maps/mp/_utility; -#include common_scripts/utility; - -script_gen_dump_checksaved() -{ - signatures = getarraykeys( level.script_gen_dump ); - i = 0; - while ( i < signatures.size ) - { - if ( !isDefined( level.script_gen_dump2[ signatures[ i ] ] ) ) - { - level.script_gen_dump_reasons[ level.script_gen_dump_reasons.size ] = "Signature unmatched( removed feature ): " + signatures[ i ]; - } - i++; - } -} - -script_gen_dump() -{ -/# - script_gen_dump_checksaved(); - if ( !level.script_gen_dump_reasons.size ) - { - flag_set( "scriptgen_done" ); - return; - } - firstrun = 0; - if ( level.bscriptgened ) - { - println( " " ); - println( " " ); - println( " " ); - println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); - println( "^3Dumping scriptgen dump for these reasons" ); - println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); - i = 0; - while ( i < level.script_gen_dump_reasons.size ) - { - if ( issubstr( level.script_gen_dump_reasons[ i ], "nowrite" ) ) - { - substr = getsubstr( level.script_gen_dump_reasons[ i ], 15 ); - println( ( i + ". ) " ) + substr ); - } - else - { - println( ( i + ". ) " ) + level.script_gen_dump_reasons[ i ] ); - } - if ( level.script_gen_dump_reasons[ i ] == "First run" ) - { - firstrun = 1; - } - i++; - } - println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); - println( " " ); - if ( firstrun ) - { - println( "for First Run make sure you delete all of the vehicle precache script calls, createart calls, createfx calls( most commonly placed in maps\\" + level.script + "_fx.gsc ) " ); - println( " " ); - println( "replace:" ); - println( "maps\\_load::main( 1 );" ); - println( " " ); - println( "with( don't forget to add this file to P4 ):" ); - println( "maps\\scriptgen\\" + level.script + "_scriptgen::main();" ); - println( " " ); - } - println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " ); - println( " " ); - println( "^2 / \\ / \\ / \\" ); - println( "^2scroll up" ); - println( "^2 / \\ / \\ / \\" ); - println( " " ); - } - else - { - return; - } - filename = "scriptgen/" + level.script + "_scriptgen.gsc"; - csvfilename = "zone_source/" + level.script + ".csv"; - if ( level.bscriptgened ) - { - file = openfile( filename, "write" ); - } - else - { - file = 0; - } - assert( file != -1, "File not writeable( check it and and restart the map ): " + filename ); - script_gen_dumpprintln( file, "// script generated script do not write your own script here it will go away if you do." ); - script_gen_dumpprintln( file, "main()" ); - script_gen_dumpprintln( file, "{" ); - script_gen_dumpprintln( file, "" ); - script_gen_dumpprintln( file, "\tlevel.script_gen_dump = [];" ); - script_gen_dumpprintln( file, "" ); - signatures = getarraykeys( level.script_gen_dump ); - i = 0; - while ( i < signatures.size ) - { - if ( !issubstr( level.script_gen_dump[ signatures[ i ] ], "nowrite" ) ) - { - script_gen_dumpprintln( file, "\t" + level.script_gen_dump[ signatures[ i ] ] ); - } - i++; - } - i = 0; - while ( i < signatures.size ) - { - if ( !issubstr( level.script_gen_dump[ signatures[ i ] ], "nowrite" ) ) - { - script_gen_dumpprintln( file, "\tlevel.script_gen_dump[ " + """ + signatures[ i ] + """ + " ] = " + """ + signatures[ i ] + """ + ";" ); - i++; - continue; - } - else - { - script_gen_dumpprintln( file, "\tlevel.script_gen_dump[ " + """ + signatures[ i ] + """ + " ] = " + ""nowrite"" + ";" ); - } - i++; - } - script_gen_dumpprintln( file, "" ); - keys1 = undefined; - keys2 = undefined; - if ( isDefined( level.sg_precacheanims ) ) - { - keys1 = getarraykeys( level.sg_precacheanims ); - } - while ( isDefined( keys1 ) ) - { - i = 0; - while ( i < keys1.size ) - { - script_gen_dumpprintln( file, "\tanim_precach_" + keys1[ i ] + "();" ); - i++; - } - } - script_gen_dumpprintln( file, "\tmaps\\_load::main( 1, " + level.bcsvgened + ", 1 );" ); - script_gen_dumpprintln( file, "}" ); - script_gen_dumpprintln( file, "" ); - if ( isDefined( level.sg_precacheanims ) ) - { - keys1 = getarraykeys( level.sg_precacheanims ); - } - while ( isDefined( keys1 ) ) - { - i = 0; - while ( i < keys1.size ) - { - script_gen_dumpprintln( file, "#using_animtree( "" + keys1[ i ] + "" );" ); - script_gen_dumpprintln( file, "anim_precach_" + keys1[ i ] + "()" ); - script_gen_dumpprintln( file, "{" ); - script_gen_dumpprintln( file, "\tlevel.sg_animtree[ "" + keys1[ i ] + "" ] = #animtree;" ); - keys2 = getarraykeys( level.sg_precacheanims[ keys1[ i ] ] ); - while ( isDefined( keys2 ) ) - { - j = 0; - while ( j < keys2.size ) - { - script_gen_dumpprintln( file, "\tlevel.sg_anim[ "" + keys2[ j ] + "" ] = %" + keys2[ j ] + ";" ); - j++; - } - } - script_gen_dumpprintln( file, "}" ); - script_gen_dumpprintln( file, "" ); - i++; - } - } - if ( level.bscriptgened ) - { - saved = closefile( file ); - } - else - { - saved = 1; - } - if ( level.bcsvgened ) - { - csvfile = openfile( csvfilename, "write" ); - } - else - { - csvfile = 0; - } - assert( csvfile != -1, "File not writeable( check it and and restart the map ): " + csvfilename ); - signatures = getarraykeys( level.script_gen_dump ); - i = 0; - while ( i < signatures.size ) - { - script_gen_csvdumpprintln( csvfile, signatures[ i ] ); - i++; - } - if ( level.bcsvgened ) - { - csvfilesaved = closefile( csvfile ); - } - else - { - csvfilesaved = 1; - } - assert( csvfilesaved == 1, "csv not saved( see above message? ): " + csvfilename ); - assert( saved == 1, "map not saved( see above message? ): " + filename ); -#/ -/# - assert( !level.bscriptgened, "SCRIPTGEN generated: follow instructions listed above this error in the console" ); -#/ - if ( level.bscriptgened ) - { -/# - assertmsg( "SCRIPTGEN updated: Rebuild fast file and run map again" ); -#/ - } - flag_set( "scriptgen_done" ); -} - -script_gen_csvdumpprintln( file, signature ) -{ - prefix = undefined; - writtenprefix = undefined; - path = ""; - extension = ""; - if ( issubstr( signature, "ignore" ) ) - { - prefix = "ignore"; - } - else if ( issubstr( signature, "col_map_sp" ) ) - { - prefix = "col_map_sp"; - } - else if ( issubstr( signature, "gfx_map" ) ) - { - prefix = "gfx_map"; - } - else if ( issubstr( signature, "rawfile" ) ) - { - prefix = "rawfile"; - } - else if ( issubstr( signature, "sound" ) ) - { - prefix = "sound"; - } - else if ( issubstr( signature, "xmodel" ) ) - { - prefix = "xmodel"; - } - else if ( issubstr( signature, "xanim" ) ) - { - prefix = "xanim"; - } - else if ( issubstr( signature, "item" ) ) - { - prefix = "item"; - writtenprefix = "weapon"; - path = "sp/"; - } - else if ( issubstr( signature, "fx" ) ) - { - prefix = "fx"; - } - else if ( issubstr( signature, "menu" ) ) - { - prefix = "menu"; - writtenprefix = "menufile"; - path = "ui / scriptmenus/"; - extension = ".menu"; - } - else if ( issubstr( signature, "rumble" ) ) - { - prefix = "rumble"; - writtenprefix = "rawfile"; - path = "rumble/"; - } - else if ( issubstr( signature, "shader" ) ) - { - prefix = "shader"; - writtenprefix = "material"; - } - else if ( issubstr( signature, "shock" ) ) - { - prefix = "shock"; - writtenprefix = "rawfile"; - extension = ".shock"; - path = "shock/"; - } - else if ( issubstr( signature, "string" ) ) - { - prefix = "string"; -/# - assertmsg( "string not yet supported by scriptgen" ); -#/ - } - else if ( issubstr( signature, "turret" ) ) - { - prefix = "turret"; - writtenprefix = "weapon"; - path = "sp/"; - } - else - { - if ( issubstr( signature, "vehicle" ) ) - { - prefix = "vehicle"; - writtenprefix = "rawfile"; - path = "vehicles/"; - } - } - if ( !isDefined( prefix ) ) - { - return; - } - if ( !isDefined( writtenprefix ) ) - { - string = ( prefix + ", " ) + getsubstr( signature, prefix.size + 1, signature.size ); - } - else - { - string = ( writtenprefix + ", " ) + path + getsubstr( signature, prefix.size + 1, signature.size ) + extension; - } -/# - if ( file == -1 || !level.bcsvgened ) - { - println( string ); - } - else - { - fprintln( file, string ); -#/ - } -} - -script_gen_dumpprintln( file, string ) -{ -/# - if ( file == -1 || !level.bscriptgened ) - { - println( string ); - } - else - { - fprintln( file, string ); -#/ - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_serverfaceanim_mp.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_serverfaceanim_mp.gsc deleted file mode 100644 index bbd52a4..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_serverfaceanim_mp.gsc +++ /dev/null @@ -1,56 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread onplayerspawned(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread init_serverfaceanim(); - } -} - -init_serverfaceanim() -{ - self.do_face_anims = 1; - if ( !isDefined( level.face_event_handler ) ) - { - level.face_event_handler = spawnstruct(); - level.face_event_handler.events = []; - level.face_event_handler.events[ "death" ] = "face_death"; - level.face_event_handler.events[ "grenade danger" ] = "face_alert"; - level.face_event_handler.events[ "bulletwhizby" ] = "face_alert"; - level.face_event_handler.events[ "projectile_impact" ] = "face_alert"; - level.face_event_handler.events[ "explode" ] = "face_alert"; - level.face_event_handler.events[ "alert" ] = "face_alert"; - level.face_event_handler.events[ "shoot" ] = "face_shoot_single"; - level.face_event_handler.events[ "melee" ] = "face_melee"; - level.face_event_handler.events[ "damage" ] = "face_pain"; - level thread wait_for_face_event(); - } -} - -wait_for_face_event() -{ - while ( 1 ) - { - level waittill( "face", face_notify, ent ); - if ( isDefined( ent ) && isDefined( ent.do_face_anims ) && ent.do_face_anims ) - { - if ( isDefined( level.face_event_handler.events[ face_notify ] ) ) - { - ent sendfaceevent( level.face_event_handler.events[ face_notify ] ); - } - } - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_sticky_grenade.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_sticky_grenade.gsc deleted file mode 100644 index eb8885c..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_sticky_grenade.gsc +++ /dev/null @@ -1,12 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" ); - loadfx( "weapon/crossbow/fx_trail_crossbow_blink_red_os" ); -} - -watch_bolt_detonation( owner ) -{ -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_utility.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_utility.gsc deleted file mode 100644 index 0157398..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_utility.gsc +++ /dev/null @@ -1,3077 +0,0 @@ -#include maps/mp/_utility; -#include maps/mp/_createfx; -#include maps/mp/gametypes/_hud_util; -#include common_scripts/utility; - -addcallback( event, func ) -{ -/# - assert( isDefined( event ), "Trying to set a callback on an undefined event." ); -#/ - if ( !isDefined( level._callbacks ) || !isDefined( level._callbacks[ event ] ) ) - { - level._callbacks[ event ] = []; - } - level._callbacks[ event ] = add_to_array( level._callbacks[ event ], func, 0 ); -} - -callback( event ) -{ - while ( isDefined( level._callbacks ) && isDefined( level._callbacks[ event ] ) ) - { - i = 0; - while ( i < level._callbacks[ event ].size ) - { - callback = level._callbacks[ event ][ i ]; - if ( isDefined( callback ) ) - { - self thread [[ callback ]](); - } - i++; - } - } -} - -onfinalizeinitialization_callback( func ) -{ - addcallback( "on_finalize_initialization", func ); -} - -triggeroff() -{ - if ( !isDefined( self.realorigin ) ) - { - self.realorigin = self.origin; - } - if ( self.origin == self.realorigin ) - { - self.origin += vectorScale( ( 0, 0, 1 ), 10000 ); - } -} - -triggeron() -{ - if ( isDefined( self.realorigin ) ) - { - self.origin = self.realorigin; - } -} - -error( msg ) -{ -/# - println( "^c*ERROR* ", msg ); - wait 0,05; - if ( getDvar( "debug" ) != "1" ) - { - assertmsg( "This is a forced error - attach the log file" ); -#/ - } -} - -warning( msg ) -{ -/# - println( "^1WARNING: " + msg ); -#/ -} - -spawn_array_struct() -{ - s = spawnstruct(); - s.a = []; - return s; -} - -within_fov( start_origin, start_angles, end_origin, fov ) -{ - normal = vectornormalize( end_origin - start_origin ); - forward = anglesToForward( start_angles ); - dot = vectordot( forward, normal ); - return dot >= fov; -} - -append_array_struct( dst_s, src_s ) -{ - i = 0; - while ( i < src_s.a.size ) - { - dst_s.a[ dst_s.a.size ] = src_s.a[ i ]; - i++; - } -} - -exploder( num ) -{ - [[ level.exploderfunction ]]( num ); -} - -exploder_stop( num ) -{ - stop_exploder( num ); -} - -exploder_sound() -{ - if ( isDefined( self.script_delay ) ) - { - wait self.script_delay; - } - self playsound( level.scr_sound[ self.script_sound ] ); -} - -cannon_effect() -{ - if ( isDefined( self.v[ "repeat" ] ) ) - { - i = 0; - while ( i < self.v[ "repeat" ] ) - { - playfx( level._effect[ self.v[ "fxid" ] ], self.v[ "origin" ], self.v[ "forward" ], self.v[ "up" ] ); - self exploder_delay(); - i++; - } - return; - } - self exploder_delay(); - if ( isDefined( self.looper ) ) - { - self.looper delete(); - } - self.looper = spawnfx( getfx( self.v[ "fxid" ] ), self.v[ "origin" ], self.v[ "forward" ], self.v[ "up" ] ); - triggerfx( self.looper ); - exploder_playsound(); -} - -exploder_delay() -{ - if ( !isDefined( self.v[ "delay" ] ) ) - { - self.v[ "delay" ] = 0; - } - min_delay = self.v[ "delay" ]; - max_delay = self.v[ "delay" ] + 0,001; - if ( isDefined( self.v[ "delay_min" ] ) ) - { - min_delay = self.v[ "delay_min" ]; - } - if ( isDefined( self.v[ "delay_max" ] ) ) - { - max_delay = self.v[ "delay_max" ]; - } - if ( min_delay > 0 ) - { - wait randomfloatrange( min_delay, max_delay ); - } -} - -exploder_playsound() -{ - if ( !isDefined( self.v[ "soundalias" ] ) || self.v[ "soundalias" ] == "nil" ) - { - return; - } - play_sound_in_space( self.v[ "soundalias" ], self.v[ "origin" ] ); -} - -brush_delete() -{ - num = self.v[ "exploder" ]; - if ( isDefined( self.v[ "delay" ] ) ) - { - wait self.v[ "delay" ]; - } - else - { - wait 0,05; - } - if ( !isDefined( self.model ) ) - { - return; - } -/# - assert( isDefined( self.model ) ); -#/ - if ( level.createfx_enabled ) - { - if ( isDefined( self.exploded ) ) - { - return; - } - self.exploded = 1; - self.model hide(); - self.model notsolid(); - wait 3; - self.exploded = undefined; - self.model show(); - self.model solid(); - return; - } - if ( !isDefined( self.v[ "fxid" ] ) || self.v[ "fxid" ] == "No FX" ) - { - } - waittillframeend; - self.model delete(); -} - -brush_show() -{ - if ( isDefined( self.v[ "delay" ] ) ) - { - wait self.v[ "delay" ]; - } -/# - assert( isDefined( self.model ) ); -#/ - self.model show(); - self.model solid(); - if ( level.createfx_enabled ) - { - if ( isDefined( self.exploded ) ) - { - return; - } - self.exploded = 1; - wait 3; - self.exploded = undefined; - self.model hide(); - self.model notsolid(); - } -} - -brush_throw() -{ - if ( isDefined( self.v[ "delay" ] ) ) - { - wait self.v[ "delay" ]; - } - ent = undefined; - if ( isDefined( self.v[ "target" ] ) ) - { - ent = getent( self.v[ "target" ], "targetname" ); - } - if ( !isDefined( ent ) ) - { - self.model delete(); - return; - } - self.model show(); - startorg = self.v[ "origin" ]; - startang = self.v[ "angles" ]; - org = ent.origin; - temp_vec = org - self.v[ "origin" ]; - x = temp_vec[ 0 ]; - y = temp_vec[ 1 ]; - z = temp_vec[ 2 ]; - self.model rotatevelocity( ( x, y, z ), 12 ); - self.model movegravity( ( x, y, z ), 12 ); - if ( level.createfx_enabled ) - { - if ( isDefined( self.exploded ) ) - { - return; - } - self.exploded = 1; - wait 3; - self.exploded = undefined; - self.v[ "origin" ] = startorg; - self.v[ "angles" ] = startang; - self.model hide(); - return; - } - wait 6; - self.model delete(); -} - -getplant() -{ - start = self.origin + vectorScale( ( 0, 0, 1 ), 10 ); - range = 11; - forward = anglesToForward( self.angles ); - forward = vectorScale( forward, range ); - traceorigins[ 0 ] = start + forward; - traceorigins[ 1 ] = start; - trace = bullettrace( traceorigins[ 0 ], traceorigins[ 0 ] + vectorScale( ( 0, 0, 1 ), 18 ), 0, undefined ); - if ( trace[ "fraction" ] < 1 ) - { - temp = spawnstruct(); - temp.origin = trace[ "position" ]; - temp.angles = orienttonormal( trace[ "normal" ] ); - return temp; - } - trace = bullettrace( traceorigins[ 1 ], traceorigins[ 1 ] + vectorScale( ( 0, 0, 1 ), 18 ), 0, undefined ); - if ( trace[ "fraction" ] < 1 ) - { - temp = spawnstruct(); - temp.origin = trace[ "position" ]; - temp.angles = orienttonormal( trace[ "normal" ] ); - return temp; - } - traceorigins[ 2 ] = start + vectorScale( ( 0, 0, 1 ), 16 ); - traceorigins[ 3 ] = start + vectorScale( ( 0, 0, 1 ), 16 ); - traceorigins[ 4 ] = start + vectorScale( ( 0, 0, 1 ), 16 ); - traceorigins[ 5 ] = start + vectorScale( ( 0, 0, 1 ), 16 ); - besttracefraction = undefined; - besttraceposition = undefined; - i = 0; - while ( i < traceorigins.size ) - { - trace = bullettrace( traceorigins[ i ], traceorigins[ i ] + vectorScale( ( 0, 0, 1 ), 1000 ), 0, undefined ); - if ( !isDefined( besttracefraction ) || trace[ "fraction" ] < besttracefraction ) - { - besttracefraction = trace[ "fraction" ]; - besttraceposition = trace[ "position" ]; - } - i++; - } - if ( besttracefraction == 1 ) - { - besttraceposition = self.origin; - } - temp = spawnstruct(); - temp.origin = besttraceposition; - temp.angles = orienttonormal( trace[ "normal" ] ); - return temp; -} - -orienttonormal( normal ) -{ - hor_normal = ( normal[ 0 ], normal[ 1 ], 0 ); - hor_length = length( hor_normal ); - if ( !hor_length ) - { - return ( 0, 0, 1 ); - } - hor_dir = vectornormalize( hor_normal ); - neg_height = normal[ 2 ] * -1; - tangent = ( hor_dir[ 0 ] * neg_height, hor_dir[ 1 ] * neg_height, hor_length ); - plant_angle = vectorToAngle( tangent ); - return plant_angle; -} - -array_levelthread( ents, process, var, excluders ) -{ - exclude = []; - i = 0; - while ( i < ents.size ) - { - exclude[ i ] = 0; - i++; - } - while ( isDefined( excluders ) ) - { - i = 0; - while ( i < ents.size ) - { - p = 0; - while ( p < excluders.size ) - { - if ( ents[ i ] == excluders[ p ] ) - { - exclude[ i ] = 1; - } - p++; - } - i++; - } - } - i = 0; - while ( i < ents.size ) - { - if ( !exclude[ i ] ) - { - if ( isDefined( var ) ) - { - level thread [[ process ]]( ents[ i ], var ); - i++; - continue; - } - else - { - level thread [[ process ]]( ents[ i ] ); - } - } - i++; - } -} - -deleteplacedentity( entity ) -{ - entities = getentarray( entity, "classname" ); - i = 0; - while ( i < entities.size ) - { - entities[ i ] delete(); - i++; - } -} - -playsoundonplayers( sound, team ) -{ -/# - assert( isDefined( level.players ) ); -#/ - if ( level.splitscreen ) - { - if ( isDefined( level.players[ 0 ] ) ) - { - level.players[ 0 ] playlocalsound( sound ); - } - } - else if ( isDefined( team ) ) - { - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team ) - { - player playlocalsound( sound ); - } - i++; - } - } - else i = 0; - while ( i < level.players.size ) - { - level.players[ i ] playlocalsound( sound ); - i++; - } -} - -get_player_height() -{ - return 70; -} - -isbulletimpactmod( smeansofdeath ) -{ - if ( !issubstr( smeansofdeath, "BULLET" ) ) - { - return smeansofdeath == "MOD_HEAD_SHOT"; - } -} - -get_team_alive_players_s( teamname ) -{ - teamplayers_s = spawn_array_struct(); - while ( isDefined( teamname ) && isDefined( level.aliveplayers ) && isDefined( level.aliveplayers[ teamname ] ) ) - { - i = 0; - while ( i < level.aliveplayers[ teamname ].size ) - { - teamplayers_s.a[ teamplayers_s.a.size ] = level.aliveplayers[ teamname ][ i ]; - i++; - } - } - return teamplayers_s; -} - -get_all_alive_players_s() -{ - allplayers_s = spawn_array_struct(); - while ( isDefined( level.aliveplayers ) ) - { - keys = getarraykeys( level.aliveplayers ); - i = 0; - while ( i < keys.size ) - { - team = keys[ i ]; - j = 0; - while ( j < level.aliveplayers[ team ].size ) - { - allplayers_s.a[ allplayers_s.a.size ] = level.aliveplayers[ team ][ j ]; - j++; - } - i++; - } - } - return allplayers_s; -} - -waitrespawnbutton() -{ - self endon( "disconnect" ); - self endon( "end_respawn" ); - while ( self usebuttonpressed() != 1 ) - { - wait 0,05; - } -} - -setlowermessage( text, time, combinemessageandtimer ) -{ - if ( !isDefined( self.lowermessage ) ) - { - return; - } - if ( isDefined( self.lowermessageoverride ) && text != &"" ) - { - text = self.lowermessageoverride; - time = undefined; - } - self notify( "lower_message_set" ); - self.lowermessage settext( text ); - if ( isDefined( time ) && time > 0 ) - { - if ( !isDefined( combinemessageandtimer ) || !combinemessageandtimer ) - { - self.lowertimer.label = &""; - } - else - { - self.lowermessage settext( "" ); - self.lowertimer.label = text; - } - self.lowertimer settimer( time ); - } - else - { - self.lowertimer settext( "" ); - self.lowertimer.label = &""; - } - if ( self issplitscreen() ) - { - self.lowermessage.fontscale = 1,4; - } - self.lowermessage fadeovertime( 0,05 ); - self.lowermessage.alpha = 1; - self.lowertimer fadeovertime( 0,05 ); - self.lowertimer.alpha = 1; -} - -setlowermessagevalue( text, value, combinemessage ) -{ - if ( !isDefined( self.lowermessage ) ) - { - return; - } - if ( isDefined( self.lowermessageoverride ) && text != &"" ) - { - text = self.lowermessageoverride; - time = undefined; - } - self notify( "lower_message_set" ); - if ( !isDefined( combinemessage ) || !combinemessage ) - { - self.lowermessage settext( text ); - } - else - { - self.lowermessage settext( "" ); - } - if ( isDefined( value ) && value > 0 ) - { - if ( !isDefined( combinemessage ) || !combinemessage ) - { - self.lowertimer.label = &""; - } - else - { - self.lowertimer.label = text; - } - self.lowertimer setvalue( value ); - } - else - { - self.lowertimer settext( "" ); - self.lowertimer.label = &""; - } - if ( self issplitscreen() ) - { - self.lowermessage.fontscale = 1,4; - } - self.lowermessage fadeovertime( 0,05 ); - self.lowermessage.alpha = 1; - self.lowertimer fadeovertime( 0,05 ); - self.lowertimer.alpha = 1; -} - -clearlowermessage( fadetime ) -{ - if ( !isDefined( self.lowermessage ) ) - { - return; - } - self notify( "lower_message_set" ); - if ( !isDefined( fadetime ) || fadetime == 0 ) - { - setlowermessage( &"" ); - } - else - { - self endon( "disconnect" ); - self endon( "lower_message_set" ); - self.lowermessage fadeovertime( fadetime ); - self.lowermessage.alpha = 0; - self.lowertimer fadeovertime( fadetime ); - self.lowertimer.alpha = 0; - wait fadetime; - self setlowermessage( "" ); - } -} - -printonteam( text, team ) -{ -/# - assert( isDefined( level.players ) ); -#/ - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team ) - { - player iprintln( text ); - } - i++; - } -} - -printboldonteam( text, team ) -{ -/# - assert( isDefined( level.players ) ); -#/ - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team ) - { - player iprintlnbold( text ); - } - i++; - } -} - -printboldonteamarg( text, team, arg ) -{ -/# - assert( isDefined( level.players ) ); -#/ - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team ) - { - player iprintlnbold( text, arg ); - } - i++; - } -} - -printonteamarg( text, team, arg ) -{ -} - -printonplayers( text, team ) -{ - players = level.players; - i = 0; - while ( i < players.size ) - { - if ( isDefined( team ) ) - { - if ( isDefined( players[ i ].pers[ "team" ] ) && players[ i ].pers[ "team" ] == team ) - { - players[ i ] iprintln( text ); - } - i++; - continue; - } - else - { - players[ i ] iprintln( text ); - } - i++; - } -} - -printandsoundoneveryone( team, enemyteam, printfriendly, printenemy, soundfriendly, soundenemy, printarg ) -{ - shoulddosounds = isDefined( soundfriendly ); - shoulddoenemysounds = 0; - if ( isDefined( soundenemy ) ) - { -/# - assert( shoulddosounds ); -#/ - shoulddoenemysounds = 1; - } - if ( !isDefined( printarg ) ) - { - printarg = ""; - } - if ( level.splitscreen || !shoulddosounds ) - { - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - playerteam = player.pers[ "team" ]; - if ( isDefined( playerteam ) ) - { - if ( playerteam == team && isDefined( printfriendly ) && printfriendly != &"" ) - { - player iprintln( printfriendly, printarg ); - i++; - continue; - } - else - { - if ( isDefined( printenemy ) && printenemy != &"" ) - { - if ( isDefined( enemyteam ) && playerteam == enemyteam ) - { - player iprintln( printenemy, printarg ); - i++; - continue; - } - else - { - if ( !isDefined( enemyteam ) && playerteam != team ) - { - player iprintln( printenemy, printarg ); - } - } - } - } - } - i++; - } - if ( shoulddosounds ) - { -/# - assert( level.splitscreen ); -#/ - level.players[ 0 ] playlocalsound( soundfriendly ); - } - } - else - { -/# - assert( shoulddosounds ); -#/ - if ( shoulddoenemysounds ) - { - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - playerteam = player.pers[ "team" ]; - if ( isDefined( playerteam ) ) - { - if ( playerteam == team ) - { - if ( isDefined( printfriendly ) && printfriendly != &"" ) - { - player iprintln( printfriendly, printarg ); - } - player playlocalsound( soundfriendly ); - i++; - continue; - } - else - { - if ( isDefined( enemyteam ) || playerteam == enemyteam && !isDefined( enemyteam ) && playerteam != team ) - { - if ( isDefined( printenemy ) && printenemy != &"" ) - { - player iprintln( printenemy, printarg ); - } - player playlocalsound( soundenemy ); - } - } - } - i++; - } - } - else i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - playerteam = player.pers[ "team" ]; - if ( isDefined( playerteam ) ) - { - if ( playerteam == team ) - { - if ( isDefined( printfriendly ) && printfriendly != &"" ) - { - player iprintln( printfriendly, printarg ); - } - player playlocalsound( soundfriendly ); - i++; - continue; - } - else if ( isDefined( printenemy ) && printenemy != &"" ) - { - if ( isDefined( enemyteam ) && playerteam == enemyteam ) - { - player iprintln( printenemy, printarg ); - i++; - continue; - } - else - { - if ( !isDefined( enemyteam ) && playerteam != team ) - { - player iprintln( printenemy, printarg ); - } - } - } - } - i++; - } - } -} - -_playlocalsound( soundalias ) -{ - if ( level.splitscreen && !self ishost() ) - { - return; - } - self playlocalsound( soundalias ); -} - -dvarintvalue( dvar, defval, minval, maxval ) -{ - dvar = "scr_" + level.gametype + "_" + dvar; - if ( getDvar( dvar ) == "" ) - { - setdvar( dvar, defval ); - return defval; - } - value = getDvarInt( dvar ); - if ( value > maxval ) - { - value = maxval; - } - else if ( value < minval ) - { - value = minval; - } - else - { - return value; - } - setdvar( dvar, value ); - return value; -} - -dvarfloatvalue( dvar, defval, minval, maxval ) -{ - dvar = "scr_" + level.gametype + "_" + dvar; - if ( getDvar( dvar ) == "" ) - { - setdvar( dvar, defval ); - return defval; - } - value = getDvarFloat( dvar ); - if ( value > maxval ) - { - value = maxval; - } - else if ( value < minval ) - { - value = minval; - } - else - { - return value; - } - setdvar( dvar, value ); - return value; -} - -play_sound_on_tag( alias, tag ) -{ - if ( isDefined( tag ) ) - { - org = spawn( "script_origin", self gettagorigin( tag ) ); - org linkto( self, tag, ( 0, 0, 1 ), ( 0, 0, 1 ) ); - } - else - { - org = spawn( "script_origin", ( 0, 0, 1 ) ); - org.origin = self.origin; - org.angles = self.angles; - org linkto( self ); - } - org playsound( alias ); - wait 5; - org delete(); -} - -createloopeffect( fxid ) -{ - ent = maps/mp/_createfx::createeffect( "loopfx", fxid ); - ent.v[ "delay" ] = 0,5; - return ent; -} - -createoneshoteffect( fxid ) -{ - ent = maps/mp/_createfx::createeffect( "oneshotfx", fxid ); - ent.v[ "delay" ] = -15; - return ent; -} - -loop_fx_sound( alias, origin, ender, timeout ) -{ - org = spawn( "script_origin", ( 0, 0, 1 ) ); - if ( isDefined( ender ) ) - { - thread loop_sound_delete( ender, org ); - self endon( ender ); - } - org.origin = origin; - org playloopsound( alias ); - if ( !isDefined( timeout ) ) - { - return; - } - wait timeout; -} - -exploder_damage() -{ - if ( isDefined( self.v[ "delay" ] ) ) - { - delay = self.v[ "delay" ]; - } - else - { - delay = 0; - } - if ( isDefined( self.v[ "damage_radius" ] ) ) - { - radius = self.v[ "damage_radius" ]; - } - else - { - radius = 128; - } - damage = self.v[ "damage" ]; - origin = self.v[ "origin" ]; - wait delay; - radiusdamage( origin, radius, damage, damage ); -} - -exploder_before_load( num ) -{ - waittillframeend; - waittillframeend; - activate_exploder( num ); -} - -exploder_after_load( num ) -{ - activate_exploder( num ); -} - -getexploderid( ent ) -{ - if ( !isDefined( level._exploder_ids ) ) - { - level._exploder_ids = []; - level._exploder_id = 1; - } - if ( !isDefined( level._exploder_ids[ ent.v[ "exploder" ] ] ) ) - { - level._exploder_ids[ ent.v[ "exploder" ] ] = level._exploder_id; - level._exploder_id++; - } - return level._exploder_ids[ ent.v[ "exploder" ] ]; -} - -activate_exploder_on_clients( num ) -{ - if ( !isDefined( level._exploder_ids[ num ] ) ) - { - return; - } - if ( !isDefined( level._client_exploders[ num ] ) ) - { - level._client_exploders[ num ] = 1; - } - if ( !isDefined( level._client_exploder_ids[ num ] ) ) - { - level._client_exploder_ids[ num ] = 1; - } - activateclientexploder( level._exploder_ids[ num ] ); -} - -delete_exploder_on_clients( num ) -{ - if ( !isDefined( level._exploder_ids[ num ] ) ) - { - return; - } - if ( !isDefined( level._client_exploders[ num ] ) ) - { - return; - } - deactivateclientexploder( level._exploder_ids[ num ] ); -} - -activate_individual_exploder() -{ - level notify( "exploder" + self.v[ "exploder" ] ); - if ( !level.createfx_enabled && level.clientscripts || !isDefined( level._exploder_ids[ int( self.v[ "exploder" ] ) ] ) && isDefined( self.v[ "exploder_server" ] ) ) - { -/# - println( "Exploder " + self.v[ "exploder" ] + " created on server." ); -#/ - if ( isDefined( self.v[ "firefx" ] ) ) - { - self thread fire_effect(); - } - if ( isDefined( self.v[ "fxid" ] ) && self.v[ "fxid" ] != "No FX" ) - { - self thread cannon_effect(); - } - else - { - if ( isDefined( self.v[ "soundalias" ] ) ) - { - self thread sound_effect(); - } - } - } - if ( isDefined( self.v[ "trailfx" ] ) ) - { - self thread trail_effect(); - } - if ( isDefined( self.v[ "damage" ] ) ) - { - self thread exploder_damage(); - } - if ( self.v[ "exploder_type" ] == "exploder" ) - { - self thread brush_show(); - } - else if ( self.v[ "exploder_type" ] == "exploderchunk" || self.v[ "exploder_type" ] == "exploderchunk visible" ) - { - self thread brush_throw(); - } - else - { - self thread brush_delete(); - } -} - -trail_effect() -{ - self exploder_delay(); - if ( !isDefined( self.v[ "trailfxtag" ] ) ) - { - self.v[ "trailfxtag" ] = "tag_origin"; - } - temp_ent = undefined; - if ( self.v[ "trailfxtag" ] == "tag_origin" ) - { - playfxontag( level._effect[ self.v[ "trailfx" ] ], self.model, self.v[ "trailfxtag" ] ); - } - else - { - temp_ent = spawn( "script_model", self.model.origin ); - temp_ent setmodel( "tag_origin" ); - temp_ent linkto( self.model, self.v[ "trailfxtag" ] ); - playfxontag( level._effect[ self.v[ "trailfx" ] ], temp_ent, "tag_origin" ); - } - if ( isDefined( self.v[ "trailfxsound" ] ) ) - { - if ( !isDefined( temp_ent ) ) - { - self.model playloopsound( self.v[ "trailfxsound" ] ); - } - else - { - temp_ent playloopsound( self.v[ "trailfxsound" ] ); - } - } - if ( isDefined( self.v[ "ender" ] ) && isDefined( temp_ent ) ) - { - level thread trail_effect_ender( temp_ent, self.v[ "ender" ] ); - } - if ( !isDefined( self.v[ "trailfxtimeout" ] ) ) - { - return; - } - wait self.v[ "trailfxtimeout" ]; - if ( isDefined( temp_ent ) ) - { - temp_ent delete(); - } -} - -trail_effect_ender( ent, ender ) -{ - ent endon( "death" ); - self waittill( ender ); - ent delete(); -} - -activate_exploder( num ) -{ - num = int( num ); -/# - if ( level.createfx_enabled ) - { - i = 0; - while ( i < level.createfxent.size ) - { - ent = level.createfxent[ i ]; - if ( !isDefined( ent ) ) - { - i++; - continue; - } - else if ( ent.v[ "type" ] != "exploder" ) - { - i++; - continue; - } - else if ( !isDefined( ent.v[ "exploder" ] ) ) - { - i++; - continue; - } - else if ( ent.v[ "exploder" ] != num ) - { - i++; - continue; - } - else - { - if ( isDefined( ent.v[ "exploder_server" ] ) ) - { - client_send = 0; - } - ent activate_individual_exploder(); - } - i++; - } - return; -#/ - } - client_send = 1; - while ( isDefined( level.createfxexploders[ num ] ) ) - { - i = 0; - while ( i < level.createfxexploders[ num ].size ) - { - if ( client_send && isDefined( level.createfxexploders[ num ][ i ].v[ "exploder_server" ] ) ) - { - client_send = 0; - } - level.createfxexploders[ num ][ i ] activate_individual_exploder(); - i++; - } - } - if ( level.clientscripts ) - { - if ( !level.createfx_enabled && client_send == 1 ) - { - activate_exploder_on_clients( num ); - } - } -} - -stop_exploder( num ) -{ - num = int( num ); - if ( level.clientscripts ) - { - if ( !level.createfx_enabled ) - { - delete_exploder_on_clients( num ); - } - } - while ( isDefined( level.createfxexploders[ num ] ) ) - { - i = 0; - while ( i < level.createfxexploders[ num ].size ) - { - if ( !isDefined( level.createfxexploders[ num ][ i ].looper ) ) - { - i++; - continue; - } - else - { - level.createfxexploders[ num ][ i ].looper delete(); - } - i++; - } - } -} - -sound_effect() -{ - self effect_soundalias(); -} - -effect_soundalias() -{ - if ( !isDefined( self.v[ "delay" ] ) ) - { - self.v[ "delay" ] = 0; - } - origin = self.v[ "origin" ]; - alias = self.v[ "soundalias" ]; - wait self.v[ "delay" ]; - play_sound_in_space( alias, origin ); -} - -play_sound_in_space( alias, origin, master ) -{ - org = spawn( "script_origin", ( 0, 0, 1 ) ); - if ( !isDefined( origin ) ) - { - origin = self.origin; - } - org.origin = origin; - if ( isDefined( master ) && master ) - { - org playsoundasmaster( alias ); - } - else - { - org playsound( alias ); - } - wait 10; - org delete(); -} - -loop_sound_in_space( alias, origin, ender ) -{ - org = spawn( "script_origin", ( 0, 0, 1 ) ); - if ( !isDefined( origin ) ) - { - origin = self.origin; - } - org.origin = origin; - org playloopsound( alias ); - level waittill( ender ); - org stoploopsound(); - wait 0,1; - org delete(); -} - -fire_effect() -{ - if ( !isDefined( self.v[ "delay" ] ) ) - { - self.v[ "delay" ] = 0; - } - delay = self.v[ "delay" ]; - if ( isDefined( self.v[ "delay_min" ] ) && isDefined( self.v[ "delay_max" ] ) ) - { - delay = self.v[ "delay_min" ] + randomfloat( self.v[ "delay_max" ] - self.v[ "delay_min" ] ); - } - forward = self.v[ "forward" ]; - up = self.v[ "up" ]; - org = undefined; - firefxsound = self.v[ "firefxsound" ]; - origin = self.v[ "origin" ]; - firefx = self.v[ "firefx" ]; - ender = self.v[ "ender" ]; - if ( !isDefined( ender ) ) - { - ender = "createfx_effectStopper"; - } - timeout = self.v[ "firefxtimeout" ]; - firefxdelay = 0,5; - if ( isDefined( self.v[ "firefxdelay" ] ) ) - { - firefxdelay = self.v[ "firefxdelay" ]; - } - wait delay; - if ( isDefined( firefxsound ) ) - { - level thread loop_fx_sound( firefxsound, origin, ender, timeout ); - } - playfx( level._effect[ firefx ], self.v[ "origin" ], forward, up ); -} - -loop_sound_delete( ender, ent ) -{ - ent endon( "death" ); - self waittill( ender ); - ent delete(); -} - -createexploder( fxid ) -{ - ent = maps/mp/_createfx::createeffect( "exploder", fxid ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1; - ent.v[ "exploder_type" ] = "normal"; - return ent; -} - -getotherteam( team ) -{ - if ( team == "allies" ) - { - return "axis"; - } - else - { - if ( team == "axis" ) - { - return "allies"; - } - else - { - return "allies"; - } - } -/# - assertmsg( "getOtherTeam: invalid team " + team ); -#/ -} - -getteammask( team ) -{ - if ( level.teambased || !isDefined( team ) && !isDefined( level.spawnsystem.ispawn_teammask[ team ] ) ) - { - return level.spawnsystem.ispawn_teammask_free; - } - return level.spawnsystem.ispawn_teammask[ team ]; -} - -getotherteamsmask( skip_team ) -{ - mask = 0; - _a1408 = level.teams; - _k1408 = getFirstArrayKey( _a1408 ); - while ( isDefined( _k1408 ) ) - { - team = _a1408[ _k1408 ]; - if ( team == skip_team ) - { - } - else - { - mask |= getteammask( team ); - } - _k1408 = getNextArrayKey( _a1408, _k1408 ); - } - return mask; -} - -wait_endon( waittime, endonstring, endonstring2, endonstring3, endonstring4 ) -{ - self endon( endonstring ); - if ( isDefined( endonstring2 ) ) - { - self endon( endonstring2 ); - } - if ( isDefined( endonstring3 ) ) - { - self endon( endonstring3 ); - } - if ( isDefined( endonstring4 ) ) - { - self endon( endonstring4 ); - } - wait waittime; - return 1; -} - -ismg( weapon ) -{ - return issubstr( weapon, "_bipod_" ); -} - -plot_points( plotpoints, r, g, b, timer ) -{ -/# - lastpoint = plotpoints[ 0 ]; - if ( !isDefined( r ) ) - { - r = 1; - } - if ( !isDefined( g ) ) - { - g = 1; - } - if ( !isDefined( b ) ) - { - b = 1; - } - if ( !isDefined( timer ) ) - { - timer = 0,05; - } - i = 1; - while ( i < plotpoints.size ) - { - line( lastpoint, plotpoints[ i ], ( r, g, b ), 1, timer ); - lastpoint = plotpoints[ i ]; - i++; -#/ - } -} - -player_flag_wait( msg ) -{ - while ( !self.flag[ msg ] ) - { - self waittill( msg ); - } -} - -player_flag_wait_either( flag1, flag2 ) -{ - for ( ;; ) - { - if ( flag( flag1 ) ) - { - return; - } - if ( flag( flag2 ) ) - { - return; - } - self waittill_either( flag1, flag2 ); - } -} - -player_flag_waitopen( msg ) -{ - while ( self.flag[ msg ] ) - { - self waittill( msg ); - } -} - -player_flag_init( message, trigger ) -{ - if ( !isDefined( self.flag ) ) - { - self.flag = []; - self.flags_lock = []; - } -/# - assert( !isDefined( self.flag[ message ] ), "Attempt to reinitialize existing message: " + message ); -#/ - self.flag[ message ] = 0; -/# - self.flags_lock[ message ] = 0; -#/ -} - -player_flag_set_delayed( message, delay ) -{ - wait delay; - player_flag_set( message ); -} - -player_flag_set( message ) -{ -/# - assert( isDefined( self.flag[ message ] ), "Attempt to set a flag before calling flag_init: " + message ); - assert( self.flag[ message ] == self.flags_lock[ message ] ); - self.flags_lock[ message ] = 1; -#/ - self.flag[ message ] = 1; - self notify( message ); -} - -player_flag_clear( message ) -{ -/# - assert( isDefined( self.flag[ message ] ), "Attempt to set a flag before calling flag_init: " + message ); - assert( self.flag[ message ] == self.flags_lock[ message ] ); - self.flags_lock[ message ] = 0; -#/ - self.flag[ message ] = 0; - self notify( message ); -} - -player_flag( message ) -{ -/# - assert( isDefined( message ), "Tried to check flag but the flag was not defined." ); -#/ - if ( !self.flag[ message ] ) - { - return 0; - } - return 1; -} - -registerclientsys( ssysname ) -{ - if ( !isDefined( level._clientsys ) ) - { - level._clientsys = []; - } - if ( level._clientsys.size >= 32 ) - { -/# - error( "Max num client systems exceeded." ); -#/ - return; - } - if ( isDefined( level._clientsys[ ssysname ] ) ) - { -/# - error( "Attempt to re-register client system : " + ssysname ); -#/ - return; - } - else - { - level._clientsys[ ssysname ] = spawnstruct(); - level._clientsys[ ssysname ].sysid = clientsysregister( ssysname ); - } -} - -setclientsysstate( ssysname, ssysstate, player ) -{ - if ( !isDefined( level._clientsys ) ) - { -/# - error( "setClientSysState called before registration of any systems." ); -#/ - return; - } - if ( !isDefined( level._clientsys[ ssysname ] ) ) - { -/# - error( "setClientSysState called on unregistered system " + ssysname ); -#/ - return; - } - if ( isDefined( player ) ) - { - player clientsyssetstate( level._clientsys[ ssysname ].sysid, ssysstate ); - } - else - { - clientsyssetstate( level._clientsys[ ssysname ].sysid, ssysstate ); - level._clientsys[ ssysname ].sysstate = ssysstate; - } -} - -getclientsysstate( ssysname ) -{ - if ( !isDefined( level._clientsys ) ) - { -/# - error( "Cannot getClientSysState before registering any client systems." ); -#/ - return ""; - } - if ( !isDefined( level._clientsys[ ssysname ] ) ) - { -/# - error( "Client system " + ssysname + " cannot return state, as it is unregistered." ); -#/ - return ""; - } - if ( isDefined( level._clientsys[ ssysname ].sysstate ) ) - { - return level._clientsys[ ssysname ].sysstate; - } - return ""; -} - -clientnotify( event ) -{ - if ( level.clientscripts ) - { - if ( isplayer( self ) ) - { - maps/mp/_utility::setclientsysstate( "levelNotify", event, self ); - return; - } - else - { - maps/mp/_utility::setclientsysstate( "levelNotify", event ); - } - } -} - -alphabet_compare( a, b ) -{ - list = []; - val = 1; - list[ "0" ] = val; - val++; - list[ "1" ] = val; - val++; - list[ "2" ] = val; - val++; - list[ "3" ] = val; - val++; - list[ "4" ] = val; - val++; - list[ "5" ] = val; - val++; - list[ "6" ] = val; - val++; - list[ "7" ] = val; - val++; - list[ "8" ] = val; - val++; - list[ "9" ] = val; - val++; - list[ "_" ] = val; - val++; - list[ "a" ] = val; - val++; - list[ "b" ] = val; - val++; - list[ "c" ] = val; - val++; - list[ "d" ] = val; - val++; - list[ "e" ] = val; - val++; - list[ "f" ] = val; - val++; - list[ "g" ] = val; - val++; - list[ "h" ] = val; - val++; - list[ "i" ] = val; - val++; - list[ "j" ] = val; - val++; - list[ "k" ] = val; - val++; - list[ "l" ] = val; - val++; - list[ "m" ] = val; - val++; - list[ "n" ] = val; - val++; - list[ "o" ] = val; - val++; - list[ "p" ] = val; - val++; - list[ "q" ] = val; - val++; - list[ "r" ] = val; - val++; - list[ "s" ] = val; - val++; - list[ "t" ] = val; - val++; - list[ "u" ] = val; - val++; - list[ "v" ] = val; - val++; - list[ "w" ] = val; - val++; - list[ "x" ] = val; - val++; - list[ "y" ] = val; - val++; - list[ "z" ] = val; - val++; - a = tolower( a ); - b = tolower( b ); - val1 = 0; - if ( isDefined( list[ a ] ) ) - { - val1 = list[ a ]; - } - val2 = 0; - if ( isDefined( list[ b ] ) ) - { - val2 = list[ b ]; - } - if ( val1 > val2 ) - { - return "1st"; - } - if ( val1 < val2 ) - { - return "2nd"; - } - return "same"; -} - -is_later_in_alphabet( string1, string2 ) -{ - count = string1.size; - if ( count >= string2.size ) - { - count = string2.size; - } - i = 0; - while ( i < count ) - { - val = alphabet_compare( string1[ i ], string2[ i ] ); - if ( val == "1st" ) - { - return 1; - } - if ( val == "2nd" ) - { - return 0; - } - i++; - } - return string1.size > string2.size; -} - -alphabetize( array ) -{ - if ( array.size <= 1 ) - { - return array; - } - count = 0; - for ( ;; ) - { - changed = 0; - i = 0; - while ( i < ( array.size - 1 ) ) - { - if ( is_later_in_alphabet( array[ i ], array[ i + 1 ] ) ) - { - val = array[ i ]; - array[ i ] = array[ i + 1 ]; - array[ i + 1 ] = val; - changed = 1; - count++; - if ( count >= 9 ) - { - count = 0; - wait 0,05; - } - } - i++; - } - if ( !changed ) - { - return array; - } - } - return array; -} - -get_players() -{ - players = getplayers(); - return players; -} - -getfx( fx ) -{ -/# - assert( isDefined( level._effect[ fx ] ), "Fx " + fx + " is not defined in level._effect." ); -#/ - return level._effect[ fx ]; -} - -struct_arrayspawn() -{ - struct = spawnstruct(); - struct.array = []; - struct.lastindex = 0; - return struct; -} - -structarray_add( struct, object ) -{ -/# - assert( !isDefined( object.struct_array_index ) ); -#/ - struct.array[ struct.lastindex ] = object; - object.struct_array_index = struct.lastindex; - struct.lastindex++; -} - -structarray_remove( struct, object ) -{ - structarray_swaptolast( struct, object ); - struct.lastindex--; - -} - -structarray_swaptolast( struct, object ) -{ - struct structarray_swap( struct.array[ struct.lastindex - 1 ], object ); -} - -structarray_shuffle( struct, shuffle ) -{ - i = 0; - while ( i < shuffle ) - { - struct structarray_swap( struct.array[ i ], struct.array[ randomint( struct.lastindex ) ] ); - i++; - } -} - -structarray_swap( object1, object2 ) -{ - index1 = object1.struct_array_index; - index2 = object2.struct_array_index; - self.array[ index2 ] = object1; - self.array[ index1 ] = object2; - self.array[ index1 ].struct_array_index = index1; - self.array[ index2 ].struct_array_index = index2; -} - -waittill_either( msg1, msg2 ) -{ - self endon( msg1 ); - self waittill( msg2 ); -} - -combinearrays( array1, array2 ) -{ -/# - if ( !isDefined( array1 ) ) - { - assert( isDefined( array2 ) ); - } -#/ - if ( !isDefined( array1 ) && isDefined( array2 ) ) - { - return array2; - } - if ( !isDefined( array2 ) && isDefined( array1 ) ) - { - return array1; - } - _a1822 = array2; - _k1822 = getFirstArrayKey( _a1822 ); - while ( isDefined( _k1822 ) ) - { - elem = _a1822[ _k1822 ]; - array1[ array1.size ] = elem; - _k1822 = getNextArrayKey( _a1822, _k1822 ); - } - return array1; -} - -getclosest( org, array, dist ) -{ - return comparesizes( org, array, dist, ::closerfunc ); -} - -getclosestfx( org, fxarray, dist ) -{ - return comparesizesfx( org, fxarray, dist, ::closerfunc ); -} - -getfarthest( org, array, dist ) -{ - return comparesizes( org, array, dist, ::fartherfunc ); -} - -comparesizesfx( org, array, dist, comparefunc ) -{ - if ( !array.size ) - { - return undefined; - } - if ( isDefined( dist ) ) - { - distsqr = dist * dist; - struct = undefined; - keys = getarraykeys( array ); - i = 0; - while ( i < keys.size ) - { - newdistsqr = distancesquared( array[ keys[ i ] ].v[ "origin" ], org ); - if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) - { - i++; - continue; - } - else - { - distsqr = newdistsqr; - struct = array[ keys[ i ] ]; - } - i++; - } - return struct; - } - keys = getarraykeys( array ); - struct = array[ keys[ 0 ] ]; - distsqr = distancesquared( struct.v[ "origin" ], org ); - i = 1; - while ( i < keys.size ) - { - newdistsqr = distancesquared( array[ keys[ i ] ].v[ "origin" ], org ); - if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) - { - i++; - continue; - } - else - { - distsqr = newdistsqr; - struct = array[ keys[ i ] ]; - } - i++; - } - return struct; -} - -comparesizes( org, array, dist, comparefunc ) -{ - if ( !array.size ) - { - return undefined; - } - if ( isDefined( dist ) ) - { - distsqr = dist * dist; - ent = undefined; - keys = getarraykeys( array ); - i = 0; - while ( i < keys.size ) - { - if ( !isDefined( array[ keys[ i ] ] ) ) - { - i++; - continue; - } - else newdistsqr = distancesquared( array[ keys[ i ] ].origin, org ); - if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) - { - i++; - continue; - } - else - { - distsqr = newdistsqr; - ent = array[ keys[ i ] ]; - } - i++; - } - return ent; - } - keys = getarraykeys( array ); - ent = array[ keys[ 0 ] ]; - distsqr = distancesquared( ent.origin, org ); - i = 1; - while ( i < keys.size ) - { - if ( !isDefined( array[ keys[ i ] ] ) ) - { - i++; - continue; - } - else newdistsqr = distancesquared( array[ keys[ i ] ].origin, org ); - if ( [[ comparefunc ]]( newdistsqr, distsqr ) ) - { - i++; - continue; - } - else - { - distsqr = newdistsqr; - ent = array[ keys[ i ] ]; - } - i++; - } - return ent; -} - -closerfunc( dist1, dist2 ) -{ - return dist1 >= dist2; -} - -fartherfunc( dist1, dist2 ) -{ - return dist1 <= dist2; -} - -get_array_of_closest( org, array, excluders, max, maxdist ) -{ - if ( !isDefined( max ) ) - { - max = array.size; - } - if ( !isDefined( excluders ) ) - { - excluders = []; - } - maxdists2rd = undefined; - if ( isDefined( maxdist ) ) - { - maxdists2rd = maxdist * maxdist; - } - dist = []; - index = []; - i = 0; - while ( i < array.size ) - { - if ( !isDefined( array[ i ] ) ) - { - i++; - continue; - } - else excluded = 0; - p = 0; - while ( p < excluders.size ) - { - if ( array[ i ] != excluders[ p ] ) - { - p++; - continue; - } - else - { - excluded = 1; - break; - } - p++; - } - if ( excluded ) - { - i++; - continue; - } - else length = distancesquared( org, array[ i ].origin ); - if ( isDefined( maxdists2rd ) && maxdists2rd < length ) - { - i++; - continue; - } - else - { - dist[ dist.size ] = length; - index[ index.size ] = i; - } - i++; - } - for ( ;; ) - { - change = 0; - i = 0; - while ( i < ( dist.size - 1 ) ) - { - if ( dist[ i ] <= dist[ i + 1 ] ) - { - i++; - continue; - } - else - { - change = 1; - temp = dist[ i ]; - dist[ i ] = dist[ i + 1 ]; - dist[ i + 1 ] = temp; - temp = index[ i ]; - index[ i ] = index[ i + 1 ]; - index[ i + 1 ] = temp; - } - i++; - } - if ( !change ) - { - break; - } - else - { - } - } - newarray = []; - if ( max > dist.size ) - { - max = dist.size; - } - i = 0; - while ( i < max ) - { - newarray[ i ] = array[ index[ i ] ]; - i++; - } - return newarray; -} - -set_dvar_if_unset( dvar, value, reset ) -{ - if ( !isDefined( reset ) ) - { - reset = 0; - } - if ( reset || getDvar( dvar ) == "" ) - { - setdvar( dvar, value ); - return value; - } - return getDvar( dvar ); -} - -set_dvar_float_if_unset( dvar, value, reset ) -{ - if ( !isDefined( reset ) ) - { - reset = 0; - } - if ( reset || getDvar( dvar ) == "" ) - { - setdvar( dvar, value ); - } - return getDvarFloat( dvar ); -} - -set_dvar_int_if_unset( dvar, value, reset ) -{ - if ( !isDefined( reset ) ) - { - reset = 0; - } - if ( reset || getDvar( dvar ) == "" ) - { - setdvar( dvar, value ); - return int( value ); - } - return getDvarInt( dvar ); -} - -drawcylinder( pos, rad, height, duration, stop_notify ) -{ -/# - if ( !isDefined( duration ) ) - { - duration = 0; - } - level thread drawcylinder_think( pos, rad, height, duration, stop_notify ); -#/ -} - -drawcylinder_think( pos, rad, height, seconds, stop_notify ) -{ -/# - if ( isDefined( stop_notify ) ) - { - level endon( stop_notify ); - } - stop_time = getTime() + ( seconds * 1000 ); - currad = rad; - curheight = height; - for ( ;; ) - { - if ( seconds > 0 && stop_time <= getTime() ) - { - return; - } - r = 0; - while ( r < 20 ) - { - theta = ( r / 20 ) * 360; - theta2 = ( ( r + 1 ) / 20 ) * 360; - line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, 0 ) ); - line( pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, curheight ) ); - line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ) ); - r++; - } - wait 0,05; -#/ - } -} - -is_bot() -{ - if ( isplayer( self ) && isDefined( self.pers[ "isBot" ] ) ) - { - return self.pers[ "isBot" ] != 0; - } -} - -add_trigger_to_ent( ent ) -{ - if ( !isDefined( ent._triggers ) ) - { - ent._triggers = []; - } - ent._triggers[ self getentitynumber() ] = 1; -} - -remove_trigger_from_ent( ent ) -{ - if ( !isDefined( ent ) ) - { - return; - } - if ( !isDefined( ent._triggers ) ) - { - return; - } - if ( !isDefined( ent._triggers[ self getentitynumber() ] ) ) - { - return; - } - ent._triggers[ self getentitynumber() ] = 0; -} - -ent_already_in_trigger( trig ) -{ - if ( !isDefined( self._triggers ) ) - { - return 0; - } - if ( !isDefined( self._triggers[ trig getentitynumber() ] ) ) - { - return 0; - } - if ( !self._triggers[ trig getentitynumber() ] ) - { - return 0; - } - return 1; -} - -trigger_thread_death_monitor( ent, ender ) -{ - ent waittill( "death" ); - self endon( ender ); - self remove_trigger_from_ent( ent ); -} - -trigger_thread( ent, on_enter_payload, on_exit_payload ) -{ - ent endon( "entityshutdown" ); - ent endon( "death" ); - if ( ent ent_already_in_trigger( self ) ) - { - return; - } - self add_trigger_to_ent( ent ); - ender = "end_trig_death_monitor" + self getentitynumber() + " " + ent getentitynumber(); - self thread trigger_thread_death_monitor( ent, ender ); - endon_condition = "leave_trigger_" + self getentitynumber(); - if ( isDefined( on_enter_payload ) ) - { - self thread [[ on_enter_payload ]]( ent, endon_condition ); - } - while ( isDefined( ent ) && ent istouching( self ) ) - { - wait 0,01; - } - ent notify( endon_condition ); - if ( isDefined( ent ) && isDefined( on_exit_payload ) ) - { - self thread [[ on_exit_payload ]]( ent ); - } - if ( isDefined( ent ) ) - { - self remove_trigger_from_ent( ent ); - } - self notify( ender ); -} - -isoneround() -{ - if ( level.roundlimit == 1 ) - { - return 1; - } - return 0; -} - -isfirstround() -{ - if ( level.roundlimit > 1 && game[ "roundsplayed" ] == 0 ) - { - return 1; - } - return 0; -} - -islastround() -{ - if ( level.roundlimit > 1 && game[ "roundsplayed" ] >= ( level.roundlimit - 1 ) ) - { - return 1; - } - return 0; -} - -waslastround() -{ - if ( level.forcedend ) - { - return 1; - } - if ( isDefined( level.shouldplayovertimeround ) ) - { - if ( [[ level.shouldplayovertimeround ]]() ) - { - level.nextroundisovertime = 1; - return 0; - } - else - { - if ( isDefined( game[ "overtime_round" ] ) ) - { - return 1; - } - } - } - if ( !hitroundlimit() || hitscorelimit() && hitroundwinlimit() ) - { - return 1; - } - return 0; -} - -hitroundlimit() -{ - if ( level.roundlimit <= 0 ) - { - return 0; - } - return getroundsplayed() >= level.roundlimit; -} - -anyteamhitroundwinlimit() -{ - _a2296 = level.teams; - _k2296 = getFirstArrayKey( _a2296 ); - while ( isDefined( _k2296 ) ) - { - team = _a2296[ _k2296 ]; - if ( getroundswon( team ) >= level.roundwinlimit ) - { - return 1; - } - _k2296 = getNextArrayKey( _a2296, _k2296 ); - } - return 0; -} - -anyteamhitroundlimitwithdraws() -{ - tie_wins = game[ "roundswon" ][ "tie" ]; - _a2309 = level.teams; - _k2309 = getFirstArrayKey( _a2309 ); - while ( isDefined( _k2309 ) ) - { - team = _a2309[ _k2309 ]; - if ( ( getroundswon( team ) + tie_wins ) >= level.roundwinlimit ) - { - return 1; - } - _k2309 = getNextArrayKey( _a2309, _k2309 ); - } - return 0; -} - -getroundwinlimitwinningteam() -{ - max_wins = 0; - winning_team = undefined; - _a2323 = level.teams; - _k2323 = getFirstArrayKey( _a2323 ); - while ( isDefined( _k2323 ) ) - { - team = _a2323[ _k2323 ]; - wins = getroundswon( team ); - if ( !isDefined( winning_team ) ) - { - max_wins = wins; - winning_team = team; - } - else if ( wins == max_wins ) - { - winning_team = "tie"; - } - else - { - if ( wins > max_wins ) - { - max_wins = wins; - winning_team = team; - } - } - _k2323 = getNextArrayKey( _a2323, _k2323 ); - } - return winning_team; -} - -hitroundwinlimit() -{ - if ( !isDefined( level.roundwinlimit ) || level.roundwinlimit <= 0 ) - { - return 0; - } - if ( anyteamhitroundwinlimit() ) - { - return 1; - } - if ( anyteamhitroundlimitwithdraws() ) - { - if ( getroundwinlimitwinningteam() != "tie" ) - { - return 1; - } - } - return 0; -} - -anyteamhitscorelimit() -{ - _a2379 = level.teams; - _k2379 = getFirstArrayKey( _a2379 ); - while ( isDefined( _k2379 ) ) - { - team = _a2379[ _k2379 ]; - if ( game[ "teamScores" ][ team ] >= level.scorelimit ) - { - return 1; - } - _k2379 = getNextArrayKey( _a2379, _k2379 ); - } - return 0; -} - -hitscorelimit() -{ - if ( isscoreroundbased() ) - { - return 0; - } - if ( level.scorelimit <= 0 ) - { - return 0; - } - if ( level.teambased ) - { - if ( anyteamhitscorelimit() ) - { - return 1; - } - } - else - { - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( isDefined( player.pointstowin ) && player.pointstowin >= level.scorelimit ) - { - return 1; - } - i++; - } - } - return 0; -} - -getroundswon( team ) -{ - return game[ "roundswon" ][ team ]; -} - -getotherteamsroundswon( skip_team ) -{ - roundswon = 0; - _a2423 = level.teams; - _k2423 = getFirstArrayKey( _a2423 ); - while ( isDefined( _k2423 ) ) - { - team = _a2423[ _k2423 ]; - if ( team == skip_team ) - { - } - else - { - roundswon += game[ "roundswon" ][ team ]; - } - _k2423 = getNextArrayKey( _a2423, _k2423 ); - } - return roundswon; -} - -getroundsplayed() -{ - return game[ "roundsplayed" ]; -} - -isscoreroundbased() -{ - return level.scoreroundbased; -} - -isroundbased() -{ - if ( level.roundlimit != 1 && level.roundwinlimit != 1 ) - { - return 1; - } - return 0; -} - -waittillnotmoving() -{ - if ( self ishacked() ) - { - wait 0,05; - return; - } - if ( self.classname == "grenade" ) - { - self waittill( "stationary" ); - } - else prevorigin = self.origin; - while ( 1 ) - { - wait 0,15; - if ( self.origin == prevorigin ) - { - return; - } - else - { - prevorigin = self.origin; - } - } -} - -mayapplyscreeneffect() -{ -/# - assert( isDefined( self ) ); -#/ -/# - assert( isplayer( self ) ); -#/ - return !isDefined( self.viewlockedentity ); -} - -getdvarfloatdefault( dvarname, defaultvalue ) -{ - value = getDvar( dvarname ); - if ( value != "" ) - { - return float( value ); - } - return defaultvalue; -} - -getdvarintdefault( dvarname, defaultvalue ) -{ - value = getDvar( dvarname ); - if ( value != "" ) - { - return int( value ); - } - return defaultvalue; -} - -closestpointonline( point, linestart, lineend ) -{ - linemagsqrd = lengthsquared( lineend - linestart ); - t = ( ( ( ( point[ 0 ] - linestart[ 0 ] ) * ( lineend[ 0 ] - linestart[ 0 ] ) ) + ( ( point[ 1 ] - linestart[ 1 ] ) * ( lineend[ 1 ] - linestart[ 1 ] ) ) ) + ( ( point[ 2 ] - linestart[ 2 ] ) * ( lineend[ 2 ] - linestart[ 2 ] ) ) ) / linemagsqrd; - if ( t < 0 ) - { - return linestart; - } - else - { - if ( t > 1 ) - { - return lineend; - } - } - start_x = linestart[ 0 ] + ( t * ( lineend[ 0 ] - linestart[ 0 ] ) ); - start_y = linestart[ 1 ] + ( t * ( lineend[ 1 ] - linestart[ 1 ] ) ); - start_z = linestart[ 2 ] + ( t * ( lineend[ 2 ] - linestart[ 2 ] ) ); - return ( start_x, start_y, start_z ); -} - -isstrstart( string1, substr ) -{ - return getsubstr( string1, 0, substr.size ) == substr; -} - -spread_array_thread( entities, process, var1, var2, var3 ) -{ - keys = getarraykeys( entities ); - if ( isDefined( var3 ) ) - { - i = 0; - while ( i < keys.size ) - { - entities[ keys[ i ] ] thread [[ process ]]( var1, var2, var3 ); - wait 0,1; - i++; - } - return; - } - if ( isDefined( var2 ) ) - { - i = 0; - while ( i < keys.size ) - { - entities[ keys[ i ] ] thread [[ process ]]( var1, var2 ); - wait 0,1; - i++; - } - return; - } - if ( isDefined( var1 ) ) - { - i = 0; - while ( i < keys.size ) - { - entities[ keys[ i ] ] thread [[ process ]]( var1 ); - wait 0,1; - i++; - } - return; - } - i = 0; - while ( i < keys.size ) - { - entities[ keys[ i ] ] thread [[ process ]](); - wait 0,1; - i++; - } -} - -freeze_player_controls( boolean ) -{ -/# - assert( isDefined( boolean ), "'freeze_player_controls()' has not been passed an argument properly." ); -#/ - if ( boolean && isDefined( self ) ) - { - self freezecontrols( boolean ); - } - else - { - if ( !boolean && isDefined( self ) && !level.gameended ) - { - self freezecontrols( boolean ); - } - } -} - -gethostplayer() -{ - players = get_players(); - index = 0; - while ( index < players.size ) - { - if ( players[ index ] ishost() ) - { - return players[ index ]; - } - index++; - } -} - -gethostplayerforbots() -{ - players = get_players(); - index = 0; - while ( index < players.size ) - { - if ( players[ index ] ishostforbots() ) - { - return players[ index ]; - } - index++; - } -} - -ispregame() -{ - if ( isDefined( level.pregame ) ) - { - return level.pregame; - } -} - -iskillstreaksenabled() -{ - if ( isDefined( level.killstreaksenabled ) ) - { - return level.killstreaksenabled; - } -} - -isrankenabled() -{ - if ( isDefined( level.rankenabled ) ) - { - return level.rankenabled; - } -} - -playsmokesound( position, duration, startsound, stopsound, loopsound ) -{ - smokesound = spawn( "script_origin", ( 0, 0, 1 ) ); - smokesound.origin = position; - smokesound playsound( startsound ); - smokesound playloopsound( loopsound ); - if ( duration > 0,5 ) - { - wait ( duration - 0,5 ); - } - thread playsoundinspace( stopsound, position ); - smokesound stoploopsound( 0,5 ); - wait 0,5; - smokesound delete(); -} - -playsoundinspace( alias, origin, master ) -{ - org = spawn( "script_origin", ( 0, 0, 1 ) ); - if ( !isDefined( origin ) ) - { - origin = self.origin; - } - org.origin = origin; - if ( isDefined( master ) && master ) - { - org playsoundasmaster( alias ); - } - else - { - org playsound( alias ); - } - wait 10; - org delete(); -} - -get2dyaw( start, end ) -{ - yaw = 0; - vector = ( end[ 0 ] - start[ 0 ], end[ 1 ] - start[ 1 ], 0 ); - return vectoangles( vector ); -} - -vectoangles( vector ) -{ - yaw = 0; - vecx = vector[ 0 ]; - vecy = vector[ 1 ]; - if ( vecx == 0 && vecy == 0 ) - { - return 0; - } - if ( vecy < 0,001 && vecy > -0,001 ) - { - vecy = 0,001; - } - yaw = atan( vecx / vecy ); - if ( vecy < 0 ) - { - yaw += 180; - } - return 90 - yaw; -} - -deleteaftertime( time ) -{ -/# - assert( isDefined( self ) ); -#/ -/# - assert( isDefined( time ) ); -#/ -/# - assert( time >= 0,05 ); -#/ - self thread deleteaftertimethread( time ); -} - -deleteaftertimethread( time ) -{ - self endon( "death" ); - wait time; - self delete(); -} - -setusingremote( remotename ) -{ - if ( isDefined( self.carryicon ) ) - { - self.carryicon.alpha = 0; - } -/# - assert( !self isusingremote() ); -#/ - self.usingremote = remotename; - self disableoffhandweapons(); - self notify( "using_remote" ); -} - -getremotename() -{ -/# - assert( self isusingremote() ); -#/ - return self.usingremote; -} - -isusingremote() -{ - return isDefined( self.usingremote ); -} - -getlastweapon() -{ - last_weapon = undefined; - if ( self hasweapon( self.lastnonkillstreakweapon ) ) - { - last_weapon = self.lastnonkillstreakweapon; - } - else - { - if ( self hasweapon( self.lastdroppableweapon ) ) - { - last_weapon = self.lastdroppableweapon; - } - } -/# - assert( isDefined( last_weapon ) ); -#/ - return last_weapon; -} - -freezecontrolswrapper( frozen ) -{ - if ( isDefined( level.hostmigrationtimer ) ) - { - self freeze_player_controls( 1 ); - return; - } - self freeze_player_controls( frozen ); -} - -setobjectivetext( team, text ) -{ - game[ "strings" ][ "objective_" + team ] = text; - precachestring( text ); -} - -setobjectivescoretext( team, text ) -{ - game[ "strings" ][ "objective_score_" + team ] = text; - precachestring( text ); -} - -setobjectivehinttext( team, text ) -{ - game[ "strings" ][ "objective_hint_" + team ] = text; - precachestring( text ); -} - -getobjectivetext( team ) -{ - return game[ "strings" ][ "objective_" + team ]; -} - -getobjectivescoretext( team ) -{ - return game[ "strings" ][ "objective_score_" + team ]; -} - -getobjectivehinttext( team ) -{ - return game[ "strings" ][ "objective_hint_" + team ]; -} - -registerroundswitch( minvalue, maxvalue ) -{ - level.roundswitch = clamp( getgametypesetting( "roundSwitch" ), minvalue, maxvalue ); - level.roundswitchmin = minvalue; - level.roundswitchmax = maxvalue; -} - -registerroundlimit( minvalue, maxvalue ) -{ - level.roundlimit = clamp( getgametypesetting( "roundLimit" ), minvalue, maxvalue ); - level.roundlimitmin = minvalue; - level.roundlimitmax = maxvalue; -} - -registerroundwinlimit( minvalue, maxvalue ) -{ - level.roundwinlimit = clamp( getgametypesetting( "roundWinLimit" ), minvalue, maxvalue ); - level.roundwinlimitmin = minvalue; - level.roundwinlimitmax = maxvalue; -} - -registerscorelimit( minvalue, maxvalue ) -{ - level.scorelimit = clamp( getgametypesetting( "scoreLimit" ), minvalue, maxvalue ); - level.scorelimitmin = minvalue; - level.scorelimitmax = maxvalue; - setdvar( "ui_scorelimit", level.scorelimit ); -} - -registertimelimit( minvalue, maxvalue ) -{ - level.timelimit = clamp( getgametypesetting( "timeLimit" ), minvalue, maxvalue ); - level.timelimitmin = minvalue; - level.timelimitmax = maxvalue; - setdvar( "ui_timelimit", level.timelimit ); -} - -registernumlives( minvalue, maxvalue ) -{ - level.numlives = clamp( getgametypesetting( "playerNumLives" ), minvalue, maxvalue ); - level.numlivesmin = minvalue; - level.numlivesmax = maxvalue; -} - -getplayerfromclientnum( clientnum ) -{ - if ( clientnum < 0 ) - { - return undefined; - } - i = 0; - while ( i < level.players.size ) - { - if ( level.players[ i ] getentitynumber() == clientnum ) - { - return level.players[ i ]; - } - i++; - } - return undefined; -} - -setclientfield( field_name, value ) -{ - if ( self == level ) - { - codesetworldclientfield( field_name, value ); - } - else - { - codesetclientfield( self, field_name, value ); - } -} - -setclientfieldtoplayer( field_name, value ) -{ - codesetplayerstateclientfield( self, field_name, value ); -} - -getclientfield( field_name ) -{ - if ( self == level ) - { - return codegetworldclientfield( field_name ); - } - else - { - return codegetclientfield( self, field_name ); - } -} - -getclientfieldtoplayer( field_name ) -{ - return codegetplayerstateclientfield( self, field_name ); -} - -isenemyplayer( player ) -{ -/# - assert( isDefined( player ) ); -#/ - if ( !isplayer( player ) ) - { - return 0; - } - if ( level.teambased ) - { - if ( player.team == self.team ) - { - return 0; - } - } - else - { - if ( player == self ) - { - return 0; - } - } - return 1; -} - -getweaponclass( weapon ) -{ -/# - assert( isDefined( weapon ) ); -#/ - if ( !isDefined( weapon ) ) - { - return undefined; - } - if ( !isDefined( level.weaponclassarray ) ) - { - level.weaponclassarray = []; - } - if ( isDefined( level.weaponclassarray[ weapon ] ) ) - { - return level.weaponclassarray[ weapon ]; - } - baseweaponindex = getbaseweaponitemindex( weapon ) + 1; - weaponclass = tablelookupcolumnforrow( "mp/statstable.csv", baseweaponindex, 2 ); - level.weaponclassarray[ weapon ] = weaponclass; - return weaponclass; -} - -ispressbuild() -{ - buildtype = getDvar( #"19B966D7" ); - if ( isDefined( buildtype ) && buildtype == "press" ) - { - return 1; - } - return 0; -} - -isflashbanged() -{ - if ( isDefined( self.flashendtime ) ) - { - return getTime() < self.flashendtime; - } -} - -ishacked() -{ - if ( isDefined( self.hacked ) ) - { - return self.hacked; - } -} - -domaxdamage( origin, attacker, inflictor, headshot, mod ) -{ - if ( isDefined( self.damagedtodeath ) && self.damagedtodeath ) - { - return; - } - if ( isDefined( self.maxhealth ) ) - { - damage = self.maxhealth + 1; - } - else - { - damage = self.health + 1; - } - self.damagedtodeath = 1; - self dodamage( damage, origin, attacker, inflictor, headshot, mod ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_visionset_mgr.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_visionset_mgr.gsc deleted file mode 100644 index cbf89e8..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/_visionset_mgr.gsc +++ /dev/null @@ -1,507 +0,0 @@ -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( level.createfx_enabled ) - { - return; - } - level.vsmgr_initializing = 1; - level.vsmgr_default_info_name = "none"; - level.vsmgr = []; - level thread register_type( "visionset" ); - level thread register_type( "overlay" ); - onfinalizeinitialization_callback( ::finalize_clientfields ); - level thread monitor(); - level thread onplayerconnect(); -} - -vsmgr_register_info( type, name, version, priority, lerp_step_count, activate_per_player, lerp_thread, ref_count_lerp_thread ) -{ - if ( level.createfx_enabled ) - { - return; - } -/# - assert( level.vsmgr_initializing, "All info registration in the visionset_mgr system must occur during the first frame while the system is initializing" ); -#/ - lower_name = tolower( name ); - validate_info( type, lower_name, priority ); - add_sorted_name_key( type, lower_name ); - add_sorted_priority_key( type, lower_name, priority ); - level.vsmgr[ type ].info[ lower_name ] = spawnstruct(); - level.vsmgr[ type ].info[ lower_name ] add_info( type, lower_name, version, priority, lerp_step_count, activate_per_player, lerp_thread, ref_count_lerp_thread ); - if ( level.vsmgr[ type ].highest_version < version ) - { - level.vsmgr[ type ].highest_version = version; - } -} - -vsmgr_activate( type, name, player, opt_param_1, opt_param_2 ) -{ - if ( level.vsmgr[ type ].info[ name ].state.activate_per_player ) - { - activate_per_player( type, name, player, opt_param_1, opt_param_2 ); - return; - } - state = level.vsmgr[ type ].info[ name ].state; - if ( state.ref_count_lerp_thread ) - { - state.ref_count++; - if ( state.ref_count >= 1 ) - { - return; - } - } - if ( isDefined( state.lerp_thread ) ) - { - state thread lerp_thread_wrapper( state.lerp_thread, opt_param_1, opt_param_2 ); - } - else - { - players = getplayers(); - player_index = 0; - while ( player_index < players.size ) - { - state vsmgr_set_state_active( players[ player_index ], 1 ); - player_index++; - } - } -} - -vsmgr_deactivate( type, name, player ) -{ - if ( level.vsmgr[ type ].info[ name ].state.activate_per_player ) - { - deactivate_per_player( type, name, player ); - return; - } - state = level.vsmgr[ type ].info[ name ].state; - if ( state.ref_count_lerp_thread ) - { - state.ref_count--; - - if ( state.ref_count >= 0 ) - { - return; - } - } - state notify( "deactivate" ); - players = getplayers(); - player_index = 0; - while ( player_index < players.size ) - { - state vsmgr_set_state_inactive( players[ player_index ] ); - player_index++; - } -} - -vsmgr_set_state_active( player, lerp ) -{ - player_entnum = player getentitynumber(); - self.players[ player_entnum ].active = 1; - self.players[ player_entnum ].lerp = lerp; -} - -vsmgr_set_state_inactive( player ) -{ - player_entnum = player getentitynumber(); - self.players[ player_entnum ].active = 0; - self.players[ player_entnum ].lerp = 0; -} - -vsmgr_timeout_lerp_thread( timeout, opt_param_2 ) -{ - players = getplayers(); - player_index = 0; - while ( player_index < players.size ) - { - self vsmgr_set_state_active( players[ player_index ], 1 ); - player_index++; - } - wait timeout; - vsmgr_deactivate( self.type, self.name ); -} - -vsmgr_timeout_lerp_thread_per_player( player, timeout, opt_param_2 ) -{ - self vsmgr_set_state_active( player, 1 ); - wait timeout; - deactivate_per_player( self.type, self.name, player ); -} - -vsmgr_duration_lerp_thread( duration, max_duration ) -{ - start_time = getTime(); - end_time = start_time + int( duration * 1000 ); - if ( isDefined( max_duration ) ) - { - start_time = end_time - int( max_duration * 1000 ); - } - while ( 1 ) - { - lerp = calc_remaining_duration_lerp( start_time, end_time ); - if ( lerp < 0 ) - { - break; - } - else - { - players = getplayers(); - player_index = 0; - while ( player_index < players.size ) - { - self vsmgr_set_state_active( players[ player_index ], lerp ); - player_index++; - } - wait 0,05; - } - } - vsmgr_deactivate( self.type, self.name ); -} - -vsmgr_duration_lerp_thread_per_player( player, duration, max_duration ) -{ - start_time = getTime(); - end_time = start_time + int( duration * 1000 ); - if ( isDefined( max_duration ) ) - { - start_time = end_time - int( max_duration * 1000 ); - } - while ( 1 ) - { - lerp = calc_remaining_duration_lerp( start_time, end_time ); - if ( lerp < 0 ) - { - break; - } - else - { - self vsmgr_set_state_active( player, lerp ); - wait 0,05; - } - } - deactivate_per_player( self.type, self.name, player ); -} - -register_type( type ) -{ - level.vsmgr[ type ] = spawnstruct(); - level.vsmgr[ type ].type = type; - level.vsmgr[ type ].in_use = 0; - level.vsmgr[ type ].highest_version = 0; - level.vsmgr[ type ].cf_slot_name = type + "_slot"; - level.vsmgr[ type ].cf_lerp_name = type + "_lerp"; - level.vsmgr[ type ].info = []; - level.vsmgr[ type ].sorted_name_keys = []; - level.vsmgr[ type ].sorted_prio_keys = []; - vsmgr_register_info( type, level.vsmgr_default_info_name, 1, 0, 1, 0, undefined ); -} - -finalize_clientfields() -{ - typekeys = getarraykeys( level.vsmgr ); - type_index = 0; - while ( type_index < typekeys.size ) - { - level.vsmgr[ typekeys[ type_index ] ] thread finalize_type_clientfields(); - type_index++; - } - level.vsmgr_initializing = 0; -} - -finalize_type_clientfields() -{ - if ( self.info.size < 1 ) - { - return; - } - self.in_use = 1; - self.cf_slot_bit_count = getminbitcountfornum( self.info.size - 1 ); - self.cf_lerp_bit_count = self.info[ self.sorted_name_keys[ 0 ] ].lerp_bit_count; - i = 0; - while ( i < self.sorted_name_keys.size ) - { - self.info[ self.sorted_name_keys[ i ] ].slot_index = i; - if ( self.info[ self.sorted_name_keys[ i ] ].lerp_bit_count > self.cf_lerp_bit_count ) - { - self.cf_lerp_bit_count = self.info[ self.sorted_name_keys[ i ] ].lerp_bit_count; - } - i++; - } - registerclientfield( "toplayer", self.cf_slot_name, self.highest_version, self.cf_slot_bit_count, "int" ); - if ( self.cf_lerp_bit_count >= 1 ) - { - registerclientfield( "toplayer", self.cf_lerp_name, self.highest_version, self.cf_lerp_bit_count, "float" ); - } -} - -validate_info( type, name, priority ) -{ - keys = getarraykeys( level.vsmgr ); - i = 0; - while ( i < keys.size ) - { - if ( type == keys[ i ] ) - { - break; - } - else - { - i++; - } - } -/# - assert( i < keys.size, "In visionset_mgr, type '" + type + "'is unknown" ); -#/ - keys = getarraykeys( level.vsmgr[ type ].info ); - i = 0; - while ( i < keys.size ) - { -/# - assert( level.vsmgr[ type ].info[ keys[ i ] ].name != name, "In visionset_mgr of type '" + type + "': name '" + name + "' has previously been registered" ); -#/ -/# - assert( level.vsmgr[ type ].info[ keys[ i ] ].priority != priority, "In visionset_mgr of type '" + type + "': priority '" + priority + "' requested for name '" + name + "' has previously been registered under name '" + level.vsmgr[ type ].info[ keys[ i ] ].name + "'" ); -#/ - i++; - } -} - -add_sorted_name_key( type, name ) -{ - i = 0; - while ( i < level.vsmgr[ type ].sorted_name_keys.size ) - { - if ( name < level.vsmgr[ type ].sorted_name_keys[ i ] ) - { - break; - } - else - { - i++; - } - } - arrayinsert( level.vsmgr[ type ].sorted_name_keys, name, i ); -} - -add_sorted_priority_key( type, name, priority ) -{ - i = 0; - while ( i < level.vsmgr[ type ].sorted_prio_keys.size ) - { - if ( priority > level.vsmgr[ type ].info[ level.vsmgr[ type ].sorted_prio_keys[ i ] ].priority ) - { - break; - } - else - { - i++; - } - } - arrayinsert( level.vsmgr[ type ].sorted_prio_keys, name, i ); -} - -add_info( type, name, version, priority, lerp_step_count, activate_per_player, lerp_thread, ref_count_lerp_thread ) -{ - self.type = type; - self.name = name; - self.version = version; - self.priority = priority; - self.lerp_step_count = lerp_step_count; - self.lerp_bit_count = getminbitcountfornum( lerp_step_count ); - if ( !isDefined( ref_count_lerp_thread ) ) - { - ref_count_lerp_thread = 0; - } - self.state = spawnstruct(); - self.state.type = type; - self.state.name = name; - self.state.activate_per_player = activate_per_player; - self.state.lerp_thread = lerp_thread; - self.state.ref_count_lerp_thread = ref_count_lerp_thread; - self.state.players = []; - if ( ref_count_lerp_thread && !activate_per_player ) - { - self.state.ref_count = 0; - } -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connected", player ); - player thread on_player_connect(); - } -} - -on_player_connect() -{ - self._player_entnum = self getentitynumber(); - typekeys = getarraykeys( level.vsmgr ); - type_index = 0; - while ( type_index < typekeys.size ) - { - type = typekeys[ type_index ]; - if ( !level.vsmgr[ type ].in_use ) - { - type_index++; - continue; - } - else - { - name_index = 0; - while ( name_index < level.vsmgr[ type ].sorted_name_keys.size ) - { - name_key = level.vsmgr[ type ].sorted_name_keys[ name_index ]; - level.vsmgr[ type ].info[ name_key ].state.players[ self._player_entnum ] = spawnstruct(); - level.vsmgr[ type ].info[ name_key ].state.players[ self._player_entnum ].active = 0; - level.vsmgr[ type ].info[ name_key ].state.players[ self._player_entnum ].lerp = 0; - if ( level.vsmgr[ type ].info[ name_key ].state.ref_count_lerp_thread && level.vsmgr[ type ].info[ name_key ].state.activate_per_player ) - { - level.vsmgr[ type ].info[ name_key ].state.players[ self._player_entnum ].ref_count = 0; - } - name_index++; - } - level.vsmgr[ type ].info[ level.vsmgr_default_info_name ].state vsmgr_set_state_active( self, 1 ); - } - type_index++; - } -} - -monitor() -{ - while ( level.vsmgr_initializing ) - { - wait 0,05; - } - typekeys = getarraykeys( level.vsmgr ); - while ( 1 ) - { - wait 0,05; - waittillframeend; - players = get_players(); - type_index = 0; - while ( type_index < typekeys.size ) - { - type = typekeys[ type_index ]; - if ( !level.vsmgr[ type ].in_use ) - { - type_index++; - continue; - } - else - { - player_index = 0; - while ( player_index < players.size ) - { -/# - if ( is_true( players[ player_index ].pers[ "isBot" ] ) ) - { - player_index++; - continue; -#/ - } - else - { - update_clientfields( players[ player_index ], level.vsmgr[ type ] ); - } - player_index++; - } - } - type_index++; - } - } -} - -get_first_active_name( type_struct ) -{ - size = type_struct.sorted_prio_keys.size; - prio_index = 0; - while ( prio_index < size ) - { - prio_key = type_struct.sorted_prio_keys[ prio_index ]; - if ( type_struct.info[ prio_key ].state.players[ self._player_entnum ].active ) - { - return prio_key; - } - prio_index++; - } - return level.vsmgr_default_info_name; -} - -update_clientfields( player, type_struct ) -{ - name = player get_first_active_name( type_struct ); - player setclientfieldtoplayer( type_struct.cf_slot_name, type_struct.info[ name ].slot_index ); - if ( type_struct.cf_lerp_bit_count >= 1 ) - { - player setclientfieldtoplayer( type_struct.cf_lerp_name, type_struct.info[ name ].state.players[ player._player_entnum ].lerp ); - } -} - -lerp_thread_wrapper( func, opt_param_1, opt_param_2 ) -{ - self notify( "deactivate" ); - self endon( "deactivate" ); - self [[ func ]]( opt_param_1, opt_param_2 ); -} - -lerp_thread_per_player_wrapper( func, player, opt_param_1, opt_param_2 ) -{ - player_entnum = player getentitynumber(); - self notify( "deactivate" ); - self endon( "deactivate" ); - self.players[ player_entnum ] notify( "deactivate" ); - self.players[ player_entnum ] endon( "deactivate" ); - player endon( "disconnect" ); - self [[ func ]]( player, opt_param_1, opt_param_2 ); -} - -activate_per_player( type, name, player, opt_param_1, opt_param_2 ) -{ - player_entnum = player getentitynumber(); - state = level.vsmgr[ type ].info[ name ].state; - if ( state.ref_count_lerp_thread ) - { - state.players[ player_entnum ].ref_count++; - if ( state.players[ player_entnum ].ref_count >= 1 ) - { - return; - } - } - if ( isDefined( state.lerp_thread ) ) - { - state thread lerp_thread_per_player_wrapper( state.lerp_thread, player, opt_param_1, opt_param_2 ); - } - else - { - state vsmgr_set_state_active( player, 1 ); - } -} - -deactivate_per_player( type, name, player ) -{ - player_entnum = player getentitynumber(); - state = level.vsmgr[ type ].info[ name ].state; - if ( state.ref_count_lerp_thread ) - { - state.players[ player_entnum ].ref_count--; - - if ( state.players[ player_entnum ].ref_count >= 0 ) - { - return; - } - } - state vsmgr_set_state_inactive( player ); - state notify( "deactivate" ); -} - -calc_remaining_duration_lerp( start_time, end_time ) -{ - now = getTime(); - frac = float( end_time - now ) / float( end_time - start_time ); - return clamp( frac, 0, 1 ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_climb_down_pothole.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_climb_down_pothole.gsc deleted file mode 100644 index 040e341..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_climb_down_pothole.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "climb_down_pothole" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_climb_up_pothole.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_climb_up_pothole.gsc deleted file mode 100644 index ac83e22..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_climb_up_pothole.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "climb_up_pothole" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_across_120.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_across_120.gsc deleted file mode 100644 index 0e8b6df..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_across_120.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_across_120" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc deleted file mode 100644 index 8bd9a0e..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_127" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_down_190.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_down_190.gsc deleted file mode 100644 index 203cc96..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_down_190.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_190" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_down_222.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_down_222.gsc deleted file mode 100644 index ff54012..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_down_222.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_222" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_down_48.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_down_48.gsc deleted file mode 100644 index 8269b0e..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_down_48.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_48" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc deleted file mode 100644 index e32a251..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc +++ /dev/null @@ -1,14 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - if ( isDefined( self.isdog ) && self.isdog ) - { - dog_jump_down( 96, 7 ); - } - else - { - dosimpletraverse( "jump_down_96" ); - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc deleted file mode 100644 index 06cec96..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_127" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_up_222.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_up_222.gsc deleted file mode 100644 index 793683d..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_jump_up_222.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_222" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_mantle_over_40.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_mantle_over_40.gsc deleted file mode 100644 index 367e41b..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_mantle_over_40.gsc +++ /dev/null @@ -1,41 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - traversestate = "zm_traverse_barrier"; - traversealias = "barrier_walk"; - if ( self.has_legs ) - { - switch( self.zombie_move_speed ) - { - case "walk": - case "walk_slide": - traversealias = "barrier_walk"; - break; - case "run": - case "run_slide": - traversealias = "barrier_run"; - break; - case "sprint": - case "sprint_slide": - case "super_sprint": - traversealias = "barrier_sprint"; - break; - default: - if ( isDefined( level.zm_mantle_over_40_move_speed_override ) ) - { - traversealias = self [[ level.zm_mantle_over_40_move_speed_override ]](); - } - else /# - assertmsg( "Zombie move speed of '" + self.zombie_move_speed + "' is not supported for mantle_over_40." ); -#/ - } - } - else - { - traversestate = "zm_traverse_barrier_crawl"; - traversealias = "barrier_crawl"; - } - self dotraverse( traversestate, traversealias ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc deleted file mode 100644 index e97cc4a..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - self dosimpletraverse( "mantle_over_40_hurdle" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_car.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_car.gsc deleted file mode 100644 index 218c2f0..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_car.gsc +++ /dev/null @@ -1,29 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - speed = ""; - if ( !isDefined( self.isdog ) || !self.isdog ) - { - switch( self.zombie_move_speed ) - { - case "walk": - case "walk_slide": - speed = ""; - break; - case "run": - case "run_slide": - speed = "_run"; - break; - case "sprint": - case "sprint_slide": - case "super_sprint": - speed = "_sprint"; - break; - default: - } - } - dosimpletraverse( "traverse_car" + speed, 1 ); - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_car_reverse.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_car_reverse.gsc deleted file mode 100644 index 9a6ea5d..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_car_reverse.gsc +++ /dev/null @@ -1,21 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - speed = ""; - if ( !self.has_legs ) - { - switch( self.zombie_move_speed ) - { - case "sprint": - case "sprint_slide": - case "super_sprint": - speed = "_sprint"; - break; - default: - } - } - dosimpletraverse( "traverse_car_reverse" + speed, 1 ); - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_diner_counter.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_diner_counter.gsc deleted file mode 100644 index ea9b6f4..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_diner_counter.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "traverse_diner_counter", 1 ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_diner_counter_reverse.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_diner_counter_reverse.gsc deleted file mode 100644 index 4f62d03..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_diner_counter_reverse.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "traverse_diner_counter_reverse", 1 ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_diner_roof.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_diner_roof.gsc deleted file mode 100644 index 641946a..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_diner_roof.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "traverse_diner_roof" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_diner_roof_hatch_up.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_diner_roof_hatch_up.gsc deleted file mode 100644 index 0e256e6..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_diner_roof_hatch_up.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "traverse_diner_roof_hatch_up" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_diner_roof_up.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_diner_roof_up.gsc deleted file mode 100644 index 0fb5a5a..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_diner_roof_up.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "traverse_diner_roof_up" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_garage_door.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_garage_door.gsc deleted file mode 100644 index ace7bd7..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/animscripts/traverse/zm_traverse_garage_door.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "traverse_garage_door", 1 ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/createart/zm_transit_art.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/createart/zm_transit_art.gsc deleted file mode 100644 index 424f365..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/createart/zm_transit_art.gsc +++ /dev/null @@ -1,44 +0,0 @@ - -main() -{ - level.tweakfile = 1; - setdvar( "scr_fog_exp_halfplane", "639.219" ); - setdvar( "scr_fog_exp_halfheight", "18691.3" ); - setdvar( "scr_fog_nearplane", "138.679" ); - setdvar( "scr_fog_red", "0.806694" ); - setdvar( "scr_fog_green", "0.962521" ); - setdvar( "scr_fog_blue", "0.9624" ); - setdvar( "scr_fog_baseheight", "1145.21" ); - setdvar( "visionstore_glowTweakEnable", "0" ); - setdvar( "visionstore_glowTweakRadius0", "5" ); - setdvar( "visionstore_glowTweakRadius1", "" ); - setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); - setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); - setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); - setdvar( "visionstore_glowTweakBloomIntensity1", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); - start_dist = 138,679; - half_dist = 1011,624; - half_height = 10834,5; - base_height = 1145,21; - fog_r = 0,501961; - fog_g = 0,501961; - fog_b = 0,501961; - fog_scale = 7,5834; - sun_col_r = 0,501961; - sun_col_g = 0,501961; - sun_col_b = 0,501961; - sun_dir_x = -0,99; - sun_dir_y = 0,06; - sun_dir_z = -0,11; - sun_start_ang = 0; - sun_stop_ang = 0; - time = 0; - max_fog_opacity = 0,8546; - setvolfog( start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale, sun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, sun_stop_ang, time, max_fog_opacity ); - visionsetnaked( "zm_transit", 0 ); - setdvar( "r_lightGridEnableTweaks", 1 ); - setdvar( "r_lightGridIntensity", 1,4 ); - setdvar( "r_lightGridContrast", 0,2 ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/createfx/zm_transit_fx.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/createfx/zm_transit_fx.gsc deleted file mode 100644 index 898866f..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/createfx/zm_transit_fx.gsc +++ /dev/null @@ -1,3930 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_thick_1200x600" ); - ent.v[ "origin" ] = ( -5964,8, 5958,68, -56,5457 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 278 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_thick_1200x600" ); - ent.v[ "origin" ] = ( -7115,4, 6131,36, -52 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 263 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_thick_1200x600" ); - ent.v[ "origin" ] = ( -8140,71, 6172, -40,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 281 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); - ent.v[ "origin" ] = ( -5614,79, -6468,82, -39,2142 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 264 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); - ent.v[ "origin" ] = ( -4165,66, -6434,5, -21,0351 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 268 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -6463,47, 4442,16, -54,2825 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -8085,35, 5126,36, -55,5562 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -5441,89, 2910,1, 86,6898 ); - ent.v[ "angles" ] = ( 0, 181, 4 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -5012,74, 4,19914, 92,9997 ); - ent.v[ "angles" ] = ( 360, 237, -5 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_1000x1000" ); - ent.v[ "origin" ] = ( -5294,92, 1435,37, 193 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -8375,91, -6880,29, 169,426 ); - ent.v[ "angles" ] = ( 0, 62, 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -693,86, -434,302, -62 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 1307,61, -433,515, -61,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 3301,23, -433,48, -61,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 1443,74, -1912,92, -49,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 1496,75, 951,473, -61,75 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 2317,07, 2920,76, -61,1957 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 326 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 4034,7, 4213,02, -121,687 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 291 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 5863,49, 4856,8, -90,6416 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 165 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 6425,89, 6793,82, -244,747 ); - ent.v[ "angles" ] = ( 0, 165, 6 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 7658,88, 8594,01, -462,611 ); - ent.v[ "angles" ] = ( 0,7299, 115,044, 6,96203 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 9492,26, 8859,12, -575,761 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 10248, 7411,77, -572,63 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 9370,34, 6265,97, -566,254 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 9363,72, 5259,97, -561,195 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 8247,62, 3780,29, -204,463 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 9 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 8454,29, 1816,51, -91,9754 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 12 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_1000x1000" ); - ent.v[ "origin" ] = ( -9435,63, 3725,57, 129,632 ); - ent.v[ "angles" ] = ( 0, 328, -8 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -6295,03, -6855,52, -43,3133 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -5503,32, -5950,27, -33,7949 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -4278,1, -6853,2, -47,9013 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -2226,38, -6476,4, -111,832 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 151 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -430,571, -4777,94, -61 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 1354,92, -4343,55, 8,28402 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 154 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 2374,83, -5587,02, 2,17561 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 263 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 6376,43, -6175,54, -33,8548 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 263 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 8345,75, -6327,09, 106,432 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 226 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 10086,9, -6470,41, 118 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 354 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 7864,23, -7747,09, -22,7953 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 236 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 7372,48, -4745,95, -16,153 ); - ent.v[ "angles" ] = ( 5, 177, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 6344,74, -4691,46, -51,8628 ); - ent.v[ "angles" ] = ( 360, 177, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 7338,11, -2595,86, -111,322 ); - ent.v[ "angles" ] = ( 359,907, 136,037, 4,87958 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 8825, -1201,03, -194,996 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 131 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 9725,72, -1742,09, -32,561 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 131 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 8174,97, -105,473, -61,5243 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 297 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 7784,83, 6029,76, -345,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 155 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_1000x1000" ); - ent.v[ "origin" ] = ( 4116,25, 5645,36, -1 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 98 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_1000x1000" ); - ent.v[ "origin" ] = ( -5802,88, 5634,9, 84,3632 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 360 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_thick_1200x600" ); - ent.v[ "origin" ] = ( -5148,4, 4832,7, 0,312576 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 200 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -5934,56, 4918,4, -62,8867 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 187 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -6027,78, 5040,17, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 242 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -6079,08, 5289,99, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 144 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -7600,2, 4227,16, -56,4433 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 46 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -8537,89, 4162,49, -12,8317 ); - ent.v[ "angles" ] = ( 360, 140, 10 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -8467,74, 4197,83, -25,7767 ); - ent.v[ "angles" ] = ( 0, 88, 5 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -8667,97, 4150,55, 4,24724 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 63 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -5642,84, 5224,15, -46,4991 ); - ent.v[ "angles" ] = ( 4, 190, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -5655,12, 5116,59, -45,489 ); - ent.v[ "angles" ] = ( 3,28795, 202,949, 2,74547 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -8029,04, 3834,02, -0,54985 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -7892,28, 3799,24, -3,22023 ); - ent.v[ "angles" ] = ( 0, 353, -6 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); - ent.v[ "origin" ] = ( 10156,4, 7081,81, -569,368 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 94 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -7670,71, 4400,04, -52,4712 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 25 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -7632,2, 4335,27, -53,4487 ); - ent.v[ "angles" ] = ( 8,99508, 3,31666, 2,0246 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( -6662,13, 4291,07, -64 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( -6154,93, 4677,49, -57,6558 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 332 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( -7509,32, 4764,04, -61 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( -6443,25, 5252,53, -46,875 ); - ent.v[ "angles" ] = ( 4,46701, 145,564, -11,1489 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( -7010,67, 5058,05, -46,875 ); - ent.v[ "angles" ] = ( 0, 30, -4 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( -6236,39, 5096,6, -64,875 ); - ent.v[ "angles" ] = ( 337, 270, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( -6263,69, 5186,76, -110,875 ); - ent.v[ "angles" ] = ( 337, 270, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( -6935,05, 3992,15, -44,575 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 54 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( -6387,72, 5200,47, -45,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 111 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( -6228,73, 5271,98, -138,875 ); - ent.v[ "angles" ] = ( 0, 320, 26 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( -7025,25, 5020,08, -47,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 12 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( -6990,59, 3917,48, -35,575 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 28 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); - ent.v[ "origin" ] = ( -6482,02, -6922,66, -20,2632 ); - ent.v[ "angles" ] = ( 5,58951, 0,151229, -1,77637 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_right_border" ); - ent.v[ "origin" ] = ( -3783,49, -6804,15, -57,0054 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 189 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); - ent.v[ "origin" ] = ( -5772,58, 4495,25, -45,7761 ); - ent.v[ "angles" ] = ( 4,55882, 136,126, 0,230205 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( -6664,46, 4282,63, -63 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( -6419,69, 5968, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 182 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( -6794,75, 5895,12, -63 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 176 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( -7130,02, 5875,24, -61 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 176 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( -7035,44, 6092,55, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 176 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = 30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( -7019,59, 4360,48, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 156 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -7984,94, 4200,7, -40,8316 ); - ent.v[ "angles" ] = ( 359,649, 23,5878, -7,38978 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -6164,4, 6207,33, -62 ); - ent.v[ "angles" ] = ( 0, 265, 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -6611,77, 6255,7, -64,056 ); - ent.v[ "angles" ] = ( 355,996, 257,157, 2,98491 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -5905,66, 6053,11, -62,1083 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 243 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -7777,88, 5432,39, -67,6399 ); - ent.v[ "angles" ] = ( 20,9872, 250,768, 2,14186 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -8977,1, 4620,45, -7,94255 ); - ent.v[ "angles" ] = ( 0, 328, -8 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -9194,46, 4472,11, 27,7692 ); - ent.v[ "angles" ] = ( 358,071, 314,131, -11,7653 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -9968,48, 3966,82, 141,149 ); - ent.v[ "angles" ] = ( 360, 320, -2 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -9330,22, 3636,74, 143,33 ); - ent.v[ "angles" ] = ( 1,2114, 128,06, 6,8825 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_flicker" ); - ent.v[ "origin" ] = ( -7058,84, 5241,95, 114,025 ); - ent.v[ "angles" ] = ( 304, 90, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -6702,67, 4030,74, -21,2888 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -7174,47, 4179,63, 52 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); - ent.v[ "origin" ] = ( 1543,09, 1046,91, -49 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 262 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); - ent.v[ "origin" ] = ( -7823,94, 4726,57, -55,4636 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 349 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( -6255,49, 5934,51, -55 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 267 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( -7111,76, 5851,47, -42 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 267 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( -6651,29, 3918,42, -41 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 93 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_thick_600x600" ); - ent.v[ "origin" ] = ( -6584,17, 3681,87, -4,99999 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_thick_600x600" ); - ent.v[ "origin" ] = ( -7886,28, 3889,4, 82,5849 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_depot_map_flicker" ); - ent.v[ "origin" ] = ( -6713,64, 5321,71, -9,66086 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 45 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_depot_map_flicker" ); - ent.v[ "origin" ] = ( -6723,23, 5313,91, -8,18646 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 225 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety" ); - ent.v[ "origin" ] = ( -6365,04, 4578,04, 109,9 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 100; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -5517,59, 5241,44, -11 ); - ent.v[ "angles" ] = ( 28, 182, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_50x50_sm" ); - ent.v[ "origin" ] = ( -6758,41, 4766,59, -92,7686 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_50x50_sm" ); - ent.v[ "origin" ] = ( -6689,7, 4768,01, -92,7002 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 176 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -5980,96, 6261,54, -36,3953 ); - ent.v[ "angles" ] = ( 0, 175, -8 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -5845,6, 6191,34, -35,9 ); - ent.v[ "angles" ] = ( 358,005, 179,002, -0,139585 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_50x50_sm" ); - ent.v[ "origin" ] = ( -7810,49, 5420,54, -74,2103 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 154 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_50x50_sm" ); - ent.v[ "origin" ] = ( -7819,04, 4111,9, -37,6549 ); - ent.v[ "angles" ] = ( 12,9361, 13,2884, -8,13303 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_spark_ext_runner" ); - ent.v[ "origin" ] = ( -7674,39, 5156,76, 166,697 ); - ent.v[ "angles" ] = ( 63, 269, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 500; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_dbl_glow" ); - ent.v[ "origin" ] = ( -6801,44, 5517,77, 76,125 ); - ent.v[ "angles" ] = ( 330, 180, -90 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); - ent.v[ "origin" ] = ( -6583,75, 5403,93, -32,875 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -300; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); - ent.v[ "origin" ] = ( -6968,95, 5308,98, -32,875 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -360; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_column_lrg" ); - ent.v[ "origin" ] = ( -6197,68, 3183,08, 15 ); - ent.v[ "angles" ] = ( 271, 187, -84 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_column_lrg" ); - ent.v[ "origin" ] = ( -4725,65, 4685,73, 338,88 ); - ent.v[ "angles" ] = ( 271, 97, 72 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); - ent.v[ "origin" ] = ( -4793,84, 4708,26, 346,094 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 173 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -7246,23, 4589,33, 78,025 ); - ent.v[ "angles" ] = ( 90, 2, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -6951,36, 4934,45, 91,0322 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -6751,02, 4934,64, 85,425 ); - ent.v[ "angles" ] = ( 31,9413, 329,602, 91 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -6847,37, 5022,5, 91 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety" ); - ent.v[ "origin" ] = ( -3946,86, -7250,19, 107 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 102; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety" ); - ent.v[ "origin" ] = ( -4418,11, -626,9, 192,003 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 79 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 114; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety" ); - ent.v[ "origin" ] = ( 8133,65, 4787,75, -194,479 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 108; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety" ); - ent.v[ "origin" ] = ( 10160,1, -1748,62, -45,9508 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 106; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety" ); - ent.v[ "origin" ] = ( -45,2307, -5452,06, 92,5112 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 104; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -6724,03, 4589,1, 81,9 ); - ent.v[ "angles" ] = ( 87, 182, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); - ent.v[ "origin" ] = ( 287,427, -453,374, -62 ); - ent.v[ "angles" ] = ( 1,9859, 356,008, -0,59234 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_right_border" ); - ent.v[ "origin" ] = ( 10191, 8408,74, -566,847 ); - ent.v[ "angles" ] = ( 3,6542, 275,052, 1,6294 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); - ent.v[ "origin" ] = ( 6127,06, -6034,52, -70,4416 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 43 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); - ent.v[ "origin" ] = ( 6552,9, -4715,76, -58,9995 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 271 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_thick_600x600" ); - ent.v[ "origin" ] = ( 7804,15, -4507,67, 76 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 273 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); - ent.v[ "origin" ] = ( 7466,6, -4570,16, 32,1187 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 299 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( -6879,38, 4404,41, -55,7499 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 345 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( -6865,54, 4337,65, -56,7845 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 24 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( -6803,27, 4294,82, -59,5574 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 83 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( 1397,35, -485,659, -67,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 175 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( 2955,11, -447,745, -129,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 183 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_town_cans" ); - ent.v[ "origin" ] = ( 2318,31, -669,672, 132,6 ); - ent.v[ "angles" ] = ( 82, 90, 90 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_town_cans" ); - ent.v[ "origin" ] = ( 2393,33, -669,067, 133,725 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( 2475,69, -4,57658, 197,512 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( 591,712, -1224,22, 247,125 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_fog" ); - ent.v[ "origin" ] = ( -385,805, -200,682, 110,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_fog" ); - ent.v[ "origin" ] = ( 1232,59, -1724,85, 188,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 172 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_fog" ); - ent.v[ "origin" ] = ( 1782,94, -2158,76, 109,262 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_street_lamp" ); - ent.v[ "origin" ] = ( 2424, -200, 104 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 176 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_fog" ); - ent.v[ "origin" ] = ( 3264,9, -684,243, 110 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( -7174,46, 4182,06, 86,8813 ); - ent.v[ "angles" ] = ( 87, 182, 180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( 1916,05, -1534,34, -55,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 150 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( 742,165, -500,51, -61,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( 1584,48, 61,4287, -62 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( 1643,6, 239,56, -62,0999 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( 1956,58, -684,969, -55,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( -7162,7, 4430,93, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( -5961,17, 4659,68, -56,1655 ); - ent.v[ "angles" ] = ( 0, 177, 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( 1984,16, -477,682, -61,0387 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 152 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( 1529,72, -1378,9, -60 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 2076,71, -1639,77, 6,14304 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow" ); - ent.v[ "origin" ] = ( 2284,66, 80,3072, 73,0331 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 2353,79, -515,486, -60,3616 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 104 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 2426,85, -478,694, -58,3936 ); - ent.v[ "angles" ] = ( 9, 139, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 702,614, -1449,61, 161,693 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( 1721,63, -90,9005, -55,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( 1476,19, -161,862, -58,502 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( 1601,25, 381,192, -62 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( 2249,23, -374,64, -62 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( 1313,09, -749,727, -62 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 144 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 2990,83, -473,678, -129,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 129 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); - ent.v[ "origin" ] = ( -6365,25, 4577,86, 109,8 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 101; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); - ent.v[ "origin" ] = ( -3946,92, -7250,32, 107,1 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 103; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); - ent.v[ "origin" ] = ( -4418,04, -626,987, 191,91 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 79 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 115; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); - ent.v[ "origin" ] = ( 6300,89, 5078,98, 67,4032 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 111; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); - ent.v[ "origin" ] = ( 8133,62, 4787,71, -194,497 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 109; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); - ent.v[ "origin" ] = ( 10160, -1748,7, -45,9436 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 107; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); - ent.v[ "origin" ] = ( -45,1183, -5452,09, 92,4005 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 105; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_bridge_dest" ); - ent.v[ "origin" ] = ( -2790,06, -446,644, 162,125 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 150; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 754,692, -1143,89, 212,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 72 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_short_warm" ); - ent.v[ "origin" ] = ( 969,776, -997,644, 97,8737 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 286 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_short_warm" ); - ent.v[ "origin" ] = ( 1037,18, -956,931, 110,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 303 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_short_warm" ); - ent.v[ "origin" ] = ( 920,384, -991,542, 115,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 281 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_short_warm" ); - ent.v[ "origin" ] = ( 988,555, -841,342, 117,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 289 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 787,978, -855,479, -51,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 355 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( 808,764, -1044,17, -54,6895 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 917,617, -1052,28, 94,2635 ); - ent.v[ "angles" ] = ( 29, 90, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 850,388, -949,561, 94 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( 695,336, -1140,64, 174,388 ); - ent.v[ "angles" ] = ( 0, 358,745, 90,3158 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_column_lrg" ); - ent.v[ "origin" ] = ( -397,618, -1279,07, 159,194 ); - ent.v[ "angles" ] = ( 271, 187, -84 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_town_cans" ); - ent.v[ "origin" ] = ( 1144,58, -1476,87, 73,125 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( 1075,85, -1008,77, -61 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 47 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( 855,703, -1077,52, -55,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 978,234, -1004,41, 95,8515 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 112 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 1026,46, -1141,13, 177,669 ); - ent.v[ "angles" ] = ( 24, 193, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( 11566, 7369,17, -754,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 65 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm" ); - ent.v[ "origin" ] = ( -7002,24, 4782,52, -63 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 200; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm" ); - ent.v[ "origin" ] = ( -5071,79, -7163,23, -58,3008 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 220; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm" ); - ent.v[ "origin" ] = ( 8637,74, -6861,16, 100,781 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 230; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm" ); - ent.v[ "origin" ] = ( 10217, -809,125, -216,77 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 240; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm" ); - ent.v[ "origin" ] = ( 10777,6, 7700,74, -579,817 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm" ); - ent.v[ "origin" ] = ( 1256,2, -477,919, -61 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 260; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort" ); - ent.v[ "origin" ] = ( -5772,88, 5116,44, -43,0053 ); - ent.v[ "angles" ] = ( 270, 217,395, 178,605 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_detail" ); - ent.v[ "origin" ] = ( -6706,07, 4768,48, -92,5561 ); - ent.v[ "angles" ] = ( 270, 0, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_detail" ); - ent.v[ "origin" ] = ( -7616,51, 4365,68, -58 ); - ent.v[ "angles" ] = ( 270, 0,65106, -162,651 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_sm" ); - ent.v[ "origin" ] = ( -5185,59, -6893,63, -65 ); - ent.v[ "angles" ] = ( 270, 0, -3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_sm" ); - ent.v[ "origin" ] = ( -5455,46, -6802,14, -65 ); - ent.v[ "angles" ] = ( 270, 356,906, -30,9059 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_sm" ); - ent.v[ "origin" ] = ( 7051,84, -6104,46, -126 ); - ent.v[ "angles" ] = ( 270, 359,914, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_sm" ); - ent.v[ "origin" ] = ( 7097,11, -6375,92, -126 ); - ent.v[ "angles" ] = ( 270, 359,914, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_sm" ); - ent.v[ "origin" ] = ( 2790,44, -423,149, -80,455 ); - ent.v[ "angles" ] = ( 270, 0,692906, 178,307 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); - ent.v[ "origin" ] = ( 6100,79, -5285,34, -32,8692 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 337 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_right_border" ); - ent.v[ "origin" ] = ( 10382,8, 8961,99, -422,321 ); - ent.v[ "angles" ] = ( 358,271, 9,94811, 0,507869 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); - ent.v[ "origin" ] = ( 10049,7, 8042,2, -572,673 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); - ent.v[ "origin" ] = ( 10070,1, 7465,39, -576 ); - ent.v[ "angles" ] = ( 358,698, 359,957, 0,783675 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( 7062,86, -6152,26, -126 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 107 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_spark_ext_runner" ); - ent.v[ "origin" ] = ( -3843,32, -7122,23, 150,713 ); - ent.v[ "angles" ] = ( 63, 269, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 500; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_spark_ext_runner" ); - ent.v[ "origin" ] = ( 8854,15, -5938,39, 310,653 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 500; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_spark_ext_runner" ); - ent.v[ "origin" ] = ( 1293,97, -1569,38, 275,83 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 500; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow" ); - ent.v[ "origin" ] = ( -6837,05, 5106,9, 122,125 ); - ent.v[ "angles" ] = ( 288,982, 88,5178, 1,46959 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); - ent.v[ "origin" ] = ( 2038,82, 145,766, 43,9131 ); - ent.v[ "angles" ] = ( 284,035, 94,1266, -94,0038 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_bowling_sign_fog" ); - ent.v[ "origin" ] = ( 2357,64, -719,063, 369,31 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); - ent.v[ "origin" ] = ( 2837,4, -435,051, 11,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1889,32, 763,731, -56,6942 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 1791,17, 740,252, -55,0558 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 163 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 1979,87, 761,433, -47,4833 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 7818,75, -5992,71, 60,2811 ); - ent.v[ "angles" ] = ( 20, 84, -6 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 7988,32, -6044,29, 75,9195 ); - ent.v[ "angles" ] = ( 4, 35, -11 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 8334,09, -6302,3, 93,7967 ); - ent.v[ "angles" ] = ( 359,913, 359,004, -5 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 8353,75, -6383, 98,6189 ); - ent.v[ "angles" ] = ( 354,382, 346,891, -3,27537 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 8404,03, -6366,25, 98,1088 ); - ent.v[ "angles" ] = ( 354,374, 344,526, -1,56396 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 8393,64, -6460,92, 102,788 ); - ent.v[ "angles" ] = ( 1,29256, 14,9455, -2,83045 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 8438,13, -6582,85, 105,293 ); - ent.v[ "angles" ] = ( 359,328, 191,965, -2,0986 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 8363,87, -7077,4, 92,5037 ); - ent.v[ "angles" ] = ( 7,08973, 260,142, -1,31736 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 8398,26, -7131,53, 83,5329 ); - ent.v[ "angles" ] = ( 355,945, 6,61279, 7,42273 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 8406,2, -7050,16, 95,9016 ); - ent.v[ "angles" ] = ( 4,76812, 319,449, 5,4151 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 8418,49, -6955,4, 101,044 ); - ent.v[ "angles" ] = ( 1,65899, 333,337, -1,42441 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5503,15, 6388,21, -72,5321 ); - ent.v[ "angles" ] = ( 0,109414, 292,37, -8,15952 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5514,5, 6422,25, -73,5282 ); - ent.v[ "angles" ] = ( 356,025, 262,626, -7,13254 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 5388,57, 6425,25, -64,7438 ); - ent.v[ "angles" ] = ( 356,766, 272,615, -3,7523 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5337,66, 6389,44, -64,8271 ); - ent.v[ "angles" ] = ( 358,904, 187,573, -0,430535 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5324,97, 6019,33, -64,9331 ); - ent.v[ "angles" ] = ( 359,844, 311,516, -4,94951 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5377,87, 6091,1, -67,7557 ); - ent.v[ "angles" ] = ( 0,239705, 148,415, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5359,91, 6133,77, -69 ); - ent.v[ "angles" ] = ( 0,243594, 80,4189, 1,7854 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5280,21, 6157,39, -65,9638 ); - ent.v[ "angles" ] = ( 2,09653, 38,445, 1,85192 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5298,75, 6236,24, -67,6985 ); - ent.v[ "angles" ] = ( 0,512533, 76,4233, 0,749736 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5481, 6340,94, -69,9456 ); - ent.v[ "angles" ] = ( 354,217, 246,67, -5,76663 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5469,72, 6431,43, -71,8224 ); - ent.v[ "angles" ] = ( 356,025, 262,626, -5,13254 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5313,89, 6374,04, -68,4139 ); - ent.v[ "angles" ] = ( 352,852, 230,625, -1,9477 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 1744,42, 704,608, -57,139 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 267 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); - ent.v[ "origin" ] = ( -5879,18, 5132,33, -54,9188 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 203 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); - ent.v[ "origin" ] = ( -5679,99, 5029,36, -38,0459 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 224 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( 191,569, 618,303, -38 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( 53,7307, 538,679, -35,3064 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 250,113, 567,747, -34,6563 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 132,32, 591,904, 85,6072 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 318 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 234,855, 648,418, 85,125 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 141,005, 552,795, -33,0726 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 304 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_vault" ); - ent.v[ "origin" ] = ( 466,399, 540,849, 24,125 ); - ent.v[ "angles" ] = ( 2, 330, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_key_glint" ); - ent.v[ "origin" ] = ( 589,29, 440,722, 11,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 233 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_key_glint" ); - ent.v[ "origin" ] = ( 589,064, 449,555, 11,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 233 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( 100,097, 339,198, -46,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 174 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( 256,422, 349,21, -54,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( 178,717, 413,692, -29,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_bar_glow" ); - ent.v[ "origin" ] = ( 1777,99, 156,13, 151,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( 2523,8, 374,808, 69,625 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 1114,07, 20,5454, 41,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 313 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_town_cans" ); - ent.v[ "origin" ] = ( 502,541, 765,832, 83,125 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 991,306, -95,3722, 40,5243 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 313 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( 1970,15, 167,957, 163,938 ); - ent.v[ "angles" ] = ( 335, 251, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_med" ); - ent.v[ "origin" ] = ( 2239,96, 185,098, 139,125 ); - ent.v[ "angles" ] = ( 336,247, 251,383, 8,33834 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_med" ); - ent.v[ "origin" ] = ( 1969,63, -25,7143, 91,125 ); - ent.v[ "angles" ] = ( 335,016, 245,207, -0,932351 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( 1873,95, 168,875, 165,392 ); - ent.v[ "angles" ] = ( 332,003, 249,879, 0,387281 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( 1941,61, 167,23, 198,192 ); - ent.v[ "angles" ] = ( 336, 251, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( 2003,46, 42,8896, 92,125 ); - ent.v[ "angles" ] = ( 337,004, 241,914, 0,424438 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( 2350,84, 34,2896, 88,125 ); - ent.v[ "angles" ] = ( 333,004, 244,121, -0,474286 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( 1888,03, 168,875, 202,429 ); - ent.v[ "angles" ] = ( 336, 251, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_med" ); - ent.v[ "origin" ] = ( 2324,61, -20,7978, 88,125 ); - ent.v[ "angles" ] = ( 334, 243, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( 2179,62, -1804,56, 249,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 173 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( 2212,67, -1670,11, 208,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 174 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( 1264,63, -3157,28, 28,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 70 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); - ent.v[ "origin" ] = ( -627,572, -615,202, 116,432 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 113; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety" ); - ent.v[ "origin" ] = ( -627,359, -615,075, 116,432 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 112; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( 1927,64, -1060,33, 131,881 ); - ent.v[ "angles" ] = ( 67, 269,911, 87,9181 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1645,32, 694,99, -64,1414 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1602,48, 476,257, -68,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 324 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1535,94, 497,874, -64,9919 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 23 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1374,88, 782,003, -65 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 185 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1603,51, -262,848, -65 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 324 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 584,114, -459,174, -67 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 205 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 775,721, -690,862, -57,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 353 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1026,73, -502,666, -64,9585 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 304 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1165,88, -310,769, -65 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 250 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1592,68, -972,327, -64,8077 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 31 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1515,33, -822,148, -62,2515 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 20 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1533,38, -1139,12, -60,4293 ); - ent.v[ "angles" ] = ( 0,278291, 274,981, -5,99519 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 1359,65, -1213,52, -63,1614 ); - ent.v[ "angles" ] = ( 356,345, 160,109, -1,41514 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 1535,79, -1334,63, -63,8559 ); - ent.v[ "angles" ] = ( 0,73816, 38,0882, 3,84916 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 1492,83, -1288,81, -50,9464 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 344 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 1479,57, -1249,33, -55,1658 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 48 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 1493,56, -1314,7, -54,8906 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 279 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1386,95, 261,349, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 252 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1247,14, 178,805, -65 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1431,34, 155,715, -66 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 176 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 1540,99, -68,7187, -64,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 60 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 1482,47, -63,7589, -62 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 103 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 1343,41, 77,0003, -68,1872 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 102 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1562,34, -1135,27, -60,6276 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 283 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( 1452,5, -218,951, -70 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 268 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( 1361,91, -551,798, -67 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 230 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 2441,27, -547,621, -59,6587 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 208 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1248,59, -1279,85, -58 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 294 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 1343,33, -1237,01, -55,7566 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 67 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -6869,17, 5342,61, -62,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 350 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -6869,78, 5464,68, -61,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 15 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( -6835,64, 5264,04, -66,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 53 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( -6762,79, 5228,51, -63,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 52 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( -6720,24, 5171,85, -61,3532 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 23 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( -6896,93, 5375,32, -63,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 244 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_power_pulse" ); - ent.v[ "origin" ] = ( 12204,4, 7587,57, -641 ); - ent.v[ "angles" ] = ( 270, 0, -95 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 500; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_power_on" ); - ent.v[ "origin" ] = ( 12204,4, 7587,57, -640 ); - ent.v[ "angles" ] = ( 270, 0, -95 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0,25; - ent.v[ "exploder" ] = 500; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_power_rising" ); - ent.v[ "origin" ] = ( 12204,4, 7587,57, -639 ); - ent.v[ "angles" ] = ( 270, 0, -95 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 30,25; - ent.v[ "exploder" ] = 500; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_crevice_smoke_100" ); - ent.v[ "origin" ] = ( -6865,77, 5449,35, -63,7096 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 18 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_crevice_smoke_100" ); - ent.v[ "origin" ] = ( -6865,9, 5353,17, -64,4128 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 352 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_crevice_smoke_100" ); - ent.v[ "origin" ] = ( -6821,72, 5257,82, -62,8765 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 68 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_crevice_smoke_100" ); - ent.v[ "origin" ] = ( -6752,63, 5222,43, -66,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 50 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety" ); - ent.v[ "origin" ] = ( 6301,07, 5079,12, 67,4271 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 110; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( -10128,1, 3411,46, 196 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 331 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( -10497, 2685,14, 219,741 ); - ent.v[ "angles" ] = ( 0, 331, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( -10539,3, 1146,3, 311,719 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 316 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( -9678,57, 2737,65, 192 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 54 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( -11488,2, 521,303, 192 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 27 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( -10739,5, -2162,63, 240,948 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 150 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( -9363,38, -6107,72, 196 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 230 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_thick_600x600" ); - ent.v[ "origin" ] = ( -10126,6, -6035,96, 192 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_thick_600x600" ); - ent.v[ "origin" ] = ( -10747,4, -3914,96, 192 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -11077, -1101,23, 180 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 171 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort" ); - ent.v[ "origin" ] = ( -11210, -1129,64, 180 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); - ent.v[ "origin" ] = ( -11220,5, -1101,46, 180 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 203 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -11149,5, -1196,82, 180 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -11188,2, -1050,69, 180 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -11279,7, -1155,05, 180 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -11278,8, -1268,24, 180 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 93 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -11296,1, -909,062, 185 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 78 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -11309,7, -2014,81, 180 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 126 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); - ent.v[ "origin" ] = ( -11311, -2020,2, 180 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 314 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -11375, -1964,33, 185,879 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 346 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -11234,5, -2090,5, 180 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 155 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( -11220,4, -3193,42, 268,293 ); - ent.v[ "angles" ] = ( 333,018, 206,982, 2,24406 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -11104,8, -983,586, 194,026 ); - ent.v[ "angles" ] = ( 7, 190, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); - ent.v[ "origin" ] = ( -10657,8, 889,003, 305,817 ); - ent.v[ "angles" ] = ( 0, 316, -4 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_dbl_glow" ); - ent.v[ "origin" ] = ( -6247,77, 5197,74, 35,125 ); - ent.v[ "angles" ] = ( 297,939, 94,5663, -94,2372 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -9936,09, 2851,18, 441 ); - ent.v[ "angles" ] = ( 270, 0, -30 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -10224,1, 2342,43, 440 ); - ent.v[ "angles" ] = ( 270, 0, -30 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -10610,4, 1486,71, 430,812 ); - ent.v[ "angles" ] = ( 289, 249, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -11120, -312,414, 440,9 ); - ent.v[ "angles" ] = ( 270, 359,089, -12,0888 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -11249,9, -1465,12, 439,2 ); - ent.v[ "angles" ] = ( 270, 359,951, -1,95138 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -11173,1, -3034,18, 441,161 ); - ent.v[ "angles" ] = ( 270, 340,77, 26,2299 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -10797,9, -4638,33, 439,9 ); - ent.v[ "angles" ] = ( 270, 1,54295, 17,457 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -10121,4, -5933,87, 433,345 ); - ent.v[ "angles" ] = ( 289,524, 274,491, 104,913 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -9680,11, -6367,1, 433 ); - ent.v[ "angles" ] = ( 289,455, 68,9812, -16,4659 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( -10003,3, 3224,71, 192 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 259 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow" ); - ent.v[ "origin" ] = ( -11779,3, -1125,37, 375 ); - ent.v[ "angles" ] = ( 270, 0,906503, -1,90651 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_flicker" ); - ent.v[ "origin" ] = ( -11778, -1677,58, 373,371 ); - ent.v[ "angles" ] = ( 270, 0,906503, -1,90651 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); - ent.v[ "origin" ] = ( -11778,4, -2244,37, 374,1 ); - ent.v[ "angles" ] = ( 270, 0,906503, -1,90651 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); - ent.v[ "origin" ] = ( -10951,7, -5454,94, 374 ); - ent.v[ "angles" ] = ( 270, 358,512, 26,4878 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -10710,7, -855,473, 370 ); - ent.v[ "angles" ] = ( 271, 264,002, 89,9978 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); - ent.v[ "origin" ] = ( -6163,17, 3293,78, -13,9583 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 119 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); - ent.v[ "origin" ] = ( -11303,5, -3354,03, 302,04 ); - ent.v[ "angles" ] = ( 337,721, 5,86313, -15,1555 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); - ent.v[ "origin" ] = ( -7381,73, 6748,78, -55 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 284 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); - ent.v[ "origin" ] = ( -7490,71, 6520,46, -71 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 276 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); - ent.v[ "origin" ] = ( -7307,65, 6961,87, -79 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 276 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_column_lrg" ); - ent.v[ "origin" ] = ( -7412,36, 7034,42, -45 ); - ent.v[ "angles" ] = ( 290,014, 195,476, -92,6171 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); - ent.v[ "origin" ] = ( -5794,23, 6978,67, -44 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 152 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -6355,24, 5714, 8,125 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -7184,36, 5600,22, 15,125 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 177,625, -530,665, -48,3973 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 313 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 1295,93, 882,596, -25,875 ); - ent.v[ "angles" ] = ( 35, 342, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 1284,46, 875,951, -32,7092 ); - ent.v[ "angles" ] = ( 327, 156, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -5459,9, -6788, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 337 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -5230,88, -6999,87, -65 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 85 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -5145,21, -6915,75, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 337 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -5050,25, -6921,37, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 169 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -5501,02, -6704,36, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 263 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -5473,88, -7476,84, 127,125 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -5429,98, -7531,46, 128 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -5429,21, -7664,66, 128,125 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -5429,52, -7799,99, 127,814 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -5429,63, -7933,89, 128 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -5644,89, -7549,17, 134,291 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -6031,36, -7550,77, 136,125 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -6314,79, -7549,68, 134,879 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -6469,19, -7789,98, 136,641 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -5938,95, -7417,7, 127,125 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -5846,87, -7476,07, 126,967 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -5656,66, -7476,06, 128 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -5483,61, -7432,77, -34,6377 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 290 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 5435,05, 6878,72, -9,113 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 187 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -5974,13, -7261,3, -48,2301 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 64 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -5972,29, -7281,63, -66,268 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 324 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( -5851,29, -7067,3, -54,1333 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 136 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( -4366,17, -7273,86, -52,8879 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 122 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( -5148,85, -7273,66, -63,5983 ); - ent.v[ "angles" ] = ( 357, 120,999, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( -5090,66, -7323,27, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 122 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( -4380,11, -7148,49, -58,148 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 122 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( -5862,85, -7050,07, -52,8316 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 122 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); - ent.v[ "origin" ] = ( -5969,18, -7734,27, 10,025 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -5698,49, -8378,1, -12,3228 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_glow_fog" ); - ent.v[ "origin" ] = ( -4568,29, -7225,78, 151,693 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 117 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -4737,35, -7412,11, 197,275 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -4833,49, -7840,76, 125,125 ); - ent.v[ "angles" ] = ( 271, 359,999, -178,999 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -4625,94, -7868,51, 124,025 ); - ent.v[ "angles" ] = ( 295,505, 181,435, 177,976 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -4410,87, -7797,71, 114,26 ); - ent.v[ "angles" ] = ( 283,337, 346,888, 12,8218 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5409,75, -7279,42, 276,181 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5408,13, -7411,31, 275,423 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5409,11, -7211,45, 276,35 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5412,33, -7144,55, 274,523 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5412,82, -7113,89, 274,643 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5409,51, -7012,87, 276,361 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5408,54, -6967,22, 509,706 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5408,04, -6942,82, 606,032 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5336,28, -7378,8, 275,297 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5337,65, -7312,61, 275,796 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5336,82, -7245,57, 275,566 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5336,31, -7143,39, 276,066 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5337,79, -7013,92, 275,057 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5336,85, -6971,21, 475,647 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5337,16, -6957,33, 539,584 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( -4834,79, -7458,79, 128,325 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -6306,31, -7943,28, 77,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -5775,25, -7866,32, 54,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -5729,95, -7877,56, 63,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -5625,83, -7543,92, 61,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -5268,45, -7968,52, 4,89243 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -5142,25, -7958,67, -20,1334 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_bulb_xsm" ); - ent.v[ "origin" ] = ( 7894,84, -6552,52, 202,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_bulb_xsm" ); - ent.v[ "origin" ] = ( 7889,8, -6318,81, 315,925 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_bulb_xsm" ); - ent.v[ "origin" ] = ( 8013,75, -6642,93, 361,925 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 8328,49, -5015,29, 161,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 7882,26, -5207,24, 151,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 8503,42, -4804,02, 162,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 8059,34, -5204,01, 333,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_bulb_xsm" ); - ent.v[ "origin" ] = ( 8317,79, -6683,08, 180,206 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_bulb_xsm" ); - ent.v[ "origin" ] = ( 8234,94, -6586,04, 178 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_bulb_xsm" ); - ent.v[ "origin" ] = ( 8137,48, -6959,37, 211,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 8057,41, -4806,99, 161,725 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 7374,98, -5426,44, 49,3118 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( -4220,64, -7799,22, -1,875 ); - ent.v[ "angles" ] = ( 316,689, 259,962, 13,0518 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( -4189,21, -7705,66, 7,66019 ); - ent.v[ "angles" ] = ( 317,814, 249,191, 10,3636 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( -4295,9, -7802,49, 21,125 ); - ent.v[ "angles" ] = ( 320,075, 258,325, 14,3308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( -4308,83, -7683,01, 32,8659 ); - ent.v[ "angles" ] = ( 325,068, 264,852, 10,8459 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( -5017,99, -7879,03, -56,875 ); - ent.v[ "angles" ] = ( 340,408, 259,106, 4,31522 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( -5003,87, -7838,04, -30,3927 ); - ent.v[ "angles" ] = ( 342,331, 260,31, 3,91311 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( -5494,71, -7831,96, 3,125 ); - ent.v[ "angles" ] = ( 335,016, 248,207, -0,932351 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( -5523,54, -7862,26, 0,125 ); - ent.v[ "angles" ] = ( 336, 246, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( 9040,04, -6391,29, 273,2 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( 8419,09, -5744,22, 249,051 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( 8242,84, -6849,96, 259,625 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( 8240,02, -6532,87, 209,525 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( 6587,59, -5127,09, -55,2822 ); - ent.v[ "angles" ] = ( 353, 160, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( 6987,8, -5763,06, -51,5495 ); - ent.v[ "angles" ] = ( 2, 136, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( 7858,56, -5805,03, 8,45168 ); - ent.v[ "angles" ] = ( 2, 136, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( 7792,54, -5443,05, 36,5811 ); - ent.v[ "angles" ] = ( 359, 136, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( 7442,47, -5125,89, -4,7008 ); - ent.v[ "angles" ] = ( 359, 136, -5 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( 8739,61, -6983,54, 86,5683 ); - ent.v[ "angles" ] = ( 0,545573, 157,823, 1,29891 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8027,21, -6432,62, 165,375 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8225,35, -6613,31, 178,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8140,59, -6889,03, 168,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8033,01, -6470,27, 294,896 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 9029,53, -6393,49, 249,093 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8416,65, -5742,4, 224,177 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8357,57, -6682,99, 183,255 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8100,48, -5243,8, 114,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 7910,7, -5209,15, 151,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8050,46, -5221,8, 334,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8484,12, -4806,32, 166,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8055,05, -4795,58, 161,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8328,53, -5033,75, 165,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 7854,08, -5055,63, 126,147 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 7803,41, -4567,1, 111,113 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8591,82, -5402,47, 117 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 7135,13, -5638,24, 30,9983 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( 9978,39, -1767,15, -212,32 ); - ent.v[ "angles" ] = ( 358, 160, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( 10242, -133,225, -213,655 ); - ent.v[ "angles" ] = ( 2, 160, 2 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( 10185, -1131,84, -210,081 ); - ent.v[ "angles" ] = ( 2, 160, 2 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 10419,3, 7366,19, -557,286 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 223 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 10426,2, 7362,67, -556,087 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 271 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 10576,4, 7867,03, -534,373 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 21 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 10561,8, 7854,68, -546,776 ); - ent.v[ "angles" ] = ( 24, 21, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 10543,1, 7838,16, -564,906 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 287 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 11244,2, 7598,05, -529,002 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 11273,6, 7566,38, -510,46 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 11197,5, 7581,58, -554,377 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 11102,1, 7582,38, -521,847 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( 11534,9, 7043,33, -422,437 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 125 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); - ent.v[ "origin" ] = ( 11695,4, 6972,81, -417,525 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 121 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( 10772,1, 7534,6, -579,322 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 134 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( 10293,5, 8161,56, -576,661 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 157 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( 11284,2, 7782,37, -549,009 ); - ent.v[ "angles" ] = ( 8,89267, 132,773, -10,1167 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); - ent.v[ "origin" ] = ( 10545,1, 7987,11, -542,084 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 213 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); - ent.v[ "origin" ] = ( -7274,63, 4216,52, -7,79429 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 84 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); - ent.v[ "origin" ] = ( -4655,73, -7718,2, -46,2181 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 124 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); - ent.v[ "origin" ] = ( 1772,67, -134,847, -26,9184 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); - ent.v[ "origin" ] = ( 10482,5, 8077,43, -551,016 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 176 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); - ent.v[ "origin" ] = ( 10779,7, 7998,21, -540,07 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 257 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); - ent.v[ "origin" ] = ( 11134,3, 8093,66, -505,788 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 290 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( 11518,6, 7313,49, -755,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 32 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 11535,9, 7320,47, -712,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( 12544,7, 8367,86, -747,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 217 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( 12619,1, 8410,46, -751,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 250 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); - ent.v[ "origin" ] = ( 11077,4, 8147,23, -472,382 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 85 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( 10627,8, 8984,05, -351,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 244 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( 10671,7, 9056,4, -351,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 221 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); - ent.v[ "origin" ] = ( 12185,1, 8300,09, -747,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); - ent.v[ "origin" ] = ( 10667,5, 8857,24, -566,312 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 320 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 11829,2, 7033,91, -366,52 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 142 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); - ent.v[ "origin" ] = ( 11000,5, 8592,98, -721,228 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 263 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -3523,91, 4145,58, 1026 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 164 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 200; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -5822,61, 8161,55, 1665,98 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 255 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 200; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -10419,6, 2878,18, 1302,32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 33 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 200; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -10422,2, 5513,57, 1108,93 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 351 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 200; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -7579,71, 2412,15, 1076,04 ); - ent.v[ "angles" ] = ( 20,9875, 82,1415, 0,732403 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 200; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -8591,58, 7883,01, 1434,96 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 300 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 200; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -5183,81, 1971,44, 1380,88 ); - ent.v[ "angles" ] = ( 8,93236, 125,086, 1,10578 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 200; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -3907,73, 6244,31, 1277,76 ); - ent.v[ "angles" ] = ( 4,95198, 216,03, 0,697713 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 200; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -7994,63, -5467,26, 1488 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 338 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 220; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -6248,9, -4383,96, 1488,83 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 283 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 220; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -3637,03, -5318,07, 994,45 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 232 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 220; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -2982,77, -8985,62, 1217,37 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 142 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 220; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -4789,43, -10429,2, 1615,09 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 107 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 220; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -2144,48, -6671,63, 1097,34 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 189 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 220; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -7283,26, -9141,06, 1439,81 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 54 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 220; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -8253,71, -7187,61, 1204,71 ); - ent.v[ "angles" ] = ( 357, 7, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 220; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 11039,7, -5731,09, 1349,86 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 185 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 230; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 4491,1, -6164,51, 1530,32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 5 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 230; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 9613,27, -3527,74, 1697,05 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 238 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 230; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 4882,98, -3611,48, 1455,78 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 322 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 230; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 7145,47, -2628,27, 1418,72 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 271 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 230; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 10641, -8278,11, 1550,91 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 137 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 230; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 5867,88, -8161,48, 1505,91 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 45 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 230; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 8045,36, -9511,34, 1941,18 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 82 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 230; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 6852,87, -2262,35, 1264,09 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 23 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 240; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 13859, -645,96, 1348,54 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 183 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 240; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 8118,81, 2009,01, 1412,57 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 303 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 240; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 10501,1, 2270,69, 1535,92 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 271 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 240; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 6154,19, 223,038, 1606,08 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 349 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 240; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 10606,6, -4038,92, 1467,82 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 104 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 240; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 13138,8, -3032,95, 1329,48 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 139 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 240; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 12600,4, 1246,54, 1347,77 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 231 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 240; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 8452,68, -3056,77, 1074,09 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 55 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 240; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 14766,4, 6814,59, 1098,18 ); - ent.v[ "angles" ] = ( 12, 174, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 10339,2, 3964,06, 1379,25 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 82 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 12754,5, 4793,53, 1107,25 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 132 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 14340,3, 9177,31, 663,407 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 197 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 8179,63, 4723,92, 896,714 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 51 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 8458,11, 10639,4, 1231,62 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 307 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 7094,67, 8425,25, 1257 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 353 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 7202,75, 6339,84, 765,131 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 17 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 10729,5, 11122,9, 1151,78 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 266 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 13325,6, 10557,6, 1366,97 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 235 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -207,347, 1856,37, 1500,13 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 302 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 260; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -1247,2, -2498,41, 1408 ); - ent.v[ "angles" ] = ( 360, 36, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 260; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 1625,45, 3225,11, 1105 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 268 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 260; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 4274,06, -1538,84, 1177 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 153 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 260; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -1889,24, 66,6515, 1399 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 348 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 260; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 4525,94, 665,024, 1126 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 197 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 260; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 2974,66, -3206,25, 1577 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 111 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 260; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 694,038, -3737,93, 1409 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 79 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 260; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 3769,33, 2230,93, 904 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 232 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 260; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_truck_light" ); - ent.v[ "origin" ] = ( 1164,06, 310,847, -0,95 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 200 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); - ent.v[ "origin" ] = ( 2050,55, -1176,95, 92,625 ); - ent.v[ "angles" ] = ( 282, 270, 90 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_town_cans_sm" ); - ent.v[ "origin" ] = ( 888,034, -1532,84, 80,125 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_town_cans_sm" ); - ent.v[ "origin" ] = ( 888,055, -1424,17, 80,0051 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_town_cans_sm" ); - ent.v[ "origin" ] = ( 1058,12, -1424,92, 80,725 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -6494,99, 5193,01, 55,225 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -6004,73, 4178,79, -39,7161 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 99 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -6007,56, 4183,18, -46,8613 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 99 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); - ent.v[ "origin" ] = ( -7256,49, 5356,49, 76,625 ); - ent.v[ "angles" ] = ( 300,56, 56,1976, -63,4146 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_spark_blue_lg_loop" ); - ent.v[ "origin" ] = ( 11224,3, 7631,21, -757,475 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_spark_blue_lg_loop" ); - ent.v[ "origin" ] = ( 11166,9, 7525,87, -755,374 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( 1510,96, -426,276, -67,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 175 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_50x50_sm" ); - ent.v[ "origin" ] = ( -5982,84, -6804,63, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 184 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -5858,36, -7105,72, -65 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 289 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -5694,71, -6884,39, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 350 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -5823,62, -6768,1, -65,2136 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 97 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_cool" ); - ent.v[ "origin" ] = ( -7178,46, 5386,18, -43,6839 ); - ent.v[ "angles" ] = ( 346, 41, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_cool" ); - ent.v[ "origin" ] = ( -7176,71, 5393,31, -9,00734 ); - ent.v[ "angles" ] = ( 346, 41, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_cool" ); - ent.v[ "origin" ] = ( -7177,88, 5334,54, 45,5397 ); - ent.v[ "angles" ] = ( 356, 55, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_cool" ); - ent.v[ "origin" ] = ( -7061,11, 5401,32, -55,875 ); - ent.v[ "angles" ] = ( 341, 56, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_cool" ); - ent.v[ "origin" ] = ( -7108,24, 5323,87, -55,875 ); - ent.v[ "angles" ] = ( 341, 55, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( -6364,25, 5404,07, -54,2979 ); - ent.v[ "angles" ] = ( 327,291, 180,677, 4,76528 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( -6450,47, 5366,94, -55,875 ); - ent.v[ "angles" ] = ( 317,576, 183,05, -3,56625 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( -6324,56, 5391,09, 23,3601 ); - ent.v[ "angles" ] = ( 339,99, 181,99, -0,275328 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -6526,78, 5027,04, -32,4411 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 279 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -6536,44, 5005,17, -38,2548 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 272 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -6550,6, 5011,6, -33,6877 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( 10085,8, 7660,61, -580 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 156 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( 10099,7, 7278,2, -583 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 77 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( 10029,6, 7897,85, -584 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 206 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 10093,3, 7472,53, -583 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 10199,8, 7421,3, -573 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 10161,9, 7815,92, -576 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 81 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -2752,23, -202,843, -61,0126 ); - ent.v[ "angles" ] = ( 10,9441, 272,285, 67,3066 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 150; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -2748,37, -203,92, -10,2652 ); - ent.v[ "angles" ] = ( 0, 273, 9 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 150; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_flicker" ); - ent.v[ "origin" ] = ( 1901,03, 564,856, 67,125 ); - ent.v[ "angles" ] = ( 311,502, 195,461, 157,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( 9992,94, -1245,49, -217,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 130 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 10052,3, -1175,39, -223,625 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 276 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 10168,1, -1213,8, -221,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 10061,8, -1368,94, -222,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 70 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( 11263,9, 8174,39, -337,162 ); - ent.v[ "angles" ] = ( 52, 12, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_bulb_xsm" ); - ent.v[ "origin" ] = ( 11773,7, 8485,59, -469,375 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 290 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( 11333,8, 8107,72, -378,181 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 74 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( 10530,4, 8345,07, -413,424 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( -4437,91, -7528,95, 99,8901 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -4625,7, -7827,94, 124,725 ); - ent.v[ "angles" ] = ( 295,505, 181,435, 177,976 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( -6346,4, -7804,18, -13,2077 ); - ent.v[ "angles" ] = ( 338, 245, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( -6346,4, -7804,18, -13,2077 ); - ent.v[ "angles" ] = ( 338, 245, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); - ent.v[ "origin" ] = ( -6144,54, -7824,85, 130,125 ); - ent.v[ "angles" ] = ( 282, 90, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); - ent.v[ "origin" ] = ( -5761,02, -7822,95, 130,125 ); - ent.v[ "angles" ] = ( 270, 30,9987, -120,999 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_town_cans_sm" ); - ent.v[ "origin" ] = ( -3834,8, -7320,06, 61,125 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( 2224,68, 104,286, 155,125 ); - ent.v[ "angles" ] = ( 336,062, 255,377, -1,77889 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( 2202,63, 108,655, 148,125 ); - ent.v[ "angles" ] = ( 336, 251, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( 2182,71, 167,009, 152,125 ); - ent.v[ "angles" ] = ( 336, 251, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_bulb_xsm" ); - ent.v[ "origin" ] = ( 7144,94, -5606,8, 70,4908 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 13759,9, -1380,82, -92,9938 ); - ent.v[ "angles" ] = ( 314, 229, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 13870,7, -722,317, -222,776 ); - ent.v[ "angles" ] = ( 306, 229, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 13863,9, -341,626, -212,875 ); - ent.v[ "angles" ] = ( 306, 229, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 13808,1, -628,646, -252,875 ); - ent.v[ "angles" ] = ( 298, 229, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 13859,6, -974,169, -94 ); - ent.v[ "angles" ] = ( 326, 229, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 13805,1, -1449,76, -132,375 ); - ent.v[ "angles" ] = ( 317,174, 237,094, 15,7036 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 13558,1, -1418,66, -180,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 13987,6, -365,533, -152,199 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); - ent.v[ "origin" ] = ( 13795,6, -429,569, -188,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( 13819,1, -1026,6, -185,938 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); - ent.v[ "origin" ] = ( 13763,8, -1373,05, -181,438 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); - ent.v[ "origin" ] = ( 14249,4, -1138,75, -195,847 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); - ent.v[ "origin" ] = ( 13147,5, -1608,93, -198,477 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); - ent.v[ "origin" ] = ( 13355,5, -236,408, -194,069 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( 14144,1, -1050,49, -192,334 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( 13846,6, -1797,74, -179,776 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( 13715,6, -740,508, -188,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( 13280,2, -758,48, -202,824 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 33 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( 11569,6, 7207,64, -627,375 ); - ent.v[ "angles" ] = ( 65, 90, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_spark_blue_lg_loop" ); - ent.v[ "origin" ] = ( 11097,3, 8370,78, -472,312 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_spark_blue_lg_loop" ); - ent.v[ "origin" ] = ( 11065,7, 8350,09, -480,76 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_transformer_on" ); - ent.v[ "origin" ] = ( 11096,1, 8349,73, -498,022 ); - ent.v[ "angles" ] = ( 10,9932, 163,963, -8,38868 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_spark_blue_sm_loop" ); - ent.v[ "origin" ] = ( 11062,9, 8351,89, -475,091 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); - ent.v[ "origin" ] = ( -11249,7, 904,058, 192 ); - ent.v[ "angles" ] = ( 299,251, 356,208, -7,17259 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); - ent.v[ "origin" ] = ( -11060,9, 836,008, 327,885 ); - ent.v[ "angles" ] = ( 299,251, 356,208, -7,17259 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); - ent.v[ "origin" ] = ( -10848,1, 727,41, 262,305 ); - ent.v[ "angles" ] = ( 299,251, 356,208, -7,17259 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( -11453,1, -2704,04, 238 ); - ent.v[ "angles" ] = ( 312,147, 207,959, -4,21566 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( -11447,1, -2717,45, 320 ); - ent.v[ "angles" ] = ( 316,137, 207,551, -3,92308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -11237,1, -2774,08, 205,693 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 184 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); - ent.v[ "origin" ] = ( -11065,4, -3093,87, 210,48 ); - ent.v[ "angles" ] = ( 313, 209, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); - ent.v[ "origin" ] = ( -11085,3, -3572,2, 238,785 ); - ent.v[ "angles" ] = ( 323, 209, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); - ent.v[ "origin" ] = ( -10751,6, 548,387, 281,46 ); - ent.v[ "angles" ] = ( 298,016, 48,8707, 1,87996 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); - ent.v[ "origin" ] = ( 11026,4, 8418,04, -452,626 ); - ent.v[ "angles" ] = ( 319, 238, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); - ent.v[ "origin" ] = ( 11047,5, 8544,31, -407,409 ); - ent.v[ "angles" ] = ( 321,972, 238,53, -82,3373 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); - ent.v[ "origin" ] = ( 10965,8, 8541,46, -361,01 ); - ent.v[ "angles" ] = ( 319, 232, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); - ent.v[ "origin" ] = ( 10784,7, 8598,1, -382,159 ); - ent.v[ "angles" ] = ( 312, 253, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); - ent.v[ "origin" ] = ( 11284,5, 8803,95, -209,321 ); - ent.v[ "angles" ] = ( 71,1934, 180,803, -87,4102 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); - ent.v[ "origin" ] = ( 10895,9, 8866,25, -196,195 ); - ent.v[ "angles" ] = ( 73, 258, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); - ent.v[ "origin" ] = ( 10781,7, 8702,04, -222,415 ); - ent.v[ "angles" ] = ( 88, 267, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); - ent.v[ "origin" ] = ( 10799,1, 8575,29, -500,938 ); - ent.v[ "angles" ] = ( 79, 87, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); - ent.v[ "origin" ] = ( 10979,3, 8831,12, -420,153 ); - ent.v[ "angles" ] = ( 73, 267, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( 7976,72, -4577,1, 193,859 ); - ent.v[ "angles" ] = ( 18,9006, 87,1581, -14,8078 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 8107,3, -4901,58, 390,125 ); - ent.v[ "angles" ] = ( 322,027, 247,537, -1,56188 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 8254,05, -4975,36, 463,125 ); - ent.v[ "angles" ] = ( 322,434, 234,888, 6,2056 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 8194,13, -4983,58, 441,125 ); - ent.v[ "angles" ] = ( 322,109, 239,929, 3,1195 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 8249,4, -4832,61, 434,125 ); - ent.v[ "angles" ] = ( 322, 245, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 8226,89, -5241,31, 421,125 ); - ent.v[ "angles" ] = ( 322, 245, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 8046,06, -4860,87, 413,125 ); - ent.v[ "angles" ] = ( 322,677, 257,613, -7,72609 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 635,54, 407,845, 91,125 ); - ent.v[ "angles" ] = ( 16, 71, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 628,125, 406,734, 43,7233 ); - ent.v[ "angles" ] = ( 3, 71, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 638,811, 426,54, -18,875 ); - ent.v[ "angles" ] = ( 349, 71, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 784,565, 726,997, -33,8978 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 811,849, 729,36, -35,0041 ); - ent.v[ "angles" ] = ( 0, 270, -2 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( 942,825, 799,82, -52,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 223 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_river" ); - ent.v[ "origin" ] = ( -1148,16, -1138,11, -41,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 80 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_river" ); - ent.v[ "origin" ] = ( -2664,01, -1345,03, -346,451 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 104 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_river" ); - ent.v[ "origin" ] = ( -2674,54, 433,639, -359,784 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_river" ); - ent.v[ "origin" ] = ( -1124,75, 259,523, -48,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 69 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -863,312, -745,248, -48,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 84 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -1196,8, -787,911, -47,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 84 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -1381,38, -46,0962, -47,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 84 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_river" ); - ent.v[ "origin" ] = ( -2645,12, 9,70624, -357,904 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_river" ); - ent.v[ "origin" ] = ( -2719,28, -285,725, -334,581 ); - ent.v[ "angles" ] = ( 1, 87, 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_river" ); - ent.v[ "origin" ] = ( -2685,84, -997,132, -346,559 ); - ent.v[ "angles" ] = ( 358,157, 83,9017, 1,94423 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_smoke_tall" ); - ent.v[ "origin" ] = ( -2770,44, -707,874, -115,875 ); - ent.v[ "angles" ] = ( 12, 275, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 150; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_smoke_tall" ); - ent.v[ "origin" ] = ( -2778,19, -155,061, -94,875 ); - ent.v[ "angles" ] = ( 29, 80, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 150; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); - ent.v[ "origin" ] = ( -2291,93, -758,164, -101,161 ); - ent.v[ "angles" ] = ( 11, 214, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); - ent.v[ "origin" ] = ( -1255,13, -1277,79, -34,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 83 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_river" ); - ent.v[ "origin" ] = ( -2742,09, -665,677, -333,1 ); - ent.v[ "angles" ] = ( 1, 87, 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -1508,17, -320,626, -58,369 ); - ent.v[ "angles" ] = ( 355, 187, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -1452,09, -720,211, -60,0286 ); - ent.v[ "angles" ] = ( 359,993, 186,739, -2,98858 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -1415,76, -1177,25, -62,1707 ); - ent.v[ "angles" ] = ( 356,67, 156,949, -0,497783 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -704,822, -246,538, -58,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 22 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -779,445, -1098,9, -61,8023 ); - ent.v[ "angles" ] = ( 0,993918, 9,99335, -0,738612 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -699,587, -705,189, -57,1237 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 345 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -1140,42, -15,2616, -48,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 84 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -1273,82, -1205,47, -42,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 84 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -2204,13, -5739,66, -80,9468 ); - ent.v[ "angles" ] = ( 7, 307, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -1994,56, -5882,45, -95,6035 ); - ent.v[ "angles" ] = ( 7, 307, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -1875,72, -6466,37, -98,9131 ); - ent.v[ "angles" ] = ( 7, 307, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -1610,46, -6120,94, -92,074 ); - ent.v[ "angles" ] = ( 7, 307, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -2214,93, -6067,3, -102,865 ); - ent.v[ "angles" ] = ( 7, 307, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -1708,85, -6610,85, -95,0234 ); - ent.v[ "angles" ] = ( 355,794, 73,794, -4,39947 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -2318,27, -6315,39, -107,815 ); - ent.v[ "angles" ] = ( 353,394, 27,6107, 4,95295 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -1948,05, -6554,84, -111,909 ); - ent.v[ "angles" ] = ( 356,111, 77,7913, -4,68174 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -1528,88, -5886,45, -91,5689 ); - ent.v[ "angles" ] = ( 356,621, 83,7816, -5,0618 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -2024,68, -5586,57, -68,3597 ); - ent.v[ "angles" ] = ( 356,111, 77,7913, -4,68174 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_river" ); - ent.v[ "origin" ] = ( 8336,11, -8461,36, -126,254 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_river" ); - ent.v[ "origin" ] = ( 7440,73, -8528,75, -124,913 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 81 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( 7171,28, -6397,54, -126 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 107 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( 7054,04, -6397,21, -126 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 86 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( 7094,94, -6285,23, -126 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 107 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 8662,38, -5640,09, 124,292 ); - ent.v[ "angles" ] = ( 323, 318, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 8599,65, -5634,21, 153,303 ); - ent.v[ "angles" ] = ( 321,616, 319,338, -39,0353 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 5262,91, 7044,48, 43,9142 ); - ent.v[ "angles" ] = ( 316,21, 262,066, 4,81097 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 5174,93, 7053,13, 41,125 ); - ent.v[ "angles" ] = ( 316,411, 278,687, -6,71217 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_desklamp" ); - ent.v[ "origin" ] = ( -7101,92, 5147,13, -0,163522 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 86 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( -4683,65, -7970,08, 52,9438 ); - ent.v[ "angles" ] = ( 68, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_desklamp" ); - ent.v[ "origin" ] = ( 12139,1, 8505,25, -696,157 ); - ent.v[ "angles" ] = ( 85,685, 136,004, 133,029 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_spark_int_runner" ); - ent.v[ "origin" ] = ( 7967,02, -464,256, 1429,54 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 416; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_spark_int_runner" ); - ent.v[ "origin" ] = ( 7264,27, -458,783, 1045,58 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 305 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 416; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_spark_int_runner" ); - ent.v[ "origin" ] = ( 7964,59, -462,798, 663,232 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 59 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 416; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); - ent.v[ "origin" ] = ( -6365,04, 4578,04, 109,9 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 400; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); - ent.v[ "origin" ] = ( -6365,1, 4578,04, 109,746 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 401; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); - ent.v[ "origin" ] = ( -3946,92, -7250,32, 107,1 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 403; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); - ent.v[ "origin" ] = ( -3946,86, -7250,19, 107 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 402; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); - ent.v[ "origin" ] = ( -45,1183, -5452,09, 92,4005 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 405; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); - ent.v[ "origin" ] = ( -45,2307, -5452,06, 92,5112 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 404; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); - ent.v[ "origin" ] = ( 10160, -1748,7, -45,9436 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 406; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); - ent.v[ "origin" ] = ( 10160,1, -1748,62, -45,9508 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 407; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); - ent.v[ "origin" ] = ( 8133,62, 4787,71, -194,497 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 409; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); - ent.v[ "origin" ] = ( 8133,65, 4787,75, -194,479 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 408; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); - ent.v[ "origin" ] = ( 6301,07, 5079,12, 67,4271 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 410; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); - ent.v[ "origin" ] = ( 6300,89, 5078,98, 67,4032 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 411; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); - ent.v[ "origin" ] = ( -627,359, -615,075, 116,432 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 412; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); - ent.v[ "origin" ] = ( -627,572, -615,202, 116,432 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 413; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); - ent.v[ "origin" ] = ( -4418,11, -626,9, 192,003 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 415; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); - ent.v[ "origin" ] = ( -4418,04, -626,987, 191,91 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 414; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( -6917,44, 3891,27, 81,125 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -9032,52, 4222,59, 40,0809 ); - ent.v[ "angles" ] = ( 0,716713, 61,9889, -1,86754 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_creek" ); - ent.v[ "origin" ] = ( 11131,7, 8831,49, -894,668 ); - ent.v[ "angles" ] = ( 81,0228, 227,719, -27,4136 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_smoke_pit" ); - ent.v[ "origin" ] = ( 10945,1, 8621,79, -1116,88 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 61 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_creek" ); - ent.v[ "origin" ] = ( 11178,6, 8859,45, -715,452 ); - ent.v[ "angles" ] = ( 63,6007, 216,198, -13,3547 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_creek" ); - ent.v[ "origin" ] = ( 10953,1, 8914,32, -688,637 ); - ent.v[ "angles" ] = ( 53,9874, 292,702, 1,41178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_creek" ); - ent.v[ "origin" ] = ( 10983, 8838,08, -841,275 ); - ent.v[ "angles" ] = ( 66,6739, 293,054, 17,3617 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_creek" ); - ent.v[ "origin" ] = ( 10999, 8819,35, -930,992 ); - ent.v[ "angles" ] = ( 74,6464, 318,518, 15,5448 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_smoke_pit" ); - ent.v[ "origin" ] = ( 11118,6, 8507,76, -1176,88 ); - ent.v[ "angles" ] = ( 340, 61, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( 1417,38, -341,936, -67,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 175 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_flicker" ); - ent.v[ "origin" ] = ( 1927,64, -1060,33, 131,881 ); - ent.v[ "angles" ] = ( 67, 269,911, 87,9181 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_callbacksetup.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_callbacksetup.gsc deleted file mode 100644 index b96ee03..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_callbacksetup.gsc +++ /dev/null @@ -1,207 +0,0 @@ -#include maps/mp/gametypes_zm/_hostmigration; -#include maps/mp/gametypes_zm/_globallogic_actor; -#include maps/mp/gametypes_zm/_globallogic_player; -#include maps/mp/gametypes_zm/_globallogic; -#include maps/mp/_audio; -#include maps/mp/_utility; - -codecallback_startgametype() -{ - if ( !isDefined( level.gametypestarted ) || !level.gametypestarted ) - { - [[ level.callbackstartgametype ]](); - level.gametypestarted = 1; - } -} - -codecallback_finalizeinitialization() -{ - maps/mp/_utility::callback( "on_finalize_initialization" ); -} - -codecallback_playerconnect() -{ - self endon( "disconnect" ); - self thread maps/mp/_audio::monitor_player_sprint(); - [[ level.callbackplayerconnect ]](); -} - -codecallback_playerdisconnect() -{ - self notify( "disconnect" ); - client_num = self getentitynumber(); - [[ level.callbackplayerdisconnect ]](); -} - -codecallback_hostmigration() -{ -/# - println( "****CodeCallback_HostMigration****" ); -#/ - [[ level.callbackhostmigration ]](); -} - -codecallback_hostmigrationsave() -{ -/# - println( "****CodeCallback_HostMigrationSave****" ); -#/ - [[ level.callbackhostmigrationsave ]](); -} - -codecallback_prehostmigrationsave() -{ -/# - println( "****CodeCallback_PreHostMigrationSave****" ); -#/ - [[ level.callbackprehostmigrationsave ]](); -} - -codecallback_playermigrated() -{ -/# - println( "****CodeCallback_PlayerMigrated****" ); -#/ - [[ level.callbackplayermigrated ]](); -} - -codecallback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) -{ - self endon( "disconnect" ); - [[ level.callbackplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ); -} - -codecallback_playerkilled( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ) -{ - self endon( "disconnect" ); - [[ level.callbackplayerkilled ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ); -} - -codecallback_playerlaststand( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ) -{ - self endon( "disconnect" ); - [[ level.callbackplayerlaststand ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ); -} - -codecallback_playermelee( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit ) -{ - self endon( "disconnect" ); - [[ level.callbackplayermelee ]]( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit ); -} - -codecallback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) -{ - [[ level.callbackactordamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ); -} - -codecallback_actorkilled( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset ) -{ - [[ level.callbackactorkilled ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset ); -} - -codecallback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, damagefromunderneath, modelindex, partname ) -{ - [[ level.callbackvehicledamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, damagefromunderneath, modelindex, partname ); -} - -codecallback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, timeoffset ) -{ -} - -codecallback_faceeventnotify( notify_msg, ent ) -{ - if ( isDefined( ent ) && isDefined( ent.do_face_anims ) && ent.do_face_anims ) - { - if ( isDefined( level.face_event_handler ) && isDefined( level.face_event_handler.events[ notify_msg ] ) ) - { - ent sendfaceevent( level.face_event_handler.events[ notify_msg ] ); - } - } -} - -codecallback_menuresponse( action, arg ) -{ - if ( !isDefined( level.menuresponsequeue ) ) - { - level.menuresponsequeue = []; - level thread menuresponsequeuepump(); - } - index = level.menuresponsequeue.size; - level.menuresponsequeue[ index ] = spawnstruct(); - level.menuresponsequeue[ index ].action = action; - level.menuresponsequeue[ index ].arg = arg; - level.menuresponsequeue[ index ].ent = self; - level notify( "menuresponse_queue" ); -} - -menuresponsequeuepump() -{ - while ( 1 ) - { - level waittill( "menuresponse_queue" ); - level.menuresponsequeue[ 0 ].ent notify( "menuresponse" ); - arrayremoveindex( level.menuresponsequeue, 0, 0 ); - wait 0,05; - } -} - -setupcallbacks() -{ - setdefaultcallbacks(); - level.idflags_radius = 1; - level.idflags_no_armor = 2; - level.idflags_no_knockback = 4; - level.idflags_penetration = 8; - level.idflags_destructible_entity = 16; - level.idflags_shield_explosive_impact = 32; - level.idflags_shield_explosive_impact_huge = 64; - level.idflags_shield_explosive_splash = 128; - level.idflags_no_team_protection = 256; - level.idflags_no_protection = 512; - level.idflags_passthru = 1024; -} - -setdefaultcallbacks() -{ - level.callbackstartgametype = ::maps/mp/gametypes_zm/_globallogic::callback_startgametype; - level.callbackplayerconnect = ::maps/mp/gametypes_zm/_globallogic_player::callback_playerconnect; - level.callbackplayerdisconnect = ::maps/mp/gametypes_zm/_globallogic_player::callback_playerdisconnect; - level.callbackplayerdamage = ::maps/mp/gametypes_zm/_globallogic_player::callback_playerdamage; - level.callbackplayerkilled = ::maps/mp/gametypes_zm/_globallogic_player::callback_playerkilled; - level.callbackplayermelee = ::maps/mp/gametypes_zm/_globallogic_player::callback_playermelee; - level.callbackplayerlaststand = ::maps/mp/gametypes_zm/_globallogic_player::callback_playerlaststand; - level.callbackactordamage = ::maps/mp/gametypes_zm/_globallogic_actor::callback_actordamage; - level.callbackactorkilled = ::maps/mp/gametypes_zm/_globallogic_actor::callback_actorkilled; - level.callbackplayermigrated = ::maps/mp/gametypes_zm/_globallogic_player::callback_playermigrated; - level.callbackhostmigration = ::maps/mp/gametypes_zm/_hostmigration::callback_hostmigration; - level.callbackhostmigrationsave = ::maps/mp/gametypes_zm/_hostmigration::callback_hostmigrationsave; - level.callbackprehostmigrationsave = ::maps/mp/gametypes_zm/_hostmigration::callback_prehostmigrationsave; -} - -abortlevel() -{ -/# - println( "ERROR: Aborting level - gametype is not supported" ); -#/ - level.callbackstartgametype = ::callbackvoid; - level.callbackplayerconnect = ::callbackvoid; - level.callbackplayerdisconnect = ::callbackvoid; - level.callbackplayerdamage = ::callbackvoid; - level.callbackplayerkilled = ::callbackvoid; - level.callbackplayermelee = ::callbackvoid; - level.callbackplayerlaststand = ::callbackvoid; - level.callbackactordamage = ::callbackvoid; - level.callbackactorkilled = ::callbackvoid; - level.callbackvehicledamage = ::callbackvoid; - setdvar( "g_gametype", "dm" ); - exitlevel( 0 ); -} - -codecallback_glasssmash( pos, dir ) -{ - level notify( "glass_smash" ); -} - -callbackvoid() -{ -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_clientids.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_clientids.gsc deleted file mode 100644 index b17e410..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_clientids.gsc +++ /dev/null @@ -1,16 +0,0 @@ - -init() -{ - level.clientid = 0; - level thread onplayerconnect(); -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player.clientid = level.clientid; - level.clientid++; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_damagefeedback.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_damagefeedback.gsc deleted file mode 100644 index 5bf5a09..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_damagefeedback.gsc +++ /dev/null @@ -1,160 +0,0 @@ - -init() -{ - precacheshader( "damage_feedback" ); - precacheshader( "damage_feedback_flak" ); - precacheshader( "damage_feedback_tac" ); - level thread onplayerconnect(); -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player.hud_damagefeedback = newdamageindicatorhudelem( player ); - player.hud_damagefeedback.horzalign = "center"; - player.hud_damagefeedback.vertalign = "middle"; - player.hud_damagefeedback.x = -12; - player.hud_damagefeedback.y = -12; - player.hud_damagefeedback.alpha = 0; - player.hud_damagefeedback.archived = 1; - player.hud_damagefeedback setshader( "damage_feedback", 24, 48 ); - player.hitsoundtracker = 1; - } -} - -updatedamagefeedback( mod, inflictor, perkfeedback ) -{ - if ( !isplayer( self ) || sessionmodeiszombiesgame() ) - { - return; - } - if ( isDefined( mod ) && mod != "MOD_CRUSH" && mod != "MOD_GRENADE_SPLASH" && mod != "MOD_HIT_BY_OBJECT" ) - { - if ( isDefined( inflictor ) && isDefined( inflictor.soundmod ) ) - { - switch( inflictor.soundmod ) - { - case "player": - self thread playhitsound( mod, "mpl_hit_alert" ); - break; - case "heli": - self thread playhitsound( mod, "mpl_hit_alert_air" ); - break; - case "hpm": - self thread playhitsound( mod, "mpl_hit_alert_hpm" ); - break; - case "taser_spike": - self thread playhitsound( mod, "mpl_hit_alert_taser_spike" ); - break; - case "dog": - case "straferun": - case "default_loud": - self thread playhitsound( mod, "mpl_hit_heli_gunner" ); - break; - default: - self thread playhitsound( mod, "mpl_hit_alert_low" ); - break; - } - } - else self thread playhitsound( mod, "mpl_hit_alert_low" ); - } - if ( isDefined( perkfeedback ) ) - { - switch( perkfeedback ) - { - case "flakjacket": - self.hud_damagefeedback setshader( "damage_feedback_flak", 24, 48 ); - break; - case "tacticalMask": - self.hud_damagefeedback setshader( "damage_feedback_tac", 24, 48 ); - break; - } - } - else self.hud_damagefeedback setshader( "damage_feedback", 24, 48 ); - self.hud_damagefeedback.alpha = 1; - self.hud_damagefeedback fadeovertime( 1 ); - self.hud_damagefeedback.alpha = 0; - } -} - -playhitsound( mod, alert ) -{ - self endon( "disconnect" ); - if ( self.hitsoundtracker ) - { - self.hitsoundtracker = 0; - self playlocalsound( alert ); - wait 0,05; - self.hitsoundtracker = 1; - } -} - -updatespecialdamagefeedback( hitent ) -{ - if ( !isplayer( self ) ) - { - return; - } - if ( !isDefined( hitent ) ) - { - return; - } - if ( !isplayer( hitent ) ) - { - return; - } - wait 0,05; - if ( !isDefined( self.directionalhitarray ) ) - { - self.directionalhitarray = []; - hitentnum = hitent getentitynumber(); - self.directionalhitarray[ hitentnum ] = 1; - self thread sendhitspecialeventatframeend( hitent ); - } - else - { - hitentnum = hitent getentitynumber(); - self.directionalhitarray[ hitentnum ] = 1; - } -} - -sendhitspecialeventatframeend( hitent ) -{ - self endon( "disconnect" ); - waittillframeend; - enemyshit = 0; - value = 1; - entbitarray0 = 0; - i = 0; - while ( i < 32 ) - { - if ( isDefined( self.directionalhitarray[ i ] ) && self.directionalhitarray[ i ] != 0 ) - { - entbitarray0 += value; - enemyshit++; - } - value *= 2; - i++; - } - entbitarray1 = 0; - i = 33; - while ( i < 64 ) - { - if ( isDefined( self.directionalhitarray[ i ] ) && self.directionalhitarray[ i ] != 0 ) - { - entbitarray1 += value; - enemyshit++; - } - value *= 2; - i++; - } - if ( enemyshit ) - { - self directionalhitindicator( entbitarray0, entbitarray1 ); - } - self.directionalhitarray = undefined; - entbitarray0 = 0; - entbitarray1 = 0; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_gameobjects.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_gameobjects.gsc deleted file mode 100644 index 37c6871..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_gameobjects.gsc +++ /dev/null @@ -1,2630 +0,0 @@ -#include maps/mp/gametypes_zm/_tweakables; -#include maps/mp/gametypes_zm/_hostmigration; -#include maps/mp/gametypes_zm/_weapons; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; -#include common_scripts/utility; - -main( allowed ) -{ - level.vehiclesenabled = getgametypesetting( "vehiclesEnabled" ); - level.vehiclestimed = getgametypesetting( "vehiclesTimed" ); - level.objectivepingdelay = getgametypesetting( "objectivePingTime" ); - level.nonteambasedteam = "allies"; -/# - if ( level.script == "mp_vehicle_test" ) - { - level.vehiclesenabled = 1; -#/ - } - if ( level.vehiclesenabled ) - { - allowed[ allowed.size ] = "vehicle"; - filter_script_vehicles_from_vehicle_descriptors( allowed ); - } - entities = getentarray(); - entity_index = entities.size - 1; - while ( entity_index >= 0 ) - { - entity = entities[ entity_index ]; - if ( !entity_is_allowed( entity, allowed ) ) - { - entity delete(); - } - entity_index--; - - } - return; -} - -entity_is_allowed( entity, allowed_game_modes ) -{ - if ( isDefined( level.createfx_enabled ) && level.createfx_enabled ) - { - return 1; - } - allowed = 1; - while ( isDefined( entity.script_gameobjectname ) && entity.script_gameobjectname != "[all_modes]" ) - { - allowed = 0; - gameobjectnames = strtok( entity.script_gameobjectname, " " ); - i = 0; - while ( i < allowed_game_modes.size && !allowed ) - { - j = 0; - while ( j < gameobjectnames.size && !allowed ) - { - allowed = gameobjectnames[ j ] == allowed_game_modes[ i ]; - j++; - } - i++; - } - } - return allowed; -} - -filter_script_vehicles_from_vehicle_descriptors( allowed_game_modes ) -{ - vehicle_descriptors = getentarray( "vehicle_descriptor", "targetname" ); - script_vehicles = getentarray( "script_vehicle", "classname" ); - vehicles_to_remove = []; - descriptor_index = 0; - while ( descriptor_index < vehicle_descriptors.size ) - { - descriptor = vehicle_descriptors[ descriptor_index ]; - closest_distance_sq = 1E+12; - closest_vehicle = undefined; - vehicle_index = 0; - while ( vehicle_index < script_vehicles.size ) - { - vehicle = script_vehicles[ vehicle_index ]; - dsquared = distancesquared( vehicle getorigin(), descriptor getorigin() ); - if ( dsquared < closest_distance_sq ) - { - closest_distance_sq = dsquared; - closest_vehicle = vehicle; - } - vehicle_index++; - } - if ( isDefined( closest_vehicle ) ) - { - if ( !entity_is_allowed( descriptor, allowed_game_modes ) ) - { - vehicles_to_remove[ vehicles_to_remove.size ] = closest_vehicle; - } - } - descriptor_index++; - } - vehicle_index = 0; - while ( vehicle_index < vehicles_to_remove.size ) - { - vehicles_to_remove[ vehicle_index ] delete(); - vehicle_index++; - } - return; -} - -init() -{ - level.numgametypereservedobjectives = 0; - level.releasedobjectives = []; - if ( !sessionmodeiszombiesgame() ) - { - precacheitem( "briefcase_bomb_mp" ); - precacheitem( "briefcase_bomb_defuse_mp" ); - } - level thread onplayerconnect(); -} - -onplayerconnect() -{ - level endon( "game_ended" ); - for ( ;; ) - { - level waittill( "connecting", player ); - player thread onplayerspawned(); - player thread ondisconnect(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - level endon( "game_ended" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread ondeath(); - self.touchtriggers = []; - self.carryobject = undefined; - self.claimtrigger = undefined; - self.canpickupobject = 1; - self.disabledweapon = 0; - self.killedinuse = undefined; - } -} - -ondeath() -{ - level endon( "game_ended" ); - self endon( "spawned_player" ); - self waittill( "death" ); - if ( isDefined( self.carryobject ) ) - { - self.carryobject thread setdropped(); - } -} - -ondisconnect() -{ - level endon( "game_ended" ); - self waittill( "disconnect" ); - if ( isDefined( self.carryobject ) ) - { - self.carryobject thread setdropped(); - } -} - -createcarryobject( ownerteam, trigger, visuals, offset, objectivename ) -{ - carryobject = spawnstruct(); - carryobject.type = "carryObject"; - carryobject.curorigin = trigger.origin; - carryobject.ownerteam = ownerteam; - carryobject.entnum = trigger getentitynumber(); - if ( issubstr( trigger.classname, "use" ) ) - { - carryobject.triggertype = "use"; - } - else - { - carryobject.triggertype = "proximity"; - } - trigger.baseorigin = trigger.origin; - carryobject.trigger = trigger; - carryobject.useweapon = undefined; - if ( !isDefined( offset ) ) - { - offset = ( 0, 0, 1 ); - } - carryobject.offset3d = offset; - carryobject.newstyle = 0; - if ( isDefined( objectivename ) ) - { - carryobject.newstyle = 1; - } - else - { - objectivename = &""; - } - index = 0; - while ( index < visuals.size ) - { - visuals[ index ].baseorigin = visuals[ index ].origin; - visuals[ index ].baseangles = visuals[ index ].angles; - index++; - } - carryobject.visuals = visuals; - carryobject.compassicons = []; - carryobject.objid = []; - while ( !carryobject.newstyle ) - { - _a272 = level.teams; - _k272 = getFirstArrayKey( _a272 ); - while ( isDefined( _k272 ) ) - { - team = _a272[ _k272 ]; - carryobject.objid[ team ] = getnextobjid(); - _k272 = getNextArrayKey( _a272, _k272 ); - } - } - carryobject.objidpingfriendly = 0; - carryobject.objidpingenemy = 0; - level.objidstart += 2; - carryobject.objectiveid = getnextobjid(); - objective_add( carryobject.objectiveid, "invisible", carryobject.curorigin, objectivename ); - carryobject.carrier = undefined; - carryobject.isresetting = 0; - carryobject.interactteam = "none"; - carryobject.allowweapons = 0; - carryobject.visiblecarriermodel = undefined; - carryobject.worldicons = []; - carryobject.carriervisible = 0; - carryobject.visibleteam = "none"; - carryobject.worldiswaypoint = []; - carryobject.carryicon = undefined; - carryobject.ondrop = undefined; - carryobject.onpickup = undefined; - carryobject.onreset = undefined; - if ( carryobject.triggertype == "use" ) - { - carryobject thread carryobjectusethink(); - } - else - { - carryobject thread carryobjectproxthink(); - } - carryobject thread updatecarryobjectorigin(); - carryobject thread updatecarryobjectobjectiveorigin(); - return carryobject; -} - -carryobjectusethink() -{ - level endon( "game_ended" ); - self.trigger endon( "destroyed" ); - while ( 1 ) - { - self.trigger waittill( "trigger", player ); - while ( self.isresetting ) - { - continue; - } - while ( !isalive( player ) ) - { - continue; - } - if ( isDefined( player.laststand ) && player.laststand ) - { - continue; - } - while ( !self caninteractwith( player ) ) - { - continue; - } - while ( !player.canpickupobject ) - { - continue; - } - while ( player.throwinggrenade ) - { - continue; - } - while ( isDefined( self.carrier ) ) - { - continue; - } - while ( player isinvehicle() ) - { - continue; - } - while ( player isweaponviewonlylinked() ) - { - continue; - } - while ( !player istouching( self.trigger ) ) - { - continue; - } - self setpickedup( player ); - } -} - -carryobjectproxthink() -{ - level endon( "game_ended" ); - self.trigger endon( "destroyed" ); - while ( 1 ) - { - self.trigger waittill( "trigger", player ); - while ( self.isresetting ) - { - continue; - } - while ( !isalive( player ) ) - { - continue; - } - if ( isDefined( player.laststand ) && player.laststand ) - { - continue; - } - while ( !self caninteractwith( player ) ) - { - continue; - } - while ( !player.canpickupobject ) - { - continue; - } - while ( player.throwinggrenade ) - { - continue; - } - while ( isDefined( self.carrier ) ) - { - continue; - } - while ( player isinvehicle() ) - { - continue; - } - while ( player isweaponviewonlylinked() ) - { - continue; - } - while ( !player istouching( self.trigger ) ) - { - continue; - } - self setpickedup( player ); - } -} - -pickupobjectdelay( origin ) -{ - level endon( "game_ended" ); - self endon( "death" ); - self endon( "disconnect" ); - self.canpickupobject = 0; - for ( ;; ) - { - if ( distancesquared( self.origin, origin ) > 4096 ) - { - break; - } - else - { - wait 0,2; - } - } - self.canpickupobject = 1; -} - -setpickedup( player ) -{ - if ( isDefined( player.carryobject ) ) - { - if ( isDefined( player.carryobject.swappable ) && player.carryobject.swappable ) - { - player.carryobject thread setdropped(); - } - else - { - if ( isDefined( self.onpickupfailed ) ) - { - self [[ self.onpickupfailed ]]( player ); - } - return; - } - } - player giveobject( self ); - self setcarrier( player ); - index = 0; - while ( index < self.visuals.size ) - { - self.visuals[ index ] thread hideobject(); - index++; - } - self.trigger.origin += vectorScale( ( 0, 0, 1 ), 10000 ); - self notify( "pickup_object" ); - if ( isDefined( self.onpickup ) ) - { - self [[ self.onpickup ]]( player ); - } - self updatecompassicons(); - self updateworldicons(); - self updateobjective(); -} - -hideobject() -{ - radius = 32; - origin = self.origin; - grenades = getentarray( "grenade", "classname" ); - radiussq = radius * radius; - linkedgrenades = []; - linkedgrenadesindex = 0; - self hide(); - i = 0; - while ( i < grenades.size ) - { - if ( distancesquared( origin, grenades[ i ].origin ) < radiussq ) - { - if ( grenades[ i ] islinkedto( self ) ) - { - linkedgrenades[ linkedgrenadesindex ] = grenades[ i ]; - linkedgrenades[ linkedgrenadesindex ] unlink(); - linkedgrenadesindex++; - } - } - i++; - } - self.origin += vectorScale( ( 0, 0, 1 ), 10000 ); - waittillframeend; - i = 0; - while ( i < linkedgrenadesindex ) - { - linkedgrenades[ i ] launch( vectorScale( ( 0, 0, 1 ), 5 ) ); - i++; - } -} - -updatecarryobjectorigin() -{ - level endon( "game_ended" ); - self.trigger endon( "destroyed" ); - if ( self.newstyle ) - { - return; - } - objpingdelay = level.objectivepingdelay; - for ( ;; ) - { - if ( isDefined( self.carrier ) && level.teambased ) - { - self.curorigin = self.carrier.origin + vectorScale( ( 0, 0, 1 ), 75 ); - while ( self.visibleteam != "friendly" && self.visibleteam == "any" && self.objidpingfriendly ) - { - _a579 = level.teams; - _k579 = getFirstArrayKey( _a579 ); - while ( isDefined( _k579 ) ) - { - team = _a579[ _k579 ]; - if ( self isfriendlyteam( team ) ) - { - if ( self.objpoints[ team ].isshown ) - { - self.objpoints[ team ].alpha = self.objpoints[ team ].basealpha; - self.objpoints[ team ] fadeovertime( objpingdelay + 1 ); - self.objpoints[ team ].alpha = 0; - } - objective_position( self.objid[ team ], self.curorigin ); - } - _k579 = getNextArrayKey( _a579, _k579 ); - } - } - if ( self.visibleteam != "enemy" && self.visibleteam == "any" && self.objidpingenemy ) - { - if ( !self isfriendlyteam( team ) ) - { - if ( self.objpoints[ team ].isshown ) - { - self.objpoints[ team ].alpha = self.objpoints[ team ].basealpha; - self.objpoints[ team ] fadeovertime( objpingdelay + 1 ); - self.objpoints[ team ].alpha = 0; - } - objective_position( self.objid[ team ], self.curorigin ); - } - } - self wait_endon( objpingdelay, "dropped", "reset" ); - continue; - } - else - { - if ( isDefined( self.carrier ) ) - { - self.curorigin = self.carrier.origin + vectorScale( ( 0, 0, 1 ), 75 ); - wait 0,05; - break; - } - else - { - wait 0,05; - } - } - } -} - -updatecarryobjectobjectiveorigin() -{ - level endon( "game_ended" ); - self.trigger endon( "destroyed" ); - if ( !self.newstyle ) - { - return; - } - objpingdelay = level.objectivepingdelay; - for ( ;; ) - { - if ( isDefined( self.carrier ) ) - { - self.curorigin = self.carrier.origin; - objective_position( self.objectiveid, self.curorigin ); - self wait_endon( objpingdelay, "dropped", "reset" ); - continue; - } - else - { - objective_position( self.objectiveid, self.curorigin ); - wait 0,05; - } - } -} - -giveobject( object ) -{ -/# - assert( !isDefined( self.carryobject ) ); -#/ - self.carryobject = object; - self thread trackcarrier(); - if ( !object.allowweapons ) - { - self _disableweapon(); - self thread manualdropthink(); - } - self.disallowvehicleusage = 1; - if ( isDefined( object.visiblecarriermodel ) ) - { - self maps/mp/gametypes_zm/_weapons::forcestowedweaponupdate(); - } - if ( !object.newstyle ) - { - if ( isDefined( object.carryicon ) ) - { - if ( self issplitscreen() ) - { - self.carryicon = createicon( object.carryicon, 35, 35 ); - self.carryicon.x = -130; - self.carryicon.y = -90; - self.carryicon.horzalign = "right"; - self.carryicon.vertalign = "bottom"; - } - else self.carryicon = createicon( object.carryicon, 50, 50 ); - if ( !object.allowweapons ) - { - self.carryicon setpoint( "CENTER", "CENTER", 0, 60 ); - } - else - { - self.carryicon.x = 130; - self.carryicon.y = -60; - self.carryicon.horzalign = "user_left"; - self.carryicon.vertalign = "user_bottom"; - } - self.carryicon.alpha = 0,75; - self.carryicon.hidewhileremotecontrolling = 1; - self.carryicon.hidewheninkillcam = 1; - } - } -} - -returnhome() -{ - self.isresetting = 1; - self notify( "reset" ); - index = 0; - while ( index < self.visuals.size ) - { - self.visuals[ index ].origin = self.visuals[ index ].baseorigin; - self.visuals[ index ].angles = self.visuals[ index ].baseangles; - self.visuals[ index ] show(); - index++; - } - self.trigger.origin = self.trigger.baseorigin; - self.curorigin = self.trigger.origin; - if ( isDefined( self.onreset ) ) - { - self [[ self.onreset ]](); - } - self clearcarrier(); - updateworldicons(); - updatecompassicons(); - updateobjective(); - self.isresetting = 0; -} - -isobjectawayfromhome() -{ - if ( isDefined( self.carrier ) ) - { - return 1; - } - if ( distancesquared( self.trigger.origin, self.trigger.baseorigin ) > 4 ) - { - return 1; - } - return 0; -} - -setposition( origin, angles ) -{ - self.isresetting = 1; - index = 0; - while ( index < self.visuals.size ) - { - visual = self.visuals[ index ]; - visual.origin = origin; - visual.angles = angles; - visual show(); - index++; - } - self.trigger.origin = origin; - self.curorigin = self.trigger.origin; - self clearcarrier(); - updateworldicons(); - updatecompassicons(); - updateobjective(); - self.isresetting = 0; -} - -onplayerlaststand() -{ - if ( isDefined( self.carryobject ) ) - { - self.carryobject thread setdropped(); - } -} - -setdropped() -{ - self.isresetting = 1; - self notify( "dropped" ); - startorigin = ( 0, 0, 1 ); - endorigin = ( 0, 0, 1 ); - body = undefined; - if ( isDefined( self.carrier ) && self.carrier.team != "spectator" ) - { - startorigin = self.carrier.origin + vectorScale( ( 0, 0, 1 ), 20 ); - endorigin = self.carrier.origin - vectorScale( ( 0, 0, 1 ), 2000 ); - body = self.carrier.body; - self.visuals[ 0 ].origin = self.carrier.origin; - } - else - { - startorigin = self.safeorigin + vectorScale( ( 0, 0, 1 ), 20 ); - endorigin = self.safeorigin - vectorScale( ( 0, 0, 1 ), 20 ); - } - trace = playerphysicstrace( startorigin, endorigin ); - angletrace = bullettrace( startorigin, endorigin, 0, body ); - droppingplayer = self.carrier; - if ( isDefined( trace ) ) - { - tempangle = randomfloat( 360 ); - droporigin = trace; - if ( angletrace[ "fraction" ] < 1 && distance( angletrace[ "position" ], trace ) < 10 ) - { - forward = ( cos( tempangle ), sin( tempangle ), 0 ); - forward = vectornormalize( forward - vectorScale( angletrace[ "normal" ], vectordot( forward, angletrace[ "normal" ] ) ) ); - dropangles = vectorToAngle( forward ); - } - else - { - dropangles = ( 0, tempangle, 0 ); - } - index = 0; - while ( index < self.visuals.size ) - { - self.visuals[ index ].origin = droporigin; - self.visuals[ index ].angles = dropangles; - self.visuals[ index ] show(); - index++; - } - self.trigger.origin = droporigin; - self.curorigin = self.trigger.origin; - self thread pickuptimeout( trace[ 2 ], startorigin[ 2 ] ); - } - else - { - index = 0; - while ( index < self.visuals.size ) - { - self.visuals[ index ].origin = self.visuals[ index ].baseorigin; - self.visuals[ index ].angles = self.visuals[ index ].baseangles; - self.visuals[ index ] show(); - index++; - } - self.trigger.origin = self.trigger.baseorigin; - self.curorigin = self.trigger.baseorigin; - } - if ( isDefined( self.ondrop ) ) - { - self [[ self.ondrop ]]( droppingplayer ); - } - self clearcarrier(); - self updatecompassicons(); - self updateworldicons(); - self updateobjective(); - self.isresetting = 0; -} - -setcarrier( carrier ) -{ - self.carrier = carrier; - objective_setplayerusing( self.objectiveid, carrier ); - self thread updatevisibilityaccordingtoradar(); -} - -clearcarrier() -{ - if ( !isDefined( self.carrier ) ) - { - return; - } - self.carrier takeobject( self ); - objective_clearplayerusing( self.objectiveid, self.carrier ); - self.carrier = undefined; - self notify( "carrier_cleared" ); -} - -shouldbereset( minz, maxz ) -{ - minetriggers = getentarray( "minefield", "targetname" ); - hurttriggers = getentarray( "trigger_hurt", "classname" ); - elevators = getentarray( "script_elevator", "targetname" ); - index = 0; - while ( index < minetriggers.size ) - { - if ( self.visuals[ 0 ] istouchingswept( minetriggers[ index ], minz, maxz ) ) - { - return 1; - } - index++; - } - index = 0; - while ( index < hurttriggers.size ) - { - if ( self.visuals[ 0 ] istouchingswept( hurttriggers[ index ], minz, maxz ) ) - { - return 1; - } - index++; - } - index = 0; - while ( index < elevators.size ) - { -/# - assert( isDefined( elevators[ index ].occupy_volume ) ); -#/ - if ( self.visuals[ 0 ] istouchingswept( elevators[ index ].occupy_volume, minz, maxz ) ) - { - return 1; - } - index++; - } - return 0; -} - -pickuptimeout( minz, maxz ) -{ - self endon( "pickup_object" ); - self endon( "stop_pickup_timeout" ); - wait 0,05; - if ( self shouldbereset( minz, maxz ) ) - { - self returnhome(); - return; - } - if ( isDefined( self.autoresettime ) ) - { - wait self.autoresettime; - if ( !isDefined( self.carrier ) ) - { - self returnhome(); - } - } -} - -takeobject( object ) -{ - if ( isDefined( self.carryicon ) ) - { - self.carryicon destroyelem(); - } - if ( isDefined( object.visiblecarriermodel ) ) - { - self maps/mp/gametypes_zm/_weapons::detach_all_weapons(); - } - self.carryobject = undefined; - if ( !isalive( self ) ) - { - return; - } - self notify( "drop_object" ); - self.disallowvehicleusage = 0; - if ( object.triggertype == "proximity" ) - { - self thread pickupobjectdelay( object.trigger.origin ); - } - if ( isDefined( object.visiblecarriermodel ) ) - { - self maps/mp/gametypes_zm/_weapons::forcestowedweaponupdate(); - } - if ( !object.allowweapons ) - { - self _enableweapon(); - } -} - -trackcarrier() -{ - level endon( "game_ended" ); - self endon( "disconnect" ); - self endon( "death" ); - self endon( "drop_object" ); - while ( isDefined( self.carryobject ) && isalive( self ) ) - { - if ( self isonground() ) - { - trace = bullettrace( self.origin + vectorScale( ( 0, 0, 1 ), 20 ), self.origin - vectorScale( ( 0, 0, 1 ), 20 ), 0, undefined ); - if ( trace[ "fraction" ] < 1 ) - { - self.carryobject.safeorigin = trace[ "position" ]; - } - } - wait 0,05; - } -} - -manualdropthink() -{ - level endon( "game_ended" ); - self endon( "disconnect" ); - self endon( "death" ); - self endon( "drop_object" ); - for ( ;; ) - { - while ( !self attackbuttonpressed() && !self fragbuttonpressed() || self secondaryoffhandbuttonpressed() && self meleebuttonpressed() ) - { - wait 0,05; - } - while ( !self attackbuttonpressed() && !self fragbuttonpressed() && !self secondaryoffhandbuttonpressed() && !self meleebuttonpressed() ) - { - wait 0,05; - } - if ( isDefined( self.carryobject ) && !self usebuttonpressed() ) - { - self.carryobject thread setdropped(); - } - } -} - -createuseobject( ownerteam, trigger, visuals, offset, objectivename ) -{ - useobject = spawnstruct(); - useobject.type = "useObject"; - useobject.curorigin = trigger.origin; - useobject.ownerteam = ownerteam; - useobject.entnum = trigger getentitynumber(); - useobject.keyobject = undefined; - if ( issubstr( trigger.classname, "use" ) ) - { - useobject.triggertype = "use"; - } - else - { - useobject.triggertype = "proximity"; - } - useobject.trigger = trigger; - index = 0; - while ( index < visuals.size ) - { - visuals[ index ].baseorigin = visuals[ index ].origin; - visuals[ index ].baseangles = visuals[ index ].angles; - index++; - } - useobject.visuals = visuals; - if ( !isDefined( offset ) ) - { - offset = ( 0, 0, 1 ); - } - useobject.offset3d = offset; - useobject.newstyle = 0; - if ( isDefined( objectivename ) ) - { - useobject.newstyle = 1; - } - else - { - objectivename = &""; - } - useobject.compassicons = []; - useobject.objid = []; - if ( !useobject.newstyle ) - { - _a1138 = level.teams; - _k1138 = getFirstArrayKey( _a1138 ); - while ( isDefined( _k1138 ) ) - { - team = _a1138[ _k1138 ]; - useobject.objid[ team ] = getnextobjid(); - _k1138 = getNextArrayKey( _a1138, _k1138 ); - } - if ( level.teambased ) - { - _a1145 = level.teams; - _k1145 = getFirstArrayKey( _a1145 ); - while ( isDefined( _k1145 ) ) - { - team = _a1145[ _k1145 ]; - objective_add( useobject.objid[ team ], "invisible", useobject.curorigin ); - objective_team( useobject.objid[ team ], team ); - _k1145 = getNextArrayKey( _a1145, _k1145 ); - } - } - else objective_add( useobject.objid[ level.nonteambasedteam ], "invisible", useobject.curorigin ); - } - useobject.objectiveid = getnextobjid(); - objective_add( useobject.objectiveid, "invisible", useobject.curorigin, objectivename ); - useobject.interactteam = "none"; - useobject.worldicons = []; - useobject.visibleteam = "none"; - useobject.worldiswaypoint = []; - useobject.onuse = undefined; - useobject.oncantuse = undefined; - useobject.usetext = "default"; - useobject.usetime = 10000; - useobject clearprogress(); - useobject.decayprogress = 0; - if ( useobject.triggertype == "proximity" ) - { - useobject.numtouching[ "neutral" ] = 0; - useobject.numtouching[ "none" ] = 0; - useobject.touchlist[ "neutral" ] = []; - useobject.touchlist[ "none" ] = []; - _a1208 = level.teams; - _k1208 = getFirstArrayKey( _a1208 ); - while ( isDefined( _k1208 ) ) - { - team = _a1208[ _k1208 ]; - useobject.numtouching[ team ] = 0; - useobject.touchlist[ team ] = []; - _k1208 = getNextArrayKey( _a1208, _k1208 ); - } - useobject.userate = 0; - useobject.claimteam = "none"; - useobject.claimplayer = undefined; - useobject.lastclaimteam = "none"; - useobject.lastclaimtime = 0; - useobject.claimgraceperiod = 1; - useobject.mustmaintainclaim = 0; - useobject.cancontestclaim = 0; - useobject thread useobjectproxthink(); - } - else - { - useobject.userate = 1; - useobject thread useobjectusethink(); - } - return useobject; -} - -setkeyobject( object ) -{ - if ( !isDefined( object ) ) - { - self.keyobject = undefined; - return; - } - if ( !isDefined( self.keyobject ) ) - { - self.keyobject = []; - } - self.keyobject[ self.keyobject.size ] = object; -} - -haskeyobject( use ) -{ - x = 0; - while ( x < use.keyobject.size ) - { - if ( isDefined( self.carryobject ) && isDefined( use.keyobject[ x ] ) && self.carryobject == use.keyobject[ x ] ) - { - return 1; - } - x++; - } - return 0; -} - -useobjectusethink() -{ - level endon( "game_ended" ); - self.trigger endon( "destroyed" ); - while ( 1 ) - { - self.trigger waittill( "trigger", player ); - while ( !isalive( player ) ) - { - continue; - } - while ( !self caninteractwith( player ) ) - { - continue; - } - while ( !player isonground() ) - { - continue; - } - while ( player isinvehicle() ) - { - continue; - } - while ( isDefined( self.keyobject ) || !isDefined( player.carryobject ) && !player haskeyobject( self ) ) - { - if ( isDefined( self.oncantuse ) ) - { - self [[ self.oncantuse ]]( player ); - } - } - result = 1; - if ( self.usetime > 0 ) - { - if ( isDefined( self.onbeginuse ) ) - { - self [[ self.onbeginuse ]]( player ); - } - team = player.pers[ "team" ]; - result = self useholdthink( player ); - if ( isDefined( self.onenduse ) ) - { - self [[ self.onenduse ]]( team, player, result ); - } - } - while ( !result ) - { - continue; - } - if ( isDefined( self.onuse ) ) - { - self [[ self.onuse ]]( player ); - } - } -} - -getearliestclaimplayer() -{ -/# - assert( self.claimteam != "none" ); -#/ - team = self.claimteam; - earliestplayer = self.claimplayer; - while ( self.touchlist[ team ].size > 0 ) - { - earliesttime = undefined; - players = getarraykeys( self.touchlist[ team ] ); - index = 0; - while ( index < players.size ) - { - touchdata = self.touchlist[ team ][ players[ index ] ]; - if ( !isDefined( earliesttime ) || touchdata.starttime < earliesttime ) - { - earliestplayer = touchdata.player; - earliesttime = touchdata.starttime; - } - index++; - } - } - return earliestplayer; -} - -useobjectproxthink() -{ - level endon( "game_ended" ); - self.trigger endon( "destroyed" ); - self thread proxtriggerthink(); - while ( 1 ) - { - if ( self.usetime && self.curprogress >= self.usetime ) - { - self clearprogress(); - creditplayer = getearliestclaimplayer(); - if ( isDefined( self.onenduse ) ) - { - self [[ self.onenduse ]]( self getclaimteam(), creditplayer, isDefined( creditplayer ) ); - } - if ( isDefined( creditplayer ) && isDefined( self.onuse ) ) - { - self [[ self.onuse ]]( creditplayer ); - } - self setclaimteam( "none" ); - self.claimplayer = undefined; - } - if ( self.claimteam != "none" ) - { - if ( self useobjectlockedforteam( self.claimteam ) ) - { - if ( isDefined( self.onenduse ) ) - { - self [[ self.onenduse ]]( self getclaimteam(), self.claimplayer, 0 ); - } - self setclaimteam( "none" ); - self.claimplayer = undefined; - self clearprogress(); - } - else if ( self.usetime ) - { - if ( self.decayprogress && !self.numtouching[ self.claimteam ] ) - { - if ( isDefined( self.claimplayer ) ) - { - if ( isDefined( self.onenduse ) ) - { - self [[ self.onenduse ]]( self getclaimteam(), self.claimplayer, 0 ); - } - self.claimplayer = undefined; - } - decayscale = 0; - if ( self.decaytime ) - { - decayscale = self.usetime / self.decaytime; - } - self.curprogress -= 50 * self.userate * decayscale; - if ( self.curprogress <= 0 ) - { - self clearprogress(); - } - self updatecurrentprogress(); - if ( isDefined( self.onuseupdate ) ) - { - self [[ self.onuseupdate ]]( self getclaimteam(), self.curprogress / self.usetime, ( 50 * self.userate * decayscale ) / self.usetime ); - } - if ( self.curprogress == 0 ) - { - self setclaimteam( "none" ); - } - } - else - { - if ( !self.numtouching[ self.claimteam ] ) - { - if ( isDefined( self.onenduse ) ) - { - self [[ self.onenduse ]]( self getclaimteam(), self.claimplayer, 0 ); - } - self setclaimteam( "none" ); - self.claimplayer = undefined; - break; - } - else - { - self.curprogress += 50 * self.userate; - self updatecurrentprogress(); - if ( isDefined( self.onuseupdate ) ) - { - self [[ self.onuseupdate ]]( self getclaimteam(), self.curprogress / self.usetime, ( 50 * self.userate ) / self.usetime ); - } - } - } - } - else if ( !self.mustmaintainclaim ) - { - if ( isDefined( self.onuse ) ) - { - self [[ self.onuse ]]( self.claimplayer ); - } - if ( !self.mustmaintainclaim ) - { - self setclaimteam( "none" ); - self.claimplayer = undefined; - } - } - else if ( !self.numtouching[ self.claimteam ] ) - { - if ( isDefined( self.onunoccupied ) ) - { - self [[ self.onunoccupied ]](); - } - self setclaimteam( "none" ); - self.claimplayer = undefined; - } - else - { - if ( self.cancontestclaim ) - { - numother = getnumtouchingexceptteam( self.claimteam ); - if ( numother > 0 ) - { - if ( isDefined( self.oncontested ) ) - { - self [[ self.oncontested ]](); - } - self setclaimteam( "none" ); - self.claimplayer = undefined; - } - } - } - } - else - { - if ( self.curprogress > 0 && ( getTime() - self.lastclaimtime ) > ( self.claimgraceperiod * 1000 ) ) - { - self clearprogress(); - } - } - wait 0,05; - maps/mp/gametypes_zm/_hostmigration::waittillhostmigrationdone(); - } -} - -useobjectlockedforteam( team ) -{ - if ( isDefined( self.teamlock ) && isDefined( level.teams[ team ] ) ) - { - return self.teamlock[ team ]; - } - return 0; -} - -canclaim( player ) -{ - if ( self.cancontestclaim ) - { - numother = getnumtouchingexceptteam( player.pers[ "team" ] ); - if ( numother != 0 ) - { - return 0; - } - } - if ( !isDefined( self.keyobject ) || isDefined( player.carryobject ) && player haskeyobject( self ) ) - { - return 1; - } - return 0; -} - -proxtriggerthink() -{ - level endon( "game_ended" ); - self.trigger endon( "destroyed" ); - entitynumber = self.entnum; - while ( 1 ) - { - self.trigger waittill( "trigger", player ); - if ( !isalive( player ) || self useobjectlockedforteam( player.pers[ "team" ] ) ) - { - continue; - } - while ( player isinvehicle() ) - { - continue; - } - while ( player isweaponviewonlylinked() ) - { - continue; - } - if ( self caninteractwith( player ) && self.claimteam == "none" ) - { - if ( self canclaim( player ) ) - { - setclaimteam( player.pers[ "team" ] ); - self.claimplayer = player; - if ( self.usetime && isDefined( self.onbeginuse ) ) - { - self [[ self.onbeginuse ]]( self.claimplayer ); - } - break; - } - else - { - if ( isDefined( self.oncantuse ) ) - { - self [[ self.oncantuse ]]( player ); - } - } - } - if ( isalive( player ) && !isDefined( player.touchtriggers[ entitynumber ] ) ) - { - player thread triggertouchthink( self ); - } - } -} - -clearprogress() -{ - self.curprogress = 0; - self updatecurrentprogress(); - if ( isDefined( self.onuseclear ) ) - { - self [[ self.onuseclear ]](); - } -} - -setclaimteam( newteam ) -{ -/# - assert( newteam != self.claimteam ); -#/ - if ( self.claimteam == "none" && ( getTime() - self.lastclaimtime ) > ( self.claimgraceperiod * 1000 ) ) - { - self clearprogress(); - } - else - { - if ( newteam != "none" && newteam != self.lastclaimteam ) - { - self clearprogress(); - } - } - self.lastclaimteam = self.claimteam; - self.lastclaimtime = getTime(); - self.claimteam = newteam; - self updateuserate(); -} - -getclaimteam() -{ - return self.claimteam; -} - -continuetriggertouchthink( team, object ) -{ - if ( !isalive( self ) ) - { - return 0; - } - if ( self useobjectlockedforteam( team ) ) - { - return 0; - } - if ( self isinvehicle() ) - { - return 0; - } - if ( !self istouching( object.trigger ) ) - { - return 0; - } - return 1; -} - -triggertouchthink( object ) -{ - team = self.pers[ "team" ]; - score = 1; - object.numtouching[ team ] += score; - if ( object.usetime ) - { - object updateuserate(); - } - touchname = "player" + self.clientid; - struct = spawnstruct(); - struct.player = self; - struct.starttime = getTime(); - object.touchlist[ team ][ touchname ] = struct; - objective_setplayerusing( object.objectiveid, self ); - self.touchtriggers[ object.entnum ] = object.trigger; - if ( isDefined( object.ontouchuse ) ) - { - object [[ object.ontouchuse ]]( self ); - } - while ( self continuetriggertouchthink( team, object ) ) - { - if ( object.usetime ) - { - self updateproxbar( object, 0 ); - } - wait 0,05; - } - if ( isDefined( self ) ) - { - if ( object.usetime ) - { - self updateproxbar( object, 1 ); - } - objective_clearplayerusing( object.objectiveid, self ); - } - if ( level.gameended ) - { - return; - } - object.numtouching[ team ] -= score; - if ( object.numtouching[ team ] < 1 ) - { - object.numtouching[ team ] = 0; - } - if ( object.usetime ) - { - if ( object.numtouching[ team ] <= 0 && object.curprogress >= object.usetime ) - { - object.curprogress = object.usetime - 1; - object updatecurrentprogress(); - } - } - if ( isDefined( self ) && isDefined( object.onendtouchuse ) ) - { - object [[ object.onendtouchuse ]]( self ); - } - object updateuserate(); -} - -updateproxbar( object, forceremove ) -{ - if ( object.newstyle ) - { - return; - } - if ( !forceremove && object.decayprogress ) - { - if ( !object caninteractwith( self ) ) - { - if ( isDefined( self.proxbar ) ) - { - self.proxbar hideelem(); - } - if ( isDefined( self.proxbartext ) ) - { - self.proxbartext hideelem(); - } - return; - } - else if ( !isDefined( self.proxbar ) ) - { - self.proxbar = createprimaryprogressbar(); - self.proxbar.lastuserate = -1; - } - if ( self.pers[ "team" ] == object.claimteam ) - { - if ( self.proxbar.bar.color != ( 0, 0, 1 ) ) - { - self.proxbar.bar.color = ( 0, 0, 1 ); - self.proxbar.lastuserate = -1; - } - } - else - { - if ( self.proxbar.bar.color != ( 0, 0, 1 ) ) - { - self.proxbar.bar.color = ( 0, 0, 1 ); - self.proxbar.lastuserate = -1; - } - } - } - else - { - if ( !forceremove || !object caninteractwith( self ) && self.pers[ "team" ] != object.claimteam ) - { - if ( isDefined( self.proxbar ) ) - { - self.proxbar hideelem(); - } - if ( isDefined( self.proxbartext ) ) - { - self.proxbartext hideelem(); - } - return; - } - } - if ( !isDefined( self.proxbar ) ) - { - self.proxbar = self createprimaryprogressbar(); - self.proxbar.lastuserate = -1; - self.proxbar.lasthostmigrationstate = 0; - } - if ( self.proxbar.hidden ) - { - self.proxbar showelem(); - self.proxbar.lastuserate = -1; - self.proxbar.lasthostmigrationstate = 0; - } - if ( !isDefined( self.proxbartext ) ) - { - self.proxbartext = self createprimaryprogressbartext(); - self.proxbartext settext( object.usetext ); - } - if ( self.proxbartext.hidden ) - { - self.proxbartext showelem(); - self.proxbartext settext( object.usetext ); - } - if ( self.proxbar.lastuserate != object.userate || self.proxbar.lasthostmigrationstate != isDefined( level.hostmigrationtimer ) ) - { - if ( object.curprogress > object.usetime ) - { - object.curprogress = object.usetime; - } - if ( object.decayprogress && self.pers[ "team" ] != object.claimteam ) - { - if ( object.curprogress > 0 ) - { - progress = object.curprogress / object.usetime; - rate = ( 1000 / object.usetime ) * ( object.userate * -1 ); - if ( isDefined( level.hostmigrationtimer ) ) - { - rate = 0; - } - self.proxbar updatebar( progress, rate ); - } - } - else - { - progress = object.curprogress / object.usetime; - rate = ( 1000 / object.usetime ) * object.userate; - if ( isDefined( level.hostmigrationtimer ) ) - { - rate = 0; - } - self.proxbar updatebar( progress, rate ); - } - self.proxbar.lasthostmigrationstate = isDefined( level.hostmigrationtimer ); - self.proxbar.lastuserate = object.userate; - } -} - -getnumtouchingexceptteam( ignoreteam ) -{ - numtouching = 0; - _a1855 = level.teams; - _k1855 = getFirstArrayKey( _a1855 ); - while ( isDefined( _k1855 ) ) - { - team = _a1855[ _k1855 ]; - if ( ignoreteam == team ) - { - } - else - { - numtouching += self.numtouching[ team ]; - } - _k1855 = getNextArrayKey( _a1855, _k1855 ); - } - return numtouching; -} - -updateuserate() -{ - numclaimants = self.numtouching[ self.claimteam ]; - numother = 0; - numother = getnumtouchingexceptteam( self.claimteam ); - self.userate = 0; - if ( self.decayprogress ) - { - if ( numclaimants && !numother ) - { - self.userate = numclaimants; - } - else - { - if ( !numclaimants && numother ) - { - self.userate = numother; - } - else - { - if ( !numclaimants && !numother ) - { - self.userate = 0; - } - } - } - } - else - { - if ( numclaimants && !numother ) - { - self.userate = numclaimants; - } - } - if ( isDefined( self.onupdateuserate ) ) - { - self [[ self.onupdateuserate ]](); - } -} - -useholdthink( player ) -{ - player notify( "use_hold" ); - if ( isDefined( self.dontlinkplayertotrigger ) && !self.dontlinkplayertotrigger ) - { - player playerlinkto( self.trigger ); - player playerlinkedoffsetenable(); - } - player clientclaimtrigger( self.trigger ); - player.claimtrigger = self.trigger; - useweapon = self.useweapon; - lastweapon = player getcurrentweapon(); - if ( isDefined( useweapon ) ) - { -/# - assert( isDefined( lastweapon ) ); -#/ - if ( lastweapon == useweapon ) - { -/# - assert( isDefined( player.lastnonuseweapon ) ); -#/ - lastweapon = player.lastnonuseweapon; - } -/# - assert( lastweapon != useweapon ); -#/ - player.lastnonuseweapon = lastweapon; - player giveweapon( useweapon ); - player setweaponammostock( useweapon, 0 ); - player setweaponammoclip( useweapon, 0 ); - player switchtoweapon( useweapon ); - } - else - { - player _disableweapon(); - } - self clearprogress(); - self.inuse = 1; - self.userate = 0; - objective_setplayerusing( self.objectiveid, player ); - player thread personalusebar( self ); - result = useholdthinkloop( player, lastweapon ); - if ( isDefined( player ) ) - { - objective_clearplayerusing( self.objectiveid, player ); - self clearprogress(); - if ( isDefined( player.attachedusemodel ) ) - { - player detach( player.attachedusemodel, "tag_inhand" ); - player.attachedusemodel = undefined; - } - player notify( "done_using" ); - } - if ( isDefined( useweapon ) && isDefined( player ) ) - { - player thread takeuseweapon( useweapon ); - } - if ( isDefined( result ) && result ) - { - return 1; - } - if ( isDefined( player ) ) - { - player.claimtrigger = undefined; - if ( isDefined( useweapon ) ) - { - ammo = player getweaponammoclip( lastweapon ); - if ( lastweapon != "none" && isweaponequipment( lastweapon ) && player getweaponammoclip( lastweapon ) != 0 ) - { - player switchtoweapon( lastweapon ); - } - else - { - player takeweapon( useweapon ); - } - } - else - { - if ( isalive( player ) ) - { - player _enableweapon(); - } - } - if ( isDefined( self.dontlinkplayertotrigger ) && !self.dontlinkplayertotrigger ) - { - player unlink(); - } - if ( !isalive( player ) ) - { - player.killedinuse = 1; - } - } - self.inuse = 0; - if ( self.trigger.classname == "trigger_radius_use" ) - { - player clientreleasetrigger( self.trigger ); - } - else - { - self.trigger releaseclaimedtrigger(); - } - return 0; -} - -takeuseweapon( useweapon ) -{ - self endon( "use_hold" ); - self endon( "death" ); - self endon( "disconnect" ); - level endon( "game_ended" ); - while ( self getcurrentweapon() == useweapon && !self.throwinggrenade ) - { - wait 0,05; - } - self takeweapon( useweapon ); -} - -continueholdthinkloop( player, waitforweapon, timedout, usetime ) -{ - maxwaittime = 1,5; - if ( !isalive( player ) ) - { - return 0; - } - if ( isDefined( player.laststand ) && player.laststand ) - { - return 0; - } - if ( self.curprogress >= usetime ) - { - return 0; - } - if ( !player usebuttonpressed() ) - { - return 0; - } - if ( player.throwinggrenade ) - { - return 0; - } - if ( player meleebuttonpressed() ) - { - return 0; - } - if ( player isinvehicle() ) - { - return 0; - } - if ( player isremotecontrolling() ) - { - return 0; - } - if ( player isweaponviewonlylinked() ) - { - return 0; - } - if ( !player istouching( self.trigger ) ) - { - return 0; - } - if ( !self.userate && !waitforweapon ) - { - return 0; - } - if ( waitforweapon && timedout > maxwaittime ) - { - return 0; - } - return 1; -} - -updatecurrentprogress() -{ - if ( self.usetime ) - { - progress = float( self.curprogress ) / self.usetime; - objective_setprogress( self.objectiveid, clamp( progress, 0, 1 ) ); - } -} - -useholdthinkloop( player, lastweapon ) -{ - level endon( "game_ended" ); - self endon( "disabled" ); - useweapon = self.useweapon; - waitforweapon = 1; - timedout = 0; - usetime = self.usetime; - while ( self continueholdthinkloop( player, waitforweapon, timedout, usetime ) ) - { - timedout += 0,05; - if ( !isDefined( useweapon ) || player getcurrentweapon() == useweapon ) - { - self.curprogress += 50 * self.userate; - self updatecurrentprogress(); - self.userate = 1; - waitforweapon = 0; - } - else - { - self.userate = 0; - } - if ( self.curprogress >= usetime ) - { - self.inuse = 0; - player clientreleasetrigger( self.trigger ); - player.claimtrigger = undefined; - if ( isDefined( useweapon ) ) - { - player setweaponammostock( useweapon, 1 ); - player setweaponammoclip( useweapon, 1 ); - if ( lastweapon != "none" && isweaponequipment( lastweapon ) && player getweaponammoclip( lastweapon ) != 0 ) - { - player switchtoweapon( lastweapon ); - } - else - { - player takeweapon( useweapon ); - } - } - else - { - player _enableweapon(); - } - if ( isDefined( self.dontlinkplayertotrigger ) && !self.dontlinkplayertotrigger ) - { - player unlink(); - } - wait 0,05; - return isalive( player ); - } - wait 0,05; - maps/mp/gametypes_zm/_hostmigration::waittillhostmigrationdone(); - } - return 0; -} - -personalusebar( object ) -{ - self endon( "disconnect" ); - if ( object.newstyle ) - { - return; - } - if ( isDefined( self.usebar ) ) - { - return; - } - self.usebar = self createprimaryprogressbar(); - self.usebartext = self createprimaryprogressbartext(); - self.usebartext settext( object.usetext ); - usetime = object.usetime; - lastrate = -1; - lasthostmigrationstate = isDefined( level.hostmigrationtimer ); - while ( isalive( self ) && object.inuse && !level.gameended ) - { - if ( lastrate != object.userate || lasthostmigrationstate != isDefined( level.hostmigrationtimer ) ) - { - if ( object.curprogress > usetime ) - { - object.curprogress = usetime; - } - if ( object.decayprogress && self.pers[ "team" ] != object.claimteam ) - { - if ( object.curprogress > 0 ) - { - progress = object.curprogress / usetime; - rate = ( 1000 / usetime ) * ( object.userate * -1 ); - if ( isDefined( level.hostmigrationtimer ) ) - { - rate = 0; - } - self.proxbar updatebar( progress, rate ); - } - } - else - { - progress = object.curprogress / usetime; - rate = ( 1000 / usetime ) * object.userate; - if ( isDefined( level.hostmigrationtimer ) ) - { - rate = 0; - } - self.usebar updatebar( progress, rate ); - } - if ( !object.userate ) - { - self.usebar hideelem(); - self.usebartext hideelem(); - } - else - { - self.usebar showelem(); - self.usebartext showelem(); - } - } - lastrate = object.userate; - lasthostmigrationstate = isDefined( level.hostmigrationtimer ); - wait 0,05; - } - self.usebar destroyelem(); - self.usebartext destroyelem(); -} - -updatetrigger() -{ - if ( self.triggertype != "use" ) - { - return; - } - if ( self.interactteam == "none" ) - { - self.trigger.origin -= vectorScale( ( 0, 0, 1 ), 50000 ); - } - else if ( self.interactteam == "any" || !level.teambased ) - { - self.trigger.origin = self.curorigin; - self.trigger setteamfortrigger( "none" ); - } - else - { - if ( self.interactteam == "friendly" ) - { - self.trigger.origin = self.curorigin; - if ( isDefined( level.teams[ self.ownerteam ] ) ) - { - self.trigger setteamfortrigger( self.ownerteam ); - } - else - { - self.trigger.origin -= vectorScale( ( 0, 0, 1 ), 50000 ); - } - return; - } - else - { - if ( self.interactteam == "enemy" ) - { - self.trigger.origin = self.curorigin; - self.trigger setexcludeteamfortrigger( self.ownerteam ); - } - } - } -} - -updateobjective() -{ - if ( !self.newstyle ) - { - return; - } - objective_team( self.objectiveid, self.ownerteam ); - if ( self.visibleteam == "any" ) - { - objective_state( self.objectiveid, "active" ); - objective_visibleteams( self.objectiveid, level.spawnsystem.ispawn_teammask[ "all" ] ); - } - else if ( self.visibleteam == "friendly" ) - { - objective_state( self.objectiveid, "active" ); - objective_visibleteams( self.objectiveid, level.spawnsystem.ispawn_teammask[ self.ownerteam ] ); - } - else if ( self.visibleteam == "enemy" ) - { - objective_state( self.objectiveid, "active" ); - objective_visibleteams( self.objectiveid, level.spawnsystem.ispawn_teammask[ "all" ] & level.spawnsystem.ispawn_teammask[ self.ownerteam ] ); - } - else - { - objective_state( self.objectiveid, "invisible" ); - objective_visibleteams( self.objectiveid, 0 ); - } - if ( self.type == "carryObject" ) - { - if ( isalive( self.carrier ) ) - { - objective_onentity( self.objectiveid, self.carrier ); - return; - } - else - { - objective_clearentity( self.objectiveid ); - } - } -} - -updateworldicons() -{ - if ( self.visibleteam == "any" ) - { - updateworldicon( "friendly", 1 ); - updateworldicon( "enemy", 1 ); - } - else if ( self.visibleteam == "friendly" ) - { - updateworldicon( "friendly", 1 ); - updateworldicon( "enemy", 0 ); - } - else if ( self.visibleteam == "enemy" ) - { - updateworldicon( "friendly", 0 ); - updateworldicon( "enemy", 1 ); - } - else - { - updateworldicon( "friendly", 0 ); - updateworldicon( "enemy", 0 ); - } -} - -updateworldicon( relativeteam, showicon ) -{ -} - -updatecompassicons() -{ - if ( self.visibleteam == "any" ) - { - updatecompassicon( "friendly", 1 ); - updatecompassicon( "enemy", 1 ); - } - else if ( self.visibleteam == "friendly" ) - { - updatecompassicon( "friendly", 1 ); - updatecompassicon( "enemy", 0 ); - } - else if ( self.visibleteam == "enemy" ) - { - updatecompassicon( "friendly", 0 ); - updatecompassicon( "enemy", 1 ); - } - else - { - updatecompassicon( "friendly", 0 ); - updatecompassicon( "enemy", 0 ); - } -} - -updatecompassicon( relativeteam, showicon ) -{ - if ( self.newstyle ) - { - return; - } - updateteams = getupdateteams( relativeteam ); - index = 0; - while ( index < updateteams.size ) - { - showiconthisteam = showicon; - if ( !showiconthisteam && shouldshowcompassduetoradar( updateteams[ index ] ) ) - { - showiconthisteam = 1; - } - if ( level.teambased ) - { - objid = self.objid[ updateteams[ index ] ]; - } - else - { - objid = self.objid[ level.nonteambasedteam ]; - } - if ( !isDefined( self.compassicons[ relativeteam ] ) || !showiconthisteam ) - { - objective_state( objid, "invisible" ); - index++; - continue; - } - else - { - objective_icon( objid, self.compassicons[ relativeteam ] ); - objective_state( objid, "active" ); - if ( self.type == "carryObject" ) - { - if ( isalive( self.carrier ) && !shouldpingobject( relativeteam ) ) - { - objective_onentity( objid, self.carrier ); - index++; - continue; - } - else - { - objective_position( objid, self.curorigin ); - } - } - } - index++; - } -} - -shouldpingobject( relativeteam ) -{ - if ( relativeteam == "friendly" && self.objidpingfriendly ) - { - return 1; - } - else - { - if ( relativeteam == "enemy" && self.objidpingenemy ) - { - return 1; - } - } - return 0; -} - -getupdateteams( relativeteam ) -{ - updateteams = []; - if ( level.teambased ) - { - if ( relativeteam == "friendly" ) - { - _a2479 = level.teams; - _k2479 = getFirstArrayKey( _a2479 ); - while ( isDefined( _k2479 ) ) - { - team = _a2479[ _k2479 ]; - if ( self isfriendlyteam( team ) ) - { - updateteams[ updateteams.size ] = team; - } - _k2479 = getNextArrayKey( _a2479, _k2479 ); - } - } - else while ( relativeteam == "enemy" ) - { - _a2487 = level.teams; - _k2487 = getFirstArrayKey( _a2487 ); - while ( isDefined( _k2487 ) ) - { - team = _a2487[ _k2487 ]; - if ( !self isfriendlyteam( team ) ) - { - updateteams[ updateteams.size ] = team; - } - _k2487 = getNextArrayKey( _a2487, _k2487 ); - } - } - } - else if ( relativeteam == "friendly" ) - { - updateteams[ updateteams.size ] = level.nonteambasedteam; - } - else - { - updateteams[ updateteams.size ] = "axis"; - } - return updateteams; -} - -shouldshowcompassduetoradar( team ) -{ - showcompass = 0; - return showcompass; -} - -updatevisibilityaccordingtoradar() -{ - self endon( "death" ); - self endon( "carrier_cleared" ); - while ( 1 ) - { - level waittill( "radar_status_change" ); - self updatecompassicons(); - } -} - -setownerteam( team ) -{ - self.ownerteam = team; - self updatetrigger(); - self updatecompassicons(); - self updateworldicons(); - self updateobjective(); -} - -getownerteam() -{ - return self.ownerteam; -} - -setdecaytime( time ) -{ - self.decaytime = int( time * 1000 ); -} - -setusetime( time ) -{ - self.usetime = int( time * 1000 ); -} - -setusetext( text ) -{ - self.usetext = text; -} - -setusehinttext( text ) -{ - self.trigger sethintstring( text ); -} - -allowcarry( relativeteam ) -{ - self.interactteam = relativeteam; -} - -allowuse( relativeteam ) -{ - self.interactteam = relativeteam; - updatetrigger(); -} - -setvisibleteam( relativeteam ) -{ - self.visibleteam = relativeteam; - if ( !maps/mp/gametypes_zm/_tweakables::gettweakablevalue( "hud", "showobjicons" ) ) - { - self.visibleteam = "none"; - } - updatecompassicons(); - updateworldicons(); - updateobjective(); -} - -setmodelvisibility( visibility ) -{ - if ( visibility ) - { - index = 0; - while ( index < self.visuals.size ) - { - self.visuals[ index ] show(); - if ( self.visuals[ index ].classname == "script_brushmodel" || self.visuals[ index ].classname == "script_model" ) - { - self.visuals[ index ] thread makesolid(); - } - index++; - } - } - else index = 0; - while ( index < self.visuals.size ) - { - self.visuals[ index ] hide(); - if ( self.visuals[ index ].classname == "script_brushmodel" || self.visuals[ index ].classname == "script_model" ) - { - self.visuals[ index ] notify( "changing_solidness" ); - self.visuals[ index ] notsolid(); - } - index++; - } -} - -makesolid() -{ - self endon( "death" ); - self notify( "changing_solidness" ); - self endon( "changing_solidness" ); - while ( 1 ) - { - i = 0; - while ( i < level.players.size ) - { - if ( level.players[ i ] istouching( self ) ) - { - break; - } - else - { - i++; - } - } - if ( i == level.players.size ) - { - self solid(); - return; - } - else - { - wait 0,05; - } - } -} - -setcarriervisible( relativeteam ) -{ - self.carriervisible = relativeteam; -} - -setcanuse( relativeteam ) -{ - self.useteam = relativeteam; -} - -set2dicon( relativeteam, shader ) -{ - self.compassicons[ relativeteam ] = shader; - updatecompassicons(); -} - -set3dicon( relativeteam, shader ) -{ - self.worldicons[ relativeteam ] = shader; - updateworldicons(); -} - -set3duseicon( relativeteam, shader ) -{ - self.worlduseicons[ relativeteam ] = shader; -} - -set3diswaypoint( relativeteam, waypoint ) -{ - self.worldiswaypoint[ relativeteam ] = waypoint; -} - -setcarryicon( shader ) -{ - self.carryicon = shader; -} - -setvisiblecarriermodel( visiblemodel ) -{ - self.visiblecarriermodel = visiblemodel; -} - -getvisiblecarriermodel() -{ - return self.visiblecarriermodel; -} - -destroyobject( deletetrigger, forcehide ) -{ - if ( !isDefined( forcehide ) ) - { - forcehide = 1; - } - self disableobject( forcehide ); - _a2695 = self.visuals; - _k2695 = getFirstArrayKey( _a2695 ); - while ( isDefined( _k2695 ) ) - { - visual = _a2695[ _k2695 ]; - visual hide(); - visual delete(); - _k2695 = getNextArrayKey( _a2695, _k2695 ); - } - self.trigger notify( "destroyed" ); - if ( isDefined( deletetrigger ) && deletetrigger ) - { - self.trigger delete(); - } - else - { - self.trigger triggeron(); - } -} - -disableobject( forcehide ) -{ - self notify( "disabled" ); - while ( self.type == "carryObject" || isDefined( forcehide ) && forcehide ) - { - if ( isDefined( self.carrier ) ) - { - self.carrier takeobject( self ); - } - index = 0; - while ( index < self.visuals.size ) - { - self.visuals[ index ] hide(); - index++; - } - } - self.trigger triggeroff(); - self setvisibleteam( "none" ); -} - -enableobject( forceshow ) -{ - while ( self.type == "carryObject" || isDefined( forceshow ) && forceshow ) - { - index = 0; - while ( index < self.visuals.size ) - { - self.visuals[ index ] show(); - index++; - } - } - self.trigger triggeron(); - self setvisibleteam( "any" ); -} - -getrelativeteam( team ) -{ - if ( self.ownerteam == "any" ) - { - return "friendly"; - } - if ( team == self.ownerteam ) - { - return "friendly"; - } - else - { - if ( team == getenemyteam( self.ownerteam ) ) - { - return "enemy"; - } - else - { - return "neutral"; - } - } -} - -isfriendlyteam( team ) -{ - if ( !level.teambased ) - { - return 1; - } - if ( self.ownerteam == "any" ) - { - return 1; - } - if ( self.ownerteam == team ) - { - return 1; - } - return 0; -} - -caninteractwith( player ) -{ - team = player.pers[ "team" ]; - switch( self.interactteam ) - { - case "none": - return 0; - case "any": - return 1; - case "friendly": - if ( level.teambased ) - { - if ( team == self.ownerteam ) - { - return 1; - } - else - { - return 0; - } - } - else - { - if ( player == self.ownerteam ) - { - return 1; - } - else - { - return 0; - } - } - case "enemy": - if ( level.teambased ) - { - if ( team != self.ownerteam ) - { - return 1; - } - else - { - if ( isDefined( self.decayprogress ) && self.decayprogress && self.curprogress > 0 ) - { - return 1; - } - else - { - return 0; - } - } - } - else - { - if ( player != self.ownerteam ) - { - return 1; - } - else - { - return 0; - } - } - default: -/# - assert( 0, "invalid interactTeam" ); -#/ - return 0; - } -} - -isteam( team ) -{ - if ( team == "neutral" ) - { - return 1; - } - if ( isDefined( level.teams[ team ] ) ) - { - return 1; - } - if ( team == "any" ) - { - return 1; - } - if ( team == "none" ) - { - return 1; - } - return 0; -} - -isrelativeteam( relativeteam ) -{ - if ( relativeteam == "friendly" ) - { - return 1; - } - if ( relativeteam == "enemy" ) - { - return 1; - } - if ( relativeteam == "any" ) - { - return 1; - } - if ( relativeteam == "none" ) - { - return 1; - } - return 0; -} - -getenemyteam( team ) -{ - if ( team == "neutral" ) - { - return "none"; - } - else - { - if ( team == "allies" ) - { - return "axis"; - } - else - { - return "allies"; - } - } -} - -getnextobjid() -{ - nextid = 0; - if ( level.releasedobjectives.size > 0 ) - { - nextid = level.releasedobjectives[ level.releasedobjectives.size - 1 ]; - } - else - { - nextid = level.numgametypereservedobjectives; - level.numgametypereservedobjectives++; - } -/# - assert( nextid < 32, "Ran out of objective IDs" ); -#/ - return nextid; -} - -releaseobjid( objid ) -{ -/# - assert( objid < level.numgametypereservedobjectives ); -#/ - i = 0; - while ( i < level.releasedobjectives.size ) - { - if ( objid == level.releasedobjectives[ i ] && objid == 31 ) - { - return; - } -/# - assert( objid != level.releasedobjectives[ i ] ); -#/ - i++; - } - level.releasedobjectives[ level.releasedobjectives.size ] = objid; -} - -getlabel() -{ - label = self.trigger.script_label; - if ( !isDefined( label ) ) - { - label = ""; - return label; - } - if ( label[ 0 ] != "_" ) - { - return "_" + label; - } - return label; -} - -mustmaintainclaim( enabled ) -{ - self.mustmaintainclaim = enabled; -} - -cancontestclaim( enabled ) -{ - self.cancontestclaim = enabled; -} - -setflags( flags ) -{ - objective_setgamemodeflags( self.objectiveid, flags ); -} - -getflags( flags ) -{ - return objective_getgamemodeflags( self.objectiveid ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globalentities.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globalentities.gsc deleted file mode 100644 index e69de29..0000000 diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_actor.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_actor.gsc deleted file mode 100644 index 08518fb..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_actor.gsc +++ /dev/null @@ -1,207 +0,0 @@ -#include maps/mp/_challenges; -#include maps/mp/gametypes_zm/_damagefeedback; -#include maps/mp/gametypes_zm/_weapons; -#include maps/mp/gametypes_zm/_globallogic_utils; -#include maps/mp/gametypes_zm/_globallogic_player; -#include maps/mp/_utility; - -callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) -{ - if ( game[ "state" ] == "postgame" ) - { - return; - } - if ( self.aiteam == "spectator" ) - { - return; - } - if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( eattacker.candocombat ) && !eattacker.candocombat ) - { - return; - } - self.idflags = idflags; - self.idflagstime = getTime(); - eattacker = maps/mp/gametypes_zm/_globallogic_player::figureoutattacker( eattacker ); - if ( !isDefined( vdir ) ) - { - idflags |= level.idflags_no_knockback; - } - friendly = 0; - if ( self.health == self.maxhealth || !isDefined( self.attackers ) ) - { - self.attackers = []; - self.attackerdata = []; - self.attackerdamage = []; - } - if ( maps/mp/gametypes_zm/_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) ) - { - smeansofdeath = "MOD_HEAD_SHOT"; - } - if ( level.onlyheadshots ) - { - if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) - { - return; - } - else - { - if ( smeansofdeath == "MOD_HEAD_SHOT" ) - { - idamage = 150; - } - } - } - if ( sweapon == "none" && isDefined( einflictor ) ) - { - if ( isDefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) - { - sweapon = "explodable_barrel_mp"; - } - else - { - if ( isDefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) - { - sweapon = "destructible_car_mp"; - } - } - } - if ( idflags & level.idflags_no_protection ) - { - if ( isplayer( eattacker ) ) - { - eattacker.pers[ "participation" ]++; - } - prevhealthratio = self.health / self.maxhealth; - if ( level.teambased && isplayer( eattacker ) && self != eattacker && self.aiteam == eattacker.pers[ "team" ] ) - { - if ( level.friendlyfire == 0 ) - { - return; - } - else if ( level.friendlyfire == 1 ) - { - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - } - else if ( level.friendlyfire == 2 ) - { - return; - } - else - { - if ( level.friendlyfire == 3 ) - { - idamage = int( idamage * 0,5 ); - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - } - } - friendly = 1; - } - else - { - if ( isDefined( eattacker ) && isDefined( self.script_owner ) && eattacker == self.script_owner && !level.hardcoremode ) - { - return; - } - if ( isDefined( eattacker ) && isDefined( self.script_owner ) && isDefined( eattacker.script_owner ) && eattacker.script_owner == self.script_owner ) - { - return; - } - if ( idamage < 1 ) - { - idamage = 1; - } - if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( sweapon ) && !issubstr( smeansofdeath, "MOD_MELEE" ) ) - { - eattacker thread maps/mp/gametypes_zm/_weapons::checkhit( sweapon ); - } - if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isDefined( einflictor ) && isDefined( einflictor.iscooked ) ) - { - self.wascooked = getTime(); - } - else - { - self.wascooked = undefined; - } - if ( isDefined( eattacker ) ) - { - self.lastdamagewasfromenemy = eattacker != self; - } - self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - } - if ( isDefined( eattacker ) && eattacker != self ) - { - if ( sweapon != "artillery_mp" || !isDefined( einflictor ) && !isai( einflictor ) ) - { - if ( idamage > 0 ) - { - eattacker thread maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor ); - } - } - } - } -/# - if ( getDvarInt( "g_debugDamage" ) ) - { - println( "actor:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + shitloc + ";" + boneindex + "\n" ); -#/ - } - if ( 1 ) - { - lpselfnum = self getentitynumber(); - lpselfteam = self.aiteam; - lpattackerteam = ""; - if ( isplayer( eattacker ) ) - { - lpattacknum = eattacker getentitynumber(); - lpattackguid = eattacker getguid(); - lpattackname = eattacker.name; - lpattackerteam = eattacker.pers[ "team" ]; - } - else - { - lpattacknum = -1; - lpattackguid = ""; - lpattackname = ""; - lpattackerteam = "world"; - } - logprint( "AD;" + lpselfnum + ";" + lpselfteam + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\n" ); - } -} - -callback_actorkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) -{ - if ( game[ "state" ] == "postgame" ) - { - return; - } - if ( isai( attacker ) && isDefined( attacker.script_owner ) ) - { - if ( attacker.script_owner.team != self.aiteam ) - { - attacker = attacker.script_owner; - } - } - if ( attacker.classname == "script_vehicle" && isDefined( attacker.owner ) ) - { - attacker = attacker.owner; - } - if ( isDefined( attacker ) && isplayer( attacker ) ) - { - if ( !level.teambased || self.aiteam != attacker.pers[ "team" ] ) - { - level.globalkillstreaksdestroyed++; - attacker addweaponstat( "dogs_mp", "destroyed", 1 ); - attacker maps/mp/_challenges::killeddog(); - } - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_audio.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_audio.gsc deleted file mode 100644 index 2618bd9..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_audio.gsc +++ /dev/null @@ -1,1034 +0,0 @@ -#include maps/mp/_music; -#include maps/mp/gametypes_zm/_globallogic_audio; -#include maps/mp/gametypes_zm/_globallogic_utils; -#include maps/mp/_utility; - -init() -{ - game[ "music" ][ "defeat" ] = "mus_defeat"; - game[ "music" ][ "victory_spectator" ] = "mus_defeat"; - game[ "music" ][ "winning" ] = "mus_time_running_out_winning"; - game[ "music" ][ "losing" ] = "mus_time_running_out_losing"; - game[ "music" ][ "match_end" ] = "mus_match_end"; - game[ "music" ][ "victory_tie" ] = "mus_defeat"; - game[ "music" ][ "suspense" ] = []; - game[ "music" ][ "suspense" ][ game[ "music" ][ "suspense" ].size ] = "mus_suspense_01"; - game[ "music" ][ "suspense" ][ game[ "music" ][ "suspense" ].size ] = "mus_suspense_02"; - game[ "music" ][ "suspense" ][ game[ "music" ][ "suspense" ].size ] = "mus_suspense_03"; - game[ "music" ][ "suspense" ][ game[ "music" ][ "suspense" ].size ] = "mus_suspense_04"; - game[ "music" ][ "suspense" ][ game[ "music" ][ "suspense" ].size ] = "mus_suspense_05"; - game[ "music" ][ "suspense" ][ game[ "music" ][ "suspense" ].size ] = "mus_suspense_06"; - game[ "dialog" ][ "mission_success" ] = "mission_success"; - game[ "dialog" ][ "mission_failure" ] = "mission_fail"; - game[ "dialog" ][ "mission_draw" ] = "draw"; - game[ "dialog" ][ "round_success" ] = "encourage_win"; - game[ "dialog" ][ "round_failure" ] = "encourage_lost"; - game[ "dialog" ][ "round_draw" ] = "draw"; - game[ "dialog" ][ "timesup" ] = "timesup"; - game[ "dialog" ][ "winning" ] = "winning"; - game[ "dialog" ][ "losing" ] = "losing"; - game[ "dialog" ][ "min_draw" ] = "min_draw"; - game[ "dialog" ][ "lead_lost" ] = "lead_lost"; - game[ "dialog" ][ "lead_tied" ] = "tied"; - game[ "dialog" ][ "lead_taken" ] = "lead_taken"; - game[ "dialog" ][ "last_alive" ] = "lastalive"; - game[ "dialog" ][ "boost" ] = "generic_boost"; - if ( !isDefined( game[ "dialog" ][ "offense_obj" ] ) ) - { - game[ "dialog" ][ "offense_obj" ] = "generic_boost"; - } - if ( !isDefined( game[ "dialog" ][ "defense_obj" ] ) ) - { - game[ "dialog" ][ "defense_obj" ] = "generic_boost"; - } - game[ "dialog" ][ "hardcore" ] = "hardcore"; - game[ "dialog" ][ "oldschool" ] = "oldschool"; - game[ "dialog" ][ "highspeed" ] = "highspeed"; - game[ "dialog" ][ "tactical" ] = "tactical"; - game[ "dialog" ][ "challenge" ] = "challengecomplete"; - game[ "dialog" ][ "promotion" ] = "promotion"; - game[ "dialog" ][ "bomb_acquired" ] = "sd_bomb_taken"; - game[ "dialog" ][ "bomb_taken" ] = "sd_bomb_taken_taken"; - game[ "dialog" ][ "bomb_lost" ] = "sd_bomb_drop"; - game[ "dialog" ][ "bomb_defused" ] = "sd_bomb_defused"; - game[ "dialog" ][ "bomb_planted" ] = "sd_bomb_planted"; - game[ "dialog" ][ "obj_taken" ] = "securedobj"; - game[ "dialog" ][ "obj_lost" ] = "lostobj"; - game[ "dialog" ][ "obj_defend" ] = "defend_start"; - game[ "dialog" ][ "obj_destroy" ] = "destroy_start"; - game[ "dialog" ][ "obj_capture" ] = "capture_obj"; - game[ "dialog" ][ "objs_capture" ] = "capture_objs"; - game[ "dialog" ][ "hq_located" ] = "hq_located"; - game[ "dialog" ][ "hq_enemy_captured" ] = "hq_capture"; - game[ "dialog" ][ "hq_enemy_destroyed" ] = "hq_defend"; - game[ "dialog" ][ "hq_secured" ] = "hq_secured"; - game[ "dialog" ][ "hq_offline" ] = "hq_offline"; - game[ "dialog" ][ "hq_online" ] = "hq_online"; - game[ "dialog" ][ "koth_located" ] = "koth_located"; - game[ "dialog" ][ "koth_captured" ] = "koth_captured"; - game[ "dialog" ][ "koth_lost" ] = "koth_lost"; - game[ "dialog" ][ "koth_secured" ] = "koth_secured"; - game[ "dialog" ][ "koth_contested" ] = "koth_contest"; - game[ "dialog" ][ "koth_offline" ] = "koth_offline"; - game[ "dialog" ][ "koth_online" ] = "koth_online"; - game[ "dialog" ][ "move_to_new" ] = "new_positions"; - game[ "dialog" ][ "attack" ] = "attack"; - game[ "dialog" ][ "defend" ] = "defend"; - game[ "dialog" ][ "offense" ] = "offense"; - game[ "dialog" ][ "defense" ] = "defense"; - game[ "dialog" ][ "halftime" ] = "halftime"; - game[ "dialog" ][ "overtime" ] = "overtime"; - game[ "dialog" ][ "side_switch" ] = "switchingsides"; - game[ "dialog" ][ "flag_taken" ] = "ourflag"; - game[ "dialog" ][ "flag_dropped" ] = "ourflag_drop"; - game[ "dialog" ][ "flag_returned" ] = "ourflag_return"; - game[ "dialog" ][ "flag_captured" ] = "ourflag_capt"; - game[ "dialog" ][ "enemy_flag_taken" ] = "enemyflag"; - game[ "dialog" ][ "enemy_flag_dropped" ] = "enemyflag_drop"; - game[ "dialog" ][ "enemy_flag_returned" ] = "enemyflag_return"; - game[ "dialog" ][ "enemy_flag_captured" ] = "enemyflag_capt"; - game[ "dialog" ][ "securing_a" ] = "dom_securing_a"; - game[ "dialog" ][ "securing_b" ] = "dom_securing_b"; - game[ "dialog" ][ "securing_c" ] = "dom_securing_c"; - game[ "dialog" ][ "securing_d" ] = "dom_securing_d"; - game[ "dialog" ][ "securing_e" ] = "dom_securing_e"; - game[ "dialog" ][ "securing_f" ] = "dom_securing_f"; - game[ "dialog" ][ "secured_a" ] = "dom_secured_a"; - game[ "dialog" ][ "secured_b" ] = "dom_secured_b"; - game[ "dialog" ][ "secured_c" ] = "dom_secured_c"; - game[ "dialog" ][ "secured_d" ] = "dom_secured_d"; - game[ "dialog" ][ "secured_e" ] = "dom_secured_e"; - game[ "dialog" ][ "secured_f" ] = "dom_secured_f"; - game[ "dialog" ][ "losing_a" ] = "dom_losing_a"; - game[ "dialog" ][ "losing_b" ] = "dom_losing_b"; - game[ "dialog" ][ "losing_c" ] = "dom_losing_c"; - game[ "dialog" ][ "losing_d" ] = "dom_losing_d"; - game[ "dialog" ][ "losing_e" ] = "dom_losing_e"; - game[ "dialog" ][ "losing_f" ] = "dom_losing_f"; - game[ "dialog" ][ "lost_a" ] = "dom_lost_a"; - game[ "dialog" ][ "lost_b" ] = "dom_lost_b"; - game[ "dialog" ][ "lost_c" ] = "dom_lost_c"; - game[ "dialog" ][ "lost_d" ] = "dom_lost_d"; - game[ "dialog" ][ "lost_e" ] = "dom_lost_e"; - game[ "dialog" ][ "lost_f" ] = "dom_lost_f"; - game[ "dialog" ][ "secure_flag" ] = "secure_flag"; - game[ "dialog" ][ "securing_flag" ] = "securing_flag"; - game[ "dialog" ][ "losing_flag" ] = "losing_flag"; - game[ "dialog" ][ "lost_flag" ] = "lost_flag"; - game[ "dialog" ][ "oneflag_enemy" ] = "oneflag_enemy"; - game[ "dialog" ][ "oneflag_friendly" ] = "oneflag_friendly"; - game[ "dialog" ][ "lost_all" ] = "dom_lock_theytake"; - game[ "dialog" ][ "secure_all" ] = "dom_lock_wetake"; - game[ "dialog" ][ "squad_move" ] = "squad_move"; - game[ "dialog" ][ "squad_30sec" ] = "squad_30sec"; - game[ "dialog" ][ "squad_winning" ] = "squad_onemin_vic"; - game[ "dialog" ][ "squad_losing" ] = "squad_onemin_loss"; - game[ "dialog" ][ "squad_down" ] = "squad_down"; - game[ "dialog" ][ "squad_bomb" ] = "squad_bomb"; - game[ "dialog" ][ "squad_plant" ] = "squad_plant"; - game[ "dialog" ][ "squad_take" ] = "squad_takeobj"; - game[ "dialog" ][ "kicked" ] = "player_kicked"; - game[ "dialog" ][ "sentry_destroyed" ] = "dest_sentry"; - game[ "dialog" ][ "sentry_hacked" ] = "kls_turret_hacked"; - game[ "dialog" ][ "microwave_destroyed" ] = "dest_microwave"; - game[ "dialog" ][ "microwave_hacked" ] = "kls_microwave_hacked"; - game[ "dialog" ][ "sam_destroyed" ] = "dest_sam"; - game[ "dialog" ][ "tact_destroyed" ] = "dest_tact"; - game[ "dialog" ][ "equipment_destroyed" ] = "dest_equip"; - game[ "dialog" ][ "hacked_equip" ] = "hacked_equip"; - game[ "dialog" ][ "uav_destroyed" ] = "kls_u2_destroyed"; - game[ "dialog" ][ "cuav_destroyed" ] = "kls_cu2_destroyed"; - level.dialoggroups = []; - level thread post_match_snapshot_watcher(); -} - -registerdialoggroup( group, skipifcurrentlyplayinggroup ) -{ - if ( !isDefined( level.dialoggroups ) ) - { - level.dialoggroups = []; - } - else - { - if ( isDefined( level.dialoggroup[ group ] ) ) - { - error( "registerDialogGroup: Dialog group " + group + " already registered." ); - return; - } - } - level.dialoggroup[ group ] = spawnstruct(); - level.dialoggroup[ group ].group = group; - level.dialoggroup[ group ].skipifcurrentlyplayinggroup = skipifcurrentlyplayinggroup; - level.dialoggroup[ group ].currentcount = 0; -} - -sndstartmusicsystem() -{ - self endon( "disconnect" ); - if ( game[ "state" ] == "postgame" ) - { - return; - } - if ( game[ "state" ] == "pregame" ) - { -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - music state is undefined Waiting 15 seconds to set music state" ); -#/ - } - wait 30; - if ( !isDefined( level.nextmusicstate ) ) - { - self.pers[ "music" ].currentstate = "UNDERSCORE"; - self thread suspensemusic(); - } - } - if ( !isDefined( level.nextmusicstate ) ) - { -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - music state is undefined Waiting 15 seconds to set music state" ); -#/ - } - self.pers[ "music" ].currentstate = "UNDERSCORE"; - self thread suspensemusic(); - } -} - -suspensemusicforplayer() -{ - self endon( "disconnect" ); - self thread set_music_on_player( "UNDERSCORE", 0 ); -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Setting Music State Random Underscore " + self.pers[ "music" ].returnstate + " On player " + self getentitynumber() ); -#/ - } -} - -suspensemusic( random ) -{ - level endon( "game_ended" ); - level endon( "match_ending_soon" ); - self endon( "disconnect" ); -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Starting random underscore" ); -#/ - } - while ( 1 ) - { - wait randomintrange( 25, 60 ); -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Checking for random underscore" ); -#/ - } - if ( !isDefined( self.pers[ "music" ].inque ) ) - { - self.pers[ "music" ].inque = 0; - } - while ( self.pers[ "music" ].inque ) - { -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Inque no random underscore" ); -#/ - } - } - if ( !isDefined( self.pers[ "music" ].currentstate ) ) - { - self.pers[ "music" ].currentstate = "SILENT"; - } - if ( randomint( 100 ) < self.underscorechance && self.pers[ "music" ].currentstate != "ACTION" && self.pers[ "music" ].currentstate != "TIME_OUT" ) - { - self thread suspensemusicforplayer(); - self.underscorechance -= 20; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Starting random underscore" ); -#/ - } - } - } -} - -leaderdialogforotherteams( dialog, skip_team, squad_dialog ) -{ - _a339 = level.teams; - _k339 = getFirstArrayKey( _a339 ); - while ( isDefined( _k339 ) ) - { - team = _a339[ _k339 ]; - if ( team != skip_team ) - { - leaderdialog( dialog, team, undefined, undefined, squad_dialog ); - } - _k339 = getNextArrayKey( _a339, _k339 ); - } -} - -announceroundwinner( winner, delay ) -{ - if ( delay > 0 ) - { - wait delay; - } - if ( !isDefined( winner ) || isplayer( winner ) ) - { - return; - } - if ( isDefined( level.teams[ winner ] ) ) - { - leaderdialog( "round_success", winner ); - leaderdialogforotherteams( "round_failure", winner ); - } - else - { - _a365 = level.teams; - _k365 = getFirstArrayKey( _a365 ); - while ( isDefined( _k365 ) ) - { - team = _a365[ _k365 ]; - thread playsoundonplayers( "mus_round_draw" + "_" + level.teampostfix[ team ] ); - _k365 = getNextArrayKey( _a365, _k365 ); - } - leaderdialog( "round_draw" ); - } -} - -announcegamewinner( winner, delay ) -{ - if ( delay > 0 ) - { - wait delay; - } - if ( !isDefined( winner ) || isplayer( winner ) ) - { - return; - } - if ( isDefined( level.teams[ winner ] ) ) - { - leaderdialog( "mission_success", winner ); - leaderdialogforotherteams( "mission_failure", winner ); - } - else - { - leaderdialog( "mission_draw" ); - } -} - -doflameaudio() -{ - self endon( "disconnect" ); - waittillframeend; - if ( !isDefined( self.lastflamehurtaudio ) ) - { - self.lastflamehurtaudio = 0; - } - currenttime = getTime(); - if ( ( self.lastflamehurtaudio + level.fire_audio_repeat_duration + randomint( level.fire_audio_random_max_duration ) ) < currenttime ) - { - self playlocalsound( "vox_pain_small" ); - self.lastflamehurtaudio = currenttime; - } -} - -leaderdialog( dialog, team, group, excludelist, squaddialog ) -{ -/# - assert( isDefined( level.players ) ); -#/ - if ( level.splitscreen ) - { - return; - } - if ( level.wagermatch ) - { - return; - } - if ( !isDefined( team ) ) - { - dialogs = []; - _a425 = level.teams; - _k425 = getFirstArrayKey( _a425 ); - while ( isDefined( _k425 ) ) - { - team = _a425[ _k425 ]; - dialogs[ team ] = dialog; - _k425 = getNextArrayKey( _a425, _k425 ); - } - leaderdialogallteams( dialogs, group, excludelist ); - return; - } - if ( level.splitscreen ) - { - if ( level.players.size ) - { - level.players[ 0 ] leaderdialogonplayer( dialog, group ); - } - return; - } - if ( isDefined( excludelist ) ) - { - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team && !maps/mp/gametypes_zm/_globallogic_utils::isexcluded( player, excludelist ) ) - { - player leaderdialogonplayer( dialog, group ); - } - i++; - } - } - else i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team ) - { - player leaderdialogonplayer( dialog, group ); - } - i++; - } -} - -leaderdialogallteams( dialogs, group, excludelist ) -{ -/# - assert( isDefined( level.players ) ); -#/ - if ( level.splitscreen ) - { - return; - } - if ( level.splitscreen ) - { - if ( level.players.size ) - { - level.players[ 0 ] leaderdialogonplayer( dialogs[ level.players[ 0 ].team ], group ); - } - return; - } - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - team = player.pers[ "team" ]; - if ( !isDefined( team ) ) - { - i++; - continue; - } - else if ( !isDefined( dialogs[ team ] ) ) - { - i++; - continue; - } - else if ( isDefined( excludelist ) && maps/mp/gametypes_zm/_globallogic_utils::isexcluded( player, excludelist ) ) - { - i++; - continue; - } - else - { - player leaderdialogonplayer( dialogs[ team ], group ); - } - i++; - } -} - -flushdialog() -{ - _a495 = level.players; - _k495 = getFirstArrayKey( _a495 ); - while ( isDefined( _k495 ) ) - { - player = _a495[ _k495 ]; - player flushdialogonplayer(); - _k495 = getNextArrayKey( _a495, _k495 ); - } -} - -flushdialogonplayer() -{ - self.leaderdialoggroups = []; - self.leaderdialogqueue = []; - self.leaderdialogactive = 0; - self.currentleaderdialoggroup = ""; -} - -flushgroupdialog( group ) -{ - _a512 = level.players; - _k512 = getFirstArrayKey( _a512 ); - while ( isDefined( _k512 ) ) - { - player = _a512[ _k512 ]; - player flushgroupdialogonplayer( group ); - _k512 = getNextArrayKey( _a512, _k512 ); - } -} - -flushgroupdialogonplayer( group ) -{ - _a522 = self.leaderdialogqueue; - key = getFirstArrayKey( _a522 ); - while ( isDefined( key ) ) - { - dialog = _a522[ key ]; - if ( dialog == group ) - { - } - key = getNextArrayKey( _a522, key ); - } -} - -addgroupdialogtoplayer( dialog, group ) -{ - if ( !isDefined( level.dialoggroup[ group ] ) ) - { - error( "leaderDialogOnPlayer: Dialog group " + group + " is not registered" ); - return 0; - } - addtoqueue = 0; - if ( !isDefined( self.leaderdialoggroups[ group ] ) ) - { - addtoqueue = 1; - } - if ( !level.dialoggroup[ group ].skipifcurrentlyplayinggroup ) - { - if ( self.currentleaderdialog == dialog && ( self.currentleaderdialogtime + 2000 ) > getTime() ) - { - _a552 = self.leaderdialogqueue; - key = getFirstArrayKey( _a552 ); - while ( isDefined( key ) ) - { - leader_dialog = _a552[ key ]; - if ( leader_dialog == group ) - { - i = key + 1; - while ( i < self.leaderdialogqueue.size ) - { - self.leaderdialogqueue[ i - 1 ] = self.leaderdialogqueue[ i ]; - i++; - } - break; - } - else - { - key = getNextArrayKey( _a552, key ); - } - } - return 0; - } - } - else - { - if ( self.currentleaderdialoggroup == group ) - { - return 0; - } - } - self.leaderdialoggroups[ group ] = dialog; - return addtoqueue; -} - -testdialogqueue( group ) -{ -/# - count = 0; - _a585 = self.leaderdialogqueue; - _k585 = getFirstArrayKey( _a585 ); - while ( isDefined( _k585 ) ) - { - temp = _a585[ _k585 ]; - if ( temp == group ) - { - count++; - } - _k585 = getNextArrayKey( _a585, _k585 ); - } - if ( count > 1 ) - { - shit = 0; -#/ - } -} - -leaderdialogonplayer( dialog, group ) -{ - team = self.pers[ "team" ]; - if ( level.splitscreen ) - { - return; - } - if ( !isDefined( team ) ) - { - return; - } - if ( !isDefined( level.teams[ team ] ) ) - { - return; - } - if ( isDefined( group ) ) - { - if ( !addgroupdialogtoplayer( dialog, group ) ) - { - self testdialogqueue( group ); - return; - } - dialog = group; - } - if ( !self.leaderdialogactive ) - { - self thread playleaderdialogonplayer( dialog ); - } - else - { - self.leaderdialogqueue[ self.leaderdialogqueue.size ] = dialog; - } -} - -waitforsound( sound, extratime ) -{ - if ( !isDefined( extratime ) ) - { - extratime = 0,1; - } - time = soundgetplaybacktime( sound ); - if ( time < 0 ) - { - wait ( 3 + extratime ); - } - else - { - wait ( ( time * 0,001 ) + extratime ); - } -} - -playleaderdialogonplayer( dialog ) -{ - if ( isDefined( level.allowannouncer ) && !level.allowannouncer ) - { - return; - } - team = self.pers[ "team" ]; - self endon( "disconnect" ); - self.leaderdialogactive = 1; - if ( isDefined( self.leaderdialoggroups[ dialog ] ) ) - { - group = dialog; - dialog = self.leaderdialoggroups[ group ]; - self.currentleaderdialoggroup = group; - self testdialogqueue( group ); - } - if ( level.wagermatch || !isDefined( game[ "voice" ] ) ) - { - faction = "vox_wm_"; - } - else - { - faction = game[ "voice" ][ team ]; - } - sound_name = faction + game[ "dialog" ][ dialog ]; - if ( level.allowannouncer ) - { - self playlocalsound( sound_name ); - self.currentleaderdialog = dialog; - self.currentleaderdialogtime = getTime(); - } - waitforsound( sound_name ); - self.leaderdialogactive = 0; - self.currentleaderdialoggroup = ""; - self.currentleaderdialog = ""; - if ( self.leaderdialogqueue.size > 0 ) - { - nextdialog = self.leaderdialogqueue[ 0 ]; - i = 1; - while ( i < self.leaderdialogqueue.size ) - { - self.leaderdialogqueue[ i - 1 ] = self.leaderdialogqueue[ i ]; - i++; - } - if ( isDefined( self.leaderdialoggroups[ dialog ] ) ) - { - self testdialogqueue( dialog ); - } - self thread playleaderdialogonplayer( nextdialog ); - } -} - -isteamwinning( checkteam ) -{ - score = game[ "teamScores" ][ checkteam ]; - _a702 = level.teams; - _k702 = getFirstArrayKey( _a702 ); - while ( isDefined( _k702 ) ) - { - team = _a702[ _k702 ]; - if ( team != checkteam ) - { - if ( game[ "teamScores" ][ team ] >= score ) - { - return 0; - } - } - _k702 = getNextArrayKey( _a702, _k702 ); - } - return 1; -} - -announceteamiswinning() -{ - _a716 = level.teams; - _k716 = getFirstArrayKey( _a716 ); - while ( isDefined( _k716 ) ) - { - team = _a716[ _k716 ]; - if ( isteamwinning( team ) ) - { - leaderdialog( "winning", team, undefined, undefined, "squad_winning" ); - leaderdialogforotherteams( "losing", team, "squad_losing" ); - return 1; - } - _k716 = getNextArrayKey( _a716, _k716 ); - } - return 0; -} - -musiccontroller() -{ - level endon( "game_ended" ); - level thread musictimesout(); - level waittill( "match_ending_soon" ); - if ( islastround() || isoneround() ) - { - while ( !level.splitscreen ) - { - if ( level.teambased ) - { - if ( !announceteamiswinning() ) - { - leaderdialog( "min_draw" ); - } - } - level waittill( "match_ending_very_soon" ); - _a751 = level.teams; - _k751 = getFirstArrayKey( _a751 ); - while ( isDefined( _k751 ) ) - { - team = _a751[ _k751 ]; - leaderdialog( "timesup", team, undefined, undefined, "squad_30sec" ); - _k751 = getNextArrayKey( _a751, _k751 ); - } - } - } - else level waittill( "match_ending_vox" ); - leaderdialog( "timesup" ); -} - -musictimesout() -{ - level endon( "game_ended" ); - level waittill( "match_ending_very_soon" ); - thread maps/mp/gametypes_zm/_globallogic_audio::set_music_on_team( "TIME_OUT", "both", 1, 0 ); -} - -actionmusicset() -{ - level endon( "game_ended" ); - level.playingactionmusic = 1; - wait 45; - level.playingactionmusic = 0; -} - -play_2d_on_team( alias, team ) -{ -/# - assert( isDefined( level.players ) ); -#/ - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team ) - { - player playlocalsound( alias ); - } - i++; - } -} - -set_music_on_team( state, team, save_state, return_state, wait_time ) -{ - if ( sessionmodeiszombiesgame() ) - { - return; - } -/# - assert( isDefined( level.players ) ); -#/ - if ( !isDefined( team ) ) - { - team = "both"; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - team undefined: Setting to both" ); -#/ - } - } - if ( !isDefined( save_state ) ) - { - save_sate = 0; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - save_sate undefined: Setting to false" ); -#/ - } - } - if ( !isDefined( return_state ) ) - { - return_state = 0; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Music System - return_state undefined: Setting to false" ); -#/ - } - } - if ( !isDefined( wait_time ) ) - { - wait_time = 0; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - wait_time undefined: Setting to 0" ); -#/ - } - } - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( team == "both" ) - { - player thread set_music_on_player( state, save_state, return_state, wait_time ); - i++; - continue; - } - else - { - if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team ) - { - player thread set_music_on_player( state, save_state, return_state, wait_time ); -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Setting Music State " + state + " On player " + player getentitynumber() ); -#/ - } - } - } - i++; - } -} - -set_music_on_player( state, save_state, return_state, wait_time ) -{ - self endon( "disconnect" ); - if ( sessionmodeiszombiesgame() ) - { - return; - } -/# - assert( isplayer( self ) ); -#/ - if ( !isDefined( save_state ) ) - { - save_state = 0; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Music System - save_sate undefined: Setting to false" ); -#/ - } - } - if ( !isDefined( return_state ) ) - { - return_state = 0; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Music System - return_state undefined: Setting to false" ); -#/ - } - } - if ( !isDefined( wait_time ) ) - { - wait_time = 0; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - wait_time undefined: Setting to 0" ); -#/ - } - } - if ( !isDefined( state ) ) - { - state = "UNDERSCORE"; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - state undefined: Setting to UNDERSCORE" ); -#/ - } - } - maps/mp/_music::setmusicstate( state, self ); - if ( isDefined( self.pers[ "music" ].currentstate ) && save_state ) - { - self.pers[ "music" ].returnstate = state; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Saving Music State " + self.pers[ "music" ].returnstate + " On " + self getentitynumber() ); -#/ - } - } - self.pers[ "music" ].previousstate = self.pers[ "music" ].currentstate; - self.pers[ "music" ].currentstate = state; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Setting Music State " + state + " On player " + self getentitynumber() ); -#/ - } - if ( isDefined( self.pers[ "music" ].returnstate ) && return_state ) - { -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Starting Return State " + self.pers[ "music" ].returnstate + " On " + self getentitynumber() ); -#/ - } - self set_next_music_state( self.pers[ "music" ].returnstate, wait_time ); - } -} - -return_music_state_player( wait_time ) -{ - if ( !isDefined( wait_time ) ) - { - wait_time = 0; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - wait_time undefined: Setting to 0" ); -#/ - } - } - self set_next_music_state( self.pers[ "music" ].returnstate, wait_time ); -} - -return_music_state_team( team, wait_time ) -{ - if ( !isDefined( wait_time ) ) - { - wait_time = 0; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - wait_time undefined: Setting to 0" ); -#/ - } - } - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( team == "both" ) - { - player thread set_next_music_state( self.pers[ "music" ].returnstate, wait_time ); - i++; - continue; - } - else - { - if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team ) - { - player thread set_next_music_state( self.pers[ "music" ].returnstate, wait_time ); -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Setting Music State " + self.pers[ "music" ].returnstate + " On player " + player getentitynumber() ); -#/ - } - } - } - i++; - } -} - -set_next_music_state( nextstate, wait_time ) -{ - self endon( "disconnect" ); - self.pers[ "music" ].nextstate = nextstate; -/# - if ( getDvarInt( #"0BC4784C" ) > 0 ) - { - println( "Music System - Setting next Music State " + self.pers[ "music" ].nextstate + " On " + self getentitynumber() ); -#/ - } - if ( !isDefined( self.pers[ "music" ].inque ) ) - { - self.pers[ "music" ].inque = 0; - } - if ( self.pers[ "music" ].inque ) - { - return; -/# - println( "Music System - Music state in que" ); -#/ - } - else - { - self.pers[ "music" ].inque = 1; - if ( wait_time ) - { - wait wait_time; - } - self set_music_on_player( self.pers[ "music" ].nextstate, 0 ); - self.pers[ "music" ].inque = 0; - } -} - -getroundswitchdialog( switchtype ) -{ - switch( switchtype ) - { - case "halftime": - return "halftime"; - case "overtime": - return "overtime"; - default: - return "side_switch"; - } -} - -post_match_snapshot_watcher() -{ - level waittill( "game_ended" ); - level clientnotify( "pm" ); - level waittill( "sfade" ); - level clientnotify( "pmf" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_defaults.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_defaults.gsc deleted file mode 100644 index 059642d..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_defaults.gsc +++ /dev/null @@ -1,230 +0,0 @@ -#include maps/mp/gametypes_zm/_spawnlogic; -#include maps/mp/gametypes_zm/_globallogic_audio; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/gametypes_zm/_globallogic; -#include maps/mp/gametypes_zm/_globallogic_utils; -#include maps/mp/_utility; -#include common_scripts/utility; - -getwinningteamfromloser( losing_team ) -{ - if ( level.multiteam ) - { - return "tie"; - } - else - { - if ( losing_team == "axis" ) - { - return "allies"; - } - } - return "axis"; -} - -default_onforfeit( team ) -{ - level.gameforfeited = 1; - level notify( "forfeit in progress" ); - level endon( "forfeit in progress" ); - level endon( "abort forfeit" ); - forfeit_delay = 20; - announcement( game[ "strings" ][ "opponent_forfeiting_in" ], forfeit_delay, 0 ); - wait 10; - announcement( game[ "strings" ][ "opponent_forfeiting_in" ], 10, 0 ); - wait 10; - endreason = &""; - if ( !isDefined( team ) ) - { - setdvar( "ui_text_endreason", game[ "strings" ][ "players_forfeited" ] ); - endreason = game[ "strings" ][ "players_forfeited" ]; - winner = level.players[ 0 ]; - } - else if ( isDefined( level.teams[ team ] ) ) - { - endreason = game[ "strings" ][ team + "_forfeited" ]; - setdvar( "ui_text_endreason", endreason ); - winner = getwinningteamfromloser( team ); - } - else - { -/# - assert( isDefined( team ), "Forfeited team is not defined" ); -#/ -/# - assert( 0, "Forfeited team " + team + " is not allies or axis" ); -#/ - winner = "tie"; - } - level.forcedend = 1; - if ( isplayer( winner ) ) - { - logstring( "forfeit, win: " + winner getxuid() + "(" + winner.name + ")" ); - } - else - { - maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "forfeit", winner ); - } - thread maps/mp/gametypes_zm/_globallogic::endgame( winner, endreason ); -} - -default_ondeadevent( team ) -{ - if ( isDefined( level.teams[ team ] ) ) - { - eliminatedstring = game[ "strings" ][ team + "_eliminated" ]; - iprintln( eliminatedstring ); - makedvarserverinfo( "ui_text_endreason", eliminatedstring ); - setdvar( "ui_text_endreason", eliminatedstring ); - winner = getwinningteamfromloser( team ); - maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "team eliminated", winner ); - thread maps/mp/gametypes_zm/_globallogic::endgame( winner, eliminatedstring ); - } - else makedvarserverinfo( "ui_text_endreason", game[ "strings" ][ "tie" ] ); - setdvar( "ui_text_endreason", game[ "strings" ][ "tie" ] ); - maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "tie" ); - if ( level.teambased ) - { - thread maps/mp/gametypes_zm/_globallogic::endgame( "tie", game[ "strings" ][ "tie" ] ); - } - else - { - thread maps/mp/gametypes_zm/_globallogic::endgame( undefined, game[ "strings" ][ "tie" ] ); - } -} - -default_onalivecountchange( team ) -{ -} - -default_onroundendgame( winner ) -{ - return winner; -} - -default_ononeleftevent( team ) -{ - if ( !level.teambased ) - { - winner = maps/mp/gametypes_zm/_globallogic_score::gethighestscoringplayer(); - if ( isDefined( winner ) ) - { - logstring( "last one alive, win: " + winner.name ); - } - else - { - logstring( "last one alive, win: unknown" ); - } - thread maps/mp/gametypes_zm/_globallogic::endgame( winner, &"MP_ENEMIES_ELIMINATED" ); - } - else - { - index = 0; - while ( index < level.players.size ) - { - player = level.players[ index ]; - if ( !isalive( player ) ) - { - index++; - continue; - } - else if ( !isDefined( player.pers[ "team" ] ) || player.pers[ "team" ] != team ) - { - index++; - continue; - } - else - { - player maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "sudden_death" ); - } - index++; - } - } -} - -default_ontimelimit() -{ - winner = undefined; - if ( level.teambased ) - { - winner = maps/mp/gametypes_zm/_globallogic::determineteamwinnerbygamestat( "teamScores" ); - maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "time limit", winner ); - } - else winner = maps/mp/gametypes_zm/_globallogic_score::gethighestscoringplayer(); - if ( isDefined( winner ) ) - { - logstring( "time limit, win: " + winner.name ); - } - else - { - logstring( "time limit, tie" ); - } - makedvarserverinfo( "ui_text_endreason", game[ "strings" ][ "time_limit_reached" ] ); - setdvar( "ui_text_endreason", game[ "strings" ][ "time_limit_reached" ] ); - thread maps/mp/gametypes_zm/_globallogic::endgame( winner, game[ "strings" ][ "time_limit_reached" ] ); -} - -default_onscorelimit() -{ - if ( !level.endgameonscorelimit ) - { - return 0; - } - winner = undefined; - if ( level.teambased ) - { - winner = maps/mp/gametypes_zm/_globallogic::determineteamwinnerbygamestat( "teamScores" ); - maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "scorelimit", winner ); - } - else winner = maps/mp/gametypes_zm/_globallogic_score::gethighestscoringplayer(); - if ( isDefined( winner ) ) - { - logstring( "scorelimit, win: " + winner.name ); - } - else - { - logstring( "scorelimit, tie" ); - } - makedvarserverinfo( "ui_text_endreason", game[ "strings" ][ "score_limit_reached" ] ); - setdvar( "ui_text_endreason", game[ "strings" ][ "score_limit_reached" ] ); - thread maps/mp/gametypes_zm/_globallogic::endgame( winner, game[ "strings" ][ "score_limit_reached" ] ); - return 1; -} - -default_onspawnspectator( origin, angles ) -{ - if ( isDefined( origin ) && isDefined( angles ) ) - { - self spawn( origin, angles ); - return; - } - spawnpointname = "mp_global_intermission"; - spawnpoints = getentarray( spawnpointname, "classname" ); -/# - assert( spawnpoints.size, "There are no mp_global_intermission spawn points in the map. There must be at least one." ); -#/ - spawnpoint = maps/mp/gametypes_zm/_spawnlogic::getspawnpoint_random( spawnpoints ); - self spawn( spawnpoint.origin, spawnpoint.angles ); -} - -default_onspawnintermission() -{ - spawnpointname = "mp_global_intermission"; - spawnpoints = getentarray( spawnpointname, "classname" ); - spawnpoint = spawnpoints[ 0 ]; - if ( isDefined( spawnpoint ) ) - { - self spawn( spawnpoint.origin, spawnpoint.angles ); - } - else - { -/# - maps/mp/_utility::error( "NO " + spawnpointname + " SPAWNPOINTS IN MAP" ); -#/ - } -} - -default_gettimelimit() -{ - return clamp( getgametypesetting( "timeLimit" ), level.timelimitmin, level.timelimitmax ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_player.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_player.gsc deleted file mode 100644 index 7eb69c1..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_player.gsc +++ /dev/null @@ -1,2235 +0,0 @@ -#include maps/mp/gametypes_zm/_globallogic_audio; -#include maps/mp/gametypes_zm/_tweakables; -#include maps/mp/_challenges; -#include maps/mp/gametypes_zm/_spawnlogic; -#include maps/mp/gametypes_zm/_weapons; -#include maps/mp/_demo; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/gametypes_zm/_hud_message; -#include maps/mp/gametypes_zm/_spawning; -#include maps/mp/gametypes_zm/_globallogic_utils; -#include maps/mp/gametypes_zm/_spectating; -#include maps/mp/gametypes_zm/_globallogic_spawn; -#include maps/mp/gametypes_zm/_globallogic_ui; -#include maps/mp/gametypes_zm/_hostmigration; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/gametypes_zm/_globallogic; -#include common_scripts/utility; -#include maps/mp/_utility; - -freezeplayerforroundend() -{ - self clearlowermessage(); - self closemenu(); - self closeingamemenu(); - self freeze_player_controls( 1 ); - if ( !sessionmodeiszombiesgame() ) - { - currentweapon = self getcurrentweapon(); - } -} - -callback_playerconnect() -{ - thread notifyconnecting(); - self.statusicon = "hud_status_connecting"; - self waittill( "begin" ); - if ( isDefined( level.reset_clientdvars ) ) - { - self [[ level.reset_clientdvars ]](); - } - waittillframeend; - self.statusicon = ""; - self.guid = self getguid(); - profilelog_begintiming( 4, "ship" ); - level notify( "connected" ); - if ( self ishost() ) - { - self thread maps/mp/gametypes_zm/_globallogic::listenforgameend(); - } - if ( !level.splitscreen && !isDefined( self.pers[ "score" ] ) ) - { - iprintln( &"MP_CONNECTED", self ); - } - if ( !isDefined( self.pers[ "score" ] ) ) - { - self thread maps/mp/zombies/_zm_stats::adjustrecentstats(); - } - if ( gamemodeismode( level.gamemode_public_match ) && !isDefined( self.pers[ "matchesPlayedStatsTracked" ] ) ) - { - gamemode = maps/mp/gametypes_zm/_globallogic::getcurrentgamemode(); - self maps/mp/gametypes_zm/_globallogic::incrementmatchcompletionstat( gamemode, "played", "started" ); - if ( !isDefined( self.pers[ "matchesHostedStatsTracked" ] ) && self islocaltohost() ) - { - self maps/mp/gametypes_zm/_globallogic::incrementmatchcompletionstat( gamemode, "hosted", "started" ); - self.pers[ "matchesHostedStatsTracked" ] = 1; - } - self.pers[ "matchesPlayedStatsTracked" ] = 1; - self thread maps/mp/zombies/_zm_stats::uploadstatssoon(); - } - lpselfnum = self getentitynumber(); - lpguid = self getguid(); - logprint( "J;" + lpguid + ";" + lpselfnum + ";" + self.name + "\n" ); - bbprint( "mpjoins", "name %s client %s", self.name, lpselfnum ); - if ( !sessionmodeiszombiesgame() ) - { - self setclientuivisibilityflag( "hud_visible", 1 ); - } - if ( level.forceradar == 1 ) - { - self.pers[ "hasRadar" ] = 1; - self.hasspyplane = 1; - level.activeuavs[ self getentitynumber() ] = 1; - } - if ( level.forceradar == 2 ) - { - self setclientuivisibilityflag( "g_compassShowEnemies", level.forceradar ); - } - else - { - self setclientuivisibilityflag( "g_compassShowEnemies", 0 ); - } - self setclientplayersprinttime( level.playersprinttime ); - self setclientnumlives( level.numlives ); - makedvarserverinfo( "cg_drawTalk", 1 ); - if ( level.hardcoremode ) - { - self setclientdrawtalk( 3 ); - } - if ( sessionmodeiszombiesgame() ) - { - self [[ level.player_stats_init ]](); - } - else - { - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "score" ); - if ( level.resetplayerscoreeveryround ) - { - self.pers[ "score" ] = 0; - } - self.score = self.pers[ "score" ]; - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "momentum", 0 ); - self.momentum = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "momentum" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "suicides" ); - self.suicides = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "suicides" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "headshots" ); - self.headshots = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "headshots" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "challenges" ); - self.challenges = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "challenges" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "kills" ); - self.kills = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "kills" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "deaths" ); - self.deaths = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "deaths" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "assists" ); - self.assists = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "assists" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "defends", 0 ); - self.defends = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "defends" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "offends", 0 ); - self.offends = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "offends" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "plants", 0 ); - self.plants = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "plants" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "defuses", 0 ); - self.defuses = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "defuses" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "returns", 0 ); - self.returns = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "returns" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "captures", 0 ); - self.captures = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "captures" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "destructions", 0 ); - self.destructions = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "destructions" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "backstabs", 0 ); - self.backstabs = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "backstabs" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "longshots", 0 ); - self.longshots = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "longshots" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "survived", 0 ); - self.survived = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "survived" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "stabs", 0 ); - self.stabs = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "stabs" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "tomahawks", 0 ); - self.tomahawks = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "tomahawks" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "humiliated", 0 ); - self.humiliated = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "humiliated" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "x2score", 0 ); - self.x2score = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "x2score" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "agrkills", 0 ); - self.x2score = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "agrkills" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "hacks", 0 ); - self.x2score = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "hacks" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sessionbans", 0 ); - self.sessionbans = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "sessionbans" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "gametypeban", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "time_played_total", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "time_played_alive", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "teamkills", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "teamkills_nostats", 0 ); - self.teamkillpunish = 0; - if ( level.minimumallowedteamkills >= 0 && self.pers[ "teamkills_nostats" ] > level.minimumallowedteamkills ) - { - self thread reduceteamkillsovertime(); - } - } - if ( getDvar( #"F7B30924" ) == "1" ) - { - level waittill( "eternity" ); - } - self.killedplayerscurrent = []; - if ( !isDefined( self.pers[ "best_kill_streak" ] ) ) - { - self.pers[ "killed_players" ] = []; - self.pers[ "killed_by" ] = []; - self.pers[ "nemesis_tracking" ] = []; - self.pers[ "artillery_kills" ] = 0; - self.pers[ "dog_kills" ] = 0; - self.pers[ "nemesis_name" ] = ""; - self.pers[ "nemesis_rank" ] = 0; - self.pers[ "nemesis_rankIcon" ] = 0; - self.pers[ "nemesis_xp" ] = 0; - self.pers[ "nemesis_xuid" ] = ""; - self.pers[ "best_kill_streak" ] = 0; - } - if ( !isDefined( self.pers[ "music" ] ) ) - { - self.pers[ "music" ] = spawnstruct(); - self.pers[ "music" ].spawn = 0; - self.pers[ "music" ].inque = 0; - self.pers[ "music" ].currentstate = "SILENT"; - self.pers[ "music" ].previousstate = "SILENT"; - self.pers[ "music" ].nextstate = "UNDERSCORE"; - self.pers[ "music" ].returnstate = "UNDERSCORE"; - } - self.leaderdialogqueue = []; - self.leaderdialogactive = 0; - self.leaderdialoggroups = []; - self.currentleaderdialoggroup = ""; - self.currentleaderdialog = ""; - self.currentleaderdialogtime = 0; - if ( !isDefined( self.pers[ "cur_kill_streak" ] ) ) - { - self.pers[ "cur_kill_streak" ] = 0; - } - if ( !isDefined( self.pers[ "cur_total_kill_streak" ] ) ) - { - self.pers[ "cur_total_kill_streak" ] = 0; - self setplayercurrentstreak( 0 ); - } - if ( !isDefined( self.pers[ "totalKillstreakCount" ] ) ) - { - self.pers[ "totalKillstreakCount" ] = 0; - } - if ( !isDefined( self.pers[ "killstreaksEarnedThisKillstreak" ] ) ) - { - self.pers[ "killstreaksEarnedThisKillstreak" ] = 0; - } - if ( isDefined( level.usingscorestreaks ) && level.usingscorestreaks && !isDefined( self.pers[ "killstreak_quantity" ] ) ) - { - self.pers[ "killstreak_quantity" ] = []; - } - if ( isDefined( level.usingscorestreaks ) && level.usingscorestreaks && !isDefined( self.pers[ "held_killstreak_ammo_count" ] ) ) - { - self.pers[ "held_killstreak_ammo_count" ] = []; - } - self.lastkilltime = 0; - self.cur_death_streak = 0; - self disabledeathstreak(); - self.death_streak = 0; - self.kill_streak = 0; - self.gametype_kill_streak = 0; - self.spawnqueueindex = -1; - self.deathtime = 0; - self.lastgrenadesuicidetime = -1; - self.teamkillsthisround = 0; - if ( isDefined( level.livesdonotreset ) || !level.livesdonotreset && !isDefined( self.pers[ "lives" ] ) ) - { - self.pers[ "lives" ] = level.numlives; - } - if ( !level.teambased ) - { - } - self.hasspawned = 0; - self.waitingtospawn = 0; - self.wantsafespawn = 0; - self.deathcount = 0; - self.wasaliveatmatchstart = 0; - level.players[ level.players.size ] = self; - if ( level.splitscreen ) - { - setdvar( "splitscreen_playerNum", level.players.size ); - } - if ( game[ "state" ] == "postgame" ) - { - self.pers[ "needteam" ] = 1; - self.pers[ "team" ] = "spectator"; - self.team = "spectator"; - self setclientuivisibilityflag( "hud_visible", 0 ); - self [[ level.spawnintermission ]](); - self closemenu(); - self closeingamemenu(); - profilelog_endtiming( 4, "gs=" + game[ "state" ] + " zom=" + sessionmodeiszombiesgame() ); - return; - } - if ( level.scr_zm_ui_gametype_group == "zencounter" ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "losses" ); - self updatestatratio( "wlratio", "wins", "losses" ); - self maps/mp/zombies/_zm_stats::add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "losses", 1 ); - } - else - { - if ( level.scr_zm_ui_gametype_group == "zsurvival" ) - { - if ( is_true( level.should_use_cia ) ) - { - self luinotifyevent( &"hud_update_survival_team", 1, 2 ); - } - } - } - level endon( "game_ended" ); - if ( isDefined( level.hostmigrationtimer ) ) - { - self thread maps/mp/gametypes_zm/_hostmigration::hostmigrationtimerthink(); - } - if ( level.oldschool ) - { - self.class = self.pers[ "class" ]; - } - if ( isDefined( self.pers[ "team" ] ) ) - { - self.team = self.pers[ "team" ]; - } - if ( isDefined( self.pers[ "class" ] ) ) - { - self.class = self.pers[ "class" ]; - } - if ( !isDefined( self.pers[ "team" ] ) || isDefined( self.pers[ "needteam" ] ) ) - { - self.pers[ "team" ] = "spectator"; - self.team = "spectator"; - self.sessionstate = "dead"; - self maps/mp/gametypes_zm/_globallogic_ui::updateobjectivetext(); - [[ level.spawnspectator ]](); - if ( level.rankedmatch ) - { - [[ level.autoassign ]]( 0 ); - self thread maps/mp/gametypes_zm/_globallogic_spawn::kickifdontspawn(); - } - else - { - [[ level.autoassign ]]( 0 ); - } - if ( self.pers[ "team" ] == "spectator" ) - { - self.sessionteam = "spectator"; - if ( !level.teambased ) - { - self.ffateam = "spectator"; - } - self thread spectate_player_watcher(); - } - if ( level.teambased ) - { - self.sessionteam = self.pers[ "team" ]; - if ( !isalive( self ) ) - { - self.statusicon = "hud_status_dead"; - } - self thread maps/mp/gametypes_zm/_spectating::setspectatepermissions(); - } - } - else - { - if ( self.pers[ "team" ] == "spectator" ) - { - self setclientscriptmainmenu( game[ "menu_class" ] ); - [[ level.spawnspectator ]](); - self.sessionteam = "spectator"; - self.sessionstate = "spectator"; - if ( !level.teambased ) - { - self.ffateam = "spectator"; - } - self thread spectate_player_watcher(); - } - else - { - self.sessionteam = self.pers[ "team" ]; - self.sessionstate = "dead"; - if ( !level.teambased ) - { - self.ffateam = self.pers[ "team" ]; - } - self maps/mp/gametypes_zm/_globallogic_ui::updateobjectivetext(); - [[ level.spawnspectator ]](); - if ( maps/mp/gametypes_zm/_globallogic_utils::isvalidclass( self.pers[ "class" ] ) ) - { - self thread [[ level.spawnclient ]](); - } - else - { - self maps/mp/gametypes_zm/_globallogic_ui::showmainmenuforteam(); - } - self thread maps/mp/gametypes_zm/_spectating::setspectatepermissions(); - } - } - if ( self.sessionteam != "spectator" ) - { - self thread maps/mp/gametypes_zm/_spawning::onspawnplayer_unified( 1 ); - } - profilelog_endtiming( 4, "gs=" + game[ "state" ] + " zom=" + sessionmodeiszombiesgame() ); - if ( isDefined( self.pers[ "isBot" ] ) ) - { - return; - } -} - -spectate_player_watcher() -{ - self endon( "disconnect" ); - self.watchingactiveclient = 1; - self.waitingforplayerstext = undefined; - while ( 1 ) - { - if ( self.pers[ "team" ] != "spectator" || level.gameended ) - { - self maps/mp/gametypes_zm/_hud_message::clearshoutcasterwaitingmessage(); -/# - println( " Unfreeze controls 1" ); -#/ - self freezecontrols( 0 ); - self.watchingactiveclient = 0; - return; - } - else if ( !level.splitscreen && !level.hardcoremode && getDvarInt( "scr_showperksonspawn" ) == 1 && game[ "state" ] != "postgame" && !isDefined( self.perkhudelem ) ) - { - if ( level.perksenabled == 1 ) - { - self maps/mp/gametypes_zm/_hud_util::showperks(); - } - self thread maps/mp/gametypes_zm/_globallogic_ui::hideloadoutaftertime( 0 ); - } - count = 0; - i = 0; - while ( i < level.players.size ) - { - if ( level.players[ i ].team != "spectator" ) - { - count++; - break; - } - else - { - i++; - } - } - if ( count > 0 ) - { - if ( !self.watchingactiveclient ) - { - self maps/mp/gametypes_zm/_hud_message::clearshoutcasterwaitingmessage(); - self freezecontrols( 0 ); -/# - println( " Unfreeze controls 2" ); -#/ - } - self.watchingactiveclient = 1; - } - else - { - if ( self.watchingactiveclient ) - { - [[ level.onspawnspectator ]](); - self freezecontrols( 1 ); - self maps/mp/gametypes_zm/_hud_message::setshoutcasterwaitingmessage(); - } - self.watchingactiveclient = 0; - } - wait 0,5; - } -} - -callback_playermigrated() -{ -/# - println( "Player " + self.name + " finished migrating at time " + getTime() ); -#/ - if ( isDefined( self.connected ) && self.connected ) - { - self maps/mp/gametypes_zm/_globallogic_ui::updateobjectivetext(); - } - self thread inform_clientvm_of_migration(); - level.hostmigrationreturnedplayercount++; - if ( level.hostmigrationreturnedplayercount >= ( ( level.players.size * 2 ) / 3 ) ) - { -/# - println( "2/3 of players have finished migrating" ); -#/ - level notify( "hostmigration_enoughplayers" ); - } -} - -inform_clientvm_of_migration() -{ - self endon( "disconnect" ); - wait 1; - self clientnotify( "hmo" ); -/# - println( "SERVER : Sent HMO to client " + self getentitynumber() ); -#/ -} - -callback_playerdisconnect() -{ - profilelog_begintiming( 5, "ship" ); - if ( game[ "state" ] != "postgame" && !level.gameended ) - { - gamelength = maps/mp/gametypes_zm/_globallogic::getgamelength(); - self maps/mp/gametypes_zm/_globallogic::bbplayermatchend( gamelength, "MP_PLAYER_DISCONNECT", 0 ); - } - self removeplayerondisconnect(); - if ( level.splitscreen ) - { - players = level.players; - if ( players.size <= 1 ) - { - level thread maps/mp/gametypes_zm/_globallogic::forceend(); - } - setdvar( "splitscreen_playerNum", players.size ); - } - if ( isDefined( self.score ) && isDefined( self.pers[ "team" ] ) ) - { - self logstring( "team: score " + self.pers[ "team" ] + ":" + self.score ); - level.dropteam += 1; - } - [[ level.onplayerdisconnect ]](); - lpselfnum = self getentitynumber(); - lpguid = self getguid(); - logprint( "Q;" + lpguid + ";" + lpselfnum + ";" + self.name + "\n" ); - entry = 0; - while ( entry < level.players.size ) - { - if ( level.players[ entry ] == self ) - { - while ( entry < ( level.players.size - 1 ) ) - { - level.players[ entry ] = level.players[ entry + 1 ]; - entry++; - } - break; - } - else - { - entry++; - } - } - entry = 0; - while ( entry < level.players.size ) - { - if ( isDefined( level.players[ entry ].pers[ "killed_players" ][ self.name ] ) ) - { - } - if ( isDefined( level.players[ entry ].killedplayerscurrent[ self.name ] ) ) - { - } - if ( isDefined( level.players[ entry ].pers[ "killed_by" ][ self.name ] ) ) - { - } - if ( isDefined( level.players[ entry ].pers[ "nemesis_tracking" ][ self.name ] ) ) - { - } - if ( level.players[ entry ].pers[ "nemesis_name" ] == self.name ) - { - level.players[ entry ] choosenextbestnemesis(); - } - entry++; - } - if ( level.gameended ) - { - self maps/mp/gametypes_zm/_globallogic::removedisconnectedplayerfromplacement(); - } - level thread maps/mp/gametypes_zm/_globallogic::updateteamstatus(); - profilelog_endtiming( 5, "gs=" + game[ "state" ] + " zom=" + sessionmodeiszombiesgame() ); -} - -callback_playermelee( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit ) -{ - hit = 1; - if ( level.teambased && self.team == eattacker.team ) - { - if ( level.friendlyfire == 0 ) - { - hit = 0; - } - } - self finishmeleehit( eattacker, sweapon, vorigin, vdir, boneindex, shieldhit, hit ); -} - -choosenextbestnemesis() -{ - nemesisarray = self.pers[ "nemesis_tracking" ]; - nemesisarraykeys = getarraykeys( nemesisarray ); - nemesisamount = 0; - nemesisname = ""; - while ( nemesisarraykeys.size > 0 ) - { - i = 0; - while ( i < nemesisarraykeys.size ) - { - nemesisarraykey = nemesisarraykeys[ i ]; - if ( nemesisarray[ nemesisarraykey ] > nemesisamount ) - { - nemesisname = nemesisarraykey; - nemesisamount = nemesisarray[ nemesisarraykey ]; - } - i++; - } - } - self.pers[ "nemesis_name" ] = nemesisname; - if ( nemesisname != "" ) - { - playerindex = 0; - while ( playerindex < level.players.size ) - { - if ( level.players[ playerindex ].name == nemesisname ) - { - nemesisplayer = level.players[ playerindex ]; - self.pers[ "nemesis_rank" ] = nemesisplayer.pers[ "rank" ]; - self.pers[ "nemesis_rankIcon" ] = nemesisplayer.pers[ "rankxp" ]; - self.pers[ "nemesis_xp" ] = nemesisplayer.pers[ "prestige" ]; - self.pers[ "nemesis_xuid" ] = nemesisplayer getxuid( 1 ); - break; - } - else - { - playerindex++; - } - } - } - else self.pers[ "nemesis_xuid" ] = ""; -} - -removeplayerondisconnect() -{ - entry = 0; - while ( entry < level.players.size ) - { - if ( level.players[ entry ] == self ) - { - while ( entry < ( level.players.size - 1 ) ) - { - level.players[ entry ] = level.players[ entry + 1 ]; - entry++; - } - return; - } - else - { - entry++; - } - } -} - -custom_gamemodes_modified_damage( victim, eattacker, idamage, smeansofdeath, sweapon, einflictor, shitloc ) -{ - if ( level.onlinegame && !sessionmodeisprivate() ) - { - return idamage; - } - if ( isDefined( eattacker ) && isDefined( eattacker.damagemodifier ) ) - { - idamage *= eattacker.damagemodifier; - } - if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) - { - idamage = int( idamage * level.bulletdamagescalar ); - } - return idamage; -} - -figureoutattacker( eattacker ) -{ - if ( isDefined( eattacker ) ) - { - if ( isai( eattacker ) && isDefined( eattacker.script_owner ) ) - { - team = self.team; - if ( isai( self ) && isDefined( self.aiteam ) ) - { - team = self.aiteam; - } - if ( eattacker.script_owner.team != team ) - { - eattacker = eattacker.script_owner; - } - } - if ( eattacker.classname == "script_vehicle" && isDefined( eattacker.owner ) ) - { - eattacker = eattacker.owner; - } - else - { - if ( eattacker.classname == "auto_turret" && isDefined( eattacker.owner ) ) - { - eattacker = eattacker.owner; - } - } - } - return eattacker; -} - -figureoutweapon( sweapon, einflictor ) -{ - if ( sweapon == "none" && isDefined( einflictor ) ) - { - if ( isDefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) - { - sweapon = "explodable_barrel_mp"; - } - else - { - if ( isDefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) - { - sweapon = "destructible_car_mp"; - } - } - } - return sweapon; -} - -isplayerimmunetokillstreak( eattacker, sweapon ) -{ - if ( level.hardcoremode ) - { - return 0; - } - if ( !isDefined( eattacker ) ) - { - return 0; - } - if ( self != eattacker ) - { - return 0; - } - if ( sweapon != "straferun_gun_mp" && sweapon != "straferun_rockets_mp" ) - { - return 0; - } - return 1; -} - -callback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) -{ - profilelog_begintiming( 6, "ship" ); - if ( game[ "state" ] == "postgame" ) - { - return; - } - if ( self.sessionteam == "spectator" ) - { - return; - } - if ( isDefined( self.candocombat ) && !self.candocombat ) - { - return; - } - if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( eattacker.candocombat ) && !eattacker.candocombat ) - { - return; - } - if ( isDefined( level.hostmigrationtimer ) ) - { - return; - } - if ( sweapon != "ai_tank_drone_gun_mp" && sweapon == "ai_tank_drone_rocket_mp" && !level.hardcoremode ) - { - if ( isDefined( eattacker ) && eattacker == self ) - { - if ( isDefined( einflictor ) && isDefined( einflictor.from_ai ) ) - { - return; - } - } - if ( isDefined( eattacker ) && isDefined( eattacker.owner ) && eattacker.owner == self ) - { - return; - } - } - if ( sweapon == "emp_grenade_mp" ) - { - self notify( "emp_grenaded" ); - } - idamage = custom_gamemodes_modified_damage( self, eattacker, idamage, smeansofdeath, sweapon, einflictor, shitloc ); - idamage = int( idamage ); - self.idflags = idflags; - self.idflagstime = getTime(); - eattacker = figureoutattacker( eattacker ); - pixbeginevent( "PlayerDamage flags/tweaks" ); - if ( !isDefined( vdir ) ) - { - idflags |= level.idflags_no_knockback; - } - friendly = 0; - if ( self.health != self.maxhealth ) - { - self notify( "snd_pain_player" ); - } - if ( isDefined( einflictor ) && isDefined( einflictor.script_noteworthy ) && einflictor.script_noteworthy == "ragdoll_now" ) - { - smeansofdeath = "MOD_FALLING"; - } - if ( maps/mp/gametypes_zm/_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) && isplayer( eattacker ) ) - { - smeansofdeath = "MOD_HEAD_SHOT"; - } - if ( level.onplayerdamage != ::maps/mp/gametypes_zm/_globallogic::blank ) - { - modifieddamage = [[ level.onplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); - if ( isDefined( modifieddamage ) ) - { - if ( modifieddamage <= 0 ) - { - return; - } - idamage = modifieddamage; - } - } - if ( level.onlyheadshots ) - { - if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) - { - return; - } - else - { - if ( smeansofdeath == "MOD_HEAD_SHOT" ) - { - idamage = 150; - } - } - } - if ( isDefined( eattacker ) && isplayer( eattacker ) && self.team != eattacker.team ) - { - self.lastattackweapon = sweapon; - } - sweapon = figureoutweapon( sweapon, einflictor ); - pixendevent(); - if ( isplayer( eattacker ) ) - { - attackerishittingteammate = self isenemyplayer( eattacker ) == 0; - } - if ( shitloc == "riotshield" ) - { - if ( attackerishittingteammate && level.friendlyfire == 0 ) - { - return; - } - if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" && !attackerishittingteammate ) - { - previous_shield_damage = self.shielddamageblocked; - self.shielddamageblocked += idamage; - if ( isplayer( eattacker ) ) - { - eattacker.lastattackedshieldplayer = self; - eattacker.lastattackedshieldtime = getTime(); - } - if ( ( self.shielddamageblocked % 400 ) < ( previous_shield_damage % 400 ) ) - { - score_event = "shield_blocked_damage"; - if ( self.shielddamageblocked > 2000 ) - { - score_event = "shield_blocked_damage_reduced"; - } - } - } - if ( idflags & level.idflags_shield_explosive_impact ) - { - shitloc = "none"; - if ( idflags & level.idflags_shield_explosive_impact_huge ) - { - idamage *= 0; - } - } - else if ( idflags & level.idflags_shield_explosive_splash ) - { - if ( isDefined( einflictor ) && isDefined( einflictor.stucktoplayer ) && einflictor.stucktoplayer == self ) - { - idamage = 101; - } - shitloc = "none"; - } - else - { - return; - } - } - if ( isDefined( eattacker ) && eattacker != self && !friendly ) - { - level.usestartspawns = 0; - } - pixbeginevent( "PlayerDamage log" ); -/# - if ( getDvarInt( "g_debugDamage" ) ) - { - println( "client:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); -#/ - } - if ( self.sessionstate != "dead" ) - { - lpselfnum = self getentitynumber(); - lpselfname = self.name; - lpselfteam = self.team; - lpselfguid = self getguid(); - lpattackerteam = ""; - lpattackerorigin = ( 0, 0, 0 ); - if ( isplayer( eattacker ) ) - { - lpattacknum = eattacker getentitynumber(); - lpattackguid = eattacker getguid(); - lpattackname = eattacker.name; - lpattackerteam = eattacker.team; - lpattackerorigin = eattacker.origin; - bbprint( "mpattacks", "gametime %d attackerspawnid %d attackerweapon %s attackerx %d attackery %d attackerz %d victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", getTime(), getplayerspawnid( eattacker ), sweapon, lpattackerorigin, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 0 ); - } - else - { - lpattacknum = -1; - lpattackguid = ""; - lpattackname = ""; - lpattackerteam = "world"; - bbprint( "mpattacks", "gametime %d attackerweapon %s victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", getTime(), sweapon, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 0 ); - } - logprint( "D;" + lpselfguid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\n" ); - } - pixendevent(); - profilelog_endtiming( 6, "gs=" + game[ "state" ] + " zom=" + sessionmodeiszombiesgame() ); -} - -resetattackerlist() -{ - self.attackers = []; - self.attackerdata = []; - self.attackerdamage = []; - self.firsttimedamaged = 0; -} - -dodamagefeedback( sweapon, einflictor, idamage, smeansofdeath ) -{ - if ( !isDefined( sweapon ) ) - { - return 0; - } - if ( level.allowhitmarkers == 0 ) - { - return 0; - } - if ( level.allowhitmarkers == 1 ) - { - if ( isDefined( smeansofdeath ) && isDefined( idamage ) ) - { - if ( istacticalhitmarker( sweapon, smeansofdeath, idamage ) ) - { - return 0; - } - } - } - return 1; -} - -istacticalhitmarker( sweapon, smeansofdeath, idamage ) -{ - if ( isgrenade( sweapon ) ) - { - if ( sweapon == "willy_pete_mp" ) - { - if ( smeansofdeath == "MOD_GRENADE_SPLASH" ) - { - return 1; - } - } - else - { - if ( idamage == 1 ) - { - return 1; - } - } - } - return 0; -} - -doperkfeedback( player, sweapon, smeansofdeath, einflictor ) -{ - perkfeedback = undefined; - return perkfeedback; -} - -isaikillstreakdamage( sweapon, einflictor ) -{ - switch( sweapon ) - { - case "ai_tank_drone_rocket_mp": - return isDefined( einflictor.firedbyai ); - case "missile_swarm_projectile_mp": - return 1; - case "planemortar_mp": - return 1; - case "chopper_minigun_mp": - return 1; - case "straferun_rockets_mp": - return 1; - case "littlebird_guard_minigun_mp": - return 1; - case "cobra_20mm_comlink_mp": - return 1; - } - return 0; -} - -finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) -{ - pixbeginevent( "finishPlayerDamageWrapper" ); - if ( !level.console && idflags & level.idflags_penetration && isplayer( eattacker ) ) - { -/# - println( "penetrated:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); -#/ - eattacker addplayerstat( "penetration_shots", 1 ); - } - self finishplayerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - if ( getDvar( #"C8077F47" ) != "" ) - { - self shellshock( "damage_mp", 0,2 ); - } - self damageshellshockandrumble( eattacker, einflictor, sweapon, smeansofdeath, idamage ); - pixendevent(); -} - -allowedassistweapon( weapon ) -{ - return 1; -} - -callback_playerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) -{ - profilelog_begintiming( 7, "ship" ); - self endon( "spawned" ); - self notify( "killed_player" ); - if ( self.sessionteam == "spectator" ) - { - return; - } - if ( game[ "state" ] == "postgame" ) - { - return; - } - self needsrevive( 0 ); - if ( isDefined( self.burning ) && self.burning == 1 ) - { - self setburn( 0 ); - } - self.suicide = 0; - if ( isDefined( level.takelivesondeath ) && level.takelivesondeath == 1 ) - { - if ( self.pers[ "lives" ] ) - { - self.pers[ "lives" ]--; - - if ( self.pers[ "lives" ] == 0 ) - { - level notify( "player_eliminated" ); - self notify( "player_eliminated" ); - } - } - } - self thread flushgroupdialogonplayer( "item_destroyed" ); - sweapon = updateweapon( einflictor, sweapon ); - pixbeginevent( "PlayerKilled pre constants" ); - wasinlaststand = 0; - deathtimeoffset = 0; - lastweaponbeforedroppingintolaststand = undefined; - attackerstance = undefined; - self.laststandthislife = undefined; - self.vattackerorigin = undefined; - if ( isDefined( self.uselaststandparams ) ) - { - self.uselaststandparams = undefined; -/# - assert( isDefined( self.laststandparams ) ); -#/ - if ( !level.teambased || isDefined( attacker ) && isplayer( attacker ) || attacker.team != self.team && attacker == self ) - { - einflictor = self.laststandparams.einflictor; - attacker = self.laststandparams.attacker; - attackerstance = self.laststandparams.attackerstance; - idamage = self.laststandparams.idamage; - smeansofdeath = self.laststandparams.smeansofdeath; - sweapon = self.laststandparams.sweapon; - vdir = self.laststandparams.vdir; - shitloc = self.laststandparams.shitloc; - self.vattackerorigin = self.laststandparams.vattackerorigin; - deathtimeoffset = ( getTime() - self.laststandparams.laststandstarttime ) / 1000; - if ( isDefined( self.previousprimary ) ) - { - wasinlaststand = 1; - lastweaponbeforedroppingintolaststand = self.previousprimary; - } - } - self.laststandparams = undefined; - } - bestplayer = undefined; - bestplayermeansofdeath = undefined; - obituarymeansofdeath = undefined; - bestplayerweapon = undefined; - obituaryweapon = undefined; - if ( isDefined( attacker ) && attacker.classname != "trigger_hurt" && attacker.classname != "worldspawn" && isDefined( attacker.ismagicbullet ) && attacker.ismagicbullet != 1 && attacker == self && isDefined( self.attackers ) ) - { - while ( !isDefined( bestplayer ) ) - { - i = 0; - while ( i < self.attackers.size ) - { - player = self.attackers[ i ]; - if ( !isDefined( player ) ) - { - i++; - continue; - } - else if ( !isDefined( self.attackerdamage[ player.clientid ] ) || !isDefined( self.attackerdamage[ player.clientid ].damage ) ) - { - i++; - continue; - } - else - { - if ( player == self || level.teambased && player.team == self.team ) - { - i++; - continue; - } - else - { - if ( ( self.attackerdamage[ player.clientid ].lasttimedamaged + 2500 ) < getTime() ) - { - i++; - continue; - } - else if ( !allowedassistweapon( self.attackerdamage[ player.clientid ].weapon ) ) - { - i++; - continue; - } - else if ( self.attackerdamage[ player.clientid ].damage > 1 && !isDefined( bestplayer ) ) - { - bestplayer = player; - bestplayermeansofdeath = self.attackerdamage[ player.clientid ].meansofdeath; - bestplayerweapon = self.attackerdamage[ player.clientid ].weapon; - i++; - continue; - } - else - { - if ( isDefined( bestplayer ) && self.attackerdamage[ player.clientid ].damage > self.attackerdamage[ bestplayer.clientid ].damage ) - { - bestplayer = player; - bestplayermeansofdeath = self.attackerdamage[ player.clientid ].meansofdeath; - bestplayerweapon = self.attackerdamage[ player.clientid ].weapon; - } - } - } - } - i++; - } - } - if ( isDefined( bestplayer ) ) - { - self recordkillmodifier( "assistedsuicide" ); - } - } - if ( isDefined( bestplayer ) ) - { - attacker = bestplayer; - obituarymeansofdeath = bestplayermeansofdeath; - obituaryweapon = bestplayerweapon; - } - if ( isplayer( attacker ) ) - { - } - if ( maps/mp/gametypes_zm/_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) && isplayer( attacker ) ) - { - attacker playlocalsound( "prj_bullet_impact_headshot_helmet_nodie_2d" ); - smeansofdeath = "MOD_HEAD_SHOT"; - } - self.deathtime = getTime(); - attacker = updateattacker( attacker, sweapon ); - einflictor = updateinflictor( einflictor ); - smeansofdeath = updatemeansofdeath( sweapon, smeansofdeath ); - if ( isDefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped == 1 ) - { - self detachshieldmodel( level.carriedshieldmodel, "tag_weapon_left" ); - self.hasriotshield = 0; - self.hasriotshieldequipped = 0; - } - self thread updateglobalbotkilledcounter(); - if ( isplayer( attacker ) && attacker != self || !level.teambased && level.teambased && self.team != attacker.team ) - { - self addweaponstat( sweapon, "deaths", 1 ); - if ( wasinlaststand && isDefined( lastweaponbeforedroppingintolaststand ) ) - { - weaponname = lastweaponbeforedroppingintolaststand; - } - else - { - weaponname = self.lastdroppableweapon; - } - if ( isDefined( weaponname ) && !issubstr( weaponname, "gl_" ) || issubstr( weaponname, "mk_" ) && issubstr( weaponname, "ft_" ) ) - { - weaponname = self.currentweapon; - } - if ( isDefined( weaponname ) ) - { - self addweaponstat( weaponname, "deathsDuringUse", 1 ); - } - if ( smeansofdeath != "MOD_FALLING" ) - { - attacker addweaponstat( sweapon, "kills", 1 ); - } - if ( smeansofdeath == "MOD_HEAD_SHOT" ) - { - attacker addweaponstat( sweapon, "headshots", 1 ); - } - } - if ( !isDefined( obituarymeansofdeath ) ) - { - obituarymeansofdeath = smeansofdeath; - } - if ( !isDefined( obituaryweapon ) ) - { - obituaryweapon = sweapon; - } - if ( !isplayer( attacker ) || self isenemyplayer( attacker ) == 0 ) - { - level notify( "reset_obituary_count" ); - level.lastobituaryplayercount = 0; - level.lastobituaryplayer = undefined; - } - else - { - if ( isDefined( level.lastobituaryplayer ) && level.lastobituaryplayer == attacker ) - { - level.lastobituaryplayercount++; - } - else - { - level notify( "reset_obituary_count" ); - level.lastobituaryplayer = attacker; - level.lastobituaryplayercount = 1; - } - if ( level.lastobituaryplayercount >= 4 ) - { - level notify( "reset_obituary_count" ); - level.lastobituaryplayercount = 0; - level.lastobituaryplayer = undefined; - } - } - overrideentitycamera = 0; - if ( level.teambased && isDefined( attacker.pers ) && self.team == attacker.team && obituarymeansofdeath == "MOD_GRENADE" && level.friendlyfire == 0 ) - { - obituary( self, self, obituaryweapon, obituarymeansofdeath ); - maps/mp/_demo::bookmark( "kill", getTime(), self, self, 0, einflictor, overrideentitycamera ); - } - else - { - obituary( self, attacker, obituaryweapon, obituarymeansofdeath ); - maps/mp/_demo::bookmark( "kill", getTime(), self, attacker, 0, einflictor, overrideentitycamera ); - } - if ( !level.ingraceperiod ) - { - self maps/mp/gametypes_zm/_weapons::dropscavengerfordeath( attacker ); - self maps/mp/gametypes_zm/_weapons::dropweaponfordeath( attacker ); - self maps/mp/gametypes_zm/_weapons::dropoffhand(); - } - maps/mp/gametypes_zm/_spawnlogic::deathoccured( self, attacker ); - self.sessionstate = "dead"; - self.statusicon = "hud_status_dead"; - self.killedplayerscurrent = []; - self.deathcount++; -/# - println( "players(" + self.clientid + ") death count ++: " + self.deathcount ); -#/ - if ( !isDefined( self.switching_teams ) ) - { - if ( isplayer( attacker ) && level.teambased && attacker != self && self.team == attacker.team ) - { - self.pers[ "cur_kill_streak" ] = 0; - self.pers[ "cur_total_kill_streak" ] = 0; - self.pers[ "totalKillstreakCount" ] = 0; - self.pers[ "killstreaksEarnedThisKillstreak" ] = 0; - self setplayercurrentstreak( 0 ); - } - else - { - self maps/mp/gametypes_zm/_globallogic_score::incpersstat( "deaths", 1, 1, 1 ); - self.deaths = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "deaths" ); - self updatestatratio( "kdratio", "kills", "deaths" ); - if ( self.pers[ "cur_kill_streak" ] > self.pers[ "best_kill_streak" ] ) - { - self.pers[ "best_kill_streak" ] = self.pers[ "cur_kill_streak" ]; - } - self.pers[ "kill_streak_before_death" ] = self.pers[ "cur_kill_streak" ]; - self.pers[ "cur_kill_streak" ] = 0; - self.pers[ "cur_total_kill_streak" ] = 0; - self.pers[ "totalKillstreakCount" ] = 0; - self.pers[ "killstreaksEarnedThisKillstreak" ] = 0; - self setplayercurrentstreak( 0 ); - self.cur_death_streak++; - if ( self.cur_death_streak > self.death_streak ) - { - if ( level.rankedmatch ) - { - self setdstat( "HighestStats", "death_streak", self.cur_death_streak ); - } - self.death_streak = self.cur_death_streak; - } - if ( self.cur_death_streak >= getDvarInt( "perk_deathStreakCountRequired" ) ) - { - self enabledeathstreak(); - } - } - } - else - { - self.pers[ "totalKillstreakCount" ] = 0; - self.pers[ "killstreaksEarnedThisKillstreak" ] = 0; - } - lpselfnum = self getentitynumber(); - lpselfname = self.name; - lpattackguid = ""; - lpattackname = ""; - lpselfteam = self.team; - lpselfguid = self getguid(); - lpattackteam = ""; - lpattackorigin = ( 0, 0, 0 ); - lpattacknum = -1; - awardassists = 0; - pixendevent(); - self resetplayermomentumondeath(); - if ( isplayer( attacker ) ) - { - lpattackguid = attacker getguid(); - lpattackname = attacker.name; - lpattackteam = attacker.team; - lpattackorigin = attacker.origin; - if ( attacker == self ) - { - dokillcam = 0; - self maps/mp/gametypes_zm/_globallogic_score::incpersstat( "suicides", 1 ); - self.suicides = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "suicides" ); - if ( smeansofdeath == "MOD_SUICIDE" && shitloc == "none" && self.throwinggrenade ) - { - self.lastgrenadesuicidetime = getTime(); - } - awardassists = 1; - self.suicide = 1; - if ( isDefined( self.friendlydamage ) ) - { - self iprintln( &"MP_FRIENDLY_FIRE_WILL_NOT" ); - if ( level.teamkillpointloss ) - { - scoresub = self [[ level.getteamkillscore ]]( einflictor, attacker, smeansofdeath, sweapon ); - maps/mp/gametypes_zm/_globallogic_score::_setplayerscore( attacker, maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( attacker ) - scoresub ); - } - } - } - else - { - pixbeginevent( "PlayerKilled attacker" ); - lpattacknum = attacker getentitynumber(); - dokillcam = 1; - if ( level.teambased && self.team == attacker.team && smeansofdeath == "MOD_GRENADE" && level.friendlyfire == 0 ) - { - } - else - { - if ( level.teambased && self.team == attacker.team ) - { - if ( !ignoreteamkills( sweapon, smeansofdeath ) ) - { - teamkill_penalty = self [[ level.getteamkillpenalty ]]( einflictor, attacker, smeansofdeath, sweapon ); - attacker maps/mp/gametypes_zm/_globallogic_score::incpersstat( "teamkills_nostats", teamkill_penalty, 0 ); - attacker maps/mp/gametypes_zm/_globallogic_score::incpersstat( "teamkills", 1 ); - attacker.teamkillsthisround++; - if ( level.teamkillpointloss ) - { - scoresub = self [[ level.getteamkillscore ]]( einflictor, attacker, smeansofdeath, sweapon ); - maps/mp/gametypes_zm/_globallogic_score::_setplayerscore( attacker, maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( attacker ) - scoresub ); - } - if ( maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() < 5000 ) - { - teamkilldelay = 1; - } - else if ( attacker.pers[ "teamkills_nostats" ] > 1 && maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() < ( 8000 + ( attacker.pers[ "teamkills_nostats" ] * 1000 ) ) ) - { - teamkilldelay = 1; - } - else - { - teamkilldelay = attacker teamkilldelay(); - } - if ( teamkilldelay > 0 ) - { - attacker.teamkillpunish = 1; - attacker suicide(); - if ( attacker shouldteamkillkick( teamkilldelay ) ) - { - attacker teamkillkick(); - } - attacker thread reduceteamkillsovertime(); - } - } - } - else - { - maps/mp/gametypes_zm/_globallogic_score::inctotalkills( attacker.team ); - attacker thread maps/mp/gametypes_zm/_globallogic_score::givekillstats( smeansofdeath, sweapon, self ); - if ( isalive( attacker ) ) - { - pixbeginevent( "killstreak" ); - if ( isDefined( einflictor ) || !isDefined( einflictor.requireddeathcount ) && attacker.deathcount == einflictor.requireddeathcount ) - { - shouldgivekillstreak = 0; - attacker.pers[ "cur_total_kill_streak" ]++; - attacker setplayercurrentstreak( attacker.pers[ "cur_total_kill_streak" ] ); - if ( isDefined( level.killstreaks ) && shouldgivekillstreak ) - { - attacker.pers[ "cur_kill_streak" ]++; - if ( attacker.pers[ "cur_kill_streak" ] >= 3 ) - { - if ( attacker.pers[ "cur_kill_streak" ] <= 30 ) - { - } - } - } - } - pixendevent(); - } - if ( attacker.pers[ "cur_kill_streak" ] > attacker.kill_streak ) - { - if ( level.rankedmatch ) - { - attacker setdstat( "HighestStats", "kill_streak", attacker.pers[ "totalKillstreakCount" ] ); - } - attacker.kill_streak = attacker.pers[ "cur_kill_streak" ]; - } - killstreak = undefined; - if ( isDefined( killstreak ) ) - { - } - else if ( smeansofdeath == "MOD_HEAD_SHOT" ) - { - } - else if ( smeansofdeath == "MOD_MELEE" ) - { - if ( sweapon == "riotshield_mp" ) - { - } - } - attacker thread maps/mp/gametypes_zm/_globallogic_score::trackattackerkill( self.name, self.pers[ "rank" ], self.pers[ "rankxp" ], self.pers[ "prestige" ], self getxuid( 1 ) ); - attackername = attacker.name; - self thread maps/mp/gametypes_zm/_globallogic_score::trackattackeedeath( attackername, attacker.pers[ "rank" ], attacker.pers[ "rankxp" ], attacker.pers[ "prestige" ], attacker getxuid( 1 ) ); - attacker thread maps/mp/gametypes_zm/_globallogic_score::inckillstreaktracker( sweapon ); - if ( level.teambased && attacker.team != "spectator" ) - { - if ( isai( attacker ) ) - { - maps/mp/gametypes_zm/_globallogic_score::giveteamscore( "kill", attacker.aiteam, attacker, self ); - } - else - { - maps/mp/gametypes_zm/_globallogic_score::giveteamscore( "kill", attacker.team, attacker, self ); - } - } - scoresub = level.deathpointloss; - if ( scoresub != 0 ) - { - maps/mp/gametypes_zm/_globallogic_score::_setplayerscore( self, maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( self ) - scoresub ); - } - level thread playkillbattlechatter( attacker, sweapon, self ); - if ( level.teambased ) - { - awardassists = 1; - } - } - } - pixendevent(); - } - } - else if ( isDefined( attacker ) || attacker.classname == "trigger_hurt" && attacker.classname == "worldspawn" ) - { - dokillcam = 0; - lpattacknum = -1; - lpattackguid = ""; - lpattackname = ""; - lpattackteam = "world"; - self maps/mp/gametypes_zm/_globallogic_score::incpersstat( "suicides", 1 ); - self.suicides = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "suicides" ); - awardassists = 1; - } - else - { - dokillcam = 0; - lpattacknum = -1; - lpattackguid = ""; - lpattackname = ""; - lpattackteam = "world"; - if ( isDefined( einflictor ) && isDefined( einflictor.killcament ) ) - { - dokillcam = 1; - lpattacknum = self getentitynumber(); - } - if ( isDefined( attacker ) && isDefined( attacker.team ) && isDefined( level.teams[ attacker.team ] ) ) - { - if ( attacker.team != self.team ) - { - if ( level.teambased ) - { - maps/mp/gametypes_zm/_globallogic_score::giveteamscore( "kill", attacker.team, attacker, self ); - } - } - } - awardassists = 1; - } - if ( sessionmodeiszombiesgame() ) - { - awardassists = 0; - } - if ( awardassists ) - { - pixbeginevent( "PlayerKilled assists" ); - while ( isDefined( self.attackers ) ) - { - j = 0; - while ( j < self.attackers.size ) - { - player = self.attackers[ j ]; - if ( !isDefined( player ) ) - { - j++; - continue; - } - else if ( player == attacker ) - { - j++; - continue; - } - else if ( player.team != lpattackteam ) - { - j++; - continue; - } - else - { - damage_done = self.attackerdamage[ player.clientid ].damage; - player thread maps/mp/gametypes_zm/_globallogic_score::processassist( self, damage_done, self.attackerdamage[ player.clientid ].weapon ); - } - j++; - } - } - if ( isDefined( self.lastattackedshieldplayer ) && isDefined( self.lastattackedshieldtime ) && self.lastattackedshieldplayer != attacker ) - { - if ( ( getTime() - self.lastattackedshieldtime ) < 4000 ) - { - self.lastattackedshieldplayer thread maps/mp/gametypes_zm/_globallogic_score::processshieldassist( self ); - } - } - pixendevent(); - } - pixbeginevent( "PlayerKilled post constants" ); - self.lastattacker = attacker; - self.lastdeathpos = self.origin; - if ( isDefined( attacker ) && isplayer( attacker ) && attacker != self || !level.teambased && attacker.team != self.team ) - { - self thread maps/mp/_challenges::playerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, shitloc, attackerstance ); - } - else - { - self notify( "playerKilledChallengesProcessed" ); - } - if ( isDefined( self.attackers ) ) - { - self.attackers = []; - } - if ( isplayer( attacker ) ) - { - bbprint( "mpattacks", "gametime %d attackerspawnid %d attackerweapon %s attackerx %d attackery %d attackerz %d victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", getTime(), getplayerspawnid( attacker ), sweapon, lpattackorigin, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 1 ); - } - else - { - bbprint( "mpattacks", "gametime %d attackerweapon %s victimspawnid %d victimx %d victimy %d victimz %d damage %d damagetype %s damagelocation %s death %d", getTime(), sweapon, getplayerspawnid( self ), self.origin, idamage, smeansofdeath, shitloc, 1 ); - } - logprint( "K;" + lpselfguid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\n" ); - attackerstring = "none"; - if ( isplayer( attacker ) ) - { - attackerstring = attacker getxuid() + "(" + lpattackname + ")"; - } - self logstring( "d " + smeansofdeath + "(" + sweapon + ") a:" + attackerstring + " d:" + idamage + " l:" + shitloc + " @ " + int( self.origin[ 0 ] ) + " " + int( self.origin[ 1 ] ) + " " + int( self.origin[ 2 ] ) ); - level thread maps/mp/gametypes_zm/_globallogic::updateteamstatus(); - killcamentity = self getkillcamentity( attacker, einflictor, sweapon ); - killcamentityindex = -1; - killcamentitystarttime = 0; - if ( isDefined( killcamentity ) ) - { - killcamentityindex = killcamentity getentitynumber(); - if ( isDefined( killcamentity.starttime ) ) - { - killcamentitystarttime = killcamentity.starttime; - } - else - { - killcamentitystarttime = killcamentity.birthtime; - } - if ( !isDefined( killcamentitystarttime ) ) - { - killcamentitystarttime = 0; - } - } - if ( isDefined( self.killstreak_waitamount ) && self.killstreak_waitamount > 0 ) - { - dokillcam = 0; - } - self maps/mp/gametypes_zm/_weapons::detachcarryobjectmodel(); - died_in_vehicle = 0; - if ( isDefined( self.diedonvehicle ) ) - { - died_in_vehicle = self.diedonvehicle; - } - pixendevent(); - pixbeginevent( "PlayerKilled body and gibbing" ); - if ( !died_in_vehicle ) - { - vattackerorigin = undefined; - if ( isDefined( attacker ) ) - { - vattackerorigin = attacker.origin; - } - ragdoll_now = 0; - if ( isDefined( self.usingvehicle ) && self.usingvehicle && isDefined( self.vehicleposition ) && self.vehicleposition == 1 ) - { - ragdoll_now = 1; - } - body = self cloneplayer( deathanimduration ); - self createdeadbody( idamage, smeansofdeath, sweapon, shitloc, vdir, vattackerorigin, deathanimduration, einflictor, ragdoll_now, body ); - } - pixendevent(); - thread maps/mp/gametypes_zm/_globallogic_spawn::spawnqueuedclient( self.team, attacker ); - self.switching_teams = undefined; - self.joining_team = undefined; - self.leaving_team = undefined; - self thread [[ level.onplayerkilled ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); - icb = 0; - while ( icb < level.onplayerkilledextraunthreadedcbs.size ) - { - self [[ level.onplayerkilledextraunthreadedcbs[ icb ] ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); - icb++; - } - self.wantsafespawn = 0; - perks = []; - killstreaks = maps/mp/gametypes_zm/_globallogic::getkillstreaks( attacker ); - if ( !isDefined( self.killstreak_waitamount ) ) - { - self thread [[ level.spawnplayerprediction ]](); - } - profilelog_endtiming( 7, "gs=" + game[ "state" ] + " zom=" + sessionmodeiszombiesgame() ); - wait 0,25; - weaponclass = getweaponclass( sweapon ); - self.cancelkillcam = 0; - defaultplayerdeathwatchtime = 1,75; - if ( isDefined( level.overrideplayerdeathwatchtimer ) ) - { - defaultplayerdeathwatchtime = [[ level.overrideplayerdeathwatchtimer ]]( defaultplayerdeathwatchtime ); - } - maps/mp/gametypes_zm/_globallogic_utils::waitfortimeornotifies( defaultplayerdeathwatchtime ); - self notify( "death_delay_finished" ); -/# - if ( getDvarInt( #"C1849218" ) != 0 ) - { - dokillcam = 1; - if ( lpattacknum < 0 ) - { - lpattacknum = self getentitynumber(); -#/ - } - } - if ( game[ "state" ] != "playing" ) - { - return; - } - self.respawntimerstarttime = getTime(); - if ( !self.cancelkillcam && dokillcam && level.killcam ) - { - if ( level.numliveslivesleft = self.pers[ "lives" ]; - timeuntilspawn = maps/mp/gametypes_zm/_globallogic_spawn::timeuntilspawn( 1 ); - && livesleft && timeuntilspawn <= 0 ) - { - willrespawnimmediately = !level.playerqueuedrespawn; - } - } - if ( game[ "state" ] != "playing" ) - { - self.sessionstate = "dead"; - self.spectatorclient = -1; - self.killcamtargetentity = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - return; - } - waittillkillstreakdone(); - if ( maps/mp/gametypes_zm/_globallogic_utils::isvalidclass( self.class ) ) - { - timepassed = undefined; - if ( isDefined( self.respawntimerstarttime ) ) - { - timepassed = ( getTime() - self.respawntimerstarttime ) / 1000; - } - self thread [[ level.spawnclient ]]( timepassed ); - self.respawntimerstarttime = undefined; - } -} - -updateglobalbotkilledcounter() -{ - if ( isDefined( self.pers[ "isBot" ] ) ) - { - level.globallarryskilled++; - } -} - -waittillkillstreakdone() -{ - if ( isDefined( self.killstreak_waitamount ) ) - { - starttime = getTime(); - waittime = self.killstreak_waitamount * 1000; - while ( getTime() < ( starttime + waittime ) && isDefined( self.killstreak_waitamount ) ) - { - wait 0,1; - } - wait 2; - self.killstreak_waitamount = undefined; - } -} - -teamkillkick() -{ - self maps/mp/gametypes_zm/_globallogic_score::incpersstat( "sessionbans", 1 ); - self endon( "disconnect" ); - waittillframeend; - playlistbanquantum = maps/mp/gametypes_zm/_tweakables::gettweakablevalue( "team", "teamkillerplaylistbanquantum" ); - playlistbanpenalty = maps/mp/gametypes_zm/_tweakables::gettweakablevalue( "team", "teamkillerplaylistbanpenalty" ); - if ( playlistbanquantum > 0 && playlistbanpenalty > 0 ) - { - timeplayedtotal = self getdstat( "playerstatslist", "time_played_total", "StatValue" ); - minutesplayed = timeplayedtotal / 60; - freebees = 2; - banallowance = int( floor( minutesplayed / playlistbanquantum ) ) + freebees; - if ( self.sessionbans > banallowance ) - { - self setdstat( "playerstatslist", "gametypeban", "StatValue", timeplayedtotal + ( playlistbanpenalty * 60 ) ); - } - } - if ( self is_bot() ) - { - level notify( "bot_kicked" ); - } - ban( self getentitynumber() ); - maps/mp/gametypes_zm/_globallogic_audio::leaderdialog( "kicked" ); -} - -teamkilldelay() -{ - teamkills = self.pers[ "teamkills_nostats" ]; - if ( level.minimumallowedteamkills < 0 || teamkills <= level.minimumallowedteamkills ) - { - return 0; - } - exceeded = teamkills - level.minimumallowedteamkills; - return level.teamkillspawndelay * exceeded; -} - -shouldteamkillkick( teamkilldelay ) -{ - if ( teamkilldelay && level.minimumallowedteamkills >= 0 ) - { - if ( maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() >= 5000 ) - { - return 1; - } - if ( self.pers[ "teamkills_nostats" ] > 1 ) - { - return 1; - } - } - return 0; -} - -reduceteamkillsovertime() -{ - timeperoneteamkillreduction = 20; - reductionpersecond = 1 / timeperoneteamkillreduction; - while ( 1 ) - { - if ( isalive( self ) ) - { - self.pers[ "teamkills_nostats" ] -= reductionpersecond; - if ( self.pers[ "teamkills_nostats" ] < level.minimumallowedteamkills ) - { - self.pers[ "teamkills_nostats" ] = level.minimumallowedteamkills; - return; - } - } - else - { - wait 1; - } - } -} - -ignoreteamkills( sweapon, smeansofdeath ) -{ - if ( sessionmodeiszombiesgame() ) - { - return 1; - } - if ( smeansofdeath == "MOD_MELEE" ) - { - return 0; - } - if ( sweapon == "briefcase_bomb_mp" ) - { - return 1; - } - if ( sweapon == "supplydrop_mp" ) - { - return 1; - } - return 0; -} - -callback_playerlaststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) -{ -} - -damageshellshockandrumble( eattacker, einflictor, sweapon, smeansofdeath, idamage ) -{ - self thread maps/mp/gametypes_zm/_weapons::onweapondamage( eattacker, einflictor, sweapon, smeansofdeath, idamage ); - self playrumbleonentity( "damage_heavy" ); -} - -createdeadbody( idamage, smeansofdeath, sweapon, shitloc, vdir, vattackerorigin, deathanimduration, einflictor, ragdoll_jib, body ) -{ - if ( smeansofdeath == "MOD_HIT_BY_OBJECT" && self getstance() == "prone" ) - { - self.body = body; - return; - } - if ( isDefined( level.ragdoll_override ) && self [[ level.ragdoll_override ]]() ) - { - return; - } - if ( !ragdoll_jib && !self isonladder() && !self ismantling() || smeansofdeath == "MOD_CRUSH" && smeansofdeath == "MOD_HIT_BY_OBJECT" ) - { - body startragdoll(); - } - if ( !self isonground() ) - { - if ( getDvarInt( "scr_disable_air_death_ragdoll" ) == 0 ) - { - body startragdoll(); - } - } - if ( self is_explosive_ragdoll( sweapon, einflictor ) ) - { - body start_explosive_ragdoll( vdir, sweapon ); - } - thread delaystartragdoll( body, shitloc, vdir, sweapon, einflictor, smeansofdeath ); - self.body = body; -} - -is_explosive_ragdoll( weapon, inflictor ) -{ - if ( !isDefined( weapon ) ) - { - return 0; - } - if ( weapon == "destructible_car_mp" || weapon == "explodable_barrel_mp" ) - { - return 1; - } - if ( weapon == "sticky_grenade_mp" || weapon == "explosive_bolt_mp" ) - { - if ( isDefined( inflictor ) && isDefined( inflictor.stucktoplayer ) ) - { - if ( inflictor.stucktoplayer == self ) - { - return 1; - } - } - } - return 0; -} - -start_explosive_ragdoll( dir, weapon ) -{ - if ( !isDefined( self ) ) - { - return; - } - x = randomintrange( 50, 100 ); - y = randomintrange( 50, 100 ); - z = randomintrange( 10, 20 ); - if ( isDefined( weapon ) || weapon == "sticky_grenade_mp" && weapon == "explosive_bolt_mp" ) - { - if ( isDefined( dir ) && lengthsquared( dir ) > 0 ) - { - x = dir[ 0 ] * x; - y = dir[ 1 ] * y; - } - } - else - { - if ( cointoss() ) - { - x *= -1; - } - if ( cointoss() ) - { - y *= -1; - } - } - self startragdoll(); - self launchragdoll( ( x, y, z ) ); -} - -notifyconnecting() -{ - waittillframeend; - if ( isDefined( self ) ) - { - level notify( "connecting" ); - } -} - -delaystartragdoll( ent, shitloc, vdir, sweapon, einflictor, smeansofdeath ) -{ - if ( isDefined( ent ) ) - { - deathanim = ent getcorpseanim(); - if ( animhasnotetrack( deathanim, "ignore_ragdoll" ) ) - { - return; - } - } - if ( level.oldschool ) - { - if ( !isDefined( vdir ) ) - { - vdir = ( 0, 0, 0 ); - } - explosionpos = ent.origin + ( 0, 0, maps/mp/gametypes_zm/_globallogic_utils::gethitlocheight( shitloc ) ); - explosionpos -= vdir * 20; - explosionradius = 40; - explosionforce = 0,75; - if ( smeansofdeath != "MOD_IMPACT" && smeansofdeath != "MOD_EXPLOSIVE" && !issubstr( smeansofdeath, "MOD_GRENADE" ) && !issubstr( smeansofdeath, "MOD_PROJECTILE" ) || shitloc == "head" && shitloc == "helmet" ) - { - explosionforce = 2,5; - } - ent startragdoll( 1 ); - wait 0,05; - if ( !isDefined( ent ) ) - { - return; - } - physicsexplosionsphere( explosionpos, explosionradius, explosionradius / 2, explosionforce ); - return; - } - wait 0,2; - if ( !isDefined( ent ) ) - { - return; - } - if ( ent isragdoll() ) - { - return; - } - deathanim = ent getcorpseanim(); - startfrac = 0,35; - if ( animhasnotetrack( deathanim, "start_ragdoll" ) ) - { - times = getnotetracktimes( deathanim, "start_ragdoll" ); - if ( isDefined( times ) ) - { - startfrac = times[ 0 ]; - } - } - waittime = startfrac * getanimlength( deathanim ); - wait waittime; - if ( isDefined( ent ) ) - { - ent startragdoll( 1 ); - } -} - -trackattackerdamage( eattacker, idamage, smeansofdeath, sweapon ) -{ -/# - assert( isplayer( eattacker ) ); -#/ - if ( self.attackerdata.size == 0 ) - { - self.firsttimedamaged = getTime(); - } - if ( !isDefined( self.attackerdata[ eattacker.clientid ] ) ) - { - self.attackerdamage[ eattacker.clientid ] = spawnstruct(); - self.attackerdamage[ eattacker.clientid ].damage = idamage; - self.attackerdamage[ eattacker.clientid ].meansofdeath = smeansofdeath; - self.attackerdamage[ eattacker.clientid ].weapon = sweapon; - self.attackerdamage[ eattacker.clientid ].time = getTime(); - self.attackers[ self.attackers.size ] = eattacker; - self.attackerdata[ eattacker.clientid ] = 0; - } - else - { - self.attackerdamage[ eattacker.clientid ].damage += idamage; - self.attackerdamage[ eattacker.clientid ].meansofdeath = smeansofdeath; - self.attackerdamage[ eattacker.clientid ].weapon = sweapon; - if ( !isDefined( self.attackerdamage[ eattacker.clientid ].time ) ) - { - self.attackerdamage[ eattacker.clientid ].time = getTime(); - } - } - self.attackerdamage[ eattacker.clientid ].lasttimedamaged = getTime(); - if ( maps/mp/gametypes_zm/_weapons::isprimaryweapon( sweapon ) ) - { - self.attackerdata[ eattacker.clientid ] = 1; - } -} - -giveinflictorownerassist( eattacker, einflictor, idamage, smeansofdeath, sweapon ) -{ - if ( !isDefined( einflictor ) ) - { - return; - } - if ( !isDefined( einflictor.owner ) ) - { - return; - } - if ( !isDefined( einflictor.ownergetsassist ) ) - { - return; - } - if ( !einflictor.ownergetsassist ) - { - return; - } -/# - assert( isplayer( einflictor.owner ) ); -#/ - self trackattackerdamage( einflictor.owner, idamage, smeansofdeath, sweapon ); -} - -updatemeansofdeath( sweapon, smeansofdeath ) -{ - switch( sweapon ) - { - case "crossbow_mp": - case "knife_ballistic_mp": - if ( smeansofdeath != "MOD_HEAD_SHOT" && smeansofdeath != "MOD_MELEE" ) - { - smeansofdeath = "MOD_PISTOL_BULLET"; - } - break; - case "dog_bite_mp": - smeansofdeath = "MOD_PISTOL_BULLET"; - break; - case "destructible_car_mp": - smeansofdeath = "MOD_EXPLOSIVE"; - break; - case "explodable_barrel_mp": - smeansofdeath = "MOD_EXPLOSIVE"; - break; - } - return smeansofdeath; -} - -updateattacker( attacker, weapon ) -{ - if ( isai( attacker ) && isDefined( attacker.script_owner ) ) - { - if ( !level.teambased || attacker.script_owner.team != self.team ) - { - attacker = attacker.script_owner; - } - } - if ( attacker.classname == "script_vehicle" && isDefined( attacker.owner ) ) - { - attacker notify( "killed" ); - attacker = attacker.owner; - } - if ( isai( attacker ) ) - { - attacker notify( "killed" ); - } - if ( isDefined( self.capturinglastflag ) && self.capturinglastflag == 1 ) - { - attacker.lastcapkiller = 1; - } - if ( isDefined( attacker ) && isDefined( weapon ) && weapon == "planemortar_mp" ) - { - if ( !isDefined( attacker.planemortarbda ) ) - { - attacker.planemortarbda = 0; - } - attacker.planemortarbda++; - } - return attacker; -} - -updateinflictor( einflictor ) -{ - if ( isDefined( einflictor ) && einflictor.classname == "script_vehicle" ) - { - einflictor notify( "killed" ); - if ( isDefined( einflictor.bda ) ) - { - einflictor.bda++; - } - } - return einflictor; -} - -updateweapon( einflictor, sweapon ) -{ - if ( sweapon == "none" && isDefined( einflictor ) ) - { - if ( isDefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) - { - sweapon = "explodable_barrel_mp"; - } - else - { - if ( isDefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) - { - sweapon = "destructible_car_mp"; - } - } - } - return sweapon; -} - -getclosestkillcamentity( attacker, killcamentities, depth ) -{ - if ( !isDefined( depth ) ) - { - depth = 0; - } - closestkillcament = undefined; - closestkillcamentindex = undefined; - closestkillcamentdist = undefined; - origin = undefined; - _a2792 = killcamentities; - killcamentindex = getFirstArrayKey( _a2792 ); - while ( isDefined( killcamentindex ) ) - { - killcament = _a2792[ killcamentindex ]; - if ( killcament == attacker ) - { - } - else - { - origin = killcament.origin; - if ( isDefined( killcament.offsetpoint ) ) - { - origin += killcament.offsetpoint; - } - dist = distancesquared( self.origin, origin ); - if ( !isDefined( closestkillcament ) || dist < closestkillcamentdist ) - { - closestkillcament = killcament; - closestkillcamentdist = dist; - closestkillcamentindex = killcamentindex; - } - } - killcamentindex = getNextArrayKey( _a2792, killcamentindex ); - } - if ( depth < 3 && isDefined( closestkillcament ) ) - { - if ( !bullettracepassed( closestkillcament.origin, self.origin, 0, self ) ) - { - betterkillcament = getclosestkillcamentity( attacker, killcamentities, depth + 1 ); - if ( isDefined( betterkillcament ) ) - { - closestkillcament = betterkillcament; - } - } - } - return closestkillcament; -} - -getkillcamentity( attacker, einflictor, sweapon ) -{ - if ( !isDefined( einflictor ) ) - { - return undefined; - } - if ( einflictor == attacker ) - { - if ( !isDefined( einflictor.ismagicbullet ) ) - { - return undefined; - } - if ( isDefined( einflictor.ismagicbullet ) && !einflictor.ismagicbullet ) - { - return undefined; - } - } - else - { - if ( isDefined( level.levelspecifickillcam ) ) - { - levelspecifickillcament = self [[ level.levelspecifickillcam ]](); - if ( isDefined( levelspecifickillcament ) ) - { - return levelspecifickillcament; - } - } - } - if ( sweapon == "m220_tow_mp" ) - { - return undefined; - } - if ( isDefined( einflictor.killcament ) ) - { - if ( einflictor.killcament == attacker ) - { - return undefined; - } - return einflictor.killcament; - } - else - { - if ( isDefined( einflictor.killcamentities ) ) - { - return getclosestkillcamentity( attacker, einflictor.killcamentities ); - } - } - if ( isDefined( einflictor.script_gameobjectname ) && einflictor.script_gameobjectname == "bombzone" ) - { - return einflictor.killcament; - } - return einflictor; -} - -playkillbattlechatter( attacker, sweapon, victim ) -{ -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_score.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_score.gsc deleted file mode 100644 index a5610a2..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_score.gsc +++ /dev/null @@ -1,873 +0,0 @@ -#include maps/mp/gametypes_zm/_globallogic_utils; -#include maps/mp/_challenges; -#include maps/mp/gametypes_zm/_globallogic_audio; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/gametypes_zm/_globallogic; -#include maps/mp/_bb; -#include maps/mp/_utility; -#include common_scripts/utility; - -updatematchbonusscores( winner ) -{ -} - -givematchbonus( scoretype, score ) -{ -} - -doskillupdate( winner ) -{ - skillupdate( winner, level.teambased ); -} - -gethighestscoringplayer() -{ - players = level.players; - winner = undefined; - tie = 0; - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ].score ) ) - { - i++; - continue; - } - else if ( players[ i ].score < 1 ) - { - i++; - continue; - } - else if ( !isDefined( winner ) || players[ i ].score > winner.score ) - { - winner = players[ i ]; - tie = 0; - i++; - continue; - } - else - { - if ( players[ i ].score == winner.score ) - { - tie = 1; - } - } - i++; - } - if ( tie || !isDefined( winner ) ) - { - return undefined; - } - else - { - return winner; - } -} - -resetscorechain() -{ - self notify( "reset_score_chain" ); - self.scorechain = 0; - self.rankupdatetotal = 0; -} - -scorechaintimer() -{ - self notify( "score_chain_timer" ); - self endon( "reset_score_chain" ); - self endon( "score_chain_timer" ); - self endon( "death" ); - self endon( "disconnect" ); - wait 20; - self thread resetscorechain(); -} - -roundtonearestfive( score ) -{ - rounding = score % 5; - if ( rounding <= 2 ) - { - return score - rounding; - } - else - { - return score + ( 5 - rounding ); - } -} - -giveplayermomentumnotification( score, label, descvalue, countstowardrampage ) -{ - rampagebonus = 0; - if ( isDefined( level.usingrampage ) && level.usingrampage ) - { - if ( countstowardrampage ) - { - if ( !isDefined( self.scorechain ) ) - { - self.scorechain = 0; - } - self.scorechain++; - self thread scorechaintimer(); - } - if ( isDefined( self.scorechain ) && self.scorechain >= 999 ) - { - rampagebonus = roundtonearestfive( int( ( score * level.rampagebonusscale ) + 0,5 ) ); - } - } - if ( score != 0 ) - { - self luinotifyevent( &"score_event", 3, label, score, rampagebonus ); - } - score += rampagebonus; - if ( score > 0 && self hasperk( "specialty_earnmoremomentum" ) ) - { - score = roundtonearestfive( int( ( score * getDvarFloat( "perk_killstreakMomentumMultiplier" ) ) + 0,5 ) ); - } - _setplayermomentum( self, self.pers[ "momentum" ] + score ); -} - -resetplayermomentumondeath() -{ - if ( isDefined( level.usingscorestreaks ) && level.usingscorestreaks ) - { - _setplayermomentum( self, 0 ); - self thread resetscorechain(); - } -} - -giveplayermomentum( event, player, victim, weapon, descvalue ) -{ -} - -giveplayerscore( event, player, victim, weapon, descvalue ) -{ - scorediff = 0; - momentum = player.pers[ "momentum" ]; - giveplayermomentum( event, player, victim, weapon, descvalue ); - newmomentum = player.pers[ "momentum" ]; - if ( level.overrideplayerscore ) - { - return 0; - } - pixbeginevent( "level.onPlayerScore" ); - score = player.pers[ "score" ]; - [[ level.onplayerscore ]]( event, player, victim ); - newscore = player.pers[ "score" ]; - pixendevent(); - bbprint( "mpplayerscore", "spawnid %d gametime %d type %s player %s delta %d deltamomentum %d team %s", getplayerspawnid( player ), getTime(), event, player.name, newscore - score, newmomentum - momentum, player.team ); - player maps/mp/_bb::bbaddtostat( "score", newscore - score ); - if ( score == newscore ) - { - return 0; - } - pixbeginevent( "givePlayerScore" ); - recordplayerstats( player, "score", newscore ); - scorediff = newscore - score; - player addplayerstatwithgametype( "score", scorediff ); - if ( isDefined( player.pers[ "lastHighestScore" ] ) && newscore > player.pers[ "lastHighestScore" ] ) - { - player setdstat( "HighestStats", "highest_score", newscore ); - } - pixendevent(); - return scorediff; -} - -default_onplayerscore( event, player, victim ) -{ -} - -_setplayerscore( player, score ) -{ -} - -_getplayerscore( player ) -{ - return player.pers[ "score" ]; -} - -_setplayermomentum( player, momentum ) -{ - momentum = clamp( momentum, 0, 2000 ); - oldmomentum = player.pers[ "momentum" ]; - if ( momentum == oldmomentum ) - { - return; - } - player maps/mp/_bb::bbaddtostat( "momentum", momentum - oldmomentum ); - if ( momentum > oldmomentum ) - { - highestmomentumcost = 0; - numkillstreaks = player.killstreak.size; - killstreaktypearray = []; - } - player.pers[ "momentum" ] = momentum; - player.momentum = player.pers[ "momentum" ]; -} - -_giveplayerkillstreakinternal( player, momentum, oldmomentum, killstreaktypearray ) -{ -} - -setplayermomentumdebug() -{ -/# - setdvar( "sv_momentumPercent", 0 ); - while ( 1 ) - { - wait 1; - momentumpercent = getdvarfloatdefault( "sv_momentumPercent", 0 ); - if ( momentumpercent != 0 ) - { - player = gethostplayer(); - if ( !isDefined( player ) ) - { - return; - } - if ( isDefined( player.killstreak ) ) - { - _setplayermomentum( player, int( 2000 * ( momentumpercent / 100 ) ) ); - } - } -#/ - } -} - -giveteamscore( event, team, player, victim ) -{ - if ( level.overrideteamscore ) - { - return; - } - pixbeginevent( "level.onTeamScore" ); - teamscore = game[ "teamScores" ][ team ]; - [[ level.onteamscore ]]( event, team ); - pixendevent(); - newscore = game[ "teamScores" ][ team ]; - bbprint( "mpteamscores", "gametime %d event %s team %d diff %d score %d", getTime(), event, team, newscore - teamscore, newscore ); - if ( teamscore == newscore ) - { - return; - } - updateteamscores( team ); - thread maps/mp/gametypes_zm/_globallogic::checkscorelimit(); -} - -giveteamscoreforobjective( team, score ) -{ - teamscore = game[ "teamScores" ][ team ]; - onteamscore( score, team ); - newscore = game[ "teamScores" ][ team ]; - bbprint( "mpteamobjscores", "gametime %d team %d diff %d score %d", getTime(), team, newscore - teamscore, newscore ); - if ( teamscore == newscore ) - { - return; - } - updateteamscores( team ); - thread maps/mp/gametypes_zm/_globallogic::checkscorelimit(); -} - -_setteamscore( team, teamscore ) -{ - if ( teamscore == game[ "teamScores" ][ team ] ) - { - return; - } - game[ "teamScores" ][ team ] = teamscore; - updateteamscores( team ); - thread maps/mp/gametypes_zm/_globallogic::checkscorelimit(); -} - -resetteamscores() -{ - while ( isDefined( level.roundscorecarry ) || level.roundscorecarry == 0 && maps/mp/_utility::isfirstround() ) - { - _a591 = level.teams; - _k591 = getFirstArrayKey( _a591 ); - while ( isDefined( _k591 ) ) - { - team = _a591[ _k591 ]; - game[ "teamScores" ][ team ] = 0; - _k591 = getNextArrayKey( _a591, _k591 ); - } - } - maps/mp/gametypes_zm/_globallogic_score::updateallteamscores(); -} - -resetallscores() -{ - resetteamscores(); - resetplayerscores(); -} - -resetplayerscores() -{ - players = level.players; - winner = undefined; - tie = 0; - i = 0; - while ( i < players.size ) - { - if ( isDefined( players[ i ].pers[ "score" ] ) ) - { - _setplayerscore( players[ i ], 0 ); - } - i++; - } -} - -updateteamscores( team ) -{ - setteamscore( team, game[ "teamScores" ][ team ] ); - level thread maps/mp/gametypes_zm/_globallogic::checkteamscorelimitsoon( team ); -} - -updateallteamscores() -{ - _a629 = level.teams; - _k629 = getFirstArrayKey( _a629 ); - while ( isDefined( _k629 ) ) - { - team = _a629[ _k629 ]; - updateteamscores( team ); - _k629 = getNextArrayKey( _a629, _k629 ); - } -} - -_getteamscore( team ) -{ - return game[ "teamScores" ][ team ]; -} - -gethighestteamscoreteam() -{ - score = 0; - winning_teams = []; - _a645 = level.teams; - _k645 = getFirstArrayKey( _a645 ); - while ( isDefined( _k645 ) ) - { - team = _a645[ _k645 ]; - team_score = game[ "teamScores" ][ team ]; - if ( team_score > score ) - { - score = team_score; - winning_teams = []; - } - if ( team_score == score ) - { - winning_teams[ team ] = team; - } - _k645 = getNextArrayKey( _a645, _k645 ); - } - return winning_teams; -} - -areteamarraysequal( teamsa, teamsb ) -{ - if ( teamsa.size != teamsb.size ) - { - return 0; - } - _a668 = teamsa; - _k668 = getFirstArrayKey( _a668 ); - while ( isDefined( _k668 ) ) - { - team = _a668[ _k668 ]; - if ( !isDefined( teamsb[ team ] ) ) - { - return 0; - } - _k668 = getNextArrayKey( _a668, _k668 ); - } - return 1; -} - -onteamscore( score, team ) -{ - game[ "teamScores" ][ team ] += score; - if ( level.scorelimit && game[ "teamScores" ][ team ] > level.scorelimit ) - { - game[ "teamScores" ][ team ] = level.scorelimit; - } - if ( level.splitscreen ) - { - return; - } - if ( level.scorelimit == 1 ) - { - return; - } - iswinning = gethighestteamscoreteam(); - if ( iswinning.size == 0 ) - { - return; - } - if ( ( getTime() - level.laststatustime ) < 5000 ) - { - return; - } - if ( areteamarraysequal( iswinning, level.waswinning ) ) - { - return; - } - level.laststatustime = getTime(); - while ( iswinning.size == 1 ) - { - _a707 = iswinning; - _k707 = getFirstArrayKey( _a707 ); - while ( isDefined( _k707 ) ) - { - team = _a707[ _k707 ]; - if ( isDefined( level.waswinning[ team ] ) ) - { - if ( level.waswinning.size == 1 ) - { - } - } - else - { - maps/mp/gametypes_zm/_globallogic_audio::leaderdialog( "lead_taken", team, "status" ); - } - _k707 = getNextArrayKey( _a707, _k707 ); - } - } - while ( level.waswinning.size == 1 ) - { - _a726 = level.waswinning; - _k726 = getFirstArrayKey( _a726 ); - while ( isDefined( _k726 ) ) - { - team = _a726[ _k726 ]; - if ( isDefined( iswinning[ team ] ) ) - { - if ( iswinning.size == 1 ) - { - } - else if ( level.waswinning.size > 1 ) - { - } - } - else - { - maps/mp/gametypes_zm/_globallogic_audio::leaderdialog( "lead_lost", team, "status" ); - } - _k726 = getNextArrayKey( _a726, _k726 ); - } - } - level.waswinning = iswinning; -} - -default_onteamscore( event, team ) -{ -} - -initpersstat( dataname, record_stats, init_to_stat_value ) -{ - if ( !isDefined( self.pers[ dataname ] ) ) - { - self.pers[ dataname ] = 0; - } - if ( !isDefined( record_stats ) || record_stats == 1 ) - { - recordplayerstats( self, dataname, int( self.pers[ dataname ] ) ); - } - if ( isDefined( init_to_stat_value ) && init_to_stat_value == 1 ) - { - self.pers[ dataname ] = self getdstat( "PlayerStatsList", dataname, "StatValue" ); - } -} - -getpersstat( dataname ) -{ - return self.pers[ dataname ]; -} - -incpersstat( dataname, increment, record_stats, includegametype ) -{ - pixbeginevent( "incPersStat" ); - self.pers[ dataname ] += increment; - if ( isDefined( includegametype ) && includegametype ) - { - self addplayerstatwithgametype( dataname, increment ); - } - else - { - self addplayerstat( dataname, increment ); - } - if ( !isDefined( record_stats ) || record_stats == 1 ) - { - self thread threadedrecordplayerstats( dataname ); - } - pixendevent(); -} - -threadedrecordplayerstats( dataname ) -{ - self endon( "disconnect" ); - waittillframeend; - recordplayerstats( self, dataname, self.pers[ dataname ] ); -} - -updatewinstats( winner ) -{ -} - -updatelossstats( loser ) -{ - loser addplayerstatwithgametype( "losses", 1 ); - loser updatestatratio( "wlratio", "wins", "losses" ); - loser notify( "loss" ); -} - -updatetiestats( loser ) -{ - loser addplayerstatwithgametype( "losses", -1 ); - loser addplayerstatwithgametype( "ties", 1 ); - loser updatestatratio( "wlratio", "wins", "losses" ); - loser setdstat( "playerstatslist", "cur_win_streak", "StatValue", 0 ); - loser notify( "tie" ); -} - -updatewinlossstats( winner ) -{ - if ( !waslastround() && !level.hostforcedend ) - { - return; - } - players = level.players; - if ( !isDefined( winner ) || isDefined( winner ) && !isplayer( winner ) && winner == "tie" ) - { - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ].pers[ "team" ] ) ) - { - i++; - continue; - } - else if ( level.hostforcedend && players[ i ] ishost() ) - { - i++; - continue; - } - else - { - updatetiestats( players[ i ] ); - } - i++; - } - } - else if ( isplayer( winner ) ) - { - if ( level.hostforcedend && winner ishost() ) - { - return; - } - updatewinstats( winner ); - } - else - { - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ].pers[ "team" ] ) ) - { - i++; - continue; - } - else if ( level.hostforcedend && players[ i ] ishost() ) - { - i++; - continue; - } - else - { - if ( winner == "tie" ) - { - updatetiestats( players[ i ] ); - i++; - continue; - } - else if ( players[ i ].pers[ "team" ] == winner ) - { - updatewinstats( players[ i ] ); - i++; - continue; - } - else - { - players[ i ] setdstat( "playerstatslist", "cur_win_streak", "StatValue", 0 ); - } - } - i++; - } - } -} - -backupandclearwinstreaks() -{ -} - -restorewinstreaks( winner ) -{ -} - -inckillstreaktracker( sweapon ) -{ - self endon( "disconnect" ); - waittillframeend; - if ( sweapon == "artillery_mp" ) - { - self.pers[ "artillery_kills" ]++; - } - if ( sweapon == "dog_bite_mp" ) - { - self.pers[ "dog_kills" ]++; - } -} - -trackattackerkill( name, rank, xp, prestige, xuid ) -{ - self endon( "disconnect" ); - attacker = self; - waittillframeend; - pixbeginevent( "trackAttackerKill" ); - if ( !isDefined( attacker.pers[ "killed_players" ][ name ] ) ) - { - attacker.pers[ "killed_players" ][ name ] = 0; - } - if ( !isDefined( attacker.killedplayerscurrent[ name ] ) ) - { - attacker.killedplayerscurrent[ name ] = 0; - } - if ( !isDefined( attacker.pers[ "nemesis_tracking" ][ name ] ) ) - { - attacker.pers[ "nemesis_tracking" ][ name ] = 0; - } - attacker.pers[ "killed_players" ][ name ]++; - attacker.killedplayerscurrent[ name ]++; - attacker.pers[ "nemesis_tracking" ][ name ] += 1; - if ( attacker.pers[ "nemesis_name" ] == name ) - { - attacker maps/mp/_challenges::killednemesis(); - } - if ( attacker.pers[ "nemesis_name" ] == "" || attacker.pers[ "nemesis_tracking" ][ name ] > attacker.pers[ "nemesis_tracking" ][ attacker.pers[ "nemesis_name" ] ] ) - { - attacker.pers[ "nemesis_name" ] = name; - attacker.pers[ "nemesis_rank" ] = rank; - attacker.pers[ "nemesis_rankIcon" ] = prestige; - attacker.pers[ "nemesis_xp" ] = xp; - attacker.pers[ "nemesis_xuid" ] = xuid; - } - else - { - if ( isDefined( attacker.pers[ "nemesis_name" ] ) && attacker.pers[ "nemesis_name" ] == name ) - { - attacker.pers[ "nemesis_rank" ] = rank; - attacker.pers[ "nemesis_xp" ] = xp; - } - } - pixendevent(); -} - -trackattackeedeath( attackername, rank, xp, prestige, xuid ) -{ - self endon( "disconnect" ); - waittillframeend; - pixbeginevent( "trackAttackeeDeath" ); - if ( !isDefined( self.pers[ "killed_by" ][ attackername ] ) ) - { - self.pers[ "killed_by" ][ attackername ] = 0; - } - self.pers[ "killed_by" ][ attackername ]++; - if ( !isDefined( self.pers[ "nemesis_tracking" ][ attackername ] ) ) - { - self.pers[ "nemesis_tracking" ][ attackername ] = 0; - } - self.pers[ "nemesis_tracking" ][ attackername ] += 1,5; - if ( self.pers[ "nemesis_name" ] == "" || self.pers[ "nemesis_tracking" ][ attackername ] > self.pers[ "nemesis_tracking" ][ self.pers[ "nemesis_name" ] ] ) - { - self.pers[ "nemesis_name" ] = attackername; - self.pers[ "nemesis_rank" ] = rank; - self.pers[ "nemesis_rankIcon" ] = prestige; - self.pers[ "nemesis_xp" ] = xp; - self.pers[ "nemesis_xuid" ] = xuid; - } - else - { - if ( isDefined( self.pers[ "nemesis_name" ] ) && self.pers[ "nemesis_name" ] == attackername ) - { - self.pers[ "nemesis_rank" ] = rank; - self.pers[ "nemesis_xp" ] = xp; - } - } - if ( self.pers[ "nemesis_name" ] == attackername && self.pers[ "nemesis_tracking" ][ attackername ] >= 2 ) - { - self setclientuivisibilityflag( "killcam_nemesis", 1 ); - } - else - { - self setclientuivisibilityflag( "killcam_nemesis", 0 ); - } - pixendevent(); -} - -default_iskillboosting() -{ - return 0; -} - -givekillstats( smeansofdeath, sweapon, evictim ) -{ - self endon( "disconnect" ); - waittillframeend; - if ( level.rankedmatch && self [[ level.iskillboosting ]]() ) - { -/# - self iprintlnbold( "GAMETYPE DEBUG: NOT GIVING YOU OFFENSIVE CREDIT AS BOOSTING PREVENTION" ); -#/ - return; - } - pixbeginevent( "giveKillStats" ); - self maps/mp/gametypes_zm/_globallogic_score::incpersstat( "kills", 1, 1, 1 ); - self.kills = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "kills" ); - self updatestatratio( "kdratio", "kills", "deaths" ); - attacker = self; - if ( smeansofdeath == "MOD_HEAD_SHOT" ) - { - attacker thread incpersstat( "headshots", 1, 1, 0 ); - attacker.headshots = attacker.pers[ "headshots" ]; - evictim recordkillmodifier( "headshot" ); - } - pixendevent(); -} - -inctotalkills( team ) -{ - if ( level.teambased && isDefined( level.teams[ team ] ) ) - { - game[ "totalKillsTeam" ][ team ]++; - } - game[ "totalKills" ]++; -} - -setinflictorstat( einflictor, eattacker, sweapon ) -{ - if ( !isDefined( eattacker ) ) - { - return; - } - if ( !isDefined( einflictor ) ) - { - eattacker addweaponstat( sweapon, "hits", 1 ); - return; - } - if ( !isDefined( einflictor.playeraffectedarray ) ) - { - einflictor.playeraffectedarray = []; - } - foundnewplayer = 1; - i = 0; - while ( i < einflictor.playeraffectedarray.size ) - { - if ( einflictor.playeraffectedarray[ i ] == self ) - { - foundnewplayer = 0; - break; - } - else - { - i++; - } - } - if ( foundnewplayer ) - { - einflictor.playeraffectedarray[ einflictor.playeraffectedarray.size ] = self; - if ( sweapon == "concussion_grenade_mp" || sweapon == "tabun_gas_mp" ) - { - eattacker addweaponstat( sweapon, "used", 1 ); - } - eattacker addweaponstat( sweapon, "hits", 1 ); - } -} - -processshieldassist( killedplayer ) -{ - self endon( "disconnect" ); - killedplayer endon( "disconnect" ); - wait 0,05; - maps/mp/gametypes_zm/_globallogic_utils::waittillslowprocessallowed(); - if ( !isDefined( level.teams[ self.pers[ "team" ] ] ) ) - { - return; - } - if ( self.pers[ "team" ] == killedplayer.pers[ "team" ] ) - { - return; - } - if ( !level.teambased ) - { - return; - } - self maps/mp/gametypes_zm/_globallogic_score::incpersstat( "assists", 1, 1, 1 ); - self.assists = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "assists" ); -} - -processassist( killedplayer, damagedone, weapon ) -{ - self endon( "disconnect" ); - killedplayer endon( "disconnect" ); - wait 0,05; - maps/mp/gametypes_zm/_globallogic_utils::waittillslowprocessallowed(); - if ( !isDefined( level.teams[ self.pers[ "team" ] ] ) ) - { - return; - } - if ( self.pers[ "team" ] == killedplayer.pers[ "team" ] ) - { - return; - } - if ( !level.teambased ) - { - return; - } - assist_level = "assist"; - assist_level_value = int( ceil( damagedone / 25 ) ); - if ( assist_level_value < 1 ) - { - assist_level_value = 1; - } - else - { - if ( assist_level_value > 3 ) - { - assist_level_value = 3; - } - } - assist_level = ( assist_level + "_" ) + ( assist_level_value * 25 ); - self maps/mp/gametypes_zm/_globallogic_score::incpersstat( "assists", 1, 1, 1 ); - self.assists = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "assists" ); - switch( weapon ) - { - case "concussion_grenade_mp": - assist_level = "assist_concussion"; - break; - case "flash_grenade_mp": - assist_level = "assist_flash"; - break; - case "emp_grenade_mp": - assist_level = "assist_emp"; - break; - case "proximity_grenade_aoe_mp": - case "proximity_grenade_mp": - assist_level = "assist_proximity"; - break; - } - self maps/mp/_challenges::assisted(); -} - -xpratethread() -{ -/# -#/ -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_spawn.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_spawn.gsc deleted file mode 100644 index fd882a8..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_spawn.gsc +++ /dev/null @@ -1,959 +0,0 @@ -#include maps/mp/gametypes_zm/_spawnlogic; -#include maps/mp/gametypes_zm/_globallogic_defaults; -#include maps/mp/gametypes_zm/_hostmigration; -#include maps/mp/gametypes_zm/_spectating; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/gametypes_zm/_globallogic_ui; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/gametypes_zm/_hud_message; -#include maps/mp/gametypes_zm/_globallogic; -#include maps/mp/gametypes_zm/_globallogic_utils; -#include maps/mp/gametypes_zm/_globallogic_audio; -#include maps/mp/gametypes_zm/_spawning; -#include maps/mp/gametypes_zm/_globallogic_player; -#include maps/mp/_utility; -#include common_scripts/utility; - -timeuntilspawn( includeteamkilldelay ) -{ - if ( level.ingraceperiod && !self.hasspawned ) - { - return 0; - } - respawndelay = 0; - if ( self.hasspawned ) - { - result = self [[ level.onrespawndelay ]](); - if ( isDefined( result ) ) - { - respawndelay = result; - } - else - { - respawndelay = level.playerrespawndelay; - } - if ( includeteamkilldelay && isDefined( self.teamkillpunish ) && self.teamkillpunish ) - { - respawndelay += maps/mp/gametypes_zm/_globallogic_player::teamkilldelay(); - } - } - wavebased = level.waverespawndelay > 0; - if ( wavebased ) - { - return self timeuntilwavespawn( respawndelay ); - } - return respawndelay; -} - -allteamshaveexisted() -{ - _a34 = level.teams; - _k34 = getFirstArrayKey( _a34 ); - while ( isDefined( _k34 ) ) - { - team = _a34[ _k34 ]; - if ( !level.everexisted[ team ] ) - { - return 0; - } - _k34 = getNextArrayKey( _a34, _k34 ); - } - return 1; -} - -mayspawn() -{ - if ( isDefined( level.mayspawn ) && !( self [[ level.mayspawn ]]() ) ) - { - return 0; - } - if ( level.inovertime ) - { - return 0; - } - if ( level.playerqueuedrespawn && !isDefined( self.allowqueuespawn ) && !level.ingraceperiod && !level.usestartspawns ) - { - return 0; - } - if ( level.numlives ) - { - if ( level.teambased ) - { - gamehasstarted = allteamshaveexisted(); - } - else - { - if ( level.maxplayercount > 1 ) - { - if ( !isoneround() ) - { - gamehasstarted = !isfirstround(); - } - } - } - if ( !self.pers[ "lives" ] && gamehasstarted ) - { - return 0; - } - else - { - if ( gamehasstarted ) - { - if ( !level.ingraceperiod && !self.hasspawned && !level.wagermatch ) - { - return 0; - } - } - } - } - return 1; -} - -timeuntilwavespawn( minimumwait ) -{ - earliestspawntime = getTime() + ( minimumwait * 1000 ); - lastwavetime = level.lastwave[ self.pers[ "team" ] ]; - wavedelay = level.wavedelay[ self.pers[ "team" ] ] * 1000; - if ( wavedelay == 0 ) - { - return 0; - } - numwavespassedearliestspawntime = ( earliestspawntime - lastwavetime ) / wavedelay; - numwaves = ceil( numwavespassedearliestspawntime ); - timeofspawn = lastwavetime + ( numwaves * wavedelay ); - if ( isDefined( self.wavespawnindex ) ) - { - timeofspawn += 50 * self.wavespawnindex; - } - return ( timeofspawn - getTime() ) / 1000; -} - -stoppoisoningandflareonspawn() -{ - self endon( "disconnect" ); - self.inpoisonarea = 0; - self.inburnarea = 0; - self.inflarevisionarea = 0; - self.ingroundnapalm = 0; -} - -spawnplayerprediction() -{ - self endon( "disconnect" ); - self endon( "end_respawn" ); - self endon( "game_ended" ); - self endon( "joined_spectators" ); - self endon( "spawned" ); - while ( 1 ) - { - wait 0,5; - if ( isDefined( level.onspawnplayerunified ) && getDvarInt( #"CF6EEB8B" ) == 0 ) - { - maps/mp/gametypes_zm/_spawning::onspawnplayer_unified( 1 ); - continue; - } - else - { - self [[ level.onspawnplayer ]]( 1 ); - } - } -} - -giveloadoutlevelspecific( team, class ) -{ - pixbeginevent( "giveLoadoutLevelSpecific" ); - if ( isDefined( level.givecustomcharacters ) ) - { - self [[ level.givecustomcharacters ]](); - } - if ( isDefined( level.givecustomloadout ) ) - { - self [[ level.givecustomloadout ]](); - } - pixendevent(); -} - -spawnplayer() -{ - pixbeginevent( "spawnPlayer_preUTS" ); - self endon( "disconnect" ); - self endon( "joined_spectators" ); - self notify( "spawned" ); - level notify( "player_spawned" ); - self notify( "end_respawn" ); - self setspawnvariables(); - if ( !self.hasspawned ) - { - self.underscorechance = 70; - self thread maps/mp/gametypes_zm/_globallogic_audio::sndstartmusicsystem(); - } - if ( level.teambased ) - { - self.sessionteam = self.team; - } - else - { - self.sessionteam = "none"; - self.ffateam = self.team; - } - hadspawned = self.hasspawned; - self.sessionstate = "playing"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.statusicon = ""; - self.damagedplayers = []; - if ( getDvarInt( #"C8077F47" ) > 0 ) - { - self.maxhealth = getDvarInt( #"C8077F47" ); - } - else - { - self.maxhealth = level.playermaxhealth; - } - self.health = self.maxhealth; - self.friendlydamage = undefined; - self.hasspawned = 1; - self.spawntime = getTime(); - self.afk = 0; - if ( self.pers[ "lives" ] || !isDefined( level.takelivesondeath ) && level.takelivesondeath == 0 ) - { - self.pers[ "lives" ]--; - - if ( self.pers[ "lives" ] == 0 ) - { - level notify( "player_eliminated" ); - self notify( "player_eliminated" ); - } - } - self.laststand = undefined; - self.revivingteammate = 0; - self.burning = undefined; - self.nextkillstreakfree = undefined; - self.activeuavs = 0; - self.activecounteruavs = 0; - self.activesatellites = 0; - self.deathmachinekills = 0; - self.disabledweapon = 0; - self resetusability(); - self maps/mp/gametypes_zm/_globallogic_player::resetattackerlist(); - self.diedonvehicle = undefined; - if ( !self.wasaliveatmatchstart ) - { - if ( level.ingraceperiod || maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() < 20000 ) - { - self.wasaliveatmatchstart = 1; - } - } - self setdepthoffield( 0, 0, 512, 512, 4, 0 ); - self resetfov(); - pixbeginevent( "onSpawnPlayer" ); - if ( isDefined( level.onspawnplayerunified ) && getDvarInt( #"CF6EEB8B" ) == 0 ) - { - self [[ level.onspawnplayerunified ]](); - } - else - { - self [[ level.onspawnplayer ]]( 0 ); - } - if ( isDefined( level.playerspawnedcb ) ) - { - self [[ level.playerspawnedcb ]](); - } - pixendevent(); - pixendevent(); - level thread maps/mp/gametypes_zm/_globallogic::updateteamstatus(); - pixbeginevent( "spawnPlayer_postUTS" ); - self thread stoppoisoningandflareonspawn(); - self stopburning(); -/# - assert( maps/mp/gametypes_zm/_globallogic_utils::isvalidclass( self.class ) ); -#/ - self giveloadoutlevelspecific( self.team, self.class ); - if ( level.inprematchperiod ) - { - self freeze_player_controls( 1 ); - team = self.pers[ "team" ]; - if ( isDefined( self.pers[ "music" ].spawn ) && self.pers[ "music" ].spawn == 0 ) - { - if ( level.wagermatch ) - { - music = "SPAWN_WAGER"; - } - else - { - music = game[ "music" ][ "spawn_" + team ]; - } - self thread maps/mp/gametypes_zm/_globallogic_audio::set_music_on_player( music, 0, 0 ); - self.pers[ "music" ].spawn = 1; - } - if ( level.splitscreen ) - { - if ( isDefined( level.playedstartingmusic ) ) - { - music = undefined; - } - else - { - level.playedstartingmusic = 1; - } - } - if ( !isDefined( level.disableprematchmessages ) || level.disableprematchmessages == 0 ) - { - thread maps/mp/gametypes_zm/_hud_message::showinitialfactionpopup( team ); - hintmessage = getobjectivehinttext( self.pers[ "team" ] ); - if ( isDefined( hintmessage ) ) - { - self thread maps/mp/gametypes_zm/_hud_message::hintmessage( hintmessage ); - } - if ( isDefined( game[ "dialog" ][ "gametype" ] ) || !level.splitscreen && self == level.players[ 0 ] ) - { - if ( !isDefined( level.infinalfight ) || !level.infinalfight ) - { - if ( level.hardcoremode ) - { - self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "gametype_hardcore" ); - } - else - { - self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "gametype" ); - } - } - } - if ( team == game[ "attackers" ] ) - { - self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "offense_obj", "introboost" ); - } - else - { - self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "defense_obj", "introboost" ); - } - } - } - else - { - self freeze_player_controls( 0 ); - self enableweapons(); - if ( !hadspawned && game[ "state" ] == "playing" ) - { - pixbeginevent( "sound" ); - team = self.team; - if ( isDefined( self.pers[ "music" ].spawn ) && self.pers[ "music" ].spawn == 0 ) - { - self thread maps/mp/gametypes_zm/_globallogic_audio::set_music_on_player( "SPAWN_SHORT", 0, 0 ); - self.pers[ "music" ].spawn = 1; - } - if ( level.splitscreen ) - { - if ( isDefined( level.playedstartingmusic ) ) - { - music = undefined; - } - else - { - level.playedstartingmusic = 1; - } - } - if ( !isDefined( level.disableprematchmessages ) || level.disableprematchmessages == 0 ) - { - thread maps/mp/gametypes_zm/_hud_message::showinitialfactionpopup( team ); - hintmessage = getobjectivehinttext( self.pers[ "team" ] ); - if ( isDefined( hintmessage ) ) - { - self thread maps/mp/gametypes_zm/_hud_message::hintmessage( hintmessage ); - } - if ( isDefined( game[ "dialog" ][ "gametype" ] ) || !level.splitscreen && self == level.players[ 0 ] ) - { - if ( !isDefined( level.infinalfight ) || !level.infinalfight ) - { - if ( level.hardcoremode ) - { - self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "gametype_hardcore" ); - } - else - { - self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "gametype" ); - } - } - } - if ( team == game[ "attackers" ] ) - { - self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "offense_obj", "introboost" ); - } - else - { - self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "defense_obj", "introboost" ); - } - } - pixendevent(); - } - } - if ( getDvar( "scr_showperksonspawn" ) == "" ) - { - setdvar( "scr_showperksonspawn", "0" ); - } - if ( level.hardcoremode ) - { - setdvar( "scr_showperksonspawn", "0" ); - } - if ( !level.splitscreen && getDvarInt( "scr_showperksonspawn" ) == 1 && game[ "state" ] != "postgame" ) - { - pixbeginevent( "showperksonspawn" ); - if ( level.perksenabled == 1 ) - { - self maps/mp/gametypes_zm/_hud_util::showperks(); - } - self thread maps/mp/gametypes_zm/_globallogic_ui::hideloadoutaftertime( 3 ); - self thread maps/mp/gametypes_zm/_globallogic_ui::hideloadoutondeath(); - pixendevent(); - } - if ( isDefined( self.pers[ "momentum" ] ) ) - { - self.momentum = self.pers[ "momentum" ]; - } - pixendevent(); - waittillframeend; - self notify( "spawned_player" ); - self logstring( "S " + self.origin[ 0 ] + " " + self.origin[ 1 ] + " " + self.origin[ 2 ] ); - setdvar( "scr_selecting_location", "" ); -/# - if ( getDvarInt( #"F8D00F60" ) > 0 ) - { - self thread maps/mp/gametypes_zm/_globallogic_score::xpratethread(); -#/ - } - self maps/mp/zombies/_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); - if ( game[ "state" ] == "postgame" ) - { -/# - assert( !level.intermission ); -#/ - self maps/mp/gametypes_zm/_globallogic_player::freezeplayerforroundend(); - } -} - -spawnspectator( origin, angles ) -{ - self notify( "spawned" ); - self notify( "end_respawn" ); - in_spawnspectator( origin, angles ); -} - -respawn_asspectator( origin, angles ) -{ - in_spawnspectator( origin, angles ); -} - -in_spawnspectator( origin, angles ) -{ - pixmarker( "BEGIN: in_spawnSpectator" ); - self setspawnvariables(); - if ( self.pers[ "team" ] == "spectator" ) - { - self clearlowermessage(); - } - self.sessionstate = "spectator"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - if ( self.pers[ "team" ] == "spectator" ) - { - self.statusicon = ""; - } - else - { - self.statusicon = "hud_status_dead"; - } - maps/mp/gametypes_zm/_spectating::setspectatepermissionsformachine(); - [[ level.onspawnspectator ]]( origin, angles ); - if ( level.teambased && !level.splitscreen ) - { - self thread spectatorthirdpersonness(); - } - level thread maps/mp/gametypes_zm/_globallogic::updateteamstatus(); - pixmarker( "END: in_spawnSpectator" ); -} - -spectatorthirdpersonness() -{ - self endon( "disconnect" ); - self endon( "spawned" ); - self notify( "spectator_thirdperson_thread" ); - self endon( "spectator_thirdperson_thread" ); - self.spectatingthirdperson = 0; -} - -forcespawn( time ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "spawned" ); - if ( !isDefined( time ) ) - { - time = 60; - } - wait time; - if ( self.hasspawned ) - { - return; - } - if ( self.pers[ "team" ] == "spectator" ) - { - return; - } - if ( !maps/mp/gametypes_zm/_globallogic_utils::isvalidclass( self.pers[ "class" ] ) ) - { - self.pers[ "class" ] = "CLASS_CUSTOM1"; - self.class = self.pers[ "class" ]; - } - self maps/mp/gametypes_zm/_globallogic_ui::closemenus(); - self thread [[ level.spawnclient ]](); -} - -kickifdontspawn() -{ -/# - if ( getDvarInt( "scr_hostmigrationtest" ) == 1 ) - { - return; -#/ - } - if ( self ishost() ) - { - return; - } - self kickifidontspawninternal(); -} - -kickifidontspawninternal() -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "spawned" ); - waittime = 90; - if ( getDvar( #"4257CF5C" ) != "" ) - { - waittime = getDvarFloat( #"4257CF5C" ); - } - mintime = 45; - if ( getDvar( #"0DF057E0" ) != "" ) - { - mintime = getDvarFloat( #"0DF057E0" ); - } - starttime = getTime(); - kickwait( waittime ); - timepassed = ( getTime() - starttime ) / 1000; - if ( timepassed < ( waittime - 0,1 ) && timepassed < mintime ) - { - return; - } - if ( self.hasspawned ) - { - return; - } - if ( sessionmodeisprivate() ) - { - return; - } - if ( self.pers[ "team" ] == "spectator" ) - { - return; - } - kick( self getentitynumber() ); -} - -kickwait( waittime ) -{ - level endon( "game_ended" ); - maps/mp/gametypes_zm/_hostmigration::waitlongdurationwithhostmigrationpause( waittime ); -} - -spawninterroundintermission() -{ - self notify( "spawned" ); - self notify( "end_respawn" ); - self setspawnvariables(); - self clearlowermessage(); - self freeze_player_controls( 0 ); - self.sessionstate = "spectator"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - self maps/mp/gametypes_zm/_globallogic_defaults::default_onspawnintermission(); - self setorigin( self.origin ); - self setplayerangles( self.angles ); - self setdepthoffield( 0, 128, 512, 4000, 6, 1,8 ); -} - -spawnintermission( usedefaultcallback ) -{ - self notify( "spawned" ); - self notify( "end_respawn" ); - self endon( "disconnect" ); - self setspawnvariables(); - self clearlowermessage(); - self freeze_player_controls( 0 ); - if ( level.rankedmatch && waslastround() ) - { - if ( !self.postgamemilestones || self.postgamecontracts && self.postgamepromotion ) - { - if ( self.postgamepromotion ) - { - self playlocalsound( "mus_level_up" ); - } - else if ( self.postgamecontracts ) - { - self playlocalsound( "mus_challenge_complete" ); - } - else - { - if ( self.postgamemilestones ) - { - self playlocalsound( "mus_contract_complete" ); - } - } - self closeingamemenu(); - self openmenu( game[ "menu_endgameupdate" ] ); - waittime = 4; - while ( waittime ) - { - wait 0,25; - waittime -= 0,25; - self openmenu( game[ "menu_endgameupdate" ] ); - } - self closemenu(); - } - } - self.sessionstate = "intermission"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - if ( isDefined( usedefaultcallback ) && usedefaultcallback ) - { - maps/mp/gametypes_zm/_globallogic_defaults::default_onspawnintermission(); - } - else - { - [[ level.onspawnintermission ]](); - } - self setdepthoffield( 0, 128, 512, 4000, 6, 1,8 ); -} - -spawnqueuedclientonteam( team ) -{ - player_to_spawn = undefined; - i = 0; - while ( i < level.deadplayers[ team ].size ) - { - player = level.deadplayers[ team ][ i ]; - if ( player.waitingtospawn ) - { - i++; - continue; - } - else - { - player_to_spawn = player; - break; - } - i++; - } - if ( isDefined( player_to_spawn ) ) - { - player_to_spawn.allowqueuespawn = 1; - player_to_spawn maps/mp/gametypes_zm/_globallogic_ui::closemenus(); - player_to_spawn thread [[ level.spawnclient ]](); - } -} - -spawnqueuedclient( dead_player_team, killer ) -{ - if ( !level.playerqueuedrespawn ) - { - return; - } - maps/mp/gametypes_zm/_globallogic_utils::waittillslowprocessallowed(); - spawn_team = undefined; - if ( isDefined( killer ) && isDefined( killer.team ) && isDefined( level.teams[ killer.team ] ) ) - { - spawn_team = killer.team; - } - if ( isDefined( spawn_team ) ) - { - spawnqueuedclientonteam( spawn_team ); - return; - } - _a746 = level.teams; - _k746 = getFirstArrayKey( _a746 ); - while ( isDefined( _k746 ) ) - { - team = _a746[ _k746 ]; - if ( team == dead_player_team ) - { - } - else - { - spawnqueuedclientonteam( team ); - } - _k746 = getNextArrayKey( _a746, _k746 ); - } -} - -allteamsnearscorelimit() -{ - if ( !level.teambased ) - { - return 0; - } - if ( level.scorelimit <= 1 ) - { - return 0; - } - _a763 = level.teams; - _k763 = getFirstArrayKey( _a763 ); - while ( isDefined( _k763 ) ) - { - team = _a763[ _k763 ]; - if ( ( level.scorelimit - 1 ) < game[ "teamScores" ][ team ] ) - { - return 0; - } - _k763 = getNextArrayKey( _a763, _k763 ); - } - return 1; -} - -shouldshowrespawnmessage() -{ - if ( waslastround() ) - { - return 0; - } - if ( isoneround() ) - { - return 0; - } - if ( isDefined( level.livesdonotreset ) && level.livesdonotreset ) - { - return 0; - } - if ( allteamsnearscorelimit() ) - { - return 0; - } - return 1; -} - -default_spawnmessage() -{ - setlowermessage( game[ "strings" ][ "spawn_next_round" ] ); - self thread maps/mp/gametypes_zm/_globallogic_ui::removespawnmessageshortly( 3 ); -} - -showspawnmessage() -{ - if ( shouldshowrespawnmessage() ) - { - self thread [[ level.spawnmessage ]](); - } -} - -spawnclient( timealreadypassed ) -{ - pixbeginevent( "spawnClient" ); -/# - assert( isDefined( self.team ) ); -#/ -/# - assert( maps/mp/gametypes_zm/_globallogic_utils::isvalidclass( self.class ) ); -#/ - if ( !self mayspawn() ) - { - currentorigin = self.origin; - currentangles = self.angles; - self showspawnmessage(); - self thread [[ level.spawnspectator ]]( currentorigin + vectorScale( ( 0, 0, 1 ), 60 ), currentangles ); - pixendevent(); - return; - } - if ( self.waitingtospawn ) - { - pixendevent(); - return; - } - self.waitingtospawn = 1; - self.allowqueuespawn = undefined; - self waitandspawnclient( timealreadypassed ); - if ( isDefined( self ) ) - { - self.waitingtospawn = 0; - } - pixendevent(); -} - -waitandspawnclient( timealreadypassed ) -{ - self endon( "disconnect" ); - self endon( "end_respawn" ); - level endon( "game_ended" ); - if ( !isDefined( timealreadypassed ) ) - { - timealreadypassed = 0; - } - spawnedasspectator = 0; - if ( isDefined( self.teamkillpunish ) && self.teamkillpunish ) - { - teamkilldelay = maps/mp/gametypes_zm/_globallogic_player::teamkilldelay(); - if ( teamkilldelay > timealreadypassed ) - { - teamkilldelay -= timealreadypassed; - timealreadypassed = 0; - } - else - { - timealreadypassed -= teamkilldelay; - teamkilldelay = 0; - } - if ( teamkilldelay > 0 ) - { - setlowermessage( &"MP_FRIENDLY_FIRE_WILL_NOT", teamkilldelay ); - self thread respawn_asspectator( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), self.angles ); - spawnedasspectator = 1; - wait teamkilldelay; - } - self.teamkillpunish = 0; - } - if ( !isDefined( self.wavespawnindex ) && isDefined( level.waveplayerspawnindex[ self.team ] ) ) - { - self.wavespawnindex = level.waveplayerspawnindex[ self.team ]; - level.waveplayerspawnindex[ self.team ]++; - } - timeuntilspawn = timeuntilspawn( 0 ); - if ( timeuntilspawn > timealreadypassed ) - { - timeuntilspawn -= timealreadypassed; - timealreadypassed = 0; - } - else - { - timealreadypassed -= timeuntilspawn; - timeuntilspawn = 0; - } - if ( timeuntilspawn > 0 ) - { - if ( level.playerqueuedrespawn ) - { - setlowermessage( game[ "strings" ][ "you_will_spawn" ], timeuntilspawn ); - } - else if ( self issplitscreen() ) - { - setlowermessage( game[ "strings" ][ "waiting_to_spawn_ss" ], timeuntilspawn, 1 ); - } - else - { - setlowermessage( game[ "strings" ][ "waiting_to_spawn" ], timeuntilspawn ); - } - if ( !spawnedasspectator ) - { - spawnorigin = self.origin + vectorScale( ( 0, 0, 1 ), 60 ); - spawnangles = self.angles; - if ( isDefined( level.useintermissionpointsonwavespawn ) && [[ level.useintermissionpointsonwavespawn ]]() == 1 ) - { - spawnpoint = maps/mp/gametypes_zm/_spawnlogic::getrandomintermissionpoint(); - if ( isDefined( spawnpoint ) ) - { - spawnorigin = spawnpoint.origin; - spawnangles = spawnpoint.angles; - } - } - self thread respawn_asspectator( spawnorigin, spawnangles ); - } - spawnedasspectator = 1; - self maps/mp/gametypes_zm/_globallogic_utils::waitfortimeornotify( timeuntilspawn, "force_spawn" ); - self notify( "stop_wait_safe_spawn_button" ); - } - wavebased = level.waverespawndelay > 0; - if ( !level.playerforcerespawn && self.hasspawned && !wavebased && !self.wantsafespawn && !level.playerqueuedrespawn ) - { - setlowermessage( game[ "strings" ][ "press_to_spawn" ] ); - if ( !spawnedasspectator ) - { - self thread respawn_asspectator( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), self.angles ); - } - spawnedasspectator = 1; - self waitrespawnorsafespawnbutton(); - } - self.waitingtospawn = 0; - self clearlowermessage(); - self.wavespawnindex = undefined; - self.respawntimerstarttime = undefined; - self thread [[ level.spawnplayer ]](); -} - -waitrespawnorsafespawnbutton() -{ - self endon( "disconnect" ); - self endon( "end_respawn" ); - while ( 1 ) - { - if ( self usebuttonpressed() ) - { - return; - } - else - { - wait 0,05; - } - } -} - -waitinspawnqueue() -{ - self endon( "disconnect" ); - self endon( "end_respawn" ); - if ( !level.ingraceperiod && !level.usestartspawns ) - { - currentorigin = self.origin; - currentangles = self.angles; - self thread [[ level.spawnspectator ]]( currentorigin + vectorScale( ( 0, 0, 1 ), 60 ), currentangles ); - self waittill( "queue_respawn" ); - } -} - -setthirdperson( value ) -{ - if ( !level.console ) - { - return; - } - if ( !isDefined( self.spectatingthirdperson ) || value != self.spectatingthirdperson ) - { - self.spectatingthirdperson = value; - if ( value ) - { - self setclientthirdperson( 1 ); - self setdepthoffield( 0, 128, 512, 4000, 6, 1,8 ); - } - else - { - self setclientthirdperson( 0 ); - self setdepthoffield( 0, 0, 512, 4000, 4, 0 ); - } - self resetfov(); - } -} - -setspawnvariables() -{ - resettimeout(); - self stopshellshock(); - self stoprumble( "damage_heavy" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_ui.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_ui.gsc deleted file mode 100644 index 00d91fe..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_ui.gsc +++ /dev/null @@ -1,544 +0,0 @@ -#include maps/mp/gametypes_zm/_globallogic_player; -#include maps/mp/gametypes_zm/_spectating; -#include maps/mp/gametypes_zm/_globallogic; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; - -init() -{ - precachestring( &"MP_HALFTIME" ); - precachestring( &"MP_OVERTIME" ); - precachestring( &"MP_ROUNDEND" ); - precachestring( &"MP_INTERMISSION" ); - precachestring( &"MP_SWITCHING_SIDES_CAPS" ); - precachestring( &"MP_FRIENDLY_FIRE_WILL_NOT" ); - precachestring( &"MP_RAMPAGE" ); - precachestring( &"medal_received" ); - precachestring( &"killstreak_received" ); - precachestring( &"prox_grenade_notify" ); - precachestring( &"player_callout" ); - precachestring( &"score_event" ); - precachestring( &"rank_up" ); - precachestring( &"gun_level_complete" ); - precachestring( &"challenge_complete" ); - if ( sessionmodeiszombiesgame() ) - { - precachestring( &"hud_update_survival_team" ); - } - if ( level.splitscreen ) - { - precachestring( &"MP_ENDED_GAME" ); - } - else - { - precachestring( &"MP_HOST_ENDED_GAME" ); - } -} - -setupcallbacks() -{ - level.autoassign = ::menuautoassign; - level.spectator = ::menuspectator; - level.class = ::menuclass; - level.teammenu = ::menuteam; -} - -hideloadoutaftertime( delay ) -{ - self endon( "disconnect" ); - self endon( "perks_hidden" ); - wait delay; - self thread hideallperks( 0,4 ); - self notify( "perks_hidden" ); -} - -hideloadoutondeath() -{ - self endon( "disconnect" ); - self endon( "perks_hidden" ); - self waittill( "death" ); - self hideallperks(); - self notify( "perks_hidden" ); -} - -hideloadoutonkill() -{ - self endon( "disconnect" ); - self endon( "death" ); - self endon( "perks_hidden" ); - self waittill( "killed_player" ); - self hideallperks(); - self notify( "perks_hidden" ); -} - -freegameplayhudelems() -{ - while ( isDefined( self.perkicon ) ) - { - numspecialties = 0; - while ( numspecialties < level.maxspecialties ) - { - if ( isDefined( self.perkicon[ numspecialties ] ) ) - { - self.perkicon[ numspecialties ] destroyelem(); - self.perkname[ numspecialties ] destroyelem(); - } - numspecialties++; - } - } - if ( isDefined( self.perkhudelem ) ) - { - self.perkhudelem destroyelem(); - } - if ( isDefined( self.killstreakicon ) ) - { - if ( isDefined( self.killstreakicon[ 0 ] ) ) - { - self.killstreakicon[ 0 ] destroyelem(); - } - if ( isDefined( self.killstreakicon[ 1 ] ) ) - { - self.killstreakicon[ 1 ] destroyelem(); - } - if ( isDefined( self.killstreakicon[ 2 ] ) ) - { - self.killstreakicon[ 2 ] destroyelem(); - } - if ( isDefined( self.killstreakicon[ 3 ] ) ) - { - self.killstreakicon[ 3 ] destroyelem(); - } - if ( isDefined( self.killstreakicon[ 4 ] ) ) - { - self.killstreakicon[ 4 ] destroyelem(); - } - } - self notify( "perks_hidden" ); - if ( isDefined( self.lowermessage ) ) - { - self.lowermessage destroyelem(); - } - if ( isDefined( self.lowertimer ) ) - { - self.lowertimer destroyelem(); - } - if ( isDefined( self.proxbar ) ) - { - self.proxbar destroyelem(); - } - if ( isDefined( self.proxbartext ) ) - { - self.proxbartext destroyelem(); - } - if ( isDefined( self.carryicon ) ) - { - self.carryicon destroyelem(); - } -} - -teamplayercountsequal( playercounts ) -{ - count = undefined; - _a150 = level.teams; - _k150 = getFirstArrayKey( _a150 ); - while ( isDefined( _k150 ) ) - { - team = _a150[ _k150 ]; - if ( !isDefined( count ) ) - { - count = playercounts[ team ]; - } - else - { - if ( count != playercounts[ team ] ) - { - return 0; - } - } - _k150 = getNextArrayKey( _a150, _k150 ); - } - return 1; -} - -teamwithlowestplayercount( playercounts, ignore_team ) -{ - count = 9999; - lowest_team = undefined; - _a169 = level.teams; - _k169 = getFirstArrayKey( _a169 ); - while ( isDefined( _k169 ) ) - { - team = _a169[ _k169 ]; - if ( count > playercounts[ team ] ) - { - count = playercounts[ team ]; - lowest_team = team; - } - _k169 = getNextArrayKey( _a169, _k169 ); - } - return lowest_team; -} - -menuautoassign( comingfrommenu ) -{ - teamkeys = getarraykeys( level.teams ); - assignment = teamkeys[ randomint( teamkeys.size ) ]; - self closemenus(); - if ( isDefined( level.forceallallies ) && level.forceallallies ) - { - assignment = "allies"; - } - else - { - if ( level.teambased ) - { - if ( getDvarInt( "party_autoteams" ) == 1 ) - { - if ( level.allow_teamchange == "1" || self.hasspawned && comingfrommenu ) - { - assignment = ""; - break; - } - else - { - team = getassignedteam( self ); - switch( team ) - { - case 1: - assignment = teamkeys[ 1 ]; - break; - case 2: - assignment = teamkeys[ 0 ]; - break; - case 3: - assignment = teamkeys[ 2 ]; - break; - case 4: - if ( !isDefined( level.forceautoassign ) || !level.forceautoassign ) - { - self setclientscriptmainmenu( game[ "menu_class" ] ); - return; - } - default: - assignment = ""; - if ( isDefined( level.teams[ team ] ) ) - { - assignment = team; - } - else - { - if ( team == "spectator" && !level.forceautoassign ) - { - self setclientscriptmainmenu( game[ "menu_class" ] ); - return; - } - } - } - } - } - if ( assignment == "" || getDvarInt( "party_autoteams" ) == 0 ) - { - if ( sessionmodeiszombiesgame() ) - { - assignment = "allies"; - } - } - if ( assignment == self.pers[ "team" ] || self.sessionstate == "playing" && self.sessionstate == "dead" ) - { - self beginclasschoice(); - return; - } - } - else if ( getDvarInt( "party_autoteams" ) == 1 ) - { - if ( level.allow_teamchange != "1" || !self.hasspawned && !comingfrommenu ) - { - team = getassignedteam( self ); - if ( isDefined( level.teams[ team ] ) ) - { - assignment = team; - } - else - { - if ( team == "spectator" && !level.forceautoassign ) - { - self setclientscriptmainmenu( game[ "menu_class" ] ); - return; - } - } - } - } - } - if ( assignment != self.pers[ "team" ] || self.sessionstate == "playing" && self.sessionstate == "dead" ) - { - self.switching_teams = 1; - self.joining_team = assignment; - self.leaving_team = self.pers[ "team" ]; - self suicide(); - } - self.pers[ "team" ] = assignment; - self.team = assignment; - self.class = undefined; - self updateobjectivetext(); - if ( level.teambased ) - { - self.sessionteam = assignment; - } - else - { - self.sessionteam = "none"; - self.ffateam = assignment; - } - if ( !isalive( self ) ) - { - self.statusicon = "hud_status_dead"; - } - self notify( "joined_team" ); - level notify( "joined_team" ); - self notify( "end_respawn" ); - self beginclasschoice(); - self setclientscriptmainmenu( game[ "menu_class" ] ); -} - -teamscoresequal() -{ - score = undefined; - _a413 = level.teams; - _k413 = getFirstArrayKey( _a413 ); - while ( isDefined( _k413 ) ) - { - team = _a413[ _k413 ]; - if ( !isDefined( score ) ) - { - score = getteamscore( team ); - } - else - { - if ( score != getteamscore( team ) ) - { - return 0; - } - } - _k413 = getNextArrayKey( _a413, _k413 ); - } - return 1; -} - -teamwithlowestscore() -{ - score = 99999999; - lowest_team = undefined; - _a432 = level.teams; - _k432 = getFirstArrayKey( _a432 ); - while ( isDefined( _k432 ) ) - { - team = _a432[ _k432 ]; - if ( score > getteamscore( team ) ) - { - lowest_team = team; - } - _k432 = getNextArrayKey( _a432, _k432 ); - } - return lowest_team; -} - -pickteamfromscores( teams ) -{ - assignment = "allies"; - if ( teamscoresequal() ) - { - assignment = teams[ randomint( teams.size ) ]; - } - else - { - assignment = teamwithlowestscore(); - } - return assignment; -} - -getsplitscreenteam() -{ - index = 0; - while ( index < level.players.size ) - { - if ( !isDefined( level.players[ index ] ) ) - { - index++; - continue; - } - else if ( level.players[ index ] == self ) - { - index++; - continue; - } - else if ( !self isplayeronsamemachine( level.players[ index ] ) ) - { - index++; - continue; - } - else - { - team = level.players[ index ].sessionteam; - if ( team != "spectator" ) - { - return team; - } - } - index++; - } - return ""; -} - -updateobjectivetext() -{ - if ( sessionmodeiszombiesgame() || self.pers[ "team" ] == "spectator" ) - { - self setclientcgobjectivetext( "" ); - return; - } - if ( level.scorelimit > 0 ) - { - self setclientcgobjectivetext( getobjectivescoretext( self.pers[ "team" ] ) ); - } - else - { - self setclientcgobjectivetext( getobjectivetext( self.pers[ "team" ] ) ); - } -} - -closemenus() -{ - self closemenu(); - self closeingamemenu(); -} - -beginclasschoice( forcenewchoice ) -{ -/# - assert( isDefined( level.teams[ self.pers[ "team" ] ] ) ); -#/ - team = self.pers[ "team" ]; - if ( level.disablecac == 1 ) - { - self.pers[ "class" ] = level.defaultclass; - self.class = level.defaultclass; - if ( self.sessionstate != "playing" && game[ "state" ] == "playing" ) - { - self thread [[ level.spawnclient ]](); - } - level thread maps/mp/gametypes_zm/_globallogic::updateteamstatus(); - self thread maps/mp/gametypes_zm/_spectating::setspectatepermissionsformachine(); - return; - } - if ( level.wagermatch ) - { - self openmenu( game[ "menu_changeclass_wager" ] ); - } - else if ( getDvarInt( "barebones_class_mode" ) ) - { - self openmenu( game[ "menu_changeclass_barebones" ] ); - } - else - { - self openmenu( game[ "menu_changeclass_" + team ] ); - } -} - -showmainmenuforteam() -{ -/# - assert( isDefined( level.teams[ self.pers[ "team" ] ] ) ); -#/ - team = self.pers[ "team" ]; - if ( level.wagermatch ) - { - self openmenu( game[ "menu_changeclass_wager" ] ); - } - else - { - self openmenu( game[ "menu_changeclass_" + team ] ); - } -} - -menuteam( team ) -{ - self closemenus(); - if ( !level.console && level.allow_teamchange == "0" && isDefined( self.hasdonecombat ) && self.hasdonecombat ) - { - return; - } - if ( self.pers[ "team" ] != team ) - { - if ( level.ingraceperiod || !isDefined( self.hasdonecombat ) && !self.hasdonecombat ) - { - self.hasspawned = 0; - } - if ( self.sessionstate == "playing" ) - { - self.switching_teams = 1; - self.joining_team = team; - self.leaving_team = self.pers[ "team" ]; - self suicide(); - } - self.pers[ "team" ] = team; - self.team = team; - self.class = undefined; - self updateobjectivetext(); - if ( level.teambased ) - { - self.sessionteam = team; - } - else - { - self.sessionteam = "none"; - self.ffateam = team; - } - self setclientscriptmainmenu( game[ "menu_class" ] ); - self notify( "joined_team" ); - level notify( "joined_team" ); - self notify( "end_respawn" ); - } - self beginclasschoice(); -} - -menuspectator() -{ - self closemenus(); - if ( self.pers[ "team" ] != "spectator" ) - { - if ( isalive( self ) ) - { - self.switching_teams = 1; - self.joining_team = "spectator"; - self.leaving_team = self.pers[ "team" ]; - self suicide(); - } - self.pers[ "team" ] = "spectator"; - self.team = "spectator"; - self.class = undefined; - self updateobjectivetext(); - self.sessionteam = "spectator"; - if ( !level.teambased ) - { - self.ffateam = "spectator"; - } - [[ level.spawnspectator ]](); - self thread maps/mp/gametypes_zm/_globallogic_player::spectate_player_watcher(); - self setclientscriptmainmenu( game[ "menu_class" ] ); - self notify( "joined_spectators" ); - } -} - -menuclass( response ) -{ - self closemenus(); -} - -removespawnmessageshortly( delay ) -{ - self endon( "disconnect" ); - waittillframeend; - self endon( "end_respawn" ); - wait delay; - self clearlowermessage( 2 ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_utils.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_utils.gsc deleted file mode 100644 index 4de74a7..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_utils.gsc +++ /dev/null @@ -1,478 +0,0 @@ -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/gametypes_zm/_hostmigration; -#include maps/mp/gametypes_zm/_hud_message; -#include maps/mp/_utility; - -waittillslowprocessallowed() -{ - while ( level.lastslowprocessframe == getTime() ) - { - wait 0,05; - } - level.lastslowprocessframe = getTime(); -} - -testmenu() -{ - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - wait 10; - notifydata = spawnstruct(); - notifydata.titletext = &"MP_CHALLENGE_COMPLETED"; - notifydata.notifytext = "wheee"; - notifydata.sound = "mp_challenge_complete"; - self thread maps/mp/gametypes_zm/_hud_message::notifymessage( notifydata ); - } -} - -testshock() -{ - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - wait 3; - numshots = randomint( 6 ); - i = 0; - while ( i < numshots ) - { - iprintlnbold( numshots ); - self shellshock( "frag_grenade_mp", 0,2 ); - wait 0,1; - i++; - } - } -} - -testhps() -{ - self endon( "death" ); - self endon( "disconnect" ); - hps = []; - hps[ hps.size ] = "radar_mp"; - hps[ hps.size ] = "artillery_mp"; - hps[ hps.size ] = "dogs_mp"; - for ( ;; ) - { - hp = "radar_mp"; - wait 20; - } -} - -timeuntilroundend() -{ - if ( level.gameended ) - { - timepassed = ( getTime() - level.gameendtime ) / 1000; - timeremaining = level.postroundtime - timepassed; - if ( timeremaining < 0 ) - { - return 0; - } - return timeremaining; - } - if ( level.inovertime ) - { - return undefined; - } - if ( level.timelimit <= 0 ) - { - return undefined; - } - if ( !isDefined( level.starttime ) ) - { - return undefined; - } - timepassed = ( gettimepassed() - level.starttime ) / 1000; - timeremaining = ( level.timelimit * 60 ) - timepassed; - return timeremaining + level.postroundtime; -} - -gettimeremaining() -{ - return ( ( level.timelimit * 60 ) * 1000 ) - gettimepassed(); -} - -registerpostroundevent( eventfunc ) -{ - if ( !isDefined( level.postroundevents ) ) - { - level.postroundevents = []; - } - level.postroundevents[ level.postroundevents.size ] = eventfunc; -} - -executepostroundevents() -{ - if ( !isDefined( level.postroundevents ) ) - { - return; - } - i = 0; - while ( i < level.postroundevents.size ) - { - [[ level.postroundevents[ i ] ]](); - i++; - } -} - -getvalueinrange( value, minvalue, maxvalue ) -{ - if ( value > maxvalue ) - { - return maxvalue; - } - else - { - if ( value < minvalue ) - { - return minvalue; - } - else - { - return value; - } - } -} - -assertproperplacement() -{ -/# - numplayers = level.placement[ "all" ].size; - i = 0; - while ( i < ( numplayers - 1 ) ) - { - if ( isDefined( level.placement[ "all" ][ i ] ) && isDefined( level.placement[ "all" ][ i + 1 ] ) ) - { - if ( level.placement[ "all" ][ i ].score < level.placement[ "all" ][ i + 1 ].score ) - { - println( "^1Placement array:" ); - i = 0; - while ( i < numplayers ) - { - player = level.placement[ "all" ][ i ]; - println( "^1" + i + ". " + player.name + ": " + player.score ); - i++; - } - assertmsg( "Placement array was not properly sorted" ); - return; - } - } - else - { - i++; -#/ - } - } -} - -isvalidclass( class ) -{ - if ( level.oldschool || sessionmodeiszombiesgame() ) - { -/# - assert( !isDefined( class ) ); -#/ - return 1; - } - if ( isDefined( class ) ) - { - return class != ""; - } -} - -playtickingsound( gametype_tick_sound ) -{ - self endon( "death" ); - self endon( "stop_ticking" ); - level endon( "game_ended" ); - time = level.bombtimer; - while ( 1 ) - { - self playsound( gametype_tick_sound ); - if ( time > 10 ) - { - time -= 1; - wait 1; - } - else if ( time > 4 ) - { - time -= 0,5; - wait 0,5; - } - else if ( time > 1 ) - { - time -= 0,4; - wait 0,4; - } - else - { - time -= 0,3; - wait 0,3; - } - maps/mp/gametypes_zm/_hostmigration::waittillhostmigrationdone(); - } -} - -stoptickingsound() -{ - self notify( "stop_ticking" ); -} - -gametimer() -{ - level endon( "game_ended" ); - level waittill( "prematch_over" ); - level.starttime = getTime(); - level.discardtime = 0; - if ( isDefined( game[ "roundMillisecondsAlreadyPassed" ] ) ) - { - level.starttime -= game[ "roundMillisecondsAlreadyPassed" ]; - } - prevtime = getTime(); - while ( game[ "state" ] == "playing" ) - { - if ( !level.timerstopped ) - { - game[ "timepassed" ] += getTime() - prevtime; - } - prevtime = getTime(); - wait 1; - } -} - -gettimepassed() -{ - if ( !isDefined( level.starttime ) ) - { - return 0; - } - if ( level.timerstopped ) - { - return level.timerpausetime - level.starttime - level.discardtime; - } - else - { - return getTime() - level.starttime - level.discardtime; - } -} - -pausetimer() -{ - if ( level.timerstopped ) - { - return; - } - level.timerstopped = 1; - level.timerpausetime = getTime(); -} - -resumetimer() -{ - if ( !level.timerstopped ) - { - return; - } - level.timerstopped = 0; - level.discardtime += getTime() - level.timerpausetime; -} - -getscoreremaining( team ) -{ -/# - if ( !isplayer( self ) ) - { - assert( isDefined( team ) ); - } -#/ - scorelimit = level.scorelimit; - if ( isplayer( self ) ) - { - return scorelimit - maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( self ); - } - else - { - return scorelimit - getteamscore( team ); - } -} - -getscoreperminute( team ) -{ -/# - if ( !isplayer( self ) ) - { - assert( isDefined( team ) ); - } -#/ - scorelimit = level.scorelimit; - timelimit = level.timelimit; - minutespassed = ( gettimepassed() / 60000 ) + 0,0001; - if ( isplayer( self ) ) - { - return maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( self ) / minutespassed; - } - else - { - return getteamscore( team ) / minutespassed; - } -} - -getestimatedtimeuntilscorelimit( team ) -{ -/# - if ( !isplayer( self ) ) - { - assert( isDefined( team ) ); - } -#/ - scoreperminute = self getscoreperminute( team ); - scoreremaining = self getscoreremaining( team ); - if ( !scoreperminute ) - { - return 999999; - } - return scoreremaining / scoreperminute; -} - -rumbler() -{ - self endon( "disconnect" ); - while ( 1 ) - { - wait 0,1; - self playrumbleonentity( "damage_heavy" ); - } -} - -waitfortimeornotify( time, notifyname ) -{ - self endon( notifyname ); - wait time; -} - -waitfortimeornotifynoartillery( time, notifyname ) -{ - self endon( notifyname ); - wait time; - while ( isDefined( level.artilleryinprogress ) ) - { -/# - assert( level.artilleryinprogress ); -#/ - wait 0,25; - } -} - -isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) -{ - if ( shitloc != "head" && shitloc != "helmet" ) - { - return 0; - } - switch( smeansofdeath ) - { - case "MOD_BAYONET": - case "MOD_MELEE": - return 0; - case "MOD_IMPACT": - if ( sweapon != "knife_ballistic_mp" ) - { - return 0; - } - } - return 1; -} - -gethitlocheight( shitloc ) -{ - switch( shitloc ) - { - case "head": - case "helmet": - case "neck": - return 60; - case "gun": - case "left_arm_lower": - case "left_arm_upper": - case "left_hand": - case "right_arm_lower": - case "right_arm_upper": - case "right_hand": - case "torso_upper": - return 48; - case "torso_lower": - return 40; - case "left_leg_upper": - case "right_leg_upper": - return 32; - case "left_leg_lower": - case "right_leg_lower": - return 10; - case "left_foot": - case "right_foot": - return 5; - } - return 48; -} - -debugline( start, end ) -{ -/# - i = 0; - while ( i < 50 ) - { - line( start, end ); - wait 0,05; - i++; -#/ - } -} - -isexcluded( entity, entitylist ) -{ - index = 0; - while ( index < entitylist.size ) - { - if ( entity == entitylist[ index ] ) - { - return 1; - } - index++; - } - return 0; -} - -waitfortimeornotifies( desireddelay ) -{ - startedwaiting = getTime(); - waitedtime = ( getTime() - startedwaiting ) / 1000; - if ( waitedtime < desireddelay ) - { - wait ( desireddelay - waitedtime ); - return desireddelay; - } - else - { - return waitedtime; - } -} - -logteamwinstring( wintype, winner ) -{ - log_string = wintype; - if ( isDefined( winner ) ) - { - log_string = ( log_string + ", win: " ) + winner; - } - _a469 = level.teams; - _k469 = getFirstArrayKey( _a469 ); - while ( isDefined( _k469 ) ) - { - team = _a469[ _k469 ]; - log_string = ( log_string + ", " ) + team + ": " + game[ "teamScores" ][ team ]; - _k469 = getNextArrayKey( _a469, _k469 ); - } - logstring( log_string ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_vehicle.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_vehicle.gsc deleted file mode 100644 index 9bfb41d..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_globallogic_vehicle.gsc +++ /dev/null @@ -1,471 +0,0 @@ -#include maps/mp/gametypes_zm/_damagefeedback; -#include maps/mp/gametypes_zm/_globallogic_player; -#include maps/mp/gametypes_zm/_weapons; -#include maps/mp/_utility; - -callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname ) -{ - self.idflags = idflags; - self.idflagstime = getTime(); - if ( game[ "state" ] == "postgame" ) - { - return; - } - if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( eattacker.candocombat ) && !eattacker.candocombat ) - { - return; - } - if ( !isDefined( vdir ) ) - { - idflags |= level.idflags_no_knockback; - } - friendly = 0; - if ( isDefined( self.maxhealth ) || self.health == self.maxhealth && !isDefined( self.attackers ) ) - { - self.attackers = []; - self.attackerdata = []; - self.attackerdamage = []; - } - if ( sweapon == "none" && isDefined( einflictor ) ) - { - if ( isDefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" ) - { - sweapon = "explodable_barrel_mp"; - } - else - { - if ( isDefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) - { - sweapon = "destructible_car_mp"; - } - } - } - if ( idflags & level.idflags_no_protection ) - { - if ( self isvehicleimmunetodamage( idflags, smeansofdeath, sweapon ) ) - { - return; - } - if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) - { - } - else - { - if ( smeansofdeath == "MOD_PROJECTILE" || smeansofdeath == "MOD_GRENADE" ) - { - idamage *= getvehicleprojectilescalar( sweapon ); - idamage = int( idamage ); - if ( idamage == 0 ) - { - return; - } - } - else - { - if ( smeansofdeath == "MOD_GRENADE_SPLASH" ) - { - idamage *= getvehicleunderneathsplashscalar( sweapon ); - idamage = int( idamage ); - if ( idamage == 0 ) - { - return; - } - } - } - } - idamage *= level.vehicledamagescalar; - idamage = int( idamage ); - if ( isplayer( eattacker ) ) - { - eattacker.pers[ "participation" ]++; - } - prevhealthratio = self.health / self.maxhealth; - if ( isDefined( self.owner ) && isplayer( self.owner ) ) - { - team = self.owner.pers[ "team" ]; - } - if ( level.teambased && isplayer( eattacker ) && team == eattacker.pers[ "team" ] ) - { - if ( level.friendlyfire == 0 ) - { - if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) - { - return; - } - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 1 ); - } - else if ( level.friendlyfire == 1 ) - { - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); - } - else if ( level.friendlyfire == 2 ) - { - if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) - { - return; - } - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 1 ); - } - else - { - if ( level.friendlyfire == 3 ) - { - idamage = int( idamage * 0,5 ); - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); - } - } - friendly = 1; - } - else - { - if ( !level.teambased && isDefined( self.targetname ) && self.targetname == "rcbomb" ) - { - } - else - { - if ( isDefined( self.owner ) && isDefined( eattacker ) && self.owner == eattacker ) - { - return; - } - } - if ( idamage < 1 ) - { - idamage = 1; - } - if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( sweapon ) ) - { - eattacker thread maps/mp/gametypes_zm/_weapons::checkhit( sweapon ); - } - if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isDefined( einflictor.iscooked ) ) - { - self.wascooked = getTime(); - } - else - { - self.wascooked = undefined; - } - attacker_seat = undefined; - if ( isDefined( eattacker ) ) - { - attacker_seat = self getoccupantseat( eattacker ); - } - if ( isDefined( eattacker ) ) - { - self.lastdamagewasfromenemy = !isDefined( attacker_seat ); - } - self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); - if ( level.gametype == "hack" && sweapon != "emp_grenade_mp" ) - { - idamage = 0; - } - } - if ( isDefined( eattacker ) && eattacker != self ) - { - if ( maps/mp/gametypes_zm/_globallogic_player::dodamagefeedback( sweapon, einflictor ) ) - { - if ( idamage > 0 ) - { - eattacker thread maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor ); - } - } - } - } -/# - if ( getDvarInt( "g_debugDamage" ) ) - { - println( "actor:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); -#/ - } - if ( 1 ) - { - lpselfnum = self getentitynumber(); - lpselfteam = ""; - lpattackerteam = ""; - if ( isplayer( eattacker ) ) - { - lpattacknum = eattacker getentitynumber(); - lpattackguid = eattacker getguid(); - lpattackname = eattacker.name; - lpattackerteam = eattacker.pers[ "team" ]; - } - else - { - lpattacknum = -1; - lpattackguid = ""; - lpattackname = ""; - lpattackerteam = "world"; - } - logprint( "VD;" + lpselfnum + ";" + lpselfteam + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\n" ); - } -} - -callback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ) -{ - idamage = 0; - finnerdamage = 0; - fouterdamage = 0; - self.idflags = idflags; - self.idflagstime = getTime(); - if ( game[ "state" ] == "postgame" ) - { - return; - } - if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( eattacker.candocombat ) && !eattacker.candocombat ) - { - return; - } - friendly = 0; - if ( idflags & level.idflags_no_protection ) - { - if ( self isvehicleimmunetodamage( idflags, smeansofdeath, sweapon ) ) - { - return; - } - if ( smeansofdeath != "MOD_PROJECTILE_SPLASH" || smeansofdeath == "MOD_GRENADE_SPLASH" && smeansofdeath == "MOD_EXPLOSIVE" ) - { - scalar = getvehicleprojectilesplashscalar( sweapon ); - idamage = int( idamage * scalar ); - finnerdamage *= scalar; - fouterdamage *= scalar; - if ( finnerdamage == 0 ) - { - return; - } - if ( idamage < 1 ) - { - idamage = 1; - } - } - occupant_team = undefined; - if ( level.teambased && isplayer( eattacker ) && occupant_team == eattacker.pers[ "team" ] ) - { - if ( level.friendlyfire == 0 ) - { - if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) - { - return; - } - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); - } - else if ( level.friendlyfire == 1 ) - { - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); - } - else if ( level.friendlyfire == 2 ) - { - if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) ) - { - return; - } - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); - } - else - { - if ( level.friendlyfire == 3 ) - { - idamage = int( idamage * 0,5 ); - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); - } - } - friendly = 1; - return; - } - else - { - if ( idamage < 1 ) - { - idamage = 1; - } - self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); - } - } -} - -vehiclecrush() -{ - self endon( "disconnect" ); - if ( isDefined( level._effect ) && isDefined( level._effect[ "tanksquish" ] ) ) - { - playfx( level._effect[ "tanksquish" ], self.origin + vectorScale( ( 0, 0, 1 ), 30 ) ); - } - self playsound( "chr_crunch" ); -} - -getvehicleprojectilescalar( sweapon ) -{ - if ( sweapon == "satchel_charge_mp" ) - { - scale = 1; - } - else if ( sweapon == "sticky_grenade_mp" ) - { - scale = 1; - } - else if ( sweapon == "claymore_mp" ) - { - scale = 1; - } - else if ( sweapon == "remote_missile_missile_mp" ) - { - scale = 10; - } - else if ( sweapon == "remote_mortar_missile_mp" ) - { - scale = 10; - } - else if ( sweapon == "smaw_mp" ) - { - scale = 0,2; - } - else if ( sweapon == "fhj18_mp" ) - { - scale = 0,2; - } - else if ( issubstr( sweapon, "gl_" ) ) - { - scale = 1; - } - else if ( issubstr( sweapon, "turret_mp" ) ) - { - scale = 1; - } - else if ( issubstr( sweapon, "grenade" ) ) - { - scale = 1; - } - else - { - scale = 1; - } - return scale; -} - -getvehicleprojectilesplashscalar( sweapon ) -{ - if ( sweapon == "satchel_charge_mp" ) - { - scale = 1; - } - else if ( sweapon == "sticky_grenade_mp" ) - { - scale = 1; - } - else if ( sweapon == "claymore_mp" ) - { - scale = 1; - } - else if ( sweapon == "remote_missile_missile_mp" ) - { - scale = 10; - } - else if ( sweapon == "remote_mortar_missile_mp" ) - { - scale = 4; - } - else if ( sweapon == "chopper_minigun_mp" ) - { - scale = 0,5; - } - else if ( issubstr( sweapon, "gl_" ) ) - { - scale = 0,5; - } - else if ( issubstr( sweapon, "turrent_mp" ) ) - { - scale = 0,1; - } - else if ( issubstr( sweapon, "grenade" ) ) - { - scale = 1; - } - else - { - scale = 1; - } - return scale; -} - -getvehicleunderneathsplashscalar( sweapon ) -{ - if ( sweapon == "satchel_charge_mp" ) - { - scale = 10; - scale *= 3; - } - else - { - scale = 1; - } - return scale; -} - -getvehiclebulletdamage( sweapon ) -{ - if ( issubstr( sweapon, "ptrs41_" ) ) - { - idamage = 25; - } - else if ( issubstr( sweapon, "gunner" ) ) - { - idamage = 5; - } - else if ( issubstr( sweapon, "mg42_bipod" ) || issubstr( sweapon, "30cal_bipod" ) ) - { - idamage = 5; - } - else - { - idamage = 1; - } - return idamage; -} - -allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) -{ - if ( isDefined( self.allowfriendlyfiredamageoverride ) ) - { - return [[ self.allowfriendlyfiredamageoverride ]]( einflictor, eattacker, smeansofdeath, sweapon ); - } - vehicle = eattacker getvehicleoccupied(); - return 0; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_gv_actions.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_gv_actions.gsc deleted file mode 100644 index 0b42480..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_gv_actions.gsc +++ /dev/null @@ -1,995 +0,0 @@ -#include maps/mp/gametypes_zm/_globallogic_ui; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/gametypes_zm/_globallogic; -#include common_scripts/utility; -#include maps/mp/_utility; - -initializeactionarray() -{ - level.gametypeactions = []; - level.gametypeactions[ "GiveAmmo" ] = ::dogiveammo; - level.gametypeactions[ "RemoveAmmo" ] = ::doremoveammo; - level.gametypeactions[ "PlaySound" ] = ::doplaysound; - level.gametypeactions[ "EnableUAV" ] = ::doenableuav; - level.gametypeactions[ "GiveScore" ] = ::dogivescore; - level.gametypeactions[ "RemoveScore" ] = ::doremovescore; - level.gametypeactions[ "SetHeader" ] = ::dosetheader; - level.gametypeactions[ "SetSubHeader" ] = ::dosetsubheader; - level.gametypeactions[ "DisplayMessage" ] = ::dodisplaymessage; - level.gametypeactions[ "GiveHealth" ] = ::dogivehealth; - level.gametypeactions[ "RemoveHealth" ] = ::doremovehealth; - level.gametypeactions[ "SetHealthRegen" ] = ::dosethealthregen; - level.gametypeactions[ "ChangeClass" ] = ::dochangeclass; - level.gametypeactions[ "ChangeTeam" ] = ::dochangeteam; - level.gametypeactions[ "GivePerk" ] = ::dogiveperk; - level.gametypeactions[ "RemovePerk" ] = ::doremoveperk; - level.gametypeactions[ "GiveInvuln" ] = ::dogiveinvuln; - level.gametypeactions[ "RemoveInvuln" ] = ::doremoveinvuln; - level.gametypeactions[ "SetDamageModifier" ] = ::dosetdamagemodifier; - level.gametypeactions[ "GiveKillstreak" ] = ::dogivekillstreak; - level.gametypeactions[ "RemoveKillstreak" ] = ::doremovekillstreak; - level.gametypeactions[ "GiveLives" ] = ::dogivelives; - level.gametypeactions[ "RemoveLives" ] = ::doremovelives; - level.gametypeactions[ "ScaleMoveSpeed" ] = ::doscalemovespeed; - level.gametypeactions[ "ShowOnRadar" ] = ::doshowonradar; - level.conditionals = []; - level.conditionals[ "Equals" ] = ::equals; - level.conditionals[ "==" ] = ::equals; - level.conditionals[ "!=" ] = ::notequals; - level.conditionals[ "<" ] = ::lessthan; - level.conditionals[ "<=" ] = ::lessthanequals; - level.conditionals[ ">" ] = ::greaterthan; - level.conditionals[ ">=" ] = ::greaterthanequals; - level.conditionals[ "InPlace" ] = ::inplace; - level.conditionallefthandside = []; - level.conditionallefthandside[ "PlayersLeft" ] = ::playersleft; - level.conditionallefthandside[ "RoundsPlayed" ] = ::roundsplayed; - level.conditionallefthandside[ "HitBy" ] = ::hitby; - level.conditionallefthandside[ "PlayersClass" ] = ::playersclass; - level.conditionallefthandside[ "VictimsClass" ] = ::playersclass; - level.conditionallefthandside[ "AttackersClass" ] = ::attackersclass; - level.conditionallefthandside[ "PlayersPlace" ] = ::playersplace; - level.conditionallefthandside[ "VictimsPlace" ] = ::playersplace; - level.conditionallefthandside[ "AttackersPlace" ] = ::attackersplace; - level.targets = []; - level.targets[ "Everyone" ] = ::gettargeteveryone; - level.targets[ "PlayersLeft" ] = ::gettargetplayersleft; - level.targets[ "PlayersEliminated" ] = ::gettargetplayerseliminated; - level.targets[ "PlayersTeam" ] = ::gettargetplayersteam; - level.targets[ "VictimsTeam" ] = ::gettargetplayersteam; - level.targets[ "OtherTeam" ] = ::gettargetotherteam; - level.targets[ "AttackersTeam" ] = ::gettargetotherteam; - level.targets[ "PlayersLeftOnPlayersTeam" ] = ::gettargetplayersleftonplayersteam; - level.targets[ "PlayersLeftOnOtherTeam" ] = ::gettargetplayersleftonotherteam; - level.targets[ "PlayersLeftOnVictimsTeam" ] = ::gettargetplayersleftonplayersteam; - level.targets[ "PlayersLeftOnAttackersTeam" ] = ::gettargetplayersleftonotherteam; - level.targets[ "PlayersEliminatedOnPlayersTeam" ] = ::gettargetplayerseliminatedonplayersteam; - level.targets[ "PlayersEliminatedOnOtherTeam" ] = ::gettargetplayerseliminatedonotherteam; - level.targets[ "PlayersEliminatedOnVictimsTeam" ] = ::gettargetplayerseliminatedonplayersteam; - level.targets[ "PlayersEliminatedOnAttackersTeam" ] = ::gettargetplayerseliminatedonotherteam; - level.targets[ "AssistingPlayers" ] = ::getassistingplayers; -} - -equals( param1, param2 ) -{ - return param1 == param2; -} - -notequals( param1, param2 ) -{ - return param1 != param2; -} - -lessthan( param1, param2 ) -{ - return param1 < param2; -} - -lessthanequals( param1, param2 ) -{ - return param1 <= param2; -} - -greaterthan( param1, param2 ) -{ - return param1 > param2; -} - -greaterthanequals( param1, param2 ) -{ - return param1 >= param2; -} - -inplace( param1, param2 ) -{ - if ( param1 == param2 ) - { - return 1; - } - if ( param2 == "top3" && param1 == "first" ) - { - return 1; - } - return 0; -} - -playersleft( rule ) -{ - return 0; -} - -roundsplayed( rule ) -{ - return game[ "roundsplayed" ] + 1; -} - -hitby( rule ) -{ - meansofdeath = rule.target[ "MeansOfDeath" ]; - weapon = rule.target[ "Weapon" ]; - if ( !isDefined( meansofdeath ) || !isDefined( weapon ) ) - { - return undefined; - } - switch( weapon ) - { - case "knife_ballistic_mp": - return "knife"; - } - switch( meansofdeath ) - { - case "MOD_PISTOL_BULLET": - case "MOD_RIFLE_BULLET": - return "bullet"; - case "MOD_BAYONET": - case "MOD_MELEE": - return "knife"; - case "MOD_HEAD_SHOT": - return "headshot"; - case "MOD_EXPLOSIVE": - case "MOD_GRENADE": - case "MOD_GRENADE_SPLASH": - case "MOD_PROJECTILE": - case "MOD_PROJECTILE_SPLASH": - return "explosive"; - } - return undefined; -} - -getplayersclass( player ) -{ - return player.pers[ "class" ]; -} - -playersclass( rule ) -{ - player = rule.target[ "Player" ]; - return getplayersclass( player ); -} - -attackersclass( rule ) -{ - player = rule.target[ "Attacker" ]; - return getplayersclass( player ); -} - -getplayersplace( player ) -{ - maps/mp/gametypes_zm/_globallogic::updateplacement(); - if ( !isDefined( level.placement[ "all" ] ) ) - { - return; - } - place = 0; - while ( place < level.placement[ "all" ].size ) - { - if ( level.placement[ "all" ][ place ] == player ) - { - place++; - continue; - } - else - { - place++; - } - } - place++; - if ( place == 1 ) - { - return "first"; - } - else - { - if ( place <= 3 ) - { - return "top3"; - } - else - { - if ( place == level.placement[ "all" ].size ) - { - return "last"; - } - } - } - return "middle"; -} - -playersplace( rule ) -{ - player = rule.target[ "Player" ]; - return getplayersplace( player ); -} - -attackersplace( rule ) -{ - player = rule.target[ "Attacker" ]; - return getplayersplace( player ); -} - -gettargeteveryone( rule ) -{ - return level.players; -} - -gettargetplayersleft( rule ) -{ - return 0; -} - -gettargetplayerseliminated( rule ) -{ - return 0; -} - -gettargetplayersteam( rule ) -{ - player = rule.target[ "Player" ]; - if ( !isDefined( player ) ) - { - return []; - } - return getplayersonteam( level.players, player.pers[ "team" ] ); -} - -gettargetotherteam( rule ) -{ - player = rule.target[ "Player" ]; - if ( !isDefined( player ) ) - { - return []; - } - return getplayersonteam( level.players, getotherteam( player.pers[ "team" ] ) ); -} - -gettargetplayersleftonplayersteam( rule ) -{ - return []; -} - -gettargetplayersleftonotherteam( rule ) -{ - return []; -} - -gettargetplayerseliminatedonplayersteam( rule ) -{ - return []; -} - -gettargetplayerseliminatedonotherteam( rule ) -{ - return []; -} - -getassistingplayers( rule ) -{ - assisters = []; - attacker = rule.target[ "Attacker" ]; - if ( !isDefined( rule.target[ "Assisters" ] ) || !isDefined( attacker ) ) - { - return assisters; - } - j = 0; - while ( j < rule.target[ "Assisters" ].size ) - { - player = rule.target[ "Assisters" ][ j ]; - if ( !isDefined( player ) ) - { - j++; - continue; - } - else if ( player == attacker ) - { - j++; - continue; - } - else - { - assisters[ assisters.size ] = player; - } - j++; - } - return assisters; -} - -executegametypeeventrule( rule ) -{ - if ( !aregametypeeventruleconditionalsmet( rule ) ) - { - return; - } - if ( !isDefined( level.gametypeactions[ rule.action ] ) ) - { -/# - error( "GAMETYPE VARIANTS - unknown action: " + rule.action + "!" ); -#/ - return; - } - thread internalexecuterule( rule ); -} - -internalexecuterule( rule ) -{ -} - -aregametypeeventruleconditionalsmet( rule ) -{ - if ( !isDefined( rule.conditionals ) || rule.conditionals.size == 0 ) - { - return 1; - } - combinedresult = 1; - if ( rule.conditionaleval == "OR" ) - { - combinedresult = 0; - } - i = 0; - while ( i < rule.conditionals.size ) - { - conditionalresult = evaluategametypeeventruleconditional( rule, rule.conditionals[ i ] ); - switch( rule.conditionaleval ) - { - case "AND": - if ( combinedresult ) - { - combinedresult = conditionalresult; - } - break; - case "OR": - if ( !combinedresult ) - { - combinedresult = conditionalresult; - } - break; - } - if ( rule.conditionaleval == "AND" && !combinedresult ) - { - break; - } - else - { - if ( rule.conditionaleval == "OR" && combinedresult ) - { - break; - } - else - { - i++; - } - } - } - return combinedresult; -} - -evaluategametypeeventruleconditional( rule, conditional ) -{ - if ( isDefined( conditional.lhs ) || !isDefined( conditional.operand ) && !isDefined( conditional.rhs ) ) - { - return 0; - } - if ( !isDefined( level.conditionallefthandside[ conditional.lhs ] ) ) - { - return 0; - } - lhsvalue = [[ level.conditionallefthandside[ conditional.lhs ] ]]( rule ); - if ( !isDefined( lhsvalue ) || !isDefined( level.conditionals[ conditional.operand ] ) ) - { - return 0; - } - return [[ level.conditionals[ conditional.operand ] ]]( lhsvalue, conditional.rhs ); -} - -getplayersonteam( players, team ) -{ - playersonteam = []; - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - if ( player.pers[ "team" ] == team ) - { - playersonteam[ playersonteam.size ] = player; - } - i++; - } - return playersonteam; -} - -gettargetsforgametypeeventrule( rule ) -{ - targets = []; - if ( !isDefined( rule.targetname ) ) - { - return targets; - } - if ( isDefined( rule.target[ rule.targetname ] ) ) - { - targets[ targets.size ] = rule.target[ rule.targetname ]; - } - else - { - if ( isDefined( level.targets[ rule.targetname ] ) ) - { - targets = [[ level.targets[ rule.targetname ] ]]( rule ); - } - } - return targets; -} - -doesrulehavevalidparam( rule ) -{ - if ( isDefined( rule.params ) && isarray( rule.params ) ) - { - return rule.params.size > 0; - } -} - -sortplayersbylivesdescending( players ) -{ - if ( !isDefined( players ) ) - { - return undefined; - } - swapped = 1; - n = players.size; - while ( swapped ) - { - swapped = 0; - i = 0; - while ( i < ( n - 1 ) ) - { - if ( players[ i ].pers[ "lives" ] < players[ i + 1 ].pers[ "lives" ] ) - { - temp = players[ i ]; - players[ i ] = players[ i + 1 ]; - players[ i + 1 ] = temp; - swapped = 1; - } - i++; - } - n--; - - } - return players; -} - -giveammo( players, amount ) -{ - i = 0; - while ( i < players.size ) - { - wait 0,5; - player = players[ i ]; - currentweapon = player getcurrentweapon(); - clipammo = player getweaponammoclip( currentweapon ); - player setweaponammoclip( currentweapon, clipammo + amount ); - i++; - } -} - -dogiveammo( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - targets = gettargetsforgametypeeventrule( rule ); - giveammo( targets, rule.params[ 0 ] ); -} - -doremoveammo( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - targets = gettargetsforgametypeeventrule( rule ); - giveammo( targets, 0 - rule.params[ 0 ] ); -} - -doplaysound( rule ) -{ - if ( doesrulehavevalidparam( rule ) ) - { - playsoundonplayers( rule.params[ 0 ] ); - } -} - -doenableuav( rule ) -{ - targets = gettargetsforgametypeeventrule( rule ); - targetindex = 0; - while ( targetindex < targets.size ) - { - targets[ targetindex ].pers[ "hasRadar" ] = 1; - targets[ targetindex ].hasspyplane = 1; - targetindex++; - } -} - -givescore( players, amount ) -{ - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - score = maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( player ); - maps/mp/gametypes_zm/_globallogic_score::_setplayerscore( player, score + amount ); - i++; - } -} - -dogivescore( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - targets = gettargetsforgametypeeventrule( rule ); - givescore( targets, rule.params[ 0 ] ); -} - -doremovescore( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - targets = gettargetsforgametypeeventrule( rule ); - givescore( targets, 0 - rule.params[ 0 ] ); -} - -dosetheader( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - targets = gettargetsforgametypeeventrule( rule ); - targetindex = 0; - while ( targetindex < targets.size ) - { - target = targets[ targetindex ]; - displaytextonhudelem( target, target.customgametypeheader, rule.params[ 0 ], rule.params[ 1 ], "gv_header", rule.params[ 2 ] ); - targetindex++; - } -} - -dosetsubheader( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - targets = gettargetsforgametypeeventrule( rule ); - targetindex = 0; - while ( targetindex < targets.size ) - { - target = targets[ targetindex ]; - displaytextonhudelem( target, target.customgametypesubheader, rule.params[ 0 ], rule.params[ 1 ], "gv_subheader", rule.params[ 2 ] ); - targetindex++; - } -} - -displaytextonhudelem( target, texthudelem, text, secondstodisplay, notifyname, valueparam ) -{ - texthudelem.alpha = 1; - if ( isDefined( valueparam ) ) - { - texthudelem settext( text, valueparam ); - } - else - { - texthudelem settext( text ); - } - if ( !isDefined( secondstodisplay ) || secondstodisplay <= 0 ) - { - target.doingnotify = 0; - target notify( notifyname ); - return; - } - target thread fadecustomgametypehudelem( texthudelem, secondstodisplay, notifyname ); -} - -fadecustomgametypehudelem( hudelem, seconds, notifyname ) -{ - self endon( "disconnect" ); - self notify( notifyname ); - self endon( notifyname ); - if ( seconds <= 0 ) - { - return; - } - self.doingnotify = 1; - wait seconds; - while ( hudelem.alpha > 0 ) - { - hudelem.alpha -= 0,05; - if ( hudelem.alpha < 0 ) - { - hudelem.alpha = 0; - } - wait 0,05; - } - self.doingnotify = 0; -} - -dodisplaymessage( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - targets = gettargetsforgametypeeventrule( rule ); - targetindex = 0; - while ( targetindex < targets.size ) - { - thread announcemessage( targets[ targetindex ], rule.params[ 0 ], 2 ); - targetindex++; - } -} - -announcemessage( target, messagetext, time ) -{ - target endon( "disconnect" ); - clientannouncement( target, messagetext, int( time * 1000 ) ); - if ( time == 0 ) - { - time = getDvarFloat( #"E8C4FC20" ); - } - target.doingnotify = 1; - wait time; - target.doingnotify = 0; -} - -givehealth( players, amount ) -{ - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - player.health += amount; - i++; - } -} - -dogivehealth( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - givehealth( gettargetsforgametypeeventrule( rule ), rule.params[ 0 ] ); -} - -doremovehealth( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - givehealth( gettargetsforgametypeeventrule( rule ), 0 - rule.params[ 0 ] ); -} - -dosethealthregen( rule ) -{ - targets = gettargetsforgametypeeventrule( rule ); - targetindex = 0; - while ( targetindex < targets.size ) - { - player = targets[ targetindex ]; - player.regenrate = rule.params[ 0 ]; - targetindex++; - } -} - -dochangeclass( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } -} - -dochangeteam( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - team = rule.params[ 0 ]; - teamkeys = getarraykeys( level.teams ); - targets = gettargetsforgametypeeventrule( rule ); - targetindex = 0; - while ( targetindex < targets.size ) - { - target = targets[ targetindex ]; - if ( target.pers[ "team" ] == team ) - { - targetindex++; - continue; - } - else - { - while ( team == "toggle" ) - { - team = teamkeys[ randomint( teamkeys.size ) ]; - teamindex = 0; - while ( teamindex < teamkeys.size ) - { - if ( target.pers[ "team" ] == teamkeys[ teamindex ] ) - { - team = teamkeys[ ( teamindex + 1 ) % teamkeys.size ]; - break; - } - else - { - teamindex++; - } - } - } - target.pers[ "team" ] = team; - target.team = team; - if ( level.teambased ) - { - target.sessionteam = team; - } - else - { - target.sessionteam = "none"; - } - target notify( "joined_team" ); - level notify( "joined_team" ); - } - targetindex++; - } -} - -displayperk( player, imagename ) -{ - index = 0; - if ( isDefined( player.perkicon ) ) - { - index = -1; - i = 0; - while ( i < player.perkicon.size ) - { - if ( player.perkicon[ i ].alpha == 0 ) - { - index = i; - break; - } - else - { - i++; - } - } - if ( index == -1 ) - { - return; - } - } - player maps/mp/gametypes_zm/_hud_util::showperk( index, imagename, 10 ); - player thread maps/mp/gametypes_zm/_globallogic_ui::hideloadoutaftertime( 3 ); - player thread maps/mp/gametypes_zm/_globallogic_ui::hideloadoutondeath(); -} - -setorunsetperk( players, perks, shouldset ) -{ - if ( level.perksenabled == 0 ) - { - return; - } - if ( perks.size < 2 ) - { - return; - } - hasperkalready = 0; - imagename = perks[ perks.size - 1 ]; - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - perkindex = 0; - while ( perkindex < ( perks.size - 1 ) ) - { - perk = perks[ perkindex ]; - if ( player hasperk( perk ) ) - { - hasperkalready = 1; - } - if ( shouldset ) - { - player setperk( perk ); - perkindex++; - continue; - } - else - { - player unsetperk( perk ); - } - perkindex++; - } - if ( shouldset && !hasperkalready && getDvarInt( "scr_showperksonspawn" ) == 1 ) - { - displayperk( player, imagename ); - } - i++; - } -} - -dogiveperk( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - setorunsetperk( gettargetsforgametypeeventrule( rule ), rule.params, 1 ); -} - -doremoveperk( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - setorunsetperk( gettargetsforgametypeeventrule( rule ), rule.params, 0 ); -} - -giveorremovekillstreak( rule, shouldgive ) -{ -} - -dogivekillstreak( rule ) -{ - giveorremovekillstreak( rule, 1 ); -} - -doremovekillstreak( rule ) -{ - giveorremovekillstreak( rule, 0 ); -} - -givelives( players, amount ) -{ - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - player.pers[ "lives" ] += amount; - if ( player.pers[ "lives" ] < 0 ) - { - player.pers[ "lives" ] = 0; - } - i++; - } -} - -dogivelives( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - givelives( gettargetsforgametypeeventrule( rule ), rule.params[ 0 ] ); -} - -doremovelives( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - givelives( gettargetsforgametypeeventrule( rule ), 0 - rule.params[ 0 ] ); -} - -giveorremoveinvuln( players, shouldgiveinvuln ) -{ - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - i++; - } -} - -dogiveinvuln( rule ) -{ - giveorremoveinvuln( gettargetsforgametypeeventrule( rule ), 1 ); -} - -doremoveinvuln( rule ) -{ - giveorremoveinvuln( gettargetsforgametypeeventrule( rule ), 0 ); -} - -dosetdamagemodifier( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - players = gettargetsforgametypeeventrule( rule ); - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - player.damagemodifier = rule.params[ 0 ]; - i++; - } -} - -doscalemovespeed( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - movespeedscale = rule.params[ 0 ]; - targets = gettargetsforgametypeeventrule( rule ); - targetindex = 0; - while ( targetindex < targets.size ) - { - target = targets[ targetindex ]; - target.movementspeedmodifier = movespeedscale * target getmovespeedscale(); - if ( target.movementspeedmodifier < 0,1 ) - { - target.movementspeedmodifier = 0,1; - } - else - { - if ( target.movementspeedmodifier > 4 ) - { - target.movementspeedmodifier = 4; - } - } - target setmovespeedscale( target.movementspeedmodifier ); - targetindex++; - } -} - -doshowonradar( rule ) -{ - if ( !doesrulehavevalidparam( rule ) ) - { - return; - } - targets = gettargetsforgametypeeventrule( rule ); - targetindex = 0; - while ( targetindex < targets.size ) - { - if ( rule.params[ 0 ] == "enable" ) - { - targets[ targetindex ] setperk( "specialty_showonradar" ); - targetindex++; - continue; - } - else - { - targets[ targetindex ] unsetperk( "specialty_showonradar" ); - } - targetindex++; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_healthoverlay.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_healthoverlay.gsc deleted file mode 100644 index a7d8f4b..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_healthoverlay.gsc +++ /dev/null @@ -1,288 +0,0 @@ -#include maps/mp/gametypes_zm/_globallogic_player; - -init() -{ - precacheshader( "overlay_low_health" ); - level.healthoverlaycutoff = 0,55; - regentime = level.playerhealthregentime; - level.playerhealth_regularregendelay = regentime * 1000; - level.healthregendisabled = level.playerhealth_regularregendelay <= 0; - level thread onplayerconnect(); -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread onplayerspawned(); - player thread onplayerkilled(); - player thread onjoinedteam(); - player thread onjoinedspectators(); - player thread onplayerdisconnect(); - } -} - -onjoinedteam() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "joined_team" ); - self notify( "end_healthregen" ); - } -} - -onjoinedspectators() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "joined_spectators" ); - self notify( "end_healthregen" ); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread playerhealthregen(); - } -} - -onplayerkilled() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "killed_player" ); - self notify( "end_healthregen" ); - } -} - -onplayerdisconnect() -{ - self waittill( "disconnect" ); - self notify( "end_healthregen" ); -} - -playerhealthregen() -{ - self endon( "end_healthregen" ); - if ( self.health <= 0 ) - { -/# - assert( !isalive( self ) ); -#/ - return; - } - maxhealth = self.health; - oldhealth = maxhealth; - player = self; - health_add = 0; - regenrate = 0,1; - usetrueregen = 0; - veryhurt = 0; - player.breathingstoptime = -10000; - thread playerbreathingsound( maxhealth * 0,35 ); - thread playerheartbeatsound( maxhealth * 0,35 ); - lastsoundtime_recover = 0; - hurttime = 0; - newhealth = 0; - for ( ;; ) - { - wait 0,05; - if ( isDefined( player.regenrate ) ) - { - regenrate = player.regenrate; - usetrueregen = 1; - } - if ( player.health == maxhealth ) - { - veryhurt = 0; - self.atbrinkofdeath = 0; - continue; - } - else if ( player.health <= 0 ) - { - return; - } - if ( isDefined( player.laststand ) && player.laststand ) - { - continue; - } - else - { - wasveryhurt = veryhurt; - ratio = player.health / maxhealth; - if ( ratio <= level.healthoverlaycutoff ) - { - veryhurt = 1; - self.atbrinkofdeath = 1; - if ( !wasveryhurt ) - { - hurttime = getTime(); - } - } - if ( player.health >= oldhealth ) - { - regentime = level.playerhealth_regularregendelay; - if ( player hasperk( "specialty_healthregen" ) ) - { - regentime = int( regentime / getDvarFloat( "perk_healthRegenMultiplier" ) ); - } - if ( ( getTime() - hurttime ) < regentime ) - { - break; - } - else if ( level.healthregendisabled ) - { - break; - } - else if ( ( getTime() - lastsoundtime_recover ) > regentime ) - { - lastsoundtime_recover = getTime(); - self notify( "snd_breathing_better" ); - } - if ( veryhurt ) - { - newhealth = ratio; - veryhurttime = 3000; - if ( player hasperk( "specialty_healthregen" ) ) - { - veryhurttime = int( veryhurttime / getDvarFloat( "perk_healthRegenMultiplier" ) ); - } - if ( getTime() > ( hurttime + veryhurttime ) ) - { - newhealth += regenrate; - } - } - else if ( usetrueregen ) - { - newhealth = ratio + regenrate; - } - else - { - newhealth = 1; - } - if ( newhealth >= 1 ) - { - self maps/mp/gametypes_zm/_globallogic_player::resetattackerlist(); - newhealth = 1; - } - if ( newhealth <= 0 ) - { - return; - } - player setnormalhealth( newhealth ); - change = player.health - oldhealth; - if ( change > 0 ) - { - player decayplayerdamages( change ); - } - oldhealth = player.health; - break; - } - else - { - oldhealth = player.health; - health_add = 0; - hurttime = getTime(); - player.breathingstoptime = hurttime + 6000; - } - } - } -} - -decayplayerdamages( decay ) -{ - if ( !isDefined( self.attackerdamage ) ) - { - return; - } - i = 0; - while ( i < self.attackerdamage.size ) - { - if ( !isDefined( self.attackerdamage[ i ] ) || !isDefined( self.attackerdamage[ i ].damage ) ) - { - i++; - continue; - } - else - { - self.attackerdamage[ i ].damage -= decay; - if ( self.attackerdamage[ i ].damage < 0 ) - { - self.attackerdamage[ i ].damage = 0; - } - } - i++; - } -} - -playerbreathingsound( healthcap ) -{ - self endon( "end_healthregen" ); - wait 2; - player = self; - for ( ;; ) - { - wait 0,2; - if ( player.health <= 0 ) - { - return; - } - if ( player.health >= healthcap ) - { - continue; - } - else if ( level.healthregendisabled && getTime() > player.breathingstoptime ) - { - continue; - } - else - { - player notify( "snd_breathing_hurt" ); - wait 0,784; - wait ( 0,1 + randomfloat( 0,8 ) ); - } - } -} - -playerheartbeatsound( healthcap ) -{ - self endon( "end_healthregen" ); - self.hearbeatwait = 0,2; - wait 2; - player = self; - for ( ;; ) - { - wait 0,2; - if ( player.health <= 0 ) - { - return; - } - if ( player.health >= healthcap ) - { - self.hearbeatwait = 0,3; - continue; - } - else if ( level.healthregendisabled && getTime() > player.breathingstoptime ) - { - self.hearbeatwait = 0,3; - continue; - } - else - { - player playlocalsound( "mpl_player_heartbeat" ); - wait self.hearbeatwait; - if ( self.hearbeatwait <= 0,6 ) - { - self.hearbeatwait += 0,1; - } - } - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_hostmigration.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_hostmigration.gsc deleted file mode 100644 index 19d1f7f..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_hostmigration.gsc +++ /dev/null @@ -1,556 +0,0 @@ -#include maps/mp/zombies/_zm; -#include maps/mp/gametypes_zm/_hud; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/gametypes_zm/_hud_util; -#include common_scripts/utility; -#include maps/mp/_utility; - -debug_script_structs() -{ -/# - if ( isDefined( level.struct ) ) - { - println( "*** Num structs " + level.struct.size ); - println( "" ); - i = 0; - while ( i < level.struct.size ) - { - struct = level.struct[ i ]; - if ( isDefined( struct.targetname ) ) - { - println( "---" + i + " : " + struct.targetname ); - i++; - continue; - } - else - { - println( "---" + i + " : " + "NONE" ); - } - i++; - } - } - else println( "*** No structs defined." ); -#/ -} - -updatetimerpausedness() -{ - shouldbestopped = isDefined( level.hostmigrationtimer ); - if ( !level.timerstopped && shouldbestopped ) - { - level.timerstopped = 1; - level.timerpausetime = getTime(); - } - else - { - if ( level.timerstopped && !shouldbestopped ) - { - level.timerstopped = 0; - level.discardtime += getTime() - level.timerpausetime; - } - } -} - -callback_hostmigrationsave() -{ -} - -callback_prehostmigrationsave() -{ - undo_link_changes(); - disablezombies( 1 ); - if ( is_true( level._hm_should_pause_spawning ) ) - { - flag_set( "spawn_zombies" ); - } - i = 0; - while ( i < level.players.size ) - { - level.players[ i ] enableinvulnerability(); - i++; - } -} - -pausetimer() -{ - level.migrationtimerpausetime = getTime(); -} - -resumetimer() -{ - level.discardtime += getTime() - level.migrationtimerpausetime; -} - -locktimer() -{ - level endon( "host_migration_begin" ); - level endon( "host_migration_end" ); - for ( ;; ) - { - currtime = getTime(); - wait 0,05; - if ( !level.timerstopped && isDefined( level.discardtime ) ) - { - level.discardtime += getTime() - currtime; - } - } -} - -callback_hostmigration() -{ - redo_link_changes(); - setslowmotion( 1, 1, 0 ); - makedvarserverinfo( "ui_guncycle", 0 ); - level.hostmigrationreturnedplayercount = 0; - if ( level.gameended ) - { -/# - println( "Migration starting at time " + getTime() + ", but game has ended, so no countdown." ); -#/ - return; - } - sethostmigrationstatus( 1 ); - level notify( "host_migration_begin" ); - i = 0; - while ( i < level.players.size ) - { - if ( isDefined( level.hostmigration_link_entity_callback ) ) - { - if ( !isDefined( level.players[ i ]._host_migration_link_entity ) ) - { - level.players[ i ]._host_migration_link_entity = level.players[ i ] [[ level.hostmigration_link_entity_callback ]](); - } - } - level.players[ i ] thread hostmigrationtimerthink(); - i++; - } - while ( isDefined( level.hostmigration_ai_link_entity_callback ) ) - { - zombies = getaiarray( level.zombie_team ); - while ( isDefined( zombies ) && zombies.size > 0 ) - { - _a133 = zombies; - _k133 = getFirstArrayKey( _a133 ); - while ( isDefined( _k133 ) ) - { - zombie = _a133[ _k133 ]; - if ( !isDefined( zombie._host_migration_link_entity ) ) - { - zombie._host_migration_link_entity = zombie [[ level.hostmigration_ai_link_entity_callback ]](); - } - _k133 = getNextArrayKey( _a133, _k133 ); - } - } - } - if ( level.inprematchperiod ) - { - level waittill( "prematch_over" ); - } -/# - println( "Migration starting at time " + getTime() ); -#/ - level.hostmigrationtimer = 1; - thread locktimer(); - zombies = getaiarray( level.zombie_team ); - while ( isDefined( zombies ) && zombies.size > 0 ) - { - _a156 = zombies; - _k156 = getFirstArrayKey( _a156 ); - while ( isDefined( _k156 ) ) - { - zombie = _a156[ _k156 ]; - if ( isDefined( zombie._host_migration_link_entity ) ) - { - ent = spawn( "script_origin", zombie.origin ); - ent.angles = zombie.angles; - zombie linkto( ent ); - ent linkto( zombie._host_migration_link_entity, "tag_origin", zombie._host_migration_link_entity worldtolocalcoords( ent.origin ), ent.angles + zombie._host_migration_link_entity.angles ); - zombie._host_migration_link_helper = ent; - zombie linkto( zombie._host_migration_link_helper ); - } - _k156 = getNextArrayKey( _a156, _k156 ); - } - } - level endon( "host_migration_begin" ); - level._hm_should_pause_spawning = flag( "spawn_zombies" ); - if ( level._hm_should_pause_spawning ) - { - flag_clear( "spawn_zombies" ); - } - hostmigrationwait(); - _a185 = level.players; - _k185 = getFirstArrayKey( _a185 ); - while ( isDefined( _k185 ) ) - { - player = _a185[ _k185 ]; - player thread post_migration_become_vulnerable(); - _k185 = getNextArrayKey( _a185, _k185 ); - } - zombies = getaiarray( level.zombie_team ); - while ( isDefined( zombies ) && zombies.size > 0 ) - { - _a193 = zombies; - _k193 = getFirstArrayKey( _a193 ); - while ( isDefined( _k193 ) ) - { - zombie = _a193[ _k193 ]; - if ( isDefined( zombie._host_migration_link_entity ) ) - { - zombie unlink(); - zombie._host_migration_link_helper delete(); - zombie._host_migration_link_helper = undefined; - zombie._host_migration_link_entity = undefined; - } - _k193 = getNextArrayKey( _a193, _k193 ); - } - } - enablezombies( 1 ); - if ( level._hm_should_pause_spawning ) - { - flag_set( "spawn_zombies" ); - } - level.hostmigrationtimer = undefined; - level._hm_should_pause_spawning = undefined; - sethostmigrationstatus( 0 ); -/# - println( "Migration finished at time " + getTime() ); -#/ - level notify( "host_migration_end" ); -} - -post_migration_become_vulnerable() -{ - self endon( "disconnect" ); - wait 3; - self disableinvulnerability(); -} - -matchstarttimerconsole_internal( counttime, matchstarttimer ) -{ - waittillframeend; - visionsetnaked( "mpIntro", 0 ); - level endon( "match_start_timer_beginning" ); - while ( counttime > 0 && !level.gameended ) - { - matchstarttimer thread maps/mp/gametypes_zm/_hud::fontpulse( level ); - wait ( matchstarttimer.inframes * 0,05 ); - matchstarttimer setvalue( counttime ); - if ( counttime == 2 ) - { - visionsetnaked( getDvar( "mapname" ), 3 ); - } - counttime--; - - wait ( 1 - ( matchstarttimer.inframes * 0,05 ) ); - } -} - -matchstarttimerconsole( type, duration ) -{ - level notify( "match_start_timer_beginning" ); - wait 0,05; - matchstarttext = createserverfontstring( "objective", 1,5 ); - matchstarttext setpoint( "CENTER", "CENTER", 0, -40 ); - matchstarttext.sort = 1001; - matchstarttext settext( game[ "strings" ][ "waiting_for_teams" ] ); - matchstarttext.foreground = 0; - matchstarttext.hidewheninmenu = 1; - matchstarttext settext( game[ "strings" ][ type ] ); - matchstarttimer = createserverfontstring( "objective", 2,2 ); - matchstarttimer setpoint( "CENTER", "CENTER", 0, 0 ); - matchstarttimer.sort = 1001; - matchstarttimer.color = ( 1, 1, 0 ); - matchstarttimer.foreground = 0; - matchstarttimer.hidewheninmenu = 1; - matchstarttimer maps/mp/gametypes_zm/_hud::fontpulseinit(); - counttime = int( duration ); - if ( counttime >= 2 ) - { - matchstarttimerconsole_internal( counttime, matchstarttimer ); - visionsetnaked( getDvar( "mapname" ), 3 ); - } - else - { - visionsetnaked( "mpIntro", 0 ); - visionsetnaked( getDvar( "mapname" ), 1 ); - } - matchstarttimer destroyelem(); - matchstarttext destroyelem(); -} - -hostmigrationwait() -{ - level endon( "game_ended" ); - if ( level.hostmigrationreturnedplayercount < ( ( level.players.size * 2 ) / 3 ) ) - { - thread matchstarttimerconsole( "waiting_for_teams", 20 ); - hostmigrationwaitforplayers(); - } - thread matchstarttimerconsole( "match_starting_in", 5 ); - wait 5; -} - -hostmigrationwaitforplayers() -{ - level endon( "hostmigration_enoughplayers" ); - wait 15; -} - -hostmigrationtimerthink_internal() -{ - level endon( "host_migration_begin" ); - level endon( "host_migration_end" ); - self.hostmigrationcontrolsfrozen = 0; - while ( !isalive( self ) ) - { - self waittill( "spawned" ); - } - if ( isDefined( self._host_migration_link_entity ) ) - { - ent = spawn( "script_origin", self.origin ); - ent.angles = self.angles; - self linkto( ent ); - ent linkto( self._host_migration_link_entity, "tag_origin", self._host_migration_link_entity worldtolocalcoords( ent.origin ), ent.angles + self._host_migration_link_entity.angles ); - self._host_migration_link_helper = ent; -/# - println( "Linking player to ent " + self._host_migration_link_entity.targetname ); -#/ - } - self.hostmigrationcontrolsfrozen = 1; - self freezecontrols( 1 ); - level waittill( "host_migration_end" ); -} - -hostmigrationtimerthink() -{ - self endon( "disconnect" ); - level endon( "host_migration_begin" ); - hostmigrationtimerthink_internal(); - if ( self.hostmigrationcontrolsfrozen ) - { - self freezecontrols( 0 ); -/# - println( " Host migration unfreeze controls" ); -#/ - } - if ( isDefined( self._host_migration_link_entity ) ) - { - self unlink(); - self._host_migration_link_helper delete(); - self._host_migration_link_helper = undefined; - if ( isDefined( self._host_migration_link_entity._post_host_migration_thread ) ) - { - self thread [[ self._host_migration_link_entity._post_host_migration_thread ]]( self._host_migration_link_entity ); - } - self._host_migration_link_entity = undefined; - } -} - -waittillhostmigrationdone() -{ - if ( !isDefined( level.hostmigrationtimer ) ) - { - return 0; - } - starttime = getTime(); - level waittill( "host_migration_end" ); - return getTime() - starttime; -} - -waittillhostmigrationstarts( duration ) -{ - if ( isDefined( level.hostmigrationtimer ) ) - { - return; - } - level endon( "host_migration_begin" ); - wait duration; -} - -waitlongdurationwithhostmigrationpause( duration ) -{ - if ( duration == 0 ) - { - return; - } -/# - assert( duration > 0 ); -#/ - starttime = getTime(); - endtime = getTime() + ( duration * 1000 ); - while ( getTime() < endtime ) - { - waittillhostmigrationstarts( ( endtime - getTime() ) / 1000 ); - if ( isDefined( level.hostmigrationtimer ) ) - { - timepassed = waittillhostmigrationdone(); - endtime += timepassed; - } - } - if ( getTime() != endtime ) - { -/# - println( "SCRIPT WARNING: gettime() = " + getTime() + " NOT EQUAL TO endtime = " + endtime ); -#/ - } - waittillhostmigrationdone(); - return getTime() - starttime; -} - -waitlongdurationwithgameendtimeupdate( duration ) -{ - if ( duration == 0 ) - { - return; - } -/# - assert( duration > 0 ); -#/ - starttime = getTime(); - endtime = getTime() + ( duration * 1000 ); - while ( getTime() < endtime ) - { - waittillhostmigrationstarts( ( endtime - getTime() ) / 1000 ); - while ( isDefined( level.hostmigrationtimer ) ) - { - endtime += 1000; - setgameendtime( int( endtime ) ); - wait 1; - } - } -/# - if ( getTime() != endtime ) - { - println( "SCRIPT WARNING: gettime() = " + getTime() + " NOT EQUAL TO endtime = " + endtime ); -#/ - } - while ( isDefined( level.hostmigrationtimer ) ) - { - endtime += 1000; - setgameendtime( int( endtime ) ); - wait 1; - } - return getTime() - starttime; -} - -find_alternate_player_place( v_origin, min_radius, max_radius, max_height, ignore_targetted_nodes ) -{ - found_node = undefined; - a_nodes = getnodesinradiussorted( v_origin, max_radius, min_radius, max_height, "pathnodes" ); - while ( isDefined( a_nodes ) && a_nodes.size > 0 ) - { - a_player_volumes = getentarray( "player_volume", "script_noteworthy" ); - index = a_nodes.size - 1; - i = index; - while ( i >= 0 ) - { - n_node = a_nodes[ i ]; - if ( ignore_targetted_nodes == 1 ) - { - if ( isDefined( n_node.target ) ) - { - i--; - continue; - } - } - else - { - if ( !positionwouldtelefrag( n_node.origin ) ) - { - if ( maps/mp/zombies/_zm_utility::check_point_in_enabled_zone( n_node.origin, 1, a_player_volumes ) ) - { - v_start = ( n_node.origin[ 0 ], n_node.origin[ 1 ], n_node.origin[ 2 ] + 30 ); - v_end = ( n_node.origin[ 0 ], n_node.origin[ 1 ], n_node.origin[ 2 ] - 30 ); - trace = bullettrace( v_start, v_end, 0, undefined ); - if ( trace[ "fraction" ] < 1 ) - { - override_abort = 0; - if ( isDefined( level._chugabud_reject_node_override_func ) ) - { - override_abort = [[ level._chugabud_reject_node_override_func ]]( v_origin, n_node ); - } - if ( !override_abort ) - { - found_node = n_node; - break; - } - } - } - } - } - else - { - i--; - - } - } - } - return found_node; -} - -hostmigration_put_player_in_better_place() -{ - spawnpoint = undefined; - spawnpoint = find_alternate_player_place( self.origin, 50, 150, 64, 1 ); - if ( !isDefined( spawnpoint ) ) - { - spawnpoint = find_alternate_player_place( self.origin, 150, 400, 64, 1 ); - } - if ( !isDefined( spawnpoint ) ) - { - spawnpoint = find_alternate_player_place( self.origin, 50, 400, 256, 0 ); - } - if ( !isDefined( spawnpoint ) ) - { - spawnpoint = maps/mp/zombies/_zm::check_for_valid_spawn_near_team( self, 1 ); - } - if ( !isDefined( spawnpoint ) ) - { - match_string = ""; - location = level.scr_zm_map_start_location; - if ( location != "default" && location == "" && isDefined( level.default_start_location ) ) - { - location = level.default_start_location; - } - match_string = ( level.scr_zm_ui_gametype + "_" ) + location; - spawnpoints = []; - structs = getstructarray( "initial_spawn", "script_noteworthy" ); - while ( isDefined( structs ) ) - { - _a558 = structs; - _k558 = getFirstArrayKey( _a558 ); - while ( isDefined( _k558 ) ) - { - struct = _a558[ _k558 ]; - while ( isDefined( struct.script_string ) ) - { - tokens = strtok( struct.script_string, " " ); - _a564 = tokens; - _k564 = getFirstArrayKey( _a564 ); - while ( isDefined( _k564 ) ) - { - token = _a564[ _k564 ]; - if ( token == match_string ) - { - spawnpoints[ spawnpoints.size ] = struct; - } - _k564 = getNextArrayKey( _a564, _k564 ); - } - } - _k558 = getNextArrayKey( _a558, _k558 ); - } - } - if ( !isDefined( spawnpoints ) || spawnpoints.size == 0 ) - { - spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); - } -/# - assert( isDefined( spawnpoints ), "Could not find initial spawn points!" ); -#/ - spawnpoint = maps/mp/zombies/_zm::getfreespawnpoint( spawnpoints, self ); - } - if ( isDefined( spawnpoint ) ) - { - self setorigin( spawnpoint.origin ); - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_hud.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_hud.gsc deleted file mode 100644 index 776d008..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_hud.gsc +++ /dev/null @@ -1,163 +0,0 @@ - -init() -{ - precacheshader( "progress_bar_bg" ); - precacheshader( "progress_bar_fg" ); - precacheshader( "progress_bar_fill" ); - precacheshader( "score_bar_bg" ); - level.uiparent = spawnstruct(); - level.uiparent.horzalign = "left"; - level.uiparent.vertalign = "top"; - level.uiparent.alignx = "left"; - level.uiparent.aligny = "top"; - level.uiparent.x = 0; - level.uiparent.y = 0; - level.uiparent.width = 0; - level.uiparent.height = 0; - level.uiparent.children = []; - level.fontheight = 12; - _a103 = level.teams; - _k103 = getFirstArrayKey( _a103 ); - while ( isDefined( _k103 ) ) - { - team = _a103[ _k103 ]; - level.hud[ team ] = spawnstruct(); - _k103 = getNextArrayKey( _a103, _k103 ); - } - level.primaryprogressbary = -61; - level.primaryprogressbarx = 0; - level.primaryprogressbarheight = 9; - level.primaryprogressbarwidth = 120; - level.primaryprogressbartexty = -75; - level.primaryprogressbartextx = 0; - level.primaryprogressbarfontsize = 1,4; - level.primaryprogressbarx_ss = 20; - level.primaryprogressbartextx_ss = 20; - level.primaryprogressbary_ss = 30; - level.primaryprogressbartexty_ss = 33; - level.primaryprogressbarheight_ss = 2; - level.secondaryprogressbary = -85; - level.secondaryprogressbarx = 0; - level.secondaryprogressbarheight = 9; - level.secondaryprogressbarwidth = 120; - level.secondaryprogressbartexty = -100; - level.secondaryprogressbartextx = 0; - level.secondaryprogressbarfontsize = 1,4; - level.secondaryprogressbarx_ss = 20; - level.secondaryprogressbartextx_ss = 20; - level.secondaryprogressbary_ss = 15; - level.secondaryprogressbartexty_ss = 0; - level.secondaryprogressbarheight_ss = 2; - level.teamprogressbary = 32; - level.teamprogressbarheight = 14; - level.teamprogressbarwidth = 192; - level.teamprogressbartexty = 8; - level.teamprogressbarfontsize = 1,65; - setdvar( "ui_generic_status_bar", 0 ); - level.lowertextyalign = "BOTTOM"; - level.lowertexty = -42; - level.lowertextfontsize = 1,4; - level.lowertextyalign_ss = "CENTER"; - level.lowertexty_ss = 40; - level.lowertextfontsize_ss = 1,4; -} - -fontpulseinit() -{ - self.basefontscale = self.fontscale; - self.maxfontscale = self.fontscale * 2; - self.inframes = 1,5; - self.outframes = 3; -} - -fontpulse( player ) -{ - self notify( "fontPulse" ); - self endon( "fontPulse" ); - self endon( "death" ); - player endon( "disconnect" ); - player endon( "joined_team" ); - player endon( "joined_spectators" ); - if ( self.outframes == 0 ) - { - self.fontscale = 0,01; - } - else - { - self.fontscale = self.fontscale; - } - if ( self.inframes > 0 ) - { - self changefontscaleovertime( self.inframes * 0,05 ); - self.fontscale = self.maxfontscale; - wait ( self.inframes * 0,05 ); - } - else - { - self.fontscale = self.maxfontscale; - self.alpha = 0; - self fadeovertime( self.outframes * 0,05 ); - self.alpha = 1; - } - if ( self.outframes > 0 ) - { - self changefontscaleovertime( self.outframes * 0,05 ); - self.fontscale = self.basefontscale; - } -} - -fadetoblackforxsec( startwait, blackscreenwait, fadeintime, fadeouttime, shadername ) -{ - wait startwait; - if ( !isDefined( self ) ) - { - return; - } - if ( !isDefined( self.blackscreen ) ) - { - self.blackscreen = newclienthudelem( self ); - } - self.blackscreen.x = 0; - self.blackscreen.y = 0; - self.blackscreen.horzalign = "fullscreen"; - self.blackscreen.vertalign = "fullscreen"; - self.blackscreen.foreground = 0; - self.blackscreen.hidewhendead = 0; - self.blackscreen.hidewheninmenu = 1; - self.blackscreen.sort = 50; - if ( isDefined( shadername ) ) - { - self.blackscreen setshader( shadername, 640, 480 ); - } - else - { - self.blackscreen setshader( "black", 640, 480 ); - } - self.blackscreen.alpha = 0; - if ( fadeintime > 0 ) - { - self.blackscreen fadeovertime( fadeintime ); - } - self.blackscreen.alpha = 1; - wait fadeintime; - if ( !isDefined( self.blackscreen ) ) - { - return; - } - wait blackscreenwait; - if ( !isDefined( self.blackscreen ) ) - { - return; - } - if ( fadeouttime > 0 ) - { - self.blackscreen fadeovertime( fadeouttime ); - } - self.blackscreen.alpha = 0; - wait fadeouttime; - if ( isDefined( self.blackscreen ) ) - { - self.blackscreen destroy(); - self.blackscreen = undefined; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_hud_message.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_hud_message.gsc deleted file mode 100644 index 2425d13..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_hud_message.gsc +++ /dev/null @@ -1,1359 +0,0 @@ -#include maps/mp/_utility; -#include maps/mp/gametypes_zm/_globallogic_audio; -#include maps/mp/_music; -#include maps/mp/gametypes_zm/_hud_message; -#include maps/mp/gametypes_zm/_hud_util; - -init() -{ - precachestring( &"MENU_POINTS" ); - precachestring( &"MP_FIRSTPLACE_NAME" ); - precachestring( &"MP_SECONDPLACE_NAME" ); - precachestring( &"MP_THIRDPLACE_NAME" ); - precachestring( &"MP_WAGER_PLACE_NAME" ); - precachestring( &"MP_MATCH_BONUS_IS" ); - precachestring( &"MP_CODPOINTS_MATCH_BONUS_IS" ); - precachestring( &"MP_WAGER_WINNINGS_ARE" ); - precachestring( &"MP_WAGER_SIDEBET_WINNINGS_ARE" ); - precachestring( &"MP_WAGER_IN_THE_MONEY" ); - precachestring( &"faction_popup" ); - game[ "strings" ][ "draw" ] = &"MP_DRAW_CAPS"; - game[ "strings" ][ "round_draw" ] = &"MP_ROUND_DRAW_CAPS"; - game[ "strings" ][ "round_win" ] = &"MP_ROUND_WIN_CAPS"; - game[ "strings" ][ "round_loss" ] = &"MP_ROUND_LOSS_CAPS"; - game[ "strings" ][ "victory" ] = &"MP_VICTORY_CAPS"; - game[ "strings" ][ "defeat" ] = &"MP_DEFEAT_CAPS"; - game[ "strings" ][ "game_over" ] = &"MP_GAME_OVER_CAPS"; - game[ "strings" ][ "halftime" ] = &"MP_HALFTIME_CAPS"; - game[ "strings" ][ "overtime" ] = &"MP_OVERTIME_CAPS"; - game[ "strings" ][ "roundend" ] = &"MP_ROUNDEND_CAPS"; - game[ "strings" ][ "intermission" ] = &"MP_INTERMISSION_CAPS"; - game[ "strings" ][ "side_switch" ] = &"MP_SWITCHING_SIDES_CAPS"; - game[ "strings" ][ "match_bonus" ] = &"MP_MATCH_BONUS_IS"; - game[ "strings" ][ "codpoints_match_bonus" ] = &"MP_CODPOINTS_MATCH_BONUS_IS"; - game[ "strings" ][ "wager_winnings" ] = &"MP_WAGER_WINNINGS_ARE"; - game[ "strings" ][ "wager_sidebet_winnings" ] = &"MP_WAGER_SIDEBET_WINNINGS_ARE"; - game[ "strings" ][ "wager_inthemoney" ] = &"MP_WAGER_IN_THE_MONEY_CAPS"; - game[ "strings" ][ "wager_loss" ] = &"MP_WAGER_LOSS_CAPS"; - game[ "strings" ][ "wager_topwinners" ] = &"MP_WAGER_TOPWINNERS"; - game[ "menu_endgameupdate" ] = "endgameupdate"; - precachemenu( game[ "menu_endgameupdate" ] ); - level thread onplayerconnect(); -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread hintmessagedeaththink(); - player thread lowermessagethink(); - player thread initnotifymessage(); - player thread initcustomgametypeheader(); - } -} - -initcustomgametypeheader() -{ - font = "default"; - titlesize = 2,5; - self.customgametypeheader = createfontstring( font, titlesize ); - self.customgametypeheader setpoint( "TOP", undefined, 0, 30 ); - self.customgametypeheader.glowalpha = 1; - self.customgametypeheader.hidewheninmenu = 1; - self.customgametypeheader.archived = 0; - self.customgametypeheader.color = ( 1, 1, 0,6 ); - self.customgametypeheader.alpha = 1; - titlesize = 2; - self.customgametypesubheader = createfontstring( font, titlesize ); - self.customgametypesubheader setparent( self.customgametypeheader ); - self.customgametypesubheader setpoint( "TOP", "BOTTOM", 0, 0 ); - self.customgametypesubheader.glowalpha = 1; - self.customgametypesubheader.hidewheninmenu = 1; - self.customgametypesubheader.archived = 0; - self.customgametypesubheader.color = ( 1, 1, 0,6 ); - self.customgametypesubheader.alpha = 1; -} - -hintmessage( hinttext, duration ) -{ - notifydata = spawnstruct(); - notifydata.notifytext = hinttext; - notifydata.duration = duration; - notifymessage( notifydata ); -} - -hintmessageplayers( players, hinttext, duration ) -{ - notifydata = spawnstruct(); - notifydata.notifytext = hinttext; - notifydata.duration = duration; - i = 0; - while ( i < players.size ) - { - players[ i ] notifymessage( notifydata ); - i++; - } -} - -showinitialfactionpopup( team ) -{ - self luinotifyevent( &"faction_popup", 1, game[ "strings" ][ team + "_name" ] ); - maps/mp/gametypes_zm/_hud_message::oldnotifymessage( undefined, undefined, undefined, undefined ); -} - -initnotifymessage() -{ - if ( !sessionmodeiszombiesgame() ) - { - if ( self issplitscreen() ) - { - titlesize = 2; - textsize = 1,4; - iconsize = 24; - font = "extrabig"; - point = "TOP"; - relativepoint = "BOTTOM"; - yoffset = 30; - xoffset = 30; - } - else - { - titlesize = 2,5; - textsize = 1,75; - iconsize = 30; - font = "extrabig"; - point = "TOP"; - relativepoint = "BOTTOM"; - yoffset = 0; - xoffset = 0; - } - } - else if ( self issplitscreen() ) - { - titlesize = 2; - textsize = 1,4; - iconsize = 24; - font = "extrabig"; - point = "TOP"; - relativepoint = "BOTTOM"; - yoffset = 30; - xoffset = 30; - } - else - { - titlesize = 2,5; - textsize = 1,75; - iconsize = 30; - font = "extrabig"; - point = "BOTTOM LEFT"; - relativepoint = "TOP"; - yoffset = 0; - xoffset = 0; - } - self.notifytitle = createfontstring( font, titlesize ); - self.notifytitle setpoint( point, undefined, xoffset, yoffset ); - self.notifytitle.glowalpha = 1; - self.notifytitle.hidewheninmenu = 1; - self.notifytitle.archived = 0; - self.notifytitle.alpha = 0; - self.notifytext = createfontstring( font, textsize ); - self.notifytext setparent( self.notifytitle ); - self.notifytext setpoint( point, relativepoint, 0, 0 ); - self.notifytext.glowalpha = 1; - self.notifytext.hidewheninmenu = 1; - self.notifytext.archived = 0; - self.notifytext.alpha = 0; - self.notifytext2 = createfontstring( font, textsize ); - self.notifytext2 setparent( self.notifytitle ); - self.notifytext2 setpoint( point, relativepoint, 0, 0 ); - self.notifytext2.glowalpha = 1; - self.notifytext2.hidewheninmenu = 1; - self.notifytext2.archived = 0; - self.notifytext2.alpha = 0; - self.notifyicon = createicon( "white", iconsize, iconsize ); - self.notifyicon setparent( self.notifytext2 ); - self.notifyicon setpoint( point, relativepoint, 0, 0 ); - self.notifyicon.hidewheninmenu = 1; - self.notifyicon.archived = 0; - self.notifyicon.alpha = 0; - self.doingnotify = 0; - self.notifyqueue = []; -} - -oldnotifymessage( titletext, notifytext, iconname, glowcolor, sound, duration ) -{ - if ( level.wagermatch && !level.teambased ) - { - return; - } - notifydata = spawnstruct(); - notifydata.titletext = titletext; - notifydata.notifytext = notifytext; - notifydata.iconname = iconname; - notifydata.sound = sound; - notifydata.duration = duration; - self.startmessagenotifyqueue[ self.startmessagenotifyqueue.size ] = notifydata; - self notify( "received award" ); -} - -notifymessage( notifydata ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self.messagenotifyqueue[ self.messagenotifyqueue.size ] = notifydata; - self notify( "received award" ); -} - -shownotifymessage( notifydata, duration ) -{ - self endon( "disconnect" ); - self.doingnotify = 1; - waitrequirevisibility( 0 ); - self notify( "notifyMessageBegin" ); - self thread resetoncancel(); - if ( isDefined( notifydata.sound ) ) - { - self playlocalsound( notifydata.sound ); - } - if ( isDefined( notifydata.musicstate ) ) - { - self maps/mp/_music::setmusicstate( notifydata.music ); - } - if ( isDefined( notifydata.leadersound ) ) - { - self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( notifydata.leadersound ); - } - if ( isDefined( notifydata.glowcolor ) ) - { - glowcolor = notifydata.glowcolor; - } - else - { - glowcolor = ( 1, 1, 1 ); - } - if ( isDefined( notifydata.color ) ) - { - color = notifydata.color; - } - else - { - color = ( 1, 1, 1 ); - } - anchorelem = self.notifytitle; - if ( isDefined( notifydata.titletext ) ) - { - if ( isDefined( notifydata.titlelabel ) ) - { - self.notifytitle.label = notifydata.titlelabel; - } - else - { - self.notifytitle.label = &""; - } - if ( isDefined( notifydata.titlelabel ) && !isDefined( notifydata.titleisstring ) ) - { - self.notifytitle setvalue( notifydata.titletext ); - } - else - { - self.notifytitle settext( notifydata.titletext ); - } - self.notifytitle setcod7decodefx( 200, int( duration * 1000 ), 600 ); - self.notifytitle.glowcolor = glowcolor; - self.notifytitle.color = color; - self.notifytitle.alpha = 1; - } - if ( isDefined( notifydata.notifytext ) ) - { - if ( isDefined( notifydata.textlabel ) ) - { - self.notifytext.label = notifydata.textlabel; - } - else - { - self.notifytext.label = &""; - } - if ( isDefined( notifydata.textlabel ) && !isDefined( notifydata.textisstring ) ) - { - self.notifytext setvalue( notifydata.notifytext ); - } - else - { - self.notifytext settext( notifydata.notifytext ); - } - self.notifytext setcod7decodefx( 100, int( duration * 1000 ), 600 ); - self.notifytext.glowcolor = glowcolor; - self.notifytext.color = color; - self.notifytext.alpha = 1; - anchorelem = self.notifytext; - } - if ( isDefined( notifydata.notifytext2 ) ) - { - if ( self issplitscreen() ) - { - if ( isDefined( notifydata.text2label ) ) - { - self iprintlnbold( notifydata.text2label, notifydata.notifytext2 ); - } - else - { - self iprintlnbold( notifydata.notifytext2 ); - } - } - else - { - self.notifytext2 setparent( anchorelem ); - if ( isDefined( notifydata.text2label ) ) - { - self.notifytext2.label = notifydata.text2label; - } - else - { - self.notifytext2.label = &""; - } - self.notifytext2 settext( notifydata.notifytext2 ); - self.notifytext2 setpulsefx( 100, int( duration * 1000 ), 1000 ); - self.notifytext2.glowcolor = glowcolor; - self.notifytext2.color = color; - self.notifytext2.alpha = 1; - anchorelem = self.notifytext2; - } - } - if ( isDefined( notifydata.iconname ) ) - { - iconwidth = 60; - iconheight = 60; - if ( isDefined( notifydata.iconwidth ) ) - { - iconwidth = notifydata.iconwidth; - } - if ( isDefined( notifydata.iconheight ) ) - { - iconheight = notifydata.iconheight; - } - self.notifyicon setparent( anchorelem ); - self.notifyicon setshader( notifydata.iconname, iconwidth, iconheight ); - self.notifyicon.alpha = 0; - self.notifyicon fadeovertime( 1 ); - self.notifyicon.alpha = 1; - waitrequirevisibility( duration ); - self.notifyicon fadeovertime( 0,75 ); - self.notifyicon.alpha = 0; - } - else - { - waitrequirevisibility( duration ); - } - self notify( "notifyMessageDone" ); - self.doingnotify = 0; -} - -waitrequirevisibility( waittime ) -{ - interval = 0,05; - while ( !self canreadtext() ) - { - wait interval; - } - while ( waittime > 0 ) - { - wait interval; - if ( self canreadtext() ) - { - waittime -= interval; - } - } -} - -canreadtext() -{ - return 1; -} - -resetondeath() -{ - self endon( "notifyMessageDone" ); - self endon( "disconnect" ); - level endon( "game_ended" ); - self waittill( "death" ); - resetnotify(); -} - -resetoncancel() -{ - self notify( "resetOnCancel" ); - self endon( "resetOnCancel" ); - self endon( "notifyMessageDone" ); - self endon( "disconnect" ); - level waittill( "cancel_notify" ); - resetnotify(); -} - -resetnotify() -{ - self.notifytitle.alpha = 0; - self.notifytext.alpha = 0; - self.notifyicon.alpha = 0; - self.doingnotify = 0; -} - -hintmessagedeaththink() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "death" ); - if ( isDefined( self.hintmessage ) ) - { - self.hintmessage destroyelem(); - } - } -} - -lowermessagethink() -{ - self endon( "disconnect" ); - self.lowermessage = createfontstring( "default", level.lowertextfontsize ); - self.lowermessage setpoint( "CENTER", level.lowertextyalign, 0, level.lowertexty ); - self.lowermessage settext( "" ); - self.lowermessage.archived = 0; - timerfontsize = 1,5; - if ( self issplitscreen() ) - { - timerfontsize = 1,4; - } - self.lowertimer = createfontstring( "default", timerfontsize ); - self.lowertimer setparent( self.lowermessage ); - self.lowertimer setpoint( "TOP", "BOTTOM", 0, 0 ); - self.lowertimer settext( "" ); - self.lowertimer.archived = 0; -} - -setmatchscorehudelemforteam( team ) -{ - if ( level.roundscorecarry ) - { - self setvalue( getteamscore( team ) ); - } - else - { - self setvalue( getroundswon( team ) ); - } -} - -teamoutcomenotify( winner, isround, endreasontext ) -{ - self endon( "disconnect" ); - self notify( "reset_outcome" ); - team = self.pers[ "team" ]; - while ( isDefined( team ) && team == "spectator" ) - { - i = 0; - while ( i < level.players.size ) - { - if ( self.currentspectatingclient == level.players[ i ].clientid ) - { - team = level.players[ i ].pers[ "team" ]; - break; - } - else - { - i++; - } - } - } - if ( !isDefined( team ) || !isDefined( level.teams[ team ] ) ) - { - team = "allies"; - } - while ( self.doingnotify ) - { - wait 0,05; - } - self endon( "reset_outcome" ); - headerfont = "extrabig"; - font = "default"; - if ( self issplitscreen() ) - { - titlesize = 2; - textsize = 1,5; - iconsize = 30; - spacing = 10; - } - else - { - titlesize = 3; - textsize = 2; - iconsize = 70; - spacing = 25; - } - duration = 60000; - outcometitle = createfontstring( headerfont, titlesize ); - outcometitle setpoint( "TOP", undefined, 0, 30 ); - outcometitle.glowalpha = 1; - outcometitle.hidewheninmenu = 0; - outcometitle.archived = 0; - outcometext = createfontstring( font, 2 ); - outcometext setparent( outcometitle ); - outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); - outcometext.glowalpha = 1; - outcometext.hidewheninmenu = 0; - outcometext.archived = 0; - if ( winner == "halftime" ) - { - outcometitle settext( game[ "strings" ][ "halftime" ] ); - outcometitle.color = ( 1, 1, 1 ); - winner = "allies"; - } - else if ( winner == "intermission" ) - { - outcometitle settext( game[ "strings" ][ "intermission" ] ); - outcometitle.color = ( 1, 1, 1 ); - winner = "allies"; - } - else if ( winner == "roundend" ) - { - outcometitle settext( game[ "strings" ][ "roundend" ] ); - outcometitle.color = ( 1, 1, 1 ); - winner = "allies"; - } - else if ( winner == "overtime" ) - { - outcometitle settext( game[ "strings" ][ "overtime" ] ); - outcometitle.color = ( 1, 1, 1 ); - winner = "allies"; - } - else if ( winner == "tie" ) - { - if ( isround ) - { - outcometitle settext( game[ "strings" ][ "round_draw" ] ); - } - else - { - outcometitle settext( game[ "strings" ][ "draw" ] ); - } - outcometitle.color = ( 0,29, 0,61, 0,7 ); - winner = "allies"; - } - else if ( isDefined( self.pers[ "team" ] ) && winner == team ) - { - if ( isround ) - { - outcometitle settext( game[ "strings" ][ "round_win" ] ); - } - else - { - outcometitle settext( game[ "strings" ][ "victory" ] ); - } - outcometitle.color = ( 0,42, 0,68, 0,46 ); - } - else - { - if ( isround ) - { - outcometitle settext( game[ "strings" ][ "round_loss" ] ); - } - else - { - outcometitle settext( game[ "strings" ][ "defeat" ] ); - } - outcometitle.color = ( 0,73, 0,29, 0,19 ); - } - outcometext settext( endreasontext ); - outcometitle setcod7decodefx( 200, duration, 600 ); - outcometext setpulsefx( 100, duration, 1000 ); - iconspacing = 100; - currentx = ( ( level.teamcount - 1 ) * -1 * iconspacing ) / 2; - teamicons = []; - teamicons[ team ] = createicon( game[ "icons" ][ team ], iconsize, iconsize ); - teamicons[ team ] setparent( outcometext ); - teamicons[ team ] setpoint( "TOP", "BOTTOM", currentx, spacing ); - teamicons[ team ].hidewheninmenu = 0; - teamicons[ team ].archived = 0; - teamicons[ team ].alpha = 0; - teamicons[ team ] fadeovertime( 0,5 ); - teamicons[ team ].alpha = 1; - currentx += iconspacing; - _a607 = level.teams; - _k607 = getFirstArrayKey( _a607 ); - while ( isDefined( _k607 ) ) - { - enemyteam = _a607[ _k607 ]; - if ( team == enemyteam ) - { - } - else - { - teamicons[ enemyteam ] = createicon( game[ "icons" ][ enemyteam ], iconsize, iconsize ); - teamicons[ enemyteam ] setparent( outcometext ); - teamicons[ enemyteam ] setpoint( "TOP", "BOTTOM", currentx, spacing ); - teamicons[ enemyteam ].hidewheninmenu = 0; - teamicons[ enemyteam ].archived = 0; - teamicons[ enemyteam ].alpha = 0; - teamicons[ enemyteam ] fadeovertime( 0,5 ); - teamicons[ enemyteam ].alpha = 1; - currentx += iconspacing; - } - _k607 = getNextArrayKey( _a607, _k607 ); - } - teamscores = []; - teamscores[ team ] = createfontstring( font, titlesize ); - teamscores[ team ] setparent( teamicons[ team ] ); - teamscores[ team ] setpoint( "TOP", "BOTTOM", 0, spacing ); - teamscores[ team ].glowalpha = 1; - if ( isround ) - { - teamscores[ team ] setvalue( getteamscore( team ) ); - } - else - { - teamscores[ team ] [[ level.setmatchscorehudelemforteam ]]( team ); - } - teamscores[ team ].hidewheninmenu = 0; - teamscores[ team ].archived = 0; - teamscores[ team ] setpulsefx( 100, duration, 1000 ); - _a641 = level.teams; - _k641 = getFirstArrayKey( _a641 ); - while ( isDefined( _k641 ) ) - { - enemyteam = _a641[ _k641 ]; - if ( team == enemyteam ) - { - } - else - { - teamscores[ enemyteam ] = createfontstring( headerfont, titlesize ); - teamscores[ enemyteam ] setparent( teamicons[ enemyteam ] ); - teamscores[ enemyteam ] setpoint( "TOP", "BOTTOM", 0, spacing ); - teamscores[ enemyteam ].glowalpha = 1; - if ( isround ) - { - teamscores[ enemyteam ] setvalue( getteamscore( enemyteam ) ); - } - else - { - teamscores[ enemyteam ] [[ level.setmatchscorehudelemforteam ]]( enemyteam ); - } - teamscores[ enemyteam ].hidewheninmenu = 0; - teamscores[ enemyteam ].archived = 0; - teamscores[ enemyteam ] setpulsefx( 100, duration, 1000 ); - } - _k641 = getNextArrayKey( _a641, _k641 ); - } - font = "objective"; - matchbonus = undefined; - if ( isDefined( self.matchbonus ) ) - { - matchbonus = createfontstring( font, 2 ); - matchbonus setparent( outcometext ); - matchbonus setpoint( "TOP", "BOTTOM", 0, iconsize + ( spacing * 3 ) + teamscores[ team ].height ); - matchbonus.glowalpha = 1; - matchbonus.hidewheninmenu = 0; - matchbonus.archived = 0; - matchbonus.label = game[ "strings" ][ "match_bonus" ]; - matchbonus setvalue( self.matchbonus ); - } - self thread resetoutcomenotify( teamicons, teamscores, outcometitle, outcometext ); -} - -teamoutcomenotifyzombie( winner, isround, endreasontext ) -{ - self endon( "disconnect" ); - self notify( "reset_outcome" ); - team = self.pers[ "team" ]; - while ( isDefined( team ) && team == "spectator" ) - { - i = 0; - while ( i < level.players.size ) - { - if ( self.currentspectatingclient == level.players[ i ].clientid ) - { - team = level.players[ i ].pers[ "team" ]; - break; - } - else - { - i++; - } - } - } - if ( !isDefined( team ) || !isDefined( level.teams[ team ] ) ) - { - team = "allies"; - } - while ( self.doingnotify ) - { - wait 0,05; - } - self endon( "reset_outcome" ); - if ( self issplitscreen() ) - { - titlesize = 2; - spacing = 10; - font = "default"; - } - else - { - titlesize = 3; - spacing = 50; - font = "objective"; - } - outcometitle = createfontstring( font, titlesize ); - outcometitle setpoint( "TOP", undefined, 0, spacing ); - outcometitle.glowalpha = 1; - outcometitle.hidewheninmenu = 0; - outcometitle.archived = 0; - outcometitle settext( endreasontext ); - outcometitle setpulsefx( 100, 60000, 1000 ); - self thread resetoutcomenotify( undefined, undefined, outcometitle ); -} - -outcomenotify( winner, isroundend, endreasontext ) -{ - self endon( "disconnect" ); - self notify( "reset_outcome" ); - while ( self.doingnotify ) - { - wait 0,05; - } - self endon( "reset_outcome" ); - headerfont = "extrabig"; - font = "default"; - if ( self issplitscreen() ) - { - titlesize = 2; - winnersize = 1,5; - othersize = 1,5; - iconsize = 30; - spacing = 10; - } - else - { - titlesize = 3; - winnersize = 2; - othersize = 1,5; - iconsize = 30; - spacing = 20; - } - duration = 60000; - players = level.placement[ "all" ]; - outcometitle = createfontstring( headerfont, titlesize ); - outcometitle setpoint( "TOP", undefined, 0, spacing ); - if ( !maps/mp/_utility::isoneround() && !isroundend ) - { - outcometitle settext( game[ "strings" ][ "game_over" ] ); - } - else - { - if ( isDefined( players[ 1 ] ) && players[ 0 ].score == players[ 1 ].score && players[ 0 ].deaths == players[ 1 ].deaths || self == players[ 0 ] && self == players[ 1 ] ) - { - outcometitle settext( game[ "strings" ][ "tie" ] ); - } - else - { - if ( isDefined( players[ 2 ] ) && players[ 0 ].score == players[ 2 ].score && players[ 0 ].deaths == players[ 2 ].deaths && self == players[ 2 ] ) - { - outcometitle settext( game[ "strings" ][ "tie" ] ); - } - else - { - if ( isDefined( players[ 0 ] ) && self == players[ 0 ] ) - { - outcometitle settext( game[ "strings" ][ "victory" ] ); - outcometitle.color = ( 0,42, 0,68, 0,46 ); - } - else - { - outcometitle settext( game[ "strings" ][ "defeat" ] ); - outcometitle.color = ( 0,73, 0,29, 0,19 ); - } - } - } - } - outcometitle.glowalpha = 1; - outcometitle.hidewheninmenu = 0; - outcometitle.archived = 0; - outcometitle setcod7decodefx( 200, duration, 600 ); - outcometext = createfontstring( font, 2 ); - outcometext setparent( outcometitle ); - outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); - outcometext.glowalpha = 1; - outcometext.hidewheninmenu = 0; - outcometext.archived = 0; - outcometext settext( endreasontext ); - firsttitle = createfontstring( font, winnersize ); - firsttitle setparent( outcometext ); - firsttitle setpoint( "TOP", "BOTTOM", 0, spacing ); - firsttitle.glowalpha = 1; - firsttitle.hidewheninmenu = 0; - firsttitle.archived = 0; - if ( isDefined( players[ 0 ] ) ) - { - firsttitle.label = &"MP_FIRSTPLACE_NAME"; - firsttitle setplayernamestring( players[ 0 ] ); - firsttitle setcod7decodefx( 175, duration, 600 ); - } - secondtitle = createfontstring( font, othersize ); - secondtitle setparent( firsttitle ); - secondtitle setpoint( "TOP", "BOTTOM", 0, spacing ); - secondtitle.glowalpha = 1; - secondtitle.hidewheninmenu = 0; - secondtitle.archived = 0; - if ( isDefined( players[ 1 ] ) ) - { - secondtitle.label = &"MP_SECONDPLACE_NAME"; - secondtitle setplayernamestring( players[ 1 ] ); - secondtitle setcod7decodefx( 175, duration, 600 ); - } - thirdtitle = createfontstring( font, othersize ); - thirdtitle setparent( secondtitle ); - thirdtitle setpoint( "TOP", "BOTTOM", 0, spacing ); - thirdtitle setparent( secondtitle ); - thirdtitle.glowalpha = 1; - thirdtitle.hidewheninmenu = 0; - thirdtitle.archived = 0; - if ( isDefined( players[ 2 ] ) ) - { - thirdtitle.label = &"MP_THIRDPLACE_NAME"; - thirdtitle setplayernamestring( players[ 2 ] ); - thirdtitle setcod7decodefx( 175, duration, 600 ); - } - matchbonus = createfontstring( font, 2 ); - matchbonus setparent( thirdtitle ); - matchbonus setpoint( "TOP", "BOTTOM", 0, spacing ); - matchbonus.glowalpha = 1; - matchbonus.hidewheninmenu = 0; - matchbonus.archived = 0; - if ( isDefined( self.matchbonus ) ) - { - matchbonus.label = game[ "strings" ][ "match_bonus" ]; - matchbonus setvalue( self.matchbonus ); - } - self thread updateoutcome( firsttitle, secondtitle, thirdtitle ); - self thread resetoutcomenotify( undefined, undefined, outcometitle, outcometext, firsttitle, secondtitle, thirdtitle, matchbonus ); -} - -wageroutcomenotify( winner, endreasontext ) -{ - self endon( "disconnect" ); - self notify( "reset_outcome" ); - while ( self.doingnotify ) - { - wait 0,05; - } - setmatchflag( "enable_popups", 0 ); - self endon( "reset_outcome" ); - headerfont = "extrabig"; - font = "objective"; - if ( self issplitscreen() ) - { - titlesize = 2; - winnersize = 1,5; - othersize = 1,5; - iconsize = 30; - spacing = 2; - } - else - { - titlesize = 3; - winnersize = 2; - othersize = 1,5; - iconsize = 30; - spacing = 20; - } - halftime = 0; - if ( isDefined( level.sidebet ) && level.sidebet ) - { - halftime = 1; - } - duration = 60000; - players = level.placement[ "all" ]; - outcometitle = createfontstring( headerfont, titlesize ); - outcometitle setpoint( "TOP", undefined, 0, spacing ); - if ( halftime ) - { - outcometitle settext( game[ "strings" ][ "intermission" ] ); - outcometitle.color = ( 1, 1, 1 ); - outcometitle.glowcolor = ( 1, 1, 1 ); - } - else if ( isDefined( level.dontcalcwagerwinnings ) && level.dontcalcwagerwinnings == 1 ) - { - outcometitle settext( game[ "strings" ][ "wager_topwinners" ] ); - outcometitle.color = ( 0,42, 0,68, 0,46 ); - } - else - { - if ( isDefined( self.wagerwinnings ) && self.wagerwinnings > 0 ) - { - outcometitle settext( game[ "strings" ][ "wager_inthemoney" ] ); - outcometitle.color = ( 0,42, 0,68, 0,46 ); - } - else - { - outcometitle settext( game[ "strings" ][ "wager_loss" ] ); - outcometitle.color = ( 0,73, 0,29, 0,19 ); - } - } - outcometitle.glowalpha = 1; - outcometitle.hidewheninmenu = 0; - outcometitle.archived = 0; - outcometitle setcod7decodefx( 200, duration, 600 ); - outcometext = createfontstring( font, 2 ); - outcometext setparent( outcometitle ); - outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); - outcometext.glowalpha = 1; - outcometext.hidewheninmenu = 0; - outcometext.archived = 0; - outcometext settext( endreasontext ); - playernamehudelems = []; - playercphudelems = []; - numplayers = players.size; - i = 0; - while ( i < numplayers ) - { - if ( !halftime && isDefined( players[ i ] ) ) - { - secondtitle = createfontstring( font, othersize ); - if ( playernamehudelems.size == 0 ) - { - secondtitle setparent( outcometext ); - secondtitle setpoint( "TOP_LEFT", "BOTTOM", -175, spacing * 3 ); - } - else - { - secondtitle setparent( playernamehudelems[ playernamehudelems.size - 1 ] ); - secondtitle setpoint( "TOP_LEFT", "BOTTOM_LEFT", 0, spacing ); - } - secondtitle.glowalpha = 1; - secondtitle.hidewheninmenu = 0; - secondtitle.archived = 0; - secondtitle.label = &"MP_WAGER_PLACE_NAME"; - secondtitle.playernum = i; - secondtitle setplayernamestring( players[ i ] ); - playernamehudelems[ playernamehudelems.size ] = secondtitle; - secondcp = createfontstring( font, othersize ); - secondcp setparent( secondtitle ); - secondcp setpoint( "TOP_RIGHT", "TOP_LEFT", 350, 0 ); - secondcp.glowalpha = 1; - secondcp.hidewheninmenu = 0; - secondcp.archived = 0; - secondcp.label = &"MENU_POINTS"; - secondcp.currentvalue = 0; - if ( isDefined( players[ i ].wagerwinnings ) ) - { - secondcp.targetvalue = players[ i ].wagerwinnings; - } - else - { - secondcp.targetvalue = 0; - } - if ( secondcp.targetvalue > 0 ) - { - secondcp.color = ( 0,42, 0,68, 0,46 ); - } - secondcp setvalue( 0 ); - playercphudelems[ playercphudelems.size ] = secondcp; - } - i++; - } - self thread updatewageroutcome( playernamehudelems, playercphudelems ); - self thread resetwageroutcomenotify( playernamehudelems, playercphudelems, outcometitle, outcometext ); - if ( halftime ) - { - return; - } - stillupdating = 1; - countupduration = 2; - cpincrement = 9999; - if ( isDefined( playercphudelems[ 0 ] ) ) - { - cpincrement = int( playercphudelems[ 0 ].targetvalue / ( countupduration / 0,05 ) ); - if ( cpincrement < 1 ) - { - cpincrement = 1; - } - } - while ( stillupdating ) - { - stillupdating = 0; - i = 0; - while ( i < playercphudelems.size ) - { - if ( isDefined( playercphudelems[ i ] ) && playercphudelems[ i ].currentvalue < playercphudelems[ i ].targetvalue ) - { - playercphudelems[ i ].currentvalue += cpincrement; - if ( playercphudelems[ i ].currentvalue > playercphudelems[ i ].targetvalue ) - { - playercphudelems[ i ].currentvalue = playercphudelems[ i ].targetvalue; - } - playercphudelems[ i ] setvalue( playercphudelems[ i ].currentvalue ); - stillupdating = 1; - } - i++; - } - wait 0,05; - } -} - -teamwageroutcomenotify( winner, isroundend, endreasontext ) -{ - self endon( "disconnect" ); - self notify( "reset_outcome" ); - team = self.pers[ "team" ]; - if ( !isDefined( team ) || !isDefined( level.teams[ team ] ) ) - { - team = "allies"; - } - wait 0,05; - while ( self.doingnotify ) - { - wait 0,05; - } - self endon( "reset_outcome" ); - headerfont = "extrabig"; - font = "objective"; - if ( self issplitscreen() ) - { - titlesize = 2; - textsize = 1,5; - iconsize = 30; - spacing = 10; - } - else - { - titlesize = 3; - textsize = 2; - iconsize = 70; - spacing = 15; - } - halftime = 0; - if ( isDefined( level.sidebet ) && level.sidebet ) - { - halftime = 1; - } - duration = 60000; - outcometitle = createfontstring( headerfont, titlesize ); - outcometitle setpoint( "TOP", undefined, 0, spacing ); - outcometitle.glowalpha = 1; - outcometitle.hidewheninmenu = 0; - outcometitle.archived = 0; - outcometext = createfontstring( font, 2 ); - outcometext setparent( outcometitle ); - outcometext setpoint( "TOP", "BOTTOM", 0, 0 ); - outcometext.glowalpha = 1; - outcometext.hidewheninmenu = 0; - outcometext.archived = 0; - if ( winner == "tie" ) - { - if ( isroundend ) - { - outcometitle settext( game[ "strings" ][ "round_draw" ] ); - } - else - { - outcometitle settext( game[ "strings" ][ "draw" ] ); - } - outcometitle.color = ( 1, 1, 1 ); - winner = "allies"; - } - else if ( winner == "overtime" ) - { - outcometitle settext( game[ "strings" ][ "overtime" ] ); - outcometitle.color = ( 1, 1, 1 ); - } - else if ( isDefined( self.pers[ "team" ] ) && winner == team ) - { - if ( isroundend ) - { - outcometitle settext( game[ "strings" ][ "round_win" ] ); - } - else - { - outcometitle settext( game[ "strings" ][ "victory" ] ); - } - outcometitle.color = ( 0,42, 0,68, 0,46 ); - } - else - { - if ( isroundend ) - { - outcometitle settext( game[ "strings" ][ "round_loss" ] ); - } - else - { - outcometitle settext( game[ "strings" ][ "defeat" ] ); - } - outcometitle.color = ( 0,73, 0,29, 0,19 ); - } - if ( !isDefined( level.dontshowendreason ) || !level.dontshowendreason ) - { - outcometext settext( endreasontext ); - } - outcometitle setpulsefx( 100, duration, 1000 ); - outcometext setpulsefx( 100, duration, 1000 ); - teamicons = []; - teamicons[ team ] = createicon( game[ "icons" ][ team ], iconsize, iconsize ); - teamicons[ team ] setparent( outcometext ); - teamicons[ team ] setpoint( "TOP", "BOTTOM", -60, spacing ); - teamicons[ team ].hidewheninmenu = 0; - teamicons[ team ].archived = 0; - teamicons[ team ].alpha = 0; - teamicons[ team ] fadeovertime( 0,5 ); - teamicons[ team ].alpha = 1; - _a1171 = level.teams; - _k1171 = getFirstArrayKey( _a1171 ); - while ( isDefined( _k1171 ) ) - { - enemyteam = _a1171[ _k1171 ]; - if ( team == enemyteam ) - { - } - else - { - teamicons[ enemyteam ] = createicon( game[ "icons" ][ enemyteam ], iconsize, iconsize ); - teamicons[ enemyteam ] setparent( outcometext ); - teamicons[ enemyteam ] setpoint( "TOP", "BOTTOM", 60, spacing ); - teamicons[ enemyteam ].hidewheninmenu = 0; - teamicons[ enemyteam ].archived = 0; - teamicons[ enemyteam ].alpha = 0; - teamicons[ enemyteam ] fadeovertime( 0,5 ); - teamicons[ enemyteam ].alpha = 1; - } - _k1171 = getNextArrayKey( _a1171, _k1171 ); - } - teamscores = []; - teamscores[ team ] = createfontstring( font, titlesize ); - teamscores[ team ] setparent( teamicons[ team ] ); - teamscores[ team ] setpoint( "TOP", "BOTTOM", 0, spacing ); - teamscores[ team ].glowalpha = 1; - teamscores[ team ] setvalue( getteamscore( team ) ); - teamscores[ team ].hidewheninmenu = 0; - teamscores[ team ].archived = 0; - teamscores[ team ] setpulsefx( 100, duration, 1000 ); - _a1197 = level.teams; - _k1197 = getFirstArrayKey( _a1197 ); - while ( isDefined( _k1197 ) ) - { - enemyteam = _a1197[ _k1197 ]; - if ( team == enemyteam ) - { - } - else - { - teamscores[ enemyteam ] = createfontstring( font, titlesize ); - teamscores[ enemyteam ] setparent( teamicons[ enemyteam ] ); - teamscores[ enemyteam ] setpoint( "TOP", "BOTTOM", 0, spacing ); - teamscores[ enemyteam ].glowalpha = 1; - teamscores[ enemyteam ] setvalue( getteamscore( enemyteam ) ); - teamscores[ enemyteam ].hidewheninmenu = 0; - teamscores[ enemyteam ].archived = 0; - teamscores[ enemyteam ] setpulsefx( 100, duration, 1000 ); - } - _k1197 = getNextArrayKey( _a1197, _k1197 ); - } - matchbonus = undefined; - sidebetwinnings = undefined; - if ( !isroundend && !halftime && isDefined( self.wagerwinnings ) ) - { - matchbonus = createfontstring( font, 2 ); - matchbonus setparent( outcometext ); - matchbonus setpoint( "TOP", "BOTTOM", 0, iconsize + ( spacing * 3 ) + teamscores[ team ].height ); - matchbonus.glowalpha = 1; - matchbonus.hidewheninmenu = 0; - matchbonus.archived = 0; - matchbonus.label = game[ "strings" ][ "wager_winnings" ]; - matchbonus setvalue( self.wagerwinnings ); - if ( isDefined( game[ "side_bets" ] ) && game[ "side_bets" ] ) - { - sidebetwinnings = createfontstring( font, 2 ); - sidebetwinnings setparent( matchbonus ); - sidebetwinnings setpoint( "TOP", "BOTTOM", 0, spacing ); - sidebetwinnings.glowalpha = 1; - sidebetwinnings.hidewheninmenu = 0; - sidebetwinnings.archived = 0; - sidebetwinnings.label = game[ "strings" ][ "wager_sidebet_winnings" ]; - sidebetwinnings setvalue( self.pers[ "wager_sideBetWinnings" ] ); - } - } - self thread resetoutcomenotify( teamicons, teamscores, outcometitle, outcometext, matchbonus, sidebetwinnings ); -} - -destroyhudelem( hudelem ) -{ - if ( isDefined( hudelem ) ) - { - hudelem destroyelem(); - } -} - -resetoutcomenotify( hudelemlist1, hudelemlist2, hudelem3, hudelem4, hudelem5, hudelem6, hudelem7, hudelem8, hudelem9, hudelem10 ) -{ - self endon( "disconnect" ); - self waittill( "reset_outcome" ); - destroyhudelem( hudelem3 ); - destroyhudelem( hudelem4 ); - destroyhudelem( hudelem5 ); - destroyhudelem( hudelem6 ); - destroyhudelem( hudelem7 ); - destroyhudelem( hudelem8 ); - destroyhudelem( hudelem9 ); - destroyhudelem( hudelem10 ); - while ( isDefined( hudelemlist1 ) ) - { - _a1263 = hudelemlist1; - _k1263 = getFirstArrayKey( _a1263 ); - while ( isDefined( _k1263 ) ) - { - elem = _a1263[ _k1263 ]; - destroyhudelem( elem ); - _k1263 = getNextArrayKey( _a1263, _k1263 ); - } - } - while ( isDefined( hudelemlist2 ) ) - { - _a1271 = hudelemlist2; - _k1271 = getFirstArrayKey( _a1271 ); - while ( isDefined( _k1271 ) ) - { - elem = _a1271[ _k1271 ]; - destroyhudelem( elem ); - _k1271 = getNextArrayKey( _a1271, _k1271 ); - } - } -} - -resetwageroutcomenotify( playernamehudelems, playercphudelems, outcometitle, outcometext ) -{ - self endon( "disconnect" ); - self waittill( "reset_outcome" ); - i = playernamehudelems.size - 1; - while ( i >= 0 ) - { - if ( isDefined( playernamehudelems[ i ] ) ) - { - playernamehudelems[ i ] destroy(); - } - i--; - - } - i = playercphudelems.size - 1; - while ( i >= 0 ) - { - if ( isDefined( playercphudelems[ i ] ) ) - { - playercphudelems[ i ] destroy(); - } - i--; - - } - if ( isDefined( outcometext ) ) - { - outcometext destroy(); - } - if ( isDefined( outcometitle ) ) - { - outcometitle destroy(); - } -} - -updateoutcome( firsttitle, secondtitle, thirdtitle ) -{ - self endon( "disconnect" ); - self endon( "reset_outcome" ); - while ( 1 ) - { - self waittill( "update_outcome" ); - players = level.placement[ "all" ]; - if ( isDefined( firsttitle ) && isDefined( players[ 0 ] ) ) - { - firsttitle setplayernamestring( players[ 0 ] ); - } - else - { - if ( isDefined( firsttitle ) ) - { - firsttitle.alpha = 0; - } - } - if ( isDefined( secondtitle ) && isDefined( players[ 1 ] ) ) - { - secondtitle setplayernamestring( players[ 1 ] ); - } - else - { - if ( isDefined( secondtitle ) ) - { - secondtitle.alpha = 0; - } - } - if ( isDefined( thirdtitle ) && isDefined( players[ 2 ] ) ) - { - thirdtitle setplayernamestring( players[ 2 ] ); - continue; - } - else - { - if ( isDefined( thirdtitle ) ) - { - thirdtitle.alpha = 0; - } - } - } -} - -updatewageroutcome( playernamehudelems, playercphudelems ) -{ - self endon( "disconnect" ); - self endon( "reset_outcome" ); - while ( 1 ) - { - self waittill( "update_outcome" ); - players = level.placement[ "all" ]; - i = 0; - while ( i < playernamehudelems.size ) - { - if ( isDefined( playernamehudelems[ i ] ) && isDefined( players[ playernamehudelems[ i ].playernum ] ) ) - { - playernamehudelems[ i ] setplayernamestring( players[ playernamehudelems[ i ].playernum ] ); - i++; - continue; - } - else - { - if ( isDefined( playernamehudelems[ i ] ) ) - { - playernamehudelems[ i ].alpha = 0; - } - if ( isDefined( playercphudelems[ i ] ) ) - { - playercphudelems[ i ].alpha = 0; - } - } - i++; - } - } -} - -setshoutcasterwaitingmessage() -{ - if ( !isDefined( self.waitingforplayerstext ) ) - { - self.waitingforplayerstext = createfontstring( "objective", 2,5 ); - self.waitingforplayerstext setpoint( "CENTER", "CENTER", 0, -80 ); - self.waitingforplayerstext.sort = 1001; - self.waitingforplayerstext settext( &"MP_WAITING_FOR_PLAYERS_SHOUTCASTER" ); - self.waitingforplayerstext.foreground = 0; - self.waitingforplayerstext.hidewheninmenu = 1; - } -} - -clearshoutcasterwaitingmessage() -{ - if ( isDefined( self.waitingforplayerstext ) ) - { - destroyhudelem( self.waitingforplayerstext ); - self.waitingforplayerstext = undefined; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_hud_util.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_hud_util.gsc deleted file mode 100644 index 16b74f2..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_hud_util.gsc +++ /dev/null @@ -1,1152 +0,0 @@ -#include maps/mp/_utility; - -setparent( element ) -{ - if ( isDefined( self.parent ) && self.parent == element ) - { - return; - } - if ( isDefined( self.parent ) ) - { - self.parent removechild( self ); - } - self.parent = element; - self.parent addchild( self ); - if ( isDefined( self.point ) ) - { - self setpoint( self.point, self.relativepoint, self.xoffset, self.yoffset ); - } - else - { - self setpoint( "TOP" ); - } -} - -getparent() -{ - return self.parent; -} - -addchild( element ) -{ - element.index = self.children.size; - self.children[ self.children.size ] = element; -} - -removechild( element ) -{ - element.parent = undefined; - if ( self.children[ self.children.size - 1 ] != element ) - { - self.children[ element.index ] = self.children[ self.children.size - 1 ]; - self.children[ element.index ].index = element.index; - } - element.index = undefined; -} - -setpoint( point, relativepoint, xoffset, yoffset, movetime ) -{ - if ( !isDefined( movetime ) ) - { - movetime = 0; - } - element = self getparent(); - if ( movetime ) - { - self moveovertime( movetime ); - } - if ( !isDefined( xoffset ) ) - { - xoffset = 0; - } - self.xoffset = xoffset; - if ( !isDefined( yoffset ) ) - { - yoffset = 0; - } - self.yoffset = yoffset; - self.point = point; - self.alignx = "center"; - self.aligny = "middle"; - switch( point ) - { - case "CENTER": - break; - case "TOP": - self.aligny = "top"; - break; - case "BOTTOM": - self.aligny = "bottom"; - break; - case "LEFT": - self.alignx = "left"; - break; - case "RIGHT": - self.alignx = "right"; - break; - case "TOPRIGHT": - case "TOP_RIGHT": - self.aligny = "top"; - self.alignx = "right"; - break; - case "TOPLEFT": - case "TOP_LEFT": - self.aligny = "top"; - self.alignx = "left"; - break; - case "TOPCENTER": - self.aligny = "top"; - self.alignx = "center"; - break; - case "BOTTOM RIGHT": - case "BOTTOM_RIGHT": - self.aligny = "bottom"; - self.alignx = "right"; - break; - case "BOTTOM LEFT": - case "BOTTOM_LEFT": - self.aligny = "bottom"; - self.alignx = "left"; - break; - default: -/# - println( "^3Warning: unknown point passed to setPoint(): " + point ); -#/ - break; - } - if ( !isDefined( relativepoint ) ) - { - relativepoint = point; - } - self.relativepoint = relativepoint; - relativex = "center"; - relativey = "middle"; - switch( relativepoint ) - { - case "CENTER": - break; - case "TOP": - relativey = "top"; - break; - case "BOTTOM": - relativey = "bottom"; - break; - case "LEFT": - relativex = "left"; - break; - case "RIGHT": - relativex = "right"; - break; - case "TOPRIGHT": - case "TOP_RIGHT": - relativey = "top"; - relativex = "right"; - break; - case "TOPLEFT": - case "TOP_LEFT": - relativey = "top"; - relativex = "left"; - break; - case "TOPCENTER": - relativey = "top"; - relativex = "center"; - break; - case "BOTTOM RIGHT": - case "BOTTOM_RIGHT": - relativey = "bottom"; - relativex = "right"; - break; - case "BOTTOM LEFT": - case "BOTTOM_LEFT": - relativey = "bottom"; - relativex = "left"; - break; - default: -/# - println( "^3Warning: unknown relativePoint passed to setPoint(): " + relativepoint ); -#/ - break; - } - if ( element == level.uiparent ) - { - self.horzalign = relativex; - self.vertalign = relativey; - } - else - { - self.horzalign = element.horzalign; - self.vertalign = element.vertalign; - } - if ( relativex == element.alignx ) - { - offsetx = 0; - xfactor = 0; - } - else if ( relativex == "center" || element.alignx == "center" ) - { - offsetx = int( element.width / 2 ); - if ( relativex == "left" || element.alignx == "right" ) - { - xfactor = -1; - } - else - { - xfactor = 1; - } - } - else - { - offsetx = element.width; - if ( relativex == "left" ) - { - xfactor = -1; - } - else - { - xfactor = 1; - } - } - self.x = element.x + ( offsetx * xfactor ); - if ( relativey == element.aligny ) - { - offsety = 0; - yfactor = 0; - } - else if ( relativey == "middle" || element.aligny == "middle" ) - { - offsety = int( element.height / 2 ); - if ( relativey == "top" || element.aligny == "bottom" ) - { - yfactor = -1; - } - else - { - yfactor = 1; - } - } - else - { - offsety = element.height; - if ( relativey == "top" ) - { - yfactor = -1; - } - else - { - yfactor = 1; - } - } - self.y = element.y + ( offsety * yfactor ); - self.x += self.xoffset; - self.y += self.yoffset; - switch( self.elemtype ) - { - case "bar": - setpointbar( point, relativepoint, xoffset, yoffset ); - self.barframe setparent( self getparent() ); - self.barframe setpoint( point, relativepoint, xoffset, yoffset ); - break; - } - self updatechildren(); -} - -setpointbar( point, relativepoint, xoffset, yoffset ) -{ - self.bar.horzalign = self.horzalign; - self.bar.vertalign = self.vertalign; - self.bar.alignx = "left"; - self.bar.aligny = self.aligny; - self.bar.y = self.y; - if ( self.alignx == "left" ) - { - self.bar.x = self.x; - } - else if ( self.alignx == "right" ) - { - self.bar.x = self.x - self.width; - } - else - { - self.bar.x = self.x - int( self.width / 2 ); - } - if ( self.aligny == "top" ) - { - self.bar.y = self.y; - } - else - { - if ( self.aligny == "bottom" ) - { - self.bar.y = self.y; - } - } - self updatebar( self.bar.frac ); -} - -updatebar( barfrac, rateofchange ) -{ - if ( self.elemtype == "bar" ) - { - updatebarscale( barfrac, rateofchange ); - } -} - -updatebarscale( barfrac, rateofchange ) -{ - barwidth = int( ( self.width * barfrac ) + 0,5 ); - if ( !barwidth ) - { - barwidth = 1; - } - self.bar.frac = barfrac; - self.bar setshader( self.bar.shader, barwidth, self.height ); -/# - assert( barwidth <= self.width, "barWidth <= self.width: " + barwidth + " <= " + self.width + " - barFrac was " + barfrac ); -#/ - if ( isDefined( rateofchange ) && barwidth < self.width ) - { - if ( rateofchange > 0 ) - { -/# - assert( ( ( 1 - barfrac ) / rateofchange ) > 0, "barFrac: " + barfrac + "rateOfChange: " + rateofchange ); -#/ - self.bar scaleovertime( ( 1 - barfrac ) / rateofchange, self.width, self.height ); - } - else - { - if ( rateofchange < 0 ) - { -/# - assert( ( barfrac / ( -1 * rateofchange ) ) > 0, "barFrac: " + barfrac + "rateOfChange: " + rateofchange ); -#/ - self.bar scaleovertime( barfrac / ( -1 * rateofchange ), 1, self.height ); - } - } - } - self.bar.rateofchange = rateofchange; - self.bar.lastupdatetime = getTime(); -} - -createfontstring( font, fontscale ) -{ - fontelem = newclienthudelem( self ); - fontelem.elemtype = "font"; - fontelem.font = font; - fontelem.fontscale = fontscale; - fontelem.x = 0; - fontelem.y = 0; - fontelem.width = 0; - fontelem.height = int( level.fontheight * fontscale ); - fontelem.xoffset = 0; - fontelem.yoffset = 0; - fontelem.children = []; - fontelem setparent( level.uiparent ); - fontelem.hidden = 0; - return fontelem; -} - -createserverfontstring( font, fontscale, team ) -{ - if ( isDefined( team ) ) - { - fontelem = newteamhudelem( team ); - } - else - { - fontelem = newhudelem(); - } - fontelem.elemtype = "font"; - fontelem.font = font; - fontelem.fontscale = fontscale; - fontelem.x = 0; - fontelem.y = 0; - fontelem.width = 0; - fontelem.height = int( level.fontheight * fontscale ); - fontelem.xoffset = 0; - fontelem.yoffset = 0; - fontelem.children = []; - fontelem setparent( level.uiparent ); - fontelem.hidden = 0; - return fontelem; -} - -createservertimer( font, fontscale, team ) -{ - if ( isDefined( team ) ) - { - timerelem = newteamhudelem( team ); - } - else - { - timerelem = newhudelem(); - } - timerelem.elemtype = "timer"; - timerelem.font = font; - timerelem.fontscale = fontscale; - timerelem.x = 0; - timerelem.y = 0; - timerelem.width = 0; - timerelem.height = int( level.fontheight * fontscale ); - timerelem.xoffset = 0; - timerelem.yoffset = 0; - timerelem.children = []; - timerelem setparent( level.uiparent ); - timerelem.hidden = 0; - return timerelem; -} - -createclienttimer( font, fontscale ) -{ - timerelem = newclienthudelem( self ); - timerelem.elemtype = "timer"; - timerelem.font = font; - timerelem.fontscale = fontscale; - timerelem.x = 0; - timerelem.y = 0; - timerelem.width = 0; - timerelem.height = int( level.fontheight * fontscale ); - timerelem.xoffset = 0; - timerelem.yoffset = 0; - timerelem.children = []; - timerelem setparent( level.uiparent ); - timerelem.hidden = 0; - return timerelem; -} - -createicon( shader, width, height ) -{ - iconelem = newclienthudelem( self ); - iconelem.elemtype = "icon"; - iconelem.x = 0; - iconelem.y = 0; - iconelem.width = width; - iconelem.height = height; - iconelem.xoffset = 0; - iconelem.yoffset = 0; - iconelem.children = []; - iconelem setparent( level.uiparent ); - iconelem.hidden = 0; - if ( isDefined( shader ) ) - { - iconelem setshader( shader, width, height ); - } - return iconelem; -} - -createservericon( shader, width, height, team ) -{ - if ( isDefined( team ) ) - { - iconelem = newteamhudelem( team ); - } - else - { - iconelem = newhudelem(); - } - iconelem.elemtype = "icon"; - iconelem.x = 0; - iconelem.y = 0; - iconelem.width = width; - iconelem.height = height; - iconelem.xoffset = 0; - iconelem.yoffset = 0; - iconelem.children = []; - iconelem setparent( level.uiparent ); - iconelem.hidden = 0; - if ( isDefined( shader ) ) - { - iconelem setshader( shader, width, height ); - } - return iconelem; -} - -createserverbar( color, width, height, flashfrac, team, selected ) -{ - if ( isDefined( team ) ) - { - barelem = newteamhudelem( team ); - } - else - { - barelem = newhudelem(); - } - barelem.x = 0; - barelem.y = 0; - barelem.frac = 0; - barelem.color = color; - barelem.sort = -2; - barelem.shader = "progress_bar_fill"; - barelem setshader( "progress_bar_fill", width, height ); - barelem.hidden = 0; - if ( isDefined( flashfrac ) ) - { - barelem.flashfrac = flashfrac; - } - if ( isDefined( team ) ) - { - barelemframe = newteamhudelem( team ); - } - else - { - barelemframe = newhudelem(); - } - barelemframe.elemtype = "icon"; - barelemframe.x = 0; - barelemframe.y = 0; - barelemframe.width = width; - barelemframe.height = height; - barelemframe.xoffset = 0; - barelemframe.yoffset = 0; - barelemframe.bar = barelem; - barelemframe.barframe = barelemframe; - barelemframe.children = []; - barelemframe.sort = -1; - barelemframe.color = ( 1, 0, 0 ); - barelemframe setparent( level.uiparent ); - if ( isDefined( selected ) ) - { - barelemframe setshader( "progress_bar_fg_sel", width, height ); - } - else - { - barelemframe setshader( "progress_bar_fg", width, height ); - } - barelemframe.hidden = 0; - if ( isDefined( team ) ) - { - barelembg = newteamhudelem( team ); - } - else - { - barelembg = newhudelem(); - } - barelembg.elemtype = "bar"; - barelembg.x = 0; - barelembg.y = 0; - barelembg.width = width; - barelembg.height = height; - barelembg.xoffset = 0; - barelembg.yoffset = 0; - barelembg.bar = barelem; - barelembg.barframe = barelemframe; - barelembg.children = []; - barelembg.sort = -3; - barelembg.color = ( 1, 0, 0 ); - barelembg.alpha = 0,5; - barelembg setparent( level.uiparent ); - barelembg setshader( "progress_bar_bg", width, height ); - barelembg.hidden = 0; - return barelembg; -} - -createbar( color, width, height, flashfrac ) -{ - barelem = newclienthudelem( self ); - barelem.x = 0; - barelem.y = 0; - barelem.frac = 0; - barelem.color = color; - barelem.sort = -2; - barelem.shader = "progress_bar_fill"; - barelem setshader( "progress_bar_fill", width, height ); - barelem.hidden = 0; - if ( isDefined( flashfrac ) ) - { - barelem.flashfrac = flashfrac; - } - barelemframe = newclienthudelem( self ); - barelemframe.elemtype = "icon"; - barelemframe.x = 0; - barelemframe.y = 0; - barelemframe.width = width; - barelemframe.height = height; - barelemframe.xoffset = 0; - barelemframe.yoffset = 0; - barelemframe.bar = barelem; - barelemframe.barframe = barelemframe; - barelemframe.children = []; - barelemframe.sort = -1; - barelemframe.color = ( 1, 0, 0 ); - barelemframe setparent( level.uiparent ); - barelemframe.hidden = 0; - barelembg = newclienthudelem( self ); - barelembg.elemtype = "bar"; - if ( !self issplitscreen() ) - { - barelembg.x = -2; - barelembg.y = -2; - } - barelembg.width = width; - barelembg.height = height; - barelembg.xoffset = 0; - barelembg.yoffset = 0; - barelembg.bar = barelem; - barelembg.barframe = barelemframe; - barelembg.children = []; - barelembg.sort = -3; - barelembg.color = ( 1, 0, 0 ); - barelembg.alpha = 0,5; - barelembg setparent( level.uiparent ); - if ( !self issplitscreen() ) - { - barelembg setshader( "progress_bar_bg", width + 4, height + 4 ); - } - else - { - barelembg setshader( "progress_bar_bg", width + 0, height + 0 ); - } - barelembg.hidden = 0; - return barelembg; -} - -getcurrentfraction() -{ - frac = self.bar.frac; - if ( isDefined( self.bar.rateofchange ) ) - { - frac += ( getTime() - self.bar.lastupdatetime ) * self.bar.rateofchange; - if ( frac > 1 ) - { - frac = 1; - } - if ( frac < 0 ) - { - frac = 0; - } - } - return frac; -} - -createprimaryprogressbar() -{ - bar = undefined; - if ( self issplitscreen() ) - { - bar = self createbar( ( 1, 0, 0 ), level.primaryprogressbarwidth, level.primaryprogressbarheight_ss ); - bar setpoint( "TOP", undefined, level.primaryprogressbarx_ss, level.primaryprogressbary_ss ); - } - else - { - bar = self createbar( ( 1, 0, 0 ), level.primaryprogressbarwidth, level.primaryprogressbarheight ); - bar setpoint( "CENTER", undefined, level.primaryprogressbarx, level.primaryprogressbary ); - } - return bar; -} - -createprimaryprogressbartext() -{ - text = createfontstring( "objective", level.primaryprogressbarfontsize ); - if ( self issplitscreen() ) - { - text setpoint( "TOP", undefined, level.primaryprogressbartextx_ss, level.primaryprogressbartexty_ss ); - } - else - { - text setpoint( "CENTER", undefined, level.primaryprogressbartextx, level.primaryprogressbartexty ); - } - text.sort = -1; - return text; -} - -createsecondaryprogressbar() -{ - secondaryprogressbarheight = getdvarintdefault( "scr_secondaryProgressBarHeight", level.secondaryprogressbarheight ); - secondaryprogressbarx = getdvarintdefault( "scr_secondaryProgressBarX", level.secondaryprogressbarx ); - secondaryprogressbary = getdvarintdefault( "scr_secondaryProgressBarY", level.secondaryprogressbary ); - secondaryprogressbarheight_ss = getdvarintdefault( "scr_secondaryProgressBarHeight", level.secondaryprogressbarheight_ss ); - secondaryprogressbarx_ss = getdvarintdefault( "scr_secondaryProgressBarX", level.secondaryprogressbarx_ss ); - secondaryprogressbary_ss = getdvarintdefault( "scr_secondaryProgressBarY", level.secondaryprogressbary_ss ); - bar = undefined; - if ( self issplitscreen() ) - { - bar = self createbar( ( 1, 0, 0 ), level.secondaryprogressbarwidth, secondaryprogressbarheight_ss ); - bar setpoint( "TOP", undefined, secondaryprogressbarx_ss, secondaryprogressbary_ss ); - } - else - { - bar = self createbar( ( 1, 0, 0 ), level.secondaryprogressbarwidth, secondaryprogressbarheight ); - bar setpoint( "CENTER", undefined, secondaryprogressbarx, secondaryprogressbary ); - } - return bar; -} - -createsecondaryprogressbartext() -{ - secondaryprogressbartextx = getdvarintdefault( "scr_btx", level.secondaryprogressbartextx ); - secondaryprogressbartexty = getdvarintdefault( "scr_bty", level.secondaryprogressbartexty ); - secondaryprogressbartextx_ss = getdvarintdefault( "scr_btx", level.secondaryprogressbartextx_ss ); - secondaryprogressbartexty_ss = getdvarintdefault( "scr_bty", level.secondaryprogressbartexty_ss ); - text = createfontstring( "objective", level.primaryprogressbarfontsize ); - if ( self issplitscreen() ) - { - text setpoint( "TOP", undefined, secondaryprogressbartextx_ss, secondaryprogressbartexty_ss ); - } - else - { - text setpoint( "CENTER", undefined, secondaryprogressbartextx, secondaryprogressbartexty ); - } - text.sort = -1; - return text; -} - -createteamprogressbar( team ) -{ - bar = createserverbar( ( 1, 0, 0 ), level.teamprogressbarwidth, level.teamprogressbarheight, undefined, team ); - bar setpoint( "TOP", undefined, 0, level.teamprogressbary ); - return bar; -} - -createteamprogressbartext( team ) -{ - text = createserverfontstring( "default", level.teamprogressbarfontsize, team ); - text setpoint( "TOP", undefined, 0, level.teamprogressbartexty ); - return text; -} - -setflashfrac( flashfrac ) -{ - self.bar.flashfrac = flashfrac; -} - -hideelem() -{ - if ( self.hidden ) - { - return; - } - self.hidden = 1; - if ( self.alpha != 0 ) - { - self.alpha = 0; - } - if ( self.elemtype == "bar" || self.elemtype == "bar_shader" ) - { - self.bar.hidden = 1; - if ( self.bar.alpha != 0 ) - { - self.bar.alpha = 0; - } - self.barframe.hidden = 1; - if ( self.barframe.alpha != 0 ) - { - self.barframe.alpha = 0; - } - } -} - -showelem() -{ - if ( !self.hidden ) - { - return; - } - self.hidden = 0; - if ( self.elemtype == "bar" || self.elemtype == "bar_shader" ) - { - if ( self.alpha != 0,5 ) - { - self.alpha = 0,5; - } - self.bar.hidden = 0; - if ( self.bar.alpha != 1 ) - { - self.bar.alpha = 1; - } - self.barframe.hidden = 0; - if ( self.barframe.alpha != 1 ) - { - self.barframe.alpha = 1; - } - } - else - { - if ( self.alpha != 1 ) - { - self.alpha = 1; - } - } -} - -flashthread() -{ - self endon( "death" ); - if ( !self.hidden ) - { - self.alpha = 1; - } - while ( 1 ) - { - if ( self.frac >= self.flashfrac ) - { - if ( !self.hidden ) - { - self fadeovertime( 0,3 ); - self.alpha = 0,2; - wait 0,35; - self fadeovertime( 0,3 ); - self.alpha = 1; - } - wait 0,7; - continue; - } - else - { - if ( !self.hidden && self.alpha != 1 ) - { - self.alpha = 1; - } - wait 0,05; - } - } -} - -destroyelem() -{ - tempchildren = []; - index = 0; - while ( index < self.children.size ) - { - if ( isDefined( self.children[ index ] ) ) - { - tempchildren[ tempchildren.size ] = self.children[ index ]; - } - index++; - } - index = 0; - while ( index < tempchildren.size ) - { - tempchildren[ index ] setparent( self getparent() ); - index++; - } - if ( self.elemtype == "bar" || self.elemtype == "bar_shader" ) - { - self.bar destroy(); - self.barframe destroy(); - } - self destroy(); -} - -seticonshader( shader ) -{ - self setshader( shader, self.width, self.height ); -} - -setwidth( width ) -{ - self.width = width; -} - -setheight( height ) -{ - self.height = height; -} - -setsize( width, height ) -{ - self.width = width; - self.height = height; -} - -updatechildren() -{ - index = 0; - while ( index < self.children.size ) - { - child = self.children[ index ]; - child setpoint( child.point, child.relativepoint, child.xoffset, child.yoffset ); - index++; - } -} - -createloadouticon( verindex, horindex, xpos, ypos ) -{ - iconsize = 32; - if ( level.splitscreen ) - { - ypos -= 80 + ( iconsize * ( 3 - verindex ) ); - } - else - { - ypos -= 90 + ( iconsize * ( 3 - verindex ) ); - } - if ( level.splitscreen ) - { - xpos -= 5 + ( iconsize * horindex ); - } - else - { - xpos -= 10 + ( iconsize * horindex ); - } - icon = createicon( "white", iconsize, iconsize ); - icon setpoint( "BOTTOM RIGHT", "BOTTOM RIGHT", xpos, ypos ); - icon.horzalign = "user_right"; - icon.vertalign = "user_bottom"; - icon.archived = 0; - icon.foreground = 0; - return icon; -} - -setloadouticoncoords( verindex, horindex, xpos, ypos ) -{ - iconsize = 32; - if ( level.splitscreen ) - { - ypos -= 80 + ( iconsize * ( 3 - verindex ) ); - } - else - { - ypos -= 90 + ( iconsize * ( 3 - verindex ) ); - } - if ( level.splitscreen ) - { - xpos -= 5 + ( iconsize * horindex ); - } - else - { - xpos -= 10 + ( iconsize * horindex ); - } - self setpoint( "BOTTOM RIGHT", "BOTTOM RIGHT", xpos, ypos ); - self.horzalign = "user_right"; - self.vertalign = "user_bottom"; - self.archived = 0; - self.foreground = 0; - self.alpha = 1; -} - -setloadouttextcoords( xcoord ) -{ - self setpoint( "RIGHT", "LEFT", xcoord, 0 ); -} - -createloadouttext( icon, xcoord ) -{ - text = createfontstring( "small", 1 ); - text setparent( icon ); - text setpoint( "RIGHT", "LEFT", xcoord, 0 ); - text.archived = 0; - text.alignx = "right"; - text.aligny = "middle"; - text.foreground = 0; - return text; -} - -showloadoutattribute( iconelem, icon, alpha, textelem, text ) -{ - iconsize = 32; - iconelem.alpha = alpha; - if ( alpha ) - { - iconelem setshader( icon, iconsize, iconsize ); - } - if ( isDefined( textelem ) ) - { - textelem.alpha = alpha; - if ( alpha ) - { - textelem settext( text ); - } - } -} - -hideloadoutattribute( iconelem, fadetime, textelem, hidetextonly ) -{ - if ( isDefined( fadetime ) ) - { - if ( !isDefined( hidetextonly ) || !hidetextonly ) - { - iconelem fadeovertime( fadetime ); - } - if ( isDefined( textelem ) ) - { - textelem fadeovertime( fadetime ); - } - } - if ( !isDefined( hidetextonly ) || !hidetextonly ) - { - iconelem.alpha = 0; - } - if ( isDefined( textelem ) ) - { - textelem.alpha = 0; - } -} - -showperks() -{ - ypos = 40; - if ( !isDefined( self.perkhudelem ) ) - { - self.perkhudelem = createloadouticon( 0, 0, 200, ypos ); - } - else - { - self.perkhudelem setloadouticoncoords( 0, 0, 200, ypos ); - } - self.perkhudelem setperks( self ); - self.perkhudelem.x = -10; - self.perkhudelem.alpha = 0; - self.perkhudelem fadeovertime( 0,4 ); - self.perkhudelem.alpha = 1; - self.perkhudelem.hidewheninmenu = 1; -} - -showperk( index, perk, ypos ) -{ -/# - assert( game[ "state" ] != "postgame" ); -#/ - if ( !isDefined( self.perkicon ) ) - { - self.perkicon = []; - self.perkname = []; - } - if ( !isDefined( self.perkicon[ index ] ) ) - { -/# - assert( !isDefined( self.perkname[ index ] ) ); -#/ - self.perkicon[ index ] = createloadouticon( index, 0, 200, ypos ); - self.perkname[ index ] = createloadouttext( self.perkicon[ index ], 160 ); - } - else - { - self.perkicon[ index ] setloadouticoncoords( index, 0, 200, ypos ); - self.perkname[ index ] setloadouttextcoords( 160 ); - } - if ( perk != "perk_null" || perk == "weapon_null" && perk == "specialty_null" ) - { - alpha = 0; - } - else - { -/# - assert( isDefined( level.perknames[ perk ] ), perk ); -#/ - alpha = 1; - } - showloadoutattribute( self.perkicon[ index ], perk, alpha, self.perkname[ index ], level.perknames[ perk ] ); - self.perkicon[ index ] moveovertime( 0,3 ); - self.perkicon[ index ].x = -5; - self.perkicon[ index ].hidewheninmenu = 1; - self.perkname[ index ] moveovertime( 0,3 ); - self.perkname[ index ].x = -40; - self.perkname[ index ].hidewheninmenu = 1; -} - -hideperks( fadetime ) -{ - if ( level.perksenabled == 1 ) - { - if ( game[ "state" ] == "postgame" ) - { -/# - assert( !isDefined( self.perkhudelem ) ); -#/ - return; - } - } -/# - assert( isDefined( self.perkhudelem ) ); -#/ - if ( isDefined( self.perkhudelem ) ) - { - hideloadoutattribute( self.perkhudelem, fadetime ); - } -} - -hideperk( index, fadetime, hidetextonly ) -{ - if ( !isDefined( fadetime ) ) - { - fadetime = 0,05; - } - if ( level.perksenabled == 1 ) - { - if ( game[ "state" ] == "postgame" ) - { - if ( isDefined( self.perkicon ) ) - { -/# - assert( !isDefined( self.perkicon[ index ] ) ); -#/ -/# - assert( !isDefined( self.perkname[ index ] ) ); -#/ - } - return; - } -/# - assert( isDefined( self.perkicon[ index ] ) ); -#/ -/# - assert( isDefined( self.perkname[ index ] ) ); -#/ - if ( isDefined( self.perkicon ) && isDefined( self.perkicon[ index ] ) && isDefined( self.perkname ) && isDefined( self.perkname[ index ] ) ) - { - hideloadoutattribute( self.perkicon[ index ], fadetime, self.perkname[ index ], hidetextonly ); - } - } -} - -hideallperks( fadetime, hidetextonly ) -{ - if ( level.perksenabled == 1 ) - { - hideperks( fadetime ); - } -} - -showkillstreak( index, killstreak, xpos, ypos ) -{ -/# - assert( game[ "state" ] != "postgame" ); -#/ - if ( !isDefined( self.killstreakicon ) ) - { - self.killstreakicon = []; - } - if ( !isDefined( self.killstreakicon[ index ] ) ) - { - self.killstreakicon[ index ] = createloadouticon( 3, ( self.killstreak.size - 1 ) - index, xpos, ypos ); - } - if ( killstreak == "killstreak_null" || killstreak == "weapon_null" ) - { - alpha = 0; - } - else - { -/# - assert( isDefined( level.killstreakicons[ killstreak ] ), killstreak ); -#/ - alpha = 1; - } - showloadoutattribute( self.killstreakicon[ index ], level.killstreakicons[ killstreak ], alpha ); -} - -hidekillstreak( index, fadetime ) -{ - if ( iskillstreaksenabled() ) - { - if ( game[ "state" ] == "postgame" ) - { -/# - assert( !isDefined( self.killstreakicon[ index ] ) ); -#/ - return; - } -/# - assert( isDefined( self.killstreakicon[ index ] ) ); -#/ - hideloadoutattribute( self.killstreakicon[ index ], fadetime ); - } -} - -setgamemodeinfopoint() -{ - self.x = 5; - self.y = 120; - self.horzalign = "user_left"; - self.vertalign = "user_top"; - self.alignx = "left"; - self.aligny = "top"; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_menus.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_menus.gsc deleted file mode 100644 index 97f9513..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_menus.gsc +++ /dev/null @@ -1,175 +0,0 @@ -#include maps/mp/gametypes_zm/_rank; -#include maps/mp/gametypes_zm/_globallogic; -#include maps/mp/_utility; - -init() -{ - precachestring( &"open_ingame_menu" ); - game[ "menu_team" ] = "team_marinesopfor"; - game[ "menu_initteam_allies" ] = "initteam_marines"; - game[ "menu_initteam_axis" ] = "initteam_opfor"; - game[ "menu_class" ] = "class"; - game[ "menu_changeclass" ] = "changeclass"; - game[ "menu_changeclass_offline" ] = "changeclass"; - game[ "menu_wager_side_bet" ] = "sidebet"; - game[ "menu_wager_side_bet_player" ] = "sidebet_player"; - game[ "menu_changeclass_wager" ] = "changeclass_wager"; - game[ "menu_changeclass_custom" ] = "changeclass_custom"; - game[ "menu_changeclass_barebones" ] = "changeclass_barebones"; - _a18 = level.teams; - _k18 = getFirstArrayKey( _a18 ); - while ( isDefined( _k18 ) ) - { - team = _a18[ _k18 ]; - game[ "menu_changeclass_" + team ] = "changeclass"; - _k18 = getNextArrayKey( _a18, _k18 ); - } - game[ "menu_controls" ] = "ingame_controls"; - game[ "menu_options" ] = "ingame_options"; - game[ "menu_leavegame" ] = "popup_leavegame"; - precachemenu( game[ "menu_controls" ] ); - precachemenu( game[ "menu_options" ] ); - precachemenu( game[ "menu_leavegame" ] ); - precachemenu( "scoreboard" ); - precachemenu( "spectate" ); - precachemenu( game[ "menu_team" ] ); - precachemenu( game[ "menu_changeclass_allies" ] ); - precachemenu( game[ "menu_initteam_allies" ] ); - precachemenu( game[ "menu_changeclass_axis" ] ); - precachemenu( game[ "menu_class" ] ); - precachemenu( game[ "menu_changeclass" ] ); - precachemenu( game[ "menu_initteam_axis" ] ); - precachemenu( game[ "menu_changeclass_offline" ] ); - precachemenu( game[ "menu_changeclass_wager" ] ); - precachemenu( game[ "menu_changeclass_custom" ] ); - precachemenu( game[ "menu_changeclass_barebones" ] ); - precachemenu( game[ "menu_wager_side_bet" ] ); - precachemenu( game[ "menu_wager_side_bet_player" ] ); - precachestring( &"MP_HOST_ENDED_GAME" ); - precachestring( &"MP_HOST_ENDGAME_RESPONSE" ); - level thread onplayerconnect(); -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread onmenuresponse(); - } -} - -onmenuresponse() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "menuresponse", menu, response ); - if ( response == "back" ) - { - self closemenu(); - self closeingamemenu(); - if ( level.console ) - { - if ( game[ "menu_changeclass" ] != menu && game[ "menu_changeclass_offline" ] != menu || menu == game[ "menu_team" ] && menu == game[ "menu_controls" ] ) - { - if ( isDefined( level.teams[ self.pers[ "team" ] ] ) ) - { - self openmenu( game[ "menu_class" ] ); - } - } - } - continue; - } - else if ( response == "changeteam" && level.allow_teamchange == "1" ) - { - self closemenu(); - self closeingamemenu(); - self openmenu( game[ "menu_team" ] ); - } - if ( response == "changeclass_marines_splitscreen" ) - { - self openmenu( "changeclass_marines_splitscreen" ); - } - if ( response == "changeclass_opfor_splitscreen" ) - { - self openmenu( "changeclass_opfor_splitscreen" ); - } - if ( response == "endgame" ) - { - if ( self issplitscreen() ) - { - level.skipvote = 1; - if ( !level.gameended ) - { - level thread maps/mp/gametypes_zm/_globallogic::forceend(); - } - } - continue; - } - else if ( response == "killserverpc" ) - { - level thread maps/mp/gametypes_zm/_globallogic::killserverpc(); - continue; - } - else if ( response == "endround" ) - { - if ( !level.gameended ) - { - level thread maps/mp/gametypes_zm/_globallogic::forceend(); - } - else - { - self closemenu(); - self closeingamemenu(); - self iprintln( &"MP_HOST_ENDGAME_RESPONSE" ); - } - continue; - } - else if ( menu == game[ "menu_team" ] && level.allow_teamchange == "1" ) - { - switch( response ) - { - case "autoassign": - self [[ level.autoassign ]]( 1 ); - break; - case "spectator": - self [[ level.spectator ]](); - break; - default: - self [[ level.teammenu ]]( response ); - break; - } - continue; - } - else - { - if ( game[ "menu_changeclass" ] != menu && game[ "menu_changeclass_offline" ] != menu && game[ "menu_changeclass_wager" ] != menu || menu == game[ "menu_changeclass_custom" ] && menu == game[ "menu_changeclass_barebones" ] ) - { - self closemenu(); - self closeingamemenu(); - if ( level.rankedmatch && issubstr( response, "custom" ) ) - { - if ( self isitemlocked( maps/mp/gametypes_zm/_rank::getitemindex( "feature_cac" ) ) ) - { - kick( self getentitynumber() ); - } - } - self.selectedclass = 1; - self [[ level.class ]]( response ); - break; - } - else - { - if ( menu == "spectate" ) - { - player = getplayerfromclientnum( int( response ) ); - if ( isDefined( player ) ) - { - self setcurrentspectatorclient( player ); - } - } - } - } - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_perplayer.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_perplayer.gsc deleted file mode 100644 index 1fd16a2..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_perplayer.gsc +++ /dev/null @@ -1,196 +0,0 @@ -#include maps/mp/_utility; - -init( id, playerbegincallback, playerendcallback ) -{ - precacheshader( "objpoint_default" ); - handler = spawnstruct(); - handler.id = id; - handler.playerbegincallback = playerbegincallback; - handler.playerendcallback = playerendcallback; - handler.enabled = 0; - handler.players = []; - thread onplayerconnect( handler ); - level.handlerglobalflagval = 0; - return handler; -} - -enable( handler ) -{ - if ( handler.enabled ) - { - return; - } - handler.enabled = 1; - level.handlerglobalflagval++; - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ].handlerflagval = level.handlerglobalflagval; - i++; - } - players = handler.players; - i = 0; - while ( i < players.size ) - { - if ( players[ i ].handlerflagval != level.handlerglobalflagval ) - { - i++; - continue; - } - else - { - if ( players[ i ].handlers[ handler.id ].ready ) - { - players[ i ] handleplayer( handler ); - } - } - i++; - } -} - -disable( handler ) -{ - if ( !handler.enabled ) - { - return; - } - handler.enabled = 0; - level.handlerglobalflagval++; - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ].handlerflagval = level.handlerglobalflagval; - i++; - } - players = handler.players; - i = 0; - while ( i < players.size ) - { - if ( players[ i ].handlerflagval != level.handlerglobalflagval ) - { - i++; - continue; - } - else - { - if ( players[ i ].handlers[ handler.id ].ready ) - { - players[ i ] unhandleplayer( handler, 0, 0 ); - } - } - i++; - } -} - -onplayerconnect( handler ) -{ - for ( ;; ) - { - level waittill( "connecting", player ); - if ( !isDefined( player.handlers ) ) - { - player.handlers = []; - } - player.handlers[ handler.id ] = spawnstruct(); - player.handlers[ handler.id ].ready = 0; - player.handlers[ handler.id ].handled = 0; - player.handlerflagval = -1; - handler.players[ handler.players.size ] = player; - player thread onplayerdisconnect( handler ); - player thread onplayerspawned( handler ); - player thread onjoinedteam( handler ); - player thread onjoinedspectators( handler ); - player thread onplayerkilled( handler ); - } -} - -onplayerdisconnect( handler ) -{ - self waittill( "disconnect" ); - newplayers = []; - i = 0; - while ( i < handler.players.size ) - { - if ( handler.players[ i ] != self ) - { - newplayers[ newplayers.size ] = handler.players[ i ]; - } - i++; - } - handler.players = newplayers; - self thread unhandleplayer( handler, 1, 1 ); -} - -onjoinedteam( handler ) -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "joined_team" ); - self thread unhandleplayer( handler, 1, 0 ); - } -} - -onjoinedspectators( handler ) -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "joined_spectators" ); - self thread unhandleplayer( handler, 1, 0 ); - } -} - -onplayerspawned( handler ) -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread handleplayer( handler ); - } -} - -onplayerkilled( handler ) -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "killed_player" ); - self thread unhandleplayer( handler, 1, 0 ); - } -} - -handleplayer( handler ) -{ - self.handlers[ handler.id ].ready = 1; - if ( !handler.enabled ) - { - return; - } - if ( self.handlers[ handler.id ].handled ) - { - return; - } - self.handlers[ handler.id ].handled = 1; - self thread [[ handler.playerbegincallback ]](); -} - -unhandleplayer( handler, unsetready, disconnected ) -{ - if ( !disconnected && unsetready ) - { - self.handlers[ handler.id ].ready = 0; - } - if ( !self.handlers[ handler.id ].handled ) - { - return; - } - if ( !disconnected ) - { - self.handlers[ handler.id ].handled = 0; - } - self thread [[ handler.playerendcallback ]]( disconnected ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_scoreboard.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_scoreboard.gsc deleted file mode 100644 index 9c57984..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_scoreboard.gsc +++ /dev/null @@ -1,25 +0,0 @@ - -init() -{ - setdvar( "g_ScoresColor_Spectator", ".25 .25 .25" ); - setdvar( "g_ScoresColor_Free", ".76 .78 .10" ); - setdvar( "g_teamColor_MyTeam", ".4 .7 .4" ); - setdvar( "g_teamColor_EnemyTeam", "1 .315 0.35" ); - setdvar( "g_teamColor_MyTeamAlt", ".35 1 1" ); - setdvar( "g_teamColor_EnemyTeamAlt", "1 .5 0" ); - setdvar( "g_teamColor_Squad", ".315 0.35 1" ); - if ( level.createfx_enabled ) - { - return; - } - if ( sessionmodeiszombiesgame() ) - { - setdvar( "g_TeamIcon_Axis", "faction_cia" ); - setdvar( "g_TeamIcon_Allies", "faction_cdc" ); - } - else - { - setdvar( "g_TeamIcon_Axis", game[ "icons" ][ "axis" ] ); - setdvar( "g_TeamIcon_Allies", game[ "icons" ][ "allies" ] ); - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_serversettings.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_serversettings.gsc deleted file mode 100644 index a747dcc..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_serversettings.gsc +++ /dev/null @@ -1,207 +0,0 @@ - -init() -{ - level.hostname = getDvar( "sv_hostname" ); - if ( level.hostname == "" ) - { - level.hostname = "CoDHost"; - } - setdvar( "sv_hostname", level.hostname ); - setdvar( "ui_hostname", level.hostname ); - makedvarserverinfo( "ui_hostname", "CoDHost" ); - level.motd = getDvar( "scr_motd" ); - if ( level.motd == "" ) - { - level.motd = ""; - } - setdvar( "scr_motd", level.motd ); - setdvar( "ui_motd", level.motd ); - makedvarserverinfo( "ui_motd", "" ); - level.allowvote = getDvar( "g_allowVote" ); - if ( level.allowvote == "" ) - { - level.allowvote = "1"; - } - setdvar( "g_allowvote", level.allowvote ); - setdvar( "ui_allowvote", level.allowvote ); - makedvarserverinfo( "ui_allowvote", "1" ); - level.allow_teamchange = "0"; - if ( sessionmodeisprivate() || !sessionmodeisonlinegame() ) - { - level.allow_teamchange = "1"; - } - setdvar( "ui_allow_teamchange", level.allow_teamchange ); - level.friendlyfire = getgametypesetting( "friendlyfiretype" ); - setdvar( "ui_friendlyfire", level.friendlyfire ); - makedvarserverinfo( "ui_friendlyfire", "0" ); - if ( getDvar( "scr_mapsize" ) == "" ) - { - setdvar( "scr_mapsize", "64" ); - } - else if ( getDvarFloat( "scr_mapsize" ) >= 64 ) - { - setdvar( "scr_mapsize", "64" ); - } - else if ( getDvarFloat( "scr_mapsize" ) >= 32 ) - { - setdvar( "scr_mapsize", "32" ); - } - else if ( getDvarFloat( "scr_mapsize" ) >= 16 ) - { - setdvar( "scr_mapsize", "16" ); - } - else - { - setdvar( "scr_mapsize", "8" ); - } - level.mapsize = getDvarFloat( "scr_mapsize" ); - constraingametype( getDvar( "g_gametype" ) ); - constrainmapsize( level.mapsize ); - for ( ;; ) - { - updateserversettings(); - wait 5; - } -} - -updateserversettings() -{ - sv_hostname = getDvar( "sv_hostname" ); - if ( level.hostname != sv_hostname ) - { - level.hostname = sv_hostname; - setdvar( "ui_hostname", level.hostname ); - } - scr_motd = getDvar( "scr_motd" ); - if ( level.motd != scr_motd ) - { - level.motd = scr_motd; - setdvar( "ui_motd", level.motd ); - } - g_allowvote = getDvar( "g_allowVote" ); - if ( level.allowvote != g_allowvote ) - { - level.allowvote = g_allowvote; - setdvar( "ui_allowvote", level.allowvote ); - } - scr_friendlyfire = getgametypesetting( "friendlyfiretype" ); - if ( level.friendlyfire != scr_friendlyfire ) - { - level.friendlyfire = scr_friendlyfire; - setdvar( "ui_friendlyfire", level.friendlyfire ); - } -} - -constraingametype( gametype ) -{ - entities = getentarray(); - i = 0; - while ( i < entities.size ) - { - entity = entities[ i ]; - if ( gametype == "dm" ) - { - if ( isDefined( entity.script_gametype_dm ) && entity.script_gametype_dm != "1" ) - { - entity delete(); - } - i++; - continue; - } - else if ( gametype == "tdm" ) - { - if ( isDefined( entity.script_gametype_tdm ) && entity.script_gametype_tdm != "1" ) - { - entity delete(); - } - i++; - continue; - } - else if ( gametype == "ctf" ) - { - if ( isDefined( entity.script_gametype_ctf ) && entity.script_gametype_ctf != "1" ) - { - entity delete(); - } - i++; - continue; - } - else if ( gametype == "hq" ) - { - if ( isDefined( entity.script_gametype_hq ) && entity.script_gametype_hq != "1" ) - { - entity delete(); - } - i++; - continue; - } - else if ( gametype == "sd" ) - { - if ( isDefined( entity.script_gametype_sd ) && entity.script_gametype_sd != "1" ) - { - entity delete(); - } - i++; - continue; - } - else - { - if ( gametype == "koth" ) - { - if ( isDefined( entity.script_gametype_koth ) && entity.script_gametype_koth != "1" ) - { - entity delete(); - } - } - } - i++; - } -} - -constrainmapsize( mapsize ) -{ - entities = getentarray(); - i = 0; - while ( i < entities.size ) - { - entity = entities[ i ]; - if ( int( mapsize ) == 8 ) - { - if ( isDefined( entity.script_mapsize_08 ) && entity.script_mapsize_08 != "1" ) - { - entity delete(); - } - i++; - continue; - } - else if ( int( mapsize ) == 16 ) - { - if ( isDefined( entity.script_mapsize_16 ) && entity.script_mapsize_16 != "1" ) - { - entity delete(); - } - i++; - continue; - } - else if ( int( mapsize ) == 32 ) - { - if ( isDefined( entity.script_mapsize_32 ) && entity.script_mapsize_32 != "1" ) - { - entity delete(); - } - i++; - continue; - } - else - { - if ( int( mapsize ) == 64 ) - { - if ( isDefined( entity.script_mapsize_64 ) && entity.script_mapsize_64 != "1" ) - { - entity delete(); - } - } - } - i++; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_shellshock.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_shellshock.gsc deleted file mode 100644 index 770c71c..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_shellshock.gsc +++ /dev/null @@ -1,64 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - precacheshellshock( "frag_grenade_mp" ); - precacheshellshock( "damage_mp" ); - precacherumble( "artillery_rumble" ); - precacherumble( "grenade_rumble" ); -} - -shellshockondamage( cause, damage ) -{ - if ( cause != "MOD_EXPLOSIVE" && cause != "MOD_GRENADE" && cause != "MOD_GRENADE_SPLASH" || cause == "MOD_PROJECTILE" && cause == "MOD_PROJECTILE_SPLASH" ) - { - time = 0; - if ( damage >= 90 ) - { - time = 4; - } - else if ( damage >= 50 ) - { - time = 3; - } - else if ( damage >= 25 ) - { - time = 2; - } - else - { - if ( damage > 10 ) - { - time = 2; - } - } - if ( time ) - { - if ( self mayapplyscreeneffect() ) - { - self shellshock( "frag_grenade_mp", 0,5 ); - } - } - } -} - -endondeath() -{ - self waittill( "death" ); - waittillframeend; - self notify( "end_explode" ); -} - -endontimer( timer ) -{ - self endon( "disconnect" ); - wait timer; - self notify( "end_on_timer" ); -} - -rcbomb_earthquake( position ) -{ - playrumbleonposition( "grenade_rumble", position ); - earthquake( 0,5, 0,5, self.origin, 512 ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_spawning.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_spawning.gsc deleted file mode 100644 index ce29a09..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_spawning.gsc +++ /dev/null @@ -1,1073 +0,0 @@ -#include maps/mp/gametypes_zm/_spawnlogic; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - if ( !isDefined( level.gamemodespawndvars ) ) - { - level.gamemodespawndvars = ::default_gamemodespawndvars; - } - level init_spawn_system(); - level.recently_deceased = []; - _a74 = level.teams; - _k74 = getFirstArrayKey( _a74 ); - while ( isDefined( _k74 ) ) - { - team = _a74[ _k74 ]; - level.recently_deceased[ team ] = spawn_array_struct(); - _k74 = getNextArrayKey( _a74, _k74 ); - } - level thread onplayerconnect(); - if ( getDvar( #"AD6C19FE" ) == "" ) - { - level.spawn_visibility_check_max = 20; - } - else - { - level.spawn_visibility_check_max = getDvarInt( #"AD6C19FE" ); - } - level.spawnprotectiontime = getgametypesetting( "spawnprotectiontime" ); -/# - setdvar( "scr_debug_spawn_player", "" ); - setdvar( "scr_debug_render_spawn_data", "1" ); - setdvar( "scr_debug_render_snapshotmode", "0" ); - setdvar( "scr_spawn_point_test_mode", "0" ); - level.test_spawn_point_index = 0; - setdvar( "scr_debug_render_spawn_text", "1" ); -#/ - return; -} - -default_gamemodespawndvars( reset_dvars ) -{ -} - -init_spawn_system() -{ - level.spawnsystem = spawnstruct(); - spawnsystem = level.spawnsystem; - level get_player_spawning_dvars( 1 ); - level thread initialize_player_spawning_dvars(); - spawnsystem.einfluencer_shape_sphere = 0; - spawnsystem.einfluencer_shape_cylinder = 1; - spawnsystem.einfluencer_type_normal = 0; - spawnsystem.einfluencer_type_player = 1; - spawnsystem.einfluencer_type_weapon = 2; - spawnsystem.einfluencer_type_dog = 3; - spawnsystem.einfluencer_type_vehicle = 4; - spawnsystem.einfluencer_type_game_mode = 6; - spawnsystem.einfluencer_type_enemy_spawned = 7; - spawnsystem.einfluencer_curve_constant = 0; - spawnsystem.einfluencer_curve_linear = 1; - spawnsystem.einfluencer_curve_steep = 2; - spawnsystem.einfluencer_curve_inverse_linear = 3; - spawnsystem.einfluencer_curve_negative_to_positive = 4; - spawnsystem.ispawn_teammask = []; - spawnsystem.ispawn_teammask_free = 1; - spawnsystem.ispawn_teammask[ "free" ] = spawnsystem.ispawn_teammask_free; - all = spawnsystem.ispawn_teammask_free; - count = 1; - _a146 = level.teams; - _k146 = getFirstArrayKey( _a146 ); - while ( isDefined( _k146 ) ) - { - team = _a146[ _k146 ]; - spawnsystem.ispawn_teammask[ team ] = 1 << count; - all |= spawnsystem.ispawn_teammask[ team ]; - count++; - _k146 = getNextArrayKey( _a146, _k146 ); - } - spawnsystem.ispawn_teammask[ "all" ] = all; -} - -onplayerconnect() -{ - level endon( "game_ended" ); - for ( ;; ) - { - level waittill( "connecting", player ); - player setentertime( getTime() ); - player thread onplayerspawned(); - player thread ondisconnect(); - player thread onteamchange(); - player thread ongrenadethrow(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - level endon( "game_ended" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread initialspawnprotection( "specialty_nottargetedbyairsupport", 1 ); - self thread initialspawnprotection( "specialty_nokillstreakreticle", 0 ); - self thread initialspawnprotection( "specialty_nottargettedbysentry", 0 ); - if ( isDefined( self.pers[ "hasRadar" ] ) && self.pers[ "hasRadar" ] ) - { - self.hasspyplane = 1; - } - self enable_player_influencers( 1 ); - self thread ondeath(); - } -} - -ondeath() -{ - self endon( "disconnect" ); - level endon( "game_ended" ); - self waittill( "death" ); - self enable_player_influencers( 0 ); - self create_body_influencers(); -} - -onteamchange() -{ - self endon( "disconnect" ); - level endon( "game_ended" ); - while ( 1 ) - { - self waittill( "joined_team" ); - self player_influencers_set_team(); - wait 0,05; - } -} - -ongrenadethrow() -{ - self endon( "disconnect" ); - level endon( "game_ended" ); - while ( 1 ) - { - self waittill( "grenade_fire", grenade, weaponname ); - level thread create_grenade_influencers( self.pers[ "team" ], weaponname, grenade ); - wait 0,05; - } -} - -ondisconnect() -{ - level endon( "game_ended" ); - self waittill( "disconnect" ); -} - -get_score_curve_index( curve ) -{ - switch( curve ) - { - case "linear": - return level.spawnsystem.einfluencer_curve_linear; - case "steep": - return level.spawnsystem.einfluencer_curve_steep; - case "inverse_linear": - return level.spawnsystem.einfluencer_curve_linear; - case "negative_to_positive": - return level.spawnsystem.einfluencer_curve_negative_to_positive; - case "constant": - default: - return level.spawnsystem.einfluencer_curve_constant; - } -} - -get_influencer_type_index( curve ) -{ -} - -create_player_influencers() -{ -/# - assert( !isDefined( self.influencer_enemy_sphere ) ); -#/ -/# - assert( !isDefined( self.influencer_weapon_cylinder ) ); -#/ -/# - if ( level.teambased ) - { - assert( !isDefined( self.influencer_friendly_sphere ) ); - } -#/ -/# - if ( level.teambased ) - { - assert( !isDefined( self.influencer_friendly_cylinder ) ); - } -#/ - if ( !level.teambased ) - { - team_mask = level.spawnsystem.ispawn_teammask_free; - other_team_mask = level.spawnsystem.ispawn_teammask_free; - weapon_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else if ( isDefined( self.pers[ "team" ] ) ) - { - team = self.pers[ "team" ]; - team_mask = getteammask( team ); - other_team_mask = getotherteamsmask( team ); - weapon_team_mask = getotherteamsmask( team ); - } - else - { - team_mask = 0; - other_team_mask = 0; - weapon_team_mask = 0; - } - if ( level.hardcoremode ) - { - weapon_team_mask |= team_mask; - } - angles = self.angles; - origin = self.origin; - up = ( 0, 0, 0 ); - forward = ( 0, 0, 0 ); - cylinder_forward = up; - cylinder_up = forward; - self.influencer_enemy_sphere = addsphereinfluencer( level.spawnsystem.einfluencer_type_player, origin, level.spawnsystem.enemy_influencer_radius, level.spawnsystem.enemy_influencer_score, other_team_mask, "enemy,r,s", get_score_curve_index( level.spawnsystem.enemy_influencer_score_curve ), 0, self ); - if ( level.teambased ) - { - cylinder_up = -1 * forward; - self.influencer_friendly_sphere = addsphereinfluencer( level.spawnsystem.einfluencer_type_player, origin, level.spawnsystem.friend_weak_influencer_radius, level.spawnsystem.friend_weak_influencer_score, team_mask, "friend_weak,r,s", get_score_curve_index( level.spawnsystem.friend_weak_influencer_score_curve ), 0, self ); - } - self.spawn_influencers_created = 1; - if ( !isDefined( self.pers[ "team" ] ) || self.pers[ "team" ] == "spectator" ) - { - self enable_player_influencers( 0 ); - } -} - -remove_player_influencers() -{ - if ( level.teambased && isDefined( self.influencer_friendly_sphere ) ) - { - removeinfluencer( self.influencer_friendly_sphere ); - self.influencer_friendly_sphere = undefined; - } - if ( level.teambased && isDefined( self.influencer_friendly_cylinder ) ) - { - removeinfluencer( self.influencer_friendly_cylinder ); - self.influencer_friendly_cylinder = undefined; - } - if ( isDefined( self.influencer_enemy_sphere ) ) - { - removeinfluencer( self.influencer_enemy_sphere ); - self.influencer_enemy_sphere = undefined; - } - if ( isDefined( self.influencer_weapon_cylinder ) ) - { - removeinfluencer( self.influencer_weapon_cylinder ); - self.influencer_weapon_cylinder = undefined; - } -} - -enable_player_influencers( enabled ) -{ - if ( !isDefined( self.spawn_influencers_created ) ) - { - self create_player_influencers(); - } - if ( isDefined( self.influencer_friendly_sphere ) ) - { - enableinfluencer( self.influencer_friendly_sphere, enabled ); - } - if ( isDefined( self.influencer_friendly_cylinder ) ) - { - enableinfluencer( self.influencer_friendly_cylinder, enabled ); - } - if ( isDefined( self.influencer_enemy_sphere ) ) - { - enableinfluencer( self.influencer_enemy_sphere, enabled ); - } - if ( isDefined( self.influencer_weapon_cylinder ) ) - { - enableinfluencer( self.influencer_weapon_cylinder, enabled ); - } -} - -player_influencers_set_team() -{ - if ( !level.teambased ) - { - team_mask = level.spawnsystem.ispawn_teammask_free; - other_team_mask = level.spawnsystem.ispawn_teammask_free; - weapon_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - team = self.pers[ "team" ]; - team_mask = getteammask( team ); - other_team_mask = getotherteamsmask( team ); - weapon_team_mask = getotherteamsmask( team ); - } - if ( level.friendlyfire != 0 && level.teambased ) - { - weapon_team_mask |= team_mask; - } - if ( isDefined( self.influencer_friendly_sphere ) ) - { - setinfluencerteammask( self.influencer_friendly_sphere, team_mask ); - } - if ( isDefined( self.influencer_friendly_cylinder ) ) - { - setinfluencerteammask( self.influencer_friendly_cylinder, team_mask ); - } - if ( isDefined( self.influencer_enemy_sphere ) ) - { - setinfluencerteammask( self.influencer_enemy_sphere, other_team_mask ); - } - if ( isDefined( self.influencer_weapon_cylinder ) ) - { - setinfluencerteammask( self.influencer_weapon_cylinder, weapon_team_mask ); - } -} - -create_body_influencers() -{ - if ( level.teambased ) - { - team_mask = getteammask( self.pers[ "team" ] ); - } - else - { - team_mask = level.spawnsystem.ispawn_teammask_free; - } - addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.dead_friend_influencer_radius, level.spawnsystem.dead_friend_influencer_score, team_mask, "dead_friend,r,s", get_score_curve_index( level.spawnsystem.dead_friend_influencer_score_curve ), level.spawnsystem.dead_friend_influencer_timeout_seconds ); -} - -create_grenade_influencers( parent_team, weaponname, grenade ) -{ - pixbeginevent( "create_grenade_influencers" ); - if ( !level.teambased ) - { - weapon_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - weapon_team_mask = getotherteamsmask( parent_team ); - if ( level.friendlyfire ) - { - weapon_team_mask |= getteammask( parent_team ); - } - } - if ( issubstr( weaponname, "napalmblob" ) || issubstr( weaponname, "gl_" ) ) - { - pixendevent(); - return; - } - timeout = 0; - if ( weaponname == "tabun_gas_mp" ) - { - timeout = 7; - } - if ( isDefined( grenade.origin ) ) - { - if ( weaponname == "claymore_mp" || weaponname == "bouncingbetty_mp" ) - { - addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, grenade.origin, level.spawnsystem.claymore_influencer_radius, level.spawnsystem.claymore_influencer_score, weapon_team_mask, "claymore,r,s", get_score_curve_index( level.spawnsystem.claymore_influencer_score_curve ), timeout, grenade ); - } - else - { - addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, grenade.origin, level.spawnsystem.grenade_influencer_radius, level.spawnsystem.grenade_influencer_score, weapon_team_mask, "grenade,r,s", get_score_curve_index( level.spawnsystem.grenade_influencer_score_curve ), timeout, grenade ); - } - } - pixendevent(); -} - -create_napalm_fire_influencers( point, direction, parent_team, duration ) -{ - timeout = duration; - weapon_team_mask = 0; - offset = vectorScale( anglesToForward( direction ), 1100 ); - addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point + ( 2 * offset ), level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); - addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point + offset, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); - addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); - addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, point - offset, level.spawnsystem.napalm_influencer_radius, level.spawnsystem.napalm_influencer_score, weapon_team_mask, "napalm,r,s", get_score_curve_index( level.spawnsystem.napalm_influencer_score_curve ), timeout ); -} - -create_auto_turret_influencer( point, parent_team, angles ) -{ - if ( !level.teambased ) - { - weapon_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - weapon_team_mask = getotherteamsmask( parent_team ); - } - projected_point = point + vectorScale( anglesToForward( angles ), level.spawnsystem.auto_turret_influencer_radius * 0,7 ); - influencerid = addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, projected_point, level.spawnsystem.auto_turret_influencer_radius, level.spawnsystem.auto_turret_influencer_score, weapon_team_mask, "auto_turret,r,s", get_score_curve_index( level.spawnsystem.auto_turret_influencer_score_curve ) ); - return influencerid; -} - -create_dog_influencers() -{ - if ( !level.teambased ) - { - dog_enemy_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - dog_enemy_team_mask = getotherteamsmask( self.aiteam ); - } - addsphereinfluencer( level.spawnsystem.einfluencer_type_dog, self.origin, level.spawnsystem.dog_influencer_radius, level.spawnsystem.dog_influencer_score, dog_enemy_team_mask, "dog,r,s", get_score_curve_index( level.spawnsystem.dog_influencer_score_curve ), 0, self ); -} - -create_helicopter_influencers( parent_team ) -{ - if ( !level.teambased ) - { - team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - team_mask = getotherteamsmask( parent_team ); - } - self.influencer_helicopter_cylinder = addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, ( 0, 0, 0 ), ( 0, 0, 0 ), level.spawnsystem.helicopter_influencer_radius, level.spawnsystem.helicopter_influencer_length, level.spawnsystem.helicopter_influencer_score, team_mask, "helicopter,r,s", get_score_curve_index( level.spawnsystem.helicopter_influencer_score_curve ), 0, self ); -} - -remove_helicopter_influencers() -{ - if ( isDefined( self.influencer_helicopter_cylinder ) ) - { - removeinfluencer( self.influencer_helicopter_cylinder ); - } - self.influencer_helicopter_cylinder = undefined; -} - -create_tvmissile_influencers( parent_team ) -{ - if ( !level.teambased || is_hardcore() ) - { - team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - team_mask = getotherteamsmask( parent_team ); - } - self.influencer_tvmissile_cylinder = addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, ( 0, 0, 0 ), ( 0, 0, 0 ), level.spawnsystem.tvmissile_influencer_radius, level.spawnsystem.tvmissile_influencer_length, level.spawnsystem.tvmissile_influencer_score, team_mask, "tvmissile,r,s", get_score_curve_index( level.spawnsystem.tvmissile_influencer_score_curve ), 0, self ); -} - -remove_tvmissile_influencers() -{ - if ( isDefined( self.influencer_tvmissile_cylinder ) ) - { - removeinfluencer( self.influencer_tvmissile_cylinder ); - } - self.influencer_tvmissile_cylinder = undefined; -} - -create_artillery_influencers( point, radius ) -{ - weapon_team_mask = 0; - if ( radius < 0 ) - { - thisradius = level.spawnsystem.artillery_influencer_radius; - } - else - { - thisradius = radius; - } - return addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, point + vectorScale( ( 0, 0, 0 ), 2000 ), ( 0, 0, 0 ), ( 0, 0, 0 ), thisradius, 5000, level.spawnsystem.artillery_influencer_score, weapon_team_mask, "artillery,s,r", get_score_curve_index( level.spawnsystem.artillery_influencer_score_curve ), 7 ); -} - -create_vehicle_influencers() -{ - weapon_team_mask = 0; - vehicleradius = 144; - cylinderlength = level.spawnsystem.vehicle_influencer_lead_seconds; - up = ( 0, 0, 0 ); - forward = ( 0, 0, 0 ); - cylinder_forward = up; - cylinder_up = forward; - return addcylinderinfluencer( level.spawnsystem.einfluencer_type_vehicle, self.origin, cylinder_forward, cylinder_up, vehicleradius, cylinderlength, level.spawnsystem.vehicle_influencer_score, weapon_team_mask, "vehicle,s", get_score_curve_index( level.spawnsystem.vehicle_influencer_score_curve ), 0, self ); -} - -create_rcbomb_influencers( team ) -{ - if ( !level.teambased ) - { - other_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - other_team_mask = getotherteamsmask( team ); - } - return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.rcbomb_influencer_radius, level.spawnsystem.rcbomb_influencer_score, other_team_mask, "rcbomb,r,s", get_score_curve_index( level.spawnsystem.rcbomb_influencer_score_curve ), 0, self ); -} - -create_qrdrone_influencers( team ) -{ - if ( !level.teambased ) - { - other_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - other_team_mask = getotherteamsmask( team ); - } - self.influencer_qrdrone_cylinder = addcylinderinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, ( 0, 0, 0 ), ( 0, 0, 0 ), level.spawnsystem.qrdrone_cylinder_influencer_radius, level.spawnsystem.qrdrone_cylinder_influencer_length, level.spawnsystem.qrdrone_cylinder_influencer_score, other_team_mask, "qrdrone_cyl,r,s", get_score_curve_index( level.spawnsystem.qrdrone_cylinder_influencer_score_curve ), 0, self ); - return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.qrdrone_influencer_radius, level.spawnsystem.qrdrone_influencer_score, other_team_mask, "qrdrone,r,s", get_score_curve_index( level.spawnsystem.qrdrone_influencer_score_curve ), 0, self ); -} - -create_aitank_influencers( team ) -{ - if ( !level.teambased ) - { - other_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - other_team_mask = getotherteamsmask( team ); - } - return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, self.origin, level.spawnsystem.aitank_influencer_radius, level.spawnsystem.aitank_influencer_score, other_team_mask, "aitank,r,s", get_score_curve_index( level.spawnsystem.aitank_influencer_score_curve ), 0, self ); -} - -create_pegasus_influencer( origin, team ) -{ - if ( !level.teambased ) - { - other_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - other_team_mask = getotherteamsmask( team ); - } - return addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, origin, level.spawnsystem.pegasus_influencer_radius, level.spawnsystem.pegasus_influencer_score, other_team_mask, "pegasus,r,s", get_score_curve_index( level.spawnsystem.pegasus_influencer_score_curve ), 0 ); -} - -create_map_placed_influencers() -{ - staticinfluencerents = getentarray( "mp_uspawn_influencer", "classname" ); - i = 0; - while ( i < staticinfluencerents.size ) - { - staticinfluencerent = staticinfluencerents[ i ]; - if ( isDefined( staticinfluencerent.script_gameobjectname ) && staticinfluencerent.script_gameobjectname == "twar" ) - { - i++; - continue; - } - else - { - create_map_placed_influencer( staticinfluencerent ); - } - i++; - } -} - -create_map_placed_influencer( influencer_entity, optional_score_override ) -{ - influencer_id = -1; - if ( isDefined( influencer_entity.script_shape ) && isDefined( influencer_entity.script_score ) && isDefined( influencer_entity.script_score_curve ) ) - { - switch( influencer_entity.script_shape ) - { - case "sphere": - if ( isDefined( influencer_entity.radius ) ) - { - if ( isDefined( optional_score_override ) ) - { - score = optional_score_override; - } - else - { - score = influencer_entity.script_score; - } - influencer_id = addsphereinfluencer( level.spawnsystem.einfluencer_type_game_mode, influencer_entity.origin, influencer_entity.radius, score, getteammask( influencer_entity.script_team ), "*map_defined", get_score_curve_index( influencer_entity.script_score_curve ) ); - } - else - { -/# - assertmsg( "Radiant-placed sphere spawn influencers require 'radius' parameter" ); -#/ - } - break; - case "cylinder": - if ( isDefined( influencer_entity.radius ) && isDefined( influencer_entity.height ) ) - { - if ( isDefined( optional_score_override ) ) - { - score = optional_score_override; - } - else - { - score = influencer_entity.script_score; - } - influencer_id = addcylinderinfluencer( level.spawnsystem.einfluencer_type_game_mode, influencer_entity.origin, anglesToForward( influencer_entity.angles ), anglesToUp( influencer_entity.angles ), influencer_entity.radius, influencer_entity.height, score, getteammask( influencer_entity.script_team ), "*map_defined", get_score_curve_index( influencer_entity.script_score_curve ) ); - } - else - { -/# - assertmsg( "Radiant-placed cylinder spawn influencers require 'radius' and 'height' parameters" ); -#/ - } - break; - default: -/# - assertmsg( "Unsupported script_shape value ("" + influencer_entity.script_shape + "") for unified spawning system static influencer. Supported shapes are "cylinder" and "sphere"." ); -#/ - break; - } - } - else - { -/# - assertmsg( "Radiant-placed spawn influencers require 'script_shape', 'script_score' and 'script_score_curve' parameters" ); -#/ - } - return influencer_id; -} - -create_enemy_spawned_influencers( origin, team ) -{ - if ( !level.teambased ) - { - other_team_mask = level.spawnsystem.ispawn_teammask_free; - } - else - { - other_team_mask = getotherteamsmask( team ); - } - return addsphereinfluencer( level.spawnsystem.einfluencer_type_enemy_spawned, origin, level.spawnsystem.enemy_spawned_influencer_radius, level.spawnsystem.enemy_spawned_influencer_score, other_team_mask, "enemy_spawned,r,s", get_score_curve_index( level.spawnsystem.enemy_spawned_influencer_score_curve ), 7 ); -} - -updateallspawnpoints() -{ - _a1046 = level.teams; - _k1046 = getFirstArrayKey( _a1046 ); - while ( isDefined( _k1046 ) ) - { - team = _a1046[ _k1046 ]; - gatherspawnentities( team ); - _k1046 = getNextArrayKey( _a1046, _k1046 ); - } - clearspawnpoints(); - if ( level.teambased ) - { - _a1055 = level.teams; - _k1055 = getFirstArrayKey( _a1055 ); - while ( isDefined( _k1055 ) ) - { - team = _a1055[ _k1055 ]; - addspawnpoints( team, level.unified_spawn_points[ team ].a ); - _k1055 = getNextArrayKey( _a1055, _k1055 ); - } - } - else _a1062 = level.teams; - _k1062 = getFirstArrayKey( _a1062 ); - while ( isDefined( _k1062 ) ) - { - team = _a1062[ _k1062 ]; - addspawnpoints( "free", level.unified_spawn_points[ team ].a ); - _k1062 = getNextArrayKey( _a1062, _k1062 ); - } - remove_unused_spawn_entities(); -} - -initialize_player_spawning_dvars() -{ -/# - reset_dvars = 1; - while ( 1 ) - { - get_player_spawning_dvars( reset_dvars ); - reset_dvars = 0; - wait 2; -#/ - } -} - -get_player_spawning_dvars( reset_dvars ) -{ - k_player_height = get_player_height(); - player_height_times_10 = "" + ( 10 * k_player_height ); - ss = level.spawnsystem; - player_influencer_radius = 15 * k_player_height; - player_influencer_score = 150; - dog_influencer_radius = 10 * k_player_height; - dog_influencer_score = 150; - ss.script_based_influencer_system = set_dvar_int_if_unset( "scr_script_based_influencer_system", "0", reset_dvars ); - ss.randomness_range = set_dvar_float_if_unset( "scr_spawn_randomness_range", "10", reset_dvars ); - ss.objective_facing_bonus = set_dvar_float_if_unset( "scr_spawn_objective_facing_bonus", "50", reset_dvars ); - ss.friend_weak_influencer_score = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_score", "10", reset_dvars ); - ss.friend_weak_influencer_score_curve = set_dvar_if_unset( "scr_spawn_friend_weak_influencer_score_curve", "steep", reset_dvars ); - ss.friend_weak_influencer_radius = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_radius", player_height_times_10, reset_dvars ); - ss.enemy_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_score", "-150", reset_dvars ); - ss.enemy_influencer_score_curve = set_dvar_if_unset( "scr_spawn_enemy_influencer_score_curve", "steep", reset_dvars ); - ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2600", reset_dvars ); - ss.dead_friend_influencer_timeout_seconds = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_timeout_seconds", "15", reset_dvars ); - ss.dead_friend_influencer_count = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_count", "7", reset_dvars ); - ss.dead_friend_influencer_score = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_score", "-100", reset_dvars ); - ss.dead_friend_influencer_score_curve = set_dvar_if_unset( "scr_spawn_dead_friend_influencer_score_curve", "steep", reset_dvars ); - ss.dead_friend_influencer_radius = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_radius", player_height_times_10, reset_dvars ); - ss.vehicle_influencer_score = set_dvar_float_if_unset( "scr_spawn_vehicle_influencer_score", "-50", reset_dvars ); - ss.vehicle_influencer_score_curve = set_dvar_if_unset( "scr_spawn_vehicle_influencer_score_curve", "linear", reset_dvars ); - ss.vehicle_influencer_lead_seconds = set_dvar_float_if_unset( "scr_spawn_vehicle_influencer_lead_seconds", "3", reset_dvars ); - ss.dog_influencer_score = set_dvar_float_if_unset( "scr_spawn_dog_influencer_score", "-150", reset_dvars ); - ss.dog_influencer_score_curve = set_dvar_if_unset( "scr_spawn_dog_influencer_score_curve", "steep", reset_dvars ); - ss.dog_influencer_radius = set_dvar_float_if_unset( "scr_spawn_dog_influencer_radius", "" + ( 15 * k_player_height ), reset_dvars ); - ss.artillery_influencer_score = set_dvar_float_if_unset( "scr_spawn_artillery_influencer_score", "-600", reset_dvars ); - ss.artillery_influencer_score_curve = set_dvar_if_unset( "scr_spawn_artillery_influencer_score_curve", "linear", reset_dvars ); - ss.artillery_influencer_radius = set_dvar_float_if_unset( "scr_spawn_artillery_influencer_radius", "1200", reset_dvars ); - ss.grenade_influencer_score = set_dvar_float_if_unset( "scr_spawn_grenade_influencer_score", "-300", reset_dvars ); - ss.grenade_influencer_score_curve = set_dvar_if_unset( "scr_spawn_grenade_influencer_score_curve", "linear", reset_dvars ); - ss.grenade_influencer_radius = set_dvar_float_if_unset( "scr_spawn_grenade_influencer_radius", "" + ( 8 * k_player_height ), reset_dvars ); - ss.grenade_endpoint_influencer_score = set_dvar_float_if_unset( "scr_spawn_grenade_endpoint_influencer_score", "-300", reset_dvars ); - ss.grenade_endpoint_influencer_score_curve = set_dvar_if_unset( "scr_spawn_grenade_endpoint_influencer_score_curve", "linear", reset_dvars ); - ss.grenade_endpoint_influencer_radius = set_dvar_float_if_unset( "scr_spawn_grenade_endpoint_influencer_radius", "" + ( 8 * k_player_height ), reset_dvars ); - ss.claymore_influencer_score = set_dvar_float_if_unset( "scr_spawn_claymore_influencer_score", "-150", reset_dvars ); - ss.claymore_influencer_score_curve = set_dvar_if_unset( "scr_spawn_claymore_influencer_score_curve", "steep", reset_dvars ); - ss.claymore_influencer_radius = set_dvar_float_if_unset( "scr_spawn_claymore_influencer_radius", "" + ( 9 * k_player_height ), reset_dvars ); - ss.napalm_influencer_score = set_dvar_float_if_unset( "scr_spawn_napalm_influencer_score", "-500", reset_dvars ); - ss.napalm_influencer_score_curve = set_dvar_if_unset( "scr_spawn_napalm_influencer_score_curve", "linear", reset_dvars ); - ss.napalm_influencer_radius = set_dvar_float_if_unset( "scr_spawn_napalm_influencer_radius", "" + 750, reset_dvars ); - ss.auto_turret_influencer_score = set_dvar_float_if_unset( "scr_spawn_auto_turret_influencer_score", "-650", reset_dvars ); - ss.auto_turret_influencer_score_curve = set_dvar_if_unset( "scr_spawn_auto_turret_influencer_score_curve", "linear", reset_dvars ); - ss.auto_turret_influencer_radius = set_dvar_float_if_unset( "scr_spawn_auto_turret_influencer_radius", "" + 1200, reset_dvars ); - ss.rcbomb_influencer_score = set_dvar_float_if_unset( "scr_spawn_rcbomb_influencer_score", "-200", reset_dvars ); - ss.rcbomb_influencer_score_curve = set_dvar_if_unset( "scr_spawn_rcbomb_influencer_score_curve", "steep", reset_dvars ); - ss.rcbomb_influencer_radius = set_dvar_float_if_unset( "scr_spawn_rcbomb_influencer_radius", "" + ( 25 * k_player_height ), reset_dvars ); - ss.qrdrone_influencer_score = set_dvar_float_if_unset( "scr_spawn_qrdrone_influencer_score", "-200", reset_dvars ); - ss.qrdrone_influencer_score_curve = set_dvar_if_unset( "scr_spawn_qrdrone_influencer_score_curve", "steep", reset_dvars ); - ss.qrdrone_influencer_radius = set_dvar_float_if_unset( "scr_spawn_qrdrone_influencer_radius", "" + ( 25 * k_player_height ), reset_dvars ); - ss.qrdrone_cylinder_influencer_score = set_dvar_float_if_unset( "scr_spawn_qrdrone_cylinder_influencer_score", "-300", reset_dvars ); - ss.qrdrone_cylinder_influencer_score_curve = set_dvar_if_unset( "scr_spawn_qrdrone_cylinder_influencer_score_curve", "linear", reset_dvars ); - ss.qrdrone_cylinder_influencer_radius = set_dvar_float_if_unset( "scr_spawn_qrdrone_cylinder_influencer_radius", 1000, reset_dvars ); - ss.qrdrone_cylinder_influencer_length = set_dvar_float_if_unset( "scr_spawn_qrdrone_cylinder_influencer_length", 2000, reset_dvars ); - ss.aitank_influencer_score = set_dvar_float_if_unset( "scr_spawn_aitank_influencer_score", "-200", reset_dvars ); - ss.aitank_influencer_score_curve = set_dvar_if_unset( "scr_spawn_aitank_influencer_score_curve", "linear", reset_dvars ); - ss.aitank_influencer_radius = set_dvar_float_if_unset( "scr_spawn_aitank_influencer_radius", "" + ( 25 * k_player_height ), reset_dvars ); - ss.enemy_spawned_influencer_score_curve = set_dvar_if_unset( "scr_spawn_enemy_spawned_influencer_score_curve", "constant", reset_dvars ); - if ( level.teambased ) - { - ss.enemy_spawned_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_score", "-200", reset_dvars ); - ss.enemy_spawned_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_radius", "" + 1100, reset_dvars ); - } - else - { - ss.enemy_spawned_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_score", "-100", reset_dvars ); - ss.enemy_spawned_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_radius", "" + 400, reset_dvars ); - } - ss.helicopter_influencer_score = set_dvar_float_if_unset( "scr_spawn_helicopter_influencer_score", "-500", reset_dvars ); - ss.helicopter_influencer_score_curve = set_dvar_if_unset( "scr_spawn_helicopter_influencer_score_curve", "linear", reset_dvars ); - ss.helicopter_influencer_radius = set_dvar_float_if_unset( "scr_spawn_helicopter_influencer_radius", "" + 2000, reset_dvars ); - ss.helicopter_influencer_length = set_dvar_float_if_unset( "scr_spawn_helicopter_influencer_length", "" + 3500, reset_dvars ); - ss.tvmissile_influencer_score = set_dvar_float_if_unset( "scr_spawn_tvmissile_influencer_score", "-400", reset_dvars ); - ss.tvmissile_influencer_score_curve = set_dvar_if_unset( "scr_spawn_tvmissile_influencer_score_curve", "linear", reset_dvars ); - ss.tvmissile_influencer_radius = set_dvar_float_if_unset( "scr_spawn_tvmissile_influencer_radius", "" + 2000, reset_dvars ); - ss.tvmissile_influencer_length = set_dvar_float_if_unset( "scr_spawn_tvmissile_influencer_length", "" + 3000, reset_dvars ); - ss.pegasus_influencer_score = set_dvar_float_if_unset( "scr_spawn_pegasus_influencer_score", "-250", reset_dvars ); - ss.pegasus_influencer_score_curve = set_dvar_if_unset( "scr_spawn_pegasus_influencer_score_curve", "linear", reset_dvars ); - ss.pegasus_influencer_radius = set_dvar_float_if_unset( "scr_spawn_pegasus_influencer_radius", "" + ( 20 * k_player_height ), reset_dvars ); - if ( !isDefined( ss.unifiedsideswitching ) ) - { - ss.unifiedsideswitching = 1; - } - set_dvar_int_if_unset( "spawnsystem_allow_non_team_spawns", "0", reset_dvars ); - [[ level.gamemodespawndvars ]]( reset_dvars ); - if ( isDefined( level.levelspawndvars ) ) - { - [[ level.levelspawndvars ]]( reset_dvars ); - } - setspawnpointrandomvariation( ss.randomness_range ); -} - -level_use_unified_spawning( use ) -{ -} - -onspawnplayer_unified( predictedspawn ) -{ - if ( !isDefined( predictedspawn ) ) - { - predictedspawn = 0; - } -/# - if ( getDvarInt( "scr_spawn_point_test_mode" ) != 0 ) - { - spawn_point = get_debug_spawnpoint( self ); - self spawn( spawn_point.origin, spawn_point.angles ); - return; -#/ - } - use_new_spawn_system = 0; - initial_spawn = 1; - if ( isDefined( self.uspawn_already_spawned ) ) - { - initial_spawn = !self.uspawn_already_spawned; - } - if ( level.usestartspawns ) - { - use_new_spawn_system = 0; - } - if ( level.gametype == "sd" ) - { - use_new_spawn_system = 0; - } - set_dvar_if_unset( "scr_spawn_force_unified", "0" ); - [[ level.onspawnplayer ]]( predictedspawn ); - if ( !predictedspawn ) - { - self.uspawn_already_spawned = 1; - } - return; -} - -getspawnpoint( player_entity, predictedspawn ) -{ - if ( !isDefined( predictedspawn ) ) - { - predictedspawn = 0; - } - if ( level.teambased ) - { - point_team = player_entity.pers[ "team" ]; - influencer_team = player_entity.pers[ "team" ]; - } - else - { - point_team = "free"; - influencer_team = "free"; - } - if ( level.teambased && isDefined( game[ "switchedsides" ] ) && game[ "switchedsides" ] && level.spawnsystem.unifiedsideswitching ) - { - point_team = getotherteam( point_team ); - } - best_spawn_entity = get_best_spawnpoint( point_team, influencer_team, player_entity, predictedspawn ); - if ( !predictedspawn ) - { - player_entity.last_spawn_origin = best_spawn_entity.origin; - } - return best_spawn_entity; -} - -get_debug_spawnpoint( player ) -{ - if ( level.teambased ) - { - team = player.pers[ "team" ]; - } - else - { - team = "free"; - } - index = level.test_spawn_point_index; - level.test_spawn_point_index++; - if ( team == "free" ) - { - spawn_counts = 0; - _a1409 = level.teams; - _k1409 = getFirstArrayKey( _a1409 ); - while ( isDefined( _k1409 ) ) - { - team = _a1409[ _k1409 ]; - spawn_counts += level.unified_spawn_points[ team ].a.size; - _k1409 = getNextArrayKey( _a1409, _k1409 ); - } - if ( level.test_spawn_point_index >= spawn_counts ) - { - level.test_spawn_point_index = 0; - } - count = 0; - _a1420 = level.teams; - _k1420 = getFirstArrayKey( _a1420 ); - while ( isDefined( _k1420 ) ) - { - team = _a1420[ _k1420 ]; - size = level.unified_spawn_points[ team ].a.size; - if ( level.test_spawn_point_index < ( count + size ) ) - { - return level.unified_spawn_points[ team ].a[ level.test_spawn_point_index - count ]; - } - count += size; - _k1420 = getNextArrayKey( _a1420, _k1420 ); - } - } - else if ( level.test_spawn_point_index >= level.unified_spawn_points[ team ].a.size ) - { - level.test_spawn_point_index = 0; - } - return level.unified_spawn_points[ team ].a[ level.test_spawn_point_index ]; -} - -get_best_spawnpoint( point_team, influencer_team, player, predictedspawn ) -{ - if ( level.teambased ) - { - vis_team_mask = getotherteamsmask( player.pers[ "team" ] ); - } - else - { - vis_team_mask = level.spawnsystem.ispawn_teammask_free; - } - scored_spawn_points = getsortedspawnpoints( point_team, influencer_team, vis_team_mask, player, predictedspawn ); -/# - assert( scored_spawn_points.size > 0 ); -#/ -/# - assert( scored_spawn_points.size == 1 ); -#/ - if ( !predictedspawn ) - { - bbprint( "mpspawnpointsused", "reason %s x %d y %d z %d", "point used", scored_spawn_points[ 0 ].origin ); - } - return scored_spawn_points[ 0 ]; -} - -gatherspawnentities( player_team ) -{ - if ( !isDefined( level.unified_spawn_points ) ) - { - level.unified_spawn_points = []; - } - else - { - if ( isDefined( level.unified_spawn_points[ player_team ] ) ) - { - return level.unified_spawn_points[ player_team ]; - } - } - spawn_entities_s = spawn_array_struct(); - spawn_entities_s.a = getentarray( "mp_uspawn_point", "classname" ); - if ( !isDefined( spawn_entities_s.a ) ) - { - spawn_entities_s.a = []; - } - legacy_spawn_points = maps/mp/gametypes_zm/_spawnlogic::getteamspawnpoints( player_team ); - legacy_spawn_index = 0; - while ( legacy_spawn_index < legacy_spawn_points.size ) - { - spawn_entities_s.a[ spawn_entities_s.a.size ] = legacy_spawn_points[ legacy_spawn_index ]; - legacy_spawn_index++; - } - level.unified_spawn_points[ player_team ] = spawn_entities_s; - return spawn_entities_s; -} - -is_hardcore() -{ - if ( isDefined( level.hardcoremode ) ) - { - return level.hardcoremode; - } -} - -teams_have_enmity( team1, team2 ) -{ - if ( isDefined( team1 ) || !isDefined( team2 ) && level.gametype == "dm" ) - { - return 1; - } - if ( team1 != "neutral" && team2 != "neutral" ) - { - return team1 != team2; - } -} - -remove_unused_spawn_entities() -{ - spawn_entity_types = []; - spawn_entity_types[ spawn_entity_types.size ] = "mp_dm_spawn"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_tdm_spawn_allies_start"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_tdm_spawn_axis_start"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_tdm_spawn"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_ctf_spawn_allies_start"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_ctf_spawn_axis_start"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_ctf_spawn_allies"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_ctf_spawn_axis"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_dom_spawn_allies_start"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_dom_spawn_axis_start"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_dom_spawn"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_sab_spawn_allies_start"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_sab_spawn_axis_start"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_sab_spawn_allies"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_sab_spawn_axis"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_sd_spawn_attacker"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_sd_spawn_defender"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_twar_spawn_axis_start"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_twar_spawn_allies_start"; - spawn_entity_types[ spawn_entity_types.size ] = "mp_twar_spawn"; - i = 0; - while ( i < spawn_entity_types.size ) - { - if ( spawn_point_class_name_being_used( spawn_entity_types[ i ] ) ) - { - i++; - continue; - } - else - { - spawnpoints = maps/mp/gametypes_zm/_spawnlogic::getspawnpointarray( spawn_entity_types[ i ] ); - delete_all_spawns( spawnpoints ); - } - i++; - } -} - -delete_all_spawns( spawnpoints ) -{ - i = 0; - while ( i < spawnpoints.size ) - { - spawnpoints[ i ] delete(); - i++; - } -} - -spawn_point_class_name_being_used( name ) -{ - if ( !isDefined( level.spawn_point_class_names ) ) - { - return 0; - } - i = 0; - while ( i < level.spawn_point_class_names.size ) - { - if ( level.spawn_point_class_names[ i ] == name ) - { - return 1; - } - i++; - } - return 0; -} - -codecallback_updatespawnpoints() -{ - _a1624 = level.teams; - _k1624 = getFirstArrayKey( _a1624 ); - while ( isDefined( _k1624 ) ) - { - team = _a1624[ _k1624 ]; - maps/mp/gametypes_zm/_spawnlogic::rebuildspawnpoints( team ); - _k1624 = getNextArrayKey( _a1624, _k1624 ); - } - level.unified_spawn_points = undefined; - updateallspawnpoints(); -} - -initialspawnprotection( specialtyname, spawnmonitorspeed ) -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( !isDefined( level.spawnprotectiontime ) || level.spawnprotectiontime == 0 ) - { - return; - } - if ( specialtyname == "specialty_nottargetedbyairsupport" ) - { - self.specialty_nottargetedbyairsupport = 1; - wait level.spawnprotectiontime; - self.specialty_nottargetedbyairsupport = undefined; - } - else - { - if ( !self hasperk( specialtyname ) ) - { - self setperk( specialtyname ); - wait level.spawnprotectiontime; - self unsetperk( specialtyname ); - } - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_spawnlogic.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_spawnlogic.gsc deleted file mode 100644 index ba21d0f..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_spawnlogic.gsc +++ /dev/null @@ -1,2496 +0,0 @@ -#include maps/mp/gametypes_zm/_spawnlogic; -#include maps/mp/gametypes_zm/_gameobjects; -#include maps/mp/gametypes_zm/_callbacksetup; -#include maps/mp/_utility; -#include common_scripts/utility; - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connected", player ); - } -} - -findboxcenter( mins, maxs ) -{ - center = ( -1, -1, -1 ); - center = maxs - mins; - center = ( center[ 0 ] / 2, center[ 1 ] / 2, center[ 2 ] / 2 ) + mins; - return center; -} - -expandmins( mins, point ) -{ - if ( mins[ 0 ] > point[ 0 ] ) - { - mins = ( point[ 0 ], mins[ 1 ], mins[ 2 ] ); - } - if ( mins[ 1 ] > point[ 1 ] ) - { - mins = ( mins[ 0 ], point[ 1 ], mins[ 2 ] ); - } - if ( mins[ 2 ] > point[ 2 ] ) - { - mins = ( mins[ 0 ], mins[ 1 ], point[ 2 ] ); - } - return mins; -} - -expandmaxs( maxs, point ) -{ - if ( maxs[ 0 ] < point[ 0 ] ) - { - maxs = ( point[ 0 ], maxs[ 1 ], maxs[ 2 ] ); - } - if ( maxs[ 1 ] < point[ 1 ] ) - { - maxs = ( maxs[ 0 ], point[ 1 ], maxs[ 2 ] ); - } - if ( maxs[ 2 ] < point[ 2 ] ) - { - maxs = ( maxs[ 0 ], maxs[ 1 ], point[ 2 ] ); - } - return maxs; -} - -addspawnpointsinternal( team, spawnpointname ) -{ - oldspawnpoints = []; - if ( level.teamspawnpoints[ team ].size ) - { - oldspawnpoints = level.teamspawnpoints[ team ]; - } - level.teamspawnpoints[ team ] = getspawnpointarray( spawnpointname ); - if ( !isDefined( level.spawnpoints ) ) - { - level.spawnpoints = []; - } - index = 0; - while ( index < level.teamspawnpoints[ team ].size ) - { - spawnpoint = level.teamspawnpoints[ team ][ index ]; - if ( !isDefined( spawnpoint.inited ) ) - { - spawnpoint spawnpointinit(); - level.spawnpoints[ level.spawnpoints.size ] = spawnpoint; - } - index++; - } - index = 0; - while ( index < oldspawnpoints.size ) - { - origin = oldspawnpoints[ index ].origin; - level.spawnmins = expandmins( level.spawnmins, origin ); - level.spawnmaxs = expandmaxs( level.spawnmaxs, origin ); - level.teamspawnpoints[ team ][ level.teamspawnpoints[ team ].size ] = oldspawnpoints[ index ]; - index++; - } - if ( !level.teamspawnpoints[ team ].size ) - { -/# - println( "^1ERROR: No " + spawnpointname + " spawnpoints found in level!" ); -#/ - maps/mp/gametypes_zm/_callbacksetup::abortlevel(); - wait 1; - return; - } -} - -clearspawnpoints() -{ - _a87 = level.teams; - _k87 = getFirstArrayKey( _a87 ); - while ( isDefined( _k87 ) ) - { - team = _a87[ _k87 ]; - level.teamspawnpoints[ team ] = []; - _k87 = getNextArrayKey( _a87, _k87 ); - } - level.spawnpoints = []; - level.unified_spawn_points = undefined; -} - -addspawnpoints( team, spawnpointname ) -{ - addspawnpointclassname( spawnpointname ); - addspawnpointteamclassname( team, spawnpointname ); - addspawnpointsinternal( team, spawnpointname ); -} - -rebuildspawnpoints( team ) -{ - level.teamspawnpoints[ team ] = []; - index = 0; - while ( index < level.spawn_point_team_class_names[ team ].size ) - { - addspawnpointsinternal( team, level.spawn_point_team_class_names[ team ][ index ] ); - index++; - } -} - -placespawnpoints( spawnpointname ) -{ - addspawnpointclassname( spawnpointname ); - spawnpoints = getspawnpointarray( spawnpointname ); -/# - if ( !isDefined( level.extraspawnpointsused ) ) - { - level.extraspawnpointsused = []; -#/ - } - if ( !spawnpoints.size ) - { -/# - println( "^1No " + spawnpointname + " spawnpoints found in level!" ); -#/ - maps/mp/gametypes_zm/_callbacksetup::abortlevel(); - wait 1; - return; - } - index = 0; - while ( index < spawnpoints.size ) - { - spawnpoints[ index ] spawnpointinit(); -/# - spawnpoints[ index ].fakeclassname = spawnpointname; - level.extraspawnpointsused[ level.extraspawnpointsused.size ] = spawnpoints[ index ]; -#/ - index++; - } -} - -dropspawnpoints( spawnpointname ) -{ - spawnpoints = getspawnpointarray( spawnpointname ); - if ( !spawnpoints.size ) - { -/# - println( "^1No " + spawnpointname + " spawnpoints found in level!" ); -#/ - return; - } - index = 0; - while ( index < spawnpoints.size ) - { - spawnpoints[ index ] placespawnpoint(); - index++; - } -} - -addspawnpointclassname( spawnpointclassname ) -{ - if ( !isDefined( level.spawn_point_class_names ) ) - { - level.spawn_point_class_names = []; - } - level.spawn_point_class_names[ level.spawn_point_class_names.size ] = spawnpointclassname; -} - -addspawnpointteamclassname( team, spawnpointclassname ) -{ - level.spawn_point_team_class_names[ team ][ level.spawn_point_team_class_names[ team ].size ] = spawnpointclassname; -} - -getspawnpointarray( classname ) -{ - spawnpoints = getentarray( classname, "classname" ); - if ( !isDefined( level.extraspawnpoints ) || !isDefined( level.extraspawnpoints[ classname ] ) ) - { - return spawnpoints; - } - i = 0; - while ( i < level.extraspawnpoints[ classname ].size ) - { - spawnpoints[ spawnpoints.size ] = level.extraspawnpoints[ classname ][ i ]; - i++; - } - return spawnpoints; -} - -spawnpointinit() -{ - spawnpoint = self; - origin = spawnpoint.origin; - if ( !level.spawnminsmaxsprimed ) - { - level.spawnmins = origin; - level.spawnmaxs = origin; - level.spawnminsmaxsprimed = 1; - } - else - { - level.spawnmins = expandmins( level.spawnmins, origin ); - level.spawnmaxs = expandmaxs( level.spawnmaxs, origin ); - } - spawnpoint placespawnpoint(); - spawnpoint.forward = anglesToForward( spawnpoint.angles ); - spawnpoint.sighttracepoint = spawnpoint.origin + vectorScale( ( -1, -1, -1 ), 50 ); - spawnpoint.inited = 1; -} - -getteamspawnpoints( team ) -{ - return level.teamspawnpoints[ team ]; -} - -getspawnpoint_final( spawnpoints, useweights ) -{ - bestspawnpoint = undefined; - if ( !isDefined( spawnpoints ) || spawnpoints.size == 0 ) - { - return undefined; - } - if ( !isDefined( useweights ) ) - { - useweights = 1; - } - if ( useweights ) - { - bestspawnpoint = getbestweightedspawnpoint( spawnpoints ); - thread spawnweightdebug( spawnpoints ); - } - else i = 0; - while ( i < spawnpoints.size ) - { - if ( isDefined( self.lastspawnpoint ) && self.lastspawnpoint == spawnpoints[ i ] ) - { - i++; - continue; - } - else - { - if ( positionwouldtelefrag( spawnpoints[ i ].origin ) ) - { - i++; - continue; - } - else - { - bestspawnpoint = spawnpoints[ i ]; - break; - } - } - i++; - } - while ( !isDefined( bestspawnpoint ) ) - { - while ( isDefined( self.lastspawnpoint ) && !positionwouldtelefrag( self.lastspawnpoint.origin ) ) - { - i = 0; - while ( i < spawnpoints.size ) - { - if ( spawnpoints[ i ] == self.lastspawnpoint ) - { - bestspawnpoint = spawnpoints[ i ]; - break; - } - else - { - i++; - } - } - } - } - if ( !isDefined( bestspawnpoint ) ) - { - if ( useweights ) - { - bestspawnpoint = spawnpoints[ randomint( spawnpoints.size ) ]; - } - else - { - bestspawnpoint = spawnpoints[ 0 ]; - } - } - self finalizespawnpointchoice( bestspawnpoint ); -/# - self storespawndata( spawnpoints, useweights, bestspawnpoint ); -#/ - return bestspawnpoint; -} - -finalizespawnpointchoice( spawnpoint ) -{ - time = getTime(); - self.lastspawnpoint = spawnpoint; - self.lastspawntime = time; - spawnpoint.lastspawnedplayer = self; - spawnpoint.lastspawntime = time; -} - -getbestweightedspawnpoint( spawnpoints ) -{ - maxsighttracedspawnpoints = 3; - try = 0; - while ( try <= maxsighttracedspawnpoints ) - { - bestspawnpoints = []; - bestweight = undefined; - bestspawnpoint = undefined; - i = 0; - while ( i < spawnpoints.size ) - { - if ( !isDefined( bestweight ) || spawnpoints[ i ].weight > bestweight ) - { - if ( positionwouldtelefrag( spawnpoints[ i ].origin ) ) - { - i++; - continue; - } - else bestspawnpoints = []; - bestspawnpoints[ 0 ] = spawnpoints[ i ]; - bestweight = spawnpoints[ i ].weight; - i++; - continue; - } - else - { - if ( spawnpoints[ i ].weight == bestweight ) - { - if ( positionwouldtelefrag( spawnpoints[ i ].origin ) ) - { - i++; - continue; - } - else - { - bestspawnpoints[ bestspawnpoints.size ] = spawnpoints[ i ]; - } - } - } - i++; - } - if ( bestspawnpoints.size == 0 ) - { - return undefined; - } - bestspawnpoint = bestspawnpoints[ randomint( bestspawnpoints.size ) ]; - if ( try == maxsighttracedspawnpoints ) - { - return bestspawnpoint; - } - if ( isDefined( bestspawnpoint.lastsighttracetime ) && bestspawnpoint.lastsighttracetime == getTime() ) - { - return bestspawnpoint; - } - if ( !lastminutesighttraces( bestspawnpoint ) ) - { - return bestspawnpoint; - } - penalty = getlospenalty(); -/# - if ( level.storespawndata || level.debugspawning ) - { - bestspawnpoint.spawndata[ bestspawnpoint.spawndata.size ] = "Last minute sight trace: -" + penalty; -#/ - } - bestspawnpoint.weight -= penalty; - bestspawnpoint.lastsighttracetime = getTime(); - try++; - } -} - -checkbad( spawnpoint ) -{ -/# - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( !isalive( player ) || player.sessionstate != "playing" ) - { - i++; - continue; - } - else - { - if ( level.teambased && player.team == self.team ) - { - i++; - continue; - } - else - { - losexists = bullettracepassed( player.origin + vectorScale( ( -1, -1, -1 ), 50 ), spawnpoint.sighttracepoint, 0, undefined ); - if ( losexists ) - { - thread badspawnline( spawnpoint.sighttracepoint, player.origin + vectorScale( ( -1, -1, -1 ), 50 ), self.name, player.name ); - } - } - } - i++; -#/ - } -} - -badspawnline( start, end, name1, name2 ) -{ -/# - dist = distance( start, end ); - i = 0; - while ( i < 200 ) - { - line( start, end, ( -1, -1, -1 ) ); - print3d( start, "Bad spawn! " + name1 + ", dist = " + dist ); - print3d( end, name2 ); - wait 0,05; - i++; -#/ - } -} - -storespawndata( spawnpoints, useweights, bestspawnpoint ) -{ -/# - if ( !isDefined( level.storespawndata ) || !level.storespawndata ) - { - return; - } - level.storespawndata = getDvarInt( "scr_recordspawndata" ); - if ( !level.storespawndata ) - { - return; - } - if ( !isDefined( level.spawnid ) ) - { - level.spawngameid = randomint( 100 ); - level.spawnid = 0; - } - if ( bestspawnpoint.classname == "mp_global_intermission" ) - { - return; - } - level.spawnid++; - file = openfile( "spawndata.txt", "append" ); - fprintfields( file, ( level.spawngameid + "." ) + level.spawnid + "," + spawnpoints.size + "," + self.name ); - i = 0; - while ( i < spawnpoints.size ) - { - str = vectostr( spawnpoints[ i ].origin ) + ","; - if ( spawnpoints[ i ] == bestspawnpoint ) - { - str += "1,"; - } - else - { - str += "0,"; - } - if ( !useweights ) - { - str += "0,"; - } - else - { - str += spawnpoints[ i ].weight + ","; - } - if ( !isDefined( spawnpoints[ i ].spawndata ) ) - { - spawnpoints[ i ].spawndata = []; - } - if ( !isDefined( spawnpoints[ i ].sightchecks ) ) - { - spawnpoints[ i ].sightchecks = []; - } - str += spawnpoints[ i ].spawndata.size + ","; - j = 0; - while ( j < spawnpoints[ i ].spawndata.size ) - { - str += spawnpoints[ i ].spawndata[ j ] + ","; - j++; - } - str += spawnpoints[ i ].sightchecks.size + ","; - j = 0; - while ( j < spawnpoints[ i ].sightchecks.size ) - { - str += ( spawnpoints[ i ].sightchecks[ j ].penalty + "," ) + vectostr( spawnpoints[ i ].origin ) + ","; - j++; - } - fprintfields( file, str ); - i++; - } - obj = spawnstruct(); - getallalliedandenemyplayers( obj ); - numallies = 0; - numenemies = 0; - str = ""; - i = 0; - while ( i < obj.allies.size ) - { - if ( obj.allies[ i ] == self ) - { - i++; - continue; - } - else - { - numallies++; - str += vectostr( obj.allies[ i ].origin ) + ","; - } - i++; - } - i = 0; - while ( i < obj.enemies.size ) - { - numenemies++; - str += vectostr( obj.enemies[ i ].origin ) + ","; - i++; - } - str = ( numallies + "," ) + numenemies + "," + str; - fprintfields( file, str ); - otherdata = []; - if ( isDefined( level.bombguy ) ) - { - index = otherdata.size; - otherdata[ index ] = spawnstruct(); - otherdata[ index ].origin = level.bombguy.origin + vectorScale( ( -1, -1, -1 ), 20 ); - otherdata[ index ].text = "Bomb holder"; - } - else - { - if ( isDefined( level.bombpos ) ) - { - index = otherdata.size; - otherdata[ index ] = spawnstruct(); - otherdata[ index ].origin = level.bombpos; - otherdata[ index ].text = "Bomb"; - } - } - while ( isDefined( level.flags ) ) - { - i = 0; - while ( i < level.flags.size ) - { - index = otherdata.size; - otherdata[ index ] = spawnstruct(); - otherdata[ index ].origin = level.flags[ i ].origin; - otherdata[ index ].text = level.flags[ i ].useobj maps/mp/gametypes_zm/_gameobjects::getownerteam() + " flag"; - i++; - } - } - str = otherdata.size + ","; - i = 0; - while ( i < otherdata.size ) - { - str += vectostr( otherdata[ i ].origin ) + "," + otherdata[ i ].text + ","; - i++; - } - fprintfields( file, str ); - closefile( file ); - thisspawnid = ( level.spawngameid + "." ) + level.spawnid; - if ( isDefined( self.thisspawnid ) ) - { - } - self.thisspawnid = thisspawnid; -#/ -} - -readspawndata( desiredid, relativepos ) -{ -/# - file = openfile( "spawndata.txt", "read" ); - if ( file < 0 ) - { - return; - } - oldspawndata = level.curspawndata; - level.curspawndata = undefined; - prev = undefined; - prevthisplayer = undefined; - lookingfornextthisplayer = 0; - lookingfornext = 0; - if ( isDefined( relativepos ) && !isDefined( oldspawndata ) ) - { - return; - } - while ( 1 ) - { - if ( freadln( file ) <= 0 ) - { - break; - } - else data = spawnstruct(); - data.id = fgetarg( file, 0 ); - numspawns = int( fgetarg( file, 1 ) ); - if ( numspawns > 256 ) - { - break; - } - else data.playername = fgetarg( file, 2 ); - data.spawnpoints = []; - data.friends = []; - data.enemies = []; - data.otherdata = []; - i = 0; - while ( i < numspawns ) - { - if ( freadln( file ) <= 0 ) - { - break; - } - else spawnpoint = spawnstruct(); - spawnpoint.origin = strtovec( fgetarg( file, 0 ) ); - spawnpoint.winner = int( fgetarg( file, 1 ) ); - spawnpoint.weight = int( fgetarg( file, 2 ) ); - spawnpoint.data = []; - spawnpoint.sightchecks = []; - if ( i == 0 ) - { - data.minweight = spawnpoint.weight; - data.maxweight = spawnpoint.weight; - } - else - { - if ( spawnpoint.weight < data.minweight ) - { - data.minweight = spawnpoint.weight; - } - if ( spawnpoint.weight > data.maxweight ) - { - data.maxweight = spawnpoint.weight; - } - } - argnum = 4; - numdata = int( fgetarg( file, 3 ) ); - if ( numdata > 256 ) - { - break; - } - else j = 0; - while ( j < numdata ) - { - spawnpoint.data[ spawnpoint.data.size ] = fgetarg( file, argnum ); - argnum++; - j++; - } - numsightchecks = int( fgetarg( file, argnum ) ); - argnum++; - if ( numsightchecks > 256 ) - { - break; - } - else - { - j = 0; - while ( j < numsightchecks ) - { - index = spawnpoint.sightchecks.size; - spawnpoint.sightchecks[ index ] = spawnstruct(); - spawnpoint.sightchecks[ index ].penalty = int( fgetarg( file, argnum ) ); - argnum++; - spawnpoint.sightchecks[ index ].origin = strtovec( fgetarg( file, argnum ) ); - argnum++; - j++; - } - data.spawnpoints[ data.spawnpoints.size ] = spawnpoint; - i++; - } - } - if ( !isDefined( data.minweight ) ) - { - data.minweight = -1; - data.maxweight = 0; - } - if ( data.minweight == data.maxweight ) - { - data.minweight -= 1; - } - if ( freadln( file ) <= 0 ) - { - break; - } - else numfriends = int( fgetarg( file, 0 ) ); - numenemies = int( fgetarg( file, 1 ) ); - if ( numfriends > 32 || numenemies > 32 ) - { - break; - } - else - { - argnum = 2; - i = 0; - while ( i < numfriends ) - { - data.friends[ data.friends.size ] = strtovec( fgetarg( file, argnum ) ); - argnum++; - i++; - } - i = 0; - while ( i < numenemies ) - { - data.enemies[ data.enemies.size ] = strtovec( fgetarg( file, argnum ) ); - argnum++; - i++; - } - if ( freadln( file ) <= 0 ) - { - break; - } - else numotherdata = int( fgetarg( file, 0 ) ); - argnum = 1; - i = 0; - while ( i < numotherdata ) - { - otherdata = spawnstruct(); - otherdata.origin = strtovec( fgetarg( file, argnum ) ); - argnum++; - otherdata.text = fgetarg( file, argnum ); - argnum++; - data.otherdata[ data.otherdata.size ] = otherdata; - i++; - } - if ( isDefined( relativepos ) ) - { - if ( relativepos == "prevthisplayer" ) - { - if ( data.id == oldspawndata.id ) - { - level.curspawndata = prevthisplayer; - break; - } - else } - else if ( relativepos == "prev" ) - { - if ( data.id == oldspawndata.id ) - { - level.curspawndata = prev; - break; - } - else } - else if ( relativepos == "nextthisplayer" ) - { - if ( lookingfornextthisplayer ) - { - level.curspawndata = data; - break; - } - else if ( data.id == oldspawndata.id ) - { - lookingfornextthisplayer = 1; - } - } - else if ( relativepos == "next" ) - { - if ( lookingfornext ) - { - level.curspawndata = data; - break; - } - else if ( data.id == oldspawndata.id ) - { - lookingfornext = 1; - } - } - } - else - { - if ( data.id == desiredid ) - { - level.curspawndata = data; - break; - } - } - else - { - prev = data; - if ( isDefined( oldspawndata ) && data.playername == oldspawndata.playername ) - { - prevthisplayer = data; - } - } - } - } - closefile( file ); -#/ -} - -drawspawndata() -{ -/# - level notify( "drawing_spawn_data" ); - level endon( "drawing_spawn_data" ); - textoffset = vectorScale( ( -1, -1, -1 ), 12 ); - while ( 1 ) - { - while ( !isDefined( level.curspawndata ) ) - { - wait 0,5; - } - i = 0; - while ( i < level.curspawndata.friends.size ) - { - print3d( level.curspawndata.friends[ i ], "=)", ( 0,5, 1, 0,5 ), 1, 5 ); - i++; - } - i = 0; - while ( i < level.curspawndata.enemies.size ) - { - print3d( level.curspawndata.enemies[ i ], "=(", ( 1, 0,5, 0,5 ), 1, 5 ); - i++; - } - i = 0; - while ( i < level.curspawndata.otherdata.size ) - { - print3d( level.curspawndata.otherdata[ i ].origin, level.curspawndata.otherdata[ i ].text, ( 0,5, 0,75, 1 ), 1, 2 ); - i++; - } - i = 0; - while ( i < level.curspawndata.spawnpoints.size ) - { - sp = level.curspawndata.spawnpoints[ i ]; - orig = sp.sighttracepoint; - if ( sp.winner ) - { - print3d( orig, level.curspawndata.playername + " spawned here", ( 0,5, 0,5, 1 ), 1, 2 ); - orig += textoffset; - } - amnt = ( sp.weight - level.curspawndata.minweight ) / ( level.curspawndata.maxweight - level.curspawndata.minweight ); - print3d( orig, "Weight: " + sp.weight, ( 1 - amnt, amnt, 0,5 ) ); - orig += textoffset; - j = 0; - while ( j < sp.data.size ) - { - print3d( orig, sp.data[ j ], ( -1, -1, -1 ) ); - orig += textoffset; - j++; - } - j = 0; - while ( j < sp.sightchecks.size ) - { - print3d( orig, "Sightchecks: -" + sp.sightchecks[ j ].penalty, ( 1, 0,5, 0,5 ) ); - orig += textoffset; - j++; - } - i++; - } - wait 0,05; -#/ - } -} - -vectostr( vec ) -{ -/# - return int( vec[ 0 ] ) + "/" + int( vec[ 1 ] ) + "/" + int( vec[ 2 ] ); -#/ -} - -strtovec( str ) -{ -/# - parts = strtok( str, "/" ); - if ( parts.size != 3 ) - { - return ( -1, -1, -1 ); - } - return ( int( parts[ 0 ] ), int( parts[ 1 ] ), int( parts[ 2 ] ) ); -#/ -} - -getspawnpoint_random( spawnpoints ) -{ - if ( !isDefined( spawnpoints ) ) - { - return undefined; - } - i = 0; - while ( i < spawnpoints.size ) - { - j = randomint( spawnpoints.size ); - spawnpoint = spawnpoints[ i ]; - spawnpoints[ i ] = spawnpoints[ j ]; - spawnpoints[ j ] = spawnpoint; - i++; - } - return getspawnpoint_final( spawnpoints, 0 ); -} - -getallotherplayers() -{ - aliveplayers = []; - i = 0; - while ( i < level.players.size ) - { - if ( !isDefined( level.players[ i ] ) ) - { - i++; - continue; - } - else player = level.players[ i ]; - if ( player.sessionstate != "playing" || player == self ) - { - i++; - continue; - } - else - { - if ( isDefined( level.customalivecheck ) ) - { - if ( !( [[ level.customalivecheck ]]( player ) ) ) - { - i++; - continue; - } - } - else - { - aliveplayers[ aliveplayers.size ] = player; - } - } - i++; - } - return aliveplayers; -} - -getallalliedandenemyplayers( obj ) -{ - if ( level.teambased ) - { -/# - assert( isDefined( level.teams[ self.team ] ) ); -#/ - obj.allies = []; - obj.enemies = []; - i = 0; - while ( i < level.players.size ) - { - if ( !isDefined( level.players[ i ] ) ) - { - i++; - continue; - } - else player = level.players[ i ]; - if ( player.sessionstate != "playing" || player == self ) - { - i++; - continue; - } - else - { - if ( isDefined( level.customalivecheck ) ) - { - if ( !( [[ level.customalivecheck ]]( player ) ) ) - { - i++; - continue; - } - } - else if ( player.team == self.team ) - { - obj.allies[ obj.allies.size ] = player; - i++; - continue; - } - else - { - obj.enemies[ obj.enemies.size ] = player; - } - } - i++; - } - } - else obj.allies = []; - obj.enemies = level.activeplayers; -} - -initweights( spawnpoints ) -{ - i = 0; - while ( i < spawnpoints.size ) - { - spawnpoints[ i ].weight = 0; - i++; - } -/# - while ( level.storespawndata || level.debugspawning ) - { - i = 0; - while ( i < spawnpoints.size ) - { - spawnpoints[ i ].spawndata = []; - spawnpoints[ i ].sightchecks = []; - i++; -#/ - } - } -} - -spawnpointupdate_zm( spawnpoint ) -{ - _a906 = level.teams; - _k906 = getFirstArrayKey( _a906 ); - while ( isDefined( _k906 ) ) - { - team = _a906[ _k906 ]; - spawnpoint.distsum[ team ] = 0; - spawnpoint.enemydistsum[ team ] = 0; - _k906 = getNextArrayKey( _a906, _k906 ); - } - players = get_players(); - spawnpoint.numplayersatlastupdate = players.size; - _a913 = players; - _k913 = getFirstArrayKey( _a913 ); - while ( isDefined( _k913 ) ) - { - player = _a913[ _k913 ]; - if ( !isDefined( player ) ) - { - } - else if ( player.sessionstate != "playing" ) - { - } - else if ( isDefined( level.customalivecheck ) ) - { - if ( !( [[ level.customalivecheck ]]( player ) ) ) - { - } - } - else - { - dist = distance( spawnpoint.origin, player.origin ); - spawnpoint.distsum[ player.team ] += dist; - _a924 = level.teams; - _k924 = getFirstArrayKey( _a924 ); - while ( isDefined( _k924 ) ) - { - team = _a924[ _k924 ]; - if ( team != player.team ) - { - spawnpoint.enemydistsum[ team ] += dist; - } - _k924 = getNextArrayKey( _a924, _k924 ); - } - } - _k913 = getNextArrayKey( _a913, _k913 ); - } -} - -getspawnpoint_nearteam( spawnpoints, favoredspawnpoints, forceallydistanceweight, forceenemydistanceweight ) -{ - if ( !isDefined( spawnpoints ) ) - { - return undefined; - } -/# - if ( getDvar( "scr_spawn_randomly" ) == "" ) - { - setdvar( "scr_spawn_randomly", "0" ); - } - if ( getDvar( "scr_spawn_randomly" ) == "1" ) - { - return getspawnpoint_random( spawnpoints ); -#/ - } - if ( getDvarInt( "scr_spawnsimple" ) > 0 ) - { - return getspawnpoint_random( spawnpoints ); - } - spawnlogic_begin(); - k_favored_spawn_point_bonus = 25000; - initweights( spawnpoints ); - obj = spawnstruct(); - getallalliedandenemyplayers( obj ); - numplayers = obj.allies.size + obj.enemies.size; - allieddistanceweight = 2; - if ( isDefined( forceallydistanceweight ) ) - { - allieddistanceweight = forceallydistanceweight; - } - enemydistanceweight = 1; - if ( isDefined( forceenemydistanceweight ) ) - { - enemydistanceweight = forceenemydistanceweight; - } - myteam = self.team; - i = 0; - while ( i < spawnpoints.size ) - { - spawnpoint = spawnpoints[ i ]; - spawnpointupdate_zm( spawnpoint ); - if ( !isDefined( spawnpoint.numplayersatlastupdate ) ) - { - spawnpoint.numplayersatlastupdate = 0; - } - if ( spawnpoint.numplayersatlastupdate > 0 ) - { - allydistsum = spawnpoint.distsum[ myteam ]; - enemydistsum = spawnpoint.enemydistsum[ myteam ]; - spawnpoint.weight = ( ( enemydistanceweight * enemydistsum ) - ( allieddistanceweight * allydistsum ) ) / spawnpoint.numplayersatlastupdate; -/# - if ( level.storespawndata || level.debugspawning ) - { - spawnpoint.spawndata[ spawnpoint.spawndata.size ] = "Base weight: " + int( spawnpoint.weight ) + " = (" + enemydistanceweight + "*" + int( enemydistsum ) + " - " + allieddistanceweight + "*" + int( allydistsum ) + ") / " + spawnpoint.numplayersatlastupdate; -#/ - } - i++; - continue; - } - else - { - spawnpoint.weight = 0; -/# - if ( level.storespawndata || level.debugspawning ) - { - spawnpoint.spawndata[ spawnpoint.spawndata.size ] = "Base weight: 0"; -#/ - } - } - i++; - } - while ( isDefined( favoredspawnpoints ) ) - { - i = 0; - while ( i < favoredspawnpoints.size ) - { - if ( isDefined( favoredspawnpoints[ i ].weight ) ) - { - favoredspawnpoints[ i ].weight += k_favored_spawn_point_bonus; - i++; - continue; - } - else - { - favoredspawnpoints[ i ].weight = k_favored_spawn_point_bonus; - } - i++; - } - } - avoidsamespawn( spawnpoints ); - avoidspawnreuse( spawnpoints, 1 ); - avoidweapondamage( spawnpoints ); - avoidvisibleenemies( spawnpoints, 1 ); - result = getspawnpoint_final( spawnpoints ); -/# - if ( getDvar( "scr_spawn_showbad" ) == "" ) - { - setdvar( "scr_spawn_showbad", "0" ); - } - if ( getDvar( "scr_spawn_showbad" ) == "1" ) - { - checkbad( result ); -#/ - } - return result; -} - -getspawnpoint_dm( spawnpoints ) -{ - if ( !isDefined( spawnpoints ) ) - { - return undefined; - } - spawnlogic_begin(); - initweights( spawnpoints ); - aliveplayers = getallotherplayers(); - idealdist = 1600; - baddist = 1200; - while ( aliveplayers.size > 0 ) - { - i = 0; - while ( i < spawnpoints.size ) - { - totaldistfromideal = 0; - nearbybadamount = 0; - j = 0; - while ( j < aliveplayers.size ) - { - dist = distance( spawnpoints[ i ].origin, aliveplayers[ j ].origin ); - if ( dist < baddist ) - { - nearbybadamount += ( baddist - dist ) / baddist; - } - distfromideal = abs( dist - idealdist ); - totaldistfromideal += distfromideal; - j++; - } - avgdistfromideal = totaldistfromideal / aliveplayers.size; - welldistancedamount = ( idealdist - avgdistfromideal ) / idealdist; - spawnpoints[ i ].weight = ( welldistancedamount - ( nearbybadamount * 2 ) ) + randomfloat( 0,2 ); - i++; - } - } - avoidsamespawn( spawnpoints ); - avoidspawnreuse( spawnpoints, 0 ); - avoidweapondamage( spawnpoints ); - avoidvisibleenemies( spawnpoints, 0 ); - return getspawnpoint_final( spawnpoints ); -} - -getspawnpoint_turned( spawnpoints, idealdist, baddist, idealdistteam, baddistteam ) -{ - if ( !isDefined( spawnpoints ) ) - { - return undefined; - } - spawnlogic_begin(); - initweights( spawnpoints ); - aliveplayers = getallotherplayers(); - if ( !isDefined( idealdist ) ) - { - idealdist = 1600; - } - if ( !isDefined( idealdistteam ) ) - { - idealdistteam = 1200; - } - if ( !isDefined( baddist ) ) - { - baddist = 1200; - } - if ( !isDefined( baddistteam ) ) - { - baddistteam = 600; - } - myteam = self.team; - while ( aliveplayers.size > 0 ) - { - i = 0; - while ( i < spawnpoints.size ) - { - totaldistfromideal = 0; - nearbybadamount = 0; - j = 0; - while ( j < aliveplayers.size ) - { - dist = distance( spawnpoints[ i ].origin, aliveplayers[ j ].origin ); - distfromideal = 0; - if ( aliveplayers[ j ].team == myteam ) - { - if ( dist < baddistteam ) - { - nearbybadamount += ( baddistteam - dist ) / baddistteam; - } - distfromideal = abs( dist - idealdistteam ); - } - else - { - if ( dist < baddist ) - { - nearbybadamount += ( baddist - dist ) / baddist; - } - distfromideal = abs( dist - idealdist ); - } - totaldistfromideal += distfromideal; - j++; - } - avgdistfromideal = totaldistfromideal / aliveplayers.size; - welldistancedamount = ( idealdist - avgdistfromideal ) / idealdist; - spawnpoints[ i ].weight = ( welldistancedamount - ( nearbybadamount * 2 ) ) + randomfloat( 0,2 ); - i++; - } - } - avoidsamespawn( spawnpoints ); - avoidspawnreuse( spawnpoints, 0 ); - avoidweapondamage( spawnpoints ); - avoidvisibleenemies( spawnpoints, 0 ); - return getspawnpoint_final( spawnpoints ); -} - -spawnlogic_begin() -{ -/# - level.storespawndata = getDvarInt( "scr_recordspawndata" ); - level.debugspawning = getDvarInt( "scr_spawnpointdebug" ) > 0; -#/ -} - -init() -{ -/# - if ( getDvar( "scr_recordspawndata" ) == "" ) - { - setdvar( "scr_recordspawndata", 0 ); - } - level.storespawndata = getDvarInt( "scr_recordspawndata" ); - if ( getDvar( "scr_killbots" ) == "" ) - { - setdvar( "scr_killbots", 0 ); - } - if ( getDvar( "scr_killbottimer" ) == "" ) - { - setdvar( "scr_killbottimer", 0,25 ); - } - thread loopbotspawns(); -#/ - level.spawnlogic_deaths = []; - level.spawnlogic_spawnkills = []; - level.players = []; - level.grenades = []; - level.pipebombs = []; - level.spawnmins = ( -1, -1, -1 ); - level.spawnmaxs = ( -1, -1, -1 ); - level.spawnminsmaxsprimed = 0; - while ( isDefined( level.safespawns ) ) - { - i = 0; - while ( i < level.safespawns.size ) - { - level.safespawns[ i ] spawnpointinit(); - i++; - } - } - if ( getDvar( "scr_spawn_enemyavoiddist" ) == "" ) - { - setdvar( "scr_spawn_enemyavoiddist", "800" ); - } - if ( getDvar( "scr_spawn_enemyavoidweight" ) == "" ) - { - setdvar( "scr_spawn_enemyavoidweight", "0" ); - } -/# - if ( getDvar( "scr_spawnsimple" ) == "" ) - { - setdvar( "scr_spawnsimple", "0" ); - } - if ( getDvar( "scr_spawnpointdebug" ) == "" ) - { - setdvar( "scr_spawnpointdebug", "0" ); - } - if ( getDvarInt( "scr_spawnpointdebug" ) > 0 ) - { - thread showdeathsdebug(); - thread updatedeathinfodebug(); - thread profiledebug(); - } - if ( level.storespawndata ) - { - thread allowspawndatareading(); - } - if ( getDvar( "scr_spawnprofile" ) == "" ) - { - setdvar( "scr_spawnprofile", "0" ); - } - thread watchspawnprofile(); - thread spawngraphcheck(); -#/ -} - -watchspawnprofile() -{ -/# - while ( 1 ) - { - while ( 1 ) - { - if ( getDvarInt( "scr_spawnprofile" ) > 0 ) - { - break; - } - else - { - wait 0,05; - } - } - thread spawnprofile(); - while ( 1 ) - { - if ( getDvarInt( "scr_spawnprofile" ) <= 0 ) - { - break; - } - else - { - wait 0,05; - } - } - level notify( "stop_spawn_profile" ); -#/ - } -} - -spawnprofile() -{ -/# - level endon( "stop_spawn_profile" ); - while ( 1 ) - { - if ( level.players.size > 0 && level.spawnpoints.size > 0 ) - { - playernum = randomint( level.players.size ); - player = level.players[ playernum ]; - attempt = 1; - while ( !isDefined( player ) && attempt < level.players.size ) - { - playernum = ( playernum + 1 ) % level.players.size; - attempt++; - player = level.players[ playernum ]; - } - player getspawnpoint_nearteam( level.spawnpoints ); - } - wait 0,05; -#/ - } -} - -spawngraphcheck() -{ -/# - while ( 1 ) - { - while ( getDvarInt( #"C25B6B47" ) < 1 ) - { - wait 3; - } - thread spawngraph(); - return; -#/ - } -} - -spawngraph() -{ -/# - w = 20; - h = 20; - weightscale = 0,1; - fakespawnpoints = []; - corners = getentarray( "minimap_corner", "targetname" ); - if ( corners.size != 2 ) - { - println( "^1 can't spawn graph: no minimap corners" ); - return; - } - min = corners[ 0 ].origin; - max = corners[ 0 ].origin; - if ( corners[ 1 ].origin[ 0 ] > max[ 0 ] ) - { - max = ( corners[ 1 ].origin[ 0 ], max[ 1 ], max[ 2 ] ); - } - else - { - min = ( corners[ 1 ].origin[ 0 ], min[ 1 ], min[ 2 ] ); - } - if ( corners[ 1 ].origin[ 1 ] > max[ 1 ] ) - { - max = ( max[ 0 ], corners[ 1 ].origin[ 1 ], max[ 2 ] ); - } - else - { - min = ( min[ 0 ], corners[ 1 ].origin[ 1 ], min[ 2 ] ); - } - i = 0; - y = 0; - while ( y < h ) - { - yamnt = y / ( h - 1 ); - x = 0; - while ( x < w ) - { - xamnt = x / ( w - 1 ); - fakespawnpoints[ i ] = spawnstruct(); - fakespawnpoints[ i ].origin = ( ( min[ 0 ] * xamnt ) + ( max[ 0 ] * ( 1 - xamnt ) ), ( min[ 1 ] * yamnt ) + ( max[ 1 ] * ( 1 - yamnt ) ), min[ 2 ] ); - fakespawnpoints[ i ].angles = ( -1, -1, -1 ); - fakespawnpoints[ i ].forward = anglesToForward( fakespawnpoints[ i ].angles ); - fakespawnpoints[ i ].sighttracepoint = fakespawnpoints[ i ].origin; - i++; - x++; - } - y++; - } - didweights = 0; - while ( 1 ) - { - spawni = 0; - numiters = 5; - i = 0; - while ( i < numiters ) - { - if ( level.players.size && isDefined( level.players[ 0 ].team ) || level.players[ 0 ].team == "spectator" && !isDefined( level.players[ 0 ].class ) ) - { - break; - } - else - { - endspawni = spawni + ( fakespawnpoints.size / numiters ); - if ( i == ( numiters - 1 ) ) - { - endspawni = fakespawnpoints.size; - } - while ( spawni < endspawni ) - { - spawnpointupdate( fakespawnpoints[ spawni ] ); - spawni++; - } - if ( didweights ) - { - level.players[ 0 ] drawspawngraph( fakespawnpoints, w, h, weightscale ); - } - wait 0,05; - i++; - } - } - while ( level.players.size && isDefined( level.players[ 0 ].team ) || level.players[ 0 ].team == "spectator" && !isDefined( level.players[ 0 ].class ) ) - { - wait 1; - } - level.players[ 0 ] getspawnpoint_nearteam( fakespawnpoints ); - i = 0; - while ( i < fakespawnpoints.size ) - { - setupspawngraphpoint( fakespawnpoints[ i ], weightscale ); - i++; - } - didweights = 1; - level.players[ 0 ] drawspawngraph( fakespawnpoints, w, h, weightscale ); - wait 0,05; -#/ - } -} - -drawspawngraph( fakespawnpoints, w, h, weightscale ) -{ -/# - i = 0; - y = 0; - while ( y < h ) - { - yamnt = y / ( h - 1 ); - x = 0; - while ( x < w ) - { - xamnt = x / ( w - 1 ); - if ( y > 0 ) - { - spawngraphline( fakespawnpoints[ i ], fakespawnpoints[ i - w ], weightscale ); - } - if ( x > 0 ) - { - spawngraphline( fakespawnpoints[ i ], fakespawnpoints[ i - 1 ], weightscale ); - } - i++; - x++; - } - y++; -#/ - } -} - -setupspawngraphpoint( s1, weightscale ) -{ -/# - s1.visible = 1; - if ( s1.weight < ( -1000 / weightscale ) ) - { - s1.visible = 0; -#/ - } -} - -spawngraphline( s1, s2, weightscale ) -{ -/# - if ( !s1.visible || !s2.visible ) - { - return; - } - p1 = s1.origin + ( 0, 0, ( s1.weight * weightscale ) + 100 ); - p2 = s2.origin + ( 0, 0, ( s2.weight * weightscale ) + 100 ); - line( p1, p2, ( -1, -1, -1 ) ); -#/ -} - -loopbotspawns() -{ -/# - while ( 1 ) - { - while ( getDvarInt( "scr_killbots" ) < 1 ) - { - wait 3; - } - while ( !isDefined( level.players ) ) - { - wait 0,05; - } - bots = []; - i = 0; - while ( i < level.players.size ) - { - if ( !isDefined( level.players[ i ] ) ) - { - i++; - continue; - } - else - { - if ( level.players[ i ].sessionstate == "playing" && issubstr( level.players[ i ].name, "bot" ) ) - { - bots[ bots.size ] = level.players[ i ]; - } - } - i++; - } - while ( bots.size > 0 ) - { - if ( getDvarInt( "scr_killbots" ) == 1 ) - { - killer = bots[ randomint( bots.size ) ]; - victim = bots[ randomint( bots.size ) ]; - victim thread [[ level.callbackplayerdamage ]]( killer, killer, 1000, 0, "MOD_RIFLE_BULLET", "none", ( -1, -1, -1 ), ( -1, -1, -1 ), "none", 0, 0 ); - break; - } - else - { - numkills = getDvarInt( "scr_killbots" ); - lastvictim = undefined; - index = 0; - while ( index < numkills ) - { - killer = bots[ randomint( bots.size ) ]; - victim = bots[ randomint( bots.size ) ]; - while ( isDefined( lastvictim ) && victim == lastvictim ) - { - victim = bots[ randomint( bots.size ) ]; - } - victim thread [[ level.callbackplayerdamage ]]( killer, killer, 1000, 0, "MOD_RIFLE_BULLET", "none", ( -1, -1, -1 ), ( -1, -1, -1 ), "none", 0, 0 ); - lastvictim = victim; - index++; - } - } - } - if ( getDvar( "scr_killbottimer" ) != "" ) - { - wait getDvarFloat( "scr_killbottimer" ); - continue; - } - else - { - wait 0,05; - } -#/ - } -} - -allowspawndatareading() -{ -/# - setdvar( "scr_showspawnid", "" ); - prevval = getDvar( "scr_showspawnid" ); - prevrelval = getDvar( "scr_spawnidcycle" ); - readthistime = 0; - while ( 1 ) - { - val = getDvar( "scr_showspawnid" ); - relval = undefined; - while ( !isDefined( val ) || val == prevval ) - { - relval = getDvar( "scr_spawnidcycle" ); - if ( isDefined( relval ) && relval != "" ) - { - setdvar( "scr_spawnidcycle", "" ); - break; - } - else - { - wait 0,5; - } - } - prevval = val; - readthistime = 0; - readspawndata( val, relval ); - if ( !isDefined( level.curspawndata ) ) - { - println( "No spawn data to draw." ); - } - else - { - println( "Drawing spawn ID " + level.curspawndata.id ); - } - thread drawspawndata(); -#/ - } -} - -showdeathsdebug() -{ -/# - while ( 1 ) - { - while ( getDvar( "scr_spawnpointdebug" ) == "0" ) - { - wait 3; - } - time = getTime(); - i = 0; - while ( i < level.spawnlogic_deaths.size ) - { - if ( isDefined( level.spawnlogic_deaths[ i ].los ) ) - { - line( level.spawnlogic_deaths[ i ].org, level.spawnlogic_deaths[ i ].killorg, ( -1, -1, -1 ) ); - } - else - { - line( level.spawnlogic_deaths[ i ].org, level.spawnlogic_deaths[ i ].killorg, ( -1, -1, -1 ) ); - } - killer = level.spawnlogic_deaths[ i ].killer; - if ( isDefined( killer ) && isalive( killer ) ) - { - line( level.spawnlogic_deaths[ i ].killorg, killer.origin, ( 0,4, 0,4, 0,8 ) ); - } - i++; - } - p = 0; - while ( p < level.players.size ) - { - if ( !isDefined( level.players[ p ] ) ) - { - p++; - continue; - } - else - { - if ( isDefined( level.players[ p ].spawnlogic_killdist ) ) - { - print3d( level.players[ p ].origin + vectorScale( ( -1, -1, -1 ), 64 ), level.players[ p ].spawnlogic_killdist, ( -1, -1, -1 ) ); - } - } - p++; - } - oldspawnkills = level.spawnlogic_spawnkills; - level.spawnlogic_spawnkills = []; - i = 0; - while ( i < oldspawnkills.size ) - { - spawnkill = oldspawnkills[ i ]; - if ( spawnkill.dierwasspawner ) - { - line( spawnkill.spawnpointorigin, spawnkill.dierorigin, ( 0,4, 0,5, 0,4 ) ); - line( spawnkill.dierorigin, spawnkill.killerorigin, ( 0, 1, 1 ) ); - print3d( spawnkill.dierorigin + vectorScale( ( -1, -1, -1 ), 32 ), "SPAWNKILLED!", ( 0, 1, 1 ) ); - } - else - { - line( spawnkill.spawnpointorigin, spawnkill.killerorigin, ( 0,4, 0,5, 0,4 ) ); - line( spawnkill.killerorigin, spawnkill.dierorigin, ( 0, 1, 1 ) ); - print3d( spawnkill.dierorigin + vectorScale( ( -1, -1, -1 ), 32 ), "SPAWNDIED!", ( 0, 1, 1 ) ); - } - if ( ( time - spawnkill.time ) < 60000 ) - { - level.spawnlogic_spawnkills[ level.spawnlogic_spawnkills.size ] = oldspawnkills[ i ]; - } - i++; - } - wait 0,05; -#/ - } -} - -updatedeathinfodebug() -{ - while ( 1 ) - { - while ( getDvar( "scr_spawnpointdebug" ) == "0" ) - { - wait 3; - } - updatedeathinfo(); - wait 3; - } -} - -spawnweightdebug( spawnpoints ) -{ - level notify( "stop_spawn_weight_debug" ); - level endon( "stop_spawn_weight_debug" ); -/# - while ( 1 ) - { - while ( getDvar( "scr_spawnpointdebug" ) == "0" ) - { - wait 3; - } - textoffset = vectorScale( ( -1, -1, -1 ), 12 ); - i = 0; - while ( i < spawnpoints.size ) - { - amnt = 1 * ( 1 - ( spawnpoints[ i ].weight / -100000 ) ); - if ( amnt < 0 ) - { - amnt = 0; - } - if ( amnt > 1 ) - { - amnt = 1; - } - orig = spawnpoints[ i ].origin + vectorScale( ( -1, -1, -1 ), 80 ); - print3d( orig, int( spawnpoints[ i ].weight ), ( 1, amnt, 0,5 ) ); - orig += textoffset; - while ( isDefined( spawnpoints[ i ].spawndata ) ) - { - j = 0; - while ( j < spawnpoints[ i ].spawndata.size ) - { - print3d( orig, spawnpoints[ i ].spawndata[ j ], vectorScale( ( -1, -1, -1 ), 0,5 ) ); - orig += textoffset; - j++; - } - } - while ( isDefined( spawnpoints[ i ].sightchecks ) ) - { - j = 0; - while ( j < spawnpoints[ i ].sightchecks.size ) - { - if ( spawnpoints[ i ].sightchecks[ j ].penalty == 0 ) - { - j++; - continue; - } - else - { - print3d( orig, "Sight to enemy: -" + spawnpoints[ i ].sightchecks[ j ].penalty, vectorScale( ( -1, -1, -1 ), 0,5 ) ); - orig += textoffset; - } - j++; - } - } - i++; - } - wait 0,05; -#/ - } -} - -profiledebug() -{ - while ( 1 ) - { - while ( getDvar( #"6A99E750" ) != "1" ) - { - wait 3; - } - i = 0; - while ( i < level.spawnpoints.size ) - { - level.spawnpoints[ i ].weight = randomint( 10000 ); - i++; - } - if ( level.players.size > 0 ) - { - level.players[ randomint( level.players.size ) ] getspawnpoint_nearteam( level.spawnpoints ); - } - wait 0,05; - } -} - -debugnearbyplayers( players, origin ) -{ -/# - if ( getDvar( "scr_spawnpointdebug" ) == "0" ) - { - return; - } - starttime = getTime(); - while ( 1 ) - { - i = 0; - while ( i < players.size ) - { - line( players[ i ].origin, origin, ( 0,5, 1, 0,5 ) ); - i++; - } - if ( ( getTime() - starttime ) > 5000 ) - { - return; - } - wait 0,05; -#/ - } -} - -deathoccured( dier, killer ) -{ -} - -checkforsimilardeaths( deathinfo ) -{ - i = 0; - while ( i < level.spawnlogic_deaths.size ) - { - if ( level.spawnlogic_deaths[ i ].killer == deathinfo.killer ) - { - dist = distance( level.spawnlogic_deaths[ i ].org, deathinfo.org ); - if ( dist > 200 ) - { - i++; - continue; - } - else dist = distance( level.spawnlogic_deaths[ i ].killorg, deathinfo.killorg ); - if ( dist > 200 ) - { - i++; - continue; - } - else - { - level.spawnlogic_deaths[ i ].remove = 1; - } - } - i++; - } -} - -updatedeathinfo() -{ - time = getTime(); - i = 0; - while ( i < level.spawnlogic_deaths.size ) - { - deathinfo = level.spawnlogic_deaths[ i ]; - if ( ( time - deathinfo.time ) > 90000 && isDefined( deathinfo.killer ) && isalive( deathinfo.killer ) || !isDefined( level.teams[ deathinfo.killer.team ] ) && distance( deathinfo.killer.origin, deathinfo.killorg ) > 400 ) - { - level.spawnlogic_deaths[ i ].remove = 1; - } - i++; - } - oldarray = level.spawnlogic_deaths; - level.spawnlogic_deaths = []; - start = 0; - if ( ( oldarray.size - 1024 ) > 0 ) - { - start = oldarray.size - 1024; - } - i = start; - while ( i < oldarray.size ) - { - if ( !isDefined( oldarray[ i ].remove ) ) - { - level.spawnlogic_deaths[ level.spawnlogic_deaths.size ] = oldarray[ i ]; - } - i++; - } -} - -ispointvulnerable( playerorigin ) -{ - pos = self.origin + level.bettymodelcenteroffset; - playerpos = playerorigin + vectorScale( ( -1, -1, -1 ), 32 ); - distsqrd = distancesquared( pos, playerpos ); - forward = anglesToForward( self.angles ); - if ( distsqrd < ( level.bettydetectionradius * level.bettydetectionradius ) ) - { - playerdir = vectornormalize( playerpos - pos ); - angle = acos( vectordot( playerdir, forward ) ); - if ( angle < level.bettydetectionconeangle ) - { - return 1; - } - } - return 0; -} - -avoidweapondamage( spawnpoints ) -{ - if ( getDvar( #"0FB71FB7" ) == "0" ) - { - return; - } - weapondamagepenalty = 100000; - if ( getDvar( #"76B8F046" ) != "" && getDvar( #"76B8F046" ) != "0" ) - { - weapondamagepenalty = getDvarFloat( #"76B8F046" ); - } - mingrenadedistsquared = 62500; - i = 0; - while ( i < spawnpoints.size ) - { - j = 0; - while ( j < level.grenades.size ) - { - if ( !isDefined( level.grenades[ j ] ) ) - { - j++; - continue; - } - else - { - if ( distancesquared( spawnpoints[ i ].origin, level.grenades[ j ].origin ) < mingrenadedistsquared ) - { - spawnpoints[ i ].weight -= weapondamagepenalty; -/# - if ( level.storespawndata || level.debugspawning ) - { - spawnpoints[ i ].spawndata[ spawnpoints[ i ].spawndata.size ] = "Was near grenade: -" + int( weapondamagepenalty ); -#/ - } - } - } - j++; - } - i++; - } -} - -spawnperframeupdate() -{ - spawnpointindex = 0; - while ( 1 ) - { - wait 0,05; - if ( !isDefined( level.spawnpoints ) ) - { - return; - } - spawnpointindex = ( spawnpointindex + 1 ) % level.spawnpoints.size; - spawnpoint = level.spawnpoints[ spawnpointindex ]; - spawnpointupdate( spawnpoint ); - } -} - -getnonteamsum( skip_team, sums ) -{ - value = 0; - _a1986 = level.teams; - _k1986 = getFirstArrayKey( _a1986 ); - while ( isDefined( _k1986 ) ) - { - team = _a1986[ _k1986 ]; - if ( team == skip_team ) - { - } - else - { - value += sums[ team ]; - } - _k1986 = getNextArrayKey( _a1986, _k1986 ); - } - return value; -} - -getnonteammindist( skip_team, mindists ) -{ - dist = 9999999; - _a2000 = level.teams; - _k2000 = getFirstArrayKey( _a2000 ); - while ( isDefined( _k2000 ) ) - { - team = _a2000[ _k2000 ]; - if ( team == skip_team ) - { - } - else - { - if ( dist > mindists[ team ] ) - { - dist = mindists[ team ]; - } - } - _k2000 = getNextArrayKey( _a2000, _k2000 ); - } - return dist; -} - -spawnpointupdate( spawnpoint ) -{ - if ( level.teambased ) - { - sights = []; - _a2018 = level.teams; - _k2018 = getFirstArrayKey( _a2018 ); - while ( isDefined( _k2018 ) ) - { - team = _a2018[ _k2018 ]; - spawnpoint.enemysights[ team ] = 0; - sights[ team ] = 0; - spawnpoint.nearbyplayers[ team ] = []; - _k2018 = getNextArrayKey( _a2018, _k2018 ); - } - } - else spawnpoint.enemysights = 0; - spawnpoint.nearbyplayers[ "all" ] = []; - spawnpointdir = spawnpoint.forward; - debug = 0; -/# - debug = getDvarInt( "scr_spawnpointdebug" ) > 0; -#/ - mindist = []; - distsum = []; - if ( !level.teambased ) - { - mindist[ "all" ] = 9999999; - } - _a2047 = level.teams; - _k2047 = getFirstArrayKey( _a2047 ); - while ( isDefined( _k2047 ) ) - { - team = _a2047[ _k2047 ]; - spawnpoint.distsum[ team ] = 0; - spawnpoint.enemydistsum[ team ] = 0; - spawnpoint.minenemydist[ team ] = 9999999; - mindist[ team ] = 9999999; - _k2047 = getNextArrayKey( _a2047, _k2047 ); - } - spawnpoint.numplayersatlastupdate = 0; - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( player.sessionstate != "playing" ) - { - i++; - continue; - } - else diff = player.origin - spawnpoint.origin; - diff = ( diff[ 0 ], diff[ 1 ], 0 ); - dist = length( diff ); - team = "all"; - if ( level.teambased ) - { - team = player.team; - } - if ( dist < 1024 ) - { - spawnpoint.nearbyplayers[ team ][ spawnpoint.nearbyplayers[ team ].size ] = player; - } - if ( dist < mindist[ team ] ) - { - mindist[ team ] = dist; - } - distsum[ team ] += dist; - spawnpoint.numplayersatlastupdate++; - pdir = anglesToForward( player.angles ); - if ( vectordot( spawnpointdir, diff ) < 0 && vectordot( pdir, diff ) > 0 ) - { - i++; - continue; - } - else - { - losexists = bullettracepassed( player.origin + vectorScale( ( -1, -1, -1 ), 50 ), spawnpoint.sighttracepoint, 0, undefined ); - spawnpoint.lastsighttracetime = getTime(); - if ( losexists ) - { - if ( level.teambased ) - { - sights[ player.team ]++; - } - else - { - spawnpoint.enemysights++; - } -/# - if ( debug ) - { - line( player.origin + vectorScale( ( -1, -1, -1 ), 50 ), spawnpoint.sighttracepoint, ( 0,5, 1, 0,5 ) ); -#/ - } - } - } - i++; - } - if ( level.teambased ) - { - _a2128 = level.teams; - _k2128 = getFirstArrayKey( _a2128 ); - while ( isDefined( _k2128 ) ) - { - team = _a2128[ _k2128 ]; - spawnpoint.enemysights[ team ] = getnonteamsum( team, sights ); - spawnpoint.minenemydist[ team ] = getnonteammindist( team, mindist ); - spawnpoint.distsum[ team ] = distsum[ team ]; - spawnpoint.enemydistsum[ team ] = getnonteamsum( team, distsum ); - _k2128 = getNextArrayKey( _a2128, _k2128 ); - } - } - else spawnpoint.distsum[ "all" ] = distsum[ "all" ]; - spawnpoint.enemydistsum[ "all" ] = distsum[ "all" ]; - spawnpoint.minenemydist[ "all" ] = mindist[ "all" ]; -} - -getlospenalty() -{ - if ( getDvar( #"CACDB8AA" ) != "" && getDvar( #"CACDB8AA" ) != "0" ) - { - return getDvarFloat( #"CACDB8AA" ); - } - return 100000; -} - -lastminutesighttraces( spawnpoint ) -{ - if ( !isDefined( spawnpoint.nearbyplayers ) ) - { - return 0; - } - closest = undefined; - closestdistsq = undefined; - secondclosest = undefined; - secondclosestdistsq = undefined; - _a2162 = spawnpoint.nearbyplayers; - _k2162 = getFirstArrayKey( _a2162 ); - while ( isDefined( _k2162 ) ) - { - team = _a2162[ _k2162 ]; - if ( team == self.team ) - { - } - else - { - i = 0; - while ( i < spawnpoint.nearbyplayers[ team ].size ) - { - player = spawnpoint.nearbyplayers[ team ][ i ]; - if ( !isDefined( player ) ) - { - i++; - continue; - } - else if ( player.sessionstate != "playing" ) - { - i++; - continue; - } - else if ( player == self ) - { - i++; - continue; - } - else distsq = distancesquared( spawnpoint.origin, player.origin ); - if ( !isDefined( closest ) || distsq < closestdistsq ) - { - secondclosest = closest; - secondclosestdistsq = closestdistsq; - closest = player; - closestdistsq = distsq; - i++; - continue; - } - else - { - if ( !isDefined( secondclosest ) || distsq < secondclosestdistsq ) - { - secondclosest = player; - secondclosestdistsq = distsq; - } - } - i++; - } - } - _k2162 = getNextArrayKey( _a2162, _k2162 ); - } - if ( isDefined( closest ) ) - { - if ( bullettracepassed( closest.origin + vectorScale( ( -1, -1, -1 ), 50 ), spawnpoint.sighttracepoint, 0, undefined ) ) - { - return 1; - } - } - if ( isDefined( secondclosest ) ) - { - if ( bullettracepassed( secondclosest.origin + vectorScale( ( -1, -1, -1 ), 50 ), spawnpoint.sighttracepoint, 0, undefined ) ) - { - return 1; - } - } - return 0; -} - -avoidvisibleenemies( spawnpoints, teambased ) -{ - if ( getDvar( #"0FB71FB7" ) == "0" ) - { - return; - } - lospenalty = getlospenalty(); - mindistteam = self.team; - if ( teambased ) - { - i = 0; - while ( i < spawnpoints.size ) - { - if ( !isDefined( spawnpoints[ i ].enemysights ) ) - { - i++; - continue; - } - else - { - penalty = lospenalty * spawnpoints[ i ].enemysights[ self.team ]; - spawnpoints[ i ].weight -= penalty; -/# - if ( level.storespawndata || level.debugspawning ) - { - index = spawnpoints[ i ].sightchecks.size; - spawnpoints[ i ].sightchecks[ index ] = spawnstruct(); - spawnpoints[ i ].sightchecks[ index ].penalty = penalty; -#/ - } - } - i++; - } - } - else i = 0; - while ( i < spawnpoints.size ) - { - if ( !isDefined( spawnpoints[ i ].enemysights ) ) - { - i++; - continue; - } - else - { - penalty = lospenalty * spawnpoints[ i ].enemysights; - spawnpoints[ i ].weight -= penalty; -/# - if ( level.storespawndata || level.debugspawning ) - { - index = spawnpoints[ i ].sightchecks.size; - spawnpoints[ i ].sightchecks[ index ] = spawnstruct(); - spawnpoints[ i ].sightchecks[ index ].penalty = penalty; -#/ - } - } - i++; - } - mindistteam = "all"; - avoidweight = getDvarFloat( "scr_spawn_enemyavoidweight" ); - while ( avoidweight != 0 ) - { - nearbyenemyouterrange = getDvarFloat( "scr_spawn_enemyavoiddist" ); - nearbyenemyouterrangesq = nearbyenemyouterrange * nearbyenemyouterrange; - nearbyenemypenalty = 1500 * avoidweight; - nearbyenemyminorpenalty = 800 * avoidweight; - lastattackerorigin = vectorScale( ( -1, -1, -1 ), 99999 ); - lastdeathpos = vectorScale( ( -1, -1, -1 ), 99999 ); - if ( isalive( self.lastattacker ) ) - { - lastattackerorigin = self.lastattacker.origin; - } - if ( isDefined( self.lastdeathpos ) ) - { - lastdeathpos = self.lastdeathpos; - } - i = 0; - while ( i < spawnpoints.size ) - { - mindist = spawnpoints[ i ].minenemydist[ mindistteam ]; - if ( mindist < ( nearbyenemyouterrange * 2 ) ) - { - penalty = nearbyenemyminorpenalty * ( 1 - ( mindist / ( nearbyenemyouterrange * 2 ) ) ); - if ( mindist < nearbyenemyouterrange ) - { - penalty += nearbyenemypenalty * ( 1 - ( mindist / nearbyenemyouterrange ) ); - } - if ( penalty > 0 ) - { - spawnpoints[ i ].weight -= penalty; -/# - if ( level.storespawndata || level.debugspawning ) - { - spawnpoints[ i ].spawndata[ spawnpoints[ i ].spawndata.size ] = "Nearest enemy at " + int( spawnpoints[ i ].minenemydist[ mindistteam ] ) + " units: -" + int( penalty ); -#/ - } - } - } - i++; - } - } -} - -avoidspawnreuse( spawnpoints, teambased ) -{ - if ( getDvar( #"0FB71FB7" ) == "0" ) - { - return; - } - time = getTime(); - maxtime = 10000; - maxdistsq = 1048576; - i = 0; - while ( i < spawnpoints.size ) - { - spawnpoint = spawnpoints[ i ]; - if ( isDefined( spawnpoint.lastspawnedplayer ) || !isDefined( spawnpoint.lastspawntime ) && !isalive( spawnpoint.lastspawnedplayer ) ) - { - i++; - continue; - } - else - { - if ( spawnpoint.lastspawnedplayer == self ) - { - i++; - continue; - } - else if ( teambased && spawnpoint.lastspawnedplayer.team == self.team ) - { - i++; - continue; - } - else - { - timepassed = time - spawnpoint.lastspawntime; - if ( timepassed < maxtime ) - { - distsq = distancesquared( spawnpoint.lastspawnedplayer.origin, spawnpoint.origin ); - if ( distsq < maxdistsq ) - { - worsen = ( 5000 * ( 1 - ( distsq / maxdistsq ) ) ) * ( 1 - ( timepassed / maxtime ) ); - spawnpoint.weight -= worsen; -/# - if ( level.storespawndata || level.debugspawning ) - { - spawnpoint.spawndata[ spawnpoint.spawndata.size ] = "Was recently used: -" + worsen; -#/ - } - } - else - { - spawnpoint.lastspawnedplayer = undefined; - } - i++; - continue; - } - else - { - spawnpoint.lastspawnedplayer = undefined; - } - } - } - i++; - } -} - -avoidsamespawn( spawnpoints ) -{ - if ( getDvar( #"0FB71FB7" ) == "0" ) - { - return; - } - if ( !isDefined( self.lastspawnpoint ) ) - { - return; - } - i = 0; - while ( i < spawnpoints.size ) - { - if ( spawnpoints[ i ] == self.lastspawnpoint ) - { - spawnpoints[ i ].weight -= 50000; -/# - if ( level.storespawndata || level.debugspawning ) - { - spawnpoints[ i ].spawndata[ spawnpoints[ i ].spawndata.size ] = "Was last spawnpoint: -50000"; -#/ - } - return; - } - else - { - i++; - } - } -} - -getrandomintermissionpoint() -{ - spawnpoints = getentarray( "mp_global_intermission", "classname" ); - if ( !spawnpoints.size ) - { - spawnpoints = getentarray( "info_player_start", "classname" ); - } -/# - assert( spawnpoints.size ); -#/ - spawnpoint = maps/mp/gametypes_zm/_spawnlogic::getspawnpoint_random( spawnpoints ); - return spawnpoint; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_spectating.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_spectating.gsc deleted file mode 100644 index 31ce9f4..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_spectating.gsc +++ /dev/null @@ -1,276 +0,0 @@ - -init() -{ - _a3 = level.teams; - _k3 = getFirstArrayKey( _a3 ); - while ( isDefined( _k3 ) ) - { - team = _a3[ _k3 ]; - level.spectateoverride[ team ] = spawnstruct(); - _k3 = getNextArrayKey( _a3, _k3 ); - } - level thread onplayerconnect(); -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread onjoinedteam(); - player thread onjoinedspectators(); - player thread onplayerspawned(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self setspectatepermissions(); - } -} - -onjoinedteam() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "joined_team" ); - self setspectatepermissionsformachine(); - } -} - -onjoinedspectators() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "joined_spectators" ); - self setspectatepermissionsformachine(); - } -} - -updatespectatesettings() -{ - level endon( "game_ended" ); - index = 0; - while ( index < level.players.size ) - { - level.players[ index ] setspectatepermissions(); - index++; - } -} - -getsplitscreenteam() -{ - index = 0; - while ( index < level.players.size ) - { - if ( !isDefined( level.players[ index ] ) ) - { - index++; - continue; - } - else if ( level.players[ index ] == self ) - { - index++; - continue; - } - else if ( !self isplayeronsamemachine( level.players[ index ] ) ) - { - index++; - continue; - } - else - { - team = level.players[ index ].sessionteam; - if ( team != "spectator" ) - { - return team; - } - } - index++; - } - return self.sessionteam; -} - -otherlocalplayerstillalive() -{ - index = 0; - while ( index < level.players.size ) - { - if ( !isDefined( level.players[ index ] ) ) - { - index++; - continue; - } - else if ( level.players[ index ] == self ) - { - index++; - continue; - } - else if ( !self isplayeronsamemachine( level.players[ index ] ) ) - { - index++; - continue; - } - else - { - if ( isalive( level.players[ index ] ) ) - { - return 1; - } - } - index++; - } - return 0; -} - -allowspectateallteams( allow ) -{ - _a114 = level.teams; - _k114 = getFirstArrayKey( _a114 ); - while ( isDefined( _k114 ) ) - { - team = _a114[ _k114 ]; - self allowspectateteam( team, allow ); - _k114 = getNextArrayKey( _a114, _k114 ); - } -} - -allowspectateallteamsexceptteam( skip_team, allow ) -{ - _a122 = level.teams; - _k122 = getFirstArrayKey( _a122 ); - while ( isDefined( _k122 ) ) - { - team = _a122[ _k122 ]; - if ( team == skip_team ) - { - } - else - { - self allowspectateteam( team, allow ); - } - _k122 = getNextArrayKey( _a122, _k122 ); - } -} - -setspectatepermissions() -{ - team = self.sessionteam; - if ( team == "spectator" ) - { - if ( self issplitscreen() && !level.splitscreen ) - { - team = getsplitscreenteam(); - } - if ( team == "spectator" ) - { - self allowspectateallteams( 1 ); - self allowspectateteam( "freelook", 0 ); - self allowspectateteam( "none", 1 ); - self allowspectateteam( "localplayers", 1 ); - return; - } - } - spectatetype = level.spectatetype; - switch( spectatetype ) - { - case 0: - self allowspectateallteams( 0 ); - self allowspectateteam( "freelook", 0 ); - self allowspectateteam( "none", 1 ); - self allowspectateteam( "localplayers", 0 ); - break; - case 3: - if ( self issplitscreen() && self otherlocalplayerstillalive() ) - { - self allowspectateallteams( 0 ); - self allowspectateteam( "none", 0 ); - self allowspectateteam( "freelook", 0 ); - self allowspectateteam( "localplayers", 1 ); - break; - } - else - { - case 1: - if ( !level.teambased ) - { - self allowspectateallteams( 1 ); - self allowspectateteam( "none", 1 ); - self allowspectateteam( "freelook", 0 ); - self allowspectateteam( "localplayers", 1 ); - } - else if ( isDefined( team ) && isDefined( level.teams[ team ] ) ) - { - self allowspectateteam( team, 1 ); - self allowspectateallteamsexceptteam( team, 0 ); - self allowspectateteam( "freelook", 0 ); - self allowspectateteam( "none", 0 ); - self allowspectateteam( "localplayers", 1 ); - } - else - { - self allowspectateallteams( 0 ); - self allowspectateteam( "freelook", 0 ); - self allowspectateteam( "none", 0 ); - self allowspectateteam( "localplayers", 1 ); - } - break; - case 2: - self allowspectateallteams( 1 ); - self allowspectateteam( "freelook", 1 ); - self allowspectateteam( "none", 1 ); - self allowspectateteam( "localplayers", 1 ); - break; - } - } - if ( isDefined( team ) && isDefined( level.teams[ team ] ) ) - { - if ( isDefined( level.spectateoverride[ team ].allowfreespectate ) ) - { - self allowspectateteam( "freelook", 1 ); - } - if ( isDefined( level.spectateoverride[ team ].allowenemyspectate ) ) - { - self allowspectateallteamsexceptteam( team, 1 ); - } - } -} - -setspectatepermissionsformachine() -{ - self setspectatepermissions(); - if ( !self issplitscreen() ) - { - return; - } - index = 0; - while ( index < level.players.size ) - { - if ( !isDefined( level.players[ index ] ) ) - { - index++; - continue; - } - else if ( level.players[ index ] == self ) - { - index++; - continue; - } - else if ( !self isplayeronsamemachine( level.players[ index ] ) ) - { - index++; - continue; - } - else - { - level.players[ index ] setspectatepermissions(); - } - index++; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_tweakables.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_tweakables.gsc deleted file mode 100644 index 4b85e4a..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_tweakables.gsc +++ /dev/null @@ -1,394 +0,0 @@ -#include maps/mp/_utility; - -gettweakabledvarvalue( category, name ) -{ - switch( category ) - { - case "rule": - dvar = level.rules[ name ].dvar; - break; - case "game": - dvar = level.gametweaks[ name ].dvar; - break; - case "team": - dvar = level.teamtweaks[ name ].dvar; - break; - case "player": - dvar = level.playertweaks[ name ].dvar; - break; - case "class": - dvar = level.classtweaks[ name ].dvar; - break; - case "weapon": - dvar = level.weapontweaks[ name ].dvar; - break; - case "killstreak": - dvar = level.hardpointtweaks[ name ].dvar; - break; - case "hud": - dvar = level.hudtweaks[ name ].dvar; - break; - default: - dvar = undefined; - break; - } -/# - assert( isDefined( dvar ) ); -#/ - value = getDvarInt( dvar ); - return value; -} - -gettweakabledvar( category, name ) -{ - switch( category ) - { - case "rule": - value = level.rules[ name ].dvar; - break; - case "game": - value = level.gametweaks[ name ].dvar; - break; - case "team": - value = level.teamtweaks[ name ].dvar; - break; - case "player": - value = level.playertweaks[ name ].dvar; - break; - case "class": - value = level.classtweaks[ name ].dvar; - break; - case "weapon": - value = level.weapontweaks[ name ].dvar; - break; - case "killstreak": - value = level.hardpointtweaks[ name ].dvar; - break; - case "hud": - value = level.hudtweaks[ name ].dvar; - break; - default: - value = undefined; - break; - } -/# - assert( isDefined( value ) ); -#/ - return value; -} - -gettweakablevalue( category, name ) -{ - switch( category ) - { - case "rule": - value = level.rules[ name ].value; - break; - case "game": - value = level.gametweaks[ name ].value; - break; - case "team": - value = level.teamtweaks[ name ].value; - break; - case "player": - value = level.playertweaks[ name ].value; - break; - case "class": - value = level.classtweaks[ name ].value; - break; - case "weapon": - value = level.weapontweaks[ name ].value; - break; - case "killstreak": - value = level.hardpointtweaks[ name ].value; - break; - case "hud": - value = level.hudtweaks[ name ].value; - break; - default: - value = undefined; - break; - } - overridedvar = "scr_" + level.gametype + "_" + category + "_" + name; - if ( getDvar( overridedvar ) != "" ) - { - return getDvarInt( overridedvar ); - } -/# - assert( isDefined( value ) ); -#/ - return value; -} - -gettweakablelastvalue( category, name ) -{ - switch( category ) - { - case "rule": - value = level.rules[ name ].lastvalue; - break; - case "game": - value = level.gametweaks[ name ].lastvalue; - break; - case "team": - value = level.teamtweaks[ name ].lastvalue; - break; - case "player": - value = level.playertweaks[ name ].lastvalue; - break; - case "class": - value = level.classtweaks[ name ].lastvalue; - break; - case "weapon": - value = level.weapontweaks[ name ].lastvalue; - break; - case "killstreak": - value = level.hardpointtweaks[ name ].lastvalue; - break; - case "hud": - value = level.hudtweaks[ name ].lastvalue; - break; - default: - value = undefined; - break; - } -/# - assert( isDefined( value ) ); -#/ - return value; -} - -settweakablevalue( category, name, value ) -{ - switch( category ) - { - case "rule": - dvar = level.rules[ name ].dvar; - break; - case "game": - dvar = level.gametweaks[ name ].dvar; - break; - case "team": - dvar = level.teamtweaks[ name ].dvar; - break; - case "player": - dvar = level.playertweaks[ name ].dvar; - break; - case "class": - dvar = level.classtweaks[ name ].dvar; - break; - case "weapon": - dvar = level.weapontweaks[ name ].dvar; - break; - case "killstreak": - dvar = level.hardpointtweaks[ name ].dvar; - break; - case "hud": - dvar = level.hudtweaks[ name ].dvar; - break; - default: - dvar = undefined; - break; - } - setdvar( dvar, value ); -} - -settweakablelastvalue( category, name, value ) -{ - switch( category ) - { - case "rule": - level.rules[ name ].lastvalue = value; - break; - case "game": - level.gametweaks[ name ].lastvalue = value; - break; - case "team": - level.teamtweaks[ name ].lastvalue = value; - break; - case "player": - level.playertweaks[ name ].lastvalue = value; - break; - case "class": - level.classtweaks[ name ].lastvalue = value; - break; - case "weapon": - level.weapontweaks[ name ].lastvalue = value; - break; - case "killstreak": - level.hardpointtweaks[ name ].lastvalue = value; - break; - case "hud": - level.hudtweaks[ name ].lastvalue = value; - break; - default: - } - } -} - -registertweakable( category, name, dvar, value ) -{ - if ( isstring( value ) ) - { - if ( getDvar( dvar ) == "" ) - { - setdvar( dvar, value ); - } - else - { - value = getDvar( dvar ); - } - } - else if ( getDvar( dvar ) == "" ) - { - setdvar( dvar, value ); - } - else - { - value = getDvarInt( dvar ); - } - switch( category ) - { - case "rule": - if ( !isDefined( level.rules[ name ] ) ) - { - level.rules[ name ] = spawnstruct(); - } - level.rules[ name ].value = value; - level.rules[ name ].lastvalue = value; - level.rules[ name ].dvar = dvar; - break; - case "game": - if ( !isDefined( level.gametweaks[ name ] ) ) - { - level.gametweaks[ name ] = spawnstruct(); - } - level.gametweaks[ name ].value = value; - level.gametweaks[ name ].lastvalue = value; - level.gametweaks[ name ].dvar = dvar; - break; - case "team": - if ( !isDefined( level.teamtweaks[ name ] ) ) - { - level.teamtweaks[ name ] = spawnstruct(); - } - level.teamtweaks[ name ].value = value; - level.teamtweaks[ name ].lastvalue = value; - level.teamtweaks[ name ].dvar = dvar; - break; - case "player": - if ( !isDefined( level.playertweaks[ name ] ) ) - { - level.playertweaks[ name ] = spawnstruct(); - } - level.playertweaks[ name ].value = value; - level.playertweaks[ name ].lastvalue = value; - level.playertweaks[ name ].dvar = dvar; - break; - case "class": - if ( !isDefined( level.classtweaks[ name ] ) ) - { - level.classtweaks[ name ] = spawnstruct(); - } - level.classtweaks[ name ].value = value; - level.classtweaks[ name ].lastvalue = value; - level.classtweaks[ name ].dvar = dvar; - break; - case "weapon": - if ( !isDefined( level.weapontweaks[ name ] ) ) - { - level.weapontweaks[ name ] = spawnstruct(); - } - level.weapontweaks[ name ].value = value; - level.weapontweaks[ name ].lastvalue = value; - level.weapontweaks[ name ].dvar = dvar; - break; - case "killstreak": - if ( !isDefined( level.hardpointtweaks[ name ] ) ) - { - level.hardpointtweaks[ name ] = spawnstruct(); - } - level.hardpointtweaks[ name ].value = value; - level.hardpointtweaks[ name ].lastvalue = value; - level.hardpointtweaks[ name ].dvar = dvar; - break; - case "hud": - if ( !isDefined( level.hudtweaks[ name ] ) ) - { - level.hudtweaks[ name ] = spawnstruct(); - } - level.hudtweaks[ name ].value = value; - level.hudtweaks[ name ].lastvalue = value; - level.hudtweaks[ name ].dvar = dvar; - break; - } -} - -init() -{ - level.clienttweakables = []; - level.tweakablesinitialized = 1; - level.rules = []; - level.gametweaks = []; - level.teamtweaks = []; - level.playertweaks = []; - level.classtweaks = []; - level.weapontweaks = []; - level.hardpointtweaks = []; - level.hudtweaks = []; - registertweakable( "game", "arcadescoring", "scr_game_arcadescoring", 0 ); - registertweakable( "game", "difficulty", "scr_game_difficulty", 1 ); - registertweakable( "game", "pinups", "scr_game_pinups", 0 ); - registertweakable( "team", "teamkillerplaylistbanquantum", "scr_team_teamkillerplaylistbanquantum", 0 ); - registertweakable( "team", "teamkillerplaylistbanpenalty", "scr_team_teamkillerplaylistbanpenalty", 0 ); - registertweakable( "player", "allowrevive", "scr_player_allowrevive", 1 ); - registertweakable( "weapon", "allowfrag", "scr_weapon_allowfrags", 1 ); - registertweakable( "weapon", "allowsmoke", "scr_weapon_allowsmoke", 1 ); - registertweakable( "weapon", "allowflash", "scr_weapon_allowflash", 1 ); - registertweakable( "weapon", "allowc4", "scr_weapon_allowc4", 1 ); - registertweakable( "weapon", "allowsatchel", "scr_weapon_allowsatchel", 1 ); - registertweakable( "weapon", "allowbetty", "scr_weapon_allowbetty", 1 ); - registertweakable( "weapon", "allowrpgs", "scr_weapon_allowrpgs", 1 ); - registertweakable( "weapon", "allowmines", "scr_weapon_allowmines", 1 ); - registertweakable( "hud", "showobjicons", "ui_hud_showobjicons", 1 ); - setclienttweakable( "hud", "showobjicons" ); - registertweakable( "killstreak", "allowradar", "scr_hardpoint_allowradar", 1 ); - registertweakable( "killstreak", "allowradardirection", "scr_hardpoint_allowradardirection", 1 ); - registertweakable( "killstreak", "allowcounteruav", "scr_hardpoint_allowcounteruav", 1 ); - registertweakable( "killstreak", "allowdogs", "scr_hardpoint_allowdogs", 1 ); - registertweakable( "killstreak", "allowhelicopter_comlink", "scr_hardpoint_allowhelicopter_comlink", 1 ); - registertweakable( "killstreak", "allowrcbomb", "scr_hardpoint_allowrcbomb", 1 ); - registertweakable( "killstreak", "allowauto_turret", "scr_hardpoint_allowauto_turret", 1 ); - level thread updateuitweakables(); -} - -setclienttweakable( category, name ) -{ - level.clienttweakables[ level.clienttweakables.size ] = name; -} - -updateuitweakables() -{ - for ( ;; ) - { - index = 0; - while ( index < level.clienttweakables.size ) - { - clienttweakable = level.clienttweakables[ index ]; - curvalue = gettweakabledvarvalue( "hud", clienttweakable ); - lastvalue = gettweakablelastvalue( "hud", clienttweakable ); - if ( curvalue != lastvalue ) - { - updateserverdvar( gettweakabledvar( "hud", clienttweakable ), curvalue ); - settweakablelastvalue( "hud", clienttweakable, curvalue ); - } - index++; - } - wait 1; - } -} - -updateserverdvar( dvar, value ) -{ - makedvarserverinfo( dvar, value ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_weapon_utils.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_weapon_utils.gsc deleted file mode 100644 index 7359766..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_weapon_utils.gsc +++ /dev/null @@ -1,119 +0,0 @@ -#include maps/mp/_utility; -#include common_scripts/utility; - -isgrenadelauncherweapon( weapon ) -{ - if ( getsubstr( weapon, 0, 3 ) == "gl_" ) - { - return 1; - } - switch( weapon ) - { - case "china_lake_mp": - case "xm25_mp": - return 1; - default: - return 0; - } -} - -isdumbrocketlauncherweapon( weapon ) -{ - switch( weapon ) - { - case "m220_tow_mp": - case "rpg_mp": - return 1; - default: - return 0; - } -} - -isguidedrocketlauncherweapon( weapon ) -{ - switch( weapon ) - { - case "fhj18_mp": - case "javelin_mp": - case "m202_flash_mp": - case "m72_law_mp": - case "smaw_mp": - return 1; - default: - return 0; - } -} - -isrocketlauncherweapon( weapon ) -{ - if ( isdumbrocketlauncherweapon( weapon ) ) - { - return 1; - } - if ( isguidedrocketlauncherweapon( weapon ) ) - { - return 1; - } - return 0; -} - -islauncherweapon( weapon ) -{ - if ( isrocketlauncherweapon( weapon ) ) - { - return 1; - } - if ( isgrenadelauncherweapon( weapon ) ) - { - return 1; - } - return 0; -} - -isreducedteamkillweapon( weapon ) -{ - switch( weapon ) - { - case "planemortar_mp": - return 1; - default: - return 0; - } -} - -ishackweapon( weapon ) -{ - return 0; -} - -ispistol( weapon ) -{ - return isDefined( level.side_arm_array[ weapon ] ); -} - -isflashorstunweapon( weapon ) -{ - if ( isDefined( weapon ) ) - { - switch( weapon ) - { - case "concussion_grenade_mp": - case "flash_grenade_mp": - case "proximity_grenade_aoe_mp": - case "proximity_grenade_mp": - return 1; - } - } - return 0; -} - -isflashorstundamage( weapon, meansofdeath ) -{ - if ( isflashorstunweapon( weapon ) ) - { - if ( meansofdeath != "MOD_GRENADE_SPLASH" ) - { - return meansofdeath == "MOD_GAS"; - } - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_weaponobjects.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_weaponobjects.gsc deleted file mode 100644 index 8953fc5..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_weaponobjects.gsc +++ /dev/null @@ -1,2435 +0,0 @@ -#include maps/mp/gametypes_zm/_globallogic_audio; -#include maps/mp/gametypes_zm/_damagefeedback; -#include maps/mp/gametypes_zm/_globallogic_player; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/_challenges; -#include maps/mp/_ballistic_knife; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ -/# - debug = weapons_get_dvar_int( "scr_weaponobject_debug", "0" ); -#/ - coneangle = weapons_get_dvar_int( "scr_weaponobject_coneangle", "70" ); - mindist = weapons_get_dvar_int( "scr_weaponobject_mindist", "20" ); - graceperiod = weapons_get_dvar( "scr_weaponobject_graceperiod", "0.6" ); - radius = weapons_get_dvar_int( "scr_weaponobject_radius", "192" ); - level thread onplayerconnect(); - level.watcherweapons = []; - level.watcherweapons = getwatcherweapons(); - level.watcherweaponnames = []; - level.watcherweaponnames = getwatchernames( level.watcherweapons ); - level.retrievableweapons = []; - level.retrievableweapons = getretrievableweapons(); - level.retrievableweaponnames = []; - level.retrievableweaponnames = getwatchernames( level.retrievableweapons ); - level.weaponobjects_headicon_offset = []; - level.weaponobjects_headicon_offset[ "default" ] = vectorScale( ( 0, 0, 1 ), 20 ); - level.weaponobjectexplodethisframe = 0; - if ( getDvar( "scr_deleteexplosivesonspawn" ) == "" ) - { - setdvar( "scr_deleteexplosivesonspawn", 1 ); - } - level.deleteexplosivesonspawn = getDvarInt( "scr_deleteexplosivesonspawn" ); - if ( sessionmodeiszombiesgame() ) - { - return; - } - precachestring( &"MP_DEFUSING_EXPLOSIVE" ); - level.claymorefxid = loadfx( "weapon/claymore/fx_claymore_laser" ); - level._equipment_spark_fx = loadfx( "weapon/grenade/fx_spark_disabled_weapon" ); - level._equipment_emp_destroy_fx = loadfx( "weapon/emp/fx_emp_explosion_equip" ); - level._equipment_explode_fx = loadfx( "explosions/fx_exp_equipment" ); - level._equipment_explode_fx_lg = loadfx( "explosions/fx_exp_equipment_lg" ); - level._effect[ "powerLight" ] = loadfx( "weapon/crossbow/fx_trail_crossbow_blink_red_os" ); - setupretrievablehintstrings(); - level.weaponobjects_headicon_offset[ "acoustic_sensor_mp" ] = vectorScale( ( 0, 0, 1 ), 25 ); - level.weaponobjects_headicon_offset[ "sensor_grenade_mp" ] = vectorScale( ( 0, 0, 1 ), 25 ); - level.weaponobjects_headicon_offset[ "camera_spike_mp" ] = vectorScale( ( 0, 0, 1 ), 35 ); - level.weaponobjects_headicon_offset[ "claymore_mp" ] = vectorScale( ( 0, 0, 1 ), 20 ); - level.weaponobjects_headicon_offset[ "bouncingbetty_mp" ] = vectorScale( ( 0, 0, 1 ), 20 ); - level.weaponobjects_headicon_offset[ "satchel_charge_mp" ] = vectorScale( ( 0, 0, 1 ), 10 ); - level.weaponobjects_headicon_offset[ "scrambler_mp" ] = vectorScale( ( 0, 0, 1 ), 20 ); - level.weaponobjects_headicon_offset[ "trophy_system_mp" ] = vectorScale( ( 0, 0, 1 ), 20 ); - level.weaponobjects_hacker_trigger_width = 32; - level.weaponobjects_hacker_trigger_height = 32; -} - -getwatchernames( weapons ) -{ - names = []; - _a73 = weapons; - index = getFirstArrayKey( _a73 ); - while ( isDefined( index ) ) - { - weapon = _a73[ index ]; - names[ index ] = getsubstr( weapon, 0, weapon.size - 3 ); - index = getNextArrayKey( _a73, index ); - } - return names; -} - -weapons_get_dvar_int( dvar, def ) -{ - return int( weapons_get_dvar( dvar, def ) ); -} - -weapons_get_dvar( dvar, def ) -{ - if ( getDvar( dvar ) != "" ) - { - return getDvarFloat( dvar ); - } - else - { - setdvar( dvar, def ); - return def; - } -} - -setupretrievablehintstrings() -{ - createretrievablehint( "hatchet", &"MP_HATCHET_PICKUP" ); - createretrievablehint( "claymore", &"MP_CLAYMORE_PICKUP" ); - createretrievablehint( "bouncingbetty", &"MP_BOUNCINGBETTY_PICKUP" ); - createretrievablehint( "trophy_system", &"MP_TROPHY_SYSTEM_PICKUP" ); - createretrievablehint( "acoustic_sensor", &"MP_ACOUSTIC_SENSOR_PICKUP" ); - createretrievablehint( "camera_spike", &"MP_CAMERA_SPIKE_PICKUP" ); - createretrievablehint( "satchel_charge", &"MP_SATCHEL_CHARGE_PICKUP" ); - createretrievablehint( "scrambler", &"MP_SCRAMBLER_PICKUP" ); - createdestroyhint( "trophy_system", &"MP_TROPHY_SYSTEM_DESTROY" ); - createdestroyhint( "sensor_grenade", &"MP_SENSOR_GRENADE_DESTROY" ); - createhackerhint( "claymore_mp", &"MP_CLAYMORE_HACKING" ); - createhackerhint( "bouncingbetty_mp", &"MP_BOUNCINGBETTY_HACKING" ); - createhackerhint( "trophy_system_mp", &"MP_TROPHY_SYSTEM_HACKING" ); - createhackerhint( "acoustic_sensor_mp", &"MP_ACOUSTIC_SENSOR_HACKING" ); - createhackerhint( "camera_spike_mp", &"MP_CAMERA_SPIKE_HACKING" ); - createhackerhint( "satchel_charge_mp", &"MP_SATCHEL_CHARGE_HACKING" ); - createhackerhint( "scrambler_mp", &"MP_SCRAMBLER_HACKING" ); -} - -onplayerconnect() -{ - if ( isDefined( level._weaponobjects_on_player_connect_override ) ) - { - level thread [[ level._weaponobjects_on_player_connect_override ]](); - return; - } - for ( ;; ) - { - level waittill( "connecting", player ); - player.usedweapons = 0; - player.hits = 0; - player thread onplayerspawned(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - pixbeginevent( "onPlayerSpawned" ); - if ( !isDefined( self.watchersinitialized ) ) - { - self createbasewatchers(); - self setupretrievablewatcher(); - self thread watchweaponobjectusage(); - self.watchersinitialized = 1; - } - self resetwatchers(); - pixendevent(); - } -} - -resetwatchers() -{ - if ( !isDefined( self.weaponobjectwatcherarray ) ) - { - return undefined; - } - team = self.team; - _a199 = self.weaponobjectwatcherarray; - _k199 = getFirstArrayKey( _a199 ); - while ( isDefined( _k199 ) ) - { - watcher = _a199[ _k199 ]; - resetweaponobjectwatcher( watcher, team ); - _k199 = getNextArrayKey( _a199, _k199 ); - } -} - -createbasewatchers() -{ - _a208 = level.watcherweapons; - index = getFirstArrayKey( _a208 ); - while ( isDefined( index ) ) - { - weapon = _a208[ index ]; - self createweaponobjectwatcher( level.watcherweaponnames[ index ], weapon, self.team ); - index = getNextArrayKey( _a208, index ); - } - _a214 = level.retrievableweapons; - index = getFirstArrayKey( _a214 ); - while ( isDefined( index ) ) - { - weapon = _a214[ index ]; - self createweaponobjectwatcher( level.retrievableweaponnames[ index ], weapon, self.team ); - index = getNextArrayKey( _a214, index ); - } -} - -setupretrievablewatcher() -{ - i = 0; - while ( i < level.retrievableweapons.size ) - { - watcher = getweaponobjectwatcherbyweapon( level.retrievableweapons[ i ] ); - if ( !isDefined( watcher.onspawnretrievetriggers ) ) - { - watcher.onspawnretrievetriggers = ::onspawnretrievableweaponobject; - } - if ( !isDefined( watcher.ondestroyed ) ) - { - watcher.ondestroyed = ::ondestroyed; - } - if ( !isDefined( watcher.pickup ) ) - { - watcher.pickup = ::pickup; - } - i++; - } -} - -createballisticknifewatcher() -{ - watcher = self createuseweaponobjectwatcher( "knife_ballistic", "knife_ballistic_mp", self.team ); - watcher.onspawn = ::maps/mp/_ballistic_knife::onspawn; - watcher.detonate = ::deleteent; - watcher.onspawnretrievetriggers = ::maps/mp/_ballistic_knife::onspawnretrievetrigger; - watcher.storedifferentobject = 1; -} - -createhatchetwatcher() -{ - watcher = self createuseweaponobjectwatcher( "hatchet", "hatchet_mp", self.team ); - watcher.detonate = ::deleteent; - watcher.onspawn = ::voidonspawn; - watcher.onspawnretrievetriggers = ::onspawnhatchettrigger; -} - -createtactinsertwatcher() -{ - watcher = self createuseweaponobjectwatcher( "tactical_insertion", "tactical_insertion_mp", self.team ); - watcher.playdestroyeddialog = 0; -} - -creatercbombwatcher() -{ -} - -createqrdronewatcher() -{ -} - -createplayerhelicopterwatcher() -{ - watcher = self createuseweaponobjectwatcher( "helicopter_player", "helicopter_player_mp", self.team ); - watcher.altdetonate = 1; - watcher.headicon = 0; -} - -createclaymorewatcher() -{ - watcher = self createproximityweaponobjectwatcher( "claymore", "claymore_mp", self.team ); - watcher.watchforfire = 1; - watcher.detonate = ::claymoredetonate; - watcher.activatesound = "wpn_claymore_alert"; - watcher.hackable = 1; - watcher.hackertoolradius = level.claymorehackertoolradius; - watcher.hackertooltimems = level.claymorehackertooltimems; - watcher.reconmodel = "t6_wpn_claymore_world_detect"; - watcher.ownergetsassist = 1; - detectionconeangle = weapons_get_dvar_int( "scr_weaponobject_coneangle" ); - watcher.detectiondot = cos( detectionconeangle ); - watcher.detectionmindist = weapons_get_dvar_int( "scr_weaponobject_mindist" ); - watcher.detectiongraceperiod = weapons_get_dvar( "scr_weaponobject_graceperiod" ); - watcher.detonateradius = weapons_get_dvar_int( "scr_weaponobject_radius" ); - watcher.stun = ::weaponstun; - watcher.stuntime = 5; -} - -waittillnotmoving_and_notstunned() -{ - prevorigin = self.origin; - while ( 1 ) - { - wait 0,15; - if ( self.origin == prevorigin && !self isstunned() ) - { - return; - } - else - { - prevorigin = self.origin; - } - } -} - -voidonspawn( unused0, unused1 ) -{ -} - -deleteent( attacker, emp ) -{ - self delete(); -} - -clearfxondeath( fx ) -{ - fx endon( "death" ); - self waittill_any( "death", "hacked" ); - fx delete(); -} - -deleteweaponobjectarray() -{ - while ( isDefined( self.objectarray ) ) - { - i = 0; - while ( i < self.objectarray.size ) - { - if ( isDefined( self.objectarray[ i ] ) ) - { - self.objectarray[ i ] delete(); - } - i++; - } - } - self.objectarray = []; -} - -claymoredetonate( attacker, weaponname ) -{ - from_emp = 0; - if ( !isDefined( from_emp ) || !from_emp ) - { - if ( isDefined( attacker ) ) - { - if ( level.teambased || attacker.team != self.owner.team && attacker != self.owner ) - { - attacker maps/mp/_challenges::destroyedexplosive(); - } - } - } - maps/mp/gametypes_zm/_weaponobjects::weapondetonate( attacker, weaponname ); -} - -weapondetonate( attacker, weaponname ) -{ - from_emp = 0; - if ( from_emp ) - { - self delete(); - return; - } - if ( isDefined( attacker ) ) - { - self detonate( attacker ); - } - else if ( isDefined( self.owner ) && isplayer( self.owner ) ) - { - self detonate( self.owner ); - } - else - { - self detonate(); - } -} - -waitanddetonate( object, delay, attacker, weaponname ) -{ - object endon( "death" ); - object endon( "hacked" ); - from_emp = 0; - if ( from_emp ) - { - object setclientflag( 15 ); - object setclientflag( 9 ); - object.stun_fx = 1; - if ( isDefined( object.name ) && object.name == "qrdrone_turret_mp" ) - { - playfx( level._equipment_emp_destroy_fx, object.origin + ( 0, 0, 1 ), ( 0, randomfloat( 360 ), 0 ) ); - } - else - { - playfx( level._equipment_emp_destroy_fx, object.origin + vectorScale( ( 0, 0, 1 ), 5 ), ( 0, randomfloat( 360 ), 0 ) ); - } - delay = 1,1; - } - if ( delay ) - { - wait delay; - } - if ( isDefined( object.detonated ) && object.detonated == 1 ) - { - return; - } - if ( !isDefined( self.detonate ) ) - { - return; - } - if ( isDefined( attacker ) && isplayer( attacker ) && isDefined( attacker.pers[ "team" ] ) && isDefined( object.owner ) && isDefined( object.owner.pers[ "team" ] ) ) - { - if ( level.teambased ) - { - if ( attacker.pers[ "team" ] != object.owner.pers[ "team" ] ) - { - attacker notify( "destroyed_explosive" ); - } - } - else - { - if ( attacker != object.owner ) - { - attacker notify( "destroyed_explosive" ); - } - } - } - object.detonated = 1; - object [[ self.detonate ]]( attacker, weaponname ); -} - -detonateweaponobjectarray( forcedetonation, weapon ) -{ - undetonated = []; - while ( isDefined( self.objectarray ) ) - { - i = 0; - while ( i < self.objectarray.size ) - { - if ( isDefined( self.objectarray[ i ] ) ) - { - if ( self.objectarray[ i ] isstunned() && forcedetonation == 0 ) - { - undetonated[ undetonated.size ] = self.objectarray[ i ]; - i++; - continue; - } - else - { - if ( isDefined( weapon ) ) - { - if ( weapon ishacked() && weapon.name != self.objectarray[ i ].name ) - { - undetonated[ undetonated.size ] = self.objectarray[ i ]; - i++; - continue; - } - else if ( self.objectarray[ i ] ishacked() && weapon.name != self.objectarray[ i ].name ) - { - undetonated[ undetonated.size ] = self.objectarray[ i ]; - i++; - continue; - } - } - else - { - self thread waitanddetonate( self.objectarray[ i ], 0,1, undefined, weapon ); - } - } - } - i++; - } - } - self.objectarray = undetonated; -} - -addweaponobjecttowatcher( watchername, weapon ) -{ - watcher = getweaponobjectwatcher( watchername ); -/# - assert( isDefined( watcher ), "Weapon object watcher " + watchername + " does not exist" ); -#/ - self addweaponobject( watcher, weapon ); -} - -addweaponobject( watcher, weapon ) -{ - if ( !isDefined( watcher.storedifferentobject ) ) - { - watcher.objectarray[ watcher.objectarray.size ] = weapon; - } - weapon.owner = self; - weapon.detonated = 0; - weapon.name = watcher.weapon; - if ( isDefined( watcher.ondamage ) ) - { - weapon thread [[ watcher.ondamage ]]( watcher ); - } - else - { - weapon thread weaponobjectdamage( watcher ); - } - weapon.ownergetsassist = watcher.ownergetsassist; - if ( isDefined( watcher.onspawn ) ) - { - weapon thread [[ watcher.onspawn ]]( watcher, self ); - } - if ( isDefined( watcher.onspawnfx ) ) - { - weapon thread [[ watcher.onspawnfx ]](); - } - if ( isDefined( watcher.reconmodel ) ) - { - weapon thread attachreconmodel( watcher.reconmodel, self ); - } - if ( isDefined( watcher.onspawnretrievetriggers ) ) - { - weapon thread [[ watcher.onspawnretrievetriggers ]]( watcher, self ); - } - if ( watcher.hackable ) - { - weapon thread hackerinit( watcher ); - } - if ( isDefined( watcher.stun ) ) - { - weapon thread watchscramble( watcher ); - } - if ( watcher.playdestroyeddialog ) - { - weapon thread playdialogondeath( self ); - weapon thread watchobjectdamage( self ); - } - if ( watcher.deleteonkillbrush ) - { - weapon thread deleteonkillbrush( self ); - } -} - -watchscramble( watcher ) -{ -} - -deleteweaponobjecthelper( weapon_ent ) -{ - if ( !isDefined( weapon_ent.name ) ) - { - return; - } - watcher = self getweaponobjectwatcherbyweapon( weapon_ent.name ); - if ( !isDefined( watcher ) ) - { - return; - } - watcher.objectarray = deleteweaponobject( watcher, weapon_ent ); -} - -deleteweaponobject( watcher, weapon_ent ) -{ - temp_objectarray = watcher.objectarray; - watcher.objectarray = []; - j = 0; - i = 0; - while ( i < temp_objectarray.size ) - { - if ( !isDefined( temp_objectarray[ i ] ) || temp_objectarray[ i ] == weapon_ent ) - { - i++; - continue; - } - else - { - watcher.objectarray[ j ] = temp_objectarray[ i ]; - j++; - } - i++; - } - return watcher.objectarray; -} - -weaponobjectdamage( watcher ) -{ - self endon( "death" ); - self endon( "hacked" ); - self setcandamage( 1 ); - self.maxhealth = 100000; - self.health = self.maxhealth; - attacker = undefined; - for ( ;; ) - { - while ( 1 ) - { - self waittill( "damage", damage, attacker, direction_vec, point, type, modelname, tagname, partname, weaponname, idflags ); - if ( isDefined( weaponname ) ) - { - switch( weaponname ) - { - case "concussion_grenade_mp": - case "flash_grenade_mp": - case "proximity_grenade_mp": - if ( watcher.stuntime > 0 ) - { - self thread stunstart( watcher, watcher.stuntime ); - } - if ( level.teambased && self.owner.team != attacker.team ) - { - if ( maps/mp/gametypes_zm/_globallogic_player::dodamagefeedback( weaponname, attacker ) ) - { - attacker maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback(); - } - continue; - } - else - { - if ( !level.teambased && self.owner != attacker ) - { - if ( maps/mp/gametypes_zm/_globallogic_player::dodamagefeedback( weaponname, attacker ) ) - { - attacker maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback(); - } - } - } - } - case "willy_pete_mp": - } - case "emp_grenade_mp": - if ( level.teambased && self.owner.team != attacker.team ) - { - if ( maps/mp/gametypes_zm/_globallogic_player::dodamagefeedback( weaponname, attacker ) ) - { - attacker maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback(); - } - } - else if ( !level.teambased && self.owner != attacker ) - { - if ( maps/mp/gametypes_zm/_globallogic_player::dodamagefeedback( weaponname, attacker ) ) - { - attacker maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback(); - } - } - break; - break; - default: - } - } - if ( !isplayer( attacker ) && isDefined( attacker.owner ) ) - { - attacker = attacker.owner; - } - while ( level.teambased && isplayer( attacker ) ) - { - while ( !level.hardcoremode && self.owner.team == attacker.pers[ "team" ] && self.owner != attacker ) - { - continue; - } - } - if ( maps/mp/gametypes_zm/_globallogic_player::dodamagefeedback( weaponname, attacker ) ) - { - attacker maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback(); - } - if ( !isvehicle( self ) && !friendlyfirecheck( self.owner, attacker ) ) - { - continue; - } - } - if ( level.weaponobjectexplodethisframe ) - { - wait ( 0,1 + randomfloat( 0,4 ) ); - } - else wait 0,05; - if ( !isDefined( self ) ) - { - return; - } - level.weaponobjectexplodethisframe = 1; - thread resetweaponobjectexplodethisframe(); - if ( isDefined( type ) && !issubstr( type, "MOD_GRENADE_SPLASH" ) || issubstr( type, "MOD_GRENADE" ) && issubstr( type, "MOD_EXPLOSIVE" ) ) - { - self.waschained = 1; - } - if ( isDefined( idflags ) && idflags & level.idflags_penetration ) - { - self.wasdamagedfrombulletpenetration = 1; - } - self.wasdamaged = 1; - watcher thread waitanddetonate( self, 0, attacker, weaponname ); - } - } -} - -playdialogondeath( owner ) -{ - owner endon( "death" ); - owner endon( "disconnect" ); - self endon( "hacked" ); - self waittill( "death" ); - if ( isDefined( self.playdialog ) && self.playdialog ) - { - owner maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "equipment_destroyed", "item_destroyed" ); - } -} - -watchobjectdamage( owner ) -{ - owner endon( "death" ); - owner endon( "disconnect" ); - self endon( "hacked" ); - self endon( "death" ); - while ( 1 ) - { - self waittill( "damage", damage, attacker ); - if ( isDefined( attacker ) && isplayer( attacker ) && attacker != owner ) - { - self.playdialog = 1; - continue; - } - else - { - self.playdialog = 0; - } - } -} - -stunstart( watcher, time ) -{ - self endon( "death" ); - if ( self isstunned() ) - { - return; - } - if ( isDefined( self.camerahead ) ) - { - self.camerahead setclientflag( 9 ); - } - self setclientflag( 9 ); - if ( isDefined( watcher.stun ) ) - { - self thread [[ watcher.stun ]](); - } - if ( watcher.name == "rcbomb" ) - { - self.owner freezecontrolswrapper( 1 ); - } - if ( isDefined( time ) ) - { - wait time; - } - else - { - return; - } - if ( watcher.name == "rcbomb" ) - { - self.owner freezecontrolswrapper( 0 ); - } - self stunstop(); -} - -stunstop() -{ - self notify( "not_stunned" ); - if ( isDefined( self.camerahead ) ) - { - self.camerahead clearclientflag( 9 ); - } - self clearclientflag( 9 ); -} - -weaponstun() -{ - self endon( "death" ); - self endon( "not_stunned" ); - origin = self gettagorigin( "tag_fx" ); - if ( !isDefined( origin ) ) - { - origin = self.origin + vectorScale( ( 0, 0, 1 ), 10 ); - } - self.stun_fx = spawn( "script_model", origin ); - self.stun_fx setmodel( "tag_origin" ); - self thread stunfxthink( self.stun_fx ); - wait 0,1; - playfxontag( level._equipment_spark_fx, self.stun_fx, "tag_origin" ); - self.stun_fx playsound( "dst_disable_spark" ); -} - -stunfxthink( fx ) -{ - fx endon( "death" ); - self waittill_any( "death", "not_stunned" ); - fx delete(); -} - -isstunned() -{ - return isDefined( self.stun_fx ); -} - -resetweaponobjectexplodethisframe() -{ - wait 0,05; - level.weaponobjectexplodethisframe = 0; -} - -getweaponobjectwatcher( name ) -{ - if ( !isDefined( self.weaponobjectwatcherarray ) ) - { - return undefined; - } - watcher = 0; - while ( watcher < self.weaponobjectwatcherarray.size ) - { - if ( self.weaponobjectwatcherarray[ watcher ].name == name ) - { - return self.weaponobjectwatcherarray[ watcher ]; - } - watcher++; - } - return undefined; -} - -getweaponobjectwatcherbyweapon( weapon ) -{ - if ( !isDefined( self.weaponobjectwatcherarray ) ) - { - return undefined; - } - watcher = 0; - while ( watcher < self.weaponobjectwatcherarray.size ) - { - if ( isDefined( self.weaponobjectwatcherarray[ watcher ].weapon ) && self.weaponobjectwatcherarray[ watcher ].weapon == weapon ) - { - return self.weaponobjectwatcherarray[ watcher ]; - } - if ( isDefined( self.weaponobjectwatcherarray[ watcher ].weapon ) && isDefined( self.weaponobjectwatcherarray[ watcher ].altweapon ) && self.weaponobjectwatcherarray[ watcher ].altweapon == weapon ) - { - return self.weaponobjectwatcherarray[ watcher ]; - } - watcher++; - } - return undefined; -} - -resetweaponobjectwatcher( watcher, ownerteam ) -{ - if ( level.deleteexplosivesonspawn == 1 ) - { - self notify( "weapon_object_destroyed" ); - watcher deleteweaponobjectarray(); - } - watcher.ownerteam = ownerteam; -} - -createweaponobjectwatcher( name, weapon, ownerteam ) -{ - if ( !isDefined( self.weaponobjectwatcherarray ) ) - { - self.weaponobjectwatcherarray = []; - } - weaponobjectwatcher = getweaponobjectwatcher( name ); - if ( !isDefined( weaponobjectwatcher ) ) - { - weaponobjectwatcher = spawnstruct(); - self.weaponobjectwatcherarray[ self.weaponobjectwatcherarray.size ] = weaponobjectwatcher; - weaponobjectwatcher.name = name; - weaponobjectwatcher.type = "use"; - weaponobjectwatcher.weapon = weapon; - weaponobjectwatcher.weaponidx = getweaponindexfromname( weapon ); - weaponobjectwatcher.watchforfire = 0; - weaponobjectwatcher.hackable = 0; - weaponobjectwatcher.altdetonate = 0; - weaponobjectwatcher.detectable = 1; - weaponobjectwatcher.headicon = 1; - weaponobjectwatcher.stuntime = 0; - weaponobjectwatcher.activatesound = undefined; - weaponobjectwatcher.ignoredirection = undefined; - weaponobjectwatcher.immediatedetonation = undefined; - weaponobjectwatcher.deploysound = getweaponfiresound( weaponobjectwatcher.weaponidx ); - weaponobjectwatcher.deploysoundplayer = getweaponfiresoundplayer( weaponobjectwatcher.weaponidx ); - weaponobjectwatcher.pickupsound = getweaponpickupsound( weaponobjectwatcher.weaponidx ); - weaponobjectwatcher.pickupsoundplayer = getweaponpickupsoundplayer( weaponobjectwatcher.weaponidx ); - weaponobjectwatcher.altweapon = undefined; - weaponobjectwatcher.ownergetsassist = 0; - weaponobjectwatcher.playdestroyeddialog = 1; - weaponobjectwatcher.deleteonkillbrush = 1; - weaponobjectwatcher.deleteondifferentobjectspawn = 1; - weaponobjectwatcher.enemydestroy = 0; - weaponobjectwatcher.onspawn = undefined; - weaponobjectwatcher.onspawnfx = undefined; - weaponobjectwatcher.onspawnretrievetriggers = undefined; - weaponobjectwatcher.ondetonated = undefined; - weaponobjectwatcher.detonate = undefined; - weaponobjectwatcher.stun = undefined; - weaponobjectwatcher.ondestroyed = undefined; - if ( !isDefined( weaponobjectwatcher.objectarray ) ) - { - weaponobjectwatcher.objectarray = []; - } - } - resetweaponobjectwatcher( weaponobjectwatcher, ownerteam ); - return weaponobjectwatcher; -} - -createuseweaponobjectwatcher( name, weapon, ownerteam ) -{ - weaponobjectwatcher = createweaponobjectwatcher( name, weapon, ownerteam ); - weaponobjectwatcher.type = "use"; - weaponobjectwatcher.onspawn = ::onspawnuseweaponobject; - return weaponobjectwatcher; -} - -createproximityweaponobjectwatcher( name, weapon, ownerteam ) -{ - weaponobjectwatcher = createweaponobjectwatcher( name, weapon, ownerteam ); - weaponobjectwatcher.type = "proximity"; - weaponobjectwatcher.onspawn = ::onspawnproximityweaponobject; - detectionconeangle = weapons_get_dvar_int( "scr_weaponobject_coneangle" ); - weaponobjectwatcher.detectiondot = cos( detectionconeangle ); - weaponobjectwatcher.detectionmindist = weapons_get_dvar_int( "scr_weaponobject_mindist" ); - weaponobjectwatcher.detectiongraceperiod = weapons_get_dvar( "scr_weaponobject_graceperiod" ); - weaponobjectwatcher.detonateradius = weapons_get_dvar_int( "scr_weaponobject_radius" ); - return weaponobjectwatcher; -} - -commononspawnuseweaponobject( watcher, owner ) -{ - if ( watcher.detectable ) - { - if ( isDefined( watcher.ismovable ) && watcher.ismovable ) - { - self thread weaponobjectdetectionmovable( owner.pers[ "team" ] ); - } - else - { - self thread weaponobjectdetectiontrigger_wait( owner.pers[ "team" ] ); - } - if ( watcher.headicon && level.teambased ) - { - self waittillnotmoving(); - offset = level.weaponobjects_headicon_offset[ "default" ]; - if ( isDefined( level.weaponobjects_headicon_offset[ self.name ] ) ) - { - offset = level.weaponobjects_headicon_offset[ self.name ]; - } - } - } -} - -onspawnuseweaponobject( watcher, owner ) -{ - self commononspawnuseweaponobject( watcher, owner ); -} - -onspawnproximityweaponobject( watcher, owner ) -{ - self thread commononspawnuseweaponobject( watcher, owner ); - self thread proximityweaponobjectdetonation( watcher ); -/# - if ( getDvarInt( #"38868733" ) ) - { - self thread proximityweaponobjectdebug( watcher ); -#/ - } -} - -watchweaponobjectusage() -{ - self endon( "disconnect" ); - if ( !isDefined( self.weaponobjectwatcherarray ) ) - { - self.weaponobjectwatcherarray = []; - } - self thread watchweaponobjectspawn(); - self thread watchweaponprojectileobjectspawn(); - self thread watchweaponobjectdetonation(); - self thread watchweaponobjectaltdetonation(); - self thread watchweaponobjectaltdetonate(); - self thread deleteweaponobjectson(); -} - -watchweaponobjectspawn() -{ - self notify( "watchWeaponObjectSpawn" ); - self endon( "watchWeaponObjectSpawn" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "grenade_fire", weapon, weapname ); - switch( weapname ) - { - case "acoustic_sensor_mp": - case "bouncingbetty_mp": - case "camera_spike_mp": - case "scrambler_mp": - case "tactical_insertion_mp": - break; - case "bouncingbetty_mp": - case "claymore_mp": - case "proximity_grenade_mp": - case "satchel_charge_mp": - case "sensor_grenade_mp": - case "trophy_system_mp": - i = 0; - while ( i < self.weaponobjectwatcherarray.size ) - { - if ( self.weaponobjectwatcherarray[ i ].weapon != weapname ) - { - i++; - continue; - } - else - { - objectarray_size = self.weaponobjectwatcherarray[ i ].objectarray.size; - j = 0; - while ( j < objectarray_size ) - { - if ( !isDefined( self.weaponobjectwatcherarray[ i ].objectarray[ j ] ) ) - { - self.weaponobjectwatcherarray[ i ].objectarray = deleteweaponobject( self.weaponobjectwatcherarray[ i ], weapon ); - } - j++; - } - numallowed = 2; - if ( weapname == "proximity_grenade_mp" ) - { - numallowed = weapons_get_dvar_int( "scr_proximityGrenadeMaxInstances" ); - } - if ( isDefined( self.weaponobjectwatcherarray[ i ].detonate ) && self.weaponobjectwatcherarray[ i ].objectarray.size > ( numallowed - 1 ) ) - { - self.weaponobjectwatcherarray[ i ] thread waitanddetonate( self.weaponobjectwatcherarray[ i ].objectarray[ 0 ], 0,1, undefined, weapname ); - } - } - i++; - } - default: - } - if ( !self ishacked() ) - { - if ( weapname != "claymore_mp" || weapname == "satchel_charge_mp" && weapname == "bouncingbetty_mp" ) - { - self addweaponstat( weapname, "used", 1 ); - } - } - watcher = getweaponobjectwatcherbyweapon( weapname ); - if ( isDefined( watcher ) ) - { - self addweaponobject( watcher, weapon ); - } - } - } - } -} - -watchweaponprojectileobjectspawn() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "missile_fire", weapon, weapname ); - watcher = getweaponobjectwatcherbyweapon( weapname ); - if ( isDefined( watcher ) ) - { - self addweaponobject( watcher, weapon ); - objectarray_size = watcher.objectarray.size; - j = 0; - while ( j < objectarray_size ) - { - if ( !isDefined( watcher.objectarray[ j ] ) ) - { - watcher.objectarray = deleteweaponobject( watcher, weapon ); - } - j++; - } - if ( isDefined( watcher.detonate ) && watcher.objectarray.size > 1 ) - { - watcher thread waitanddetonate( watcher.objectarray[ 0 ], 0,1 ); - } - } - } -} - -proximityweaponobjectdebug( watcher ) -{ -/# - self waittillnotmoving(); - self thread showcone( acos( watcher.detectiondot ), watcher.detonateradius, ( 1, 0,85, 0 ) ); - self thread showcone( 60, 256, ( 0, 0, 1 ) ); -#/ -} - -vectorcross( v1, v2 ) -{ -/# - return ( ( v1[ 1 ] * v2[ 2 ] ) - ( v1[ 2 ] * v2[ 1 ] ), ( v1[ 2 ] * v2[ 0 ] ) - ( v1[ 0 ] * v2[ 2 ] ), ( v1[ 0 ] * v2[ 1 ] ) - ( v1[ 1 ] * v2[ 0 ] ) ); -#/ -} - -showcone( angle, range, color ) -{ -/# - self endon( "death" ); - start = self.origin; - forward = anglesToForward( self.angles ); - right = vectorcross( forward, ( 0, 0, 1 ) ); - up = vectorcross( forward, right ); - fullforward = forward * range * cos( angle ); - sideamnt = range * sin( angle ); - while ( 1 ) - { - prevpoint = ( 0, 0, 1 ); - i = 0; - while ( i <= 20 ) - { - coneangle = ( i / 20 ) * 360; - point = ( start + fullforward ) + ( sideamnt * ( ( right * cos( coneangle ) ) + ( up * sin( coneangle ) ) ) ); - if ( i > 0 ) - { - line( start, point, color ); - line( prevpoint, point, color ); - } - prevpoint = point; - i++; - } - wait 0,05; -#/ - } -} - -weaponobjectdetectionmovable( ownerteam ) -{ - self endon( "end_detection" ); - level endon( "game_ended" ); - self endon( "death" ); - self endon( "hacked" ); - if ( level.oldschool ) - { - return; - } - if ( !level.teambased ) - { - return; - } - self.detectid = "rcBomb" + getTime() + randomint( 1000000 ); - while ( !level.gameended ) - { - wait 1; - players = get_players(); - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - if ( isai( player ) ) - { - i++; - continue; - } - else if ( isDefined( self.model_name ) && player hasperk( "specialty_detectexplosive" ) ) - { - switch( self.model_name ) - { - case "t6_wpn_c4_world_detect": - case "t6_wpn_claymore_world_detect": - break; - default: - } - } - else if ( player.team == ownerteam ) - { - i++; - continue; - } - else if ( isDefined( player.bombsquadids[ self.detectid ] ) ) - { - i++; - continue; - } - i++; - } - } - } -} - -seticonpos( item, icon, heightincrease ) -{ - icon.x = item.origin[ 0 ]; - icon.y = item.origin[ 1 ]; - icon.z = item.origin[ 2 ] + heightincrease; -} - -weaponobjectdetectiontrigger_wait( ownerteam ) -{ - self endon( "death" ); - self endon( "hacked" ); - waittillnotmoving(); - if ( level.oldschool ) - { - return; - } - self thread weaponobjectdetectiontrigger( ownerteam ); -} - -weaponobjectdetectiontrigger( ownerteam ) -{ - trigger = spawn( "trigger_radius", self.origin - vectorScale( ( 0, 0, 1 ), 128 ), 0, 512, 256 ); - trigger.detectid = "trigger" + getTime() + randomint( 1000000 ); - trigger sethintlowpriority( 1 ); - self waittill_any( "death", "hacked" ); - trigger notify( "end_detection" ); - if ( isDefined( trigger.bombsquadicon ) ) - { - trigger.bombsquadicon destroy(); - } - trigger delete(); -} - -hackertriggersetvisibility( owner ) -{ - self endon( "death" ); -/# - assert( isplayer( owner ) ); -#/ - ownerteam = owner.pers[ "team" ]; - for ( ;; ) - { - if ( level.teambased ) - { - self setvisibletoallexceptteam( ownerteam ); - self setexcludeteamfortrigger( ownerteam ); - } - else - { - self setvisibletoall(); - self setteamfortrigger( "none" ); - } - self setinvisibletoplayer( owner ); - level waittill_any( "player_spawned", "joined_team" ); - } -} - -hackernotmoving() -{ - self endon( "death" ); - self waittillnotmoving(); - self notify( "landed" ); -} - -hackerinit( watcher ) -{ - self thread hackernotmoving(); - event = self waittill_any_return( "death", "landed" ); - if ( event == "death" ) - { - return; - } - triggerorigin = self.origin; - if ( isDefined( self.name ) && self.name == "satchel_charge_mp" ) - { - triggerorigin = self gettagorigin( "tag_fx" ); - } - self.hackertrigger = spawn( "trigger_radius_use", triggerorigin, level.weaponobjects_hacker_trigger_width, level.weaponobjects_hacker_trigger_height ); -/# -#/ - self.hackertrigger sethintlowpriority( 1 ); - self.hackertrigger setcursorhint( "HINT_NOICON", self ); - self.hackertrigger setignoreentfortrigger( self ); - self.hackertrigger enablelinkto(); - self.hackertrigger linkto( self ); - if ( isDefined( level.hackerhints[ self.name ] ) ) - { - self.hackertrigger sethintstring( level.hackerhints[ self.name ].hint ); - } - else - { - self.hackertrigger sethintstring( &"MP_GENERIC_HACKING" ); - } - self.hackertrigger setperkfortrigger( "specialty_disarmexplosive" ); - self.hackertrigger thread hackertriggersetvisibility( self.owner ); - self thread hackerthink( self.hackertrigger, watcher ); -} - -hackerthink( trigger, watcher ) -{ - self endon( "death" ); - for ( ;; ) - { - trigger waittill( "trigger", player, instant ); - if ( !isDefined( instant ) && !trigger hackerresult( player, self.owner ) ) - { - continue; - } - else - { - self.owner hackerremoveweapon( self ); - self.owner maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "hacked_equip", "item_destroyed" ); - self.hacked = 1; - self setmissileowner( player ); - self setteam( player.pers[ "team" ] ); - self.owner = player; - if ( isweaponequipment( self.name ) ) - { - } - if ( self.name == "satchel_charge_mp" && isDefined( player.lowermessage ) ) - { - player.lowermessage settext( &"PLATFORM_SATCHEL_CHARGE_DOUBLE_TAP" ); - player.lowermessage.alpha = 1; - player.lowermessage fadeovertime( 2 ); - player.lowermessage.alpha = 0; - } - self notify( "hacked" ); - level notify( "hacked" ); - if ( self.name == "camera_spike_mp" && isDefined( self.camerahead ) ) - { - self.camerahead notify( "hacked" ); - } -/# -#/ - if ( isDefined( watcher.stun ) ) - { - self thread stunstart( watcher, 0,75 ); - wait 0,75; - } - else - { - wait 0,05; - } - if ( isDefined( player ) && player.sessionstate == "playing" ) - { - player notify( "grenade_fire" ); - } - else - { - watcher thread waitanddetonate( self, 0 ); - } - return; - } - } -} - -ishacked() -{ - if ( isDefined( self.hacked ) ) - { - return self.hacked; - } -} - -hackerunfreezeplayer( player ) -{ - self endon( "hack_done" ); - self waittill( "death" ); - if ( isDefined( player ) ) - { - player freeze_player_controls( 0 ); - player enableweapons(); - } -} - -hackerresult( player, owner ) -{ - success = 1; - time = getTime(); - hacktime = getDvarFloat( "perk_disarmExplosiveTime" ); - if ( !canhack( player, owner, 1 ) ) - { - return 0; - } - self thread hackerunfreezeplayer( player ); - while ( ( time + ( hacktime * 1000 ) ) > getTime() ) - { - if ( !canhack( player, owner, 0 ) ) - { - success = 0; - break; - } - else if ( !player usebuttonpressed() ) - { - success = 0; - break; - } - else if ( !isDefined( self ) ) - { - success = 0; - break; - } - else - { - player freeze_player_controls( 1 ); - player disableweapons(); - if ( !isDefined( self.progressbar ) ) - { - self.progressbar = player createprimaryprogressbar(); - self.progressbar.lastuserate = -1; - self.progressbar showelem(); - self.progressbar updatebar( 0,01, 1 / hacktime ); - self.progresstext = player createprimaryprogressbartext(); - self.progresstext settext( &"MP_HACKING" ); - self.progresstext showelem(); - player playlocalsound( "evt_hacker_hacking" ); - } - wait 0,05; - } - } - if ( isDefined( player ) ) - { - player freeze_player_controls( 0 ); - player enableweapons(); - } - if ( isDefined( self.progressbar ) ) - { - self.progressbar destroyelem(); - self.progresstext destroyelem(); - } - if ( isDefined( self ) ) - { - self notify( "hack_done" ); - } - return success; -} - -canhack( player, owner, weapon_check ) -{ - if ( !isDefined( player ) ) - { - return 0; - } - if ( !isplayer( player ) ) - { - return 0; - } - if ( !isalive( player ) ) - { - return 0; - } - if ( !isDefined( owner ) ) - { - return 0; - } - if ( owner == player ) - { - return 0; - } - if ( level.teambased && player.team == owner.team ) - { - return 0; - } - if ( isDefined( player.isdefusing ) && player.isdefusing ) - { - return 0; - } - if ( isDefined( player.isplanting ) && player.isplanting ) - { - return 0; - } - if ( isDefined( player.proxbar ) && !player.proxbar.hidden ) - { - return 0; - } - if ( isDefined( player.revivingteammate ) && player.revivingteammate == 1 ) - { - return 0; - } - if ( !player isonground() ) - { - return 0; - } - if ( player isinvehicle() ) - { - return 0; - } - if ( player isweaponviewonlylinked() ) - { - return 0; - } - if ( !player hasperk( "specialty_disarmexplosive" ) ) - { - return 0; - } - if ( player isempjammed() ) - { - return 0; - } - if ( isDefined( player.laststand ) && player.laststand ) - { - return 0; - } - if ( weapon_check ) - { - if ( player isthrowinggrenade() ) - { - return 0; - } - if ( player isswitchingweapons() ) - { - return 0; - } - if ( player ismeleeing() ) - { - return 0; - } - weapon = player getcurrentweapon(); - if ( !isDefined( weapon ) ) - { - return 0; - } - if ( weapon == "none" ) - { - return 0; - } - if ( isweaponequipment( weapon ) && player isfiring() ) - { - return 0; - } - if ( isweaponspecificuse( weapon ) ) - { - return 0; - } - } - return 1; -} - -hackerremoveweapon( weapon ) -{ - i = 0; - while ( i < self.weaponobjectwatcherarray.size ) - { - if ( self.weaponobjectwatcherarray[ i ].weapon != weapon.name ) - { - i++; - continue; - } - else - { - objectarray_size = self.weaponobjectwatcherarray[ i ].objectarray.size; - j = 0; - while ( j < objectarray_size ) - { - self.weaponobjectwatcherarray[ i ].objectarray = deleteweaponobject( self.weaponobjectwatcherarray[ i ], weapon ); - j++; - } - return; - } - i++; - } -} - -proximityweaponobjectdetonation( watcher ) -{ - self endon( "death" ); - self endon( "hacked" ); - self waittillnotmoving(); - if ( isDefined( watcher.activationdelay ) ) - { - wait watcher.activationdelay; - } - damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - watcher.detonateradius ), level.aitriggerspawnflags | level.vehicletriggerspawnflags, watcher.detonateradius, watcher.detonateradius * 2 ); - damagearea enablelinkto(); - damagearea linkto( self ); - self thread deleteondeath( damagearea ); - up = anglesToUp( self.angles ); - traceorigin = self.origin + up; - while ( 1 ) - { - damagearea waittill( "trigger", ent ); - while ( getDvarInt( #"38868733" ) != 1 ) - { - if ( isDefined( self.owner ) && ent == self.owner ) - { - continue; - } - while ( isDefined( self.owner ) && isvehicle( ent ) && isDefined( ent.owner ) && self.owner == ent.owner ) - { - continue; - } - while ( !friendlyfirecheck( self.owner, ent, 0 ) ) - { - continue; - } - } - if ( lengthsquared( ent getvelocity() ) < 10 && !isDefined( watcher.immediatedetonation ) ) - { - continue; - } - while ( !ent shouldaffectweaponobject( self, watcher ) ) - { - continue; - } - while ( self isstunned() ) - { - continue; - } - if ( isplayer( ent ) && !isalive( ent ) ) - { - continue; - } - if ( ent damageconetrace( traceorigin, self ) > 0 ) - { - break; - } - else - { - } - } - if ( isDefined( watcher.activatesound ) ) - { - self playsound( watcher.activatesound ); - } - if ( isDefined( watcher.activatefx ) ) - { - self setclientflag( 4 ); - } - ent thread deathdodger( watcher.detectiongraceperiod ); - wait watcher.detectiongraceperiod; - if ( isplayer( ent ) && ent hasperk( "specialty_delayexplosive" ) ) - { - wait getDvarFloat( "perk_delayExplosiveTime" ); - } - self.origin = traceorigin; - if ( isDefined( self.owner ) && isplayer( self.owner ) ) - { - self [[ watcher.detonate ]]( self.owner ); - } - else self [[ watcher.detonate ]](); -} - -shouldaffectweaponobject( object, watcher ) -{ - pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 ); - if ( isDefined( watcher.ignoredirection ) ) - { - return 1; - } - dirtopos = pos - object.origin; - objectforward = anglesToForward( object.angles ); - dist = vectordot( dirtopos, objectforward ); - if ( dist < watcher.detectionmindist ) - { - return 0; - } - dirtopos = vectornormalize( dirtopos ); - dot = vectordot( dirtopos, objectforward ); - return dot > watcher.detectiondot; -} - -deathdodger( graceperiod ) -{ - self endon( "death" ); - self endon( "disconnect" ); - wait ( 0,2 + graceperiod ); - self notify( "death_dodger" ); -} - -deleteondeath( ent ) -{ - self waittill_any( "death", "hacked" ); - wait 0,05; - if ( isDefined( ent ) ) - { - ent delete(); - } -} - -deleteonkillbrush( player ) -{ - player endon( "disconnect" ); - self endon( "death" ); - self endon( "stationary" ); - killbrushes = getentarray( "trigger_hurt", "classname" ); - while ( 1 ) - { - i = 0; - while ( i < killbrushes.size ) - { - if ( self istouching( killbrushes[ i ] ) ) - { - if ( self.origin[ 2 ] > player.origin[ 2 ] ) - { - break; - } - else - { - if ( isDefined( self ) ) - { - self delete(); - } - return; - } - i++; - } - } - wait 0,1; - } -} - -watchweaponobjectaltdetonation() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "alt_detonate" ); - while ( !isalive( self ) ) - { - continue; - } - watcher = 0; - while ( watcher < self.weaponobjectwatcherarray.size ) - { - if ( self.weaponobjectwatcherarray[ watcher ].altdetonate ) - { - self.weaponobjectwatcherarray[ watcher ] detonateweaponobjectarray( 0 ); - } - watcher++; - } - } -} - -watchweaponobjectaltdetonate() -{ - self endon( "disconnect" ); - self endon( "detonated" ); - level endon( "game_ended" ); - buttontime = 0; - for ( ;; ) - { - self waittill( "doubletap_detonate" ); - if ( !isalive( self ) ) - { - continue; - } - else - { - self notify( "alt_detonate" ); - wait 0,05; - } - } -} - -watchweaponobjectdetonation() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "detonate" ); - if ( self isusingoffhand() ) - { - weap = self getcurrentoffhand(); - } - else - { - weap = self getcurrentweapon(); - } - watcher = getweaponobjectwatcherbyweapon( weap ); - if ( isDefined( watcher ) ) - { - watcher detonateweaponobjectarray( 0 ); - } - } -} - -deleteweaponobjectson() -{ - while ( 1 ) - { - msg = self waittill_any_return( "disconnect", "joined_team", "joined_spectators", "death" ); - while ( msg == "death" ) - { - continue; - } - if ( !isDefined( self.weaponobjectwatcherarray ) ) - { - return; - } - watchers = []; - watcher = 0; - while ( watcher < self.weaponobjectwatcherarray.size ) - { - weaponobjectwatcher = spawnstruct(); - watchers[ watchers.size ] = weaponobjectwatcher; - weaponobjectwatcher.objectarray = []; - if ( isDefined( self.weaponobjectwatcherarray[ watcher ].objectarray ) ) - { - weaponobjectwatcher.objectarray = self.weaponobjectwatcherarray[ watcher ].objectarray; - } - watcher++; - } - wait 0,05; - watcher = 0; - while ( watcher < watchers.size ) - { - watchers[ watcher ] deleteweaponobjectarray(); - watcher++; - } - if ( msg == "disconnect" ) - { - return; - } - } -} - -saydamaged( orig, amount ) -{ -/# - i = 0; - while ( i < 60 ) - { - print3d( orig, "damaged! " + amount ); - wait 0,05; - i++; -#/ - } -} - -showheadicon( trigger ) -{ - triggerdetectid = trigger.detectid; - useid = -1; - index = 0; - while ( index < 4 ) - { - detectid = self.bombsquadicons[ index ].detectid; - if ( detectid == triggerdetectid ) - { - return; - } - if ( detectid == "" ) - { - useid = index; - } - index++; - } - if ( useid < 0 ) - { - return; - } - self.bombsquadids[ triggerdetectid ] = 1; - self.bombsquadicons[ useid ].x = trigger.origin[ 0 ]; - self.bombsquadicons[ useid ].y = trigger.origin[ 1 ]; - self.bombsquadicons[ useid ].z = trigger.origin[ 2 ] + 24 + 128; - self.bombsquadicons[ useid ] fadeovertime( 0,25 ); - self.bombsquadicons[ useid ].alpha = 1; - self.bombsquadicons[ useid ].detectid = trigger.detectid; - while ( isalive( self ) && isDefined( trigger ) && self istouching( trigger ) ) - { - wait 0,05; - } - if ( !isDefined( self ) ) - { - return; - } - self.bombsquadicons[ useid ].detectid = ""; - self.bombsquadicons[ useid ] fadeovertime( 0,25 ); - self.bombsquadicons[ useid ].alpha = 0; -} - -friendlyfirecheck( owner, attacker, forcedfriendlyfirerule ) -{ - if ( !isDefined( owner ) ) - { - return 1; - } - if ( !level.teambased ) - { - return 1; - } - friendlyfirerule = level.friendlyfire; - if ( isDefined( forcedfriendlyfirerule ) ) - { - friendlyfirerule = forcedfriendlyfirerule; - } - if ( friendlyfirerule != 0 ) - { - return 1; - } - if ( attacker == owner ) - { - return 1; - } - if ( isplayer( attacker ) ) - { - if ( !isDefined( attacker.pers[ "team" ] ) ) - { - return 1; - } - if ( attacker.pers[ "team" ] != owner.pers[ "team" ] ) - { - return 1; - } - } - else - { - if ( isai( attacker ) ) - { - if ( attacker.aiteam != owner.pers[ "team" ] ) - { - return 1; - } - } - else - { - if ( isvehicle( attacker ) ) - { - if ( isDefined( attacker.owner ) && isplayer( attacker.owner ) ) - { - if ( attacker.owner.pers[ "team" ] != owner.pers[ "team" ] ) - { - return 1; - } - } - } - } - } - return 0; -} - -onspawnhatchettrigger( watcher, player ) -{ - self endon( "death" ); - self setowner( player ); - self setteam( player.pers[ "team" ] ); - self.owner = player; - self.oldangles = self.angles; - self waittillnotmoving(); - waittillframeend; - if ( player.pers[ "team" ] == "spectator" ) - { - return; - } - triggerorigin = self.origin; - triggerparentent = undefined; - if ( isDefined( self.stucktoplayer ) ) - { - if ( isalive( self.stucktoplayer ) || !isDefined( self.stucktoplayer.body ) ) - { - if ( isalive( self.stucktoplayer ) ) - { - triggerparentent = self; - self unlink(); - self.angles = self.oldangles; - self launch( vectorScale( ( 0, 0, 1 ), 5 ) ); - self waittillnotmoving(); - waittillframeend; - } - else - { - triggerparentent = self.stucktoplayer; - } - } - else - { - triggerparentent = self.stucktoplayer.body; - } - } - if ( isDefined( triggerparentent ) ) - { - triggerorigin = triggerparentent.origin + vectorScale( ( 0, 0, 1 ), 10 ); - } - self.hatchetpickuptrigger = spawn( "trigger_radius", triggerorigin, 0, 50, 50 ); - self.hatchetpickuptrigger enablelinkto(); - self.hatchetpickuptrigger linkto( self ); - if ( isDefined( triggerparentent ) ) - { - self.hatchetpickuptrigger linkto( triggerparentent ); - } - self thread watchhatchettrigger( self.hatchetpickuptrigger, watcher.pickup, watcher.pickupsoundplayer, watcher.pickupsound ); -/# - thread switch_team( self, watcher.weapon, player ); -#/ - self thread watchshutdown( player ); -} - -watchhatchettrigger( trigger, callback, playersoundonuse, npcsoundonuse ) -{ - self endon( "delete" ); - self endon( "hacked" ); - while ( 1 ) - { - trigger waittill( "trigger", player ); - while ( !isalive( player ) ) - { - continue; - } - while ( !player isonground() ) - { - continue; - } - if ( isDefined( trigger.claimedby ) && player != trigger.claimedby ) - { - continue; - } - while ( !player hasweapon( self.name ) ) - { - continue; - } - curr_ammo = player getweaponammostock( "hatchet_mp" ); - maxammo = weaponmaxammo( "hatchet_mp" ); - if ( player.grenadetypeprimary == "hatchet_mp" ) - { - maxammo = player.grenadetypeprimarycount; - } - else - { - if ( isDefined( player.grenadetypesecondary ) && player.grenadetypesecondary == "hatchet_mp" ) - { - maxammo = player.grenadetypesecondarycount; - } - } - while ( curr_ammo >= maxammo ) - { - continue; - } - if ( isDefined( playersoundonuse ) ) - { - player playlocalsound( playersoundonuse ); - } - if ( isDefined( npcsoundonuse ) ) - { - player playsound( npcsoundonuse ); - } - self thread [[ callback ]]( player ); - } -} - -onspawnretrievableweaponobject( watcher, player ) -{ - self endon( "death" ); - self endon( "hacked" ); - if ( ishacked() ) - { - self thread watchshutdown( player ); - return; - } - self setowner( player ); - self setteam( player.pers[ "team" ] ); - self.owner = player; - self.oldangles = self.angles; - self waittillnotmoving(); - if ( isDefined( watcher.activationdelay ) ) - { - wait watcher.activationdelay; - } - waittillframeend; - if ( player.pers[ "team" ] == "spectator" ) - { - return; - } - triggerorigin = self.origin; - triggerparentent = undefined; - if ( isDefined( self.stucktoplayer ) ) - { - if ( isalive( self.stucktoplayer ) || !isDefined( self.stucktoplayer.body ) ) - { - triggerparentent = self.stucktoplayer; - } - else - { - triggerparentent = self.stucktoplayer.body; - } - } - if ( isDefined( triggerparentent ) ) - { - triggerorigin = triggerparentent.origin + vectorScale( ( 0, 0, 1 ), 10 ); - } - else - { - up = anglesToUp( self.angles ); - triggerorigin = self.origin + up; - } - if ( isDefined( watcher.adjusttriggerorigin ) ) - { - triggerorigin = self [[ watcher.adjusttriggerorigin ]]( triggerorigin ); - } - self.pickuptrigger = spawn( "trigger_radius_use", triggerorigin ); - self.pickuptrigger sethintlowpriority( 1 ); - self.pickuptrigger setcursorhint( "HINT_NOICON", self ); - self.pickuptrigger enablelinkto(); - self.pickuptrigger linkto( self ); - self.pickuptrigger setinvisibletoall(); - self.pickuptrigger setvisibletoplayer( player ); - if ( isDefined( level.retrievehints[ watcher.name ] ) ) - { - self.pickuptrigger sethintstring( level.retrievehints[ watcher.name ].hint ); - } - else - { - self.pickuptrigger sethintstring( &"MP_GENERIC_PICKUP" ); - } - if ( level.teambased ) - { - self.pickuptrigger setteamfortrigger( player.pers[ "team" ] ); - } - else - { - self.pickuptrigger setteamfortrigger( "none" ); - } - if ( isDefined( triggerparentent ) ) - { - self.pickuptrigger linkto( triggerparentent ); - } - if ( watcher.enemydestroy ) - { - self.enemytrigger = spawn( "trigger_radius_use", triggerorigin ); - self.enemytrigger setcursorhint( "HINT_NOICON", self ); - self.enemytrigger enablelinkto(); - self.enemytrigger linkto( self ); - self.enemytrigger setinvisibletoplayer( player ); - if ( level.teambased ) - { - self.enemytrigger setexcludeteamfortrigger( player.team ); - self.enemytrigger.triggerteamignore = self.team; - } - if ( isDefined( level.destroyhints[ watcher.name ] ) ) - { - self.enemytrigger sethintstring( level.destroyhints[ watcher.name ].hint ); - } - else - { - self.enemytrigger sethintstring( &"MP_GENERIC_DESTROY" ); - } - self thread watchusetrigger( self.enemytrigger, watcher.ondestroyed ); - } - self thread watchusetrigger( self.pickuptrigger, watcher.pickup, watcher.pickupsoundplayer, watcher.pickupsound ); -/# - thread switch_team( self, watcher.weapon, player ); -#/ - if ( isDefined( watcher.pickup_trigger_listener ) ) - { - self thread [[ watcher.pickup_trigger_listener ]]( self.pickuptrigger, player ); - } - self thread watchshutdown( player ); -} - -watch_trigger_visibility( triggers, weap_name ) -{ - self notify( "watchTriggerVisibility" ); - self endon( "watchTriggerVisibility" ); - self endon( "death" ); - self endon( "hacked" ); - max_ammo = weaponmaxammo( weap_name ); - start_ammo = weaponstartammo( weap_name ); - ammo_to_check = 0; - while ( 1 ) - { - players = level.players; - i = 0; - while ( i < players.size ) - { - if ( players[ i ] hasweapon( weap_name ) ) - { - ammo_to_check = max_ammo; - if ( self.owner == players[ i ] ) - { - curr_ammo = players[ i ] getweaponammostock( weap_name ) + players[ i ] getweaponammoclip( weap_name ); - if ( weap_name == "hatchet_mp" ) - { - curr_ammo = players[ i ] getweaponammostock( weap_name ); - } - if ( curr_ammo < ammo_to_check ) - { - triggers[ "owner_pickup" ] setvisibletoplayer( players[ i ] ); - triggers[ "enemy_pickup" ] setinvisibletoplayer( players[ i ] ); - } - else - { - triggers[ "owner_pickup" ] setinvisibletoplayer( players[ i ] ); - triggers[ "enemy_pickup" ] setinvisibletoplayer( players[ i ] ); - } - } - else curr_ammo = players[ i ] getweaponammostock( weap_name ) + players[ i ] getweaponammoclip( weap_name ); - if ( weap_name == "hatchet_mp" ) - { - curr_ammo = players[ i ] getweaponammostock( weap_name ); - } - if ( curr_ammo < ammo_to_check ) - { - triggers[ "owner_pickup" ] setinvisibletoplayer( players[ i ] ); - triggers[ "enemy_pickup" ] setvisibletoplayer( players[ i ] ); - } - else - { - triggers[ "owner_pickup" ] setinvisibletoplayer( players[ i ] ); - triggers[ "enemy_pickup" ] setinvisibletoplayer( players[ i ] ); - } - i++; - continue; - } - else - { - triggers[ "owner_pickup" ] setinvisibletoplayer( players[ i ] ); - triggers[ "enemy_pickup" ] setinvisibletoplayer( players[ i ] ); - } - i++; - } - wait 0,05; - } -} - -destroyent() -{ - self delete(); -} - -pickup( player ) -{ - if ( self.name != "hatchet_mp" && isDefined( self.owner ) && self.owner != player ) - { - return; - } - self.playdialog = 0; - self destroyent(); - player giveweapon( self.name ); - clip_ammo = player getweaponammoclip( self.name ); - clip_max_ammo = weaponclipsize( self.name ); - if ( clip_ammo < clip_max_ammo ) - { - clip_ammo++; - } - player setweaponammoclip( self.name, clip_ammo ); -} - -ondestroyed( attacker ) -{ - playfx( level._effect[ "tacticalInsertionFizzle" ], self.origin ); - self playsound( "dst_tac_insert_break" ); - self.owner maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "equipment_destroyed", "item_destroyed" ); - self delete(); -} - -watchshutdown( player ) -{ - self waittill_any( "death", "hacked" ); - pickuptrigger = self.pickuptrigger; - hackertrigger = self.hackertrigger; - hatchetpickuptrigger = self.hatchetpickuptrigger; - enemytrigger = self.enemytrigger; - if ( isDefined( pickuptrigger ) ) - { - pickuptrigger delete(); - } - if ( isDefined( hackertrigger ) ) - { - if ( isDefined( hackertrigger.progressbar ) ) - { - hackertrigger.progressbar destroyelem(); - hackertrigger.progresstext destroyelem(); - } - hackertrigger delete(); - } - if ( isDefined( hatchetpickuptrigger ) ) - { - hatchetpickuptrigger delete(); - } - if ( isDefined( enemytrigger ) ) - { - enemytrigger delete(); - } -} - -watchusetrigger( trigger, callback, playersoundonuse, npcsoundonuse ) -{ - self endon( "delete" ); - self endon( "hacked" ); - while ( 1 ) - { - trigger waittill( "trigger", player ); - while ( !isalive( player ) ) - { - continue; - } - while ( !player isonground() ) - { - continue; - } - if ( isDefined( trigger.triggerteam ) && player.pers[ "team" ] != trigger.triggerteam ) - { - continue; - } - if ( isDefined( trigger.triggerteamignore ) && player.team == trigger.triggerteamignore ) - { - continue; - } - if ( isDefined( trigger.claimedby ) && player != trigger.claimedby ) - { - continue; - } - grenade = player.throwinggrenade; - isequipment = isweaponequipment( player getcurrentweapon() ); - if ( isDefined( isequipment ) && isequipment ) - { - grenade = 0; - } - if ( player usebuttonpressed() && !grenade && !player meleebuttonpressed() ) - { - if ( isDefined( playersoundonuse ) ) - { - player playlocalsound( playersoundonuse ); - } - if ( isDefined( npcsoundonuse ) ) - { - player playsound( npcsoundonuse ); - } - self thread [[ callback ]]( player ); - } - } -} - -createretrievablehint( name, hint ) -{ - retrievehint = spawnstruct(); - retrievehint.name = name; - retrievehint.hint = hint; - level.retrievehints[ name ] = retrievehint; -} - -createhackerhint( name, hint ) -{ - hackerhint = spawnstruct(); - hackerhint.name = name; - hackerhint.hint = hint; - level.hackerhints[ name ] = hackerhint; -} - -createdestroyhint( name, hint ) -{ - destroyhint = spawnstruct(); - destroyhint.name = name; - destroyhint.hint = hint; - level.destroyhints[ name ] = destroyhint; -} - -attachreconmodel( modelname, owner ) -{ - if ( !isDefined( self ) ) - { - return; - } - reconmodel = spawn( "script_model", self.origin ); - reconmodel.angles = self.angles; - reconmodel setmodel( modelname ); - reconmodel.model_name = modelname; - reconmodel linkto( self ); - reconmodel setcontents( 0 ); - reconmodel resetreconmodelvisibility( owner ); - reconmodel thread watchreconmodelfordeath( self ); - reconmodel thread resetreconmodelonevent( "joined_team", owner ); - reconmodel thread resetreconmodelonevent( "player_spawned", owner ); -} - -resetreconmodelvisibility( owner ) -{ - if ( !isDefined( self ) ) - { - return; - } - self setinvisibletoall(); - self setforcenocull(); - if ( !isDefined( owner ) ) - { - return; - } - i = 0; - while ( i < level.players.size ) - { - if ( !level.players[ i ] hasperk( "specialty_detectexplosive" ) && !level.players[ i ] hasperk( "specialty_showenemyequipment" ) ) - { - i++; - continue; - } - else - { - if ( level.players[ i ].team == "spectator" ) - { - i++; - continue; - } - else hasreconmodel = 0; - if ( level.players[ i ] hasperk( "specialty_detectexplosive" ) ) - { - switch( self.model_name ) - { - case "t6_wpn_c4_world_detect": - case "t6_wpn_claymore_world_detect": - hasreconmodel = 1; - break; - break; - default: - } - } - if ( level.players[ i ] hasperk( "specialty_showenemyequipment" ) ) - { - switch( self.model_name ) - { - case "t5_weapon_scrambler_world_detect": - case "t6_wpn_bouncing_betty_world_detect": - case "t6_wpn_c4_world_detect": - case "t6_wpn_claymore_world_detect": - case "t6_wpn_motion_sensor_world_detect": - case "t6_wpn_tac_insert_detect": - case "t6_wpn_taser_mine_world_detect": - case "t6_wpn_trophy_system_world_detect": - hasreconmodel = 1; - break; - break; - default: - } - } - if ( !hasreconmodel ) - { - i++; - continue; - } - else isenemy = 1; - if ( level.teambased ) - { - if ( level.players[ i ].team == owner.team ) - { - isenemy = 0; - } - } - else - { - if ( level.players[ i ] == owner ) - { - isenemy = 0; - } - } - if ( isenemy ) - { - self setvisibletoplayer( level.players[ i ] ); - } - } - i++; - } - } - } -} - -watchreconmodelfordeath( parentent ) -{ - self endon( "death" ); - parentent waittill_any( "death", "hacked" ); - self delete(); -} - -resetreconmodelonevent( eventname, owner ) -{ - self endon( "death" ); - for ( ;; ) - { - level waittill( eventname, newowner ); - if ( isDefined( newowner ) ) - { - owner = newowner; - } - self resetreconmodelvisibility( owner ); - } -} - -switch_team( entity, weapon_name, owner ) -{ -/# -#/ -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_weapons.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_weapons.gsc deleted file mode 100644 index 16e4ea3..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_weapons.gsc +++ /dev/null @@ -1,2023 +0,0 @@ -#include maps/mp/gametypes_zm/_gameobjects; -#include maps/mp/gametypes_zm/_shellshock; -#include maps/mp/gametypes_zm/_globallogic_utils; -#include maps/mp/_challenges; -#include maps/mp/gametypes_zm/_weapons; -#include maps/mp/_bb; -#include maps/mp/gametypes_zm/_weapon_utils; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - precacheitem( "knife_mp" ); - precacheitem( "knife_held_mp" ); - precacheitem( "dogs_mp" ); - precacheitem( "dog_bite_mp" ); - precacheitem( "explosive_bolt_mp" ); - precachemodel( "t6_wpn_claymore_world_detect" ); - precachemodel( "t6_wpn_c4_world_detect" ); - precachemodel( "t5_weapon_scrambler_world_detect" ); - precachemodel( "t6_wpn_tac_insert_detect" ); - precachemodel( "t6_wpn_taser_mine_world_detect" ); - precachemodel( "t6_wpn_motion_sensor_world_detect" ); - precachemodel( "t6_wpn_trophy_system_world_detect" ); - precachemodel( "t6_wpn_bouncing_betty_world_detect" ); - precachemodel( "t6_wpn_shield_stow_world" ); - precachemodel( "t6_wpn_shield_carry_world" ); - precachemodel( "t5_weapon_camera_head_world" ); - precacheitem( "scavenger_item_mp" ); - precacheitem( "scavenger_item_hack_mp" ); - precacheshader( "hud_scavenger_pickup" ); - precacheshellshock( "default" ); - precacheshellshock( "concussion_grenade_mp" ); - precacheshellshock( "tabun_gas_mp" ); - precacheshellshock( "tabun_gas_nokick_mp" ); - precacheshellshock( "proximity_grenade" ); - precacheshellshock( "proximity_grenade_exit" ); - level.missileentities = []; - level.hackertooltargets = []; - if ( !isDefined( level.grenadelauncherdudtime ) ) - { - level.grenadelauncherdudtime = 0; - } - if ( !isDefined( level.throwngrenadedudtime ) ) - { - level.throwngrenadedudtime = 0; - } - level thread onplayerconnect(); - maps/mp/gametypes_zm/_weaponobjects::init(); - maps/mp/_sticky_grenade::init(); -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player.usedweapons = 0; - player.lastfiretime = 0; - player.hits = 0; - player scavenger_hud_create(); - player thread onplayerspawned(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self.concussionendtime = 0; - self.hasdonecombat = 0; - self.shielddamageblocked = 0; - self thread watchweaponusage(); - self thread watchgrenadeusage(); - self thread watchmissileusage(); - self thread watchweaponchange(); - self thread watchturretuse(); - self thread watchriotshielduse(); - self thread trackweapon(); - self.droppeddeathweapon = undefined; - self.tookweaponfrom = []; - self.pickedupweaponkills = []; - self thread updatestowedweapon(); - } -} - -watchturretuse() -{ - self endon( "death" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "turretownerchange", turret ); - self thread watchfortowfire( turret ); - } -} - -watchfortowfire( turret ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "turretownerchange" ); - while ( 1 ) - { - self waittill( "turret_tow_fire" ); - self thread watchmissleunlink( turret ); - self waittill( "turret_tow_unlink" ); - } -} - -watchmissleunlink( turret ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "turretownerchange" ); - self waittill( "turret_tow_unlink" ); - self relinktoturret( turret ); -} - -watchweaponchange() -{ - self endon( "death" ); - self endon( "disconnect" ); - self.lastdroppableweapon = self getcurrentweapon(); - self.hitsthismag = []; - weapon = self getcurrentweapon(); - if ( isprimaryweapon( weapon ) && !isDefined( self.hitsthismag[ weapon ] ) ) - { - self.hitsthismag[ weapon ] = weaponclipsize( weapon ); - } - while ( 1 ) - { - previous_weapon = self getcurrentweapon(); - self waittill( "weapon_change", newweapon ); - if ( maydropweapon( newweapon ) ) - { - self.lastdroppableweapon = newweapon; - } - if ( newweapon != "none" ) - { - if ( !isprimaryweapon( newweapon ) && issidearm( newweapon ) && !isDefined( self.hitsthismag[ newweapon ] ) ) - { - self.hitsthismag[ newweapon ] = weaponclipsize( newweapon ); - } - } - } -} - -watchriotshielduse() -{ -} - -updatelastheldweapontimings( newtime ) -{ - if ( isDefined( self.currentweapon ) && isDefined( self.currentweaponstarttime ) ) - { - totaltime = int( ( newtime - self.currentweaponstarttime ) / 1000 ); - if ( totaltime > 0 ) - { - self addweaponstat( self.currentweapon, "timeUsed", totaltime ); - self.currentweaponstarttime = newtime; - } - } -} - -updateweapontimings( newtime ) -{ - if ( self is_bot() ) - { - return; - } - updatelastheldweapontimings( newtime ); - if ( !isDefined( self.staticweaponsstarttime ) ) - { - return; - } - totaltime = int( ( newtime - self.staticweaponsstarttime ) / 1000 ); - if ( totaltime < 0 ) - { - return; - } - self.staticweaponsstarttime = newtime; - while ( isDefined( self.weapon_array_grenade ) ) - { - i = 0; - while ( i < self.weapon_array_grenade.size ) - { - self addweaponstat( self.weapon_array_grenade[ i ], "timeUsed", totaltime ); - i++; - } - } - while ( isDefined( self.weapon_array_inventory ) ) - { - i = 0; - while ( i < self.weapon_array_inventory.size ) - { - self addweaponstat( self.weapon_array_inventory[ i ], "timeUsed", totaltime ); - i++; - } - } - while ( isDefined( self.killstreak ) ) - { - i = 0; - while ( i < self.killstreak.size ) - { - killstreakweapon = level.menureferenceforkillstreak[ self.killstreak[ i ] ]; - if ( isDefined( killstreakweapon ) ) - { - self addweaponstat( killstreakweapon, "timeUsed", totaltime ); - } - i++; - } - } - while ( level.rankedmatch && level.perksenabled ) - { - perksindexarray = []; - specialtys = self.specialty; - if ( !isDefined( specialtys ) ) - { - return; - } - if ( !isDefined( self.class ) ) - { - return; - } - while ( isDefined( self.class_num ) ) - { - numspecialties = 0; - while ( numspecialties < level.maxspecialties ) - { - perk = self getloadoutitem( self.class_num, "specialty" + ( numspecialties + 1 ) ); - if ( perk != 0 ) - { - perksindexarray[ perk ] = 1; - } - numspecialties++; - } - perkindexarraykeys = getarraykeys( perksindexarray ); - i = 0; - while ( i < perkindexarraykeys.size ) - { - if ( perksindexarray[ perkindexarraykeys[ i ] ] == 1 ) - { - self adddstat( "itemStats", perkindexarraykeys[ i ], "stats", "timeUsed", "statValue", totaltime ); - } - i++; - } - } - } -} - -trackweapon() -{ - currentweapon = self getcurrentweapon(); - currenttime = getTime(); - spawnid = getplayerspawnid( self ); - while ( 1 ) - { - event = self waittill_any_return( "weapon_change", "death", "disconnect" ); - newtime = getTime(); - if ( event == "weapon_change" ) - { - self maps/mp/_bb::commitweapondata( spawnid, currentweapon, currenttime ); - newweapon = self getcurrentweapon(); - if ( newweapon != "none" && newweapon != currentweapon ) - { - updatelastheldweapontimings( newtime ); - currentweapon = newweapon; - currenttime = newtime; - } - continue; - } - else - { - if ( event != "disconnect" ) - { - self maps/mp/_bb::commitweapondata( spawnid, currentweapon, currenttime ); - updateweapontimings( newtime ); - } - return; - } - } -} - -maydropweapon( weapon ) -{ - if ( level.disableweapondrop == 1 ) - { - return 0; - } - if ( weapon == "none" ) - { - return 0; - } - if ( ishackweapon( weapon ) ) - { - return 0; - } - invtype = weaponinventorytype( weapon ); - if ( invtype != "primary" ) - { - return 0; - } - if ( weapon == "none" ) - { - return 0; - } - return 1; -} - -dropweaponfordeath( attacker ) -{ - if ( level.disableweapondrop == 1 ) - { - return; - } - weapon = self.lastdroppableweapon; - if ( isDefined( self.droppeddeathweapon ) ) - { - return; - } - if ( !isDefined( weapon ) ) - { -/# - if ( getDvar( #"08F7FC88" ) == "1" ) - { - println( "didn't drop weapon: not defined" ); -#/ - } - return; - } - if ( weapon == "none" ) - { -/# - if ( getDvar( #"08F7FC88" ) == "1" ) - { - println( "didn't drop weapon: weapon == none" ); -#/ - } - return; - } - if ( !self hasweapon( weapon ) ) - { -/# - if ( getDvar( #"08F7FC88" ) == "1" ) - { - println( "didn't drop weapon: don't have it anymore (" + weapon + ")" ); -#/ - } - return; - } - if ( !self anyammoforweaponmodes( weapon ) ) - { -/# - if ( getDvar( #"08F7FC88" ) == "1" ) - { - println( "didn't drop weapon: no ammo for weapon modes" ); -#/ - } - return; - } - if ( !shoulddroplimitedweapon( weapon, self ) ) - { - return; - } - clipammo = self getweaponammoclip( weapon ); - stockammo = self getweaponammostock( weapon ); - clip_and_stock_ammo = clipammo + stockammo; - if ( !clip_and_stock_ammo ) - { -/# - if ( getDvar( #"08F7FC88" ) == "1" ) - { - println( "didn't drop weapon: no ammo" ); -#/ - } - return; - } - stockmax = weaponmaxammo( weapon ); - if ( stockammo > stockmax ) - { - stockammo = stockmax; - } - item = self dropitem( weapon ); - if ( !isDefined( item ) ) - { -/# - iprintlnbold( "dropItem: was not able to drop weapon " + weapon ); -#/ - return; - } -/# - if ( getDvar( #"08F7FC88" ) == "1" ) - { - println( "dropped weapon: " + weapon ); -#/ - } - droplimitedweapon( weapon, self, item ); - self.droppeddeathweapon = 1; - item itemweaponsetammo( clipammo, stockammo ); - item.owner = self; - item.ownersattacker = attacker; - item thread watchpickup(); - item thread deletepickupafterawhile(); -} - -dropweapontoground( weapon ) -{ - if ( !isDefined( weapon ) ) - { -/# - if ( getDvar( #"08F7FC88" ) == "1" ) - { - println( "didn't drop weapon: not defined" ); -#/ - } - return; - } - if ( weapon == "none" ) - { -/# - if ( getDvar( #"08F7FC88" ) == "1" ) - { - println( "didn't drop weapon: weapon == none" ); -#/ - } - return; - } - if ( !self hasweapon( weapon ) ) - { -/# - if ( getDvar( #"08F7FC88" ) == "1" ) - { - println( "didn't drop weapon: don't have it anymore (" + weapon + ")" ); -#/ - } - return; - } - if ( !self anyammoforweaponmodes( weapon ) ) - { -/# - if ( getDvar( #"08F7FC88" ) == "1" ) - { - println( "didn't drop weapon: no ammo for weapon modes" ); -#/ - } - switch( weapon ) - { - case "m202_flash_mp": - case "m220_tow_mp": - case "m32_mp": - case "minigun_mp": - case "mp40_blinged_mp": - self takeweapon( weapon ); - break; - default: - } - return; - } - if ( !shoulddroplimitedweapon( weapon, self ) ) - { - return; - } - clipammo = self getweaponammoclip( weapon ); - stockammo = self getweaponammostock( weapon ); - clip_and_stock_ammo = clipammo + stockammo; - if ( !clip_and_stock_ammo ) - { -/# - if ( getDvar( #"08F7FC88" ) == "1" ) - { - println( "didn't drop weapon: no ammo" ); -#/ - } - return; - } - stockmax = weaponmaxammo( weapon ); - if ( stockammo > stockmax ) - { - stockammo = stockmax; - } - item = self dropitem( weapon ); -/# - if ( getDvar( #"08F7FC88" ) == "1" ) - { - println( "dropped weapon: " + weapon ); -#/ - } - droplimitedweapon( weapon, self, item ); - item itemweaponsetammo( clipammo, stockammo ); - item.owner = self; - item thread watchpickup(); - item thread deletepickupafterawhile(); - } -} - -deletepickupafterawhile() -{ - self endon( "death" ); - wait 60; - if ( !isDefined( self ) ) - { - return; - } - self delete(); -} - -getitemweaponname() -{ - classname = self.classname; -/# - assert( getsubstr( classname, 0, 7 ) == "weapon_" ); -#/ - weapname = getsubstr( classname, 7 ); - return weapname; -} - -watchpickup() -{ - self endon( "death" ); - weapname = self getitemweaponname(); - while ( 1 ) - { - self waittill( "trigger", player, droppeditem ); - if ( isDefined( droppeditem ) ) - { - break; - } - else - { - } - } -/# - if ( getDvar( #"08F7FC88" ) == "1" ) - { - println( "picked up weapon: " + weapname + ", " + isDefined( self.ownersattacker ) ); -#/ - } -/# - assert( isDefined( player.tookweaponfrom ) ); -#/ -/# - assert( isDefined( player.pickedupweaponkills ) ); -#/ - droppedweaponname = droppeditem getitemweaponname(); - if ( isDefined( player.tookweaponfrom[ droppedweaponname ] ) ) - { - droppeditem.owner = player.tookweaponfrom[ droppedweaponname ]; - droppeditem.ownersattacker = player; - } - droppeditem thread watchpickup(); - if ( isDefined( self.ownersattacker ) && self.ownersattacker == player ) - { - player.tookweaponfrom[ weapname ] = self.owner; - player.pickedupweaponkills[ weapname ] = 0; - } - else } - -itemremoveammofromaltmodes() -{ - origweapname = self getitemweaponname(); - curweapname = weaponaltweaponname( origweapname ); - altindex = 1; - while ( curweapname != "none" && curweapname != origweapname ) - { - self itemweaponsetammo( 0, 0, altindex ); - curweapname = weaponaltweaponname( curweapname ); - altindex++; - } -} - -dropoffhand() -{ - grenadetypes = []; - index = 0; - while ( index < grenadetypes.size ) - { - if ( !self hasweapon( grenadetypes[ index ] ) ) - { - index++; - continue; - } - else count = self getammocount( grenadetypes[ index ] ); - if ( !count ) - { - index++; - continue; - } - else - { - self dropitem( grenadetypes[ index ] ); - } - index++; - } -} - -watchweaponusage() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon( "game_ended" ); - self.usedkillstreakweapon = []; - self.usedkillstreakweapon[ "minigun_mp" ] = 0; - self.usedkillstreakweapon[ "m32_mp" ] = 0; - self.usedkillstreakweapon[ "m202_flash_mp" ] = 0; - self.usedkillstreakweapon[ "m220_tow_mp" ] = 0; - self.usedkillstreakweapon[ "mp40_blinged_mp" ] = 0; - self.killstreaktype = []; - self.killstreaktype[ "minigun_mp" ] = "minigun_mp"; - self.killstreaktype[ "m32_mp" ] = "m32_mp"; - self.killstreaktype[ "m202_flash_mp" ] = "m202_flash_mp"; - self.killstreaktype[ "m220_tow_mp" ] = "m220_tow_mp"; - self.killstreaktype[ "mp40_blinged_mp" ] = "mp40_blinged_drop_mp"; - for ( ;; ) - { - self waittill( "weapon_fired", curweapon ); - self.lastfiretime = getTime(); - self.hasdonecombat = 1; - if ( maps/mp/gametypes_zm/_weapons::isprimaryweapon( curweapon ) || maps/mp/gametypes_zm/_weapons::issidearm( curweapon ) ) - { - if ( isDefined( self.hitsthismag[ curweapon ] ) ) - { - self thread updatemagshots( curweapon ); - } - } - switch( weaponclass( curweapon ) ) - { - case "rifle": - if ( curweapon == "crossbow_explosive_mp" ) - { - level.globalcrossbowfired++; - self addweaponstat( curweapon, "shots", 1 ); - self thread begingrenadetracking(); - break; - continue; - } - else case "mg": - case "pistol": - case "smg": - case "spread": - self trackweaponfire( curweapon ); - level.globalshotsfired++; - break; - continue; - case "grenade": - case "rocketlauncher": - self addweaponstat( curweapon, "shots", 1 ); - break; - continue; - default: - } - } - } -} - -updatemagshots( weaponname ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "updateMagShots_" + weaponname ); - self.hitsthismag[ weaponname ]--; - - wait 0,05; - self.hitsthismag[ weaponname ] = weaponclipsize( weaponname ); -} - -checkhitsthismag( weaponname ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self notify( "updateMagShots_" + weaponname ); - waittillframeend; - if ( isDefined( self.hitsthismag[ weaponname ] ) && self.hitsthismag[ weaponname ] == 0 ) - { - if ( !sessionmodeiszombiesgame() ) - { - weaponclass = getweaponclass( weaponname ); - maps/mp/_challenges::fullclipnomisses( weaponclass, weaponname ); - } - self.hitsthismag[ weaponname ] = weaponclipsize( weaponname ); - } -} - -trackweaponfire( curweapon ) -{ - shotsfired = 1; - if ( isDefined( self.laststandparams ) && self.laststandparams.laststandstarttime == getTime() ) - { - self.hits = 0; - return; - } - pixbeginevent( "trackWeaponFire" ); - self addweaponstat( curweapon, "shots", shotsfired ); - self addweaponstat( curweapon, "hits", self.hits ); - if ( isDefined( level.add_client_stat ) ) - { - self [[ level.add_client_stat ]]( "total_shots", shotsfired ); - self [[ level.add_client_stat ]]( "hits", self.hits ); - } - else - { - self addplayerstat( "total_shots", shotsfired ); - self addplayerstat( "hits", self.hits ); - self addplayerstat( "misses", int( max( 0, shotsfired - self.hits ) ) ); - } - self incrementplayerstat( "total_shots", shotsfired ); - self incrementplayerstat( "hits", self.hits ); - self incrementplayerstat( "misses", int( max( 0, shotsfired - self.hits ) ) ); - self maps/mp/_bb::bbaddtostat( "shots", shotsfired ); - self maps/mp/_bb::bbaddtostat( "hits", self.hits ); - self.hits = 0; - pixendevent(); -} - -checkhit( sweapon ) -{ - switch( weaponclass( sweapon ) ) - { - case "mg": - case "pistol": - case "rifle": - case "smg": - self.hits++; - break; - case "pistol spread": - case "spread": - self.hits = 1; - break; - default: - } - waittillframeend; - if ( isDefined( self.hitsthismag ) && isDefined( self.hitsthismag[ sweapon ] ) ) - { - self thread checkhitsthismag( sweapon ); - } - if ( sweapon != "bazooka_mp" || isstrstart( sweapon, "t34" ) && isstrstart( sweapon, "panzer" ) ) - { - self addweaponstat( sweapon, "hits", 1 ); - } - } -} - -watchgrenadeusage() -{ - self endon( "death" ); - self endon( "disconnect" ); - self.throwinggrenade = 0; - self.gotpullbacknotify = 0; - self thread beginothergrenadetracking(); - self thread watchforthrowbacks(); - self thread watchforgrenadeduds(); - self thread watchforgrenadelauncherduds(); - for ( ;; ) - { - self waittill( "grenade_pullback", weaponname ); - self addweaponstat( weaponname, "shots", 1 ); - self.hasdonecombat = 1; - self.throwinggrenade = 1; - self.gotpullbacknotify = 1; - if ( weaponname == "satchel_charge_mp" ) - { - self thread beginsatcheltracking(); - } - self thread begingrenadetracking(); - } -} - -watchmissileusage() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon( "game_ended" ); - for ( ;; ) - { - self waittill( "missile_fire", missile, weapon_name ); - self.hasdonecombat = 1; -/# - assert( isDefined( missile ) ); -#/ - level.missileentities[ level.missileentities.size ] = missile; - missile thread watchmissiledeath(); - } -} - -watchmissiledeath() -{ - self waittill( "death" ); - arrayremovevalue( level.missileentities, self ); -} - -dropweaponstoground( origin, radius ) -{ - weapons = getdroppedweapons(); - i = 0; - while ( i < weapons.size ) - { - if ( distancesquared( origin, weapons[ i ].origin ) < ( radius * radius ) ) - { - trace = bullettrace( weapons[ i ].origin, weapons[ i ].origin + vectorScale( ( 0, 0, 1 ), 2000 ), 0, weapons[ i ] ); - weapons[ i ].origin = trace[ "position" ]; - } - i++; - } -} - -dropgrenadestoground( origin, radius ) -{ - grenades = getentarray( "grenade", "classname" ); - i = 0; - while ( i < grenades.size ) - { - if ( distancesquared( origin, grenades[ i ].origin ) < ( radius * radius ) ) - { - grenades[ i ] launch( vectorScale( ( 0, 0, 1 ), 5 ) ); - } - i++; - } -} - -watchgrenadecancel() -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "grenade_fire" ); - self waittill( "weapon_change" ); - self.throwinggrenade = 0; - self.gotpullbacknotify = 0; -} - -begingrenadetracking() -{ - self endon( "death" ); - self endon( "disconnect" ); - starttime = getTime(); - self thread watchgrenadecancel(); - self waittill( "grenade_fire", grenade, weaponname ); -/# - assert( isDefined( grenade ) ); -#/ - level.missileentities[ level.missileentities.size ] = grenade; - grenade thread watchmissiledeath(); - if ( grenade maps/mp/gametypes_zm/_weaponobjects::ishacked() ) - { - return; - } - bbprint( "mpequipmentuses", "gametime %d spawnid %d weaponname %s", getTime(), getplayerspawnid( self ), weaponname ); - if ( ( getTime() - starttime ) > 1000 ) - { - grenade.iscooked = 1; - } - switch( weaponname ) - { - case "frag_grenade_zm": - case "sticky_grenade_zm": - self addweaponstat( weaponname, "used", 1 ); - case "explosive_bolt_zm": - grenade.originalowner = self; - break; - } - if ( weaponname == "sticky_grenade_zm" || weaponname == "frag_grenade_zm" ) - { - grenade setteam( self.pers[ "team" ] ); - grenade setowner( self ); - } - self.throwinggrenade = 0; - } -} - -beginothergrenadetracking() -{ -} - -checkstucktoplayer( deleteonteamchange, awardscoreevent, weaponname ) -{ - self endon( "death" ); - self waittill( "stuck_to_player", player ); - if ( isDefined( player ) ) - { - if ( deleteonteamchange ) - { - self thread stucktoplayerteamchange( player ); - } - if ( awardscoreevent && isDefined( self.originalowner ) ) - { - if ( self.originalowner isenemyplayer( player ) ) - { - } - } - self.stucktoplayer = player; - } -} - -checkhatchetbounce() -{ - self endon( "stuck_to_player" ); - self endon( "death" ); - self waittill( "grenade_bounce" ); - self.bounced = 1; -} - -stucktoplayerteamchange( player ) -{ - self endon( "death" ); - player endon( "disconnect" ); - originalteam = player.pers[ "team" ]; - while ( 1 ) - { - player waittill( "joined_team" ); - if ( player.pers[ "team" ] != originalteam ) - { - self detonate(); - return; - } - } -} - -beginsatcheltracking() -{ - self endon( "death" ); - self endon( "disconnect" ); - self waittill_any( "grenade_fire", "weapon_change" ); - self.throwinggrenade = 0; -} - -watchforthrowbacks() -{ - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "grenade_fire", grenade, weapname ); - if ( self.gotpullbacknotify ) - { - self.gotpullbacknotify = 0; - continue; - } - else if ( !issubstr( weapname, "frag_" ) ) - { - continue; - } - else - { - grenade.threwback = 1; - grenade.originalowner = self; - } - } -} - -registergrenadelauncherduddvar( dvarstring, defaultvalue, minvalue, maxvalue ) -{ - dvarstring = "scr_" + dvarstring + "_grenadeLauncherDudTime"; - if ( getDvar( dvarstring ) == "" ) - { - setdvar( dvarstring, defaultvalue ); - } - if ( getDvarInt( dvarstring ) > maxvalue ) - { - setdvar( dvarstring, maxvalue ); - } - else - { - if ( getDvarInt( dvarstring ) < minvalue ) - { - setdvar( dvarstring, minvalue ); - } - } - level.grenadelauncherdudtimedvar = dvarstring; - level.grenadelauncherdudtimemin = minvalue; - level.grenadelauncherdudtimemax = maxvalue; - level.grenadelauncherdudtime = getDvarInt( level.grenadelauncherdudtimedvar ); -} - -registerthrowngrenadeduddvar( dvarstring, defaultvalue, minvalue, maxvalue ) -{ - dvarstring = "scr_" + dvarstring + "_thrownGrenadeDudTime"; - if ( getDvar( dvarstring ) == "" ) - { - setdvar( dvarstring, defaultvalue ); - } - if ( getDvarInt( dvarstring ) > maxvalue ) - { - setdvar( dvarstring, maxvalue ); - } - else - { - if ( getDvarInt( dvarstring ) < minvalue ) - { - setdvar( dvarstring, minvalue ); - } - } - level.throwngrenadedudtimedvar = dvarstring; - level.throwngrenadedudtimemin = minvalue; - level.throwngrenadedudtimemax = maxvalue; - level.throwngrenadedudtime = getDvarInt( level.throwngrenadedudtimedvar ); -} - -registerkillstreakdelay( dvarstring, defaultvalue, minvalue, maxvalue ) -{ - dvarstring = "scr_" + dvarstring + "_killstreakDelayTime"; - if ( getDvar( dvarstring ) == "" ) - { - setdvar( dvarstring, defaultvalue ); - } - if ( getDvarInt( dvarstring ) > maxvalue ) - { - setdvar( dvarstring, maxvalue ); - } - else - { - if ( getDvarInt( dvarstring ) < minvalue ) - { - setdvar( dvarstring, minvalue ); - } - } - level.killstreakrounddelay = getDvarInt( dvarstring ); -} - -turngrenadeintoadud( weapname, isthrowngrenade, player ) -{ - if ( level.grenadelauncherdudtime >= ( maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() / 1000 ) && !isthrowngrenade ) - { - if ( issubstr( weapname, "gl_" ) || weapname == "china_lake_mp" ) - { - timeleft = int( level.grenadelauncherdudtime - ( maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() / 1000 ) ); - if ( !timeleft ) - { - timeleft = 1; - } - player iprintlnbold( &"MP_LAUNCHER_UNAVAILABLE_FOR_N", " " + timeleft + " ", &"EXE_SECONDS" ); - self makegrenadedud(); - } - } - else - { - if ( level.throwngrenadedudtime >= ( maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() / 1000 ) && isthrowngrenade ) - { - if ( weapname == "frag_grenade_mp" || weapname == "sticky_grenade_mp" ) - { - if ( isDefined( player.suicide ) && player.suicide ) - { - return; - } - timeleft = int( level.throwngrenadedudtime - ( maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() / 1000 ) ); - if ( !timeleft ) - { - timeleft = 1; - } - player iprintlnbold( &"MP_GRENADE_UNAVAILABLE_FOR_N", " " + timeleft + " ", &"EXE_SECONDS" ); - self makegrenadedud(); - } - } - } -} - -watchforgrenadeduds() -{ - self endon( "spawned_player" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "grenade_fire", grenade, weapname ); - grenade turngrenadeintoadud( weapname, 1, self ); - } -} - -watchforgrenadelauncherduds() -{ - self endon( "spawned_player" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "grenade_launcher_fire", grenade, weapname ); - grenade turngrenadeintoadud( weapname, 0, self ); - } -} - -getdamageableents( pos, radius, dolos, startradius ) -{ - ents = []; - if ( !isDefined( dolos ) ) - { - dolos = 0; - } - if ( !isDefined( startradius ) ) - { - startradius = 0; - } - players = level.players; - i = 0; - while ( i < players.size ) - { - if ( !isalive( players[ i ] ) || players[ i ].sessionstate != "playing" ) - { - i++; - continue; - } - else - { - playerpos = players[ i ].origin + vectorScale( ( 0, 0, 1 ), 32 ); - distsq = distancesquared( pos, playerpos ); - if ( distsq < ( radius * radius ) || !dolos && weapondamagetracepassed( pos, playerpos, startradius, undefined ) ) - { - newent = spawnstruct(); - newent.isplayer = 1; - newent.isadestructable = 0; - newent.isadestructible = 0; - newent.isactor = 0; - newent.entity = players[ i ]; - newent.damagecenter = playerpos; - ents[ ents.size ] = newent; - } - } - i++; - } - grenades = getentarray( "grenade", "classname" ); - i = 0; - while ( i < grenades.size ) - { - entpos = grenades[ i ].origin; - distsq = distancesquared( pos, entpos ); - if ( distsq < ( radius * radius ) || !dolos && weapondamagetracepassed( pos, entpos, startradius, grenades[ i ] ) ) - { - newent = spawnstruct(); - newent.isplayer = 0; - newent.isadestructable = 0; - newent.isadestructible = 0; - newent.isactor = 0; - newent.entity = grenades[ i ]; - newent.damagecenter = entpos; - ents[ ents.size ] = newent; - } - i++; - } - destructibles = getentarray( "destructible", "targetname" ); - i = 0; - while ( i < destructibles.size ) - { - entpos = destructibles[ i ].origin; - distsq = distancesquared( pos, entpos ); - if ( distsq < ( radius * radius ) || !dolos && weapondamagetracepassed( pos, entpos, startradius, destructibles[ i ] ) ) - { - newent = spawnstruct(); - newent.isplayer = 0; - newent.isadestructable = 0; - newent.isadestructible = 1; - newent.isactor = 0; - newent.entity = destructibles[ i ]; - newent.damagecenter = entpos; - ents[ ents.size ] = newent; - } - i++; - } - destructables = getentarray( "destructable", "targetname" ); - i = 0; - while ( i < destructables.size ) - { - entpos = destructables[ i ].origin; - distsq = distancesquared( pos, entpos ); - if ( distsq < ( radius * radius ) || !dolos && weapondamagetracepassed( pos, entpos, startradius, destructables[ i ] ) ) - { - newent = spawnstruct(); - newent.isplayer = 0; - newent.isadestructable = 1; - newent.isadestructible = 0; - newent.isactor = 0; - newent.entity = destructables[ i ]; - newent.damagecenter = entpos; - ents[ ents.size ] = newent; - } - i++; - } - return ents; -} - -weapondamagetracepassed( from, to, startradius, ignore ) -{ - trace = weapondamagetrace( from, to, startradius, ignore ); - return trace[ "fraction" ] == 1; -} - -weapondamagetrace( from, to, startradius, ignore ) -{ - midpos = undefined; - diff = to - from; - if ( lengthsquared( diff ) < ( startradius * startradius ) ) - { - midpos = to; - } - dir = vectornormalize( diff ); - midpos = from + ( dir[ 0 ] * startradius, dir[ 1 ] * startradius, dir[ 2 ] * startradius ); - trace = bullettrace( midpos, to, 0, ignore ); - if ( getDvarInt( #"0A1C40B1" ) != 0 ) - { - if ( trace[ "fraction" ] == 1 ) - { - thread debugline( midpos, to, ( 0, 0, 1 ) ); - } - else - { - thread debugline( midpos, trace[ "position" ], ( 1, 0,9, 0,8 ) ); - thread debugline( trace[ "position" ], to, ( 1, 0,4, 0,3 ) ); - } - } - return trace; -} - -damageent( einflictor, eattacker, idamage, smeansofdeath, sweapon, damagepos, damagedir ) -{ - if ( self.isplayer ) - { - self.damageorigin = damagepos; - self.entity thread [[ level.callbackplayerdamage ]]( einflictor, eattacker, idamage, 0, smeansofdeath, sweapon, damagepos, damagedir, "none", 0, 0 ); - } - else if ( self.isactor ) - { - self.damageorigin = damagepos; - self.entity thread [[ level.callbackactordamage ]]( einflictor, eattacker, idamage, 0, smeansofdeath, sweapon, damagepos, damagedir, "none", 0, 0 ); - } - else if ( self.isadestructible ) - { - self.damageorigin = damagepos; - self.entity dodamage( idamage, damagepos, eattacker, einflictor, 0, smeansofdeath, 0, sweapon ); - } - else - { - if ( self.isadestructable || sweapon == "claymore_mp" && sweapon == "airstrike_mp" ) - { - return; - } - self.entity damage_notify_wrapper( idamage, eattacker, ( 0, 0, 1 ), ( 0, 0, 1 ), "mod_explosive", "", "" ); - } -} - -debugline( a, b, color ) -{ -/# - i = 0; - while ( i < 600 ) - { - line( a, b, color ); - wait 0,05; - i++; -#/ - } -} - -onweapondamage( eattacker, einflictor, sweapon, meansofdeath, damage ) -{ - self endon( "death" ); - self endon( "disconnect" ); - switch( sweapon ) - { - case "concussion_grenade_mp": - radius = 512; - if ( self == eattacker ) - { - radius *= 0,5; - } - scale = 1 - ( distance( self.origin, einflictor.origin ) / radius ); - if ( scale < 0 ) - { - scale = 0; - } - time = 2 + ( 4 * scale ); - wait 0,05; - if ( self hasperk( "specialty_stunprotection" ) ) - { - time *= 0,1; - } - self thread playconcussionsound( time ); - if ( self mayapplyscreeneffect() ) - { - self shellshock( "concussion_grenade_mp", time, 0 ); - } - self.concussionendtime = getTime() + ( time * 1000 ); - break; - default: - maps/mp/gametypes_zm/_shellshock::shellshockondamage( meansofdeath, damage ); - break; - } -} - -playconcussionsound( duration ) -{ - self endon( "death" ); - self endon( "disconnect" ); - concussionsound = spawn( "script_origin", ( 0, 0, 1 ) ); - concussionsound.origin = self.origin; - concussionsound linkto( self ); - concussionsound thread deleteentonownerdeath( self ); - concussionsound playsound( "" ); - concussionsound playloopsound( "" ); - if ( duration > 0,5 ) - { - wait ( duration - 0,5 ); - } - concussionsound playsound( "" ); - concussionsound stoploopsound( 0,5 ); - wait 0,5; - concussionsound notify( "delete" ); - concussionsound delete(); -} - -deleteentonownerdeath( owner ) -{ - self endon( "delete" ); - owner waittill( "death" ); - self delete(); -} - -monitor_dog_special_grenades() -{ -} - -isprimaryweapon( weaponname ) -{ - return isDefined( level.primary_weapon_array[ weaponname ] ); -} - -issidearm( weaponname ) -{ - return isDefined( level.side_arm_array[ weaponname ] ); -} - -isinventory( weaponname ) -{ - return isDefined( level.inventory_array[ weaponname ] ); -} - -isgrenade( weaponname ) -{ - return isDefined( level.grenade_array[ weaponname ] ); -} - -isexplosivebulletweapon( weaponname ) -{ - if ( weaponname != "chopper_minigun_mp" && weaponname != "cobra_20mm_mp" || weaponname == "littlebird_guard_minigun_mp" && weaponname == "cobra_20mm_comlink_mp" ) - { - return 1; - } - return 0; -} - -getweaponclass_array( current ) -{ - if ( isprimaryweapon( current ) ) - { - return level.primary_weapon_array; - } - else - { - if ( issidearm( current ) ) - { - return level.side_arm_array; - } - else - { - if ( isgrenade( current ) ) - { - return level.grenade_array; - } - else - { - return level.inventory_array; - } - } - } -} - -updatestowedweapon() -{ - self endon( "spawned" ); - self endon( "killed_player" ); - self endon( "disconnect" ); - self.tag_stowed_back = undefined; - self.tag_stowed_hip = undefined; - team = self.pers[ "team" ]; - class = self.pers[ "class" ]; - while ( 1 ) - { - self waittill( "weapon_change", newweapon ); - self.weapon_array_primary = []; - self.weapon_array_sidearm = []; - self.weapon_array_grenade = []; - self.weapon_array_inventory = []; - weaponslist = self getweaponslist(); - idx = 0; - while ( idx < weaponslist.size ) - { - switch( weaponslist[ idx ] ) - { - case "m202_flash_mp": - case "m220_tow_mp": - case "m32_mp": - case "minigun_mp": - case "mp40_blinged_mp": - case "zipline_mp": - idx++; - continue; - default: - } - if ( isprimaryweapon( weaponslist[ idx ] ) ) - { - self.weapon_array_primary[ self.weapon_array_primary.size ] = weaponslist[ idx ]; - idx++; - continue; - } - else if ( issidearm( weaponslist[ idx ] ) ) - { - self.weapon_array_sidearm[ self.weapon_array_sidearm.size ] = weaponslist[ idx ]; - idx++; - continue; - } - else if ( isgrenade( weaponslist[ idx ] ) ) - { - self.weapon_array_grenade[ self.weapon_array_grenade.size ] = weaponslist[ idx ]; - idx++; - continue; - } - else if ( isinventory( weaponslist[ idx ] ) ) - { - self.weapon_array_inventory[ self.weapon_array_inventory.size ] = weaponslist[ idx ]; - idx++; - continue; - } - else - { - if ( isweaponprimary( weaponslist[ idx ] ) ) - { - self.weapon_array_primary[ self.weapon_array_primary.size ] = weaponslist[ idx ]; - } - } - idx++; - } - detach_all_weapons(); - stow_on_back(); - stow_on_hip(); - } - } - } -} - -forcestowedweaponupdate() -{ - detach_all_weapons(); - stow_on_back(); - stow_on_hip(); -} - -detachcarryobjectmodel() -{ - if ( isDefined( self.carryobject ) && isDefined( self.carryobject maps/mp/gametypes_zm/_gameobjects::getvisiblecarriermodel() ) ) - { - if ( isDefined( self.tag_stowed_back ) ) - { - self detach( self.tag_stowed_back, "tag_stowed_back" ); - self.tag_stowed_back = undefined; - } - } -} - -detach_all_weapons() -{ - if ( isDefined( self.tag_stowed_back ) ) - { - clear_weapon = 1; - if ( isDefined( self.carryobject ) ) - { - carriermodel = self.carryobject maps/mp/gametypes_zm/_gameobjects::getvisiblecarriermodel(); - if ( isDefined( carriermodel ) && carriermodel == self.tag_stowed_back ) - { - self detach( self.tag_stowed_back, "tag_stowed_back" ); - clear_weapon = 0; - } - } - if ( clear_weapon ) - { - self clearstowedweapon(); - } - self.tag_stowed_back = undefined; - } - if ( isDefined( self.tag_stowed_hip ) ) - { - detach_model = getweaponmodel( self.tag_stowed_hip ); - self detach( detach_model, "tag_stowed_hip_rear" ); - self.tag_stowed_hip = undefined; - } -} - -non_stowed_weapon( weapon ) -{ - if ( self hasweapon( "knife_ballistic_mp" ) && weapon != "knife_ballistic_mp" ) - { - return 1; - } - if ( self hasweapon( "knife_held_mp" ) && weapon != "knife_held_mp" ) - { - return 1; - } - return 0; -} - -stow_on_back( current ) -{ - current = self getcurrentweapon(); - self.tag_stowed_back = undefined; - weaponoptions = 0; - index_weapon = ""; - if ( isDefined( self.carryobject ) && isDefined( self.carryobject maps/mp/gametypes_zm/_gameobjects::getvisiblecarriermodel() ) ) - { - self.tag_stowed_back = self.carryobject maps/mp/gametypes_zm/_gameobjects::getvisiblecarriermodel(); - self attach( self.tag_stowed_back, "tag_stowed_back", 1 ); - return; - } - else - { - if ( non_stowed_weapon( current ) || self.hasriotshield ) - { - return; - } - else - { - idx = 0; - while ( idx < self.weapon_array_primary.size ) - { - temp_index_weapon = self.weapon_array_primary[ idx ]; -/# - assert( isDefined( temp_index_weapon ), "Primary weapon list corrupted." ); -#/ - if ( temp_index_weapon == current ) - { - idx++; - continue; - } - else if ( current == "none" ) - { - idx++; - continue; - } - else if ( !issubstr( current, "gl_" ) && !issubstr( temp_index_weapon, "gl_" ) && !issubstr( current, "mk_" ) && !issubstr( temp_index_weapon, "mk_" ) && !issubstr( current, "dualoptic_" ) && !issubstr( temp_index_weapon, "dualoptic_" ) || issubstr( current, "ft_" ) && issubstr( temp_index_weapon, "ft_" ) ) - { - index_weapon_tok = strtok( temp_index_weapon, "_" ); - current_tok = strtok( current, "_" ); - i = 0; - while ( i < index_weapon_tok.size ) - { - if ( !issubstr( current, index_weapon_tok[ i ] ) || index_weapon_tok.size != current_tok.size ) - { - i = 0; - break; - } - else - { - i++; - } - } - if ( i == index_weapon_tok.size ) - { - idx++; - continue; - } - } - else - { - index_weapon = temp_index_weapon; -/# - assert( isDefined( self.curclass ), "Player missing current class" ); -#/ - if ( issubstr( index_weapon, self.pers[ "primaryWeapon" ] ) && issubstr( self.curclass, "CUSTOM" ) ) - { - self.tag_stowed_back = getweaponmodel( index_weapon, self getloadoutitem( self.class_num, "primarycamo" ) ); - } - else - { - stowedmodelindex = getweaponstowedmodel( index_weapon ); - self.tag_stowed_back = getweaponmodel( index_weapon, stowedmodelindex ); - } - if ( issubstr( self.curclass, "CUSTOM" ) ) - { - weaponoptions = self calcweaponoptions( self.class_num, 0 ); - } - } - idx++; - } - } - } - if ( !isDefined( self.tag_stowed_back ) ) - { - return; - } - self setstowedweapon( index_weapon ); -} - -stow_on_hip() -{ - current = self getcurrentweapon(); - self.tag_stowed_hip = undefined; - idx = 0; - while ( idx < self.weapon_array_inventory.size ) - { - if ( self.weapon_array_inventory[ idx ] == current ) - { - idx++; - continue; - } - else if ( !self getweaponammostock( self.weapon_array_inventory[ idx ] ) ) - { - idx++; - continue; - } - else - { - self.tag_stowed_hip = self.weapon_array_inventory[ idx ]; - } - idx++; - } - if ( !isDefined( self.tag_stowed_hip ) ) - { - return; - } - if ( self.tag_stowed_hip != "satchel_charge_mp" || self.tag_stowed_hip == "claymore_mp" && self.tag_stowed_hip == "bouncingbetty_mp" ) - { - self.tag_stowed_hip = undefined; - return; - } - weapon_model = getweaponmodel( self.tag_stowed_hip ); - self attach( weapon_model, "tag_stowed_hip_rear", 1 ); -} - -stow_inventory( inventories, current ) -{ - if ( isDefined( self.inventory_tag ) ) - { - detach_model = getweaponmodel( self.inventory_tag ); - self detach( detach_model, "tag_stowed_hip_rear" ); - self.inventory_tag = undefined; - } - if ( !isDefined( inventories[ 0 ] ) || self getweaponammostock( inventories[ 0 ] ) == 0 ) - { - return; - } - if ( inventories[ 0 ] != current ) - { - self.inventory_tag = inventories[ 0 ]; - weapon_model = getweaponmodel( self.inventory_tag ); - self attach( weapon_model, "tag_stowed_hip_rear", 1 ); - } -} - -weapons_get_dvar_int( dvar, def ) -{ - return int( weapons_get_dvar( dvar, def ) ); -} - -weapons_get_dvar( dvar, def ) -{ - if ( getDvar( dvar ) != "" ) - { - return getDvarFloat( dvar ); - } - else - { - setdvar( dvar, def ); - return def; - } -} - -player_is_driver() -{ - if ( !isalive( self ) ) - { - return 0; - } - if ( self isremotecontrolling() ) - { - return 0; - } - vehicle = self getvehicleoccupied(); - if ( isDefined( vehicle ) ) - { - seat = vehicle getoccupantseat( self ); - if ( isDefined( seat ) && seat == 0 ) - { - return 1; - } - } - return 0; -} - -loadout_get_class_num() -{ -/# - assert( isplayer( self ) ); -#/ -/# - assert( isDefined( self.class ) ); -#/ - if ( isDefined( level.classtoclassnum[ self.class ] ) ) - { - return level.classtoclassnum[ self.class ]; - } - class_num = int( self.class[ self.class.size - 1 ] ) - 1; - if ( class_num == -1 ) - { - class_num = 9; - } - return class_num; -} - -loadout_get_offhand_weapon( stat ) -{ - if ( isDefined( level.givecustomloadout ) ) - { - return "weapon_null_mp"; - } - class_num = self loadout_get_class_num(); - index = 0; - if ( isDefined( level.tbl_weaponids[ index ] ) && isDefined( level.tbl_weaponids[ index ][ "reference" ] ) ) - { - return level.tbl_weaponids[ index ][ "reference" ] + "_mp"; - } - return "weapon_null_mp"; -} - -loadout_get_offhand_count( stat ) -{ - if ( isDefined( level.givecustomloadout ) ) - { - return 0; - } - class_num = self loadout_get_class_num(); - count = 0; - return count; -} - -scavenger_think() -{ - self endon( "death" ); - self waittill( "scavenger", player ); - primary_weapons = player getweaponslistprimaries(); - offhand_weapons_and_alts = array_exclude( player getweaponslist( 1 ), primary_weapons ); - arrayremovevalue( offhand_weapons_and_alts, "knife_mp" ); - player playsound( "fly_equipment_pickup_npc" ); - player playlocalsound( "fly_equipment_pickup_plr" ); - player.scavenger_icon.alpha = 1; - player.scavenger_icon fadeovertime( 2,5 ); - player.scavenger_icon.alpha = 0; - scavenger_lethal_proc = 1; - scavenger_tactical_proc = 1; - if ( !isDefined( player.scavenger_lethal_proc ) ) - { - player.scavenger_lethal_proc = 0; - player.scavenger_tactical_proc = 0; - } - loadout_primary = player loadout_get_offhand_weapon( "primarygrenade" ); - loadout_primary_count = player loadout_get_offhand_count( "primarygrenadecount" ); - loadout_secondary = player loadout_get_offhand_weapon( "specialgrenade" ); - loadout_secondary_count = player loadout_get_offhand_count( "specialgrenadeCount" ); - i = 0; - while ( i < offhand_weapons_and_alts.size ) - { - weapon = offhand_weapons_and_alts[ i ]; - if ( ishackweapon( weapon ) ) - { - break; - i++; - continue; - } - else switch( weapon ) - { - case "bouncingbetty_mp": - case "claymore_mp": - case "frag_grenade_mp": - case "hatchet_mp": - case "satchel_charge_mp": - case "sticky_grenade_mp": - if ( isDefined( player.grenadetypeprimarycount ) && player.grenadetypeprimarycount < 1 ) - { - break; - i++; - continue; - } - else - { - if ( player getweaponammostock( weapon ) != loadout_primary_count ) - { - if ( player.scavenger_lethal_proc < scavenger_lethal_proc ) - { - player.scavenger_lethal_proc++; - break; - i++; - continue; - } - else player.scavenger_lethal_proc = 0; - player.scavenger_tactical_proc = 0; - } - case "concussion_grenade_mp": - case "emp_grenade_mp": - case "flash_grenade_mp": - case "nightingale_mp": - case "pda_hack_mp": - case "proximity_grenade_mp": - case "sensor_grenade_mp": - case "tabun_gas_mp": - case "trophy_system_mp": - case "willy_pete_mp": - if ( isDefined( player.grenadetypesecondarycount ) && player.grenadetypesecondarycount < 1 ) - { - break; - i++; - continue; - } - else - { - if ( weapon == loadout_secondary && player getweaponammostock( weapon ) != loadout_secondary_count ) - { - if ( player.scavenger_tactical_proc < scavenger_tactical_proc ) - { - player.scavenger_tactical_proc++; - break; - i++; - continue; - } - else player.scavenger_tactical_proc = 0; - player.scavenger_lethal_proc = 0; - } - maxammo = weaponmaxammo( weapon ); - stock = player getweaponammostock( weapon ); - if ( isDefined( level.customloadoutscavenge ) ) - { - maxammo = self [[ level.customloadoutscavenge ]]( weapon ); - } - else if ( weapon == loadout_primary ) - { - maxammo = loadout_primary_count; - } - else - { - if ( weapon == loadout_secondary ) - { - maxammo = loadout_secondary_count; - } - } - if ( stock < maxammo ) - { - ammo = stock + 1; - if ( ammo > maxammo ) - { - ammo = maxammo; - } - player setweaponammostock( weapon, ammo ); - player thread maps/mp/_challenges::scavengedgrenade(); - } - break; - i++; - continue; - default: - if ( islauncherweapon( weapon ) ) - { - stock = player getweaponammostock( weapon ); - start = player getfractionstartammo( weapon ); - clip = weaponclipsize( weapon ); - clip *= getdvarfloatdefault( "scavenger_clip_multiplier", 2 ); - clip = int( clip ); - maxammo = weaponmaxammo( weapon ); - if ( stock < ( maxammo - clip ) ) - { - ammo = stock + clip; - player setweaponammostock( weapon, ammo ); - break; - } - else - { - player setweaponammostock( weapon, maxammo ); - } - } - break; - i++; - continue; -} -} -} -i++; -} -i = 0; -while ( i < primary_weapons.size ) -{ -weapon = primary_weapons[ i ]; -if ( ishackweapon( weapon ) || weapon == "kniferang_mp" ) -{ -i++; -continue; -} -else -{ -stock = player getweaponammostock( weapon ); -start = player getfractionstartammo( weapon ); -clip = weaponclipsize( weapon ); -clip *= getdvarfloatdefault( "scavenger_clip_multiplier", 2 ); -clip = int( clip ); -maxammo = weaponmaxammo( weapon ); -if ( stock < ( maxammo - clip ) ) -{ -ammo = stock + clip; -player setweaponammostock( weapon, ammo ); -i++; -continue; -} -else -{ -player setweaponammostock( weapon, maxammo ); -} -} -i++; -} -} - -scavenger_hud_create() -{ - if ( level.wagermatch ) - { - return; - } - self.scavenger_icon = newclienthudelem( self ); - self.scavenger_icon.horzalign = "center"; - self.scavenger_icon.vertalign = "middle"; - self.scavenger_icon.x = -16; - self.scavenger_icon.y = 16; - self.scavenger_icon.alpha = 0; - width = 32; - height = 16; - if ( self issplitscreen() ) - { - width = int( width * 0,5 ); - height = int( height * 0,5 ); - self.scavenger_icon.x = -8; - } - self.scavenger_icon setshader( "hud_scavenger_pickup", width, height ); -} - -dropscavengerfordeath( attacker ) -{ - if ( sessionmodeiszombiesgame() ) - { - return; - } - if ( level.wagermatch ) - { - return; - } - if ( !isDefined( attacker ) ) - { - return; - } - if ( attacker == self ) - { - return; - } - if ( level.gametype == "hack" ) - { - item = self dropscavengeritem( "scavenger_item_hack_mp" ); - } - else - { - item = self dropscavengeritem( "scavenger_item_mp" ); - } - item thread scavenger_think(); -} - -addlimitedweapon( weapon_name, owner, num_drops ) -{ - limited_info = spawnstruct(); - limited_info.weapon = weapon_name; - limited_info.drops = num_drops; - owner.limited_info = limited_info; -} - -shoulddroplimitedweapon( weapon_name, owner ) -{ - limited_info = owner.limited_info; - if ( !isDefined( limited_info ) ) - { - return 1; - } - if ( limited_info.weapon != weapon_name ) - { - return 1; - } - if ( limited_info.drops <= 0 ) - { - return 0; - } - return 1; -} - -droplimitedweapon( weapon_name, owner, item ) -{ - limited_info = owner.limited_info; - if ( !isDefined( limited_info ) ) - { - return; - } - if ( limited_info.weapon != weapon_name ) - { - return; - } - limited_info.drops -= 1; - owner.limited_info = undefined; - item thread limitedpickup( limited_info ); -} - -limitedpickup( limited_info ) -{ - self endon( "death" ); - self waittill( "trigger", player, item ); - if ( !isDefined( item ) ) - { - return; - } - player.limited_info = limited_info; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_zm_gametype.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_zm_gametype.gsc deleted file mode 100644 index d706792..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/_zm_gametype.gsc +++ /dev/null @@ -1,2053 +0,0 @@ -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm_pers_upgrades; -#include maps/mp/zombies/_zm_blockers; -#include maps/mp/gametypes_zm/_spawning; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/gametypes_zm/_hud; -#include maps/mp/zombies/_zm_audio_announcer; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/gametypes_zm/_globallogic_ui; -#include maps/mp/gametypes_zm/_hud_message; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/gametypes_zm/_globallogic_defaults; -#include maps/mp/gametypes_zm/_gameobjects; -#include maps/mp/gametypes_zm/_weapons; -#include maps/mp/gametypes_zm/_callbacksetup; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; - -main() -{ - maps/mp/gametypes_zm/_globallogic::init(); - maps/mp/gametypes_zm/_callbacksetup::setupcallbacks(); - globallogic_setupdefault_zombiecallbacks(); - menu_init(); - registerroundlimit( 1, 1 ); - registertimelimit( 0, 0 ); - registerscorelimit( 0, 0 ); - registerroundwinlimit( 0, 0 ); - registernumlives( 1, 1 ); - maps/mp/gametypes_zm/_weapons::registergrenadelauncherduddvar( level.gametype, 10, 0, 1440 ); - maps/mp/gametypes_zm/_weapons::registerthrowngrenadeduddvar( level.gametype, 0, 0, 1440 ); - maps/mp/gametypes_zm/_weapons::registerkillstreakdelay( level.gametype, 0, 0, 1440 ); - maps/mp/gametypes_zm/_globallogic::registerfriendlyfiredelay( level.gametype, 15, 0, 1440 ); - level.takelivesondeath = 1; - level.teambased = 1; - level.disableprematchmessages = 1; - level.disablemomentum = 1; - level.overrideteamscore = 0; - level.overrideplayerscore = 0; - level.displayhalftimetext = 0; - level.displayroundendtext = 0; - level.allowannouncer = 0; - level.endgameonscorelimit = 0; - level.endgameontimelimit = 0; - level.resetplayerscoreeveryround = 1; - level.doprematch = 0; - level.nopersistence = 1; - level.scoreroundbased = 0; - level.forceautoassign = 1; - level.dontshowendreason = 1; - level.forceallallies = 0; - level.allow_teamchange = 0; - setdvar( "scr_disable_team_selection", 1 ); - makedvarserverinfo( "scr_disable_team_selection", 1 ); - setmatchflag( "hud_zombie", 1 ); - setdvar( "scr_disable_weapondrop", 1 ); - setdvar( "scr_xpscale", 0 ); - level.onstartgametype = ::onstartgametype; - level.onspawnplayer = ::blank; - level.onspawnplayerunified = ::onspawnplayerunified; - level.onroundendgame = ::onroundendgame; - level.mayspawn = ::mayspawn; - set_game_var( "ZM_roundLimit", 1 ); - set_game_var( "ZM_scoreLimit", 1 ); - set_game_var( "_team1_num", 0 ); - set_game_var( "_team2_num", 0 ); - map_name = level.script; - mode = getDvar( "ui_gametype" ); - if ( isDefined( mode ) && mode == "" && isDefined( level.default_game_mode ) ) - { - mode = level.default_game_mode; - } - set_gamemode_var_once( "mode", mode ); - set_game_var_once( "side_selection", 1 ); - location = getDvar( "ui_zm_mapstartlocation" ); - if ( location == "" && isDefined( level.default_start_location ) ) - { - location = level.default_start_location; - } - set_gamemode_var_once( "location", location ); - set_gamemode_var_once( "randomize_mode", getDvarInt( #"5D1D04D4" ) ); - set_gamemode_var_once( "randomize_location", getDvarInt( #"D446AE4D" ) ); - set_gamemode_var_once( "team_1_score", 0 ); - set_gamemode_var_once( "team_2_score", 0 ); - set_gamemode_var_once( "current_round", 0 ); - set_gamemode_var_once( "rules_read", 0 ); - set_game_var_once( "switchedsides", 0 ); - gametype = getDvar( "ui_gametype" ); - game[ "dialog" ][ "gametype" ] = gametype + "_start"; - game[ "dialog" ][ "gametype_hardcore" ] = gametype + "_start"; - game[ "dialog" ][ "offense_obj" ] = "generic_boost"; - game[ "dialog" ][ "defense_obj" ] = "generic_boost"; - set_gamemode_var( "pre_init_zombie_spawn_func", undefined ); - set_gamemode_var( "post_init_zombie_spawn_func", undefined ); - set_gamemode_var( "match_end_notify", undefined ); - set_gamemode_var( "match_end_func", undefined ); - setscoreboardcolumns( "score", "kills", "downs", "revives", "headshots" ); - onplayerconnect_callback( ::onplayerconnect_check_for_hotjoin ); -} - -game_objects_allowed( mode, location ) -{ - allowed[ 0 ] = mode; - entities = getentarray(); - _a153 = entities; - _k153 = getFirstArrayKey( _a153 ); - while ( isDefined( _k153 ) ) - { - entity = _a153[ _k153 ]; - if ( isDefined( entity.script_gameobjectname ) ) - { - isallowed = maps/mp/gametypes_zm/_gameobjects::entity_is_allowed( entity, allowed ); - if ( isDefined( entity.script_noteworthy ) ) - { - isvalidlocation = entity.script_noteworthy == location; - } - if ( !isallowed || !isvalidlocation && !is_classic() ) - { - if ( isDefined( entity.spawnflags ) && entity.spawnflags == 1 ) - { - if ( isDefined( entity.classname ) && entity.classname != "trigger_multiple" ) - { - entity connectpaths(); - } - } - entity delete(); - break; - } - else - { - if ( isDefined( entity.script_vector ) ) - { - entity moveto( entity.origin + entity.script_vector, 0,05 ); - entity waittill( "movedone" ); - if ( isDefined( entity.spawnflags ) && entity.spawnflags == 1 ) - { - entity disconnectpaths(); - } - break; - } - else - { - if ( isDefined( entity.spawnflags ) && entity.spawnflags == 1 ) - { - if ( isDefined( entity.classname ) && entity.classname != "trigger_multiple" ) - { - entity connectpaths(); - } - } - } - } - } - _k153 = getNextArrayKey( _a153, _k153 ); - } -} - -post_init_gametype() -{ - if ( isDefined( level.gamemode_map_postinit ) ) - { - if ( isDefined( level.gamemode_map_postinit[ level.scr_zm_ui_gametype ] ) ) - { - [[ level.gamemode_map_postinit[ level.scr_zm_ui_gametype ] ]](); - } - } -} - -post_gametype_main( mode ) -{ - set_game_var( "ZM_roundWinLimit", get_game_var( "ZM_roundLimit" ) * 0,5 ); - level.roundlimit = get_game_var( "ZM_roundLimit" ); - if ( isDefined( level.gamemode_map_preinit ) ) - { - if ( isDefined( level.gamemode_map_preinit[ mode ] ) ) - { - [[ level.gamemode_map_preinit[ mode ] ]](); - } - } -} - -globallogic_setupdefault_zombiecallbacks() -{ - level.spawnplayer = ::maps/mp/gametypes_zm/_globallogic_spawn::spawnplayer; - level.spawnplayerprediction = ::maps/mp/gametypes_zm/_globallogic_spawn::spawnplayerprediction; - level.spawnclient = ::maps/mp/gametypes_zm/_globallogic_spawn::spawnclient; - level.spawnspectator = ::maps/mp/gametypes_zm/_globallogic_spawn::spawnspectator; - level.spawnintermission = ::maps/mp/gametypes_zm/_globallogic_spawn::spawnintermission; - level.onplayerscore = ::blank; - level.onteamscore = ::blank; - level.wavespawntimer = ::wavespawntimer; - level.onspawnplayer = ::blank; - level.onspawnplayerunified = ::blank; - level.onspawnspectator = ::onspawnspectator; - level.onspawnintermission = ::onspawnintermission; - level.onrespawndelay = ::blank; - level.onforfeit = ::blank; - level.ontimelimit = ::blank; - level.onscorelimit = ::blank; - level.ondeadevent = ::ondeadevent; - level.ononeleftevent = ::blank; - level.giveteamscore = ::blank; - level.giveplayerscore = ::blank; - level.gettimelimit = ::maps/mp/gametypes_zm/_globallogic_defaults::default_gettimelimit; - level.getteamkillpenalty = ::blank; - level.getteamkillscore = ::blank; - level.iskillboosting = ::blank; - level._setteamscore = ::maps/mp/gametypes_zm/_globallogic_score::_setteamscore; - level._setplayerscore = ::blank; - level._getteamscore = ::blank; - level._getplayerscore = ::blank; - level.onprecachegametype = ::blank; - level.onstartgametype = ::blank; - level.onplayerconnect = ::blank; - level.onplayerdisconnect = ::onplayerdisconnect; - level.onplayerdamage = ::blank; - level.onplayerkilled = ::blank; - level.onplayerkilledextraunthreadedcbs = []; - level.onteamoutcomenotify = ::maps/mp/gametypes_zm/_hud_message::teamoutcomenotifyzombie; - level.onoutcomenotify = ::blank; - level.onteamwageroutcomenotify = ::blank; - level.onwageroutcomenotify = ::blank; - level.onendgame = ::onendgame; - level.onroundendgame = ::blank; - level.onmedalawarded = ::blank; - level.autoassign = ::maps/mp/gametypes_zm/_globallogic_ui::menuautoassign; - level.spectator = ::maps/mp/gametypes_zm/_globallogic_ui::menuspectator; - level.class = ::maps/mp/gametypes_zm/_globallogic_ui::menuclass; - level.allies = ::menuallieszombies; - level.teammenu = ::maps/mp/gametypes_zm/_globallogic_ui::menuteam; - level.callbackactorkilled = ::blank; - level.callbackvehicledamage = ::blank; -} - -setup_standard_objects( location ) -{ - structs = getstructarray( "game_mode_object" ); - _a290 = structs; - _k290 = getFirstArrayKey( _a290 ); - while ( isDefined( _k290 ) ) - { - struct = _a290[ _k290 ]; - if ( isDefined( struct.script_noteworthy ) && struct.script_noteworthy != location ) - { - } - else - { - if ( isDefined( struct.script_string ) ) - { - keep = 0; - tokens = strtok( struct.script_string, " " ); - _a300 = tokens; - _k300 = getFirstArrayKey( _a300 ); - while ( isDefined( _k300 ) ) - { - token = _a300[ _k300 ]; - if ( token == level.scr_zm_ui_gametype && token != "zstandard" ) - { - keep = 1; - } - else - { - if ( token == "zstandard" ) - { - keep = 1; - } - } - _k300 = getNextArrayKey( _a300, _k300 ); - } - if ( !keep ) - { - break; - } - } - else - { - barricade = spawn( "script_model", struct.origin ); - barricade.angles = struct.angles; - barricade setmodel( struct.script_parameters ); - } - } - _k290 = getNextArrayKey( _a290, _k290 ); - } - objects = getentarray(); - _a322 = objects; - _k322 = getFirstArrayKey( _a322 ); - while ( isDefined( _k322 ) ) - { - object = _a322[ _k322 ]; - if ( !object is_survival_object() ) - { - } - else - { - if ( isDefined( object.spawnflags ) && object.spawnflags == 1 && object.classname != "trigger_multiple" ) - { - object connectpaths(); - } - object delete(); - } - _k322 = getNextArrayKey( _a322, _k322 ); - } - if ( isDefined( level._classic_setup_func ) ) - { - [[ level._classic_setup_func ]](); - } -} - -is_survival_object() -{ - if ( !isDefined( self.script_parameters ) ) - { - return 0; - } - tokens = strtok( self.script_parameters, " " ); - remove = 0; - _a352 = tokens; - _k352 = getFirstArrayKey( _a352 ); - while ( isDefined( _k352 ) ) - { - token = _a352[ _k352 ]; - if ( token == "survival_remove" ) - { - remove = 1; - } - _k352 = getNextArrayKey( _a352, _k352 ); - } - return remove; -} - -game_module_player_damage_callback( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) -{ - self.last_damage_from_zombie_or_player = 0; - if ( isDefined( eattacker ) ) - { - if ( isplayer( eattacker ) && eattacker == self ) - { - return; - } - if ( isDefined( eattacker.is_zombie ) || eattacker.is_zombie && isplayer( eattacker ) ) - { - self.last_damage_from_zombie_or_player = 1; - } - } - if ( isDefined( self._being_shellshocked ) || self._being_shellshocked && self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - return; - } - if ( isplayer( eattacker ) && isDefined( eattacker._encounters_team ) && eattacker._encounters_team != self._encounters_team ) - { - if ( isDefined( self.hasriotshield ) && self.hasriotshield && isDefined( vdir ) ) - { - if ( isDefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped ) - { - if ( self maps/mp/zombies/_zm::player_shield_facing_attacker( vdir, 0,2 ) && isDefined( self.player_shield_apply_damage ) ) - { - return; - } - } - else - { - if ( !isDefined( self.riotshieldentity ) ) - { - if ( !self maps/mp/zombies/_zm::player_shield_facing_attacker( vdir, -0,2 ) && isDefined( self.player_shield_apply_damage ) ) - { - return; - } - } - } - } - if ( isDefined( level._game_module_player_damage_grief_callback ) ) - { - self [[ level._game_module_player_damage_grief_callback ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); - } - if ( isDefined( level._effect[ "butterflies" ] ) ) - { - if ( isDefined( sweapon ) && weapontype( sweapon ) == "grenade" ) - { - playfx( level._effect[ "butterflies" ], self.origin + vectorScale( ( 1, 1, 1 ), 40 ) ); - } - else - { - playfx( level._effect[ "butterflies" ], vpoint, vdir ); - } - } - self thread do_game_mode_shellshock(); - self playsound( "zmb_player_hit_ding" ); - } -} - -do_game_mode_shellshock() -{ - self endon( "disconnect" ); - self._being_shellshocked = 1; - self shellshock( "grief_stab_zm", 0,75 ); - wait 0,75; - self._being_shellshocked = 0; -} - -add_map_gamemode( mode, preinit_func, precache_func, main_func ) -{ - if ( !isDefined( level.gamemode_map_location_init ) ) - { - level.gamemode_map_location_init = []; - } - if ( !isDefined( level.gamemode_map_location_main ) ) - { - level.gamemode_map_location_main = []; - } - if ( !isDefined( level.gamemode_map_preinit ) ) - { - level.gamemode_map_preinit = []; - } - if ( !isDefined( level.gamemode_map_postinit ) ) - { - level.gamemode_map_postinit = []; - } - if ( !isDefined( level.gamemode_map_precache ) ) - { - level.gamemode_map_precache = []; - } - if ( !isDefined( level.gamemode_map_main ) ) - { - level.gamemode_map_main = []; - } - level.gamemode_map_preinit[ mode ] = preinit_func; - level.gamemode_map_main[ mode ] = main_func; - level.gamemode_map_precache[ mode ] = precache_func; - level.gamemode_map_location_precache[ mode ] = []; - level.gamemode_map_location_main[ mode ] = []; -} - -add_map_location_gamemode( mode, location, precache_func, main_func ) -{ - if ( !isDefined( level.gamemode_map_location_precache[ mode ] ) ) - { -/# - println( "*** ERROR : " + mode + " has not been added to the map using add_map_gamemode." ); -#/ - return; - } - level.gamemode_map_location_precache[ mode ][ location ] = precache_func; - level.gamemode_map_location_main[ mode ][ location ] = main_func; -} - -rungametypeprecache( gamemode ) -{ - if ( !isDefined( level.gamemode_map_location_main ) || !isDefined( level.gamemode_map_location_main[ gamemode ] ) ) - { - return; - } - if ( isDefined( level.gamemode_map_precache ) ) - { - if ( isDefined( level.gamemode_map_precache[ gamemode ] ) ) - { - [[ level.gamemode_map_precache[ gamemode ] ]](); - } - } - if ( isDefined( level.gamemode_map_location_precache ) ) - { - if ( isDefined( level.gamemode_map_location_precache[ gamemode ] ) ) - { - loc = getDvar( "ui_zm_mapstartlocation" ); - if ( loc == "" && isDefined( level.default_start_location ) ) - { - loc = level.default_start_location; - } - if ( isDefined( level.gamemode_map_location_precache[ gamemode ][ loc ] ) ) - { - [[ level.gamemode_map_location_precache[ gamemode ][ loc ] ]](); - } - } - } - if ( isDefined( level.precachecustomcharacters ) ) - { - self [[ level.precachecustomcharacters ]](); - } -} - -rungametypemain( gamemode, mode_main_func, use_round_logic ) -{ - if ( !isDefined( level.gamemode_map_location_main ) || !isDefined( level.gamemode_map_location_main[ gamemode ] ) ) - { - return; - } - level thread game_objects_allowed( get_gamemode_var( "mode" ), get_gamemode_var( "location" ) ); - if ( isDefined( level.gamemode_map_main ) ) - { - if ( isDefined( level.gamemode_map_main[ gamemode ] ) ) - { - level thread [[ level.gamemode_map_main[ gamemode ] ]](); - } - } - if ( isDefined( level.gamemode_map_location_main ) ) - { - if ( isDefined( level.gamemode_map_location_main[ gamemode ] ) ) - { - loc = getDvar( "ui_zm_mapstartlocation" ); - if ( loc == "" && isDefined( level.default_start_location ) ) - { - loc = level.default_start_location; - } - if ( isDefined( level.gamemode_map_location_main[ gamemode ][ loc ] ) ) - { - level thread [[ level.gamemode_map_location_main[ gamemode ][ loc ] ]](); - } - } - } - if ( isDefined( mode_main_func ) ) - { - if ( isDefined( use_round_logic ) && use_round_logic ) - { - level thread round_logic( mode_main_func ); - } - else - { - level thread non_round_logic( mode_main_func ); - } - } - level thread game_end_func(); -} - -round_logic( mode_logic_func ) -{ - level.skit_vox_override = 1; - if ( isDefined( level.flag[ "start_zombie_round_logic" ] ) ) - { - flag_wait( "start_zombie_round_logic" ); - } - flag_wait( "start_encounters_match_logic" ); - if ( !isDefined( game[ "gamemode_match" ][ "rounds" ] ) ) - { - game[ "gamemode_match" ][ "rounds" ] = []; - } - set_gamemode_var_once( "current_round", 0 ); - set_gamemode_var_once( "team_1_score", 0 ); - set_gamemode_var_once( "team_2_score", 0 ); - if ( isDefined( is_encounter() ) && is_encounter() ) - { - [[ level._setteamscore ]]( "allies", get_gamemode_var( "team_2_score" ) ); - [[ level._setteamscore ]]( "axis", get_gamemode_var( "team_1_score" ) ); - } - flag_set( "pregame" ); - waittillframeend; - level.gameended = 0; - cur_round = get_gamemode_var( "current_round" ); - set_gamemode_var( "current_round", cur_round + 1 ); - game[ "gamemode_match" ][ "rounds" ][ cur_round ] = spawnstruct(); - game[ "gamemode_match" ][ "rounds" ][ cur_round ].mode = getDvar( "ui_gametype" ); - level thread [[ mode_logic_func ]](); - flag_wait( "start_encounters_match_logic" ); - level.gamestarttime = getTime(); - level.gamelengthtime = undefined; - level thread createtimer(); - level notify( "clear_hud_elems" ); - level waittill( "game_module_ended", winner ); - game[ "gamemode_match" ][ "rounds" ][ cur_round ].winner = winner; - level thread kill_all_zombies(); - level.gameendtime = getTime(); - level.gamelengthtime = level.gameendtime - level.gamestarttime; - level.gameended = 1; - if ( winner == "A" ) - { - score = get_gamemode_var( "team_1_score" ); - set_gamemode_var( "team_1_score", score + 1 ); - } - else - { - score = get_gamemode_var( "team_2_score" ); - set_gamemode_var( "team_2_score", score + 1 ); - } - if ( isDefined( is_encounter() ) && is_encounter() ) - { - [[ level._setteamscore ]]( "allies", get_gamemode_var( "team_2_score" ) ); - [[ level._setteamscore ]]( "axis", get_gamemode_var( "team_1_score" ) ); - if ( get_gamemode_var( "team_1_score" ) == get_gamemode_var( "team_2_score" ) ) - { - level thread maps/mp/zombies/_zm_audio::zmbvoxcrowdonteam( "win" ); - level thread maps/mp/zombies/_zm_audio_announcer::announceroundwinner( "tied" ); - } - else - { - level thread maps/mp/zombies/_zm_audio::zmbvoxcrowdonteam( "win", winner, "lose" ); - level thread maps/mp/zombies/_zm_audio_announcer::announceroundwinner( winner ); - } - } - level thread delete_corpses(); - level delay_thread( 5, ::revive_laststand_players ); - level notify( "clear_hud_elems" ); - while ( startnextzmround( winner ) ) - { - level clientnotify( "gme" ); - while ( 1 ) - { - wait 1; - } - } - level.match_is_ending = 1; - if ( isDefined( is_encounter() ) && is_encounter() ) - { - matchwonteam = ""; - if ( get_gamemode_var( "team_1_score" ) > get_gamemode_var( "team_2_score" ) ) - { - matchwonteam = "A"; - } - else - { - matchwonteam = "B"; - } - level thread maps/mp/zombies/_zm_audio::zmbvoxcrowdonteam( "win", matchwonteam, "lose" ); - level thread maps/mp/zombies/_zm_audio_announcer::announcematchwinner( matchwonteam ); - level create_final_score(); - track_encounters_win_stats( matchwonteam ); - } - maps/mp/zombies/_zm::intermission(); - level.can_revive_game_module = undefined; - level notify( "end_game" ); -} - -end_rounds_early( winner ) -{ - level.forcedend = 1; - cur_round = get_gamemode_var( "current_round" ); - set_gamemode_var( "ZM_roundLimit", cur_round ); - if ( isDefined( winner ) ) - { - level notify( "game_module_ended" ); - } - else - { - level notify( "end_game" ); - } -} - -checkzmroundswitch() -{ - if ( !isDefined( level.zm_roundswitch ) || !level.zm_roundswitch ) - { - return 0; - } -/# - assert( get_gamemode_var( "current_round" ) > 0 ); -#/ - return 1; - return 0; -} - -create_hud_scoreboard() -{ - level endon( "end_game" ); - level thread module_hud_full_screen_overlay(); - level thread module_hud_team_1_score(); - level thread module_hud_team_2_score(); - level thread module_hud_round_num(); - respawn_spectators_and_freeze_players(); - waittill_any_or_timeout( 6, "clear_hud_elems" ); - wait 2,1; -} - -respawn_spectators_and_freeze_players() -{ - players = get_players(); - _a785 = players; - _k785 = getFirstArrayKey( _a785 ); - while ( isDefined( _k785 ) ) - { - player = _a785[ _k785 ]; - if ( player.sessionstate == "spectator" ) - { - if ( isDefined( player.spectate_hud ) ) - { - player.spectate_hud destroy(); - } - player [[ level.spawnplayer ]](); - } - player freeze_player_controls( 1 ); - _k785 = getNextArrayKey( _a785, _k785 ); - } -} - -module_hud_team_1_score() -{ - level._encounters_score_1 = newhudelem(); - level._encounters_score_1.x = 0; - level._encounters_score_1.y = 260; - level._encounters_score_1.alignx = "center"; - level._encounters_score_1.horzalign = "center"; - level._encounters_score_1.vertalign = "top"; - level._encounters_score_1.font = "default"; - level._encounters_score_1.fontscale = 2,3; - level._encounters_score_1.color = ( 1, 1, 1 ); - level._encounters_score_1.foreground = 1; - level._encounters_score_1 settext( "Team CIA: " + get_gamemode_var( "team_1_score" ) ); - level._encounters_score_1.alpha = 0; - level._encounters_score_1.sort = 11; - level._encounters_score_1 fadeovertime( 2 ); - level._encounters_score_1.alpha = 1; - level waittill_any_or_timeout( 6, "clear_hud_elems" ); - level._encounters_score_1 fadeovertime( 2 ); - level._encounters_score_1.alpha = 0; - wait 2,1; - level._encounters_score_1 destroy(); -} - -module_hud_team_2_score() -{ - level._encounters_score_2 = newhudelem(); - level._encounters_score_2.x = 0; - level._encounters_score_2.y = 290; - level._encounters_score_2.alignx = "center"; - level._encounters_score_2.horzalign = "center"; - level._encounters_score_2.vertalign = "top"; - level._encounters_score_2.font = "default"; - level._encounters_score_2.fontscale = 2,3; - level._encounters_score_2.color = ( 1, 1, 1 ); - level._encounters_score_2.foreground = 1; - level._encounters_score_2 settext( "Team CDC: " + get_gamemode_var( "team_2_score" ) ); - level._encounters_score_2.alpha = 0; - level._encounters_score_2.sort = 12; - level._encounters_score_2 fadeovertime( 2 ); - level._encounters_score_2.alpha = 1; - level waittill_any_or_timeout( 6, "clear_hud_elems" ); - level._encounters_score_2 fadeovertime( 2 ); - level._encounters_score_2.alpha = 0; - wait 2,1; - level._encounters_score_2 destroy(); -} - -module_hud_round_num() -{ - level._encounters_round_num = newhudelem(); - level._encounters_round_num.x = 0; - level._encounters_round_num.y = 60; - level._encounters_round_num.alignx = "center"; - level._encounters_round_num.horzalign = "center"; - level._encounters_round_num.vertalign = "top"; - level._encounters_round_num.font = "default"; - level._encounters_round_num.fontscale = 2,3; - level._encounters_round_num.color = ( 1, 1, 1 ); - level._encounters_round_num.foreground = 1; - level._encounters_round_num settext( "Round: ^5" + get_gamemode_var( "current_round" ) + " / " + get_game_var( "ZM_roundLimit" ) ); - level._encounters_round_num.alpha = 0; - level._encounters_round_num.sort = 13; - level._encounters_round_num fadeovertime( 2 ); - level._encounters_round_num.alpha = 1; - level waittill_any_or_timeout( 6, "clear_hud_elems" ); - level._encounters_round_num fadeovertime( 2 ); - level._encounters_round_num.alpha = 0; - wait 2,1; - level._encounters_round_num destroy(); -} - -createtimer() -{ - flag_waitopen( "pregame" ); - elem = newhudelem(); - elem.hidewheninmenu = 1; - elem.horzalign = "center"; - elem.vertalign = "top"; - elem.alignx = "center"; - elem.aligny = "middle"; - elem.x = 0; - elem.y = 0; - elem.foreground = 1; - elem.font = "default"; - elem.fontscale = 1,5; - elem.color = ( 1, 1, 1 ); - elem.alpha = 2; - elem thread maps/mp/gametypes_zm/_hud::fontpulseinit(); - if ( isDefined( level.timercountdown ) && level.timercountdown ) - { - elem settenthstimer( level.timelimit * 60 ); - } - else - { - elem settenthstimerup( 0,1 ); - } - level.game_module_timer = elem; - level waittill( "game_module_ended" ); - elem destroy(); -} - -revive_laststand_players() -{ - if ( isDefined( level.match_is_ending ) && level.match_is_ending ) - { - return; - } - players = get_players(); - _a917 = players; - _k917 = getFirstArrayKey( _a917 ); - while ( isDefined( _k917 ) ) - { - player = _a917[ _k917 ]; - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - player thread maps/mp/zombies/_zm_laststand::auto_revive( player ); - } - _k917 = getNextArrayKey( _a917, _k917 ); - } -} - -team_icon_winner( elem ) -{ - og_x = elem.x; - og_y = elem.y; - elem.sort = 1; - elem scaleovertime( 0,75, 150, 150 ); - elem moveovertime( 0,75 ); - elem.horzalign = "center"; - elem.vertalign = "middle"; - elem.x = 0; - elem.y = 0; - elem.alpha = 0,7; - wait 0,75; -} - -delete_corpses() -{ - corpses = getcorpsearray(); - x = 0; - while ( x < corpses.size ) - { - corpses[ x ] delete(); - x++; - } -} - -track_encounters_win_stats( matchwonteam ) -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ]._encounters_team == matchwonteam ) - { - players[ i ] maps/mp/zombies/_zm_stats::increment_client_stat( "wins" ); - players[ i ] maps/mp/zombies/_zm_stats::add_client_stat( "losses", -1 ); - players[ i ] adddstat( "skill_rating", 1 ); - players[ i ] setdstat( "skill_variance", 1 ); - players[ i ] maps/mp/zombies/_zm_stats::add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "wins", 1 ); - players[ i ] maps/mp/zombies/_zm_stats::add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "losses", -1 ); - } - else - { - players[ i ] setdstat( "skill_rating", 0 ); - players[ i ] setdstat( "skill_variance", 1 ); - } - players[ i ] updatestatratio( "wlratio", "wins", "losses" ); - i++; - } -} - -module_hud_full_screen_overlay() -{ - fadetoblack = newhudelem(); - fadetoblack.x = 0; - fadetoblack.y = 0; - fadetoblack.horzalign = "fullscreen"; - fadetoblack.vertalign = "fullscreen"; - fadetoblack setshader( "black", 640, 480 ); - fadetoblack.color = ( 1, 1, 1 ); - fadetoblack.alpha = 1; - fadetoblack.foreground = 1; - fadetoblack.sort = 0; - if ( is_encounter() || getDvar( "ui_gametype" ) == "zcleansed" ) - { - level waittill_any_or_timeout( 25, "start_fullscreen_fade_out" ); - } - else - { - level waittill_any_or_timeout( 25, "start_zombie_round_logic" ); - } - fadetoblack fadeovertime( 2 ); - fadetoblack.alpha = 0; - wait 2,1; - fadetoblack destroy(); -} - -create_final_score() -{ - level endon( "end_game" ); - level thread module_hud_team_winer_score(); - wait 2; - level thread module_hud_full_screen_overlay(); - wait 8; -} - -module_hud_team_winer_score() -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] thread create_module_hud_team_winer_score(); - if ( isDefined( players[ i ]._team_hud ) && isDefined( players[ i ]._team_hud[ "team" ] ) ) - { - players[ i ] thread team_icon_winner( players[ i ]._team_hud[ "team" ] ); - } - if ( isDefined( level.lock_player_on_team_score ) && level.lock_player_on_team_score ) - { - players[ i ] freezecontrols( 1 ); - players[ i ] takeallweapons(); - players[ i ] setclientuivisibilityflag( "hud_visible", 0 ); - players[ i ].sessionstate = "spectator"; - players[ i ].spectatorclient = -1; - players[ i ].maxhealth = players[ i ].health; - players[ i ].shellshocked = 0; - players[ i ].inwater = 0; - players[ i ].friendlydamage = undefined; - players[ i ].hasspawned = 1; - players[ i ].spawntime = getTime(); - players[ i ].afk = 0; - players[ i ] detachall(); - } - i++; - } - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "match_over" ); -} - -create_module_hud_team_winer_score() -{ - self._team_winer_score = newclienthudelem( self ); - self._team_winer_score.x = 0; - self._team_winer_score.y = 70; - self._team_winer_score.alignx = "center"; - self._team_winer_score.horzalign = "center"; - self._team_winer_score.vertalign = "middle"; - self._team_winer_score.font = "default"; - self._team_winer_score.fontscale = 15; - self._team_winer_score.color = ( 1, 1, 1 ); - self._team_winer_score.foreground = 1; - if ( self._encounters_team == "B" && get_gamemode_var( "team_2_score" ) > get_gamemode_var( "team_1_score" ) ) - { - self._team_winer_score settext( &"ZOMBIE_MATCH_WON" ); - } - else - { - if ( self._encounters_team == "B" && get_gamemode_var( "team_2_score" ) < get_gamemode_var( "team_1_score" ) ) - { - self._team_winer_score.color = ( 1, 1, 1 ); - self._team_winer_score settext( &"ZOMBIE_MATCH_LOST" ); - } - } - if ( self._encounters_team == "A" && get_gamemode_var( "team_1_score" ) > get_gamemode_var( "team_2_score" ) ) - { - self._team_winer_score settext( &"ZOMBIE_MATCH_WON" ); - } - else - { - if ( self._encounters_team == "A" && get_gamemode_var( "team_1_score" ) < get_gamemode_var( "team_2_score" ) ) - { - self._team_winer_score.color = ( 1, 1, 1 ); - self._team_winer_score settext( &"ZOMBIE_MATCH_LOST" ); - } - } - self._team_winer_score.alpha = 0; - self._team_winer_score.sort = 12; - self._team_winer_score fadeovertime( 2 ); - self._team_winer_score.alpha = 1; - wait 10; - self._team_winer_score fadeovertime( 2 ); - self._team_winer_score.alpha = 0; - wait 2,1; - self._team_winer_score destroy(); -} - -non_round_logic( mode_logic_func ) -{ - level thread [[ mode_logic_func ]](); -} - -game_end_func() -{ - if ( !isDefined( get_gamemode_var( "match_end_notify" ) ) && !isDefined( get_gamemode_var( "match_end_func" ) ) ) - { - return; - } - level waittill( get_gamemode_var( "match_end_notify" ), winning_team ); - level thread [[ get_gamemode_var( "match_end_func" ) ]]( winning_team ); -} - -setup_classic_gametype() -{ - ents = getentarray(); - _a1111 = ents; - _k1111 = getFirstArrayKey( _a1111 ); - while ( isDefined( _k1111 ) ) - { - ent = _a1111[ _k1111 ]; - if ( isDefined( ent.script_parameters ) ) - { - parameters = strtok( ent.script_parameters, " " ); - should_remove = 0; - _a1117 = parameters; - _k1117 = getFirstArrayKey( _a1117 ); - while ( isDefined( _k1117 ) ) - { - parm = _a1117[ _k1117 ]; - if ( parm == "survival_remove" ) - { - should_remove = 1; - } - _k1117 = getNextArrayKey( _a1117, _k1117 ); - } - if ( should_remove ) - { - ent delete(); - } - } - _k1111 = getNextArrayKey( _a1111, _k1111 ); - } - structs = getstructarray( "game_mode_object" ); - _a1147 = structs; - _k1147 = getFirstArrayKey( _a1147 ); - while ( isDefined( _k1147 ) ) - { - struct = _a1147[ _k1147 ]; - if ( !isDefined( struct.script_string ) ) - { - } - else tokens = strtok( struct.script_string, " " ); - spawn_object = 0; - _a1155 = tokens; - _k1155 = getFirstArrayKey( _a1155 ); - while ( isDefined( _k1155 ) ) - { - parm = _a1155[ _k1155 ]; - if ( parm == "survival" ) - { - spawn_object = 1; - } - _k1155 = getNextArrayKey( _a1155, _k1155 ); - } - if ( !spawn_object ) - { - } - else - { - barricade = spawn( "script_model", struct.origin ); - barricade.angles = struct.angles; - barricade setmodel( struct.script_parameters ); - } - _k1147 = getNextArrayKey( _a1147, _k1147 ); - } - unlink_meat_traversal_nodes(); -} - -zclassic_main() -{ - level thread setup_classic_gametype(); - level thread maps/mp/zombies/_zm::round_start(); -} - -unlink_meat_traversal_nodes() -{ - meat_town_nodes = getnodearray( "meat_town_barrier_traversals", "targetname" ); - meat_tunnel_nodes = getnodearray( "meat_tunnel_barrier_traversals", "targetname" ); - meat_farm_nodes = getnodearray( "meat_farm_barrier_traversals", "targetname" ); - nodes = arraycombine( meat_town_nodes, meat_tunnel_nodes, 1, 0 ); - traversal_nodes = arraycombine( nodes, meat_farm_nodes, 1, 0 ); - _a1193 = traversal_nodes; - _k1193 = getFirstArrayKey( _a1193 ); - while ( isDefined( _k1193 ) ) - { - node = _a1193[ _k1193 ]; - end_node = getnode( node.target, "targetname" ); - unlink_nodes( node, end_node ); - _k1193 = getNextArrayKey( _a1193, _k1193 ); - } -} - -canplayersuicide() -{ - return self hasperk( "specialty_scavenger" ); -} - -onplayerdisconnect() -{ - if ( isDefined( level.game_mode_custom_onplayerdisconnect ) ) - { - level [[ level.game_mode_custom_onplayerdisconnect ]]( self ); - } - level thread maps/mp/zombies/_zm::check_quickrevive_for_hotjoin( 1 ); - self maps/mp/zombies/_zm_laststand::add_weighted_down(); - level maps/mp/zombies/_zm::checkforalldead( self ); -} - -ondeadevent( team ) -{ - thread maps/mp/gametypes_zm/_globallogic::endgame( level.zombie_team, "" ); -} - -onspawnintermission() -{ - spawnpointname = "info_intermission"; - spawnpoints = getentarray( spawnpointname, "classname" ); - if ( spawnpoints.size < 1 ) - { -/# - println( "NO " + spawnpointname + " SPAWNPOINTS IN MAP" ); -#/ - return; - } - spawnpoint = spawnpoints[ randomint( spawnpoints.size ) ]; - if ( isDefined( spawnpoint ) ) - { - self spawn( spawnpoint.origin, spawnpoint.angles ); - } -} - -onspawnspectator( origin, angles ) -{ -} - -mayspawn() -{ - if ( isDefined( level.custommayspawnlogic ) ) - { - return self [[ level.custommayspawnlogic ]](); - } - if ( self.pers[ "lives" ] == 0 ) - { - level notify( "player_eliminated" ); - self notify( "player_eliminated" ); - return 0; - } - return 1; -} - -onstartgametype() -{ - setclientnamemode( "auto_change" ); - level.displayroundendtext = 0; - maps/mp/gametypes_zm/_spawning::create_map_placed_influencers(); - if ( !isoneround() ) - { - level.displayroundendtext = 1; - if ( isscoreroundbased() ) - { - maps/mp/gametypes_zm/_globallogic_score::resetteamscores(); - } - } -} - -displayroundend( round_winner ) -{ - players = get_players(); - _a1318 = players; - _k1318 = getFirstArrayKey( _a1318 ); - while ( isDefined( _k1318 ) ) - { - player = _a1318[ _k1318 ]; - player thread module_hud_round_end( round_winner ); - if ( isDefined( player._team_hud ) && isDefined( player._team_hud[ "team" ] ) ) - { - player thread team_icon_winner( player._team_hud[ "team" ] ); - } - player delay_thread( 5, ::freeze_player_controls, 1 ); - _k1318 = getNextArrayKey( _a1318, _k1318 ); - } - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "round_end" ); - level thread maps/mp/zombies/_zm_audio::zmbvoxcrowdonteam( "clap" ); - level thread play_sound_2d( "zmb_air_horn" ); - wait 5; -} - -module_hud_round_end( round_winner ) -{ - self endon( "disconnect" ); - self._team_winner_round = newclienthudelem( self ); - self._team_winner_round.x = 0; - self._team_winner_round.y = 50; - self._team_winner_round.alignx = "center"; - self._team_winner_round.horzalign = "center"; - self._team_winner_round.vertalign = "middle"; - self._team_winner_round.font = "default"; - self._team_winner_round.fontscale = 15; - self._team_winner_round.color = ( 1, 1, 1 ); - self._team_winner_round.foreground = 1; - if ( self._encounters_team == round_winner ) - { - self._team_winner_round.color = ( 1, 1, 1 ); - self._team_winner_round settext( "YOU WIN" ); - } - else - { - self._team_winner_round.color = ( 1, 1, 1 ); - self._team_winner_round settext( "YOU LOSE" ); - } - self._team_winner_round.alpha = 0; - self._team_winner_round.sort = 12; - self._team_winner_round fadeovertime( 1 ); - self._team_winner_round.alpha = 1; - wait 4; - self._team_winner_round fadeovertime( 1 ); - self._team_winner_round.alpha = 0; - wait 1,1; - self._team_winner_round destroy(); -} - -displayroundswitch() -{ - level._round_changing_sides = newhudelem(); - level._round_changing_sides.x = 0; - level._round_changing_sides.y = 60; - level._round_changing_sides.alignx = "center"; - level._round_changing_sides.horzalign = "center"; - level._round_changing_sides.vertalign = "middle"; - level._round_changing_sides.font = "default"; - level._round_changing_sides.fontscale = 2,3; - level._round_changing_sides.color = ( 1, 1, 1 ); - level._round_changing_sides.foreground = 1; - level._round_changing_sides.sort = 12; - fadetoblack = newhudelem(); - fadetoblack.x = 0; - fadetoblack.y = 0; - fadetoblack.horzalign = "fullscreen"; - fadetoblack.vertalign = "fullscreen"; - fadetoblack setshader( "black", 640, 480 ); - fadetoblack.color = ( 1, 1, 1 ); - fadetoblack.alpha = 1; - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "side_switch" ); - level._round_changing_sides settext( "CHANGING SIDES" ); - level._round_changing_sides fadeovertime( 1 ); - level._round_changing_sides.alpha = 1; - wait 2; - fadetoblack fadeovertime( 1 ); - level._round_changing_sides fadeovertime( 1 ); - level._round_changing_sides.alpha = 0; - fadetoblack.alpha = 0; - wait 1,1; - level._round_changing_sides destroy(); - fadetoblack destroy(); -} - -module_hud_create_team_name() -{ - if ( !is_encounter() ) - { - return; - } - if ( !isDefined( self._team_hud ) ) - { - self._team_hud = []; - } - if ( isDefined( self._team_hud[ "team" ] ) ) - { - self._team_hud[ "team" ] destroy(); - } - elem = newclienthudelem( self ); - elem.hidewheninmenu = 1; - elem.alignx = "center"; - elem.aligny = "middle"; - elem.horzalign = "center"; - elem.vertalign = "middle"; - elem.x = 0; - elem.y = 0; - if ( isDefined( level.game_module_team_name_override_og_x ) ) - { - elem.og_x = level.game_module_team_name_override_og_x; - } - else - { - elem.og_x = 85; - } - elem.og_y = -40; - elem.foreground = 1; - elem.font = "default"; - elem.color = ( 1, 1, 1 ); - elem.sort = 1; - elem.alpha = 0,7; - elem setshader( game[ "icons" ][ self.team ], 150, 150 ); - self._team_hud[ "team" ] = elem; -} - -startnextzmround( winner ) -{ - if ( !isonezmround() ) - { - if ( !waslastzmround() ) - { - displayroundend( winner ); - create_hud_scoreboard(); - if ( checkzmroundswitch() ) - { - displayroundswitch(); - } - setmatchtalkflag( "DeadChatWithDead", level.voip.deadchatwithdead ); - setmatchtalkflag( "DeadChatWithTeam", level.voip.deadchatwithteam ); - setmatchtalkflag( "DeadHearTeamLiving", level.voip.deadhearteamliving ); - setmatchtalkflag( "DeadHearAllLiving", level.voip.deadhearallliving ); - setmatchtalkflag( "EveryoneHearsEveryone", level.voip.everyonehearseveryone ); - setmatchtalkflag( "DeadHearKiller", level.voip.deadhearkiller ); - setmatchtalkflag( "KillersHearVictim", level.voip.killershearvictim ); - game[ "state" ] = "playing"; - level.allowbattlechatter = getgametypesetting( "allowBattleChatter" ); - if ( isDefined( level.zm_switchsides_on_roundswitch ) && level.zm_switchsides_on_roundswitch ) - { - set_game_var( "switchedsides", !get_game_var( "switchedsides" ) ); - } - map_restart( 1 ); - return 1; - } - } - return 0; -} - -start_round() -{ - flag_clear( "start_encounters_match_logic" ); - if ( !isDefined( level._module_round_hud ) ) - { - level._module_round_hud = newhudelem(); - level._module_round_hud.x = 0; - level._module_round_hud.y = 70; - level._module_round_hud.alignx = "center"; - level._module_round_hud.horzalign = "center"; - level._module_round_hud.vertalign = "middle"; - level._module_round_hud.font = "default"; - level._module_round_hud.fontscale = 2,3; - level._module_round_hud.color = ( 1, 1, 1 ); - level._module_round_hud.foreground = 1; - level._module_round_hud.sort = 0; - } - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] freeze_player_controls( 1 ); - i++; - } - level._module_round_hud.alpha = 1; - label = &"Next Round Starting In ^2"; - level._module_round_hud.label = label; - level._module_round_hud settimer( 3 ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "countdown" ); - level thread maps/mp/zombies/_zm_audio::zmbvoxcrowdonteam( "clap" ); - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "round_start" ); - level notify( "start_fullscreen_fade_out" ); - wait 2; - level._module_round_hud fadeovertime( 1 ); - level._module_round_hud.alpha = 0; - wait 1; - level thread play_sound_2d( "zmb_air_horn" ); - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] freeze_player_controls( 0 ); - players[ i ] sprintuprequired(); - i++; - } - flag_set( "start_encounters_match_logic" ); - flag_clear( "pregame" ); - level._module_round_hud destroy(); -} - -isonezmround() -{ - if ( get_game_var( "ZM_roundLimit" ) == 1 ) - { - return 1; - } - return 0; -} - -waslastzmround() -{ - if ( isDefined( level.forcedend ) && level.forcedend ) - { - return 1; - } - if ( !hitzmroundlimit() || hitzmscorelimit() && hitzmroundwinlimit() ) - { - return 1; - } - return 0; -} - -hitzmroundlimit() -{ - if ( get_game_var( "ZM_roundLimit" ) <= 0 ) - { - return 0; - } - return getzmroundsplayed() >= get_game_var( "ZM_roundLimit" ); -} - -hitzmroundwinlimit() -{ - if ( !isDefined( get_game_var( "ZM_roundWinLimit" ) ) || get_game_var( "ZM_roundWinLimit" ) <= 0 ) - { - return 0; - } - if ( get_gamemode_var( "team_1_score" ) >= get_game_var( "ZM_roundWinLimit" ) || get_gamemode_var( "team_2_score" ) >= get_game_var( "ZM_roundWinLimit" ) ) - { - return 1; - } - if ( get_gamemode_var( "team_1_score" ) >= get_game_var( "ZM_roundWinLimit" ) || get_gamemode_var( "team_2_score" ) >= get_game_var( "ZM_roundWinLimit" ) ) - { - if ( get_gamemode_var( "team_1_score" ) != get_gamemode_var( "team_2_score" ) ) - { - return 1; - } - } - return 0; -} - -hitzmscorelimit() -{ - if ( get_game_var( "ZM_scoreLimit" ) <= 0 ) - { - return 0; - } - if ( is_encounter() ) - { - if ( get_gamemode_var( "team_1_score" ) >= get_game_var( "ZM_scoreLimit" ) || get_gamemode_var( "team_2_score" ) >= get_game_var( "ZM_scoreLimit" ) ) - { - return 1; - } - } - return 0; -} - -getzmroundsplayed() -{ - return get_gamemode_var( "current_round" ); -} - -onspawnplayerunified() -{ - onspawnplayer( 0 ); -} - -onspawnplayer( predictedspawn ) -{ - if ( !isDefined( predictedspawn ) ) - { - predictedspawn = 0; - } - pixbeginevent( "ZSURVIVAL:onSpawnPlayer" ); - self.usingobj = undefined; - self.is_zombie = 0; - if ( isDefined( level.custom_spawnplayer ) && isDefined( self.player_initialized ) && self.player_initialized ) - { - self [[ level.custom_spawnplayer ]](); - return; - } - if ( isDefined( level.customspawnlogic ) ) - { -/# - println( "ZM >> USE CUSTOM SPAWNING" ); -#/ - self [[ level.customspawnlogic ]]( predictedspawn ); - if ( predictedspawn ) - { - return; - } - } - else /# - println( "ZM >> USE STANDARD SPAWNING" ); -#/ - if ( flag( "begin_spawning" ) ) - { - spawnpoint = maps/mp/zombies/_zm::check_for_valid_spawn_near_team( self, 1 ); -/# - if ( !isDefined( spawnpoint ) ) - { - println( "ZM >> WARNING UNABLE TO FIND RESPAWN POINT NEAR TEAM - USING INITIAL SPAWN POINTS" ); -#/ - } - } - if ( !isDefined( spawnpoint ) ) - { - match_string = ""; - location = level.scr_zm_map_start_location; - if ( location != "default" && location == "" && isDefined( level.default_start_location ) ) - { - location = level.default_start_location; - } - match_string = ( level.scr_zm_ui_gametype + "_" ) + location; - spawnpoints = []; - structs = getstructarray( "initial_spawn", "script_noteworthy" ); - while ( isDefined( structs ) ) - { - _a1722 = structs; - _k1722 = getFirstArrayKey( _a1722 ); - while ( isDefined( _k1722 ) ) - { - struct = _a1722[ _k1722 ]; - while ( isDefined( struct.script_string ) ) - { - tokens = strtok( struct.script_string, " " ); - _a1728 = tokens; - _k1728 = getFirstArrayKey( _a1728 ); - while ( isDefined( _k1728 ) ) - { - token = _a1728[ _k1728 ]; - if ( token == match_string ) - { - spawnpoints[ spawnpoints.size ] = struct; - } - _k1728 = getNextArrayKey( _a1728, _k1728 ); - } - } - _k1722 = getNextArrayKey( _a1722, _k1722 ); - } - } - if ( !isDefined( spawnpoints ) || spawnpoints.size == 0 ) - { - spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); - } -/# - assert( isDefined( spawnpoints ), "Could not find initial spawn points!" ); -#/ - spawnpoint = maps/mp/zombies/_zm::getfreespawnpoint( spawnpoints, self ); - } - if ( predictedspawn ) - { - self predictspawnpoint( spawnpoint.origin, spawnpoint.angles ); - return; - } - else - { - self spawn( spawnpoint.origin, spawnpoint.angles, "zsurvival" ); - } - self.entity_num = self getentitynumber(); - self thread maps/mp/zombies/_zm::onplayerspawned(); - self thread maps/mp/zombies/_zm::player_revive_monitor(); - self freezecontrols( 1 ); - self.spectator_respawn = spawnpoint; - self.score = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "score" ); - self.pers[ "participation" ] = 0; -/# - if ( getDvarInt( "zombie_cheat" ) >= 1 ) - { - self.score = 100000; -#/ - } - self.score_total = self.score; - self.old_score = self.score; - self.player_initialized = 0; - self.zombification_time = 0; - self.enabletext = 1; - self thread maps/mp/zombies/_zm_blockers::rebuild_barrier_reward_reset(); - if ( isDefined( level.host_ended_game ) && !level.host_ended_game ) - { - self freeze_player_controls( 0 ); - self enableweapons(); - } - if ( isDefined( level.game_mode_spawn_player_logic ) ) - { - spawn_in_spectate = [[ level.game_mode_spawn_player_logic ]](); - if ( spawn_in_spectate ) - { - self delay_thread( 0,05, ::maps/mp/zombies/_zm::spawnspectator ); - } - } - pixendevent(); -} - -get_player_spawns_for_gametype() -{ - match_string = ""; - location = level.scr_zm_map_start_location; - if ( location != "default" && location == "" && isDefined( level.default_start_location ) ) - { - location = level.default_start_location; - } - match_string = ( level.scr_zm_ui_gametype + "_" ) + location; - player_spawns = []; - structs = getstructarray( "player_respawn_point", "targetname" ); - _a1834 = structs; - _k1834 = getFirstArrayKey( _a1834 ); - while ( isDefined( _k1834 ) ) - { - struct = _a1834[ _k1834 ]; - if ( isDefined( struct.script_string ) ) - { - tokens = strtok( struct.script_string, " " ); - _a1839 = tokens; - _k1839 = getFirstArrayKey( _a1839 ); - while ( isDefined( _k1839 ) ) - { - token = _a1839[ _k1839 ]; - if ( token == match_string ) - { - player_spawns[ player_spawns.size ] = struct; - } - _k1839 = getNextArrayKey( _a1839, _k1839 ); - } - } - else player_spawns[ player_spawns.size ] = struct; - _k1834 = getNextArrayKey( _a1834, _k1834 ); - } - return player_spawns; -} - -onendgame( winningteam ) -{ -} - -onroundendgame( roundwinner ) -{ - if ( game[ "roundswon" ][ "allies" ] == game[ "roundswon" ][ "axis" ] ) - { - winner = "tie"; - } - else if ( game[ "roundswon" ][ "axis" ] > game[ "roundswon" ][ "allies" ] ) - { - winner = "axis"; - } - else - { - winner = "allies"; - } - return winner; -} - -menu_init() -{ - game[ "menu_team" ] = "team_marinesopfor"; - game[ "menu_changeclass_allies" ] = "changeclass"; - game[ "menu_initteam_allies" ] = "initteam_marines"; - game[ "menu_changeclass_axis" ] = "changeclass"; - game[ "menu_initteam_axis" ] = "initteam_opfor"; - game[ "menu_class" ] = "class"; - game[ "menu_changeclass" ] = "changeclass"; - game[ "menu_changeclass_offline" ] = "changeclass"; - game[ "menu_wager_side_bet" ] = "sidebet"; - game[ "menu_wager_side_bet_player" ] = "sidebet_player"; - game[ "menu_changeclass_wager" ] = "changeclass_wager"; - game[ "menu_changeclass_custom" ] = "changeclass_custom"; - game[ "menu_changeclass_barebones" ] = "changeclass_barebones"; - game[ "menu_controls" ] = "ingame_controls"; - game[ "menu_options" ] = "ingame_options"; - game[ "menu_leavegame" ] = "popup_leavegame"; - game[ "menu_restartgamepopup" ] = "restartgamepopup"; - precachemenu( game[ "menu_controls" ] ); - precachemenu( game[ "menu_options" ] ); - precachemenu( game[ "menu_leavegame" ] ); - precachemenu( game[ "menu_restartgamepopup" ] ); - precachemenu( "scoreboard" ); - precachemenu( game[ "menu_team" ] ); - precachemenu( game[ "menu_changeclass_allies" ] ); - precachemenu( game[ "menu_initteam_allies" ] ); - precachemenu( game[ "menu_changeclass_axis" ] ); - precachemenu( game[ "menu_class" ] ); - precachemenu( game[ "menu_changeclass" ] ); - precachemenu( game[ "menu_initteam_axis" ] ); - precachemenu( game[ "menu_changeclass_offline" ] ); - precachemenu( game[ "menu_changeclass_wager" ] ); - precachemenu( game[ "menu_changeclass_custom" ] ); - precachemenu( game[ "menu_changeclass_barebones" ] ); - precachemenu( game[ "menu_wager_side_bet" ] ); - precachemenu( game[ "menu_wager_side_bet_player" ] ); - precachestring( &"MP_HOST_ENDED_GAME" ); - precachestring( &"MP_HOST_ENDGAME_RESPONSE" ); - level thread menu_onplayerconnect(); -} - -menu_onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread menu_onmenuresponse(); - } -} - -menu_onmenuresponse() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "menuresponse", menu, response ); - if ( response == "back" ) - { - self closemenu(); - self closeingamemenu(); - if ( level.console ) - { - if ( game[ "menu_changeclass" ] != menu && game[ "menu_changeclass_offline" ] != menu || menu == game[ "menu_team" ] && menu == game[ "menu_controls" ] ) - { - if ( self.pers[ "team" ] == "allies" ) - { - self openmenu( game[ "menu_class" ] ); - } - if ( self.pers[ "team" ] == "axis" ) - { - self openmenu( game[ "menu_class" ] ); - } - } - } - continue; - } - else if ( response == "changeteam" && level.allow_teamchange == "1" ) - { - self closemenu(); - self closeingamemenu(); - self openmenu( game[ "menu_team" ] ); - } - if ( response == "changeclass_marines" ) - { - self closemenu(); - self closeingamemenu(); - self openmenu( game[ "menu_changeclass_allies" ] ); - continue; - } - else if ( response == "changeclass_opfor" ) - { - self closemenu(); - self closeingamemenu(); - self openmenu( game[ "menu_changeclass_axis" ] ); - continue; - } - else if ( response == "changeclass_wager" ) - { - self closemenu(); - self closeingamemenu(); - self openmenu( game[ "menu_changeclass_wager" ] ); - continue; - } - else if ( response == "changeclass_custom" ) - { - self closemenu(); - self closeingamemenu(); - self openmenu( game[ "menu_changeclass_custom" ] ); - continue; - } - else if ( response == "changeclass_barebones" ) - { - self closemenu(); - self closeingamemenu(); - self openmenu( game[ "menu_changeclass_barebones" ] ); - continue; - } - else if ( response == "changeclass_marines_splitscreen" ) - { - self openmenu( "changeclass_marines_splitscreen" ); - } - if ( response == "changeclass_opfor_splitscreen" ) - { - self openmenu( "changeclass_opfor_splitscreen" ); - } - if ( response == "endgame" ) - { - if ( self issplitscreen() ) - { - level.skipvote = 1; - if ( isDefined( level.gameended ) && !level.gameended ) - { - self maps/mp/zombies/_zm_laststand::add_weighted_down(); - self maps/mp/zombies/_zm_stats::increment_client_stat( "deaths" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "deaths" ); - self maps/mp/zombies/_zm_pers_upgrades::pers_upgrade_jugg_player_death_stat(); - level.host_ended_game = 1; - maps/mp/zombies/_zm_game_module::freeze_players( 1 ); - level notify( "end_game" ); - } - } - continue; - } - else if ( response == "restart_level_zm" ) - { - self maps/mp/zombies/_zm_laststand::add_weighted_down(); - self maps/mp/zombies/_zm_stats::increment_client_stat( "deaths" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "deaths" ); - self maps/mp/zombies/_zm_pers_upgrades::pers_upgrade_jugg_player_death_stat(); - missionfailed(); - } - if ( response == "killserverpc" ) - { - level thread maps/mp/gametypes_zm/_globallogic::killserverpc(); - continue; - } - else if ( response == "endround" ) - { - if ( isDefined( level.gameended ) && !level.gameended ) - { - self maps/mp/gametypes_zm/_globallogic::gamehistoryplayerquit(); - self maps/mp/zombies/_zm_laststand::add_weighted_down(); - self closemenu(); - self closeingamemenu(); - level.host_ended_game = 1; - maps/mp/zombies/_zm_game_module::freeze_players( 1 ); - level notify( "end_game" ); - } - else - { - self closemenu(); - self closeingamemenu(); - self iprintln( &"MP_HOST_ENDGAME_RESPONSE" ); - } - continue; - } - else if ( menu == game[ "menu_team" ] && level.allow_teamchange == "1" ) - { - switch( response ) - { - case "allies": - self [[ level.allies ]](); - break; - case "axis": - self [[ level.teammenu ]]( response ); - break; - case "autoassign": - self [[ level.autoassign ]]( 1 ); - break; - case "spectator": - self [[ level.spectator ]](); - break; - } - continue; - } - else - { - if ( game[ "menu_changeclass" ] != menu && game[ "menu_changeclass_offline" ] != menu && game[ "menu_changeclass_wager" ] != menu || menu == game[ "menu_changeclass_custom" ] && menu == game[ "menu_changeclass_barebones" ] ) - { - self closemenu(); - self closeingamemenu(); - if ( level.rankedmatch && issubstr( response, "custom" ) ) - { - } - self.selectedclass = 1; - self [[ level.class ]]( response ); - } - } - } -} - -menuallieszombies() -{ - self maps/mp/gametypes_zm/_globallogic_ui::closemenus(); - if ( !level.console && level.allow_teamchange == "0" && isDefined( self.hasdonecombat ) && self.hasdonecombat ) - { - return; - } - if ( self.pers[ "team" ] != "allies" ) - { - if ( level.ingraceperiod || !isDefined( self.hasdonecombat ) && !self.hasdonecombat ) - { - self.hasspawned = 0; - } - if ( self.sessionstate == "playing" ) - { - self.switching_teams = 1; - self.joining_team = "allies"; - self.leaving_team = self.pers[ "team" ]; - self suicide(); - } - self.pers[ "team" ] = "allies"; - self.team = "allies"; - self.class = undefined; - self updateobjectivetext(); - if ( level.teambased ) - { - self.sessionteam = "allies"; - } - else - { - self.sessionteam = "none"; - self.ffateam = "allies"; - } - self setclientscriptmainmenu( game[ "menu_class" ] ); - self notify( "joined_team" ); - level notify( "joined_team" ); - self notify( "end_respawn" ); - } -} - -custom_spawn_init_func() -{ - array_thread( level.zombie_spawners, ::add_spawn_function, ::maps/mp/zombies/_zm_spawner::zombie_spawn_init ); - array_thread( level.zombie_spawners, ::add_spawn_function, level._zombies_round_spawn_failsafe ); -} - -kill_all_zombies() -{ - ai = getaiarray( level.zombie_team ); - _a2190 = ai; - _k2190 = getFirstArrayKey( _a2190 ); - while ( isDefined( _k2190 ) ) - { - zombie = _a2190[ _k2190 ]; - if ( isDefined( zombie ) ) - { - zombie dodamage( zombie.maxhealth * 2, zombie.origin, zombie, zombie, "none", "MOD_SUICIDE" ); - wait 0,05; - } - _k2190 = getNextArrayKey( _a2190, _k2190 ); - } -} - -init() -{ - flag_init( "pregame" ); - flag_set( "pregame" ); - level thread onplayerconnect(); -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connected", player ); - player thread onplayerspawned(); - if ( isDefined( level.game_module_onplayerconnect ) ) - { - player [[ level.game_module_onplayerconnect ]](); - } - } -} - -onplayerspawned() -{ - level endon( "end_game" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill_either( "spawned_player", "fake_spawned_player" ); - if ( isDefined( level.match_is_ending ) && level.match_is_ending ) - { - return; - } - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - self thread maps/mp/zombies/_zm_laststand::auto_revive( self ); - } - if ( isDefined( level.custom_player_fake_death_cleanup ) ) - { - self [[ level.custom_player_fake_death_cleanup ]](); - } - self setstance( "stand" ); - self.zmbdialogqueue = []; - self.zmbdialogactive = 0; - self.zmbdialoggroups = []; - self.zmbdialoggroup = ""; - if ( is_encounter() ) - { - if ( self.team == "axis" ) - { - self.characterindex = 0; - self._encounters_team = "A"; - self._team_name = &"ZOMBIE_RACE_TEAM_1"; - break; - } - else - { - self.characterindex = 1; - self._encounters_team = "B"; - self._team_name = &"ZOMBIE_RACE_TEAM_2"; - } - } - self takeallweapons(); - if ( isDefined( level.givecustomcharacters ) ) - { - self [[ level.givecustomcharacters ]](); - } - self giveweapon( "knife_zm" ); - if ( isDefined( level.onplayerspawned_restore_previous_weapons ) && isDefined( level.isresetting_grief ) && level.isresetting_grief ) - { - weapons_restored = self [[ level.onplayerspawned_restore_previous_weapons ]](); - } - if ( isDefined( weapons_restored ) && !weapons_restored ) - { - self give_start_weapon( 1 ); - } - weapons_restored = 0; - if ( isDefined( level._team_loadout ) ) - { - self giveweapon( level._team_loadout ); - self switchtoweapon( level._team_loadout ); - } - if ( isDefined( level.gamemode_post_spawn_logic ) ) - { - self [[ level.gamemode_post_spawn_logic ]](); - } - } -} - -wait_for_players() -{ - level endon( "end_race" ); - if ( getDvarInt( "party_playerCount" ) == 1 ) - { - flag_wait( "start_zombie_round_logic" ); - return; - } - while ( !flag_exists( "start_zombie_round_logic" ) ) - { - wait 0,05; - } - while ( !flag( "start_zombie_round_logic" ) && isDefined( level._module_connect_hud ) ) - { - level._module_connect_hud.alpha = 0; - level._module_connect_hud.sort = 12; - level._module_connect_hud fadeovertime( 1 ); - level._module_connect_hud.alpha = 1; - wait 1,5; - level._module_connect_hud fadeovertime( 1 ); - level._module_connect_hud.alpha = 0; - wait 1,5; - } - if ( isDefined( level._module_connect_hud ) ) - { - level._module_connect_hud destroy(); - } -} - -onplayerconnect_check_for_hotjoin() -{ -/# - if ( getDvarInt( #"EA6D219A" ) > 0 ) - { - return; -#/ - } - map_logic_exists = level flag_exists( "start_zombie_round_logic" ); - map_logic_started = flag( "start_zombie_round_logic" ); - if ( map_logic_exists && map_logic_started ) - { - self thread hide_gump_loading_for_hotjoiners(); - } -} - -hide_gump_loading_for_hotjoiners() -{ - self endon( "disconnect" ); - self.rebuild_barrier_reward = 1; - self.is_hotjoining = 1; - num = self getsnapshotackindex(); - while ( num == self getsnapshotackindex() ) - { - wait 0,25; - } - wait 0,5; - self maps/mp/zombies/_zm::spawnspectator(); - self.is_hotjoining = 0; - self.is_hotjoin = 1; - if ( is_true( level.intermission ) || is_true( level.host_ended_game ) ) - { - setclientsysstate( "levelNotify", "zi", self ); - self setclientthirdperson( 0 ); - self resetfov(); - self.health = 100; - self thread [[ level.custom_intermission ]](); - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/zclassic.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/zclassic.gsc deleted file mode 100644 index 73fcf52..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/zclassic.gsc +++ /dev/null @@ -1,28 +0,0 @@ -#include maps/mp/zombies/_zm_stats; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; - -main() -{ - maps/mp/gametypes_zm/_zm_gametype::main(); - level.onprecachegametype = ::onprecachegametype; - level.onstartgametype = ::onstartgametype; - level._game_module_custom_spawn_init_func = ::maps/mp/gametypes_zm/_zm_gametype::custom_spawn_init_func; - level._game_module_stat_update_func = ::maps/mp/zombies/_zm_stats::survival_classic_custom_stat_update; - maps/mp/gametypes_zm/_zm_gametype::post_gametype_main( "zclassic" ); -} - -onprecachegametype() -{ - level.playersuicideallowed = 1; - level.canplayersuicide = ::canplayersuicide; - level.suicide_weapon = "death_self_zm"; - precacheitem( "death_self_zm" ); - maps/mp/gametypes_zm/_zm_gametype::rungametypeprecache( "zclassic" ); -} - -onstartgametype() -{ - maps/mp/gametypes_zm/_zm_gametype::rungametypemain( "zclassic", ::maps/mp/gametypes_zm/_zm_gametype::zclassic_main ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/zcleansed.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/zcleansed.gsc deleted file mode 100644 index f9a2193..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/zcleansed.gsc +++ /dev/null @@ -1,2145 +0,0 @@ -#include maps/mp/_visionset_mgr; -#include maps/mp/zombies/_zm_weap_cymbal_monkey; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_blockers; -#include maps/mp/gametypes_zm/_globallogic_utils; -#include maps/mp/zombies/_zm_audio_announcer; -#include maps/mp/zombies/_zm; -#include maps/mp/gametypes_zm/_weapons; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/gametypes_zm/_hud; -#include maps/mp/_utility; - -main() -{ - level.using_zombie_powerups = 1; - level._game_mode_powerup_zombie_grab = ::zcleansed_zombie_powerup_grab; - level._zombiemode_powerup_grab = ::zcleansed_powerup_grab; - level._powerup_timeout_custom_time = ::zcleansed_powerup_custom_time_logic; - level._powerup_grab_check = ::powerup_can_player_grab; - setdvar( "aim_target_player_enabled", 1 ); - maps/mp/gametypes_zm/_zm_gametype::main(); - setscoreboardcolumns( "none", "score", "kills", "downs", "headshots" ); - level.cymbal_monkey_dual_view = 1; - level.onprecachegametype = ::onprecachegametype; - level.onstartgametype = ::onstartgametype; - level.custom_end_screen = ::custom_end_screen; - level._game_module_custom_spawn_init_func = ::maps/mp/gametypes_zm/_zm_gametype::custom_spawn_init_func; - level._game_module_state_update_func = ::maps/mp/zombies/_zm_stats::survival_classic_custom_stat_update; - level._effect[ "human_disappears" ] = loadfx( "maps/zombie/fx_zmb_returned_spawn_puff" ); - level._effect[ "zombie_disappears" ] = loadfx( "maps/zombie/fx_zmb_returned_spawn_puff" ); - level.human_finish_bonus_points = 250; - level.human_bonus_points = 10; - level.zombie_penalty_points = 5; - level.human_bonus_period = 1; - level.zombie_penalty_period = 10; - level.zombie_player_kill_points = 50; - level.human_player_kill_points = 50; - level.human_player_suicide_penalty = 0; - level.score_rank_bonus = array( 1,5, 0,75, 0,5, 0,25 ); - if ( isDefined( level.should_use_cia ) && level.should_use_cia ) - { - level.characterindex = 0; - } - else - { - level.characterindex = 1; - } - level.graceperiodfunc = ::waitforhumanselection; - level.customalivecheck = ::cleansed_alive_check; - level thread onplayerconnect(); - maps/mp/gametypes_zm/_zm_gametype::post_gametype_main( "zcleansed" ); - init_cleansed_powerup_fx(); -} - -onprecachegametype() -{ - level.playersuicideallowed = 1; - level.canplayersuicide = ::canplayersuicide; - level.suicide_weapon = "death_self_zm"; - precacheitem( "death_self_zm" ); - precachemodel( "zombie_pickup_perk_bottle" ); - precache_trophy(); - precacheshader( "faction_cdc" ); - precacheshader( "faction_cia" ); - init_default_zcleansed_powerups(); - maps/mp/zombies/_zm_turned::init(); - level thread maps/mp/gametypes_zm/_zm_gametype::init(); - maps/mp/gametypes_zm/_zm_gametype::rungametypeprecache( "zcleansed" ); - init_cleansed_powerups(); -} - -init_default_zcleansed_powerups() -{ - maps/mp/zombies/_zm_powerups::include_zombie_powerup( "the_cure" ); - maps/mp/zombies/_zm_powerups::include_zombie_powerup( "blue_monkey" ); - maps/mp/zombies/_zm_powerups::add_zombie_powerup( "the_cure", "zombie_pickup_perk_bottle", &"ZOMBIE_POWERUP_MAX_AMMO", ::maps/mp/zombies/_zm_powerups::func_should_never_drop, 0, 0, 1 ); - maps/mp/zombies/_zm_powerups::add_zombie_powerup( "blue_monkey", "weapon_zombie_monkey_bomb", &"ZOMBIE_POWERUP_MAX_AMMO", ::maps/mp/zombies/_zm_powerups::func_should_never_drop, 1, 0, 0 ); -} - -init_cleansed_powerup_fx() -{ - level._effect[ "powerup_on_caution" ] = loadfx( "misc/fx_zombie_powerup_on_blue" ); -} - -onstartgametype() -{ - maps/mp/gametypes_zm/_zm_gametype::setup_classic_gametype(); - level thread makefindfleshstructs(); - flag_init( "start_supersprint" ); - level.custom_player_fake_death = ::empty; - level.custom_player_fake_death_cleanup = ::empty; - level.overrideplayerdamage = ::cleanseddamagechecks; - level.playerlaststand_func = ::cleansed_player_laststand; - level.onendgame = ::cleansedonendgame; - level.ontimelimit = ::cleansedontimelimit; - level.powerup_player_valid = ::cleansed_alive_check; - level.nml_zombie_spawners = level.zombie_spawners; - level.dodge_score_highlight = 1; - level.dodge_show_revive_icon = 1; - level.custom_max_zombies = 6; - level.custom_zombie_health = 200; - level.nml_dogs_enabled = 0; - level.timercountdown = 1; - level.initial_spawn = 1; - level.nml_reaction_interval = 2000; - level.nml_min_reaction_dist_sq = 1024; - level.nml_max_reaction_dist_sq = 5760000; - level.min_humans = 1; - level.no_end_game_check = 1; - level.zombie_health = level.zombie_vars[ "zombie_health_start" ]; - level._get_game_module_players = undefined; - level.powerup_drop_count = 0; - level.is_zombie_level = 1; - level.player_becomes_zombie = ::onzombifyplayer; - level.player_kills_player = ::player_kills_player; - set_zombie_var( "zombify_player", 1 ); - set_zombie_var( "penalty_died", 1 ); - set_zombie_var( "penalty_downed", 1 ); - while ( isDefined( level._zcleansed_weapon_progression ) ) - { - i = 0; - while ( i < level._zcleansed_weapon_progression.size ) - { - addguntoprogression( level._zcleansed_weapon_progression[ i ] ); - i++; - } - } - maps/mp/gametypes_zm/_zm_gametype::rungametypemain( "zcleansed", ::zcleansed_logic ); -} - -turnedlog( text ) -{ -/# - println( "TURNEDLOG: " + text + "\n" ); -#/ -} - -cleansed_player_laststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) -{ -/# -#/ - self maps/mp/zombies/_zm_score::player_downed_penalty(); - if ( isDefined( attacker ) && isplayer( attacker ) && attacker != self ) - { - if ( isDefined( self.hide_owner ) && self.hide_owner ) - { - attacker notify( "invisible_player_killed" ); - } - } - if ( isDefined( self.is_zombie ) && self.is_zombie && deathanimduration == 0 ) - { - self stopsounds(); - } -} - -cleansed_alive_check( player ) -{ - if ( !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( player.nuked ) && !player.nuked && isDefined( player.is_in_process_of_zombify ) || player.is_in_process_of_zombify && isDefined( player.is_in_process_of_humanify ) && player.is_in_process_of_humanify ) - { - return 0; - } - return 1; -} - -cleanseddamagechecks( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) -{ - if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.is_in_process_of_zombify ) || self.is_in_process_of_zombify && isDefined( self.is_in_process_of_humanify ) && self.is_in_process_of_humanify ) - { - return 0; - } - if ( isDefined( self.nuked ) && self.nuked && eattacker != self.nuker && eattacker != self ) - { - return 0; - } - if ( isDefined( eattacker ) && isplayer( eattacker ) && eattacker != self ) - { - if ( eattacker.team == self.team ) - { - return 0; - } - if ( isDefined( eattacker.is_zombie ) ) - { - if ( isDefined( self.is_zombie ) ) - { - if ( eattacker.is_zombie == self.is_zombie ) - { - return 0; - } - } - } - if ( !cleansed_alive_check( eattacker ) ) - { - return 0; - } - if ( isDefined( self.nuked ) && self.nuked && isDefined( self.nuker ) && eattacker != self.nuker ) - { - return 0; - } - if ( isDefined( self.is_zombie ) && self.is_zombie && sweapon == "cymbal_monkey_zm" && smeansofdeath != "MOD_IMPACT" ) - { - level notify( "killed_by_decoy" ); - return self.health + 666; - } -/# -#/ - self.last_player_attacker = eattacker; - eattacker thread maps/mp/gametypes_zm/_weapons::checkhit( sweapon ); - if ( !eattacker.is_zombie && eattacker maps/mp/zombies/_zm_powerups::is_insta_kill_active() ) - { - return self.health + 666; - } - } - self playsoundtoplayer( "evt_player_swiped", self ); - return self maps/mp/zombies/_zm::player_damage_override( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); -} - -custom_end_screen() -{ - players = get_players(); - winner = players[ 0 ]; - _a266 = players; - _k266 = getFirstArrayKey( _a266 ); - while ( isDefined( _k266 ) ) - { - player = _a266[ _k266 ]; - if ( isDefined( winner ) && player.score > winner.score ) - { - winner = player; - } - _k266 = getNextArrayKey( _a266, _k266 ); - } - if ( isDefined( level.last_human_standing ) ) - { - i = 0; - while ( i < players.size ) - { - players[ i ].bonus_msg_hud = newclienthudelem( players[ i ] ); - players[ i ].bonus_msg_hud.alignx = "center"; - players[ i ].bonus_msg_hud.aligny = "middle"; - players[ i ].bonus_msg_hud.horzalign = "center"; - players[ i ].bonus_msg_hud.vertalign = "middle"; - players[ i ].bonus_msg_hud.y -= 130; - if ( players[ i ] issplitscreen() ) - { - players[ i ].bonus_msg_hud.y += 70; - } - players[ i ].bonus_msg_hud.foreground = 1; - players[ i ].bonus_msg_hud.fontscale = 5; - players[ i ].bonus_msg_hud.alpha = 0; - players[ i ].bonus_msg_hud.color = ( 0, 0, 0 ); - players[ i ].bonus_msg_hud.hidewheninmenu = 1; - players[ i ].bonus_msg_hud.font = "default"; - players[ i ].bonus_msg_hud settext( &"ZOMBIE_CLEANSED_SURVIVING_HUMAN_BONUS", level.last_human_standing.name ); - players[ i ].bonus_msg_hud changefontscaleovertime( 0,25 ); - players[ i ].bonus_msg_hud fadeovertime( 0,25 ); - players[ i ].bonus_msg_hud.alpha = 1; - players[ i ].bonus_msg_hud.fontscale = 2; - i++; - } - wait 3,25; - } - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( isDefined( players[ i ].bonus_msg_hud ) ) - { - players[ i ].bonus_msg_hud changefontscaleovertime( 0,5 ); - players[ i ].bonus_msg_hud fadeovertime( 0,5 ); - players[ i ].bonus_msg_hud.alpha = 0; - players[ i ].bonus_msg_hud.fontscale = 5; - } - i++; - } - wait 0,5; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( isDefined( players[ i ].bonus_msg_hud ) ) - { - players[ i ].bonus_msg_hud destroy(); - } - players[ i ].game_over_hud = newclienthudelem( players[ i ] ); - players[ i ].game_over_hud.alignx = "center"; - players[ i ].game_over_hud.aligny = "middle"; - players[ i ].game_over_hud.horzalign = "center"; - players[ i ].game_over_hud.vertalign = "middle"; - players[ i ].game_over_hud.y -= 130; - players[ i ].game_over_hud.foreground = 1; - players[ i ].game_over_hud.fontscale = 3; - players[ i ].game_over_hud.alpha = 0; - players[ i ].game_over_hud.color = ( 0, 0, 0 ); - players[ i ].game_over_hud.hidewheninmenu = 1; - players[ i ].game_over_hud settext( &"ZOMBIE_GAME_OVER" ); - players[ i ].game_over_hud fadeovertime( 1 ); - players[ i ].game_over_hud.alpha = 1; - if ( players[ i ] issplitscreen() ) - { - players[ i ].game_over_hud.fontscale = 2; - players[ i ].game_over_hud.y += 40; - } - players[ i ].survived_hud = newclienthudelem( players[ i ] ); - players[ i ].survived_hud.alignx = "center"; - players[ i ].survived_hud.aligny = "middle"; - players[ i ].survived_hud.horzalign = "center"; - players[ i ].survived_hud.vertalign = "middle"; - players[ i ].survived_hud.y -= 100; - players[ i ].survived_hud.foreground = 1; - players[ i ].survived_hud.fontscale = 2; - players[ i ].survived_hud.alpha = 0; - players[ i ].survived_hud.color = ( 0, 0, 0 ); - players[ i ].survived_hud.hidewheninmenu = 1; - if ( players[ i ] issplitscreen() ) - { - players[ i ].survived_hud.fontscale = 1,5; - players[ i ].survived_hud.y += 40; - } - winner_text = &"ZOMBIE_CLEANSED_WIN"; - loser_text = &"ZOMBIE_CLEANSED_LOSE"; - if ( isDefined( level.host_ended_game ) && level.host_ended_game ) - { - players[ i ].survived_hud settext( &"MP_HOST_ENDED_GAME" ); - } - else - { - if ( players[ i ] == winner ) - { - players[ i ].survived_hud settext( winner_text ); - break; - } - else - { - players[ i ].survived_hud settext( loser_text ); - } - } - players[ i ].survived_hud fadeovertime( 1 ); - players[ i ].survived_hud.alpha = 1; - i++; - } -} - -allow_player_movement( allowed ) -{ - level.player_movement_suppressed = !allowed; - _a389 = get_players(); - _k389 = getFirstArrayKey( _a389 ); - while ( isDefined( _k389 ) ) - { - player = _a389[ _k389 ]; - if ( isDefined( player.in_zombify_call ) && !player.in_zombify_call ) - { - player freezecontrols( level.player_movement_suppressed ); - } - _k389 = getNextArrayKey( _a389, _k389 ); - } -} - -watch_game_start() -{ - level.start_audio_allowed = 1; - level waittill( "cleansed_game_started" ); - level.start_audio_allowed = 0; -} - -listen_to_the_doctor_pregame() -{ - thread watch_game_start(); - level maps/mp/zombies/_zm_audio_announcer::leaderdialog( "dr_start_single_0", undefined, undefined, 1, 4 ); - wait 4; - if ( level.start_audio_allowed ) - { - level maps/mp/zombies/_zm_audio_announcer::leaderdialog( "dr_start_2", undefined, undefined, 1, 8 ); - wait 8; - } - if ( level.start_audio_allowed ) - { - level maps/mp/zombies/_zm_audio_announcer::leaderdialog( "dr_start_3", undefined, undefined, 1, 8 ); - wait 4; - } - if ( level.start_audio_allowed ) - { - level waittill( "cleansed_game_started" ); - } -} - -listen_to_the_doctor_started() -{ - level maps/mp/zombies/_zm_audio_announcer::leaderdialog( "dr_cure_found_line", undefined, undefined, 1, 8 ); - wait 8; -} - -listen_to_the_doctor_monkeys() -{ - level endon( "end_game" ); - while ( 1 ) - { - level waittill( "killed_by_decoy", killer, killee ); - while ( !isplayer( killee ) ) - { - continue; - } - if ( isDefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) - { - continue; - } - if ( isDefined( killer.heard_dr_monkey_killer ) && !killer.heard_dr_monkey_killer ) - { - level.playing_turned_kill_vo = 1; - killer.heard_dr_monkey_killer = 1; - killer thread maps/mp/zombies/_zm_audio_announcer::leaderdialogonplayer( "dr_monkey_killer", undefined, undefined, 0 ); - } - if ( isDefined( killee.heard_dr_monkey_killee ) && !killee.heard_dr_monkey_killee ) - { - level.playing_turned_kill_vo = 1; - killee.heard_dr_monkey_killee = 1; - wait 0,25; - killee thread maps/mp/zombies/_zm_audio_announcer::leaderdialogonplayer( "dr_monkey_killee", undefined, undefined, 0 ); - } - if ( isDefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) - { - wait 8; - level.playing_turned_kill_vo = 0; - } - } -} - -listen_to_the_doctor_human_deaths() -{ - level endon( "end_game" ); - while ( 1 ) - { - level waittill( "killed_by_zombie", killer, killee ); - wait 0,05; - if ( isDefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) - { - continue; - } - if ( !isDefined( killee.vo_human_killed_chance ) ) - { - killee.vo_human_killed_chance = 24; - } - if ( randomint( 100 ) < killee.vo_human_killed_chance ) - { - level.playing_turned_kill_vo = 1; - killee thread maps/mp/zombies/_zm_audio_announcer::leaderdialogonplayer( "dr_human_killed", undefined, undefined, 0 ); - killee.vo_human_killed_chance = int( killee.vo_human_killed_chance * 0,5 ); - } - if ( isDefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) - { - wait 4; - level.playing_turned_kill_vo = 0; - } - } -} - -listen_to_the_doctor_zombie_deaths() -{ - level endon( "end_game" ); - while ( 1 ) - { - level waittill( "killed_by_human", killer, killee ); - wait 0,05; - if ( isDefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) - { - continue; - } - if ( !isDefined( killer.vo_human_killer_chance ) ) - { - killer.vo_human_killer_chance = 24; - } - if ( randomint( 100 ) < killer.vo_human_killer_chance ) - { - killer.vo_human_killer_chance = int( killer.vo_human_killer_chance * 0,5 ); - level.playing_turned_kill_vo = 1; - killer thread maps/mp/zombies/_zm_audio_announcer::leaderdialogonplayer( "dr_human_killer", undefined, undefined, 0 ); - } - if ( isDefined( level.playing_turned_kill_vo ) && level.playing_turned_kill_vo ) - { - wait 4; - level.playing_turned_kill_vo = 0; - } - } -} - -listen_to_the_doctor_endgame() -{ - wait 5; - while ( maps/mp/gametypes_zm/_globallogic_utils::gettimeremaining() > 12000 ) - { - wait 1; - } - r = randomint( 3 ); - if ( r == 0 ) - { - level maps/mp/zombies/_zm_audio_announcer::leaderdialog( "dr_countdown0", undefined, undefined, 1, 4 ); - } - else if ( r == 1 ) - { - level maps/mp/zombies/_zm_audio_announcer::leaderdialog( "dr_countdown1", undefined, undefined, 1, 4 ); - } - else - { - level maps/mp/zombies/_zm_audio_announcer::leaderdialog( "dr_countdown2", undefined, undefined, 1, 4 ); - } - while ( maps/mp/gametypes_zm/_globallogic_utils::gettimeremaining() > 500 ) - { - wait 1; - } - level maps/mp/zombies/_zm_audio_announcer::leaderdialog( "dr_ending", undefined, undefined, 1, 4 ); -} - -anysplitscreen() -{ - _a542 = get_players(); - _k542 = getFirstArrayKey( _a542 ); - while ( isDefined( _k542 ) ) - { - player = _a542[ _k542 ]; - if ( player issplitscreen() ) - { - return 1; - } - _k542 = getNextArrayKey( _a542, _k542 ); - } - return 0; -} - -listen_to_the_doctor() -{ - listen_to_the_doctor_pregame(); - if ( !anysplitscreen() ) - { - listen_to_the_doctor_started(); - thread listen_to_the_doctor_human_deaths(); - thread listen_to_the_doctor_zombie_deaths(); - thread listen_to_the_doctor_monkeys(); - } - thread listen_to_the_doctor_endgame(); -} - -watch_survival_time() -{ - level endon( "end_game" ); - level notify( "new_human_suviving" ); - level endon( "new_human_suviving" ); - self endon( "zombify" ); - wait 10; - if ( !isDefined( self.vo_human_survival_chance ) ) - { - self.vo_human_survival_chance = 24; - } - while ( 1 ) - { - if ( isDefined( level.playing_turned_kill_vo ) && !level.playing_turned_kill_vo ) - { - if ( randomint( 100 ) < self.vo_human_survival_chance ) - { - self.vo_human_survival_chance = int( self.vo_human_survival_chance * 0,25 ); - level.playing_turned_kill_vo = 1; - self thread maps/mp/zombies/_zm_audio_announcer::leaderdialogonplayer( "dr_survival", undefined, undefined, 0 ); - wait 4; - level.playing_turned_kill_vo = 0; - } - } - wait 5; - } -} - -zcleansed_logic() -{ - setdvar( "player_lastStandBleedoutTime", "0.05" ); - setmatchtalkflag( "DeadChatWithDead", 1 ); - setmatchtalkflag( "DeadChatWithTeam", 1 ); - setmatchtalkflag( "DeadHearTeamLiving", 1 ); - setmatchtalkflag( "DeadHearAllLiving", 1 ); - setmatchtalkflag( "EveryoneHearsEveryone", 1 ); - level.zombie_include_powerups[ "carpenter" ] = 0; - level.noroundnumber = 1; - level._supress_survived_screen = 1; - doors = getentarray( "zombie_door", "targetname" ); - _a614 = doors; - _k614 = getFirstArrayKey( _a614 ); - while ( isDefined( _k614 ) ) - { - door = _a614[ _k614 ]; - door setinvisibletoall(); - _k614 = getNextArrayKey( _a614, _k614 ); - } - level thread maps/mp/zombies/_zm_blockers::open_all_zbarriers(); - level thread delay_box_hide(); - flag_wait( "initial_players_connected" ); - level.gamestarttime = getTime(); - level.gamelengthtime = undefined; - level.custom_spawnplayer = ::respawn_cleansed_player; - allow_player_movement( 0 ); - setup_players(); - flag_wait( "initial_blackscreen_passed" ); - level thread listen_to_the_doctor(); - level thread playturnedmusic(); - level notify( "start_fullscreen_fade_out" ); - wait 1,5; - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] thread create_match_start_message( &"ZOMBIE_FIND_THE_CURE", 3 ); - i++; - } - allow_player_movement( 1 ); - spawn_initial_cure_powerup(); - waitforhumanselection(); - level notify( "cleansed_game_started" ); - level thread leaderwatch(); - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] thread create_match_start_message( &"ZOMBIE_MOST_TIME_AS_HUMAN_TO_WIN", 3 ); - i++; - } - wait 1,2; - flag_clear( "pregame" ); - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] thread destroystartmsghud(); - i++; - } - registertimelimit( 0, 1440 ); - level.discardtime = getTime() - level.starttime; - level thread watch_for_end_game(); - wait_for_round_end(); - allow_player_movement( 0 ); - wait_network_frame(); - award_round_end_bonus(); - level notify( "end_game" ); -} - -wait_for_round_end() -{ - level endon( "early_game_end" ); - level endon( "normal_game_end" ); - while ( maps/mp/gametypes_zm/_globallogic_utils::gettimeremaining() > 0 ) - { - wait 1; - } -} - -end_game_early() -{ -/# - iprintlnbold( "SOLO GAME - RELEASE ONLY" ); - return; -#/ - level.forcedend = 1; - level notify( "early_game_end" ); - level notify( "end_game" ); -} - -watch_for_end_game() -{ - level waittill( "end_game" ); - registertimelimit( 0, 0 ); - setgameendtime( 0 ); -} - -cleansedontimelimit() -{ - level notify( "normal_game_end" ); -} - -cleansedonendgame( winningteam ) -{ -} - -create_match_start_message( text, duration ) -{ - level endon( "end_game" ); - self endon( "disconnect" ); - self notify( "kill_match_start_message" ); - self endon( "kill_match_start_message" ); - if ( !isDefined( self.match_start_msg_hud ) ) - { - self.match_start_msg_hud = newclienthudelem( self ); - self.match_start_msg_hud.alignx = "center"; - self.match_start_msg_hud.aligny = "middle"; - self.match_start_msg_hud.horzalign = "center"; - self.match_start_msg_hud.vertalign = "middle"; - self.match_start_msg_hud.y -= 130; - self.match_start_msg_hud.fontscale = 5; - self.match_start_msg_hud.foreground = 1; - if ( self issplitscreen() ) - { - self.match_start_msg_hud.y += 70; - } - self.match_start_msg_hud.color = ( 0, 0, 0 ); - self.match_start_msg_hud.hidewheninmenu = 1; - self.match_start_msg_hud.font = "default"; - } - self.match_start_msg_hud settext( text ); - self.match_start_msg_hud changefontscaleovertime( 0,25 ); - self.match_start_msg_hud fadeovertime( 0,25 ); - self.match_start_msg_hud.alpha = 1; - self.match_start_msg_hud.fontscale = 2; - if ( self issplitscreen() ) - { - self.match_start_msg_hud.fontscale = 1,5; - } - wait duration; - if ( !isDefined( self.match_start_msg_hud ) ) - { - return; - } - self.match_start_msg_hud changefontscaleovertime( 0,5 ); - self.match_start_msg_hud fadeovertime( 0,5 ); - self.match_start_msg_hud.alpha = 0; -} - -destroystartmsghud() -{ - level endon( "end_game" ); - self endon( "disconnect" ); - if ( !isDefined( self.match_start_msg_hud ) ) - { - return; - } - self.match_start_msg_hud destroy(); - self.match_start_msg_hud = undefined; -} - -delay_box_hide() -{ - wait 2; - start_chest = getstruct( "start_chest", "script_noteworthy" ); - if ( isDefined( start_chest ) ) - { - start_chest maps/mp/zombies/_zm_magicbox::hide_chest(); - } -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connected", player ); - player thread onplayerlaststand(); - player thread onplayerdisconnect(); - player thread setup_player(); - player thread rewardsthink(); - } -} - -onplayerlaststand() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "player_downed" ); - self takeallweapons(); - } -} - -onplayerdisconnect() -{ - level endon( "end_game" ); - self waittill( "disconnect" ); - if ( get_players().size <= 1 ) - { - end_game_early(); - } - else - { - while ( isDefined( level.ingraceperiod ) && !level.ingraceperiod ) - { - thread checkzombiehumanratio(); - wait 2; - players = get_players(); - _a836 = players; - _k836 = getFirstArrayKey( _a836 ); - while ( isDefined( _k836 ) ) - { - player = _a836[ _k836 ]; - player.nuked = undefined; - _k836 = getNextArrayKey( _a836, _k836 ); - } - } - } -} - -zombie_ramp_up() -{ - self notify( "zombie_ramp_up" ); - self endon( "zombie_ramp_up" ); - self endon( "death_or_disconnect" ); - self endon( "humanify" ); - if ( isDefined( level.cleansed_zombie_round ) ) - { - self.maxhealth = maps/mp/zombies/_zm::ai_zombie_health( level.cleansed_zombie_round ); - } - else - { - self.maxhealth = maps/mp/zombies/_zm::ai_zombie_health( 2 ); - } - self.health = self.maxhealth; -} - -precache_trophy() -{ -} - -create_trophy() -{ -} - -give_trophy() -{ - if ( !self.has_trophy ) - { - self setclientfield( "player_eyes_special", 1 ); - self setclientfield( "player_has_eyes", 0 ); - wait_network_frame(); - if ( cleansed_alive_check( self ) ) - { - self setclientfield( "player_has_eyes", self.is_zombie ); - } - self.has_trophy = 1; - } -} - -remove_trophy() -{ - if ( self.has_trophy ) - { - self setclientfield( "player_eyes_special", 0 ); - self setclientfield( "player_has_eyes", 0 ); - wait_network_frame(); - if ( cleansed_alive_check( self ) ) - { - self setclientfield( "player_has_eyes", self.is_zombie ); - } - self.has_trophy = 0; - } -} - -enthrone( player ) -{ - player endon( "dethrone" ); - player endon( "disconnect" ); - while ( 1 ) - { - if ( cleansed_alive_check( player ) && player.is_zombie ) - { - if ( !player.has_trophy ) - { - player give_trophy(); - } - } - else - { - if ( player.has_trophy ) - { - player remove_trophy(); - } - } - wait 0,1; - } -} - -dethrone( player ) -{ - player notify( "dethrone" ); - player remove_trophy(); -} - -cleansed_set_leader( leader ) -{ - if ( isDefined( leader ) && isDefined( level.cleansed_leader ) ) - { - if ( level.cleansed_leader != leader ) - { - dethrone( level.cleansed_leader ); - level.cleansed_leader = leader; - level thread enthrone( level.cleansed_leader ); - } - return; - } - if ( isDefined( leader ) && !isDefined( level.cleansed_leader ) ) - { - level.cleansed_leader = leader; - level thread enthrone( level.cleansed_leader ); - return; - } - if ( !isDefined( leader ) && isDefined( level.cleansed_leader ) ) - { - if ( isDefined( level.cleansed_leader ) ) - { - dethrone( level.cleansed_leader ); - } - level.cleansed_leader = leader; - return; - } -} - -leaderwatch() -{ - level endon( "early_game_end" ); - level endon( "normal_game_end" ); - create_trophy(); - cleansed_set_leader( undefined ); - while ( 1 ) - { - hiscore = -1; - leader = undefined; - players = get_players(); - _a991 = players; - _k991 = getFirstArrayKey( _a991 ); - while ( isDefined( _k991 ) ) - { - player = _a991[ _k991 ]; - if ( player.score > hiscore ) - { - hiscore = player.score; - } - _k991 = getNextArrayKey( _a991, _k991 ); - } - _a997 = players; - _k997 = getFirstArrayKey( _a997 ); - while ( isDefined( _k997 ) ) - { - player = _a997[ _k997 ]; - if ( player.score >= hiscore ) - { - if ( isDefined( leader ) ) - { - leader = undefined; - break; - } - else - { - leader = player; - } - _k997 = getNextArrayKey( _a997, _k997 ); - } - } - cleansed_set_leader( leader ); - wait 0,25; - } -} - -cover_transition() -{ - self thread fadetoblackforxsec( 0, 0,15, 0,05, 0,1 ); - wait 0,1; -} - -disappear_in_flash( washuman ) -{ - playsoundatposition( "zmb_bolt", self.origin ); - if ( washuman ) - { - playfx( level._effect[ "human_disappears" ], self.origin ); - } - else - { - playfx( level._effect[ "zombie_disappears" ], self.origin ); - } - self ghost(); -} - -humanifyplayer( for_killing ) -{ -/# -#/ - self freezecontrols( 1 ); - self thread cover_transition(); - self disappear_in_flash( 1 ); - self.team = self.prevteam; - self.pers[ "team" ] = self.prevteam; - self.sessionteam = self.prevteam; - self turnedhuman(); - for_killing waittill_notify_or_timeout( "respawned", 0,75 ); - wait_network_frame(); - checkzombiehumanratio( self ); - self.last_player_attacker = undefined; - self freezecontrols( level.player_movement_suppressed ); - self thread watch_survival_time(); -/# -#/ -} - -onzombifyplayer() -{ -/# -#/ - if ( isDefined( self.in_zombify_call ) && self.in_zombify_call ) - { - return; - } - self.in_zombify_call = 1; - while ( isDefined( level.in_zombify_call ) && level.in_zombify_call ) - { - wait 0,1; - } - level.in_zombify_call = 1; - self freezecontrols( 1 ); - if ( isDefined( self.last_player_attacker ) && isplayer( self.last_player_attacker ) && isDefined( self.last_player_attacker.is_zombie ) && self.last_player_attacker.is_zombie ) - { - } - if ( isDefined( self.is_zombie ) && self.is_zombie ) - { -/# -#/ - self check_for_drops( 0 ); - } - else - { - if ( isDefined( self.last_player_attacker ) && isplayer( self.last_player_attacker ) && isDefined( self.last_player_attacker.is_zombie ) && self.last_player_attacker.is_zombie ) - { -/# -#/ - self check_for_drops( 1 ); - self.team = level.zombie_team; - self.pers[ "team" ] = level.zombie_team; - self.sessionteam = level.zombie_team; - self.last_player_attacker thread humanifyplayer( self ); - self.player_was_turned_by = self.last_player_attacker; - } - else - { -/# -#/ - self check_for_drops( 1 ); - self player_suicide(); - checkzombiehumanratio( undefined, self ); - } - } - self setclientfield( "player_has_eyes", 0 ); - if ( isDefined( self.is_zombie ) && self.is_zombie ) - { - } - self notify( "zombified" ); - self disappear_in_flash( 0 ); - self cover_transition(); - self notify( "clear_red_flashing_overlay" ); - self.zombification_time = getTime() / 1000; - self.last_player_attacker = undefined; - self maps/mp/zombies/_zm_laststand::laststand_enable_player_weapons(); - self.ignoreme = 1; - if ( isDefined( self.revivetrigger ) ) - { - self.revivetrigger delete(); - } - self.revivetrigger = undefined; - self reviveplayer(); - self maps/mp/zombies/_zm_turned::turn_to_zombie(); - self freezecontrols( level.player_movement_suppressed ); - self thread zombie_ramp_up(); - level.in_zombify_call = 0; - self.in_zombify_call = 0; -/# -#/ -} - -playerfakedeath( vdir ) -{ - if ( isDefined( self.is_zombie ) && !self.is_zombie ) - { - self endon( "disconnect" ); - level endon( "game_module_ended" ); - level notify( "fake_death" ); - self notify( "fake_death" ); - self enableinvulnerability(); - self takeallweapons(); - self freezecontrols( 1 ); - self.ignoreme = 1; - origin = self.origin; - xyspeed = ( 0, 0, 0 ); - angles = self getplayerangles(); - angles = ( angles[ 0 ], angles[ 1 ], angles[ 2 ] + randomfloatrange( -5, 5 ) ); - if ( isDefined( vdir ) && length( vdir ) > 0 ) - { - xyspeedmag = 40 + randomint( 12 ) + randomint( 12 ); - xyspeed = xyspeedmag * vectornormalize( ( vdir[ 0 ], vdir[ 1 ], 0 ) ); - } - linker = spawn( "script_origin", ( 0, 0, 0 ) ); - linker.origin = origin; - linker.angles = angles; - self._fall_down_anchor = linker; - self playerlinkto( linker ); - self playsoundtoplayer( "zmb_player_death_fall", self ); - origin = playerphysicstrace( origin, origin + xyspeed ); - origin += vectorScale( ( 0, 0, 0 ), 52 ); - lerptime = 0,5; - linker moveto( origin, lerptime, lerptime ); - linker rotateto( angles, lerptime, lerptime ); - self freezecontrols( 1 ); - linker waittill( "movedone" ); - self giveweapon( "death_throe_zm" ); - self switchtoweapon( "death_throe_zm" ); - bounce = randomint( 4 ) + 8; - origin = ( origin + ( 0, 0, bounce ) ) - ( xyspeed * 0,1 ); - lerptime = bounce / 50; - linker moveto( origin, lerptime, 0, lerptime ); - linker waittill( "movedone" ); - origin = ( origin + ( 0, 0, bounce * -1 ) ) + ( xyspeed * 0,1 ); - lerptime /= 2; - linker moveto( origin, lerptime, lerptime ); - linker waittill( "movedone" ); - linker moveto( origin, 5, 0 ); - wait 5; - linker delete(); - self.ignoreme = 0; - self takeweapon( "death_throe_zm" ); - self disableinvulnerability(); - self freezecontrols( 0 ); - } -} - -onspawnzombie() -{ -} - -makefindfleshstructs() -{ - structs = getstructarray( "spawn_location", "script_noteworthy" ); - _a1250 = structs; - _k1250 = getFirstArrayKey( _a1250 ); - while ( isDefined( _k1250 ) ) - { - struct = _a1250[ _k1250 ]; - struct.script_string = "find_flesh"; - _k1250 = getNextArrayKey( _a1250, _k1250 ); - } -} - -setup_players() -{ -/# - while ( getDvarInt( #"99BF96D1" ) != 0 ) - { - _a1261 = level._turned_zombie_respawnpoints; - _k1261 = getFirstArrayKey( _a1261 ); - while ( isDefined( _k1261 ) ) - { - spawnpoint = _a1261[ _k1261 ]; - text = ""; - color = ( 0, 0, 0 ); - if ( !isDefined( spawnpoint.angles ) ) - { - text = "No Angles Defined"; - color = ( 0, 0, 0 ); - spawnpoint.angles = ( 0, 0, 0 ); - } - _k1261 = getNextArrayKey( _a1261, _k1261 ); -#/ - } - } -} - -setup_player() -{ - hotjoined = flag( "initial_players_connected" ); - flag_wait( "initial_players_connected" ); - wait 0,05; - self ghost(); - self freezecontrols( 1 ); - self.ignoreme = 0; - self.score = 0; - self.characterindex = level.characterindex; - self takeallweapons(); - self giveweapon( "knife_zm" ); - self give_start_weapon( 1 ); - self.prevteam = self.team; - self.no_revive_trigger = 1; - self.human_score = 0; - self thread player_score_update(); - self.is_zombie = 0; - self.has_trophy = 0; - self.home_team = self.team; - if ( self.home_team == "axis" ) - { - self.home_team = "team3"; - } - self thread wait_turn_to_zombie( hotjoined ); -} - -wait_turn_to_zombie( hot ) -{ - if ( hot ) - { - self thread fadetoblackforxsec( 0, 1,25, 0,05, 0,25 ); - wait 1; - } - self.is_zombie = 0; - self turn_to_zombie(); - self freezecontrols( level.player_movement_suppressed ); -} - -addguntoprogression( gunname ) -{ - if ( !isDefined( level.gunprogression ) ) - { - level.gunprogression = []; - } - level.gunprogression[ level.gunprogression.size ] = gunname; -} - -check_spawn_cymbal_monkey( origin, weapon ) -{ - chance = -0,05; - if ( !self hasweapon( "cymbal_monkey_zm" ) || self getweaponammoclip( "cymbal_monkey_zm" ) < 1 ) - { - if ( weapon == "cymbal_monkey_zm" || randomfloat( 1 ) < chance ) - { - self notify( "awarded_cymbal_monkey" ); - level.spawned_cymbal_monkey = spawn_cymbalmonkey( origin ); - level.spawned_cymbal_monkey thread delete_spawned_monkey_on_turned( self ); - return 1; - } - } - return 0; -} - -delete_spawned_monkey_on_turned( player ) -{ - wait 1; - while ( isDefined( self ) && isDefined( player.is_zombie ) && !player.is_zombie ) - { - wait_network_frame(); - } - if ( isDefined( self ) ) - { - self maps/mp/zombies/_zm_powerups::powerup_delete(); - self notify( "powerup_timedout" ); - } -} - -rewardsthink() -{ - self endon( "_zombie_game_over" ); - self endon( "disconnect" ); - while ( isDefined( self ) ) - { - self waittill( "killed_a_zombie_player", einflictor, target, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); - if ( isDefined( self.is_zombie ) && !self.is_zombie ) - { - if ( self check_spawn_cymbal_monkey( target.origin, sweapon ) ) - { - target.suppress_drops = 1; - } - } - } -} - -shotgunloadout() -{ - self endon( "_zombie_game_over" ); - self endon( "disconnect" ); - self endon( "bled_out" ); - self endon( "zombify" ); - level.cymbal_monkey_clone_weapon = "rottweil72_zm"; - if ( !self hasweapon( "rottweil72_zm" ) ) - { - self giveweapon( "rottweil72_zm" ); - self switchtoweapon( "rottweil72_zm" ); - } - if ( isDefined( self.is_zombie ) && !self.is_zombie && !self hasweapon( level.start_weapon ) ) - { - if ( !self hasweapon( "knife_zm" ) ) - { - self giveweapon( "knife_zm" ); - } - self give_start_weapon( 0 ); - } - if ( self hasweapon( "rottweil72_zm" ) ) - { - self setweaponammoclip( "rottweil72_zm", 2 ); - self setweaponammostock( "rottweil72_zm", 0 ); - } - if ( self hasweapon( level.start_weapon ) ) - { - self givemaxammo( level.start_weapon ); - } - if ( self hasweapon( self get_player_lethal_grenade() ) ) - { - self getweaponammoclip( self get_player_lethal_grenade() ); - } - else - { - self giveweapon( self get_player_lethal_grenade() ); - } - self setweaponammoclip( self get_player_lethal_grenade(), 2 ); - if ( isDefined( self.random_human ) && !self.random_human ) - { - } -} - -gunprogressionthink() -{ - self endon( "_zombie_game_over" ); - self endon( "disconnect" ); - self endon( "bled_out" ); - self endon( "zombify" ); - counter = 0; - if ( isDefined( level.gunprogression ) && !isDefined( level.cymbal_monkey_clone_weapon ) ) - { - level.cymbal_monkey_clone_weapon = level.gunprogression[ 0 ]; - } - last = level.start_weapon; - if ( !self hasweapon( self get_player_lethal_grenade() ) ) - { - self giveweapon( self get_player_lethal_grenade() ); - } - self setweaponammoclip( self get_player_lethal_grenade(), 2 ); - if ( isDefined( self.random_human ) && !self.random_human ) - { - } - self disableweaponcycling(); - while ( isDefined( self.is_zombie ) && !self.is_zombie ) - { - if ( !isDefined( level.gunprogression[ counter ] ) ) - { - } - else - { - self disableweaponcycling(); - self giveweapon( level.gunprogression[ counter ] ); - self switchtoweapon( level.gunprogression[ counter ] ); - self waittill_notify_or_timeout( "weapon_change_complete", 0,5 ); - if ( isDefined( last ) && self hasweapon( last ) ) - { - self takeweapon( last ); - } - last = level.gunprogression[ counter ]; - while ( 1 ) - { - self waittill( "killed_a_zombie_player", einflictor, target, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); - if ( isDefined( sweapon ) && level.gunprogression[ counter ] == sweapon ) - { - counter++; - continue; - } - else - { - } - } - counter++; - } - } - self giveweapon( level.start_weapon ); - self switchtoweapon( level.start_weapon ); - self waittill( "weapon_change_complete" ); - if ( isDefined( last ) && self hasweapon( last ) ) - { - self takeweapon( last ); - } - while ( 1 ) - { - self waittill( "killed_a_zombie_player", einflictor, target, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); - if ( isDefined( sweapon ) && level.start_weapon == sweapon ) - { - self notify( "gun_game_achievement" ); - return; - } - else } -} - -waitforhumanselection() -{ - level waittill( "initial_human_selected" ); -} - -checkzombiehumanratio( playertomove, playertoignore ) -{ - zombiecount = 0; - humancount = 0; - zombieexist = 0; - humanexist = 0; - earliestzombie = undefined; - earliestzombietime = 99999999; - if ( get_players().size <= 1 ) - { - end_game_early(); - } - while ( isDefined( level.checking_human_zombie_ratio ) && level.checking_human_zombie_ratio ) - { - wait 0,05; - } - level.checking_human_zombie_ratio = 1; - if ( isDefined( playertomove ) ) - { - someonebecominghuman = 0; - players = get_players(); - _a1561 = players; - _k1561 = getFirstArrayKey( _a1561 ); - while ( isDefined( _k1561 ) ) - { - player = _a1561[ _k1561 ]; - if ( isDefined( player.is_in_process_of_humanify ) && player.is_in_process_of_humanify ) - { - someonebecominghuman = 1; - } - _k1561 = getNextArrayKey( _a1561, _k1561 ); - } - if ( isDefined( someonebecominghuman ) && !someonebecominghuman ) - { - playertomove turn_to_human(); - } - level.checking_human_zombie_ratio = 0; - return; - } - players = get_players(); - _a1580 = players; - _k1580 = getFirstArrayKey( _a1580 ); - while ( isDefined( _k1580 ) ) - { - player = _a1580[ _k1580 ]; - if ( isDefined( playertoignore ) && playertoignore == player ) - { - } - else - { - if ( isDefined( player.is_zombie ) && !player.is_zombie && isDefined( player.is_in_process_of_zombify ) && !player.is_in_process_of_zombify ) - { - humancount++; - humanexist = 1; - break; - } - else - { - zombiecount++; - zombieexist = 1; - if ( isDefined( player.zombification_time ) && player.zombification_time < earliestzombietime ) - { - earliestzombie = player; - earliestzombietime = player.zombification_time; - } - } - } - _k1580 = getNextArrayKey( _a1580, _k1580 ); - } - if ( humancount > 1 ) - { - players = get_players( "allies" ); - if ( isDefined( players ) && players.size > 0 ) - { - player = random( players ); - player thread cover_transition(); - player disappear_in_flash( 1 ); -/# -#/ - player turn_to_zombie(); - zombiecount++; - } - } - if ( !humanexist ) - { - players = get_players( level.zombie_team ); - if ( isDefined( players ) && players.size > 0 ) - { - player = random( players ); - player thread cover_transition(); - player disappear_in_flash( 0 ); - player.random_human = 1; -/# -#/ - player turn_to_human(); - player.random_human = 0; - zombiecount--; - - } - } - level.checking_human_zombie_ratio = 0; -} - -get_player_rank() -{ - level.player_score_sort = []; - players = get_players(); - _a1650 = players; - _k1650 = getFirstArrayKey( _a1650 ); - while ( isDefined( _k1650 ) ) - { - player = _a1650[ _k1650 ]; - index = 0; - while ( index < level.player_score_sort.size && player.score < level.player_score_sort[ index ].score ) - { - index++; - } - arrayinsert( level.player_score_sort, player, index ); - _k1650 = getNextArrayKey( _a1650, _k1650 ); - } - index = 0; - while ( index < level.player_score_sort.size ) - { - if ( self == level.player_score_sort[ index ] ) - { - return index; - } - index++; - } -/# - assertmsg( "This should not happen" ); -#/ - return 0; -} - -player_add_score( bonus ) -{ - mult = 1; - if ( isDefined( self.is_zombie ) && self.is_zombie ) - { - mult = level.zombie_vars[ level.zombie_team ][ "zombie_point_scalar" ]; - } - else - { - mult = level.zombie_vars[ "allies" ][ "zombie_point_scalar" ]; - } - self maps/mp/zombies/_zm_score::add_to_player_score( bonus * mult ); -} - -player_sub_score( penalty ) -{ - penalty = int( min( self.score, penalty ) ); - self maps/mp/zombies/_zm_score::add_to_player_score( penalty * -1 ); -} - -player_suicide() -{ - self player_sub_score( level.human_player_suicide_penalty ); -/# - if ( get_players().size < 2 ) - { - self.intermission = 0; - thread spawn_initial_cure_powerup(); -#/ - } -} - -player_kills_player( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) -{ - score_multiplier = 1; - if ( isDefined( eattacker.is_zombie ) && !eattacker.is_zombie && isDefined( level.zombie_player_kill_points ) ) - { - level notify( "killed_by_human" ); - eattacker player_add_score( int( score_multiplier * level.zombie_player_kill_points ) ); - eattacker maps/mp/zombies/_zm_stats::add_global_stat( "PLAYER_KILLS", 1 ); - if ( smeansofdeath == "MOD_GRENADE" || smeansofdeath == "MOD_GRENADE_SPLASH" ) - { - eattacker maps/mp/zombies/_zm_stats::increment_client_stat( "grenade_kills" ); - eattacker maps/mp/zombies/_zm_stats::increment_player_stat( "grenade_kills" ); - } - } - if ( isDefined( eattacker.is_zombie ) && eattacker.is_zombie && isDefined( level.human_player_kill_points ) ) - { - level notify( "killed_by_zombie" ); - eattacker player_add_score( int( score_multiplier * level.human_player_kill_points ) ); - eattacker maps/mp/zombies/_zm_stats::add_global_stat( "PLAYER_RETURNS", 1 ); - } -} - -award_round_end_bonus() -{ - level notify( "stop_player_scores" ); - wait 0,25; - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "dr_time_line", undefined, undefined, 1 ); - while ( maps/mp/zombies/_zm_laststand::player_any_player_in_laststand() || isDefined( level.in_zombify_call ) && level.in_zombify_call ) - { - wait 0,25; - } - hiscore = -1; - _a1751 = get_players(); - _k1751 = getFirstArrayKey( _a1751 ); - while ( isDefined( _k1751 ) ) - { - player = _a1751[ _k1751 ]; - if ( isDefined( player.is_zombie ) && !player.is_zombie ) - { - player player_add_score( level.human_finish_bonus_points ); - level.last_human_standing = player; - } - if ( player.score > hiscore ) - { - hiscore = player.score; - } - _k1751 = getNextArrayKey( _a1751, _k1751 ); - } - _a1762 = get_players(); - _k1762 = getFirstArrayKey( _a1762 ); - while ( isDefined( _k1762 ) ) - { - player = _a1762[ _k1762 ]; - if ( player.score >= hiscore ) - { - player.team = player.prevteam; - player.pers[ "team" ] = player.prevteam; - player.sessionteam = player.prevteam; - player maps/mp/zombies/_zm_stats::increment_client_stat( "wins" ); - player maps/mp/zombies/_zm_stats::add_client_stat( "losses", -1 ); - player adddstat( "skill_rating", 1 ); - player setdstat( "skill_variance", 1 ); - player maps/mp/zombies/_zm_stats::add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "wins", 1 ); - player maps/mp/zombies/_zm_stats::add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "losses", -1 ); - } - else - { - player.team = level.zombie_team; - player.pers[ "team" ] = level.zombie_team; - player.sessionteam = level.zombie_team; - player setdstat( "skill_rating", 0 ); - player setdstat( "skill_variance", 1 ); - } - _k1762 = getNextArrayKey( _a1762, _k1762 ); - } -} - -player_score_update() -{ - self endon( "_zombie_game_over" ); - self endon( "disconnect" ); - level endon( "stop_player_scores" ); - waittime = 0,05; - while ( 1 ) - { - self waittill_any_or_timeout( waittime, "zombify", "humanify" ); - if ( isDefined( self._can_score ) && !self._can_score ) - { - continue; - } - if ( isDefined( level.hostmigrationtimer ) && level.hostmigrationtimer ) - { - continue; - } - if ( isDefined( level.ingraceperiod ) && !level.ingraceperiod ) - { - if ( !cleansed_alive_check( self ) ) - { - waittime = 0,05; - break; - } - else if ( isDefined( self.is_zombie ) && self.is_zombie ) - { - waittime = level.zombie_penalty_period; - self player_sub_score( level.zombie_penalty_points ); - break; - } - else - { - waittime = level.human_bonus_period; - self player_add_score( level.human_bonus_points ); - } - } - } -} - -respawn_cleansed_player() -{ - spawnpoint = self maps/mp/zombies/_zm_turned::getspawnpoint(); - self.sessionstate = "playing"; - self allowspectateteam( "freelook", 0 ); - self spawn( spawnpoint.origin, spawnpoint.angles ); - self notify( "stop_flame_damage" ); - self reviveplayer(); - self.nuked = 0; - self.nuker = undefined; - self.suppress_drops = 0; - self.is_burning = 0; - self.is_zombie = 0; - self.ignoreme = 0; - self freezecontrols( level.player_movement_suppressed ); - self notify( "respawned" ); -} - -zcleansed_zombie_powerup_grab( powerup, zombie_player ) -{ - if ( !cleansed_alive_check( zombie_player ) ) - { - return 0; - } - switch( powerup.powerup_name ) - { - case "the_cure": - level notify( "initial_human_selected" ); - zombie_player freezecontrols( 1 ); - zombie_player disappear_in_flash( 0 ); - zombie_player turn_to_human(); - players = get_players(); - _a1885 = players; - _k1885 = getFirstArrayKey( _a1885 ); - while ( isDefined( _k1885 ) ) - { - player = _a1885[ _k1885 ]; - if ( player.is_zombie ) - { - player thread zombie_ramp_up(); - } - _k1885 = getNextArrayKey( _a1885, _k1885 ); - } - default: - if ( isDefined( level.cleansed_powerups[ powerup.powerup_name ] ) ) - { - if ( isDefined( level.cleansed_powerups[ powerup.powerup_name ].callback ) ) - { - powerup thread [[ level.cleansed_powerups[ powerup.powerup_name ].callback ]]( zombie_player ); - } - } - } - } -} - -zcleansed_powerup_grab( powerup, player ) -{ - if ( !cleansed_alive_check( player ) ) - { - return 0; - } - switch( powerup.powerup_name ) - { - case "blue_monkey": - player maps/mp/zombies/_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); - player setweaponammoclip( "cymbal_monkey_zm", 1 ); - player notify( "powerup_blue_monkey" ); - break; - default: - if ( isDefined( level.cleansed_powerups[ powerup.powerup_name ] ) ) - { - if ( isDefined( level.cleansed_powerups[ powerup.powerup_name ].callback ) ) - { - powerup thread [[ level.cleansed_powerups[ powerup.powerup_name ].callback ]]( player ); - } - } - } -} - -zcleansed_powerup_custom_time_logic( powerup ) -{ - if ( powerup.powerup_name == "the_cure" ) - { - return 0; - } - return 15; -} - -spawn_initial_cure_powerup() -{ - struct = random( level._turned_powerup_spawnpoints ); - maps/mp/zombies/_zm_powerups::specific_powerup_drop( "the_cure", struct.origin ); -} - -spawn_cymbalmonkey( origin ) -{ - monkey = maps/mp/zombies/_zm_powerups::specific_powerup_drop( "blue_monkey", origin ); - return monkey; -} - -check_for_drops( washuman ) -{ - if ( !isDefined( level.cleansed_kills_for_drops ) ) - { - level.cleansed_kills_for_drops = 0; - } - if ( isDefined( self.nuked ) || self.nuked && isDefined( self.suppress_drops ) && self.suppress_drops ) - { - return; - } - level.cleansed_kills_for_drops++; - chance = ( level.cleansed_kills_for_drops - 2 ) / level.cleansed_kills_for_drops; - if ( chance > 0 ) - { - r = randomfloatrange( 0, 1 ); - if ( r < chance ) - { - self thread drop_powerup( washuman ); - level.cleansed_kills_for_drops = 0; - } - } -} - -add_cleansed_powerup( name, powerupmodel, text, team, zombie_death_frequency, human_death_frequency, callback ) -{ - if ( !isDefined( level.cleansed_powerups ) ) - { - level.cleansed_powerups = []; - } - precachemodel( powerupmodel ); - if ( !isDefined( level.zombie_powerups[ name ] ) ) - { - maps/mp/zombies/_zm_powerups::include_zombie_powerup( name ); - maps/mp/zombies/_zm_powerups::add_zombie_powerup( name, powerupmodel, text, ::maps/mp/zombies/_zm_powerups::func_should_never_drop, 0, team == 2, team == 1 ); - if ( !isDefined( level.statless_powerups ) ) - { - level.statless_powerups = []; - } - level.statless_powerups[ name ] = 1; - } - powerup = spawnstruct(); - powerup.name = name; - powerup.model = powerupmodel; - powerup.team = team; - powerup.callback = callback; - powerup.zfrequency = zombie_death_frequency; - powerup.hfrequency = human_death_frequency; - level.cleansed_powerups[ name ] = powerup; -} - -init_cleansed_powerups() -{ - level._effect[ "powerup_on_solo" ] = loadfx( "misc/fx_zombie_powerup_on_blue" ); - add_cleansed_powerup( "green_nuke", "zombie_bomb", &"ZOMBIE_THIS_IS_A_BUG", 0, 0,4, 0, ::turned_powerup_green_nuke ); - add_cleansed_powerup( "green_double", "zombie_x2_icon", &"ZOMBIE_THIS_IS_A_BUG", 0, 1, 0, ::turned_powerup_green_double ); - add_cleansed_powerup( "green_insta", "zombie_skull", &"ZOMBIE_THIS_IS_A_BUG", 0, 0,1, 0, ::turned_powerup_green_insta ); - add_cleansed_powerup( "green_ammo", "zombie_ammocan", &"ZOMBIE_POWERUP_MAX_AMMO", 0, 1, 0, ::turned_powerup_green_ammo ); - add_cleansed_powerup( "green_monkey", "weapon_zombie_monkey_bomb", &"ZOMBIE_THIS_IS_A_BUG", 0, 0,4, 0, ::turned_powerup_green_monkey ); - add_cleansed_powerup( "red_nuke", "zombie_bomb", &"ZOMBIE_THIS_IS_A_BUG", 1, 0, 0,4, ::turned_powerup_red_nuke ); - add_cleansed_powerup( "red_ammo", "zombie_ammocan", &"ZOMBIE_THIS_IS_A_BUG", 1, 0, 1, ::turned_powerup_red_ammo ); - add_cleansed_powerup( "red_double", "zombie_x2_icon", &"ZOMBIE_THIS_IS_A_BUG", 1, 0, 1, ::turned_powerup_red_double ); - add_cleansed_powerup( "yellow_double", "zombie_x2_icon", &"ZOMBIE_THIS_IS_A_BUG", 2, 0,1, 0,1, ::turned_powerup_yellow_double ); - add_cleansed_powerup( "yellow_nuke", "zombie_bomb", &"ZOMBIE_THIS_IS_A_BUG", 2, 0,01, 0,01, ::turned_powerup_yellow_nuke ); - level.cleansed_powerup_history_depth = []; - level.cleansed_powerup_history_depth[ 0 ] = 2; - level.cleansed_powerup_history_depth[ 1 ] = 1; - level.cleansed_powerup_history = []; - level.cleansed_powerup_history[ 0 ] = []; - level.cleansed_powerup_history[ 1 ] = []; - level.cleansed_powerup_history_last = []; - level.cleansed_powerup_history_last[ 0 ] = 0; - level.cleansed_powerup_history_last[ 1 ] = 0; - i = 0; - while ( i < level.cleansed_powerup_history_depth[ 0 ] ) - { - level.cleansed_powerup_history[ 0 ][ i ] = "none"; - level.cleansed_powerup_history[ 1 ][ i ] = "none"; - i++; - } -} - -pick_a_powerup( washuman ) -{ - total = 0; - _a2062 = level.cleansed_powerups; - _k2062 = getFirstArrayKey( _a2062 ); - while ( isDefined( _k2062 ) ) - { - powerup = _a2062[ _k2062 ]; - powerup.recent = 0; - i = 0; - while ( i < level.cleansed_powerup_history_depth[ washuman ] ) - { - if ( level.cleansed_powerup_history[ washuman ][ i ] == powerup.name ) - { - powerup.recent = 1; - } - i++; - } - if ( powerup.recent ) - { - } - else if ( washuman ) - { - total += powerup.hfrequency; - } - else - { - total += powerup.zfrequency; - } - _k2062 = getNextArrayKey( _a2062, _k2062 ); - } - if ( total == 0 ) - { - return undefined; - } - r = randomfloat( total ); - _a2081 = level.cleansed_powerups; - _k2081 = getFirstArrayKey( _a2081 ); - while ( isDefined( _k2081 ) ) - { - powerup = _a2081[ _k2081 ]; - if ( powerup.recent ) - { - } - else - { - if ( washuman ) - { - r -= powerup.hfrequency; - } - else - { - r -= powerup.zfrequency; - } - if ( r <= 0 ) - { - level.cleansed_powerup_history[ washuman ][ level.cleansed_powerup_history_last[ washuman ] ] = powerup.name; - level.cleansed_powerup_history_last[ washuman ]++; - if ( level.cleansed_powerup_history_last[ washuman ] >= level.cleansed_powerup_history_depth[ washuman ] ) - { - level.cleansed_powerup_history_last[ washuman ] = 0; - } - return powerup; - } - } - _k2081 = getNextArrayKey( _a2081, _k2081 ); - } - return undefined; -} - -drop_powerup( washuman ) -{ - powerup = pick_a_powerup( washuman ); - if ( isDefined( powerup ) ) - { - origin = self.origin; - wait 0,25; - maps/mp/zombies/_zm_powerups::specific_powerup_drop( powerup.name, origin ); - } -} - -powerup_can_player_grab( player ) -{ - if ( !cleansed_alive_check( player ) ) - { - return 0; - } - if ( isDefined( level.cleansed_powerups[ self.powerup_name ] ) ) - { - if ( level.cleansed_powerups[ self.powerup_name ].team == 0 && isDefined( player.is_zombie ) && player.is_zombie ) - { - return 0; - } - if ( level.cleansed_powerups[ self.powerup_name ].team == 1 && isDefined( player.is_zombie ) && !player.is_zombie ) - { - return 0; - } - } - else - { - if ( self.zombie_grabbable && isDefined( player.is_zombie ) && !player.is_zombie ) - { - return 0; - } - if ( !self.zombie_grabbable && isDefined( player.is_zombie ) && player.is_zombie ) - { - return 0; - } - } - return 1; -} - -player_nuke_fx() -{ - self endon( "death" ); - self endon( "respawned" ); - self endon( "stop_flame_damage" ); - if ( isDefined( level._effect ) && isDefined( level._effect[ "character_fire_death_torso" ] ) ) - { - if ( !self.isdog ) - { - playfxontag( level._effect[ "character_fire_death_torso" ], self, "J_SpineLower" ); - } - } - if ( isDefined( level._effect ) && isDefined( level._effect[ "character_fire_death_sm" ] ) ) - { - wait 1; - tagarray = []; - tagarray[ 0 ] = "J_Elbow_LE"; - tagarray[ 1 ] = "J_Elbow_RI"; - tagarray[ 2 ] = "J_Knee_RI"; - tagarray[ 3 ] = "J_Knee_LE"; - tagarray = array_randomize( tagarray ); - playfxontag( level._effect[ "character_fire_death_sm" ], self, tagarray[ 0 ] ); - wait 1; - tagarray[ 0 ] = "J_Wrist_RI"; - tagarray[ 1 ] = "J_Wrist_LE"; - if ( isDefined( self.a ) || !isDefined( self.a.gib_ref ) && self.a.gib_ref != "no_legs" ) - { - tagarray[ 2 ] = "J_Ankle_RI"; - tagarray[ 3 ] = "J_Ankle_LE"; - } - tagarray = array_randomize( tagarray ); - playfxontag( level._effect[ "character_fire_death_sm" ], self, tagarray[ 0 ] ); - playfxontag( level._effect[ "character_fire_death_sm" ], self, tagarray[ 1 ] ); - } -} - -player_nuke( player ) -{ - nuke_time = 2; - self.isdog = 0; - self.nuked = 1; - self.nuker = player; - self freezecontrols( 1 ); - maps/mp/_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, nuke_time / 2, nuke_time ); - self thread player_nuke_fx(); - wait nuke_time; - if ( isDefined( self ) ) - { - if ( isDefined( player ) ) - { - self dodamage( self.health + 666, player.origin, player, player, "none", "MOD_EXPLOSIVE", 0, "nuke_zm" ); - return; - } - else - { - self.nuked = undefined; - self dodamage( self.health + 666, self.origin, self, self, "none", "MOD_EXPLOSIVE", 0, "nuke_zm" ); - } - } -} - -turned_powerup_green_nuke( player ) -{ - location = self.origin; - playfx( level.zombie_powerups[ "nuke" ].fx, location ); - level thread maps/mp/zombies/_zm_powerups::nuke_flash(); - players = get_players(); - _a2219 = players; - _k2219 = getFirstArrayKey( _a2219 ); - while ( isDefined( _k2219 ) ) - { - target = _a2219[ _k2219 ]; - if ( !cleansed_alive_check( target ) ) - { - } - else if ( isDefined( target.is_zombie ) && target.is_zombie ) - { - target thread player_nuke( player ); - break; - } - _k2219 = getNextArrayKey( _a2219, _k2219 ); - } -} - -turned_powerup_green_double( player ) -{ - level thread maps/mp/zombies/_zm_powerups::double_points_powerup( self, player ); -} - -turned_powerup_green_insta( player ) -{ - level thread maps/mp/zombies/_zm_powerups::insta_kill_powerup( self, player ); -} - -turned_powerup_green_ammo( player ) -{ - level thread maps/mp/zombies/_zm_powerups::full_ammo_powerup( self, player ); - weapon = player getcurrentweapon(); - player givestartammo( weapon ); -} - -turned_powerup_green_monkey( player ) -{ - player maps/mp/zombies/_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); - player setweaponammoclip( "cymbal_monkey_zm", 1 ); - player notify( "powerup_green_monkey" ); -} - -turned_powerup_red_nuke( player ) -{ - location = self.origin; - playfx( level.zombie_powerups[ "nuke" ].fx, location ); - level thread maps/mp/zombies/_zm_powerups::nuke_flash(); - players = get_players(); - _a2267 = players; - _k2267 = getFirstArrayKey( _a2267 ); - while ( isDefined( _k2267 ) ) - { - target = _a2267[ _k2267 ]; - if ( !cleansed_alive_check( target ) ) - { - } - else if ( isDefined( target.is_zombie ) && target.is_zombie ) - { - } - else - { - target thread player_nuke( player ); - } - _k2267 = getNextArrayKey( _a2267, _k2267 ); - } -} - -turned_powerup_red_ammo( player ) -{ - level thread maps/mp/zombies/_zm_powerups::empty_clip_powerup( self ); -} - -turned_powerup_red_double( player ) -{ - level thread maps/mp/zombies/_zm_powerups::double_points_powerup( self, player ); -} - -turned_powerup_yellow_double( player ) -{ - level thread maps/mp/zombies/_zm_powerups::double_points_powerup( self, player ); -} - -turned_powerup_yellow_nuke( player ) -{ - location = self.origin; - playfx( level.zombie_powerups[ "nuke" ].fx, location ); - level thread maps/mp/zombies/_zm_powerups::nuke_flash(); - players = get_players(); - _a2304 = players; - _k2304 = getFirstArrayKey( _a2304 ); - while ( isDefined( _k2304 ) ) - { - target = _a2304[ _k2304 ]; - if ( !cleansed_alive_check( target ) ) - { - } - else - { - if ( isDefined( target.team != player.team ) && target.team != player.team ) - { - target thread player_nuke( player ); - } - } - _k2304 = getNextArrayKey( _a2304, _k2304 ); - } -} - -playturnedmusic() -{ - ent = spawn( "script_origin", ( 0, 0, 0 ) ); - ent thread stopturnedmusic(); - playsoundatposition( "mus_zmb_gamemode_start", ( 0, 0, 0 ) ); - wait 5; - ent playloopsound( "mus_zmb_gamemode_loop", 5 ); -} - -stopturnedmusic() -{ - level waittill( "end_game" ); - self stoploopsound( 1,5 ); - wait 1; - self delete(); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/zturned.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/zturned.gsc deleted file mode 100644 index 07dc9e8..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/gametypes_zm/zturned.gsc +++ /dev/null @@ -1,26 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; - -main() -{ - maps/mp/gametypes_zm/_zm_gametype::main(); - level.onprecachegametype = ::onprecachegametype; - level.onstartgametype = ::onstartgametype; - level._game_module_player_damage_callback = ::maps/mp/gametypes_zm/_zm_gametype::game_module_player_damage_callback; - level._game_module_custom_spawn_init_func = ::maps/mp/gametypes_zm/_zm_gametype::custom_spawn_init_func; - maps/mp/gametypes_zm/_zm_gametype::post_gametype_main( "zturned" ); -} - -onprecachegametype() -{ - precacheshellshock( "tabun_gas_mp" ); - level thread maps/mp/gametypes_zm/_zm_gametype::init(); - maps/mp/gametypes_zm/_zm_gametype::rungametypeprecache( "zturned" ); -} - -onstartgametype() -{ - maps/mp/gametypes_zm/_zm_gametype::setup_classic_gametype(); - maps/mp/gametypes_zm/_zm_gametype::rungametypemain( "zturned" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_ambush.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_ambush.gsc deleted file mode 100644 index 138b202..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_ambush.gsc +++ /dev/null @@ -1,295 +0,0 @@ -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zm_transit_bus; -#include maps/mp/zm_transit_utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -main() -{ - level.numroundssincelastambushround = 0; - level.numbusstopssincelastambushround = 0; - level.numambushrounds = 0; - level.ambushpercentageperstop = 10; - level.ambushpercentageperround = 25; - flag_init( "ambush_round", 0 ); - flag_init( "ambush_safe_area_active", 0 ); - initambusheffects(); - thread ambushroundkeeper(); -/# - adddebugcommand( "devgui_cmd "Zombies:1/Bus:14/Ambush Round:6/Always:1" "zombie_devgui ambush_round always"\n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Bus:14/Ambush Round:6/Never:2" "zombie_devgui ambush_round never"\n" ); -#/ -} - -initambusheffects() -{ - level._effect[ "ambush_bus_fire" ] = loadfx( "env/fire/fx_fire_md" ); -} - -shouldstartambushround() -{ -/# - if ( level.ambushpercentageperstop == 100 ) - { - return 1; - } - if ( getDvarInt( "zombie_cheat" ) == 2 ) - { - return 0; -#/ - } - if ( level.numbusstopssincelastambushround < 2 ) - { - } - randint = randomintrange( 0, 100 ); - percentchance = level.numbusstopssincelastambushround * level.ambushpercentageperstop; - if ( randint < percentchance ) - { - } - percentchance = level.numroundssincelastambushround * level.ambushpercentageperround; - if ( randint < percentchance ) - { - } - if ( maps/mp/zm_transit_bus::busgasempty() ) - { - return 1; - } - return 0; -} - -isambushroundactive() -{ - if ( flag_exists( "ambush_round" ) ) - { - return flag( "ambush_round" ); - } -} - -is_ambush_round_spawning_active() -{ - if ( flag_exists( "ambush_safe_area_active" ) ) - { - return flag( "ambush_safe_area_active" ); - } -} - -ambushstartround() -{ - flag_set( "ambush_round" ); - ambushroundthink(); -} - -ambushendround() -{ - level.the_bus.issafe = 1; - maps/mp/zm_transit_bus::busgasadd( 60 ); - level.numbusstopssincelastambushround = 0; - level.numroundssincelastambushround = 0; - flag_clear( "ambush_round" ); -} - -cancelambushround() -{ - flag_clear( "ambush_round" ); - flag_clear( "ambush_safe_area_active" ); - maps/mp/zm_transit_utility::try_resume_zombie_spawning(); - bbprint( "zombie_events", "category %s type %s round %d", "DOG", "stop", level.round_number ); - level.the_bus notify( "ambush_round_fail_safe" ); -} - -ambushroundspawning() -{ - level.numambushrounds++; - wait 6; - level.the_bus.issafe = 0; -} - -limitedambushspawn() -{ - if ( level.numambushrounds < 3 ) - { - dogcount = level.dog_targets.size * 6; - } - else - { - dogcount = level.dog_targets.size * 8; - } - setupdogspawnlocs(); - level thread ambushroundspawnfailsafe( 20 ); - while ( get_current_zombie_count() > 0 ) - { - wait 1; - } - level notify( "end_ambushWaitFunction" ); -} - -ambushroundthink() -{ - module = maps/mp/zombies/_zm_game_module::get_game_module( level.game_module_nml_index ); - if ( isDefined( module.hub_start_func ) ) - { - level thread [[ module.hub_start_func ]]( "nml" ); - level notify( "game_mode_started" ); - } - level thread ambushroundspawning(); - ambushwaitfunction(); - ambushendround(); -} - -ambushwaitfunction() -{ -} - -ambushpointfailsafe() -{ - level.the_bus endon( "ambush_point" ); - level.the_bus waittill( "reached_stop_point" ); - cancelambushround(); -} - -ambushroundspawnfailsafe( timer ) -{ - ambushroundtimelimit = timer; - currentambushtime = 0; - while ( currentambushtime < ambushroundtimelimit ) - { - if ( !flag( "ambush_round" ) ) - { - return; - } - wait 1; - currentambushtime++; - } - level notify( "end_ambushWaitFunction" ); - wait 5; - dogs = getaispeciesarray( "all", "zombie_dog" ); - i = 0; - while ( i < dogs.size ) - { - if ( isDefined( dogs[ i ].marked_for_death ) && dogs[ i ].marked_for_death ) - { - i++; - continue; - } - else - { - if ( is_magic_bullet_shield_enabled( dogs[ i ] ) ) - { - i++; - continue; - } - else - { - dogs[ i ] dodamage( dogs[ i ].health + 666, dogs[ i ].origin ); - } - } - i++; - } -} - -ambushdoghealthincrease() -{ - switch( level.numambushrounds ) - { - case 1: - level.dog_health = 400; - break; - case 2: - level.dog_health = 900; - break; - case 3: - level.dog_health = 1300; - break; - case 4: - level.dog_health = 1600; - break; - default: - level.dog_health = 1600; - break; - } -} - -ambushroundaftermath() -{ - power_up_origin = level.the_bus gettagorigin( "tag_body" ); - if ( isDefined( power_up_origin ) ) - { - level thread maps/mp/zombies/_zm_powerups::specific_powerup_drop( "full_ammo", power_up_origin ); - } -} - -ambushroundeffects() -{ - wait 2; - level thread ambushlightningeffect( "tag_body" ); - wait 0,5; - level thread ambushlightningeffect( "tag_wheel_back_left" ); - wait 0,5; - level thread ambushlightningeffect( "tag_wheel_back_right" ); - wait 0,5; - level thread ambushlightningeffect( "tag_wheel_front_left" ); - wait 0,5; - level thread ambushlightningeffect( "tag_wheel_front_right" ); - wait 1,5; - fxent0 = spawnandlinkfxtotag( level._effect[ "ambush_bus_fire" ], level.the_bus, "tag_body" ); - fxent1 = spawnandlinkfxtotag( level._effect[ "ambush_bus_fire" ], level.the_bus, "tag_wheel_back_left" ); - fxent2 = spawnandlinkfxtotag( level._effect[ "ambush_bus_fire" ], level.the_bus, "tag_wheel_back_right" ); - fxent3 = spawnandlinkfxtotag( level._effect[ "ambush_bus_fire" ], level.the_bus, "tag_wheel_front_left" ); - fxent4 = spawnandlinkfxtotag( level._effect[ "ambush_bus_fire" ], level.the_bus, "tag_wheel_front_right" ); - level waittill( "end_ambushWaitFunction" ); - fxent0 delete(); - fxent1 delete(); - fxent2 delete(); - fxent3 delete(); - fxent4 delete(); -} - -ambushlightningeffect( tag ) -{ - fxentlighting = spawnandlinkfxtotag( level._effect[ "lightning_dog_spawn" ], level.the_bus, tag ); - wait 5; - fxentlighting delete(); -} - -setupdogspawnlocs() -{ - level.enemy_dog_locations = []; - currentzone = undefined; - ambush_zones = getentarray( "ambush_volume", "script_noteworthy" ); - i = 0; - while ( i < ambush_zones.size ) - { - touching = 0; - b = 0; - while ( b < level.the_bus.bounds_origins.size && !touching ) - { - bounds = level.the_bus.bounds_origins[ b ]; - touching = bounds istouching( ambush_zones[ i ] ); - b++; - } - if ( touching ) - { - currentzone = ambush_zones[ i ]; - break; - } - else - { - i++; - } - } -/# - assert( isDefined( currentzone ), "Bus needs to be in an ambush zone for an ambush round: " + level.the_bus.origin ); -#/ - level.enemy_dog_locations = getstructarray( currentzone.target, "targetname" ); -} - -ambushroundkeeper() -{ - while ( 1 ) - { - level waittill( "between_round_over" ); - level.numroundssincelastambushround++; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_classic.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_classic.gsc deleted file mode 100644 index 801a5c7..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_classic.gsc +++ /dev/null @@ -1,616 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_blockers; -#include maps/mp/zombies/_zm; -#include maps/mp/zm_transit_distance_tracking; -#include maps/mp/zm_transit; -#include maps/mp/zm_transit_power; -#include maps/mp/zm_transit_ai_screecher; -#include maps/mp/zm_transit_bus; -#include maps/mp/zm_transit_buildables; -#include maps/mp/zm_transit_utility; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -precache() -{ - maps/mp/zombies/_zm_ai_screecher::precache(); - maps/mp/zombies/_zm_ai_avogadro::precache(); - maps/mp/zm_transit_buildables::include_buildables(); - maps/mp/zm_transit_buildables::init_buildables(); - maps/mp/zm_transit_sq::init(); - maps/mp/zombies/_zm_equip_turbine::init(); - maps/mp/zombies/_zm_equip_turret::init(); - maps/mp/zombies/_zm_equip_electrictrap::init(); - precachemodel( "zm_collision_transit_town_classic" ); - precachemodel( "p_glo_tools_chest_tall" ); - precachemodel( "fxanim_zom_bus_interior_mod" ); - precachemodel( "p6_anim_zm_barricade_board_collision" ); - precachemodel( "p6_anim_zm_barricade_board_bus_collision" ); - registerclientfield( "vehicle", "the_bus_spawned", 1, 1, "int" ); - registerclientfield( "vehicle", "bus_flashing_lights", 1, 1, "int" ); - registerclientfield( "vehicle", "bus_head_lights", 1, 1, "int" ); - registerclientfield( "vehicle", "bus_brake_lights", 1, 1, "int" ); - registerclientfield( "vehicle", "bus_turn_signal_left", 1, 1, "int" ); - registerclientfield( "vehicle", "bus_turn_signal_right", 1, 1, "int" ); - registerclientfield( "allplayers", "screecher_sq_lights", 1, 1, "int" ); - registerclientfield( "allplayers", "screecher_maxis_lights", 1, 1, "int" ); - registerclientfield( "allplayers", "sq_tower_sparks", 1, 1, "int" ); - onplayerconnect_callback( ::maps/mp/zm_transit_bus::onplayerconnect ); - onplayerconnect_callback( ::onplayerconnect_bank_deposit_box ); - onplayerconnect_callback( ::maps/mp/zm_transit_ai_screecher::portal_player_watcher ); -} - -main() -{ - level.ta_vaultfee = 100; - level.ta_tellerfee = 100; - if ( !isDefined( level.custom_ai_type ) ) - { - level.custom_ai_type = []; - } - level.custom_ai_type[ level.custom_ai_type.size ] = ::maps/mp/zombies/_zm_ai_screecher::init; - level.custom_ai_type[ level.custom_ai_type.size ] = ::maps/mp/zombies/_zm_ai_avogadro::init; - level.enemy_location_override_func = ::maps/mp/zm_transit_bus::enemy_location_override; - level.adjust_enemyoverride_func = ::maps/mp/zm_transit_bus::adjust_enemyoverride; - level.closest_player_override = ::closest_player_transit; - door_triggers = getentarray( "electric_door", "script_noteworthy" ); - _a80 = door_triggers; - _k80 = getFirstArrayKey( _a80 ); - while ( isDefined( _k80 ) ) - { - trigger = _a80[ _k80 ]; - if ( isDefined( trigger.script_flag ) && trigger.script_flag == "OnPowDoorWH" ) - { - } - else - { - trigger.power_door_ignore_flag_wait = 1; - } - _k80 = getNextArrayKey( _a80, _k80 ); - } - door_triggers = getentarray( "local_electric_door", "script_noteworthy" ); - _a91 = door_triggers; - _k91 = getFirstArrayKey( _a91 ); - while ( isDefined( _k91 ) ) - { - trigger = _a91[ _k91 ]; - if ( isDefined( trigger.script_flag ) && trigger.script_flag == "OnPowDoorWH" ) - { - } - else - { - trigger.power_door_ignore_flag_wait = 1; - } - _k91 = getNextArrayKey( _a91, _k91 ); - } - level.zm_traversal_override = ::zm_traversal_override; - level.the_bus = getent( "the_bus", "targetname" ); - level thread init_bus(); - level thread maps/mp/zm_transit_sq::start_transit_sidequest(); - level thread inert_zombies_init(); - level thread maps/mp/zm_transit_power::initializepower(); - level thread maps/mp/zm_transit_ambush::main(); - level thread maps/mp/zm_transit::falling_death_init(); - level.check_valid_spawn_override = ::maps/mp/zm_transit::transit_respawn_override; - level.zombie_check_suppress_gibs = ::maps/mp/zm_transit_bus::shouldsuppressgibs; - level thread transit_vault_breach_init(); - level thread maps/mp/zm_transit_distance_tracking::zombie_tracking_init(); - level thread solo_tombstone_removal(); - level thread collapsing_bridge_init(); - level thread bank_deposit_box(); - level thread bus_roof_damage_init(); - level thread diner_hatch_access(); - level thread maps/mp/zombies/_zm_buildables::think_buildables(); - setdvar( "r_rimIntensity_debug", 1 ); - setdvar( "r_rimIntensity", 3,5 ); - level thread zm_traversal_override_ignores(); - level thread maps/mp/zombies/_zm::post_main(); - level.spectator_respawn_custom_score = ::callback_spectator_respawn_custom_score; - level thread triggerweaponslockerwatch(); - level.custom_pap_deny_vo_func = ::transit_custom_deny_vox; - level.custom_generic_deny_vo_func = ::transit_custom_deny_vox; - level.custom_player_death_vo_func = ::transit_custom_death_vox; - level.custom_powerup_vo_response = ::transit_custom_powerup_vo_response; - level.zombie_vars[ "zombie_intermission_time" ] = 12; -} - -zm_traversal_override_ignores() -{ -} - -zm_traversal_override( traversealias ) -{ - suffix = ""; - sndalias = undefined; - chance = 0; - sndchance = 0; - if ( isDefined( self.isscreecher ) && !self.isscreecher && isDefined( self.is_avogadro ) && !self.is_avogadro ) - { - if ( isDefined( self.traversestartnode ) && isDefined( self.traversestartnode.script_string ) && self.traversestartnode.script_string == "ignore_traverse_override" ) - { - return traversealias; - } - switch( traversealias ) - { - case "jump_down_48": - if ( isDefined( self.has_legs ) && self.has_legs ) - { - suffix = "_stumble"; - chance = 0; - } - break; - case "jump_down_127": - case "jump_down_190": - case "jump_down_222": - case "jump_down_90": - if ( isDefined( self.has_legs ) && self.has_legs ) - { - suffix = "_stumble"; - chance = 30; - } - break; - case "jump_up_127": - case "jump_up_190": - case "jump_up_222": - case "jump_up_48": - sndalias = "vox_zmba_zombie_pickup_" + randomint( 2 ); - suffix = "_grabbed"; - chance = 6; - sndchance = 3; - break; - } - if ( chance != 0 && randomint( 100 ) <= chance ) - { - if ( isDefined( sndalias ) && randomint( 100 ) <= sndchance ) - { - playsoundatposition( sndalias, self.origin ); - } - traversealias += suffix; - } - } - return traversealias; -} - -init_bus() -{ - flag_wait( "start_zombie_round_logic" ); - level.the_bus thread maps/mp/zm_transit_bus::bussetup(); -} - -closest_player_transit( origin, players ) -{ - if ( isDefined( level.the_bus ) || level.the_bus.numaliveplayersridingbus > 0 && isDefined( level.calc_closest_player_using_paths ) && !level.calc_closest_player_using_paths ) - { - player = getclosest( origin, players ); - } - else - { - player = get_closest_player_using_paths( origin, players ); - } - return player; -} - -transit_vault_breach_init() -{ - vault_doors = getentarray( "town_bunker_door", "targetname" ); - array_thread( vault_doors, ::transit_vault_breach ); -} - -transit_vault_breach() -{ - if ( isDefined( self ) ) - { - self.damage_state = 0; - if ( isDefined( self.target ) ) - { - clip = getent( self.target, "targetname" ); - clip linkto( self ); - self.clip = clip; - } - self thread vault_breach_think(); - } - else - { - return; - } -} - -vault_breach_think() -{ - level endon( "intermission" ); - self.health = 99999; - self setcandamage( 1 ); - self.damage_state = 0; - self.clip.health = 99999; - self.clip setcandamage( 1 ); - while ( 1 ) - { - self thread track_clip_damage(); - self waittill( "damage", amount, attacker, direction, point, dmg_type, modelname, tagname, partname, weaponname ); - if ( isDefined( weaponname ) && weaponname != "emp_grenade_zm" || weaponname == "ray_gun_zm" && weaponname == "ray_gun_upgraded_zm" ) - { - continue; - } - if ( isDefined( amount ) && amount <= 1 ) - { - continue; - } - if ( isplayer( attacker ) && dmg_type != "MOD_PROJECTILE" && dmg_type != "MOD_PROJECTILE_SPLASH" && dmg_type != "MOD_EXPLOSIVE" && dmg_type != "MOD_EXPLOSIVE_SPLASH" || dmg_type == "MOD_GRENADE" && dmg_type == "MOD_GRENADE_SPLASH" ) - { - if ( self.damage_state == 0 ) - { - self.damage_state = 1; - } - playfxontag( level._effect[ "def_explosion" ], self, "tag_origin" ); - self playsound( "exp_vault_explode" ); - self bunkerdoorrotate( 1 ); - if ( isDefined( self.script_flag ) ) - { - flag_set( self.script_flag ); - } - if ( isDefined( self.clip ) ) - { - self.clip connectpaths(); - } - wait 1; - playsoundatposition( "zmb_cha_ching_loud", self.origin ); - return; - } - } -} - -track_clip_damage() -{ - self endon( "damage" ); - self.clip waittill( "damage", amount, attacker, direction, point, dmg_type ); - self notify( "damage" ); -} - -bunkerdoorrotate( open, time ) -{ - if ( !isDefined( time ) ) - { - time = 0,2; - } - rotate = self.script_float; - if ( !open ) - { - rotate *= -1; - } - if ( isDefined( self.script_angles ) ) - { - self notsolid(); - self rotateto( self.script_angles, time, 0, 0 ); - self thread maps/mp/zombies/_zm_blockers::door_solid_thread(); - } -} - -collapsing_bridge_init() -{ - time = 1,5; - trig = getent( "bridge_trig", "targetname" ); - if ( !isDefined( trig ) ) - { - return; - } - bridge = getentarray( trig.target, "targetname" ); - if ( !isDefined( bridge ) ) - { - return; - } - trig waittill( "trigger", who ); - trig playsound( "evt_bridge_collapse_start" ); - trig thread play_delayed_sound( time ); - i = 0; - while ( i < bridge.size ) - { - if ( isDefined( bridge[ i ].script_angles ) ) - { - rot_angle = bridge[ i ].script_angles; - } - else - { - rot_angle = ( 0, 0, 0 ); - } - earthquake( randomfloatrange( 0,5, 1 ), 1,5, bridge[ i ].origin, 1000 ); - exploder( 150 ); - bridge[ i ] rotateto( rot_angle, time, 0, 0 ); - i++; - } - wait 1; - if ( !isDefined( level.collapse_vox_said ) ) - { - level thread automatonspeak( "inform", "bridge_collapse" ); - level.collapse_vox_said = 1; - } -} - -play_delayed_sound( time ) -{ - wait time; - self playsound( "evt_bridge_collapse_end" ); -} - -bank_deposit_box() -{ - level.bank_deposit_max_amount = 250000; - level.bank_deposit_ddl_increment_amount = 1000; - deposit_trig = spawn( "trigger_radius_use", ( 588, 441,5, 6 ), 0, 4, 32 ); - deposit_trig sethintstring( &"ZOMBIE_BANK_DEPOSIT_PROMPT", level.bank_deposit_ddl_increment_amount ); - deposit_trig setcursorhint( "HINT_NOICON" ); - deposit_trig triggerignoreteam(); - deposit_trig thread bank_deposit_box_think( 1 ); - level.deposit_trig = deposit_trig; - withdraw_trig = spawn( "trigger_radius_use", ( 588, 450, 6 ), 0, 4, 32 ); - withdraw_trig sethintstring( &"ZOMBIE_BANK_WITHDRAW_PROMPT", level.bank_deposit_ddl_increment_amount, level.ta_vaultfee ); - withdraw_trig setcursorhint( "HINT_NOICON" ); - withdraw_trig triggerignoreteam(); - withdraw_trig thread bank_deposit_box_think( 0 ); - level.withdraw_trig = withdraw_trig; -} - -onplayerconnect_bank_deposit_box() -{ - account_val = self maps/mp/zombies/_zm_stats::get_map_stat( "depositBox" ); - if ( account_val >= level.bank_deposit_max_amount ) - { - level.deposit_trig setinvisibletoplayer( self ); - } -} - -bank_deposit_box_think( is_deposit ) -{ - account_max = level.bank_deposit_max_amount / level.bank_deposit_ddl_increment_amount; - account_increment = int( level.bank_deposit_ddl_increment_amount / 1000 ); - online_game = sessionmodeisonlinegame(); - for ( ;; ) - { - while ( 1 ) - { - self waittill( "trigger", player ); - while ( !is_player_valid( player ) ) - { - continue; - } - account_val = player maps/mp/zombies/_zm_stats::get_map_stat( "depositBox" ); - if ( !online_game ) - { - if ( !isDefined( player.account_val ) ) - { - player.account_val = 0; - } - account_val = player.account_val; - } - account_deposit_expected = account_val + account_increment; - if ( isDefined( is_deposit ) && is_deposit && player.score >= level.bank_deposit_ddl_increment_amount && account_deposit_expected <= account_max ) - { - player playsoundtoplayer( "zmb_vault_bank_deposit", player ); - player.score -= level.bank_deposit_ddl_increment_amount; - player maps/mp/zombies/_zm_stats::set_map_stat( "depositBox", account_val + account_increment ); - if ( !online_game ) - { - player.account_val += account_increment; - } - if ( account_deposit_expected >= account_max ) - { - level.deposit_trig setinvisibletoplayer( player ); - } - break; - } - else - { - if ( isDefined( is_deposit ) && !is_deposit && account_val >= account_increment ) - { - player playsoundtoplayer( "zmb_vault_bank_deposit", player ); - player.score += level.bank_deposit_ddl_increment_amount; - player maps/mp/zombies/_zm_stats::set_map_stat( "depositBox", account_val - account_increment ); - if ( !online_game ) - { - player.account_val -= account_increment; - } - player thread do_player_general_vox( "general", "exert_laugh", 10, 50 ); - player thread player_withdraw_fee(); - break; - } - else - { - player thread do_player_general_vox( "general", "exert_sigh", 10, 50 ); - } - } - } - } -} - -player_withdraw_fee() -{ - self endon( "disconnect" ); - wait_network_frame(); - self.score -= level.ta_vaultfee; - level.deposit_trig setvisibletoplayer( self ); -} - -bus_roof_damage_init() -{ - trigs = getentarray( "bus_knock_off", "targetname" ); - array_thread( trigs, ::bus_roof_damage ); -} - -bus_roof_damage() -{ - while ( 1 ) - { - self waittill( "trigger", who ); - if ( isplayer( who ) ) - { - if ( who getstance() == "stand" ) - { - who dodamage( 1, who.origin ); - } - } - else - { - if ( isDefined( who.marked_for_death ) && !who.marked_for_death && isDefined( who.has_legs ) && who.has_legs ) - { - who dodamage( who.health + 100, who.origin ); - who.marked_for_death = 1; - level.zombie_total++; - } - } - wait 0,1; - } -} - -diner_hatch_access() -{ - diner_hatch = getent( "diner_hatch", "targetname" ); - diner_hatch_col = getent( "diner_hatch_collision", "targetname" ); - diner_hatch_mantle = getent( "diner_hatch_mantle", "targetname" ); - if ( !isDefined( diner_hatch ) || !isDefined( diner_hatch_col ) ) - { - return; - } - diner_hatch hide(); - diner_hatch_mantle.start_origin = diner_hatch_mantle.origin; - diner_hatch_mantle.origin += vectorScale( ( 0, 0, 0 ), 500 ); - player = wait_for_buildable( "dinerhatch" ); - diner_hatch show(); - diner_hatch_col delete(); - diner_hatch_mantle.origin = diner_hatch_mantle.start_origin; - player maps/mp/zombies/_zm_buildables::track_placed_buildables( "dinerhatch" ); -} - -inert_zombies_init() -{ - inert_spawn_location = getstructarray( "inert_location", "script_noteworthy" ); - if ( isDefined( inert_spawn_location ) ) - { - array_thread( inert_spawn_location, ::spawn_inert_zombies ); - } -} - -spawn_inert_zombies() -{ - if ( !isDefined( self.angles ) ) - { - self.angles = ( 0, 0, 0 ); - } - wait 0,1; - if ( isDefined( level.zombie_spawners ) ) - { - spawner = random( level.zombie_spawners ); - ai = spawn_zombie( spawner ); - } - if ( isDefined( ai ) ) - { - ai forceteleport( self.origin, self.angles ); - ai.start_inert = 1; - } -} - -sparking_power_lines() -{ - lines = getentarray( "power_line_sparking", "targetname" ); -} - -callback_spectator_respawn_custom_score() -{ - difference = 1500 - self.score; - money_required = 1; - if ( difference >= 1000 ) - { - money_required = 2; - } - if ( !sessionmodeisonlinegame() ) - { - if ( !isDefined( self.account_val ) ) - { - self.account_val = 0; - } - if ( self.account_val >= money_required ) - { - self.account_val -= money_required; - } - else - { - self.account_val = 0; - } - } - else account_val = self maps/mp/zombies/_zm_stats::get_map_stat( "depositBox" ); - if ( account_val >= money_required ) - { - self set_map_stat( "depositBox", account_val - money_required ); - } - else - { - self set_map_stat( "depositBox", 0 ); - } -} - -transit_custom_deny_vox( door_buy ) -{ - switch( self.characterindex ) - { - case 0: - alias = randomintrange( 2, 5 ); - if ( isDefined( door_buy ) && door_buy ) - { - alias = undefined; - } - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "door_deny", undefined, alias ); - break; - case 1: - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); - break; - case 2: - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); - break; - case 3: - x = randomint( 100 ); - if ( x > 66 ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); - } - else if ( x > 33 ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_box", undefined, 0 ); - } - else - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 0 ); - } - break; - } -} - -transit_custom_death_vox() -{ - if ( self.characterindex != 2 ) - { - return 0; - } - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "pain_high" ); - return 1; -} - -transit_custom_powerup_vo_response( powerup_player, powerup ) -{ - dist = 250000; - players = get_players(); - _a746 = players; - _k746 = getFirstArrayKey( _a746 ); - while ( isDefined( _k746 ) ) - { - player = _a746[ _k746 ]; - if ( player == powerup_player ) - { - } - else if ( distancesquared( player.origin, powerup_player.origin ) < dist ) - { - player do_player_general_vox( "general", "exert_laugh", 10, 5 ); - } - _k746 = getNextArrayKey( _a746, _k746 ); - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_distance_tracking.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_distance_tracking.gsc deleted file mode 100644 index d23755f..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_distance_tracking.gsc +++ /dev/null @@ -1,161 +0,0 @@ -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -zombie_tracking_init() -{ - level.zombie_respawned_health = []; - if ( !isDefined( level.zombie_tracking_dist ) ) - { - level.zombie_tracking_dist = 1500; - } - if ( !isDefined( level.zombie_tracking_wait ) ) - { - level.zombie_tracking_wait = 10; - } - for ( ;; ) - { - while ( 1 ) - { - zombies = get_round_enemy_array(); - if ( !isDefined( zombies ) || isDefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking ) - { - wait level.zombie_tracking_wait; - } - } - else i = 0; - while ( i < zombies.size ) - { - if ( isDefined( zombies[ i ] ) && isDefined( zombies[ i ].ignore_distance_tracking ) && !zombies[ i ].ignore_distance_tracking ) - { - zombies[ i ] thread delete_zombie_noone_looking( level.zombie_tracking_dist ); - } - i++; - } - wait level.zombie_tracking_wait; - } -} - -delete_zombie_noone_looking( how_close ) -{ - self endon( "death" ); - if ( !isDefined( how_close ) ) - { - how_close = 1000; - } - distance_squared_check = how_close * how_close; - too_far_dist = distance_squared_check * 3; - if ( isDefined( level.zombie_tracking_too_far_dist ) ) - { - too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist; - } - self.inview = 0; - self.player_close = 0; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ].sessionstate == "spectator" ) - { - i++; - continue; - } - else if ( isDefined( level.only_track_targeted_players ) ) - { - if ( !isDefined( self.favoriteenemy ) || self.favoriteenemy != players[ i ] ) - { - i++; - continue; - } - } - else - { - can_be_seen = self player_can_see_me( players[ i ] ); - if ( can_be_seen && distancesquared( self.origin, players[ i ].origin ) < too_far_dist ) - { - self.inview++; - } - if ( distancesquared( self.origin, players[ i ].origin ) < distance_squared_check ) - { - self.player_close++; - } - } - i++; - } - wait 0,1; - if ( self.inview == 0 && self.player_close == 0 ) - { - if ( !isDefined( self.animname ) || isDefined( self.animname ) && self.animname != "zombie" ) - { - return; - } - if ( isDefined( self.electrified ) && self.electrified == 1 ) - { - return; - } - if ( isDefined( self.in_the_ground ) && self.in_the_ground == 1 ) - { - return; - } - zombies = getaiarray( "axis" ); - if ( isDefined( self.damagemod ) && self.damagemod == "MOD_UNKNOWN" && self.health < self.maxhealth ) - { - if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher ) - { - level.zombie_total++; - level.zombie_respawned_health[ level.zombie_respawned_health.size ] = self.health; - } - } - else - { - if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && self.health >= self.maxhealth ) - { - if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher ) - { - level.zombie_total++; - if ( self.health < level.zombie_health ) - { - level.zombie_respawned_health[ level.zombie_respawned_health.size ] = self.health; - } - } - } - } - self maps/mp/zombies/_zm_spawner::reset_attack_spot(); - self notify( "zombie_delete" ); - self delete(); - recalc_zombie_array(); - } -} - -player_can_see_me( player ) -{ - playerangles = player getplayerangles(); - playerforwardvec = anglesToForward( playerangles ); - playerunitforwardvec = vectornormalize( playerforwardvec ); - banzaipos = self.origin; - playerpos = player getorigin(); - playertobanzaivec = banzaipos - playerpos; - playertobanzaiunitvec = vectornormalize( playertobanzaivec ); - forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec ); - if ( forwarddotbanzai >= 1 ) - { - anglefromcenter = 0; - } - else if ( forwarddotbanzai <= -1 ) - { - anglefromcenter = 180; - } - else - { - anglefromcenter = acos( forwarddotbanzai ); - } - playerfov = getDvarFloat( "cg_fov" ); - banzaivsplayerfovbuffer = getDvarFloat( "g_banzai_player_fov_buffer" ); - if ( banzaivsplayerfovbuffer <= 0 ) - { - banzaivsplayerfovbuffer = 0,2; - } - playercanseeme = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) ); - return playercanseeme; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_dr.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_dr.gsc deleted file mode 100644 index 4d16f1a..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_dr.gsc +++ /dev/null @@ -1,885 +0,0 @@ -#include maps/mp/gametypes_zm/_globallogic_utils; -#include maps/mp/zombies/_zm_devgui; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zm_transit_lava; -#include maps/mp/gametypes_zm/_spawning; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zm_transit_dr_ffotd; -#include maps/mp/_visionset_mgr; -#include maps/mp/zm_transit_utility; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/_utility; -#include common_scripts/utility; - -gamemode_callback_setup() -{ - maps/mp/zm_transit_dr_gamemodes::init(); -} - -encounter_init() -{ - precacheshader( "sun_moon_zombie" ); - level.precachecustomcharacters = ::precache_team_characters; - level.givecustomcharacters = ::give_team_characters; -} - -zclassic_init() -{ - level._zcleansed_weapon_progression = array( "rpd_zm", "srm1216_zm", "judge_zm", "qcw05_zm", "kard_zm" ); - survival_init(); -} - -zclassic_preinit() -{ - zclassic_init(); -} - -zcleansed_preinit() -{ - level._zcleansed_weapon_progression = array( "judge_zm", "srm1216_zm", "hk416_zm", "qcw05_zm", "kard_zm" ); - level.cymbal_monkey_clone_weapon = "srm1216_zm"; - survival_init(); -} - -survival_init() -{ - level.force_team_characters = 1; - level.should_use_cia = 0; - if ( randomint( 100 ) > 50 ) - { - level.should_use_cia = 1; - } - level.precachecustomcharacters = ::precache_team_characters; - level.givecustomcharacters = ::give_team_characters; - flag_wait( "start_zombie_round_logic" ); - level.custom_intermission = ::transit_standard_intermission; -} - -transit_standard_intermission() -{ - self closemenu(); - self closeingamemenu(); - level endon( "stop_intermission" ); - self endon( "disconnect" ); - self endon( "death" ); - self notify( "_zombie_game_over" ); - self.score = self.score_total; - self.sessionstate = "intermission"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - maps/mp/_visionset_mgr::vsmgr_deactivate( "overlay", "zm_transit_burn", self ); - self stopshellshock(); - points = getstructarray( "intermission", "targetname" ); - point = undefined; - if ( !isDefined( points ) || points.size == 0 ) - { - points = getentarray( "info_intermission", "classname" ); - if ( points.size < 1 ) - { -/# - println( "NO info_intermission POINTS IN MAP" ); -#/ - return; - } - } - self.game_over_bg = newclienthudelem( self ); - self.game_over_bg.x = 0; - self.game_over_bg.y = 0; - self.game_over_bg.horzalign = "fullscreen"; - self.game_over_bg.vertalign = "fullscreen"; - self.game_over_bg.foreground = 1; - self.game_over_bg.sort = 1; - self.game_over_bg setshader( "black", 640, 480 ); - self.game_over_bg.alpha = 1; - org = undefined; - while ( 1 ) - { - _a156 = points; - _k156 = getFirstArrayKey( _a156 ); - while ( isDefined( _k156 ) ) - { - struct = _a156[ _k156 ]; - if ( isDefined( struct.script_string ) && struct.script_string == level.scr_zm_map_start_location ) - { - point = struct; - } - _k156 = getNextArrayKey( _a156, _k156 ); - } - if ( !isDefined( point ) ) - { - point = points[ 0 ]; - } - if ( !isDefined( org ) ) - { - self spawn( point.origin, point.angles ); - } - if ( isDefined( point.target ) ) - { - if ( !isDefined( org ) ) - { - org = spawn( "script_model", self.origin + vectorScale( ( 0, 0, -1 ), 60 ) ); - org setmodel( "tag_origin" ); - } - org.origin = point.origin; - org.angles = point.angles; - j = 0; - while ( j < get_players().size ) - { - player = get_players()[ j ]; - player camerasetposition( org ); - player camerasetlookat(); - player cameraactivate( 1 ); - j++; - } - speed = 20; - if ( isDefined( point.speed ) ) - { - speed = point.speed; - } - target_point = getstruct( point.target, "targetname" ); - dist = distance( point.origin, target_point.origin ); - time = dist / speed; - q_time = time * 0,25; - if ( q_time > 1 ) - { - q_time = 1; - } - self.game_over_bg fadeovertime( q_time ); - self.game_over_bg.alpha = 0; - org moveto( target_point.origin, time, q_time, q_time ); - org rotateto( target_point.angles, time, q_time, q_time ); - wait ( time - q_time ); - self.game_over_bg fadeovertime( q_time ); - self.game_over_bg.alpha = 1; - wait q_time; - continue; - } - else - { - self.game_over_bg fadeovertime( 1 ); - self.game_over_bg.alpha = 0; - wait 5; - self.game_over_bg thread fade_up_over_time( 1 ); - } - } -} - -zturned_preinit() -{ - encounter_init(); -} - -createfx_callback() -{ - ents = getentarray(); - i = 0; - while ( i < ents.size ) - { - if ( ents[ i ].classname != "info_player_start" ) - { - ents[ i ] delete(); - } - i++; - } -} - -main() -{ - level thread maps/mp/zm_transit_dr_ffotd::main_start(); - level.level_createfx_callback_thread = ::createfx_callback; - level.default_game_mode = "zcleansed"; - level.default_start_location = "diner"; - level._get_random_encounter_func = ::maps/mp/zm_transit_utility::get_random_encounter_match; - setup_rex_starts(); - maps/mp/zm_transit_dr_fx::main(); - maps/mp/zombies/_zm::init_fx(); - maps/mp/animscripts/zm_death::precache_gib_fx(); - level.zombiemode = 1; - level._no_water_risers = 1; - if ( !isDefined( level.zombie_surfing_kills ) ) - { - level.zombie_surfing_kills = 1; - level.zombie_surfing_kill_count = 6; - } - maps/mp/_sticky_grenade::init(); - level.level_specific_stats_init = ::init_transit_dr_stats; - maps/mp/zombies/_load::main(); - init_clientflags(); - registerclientfield( "allplayers", "playerinfog", 1, 1, "int" ); - level.custom_breadcrumb_store_func = ::transit_breadcrumb_store_func; - if ( getDvar( "createfx" ) == "1" ) - { - return; - } - precacheshellshock( "lava" ); - precacheshellshock( "lava_small" ); - precache_survival_barricade_assets(); - include_game_modules(); - maps/mp/gametypes_zm/_spawning::level_use_unified_spawning( 1 ); - level.givecustomloadout = ::givecustomloadout; - initcharacterstartindex(); - level.initial_round_wait_func = ::initial_round_wait_func; - level.zombie_init_done = ::zombie_init_done; - level.zombiemode_using_pack_a_punch = 1; - level.zombiemode_reusing_pack_a_punch = 1; - level.pap_interaction_height = 47; - level.zombiemode_using_doubletap_perk = 1; - level.zombiemode_using_juggernaut_perk = 1; - level.zombiemode_using_marathon_perk = 1; - level.zombiemode_using_revive_perk = 1; - level.zombiemode_using_sleightofhand_perk = 1; - level.register_offhand_weapons_for_level_defaults_override = ::offhand_weapon_overrride; - level._zombie_custom_add_weapons = ::custom_add_weapons; - level._allow_melee_weapon_switching = 1; - level.uses_gumps = 1; - setdvar( "aim_target_fixed_actor_size", 1 ); - include_weapons(); - include_powerups(); - level thread maps/mp/zm_transit_lava::lava_damage_init(); - level.zm_transit_burn_max_duration = 2; - setup_zombie_init(); - maps/mp/zombies/_zm::init(); - maps/mp/zombies/_zm_weap_cymbal_monkey::init(); - if ( !isDefined( level.vsmgr_prio_overlay_zm_transit_burn ) ) - { - level.vsmgr_prio_overlay_zm_transit_burn = 20; - } - maps/mp/_visionset_mgr::vsmgr_register_info( "overlay", "zm_transit_burn", 1, level.vsmgr_prio_overlay_zm_transit_burn, 15, 1, ::maps/mp/_visionset_mgr::vsmgr_duration_lerp_thread_per_player, 0 ); - level maps/mp/zm_transit_dr_achievement::init(); - precacheitem( "death_throe_zm" ); - level.zones = []; - level.zone_manager_init_func = ::transit_zone_init; - init_zones[ 0 ] = "zone_gas"; - level thread maps/mp/zombies/_zm_zonemgr::manage_zones( init_zones ); - level.zombie_ai_limit = 24; - setdvar( "zombiemode_path_minz_bias", 13 ); - level thread maps/mp/zm_transit_dr_ffotd::main_end(); - flag_wait( "start_zombie_round_logic" ); - level notify( "players_done_connecting" ); -/# - execdevgui( "devgui_zombie_transit_dr" ); - level.custom_devgui = ::zombie_transit_dr_devgui; -#/ - level thread set_transit_wind(); - level.speed_change_round = 15; - level.speed_change_max = 5; -} - -setup_rex_starts() -{ - add_gametype( "zcleansed", ::dummy, "zcleansed", ::dummy ); - add_gameloc( "diner", ::dummy, "diner", ::dummy ); -} - -dummy() -{ -} - -init_clientflags() -{ -} - -set_player_in_fog( onoff ) -{ - if ( onoff ) - { - self setclientfield( "playerinfog", 1 ); - } - else - { - self setclientfield( "playerinfog", 0 ); - } -} - -transit_breadcrumb_store_func( store_crumb ) -{ - if ( isDefined( self.isonbus ) && self.isonbus ) - { - return 0; - } - return store_crumb; -} - -post_first_init() -{ - while ( !isDefined( anim.notfirsttime ) ) - { - wait 0,5; - } - anim.meleerange = 36; - anim.meleerangesq = anim.meleerange * anim.meleerange; -} - -set_transit_wind() -{ - setdvar( "enable_global_wind", 1 ); - setdvar( "wind_global_vector", "-120 -115 -120" ); - setdvar( "wind_global_low_altitude", 0 ); - setdvar( "wind_global_hi_altitude", 2000 ); - setdvar( "wind_global_low_strength_percent", 0,5 ); -} - -precache_team_characters() -{ - precachemodel( "c_zom_player_cdc_dlc1_fb" ); - precachemodel( "c_zom_hazmat_viewhands" ); - precachemodel( "c_zom_player_cia_dlc1_fb" ); - precachemodel( "c_zom_suit_viewhands" ); -} - -precache_survival_barricade_assets() -{ - survival_barricades = getstructarray( "game_mode_object" ); - i = 0; - while ( i < survival_barricades.size ) - { - if ( isDefined( survival_barricades[ i ].script_string ) && survival_barricades[ i ].script_string == "survival" ) - { - if ( isDefined( survival_barricades[ i ].script_parameters ) ) - { - precachemodel( survival_barricades[ i ].script_parameters ); - } - } - i++; - } -} - -initcharacterstartindex() -{ - level.characterstartindex = 0; -/# - forcecharacter = getDvarInt( #"FEE4CB69" ); - if ( forcecharacter != 0 ) - { - level.characterstartindex = forcecharacter - 1; -#/ - } -} - -give_team_characters() -{ - self detachall(); - self set_player_is_female( 0 ); - if ( !isDefined( self.characterindex ) ) - { - self.characterindex = 1; - } - self setmodel( "c_zom_player_cdc_dlc1_fb" ); - self.voice = "american"; - self.skeleton = "base"; - self setviewmodel( "c_zom_hazmat_viewhands" ); - self.characterindex = 1; - self setmovespeedscale( 1 ); - self setsprintduration( 4 ); - self setsprintcooldown( 0 ); -} - -setup_personality_character_exerts() -{ - level.exert_sounds[ 1 ][ "burp" ][ 0 ] = "vox_plr_0_exert_burp_0"; - level.exert_sounds[ 1 ][ "burp" ][ 1 ] = "vox_plr_0_exert_burp_1"; - level.exert_sounds[ 1 ][ "burp" ][ 2 ] = "vox_plr_0_exert_burp_2"; - level.exert_sounds[ 1 ][ "burp" ][ 3 ] = "vox_plr_0_exert_burp_3"; - level.exert_sounds[ 1 ][ "burp" ][ 4 ] = "vox_plr_0_exert_burp_4"; - level.exert_sounds[ 1 ][ "burp" ][ 5 ] = "vox_plr_0_exert_burp_5"; - level.exert_sounds[ 1 ][ "burp" ][ 6 ] = "vox_plr_0_exert_burp_6"; - level.exert_sounds[ 2 ][ "burp" ][ 0 ] = "vox_plr_1_exert_burp_0"; - level.exert_sounds[ 2 ][ "burp" ][ 1 ] = "vox_plr_1_exert_burp_1"; - level.exert_sounds[ 2 ][ "burp" ][ 2 ] = "vox_plr_1_exert_burp_2"; - level.exert_sounds[ 2 ][ "burp" ][ 3 ] = "vox_plr_1_exert_burp_3"; - level.exert_sounds[ 3 ][ "burp" ][ 0 ] = "vox_plr_2_exert_burp_0"; - level.exert_sounds[ 3 ][ "burp" ][ 1 ] = "vox_plr_2_exert_burp_1"; - level.exert_sounds[ 3 ][ "burp" ][ 2 ] = "vox_plr_2_exert_burp_2"; - level.exert_sounds[ 3 ][ "burp" ][ 3 ] = "vox_plr_2_exert_burp_3"; - level.exert_sounds[ 3 ][ "burp" ][ 4 ] = "vox_plr_2_exert_burp_4"; - level.exert_sounds[ 3 ][ "burp" ][ 5 ] = "vox_plr_2_exert_burp_5"; - level.exert_sounds[ 3 ][ "burp" ][ 6 ] = "vox_plr_2_exert_burp_6"; - level.exert_sounds[ 4 ][ "burp" ][ 0 ] = "vox_plr_3_exert_burp_0"; - level.exert_sounds[ 4 ][ "burp" ][ 1 ] = "vox_plr_3_exert_burp_1"; - level.exert_sounds[ 4 ][ "burp" ][ 2 ] = "vox_plr_3_exert_burp_2"; - level.exert_sounds[ 4 ][ "burp" ][ 3 ] = "vox_plr_3_exert_burp_3"; - level.exert_sounds[ 4 ][ "burp" ][ 4 ] = "vox_plr_3_exert_burp_4"; - level.exert_sounds[ 4 ][ "burp" ][ 5 ] = "vox_plr_3_exert_burp_5"; - level.exert_sounds[ 4 ][ "burp" ][ 6 ] = "vox_plr_3_exert_burp_6"; - level.exert_sounds[ 1 ][ "hitmed" ][ 0 ] = "vox_plr_0_exert_pain_medium_0"; - level.exert_sounds[ 1 ][ "hitmed" ][ 1 ] = "vox_plr_0_exert_pain_medium_1"; - level.exert_sounds[ 1 ][ "hitmed" ][ 2 ] = "vox_plr_0_exert_pain_medium_2"; - level.exert_sounds[ 1 ][ "hitmed" ][ 3 ] = "vox_plr_0_exert_pain_medium_3"; - level.exert_sounds[ 2 ][ "hitmed" ][ 0 ] = "vox_plr_1_exert_pain_medium_0"; - level.exert_sounds[ 2 ][ "hitmed" ][ 1 ] = "vox_plr_1_exert_pain_medium_1"; - level.exert_sounds[ 2 ][ "hitmed" ][ 2 ] = "vox_plr_1_exert_pain_medium_2"; - level.exert_sounds[ 2 ][ "hitmed" ][ 3 ] = "vox_plr_1_exert_pain_medium_3"; - level.exert_sounds[ 3 ][ "hitmed" ][ 0 ] = "vox_plr_2_exert_pain_medium_0"; - level.exert_sounds[ 3 ][ "hitmed" ][ 1 ] = "vox_plr_2_exert_pain_medium_1"; - level.exert_sounds[ 3 ][ "hitmed" ][ 2 ] = "vox_plr_2_exert_pain_medium_2"; - level.exert_sounds[ 3 ][ "hitmed" ][ 3 ] = "vox_plr_2_exert_pain_medium_3"; - level.exert_sounds[ 4 ][ "hitmed" ][ 0 ] = "vox_plr_3_exert_pain_medium_0"; - level.exert_sounds[ 4 ][ "hitmed" ][ 1 ] = "vox_plr_3_exert_pain_medium_1"; - level.exert_sounds[ 4 ][ "hitmed" ][ 2 ] = "vox_plr_3_exert_pain_medium_2"; - level.exert_sounds[ 4 ][ "hitmed" ][ 3 ] = "vox_plr_3_exert_pain_medium_3"; - level.exert_sounds[ 1 ][ "hitlrg" ][ 0 ] = "vox_plr_0_exert_pain_high_0"; - level.exert_sounds[ 1 ][ "hitlrg" ][ 1 ] = "vox_plr_0_exert_pain_high_1"; - level.exert_sounds[ 1 ][ "hitlrg" ][ 2 ] = "vox_plr_0_exert_pain_high_2"; - level.exert_sounds[ 1 ][ "hitlrg" ][ 3 ] = "vox_plr_0_exert_pain_high_3"; - level.exert_sounds[ 2 ][ "hitlrg" ][ 0 ] = "vox_plr_1_exert_pain_high_0"; - level.exert_sounds[ 2 ][ "hitlrg" ][ 1 ] = "vox_plr_1_exert_pain_high_1"; - level.exert_sounds[ 2 ][ "hitlrg" ][ 2 ] = "vox_plr_1_exert_pain_high_2"; - level.exert_sounds[ 2 ][ "hitlrg" ][ 3 ] = "vox_plr_1_exert_pain_high_3"; - level.exert_sounds[ 3 ][ "hitlrg" ][ 0 ] = "vox_plr_2_exert_pain_high_0"; - level.exert_sounds[ 3 ][ "hitlrg" ][ 1 ] = "vox_plr_2_exert_pain_high_1"; - level.exert_sounds[ 3 ][ "hitlrg" ][ 2 ] = "vox_plr_2_exert_pain_high_2"; - level.exert_sounds[ 3 ][ "hitlrg" ][ 3 ] = "vox_plr_2_exert_pain_high_3"; - level.exert_sounds[ 4 ][ "hitlrg" ][ 0 ] = "vox_plr_3_exert_pain_high_0"; - level.exert_sounds[ 4 ][ "hitlrg" ][ 1 ] = "vox_plr_3_exert_pain_high_1"; - level.exert_sounds[ 4 ][ "hitlrg" ][ 2 ] = "vox_plr_3_exert_pain_high_2"; - level.exert_sounds[ 4 ][ "hitlrg" ][ 3 ] = "vox_plr_3_exert_pain_high_3"; -} - -givecustomloadout( takeallweapons, alreadyspawned ) -{ - self giveweapon( "knife_zm" ); - self give_start_weapon( 1 ); -} - -transit_intermission() -{ - self closemenu(); - self closeingamemenu(); - level endon( "stop_intermission" ); - self endon( "disconnect" ); - self endon( "death" ); - self notify( "_zombie_game_over" ); - self.score = self.score_total; - self.sessionstate = "intermission"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - maps/mp/_visionset_mgr::vsmgr_deactivate( "overlay", "zm_transit_burn", self ); - self stopshellshock(); - self.game_over_bg = newclienthudelem( self ); - self.game_over_bg.x = 0; - self.game_over_bg.y = 0; - self.game_over_bg.horzalign = "fullscreen"; - self.game_over_bg.vertalign = "fullscreen"; - self.game_over_bg.foreground = 1; - self.game_over_bg.sort = 1; - self.game_over_bg setshader( "black", 640, 480 ); - self.game_over_bg.alpha = 1; - if ( !isDefined( level.the_bus ) ) - { - self.game_over_bg fadeovertime( 1 ); - self.game_over_bg.alpha = 0; - wait 5; - self.game_over_bg thread maps/mp/zombies/_zm::fade_up_over_time( 1 ); - } - else - { - zonestocheck = []; - zonestocheck[ zonestocheck.size ] = "zone_amb_bridge"; - zonestocheck[ zonestocheck.size ] = "zone_trans_11"; - zonestocheck[ zonestocheck.size ] = "zone_town_west"; - zonestocheck[ zonestocheck.size ] = "zone_town_west2"; - zonestocheck[ zonestocheck.size ] = "zone_tow"; - near_bridge = 0; - _a800 = zonestocheck; - _k800 = getFirstArrayKey( _a800 ); - while ( isDefined( _k800 ) ) - { - zone = _a800[ _k800 ]; - if ( level.the_bus maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_amb_bridge" ) ) - { - near_bridge = 1; - } - _k800 = getNextArrayKey( _a800, _k800 ); - } - if ( near_bridge ) - { - trig = getent( "bridge_trig", "targetname" ); - trig notify( "trigger" ); - } - org = spawn( "script_model", level.the_bus gettagorigin( "tag_camera" ) ); - org setmodel( "tag_origin" ); - org.angles = level.the_bus gettagangles( "tag_camera" ); - org linkto( level.the_bus ); - self setorigin( org.origin ); - self.angles = org.angles; - if ( !flag( "OnPriDoorYar" ) || !flag( "OnPriDoorYar2" ) ) - { - flag_set( "OnPriDoorYar" ); - wait_network_frame(); - } - if ( !level.the_bus.ismoving ) - { - level.the_bus.gracetimeatdestination = 0,1; - level.the_bus notify( "depart_early" ); - } - players = get_players(); - j = 0; - while ( j < players.size ) - { - player = players[ j ]; - player camerasetposition( org ); - player camerasetlookat(); - player cameraactivate( 1 ); - j++; - } - self.game_over_bg fadeovertime( 1 ); - self.game_over_bg.alpha = 0; - wait 12; - self.game_over_bg fadeovertime( 1 ); - self.game_over_bg.alpha = 1; - wait 1; - } -} - -transit_zone_init() -{ - flag_init( "always_on" ); - flag_set( "always_on" ); - add_adjacent_zone( "zone_roadside_west", "zone_din", "always_on" ); - add_adjacent_zone( "zone_roadside_west", "zone_gas", "always_on" ); - add_adjacent_zone( "zone_roadside_east", "zone_gas", "always_on" ); - add_adjacent_zone( "zone_roadside_east", "zone_gar", "always_on" ); - add_adjacent_zone( "zone_gas", "zone_din", "always_on" ); - add_adjacent_zone( "zone_gas", "zone_gar", "always_on" ); -} - -include_powerups() -{ - gametype = getDvar( "ui_gametype" ); - include_powerup( "nuke" ); - include_powerup( "insta_kill" ); - include_powerup( "double_points" ); - include_powerup( "full_ammo" ); - if ( gametype != "zgrief" ) - { - include_powerup( "carpenter" ); - } -} - -claymore_safe_to_plant() -{ - if ( self maps/mp/zm_transit_lava::object_touching_lava() ) - { - return 0; - } - if ( self.owner maps/mp/zm_transit_lava::object_touching_lava() ) - { - return 0; - } - return 1; -} - -grenade_safe_to_throw( player, weapname ) -{ - return 1; -} - -grenade_safe_to_bounce( player, weapname ) -{ - if ( !is_offhand_weapon( weapname ) && !is_grenade_launcher( weapname ) ) - { - return 1; - } - if ( self maps/mp/zm_transit_lava::object_touching_lava() ) - { - return 0; - } - return 1; -} - -offhand_weapon_overrride() -{ - register_lethal_grenade_for_level( "frag_grenade_zm" ); - level.zombie_lethal_grenade_player_init = "frag_grenade_zm"; - register_tactical_grenade_for_level( "cymbal_monkey_zm" ); - level.zombie_tactical_grenade_player_init = undefined; - level.grenade_safe_to_throw = ::grenade_safe_to_throw; - level.grenade_safe_to_bounce = ::grenade_safe_to_bounce; - level.zombie_placeable_mine_player_init = undefined; - level.claymore_safe_to_plant = ::claymore_safe_to_plant; - register_melee_weapon_for_level( "knife_zm" ); - register_melee_weapon_for_level( "bowie_knife_zm" ); - level.zombie_melee_weapon_player_init = "knife_zm"; - level.zombie_equipment_player_init = undefined; -} - -include_weapons() -{ - gametype = getDvar( "ui_gametype" ); - include_weapon( "knife_zm", 0 ); - include_weapon( "frag_grenade_zm", 0 ); - include_weapon( "m1911_zm", 0 ); - include_weapon( "m1911_upgraded_zm", 0 ); - include_weapon( "python_zm" ); - include_weapon( "python_upgraded_zm", 0 ); - include_weapon( "judge_zm" ); - include_weapon( "judge_upgraded_zm", 0 ); - include_weapon( "kard_zm" ); - include_weapon( "kard_upgraded_zm", 0 ); - include_weapon( "fiveseven_zm" ); - include_weapon( "fiveseven_upgraded_zm", 0 ); - include_weapon( "beretta93r_zm", 0 ); - include_weapon( "beretta93r_upgraded_zm", 0 ); - include_weapon( "fivesevendw_zm" ); - include_weapon( "fivesevendw_upgraded_zm", 0 ); - include_weapon( "ak74u_zm", 0 ); - include_weapon( "ak74u_upgraded_zm", 0 ); - include_weapon( "mp5k_zm", 0 ); - include_weapon( "mp5k_upgraded_zm", 0 ); - include_weapon( "qcw05_zm" ); - include_weapon( "qcw05_upgraded_zm", 0 ); - include_weapon( "870mcs_zm", 0 ); - include_weapon( "870mcs_upgraded_zm", 0 ); - include_weapon( "rottweil72_zm", 0 ); - include_weapon( "rottweil72_upgraded_zm", 0 ); - include_weapon( "saiga12_zm" ); - include_weapon( "saiga12_upgraded_zm", 0 ); - include_weapon( "srm1216_zm" ); - include_weapon( "srm1216_upgraded_zm", 0 ); - include_weapon( "m14_zm", 0 ); - include_weapon( "m14_upgraded_zm", 0 ); - include_weapon( "saritch_zm" ); - include_weapon( "saritch_upgraded_zm", 0 ); - include_weapon( "m16_zm", 0 ); - include_weapon( "m16_gl_upgraded_zm", 0 ); - include_weapon( "xm8_zm" ); - include_weapon( "xm8_upgraded_zm", 0 ); - include_weapon( "type95_zm" ); - include_weapon( "type95_upgraded_zm", 0 ); - include_weapon( "tar21_zm" ); - include_weapon( "tar21_upgraded_zm", 0 ); - include_weapon( "galil_zm" ); - include_weapon( "galil_upgraded_zm", 0 ); - include_weapon( "fnfal_zm" ); - include_weapon( "fnfal_upgraded_zm", 0 ); - include_weapon( "dsr50_zm" ); - include_weapon( "dsr50_upgraded_zm", 0 ); - include_weapon( "barretm82_zm" ); - include_weapon( "barretm82_upgraded_zm", 0 ); - include_weapon( "rpd_zm" ); - include_weapon( "rpd_upgraded_zm", 0 ); - include_weapon( "hamr_zm" ); - include_weapon( "hamr_upgraded_zm", 0 ); - include_weapon( "usrpg_zm" ); - include_weapon( "usrpg_upgraded_zm", 0 ); - include_weapon( "m32_zm" ); - include_weapon( "m32_upgraded_zm", 0 ); - include_weapon( "hk416_zm" ); - include_weapon( "hk416_upgraded_zm", 0 ); - include_weapon( "cymbal_monkey_zm" ); - if ( gametype != "zgrief" ) - { - include_weapon( "ray_gun_zm" ); - include_weapon( "ray_gun_upgraded_zm", 0 ); - add_limited_weapon( "ray_gun_zm", 4 ); - add_limited_weapon( "ray_gun_upgraded_zm", 4 ); - } - add_limited_weapon( "m1911_zm", 0 ); -} - -less_than_normal() -{ - return 0,5; -} - -custom_add_weapons() -{ - add_zombie_weapon( "m1911_zm", "m1911_upgraded_zm", &"ZOMBIE_WEAPON_M1911", 50, "", "", undefined ); - add_zombie_weapon( "python_zm", "python_upgraded_zm", &"ZOMBIE_WEAPON_PYTHON", 50, "wpck_python", "", undefined, 1 ); - add_zombie_weapon( "judge_zm", "judge_upgraded_zm", &"ZOMBIE_WEAPON_JUDGE", 50, "wpck_judge", "", undefined, 1 ); - add_zombie_weapon( "kard_zm", "kard_upgraded_zm", &"ZOMBIE_WEAPON_KARD", 50, "wpck_kap", "", undefined, 1 ); - add_zombie_weapon( "fiveseven_zm", "fiveseven_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVEN", 50, "wpck_57", "", undefined, 1 ); - add_zombie_weapon( "beretta93r_zm", "beretta93r_upgraded_zm", &"ZOMBIE_WEAPON_BERETTA93r", 1000, "", "", undefined ); - add_zombie_weapon( "fivesevendw_zm", "fivesevendw_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVENDW", 50, "wpck_duel57", "", undefined, 1 ); - add_zombie_weapon( "ak74u_zm", "ak74u_upgraded_zm", &"ZOMBIE_WEAPON_AK74U", 1200, "smg", "", undefined ); - add_zombie_weapon( "mp5k_zm", "mp5k_upgraded_zm", &"ZOMBIE_WEAPON_MP5K", 1000, "smg", "", undefined ); - add_zombie_weapon( "qcw05_zm", "qcw05_upgraded_zm", &"ZOMBIE_WEAPON_QCW05", 50, "wpck_chicom", "", undefined, 1 ); - add_zombie_weapon( "870mcs_zm", "870mcs_upgraded_zm", &"ZOMBIE_WEAPON_870MCS", 1500, "shotgun", "", undefined ); - add_zombie_weapon( "rottweil72_zm", "rottweil72_upgraded_zm", &"ZOMBIE_WEAPON_ROTTWEIL72", 500, "shotgun", "", undefined ); - add_zombie_weapon( "saiga12_zm", "saiga12_upgraded_zm", &"ZOMBIE_WEAPON_SAIGA12", 50, "wpck_saiga12", "", undefined, 1 ); - add_zombie_weapon( "srm1216_zm", "srm1216_upgraded_zm", &"ZOMBIE_WEAPON_SRM1216", 50, "wpck_m1216", "", undefined, 1 ); - add_zombie_weapon( "m14_zm", "m14_upgraded_zm", &"ZOMBIE_WEAPON_M14", 500, "rifle", "", undefined ); - add_zombie_weapon( "saritch_zm", "saritch_upgraded_zm", &"ZOMBIE_WEAPON_SARITCH", 50, "wpck_sidr", "", undefined, 1 ); - add_zombie_weapon( "m16_zm", "m16_gl_upgraded_zm", &"ZOMBIE_WEAPON_M16", 1200, "burstrifle", "", undefined ); - add_zombie_weapon( "xm8_zm", "xm8_upgraded_zm", &"ZOMBIE_WEAPON_XM8", 50, "wpck_m8a1", "", undefined, 1 ); - add_zombie_weapon( "type95_zm", "type95_upgraded_zm", &"ZOMBIE_WEAPON_TYPE95", 50, "wpck_type25", "", undefined, 1 ); - add_zombie_weapon( "tar21_zm", "tar21_upgraded_zm", &"ZOMBIE_WEAPON_TAR21", 50, "wpck_x95l", "", undefined, 1 ); - add_zombie_weapon( "galil_zm", "galil_upgraded_zm", &"ZOMBIE_WEAPON_GALIL", 50, "wpck_galil", "", undefined, 1 ); - add_zombie_weapon( "fnfal_zm", "fnfal_upgraded_zm", &"ZOMBIE_WEAPON_FNFAL", 50, "wpck_fal", "", undefined, 1 ); - add_zombie_weapon( "dsr50_zm", "dsr50_upgraded_zm", &"ZOMBIE_WEAPON_DR50", 50, "wpck_dsr50", "", undefined, 1 ); - add_zombie_weapon( "barretm82_zm", "barretm82_upgraded_zm", &"ZOMBIE_WEAPON_BARRETM82", 50, "sniper", "", undefined ); - add_zombie_weapon( "rpd_zm", "rpd_upgraded_zm", &"ZOMBIE_WEAPON_RPD", 50, "wpck_rpd", "", undefined, 1 ); - add_zombie_weapon( "hamr_zm", "hamr_upgraded_zm", &"ZOMBIE_WEAPON_HAMR", 50, "wpck_hamr", "", undefined, 1 ); - add_zombie_weapon( "frag_grenade_zm", undefined, &"ZOMBIE_WEAPON_FRAG_GRENADE", 250, "grenade", "", 250 ); - add_zombie_weapon( "usrpg_zm", "usrpg_upgraded_zm", &"ZOMBIE_WEAPON_USRPG", 50, "wpck_rpg", "", undefined, 1 ); - add_zombie_weapon( "m32_zm", "m32_upgraded_zm", &"ZOMBIE_WEAPON_M32", 50, "wpck_m32", "", undefined, 1 ); - add_zombie_weapon( "cymbal_monkey_zm", undefined, &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 ); - add_zombie_weapon( "ray_gun_zm", "ray_gun_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN", 10000, "wpck_ray", "", undefined, 1 ); - add_zombie_weapon( "hk416_zm", "hk416_upgraded_zm", &"ZOMBIE_WEAPON_HK416", 100, "", "", undefined ); -} - -include_game_modules() -{ -} - -initial_round_wait_func() -{ - flag_wait( "initial_blackscreen_passed" ); -} - -zombie_init_done() -{ - self.allowpain = 0; -} - -setup_zombie_init() -{ - zombies = getentarray( "zombie_spawner", "script_noteworthy" ); -} - -assign_lowest_unused_character_index() -{ - charindexarray = []; - charindexarray[ 0 ] = 0; - charindexarray[ 1 ] = 1; - charindexarray[ 2 ] = 2; - charindexarray[ 3 ] = 3; - players = get_players(); - if ( players.size == 1 ) - { - charindexarray = array_randomize( charindexarray ); - return charindexarray[ 0 ]; - } - else - { - if ( players.size == 2 ) - { - _a1250 = players; - _k1250 = getFirstArrayKey( _a1250 ); - while ( isDefined( _k1250 ) ) - { - player = _a1250[ _k1250 ]; - if ( isDefined( player.characterindex ) ) - { - if ( player.characterindex == 2 || player.characterindex == 0 ) - { - if ( randomint( 100 ) > 50 ) - { - return 1; - } - return 3; - } - else - { - if ( player.characterindex == 3 || player.characterindex == 1 ) - { - if ( randomint( 100 ) > 50 ) - { - return 0; - } - return 2; - } - } - } - _k1250 = getNextArrayKey( _a1250, _k1250 ); - } - } - else _a1276 = players; - _k1276 = getFirstArrayKey( _a1276 ); - while ( isDefined( _k1276 ) ) - { - player = _a1276[ _k1276 ]; - if ( isDefined( player.characterindex ) ) - { - arrayremovevalue( charindexarray, player.characterindex, 0 ); - } - _k1276 = getNextArrayKey( _a1276, _k1276 ); - } - if ( charindexarray.size > 0 ) - { - return charindexarray[ 0 ]; - } - } - return 0; -} - -zombie_transit_dr_devgui( cmd ) -{ -/# - cmd_strings = strtok( cmd, " " ); - switch( cmd_strings[ 0 ] ) - { - case "blue_monkey": - case "green_ammo": - case "green_double": - case "green_insta": - case "green_monkey": - case "green_nuke": - case "red_ammo": - case "red_double": - case "red_nuke": - case "yellow_double": - case "yellow_nuke": - maps/mp/zombies/_zm_devgui::zombie_devgui_give_powerup( cmd_strings[ 0 ], 1 ); - break; - case "less_time": - less_time(); - break; - case "more_time": - more_time(); - break; - default: - } -#/ - } -} - -less_time() -{ -/# - level.time_to_add = 30000; - if ( !isDefined( level.time_to_remove ) ) - { - level.time_to_remove = 60000; - } - else - { - level.time_to_remove *= 2; - } - if ( maps/mp/gametypes_zm/_globallogic_utils::gettimeremaining() < level.time_to_remove ) - { - level.time_to_remove = maps/mp/gametypes_zm/_globallogic_utils::gettimeremaining() / 2; - } - level.discardtime -= level.time_to_remove; -#/ -} - -more_time() -{ -/# - level.time_to_remove = 30000; - if ( !isDefined( level.time_to_add ) ) - { - level.time_to_add = 60000; - } - else - { - level.time_to_add *= 2; - } - level.discardtime += level.time_to_add; -#/ -} - -init_transit_dr_stats() -{ - self maps/mp/zm_transit_dr_achievement::init_player_achievement_stats(); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_dr_achievement.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_dr_achievement.gsc deleted file mode 100644 index 8930803..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_dr_achievement.gsc +++ /dev/null @@ -1,62 +0,0 @@ -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - level.achievement_sound_func = ::achievement_sound_func; - onplayerconnect_callback( ::onplayerconnect ); -} - -achievement_sound_func( achievement_name_lower ) -{ - self thread do_player_general_vox( "general", "achievement" ); -} - -init_player_achievement_stats() -{ - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_polyarmory", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_monkey_see_monkey_doom", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_i_see_live_people", 0 ); -} - -onplayerconnect() -{ - if ( gamemodeismode( level.gamemode_public_match ) ) - { - self thread achievement_polyarmory(); - self thread achievement_monkey_see_monkey_doom(); - self thread achievement_i_see_live_people(); - } -} - -achievement_polyarmory() -{ - level endon( "end_game" ); - self endon( "disconnect" ); - self waittill( "gun_game_achievement" ); -/# -#/ - self giveachievement_wrapper( "ZM_DLC1_POLYARMORY" ); -} - -achievement_monkey_see_monkey_doom() -{ - level endon( "end_game" ); - self endon( "disconnect" ); - self waittill( "powerup_blue_monkey" ); -/# -#/ - self giveachievement_wrapper( "ZM_DLC1_MONKEY_SEE_MONKEY_DOOM" ); -} - -achievement_i_see_live_people() -{ - level endon( "end_game" ); - self endon( "disconnect" ); - self waittill( "invisible_player_killed" ); -/# -#/ - self giveachievement_wrapper( "ZM_DLC1_I_SEE_LIVE_PEOPLE" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_dr_ffotd.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_dr_ffotd.gsc deleted file mode 100644 index 62d32bd..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_dr_ffotd.gsc +++ /dev/null @@ -1,11 +0,0 @@ -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -main_start() -{ -} - -main_end() -{ -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_dr_fx.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_dr_fx.gsc deleted file mode 100644 index 1fd55fe..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_dr_fx.gsc +++ /dev/null @@ -1,121 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - precache_createfx_fx(); - precache_scripted_fx(); - maps/mp/createfx/zm_transit_fx::main(); - maps/mp/createart/zm_transit_art::main(); -} - -precache_scripted_fx() -{ - level._effect[ "switch_sparks" ] = loadfx( "env/electrical/fx_elec_wire_spark_burst" ); - level._effect[ "maxis_sparks" ] = loadfx( "maps/zombie/fx_zmb_race_trail_grief" ); - level._effect[ "richtofen_sparks" ] = loadfx( "maps/zombie/fx_zmb_race_trail_neutral" ); - level._effect[ "sq_common_lightning" ] = loadfx( "maps/zombie/fx_zmb_tranzit_sq_lightning_orb" ); - level._effect[ "zapper_light_ready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_green" ); - level._effect[ "zapper_light_notready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_red" ); - level._effect[ "lght_marker" ] = loadfx( "maps/zombie/fx_zmb_tranzit_marker" ); - level._effect[ "lght_marker_flare" ] = loadfx( "maps/zombie/fx_zmb_tranzit_marker_fl" ); - level._effect[ "poltergeist" ] = loadfx( "misc/fx_zombie_couch_effect" ); - level._effect[ "zomb_gib" ] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" ); - level._effect[ "fx_headlight" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_headlight" ); - level._effect[ "fx_headlight_lenflares" ] = loadfx( "lens_flares/fx_lf_zmb_tranzit_bus_headlight" ); - level._effect[ "fx_brakelight" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_brakelights" ); - level._effect[ "fx_emergencylight" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_flashing_lights" ); - level._effect[ "fx_turn_signal_right" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_turnsignal_right" ); - level._effect[ "fx_turn_signal_left" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_turnsignal_left" ); - level._effect[ "fx_zbus_trans_fog" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_fog_intersect" ); - level._effect[ "bus_lava_driving" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_fire_driving" ); - level._effect[ "bus_hatch_bust" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_hatch_bust" ); - level._effect[ "elec_md" ] = loadfx( "electrical/fx_elec_player_md" ); - level._effect[ "elec_sm" ] = loadfx( "electrical/fx_elec_player_sm" ); - level._effect[ "elec_torso" ] = loadfx( "electrical/fx_elec_player_torso" ); - level._effect[ "blue_eyes" ] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" ); - level._effect[ "lava_burning" ] = loadfx( "env/fire/fx_fire_lava_player_torso" ); - level._effect[ "mc_trafficlight" ] = loadfx( "maps/zombie/fx_zmb_morsecode_traffic_loop" ); - level._effect[ "mc_towerlight" ] = loadfx( "maps/zombie/fx_zmb_morsecode_loop" ); -} - -precache_createfx_fx() -{ - level._effect[ "fx_insects_swarm_md_light" ] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); - level._effect[ "fx_zmb_tranzit_flourescent_flicker" ] = loadfx( "maps/zombie/fx_zmb_tranzit_flourescent_flicker" ); - level._effect[ "fx_zmb_tranzit_flourescent_glow" ] = loadfx( "maps/zombie/fx_zmb_tranzit_flourescent_glow" ); - level._effect[ "fx_zmb_tranzit_flourescent_glow_lg" ] = loadfx( "maps/zombie/fx_zmb_tranzit_flourescent_glow_lg" ); - level._effect[ "fx_zmb_tranzit_flourescent_dbl_glow" ] = loadfx( "maps/zombie/fx_zmb_tranzit_flourescent_dbl_glow" ); - level._effect[ "fx_zmb_tranzit_depot_map_flicker" ] = loadfx( "maps/zombie/fx_zmb_tranzit_depot_map_flicker" ); - level._effect[ "fx_zmb_tranzit_light_bulb_xsm" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_bulb_xsm" ); - level._effect[ "fx_zmb_tranzit_light_glow" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_glow" ); - level._effect[ "fx_zmb_tranzit_light_glow_xsm" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_glow_xsm" ); - level._effect[ "fx_zmb_tranzit_light_glow_fog" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_glow_fog" ); - level._effect[ "fx_zmb_tranzit_light_depot_cans" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_depot_cans" ); - level._effect[ "fx_zmb_tranzit_light_desklamp" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_desklamp" ); - level._effect[ "fx_zmb_tranzit_light_town_cans" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_town_cans" ); - level._effect[ "fx_zmb_tranzit_light_town_cans_sm" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_town_cans_sm" ); - level._effect[ "fx_zmb_tranzit_light_street_tinhat" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_street_tinhat" ); - level._effect[ "fx_zmb_tranzit_street_lamp" ] = loadfx( "maps/zombie/fx_zmb_tranzit_street_lamp" ); - level._effect[ "fx_zmb_tranzit_truck_light" ] = loadfx( "maps/zombie/fx_zmb_tranzit_truck_light" ); - level._effect[ "fx_zmb_tranzit_spark_int_runner" ] = loadfx( "maps/zombie/fx_zmb_tranzit_spark_int_runner" ); - level._effect[ "fx_zmb_tranzit_spark_ext_runner" ] = loadfx( "maps/zombie/fx_zmb_tranzit_spark_ext_runner" ); - level._effect[ "fx_zmb_tranzit_spark_blue_lg_loop" ] = loadfx( "maps/zombie/fx_zmb_tranzit_spark_blue_lg_loop" ); - level._effect[ "fx_zmb_tranzit_spark_blue_sm_loop" ] = loadfx( "maps/zombie/fx_zmb_tranzit_spark_blue_sm_loop" ); - level._effect[ "fx_zmb_tranzit_bar_glow" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bar_glow" ); - level._effect[ "fx_zmb_tranzit_transformer_on" ] = loadfx( "maps/zombie/fx_zmb_tranzit_transformer_on" ); - level._effect[ "fx_zmb_fog_closet" ] = loadfx( "fog/fx_zmb_fog_closet" ); - level._effect[ "fx_zmb_fog_low_300x300" ] = loadfx( "fog/fx_zmb_fog_low_300x300" ); - level._effect[ "fx_zmb_fog_thick_600x600" ] = loadfx( "fog/fx_zmb_fog_thick_600x600" ); - level._effect[ "fx_zmb_fog_thick_1200x600" ] = loadfx( "fog/fx_zmb_fog_thick_1200x600" ); - level._effect[ "fx_zmb_fog_transition_600x600" ] = loadfx( "fog/fx_zmb_fog_transition_600x600" ); - level._effect[ "fx_zmb_fog_transition_1200x600" ] = loadfx( "fog/fx_zmb_fog_transition_1200x600" ); - level._effect[ "fx_zmb_fog_transition_right_border" ] = loadfx( "fog/fx_zmb_fog_transition_right_border" ); - level._effect[ "fx_zmb_tranzit_smk_interior_md" ] = loadfx( "maps/zombie/fx_zmb_tranzit_smk_interior_md" ); - level._effect[ "fx_zmb_tranzit_smk_interior_heavy" ] = loadfx( "maps/zombie/fx_zmb_tranzit_smk_interior_heavy" ); - level._effect[ "fx_zmb_ash_ember_1000x1000" ] = loadfx( "maps/zombie/fx_zmb_ash_ember_1000x1000" ); - level._effect[ "fx_zmb_ash_ember_2000x1000" ] = loadfx( "maps/zombie/fx_zmb_ash_ember_2000x1000" ); - level._effect[ "fx_zmb_ash_rising_md" ] = loadfx( "maps/zombie/fx_zmb_ash_rising_md" ); - level._effect[ "fx_zmb_ash_windy_heavy_sm" ] = loadfx( "maps/zombie/fx_zmb_ash_windy_heavy_sm" ); - level._effect[ "fx_zmb_ash_windy_heavy_md" ] = loadfx( "maps/zombie/fx_zmb_ash_windy_heavy_md" ); - level._effect[ "fx_zmb_lava_detail" ] = loadfx( "maps/zombie/fx_zmb_lava_detail" ); - level._effect[ "fx_zmb_lava_edge_100" ] = loadfx( "maps/zombie/fx_zmb_lava_edge_100" ); - level._effect[ "fx_zmb_lava_50x50_sm" ] = loadfx( "maps/zombie/fx_zmb_lava_50x50_sm" ); - level._effect[ "fx_zmb_lava_100x100" ] = loadfx( "maps/zombie/fx_zmb_lava_100x100" ); - level._effect[ "fx_zmb_lava_river" ] = loadfx( "maps/zombie/fx_zmb_lava_river" ); - level._effect[ "fx_zmb_lava_creek" ] = loadfx( "maps/zombie/fx_zmb_lava_creek" ); - level._effect[ "fx_zmb_lava_crevice_glow_50" ] = loadfx( "maps/zombie/fx_zmb_lava_crevice_glow_50" ); - level._effect[ "fx_zmb_lava_crevice_glow_100" ] = loadfx( "maps/zombie/fx_zmb_lava_crevice_glow_100" ); - level._effect[ "fx_zmb_lava_crevice_smoke_100" ] = loadfx( "maps/zombie/fx_zmb_lava_crevice_smoke_100" ); - level._effect[ "fx_zmb_lava_smoke_tall" ] = loadfx( "maps/zombie/fx_zmb_lava_smoke_tall" ); - level._effect[ "fx_zmb_lava_smoke_pit" ] = loadfx( "maps/zombie/fx_zmb_lava_smoke_pit" ); - level._effect[ "fx_zmb_tranzit_bowling_sign_fog" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bowling_sign_fog" ); - level._effect[ "fx_zmb_tranzit_lava_distort" ] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_distort" ); - level._effect[ "fx_zmb_tranzit_lava_distort_sm" ] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_distort_sm" ); - level._effect[ "fx_zmb_tranzit_lava_distort_detail" ] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_distort_detail" ); - level._effect[ "fx_zmb_tranzit_fire_med" ] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_med" ); - level._effect[ "fx_zmb_tranzit_fire_lrg" ] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_lrg" ); - level._effect[ "fx_zmb_tranzit_smk_column_lrg" ] = loadfx( "maps/zombie/fx_zmb_tranzit_smk_column_lrg" ); - level._effect[ "fx_zmb_papers_windy_slow" ] = loadfx( "maps/zombie/fx_zmb_papers_windy_slow" ); - level._effect[ "fx_zmb_tranzit_god_ray_short_warm" ] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_short_warm" ); - level._effect[ "fx_zmb_tranzit_god_ray_vault" ] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_vault" ); - level._effect[ "fx_zmb_tranzit_key_glint" ] = loadfx( "maps/zombie/fx_zmb_tranzit_key_glint" ); - level._effect[ "fx_zmb_tranzit_god_ray_interior_med" ] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_interior_med" ); - level._effect[ "fx_zmb_tranzit_god_ray_interior_long" ] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_interior_long" ); - level._effect[ "fx_zmb_tranzit_god_ray_depot_cool" ] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_depot_cool" ); - level._effect[ "fx_zmb_tranzit_god_ray_depot_warm" ] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_depot_warm" ); - level._effect[ "fx_zmb_tranzit_god_ray_tunnel_warm" ] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_tunnel_warm" ); - level._effect[ "fx_zmb_tranzit_god_ray_pwr_station" ] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_pwr_station" ); - level._effect[ "fx_zmb_tranzit_light_safety" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_safety" ); - level._effect[ "fx_zmb_tranzit_light_safety_off" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_safety_off" ); - level._effect[ "fx_zmb_tranzit_light_safety_max" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_safety_max" ); - level._effect[ "fx_zmb_tranzit_light_safety_ric" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_safety_ric" ); - level._effect[ "fx_zmb_tranzit_bridge_dest" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bridge_dest" ); - level._effect[ "fx_zmb_tranzit_power_pulse" ] = loadfx( "maps/zombie/fx_zmb_tranzit_power_pulse" ); - level._effect[ "fx_zmb_tranzit_power_on" ] = loadfx( "maps/zombie/fx_zmb_tranzit_power_on" ); - level._effect[ "fx_zmb_tranzit_power_rising" ] = loadfx( "maps/zombie/fx_zmb_tranzit_power_rising" ); - level._effect[ "fx_zmb_avog_storm" ] = loadfx( "maps/zombie/fx_zmb_avog_storm" ); - level._effect[ "fx_zmb_avog_storm_low" ] = loadfx( "maps/zombie/fx_zmb_avog_storm_low" ); - level._effect[ "glass_impact" ] = loadfx( "maps/zombie/fx_zmb_tranzit_window_dest_lg" ); - level._effect[ "fx_zmb_tranzit_spark_blue_lg_os" ] = loadfx( "maps/zombie/fx_zmb_tranzit_spark_blue_lg_os" ); - level._effect[ "spawn_cloud" ] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_dr_gamemodes.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_dr_gamemodes.gsc deleted file mode 100644 index e03b805..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_dr_gamemodes.gsc +++ /dev/null @@ -1,15 +0,0 @@ -#include maps/mp/zm_transit_turned_diner; -#include maps/mp/zm_transit_dr; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zm_transit_utility; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - add_map_gamemode( "zcleansed", ::maps/mp/zm_transit_dr::zcleansed_preinit, undefined, undefined ); - add_map_gamemode( "zturned", ::maps/mp/zm_transit_dr::zturned_preinit, undefined, undefined ); - add_map_location_gamemode( "zcleansed", "diner", ::maps/mp/zm_transit_turned_diner::precache, ::maps/mp/zm_transit_turned_diner::main ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_lava.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_lava.gsc deleted file mode 100644 index 4b5bb0f..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_lava.gsc +++ /dev/null @@ -1,384 +0,0 @@ -#include maps/mp/animscripts/zm_death; -#include maps/mp/_visionset_mgr; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -object_touching_lava() -{ - if ( !isDefined( level.lava ) ) - { - level.lava = getentarray( "lava_damage", "targetname" ); - } - if ( !isDefined( level.lava ) || level.lava.size < 1 ) - { - return 0; - } - if ( isDefined( self.lasttouching ) && self istouching( self.lasttouching ) ) - { - return 1; - } - i = 0; - while ( i < level.lava.size ) - { - if ( distancesquared( self.origin, level.lava[ i ].origin ) < 2250000 ) - { - if ( isDefined( level.lava[ i ].target ) ) - { - if ( self istouching( level.lava[ i ].volume ) ) - { - if ( isDefined( level.lava[ i ].script_float ) && level.lava[ i ].script_float <= 0,1 ) - { - return 0; - } - self.lasttouching = level.lava[ i ].volume; - return 1; - } - } - else - { - if ( self istouching( level.lava[ i ] ) ) - { - self.lasttouching = level.lava[ i ]; - return 1; - } - } - } - i++; - } - self.lasttouching = undefined; - return 0; -} - -lava_damage_init() -{ - lava = getentarray( "lava_damage", "targetname" ); - if ( !isDefined( lava ) ) - { - return; - } - array_thread( lava, ::lava_damage_think ); -} - -lava_damage_think() -{ - self._trap_type = ""; - if ( isDefined( self.script_noteworthy ) ) - { - self._trap_type = self.script_noteworthy; - } - if ( isDefined( self.target ) ) - { - self.volume = getent( self.target, "targetname" ); -/# - assert( isDefined( self.volume ), "No volume found for lava target " + self.target ); -#/ - } - while ( 1 ) - { - self waittill( "trigger", ent ); - if ( isDefined( ent.ignore_lava_damage ) && ent.ignore_lava_damage ) - { - continue; - } - while ( isDefined( ent.is_burning ) ) - { - continue; - } - if ( isDefined( self.target ) && !ent istouching( self.volume ) ) - { - continue; - } - if ( isplayer( ent ) ) - { - switch( self._trap_type ) - { - case "fire": - default: - if ( !isDefined( self.script_float ) || self.script_float >= 0,1 ) - { - ent thread player_lava_damage( self ); - } - break; - } - break; - continue; - } - else if ( !isDefined( ent.marked_for_death ) ) - { - switch( self._trap_type ) - { - case "fire": - default: - if ( !isDefined( self.script_float ) || self.script_float >= 0,1 ) - { - ent thread zombie_lava_damage( self ); - } - break; - break; - } - } -} -} - -player_lava_damage( trig ) -{ - self endon( "zombified" ); - self endon( "death" ); - self endon( "disconnect" ); - max_dmg = 15; - min_dmg = 5; - burn_time = 1; - if ( isDefined( self.is_zombie ) && self.is_zombie ) - { - return; - } - self thread player_stop_burning(); - if ( isDefined( trig.script_float ) ) - { - max_dmg *= trig.script_float; - min_dmg *= trig.script_float; - burn_time *= trig.script_float; - if ( burn_time >= 1,5 ) - { - burn_time = 1,5; - } - } - if ( !isDefined( self.is_burning ) && is_player_valid( self ) ) - { - self.is_burning = 1; - maps/mp/_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, burn_time, level.zm_transit_burn_max_duration ); - self notify( "burned" ); - if ( isDefined( trig.script_float ) && trig.script_float >= 0,1 ) - { - self thread player_burning_fx(); - } - if ( !self hasperk( "specialty_armorvest" ) || ( self.health - 100 ) < 1 ) - { - radiusdamage( self.origin, 10, max_dmg, min_dmg ); - wait 0,5; - self.is_burning = undefined; - return; - } - else - { - if ( self hasperk( "specialty_armorvest" ) ) - { - self dodamage( 15, self.origin ); - } - else - { - self dodamage( 1, self.origin ); - } - wait 0,5; - self.is_burning = undefined; - } - } -} - -player_stop_burning() -{ - self notify( "player_stop_burning" ); - self endon( "player_stop_burning" ); - self endon( "death_or_disconnect" ); - self waittill( "zombified" ); - self notify( "stop_flame_damage" ); - maps/mp/_visionset_mgr::vsmgr_deactivate( "overlay", "zm_transit_burn", self ); -} - -zombie_burning_fx() -{ - self endon( "death" ); - if ( isDefined( self.is_on_fire ) && self.is_on_fire ) - { - return; - } - self.is_on_fire = 1; - self thread maps/mp/animscripts/zm_death::on_fire_timeout(); - if ( isDefined( level._effect ) && isDefined( level._effect[ "lava_burning" ] ) ) - { - if ( !self.isdog ) - { - playfxontag( level._effect[ "lava_burning" ], self, "J_SpineLower" ); - self thread zombie_burning_audio(); - } - } - if ( isDefined( level._effect ) && isDefined( level._effect[ "character_fire_death_sm" ] ) ) - { - wait 1; - if ( randomint( 2 ) > 1 ) - { - tagarray = []; - tagarray[ 0 ] = "J_Elbow_LE"; - tagarray[ 1 ] = "J_Elbow_RI"; - tagarray[ 2 ] = "J_Knee_RI"; - tagarray[ 3 ] = "J_Knee_LE"; - tagarray = randomize_array( tagarray ); - playfxontag( level._effect[ "character_fire_death_sm" ], self, tagarray[ 0 ] ); - return; - } - else - { - tagarray[ 0 ] = "J_Wrist_RI"; - tagarray[ 1 ] = "J_Wrist_LE"; - if ( !isDefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" ) - { - tagarray[ 2 ] = "J_Ankle_RI"; - tagarray[ 3 ] = "J_Ankle_LE"; - } - tagarray = randomize_array( tagarray ); - playfxontag( level._effect[ "character_fire_death_sm" ], self, tagarray[ 0 ] ); - } - } -} - -zombie_burning_audio() -{ - self playloopsound( "zmb_fire_loop" ); - self waittill_either( "stop_flame_damage", "death" ); - if ( isDefined( self ) && isalive( self ) ) - { - self stoploopsound( 0,25 ); - } -} - -player_burning_fx() -{ - self endon( "death" ); - if ( isDefined( self.is_on_fire ) && self.is_on_fire ) - { - return; - } - if ( isDefined( self.no_burning_sfx ) && !self.no_burning_sfx ) - { - self thread player_burning_audio(); - } - self.is_on_fire = 1; - self thread maps/mp/animscripts/zm_death::on_fire_timeout(); - if ( isDefined( level._effect ) && isDefined( level._effect[ "character_fire_death_sm" ] ) ) - { - playfxontag( level._effect[ "character_fire_death_sm" ], self, "J_SpineLower" ); - } -} - -player_burning_audio() -{ - fire_ent = spawn( "script_model", self.origin ); - wait_network_frame(); - fire_ent linkto( self ); - fire_ent playloopsound( "evt_plr_fire_loop" ); - self waittill_any( "stop_flame_damage", "stop_flame_sounds", "death", "discoonect" ); - fire_ent delete(); -} - -zombie_lava_damage( trap ) -{ - self endon( "death" ); - zombie_dmg = 1; - if ( isDefined( self.script_float ) ) - { - zombie_dmg *= self.script_float; - } - switch( trap._trap_type ) - { - case "fire": - default: - if ( isDefined( self.animname ) || !isDefined( self.is_on_fire ) && !self.is_on_fire ) - { - if ( level.burning_zombies.size < 6 && zombie_dmg >= 1 ) - { - level.burning_zombies[ level.burning_zombies.size ] = self; - self playsound( "ignite" ); - self thread zombie_burning_fx(); - self thread zombie_burning_watch(); - self thread zombie_burning_dmg(); - self thread zombie_exploding_death( zombie_dmg, trap ); - wait randomfloat( 1,25 ); - } - } - if ( self.health > ( level.zombie_health / 2 ) && self.health > zombie_dmg ) - { - self dodamage( zombie_dmg, self.origin, trap ); - } - break; - } -} - -zombie_burning_watch() -{ - self waittill_any( "stop_flame_damage", "death" ); - arrayremovevalue( level.burning_zombies, self ); -} - -zombie_exploding_death( zombie_dmg, trap ) -{ - self endon( "stop_flame_damage" ); - if ( isDefined( self.isdog ) && self.isdog && isDefined( self.a.nodeath ) ) - { - return; - } - while ( isDefined( self ) && self.health >= zombie_dmg && isDefined( self.is_on_fire ) && self.is_on_fire ) - { - wait 0,5; - } - if ( isDefined( self ) && isDefined( self.is_on_fire ) && self.is_on_fire && isDefined( self.damageweapon ) && self.damageweapon != "tazer_knuckles_zm" || self.damageweapon == "jetgun_zm" && isDefined( self.knuckles_extinguish_flames ) && self.knuckles_extinguish_flames ) - { - return; - } - tag = "J_SpineLower"; - if ( isDefined( self.animname ) && self.animname == "zombie_dog" ) - { - tag = "tag_origin"; - } - if ( is_mature() ) - { - if ( isDefined( level._effect[ "zomb_gib" ] ) ) - { - playfx( level._effect[ "zomb_gib" ], self gettagorigin( tag ) ); - } - } - else - { - if ( isDefined( level._effect[ "spawn_cloud" ] ) ) - { - playfx( level._effect[ "spawn_cloud" ], self gettagorigin( tag ) ); - } - } - self radiusdamage( self.origin, 128, 30, 15, undefined, "MOD_EXPLOSIVE" ); - self ghost(); - if ( isDefined( self.isdog ) && self.isdog ) - { - self hide(); - } - else - { - self delay_thread( 1, ::self_delete ); - } -} - -zombie_burning_dmg() -{ - self endon( "death" ); - damageradius = 25; - damage = 2; - while ( isDefined( self.is_on_fire ) && self.is_on_fire ) - { - eyeorigin = self geteye(); - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( is_player_valid( players[ i ] ) ) - { - playereye = players[ i ] geteye(); - if ( distancesquared( eyeorigin, playereye ) < ( damageradius * damageradius ) ) - { - players[ i ] dodamage( damage, self.origin, self ); - players[ i ] notify( "burned" ); - } - } - i++; - } - wait 1; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_power.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_power.gsc deleted file mode 100644 index ec16632..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_power.gsc +++ /dev/null @@ -1,583 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/_visionset_mgr; -#include maps/mp/zm_transit_utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -initializepower() -{ - level thread electricswitch(); - level thread powerevent(); - registerclientfield( "toplayer", "power_rumble", 1, 1, "int" ); - if ( !isDefined( level.vsmgr_prio_visionset_zm_transit_power_high_low ) ) - { - level.vsmgr_prio_visionset_zm_transit_power_high_low = 20; - } - maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_power_high_low", 1, level.vsmgr_prio_visionset_zm_transit_power_high_low, 7, 1, ::vsmgr_lerp_power_up_down, 0 ); -} - -precache_models() -{ -} - -elecswitchbuildable() -{ - lever = getent( "powerswitch_p6_zm_buildable_pswitch_lever", "targetname" ); - hand = getent( "powerswitch_p6_zm_buildable_pswitch_hand", "targetname" ); - hand linkto( lever ); - hand hide(); - getent( "powerswitch_p6_zm_buildable_pswitch_body", "targetname" ) hide(); - lever hide(); - wait_for_buildable( "powerswitch" ); -} - -electricswitch() -{ - flag_init( "switches_on" ); - level thread wait_for_power(); - trig = getent( "powerswitch_buildable_trigger_power", "targetname" ); - trig setinvisibletoall(); - elecswitchbuildable(); - master_switch = getent( "powerswitch_p6_zm_buildable_pswitch_lever", "targetname" ); - while ( 1 ) - { - trig sethintstring( &"ZOMBIE_ELECTRIC_SWITCH" ); - trig setvisibletoall(); - trig waittill( "trigger", user ); - trig setinvisibletoall(); - master_switch rotateroll( -90, 0,3 ); - master_switch playsound( "zmb_switch_flip" ); - master_switch waittill( "rotatedone" ); - playfx( level._effect[ "switch_sparks" ], getstruct( "elec_switch_fx", "targetname" ).origin ); - master_switch playsound( "zmb_turn_on" ); - level.power_event_in_progress = 1; - level thread power_event_rumble_and_quake(); - flag_set( "switches_on" ); - clientnotify( "pwr" ); - level thread avogadro_show_vox( user ); - level waittill( "power_event_complete" ); - clientnotify( "pwr" ); - flag_set( "power_on" ); - level.power_event_in_progress = 0; - level thread bus_station_pa_vox(); - if ( isDefined( user ) ) - { - user maps/mp/zombies/_zm_stats::increment_client_stat( "power_turnedon", 0 ); - user maps/mp/zombies/_zm_stats::increment_player_stat( "power_turnedon" ); - } - trig sethintstring( &"ZOMBIE_ELECTRIC_SWITCH_OFF" ); - trig setvisibletoall(); - trig waittill( "trigger", user ); - trig setinvisibletoall(); - master_switch rotateroll( 90, 0,3 ); - master_switch playsound( "zmb_switch_flip" ); - master_switch waittill( "rotatedone" ); - level.power_event_in_progress = 1; - level thread power_event_rumble_and_quake(); - flag_clear( "switches_on" ); - level waittill( "power_event_complete" ); - clientnotify( "pwo" ); - flag_clear( "power_on" ); - level.power_event_in_progress = 0; - level.power_cycled = 1; - if ( isDefined( user ) ) - { - user maps/mp/zombies/_zm_stats::increment_client_stat( "power_turnedoff", 0 ); - user maps/mp/zombies/_zm_stats::increment_player_stat( "power_turnedoff" ); - } - } -} - -vsmgr_lerp_power_up_down( player, opt_param_1, opt_param_2 ) -{ - self vsmgr_set_state_active( player, opt_param_1 ); -} - -power_event_vision_set_post_event() -{ - self endon( "end_vision_set_power" ); - level endon( "end_game" ); - self endon( "disconnect" ); - if ( flag( "power_on" ) ) - { - return; - } - level waittill( "power_event_complete" ); - maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_power_high_low", self, 0 ); -} - -power_event_vision_set() -{ - self endon( "end_vision_set_power" ); - level endon( "end_game" ); - level endon( "power_event_complete" ); - self endon( "disconnect" ); - if ( flag( "power_on" ) ) - { - return; - } - duration = 2; - startgoal = 1; - endgoal = 0; - self power_event_vision_set_lerp( duration, startgoal, endgoal ); - while ( 1 ) - { - if ( randomint( 100 ) > 50 ) - { - duration = randomintrange( 2, 6 ) / 5; - startgoal = endgoal; - if ( startgoal > 0,6 ) - { - endgoal = randomfloatrange( 0, 0,5 ); - } - else - { - endgoal = 1; - } - self power_event_vision_set_lerp( duration, startgoal, endgoal ); - } - else if ( randomint( 100 ) > 75 ) - { - x = 2; - while ( x > 0 ) - { - duration = 0,2; - startgoal = endgoal; - if ( startgoal > 0,6 ) - { - endgoal = 0; - } - else - { - endgoal = 1; - } - self power_event_vision_set_lerp( duration, startgoal, endgoal ); - x--; - - } - } - else duration = 0,4; - startgoal = endgoal; - if ( startgoal > 0,6 ) - { - endgoal = randomfloatrange( 0, 0,5 ); - } - else - { - endgoal = randomfloatrange( 0,5, 1 ); - } - self power_event_vision_set_lerp( duration, startgoal, endgoal ); - wait 0,05; - } -} - -power_event_vision_set_lerp( duration, startgoal, endgoal ) -{ - self endon( "end_vision_set_power" ); - level endon( "end_game" ); - level endon( "power_event_complete" ); - self endon( "disconnect" ); - incs = int( duration / 0,05 ); - if ( incs == 0 ) - { - incs = 1; - } - incsgoal = ( endgoal - startgoal ) / incs; - currentgoal = startgoal; - i = 0; - while ( i < incs ) - { - currentgoal += incsgoal; - maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_power_high_low", self, currentgoal ); - wait 0,05; - i++; - } - maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_power_high_low", self, endgoal ); -} - -power_event_rumble_and_quake( power_on ) -{ - level endon( "end_game" ); - while ( isDefined( level.power_event_in_progress ) && level.power_event_in_progress ) - { - players = get_players(); - _a284 = players; - _k284 = getFirstArrayKey( _a284 ); - while ( isDefined( _k284 ) ) - { - player = _a284[ _k284 ]; - if ( !is_player_valid( player ) ) - { - } - else if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) || player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_pcr", 1 ) ) - { - if ( isDefined( player.power_rumble_active ) && !player.power_rumble_active ) - { - player thread power_event_rumble_and_quake_player(); - } - } - else - { - if ( isDefined( player.power_rumble_active ) && player.power_rumble_active ) - { - player setclientfieldtoplayer( "power_rumble", 0 ); - player.power_rumble_active = 0; - } - } - _k284 = getNextArrayKey( _a284, _k284 ); - } - wait 1; - } - players = get_players(); - _a311 = players; - _k311 = getFirstArrayKey( _a311 ); - while ( isDefined( _k311 ) ) - { - player = _a311[ _k311 ]; - player setclientfieldtoplayer( "power_rumble", 0 ); - player notify( "end_vision_set_power" ); - maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_power_high_low", player ); - _k311 = getNextArrayKey( _a311, _k311 ); - } -} - -power_event_rumble_and_quake_player() -{ - self endon( "disconnect" ); - self.power_rumble_active = 1; - self setclientfieldtoplayer( "power_rumble", 1 ); - self thread power_event_vision_set(); - self thread power_event_vision_set_post_event(); - while ( !self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) && self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_pcr", 1 ) && isDefined( level.power_event_in_progress ) && level.power_event_in_progress ) - { - wait 1; - } - self.power_rumble_active = 0; - self notify( "end_vision_set_power" ); - self setclientfieldtoplayer( "power_rumble", 0 ); -} - -avogadroreleasefromchamberevent() -{ - exploder( 500 ); - level.zones[ "zone_prr" ].is_spawning_allowed = 0; - level.zones[ "zone_pcr" ].is_spawning_allowed = 0; - level thread killzombiesinpowerstation(); - while ( !flag( "power_on" ) ) - { - waittime = randomfloatrange( 1,5, 4,5 ); - players = get_players(); - _a354 = players; - _k354 = getFirstArrayKey( _a354 ); - while ( isDefined( _k354 ) ) - { - player = _a354[ _k354 ]; - if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) ) - { - player setelectrified( waittime - 1 ); - player shellshock( "electrocution", waittime ); - wait 0,05; - } - _k354 = getNextArrayKey( _a354, _k354 ); - } - waittime += 1,5; - level waittill_notify_or_timeout( "power_on", waittime ); - } - players = get_players(); - _a372 = players; - _k372 = getFirstArrayKey( _a372 ); - while ( isDefined( _k372 ) ) - { - player = _a372[ _k372 ]; - if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) ) - { - player setelectrified( 0,25 ); - player shellshock( "electrocution", 1,5 ); - wait 0,05; - } - _k372 = getNextArrayKey( _a372, _k372 ); - } - level.zones[ "zone_prr" ].is_spawning_allowed = 1; - level.zones[ "zone_pcr" ].is_spawning_allowed = 1; - stop_exploder( 500 ); -} - -killzombiesinpowerstation() -{ - level endon( "power_on" ); - radiussq = 122500; - while ( 1 ) - { - zombies = getaiarray( level.zombie_team ); - _a401 = zombies; - _k401 = getFirstArrayKey( _a401 ); - while ( isDefined( _k401 ) ) - { - zombie = _a401[ _k401 ]; - if ( !isDefined( zombie ) ) - { - } - else if ( isDefined( zombie.is_avogadro ) && zombie.is_avogadro ) - { - } - else - { - if ( distancesquared( ( 11344, 7590, -729 ), zombie.origin ) < radiussq ) - { - break; - } - else - { - if ( isDefined( zombie ) || zombie maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) && isDefined( zombie.zone_name ) && zombie.zone_name == "zone_prr" ) - { - if ( isDefined( zombie.has_been_damaged_by_player ) && !zombie.has_been_damaged_by_player ) - { - level.zombie_total++; - } - zombie dodamage( zombie.health + 100, zombie.origin ); - wait randomfloatrange( 0,05, 0,15 ); - } - } - } - _k401 = getNextArrayKey( _a401, _k401 ); - } - wait 1; - } -} - -wait_for_power() -{ - while ( 1 ) - { - flag_wait( "power_on" ); - maps/mp/zombies/_zm_perks::perk_unpause_all_perks(); - wait_network_frame(); - level setclientfield( "zombie_power_on", 1 ); - enable_morse_code(); - raisepowerplantgates(); - flag_waitopen( "power_on" ); - level setclientfield( "zombie_power_on", 0 ); - disable_morse_code(); - } -} - -raisepowerplantgates() -{ - gate1 = []; - gate2 = []; - gate1 = getentarray( "security_booth_gate", "targetname" ); - gate2 = getentarray( "security_booth_gate_2", "targetname" ); - while ( isDefined( gate1 ) ) - { - i = 0; - while ( i < gate1.size ) - { - gate1[ i ] thread raisegate( -90 ); - i++; - } - } - while ( isDefined( gate2 ) ) - { - i = 0; - while ( i < gate2.size ) - { - gate2[ i ] thread raisegate( 90 ); - i++; - } - } - level.the_bus notify( "OnPowerOn" ); -} - -raisegate( degrees ) -{ - self rotatepitch( degrees, 4 ); -} - -powerevent() -{ - reactor_core_mover = getent( "core_mover", "targetname" ); - reactor_core_audio = spawn( "script_origin", reactor_core_mover.origin ); - if ( !isDefined( reactor_core_mover ) ) - { - return; - } - thread blockstairs(); - thread linkentitiestocoremover( reactor_core_mover ); - while ( 1 ) - { - flag_wait( "switches_on" ); - thread dropreactordoors(); - thread raisereactordoors(); - power_event_time = 30; - reactor_core_mover playsound( "zmb_power_rise_start" ); - reactor_core_mover playloopsound( "zmb_power_rise_loop", 0,75 ); - reactor_core_mover thread coremove( power_event_time ); - if ( isDefined( level.avogadro ) && isDefined( level.avogadro.state ) && level.avogadro.state == "chamber" ) - { - level thread avogadroreleasefromchamberevent(); - } - wait power_event_time; - reactor_core_mover stoploopsound( 0,5 ); - reactor_core_audio playloopsound( "zmb_power_on_loop", 2 ); - reactor_core_mover playsound( "zmb_power_rise_stop" ); - level notify( "power_event_complete" ); - flag_waitopen( "switches_on" ); - thread dropreactordoors(); - thread raisereactordoors(); - playsoundatposition( "zmb_power_off_quad", ( 0, 0, 0 ) ); - reactor_core_mover playsound( "zmb_power_rise_start" ); - reactor_core_mover playloopsound( "zmb_power_rise_loop", 0,75 ); - reactor_core_mover thread coremove( power_event_time, 1 ); - wait power_event_time; - reactor_core_mover stoploopsound( 0,5 ); - reactor_core_audio stoploopsound( 0,5 ); - reactor_core_mover playsound( "zmb_power_rise_stop" ); - level notify( "power_event_complete" ); - } -} - -corerotate( time ) -{ - self rotateyaw( 180, time ); -} - -coremove( time, down ) -{ - if ( isDefined( down ) && down ) - { - self movez( -160, time ); - } - else - { - self movez( 160, time ); - } -} - -blockstairs() -{ - stairs_blocker = getent( "reactor_core_stairs_blocker", "targetname" ); - if ( !isDefined( stairs_blocker ) ) - { - return; - } - stairs_blocker movez( -128, 1 ); -} - -linkentitiestocoremover( reactor_core_mover ) -{ - core_entities = getentarray( "core_entity", "script_noteworthy" ); - i = 0; - while ( i < core_entities.size ) - { - next_ent = core_entities[ i ]; - if ( next_ent.classname == "trigger_use_touch" ) - { - next_ent enablelinkto(); - } - next_ent linkto( reactor_core_mover, "tag_origin" ); - i++; - } -} - -dropreactordoors() -{ - doors = getentarray( "reactor_core_door", "targetname" ); - if ( doors.size == 0 ) - { - return; - } - i = 0; - while ( i < doors.size ) - { - next_door = doors[ i ]; - next_door movez( -128, 1 ); - next_door disconnectpaths(); - i++; - } -} - -raisereactordoors() -{ - level waittill( "power_event_complete" ); - doors = getentarray( "reactor_core_door", "targetname" ); - if ( doors.size == 0 ) - { - return; - } - i = 0; - while ( i < doors.size ) - { - next_door = doors[ i ]; - next_door movez( 128, 1 ); - next_door connectpaths(); - i++; - } -} - -avogadro_show_vox( user ) -{ - wait 1; - if ( isDefined( user ) ) - { - user thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "power", "power_on" ); - } - wait 8; - players = get_players(); - players = array_randomize( players ); - _a655 = players; - _k655 = getFirstArrayKey( _a655 ); - while ( isDefined( _k655 ) ) - { - player = _a655[ _k655 ]; - if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) || player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_pcr", 1 ) ) - { - player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "power", "power_core" ); - break; - } - else - { - _k655 = getNextArrayKey( _a655, _k655 ); - } - } - wait 15; - players = get_players(); - players = array_randomize( players ); - _a668 = players; - _k668 = getFirstArrayKey( _a668 ); - while ( isDefined( _k668 ) ) - { - player = _a668[ _k668 ]; - if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) || player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_pcr", 1 ) ) - { - player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "avogadro_reveal" ); - return; - } - else - { - _k668 = getNextArrayKey( _a668, _k668 ); - } - } -} - -bus_station_pa_vox() -{ - level endon( "power_off" ); - while ( 1 ) - { - level.station_pa_vox = array_randomize( level.station_pa_vox ); - _a686 = level.station_pa_vox; - _k686 = getFirstArrayKey( _a686 ); - while ( isDefined( _k686 ) ) - { - line = _a686[ _k686 ]; - playsoundatposition( line, ( -6848, 5056, 56 ) ); - wait randomintrange( 12, 15 ); - _k686 = getNextArrayKey( _a686, _k686 ); - } - wait 1; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_turned_diner.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_turned_diner.gsc deleted file mode 100644 index 6bbc7c1..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_turned_diner.gsc +++ /dev/null @@ -1,63 +0,0 @@ -#include maps/mp/gametypes_zm/zcleansed; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -precache() -{ -} - -main() -{ - getspawnpoints(); - maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "diner" ); - if ( getDvar( "ui_gametype" ) == "zcleansed" ) - { - maps/mp/zombies/_zm_game_module::set_current_game_module( level.game_module_cleansed_index ); - } - else - { - maps/mp/zombies/_zm_game_module::set_current_game_module( level.game_module_turned_index ); - } - setdvar( "aim_target_player_enabled", 1 ); - diner_front_door = getentarray( "auto2278", "targetname" ); - array_thread( diner_front_door, ::self_delete ); - diner_side_door = getentarray( "auto2278", "targetname" ); - array_thread( diner_side_door, ::self_delete ); - garage_all_door = getentarray( "auto2279", "targetname" ); - array_thread( garage_all_door, ::self_delete ); - level.cleansed_loadout = getgametypesetting( "cleansedLoadout" ); - if ( level.cleansed_loadout ) - { - level.humanify_custom_loadout = ::maps/mp/gametypes_zm/zcleansed::gunprogressionthink; - level.cleansed_zombie_round = 5; - } - else - { - level.humanify_custom_loadout = ::maps/mp/gametypes_zm/zcleansed::shotgunloadout; - level.cleansed_zombie_round = 2; - } - collision = spawn( "script_model", ( -5000, -6700, 0 ), 1 ); - collision setmodel( "zm_collision_transit_diner_survival" ); - collision disconnectpaths(); -} - -getspawnpoints() -{ - level._turned_zombie_respawnpoints = getstructarray( "initial_spawn_points", "targetname" ); - level._turned_powerup_spawnpoints = []; - level._turned_powerup_spawnpoints[ 0 ] = spawnstruct(); - level._turned_powerup_spawnpoints[ 0 ].origin = ( -6072, -7808, 8 ); - level._turned_powerup_spawnpoints[ 1 ] = spawnstruct(); - level._turned_powerup_spawnpoints[ 1 ].origin = ( -5408, -6824, -53,5431 ); - level._turned_powerup_spawnpoints[ 2 ] = spawnstruct(); - level._turned_powerup_spawnpoints[ 2 ].origin = ( -4760, -7144, -64 ); - level._turned_powerup_spawnpoints[ 3 ] = spawnstruct(); - level._turned_powerup_spawnpoints[ 3 ].origin = ( -4864, -7864, -62,35 ); -} - -onendgame() -{ -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_utility.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_utility.gsc deleted file mode 100644 index b14d3d6..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zm_transit_utility.gsc +++ /dev/null @@ -1,613 +0,0 @@ -#include maps/mp/_compass; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -playercanafford( player, cost ) -{ - if ( !player usebuttonpressed() ) - { - return 0; - } - if ( player in_revive_trigger() ) - { - return 0; - } - if ( isDefined( cost ) ) - { - if ( player.score < cost ) - { - return 0; - } - player maps/mp/zombies/_zm_score::minus_to_player_score( cost ); - } - return 1; -} - -setinvisibletoall() -{ - players = get_players(); - playerindex = 0; - while ( playerindex < players.size ) - { - self setinvisibletoplayer( players[ playerindex ] ); - playerindex++; - } -} - -spawnandlinkfxtotag( effect, ent, tag ) -{ - fxent = spawn( "script_model", ent gettagorigin( tag ) ); - fxent setmodel( "tag_origin" ); - fxent linkto( ent, tag ); - wait_network_frame(); - playfxontag( effect, fxent, "tag_origin" ); - return fxent; -} - -spawnandlinkfxtooffset( effect, ent, offsetorigin, offsetangles ) -{ - fxent = spawn( "script_model", ( 0, 0, 0 ) ); - fxent setmodel( "tag_origin" ); - fxent linkto( ent, "", offsetorigin, offsetangles ); - wait_network_frame(); - playfxontag( effect, fxent, "tag_origin" ); - return fxent; -} - -custom_weapon_wall_prices() -{ - if ( !isDefined( level.zombie_include_weapons ) ) - { - return; - } - weapon_spawns = []; - weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); - i = 0; - while ( i < weapon_spawns.size ) - { - if ( !isDefined( level.zombie_weapons[ weapon_spawns[ i ].zombie_weapon_upgrade ] ) ) - { - i++; - continue; - } - else - { - if ( isDefined( weapon_spawns[ i ].script_int ) ) - { - cost = weapon_spawns[ i ].script_int; - level.zombie_weapons[ weapon_spawns[ i ].zombie_weapon_upgrade ].cost = cost; - } - } - i++; - } -} - -pause_zombie_spawning() -{ - if ( !isDefined( level.spawnpausecount ) ) - { - level.spawnpausecount = 0; - } - level.spawnpausecount++; - flag_clear( "spawn_zombies" ); -} - -try_resume_zombie_spawning() -{ - if ( !isDefined( level.spawnpausecount ) ) - { - level.spawnpausecount = 0; - } - level.spawnpausecount--; - - if ( level.spawnpausecount <= 0 ) - { - level.spawnpausecount = 0; - flag_set( "spawn_zombies" ); - } -} - -triggerweaponslockerwatch() -{ - unitrigger_stub = spawnstruct(); - unitrigger_stub.origin = ( 8236, -6844, 144 ); - unitrigger_stub.angles = vectorScale( ( 0, 0, 0 ), 30 ); - unitrigger_stub.script_length = 16; - unitrigger_stub.script_width = 32; - unitrigger_stub.script_height = 64; - unitrigger_stub.origin -= anglesToRight( unitrigger_stub.angles ) * ( unitrigger_stub.script_length / 2 ); - unitrigger_stub.targetname = "weapon_locker"; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.clientfieldname = "weapon_locker"; - maps/mp/zombies/_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - unitrigger_stub.prompt_and_visibility_func = ::triggerweaponslockerthinkupdateprompt; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::triggerweaponslockerthink ); -} - -triggerweaponslockerisvalidweapon( weaponname ) -{ - if ( is_offhand_weapon( weaponname ) || is_limited_weapon( weaponname ) ) - { - return 0; - } - return 1; -} - -triggerweaponslockerisvalidweaponpromptupdate( player, weaponname ) -{ - retrievingweapon = player maps/mp/zombies/_zm_stats::has_stored_weapondata(); - if ( !sessionmodeisonlinegame() ) - { - if ( isDefined( player.stored_weapon_data ) ) - { - retrievingweapon = 1; - } - } - if ( !retrievingweapon ) - { - if ( !triggerweaponslockerisvalidweapon( weaponname ) ) - { - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); - } - else - { - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_STORE" ); - } - } - else - { - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" ); - } -} - -triggerweaponslockerthinkupdateprompt( player ) -{ - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - return 1; -} - -triggerweaponslockerthink() -{ - self.parent_player thread triggerweaponslockerweaponchangethink( self ); - online_game = sessionmodeisonlinegame(); - while ( 1 ) - { - self waittill( "trigger", player ); - retrievingweapon = player maps/mp/zombies/_zm_stats::has_stored_weapondata(); - if ( !online_game ) - { - if ( isDefined( player.stored_weapon_data ) ) - { - retrievingweapon = 1; - } - } - if ( !retrievingweapon ) - { - curweapon = player getcurrentweapon(); - curweapon = player maps/mp/zombies/_zm_weapons::switch_from_alt_weapon( curweapon ); - while ( !triggerweaponslockerisvalidweapon( curweapon ) ) - { - continue; - } - weapondata = player maps/mp/zombies/_zm_weapons::get_player_weapondata( player ); - player maps/mp/zombies/_zm_stats::set_stored_weapondata( weapondata ); - if ( !online_game ) - { - player.stored_weapon_data = weapondata; - } -/# - assert( curweapon == weapondata[ "name" ], "weapon data does not match" ); -#/ - player takeweapon( curweapon ); - primaries = player getweaponslistprimaries(); - if ( isDefined( primaries[ 0 ] ) ) - { - player switchtoweapon( primaries[ 0 ] ); - } - else - { - player maps/mp/zombies/_zm_weapons::give_fallback_weapon(); - } - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" ); - player playsoundtoplayer( "evt_fridge_locker_close", player ); - } - else - { - curweapon = player getcurrentweapon(); - primaries = player getweaponslistprimaries(); - weapondata = player maps/mp/zombies/_zm_stats::get_stored_weapondata(); - weapontogive = player maps/mp/zombies/_zm_stats::get_map_weaponlocker_stat( "name" ); - if ( !online_game ) - { - if ( isDefined( player.stored_weapon_data ) ) - { - weapondata = player.stored_weapon_data; - weapontogive = weapondata[ "name" ]; - } - } - curweap_base = maps/mp/zombies/_zm_weapons::get_base_weapon_name( curweapon, 1 ); - weap_base = maps/mp/zombies/_zm_weapons::get_base_weapon_name( weapontogive, 1 ); - while ( player has_weapon_or_upgrade( weap_base ) && weap_base != curweap_base ) - { - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); - wait 3; - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" ); - } - if ( isDefined( player.weaponplusperkon ) && player.weaponplusperkon ) - { - maxweapons = 3; - } - else - { - maxweapons = 2; - } - if ( isDefined( primaries ) || primaries.size >= maxweapons && weapontogive == curweapon ) - { - curweapon = player maps/mp/zombies/_zm_weapons::switch_from_alt_weapon( curweapon ); - while ( !triggerweaponslockerisvalidweapon( curweapon ) ) - { - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); - wait 3; - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" ); - } - curweapondata = player maps/mp/zombies/_zm_weapons::get_player_weapondata( player ); - player takeweapon( curweapondata[ "name" ] ); - player maps/mp/zombies/_zm_weapons::weapondata_give( weapondata ); - player maps/mp/zombies/_zm_stats::clear_stored_weapondata(); - player maps/mp/zombies/_zm_stats::set_stored_weapondata( curweapondata ); - if ( !online_game ) - { - player.stored_weapon_data = curweapondata; - } - player switchtoweapon( weapondata[ "name" ] ); - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" ); - } - else - { - player maps/mp/zombies/_zm_stats::clear_stored_weapondata(); - if ( !online_game ) - { - player.stored_weapon_data = undefined; - } - player maps/mp/zombies/_zm_weapons::weapondata_give( weapondata ); - player switchtoweapon( weapondata[ "name" ] ); - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_STORE" ); - } - player playsoundtoplayer( "evt_fridge_locker_open", player ); - } - wait 0,5; - } -} - -oldtriggerweaponslockerthink() -{ - self.parent_player thread triggerweaponslockerweaponchangethink( self ); - while ( 1 ) - { - self waittill( "trigger", who ); - curweapon = who getcurrentweapon(); - weapontogive = who maps/mp/zombies/_zm_stats::get_map_weaponlocker_stat( "name" ); - clipammotogive = who maps/mp/zombies/_zm_stats::get_map_weaponlocker_stat( "clip" ); - lh_clipammotogive = who maps/mp/zombies/_zm_stats::get_map_weaponlocker_stat( "lh_clip" ); - stockammotogive = who maps/mp/zombies/_zm_stats::get_map_weaponlocker_stat( "stock" ); - retrievingweapon = 1; - if ( isstring( weapontogive ) || weapontogive == "" && isint( weapontogive ) && weapontogive == 0 ) - { - retrievingweapon = 0; - } - if ( !retrievingweapon && !triggerweaponslockerisvalidweapon( curweapon ) ) - { - continue; - } - juststoredweapon = 0; - if ( !retrievingweapon ) - { - weapontogive = undefined; - clipammotogive = undefined; - lh_clipammotogive = undefined; - stockammotogive = undefined; - } - primaries = who getweaponslistprimaries(); - if ( isDefined( who.weaponplusperkon ) && who.weaponplusperkon ) - { - maxweapons = 3; - } - else - { - maxweapons = 2; - } - haswallweapon = undefined; - if ( maps/mp/zombies/_zm_weapons::is_weapon_upgraded( weapontogive ) ) - { - if ( isDefined( weapontogive ) ) - { - haswallweapon = who maps/mp/zombies/_zm_weapons::has_weapon_or_upgrade( maps/mp/zombies/_zm_weapons::get_base_weapon_name( weapontogive ) ); - } - } - else - { - if ( isDefined( weapontogive ) ) - { - haswallweapon = who maps/mp/zombies/_zm_weapons::has_weapon_or_upgrade( weapontogive ); - } - } - if ( haswallweapon || isDefined( primaries ) && primaries.size < maxweapons ) - { - storedweapon = undefined; - storedammoclip = undefined; - storedammolhclip = undefined; - storedammostock = undefined; - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_STORE" ); - who playsoundtoplayer( "evt_fridge_locker_open", who ); - } - else - { - storedweapon = who getcurrentweapon(); - dual_wield_name = weapondualwieldweaponname( storedweapon ); - juststoredweapon = 1; - who maps/mp/zombies/_zm_stats::set_map_weaponlocker_stat( "name", storedweapon ); - who maps/mp/zombies/_zm_stats::set_map_weaponlocker_stat( "clip", who getweaponammoclip( storedweapon ) ); - if ( dual_wield_name != "none" ) - { - who maps/mp/zombies/_zm_stats::set_map_weaponlocker_stat( "lh_clip", who getweaponammoclip( weapondualwieldweaponname( storedweapon ) ) ); - } - else - { - who maps/mp/zombies/_zm_stats::set_map_weaponlocker_stat( "lh_clip", 0 ); - } - who maps/mp/zombies/_zm_stats::set_map_weaponlocker_stat( "stock", who getweaponammostock( storedweapon ) ); - who takeweapon( storedweapon ); - if ( !isDefined( weapontogive ) ) - { - primaries = who getweaponslistprimaries(); - who switchtoweapon( primaries[ 0 ] ); - } - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" ); - who playsoundtoplayer( "evt_fridge_locker_close", who ); - } - if ( isDefined( weapontogive ) ) - { - dual_wield_name = weapondualwieldweaponname( weapontogive ); - if ( haswallweapon ) - { - curretclipammo = who getweaponammoclip( weapontogive ); - if ( isDefined( curretclipammo ) ) - { - stockammotogive += curretclipammo; - } - curretstockammo = who getweaponammostock( weapontogive ); - if ( isDefined( curretstockammo ) ) - { - stockammotogive += curretstockammo; - } - who setweaponammostock( weapontogive, stockammotogive ); - } - else - { - who giveweapon( weapontogive, 0 ); - who setweaponammoclip( weapontogive, clipammotogive ); - if ( dual_wield_name != "none" ) - { - who setweaponammoclip( weapondualwieldweaponname( weapontogive ), lh_clipammotogive ); - } - who setweaponammostock( weapontogive, stockammotogive ); - who switchtoweapon( weapontogive ); - who playsoundtoplayer( "evt_fridge_locker_open", who ); - if ( !is_offhand_weapon( weapontogive ) ) - { - who maps/mp/zombies/_zm_weapons::take_fallback_weapon(); - } - } - if ( !is_true( juststoredweapon ) ) - { - who maps/mp/zombies/_zm_stats::set_map_weaponlocker_stat( "name", "" ); - who maps/mp/zombies/_zm_stats::set_map_weaponlocker_stat( "clip", 0 ); - who maps/mp/zombies/_zm_stats::set_map_weaponlocker_stat( "lh_clip", 0 ); - who maps/mp/zombies/_zm_stats::set_map_weaponlocker_stat( "stock", 0 ); - } - } - else - { - primaries = who getweaponslistprimaries(); - if ( primaries.size > 0 ) - { - who switchtoweapon( primaries[ 0 ] ); - } - } - wait 0,5; - } -} - -triggerweaponslockerweaponchangethink( trigger ) -{ - self endon( "disconnect" ); - self endon( "death" ); - trigger endon( "kill_trigger" ); - while ( 1 ) - { - self waittill( "weapon_change", newweapon ); - trigger triggerweaponslockerisvalidweaponpromptupdate( self, newweapon ); - } -} - -automatonspeak( category, type, response, force_variant, override ) -{ - if ( isDefined( level.automaton ) && !is_true( level.automaton.disabled_by_emp ) ) - { -/# - if ( getDvar( #"6DF184E8" ) == "" ) - { - iprintlnbold( "Automaton VO: " + type ); -#/ - } - if ( type != "leaving" && type != "leaving_warning" ) - { - level.automaton notify( "want_to_be_speaking" ); - level.automaton waittill( "startspeaking" ); - } - level.automaton maps/mp/zombies/_zm_audio::create_and_play_dialog( category, type, response, force_variant, override ); - } -} - -is_thedouche() -{ - return self.characterindex == 0; -} - -is_theconspiracytheorist() -{ - return self.characterindex == 1; -} - -is_thefarmersdaughter() -{ - return self.characterindex == 2; -} - -is_theelectricalengineer() -{ - return self.characterindex == 3; -} - -get_random_encounter_match( location ) -{ - match_pool = []; -/# - assert( match_pool.size > 0, "Could not find a random encounters match for " + location ); -#/ - return random( match_pool ); -} - -transit_breakable_glass_init() -{ - glass = getentarray( "transit_glass", "targetname" ); - if ( level.splitscreen && getDvarInt( "splitscreen_playerCount" ) > 2 ) - { - array_delete( glass ); - return; - } - array_thread( glass, ::transit_breakable_glass ); -} - -transit_breakable_glass() -{ - level endon( "intermission" ); - self.health = 99999; - self setcandamage( 1 ); - self.damage_state = 0; - while ( 1 ) - { - self waittill( "damage", amount, attacker, direction, point, dmg_type ); - if ( isplayer( attacker ) ) - { - if ( self.damage_state == 0 ) - { - self glass_gets_destroyed(); - self.damage_state = 1; - self playsound( "fly_glass_break" ); - } - } - } -} - -glass_gets_destroyed() -{ - if ( isDefined( level._effect[ "glass_impact" ] ) ) - { - playfx( level._effect[ "glass_impact" ], self.origin, anglesToForward( self.angles ) ); - } - wait 0,1; - if ( isDefined( self.model ) && self.damage_state == 0 ) - { - self setmodel( self.model + "_broken" ); - self.damage_state = 1; - return; - } - else - { - self delete(); - return; - } -} - -solo_tombstone_removal() -{ - if ( getnumexpectedplayers() > 1 ) - { - return; - } - level notify( "tombstone_removed" ); - level thread maps/mp/zombies/_zm_perks::perk_machine_removal( "specialty_scavenger" ); -} - -sparking_power_lines() -{ - lines = getentarray( "power_line_sparking", "targetname" ); -} - -disconnect_door_zones( zone_a, zone_b, flag_name ) -{ - level endon( "intermission" ); - level endon( "end_game" ); - while ( 1 ) - { - flag_wait( flag_name ); - azone = level.zones[ zone_a ].adjacent_zones[ zone_b ]; - azone maps/mp/zombies/_zm_zonemgr::door_close_disconnect( flag_name ); - } -} - -enable_morse_code() -{ - level clientnotify( "mc1" ); -} - -disable_morse_code() -{ - level clientnotify( "mc0" ); -} - -transit_pathnode_spawning() -{ - precachemodel( "collision_wall_128x128x10_standard" ); - precachemodel( "collision_wall_256x256x10_standard" ); - precachemodel( "collision_clip_64x64x256" ); - minimap_upperl = spawn( "script_origin", ( -12248, 9496, 552 ) ); - minimap_upperl.targetname = "minimap_corner"; - minimap_lowerr = spawn( "script_origin", ( 14472, -8496, -776 ) ); - minimap_lowerr.targetname = "minimap_corner"; - maps/mp/_compass::setupminimap( "compass_map_zm_transit" ); - flag_wait( "start_zombie_round_logic" ); - collision1 = spawn( "script_model", ( 2273, -126, 143 ) ); - collision1 setmodel( "collision_wall_128x128x10_standard" ); - collision1.angles = ( 0, 0, 0 ); - collision1 ghost(); - collision2 = spawn( "script_model", ( 2096, -126, 143 ) ); - collision2 setmodel( "collision_wall_128x128x10_standard" ); - collision2.angles = ( 0, 0, 0 ); - collision2 ghost(); - collision3 = spawn( "script_model", ( 1959, -126, 143 ) ); - collision3 setmodel( "collision_wall_128x128x10_standard" ); - collision3.angles = ( 0, 0, 0 ); - collision3 ghost(); - collision4 = spawn( "script_model", ( 12239, 8509, -688 ) ); - collision4 setmodel( "collision_wall_128x128x10_standard" ); - collision4.angles = ( 0, 0, 0 ); - collision4 ghost(); - collision5 = spawn( "script_model", ( 8320, -6679, 362 ) ); - collision5 setmodel( "collision_wall_256x256x10_standard" ); - collision5.angles = vectorScale( ( 0, 0, 0 ), 300 ); - collision5 ghost(); - collision5 = spawn( "script_model", ( 10068, 7272, -67 ) ); - collision5 setmodel( "collision_clip_64x64x256" ); - collision5.angles = ( 0, 0, 0 ); - collision5 ghost(); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_load.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_load.gsc deleted file mode 100644 index 95c5ec5..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_load.gsc +++ /dev/null @@ -1,506 +0,0 @@ -#include maps/mp/gametypes_zm/_spawnlogic; -#include maps/mp/animscripts/traverse/shared; -#include maps/mp/animscripts/utility; -#include maps/mp/zombies/_load; -#include maps/mp/_createfx; -#include maps/mp/_music; -#include maps/mp/_busing; -#include maps/mp/_script_gen; -#include maps/mp/_utility; -#include common_scripts/utility; - -main( bscriptgened, bcsvgened, bsgenabled ) -{ - if ( !isDefined( level.script_gen_dump_reasons ) ) - { - level.script_gen_dump_reasons = []; - } - if ( !isDefined( bsgenabled ) ) - { - level.script_gen_dump_reasons[ level.script_gen_dump_reasons.size ] = "First run"; - } - if ( !isDefined( bcsvgened ) ) - { - bcsvgened = 0; - } - level.bcsvgened = bcsvgened; - if ( !isDefined( bscriptgened ) ) - { - bscriptgened = 0; - } - else - { - bscriptgened = 1; - } - level.bscriptgened = bscriptgened; - level._loadstarted = 1; - struct_class_init(); - level.clientscripts = getDvar( "cg_usingClientScripts" ) != ""; - level._client_exploders = []; - level._client_exploder_ids = []; - if ( !isDefined( level.flag ) ) - { - level.flag = []; - level.flags_lock = []; - } - if ( !isDefined( level.timeofday ) ) - { - level.timeofday = "day"; - } - flag_init( "scriptgen_done" ); - level.script_gen_dump_reasons = []; - if ( !isDefined( level.script_gen_dump ) ) - { - level.script_gen_dump = []; - level.script_gen_dump_reasons[ 0 ] = "First run"; - } - if ( !isDefined( level.script_gen_dump2 ) ) - { - level.script_gen_dump2 = []; - } - if ( isDefined( level.createfxent ) && isDefined( level.script ) ) - { - script_gen_dump_addline( "maps\\mp\\createfx\\" + level.script + "_fx::main();", level.script + "_fx" ); - } - while ( isDefined( level.script_gen_dump_preload ) ) - { - i = 0; - while ( i < level.script_gen_dump_preload.size ) - { - script_gen_dump_addline( level.script_gen_dump_preload[ i ].string, level.script_gen_dump_preload[ i ].signature ); - i++; - } - } - if ( getDvar( "scr_RequiredMapAspectratio" ) == "" ) - { - setdvar( "scr_RequiredMapAspectratio", "1" ); - } - setdvar( "r_waterFogTest", 0 ); - precacherumble( "reload_small" ); - precacherumble( "reload_medium" ); - precacherumble( "reload_large" ); - precacherumble( "reload_clipin" ); - precacherumble( "reload_clipout" ); - precacherumble( "reload_rechamber" ); - precacherumble( "pullout_small" ); - precacherumble( "buzz_high" ); - precacherumble( "riotshield_impact" ); - registerclientsys( "levelNotify" ); - level.aitriggerspawnflags = getaitriggerflags(); - level.vehicletriggerspawnflags = getvehicletriggerflags(); - level.physicstracemaskphysics = 1; - level.physicstracemaskvehicle = 2; - level.physicstracemaskwater = 4; - level.createfx_enabled = getDvar( "createfx" ) != ""; - level thread start_intro_screen_zm(); - thread maps/mp/_interactive_objects::init(); - maps/mp/_audio::init(); - thread maps/mp/_busing::businit(); - thread maps/mp/_music::music_init(); - thread maps/mp/_fxanim::init(); - thread maps/mp/_serverfaceanim_mp::init(); - if ( level.createfx_enabled ) - { - setinitialplayersconnected(); - } - visionsetnight( "default_night" ); - setup_traversals(); - maps/mp/_art::main(); - setupexploders(); - parse_structs(); - thread footsteps(); -/# - level thread level_notify_listener(); - level thread client_notify_listener(); -#/ - thread maps/mp/_createfx::fx_init(); - if ( level.createfx_enabled ) - { - calculate_map_center(); - maps/mp/_createfx::createfx(); - } - if ( getDvar( #"F7B30924" ) == "1" ) - { - maps/mp/_global_fx::main(); - level waittill( "eternity" ); - } - thread maps/mp/_global_fx::main(); - maps/mp/_demo::init(); - p = 0; - while ( p < 6 ) - { - switch( p ) - { - case 0: - triggertype = "trigger_multiple"; - break; - case 1: - triggertype = "trigger_once"; - break; - case 2: - triggertype = "trigger_use"; - break; - case 3: - triggertype = "trigger_radius"; - break; - case 4: - triggertype = "trigger_lookat"; - break; - default: -/# - assert( p == 5 ); -#/ - triggertype = "trigger_damage"; - break; - } - triggers = getentarray( triggertype, "classname" ); - i = 0; - while ( i < triggers.size ) - { - if ( isDefined( triggers[ i ].script_prefab_exploder ) ) - { - triggers[ i ].script_exploder = triggers[ i ].script_prefab_exploder; - } - if ( isDefined( triggers[ i ].script_exploder ) ) - { - level thread maps/mp/zombies/_load::exploder_load( triggers[ i ] ); - } - i++; - } - p++; - } -} - -level_notify_listener() -{ - while ( 1 ) - { - val = getDvar( "level_notify" ); - if ( val != "" ) - { - level notify( val ); - setdvar( "level_notify", "" ); - } - wait 0,2; - } -} - -client_notify_listener() -{ - while ( 1 ) - { - val = getDvar( "client_notify" ); - if ( val != "" ) - { - clientnotify( val ); - setdvar( "client_notify", "" ); - } - wait 0,2; - } -} - -footsteps() -{ - maps/mp/animscripts/utility::setfootstepeffect( "asphalt", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "brick", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "carpet", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "cloth", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "concrete", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "dirt", loadfx( "bio/player/fx_footstep_sand" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "foliage", loadfx( "bio/player/fx_footstep_sand" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "gravel", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "grass", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "metal", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "mud", loadfx( "bio/player/fx_footstep_mud" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "paper", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "plaster", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "rock", loadfx( "bio/player/fx_footstep_dust" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "sand", loadfx( "bio/player/fx_footstep_sand" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "water", loadfx( "bio/player/fx_footstep_water" ) ); - maps/mp/animscripts/utility::setfootstepeffect( "wood", loadfx( "bio/player/fx_footstep_dust" ) ); -} - -parse_structs() -{ - i = 0; - while ( i < level.struct.size ) - { - if ( isDefined( level.struct[ i ].targetname ) ) - { - if ( level.struct[ i ].targetname == "flak_fire_fx" ) - { - level._effect[ "flak20_fire_fx" ] = loadfx( "weapon/tracer/fx_tracer_flak_single_noExp" ); - level._effect[ "flak38_fire_fx" ] = loadfx( "weapon/tracer/fx_tracer_quad_20mm_Flak38_noExp" ); - level._effect[ "flak_cloudflash_night" ] = loadfx( "weapon/flak/fx_flak_cloudflash_night" ); - level._effect[ "flak_burst_single" ] = loadfx( "weapon/flak/fx_flak_single_day_dist" ); - } - if ( level.struct[ i ].targetname == "fake_fire_fx" ) - { - level._effect[ "distant_muzzleflash" ] = loadfx( "weapon/muzzleflashes/heavy" ); - } - if ( level.struct[ i ].targetname == "spotlight_fx" ) - { - level._effect[ "spotlight_beam" ] = loadfx( "env/light/fx_ray_spotlight_md" ); - } - } - i++; - } -} - -exploder_load( trigger ) -{ - level endon( "killexplodertridgers" + trigger.script_exploder ); - trigger waittill( "trigger" ); - if ( isDefined( trigger.script_chance ) && randomfloat( 1 ) > trigger.script_chance ) - { - if ( isDefined( trigger.script_delay ) ) - { - wait trigger.script_delay; - } - else - { - wait 4; - } - level thread exploder_load( trigger ); - return; - } - maps/mp/_utility::exploder( trigger.script_exploder ); - level notify( "killexplodertridgers" + trigger.script_exploder ); -} - -setupexploders() -{ - ents = getentarray( "script_brushmodel", "classname" ); - smodels = getentarray( "script_model", "classname" ); - i = 0; - while ( i < smodels.size ) - { - ents[ ents.size ] = smodels[ i ]; - i++; - } - i = 0; - while ( i < ents.size ) - { - if ( isDefined( ents[ i ].script_prefab_exploder ) ) - { - ents[ i ].script_exploder = ents[ i ].script_prefab_exploder; - } - if ( isDefined( ents[ i ].script_exploder ) ) - { - if ( ents[ i ].model == "fx" || !isDefined( ents[ i ].targetname ) && ents[ i ].targetname != "exploderchunk" ) - { - ents[ i ] hide(); - i++; - continue; - } - else - { - if ( isDefined( ents[ i ].targetname ) && ents[ i ].targetname == "exploder" ) - { - ents[ i ] hide(); - ents[ i ] notsolid(); - i++; - continue; - } - else - { - if ( isDefined( ents[ i ].targetname ) && ents[ i ].targetname == "exploderchunk" ) - { - ents[ i ] hide(); - ents[ i ] notsolid(); - } - } - } - } - i++; - } - script_exploders = []; - potentialexploders = getentarray( "script_brushmodel", "classname" ); - i = 0; - while ( i < potentialexploders.size ) - { - if ( isDefined( potentialexploders[ i ].script_prefab_exploder ) ) - { - potentialexploders[ i ].script_exploder = potentialexploders[ i ].script_prefab_exploder; - } - if ( isDefined( potentialexploders[ i ].script_exploder ) ) - { - script_exploders[ script_exploders.size ] = potentialexploders[ i ]; - } - i++; - } - potentialexploders = getentarray( "script_model", "classname" ); - i = 0; - while ( i < potentialexploders.size ) - { - if ( isDefined( potentialexploders[ i ].script_prefab_exploder ) ) - { - potentialexploders[ i ].script_exploder = potentialexploders[ i ].script_prefab_exploder; - } - if ( isDefined( potentialexploders[ i ].script_exploder ) ) - { - script_exploders[ script_exploders.size ] = potentialexploders[ i ]; - } - i++; - } - potentialexploders = getentarray( "item_health", "classname" ); - i = 0; - while ( i < potentialexploders.size ) - { - if ( isDefined( potentialexploders[ i ].script_prefab_exploder ) ) - { - potentialexploders[ i ].script_exploder = potentialexploders[ i ].script_prefab_exploder; - } - if ( isDefined( potentialexploders[ i ].script_exploder ) ) - { - script_exploders[ script_exploders.size ] = potentialexploders[ i ]; - } - i++; - } - if ( !isDefined( level.createfxent ) ) - { - level.createfxent = []; - } - acceptabletargetnames = []; - acceptabletargetnames[ "exploderchunk visible" ] = 1; - acceptabletargetnames[ "exploderchunk" ] = 1; - acceptabletargetnames[ "exploder" ] = 1; - i = 0; - while ( i < script_exploders.size ) - { - exploder = script_exploders[ i ]; - ent = createexploder( exploder.script_fxid ); - ent.v = []; - ent.v[ "origin" ] = exploder.origin; - ent.v[ "angles" ] = exploder.angles; - ent.v[ "delay" ] = exploder.script_delay; - ent.v[ "firefx" ] = exploder.script_firefx; - ent.v[ "firefxdelay" ] = exploder.script_firefxdelay; - ent.v[ "firefxsound" ] = exploder.script_firefxsound; - ent.v[ "firefxtimeout" ] = exploder.script_firefxtimeout; - ent.v[ "earthquake" ] = exploder.script_earthquake; - ent.v[ "damage" ] = exploder.script_damage; - ent.v[ "damage_radius" ] = exploder.script_radius; - ent.v[ "soundalias" ] = exploder.script_soundalias; - ent.v[ "repeat" ] = exploder.script_repeat; - ent.v[ "delay_min" ] = exploder.script_delay_min; - ent.v[ "delay_max" ] = exploder.script_delay_max; - ent.v[ "target" ] = exploder.target; - ent.v[ "ender" ] = exploder.script_ender; - ent.v[ "type" ] = "exploder"; - if ( !isDefined( exploder.script_fxid ) ) - { - ent.v[ "fxid" ] = "No FX"; - } - else - { - ent.v[ "fxid" ] = exploder.script_fxid; - } - ent.v[ "exploder" ] = exploder.script_exploder; -/# - assert( isDefined( exploder.script_exploder ), "Exploder at origin " + exploder.origin + " has no script_exploder" ); -#/ - if ( !isDefined( ent.v[ "delay" ] ) ) - { - ent.v[ "delay" ] = 0; - } - if ( isDefined( exploder.target ) ) - { - org = getent( ent.v[ "target" ], "targetname" ).origin; - ent.v[ "angles" ] = vectorToAngle( org - ent.v[ "origin" ] ); - } - if ( exploder.classname == "script_brushmodel" || isDefined( exploder.model ) ) - { - ent.model = exploder; - ent.model.disconnect_paths = exploder.script_disconnectpaths; - } - if ( isDefined( exploder.targetname ) && isDefined( acceptabletargetnames[ exploder.targetname ] ) ) - { - ent.v[ "exploder_type" ] = exploder.targetname; - } - else - { - ent.v[ "exploder_type" ] = "normal"; - } - ent maps/mp/_createfx::post_entity_creation_function(); - i++; - } - level.createfxexploders = []; - i = 0; - while ( i < level.createfxent.size ) - { - ent = level.createfxent[ i ]; - if ( ent.v[ "type" ] != "exploder" ) - { - i++; - continue; - } - else - { - ent.v[ "exploder_id" ] = getexploderid( ent ); - if ( !isDefined( level.createfxexploders[ ent.v[ "exploder" ] ] ) ) - { - level.createfxexploders[ ent.v[ "exploder" ] ] = []; - } - level.createfxexploders[ ent.v[ "exploder" ] ][ level.createfxexploders[ ent.v[ "exploder" ] ].size ] = ent; - } - i++; - } -} - -setup_traversals() -{ - potential_traverse_nodes = getallnodes(); - i = 0; - while ( i < potential_traverse_nodes.size ) - { - node = potential_traverse_nodes[ i ]; - if ( node.type == "Begin" ) - { - node maps/mp/animscripts/traverse/shared::init_traverse(); - } - i++; - } -} - -calculate_map_center() -{ - if ( !isDefined( level.mapcenter ) ) - { - level.nodesmins = ( 0, 0, 0 ); - level.nodesmaxs = ( 0, 0, 0 ); - level.mapcenter = maps/mp/gametypes_zm/_spawnlogic::findboxcenter( level.nodesmins, level.nodesmaxs ); -/# - println( "map center: ", level.mapcenter ); -#/ - setmapcenter( level.mapcenter ); - } -} - -start_intro_screen_zm() -{ - if ( level.createfx_enabled ) - { - return; - } - if ( !isDefined( level.introscreen ) ) - { - level.introscreen = newhudelem(); - level.introscreen.x = 0; - level.introscreen.y = 0; - level.introscreen.horzalign = "fullscreen"; - level.introscreen.vertalign = "fullscreen"; - level.introscreen.foreground = 0; - level.introscreen setshader( "black", 640, 480 ); - wait 0,05; - } - level.introscreen.alpha = 1; - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] freezecontrols( 1 ); - i++; - } - wait 1; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm.gsc deleted file mode 100644 index 915546d..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm.gsc +++ /dev/null @@ -1,5649 +0,0 @@ -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zombies/_zm_vulture; -#include maps/mp/gametypes_zm/_weapons; -#include maps/mp/zombies/_zm_pers_upgrades_system; -#include maps/mp/zombies/_zm_ai_dogs; -#include maps/mp/zombies/_zm_melee_weapon; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_demo; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_pers_upgrades; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_ffotd; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - level.player_out_of_playable_area_monitor = 1; - level.player_too_many_weapons_monitor = 1; - level.player_too_many_weapons_monitor_func = ::player_too_many_weapons_monitor; - level.player_too_many_players_check = 1; - level.player_too_many_players_check_func = ::player_too_many_players_check; - level._use_choke_weapon_hints = 1; - level._use_choke_blockers = 1; - level.passed_introscreen = 0; - if ( !isDefined( level.custom_ai_type ) ) - { - level.custom_ai_type = []; - } - level.spawn_funcs = []; - level.spawn_funcs[ "allies" ] = []; - level.spawn_funcs[ "axis" ] = []; - level.spawn_funcs[ "team3" ] = []; - level thread maps/mp/zombies/_zm_ffotd::main_start(); - level.zombiemode = 1; - level.revivefeature = 0; - level.swimmingfeature = 0; - level.calc_closest_player_using_paths = 0; - level.zombie_melee_in_water = 1; - level.put_timed_out_zombies_back_in_queue = 1; - level.use_alternate_poi_positioning = 1; - level.zmb_laugh_alias = "zmb_laugh_richtofen"; - level.sndannouncerisrich = 1; - level.scr_zm_ui_gametype = getDvar( "ui_gametype" ); - level.scr_zm_ui_gametype_group = getDvar( "ui_zm_gamemodegroup" ); - level.scr_zm_map_start_location = getDvar( "ui_zm_mapstartlocation" ); - level.curr_gametype_affects_rank = 0; - gametype = tolower( getDvar( "g_gametype" ) ); - if ( gametype == "zclassic" || gametype == "zsurvival" ) - { - level.curr_gametype_affects_rank = 1; - } - level.grenade_multiattack_bookmark_count = 1; - level.rampage_bookmark_kill_times_count = 3; - level.rampage_bookmark_kill_times_msec = 6000; - level.rampage_bookmark_kill_times_delay = 6000; - level thread watch_rampage_bookmark(); - if ( !isDefined( level._zombies_round_spawn_failsafe ) ) - { - level._zombies_round_spawn_failsafe = ::round_spawn_failsafe; - } - level.zombie_visionset = "zombie_neutral"; - if ( getDvar( #"5DF80895" ) == "1" ) - { - level.zombie_anim_intro = 1; - } - else - { - level.zombie_anim_intro = 0; - } - precache_shaders(); - precache_models(); - precacherumble( "explosion_generic" ); - precacherumble( "dtp_rumble" ); - precacherumble( "slide_rumble" ); - precache_zombie_leaderboards(); - level._zombie_gib_piece_index_all = 0; - level._zombie_gib_piece_index_right_arm = 1; - level._zombie_gib_piece_index_left_arm = 2; - level._zombie_gib_piece_index_right_leg = 3; - level._zombie_gib_piece_index_left_leg = 4; - level._zombie_gib_piece_index_head = 5; - level._zombie_gib_piece_index_guts = 6; - if ( !isDefined( level.zombie_ai_limit ) ) - { - level.zombie_ai_limit = 24; - } - if ( !isDefined( level.zombie_actor_limit ) ) - { - level.zombie_actor_limit = 31; - } - maps/mp/_visionset_mgr::init(); - init_dvars(); - init_strings(); - init_levelvars(); - init_sounds(); - init_shellshocks(); - init_flags(); - init_client_flags(); - registerclientfield( "world", "zombie_power_on", 1, 1, "int" ); - if ( level.scr_zm_ui_gametype_group == "zclassic" && !level.createfx_enabled ) - { - registerclientfield( "allplayers", "navcard_held", 1, 4, "int" ); - level.navcards = []; - level.navcards[ 0 ] = "navcard_held_zm_transit"; - level.navcards[ 1 ] = "navcard_held_zm_highrise"; - level thread setup_player_navcard_hud(); - } - register_offhand_weapons_for_level_defaults(); - level thread drive_client_connected_notifies(); -/# - maps/mp/zombies/_zm_devgui::init(); -#/ - maps/mp/zombies/_zm_zonemgr::init(); - maps/mp/zombies/_zm_unitrigger::init(); - maps/mp/zombies/_zm_audio::init(); - maps/mp/zombies/_zm_blockers::init(); - maps/mp/zombies/_zm_bot::init(); - maps/mp/zombies/_zm_clone::init(); - maps/mp/zombies/_zm_buildables::init(); - maps/mp/zombies/_zm_equipment::init(); - maps/mp/zombies/_zm_laststand::init(); - maps/mp/zombies/_zm_magicbox::init(); - maps/mp/zombies/_zm_perks::init(); - maps/mp/zombies/_zm_playerhealth::init(); - maps/mp/zombies/_zm_power::init(); - maps/mp/zombies/_zm_powerups::init(); - maps/mp/zombies/_zm_score::init(); - maps/mp/zombies/_zm_spawner::init(); - maps/mp/zombies/_zm_gump::init(); - maps/mp/zombies/_zm_timer::init(); - maps/mp/zombies/_zm_traps::init(); - maps/mp/zombies/_zm_weapons::init(); - init_function_overrides(); - level thread last_stand_pistol_rank_init(); - level thread maps/mp/zombies/_zm_tombstone::init(); - level thread post_all_players_connected(); - init_utility(); - maps/mp/_utility::registerclientsys( "lsm" ); - maps/mp/zombies/_zm_stats::init(); - initializestattracking(); - if ( get_players().size <= 1 ) - { - incrementcounter( "global_solo_games", 1 ); - } - else if ( level.systemlink ) - { - incrementcounter( "global_systemlink_games", 1 ); - } - else if ( getDvarInt( "splitscreen_playerCount" ) == get_players().size ) - { - incrementcounter( "global_splitscreen_games", 1 ); - } - else - { - incrementcounter( "global_coop_games", 1 ); - } - onplayerconnect_callback( ::zm_on_player_connect ); - maps/mp/zombies/_zm_pers_upgrades::pers_upgrade_init(); - set_demo_intermission_point(); - level thread maps/mp/zombies/_zm_ffotd::main_end(); - level thread track_players_intersection_tracker(); - level thread onallplayersready(); - level thread startunitriggers(); - level thread maps/mp/gametypes_zm/_zm_gametype::post_init_gametype(); -} - -post_main() -{ - level thread init_custom_ai_type(); -} - -startunitriggers() -{ - flag_wait_any( "start_zombie_round_logic", "start_encounters_match_logic" ); - level thread maps/mp/zombies/_zm_unitrigger::main(); -} - -drive_client_connected_notifies() -{ - while ( 1 ) - { - level waittill( "connected", player ); - player reset_rampage_bookmark_kill_times(); - player callback( "on_player_connect" ); - } -} - -fade_out_intro_screen_zm( hold_black_time, fade_out_time, destroyed_afterwards ) -{ - if ( !isDefined( level.introscreen ) ) - { - level.introscreen = newhudelem(); - level.introscreen.x = 0; - level.introscreen.y = 0; - level.introscreen.horzalign = "fullscreen"; - level.introscreen.vertalign = "fullscreen"; - level.introscreen.foreground = 0; - level.introscreen setshader( "black", 640, 480 ); - wait 0,05; - } - level.introscreen.alpha = 1; - if ( isDefined( hold_black_time ) ) - { - wait hold_black_time; - } - else - { - wait 0,2; - } - if ( !isDefined( fade_out_time ) ) - { - fade_out_time = 1,5; - } - level.introscreen fadeovertime( fade_out_time ); - level.introscreen.alpha = 0; - wait 1,6; - level.passed_introscreen = 1; - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] setclientuivisibilityflag( "hud_visible", 1 ); - if ( isDefined( level.host_ended_game ) && !level.host_ended_game ) - { - if ( isDefined( level.player_movement_suppressed ) ) - { - players[ i ] freezecontrols( level.player_movement_suppressed ); -/# - println( " Unfreeze controls 4" ); -#/ - i++; - continue; - } - else - { - if ( isDefined( players[ i ].hostmigrationcontrolsfrozen ) && !players[ i ].hostmigrationcontrolsfrozen ) - { - players[ i ] freezecontrols( 0 ); -/# - println( " Unfreeze controls 5" ); -#/ - } - } - } - i++; - } - if ( destroyed_afterwards == 1 ) - { - level.introscreen destroy(); - } - flag_set( "initial_blackscreen_passed" ); -} - -onallplayersready() -{ - timeout = getTime() + 5000; - while ( getnumexpectedplayers() == 0 && getTime() < timeout ) - { - wait 0,1; - } -/# - println( "ZM >> player_count_expected=" + getnumexpectedplayers() ); -#/ - player_count_actual = 0; - while ( getnumconnectedplayers() < getnumexpectedplayers() || player_count_actual != getnumexpectedplayers() ) - { - players = get_players(); - player_count_actual = 0; - i = 0; - while ( i < players.size ) - { - players[ i ] freezecontrols( 1 ); - if ( players[ i ].sessionstate == "playing" ) - { - player_count_actual++; - } - i++; - } -/# - println( "ZM >> Num Connected =" + getnumconnectedplayers() + " Expected : " + getnumexpectedplayers() ); -#/ - wait 0,1; - } - setinitialplayersconnected(); -/# - println( "ZM >> We have all players - START ZOMBIE LOGIC" ); -#/ - if ( getnumconnectedplayers() == 1 && getDvarInt( "scr_zm_enable_bots" ) == 1 ) - { - level thread add_bots(); - flag_set( "initial_players_connected" ); - } - else - { - players = get_players(); - if ( players.size == 1 ) - { - flag_set( "solo_game" ); - level.solo_lives_given = 0; - _a370 = players; - _k370 = getFirstArrayKey( _a370 ); - while ( isDefined( _k370 ) ) - { - player = _a370[ _k370 ]; - player.lives = 0; - _k370 = getNextArrayKey( _a370, _k370 ); - } - level maps/mp/zombies/_zm::zombiemode_solo_last_stand_pistol(); - } - flag_set( "initial_players_connected" ); - while ( !aretexturesloaded() ) - { - wait 0,05; - } - thread start_zombie_logic_in_x_sec( 3 ); - } - fade_out_intro_screen_zm( 5, 1,5, 1 ); -} - -start_zombie_logic_in_x_sec( time_to_wait ) -{ - wait time_to_wait; - flag_set( "start_zombie_round_logic" ); -} - -getallotherplayers() -{ - aliveplayers = []; - i = 0; - while ( i < level.players.size ) - { - if ( !isDefined( level.players[ i ] ) ) - { - i++; - continue; - } - else player = level.players[ i ]; - if ( player.sessionstate != "playing" || player == self ) - { - i++; - continue; - } - else - { - aliveplayers[ aliveplayers.size ] = player; - } - i++; - } - return aliveplayers; -} - -getfreespawnpoint( spawnpoints, player ) -{ - if ( !isDefined( spawnpoints ) ) - { -/# - iprintlnbold( "ZM >> No free spawn points in map" ); -#/ - return undefined; - } - if ( !isDefined( game[ "spawns_randomized" ] ) ) - { - game[ "spawns_randomized" ] = 1; - spawnpoints = array_randomize( spawnpoints ); - random_chance = randomint( 100 ); - if ( random_chance > 50 ) - { - set_game_var( "side_selection", 1 ); - } - else - { - set_game_var( "side_selection", 2 ); - } - } - side_selection = get_game_var( "side_selection" ); - if ( get_game_var( "switchedsides" ) ) - { - if ( side_selection == 2 ) - { - side_selection = 1; - } - else - { - if ( side_selection == 1 ) - { - side_selection = 2; - } - } - } - while ( isDefined( player ) && isDefined( player.team ) ) - { - i = 0; - while ( isDefined( spawnpoints ) && i < spawnpoints.size ) - { - if ( side_selection == 1 ) - { - if ( player.team != "allies" && isDefined( spawnpoints[ i ].script_int ) && spawnpoints[ i ].script_int == 1 ) - { - arrayremovevalue( spawnpoints, spawnpoints[ i ] ); - i = 0; - } - else - { - if ( player.team == "allies" && isDefined( spawnpoints[ i ].script_int ) && spawnpoints[ i ].script_int == 2 ) - { - arrayremovevalue( spawnpoints, spawnpoints[ i ] ); - i = 0; - } - else - { - i++; - } - } - continue; - } - else if ( player.team == "allies" && isDefined( spawnpoints[ i ].script_int ) && spawnpoints[ i ].script_int == 1 ) - { - arrayremovevalue( spawnpoints, spawnpoints[ i ] ); - i = 0; - continue; - } - else - { - if ( player.team != "allies" && isDefined( spawnpoints[ i ].script_int ) && spawnpoints[ i ].script_int == 2 ) - { - arrayremovevalue( spawnpoints, spawnpoints[ i ] ); - i = 0; - } - else - { - i++; - } - } - } - } - if ( !isDefined( self.playernum ) ) - { - if ( self.team == "allies" ) - { - self.playernum = get_game_var( "_team1_num" ); - set_game_var( "_team1_num", self.playernum + 1 ); - } - else - { - self.playernum = get_game_var( "_team2_num" ); - set_game_var( "_team2_num", self.playernum + 1 ); - } - } - j = 0; - while ( j < spawnpoints.size ) - { - while ( !isDefined( spawnpoints[ j ].en_num ) ) - { - m = 0; - while ( m < spawnpoints.size ) - { - spawnpoints[ m ].en_num = m; - m++; - } - } - if ( spawnpoints[ j ].en_num == self.playernum ) - { - return spawnpoints[ j ]; - } - j++; - } - return spawnpoints[ 0 ]; -} - -delete_in_createfx() -{ - exterior_goals = getstructarray( "exterior_goal", "targetname" ); - i = 0; - while ( i < exterior_goals.size ) - { - if ( !isDefined( exterior_goals[ i ].target ) ) - { - i++; - continue; - } - else - { - targets = getentarray( exterior_goals[ i ].target, "targetname" ); - j = 0; - while ( j < targets.size ) - { - targets[ j ] self_delete(); - j++; - } - } - i++; - } - if ( isDefined( level.level_createfx_callback_thread ) ) - { - level thread [[ level.level_createfx_callback_thread ]](); - } -} - -add_bots() -{ - host = gethostplayer(); - while ( !isDefined( host ) ) - { - wait 0,05; - host = gethostplayer(); - } - wait 4; - zbot_spawn(); - setdvar( "bot_AllowMovement", "1" ); - setdvar( "bot_PressAttackBtn", "1" ); - setdvar( "bot_PressMeleeBtn", "1" ); - while ( get_players().size < 2 ) - { - wait 0,05; - } - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] freezecontrols( 0 ); -/# - println( " Unfreeze controls 6" ); -#/ - i++; - } - level.numberbotsadded = 1; - flag_set( "start_zombie_round_logic" ); -} - -zbot_spawn() -{ - player = gethostplayer(); - spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); - spawnpoint = getfreespawnpoint( spawnpoints ); - bot = addtestclient(); - if ( !isDefined( bot ) ) - { -/# - println( "Could not add test client" ); -#/ - return; - } - bot.pers[ "isBot" ] = 1; - bot.equipment_enabled = 0; - yaw = spawnpoint.angles[ 1 ]; - bot thread zbot_spawn_think( spawnpoint.origin, yaw ); - return bot; -} - -zbot_spawn_think( origin, yaw ) -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self setorigin( origin ); - angles = ( 0, yaw, 0 ); - self setplayerangles( angles ); - } -} - -post_all_players_connected() -{ - level thread end_game(); - flag_wait( "start_zombie_round_logic" ); -/# - execdevgui( "devgui_zombie" ); - println( "sessions: mapname=", level.script, " gametype zom isserver 1 player_count=", get_players().size ); -#/ - level thread clear_mature_blood(); - level thread round_end_monitor(); - if ( !level.zombie_anim_intro ) - { - if ( isDefined( level._round_start_func ) ) - { - level thread [[ level._round_start_func ]](); - } - } - level thread players_playing(); - disablegrenadesuicide(); - level.startinvulnerabletime = getDvarInt( "player_deathInvulnerableTime" ); - if ( !isDefined( level.music_override ) ) - { - level.music_override = 0; - } -} - -init_custom_ai_type() -{ - while ( isDefined( level.custom_ai_type ) ) - { - i = 0; - while ( i < level.custom_ai_type.size ) - { - [[ level.custom_ai_type[ i ] ]](); - i++; - } - } -} - -zombiemode_melee_miss() -{ - if ( isDefined( self.enemy.curr_pay_turret ) ) - { - self.enemy dodamage( getDvarInt( "ai_meleeDamage" ), self.origin, self, self, "none", "melee" ); - } -} - -player_track_ammo_count() -{ - self notify( "stop_ammo_tracking" ); - self endon( "disconnect" ); - self endon( "stop_ammo_tracking" ); - while ( 1 ) - { - wait 0,5; - weap = self getcurrentweapon(); - while ( isDefined( weap ) || weap == "none" && !can_track_ammo( weap ) ) - { - continue; - } - if ( self getammocount( weap ) > 5 || self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - continue; - } - if ( self getammocount( weap ) > 0 ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "ammo_low" ); - } - else - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "ammo_out" ); - } - wait 20; - } -} - -can_track_ammo( weap ) -{ - if ( !isDefined( weap ) ) - { - return 0; - } - switch( weap ) - { - case "death_throe_zm": - case "equip_gasmask_zm": - case "humangun_upgraded_zm": - case "humangun_zm": - case "lower_equip_gasmask_zm": - case "none": - case "riotshield_zm": - case "screecher_arms_zm": - case "tazer_knuckles_upgraded_zm": - case "tazer_knuckles_zm": - case "zombie_bowie_flourish": - case "zombie_builder_zm": - case "zombie_fists_zm": - case "zombie_knuckle_crack": - case "zombie_sickle_flourish": - case "zombie_tazer_flourish": - return 0; - default: - if ( !is_zombie_perk_bottle( weap ) && !is_placeable_mine( weap ) && !is_equipment( weap ) && !issubstr( weap, "knife_ballistic_" ) || getsubstr( weap, 0, 3 ) == "gl_" && weap == level.revive_tool ) - { - return 0; - } - } - return 1; -} - -spawn_vo() -{ - wait 1; - players = get_players(); - if ( players.size > 1 ) - { - player = random( players ); - index = maps/mp/zombies/_zm_weapons::get_player_index( player ); - player thread spawn_vo_player( index, players.size ); - } -} - -spawn_vo_player( index, num ) -{ - sound = "plr_" + index + "_vox_" + num + "play"; - self playsoundwithnotify( sound, "sound_done" ); - self waittill( "sound_done" ); -} - -precache_shaders() -{ - precacheshader( "hud_chalk_1" ); - precacheshader( "hud_chalk_2" ); - precacheshader( "hud_chalk_3" ); - precacheshader( "hud_chalk_4" ); - precacheshader( "hud_chalk_5" ); - precacheshader( "zom_icon_community_pot" ); - precacheshader( "zom_icon_community_pot_strip" ); - precacheshader( "zom_icon_player_life" ); - precacheshader( "waypoint_revive" ); -} - -precache_models() -{ - precachemodel( "p_zom_win_bars_01_vert04_bend_180" ); - precachemodel( "p_zom_win_bars_01_vert01_bend_180" ); - precachemodel( "p_zom_win_bars_01_vert04_bend" ); - precachemodel( "p_zom_win_bars_01_vert01_bend" ); - precachemodel( "p_zom_win_cell_bars_01_vert04_bent" ); - precachemodel( "p_zom_win_cell_bars_01_vert01_bent" ); - precachemodel( "tag_origin" ); - precachemodel( "zombie_z_money_icon" ); - if ( isDefined( level.precachecustomcharacters ) ) - { - self [[ level.precachecustomcharacters ]](); - } -} - -init_shellshocks() -{ - level.player_killed_shellshock = "zombie_death"; - precacheshellshock( level.player_killed_shellshock ); - precacheshellshock( "pain" ); - precacheshellshock( "explosion" ); -} - -init_strings() -{ - precachestring( &"ZOMBIE_WEAPONCOSTAMMO" ); - precachestring( &"ZOMBIE_ROUND" ); - precachestring( &"SCRIPT_PLUS" ); - precachestring( &"ZOMBIE_GAME_OVER" ); - precachestring( &"ZOMBIE_SURVIVED_ROUND" ); - precachestring( &"ZOMBIE_SURVIVED_ROUNDS" ); - precachestring( &"ZOMBIE_SURVIVED_NOMANS" ); - precachestring( &"ZOMBIE_EXTRA_LIFE" ); - add_zombie_hint( "undefined", &"ZOMBIE_UNDEFINED" ); - add_zombie_hint( "default_treasure_chest_950", &"ZOMBIE_RANDOM_WEAPON_950" ); - add_zombie_hint( "default_buy_barrier_piece_10", &"ZOMBIE_BUTTON_BUY_BACK_BARRIER_10" ); - add_zombie_hint( "default_buy_barrier_piece_20", &"ZOMBIE_BUTTON_BUY_BACK_BARRIER_20" ); - add_zombie_hint( "default_buy_barrier_piece_50", &"ZOMBIE_BUTTON_BUY_BACK_BARRIER_50" ); - add_zombie_hint( "default_buy_barrier_piece_100", &"ZOMBIE_BUTTON_BUY_BACK_BARRIER_100" ); - add_zombie_hint( "default_reward_barrier_piece", &"ZOMBIE_BUTTON_REWARD_BARRIER" ); - add_zombie_hint( "default_reward_barrier_piece_10", &"ZOMBIE_BUTTON_REWARD_BARRIER_10" ); - add_zombie_hint( "default_reward_barrier_piece_20", &"ZOMBIE_BUTTON_REWARD_BARRIER_20" ); - add_zombie_hint( "default_reward_barrier_piece_30", &"ZOMBIE_BUTTON_REWARD_BARRIER_30" ); - add_zombie_hint( "default_reward_barrier_piece_40", &"ZOMBIE_BUTTON_REWARD_BARRIER_40" ); - add_zombie_hint( "default_reward_barrier_piece_50", &"ZOMBIE_BUTTON_REWARD_BARRIER_50" ); - add_zombie_hint( "default_buy_debris_100", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_100" ); - add_zombie_hint( "default_buy_debris_200", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_200" ); - add_zombie_hint( "default_buy_debris_250", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_250" ); - add_zombie_hint( "default_buy_debris_500", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_500" ); - add_zombie_hint( "default_buy_debris_750", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_750" ); - add_zombie_hint( "default_buy_debris_1000", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_1000" ); - add_zombie_hint( "default_buy_debris_1250", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_1250" ); - add_zombie_hint( "default_buy_debris_1500", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_1500" ); - add_zombie_hint( "default_buy_debris_1750", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_1750" ); - add_zombie_hint( "default_buy_debris_2000", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_2000" ); - add_zombie_hint( "default_buy_debris_3000", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_3000" ); - add_zombie_hint( "default_buy_door_close", &"ZOMBIE_BUTTON_BUY_CLOSE_DOOR" ); - add_zombie_hint( "default_buy_door_100", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_100" ); - add_zombie_hint( "default_buy_door_200", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_200" ); - add_zombie_hint( "default_buy_door_250", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_250" ); - add_zombie_hint( "default_buy_door_500", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_500" ); - add_zombie_hint( "default_buy_door_750", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_750" ); - add_zombie_hint( "default_buy_door_1000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_1000" ); - add_zombie_hint( "default_buy_door_1250", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_1250" ); - add_zombie_hint( "default_buy_door_1500", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_1500" ); - add_zombie_hint( "default_buy_door_1750", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_1750" ); - add_zombie_hint( "default_buy_door_2000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_2000" ); - add_zombie_hint( "default_buy_door_2500", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_2500" ); - add_zombie_hint( "default_buy_door_3000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_3000" ); - add_zombie_hint( "default_buy_door_4000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_4000" ); - add_zombie_hint( "default_buy_door_8000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_8000" ); - add_zombie_hint( "default_buy_door_16000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_16000" ); - add_zombie_hint( "default_buy_area_100", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_100" ); - add_zombie_hint( "default_buy_area_200", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_200" ); - add_zombie_hint( "default_buy_area_250", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_250" ); - add_zombie_hint( "default_buy_area_500", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_500" ); - add_zombie_hint( "default_buy_area_750", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_750" ); - add_zombie_hint( "default_buy_area_1000", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_1000" ); - add_zombie_hint( "default_buy_area_1250", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_1250" ); - add_zombie_hint( "default_buy_area_1500", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_1500" ); - add_zombie_hint( "default_buy_area_1750", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_1750" ); - add_zombie_hint( "default_buy_area_2000", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_2000" ); - add_zombie_hint( "powerup_fire_sale_cost", &"ZOMBIE_FIRE_SALE_COST" ); -} - -init_sounds() -{ - add_sound( "end_of_round", "mus_zmb_round_over" ); - add_sound( "end_of_game", "mus_zmb_game_over" ); - add_sound( "chalk_one_up", "mus_zmb_chalk" ); - add_sound( "purchase", "zmb_cha_ching" ); - add_sound( "no_purchase", "zmb_no_cha_ching" ); - add_sound( "playerzombie_usebutton_sound", "zmb_zombie_vocals_attack" ); - add_sound( "playerzombie_attackbutton_sound", "zmb_zombie_vocals_attack" ); - add_sound( "playerzombie_adsbutton_sound", "zmb_zombie_vocals_attack" ); - add_sound( "zombie_head_gib", "zmb_zombie_head_gib" ); - add_sound( "rebuild_barrier_piece", "zmb_repair_boards" ); - add_sound( "rebuild_barrier_metal_piece", "zmb_metal_repair" ); - add_sound( "rebuild_barrier_hover", "zmb_boards_float" ); - add_sound( "debris_hover_loop", "zmb_couch_loop" ); - add_sound( "break_barrier_piece", "zmb_break_boards" ); - add_sound( "grab_metal_bar", "zmb_bar_pull" ); - add_sound( "break_metal_bar", "zmb_bar_break" ); - add_sound( "drop_metal_bar", "zmb_bar_drop" ); - add_sound( "blocker_end_move", "zmb_board_slam" ); - add_sound( "barrier_rebuild_slam", "zmb_board_slam" ); - add_sound( "bar_rebuild_slam", "zmb_bar_repair" ); - add_sound( "zmb_rock_fix", "zmb_break_rock_barrier_fix" ); - add_sound( "zmb_vent_fix", "evt_vent_slat_repair" ); - add_sound( "door_slide_open", "zmb_door_slide_open" ); - add_sound( "door_rotate_open", "zmb_door_slide_open" ); - add_sound( "debris_move", "zmb_weap_wall" ); - add_sound( "open_chest", "zmb_lid_open" ); - add_sound( "music_chest", "zmb_music_box" ); - add_sound( "close_chest", "zmb_lid_close" ); - add_sound( "weapon_show", "zmb_weap_wall" ); - add_sound( "break_stone", "break_stone" ); -} - -init_levelvars() -{ - level.is_zombie_level = 1; - level.laststandpistol = "m1911_zm"; - level.default_laststandpistol = "m1911_zm"; - level.default_solo_laststandpistol = "m1911_upgraded_zm"; - level.start_weapon = "m1911_zm"; - level.first_round = 1; - level.round_number = getgametypesetting( "startRound" ); - level.enable_magic = getgametypesetting( "magic" ); - level.headshots_only = getgametypesetting( "headshotsonly" ); - level.player_starting_points = level.round_number * 500; - level.round_start_time = 0; - level.pro_tips_start_time = 0; - level.intermission = 0; - level.dog_intermission = 0; - level.zombie_total = 0; - level.total_zombies_killed = 0; - level.hudelem_count = 0; - level.zombie_spawn_locations = []; - level.zombie_rise_spawners = []; - level.current_zombie_array = []; - level.current_zombie_count = 0; - level.zombie_total_subtract = 0; - level.destructible_callbacks = []; - level.zombie_vars = []; - _a1004 = level.teams; - _k1004 = getFirstArrayKey( _a1004 ); - while ( isDefined( _k1004 ) ) - { - team = _a1004[ _k1004 ]; - level.zombie_vars[ team ] = []; - _k1004 = getNextArrayKey( _a1004, _k1004 ); - } - difficulty = 1; - column = int( difficulty ) + 1; - set_zombie_var( "zombie_health_increase", 100, 0, column ); - set_zombie_var( "zombie_health_increase_multiplier", 0,1, 1, column ); - set_zombie_var( "zombie_health_start", 150, 0, column ); - set_zombie_var( "zombie_spawn_delay", 2, 1, column ); - set_zombie_var( "zombie_new_runner_interval", 10, 0, column ); - set_zombie_var( "zombie_move_speed_multiplier", 8, 0, column ); - set_zombie_var( "zombie_move_speed_multiplier_easy", 2, 0, column ); - set_zombie_var( "zombie_max_ai", 24, 0, column ); - set_zombie_var( "zombie_ai_per_player", 6, 0, column ); - set_zombie_var( "below_world_check", -1000 ); - set_zombie_var( "spectators_respawn", 1 ); - set_zombie_var( "zombie_use_failsafe", 1 ); - set_zombie_var( "zombie_between_round_time", 10 ); - set_zombie_var( "zombie_intermission_time", 15 ); - set_zombie_var( "game_start_delay", 0, 0, column ); - set_zombie_var( "penalty_no_revive", 0,1, 1, column ); - set_zombie_var( "penalty_died", 0, 1, column ); - set_zombie_var( "penalty_downed", 0,05, 1, column ); - set_zombie_var( "starting_lives", 1, 0, column ); - set_zombie_var( "zombie_score_kill_4player", 50 ); - set_zombie_var( "zombie_score_kill_3player", 50 ); - set_zombie_var( "zombie_score_kill_2player", 50 ); - set_zombie_var( "zombie_score_kill_1player", 50 ); - set_zombie_var( "zombie_score_kill_4p_team", 30 ); - set_zombie_var( "zombie_score_kill_3p_team", 35 ); - set_zombie_var( "zombie_score_kill_2p_team", 45 ); - set_zombie_var( "zombie_score_kill_1p_team", 0 ); - set_zombie_var( "zombie_score_damage_normal", 10 ); - set_zombie_var( "zombie_score_damage_light", 10 ); - set_zombie_var( "zombie_score_bonus_melee", 80 ); - set_zombie_var( "zombie_score_bonus_head", 50 ); - set_zombie_var( "zombie_score_bonus_neck", 20 ); - set_zombie_var( "zombie_score_bonus_torso", 10 ); - set_zombie_var( "zombie_score_bonus_burn", 10 ); - set_zombie_var( "zombie_flame_dmg_point_delay", 500 ); - set_zombie_var( "zombify_player", 0 ); - if ( issplitscreen() ) - { - set_zombie_var( "zombie_timer_offset", 280 ); - } - level thread init_player_levelvars(); - level.gamedifficulty = getgametypesetting( "zmDifficulty" ); - if ( level.gamedifficulty == 0 ) - { - level.zombie_move_speed = level.round_number * level.zombie_vars[ "zombie_move_speed_multiplier_easy" ]; - } - else - { - level.zombie_move_speed = level.round_number * level.zombie_vars[ "zombie_move_speed_multiplier" ]; - } - if ( level.round_number == 1 ) - { - level.zombie_move_speed = 1; - } - else - { - i = 1; - while ( i <= level.round_number ) - { - timer = level.zombie_vars[ "zombie_spawn_delay" ]; - if ( timer > 0,08 ) - { - level.zombie_vars[ "zombie_spawn_delay" ] = timer * 0,95; - i++; - continue; - } - else - { - if ( timer < 0,08 ) - { - level.zombie_vars[ "zombie_spawn_delay" ] = 0,08; - } - } - i++; - } - } - level.speed_change_max = 0; - level.speed_change_num = 0; -} - -init_player_levelvars() -{ - flag_wait( "start_zombie_round_logic" ); - difficulty = 1; - column = int( difficulty ) + 1; - players = get_players(); - points = set_zombie_var( "zombie_score_start_" + players.size + "p", 3000, 0, column ); - points = set_zombie_var( "zombie_score_start_" + players.size + "p", 3000, 0, column ); -} - -init_dvars() -{ - if ( getDvar( "zombie_debug" ) == "" ) - { - setdvar( "zombie_debug", "0" ); - } - if ( getDvar( "scr_zm_enable_bots" ) == "" ) - { - setdvar( "scr_zm_enable_bots", "0" ); - } - if ( getDvar( "zombie_cheat" ) == "" ) - { - setdvar( "zombie_cheat", "0" ); - } - if ( level.script != "zombie_cod5_prototype" ) - { - setdvar( "magic_chest_movable", "1" ); - } - setdvar( "revive_trigger_radius", "75" ); - setdvar( "player_lastStandBleedoutTime", "45" ); - setdvar( "scr_deleteexplosivesonspawn", "0" ); -} - -init_function_overrides() -{ - level.callbackplayerdamage = ::callback_playerdamage; - level.overrideplayerdamage = ::player_damage_override; - level.callbackplayerkilled = ::player_killed_override; - level.playerlaststand_func = ::player_laststand; - level.callbackplayerlaststand = ::callback_playerlaststand; - level.prevent_player_damage = ::player_prevent_damage; - level.callbackactorkilled = ::actor_killed_override; - level.callbackactordamage = ::actor_damage_override_wrapper; - level.custom_introscreen = ::zombie_intro_screen; - level.custom_intermission = ::player_intermission; - level.global_damage_func = ::maps/mp/zombies/_zm_spawner::zombie_damage; - level.global_damage_func_ads = ::maps/mp/zombies/_zm_spawner::zombie_damage_ads; - level.reset_clientdvars = ::onplayerconnect_clientdvars; - level.zombie_last_stand = ::last_stand_pistol_swap; - level.zombie_last_stand_pistol_memory = ::last_stand_save_pistol_ammo; - level.zombie_last_stand_ammo_return = ::last_stand_restore_pistol_ammo; - level.player_becomes_zombie = ::zombify_player; -} - -callback_playerlaststand( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) -{ - self endon( "disconnect" ); - [[ ::maps/mp/zombies/_zm_laststand::playerlaststand ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); -} - -codecallback_destructibleevent( event, param1, param2, param3 ) -{ - if ( event == "broken" ) - { - notify_type = param1; - attacker = param2; - weapon = param3; - if ( isDefined( level.destructible_callbacks[ notify_type ] ) ) - { - self thread [[ level.destructible_callbacks[ notify_type ] ]]( notify_type, attacker ); - } - self notify( event ); - } - else - { - if ( event == "breakafter" ) - { - piece = param1; - time = param2; - damage = param3; - self thread breakafter( time, damage, piece ); - } - } -} - -breakafter( time, damage, piece ) -{ - self notify( "breakafter" ); - self endon( "breakafter" ); - wait time; - self dodamage( damage, self.origin, undefined, undefined ); -} - -callback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) -{ -/# - println( "ZM Callback_PlayerDamage" + idamage + "\n" ); -#/ - if ( isDefined( eattacker ) && isplayer( eattacker ) && eattacker.sessionteam == self.sessionteam && !eattacker hasperk( "specialty_noname" ) && isDefined( self.is_zombie ) && !self.is_zombie ) - { - if ( self != eattacker ) - { -/# - println( "Exiting - players can't hurt each other." ); -#/ - return; - } - else - { - if ( smeansofdeath != "MOD_GRENADE_SPLASH" && smeansofdeath != "MOD_GRENADE" && smeansofdeath != "MOD_EXPLOSIVE" && smeansofdeath != "MOD_PROJECTILE" && smeansofdeath != "MOD_PROJECTILE_SPLASH" && smeansofdeath != "MOD_BURNED" && smeansofdeath != "MOD_SUICIDE" ) - { -/# - println( "Exiting - damage type verbotten." ); -#/ - return; - } - } - } - if ( is_classic() ) - { - if ( isDefined( level.pers_upgrade_insta_kill ) && level.pers_upgrade_insta_kill ) - { - if ( isDefined( smeansofdeath ) && smeansofdeath == "MOD_MELEE" ) - { - if ( isplayer( self ) && maps/mp/zombies/_zm_pers_upgrades::is_insta_kill_upgraded_and_active() ) - { - self notify( "pers_melee_swipe" ); - level.pers_melee_swipe_zombie_swiper = eattacker; - } - } - } - } - if ( isDefined( self.overrideplayerdamage ) ) - { - idamage = self [[ self.overrideplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); - } - else - { - if ( isDefined( level.overrideplayerdamage ) ) - { - idamage = self [[ level.overrideplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); - } - } -/# - assert( isDefined( idamage ), "You must return a value from a damage override function." ); -#/ - if ( isDefined( self.magic_bullet_shield ) && self.magic_bullet_shield ) - { - maxhealth = self.maxhealth; - self.health += idamage; - self.maxhealth = maxhealth; - } - if ( isDefined( self.divetoprone ) && self.divetoprone == 1 ) - { - if ( smeansofdeath == "MOD_GRENADE_SPLASH" ) - { - dist = distance2d( vpoint, self.origin ); - if ( dist > 32 ) - { - dot_product = vectordot( anglesToForward( self.angles ), vdir ); - if ( dot_product > 0 ) - { - idamage = int( idamage * 0,5 ); - } - } - } - } -/# - println( "CB PD" ); -#/ - if ( isDefined( level.prevent_player_damage ) ) - { - if ( self [[ level.prevent_player_damage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) ) - { - return; - } - } - idflags |= level.idflags_no_knockback; -/# - println( "Finishplayerdamage wrapper." ); -#/ - self finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); -} - -finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) -{ - self finishplayerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); -} - -init_flags() -{ - flag_init( "solo_game" ); - flag_init( "start_zombie_round_logic" ); - flag_init( "start_encounters_match_logic" ); - flag_init( "spawn_point_override" ); - flag_init( "power_on" ); - flag_init( "crawler_round" ); - flag_init( "spawn_zombies", 1 ); - flag_init( "dog_round" ); - flag_init( "begin_spawning" ); - flag_init( "end_round_wait" ); - flag_init( "wait_and_revive" ); - flag_init( "instant_revive" ); - flag_init( "initial_blackscreen_passed" ); - flag_init( "initial_players_connected" ); -} - -init_client_flags() -{ - if ( isDefined( level.use_clientside_board_fx ) && level.use_clientside_board_fx ) - { - level._zombie_scriptmover_flag_board_horizontal_fx = 14; - level._zombie_scriptmover_flag_board_vertical_fx = 13; - } - if ( isDefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) - { - level._zombie_scriptmover_flag_rock_fx = 12; - } - level._zombie_player_flag_cloak_weapon = 14; - registerclientfield( "toplayer", "dive2nuke_visionset", 1, 1, "int" ); - registerclientfield( "toplayer", "deadshot_perk", 1, 1, "int" ); - registerclientfield( "actor", "zombie_riser_fx", 1, 1, "int" ); - if ( isDefined( level._no_water_risers ) && !level._no_water_risers ) - { - registerclientfield( "actor", "zombie_riser_fx_water", 1, 1, "int" ); - } - if ( isDefined( level.risers_use_low_gravity_fx ) && level.risers_use_low_gravity_fx ) - { - registerclientfield( "actor", "zombie_riser_fx_lowg", 1, 1, "int" ); - } -} - -init_fx() -{ - level.createfx_callback_thread = ::delete_in_createfx; - level._effect[ "wood_chunk_destory" ] = loadfx( "impacts/fx_large_woodhit" ); - level._effect[ "fx_zombie_bar_break" ] = loadfx( "maps/zombie/fx_zombie_bar_break" ); - level._effect[ "fx_zombie_bar_break_lite" ] = loadfx( "maps/zombie/fx_zombie_bar_break_lite" ); - level._effect[ "edge_fog" ] = loadfx( "maps/zombie/fx_fog_zombie_amb" ); - level._effect[ "chest_light" ] = loadfx( "maps/zombie/fx_zmb_tranzit_marker_glow" ); - level._effect[ "eye_glow" ] = loadfx( "misc/fx_zombie_eye_single" ); - level._effect[ "headshot" ] = loadfx( "impacts/fx_flesh_hit" ); - level._effect[ "headshot_nochunks" ] = loadfx( "misc/fx_zombie_bloodsplat" ); - level._effect[ "bloodspurt" ] = loadfx( "misc/fx_zombie_bloodspurt" ); - level._effect[ "tesla_head_light" ] = loadfx( "maps/zombie/fx_zombie_tesla_neck_spurt" ); - level._effect[ "zombie_guts_explosion" ] = loadfx( "maps/zombie/fx_zmb_tranzit_torso_explo" ); - level._effect[ "rise_burst_water" ] = loadfx( "maps/zombie/fx_mp_zombie_hand_dirt_burst" ); - level._effect[ "rise_billow_water" ] = loadfx( "maps/zombie/fx_mp_zombie_body_dirt_billowing" ); - level._effect[ "rise_dust_water" ] = loadfx( "maps/zombie/fx_mp_zombie_body_dust_falling" ); - level._effect[ "rise_burst" ] = loadfx( "maps/zombie/fx_mp_zombie_hand_dirt_burst" ); - level._effect[ "rise_billow" ] = loadfx( "maps/zombie/fx_mp_zombie_body_dirt_billowing" ); - level._effect[ "rise_dust" ] = loadfx( "maps/zombie/fx_mp_zombie_body_dust_falling" ); - level._effect[ "fall_burst" ] = loadfx( "maps/zombie/fx_mp_zombie_hand_dirt_burst" ); - level._effect[ "fall_billow" ] = loadfx( "maps/zombie/fx_mp_zombie_body_dirt_billowing" ); - level._effect[ "fall_dust" ] = loadfx( "maps/zombie/fx_mp_zombie_body_dust_falling" ); - level._effect[ "character_fire_death_sm" ] = loadfx( "env/fire/fx_fire_zombie_md" ); - level._effect[ "character_fire_death_torso" ] = loadfx( "env/fire/fx_fire_zombie_torso" ); - level._effect[ "def_explosion" ] = loadfx( "explosions/fx_default_explosion" ); - level._effect[ "870mcs_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_870mcs" ); - level._effect[ "ak74u_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_ak74u" ); - level._effect[ "beretta93r_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_berreta93r" ); - level._effect[ "bowie_knife_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_bowie" ); - level._effect[ "claymore_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_claymore" ); - level._effect[ "m14_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_m14" ); - level._effect[ "m16_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_m16" ); - level._effect[ "mp5k_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_mp5k" ); - level._effect[ "rottweil72_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_olympia" ); - level._effect[ "sticky_grenade_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_semtex" ); - level._effect[ "tazer_knuckles_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_taseknuck" ); - level._effect[ "upgrade_aquired" ] = loadfx( "maps/zombie/fx_zmb_tanzit_upgrade" ); -} - -zombie_intro_screen( string1, string2, string3, string4, string5 ) -{ - flag_wait( "start_zombie_round_logic" ); -} - -players_playing() -{ - players = get_players(); - level.players_playing = players.size; - wait 20; - players = get_players(); - level.players_playing = players.size; -} - -onplayerconnect_clientdvars() -{ - self setclientcompass( 0 ); - self setclientthirdperson( 0 ); - self resetfov(); - self setclientthirdpersonangle( 0 ); - self setclientammocounterhide( 1 ); - self setclientminiscoreboardhide( 1 ); - self setclienthudhardcore( 0 ); - self setclientplayerpushamount( 1 ); - self setdepthoffield( 0, 0, 512, 4000, 4, 0 ); - self setclientaimlockonpitchstrength( 0 ); - self maps/mp/zombies/_zm_laststand::player_getup_setup(); -} - -checkforalldead( excluded_player ) -{ - players = get_players(); - count = 0; - i = 0; - while ( i < players.size ) - { - if ( isDefined( excluded_player ) && excluded_player == players[ i ] ) - { - i++; - continue; - } - else - { - if ( !players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() && players[ i ].sessionstate != "spectator" ) - { - count++; - } - } - i++; - } - if ( count == 0 && isDefined( level.no_end_game_check ) && !level.no_end_game_check ) - { - level notify( "end_game" ); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - self notify( "stop_onPlayerSpawned" ); - self endon( "stop_onPlayerSpawned" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - if ( isDefined( level.host_ended_game ) && !level.host_ended_game ) - { - self freezecontrols( 0 ); -/# - println( " Unfreeze controls 7" ); -#/ - } - self.hits = 0; - self init_player_offhand_weapons(); - lethal_grenade = self get_player_lethal_grenade(); - if ( !self hasweapon( lethal_grenade ) ) - { - self giveweapon( lethal_grenade ); - self setweaponammoclip( lethal_grenade, 0 ); - } - self recordplayerrevivezombies( self ); -/# - if ( getDvarInt( "zombie_cheat" ) >= 1 && getDvarInt( "zombie_cheat" ) <= 3 ) - { - self enableinvulnerability(); -#/ - } - self setactionslot( 3, "altMode" ); - self playerknockback( 0 ); - self setclientthirdperson( 0 ); - self resetfov(); - self setclientthirdpersonangle( 0 ); - self setdepthoffield( 0, 0, 512, 4000, 4, 0 ); - self cameraactivate( 0 ); - self.num_perks = 0; - self.on_lander_last_stand = undefined; - self setblur( 0, 0,1 ); - self.zmbdialogqueue = []; - self.zmbdialogactive = 0; - self.zmbdialoggroups = []; - self.zmbdialoggroup = ""; - if ( isDefined( level.player_out_of_playable_area_monitor ) && level.player_out_of_playable_area_monitor ) - { - self thread player_out_of_playable_area_monitor(); - } - if ( isDefined( level.player_too_many_weapons_monitor ) && level.player_too_many_weapons_monitor ) - { - self thread [[ level.player_too_many_weapons_monitor_func ]](); - } - if ( isDefined( level.player_too_many_players_check ) && level.player_too_many_players_check ) - { - level thread [[ level.player_too_many_players_check_func ]](); - } - self.disabled_perks = []; - if ( isDefined( self.player_initialized ) ) - { - if ( self.player_initialized == 0 ) - { - self.player_initialized = 1; - self giveweapon( self get_player_lethal_grenade() ); - self setweaponammoclip( self get_player_lethal_grenade(), 0 ); - self setclientammocounterhide( 0 ); - self setclientminiscoreboardhide( 0 ); - self.is_drinking = 0; - self thread player_zombie_breadcrumb(); - self thread player_monitor_travel_dist(); - self thread player_monitor_time_played(); - self thread player_track_ammo_count(); - self thread shock_onpain(); - self thread player_grenade_watcher(); - self maps/mp/zombies/_zm_laststand::revive_hud_create(); - if ( isDefined( level.zm_gamemodule_spawn_func ) ) - { - self thread [[ level.zm_gamemodule_spawn_func ]](); - } - self thread player_spawn_protection(); - if ( !isDefined( self.lives ) ) - { - self.lives = 0; - } - } - } - } -} - -player_spawn_protection() -{ - self endon( "disconnect" ); - x = 0; - while ( x < 60 ) - { - self.ignoreme = 1; - x++; - wait 0,05; - } - self.ignoreme = 0; -} - -spawn_life_brush( origin, radius, height ) -{ - life_brush = spawn( "trigger_radius", origin, 0, radius, height ); - life_brush.script_noteworthy = "life_brush"; - return life_brush; -} - -in_life_brush() -{ - life_brushes = getentarray( "life_brush", "script_noteworthy" ); - if ( !isDefined( life_brushes ) ) - { - return 0; - } - i = 0; - while ( i < life_brushes.size ) - { - if ( self istouching( life_brushes[ i ] ) ) - { - return 1; - } - i++; - } - return 0; -} - -spawn_kill_brush( origin, radius, height ) -{ - kill_brush = spawn( "trigger_radius", origin, 0, radius, height ); - kill_brush.script_noteworthy = "kill_brush"; - return kill_brush; -} - -in_kill_brush() -{ - kill_brushes = getentarray( "kill_brush", "script_noteworthy" ); - if ( !isDefined( kill_brushes ) ) - { - return 0; - } - i = 0; - while ( i < kill_brushes.size ) - { - if ( self istouching( kill_brushes[ i ] ) ) - { - return 1; - } - i++; - } - return 0; -} - -in_enabled_playable_area() -{ - playable_area = getentarray( "player_volume", "script_noteworthy" ); - if ( !isDefined( playable_area ) ) - { - return 0; - } - i = 0; - while ( i < playable_area.size ) - { - if ( maps/mp/zombies/_zm_zonemgr::zone_is_enabled( playable_area[ i ].targetname ) && self istouching( playable_area[ i ] ) ) - { - return 1; - } - i++; - } - return 0; -} - -get_player_out_of_playable_area_monitor_wait_time() -{ -/# - if ( isDefined( level.check_kill_thread_every_frame ) && level.check_kill_thread_every_frame ) - { - return 0,05; -#/ - } - return 3; -} - -player_out_of_playable_area_monitor() -{ - self notify( "stop_player_out_of_playable_area_monitor" ); - self endon( "stop_player_out_of_playable_area_monitor" ); - self endon( "disconnect" ); - level endon( "end_game" ); - while ( !isDefined( self.characterindex ) ) - { - wait 0,05; - } - wait ( 0,15 * self.characterindex ); - while ( 1 ) - { - while ( self.sessionstate == "spectator" ) - { - wait get_player_out_of_playable_area_monitor_wait_time(); - } - while ( is_true( level.hostmigration_occured ) ) - { - wait get_player_out_of_playable_area_monitor_wait_time(); - } - if ( !self in_life_brush() || self in_kill_brush() && !self in_enabled_playable_area() ) - { - if ( !isDefined( level.player_out_of_playable_area_monitor_callback ) || self [[ level.player_out_of_playable_area_monitor_callback ]]() ) - { -/# - while ( isDefined( level.kill_thread_test_mode ) && level.kill_thread_test_mode ) - { - iprintlnbold( "out of playable" ); - wait get_player_out_of_playable_area_monitor_wait_time(); - } - while ( !self isinmovemode( "ufo", "noclip" ) && isDefined( level.disable_kill_thread ) || level.disable_kill_thread && getDvarInt( "zombie_cheat" ) > 0 ) - { - wait get_player_out_of_playable_area_monitor_wait_time(); -#/ - } - self maps/mp/zombies/_zm_stats::increment_map_cheat_stat( "cheat_out_of_playable" ); - self maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_out_of_playable", 0 ); - self maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 ); - self playlocalsound( level.zmb_laugh_alias ); - wait 0,5; - if ( get_players().size == 1 && flag( "solo_game" ) && isDefined( self.waiting_to_revive ) && self.waiting_to_revive ) - { - level notify( "end_game" ); - break; - } - else - { - self.lives = 0; - self dodamage( self.health + 1000, self.origin ); - self.bleedout_time = 0; - } - } - } - wait get_player_out_of_playable_area_monitor_wait_time(); - } -} - -get_player_too_many_weapons_monitor_wait_time() -{ - return 3; -} - -player_too_many_weapons_monitor_takeaway_simultaneous( primary_weapons_to_take ) -{ - self endon( "player_too_many_weapons_monitor_takeaway_sequence_done" ); - self waittill_any( "player_downed", "replace_weapon_powerup" ); - i = 0; - while ( i < primary_weapons_to_take.size ) - { - self takeweapon( primary_weapons_to_take[ i ] ); - i++; - } - self maps/mp/zombies/_zm_score::minus_to_player_score( self.score ); - self give_start_weapon( 0 ); - if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - self decrement_is_drinking(); - } - else - { - if ( flag( "solo_game" ) ) - { - self.score_lost_when_downed = 0; - } - } - self notify( "player_too_many_weapons_monitor_takeaway_sequence_done" ); -} - -player_too_many_weapons_monitor_takeaway_sequence( primary_weapons_to_take ) -{ - self thread player_too_many_weapons_monitor_takeaway_simultaneous( primary_weapons_to_take ); - self endon( "player_downed" ); - self endon( "replace_weapon_powerup" ); - self increment_is_drinking(); - score_decrement = round_up_to_ten( int( self.score / ( primary_weapons_to_take.size + 1 ) ) ); - i = 0; - while ( i < primary_weapons_to_take.size ) - { - self playlocalsound( level.zmb_laugh_alias ); - self switchtoweapon( primary_weapons_to_take[ i ] ); - self maps/mp/zombies/_zm_score::minus_to_player_score( score_decrement ); - wait 3; - self takeweapon( primary_weapons_to_take[ i ] ); - i++; - } - self playlocalsound( level.zmb_laugh_alias ); - self maps/mp/zombies/_zm_score::minus_to_player_score( self.score ); - wait 1; - self give_start_weapon( 1 ); - self decrement_is_drinking(); - self notify( "player_too_many_weapons_monitor_takeaway_sequence_done" ); -} - -player_too_many_weapons_monitor() -{ - self notify( "stop_player_too_many_weapons_monitor" ); - self endon( "stop_player_too_many_weapons_monitor" ); - self endon( "disconnect" ); - level endon( "end_game" ); - scalar = self.characterindex; - if ( !isDefined( scalar ) ) - { - scalar = self getentitynumber(); - } - wait ( 0,15 * scalar ); - while ( 1 ) - { - while ( !self has_powerup_weapon() || self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && self.sessionstate == "spectator" ) - { - wait get_player_too_many_weapons_monitor_wait_time(); - } -/# - while ( getDvarInt( "zombie_cheat" ) > 0 ) - { - wait get_player_too_many_weapons_monitor_wait_time(); -#/ - } - weapon_limit = 2; - if ( self hasperk( "specialty_additionalprimaryweapon" ) ) - { - weapon_limit = 3; - } - primaryweapons = self getweaponslistprimaries(); - if ( primaryweapons.size > weapon_limit ) - { - self maps/mp/zombies/_zm_weapons::take_fallback_weapon(); - primaryweapons = self getweaponslistprimaries(); - } - primary_weapons_to_take = []; - i = 0; - while ( i < primaryweapons.size ) - { - if ( maps/mp/zombies/_zm_weapons::is_weapon_included( primaryweapons[ i ] ) || maps/mp/zombies/_zm_weapons::is_weapon_upgraded( primaryweapons[ i ] ) ) - { - primary_weapons_to_take[ primary_weapons_to_take.size ] = primaryweapons[ i ]; - } - i++; - } - if ( primary_weapons_to_take.size > weapon_limit ) - { - if ( !isDefined( level.player_too_many_weapons_monitor_callback ) || self [[ level.player_too_many_weapons_monitor_callback ]]( primary_weapons_to_take ) ) - { - self maps/mp/zombies/_zm_stats::increment_map_cheat_stat( "cheat_too_many_weapons" ); - self maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_too_many_weapons", 0 ); - self maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 ); - self thread player_too_many_weapons_monitor_takeaway_sequence( primary_weapons_to_take ); - self waittill( "player_too_many_weapons_monitor_takeaway_sequence_done" ); - } - } - wait get_player_too_many_weapons_monitor_wait_time(); - } -} - -player_monitor_travel_dist() -{ - self endon( "disconnect" ); - self notify( "stop_player_monitor_travel_dist" ); - self endon( "stop_player_monitor_travel_dist" ); - prevpos = self.origin; - while ( 1 ) - { - wait 0,1; - self.pers[ "distance_traveled" ] += distance( self.origin, prevpos ); - prevpos = self.origin; - } -} - -player_monitor_time_played() -{ - self endon( "disconnect" ); - self notify( "stop_player_monitor_time_played" ); - self endon( "stop_player_monitor_time_played" ); - for ( ;; ) - { - wait 1; - maps/mp/zombies/_zm_stats::increment_client_stat( "time_played_total" ); - } -} - -reset_rampage_bookmark_kill_times() -{ - if ( !isDefined( self.rampage_bookmark_kill_times ) ) - { - self.rampage_bookmark_kill_times = []; - self.ignore_rampage_kill_times = 0; - } - i = 0; - while ( i < level.rampage_bookmark_kill_times_count ) - { - self.rampage_bookmark_kill_times[ i ] = 0; - i++; - } -} - -add_rampage_bookmark_kill_time() -{ - now = getTime(); - if ( now <= self.ignore_rampage_kill_times ) - { - return; - } - oldest_index = 0; - oldest_time = now + 1; - i = 0; - while ( i < level.rampage_bookmark_kill_times_count ) - { - if ( !self.rampage_bookmark_kill_times[ i ] ) - { - oldest_index = i; - break; - } - else if ( oldest_time > self.rampage_bookmark_kill_times[ i ] ) - { - oldest_index = i; - oldest_time = self.rampage_bookmark_kill_times[ i ]; - } - i++; - } - self.rampage_bookmark_kill_times[ oldest_index ] = now; -} - -watch_rampage_bookmark() -{ - while ( 1 ) - { - wait 0,05; - waittillframeend; - now = getTime(); - oldest_allowed = now - level.rampage_bookmark_kill_times_msec; - players = get_players(); - player_index = 0; - while ( player_index < players.size ) - { - player = players[ player_index ]; -/# - if ( isDefined( player.pers[ "isBot" ] ) && player.pers[ "isBot" ] ) - { - player_index++; - continue; -#/ - } - else - { - time_index = 0; - while ( time_index < level.rampage_bookmark_kill_times_count ) - { - if ( !player.rampage_bookmark_kill_times[ time_index ] ) - { - break; - } - else if ( oldest_allowed > player.rampage_bookmark_kill_times[ time_index ] ) - { - player.rampage_bookmark_kill_times[ time_index ] = 0; - break; - } - else - { - time_index++; - } - } - if ( time_index >= level.rampage_bookmark_kill_times_count ) - { - maps/mp/_demo::bookmark( "zm_player_rampage", getTime(), player ); - player reset_rampage_bookmark_kill_times(); - player.ignore_rampage_kill_times = now + level.rampage_bookmark_kill_times_delay; - } - } - player_index++; - } - } -} - -player_grenade_multiattack_bookmark_watcher( grenade ) -{ - self endon( "disconnect" ); - waittillframeend; - if ( !isDefined( grenade ) ) - { - return; - } - inflictorentnum = grenade getentitynumber(); - inflictorenttype = grenade getentitytype(); - inflictorbirthtime = 0; - if ( isDefined( grenade.birthtime ) ) - { - inflictorbirthtime = grenade.birthtime; - } - ret_val = grenade waittill_any_timeout( 15, "explode" ); - if ( !isDefined( self ) || isDefined( ret_val ) && ret_val == "timeout" ) - { - return; - } - self.grenade_multiattack_count = 0; - self.grenade_multiattack_ent = undefined; - waittillframeend; - if ( !isDefined( self ) ) - { - return; - } - count = level.grenade_multiattack_bookmark_count; - if ( isDefined( grenade.grenade_multiattack_bookmark_count ) && grenade.grenade_multiattack_bookmark_count ) - { - count = grenade.grenade_multiattack_bookmark_count; - } - bookmark_string = "zm_player_grenade_multiattack"; - if ( isDefined( grenade.use_grenade_special_long_bookmark ) && grenade.use_grenade_special_long_bookmark ) - { - bookmark_string = "zm_player_grenade_special_long"; - } - else - { - if ( isDefined( grenade.use_grenade_special_bookmark ) && grenade.use_grenade_special_bookmark ) - { - bookmark_string = "zm_player_grenade_special"; - } - } - if ( count <= self.grenade_multiattack_count && isDefined( self.grenade_multiattack_ent ) ) - { - adddemobookmark( level.bookmark[ bookmark_string ], getTime(), self getentitynumber(), 255, 0, inflictorentnum, inflictorenttype, inflictorbirthtime, 0, self.grenade_multiattack_ent getentitynumber() ); - } - self.grenade_multiattack_count = 0; -} - -player_grenade_watcher() -{ - self endon( "disconnect" ); - self notify( "stop_player_grenade_watcher" ); - self endon( "stop_player_grenade_watcher" ); - self.grenade_multiattack_count = 0; - while ( 1 ) - { - self waittill( "grenade_fire", grenade, weapname ); - if ( isDefined( grenade ) && isalive( grenade ) ) - { - grenade.team = self.team; - } - self thread player_grenade_multiattack_bookmark_watcher( grenade ); - if ( isDefined( level.grenade_watcher ) ) - { - self [[ level.grenade_watcher ]]( grenade, weapname ); - } - } -} - -player_prevent_damage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) -{ - if ( !isDefined( einflictor ) || !isDefined( eattacker ) ) - { - return 0; - } - if ( einflictor == self || eattacker == self ) - { - return 0; - } - if ( isDefined( einflictor ) && isDefined( einflictor.team ) ) - { - if ( isDefined( einflictor.damage_own_team ) && !einflictor.damage_own_team ) - { - if ( einflictor.team == self.team ) - { - return 1; - } - } - } - return 0; -} - -player_revive_monitor() -{ - self endon( "disconnect" ); - self notify( "stop_player_revive_monitor" ); - self endon( "stop_player_revive_monitor" ); - while ( 1 ) - { - self waittill( "player_revived", reviver ); - if ( isDefined( level.isresetting_grief ) && level.isresetting_grief ) - { - continue; - } - bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "revived", self.origin ); - if ( isDefined( reviver ) ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "revive_up" ); - points = self.score_lost_when_downed; -/# - println( "ZM >> LAST STAND - points = " + points ); -#/ - reviver maps/mp/zombies/_zm_score::player_add_points( "reviver", points ); - self.score_lost_when_downed = 0; - } - } -} - -laststand_giveback_player_perks() -{ - while ( isDefined( self.laststand_perks ) ) - { - lost_perk_index = int( -1 ); - if ( self.laststand_perks.size > 1 ) - { - lost_perk_index = randomint( self.laststand_perks.size - 1 ); - } - i = 0; - while ( i < self.laststand_perks.size ) - { - if ( self hasperk( self.laststand_perks[ i ] ) ) - { - i++; - continue; - } - else if ( i == lost_perk_index ) - { - i++; - continue; - } - else - { - maps/mp/zombies/_zm_perks::give_perk( self.laststand_perks[ i ] ); - } - i++; - } - } -} - -remote_revive_watch() -{ - self endon( "death" ); - self endon( "player_revived" ); - keep_checking = 1; - while ( keep_checking ) - { - self waittill( "remote_revive", reviver ); - if ( reviver.team == self.team ) - { - keep_checking = 0; - } - } - self maps/mp/zombies/_zm_laststand::remote_revive( reviver ); -} - -remove_deadshot_bottle() -{ - wait 0,05; - if ( isDefined( self.lastactiveweapon ) && self.lastactiveweapon == "zombie_perk_bottle_deadshot" ) - { - self.lastactiveweapon = "none"; - } -} - -take_additionalprimaryweapon() -{ - weapon_to_take = undefined; - if ( isDefined( self._retain_perks ) && self._retain_perks ) - { - return weapon_to_take; - } - primary_weapons_that_can_be_taken = []; - primaryweapons = self getweaponslistprimaries(); - i = 0; - while ( i < primaryweapons.size ) - { - if ( maps/mp/zombies/_zm_weapons::is_weapon_included( primaryweapons[ i ] ) || maps/mp/zombies/_zm_weapons::is_weapon_upgraded( primaryweapons[ i ] ) ) - { - primary_weapons_that_can_be_taken[ primary_weapons_that_can_be_taken.size ] = primaryweapons[ i ]; - } - i++; - } - if ( primary_weapons_that_can_be_taken.size >= 3 ) - { - weapon_to_take = primary_weapons_that_can_be_taken[ primary_weapons_that_can_be_taken.size - 1 ]; - if ( weapon_to_take == self getcurrentweapon() ) - { - self switchtoweapon( primary_weapons_that_can_be_taken[ 0 ] ); - } - self takeweapon( weapon_to_take ); - } - return weapon_to_take; -} - -player_laststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) -{ -/# - println( "ZM >> LAST STAND - player_laststand called" ); -#/ - b_alt_visionset = 0; - self allowjump( 0 ); - currweapon = self getcurrentweapon(); - statweapon = currweapon; - if ( is_alt_weapon( statweapon ) ) - { - statweapon = weaponaltweaponname( statweapon ); - } - self addweaponstat( statweapon, "deathsDuringUse", 1 ); - if ( isDefined( self.hasperkspecialtytombstone ) && self.hasperkspecialtytombstone ) - { - self.laststand_perks = maps/mp/zombies/_zm_tombstone::tombstone_save_perks( self ); - } - players = get_players(); - if ( players.size == 1 && flag( "solo_game" ) ) - { - if ( self.lives > 0 && self hasperk( "specialty_quickrevive" ) ) - { - self thread wait_and_revive(); - } - } - if ( self hasperk( "specialty_additionalprimaryweapon" ) ) - { - primary_weapons_that_can_be_taken = []; - primaryweapons = self getweaponslistprimaries(); - i = 0; - while ( i < primaryweapons.size ) - { - if ( maps/mp/zombies/_zm_weapons::is_weapon_included( primaryweapons[ i ] ) || maps/mp/zombies/_zm_weapons::is_weapon_upgraded( primaryweapons[ i ] ) ) - { - primary_weapons_that_can_be_taken[ primary_weapons_that_can_be_taken.size ] = primaryweapons[ i ]; - } - i++; - } - if ( primary_weapons_that_can_be_taken.size >= 3 ) - { - weapon_to_take = primary_weapons_that_can_be_taken[ primary_weapons_that_can_be_taken.size - 1 ]; - self takeweapon( weapon_to_take ); - self.weapon_taken_by_losing_specialty_additionalprimaryweapon = weapon_to_take; - } - } - if ( isDefined( self.hasperkspecialtytombstone ) && self.hasperkspecialtytombstone ) - { - self [[ level.tombstone_laststand_func ]](); - self thread [[ level.tombstone_spawn_func ]](); - self.hasperkspecialtytombstone = undefined; - self notify( "specialty_scavenger_stop" ); - } - self clear_is_drinking(); - self thread remove_deadshot_bottle(); - self thread remote_revive_watch(); - self maps/mp/zombies/_zm_score::player_downed_penalty(); - self disableoffhandweapons(); - self thread last_stand_grenade_save_and_return(); - if ( smeansofdeath != "MOD_SUICIDE" && smeansofdeath != "MOD_FALLING" ) - { - if ( isDefined( self.intermission ) && !self.intermission ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "revive_down" ); - } - else - { - if ( isDefined( level.custom_player_death_vo_func ) && !( self [[ level.custom_player_death_vo_func ]]() ) ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "exert_death" ); - } - } - } - bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "downed", self.origin ); - if ( isDefined( level._zombie_minigun_powerup_last_stand_func ) ) - { - self thread [[ level._zombie_minigun_powerup_last_stand_func ]](); - } - if ( isDefined( level._zombie_tesla_powerup_last_stand_func ) ) - { - self thread [[ level._zombie_tesla_powerup_last_stand_func ]](); - } - if ( self hasperk( "specialty_grenadepulldeath" ) ) - { - b_alt_visionset = 1; - if ( isDefined( level.custom_laststand_func ) ) - { - self thread [[ level.custom_laststand_func ]](); - } - } - if ( isDefined( self.intermission ) && self.intermission ) - { - bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "died", self.origin ); - wait 0,5; - self stopsounds(); - level waittill( "forever" ); - } - if ( !b_alt_visionset ) - { - visionsetlaststand( "zombie_last_stand", 1 ); - } -} - -failsafe_revive_give_back_weapons( excluded_player ) -{ - i = 0; - while ( i < 10 ) - { - wait 0,05; - players = get_players(); - _a2497 = players; - _k2497 = getFirstArrayKey( _a2497 ); - while ( isDefined( _k2497 ) ) - { - player = _a2497[ _k2497 ]; - if ( excluded_player != player || !isDefined( player.reviveprogressbar ) && player maps/mp/zombies/_zm_laststand::is_reviving_any() ) - { - } - else - { -/# - iprintlnbold( "FAILSAFE CLEANING UP REVIVE HUD AND GUN" ); -#/ - player maps/mp/zombies/_zm_laststand::revive_give_back_weapons( "none" ); - if ( isDefined( player.reviveprogressbar ) ) - { - player.reviveprogressbar maps/mp/gametypes_zm/_hud_util::destroyelem(); - } - if ( isDefined( player.revivetexthud ) ) - { - player.revivetexthud destroy(); - } - } - _k2497 = getNextArrayKey( _a2497, _k2497 ); - } - i++; - } -} - -spawnspectator() -{ - self endon( "disconnect" ); - self endon( "spawned_spectator" ); - self notify( "spawned" ); - self notify( "end_respawn" ); - if ( level.intermission ) - { - return; - } - if ( isDefined( level.no_spectator ) && level.no_spectator ) - { - wait 3; - exitlevel(); - } - self.is_zombie = 1; - level thread failsafe_revive_give_back_weapons( self ); - self notify( "zombified" ); - if ( isDefined( self.revivetrigger ) ) - { - self.revivetrigger delete(); - self.revivetrigger = undefined; - } - self.zombification_time = getTime(); - resettimeout(); - self stopshellshock(); - self stoprumble( "damage_heavy" ); - self.sessionstate = "spectator"; - self.spectatorclient = -1; - self.maxhealth = self.health; - self.shellshocked = 0; - self.inwater = 0; - self.friendlydamage = undefined; - self.hasspawned = 1; - self.spawntime = getTime(); - self.afk = 0; -/# - println( "*************************Zombie Spectator***" ); -#/ - self detachall(); - if ( isDefined( level.custom_spectate_permissions ) ) - { - self [[ level.custom_spectate_permissions ]](); - } - else - { - self setspectatepermissions( 1 ); - } - self thread spectator_thread(); - self spawn( self.origin, self.angles ); - self notify( "spawned_spectator" ); -} - -setspectatepermissions( ison ) -{ - if ( ison ) - { - self allowspectateteam( "allies", self.team == "allies" ); - } - if ( ison ) - { - self allowspectateteam( "axis", self.team == "axis" ); - } - self allowspectateteam( "freelook", 0 ); - self allowspectateteam( "none", 0 ); -} - -spectator_thread() -{ - self endon( "disconnect" ); - self endon( "spawned_player" ); -} - -spectator_toggle_3rd_person() -{ - self endon( "disconnect" ); - self endon( "spawned_player" ); - third_person = 1; - self set_third_person( 1 ); -} - -set_third_person( value ) -{ - if ( value ) - { - self setclientthirdperson( 1 ); - self setclientthirdpersonangle( 354 ); - self setdepthoffield( 0, 128, 512, 4000, 6, 1,8 ); - } - else - { - self setclientthirdperson( 0 ); - self setclientthirdpersonangle( 0 ); - self setdepthoffield( 0, 0, 512, 4000, 4, 0 ); - } - self resetfov(); -} - -last_stand_revive() -{ - level endon( "between_round_over" ); - players = get_players(); - laststand_count = 0; - _a2687 = players; - _k2687 = getFirstArrayKey( _a2687 ); - while ( isDefined( _k2687 ) ) - { - player = _a2687[ _k2687 ]; - if ( !is_player_valid( player ) ) - { - laststand_count++; - } - _k2687 = getNextArrayKey( _a2687, _k2687 ); - } - while ( laststand_count == players.size ) - { - i = 0; - while ( i < players.size ) - { - if ( players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() && players[ i ].revivetrigger.beingrevived == 0 ) - { - players[ i ] maps/mp/zombies/_zm_laststand::auto_revive( players[ i ] ); - } - i++; - } - } -} - -last_stand_pistol_rank_init() -{ - level.pistol_values = []; - level.pistol_values[ level.pistol_values.size ] = "m1911_zm"; - level.pistol_values[ level.pistol_values.size ] = "cz75_zm"; - level.pistol_values[ level.pistol_values.size ] = "cz75dw_zm"; - level.pistol_values[ level.pistol_values.size ] = "python_zm"; - level.pistol_values[ level.pistol_values.size ] = "python_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "judge_zm"; - level.pistol_values[ level.pistol_values.size ] = "judge_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "kard_zm"; - level.pistol_values[ level.pistol_values.size ] = "kard_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "fiveseven_zm"; - level.pistol_values[ level.pistol_values.size ] = "fiveseven_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "beretta93r_zm"; - level.pistol_values[ level.pistol_values.size ] = "beretta93r_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "fivesevendw_zm"; - level.pistol_values[ level.pistol_values.size ] = "fivesevendw_upgraded_zm"; - level.pistol_value_solo_replace_below = level.pistol_values.size - 1; - level.pistol_values[ level.pistol_values.size ] = "cz75_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "cz75dw_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "m1911_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "ray_gun_zm"; - level.pistol_values[ level.pistol_values.size ] = "freezegun_zm"; - level.pistol_values[ level.pistol_values.size ] = "ray_gun_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "freezegun_upgraded_zm"; - level.pistol_values[ level.pistol_values.size ] = "microwavegundw_zm"; - level.pistol_values[ level.pistol_values.size ] = "microwavegundw_upgraded_zm"; -} - -last_stand_pistol_swap() -{ - if ( self has_powerup_weapon() ) - { - self.lastactiveweapon = "none"; - } - if ( !self hasweapon( self.laststandpistol ) ) - { - self giveweapon( self.laststandpistol ); - } - ammoclip = weaponclipsize( self.laststandpistol ); - doubleclip = ammoclip * 2; - if ( isDefined( self._special_solo_pistol_swap ) || self._special_solo_pistol_swap && self.laststandpistol == "m1911_upgraded_zm" && !self.hadpistol ) - { - self._special_solo_pistol_swap = 0; - self.hadpistol = 0; - self setweaponammostock( self.laststandpistol, doubleclip ); - } - else - { - if ( flag( "solo_game" ) && self.laststandpistol == "m1911_upgraded_zm" ) - { - self setweaponammostock( self.laststandpistol, doubleclip ); - } - else - { - if ( self.laststandpistol == "m1911_zm" ) - { - self setweaponammostock( self.laststandpistol, doubleclip ); - } - else if ( self.laststandpistol == "ray_gun_zm" || self.laststandpistol == "ray_gun_upgraded_zm" ) - { - if ( self.stored_weapon_info[ self.laststandpistol ].total_amt >= ammoclip ) - { - self setweaponammoclip( self.laststandpistol, ammoclip ); - self.stored_weapon_info[ self.laststandpistol ].given_amt = ammoclip; - } - else - { - self setweaponammoclip( self.laststandpistol, self.stored_weapon_info[ self.laststandpistol ].total_amt ); - self.stored_weapon_info[ self.laststandpistol ].given_amt = self.stored_weapon_info[ self.laststandpistol ].total_amt; - } - self setweaponammostock( self.laststandpistol, 0 ); - } - else - { - if ( self.stored_weapon_info[ self.laststandpistol ].stock_amt >= doubleclip ) - { - self setweaponammostock( self.laststandpistol, doubleclip ); - self.stored_weapon_info[ self.laststandpistol ].given_amt = doubleclip + self.stored_weapon_info[ self.laststandpistol ].clip_amt + self.stored_weapon_info[ self.laststandpistol ].left_clip_amt; - } - else - { - self setweaponammostock( self.laststandpistol, self.stored_weapon_info[ self.laststandpistol ].stock_amt ); - self.stored_weapon_info[ self.laststandpistol ].given_amt = self.stored_weapon_info[ self.laststandpistol ].total_amt; - } - } - } - } - self switchtoweapon( self.laststandpistol ); -} - -last_stand_best_pistol() -{ - pistol_array = []; - current_weapons = self getweaponslistprimaries(); - i = 0; - while ( i < current_weapons.size ) - { - class = weaponclass( current_weapons[ i ] ); - if ( issubstr( current_weapons[ i ], "knife_ballistic_" ) ) - { - class = "knife"; - } - while ( class != "pistol" || class == "pistolspread" && class == "pistol spread" ) - { - if ( current_weapons[ i ] != "m1911_zm" || !flag( "solo_game" ) && !flag( "solo_game" ) && current_weapons[ i ] != "m1911_upgraded_zm" ) - { - if ( self getammocount( current_weapons[ i ] ) <= 0 ) - { - i++; - continue; - } - } - else pistol_array_index = pistol_array.size; - pistol_array[ pistol_array_index ] = spawnstruct(); - pistol_array[ pistol_array_index ].gun = current_weapons[ i ]; - pistol_array[ pistol_array_index ].value = 0; - j = 0; - while ( j < level.pistol_values.size ) - { - if ( level.pistol_values[ j ] == current_weapons[ i ] ) - { - pistol_array[ pistol_array_index ].value = j; - i++; - continue; - } - else - { - j++; - } - } - } - i++; - } - self.laststandpistol = last_stand_compare_pistols( pistol_array ); -} - -last_stand_compare_pistols( struct_array ) -{ - if ( !isarray( struct_array ) || struct_array.size <= 0 ) - { - self.hadpistol = 0; - while ( isDefined( self.stored_weapon_info ) ) - { - stored_weapon_info = getarraykeys( self.stored_weapon_info ); - j = 0; - while ( j < stored_weapon_info.size ) - { - if ( stored_weapon_info[ j ] == level.laststandpistol ) - { - self.hadpistol = 1; - } - j++; - } - } - return level.laststandpistol; - } - highest_score_pistol = struct_array[ 0 ]; - i = 1; - while ( i < struct_array.size ) - { - if ( struct_array[ i ].value > highest_score_pistol.value ) - { - highest_score_pistol = struct_array[ i ]; - } - i++; - } - if ( flag( "solo_game" ) ) - { - self._special_solo_pistol_swap = 0; - if ( highest_score_pistol.value <= level.pistol_value_solo_replace_below ) - { - self.hadpistol = 0; - self._special_solo_pistol_swap = 1; - if ( isDefined( level.force_solo_quick_revive ) && level.force_solo_quick_revive && !self hasperk( "specialty_quickrevive" ) && !self hasperk( "specialty_quickrevive" ) ) - { - return highest_score_pistol.gun; - } - else - { - return level.laststandpistol; - } - } - else - { - return highest_score_pistol.gun; - } - } - else - { - return highest_score_pistol.gun; - } -} - -last_stand_save_pistol_ammo() -{ - weapon_inventory = self getweaponslist( 1 ); - self.stored_weapon_info = []; - i = 0; - while ( i < weapon_inventory.size ) - { - weapon = weapon_inventory[ i ]; - class = weaponclass( weapon ); - if ( issubstr( weapon, "knife_ballistic_" ) ) - { - class = "knife"; - } - if ( class != "pistol" || class == "pistolspread" && class == "pistol spread" ) - { - self.stored_weapon_info[ weapon ] = spawnstruct(); - self.stored_weapon_info[ weapon ].clip_amt = self getweaponammoclip( weapon ); - self.stored_weapon_info[ weapon ].left_clip_amt = 0; - dual_wield_name = weapondualwieldweaponname( weapon ); - if ( dual_wield_name != "none" ) - { - self.stored_weapon_info[ weapon ].left_clip_amt = self getweaponammoclip( dual_wield_name ); - } - self.stored_weapon_info[ weapon ].stock_amt = self getweaponammostock( weapon ); - self.stored_weapon_info[ weapon ].total_amt = self.stored_weapon_info[ weapon ].clip_amt + self.stored_weapon_info[ weapon ].left_clip_amt + self.stored_weapon_info[ weapon ].stock_amt; - self.stored_weapon_info[ weapon ].given_amt = 0; - } - i++; - } - self last_stand_best_pistol(); -} - -last_stand_restore_pistol_ammo() -{ - self.weapon_taken_by_losing_specialty_additionalprimaryweapon = undefined; - if ( !isDefined( self.stored_weapon_info ) ) - { - return; - } - weapon_inventory = self getweaponslist( 1 ); - weapon_to_restore = getarraykeys( self.stored_weapon_info ); - i = 0; - while ( i < weapon_inventory.size ) - { - weapon = weapon_inventory[ i ]; - if ( weapon != self.laststandpistol ) - { - i++; - continue; - } - else j = 0; - while ( j < weapon_to_restore.size ) - { - check_weapon = weapon_to_restore[ j ]; - if ( weapon == check_weapon ) - { - dual_wield_name = weapondualwieldweaponname( weapon_to_restore[ j ] ); - if ( weapon != "m1911_zm" ) - { - last_clip = self getweaponammoclip( weapon ); - last_left_clip = 0; - if ( dual_wield_name != "none" ) - { - last_left_clip = self getweaponammoclip( dual_wield_name ); - } - last_stock = self getweaponammostock( weapon ); - last_total = last_clip + last_left_clip + last_stock; - used_amt = self.stored_weapon_info[ weapon ].given_amt - last_total; - if ( used_amt >= self.stored_weapon_info[ weapon ].stock_amt ) - { - used_amt -= self.stored_weapon_info[ weapon ].stock_amt; - self.stored_weapon_info[ weapon ].stock_amt = 0; - self.stored_weapon_info[ weapon ].clip_amt -= used_amt; - if ( self.stored_weapon_info[ weapon ].clip_amt < 0 ) - { - self.stored_weapon_info[ weapon ].clip_amt = 0; - } - break; - } - else - { - new_stock_amt = self.stored_weapon_info[ weapon ].stock_amt - used_amt; - if ( new_stock_amt < self.stored_weapon_info[ weapon ].stock_amt ) - { - self.stored_weapon_info[ weapon ].stock_amt = new_stock_amt; - } - } - } - self setweaponammoclip( weapon_to_restore[ j ], self.stored_weapon_info[ weapon_to_restore[ j ] ].clip_amt ); - if ( dual_wield_name != "none" ) - { - self setweaponammoclip( dual_wield_name, self.stored_weapon_info[ weapon_to_restore[ j ] ].left_clip_amt ); - } - self setweaponammostock( weapon_to_restore[ j ], self.stored_weapon_info[ weapon_to_restore[ j ] ].stock_amt ); - i++; - continue; - } - else - { - j++; - } - } - i++; - } -} - -zombiemode_solo_last_stand_pistol() -{ - level.laststandpistol = "m1911_upgraded_zm"; -} - -last_stand_take_thrown_grenade() -{ - self endon( "disconnect" ); - self endon( "bled_out" ); - self endon( "player_revived" ); - self waittill( "grenade_fire", grenade, weaponname ); - if ( isDefined( self.lsgsar_lethal ) && weaponname == self.lsgsar_lethal ) - { - self.lsgsar_lethal_nade_amt--; - - } - if ( isDefined( self.lsgsar_tactical ) && weaponname == self.lsgsar_tactical ) - { - self.lsgsar_tactical_nade_amt--; - - } -} - -last_stand_grenade_save_and_return() -{ - if ( isDefined( level.isresetting_grief ) && level.isresetting_grief ) - { - return; - } - self endon( "disconnect" ); - self endon( "bled_out" ); - level endon( "between_round_over" ); - self.lsgsar_lethal_nade_amt = 0; - self.lsgsar_has_lethal_nade = 0; - self.lsgsar_tactical_nade_amt = 0; - self.lsgsar_has_tactical_nade = 0; - self.lsgsar_lethal = undefined; - self.lsgsar_tactical = undefined; - if ( self isthrowinggrenade() ) - { - self thread last_stand_take_thrown_grenade(); - } - weapons_on_player = self getweaponslist( 1 ); - i = 0; - while ( i < weapons_on_player.size ) - { - if ( self is_player_lethal_grenade( weapons_on_player[ i ] ) ) - { - self.lsgsar_has_lethal_nade = 1; - self.lsgsar_lethal = self get_player_lethal_grenade(); - self.lsgsar_lethal_nade_amt = self getweaponammoclip( self get_player_lethal_grenade() ); - self setweaponammoclip( self get_player_lethal_grenade(), 0 ); - self takeweapon( self get_player_lethal_grenade() ); - i++; - continue; - } - else - { - if ( self is_player_tactical_grenade( weapons_on_player[ i ] ) ) - { - self.lsgsar_has_tactical_nade = 1; - self.lsgsar_tactical = self get_player_tactical_grenade(); - self.lsgsar_tactical_nade_amt = self getweaponammoclip( self get_player_tactical_grenade() ); - self setweaponammoclip( self get_player_tactical_grenade(), 0 ); - self takeweapon( self get_player_tactical_grenade() ); - } - } - i++; - } - self waittill( "player_revived" ); - if ( self.lsgsar_has_lethal_nade ) - { - self set_player_lethal_grenade( self.lsgsar_lethal ); - self giveweapon( self.lsgsar_lethal ); - self setweaponammoclip( self.lsgsar_lethal, self.lsgsar_lethal_nade_amt ); - } - if ( self.lsgsar_has_tactical_nade ) - { - self set_player_tactical_grenade( self.lsgsar_tactical ); - self giveweapon( self.lsgsar_tactical ); - self setweaponammoclip( self.lsgsar_tactical, self.lsgsar_tactical_nade_amt ); - } - self.lsgsar_lethal_nade_amt = undefined; - self.lsgsar_has_lethal_nade = undefined; - self.lsgsar_tactical_nade_amt = undefined; - self.lsgsar_has_tactical_nade = undefined; - self.lsgsar_lethal = undefined; - self.lsgsar_tactical = undefined; -} - -spectators_respawn() -{ - level endon( "between_round_over" ); - if ( !isDefined( level.zombie_vars[ "spectators_respawn" ] ) || !level.zombie_vars[ "spectators_respawn" ] ) - { - return; - } - if ( !isDefined( level.custom_spawnplayer ) ) - { - level.custom_spawnplayer = ::spectator_respawn; - } - while ( 1 ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ].sessionstate == "spectator" && isDefined( players[ i ].spectator_respawn ) ) - { - players[ i ] [[ level.spawnplayer ]](); - thread refresh_player_navcard_hud(); - if ( isDefined( level.script ) && level.round_number > 6 && players[ i ].score < 1500 ) - { - players[ i ].old_score = players[ i ].score; - if ( isDefined( level.spectator_respawn_custom_score ) ) - { - players[ i ] [[ level.spectator_respawn_custom_score ]](); - } - players[ i ].score = 1500; - } - } - i++; - } - wait 1; - } -} - -spectator_respawn() -{ -/# - println( "*************************Respawn Spectator***" ); -#/ -/# - assert( isDefined( self.spectator_respawn ) ); -#/ - origin = self.spectator_respawn.origin; - angles = self.spectator_respawn.angles; - self setspectatepermissions( 0 ); - new_origin = undefined; - if ( isDefined( level.check_valid_spawn_override ) ) - { - new_origin = [[ level.check_valid_spawn_override ]]( self ); - } - if ( !isDefined( new_origin ) ) - { - new_origin = check_for_valid_spawn_near_team( self, 1 ); - } - if ( isDefined( new_origin ) ) - { - if ( !isDefined( new_origin.angles ) ) - { - angles = ( 0, 0, -1 ); - } - else - { - angles = new_origin.angles; - } - self spawn( new_origin.origin, angles ); - } - else - { - self spawn( origin, angles ); - } - if ( isDefined( self get_player_placeable_mine() ) ) - { - self takeweapon( self get_player_placeable_mine() ); - self set_player_placeable_mine( undefined ); - } - self maps/mp/zombies/_zm_equipment::equipment_take(); - self.is_burning = undefined; - self.abilities = []; - self.is_zombie = 0; - self.ignoreme = 0; - setclientsysstate( "lsm", "0", self ); - self reviveplayer(); - self notify( "spawned_player" ); - if ( isDefined( level._zombiemode_post_respawn_callback ) ) - { - self thread [[ level._zombiemode_post_respawn_callback ]](); - } - self maps/mp/zombies/_zm_score::player_reduce_points( "died" ); - self maps/mp/zombies/_zm_melee_weapon::spectator_respawn_all(); - claymore_triggers = getentarray( "claymore_purchase", "targetname" ); - i = 0; - while ( i < claymore_triggers.size ) - { - claymore_triggers[ i ] setvisibletoplayer( self ); - claymore_triggers[ i ].claymores_triggered = 0; - i++; - } - self thread player_zombie_breadcrumb(); - return 1; -} - -check_for_valid_spawn_near_team( revivee, return_struct ) -{ - if ( isDefined( level.check_for_valid_spawn_near_team_callback ) ) - { - spawn_location = [[ level.check_for_valid_spawn_near_team_callback ]]( revivee, return_struct ); - return spawn_location; - } - else - { - players = get_players(); - spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype(); - closest_group = undefined; - closest_distance = 100000000; - backup_group = undefined; - backup_distance = 100000000; - if ( spawn_points.size == 0 ) - { - return undefined; - } - i = 0; - while ( i < players.size ) - { - while ( is_player_valid( players[ i ], undefined, 1 ) && players[ i ] != self ) - { - j = 0; - while ( j < spawn_points.size ) - { - if ( isDefined( spawn_points[ j ].script_int ) ) - { - ideal_distance = spawn_points[ j ].script_int; - } - else - { - ideal_distance = 1000; - } - if ( spawn_points[ j ].locked == 0 ) - { - plyr_dist = distancesquared( players[ i ].origin, spawn_points[ j ].origin ); - if ( plyr_dist < ( ideal_distance * ideal_distance ) ) - { - if ( plyr_dist < closest_distance ) - { - closest_distance = plyr_dist; - closest_group = j; - } - j++; - continue; - } - else - { - if ( plyr_dist < backup_distance ) - { - backup_group = j; - backup_distance = plyr_dist; - } - } - } - j++; - } - } - if ( !isDefined( closest_group ) ) - { - closest_group = backup_group; - } - if ( isDefined( closest_group ) ) - { - spawn_location = get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ); - if ( isDefined( spawn_location ) ) - { - return spawn_location; - } - } - i++; - } - return undefined; - } -} - -get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ) -{ - spawn_array = getstructarray( spawn_points[ closest_group ].target, "targetname" ); - spawn_array = array_randomize( spawn_array ); - k = 0; - while ( k < spawn_array.size ) - { - if ( isDefined( spawn_array[ k ].plyr ) && spawn_array[ k ].plyr == revivee getentitynumber() ) - { - if ( positionwouldtelefrag( spawn_array[ k ].origin ) ) - { - spawn_array[ k ].plyr = undefined; - break; - } - else if ( isDefined( return_struct ) && return_struct ) - { - return spawn_array[ k ]; - } - else - { - return spawn_array[ k ].origin; - } - } - k++; - } - k = 0; - while ( k < spawn_array.size ) - { - if ( positionwouldtelefrag( spawn_array[ k ].origin ) ) - { - k++; - continue; - } - else if ( !isDefined( spawn_array[ k ].plyr ) || spawn_array[ k ].plyr == revivee getentitynumber() ) - { - spawn_array[ k ].plyr = revivee getentitynumber(); - if ( isDefined( return_struct ) && return_struct ) - { - return spawn_array[ k ]; - } - else - { - return spawn_array[ k ].origin; - } - } - k++; - } - if ( isDefined( return_struct ) && return_struct ) - { - return spawn_array[ 0 ]; - } - return spawn_array[ 0 ].origin; -} - -check_for_valid_spawn_near_position( revivee, v_position, return_struct ) -{ - spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype(); - if ( spawn_points.size == 0 ) - { - return undefined; - } - closest_group = undefined; - closest_distance = 100000000; - backup_group = undefined; - backup_distance = 100000000; - i = 0; - while ( i < spawn_points.size ) - { - if ( isDefined( spawn_points[ i ].script_int ) ) - { - ideal_distance = spawn_points[ i ].script_int; - } - else - { - ideal_distance = 1000; - } - if ( spawn_points[ i ].locked == 0 ) - { - dist = distancesquared( v_position, spawn_points[ i ].origin ); - if ( dist < ( ideal_distance * ideal_distance ) ) - { - if ( dist < closest_distance ) - { - closest_distance = dist; - closest_group = i; - } - break; - } - else - { - if ( dist < backup_distance ) - { - backup_group = i; - backup_distance = dist; - } - } - } - if ( !isDefined( closest_group ) ) - { - closest_group = backup_group; - } - i++; - } - if ( isDefined( closest_group ) ) - { - spawn_location = get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ); - if ( isDefined( spawn_location ) ) - { - return spawn_location; - } - } - return undefined; -} - -check_for_valid_spawn_within_range( revivee, v_position, return_struct, min_distance, max_distance ) -{ - spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype(); - if ( spawn_points.size == 0 ) - { - return undefined; - } - closest_group = undefined; - closest_distance = 100000000; - i = 0; - while ( i < spawn_points.size ) - { - if ( spawn_points[ i ].locked == 0 ) - { - dist = distance( v_position, spawn_points[ i ].origin ); - if ( dist >= min_distance && dist <= max_distance ) - { - if ( dist < closest_distance ) - { - closest_distance = dist; - closest_group = i; - } - } - } - i++; - } - if ( isDefined( closest_group ) ) - { - spawn_location = get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ); - if ( isDefined( spawn_location ) ) - { - return spawn_location; - } - } - return undefined; -} - -get_players_on_team( exclude ) -{ - teammates = []; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ].spawn_side == self.spawn_side && !isDefined( players[ i ].revivetrigger ) && players[ i ] != exclude ) - { - teammates[ teammates.size ] = players[ i ]; - } - i++; - } - return teammates; -} - -get_safe_breadcrumb_pos( player ) -{ - players = get_players(); - valid_players = []; - min_dist = 22500; - i = 0; - while ( i < players.size ) - { - if ( !is_player_valid( players[ i ] ) ) - { - i++; - continue; - } - else - { - valid_players[ valid_players.size ] = players[ i ]; - } - i++; - } - i = 0; - while ( i < valid_players.size ) - { - count = 0; - q = 1; - while ( q < player.zombie_breadcrumbs.size ) - { - if ( distancesquared( player.zombie_breadcrumbs[ q ], valid_players[ i ].origin ) < min_dist ) - { - q++; - continue; - } - else - { - count++; - if ( count == valid_players.size ) - { - return player.zombie_breadcrumbs[ q ]; - } - } - q++; - } - i++; - } - return undefined; -} - -default_max_zombie_func( max_num ) -{ - max = max_num; - if ( level.round_number < 2 ) - { - max = int( max_num * 0,25 ); - } - else if ( level.round_number < 3 ) - { - max = int( max_num * 0,3 ); - } - else if ( level.round_number < 4 ) - { - max = int( max_num * 0,5 ); - } - else if ( level.round_number < 5 ) - { - max = int( max_num * 0,7 ); - } - else - { - if ( level.round_number < 6 ) - { - max = int( max_num * 0,9 ); - } - } - return max; -} - -round_spawning() -{ - level endon( "intermission" ); - level endon( "end_of_round" ); - level endon( "restart_round" ); -/# - level endon( "kill_round" ); -#/ - if ( level.intermission ) - { - return; - } -/# - if ( getDvarInt( "zombie_cheat" ) == 2 || getDvarInt( "zombie_cheat" ) >= 4 ) - { - return; -#/ - } - if ( level.zombie_spawn_locations.size < 1 ) - { -/# - assertmsg( "No active spawners in the map. Check to see if the zone is active and if it's pointing to spawners." ); -#/ - return; - } - ai_calculate_health( level.round_number ); - count = 0; - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ].zombification_time = 0; - i++; - } - max = level.zombie_vars[ "zombie_max_ai" ]; - multiplier = level.round_number / 5; - if ( multiplier < 1 ) - { - multiplier = 1; - } - if ( level.round_number >= 10 ) - { - multiplier *= level.round_number * 0,15; - } - player_num = get_players().size; - if ( player_num == 1 ) - { - max += int( 0,5 * level.zombie_vars[ "zombie_ai_per_player" ] * multiplier ); - } - else - { - max += int( ( player_num - 1 ) * level.zombie_vars[ "zombie_ai_per_player" ] * multiplier ); - } - if ( !isDefined( level.max_zombie_func ) ) - { - level.max_zombie_func = ::default_max_zombie_func; - } - if ( isDefined( level.kill_counter_hud ) && level.zombie_total > 0 ) - { - level.zombie_total = [[ level.max_zombie_func ]]( max ); - level notify( "zombie_total_set" ); - } - if ( isDefined( level.zombie_total_set_func ) ) - { - level thread [[ level.zombie_total_set_func ]](); - } - if ( level.round_number < 10 || level.speed_change_max > 0 ) - { - level thread zombie_speed_up(); - } - mixed_spawns = 0; - old_spawn = undefined; - while ( 1 ) - { - while ( get_current_zombie_count() >= level.zombie_ai_limit || level.zombie_total <= 0 ) - { - wait 0,1; - } - while ( get_current_actor_count() >= level.zombie_actor_limit ) - { - clear_all_corpses(); - wait 0,1; - } - if ( !flag( "spawn_zombies" ) ) - { - flag_wait( "spawn_zombies" ); - } - while ( level.zombie_spawn_locations.size <= 0 ) - { - wait 0,1; - } - spawn_point = level.zombie_spawn_locations[ randomint( level.zombie_spawn_locations.size ) ]; - if ( !isDefined( old_spawn ) ) - { - old_spawn = spawn_point; - } - else - { - if ( spawn_point == old_spawn ) - { - spawn_point = level.zombie_spawn_locations[ randomint( level.zombie_spawn_locations.size ) ]; - } - } - old_spawn = spawn_point; - while ( isDefined( level.mixed_rounds_enabled ) && level.mixed_rounds_enabled == 1 ) - { - spawn_dog = 0; - if ( level.round_number > 30 ) - { - if ( randomint( 100 ) < 3 ) - { - spawn_dog = 1; - } - } - else if ( level.round_number > 25 && mixed_spawns < 3 ) - { - if ( randomint( 100 ) < 2 ) - { - spawn_dog = 1; - } - } - else - { - if ( level.round_number > 20 && mixed_spawns < 2 ) - { - if ( randomint( 100 ) < 2 ) - { - spawn_dog = 1; - } - break; - } - else - { - if ( level.round_number > 15 && mixed_spawns < 1 ) - { - if ( randomint( 100 ) < 1 ) - { - spawn_dog = 1; - } - } - } - } - while ( spawn_dog ) - { - keys = getarraykeys( level.zones ); - i = 0; - while ( i < keys.size ) - { - while ( level.zones[ keys[ i ] ].is_occupied ) - { - akeys = getarraykeys( level.zones[ keys[ i ] ].adjacent_zones ); - k = 0; - while ( k < akeys.size ) - { - if ( level.zones[ akeys[ k ] ].is_active && !level.zones[ akeys[ k ] ].is_occupied && level.zones[ akeys[ k ] ].dog_locations.size > 0 ) - { - maps/mp/zombies/_zm_ai_dogs::special_dog_spawn( undefined, 1 ); - level.zombie_total--; - - wait_network_frame(); - } - k++; - } - } - i++; - } - } - } - if ( isDefined( level.zombie_spawners ) ) - { - if ( isDefined( level.use_multiple_spawns ) && level.use_multiple_spawns && isDefined( level.spawner_int ) ) - { - if ( isDefined( level.zombie_spawn[ level.spawner_int ] ) && level.zombie_spawn[ level.spawner_int ].size > 0 ) - { - spawner = random( level.zombie_spawn[ level.spawner_int ] ); - } - else - { - spawner = random( level.zombie_spawners ); - } - } - else - { - spawner = random( level.zombie_spawners ); - } - ai = spawn_zombie( spawner, spawner.targetname, spawn_point ); - } - if ( isDefined( ai ) ) - { - level.zombie_total--; - - ai thread round_spawn_failsafe(); - count++; - } - wait level.zombie_vars[ "zombie_spawn_delay" ]; - wait_network_frame(); - } -} - -zombie_speed_up() -{ - if ( level.round_number <= 3 ) - { - return; - } - level endon( "intermission" ); - level endon( "end_of_round" ); - level endon( "restart_round" ); -/# - level endon( "kill_round" ); -#/ - while ( level.zombie_total > 4 ) - { - wait 2; - } - num_zombies = get_current_zombie_count(); - while ( num_zombies > 3 ) - { - wait 2; - num_zombies = get_current_zombie_count(); - } - zombies = get_round_enemy_array(); - while ( zombies.size > 0 ) - { - if ( zombies.size == 1 && isDefined( zombies[ 0 ].has_legs ) && zombies[ 0 ].has_legs ) - { - if ( isDefined( level.zombie_speed_up ) ) - { - zombies[ 0 ] thread [[ level.zombie_speed_up ]](); - break; - } - else - { - if ( zombies[ 0 ].zombie_move_speed != "sprint" ) - { - zombies[ 0 ] set_zombie_run_cycle( "sprint" ); - zombies[ 0 ].zombie_move_speed_original = zombies[ 0 ].zombie_move_speed; - } - } - } - wait 0,5; - zombies = get_round_enemy_array(); - } -} - -round_spawning_test() -{ - while ( 1 ) - { - spawn_point = level.zombie_spawn_locations[ randomint( level.zombie_spawn_locations.size ) ]; - spawner = random( level.zombie_spawners ); - ai = spawn_zombie( spawner, spawner.targetname, spawn_point ); - ai waittill( "death" ); - wait 5; - } -} - -round_pause( delay ) -{ - if ( !isDefined( delay ) ) - { - delay = 30; - } - level.countdown_hud = create_counter_hud(); - level.countdown_hud setvalue( delay ); - level.countdown_hud.color = ( 0, 0, -1 ); - level.countdown_hud.alpha = 1; - level.countdown_hud fadeovertime( 2 ); - wait 2; - level.countdown_hud.color = vectorScale( ( 0, 0, -1 ), 0,21 ); - level.countdown_hud fadeovertime( 3 ); - wait 3; - while ( delay >= 1 ) - { - wait 1; - delay--; - - level.countdown_hud setvalue( delay ); - } - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] playlocalsound( "zmb_perks_packa_ready" ); - i++; - } - level.countdown_hud fadeovertime( 1 ); - level.countdown_hud.color = ( 0, 0, -1 ); - level.countdown_hud.alpha = 0; - wait 1; - level.countdown_hud destroy_hud(); -} - -round_start() -{ -/# - println( "ZM >> round_start start" ); -#/ - if ( isDefined( level.round_prestart_func ) ) - { - [[ level.round_prestart_func ]](); - } - else - { - wait 2; - } - level.zombie_health = level.zombie_vars[ "zombie_health_start" ]; - if ( getDvarInt( "scr_writeConfigStrings" ) == 1 ) - { - wait 5; - exitlevel(); - return; - } - if ( level.zombie_vars[ "game_start_delay" ] > 0 ) - { - round_pause( level.zombie_vars[ "game_start_delay" ] ); - } - flag_set( "begin_spawning" ); - if ( !isDefined( level.round_spawn_func ) ) - { - level.round_spawn_func = ::round_spawning; - } -/# - if ( getDvarInt( #"7688603C" ) ) - { - level.round_spawn_func = ::round_spawning_test; -#/ - } - if ( !isDefined( level.round_wait_func ) ) - { - level.round_wait_func = ::round_wait; - } - if ( !isDefined( level.round_think_func ) ) - { - level.round_think_func = ::round_think; - } - level thread [[ level.round_think_func ]](); -} - -play_door_dialog() -{ - level endon( "power_on" ); - self endon( "warning_dialog" ); - timer = 0; - while ( 1 ) - { - wait 0,05; - players = get_players(); - i = 0; - while ( i < players.size ) - { - dist = distancesquared( players[ i ].origin, self.origin ); - if ( dist > 4900 ) - { - timer = 0; - i++; - continue; - } - else - { - while ( dist < 4900 && timer < 3 ) - { - wait 0,5; - timer++; - } - if ( dist > 4900 && timer >= 3 ) - { - self playsound( "door_deny" ); - players[ i ] maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "door_deny" ); - wait 3; - self notify( "warning_dialog" ); - } - } - i++; - } - } -} - -wait_until_first_player() -{ - players = get_players(); - if ( !isDefined( players[ 0 ] ) ) - { - level waittill( "first_player_ready" ); - } -} - -round_one_up() -{ - level endon( "end_game" ); - if ( isDefined( level.noroundnumber ) && level.noroundnumber == 1 ) - { - return; - } - if ( !isDefined( level.doground_nomusic ) ) - { - level.doground_nomusic = 0; - } - if ( level.first_round ) - { - intro = 1; - if ( isDefined( level._custom_intro_vox ) ) - { - level thread [[ level._custom_intro_vox ]](); - } - else - { - level thread play_level_start_vox_delayed(); - } - } - else - { - intro = 0; - } - if ( level.round_number != 5 && level.round_number != 10 && level.round_number != 20 || level.round_number == 35 && level.round_number == 50 ) - { - players = get_players(); - rand = randomintrange( 0, players.size ); - players[ rand ] thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "round_" + level.round_number ); - } - if ( intro ) - { - if ( isDefined( level.host_ended_game ) && level.host_ended_game ) - { - return; - } - wait 6,25; - level notify( "intro_hud_done" ); - wait 2; - } - else - { - wait 2,5; - } - reportmtu( level.round_number ); -} - -round_over() -{ - if ( isDefined( level.noroundnumber ) && level.noroundnumber == 1 ) - { - return; - } - time = level.zombie_vars[ "zombie_between_round_time" ]; - players = getplayers(); - player_index = 0; - while ( player_index < players.size ) - { - if ( !isDefined( players[ player_index ].pers[ "previous_distance_traveled" ] ) ) - { - players[ player_index ].pers[ "previous_distance_traveled" ] = 0; - } - distancethisround = int( players[ player_index ].pers[ "distance_traveled" ] - players[ player_index ].pers[ "previous_distance_traveled" ] ); - players[ player_index ].pers[ "previous_distance_traveled" ] = players[ player_index ].pers[ "distance_traveled" ]; - players[ player_index ] incrementplayerstat( "distance_traveled", distancethisround ); - if ( players[ player_index ].pers[ "team" ] != "spectator" ) - { - zonename = players[ player_index ] get_current_zone(); - if ( isDefined( zonename ) ) - { - players[ player_index ] recordzombiezone( "endingZone", zonename ); - } - } - player_index++; - } - recordzombieroundend(); - wait time; -} - -round_think( restart ) -{ -/# - println( "ZM >> round_think start" ); -#/ - level endon( "end_round_think" ); - while ( isDefined( restart ) && !restart ) - { - if ( isDefined( level.initial_round_wait_func ) ) - { - [[ level.initial_round_wait_func ]](); - } - while ( isDefined( level.host_ended_game ) && !level.host_ended_game ) - { - players = get_players(); - _a4193 = players; - _k4193 = getFirstArrayKey( _a4193 ); - while ( isDefined( _k4193 ) ) - { - player = _a4193[ _k4193 ]; - if ( isDefined( player.hostmigrationcontrolsfrozen ) && !player.hostmigrationcontrolsfrozen ) - { - player freezecontrols( 0 ); -/# - println( " Unfreeze controls 8" ); -#/ - } - player maps/mp/zombies/_zm_stats::set_global_stat( "rounds", level.round_number ); - _k4193 = getNextArrayKey( _a4193, _k4193 ); - } - } - } - setroundsplayed( level.round_number ); - for ( ;; ) - { - maxreward = 50 * level.round_number; - if ( maxreward > 500 ) - { - maxreward = 500; - } - level.zombie_vars[ "rebuild_barrier_cap_per_round" ] = maxreward; - level.pro_tips_start_time = getTime(); - level.zombie_last_run_time = getTime(); - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "round_start" ); - round_one_up(); - maps/mp/zombies/_zm_powerups::powerup_round_start(); - players = get_players(); - array_thread( players, ::maps/mp/zombies/_zm_blockers::rebuild_barrier_reward_reset ); - if ( isDefined( level.headshots_only ) && !level.headshots_only ) - { - level thread award_grenades_for_survivors(); - } - bbprint( "zombie_rounds", "round %d player_count %d", level.round_number, players.size ); -/# - println( "ZM >> round_think, round=" + level.round_number + ", player_count=" + players.size ); -#/ - level.round_start_time = getTime(); - while ( level.zombie_spawn_locations.size <= 0 ) - { - wait 0,1; - } - level thread [[ level.round_spawn_func ]](); - level notify( "start_of_round" ); - recordzombieroundstart(); - players = getplayers(); - index = 0; - while ( index < players.size ) - { - zonename = players[ index ] get_current_zone(); - if ( isDefined( zonename ) ) - { - players[ index ] recordzombiezone( "startingZone", zonename ); - } - index++; - } - if ( isDefined( level.round_start_custom_func ) ) - { - [[ level.round_start_custom_func ]](); - } - [[ level.round_wait_func ]](); - level.first_round = 0; - level notify( "end_of_round" ); - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "round_end" ); - uploadstats(); - if ( isDefined( level.round_end_custom_logic ) ) - { - [[ level.round_end_custom_logic ]](); - } - players = get_players(); - if ( isDefined( level.no_end_game_check ) && level.no_end_game_check ) - { - level thread last_stand_revive(); - level thread spectators_respawn(); - } - else - { - if ( players.size != 1 ) - { - level thread spectators_respawn(); - } - } - players = get_players(); - array_thread( players, ::maps/mp/zombies/_zm_pers_upgrades_system::round_end ); - timer = level.zombie_vars[ "zombie_spawn_delay" ]; - if ( timer > 0,08 ) - { - level.zombie_vars[ "zombie_spawn_delay" ] = timer * 0,95; - } - else - { - if ( timer < 0,08 ) - { - level.zombie_vars[ "zombie_spawn_delay" ] = 0,08; - } - } - if ( level.gamedifficulty == 0 ) - { - level.zombie_move_speed = level.round_number * level.zombie_vars[ "zombie_move_speed_multiplier_easy" ]; - } - else - { - level.zombie_move_speed = level.round_number * level.zombie_vars[ "zombie_move_speed_multiplier" ]; - } - level.round_number++; - if ( level.round_number >= 255 ) - { - level.round_number = 255; - } - setroundsplayed( level.round_number ); - matchutctime = getutc(); - players = get_players(); - _a4335 = players; - _k4335 = getFirstArrayKey( _a4335 ); - while ( isDefined( _k4335 ) ) - { - player = _a4335[ _k4335 ]; - if ( level.curr_gametype_affects_rank && level.round_number > 4 ) - { - player maps/mp/zombies/_zm_stats::add_client_stat( "weighted_rounds_played", level.round_number ); - } - player maps/mp/zombies/_zm_stats::set_global_stat( "rounds", level.round_number ); - player maps/mp/zombies/_zm_stats::update_playing_utc_time( matchutctime ); - _k4335 = getNextArrayKey( _a4335, _k4335 ); - } - check_quickrevive_for_hotjoin(); - level round_over(); - level notify( "between_round_over" ); - } -} - -award_grenades_for_survivors() -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( !players[ i ].is_zombie ) - { - lethal_grenade = players[ i ] get_player_lethal_grenade(); - if ( !players[ i ] hasweapon( lethal_grenade ) ) - { - players[ i ] giveweapon( lethal_grenade ); - players[ i ] setweaponammoclip( lethal_grenade, 0 ); - } - if ( players[ i ] getfractionmaxammo( lethal_grenade ) < 0,25 ) - { - players[ i ] setweaponammoclip( lethal_grenade, 2 ); - i++; - continue; - } - else if ( players[ i ] getfractionmaxammo( lethal_grenade ) < 0,5 ) - { - players[ i ] setweaponammoclip( lethal_grenade, 3 ); - i++; - continue; - } - else - { - players[ i ] setweaponammoclip( lethal_grenade, 4 ); - } - } - i++; - } -} - -ai_calculate_health( round_number ) -{ - level.zombie_health = level.zombie_vars[ "zombie_health_start" ]; - i = 2; - while ( i <= round_number ) - { - if ( i >= 10 ) - { - old_health = level.zombie_health; - level.zombie_health += int( level.zombie_health * level.zombie_vars[ "zombie_health_increase_multiplier" ] ); - if ( level.zombie_health < old_health ) - { - level.zombie_health = old_health; - return; - } - i++; - continue; - } - else - { - level.zombie_health = int( level.zombie_health + level.zombie_vars[ "zombie_health_increase" ] ); - } - i++; - } -} - -ai_zombie_health( round_number ) -{ - zombie_health = level.zombie_vars[ "zombie_health_start" ]; - i = 2; - while ( i <= round_number ) - { - if ( i >= 10 ) - { - old_health = zombie_health; - zombie_health += int( zombie_health * level.zombie_vars[ "zombie_health_increase_multiplier" ] ); - if ( zombie_health < old_health ) - { - return old_health; - } - } - else - { - zombie_health = int( zombie_health + level.zombie_vars[ "zombie_health_increase" ] ); - } - i++; - } - return zombie_health; -} - -round_spawn_failsafe_debug() -{ -/# - level notify( "failsafe_debug_stop" ); - level endon( "failsafe_debug_stop" ); - start = getTime(); - level.chunk_time = 0; - while ( 1 ) - { - level.failsafe_time = getTime() - start; - if ( isDefined( self.lastchunk_destroy_time ) ) - { - level.chunk_time = getTime() - self.lastchunk_destroy_time; - } - wait_network_frame(); -#/ - } -} - -round_spawn_failsafe() -{ - self endon( "death" ); - prevorigin = self.origin; - while ( 1 ) - { - if ( !level.zombie_vars[ "zombie_use_failsafe" ] ) - { - return; - } - if ( isDefined( self.ignore_round_spawn_failsafe ) && self.ignore_round_spawn_failsafe ) - { - return; - } - wait 30; - if ( !self.has_legs ) - { - wait 10; - } - if ( isDefined( self.is_inert ) && self.is_inert ) - { - continue; - } - while ( isDefined( self.lastchunk_destroy_time ) ) - { - while ( ( getTime() - self.lastchunk_destroy_time ) < 8000 ) - { - continue; - } - } - if ( self.origin[ 2 ] < level.zombie_vars[ "below_world_check" ] ) - { - if ( isDefined( level.put_timed_out_zombies_back_in_queue ) && level.put_timed_out_zombies_back_in_queue && !flag( "dog_round" ) && isDefined( self.isscreecher ) && !self.isscreecher ) - { - level.zombie_total++; - level.zombie_total_subtract++; - } -/# -#/ - self dodamage( self.health + 100, ( 0, 0, -1 ) ); - return; - } - else if ( distancesquared( self.origin, prevorigin ) < 576 ) - { - if ( isDefined( level.put_timed_out_zombies_back_in_queue ) && level.put_timed_out_zombies_back_in_queue && !flag( "dog_round" ) ) - { - if ( !self.ignoreall && isDefined( self.nuked ) && !self.nuked && isDefined( self.marked_for_death ) && !self.marked_for_death && isDefined( self.isscreecher ) && !self.isscreecher && isDefined( self.has_legs ) && self.has_legs ) - { - level.zombie_total++; - level.zombie_total_subtract++; - } - } - level.zombies_timeout_playspace++; -/# -#/ - self dodamage( self.health + 100, ( 0, 0, -1 ) ); - return; - } - else - { - prevorigin = self.origin; - } - } -} - -round_wait() -{ - level endon( "restart_round" ); -/# - if ( getDvarInt( #"7688603C" ) ) - { - level waittill( "forever" ); -#/ - } -/# - if ( getDvarInt( "zombie_cheat" ) == 2 || getDvarInt( "zombie_cheat" ) >= 4 ) - { - level waittill( "forever" ); -#/ - } - wait 1; - if ( flag( "dog_round" ) ) - { - wait 7; - while ( level.dog_intermission ) - { - wait 0,5; - } - increment_dog_round_stat( "finished" ); - } - else - { - while ( get_current_zombie_count() > 0 || level.zombie_total > 0 && level.intermission ) - { - if ( flag( "end_round_wait" ) ) - { - return; - } - wait 1; - } - } -} - -zombify_player() -{ - self maps/mp/zombies/_zm_score::player_died_penalty(); - bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "died", self.origin ); - self recordplayerdeathzombies(); - if ( isDefined( level.deathcard_spawn_func ) ) - { - self [[ level.deathcard_spawn_func ]](); - } - if ( !isDefined( level.zombie_vars[ "zombify_player" ] ) || !level.zombie_vars[ "zombify_player" ] ) - { - self thread spawnspectator(); - return; - } - self.ignoreme = 1; - self.is_zombie = 1; - self.zombification_time = getTime(); - self.team = level.zombie_team; - self notify( "zombified" ); - if ( isDefined( self.revivetrigger ) ) - { - self.revivetrigger delete(); - } - self.revivetrigger = undefined; - self setmovespeedscale( 0,3 ); - self reviveplayer(); - self takeallweapons(); - self giveweapon( "zombie_melee", 0 ); - self switchtoweapon( "zombie_melee" ); - self disableweaponcycling(); - self disableoffhandweapons(); - setclientsysstate( "zombify", 1, self ); - self thread maps/mp/zombies/_zm_spawner::zombie_eye_glow(); - self thread playerzombie_player_damage(); - self thread playerzombie_soundboard(); -} - -playerzombie_player_damage() -{ - self endon( "death" ); - self endon( "disconnect" ); - self thread playerzombie_infinite_health(); - self.zombiehealth = level.zombie_health; - while ( 1 ) - { - self waittill( "damage", amount, attacker, directionvec, point, type ); - while ( !isDefined( attacker ) || !isplayer( attacker ) ) - { - wait 0,05; - } - self.zombiehealth -= amount; - if ( self.zombiehealth <= 0 ) - { - self thread playerzombie_downed_state(); - self waittill( "playerzombie_downed_state_done" ); - self.zombiehealth = level.zombie_health; - } - } -} - -playerzombie_downed_state() -{ - self endon( "death" ); - self endon( "disconnect" ); - downtime = 15; - starttime = getTime(); - endtime = starttime + ( downtime * 1000 ); - self thread playerzombie_downed_hud(); - self.playerzombie_soundboard_disable = 1; - self thread maps/mp/zombies/_zm_spawner::zombie_eye_glow_stop(); - self disableweapons(); - self allowstand( 0 ); - self allowcrouch( 0 ); - self allowprone( 1 ); - while ( getTime() < endtime ) - { - wait 0,05; - } - self.playerzombie_soundboard_disable = 0; - self thread maps/mp/zombies/_zm_spawner::zombie_eye_glow(); - self enableweapons(); - self allowstand( 1 ); - self allowcrouch( 0 ); - self allowprone( 0 ); - self notify( "playerzombie_downed_state_done" ); -} - -playerzombie_downed_hud() -{ - self endon( "death" ); - self endon( "disconnect" ); - text = newclienthudelem( self ); - text.alignx = "center"; - text.aligny = "middle"; - text.horzalign = "user_center"; - text.vertalign = "user_bottom"; - text.foreground = 1; - text.font = "default"; - text.fontscale = 1,8; - text.alpha = 0; - text.color = ( 0, 0, -1 ); - text settext( &"ZOMBIE_PLAYERZOMBIE_DOWNED" ); - text.y = -113; - if ( self issplitscreen() ) - { - text.y = -137; - } - text fadeovertime( 0,1 ); - text.alpha = 1; - self waittill( "playerzombie_downed_state_done" ); - text fadeovertime( 0,1 ); - text.alpha = 0; -} - -playerzombie_infinite_health() -{ - self endon( "death" ); - self endon( "disconnect" ); - bighealth = 100000; - while ( 1 ) - { - if ( self.health < bighealth ) - { - self.health = bighealth; - } - wait 0,1; - } -} - -playerzombie_soundboard() -{ - self endon( "death" ); - self endon( "disconnect" ); - self.playerzombie_soundboard_disable = 0; - self.buttonpressed_use = 0; - self.buttonpressed_attack = 0; - self.buttonpressed_ads = 0; - self.usesound_waittime = 3000; - self.usesound_nexttime = getTime(); - usesound = "playerzombie_usebutton_sound"; - self.attacksound_waittime = 3000; - self.attacksound_nexttime = getTime(); - attacksound = "playerzombie_attackbutton_sound"; - self.adssound_waittime = 3000; - self.adssound_nexttime = getTime(); - adssound = "playerzombie_adsbutton_sound"; - self.inputsound_nexttime = getTime(); - while ( 1 ) - { - while ( self.playerzombie_soundboard_disable ) - { - wait 0,05; - } - if ( self usebuttonpressed() ) - { - if ( self can_do_input( "use" ) ) - { - self thread playerzombie_play_sound( usesound ); - self thread playerzombie_waitfor_buttonrelease( "use" ); - self.usesound_nexttime = getTime() + self.usesound_waittime; - } - } - else if ( self attackbuttonpressed() ) - { - if ( self can_do_input( "attack" ) ) - { - self thread playerzombie_play_sound( attacksound ); - self thread playerzombie_waitfor_buttonrelease( "attack" ); - self.attacksound_nexttime = getTime() + self.attacksound_waittime; - } - } - else - { - if ( self adsbuttonpressed() ) - { - if ( self can_do_input( "ads" ) ) - { - self thread playerzombie_play_sound( adssound ); - self thread playerzombie_waitfor_buttonrelease( "ads" ); - self.adssound_nexttime = getTime() + self.adssound_waittime; - } - } - } - wait 0,05; - } -} - -can_do_input( inputtype ) -{ - if ( getTime() < self.inputsound_nexttime ) - { - return 0; - } - cando = 0; - switch( inputtype ) - { - case "use": - if ( getTime() >= self.usesound_nexttime && !self.buttonpressed_use ) - { - cando = 1; - } - break; - case "attack": - if ( getTime() >= self.attacksound_nexttime && !self.buttonpressed_attack ) - { - cando = 1; - } - break; - case "ads": - if ( getTime() >= self.usesound_nexttime && !self.buttonpressed_ads ) - { - cando = 1; - } - break; - default: -/# - assertmsg( "can_do_input(): didn't recognize inputType of " + inputtype ); -#/ - break; - } - return cando; -} - -playerzombie_play_sound( alias ) -{ - self play_sound_on_ent( alias ); -} - -playerzombie_waitfor_buttonrelease( inputtype ) -{ - if ( inputtype != "use" && inputtype != "attack" && inputtype != "ads" ) - { -/# - assertmsg( "playerzombie_waitfor_buttonrelease(): inputType of " + inputtype + " is not recognized." ); -#/ - return; - } - notifystring = "waitfor_buttonrelease_" + inputtype; - self notify( notifystring ); - self endon( notifystring ); - if ( inputtype == "use" ) - { - self.buttonpressed_use = 1; - while ( self usebuttonpressed() ) - { - wait 0,05; - } - self.buttonpressed_use = 0; - } - else if ( inputtype == "attack" ) - { - self.buttonpressed_attack = 1; - while ( self attackbuttonpressed() ) - { - wait 0,05; - } - self.buttonpressed_attack = 0; - } - else - { - if ( inputtype == "ads" ) - { - self.buttonpressed_ads = 1; - while ( self adsbuttonpressed() ) - { - wait 0,05; - } - self.buttonpressed_ads = 0; - } - } -} - -remove_ignore_attacker() -{ - self notify( "new_ignore_attacker" ); - self endon( "new_ignore_attacker" ); - self endon( "disconnect" ); - if ( !isDefined( level.ignore_enemy_timer ) ) - { - level.ignore_enemy_timer = 0,4; - } - wait level.ignore_enemy_timer; - self.ignoreattacker = undefined; -} - -player_shield_facing_attacker( vdir, limit ) -{ - orientation = self getplayerangles(); - forwardvec = anglesToForward( orientation ); - forwardvec2d = ( forwardvec[ 0 ], forwardvec[ 1 ], 0 ); - unitforwardvec2d = vectornormalize( forwardvec2d ); - tofaceevec = vdir * -1; - tofaceevec2d = ( tofaceevec[ 0 ], tofaceevec[ 1 ], 0 ); - unittofaceevec2d = vectornormalize( tofaceevec2d ); - dotproduct = vectordot( unitforwardvec2d, unittofaceevec2d ); - return dotproduct > limit; -} - -player_damage_override_cheat( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) -{ - player_damage_override( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); - return 0; -} - -player_damage_override( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) -{ - if ( isDefined( level._game_module_player_damage_callback ) ) - { - self [[ level._game_module_player_damage_callback ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); - } - idamage = self check_player_damage_callbacks( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); - if ( !idamage ) - { - return 0; - } - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - return 0; - } - if ( isDefined( einflictor ) ) - { - if ( isDefined( einflictor.water_damage ) && einflictor.water_damage ) - { - return 0; - } - } - if ( isDefined( eattacker ) && isDefined( eattacker.is_zombie ) || eattacker.is_zombie && isplayer( eattacker ) ) - { - if ( isDefined( self.hasriotshield ) && self.hasriotshield && isDefined( vdir ) ) - { - if ( isDefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped ) - { - if ( self player_shield_facing_attacker( vdir, 0,2 ) && isDefined( self.player_shield_apply_damage ) ) - { - self [[ self.player_shield_apply_damage ]]( 100, 0 ); - return 0; - } - } - else - { - if ( !isDefined( self.riotshieldentity ) ) - { - if ( !self player_shield_facing_attacker( vdir, -0,2 ) && isDefined( self.player_shield_apply_damage ) ) - { - self [[ self.player_shield_apply_damage ]]( 100, 0 ); - return 0; - } - } - } - } - } - if ( isDefined( eattacker ) ) - { - if ( isDefined( self.ignoreattacker ) && self.ignoreattacker == eattacker ) - { - return 0; - } - if ( isDefined( self.is_zombie ) && self.is_zombie && isDefined( eattacker.is_zombie ) && eattacker.is_zombie ) - { - return 0; - } - if ( isDefined( eattacker.is_zombie ) && eattacker.is_zombie ) - { - self.ignoreattacker = eattacker; - self thread remove_ignore_attacker(); - if ( isDefined( eattacker.custom_damage_func ) ) - { - idamage = eattacker [[ eattacker.custom_damage_func ]]( self ); - } - else if ( isDefined( eattacker.meleedamage ) ) - { - idamage = eattacker.meleedamage; - } - else - { - idamage = 50; - } - } - eattacker notify( "hit_player" ); - if ( smeansofdeath != "MOD_FALLING" ) - { - self thread playswipesound( smeansofdeath, eattacker ); - if ( isDefined( eattacker.is_zombie ) || eattacker.is_zombie && isplayer( eattacker ) ) - { - self playrumbleonentity( "damage_heavy" ); - } - if ( randomintrange( 0, 1 ) == 0 ) - { - self thread maps/mp/zombies/_zm_audio::playerexert( "hitmed" ); - } - else - { - self thread maps/mp/zombies/_zm_audio::playerexert( "hitlrg" ); - } - } - } - finaldamage = idamage; - if ( is_placeable_mine( sweapon ) ) - { - return 0; - } - if ( isDefined( self.player_damage_override ) ) - { - self thread [[ self.player_damage_override ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); - } - if ( smeansofdeath == "MOD_FALLING" ) - { - if ( self hasperk( "specialty_flakjacket" ) && isDefined( self.divetoprone ) && self.divetoprone == 1 ) - { - if ( isDefined( level.zombiemode_divetonuke_perk_func ) ) - { - [[ level.zombiemode_divetonuke_perk_func ]]( self, self.origin ); - } - return 0; - } - } - if ( smeansofdeath != "MOD_PROJECTILE" && smeansofdeath != "MOD_PROJECTILE_SPLASH" || smeansofdeath == "MOD_GRENADE" && smeansofdeath == "MOD_GRENADE_SPLASH" ) - { - if ( self hasperk( "specialty_flakjacket" ) ) - { - return 0; - } - if ( self.health > 75 && isDefined( self.is_zombie ) && !self.is_zombie ) - { - return 75; - } - } - if ( idamage < self.health ) - { - if ( isDefined( eattacker ) ) - { - eattacker.sound_damage_player = self; - if ( isDefined( eattacker.has_legs ) && !eattacker.has_legs ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "crawl_hit" ); - } - else - { - if ( isDefined( eattacker.animname ) && eattacker.animname == "monkey_zombie" ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "monkey_hit" ); - } - } - } - return finaldamage; - } - if ( isDefined( eattacker ) ) - { - if ( isDefined( eattacker.animname ) && eattacker.animname == "zombie_dog" ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "killed_by_zdog" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "killed_by_zdog" ); - } - else - { - if ( isDefined( eattacker.is_avogadro ) && eattacker.is_avogadro ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "killed_by_avogadro", 0 ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "killed_by_avogadro" ); - } - } - } - self thread clear_path_timers(); - if ( level.intermission ) - { - level waittill( "forever" ); - } - if ( level.scr_zm_ui_gametype == "zcleansed" && idamage > 0 ) - { - if ( isDefined( eattacker ) && isplayer( eattacker ) && eattacker.team != self.team && isDefined( self.laststand ) && !self.laststand || !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && !isDefined( self.last_player_attacker ) ) - { - if ( isDefined( eattacker.maxhealth ) && isDefined( eattacker.is_zombie ) && eattacker.is_zombie ) - { - eattacker.health = eattacker.maxhealth; - } - if ( isDefined( level.player_kills_player ) ) - { - self thread [[ level.player_kills_player ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); - } - } - } - if ( self.lives > 0 && self hasperk( "specialty_finalstand" ) ) - { - self.lives--; - - if ( isDefined( level.chugabud_laststand_func ) ) - { - self thread [[ level.chugabud_laststand_func ]](); - return 0; - } - } - players = get_players(); - count = 0; - i = 0; - while ( i < players.size ) - { - if ( self != players[ i ] && !players[ i ].is_zombie || players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() && players[ i ].sessionstate == "spectator" ) - { - count++; - } - i++; - } - if ( count < players.size || isDefined( level._game_module_game_end_check ) && !( [[ level._game_module_game_end_check ]]() ) ) - { - if ( isDefined( self.lives ) && self.lives > 0 && isDefined( level.force_solo_quick_revive ) && level.force_solo_quick_revive && self hasperk( "specialty_quickrevive" ) ) - { - self thread wait_and_revive(); - } - return finaldamage; - } - if ( players.size == 1 && flag( "solo_game" ) ) - { - if ( self.lives == 0 || !self hasperk( "specialty_quickrevive" ) ) - { - self.intermission = 1; - } - } - if ( players.size == 1 && flag( "solo_game" ) ) - { - if ( self.lives != 0 ) - { - solo_death = !self hasperk( "specialty_quickrevive" ); - } - } - if ( count > 1 ) - { - if ( players.size == 1 ) - { - non_solo_death = !flag( "solo_game" ); - } - } - if ( !solo_death && non_solo_death && isDefined( level.no_end_game_check ) && !level.no_end_game_check ) - { - level notify( "stop_suicide_trigger" ); - self thread maps/mp/zombies/_zm_laststand::playerlaststand( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ); - if ( !isDefined( vdir ) ) - { - vdir = ( 0, 0, -1 ); - } - self fakedamagefrom( vdir ); - if ( isDefined( level.custom_player_fake_death ) ) - { - self thread [[ level.custom_player_fake_death ]]( vdir, smeansofdeath ); - } - else - { - self thread player_fake_death(); - } - } - if ( count == players.size && isDefined( level.no_end_game_check ) && !level.no_end_game_check ) - { - if ( players.size == 1 && flag( "solo_game" ) ) - { - if ( self.lives == 0 || !self hasperk( "specialty_quickrevive" ) ) - { - self.lives = 0; - level notify( "pre_end_game" ); - wait_network_frame(); - if ( flag( "dog_round" ) ) - { - increment_dog_round_stat( "lost" ); - } - level notify( "end_game" ); - } - else - { - return finaldamage; - } - } - else - { - level notify( "pre_end_game" ); - wait_network_frame(); - if ( flag( "dog_round" ) ) - { - increment_dog_round_stat( "lost" ); - } - level notify( "end_game" ); - } - return 0; - } - else - { - surface = "flesh"; - return finaldamage; - } -} - -clear_path_timers() -{ - zombies = getaiarray( level.zombie_team ); - _a5284 = zombies; - _k5284 = getFirstArrayKey( _a5284 ); - while ( isDefined( _k5284 ) ) - { - zombie = _a5284[ _k5284 ]; - if ( isDefined( zombie.favoriteenemy ) && zombie.favoriteenemy == self ) - { - zombie.zombie_path_timer = 0; - } - _k5284 = getNextArrayKey( _a5284, _k5284 ); - } -} - -check_player_damage_callbacks( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) -{ - if ( !isDefined( level.player_damage_callbacks ) ) - { - return idamage; - } - i = 0; - while ( i < level.player_damage_callbacks.size ) - { - newdamage = self [[ level.player_damage_callbacks[ i ] ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); - if ( newdamage != -1 ) - { - return newdamage; - } - i++; - } - return idamage; -} - -register_player_damage_callback( func ) -{ - if ( !isDefined( level.player_damage_callbacks ) ) - { - level.player_damage_callbacks = []; - } - level.player_damage_callbacks[ level.player_damage_callbacks.size ] = func; -} - -wait_and_revive() -{ - flag_set( "wait_and_revive" ); - if ( isDefined( self.waiting_to_revive ) && self.waiting_to_revive == 1 ) - { - return; - } - self.waiting_to_revive = 1; - if ( isDefined( level.exit_level_func ) ) - { - self thread [[ level.exit_level_func ]](); - } - else - { - if ( get_players().size == 1 ) - { - self thread default_exit_level(); - } - } - solo_revive_time = 10; - self.revive_hud settext( &"ZOMBIE_REVIVING_SOLO", self ); - self maps/mp/zombies/_zm_laststand::revive_hud_show_n_fade( solo_revive_time ); - flag_wait_or_timeout( "instant_revive", solo_revive_time ); - if ( flag( "instant_revive" ) ) - { - self maps/mp/zombies/_zm_laststand::revive_hud_show_n_fade( 1 ); - } - flag_clear( "wait_and_revive" ); - self maps/mp/zombies/_zm_laststand::auto_revive( self ); - self.lives--; - - self.waiting_to_revive = 0; -} - -actor_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime ) -{ - if ( !isDefined( self ) || !isDefined( attacker ) ) - { - return damage; - } - if ( weapon == "tazer_knuckles_zm" || weapon == "jetgun_zm" ) - { - self.knuckles_extinguish_flames = 1; - } - else - { - if ( weapon != "none" ) - { - self.knuckles_extinguish_flames = undefined; - } - } - if ( isDefined( attacker.animname ) && attacker.animname == "quad_zombie" ) - { - if ( isDefined( self.animname ) && self.animname == "quad_zombie" ) - { - return 0; - } - } - if ( !isplayer( attacker ) && isDefined( self.non_attacker_func ) ) - { - return self [[ self.non_attacker_func ]]( damage, weapon ); - } - if ( !isplayer( attacker ) && !isplayer( self ) ) - { - return damage; - } - if ( !isDefined( damage ) || !isDefined( meansofdeath ) ) - { - return damage; - } - if ( meansofdeath == "" ) - { - return damage; - } - old_damage = damage; - final_damage = damage; - if ( isDefined( self.actor_damage_func ) ) - { - final_damage = [[ self.actor_damage_func ]]( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime ); - } -/# - if ( getDvarInt( #"5ABA6445" ) ) - { - println( "Perk/> Damage Factor: " + ( final_damage / old_damage ) + " - Pre Damage: " + old_damage + " - Post Damage: " + final_damage ); -#/ - } - if ( attacker.classname == "script_vehicle" && isDefined( attacker.owner ) ) - { - attacker = attacker.owner; - } - if ( isDefined( self.in_water ) && self.in_water ) - { - if ( int( final_damage ) >= self.health ) - { - self.water_damage = 1; - } - } - attacker thread maps/mp/gametypes_zm/_weapons::checkhit( weapon ); - if ( isDefined( attacker.pers_upgrades_awarded[ "multikill_headshots" ] ) && attacker.pers_upgrades_awarded[ "multikill_headshots" ] && is_headshot( weapon, shitloc, meansofdeath ) ) - { - final_damage *= 2; - } - if ( isDefined( level.headshots_only ) && level.headshots_only && isDefined( attacker ) && isplayer( attacker ) ) - { - if ( meansofdeath == "MOD_MELEE" || shitloc == "head" && shitloc == "helmet" ) - { - return int( final_damage ); - } - if ( is_explosive_damage( meansofdeath ) ) - { - return int( final_damage ); - } - else - { - if ( !is_headshot( weapon, shitloc, meansofdeath ) ) - { - return 0; - } - } - } - return int( final_damage ); -} - -actor_damage_override_wrapper( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) -{ - damage_override = self actor_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime ); - if ( damage < self.health || isDefined( self.dont_die_on_me ) && !self.dont_die_on_me ) - { - self finishactordamage( inflictor, attacker, damage_override, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - } -} - -actor_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) -{ - if ( game[ "state" ] == "postgame" ) - { - return; - } - if ( isai( attacker ) && isDefined( attacker.script_owner ) ) - { - if ( attacker.script_owner.team != self.aiteam ) - { - attacker = attacker.script_owner; - } - } - if ( attacker.classname == "script_vehicle" && isDefined( attacker.owner ) ) - { - attacker = attacker.owner; - } - if ( isDefined( attacker ) && isplayer( attacker ) ) - { - multiplier = 1; - if ( is_headshot( sweapon, shitloc, smeansofdeath ) ) - { - multiplier = 1,5; - } - type = undefined; - if ( isDefined( self.animname ) ) - { - switch( self.animname ) - { - case "quad_zombie": - type = "quadkill"; - break; - case "ape_zombie": - type = "apekill"; - break; - case "zombie": - type = "zombiekill"; - break; - case "zombie_dog": - type = "dogkill"; - break; - } - } - } - if ( isDefined( attacker ) && isplayer( attacker ) && attacker hasperk( "specialty_nomotionsensor" ) ) - { - self maps/mp/zombies/_zm_vulture::do_vulture_death( attacker ); - } - if ( isDefined( self.is_ziplining ) && self.is_ziplining ) - { - self.deathanim = undefined; - } - if ( isDefined( self.actor_killed_override ) ) - { - self [[ self.actor_killed_override ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ); - } -} - -round_end_monitor() -{ - while ( 1 ) - { - level waittill( "end_of_round" ); - maps/mp/_demo::bookmark( "zm_round_end", getTime(), undefined, undefined, 1 ); - bbpostdemostreamstatsforround( level.round_number ); - wait 0,05; - } -} - -end_game() -{ - level waittill( "end_game" ); - check_end_game_intermission_delay(); -/# - println( "end_game TRIGGERED " ); -#/ - clientnotify( "zesn" ); - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "game_over" ); - players = get_players(); - i = 0; - while ( i < players.size ) - { - setclientsysstate( "lsm", "0", players[ i ] ); - i++; - } - i = 0; - while ( i < players.size ) - { - if ( players[ i ] player_is_in_laststand() ) - { - players[ i ] recordplayerdeathzombies(); - players[ i ] maps/mp/zombies/_zm_stats::increment_player_stat( "deaths" ); - players[ i ] maps/mp/zombies/_zm_stats::increment_client_stat( "deaths" ); - players[ i ] maps/mp/zombies/_zm_pers_upgrades::pers_upgrade_jugg_player_death_stat(); - } - if ( isDefined( players[ i ].revivetexthud ) ) - { - players[ i ].revivetexthud destroy(); - } - i++; - } - stopallrumbles(); - level.intermission = 1; - level.zombie_vars[ "zombie_powerup_insta_kill_time" ] = 0; - level.zombie_vars[ "zombie_powerup_fire_sale_time" ] = 0; - level.zombie_vars[ "zombie_powerup_point_doubler_time" ] = 0; - wait 0,1; - game_over = []; - survived = []; - players = get_players(); - setmatchflag( "disableIngameMenu", 1 ); - _a5600 = players; - _k5600 = getFirstArrayKey( _a5600 ); - while ( isDefined( _k5600 ) ) - { - player = _a5600[ _k5600 ]; - player closemenu(); - player closeingamemenu(); - _k5600 = getNextArrayKey( _a5600, _k5600 ); - } - while ( !isDefined( level._supress_survived_screen ) ) - { - i = 0; - while ( i < players.size ) - { - game_over[ i ] = newclienthudelem( players[ i ] ); - game_over[ i ].alignx = "center"; - game_over[ i ].aligny = "middle"; - game_over[ i ].horzalign = "center"; - game_over[ i ].vertalign = "middle"; - game_over[ i ].y -= 130; - game_over[ i ].foreground = 1; - game_over[ i ].fontscale = 3; - game_over[ i ].alpha = 0; - game_over[ i ].color = ( 0, 0, -1 ); - game_over[ i ].hidewheninmenu = 1; - game_over[ i ] settext( &"ZOMBIE_GAME_OVER" ); - game_over[ i ] fadeovertime( 1 ); - game_over[ i ].alpha = 1; - if ( players[ i ] issplitscreen() ) - { - game_over[ i ].fontscale = 2; - game_over[ i ].y += 40; - } - survived[ i ] = newclienthudelem( players[ i ] ); - survived[ i ].alignx = "center"; - survived[ i ].aligny = "middle"; - survived[ i ].horzalign = "center"; - survived[ i ].vertalign = "middle"; - survived[ i ].y -= 100; - survived[ i ].foreground = 1; - survived[ i ].fontscale = 2; - survived[ i ].alpha = 0; - survived[ i ].color = ( 0, 0, -1 ); - survived[ i ].hidewheninmenu = 1; - if ( players[ i ] issplitscreen() ) - { - survived[ i ].fontscale = 1,5; - survived[ i ].y += 40; - } - if ( level.round_number < 2 ) - { - if ( level.script == "zombie_moon" ) - { - if ( !isDefined( level.left_nomans_land ) ) - { - nomanslandtime = level.nml_best_time; - player_survival_time = int( nomanslandtime / 1000 ); - player_survival_time_in_mins = maps/mp/zombies/_zm::to_mins( player_survival_time ); - survived[ i ] settext( &"ZOMBIE_SURVIVED_NOMANS", player_survival_time_in_mins ); - } - else - { - if ( level.left_nomans_land == 2 ) - { - survived[ i ] settext( &"ZOMBIE_SURVIVED_ROUND" ); - } - } - } - else - { - survived[ i ] settext( &"ZOMBIE_SURVIVED_ROUND" ); - } - } - else - { - survived[ i ] settext( &"ZOMBIE_SURVIVED_ROUNDS", level.round_number ); - } - survived[ i ] fadeovertime( 1 ); - survived[ i ].alpha = 1; - i++; - } - } - if ( isDefined( level.custom_end_screen ) ) - { - level [[ level.custom_end_screen ]](); - } - i = 0; - while ( i < players.size ) - { - players[ i ] setclientammocounterhide( 1 ); - players[ i ] setclientminiscoreboardhide( 1 ); - i++; - } - uploadstats(); - maps/mp/zombies/_zm_stats::update_players_stats_at_match_end( players ); - maps/mp/zombies/_zm_stats::update_global_counters_on_match_end(); - wait 1; - wait 3,95; - players = get_players(); - _a5704 = players; - _k5704 = getFirstArrayKey( _a5704 ); - while ( isDefined( _k5704 ) ) - { - player = _a5704[ _k5704 ]; - if ( isDefined( player.sessionstate ) && player.sessionstate == "spectator" ) - { - player.sessionstate = "playing"; - } - _k5704 = getNextArrayKey( _a5704, _k5704 ); - } - wait 0,05; - players = get_players(); - if ( !isDefined( level._supress_survived_screen ) ) - { - i = 0; - while ( i < players.size ) - { - survived[ i ] destroy(); - game_over[ i ] destroy(); - i++; - } - } - else i = 0; - while ( i < players.size ) - { - if ( isDefined( players[ i ].survived_hud ) ) - { - players[ i ].survived_hud destroy(); - } - if ( isDefined( players[ i ].game_over_hud ) ) - { - players[ i ].game_over_hud destroy(); - } - i++; - } - intermission(); - wait level.zombie_vars[ "zombie_intermission_time" ]; - level notify( "stop_intermission" ); - array_thread( get_players(), ::player_exit_level ); - bbprint( "zombie_epilogs", "rounds %d", level.round_number ); - wait 1,5; - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] cameraactivate( 0 ); - i++; - } - exitlevel( 0 ); - wait 666; -} - -disable_end_game_intermission( delay ) -{ - level.disable_intermission = 1; - wait delay; - level.disable_intermission = undefined; -} - -check_end_game_intermission_delay() -{ - while ( isDefined( level.disable_intermission ) ) - { - while ( 1 ) - { - if ( !isDefined( level.disable_intermission ) ) - { - return; - } - else - { - wait 0,01; - } - } - } -} - -upload_leaderboards() -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] uploadleaderboards(); - i++; - } -} - -initializestattracking() -{ - level.global_zombies_killed = 0; - level.zombies_timeout_spawn = 0; - level.zombies_timeout_playspace = 0; - level.zombies_timeout_undamaged = 0; - level.zombie_player_killed_count = 0; - level.zombie_trap_killed_count = 0; - level.zombie_pathing_failed = 0; - level.zombie_breadcrumb_failed = 0; -} - -uploadglobalstatcounters() -{ - incrementcounter( "global_zombies_killed", level.global_zombies_killed ); - incrementcounter( "global_zombies_killed_by_players", level.zombie_player_killed_count ); - incrementcounter( "global_zombies_killed_by_traps", level.zombie_trap_killed_count ); -} - -player_fake_death() -{ - level notify( "fake_death" ); - self notify( "fake_death" ); - self takeallweapons(); - self allowstand( 0 ); - self allowcrouch( 0 ); - self allowprone( 1 ); - self.ignoreme = 1; - self enableinvulnerability(); - wait 1; - self freezecontrols( 1 ); -} - -player_exit_level() -{ - self allowstand( 1 ); - self allowcrouch( 0 ); - self allowprone( 0 ); - if ( isDefined( self.game_over_bg ) ) - { - self.game_over_bg.foreground = 1; - self.game_over_bg.sort = 100; - self.game_over_bg fadeovertime( 1 ); - self.game_over_bg.alpha = 1; - } -} - -player_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) -{ - level waittill( "forever" ); -} - -player_zombie_breadcrumb() -{ - self notify( "stop_player_zombie_breadcrumb" ); - self endon( "stop_player_zombie_breadcrumb" ); - self endon( "disconnect" ); - self endon( "spawned_spectator" ); - level endon( "intermission" ); - self.zombie_breadcrumbs = []; - self.zombie_breadcrumb_distance = 576; - self.zombie_breadcrumb_area_num = 3; - self.zombie_breadcrumb_area_distance = 16; - self store_crumb( self.origin ); - last_crumb = self.origin; - self thread debug_breadcrumbs(); - while ( 1 ) - { - wait_time = 0,1; - while ( self.ignoreme ) - { - wait wait_time; - } - store_crumb = 1; - airborne = 0; - crumb = self.origin; - if ( !self isonground() && self isinvehicle() ) - { - trace = bullettrace( self.origin + vectorScale( ( 0, 0, -1 ), 10 ), self.origin, 0, undefined ); - crumb = trace[ "position" ]; - } - if ( !airborne && distancesquared( crumb, last_crumb ) < self.zombie_breadcrumb_distance ) - { - store_crumb = 0; - } - if ( airborne && self isonground() ) - { - store_crumb = 1; - airborne = 0; - } - if ( isDefined( level.custom_breadcrumb_store_func ) ) - { - store_crumb = self [[ level.custom_breadcrumb_store_func ]]( store_crumb ); - } - if ( isDefined( level.custom_airborne_func ) ) - { - airborne = self [[ level.custom_airborne_func ]]( airborne ); - } - if ( store_crumb ) - { - debug_print( "Player is storing breadcrumb " + crumb ); - if ( isDefined( self.node ) ) - { - debug_print( "has closest node " ); - } - last_crumb = crumb; - self store_crumb( crumb ); - } - wait wait_time; - } -} - -store_crumb( origin ) -{ - offsets = []; - height_offset = 32; - index = 0; - j = 1; - while ( j <= self.zombie_breadcrumb_area_num ) - { - offset = j * self.zombie_breadcrumb_area_distance; - offsets[ 0 ] = ( origin[ 0 ] - offset, origin[ 1 ], origin[ 2 ] ); - offsets[ 1 ] = ( origin[ 0 ] + offset, origin[ 1 ], origin[ 2 ] ); - offsets[ 2 ] = ( origin[ 0 ], origin[ 1 ] - offset, origin[ 2 ] ); - offsets[ 3 ] = ( origin[ 0 ], origin[ 1 ] + offset, origin[ 2 ] ); - offsets[ 4 ] = ( origin[ 0 ] - offset, origin[ 1 ], origin[ 2 ] + height_offset ); - offsets[ 5 ] = ( origin[ 0 ] + offset, origin[ 1 ], origin[ 2 ] + height_offset ); - offsets[ 6 ] = ( origin[ 0 ], origin[ 1 ] - offset, origin[ 2 ] + height_offset ); - offsets[ 7 ] = ( origin[ 0 ], origin[ 1 ] + offset, origin[ 2 ] + height_offset ); - i = 0; - while ( i < offsets.size ) - { - self.zombie_breadcrumbs[ index ] = offsets[ i ]; - index++; - i++; - } - j++; - } -} - -to_mins( seconds ) -{ - hours = 0; - minutes = 0; - if ( seconds > 59 ) - { - minutes = int( seconds / 60 ); - seconds = int( seconds * 1000 ) % 60000; - seconds *= 0,001; - if ( minutes > 59 ) - { - hours = int( minutes / 60 ); - minutes = int( minutes * 1000 ) % 60000; - minutes *= 0,001; - } - } - if ( hours < 10 ) - { - hours = "0" + hours; - } - if ( minutes < 10 ) - { - minutes = "0" + minutes; - } - seconds = int( seconds ); - if ( seconds < 10 ) - { - seconds = "0" + seconds; - } - combined = "" + hours + ":" + minutes + ":" + seconds; - return combined; -} - -intermission() -{ - level.intermission = 1; - level notify( "intermission" ); - players = get_players(); - i = 0; - while ( i < players.size ) - { - setclientsysstate( "levelNotify", "zi", players[ i ] ); - players[ i ] setclientthirdperson( 0 ); - players[ i ] resetfov(); - players[ i ].health = 100; - players[ i ] thread [[ level.custom_intermission ]](); - players[ i ] stopsounds(); - i++; - } - wait 0,25; - players = get_players(); - i = 0; - while ( i < players.size ) - { - setclientsysstate( "lsm", "0", players[ i ] ); - i++; - } - level thread zombie_game_over_death(); -} - -zombie_game_over_death() -{ - zombies = getaiarray( level.zombie_team ); - i = 0; - while ( i < zombies.size ) - { - if ( !isalive( zombies[ i ] ) ) - { - i++; - continue; - } - else - { - zombies[ i ] setgoalpos( zombies[ i ].origin ); - } - i++; - } - i = 0; - while ( i < zombies.size ) - { - if ( !isalive( zombies[ i ] ) ) - { - i++; - continue; - } - else if ( isDefined( zombies[ i ].ignore_game_over_death ) && zombies[ i ].ignore_game_over_death ) - { - i++; - continue; - } - else - { - wait ( 0,5 + randomfloat( 2 ) ); - if ( isDefined( zombies[ i ] ) ) - { - zombies[ i ] maps/mp/zombies/_zm_spawner::zombie_head_gib(); - zombies[ i ] dodamage( zombies[ i ].health + 666, zombies[ i ].origin ); - } - } - i++; - } -} - -player_intermission() -{ - self closemenu(); - self closeingamemenu(); - level endon( "stop_intermission" ); - self endon( "disconnect" ); - self endon( "death" ); - self notify( "_zombie_game_over" ); - self.score = self.score_total; - self.sessionstate = "intermission"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - points = getstructarray( "intermission", "targetname" ); - if ( !isDefined( points ) || points.size == 0 ) - { - points = getentarray( "info_intermission", "classname" ); - if ( points.size < 1 ) - { -/# - println( "NO info_intermission POINTS IN MAP" ); -#/ - return; - } - } - self.game_over_bg = newclienthudelem( self ); - self.game_over_bg.horzalign = "fullscreen"; - self.game_over_bg.vertalign = "fullscreen"; - self.game_over_bg setshader( "black", 640, 480 ); - self.game_over_bg.alpha = 1; - org = undefined; - while ( 1 ) - { - points = array_randomize( points ); - i = 0; - while ( i < points.size ) - { - point = points[ i ]; - if ( !isDefined( org ) ) - { - self spawn( point.origin, point.angles ); - } - if ( isDefined( points[ i ].target ) ) - { - if ( !isDefined( org ) ) - { - org = spawn( "script_model", self.origin + vectorScale( ( 0, 0, -1 ), 60 ) ); - org setmodel( "tag_origin" ); - } - org.origin = points[ i ].origin; - org.angles = points[ i ].angles; - j = 0; - while ( j < get_players().size ) - { - player = get_players()[ j ]; - player camerasetposition( org ); - player camerasetlookat(); - player cameraactivate( 1 ); - j++; - } - speed = 20; - if ( isDefined( points[ i ].speed ) ) - { - speed = points[ i ].speed; - } - target_point = getstruct( points[ i ].target, "targetname" ); - dist = distance( points[ i ].origin, target_point.origin ); - time = dist / speed; - q_time = time * 0,25; - if ( q_time > 1 ) - { - q_time = 1; - } - self.game_over_bg fadeovertime( q_time ); - self.game_over_bg.alpha = 0; - org moveto( target_point.origin, time, q_time, q_time ); - org rotateto( target_point.angles, time, q_time, q_time ); - wait ( time - q_time ); - self.game_over_bg fadeovertime( q_time ); - self.game_over_bg.alpha = 1; - wait q_time; - i++; - continue; - } - else - { - self.game_over_bg fadeovertime( 1 ); - self.game_over_bg.alpha = 0; - wait 5; - self.game_over_bg thread fade_up_over_time( 1 ); - } - i++; - } - } -} - -fade_up_over_time( t ) -{ - self fadeovertime( t ); - self.alpha = 1; -} - -default_exit_level() -{ - zombies = getaiarray( level.zombie_team ); - i = 0; - while ( i < zombies.size ) - { - if ( isDefined( zombies[ i ].ignore_solo_last_stand ) && zombies[ i ].ignore_solo_last_stand ) - { - i++; - continue; - } - else - { - if ( isDefined( zombies[ i ].find_exit_point ) ) - { - zombies[ i ] thread [[ zombies[ i ].find_exit_point ]](); - i++; - continue; - } - else if ( zombies[ i ].ignoreme ) - { - zombies[ i ] thread default_delayed_exit(); - i++; - continue; - } - else - { - zombies[ i ] thread default_find_exit_point(); - } - } - i++; - } -} - -default_delayed_exit() -{ - self endon( "death" ); - while ( 1 ) - { - if ( !flag( "wait_and_revive" ) ) - { - return; - } - if ( !self.ignoreme ) - { - break; - } - else - { - wait 0,1; - } - } - self thread default_find_exit_point(); -} - -default_find_exit_point() -{ - self endon( "death" ); - player = get_players()[ 0 ]; - dist_zombie = 0; - dist_player = 0; - dest = 0; - away = vectornormalize( self.origin - player.origin ); - endpos = self.origin + vectorScale( away, 600 ); - locs = array_randomize( level.enemy_dog_locations ); - i = 0; - while ( i < locs.size ) - { - dist_zombie = distancesquared( locs[ i ].origin, endpos ); - dist_player = distancesquared( locs[ i ].origin, player.origin ); - if ( dist_zombie < dist_player ) - { - dest = i; - break; - } - else - { - i++; - } - } - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - if ( isDefined( locs[ dest ] ) ) - { - self setgoalpos( locs[ dest ].origin ); - } - while ( 1 ) - { - if ( !flag( "wait_and_revive" ) ) - { - break; - } - else - { - wait 0,1; - } - } - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); -} - -play_level_start_vox_delayed() -{ - wait 3; - players = get_players(); - num = randomintrange( 0, players.size ); - players[ num ] maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "intro" ); -} - -register_sidequest( id, sidequest_stat ) -{ - if ( !isDefined( level.zombie_sidequest_stat ) ) - { - level.zombie_sidequest_previously_completed = []; - level.zombie_sidequest_stat = []; - } - level.zombie_sidequest_stat[ id ] = sidequest_stat; - flag_wait( "start_zombie_round_logic" ); - level.zombie_sidequest_previously_completed[ id ] = 0; - if ( level.systemlink || getDvarInt( "splitscreen_playerCount" ) == get_players().size ) - { - return; - } - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] maps/mp/zombies/_zm_stats::get_global_stat( level.zombie_sidequest_stat[ id ] ) ) - { - level.zombie_sidequest_previously_completed[ id ] = 1; - return; - } - i++; - } -} - -is_sidequest_previously_completed( id ) -{ - if ( isDefined( level.zombie_sidequest_previously_completed[ id ] ) ) - { - return level.zombie_sidequest_previously_completed[ id ]; - } -} - -set_sidequest_completed( id ) -{ - level notify( "zombie_sidequest_completed" ); - level.zombie_sidequest_previously_completed[ id ] = 1; - if ( level.systemlink ) - { - return; - } - if ( getDvarInt( "splitscreen_playerCount" ) == get_players().size ) - { - return; - } - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( isDefined( level.zombie_sidequest_stat[ id ] ) ) - { - players[ i ] maps/mp/zombies/_zm_stats::add_global_stat( level.zombie_sidequest_stat[ id ], 1 ); - } - i++; - } -} - -playswipesound( mod, attacker ) -{ - if ( isDefined( attacker.is_zombie ) && attacker.is_zombie ) - { - self playsoundtoplayer( "evt_player_swiped", self ); - return; - } -} - -precache_zombie_leaderboards() -{ - if ( sessionmodeissystemlink() ) - { - return; - } - globalleaderboards = "LB_ZM_GB_BULLETS_FIRED_AT "; - globalleaderboards += "LB_ZM_GB_BULLETS_HIT_AT "; - globalleaderboards += "LB_ZM_GB_DEATHS_AT "; - globalleaderboards += "LB_ZM_GB_DISTANCE_TRAVELED_AT "; - globalleaderboards += "LB_ZM_GB_DOORS_PURCHASED_AT "; - globalleaderboards += "LB_ZM_GB_DOWNS_AT "; - globalleaderboards += "LB_ZM_GB_GIBS_AT "; - globalleaderboards += "LB_ZM_GB_GRENADE_KILLS_AT "; - globalleaderboards += "LB_ZM_GB_HEADSHOTS_AT "; - globalleaderboards += "LB_ZM_GB_KILLS_AT "; - globalleaderboards += "LB_ZM_GB_PERKS_DRANK_AT "; - globalleaderboards += "LB_ZM_GB_REVIVES_AT "; - if ( sessionmodeisprivateonlinegame() ) - { - precacheleaderboards( globalleaderboards ); - return; - } - maplocationname = level.scr_zm_map_start_location; - if ( maplocationname != "default" && maplocationname == "" && isDefined( level.default_start_location ) ) - { - maplocationname = level.default_start_location; - } - if ( level.scr_zm_ui_gametype_group != "zclassic" && level.scr_zm_ui_gametype_group == "zsurvival" && level.scr_zm_ui_gametype != "zcleansed" ) - { - expectedplayernum = getnumexpectedplayers(); - if ( expectedplayernum == 1 ) - { - gamemodeleaderboard = "LB_ZM_GM_" + level.scr_zm_ui_gametype + "_" + maplocationname + "_" + expectedplayernum + "PLAYER"; - } - else - { - gamemodeleaderboard = "LB_ZM_GM_" + level.scr_zm_ui_gametype + "_" + maplocationname + "_" + expectedplayernum + "PLAYERS"; - } - } - else - { - gamemodeleaderboard = "LB_ZM_GM_" + level.scr_zm_ui_gametype + "_" + maplocationname; - } - precacheleaderboards( globalleaderboards + gamemodeleaderboard ); -} - -zm_on_player_connect() -{ - if ( level.passed_introscreen ) - { - self setclientuivisibilityflag( "hud_visible", 1 ); - } - thread refresh_player_navcard_hud(); - self thread watchdisconnect(); -} - -zm_on_player_disconnect() -{ - thread refresh_player_navcard_hud(); -} - -watchdisconnect() -{ - self notify( "watchDisconnect" ); - self endon( "watchDisconnect" ); - self waittill( "disconnect" ); - zm_on_player_disconnect(); -} - -increment_dog_round_stat( stat ) -{ - players = get_players(); - _a6491 = players; - _k6491 = getFirstArrayKey( _a6491 ); - while ( isDefined( _k6491 ) ) - { - player = _a6491[ _k6491 ]; - player maps/mp/zombies/_zm_stats::increment_client_stat( "zdog_rounds_" + stat ); - _k6491 = getNextArrayKey( _a6491, _k6491 ); - } -} - -setup_player_navcard_hud() -{ - flag_wait( "start_zombie_round_logic" ); - thread refresh_player_navcard_hud(); -} - -refresh_player_navcard_hud() -{ - if ( !isDefined( level.navcards ) ) - { - return; - } - players = get_players(); - _a6509 = players; - _k6509 = getFirstArrayKey( _a6509 ); - while ( isDefined( _k6509 ) ) - { - player = _a6509[ _k6509 ]; - navcard_bits = 0; - i = 0; - while ( i < level.navcards.size ) - { - hasit = player maps/mp/zombies/_zm_stats::get_global_stat( level.navcards[ i ] ); - if ( isDefined( player.navcard_grabbed ) && player.navcard_grabbed == level.navcards[ i ] ) - { - hasit = 1; - } - if ( hasit ) - { - navcard_bits += 1 << i; - } - i++; - } - wait_network_frame(); - player setclientfield( "navcard_held", 0 ); - if ( navcard_bits > 0 ) - { - wait_network_frame(); - player setclientfield( "navcard_held", navcard_bits ); - } - _k6509 = getNextArrayKey( _a6509, _k6509 ); - } -} - -check_quickrevive_for_hotjoin( disconnecting_player ) -{ - solo_mode = 0; - subtract_num = 0; - should_update = 0; - if ( isDefined( disconnecting_player ) ) - { - subtract_num = 1; - } - players = get_players(); - if ( ( players.size - subtract_num ) == 1 || isDefined( level.force_solo_quick_revive ) && level.force_solo_quick_revive ) - { - solo_mode = 1; - if ( !flag( "solo_game" ) ) - { - should_update = 1; - } - flag_set( "solo_game" ); - } - else - { - if ( flag( "solo_game" ) ) - { - should_update = 1; - } - flag_clear( "solo_game" ); - } - level.using_solo_revive = solo_mode; - level.revive_machine_is_solo = solo_mode; - set_default_laststand_pistol( solo_mode ); - if ( should_update && isDefined( level.quick_revive_machine ) ) - { - update_quick_revive( solo_mode ); - } -} - -set_default_laststand_pistol( solo_mode ) -{ - if ( !solo_mode ) - { - level.laststandpistol = level.default_laststandpistol; - } - else - { - level.laststandpistol = level.default_solo_laststandpistol; - } -} - -update_quick_revive( solo_mode ) -{ - if ( !isDefined( solo_mode ) ) - { - solo_mode = 0; - } - clip = undefined; - if ( isDefined( level.quick_revive_machine_clip ) ) - { - clip = level.quick_revive_machine_clip; - } - level.quick_revive_machine thread maps/mp/zombies/_zm_perks::reenable_quickrevive( clip, solo_mode ); -} - -player_too_many_players_check() -{ - max_players = 4; - if ( level.scr_zm_ui_gametype == "zgrief" || level.scr_zm_ui_gametype == "zmeat" ) - { - max_players = 8; - } - if ( get_players().size > max_players ) - { - maps/mp/zombies/_zm_game_module::freeze_players( 1 ); - level notify( "end_game" ); - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_ai_basic.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_ai_basic.gsc deleted file mode 100644 index edfc09a..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_ai_basic.gsc +++ /dev/null @@ -1,566 +0,0 @@ -#include maps/mp/animscripts/zm_shared; -#include maps/mp/animscripts/zm_run; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -find_flesh() -{ - self endon( "death" ); - level endon( "intermission" ); - self endon( "stop_find_flesh" ); - if ( level.intermission ) - { - return; - } - self.ai_state = "find_flesh"; - self.helitarget = 1; - self.ignoreme = 0; - self.nododgemove = 1; - self.ignore_player = []; - self maps/mp/zombies/_zm_spawner::zombie_history( "find flesh -> start" ); - self.goalradius = 32; - while ( 1 ) - { - zombie_poi = undefined; - if ( isDefined( level.zombietheaterteleporterseeklogicfunc ) ) - { - self [[ level.zombietheaterteleporterseeklogicfunc ]](); - } - if ( isDefined( level._poi_override ) ) - { - zombie_poi = self [[ level._poi_override ]](); - } - if ( !isDefined( zombie_poi ) ) - { - zombie_poi = self get_zombie_point_of_interest( self.origin ); - } - players = get_players(); - if ( !isDefined( self.ignore_player ) || players.size == 1 ) - { - self.ignore_player = []; - } - else - { - while ( !isDefined( level._should_skip_ignore_player_logic ) || !( [[ level._should_skip_ignore_player_logic ]]() ) ) - { - i = 0; - while ( i < self.ignore_player.size ) - { - while ( isDefined( self.ignore_player[ i ] ) && isDefined( self.ignore_player[ i ].ignore_counter ) && self.ignore_player[ i ].ignore_counter > 3 ) - { - self.ignore_player[ i ].ignore_counter = 0; - self.ignore_player = arrayremovevalue( self.ignore_player, self.ignore_player[ i ] ); - if ( !isDefined( self.ignore_player ) ) - { - self.ignore_player = []; - } - i = 0; - } - i++; - } - } - } - player = get_closest_valid_player( self.origin, self.ignore_player ); - while ( !isDefined( player ) && !isDefined( zombie_poi ) ) - { - self maps/mp/zombies/_zm_spawner::zombie_history( "find flesh -> can't find player, continue" ); - if ( isDefined( self.ignore_player ) ) - { - while ( isDefined( level._should_skip_ignore_player_logic ) && [[ level._should_skip_ignore_player_logic ]]() ) - { - wait 1; - } - self.ignore_player = []; - } - wait 1; - } - if ( !isDefined( level.check_for_alternate_poi ) || !( [[ level.check_for_alternate_poi ]]() ) ) - { - self.enemyoverride = zombie_poi; - self.favoriteenemy = player; - } - self thread zombie_pathing(); - while ( players.size > 1 ) - { - i = 0; - while ( i < self.ignore_player.size ) - { - if ( isDefined( self.ignore_player[ i ] ) ) - { - if ( !isDefined( self.ignore_player[ i ].ignore_counter ) ) - { - self.ignore_player[ i ].ignore_counter = 0; - i++; - continue; - } - else - { - self.ignore_player[ i ].ignore_counter += 1; - } - } - i++; - } - } - self thread attractors_generated_listener(); - if ( isDefined( level._zombie_path_timer_override ) ) - { - self.zombie_path_timer = [[ level._zombie_path_timer_override ]](); - } - else - { - self.zombie_path_timer = getTime() + ( randomfloatrange( 1, 3 ) * 1000 ); - } - while ( getTime() < self.zombie_path_timer ) - { - wait 0,1; - } - self notify( "path_timer_done" ); - self maps/mp/zombies/_zm_spawner::zombie_history( "find flesh -> bottom of loop" ); - debug_print( "Zombie is re-acquiring enemy, ending breadcrumb search" ); - self notify( "zombie_acquire_enemy" ); - } -} - -init_inert_zombies() -{ - level init_inert_substates(); -} - -init_inert_substates() -{ - level.inert_substates = []; - level.inert_substates[ level.inert_substates.size ] = "inert1"; - level.inert_substates[ level.inert_substates.size ] = "inert2"; - level.inert_substates[ level.inert_substates.size ] = "inert3"; - level.inert_substates[ level.inert_substates.size ] = "inert4"; - level.inert_substates[ level.inert_substates.size ] = "inert5"; - level.inert_substates[ level.inert_substates.size ] = "inert6"; - level.inert_substates[ level.inert_substates.size ] = "inert7"; - level.inert_substates = array_randomize( level.inert_substates ); - level.inert_substate_index = 0; - level.inert_trans_walk = []; - level.inert_trans_walk[ level.inert_trans_walk.size ] = "inert_2_walk_1"; - level.inert_trans_walk[ level.inert_trans_walk.size ] = "inert_2_walk_2"; - level.inert_trans_walk[ level.inert_trans_walk.size ] = "inert_2_walk_3"; - level.inert_trans_walk[ level.inert_trans_walk.size ] = "inert_2_walk_4"; - level.inert_trans_run = []; - level.inert_trans_run[ level.inert_trans_run.size ] = "inert_2_run_1"; - level.inert_trans_run[ level.inert_trans_run.size ] = "inert_2_run_2"; - level.inert_trans_sprint = []; - level.inert_trans_sprint[ level.inert_trans_sprint.size ] = "inert_2_sprint_1"; - level.inert_trans_sprint[ level.inert_trans_sprint.size ] = "inert_2_sprint_2"; - level.inert_crawl_substates = []; - level.inert_crawl_substates[ level.inert_crawl_substates.size ] = "inert1"; - level.inert_crawl_substates[ level.inert_crawl_substates.size ] = "inert2"; - level.inert_crawl_substates[ level.inert_crawl_substates.size ] = "inert3"; - level.inert_crawl_substates[ level.inert_crawl_substates.size ] = "inert4"; - level.inert_crawl_substates[ level.inert_crawl_substates.size ] = "inert5"; - level.inert_crawl_substates[ level.inert_crawl_substates.size ] = "inert6"; - level.inert_crawl_substates[ level.inert_crawl_substates.size ] = "inert7"; - level.inert_crawl_trans_walk = []; - level.inert_crawl_trans_walk[ level.inert_crawl_trans_walk.size ] = "inert_2_walk_1"; - level.inert_crawl_trans_run = []; - level.inert_crawl_trans_run[ level.inert_crawl_trans_run.size ] = "inert_2_run_1"; - level.inert_crawl_trans_run[ level.inert_crawl_trans_run.size ] = "inert_2_run_2"; - level.inert_crawl_trans_sprint = []; - level.inert_crawl_trans_sprint[ level.inert_crawl_trans_sprint.size ] = "inert_2_sprint_1"; - level.inert_crawl_trans_sprint[ level.inert_crawl_trans_sprint.size ] = "inert_2_sprint_2"; - level.inert_crawl_substates = array_randomize( level.inert_crawl_substates ); - level.inert_crawl_substate_index = 0; -} - -get_inert_substate() -{ - substate = level.inert_substates[ level.inert_substate_index ]; - level.inert_substate_index++; - if ( level.inert_substate_index >= level.inert_substates.size ) - { - level.inert_substates = array_randomize( level.inert_substates ); - level.inert_substate_index = 0; - } - return substate; -} - -get_inert_crawl_substate() -{ - substate = level.inert_crawl_substates[ level.inert_crawl_substate_index ]; - level.inert_crawl_substate_index++; - if ( level.inert_crawl_substate_index >= level.inert_crawl_substates.size ) - { - level.inert_crawl_substates = array_randomize( level.inert_crawl_substates ); - level.inert_crawl_substate_index = 0; - } - return substate; -} - -start_inert( in_place ) -{ - self endon( "death" ); - if ( isDefined( self.is_inert ) && self.is_inert ) - { - self maps/mp/zombies/_zm_spawner::zombie_history( "is_inert already set " + getTime() ); - return; - } - self.is_inert = 1; - self notify( "start_inert" ); - self maps/mp/zombies/_zm_spawner::zombie_eye_glow_stop(); - self maps/mp/zombies/_zm_spawner::zombie_history( "is_inert set " + getTime() ); - self playsound( "zmb_zombie_go_inert" ); - if ( isDefined( self.barricade_enter ) && self.barricade_enter ) - { - while ( isDefined( self.barricade_enter ) && self.barricade_enter ) - { - wait 0,1; - } - } - else if ( isDefined( self.ai_state ) && self.ai_state == "zombie_goto_entrance" ) - { - self notify( "stop_zombie_goto_entrance" ); - self maps/mp/zombies/_zm_spawner::reset_attack_spot(); - } - if ( isDefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area ) - { - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - } - else - { - in_place = 1; - } - if ( isDefined( self.in_the_ground ) && self.in_the_ground ) - { - self waittill( "risen", find_flesh_struct_string ); - if ( self maps/mp/zombies/_zm_spawner::should_skip_teardown( find_flesh_struct_string ) ) - { - if ( isDefined( self.completed_emerging_into_playable_area ) && !self.completed_emerging_into_playable_area ) - { - self waittill( "completed_emerging_into_playable_area" ); - } - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - } - } - while ( isDefined( self.is_traversing ) && self.is_traversing ) - { - while ( self isinscriptedstate() ) - { - wait 0,1; - } - } - if ( isDefined( self.doing_equipment_attack ) && self.doing_equipment_attack ) - { - self stopanimscripted(); - } - if ( isDefined( self.inert_delay ) ) - { - self [[ self.inert_delay ]](); - self maps/mp/zombies/_zm_spawner::zombie_history( "inert_delay done " + getTime() ); - } - self inert_think( in_place ); -} - -inert_think( in_place ) -{ - self endon( "death" ); - self.ignoreall = 1; - self animmode( "normal" ); - if ( self.has_legs ) - { - if ( isDefined( in_place ) && in_place ) - { - self setgoalpos( self.origin ); - if ( randomint( 100 ) > 50 ) - { - self maps/mp/zombies/_zm_spawner::zombie_history( "inert 1 " + getTime() ); - self setanimstatefromasd( "zm_inert", "inert1" ); - } - else - { - self maps/mp/zombies/_zm_spawner::zombie_history( "inert 2 " + getTime() ); - self setanimstatefromasd( "zm_inert", "inert2" ); - } - self.in_place = 1; - } - else - { - substate = get_inert_substate(); - if ( isDefined( level.inert_substate_override ) ) - { - substate = self [[ level.inert_substate_override ]]( substate ); - } - self setanimstatefromasd( "zm_inert", substate ); - self maps/mp/zombies/_zm_spawner::zombie_history( "zm_inert ASD " + getTime() ); - if ( substate != "inert3" && substate != "inert4" || substate == "inert5" && substate == "inert6" ) - { - self thread inert_watch_goal(); - } - else - { - self.in_place = 1; - } - } - } - else - { - self setanimstatefromasd( "zm_inert_crawl", get_inert_crawl_substate() ); - self maps/mp/zombies/_zm_spawner::zombie_history( "zm_inert_crawl ASD " + getTime() ); - } - self thread inert_wakeup(); - self waittill( "stop_zombie_inert" ); - self maps/mp/zombies/_zm_spawner::zombie_history( "stop_zombie_inert " + getTime() ); - self playsound( "zmb_zombie_end_inert" ); - self inert_transition(); - self maps/mp/zombies/_zm_spawner::zombie_history( "inert transition done" ); - if ( isDefined( self.ai_state ) && self.ai_state == "zombie_goto_entrance" ) - { - self thread maps/mp/zombies/_zm_spawner::zombie_goto_entrance( self.first_node ); - } - if ( isDefined( self.inert_wakeup_override ) ) - { - self [[ self.inert_wakeup_override ]](); - } - else - { - if ( isDefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area ) - { - self.ignoreall = 0; - if ( isDefined( level.ignore_find_flesh ) && !( self [[ level.ignore_find_flesh ]]() ) ) - { - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - } - } - } - self.becoming_inert = undefined; - self.is_inert = undefined; - self.in_place = undefined; - self maps/mp/animscripts/zm_run::needsupdate(); - self maps/mp/zombies/_zm_spawner::zombie_history( "is_inert cleared " + getTime() ); -} - -inert_watch_goal() -{ - self endon( "death" ); - self endon( "stop_zombie_inert" ); - while ( 1 ) - { - self waittill( "goal" ); - locs = array_randomize( level.enemy_dog_locations ); - _a476 = locs; - _k476 = getFirstArrayKey( _a476 ); - while ( isDefined( _k476 ) ) - { - loc = _a476[ _k476 ]; - dist_sq = distancesquared( self.origin, loc.origin ); - if ( dist_sq > 90000 ) - { - self setgoalpos( loc.origin ); - break; - } - _k476 = getNextArrayKey( _a476, _k476 ); - } - if ( locs.size > 0 ) - { - self setgoalpos( locs[ 0 ].origin ); - } - } -} - -inert_wakeup() -{ - self endon( "death" ); - self endon( "stop_zombie_inert" ); - wait 0,1; - self thread inert_damage(); - self thread inert_bump(); - while ( 1 ) - { - current_time = getTime(); - players = get_players(); - _a517 = players; - _k517 = getFirstArrayKey( _a517 ); - while ( isDefined( _k517 ) ) - { - player = _a517[ _k517 ]; - dist_sq = distancesquared( self.origin, player.origin ); - if ( dist_sq < 4096 ) - { - self stop_inert(); - return; - } - if ( dist_sq < 360000 ) - { - if ( player issprinting() ) - { - self stop_inert(); - return; - } - } - if ( dist_sq < 5760000 ) - { - if ( ( current_time - player.lastfiretime ) < 100 ) - { - self stop_inert(); - return; - } - } - _k517 = getNextArrayKey( _a517, _k517 ); - } - wait 0,1; - } -} - -inert_bump() -{ - self endon( "death" ); - self endon( "stop_zombie_inert" ); - while ( 1 ) - { - zombies = getaiarray( level.zombie_team ); - _a557 = zombies; - _k557 = getFirstArrayKey( _a557 ); - while ( isDefined( _k557 ) ) - { - zombie = _a557[ _k557 ]; - if ( zombie == self ) - { - } - else if ( isDefined( zombie.is_inert ) && zombie.is_inert ) - { - } - else - { - if ( isDefined( zombie.becoming_inert ) && zombie.becoming_inert ) - { - break; - } - else - { - dist_sq = distancesquared( self.origin, zombie.origin ); - if ( dist_sq < 1296 ) - { - self stop_inert(); - return; - } - } - } - _k557 = getNextArrayKey( _a557, _k557 ); - } - wait 0,2; - } -} - -inert_damage() -{ - self endon( "death" ); - self endon( "stop_zombie_inert" ); - while ( 1 ) - { - self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); - while ( weaponname == "emp_grenade_zm" ) - { - continue; - } - while ( isDefined( inflictor ) ) - { - if ( isDefined( inflictor._trap_type ) && inflictor._trap_type == "fire" ) - { - continue; - } - } - } - self stop_inert(); -} - -grenade_watcher( grenade ) -{ - grenade waittill( "explode", grenade_origin ); - zombies = get_array_of_closest( grenade_origin, get_round_enemy_array(), undefined, undefined, 2400 ); - if ( !isDefined( zombies ) ) - { - return; - } - _a628 = zombies; - _k628 = getFirstArrayKey( _a628 ); - while ( isDefined( _k628 ) ) - { - zombie = _a628[ _k628 ]; - zombie stop_inert(); - _k628 = getNextArrayKey( _a628, _k628 ); - } -} - -stop_inert() -{ - self notify( "stop_zombie_inert" ); -} - -inert_transition() -{ - self endon( "death" ); - self endon( "stop_zombie_inert_transition" ); - trans_num = 4; - trans_set = level.inert_trans_walk; - animstate = "zm_inert_trans"; - if ( !self.has_legs ) - { - trans_num = 1; - trans_set = level.inert_crawl_trans_walk; - animstate = "zm_inert_crawl_trans"; - } - if ( self.zombie_move_speed == "run" ) - { - if ( self.has_legs ) - { - trans_set = level.inert_trans_run; - } - else - { - trans_set = level.inert_crawl_trans_run; - } - trans_num = 2; - } - else - { - if ( self.zombie_move_speed == "sprint" ) - { - if ( self.has_legs ) - { - trans_set = level.inert_trans_sprint; - } - else - { - trans_set = level.inert_crawl_trans_sprint; - } - trans_num = 2; - } - } - self thread inert_eye_glow(); - self setanimstatefromasd( animstate, trans_set[ randomint( trans_num ) ] ); - self maps/mp/zombies/_zm_spawner::zombie_history( "inert_trans_anim " + getTime() ); - maps/mp/animscripts/zm_shared::donotetracks( "inert_trans_anim" ); -} - -inert_eye_glow() -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( "inert_trans_anim", note ); - if ( note == "end" ) - { - return; - continue; - } - else - { - if ( note == "zmb_awaken" ) - { - self maps/mp/zombies/_zm_spawner::zombie_eye_glow(); - return; - } - } - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_ai_dogs.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_ai_dogs.gsc deleted file mode 100644 index 6def473..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_ai_dogs.gsc +++ /dev/null @@ -1,798 +0,0 @@ -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - level.dogs_enabled = 1; - level.dog_rounds_enabled = 0; - level.dog_round_count = 1; - level.dog_spawners = []; - level.enemy_dog_spawns = []; - level.enemy_dog_locations = []; - flag_init( "dog_clips" ); - precacherumble( "explosion_generic" ); - precacheshellshock( "dog_bite" ); - if ( getDvar( "zombie_dog_animset" ) == "" ) - { - setdvar( "zombie_dog_animset", "zombie" ); - } - if ( getDvar( "scr_dog_health_walk_multiplier" ) == "" ) - { - setdvar( "scr_dog_health_walk_multiplier", "4.0" ); - } - if ( getDvar( "scr_dog_run_distance" ) == "" ) - { - setdvar( "scr_dog_run_distance", "500" ); - } - level.melee_range_sav = getDvar( "ai_meleeRange" ); - level.melee_width_sav = getDvar( "ai_meleeWidth" ); - level.melee_height_sav = getDvar( "ai_meleeHeight" ); - setdvar( "dog_MeleeDamage", "100" ); - set_zombie_var( "dog_fire_trail_percent", 50 ); - level._effect[ "lightning_dog_spawn" ] = loadfx( "maps/zombie/fx_zombie_dog_lightning_buildup" ); - level._effect[ "dog_eye_glow" ] = loadfx( "maps/zombie/fx_zombie_dog_eyes" ); - level._effect[ "dog_gib" ] = loadfx( "maps/zombie/fx_zombie_dog_explosion" ); - level._effect[ "dog_trail_fire" ] = loadfx( "maps/zombie/fx_zombie_dog_fire_trail" ); - level._effect[ "dog_trail_ash" ] = loadfx( "maps/zombie/fx_zombie_dog_ash_trail" ); - dog_spawner_init(); - level thread dog_clip_monitor(); -} - -enable_dog_rounds() -{ - level.dog_rounds_enabled = 1; - if ( !isDefined( level.dog_round_track_override ) ) - { - level.dog_round_track_override = ::dog_round_tracker; - } - level thread [[ level.dog_round_track_override ]](); -} - -dog_spawner_init() -{ - level.dog_spawners = getentarray( "zombie_dog_spawner", "script_noteworthy" ); - later_dogs = getentarray( "later_round_dog_spawners", "script_noteworthy" ); - level.dog_spawners = arraycombine( level.dog_spawners, later_dogs, 1, 0 ); - if ( level.dog_spawners.size == 0 ) - { - return; - } - i = 0; - while ( i < level.dog_spawners.size ) - { - if ( maps/mp/zombies/_zm_spawner::is_spawner_targeted_by_blocker( level.dog_spawners[ i ] ) ) - { - level.dog_spawners[ i ].is_enabled = 0; - i++; - continue; - } - else - { - level.dog_spawners[ i ].is_enabled = 1; - level.dog_spawners[ i ].script_forcespawn = 1; - } - i++; - } -/# - assert( level.dog_spawners.size > 0 ); -#/ - level.dog_health = 100; - array_thread( level.dog_spawners, ::add_spawn_function, ::dog_init ); - level.enemy_dog_spawns = getentarray( "zombie_spawner_dog_init", "targetname" ); -} - -dog_round_spawning() -{ - level endon( "intermission" ); - level.dog_targets = getplayers(); - i = 0; - while ( i < level.dog_targets.size ) - { - level.dog_targets[ i ].hunted_by = 0; - i++; - } -/# - level endon( "kill_round" ); - if ( getDvarInt( "zombie_cheat" ) == 2 || getDvarInt( "zombie_cheat" ) >= 4 ) - { - return; -#/ - } - if ( level.intermission ) - { - return; - } - level.dog_intermission = 1; - level thread dog_round_aftermath(); - players = get_players(); - array_thread( players, ::play_dog_round ); - wait 1; - playsoundatposition( "vox_zmba_event_dogstart_0", ( 0, 0, 0 ) ); - wait 6; - if ( level.dog_round_count < 3 ) - { - max = players.size * 6; - } - else - { - max = players.size * 8; - } -/# - if ( getDvar( "force_dogs" ) != "" ) - { - max = getDvarInt( "force_dogs" ); -#/ - } - level.zombie_total = max; - dog_health_increase(); - count = 0; - while ( count < max ) - { - num_player_valid = get_number_of_valid_players(); - while ( get_current_zombie_count() >= ( num_player_valid * 2 ) ) - { - wait 2; - num_player_valid = get_number_of_valid_players(); - } - players = get_players(); - favorite_enemy = get_favorite_enemy(); - if ( isDefined( level.dog_spawn_func ) ) - { - spawn_loc = [[ level.dog_spawn_func ]]( level.dog_spawners, favorite_enemy ); - ai = spawn_zombie( level.dog_spawners[ 0 ] ); - if ( isDefined( ai ) ) - { - ai.favoriteenemy = favorite_enemy; - spawn_loc thread dog_spawn_fx( ai, spawn_loc ); - level.zombie_total--; - - count++; - } - } - else - { - spawn_point = dog_spawn_factory_logic( level.enemy_dog_spawns, favorite_enemy ); - ai = spawn_zombie( level.dog_spawners[ 0 ] ); - if ( isDefined( ai ) ) - { - ai.favoriteenemy = favorite_enemy; - spawn_point thread dog_spawn_fx( ai, spawn_point ); - level.zombie_total--; - - count++; - flag_set( "dog_clips" ); - } - } - waiting_for_next_dog_spawn( count, max ); - } -} - -waiting_for_next_dog_spawn( count, max ) -{ - default_wait = 1,5; - if ( level.dog_round_count == 1 ) - { - default_wait = 3; - } - else if ( level.dog_round_count == 2 ) - { - default_wait = 2,5; - } - else if ( level.dog_round_count == 3 ) - { - default_wait = 2; - } - else - { - default_wait = 1,5; - } - default_wait -= count / max; - wait default_wait; -} - -dog_round_aftermath() -{ - level waittill( "last_dog_down" ); - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "dog_end" ); - power_up_origin = level.last_dog_origin; - if ( isDefined( power_up_origin ) ) - { - level thread maps/mp/zombies/_zm_powerups::specific_powerup_drop( "full_ammo", power_up_origin ); - } - wait 2; - clientnotify( "dog_stop" ); - wait 6; - level.dog_intermission = 0; -} - -dog_spawn_fx( ai, ent ) -{ - ai setfreecameralockonallowed( 0 ); - playfx( level._effect[ "lightning_dog_spawn" ], ent.origin ); - playsoundatposition( "zmb_hellhound_prespawn", ent.origin ); - wait 1,5; - playsoundatposition( "zmb_hellhound_bolt", ent.origin ); - earthquake( 0,5, 0,75, ent.origin, 1000 ); - playrumbleonposition( "explosion_generic", ent.origin ); - playsoundatposition( "zmb_hellhound_spawn", ent.origin ); - angle = vectorToAngle( ai.favoriteenemy.origin - ent.origin ); - angles = ( ai.angles[ 0 ], angle[ 1 ], ai.angles[ 2 ] ); - ai forceteleport( ent.origin, angles ); -/# - assert( isDefined( ai ), "Ent isn't defined." ); -#/ -/# - assert( isalive( ai ), "Ent is dead." ); -#/ -/# - assert( ai.isdog, "Ent isn't a dog;" ); -#/ -/# - assert( is_magic_bullet_shield_enabled( ai ), "Ent doesn't have a magic bullet shield." ); -#/ - ai zombie_setup_attack_properties_dog(); - ai stop_magic_bullet_shield(); - wait 0,1; - ai show(); - ai setfreecameralockonallowed( 1 ); - ai.ignoreme = 0; - ai notify( "visible" ); -} - -dog_spawn_sumpf_logic( dog_array, favorite_enemy ) -{ -/# - assert( dog_array.size > 0, "Dog Spawner array is empty." ); -#/ - dog_array = array_randomize( dog_array ); - i = 0; - while ( i < dog_array.size ) - { - if ( isDefined( level.old_dog_spawn ) && level.old_dog_spawn == dog_array[ i ] ) - { - i++; - continue; - } - else - { - if ( distancesquared( dog_array[ i ].origin, favorite_enemy.origin ) > 160000 && distancesquared( dog_array[ i ].origin, favorite_enemy.origin ) < 640000 ) - { - if ( distancesquared( ( 0, 0, dog_array[ i ].origin[ 2 ] ), ( 0, 0, favorite_enemy.origin[ 2 ] ) ) > 10000 ) - { - i++; - continue; - } - else level.old_dog_spawn = dog_array[ i ]; - return dog_array[ i ]; - } - } - i++; - } - return dog_array[ 0 ]; -} - -dog_spawn_factory_logic( dog_array, favorite_enemy ) -{ - dog_locs = array_randomize( level.enemy_dog_locations ); - i = 0; - while ( i < dog_locs.size ) - { - if ( isDefined( level.old_dog_spawn ) && level.old_dog_spawn == dog_locs[ i ] ) - { - i++; - continue; - } - else - { - dist_squared = distancesquared( dog_locs[ i ].origin, favorite_enemy.origin ); - if ( dist_squared > 160000 && dist_squared < 1000000 ) - { - level.old_dog_spawn = dog_locs[ i ]; - return dog_locs[ i ]; - } - } - i++; - } - return dog_locs[ 0 ]; -} - -get_favorite_enemy() -{ - dog_targets = getplayers(); - least_hunted = dog_targets[ 0 ]; - i = 0; - while ( i < dog_targets.size ) - { - if ( !isDefined( dog_targets[ i ].hunted_by ) ) - { - dog_targets[ i ].hunted_by = 0; - } - if ( !is_player_valid( dog_targets[ i ] ) ) - { - i++; - continue; - } - else - { - if ( !is_player_valid( least_hunted ) ) - { - least_hunted = dog_targets[ i ]; - } - if ( dog_targets[ i ].hunted_by < least_hunted.hunted_by ) - { - least_hunted = dog_targets[ i ]; - } - } - i++; - } - least_hunted.hunted_by += 1; - return least_hunted; -} - -dog_health_increase() -{ - players = getplayers(); - if ( level.dog_round_count == 1 ) - { - level.dog_health = 400; - } - else if ( level.dog_round_count == 2 ) - { - level.dog_health = 900; - } - else if ( level.dog_round_count == 3 ) - { - level.dog_health = 1300; - } - else - { - if ( level.dog_round_count == 4 ) - { - level.dog_health = 1600; - } - } - if ( level.dog_health > 1600 ) - { - level.dog_health = 1600; - } -} - -dog_round_tracker() -{ - level.dog_round_count = 1; - level.next_dog_round = level.round_number + randomintrange( 4, 7 ); - old_spawn_func = level.round_spawn_func; - old_wait_func = level.round_wait_func; - while ( 1 ) - { - level waittill( "between_round_over" ); -/# - if ( getDvarInt( "force_dogs" ) > 0 ) - { - level.next_dog_round = level.round_number; -#/ - } - if ( level.round_number == level.next_dog_round ) - { - level.music_round_override = 1; - old_spawn_func = level.round_spawn_func; - old_wait_func = level.round_wait_func; - dog_round_start(); - level.round_spawn_func = ::dog_round_spawning; - level.next_dog_round = level.round_number + randomintrange( 4, 6 ); -/# - get_players()[ 0 ] iprintln( "Next dog round: " + level.next_dog_round ); -#/ - continue; - } - else - { - if ( flag( "dog_round" ) ) - { - dog_round_stop(); - level.round_spawn_func = old_spawn_func; - level.round_wait_func = old_wait_func; - level.music_round_override = 0; - level.dog_round_count += 1; - } - } - } -} - -dog_round_start() -{ - flag_set( "dog_round" ); - flag_set( "dog_clips" ); - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "dog_start" ); - if ( !isDefined( level.doground_nomusic ) ) - { - level.doground_nomusic = 0; - } - level.doground_nomusic = 1; - level notify( "dog_round_starting" ); - clientnotify( "dog_start" ); - if ( isDefined( level.dog_melee_range ) ) - { - setdvar( "ai_meleeRange", level.dog_melee_range ); - } - else - { - setdvar( "ai_meleeRange", 100 ); - } -} - -dog_round_stop() -{ - flag_clear( "dog_round" ); - flag_clear( "dog_clips" ); - if ( !isDefined( level.doground_nomusic ) ) - { - level.doground_nomusic = 0; - } - level.doground_nomusic = 0; - level notify( "dog_round_ending" ); - clientnotify( "dog_stop" ); - setdvar( "ai_meleeRange", level.melee_range_sav ); - setdvar( "ai_meleeWidth", level.melee_width_sav ); - setdvar( "ai_meleeHeight", level.melee_height_sav ); -} - -play_dog_round() -{ - self playlocalsound( "zmb_dog_round_start" ); - variation_count = 5; - wait 4,5; - players = getplayers(); - num = randomintrange( 0, players.size ); - players[ num ] maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "dog_spawn" ); -} - -dog_init() -{ - self.targetname = "zombie_dog"; - self.script_noteworthy = undefined; - self.animname = "zombie_dog"; - self.ignoreall = 1; - self.ignoreme = 1; - self.allowdeath = 1; - self.allowpain = 0; - self.force_gib = 1; - self.is_zombie = 1; - self.has_legs = 1; - self.gibbed = 0; - self.head_gibbed = 0; - self.default_goalheight = 40; - self.ignore_inert = 1; - self.grenadeawareness = 0; - self.badplaceawareness = 0; - self.ignoresuppression = 1; - self.suppressionthreshold = 1; - self.nododgemove = 1; - self.dontshootwhilemoving = 1; - self.pathenemylookahead = 0; - self.badplaceawareness = 0; - self.chatinitialized = 0; - self.team = level.zombie_team; - health_multiplier = 1; - if ( getDvar( "scr_dog_health_walk_multiplier" ) != "" ) - { - health_multiplier = getDvarFloat( "scr_dog_health_walk_multiplier" ); - } - self.maxhealth = int( level.dog_health * health_multiplier ); - self.health = int( level.dog_health * health_multiplier ); - self.freezegun_damage = 0; - self.zombie_move_speed = "sprint"; - self thread dog_run_think(); - self thread dog_stalk_audio(); - self thread maps/mp/zombies/_zm::round_spawn_failsafe(); - self hide(); - self thread magic_bullet_shield(); - self dog_fx_eye_glow(); - self dog_fx_trail(); - self thread dog_death(); - level thread maps/mp/zombies/_zm_spawner::zombie_death_event( self ); - self thread maps/mp/zombies/_zm_spawner::enemy_death_detection(); - self.a.disablepain = 1; - self disable_react(); - self clearenemy(); - self cleargoalvolume(); - self.flame_damage_time = 0; - self.meleedamage = 40; - self.thundergun_knockdown_func = ::dog_thundergun_knockdown; - self maps/mp/zombies/_zm_spawner::zombie_history( "zombie_dog_spawn_init -> Spawned = " + self.origin ); - if ( isDefined( level.achievement_monitor_func ) ) - { - self [[ level.achievement_monitor_func ]](); - } -} - -dog_fx_eye_glow() -{ - self.fx_dog_eye = spawn( "script_model", self gettagorigin( "J_EyeBall_LE" ) ); -/# - assert( isDefined( self.fx_dog_eye ) ); -#/ - self.fx_dog_eye.angles = self gettagangles( "J_EyeBall_LE" ); - self.fx_dog_eye setmodel( "tag_origin" ); - self.fx_dog_eye linkto( self, "J_EyeBall_LE" ); -} - -dog_fx_trail() -{ - if ( !is_mature() || randomint( 100 ) > level.zombie_vars[ "dog_fire_trail_percent" ] ) - { - self.fx_dog_trail_type = level._effect[ "dog_trail_ash" ]; - self.fx_dog_trail_sound = "zmb_hellhound_loop_breath"; - } - else - { - self.a.nodeath = 1; - self.fx_dog_trail_type = level._effect[ "dog_trail_fire" ]; - self.fx_dog_trail_sound = "zmb_hellhound_loop_fire"; - } - self.fx_dog_trail = spawn( "script_model", self gettagorigin( "tag_origin" ) ); -/# - assert( isDefined( self.fx_dog_trail ) ); -#/ - self.fx_dog_trail.angles = self gettagangles( "tag_origin" ); - self.fx_dog_trail setmodel( "tag_origin" ); - self.fx_dog_trail linkto( self, "tag_origin" ); -} - -dog_death() -{ - self waittill( "death" ); - if ( get_current_zombie_count() == 0 && level.zombie_total == 0 ) - { - level.last_dog_origin = self.origin; - level notify( "last_dog_down" ); - } - if ( isplayer( self.attacker ) ) - { - event = "death"; - if ( issubstr( self.damageweapon, "knife_ballistic_" ) ) - { - event = "ballistic_knife_death"; - } - self.attacker maps/mp/zombies/_zm_score::player_add_points( event, self.damagemod, self.damagelocation, 1 ); - if ( randomintrange( 0, 100 ) >= 80 ) - { - self.attacker maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "hellhound" ); - } - self.attacker maps/mp/zombies/_zm_stats::increment_client_stat( "zdogs_killed" ); - self.attacker maps/mp/zombies/_zm_stats::increment_player_stat( "zdogs_killed" ); - } - if ( isDefined( self.attacker ) && isai( self.attacker ) ) - { - self.attacker notify( "killed" ); - } - self stoploopsound(); -/# - assert( isDefined( self.fx_dog_eye ) ); -#/ - self.fx_dog_eye delete(); -/# - assert( isDefined( self.fx_dog_trail ) ); -#/ - self.fx_dog_trail delete(); - if ( isDefined( self.a.nodeath ) ) - { - level thread dog_explode_fx( self.origin ); - self delete(); - } - else - { - self playsound( "zmb_hellhound_vocals_death" ); - } -} - -dog_explode_fx( origin ) -{ - playfx( level._effect[ "dog_gib" ], origin ); - playsoundatposition( "zmb_hellhound_explode", origin ); -} - -zombie_setup_attack_properties_dog() -{ - self maps/mp/zombies/_zm_spawner::zombie_history( "zombie_setup_attack_properties()" ); - self thread dog_behind_audio(); - self.ignoreall = 0; - self.pathenemyfightdist = 64; - self.meleeattackdist = 64; - self.disablearrivals = 1; - self.disableexits = 1; -} - -stop_dog_sound_on_death() -{ - self waittill( "death" ); - self stopsounds(); -} - -dog_behind_audio() -{ - self thread stop_dog_sound_on_death(); - self endon( "death" ); - self waittill_any( "dog_running", "dog_combat" ); - self playsound( "zmb_hellhound_vocals_close" ); - wait 3; - while ( 1 ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - dogangle = angleClamp180( vectorToAngle( self.origin - players[ i ].origin )[ 1 ] - players[ i ].angles[ 1 ] ); - if ( isalive( players[ i ] ) && !isDefined( players[ i ].revivetrigger ) ) - { - if ( abs( dogangle ) > 90 && distance2d( self.origin, players[ i ].origin ) > 100 ) - { - self playsound( "zmb_hellhound_vocals_close" ); - wait 3; - } - } - i++; - } - wait 0,75; - } -} - -dog_clip_monitor() -{ - clips_on = 0; - level.dog_clips = getentarray( "dog_clips", "targetname" ); - while ( 1 ) - { - i = 0; - while ( i < level.dog_clips.size ) - { - level.dog_clips[ i ] trigger_off(); - level.dog_clips[ i ] connectpaths(); - i++; - } - flag_wait( "dog_clips" ); - if ( isDefined( level.no_dog_clip ) && level.no_dog_clip == 1 ) - { - return; - } - i = 0; - while ( i < level.dog_clips.size ) - { - level.dog_clips[ i ] trigger_on(); - level.dog_clips[ i ] disconnectpaths(); - wait_network_frame(); - i++; - } - dog_is_alive = 1; - while ( dog_is_alive || flag( "dog_round" ) ) - { - dog_is_alive = 0; - dogs = getentarray( "zombie_dog", "targetname" ); - i = 0; - while ( i < dogs.size ) - { - if ( isalive( dogs[ i ] ) ) - { - dog_is_alive = 1; - } - i++; - } - wait 1; - } - flag_clear( "dog_clips" ); - wait 1; - } -} - -special_dog_spawn( spawners, num_to_spawn ) -{ - dogs = getaispeciesarray( "all", "zombie_dog" ); - if ( isDefined( dogs ) && dogs.size >= 9 ) - { - return 0; - } - if ( !isDefined( num_to_spawn ) ) - { - num_to_spawn = 1; - } - spawn_point = undefined; - count = 0; - while ( count < num_to_spawn ) - { - players = get_players(); - favorite_enemy = get_favorite_enemy(); - if ( isDefined( spawners ) ) - { - spawn_point = spawners[ randomint( spawners.size ) ]; - ai = spawn_zombie( spawn_point ); - if ( isDefined( ai ) ) - { - ai.favoriteenemy = favorite_enemy; - spawn_point thread dog_spawn_fx( ai ); - count++; - flag_set( "dog_clips" ); - } - } - else if ( isDefined( level.dog_spawn_func ) ) - { - spawn_loc = [[ level.dog_spawn_func ]]( level.dog_spawners, favorite_enemy ); - ai = spawn_zombie( level.dog_spawners[ 0 ] ); - if ( isDefined( ai ) ) - { - ai.favoriteenemy = favorite_enemy; - spawn_loc thread dog_spawn_fx( ai, spawn_loc ); - count++; - flag_set( "dog_clips" ); - } - } - else - { - spawn_point = dog_spawn_factory_logic( level.enemy_dog_spawns, favorite_enemy ); - ai = spawn_zombie( level.dog_spawners[ 0 ] ); - if ( isDefined( ai ) ) - { - ai.favoriteenemy = favorite_enemy; - spawn_point thread dog_spawn_fx( ai, spawn_point ); - count++; - flag_set( "dog_clips" ); - } - } - waiting_for_next_dog_spawn( count, num_to_spawn ); - } - return 1; -} - -dog_run_think() -{ - self endon( "death" ); - self waittill( "visible" ); - if ( self.health > level.dog_health ) - { - self.maxhealth = level.dog_health; - self.health = level.dog_health; - } -/# - assert( isDefined( self.fx_dog_eye ) ); -#/ - maps/mp/zombies/_zm_net::network_safe_play_fx_on_tag( "dog_fx", 2, level._effect[ "dog_eye_glow" ], self.fx_dog_eye, "tag_origin" ); -/# - assert( isDefined( self.fx_dog_trail ) ); -#/ - maps/mp/zombies/_zm_net::network_safe_play_fx_on_tag( "dog_fx", 2, self.fx_dog_trail_type, self.fx_dog_trail, "tag_origin" ); - self playloopsound( self.fx_dog_trail_sound ); - while ( 1 ) - { - if ( !is_player_valid( self.favoriteenemy ) ) - { - self.favoriteenemy = get_favorite_enemy(); - } - wait 0,2; - } -} - -dog_stalk_audio() -{ - self endon( "death" ); - self endon( "dog_running" ); - self endon( "dog_combat" ); - while ( 1 ) - { - self playsound( "zmb_hellhound_vocals_amb" ); - wait randomfloatrange( 3, 6 ); - } -} - -dog_thundergun_knockdown( player, gib ) -{ - self endon( "death" ); - damage = int( self.maxhealth * 0,5 ); - self dodamage( damage, player.origin, player ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_ai_faller.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_ai_faller.gsc deleted file mode 100644 index 37859ed..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_ai_faller.gsc +++ /dev/null @@ -1,634 +0,0 @@ -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/animscripts/zm_shared; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -zombie_faller_delete() -{ - level.zombie_total++; - self maps/mp/zombies/_zm_spawner::reset_attack_spot(); - if ( isDefined( self.zombie_faller_location ) ) - { - self.zombie_faller_location.is_enabled = 1; - self.zombie_faller_location = undefined; - } - self delete(); -} - -faller_script_parameters() -{ - while ( isDefined( self.script_parameters ) ) - { - parms = strtok( self.script_parameters, ";" ); - while ( isDefined( parms ) && parms.size > 0 ) - { - i = 0; - while ( i < parms.size ) - { - if ( parms[ i ] == "drop_now" ) - { - self.drop_now = 1; - } - if ( parms[ i ] == "drop_not_occupied" ) - { - self.drop_not_occupied = 1; - } - if ( parms[ i ] == "emerge_top" ) - { - self.emerge_top = 1; - } - if ( parms[ i ] == "emerge_bottom" ) - { - self.emerge_bottom = 1; - } - i++; - } - } - } -} - -setup_deathfunc( func_name ) -{ - self endon( "death" ); - while ( isDefined( self.zombie_init_done ) && !self.zombie_init_done ) - { - wait_network_frame(); - } - if ( isDefined( func_name ) ) - { - self.deathfunction = func_name; - } - else - { - self.deathfunction = ::zombie_fall_death_func; - } -} - -do_zombie_fall( spot ) -{ - self endon( "death" ); - self.zombie_faller_location = spot; - self.zombie_faller_location.is_enabled = 0; - self.zombie_faller_location faller_script_parameters(); - if ( isDefined( self.zombie_faller_location.emerge_bottom ) || self.zombie_faller_location.emerge_bottom && isDefined( self.zombie_faller_location.emerge_top ) && self.zombie_faller_location.emerge_top ) - { - self do_zombie_emerge( spot ); - return; - } - self thread setup_deathfunc(); - self.no_powerups = 1; - self.in_the_ceiling = 1; - self.anchor = spawn( "script_origin", self.origin ); - self.anchor.angles = self.angles; - self linkto( self.anchor ); - if ( !isDefined( spot.angles ) ) - { - spot.angles = ( 0, 0, -1 ); - } - anim_org = spot.origin; - anim_ang = spot.angles; - self ghost(); - self.anchor moveto( anim_org, 0,05 ); - self.anchor waittill( "movedone" ); - target_org = get_desired_origin(); - if ( isDefined( target_org ) ) - { - anim_ang = vectorToAngle( target_org - self.origin ); - self.anchor rotateto( ( 0, anim_ang[ 1 ], 0 ), 0,05 ); - self.anchor waittill( "rotatedone" ); - } - self unlink(); - if ( isDefined( self.anchor ) ) - { - self.anchor delete(); - } - self thread maps/mp/zombies/_zm_spawner::hide_pop(); - self thread zombie_fall_death( spot ); - self thread zombie_fall_fx( spot ); - self thread zombie_faller_death_wait(); - self thread zombie_faller_do_fall(); - self.no_powerups = 0; - self.in_the_ceiling = 0; - self notify( "risen" ); -} - -zombie_faller_do_fall() -{ - self endon( "death" ); - self animscripted( self.origin, self.zombie_faller_location.angles, "zm_faller_emerge" ); - self maps/mp/animscripts/zm_shared::donotetracks( "emerge_anim", ::handle_fall_notetracks, self.zombie_faller_location ); - self.zombie_faller_wait_start = getTime(); - self.zombie_faller_should_drop = 0; - self thread zombie_fall_wait(); - self thread zombie_faller_watch_all_players(); - while ( !self.zombie_faller_should_drop ) - { - if ( self zombie_fall_should_attack( self.zombie_faller_location ) ) - { - self animscripted( self.origin, self.zombie_faller_location.angles, "zm_faller_attack" ); - self maps/mp/animscripts/zm_shared::donotetracks( "attack_anim", ::handle_fall_notetracks, self.zombie_faller_location ); - if ( !self zombie_faller_always_drop() && randomfloat( 1 ) > 0,5 ) - { - self.zombie_faller_should_drop = 1; - } - continue; - } - else if ( self zombie_faller_always_drop() ) - { - self.zombie_faller_should_drop = 1; - break; - } - else if ( getTime() >= ( self.zombie_faller_wait_start + 20000 ) ) - { - self.zombie_faller_should_drop = 1; - break; - } - else if ( self zombie_faller_drop_not_occupied() ) - { - self.zombie_faller_should_drop = 1; - break; - } - else self animscripted( self.origin, self.zombie_faller_location.angles, "zm_faller_attack" ); - self maps/mp/animscripts/zm_shared::donotetracks( "attack_anim", ::handle_fall_notetracks, self.zombie_faller_location ); - } - self notify( "falling" ); - spot = self.zombie_faller_location; - self zombie_faller_enable_location(); - self animscripted( self.origin, spot.angles, "zm_faller_fall" ); - self maps/mp/animscripts/zm_shared::donotetracks( "fall_anim", ::handle_fall_notetracks, spot ); - self.deathfunction = ::maps/mp/zombies/_zm_spawner::zombie_death_animscript; - self notify( "fall_anim_finished" ); - spot notify( "stop_zombie_fall_fx" ); - self stopanimscripted(); - landanimdelta = 15; - ground_pos = groundpos_ignore_water_new( self.origin ); - physdist = ( self.origin[ 2 ] - ground_pos[ 2 ] ) + landanimdelta; - if ( physdist > 0 ) - { - self animcustom( ::zombie_fall_loop ); - self waittill( "faller_on_ground" ); - self animcustom( ::zombie_land ); - self waittill( "zombie_land_done" ); - } - self.in_the_ceiling = 0; - self traversemode( "gravity" ); - self.no_powerups = 0; -} - -zombie_fall_loop() -{ - self endon( "death" ); - self setanimstatefromasd( "zm_faller_fall_loop" ); - while ( 1 ) - { - ground_pos = groundpos_ignore_water_new( self.origin ); - if ( ( self.origin[ 2 ] - ground_pos[ 2 ] ) < 20 ) - { - self notify( "faller_on_ground" ); - return; - } - else - { - wait 0,05; - } - } -} - -zombie_land() -{ - self setanimstatefromasd( "zm_faller_land" ); - maps/mp/animscripts/zm_shared::donotetracks( "land_anim" ); - self notify( "zombie_land_done" ); -} - -zombie_faller_always_drop() -{ - if ( isDefined( self.zombie_faller_location.drop_now ) && self.zombie_faller_location.drop_now ) - { - return 1; - } - return 0; -} - -zombie_faller_drop_not_occupied() -{ - if ( isDefined( self.zombie_faller_location.drop_not_occupied ) && self.zombie_faller_location.drop_not_occupied ) - { - if ( isDefined( self.zone_name ) && isDefined( level.zones[ self.zone_name ] ) ) - { - return !level.zones[ self.zone_name ].is_occupied; - } - } - return 0; -} - -zombie_faller_watch_all_players() -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - self thread zombie_faller_watch_player( players[ i ] ); - i++; - } -} - -zombie_faller_watch_player( player ) -{ - self endon( "falling" ); - self endon( "death" ); - player endon( "disconnect" ); - range = 200; - rangesqr = range * range; - timer = 5000; - inrange = 0; - inrangetime = 0; - closerange = 60; - closerangesqr = closerange * closerange; - dirtoplayerenter = ( 0, 0, -1 ); - incloserange = 0; - while ( 1 ) - { - distsqr = distance2dsquared( self.origin, player.origin ); - if ( distsqr < rangesqr ) - { - if ( inrange ) - { - if ( ( inrangetime + timer ) < getTime() ) - { - self.zombie_faller_should_drop = 1; - return; - } - else } - else inrange = 1; - inrangetime = getTime(); - } - else - { - inrange = 0; - } - if ( distsqr < closerangesqr ) - { - if ( !incloserange ) - { - dirtoplayerenter = player.origin - self.origin; - dirtoplayerenter = ( dirtoplayerenter[ 0 ], dirtoplayerenter[ 1 ], 0 ); - dirtoplayerenter = vectornormalize( dirtoplayerenter ); - } - incloserange = 1; - } - else - { - if ( incloserange ) - { - dirtoplayerexit = player.origin - self.origin; - dirtoplayerexit = ( dirtoplayerexit[ 0 ], dirtoplayerexit[ 1 ], 0 ); - dirtoplayerexit = vectornormalize( dirtoplayerexit ); - if ( vectordot( dirtoplayerenter, dirtoplayerexit ) < 0 ) - { - self.zombie_faller_should_drop = 1; - return; - } - } - else - { - incloserange = 0; - } - wait 0,1; - } - } -} - -zombie_fall_wait() -{ - self endon( "falling" ); - self endon( "death" ); - while ( isDefined( self.zone_name ) ) - { - while ( isDefined( level.zones ) && isDefined( level.zones[ self.zone_name ] ) ) - { - zone = level.zones[ self.zone_name ]; - while ( 1 ) - { - if ( !zone.is_enabled || !zone.is_active ) - { - if ( !self potentially_visible( 2250000 ) ) - { - if ( self.health != level.zombie_health ) - { - self.zombie_faller_should_drop = 1; - return; - } - else self zombie_faller_delete(); - return; - } - } - wait 0,5; - } - } - } -} - -zombie_fall_should_attack( spot ) -{ - victims = zombie_fall_get_vicitims( spot ); - return victims.size > 0; -} - -zombie_fall_get_vicitims( spot ) -{ - ret = []; - players = getplayers(); - checkdist2 = 40; - checkdist2 *= checkdist2; - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - i++; - continue; - } - else stance = player getstance(); - if ( stance == "crouch" || stance == "prone" ) - { - i++; - continue; - } - else - { - zcheck = self.origin[ 2 ] - player.origin[ 2 ]; - if ( zcheck < 0 || zcheck > 120 ) - { - i++; - continue; - } - else - { - dist2 = distance2dsquared( player.origin, self.origin ); - if ( dist2 < checkdist2 ) - { - ret[ ret.size ] = player; - } - } - } - i++; - } - return ret; -} - -get_fall_anim( spot ) -{ - return level._zombie_fall_anims[ self.animname ][ "fall" ]; -} - -zombie_faller_enable_location() -{ - if ( isDefined( self.zombie_faller_location ) ) - { - self.zombie_faller_location.is_enabled = 1; - self.zombie_faller_location = undefined; - } -} - -zombie_faller_death_wait( endon_notify ) -{ - self endon( "falling" ); - if ( isDefined( endon_notify ) ) - { - self endon( endon_notify ); - } - self waittill( "death" ); - self zombie_faller_enable_location(); -} - -zombie_fall_death_func() -{ - self animmode( "noclip" ); - self.deathanim = "zm_faller_emerge_death"; - return self maps/mp/zombies/_zm_spawner::zombie_death_animscript(); -} - -zombie_fall_death( spot ) -{ - self endon( "fall_anim_finished" ); - while ( self.health > 1 ) - { - self waittill( "damage", amount, attacker, dir, p, type ); - } - self stopanimscripted(); - spot notify( "stop_zombie_fall_fx" ); -} - -_damage_mod_to_damage_type( type ) -{ - toks = strtok( type, "_" ); - if ( toks.size < 2 ) - { - return type; - } - returnstr = toks[ 1 ]; - i = 2; - while ( i < toks.size ) - { - returnstr += toks[ i ]; - i++; - } - returnstr = tolower( returnstr ); - return returnstr; -} - -zombie_fall_fx( spot ) -{ - spot thread zombie_fall_dust_fx( self ); - spot thread zombie_fall_burst_fx(); - playsoundatposition( "zmb_zombie_spawn", spot.origin ); - self endon( "death" ); - spot endon( "stop_zombie_fall_fx" ); - wait 1; - if ( self.zombie_move_speed != "sprint" ) - { - wait 1; - } -} - -zombie_fall_burst_fx() -{ - self endon( "stop_zombie_fall_fx" ); - self endon( "fall_anim_finished" ); - playfx( level._effect[ "rise_burst" ], self.origin + ( 0, 0, randomintrange( 5, 10 ) ) ); - wait 0,25; - playfx( level._effect[ "rise_billow" ], self.origin + ( randomintrange( -10, 10 ), randomintrange( -10, 10 ), randomintrange( 5, 10 ) ) ); -} - -zombie_fall_dust_fx( zombie ) -{ - dust_tag = "J_SpineUpper"; - self endon( "stop_zombie_fall_dust_fx" ); - self thread stop_zombie_fall_dust_fx( zombie ); - dust_time = 4,5; - dust_interval = 0,3; - t = 0; - while ( t < dust_time ) - { - playfxontag( level._effect[ "rise_dust" ], zombie, dust_tag ); - wait dust_interval; - t += dust_interval; - } -} - -stop_zombie_fall_dust_fx( zombie ) -{ - zombie waittill( "death" ); - self notify( "stop_zombie_fall_dust_fx" ); -} - -handle_fall_notetracks( note, spot ) -{ - if ( note == "deathout" ) - { - self.deathfunction = ::faller_death_ragdoll; - } - else - { - while ( note == "fire" ) - { - victims = zombie_fall_get_vicitims( spot ); - i = 0; - while ( i < victims.size ) - { - victims[ i ] dodamage( self.meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); - self.zombie_faller_should_drop = 1; - i++; - } - } - } -} - -faller_death_ragdoll() -{ - self startragdoll(); - self launchragdoll( ( 0, 0, -1 ) ); - return self maps/mp/zombies/_zm_spawner::zombie_death_animscript(); -} - -in_player_fov( player ) -{ - playerangles = player getplayerangles(); - playerforwardvec = anglesToForward( playerangles ); - playerunitforwardvec = vectornormalize( playerforwardvec ); - banzaipos = self.origin; - playerpos = player getorigin(); - playertobanzaivec = banzaipos - playerpos; - playertobanzaiunitvec = vectornormalize( playertobanzaivec ); - forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec ); - anglefromcenter = acos( forwarddotbanzai ); - playerfov = getDvarFloat( "cg_fov" ); - banzaivsplayerfovbuffer = getDvarFloat( "g_banzai_player_fov_buffer" ); - if ( banzaivsplayerfovbuffer <= 0 ) - { - banzaivsplayerfovbuffer = 0,2; - } - inplayerfov = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) ); - return inplayerfov; -} - -potentially_visible( how_close ) -{ - if ( !isDefined( how_close ) ) - { - how_close = 1000000; - } - potentiallyvisible = 0; - players = getplayers(); - i = 0; - while ( i < players.size ) - { - dist = distancesquared( self.origin, players[ i ].origin ); - if ( dist < how_close ) - { - inplayerfov = self in_player_fov( players[ i ] ); - if ( inplayerfov ) - { - potentiallyvisible = 1; - break; - } - } - else - { - i++; - } - } - return potentiallyvisible; -} - -do_zombie_emerge( spot ) -{ - self endon( "death" ); - self thread setup_deathfunc( ::faller_death_ragdoll ); - self.no_powerups = 1; - self.in_the_ceiling = 1; - anim_org = spot.origin; - anim_ang = spot.angles; - self thread zombie_emerge_fx( spot ); - self thread zombie_faller_death_wait( "risen" ); - if ( isDefined( level.custom_faller_entrance_logic ) ) - { - self thread [[ level.custom_faller_entrance_logic ]](); - } - self zombie_faller_emerge( spot ); - wait 0,1; - self notify( "risen" ); - self zombie_faller_enable_location(); -} - -zombie_faller_emerge( spot ) -{ - self endon( "death" ); - if ( isDefined( self.zombie_faller_location.emerge_bottom ) && self.zombie_faller_location.emerge_bottom ) - { - self animscripted( self.zombie_faller_location.origin, self.zombie_faller_location.angles, "zombie_riser_elevator_from_floor" ); - } - else - { - self animscripted( self.zombie_faller_location.origin, self.zombie_faller_location.angles, "zombie_riser_elevator_from_ceiling" ); - } - self maps/mp/animscripts/zm_shared::donotetracks( "rise_anim" ); - self.deathfunction = ::maps/mp/zombies/_zm_spawner::zombie_death_animscript; - self.in_the_ceiling = 0; - self.no_powerups = 0; -} - -zombie_emerge_fx( spot ) -{ - spot thread zombie_emerge_dust_fx( self ); - playsoundatposition( "zmb_zombie_spawn", spot.origin ); - self endon( "death" ); - spot endon( "stop_zombie_fall_fx" ); - wait 1; -} - -zombie_emerge_dust_fx( zombie ) -{ - dust_tag = "J_SpineUpper"; - self endon( "stop_zombie_fall_dust_fx" ); - self thread stop_zombie_fall_dust_fx( zombie ); - dust_time = 3,5; - dust_interval = 0,5; - t = 0; - while ( t < dust_time ) - { - playfxontag( level._effect[ "rise_dust" ], zombie, dust_tag ); - wait dust_interval; - t += dust_interval; - } -} - -stop_zombie_emerge_dust_fx( zombie ) -{ - zombie waittill( "death" ); - self notify( "stop_zombie_fall_dust_fx" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_audio.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_audio.gsc deleted file mode 100644 index d9b1432..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_audio.gsc +++ /dev/null @@ -1,1441 +0,0 @@ -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/_music; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - registerclientfield( "allplayers", "charindex", 1, 3, "int" ); - registerclientfield( "toplayer", "isspeaking", 1, 1, "int" ); -/# - println( "ZM >> Zombiemode Server Scripts Init (_zm_audio.gsc)" ); -#/ - level zmbvox(); - level init_music_states(); - level maps/mp/zombies/_zm_audio_announcer::init(); - onplayerconnect_callback( ::init_audio_functions ); -} - -setexertvoice( exert_id ) -{ - self.player_exert_id = exert_id; - self setclientfield( "charindex", self.player_exert_id ); -} - -playerexert( exert ) -{ - if ( isDefined( self.isspeaking ) || self.isspeaking && isDefined( self.isexerting ) && self.isexerting ) - { - return; - } - id = level.exert_sounds[ 0 ][ exert ]; - if ( isDefined( self.player_exert_id ) ) - { - if ( isarray( level.exert_sounds[ self.player_exert_id ][ exert ] ) ) - { - id = random( level.exert_sounds[ self.player_exert_id ][ exert ] ); - } - else - { - id = level.exert_sounds[ self.player_exert_id ][ exert ]; - } - } - self playsound( id ); - if ( isDefined( self.isexerting ) && !self.isexerting ) - { - self thread exert_timer(); - } -} - -exert_timer() -{ - self endon( "disconnect" ); - wait 1; - self.isexerting = 1; - wait randomfloatrange( 1,5, 3 ); - self.isexerting = 0; -} - -zmbvox() -{ - level.votimer = []; - level.vox = zmbvoxcreate(); - init_standard_response_chances(); - level.vox zmbvoxadd( "player", "general", "crawl_spawn", "crawler_start", "resp_crawler_start" ); - level.vox zmbvoxadd( "player", "general", "hr_resp_crawler_start", "hr_resp_crawler_start", undefined ); - level.vox zmbvoxadd( "player", "general", "riv_resp_crawler_start", "riv_resp_crawler_start", undefined ); - level.vox zmbvoxadd( "player", "general", "ammo_low", "ammo_low", undefined ); - level.vox zmbvoxadd( "player", "general", "ammo_out", "ammo_out", undefined ); - level.vox zmbvoxadd( "player", "general", "door_deny", "nomoney_generic", undefined ); - level.vox zmbvoxadd( "player", "general", "perk_deny", "nomoney_perk", undefined ); - level.vox zmbvoxadd( "player", "general", "shoot_arm", "kill_limb", undefined ); - level.vox zmbvoxadd( "player", "general", "box_move", "box_move", undefined ); - level.vox zmbvoxadd( "player", "general", "no_money", "nomoney", undefined ); - level.vox zmbvoxadd( "player", "general", "oh_shit", "oh_shit", "resp_surrounded" ); - level.vox zmbvoxadd( "player", "general", "hr_resp_surrounded", "hr_resp_surrounded", undefined ); - level.vox zmbvoxadd( "player", "general", "riv_resp_surrounded", "riv_resp_surrounded", undefined ); - level.vox zmbvoxadd( "player", "general", "revive_down", "revive_down", undefined ); - level.vox zmbvoxadd( "player", "general", "revive_up", "revive_up", undefined ); - level.vox zmbvoxadd( "player", "general", "crawl_hit", "crawler_attack", undefined ); - level.vox zmbvoxadd( "player", "general", "sigh", "sigh", undefined ); - level.vox zmbvoxadd( "player", "general", "round_5", "round_5", undefined ); - level.vox zmbvoxadd( "player", "general", "round_20", "round_20", undefined ); - level.vox zmbvoxadd( "player", "general", "round_10", "round_10", undefined ); - level.vox zmbvoxadd( "player", "general", "round_35", "round_35", undefined ); - level.vox zmbvoxadd( "player", "general", "round_50", "round_50", undefined ); - level.vox zmbvoxadd( "player", "perk", "specialty_armorvest", "perk_jugga", undefined ); - level.vox zmbvoxadd( "player", "perk", "specialty_quickrevive", "perk_revive", undefined ); - level.vox zmbvoxadd( "player", "perk", "specialty_fastreload", "perk_speed", undefined ); - level.vox zmbvoxadd( "player", "perk", "specialty_rof", "perk_doubletap", undefined ); - level.vox zmbvoxadd( "player", "perk", "specialty_longersprint", "perk_stamine", undefined ); - level.vox zmbvoxadd( "player", "perk", "specialty_flakjacket", "perk_phdflopper", undefined ); - level.vox zmbvoxadd( "player", "perk", "specialty_deadshot", "perk_deadshot", undefined ); - level.vox zmbvoxadd( "player", "perk", "specialty_finalstand", "perk_who", undefined ); - level.vox zmbvoxadd( "player", "perk", "specialty_additionalprimaryweapon", "perk_mulekick", undefined ); - level.vox zmbvoxadd( "player", "powerup", "nuke", "powerup_nuke", undefined ); - level.vox zmbvoxadd( "player", "powerup", "insta_kill", "powerup_insta", undefined ); - level.vox zmbvoxadd( "player", "powerup", "full_ammo", "powerup_ammo", undefined ); - level.vox zmbvoxadd( "player", "powerup", "double_points", "powerup_double", undefined ); - level.vox zmbvoxadd( "player", "powerup", "carpenter", "powerup_carp", undefined ); - level.vox zmbvoxadd( "player", "powerup", "firesale", "powerup_firesale", undefined ); - level.vox zmbvoxadd( "player", "powerup", "minigun", "powerup_minigun", undefined ); - level.vox zmbvoxadd( "player", "kill", "melee", "kill_melee", undefined ); - level.vox zmbvoxadd( "player", "kill", "melee_instakill", "kill_insta", undefined ); - level.vox zmbvoxadd( "player", "kill", "weapon_instakill", "kill_insta", undefined ); - level.vox zmbvoxadd( "player", "kill", "closekill", "kill_close", undefined ); - level.vox zmbvoxadd( "player", "kill", "damage", "kill_damaged", undefined ); - level.vox zmbvoxadd( "player", "kill", "streak", "kill_streak", undefined ); - level.vox zmbvoxadd( "player", "kill", "headshot", "kill_headshot", "resp_kill_headshot" ); - level.vox zmbvoxadd( "player", "kill", "hr_resp_kill_headshot", "hr_resp_kill_headshot", undefined ); - level.vox zmbvoxadd( "player", "kill", "riv_resp_kill_headshot", "riv_resp_kill_headshot", undefined ); - level.vox zmbvoxadd( "player", "kill", "explosive", "kill_explo", undefined ); - level.vox zmbvoxadd( "player", "kill", "flame", "kill_flame", undefined ); - level.vox zmbvoxadd( "player", "kill", "raygun", "kill_ray", undefined ); - level.vox zmbvoxadd( "player", "kill", "bullet", "kill_streak", undefined ); - level.vox zmbvoxadd( "player", "kill", "tesla", "kill_tesla", undefined ); - level.vox zmbvoxadd( "player", "kill", "monkey", "kill_monkey", undefined ); - level.vox zmbvoxadd( "player", "kill", "thundergun", "kill_thunder", undefined ); - level.vox zmbvoxadd( "player", "kill", "freeze", "kill_freeze", undefined ); - level.vox zmbvoxadd( "player", "kill", "crawler", "crawler_kill", undefined ); - level.vox zmbvoxadd( "player", "kill", "hellhound", "kill_hellhound", undefined ); - level.vox zmbvoxadd( "player", "kill", "quad", "kill_quad", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "pistol", "wpck_crappy", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "smg", "wpck_smg", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "dualwield", "wpck_dual", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "shotgun", "wpck_shotgun", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "rifle", "wpck_sniper", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "burstrifle", "wpck_mg", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "assault", "wpck_mg", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "sniper", "wpck_sniper", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "mg", "wpck_mg", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "launcher", "wpck_launcher", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "grenade", "wpck_grenade", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "bowie", "wpck_bowie", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "raygun", "wpck_raygun", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "monkey", "wpck_monkey", "resp_wpck_monkey" ); - level.vox zmbvoxadd( "player", "weapon_pickup", "hr_resp_wpck_monkey", "hr_resp_wpck_monkey", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "riv_resp_wpck_monkey", "riv_resp_wpck_monkey", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "crossbow", "wpck_launcher", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "upgrade", "wpck_upgrade", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "favorite", "wpck_favorite", undefined ); - level.vox zmbvoxadd( "player", "weapon_pickup", "favorite_upgrade", "wpck_favorite_upgrade", undefined ); - level.vox zmbvoxadd( "player", "player_death", "player_death", "evt_player_final_hit", undefined ); - level.zmb_vox = []; - level.zmb_vox[ "prefix" ] = "zmb_vocals_"; - level.zmb_vox[ "zombie" ] = []; - level.zmb_vox[ "zombie" ][ "ambient" ] = "zombie_ambience"; - level.zmb_vox[ "zombie" ][ "sprint" ] = "zombie_sprint"; - level.zmb_vox[ "zombie" ][ "attack" ] = "zombie_attack"; - level.zmb_vox[ "zombie" ][ "teardown" ] = "zombie_teardown"; - level.zmb_vox[ "zombie" ][ "taunt" ] = "zombie_taunt"; - level.zmb_vox[ "zombie" ][ "behind" ] = "zombie_behind"; - level.zmb_vox[ "zombie" ][ "death" ] = "zombie_death"; - level.zmb_vox[ "zombie" ][ "crawler" ] = "zombie_crawler"; - level.zmb_vox[ "quad_zombie" ] = []; - level.zmb_vox[ "quad_zombie" ][ "ambient" ] = "quad_ambience"; - level.zmb_vox[ "quad_zombie" ][ "sprint" ] = "quad_sprint"; - level.zmb_vox[ "quad_zombie" ][ "attack" ] = "quad_attack"; - level.zmb_vox[ "quad_zombie" ][ "behind" ] = "quad_behind"; - level.zmb_vox[ "quad_zombie" ][ "death" ] = "quad_death"; - level.zmb_vox[ "thief_zombie" ] = []; - level.zmb_vox[ "thief_zombie" ][ "ambient" ] = "thief_ambience"; - level.zmb_vox[ "thief_zombie" ][ "sprint" ] = "thief_sprint"; - level.zmb_vox[ "thief_zombie" ][ "steal" ] = "thief_steal"; - level.zmb_vox[ "thief_zombie" ][ "death" ] = "thief_death"; - level.zmb_vox[ "thief_zombie" ][ "anger" ] = "thief_anger"; - level.zmb_vox[ "boss_zombie" ] = []; - level.zmb_vox[ "boss_zombie" ][ "ambient" ] = "boss_ambience"; - level.zmb_vox[ "boss_zombie" ][ "sprint" ] = "boss_sprint"; - level.zmb_vox[ "boss_zombie" ][ "attack" ] = "boss_attack"; - level.zmb_vox[ "boss_zombie" ][ "behind" ] = "boss_behind"; - level.zmb_vox[ "boss_zombie" ][ "death" ] = "boss_death"; - level.zmb_vox[ "leaper_zombie" ] = []; - level.zmb_vox[ "leaper_zombie" ][ "ambient" ] = "leaper_ambience"; - level.zmb_vox[ "leaper_zombie" ][ "sprint" ] = "leaper_ambience"; - level.zmb_vox[ "leaper_zombie" ][ "attack" ] = "leaper_attack"; - level.zmb_vox[ "leaper_zombie" ][ "behind" ] = "leaper_close"; - level.zmb_vox[ "leaper_zombie" ][ "death" ] = "leaper_death"; - level.zmb_vox[ "monkey_zombie" ] = []; - level.zmb_vox[ "monkey_zombie" ][ "ambient" ] = "monkey_ambience"; - level.zmb_vox[ "monkey_zombie" ][ "sprint" ] = "monkey_sprint"; - level.zmb_vox[ "monkey_zombie" ][ "attack" ] = "monkey_attack"; - level.zmb_vox[ "monkey_zombie" ][ "behind" ] = "monkey_behind"; - level.zmb_vox[ "monkey_zombie" ][ "death" ] = "monkey_death"; - if ( isDefined( level._zmbvoxlevelspecific ) ) - { - level thread [[ level._zmbvoxlevelspecific ]](); - } - if ( isDefined( level._zmbvoxgametypespecific ) ) - { - level thread [[ level._zmbvoxgametypespecific ]](); - } - announcer_ent = spawn( "script_origin", ( 0, 0, 0 ) ); - level.vox zmbvoxinitspeaker( "announcer", "vox_zmba_", announcer_ent ); - level.exert_sounds[ 0 ][ "burp" ] = "evt_belch"; - level.exert_sounds[ 0 ][ "hitmed" ] = "null"; - level.exert_sounds[ 0 ][ "hitlrg" ] = "null"; - if ( isDefined( level.setupcustomcharacterexerts ) ) - { - [[ level.setupcustomcharacterexerts ]](); - } -} - -init_standard_response_chances() -{ - level.response_chances = []; - add_vox_response_chance( "sickle", 40 ); - add_vox_response_chance( "melee", 40 ); - add_vox_response_chance( "melee_instakill", 99 ); - add_vox_response_chance( "weapon_instakill", 10 ); - add_vox_response_chance( "explosive", 60 ); - add_vox_response_chance( "monkey", 60 ); - add_vox_response_chance( "flame", 60 ); - add_vox_response_chance( "raygun", 75 ); - add_vox_response_chance( "headshot", 15 ); - add_vox_response_chance( "crawler", 30 ); - add_vox_response_chance( "quad", 30 ); - add_vox_response_chance( "astro", 99 ); - add_vox_response_chance( "closekill", 15 ); - add_vox_response_chance( "bullet", 1 ); - add_vox_response_chance( "claymore", 99 ); - add_vox_response_chance( "dolls", 99 ); - add_vox_response_chance( "default", 1 ); -} - -init_audio_functions() -{ - self thread zombie_behind_vox(); - self thread player_killstreak_timer(); - self thread oh_shit_vox(); -} - -zombie_behind_vox() -{ - self endon( "death_or_disconnect" ); - if ( !isDefined( level._zbv_vox_last_update_time ) ) - { - level._zbv_vox_last_update_time = 0; - level._audio_zbv_shared_ent_list = get_round_enemy_array(); - } - while ( 1 ) - { - wait 1; - t = getTime(); - if ( t > ( level._zbv_vox_last_update_time + 1000 ) ) - { - level._zbv_vox_last_update_time = t; - level._audio_zbv_shared_ent_list = get_round_enemy_array(); - } - zombs = level._audio_zbv_shared_ent_list; - played_sound = 0; - i = 0; - while ( i < zombs.size ) - { - if ( !isDefined( zombs[ i ] ) ) - { - i++; - continue; - } - else if ( zombs[ i ].isdog ) - { - i++; - continue; - } - else - { - dist = 200; - z_dist = 50; - alias = level.vox_behind_zombie; - if ( isDefined( zombs[ i ].zombie_move_speed ) ) - { - switch( zombs[ i ].zombie_move_speed ) - { - case "walk": - dist = 200; - break; - break; - case "run": - dist = 250; - break; - break; - case "sprint": - dist = 275; - break; - break; - } - } - if ( distancesquared( zombs[ i ].origin, self.origin ) < ( dist * dist ) ) - { - yaw = self maps/mp/zombies/_zm_utility::getyawtospot( zombs[ i ].origin ); - z_diff = self.origin[ 2 ] - zombs[ i ].origin[ 2 ]; - if ( yaw < -95 && yaw > 95 && abs( z_diff ) < 50 ) - { - zombs[ i ] thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "behind", zombs[ i ].animname ); - played_sound = 1; - break; - } - } - } - else i++; - } - if ( played_sound ) - { - wait 5; - } - } -} - -attack_vox_network_choke() -{ - while ( 1 ) - { - level._num_attack_vox = 0; - wait_network_frame(); - } -} - -do_zombies_playvocals( alias_type, zombie_type ) -{ -/# - if ( getDvarInt( #"6C610250" ) > 0 ) - { - return; -#/ - } - self endon( "death" ); - if ( !isDefined( zombie_type ) ) - { - zombie_type = "zombie"; - } - if ( isDefined( self.shrinked ) && self.shrinked ) - { - return; - } - if ( isDefined( self.is_inert ) && self.is_inert ) - { - return; - } - if ( !isDefined( self.talking ) ) - { - self.talking = 0; - } - if ( !isDefined( level.zmb_vox[ zombie_type ] ) ) - { -/# - println( "ZM >> AUDIO - ZOMBIE TYPE: " + zombie_type + " has NO aliases set up for it." ); -#/ - return; - } - if ( !isDefined( level.zmb_vox[ zombie_type ][ alias_type ] ) ) - { -/# - println( "ZM >> AUDIO - ZOMBIE TYPE: " + zombie_type + " has NO aliases set up for ALIAS_TYPE: " + alias_type ); -#/ - return; - } - if ( alias_type == "attack" ) - { - if ( !isDefined( level._num_attack_vox ) ) - { - level thread attack_vox_network_choke(); - } - if ( level._num_attack_vox > 4 ) - { - return; - } - level._num_attack_vox++; - } - alias = level.zmb_vox[ "prefix" ] + level.zmb_vox[ zombie_type ][ alias_type ]; - if ( alias_type != "attack" && alias_type != "behind" && alias_type != "death" && alias_type != "anger" || alias_type == "steal" && alias_type == "taunt" ) - { - if ( isDefined( level._custom_zombie_audio_func ) ) - { - self [[ level._custom_zombie_audio_func ]]( alias, alias_type ); - } - else - { - self playsound( alias ); - } - } - else - { - if ( !self.talking ) - { - self.talking = 1; - if ( self is_last_zombie() ) - { - alias += "_loud"; - } - self playsoundwithnotify( alias, "sounddone" ); - self waittill( "sounddone" ); - self.talking = 0; - } - } -} - -is_last_zombie() -{ - if ( get_current_zombie_count() <= 1 ) - { - return 1; - } - return 0; -} - -oh_shit_vox() -{ - self endon( "death_or_disconnect" ); - while ( 1 ) - { - wait 1; - players = get_players(); - zombs = get_round_enemy_array(); - if ( players.size > 1 ) - { - close_zombs = 0; - i = 0; - while ( i < zombs.size ) - { - if ( isDefined( zombs[ i ].favoriteenemy ) || zombs[ i ].favoriteenemy == self && !isDefined( zombs[ i ].favoriteenemy ) ) - { - if ( distancesquared( zombs[ i ].origin, self.origin ) < 62500 ) - { - close_zombs++; - } - } - i++; - } - if ( close_zombs > 4 ) - { - if ( randomint( 100 ) > 75 && isDefined( self.isonbus ) && !self.isonbus ) - { - self create_and_play_dialog( "general", "oh_shit" ); - wait 4; - } - } - } - } -} - -create_and_play_dialog( category, type, response, force_variant, override ) -{ - waittime = 0,25; - if ( !isDefined( self.zmbvoxid ) ) - { -/# - if ( getDvarInt( #"0AEB127D" ) > 0 ) - { - iprintln( "DIALOG DEBUGGER: No zmbVoxID setup on this character. Run zmbVoxInitSpeaker on this character in order to play vox" ); -#/ - } - return; - } - if ( isDefined( self.dontspeak ) && self.dontspeak ) - { - return; - } -/# - if ( getDvarInt( #"0AEB127D" ) > 0 ) - { - self thread dialog_debugger( category, type ); -#/ - } - isresponse = 0; - alias_suffix = undefined; - index = undefined; - prefix = undefined; - if ( !isDefined( level.vox.speaker[ self.zmbvoxid ].alias[ category ][ type ] ) ) - { - return; - } - prefix = level.vox.speaker[ self.zmbvoxid ].prefix; - alias_suffix = level.vox.speaker[ self.zmbvoxid ].alias[ category ][ type ]; - if ( self is_player() ) - { - if ( self.sessionstate != "playing" ) - { - return; - } - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || type != "revive_down" && type != "revive_up" ) - { - return; - } - index = maps/mp/zombies/_zm_weapons::get_player_index( self ); - prefix = prefix + index + "_"; - } - if ( isDefined( response ) ) - { - if ( isDefined( level.vox.speaker[ self.zmbvoxid ].response[ category ][ type ] ) ) - { - alias_suffix = response + level.vox.speaker[ self.zmbvoxid ].response[ category ][ type ]; - } - isresponse = 1; - } - sound_to_play = self zmbvoxgetlinevariant( prefix, alias_suffix, force_variant, override ); - if ( isDefined( sound_to_play ) ) - { - if ( isDefined( level._audio_custom_player_playvox ) ) - { - self thread [[ level._audio_custom_player_playvox ]]( prefix, index, sound_to_play, waittime, category, type, override ); - } - else - { - self thread do_player_or_npc_playvox( prefix, index, sound_to_play, waittime, category, type, override, isresponse ); - } - } - else - { -/# - if ( getDvarInt( #"0AEB127D" ) > 0 ) - { - iprintln( "DIALOG DEBUGGER: SOUND_TO_PLAY is undefined" ); -#/ - } - } -} - -do_player_or_npc_playvox( prefix, index, sound_to_play, waittime, category, type, override, isresponse ) -{ - self endon( "death_or_disconnect" ); - if ( isDefined( level.skit_vox_override ) && level.skit_vox_override && isDefined( override ) && !override ) - { - return; - } - if ( !isDefined( self.isspeaking ) ) - { - self.isspeaking = 0; - } - if ( isDefined( self.isspeaking ) && self.isspeaking ) - { -/# - println( "DIALOG DEBUGGER: Can't play (" + prefix + sound_to_play + ") because we are speaking already." ); -#/ - return; - } - if ( !self arenearbyspeakersactive() || isDefined( self.ignorenearbyspkrs ) && self.ignorenearbyspkrs ) - { - self.speakingline = sound_to_play; - self.isspeaking = 1; - if ( isplayer( self ) ) - { - self setclientfieldtoplayer( "isspeaking", 1 ); - } - self notify( "speaking" ); - self playsoundwithnotify( prefix + sound_to_play, "sound_done" + sound_to_play ); - self waittill( "sound_done" + sound_to_play ); - if ( isplayer( self ) && isDefined( isresponse ) && !isresponse && isDefined( self.last_vo_played_time ) ) - { - if ( getTime() < ( self.last_vo_played_time + 5000 ) ) - { - waittime = 15; - } - } - wait waittime; - self notify( "done_speaking" ); - self.isspeaking = 0; - if ( isplayer( self ) ) - { - self setclientfieldtoplayer( "isspeaking", 0 ); - } - if ( isplayer( self ) ) - { - self.last_vo_played_time = getTime(); - } - if ( isDefined( isresponse ) && isresponse ) - { - return; - } - if ( isDefined( level.vox.speaker[ self.zmbvoxid ].response ) && isDefined( level.vox.speaker[ self.zmbvoxid ].response[ category ] ) && isDefined( level.vox.speaker[ self.zmbvoxid ].response[ category ][ type ] ) ) - { - if ( isDefined( self.isnpc ) || self.isnpc && !flag( "solo_game" ) ) - { - if ( isDefined( level._audio_custom_response_line ) ) - { - level thread [[ level._audio_custom_response_line ]]( self, index, category, type ); - } - else - { - level thread setup_response_line( self, index, category, type ); - } - } - } - } - else - { -/# - println( "DIALOG DEBUGGER: Can't play (" + prefix + sound_to_play + ") because someone is nearby speaking already." ); -#/ - } -} - -setup_response_line( player, index, category, type ) -{ - dempsey = 0; - nikolai = 1; - takeo = 2; - richtofen = 3; - switch( player.entity_num ) - { - case 0: - level setup_hero_rival( player, nikolai, richtofen, category, type ); - break; - case 1: - level setup_hero_rival( player, richtofen, takeo, category, type ); - break; - case 2: - level setup_hero_rival( player, dempsey, nikolai, category, type ); - break; - case 3: - level setup_hero_rival( player, takeo, dempsey, category, type ); - break; - } - return; -} - -setup_hero_rival( player, hero, rival, category, type ) -{ - players = get_players(); - hero_player = undefined; - rival_player = undefined; - _a736 = players; - _k736 = getFirstArrayKey( _a736 ); - while ( isDefined( _k736 ) ) - { - ent = _a736[ _k736 ]; - if ( ent.characterindex == hero ) - { - hero_player = ent; - } - else - { - if ( ent.characterindex == rival ) - { - rival_player = ent; - } - } - _k736 = getNextArrayKey( _a736, _k736 ); - } - if ( isDefined( hero_player ) && isDefined( rival_player ) ) - { - if ( randomint( 100 ) > 50 ) - { - hero_player = undefined; - } - else - { - rival_player = undefined; - } - } - if ( isDefined( hero_player ) && distancesquared( player.origin, hero_player.origin ) < 250000 ) - { - hero_player create_and_play_dialog( category, type, "hr_" ); - } - else - { - if ( isDefined( rival_player ) && distancesquared( player.origin, rival_player.origin ) < 250000 ) - { - rival_player create_and_play_dialog( category, type, "riv_" ); - } - } -} - -do_announcer_playvox( category, type, team ) -{ - if ( !isDefined( level.vox.speaker[ "announcer" ].alias[ category ] ) || !isDefined( level.vox.speaker[ "announcer" ].alias[ category ][ type ] ) ) - { - return; - } - if ( !isDefined( level.devil_is_speaking ) ) - { - level.devil_is_speaking = 0; - } - prefix = level.vox.speaker[ "announcer" ].prefix; - suffix = level.vox.speaker[ "announcer" ].ent zmbvoxgetlinevariant( prefix, level.vox.speaker[ "announcer" ].alias[ category ][ type ] ); - if ( !isDefined( suffix ) ) - { - return; - } - alias = prefix + suffix; - if ( level.devil_is_speaking == 0 ) - { - level.devil_is_speaking = 1; - if ( !isDefined( team ) ) - { - level.vox.speaker[ "announcer" ].ent playsoundwithnotify( alias, "sounddone" ); - } - else - { - level thread zmbvoxannouncertoteam( category, type, team ); - } - level.vox.speaker[ "announcer" ].ent waittill( "sounddone" ); - level.devil_is_speaking = 0; - } -} - -zmbvoxannouncertoteam( category, type, team ) -{ - prefix = level.vox.speaker[ "announcer" ].prefix; - alias_to_team = prefix + level.vox.speaker[ "announcer" ].ent zmbvoxgetlinevariant( prefix, level.vox.speaker[ "announcer" ].alias[ category ][ type ] ); - if ( isDefined( level.vox.speaker[ "announcer" ].response[ category ][ type ] ) ) - { - alias_to_rival = prefix + level.vox.speaker[ "announcer" ].ent zmbvoxgetlinevariant( prefix, level.vox.speaker[ "announcer" ].response[ category ][ type ] ); - } - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ]._encounters_team ) ) - { - i++; - continue; - } - else if ( players[ i ]._encounters_team == team ) - { - level.vox.speaker[ "announcer" ].ent playsoundtoplayer( alias_to_team, players[ i ] ); - i++; - continue; - } - else - { - if ( isDefined( alias_to_rival ) ) - { - level.vox.speaker[ "announcer" ].ent playsoundtoplayer( alias_to_rival, players[ i ] ); - } - } - i++; - } - wait 3; - level.vox.speaker[ "announcer" ].ent notify( "sounddone" ); -} - -player_killstreak_timer() -{ - self endon( "disconnect" ); - self endon( "death" ); - if ( getDvar( "zombie_kills" ) == "" ) - { - setdvar( "zombie_kills", "7" ); - } - if ( getDvar( "zombie_kill_timer" ) == "" ) - { - setdvar( "zombie_kill_timer", "5" ); - } - kills = getDvarInt( "zombie_kills" ); - time = getDvarInt( "zombie_kill_timer" ); - if ( !isDefined( self.timerisrunning ) ) - { - self.timerisrunning = 0; - self.killcounter = 0; - } - while ( 1 ) - { - self waittill( "zom_kill", zomb ); - if ( isDefined( zomb._black_hole_bomb_collapse_death ) && zomb._black_hole_bomb_collapse_death == 1 ) - { - continue; - } - if ( isDefined( zomb.microwavegun_death ) && zomb.microwavegun_death ) - { - continue; - } - self.killcounter++; - if ( self.timerisrunning != 1 ) - { - self.timerisrunning = 1; - self thread timer_actual( kills, time ); - } - } -} - -player_zombie_kill_vox( hit_location, player, mod, zombie ) -{ - weapon = player getcurrentweapon(); - dist = distancesquared( player.origin, zombie.origin ); - if ( !isDefined( level.zombie_vars[ player.team ][ "zombie_insta_kill" ] ) ) - { - level.zombie_vars[ player.team ][ "zombie_insta_kill" ] = 0; - } - instakill = level.zombie_vars[ player.team ][ "zombie_insta_kill" ]; - death = get_mod_type( hit_location, mod, weapon, zombie, instakill, dist, player ); - chance = get_response_chance( death ); - if ( chance > randomintrange( 1, 100 ) && isDefined( player.force_wait_on_kill_line ) && !player.force_wait_on_kill_line ) - { - player.force_wait_on_kill_line = 1; - player create_and_play_dialog( "kill", death ); - wait 2; - if ( isDefined( player ) ) - { - player.force_wait_on_kill_line = 0; - } - } -} - -get_response_chance( event ) -{ - if ( !isDefined( level.response_chances[ event ] ) ) - { - return 0; - } - return level.response_chances[ event ]; -} - -get_mod_type( impact, mod, weapon, zombie, instakill, dist, player ) -{ - close_dist = 4096; - med_dist = 15376; - far_dist = 160000; - if ( isDefined( zombie._black_hole_bomb_collapse_death ) && zombie._black_hole_bomb_collapse_death == 1 ) - { - return "default"; - } - if ( zombie.animname == "screecher_zombie" && mod == "MOD_MELEE" ) - { - return "killed_screecher"; - } - if ( is_placeable_mine( weapon ) ) - { - if ( !instakill ) - { - return "claymore"; - } - else - { - return "weapon_instakill"; - } - } - if ( weapon == "jetgun_zm" || weapon == "jetgun_upgraded_zm" ) - { - if ( instakill ) - { - return "weapon_instakill"; - } - else - { - return "jetgun_kill"; - } - } - if ( weapon == "slipgun_zm" || weapon == "slipgun_upgraded_zm" ) - { - if ( instakill ) - { - return "weapon_instakill"; - } - else - { - return "slipgun_kill"; - } - } - if ( isDefined( zombie.damageweapon ) && zombie.damageweapon == "cymbal_monkey_zm" ) - { - if ( instakill ) - { - return "weapon_instakill"; - } - else - { - return "monkey"; - } - } - if ( is_headshot( weapon, impact, mod ) && dist >= far_dist ) - { - return "headshot"; - } - if ( mod != "MOD_MELEE" && mod != "MOD_BAYONET" && mod == "MOD_UNKNOWN" && dist < close_dist ) - { - if ( !instakill ) - { - if ( player hasweapon( "sickle_knife_zm" ) ) - { - return "sickle"; - } - else - { - return "melee"; - } - } - else - { - return "melee_instakill"; - } - } - if ( isDefined( zombie.damageweapon ) && zombie.damageweapon == "zombie_nesting_doll_single" ) - { - if ( !instakill ) - { - return "dolls"; - } - else - { - return "weapon_instakill"; - } - } - if ( is_explosive_damage( mod ) && weapon != "ray_gun_zm" && isDefined( zombie.is_on_fire ) && !zombie.is_on_fire ) - { - if ( !instakill ) - { - return "explosive"; - } - else - { - return "weapon_instakill"; - } - } - if ( !issubstr( weapon, "flame" ) && !issubstr( weapon, "molotov_" ) && issubstr( weapon, "napalmblob_" ) && mod != "MOD_BURNED" || mod == "MOD_GRENADE" && mod == "MOD_GRENADE_SPLASH" ) - { - if ( !instakill ) - { - return "flame"; - } - else - { - return "weapon_instakill"; - } - } - if ( weapon == "ray_gun_zm" && dist > far_dist ) - { - if ( !instakill ) - { - return "raygun"; - } - else - { - return "weapon_instakill"; - } - } - if ( !isDefined( impact ) ) - { - impact = ""; - } - if ( mod == "MOD_RIFLE_BULLET" || mod == "MOD_PISTOL_BULLET" ) - { - if ( !instakill ) - { - return "bullet"; - } - else - { - return "weapon_instakill"; - } - } - if ( instakill ) - { - return "default"; - } - if ( mod != "MOD_MELEE" && zombie.animname == "quad_zombie" ) - { - return "quad"; - } - if ( mod != "MOD_MELEE" && zombie.animname == "astro_zombie" ) - { - return "astro"; - } - if ( mod != "MOD_MELEE" && !zombie.has_legs ) - { - return "crawler"; - } - if ( mod != "MOD_BURNED" && dist < close_dist ) - { - return "closekill"; - } - return "default"; -} - -timer_actual( kills, time ) -{ - self endon( "disconnect" ); - self endon( "death" ); - timer = getTime() + ( time * 1000 ); - while ( getTime() < timer ) - { - if ( self.killcounter > kills ) - { - self create_and_play_dialog( "kill", "streak" ); - wait 1; - self.killcounter = 0; - timer = -1; - } - wait 0,1; - } - wait 10; - self.killcounter = 0; - self.timerisrunning = 0; -} - -perks_a_cola_jingle_timer() -{ - self endon( "death" ); - self thread play_random_broken_sounds(); - while ( 1 ) - { - wait randomfloatrange( 31, 45 ); - if ( randomint( 100 ) < 15 ) - { - self thread play_jingle_or_stinger( self.script_sound ); - } - } -} - -play_jingle_or_stinger( perksacola ) -{ - playsoundatposition( "evt_electrical_surge", self.origin ); - if ( !isDefined( self.jingle_is_playing ) ) - { - self.jingle_is_playing = 0; - } - if ( isDefined( perksacola ) ) - { - if ( self.jingle_is_playing == 0 && level.music_override == 0 ) - { - self.jingle_is_playing = 1; - self playsoundontag( perksacola, "tag_origin", "sound_done" ); - if ( issubstr( perksacola, "sting" ) ) - { - wait 10; - } - else if ( isDefined( self.longjinglewait ) ) - { - wait 60; - } - else - { - wait 30; - } - self.jingle_is_playing = 0; - } - } -} - -play_random_broken_sounds() -{ - self endon( "death" ); - level endon( "jingle_playing" ); - if ( !isDefined( self.script_sound ) ) - { - self.script_sound = "null"; - } - if ( self.script_sound == "mus_perks_revive_jingle" ) - { - while ( 1 ) - { - wait randomfloatrange( 7, 18 ); - playsoundatposition( "zmb_perks_broken_jingle", self.origin ); - playsoundatposition( "evt_electrical_surge", self.origin ); - } - } - else while ( 1 ) - { - wait randomfloatrange( 7, 18 ); - playsoundatposition( "evt_electrical_surge", self.origin ); - } -} - -perk_vox( perk ) -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( !isDefined( level.vox.speaker[ "player" ].alias[ "perk" ][ perk ] ) ) - { -/# - iprintlnbold( perk + " has no PLR VOX category set up." ); -#/ - return; - } - self create_and_play_dialog( "perk", perk ); -} - -dialog_debugger( category, type ) -{ -/# - println( "DIALOG DEBUGGER: " + self.zmbvoxid + " attempting to speak" ); - if ( !isDefined( level.vox.speaker[ self.zmbvoxid ].alias[ category ][ type ] ) ) - { - iprintlnbold( ( self.zmbvoxid + " tried to play a line, but no alias exists. Category: " ) + category + " Type: " + type ); - println( "DIALOG DEBUGGER ERROR: Alias Not Defined For " + category + " " + type ); - } - if ( !isDefined( level.vox.speaker[ self.zmbvoxid ].response ) ) - { - println( "DIALOG DEBUGGER ERROR: Response Alias Not Defined For " + category + " " + type + "_response" ); -#/ - } -} - -init_music_states() -{ - level.music_override = 0; - level.music_round_override = 0; - level.old_music_state = undefined; - level.zmb_music_states = []; - level thread setupmusicstate( "round_start", "mus_zombie_round_start", 1, 1, 1, "WAVE" ); - level thread setupmusicstate( "round_end", "mus_zombie_round_over", 1, 1, 1, "SILENCE" ); - level thread setupmusicstate( "wave_loop", "WAVE", 0, 1, undefined, undefined ); - level thread setupmusicstate( "game_over", "mus_zombie_game_over", 1, 0, undefined, "SILENCE" ); - level thread setupmusicstate( "dog_start", "mus_zombie_dog_start", 1, 1, undefined, undefined ); - level thread setupmusicstate( "dog_end", "mus_zombie_dog_end", 1, 1, undefined, undefined ); - level thread setupmusicstate( "egg", "EGG", 0, 0, undefined, undefined ); - level thread setupmusicstate( "egg_safe", "EGG_SAFE", 0, 0, undefined, undefined ); - level thread setupmusicstate( "egg_a7x", "EGG_A7X", 0, 0, undefined, undefined ); - level thread setupmusicstate( "sam_reveal", "SAM", 0, 0, undefined, undefined ); -} - -setupmusicstate( state, alias, is_alias, override, round_override, musicstate ) -{ - if ( !isDefined( level.zmb_music_states[ state ] ) ) - { - level.zmb_music_states[ state ] = spawnstruct(); - } - level.zmb_music_states[ state ].music = alias; - level.zmb_music_states[ state ].is_alias = is_alias; - level.zmb_music_states[ state ].override = override; - level.zmb_music_states[ state ].round_override = round_override; - level.zmb_music_states[ state ].musicstate = musicstate; -} - -change_zombie_music( state ) -{ - wait 0,05; - m = level.zmb_music_states[ state ]; - if ( !isDefined( m ) ) - { -/# - iprintlnbold( "Called change_zombie_music on undefined state: " + state ); -#/ - return; - } - do_logic = 1; - if ( !isDefined( level.old_music_state ) ) - { - do_logic = 0; - } - if ( do_logic ) - { - if ( level.old_music_state == m ) - { - return; - } - else - { - if ( level.old_music_state.music == "mus_zombie_game_over" ) - { - return; - } - } - } - if ( !isDefined( m.round_override ) ) - { - m.round_override = 0; - } - if ( m.override == 1 && level.music_override == 1 ) - { - return; - } - if ( m.round_override == 1 && level.music_round_override == 1 ) - { - return; - } - if ( m.is_alias ) - { - if ( isDefined( m.musicstate ) ) - { - maps/mp/_music::setmusicstate( m.musicstate ); - } - play_sound_2d( m.music ); - } - else - { - maps/mp/_music::setmusicstate( m.music ); - } - level.old_music_state = m; -} - -weapon_toggle_vox( alias, weapon ) -{ - self notify( "audio_activated_trigger" ); - self endon( "audio_activated_trigger" ); - prefix = "vox_pa_switcher_"; - sound_to_play = prefix + alias; - type = undefined; - if ( isDefined( weapon ) ) - { - type = get_weapon_num( weapon ); - if ( !isDefined( type ) ) - { - return; - } - } - self stopsounds(); - wait 0,05; - if ( isDefined( type ) ) - { - self playsoundwithnotify( ( prefix + "weapon_" ) + type, "sounddone" ); - self waittill( "sounddone" ); - } - self playsound( sound_to_play + "_0" ); -} - -get_weapon_num( weapon ) -{ - weapon_num = undefined; - switch( weapon ) - { - case "humangun_zm": - weapon_num = 0; - break; - case "sniper_explosive_zm": - weapon_num = 1; - break; - case "tesla_gun_zm": - weapon_num = 2; - break; - } - return weapon_num; -} - -addasspeakernpc( ignorenearbyspeakers ) -{ - if ( !isDefined( level.npcs ) ) - { - level.npcs = []; - } - if ( isDefined( ignorenearbyspeakers ) && ignorenearbyspeakers ) - { - self.ignorenearbyspkrs = 1; - } - else - { - self.ignorenearbyspkrs = 0; - } - self.isnpc = 1; - level.npcs[ level.npcs.size ] = self; -} - -arenearbyspeakersactive() -{ - radius = 1000; - nearbyspeakeractive = 0; - speakers = get_players(); - if ( isDefined( level.npcs ) ) - { - speakers = arraycombine( speakers, level.npcs, 1, 0 ); - } - _a1371 = speakers; - _k1371 = getFirstArrayKey( _a1371 ); - while ( isDefined( _k1371 ) ) - { - person = _a1371[ _k1371 ]; - if ( self == person ) - { - } - else if ( person is_player() ) - { - if ( person.sessionstate != "playing" ) - { - } - else if ( person maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - } - else - { - } - if ( isDefined( person.isspeaking ) && person.isspeaking && isDefined( person.ignorenearbyspkrs ) && !person.ignorenearbyspkrs ) - { - if ( distancesquared( self.origin, person.origin ) < ( radius * radius ) ) - { - nearbyspeakeractive = 1; - } - } - } - _k1371 = getNextArrayKey( _a1371, _k1371 ); - } - return nearbyspeakeractive; -} - -zmbvoxcreate() -{ - vox = spawnstruct(); - vox.speaker = []; - return vox; -} - -zmbvoxinitspeaker( speaker, prefix, ent ) -{ - ent.zmbvoxid = speaker; - if ( !isDefined( self.speaker[ speaker ] ) ) - { - self.speaker[ speaker ] = spawnstruct(); - self.speaker[ speaker ].alias = []; - } - self.speaker[ speaker ].prefix = prefix; - self.speaker[ speaker ].ent = ent; -} - -zmbvoxadd( speaker, category, type, alias, response ) -{ -/# - assert( isDefined( speaker ) ); -#/ -/# - assert( isDefined( category ) ); -#/ -/# - assert( isDefined( type ) ); -#/ -/# - assert( isDefined( alias ) ); -#/ - if ( !isDefined( self.speaker[ speaker ] ) ) - { - self.speaker[ speaker ] = spawnstruct(); - self.speaker[ speaker ].alias = []; - } - if ( !isDefined( self.speaker[ speaker ].alias[ category ] ) ) - { - self.speaker[ speaker ].alias[ category ] = []; - } - self.speaker[ speaker ].alias[ category ][ type ] = alias; - if ( isDefined( response ) ) - { - if ( !isDefined( self.speaker[ speaker ].response ) ) - { - self.speaker[ speaker ].response = []; - } - if ( !isDefined( self.speaker[ speaker ].response[ category ] ) ) - { - self.speaker[ speaker ].response[ category ] = []; - } - self.speaker[ speaker ].response[ category ][ type ] = response; - } - create_vox_timer( type ); -} - -zmbvoxgetlinevariant( prefix, alias_suffix, force_variant, override ) -{ - if ( !isDefined( self.sound_dialog ) ) - { - self.sound_dialog = []; - self.sound_dialog_available = []; - } - if ( !isDefined( self.sound_dialog[ alias_suffix ] ) ) - { - num_variants = maps/mp/zombies/_zm_spawner::get_number_variants( prefix + alias_suffix ); - if ( num_variants <= 0 ) - { -/# - if ( getDvarInt( #"0AEB127D" ) > 0 ) - { - println( "DIALOG DEBUGGER: No variants found for - " + prefix + alias_suffix ); -#/ - } - return undefined; - } - i = 0; - while ( i < num_variants ) - { - self.sound_dialog[ alias_suffix ][ i ] = i; - i++; - } - self.sound_dialog_available[ alias_suffix ] = []; - } - while ( self.sound_dialog_available[ alias_suffix ].size <= 0 ) - { - i = 0; - while ( i < self.sound_dialog[ alias_suffix ].size ) - { - self.sound_dialog_available[ alias_suffix ][ i ] = self.sound_dialog[ alias_suffix ][ i ]; - i++; - } - } - variation = random( self.sound_dialog_available[ alias_suffix ] ); - arrayremovevalue( self.sound_dialog_available[ alias_suffix ], variation ); - if ( isDefined( force_variant ) ) - { - variation = force_variant; - } - if ( !isDefined( override ) ) - { - override = 0; - } - return ( alias_suffix + "_" ) + variation; -} - -zmbvoxcrowdonteam( alias, team, other_alias ) -{ - alias = "vox_crowd_" + alias; - if ( !isDefined( team ) ) - { - level play_sound_2d( alias ); - return; - } - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ]._encounters_team ) ) - { - i++; - continue; - } - else if ( players[ i ]._encounters_team == team ) - { - players[ i ] playsoundtoplayer( alias, players[ i ] ); - i++; - continue; - } - else - { - if ( isDefined( other_alias ) ) - { - players[ i ] playsoundtoplayer( other_alias, players[ i ] ); - } - } - i++; - } -} - -playvoxtoplayer( category, type ) -{ - if ( self.sessionstate != "playing" ) - { - return; - } - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - return; - } - prefix = level.vox.speaker[ self.zmbvoxid ].prefix; - alias_suffix = level.vox.speaker[ self.zmbvoxid ].alias[ category ][ type ]; - prefix = prefix + self.characterindex + "_"; - if ( !isDefined( alias_suffix ) ) - { - return; - } - sound_to_play = self zmbvoxgetlinevariant( prefix, alias_suffix ); - if ( isDefined( sound_to_play ) ) - { - sound = prefix + sound_to_play; - self playsoundtoplayer( sound, self ); - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_audio_announcer.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_audio_announcer.gsc deleted file mode 100644 index d070831..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_audio_announcer.gsc +++ /dev/null @@ -1,490 +0,0 @@ -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - game[ "zmbdialog" ] = []; - game[ "zmbdialog" ][ "prefix" ] = "vox_zmba"; - createvox( "carpenter", "powerup_carpenter" ); - createvox( "insta_kill", "powerup_instakill" ); - createvox( "double_points", "powerup_doublepoints" ); - createvox( "nuke", "powerup_nuke" ); - createvox( "full_ammo", "powerup_maxammo" ); - createvox( "fire_sale", "powerup_firesale" ); - createvox( "minigun", "powerup_death_machine" ); - createvox( "boxmove", "event_magicbox" ); - createvox( "dogstart", "event_dogstart" ); - thread init_gamemodespecificvox( getDvar( "ui_gametype" ), getDvar( "ui_zm_mapstartlocation" ) ); - level.allowzmbannouncer = 1; -} - -init_gamemodespecificvox( mode, location ) -{ - switch( mode ) - { - case "zmeat": - init_meatvox( "meat" ); - break; - case "zrace": - init_racevox( "race", location ); - break; - case "zgrief": - init_griefvox( "grief" ); - break; - case "zcleansed": - init_cleansed( location ); - break; - default: - init_gamemodecommonvox(); - break; - } -} - -init_gamemodecommonvox( prefix ) -{ - createvox( "rules", "rules", prefix ); - createvox( "countdown", "intro", prefix ); - createvox( "side_switch", "side_switch", prefix ); - createvox( "round_win", "win_rd", prefix ); - createvox( "round_lose", "lose_rd", prefix ); - createvox( "round_tied", "tied_rd", prefix ); - createvox( "match_win", "win", prefix ); - createvox( "match_lose", "lose", prefix ); - createvox( "match_tied", "tied", prefix ); -} - -init_griefvox( prefix ) -{ - init_gamemodecommonvox( prefix ); - createvox( "1_player_down", "1rivdown", prefix ); - createvox( "2_player_down", "2rivdown", prefix ); - createvox( "3_player_down", "3rivdown", prefix ); - createvox( "4_player_down", "4rivdown", prefix ); - createvox( "grief_restarted", "restart", prefix ); - createvox( "grief_lost", "lose", prefix ); - createvox( "grief_won", "win", prefix ); - createvox( "1_player_left", "1rivup", prefix ); - createvox( "2_player_left", "2rivup", prefix ); - createvox( "3_player_left", "3rivup", prefix ); - createvox( "last_player", "solo", prefix ); -} - -init_cleansed( prefix ) -{ - init_gamemodecommonvox( prefix ); - createvox( "dr_start_single_0", "dr_start_0" ); - createvox( "dr_start_2", "dr_start_1" ); - createvox( "dr_start_3", "dr_start_2" ); - createvox( "dr_cure_found_line", "dr_cure_found" ); - createvox( "dr_monkey_killer", "dr_monkey_0" ); - createvox( "dr_monkey_killee", "dr_monkey_1" ); - createvox( "dr_human_killed", "dr_kill_plr" ); - createvox( "dr_human_killer", "dr_kill_plr_2" ); - createvox( "dr_survival", "dr_plr_survive_0" ); - createvox( "dr_zurvival", "dr_zmb_survive_2" ); - createvox( "dr_countdown0", "dr_plr_survive_1" ); - createvox( "dr_countdown1", "dr_plr_survive_2" ); - createvox( "dr_countdown2", "dr_plr_survive_3" ); - createvox( "dr_ending", "dr_time_0" ); -} - -init_meatvox( prefix ) -{ - init_gamemodecommonvox( prefix ); - createvox( "meat_drop", "drop", prefix ); - createvox( "meat_grab", "grab", prefix ); - createvox( "meat_grab_A", "team_cdc", prefix ); - createvox( "meat_grab_B", "team_cia", prefix ); - createvox( "meat_land", "land", prefix ); - createvox( "meat_hold", "hold", prefix ); - createvox( "meat_revive_1", "revive1", prefix ); - createvox( "meat_revive_2", "revive2", prefix ); - createvox( "meat_revive_3", "revive3", prefix ); - createvox( "meat_ring_splitter", "ring_tripple", prefix ); - createvox( "meat_ring_minigun", "ring_death", prefix ); - createvox( "meat_ring_ammo", "ring_ammo", prefix ); -} - -init_racevox( prefix, location ) -{ - init_gamemodecommonvox( prefix ); - switch( location ) - { - case "tunnel": - createvox( "rules", "rules_" + location, prefix ); - createvox( "countdown", "intro_" + location, prefix ); - break; - case "power": - createvox( "rules", "rules_" + location, prefix ); - createvox( "countdown", "intro_" + location, prefix ); - createvox( "lap1", "lap1", prefix ); - createvox( "lap2", "lap2", prefix ); - createvox( "lap_final", "lap_final", prefix ); - break; - case "farm": - createvox( "rules", "rules_" + location, prefix ); - createvox( "countdown", "intro_" + location, prefix ); - createvox( "hoop_area", "hoop_area", prefix ); - createvox( "hoop_miss", "hoop_miss", prefix ); - break; - default: - } - createvox( "race_room_2_ally", "room2_ally", prefix ); - createvox( "race_room_3_ally", "room3_ally", prefix ); - createvox( "race_room_4_ally", "room4_ally", prefix ); - createvox( "race_room_5_ally", "room5_ally", prefix ); - createvox( "race_room_2_axis", "room2_axis", prefix ); - createvox( "race_room_3_axis", "room3_axis", prefix ); - createvox( "race_room_4_axis", "room4_axis", prefix ); - createvox( "race_room_5_axis", "room5_axis", prefix ); - createvox( "race_ahead_1_ally", "ahead1_ally", prefix ); - createvox( "race_ahead_2_ally", "ahead2_ally", prefix ); - createvox( "race_ahead_3_ally", "ahead3_ally", prefix ); - createvox( "race_ahead_4_ally", "ahead4_ally", prefix ); - createvox( "race_ahead_1_axis", "ahead1_axis", prefix ); - createvox( "race_ahead_2_axis", "ahead2_axis", prefix ); - createvox( "race_ahead_3_axis", "ahead3_axis", prefix ); - createvox( "race_ahead_4_axis", "ahead4_axis", prefix ); - createvox( "race_kill_15", "door15", prefix ); - createvox( "race_kill_10", "door10", prefix ); - createvox( "race_kill_5", "door5", prefix ); - createvox( "race_kill_3", "door3", prefix ); - createvox( "race_kill_1", "door1", prefix ); - createvox( "race_door_open", "door_open", prefix ); - createvox( "race_door_nag", "door_nag", prefix ); - createvox( "race_grief_incoming", "grief_income_ammo", prefix ); - createvox( "race_grief_land", "grief_land", prefix ); - createvox( "race_laststand", "last_stand", prefix ); - } -} - -createvox( type, alias, gametype ) -{ - if ( !isDefined( gametype ) ) - { - gametype = ""; - } - else - { - gametype += "_"; - } - game[ "zmbdialog" ][ type ] = gametype + alias; -} - -announceroundwinner( winner, delay ) -{ - if ( isDefined( delay ) && delay > 0 ) - { - wait delay; - } - if ( !isDefined( winner ) || isplayer( winner ) ) - { - return; - } - if ( winner != "tied" ) - { - players = get_players(); - _a235 = players; - _k235 = getFirstArrayKey( _a235 ); - while ( isDefined( _k235 ) ) - { - player = _a235[ _k235 ]; - if ( isDefined( player._encounters_team ) && player._encounters_team == winner ) - { - winning_team = player.pers[ "team" ]; - break; - } - else - { - _k235 = getNextArrayKey( _a235, _k235 ); - } - } - losing_team = getotherteam( winning_team ); - leaderdialog( "round_win", winning_team, undefined, 1 ); - leaderdialog( "round_lose", losing_team, undefined, 1 ); - } - else - { - leaderdialog( "round_tied", undefined, undefined, 1 ); - } -} - -announcematchwinner( winner, delay ) -{ - if ( isDefined( delay ) && delay > 0 ) - { - wait delay; - } - if ( !isDefined( winner ) || isplayer( winner ) ) - { - return; - } - if ( winner != "tied" ) - { - players = get_players(); - _a266 = players; - _k266 = getFirstArrayKey( _a266 ); - while ( isDefined( _k266 ) ) - { - player = _a266[ _k266 ]; - if ( isDefined( player._encounters_team ) && player._encounters_team == winner ) - { - winning_team = player.pers[ "team" ]; - break; - } - else - { - _k266 = getNextArrayKey( _a266, _k266 ); - } - } - losing_team = getotherteam( winning_team ); - leaderdialog( "match_win", winning_team, undefined, 1 ); - leaderdialog( "match_lose", losing_team, undefined, 1 ); - } - else - { - leaderdialog( "match_tied", undefined, undefined, 1 ); - } -} - -announcegamemoderules() -{ - if ( getDvar( "ui_zm_mapstartlocation" ) == "town" ) - { - leaderdialog( "rules", undefined, undefined, undefined, 20 ); - } -} - -leaderdialog( dialog, team, group, queue, waittime ) -{ -/# - assert( isDefined( level.players ) ); -#/ - if ( !isDefined( team ) ) - { - leaderdialogbothteams( dialog, "allies", dialog, "axis", group, queue, waittime ); - return; - } - if ( level.splitscreen ) - { - if ( level.players.size ) - { - level.players[ 0 ] leaderdialogonplayer( dialog, group, queue, waittime ); - } - return; - } - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team ) - { - player leaderdialogonplayer( dialog, group, queue, waittime ); - } - i++; - } -} - -leaderdialogbothteams( dialog1, team1, dialog2, team2, group, queue, waittime ) -{ -/# - assert( isDefined( level.players ) ); -#/ - if ( level.splitscreen ) - { - if ( level.players.size ) - { - level.players[ 0 ] leaderdialogonplayer( dialog1, group, queue, waittime ); - } - return; - } - i = 0; - while ( i < level.players.size ) - { - player = level.players[ i ]; - team = player.pers[ "team" ]; - if ( !isDefined( team ) ) - { - i++; - continue; - } - else if ( team == team1 ) - { - player leaderdialogonplayer( dialog1, group, queue, waittime ); - i++; - continue; - } - else - { - if ( team == team2 ) - { - player leaderdialogonplayer( dialog2, group, queue, waittime ); - } - } - i++; - } -} - -leaderdialogonplayer( dialog, group, queue, waittime ) -{ - team = self.pers[ "team" ]; - if ( !isDefined( team ) ) - { - return; - } - if ( team != "allies" && team != "axis" ) - { - return; - } - if ( isDefined( group ) ) - { - if ( self.zmbdialoggroup == group ) - { - return; - } - hadgroupdialog = isDefined( self.zmbdialoggroups[ group ] ); - self.zmbdialoggroups[ group ] = dialog; - dialog = group; - if ( hadgroupdialog ) - { - return; - } - } - if ( !self.zmbdialogactive ) - { - self thread playleaderdialogonplayer( dialog, team, waittime ); - } - else - { - if ( isDefined( queue ) && queue ) - { - self.zmbdialogqueue[ self.zmbdialogqueue.size ] = dialog; - } - } -} - -playleaderdialogonplayer( dialog, team, waittime ) -{ - self endon( "disconnect" ); - if ( level.allowzmbannouncer ) - { - if ( !isDefined( game[ "zmbdialog" ][ dialog ] ) ) - { -/# - if ( getDvarInt( #"0AEB127D" ) > 0 ) - { - println( "DIALOG DEBUGGER: No VOX created for - " + dialog ); -#/ - } - return; - } - } - self.zmbdialogactive = 1; - if ( isDefined( self.zmbdialoggroups[ dialog ] ) ) - { - group = dialog; - dialog = self.zmbdialoggroups[ group ]; - self.zmbdialoggroup = group; - } - if ( level.allowzmbannouncer ) - { - alias = game[ "zmbdialog" ][ "prefix" ] + "_" + game[ "zmbdialog" ][ dialog ]; - variant = self getleaderdialogvariant( alias ); - if ( !isDefined( variant ) ) - { - full_alias = alias; - } - else - { - full_alias = ( alias + "_" ) + variant; - } - self playlocalsound( full_alias ); - } - if ( isDefined( waittime ) ) - { - wait waittime; - } - else - { - wait 4; - } - self.zmbdialogactive = 0; - self.zmbdialoggroup = ""; - if ( self.zmbdialogqueue.size > 0 && level.allowzmbannouncer ) - { - nextdialog = self.zmbdialogqueue[ 0 ]; - i = 1; - while ( i < self.zmbdialogqueue.size ) - { - self.zmbdialogqueue[ i - 1 ] = self.zmbdialogqueue[ i ]; - i++; - } - self thread playleaderdialogonplayer( nextdialog, team ); - } -} - -getleaderdialogvariant( alias ) -{ - if ( !isDefined( alias ) ) - { - return; - } - if ( !isDefined( level.announcer_dialog ) ) - { - level.announcer_dialog = []; - level.announcer_dialog_available = []; - } - num_variants = maps/mp/zombies/_zm_spawner::get_number_variants( alias ); - if ( num_variants <= 0 ) - { -/# - if ( getDvarInt( #"0AEB127D" ) > 0 ) - { - println( "DIALOG DEBUGGER: No variants found for - " + alias ); -#/ - } - return undefined; - } - i = 0; - while ( i < num_variants ) - { - level.announcer_dialog[ alias ][ i ] = i; - i++; - } - level.announcer_dialog_available[ alias ] = []; - if ( level.announcer_dialog_available[ alias ].size <= 0 ) - { - level.announcer_dialog_available[ alias ] = level.announcer_dialog[ alias ]; - } - variation = random( level.announcer_dialog_available[ alias ] ); - level.announcer_dialog_available[ alias ] = arrayremovevalue( level.announcer_dialog_available[ alias ], variation ); - return variation; -} - -getroundswitchdialog( switchtype ) -{ - switch( switchtype ) - { - case "halftime": - return "halftime"; - case "overtime": - return "overtime"; - default: - return "side_switch"; - } -} - -getotherteam( team ) -{ - if ( team == "allies" ) - { - return "axis"; - } - else - { - return "allies"; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_blockers.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_blockers.gsc deleted file mode 100644 index cbb009b..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_blockers.gsc +++ /dev/null @@ -1,2503 +0,0 @@ -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/_demo; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/zombies/_zm_net; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - init_blockers(); - if ( isDefined( level.quantum_bomb_register_result_func ) ) - { - [[ level.quantum_bomb_register_result_func ]]( "open_nearest_door", ::quantum_bomb_open_nearest_door_result, 35, ::quantum_bomb_open_nearest_door_validation ); - } -} - -init_blockers() -{ - level.exterior_goals = getstructarray( "exterior_goal", "targetname" ); - array_thread( level.exterior_goals, ::blocker_init ); - zombie_doors = getentarray( "zombie_door", "targetname" ); - if ( isDefined( zombie_doors ) ) - { - flag_init( "door_can_close" ); - array_thread( zombie_doors, ::door_init ); - } - zombie_debris = getentarray( "zombie_debris", "targetname" ); - array_thread( zombie_debris, ::debris_init ); - flag_blockers = getentarray( "flag_blocker", "targetname" ); - array_thread( flag_blockers, ::flag_blocker ); -} - -door_init() -{ - self.type = undefined; - self.purchaser = undefined; - self._door_open = 0; - targets = getentarray( self.target, "targetname" ); - while ( isDefined( self.script_flag ) && !isDefined( level.flag[ self.script_flag ] ) ) - { - while ( isDefined( self.script_flag ) ) - { - tokens = strtok( self.script_flag, "," ); - i = 0; - while ( i < tokens.size ) - { - flag_init( self.script_flag ); - i++; - } - } - } - if ( !isDefined( self.script_noteworthy ) ) - { - self.script_noteworthy = "default"; - } - self.doors = []; - i = 0; - while ( i < targets.size ) - { - targets[ i ] door_classify( self ); - if ( !isDefined( targets[ i ].og_origin ) ) - { - targets[ i ].og_origin = targets[ i ].origin; - targets[ i ].og_angles = targets[ i ].angles; - } - i++; - } - cost = 1000; - if ( isDefined( self.zombie_cost ) ) - { - cost = self.zombie_cost; - } - self setcursorhint( "HINT_NOICON" ); - self thread door_think(); - if ( isDefined( self.script_noteworthy ) ) - { - if ( self.script_noteworthy == "electric_door" || self.script_noteworthy == "electric_buyable_door" ) - { - if ( getDvar( "ui_gametype" ) == "zgrief" ) - { - self setinvisibletoall(); - return; - } - self sethintstring( &"ZOMBIE_NEED_POWER" ); - if ( isDefined( level.door_dialog_function ) ) - { - self thread [[ level.door_dialog_function ]](); - } - return; - } - else - { - if ( self.script_noteworthy == "local_electric_door" ) - { - if ( getDvar( "ui_gametype" ) == "zgrief" ) - { - self setinvisibletoall(); - return; - } - self sethintstring( &"ZOMBIE_NEED_LOCAL_POWER" ); - if ( isDefined( level.door_dialog_function ) ) - { - self thread [[ level.door_dialog_function ]](); - } - return; - } - else - { - if ( self.script_noteworthy == "kill_counter_door" ) - { - self sethintstring( &"ZOMBIE_DOOR_ACTIVATE_COUNTER", cost ); - return; - } - } - } - } - self set_hint_string( self, "default_buy_door_" + cost ); -} - -door_classify( parent_trig ) -{ - if ( isDefined( self.script_noteworthy ) && self.script_noteworthy == "clip" ) - { - parent_trig.clip = self; - parent_trig.script_string = "clip"; - break; -} -else -{ - if ( !isDefined( self.script_string ) ) - { - if ( isDefined( self.script_angles ) ) - { - self.script_string = "rotate"; - } - else - { - if ( isDefined( self.script_vector ) ) - { - self.script_string = "move"; - } - } - break; -} -else if ( !isDefined( self.script_string ) ) -{ - self.script_string = ""; -} -switch( self.script_string ) -{ - case "anim": -/# - assert( isDefined( self.script_animname ), "Blocker_init: You must specify a script_animname for " + self.targetname ); -#/ -/# - assert( isDefined( level.scr_anim[ self.script_animname ] ), "Blocker_init: You must define a level.scr_anim for script_anim -> " + self.script_animname ); -#/ -/# - assert( isDefined( level.blocker_anim_func ), "Blocker_init: You must define a level.blocker_anim_func" ); -#/ - break; - case "counter_1s": - parent_trig.counter_1s = self; - return; - case "counter_10s": - parent_trig.counter_10s = self; - return; - case "counter_100s": - parent_trig.counter_100s = self; - return; - case "explosives": - if ( !isDefined( parent_trig.explosives ) ) - { - parent_trig.explosives = []; - } - parent_trig.explosives[ parent_trig.explosives.size ] = self; - return; - } - } - if ( self.classname == "script_brushmodel" ) - { - self disconnectpaths(); - } - parent_trig.doors[ parent_trig.doors.size ] = self; - } -} - -door_buy() -{ - self waittill( "trigger", who, force ); - if ( getDvarInt( "zombie_unlock_all" ) > 0 || isDefined( force ) && force ) - { - return 1; - } - if ( !who usebuttonpressed() ) - { - return 0; - } - if ( who in_revive_trigger() ) - { - return 0; - } - if ( is_player_valid( who ) ) - { - players = get_players(); - if ( self._door_open == 1 ) - { - self.purchaser = undefined; - } - else if ( who.score >= self.zombie_cost ) - { - who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost ); - maps/mp/_demo::bookmark( "zm_player_door", getTime(), who ); - who maps/mp/zombies/_zm_stats::increment_client_stat( "doors_purchased" ); - who maps/mp/zombies/_zm_stats::increment_player_stat( "doors_purchased" ); - self.purchaser = who; - } - else - { - play_sound_at_pos( "no_purchase", self.doors[ 0 ].origin ); - if ( isDefined( level.custom_generic_deny_vo_func ) ) - { - who thread [[ level.custom_generic_deny_vo_func ]]( 1 ); - } - else - { - who maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "door_deny" ); - } - return 0; - } - } - return 1; -} - -door_delay() -{ - while ( isDefined( self.explosives ) ) - { - i = 0; - while ( i < self.explosives.size ) - { - self.explosives[ i ] show(); - i++; - } - } - if ( !isDefined( self.script_int ) ) - { - self.script_int = 5; - } - all_trigs = getentarray( self.target, "target" ); - i = 0; - while ( i < all_trigs.size ) - { - all_trigs[ i ] trigger_off(); - i++; - } - wait self.script_int; - i = 0; - while ( i < self.script_int ) - { -/# - iprintln( self.script_int - i ); -#/ - wait 1; - i++; - } - while ( isDefined( self.explosives ) ) - { - i = 0; - while ( i < self.explosives.size ) - { - playfx( level._effect[ "def_explosion" ], self.explosives[ i ].origin, anglesToForward( self.explosives[ i ].angles ) ); - self.explosives[ i ] hide(); - i++; - } - } -} - -door_activate( time, open, quick, use_blocker_clip_for_pathing ) -{ - if ( !isDefined( open ) ) - { - open = 1; - } - if ( !isDefined( time ) ) - { - time = 1; - if ( isDefined( self.script_transition_time ) ) - { - time = self.script_transition_time; - } - } - if ( isDefined( self.door_moving ) ) - { - if ( isDefined( self.script_noteworthy ) || self.script_noteworthy == "clip" && isDefined( self.script_string ) && self.script_string == "clip" ) - { - if ( !is_true( use_blocker_clip_for_pathing ) ) - { - if ( !open ) - { - return; - } - } - } - else - { - return; - } - } - self.door_moving = 1; - if ( open || isDefined( quick ) && !quick ) - { - self notsolid(); - } - if ( self.classname == "script_brushmodel" ) - { - if ( open ) - { - self connectpaths(); - } - } - if ( isDefined( self.script_noteworthy ) || self.script_noteworthy == "clip" && isDefined( self.script_string ) && self.script_string == "clip" ) - { - if ( !open ) - { - self delay_thread( time, ::self_disconnectpaths ); - wait 0,1; - self solid(); - } - return; - } - if ( isDefined( self.script_sound ) ) - { - if ( open ) - { - playsoundatposition( self.script_sound, self.origin ); - } - else - { - playsoundatposition( self.script_sound + "_close", self.origin ); - } - } - else - { - play_sound_at_pos( "door_slide_open", self.origin ); - } - scale = 1; - if ( !open ) - { - scale = -1; - } - switch( self.script_string ) - { - case "rotate": - if ( isDefined( self.script_angles ) ) - { - rot_angle = self.script_angles; - if ( !open ) - { - rot_angle = self.og_angles; - } - self rotateto( rot_angle, time, 0, 0 ); - self thread door_solid_thread(); - if ( !open ) - { - self thread disconnect_paths_when_done(); - } - } - wait randomfloat( 0,15 ); - break; - case "move": - case "slide_apart": - if ( isDefined( self.script_vector ) ) - { - vector = vectorScale( self.script_vector, scale ); - if ( time >= 0,5 ) - { - self moveto( self.origin + vector, time, time * 0,25, time * 0,25 ); - } - else - { - self moveto( self.origin + vector, time ); - } - self thread door_solid_thread(); - if ( !open ) - { - self thread disconnect_paths_when_done(); - } - } - wait randomfloat( 0,15 ); - break; - case "anim": - self [[ level.blocker_anim_func ]]( self.script_animname ); - self thread door_solid_thread_anim(); - wait randomfloat( 0,15 ); - break; - case "physics": - self thread physics_launch_door( self ); - wait 0,1; - break; - } -} - -kill_trapped_zombies( trigger ) -{ - zombies = getaiarray( level.zombie_team ); - if ( !isDefined( zombies ) ) - { - return; - } - i = 0; - while ( i < zombies.size ) - { - if ( !isDefined( zombies[ i ] ) ) - { - i++; - continue; - } - else if ( zombies[ i ] istouching( trigger ) ) - { - zombies[ i ].marked_for_recycle = 1; - zombies[ i ] dodamage( zombies[ i ].health + 666, trigger.origin, self ); - wait randomfloat( 0,15 ); - i++; - continue; - } - else - { - if ( isDefined( level.custom_trapped_zombies ) ) - { - zombies[ i ] thread [[ level.custom_trapped_zombies ]](); - wait randomfloat( 0,15 ); - } - } - i++; - } -} - -any_player_touching( trigger ) -{ - _a530 = get_players(); - _k530 = getFirstArrayKey( _a530 ); - while ( isDefined( _k530 ) ) - { - player = _a530[ _k530 ]; - if ( player istouching( trigger ) ) - { - return 1; - } - wait 0,01; - _k530 = getNextArrayKey( _a530, _k530 ); - } - return 0; -} - -any_player_touching_any( trigger, more_triggers ) -{ - _a541 = get_players(); - _k541 = getFirstArrayKey( _a541 ); - while ( isDefined( _k541 ) ) - { - player = _a541[ _k541 ]; - while ( is_player_valid( player, 0, 1 ) ) - { - if ( isDefined( trigger ) && player istouching( trigger ) ) - { - return 1; - } - while ( isDefined( more_triggers ) && more_triggers.size > 0 ) - { - _a548 = more_triggers; - _k548 = getFirstArrayKey( _a548 ); - while ( isDefined( _k548 ) ) - { - trig = _a548[ _k548 ]; - if ( isDefined( trig ) && player istouching( trig ) ) - { - return 1; - } - _k548 = getNextArrayKey( _a548, _k548 ); - } - } - } - _k541 = getNextArrayKey( _a541, _k541 ); - } - return 0; -} - -any_zombie_touching_any( trigger, more_triggers ) -{ - zombies = getaiarray( level.zombie_team ); - _a560 = zombies; - _k560 = getFirstArrayKey( _a560 ); - while ( isDefined( _k560 ) ) - { - zombie = _a560[ _k560 ]; - if ( isDefined( trigger ) && zombie istouching( trigger ) ) - { - return 1; - } - while ( isDefined( more_triggers ) && more_triggers.size > 0 ) - { - _a565 = more_triggers; - _k565 = getFirstArrayKey( _a565 ); - while ( isDefined( _k565 ) ) - { - trig = _a565[ _k565 ]; - if ( isDefined( trig ) && zombie istouching( trig ) ) - { - return 1; - } - _k565 = getNextArrayKey( _a565, _k565 ); - } - } - _k560 = getNextArrayKey( _a560, _k560 ); - } - return 0; -} - -wait_trigger_clear( trigger, more_triggers, end_on ) -{ - self endon( end_on ); - while ( any_player_touching_any( trigger, more_triggers ) || any_zombie_touching_any( trigger, more_triggers ) ) - { - wait 1; - } -/# - println( "ZM BLOCKER local door trigger clear\n" ); -#/ - self notify( "trigger_clear" ); -} - -waittill_door_trigger_clear_local_power_off( trigger, all_trigs ) -{ - self endon( "trigger_clear" ); - while ( 1 ) - { - if ( isDefined( self.local_power_on ) && self.local_power_on ) - { - self waittill( "local_power_off" ); - } -/# - println( "ZM BLOCKER local door power off\n" ); -#/ - self wait_trigger_clear( trigger, all_trigs, "local_power_on" ); - } -} - -waittill_door_trigger_clear_global_power_off( trigger, all_trigs ) -{ - self endon( "trigger_clear" ); - while ( 1 ) - { - if ( isDefined( self.power_on ) && self.power_on ) - { - self waittill( "power_off" ); - } -/# - println( "ZM BLOCKER global door power off\n" ); -#/ - self wait_trigger_clear( trigger, all_trigs, "power_on" ); - } -} - -waittill_door_can_close() -{ - trigger = undefined; - if ( isDefined( self.door_hold_trigger ) ) - { - trigger = getent( self.door_hold_trigger, "targetname" ); - } - all_trigs = getentarray( self.target, "target" ); - switch( self.script_noteworthy ) - { - case "local_electric_door": - if ( isDefined( trigger ) || isDefined( all_trigs ) ) - { - self waittill_door_trigger_clear_local_power_off( trigger, all_trigs ); - self thread kill_trapped_zombies( trigger ); - } - else - { - if ( isDefined( self.local_power_on ) && self.local_power_on ) - { - self waittill( "local_power_off" ); - } - } - return; - case "electric_door": - if ( isDefined( trigger ) || isDefined( all_trigs ) ) - { - self waittill_door_trigger_clear_global_power_off( trigger, all_trigs ); - if ( isDefined( trigger ) ) - { - self thread kill_trapped_zombies( trigger ); - } - } - else - { - if ( isDefined( self.power_on ) && self.power_on ) - { - self waittill( "power_off" ); - } - } - return; - } - } -} - -door_think() -{ - self endon( "kill_door_think" ); - cost = 1000; - if ( isDefined( self.zombie_cost ) ) - { - cost = self.zombie_cost; - } - self sethintlowpriority( 1 ); - for ( ;; ) - { - while ( 1 ) - { - switch( self.script_noteworthy ) - { - case "local_electric_door": - if ( isDefined( self.local_power_on ) && !self.local_power_on ) - { - self waittill( "local_power_on" ); - } - if ( isDefined( self._door_open ) && !self._door_open ) - { -/# - println( "ZM BLOCKER local door opened\n" ); -#/ - self door_opened( cost, 1 ); - if ( !isDefined( self.power_cost ) ) - { - self.power_cost = 0; - } - self.power_cost += 200; - } - self sethintstring( "" ); - if ( isDefined( level.local_doors_stay_open ) && level.local_doors_stay_open ) - { - return; - } - wait 3; - self waittill_door_can_close(); - self door_block(); - if ( isDefined( self._door_open ) && self._door_open ) - { -/# - println( "ZM BLOCKER local door closed\n" ); -#/ - self door_opened( cost, 1 ); - } - self sethintstring( &"ZOMBIE_NEED_LOCAL_POWER" ); - wait 3; - } - case "electric_door": - if ( isDefined( self.power_on ) && !self.power_on ) - { - self waittill( "power_on" ); - } - if ( isDefined( self._door_open ) && !self._door_open ) - { -/# - println( "ZM BLOCKER global door opened\n" ); -#/ - self door_opened( cost, 1 ); - if ( !isDefined( self.power_cost ) ) - { - self.power_cost = 0; - } - self.power_cost += 200; - } - self sethintstring( "" ); - if ( isDefined( level.local_doors_stay_open ) && level.local_doors_stay_open ) - { - return; - } - wait 3; - self waittill_door_can_close(); - self door_block(); - if ( isDefined( self._door_open ) && self._door_open ) - { -/# - println( "ZM BLOCKER global door closed\n" ); -#/ - self door_opened( cost, 1 ); - } - self sethintstring( &"ZOMBIE_NEED_POWER" ); - wait 3; - } - case "electric_buyable_door": - flag_wait( "power_on" ); - self set_hint_string( self, "default_buy_door_" + cost ); - while ( !self door_buy() ) - { - continue; - } - case "delay_door": - while ( !self door_buy() ) - { - continue; - } - self door_delay(); - break; - default: - if ( isDefined( level._default_door_custom_logic ) ) - { - self [[ level._default_door_custom_logic ]](); - break; - } - else while ( !self door_buy() ) - { - continue; - } - } - self door_opened( cost ); - if ( !flag( "door_can_close" ) ) - { - return; - } - else } - } - } -} - -self_and_flag_wait( msg ) -{ - self endon( msg ); - if ( isDefined( self.power_door_ignore_flag_wait ) && self.power_door_ignore_flag_wait ) - { - level waittill( "forever" ); - } - else - { - flag_wait( msg ); - } -} - -door_block() -{ - while ( isDefined( self.doors ) ) - { - i = 0; - while ( i < self.doors.size ) - { - if ( isDefined( self.doors[ i ].script_noteworthy ) || self.doors[ i ].script_noteworthy == "clip" && isDefined( self.doors[ i ].script_string ) && self.doors[ i ].script_string == "clip" ) - { - self.doors[ i ] solid(); - } - i++; - } - } -} - -door_opened( cost, quick_close ) -{ - if ( isDefined( self.door_is_moving ) && self.door_is_moving ) - { - return; - } - self.has_been_opened = 1; - all_trigs = getentarray( self.target, "target" ); - self.door_is_moving = 1; - _a822 = all_trigs; - _k822 = getFirstArrayKey( _a822 ); - while ( isDefined( _k822 ) ) - { - trig = _a822[ _k822 ]; - trig.door_is_moving = 1; - trig trigger_off(); - trig.has_been_opened = 1; - if ( !isDefined( trig._door_open ) || trig._door_open == 0 ) - { - trig._door_open = 1; - trig notify( "door_opened" ); - } - else - { - trig._door_open = 0; - } - if ( isDefined( trig.script_flag ) && trig._door_open == 1 ) - { - tokens = strtok( trig.script_flag, "," ); - i = 0; - while ( i < tokens.size ) - { - flag_set( tokens[ i ] ); - i++; - } - } - else while ( isDefined( trig.script_flag ) && trig._door_open == 0 ) - { - tokens = strtok( trig.script_flag, "," ); - i = 0; - while ( i < tokens.size ) - { - flag_clear( tokens[ i ] ); - i++; - } - } - if ( isDefined( quick_close ) && quick_close ) - { - trig set_hint_string( trig, "" ); - } - else - { - if ( trig._door_open == 1 && flag( "door_can_close" ) ) - { - trig set_hint_string( trig, "default_buy_door_close" ); - break; - } - else - { - if ( trig._door_open == 0 ) - { - trig set_hint_string( trig, "default_buy_door_" + cost ); - } - } - } - _k822 = getNextArrayKey( _a822, _k822 ); - } - level notify( "door_opened" ); - if ( isDefined( self.doors ) ) - { - is_script_model_door = 0; - have_moving_clip_for_door = 0; - use_blocker_clip_for_pathing = 0; - _a878 = self.doors; - _k878 = getFirstArrayKey( _a878 ); - while ( isDefined( _k878 ) ) - { - door = _a878[ _k878 ]; - if ( is_true( door.ignore_use_blocker_clip_for_pathing_check ) ) - { - } - else if ( door.classname == "script_model" ) - { - is_script_model_door = 1; - } - else - { - if ( door.classname == "script_brushmodel" && isDefined( door.script_noteworthy ) && door.script_noteworthy != "clip" || !isDefined( door.script_string ) && door.script_string != "clip" ) - { - have_moving_clip_for_door = 1; - } - } - _k878 = getNextArrayKey( _a878, _k878 ); - } - if ( is_script_model_door ) - { - use_blocker_clip_for_pathing = !have_moving_clip_for_door; - } - i = 0; - while ( i < self.doors.size ) - { - self.doors[ i ] thread door_activate( self.doors[ i ].script_transition_time, self._door_open, quick_close, use_blocker_clip_for_pathing ); - i++; - } - if ( self.doors.size ) - { - play_sound_at_pos( "purchase", self.doors[ 0 ].origin ); - } - } - level.active_zone_names = maps/mp/zombies/_zm_zonemgr::get_active_zone_names(); - wait 1; - self.door_is_moving = 0; - _a921 = all_trigs; - _k921 = getFirstArrayKey( _a921 ); - while ( isDefined( _k921 ) ) - { - trig = _a921[ _k921 ]; - trig.door_is_moving = 0; - _k921 = getNextArrayKey( _a921, _k921 ); - } - if ( isDefined( quick_close ) && quick_close ) - { - i = 0; - while ( i < all_trigs.size ) - { - all_trigs[ i ] trigger_on(); - i++; - } - return; - } - while ( flag( "door_can_close" ) ) - { - wait 2; - i = 0; - while ( i < all_trigs.size ) - { - all_trigs[ i ] trigger_on(); - i++; - } - } -} - -physics_launch_door( door_trig ) -{ - vec = vectorScale( vectornormalize( self.script_vector ), 10 ); - self rotateroll( 5, 0,05 ); - wait 0,05; - self moveto( self.origin + vec, 0,1 ); - self waittill( "movedone" ); - self physicslaunch( self.origin, self.script_vector * 300 ); - wait 60; - self delete(); -} - -door_solid_thread() -{ - self waittill_either( "rotatedone", "movedone" ); - self.door_moving = undefined; - while ( 1 ) - { - players = get_players(); - player_touching = 0; - i = 0; - while ( i < players.size ) - { - if ( players[ i ] istouching( self ) ) - { - player_touching = 1; - break; - } - else - { - i++; - } - } - if ( !player_touching ) - { - self solid(); - return; - } - wait 1; - } -} - -door_solid_thread_anim() -{ - self waittillmatch( "door_anim" ); - return "end"; - self.door_moving = undefined; - while ( 1 ) - { - players = get_players(); - player_touching = 0; - i = 0; - while ( i < players.size ) - { - if ( players[ i ] istouching( self ) ) - { - player_touching = 1; - break; - } - else - { - i++; - } - } - if ( !player_touching ) - { - self solid(); - return; - } - wait 1; - } -} - -disconnect_paths_when_done() -{ - self waittill_either( "rotatedone", "movedone" ); - self disconnectpaths(); -} - -self_disconnectpaths() -{ - self disconnectpaths(); -} - -debris_init() -{ - cost = 1000; - if ( isDefined( self.zombie_cost ) ) - { - cost = self.zombie_cost; - } - self set_hint_string( self, "default_buy_debris_" + cost ); - self setcursorhint( "HINT_NOICON" ); - if ( isDefined( self.script_flag ) && !isDefined( level.flag[ self.script_flag ] ) ) - { - flag_init( self.script_flag ); - } - self thread debris_think(); -} - -debris_think() -{ - if ( isDefined( level.custom_debris_function ) ) - { - self [[ level.custom_debris_function ]](); - } - for ( ;; ) - { - while ( 1 ) - { - self waittill( "trigger", who, force ); - if ( getDvarInt( "zombie_unlock_all" ) > 0 || isDefined( force ) && force ) - { - } - else - { - while ( !who usebuttonpressed() ) - { - continue; - } - while ( who in_revive_trigger() ) - { - continue; - } - } - if ( is_player_valid( who ) ) - { - players = get_players(); - if ( getDvarInt( "zombie_unlock_all" ) > 0 ) - { - break; - } - else if ( who.score >= self.zombie_cost ) - { - who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost ); - maps/mp/_demo::bookmark( "zm_player_door", getTime(), who ); - who maps/mp/zombies/_zm_stats::increment_client_stat( "doors_purchased" ); - who maps/mp/zombies/_zm_stats::increment_player_stat( "doors_purchased" ); - break; - } - else - { - play_sound_at_pos( "no_purchase", self.origin ); - who maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "door_deny" ); - } - } - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", who.name, who.score, level.round_number, self.zombie_cost, self.script_flag, self.origin, "door" ); - junk = getentarray( self.target, "targetname" ); - while ( isDefined( self.script_flag ) ) - { - tokens = strtok( self.script_flag, "," ); - i = 0; - while ( i < tokens.size ) - { - flag_set( tokens[ i ] ); - i++; - } - } - play_sound_at_pos( "purchase", self.origin ); - level notify( "junk purchased" ); - move_ent = undefined; - clip = undefined; - i = 0; - while ( i < junk.size ) - { - junk[ i ] connectpaths(); - if ( isDefined( junk[ i ].script_noteworthy ) ) - { - if ( junk[ i ].script_noteworthy == "clip" ) - { - clip = junk[ i ]; - i++; - continue; - } - } - else struct = undefined; - if ( isDefined( junk[ i ].script_linkto ) ) - { - struct = getstruct( junk[ i ].script_linkto, "script_linkname" ); - if ( isDefined( struct ) ) - { - move_ent = junk[ i ]; - junk[ i ] thread debris_move( struct ); - } - else - { - junk[ i ] delete(); - } - i++; - continue; - } - else - { - junk[ i ] delete(); - } - i++; - } - all_trigs = getentarray( self.target, "target" ); - i = 0; - while ( i < all_trigs.size ) - { - all_trigs[ i ] delete(); - i++; - } - if ( isDefined( clip ) ) - { - if ( isDefined( move_ent ) ) - { - move_ent waittill( "movedone" ); - } - clip delete(); - } - return; - } - else - { - } - } -} - -debris_move( struct ) -{ - self script_delay(); - self notsolid(); - self play_sound_on_ent( "debris_move" ); - playsoundatposition( "zmb_lightning_l", self.origin ); - if ( isDefined( self.script_firefx ) ) - { - playfx( level._effect[ self.script_firefx ], self.origin ); - } - while ( isDefined( self.script_noteworthy ) ) - { - while ( self.script_noteworthy == "jiggle" ) - { - num = randomintrange( 3, 5 ); - og_angles = self.angles; - i = 0; - while ( i < num ) - { - angles = og_angles + ( -5 + randomfloat( 10 ), -5 + randomfloat( 10 ), -5 + randomfloat( 10 ) ); - time = randomfloatrange( 0,1, 0,4 ); - self rotateto( angles, time ); - wait ( time - 0,05 ); - i++; - } - } - } - time = 0,5; - if ( isDefined( self.script_transition_time ) ) - { - time = self.script_transition_time; - } - self moveto( struct.origin, time, time * 0,5 ); - self rotateto( struct.angles, time * 0,75 ); - self waittill( "movedone" ); - if ( isDefined( self.script_fxid ) ) - { - playfx( level._effect[ self.script_fxid ], self.origin ); - playsoundatposition( "zmb_zombie_spawn", self.origin ); - } - self delete(); -} - -blocker_disconnect_paths( start_node, end_node, two_way ) -{ -} - -blocker_connect_paths( start_node, end_node, two_way ) -{ -} - -blocker_init() -{ - if ( !isDefined( self.target ) ) - { - return; - } - targets = getentarray( self.target, "targetname" ); - self.barrier_chunks = []; - j = 0; - while ( j < targets.size ) - { - if ( targets[ j ] iszbarrier() ) - { - self.zbarrier = targets[ j ]; - if ( isDefined( self.zbarrier.script_string ) ) - { - } - else - { - } - m_collision = "p6_anim_zm_barricade_board_collision"; - precachemodel( m_collision ); - self.zbarrier setzbarriercolmodel( m_collision ); - self.zbarrier.chunk_health = []; - i = 0; - while ( i < self.zbarrier getnumzbarrierpieces() ) - { - self.zbarrier.chunk_health[ i ] = 0; - i++; - } - } - else if ( isDefined( targets[ j ].script_string ) && targets[ j ].script_string == "rock" ) - { - targets[ j ].material = "rock"; - } - if ( isDefined( targets[ j ].script_parameters ) ) - { - if ( targets[ j ].script_parameters == "grate" ) - { - if ( isDefined( targets[ j ].script_noteworthy ) ) - { - if ( targets[ j ].script_noteworthy != "2" && targets[ j ].script_noteworthy != "3" && targets[ j ].script_noteworthy != "4" || targets[ j ].script_noteworthy == "5" && targets[ j ].script_noteworthy == "6" ) - { - targets[ j ] hide(); -/# - iprintlnbold( " Hide " ); -#/ - } - } - break; - } - else if ( targets[ j ].script_parameters == "repair_board" ) - { - targets[ j ].unbroken_section = getent( targets[ j ].target, "targetname" ); - if ( isDefined( targets[ j ].unbroken_section ) ) - { - targets[ j ].unbroken_section linkto( targets[ j ] ); - targets[ j ] hide(); - targets[ j ] notsolid(); - targets[ j ].unbroken = 1; - if ( isDefined( targets[ j ].unbroken_section.script_noteworthy ) && targets[ j ].unbroken_section.script_noteworthy == "glass" ) - { - targets[ j ].material = "glass"; - targets[ j ] thread destructible_glass_barricade( targets[ j ].unbroken_section, self ); - break; - } - else - { - if ( isDefined( targets[ j ].unbroken_section.script_noteworthy ) && targets[ j ].unbroken_section.script_noteworthy == "metal" ) - { - targets[ j ].material = "metal"; - } - } - } - break; - } - else - { - if ( targets[ j ].script_parameters == "barricade_vents" ) - { - targets[ j ].material = "metal_vent"; - } - } - } - if ( isDefined( targets[ j ].targetname ) ) - { - if ( targets[ j ].targetname == "auto2" ) - { - } - } - targets[ j ] update_states( "repaired" ); - targets[ j ].destroyed = 0; - targets[ j ] show(); - targets[ j ].claimed = 0; - targets[ j ].anim_grate_index = 0; - targets[ j ].og_origin = targets[ j ].origin; - targets[ j ].og_angles = targets[ j ].angles; - self.barrier_chunks[ self.barrier_chunks.size ] = targets[ j ]; - j++; - } - target_nodes = getnodearray( self.target, "targetname" ); - j = 0; - while ( j < target_nodes.size ) - { - if ( target_nodes[ j ].type == "Begin" ) - { - self.neg_start = target_nodes[ j ]; - if ( isDefined( self.neg_start.target ) ) - { - self.neg_end = getnode( self.neg_start.target, "targetname" ); - } - blocker_disconnect_paths( self.neg_start, self.neg_end ); - } - j++; - } - if ( isDefined( self.zbarrier ) ) - { - if ( isDefined( self.barrier_chunks ) ) - { - i = 0; - while ( i < self.barrier_chunks.size ) - { - self.barrier_chunks[ i ] delete(); - i++; - } - self.barrier_chunks = []; - } - } - if ( isDefined( self.zbarrier ) && should_delete_zbarriers() ) - { - self.zbarrier delete(); - self.zbarrier = undefined; - return; - } - self blocker_attack_spots(); - self.trigger_location = getstruct( self.target, "targetname" ); - self thread blocker_think(); -} - -should_delete_zbarriers() -{ - gametype = getDvar( "ui_gametype" ); - if ( !is_classic() && !is_standard() && gametype != "zgrief" ) - { - return 1; - } - return 0; -} - -destructible_glass_barricade( unbroken_section, node ) -{ - unbroken_section setcandamage( 1 ); - unbroken_section.health = 99999; - unbroken_section waittill( "damage", amount, who ); - if ( is_player_valid( who ) || who maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - self thread maps/mp/zombies/_zm_spawner::zombie_boardtear_offset_fx_horizontle( self, node ); - level thread remove_chunk( self, node, 1 ); - self update_states( "destroyed" ); - self notify( "destroyed" ); - self.unbroken = 0; - } -} - -blocker_attack_spots() -{ - spots = []; - numslots = self.zbarrier getzbarriernumattackslots(); - numslots = int( max( numslots, 1 ) ); - if ( numslots % 2 ) - { - spots[ spots.size ] = groundpos_ignore_water_new( self.zbarrier.origin + vectorScale( ( -1, 0, 0 ), 60 ) ); - } - while ( numslots > 1 ) - { - reps = floor( numslots / 2 ); - slot = 1; - i = 0; - while ( i < reps ) - { - offset = self.zbarrier getzbarrierattackslothorzoffset() * ( i + 1 ); - spots[ spots.size ] = groundpos_ignore_water_new( spots[ 0 ] + ( anglesToRight( self.angles ) * offset ) + vectorScale( ( -1, 0, 0 ), 60 ) ); - slot++; - if ( slot < numslots ) - { - spots[ spots.size ] = groundpos_ignore_water_new( spots[ 0 ] + ( anglesToRight( self.angles ) * ( offset * -1 ) ) + vectorScale( ( -1, 0, 0 ), 60 ) ); - slot++; - } - i++; - } - } - taken = []; - i = 0; - while ( i < spots.size ) - { - taken[ i ] = 0; - i++; - } - self.attack_spots_taken = taken; - self.attack_spots = spots; -/# - self thread debug_attack_spots_taken(); -#/ -} - -blocker_choke() -{ - level._blocker_choke = 0; - level endon( "stop_blocker_think" ); - while ( 1 ) - { - wait 0,05; - level._blocker_choke = 0; - } -} - -blocker_think() -{ - level endon( "stop_blocker_think" ); - if ( !isDefined( level._blocker_choke ) ) - { - level thread blocker_choke(); - } - use_choke = 0; - if ( isDefined( level._use_choke_blockers ) && level._use_choke_blockers == 1 ) - { - use_choke = 1; - } - while ( 1 ) - { - wait 0,5; - if ( use_choke ) - { - if ( level._blocker_choke > 3 ) - { - wait 0,05; - } - } - level._blocker_choke++; - while ( all_chunks_intact( self, self.barrier_chunks ) ) - { - continue; - } - while ( no_valid_repairable_boards( self, self.barrier_chunks ) ) - { - continue; - } - self blocker_trigger_think(); - } -} - -player_fails_blocker_repair_trigger_preamble( player, players, trigger, hold_required ) -{ - if ( !isDefined( trigger ) ) - { - return 1; - } - if ( !is_player_valid( player ) ) - { - return 1; - } - if ( players.size == 1 && isDefined( players[ 0 ].intermission ) && players[ 0 ].intermission == 1 ) - { - return 1; - } - if ( hold_required && !player usebuttonpressed() ) - { - return 1; - } - if ( !hold_required && !player use_button_held() ) - { - return 1; - } - if ( player in_revive_trigger() ) - { - return 1; - } - return 0; -} - -has_blocker_affecting_perk() -{ - has_perk = undefined; - if ( self hasperk( "specialty_fastreload" ) ) - { - has_perk = "specialty_fastreload"; - } - return has_perk; -} - -do_post_chunk_repair_delay( has_perk ) -{ - if ( !self script_delay() ) - { - wait 1; - } -} - -handle_post_board_repair_rewards( cost, zbarrier ) -{ - self maps/mp/zombies/_zm_stats::increment_client_stat( "boards" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "boards" ); - if ( isDefined( self.pers[ "boards" ] ) && ( self.pers[ "boards" ] % 10 ) == 0 ) - { - self thread do_player_general_vox( "general", "reboard", 90 ); - } - if ( isDefined( level.pers_upgrade_boards ) && level.pers_upgrade_boards ) - { - if ( level.round_number >= level.pers_boarding_round_start ) - { - if ( isDefined( zbarrier ) ) - { - self.upgrade_fx_origin = zbarrier.origin; - } - if ( is_classic() ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "pers_boarding", 0 ); - } - } - } - self.rebuild_barrier_reward += cost; - if ( self.rebuild_barrier_reward < level.zombie_vars[ "rebuild_barrier_cap_per_round" ] ) - { - self maps/mp/zombies/_zm_score::player_add_points( "rebuild_board", cost ); - self play_sound_on_ent( "purchase" ); - } - if ( isDefined( self.board_repair ) ) - { - self.board_repair += 1; - } -} - -blocker_unitrigger_think() -{ - self endon( "kill_trigger" ); - while ( 1 ) - { - self waittill( "trigger", player ); - self.stub.trigger_target notify( "trigger" ); - } -} - -blocker_trigger_think() -{ - if ( isDefined( level.no_board_repair ) && level.no_board_repair ) - { - return; - } -/# - println( "ZM >> TRIGGER blocker_trigger_think " ); -#/ - level endon( "stop_blocker_think" ); - cost = 10; - if ( isDefined( self.zombie_cost ) ) - { - cost = self.zombie_cost; - } - original_cost = cost; - if ( !isDefined( self.unitrigger_stub ) ) - { - radius = 94,21; - height = 94,21; - if ( isDefined( self.trigger_location ) ) - { - trigger_location = self.trigger_location; - } - else - { - trigger_location = self; - } - if ( isDefined( trigger_location.radius ) ) - { - radius = trigger_location.radius; - } - if ( isDefined( trigger_location.height ) ) - { - height = trigger_location.height; - } - trigger_pos = groundpos( trigger_location.origin ) + vectorScale( ( -1, 0, 0 ), 4 ); - self.unitrigger_stub = spawnstruct(); - self.unitrigger_stub.origin = trigger_pos; - self.unitrigger_stub.radius = radius; - self.unitrigger_stub.height = height; - self.unitrigger_stub.script_unitrigger_type = "unitrigger_radius"; - self.unitrigger_stub.hint_string = get_hint_string( self, "default_reward_barrier_piece" ); - self.unitrigger_stub.cursor_hint = "HINT_NOICON"; - self.unitrigger_stub.trigger_target = self; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::blocker_unitrigger_think ); - maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); - if ( !isDefined( trigger_location.angles ) ) - { - trigger_location.angles = ( -1, 0, 0 ); - } - self.unitrigger_stub.origin = ( groundpos( trigger_location.origin ) + vectorScale( ( -1, 0, 0 ), 4 ) ) + ( anglesToForward( trigger_location.angles ) * -11 ); - } - self thread trigger_delete_on_repair(); - thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::blocker_unitrigger_think ); -/# - if ( getDvarInt( "zombie_debug" ) > 0 ) - { - thread debug_blocker( trigger_pos, radius, height ); -#/ - } - while ( 1 ) - { - self waittill( "trigger", player ); - has_perk = player has_blocker_affecting_perk(); - if ( all_chunks_intact( self, self.barrier_chunks ) ) - { - self notify( "all_boards_repaired" ); - return; - } - if ( no_valid_repairable_boards( self, self.barrier_chunks ) ) - { - self notify( "no valid boards" ); - return; - } - while ( 1 ) - { - players = get_players(); - if ( player_fails_blocker_repair_trigger_preamble( player, players, self.unitrigger_stub.trigger, 0 ) ) - { - break; - } - else if ( isDefined( self.zbarrier ) ) - { - chunk = get_random_destroyed_chunk( self, self.barrier_chunks ); - if ( isDefined( player.pers_upgrades_awarded[ "board" ] ) ) - { - self thread replace_chunk( self, chunk, has_perk, player.pers_upgrades_awarded[ "board" ] ); - } - } - else - { - chunk = get_random_destroyed_chunk( self, self.barrier_chunks ); - if ( isDefined( chunk.script_parameter ) || chunk.script_parameters == "repair_board" && chunk.script_parameters == "barricade_vents" ) - { - if ( isDefined( chunk.unbroken_section ) ) - { - chunk show(); - chunk solid(); - chunk.unbroken_section self_delete(); - } - } - else - { - chunk show(); - } - if ( isDefined( chunk.script_parameters ) && chunk.script_parameters != "board" || chunk.script_parameters == "repair_board" && chunk.script_parameters == "barricade_vents" ) - { - if ( isDefined( level.use_clientside_board_fx ) && !level.use_clientside_board_fx ) - { - if ( !isDefined( chunk.material ) || isDefined( chunk.material ) && chunk.material != "rock" ) - { - chunk play_sound_on_ent( "rebuild_barrier_piece" ); - } - playsoundatposition( "zmb_cha_ching", ( -1, 0, 0 ) ); - } - } - if ( chunk.script_parameters == "bar" ) - { - chunk play_sound_on_ent( "rebuild_barrier_piece" ); - playsoundatposition( "zmb_cha_ching", ( -1, 0, 0 ) ); - } - if ( isDefined( chunk.script_parameters ) ) - { - if ( chunk.script_parameters == "bar" ) - { - if ( isDefined( chunk.script_noteworthy ) ) - { - if ( chunk.script_noteworthy == "5" ) - { - chunk hide(); - break; - } - else - { - if ( chunk.script_noteworthy == "3" ) - { - chunk hide(); - } - } - } - } - } - if ( isDefined( player.pers_upgrades_awarded[ "board" ] ) ) - { - self thread replace_chunk( self, chunk, has_perk, player.pers_upgrades_awarded[ "board" ] ); - } - } - if ( isDefined( self.clip ) ) - { - self.clip enable_trigger(); - self.clip disconnectpaths(); - } - else - { - blocker_disconnect_paths( self.neg_start, self.neg_end ); - } - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, original_cost, self.target, self.origin, "repair" ); - self do_post_chunk_repair_delay( has_perk ); - if ( !is_player_valid( player ) ) - { - break; - } - else - { - player handle_post_board_repair_rewards( cost, self ); - if ( all_chunks_intact( self, self.barrier_chunks ) ) - { - self notify( "all_boards_repaired" ); - return; - } - if ( no_valid_repairable_boards( self, self.barrier_chunks ) ) - { - self notify( "no valid boards" ); - return; - } - } - } - } -} - -random_destroyed_chunk_show() -{ - wait 0,5; - self show(); -} - -door_repaired_rumble_n_sound() -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( distance( players[ i ].origin, self.origin ) < 150 ) - { - if ( isalive( players[ i ] ) ) - { - players[ i ] thread board_completion(); - } - } - i++; - } -} - -board_completion() -{ - self endon( "disconnect" ); -} - -trigger_delete_on_repair() -{ - while ( 1 ) - { - self waittill_either( "all_boards_repaired", "no valid boards" ); - maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); - return; - } -} - -blocker_doubler_hint( hint, original_cost ) -{ - self endon( "death" ); - doubler_status = level.zombie_vars[ "zombie_powerup_point_doubler_on" ]; - while ( 1 ) - { - wait 0,5; - if ( doubler_status != level.zombie_vars[ "zombie_powerup_point_doubler_on" ] ) - { - doubler_status = level.zombie_vars[ "zombie_powerup_point_doubler_on" ]; - cost = original_cost; - if ( level.zombie_vars[ "zombie_powerup_point_doubler_on" ] ) - { - cost = original_cost * 2; - } - self set_hint_string( self, hint + cost ); - } - } -} - -rebuild_barrier_reward_reset() -{ - self.rebuild_barrier_reward = 0; -} - -remove_chunk( chunk, node, destroy_immediately, zomb ) -{ - chunk update_states( "mid_tear" ); - if ( isDefined( chunk.script_parameters ) ) - { - if ( chunk.script_parameters != "board" || chunk.script_parameters == "repair_board" && chunk.script_parameters == "barricade_vents" ) - { - chunk thread zombie_boardtear_audio_offset( chunk ); - } - } - if ( isDefined( chunk.script_parameters ) ) - { - if ( chunk.script_parameters == "bar" ) - { - chunk thread zombie_bartear_audio_offset( chunk ); - } - } - chunk notsolid(); - fx = "wood_chunk_destory"; - if ( isDefined( self.script_fxid ) ) - { - fx = self.script_fxid; - } - if ( isDefined( chunk.script_moveoverride ) && chunk.script_moveoverride ) - { - chunk hide(); - } - if ( isDefined( chunk.script_parameters ) && chunk.script_parameters == "bar" ) - { - if ( isDefined( chunk.script_noteworthy ) && chunk.script_noteworthy == "4" ) - { - ent = spawn( "script_origin", chunk.origin ); - ent.angles = node.angles + vectorScale( ( -1, 0, 0 ), 180 ); - dist = 100; - if ( isDefined( chunk.script_move_dist ) ) - { - dist_max = chunk.script_move_dist - 100; - dist = 100 + randomint( dist_max ); - } - else - { - dist = 100 + randomint( 100 ); - } - dest = ent.origin + ( anglesToForward( ent.angles ) * dist ); - trace = bullettrace( dest + vectorScale( ( -1, 0, 0 ), 16 ), dest + vectorScale( ( -1, 0, 0 ), 200 ), 0, undefined ); - if ( trace[ "fraction" ] == 1 ) - { - dest += vectorScale( ( -1, 0, 0 ), 200 ); - } - else - { - dest = trace[ "position" ]; - } - chunk linkto( ent ); - time = ent fake_physicslaunch( dest, 300 + randomint( 100 ) ); - if ( randomint( 100 ) > 40 ) - { - ent rotatepitch( 180, time * 0,5 ); - } - else - { - ent rotatepitch( 90, time, time * 0,5 ); - } - wait time; - chunk hide(); - wait 0,1; - ent delete(); - } - else - { - ent = spawn( "script_origin", chunk.origin ); - ent.angles = node.angles + vectorScale( ( -1, 0, 0 ), 180 ); - dist = 100; - if ( isDefined( chunk.script_move_dist ) ) - { - dist_max = chunk.script_move_dist - 100; - dist = 100 + randomint( dist_max ); - } - else - { - dist = 100 + randomint( 100 ); - } - dest = ent.origin + ( anglesToForward( ent.angles ) * dist ); - trace = bullettrace( dest + vectorScale( ( -1, 0, 0 ), 16 ), dest + vectorScale( ( -1, 0, 0 ), 200 ), 0, undefined ); - if ( trace[ "fraction" ] == 1 ) - { - dest += vectorScale( ( -1, 0, 0 ), 200 ); - } - else - { - dest = trace[ "position" ]; - } - chunk linkto( ent ); - time = ent fake_physicslaunch( dest, 260 + randomint( 100 ) ); - if ( randomint( 100 ) > 40 ) - { - ent rotatepitch( 180, time * 0,5 ); - } - else - { - ent rotatepitch( 90, time, time * 0,5 ); - } - wait time; - chunk hide(); - wait 0,1; - ent delete(); - } - chunk update_states( "destroyed" ); - chunk notify( "destroyed" ); - } - if ( isDefined( chunk.script_parameters ) && chunk.script_parameters != "board" || chunk.script_parameters == "repair_board" && chunk.script_parameters == "barricade_vents" ) - { - ent = spawn( "script_origin", chunk.origin ); - ent.angles = node.angles + vectorScale( ( -1, 0, 0 ), 180 ); - dist = 100; - if ( isDefined( chunk.script_move_dist ) ) - { - dist_max = chunk.script_move_dist - 100; - dist = 100 + randomint( dist_max ); - } - else - { - dist = 100 + randomint( 100 ); - } - dest = ent.origin + ( anglesToForward( ent.angles ) * dist ); - trace = bullettrace( dest + vectorScale( ( -1, 0, 0 ), 16 ), dest + vectorScale( ( -1, 0, 0 ), 200 ), 0, undefined ); - if ( trace[ "fraction" ] == 1 ) - { - dest += vectorScale( ( -1, 0, 0 ), 200 ); - } - else - { - dest = trace[ "position" ]; - } - chunk linkto( ent ); - time = ent fake_physicslaunch( dest, 200 + randomint( 100 ) ); - if ( isDefined( chunk.unbroken_section ) ) - { - if ( !isDefined( chunk.material ) || chunk.material != "metal" ) - { - chunk.unbroken_section self_delete(); - } - } - if ( randomint( 100 ) > 40 ) - { - ent rotatepitch( 180, time * 0,5 ); - } - else - { - ent rotatepitch( 90, time, time * 0,5 ); - } - wait time; - if ( isDefined( chunk.unbroken_section ) ) - { - if ( isDefined( chunk.material ) && chunk.material == "metal" ) - { - chunk.unbroken_section self_delete(); - } - } - chunk hide(); - wait 0,1; - ent delete(); - chunk update_states( "destroyed" ); - chunk notify( "destroyed" ); - } - if ( isDefined( chunk.script_parameters ) && chunk.script_parameters == "grate" ) - { - if ( isDefined( chunk.script_noteworthy ) && chunk.script_noteworthy == "6" ) - { - ent = spawn( "script_origin", chunk.origin ); - ent.angles = node.angles + vectorScale( ( -1, 0, 0 ), 180 ); - dist = 100 + randomint( 100 ); - dest = ent.origin + ( anglesToForward( ent.angles ) * dist ); - trace = bullettrace( dest + vectorScale( ( -1, 0, 0 ), 16 ), dest + vectorScale( ( -1, 0, 0 ), 200 ), 0, undefined ); - if ( trace[ "fraction" ] == 1 ) - { - dest += vectorScale( ( -1, 0, 0 ), 200 ); - } - else - { - dest = trace[ "position" ]; - } - chunk linkto( ent ); - time = ent fake_physicslaunch( dest, 200 + randomint( 100 ) ); - if ( randomint( 100 ) > 40 ) - { - ent rotatepitch( 180, time * 0,5 ); - } - else - { - ent rotatepitch( 90, time, time * 0,5 ); - } - wait time; - chunk hide(); - ent delete(); - chunk update_states( "destroyed" ); - chunk notify( "destroyed" ); - return; - } - else - { - chunk hide(); - chunk update_states( "destroyed" ); - chunk notify( "destroyed" ); - } - } -} - -remove_chunk_rotate_grate( chunk ) -{ - if ( isDefined( chunk.script_parameters ) && chunk.script_parameters == "grate" ) - { - chunk vibrate( vectorScale( ( -1, 0, 0 ), 270 ), 0,2, 0,4, 0,4 ); - return; - } -} - -zombie_boardtear_audio_offset( chunk ) -{ - if ( isDefined( chunk.material ) && !isDefined( chunk.already_broken ) ) - { - chunk.already_broken = 0; - } - if ( isDefined( chunk.material ) && chunk.material == "glass" && chunk.already_broken == 0 ) - { - chunk playsound( "zmb_break_glass_barrier" ); - wait randomfloatrange( 0,3, 0,6 ); - chunk playsound( "zmb_break_glass_barrier" ); - chunk.already_broken = 1; - } - else - { - if ( isDefined( chunk.material ) && chunk.material == "metal" && chunk.already_broken == 0 ) - { - chunk playsound( "grab_metal_bar" ); - wait randomfloatrange( 0,3, 0,6 ); - chunk playsound( "break_metal_bar" ); - chunk.already_broken = 1; - return; - } - else - { - if ( isDefined( chunk.material ) && chunk.material == "rock" ) - { - if ( isDefined( level.use_clientside_rock_tearin_fx ) && !level.use_clientside_rock_tearin_fx ) - { - chunk playsound( "zmb_break_rock_barrier" ); - wait randomfloatrange( 0,3, 0,6 ); - chunk playsound( "zmb_break_rock_barrier" ); - } - chunk.already_broken = 1; - return; - } - else - { - if ( isDefined( chunk.material ) && chunk.material == "metal_vent" ) - { - if ( isDefined( level.use_clientside_board_fx ) && !level.use_clientside_board_fx ) - { - chunk playsound( "evt_vent_slat_remove" ); - } - return; - } - else - { - if ( isDefined( level.use_clientside_board_fx ) && !level.use_clientside_board_fx ) - { - chunk play_sound_on_ent( "break_barrier_piece" ); - wait randomfloatrange( 0,3, 0,6 ); - chunk play_sound_on_ent( "break_barrier_piece" ); - } - chunk.already_broken = 1; - } - } - } - } -} - -zombie_bartear_audio_offset( chunk ) -{ - chunk play_sound_on_ent( "grab_metal_bar" ); - wait randomfloatrange( 0,3, 0,6 ); - chunk play_sound_on_ent( "break_metal_bar" ); - wait randomfloatrange( 1, 1,3 ); - chunk play_sound_on_ent( "drop_metal_bar" ); -} - -ensure_chunk_is_back_to_origin( chunk ) -{ - if ( chunk.origin != chunk.og_origin ) - { - chunk notsolid(); - chunk waittill( "movedone" ); - } -} - -replace_chunk( barrier, chunk, perk, upgrade, via_powerup ) -{ - if ( !isDefined( barrier.zbarrier ) ) - { - chunk update_states( "mid_repair" ); -/# - assert( isDefined( chunk.og_origin ) ); -#/ -/# - assert( isDefined( chunk.og_angles ) ); -#/ - sound = "rebuild_barrier_hover"; - if ( isDefined( chunk.script_presound ) ) - { - sound = chunk.script_presound; - } - } - has_perk = 0; - if ( isDefined( perk ) ) - { - has_perk = 1; - } - if ( !isDefined( via_powerup ) && isDefined( sound ) ) - { - play_sound_at_pos( sound, chunk.origin ); - } - if ( upgrade ) - { - barrier.zbarrier zbarrierpieceuseupgradedmodel( chunk ); - barrier.zbarrier.chunk_health[ chunk ] = barrier.zbarrier getupgradedpiecenumlives( chunk ); - } - else - { - barrier.zbarrier zbarrierpieceusedefaultmodel( chunk ); - barrier.zbarrier.chunk_health[ chunk ] = 0; - } - scalar = 1; - if ( has_perk ) - { - if ( perk == "speciality_fastreload" ) - { - scalar = 0,31; - } - else - { - if ( perk == "speciality_fastreload_upgrade" ) - { - scalar = 0,2112; - } - } - } - barrier.zbarrier showzbarrierpiece( chunk ); - barrier.zbarrier setzbarrierpiecestate( chunk, "closing", scalar ); - waitduration = barrier.zbarrier getzbarrierpieceanimlengthforstate( chunk, "closing", scalar ); - wait waitduration; -} - -open_all_zbarriers() -{ - _a2606 = level.exterior_goals; - _k2606 = getFirstArrayKey( _a2606 ); - while ( isDefined( _k2606 ) ) - { - barrier = _a2606[ _k2606 ]; - while ( isDefined( barrier.zbarrier ) ) - { - x = 0; - while ( x < barrier.zbarrier getnumzbarrierpieces() ) - { - barrier.zbarrier setzbarrierpiecestate( x, "opening" ); - x++; - } - } - if ( isDefined( barrier.clip ) ) - { - barrier.clip disable_trigger(); - barrier.clip connectpaths(); - } - else - { - blocker_connect_paths( barrier.neg_start, barrier.neg_end ); - } - _k2606 = getNextArrayKey( _a2606, _k2606 ); - } -} - -zombie_boardtear_audio_plus_fx_offset_repair_horizontal( chunk ) -{ - if ( isDefined( chunk.material ) && chunk.material == "rock" ) - { - if ( isDefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) - { - chunk clearclientflag( level._zombie_scriptmover_flag_rock_fx ); - } - else - { - earthquake( randomfloatrange( 0,3, 0,4 ), randomfloatrange( 0,2, 0,4 ), chunk.origin, 150 ); - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - wait randomfloatrange( 0,3, 0,6 ); - chunk play_sound_on_ent( "break_barrier_piece" ); - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - } - } - else - { - if ( isDefined( level.use_clientside_board_fx ) && level.use_clientside_board_fx ) - { - chunk clearclientflag( level._zombie_scriptmover_flag_board_horizontal_fx ); - return; - } - else - { - earthquake( randomfloatrange( 0,3, 0,4 ), randomfloatrange( 0,2, 0,4 ), chunk.origin, 150 ); - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - wait randomfloatrange( 0,3, 0,6 ); - chunk play_sound_on_ent( "break_barrier_piece" ); - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - } - } -} - -zombie_boardtear_audio_plus_fx_offset_repair_verticle( chunk ) -{ - if ( isDefined( chunk.material ) && chunk.material == "rock" ) - { - if ( isDefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) - { - chunk clearclientflag( level._zombie_scriptmover_flag_rock_fx ); - } - else - { - earthquake( randomfloatrange( 0,3, 0,4 ), randomfloatrange( 0,2, 0,4 ), chunk.origin, 150 ); - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - wait randomfloatrange( 0,3, 0,6 ); - chunk play_sound_on_ent( "break_barrier_piece" ); - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - } - } - else - { - if ( isDefined( level.use_clientside_board_fx ) && level.use_clientside_board_fx ) - { - chunk clearclientflag( level._zombie_scriptmover_flag_board_vertical_fx ); - return; - } - else - { - earthquake( randomfloatrange( 0,3, 0,4 ), randomfloatrange( 0,2, 0,4 ), chunk.origin, 150 ); - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - wait randomfloatrange( 0,3, 0,6 ); - chunk play_sound_on_ent( "break_barrier_piece" ); - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - } - } -} - -zombie_gratetear_audio_plus_fx_offset_repair_horizontal( chunk ) -{ - earthquake( randomfloatrange( 0,3, 0,4 ), randomfloatrange( 0,2, 0,4 ), chunk.origin, 150 ); - chunk play_sound_on_ent( "bar_rebuild_slam" ); - switch( randomint( 9 ) ) - { - case 0: - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - wait randomfloatrange( 0, 0,3 ); - playfx( level._effect[ "fx_zombie_bar_break_lite" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - break; - case 1: - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - wait randomfloatrange( 0, 0,3 ); - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - break; - case 2: - playfx( level._effect[ "fx_zombie_bar_break_lite" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - wait randomfloatrange( 0, 0,3 ); - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - break; - case 3: - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - wait randomfloatrange( 0, 0,3 ); - playfx( level._effect[ "fx_zombie_bar_break_lite" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - break; - case 4: - playfx( level._effect[ "fx_zombie_bar_break_lite" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - wait randomfloatrange( 0, 0,3 ); - playfx( level._effect[ "fx_zombie_bar_break_lite" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - break; - case 5: - playfx( level._effect[ "fx_zombie_bar_break_lite" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - break; - case 6: - playfx( level._effect[ "fx_zombie_bar_break_lite" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - break; - case 7: - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - break; - case 8: - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin + vectorScale( ( -1, 0, 0 ), 30 ) ); - break; - } -} - -zombie_bartear_audio_plus_fx_offset_repair_horizontal( chunk ) -{ - earthquake( randomfloatrange( 0,3, 0,4 ), randomfloatrange( 0,2, 0,4 ), chunk.origin, 150 ); - chunk play_sound_on_ent( "bar_rebuild_slam" ); - switch( randomint( 9 ) ) - { - case 0: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_left" ); - wait randomfloatrange( 0, 0,3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_right" ); - break; - case 1: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_left" ); - wait randomfloatrange( 0, 0,3 ); - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_right" ); - break; - case 2: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_left" ); - wait randomfloatrange( 0, 0,3 ); - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_right" ); - break; - case 3: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_left" ); - wait randomfloatrange( 0, 0,3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_right" ); - break; - case 4: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_left" ); - wait randomfloatrange( 0, 0,3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_right" ); - break; - case 5: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_left" ); - break; - case 6: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_right" ); - break; - case 7: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_left" ); - break; - case 8: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_right" ); - break; - } -} - -zombie_bartear_audio_plus_fx_offset_repair_verticle( chunk ) -{ - earthquake( randomfloatrange( 0,3, 0,4 ), randomfloatrange( 0,2, 0,4 ), chunk.origin, 150 ); - chunk play_sound_on_ent( "bar_rebuild_slam" ); - switch( randomint( 9 ) ) - { - case 0: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_top" ); - wait randomfloatrange( 0, 0,3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_bottom" ); - break; - case 1: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_top" ); - wait randomfloatrange( 0, 0,3 ); - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_bottom" ); - break; - case 2: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_top" ); - wait randomfloatrange( 0, 0,3 ); - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_bottom" ); - break; - case 3: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_top" ); - wait randomfloatrange( 0, 0,3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_bottom" ); - break; - case 4: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_top" ); - wait randomfloatrange( 0, 0,3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_bottom" ); - break; - case 5: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_top" ); - break; - case 6: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_bottom" ); - break; - case 7: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_top" ); - break; - case 8: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_bottom" ); - break; - } -} - -add_new_zombie_spawners() -{ - if ( isDefined( self.target ) ) - { - self.possible_spawners = getentarray( self.target, "targetname" ); - } - if ( isDefined( self.script_string ) ) - { - spawners = getentarray( self.script_string, "targetname" ); - self.possible_spawners = arraycombine( self.possible_spawners, spawners, 1, 0 ); - } - if ( !isDefined( self.possible_spawners ) ) - { - return; - } - zombies_to_add = self.possible_spawners; - i = 0; - while ( i < self.possible_spawners.size ) - { - self.possible_spawners[ i ].is_enabled = 1; - add_spawner( self.possible_spawners[ i ] ); - i++; - } -} - -flag_blocker() -{ - if ( !isDefined( self.script_flag_wait ) ) - { -/# - assertmsg( "Flag Blocker at " + self.origin + " does not have a script_flag_wait key value pair" ); -#/ - return; - } - if ( !isDefined( level.flag[ self.script_flag_wait ] ) ) - { - flag_init( self.script_flag_wait ); - } - type = "connectpaths"; - if ( isDefined( self.script_noteworthy ) ) - { - type = self.script_noteworthy; - } - flag_wait( self.script_flag_wait ); - self script_delay(); - if ( type == "connectpaths" ) - { - self connectpaths(); - self disable_trigger(); - return; - } - if ( type == "disconnectpaths" ) - { - self disconnectpaths(); - self disable_trigger(); - return; - } -/# - assertmsg( "flag blocker at " + self.origin + ", the type "" + type + "" is not recognized" ); -#/ -} - -update_states( states ) -{ -/# - assert( isDefined( states ) ); -#/ - self.state = states; -} - -quantum_bomb_open_nearest_door_validation( position ) -{ - range_squared = 32400; - zombie_doors = getentarray( "zombie_door", "targetname" ); - i = 0; - while ( i < zombie_doors.size ) - { - if ( distancesquared( zombie_doors[ i ].origin, position ) < range_squared ) - { - return 1; - } - i++; - } - zombie_airlock_doors = getentarray( "zombie_airlock_buy", "targetname" ); - i = 0; - while ( i < zombie_airlock_doors.size ) - { - if ( distancesquared( zombie_airlock_doors[ i ].origin, position ) < range_squared ) - { - return 1; - } - i++; - } - zombie_debris = getentarray( "zombie_debris", "targetname" ); - i = 0; - while ( i < zombie_debris.size ) - { - if ( distancesquared( zombie_debris[ i ].origin, position ) < range_squared ) - { - return 1; - } - i++; - } - return 0; -} - -quantum_bomb_open_nearest_door_result( position ) -{ - range_squared = 32400; - zombie_doors = getentarray( "zombie_door", "targetname" ); - i = 0; - while ( i < zombie_doors.size ) - { - if ( distancesquared( zombie_doors[ i ].origin, position ) < range_squared ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "quant_good" ); - zombie_doors[ i ] notify( "trigger" ); - [[ level.quantum_bomb_play_area_effect_func ]]( position ); - return; - } - i++; - } - zombie_airlock_doors = getentarray( "zombie_airlock_buy", "targetname" ); - i = 0; - while ( i < zombie_airlock_doors.size ) - { - if ( distancesquared( zombie_airlock_doors[ i ].origin, position ) < range_squared ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "quant_good" ); - zombie_airlock_doors[ i ] notify( "trigger" ); - [[ level.quantum_bomb_play_area_effect_func ]]( position ); - return; - } - i++; - } - zombie_debris = getentarray( "zombie_debris", "targetname" ); - i = 0; - while ( i < zombie_debris.size ) - { - if ( distancesquared( zombie_debris[ i ].origin, position ) < range_squared ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "quant_good" ); - zombie_debris[ i ] notify( "trigger" ); - [[ level.quantum_bomb_play_area_effect_func ]]( position ); - return; - } - i++; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_bot.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_bot.gsc deleted file mode 100644 index bcef80d..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_bot.gsc +++ /dev/null @@ -1,10 +0,0 @@ -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ -/# - println( "ZM >> Zombiemode Server Scripts Init (_zm_bot.gsc)" ); -#/ -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_buildables.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_buildables.gsc deleted file mode 100644 index 8553f6b..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_buildables.gsc +++ /dev/null @@ -1,2565 +0,0 @@ -#include maps/mp/_demo; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - precachestring( &"ZOMBIE_BUILDING" ); - precachestring( &"ZOMBIE_BUILD_PIECE_MISSING" ); - precachestring( &"ZOMBIE_BUILD_PIECE_GRAB" ); - precacheitem( "zombie_builder_zm" ); - precacheitem( "buildable_piece_zm" ); - level.gameobjswapping = 1; - zombie_buildables_callbacks = []; - level.buildablepickups = []; - level.buildables_built = []; - level.buildable_stubs = []; - level.buildable_piece_count = 0; - level._effect[ "building_dust" ] = loadfx( "maps/zombie/fx_zmb_buildable_assemble_dust" ); - if ( isDefined( level.init_buildables ) ) - { - [[ level.init_buildables ]](); - } - onplayerconnect_callback( ::buildables_watch_swipes ); -} - -anystub_update_prompt( player ) -{ - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || player in_revive_trigger() ) - { - self.hint_string = ""; - return 0; - } - if ( player isthrowinggrenade() ) - { - self.hint_string = ""; - return 0; - } - if ( isDefined( player.is_drinking ) && player.is_drinking > 0 ) - { - self.hint_string = ""; - return 0; - } - if ( isDefined( player.screecher_weapon ) ) - { - self.hint_string = ""; - return 0; - } - return 1; -} - -anystub_get_unitrigger_origin() -{ - if ( isDefined( self.origin_parent ) ) - { - return self.origin_parent.origin; - } - return self.origin; -} - -anystub_on_spawn_trigger( trigger ) -{ - if ( isDefined( self.link_parent ) ) - { - trigger enablelinkto(); - trigger linkto( self.link_parent ); - trigger setmovingplatformenabled( 1 ); - } -} - -buildables_watch_swipes() -{ - self endon( "disconnect" ); - self notify( "buildables_watch_swipes" ); - self endon( "buildables_watch_swipes" ); - while ( 1 ) - { - self waittill( "melee_swipe", zombie ); - while ( distancesquared( zombie.origin, self.origin ) > ( zombie.meleeattackdist * zombie.meleeattackdist ) ) - { - continue; - } - trigger = level._unitriggers.trigger_pool[ self getentitynumber() ]; - if ( isDefined( trigger ) && isDefined( trigger.stub.piece ) ) - { - piece = trigger.stub.piece; - if ( !isDefined( piece.damage ) ) - { - piece.damage = 0; - } - piece.damage++; - if ( piece.damage > 12 ) - { - thread maps/mp/zombies/_zm_equipment::equipment_disappear_fx( trigger.stub maps/mp/zombies/_zm_unitrigger::unitrigger_origin() ); - piece maps/mp/zombies/_zm_buildables::piece_unspawn(); - self maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 ); - if ( isalive( self ) ) - { - self playlocalsound( level.zmb_laugh_alias ); - } - } - } - } -} - -explosiondamage( damage, pos ) -{ -/# - println( "ZM BUILDABLE Explode do " + damage + " damage to " + self.name + "\n" ); -#/ - self dodamage( damage, pos ); -} - -add_zombie_buildable( buildable_name, hint, building, bought ) -{ - if ( !isDefined( level.zombie_include_buildables ) ) - { - level.zombie_include_buildables = []; - } - if ( isDefined( level.zombie_include_buildables ) && !isDefined( level.zombie_include_buildables[ buildable_name ] ) ) - { - return; - } - precachestring( hint ); - precachestring( building ); - if ( isDefined( bought ) ) - { - precachestring( bought ); - } - buildable_struct = level.zombie_include_buildables[ buildable_name ]; - if ( !isDefined( level.zombie_buildables ) ) - { - level.zombie_buildables = []; - } - buildable_struct.hint = hint; - buildable_struct.building = building; - buildable_struct.bought = bought; -/# - println( "ZM >> Looking for buildable - " + buildable_struct.name ); -#/ - level.zombie_buildables[ buildable_struct.name ] = buildable_struct; - if ( !level.createfx_enabled ) - { - if ( level.zombie_buildables.size == 1 ) - { - bits = getminbitcountfornum( level.buildable_piece_count ); - registerclientfield( "toplayer", "buildable", 1, bits, "int" ); - } - } -} - -include_zombie_buildable( buiildable_struct ) -{ - if ( !isDefined( level.zombie_include_buildables ) ) - { - level.zombie_include_buildables = []; - } -/# - println( "ZM >> Including buildable - " + buiildable_struct.name ); -#/ - level.zombie_include_buildables[ buiildable_struct.name ] = buiildable_struct; -} - -generate_zombie_buildable_piece( buildablename, modelname, radius, height, drop_offset, hud_icon, onpickup, ondrop, use_spawn_num, part_name, can_reuse, client_field_state ) -{ - precachemodel( modelname ); - if ( isDefined( hud_icon ) ) - { - precacheshader( hud_icon ); - } - piece = spawnstruct(); - buildable_pieces = []; - buildable_pieces_structs = getstructarray( ( buildablename + "_" ) + modelname, "targetname" ); -/# - if ( buildable_pieces_structs.size < 1 ) - { - println( "ERROR: Missing buildable piece <" + buildablename + "> <" + modelname + ">\n" ); -#/ - } - _a204 = buildable_pieces_structs; - index = getFirstArrayKey( _a204 ); - while ( isDefined( index ) ) - { - struct = _a204[ index ]; - buildable_pieces[ index ] = struct; - buildable_pieces[ index ].hasspawned = 0; - index = getNextArrayKey( _a204, index ); - } - piece.spawns = buildable_pieces; - piece.buildablename = buildablename; - piece.modelname = modelname; - piece.hud_icon = hud_icon; - piece.radius = radius; - piece.height = height; - piece.part_name = part_name; - piece.can_reuse = can_reuse; - piece.drop_offset = drop_offset; - piece.max_instances = 256; - piece.onpickup = onpickup; - piece.ondrop = ondrop; - piece.use_spawn_num = use_spawn_num; - piece.client_field_state = client_field_state; - return piece; -} - -manage_multiple_pieces( max_instances ) -{ - self.max_instances = max_instances; - self.managing_pieces = 1; - self.piece_allocated = []; -} - -combine_buildable_pieces( piece1, piece2, piece3 ) -{ - spawns1 = piece1.spawns; - spawns2 = piece2.spawns; - spawns = arraycombine( spawns1, spawns2, 1, 0 ); - if ( isDefined( piece3 ) ) - { - spawns3 = piece3.spawns; - spawns = arraycombine( spawns, spawns3, 1, 0 ); - spawns = array_randomize( spawns ); - piece3.spawns = spawns; - } - else - { - spawns = array_randomize( spawns ); - } - piece1.spawns = spawns; - piece2.spawns = spawns; -} - -add_buildable_piece( piece, part_name, can_reuse ) -{ - if ( !isDefined( self.buildablepieces ) ) - { - self.buildablepieces = []; - } - if ( isDefined( part_name ) ) - { - piece.part_name = part_name; - } - if ( isDefined( can_reuse ) ) - { - piece.can_reuse = can_reuse; - } - self.buildablepieces[ self.buildablepieces.size ] = piece; -} - -create_zombie_buildable_piece( modelname, radius, height, hud_icon ) -{ - piece = generate_zombie_buildable_piece( self.name, modelname, radius, height, hud_icon ); - self add_buildable_piece( piece ); -} - -onplayerlaststand() -{ - piece = self.current_buildable_piece; - if ( isDefined( piece ) ) - { - return_to_start_pos = 0; - if ( isDefined( level.safe_place_for_buildable_piece ) ) - { - if ( !( self [[ level.safe_place_for_buildable_piece ]]( piece ) ) ) - { - return_to_start_pos = 1; - } - } - if ( return_to_start_pos ) - { - piece piece_spawn_at(); - } - else - { - piece piece_spawn_at( self.origin + vectorScale( ( 0, 0, 1 ), 5 ), self.angles ); - } - if ( isDefined( piece.ondrop ) ) - { - piece [[ piece.ondrop ]]( self ); - } - self setclientfieldtoplayer( "buildable", 0 ); - } - self.current_buildable_piece = undefined; - self notify( "piece_released" ); -} - -piecestub_get_unitrigger_origin() -{ - if ( isDefined( self.origin_parent ) ) - { - return self.origin_parent.origin + vectorScale( ( 0, 0, 1 ), 12 ); - } - return self.origin; -} - -generate_piece_unitrigger( classname, origin, angles, flags, radius, script_height, moving ) -{ - if ( !isDefined( radius ) ) - { - radius = 64; - } - if ( !isDefined( script_height ) ) - { - script_height = 64; - } - script_width = script_height; - if ( !isDefined( script_width ) ) - { - script_width = 64; - } - script_length = script_height; - if ( !isDefined( script_length ) ) - { - script_length = 64; - } - unitrigger_stub = spawnstruct(); - unitrigger_stub.origin = origin; - if ( isDefined( script_length ) ) - { - unitrigger_stub.script_length = script_length; - } - else - { - unitrigger_stub.script_length = 13,5; - } - if ( isDefined( script_width ) ) - { - unitrigger_stub.script_width = script_width; - } - else - { - unitrigger_stub.script_width = 27,5; - } - if ( isDefined( script_height ) ) - { - unitrigger_stub.script_height = script_height; - } - else - { - unitrigger_stub.script_height = 24; - } - unitrigger_stub.radius = radius; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - unitrigger_stub.hint_string = &"ZOMBIE_BUILD_PIECE_GRAB"; - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.require_look_at = 0; - switch( classname ) - { - case "trigger_radius": - unitrigger_stub.script_unitrigger_type = "unitrigger_radius"; - break; - case "trigger_radius_use": - unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - break; - case "trigger_box": - unitrigger_stub.script_unitrigger_type = "unitrigger_box"; - break; - case "trigger_box_use": - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - break; - } - unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - unitrigger_stub.prompt_and_visibility_func = ::piecetrigger_update_prompt; - unitrigger_stub.originfunc = ::piecestub_get_unitrigger_origin; - unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; - if ( isDefined( moving ) && moving ) - { - maps/mp/zombies/_zm_unitrigger::register_unitrigger( unitrigger_stub, ::piece_unitrigger_think ); - } - else - { - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::piece_unitrigger_think ); - } - return unitrigger_stub; -} - -piecetrigger_update_prompt( player ) -{ - can_use = self.stub piecestub_update_prompt( player ); - self setinvisibletoplayer( player, !can_use ); - self sethintstring( self.stub.hint_string ); - return can_use; -} - -piecestub_update_prompt( player ) -{ - if ( !self anystub_update_prompt( player ) ) - { - return 0; - } - if ( isDefined( player.current_buildable_piece ) ) - { - spiece = self.piece; - cpiece = player.current_buildable_piece; - if ( spiece.modelname == cpiece.modelname && spiece.buildablename == cpiece.buildablename ) - { - self.hint_string = ""; - return 0; - } - self.hint_string = &"ZOMBIE_BUILD_PIECE_SWITCH"; - } - else - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_GRAB"; - } - return 1; -} - -piece_unitrigger_think() -{ - self endon( "kill_trigger" ); - while ( 1 ) - { - self waittill( "trigger", player ); - while ( player != self.parent_player ) - { - continue; - } - while ( isDefined( player.screecher_weapon ) ) - { - continue; - } - while ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - } - status = player player_can_take_piece( self.stub.piece ); - if ( !status ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - continue; - } - else - { - player thread player_take_piece( self.stub.piece ); - } - } -} - -player_can_take_piece( piece ) -{ - if ( !isDefined( piece ) ) - { - return 0; - } - return 1; -} - -dbline( from, to ) -{ -/# - time = 20; - while ( time > 0 ) - { - line( from, to, ( 0, 0, 1 ), 0, 1 ); - time -= 0,05; - wait 0,05; -#/ - } -} - -player_throw_piece( piece, origin, dir, return_to_spawn, return_time, endangles ) -{ -/# - assert( isDefined( piece ) ); -#/ - if ( isDefined( piece ) ) - { -/# - thread dbline( origin, origin + dir ); -#/ - pass = 0; - done = 0; - altmodel = undefined; - while ( pass < 2 && !done ) - { - grenade = self magicgrenadetype( "buildable_piece_zm", origin, dir, 30000 ); - grenade thread watch_hit_players(); - grenade ghost(); - if ( !isDefined( altmodel ) ) - { - altmodel = spawn( "script_model", grenade.origin ); - altmodel setmodel( piece.modelname ); - } - altmodel.origin = grenade.angles; - altmodel.angles = grenade.angles; - altmodel linkto( grenade, "", ( 0, 0, 1 ), ( 0, 0, 1 ) ); - grenade.altmodel = altmodel; - grenade waittill( "stationary" ); - grenade_origin = grenade.origin; - grenade_angles = grenade.angles; - landed_on = grenade getgroundent(); - grenade delete(); - if ( isDefined( landed_on ) && landed_on == level ) - { - done = 1; - continue; - } - else - { - origin = grenade_origin; - dir = ( ( dir[ 0 ] * -1 ) / 10, ( dir[ 1 ] * -1 ) / 10, -1 ); - pass++; - } - } - if ( !isDefined( endangles ) ) - { - endangles = grenade_angles; - } - piece piece_spawn_at( grenade_origin, endangles ); - if ( isDefined( altmodel ) ) - { - altmodel delete(); - } - if ( isDefined( piece.ondrop ) ) - { - piece [[ piece.ondrop ]]( self ); - } - if ( isDefined( return_to_spawn ) && return_to_spawn ) - { - piece piece_wait_and_return( return_time ); - } - } -} - -watch_hit_players() -{ - self endon( "death" ); - self endon( "stationary" ); - while ( isDefined( self ) ) - { - self waittill( "grenade_bounce", pos, normal, ent ); - if ( isplayer( ent ) ) - { - ent explosiondamage( 25, pos ); - } - } -} - -piece_wait_and_return( return_time ) -{ - self endon( "pickup" ); - wait 0,15; - if ( isDefined( level.exploding_jetgun_fx ) ) - { - playfxontag( level.exploding_jetgun_fx, self.model, "tag_origin" ); - } - else - { - playfxontag( level._effect[ "powerup_on" ], self.model, "tag_origin" ); - } - wait ( return_time - 6 ); - self piece_hide(); - wait 1; - self piece_show(); - wait 1; - self piece_hide(); - wait 1; - self piece_show(); - wait 1; - self piece_hide(); - wait 1; - self piece_show(); - wait 1; - self notify( "respawn" ); - self piece_unspawn(); - self piece_spawn_at(); -} - -player_return_piece_to_original_spawn() -{ - self notify( "piece_released" ); - piece = self.current_buildable_piece; - self.current_buildable_piece = undefined; - if ( isDefined( piece ) ) - { - piece piece_spawn_at(); - self setclientfieldtoplayer( "buildable", 0 ); - } -} - -player_drop_piece_on_death() -{ - self notify( "piece_released" ); - self endon( "piece_released" ); - origin = self.origin; - angles = self.angles; - piece = self.current_buildable_piece; - self waittill( "death_or_disconnect" ); - piece piece_spawn_at( origin, angles ); - if ( isDefined( self ) ) - { - self setclientfieldtoplayer( "buildable", 0 ); - } -} - -player_drop_piece( piece ) -{ - if ( !isDefined( piece ) ) - { - piece = self.current_buildable_piece; - } - if ( isDefined( piece ) ) - { - piece.damage = 0; - piece piece_spawn_at( self.origin, self.angles ); - self setclientfieldtoplayer( "buildable", 0 ); - if ( isDefined( piece.ondrop ) ) - { - piece [[ piece.ondrop ]]( self ); - } - } - self.current_buildable_piece = undefined; - self notify( "piece_released" ); -} - -player_take_piece( piece ) -{ - damage = piece.damage; - if ( isDefined( self.current_buildable_piece ) ) - { - other_piece = self.current_buildable_piece; - self player_drop_piece( self.current_buildable_piece ); - other_piece.damage = damage; - self do_player_general_vox( "general", "build_swap" ); - } - if ( isDefined( piece.onpickup ) ) - { - piece [[ piece.onpickup ]]( self ); - } - if ( isDefined( piece.client_field_state ) ) - { - self setclientfieldtoplayer( "buildable", piece.client_field_state ); - } - piece piece_unspawn(); - piece notify( "pickup" ); - self.current_buildable_piece = piece; - self thread player_drop_piece_on_death(); - self track_buildable_piece_pickedup( piece ); -} - -player_destroy_piece( piece ) -{ - if ( !isDefined( piece ) ) - { - piece = self.current_buildable_piece; - } - if ( isDefined( piece ) ) - { - self setclientfieldtoplayer( "buildable", 0 ); - } - self.current_buildable_piece = undefined; - self notify( "piece_released" ); -} - -claim_location( location ) -{ - if ( !isDefined( level.buildable_claimed_locations ) ) - { - level.buildable_claimed_locations = []; - } - if ( !isDefined( level.buildable_claimed_locations[ location ] ) ) - { - level.buildable_claimed_locations[ location ] = 1; - return 1; - } - return 0; -} - -is_point_in_build_trigger( point ) -{ - candidate_list = []; - _a726 = level.zones; - _k726 = getFirstArrayKey( _a726 ); - while ( isDefined( _k726 ) ) - { - zone = _a726[ _k726 ]; - if ( isDefined( zone.unitrigger_stubs ) ) - { - candidate_list = arraycombine( candidate_list, zone.unitrigger_stubs, 1, 0 ); - } - _k726 = getNextArrayKey( _a726, _k726 ); - } - valid_range = 128; - closest = maps/mp/zombies/_zm_unitrigger::get_closest_unitriggers( point, candidate_list, valid_range ); - index = 0; - while ( index < closest.size ) - { - if ( isDefined( closest[ index ].registered ) && closest[ index ].registered && isDefined( closest[ index ].piece ) ) - { - return 1; - } - index++; - } - return 0; -} - -piece_allocate_spawn( piecespawn ) -{ - self.current_spawn = 0; - self.managed_spawn = 1; - self.piecespawn = piecespawn; - if ( self.spawns.size >= 1 && self.spawns.size > 1 ) - { - any_good = 0; - any_okay = 0; - totalweight = 0; - spawnweights = []; - i = 0; - while ( i < self.spawns.size ) - { - if ( isDefined( piecespawn.piece_allocated[ i ] ) && piecespawn.piece_allocated[ i ] ) - { - spawnweights[ i ] = 0; - } - else - { - if ( is_point_in_build_trigger( self.spawns[ i ].origin ) ) - { - any_okay = 1; - spawnweights[ i ] = 0,01; - break; - } - else - { - any_good = 1; - spawnweights[ i ] = 1; - } - } - totalweight += spawnweights[ i ]; - i++; - } -/# - if ( !any_good ) - { - assert( any_okay, "There is nowhere to spawn this piece" ); - } -#/ - if ( any_good ) - { - totalweight = float( int( totalweight ) ); - } - r = randomfloat( totalweight ); - i = 0; - while ( i < self.spawns.size ) - { - if ( !any_good || spawnweights[ i ] >= 1 ) - { - r -= spawnweights[ i ]; - if ( r < 0 ) - { - self.current_spawn = i; - piecespawn.piece_allocated[ self.current_spawn ] = 1; - return; - } - } - i++; - } - self.current_spawn = randomint( self.spawns.size ); - piecespawn.piece_allocated[ self.current_spawn ] = 1; - } -} - -piece_deallocate_spawn() -{ - if ( isDefined( self.current_spawn ) ) - { - self.piecespawn.piece_allocated[ self.current_spawn ] = 0; - self.current_spawn = undefined; - } - self.start_origin = undefined; -} - -piece_pick_random_spawn() -{ - self.current_spawn = 0; - while ( self.spawns.size >= 1 && self.spawns.size > 1 ) - { - self.current_spawn = randomint( self.spawns.size ); - while ( isDefined( self.spawns[ self.current_spawn ].claim_location ) && !claim_location( self.spawns[ self.current_spawn ].claim_location ) ) - { - arrayremoveindex( self.spawns, self.current_spawn ); - if ( self.spawns.size < 1 ) - { - self.current_spawn = 0; -/# - println( "ERROR: All buildable spawn locations claimed" ); -#/ - return; - } - self.current_spawn = randomint( self.spawns.size ); - } - } -} - -piece_set_spawn( num ) -{ - self.current_spawn = 0; - if ( self.spawns.size >= 1 && self.spawns.size > 1 ) - { - self.current_spawn = int( min( num, self.spawns.size - 1 ) ); - } -} - -piece_spawn_in( piecespawn ) -{ - if ( self.spawns.size < 1 ) - { - return; - } - if ( isDefined( self.managed_spawn ) && self.managed_spawn ) - { - if ( !isDefined( self.current_spawn ) ) - { - self piece_allocate_spawn( self.piecespawn ); - } - } - if ( !isDefined( self.current_spawn ) ) - { - self.current_spawn = 0; - } - spawndef = self.spawns[ self.current_spawn ]; - self.unitrigger = generate_piece_unitrigger( "trigger_radius_use", spawndef.origin + vectorScale( ( 0, 0, 1 ), 12 ), spawndef.angles, 0, piecespawn.radius, piecespawn.height, 0 ); - self.unitrigger.piece = self; - self.radius = piecespawn.radius; - self.height = piecespawn.height; - self.buildablename = piecespawn.buildablename; - self.modelname = piecespawn.modelname; - self.hud_icon = piecespawn.hud_icon; - self.part_name = piecespawn.part_name; - self.drop_offset = piecespawn.drop_offset; - self.start_origin = spawndef.origin; - self.start_angles = spawndef.angles; - self.client_field_state = piecespawn.client_field_state; - self.model = spawn( "script_model", self.start_origin ); - if ( isDefined( self.start_angles ) ) - { - self.model.angles = self.start_angles; - } - self.model setmodel( piecespawn.modelname ); - if ( isDefined( piecespawn.onspawn ) ) - { - self [[ piecespawn.onspawn ]](); - } - self.model ghostindemo(); - self.model.hud_icon = piecespawn.hud_icon; - self.piecespawn = piecespawn; - self.unitrigger.origin_parent = self.model; - self.building = undefined; -} - -piece_spawn_at_with_delay( origin, angles, delay ) -{ - wait delay; - piece_spawn_at( origin, angles ); -} - -piece_spawn_at( origin, angles ) -{ - if ( self.spawns.size < 1 ) - { - return; - } - if ( isDefined( self.managed_spawn ) && self.managed_spawn ) - { - if ( !isDefined( self.current_spawn ) && !isDefined( origin ) ) - { - self piece_allocate_spawn( self.piecespawn ); - spawndef = self.spawns[ self.current_spawn ]; - self.start_origin = spawndef.origin; - self.start_angles = spawndef.angles; - } - } - else - { - if ( !isDefined( self.current_spawn ) ) - { - self.current_spawn = 0; - } - } - unitrigger_offset = vectorScale( ( 0, 0, 1 ), 12 ); - if ( !isDefined( origin ) ) - { - origin = self.start_origin; - } - else - { - origin += ( 0, 0, self.drop_offset ); - unitrigger_offset -= ( 0, 0, self.drop_offset ); - } - if ( !isDefined( angles ) ) - { - angles = self.start_angles; - } -/# - if ( !isDefined( level.drop_offset ) ) - { - level.drop_offset = 0; - } - origin += ( 0, 0, level.drop_offset ); - unitrigger_offset -= ( 0, 0, level.drop_offset ); -#/ - self.model = spawn( "script_model", origin ); - if ( isDefined( angles ) ) - { - self.model.angles = angles; - } - self.model setmodel( self.modelname ); - if ( isDefined( level.equipment_safe_to_drop ) ) - { - if ( !( [[ level.equipment_safe_to_drop ]]( self.model ) ) ) - { - origin = self.start_origin; - angles = self.start_angles; - self.model.origin = origin; - self.model.angles = angles; - } - } - if ( isDefined( self.onspawn ) ) - { - self [[ self.onspawn ]](); - } - if ( isDefined( self.model.canmove ) ) - { - self.unitrigger = generate_piece_unitrigger( "trigger_radius_use", origin + unitrigger_offset, angles, 0, self.radius, self.height, self.model.canmove ); - } - self.unitrigger.piece = self; - self.model.hud_icon = self.hud_icon; - self.unitrigger.origin_parent = self.model; - self.building = undefined; -} - -piece_unspawn() -{ - if ( isDefined( self.managed_spawn ) && self.managed_spawn ) - { - self piece_deallocate_spawn(); - } - if ( isDefined( self.model ) ) - { - self.model delete(); - } - self.model = undefined; - if ( isDefined( self.unitrigger ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger ); - } - self.unitrigger = undefined; -} - -piece_hide() -{ - if ( isDefined( self.model ) ) - { - self.model ghost(); - } -} - -piece_show() -{ - if ( isDefined( self.model ) ) - { - self.model show(); - } -} - -generate_piece( buildable_piece_spawns ) -{ - piece = spawnstruct(); - piece.spawns = buildable_piece_spawns.spawns; - if ( isDefined( buildable_piece_spawns.managing_pieces ) && buildable_piece_spawns.managing_pieces ) - { - piece piece_allocate_spawn( buildable_piece_spawns ); - } - else - { - if ( isDefined( buildable_piece_spawns.use_spawn_num ) ) - { - piece piece_set_spawn( buildable_piece_spawns.use_spawn_num ); - } - else - { - piece piece_pick_random_spawn(); - } - } - piece piece_spawn_in( buildable_piece_spawns ); - if ( piece.spawns.size >= 1 ) - { - piece.hud_icon = buildable_piece_spawns.hud_icon; - } - if ( isDefined( buildable_piece_spawns.onpickup ) ) - { - piece.onpickup = buildable_piece_spawns.onpickup; - } - else - { - piece.onpickup = ::onpickuputs; - } - if ( isDefined( buildable_piece_spawns.ondrop ) ) - { - piece.ondrop = buildable_piece_spawns.ondrop; - } - else - { - piece.ondrop = ::ondroputs; - } - return piece; -} - -buildable_piece_unitriggers( buildable_name, origin ) -{ -/# - assert( isDefined( buildable_name ) ); -#/ -/# - assert( isDefined( level.zombie_buildables[ buildable_name ] ), "Called buildable_think() without including the buildable - " + buildable_name ); -#/ - buildable = level.zombie_buildables[ buildable_name ]; - if ( !isDefined( buildable.buildablepieces ) ) - { - buildable.buildablepieces = []; - } - flag_wait( "start_zombie_round_logic" ); - buildablezone = spawnstruct(); - buildablezone.buildable_name = buildable_name; - if ( !isDefined( buildablezone.pieces ) ) - { - buildablezone.pieces = []; - } - buildablepickups = []; - _a1064 = buildable.buildablepieces; - _k1064 = getFirstArrayKey( _a1064 ); - while ( isDefined( _k1064 ) ) - { - buildablepiece = _a1064[ _k1064 ]; - if ( !isDefined( buildablepiece.generated_instances ) ) - { - buildablepiece.generated_instances = 0; - } - if ( isDefined( buildablepiece.generated_piece ) && isDefined( buildablepiece.can_reuse ) && buildablepiece.can_reuse ) - { - piece = buildablepiece.generated_piece; - } - else - { - if ( buildablepiece.generated_instances >= buildablepiece.max_instances ) - { - piece = buildablepiece.generated_piece; - break; - } - else - { - piece = generate_piece( buildablepiece ); - buildablepiece.generated_piece = piece; - buildablepiece.generated_instances++; - } - } - buildablezone.pieces[ buildablezone.pieces.size ] = piece; - _k1064 = getNextArrayKey( _a1064, _k1064 ); - } - buildablezone.stub = self; - return buildablezone; -} - -hide_buildable_table_model( trigger_targetname ) -{ - trig = getent( trigger_targetname, "targetname" ); - if ( !isDefined( trig ) ) - { - return; - } - if ( isDefined( trig.target ) ) - { - model = getent( trig.target, "targetname" ); - if ( isDefined( model ) ) - { - model hide(); - model notsolid(); - } - } -} - -setup_unitrigger_buildable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) -{ - trig = getent( trigger_targetname, "targetname" ); - if ( !isDefined( trig ) ) - { - return; - } - return setup_unitrigger_buildable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); -} - -setup_unitrigger_buildable_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) -{ - triggers = getentarray( trigger_targetname, "targetname" ); - stubs = []; - _a1124 = triggers; - _k1124 = getFirstArrayKey( _a1124 ); - while ( isDefined( _k1124 ) ) - { - trig = _a1124[ _k1124 ]; - stubs[ stubs.size ] = setup_unitrigger_buildable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); - _k1124 = getNextArrayKey( _a1124, _k1124 ); - } - return stubs; -} - -setup_unitrigger_buildable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) -{ - if ( !isDefined( trig ) ) - { - return; - } - unitrigger_stub = spawnstruct(); - unitrigger_stub.buildablestruct = level.zombie_include_buildables[ equipname ]; - angles = trig.script_angles; - if ( !isDefined( angles ) ) - { - angles = ( 0, 0, 1 ); - } - unitrigger_stub.origin = trig.origin + ( anglesToRight( angles ) * -6 ); - unitrigger_stub.angles = trig.angles; - if ( isDefined( trig.script_angles ) ) - { - unitrigger_stub.angles = trig.script_angles; - } - unitrigger_stub.equipname = equipname; - unitrigger_stub.weaponname = weaponname; - unitrigger_stub.trigger_hintstring = trigger_hintstring; - unitrigger_stub.delete_trigger = delete_trigger; - unitrigger_stub.built = 0; - unitrigger_stub.persistent = persistent; - unitrigger_stub.usetime = int( 3000 ); - unitrigger_stub.onbeginuse = ::onbeginuseuts; - unitrigger_stub.onenduse = ::onenduseuts; - unitrigger_stub.onuse = ::onuseplantobjectuts; - unitrigger_stub.oncantuse = ::oncantuseuts; - if ( isDefined( trig.script_length ) ) - { - unitrigger_stub.script_length = trig.script_length; - } - else - { - unitrigger_stub.script_length = 32; - } - if ( isDefined( trig.script_width ) ) - { - unitrigger_stub.script_width = trig.script_width; - } - else - { - unitrigger_stub.script_width = 100; - } - if ( isDefined( trig.script_height ) ) - { - unitrigger_stub.script_height = trig.script_height; - } - else - { - unitrigger_stub.script_height = 64; - } - unitrigger_stub.target = trig.target; - unitrigger_stub.targetname = trig.targetname; - unitrigger_stub.script_noteworthy = trig.script_noteworthy; - unitrigger_stub.script_parameters = trig.script_parameters; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - if ( isDefined( level.zombie_buildables[ equipname ].hint ) ) - { - unitrigger_stub.hint_string = level.zombie_buildables[ equipname ].hint; - } - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.require_look_at = 1; - unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - unitrigger_stub.prompt_and_visibility_func = ::buildabletrigger_update_prompt; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::buildable_place_think ); - unitrigger_stub.piece_trigger = trig; - trig.trigger_stub = unitrigger_stub; - unitrigger_stub.zombie_weapon_upgrade = trig.zombie_weapon_upgrade; - if ( isDefined( unitrigger_stub.target ) ) - { - unitrigger_stub.model = getent( unitrigger_stub.target, "targetname" ); - if ( isDefined( unitrigger_stub.model ) ) - { - if ( isDefined( unitrigger_stub.zombie_weapon_upgrade ) ) - { - unitrigger_stub.model useweaponhidetags( unitrigger_stub.zombie_weapon_upgrade ); - } - unitrigger_stub.model hide(); - unitrigger_stub.model notsolid(); - } - } - unitrigger_stub.buildablezone = unitrigger_stub buildable_piece_unitriggers( equipname, unitrigger_stub.origin ); - if ( delete_trigger ) - { - trig delete(); - } - level.buildable_stubs[ level.buildable_stubs.size ] = unitrigger_stub; - return unitrigger_stub; -} - -buildable_has_piece( piece ) -{ - i = 0; - while ( i < self.pieces.size ) - { - if ( self.pieces[ i ].modelname == piece.modelname && self.pieces[ i ].buildablename == piece.buildablename ) - { - return 1; - } - i++; - } - return 0; -} - -buildable_set_piece_built( piece ) -{ - i = 0; - while ( i < self.pieces.size ) - { - if ( self.pieces[ i ].modelname == piece.modelname && self.pieces[ i ].buildablename == piece.buildablename ) - { - self.pieces[ i ].built = 1; - } - i++; - } -} - -buildable_set_piece_building( piece ) -{ - i = 0; - while ( i < self.pieces.size ) - { - if ( self.pieces[ i ].modelname == piece.modelname && self.pieces[ i ].buildablename == piece.buildablename ) - { - self.pieces[ i ] = piece; - self.pieces[ i ].building = 1; - } - i++; - } -} - -buildable_clear_piece_building( piece ) -{ - if ( isDefined( piece ) ) - { - piece.building = 0; - } -} - -buildable_is_piece_built( piece ) -{ - i = 0; - while ( i < self.pieces.size ) - { - if ( self.pieces[ i ].modelname == piece.modelname && self.pieces[ i ].buildablename == piece.buildablename ) - { - if ( isDefined( self.pieces[ i ].built ) ) - { - return self.pieces[ i ].built; - } - } - i++; - } - return 0; -} - -buildable_is_piece_building( piece ) -{ - i = 0; - while ( i < self.pieces.size ) - { - if ( self.pieces[ i ].modelname == piece.modelname && self.pieces[ i ].buildablename == piece.buildablename ) - { - if ( isDefined( self.pieces[ i ].building ) && self.pieces[ i ].building ) - { - return self.pieces[ i ] == piece; - } - } - i++; - } - return 0; -} - -buildable_is_piece_built_or_building( piece ) -{ - i = 0; - while ( i < self.pieces.size ) - { - if ( self.pieces[ i ].modelname == piece.modelname && self.pieces[ i ].buildablename == piece.buildablename ) - { - if ( isDefined( self.pieces[ i ].built ) && !self.pieces[ i ].built ) - { - if ( isDefined( self.pieces[ i ].building ) ) - { - return self.pieces[ i ].building; - } - } - } - i++; - } - return 0; -} - -buildable_all_built() -{ - i = 0; - while ( i < self.pieces.size ) - { - if ( isDefined( self.pieces[ i ].built ) && !self.pieces[ i ].built ) - { - return 0; - } - i++; - } - return 1; -} - -player_can_build( buildable, continuing ) -{ - if ( !isDefined( buildable ) ) - { - return 0; - } - if ( !isDefined( self.current_buildable_piece ) ) - { - return 0; - } - if ( !buildable buildable_has_piece( self.current_buildable_piece ) ) - { - return 0; - } - if ( isDefined( continuing ) && continuing ) - { - if ( buildable buildable_is_piece_built( self.current_buildable_piece ) ) - { - return 0; - } - } - else - { - if ( buildable buildable_is_piece_built_or_building( self.current_buildable_piece ) ) - { - return 0; - } - } - if ( isDefined( buildable.stub ) && isDefined( buildable.stub.custom_buildablestub_update_prompt ) && isDefined( buildable.stub.playertrigger[ 0 ] ) && isDefined( buildable.stub.playertrigger[ 0 ].stub ) && !( buildable.stub.playertrigger[ 0 ].stub [[ buildable.stub.custom_buildablestub_update_prompt ]]( self, 1, buildable.stub.playertrigger[ 0 ] ) ) ) - { - return 0; - } - return 1; -} - -player_build( buildable ) -{ - buildable buildable_set_piece_built( self.current_buildable_piece ); - player_destroy_piece( self.current_buildable_piece ); - while ( isDefined( buildable.stub.model ) ) - { - i = 0; - while ( i < buildable.pieces.size ) - { - if ( isDefined( buildable.pieces[ i ].part_name ) ) - { - buildable.stub.model notsolid(); - if ( isDefined( buildable.pieces[ i ].built ) && !buildable.pieces[ i ].built ) - { - buildable.stub.model hidepart( buildable.pieces[ i ].part_name ); - i++; - continue; - } - else - { - buildable.stub.model show(); - buildable.stub.model showpart( buildable.pieces[ i ].part_name ); - } - } - i++; - } - } - self track_buildable_pieces_built( buildable ); - if ( buildable buildable_all_built() ) - { - self player_finish_buildable( buildable ); - buildable.stub buildablestub_finish_build( self ); - self track_buildables_built( buildable ); - if ( isDefined( level.buildable_built_custom_func ) ) - { - self thread [[ level.buildable_built_custom_func ]]( buildable ); - } - self playsound( "zmb_buildable_complete" ); - } - else - { - self playsound( "zmb_buildable_piece_add" ); -/# - assert( isDefined( level.zombie_buildables[ buildable.buildable_name ].building ), "Missing builing hint" ); -#/ - if ( isDefined( level.zombie_buildables[ buildable.buildable_name ].building ) ) - { - return level.zombie_buildables[ buildable.buildable_name ].building; - } - } - return ""; -} - -player_finish_buildable( buildable ) -{ - buildable.built = 1; - buildable.stub.built = 1; - buildable notify( "built" ); - level.buildables_built[ buildable.buildable_name ] = 1; - level notify( buildable.buildable_name + "_built" ); -} - -buildablestub_finish_build( player ) -{ - player player_finish_buildable( self.buildablezone ); -} - -buildablestub_remove() -{ - arrayremovevalue( level.buildable_stubs, self ); -} - -buildabletrigger_update_prompt( player ) -{ - can_use = self.stub buildablestub_update_prompt( player ); - self sethintstring( self.stub.hint_string ); - return can_use; -} - -buildablestub_update_prompt( player ) -{ - if ( !self anystub_update_prompt( player ) ) - { - return 0; - } - can_use = 1; - if ( isDefined( self.custom_buildablestub_update_prompt ) && !( self [[ self.custom_buildablestub_update_prompt ]]( player ) ) ) - { - return 0; - } - if ( isDefined( self.built ) && !self.built ) - { - if ( !isDefined( player.current_buildable_piece ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE"; - return 0; - } - else - { - if ( !self.buildablezone buildable_has_piece( player.current_buildable_piece ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG"; - return 0; - } - else - { -/# - assert( isDefined( level.zombie_buildables[ self.equipname ].hint ), "Missing buildable hint" ); -#/ - if ( isDefined( level.zombie_buildables[ self.equipname ].hint ) ) - { - self.hint_string = level.zombie_buildables[ self.equipname ].hint; - } - else - { - self.hint_string = "Missing buildable hint"; - } - } - } - } - else - { - if ( self.persistent == 1 ) - { - if ( maps/mp/zombies/_zm_equipment::is_limited_equipment( self.weaponname ) && maps/mp/zombies/_zm_equipment::limited_equipment_in_use( self.weaponname ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_ONLY_ONE"; - return 0; - } - if ( player has_player_equipment( self.weaponname ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_HAVE_ONE"; - return 0; - } - self.hint_string = self.trigger_hintstring; - } - else if ( self.persistent == 2 ) - { - if ( !maps/mp/zombies/_zm_weapons::limited_weapon_below_quota( self.weaponname, undefined ) ) - { - self.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; - return 0; - } - else - { - if ( isDefined( self.bought ) && self.bought ) - { - self.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; - return 0; - } - } - self.hint_string = self.trigger_hintstring; - } - else - { - self.hint_string = ""; - return 0; - } - } - return 1; -} - -player_continue_building( buildablezone ) -{ - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || self in_revive_trigger() ) - { - return 0; - } - if ( self isthrowinggrenade() ) - { - return 0; - } - if ( !self player_can_build( buildablezone, 1 ) ) - { - return 0; - } - if ( isDefined( self.screecher ) ) - { - return 0; - } - if ( !self usebuttonpressed() ) - { - return 0; - } - if ( !buildablezone buildable_is_piece_building( self.current_buildable_piece ) ) - { - return 0; - } - trigger = buildablezone.stub maps/mp/zombies/_zm_unitrigger::unitrigger_trigger( self ); - if ( buildablezone.stub.script_unitrigger_type == "unitrigger_radius_use" ) - { - torigin = buildablezone.stub unitrigger_origin(); - porigin = self geteye(); - radius_sq = 2,25 * buildablezone.stub.radius * buildablezone.stub.radius; - if ( distance2dsquared( torigin, porigin ) > radius_sq ) - { - return 0; - } - } - else - { - if ( !isDefined( trigger ) || !trigger istouching( self ) ) - { - return 0; - } - } - if ( isDefined( buildablezone.stub.require_look_at ) && buildablezone.stub.require_look_at && !self is_player_looking_at( trigger.origin, 0,4 ) ) - { - return 0; - } - return 1; -} - -player_progress_bar_update( start_time, build_time ) -{ - self endon( "entering_last_stand" ); - self endon( "death" ); - self endon( "disconnect" ); - self endon( "buildable_progress_end" ); - while ( isDefined( self ) && ( getTime() - start_time ) < build_time ) - { - progress = ( getTime() - start_time ) / build_time; - if ( progress < 0 ) - { - progress = 0; - } - if ( progress > 1 ) - { - progress = 1; - } - self.usebar updatebar( progress ); - wait 0,05; - } -} - -player_progress_bar( start_time, build_time ) -{ - self.usebar = self createprimaryprogressbar(); - self.usebartext = self createprimaryprogressbartext(); - self.usebartext settext( &"ZOMBIE_BUILDING" ); - if ( isDefined( self ) && isDefined( start_time ) && isDefined( build_time ) ) - { - self player_progress_bar_update( start_time, build_time ); - } - self.usebartext destroyelem(); - self.usebar destroyelem(); -} - -buildable_use_hold_think_internal( player ) -{ - wait 0,01; - if ( !isDefined( self ) ) - { - self notify( "build_failed" ); - if ( isDefined( player.buildableaudio ) ) - { - player.buildableaudio delete(); - player.buildableaudio = undefined; - } - return; - } - if ( !isDefined( self.usetime ) ) - { - self.usetime = int( 3000 ); - } - self.build_time = self.usetime; - self.build_start_time = getTime(); - build_time = self.build_time; - build_start_time = self.build_start_time; - player disable_player_move_states( 1 ); - player increment_is_drinking(); - orgweapon = player getcurrentweapon(); - player giveweapon( "zombie_builder_zm" ); - player switchtoweapon( "zombie_builder_zm" ); - self.stub.buildablezone buildable_set_piece_building( player.current_buildable_piece ); - player thread player_progress_bar( build_start_time, build_time ); - if ( isDefined( level.buildable_build_custom_func ) ) - { - player thread [[ level.buildable_build_custom_func ]]( self.stub ); - } - while ( isDefined( self ) && player player_continue_building( self.stub.buildablezone ) && ( getTime() - self.build_start_time ) < self.build_time ) - { - wait 0,05; - } - player notify( "buildable_progress_end" ); - player maps/mp/zombies/_zm_weapons::switch_back_primary_weapon( orgweapon ); - player takeweapon( "zombie_builder_zm" ); - if ( isDefined( player.is_drinking ) && player.is_drinking ) - { - player decrement_is_drinking(); - } - player enable_player_move_states(); - if ( isDefined( self ) && player player_continue_building( self.stub.buildablezone ) && ( getTime() - self.build_start_time ) >= self.build_time ) - { - buildable_clear_piece_building( player.current_buildable_piece ); - self notify( "build_succeed" ); - } - else - { - if ( isDefined( player.buildableaudio ) ) - { - player.buildableaudio delete(); - player.buildableaudio = undefined; - } - buildable_clear_piece_building( player.current_buildable_piece ); - self notify( "build_failed" ); - } -} - -buildable_play_build_fx( player ) -{ - self endon( "kill_trigger" ); - self endon( "build_succeed" ); - self endon( "build_failed" ); - while ( 1 ) - { - playfx( level._effect[ "building_dust" ], player getplayercamerapos(), player.angles ); - wait 0,5; - } -} - -buildable_use_hold_think( player ) -{ - self thread buildable_play_build_fx( player ); - self thread buildable_use_hold_think_internal( player ); - retval = self waittill_any_return( "build_succeed", "build_failed" ); - if ( retval == "build_succeed" ) - { - return 1; - } - return 0; -} - -buildable_place_think() -{ - self endon( "kill_trigger" ); - player_built = undefined; - while ( isDefined( self.stub.built ) && !self.stub.built ) - { - self waittill( "trigger", player ); - while ( player != self.parent_player ) - { - continue; - } - while ( isDefined( player.screecher_weapon ) ) - { - continue; - } - while ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - } - status = player player_can_build( self.stub.buildablezone ); - if ( !status ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - if ( isDefined( self.stub.oncantuse ) ) - { - self.stub [[ self.stub.oncantuse ]]( player ); - } - continue; - } - else - { - if ( isDefined( self.stub.onbeginuse ) ) - { - self.stub [[ self.stub.onbeginuse ]]( player ); - } - result = self buildable_use_hold_think( player ); - team = player.pers[ "team" ]; - if ( isDefined( self.stub.onenduse ) ) - { - self.stub [[ self.stub.onenduse ]]( team, player, result ); - } - while ( !result ) - { - continue; - } - if ( isDefined( self.stub.onuse ) ) - { - self.stub [[ self.stub.onuse ]]( player ); - } - prompt = player player_build( self.stub.buildablezone ); - player_built = player; - self.stub.hint_string = prompt; - self sethintstring( self.stub.hint_string ); - } - } - if ( isDefined( player_built ) ) - { - } - if ( self.stub.persistent == 0 ) - { - self.stub buildablestub_remove(); - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.stub ); - return; - } - if ( self.stub.persistent == 3 ) - { - stub_unbuild_buildable( self.stub, 1 ); - return; - } - if ( self.stub.persistent == 2 ) - { - if ( isDefined( player_built ) ) - { - self buildabletrigger_update_prompt( player_built ); - } - if ( !maps/mp/zombies/_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) - { - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; - self sethintstring( self.stub.hint_string ); - return; - } - if ( isDefined( self.stub.bought ) && self.stub.bought ) - { - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; - self sethintstring( self.stub.hint_string ); - return; - } - if ( isDefined( self.stub.model ) ) - { - self.stub.model notsolid(); - self.stub.model show(); - } - while ( self.stub.persistent == 2 ) - { - self waittill( "trigger", player ); - while ( isDefined( player.screecher_weapon ) ) - { - continue; - } - if ( !maps/mp/zombies/_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) - { - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; - self sethintstring( self.stub.hint_string ); - return; - } - if ( isDefined( self.stub.built ) && !self.stub.built ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - return; - } - while ( player != self.parent_player ) - { - continue; - } - while ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - } - self.stub.bought = 1; - if ( isDefined( self.stub.model ) ) - { - self.stub.model thread model_fly_away(); - } - player maps/mp/zombies/_zm_weapons::weapon_give( self.stub.weaponname ); - if ( isDefined( level.zombie_include_buildables[ self.stub.equipname ].onbuyweapon ) ) - { - self [[ level.zombie_include_buildables[ self.stub.equipname ].onbuyweapon ]]( player ); - } - if ( !maps/mp/zombies/_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) - { - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; - } - else - { - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; - } - self sethintstring( self.stub.hint_string ); - player track_buildables_pickedup( self.stub.weaponname ); - } - } - else while ( !isDefined( player_built ) || self buildabletrigger_update_prompt( player_built ) ) - { - if ( isDefined( self.stub.model ) ) - { - self.stub.model notsolid(); - self.stub.model show(); - } - while ( self.stub.persistent == 1 ) - { - self waittill( "trigger", player ); - while ( isDefined( player.screecher_weapon ) ) - { - continue; - } - if ( isDefined( self.stub.built ) && !self.stub.built ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - return; - } - while ( player != self.parent_player ) - { - continue; - } - while ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - } - while ( player has_player_equipment( self.stub.weaponname ) ) - { - continue; - } - if ( !maps/mp/zombies/_zm_equipment::is_limited_equipment( self.stub.weaponname ) || !maps/mp/zombies/_zm_equipment::limited_equipment_in_use( self.stub.weaponname ) ) - { - player maps/mp/zombies/_zm_equipment::equipment_buy( self.stub.weaponname ); - player giveweapon( self.stub.weaponname ); - player setweaponammoclip( self.stub.weaponname, 1 ); - if ( isDefined( level.zombie_include_buildables[ self.stub.equipname ].onbuyweapon ) ) - { - self [[ level.zombie_include_buildables[ self.stub.equipname ].onbuyweapon ]]( player ); - } - if ( self.stub.weaponname != "keys_zm" ) - { - player setactionslot( 1, "weapon", self.stub.weaponname ); - } - if ( isDefined( level.zombie_buildables[ self.stub.equipname ].bought ) ) - { - self.stub.hint_string = level.zombie_buildables[ self.stub.equipname ].bought; - } - else - { - self.stub.hint_string = ""; - } - self sethintstring( self.stub.hint_string ); - player track_buildables_pickedup( self.stub.weaponname ); - continue; - } - else - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - } - } - } -} - -model_fly_away() -{ - self moveto( self.origin + vectorScale( ( 0, 0, 1 ), 40 ), 3 ); - direction = self.origin; - direction = ( direction[ 1 ], direction[ 0 ], 0 ); - if ( direction[ 1 ] < 0 || direction[ 0 ] > 0 && direction[ 1 ] > 0 ) - { - direction = ( direction[ 0 ], direction[ 1 ] * -1, 0 ); - } - else - { - if ( direction[ 0 ] < 0 ) - { - direction = ( direction[ 0 ] * -1, direction[ 1 ], 0 ); - } - } - self vibrate( direction, 10, 0,5, 4 ); - self waittill( "movedone" ); - self hide(); - playfx( level._effect[ "poltergeist" ], self.origin ); -} - -find_buildable_stub( equipname ) -{ - _a1921 = level.buildable_stubs; - _k1921 = getFirstArrayKey( _a1921 ); - while ( isDefined( _k1921 ) ) - { - stub = _a1921[ _k1921 ]; - if ( stub.equipname == equipname ) - { - return stub; - } - _k1921 = getNextArrayKey( _a1921, _k1921 ); - } - return undefined; -} - -unbuild_buildable( equipname, return_pieces, origin, angles ) -{ - stub = find_buildable_stub( equipname ); - stub_unbuild_buildable( stub, return_pieces, origin, angles ); -} - -stub_unbuild_buildable( stub, return_pieces, origin, angles ) -{ - if ( isDefined( stub ) ) - { - buildable = stub.buildablezone; - buildable.built = 0; - buildable.stub.built = 0; - buildable notify( "unbuilt" ); - level.buildables_built[ buildable.buildable_name ] = 0; - level notify( buildable.buildable_name + "_unbuilt" ); - i = 0; - while ( i < buildable.pieces.size ) - { - buildable.pieces[ i ].built = 0; - if ( isDefined( buildable.pieces[ i ].part_name ) ) - { - buildable.stub.model notsolid(); - if ( isDefined( buildable.pieces[ i ].built ) && !buildable.pieces[ i ].built ) - { - buildable.stub.model hidepart( buildable.pieces[ i ].part_name ); - break; - } - else - { - buildable.stub.model show(); - buildable.stub.model showpart( buildable.pieces[ i ].part_name ); - } - } - if ( isDefined( return_pieces ) && return_pieces ) - { - if ( isDefined( buildable.stub.unbuild_time_delay ) ) - { - buildable.pieces[ i ] thread piece_spawn_at_with_delay( origin, angles, buildable.stub.unbuild_time_delay ); - i++; - continue; - } - else - { - buildable.pieces[ i ] piece_spawn_at( origin, angles ); - } - } - i++; - } - if ( isDefined( buildable.stub.model ) ) - { - buildable.stub.model hide(); - } - } -} - -player_explode_buildable( equipname, origin, speed, return_to_spawn, return_time ) -{ - self explosiondamage( 50, origin ); - stub = find_buildable_stub( equipname ); - if ( isDefined( stub ) ) - { - buildable = stub.buildablezone; - buildable.built = 0; - buildable.stub.built = 0; - buildable notify( "unbuilt" ); - level.buildables_built[ buildable.buildable_name ] = 0; - level notify( buildable.buildable_name + "_unbuilt" ); - i = 0; - while ( i < buildable.pieces.size ) - { - buildable.pieces[ i ].built = 0; - if ( isDefined( buildable.pieces[ i ].part_name ) ) - { - buildable.stub.model notsolid(); - if ( isDefined( buildable.pieces[ i ].built ) && !buildable.pieces[ i ].built ) - { - buildable.stub.model hidepart( buildable.pieces[ i ].part_name ); - break; - } - else - { - buildable.stub.model show(); - buildable.stub.model showpart( buildable.pieces[ i ].part_name ); - } - } - ang = randomfloat( 360 ); - h = 0,25 + randomfloat( 0,5 ); - dir = ( sin( ang ), cos( ang ), h ); - self thread player_throw_piece( buildable.pieces[ i ], origin, speed * dir, return_to_spawn, return_time ); - i++; - } - buildable.stub.model hide(); - } -} - -think_buildables() -{ - _a2025 = level.zombie_include_buildables; - _k2025 = getFirstArrayKey( _a2025 ); - while ( isDefined( _k2025 ) ) - { - buildable = _a2025[ _k2025 ]; - if ( isDefined( buildable.triggerthink ) ) - { - level [[ buildable.triggerthink ]](); - } - _k2025 = getNextArrayKey( _a2025, _k2025 ); - } -} - -buildable_trigger_think( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) -{ - return setup_unitrigger_buildable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); -} - -buildable_trigger_think_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) -{ - return setup_unitrigger_buildable_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); -} - -buildable_set_unbuild_time_delay( str_equipname, time_delay ) -{ - stub = find_buildable_stub( str_equipname ); - stub.unbuild_time_delay = time_delay; -} - -setup_vehicle_unitrigger_buildable( parent, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) -{ - trig = getent( trigger_targetname, "targetname" ); - if ( !isDefined( trig ) ) - { - return; - } - unitrigger_stub = spawnstruct(); - unitrigger_stub.buildablestruct = level.zombie_include_buildables[ equipname ]; - unitrigger_stub.link_parent = parent; - unitrigger_stub.origin_parent = trig; - unitrigger_stub.trigger_targetname = trigger_targetname; - unitrigger_stub.originfunc = ::anystub_get_unitrigger_origin; - unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; - unitrigger_stub.origin = trig.origin; - unitrigger_stub.angles = trig.angles; - unitrigger_stub.equipname = equipname; - unitrigger_stub.weaponname = weaponname; - unitrigger_stub.trigger_hintstring = trigger_hintstring; - unitrigger_stub.delete_trigger = delete_trigger; - unitrigger_stub.built = 0; - unitrigger_stub.persistent = persistent; - unitrigger_stub.usetime = int( 3000 ); - unitrigger_stub.onbeginuse = ::onbeginuseuts; - unitrigger_stub.onenduse = ::onenduseuts; - unitrigger_stub.onuse = ::onuseplantobjectuts; - unitrigger_stub.oncantuse = ::oncantuseuts; - if ( isDefined( trig.script_length ) ) - { - unitrigger_stub.script_length = trig.script_length; - } - else - { - unitrigger_stub.script_length = 24; - } - if ( isDefined( trig.script_width ) ) - { - unitrigger_stub.script_width = trig.script_width; - } - else - { - unitrigger_stub.script_width = 64; - } - if ( isDefined( trig.script_height ) ) - { - unitrigger_stub.script_height = trig.script_height; - } - else - { - unitrigger_stub.script_height = 24; - } - if ( isDefined( trig.radius ) ) - { - unitrigger_stub.radius = trig.radius; - } - else - { - unitrigger_stub.radius = 64; - } - unitrigger_stub.target = trig.target; - unitrigger_stub.targetname = trig.targetname + "_trigger"; - unitrigger_stub.script_noteworthy = trig.script_noteworthy; - unitrigger_stub.script_parameters = trig.script_parameters; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - if ( isDefined( level.zombie_buildables[ equipname ].hint ) ) - { - unitrigger_stub.hint_string = level.zombie_buildables[ equipname ].hint; - } - unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - unitrigger_stub.require_look_at = 1; - unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - unitrigger_stub.prompt_and_visibility_func = ::buildabletrigger_update_prompt; - maps/mp/zombies/_zm_unitrigger::register_unitrigger( unitrigger_stub, ::buildable_place_think ); - unitrigger_stub.piece_trigger = trig; - trig.trigger_stub = unitrigger_stub; - unitrigger_stub.buildablezone = unitrigger_stub buildable_piece_unitriggers( equipname, unitrigger_stub.origin ); - if ( delete_trigger ) - { - trig delete(); - } - level.buildable_stubs[ level.buildable_stubs.size ] = unitrigger_stub; - return unitrigger_stub; -} - -vehicle_buildable_trigger_think( vehicle, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) -{ - return setup_vehicle_unitrigger_buildable( vehicle, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); -} - -onpickuputs( player ) -{ -/# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Buildable piece recovered by - " + player.name ); -#/ - } -} - -ondroputs( player ) -{ -/# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Buildable piece dropped by - " + player.name ); -#/ - } - player notify( "event_ended" ); -} - -onbeginuseuts( player ) -{ -/# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Buildable piece begin use by - " + player.name ); -#/ - } - if ( isDefined( self.buildablestruct.onbeginuse ) ) - { - self [[ self.buildablestruct.onbeginuse ]]( player ); - } - if ( isDefined( player ) && !isDefined( player.buildableaudio ) ) - { - player.buildableaudio = spawn( "script_origin", player.origin ); - player.buildableaudio playloopsound( "zmb_buildable_loop" ); - } -} - -onenduseuts( team, player, result ) -{ -/# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Buildable piece end use by - " + player.name ); -#/ - } - if ( !isDefined( player ) ) - { - return; - } - if ( isDefined( player.buildableaudio ) ) - { - player.buildableaudio delete(); - player.buildableaudio = undefined; - } - if ( isDefined( self.buildablestruct.onenduse ) ) - { - self [[ self.buildablestruct.onenduse ]]( team, player, result ); - } - player notify( "event_ended" ); -} - -oncantuseuts( player ) -{ -/# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Buildable piece can't use by - " + player.name ); -#/ - } - if ( isDefined( self.buildablestruct.oncantuse ) ) - { - self [[ self.buildablestruct.oncantuse ]]( player ); - } -} - -onuseplantobjectuts( player ) -{ -/# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Buildable piece crafted by - " + player.name ); -#/ - } - if ( isDefined( self.buildablestruct.onuseplantobject ) ) - { - self [[ self.buildablestruct.onuseplantobject ]]( player ); - } - player notify( "bomb_planted" ); -} - -is_buildable() -{ - if ( !isDefined( level.zombie_buildables ) ) - { - return 0; - } - if ( isDefined( self.zombie_weapon_upgrade ) && isDefined( level.zombie_buildables[ self.zombie_weapon_upgrade ] ) ) - { - return 1; - } - if ( isDefined( self.script_noteworthy ) && self.script_noteworthy == "specialty_weapupgrade" ) - { - if ( isDefined( level.buildables_built[ "pap" ] ) && level.buildables_built[ "pap" ] ) - { - return 0; - } - return 1; - } - return 0; -} - -buildable_crafted() -{ - self.pieces--; - -} - -buildable_complete() -{ - if ( self.pieces <= 0 ) - { - return 1; - } - return 0; -} - -get_buildable_hint( buildable_name ) -{ -/# - assert( isDefined( level.zombie_buildables[ buildable_name ] ), buildable_name + " was not included or is not part of the zombie weapon list." ); -#/ - return level.zombie_buildables[ buildable_name ].hint; -} - -delete_on_disconnect( buildable, self_notify, skip_delete ) -{ - buildable endon( "death" ); - self waittill( "disconnect" ); - if ( isDefined( self_notify ) ) - { - self notify( self_notify ); - } - if ( isDefined( skip_delete ) && !skip_delete ) - { - if ( isDefined( buildable.stub ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( buildable.stub ); - buildable.stub = undefined; - } - if ( isDefined( buildable ) ) - { - buildable delete(); - } - } -} - -get_buildable_pickup( buildablename, modelname ) -{ - _a2354 = level.buildablepickups; - _k2354 = getFirstArrayKey( _a2354 ); - while ( isDefined( _k2354 ) ) - { - buildablepickup = _a2354[ _k2354 ]; - if ( buildablepickup[ 0 ].buildablestruct.name == buildablename && buildablepickup[ 0 ].visuals[ 0 ].model == modelname ) - { - return buildablepickup[ 0 ]; - } - _k2354 = getNextArrayKey( _a2354, _k2354 ); - } - return undefined; -} - -track_buildable_piece_pickedup( piece ) -{ - if ( !isDefined( piece ) || !isDefined( piece.buildablename ) ) - { -/# - println( "STAT TRACKING FAILURE: NOT DEFINED IN track_buildable_piece_pickedup() \n" ); -#/ - return; - } - self add_map_buildable_stat( piece.buildablename, "pieces_pickedup", 1 ); - self thread do_player_general_vox( "general", "build_pickup" ); -} - -track_buildable_pieces_built( buildable ) -{ - if ( !isDefined( buildable ) || !isDefined( buildable.buildable_name ) ) - { -/# - println( "STAT TRACKING FAILURE: NOT DEFINED IN track_buildable_pieces_built() \n" ); -#/ - return; - } - bname = buildable.buildable_name; - if ( isDefined( buildable.stat_name ) ) - { - bname = buildable.stat_name; - } - self add_map_buildable_stat( bname, "pieces_built", 1 ); - if ( !buildable buildable_all_built() ) - { - self thread do_player_general_vox( "general", "build_add" ); - } -} - -track_buildables_built( buildable ) -{ - if ( !isDefined( buildable ) || !isDefined( buildable.buildable_name ) ) - { -/# - println( "STAT TRACKING FAILURE: NOT DEFINED IN track_buildables_built() \n" ); -#/ - return; - } - bname = buildable.buildable_name; - if ( isDefined( buildable.stat_name ) ) - { - bname = buildable.stat_name; - } - self add_map_buildable_stat( bname, "buildable_built", 1 ); - self maps/mp/zombies/_zm_stats::increment_client_stat( "buildables_built", 0 ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "buildables_built" ); -} - -track_buildables_pickedup( buildable ) -{ - if ( !isDefined( buildable ) ) - { -/# - println( "STAT TRACKING FAILURE: NOT DEFINED IN track_buildables_pickedup() \n" ); -#/ - return; - } - stat_name = get_buildable_stat_name( buildable ); - if ( !isDefined( stat_name ) ) - { -/# - println( "STAT TRACKING FAILURE: NO STAT NAME FOR " + buildable + "\n" ); -#/ - return; - } - self add_map_buildable_stat( stat_name, "buildable_pickedup", 1 ); - self say_pickup_buildable_vo( buildable, 0 ); -} - -track_buildables_planted( equipment ) -{ - if ( !isDefined( equipment ) ) - { -/# - println( "STAT TRACKING FAILURE: NOT DEFINED for track_buildables_planted() \n" ); -#/ - return; - } - buildable_name = undefined; - if ( isDefined( equipment.name ) ) - { - buildable_name = get_buildable_stat_name( equipment.name ); - } - if ( !isDefined( buildable_name ) ) - { -/# - println( "STAT TRACKING FAILURE: NO BUILDABLE NAME FOR track_buildables_planted() " + equipment.name + "\n" ); -#/ - return; - } - maps/mp/_demo::bookmark( "zm_player_buildable_placed", getTime(), self ); - self add_map_buildable_stat( buildable_name, "buildable_placed", 1 ); - vo_name = "build_plc_" + buildable_name; - if ( buildable_name == "electric_trap" ) - { - vo_name = "build_plc_trap"; - } - if ( isDefined( self.buildable_timer ) && !self.buildable_timer ) - { - self thread do_player_general_vox( "general", vo_name ); - self thread placed_buildable_vo_timer(); - } -} - -placed_buildable_vo_timer() -{ - self endon( "disconnect" ); - self.buildable_timer = 1; - wait 60; - self.buildable_timer = 0; -} - -buildable_pickedup_timer() -{ - self endon( "disconnect" ); - self.buildable_pickedup_timer = 1; - wait 60; - self.buildable_pickedup_timer = 0; -} - -track_planted_buildables_pickedup( equipment ) -{ - if ( !isDefined( equipment ) ) - { - return; - } - if ( equipment != "equip_turbine_zm" && equipment != "equip_turret_zm" || equipment == "equip_electrictrap_zm" && equipment == "riotshield_zm" ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "planted_buildables_pickedup", 0 ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "planted_buildables_pickedup" ); - } - if ( isDefined( self.buildable_pickedup_timer ) && !self.buildable_pickedup_timer ) - { - self say_pickup_buildable_vo( equipment, 1 ); - self thread buildable_pickedup_timer(); - } -} - -track_placed_buildables( buildable_name ) -{ - if ( !isDefined( buildable_name ) ) - { - return; - } - self add_map_buildable_stat( buildable_name, "buildable_placed", 1 ); - vo_name = undefined; - if ( buildable_name == level.riotshield_name ) - { - vo_name = "build_plc_shield"; - } - if ( !isDefined( vo_name ) ) - { - return; - } - self thread do_player_general_vox( "general", vo_name ); -} - -add_map_buildable_stat( piece_name, stat_name, value ) -{ - if ( isDefined( piece_name ) || piece_name == "sq_common" && piece_name == "keys_zm" ) - { - return; - } - self adddstat( "buildables", piece_name, stat_name, value ); -} - -say_pickup_buildable_vo( buildable_name, world ) -{ - if ( isDefined( self.buildable_pickedup_timer ) && self.buildable_pickedup_timer ) - { - return; - } - name = get_buildable_vo_name( buildable_name ); - if ( !isDefined( name ) ) - { - return; - } - vo_name = "build_pck_b" + name; - if ( isDefined( world ) && world ) - { - vo_name = "build_pck_w" + name; - } - if ( !isDefined( level.transit_buildable_vo_override ) || !( self [[ level.transit_buildable_vo_override ]]( name, world ) ) ) - { - self thread do_player_general_vox( "general", vo_name ); - self thread buildable_pickedup_timer(); - } -} - -get_buildable_vo_name( buildable_name ) -{ - switch( buildable_name ) - { - case "equip_turbine_zm": - return "turbine"; - case "equip_turret_zm": - return "turret"; - case "equip_electrictrap_zm": - return "trap"; - case "riotshield_zm": - return "shield"; - case "jetgun_zm": - return "jetgun"; - case "equip_springpad_zm": - return "springpad_zm"; - case "equip_slipgun_zm": - return "slipgun_zm"; - } - return undefined; -} - -get_buildable_stat_name( buildable ) -{ - if ( isDefined( buildable ) ) - { - switch( buildable ) - { - case "equip_turbine_zm": - return "turbine"; - case "equip_turret_zm": - return "turret"; - case "equip_electrictrap_zm": - return "electric_trap"; - case "equip_springpad_zm": - return "springpad_zm"; - case "equip_slipgun_zm": - return "slipgun_zm"; - } - return undefined; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_chugabud.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_chugabud.gsc deleted file mode 100644 index b75623d..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_chugabud.gsc +++ /dev/null @@ -1,837 +0,0 @@ -#include maps/mp/_visionset_mgr; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_weap_cymbal_monkey; -#include maps/mp/zombies/_zm_clone; -#include maps/mp/zombies/_zm_chugabud; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - level.chugabud_laststand_func = ::chugabud_laststand; - level thread chugabud_hostmigration(); - level._effect[ "chugabud_revive_fx" ] = loadfx( "weapon/quantum_bomb/fx_player_position_effect" ); - level._effect[ "chugabud_bleedout_fx" ] = loadfx( "weapon/quantum_bomb/fx_player_position_effect" ); -} - -chugabug_precache() -{ -} - -chugabud_player_init() -{ -} - -chugabud_laststand() -{ - self endon( "player_suicide" ); - self endon( "disconnect" ); - self endon( "chugabud_bleedout" ); - self maps/mp/zombies/_zm_laststand::increment_downed_stat(); - self.ignore_insta_kill = 1; - self.health = self.maxhealth; - self maps/mp/zombies/_zm_chugabud::chugabud_save_loadout(); - self maps/mp/zombies/_zm_chugabud::chugabud_fake_death(); - wait 3; - if ( isDefined( self.insta_killed ) || self.insta_killed && isDefined( self.disable_chugabud_corpse ) ) - { - create_corpse = 0; - } - else - { - create_corpse = 1; - } - if ( create_corpse == 1 ) - { - if ( isDefined( level._chugabug_reject_corpse_override_func ) ) - { - reject_corpse = self [[ level._chugabug_reject_corpse_override_func ]]( self.origin ); - if ( reject_corpse ) - { - create_corpse = 0; - } - } - } - if ( create_corpse == 1 ) - { - self thread activate_chugabud_effects_and_audio(); - corpse = self chugabud_spawn_corpse(); - corpse thread chugabud_corpse_revive_icon( self ); - self.e_chugabud_corpse = corpse; - corpse thread chugabud_corpse_cleanup_on_spectator( self ); - if ( isDefined( level.whos_who_client_setup ) ) - { - corpse setclientfield( "clientfield_whos_who_clone_glow_shader", 1 ); - } - } - self chugabud_fake_revive(); - wait 0,1; - self.ignore_insta_kill = undefined; - self.disable_chugabud_corpse = undefined; - if ( create_corpse == 0 ) - { - self notify( "chugabud_effects_cleanup" ); - return; - } - bleedout_time = getDvarFloat( "player_lastStandBleedoutTime" ); - self thread chugabud_bleed_timeout( bleedout_time, corpse ); - self thread chugabud_handle_multiple_instances( corpse ); - corpse waittill( "player_revived", e_reviver ); - if ( isDefined( e_reviver ) && e_reviver == self ) - { - self notify( "whos_who_self_revive" ); - } - self perk_abort_drinking( 0,1 ); - self maps/mp/zombies/_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); - self setorigin( corpse.origin ); - self setplayerangles( corpse.angles ); - if ( self player_is_in_laststand() ) - { - self thread chugabud_laststand_cleanup( corpse, "player_revived" ); - self auto_revive( self, 1 ); - return; - } - self chugabud_laststand_cleanup( corpse, undefined ); -} - -chugabud_laststand_cleanup( corpse, str_notify ) -{ - if ( isDefined( str_notify ) ) - { - self waittill( str_notify ); - } - self chugabud_give_loadout(); - self chugabud_corpse_cleanup( corpse, 1 ); -} - -chugabud_bleed_timeout( delay, corpse ) -{ - self endon( "player_suicide" ); - self endon( "disconnect" ); - corpse endon( "death" ); - wait delay; - while ( isDefined( corpse.revivetrigger ) ) - { - while ( corpse.revivetrigger.beingrevived ) - { - wait 0,01; - } - } - while ( isDefined( self.loadout.perks ) && flag( "solo_game" ) ) - { - i = 0; - while ( i < self.loadout.perks.size ) - { - perk = self.loadout.perks[ i ]; - if ( perk == "specialty_quickrevive" ) - { - arrayremovevalue( self.loadout.perks, self.loadout.perks[ i ] ); - corpse notify( "player_revived" ); - return; - } - i++; - } - } - self chugabud_corpse_cleanup( corpse, 0 ); -} - -chugabud_corpse_cleanup( corpse, was_revived ) -{ - self notify( "chugabud_effects_cleanup" ); - if ( was_revived ) - { - playsoundatposition( "evt_ww_appear", corpse.origin ); - playfx( level._effect[ "chugabud_revive_fx" ], corpse.origin ); - } - else - { - playsoundatposition( "evt_ww_disappear", corpse.origin ); - playfx( level._effect[ "chugabud_bleedout_fx" ], corpse.origin ); - self notify( "chugabud_bleedout" ); - } - if ( isDefined( corpse.revivetrigger ) ) - { - corpse notify( "stop_revive_trigger" ); - corpse.revivetrigger delete(); - corpse.revivetrigger = undefined; - } - if ( isDefined( corpse.revive_hud_elem ) ) - { - corpse.revive_hud_elem destroy(); - corpse.revive_hud_elem = undefined; - } - wait 0,1; - corpse delete(); - self.e_chugabud_corpse = undefined; -} - -chugabud_handle_multiple_instances( corpse ) -{ - corpse endon( "death" ); - self waittill( "perk_chugabud_activated" ); - self chugabud_corpse_cleanup( corpse, 0 ); -} - -chugabud_spawn_corpse() -{ - corpse = maps/mp/zombies/_zm_clone::spawn_player_clone( self, self.origin, undefined, self.whos_who_shader ); - corpse.angles = self.angles; - corpse maps/mp/zombies/_zm_clone::clone_give_weapon( "m1911_zm" ); - corpse maps/mp/zombies/_zm_clone::clone_animate( "laststand" ); - corpse.revive_hud = self chugabud_revive_hud_create(); - corpse thread maps/mp/zombies/_zm_laststand::revive_trigger_spawn(); - return corpse; -} - -chugabud_revive_hud_create() -{ - self.revive_hud = newclienthudelem( self ); - self.revive_hud.alignx = "center"; - self.revive_hud.aligny = "middle"; - self.revive_hud.horzalign = "center"; - self.revive_hud.vertalign = "bottom"; - self.revive_hud.y = -50; - self.revive_hud.foreground = 1; - self.revive_hud.font = "default"; - self.revive_hud.fontscale = 1,5; - self.revive_hud.alpha = 0; - self.revive_hud.color = ( 1, 1, 1 ); - self.revive_hud settext( "" ); - return self.revive_hud; -} - -chugabud_save_loadout() -{ - primaries = self getweaponslistprimaries(); - currentweapon = self getcurrentweapon(); - self.loadout = spawnstruct(); - self.loadout.player = self; - self.loadout.weapons = []; - self.loadout.score = self.score; - self.loadout.current_weapon = -1; - _a366 = primaries; - index = getFirstArrayKey( _a366 ); - while ( isDefined( index ) ) - { - weapon = _a366[ index ]; - self.loadout.weapons[ index ] = weapon; - self.loadout.stockcount[ index ] = self getweaponammostock( weapon ); - self.loadout.clipcount[ index ] = self getweaponammoclip( weapon ); - if ( weapon == currentweapon ) - { - self.loadout.current_weapon = index; - } - index = getNextArrayKey( _a366, index ); - } - self.loadout.equipment = self get_player_equipment(); - if ( isDefined( self.loadout.equipment ) ) - { - self equipment_take( self.loadout.equipment ); - } - self.loadout save_weapons_for_chugabud( self ); - if ( self hasweapon( "claymore_zm" ) ) - { - self.loadout.hasclaymore = 1; - self.loadout.claymoreclip = self getweaponammoclip( "claymore_zm" ); - } - self.loadout.perks = chugabud_save_perks( self ); - self chugabud_save_grenades(); - if ( maps/mp/zombies/_zm_weap_cymbal_monkey::cymbal_monkey_exists() ) - { - self.loadout.zombie_cymbal_monkey_count = self getweaponammoclip( "cymbal_monkey_zm" ); - } -} - -chugabud_save_grenades() -{ - if ( self hasweapon( "emp_grenade_zm" ) ) - { - self.loadout.hasemp = 1; - self.loadout.empclip = self getweaponammoclip( "emp_grenade_zm" ); - } - lethal_grenade = self get_player_lethal_grenade(); - if ( self hasweapon( lethal_grenade ) ) - { - self.loadout.lethal_grenade = lethal_grenade; - self.loadout.lethal_grenade_count = self getweaponammoclip( lethal_grenade ); - } - else - { - self.loadout.lethal_grenade = undefined; - } -} - -chugabud_give_loadout() -{ - self takeallweapons(); - loadout = self.loadout; - primaries = self getweaponslistprimaries(); - while ( loadout.weapons.size > 1 || primaries.size > 1 ) - { - _a449 = primaries; - _k449 = getFirstArrayKey( _a449 ); - while ( isDefined( _k449 ) ) - { - weapon = _a449[ _k449 ]; - self takeweapon( weapon ); - _k449 = getNextArrayKey( _a449, _k449 ); - } - } - i = 0; - while ( i < loadout.weapons.size ) - { - if ( !isDefined( loadout.weapons[ i ] ) ) - { - i++; - continue; - } - else if ( loadout.weapons[ i ] == "none" ) - { - i++; - continue; - } - else - { - weapon = loadout.weapons[ i ]; - stock_amount = loadout.stockcount[ i ]; - clip_amount = loadout.clipcount[ i ]; - if ( !self hasweapon( weapon ) ) - { - self giveweapon( weapon, 0, self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); - self setweaponammostock( weapon, stock_amount ); - self setweaponammoclip( weapon, clip_amount ); - if ( i == loadout.current_weapon ) - { - self switchtoweapon( weapon ); - } - } - } - i++; - } - self giveweapon( "knife_zm" ); - self maps/mp/zombies/_zm_equipment::equipment_give( self.loadout.equipment ); - loadout restore_weapons_for_chugabud( self ); - self chugabud_restore_claymore(); - self.score = loadout.score; - self.pers[ "score" ] = loadout.score; - perk_array = maps/mp/zombies/_zm_perks::get_perk_array( 1 ); - i = 0; - while ( i < perk_array.size ) - { - perk = perk_array[ i ]; - self unsetperk( perk ); - self.num_perks--; - - self set_perk_clientfield( perk, 0 ); - i++; - } - while ( isDefined( loadout.perks ) && loadout.perks.size > 0 ) - { - i = 0; - while ( i < loadout.perks.size ) - { - if ( self hasperk( loadout.perks[ i ] ) ) - { - i++; - continue; - } - else if ( loadout.perks[ i ] == "specialty_quickrevive" && flag( "solo_game" ) ) - { - level.solo_game_free_player_quickrevive = 1; - } - if ( loadout.perks[ i ] == "specialty_finalstand" ) - { - i++; - continue; - } - else - { - maps/mp/zombies/_zm_perks::give_perk( loadout.perks[ i ] ); - } - i++; - } - } - self chugabud_restore_grenades(); - if ( maps/mp/zombies/_zm_weap_cymbal_monkey::cymbal_monkey_exists() ) - { - if ( loadout.zombie_cymbal_monkey_count ) - { - self maps/mp/zombies/_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); - self setweaponammoclip( "cymbal_monkey_zm", loadout.zombie_cymbal_monkey_count ); - } - } -} - -chugabud_restore_grenades() -{ - if ( isDefined( self.loadout.hasemp ) && self.loadout.hasemp ) - { - self giveweapon( "emp_grenade_zm" ); - self setweaponammoclip( "emp_grenade_zm", self.loadout.empclip ); - } - if ( isDefined( self.loadout.lethal_grenade ) ) - { - self giveweapon( self.loadout.lethal_grenade ); - self setweaponammoclip( self.loadout.lethal_grenade, self.loadout.lethal_grenade_count ); - } -} - -chugabud_restore_claymore() -{ - if ( isDefined( self.loadout.hasclaymore ) && self.loadout.hasclaymore && !self hasweapon( "claymore_zm" ) ) - { - self giveweapon( "claymore_zm" ); - self set_player_placeable_mine( "claymore_zm" ); - self setactionslot( 4, "weapon", "claymore_zm" ); - self setweaponammoclip( "claymore_zm", self.loadout.claymoreclip ); - } -} - -chugabud_fake_death() -{ - level notify( "fake_death" ); - self notify( "fake_death" ); - self takeallweapons(); - self allowstand( 0 ); - self allowcrouch( 0 ); - self allowprone( 1 ); - self.ignoreme = 1; - self enableinvulnerability(); - wait 0,1; - self freezecontrols( 1 ); - wait 0,9; -} - -chugabud_fake_revive() -{ - level notify( "fake_revive" ); - self notify( "fake_revive" ); - playsoundatposition( "evt_ww_disappear", self.origin ); - playfx( level._effect[ "chugabud_revive_fx" ], self.origin ); - spawnpoint = chugabud_get_spawnpoint(); - if ( isDefined( level._chugabud_post_respawn_override_func ) ) - { - self [[ level._chugabud_post_respawn_override_func ]]( spawnpoint.origin ); - } - if ( isDefined( level.chugabud_force_corpse_position ) ) - { - if ( isDefined( self.e_chugabud_corpse ) ) - { - self.e_chugabud_corpse forceteleport( level.chugabud_force_corpse_position ); - } - level.chugabud_force_corpse_position = undefined; - } - if ( isDefined( level.chugabud_force_player_position ) ) - { - spawnpoint.origin = level.chugabud_force_player_position; - level.chugabud_force_player_position = undefined; - } - self setorigin( spawnpoint.origin ); - self setplayerangles( spawnpoint.angles ); - playsoundatposition( "evt_ww_appear", spawnpoint.origin ); - playfx( level._effect[ "chugabud_revive_fx" ], spawnpoint.origin ); - self allowstand( 1 ); - self allowcrouch( 1 ); - self allowprone( 1 ); - self.ignoreme = 0; - self setstance( "stand" ); - self freezecontrols( 0 ); - self giveweapon( "knife_zm" ); - self give_start_weapon( 1 ); - self.score = self.loadout.score; - self.pers[ "score" ] = self.loadout.score; - self giveweapon( "frag_grenade_zm" ); - self setweaponammoclip( "frag_grenade_zm", 2 ); - self chugabud_restore_claymore(); - wait 1; - self disableinvulnerability(); -} - -chugabud_get_spawnpoint() -{ - spawnpoint = undefined; - if ( get_chugabug_spawn_point_from_nodes( self.origin, 500, 700, 64, 1 ) ) - { - spawnpoint = level.chugabud_spawn_struct; - } - if ( !isDefined( spawnpoint ) ) - { - if ( get_chugabug_spawn_point_from_nodes( self.origin, 100, 400, 64, 1 ) ) - { - spawnpoint = level.chugabud_spawn_struct; - } - } - if ( !isDefined( spawnpoint ) ) - { - if ( get_chugabug_spawn_point_from_nodes( self.origin, 50, 400, 256, 0 ) ) - { - spawnpoint = level.chugabud_spawn_struct; - } - } - if ( !isDefined( spawnpoint ) ) - { - spawnpoint = maps/mp/zombies/_zm::check_for_valid_spawn_near_team( self, 1 ); - } - if ( !isDefined( spawnpoint ) ) - { - match_string = ""; - location = level.scr_zm_map_start_location; - if ( location != "default" && location == "" && isDefined( level.default_start_location ) ) - { - location = level.default_start_location; - } - match_string = ( level.scr_zm_ui_gametype + "_" ) + location; - spawnpoints = []; - structs = getstructarray( "initial_spawn", "script_noteworthy" ); - while ( isDefined( structs ) ) - { - _a744 = structs; - _k744 = getFirstArrayKey( _a744 ); - while ( isDefined( _k744 ) ) - { - struct = _a744[ _k744 ]; - while ( isDefined( struct.script_string ) ) - { - tokens = strtok( struct.script_string, " " ); - _a750 = tokens; - _k750 = getFirstArrayKey( _a750 ); - while ( isDefined( _k750 ) ) - { - token = _a750[ _k750 ]; - if ( token == match_string ) - { - spawnpoints[ spawnpoints.size ] = struct; - } - _k750 = getNextArrayKey( _a750, _k750 ); - } - } - _k744 = getNextArrayKey( _a744, _k744 ); - } - } - if ( !isDefined( spawnpoints ) || spawnpoints.size == 0 ) - { - spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); - } -/# - assert( isDefined( spawnpoints ), "Could not find initial spawn points!" ); -#/ - spawnpoint = maps/mp/zombies/_zm::getfreespawnpoint( spawnpoints, self ); - } - return spawnpoint; -} - -get_chugabug_spawn_point_from_nodes( v_origin, min_radius, max_radius, max_height, ignore_targetted_nodes ) -{ - if ( !isDefined( level.chugabud_spawn_struct ) ) - { - level.chugabud_spawn_struct = spawnstruct(); - } - found_node = undefined; - a_nodes = getnodesinradiussorted( v_origin, max_radius, min_radius, max_height, "pathnodes" ); - while ( isDefined( a_nodes ) && a_nodes.size > 0 ) - { - a_player_volumes = getentarray( "player_volume", "script_noteworthy" ); - index = a_nodes.size - 1; - i = index; - while ( i >= 0 ) - { - n_node = a_nodes[ i ]; - if ( ignore_targetted_nodes == 1 ) - { - if ( isDefined( n_node.target ) ) - { - i--; - continue; - } - } - else - { - if ( !positionwouldtelefrag( n_node.origin ) ) - { - if ( maps/mp/zombies/_zm_utility::check_point_in_enabled_zone( n_node.origin, 1, a_player_volumes ) ) - { - v_start = ( n_node.origin[ 0 ], n_node.origin[ 1 ], n_node.origin[ 2 ] + 30 ); - v_end = ( n_node.origin[ 0 ], n_node.origin[ 1 ], n_node.origin[ 2 ] - 30 ); - trace = bullettrace( v_start, v_end, 0, undefined ); - if ( trace[ "fraction" ] < 1 ) - { - override_abort = 0; - if ( isDefined( level._chugabud_reject_node_override_func ) ) - { - override_abort = [[ level._chugabud_reject_node_override_func ]]( v_origin, n_node ); - } - if ( !override_abort ) - { - found_node = n_node; - break; - } - } - } - } - } - else - { - i--; - - } - } - } - if ( isDefined( found_node ) ) - { - level.chugabud_spawn_struct.origin = found_node.origin; - v_dir = vectornormalize( v_origin - level.chugabud_spawn_struct.origin ); - level.chugabud_spawn_struct.angles = vectorToAngle( v_dir ); - return 1; - } - return 0; -} - -force_corpse_respawn_position( forced_corpse_position ) -{ - level.chugabud_force_corpse_position = forced_corpse_position; -} - -force_player_respawn_position( forced_player_position ) -{ - level.chugabud_force_player_position = forced_player_position; -} - -save_weapons_for_chugabud( player ) -{ - self.chugabud_melee_weapons = []; - i = 0; - while ( i < level._melee_weapons.size ) - { - self save_weapon_for_chugabud( player, level._melee_weapons[ i ].weapon_name ); - i++; - } -} - -save_weapon_for_chugabud( player, weapon_name ) -{ - if ( player hasweapon( weapon_name ) ) - { - self.chugabud_melee_weapons[ weapon_name ] = 1; - } -} - -restore_weapons_for_chugabud( player ) -{ - i = 0; - while ( i < level._melee_weapons.size ) - { - self restore_weapon_for_chugabud( player, level._melee_weapons[ i ].weapon_name ); - i++; - } - self.chugabud_melee_weapons = undefined; -} - -restore_weapon_for_chugabud( player, weapon_name ) -{ - if ( isDefined( weapon_name ) || !isDefined( self.chugabud_melee_weapons ) && !isDefined( self.chugabud_melee_weapons[ weapon_name ] ) ) - { - return; - } - if ( isDefined( self.chugabud_melee_weapons[ weapon_name ] ) && self.chugabud_melee_weapons[ weapon_name ] ) - { - player giveweapon( weapon_name ); - player set_player_melee_weapon( weapon_name ); - self.chugabud_melee_weapons[ weapon_name ] = 0; - } -} - -chugabud_save_perks( ent ) -{ - perk_array = ent get_perk_array( 1 ); - _a941 = perk_array; - _k941 = getFirstArrayKey( _a941 ); - while ( isDefined( _k941 ) ) - { - perk = _a941[ _k941 ]; - ent unsetperk( perk ); - _k941 = getNextArrayKey( _a941, _k941 ); - } - return perk_array; -} - -playchugabudtimeraudio() -{ - self endon( "chugabud_grabbed" ); - self endon( "chugabud_timedout" ); - player = self.player; - self thread playchugabudtimerout( player ); - while ( 1 ) - { - player playsoundtoplayer( "zmb_chugabud_timer_count", player ); - wait 1; - } -} - -playchugabudtimerout( player ) -{ - self endon( "chugabud_grabbed" ); - self waittill( "chugabud_timedout" ); - player playsoundtoplayer( "zmb_chugabud_timer_out", player ); -} - -chugabud_hostmigration() -{ - level endon( "end_game" ); - level notify( "chugabud_hostmigration" ); - level endon( "chugabud_hostmigration" ); - while ( 1 ) - { - level waittill( "host_migration_end" ); - chugabuds = getentarray( "player_chugabud_model", "script_noteworthy" ); - _a1000 = chugabuds; - _k1000 = getFirstArrayKey( _a1000 ); - while ( isDefined( _k1000 ) ) - { - model = _a1000[ _k1000 ]; - playfxontag( level._effect[ "powerup_on" ], model, "tag_origin" ); - _k1000 = getNextArrayKey( _a1000, _k1000 ); - } - } -} - -player_revived_cleanup_chugabud_corpse() -{ -} - -player_has_chugabud_corpse() -{ - if ( isDefined( self.e_chugabud_corpse ) ) - { - return 1; - } - return 0; -} - -is_weapon_available_in_chugabud_corpse( weapon ) -{ - a_players = getplayers(); - while ( isDefined( a_players ) ) - { - num = 0; - while ( num < a_players.size ) - { - player = a_players[ num ]; - while ( player player_has_chugabud_corpse() ) - { - while ( isDefined( player.loadout ) && isDefined( player.loadout.weapons ) ) - { - i = 0; - while ( i < player.loadout.weapons.size ) - { - chugabud_weapon = player.loadout.weapons[ i ]; - if ( isDefined( chugabud_weapon ) && chugabud_weapon == weapon ) - { - return 1; - } - i++; - } - } - } - num++; - } - } - return 0; -} - -chugabud_corpse_cleanup_on_spectator( player ) -{ - self endon( "death" ); - player endon( "disconnect" ); - while ( 1 ) - { - if ( player.sessionstate == "spectator" ) - { - break; - } - else - { - wait 0,01; - } - } - player chugabud_corpse_cleanup( self, 0 ); -} - -chugabud_corpse_revive_icon( player ) -{ - self endon( "death" ); - height_offset = 30; - index = player.clientid; - hud_elem = newhudelem(); - self.revive_hud_elem = hud_elem; - hud_elem.x = self.origin[ 0 ]; - hud_elem.y = self.origin[ 1 ]; - hud_elem.z = self.origin[ 2 ] + height_offset; - hud_elem.alpha = 1; - hud_elem.archived = 1; - hud_elem setshader( "waypoint_revive", 5, 5 ); - hud_elem setwaypoint( 1 ); - hud_elem.hidewheninmenu = 1; - hud_elem.immunetodemogamehudsettings = 1; - while ( 1 ) - { - if ( !isDefined( self.revive_hud_elem ) ) - { - return; - } - else - { - hud_elem.x = self.origin[ 0 ]; - hud_elem.y = self.origin[ 1 ]; - hud_elem.z = self.origin[ 2 ] + height_offset; - wait 0,01; - } - } -} - -activate_chugabud_effects_and_audio() -{ - if ( isDefined( level.whos_who_client_setup ) ) - { - if ( !isDefined( self.whos_who_effects_active ) ) - { - if ( isDefined( level.chugabud_shellshock ) ) - { - self shellshock( "whoswho", 60 ); - } - if ( isDefined( level.vsmgr_prio_visionset_zm_whos_who ) ) - { - maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_whos_who", self ); - } - self setclientfieldtoplayer( "clientfield_whos_who_audio", 1 ); - self setclientfieldtoplayer( "clientfield_whos_who_filter", 1 ); - self.whos_who_effects_active = 1; - self thread deactivate_chugabud_effects_and_audio(); - } - } -} - -deactivate_chugabud_effects_and_audio() -{ - self waittill_any( "death", "chugabud_effects_cleanup" ); - if ( isDefined( level.whos_who_client_setup ) ) - { - if ( isDefined( self.whos_who_effects_active ) && self.whos_who_effects_active == 1 ) - { - if ( isDefined( level.chugabud_shellshock ) ) - { - self stopshellshock(); - } - if ( isDefined( level.vsmgr_prio_visionset_zm_whos_who ) ) - { - maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_whos_who", self ); - } - self setclientfieldtoplayer( "clientfield_whos_who_audio", 0 ); - self setclientfieldtoplayer( "clientfield_whos_who_filter", 0 ); - } - self.whos_who_effects_active = undefined; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_clone.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_clone.gsc deleted file mode 100644 index 3a2fb24..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_clone.gsc +++ /dev/null @@ -1,133 +0,0 @@ -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -#using_animtree( "zm_ally" ); - -init() -{ - init_mover_tree(); -} - -spawn_player_clone( player, origin, forceweapon, forcemodel ) -{ - if ( !isDefined( origin ) ) - { - origin = player.origin; - } - primaryweapons = player getweaponslistprimaries(); - if ( isDefined( forceweapon ) ) - { - weapon = forceweapon; - } - else if ( primaryweapons.size ) - { - weapon = primaryweapons[ 0 ]; - } - else - { - weapon = player getcurrentweapon(); - } - weaponmodel = getweaponmodel( weapon ); - spawner = getent( "fake_player_spawner", "targetname" ); - if ( isDefined( spawner ) ) - { - clone = spawner spawnactor(); - clone.origin = origin; - clone.isactor = 1; - } - else - { - clone = spawn( "script_model", origin ); - clone.isactor = 0; - } - if ( isDefined( forcemodel ) ) - { - clone setmodel( forcemodel ); - } - else - { - clone setmodel( self.model ); - if ( isDefined( player.headmodel ) ) - { - clone.headmodel = player.headmodel; - clone attach( clone.headmodel, "", 1 ); - } - } - if ( weaponmodel != "" && weaponmodel != "none" ) - { - clone attach( weaponmodel, "tag_weapon_right" ); - } - clone.team = player.team; - clone.is_inert = 1; - clone.zombie_move_speed = "walk"; - clone.script_noteworthy = "corpse_clone"; - clone.actor_damage_func = ::clone_damage_func; - return clone; -} - -clone_damage_func( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) -{ - idamage = 0; - if ( sweapon != "knife_ballistic_upgraded_zm" && sweapon != "knife_ballistic_bowie_upgraded_zm" || sweapon == "knife_ballistic_no_melee_upgraded_zm" && sweapon == "knife_ballistic_sickle_upgraded_zm" ) - { - self notify( "player_revived" ); - } - return idamage; -} - -clone_give_weapon( weapon ) -{ - weaponmodel = getweaponmodel( weapon ); - if ( weaponmodel != "" && weaponmodel != "none" ) - { - self attach( weaponmodel, "tag_weapon_right" ); - } -} - -clone_animate( animtype ) -{ - if ( self.isactor ) - { - self thread clone_actor_animate( animtype ); - } - else - { - self thread clone_mover_animate( animtype ); - } -} - -clone_actor_animate( animtype ) -{ - wait 0,1; - switch( animtype ) - { - case "laststand": - self setanimstatefromasd( "laststand" ); - break; - case "idle": - default: - self setanimstatefromasd( "idle" ); - break; - } -} - -init_mover_tree() -{ - scriptmodelsuseanimtree( -1 ); -} - -clone_mover_animate( animtype ) -{ - self useanimtree( -1 ); - switch( animtype ) - { - case "laststand": - self setanim( %pb_laststand_idle ); - break; - case "idle": - default: - self setanim( %pb_stand_alert ); - break; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_devgui.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_devgui.gsc deleted file mode 100644 index 0ba339f..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_devgui.gsc +++ /dev/null @@ -1,1817 +0,0 @@ -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_weap_claymore; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_turned; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ -/# - setdvar( "zombie_devgui", "" ); - setdvar( "scr_force_weapon", "" ); - setdvar( "scr_zombie_round", "1" ); - setdvar( "scr_zombie_dogs", "1" ); - setdvar( "scr_spawn_tesla", "" ); - setdvar( "scr_force_quantum_bomb_result", "" ); - level.devgui_add_weapon = ::devgui_add_weapon; - level thread zombie_devgui_think(); - thread zombie_devgui_player_commands(); - thread diable_fog_in_noclip(); - thread zombie_weapon_devgui_think(); -#/ -} - -zombie_devgui_player_commands() -{ -/# - flag_wait( "start_zombie_round_logic" ); - wait 1; - players = get_players(); - i = 0; - while ( i < players.size ) - { - ip1 = i + 1; - adddebugcommand( "devgui_cmd "Zombies:1/Players:1/Player:1/" + players[ i ].name + "/Give Money:1" "set zombie_devgui player" + ip1 + "_money" \n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Players:1/Player:1/" + players[ i ].name + "/Invulnerable:2" "set zombie_devgui player" + ip1 + "_invul_on" \n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Players:1/Player:1/" + players[ i ].name + "/Vulnerable:3" "set zombie_devgui player" + ip1 + "_invul_off" \n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Players:1/Player:1/" + players[ i ].name + "/Toggle Ignored:4" "set zombie_devgui player" + ip1 + "_ignore" \n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Players:1/Player:1/" + players[ i ].name + "/Mega Health:5" "set zombie_devgui player" + ip1 + "_health" \n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Players:1/Player:1/" + players[ i ].name + "/Down:6" "set zombie_devgui player" + ip1 + "_kill" \n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Players:1/Player:1/" + players[ i ].name + "/Revive:7" "set zombie_devgui player" + ip1 + "_revive" \n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Players:1/Player:1/" + players[ i ].name + "/Turn Player:8" "set zombie_devgui player" + ip1 + "_turnplayer" \n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Players:1/Player:1/" + players[ i ].name + "/Debug Pers:9" "set zombie_devgui player" + ip1 + "_debug_pers" \n" ); - i++; -#/ - } -} - -devgui_add_weapon_entry( hint, up, weapon_name ) -{ -/# - uppath = "/" + up; - if ( up.size < 1 ) - { - uppath = ""; - } - cmd = "devgui_cmd "Zombies:1/Weapons:10/" + hint + uppath + "" "set zombie_devgui_gun " + weapon_name + "" \n"; - adddebugcommand( cmd ); -#/ -} - -devgui_add_weapon_and_attachments( hint, up, weapon_name ) -{ -/# - devgui_add_weapon_entry( hint, up, weapon_name ); -#/ -} - -devgui_add_weapon( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp, ammo_cost ) -{ -/# - if ( is_offhand_weapon( weapon_name ) ) - { - return; - } - if ( isDefined( level.devgui_weapons_added ) && level.devgui_weapons_added > 34 ) - { - return; - } - if ( !isDefined( level.devgui_weapons_added ) ) - { - level.devgui_weapons_added = 0; - } - level.devgui_weapons_added++; - devgui_add_weapon_and_attachments( weapon_name, "", weapon_name ); -#/ -} - -zombie_weapon_devgui_think() -{ -/# - level.zombie_devgui_gun = getDvar( #"CE4F9F97" ); - level.zombie_devgui_att = getDvar( #"A965F402" ); - for ( ;; ) - { - wait 0,25; - cmd = getDvar( #"CE4F9F97" ); - if ( !isDefined( level.zombie_devgui_gun ) || level.zombie_devgui_gun != cmd ) - { - level.zombie_devgui_gun = cmd; - array_thread( get_players(), ::zombie_devgui_weapon_give, level.zombie_devgui_gun ); - } - wait 0,25; - att = getDvar( #"A965F402" ); - if ( !isDefined( level.zombie_devgui_att ) || level.zombie_devgui_att != att ) - { - level.zombie_devgui_att = att; - array_thread( get_players(), ::zombie_devgui_attachment_give, level.zombie_devgui_att ); - } -#/ - } -} - -zombie_devgui_weapon_give( gun ) -{ -/# - self maps/mp/zombies/_zm_weapons::weapon_give( gun, is_weapon_upgraded( gun ), 0 ); -#/ -} - -zombie_devgui_attachment_give( gun ) -{ -/# - newgun = maps/mp/zombies/_zm_weapons::get_base_name( self getcurrentweapon() ) + "+" + gun; - self maps/mp/zombies/_zm_weapons::weapon_give( newgun, is_weapon_upgraded( gun ), 0 ); -#/ -} - -zombie_devgui_watch_input() -{ -/# - flag_wait( "start_zombie_round_logic" ); - wait 1; - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] thread watch_debug_input(); - i++; -#/ - } -} - -damage_player() -{ -/# - self disableinvulnerability(); - self dodamage( self.health / 2, self.origin ); -#/ -} - -kill_player() -{ -/# - self disableinvulnerability(); - death_from = ( randomfloatrange( -20, 20 ), randomfloatrange( -20, 20 ), randomfloatrange( -20, 20 ) ); - self dodamage( self.health + 666, self.origin + death_from ); -#/ -} - -force_drink() -{ -/# - wait 0,01; - lean = self allowlean( 0 ); - ads = self allowads( 0 ); - sprint = self allowsprint( 0 ); - crouch = self allowcrouch( 1 ); - prone = self allowprone( 0 ); - melee = self allowmelee( 0 ); - self increment_is_drinking(); - orgweapon = self getcurrentweapon(); - self giveweapon( "zombie_builder_zm" ); - self switchtoweapon( "zombie_builder_zm" ); - self.build_time = self.usetime; - self.build_start_time = getTime(); - wait 2; - self maps/mp/zombies/_zm_weapons::switch_back_primary_weapon( orgweapon ); - self takeweapon( "zombie_builder_zm" ); - if ( is_true( self.is_drinking ) ) - { - self decrement_is_drinking(); - } - self allowlean( lean ); - self allowads( ads ); - self allowsprint( sprint ); - self allowprone( prone ); - self allowcrouch( crouch ); - self allowmelee( melee ); -#/ -} - -zombie_devgui_dpad_none() -{ -/# - self thread watch_debug_input(); -#/ -} - -zombie_devgui_dpad_death() -{ -/# - self thread watch_debug_input( ::kill_player ); -#/ -} - -zombie_devgui_dpad_damage() -{ -/# - self thread watch_debug_input( ::damage_player ); -#/ -} - -zombie_devgui_dpad_changeweapon() -{ -/# - self thread watch_debug_input( ::force_drink ); -#/ -} - -watch_debug_input( callback ) -{ -/# - self endon( "disconnect" ); - self notify( "watch_debug_input" ); - self endon( "watch_debug_input" ); - level.devgui_dpad_watch = 0; - while ( isDefined( callback ) ) - { - level.devgui_dpad_watch = 1; - for ( ;; ) - { - while ( self actionslottwobuttonpressed() ) - { - self thread [[ callback ]](); - while ( self actionslottwobuttonpressed() ) - { - wait 0,05; - } - } - wait 0,05; -#/ - } - } -} - -zombie_devgui_think() -{ -/# - for ( ;; ) - { - cmd = getDvar( "zombie_devgui" ); - switch( cmd ) - { - case "money": - players = get_players(); - array_thread( players, ::zombie_devgui_give_money ); - break; - case "player1_money": - players = get_players(); - if ( players.size >= 1 ) - { - players[ 0 ] thread zombie_devgui_give_money(); - } - break; - case "player2_money": - players = get_players(); - if ( players.size >= 2 ) - { - players[ 1 ] thread zombie_devgui_give_money(); - } - break; - case "player3_money": - players = get_players(); - if ( players.size >= 3 ) - { - players[ 2 ] thread zombie_devgui_give_money(); - } - break; - case "player4_money": - players = get_players(); - if ( players.size >= 4 ) - { - players[ 3 ] thread zombie_devgui_give_money(); - } - break; - case "health": - array_thread( get_players(), ::zombie_devgui_give_health ); - break; - case "player1_health": - players = get_players(); - if ( players.size >= 1 ) - { - players[ 0 ] thread zombie_devgui_give_health(); - } - break; - case "player2_health": - players = get_players(); - if ( players.size >= 2 ) - { - players[ 1 ] thread zombie_devgui_give_health(); - } - break; - case "player3_health": - players = get_players(); - if ( players.size >= 3 ) - { - players[ 2 ] thread zombie_devgui_give_health(); - } - break; - case "player4_health": - players = get_players(); - if ( players.size >= 4 ) - { - players[ 3 ] thread zombie_devgui_give_health(); - } - break; - case "ammo": - array_thread( get_players(), ::zombie_devgui_toggle_ammo ); - break; - case "ignore": - array_thread( get_players(), ::zombie_devgui_toggle_ignore ); - break; - case "player1_ignore": - players = get_players(); - if ( players.size >= 1 ) - { - players[ 0 ] thread zombie_devgui_toggle_ignore(); - } - break; - case "player2_ignore": - players = get_players(); - if ( players.size >= 2 ) - { - players[ 1 ] thread zombie_devgui_toggle_ignore(); - } - break; - case "player3_ignore": - players = get_players(); - if ( players.size >= 3 ) - { - players[ 2 ] thread zombie_devgui_toggle_ignore(); - } - break; - case "player4_ignore": - players = get_players(); - if ( players.size >= 4 ) - { - players[ 3 ] thread zombie_devgui_toggle_ignore(); - } - break; - case "invul_on": - zombie_devgui_invulnerable( undefined, 1 ); - break; - case "invul_off": - zombie_devgui_invulnerable( undefined, 0 ); - break; - case "player1_invul_on": - zombie_devgui_invulnerable( 0, 1 ); - break; - case "player1_invul_off": - zombie_devgui_invulnerable( 0, 0 ); - break; - case "player2_invul_on": - zombie_devgui_invulnerable( 1, 1 ); - break; - case "player2_invul_off": - zombie_devgui_invulnerable( 1, 0 ); - break; - case "player3_invul_on": - zombie_devgui_invulnerable( 2, 1 ); - break; - case "player3_invul_off": - zombie_devgui_invulnerable( 2, 0 ); - break; - case "player4_invul_on": - zombie_devgui_invulnerable( 3, 1 ); - break; - case "player4_invul_off": - zombie_devgui_invulnerable( 3, 0 ); - break; - case "revive_all": - array_thread( get_players(), ::zombie_devgui_revive ); - break; - case "player1_revive": - players = get_players(); - if ( players.size >= 1 ) - { - players[ 0 ] thread zombie_devgui_revive(); - } - break; - case "player2_revive": - players = get_players(); - if ( players.size >= 2 ) - { - players[ 1 ] thread zombie_devgui_revive(); - } - break; - case "player3_revive": - players = get_players(); - if ( players.size >= 3 ) - { - players[ 2 ] thread zombie_devgui_revive(); - } - break; - case "player4_revive": - players = get_players(); - if ( players.size >= 4 ) - { - players[ 3 ] thread zombie_devgui_revive(); - } - break; - case "player1_kill": - players = get_players(); - if ( players.size >= 1 ) - { - players[ 0 ] thread zombie_devgui_kill(); - } - break; - case "player2_kill": - players = get_players(); - if ( players.size >= 2 ) - { - players[ 1 ] thread zombie_devgui_kill(); - } - break; - case "player3_kill": - players = get_players(); - if ( players.size >= 3 ) - { - players[ 2 ] thread zombie_devgui_kill(); - } - break; - case "player4_kill": - players = get_players(); - if ( players.size >= 4 ) - { - players[ 3 ] thread zombie_devgui_kill(); - } - break; - case "spawn_friendly_bot": - player = gethostplayer(); - team = player.team; - devgui_bot_spawn( team ); - break; - case "specialty_additionalprimaryweapon": - case "specialty_armorvest": - case "specialty_deadshot": - case "specialty_fastreload": - case "specialty_finalstand": - case "specialty_flakjacket": - case "specialty_grenadepulldeath": - case "specialty_longersprint": - case "specialty_nomotionsensor": - case "specialty_quickrevive": - case "specialty_rof": - case "specialty_scavenger": - zombie_devgui_give_perk( cmd ); - break; - case "turnplayer": - zombie_devgui_turn_player(); - break; - case "player1_turnplayer": - zombie_devgui_turn_player( 0 ); - break; - case "player2_turnplayer": - zombie_devgui_turn_player( 1 ); - break; - case "player3_turnplayer": - zombie_devgui_turn_player( 2 ); - break; - case "player4_turnplayer": - zombie_devgui_turn_player( 3 ); - break; - case "player1_debug_pers": - zombie_devgui_debug_pers( 0 ); - break; - case "player2_debug_pers": - zombie_devgui_debug_pers( 1 ); - break; - case "player3_debug_pers": - zombie_devgui_debug_pers( 2 ); - break; - case "player4_debug_pers": - zombie_devgui_debug_pers( 3 ); - break; - case "bonfire_sale": - case "bonus_points_player": - case "bonus_points_team": - case "carpenter": - case "double_points": - case "empty_clip": - case "fire_sale": - case "free_perk": - case "full_ammo": - case "insta_kill": - case "lose_perk": - case "lose_points_team": - case "meat_stink": - case "minigun": - case "nuke": - case "random_weapon": - case "tesla": - zombie_devgui_give_powerup( cmd, 1 ); - break; - case "next_bonfire_sale": - case "next_bonus_points_player": - case "next_bonus_points_team": - case "next_carpenter": - case "next_double_points": - case "next_empty_clip": - case "next_fire_sale": - case "next_free_perk": - case "next_full_ammo": - case "next_insta_kill": - case "next_lose_perk": - case "next_lose_points_team": - case "next_meat_stink": - case "next_minigun": - case "next_nuke": - case "next_random_weapon": - case "next_tesla": - zombie_devgui_give_powerup( getsubstr( cmd, 5 ), 0 ); - break; - case "round": - zombie_devgui_goto_round( getDvarInt( "scr_zombie_round" ) ); - break; - case "round_next": - zombie_devgui_goto_round( level.round_number + 1 ); - break; - case "round_prev": - zombie_devgui_goto_round( level.round_number - 1 ); - break; - case "chest_move": - if ( isDefined( level.chest_accessed ) ) - { - level notify( "devgui_chest_end_monitor" ); - level.chest_accessed = 100; - } - break; - case "chest_never_move": - if ( isDefined( level.chest_accessed ) ) - { - level thread zombie_devgui_chest_never_move(); - } - break; - case "chest": - if ( isDefined( level.zombie_weapons[ getDvar( "scr_force_weapon" ) ] ) ) - { - } - break; - case "quantum_bomb_random_result": - setdvar( "scr_force_quantum_bomb_result", "" ); - break; - case "give_gasmask": - array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_gasmask_zm" ); - break; - case "give_hacker": - array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_hacker_zm" ); - break; - case "give_turbine": - array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_turbine_zm" ); - break; - case "give_turret": - array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_turret_zm" ); - break; - case "give_electrictrap": - array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_electrictrap_zm" ); - break; - case "give_riotshield": - array_thread( get_players(), ::zombie_devgui_equipment_give, "riotshield_zm" ); - break; - case "give_jetgun": - array_thread( get_players(), ::zombie_devgui_equipment_give, "jetgun_zm" ); - break; - case "give_springpad": - array_thread( get_players(), ::zombie_devgui_equipment_give, "equip_springpad_zm" ); - break; - case "cool_jetgun": - array_thread( get_players(), ::zombie_devgui_cool_jetgun ); - break; - case "preserve_turbines": - array_thread( get_players(), ::zombie_devgui_preserve_turbines ); - break; - case "healthy_equipment": - array_thread( get_players(), ::zombie_devgui_equipment_stays_healthy ); - break; - case "disown_equipment": - array_thread( get_players(), ::zombie_devgui_disown_equipment ); - break; - case "buildable_drop": - array_thread( get_players(), ::zombie_devgui_buildable_drop ); - break; - case "build_busladder": - zombie_devgui_build( "busladder" ); - break; - case "build_bushatch": - zombie_devgui_build( "bushatch" ); - break; - case "build_dinerhatch": - zombie_devgui_build( "dinerhatch" ); - break; - case "build_cattlecatcher": - zombie_devgui_build( "cattlecatcher" ); - break; - case "build_pap": - zombie_devgui_build( "pap" ); - break; - case "build_riotshield_zm": - zombie_devgui_build( "riotshield_zm" ); - break; - case "build_powerswitch": - zombie_devgui_build( "powerswitch" ); - break; - case "build_turbine": - zombie_devgui_build( "turbine" ); - break; - case "build_turret": - zombie_devgui_build( "turret" ); - break; - case "build_electric_trap": - zombie_devgui_build( "electric_trap" ); - break; - case "build_jetgun_zm": - zombie_devgui_build( "jetgun_zm" ); - break; - case "build_sq_common": - zombie_devgui_build( "sq_common" ); - break; - case "build_springpad": - zombie_devgui_build( "springpad_zm" ); - break; - case "build_slipgun": - zombie_devgui_build( "slipgun_zm" ); - break; - case "build_keys": - zombie_devgui_build( "keys_zm" ); - break; - case "give_claymores": - array_thread( get_players(), ::zombie_devgui_give_claymores ); - break; - case "give_monkey": - array_thread( get_players(), ::zombie_devgui_give_monkey ); - break; - case "give_black_hole_bomb": - array_thread( get_players(), ::zombie_devgui_give_black_hole_bomb ); - break; - case "give_dolls": - array_thread( get_players(), ::zombie_devgui_give_dolls ); - break; - case "give_quantum_bomb": - array_thread( get_players(), ::zombie_devgui_give_quantum_bomb ); - break; - case "give_emp_bomb": - array_thread( get_players(), ::zombie_devgui_give_emp_bomb ); - break; - case "monkey_round": - zombie_devgui_monkey_round(); - break; - case "thief_round": - zombie_devgui_thief_round(); - break; - case "dog_round": - zombie_devgui_dog_round( getDvarInt( "scr_zombie_dogs" ) ); - break; - case "dog_round_skip": - zombie_devgui_dog_round_skip(); - break; - case "print_variables": - zombie_devgui_dump_zombie_vars(); - break; - case "pack_current_weapon": - zombie_devgui_pack_current_weapon(); - break; - case "unpack_current_weapon": - zombie_devgui_unpack_current_weapon(); - break; - case "reopt_current_weapon": - zombie_devgui_reopt_current_weapon(); - break; - case "power_on": - flag_set( "power_on" ); - break; - case "power_off": - flag_clear( "power_on" ); - break; - case "zombie_dpad_none": - array_thread( get_players(), ::zombie_devgui_dpad_none ); - break; - case "zombie_dpad_damage": - array_thread( get_players(), ::zombie_devgui_dpad_damage ); - break; - case "zombie_dpad_kill": - array_thread( get_players(), ::zombie_devgui_dpad_death ); - break; - case "zombie_dpad_drink": - array_thread( get_players(), ::zombie_devgui_dpad_changeweapon ); - break; - case "director_easy": - zombie_devgui_director_easy(); - break; - case "open_sesame": - zombie_devgui_open_sesame(); - break; - case "allow_fog": - zombie_devgui_allow_fog(); - break; - case "disable_kill_thread_toggle": - zombie_devgui_disable_kill_thread_toggle(); - break; - case "check_kill_thread_every_frame_toggle": - zombie_devgui_check_kill_thread_every_frame_toggle(); - break; - case "kill_thread_test_mode_toggle": - zombie_devgui_kill_thread_test_mode_toggle(); - break; - case "zombie_failsafe_debug_flush": - level notify( "zombie_failsafe_debug_flush" ); - break; - case "spawn": - devgui_zombie_spawn(); - break; - case "spawn_all": - devgui_all_spawn(); - break; - case "": - default: - if ( isDefined( level.custom_devgui ) ) - { - [[ level.custom_devgui ]]( cmd ); - break; - } - } - setdvar( "zombie_devgui", "" ); - wait 0,5; -#/ - } - } - } -} - -devgui_all_spawn() -{ -/# - player = gethostplayer(); - devgui_bot_spawn( player.team ); - wait 0,1; - devgui_bot_spawn( player.team ); - wait 0,1; - devgui_bot_spawn( player.team ); - wait 0,1; - zombie_devgui_goto_round( 8 ); -#/ -} - -devgui_zombie_spawn() -{ -/# - player = get_players()[ 0 ]; - spawnername = undefined; - spawnername = "zombie_spawner"; - direction = player getplayerangles(); - direction_vec = anglesToForward( direction ); - eye = player geteye(); - scale = 8000; - direction_vec = ( direction_vec[ 0 ] * scale, direction_vec[ 1 ] * scale, direction_vec[ 2 ] * scale ); - trace = bullettrace( eye, eye + direction_vec, 0, undefined ); - guy = undefined; - spawners = getentarray( spawnername, "script_noteworthy" ); - spawner = spawners[ 0 ]; - guy = maps/mp/zombies/_zm_utility::spawn_zombie( spawner ); - if ( isDefined( guy ) ) - { - guy.favoriteenemy = player; - guy.script_string = "zombie_chaser"; - guy thread maps/mp/zombies/_zm_spawner::zombie_spawn_init(); - wait 0,5; - guy.origin = trace[ "position" ]; - guy.angles = player.angles + vectorScale( ( 0, 1, 0 ), 180 ); - guy forceteleport( trace[ "position" ], player.angles + vectorScale( ( 0, 1, 0 ), 180 ) ); -#/ - } -} - -devgui_bot_spawn( team ) -{ -/# - player = gethostplayer(); - direction = player getplayerangles(); - direction_vec = anglesToForward( direction ); - eye = player geteye(); - scale = 8000; - direction_vec = ( direction_vec[ 0 ] * scale, direction_vec[ 1 ] * scale, direction_vec[ 2 ] * scale ); - trace = bullettrace( eye, eye + direction_vec, 0, undefined ); - direction_vec = player.origin - trace[ "position" ]; - direction = vectorToAngle( direction_vec ); - bot = addtestclient(); - if ( !isDefined( bot ) ) - { - println( "Could not add test client" ); - return; - } - bot.pers[ "isBot" ] = 1; - bot.equipment_enabled = 0; - bot maps/mp/zombies/_zm::reset_rampage_bookmark_kill_times(); - bot.team = "allies"; - bot._player_entnum = bot getentitynumber(); - yaw = direction[ 1 ]; - bot thread devgui_bot_spawn_think( trace[ "position" ], yaw ); -#/ -} - -devgui_bot_spawn_think( origin, yaw ) -{ -/# - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self setorigin( origin ); - angles = ( 0, yaw, 0 ); - self setplayerangles( angles ); -#/ - } -} - -zombie_devgui_open_sesame() -{ -/# - setdvar( "zombie_unlock_all", 1 ); - flag_set( "power_on" ); - players = get_players(); - array_thread( players, ::zombie_devgui_give_money ); - zombie_doors = getentarray( "zombie_door", "targetname" ); - i = 0; - while ( i < zombie_doors.size ) - { - zombie_doors[ i ] notify( "trigger" ); - if ( is_true( zombie_doors[ i ].power_door_ignore_flag_wait ) ) - { - zombie_doors[ i ] notify( "power_on" ); - } - wait 0,05; - i++; - } - zombie_airlock_doors = getentarray( "zombie_airlock_buy", "targetname" ); - i = 0; - while ( i < zombie_airlock_doors.size ) - { - zombie_airlock_doors[ i ] notify( "trigger" ); - wait 0,05; - i++; - } - zombie_debris = getentarray( "zombie_debris", "targetname" ); - i = 0; - while ( i < zombie_debris.size ) - { - zombie_debris[ i ] notify( "trigger" ); - wait 0,05; - i++; - } - zombie_devgui_build( undefined ); - level notify( "open_sesame" ); - wait 1; - setdvar( "zombie_unlock_all", 0 ); -#/ -} - -any_player_in_noclip() -{ -/# - _a923 = get_players(); - _k923 = getFirstArrayKey( _a923 ); - while ( isDefined( _k923 ) ) - { - player = _a923[ _k923 ]; - if ( player isinmovemode( "ufo", "noclip" ) ) - { - return 1; - } - _k923 = getNextArrayKey( _a923, _k923 ); - } - return 0; -#/ -} - -diable_fog_in_noclip() -{ -/# - level.fog_disabled_in_noclip = 1; - level endon( "allowfoginnoclip" ); - flag_wait( "start_zombie_round_logic" ); - while ( 1 ) - { - while ( !any_player_in_noclip() ) - { - wait 1; - } - setdvar( "scr_fog_disable", "1" ); - setdvar( "r_fog_disable", "1" ); - if ( isDefined( level.culldist ) ) - { - setculldist( 0 ); - } - while ( any_player_in_noclip() ) - { - wait 1; - } - setdvar( "scr_fog_disable", "0" ); - setdvar( "r_fog_disable", "0" ); - if ( isDefined( level.culldist ) ) - { - setculldist( level.culldist ); - } -#/ - } -} - -zombie_devgui_allow_fog() -{ -/# - if ( level.fog_disabled_in_noclip ) - { - level notify( "allowfoginnoclip" ); - level.fog_disabled_in_noclip = 0; - setdvar( "scr_fog_disable", "0" ); - setdvar( "r_fog_disable", "0" ); - } - else - { - thread diable_fog_in_noclip(); -#/ - } -} - -zombie_devgui_give_money() -{ -/# - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - level.devcheater = 1; - self maps/mp/zombies/_zm_score::add_to_player_score( 100000 ); -#/ -} - -zombie_devgui_turn_player( index ) -{ -/# - players = get_players(); - if ( !isDefined( index ) || index >= players.size ) - { - player = players[ 0 ]; - } - else - { - player = players[ index ]; - } - assert( isDefined( player ) ); - assert( isplayer( player ) ); - assert( isalive( player ) ); - level.devcheater = 1; - if ( player hasperk( "specialty_noname" ) ) - { - println( "Player turned HUMAN" ); - player maps/mp/zombies/_zm_turned::turn_to_human(); - } - else - { - println( "Player turned ZOMBIE" ); - player maps/mp/zombies/_zm_turned::turn_to_zombie(); -#/ - } -} - -zombie_devgui_debug_pers( index ) -{ -/# - players = get_players(); - if ( !isDefined( index ) || index >= players.size ) - { - player = players[ 0 ]; - } - else - { - player = players[ index ]; - } - assert( isDefined( player ) ); - assert( isplayer( player ) ); - assert( isalive( player ) ); - level.devcheater = 1; - println( "\n\n----------------------------------------------------------------------------------------------" ); - println( "Active Persistent upgrades [count=" + level.pers_upgrades_keys.size + "]" ); - pers_upgrade_index = 0; - while ( pers_upgrade_index < level.pers_upgrades_keys.size ) - { - name = level.pers_upgrades_keys[ pers_upgrade_index ]; - println( ( pers_upgrade_index + ">pers_upgrade name = " ) + name ); - pers_upgrade = level.pers_upgrades[ name ]; - i = 0; - while ( i < pers_upgrade.stat_names.size ) - { - stat_name = pers_upgrade.stat_names[ i ]; - stat_desired_value = pers_upgrade.stat_desired_values[ i ]; - player_current_stat_value = player maps/mp/zombies/_zm_stats::get_global_stat( stat_name ); - println( " " + i + ")stat_name = " + stat_name ); - println( " " + i + ")stat_desired_values = " + stat_desired_value ); - println( " " + i + ")player_current_stat_value = " + player_current_stat_value ); - i++; - } - if ( is_true( player.pers_upgrades_awarded[ name ] ) ) - { - println( "PLAYER HAS - " + name ); - pers_upgrade_index++; - continue; - } - else - { - println( "PLAYER DOES NOT HAVE - " + name ); - } - pers_upgrade_index++; - } - println( "----------------------------------------------------------------------------------------------\n\n" ); -#/ -} - -zombie_devgui_cool_jetgun() -{ -/# - if ( isDefined( level.zm_devgui_jetgun_never_overheat ) ) - { - self thread [[ level.zm_devgui_jetgun_never_overheat ]](); -#/ - } -} - -zombie_devgui_preserve_turbines() -{ -/# - self endon( "disconnect" ); - self notify( "preserve_turbines" ); - self endon( "preserve_turbines" ); - while ( !is_true( self.preserving_turbines ) ) - { - self.preserving_turbines = 1; - while ( 1 ) - { - self.turbine_health = 1200; - wait 1; - } - } - self.preserving_turbines = 0; -#/ -} - -zombie_devgui_equipment_stays_healthy() -{ -/# - self endon( "disconnect" ); - self notify( "preserve_equipment" ); - self endon( "preserve_equipment" ); - while ( !is_true( self.preserving_equipment ) ) - { - self.preserving_equipment = 1; - while ( 1 ) - { - self.equipment_damage = []; - wait 0,1; - } - } - self.preserving_equipment = 0; -#/ -} - -zombie_devgui_disown_equipment() -{ -/# - self.deployed_equipment = []; -#/ -} - -zombie_devgui_equipment_give( equipment ) -{ -/# - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - level.devcheater = 1; - if ( is_equipment_included( equipment ) ) - { - self maps/mp/zombies/_zm_equipment::equipment_buy( equipment ); -#/ - } -} - -zombie_devgui_buildable_drop() -{ -/# - self maps/mp/zombies/_zm_buildables::player_drop_piece(); -#/ -} - -zombie_devgui_build( buildable ) -{ -/# - player = get_players()[ 0 ]; - i = 0; - while ( i < level.buildable_stubs.size ) - { - if ( !isDefined( buildable ) || level.buildable_stubs[ i ].equipname == buildable ) - { - if ( isDefined( buildable ) || level.buildable_stubs[ i ].persistent != 3 ) - { - level.buildable_stubs[ i ] maps/mp/zombies/_zm_buildables::buildablestub_finish_build( player ); - } - } - i++; -#/ - } -} - -zombie_devgui_give_claymores() -{ -/# - self endon( "disconnect" ); - self notify( "give_planted_grenade_thread" ); - self endon( "give_planted_grenade_thread" ); - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - level.devcheater = 1; - if ( isDefined( self get_player_placeable_mine() ) ) - { - self takeweapon( self get_player_placeable_mine() ); - } - self thread maps/mp/zombies/_zm_weap_claymore::claymore_setup(); - while ( 1 ) - { - self givemaxammo( "claymore_zm" ); - wait 1; -#/ - } -} - -zombie_devgui_give_monkey() -{ -/# - self endon( "disconnect" ); - self notify( "give_tactical_grenade_thread" ); - self endon( "give_tactical_grenade_thread" ); - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - level.devcheater = 1; - if ( isDefined( self get_player_tactical_grenade() ) ) - { - self takeweapon( self get_player_tactical_grenade() ); - } - while ( isDefined( level.zombiemode_devgui_cymbal_monkey_give ) ) - { - self [[ level.zombiemode_devgui_cymbal_monkey_give ]](); - while ( 1 ) - { - self givemaxammo( "cymbal_monkey_zm" ); - wait 1; -#/ - } - } -} - -zombie_devgui_give_black_hole_bomb() -{ -/# - self endon( "disconnect" ); - self notify( "give_tactical_grenade_thread" ); - self endon( "give_tactical_grenade_thread" ); - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - level.devcheater = 1; - if ( isDefined( self get_player_tactical_grenade() ) ) - { - self takeweapon( self get_player_tactical_grenade() ); - } - while ( isDefined( level.zombiemode_devgui_black_hole_bomb_give ) ) - { - self [[ level.zombiemode_devgui_black_hole_bomb_give ]](); - while ( 1 ) - { - self givemaxammo( "zombie_black_hole_bomb" ); - wait 1; -#/ - } - } -} - -zombie_devgui_give_dolls() -{ -/# - self endon( "disconnect" ); - self notify( "give_tactical_grenade_thread" ); - self endon( "give_tactical_grenade_thread" ); - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - level.devcheater = 1; - if ( isDefined( self get_player_tactical_grenade() ) ) - { - self takeweapon( self get_player_tactical_grenade() ); - } - while ( isDefined( level.zombiemode_devgui_nesting_dolls_give ) ) - { - self [[ level.zombiemode_devgui_nesting_dolls_give ]](); - while ( 1 ) - { - self givemaxammo( "zombie_nesting_dolls" ); - wait 1; -#/ - } - } -} - -zombie_devgui_give_quantum_bomb() -{ -/# - self endon( "disconnect" ); - self notify( "give_tactical_grenade_thread" ); - self endon( "give_tactical_grenade_thread" ); - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - level.devcheater = 1; - if ( isDefined( self get_player_tactical_grenade() ) ) - { - self takeweapon( self get_player_tactical_grenade() ); - } - while ( isDefined( level.zombiemode_devgui_quantum_bomb_give ) ) - { - self [[ level.zombiemode_devgui_quantum_bomb_give ]](); - while ( 1 ) - { - self givemaxammo( "zombie_quantum_bomb" ); - wait 1; -#/ - } - } -} - -zombie_devgui_give_emp_bomb() -{ -/# - self endon( "disconnect" ); - self notify( "give_tactical_grenade_thread" ); - self endon( "give_tactical_grenade_thread" ); - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - level.devcheater = 1; - if ( isDefined( self get_player_tactical_grenade() ) ) - { - self takeweapon( self get_player_tactical_grenade() ); - } - while ( isDefined( level.zombiemode_devgui_emp_bomb_give ) ) - { - self [[ level.zombiemode_devgui_emp_bomb_give ]](); - while ( 1 ) - { - self givemaxammo( "emp_grenade_zm" ); - wait 1; -#/ - } - } -} - -zombie_devgui_invulnerable( playerindex, onoff ) -{ -/# - players = get_players(); - if ( !isDefined( playerindex ) ) - { - i = 0; - while ( i < players.size ) - { - zombie_devgui_invulnerable( i, onoff ); - i++; - } - } - else if ( players.size > playerindex ) - { - if ( onoff ) - { - players[ playerindex ] enableinvulnerability(); - return; - } - else - { - players[ playerindex ] disableinvulnerability(); -#/ - } - } -} - -zombie_devgui_kill() -{ -/# - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - self disableinvulnerability(); - death_from = ( randomfloatrange( -20, 20 ), randomfloatrange( -20, 20 ), randomfloatrange( -20, 20 ) ); - self dodamage( self.health + 666, self.origin + death_from ); -#/ -} - -zombie_devgui_toggle_ammo() -{ -/# - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - self notify( "devgui_toggle_ammo" ); - self endon( "devgui_toggle_ammo" ); - self.ammo4evah = !is_true( self.ammo4evah ); - while ( isDefined( self ) && self.ammo4evah ) - { - weapon = self getcurrentweapon(); - if ( weapon != "none" ) - { - max = weaponmaxammo( weapon ); - if ( isDefined( max ) ) - { - self setweaponammostock( weapon, max ); - } - } - wait 1; -#/ - } -} - -zombie_devgui_toggle_ignore() -{ -/# - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - self.ignoreme = !self.ignoreme; - if ( self.ignoreme ) - { - setdvar( "ai_showFailedPaths", 0 ); -#/ - } -} - -zombie_devgui_revive() -{ -/# - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - self reviveplayer(); - self notify( "stop_revive_trigger" ); - if ( isDefined( self.revivetrigger ) ) - { - self.revivetrigger delete(); - self.revivetrigger = undefined; - } - self allowjump( 1 ); - self.ignoreme = 0; - self.laststand = undefined; - self notify( "player_revived" ); -#/ -} - -zombie_devgui_give_health() -{ -/# - assert( isDefined( self ) ); - assert( isplayer( self ) ); - assert( isalive( self ) ); - self notify( "devgui_health" ); - self endon( "devgui_health" ); - self endon( "disconnect" ); - self endon( "death" ); - level.devcheater = 1; - while ( 1 ) - { - self.maxhealth = 100000; - self.health = 100000; - self waittill_any( "player_revived", "perk_used", "spawned_player" ); - wait 2; -#/ - } -} - -zombie_devgui_give_perk( perk ) -{ -/# - vending_triggers = getentarray( "zombie_vending", "targetname" ); - player = get_players()[ 0 ]; - level.devcheater = 1; - if ( vending_triggers.size < 1 ) - { - return; - } - i = 0; - while ( i < vending_triggers.size ) - { - if ( vending_triggers[ i ].script_noteworthy == perk ) - { - vending_triggers[ i ] notify( "trigger" ); - return; - } - i++; -#/ - } -} - -zombie_devgui_give_powerup( powerup_name, now ) -{ -/# - player = get_players()[ 0 ]; - found = 0; - level.devcheater = 1; - i = 0; - while ( i < level.zombie_powerup_array.size ) - { - if ( level.zombie_powerup_array[ i ] == powerup_name ) - { - level.zombie_powerup_index = i; - found = 1; - break; - } - else - { - i++; - } - } - if ( !found ) - { - return; - } - direction = player getplayerangles(); - direction_vec = anglesToForward( direction ); - eye = player geteye(); - scale = 8000; - direction_vec = ( direction_vec[ 0 ] * scale, direction_vec[ 1 ] * scale, direction_vec[ 2 ] * scale ); - trace = bullettrace( eye, eye + direction_vec, 0, undefined ); - level.zombie_devgui_power = 1; - level.zombie_vars[ "zombie_drop_item" ] = 1; - level.powerup_drop_count = 0; - if ( !isDefined( now ) || now ) - { - level thread maps/mp/zombies/_zm_powerups::powerup_drop( trace[ "position" ] ); -#/ - } -} - -zombie_devgui_goto_round( target_round ) -{ -/# - player = get_players()[ 0 ]; - if ( target_round < 1 ) - { - target_round = 1; - } - level.devcheater = 1; - level.zombie_total = 0; - maps/mp/zombies/_zm::ai_calculate_health( target_round ); - level.round_number = target_round - 1; - level notify( "kill_round" ); - wait 1; - zombies = get_round_enemy_array(); - while ( isDefined( zombies ) ) - { - i = 0; - while ( i < zombies.size ) - { - if ( is_true( zombies[ i ].ignore_devgui_death ) ) - { - i++; - continue; - } - else - { - zombies[ i ] dodamage( zombies[ i ].health + 666, zombies[ i ].origin ); - } - i++; -#/ - } - } -} - -zombie_devgui_monkey_round() -{ -/# - if ( isDefined( level.next_monkey_round ) ) - { - zombie_devgui_goto_round( level.next_monkey_round ); -#/ - } -} - -zombie_devgui_thief_round() -{ -/# - if ( isDefined( level.next_thief_round ) ) - { - zombie_devgui_goto_round( level.next_thief_round ); -#/ - } -} - -zombie_devgui_dog_round( num_dogs ) -{ -/# - if ( !isDefined( level.dogs_enabled ) || !level.dogs_enabled ) - { - return; - } - if ( !isDefined( level.dog_rounds_enabled ) || !level.dog_rounds_enabled ) - { - return; - } - if ( !isDefined( level.enemy_dog_spawns ) || level.enemy_dog_spawns.size < 1 ) - { - return; - } - if ( !flag( "dog_round" ) ) - { - setdvar( "force_dogs", num_dogs ); - } - zombie_devgui_goto_round( level.round_number + 1 ); -#/ -} - -zombie_devgui_dog_round_skip() -{ -/# - if ( isDefined( level.next_dog_round ) ) - { - zombie_devgui_goto_round( level.next_dog_round ); -#/ - } -} - -zombie_devgui_dump_zombie_vars() -{ -/# - if ( !isDefined( level.zombie_vars ) ) - { - return; - } - if ( level.zombie_vars.size > 0 ) - { - println( "#### Zombie Variables ####" ); - } - else - { - return; - } - var_names = getarraykeys( level.zombie_vars ); - i = 0; - while ( i < level.zombie_vars.size ) - { - key = var_names[ i ]; - println( ( key + ": " ) + level.zombie_vars[ key ] ); - i++; - } - println( "##### End Zombie Variables #####" ); -#/ -} - -zombie_devgui_pack_current_weapon() -{ -/# - players = get_players(); - reviver = players[ 0 ]; - level.devcheater = 1; - i = 0; - while ( i < players.size ) - { - if ( !players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - weap = maps/mp/zombies/_zm_weapons::get_base_name( players[ i ] getcurrentweapon() ); - weapon = get_upgrade( weap ); - if ( isDefined( weapon ) ) - { - players[ i ] takeweapon( weap ); - players[ i ] giveweapon( weapon, 0, players[ i ] maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); - players[ i ] givestartammo( weapon ); - players[ i ] switchtoweapon( weapon ); - } - } - i++; -#/ - } -} - -zombie_devgui_unpack_current_weapon() -{ -/# - players = get_players(); - reviver = players[ 0 ]; - level.devcheater = 1; - i = 0; - while ( i < players.size ) - { - if ( !players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - weap = players[ i ] getcurrentweapon(); - weapon = maps/mp/zombies/_zm_weapons::get_base_weapon_name( weap, 1 ); - if ( isDefined( weapon ) ) - { - players[ i ] takeweapon( weap ); - players[ i ] giveweapon( weapon, 0, players[ i ] maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); - players[ i ] givestartammo( weapon ); - players[ i ] switchtoweapon( weapon ); - } - } - i++; -#/ - } -} - -zombie_devgui_reopt_current_weapon() -{ -/# - players = get_players(); - reviver = players[ 0 ]; - level.devcheater = 1; - i = 0; - while ( i < players.size ) - { - if ( !players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - weap = players[ i ] getcurrentweapon(); - weapon = weap; - if ( isDefined( weapon ) ) - { - if ( isDefined( players[ i ].pack_a_punch_weapon_options ) ) - { - } - players[ i ] takeweapon( weap ); - players[ i ] giveweapon( weapon, 0, players[ i ] maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); - players[ i ] givestartammo( weapon ); - players[ i ] switchtoweapon( weapon ); - } - } - i++; -#/ - } -} - -get_upgrade( weaponname ) -{ -/# - if ( isDefined( level.zombie_weapons[ weaponname ] ) && isDefined( level.zombie_weapons[ weaponname ].upgrade_name ) ) - { - return maps/mp/zombies/_zm_weapons::get_upgrade_weapon( weaponname, 0 ); - } - else - { - return maps/mp/zombies/_zm_weapons::get_upgrade_weapon( weaponname, 1 ); -#/ - } -} - -zombie_devgui_director_easy() -{ -/# - if ( isDefined( level.director_devgui_health ) ) - { - [[ level.director_devgui_health ]](); -#/ - } -} - -zombie_devgui_chest_never_move() -{ -/# - level notify( "devgui_chest_end_monitor" ); - level endon( "devgui_chest_end_monitor" ); - for ( ;; ) - { - level.chest_accessed = 0; - wait 5; -#/ - } -} - -zombie_devgui_disable_kill_thread_toggle() -{ -/# - if ( !is_true( level.disable_kill_thread ) ) - { - level.disable_kill_thread = 1; - } - else - { - level.disable_kill_thread = 0; -#/ - } -} - -zombie_devgui_check_kill_thread_every_frame_toggle() -{ -/# - if ( !is_true( level.check_kill_thread_every_frame ) ) - { - level.check_kill_thread_every_frame = 1; - } - else - { - level.check_kill_thread_every_frame = 0; -#/ - } -} - -zombie_devgui_kill_thread_test_mode_toggle() -{ -/# - if ( !is_true( level.kill_thread_test_mode ) ) - { - level.kill_thread_test_mode = 1; - } - else - { - level.kill_thread_test_mode = 0; -#/ - } -} - -showonespawnpoint( spawn_point, color, notification, height, print ) -{ -/# - if ( !isDefined( height ) || height <= 0 ) - { - height = get_player_height(); - } - if ( !isDefined( print ) ) - { - print = spawn_point.classname; - } - center = spawn_point.origin; - forward = anglesToForward( spawn_point.angles ); - right = anglesToRight( spawn_point.angles ); - forward = vectorScale( forward, 16 ); - right = vectorScale( right, 16 ); - a = ( center + forward ) - right; - b = center + forward + right; - c = ( center - forward ) + right; - d = center - forward - right; - thread lineuntilnotified( a, b, color, 0, notification ); - thread lineuntilnotified( b, c, color, 0, notification ); - thread lineuntilnotified( c, d, color, 0, notification ); - thread lineuntilnotified( d, a, color, 0, notification ); - thread lineuntilnotified( a, a + ( 0, 0, height ), color, 0, notification ); - thread lineuntilnotified( b, b + ( 0, 0, height ), color, 0, notification ); - thread lineuntilnotified( c, c + ( 0, 0, height ), color, 0, notification ); - thread lineuntilnotified( d, d + ( 0, 0, height ), color, 0, notification ); - a += ( 0, 0, height ); - b += ( 0, 0, height ); - c += ( 0, 0, height ); - d += ( 0, 0, height ); - thread lineuntilnotified( a, b, color, 0, notification ); - thread lineuntilnotified( b, c, color, 0, notification ); - thread lineuntilnotified( c, d, color, 0, notification ); - thread lineuntilnotified( d, a, color, 0, notification ); - center += ( 0, 0, height / 2 ); - arrow_forward = anglesToForward( spawn_point.angles ); - arrowhead_forward = anglesToForward( spawn_point.angles ); - arrowhead_right = anglesToRight( spawn_point.angles ); - arrow_forward = vectorScale( arrow_forward, 32 ); - arrowhead_forward = vectorScale( arrowhead_forward, 24 ); - arrowhead_right = vectorScale( arrowhead_right, 8 ); - a = center + arrow_forward; - b = ( center + arrowhead_forward ) - arrowhead_right; - c = center + arrowhead_forward + arrowhead_right; - thread lineuntilnotified( center, a, color, 0, notification ); - thread lineuntilnotified( a, b, color, 0, notification ); - thread lineuntilnotified( a, c, color, 0, notification ); - thread print3duntilnotified( spawn_point.origin + ( 0, 0, height ), print, color, 1, 1, notification ); - return; -#/ -} - -print3duntilnotified( origin, text, color, alpha, scale, notification ) -{ -/# - level endon( notification ); - for ( ;; ) - { - print3d( origin, text, color, alpha, scale ); - wait 0,05; -#/ - } -} - -lineuntilnotified( start, end, color, depthtest, notification ) -{ -/# - level endon( notification ); - for ( ;; ) - { - line( start, end, color, depthtest ); - wait 0,05; -#/ - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_electric_cherry.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_electric_cherry.gsc deleted file mode 100644 index 04be636..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_electric_cherry.gsc +++ /dev/null @@ -1,140 +0,0 @@ -#include maps/mp/_visionset_mgr; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - level.custom_laststand_func = ::electric_cherry_laststand; - level._effect[ "electric_cherry_explode" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_player" ); - level._effect[ "tesla_shock" ] = loadfx( "maps/zombie/fx_zombie_tesla_shock" ); - level._effect[ "tesla_shock_secondary" ] = loadfx( "maps/zombie/fx_zombie_tesla_shock_secondary" ); - set_zombie_var( "tesla_head_gib_chance", 50 ); -} - -electric_cherry_player_init() -{ -} - -electric_cherry_laststand() -{ - perk_radius = 500; - perk_dmg = 1000; - perk_points = 40; - perk_delay = 1,5; - self thread electric_cherry_visionset(); - wait perk_delay; - visionsetlaststand( "zm_electric_cherry", 1 ); - while ( isDefined( self ) ) - { - playfx( level._effect[ "electric_cherry_explode" ], self.origin ); - self playsound( "zmb_cherry_explode" ); - a_zombies = get_round_enemy_array(); - a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, perk_radius ); - i = 0; - while ( i < a_zombies.size ) - { - if ( isDefined( self ) && isalive( self ) ) - { - if ( a_zombies[ i ].health <= perk_dmg ) - { - a_zombies[ i ] thread electric_cherry_death_fx(); - self maps/mp/zombies/_zm_score::add_to_player_score( perk_points ); - } - else - { - a_zombies[ i ] thread electric_cherry_stun(); - a_zombies[ i ] thread electric_cherry_shock_fx(); - } - wait 0,1; - a_zombies[ i ] dodamage( perk_dmg, self.origin, self ); - } - i++; - } - } -} - -electric_cherry_death_fx() -{ - self endon( "death" ); - tag = "J_SpineUpper"; - fx = "tesla_shock"; - if ( self.isdog ) - { - tag = "J_Spine1"; - } - self playsound( "zmb_elec_jib_zombie" ); - network_safe_play_fx_on_tag( "tesla_death_fx", 2, level._effect[ fx ], self, tag ); - if ( isDefined( self.tesla_head_gib_func ) && !self.head_gibbed ) - { - [[ self.tesla_head_gib_func ]](); - } -} - -electric_cherry_shock_fx() -{ - self endon( "death" ); - tag = "J_SpineUpper"; - fx = "tesla_shock_secondary"; - if ( self.isdog ) - { - tag = "J_Spine1"; - } - self playsound( "zmb_elec_jib_zombie" ); - network_safe_play_fx_on_tag( "tesla_shock_fx", 2, level._effect[ fx ], self, tag ); -} - -electric_cherry_stun() -{ - self endon( "death" ); - self notify( "stun_zombie" ); - self endon( "stun_zombie" ); - if ( self.health <= 0 ) - { -/# - iprintln( "trying to stun a dead zombie" ); -#/ - return; - } - if ( isDefined( self.stun_zombie ) ) - { - self thread [[ self.stun_zombie ]](); - return; - } - self thread maps/mp/zombies/_zm_ai_basic::start_inert(); -} - -electric_cherry_visionset() -{ - if ( isDefined( self ) && flag( "solo_game" ) ) - { - if ( isDefined( level.vsmgr_prio_visionset_zm_electric_cherry ) ) - { - if ( !isDefined( self.electric_cherry_visionset ) || self.electric_cherry_visionset == 0 ) - { - maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_electric_cherry", self ); - self.electric_cherry_visionset = 1; - } - } - } - wait 5; - if ( isDefined( self ) && isDefined( level.vsmgr_prio_visionset_zm_electric_cherry ) ) - { - if ( isDefined( self.electric_cherry_visionset ) && self.electric_cherry_visionset ) - { - maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_electric_cherry", self ); - self.electric_cherry_visionset = 0; - return; - } - else - { - if ( !flag( "solo_game" ) ) - { - visionsetlaststand( "zombie_last_stand", 1 ); - } - } - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_equip_electrictrap.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_equip_electrictrap.gsc deleted file mode 100644 index 1f4f05d..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_equip_electrictrap.gsc +++ /dev/null @@ -1,412 +0,0 @@ -#include maps/mp/zombies/_zm_traps; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_power; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( !maps/mp/zombies/_zm_equipment::is_equipment_included( "equip_electrictrap_zm" ) ) - { - return; - } - level.electrictrap_name = "equip_electrictrap_zm"; - maps/mp/zombies/_zm_equipment::register_equipment( "equip_electrictrap_zm", &"ZOMBIE_EQUIP_ELECTRICTRAP_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_ELECTRICTRAP_HOWTO", "etrap_zm_icon", "electrictrap", undefined, ::transfertrap, ::droptrap, ::pickuptrap, ::placetrap ); - maps/mp/zombies/_zm_equipment::add_placeable_equipment( "equip_electrictrap_zm", "p6_anim_zm_buildable_etrap" ); - level thread onplayerconnect(); - maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "equip_electrictrap", &"ZOMBIE_EQUIP_ELECTRICTRAP_PICKUP_HINT_STRING" ); - level._effect[ "etrap_on" ] = loadfx( "maps/zombie/fx_zmb_tranzit_electric_trap_on" ); - thread wait_init_damage(); -} - -wait_init_damage() -{ - while ( !isDefined( level.zombie_vars ) || !isDefined( level.zombie_vars[ "zombie_health_start" ] ) ) - { - wait 1; - } - level.etrap_damage = maps/mp/zombies/_zm::ai_zombie_health( 50 ); -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread onplayerspawned(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - self thread setupwatchers(); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread watchelectrictrapuse(); - } -} - -setupwatchers() -{ - self waittill( "weapon_watchers_created" ); - watcher = maps/mp/gametypes_zm/_weaponobjects::getweaponobjectwatcher( "equip_electrictrap" ); - watcher.onspawnretrievetriggers = ::maps/mp/zombies/_zm_equipment::equipment_onspawnretrievableweaponobject; -} - -watchelectrictrapuse() -{ - self notify( "watchElectricTrapUse" ); - self endon( "watchElectricTrapUse" ); - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "equipment_placed", weapon, weapname ); - if ( weapname == level.electrictrap_name ) - { - self cleanupoldtrap(); - self.buildableelectrictrap = weapon; - self thread startelectrictrapdeploy( weapon ); - } - } -} - -cleanupoldtrap() -{ - if ( isDefined( self.buildableelectrictrap ) ) - { - if ( isDefined( self.buildableelectrictrap.stub ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildableelectrictrap.stub ); - self.buildableelectrictrap.stub = undefined; - } - self.buildableelectrictrap delete(); - } - if ( isDefined( level.electrap_sound_ent ) ) - { - level.electrap_sound_ent delete(); - level.electrap_sound_ent = undefined; - } -} - -watchforcleanup() -{ - self notify( "etrap_cleanup" ); - self endon( "etrap_cleanup" ); - self waittill_any( "death", "disconnect", "equip_electrictrap_zm_taken", "equip_electrictrap_zm_pickup" ); - cleanupoldtrap(); -} - -placetrap( origin, angles ) -{ - item = self maps/mp/zombies/_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_etrap", "equip_electrictrap_zm", origin, angles ); - if ( isDefined( item ) ) - { - item.owner = self; - item.zombie_attack_callback = ::zombie_attacked_trap; - } - return item; -} - -droptrap() -{ - item = self maps/mp/zombies/_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_etrap", "equip_electrictrap_zm", self.origin, self.angles ); - if ( isDefined( item ) ) - { - item.electrictrap_health = self.electrictrap_health; - } - self.electrictrap_health = undefined; - return item; -} - -pickuptrap( item ) -{ - item.owner = self; - self.electrictrap_health = item.electrictrap_health; - item.electrictrap_health = undefined; -} - -transfertrap( fromplayer, toplayer ) -{ - buildableelectrictrap = toplayer.buildableelectrictrap; - electrictrap_health = toplayer.electrictrap_health; - toplayer.buildableelectrictrap = fromplayer.buildableelectrictrap; - toplayer.buildableelectrictrap.original_owner = toplayer; - toplayer notify( "equip_electrictrap_zm_taken" ); - toplayer thread startelectrictrapdeploy( toplayer.buildableelectrictrap ); - toplayer.electrictrap_health = fromplayer.electrictrap_health; - fromplayer.buildableelectrictrap = buildableelectrictrap; - fromplayer notify( "equip_electrictrap_zm_taken" ); - if ( isDefined( fromplayer.buildableelectrictrap ) ) - { - fromplayer thread startelectrictrapdeploy( fromplayer.buildableelectrictrap ); - fromplayer.buildableelectrictrap.original_owner = fromplayer; - fromplayer.buildableelectrictrap.owner = fromplayer; - } - else - { - fromplayer maps/mp/zombies/_zm_equipment::equipment_release( "equip_electrictrap_zm" ); - } - fromplayer.electrictrap_health = electrictrap_health; -} - -startelectrictrapdeploy( weapon ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_electrictrap_zm_taken" ); - self thread watchforcleanup(); - electricradius = 45; - if ( !isDefined( self.electrictrap_health ) ) - { - self.electrictrap_health = 60; - } - if ( isDefined( weapon ) ) - { -/# - weapon thread debugelectrictrap( electricradius ); -#/ - if ( isDefined( level.equipment_etrap_needs_power ) && level.equipment_etrap_needs_power ) - { - weapon.power_on = 0; - maps/mp/zombies/_zm_power::add_temp_powered_item( ::trap_power_on, ::trap_power_off, ::trap_in_range, ::maps/mp/zombies/_zm_power::cost_high, 1, weapon.power_on, weapon ); - } - else - { - weapon.power_on = 1; - } - if ( !weapon.power_on ) - { - self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" ); - } - self thread electrictrapthink( weapon, electricradius ); - if ( isDefined( level.equipment_etrap_needs_power ) && !level.equipment_etrap_needs_power ) - { - self thread electrictrapdecay( weapon ); - } - self thread maps/mp/zombies/_zm_buildables::delete_on_disconnect( weapon ); - weapon waittill( "death" ); - if ( isDefined( level.electrap_sound_ent ) ) - { - level.electrap_sound_ent playsound( "wpn_zmb_electrap_stop" ); - level.electrap_sound_ent delete(); - level.electrap_sound_ent = undefined; - } - self notify( "etrap_cleanup" ); - } -} - -trap_in_range( delta, origin, radius ) -{ - if ( distancesquared( self.target.origin, origin ) < ( radius * radius ) ) - { - return 1; - } - return 0; -} - -trap_power_on( origin, radius ) -{ -/# - println( "^1ZM POWER: trap on\n" ); -#/ - if ( !isDefined( self.target ) ) - { - return; - } - self.target.power_on = 1; - self.target.power_on_time = getTime(); - if ( !isDefined( level.electrap_sound_ent ) ) - { - level.electrap_sound_ent = spawn( "script_origin", self.target.origin ); - } - level.electrap_sound_ent playsound( "wpn_zmb_electrap_start" ); - level.electrap_sound_ent playloopsound( "wpn_zmb_electrap_loop", 2 ); - self.target thread trapfx(); -} - -trap_power_off( origin, radius ) -{ -/# - println( "^1ZM POWER: trap off\n" ); -#/ - if ( !isDefined( self.target ) ) - { - return; - } - self.target.power_on = 0; - if ( isDefined( level.electrap_sound_ent ) ) - { - level.electrap_sound_ent playsound( "wpn_zmb_electrap_stop" ); - level.electrap_sound_ent delete(); - level.electrap_sound_ent = undefined; - } -} - -trapfx() -{ - self endon( "disconnect" ); - while ( isDefined( self ) && isDefined( self.power_on ) && self.power_on ) - { - playfxontag( level._effect[ "etrap_on" ], self, "tag_origin" ); - wait 0,3; - } -} - -zombie_attacked_trap( zombie ) -{ - if ( isDefined( self.power_on ) && self.power_on ) - { - self zap_zombie( zombie ); - } -} - -electrocution_lockout( time ) -{ - level.electrocuting_zombie = 1; - wait time; - level.electrocuting_zombie = 0; -} - -zap_zombie( zombie ) -{ - if ( isDefined( zombie.ignore_electric_trap ) && zombie.ignore_electric_trap ) - { - return; - } - if ( zombie.health > level.etrap_damage ) - { - zombie dodamage( level.etrap_damage, self.origin ); - zombie.ignore_electric_trap = 1; - return; - } - self playsound( "wpn_zmb_electrap_zap" ); - if ( isDefined( level.electrocuting_zombie ) && !level.electrocuting_zombie ) - { - thread electrocution_lockout( 2 ); - zombie thread play_elec_vocals(); - zombie thread maps/mp/zombies/_zm_traps::electroctute_death_fx(); - zombie.is_on_fire = 0; - zombie notify( "stop_flame_damage" ); - } - zombie thread electrictrapkill( self ); -} - -etrap_choke() -{ - if ( !isDefined( level.etrap_choke_count ) ) - { - level.etrap_choke_count = 0; - } - level.etrap_choke_count++; - if ( level.etrap_choke_count >= 5 ) - { - wait 0,05; - level.etrap_choke_count = 0; - } -} - -electrictrapthink( weapon, electricradius ) -{ - weapon endon( "death" ); - radiussquared = electricradius * electricradius; - while ( isDefined( weapon ) ) - { - while ( weapon.power_on && ( getTime() - weapon.power_on_time ) > 2000 ) - { - zombies = getaiarray( level.zombie_team ); - _a350 = zombies; - _k350 = getFirstArrayKey( _a350 ); - while ( isDefined( _k350 ) ) - { - zombie = _a350[ _k350 ]; - if ( !isDefined( zombie ) || !isalive( zombie ) ) - { - } - else - { - if ( isDefined( zombie.ignore_electric_trap ) && zombie.ignore_electric_trap ) - { - break; - } - else - { - if ( distancesquared( weapon.origin, zombie.origin ) < radiussquared ) - { - weapon zap_zombie( zombie ); - wait 0,15; - } - etrap_choke(); - } - } - _k350 = getNextArrayKey( _a350, _k350 ); - } - players = get_players(); - _a369 = players; - _k369 = getFirstArrayKey( _a369 ); - while ( isDefined( _k369 ) ) - { - player = _a369[ _k369 ]; - if ( is_player_valid( player ) && distancesquared( weapon.origin, player.origin ) < radiussquared ) - { - player thread maps/mp/zombies/_zm_traps::player_elec_damage(); - etrap_choke(); - } - etrap_choke(); - _k369 = getNextArrayKey( _a369, _k369 ); - } - } - wait 0,1; - } -} - -electrictrapkill( weapon ) -{ - self endon( "death" ); - wait randomfloatrange( 0,1, 0,4 ); - self dodamage( self.health + 666, self.origin ); -} - -electrictrapdecay( weapon ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_electrictrap_zm_taken" ); - while ( isDefined( weapon ) ) - { - if ( weapon.power_on ) - { - self.electrictrap_health--; - - if ( self.electrictrap_health <= 0 ) - { - self cleanupoldtrap(); - self.electrictrap_health = undefined; - self thread maps/mp/zombies/_zm_equipment::equipment_release( "equip_electrictrap_zm" ); - return; - } - } - wait 1; - } -} - -debugelectrictrap( radius ) -{ -/# - while ( isDefined( self ) ) - { - if ( getDvarInt( #"EB512CB7" ) ) - { - circle( self.origin, radius, ( 1, 1, 1 ), 0, 1, 1 ); - } - wait 0,05; -#/ - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_equip_gasmask.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_equip_gasmask.gsc deleted file mode 100644 index 998561e..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_equip_gasmask.gsc +++ /dev/null @@ -1,198 +0,0 @@ -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( !maps/mp/zombies/_zm_equipment::is_equipment_included( "equip_gasmask_zm" ) ) - { - return; - } - registerclientfield( "toplayer", "gasmaskoverlay", 7000, 1, "int" ); - maps/mp/zombies/_zm_equipment::register_equipment( "equip_gasmask_zm", &"ZOMBIE_EQUIP_GASMASK_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_GASMASK_HOWTO", undefined, "gasmask", ::gasmask_activation_watcher_thread ); - level.deathcard_spawn_func = ::remove_gasmask_on_player_bleedout; - precacheitem( "lower_equip_gasmask_zm" ); - onplayerconnect_callback( ::gasmask_on_player_connect ); -} - -gasmask_on_player_connect() -{ -} - -gasmask_removed_watcher_thread() -{ - self notify( "only_one_gasmask_removed_thread" ); - self endon( "only_one_gasmask_removed_thread" ); - self endon( "disconnect" ); - self waittill( "equip_gasmask_zm_taken" ); - if ( isDefined( level.zombiemode_gasmask_reset_player_model ) ) - { - ent_num = self.characterindex; - if ( isDefined( self.zm_random_char ) ) - { - ent_num = self.zm_random_char; - } - self [[ level.zombiemode_gasmask_reset_player_model ]]( ent_num ); - } - if ( isDefined( level.zombiemode_gasmask_reset_player_viewmodel ) ) - { - ent_num = self.characterindex; - if ( isDefined( self.zm_random_char ) ) - { - ent_num = self.zm_random_char; - } - self [[ level.zombiemode_gasmask_reset_player_viewmodel ]]( ent_num ); - } - self setclientfieldtoplayer( "gasmaskoverlay", 0 ); -} - -gasmask_activation_watcher_thread() -{ - self endon( "zombified" ); - self endon( "disconnect" ); - self endon( "equip_gasmask_zm_taken" ); - self thread gasmask_removed_watcher_thread(); - self thread remove_gasmask_on_game_over(); - if ( isDefined( level.zombiemode_gasmask_set_player_model ) ) - { - ent_num = self.characterindex; - if ( isDefined( self.zm_random_char ) ) - { - ent_num = self.zm_random_char; - } - self [[ level.zombiemode_gasmask_set_player_model ]]( ent_num ); - } - if ( isDefined( level.zombiemode_gasmask_set_player_viewmodel ) ) - { - ent_num = self.characterindex; - if ( isDefined( self.zm_random_char ) ) - { - ent_num = self.zm_random_char; - } - self [[ level.zombiemode_gasmask_set_player_viewmodel ]]( ent_num ); - } - for ( ;; ) - { - while ( 1 ) - { - self waittill_either( "equip_gasmask_zm_activate", "equip_gasmask_zm_deactivate" ); - if ( self maps/mp/zombies/_zm_equipment::is_equipment_active( "equip_gasmask_zm" ) ) - { - self increment_is_drinking(); - self setactionslot( 1, "" ); - if ( isDefined( level.zombiemode_gasmask_set_player_model ) ) - { - ent_num = self.characterindex; - if ( isDefined( self.zm_random_char ) ) - { - ent_num = self.zm_random_char; - } - self [[ level.zombiemode_gasmask_change_player_headmodel ]]( ent_num, 1 ); - } - clientnotify( "gmsk2" ); - self waittill( "weapon_change_complete" ); - self setclientfieldtoplayer( "gasmaskoverlay", 1 ); - } - else - { - self increment_is_drinking(); - self setactionslot( 1, "" ); - if ( isDefined( level.zombiemode_gasmask_set_player_model ) ) - { - ent_num = self.characterindex; - if ( isDefined( self.zm_random_char ) ) - { - ent_num = self.zm_random_char; - } - self [[ level.zombiemode_gasmask_change_player_headmodel ]]( ent_num, 0 ); - } - self takeweapon( "equip_gasmask_zm" ); - self giveweapon( "lower_equip_gasmask_zm" ); - self switchtoweapon( "lower_equip_gasmask_zm" ); - wait 0,05; - self setclientfieldtoplayer( "gasmaskoverlay", 0 ); - self waittill( "weapon_change_complete" ); - self takeweapon( "lower_equip_gasmask_zm" ); - self giveweapon( "equip_gasmask_zm" ); - } - if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - if ( self is_multiple_drinking() ) - { - self decrement_is_drinking(); - self setactionslot( 1, "weapon", "equip_gasmask_zm" ); - self notify( "equipment_select_response_done" ); - } - } - else if ( isDefined( self.prev_weapon_before_equipment_change ) && self hasweapon( self.prev_weapon_before_equipment_change ) ) - { - if ( self.prev_weapon_before_equipment_change != self getcurrentweapon() ) - { - self switchtoweapon( self.prev_weapon_before_equipment_change ); - self waittill( "weapon_change_complete" ); - } - break; - } - else - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - if ( primaryweapons[ 0 ] != self getcurrentweapon() ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - self waittill( "weapon_change_complete" ); - } - break; - } - else - { - self switchtoweapon( get_player_melee_weapon() ); - } - } - } - self setactionslot( 1, "weapon", "equip_gasmask_zm" ); - if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.intermission ) && !self.intermission ) - { - self decrement_is_drinking(); - } - self notify( "equipment_select_response_done" ); - } -} - -remove_gasmask_on_player_bleedout() -{ - self setclientfieldtoplayer( "gasmaskoverlay", 0 ); - wait_network_frame(); - wait_network_frame(); - self setclientfieldtoplayer( "gasmaskoverlay", 1 ); -} - -remove_gasmask_on_game_over() -{ - self endon( "equip_gasmask_zm_taken" ); - level waittill( "pre_end_game" ); - self setclientfieldtoplayer( "gasmaskoverlay", 0 ); -} - -gasmask_active() -{ - return self maps/mp/zombies/_zm_equipment::is_equipment_active( "equip_gasmask_zm" ); -} - -gasmask_debug_print( msg, color ) -{ -/# - if ( !getDvarInt( #"4D1BCA99" ) ) - { - return; - } - if ( !isDefined( color ) ) - { - color = ( 0, 0, 1 ); - } - print3d( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), msg, color, 1, 1, 40 ); -#/ -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_equip_hacker.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_equip_hacker.gsc deleted file mode 100644 index afc5de3..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_equip_hacker.gsc +++ /dev/null @@ -1,880 +0,0 @@ -#include maps/mp/zombies/_zm_equip_hacker; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( !maps/mp/zombies/_zm_equipment::is_equipment_included( "equip_hacker_zm" ) ) - { - return; - } - maps/mp/zombies/_zm_equipment::register_equipment( "equip_hacker_zm", &"ZOMBIE_EQUIP_HACKER_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_HACKER_HOWTO", undefined, "hacker" ); - level._hackable_objects = []; - level._pooled_hackable_objects = []; - onplayerconnect_callback( ::hacker_on_player_connect ); - level thread hack_trigger_think(); - level thread hacker_trigger_pool_think(); - level thread hacker_round_reward(); - if ( getDvarInt( #"53BD7080" ) == 1 ) - { - level thread hacker_debug(); - } -} - -hacker_round_reward() -{ - while ( 1 ) - { - level waittill( "end_of_round" ); - if ( !isDefined( level._from_nml ) ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( isDefined( players[ i ] get_player_equipment() ) && players[ i ] get_player_equipment() == "equip_hacker_zm" ) - { - if ( isDefined( players[ i ].equipment_got_in_round[ "equip_hacker_zm" ] ) ) - { - got_in_round = players[ i ].equipment_got_in_round[ "equip_hacker_zm" ]; - rounds_kept = level.round_number - got_in_round; - rounds_kept -= 1; - if ( rounds_kept > 0 ) - { - rounds_kept = min( rounds_kept, 5 ); - score = rounds_kept * 500; - players[ i ] maps/mp/zombies/_zm_score::add_to_player_score( int( score ) ); - } - } - } - i++; - } - } - else level._from_nml = undefined; - } -} - -hacker_debug() -{ - while ( 1 ) - { - i = 0; - while ( i < level._hackable_objects.size ) - { - hackable = level._hackable_objects[ i ]; - if ( isDefined( hackable.pooled ) && hackable.pooled ) - { - if ( isDefined( hackable._trigger ) ) - { - col = vectorScale( ( 0, 0, 1 ), 255 ); - if ( isDefined( hackable.custom_debug_color ) ) - { - col = hackable.custom_debug_color; - } -/# - print3d( hackable.origin, "+", col, 1, 1 ); -#/ - } - else - { -/# - print3d( hackable.origin, "+", vectorScale( ( 0, 0, 1 ), 255 ), 1, 1 ); -#/ - } - i++; - continue; - } - else - { -/# - print3d( hackable.origin, "+", vectorScale( ( 0, 0, 1 ), 255 ), 1, 1 ); -#/ - } - i++; - } - wait 0,1; - } -} - -hacker_trigger_pool_think() -{ - if ( !isDefined( level._zombie_hacker_trigger_pool_size ) ) - { - level._zombie_hacker_trigger_pool_size = 8; - } - pool_active = 0; - level._hacker_pool = []; - while ( 1 ) - { - if ( pool_active ) - { - if ( !any_hackers_active() ) - { - destroy_pooled_items(); - } - else - { - sweep_pooled_items(); - add_eligable_pooled_items(); - } - } - else - { - if ( any_hackers_active() ) - { - pool_active = 1; - } - } - wait 0,1; - } -} - -destroy_pooled_items() -{ - pool_active = 0; - i = 0; - while ( i < level._hacker_pool.size ) - { - level._hacker_pool[ i ]._trigger delete(); - level._hacker_pool[ i ]._trigger = undefined; - i++; - } - level._hacker_pool = []; -} - -sweep_pooled_items() -{ - new_hacker_pool = []; - i = 0; - while ( i < level._hacker_pool.size ) - { - if ( level._hacker_pool[ i ] should_pooled_object_exist() ) - { - new_hacker_pool[ new_hacker_pool.size ] = level._hacker_pool[ i ]; - i++; - continue; - } - else - { - level._hacker_pool[ i ]._trigger delete(); - level._hacker_pool[ i ]._trigger = undefined; - } - i++; - } - level._hacker_pool = new_hacker_pool; -} - -should_pooled_object_exist() -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] hacker_active() ) - { - if ( isDefined( self.entity ) ) - { - if ( self.entity != players[ i ] ) - { - if ( distance2dsquared( players[ i ].origin, self.entity.origin ) <= ( self.radius * self.radius ) ) - { - return 1; - } - } - } - else - { - if ( distance2dsquared( players[ i ].origin, self.origin ) <= ( self.radius * self.radius ) ) - { - return 1; - } - } - } - i++; - } - return 0; -} - -add_eligable_pooled_items() -{ - candidates = []; - i = 0; - while ( i < level._hackable_objects.size ) - { - hackable = level._hackable_objects[ i ]; - if ( isDefined( hackable.pooled ) && hackable.pooled && !isDefined( hackable._trigger ) ) - { - if ( !isinarray( level._hacker_pool, hackable ) ) - { - if ( hackable should_pooled_object_exist() ) - { - candidates[ candidates.size ] = hackable; - } - } - } - i++; - } - i = 0; - while ( i < candidates.size ) - { - candidate = candidates[ i ]; - height = 72; - radius = 32; - if ( isDefined( candidate.radius ) ) - { - radius = candidate.radius; - } - if ( isDefined( self.height ) ) - { - height = candidate.height; - } - trigger = spawn( "trigger_radius_use", candidate.origin, 0, radius, height ); - trigger usetriggerrequirelookat(); - trigger setcursorhint( "HINT_NOICON" ); - trigger.radius = radius; - trigger.height = height; - trigger.beinghacked = 0; - candidate._trigger = trigger; - level._hacker_pool[ level._hacker_pool.size ] = candidate; - i++; - } -} - -any_hackers_active() -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] hacker_active() ) - { - return 1; - } - i++; - } - return 0; -} - -register_hackable( name, callback_func, qualifier_func ) -{ - structs = getstructarray( name, "script_noteworthy" ); - if ( !isDefined( structs ) ) - { -/# - println( "Error: register_hackable called on script_noteworthy " + name + " but no such structs exist." ); -#/ - return; - } - i = 0; - while ( i < structs.size ) - { - if ( !isinarray( level._hackable_objects, structs[ i ] ) ) - { - structs[ i ]._hack_callback_func = callback_func; - structs[ i ]._hack_qualifier_func = qualifier_func; - structs[ i ].pooled = level._hacker_pooled; - if ( isDefined( structs[ i ].targetname ) ) - { - structs[ i ].hacker_target = getent( structs[ i ].targetname, "targetname" ); - } - level._hackable_objects[ level._hackable_objects.size ] = structs[ i ]; - if ( isDefined( level._hacker_pooled ) ) - { - level._pooled_hackable_objects[ level._pooled_hackable_objects.size ] = structs[ i ]; - } - structs[ i ] thread hackable_object_thread(); - wait_network_frame(); - } - i++; - } -} - -register_hackable_struct( struct, callback_func, qualifier_func ) -{ - if ( !isinarray( level._hackable_objects, struct ) ) - { - struct._hack_callback_func = callback_func; - struct._hack_qualifier_func = qualifier_func; - struct.pooled = level._hacker_pooled; - if ( isDefined( struct.targetname ) ) - { - struct.hacker_target = getent( struct.targetname, "targetname" ); - } - level._hackable_objects[ level._hackable_objects.size ] = struct; - if ( isDefined( level._hacker_pooled ) ) - { - level._pooled_hackable_objects[ level._pooled_hackable_objects.size ] = struct; - } - struct thread hackable_object_thread(); - } -} - -register_pooled_hackable_struct( struct, callback_func, qualifier_func ) -{ - level._hacker_pooled = 1; - register_hackable_struct( struct, callback_func, qualifier_func ); - level._hacker_pooled = undefined; -} - -register_pooled_hackable( name, callback_func, qualifier_func ) -{ - level._hacker_pooled = 1; - register_hackable( name, callback_func, qualifier_func ); - level._hacker_pooled = undefined; -} - -deregister_hackable_struct( struct ) -{ - if ( isinarray( level._hackable_objects, struct ) ) - { - new_list = []; - i = 0; - while ( i < level._hackable_objects.size ) - { - if ( level._hackable_objects[ i ] != struct ) - { - new_list[ new_list.size ] = level._hackable_objects[ i ]; - i++; - continue; - } - else - { - level._hackable_objects[ i ] notify( "hackable_deregistered" ); - if ( isDefined( level._hackable_objects[ i ]._trigger ) ) - { - level._hackable_objects[ i ]._trigger delete(); - } - if ( isDefined( level._hackable_objects[ i ].pooled ) && level._hackable_objects[ i ].pooled ) - { - arrayremovevalue( level._hacker_pool, level._hackable_objects[ i ] ); - arrayremovevalue( level._pooled_hackable_objects, level._hackable_objects[ i ] ); - } - } - i++; - } - level._hackable_objects = new_list; - } -} - -deregister_hackable( noteworthy ) -{ - new_list = []; - i = 0; - while ( i < level._hackable_objects.size ) - { - if ( !isDefined( level._hackable_objects[ i ].script_noteworthy ) || level._hackable_objects[ i ].script_noteworthy != noteworthy ) - { - new_list[ new_list.size ] = level._hackable_objects[ i ]; - } - else - { - level._hackable_objects[ i ] notify( "hackable_deregistered" ); - if ( isDefined( level._hackable_objects[ i ]._trigger ) ) - { - level._hackable_objects[ i ]._trigger delete(); - } - } - if ( isDefined( level._hackable_objects[ i ].pooled ) && level._hackable_objects[ i ].pooled ) - { - arrayremovevalue( level._hacker_pool, level._hackable_objects[ i ] ); - } - i++; - } - level._hackable_objects = new_list; -} - -hack_trigger_think() -{ - while ( 1 ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - j = 0; - while ( j < level._hackable_objects.size ) - { - hackable = level._hackable_objects[ j ]; - if ( isDefined( hackable._trigger ) ) - { - qualifier_passed = 1; - if ( isDefined( hackable._hack_qualifier_func ) ) - { - qualifier_passed = hackable [[ hackable._hack_qualifier_func ]]( player ); - } - if ( player hacker_active() && qualifier_passed && !hackable._trigger.beinghacked ) - { - hackable._trigger setinvisibletoplayer( player, 0 ); - j++; - continue; - } - else - { - hackable._trigger setinvisibletoplayer( player, 1 ); - } - } - j++; - } - i++; - } - wait 0,1; - } -} - -is_facing( facee ) -{ - orientation = self getplayerangles(); - forwardvec = anglesToForward( orientation ); - forwardvec2d = ( forwardvec[ 0 ], forwardvec[ 1 ], 0 ); - unitforwardvec2d = vectornormalize( forwardvec2d ); - tofaceevec = facee.origin - self.origin; - tofaceevec2d = ( tofaceevec[ 0 ], tofaceevec[ 1 ], 0 ); - unittofaceevec2d = vectornormalize( tofaceevec2d ); - dotproduct = vectordot( unitforwardvec2d, unittofaceevec2d ); - dot_limit = 0,8; - if ( isDefined( facee.dot_limit ) ) - { - dot_limit = facee.dot_limit; - } - return dotproduct > dot_limit; -} - -can_hack( hackable ) -{ - if ( !isalive( self ) ) - { - return 0; - } - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - return 0; - } - if ( !self hacker_active() ) - { - return 0; - } - if ( !isDefined( hackable._trigger ) ) - { - return 0; - } - if ( isDefined( hackable.player ) ) - { - if ( hackable.player != self ) - { - return 0; - } - } - if ( self throwbuttonpressed() ) - { - return 0; - } - if ( self fragbuttonpressed() ) - { - return 0; - } - if ( isDefined( hackable._hack_qualifier_func ) ) - { - if ( !( hackable [[ hackable._hack_qualifier_func ]]( self ) ) ) - { - return 0; - } - } - if ( !isinarray( level._hackable_objects, hackable ) ) - { - return 0; - } - radsquared = 1024; - if ( isDefined( hackable.radius ) ) - { - radsquared = hackable.radius * hackable.radius; - } - origin = hackable.origin; - if ( isDefined( hackable.entity ) ) - { - origin = hackable.entity.origin; - } - if ( distance2dsquared( self.origin, origin ) > radsquared ) - { - return 0; - } - if ( !isDefined( hackable.no_touch_check ) && !self istouching( hackable._trigger ) ) - { - return 0; - } - if ( !self is_facing( hackable ) ) - { - return 0; - } - if ( !isDefined( hackable.no_sight_check ) && !sighttracepassed( self.origin + vectorScale( ( 0, 0, 1 ), 50 ), origin, 0, undefined ) ) - { - return 0; - } - if ( !isDefined( hackable.no_bullet_trace ) && !bullettracepassed( self.origin + vectorScale( ( 0, 0, 1 ), 50 ), origin, 0, undefined ) ) - { - return 0; - } - return 1; -} - -is_hacking( hackable ) -{ - if ( can_hack( hackable ) ) - { - return self usebuttonpressed(); - } -} - -set_hack_hint_string() -{ - if ( isDefined( self._trigger ) ) - { - if ( isDefined( self.custom_string ) ) - { - self._trigger sethintstring( self.custom_string ); - return; - } - else if ( !isDefined( self.script_int ) || self.script_int <= 0 ) - { - self._trigger sethintstring( &"ZOMBIE_HACK_NO_COST" ); - return; - } - else - { - self._trigger sethintstring( &"ZOMBIE_HACK", self.script_int ); - } - } -} - -tidy_on_deregister( hackable ) -{ - self endon( "clean_up_tidy_up" ); - hackable waittill( "hackable_deregistered" ); - if ( isDefined( self.hackerprogressbar ) ) - { - self.hackerprogressbar maps/mp/gametypes_zm/_hud_util::destroyelem(); - } - if ( isDefined( self.hackertexthud ) ) - { - self.hackertexthud destroy(); - } -} - -hacker_do_hack( hackable ) -{ - timer = 0; - hacked = 0; - hackable._trigger.beinghacked = 1; - if ( !isDefined( self.hackerprogressbar ) ) - { - self.hackerprogressbar = self maps/mp/gametypes_zm/_hud_util::createprimaryprogressbar(); - } - if ( !isDefined( self.hackertexthud ) ) - { - self.hackertexthud = newclienthudelem( self ); - } - hack_duration = hackable.script_float; - if ( self hasperk( "specialty_fastreload" ) ) - { - hack_duration *= 0,66; - } - hack_duration = max( 1,5, hack_duration ); - self thread tidy_on_deregister( hackable ); - self.hackerprogressbar maps/mp/gametypes_zm/_hud_util::updatebar( 0,01, 1 / hack_duration ); - self.hackertexthud.alignx = "center"; - self.hackertexthud.aligny = "middle"; - self.hackertexthud.horzalign = "center"; - self.hackertexthud.vertalign = "bottom"; - self.hackertexthud.y = -113; - if ( issplitscreen() ) - { - self.hackertexthud.y = -107; - } - self.hackertexthud.foreground = 1; - self.hackertexthud.font = "default"; - self.hackertexthud.fontscale = 1,8; - self.hackertexthud.alpha = 1; - self.hackertexthud.color = ( 0, 0, 1 ); - self.hackertexthud settext( &"ZOMBIE_HACKING" ); - self playloopsound( "zmb_progress_bar", 0,5 ); - while ( self is_hacking( hackable ) ) - { - wait 0,05; - timer += 0,05; - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - break; - } - else if ( timer >= hack_duration ) - { - hacked = 1; - break; - } - else - { - } - } - self stoploopsound( 0,5 ); - if ( hacked ) - { - self playsound( "vox_mcomp_hack_success" ); - } - else self playsound( "vox_mcomp_hack_fail" ); - if ( isDefined( self.hackerprogressbar ) ) - { - self.hackerprogressbar maps/mp/gametypes_zm/_hud_util::destroyelem(); - } - if ( isDefined( self.hackertexthud ) ) - { - self.hackertexthud destroy(); - } - hackable set_hack_hint_string(); - if ( isDefined( hackable._trigger ) ) - { - hackable._trigger.beinghacked = 0; - } - self notify( "clean_up_tidy_up" ); - return hacked; -} - -lowreadywatcher( player ) -{ - player endon( "disconnected" ); - self endon( "kill_lowreadywatcher" ); - self waittill( "hackable_deregistered" ); -} - -hackable_object_thread() -{ - self endon( "hackable_deregistered" ); - height = 72; - radius = 64; - if ( isDefined( self.radius ) ) - { - radius = self.radius; - } - if ( isDefined( self.height ) ) - { - height = self.height; - } - if ( !isDefined( self.pooled ) ) - { - trigger = spawn( "trigger_radius_use", self.origin, 0, radius, height ); - trigger usetriggerrequirelookat(); - trigger setcursorhint( "HINT_NOICON" ); - trigger.radius = radius; - trigger.height = height; - trigger.beinghacked = 0; - self._trigger = trigger; - } - cost = 0; - if ( isDefined( self.script_int ) ) - { - cost = self.script_int; - } - duration = 1; - if ( isDefined( self.script_float ) ) - { - duration = self.script_float; - } - while ( 1 ) - { - wait 0,1; - while ( !isDefined( self._trigger ) ) - { - continue; - } - players = get_players(); - if ( isDefined( self._trigger ) ) - { - self._trigger sethintstring( "" ); - if ( isDefined( self.entity ) ) - { - self.origin = self.entity.origin; - self._trigger.origin = self.entity.origin; - if ( isDefined( self.trigger_offset ) ) - { - self._trigger.origin += self.trigger_offset; - } - } - } - i = 0; - while ( i < players.size ) - { - if ( players[ i ] can_hack( self ) ) - { - self set_hack_hint_string(); - break; - } - else - { - i++; - } - } - i = 0; - while ( i < players.size ) - { - hacker = players[ i ]; - if ( !hacker is_hacking( self ) ) - { - i++; - continue; - } - else if ( hacker.score >= cost || cost <= 0 ) - { - self thread lowreadywatcher( hacker ); - hack_success = hacker hacker_do_hack( self ); - self notify( "kill_lowreadywatcher" ); - if ( isDefined( hacker ) ) - { - } - if ( isDefined( hacker ) && hack_success ) - { - if ( cost ) - { - if ( cost > 0 ) - { - hacker maps/mp/zombies/_zm_score::minus_to_player_score( cost ); - break; - } - else - { - hacker maps/mp/zombies/_zm_score::add_to_player_score( cost * -1 ); - } - } - hacker notify( "successful_hack" ); - if ( isDefined( self._hack_callback_func ) ) - { - self thread [[ self._hack_callback_func ]]( hacker ); - } - } - i++; - continue; - } - else - { - hacker play_sound_on_ent( "no_purchase" ); - hacker maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money", undefined, 1 ); - } - i++; - } - } -} - -hacker_on_player_connect() -{ - struct = spawnstruct(); - struct.origin = self.origin; - struct.radius = 48; - struct.height = 64; - struct.script_float = 10; - struct.script_int = 500; - struct.entity = self; - struct.trigger_offset = vectorScale( ( 0, 0, 1 ), 48 ); - register_pooled_hackable_struct( struct, ::player_hack, ::player_qualifier ); - struct thread player_hack_disconnect_watcher( self ); -} - -player_hack_disconnect_watcher( player ) -{ - player waittill( "disconnect" ); - deregister_hackable_struct( self ); -} - -player_hack( hacker ) -{ - if ( isDefined( self.entity ) ) - { - self.entity maps/mp/zombies/_zm_score::player_add_points( "hacker_transfer", 500 ); - } - if ( isDefined( hacker ) ) - { - hacker thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "hack_plr" ); - } -} - -player_qualifier( player ) -{ - if ( player == self.entity ) - { - return 0; - } - if ( self.entity maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - return 0; - } - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - return 0; - } - if ( isDefined( self.entity.sessionstate == "spectator" ) && self.entity.sessionstate == "spectator" ) - { - return 0; - } - return 1; -} - -hide_hint_when_hackers_active( custom_logic_func, custom_logic_func_param ) -{ - invis_to_any = 0; - while ( 1 ) - { - if ( isDefined( custom_logic_func ) ) - { - self [[ custom_logic_func ]]( custom_logic_func_param ); - } - if ( maps/mp/zombies/_zm_equip_hacker::any_hackers_active() ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] hacker_active() ) - { - self setinvisibletoplayer( players[ i ], 1 ); - invis_to_any = 1; - i++; - continue; - } - else - { - self setinvisibletoplayer( players[ i ], 0 ); - } - i++; - } - } - else while ( invis_to_any ) - { - invis_to_any = 0; - players = get_players(); - i = 0; - while ( i < players.size ) - { - self setinvisibletoplayer( players[ i ], 0 ); - i++; - } - } - wait 0,1; - } -} - -hacker_debug_print( msg, color ) -{ -/# - if ( !getDvarInt( #"428DE100" ) ) - { - return; - } - if ( !isDefined( color ) ) - { - color = ( 0, 0, 1 ); - } - print3d( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), msg, color, 1, 1, 40 ); -#/ -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_equip_turbine.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_equip_turbine.gsc deleted file mode 100644 index e2518e5..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_equip_turbine.gsc +++ /dev/null @@ -1,772 +0,0 @@ -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_power; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -#using_animtree( "zombie_turbine" ); - -init() -{ - if ( !maps/mp/zombies/_zm_equipment::is_equipment_included( "equip_turbine_zm" ) ) - { - return; - } - level.turbine_name = "equip_turbine_zm"; - maps/mp/zombies/_zm_equipment::register_equipment( "equip_turbine_zm", &"ZOMBIE_EQUIP_TURBINE_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_TURBINE_HOWTO", "turbine_zm_icon", "turbine", undefined, ::transferturbine, ::dropturbine, ::pickupturbine, ::placeturbine ); - maps/mp/zombies/_zm_equipment::add_placeable_equipment( "equip_turbine_zm", "p6_anim_zm_buildable_turbine", ::destroy_placed_turbine ); - level thread onplayerconnect(); - maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "equip_turbine", &"ZOMBIE_EQUIP_TURBINE_PICKUP_HINT_STRING" ); - level._effect[ "turbine_on" ] = loadfx( "maps/zombie/fx_zmb_tranzit_wind_turbine_on" ); - level._effect[ "turbine_med" ] = loadfx( "maps/zombie/fx_zmb_tranzit_wind_turbine_med" ); - level._effect[ "turbine_low" ] = loadfx( "maps/zombie/fx_zmb_tranzit_wind_turbine_low" ); - level._effect[ "turbine_aoe" ] = loadfx( "maps/zombie/fx_zmb_tranzit_wind_turbine_aoe" ); - level._turbine_disappear_fx = loadfx( "maps/zombie/fx_zmb_tranzit_turbine_explo" ); -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread onplayerspawned(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - self thread setupwatchers(); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread watchturbineuse(); - } -} - -setupwatchers() -{ - self waittill( "weapon_watchers_created" ); - watcher = maps/mp/gametypes_zm/_weaponobjects::getweaponobjectwatcher( "equip_turbine" ); - watcher.onspawnretrievetriggers = ::maps/mp/zombies/_zm_equipment::equipment_onspawnretrievableweaponobject; -} - -watchturbineuse() -{ - self notify( "watchTurbineUse" ); - self endon( "watchTurbineUse" ); - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "equipment_placed", weapon, weapname ); - if ( weapname == level.turbine_name ) - { - self cleanupoldturbine(); - self.buildableturbine = weapon; - self thread startturbinedeploy( weapon ); - level notify( "turbine_deployed" ); - } - } -} - -cleanupoldturbine( preserve_state ) -{ - if ( isDefined( self.localpower ) ) - { - maps/mp/zombies/_zm_power::end_local_power( self.localpower ); - self notify( "depower_on_disconnect" ); - self.localpower = undefined; - self.turbine_power_is_on = 0; - } - self.turbine_is_powering_on = 0; - if ( isDefined( self.buildableturbine ) ) - { - if ( isDefined( self.buildableturbine.stub ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildableturbine.stub ); - self.buildableturbine.stub = undefined; - } - self.buildableturbine stoploopsound(); - self.buildableturbine delete(); - if ( isDefined( preserve_state ) && !preserve_state ) - { - self.turbine_health = undefined; - self.turbine_emped = undefined; - self.turbine_emp_time = undefined; - } - } -} - -watchforcleanup() -{ - self notify( "turbine_cleanup" ); - self endon( "turbine_cleanup" ); - evt = self waittill_any_return( "death", "disconnect", "equip_turbine_zm_taken", "equip_turbine_zm_pickup" ); - if ( isDefined( self ) ) - { - self cleanupoldturbine( evt == "equip_turbine_zm_pickup" ); - } -} - -depower_on_disconnect( localpower ) -{ - self notify( "depower_on_disconnect" ); - self endon( "depower_on_disconnect" ); - self waittill( "disconnect" ); - if ( isDefined( localpower ) ) - { - maps/mp/zombies/_zm_power::end_local_power( localpower ); - } -} - -placeturbine( origin, angles ) -{ - item = self maps/mp/zombies/_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_turbine", "equip_turbine_zm", origin, angles ); - return item; -} - -dropturbine() -{ - item = thread maps/mp/zombies/_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_turbine", "equip_turbine_zm", self.origin, self.angles ); - if ( isDefined( item ) ) - { - item.turbine_power_on = self.turbine_power_on; - item.turbine_power_level = self.turbine_power_level; - item.turbine_round_start = self.turbine_round_start; - item.turbine_health = self.turbine_health; - item.turbine_emped = self.turbine_emped; - item.turbine_emp_time = self.turbine_emp_time; - } - self.turbine_is_powering_on = undefined; - self.turbine_power_on = undefined; - self.turbine_power_level = undefined; - self.turbine_round_start = undefined; - self.turbine_health = undefined; - self.turbine_emped = undefined; - self.turbine_emp_time = undefined; - return item; -} - -pickupturbine( item ) -{ - item.owner = self; - self.turbine_power_on = item.turbine_power_on; - item.turbine_power_on = undefined; - self.turbine_power_level = item.turbine_power_level; - self.turbine_round_start = item.turbine_round_start; - self.turbine_health = item.turbine_health; - item.turbine_health = undefined; - item.turbine_power_level = undefined; - item.turbine_round_start = undefined; - self.turbine_emped = item.turbine_emped; - self.turbine_emp_time = item.turbine_emp_time; - item.turbine_emped = undefined; - item.turbine_emp_time = undefined; - self.turbine_is_powering_on = undefined; -} - -transferturbine( fromplayer, toplayer ) -{ - while ( isDefined( toplayer.turbine_is_powering_on ) || toplayer.turbine_is_powering_on && isDefined( fromplayer.turbine_is_powering_on ) && fromplayer.turbine_is_powering_on ) - { - wait 0,05; - } - if ( isDefined( fromplayer.buildableturbine ) && isDefined( fromplayer.buildableturbine.dying ) && fromplayer.buildableturbine.dying ) - { - fromplayer cleanupoldturbine( 0 ); - } - if ( isDefined( toplayer.buildableturbine ) && isDefined( toplayer.buildableturbine.dying ) && toplayer.buildableturbine.dying ) - { - toplayer cleanupoldturbine( 0 ); - } - buildableturbine = toplayer.buildableturbine; - localpower = toplayer.localpower; - turbine_power_on = toplayer.turbine_power_on; - turbine_power_is_on = toplayer.turbine_power_is_on; - turbine_power_level = toplayer.turbine_power_level; - turbine_round_start = toplayer.turbine_round_start; - turbine_health = toplayer.turbine_health; - turbine_emped = toplayer.turbine_emped; - turbine_emp_time = toplayer.turbine_emp_time; - toplayer.buildableturbine = fromplayer.buildableturbine; - fromplayer.buildableturbine = buildableturbine; - toplayer.localpower = fromplayer.localpower; - fromplayer.localpower = localpower; - toplayer.turbine_power_on = fromplayer.turbine_power_on; - fromplayer.turbine_power_on = turbine_power_on; - toplayer.turbine_power_is_on = fromplayer.turbine_power_is_on; - fromplayer.turbine_power_is_on = turbine_power_is_on; - toplayer.turbine_power_level = fromplayer.turbine_power_level; - toplayer.turbine_round_start = fromplayer.turbine_round_start; - fromplayer.turbine_power_level = turbine_power_level; - fromplayer.turbine_round_start = turbine_round_start; - toplayer.turbine_health = fromplayer.turbine_health; - fromplayer.turbine_health = turbine_health; - toplayer.turbine_emped = fromplayer.turbine_emped; - fromplayer.turbine_emped = turbine_emped; - toplayer.turbine_emp_time = fromplayer.turbine_emp_time; - fromplayer.turbine_emp_time = turbine_emp_time; - toplayer.turbine_is_powering_on = undefined; - fromplayer.turbine_is_powering_on = undefined; - toplayer notify( "equip_turbine_zm_taken" ); - toplayer.buildableturbine.original_owner = toplayer; - toplayer thread startturbinedeploy( toplayer.buildableturbine ); - fromplayer notify( "equip_turbine_zm_taken" ); - if ( isDefined( fromplayer.buildableturbine ) ) - { - fromplayer thread startturbinedeploy( fromplayer.buildableturbine ); - fromplayer.buildableturbine.original_owner = fromplayer; - fromplayer.buildableturbine.owner = fromplayer; - } - else - { - fromplayer maps/mp/zombies/_zm_equipment::equipment_release( "equip_turbine_zm" ); - } -} - -startturbinedeploy( weapon ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_turbine_zm_taken" ); - self thread watchforcleanup(); - origin = weapon.origin; - powerradius = 335; - if ( !isDefined( self.turbine_health ) ) - { - self.turbine_health = 1200; - self.turbine_power_level = 4; - self.turbine_power_on = 1; - self.turbine_is_powering_on = undefined; - } - if ( !isDefined( self.turbine_round_start ) ) - { - self.turbine_round_start = level.round_number; - self.turbine_power_on = 1; - } - self thread turbinedecay(); - self thread turbinepowerdiminish( origin, powerradius ); - if ( isDefined( weapon ) ) - { -/# - self thread debugturbine( powerradius ); -#/ - self thread turbineaudio(); - self thread turbineanim(); - self thread turbinepowerthink( weapon, powerradius ); - if ( isDefined( weapon.equipment_can_move ) && weapon.equipment_can_move ) - { - self thread turbinepowermove( weapon ); - } - self thread maps/mp/zombies/_zm_buildables::delete_on_disconnect( weapon ); - weapon waittill( "death" ); - self thread turbinepoweroff( origin, powerradius ); - self notify( "turbine_cleanup" ); - } -} - -turbine_watch_for_emp( weapon, powerradius ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_turbine_zm_taken" ); - self.buildableturbine endon( "death" ); - while ( 1 ) - { - level waittill( "emp_detonate", origin, radius ); - if ( distancesquared( origin, self.buildableturbine.origin ) < ( radius * radius ) ) - { - break; - } - else - { - } - } - self.turbine_emped = 1; - self.turbine_emp_time = getTime(); - self notify( "turbine_power_change" ); -} - -turbinepowerthink( weapon, powerradius ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_turbine_zm_taken" ); - self.buildableturbine endon( "death" ); - origin = weapon.origin; - self thread turbine_watch_for_emp( weapon, powerradius ); - if ( isDefined( self.turbine_power_on ) || self.turbine_power_on && isDefined( self.turbine_emped ) && self.turbine_emped ) - { - self thread turbinepoweron( origin, powerradius ); - } - while ( isDefined( self.buildableturbine ) ) - { - self waittill( "turbine_power_change" ); - if ( isDefined( self.turbine_emped ) && self.turbine_emped ) - { - self thread turbinepoweroff( origin, powerradius ); - if ( isDefined( weapon ) ) - { - origin = weapon.origin; - } - self thread turbinepoweron( origin, powerradius ); - continue; - } - else - { - if ( isDefined( self.turbine_power_is_on ) && !self.turbine_power_is_on ) - { - self thread turbinepoweroff( origin, powerradius ); - break; - } - else - { - if ( isDefined( weapon ) ) - { - origin = weapon.origin; - } - self thread turbinepoweron( origin, powerradius ); - } - } - } -} - -turbinepowermove( weapon ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_turbine_zm_taken" ); - self.buildableturbine endon( "death" ); - origin = weapon.origin; - while ( 1 ) - { - if ( origin != weapon.origin ) - { - if ( isDefined( self.localpower ) ) - { - self.localpower = maps/mp/zombies/_zm_power::move_local_power( self.localpower, origin ); - } - origin = weapon.origin; - } - wait 0,5; - } -} - -turbinewarmup() -{ - if ( isDefined( self.turbine_emped ) && self.turbine_emped ) - { - emp_time = level.zombie_vars[ "emp_perk_off_time" ]; - now = getTime(); - emp_time_left = emp_time - ( ( now - self.turbine_emp_time ) / 1000 ); - if ( emp_time_left > 0 ) - { - wait emp_time_left; - } - self.turbine_emped = undefined; - self.turbine_emp_time = undefined; - } - playfxontag( level._effect[ "turbine_low" ], self.buildableturbine, "tag_animate" ); - wait 0,5; - playfxontag( level._effect[ "turbine_med" ], self.buildableturbine, "tag_animate" ); - wait 0,5; - playfxontag( level._effect[ "turbine_on" ], self.buildableturbine, "tag_animate" ); - wait 0,5; -} - -turbinepoweron( origin, powerradius ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_turbine_zm_taken" ); - self.buildableturbine endon( "death" ); - if ( isDefined( self.turbine_power_is_on ) && !self.turbine_power_is_on && isDefined( self.turbine_is_powering_on ) && !self.turbine_is_powering_on && isDefined( self.buildableturbine.dying ) && !self.buildableturbine.dying ) - { - self.turbine_is_powering_on = 1; - self.buildableturbine playloopsound( "zmb_turbine_loop", 2 ); - self turbinewarmup(); - if ( isDefined( self.localpower ) ) - { - maps/mp/zombies/_zm_power::end_local_power( self.localpower ); - } - self.localpower = undefined; - self.turbine_power_is_on = 0; - if ( isDefined( self.turbine_emped ) && !self.turbine_emped ) - { - self.localpower = maps/mp/zombies/_zm_power::add_local_power( origin, powerradius ); - self thread depower_on_disconnect( self.localpower ); - self.turbine_power_is_on = 1; - self thread turbineaudio(); - } - self.turbine_is_powering_on = 0; - self thread turbinefx(); - self thread turbinedecay(); - } -} - -turbinepoweroff( origin, powerradius ) -{ - if ( isDefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) - { - if ( isDefined( self.localpower ) ) - { - maps/mp/zombies/_zm_power::end_local_power( self.localpower ); - } - self notify( "depower_on_disconnect" ); - self.localpower = undefined; - self.turbine_power_is_on = 0; - self thread turbineaudio(); - if ( isDefined( self.buildableturbine.dying ) && !self.buildableturbine.dying ) - { - self thread turbineanim(); - } - } -} - -turbine_disappear_fx( origin, waittime ) -{ - if ( isDefined( waittime ) && waittime > 0 ) - { - wait waittime; - } - playfx( level._turbine_disappear_fx, origin ); - if ( isDefined( self.buildableturbine ) ) - { - playsoundatposition( "zmb_turbine_explo", self.buildableturbine.origin ); - } -} - -turbinefxonce( withaoe ) -{ - if ( isDefined( self ) && isDefined( self.buildableturbine ) && isDefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) - { - switch( self.turbine_power_level ) - { - case 3: - case 4: - playfxontag( level._effect[ "turbine_on" ], self.buildableturbine, "tag_animate" ); - break; - case 2: - playfxontag( level._effect[ "turbine_med" ], self.buildableturbine, "tag_animate" ); - break; - case 1: - playfxontag( level._effect[ "turbine_low" ], self.buildableturbine, "tag_animate" ); - break; - } - if ( withaoe ) - { - if ( isDefined( self.buildableturbine.equipment_can_move ) && self.buildableturbine.equipment_can_move && isDefined( self.buildableturbine.move_parent.ismoving ) && self.buildableturbine.move_parent.ismoving ) - { - playfxontag( level._effect[ "turbine_aoe" ], self.buildableturbine, "tag_animate" ); - } - else - { - playfx( level._effect[ "turbine_aoe" ], self.buildableturbine.origin ); - } - self.buildableturbine playsound( "zmb_turbine_pulse" ); - } - } -} - -turbinefx() -{ - self endon( "disconnect" ); - while ( isDefined( self ) && isDefined( self.buildableturbine ) && isDefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) - { - self turbinefxonce( 1 ); - wait 0,5; - self turbinefxonce( 0 ); - wait 0,5; - } -} - -turbineaudio() -{ - if ( !isDefined( self.buildableturbine ) ) - { - return; - } - if ( isDefined( self.turbine_power_is_on ) || !self.turbine_power_is_on && isDefined( self.turbine_emped ) && self.turbine_emped ) - { - self.buildableturbine stoploopsound(); - return; - } - self.buildableturbine playloopsound( "zmb_turbine_loop", 2 ); -} - -init_animtree() -{ - scriptmodelsuseanimtree( -1 ); -} - -turbineanim( wait_for_end ) -{ - if ( !isDefined( self.buildableturbine ) ) - { - return; - } - animlength = 0; - self.buildableturbine useanimtree( -1 ); - if ( isDefined( self.buildableturbine.dying ) && self.buildableturbine.dying ) - { - animlength = getanimlength( %o_zombie_buildable_turbine_death ); - self.buildableturbine setanim( %o_zombie_buildable_turbine_death ); - break; -} -else -{ - if ( isDefined( self.turbine_emped ) && self.turbine_emped ) - { - self.buildableturbine clearanim( %o_zombie_buildable_turbine_fullpower, 0 ); - return; - break; -} -else -{ - switch( self.turbine_power_level ) - { - case 3: - case 4: - animlength = getanimlength( %o_zombie_buildable_turbine_fullpower ); - self.buildableturbine setanim( %o_zombie_buildable_turbine_fullpower ); - break; - case 2: - animlength = getanimlength( %o_zombie_buildable_turbine_halfpower ); - self.buildableturbine setanim( %o_zombie_buildable_turbine_halfpower ); - break; - case 1: - animlength = getanimlength( %o_zombie_buildable_turbine_neardeath ); - self.buildableturbine setanim( %o_zombie_buildable_turbine_neardeath ); - break; - } -} -} -if ( isDefined( wait_for_end ) && wait_for_end ) -{ -wait animlength; -} -} - -turbinedecay() -{ - self notify( "turbineDecay" ); - self endon( "turbineDecay" ); - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_turbine_zm_taken" ); - self.buildableturbine endon( "death" ); - roundlives = 4; - if ( !isDefined( self.turbine_power_level ) ) - { - self.turbine_power_level = roundlives; - } - while ( self.turbine_health > 0 ) - { - old_power_level = self.turbine_power_level; - if ( isDefined( self.turbine_emped ) && self.turbine_emped && isDefined( self.turbine_is_powering_on ) && self.turbine_is_powering_on ) - { - emp_time = level.zombie_vars[ "emp_perk_off_time" ]; - now = getTime(); - emp_time_left = emp_time - ( ( now - self.turbine_emp_time ) / 1000 ); - if ( emp_time_left <= 0 ) - { - self.turbine_emped = undefined; - self.turbine_emp_time = undefined; - self.turbine_power_is_on = 0; - old_power_level = -1; - } - } - if ( isDefined( self.turbine_emped ) && self.turbine_emped ) - { - self.turbine_power_level = 0; - } - else - { - if ( isDefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) - { - cost = 1; - if ( isDefined( self.localpower ) ) - { - cost += maps/mp/zombies/_zm_power::get_local_power_cost( self.localpower ); - } - self.turbine_health -= cost; - if ( self.turbine_health < 200 ) - { - self.turbine_power_level = 1; - break; - } - else if ( self.turbine_health < 600 ) - { - self.turbine_power_level = 2; - break; - } - else - { - self.turbine_power_level = 4; - } - } - } - if ( old_power_level != self.turbine_power_level ) - { - self notify( "turbine_power_change" ); - self thread turbineaudio(); - if ( isDefined( self.buildableturbine.dying ) && !self.buildableturbine.dying ) - { - self thread turbineanim(); - } - } - wait 1; - } - self destroy_placed_turbine(); - if ( isDefined( self.buildableturbine ) ) - { - turbine_disappear_fx( self.buildableturbine.origin ); - } - self thread wait_and_take_equipment(); - self.turbine_health = undefined; - self.turbine_power_level = undefined; - self.turbine_round_start = undefined; - self.turbine_power_on = undefined; - self.turbine_emped = undefined; - self.turbine_emp_time = undefined; - self cleanupoldturbine(); -} - -destroy_placed_turbine() -{ - if ( isDefined( self.buildableturbine ) ) - { - if ( isDefined( self.buildableturbine.dying ) && self.buildableturbine.dying ) - { - while ( isDefined( self.buildableturbine ) ) - { - wait 0,05; - } - return; - } - if ( isDefined( self.buildableturbine.stub ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildableturbine.stub ); - } - thread turbine_disappear_fx( self.buildableturbine.origin, 0,75 ); - self.buildableturbine.dying = 1; - self turbineanim( 1 ); - } -} - -wait_and_take_equipment() -{ - wait 0,05; - self thread maps/mp/zombies/_zm_equipment::equipment_release( "equip_turbine_zm" ); -} - -turbinepowerdiminish( origin, powerradius ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_turbine_zm_taken" ); - self.buildableturbine endon( "death" ); - while ( isDefined( self.buildableturbine.dying ) && !self.buildableturbine.dying ) - { - if ( isDefined( self.turbine_power_level ) && isDefined( self.buildableturbine ) ) - { - switch( self.turbine_power_level ) - { - case 4: - break; - case 3: - case 2: - self.turbine_power_on = 1; - wait randomintrange( 12, 20 ); - self turbinepoweroff( origin, powerradius ); - self.turbine_power_on = 0; - wait randomintrange( 3, 8 ); - self turbinepoweron( origin, powerradius ); - break; - case 1: - self.turbine_power_on = 1; - wait randomintrange( 3, 7 ); - self turbinepoweroff( origin, powerradius ); - self.turbine_power_on = 0; - wait randomintrange( 6, 12 ); - self turbinepoweron( origin, powerradius ); - break; - } - } - wait 0,05; - } - } -} - -debugturbine( radius ) -{ -/# - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_turbine_zm_taken" ); - self.buildableturbine endon( "death" ); - while ( isDefined( self.buildableturbine ) ) - { - if ( getDvarInt( #"EB512CB7" ) ) - { - color = ( 0, 0, 1 ); - text = ""; - if ( isDefined( self.turbine_health ) ) - { - text = "" + self.turbine_health + ""; - } - if ( isDefined( self.buildableturbine.dying ) && self.buildableturbine.dying ) - { - text = "dying"; - color = ( 0, 0, 1 ); - } - else - { - if ( isDefined( self.turbine_emped ) && self.turbine_emped ) - { - color = ( 0, 0, 1 ); - emp_time = level.zombie_vars[ "emp_perk_off_time" ]; - now = getTime(); - emp_time_left = int( emp_time - ( ( now - self.turbine_emp_time ) / 1000 ) ); - text = ( text + " emp(" ) + emp_time_left + ")"; - break; - } - else - { - if ( isDefined( self.turbine_is_powering_on ) && self.turbine_is_powering_on ) - { - text += " warmup"; - break; - } - else - { - if ( isDefined( self.turbine_power_is_on ) && self.turbine_power_is_on ) - { - if ( self.turbine_health < 200 ) - { - color = ( 0, 0, 1 ); - break; - } - else if ( self.turbine_health < 600 ) - { - color = ( 1, 0,7, 0 ); - break; - } - else - { - color = ( 0, 0, 1 ); - } - } - } - } - } - print3d( self.buildableturbine.origin + vectorScale( ( 0, 0, 1 ), 60 ), text, color, 1, 0,5, 1 ); - } - wait 0,05; -#/ - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_equip_turret.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_equip_turret.gsc deleted file mode 100644 index 66e4673..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_equip_turret.gsc +++ /dev/null @@ -1,350 +0,0 @@ -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_mgturret; -#include maps/mp/zombies/_zm_power; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( !maps/mp/zombies/_zm_equipment::is_equipment_included( "equip_turret_zm" ) ) - { - return; - } - precachemodel( "p6_anim_zm_buildable_turret" ); - precacheturret( "zombie_bullet_crouch_zm" ); - level.turret_name = "equip_turret_zm"; - maps/mp/zombies/_zm_equipment::register_equipment( "equip_turret_zm", &"ZOMBIE_EQUIP_TURRET_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_TURRET_HOWTO", "turret_zm_icon", "turret", undefined, ::transferturret, ::dropturret, ::pickupturret, ::placeturret ); - maps/mp/zombies/_zm_equipment::add_placeable_equipment( "equip_turret_zm", "p6_anim_zm_buildable_turret" ); - level thread onplayerconnect(); - maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "equip_turret", &"ZOMBIE_EQUIP_TURRET_PICKUP_HINT_STRING" ); -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread onplayerspawned(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - self thread setupwatchers(); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread watchturretuse(); - } -} - -setupwatchers() -{ - self waittill( "weapon_watchers_created" ); - watcher = maps/mp/gametypes_zm/_weaponobjects::getweaponobjectwatcher( "equip_turret" ); - watcher.onspawnretrievetriggers = ::maps/mp/zombies/_zm_equipment::equipment_onspawnretrievableweaponobject; -} - -watchturretuse() -{ - self notify( "watchTurretUse" ); - self endon( "watchTurretUse" ); - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "equipment_placed", weapon, weapname ); - if ( weapname == level.turret_name ) - { - self cleanupoldturret(); - self.buildableturret = weapon; - self thread startturretdeploy( weapon ); - } - } -} - -cleanupoldturret() -{ - if ( isDefined( self.buildableturret ) ) - { - if ( isDefined( self.buildableturret.stub ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildableturret.stub ); - self.buildableturret.stub = undefined; - } - if ( isDefined( self.buildableturret.turret ) ) - { - if ( isDefined( self.buildableturret.turret.sound_ent ) ) - { - self.buildableturret.turret.sound_ent delete(); - } - self.buildableturret.turret delete(); - } - if ( isDefined( self.buildableturret.sound_ent ) ) - { - self.buildableturret.sound_ent delete(); - self.buildableturret.sound_ent = undefined; - } - self.buildableturret delete(); - self.turret_health = undefined; - } - else - { - if ( isDefined( self.turret ) ) - { - self.turret notify( "stop_burst_fire_unmanned" ); - self.turret delete(); - } - } - self.turret = undefined; - self notify( "turret_cleanup" ); -} - -watchforcleanup() -{ - self notify( "turret_cleanup" ); - self endon( "turret_cleanup" ); - self waittill_any( "death", "disconnect", "equip_turret_zm_taken", "equip_turret_zm_pickup" ); - cleanupoldturret(); -} - -placeturret( origin, angles ) -{ - item = self maps/mp/zombies/_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_turret", "equip_turret_zm", origin, angles ); - if ( isDefined( item ) ) - { - item.owner = self; - } - return item; -} - -dropturret() -{ - item = self maps/mp/zombies/_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_turret", "equip_turret_zm", self.origin, self.angles ); - if ( isDefined( item ) ) - { - item.turret_health = self.turret_health; - } - self.turret_health = undefined; - return item; -} - -pickupturret( item ) -{ - item.owner = self; - self.turret_health = item.turret_health; - item.turret_health = undefined; -} - -transferturret( fromplayer, toplayer ) -{ - buildableturret = toplayer.buildableturret; - turret = toplayer.turret; - toplayer.buildableturret = fromplayer.buildableturret; - toplayer.turret = fromplayer.turret; - fromplayer.buildableturret = buildableturret; - fromplayer.turret = turret; - toplayer.buildableturret.original_owner = toplayer; - toplayer notify( "equip_turret_zm_taken" ); - toplayer thread startturretdeploy( toplayer.buildableturret ); - fromplayer notify( "equip_turret_zm_taken" ); - if ( isDefined( fromplayer.buildableturret ) ) - { - fromplayer thread startturretdeploy( fromplayer.buildableturret ); - fromplayer.buildableturret.original_owner = fromplayer; - fromplayer.buildableturret.owner = fromplayer; - } - else - { - fromplayer maps/mp/zombies/_zm_equipment::equipment_release( "equip_turret_zm" ); - } - turret_health = toplayer.turret_health; - toplayer.turret_health = fromplayer.turret_health; - fromplayer.turret_health = turret_health; -} - -startturretdeploy( weapon ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_turret_zm_taken" ); - self thread watchforcleanup(); - if ( !isDefined( self.turret_health ) ) - { - self.turret_health = 60; - } - if ( isDefined( weapon ) ) - { - weapon hide(); - wait 0,1; - if ( isDefined( weapon.power_on ) && weapon.power_on ) - { - weapon.turret notify( "stop_burst_fire_unmanned" ); - } - if ( !isDefined( weapon ) ) - { - return; - } - if ( isDefined( self.turret ) ) - { - self.turret notify( "stop_burst_fire_unmanned" ); - self.turret notify( "turret_deactivated" ); - self.turret delete(); - } - turret = spawnturret( "misc_turret", weapon.origin, "zombie_bullet_crouch_zm" ); - turret.turrettype = "sentry"; - turret setturrettype( turret.turrettype ); - turret setmodel( "p6_anim_zm_buildable_turret" ); - turret.origin = weapon.origin; - turret.angles = weapon.angles; - turret linkto( weapon ); - turret makeunusable(); - turret.owner = self; - turret setowner( turret.owner ); - turret maketurretunusable(); - turret setmode( "auto_nonai" ); - turret setdefaultdroppitch( 45 ); - turret setconvergencetime( 0,3 ); - turret setturretteam( self.team ); - turret.team = self.team; - turret.damage_own_team = 1; - turret.turret_active = 1; - weapon.turret = turret; - self.turret = turret; - if ( isDefined( level.equipment_turret_needs_power ) && level.equipment_turret_needs_power ) - { - weapon.power_on = 0; - maps/mp/zombies/_zm_power::add_temp_powered_item( ::turret_power_on, ::turret_power_off, ::turret_in_range, ::maps/mp/zombies/_zm_power::cost_high, 1, weapon.power_on, weapon ); - } - else - { - weapon.power_on = 1; - } - if ( weapon.power_on ) - { - turret thread maps/mp/zombies/_zm_mgturret::burst_fire_unmanned(); - } - else - { - self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" ); - } - if ( isDefined( level.equipment_turret_needs_power ) && !level.equipment_turret_needs_power ) - { - self thread turretdecay( weapon ); - } - self thread maps/mp/zombies/_zm_buildables::delete_on_disconnect( weapon ); - while ( isDefined( weapon ) ) - { - if ( !is_true( weapon.power_on ) ) - { - if ( isDefined( self.buildableturret.sound_ent ) ) - { - self.buildableturret.sound_ent playsound( "wpn_zmb_turret_stop" ); - self.buildableturret.sound_ent delete(); - self.buildableturret.sound_ent = undefined; - } - } - wait 0,1; - } - if ( isDefined( self.buildableturret.sound_ent ) ) - { - self.buildableturret.sound_ent playsound( "wpn_zmb_turret_stop" ); - self.buildableturret.sound_ent delete(); - self.buildableturret.sound_ent = undefined; - } - if ( isDefined( turret ) ) - { - turret notify( "stop_burst_fire_unmanned" ); - turret notify( "turret_deactivated" ); - turret delete(); - } - self.turret = undefined; - self notify( "turret_cleanup" ); - } -} - -turret_in_range( delta, origin, radius ) -{ - if ( distancesquared( self.target.origin, origin ) < ( radius * radius ) ) - { - return 1; - } - return 0; -} - -turret_power_on( origin, radius ) -{ -/# - println( "^1ZM POWER: turret on\n" ); -#/ - if ( !isDefined( self.target ) ) - { - return; - } - self.target.power_on = 1; - self.target.turret thread maps/mp/zombies/_zm_mgturret::burst_fire_unmanned(); - player = self.target.turret.owner; - if ( !isDefined( player.buildableturret.sound_ent ) ) - { - player.buildableturret.sound_ent = spawn( "script_origin", self.target.turret.origin ); - } - player.buildableturret.sound_ent playsound( "wpn_zmb_turret_start" ); - player.buildableturret.sound_ent playloopsound( "wpn_zmb_turret_loop", 2 ); -} - -turret_power_off( origin, radius ) -{ -/# - println( "^1ZM POWER: turret off\n" ); -#/ - if ( !isDefined( self.target ) ) - { - return; - } - self.target.power_on = 0; - self.target.turret notify( "stop_burst_fire_unmanned" ); - player = self.target.turret.owner; - if ( isDefined( player.buildableturret.sound_ent ) ) - { - player.buildableturret.sound_ent playsound( "wpn_zmb_turret_stop" ); - player.buildableturret.sound_ent delete(); - player.buildableturret.sound_ent = undefined; - } -} - -turretdecay( weapon ) -{ - self endon( "death" ); - self endon( "disconnect" ); - while ( isDefined( weapon ) ) - { - if ( weapon.power_on ) - { - self.turret_health--; - - if ( self.turret_health <= 0 ) - { - self cleanupoldturret(); - self thread maps/mp/zombies/_zm_equipment::equipment_release( "equip_turret_zm" ); - return; - } - } - wait 1; - } -} - -debugturret( radius ) -{ -/# - while ( isDefined( self ) ) - { - circle( self.origin, radius, ( 1, 1, 1 ), 0, 1, 1 ); - wait 0,05; -#/ - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_equipment.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_equipment.gsc deleted file mode 100644 index 3541513..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_equipment.gsc +++ /dev/null @@ -1,1659 +0,0 @@ -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - init_equipment_upgrade(); - onplayerconnect_callback( ::equipment_placement_watcher ); - level._equipment_disappear_fx = loadfx( "maps/zombie/fx_zmb_tranzit_electrap_explo" ); - level._riotshield_dissapear_fx = loadfx( "maps/zombie/fx_zmb_tranzit_shield_explo" ); - level.placeable_equipment_destroy_fn = []; -} - -register_equipment( equipment_name, hint, howto_hint, hint_icon, equipmentvo, watcher_thread, transfer_fn, drop_fn, pickup_fn, place_fn ) -{ - if ( !isDefined( level.zombie_include_equipment ) || isDefined( level.zombie_include_equipment[ equipment_name ] ) && !level.zombie_include_equipment[ equipment_name ] ) - { - return; - } - precachestring( hint ); - if ( isDefined( hint_icon ) ) - { - precacheshader( hint_icon ); - } - struct = spawnstruct(); - if ( !isDefined( level.zombie_equipment ) ) - { - level.zombie_equipment = []; - } - struct.equipment_name = equipment_name; - struct.hint = hint; - struct.howto_hint = howto_hint; - struct.hint_icon = hint_icon; - struct.vox = equipmentvo; - struct.triggers = []; - struct.models = []; - struct.watcher_thread = watcher_thread; - struct.transfer_fn = transfer_fn; - struct.drop_fn = drop_fn; - struct.pickup_fn = pickup_fn; - struct.place_fn = place_fn; - level.zombie_equipment[ equipment_name ] = struct; -} - -is_equipment_included( equipment_name ) -{ - if ( !isDefined( level.zombie_include_equipment ) ) - { - return 0; - } - return isDefined( level.zombie_include_equipment[ equipment_name ] ); -} - -include_zombie_equipment( equipment_name ) -{ - if ( !isDefined( level.zombie_include_equipment ) ) - { - level.zombie_include_equipment = []; - } - level.zombie_include_equipment[ equipment_name ] = 1; - precacheitem( equipment_name ); -} - -limit_zombie_equipment( equipment_name, limited ) -{ - if ( !isDefined( level._limited_equipment ) ) - { - level._limited_equipment = []; - } - if ( limited ) - { - level._limited_equipment[ level._limited_equipment.size ] = equipment_name; - } - else - { - arrayremovevalue( level._limited_equipment, equipment_name, 0 ); - } -} - -init_equipment_upgrade() -{ - equipment_spawns = []; - equipment_spawns = getentarray( "zombie_equipment_upgrade", "targetname" ); - i = 0; - while ( i < equipment_spawns.size ) - { - hint_string = get_equipment_hint( equipment_spawns[ i ].zombie_equipment_upgrade ); - equipment_spawns[ i ] sethintstring( hint_string ); - equipment_spawns[ i ] setcursorhint( "HINT_NOICON" ); - equipment_spawns[ i ] usetriggerrequirelookat(); - equipment_spawns[ i ] add_to_equipment_trigger_list( equipment_spawns[ i ].zombie_equipment_upgrade ); - equipment_spawns[ i ] thread equipment_spawn_think(); - i++; - } -} - -get_equipment_hint( equipment_name ) -{ -/# - assert( isDefined( level.zombie_equipment[ equipment_name ] ), equipment_name + " was not included or is not registered with the equipment system." ); -#/ - return level.zombie_equipment[ equipment_name ].hint; -} - -get_equipment_howto_hint( equipment_name ) -{ -/# - assert( isDefined( level.zombie_equipment[ equipment_name ] ), equipment_name + " was not included or is not registered with the equipment system." ); -#/ - return level.zombie_equipment[ equipment_name ].howto_hint; -} - -get_equipment_icon( equipment_name ) -{ -/# - assert( isDefined( level.zombie_equipment[ equipment_name ] ), equipment_name + " was not included or is not registered with the equipment system." ); -#/ - return level.zombie_equipment[ equipment_name ].hint_icon; -} - -add_to_equipment_trigger_list( equipment_name ) -{ -/# - assert( isDefined( level.zombie_equipment[ equipment_name ] ), equipment_name + " was not included or is not registered with the equipment system." ); -#/ - level.zombie_equipment[ equipment_name ].triggers[ level.zombie_equipment[ equipment_name ].triggers.size ] = self; - level.zombie_equipment[ equipment_name ].models[ level.zombie_equipment[ equipment_name ].models.size ] = getent( self.target, "targetname" ); -} - -equipment_spawn_think() -{ - for ( ;; ) - { - self waittill( "trigger", player ); - if ( player in_revive_trigger() || player.is_drinking > 0 ) - { - wait 0,1; - continue; - } - else - { - if ( is_limited_equipment( self.zombie_equipment_upgrade ) ) - { - player setup_limited_equipment( self.zombie_equipment_upgrade ); - if ( isDefined( level.hacker_tool_positions ) ) - { - new_pos = random( level.hacker_tool_positions ); - self.origin = new_pos.trigger_org; - model = getent( self.target, "targetname" ); - model.origin = new_pos.model_org; - model.angles = new_pos.model_ang; - } - } - player equipment_give( self.zombie_equipment_upgrade ); - } - } -} - -set_equipment_invisibility_to_player( equipment, invisible ) -{ - triggers = level.zombie_equipment[ equipment ].triggers; - i = 0; - while ( i < triggers.size ) - { - if ( isDefined( triggers[ i ] ) ) - { - triggers[ i ] setinvisibletoplayer( self, invisible ); - } - i++; - } - models = level.zombie_equipment[ equipment ].models; - i = 0; - while ( i < models.size ) - { - if ( isDefined( models[ i ] ) ) - { - models[ i ] setinvisibletoplayer( self, invisible ); - } - i++; - } -} - -equipment_take( equipment ) -{ - if ( !isDefined( equipment ) ) - { - equipment = self get_player_equipment(); - } - if ( !isDefined( equipment ) ) - { - return; - } - if ( !self has_player_equipment( equipment ) ) - { - return; - } - current = 0; - current_weapon = 0; - if ( isDefined( self get_player_equipment() ) && equipment == self get_player_equipment() ) - { - current = 1; - } - if ( equipment == self getcurrentweapon() ) - { - current_weapon = 1; - } -/# - println( "ZM EQUIPMENT: " + self.name + " lost " + equipment + "\n" ); -#/ - if ( self.current_equipment_active[ equipment ] ) - { - self.current_equipment_active[ equipment ] = 0; - self notify( equipment + "_deactivate" ); - } - self notify( equipment + "_taken" ); - self takeweapon( equipment ); - if ( !is_limited_equipment( equipment ) || is_limited_equipment( equipment ) && !limited_equipment_in_use( equipment ) ) - { - self set_equipment_invisibility_to_player( equipment, 0 ); - } - if ( current ) - { - self set_player_equipment( undefined ); - self setactionslot( 1, "" ); - } - else - { - arrayremovevalue( self.deployed_equipment, equipment ); - } - if ( current_weapon ) - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - } -} - -equipment_give( equipment ) -{ - if ( !isDefined( equipment ) ) - { - return; - } - if ( !isDefined( level.zombie_equipment[ equipment ] ) ) - { - return; - } - if ( self has_player_equipment( equipment ) ) - { - return; - } -/# - println( "ZM EQUIPMENT: " + self.name + " got " + equipment + "\n" ); -#/ - curr_weapon = self getcurrentweapon(); - curr_weapon_was_curr_equipment = self is_player_equipment( curr_weapon ); - self equipment_take(); - self set_player_equipment( equipment ); - self giveweapon( equipment ); - self setweaponammoclip( equipment, 1 ); - self thread show_equipment_hint( equipment ); - self notify( equipment + "_given" ); - self set_equipment_invisibility_to_player( equipment, 1 ); - self setactionslot( 1, "weapon", equipment ); - if ( isDefined( level.zombie_equipment[ equipment ].watcher_thread ) ) - { - self thread [[ level.zombie_equipment[ equipment ].watcher_thread ]](); - } - self thread equipment_slot_watcher( equipment ); - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", level.zombie_equipment[ equipment ].vox ); -} - -equipment_slot_watcher( equipment ) -{ - self notify( "kill_equipment_slot_watcher" ); - self endon( "kill_equipment_slot_watcher" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "weapon_change", curr_weapon, prev_weapon ); - self.prev_weapon_before_equipment_change = undefined; - if ( isDefined( prev_weapon ) && prev_weapon != "none" ) - { - prev_weapon_type = weaponinventorytype( prev_weapon ); - if ( prev_weapon_type == "primary" || prev_weapon_type == "altmode" ) - { - self.prev_weapon_before_equipment_change = prev_weapon; - } - } - if ( isDefined( level.zombie_equipment[ equipment ].watcher_thread ) ) - { - if ( curr_weapon == equipment ) - { - if ( self.current_equipment_active[ equipment ] == 1 ) - { - self notify( equipment + "_deactivate" ); - self.current_equipment_active[ equipment ] = 0; - } - else - { - if ( self.current_equipment_active[ equipment ] == 0 ) - { - self notify( equipment + "_activate" ); - self.current_equipment_active[ equipment ] = 1; - } - } - self waittill( "equipment_select_response_done" ); - } - continue; - } - else if ( curr_weapon == equipment && !self.current_equipment_active[ equipment ] ) - { - self notify( equipment + "_activate" ); - self.current_equipment_active[ equipment ] = 1; - continue; - } - else - { - if ( curr_weapon != equipment && self.current_equipment_active[ equipment ] ) - { - self notify( equipment + "_deactivate" ); - self.current_equipment_active[ equipment ] = 0; - } - } - } -} - -is_limited_equipment( equipment ) -{ - while ( isDefined( level._limited_equipment ) ) - { - i = 0; - while ( i < level._limited_equipment.size ) - { - if ( level._limited_equipment[ i ] == equipment ) - { - return 1; - } - i++; - } - } - return 0; -} - -limited_equipment_in_use( equipment ) -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - current_equipment = players[ i ] get_player_equipment(); - if ( isDefined( current_equipment ) && current_equipment == equipment ) - { - return 1; - } - i++; - } - if ( isDefined( level.dropped_equipment ) && isDefined( level.dropped_equipment[ equipment ] ) ) - { - return 1; - } - return 0; -} - -setup_limited_equipment( equipment ) -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] set_equipment_invisibility_to_player( equipment, 1 ); - i++; - } - self thread release_limited_equipment_on_disconnect( equipment ); - self thread release_limited_equipment_on_equipment_taken( equipment ); -} - -release_limited_equipment_on_equipment_taken( equipment ) -{ - self endon( "disconnect" ); - self waittill_either( equipment + "_taken", "spawned_spectator" ); - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] set_equipment_invisibility_to_player( equipment, 0 ); - i++; - } -} - -release_limited_equipment_on_disconnect( equipment ) -{ - self endon( equipment + "_taken" ); - self waittill( "disconnect" ); - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( isalive( players[ i ] ) ) - { - players[ i ] set_equipment_invisibility_to_player( equipment, 0 ); - } - i++; - } -} - -is_equipment_active( equipment ) -{ - if ( !isDefined( self.current_equipment_active ) || !isDefined( self.current_equipment_active[ equipment ] ) ) - { - return 0; - } - return self.current_equipment_active[ equipment ]; -} - -init_equipment_hint_hudelem( x, y, alignx, aligny, fontscale, alpha ) -{ - self.x = x; - self.y = y; - self.alignx = alignx; - self.aligny = aligny; - self.fontscale = fontscale; - self.alpha = alpha; - self.sort = 20; -} - -setup_equipment_client_hintelem() -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( !isDefined( self.hintelem ) ) - { - self.hintelem = newclienthudelem( self ); - } - if ( level.splitscreen ) - { - self.hintelem init_equipment_hint_hudelem( 160, 90, "center", "middle", 1,6, 1 ); - } - else - { - self.hintelem init_equipment_hint_hudelem( 320, 220, "center", "bottom", 1,6, 1 ); - } -} - -show_equipment_hint( equipment ) -{ - self notify( "kill_previous_show_equipment_hint_thread" ); - self endon( "kill_previous_show_equipment_hint_thread" ); - self endon( "death" ); - self endon( "disconnect" ); - wait 0,5; - text = get_equipment_howto_hint( equipment ); - self setup_equipment_client_hintelem(); - self.hintelem settext( text ); - self.hintelem.font = "small"; - self.hintelem.fontscale = 1,25; - self.hintelem.hidewheninmenu = 1; - wait 3,5; - self.hintelem settext( "" ); - self.hintelem destroy(); -} - -equipment_onspawnretrievableweaponobject( watcher, player ) -{ - self waittill( "stationary" ); - waittillframeend; - equipment = watcher.name + "_zm"; -/# - if ( !isDefined( player.current_equipment ) || player.current_equipment != equipment ) - { - assert( player has_deployed_equipment( equipment ) ); - assert( !isDefined( player.current_equipment ) ); -#/ - } - if ( isDefined( player.current_equipment ) && player.current_equipment == equipment ) - { - player equipment_to_deployed( equipment ); - } - if ( isDefined( level.zombie_equipment[ equipment ].place_fn ) ) - { - plant_origin = self.origin; - plant_angles = self.angles; - if ( isDefined( level.check_force_deploy_origin ) ) - { - if ( player [[ level.check_force_deploy_origin ]]( self, plant_origin, plant_angles ) ) - { - plant_origin = player.origin; - plant_angles = player.angles; - } - } - else - { - if ( isDefined( level.check_force_deploy_z ) ) - { - if ( player [[ level.check_force_deploy_z ]]( self, plant_origin, plant_angles ) ) - { - plant_origin = ( plant_origin[ 0 ], plant_origin[ 1 ], player.origin[ 2 ] + 10 ); - } - } - } - replacement = player [[ level.zombie_equipment[ equipment ].place_fn ]]( plant_origin, plant_angles ); - if ( isDefined( replacement ) ) - { - replacement.owner = player; - replacement.original_owner = player; - replacement.name = self.name; - player notify( "equipment_placed" ); - if ( isDefined( level.equipment_planted ) ) - { - player [[ level.equipment_planted ]]( replacement, equipment, self ); - } - player maps/mp/zombies/_zm_buildables::track_buildables_planted( self ); - } - if ( isDefined( self ) ) - { - self delete(); - } - } -} - -equipment_retrieve( player ) -{ - if ( isDefined( self ) ) - { - self stoploopsound(); - original_owner = self.original_owner; - weaponname = self.name; - if ( player != original_owner ) - { - equipment_transfer( weaponname, original_owner, player ); - self.owner = player; - } - player equipment_from_deployed( weaponname ); - if ( isDefined( self.requires_pickup ) && self.requires_pickup ) - { - if ( isDefined( level.zombie_equipment[ weaponname ].pickup_fn ) ) - { - self.owner = player; - if ( isDefined( self.damage ) ) - { - player player_set_equipment_damage( weaponname, self.damage ); - } - player [[ level.zombie_equipment[ weaponname ].pickup_fn ]]( self ); - } - } - self.playdialog = 0; - weaponname = self.name; - self delete(); - if ( !player hasweapon( weaponname ) ) - { - player giveweapon( weaponname ); - clip_ammo = player getweaponammoclip( weaponname ); - clip_max_ammo = weaponclipsize( weaponname ); - if ( clip_ammo < clip_max_ammo ) - { - clip_ammo++; - } - player setweaponammoclip( weaponname, clip_ammo ); - } - player maps/mp/zombies/_zm_buildables::track_planted_buildables_pickedup( weaponname ); - } -} - -equipment_drop_to_planted( equipment, player ) -{ -/# - if ( !isDefined( player.current_equipment ) || player.current_equipment != equipment ) - { - assert( player has_deployed_equipment( equipment ) ); - assert( !isDefined( player.current_equipment ) ); -#/ - } - if ( isDefined( player.current_equipment ) && player.current_equipment == equipment ) - { - player equipment_to_deployed( equipment ); - } - if ( isDefined( level.zombie_equipment[ equipment ].place_fn ) ) - { - replacement = player [[ level.zombie_equipment[ equipment ].place_fn ]]( player.origin, player.angles ); - if ( isDefined( replacement ) ) - { - replacement.owner = player; - replacement.original_owner = player; - replacement.name = equipment; - if ( isDefined( level.equipment_planted ) ) - { - player [[ level.equipment_planted ]]( replacement, equipment, player ); - } - player notify( "equipment_placed" ); - player maps/mp/zombies/_zm_buildables::track_buildables_planted( replacement ); - } - } -} - -equipment_transfer( weaponname, fromplayer, toplayer ) -{ - if ( is_limited_equipment( weaponname ) ) - { -/# - println( "ZM EQUIPMENT: " + weaponname + " transferred from " + fromplayer.name + " to " + toplayer.name + "\n" ); -#/ - toplayer equipment_orphaned( weaponname ); - wait 0,05; -/# - assert( !toplayer has_player_equipment( weaponname ) ); -#/ -/# - assert( fromplayer has_player_equipment( weaponname ) ); -#/ - toplayer equipment_give( weaponname ); - toplayer equipment_to_deployed( weaponname ); - if ( isDefined( level.zombie_equipment[ weaponname ].transfer_fn ) ) - { - [[ level.zombie_equipment[ weaponname ].transfer_fn ]]( fromplayer, toplayer ); - } - fromplayer equipment_release( weaponname ); -/# - assert( toplayer has_player_equipment( weaponname ) ); -#/ -/# - assert( !fromplayer has_player_equipment( weaponname ) ); -#/ - equipment_damage = 0; - toplayer player_set_equipment_damage( weaponname, fromplayer player_get_equipment_damage( weaponname ) ); - fromplayer player_set_equipment_damage( equipment_damage ); - } - else - { -/# - println( "ZM EQUIPMENT: " + weaponname + " swapped from " + fromplayer.name + " to " + toplayer.name + "\n" ); -#/ - toplayer equipment_give( weaponname ); - if ( isDefined( toplayer.current_equipment ) && toplayer.current_equipment == weaponname ) - { - toplayer equipment_to_deployed( weaponname ); - } - if ( isDefined( level.zombie_equipment[ weaponname ].transfer_fn ) ) - { - [[ level.zombie_equipment[ weaponname ].transfer_fn ]]( fromplayer, toplayer ); - } - equipment_damage = toplayer player_get_equipment_damage( weaponname ); - toplayer player_set_equipment_damage( weaponname, fromplayer player_get_equipment_damage( weaponname ) ); - fromplayer player_set_equipment_damage( weaponname, equipment_damage ); - } -} - -equipment_release( equipment ) -{ -/# - println( "ZM EQUIPMENT: " + self.name + " release " + equipment + "\n" ); -#/ - self equipment_take( equipment ); -} - -equipment_drop( equipment ) -{ - if ( isDefined( level.zombie_equipment[ equipment ].place_fn ) ) - { - equipment_drop_to_planted( equipment, self ); -/# - println( "ZM EQUIPMENT: " + self.name + " drop to planted " + equipment + "\n" ); -#/ - } - else if ( isDefined( level.zombie_equipment[ equipment ].drop_fn ) ) - { - if ( isDefined( self.current_equipment ) && self.current_equipment == equipment ) - { - self equipment_to_deployed( equipment ); - } - item = self [[ level.zombie_equipment[ equipment ].drop_fn ]](); - if ( isDefined( item ) ) - { - if ( isDefined( level.equipment_planted ) ) - { - self [[ level.equipment_planted ]]( item, equipment, self ); - } - item.owner = undefined; - item.damage = self player_get_equipment_damage( equipment ); - } -/# - println( "ZM EQUIPMENT: " + self.name + " dropped " + equipment + "\n" ); -#/ - } - else - { - self equipment_take(); - } -} - -equipment_grab( equipment, item ) -{ -/# - println( "ZM EQUIPMENT: " + self.name + " picked up " + equipment + "\n" ); -#/ - self equipment_give( equipment ); - if ( isDefined( level.zombie_equipment[ equipment ].pickup_fn ) ) - { - item.owner = self; - self player_set_equipment_damage( equipment, item.damage ); - self [[ level.zombie_equipment[ equipment ].pickup_fn ]]( item ); - } -} - -equipment_orphaned( equipment ) -{ -/# - println( "ZM EQUIPMENT: " + self.name + " orphaned " + equipment + "\n" ); -#/ - self equipment_take( equipment ); -} - -equipment_to_deployed( equipment ) -{ -/# - println( "ZM EQUIPMENT: " + self.name + " deployed " + equipment + "\n" ); -#/ - if ( !isDefined( self.deployed_equipment ) ) - { - self.deployed_equipment = []; - } -/# - assert( self.current_equipment == equipment ); -#/ - self.deployed_equipment[ self.deployed_equipment.size ] = equipment; - self.current_equipment = undefined; - if ( isDefined( level.riotshield_name ) && equipment != level.riotshield_name ) - { - self takeweapon( equipment ); - } - self setactionslot( 1, "" ); -} - -equipment_from_deployed( equipment ) -{ -/# - println( "ZM EQUIPMENT: " + self.name + " retrieved " + equipment + "\n" ); -#/ - if ( isDefined( self.current_equipment ) && equipment != self.current_equipment ) - { - self equipment_drop( self.current_equipment ); - } -/# - assert( self has_deployed_equipment( equipment ) ); -#/ - self.current_equipment = equipment; - if ( isDefined( level.riotshield_name ) && equipment != level.riotshield_name ) - { - self giveweapon( equipment ); - } - if ( self hasweapon( equipment ) ) - { - self setweaponammoclip( equipment, 1 ); - } - self setactionslot( 1, "weapon", equipment ); - arrayremovevalue( self.deployed_equipment, equipment ); - self notify( equipment + "_pickup" ); -} - -eqstub_get_unitrigger_origin() -{ - if ( isDefined( self.origin_parent ) ) - { - return self.origin_parent.origin; - } - return self.origin + vectorScale( ( 0, 0, 0 ), 12 ); -} - -eqstub_on_spawn_trigger( trigger ) -{ - if ( isDefined( self.link_parent ) ) - { - trigger enablelinkto(); - trigger linkto( self.link_parent ); - trigger setmovingplatformenabled( 1 ); - } -} - -equipment_buy( equipment ) -{ -/# - println( "ZM EQUIPMENT: " + self.name + " bought " + equipment + "\n" ); -#/ - if ( isDefined( self.current_equipment ) && equipment != self.current_equipment ) - { - self equipment_drop( self.current_equipment ); - } - if ( equipment == "riotshield_zm" && isDefined( self.player_shield_reset_health ) ) - { - self [[ self.player_shield_reset_health ]](); - } - else - { - self player_set_equipment_damage( equipment, 0 ); - } - self equipment_give( equipment ); -} - -generate_equipment_unitrigger( classname, origin, angles, flags, radius, script_height, hint, icon, think, moving ) -{ - if ( !isDefined( radius ) ) - { - radius = 64; - } - if ( !isDefined( script_height ) ) - { - script_height = 64; - } - script_width = script_height; - if ( !isDefined( script_width ) ) - { - script_width = 64; - } - script_length = script_height; - if ( !isDefined( script_length ) ) - { - script_length = 64; - } - unitrigger_stub = spawnstruct(); - unitrigger_stub.origin = origin; - if ( isDefined( angles ) ) - { - unitrigger_stub.angles = angles; - } - if ( isDefined( script_length ) ) - { - unitrigger_stub.script_length = script_length; - } - else - { - unitrigger_stub.script_length = 13,5; - } - if ( isDefined( script_width ) ) - { - unitrigger_stub.script_width = script_width; - } - else - { - unitrigger_stub.script_width = 27,5; - } - if ( isDefined( script_height ) ) - { - unitrigger_stub.script_height = script_height; - } - else - { - unitrigger_stub.script_height = 24; - } - unitrigger_stub.radius = radius; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - unitrigger_stub.hint_string = hint; - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.require_look_at = 0; - switch( classname ) - { - case "trigger_radius": - unitrigger_stub.script_unitrigger_type = "unitrigger_radius"; - break; - case "trigger_radius_use": - unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - break; - case "trigger_box": - unitrigger_stub.script_unitrigger_type = "unitrigger_box"; - break; - case "trigger_box_use": - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - break; - } - unitrigger_stub.originfunc = ::eqstub_get_unitrigger_origin; - unitrigger_stub.onspawnfunc = ::eqstub_on_spawn_trigger; - if ( isDefined( moving ) && moving ) - { - maps/mp/zombies/_zm_unitrigger::register_unitrigger( unitrigger_stub, think ); - } - else - { - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, think ); - } - return unitrigger_stub; -} - -can_pick_up_equipment( equipment ) -{ - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || self in_revive_trigger() ) - { - return 0; - } - if ( self isthrowinggrenade() ) - { - return 0; - } - if ( isDefined( self.screecher_weapon ) ) - { - return 0; - } - if ( self is_jumping() ) - { - return 0; - } - if ( self is_player_equipment( equipment ) ) - { - return 0; - } - if ( isDefined( self.pickup_equipment ) && self.pickup_equipment ) - { - return 0; - } - return 1; -} - -placed_equipment_think( model, equipname, origin, angles, tradius, toffset ) -{ - pickupmodel = spawn( "script_model", origin ); - if ( isDefined( angles ) ) - { - pickupmodel.angles = angles; - } - pickupmodel setmodel( model ); - if ( isDefined( level.equipment_safe_to_drop ) ) - { - if ( !( self [[ level.equipment_safe_to_drop ]]( pickupmodel ) ) ) - { - equipment_disappear_fx( pickupmodel.origin ); - pickupmodel delete(); - self equipment_take( equipname ); - return undefined; - } - } - watchername = getsubstr( equipname, 0, equipname.size - 3 ); - if ( isDefined( level.retrievehints[ watchername ] ) ) - { - hint = level.retrievehints[ watchername ].hint; - } - else - { - hint = &"MP_GENERIC_PICKUP"; - } - icon = get_equipment_icon( equipname ); - if ( !isDefined( tradius ) ) - { - tradius = 32; - } - torigin = origin; - if ( isDefined( toffset ) ) - { - offset = 64; - tforward = anglesToForward( angles ); - torigin += toffset * tforward; - } - if ( isDefined( pickupmodel.canmove ) ) - { - pickupmodel.stub = generate_equipment_unitrigger( "trigger_radius_use", torigin + vectorScale( ( 0, 0, 0 ), 12 ), angles, 0, tradius, 64, hint, icon, ::placed_equipment_unitrigger_think, pickupmodel.canmove ); - } - pickupmodel.stub.model = pickupmodel; - pickupmodel.stub.equipname = equipname; - pickupmodel.equipname = equipname; - pickupmodel thread item_attract_zombies(); - pickupmodel thread item_watch_explosions(); - if ( is_limited_equipment( equipname ) ) - { - if ( !isDefined( level.dropped_equipment ) ) - { - level.dropped_equipment = []; - } - if ( isDefined( level.dropped_equipment[ equipname ] ) && isDefined( level.dropped_equipment[ equipname ].model ) ) - { - level.dropped_equipment[ equipname ].model dropped_equipment_destroy( 1 ); - } - level.dropped_equipment[ equipname ] = pickupmodel.stub; - } - destructible_equipment_list_add( pickupmodel ); - return pickupmodel; -} - -watch_player_visibility( equipment ) -{ - self endon( "kill_trigger" ); - while ( isDefined( self ) ) - { - players = getplayers(); - _a1003 = players; - _k1003 = getFirstArrayKey( _a1003 ); - while ( isDefined( _k1003 ) ) - { - player = _a1003[ _k1003 ]; - if ( !isDefined( player ) ) - { - } - else - { - invisible = !player can_pick_up_equipment( equipment ); - if ( isDefined( self ) ) - { - self setinvisibletoplayer( player, invisible ); - } - wait 0,05; - } - _k1003 = getNextArrayKey( _a1003, _k1003 ); - } - wait 1; - } -} - -placed_equipment_unitrigger_think() -{ - self endon( "kill_trigger" ); - self thread watch_player_visibility( self.stub.equipname ); - while ( 1 ) - { - self waittill( "trigger", player ); - while ( !player can_pick_up_equipment( self.stub.equipname ) ) - { - continue; - } - self thread pickup_placed_equipment( player ); - return; - } -} - -pickup_placed_equipment( player ) -{ -/# - if ( isDefined( player.pickup_equipment )assert( !player.pickup_equipment ); -#/ - player.pickup_equipment = 1; - stub = self.stub; - && isDefined( player.current_equipment ) && stub.equipname != player.current_equipment ) - { - player equipment_drop( player.current_equipment ); - } - if ( is_limited_equipment( stub.equipname ) ) - { - if ( isDefined( level.dropped_equipment ) && isDefined( level.dropped_equipment[ stub.equipname ] ) && level.dropped_equipment[ stub.equipname ] == stub ) - { - } - } - if ( isDefined( stub.model ) ) - { - stub.model equipment_retrieve( player ); - } - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( stub ); - wait 3; - player.pickup_equipment = 0; -} - -dropped_equipment_think( model, equipname, origin, angles, tradius, toffset ) -{ - pickupmodel = spawn( "script_model", origin ); - if ( isDefined( angles ) ) - { - pickupmodel.angles = angles; - } - pickupmodel setmodel( model ); - if ( isDefined( level.equipment_safe_to_drop ) ) - { - if ( !( self [[ level.equipment_safe_to_drop ]]( pickupmodel ) ) ) - { - equipment_disappear_fx( pickupmodel.origin ); - pickupmodel delete(); - self equipment_take( equipname ); - return; - } - } - watchername = getsubstr( equipname, 0, equipname.size - 3 ); - if ( isDefined( level.retrievehints[ watchername ] ) ) - { - hint = level.retrievehints[ watchername ].hint; - } - else - { - hint = &"MP_GENERIC_PICKUP"; - } - icon = get_equipment_icon( equipname ); - if ( !isDefined( tradius ) ) - { - tradius = 32; - } - torigin = origin; - if ( isDefined( toffset ) ) - { - offset = 64; - tforward = anglesToForward( angles ); - torigin = torigin + ( toffset * tforward ) + vectorScale( ( 0, 0, 0 ), 8 ); - } - if ( isDefined( pickupmodel.canmove ) ) - { - pickupmodel.stub = generate_equipment_unitrigger( "trigger_radius_use", torigin, angles, 0, tradius, 64, hint, icon, ::dropped_equipment_unitrigger_think, pickupmodel.canmove ); - } - pickupmodel.stub.model = pickupmodel; - pickupmodel.stub.equipname = equipname; - pickupmodel.equipname = equipname; - if ( isDefined( level.equipment_planted ) ) - { - self [[ level.equipment_planted ]]( pickupmodel, equipname, self ); - } - if ( !isDefined( level.dropped_equipment ) ) - { - level.dropped_equipment = []; - } - if ( isDefined( level.dropped_equipment[ equipname ] ) ) - { - level.dropped_equipment[ equipname ].model dropped_equipment_destroy( 1 ); - } - level.dropped_equipment[ equipname ] = pickupmodel.stub; - destructible_equipment_list_add( pickupmodel ); - pickupmodel thread item_attract_zombies(); - return pickupmodel; -} - -dropped_equipment_unitrigger_think() -{ - self endon( "kill_trigger" ); - self thread watch_player_visibility( self.stub.equipname ); - while ( 1 ) - { - self waittill( "trigger", player ); - while ( !player can_pick_up_equipment( self.stub.equipname ) ) - { - continue; - } - self thread pickup_dropped_equipment( player ); - return; - } -} - -pickup_dropped_equipment( player ) -{ - player.pickup_equipment = 1; - stub = self.stub; - if ( isDefined( player.current_equipment ) && stub.equipname != player.current_equipment ) - { - player equipment_drop( player.current_equipment ); - } - player equipment_grab( stub.equipname, stub.model ); - stub.model dropped_equipment_destroy(); - wait 3; - player.pickup_equipment = 0; -} - -dropped_equipment_destroy( gusto ) -{ - stub = self.stub; - if ( isDefined( gusto ) && gusto ) - { - equipment_disappear_fx( self.origin ); - } - if ( isDefined( level.dropped_equipment ) ) - { - } - if ( isDefined( stub.model ) ) - { - stub.model delete(); - } - if ( isDefined( self.original_owner ) || is_limited_equipment( stub.equipname ) && maps/mp/zombies/_zm_weapons::is_weapon_included( stub.equipname ) ) - { - self.original_owner equipment_take( stub.equipname ); - } - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( stub ); -} - -add_placeable_equipment( equipment, modelname, destroy_fn ) -{ - if ( !isDefined( level.placeable_equipment ) ) - { - level.placeable_equipment = []; - } - level.placeable_equipment[ equipment ] = modelname; - precachemodel( modelname ); - precacheitem( equipment + "_turret" ); - if ( !isDefined( level.placeable_equipment_destroy_fn ) ) - { - level.placeable_equipment_destroy_fn = []; - } - level.placeable_equipment_destroy_fn[ equipment ] = destroy_fn; -} - -is_placeable_equipment( equipment ) -{ - if ( isDefined( level.placeable_equipment ) && isDefined( level.placeable_equipment[ equipment ] ) ) - { - return 1; - } - return 0; -} - -equipment_placement_watcher() -{ - self endon( "death_or_disconnect" ); - for ( ;; ) - { - self waittill( "weapon_change", weapon ); - if ( self.sessionstate != "spectator" && is_placeable_equipment( weapon ) ) - { - self thread equipment_watch_placement( weapon ); - } - } -} - -equipment_watch_placement( equipment ) -{ - carry_offset = vectorScale( ( 0, 0, 0 ), 22 ); - carry_angles = ( 0, 0, 0 ); - placeturret = spawnturret( "auto_turret", self.origin, equipment + "_turret" ); - placeturret.angles = self.angles; - placeturret setmodel( level.placeable_equipment[ equipment ] ); - placeturret setturretcarried( 1 ); - placeturret setturretowner( self ); - self carryturret( placeturret, carry_offset, carry_angles ); - self thread watch_melee_swipes( equipment, placeturret ); - ended = self waittill_any_return( "weapon_change", "grenade_fire", "death", "disconnect" ); - if ( ended == "weapon_change" ) - { - if ( self hasweapon( equipment ) ) - { - self setweaponammoclip( equipment, 1 ); - } - } - self stopcarryturret( placeturret ); - placeturret setturretcarried( 0 ); - placeturret delete(); -} - -watch_melee_swipes( equipment, turret ) -{ - self endon( "weapon_change" ); - self endon( "grenade_fire" ); - self endon( "death" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "melee_swipe", zombie ); - while ( distancesquared( zombie.origin, self.origin ) > ( zombie.meleeattackdist * zombie.meleeattackdist ) ) - { - continue; - } - tpos = turret.origin; - self player_damage_equipment( equipment, 200, zombie.origin ); - if ( self.equipment_damage[ equipment ] >= 1000 ) - { - thread equipment_disappear_fx( tpos ); - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons[ 0 ] ) ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - if ( isalive( self ) ) - { - self playlocalsound( level.zmb_laugh_alias ); - } - self maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 ); - self equipment_release( equipment ); - return; - } - } -} - -player_get_equipment_damage( equipment ) -{ - if ( isDefined( self.equipment_damage ) && isDefined( self.equipment_damage[ equipment ] ) ) - { - return self.equipment_damage[ equipment ]; - } - return 0; -} - -player_set_equipment_damage( equipment, damage ) -{ - if ( !isDefined( self.equipment_damage ) ) - { - self.equipment_damage = []; - } - self.equipment_damage[ equipment ] = damage; -} - -player_damage_equipment( equipment, damage, origin ) -{ - if ( !isDefined( self.equipment_damage ) ) - { - self.equipment_damage = []; - } - if ( !isDefined( self.equipment_damage[ equipment ] ) ) - { - self.equipment_damage[ equipment ] = 0; - } - self.equipment_damage[ equipment ] += damage; - if ( self.equipment_damage[ equipment ] > 1000 ) - { - if ( isDefined( level.placeable_equipment_destroy_fn[ equipment ] ) ) - { - self [[ level.placeable_equipment_destroy_fn[ equipment ] ]](); - } - else - { - equipment_disappear_fx( origin ); - } - self equipment_release( equipment ); - } -} - -item_damage( damage ) -{ - if ( isDefined( self.isriotshield ) && self.isriotshield ) - { - if ( isDefined( level.riotshield_damage_callback ) && isDefined( self.owner ) ) - { - self.owner [[ level.riotshield_damage_callback ]]( damage, 0 ); - } - else - { - if ( isDefined( level.deployed_riotshield_damage_callback ) ) - { - self [[ level.deployed_riotshield_damage_callback ]]( damage ); - } - } - } - else - { - if ( isDefined( self.owner ) ) - { - self.owner player_damage_equipment( self.equipname, damage, self.origin ); - return; - } - else - { - if ( !isDefined( self.damage ) ) - { - self.damage = 0; - } - self.damage += damage; - if ( self.damage > 1000 ) - { - self thread dropped_equipment_destroy( 1 ); - } - } - } -} - -item_watch_damage() -{ - self endon( "death" ); - self setcandamage( 1 ); - self.health = 1000; - while ( 1 ) - { - self waittill( "damage", amount ); - self item_damage( amount ); - } -} - -item_watch_explosions() -{ - self endon( "death" ); - while ( 1 ) - { - level waittill( "grenade_exploded", position, radius, idamage, odamage ); - wait randomfloatrange( 0,05, 0,3 ); - distsqrd = distancesquared( self.origin, position ); - if ( distsqrd < ( radius * radius ) ) - { - dist = sqrt( distsqrd ); - dist /= radius; - damage = odamage + ( ( idamage - odamage ) * ( 1 - dist ) ); - self item_damage( damage * 5 ); - } - } -} - -get_item_health() -{ -/# - damage = 0; - if ( isDefined( self.isriotshield ) && self.isriotshield ) - { - damagemax = level.zombie_vars[ "riotshield_hit_points" ]; - if ( isDefined( self.owner ) ) - { - damage = self.owner.shielddamagetaken; - } - else - { - if ( isDefined( level.deployed_riotshield_damage_callback ) ) - { - damage = self.shielddamagetaken; - } - } - } - else - { - if ( isDefined( self.owner ) ) - { - damagemax = 1000; - damage = self.owner player_get_equipment_damage( self.equipname ); - } - else - { - damagemax = 1000; - if ( isDefined( self.damage ) ) - { - damage = self.damage; - } - } - } - return ( damagemax - damage ) / damagemax; -#/ -} - -debughealth() -{ -/# - self endon( "death" ); - while ( 1 ) - { - if ( getDvarInt( #"EB512CB7" ) ) - { - health = self get_item_health(); - color = ( 1 - health, health, 0 ); - text = "" + ( health * 100 ) + ""; - print3d( self.origin, text, color, 1, 0,5, 1 ); - } - wait 0,05; -#/ - } -} - -item_choke() -{ - if ( !isDefined( level.item_choke_count ) ) - { - level.item_choke_count = 0; - } - level.item_choke_count++; - if ( level.item_choke_count >= 10 ) - { - wait 0,05; - level.item_choke_count = 0; - } -} - -is_equipment_ignored( equipname ) -{ - if ( isDefined( level.equipment_ignored_by_zombies ) && isDefined( level.equipment_ignored_by_zombies[ equipname ] ) ) - { - return 1; - } - return 0; -} - -enemies_ignore_equipment( equipname ) -{ - if ( !isDefined( level.equipment_ignored_by_zombies ) ) - { - level.equipment_ignored_by_zombies = []; - } - level.equipment_ignored_by_zombies[ equipname ] = equipname; -} - -item_attract_zombies() -{ - self endon( "death" ); -/# - self thread debughealth(); -#/ - if ( is_equipment_ignored( self.equipname ) ) - { - return; - } - while ( 1 ) - { - vdistmax = 36; - distmax = 4096; - distmin = 2025; - ai = getaiarray( level.zombie_team ); - i = 0; - while ( i < ai.size ) - { - if ( !isDefined( ai[ i ] ) ) - { - i++; - continue; - } - else if ( isDefined( level.ignore_equipment ) ) - { - if ( self [[ level.ignore_equipment ]]( ai[ i ] ) ) - { - i++; - continue; - } - } - else - { - vdist = abs( ai[ i ].origin[ 2 ] - self.origin[ 2 ] ); - distsqrd = distance2dsquared( ai[ i ].origin, self.origin ); - if ( isDefined( self.equipname ) && self.equipname == "riotshield_zm" ) - { - vdistmax = 108; - } - should_attack = 0; - if ( isDefined( level.should_attack_equipment ) ) - { - should_attack = self [[ level.should_attack_equipment ]]( distsqrd ); - } - if ( distsqrd < distmax && distsqrd > distmin || vdist < vdistmax && should_attack ) - { - if ( isDefined( ai[ i ].isscreecher ) && !ai[ i ].isscreecher && !ai[ i ] is_quad() && !ai[ i ] is_leaper() ) - { - ai[ i ] thread attack_item( self ); - item_choke(); - } - } - item_choke(); - } - i++; - } - wait 0,1; - } -} - -attack_item( item ) -{ - self endon( "death" ); - item endon( "death" ); - self endon( "start_inert" ); - if ( isDefined( self.doing_equipment_attack ) && self.doing_equipment_attack ) - { - return 0; - } - self thread attack_item_stop( item ); - if ( getDvar( "zombie_equipment_attack_freq" ) == "" ) - { - setdvar( "zombie_equipment_attack_freq", "15" ); - } - freq = getDvarInt( "zombie_equipment_attack_freq" ); - self.doing_equipment_attack = 1; - self maps/mp/zombies/_zm_spawner::zombie_history( "doing equipment attack 1 - " + getTime() ); - self.item = item; - if ( !isDefined( self ) || !isalive( self ) ) - { - return; - } - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "attack", self.animname ); - if ( isDefined( level.attack_item ) ) - { - self [[ level.attack_item ]](); - } - melee_anim = "zm_window_melee"; - if ( !self.has_legs ) - { - melee_anim = "zm_walk_melee_crawl"; - if ( self.a.gib_ref == "no_legs" ) - { - melee_anim = "zm_stumpy_melee"; - } - else - { - if ( self.zombie_move_speed == "run" || self.zombie_move_speed == "sprint" ) - { - melee_anim = "zm_run_melee_crawl"; - } - } - } - self orientmode( "face point", item.origin ); - self animscripted( self.origin, flat_angle( vectorToAngle( item.origin - self.origin ) ), melee_anim ); - item thread item_damage( 100 ); - item playsound( "fly_riotshield_zm_impact_flesh" ); - wait ( randomint( 100 ) / 100 ); - self.doing_equipment_attack = 0; - self maps/mp/zombies/_zm_spawner::zombie_history( "doing equipment attack 0 from wait - " + getTime() ); - self orientmode( "face default" ); - if ( isDefined( item.zombie_attack_callback ) ) - { - item [[ item.zombie_attack_callback ]]( self ); - } -} - -attack_item_stop( item ) -{ - self notify( "attack_item_stop" ); - self endon( "attack_item_stop" ); - self endon( "death" ); - item waittill( "death" ); - self stopanimscripted(); - self.doing_equipment_attack = 0; - self maps/mp/zombies/_zm_spawner::zombie_history( "doing equipment attack 0 from death - " + getTime() ); - self.item = undefined; - if ( isDefined( level.attack_item_stop ) ) - { - self [[ level.attack_item_stop ]](); - } -} - -window_notetracks( msg, equipment ) -{ - self endon( "death" ); - equipment endon( "death" ); - while ( self.doing_equipment_attack ) - { - self waittill( msg, notetrack ); - if ( notetrack == "end" ) - { - return; - } - if ( notetrack == "fire" ) - { - equipment item_damage( 100 ); - } - } -} - -destructible_equipment_list_check() -{ - if ( !isDefined( level.destructible_equipment ) ) - { - level.destructible_equipment = []; - } - i = 0; - while ( i < level.destructible_equipment.size ) - { - if ( !isDefined( level.destructible_equipment[ i ] ) ) - { - arrayremoveindex( level.destructible_equipment, i ); - continue; - } - else - { - i++; - } - } -} - -destructible_equipment_list_add( item ) -{ - destructible_equipment_list_check(); - level.destructible_equipment[ level.destructible_equipment.size ] = item; -} - -get_destructible_equipment_list() -{ - destructible_equipment_list_check(); - return level.destructible_equipment; -} - -equipment_disappear_fx( origin, fx ) -{ - effect = level._equipment_disappear_fx; - if ( isDefined( fx ) ) - { - effect = fx; - } - playfx( effect, origin ); - wait 1,1; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_ffotd.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_ffotd.gsc deleted file mode 100644 index cf982af..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_ffotd.gsc +++ /dev/null @@ -1,77 +0,0 @@ -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -main_start() -{ -} - -main_end() -{ -} - -player_in_exploit_area( player_trigger_origin, player_trigger_radius ) -{ - if ( distancesquared( player_trigger_origin, self.origin ) < ( player_trigger_radius * player_trigger_radius ) ) - { -/# - iprintlnbold( "player exploit detectect" ); -#/ - return 1; - } - return 0; -} - -path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ) -{ - spawnflags = 9; - zombie_trigger = spawn( "trigger_radius", zombie_trigger_origin, spawnflags, zombie_trigger_radius, zombie_trigger_height ); - zombie_trigger setteamfortrigger( level.zombie_team ); -/# - thread debug_exploit( zombie_trigger_origin, zombie_trigger_radius, player_trigger_origin, player_trigger_radius, zombie_goto_point ); -#/ - while ( 1 ) - { - zombie_trigger waittill( "trigger", who ); - if ( !is_true( who.reroute ) ) - { - who thread exploit_reroute( zombie_trigger, player_trigger_origin, player_trigger_radius, zombie_goto_point ); - } - } -} - -exploit_reroute( zombie_trigger, player_trigger_origin, player_trigger_radius, zombie_goto_point ) -{ - self endon( "death" ); - self.reroute = 1; - while ( 1 ) - { - if ( self istouching( zombie_trigger ) ) - { - player = self.favoriteenemy; - if ( isDefined( player ) && player player_in_exploit_area( player_trigger_origin, player_trigger_radius ) ) - { - self.reroute_origin = zombie_goto_point; - } - else - { - } - } - else wait 0,2; - } - self.reroute = 0; -} - -debug_exploit( player_origin, player_radius, enemy_origin, enemy_radius, zombie_goto_point ) -{ -/# - while ( isDefined( self ) ) - { - circle( player_origin, player_radius, ( 1, 1, 0 ), 0, 1, 1 ); - circle( enemy_origin, enemy_radius, ( 1, 1, 0 ), 0, 1, 1 ); - line( player_origin, enemy_origin, ( 1, 1, 0 ), 1 ); - line( enemy_origin, zombie_goto_point, ( 1, 1, 0 ), 1 ); - wait 0,05; -#/ - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module.gsc deleted file mode 100644 index 07e1d1c..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module.gsc +++ /dev/null @@ -1,491 +0,0 @@ -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_audio_announcer; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -register_game_module( index, module_name, pre_init_func, post_init_func, pre_init_zombie_spawn_func, post_init_zombie_spawn_func, hub_start_func ) -{ - if ( !isDefined( level._game_modules ) ) - { - level._game_modules = []; - level._num_registered_game_modules = 0; - } - i = 0; - while ( i < level._num_registered_game_modules ) - { - if ( !isDefined( level._game_modules[ i ] ) ) - { - i++; - continue; - } - else - { - if ( isDefined( level._game_modules[ i ].index ) && level._game_modules[ i ].index == index ) - { -/# - assert( level._game_modules[ i ].index != index, "A Game module is already registered for index (" + index + ")" ); -#/ - } - } - i++; - } - level._game_modules[ level._num_registered_game_modules ] = spawnstruct(); - level._game_modules[ level._num_registered_game_modules ].index = index; - level._game_modules[ level._num_registered_game_modules ].module_name = module_name; - level._game_modules[ level._num_registered_game_modules ].pre_init_func = pre_init_func; - level._game_modules[ level._num_registered_game_modules ].post_init_func = post_init_func; - level._game_modules[ level._num_registered_game_modules ].pre_init_zombie_spawn_func = pre_init_zombie_spawn_func; - level._game_modules[ level._num_registered_game_modules ].post_init_zombie_spawn_func = post_init_zombie_spawn_func; - level._game_modules[ level._num_registered_game_modules ].hub_start_func = hub_start_func; - level._num_registered_game_modules++; -} - -set_current_game_module( game_module_index ) -{ - if ( !isDefined( game_module_index ) ) - { - level.current_game_module = level.game_module_classic_index; - level.scr_zm_game_module = level.game_module_classic_index; - return; - } - game_module = get_game_module( game_module_index ); - if ( !isDefined( game_module ) ) - { -/# - assert( isDefined( game_module ), "unknown game module (" + game_module_index + ")" ); -#/ - return; - } - level.current_game_module = game_module_index; -} - -get_current_game_module() -{ - return get_game_module( level.current_game_module ); -} - -get_game_module( game_module_index ) -{ - if ( !isDefined( game_module_index ) ) - { - return undefined; - } - i = 0; - while ( i < level._game_modules.size ) - { - if ( level._game_modules[ i ].index == game_module_index ) - { - return level._game_modules[ i ]; - } - i++; - } - return undefined; -} - -game_module_pre_zombie_spawn_init() -{ - current_module = get_current_game_module(); - if ( !isDefined( current_module ) || !isDefined( current_module.pre_init_zombie_spawn_func ) ) - { - return; - } - self [[ current_module.pre_init_zombie_spawn_func ]](); -} - -game_module_post_zombie_spawn_init() -{ - current_module = get_current_game_module(); - if ( !isDefined( current_module ) || !isDefined( current_module.post_init_zombie_spawn_func ) ) - { - return; - } - self [[ current_module.post_init_zombie_spawn_func ]](); -} - -kill_all_zombies() -{ - ai = get_round_enemy_array(); - _a115 = ai; - _k115 = getFirstArrayKey( _a115 ); - while ( isDefined( _k115 ) ) - { - zombie = _a115[ _k115 ]; - if ( isDefined( zombie ) ) - { - zombie dodamage( zombie.maxhealth * 2, zombie.origin, zombie, zombie, "none", "MOD_SUICIDE" ); - wait 0,05; - } - _k115 = getNextArrayKey( _a115, _k115 ); - } -} - -freeze_players( freeze ) -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] freeze_player_controls( freeze ); - i++; - } -} - -turn_power_on_and_open_doors() -{ - level.local_doors_stay_open = 1; - level.power_local_doors_globally = 1; - flag_set( "power_on" ); - level setclientfield( "zombie_power_on", 1 ); - zombie_doors = getentarray( "zombie_door", "targetname" ); - _a144 = zombie_doors; - _k144 = getFirstArrayKey( _a144 ); - while ( isDefined( _k144 ) ) - { - door = _a144[ _k144 ]; - if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "electric_door" ) - { - door notify( "power_on" ); - } - else - { - if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "local_electric_door" ) - { - door notify( "local_power_on" ); - } - } - _k144 = getNextArrayKey( _a144, _k144 ); - } -} - -respawn_spectators_and_freeze_players() -{ - players = get_players(); - _a161 = players; - _k161 = getFirstArrayKey( _a161 ); - while ( isDefined( _k161 ) ) - { - player = _a161[ _k161 ]; - if ( player.sessionstate == "spectator" ) - { - if ( isDefined( player.spectate_hud ) ) - { - player.spectate_hud destroy(); - } - player [[ level.spawnplayer ]](); - } - player freeze_player_controls( 1 ); - _k161 = getNextArrayKey( _a161, _k161 ); - } -} - -damage_callback_no_pvp_damage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) -{ - if ( isDefined( eattacker ) && isplayer( eattacker ) && eattacker == self ) - { - return idamage; - } - if ( isDefined( eattacker ) && !isplayer( eattacker ) ) - { - return idamage; - } - if ( !isDefined( eattacker ) ) - { - return idamage; - } - return 0; -} - -respawn_players() -{ - players = get_players(); - _a196 = players; - _k196 = getFirstArrayKey( _a196 ); - while ( isDefined( _k196 ) ) - { - player = _a196[ _k196 ]; - player [[ level.spawnplayer ]](); - player freeze_player_controls( 1 ); - _k196 = getNextArrayKey( _a196, _k196 ); - } -} - -zombie_goto_round( target_round ) -{ - level notify( "restart_round" ); - if ( target_round < 1 ) - { - target_round = 1; - } - level.zombie_total = 0; - maps/mp/zombies/_zm::ai_calculate_health( target_round ); - zombies = get_round_enemy_array(); - while ( isDefined( zombies ) ) - { - i = 0; - while ( i < zombies.size ) - { - zombies[ i ] dodamage( zombies[ i ].health + 666, zombies[ i ].origin ); - i++; - } - } - respawn_players(); - wait 1; -} - -wait_for_team_death_and_round_end() -{ - level endon( "game_module_ended" ); - level endon( "end_game" ); - checking_for_round_end = 0; - level.isresetting_grief = 0; - while ( 1 ) - { - cdc_alive = 0; - cia_alive = 0; - players = get_players(); - _a244 = players; - _k244 = getFirstArrayKey( _a244 ); - while ( isDefined( _k244 ) ) - { - player = _a244[ _k244 ]; - if ( !isDefined( player._encounters_team ) ) - { - } - else if ( player._encounters_team == "A" ) - { - if ( is_player_valid( player ) ) - { - cia_alive++; - } - } - else - { - if ( is_player_valid( player ) ) - { - cdc_alive++; - } - } - _k244 = getNextArrayKey( _a244, _k244 ); - } - if ( cia_alive == 0 && cdc_alive == 0 && !level.isresetting_grief && isDefined( level.host_ended_game ) && !level.host_ended_game ) - { - wait 0,5; - if ( isDefined( level._grief_reset_message ) ) - { - level thread [[ level._grief_reset_message ]](); - } - level.isresetting_grief = 1; - level notify( "end_round_think" ); - level.zombie_vars[ "spectators_respawn" ] = 1; - level notify( "keep_griefing" ); - checking_for_round_end = 0; - zombie_goto_round( level.round_number ); - level thread reset_grief(); - level thread maps/mp/zombies/_zm::round_think( 1 ); - } - else - { - if ( !checking_for_round_end ) - { - if ( cia_alive == 0 ) - { - level thread check_for_round_end( "B" ); - checking_for_round_end = 1; - break; - } - else - { - if ( cdc_alive == 0 ) - { - level thread check_for_round_end( "A" ); - checking_for_round_end = 1; - } - } - } - } - if ( cia_alive > 0 && cdc_alive > 0 ) - { - level notify( "stop_round_end_check" ); - checking_for_round_end = 0; - } - wait 0,05; - } -} - -reset_grief() -{ - wait 1; - level.isresetting_grief = 0; -} - -check_for_round_end( winner ) -{ - level endon( "keep_griefing" ); - level endon( "stop_round_end_check" ); - level waittill( "end_of_round" ); - level.gamemodulewinningteam = winner; - level.zombie_vars[ "spectators_respawn" ] = 0; - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] freezecontrols( 1 ); - if ( players[ i ]._encounters_team == winner ) - { - players[ i ] thread maps/mp/zombies/_zm_audio_announcer::leaderdialogonplayer( "grief_won" ); - i++; - continue; - } - else - { - players[ i ] thread maps/mp/zombies/_zm_audio_announcer::leaderdialogonplayer( "grief_lost" ); - } - i++; - } - level notify( "game_module_ended" ); - level._game_module_game_end_check = undefined; - maps/mp/gametypes_zm/_zm_gametype::track_encounters_win_stats( level.gamemodulewinningteam ); - level notify( "end_game" ); -} - -wait_for_team_death() -{ - wait 15; - winner = undefined; - while ( !isDefined( winner ) ) - { - cdc_alive = 0; - cia_alive = 0; - players = get_players(); - _a418 = players; - _k418 = getFirstArrayKey( _a418 ); - while ( isDefined( _k418 ) ) - { - player = _a418[ _k418 ]; - if ( player._encounters_team == "A" ) - { - if ( is_player_valid( player ) || isDefined( level.force_solo_quick_revive ) && level.force_solo_quick_revive && isDefined( player.lives ) && player.lives > 0 ) - { - cia_alive++; - } - } - else - { - if ( is_player_valid( player ) || isDefined( level.force_solo_quick_revive ) && level.force_solo_quick_revive && isDefined( player.lives ) && player.lives > 0 ) - { - cdc_alive++; - } - } - _k418 = getNextArrayKey( _a418, _k418 ); - } - if ( cia_alive == 0 ) - { - winner = "B"; - } - else - { - if ( cdc_alive == 0 ) - { - winner = "A"; - } - } - wait 0,05; - } - level notify( "game_module_ended" ); -} - -make_supersprinter() -{ - self set_zombie_run_cycle( "super_sprint" ); -} - -game_module_custom_intermission( intermission_struct ) -{ - self closemenu(); - self closeingamemenu(); - level endon( "stop_intermission" ); - self endon( "disconnect" ); - self endon( "death" ); - self notify( "_zombie_game_over" ); - self.score = self.score_total; - self.sessionstate = "intermission"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - s_point = getstruct( intermission_struct, "targetname" ); - if ( !isDefined( level.intermission_cam_model ) ) - { - level.intermission_cam_model = spawn( "script_model", s_point.origin ); - level.intermission_cam_model.angles = s_point.angles; - level.intermission_cam_model setmodel( "tag_origin" ); - } - self.game_over_bg = newclienthudelem( self ); - self.game_over_bg.horzalign = "fullscreen"; - self.game_over_bg.vertalign = "fullscreen"; - self.game_over_bg setshader( "black", 640, 480 ); - self.game_over_bg.alpha = 1; - self spawn( level.intermission_cam_model.origin, level.intermission_cam_model.angles ); - self camerasetposition( level.intermission_cam_model ); - self camerasetlookat(); - self cameraactivate( 1 ); - self linkto( level.intermission_cam_model ); - level.intermission_cam_model moveto( getstruct( s_point.target, "targetname" ).origin, 12 ); - if ( isDefined( level.intermission_cam_model.angles ) ) - { - level.intermission_cam_model rotateto( getstruct( s_point.target, "targetname" ).angles, 12 ); - } - self.game_over_bg fadeovertime( 2 ); - self.game_over_bg.alpha = 0; - wait 2; - self.game_over_bg thread maps/mp/zombies/_zm::fade_up_over_time( 1 ); -} - -create_fireworks( launch_spots, min_wait, max_wait, randomize ) -{ - level endon( "stop_fireworks" ); - while ( 1 ) - { - if ( isDefined( randomize ) && randomize ) - { - launch_spots = array_randomize( launch_spots ); - } - _a516 = launch_spots; - _k516 = getFirstArrayKey( _a516 ); - while ( isDefined( _k516 ) ) - { - spot = _a516[ _k516 ]; - level thread fireworks_launch( spot ); - wait randomfloatrange( min_wait, max_wait ); - _k516 = getNextArrayKey( _a516, _k516 ); - } - wait randomfloatrange( min_wait, max_wait ); - } -} - -fireworks_launch( launch_spot ) -{ - firework = spawn( "script_model", launch_spot.origin + ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ) ); - firework setmodel( "tag_origin" ); - wait_network_frame(); - playfxontag( level._effect[ "fw_trail_cheap" ], firework, "tag_origin" ); - firework playloopsound( "zmb_souls_loop", 0,75 ); - dest = launch_spot; - while ( isDefined( dest ) && isDefined( dest.target ) ) - { - random_offset = ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ); - new_dests = getstructarray( dest.target, "targetname" ); - new_dest = random( new_dests ); - dest = new_dest; - dist = distance( new_dest.origin + random_offset, firework.origin ); - time = dist / 700; - firework moveto( new_dest.origin + random_offset, time ); - firework waittill( "movedone" ); - } - firework playsound( "zmb_souls_end" ); - playfx( level._effect[ "fw_pre_burst" ], firework.origin ); - firework delete(); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module_cleansed.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module_cleansed.gsc deleted file mode 100644 index 9c08b8c..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module_cleansed.gsc +++ /dev/null @@ -1,17 +0,0 @@ -#include maps/mp/zombies/_zm_turned; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; - -register_game_module() -{ -} - -onstartgametype( name ) -{ -} - -onstartcleansedgametype() -{ -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module_grief.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module_grief.gsc deleted file mode 100644 index 14a2eba..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module_grief.gsc +++ /dev/null @@ -1,11 +0,0 @@ -#include maps/mp/zombies/_zm_game_module_utility; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; - -register_game_module() -{ - level.game_module_grief_index = 9; - maps/mp/zombies/_zm_game_module::register_game_module( level.game_module_grief_index, "zgrief", ::onpreinitgametype, ::onpostinitgametype, undefined, ::onspawnzombie, ::onstartgametype ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module_meat.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module_meat.gsc deleted file mode 100644 index e083fb3..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module_meat.gsc +++ /dev/null @@ -1,6 +0,0 @@ -#include maps/mp/zombies/_zm_game_module_utility; -#include maps/mp/zombies/_zm_game_module_meat_utility; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module_meat_utility.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module_meat_utility.gsc deleted file mode 100644 index 101f026..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module_meat_utility.gsc +++ /dev/null @@ -1,685 +0,0 @@ -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/gametypes_zm/zmeat; -#include maps/mp/zombies/_zm_audio_announcer; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_game_module_utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -award_grenades_for_team( team ) -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ]._meat_team ) || players[ i ]._meat_team != team ) - { - i++; - continue; - } - else - { - lethal_grenade = players[ i ] get_player_lethal_grenade(); - players[ i ] giveweapon( lethal_grenade ); - players[ i ] setweaponammoclip( lethal_grenade, 4 ); - } - i++; - } -} - -get_players_on_meat_team( team ) -{ - players = get_players(); - players_on_team = []; - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ]._meat_team ) || players[ i ]._meat_team != team ) - { - i++; - continue; - } - else - { - players_on_team[ players_on_team.size ] = players[ i ]; - } - i++; - } - return players_on_team; -} - -get_alive_players_on_meat_team( team ) -{ - players = get_players(); - players_on_team = []; - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ]._meat_team ) || players[ i ]._meat_team != team ) - { - i++; - continue; - } - else - { - if ( players[ i ].sessionstate == "spectator" || players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - i++; - continue; - } - else - { - players_on_team[ players_on_team.size ] = players[ i ]; - } - } - i++; - } - return players_on_team; -} - -init_minigun_ring() -{ - if ( isDefined( level._minigun_ring ) ) - { - return; - } - ring_pos = getstruct( level._meat_location + "_meat_minigun", "script_noteworthy" ); - if ( !isDefined( ring_pos ) ) - { - return; - } - level._minigun_ring = spawn( "script_model", ring_pos.origin ); - level._minigun_ring.angles = ring_pos.angles; - level._minigun_ring setmodel( ring_pos.script_parameters ); - level._minigun_ring_clip = getent( level._meat_location + "_meat_minigun_clip", "script_noteworthy" ); - if ( isDefined( level._minigun_ring_clip ) ) - { - level._minigun_ring_clip linkto( level._minigun_ring ); - } - else - { - iprintlnbold( "BUG: no level._minigun_ring_clip" ); - } - level._minigun_ring_trig = getent( level._meat_location + "_meat_minigun_trig", "targetname" ); - if ( isDefined( level._minigun_ring_trig ) ) - { - level._minigun_ring_trig enablelinkto(); - level._minigun_ring_trig linkto( level._minigun_ring ); - level._minigun_icon = spawn( "script_model", level._minigun_ring_trig.origin ); - level._minigun_icon setmodel( getweaponmodel( "minigun_zm" ) ); - level._minigun_icon linkto( level._minigun_ring ); - level._minigun_icon setclientfield( "ring_glowfx", 1 ); - level thread ring_toss( level._minigun_ring_trig, "minigun" ); - } - else - { - iprintlnbold( "BUG: no level._minigun_ring_trig" ); - } - level._minigun_ring thread move_ring( ring_pos ); - level._minigun_ring thread rotate_ring( 1 ); -} - -init_ammo_ring() -{ - if ( isDefined( level._ammo_ring ) ) - { - return; - } - name = level._meat_location + "_meat_ammo"; - ring_pos = getstruct( name, "script_noteworthy" ); - if ( !isDefined( ring_pos ) ) - { - return; - } - level._ammo_ring = spawn( "script_model", ring_pos.origin ); - level._ammo_ring.angles = ring_pos.angles; - level._ammo_ring setmodel( ring_pos.script_parameters ); - name = level._meat_location + "_meat_ammo_clip"; - level._ammo_ring_clip = getent( name, "script_noteworthy" ); - if ( isDefined( level._ammo_ring_clip ) ) - { - level._ammo_ring_clip linkto( level._ammo_ring ); - } - else - { - iprintlnbold( "BUG: no level._ammo_ring_clip" ); - } - name = level._meat_location + "_meat_ammo_trig"; - level._ammo_ring_trig = getent( name, "targetname" ); - if ( isDefined( level._ammo_ring_clip ) ) - { - level._ammo_ring_trig enablelinkto(); - level._ammo_ring_trig linkto( level._ammo_ring ); - level._ammo_icon = spawn( "script_model", level._ammo_ring_trig.origin ); - level._ammo_icon setmodel( "zombie_ammocan" ); - level._ammo_icon linkto( level._ammo_ring ); - level._ammo_icon setclientfield( "ring_glowfx", 1 ); - level thread ring_toss( level._ammo_ring_trig, "ammo" ); - } - else - { - iprintlnbold( "BUG: no level._ammo_ring_trig" ); - } - level._ammo_ring thread move_ring( ring_pos ); - level._ammo_ring thread rotate_ring( 1 ); -} - -init_splitter_ring() -{ - if ( isDefined( level._splitter_ring ) ) - { - return; - } - ring_pos = getstruct( level._meat_location + "_meat_splitter", "script_noteworthy" ); - if ( !isDefined( ring_pos ) ) - { - return; - } - level._splitter_ring = spawn( "script_model", ring_pos.origin ); - level._splitter_ring.angles = ring_pos.angles; - level._splitter_ring setmodel( ring_pos.script_parameters ); - level._splitter_ring_trig1 = getent( level._meat_location + "_meat_splitter_trig_1", "targetname" ); - level._splitter_ring_trig2 = getent( level._meat_location + "_meat_splitter_trig_2", "targetname" ); - if ( isDefined( level._splitter_ring_trig1 ) && isDefined( level._splitter_ring_trig2 ) ) - { - level._splitter_ring_trig1 enablelinkto(); - level._splitter_ring_trig2 enablelinkto(); - } - else - { - iprintlnbold( "BUG: missing at least one level._splitter_ring_trig" ); - } - level._splitter_ring notsolid(); - level._meat_icon = spawn( "script_model", level._splitter_ring.origin ); - level._meat_icon setmodel( getweaponmodel( get_gamemode_var( "item_meat_name" ) ) ); - level._meat_icon linkto( level._splitter_ring ); - level._meat_icon setclientfield( "ring_glow_meatfx", 1 ); - if ( isDefined( level._splitter_ring_trig1 ) && isDefined( level._splitter_ring_trig2 ) ) - { - level._splitter_ring_trig1 linkto( level._splitter_ring ); - level._splitter_ring_trig2 linkto( level._splitter_ring ); - level thread ring_toss( level._splitter_ring_trig1, "splitter" ); - level thread ring_toss( level._splitter_ring_trig2, "splitter" ); - } - level._splitter_ring thread move_ring( ring_pos ); -} - -ring_toss( trig, type ) -{ - level endon( "end_game" ); - while ( 1 ) - { - while ( isDefined( level._ring_triggered ) && level._ring_triggered ) - { - wait 0,05; - } - if ( isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving ) - { - if ( level.item_meat istouching( trig ) ) - { - level thread ring_toss_prize( type, trig ); - level._ring_triggered = 1; - level thread ring_cooldown(); - } - } - wait 0,05; - } -} - -ring_cooldown() -{ - wait 3; - level._ring_triggered = 0; -} - -ring_toss_prize( type, trig ) -{ - switch( type ) - { - case "splitter": - level thread meat_splitter( trig ); - break; - case "minigun": - level thread minigun_prize( trig ); - break; - case "ammo": - level thread ammo_prize( trig ); - break; - } -} - -meat_splitter( trig ) -{ - level endon( "meat_grabbed" ); - level endon( "meat_kicked" ); - while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) ) - { - wait 0,05; - } - exit_trig = getent( trig.target, "targetname" ); - exit_struct = getstruct( trig.target, "targetname" ); - while ( isDefined( level.item_meat ) && !level.item_meat istouching( exit_trig ) ) - { - wait 0,05; - } - while ( isDefined( level.item_meat ) && level.item_meat istouching( exit_trig ) ) - { - wait 0,05; - } - if ( !isDefined( level.item_meat ) ) - { - return; - } - playfx( level._effect[ "fw_burst" ], exit_trig.origin ); - flare_dir = vectornormalize( anglesToForward( exit_struct.angles ) ); - velocity = vectorScale( flare_dir, randomintrange( 400, 600 ) ); - velocity1 = ( velocity[ 0 ] + 75, velocity[ 1 ] + 75, randomintrange( 75, 125 ) ); - velocity2 = ( velocity[ 0 ] - 75, velocity[ 1 ] - 75, randomintrange( 75, 125 ) ); - velocity3 = ( velocity[ 0 ], velocity[ 1 ], 100 ); - level._fake_meats = []; - level._meat_splitter_activated = 1; - org = exit_trig.origin; - player = get_players()[ 0 ]; - player._spawning_meat = 1; - player endon( "disconnect" ); - thread split_meat( player, org, velocity1, velocity2, velocity ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_splitter", undefined, undefined, 1 ); - wait 0,1; - while ( isDefined( level.splitting_meat ) && level.splitting_meat ) - { - wait 0,05; - } - player._spawning_meat = 0; -} - -split_meat( player, org, vel1, vel2, vel3 ) -{ - level.splitting_meat = 1; - level.item_meat cleanup_meat(); - wait_network_frame(); - level._fake_meats[ level._fake_meats.size ] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel1 ); - wait_network_frame(); - level._fake_meats[ level._fake_meats.size ] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel2 ); - wait_network_frame(); - level._fake_meats[ level._fake_meats.size ] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel3 ); - real_meat = random( level._fake_meats ); - _a330 = level._fake_meats; - _k330 = getFirstArrayKey( _a330 ); - while ( isDefined( _k330 ) ) - { - meat = _a330[ _k330 ]; - if ( real_meat != meat ) - { - meat._fake_meat = 1; - meat thread maps/mp/gametypes_zm/zmeat::delete_on_real_meat_pickup(); - } - else - { - meat._fake_meat = 0; - level.item_meat = meat; - } - _k330 = getNextArrayKey( _a330, _k330 ); - } - level.splitting_meat = 0; -} - -minigun_prize( trig ) -{ - while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) ) - { - wait 0,05; - } - if ( !isDefined( level.item_meat ) ) - { - return; - } - if ( isDefined( level._minigun_toss_cooldown ) && level._minigun_toss_cooldown ) - { - return; - } - level thread minigun_toss_cooldown(); - if ( !is_player_valid( level._last_person_to_throw_meat ) ) - { - return; - } - level._last_person_to_throw_meat thread maps/mp/zombies/_zm_powerups::powerup_vo( "minigun" ); - level thread maps/mp/zombies/_zm_powerups::minigun_weapon_powerup( level._last_person_to_throw_meat ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_minigun", undefined, undefined, 1 ); -} - -ammo_prize( trig ) -{ - while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) ) - { - wait 0,05; - } - if ( !isDefined( level.item_meat ) ) - { - return; - } - if ( isDefined( level._ammo_toss_cooldown ) && level._ammo_toss_cooldown ) - { - return; - } - playfx( level._effect[ "poltergeist" ], trig.origin ); - level thread ammo_toss_cooldown(); - level._last_person_to_throw_meat thread maps/mp/zombies/_zm_powerups::powerup_vo( "full_ammo" ); - level thread maps/mp/zombies/_zm_powerups::full_ammo_powerup( undefined, level._last_person_to_throw_meat ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_ammo", undefined, undefined, 1 ); -} - -minigun_toss_cooldown() -{ - level._minigun_toss_cooldown = 1; - if ( isDefined( level._minigun_icon ) ) - { - level._minigun_icon delete(); - } - waittill_any_or_timeout( 120, "meat_end" ); - playfx( level._effect[ "poltergeist" ], level._minigun_ring_trig.origin ); - level._minigun_icon = spawn( "script_model", level._minigun_ring_trig.origin ); - level._minigun_icon setmodel( getweaponmodel( "minigun_zm" ) ); - level._minigun_icon linkto( level._minigun_ring ); - level._minigun_icon setclientfield( "ring_glowfx", 1 ); - level._minigun_toss_cooldown = 0; -} - -ammo_toss_cooldown() -{ - level._ammo_toss_cooldown = 1; - if ( isDefined( level._ammo_icon ) ) - { - level._ammo_icon delete(); - } - waittill_any_or_timeout( 60, "meat_end" ); - playfx( level._effect[ "poltergeist" ], level._ammo_ring_trig.origin ); - level._ammo_icon = spawn( "script_model", level._ammo_ring_trig.origin ); - level._ammo_icon setmodel( "zombie_ammocan" ); - level._ammo_icon linkto( level._ammo_ring ); - level._ammo_icon setclientfield( "ring_glowfx", 1 ); - level._ammo_toss_cooldown = 0; -} - -wait_for_team_death( team ) -{ - level endon( "meat_end" ); - encounters_team = undefined; - while ( 1 ) - { - wait 1; - while ( isDefined( level._checking_for_save ) && level._checking_for_save ) - { - wait 0,1; - } - alive_team_players = get_alive_players_on_meat_team( team ); - while ( alive_team_players.size > 0 ) - { - encounters_team = alive_team_players[ 0 ]._encounters_team; - } - } - if ( !isDefined( encounters_team ) ) - { - return; - } - winning_team = "A"; - if ( encounters_team == "A" ) - { - winning_team = "B"; - } - level notify( "meat_end" ); -} - -check_should_save_player( team ) -{ - if ( !isDefined( level._meat_on_team ) ) - { - return 0; - } - level._checking_for_save = 1; - players = get_players_on_meat_team( team ); - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - if ( isDefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player ) - { - while ( isDefined( level.item_meat.meat_is_moving ) && !level.item_meat.meat_is_moving && isDefined( level._meat_splitter_activated ) || level._meat_splitter_activated && isDefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying ) - { - if ( level._meat_on_team != player._meat_team ) - { - break; - } - else if ( isDefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling && level._meat_on_team == player._meat_team ) - { - break; - } - else - { - wait 0,05; - } - } - if ( !isDefined( player ) ) - { - level._checking_for_save = 0; - return 0; - } - if ( isDefined( player.last_damage_from_zombie_or_player ) && !player.last_damage_from_zombie_or_player ) - { - level._checking_for_save = 0; - return 0; - } - if ( level._meat_on_team != player._meat_team && isDefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player ) - { - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - level thread revive_saved_player( player ); - return 1; - } - } - } - i++; - } - level._checking_for_save = 0; - return 0; -} - -watch_save_player() -{ - if ( !isDefined( level._meat_on_team ) ) - { - return 0; - } - if ( !isDefined( level._last_person_to_throw_meat ) || level._last_person_to_throw_meat != self ) - { - return 0; - } - level._checking_for_save = 1; - while ( isDefined( level.splitting_meat ) || level.splitting_meat && isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_moving ) || level.item_meat.meat_is_moving && isDefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying ) - { - if ( level._meat_on_team != self._meat_team ) - { - } - else if ( isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling && level._meat_on_team == self._meat_team ) - { - } - else - { - wait 0,05; - } - } - if ( level._meat_on_team != self._meat_team && isDefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == self ) - { - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - level thread revive_saved_player( self ); - return 1; - } - } - level._checking_for_save = 0; - return 0; -} - -revive_saved_player( player ) -{ - player endon( "disconnect" ); - player iprintlnbold( &"ZOMBIE_PLAYER_SAVED" ); - player playsound( level.zmb_laugh_alias ); - wait 0,25; - playfx( level._effect[ "poltergeist" ], player.origin ); - playsoundatposition( "zmb_bolt", player.origin ); - earthquake( 0,5, 0,75, player.origin, 1000 ); - player thread maps/mp/zombies/_zm_laststand::auto_revive( player ); - player._saved_by_throw++; - level._checking_for_save = 0; -} - -get_game_module_players( player ) -{ - return get_players_on_meat_team( player._meat_team ); -} - -item_meat_spawn( origin ) -{ - org = origin; - player = get_players()[ 0 ]; - player._spawning_meat = 1; - player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( 0, 0, 1 ) ); - playsoundatposition( "zmb_spawn_powerup", org ); - wait 0,1; - player._spawning_meat = undefined; -} - -init_item_meat( gametype ) -{ - if ( gametype == "zgrief" ) - { - set_gamemode_var_once( "item_meat_name", "item_meat_zm" ); - set_gamemode_var_once( "item_meat_model", "t6_wpn_zmb_meat_world" ); - } - else - { - set_gamemode_var_once( "item_meat_name", "item_head_zm" ); - set_gamemode_var_once( "item_meat_model", "t6_wpn_zmb_severedhead_world" ); - } - precacheitem( get_gamemode_var( "item_meat_name" ) ); - set_gamemode_var_once( "start_item_meat_name", get_gamemode_var( "item_meat_name" ) ); - level.meat_weaponidx = getweaponindexfromname( get_gamemode_var( "item_meat_name" ) ); - level.meat_pickupsound = getweaponpickupsound( level.meat_weaponidx ); - level.meat_pickupsoundplayer = getweaponpickupsoundplayer( level.meat_weaponidx ); -} - -meat_intro( launch_spot ) -{ - flag_wait( "start_encounters_match_logic" ); - wait 3; - level thread multi_launch( launch_spot ); - launch_meat( launch_spot ); - drop_meat( level._meat_start_point ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_drop", undefined, undefined, 1 ); -} - -launch_meat( launch_spot ) -{ - level waittill( "launch_meat" ); - spots = getstructarray( launch_spot, "targetname" ); - if ( isDefined( spots ) && spots.size > 0 ) - { - spot = random( spots ); - meat = spawn( "script_model", spot.origin ); - meat setmodel( "tag_origin" ); - wait_network_frame(); - playfxontag( level._effect[ "fw_trail" ], meat, "tag_origin" ); - meat playloopsound( "zmb_souls_loop", 0,75 ); - dest = spot; - while ( isDefined( dest ) && isDefined( dest.target ) ) - { - new_dest = getstruct( dest.target, "targetname" ); - dest = new_dest; - dist = distance( new_dest.origin, meat.origin ); - time = dist / 700; - meat moveto( new_dest.origin, time ); - meat waittill( "movedone" ); - } - meat playsound( "zmb_souls_end" ); - playfx( level._effect[ "fw_burst" ], meat.origin ); - wait randomfloatrange( 0,2, 0,5 ); - meat playsound( "zmb_souls_end" ); - playfx( level._effect[ "fw_burst" ], meat.origin + ( randomintrange( 50, 150 ), randomintrange( 50, 150 ), randomintrange( -20, 20 ) ) ); - wait randomfloatrange( 0,5, 0,75 ); - meat playsound( "zmb_souls_end" ); - playfx( level._effect[ "fw_burst" ], meat.origin + ( randomintrange( -150, -50 ), randomintrange( -150, 50 ), randomintrange( -20, 20 ) ) ); - wait randomfloatrange( 0,5, 0,75 ); - meat playsound( "zmb_souls_end" ); - playfx( level._effect[ "fw_burst" ], meat.origin ); - meat delete(); - } -} - -multi_launch( launch_spot ) -{ - spots = getstructarray( launch_spot, "targetname" ); - if ( isDefined( spots ) && spots.size > 0 ) - { - x = 0; - while ( x < 3 ) - { - i = 0; - while ( i < spots.size ) - { - delay = randomfloatrange( 0,1, 0,25 ); - level thread fake_launch( spots[ i ], delay ); - i++; - } - wait randomfloatrange( 0,25, 0,75 ); - if ( x > 1 ) - { - level notify( "launch_meat" ); - } - x++; - } - } - else wait randomfloatrange( 0,25, 0,75 ); - level notify( "launch_meat" ); -} - -fake_launch( launch_spot, delay ) -{ - wait delay; - wait randomfloatrange( 0,1, 4 ); - meat = spawn( "script_model", launch_spot.origin + ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ) ); - meat setmodel( "tag_origin" ); - wait_network_frame(); - playfxontag( level._effect[ "fw_trail_cheap" ], meat, "tag_origin" ); - meat playloopsound( "zmb_souls_loop", 0,75 ); - dest = launch_spot; - while ( isDefined( dest ) && isDefined( dest.target ) ) - { - random_offset = ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ); - new_dest = getstruct( dest.target, "targetname" ); - dest = new_dest; - dist = distance( new_dest.origin + random_offset, meat.origin ); - time = dist / 700; - meat moveto( new_dest.origin + random_offset, time ); - meat waittill( "movedone" ); - } - meat playsound( "zmb_souls_end" ); - playfx( level._effect[ "fw_pre_burst" ], meat.origin ); - meat delete(); -} - -drop_meat( drop_spot ) -{ - meat = spawn( "script_model", drop_spot + vectorScale( ( 0, 0, 1 ), 600 ) ); - meat setmodel( "tag_origin" ); - dist = distance( meat.origin, drop_spot ); - time = dist / 400; - wait 2; - meat moveto( drop_spot, time ); - wait_network_frame(); - playfxontag( level._effect[ "fw_drop" ], meat, "tag_origin" ); - meat waittill( "movedone" ); - playfx( level._effect[ "fw_impact" ], drop_spot ); - level notify( "reset_meat" ); - meat delete(); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module_standard.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module_standard.gsc deleted file mode 100644 index e69de29..0000000 diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module_turned.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module_turned.gsc deleted file mode 100644 index 98be664..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module_turned.gsc +++ /dev/null @@ -1,64 +0,0 @@ -#include maps/mp/zombies/_zm_game_module_cleansed; -#include maps/mp/zombies/_zm_turned; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; - -register_game_module() -{ - level.game_module_turned_index = 6; - maps/mp/zombies/_zm_game_module::register_game_module( level.game_module_turned_index, "zturned", ::maps/mp/zombies/_zm_game_module_cleansed::onpreinitgametype, ::onpostinitgametype, undefined, ::maps/mp/zombies/_zm_game_module_cleansed::onspawnzombie, ::maps/mp/zombies/_zm_game_module_cleansed::onstartgametype ); -} - -register_turned_match( start_func, end_func, name ) -{ - if ( !isDefined( level._registered_turned_matches ) ) - { - level._registered_turned_matches = []; - } - match = spawnstruct(); - match.match_name = name; - match.match_start_func = start_func; - match.match_end_func = end_func; - level._registered_turned_matches[ level._registered_turned_matches.size ] = match; -} - -get_registered_turned_match( name ) -{ - _a41 = level._registered_turned_matches; - _k41 = getFirstArrayKey( _a41 ); - while ( isDefined( _k41 ) ) - { - struct = _a41[ _k41 ]; - if ( struct.match_name == name ) - { - return struct; - } - _k41 = getNextArrayKey( _a41, _k41 ); - } -} - -set_current_turned_match( name ) -{ - level._current_turned_match = name; -} - -get_current_turned_match() -{ - return level._current_turned_match; -} - -init_zombie_weapon() -{ - maps/mp/zombies/_zm_turned::init(); -} - -onpostinitgametype() -{ - if ( level.scr_zm_game_module != level.game_module_turned_index ) - { - return; - } - level thread init_zombie_weapon(); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module_utility.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module_utility.gsc deleted file mode 100644 index 7c90b48..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_game_module_utility.gsc +++ /dev/null @@ -1,46 +0,0 @@ -#include maps/mp/zombies/_zm_game_module_meat; -#include maps/mp/zombies/_zm_game_module_meat_utility; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; - -init_item_meat() -{ - level.item_meat_name = "item_meat_zm"; - precacheitem( level.item_meat_name ); -} - -move_ring( ring ) -{ - positions = getstructarray( ring.target, "targetname" ); - positions = array_randomize( positions ); - level endon( "end_game" ); - while ( 1 ) - { - _a23 = positions; - _k23 = getFirstArrayKey( _a23 ); - while ( isDefined( _k23 ) ) - { - position = _a23[ _k23 ]; - self moveto( position.origin, randomintrange( 30, 45 ) ); - self waittill( "movedone" ); - _k23 = getNextArrayKey( _a23, _k23 ); - } - } -} - -rotate_ring( forward ) -{ - level endon( "end_game" ); - dir = -360; - if ( forward ) - { - dir = 360; - } - while ( 1 ) - { - self rotateyaw( dir, 9 ); - wait 9; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_gump.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_gump.gsc deleted file mode 100644 index 4fc63ca..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_gump.gsc +++ /dev/null @@ -1,67 +0,0 @@ -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - registerclientfield( "toplayer", "blackscreen", 1, 1, "int" ); - if ( !isDefined( level.uses_gumps ) ) - { - level.uses_gumps = 0; - } - if ( isDefined( level.uses_gumps ) && level.uses_gumps ) - { - onplayerconnect_callback( ::player_connect_gump ); - } -} - -player_teleport_blackscreen_on() -{ - if ( isDefined( level.uses_gumps ) && level.uses_gumps ) - { - self setclientfieldtoplayer( "blackscreen", 1 ); - wait 0,05; - self setclientfieldtoplayer( "blackscreen", 0 ); - } -} - -player_connect_gump() -{ -} - -player_watch_spectate_change() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "spectator_cycle" ); - self setclientfieldtoplayer( "blackscreen", 1 ); - wait 0,05; - self setclientfieldtoplayer( "blackscreen", 0 ); - } -} - -gump_test() -{ -/# - wait 10; - pos1 = ( -4904, -7657, 4 ); - pos3 = ( 7918, -6506, 177 ); - pos2 = ( 1986, -73, 4 ); - players = get_players(); - if ( isDefined( players[ 0 ] ) ) - { - players[ 0 ] setorigin( pos1 ); - } - wait 0,05; - if ( isDefined( players[ 1 ] ) ) - { - players[ 1 ] setorigin( pos2 ); - } - wait 0,05; - if ( isDefined( players[ 2 ] ) ) - { - players[ 2 ] setorigin( pos3 ); -#/ - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_hackables_boards.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_hackables_boards.gsc deleted file mode 100644 index bb691eb..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_hackables_boards.gsc +++ /dev/null @@ -1,118 +0,0 @@ -#include maps/mp/zombies/_zm_blockers; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_equip_hacker; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -hack_boards() -{ - windows = getstructarray( "exterior_goal", "targetname" ); - i = 0; - while ( i < windows.size ) - { - window = windows[ i ]; - struct = spawnstruct(); - spot = window; - if ( isDefined( window.trigger_location ) ) - { - spot = window.trigger_location; - } - org = groundpos( spot.origin ) + vectorScale( ( 0, 0, 1 ), 4 ); - r = 96; - h = 96; - if ( isDefined( spot.radius ) ) - { - r = spot.radius; - } - if ( isDefined( spot.height ) ) - { - h = spot.height; - } - struct.origin = org + vectorScale( ( 0, 0, 1 ), 48 ); - struct.radius = r; - struct.height = h; - struct.script_float = 2; - struct.script_int = 0; - struct.window = window; - struct.no_bullet_trace = 1; - struct.no_sight_check = 1; - struct.dot_limit = 0,7; - struct.no_touch_check = 1; - struct.last_hacked_round = 0; - struct.num_hacks = 0; - maps/mp/zombies/_zm_equip_hacker::register_pooled_hackable_struct( struct, ::board_hack, ::board_qualifier ); - i++; - } -} - -board_hack( hacker ) -{ - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( self ); - num_chunks_checked = 0; - last_repaired_chunk = undefined; - if ( self.last_hacked_round != level.round_number ) - { - self.last_hacked_round = level.round_number; - self.num_hacks = 0; - } - self.num_hacks++; - if ( self.num_hacks < 3 ) - { - hacker maps/mp/zombies/_zm_score::add_to_player_score( 100 ); - } - else - { - cost = int( min( 300, hacker.score ) ); - if ( cost ) - { - hacker maps/mp/zombies/_zm_score::minus_to_player_score( cost ); - } - } - while ( 1 ) - { - if ( all_chunks_intact( self.window.barrier_chunks ) ) - { - break; - } - else chunk = get_random_destroyed_chunk( self, self.window.barrier_chunks ); - if ( !isDefined( chunk ) ) - { - break; - } - else self.window thread maps/mp/zombies/_zm_blockers::replace_chunk( self, chunk, undefined, 0, 1 ); - last_repaired_chunk = chunk; - if ( isDefined( self.clip ) ) - { - self.window.clip enable_trigger(); - self.window.clip disconnectpaths(); - } - else - { - blocker_disconnect_paths( self.window.neg_start, self.window.neg_end ); - } - wait_network_frame(); - num_chunks_checked++; - if ( num_chunks_checked >= 20 ) - { - break; - } - else - { - } - } - while ( isDefined( last_repaired_chunk ) && last_repaired_chunk.state == "mid_repair" ) - { - wait 0,05; - } - maps/mp/zombies/_zm_equip_hacker::register_pooled_hackable_struct( self, ::board_hack, ::board_qualifier ); -} - -board_qualifier( player ) -{ - if ( all_chunks_intact( self.window.barrier_chunks ) || no_valid_repairable_boards( self, self.window.barrier_chunks ) ) - { - return 0; - } - return 1; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_hackables_box.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_hackables_box.gsc deleted file mode 100644 index 2cb5d54..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_hackables_box.gsc +++ /dev/null @@ -1,363 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_equip_hacker; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -box_hacks() -{ - boxes = getstructarray( "treasure_chest_use", "targetname" ); - i = 0; - while ( i < boxes.size ) - { - box = boxes[ i ]; - box.box_hacks[ "respin" ] = ::init_box_respin; - box.box_hacks[ "respin_respin" ] = ::init_box_respin_respin; - box.box_hacks[ "summon_box" ] = ::init_summon_box; - box.last_hacked_round = 0; - i++; - } - level._zombiemode_chest_joker_chance_override_func = ::check_for_free_locations; - level._zombiemode_custom_box_move_logic = ::custom_box_move_logic; - level._zombiemode_check_firesale_loc_valid_func = ::custom_check_firesale_loc_valid_func; - init_summon_hacks(); -} - -custom_check_firesale_loc_valid_func() -{ - if ( self.last_hacked_round >= level.round_number ) - { - return 0; - } - return 1; -} - -custom_box_move_logic() -{ - num_hacked_locs = 0; - i = 0; - while ( i < level.chests.size ) - { - if ( level.chests[ i ].last_hacked_round >= level.round_number ) - { - num_hacked_locs++; - } - i++; - } - if ( num_hacked_locs == 0 ) - { - maps/mp/zombies/_zm_magicbox::default_box_move_logic(); - return; - } - found_loc = 0; - original_spot = level.chest_index; - while ( !found_loc ) - { - level.chest_index++; - if ( original_spot == level.chest_index ) - { - level.chest_index++; - } - level.chest_index %= level.chests.size; - if ( level.chests[ level.chest_index ].last_hacked_round < level.round_number ) - { - found_loc = 1; - } - } -} - -check_for_free_locations( chance ) -{ - boxes = level.chests; - stored_chance = chance; - chance = -1; - i = 0; - while ( i < boxes.size ) - { - if ( i == level.chest_index ) - { - i++; - continue; - } - else - { - if ( boxes[ i ].last_hacked_round < level.round_number ) - { - chance = stored_chance; - break; - } - } - else - { - i++; - } - } - return chance; -} - -init_box_respin( chest, player ) -{ - self thread box_respin_think( chest, player ); -} - -box_respin_think( chest, player ) -{ - respin_hack = spawnstruct(); - respin_hack.origin = self.origin + vectorScale( ( 0, 0, 1 ), 24 ); - respin_hack.radius = 48; - respin_hack.height = 72; - respin_hack.script_int = 600; - respin_hack.script_float = 1,5; - respin_hack.player = player; - respin_hack.no_bullet_trace = 1; - respin_hack.chest = chest; - maps/mp/zombies/_zm_equip_hacker::register_pooled_hackable_struct( respin_hack, ::respin_box, ::hack_box_qualifier ); - self.weapon_model waittill_either( "death", "kill_respin_think_thread" ); - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( respin_hack ); -} - -respin_box_thread( hacker ) -{ - if ( isDefined( self.chest.chest_origin.weapon_model ) ) - { - self.chest.chest_origin.weapon_model notify( "kill_respin_think_thread" ); - } - self.chest.no_fly_away = 1; - self.chest.zbarrier notify( "box_hacked_respin" ); - self.chest disable_trigger(); - play_sound_at_pos( "open_chest", self.chest.chest_origin.origin ); - play_sound_at_pos( "music_chest", self.chest.chest_origin.origin ); - maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( self.chest.chest_origin.weapon_string ); - self.chest.zbarrier thread maps/mp/zombies/_zm_magicbox::treasure_chest_weapon_spawn( self.chest, hacker, 1 ); - self.chest.zbarrier waittill( "randomization_done" ); - self.chest.no_fly_away = undefined; - if ( !flag( "moving_chest_now" ) ) - { - self.chest enable_trigger(); - self.chest thread maps/mp/zombies/_zm_magicbox::treasure_chest_timeout(); - } -} - -respin_box( hacker ) -{ - self thread respin_box_thread( hacker ); -} - -hack_box_qualifier( player ) -{ - if ( player == self.chest.chest_user && isDefined( self.chest.weapon_out ) ) - { - return 1; - } - return 0; -} - -init_box_respin_respin( chest, player ) -{ - self thread box_respin_respin_think( chest, player ); -} - -box_respin_respin_think( chest, player ) -{ - respin_hack = spawnstruct(); - respin_hack.origin = self.origin + vectorScale( ( 0, 0, 1 ), 24 ); - respin_hack.radius = 48; - respin_hack.height = 72; - respin_hack.script_int = -950; - respin_hack.script_float = 1,5; - respin_hack.player = player; - respin_hack.no_bullet_trace = 1; - respin_hack.chest = chest; - maps/mp/zombies/_zm_equip_hacker::register_pooled_hackable_struct( respin_hack, ::respin_respin_box, ::hack_box_qualifier ); - self.weapon_model waittill_either( "death", "kill_respin_respin_think_thread" ); - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( respin_hack ); -} - -respin_respin_box( hacker ) -{ - org = self.chest.chest_origin.origin; - if ( isDefined( self.chest.chest_origin.weapon_model ) ) - { - self.chest.chest_origin.weapon_model notify( "kill_respin_respin_think_thread" ); - self.chest.chest_origin.weapon_model notify( "kill_weapon_movement" ); - self.chest.chest_origin.weapon_model moveto( org + vectorScale( ( 0, 0, 1 ), 40 ), 0,5 ); - } - if ( isDefined( self.chest.chest_origin.weapon_model_dw ) ) - { - self.chest.chest_origin.weapon_model_dw notify( "kill_weapon_movement" ); - self.chest.chest_origin.weapon_model_dw moveto( ( org + vectorScale( ( 0, 0, 1 ), 40 ) ) - vectorScale( ( 0, 0, 1 ), 3 ), 0,5 ); - } - self.chest.zbarrier notify( "box_hacked_rerespin" ); - self.chest.box_rerespun = 1; - self thread fake_weapon_powerup_thread( self.chest.chest_origin.weapon_model, self.chest.chest_origin.weapon_model_dw ); -} - -fake_weapon_powerup_thread( weapon1, weapon2 ) -{ - weapon1 endon( "death" ); - playfxontag( level._effect[ "powerup_on_solo" ], weapon1, "tag_origin" ); - playsoundatposition( "zmb_spawn_powerup", weapon1.origin ); - weapon1 playloopsound( "zmb_spawn_powerup_loop" ); - self thread fake_weapon_powerup_timeout( weapon1, weapon2 ); - while ( isDefined( weapon1 ) ) - { - waittime = randomfloatrange( 2,5, 5 ); - yaw = randomint( 360 ); - if ( yaw > 300 ) - { - yaw = 300; - } - else - { - if ( yaw < 60 ) - { - yaw = 60; - } - } - yaw = weapon1.angles[ 1 ] + yaw; - weapon1 rotateto( ( -60 + randomint( 120 ), yaw, -45 + randomint( 90 ) ), waittime, waittime * 0,5, waittime * 0,5 ); - if ( isDefined( weapon2 ) ) - { - weapon2 rotateto( ( -60 + randomint( 120 ), yaw, -45 + randomint( 90 ) ), waittime, waittime * 0,5, waittime * 0,5 ); - } - wait randomfloat( waittime - 0,1 ); - } -} - -fake_weapon_powerup_timeout( weapon1, weapon2 ) -{ - weapon1 endon( "death" ); - wait 15; - i = 0; - while ( i < 40 ) - { - if ( i % 2 ) - { - weapon1 hide(); - if ( isDefined( weapon2 ) ) - { - weapon2 hide(); - } - } - else - { - weapon1 show(); - if ( isDefined( weapon2 ) ) - { - weapon2 hide(); - } - } - if ( i < 15 ) - { - wait 0,5; - i++; - continue; - } - else if ( i < 25 ) - { - wait 0,25; - i++; - continue; - } - else - { - wait 0,1; - } - i++; - } - self.chest notify( "trigger" ); - if ( isDefined( weapon1 ) ) - { - weapon1 delete(); - } - if ( isDefined( weapon2 ) ) - { - weapon2 delete(); - } -} - -init_summon_hacks() -{ - chests = getentarray( "treasure_chest_use", "targetname" ); - i = 0; - while ( i < chests.size ) - { - chest = chests[ i ]; - chest init_summon_box( chest.hidden ); - i++; - } -} - -init_summon_box( create ) -{ - if ( create ) - { - if ( isDefined( self._summon_hack_struct ) ) - { - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( self._summon_hack_struct ); - self._summon_hack_struct = undefined; - } - struct = spawnstruct(); - struct.origin = self.chest_box.origin + vectorScale( ( 0, 0, 1 ), 24 ); - struct.radius = 48; - struct.height = 72; - struct.script_int = 1200; - struct.script_float = 5; - struct.no_bullet_trace = 1; - struct.chest = self; - self._summon_hack_struct = struct; - maps/mp/zombies/_zm_equip_hacker::register_pooled_hackable_struct( struct, ::summon_box, ::summon_box_qualifier ); - } - else - { - if ( isDefined( self._summon_hack_struct ) ) - { - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( self._summon_hack_struct ); - self._summon_hack_struct = undefined; - } - } -} - -summon_box_thread( hacker ) -{ - self.chest.last_hacked_round = level.round_number + randomintrange( 2, 5 ); - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( self ); - self.chest thread maps/mp/zombies/_zm_magicbox::show_chest(); - self.chest notify( "kill_chest_think" ); - self.chest.auto_open = 1; - self.chest.no_charge = 1; - self.chest.no_fly_away = 1; - self.chest.forced_user = hacker; - self.chest thread maps/mp/zombies/_zm_magicbox::treasure_chest_think(); - self.chest.chest_lid waittill( "lid_closed" ); - self.chest.chest_lid waittill( "rotatedone" ); - self.chest.forced_user = undefined; - self.chest.auto_open = undefined; - self.chest.no_charge = undefined; - self.chest.no_fly_away = undefined; - self.chest thread maps/mp/zombies/_zm_magicbox::hide_chest(); -} - -summon_box( hacker ) -{ - self thread summon_box_thread( hacker ); - if ( isDefined( hacker ) ) - { - hacker thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "hack_box" ); - } -} - -summon_box_qualifier( player ) -{ - if ( self.chest.last_hacked_round > level.round_number ) - { - return 0; - } - if ( isDefined( self.chest.zbarrier.chest_moving ) && self.chest.zbarrier.chest_moving ) - { - return 0; - } - return 1; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_hackables_doors.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_hackables_doors.gsc deleted file mode 100644 index b040348..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_hackables_doors.gsc +++ /dev/null @@ -1,107 +0,0 @@ -#include maps/mp/zombies/_zm_equip_hacker; -#include maps/mp/zombies/_zm_blockers; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -door_struct_debug() -{ - while ( 1 ) - { - wait 0,1; - origin = self.origin; - point = origin; - i = 1; - while ( i < 5 ) - { - point = origin + ( anglesToForward( self.door.angles ) * ( i * 2 ) ); - passed = bullettracepassed( point, origin, 0, undefined ); - color = vectorScale( ( 1, 0, 0 ), 255 ); - if ( !passed ) - { - color = vectorScale( ( 1, 0, 0 ), 255 ); - } -/# - print3d( point, "+", color, 1, 1 ); -#/ - i++; - } - } -} - -hack_doors( targetname, door_activate_func ) -{ - if ( !isDefined( targetname ) ) - { - targetname = "zombie_door"; - } - doors = getentarray( targetname, "targetname" ); - if ( !isDefined( door_activate_func ) ) - { - door_activate_func = ::maps/mp/zombies/_zm_blockers::door_opened; - } - i = 0; - while ( i < doors.size ) - { - door = doors[ i ]; - struct = spawnstruct(); - struct.origin = door.origin + ( anglesToForward( door.angles ) * 2 ); - struct.radius = 48; - struct.height = 72; - struct.script_float = 32,7; - struct.script_int = 200; - struct.door = door; - struct.no_bullet_trace = 1; - struct.door_activate_func = door_activate_func; - trace_passed = 0; - door thread hide_door_buy_when_hacker_active( struct ); - maps/mp/zombies/_zm_equip_hacker::register_pooled_hackable_struct( struct, ::door_hack ); - door thread watch_door_for_open( struct ); - i++; - } -} - -hide_door_buy_when_hacker_active( door_struct ) -{ - self endon( "death" ); - self endon( "door_hacked" ); - self endon( "door_opened" ); - maps/mp/zombies/_zm_equip_hacker::hide_hint_when_hackers_active(); -} - -watch_door_for_open( door_struct ) -{ - self waittill( "door_opened" ); - self endon( "door_hacked" ); - remove_all_door_hackables_that_target_door( door_struct.door ); -} - -door_hack( hacker ) -{ - self.door notify( "door_hacked" ); - self.door notify( "kill_door_think" ); - remove_all_door_hackables_that_target_door( self.door ); - self.door [[ self.door_activate_func ]](); - self.door._door_open = 1; -} - -remove_all_door_hackables_that_target_door( door ) -{ - candidates = []; - i = 0; - while ( i < level._hackable_objects.size ) - { - obj = level._hackable_objects[ i ]; - if ( isDefined( obj.door ) && obj.door.target == door.target ) - { - candidates[ candidates.size ] = obj; - } - i++; - } - i = 0; - while ( i < candidates.size ) - { - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( candidates[ i ] ); - i++; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_hackables_packapunch.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_hackables_packapunch.gsc deleted file mode 100644 index c9fba2a..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_hackables_packapunch.gsc +++ /dev/null @@ -1,46 +0,0 @@ -#include maps/mp/zombies/_zm_equip_hacker; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -hack_packapunch() -{ - vending_weapon_upgrade_trigger = getentarray( "specialty_weapupgrade", "script_noteworthy" ); - perk = getent( vending_weapon_upgrade_trigger[ 0 ].target, "targetname" ); - if ( isDefined( perk ) ) - { - struct = spawnstruct(); - struct.origin = perk.origin + ( anglesToRight( perk.angles ) * 26 ) + vectorScale( ( 0, 0, 1 ), 48 ); - struct.radius = 48; - struct.height = 48; - struct.script_float = 5; - struct.script_int = -1000; - level._pack_hack_struct = struct; - maps/mp/zombies/_zm_equip_hacker::register_pooled_hackable_struct( level._pack_hack_struct, ::packapunch_hack ); - level._pack_hack_struct pack_trigger_think(); - } -} - -pack_trigger_think() -{ - if ( !flag_exists( "enter_nml" ) ) - { - return; - } - while ( 1 ) - { - flag_wait( "enter_nml" ); - self.script_int = -1000; - while ( flag( "enter_nml" ) ) - { - wait 1; - } - } -} - -packapunch_hack( hacker ) -{ - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( level._pack_hack_struct ); - level._pack_hack_struct.script_int = 0; - level notify( "packapunch_hacked" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_hackables_perks.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_hackables_perks.gsc deleted file mode 100644 index 09481d7..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_hackables_perks.gsc +++ /dev/null @@ -1,72 +0,0 @@ -#include maps/mp/zombies/_zm_equip_hacker; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -hack_perks() -{ - vending_triggers = getentarray( "zombie_vending", "targetname" ); - i = 0; - while ( i < vending_triggers.size ) - { - struct = spawnstruct(); - machine = getentarray( vending_triggers[ i ].target, "targetname" ); - struct.origin = machine[ 0 ].origin + ( anglesToRight( machine[ 0 ].angles ) * 18 ) + vectorScale( ( 0, 0, 1 ), 48 ); - struct.radius = 48; - struct.height = 64; - struct.script_float = 5; - while ( !isDefined( vending_triggers[ i ].cost ) ) - { - wait 0,05; - } - struct.script_int = int( vending_triggers[ i ].cost * -1 ); - struct.perk = vending_triggers[ i ]; - vending_triggers[ i ].hackable = struct; - maps/mp/zombies/_zm_equip_hacker::register_pooled_hackable_struct( struct, ::perk_hack, ::perk_hack_qualifier ); - i++; - } - level._solo_revive_machine_expire_func = ::solo_revive_expire_func; -} - -solo_revive_expire_func() -{ - if ( isDefined( self.hackable ) ) - { - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( self.hackable ); - self.hackable = undefined; - } -} - -perk_hack_qualifier( player ) -{ - if ( isDefined( player._retain_perks ) ) - { - return 0; - } - if ( player hasperk( self.perk.script_noteworthy ) ) - { - return 1; - } - return 0; -} - -perk_hack( hacker ) -{ - if ( flag( "solo_game" ) && self.perk.script_noteworthy == "specialty_quickrevive" ) - { - hacker.lives--; - - } - hacker notify( self.perk.script_noteworthy + "_stop" ); - hacker playsoundtoplayer( "evt_perk_throwup", hacker ); - while ( isDefined( hacker.perk_hud ) ) - { - keys = getarraykeys( hacker.perk_hud ); - i = 0; - while ( i < hacker.perk_hud.size ) - { - hacker.perk_hud[ keys[ i ] ].x = i * 30; - i++; - } - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_hackables_powerups.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_hackables_powerups.gsc deleted file mode 100644 index 318339f..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_hackables_powerups.gsc +++ /dev/null @@ -1,79 +0,0 @@ -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_equip_hacker; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -unhackable_powerup( name ) -{ - ret = 0; - switch( name ) - { - case "bonus_points_player": - case "bonus_points_team": - case "lose_points_team": - case "random_weapon": - ret = 1; - break; - } - return ret; -} - -hack_powerups() -{ - while ( 1 ) - { - level waittill( "powerup_dropped", powerup ); - if ( !unhackable_powerup( powerup.powerup_name ) ) - { - struct = spawnstruct(); - struct.origin = powerup.origin; - struct.radius = 65; - struct.height = 72; - struct.script_float = 5; - struct.script_int = 5000; - struct.powerup = powerup; - powerup thread powerup_pickup_watcher( struct ); - maps/mp/zombies/_zm_equip_hacker::register_pooled_hackable_struct( struct, ::powerup_hack ); - } - } -} - -powerup_pickup_watcher( powerup_struct ) -{ - self endon( "hacked" ); - self waittill( "death" ); - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( powerup_struct ); -} - -powerup_hack( hacker ) -{ - self.powerup notify( "hacked" ); - if ( isDefined( self.powerup.zombie_grabbable ) && self.powerup.zombie_grabbable ) - { - self.powerup notify( "powerup_timedout" ); - origin = self.powerup.origin; - self.powerup delete(); - self.powerup = maps/mp/zombies/_zm_net::network_safe_spawn( "powerup", 1, "script_model", origin ); - if ( isDefined( self.powerup ) ) - { - self.powerup maps/mp/zombies/_zm_powerups::powerup_setup( "full_ammo" ); - self.powerup thread maps/mp/zombies/_zm_powerups::powerup_timeout(); - self.powerup thread maps/mp/zombies/_zm_powerups::powerup_wobble(); - self.powerup thread maps/mp/zombies/_zm_powerups::powerup_grab(); - } - } - else - { - if ( self.powerup.powerup_name == "full_ammo" ) - { - self.powerup maps/mp/zombies/_zm_powerups::powerup_setup( "fire_sale" ); - } - else - { - self.powerup maps/mp/zombies/_zm_powerups::powerup_setup( "full_ammo" ); - } - } - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( self ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_hackables_wallbuys.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_hackables_wallbuys.gsc deleted file mode 100644 index 219b432..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_hackables_wallbuys.gsc +++ /dev/null @@ -1,55 +0,0 @@ -#include maps/mp/zombies/_zm_equip_hacker; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -hack_wallbuys() -{ - weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); - i = 0; - while ( i < weapon_spawns.size ) - { - if ( weapontype( weapon_spawns[ i ].zombie_weapon_upgrade ) == "grenade" ) - { - i++; - continue; - } - else if ( weapontype( weapon_spawns[ i ].zombie_weapon_upgrade ) == "melee" ) - { - i++; - continue; - } - else if ( weapontype( weapon_spawns[ i ].zombie_weapon_upgrade ) == "mine" ) - { - i++; - continue; - } - else if ( weapontype( weapon_spawns[ i ].zombie_weapon_upgrade ) == "bomb" ) - { - i++; - continue; - } - else - { - struct = spawnstruct(); - struct.origin = weapon_spawns[ i ].origin; - struct.radius = 48; - struct.height = 48; - struct.script_float = 2; - struct.script_int = 3000; - struct.wallbuy = weapon_spawns[ i ]; - maps/mp/zombies/_zm_equip_hacker::register_pooled_hackable_struct( struct, ::wallbuy_hack ); - } - i++; - } - bowie_triggers = getentarray( "bowie_upgrade", "targetname" ); - array_thread( bowie_triggers, ::maps/mp/zombies/_zm_equip_hacker::hide_hint_when_hackers_active ); -} - -wallbuy_hack( hacker ) -{ - self.wallbuy.hacked = 1; - model = getent( self.wallbuy.target, "targetname" ); - model rotateroll( 180, 0,5 ); - maps/mp/zombies/_zm_equip_hacker::deregister_hackable_struct( self ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_jump_pad.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_jump_pad.gsc deleted file mode 100644 index a6f669f..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_jump_pad.gsc +++ /dev/null @@ -1,557 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( is_true( level._uses_jump_pads ) ) - { - level jump_pad_init(); - } -} - -jump_pad_init() -{ - level._jump_pad_override = []; - jump_pad_triggers = getentarray( "trig_jump_pad", "targetname" ); - if ( !isDefined( jump_pad_triggers ) ) - { - return; - } - i = 0; - while ( i < jump_pad_triggers.size ) - { - jump_pad_triggers[ i ].start = getstruct( jump_pad_triggers[ i ].target, "targetname" ); - jump_pad_triggers[ i ].destination = getstructarray( jump_pad_triggers[ i ].start.target, "targetname" ); - if ( isDefined( jump_pad_triggers[ i ].script_string ) ) - { - jump_pad_triggers[ i ].overrides = strtok( jump_pad_triggers[ i ].script_string, "," ); - } - jump_pad_triggers[ i ] thread jump_pad_think(); - i++; - } - onplayerconnect_callback( ::jump_pad_player_variables ); -} - -jump_pad_player_variables() -{ - self._padded = 0; - self.lander = 0; -} - -jump_pad_think() -{ - self endon( "destroyed" ); - end_point = undefined; - start_point = undefined; - z_velocity = undefined; - z_dist = undefined; - fling_this_way = undefined; - jump_time = undefined; - world_gravity = getDvarInt( "bg_gravity" ); - gravity_pulls = -13,3; - top_velocity_sq = 810000; - forward_scaling = 1; - if ( isDefined( self.script_flag_wait ) ) - { - if ( !isDefined( level.flag[ self.script_flag_wait ] ) ) - { - flag_init( self.script_flag_wait ); - } - flag_wait( self.script_flag_wait ); - } - while ( isDefined( self ) ) - { - self waittill( "trigger", who ); - if ( isplayer( who ) ) - { - self thread trigger_thread( who, ::jump_pad_start, ::jump_pad_cancel ); - } - } -} - -jump_pad_start( ent_player, endon_condition ) -{ - self endon( "endon_condition" ); - ent_player endon( "left_jump_pad" ); - ent_player endon( "death" ); - ent_player endon( "disconnect" ); - end_point = undefined; - start_point = undefined; - z_velocity = undefined; - z_dist = undefined; - fling_this_way = undefined; - jump_time = undefined; - world_gravity = getDvarInt( "bg_gravity" ); - gravity_pulls = -13,3; - top_velocity_sq = 810000; - forward_scaling = 1; - start_point = self.start; - while ( isDefined( self.name ) ) - { - self._action_overrides = strtok( self.name, "," ); - while ( isDefined( self._action_overrides ) ) - { - i = 0; - while ( i < self._action_overrides.size ) - { - ent_player jump_pad_player_overrides( self._action_overrides[ i ] ); - i++; - } - } - } - if ( isDefined( self.script_wait ) ) - { - if ( self.script_wait < 1 ) - { - self playsound( "evt_jump_pad_charge_short" ); - } - else - { - self playsound( "evt_jump_pad_charge" ); - } - wait self.script_wait; - } - else - { - self playsound( "evt_jump_pad_charge" ); - wait 1; - } - if ( isDefined( self.script_parameters ) && isDefined( level._jump_pad_override[ self.script_parameters ] ) ) - { - end_point = self [[ level._jump_pad_override[ self.script_parameters ] ]]( ent_player ); - } - if ( !isDefined( end_point ) ) - { - end_point = self.destination[ randomint( self.destination.size ) ]; - } - if ( isDefined( self.script_string ) && isDefined( level._jump_pad_override[ self.script_string ] ) ) - { - info_array = self [[ level._jump_pad_override[ self.script_string ] ]]( start_point, end_point ); - fling_this_way = info_array[ 0 ]; - jump_time = info_array[ 1 ]; - } - else - { - end_spot = end_point.origin; - if ( !is_true( self.script_airspeed ) ) - { - rand_end = ( randomfloat( -1, 1 ), randomfloat( -1, 1 ), 0 ); - rand_scale = randomint( 100 ); - rand_spot = vectorScale( rand_end, rand_scale ); - end_spot = end_point.origin + rand_spot; - } - pad_dist = distance( start_point.origin, end_spot ); - z_dist = end_spot[ 2 ] - start_point.origin[ 2 ]; - jump_velocity = end_spot - start_point.origin; - if ( z_dist > 40 && z_dist < 135 ) - { - z_dist *= 2,5; - forward_scaling = 1,1; -/# - if ( getDvarInt( #"D5FD01C3" ) ) - { - if ( getDvar( #"E2494021" ) != "" ) - { - z_dist *= getDvarFloat( #"E2494021" ); - } - if ( getDvar( #"4E3BC729" ) != "" ) - { - forward_scaling = getDvarFloat( #"4E3BC729" ); -#/ - } - } - } - else - { - if ( z_dist >= 135 ) - { - z_dist *= 2,7; - forward_scaling = 1,3; -/# - if ( getDvarInt( #"D5FD01C3" ) ) - { - if ( getDvar( #"E2494021" ) != "" ) - { - z_dist *= getDvarFloat( #"E2494021" ); - } - if ( getDvar( #"4E3BC729" ) != "" ) - { - forward_scaling = getDvarFloat( #"4E3BC729" ); -#/ - } - } - } - else - { - if ( z_dist < 0 ) - { - z_dist *= 2,4; - forward_scaling = 1; -/# - if ( getDvarInt( #"D5FD01C3" ) ) - { - if ( getDvar( #"E2494021" ) != "" ) - { - z_dist *= getDvarFloat( #"E2494021" ); - } - if ( getDvar( #"4E3BC729" ) != "" ) - { - forward_scaling = getDvarFloat( #"4E3BC729" ); -#/ - } - } - } - } - } - z_velocity = 2 * z_dist * world_gravity; - if ( z_velocity < 0 ) - { - z_velocity *= -1; - } - if ( z_dist < 0 ) - { - z_dist *= -1; - } - jump_time = sqrt( ( 2 * pad_dist ) / world_gravity ); - jump_time_2 = sqrt( ( 2 * z_dist ) / world_gravity ); - jump_time += jump_time_2; - if ( jump_time < 0 ) - { - jump_time *= -1; - } - x = ( jump_velocity[ 0 ] * forward_scaling ) / jump_time; - y = ( jump_velocity[ 1 ] * forward_scaling ) / jump_time; - z = z_velocity / jump_time; - fling_this_way = ( x, y, z ); - } - if ( isDefined( end_point.target ) ) - { - poi_spot = getstruct( end_point.target, "targetname" ); - } - else - { - poi_spot = end_point; - } - if ( !isDefined( self.script_index ) ) - { - ent_player.script_index = undefined; - } - else - { - ent_player.script_index = self.script_index; - } - if ( isDefined( self.script_start ) && self.script_start == 1 ) - { - if ( !is_true( ent_player._padded ) ) - { - self playsound( "evt_jump_pad_launch" ); - playfx( level._effect[ "jump_pad_jump" ], self.origin ); - ent_player thread jump_pad_move( fling_this_way, jump_time, poi_spot, self ); - if ( isDefined( self.script_label ) ) - { - level notify( self.script_label ); - } - return; - } - } - else - { - if ( ent_player isonground() && !is_true( ent_player._padded ) ) - { - self playsound( "evt_jump_pad_launch" ); - playfx( level._effect[ "jump_pad_jump" ], self.origin ); - ent_player thread jump_pad_move( fling_this_way, jump_time, poi_spot, self ); - if ( isDefined( self.script_label ) ) - { - level notify( self.script_label ); - } - return; - } - } - wait 0,5; - if ( ent_player istouching( self ) ) - { - self jump_pad_start( ent_player, endon_condition ); - } -} - -jump_pad_cancel( ent_player ) -{ - ent_player notify( "left_jump_pad" ); - if ( isDefined( ent_player.poi_spot ) && !is_true( ent_player._padded ) ) - { - } - while ( isDefined( self.name ) ) - { - self._action_overrides = strtok( self.name, "," ); - while ( isDefined( self._action_overrides ) ) - { - i = 0; - while ( i < self._action_overrides.size ) - { - ent_player jump_pad_player_overrides( self._action_overrides[ i ] ); - i++; - } - } - } -} - -jump_pad_move( vec_direction, flt_time, struct_poi, trigger ) -{ - self endon( "death" ); - self endon( "disconnect" ); - start_time = getTime(); - jump_time = flt_time * 500; - attract_dist = undefined; - num_attractors = 30; - added_poi_value = 0; - start_turned_on = 1; - poi_start_func = undefined; - while ( is_true( self.divetoprone ) || is_true( self._padded ) ) - { - wait 0,05; - } - self._padded = 1; - self.lander = 1; - self setstance( "stand" ); - wait 0,1; - if ( isDefined( trigger.script_label ) ) - { - if ( issubstr( trigger.script_label, "low" ) ) - { - self.jump_pad_current = undefined; - self.jump_pad_previous = undefined; - } - else if ( !isDefined( self.jump_pad_current ) ) - { - self.jump_pad_current = trigger; - } - else - { - self.jump_pad_previous = self.jump_pad_current; - self.jump_pad_current = trigger; - } - } - if ( isDefined( self.poi_spot ) ) - { - level jump_pad_ignore_poi_cleanup( self.poi_spot ); - self.poi_spot deactivate_zombie_point_of_interest(); - self.poi_spot delete(); - } - if ( isDefined( struct_poi ) ) - { - self.poi_spot = spawn( "script_origin", struct_poi.origin ); - if ( isDefined( level._pad_poi_ignore ) ) - { - level [[ level._pad_poi_ignore ]]( self.poi_spot ); - } - self thread jump_pad_enemy_follow_or_ignore( self.poi_spot ); - if ( isDefined( level._jump_pad_poi_start_override ) && !is_true( self.script_index ) ) - { - poi_start_func = level._jump_pad_poi_start_override; - } - if ( isDefined( level._jump_pad_poi_end_override ) ) - { - poi_end_func = level._jump_pad_poi_end_override; - } - self.poi_spot create_zombie_point_of_interest( attract_dist, num_attractors, added_poi_value, start_turned_on, poi_start_func ); - self thread disconnect_failsafe_pad_poi_clean(); - } - self setorigin( self.origin + ( 0, 0, 1 ) ); - if ( randomintrange( 0, 101 ) < 20 ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "jumppad" ); - } - while ( ( getTime() - start_time ) < jump_time ) - { - self setvelocity( vec_direction ); - wait 0,05; - } - while ( !self isonground() ) - { - wait 0,05; - } - self._padded = 0; - self.lander = 0; - jump_pad_triggers = getentarray( "trig_jump_pad", "targetname" ); - i = 0; - while ( i < jump_pad_triggers.size ) - { - if ( self istouching( jump_pad_triggers[ i ] ) ) - { - level thread failsafe_pad_poi_clean( jump_pad_triggers[ i ], self.poi_spot ); - return; - } - i++; - } - if ( isDefined( self.poi_spot ) ) - { - level jump_pad_ignore_poi_cleanup( self.poi_spot ); - self.poi_spot delete(); - } -} - -disconnect_failsafe_pad_poi_clean() -{ - self notify( "kill_disconnect_failsafe_pad_poi_clean" ); - self endon( "kill_disconnect_failsafe_pad_poi_clean" ); - self.poi_spot endon( "death" ); - self waittill( "disconnect" ); - if ( isDefined( self.poi_spot ) ) - { - level jump_pad_ignore_poi_cleanup( self.poi_spot ); - self.poi_spot deactivate_zombie_point_of_interest(); - self.poi_spot delete(); - } -} - -failsafe_pad_poi_clean( ent_trig, ent_poi ) -{ - if ( isDefined( ent_trig.script_wait ) ) - { - wait ent_trig.script_wait; - } - else - { - wait 0,5; - } - if ( isDefined( ent_poi ) ) - { - level jump_pad_ignore_poi_cleanup( ent_poi ); - ent_poi deactivate_zombie_point_of_interest(); - ent_poi delete(); - } -} - -jump_pad_enemy_follow_or_ignore( ent_poi ) -{ - self endon( "death" ); - self endon( "disconnect" ); - zombies = getaiarray( level.zombie_team ); - players = getplayers(); - valid_players = 0; - p = 0; - while ( p < players.size ) - { - if ( is_player_valid( players[ p ] ) ) - { - valid_players++; - } - p++; - } - i = 0; - while ( i < zombies.size ) - { - ignore_poi = 0; - if ( !isDefined( zombies[ i ] ) ) - { - i++; - continue; - } - else enemy = zombies[ i ].favoriteenemy; - if ( isDefined( enemy ) ) - { - if ( players.size > 1 && valid_players > 1 ) - { - if ( enemy != self || isDefined( enemy.jump_pad_previous ) && enemy.jump_pad_previous == enemy.jump_pad_current ) - { - ignore_poi = 1; - } - } - } - if ( is_true( ignore_poi ) ) - { - zombies[ i ] thread add_poi_to_ignore_list( ent_poi ); - i++; - continue; - } - else - { - zombies[ i ].ignore_distance_tracking = 1; - zombies[ i ]._pad_follow = 1; - zombies[ i ] thread stop_chasing_the_sky( ent_poi ); - } - i++; - } -} - -jump_pad_ignore_poi_cleanup( ent_poi ) -{ - zombies = getaiarray( level.zombie_team ); - i = 0; - while ( i < zombies.size ) - { - if ( isDefined( zombies[ i ] ) ) - { - if ( is_true( zombies[ i ]._pad_follow ) ) - { - zombies[ i ]._pad_follow = 0; - zombies[ i ] notify( "stop_chasing_the_sky" ); - zombies[ i ].ignore_distance_tracking = 0; - } - if ( isDefined( ent_poi ) ) - { - zombies[ i ] thread remove_poi_from_ignore_list( ent_poi ); - } - } - i++; - } -} - -stop_chasing_the_sky( ent_poi ) -{ - self endon( "death" ); - self endon( "stop_chasing_the_sky" ); - while ( is_true( self._pad_follow ) ) - { - while ( isDefined( self.favoriteenemy ) ) - { - players = getplayers(); - i = 0; - while ( i < players.size ) - { - if ( is_player_valid( players[ i ] ) && players[ i ] != self.favoriteenemy ) - { - if ( distance2dsquared( players[ i ].origin, self.origin ) < 10000 ) - { - self add_poi_to_ignore_list( ent_poi ); - return; - } - } - i++; - } - } - wait 0,1; - } - self._pad_follow = 0; - self.ignore_distance_tracking = 0; - self notify( "stop_chasing_the_sky" ); -} - -jump_pad_player_overrides( st_behavior, int_clean ) -{ - if ( !isDefined( st_behavior ) || !isstring( st_behavior ) ) - { - return; - } - if ( !isDefined( int_clean ) ) - { - int_clean = 0; - } - switch( st_behavior ) - { - case "no_sprint": - if ( !int_clean ) - { - } - default: - if ( isDefined( level._jump_pad_level_behavior ) ) - { - self [[ level._jump_pad_level_behavior ]]( st_behavior, int_clean ); - } - } - } - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_laststand.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_laststand.gsc deleted file mode 100644 index e4db3a9..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_laststand.gsc +++ /dev/null @@ -1,1445 +0,0 @@ -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_chugabud; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_pers_upgrades; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/_demo; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -laststand_global_init() -{ - level.const_laststand_getup_count_start = 0; - level.const_laststand_getup_bar_start = 0,5; - level.const_laststand_getup_bar_regen = 0,0025; - level.const_laststand_getup_bar_damage = 0,1; -} - -init() -{ - if ( level.script == "frontend" ) - { - return; - } - laststand_global_init(); - level.revive_tool = "syrette_zm"; - precacheitem( level.revive_tool ); - precachestring( &"GAME_BUTTON_TO_REVIVE_PLAYER" ); - precachestring( &"GAME_PLAYER_NEEDS_TO_BE_REVIVED" ); - precachestring( &"GAME_PLAYER_IS_REVIVING_YOU" ); - precachestring( &"GAME_REVIVING" ); - if ( !isDefined( level.laststandpistol ) ) - { - level.laststandpistol = "m1911"; - precacheitem( level.laststandpistol ); - } - level thread revive_hud_think(); - level.primaryprogressbarx = 0; - level.primaryprogressbary = 110; - level.primaryprogressbarheight = 4; - level.primaryprogressbarwidth = 120; - level.primaryprogressbary_ss = 280; - if ( getDvar( "revive_trigger_radius" ) == "" ) - { - setdvar( "revive_trigger_radius", "40" ); - } - level.laststandgetupallowed = 0; -} - -player_is_in_laststand() -{ - if ( isDefined( self.no_revive_trigger ) && !self.no_revive_trigger ) - { - return isDefined( self.revivetrigger ); - } - else - { - if ( isDefined( self.laststand ) ) - { - return self.laststand; - } - } -} - -player_num_in_laststand() -{ - num = 0; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] player_is_in_laststand() ) - { - num++; - } - i++; - } - return num; -} - -player_all_players_in_laststand() -{ - return player_num_in_laststand() == get_players().size; -} - -player_any_player_in_laststand() -{ - return player_num_in_laststand() > 0; -} - -player_last_stand_stats( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) -{ - if ( isDefined( attacker ) && isplayer( attacker ) && attacker != self ) - { - if ( level.gametype == "zcleansed" ) - { - maps/mp/_demo::bookmark( "kill", getTime(), self, attacker, 0, einflictor ); - } - if ( level.gametype == "zcleansed" ) - { - if ( isDefined( attacker.is_zombie ) && !attacker.is_zombie ) - { - attacker.kills++; - } - else - { - attacker.downs++; - } - } - else - { - attacker.kills++; - } - attacker maps/mp/zombies/_zm_stats::increment_client_stat( "kills" ); - attacker maps/mp/zombies/_zm_stats::increment_player_stat( "kills" ); - if ( isDefined( sweapon ) ) - { - dmgweapon = sweapon; - if ( is_alt_weapon( dmgweapon ) ) - { - dmgweapon = weaponaltweaponname( dmgweapon ); - } - attacker addweaponstat( dmgweapon, "kills", 1 ); - } - if ( is_headshot( sweapon, shitloc, smeansofdeath ) ) - { - attacker.headshots++; - attacker maps/mp/zombies/_zm_stats::increment_client_stat( "headshots" ); - attacker addweaponstat( sweapon, "headshots", 1 ); - attacker maps/mp/zombies/_zm_stats::increment_player_stat( "headshots" ); - } - } - self increment_downed_stat(); - if ( flag( "solo_game" ) && getnumconnectedplayers() < 2 ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "deaths" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "deaths" ); - self maps/mp/zombies/_zm_pers_upgrades::pers_upgrade_jugg_player_death_stat(); - } -} - -increment_downed_stat() -{ - if ( level.gametype != "zcleansed" ) - { - self.downs++; - } - self maps/mp/zombies/_zm_stats::increment_client_stat( "downs" ); - self add_weighted_down(); - self maps/mp/zombies/_zm_stats::increment_player_stat( "downs" ); - zonename = self get_current_zone(); - if ( !isDefined( zonename ) ) - { - zonename = ""; - } - self recordplayerdownzombies( zonename ); -} - -playerlaststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) -{ - self notify( "entering_last_stand" ); - if ( isDefined( level._game_module_player_laststand_callback ) ) - { - self [[ level._game_module_player_laststand_callback ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); - } - if ( self player_is_in_laststand() ) - { - return; - } - if ( isDefined( self.in_zombify_call ) && self.in_zombify_call ) - { - return; - } - self thread player_last_stand_stats( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); - if ( isDefined( level.playerlaststand_func ) ) - { - [[ level.playerlaststand_func ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); - } - self.health = 1; - self.laststand = 1; - self.ignoreme = 1; - self thread maps/mp/gametypes_zm/_gameobjects::onplayerlaststand(); - self thread maps/mp/zombies/_zm_buildables::onplayerlaststand(); - if ( isDefined( self.no_revive_trigger ) && !self.no_revive_trigger ) - { - self revive_trigger_spawn(); - } - else - { - self undolaststand(); - } - if ( isDefined( self.is_zombie ) && self.is_zombie ) - { - self takeallweapons(); - if ( isDefined( attacker ) && isplayer( attacker ) && attacker != self ) - { - attacker notify( "killed_a_zombie_player" ); - } - } - else - { - self laststand_disable_player_weapons(); - self laststand_give_pistol(); - } - if ( isDefined( level.playersuicideallowed ) && level.playersuicideallowed && get_players().size > 1 ) - { - if ( !isDefined( level.canplayersuicide ) || self [[ level.canplayersuicide ]]() ) - { - self thread suicide_trigger_spawn(); - } - } - if ( isDefined( self.disabled_perks ) ) - { - self.disabled_perks = []; - } - if ( level.laststandgetupallowed ) - { - self thread laststand_getup(); - } - else - { - bleedout_time = getDvarFloat( "player_lastStandBleedoutTime" ); - self thread laststand_bleedout( bleedout_time ); - } - if ( level.gametype != "zcleansed" ) - { - maps/mp/_demo::bookmark( "zm_player_downed", getTime(), self ); - } - self notify( "player_downed" ); - self thread refire_player_downed(); - self thread cleanup_laststand_on_disconnect(); -} - -refire_player_downed() -{ - self endon( "player_revived" ); - self endon( "death" ); - self endon( "disconnect" ); - wait 1; - if ( self.num_perks ) - { - self notify( "player_downed" ); - } -} - -laststand_allowed( sweapon, smeansofdeath, shitloc ) -{ - if ( level.laststandpistol == "none" ) - { - return 0; - } - return 1; -} - -laststand_disable_player_weapons() -{ - weaponinventory = self getweaponslist( 1 ); - self.lastactiveweapon = self getcurrentweapon(); - if ( self isthrowinggrenade() && is_offhand_weapon( self.lastactiveweapon ) ) - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self.lastactiveweapon = primaryweapons[ 0 ]; - self switchtoweaponimmediate( self.lastactiveweapon ); - } - } - self setlaststandprevweap( self.lastactiveweapon ); - self.laststandpistol = undefined; - self.hadpistol = 0; - if ( isDefined( self.weapon_taken_by_losing_specialty_additionalprimaryweapon ) && self.lastactiveweapon == self.weapon_taken_by_losing_specialty_additionalprimaryweapon ) - { - self.lastactiveweapon = "none"; - self.weapon_taken_by_losing_specialty_additionalprimaryweapon = undefined; - } - i = 0; - while ( i < weaponinventory.size ) - { - weapon = weaponinventory[ i ]; - class = weaponclass( weapon ); - if ( issubstr( weapon, "knife_ballistic_" ) ) - { - class = "knife"; - } - if ( class != "pistol" && class != "pistol spread" && class == "pistolspread" && !isDefined( self.laststandpistol ) ) - { - self.laststandpistol = weapon; - self.hadpistol = 1; - } - if ( weapon == "syrette_zm" ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "failed_sacrifices" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "failed_sacrifices" ); - } - else - { - if ( is_zombie_perk_bottle( weapon ) ) - { - self takeweapon( weapon ); - self.lastactiveweapon = "none"; - i++; - continue; - } - } - else if ( isDefined( get_gamemode_var( "item_meat_name" ) ) ) - { - if ( weapon == get_gamemode_var( "item_meat_name" ) ) - { - self takeweapon( weapon ); - self.lastactiveweapon = "none"; - i++; - continue; - } - } - i++; - } - if ( isDefined( self.hadpistol ) && self.hadpistol == 1 && isDefined( level.zombie_last_stand_pistol_memory ) ) - { - self [[ level.zombie_last_stand_pistol_memory ]](); - } - if ( !isDefined( self.laststandpistol ) ) - { - self.laststandpistol = level.laststandpistol; - } - self disableweaponcycling(); - self notify( "weapons_taken_for_last_stand" ); -} - -laststand_enable_player_weapons() -{ - if ( isDefined( self.hadpistol ) && !self.hadpistol && isDefined( self.laststandpistol ) ) - { - self takeweapon( self.laststandpistol ); - } - if ( isDefined( self.hadpistol ) && self.hadpistol == 1 && isDefined( level.zombie_last_stand_ammo_return ) ) - { - [[ level.zombie_last_stand_ammo_return ]](); - } - self enableweaponcycling(); - self enableoffhandweapons(); - if ( isDefined( self.lastactiveweapon ) && self.lastactiveweapon != "none" && !is_placeable_mine( self.lastactiveweapon ) && !is_equipment( self.lastactiveweapon ) ) - { - self switchtoweapon( self.lastactiveweapon ); - } - else - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - } -} - -laststand_clean_up_on_disconnect( playerbeingrevived, revivergun ) -{ - self endon( "do_revive_ended_normally" ); - revivetrigger = playerbeingrevived.revivetrigger; - playerbeingrevived waittill( "disconnect" ); - if ( isDefined( revivetrigger ) ) - { - revivetrigger delete(); - } - self cleanup_suicide_hud(); - if ( isDefined( self.reviveprogressbar ) ) - { - self.reviveprogressbar destroyelem(); - } - if ( isDefined( self.revivetexthud ) ) - { - self.revivetexthud destroy(); - } - self revive_give_back_weapons( revivergun ); -} - -laststand_clean_up_reviving_any( playerbeingrevived ) -{ - self endon( "do_revive_ended_normally" ); - playerbeingrevived waittill_any( "disconnect", "zombified", "stop_revive_trigger" ); - self.is_reviving_any--; - - if ( self.is_reviving_any <= 0 ) - { - self.is_reviving_any = 0; - } -} - -laststand_give_pistol() -{ -/# - assert( isDefined( self.laststandpistol ) ); -#/ -/# - assert( self.laststandpistol != "none" ); -#/ - if ( isDefined( level.zombie_last_stand ) ) - { - [[ level.zombie_last_stand ]](); - } - else - { - self giveweapon( self.laststandpistol ); - self givemaxammo( self.laststandpistol ); - self switchtoweapon( self.laststandpistol ); - } -} - -laststand_bleedout( delay ) -{ - self endon( "player_revived" ); - self endon( "player_suicide" ); - self endon( "zombified" ); - self endon( "disconnect" ); - if ( isDefined( self.is_zombie ) || self.is_zombie && isDefined( self.no_revive_trigger ) && self.no_revive_trigger ) - { - self notify( "bled_out" ); - wait_network_frame(); - self bleed_out(); - return; - } - setclientsysstate( "lsm", "1", self ); - self.bleedout_time = delay; - while ( self.bleedout_time > int( delay * 0,5 ) ) - { - self.bleedout_time -= 1; - wait 1; - } - visionsetlaststand( "zombie_death", delay * 0,5 ); - while ( self.bleedout_time > 0 ) - { - self.bleedout_time -= 1; - wait 1; - } - while ( isDefined( self.revivetrigger ) && isDefined( self.revivetrigger.beingrevived ) && self.revivetrigger.beingrevived == 1 ) - { - wait 0,1; - } - self notify( "bled_out" ); - wait_network_frame(); - self bleed_out(); -} - -bleed_out() -{ - self cleanup_suicide_hud(); - if ( isDefined( self.revivetrigger ) ) - { - self.revivetrigger delete(); - } - self.revivetrigger = undefined; - setclientsysstate( "lsm", "0", self ); - self maps/mp/zombies/_zm_stats::increment_client_stat( "deaths" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "deaths" ); - self maps/mp/zombies/_zm_pers_upgrades::pers_upgrade_jugg_player_death_stat(); - self recordplayerdeathzombies(); - self maps/mp/zombies/_zm_equipment::equipment_take(); - if ( level.gametype != "zcleansed" ) - { - maps/mp/_demo::bookmark( "zm_player_bledout", getTime(), self, undefined, 1 ); - } - level notify( "bleed_out" ); - self undolaststand(); - if ( isDefined( level.is_zombie_level ) && level.is_zombie_level ) - { - self thread [[ level.player_becomes_zombie ]](); - } - else - { - if ( isDefined( level.is_specops_level ) && level.is_specops_level ) - { - self thread [[ level.spawnspectator ]](); - return; - } - else - { - self.ignoreme = 0; - } - } -} - -cleanup_suicide_hud() -{ - if ( isDefined( self.suicideprompt ) ) - { - self.suicideprompt destroy(); - } - self.suicideprompt = undefined; -} - -clean_up_suicide_hud_on_end_game() -{ - self endon( "disconnect" ); - self endon( "zombified" ); - self endon( "stop_revive_trigger" ); - self endon( "player_revived" ); - self endon( "bled_out" ); - level waittill_any( "end_game", "stop_suicide_trigger" ); - self cleanup_suicide_hud(); - if ( isDefined( self.suicidetexthud ) ) - { - self.suicidetexthud destroy(); - } - if ( isDefined( self.suicideprogressbar ) ) - { - self.suicideprogressbar destroyelem(); - } -} - -clean_up_suicide_hud_on_bled_out() -{ - self endon( "disconnect" ); - self endon( "zombified" ); - self endon( "stop_revive_trigger" ); - self waittill_any( "bled_out", "player_revived", "fake_death" ); - self cleanup_suicide_hud(); - if ( isDefined( self.suicideprogressbar ) ) - { - self.suicideprogressbar destroyelem(); - } - if ( isDefined( self.suicidetexthud ) ) - { - self.suicidetexthud destroy(); - } -} - -suicide_trigger_spawn() -{ - radius = getDvarInt( "revive_trigger_radius" ); - self.suicideprompt = newclienthudelem( self ); - self.suicideprompt.alignx = "center"; - self.suicideprompt.aligny = "middle"; - self.suicideprompt.horzalign = "center"; - self.suicideprompt.vertalign = "bottom"; - self.suicideprompt.y = -170; - if ( self issplitscreen() ) - { - self.suicideprompt.y = -132; - } - self.suicideprompt.foreground = 1; - self.suicideprompt.font = "default"; - self.suicideprompt.fontscale = 1,5; - self.suicideprompt.alpha = 1; - self.suicideprompt.color = ( 1, 1, 1 ); - self.suicideprompt.hidewheninmenu = 1; - self thread suicide_trigger_think(); -} - -suicide_trigger_think() -{ - self endon( "disconnect" ); - self endon( "zombified" ); - self endon( "stop_revive_trigger" ); - self endon( "player_revived" ); - self endon( "bled_out" ); - self endon( "fake_death" ); - level endon( "end_game" ); - level endon( "stop_suicide_trigger" ); - self thread clean_up_suicide_hud_on_end_game(); - self thread clean_up_suicide_hud_on_bled_out(); - while ( self usebuttonpressed() ) - { - wait 1; - } - if ( !isDefined( self.suicideprompt ) ) - { - return; - } - while ( 1 ) - { - wait 0,1; - while ( !isDefined( self.suicideprompt ) ) - { - continue; - } - self.suicideprompt settext( &"ZOMBIE_BUTTON_TO_SUICIDE" ); - while ( !self is_suiciding() ) - { - continue; - } - self.pre_suicide_weapon = self getcurrentweapon(); - self giveweapon( level.suicide_weapon ); - self switchtoweapon( level.suicide_weapon ); - duration = self docowardswayanims(); - suicide_success = suicide_do_suicide( duration ); - self.laststand = undefined; - self takeweapon( level.suicide_weapon ); - if ( suicide_success ) - { - self notify( "player_suicide" ); - wait_network_frame(); - self maps/mp/zombies/_zm_stats::increment_client_stat( "suicides" ); - self bleed_out(); - return; - } - self switchtoweapon( self.pre_suicide_weapon ); - self.pre_suicide_weapon = undefined; - } -} - -suicide_do_suicide( duration ) -{ - level endon( "end_game" ); - level endon( "stop_suicide_trigger" ); - suicidetime = duration; - timer = 0; - suicided = 0; - self.suicideprompt settext( "" ); - if ( !isDefined( self.suicideprogressbar ) ) - { - self.suicideprogressbar = self createprimaryprogressbar(); - } - if ( !isDefined( self.suicidetexthud ) ) - { - self.suicidetexthud = newclienthudelem( self ); - } - self.suicideprogressbar updatebar( 0,01, 1 / suicidetime ); - self.suicidetexthud.alignx = "center"; - self.suicidetexthud.aligny = "middle"; - self.suicidetexthud.horzalign = "center"; - self.suicidetexthud.vertalign = "bottom"; - self.suicidetexthud.y = -173; - if ( self issplitscreen() ) - { - self.suicidetexthud.y = -147; - } - self.suicidetexthud.foreground = 1; - self.suicidetexthud.font = "default"; - self.suicidetexthud.fontscale = 1,8; - self.suicidetexthud.alpha = 1; - self.suicidetexthud.color = ( 1, 1, 1 ); - self.suicidetexthud.hidewheninmenu = 1; - self.suicidetexthud settext( &"ZOMBIE_SUICIDING" ); - while ( self is_suiciding() ) - { - wait 0,05; - timer += 0,05; - if ( timer >= suicidetime ) - { - suicided = 1; - break; - } - else - { - } - } - if ( isDefined( self.suicideprogressbar ) ) - { - self.suicideprogressbar destroyelem(); - } - if ( isDefined( self.suicidetexthud ) ) - { - self.suicidetexthud destroy(); - } - if ( isDefined( self.suicideprompt ) ) - { - self.suicideprompt settext( &"ZOMBIE_BUTTON_TO_SUICIDE" ); - } - return suicided; -} - -can_suicide() -{ - if ( !isalive( self ) ) - { - return 0; - } - if ( !self player_is_in_laststand() ) - { - return 0; - } - if ( !isDefined( self.suicideprompt ) ) - { - return 0; - } - if ( isDefined( self.is_zombie ) && self.is_zombie ) - { - return 0; - } - if ( isDefined( level.intermission ) && level.intermission ) - { - return 0; - } - return 1; -} - -is_suiciding( revivee ) -{ - if ( self usebuttonpressed() ) - { - return can_suicide(); - } -} - -revive_trigger_spawn() -{ - if ( isDefined( level.revive_trigger_spawn_override_link ) ) - { - [[ level.revive_trigger_spawn_override_link ]]( self ); - } - else - { - radius = getDvarInt( "revive_trigger_radius" ); - self.revivetrigger = spawn( "trigger_radius", ( 1, 1, 1 ), 0, radius, radius ); - self.revivetrigger sethintstring( "" ); - self.revivetrigger setcursorhint( "HINT_NOICON" ); - self.revivetrigger setmovingplatformenabled( 1 ); - self.revivetrigger enablelinkto(); - self.revivetrigger.origin = self.origin; - self.revivetrigger linkto( self ); - self.revivetrigger.beingrevived = 0; - self.revivetrigger.createtime = getTime(); - } - self thread revive_trigger_think(); -} - -revive_trigger_think() -{ - self endon( "disconnect" ); - self endon( "zombified" ); - self endon( "stop_revive_trigger" ); - level endon( "end_game" ); - self endon( "death" ); - while ( 1 ) - { - wait 0,1; - self.revivetrigger sethintstring( "" ); - players = get_players(); - i = 0; - while ( i < players.size ) - { - d = 0; - d = self depthinwater(); - if ( players[ i ] can_revive( self ) || d > 20 ) - { - self.revivetrigger setrevivehintstring( &"GAME_BUTTON_TO_REVIVE_PLAYER", self.team ); - break; - } - else - { - i++; - } - } - i = 0; - while ( i < players.size ) - { - reviver = players[ i ]; - if ( self == reviver || !reviver is_reviving( self ) ) - { - i++; - continue; - } - else - { - gun = reviver getcurrentweapon(); -/# - assert( isDefined( gun ) ); -#/ - if ( gun == level.revive_tool ) - { - i++; - continue; - } - else - { - reviver giveweapon( level.revive_tool ); - reviver switchtoweapon( level.revive_tool ); - reviver setweaponammostock( level.revive_tool, 1 ); - revive_success = reviver revive_do_revive( self, gun ); - reviver revive_give_back_weapons( gun ); - if ( isplayer( self ) ) - { - self allowjump( 1 ); - } - self.laststand = undefined; - if ( revive_success ) - { - if ( isplayer( self ) ) - { - maps/mp/zombies/_zm_chugabud::player_revived_cleanup_chugabud_corpse(); - } - self thread revive_success( reviver ); - self cleanup_suicide_hud(); - return; - } - } - } - i++; - } - } -} - -revive_give_back_weapons( gun ) -{ - self takeweapon( level.revive_tool ); - if ( self player_is_in_laststand() ) - { - return; - } - if ( gun != "none" && !is_placeable_mine( gun ) && gun != "equip_gasmask_zm" && gun != "lower_equip_gasmask_zm" && self hasweapon( gun ) ) - { - self switchtoweapon( gun ); - } - else - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - } -} - -can_revive( revivee ) -{ - if ( !isDefined( revivee.revivetrigger ) ) - { - return 0; - } - if ( !isalive( self ) ) - { - return 0; - } - if ( self player_is_in_laststand() ) - { - return 0; - } - if ( self.team != revivee.team ) - { - return 0; - } - if ( isDefined( self.is_zombie ) && self.is_zombie ) - { - return 0; - } - if ( self has_powerup_weapon() ) - { - return 0; - } - if ( isDefined( level.can_revive_use_depthinwater_test ) && level.can_revive_use_depthinwater_test && revivee depthinwater() > 10 ) - { - return 1; - } - if ( isDefined( level.can_revive ) && !( [[ level.can_revive ]]( revivee ) ) ) - { - return 0; - } - if ( isDefined( level.can_revive_game_module ) && !( [[ level.can_revive_game_module ]]( revivee ) ) ) - { - return 0; - } - ignore_sight_checks = 0; - ignore_touch_checks = 0; - if ( isDefined( level.revive_trigger_should_ignore_sight_checks ) ) - { - ignore_sight_checks = [[ level.revive_trigger_should_ignore_sight_checks ]]( self ); - if ( ignore_sight_checks && isDefined( revivee.revivetrigger.beingrevived ) && revivee.revivetrigger.beingrevived == 1 ) - { - ignore_touch_checks = 1; - } - } - if ( !ignore_touch_checks ) - { - if ( !self istouching( revivee.revivetrigger ) ) - { - return 0; - } - } - if ( !ignore_sight_checks ) - { - if ( !self is_facing( revivee ) ) - { - return 0; - } - if ( !sighttracepassed( self.origin + vectorScale( ( 1, 1, 1 ), 50 ), revivee.origin + vectorScale( ( 1, 1, 1 ), 30 ), 0, undefined ) ) - { - return 0; - } - if ( !bullettracepassed( self.origin + vectorScale( ( 1, 1, 1 ), 50 ), revivee.origin + vectorScale( ( 1, 1, 1 ), 30 ), 0, undefined ) ) - { - return 0; - } - } - return 1; -} - -is_reviving( revivee ) -{ - if ( self usebuttonpressed() ) - { - return can_revive( revivee ); - } -} - -is_reviving_any() -{ - if ( isDefined( self.is_reviving_any ) ) - { - return self.is_reviving_any; - } -} - -is_facing( facee ) -{ - orientation = self getplayerangles(); - forwardvec = anglesToForward( orientation ); - forwardvec2d = ( forwardvec[ 0 ], forwardvec[ 1 ], 0 ); - unitforwardvec2d = vectornormalize( forwardvec2d ); - tofaceevec = facee.origin - self.origin; - tofaceevec2d = ( tofaceevec[ 0 ], tofaceevec[ 1 ], 0 ); - unittofaceevec2d = vectornormalize( tofaceevec2d ); - dotproduct = vectordot( unitforwardvec2d, unittofaceevec2d ); - return dotproduct > 0,9; -} - -revive_do_revive( playerbeingrevived, revivergun ) -{ -/# - assert( self is_reviving( playerbeingrevived ) ); -#/ - revivetime = 3; - if ( self hasperk( "specialty_quickrevive" ) ) - { - revivetime /= 2; - } - if ( isDefined( self.pers_upgrades_awarded[ "revive" ] ) && self.pers_upgrades_awarded[ "revive" ] ) - { - revivetime *= 0,5; - } - timer = 0; - revived = 0; - playerbeingrevived.revivetrigger.beingrevived = 1; - playerbeingrevived.revive_hud settext( &"GAME_PLAYER_IS_REVIVING_YOU", self ); - playerbeingrevived revive_hud_show_n_fade( 3 ); - playerbeingrevived.revivetrigger sethintstring( "" ); - if ( isplayer( playerbeingrevived ) ) - { - playerbeingrevived startrevive( self ); - } - if ( !isDefined( self.reviveprogressbar ) ) - { - self.reviveprogressbar = self createprimaryprogressbar(); - } - if ( !isDefined( self.revivetexthud ) ) - { - self.revivetexthud = newclienthudelem( self ); - } - self thread laststand_clean_up_on_disconnect( playerbeingrevived, revivergun ); - if ( !isDefined( self.is_reviving_any ) ) - { - self.is_reviving_any = 0; - } - self.is_reviving_any++; - self thread laststand_clean_up_reviving_any( playerbeingrevived ); - self.reviveprogressbar updatebar( 0,01, 1 / revivetime ); - self.revivetexthud.alignx = "center"; - self.revivetexthud.aligny = "middle"; - self.revivetexthud.horzalign = "center"; - self.revivetexthud.vertalign = "bottom"; - self.revivetexthud.y = -113; - if ( self issplitscreen() ) - { - self.revivetexthud.y = -347; - } - self.revivetexthud.foreground = 1; - self.revivetexthud.font = "default"; - self.revivetexthud.fontscale = 1,8; - self.revivetexthud.alpha = 1; - self.revivetexthud.color = ( 1, 1, 1 ); - self.revivetexthud.hidewheninmenu = 1; - if ( isDefined( self.pers_upgrades_awarded[ "revive" ] ) && self.pers_upgrades_awarded[ "revive" ] ) - { - self.revivetexthud.color = ( 0,5, 0,5, 1 ); - } - self.revivetexthud settext( &"GAME_REVIVING" ); - self thread check_for_failed_revive( playerbeingrevived ); - while ( self is_reviving( playerbeingrevived ) ) - { - wait 0,05; - timer += 0,05; - if ( self player_is_in_laststand() ) - { - break; - } - else if ( isDefined( playerbeingrevived.revivetrigger.auto_revive ) && playerbeingrevived.revivetrigger.auto_revive == 1 ) - { - break; - } - else - { - if ( timer >= revivetime ) - { - revived = 1; - break; - } - else - { - } - } - } - if ( isDefined( self.reviveprogressbar ) ) - { - self.reviveprogressbar destroyelem(); - } - if ( isDefined( self.revivetexthud ) ) - { - self.revivetexthud destroy(); - } - if ( isDefined( playerbeingrevived.revivetrigger.auto_revive ) && playerbeingrevived.revivetrigger.auto_revive == 1 ) - { - } - else if ( !revived ) - { - if ( isplayer( playerbeingrevived ) ) - { - playerbeingrevived stoprevive( self ); - } - } - playerbeingrevived.revivetrigger sethintstring( &"GAME_BUTTON_TO_REVIVE_PLAYER" ); - playerbeingrevived.revivetrigger.beingrevived = 0; - self notify( "do_revive_ended_normally" ); - self.is_reviving_any--; - - if ( !revived ) - { - playerbeingrevived thread checkforbleedout( self ); - } - return revived; -} - -checkforbleedout( player ) -{ - self endon( "player_revived" ); - self endon( "player_suicide" ); - self endon( "disconnect" ); - player endon( "disconnect" ); - if ( is_classic() ) - { - player.failed_revives++; - player notify( "player_failed_revive" ); - } -} - -auto_revive( reviver, dont_enable_weapons ) -{ - if ( isDefined( self.revivetrigger ) ) - { - self.revivetrigger.auto_revive = 1; - while ( self.revivetrigger.beingrevived == 1 ) - { - while ( 1 ) - { - if ( self.revivetrigger.beingrevived == 0 ) - { - break; - } - else - { - wait_network_frame(); - } - } - } - self.revivetrigger.auto_trigger = 0; - } - self reviveplayer(); - self maps/mp/zombies/_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); - setclientsysstate( "lsm", "0", self ); - self notify( "stop_revive_trigger" ); - if ( isDefined( self.revivetrigger ) ) - { - self.revivetrigger delete(); - self.revivetrigger = undefined; - } - self cleanup_suicide_hud(); - if ( !isDefined( dont_enable_weapons ) || dont_enable_weapons == 0 ) - { - self laststand_enable_player_weapons(); - } - self allowjump( 1 ); - self.ignoreme = 0; - self.laststand = undefined; - if ( isDefined( level.isresetting_grief ) && !level.isresetting_grief ) - { - reviver.revives++; - reviver maps/mp/zombies/_zm_stats::increment_client_stat( "revives" ); - reviver maps/mp/zombies/_zm_stats::increment_player_stat( "revives" ); - self recordplayerrevivezombies( reviver ); - maps/mp/_demo::bookmark( "zm_player_revived", getTime(), self, reviver ); - } - self notify( "player_revived" ); -} - -remote_revive( reviver ) -{ - if ( !self player_is_in_laststand() ) - { - return; - } - self auto_revive( reviver ); -} - -revive_success( reviver ) -{ - if ( !isplayer( self ) ) - { - self notify( "player_revived" ); - return; - } - maps/mp/_demo::bookmark( "zm_player_revived", getTime(), self, reviver ); - self notify( "player_revived" ); - self reviveplayer(); - self maps/mp/zombies/_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); - if ( isDefined( level.isresetting_grief ) && !level.isresetting_grief ) - { - reviver.revives++; - reviver maps/mp/zombies/_zm_stats::increment_client_stat( "revives" ); - reviver maps/mp/zombies/_zm_stats::increment_player_stat( "revives" ); - self recordplayerrevivezombies( reviver ); - reviver.upgrade_fx_origin = self.origin; - } - if ( is_classic() ) - { - reviver maps/mp/zombies/_zm_stats::increment_client_stat( "pers_revivenoperk", 0 ); - } - reviver thread check_for_sacrifice(); - if ( isDefined( level.missioncallbacks ) ) - { - } - setclientsysstate( "lsm", "0", self ); - self.revivetrigger delete(); - self.revivetrigger = undefined; - self cleanup_suicide_hud(); - self laststand_enable_player_weapons(); - self.ignoreme = 0; -} - -revive_force_revive( reviver ) -{ -/# - assert( isDefined( self ) ); -#/ -/# - assert( isplayer( self ) ); -#/ -/# - assert( self player_is_in_laststand() ); -#/ - self thread revive_success( reviver ); -} - -revive_hud_create() -{ - self.revive_hud = newclienthudelem( self ); - self.revive_hud.alignx = "center"; - self.revive_hud.aligny = "middle"; - self.revive_hud.horzalign = "center"; - self.revive_hud.vertalign = "bottom"; - self.revive_hud.foreground = 1; - self.revive_hud.font = "default"; - self.revive_hud.fontscale = 1,5; - self.revive_hud.alpha = 0; - self.revive_hud.color = ( 1, 1, 1 ); - self.revive_hud.hidewheninmenu = 1; - self.revive_hud settext( "" ); - self.revive_hud.y = -160; -} - -revive_hud_think() -{ - self endon( "disconnect" ); - while ( 1 ) - { - wait 0,1; - while ( !player_any_player_in_laststand() ) - { - continue; - } - players = get_players(); - playertorevive = undefined; - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ].revivetrigger ) || !isDefined( players[ i ].revivetrigger.createtime ) ) - { - i++; - continue; - } - else - { - if ( !isDefined( playertorevive ) || playertorevive.revivetrigger.createtime > players[ i ].revivetrigger.createtime ) - { - playertorevive = players[ i ]; - } - } - i++; - } - if ( isDefined( playertorevive ) ) - { - i = 0; - while ( i < players.size ) - { - if ( players[ i ] player_is_in_laststand() ) - { - i++; - continue; - } - else if ( getDvar( "g_gametype" ) == "vs" ) - { - if ( players[ i ].team != playertorevive.team ) - { - i++; - continue; - } - } - else if ( is_encounter() ) - { - if ( players[ i ].sessionteam != playertorevive.sessionteam ) - { - i++; - continue; - } - else if ( isDefined( level.hide_revive_message ) && level.hide_revive_message ) - { - i++; - continue; - } - } - else - { - players[ i ] thread faderevivemessageover( playertorevive, 3 ); - } - i++; - } - playertorevive.revivetrigger.createtime = undefined; - wait 3,5; - } - } -} - -faderevivemessageover( playertorevive, time ) -{ - revive_hud_show(); - self.revive_hud settext( &"GAME_PLAYER_NEEDS_TO_BE_REVIVED", playertorevive ); - self.revive_hud fadeovertime( time ); - self.revive_hud.alpha = 0; -} - -revive_hud_show() -{ -/# - assert( isDefined( self ) ); -#/ -/# - assert( isDefined( self.revive_hud ) ); -#/ - self.revive_hud.alpha = 1; -} - -revive_hud_show_n_fade( time ) -{ - revive_hud_show(); - self.revive_hud fadeovertime( time ); - self.revive_hud.alpha = 0; -} - -drawcylinder( pos, rad, height ) -{ -/# - currad = rad; - curheight = height; - r = 0; - while ( r < 20 ) - { - theta = ( r / 20 ) * 360; - theta2 = ( ( r + 1 ) / 20 ) * 360; - line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, 0 ) ); - line( pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, curheight ) ); - line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ) ); - r++; -#/ - } -} - -get_lives_remaining() -{ -/# - assert( level.laststandgetupallowed, "Lives only exist in the Laststand type GETUP." ); -#/ - if ( level.laststandgetupallowed && isDefined( self.laststand_info ) && isDefined( self.laststand_info.type_getup_lives ) ) - { - return max( 0, self.laststand_info.type_getup_lives ); - } - return 0; -} - -update_lives_remaining( increment ) -{ -/# - assert( level.laststandgetupallowed, "Lives only exist in the Laststand type GETUP." ); -#/ -/# - assert( isDefined( increment ), "Must specify increment true or false" ); -#/ - if ( isDefined( increment ) ) - { - } - else - { - } - increment = 0; - if ( increment ) - { - } - else - { - } - self.laststand_info.type_getup_lives = max( 0, self.laststand_info.type_getup_lives - 1, self.laststand_info.type_getup_lives + 1 ); - self notify( "laststand_lives_updated" ); -} - -player_getup_setup() -{ -/# - println( "ZM >> player_getup_setup called" ); -#/ - self.laststand_info = spawnstruct(); - self.laststand_info.type_getup_lives = level.const_laststand_getup_count_start; -} - -laststand_getup() -{ - self endon( "player_revived" ); - self endon( "disconnect" ); -/# - println( "ZM >> laststand_getup called" ); -#/ - self update_lives_remaining( 0 ); - setclientsysstate( "lsm", "1", self ); - self.laststand_info.getup_bar_value = level.const_laststand_getup_bar_start; - self thread laststand_getup_hud(); - self thread laststand_getup_damage_watcher(); - while ( self.laststand_info.getup_bar_value < 1 ) - { - self.laststand_info.getup_bar_value += level.const_laststand_getup_bar_regen; - wait 0,05; - } - self auto_revive( self ); - setclientsysstate( "lsm", "0", self ); -} - -laststand_getup_damage_watcher() -{ - self endon( "player_revived" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "damage" ); - self.laststand_info.getup_bar_value -= level.const_laststand_getup_bar_damage; - if ( self.laststand_info.getup_bar_value < 0 ) - { - self.laststand_info.getup_bar_value = 0; - } - } -} - -laststand_getup_hud() -{ - self endon( "player_revived" ); - self endon( "disconnect" ); - hudelem = newclienthudelem( self ); - hudelem.alignx = "left"; - hudelem.aligny = "middle"; - hudelem.horzalign = "left"; - hudelem.vertalign = "middle"; - hudelem.x = 5; - hudelem.y = 170; - hudelem.font = "big"; - hudelem.fontscale = 1,5; - hudelem.foreground = 1; - hudelem.hidewheninmenu = 1; - hudelem.hidewhendead = 1; - hudelem.sort = 2; - hudelem.label = &"SO_WAR_LASTSTAND_GETUP_BAR"; - self thread laststand_getup_hud_destroy( hudelem ); - while ( 1 ) - { - hudelem setvalue( self.laststand_info.getup_bar_value ); - wait 0,05; - } -} - -laststand_getup_hud_destroy( hudelem ) -{ - self waittill_either( "player_revived", "disconnect" ); - hudelem destroy(); -} - -check_for_sacrifice() -{ - self delay_notify( "sacrifice_denied", 1 ); - self endon( "sacrifice_denied" ); - self waittill( "player_downed" ); - self maps/mp/zombies/_zm_stats::increment_client_stat( "sacrifices" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "sacrifices" ); -} - -check_for_failed_revive( playerbeingrevived ) -{ - self endon( "disconnect" ); - playerbeingrevived endon( "disconnect" ); - playerbeingrevived endon( "player_suicide" ); - self notify( "checking_for_failed_revive" ); - self endon( "checking_for_failed_revive" ); - playerbeingrevived endon( "player_revived" ); - playerbeingrevived waittill( "bled_out" ); - self maps/mp/zombies/_zm_stats::increment_client_stat( "failed_revives" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "failed_revives" ); -} - -add_weighted_down() -{ - if ( !level.curr_gametype_affects_rank ) - { - return; - } - weighted_down = 1000; - if ( level.round_number > 0 ) - { - weighted_down = int( 1000 / ceil( level.round_number / 5 ) ); - } - self addplayerstat( "weighted_downs", weighted_down ); -} - -cleanup_laststand_on_disconnect() -{ - self endon( "player_revived" ); - self endon( "player_suicide" ); - self endon( "bled_out" ); - trig = self.revivetrigger; - self waittill( "disconnect" ); - if ( isDefined( trig ) ) - { - trig delete(); - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_magicbox.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_magicbox.gsc deleted file mode 100644 index fa3676b..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_magicbox.gsc +++ /dev/null @@ -1,1484 +0,0 @@ -#include maps/mp/zombies/_zm_stats; -#include maps/mp/_demo; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_audio_announcer; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( isDefined( level.using_locked_magicbox ) && level.using_locked_magicbox ) - { - maps/mp/zombies/_zm_magicbox_lock::init(); - } - if ( is_classic() ) - { - level.chests = getstructarray( "treasure_chest_use", "targetname" ); - treasure_chest_init( "start_chest" ); - } - if ( level.createfx_enabled ) - { - return; - } - registerclientfield( "zbarrier", "magicbox_glow", 1000, 1, "int" ); - level thread magicbox_host_migration(); -} - -treasure_chest_init( start_chest_name ) -{ - flag_init( "moving_chest_enabled" ); - flag_init( "moving_chest_now" ); - flag_init( "chest_has_been_used" ); - level.chest_moves = 0; - level.chest_level = 0; - if ( level.chests.size == 0 ) - { - return; - } - i = 0; - while ( i < level.chests.size ) - { - level.chests[ i ].box_hacks = []; - level.chests[ i ].orig_origin = level.chests[ i ].origin; - level.chests[ i ] get_chest_pieces(); - if ( isDefined( level.chests[ i ].zombie_cost ) ) - { - level.chests[ i ].old_cost = level.chests[ i ].zombie_cost; - i++; - continue; - } - else - { - level.chests[ i ].old_cost = 950; - } - i++; - } - if ( !level.enable_magic ) - { - _a84 = level.chests; - _k84 = getFirstArrayKey( _a84 ); - while ( isDefined( _k84 ) ) - { - chest = _a84[ _k84 ]; - chest hide_chest(); - _k84 = getNextArrayKey( _a84, _k84 ); - } - return; - } - level.chest_accessed = 0; - if ( level.chests.size > 1 ) - { - flag_set( "moving_chest_enabled" ); - level.chests = array_randomize( level.chests ); - } - else - { - level.chest_index = 0; - level.chests[ 0 ].no_fly_away = 1; - } - init_starting_chest_location( start_chest_name ); - array_thread( level.chests, ::treasure_chest_think ); -} - -init_starting_chest_location( start_chest_name ) -{ - level.chest_index = 0; - start_chest_found = 0; - if ( level.chests.size == 1 ) - { - start_chest_found = 1; - if ( isDefined( level.chests[ level.chest_index ].zbarrier ) ) - { - level.chests[ level.chest_index ].zbarrier set_magic_box_zbarrier_state( "initial" ); - } - } - else - { - i = 0; - while ( i < level.chests.size ) - { - if ( isDefined( level.random_pandora_box_start ) && level.random_pandora_box_start == 1 ) - { - if ( start_chest_found || isDefined( level.chests[ i ].start_exclude ) && level.chests[ i ].start_exclude == 1 ) - { - level.chests[ i ] hide_chest(); - } - else - { - level.chest_index = i; - level.chests[ level.chest_index ].hidden = 0; - if ( isDefined( level.chests[ level.chest_index ].zbarrier ) ) - { - level.chests[ level.chest_index ].zbarrier set_magic_box_zbarrier_state( "initial" ); - } - start_chest_found = 1; - } - i++; - continue; - } - else - { - if ( !start_chest_found || !isDefined( level.chests[ i ].script_noteworthy ) && !issubstr( level.chests[ i ].script_noteworthy, start_chest_name ) ) - { - level.chests[ i ] hide_chest(); - i++; - continue; - } - else - { - level.chest_index = i; - level.chests[ level.chest_index ].hidden = 0; - if ( isDefined( level.chests[ level.chest_index ].zbarrier ) ) - { - level.chests[ level.chest_index ].zbarrier set_magic_box_zbarrier_state( "initial" ); - } - start_chest_found = 1; - } - } - i++; - } - } - if ( !isDefined( level.pandora_show_func ) ) - { - level.pandora_show_func = ::default_pandora_show_func; - } - level.chests[ level.chest_index ] thread [[ level.pandora_show_func ]](); -} - -set_treasure_chest_cost( cost ) -{ - level.zombie_treasure_chest_cost = cost; -} - -get_chest_pieces() -{ - self.chest_box = getent( self.script_noteworthy + "_zbarrier", "script_noteworthy" ); - self.chest_rubble = []; - rubble = getentarray( self.script_noteworthy + "_rubble", "script_noteworthy" ); - i = 0; - while ( i < rubble.size ) - { - if ( distancesquared( self.origin, rubble[ i ].origin ) < 10000 ) - { - self.chest_rubble[ self.chest_rubble.size ] = rubble[ i ]; - } - i++; - } - self.zbarrier = getent( self.script_noteworthy + "_zbarrier", "script_noteworthy" ); - if ( isDefined( self.zbarrier ) ) - { - self.zbarrier zbarrierpieceuseboxriselogic( 3 ); - self.zbarrier zbarrierpieceuseboxriselogic( 4 ); - } - self.unitrigger_stub = spawnstruct(); - self.unitrigger_stub.origin = self.origin + ( anglesToRight( self.angles ) * -22,5 ); - self.unitrigger_stub.angles = self.angles; - self.unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - self.unitrigger_stub.script_width = 104; - self.unitrigger_stub.script_height = 50; - self.unitrigger_stub.script_length = 45; - self.unitrigger_stub.trigger_target = self; - unitrigger_force_per_player_triggers( self.unitrigger_stub, 1 ); - self.unitrigger_stub.prompt_and_visibility_func = ::piecetrigger_update_prompt; - self.zbarrier.owner = self; -} - -piecetrigger_update_prompt( player ) -{ - can_use = self piecestub_update_prompt( player ); - if ( isDefined( self.hint_string ) ) - { - self sethintstring( self.hint_string ); - } - return can_use; -} - -piecestub_update_prompt( player ) -{ - self setcursorhint( "HINT_NOICON" ); - if ( !self trigger_visible_to_player( player ) ) - { - return 0; - } - if ( isDefined( self.stub.trigger_target.grab_weapon_hint ) && self.stub.trigger_target.grab_weapon_hint ) - { - self.hint_string = &"ZOMBIE_TRADE_WEAPONS"; - } - else - { - if ( isDefined( level.using_locked_magicbox ) && level.using_locked_magicbox && isDefined( self.stub.trigger_target.is_locked ) && self.stub.trigger_target.is_locked ) - { - self.hint_string = get_hint_string( self, "locked_magic_box_cost" ); - } - else - { - if ( isDefined( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) && level.zombie_vars[ "zombie_powerup_fire_sale_on" ] && self [[ level._zombiemode_check_firesale_loc_valid_func ]]() ) - { - self.hint_string = get_hint_string( self, "powerup_fire_sale_cost" ); - } - else - { - self.hint_string = get_hint_string( self, "default_treasure_chest_" + self.stub.trigger_target.zombie_cost ); - } - } - } - return 1; -} - -trigger_visible_to_player( player ) -{ - self setinvisibletoplayer( player ); - visible = 1; - if ( isDefined( self.stub.trigger_target.chest_user ) && !isDefined( self.stub.trigger_target.box_rerespun ) ) - { - if ( player != self.stub.trigger_target.chest_user || is_placeable_mine( self.stub.trigger_target.chest_user getcurrentweapon() ) && self.stub.trigger_target.chest_user hacker_active() ) - { - visible = 0; - } - } - else - { - if ( !player can_buy_weapon() ) - { - visible = 0; - } - } - if ( !visible ) - { - return 0; - } - self setvisibletoplayer( player ); - return 1; -} - -magicbox_unitrigger_think() -{ - self endon( "kill_trigger" ); - while ( 1 ) - { - self waittill( "trigger", player ); - self.stub.trigger_target notify( "trigger" ); - } -} - -play_crazi_sound() -{ - self playlocalsound( level.zmb_laugh_alias ); -} - -show_chest() -{ - self.zbarrier set_magic_box_zbarrier_state( "arriving" ); - self.zbarrier waittill( "arrived" ); - self thread [[ level.pandora_show_func ]](); - thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think ); - self.zbarrier playsound( "zmb_box_poof_land" ); - self.zbarrier playsound( "zmb_couch_slam" ); - self.hidden = 0; - if ( isDefined( self.box_hacks[ "summon_box" ] ) ) - { - self [[ self.box_hacks[ "summon_box" ] ]]( 0 ); - } -} - -hide_chest( doboxleave ) -{ - if ( isDefined( self.unitrigger_stub ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); - } - if ( isDefined( self.pandora_light ) ) - { - self.pandora_light delete(); - } - self.hidden = 1; - if ( isDefined( self.box_hacks ) && isDefined( self.box_hacks[ "summon_box" ] ) ) - { - self [[ self.box_hacks[ "summon_box" ] ]]( 1 ); - } - if ( isDefined( self.zbarrier ) ) - { - if ( isDefined( doboxleave ) && doboxleave ) - { - self.zbarrier playsound( "zmb_box_move" ); - playsoundatposition( "zmb_whoosh", self.zbarrier.origin ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "boxmove" ); - self.zbarrier thread magic_box_zbarrier_leave(); - self.zbarrier waittill( "left" ); - playfx( level._effect[ "poltergeist" ], self.zbarrier.origin, anglesToUp( self.angles ), anglesToForward( self.angles ) ); - playsoundatposition( "zmb_box_poof", self.zbarrier.origin ); - return; - } - else - { - self.zbarrier thread set_magic_box_zbarrier_state( "away" ); - } - } -} - -magic_box_zbarrier_leave() -{ - self set_magic_box_zbarrier_state( "leaving" ); - self waittill( "left" ); - self set_magic_box_zbarrier_state( "away" ); -} - -default_pandora_fx_func() -{ - self endon( "death" ); - self.pandora_light = spawn( "script_model", self.zbarrier.origin ); - self.pandora_light.angles = self.zbarrier.angles + vectorScale( ( 0, 1, 0 ), 90 ); - self.pandora_light setmodel( "tag_origin" ); - if ( isDefined( level._box_initialized ) && !level._box_initialized ) - { - flag_wait( "start_zombie_round_logic" ); - level._box_initialized = 1; - } - wait 1; - if ( isDefined( self ) && isDefined( self.pandora_light ) ) - { - playfxontag( level._effect[ "lght_marker" ], self.pandora_light, "tag_origin" ); - } -} - -default_pandora_show_func( anchor, anchortarget, pieces ) -{ - if ( !isDefined( self.pandora_light ) ) - { - if ( !isDefined( level.pandora_fx_func ) ) - { - level.pandora_fx_func = ::default_pandora_fx_func; - } - self thread [[ level.pandora_fx_func ]](); - } - playsoundatposition( "zmb_box_poof", self.origin ); - playfx( level._effect[ "lght_marker_flare" ], self.pandora_light.origin ); -} - -unregister_unitrigger_on_kill_think() -{ - self waittill( "kill_chest_think" ); - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); -} - -treasure_chest_think() -{ - self endon( "kill_chest_think" ); - user = undefined; - user_cost = undefined; - self.box_rerespun = undefined; - self.weapon_out = undefined; - self thread unregister_unitrigger_on_kill_think(); - for ( ;; ) - { - while ( 1 ) - { - if ( !isDefined( self.forced_user ) ) - { - self waittill( "trigger", user ); - while ( user == level ) - { - continue; - } - } - else user = self.forced_user; - while ( user in_revive_trigger() ) - { - wait 0,1; - } - while ( user.is_drinking > 0 ) - { - wait 0,1; - } - while ( isDefined( self.disabled ) && self.disabled ) - { - wait 0,1; - } - while ( user getcurrentweapon() == "none" ) - { - wait 0,1; - } - if ( isDefined( level.using_locked_magicbox ) && level.using_locked_magicbox && isDefined( self.is_locked ) && self.is_locked && user.score >= level.locked_magic_box_cost ) - { - user maps/mp/zombies/_zm_score::minus_to_player_score( level.locked_magic_box_cost ); - self.zbarrier set_magic_box_zbarrier_state( "unlocking" ); - self.unitrigger_stub run_visibility_function_for_all_triggers(); - wait 0,1; - } - } - else if ( isDefined( self.auto_open ) && is_player_valid( user ) ) - { - if ( !isDefined( self.no_charge ) ) - { - user maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost ); - user_cost = self.zombie_cost; - } - else - { - user_cost = 0; - } - self.chest_user = user; - break; - } - else if ( is_player_valid( user ) && user.score >= self.zombie_cost ) - { - user maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost ); - user_cost = self.zombie_cost; - self.chest_user = user; - break; - } - else while ( user.score < self.zombie_cost ) - { - user maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_box" ); - } - wait 0,05; - } - flag_set( "chest_has_been_used" ); - maps/mp/_demo::bookmark( "zm_player_use_magicbox", getTime(), user ); - user maps/mp/zombies/_zm_stats::increment_client_stat( "use_magicbox" ); - user maps/mp/zombies/_zm_stats::increment_player_stat( "use_magicbox" ); - self thread watch_for_emp_close(); - if ( isDefined( level.using_locked_magicbox ) && level.using_locked_magicbox ) - { - self thread maps/mp/zombies/_zm_magicbox_lock::watch_for_lock(); - } - self._box_open = 1; - self._box_opened_by_fire_sale = 0; - if ( isDefined( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) && level.zombie_vars[ "zombie_powerup_fire_sale_on" ] && !isDefined( self.auto_open ) && self [[ level._zombiemode_check_firesale_loc_valid_func ]]() ) - { - self._box_opened_by_fire_sale = 1; - } - if ( isDefined( self.chest_lid ) ) - { - self.chest_lid thread treasure_chest_lid_open(); - } - if ( isDefined( self.zbarrier ) ) - { - play_sound_at_pos( "open_chest", self.origin ); - play_sound_at_pos( "music_chest", self.origin ); - self.zbarrier set_magic_box_zbarrier_state( "open" ); - } - self.timedout = 0; - self.weapon_out = 1; - self.zbarrier thread treasure_chest_weapon_spawn( self, user ); - self.zbarrier thread treasure_chest_glowfx(); - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); - self.zbarrier waittill_any( "randomization_done", "box_hacked_respin" ); - if ( flag( "moving_chest_now" ) && !self._box_opened_by_fire_sale && isDefined( user_cost ) ) - { - user maps/mp/zombies/_zm_score::add_to_player_score( user_cost, 0 ); - } - if ( flag( "moving_chest_now" ) && !level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) - { - self thread treasure_chest_move( self.chest_user ); - } - else - { - self.grab_weapon_hint = 1; - self.chest_user = user; - thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think ); - if ( isDefined( self.zbarrier ) && !is_true( self.zbarrier.closed_by_emp ) ) - { - self thread treasure_chest_timeout(); - } - while ( isDefined( self.closed_by_emp ) && !self.closed_by_emp ) - { - self waittill( "trigger", grabber ); - self.weapon_out = undefined; - if ( isDefined( level.magic_box_grab_by_anyone ) && level.magic_box_grab_by_anyone ) - { - if ( isplayer( grabber ) ) - { - user = grabber; - } - } - while ( isDefined( grabber.is_drinking ) && grabber.is_drinking > 0 ) - { - wait 0,1; - } - while ( grabber == user && user getcurrentweapon() == "none" ) - { - wait 0,1; - } - if ( grabber != level && isDefined( self.box_rerespun ) && self.box_rerespun ) - { - user = grabber; - } - if ( grabber == user || grabber == level ) - { - self.box_rerespun = undefined; - current_weapon = "none"; - if ( is_player_valid( user ) ) - { - current_weapon = user getcurrentweapon(); - } - if ( grabber == user && is_player_valid( user ) && user.is_drinking > 0 && !is_placeable_mine( current_weapon ) && !is_equipment( current_weapon ) && level.revive_tool != current_weapon ) - { - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", user.name, user.score, level.round_number, self.zombie_cost, self.zbarrier.weapon_string, self.origin, "magic_accept" ); - self notify( "user_grabbed_weapon" ); - user thread treasure_chest_give_weapon( self.zbarrier.weapon_string ); - maps/mp/_demo::bookmark( "zm_player_grabbed_magicbox", getTime(), user ); - user maps/mp/zombies/_zm_stats::increment_client_stat( "grabbed_from_magicbox" ); - user maps/mp/zombies/_zm_stats::increment_player_stat( "grabbed_from_magicbox" ); - } - else if ( grabber == level ) - { - unacquire_weapon_toggle( self.zbarrier.weapon_string ); - self.timedout = 1; - if ( is_player_valid( user ) ) - { - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %S", user.name, user.score, level.round_number, self.zombie_cost, self.zbarrier.weapon_string, self.origin, "magic_reject" ); - } - } - } - else - { - wait 0,05; - } - } - self.grab_weapon_hint = 0; - self.zbarrier notify( "weapon_grabbed" ); - if ( isDefined( self._box_opened_by_fire_sale ) && !self._box_opened_by_fire_sale ) - { - level.chest_accessed += 1; - } - if ( level.chest_moves > 0 && isDefined( level.pulls_since_last_ray_gun ) ) - { - level.pulls_since_last_ray_gun += 1; - } - if ( isDefined( level.pulls_since_last_tesla_gun ) ) - { - level.pulls_since_last_tesla_gun += 1; - } - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub ); - if ( isDefined( self.chest_lid ) ) - { - self.chest_lid thread treasure_chest_lid_close( self.timedout ); - } - if ( isDefined( self.zbarrier ) ) - { - self.zbarrier set_magic_box_zbarrier_state( "close" ); - play_sound_at_pos( "close_chest", self.origin ); - self.zbarrier waittill( "closed" ); - wait 1; - } - else - { - wait 3; - } - if ( isDefined( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) && level.zombie_vars[ "zombie_powerup_fire_sale_on" ] || self [[ level._zombiemode_check_firesale_loc_valid_func ]]() && self == level.chests[ level.chest_index ] ) - { - thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think ); - } - } - self._box_open = 0; - self._box_opened_by_fire_sale = 0; - self.chest_user = undefined; - self notify( "chest_accessed" ); - self thread treasure_chest_think(); -} - -watch_for_emp_close() -{ - self endon( "chest_accessed" ); - self.closed_by_emp = 0; - if ( isDefined( self.zbarrier ) ) - { - self.zbarrier.closed_by_emp = 0; - } - while ( 1 ) - { - level waittill( "emp_detonate", origin, radius ); - if ( distancesquared( origin, self.origin ) < ( radius * radius ) ) - { - break; - } - else - { - } - } - if ( flag( "moving_chest_now" ) ) - { - return; - } - self.closed_by_emp = 1; - if ( isDefined( self.zbarrier ) ) - { - self.zbarrier.closed_by_emp = 1; - self.zbarrier notify( "box_hacked_respin" ); - if ( isDefined( self.zbarrier.weapon_model ) ) - { - self.zbarrier.weapon_model notify( "kill_weapon_movement" ); - } - if ( isDefined( self.zbarrier.weapon_model_dw ) ) - { - self.zbarrier.weapon_model_dw notify( "kill_weapon_movement" ); - } - } - wait 0,1; - self notify( "trigger" ); -} - -can_buy_weapon() -{ - if ( isDefined( self.is_drinking ) && self.is_drinking > 0 ) - { - return 0; - } - if ( self hacker_active() ) - { - return 0; - } - current_weapon = self getcurrentweapon(); - if ( is_placeable_mine( current_weapon ) || is_equipment_that_blocks_purchase( current_weapon ) ) - { - return 0; - } - if ( self in_revive_trigger() ) - { - return 0; - } - if ( current_weapon == "none" ) - { - return 0; - } - return 1; -} - -default_box_move_logic() -{ - index = -1; - i = 0; - while ( i < level.chests.size ) - { - if ( issubstr( level.chests[ i ].script_noteworthy, "move" + ( level.chest_moves + 1 ) ) && i != level.chest_index ) - { - index = i; - break; - } - else - { - i++; - } - } - if ( index != -1 ) - { - level.chest_index = index; - } - else - { - level.chest_index++; - } - if ( level.chest_index >= level.chests.size ) - { - temp_chest_name = level.chests[ level.chest_index - 1 ].script_noteworthy; - level.chest_index = 0; - level.chests = array_randomize( level.chests ); - if ( temp_chest_name == level.chests[ level.chest_index ].script_noteworthy ) - { - level.chest_index++; - } - } -} - -treasure_chest_move( player_vox ) -{ - level waittill( "weapon_fly_away_start" ); - players = get_players(); - array_thread( players, ::play_crazi_sound ); - if ( isDefined( player_vox ) ) - { - player_vox delay_thread( randomintrange( 2, 7 ), ::maps/mp/zombies/_zm_audio::create_and_play_dialog, "general", "box_move" ); - } - level waittill( "weapon_fly_away_end" ); - if ( isDefined( self.zbarrier ) ) - { - self hide_chest( 1 ); - } - wait 0,1; - post_selection_wait_duration = 7; - if ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] == 1 && self [[ level._zombiemode_check_firesale_loc_valid_func ]]() ) - { - current_sale_time = level.zombie_vars[ "zombie_powerup_fire_sale_time" ]; - wait_network_frame(); - self thread fire_sale_fix(); - level.zombie_vars[ "zombie_powerup_fire_sale_time" ] = current_sale_time; - while ( level.zombie_vars[ "zombie_powerup_fire_sale_time" ] > 0 ) - { - wait 0,1; - } - } - else post_selection_wait_duration += 5; - level.verify_chest = 0; - if ( isDefined( level._zombiemode_custom_box_move_logic ) ) - { - [[ level._zombiemode_custom_box_move_logic ]](); - } - else - { - default_box_move_logic(); - } - if ( isDefined( level.chests[ level.chest_index ].box_hacks[ "summon_box" ] ) ) - { - level.chests[ level.chest_index ] [[ level.chests[ level.chest_index ].box_hacks[ "summon_box" ] ]]( 0 ); - } - wait post_selection_wait_duration; - playfx( level._effect[ "poltergeist" ], level.chests[ level.chest_index ].zbarrier.origin ); - level.chests[ level.chest_index ] show_chest(); - flag_clear( "moving_chest_now" ); - self.zbarrier.chest_moving = 0; -} - -fire_sale_fix() -{ - if ( !isDefined( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) ) - { - return; - } - if ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) - { - self.old_cost = 950; - self thread show_chest(); - self.zombie_cost = 10; - self set_hint_string( self, "powerup_fire_sale_cost" ); - wait_network_frame(); - level waittill( "fire_sale_off" ); - while ( isDefined( self._box_open ) && self._box_open ) - { - wait 0,1; - } - self hide_chest( 1 ); - self.zombie_cost = self.old_cost; - } -} - -check_for_desirable_chest_location() -{ - if ( !isDefined( level.desirable_chest_location ) ) - { - return level.chest_index; - } - if ( level.chests[ level.chest_index ].script_noteworthy == level.desirable_chest_location ) - { - level.desirable_chest_location = undefined; - return level.chest_index; - } - i = 0; - while ( i < level.chests.size ) - { - if ( level.chests[ i ].script_noteworthy == level.desirable_chest_location ) - { - level.desirable_chest_location = undefined; - return i; - } - i++; - } -/# - iprintln( level.desirable_chest_location + " is an invalid box location!" ); -#/ - level.desirable_chest_location = undefined; - return level.chest_index; -} - -rotateroll_box() -{ - angles = 40; - angles2 = 0; - while ( isDefined( self ) ) - { - self rotateroll( angles + angles2, 0,5 ); - wait 0,7; - angles2 = 40; - self rotateroll( angles * -2, 0,5 ); - wait 0,7; - } -} - -verify_chest_is_open() -{ - i = 0; - while ( i < level.open_chest_location.size ) - { - if ( isDefined( level.open_chest_location[ i ] ) ) - { - if ( level.open_chest_location[ i ] == level.chests[ level.chest_index ].script_noteworthy ) - { - level.verify_chest = 1; - return; - } - } - i++; - } - level.verify_chest = 0; -} - -treasure_chest_timeout() -{ - self endon( "user_grabbed_weapon" ); - self.zbarrier endon( "box_hacked_respin" ); - self.zbarrier endon( "box_hacked_rerespin" ); - wait 12; - self notify( "trigger" ); -} - -treasure_chest_lid_open() -{ - openroll = 105; - opentime = 0,5; - self rotateroll( 105, opentime, opentime * 0,5 ); - play_sound_at_pos( "open_chest", self.origin ); - play_sound_at_pos( "music_chest", self.origin ); -} - -treasure_chest_lid_close( timedout ) -{ - closeroll = -105; - closetime = 0,5; - self rotateroll( closeroll, closetime, closetime * 0,5 ); - play_sound_at_pos( "close_chest", self.origin ); - self notify( "lid_closed" ); -} - -treasure_chest_chooserandomweapon( player ) -{ - keys = getarraykeys( level.zombie_weapons ); - return keys[ randomint( keys.size ) ]; -} - -treasure_chest_canplayerreceiveweapon( player, weapon, pap_triggers ) -{ - if ( !get_is_in_box( weapon ) ) - { - return 0; - } - if ( player has_weapon_or_upgrade( weapon ) ) - { - return 0; - } - if ( !maps/mp/zombies/_zm_weapons::limited_weapon_below_quota( weapon, player, pap_triggers ) ) - { - return 0; - } - return 1; -} - -treasure_chest_chooseweightedrandomweapon( player ) -{ - keys = array_randomize( getarraykeys( level.zombie_weapons ) ); - pap_triggers = getentarray( "specialty_weapupgrade", "script_noteworthy" ); - i = 0; - while ( i < keys.size ) - { - if ( treasure_chest_canplayerreceiveweapon( player, keys[ i ], pap_triggers ) ) - { - return keys[ i ]; - } - i++; - } - return keys[ 0 ]; -} - -weapon_is_dual_wield( name ) -{ - switch( name ) - { - case "cz75dw_upgraded_zm": - case "cz75dw_zm": - case "fivesevendw_upgraded_zm": - case "fivesevendw_zm": - case "hs10_upgraded_zm": - case "m1911_upgraded_zm": - case "microwavegundw_upgraded_zm": - case "microwavegundw_zm": - case "pm63_upgraded_zm": - return 1; - default: - return 0; - } -} - -weapon_show_hint_choke() -{ - level._weapon_show_hint_choke = 0; - while ( 1 ) - { - wait 0,05; - level._weapon_show_hint_choke = 0; - } -} - -decide_hide_show_hint( endon_notify, second_endon_notify ) -{ - self endon( "death" ); - if ( isDefined( endon_notify ) ) - { - self endon( endon_notify ); - } - if ( isDefined( second_endon_notify ) ) - { - self endon( second_endon_notify ); - } - if ( !isDefined( level._weapon_show_hint_choke ) ) - { - level thread weapon_show_hint_choke(); - } - use_choke = 0; - if ( isDefined( level._use_choke_weapon_hints ) && level._use_choke_weapon_hints == 1 ) - { - use_choke = 1; - } - while ( 1 ) - { - last_update = getTime(); - if ( isDefined( self.chest_user ) && !isDefined( self.box_rerespun ) ) - { - if ( is_placeable_mine( self.chest_user getcurrentweapon() ) || self.chest_user hacker_active() ) - { - self setinvisibletoplayer( self.chest_user ); - } - else - { - self setvisibletoplayer( self.chest_user ); - } - } - else - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] can_buy_weapon() ) - { - self setinvisibletoplayer( players[ i ], 0 ); - i++; - continue; - } - else - { - self setinvisibletoplayer( players[ i ], 1 ); - } - i++; - } - } - if ( use_choke ) - { - while ( level._weapon_show_hint_choke > 4 && getTime() < ( last_update + 150 ) ) - { - wait 0,05; - } - } - else wait 0,1; - level._weapon_show_hint_choke++; - } -} - -get_left_hand_weapon_model_name( name ) -{ - switch( name ) - { - case "microwavegundw_zm": - return getweaponmodel( "microwavegunlh_zm" ); - case "microwavegundw_upgraded_zm": - return getweaponmodel( "microwavegunlh_upgraded_zm" ); - default: - return getweaponmodel( name ); - } -} - -clean_up_hacked_box() -{ - self waittill( "box_hacked_respin" ); - self endon( "box_spin_done" ); - if ( isDefined( self.weapon_model ) ) - { - self.weapon_model delete(); - self.weapon_model = undefined; - } - if ( isDefined( self.weapon_model_dw ) ) - { - self.weapon_model_dw delete(); - self.weapon_model_dw = undefined; - } - self hidezbarrierpiece( 3 ); - self hidezbarrierpiece( 4 ); - self setzbarrierpiecestate( 3, "closed" ); - self setzbarrierpiecestate( 4, "closed" ); -} - -treasure_chest_weapon_spawn( chest, player, respin ) -{ - if ( isDefined( level.using_locked_magicbox ) && level.using_locked_magicbox ) - { - self.owner endon( "box_locked" ); - self thread maps/mp/zombies/_zm_magicbox_lock::clean_up_locked_box(); - } - self endon( "box_hacked_respin" ); - self thread clean_up_hacked_box(); -/# - assert( isDefined( player ) ); -#/ - self.weapon_string = undefined; - modelname = undefined; - rand = undefined; - number_cycles = 40; - if ( isDefined( chest.zbarrier ) ) - { - chest.zbarrier thread magic_box_do_weapon_rise(); - } - i = 0; - while ( i < number_cycles ) - { - if ( i < 20 ) - { - wait 0,05; - i++; - continue; - } - else if ( i < 30 ) - { - wait 0,1; - i++; - continue; - } - else if ( i < 35 ) - { - wait 0,2; - i++; - continue; - } - else - { - if ( i < 38 ) - { - wait 0,3; - } - } - i++; - } - rand = treasure_chest_chooseweightedrandomweapon( player ); -/# - weapon = getDvar( "scr_force_weapon" ); - if ( weapon != "" && isDefined( level.zombie_weapons[ weapon ] ) ) - { - rand = weapon; - setdvar( "scr_force_weapon", "" ); -#/ - } - self.weapon_string = rand; - wait 0,1; - v_float = anglesToUp( self.angles ) * 40; - self.model_dw = undefined; - self.weapon_model = spawn_weapon_model( rand, undefined, self.origin + v_float, self.angles + vectorScale( ( 0, 1, 0 ), 180 ) ); - if ( weapon_is_dual_wield( rand ) ) - { - self.weapon_model_dw = spawn_weapon_model( rand, get_left_hand_weapon_model_name( rand ), self.weapon_model.origin - vectorScale( ( 0, 1, 0 ), 3 ), self.weapon_model.angles ); - } - if ( getDvar( "magic_chest_movable" ) == "1" && isDefined( chest._box_opened_by_fire_sale ) && !chest._box_opened_by_fire_sale && isDefined( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) && level.zombie_vars[ "zombie_powerup_fire_sale_on" ] && !( self [[ level._zombiemode_check_firesale_loc_valid_func ]]() ) ) - { - random = randomint( 100 ); - if ( !isDefined( level.chest_min_move_usage ) ) - { - level.chest_min_move_usage = 4; - } - if ( level.chest_accessed < level.chest_min_move_usage ) - { - chance_of_joker = -1; - } - else chance_of_joker = level.chest_accessed + 20; - if ( level.chest_moves == 0 && level.chest_accessed >= 8 ) - { - chance_of_joker = 100; - } - if ( level.chest_accessed >= 4 && level.chest_accessed < 8 ) - { - if ( random < 15 ) - { - chance_of_joker = 100; - } - else - { - chance_of_joker = -1; - } - } - if ( level.chest_moves > 0 ) - { - if ( level.chest_accessed >= 8 && level.chest_accessed < 13 ) - { - if ( random < 30 ) - { - chance_of_joker = 100; - } - else - { - chance_of_joker = -1; - } - } - if ( level.chest_accessed >= 13 ) - { - if ( random < 50 ) - { - chance_of_joker = 100; - } - else - { - chance_of_joker = -1; - } - } - } - if ( isDefined( chest.no_fly_away ) ) - { - chance_of_joker = -1; - } - if ( isDefined( level._zombiemode_chest_joker_chance_override_func ) ) - { - chance_of_joker = [[ level._zombiemode_chest_joker_chance_override_func ]]( chance_of_joker ); - } - if ( chance_of_joker > random ) - { - self.weapon_string = undefined; - self.weapon_model setmodel( "zombie_teddybear" ); - self.weapon_model.angles = self.angles + vectorScale( ( 0, 1, 0 ), 90 ); - if ( isDefined( self.weapon_model_dw ) ) - { - self.weapon_model_dw delete(); - self.weapon_model_dw = undefined; - } - self.chest_moving = 1; - flag_set( "moving_chest_now" ); - level.chest_accessed = 0; - level.chest_moves++; - } - } - self notify( "randomization_done" ); - if ( flag( "moving_chest_now" ) && level.zombie_vars[ "zombie_powerup_fire_sale_on" ] && !( self [[ level._zombiemode_check_firesale_loc_valid_func ]]() ) ) - { - wait 0,5; - level notify( "weapon_fly_away_start" ); - wait 2; - if ( isDefined( self.weapon_model ) ) - { - v_fly_away = self.origin + ( anglesToUp( self.angles ) * 500 ); - self.weapon_model moveto( v_fly_away, 4, 3 ); - } - if ( isDefined( self.weapon_model_dw ) ) - { - v_fly_away = self.origin + ( anglesToUp( self.angles ) * 500 ); - self.weapon_model_dw moveto( v_fly_away, 4, 3 ); - } - self.weapon_model waittill( "movedone" ); - self.weapon_model delete(); - if ( isDefined( self.weapon_model_dw ) ) - { - self.weapon_model_dw delete(); - self.weapon_model_dw = undefined; - } - self notify( "box_moving" ); - level notify( "weapon_fly_away_end" ); - } - else - { - acquire_weapon_toggle( rand, player ); - if ( rand == "tesla_gun_zm" || rand == "ray_gun_zm" ) - { - if ( rand == "ray_gun_zm" ) - { - level.pulls_since_last_ray_gun = 0; - } - if ( rand == "tesla_gun_zm" ) - { - level.pulls_since_last_tesla_gun = 0; - level.player_seen_tesla_gun = 1; - } - } - if ( !isDefined( respin ) ) - { - if ( isDefined( chest.box_hacks[ "respin" ] ) ) - { - self [[ chest.box_hacks[ "respin" ] ]]( chest, player ); - } - } - else - { - if ( isDefined( chest.box_hacks[ "respin_respin" ] ) ) - { - self [[ chest.box_hacks[ "respin_respin" ] ]]( chest, player ); - } - } - self.weapon_model thread timer_til_despawn( v_float ); - if ( isDefined( self.weapon_model_dw ) ) - { - self.weapon_model_dw thread timer_til_despawn( v_float ); - } - self waittill( "weapon_grabbed" ); - if ( !chest.timedout ) - { - if ( isDefined( self.weapon_model ) ) - { - self.weapon_model delete(); - } - if ( isDefined( self.weapon_model_dw ) ) - { - self.weapon_model_dw delete(); - } - } - } - self.weapon_string = undefined; - self notify( "box_spin_done" ); -} - -chest_get_min_usage() -{ - min_usage = 4; - return min_usage; -} - -chest_get_max_usage() -{ - max_usage = 6; - players = get_players(); - if ( level.chest_moves == 0 ) - { - if ( players.size == 1 ) - { - max_usage = 3; - } - else if ( players.size == 2 ) - { - max_usage = 4; - } - else if ( players.size == 3 ) - { - max_usage = 5; - } - else - { - max_usage = 6; - } - } - else if ( players.size == 1 ) - { - max_usage = 4; - } - else if ( players.size == 2 ) - { - max_usage = 4; - } - else if ( players.size == 3 ) - { - max_usage = 5; - } - else - { - max_usage = 7; - } - return max_usage; -} - -timer_til_despawn( v_float ) -{ - self endon( "kill_weapon_movement" ); - putbacktime = 12; - self moveto( self.origin - ( v_float * 0,85 ), putbacktime, putbacktime * 0,5 ); - wait putbacktime; - if ( isDefined( self ) ) - { - self delete(); - } -} - -treasure_chest_glowfx() -{ - self setclientfield( "magicbox_glow", 1 ); - self waittill_any( "weapon_grabbed", "box_moving" ); - self setclientfield( "magicbox_glow", 0 ); -} - -treasure_chest_give_weapon( weapon_string ) -{ - self.last_box_weapon = getTime(); - self maps/mp/zombies/_zm_weapons::weapon_give( weapon_string, 0, 1 ); -} - -magic_box_teddy_twitches() -{ - self endon( "zbarrier_state_change" ); - self setzbarrierpiecestate( 0, "closed" ); - while ( 1 ) - { - wait randomfloatrange( 180, 1800 ); - self setzbarrierpiecestate( 0, "opening" ); - wait randomfloatrange( 180, 1800 ); - self setzbarrierpiecestate( 0, "closing" ); - } -} - -magic_box_initial() -{ - self setzbarrierpiecestate( 1, "open" ); -} - -magic_box_arrives() -{ - self setzbarrierpiecestate( 1, "opening" ); - while ( self getzbarrierpiecestate( 1 ) == "opening" ) - { - wait 0,05; - } - self notify( "arrived" ); -} - -magic_box_leaves() -{ - self setzbarrierpiecestate( 1, "closing" ); - while ( self getzbarrierpiecestate( 1 ) == "closing" ) - { - wait 0,1; - } - self notify( "left" ); -} - -magic_box_opens() -{ - self setzbarrierpiecestate( 2, "opening" ); - while ( self getzbarrierpiecestate( 2 ) == "opening" ) - { - wait 0,1; - } - self notify( "opened" ); -} - -magic_box_closes() -{ - self setzbarrierpiecestate( 2, "closing" ); - while ( self getzbarrierpiecestate( 2 ) == "closing" ) - { - wait 0,1; - } - self notify( "closed" ); -} - -magic_box_do_weapon_rise() -{ - self endon( "box_hacked_respin" ); - self setzbarrierpiecestate( 3, "closed" ); - self setzbarrierpiecestate( 4, "closed" ); - wait_network_frame(); - self zbarrierpieceuseboxriselogic( 3 ); - self zbarrierpieceuseboxriselogic( 4 ); - self showzbarrierpiece( 3 ); - self showzbarrierpiece( 4 ); - self setzbarrierpiecestate( 3, "opening" ); - self setzbarrierpiecestate( 4, "opening" ); - while ( self getzbarrierpiecestate( 3 ) != "open" ) - { - wait 0,5; - } - self hidezbarrierpiece( 3 ); - self hidezbarrierpiece( 4 ); -} - -magic_box_do_teddy_flyaway() -{ - self showzbarrierpiece( 3 ); - self setzbarrierpiecestate( 3, "closing" ); -} - -is_chest_active() -{ - curr_state = self.zbarrier get_magic_box_zbarrier_state(); - if ( curr_state != "initial" || curr_state == "open" && curr_state == "close" ) - { - return 1; - } - return 0; -} - -get_magic_box_zbarrier_state() -{ - return self.state; -} - -set_magic_box_zbarrier_state( state ) -{ - i = 0; - while ( i < self getnumzbarrierpieces() ) - { - self hidezbarrierpiece( i ); - i++; - } - self notify( "zbarrier_state_change" ); - switch( state ) - { - case "away": - self showzbarrierpiece( 0 ); - self thread magic_box_teddy_twitches(); - self.state = "away"; - break; - case "arriving": - self showzbarrierpiece( 1 ); - self thread magic_box_arrives(); - self.state = "arriving"; - break; - case "initial": - self showzbarrierpiece( 1 ); - self thread magic_box_initial(); - thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.owner.unitrigger_stub, ::magicbox_unitrigger_think ); - self.state = "initial"; - break; - case "open": - self showzbarrierpiece( 2 ); - self thread magic_box_opens(); - self.state = "open"; - break; - case "close": - self showzbarrierpiece( 2 ); - self thread magic_box_closes(); - self.state = "close"; - break; - case "leaving": - self showzbarrierpiece( 1 ); - self thread magic_box_leaves(); - self.state = "leaving"; - break; - default: - if ( isDefined( level.custom_magicbox_state_handler ) ) - { - self [[ level.custom_magicbox_state_handler ]]( state ); - } - break; - } -} - -magicbox_host_migration() -{ - level endon( "end_game" ); - level notify( "mb_hostmigration" ); - level endon( "mb_hostmigration" ); - while ( 1 ) - { - level waittill( "host_migration_end" ); - while ( !isDefined( level.chests ) ) - { - continue; - } - _a1983 = level.chests; - _k1983 = getFirstArrayKey( _a1983 ); - while ( isDefined( _k1983 ) ) - { - chest = _a1983[ _k1983 ]; - if ( !is_true( chest.hidden ) ) - { - if ( isDefined( chest ) && isDefined( chest.pandora_light ) ) - { - playfxontag( level._effect[ "lght_marker" ], chest.pandora_light, "tag_origin" ); - } - } - wait_network_frame(); - _k1983 = getNextArrayKey( _a1983, _k1983 ); - } - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_magicbox_lock.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_magicbox_lock.gsc deleted file mode 100644 index 0a610a2..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_magicbox_lock.gsc +++ /dev/null @@ -1,84 +0,0 @@ -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_magicbox_lock; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - precachemodel( "p6_anim_strongbox_lock" ); - level.locked_magic_box_cost = 2000; - level.custom_magicbox_state_handler = ::set_locked_magicbox_state; - add_zombie_hint( "locked_magic_box_cost", &"ZOMBIE_LOCKED_BOX_COST" ); -} - -watch_for_lock() -{ - self endon( "user_grabbed_weapon" ); - self endon( "chest_accessed" ); - self waittill( "box_locked" ); - self notify( "kill_chest_think" ); - self.grab_weapon_hint = 0; - wait 0,1; - self thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think ); - self.unitrigger_stub run_visibility_function_for_all_triggers(); - self thread treasure_chest_think(); -} - -clean_up_locked_box() -{ - self endon( "box_spin_done" ); - self.owner waittill( "box_locked" ); - if ( isDefined( self.weapon_model ) ) - { - self.weapon_model delete(); - self.weapon_model = undefined; - } - if ( isDefined( self.weapon_model_dw ) ) - { - self.weapon_model_dw delete(); - self.weapon_model_dw = undefined; - } - self hidezbarrierpiece( 3 ); - self hidezbarrierpiece( 4 ); - self setzbarrierpiecestate( 3, "closed" ); - self setzbarrierpiecestate( 4, "closed" ); -} - -magic_box_locks() -{ - self.owner.is_locked = 1; - self.owner notify( "box_locked" ); - if ( !isDefined( self.angles ) ) - { - self.angles = ( 0, 0, 1 ); - } - forward = anglesToRight( self.angles ); - self.lock_model = spawn( "script_model", self.origin + ( -15 * forward ) + vectorScale( ( 0, 0, 1 ), 8 ) ); - self.lock_model.angles = self.angles; - self.lock_model setmodel( "p6_anim_strongbox_lock" ); -} - -magic_box_unlocks() -{ - self.owner.is_locked = 0; - self.lock_model delete(); -} - -set_locked_magicbox_state( state ) -{ - switch( state ) - { - case "locking": - self showzbarrierpiece( 1 ); - self thread magic_box_locks(); - self.state = "locking"; - break; - case "unlocking": - self showzbarrierpiece( 1 ); - self thread magic_box_unlocks(); - self.state = "close"; - break; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_melee_weapon.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_melee_weapon.gsc deleted file mode 100644 index 9bf2d2b..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_melee_weapon.gsc +++ /dev/null @@ -1,503 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn ) -{ - precacheitem( weapon_name ); - precacheitem( flourish_weapon_name ); - add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon ); - melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" ); - i = 0; - while ( i < melee_weapon_triggers.size ) - { - knife_model = getent( melee_weapon_triggers[ i ].target, "targetname" ); - if ( isDefined( knife_model ) ) - { - knife_model hide(); - } - melee_weapon_triggers[ i ] thread melee_weapon_think( weapon_name, cost, has_weapon, give_weapon, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); - melee_weapon_triggers[ i ] sethintstring( hint_string, cost ); - melee_weapon_triggers[ i ] setcursorhint( "HINT_NOICON" ); - melee_weapon_triggers[ i ] usetriggerrequirelookat(); - i++; - } - melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" ); - i = 0; - while ( i < melee_weapon_structs.size ) - { - if ( isDefined( melee_weapon_structs[ i ].trigger_stub ) ) - { - melee_weapon_structs[ i ].trigger_stub.hint_string = hint_string; - melee_weapon_structs[ i ].trigger_stub.cost = cost; - melee_weapon_structs[ i ].trigger_stub.weapon_name = weapon_name; - melee_weapon_structs[ i ].trigger_stub.has_weapon = has_weapon; - melee_weapon_structs[ i ].trigger_stub.give_weapon = give_weapon; - melee_weapon_structs[ i ].trigger_stub.vo_dialog_id = vo_dialog_id; - melee_weapon_structs[ i ].trigger_stub.flourish_weapon_name = flourish_weapon_name; - melee_weapon_structs[ i ].trigger_stub.ballistic_weapon_name = ballistic_weapon_name; - melee_weapon_structs[ i ].trigger_stub.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; - melee_weapon_structs[ i ].trigger_stub.trigger_func = ::melee_weapon_think; - melee_weapon_structs[ i ].trigger_stub.flourish_fn = flourish_fn; - } - i++; - } - register_melee_weapon_for_level( weapon_name ); - if ( !isDefined( level.ballistic_weapon_name ) ) - { - level.ballistic_weapon_name = []; - } - level.ballistic_weapon_name[ weapon_name ] = ballistic_weapon_name; - if ( !isDefined( level.ballistic_upgraded_weapon_name ) ) - { - level.ballistic_upgraded_weapon_name = []; - } - level.ballistic_upgraded_weapon_name[ weapon_name ] = ballistic_upgraded_weapon_name; -} - -add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn ) -{ - melee_weapon = spawnstruct(); - melee_weapon.weapon_name = weapon_name; - melee_weapon.flourish_weapon_name = flourish_weapon_name; - melee_weapon.ballistic_weapon_name = ballistic_weapon_name; - melee_weapon.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; - melee_weapon.cost = cost; - melee_weapon.wallbuy_targetname = wallbuy_targetname; - melee_weapon.hint_string = hint_string; - melee_weapon.vo_dialog_id = vo_dialog_id; - melee_weapon.has_weapon = has_weapon; - melee_weapon.give_weapon = give_weapon; - melee_weapon.take_weapon = take_weapon; - melee_weapon.flourish_fn = flourish_fn; - if ( !isDefined( level._melee_weapons ) ) - { - level._melee_weapons = []; - } - level._melee_weapons[ level._melee_weapons.size ] = melee_weapon; -} - -spectator_respawn_all() -{ - i = 0; - while ( i < level._melee_weapons.size ) - { - self [[ level._melee_weapons[ i ].take_weapon ]](); - i++; - } - i = 0; - while ( i < level._melee_weapons.size ) - { - self spectator_respawn( level._melee_weapons[ i ].wallbuy_targetname, level._melee_weapons[ i ].take_weapon, level._melee_weapons[ i ].has_weapon ); - i++; - } -} - -spectator_respawn( wallbuy_targetname, take_weapon, has_weapon ) -{ - melee_triggers = getentarray( wallbuy_targetname, "targetname" ); - players = get_players(); - i = 0; - while ( i < melee_triggers.size ) - { - melee_triggers[ i ] setvisibletoall(); - while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - j = 0; - while ( j < players.size ) - { - if ( players[ j ] [[ has_weapon ]]() ) - { - melee_triggers[ i ] setinvisibletoplayer( players[ j ] ); - } - j++; - } - } - i++; - } -} - -trigger_hide_all() -{ - i = 0; - while ( i < level._melee_weapons.size ) - { - self trigger_hide( level._melee_weapons[ i ].wallbuy_targetname ); - i++; - } -} - -trigger_hide( wallbuy_targetname ) -{ - melee_triggers = getentarray( wallbuy_targetname, "targetname" ); - i = 0; - while ( i < melee_triggers.size ) - { - melee_triggers[ i ] setinvisibletoplayer( self ); - i++; - } -} - -has_any_ballistic_knife() -{ - if ( self hasweapon( "knife_ballistic_zm" ) ) - { - return 1; - } - if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) - { - return 1; - } - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( self hasweapon( level._melee_weapons[ i ].ballistic_weapon_name ) ) - { - return 1; - } - if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) ) - { - return 1; - } - i++; - } - return 0; -} - -has_upgraded_ballistic_knife() -{ - if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) - { - return 1; - } - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) ) - { - return 1; - } - i++; - } - return 0; -} - -give_ballistic_knife( weapon_string, upgraded ) -{ - current_melee_weapon = self get_player_melee_weapon(); - if ( isDefined( current_melee_weapon ) ) - { - if ( upgraded && isDefined( level.ballistic_upgraded_weapon_name ) && isDefined( level.ballistic_upgraded_weapon_name[ current_melee_weapon ] ) ) - { - weapon_string = level.ballistic_upgraded_weapon_name[ current_melee_weapon ]; - } - if ( !upgraded && isDefined( level.ballistic_weapon_name ) && isDefined( level.ballistic_weapon_name[ current_melee_weapon ] ) ) - { - weapon_string = level.ballistic_weapon_name[ current_melee_weapon ]; - } - } - return weapon_string; -} - -change_melee_weapon( weapon_name, current_weapon ) -{ - current_melee_weapon = self get_player_melee_weapon(); - if ( isDefined( current_melee_weapon ) ) - { - self takeweapon( current_melee_weapon ); - unacquire_weapon_toggle( current_melee_weapon ); - } - self set_player_melee_weapon( weapon_name ); - had_ballistic = 0; - had_ballistic_upgraded = 0; - ballistic_was_primary = 0; - primaryweapons = self getweaponslistprimaries(); - i = 0; - while ( i < primaryweapons.size ) - { - primary_weapon = primaryweapons[ i ]; - if ( issubstr( primary_weapon, "knife_ballistic_" ) ) - { - had_ballistic = 1; - if ( primary_weapon == current_weapon ) - { - ballistic_was_primary = 1; - } - self notify( "zmb_lost_knife" ); - self takeweapon( primary_weapon ); - unacquire_weapon_toggle( primary_weapon ); - if ( issubstr( primary_weapon, "upgraded" ) ) - { - had_ballistic_upgraded = 1; - } - } - i++; - } - if ( had_ballistic ) - { - if ( had_ballistic_upgraded ) - { - new_ballistic = level.ballistic_upgraded_weapon_name[ weapon_name ]; - if ( ballistic_was_primary ) - { - current_weapon = new_ballistic; - } - self giveweapon( new_ballistic, 0, self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) ); - } - else - { - new_ballistic = level.ballistic_weapon_name[ weapon_name ]; - if ( ballistic_was_primary ) - { - current_weapon = new_ballistic; - } - self giveweapon( new_ballistic, 0 ); - } - } - return current_weapon; -} - -melee_weapon_think( weapon_name, cost, has_weapon, give_weapon, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) -{ - self.first_time_triggered = 0; - while ( isDefined( self.stub ) ) - { - self endon( "kill_trigger" ); - if ( isDefined( self.stub.first_time_triggered ) ) - { - self.first_time_triggered = self.stub.first_time_triggered; - } - weapon_name = self.stub.weapon_name; - cost = self.stub.cost; - has_weapon = self.stub.has_weapon; - give_weapon = self.stub.give_weapon; - flourish_fn = self.stub.flourish_fn; - vo_dialog_id = self.stub.vo_dialog_id; - flourish_weapon_name = self.stub.flourish_weapon_name; - ballistic_weapon_name = self.stub.ballistic_weapon_name; - ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name; - players = getplayers(); - while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - i = 0; - while ( i < players.size ) - { - if ( players[ i ] [[ has_weapon ]]() ) - { - self setinvisibletoplayer( players[ i ] ); - } - i++; - } - } - } - for ( ;; ) - { - self waittill( "trigger", player ); - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - continue; - } - else if ( player in_revive_trigger() ) - { - wait 0,1; - continue; - } - else if ( player isthrowinggrenade() ) - { - wait 0,1; - continue; - } - else if ( player.is_drinking > 0 ) - { - wait 0,1; - continue; - } - else if ( player hasweapon( weapon_name ) || player has_powerup_weapon() ) - { - wait 0,1; - continue; - } - else - { - if ( player isswitchingweapons() ) - { - wait 0,1; - break; - } - else current_weapon = player getcurrentweapon(); - if ( !is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) && player has_powerup_weapon() ) - { - wait 0,1; - break; - } - else - { - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( player.intermission ) && player.intermission ) - { - wait 0,1; - break; - } - else - { - player_has_weapon = player [[ has_weapon ]](); - if ( !player_has_weapon ) - { - if ( player.score >= cost ) - { - if ( self.first_time_triggered == 0 ) - { - model = getent( self.target, "targetname" ); - if ( isDefined( model ) ) - { - model thread melee_weapon_show( player ); - } - else - { - if ( isDefined( self.clientfieldname ) ) - { - level setclientfield( self.clientfieldname, 1 ); - } - } - self.first_time_triggered = 1; - if ( isDefined( self.stub ) ) - { - self.stub.first_time_triggered = 1; - } - } - player maps/mp/zombies/_zm_score::minus_to_player_score( cost ); - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" ); - player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, give_weapon, flourish_fn, self ); - } - else - { - play_sound_on_ent( "no_purchase" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 ); - } - break; - } - else - { - if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - self setinvisibletoplayer( player ); - } - } - } - } - } - } -} - -melee_weapon_show( player ) -{ - player_angles = vectorToAngle( player.origin - self.origin ); - player_yaw = player_angles[ 1 ]; - weapon_yaw = self.angles[ 1 ]; - yaw_diff = angleClamp180( player_yaw - weapon_yaw ); - if ( yaw_diff > 0 ) - { - yaw = weapon_yaw - 90; - } - else - { - yaw = weapon_yaw + 90; - } - self.og_origin = self.origin; - self.origin += anglesToForward( ( 0, yaw, 0 ) ) * 8; - wait 0,05; - self show(); - play_sound_at_pos( "weapon_show", self.origin, self ); - time = 1; - self moveto( self.og_origin, time ); -} - -give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, give_weapon, flourish_fn, trigger ) -{ - if ( isDefined( flourish_fn ) ) - { - self thread [[ flourish_fn ]](); - } - gun = self do_melee_weapon_flourish_begin( flourish_weapon_name ); - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id ); - self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); - self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission ) - { - return; - } - self [[ give_weapon ]](); - if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - trigger setinvisibletoplayer( self ); - self trigger_hide_all(); - } -} - -do_melee_weapon_flourish_begin( flourish_weapon_name ) -{ - self increment_is_drinking(); - self disable_player_move_states( 1 ); - gun = self getcurrentweapon(); - weapon = flourish_weapon_name; - self giveweapon( weapon ); - self switchtoweapon( weapon ); - return gun; -} - -do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) -{ -/# - assert( !is_zombie_perk_bottle( gun ) ); -#/ -/# - assert( gun != level.revive_tool ); -#/ - self enable_player_move_states(); - weapon = flourish_weapon_name; - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission ) - { - self takeweapon( weapon ); - self.lastactiveweapon = "none"; - return; - } - self takeweapon( weapon ); - self giveweapon( weapon_name ); - gun = change_melee_weapon( weapon_name, gun ); - if ( self hasweapon( "knife_zm" ) ) - { - self takeweapon( "knife_zm" ); - } - if ( self is_multiple_drinking() ) - { - self decrement_is_drinking(); - return; - } - else if ( gun == "knife_zm" ) - { - self switchtoweapon( weapon_name ); - self decrement_is_drinking(); - return; - } - else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) - { - self switchtoweapon( gun ); - } - else - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - } - self waittill( "weapon_change_complete" ); - if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.intermission ) && !self.intermission ) - { - self decrement_is_drinking(); - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_mgturret.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_mgturret.gsc deleted file mode 100644 index d3aee82..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_mgturret.gsc +++ /dev/null @@ -1,339 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/_utility; - -main() -{ - if ( getDvar( #"7C9A91DF" ) == "" ) - { - setdvar( "mgTurret", "off" ); - } - level.magic_distance = 24; - turretinfos = getentarray( "turretInfo", "targetname" ); - index = 0; - while ( index < turretinfos.size ) - { - turretinfos[ index ] delete(); - index++; - } -} - -set_difficulty( difficulty ) -{ - init_turret_difficulty_settings(); - turrets = getentarray( "misc_turret", "classname" ); - index = 0; - while ( index < turrets.size ) - { - if ( isDefined( turrets[ index ].script_skilloverride ) ) - { - switch( turrets[ index ].script_skilloverride ) - { - case "easy": - difficulty = "easy"; - break; - break; - case "medium": - difficulty = "medium"; - break; - break; - case "hard": - difficulty = "hard"; - break; - break; - case "fu": - difficulty = "fu"; - break; - break; - default: - } - } - turret_set_difficulty( turrets[ index ], difficulty ); - index++; - } - } -} - -init_turret_difficulty_settings() -{ - level.mgturretsettings[ "easy" ][ "convergenceTime" ] = 2,5; - level.mgturretsettings[ "easy" ][ "suppressionTime" ] = 3; - level.mgturretsettings[ "easy" ][ "accuracy" ] = 0,38; - level.mgturretsettings[ "easy" ][ "aiSpread" ] = 2; - level.mgturretsettings[ "easy" ][ "playerSpread" ] = 0,5; - level.mgturretsettings[ "medium" ][ "convergenceTime" ] = 1,5; - level.mgturretsettings[ "medium" ][ "suppressionTime" ] = 3; - level.mgturretsettings[ "medium" ][ "accuracy" ] = 0,38; - level.mgturretsettings[ "medium" ][ "aiSpread" ] = 2; - level.mgturretsettings[ "medium" ][ "playerSpread" ] = 0,5; - level.mgturretsettings[ "hard" ][ "convergenceTime" ] = 0,8; - level.mgturretsettings[ "hard" ][ "suppressionTime" ] = 3; - level.mgturretsettings[ "hard" ][ "accuracy" ] = 0,38; - level.mgturretsettings[ "hard" ][ "aiSpread" ] = 2; - level.mgturretsettings[ "hard" ][ "playerSpread" ] = 0,5; - level.mgturretsettings[ "fu" ][ "convergenceTime" ] = 0,4; - level.mgturretsettings[ "fu" ][ "suppressionTime" ] = 3; - level.mgturretsettings[ "fu" ][ "accuracy" ] = 0,38; - level.mgturretsettings[ "fu" ][ "aiSpread" ] = 2; - level.mgturretsettings[ "fu" ][ "playerSpread" ] = 0,5; -} - -turret_set_difficulty( turret, difficulty ) -{ - turret.convergencetime = level.mgturretsettings[ difficulty ][ "convergenceTime" ]; - turret.suppressiontime = level.mgturretsettings[ difficulty ][ "suppressionTime" ]; - turret.accuracy = level.mgturretsettings[ difficulty ][ "accuracy" ]; - turret.aispread = level.mgturretsettings[ difficulty ][ "aiSpread" ]; - turret.playerspread = level.mgturretsettings[ difficulty ][ "playerSpread" ]; -} - -turret_suppression_fire( targets ) -{ - self endon( "death" ); - self endon( "stop_suppression_fire" ); - if ( !isDefined( self.suppresionfire ) ) - { - self.suppresionfire = 1; - } - for ( ;; ) - { - while ( self.suppresionfire ) - { - self settargetentity( targets[ randomint( targets.size ) ] ); - wait ( 2 + randomfloat( 2 ) ); - } - self cleartargetentity(); - while ( !self.suppresionfire ) - { - wait 1; - } - } -} - -burst_fire_settings( setting ) -{ - if ( setting == "delay" ) - { - return 0,2; - } - else - { - if ( setting == "delay_range" ) - { - return 0,5; - } - else - { - if ( setting == "burst" ) - { - return 0,5; - } - else - { - if ( setting == "burst_range" ) - { - return 4; - } - } - } - } -} - -burst_fire( turret, manual_target ) -{ - turret endon( "death" ); - turret endon( "stopfiring" ); - self endon( "stop_using_built_in_burst_fire" ); - if ( isDefined( turret.script_delay_min ) ) - { - turret_delay = turret.script_delay_min; - } - else - { - turret_delay = burst_fire_settings( "delay" ); - } - if ( isDefined( turret.script_delay_max ) ) - { - turret_delay_range = turret.script_delay_max - turret_delay; - } - else - { - turret_delay_range = burst_fire_settings( "delay_range" ); - } - if ( isDefined( turret.script_burst_min ) ) - { - turret_burst = turret.script_burst_min; - } - else - { - turret_burst = burst_fire_settings( "burst" ); - } - if ( isDefined( turret.script_burst_max ) ) - { - turret_burst_range = turret.script_burst_max - turret_burst; - } - else - { - turret_burst_range = burst_fire_settings( "burst_range" ); - } - while ( 1 ) - { - turret startfiring(); - if ( isDefined( manual_target ) ) - { - turret thread random_spread( manual_target ); - } - turret do_shoot(); - wait ( turret_burst + randomfloat( turret_burst_range ) ); - turret stopshootturret(); - turret stopfiring(); - wait ( turret_delay + randomfloat( turret_delay_range ) ); - } -} - -burst_fire_unmanned() -{ - self notify( "stop_burst_fire_unmanned" ); - self endon( "stop_burst_fire_unmanned" ); - self endon( "death" ); - self endon( "remote_start" ); - level endon( "game_ended" ); - if ( isDefined( self.controlled ) && self.controlled ) - { - return; - } - if ( isDefined( self.script_delay_min ) ) - { - turret_delay = self.script_delay_min; - } - else - { - turret_delay = burst_fire_settings( "delay" ); - } - if ( isDefined( self.script_delay_max ) ) - { - turret_delay_range = self.script_delay_max - turret_delay; - } - else - { - turret_delay_range = burst_fire_settings( "delay_range" ); - } - if ( isDefined( self.script_burst_min ) ) - { - turret_burst = self.script_burst_min; - } - else - { - turret_burst = burst_fire_settings( "burst" ); - } - if ( isDefined( self.script_burst_max ) ) - { - turret_burst_range = self.script_burst_max - turret_burst; - } - else - { - turret_burst_range = burst_fire_settings( "burst_range" ); - } - pauseuntiltime = getTime(); - turretstate = "start"; - self.script_shooting = 0; - for ( ;; ) - { - if ( isDefined( self.manual_targets ) ) - { - self cleartargetentity(); - self settargetentity( self.manual_targets[ randomint( self.manual_targets.size ) ] ); - } - duration = ( pauseuntiltime - getTime() ) * 0,001; - if ( self isfiringturret() && duration <= 0 ) - { - if ( turretstate != "fire" ) - { - turretstate = "fire"; - self playsound( "mpl_turret_alert" ); - self thread do_shoot(); - self.script_shooting = 1; - } - duration = turret_burst + randomfloat( turret_burst_range ); - self thread turret_timer( duration ); - self waittill( "turretstatechange" ); - self.script_shooting = 0; - duration = turret_delay + randomfloat( turret_delay_range ); - pauseuntiltime = getTime() + int( duration * 1000 ); - continue; - } - else - { - if ( turretstate != "aim" ) - { - turretstate = "aim"; - } - self thread turret_timer( duration ); - self waittill( "turretstatechange" ); - } - } -} - -avoid_synchronization( time ) -{ - if ( !isDefined( level._zm_mgturret_firing ) ) - { - level._zm_mgturret_firing = 0; - } - level._zm_mgturret_firing++; - wait time; - level._zm_mgturret_firing--; - -} - -do_shoot() -{ - self endon( "death" ); - self endon( "turretstatechange" ); - for ( ;; ) - { - while ( is_true( level._zm_mgturret_firing ) ) - { - wait 0,1; - } - thread avoid_synchronization( 0,1 ); - self shootturret(); - wait 0,112; - } -} - -turret_timer( duration ) -{ - if ( duration <= 0 ) - { - return; - } - self endon( "turretstatechange" ); - wait duration; - if ( isDefined( self ) ) - { - self notify( "turretstatechange" ); - } -} - -random_spread( ent ) -{ - self endon( "death" ); - self notify( "stop random_spread" ); - self endon( "stop random_spread" ); - self endon( "stopfiring" ); - self settargetentity( ent ); - self.manual_target = ent; - while ( 1 ) - { - if ( isplayer( ent ) ) - { - ent.origin = self.manual_target getorigin(); - } - else - { - ent.origin = self.manual_target.origin; - } - ent.origin += ( 20 - randomfloat( 40 ), 20 - randomfloat( 40 ), 20 - randomfloat( 60 ) ); - wait 0,2; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_net.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_net.gsc deleted file mode 100644 index 2ace21e..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_net.gsc +++ /dev/null @@ -1,100 +0,0 @@ -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -network_choke_init( id, max ) -{ - if ( !isDefined( level.zombie_network_choke_ids_max ) ) - { - level.zombie_network_choke_ids_max = []; - level.zombie_network_choke_ids_count = []; - } - level.zombie_network_choke_ids_max[ id ] = max; - level.zombie_network_choke_ids_count[ id ] = 0; - level thread network_choke_thread( id ); -} - -network_choke_thread( id ) -{ - while ( 1 ) - { - wait_network_frame(); - wait_network_frame(); - level.zombie_network_choke_ids_count[ id ] = 0; - } -} - -network_choke_safe( id ) -{ - return level.zombie_network_choke_ids_count[ id ] < level.zombie_network_choke_ids_max[ id ]; -} - -network_choke_action( id, choke_action, arg1, arg2, arg3 ) -{ -/# - assert( isDefined( level.zombie_network_choke_ids_max[ id ] ), "Network Choke: " + id + " undefined" ); -#/ - while ( !network_choke_safe( id ) ) - { - wait 0,05; - } - level.zombie_network_choke_ids_count[ id ]++; - if ( !isDefined( arg1 ) ) - { - return [[ choke_action ]](); - } - if ( !isDefined( arg2 ) ) - { - return [[ choke_action ]]( arg1 ); - } - if ( !isDefined( arg3 ) ) - { - return [[ choke_action ]]( arg1, arg2 ); - } - return [[ choke_action ]]( arg1, arg2, arg3 ); -} - -network_entity_valid( entity ) -{ - if ( !isDefined( entity ) ) - { - return 0; - } - return 1; -} - -network_safe_init( id, max ) -{ - if ( !isDefined( level.zombie_network_choke_ids_max ) || !isDefined( level.zombie_network_choke_ids_max[ id ] ) ) - { - network_choke_init( id, max ); - } -/# - assert( max == level.zombie_network_choke_ids_max[ id ] ); -#/ -} - -_network_safe_spawn( classname, origin ) -{ - return spawn( classname, origin ); -} - -network_safe_spawn( id, max, classname, origin ) -{ - network_safe_init( id, max ); - return network_choke_action( id, ::_network_safe_spawn, classname, origin ); -} - -_network_safe_play_fx_on_tag( fx, entity, tag ) -{ - if ( network_entity_valid( entity ) ) - { - playfxontag( fx, entity, tag ); - } -} - -network_safe_play_fx_on_tag( id, max, fx, entity, tag ) -{ - network_safe_init( id, max ); - network_choke_action( id, ::_network_safe_play_fx_on_tag, fx, entity, tag ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_perks.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_perks.gsc deleted file mode 100644 index 991c300..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_perks.gsc +++ /dev/null @@ -1,3844 +0,0 @@ -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_vulture; -#include maps/mp/_visionset_mgr; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/_demo; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_power; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( !level.createfx_enabled ) - { - perks_register_clientfield(); - } - if ( !level.enable_magic ) - { - return; - } - perk_machine_spawn_init(); - vending_weapon_upgrade_trigger = []; - vending_triggers = getentarray( "zombie_vending", "targetname" ); - i = 0; - while ( i < vending_triggers.size ) - { - if ( isDefined( vending_triggers[ i ].script_noteworthy ) && vending_triggers[ i ].script_noteworthy == "specialty_weapupgrade" ) - { - vending_weapon_upgrade_trigger[ vending_weapon_upgrade_trigger.size ] = vending_triggers[ i ]; - arrayremovevalue( vending_triggers, vending_triggers[ i ] ); - } - i++; - } - old_packs = getentarray( "zombie_vending_upgrade", "targetname" ); - i = 0; - while ( i < old_packs.size ) - { - vending_weapon_upgrade_trigger[ vending_weapon_upgrade_trigger.size ] = old_packs[ i ]; - i++; - } - flag_init( "pack_machine_in_use" ); - if ( vending_triggers.size < 1 ) - { - return; - } - if ( vending_weapon_upgrade_trigger.size >= 1 ) - { - array_thread( vending_weapon_upgrade_trigger, ::vending_weapon_upgrade ); - } - if ( !isDefined( level.custom_vending_precaching ) ) - { - level.custom_vending_precaching = ::default_vending_precaching; - } - [[ level.custom_vending_precaching ]](); - if ( !isDefined( level.packapunch_timeout ) ) - { - level.packapunch_timeout = 15; - } - set_zombie_var( "zombie_perk_cost", 2000 ); - set_zombie_var( "zombie_perk_juggernaut_health", 160 ); - set_zombie_var( "zombie_perk_juggernaut_health_upgrade", 190 ); - array_thread( vending_triggers, ::vending_trigger_think ); - array_thread( vending_triggers, ::electric_perks_dialog ); - level thread turn_doubletap_on(); - if ( isDefined( level.zombiemode_using_marathon_perk ) && level.zombiemode_using_marathon_perk ) - { - level thread turn_marathon_on(); - } - if ( isDefined( level.zombiemode_using_divetonuke_perk ) && level.zombiemode_using_divetonuke_perk ) - { - level thread turn_divetonuke_on(); - level.zombiemode_divetonuke_perk_func = ::divetonuke_explode; - level._effect[ "divetonuke_groundhit" ] = loadfx( "maps/zombie/fx_zmb_phdflopper_exp" ); - set_zombie_var( "zombie_perk_divetonuke_radius", 300 ); - set_zombie_var( "zombie_perk_divetonuke_min_damage", 1000 ); - set_zombie_var( "zombie_perk_divetonuke_max_damage", 5000 ); - } - level thread turn_jugger_on(); - level thread turn_revive_on(); - level thread turn_sleight_on(); - if ( isDefined( level.zombiemode_using_deadshot_perk ) && level.zombiemode_using_deadshot_perk ) - { - level thread turn_deadshot_on(); - } - if ( isDefined( level.zombiemode_using_tombstone_perk ) && level.zombiemode_using_tombstone_perk ) - { - level thread turn_tombstone_on(); - } - if ( isDefined( level.zombiemode_using_additionalprimaryweapon_perk ) && level.zombiemode_using_additionalprimaryweapon_perk ) - { - level thread turn_additionalprimaryweapon_on(); - } - if ( isDefined( level.zombiemode_using_chugabud_perk ) && level.zombiemode_using_chugabud_perk ) - { - level thread turn_chugabud_on(); - } - if ( isDefined( level.zombiemode_using_electric_cherry_perk ) && level.zombiemode_using_electric_cherry_perk ) - { - level thread turn_electric_cherry_on(); - } - if ( isDefined( level.zombiemode_using_vulture_perk ) && level.zombiemode_using_vulture_perk ) - { - level thread turn_vulture_on(); - } - level thread turn_packapunch_on(); - if ( isDefined( level.quantum_bomb_register_result_func ) ) - { - [[ level.quantum_bomb_register_result_func ]]( "give_nearest_perk", ::quantum_bomb_give_nearest_perk_result, 10, ::quantum_bomb_give_nearest_perk_validation ); - } - level thread perk_hostmigration(); -} - -default_vending_precaching() -{ - if ( isDefined( level.zombiemode_using_pack_a_punch ) && level.zombiemode_using_pack_a_punch ) - { - precacheitem( "zombie_knuckle_crack" ); - precachemodel( "p6_anim_zm_buildable_pap" ); - precachemodel( "p6_anim_zm_buildable_pap_on" ); - precachestring( &"ZOMBIE_PERK_PACKAPUNCH" ); - precachestring( &"ZOMBIE_PERK_PACKAPUNCH_ATT" ); - level._effect[ "packapunch_fx" ] = loadfx( "maps/zombie/fx_zombie_packapunch" ); - } - if ( isDefined( level.zombiemode_using_additionalprimaryweapon_perk ) && level.zombiemode_using_additionalprimaryweapon_perk ) - { - precacheitem( "zombie_perk_bottle_additionalprimaryweapon" ); - precacheshader( "specialty_additionalprimaryweapon_zombies" ); - precachemodel( "zombie_vending_three_gun" ); - precachemodel( "zombie_vending_three_gun_on" ); - precachestring( &"ZOMBIE_PERK_ADDITIONALWEAPONPERK" ); - level._effect[ "additionalprimaryweapon_light" ] = loadfx( "misc/fx_zombie_cola_arsenal_on" ); - } - if ( isDefined( level.zombiemode_using_deadshot_perk ) && level.zombiemode_using_deadshot_perk ) - { - precacheitem( "zombie_perk_bottle_deadshot" ); - precacheshader( "specialty_ads_zombies" ); - precachemodel( "zombie_vending_ads" ); - precachemodel( "zombie_vending_ads_on" ); - precachestring( &"ZOMBIE_PERK_DEADSHOT" ); - level._effect[ "deadshot_light" ] = loadfx( "misc/fx_zombie_cola_dtap_on" ); - } - if ( isDefined( level.zombiemode_using_divetonuke_perk ) && level.zombiemode_using_divetonuke_perk ) - { - precacheitem( "zombie_perk_bottle_nuke" ); - precacheshader( "specialty_divetonuke_zombies" ); - precachemodel( "zombie_vending_nuke" ); - precachemodel( "zombie_vending_nuke_on" ); - precachestring( &"ZOMBIE_PERK_DIVETONUKE" ); - level._effect[ "divetonuke_light" ] = loadfx( "misc/fx_zombie_cola_dtap_on" ); - } - if ( isDefined( level.zombiemode_using_doubletap_perk ) && level.zombiemode_using_doubletap_perk ) - { - precacheitem( "zombie_perk_bottle_doubletap" ); - precacheshader( "specialty_doubletap_zombies" ); - precachemodel( "zombie_vending_doubletap2" ); - precachemodel( "zombie_vending_doubletap2_on" ); - precachestring( &"ZOMBIE_PERK_DOUBLETAP" ); - level._effect[ "doubletap_light" ] = loadfx( "misc/fx_zombie_cola_dtap_on" ); - } - if ( isDefined( level.zombiemode_using_juggernaut_perk ) && level.zombiemode_using_juggernaut_perk ) - { - precacheitem( "zombie_perk_bottle_jugg" ); - precacheshader( "specialty_juggernaut_zombies" ); - precachemodel( "zombie_vending_jugg" ); - precachemodel( "zombie_vending_jugg_on" ); - precachestring( &"ZOMBIE_PERK_JUGGERNAUT" ); - level._effect[ "jugger_light" ] = loadfx( "misc/fx_zombie_cola_jugg_on" ); - } - if ( isDefined( level.zombiemode_using_marathon_perk ) && level.zombiemode_using_marathon_perk ) - { - precacheitem( "zombie_perk_bottle_marathon" ); - precacheshader( "specialty_marathon_zombies" ); - precachemodel( "zombie_vending_marathon" ); - precachemodel( "zombie_vending_marathon_on" ); - precachestring( &"ZOMBIE_PERK_MARATHON" ); - level._effect[ "marathon_light" ] = loadfx( "maps/zombie/fx_zmb_cola_staminup_on" ); - } - if ( isDefined( level.zombiemode_using_revive_perk ) && level.zombiemode_using_revive_perk ) - { - precacheitem( "zombie_perk_bottle_revive" ); - precacheshader( "specialty_quickrevive_zombies" ); - precachemodel( "zombie_vending_revive" ); - precachemodel( "zombie_vending_revive_on" ); - precachestring( &"ZOMBIE_PERK_QUICKREVIVE" ); - level._effect[ "revive_light" ] = loadfx( "misc/fx_zombie_cola_revive_on" ); - level._effect[ "revive_light_flicker" ] = loadfx( "maps/zombie/fx_zmb_cola_revive_flicker" ); - } - if ( isDefined( level.zombiemode_using_sleightofhand_perk ) && level.zombiemode_using_sleightofhand_perk ) - { - precacheitem( "zombie_perk_bottle_sleight" ); - precacheshader( "specialty_fastreload_zombies" ); - precachemodel( "zombie_vending_sleight" ); - precachemodel( "zombie_vending_sleight_on" ); - precachestring( &"ZOMBIE_PERK_FASTRELOAD" ); - level._effect[ "sleight_light" ] = loadfx( "misc/fx_zombie_cola_on" ); - } - if ( isDefined( level.zombiemode_using_tombstone_perk ) && level.zombiemode_using_tombstone_perk ) - { - precacheitem( "zombie_perk_bottle_tombstone" ); - precacheshader( "specialty_tombstone_zombies" ); - precachemodel( "zombie_vending_tombstone" ); - precachemodel( "zombie_vending_tombstone_on" ); - precachemodel( "ch_tombstone1" ); - precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); - level._effect[ "tombstone_light" ] = loadfx( "misc/fx_zombie_cola_on" ); - } - if ( isDefined( level.zombiemode_using_chugabud_perk ) && level.zombiemode_using_chugabud_perk ) - { - precacheitem( "zombie_perk_bottle_whoswho" ); - precacheshader( "specialty_quickrevive_zombies" ); - precachemodel( "p6_zm_vending_chugabud" ); - precachemodel( "p6_zm_vending_chugabud_on" ); - precachemodel( "ch_tombstone1" ); - precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); - level._effect[ "tombstone_light" ] = loadfx( "misc/fx_zombie_cola_on" ); - } - if ( isDefined( level.zombiemode_using_electric_cherry_perk ) && level.zombiemode_using_electric_cherry_perk ) - { - precacheitem( "zombie_perk_bottle_cherry" ); - precacheshader( "specialty_fastreload_zombies" ); - precachemodel( "p6_zm_vending_electric_cherry_off" ); - precachemodel( "p6_zm_vending_electric_cherry_on" ); - precachestring( &"ZOMBIE_PERK_FASTRELOAD" ); - level._effect[ "sleight_light" ] = loadfx( "misc/fx_zombie_cola_on" ); - } - if ( isDefined( level.zombiemode_using_vulture_perk ) && level.zombiemode_using_vulture_perk ) - { - precacheitem( "zombie_perk_bottle_vulture" ); - precacheshader( "specialty_vulture_zombies" ); - precachemodel( "zombie_vending_revive" ); - precachemodel( "zombie_vending_revive_on" ); - precachestring( &"ZOMBIE_PERK_VULTURE" ); - level._effect[ "vulture_light" ] = loadfx( "misc/fx_zombie_cola_revive_on" ); - level._effect[ "vulture_light_flicker" ] = loadfx( "maps/zombie/fx_zmb_cola_revive_flicker" ); - } -} - -pap_weapon_move_in( trigger, origin_offset, angles_offset ) -{ - level endon( "Pack_A_Punch_off" ); - trigger endon( "pap_player_disconnected" ); - trigger.worldgun rotateto( self.angles + angles_offset + vectorScale( ( 0, -1, 0 ), 90 ), 0,35, 0, 0 ); - offsetdw = vectorScale( ( 0, -1, 0 ), 3 ); - if ( isDefined( trigger.worldgun.worldgundw ) ) - { - trigger.worldgun.worldgundw rotateto( self.angles + angles_offset + vectorScale( ( 0, -1, 0 ), 90 ), 0,35, 0, 0 ); - } - wait 0,5; - trigger.worldgun moveto( self.origin + origin_offset, 0,5, 0, 0 ); - if ( isDefined( trigger.worldgun.worldgundw ) ) - { - trigger.worldgun.worldgundw moveto( self.origin + origin_offset + offsetdw, 0,5, 0, 0 ); - } -} - -pap_weapon_move_out( trigger, origin_offset, interact_offset ) -{ - level endon( "Pack_A_Punch_off" ); - trigger endon( "pap_player_disconnected" ); - offsetdw = vectorScale( ( 0, -1, 0 ), 3 ); - trigger.worldgun moveto( self.origin + interact_offset, 0,5, 0, 0 ); - if ( isDefined( trigger.worldgun.worldgundw ) ) - { - trigger.worldgun.worldgundw moveto( self.origin + interact_offset + offsetdw, 0,5, 0, 0 ); - } - wait 0,5; - trigger.worldgun moveto( self.origin + origin_offset, level.packapunch_timeout, 0, 0 ); - if ( isDefined( trigger.worldgun.worldgundw ) ) - { - trigger.worldgun.worldgundw moveto( self.origin + origin_offset + offsetdw, level.packapunch_timeout, 0, 0 ); - } -} - -fx_ent_failsafe() -{ - wait 25; - self delete(); -} - -third_person_weapon_upgrade( current_weapon, upgrade_weapon, packa_rollers, perk_machine, trigger ) -{ - level endon( "Pack_A_Punch_off" ); - trigger endon( "pap_player_disconnected" ); - rel_entity = trigger.perk_machine; - origin_offset = ( 0, -1, 0 ); - angles_offset = ( 0, -1, 0 ); - origin_base = self.origin; - angles_base = self.angles; - if ( isDefined( rel_entity ) ) - { - if ( isDefined( level.pap_interaction_height ) ) - { - origin_offset = ( 0, 0, level.pap_interaction_height ); - } - else - { - origin_offset = vectorScale( ( 0, -1, 0 ), 35 ); - } - angles_offset = vectorScale( ( 0, -1, 0 ), 90 ); - origin_base = rel_entity.origin; - angles_base = rel_entity.angles; - } - else - { - rel_entity = self; - } - forward = anglesToForward( angles_base + angles_offset ); - interact_offset = origin_offset + ( forward * -25 ); - if ( !isDefined( perk_machine.fx_ent ) ) - { - perk_machine.fx_ent = spawn( "script_model", origin_base + origin_offset + ( 0, 1, -34 ) ); - perk_machine.fx_ent.angles = angles_base + angles_offset; - perk_machine.fx_ent setmodel( "tag_origin" ); - perk_machine.fx_ent linkto( perk_machine ); - } - fx = playfxontag( level._effect[ "packapunch_fx" ], perk_machine.fx_ent, "tag_origin" ); - offsetdw = vectorScale( ( 0, -1, 0 ), 3 ); - weoptions = self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( current_weapon ); - trigger.worldgun = spawn_weapon_model( current_weapon, undefined, origin_base + interact_offset, self.angles, weoptions ); - worldgundw = undefined; - if ( maps/mp/zombies/_zm_magicbox::weapon_is_dual_wield( current_weapon ) ) - { - worldgundw = spawn_weapon_model( current_weapon, maps/mp/zombies/_zm_magicbox::get_left_hand_weapon_model_name( current_weapon ), origin_base + interact_offset + offsetdw, self.angles, weoptions ); - } - trigger.worldgun.worldgundw = worldgundw; - if ( isDefined( level.custom_pap_move_in ) ) - { - perk_machine [[ level.custom_pap_move_in ]]( trigger, origin_offset, angles_offset, perk_machine ); - } - else - { - perk_machine pap_weapon_move_in( trigger, origin_offset, angles_offset ); - } - self playsound( "zmb_perks_packa_upgrade" ); - if ( isDefined( perk_machine.wait_flag ) ) - { - perk_machine.wait_flag rotateto( perk_machine.wait_flag.angles + vectorScale( ( 0, -1, 0 ), 179 ), 0,25, 0, 0 ); - } - wait 0,35; - trigger.worldgun delete(); - if ( isDefined( worldgundw ) ) - { - worldgundw delete(); - } - wait 3; - if ( isDefined( self ) ) - { - self playsound( "zmb_perks_packa_ready" ); - } - upoptions = self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( upgrade_weapon ); - trigger.current_weapon = current_weapon; - trigger.upgrade_name = upgrade_weapon; - trigger.worldgun = spawn_weapon_model( upgrade_weapon, undefined, origin_base + origin_offset, angles_base + angles_offset + vectorScale( ( 0, -1, 0 ), 90 ), upoptions ); - worldgundw = undefined; - if ( maps/mp/zombies/_zm_magicbox::weapon_is_dual_wield( upgrade_weapon ) ) - { - worldgundw = spawn_weapon_model( upgrade_weapon, maps/mp/zombies/_zm_magicbox::get_left_hand_weapon_model_name( upgrade_weapon ), origin_base + origin_offset + offsetdw, angles_base + angles_offset + vectorScale( ( 0, -1, 0 ), 90 ), upoptions ); - } - trigger.worldgun.worldgundw = worldgundw; - if ( isDefined( perk_machine.wait_flag ) ) - { - perk_machine.wait_flag rotateto( perk_machine.wait_flag.angles - vectorScale( ( 0, -1, 0 ), 179 ), 0,25, 0, 0 ); - } - if ( isDefined( level.custom_pap_move_out ) ) - { - rel_entity thread [[ level.custom_pap_move_out ]]( trigger, origin_offset, interact_offset ); - } - else - { - rel_entity thread pap_weapon_move_out( trigger, origin_offset, interact_offset ); - } - return trigger.worldgun; -} - -vending_machine_trigger_think() -{ - self endon( "death" ); - level endon( "Pack_A_Punch_off" ); - if ( !maps/mp/zombies/_zm_equipment::is_equipment_included( "equip_hacker_zm" ) ) - { - return; - } - while ( 1 ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] hacker_active() || players[ i ] getcurrentweapon() == "riotshield_zm" ) - { - self setinvisibletoplayer( players[ i ], 1 ); - i++; - continue; - } - else - { - self setinvisibletoplayer( players[ i ], 0 ); - } - i++; - } - wait 0,1; - } -} - -vending_weapon_upgrade() -{ - level endon( "Pack_A_Punch_off" ); - wait 0,01; - perk_machine = getent( self.target, "targetname" ); - self.perk_machine = perk_machine; - perk_machine_sound = getentarray( "perksacola", "targetname" ); - packa_rollers = spawn( "script_origin", self.origin ); - packa_timer = spawn( "script_origin", self.origin ); - packa_rollers linkto( self ); - packa_timer linkto( self ); - if ( isDefined( perk_machine.target ) ) - { - perk_machine.wait_flag = getent( perk_machine.target, "targetname" ); - } - pap_is_buildable = self is_buildable(); - if ( pap_is_buildable ) - { - self trigger_off(); - perk_machine hide(); - if ( isDefined( perk_machine.wait_flag ) ) - { - perk_machine.wait_flag hide(); - } - wait_for_buildable( "pap" ); - self trigger_on(); - perk_machine show(); - if ( isDefined( perk_machine.wait_flag ) ) - { - perk_machine.wait_flag show(); - } - } - self usetriggerrequirelookat(); - self sethintstring( &"ZOMBIE_NEED_POWER" ); - self setcursorhint( "HINT_NOICON" ); - power_off = !self maps/mp/zombies/_zm_power::pap_is_on(); - if ( power_off ) - { - level waittill( "Pack_A_Punch_on" ); - } - self enable_trigger(); - self thread vending_machine_trigger_think(); - self thread maps/mp/zombies/_zm_magicbox::decide_hide_show_hint( "Pack_A_Punch_off" ); - perk_machine playloopsound( "zmb_perks_packa_loop" ); - self thread shutoffpapsounds( perk_machine, packa_rollers, packa_timer ); - self thread vending_weapon_upgrade_cost(); - for ( ;; ) - { - self waittill( "trigger", player ); - index = maps/mp/zombies/_zm_weapons::get_player_index( player ); - current_weapon = player getcurrentweapon(); - if ( current_weapon == "microwavegun_zm" ) - { - current_weapon = "microwavegundw_zm"; - } - current_weapon = player maps/mp/zombies/_zm_weapons::switch_from_alt_weapon( current_weapon ); - if ( player maps/mp/zombies/_zm_magicbox::can_buy_weapon() && !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( player.intermission ) && !player.intermission || player isthrowinggrenade() && !player maps/mp/zombies/_zm_weapons::can_upgrade_weapon( current_weapon ) ) - { - wait 0,1; - continue; - } - else - { - if ( isDefined( level.pap_moving ) && level.pap_moving ) - { - break; - } - else - { - if ( player isswitchingweapons() ) - { - wait 0,1; - if ( player isswitchingweapons() ) - { - break; - } - } - else if ( !maps/mp/zombies/_zm_weapons::is_weapon_or_base_included( current_weapon ) ) - { - break; - } - else current_cost = self.cost; - player.restore_ammo = undefined; - player.restore_clip = undefined; - player.restore_stock = undefined; - player_restore_clip_size = undefined; - player.restore_max = undefined; - upgrade_as_attachment = will_upgrade_weapon_as_attachment( current_weapon ); - if ( upgrade_as_attachment ) - { - current_cost = self.attachment_cost; - player.restore_ammo = 1; - player.restore_clip = player getweaponammoclip( current_weapon ); - player.restore_clip_size = weaponclipsize( current_weapon ); - player.restore_stock = player getweaponammostock( current_weapon ); - player.restore_max = weaponmaxammo( current_weapon ); - } - if ( player.score < current_cost ) - { - self playsound( "deny" ); - if ( isDefined( level.custom_pap_deny_vo_func ) ) - { - player [[ level.custom_pap_deny_vo_func ]](); - } - else - { - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); - } - break; - } - else - { - flag_set( "pack_machine_in_use" ); - maps/mp/_demo::bookmark( "zm_player_use_packapunch", getTime(), player ); - player maps/mp/zombies/_zm_stats::increment_client_stat( "use_pap" ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "use_pap" ); - self thread destroy_weapon_in_blackout( player ); - self thread destroy_weapon_on_disconnect( player ); - player maps/mp/zombies/_zm_score::minus_to_player_score( current_cost ); - sound = "evt_bottle_dispense"; - playsoundatposition( sound, self.origin ); - self thread maps/mp/zombies/_zm_audio::play_jingle_or_stinger( "mus_perks_packa_sting" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "upgrade_wait" ); - self disable_trigger(); - if ( isDefined( upgrade_as_attachment ) && !upgrade_as_attachment ) - { - player thread do_player_general_vox( "general", "pap_wait", 10, 100 ); - } - else - { - player thread do_player_general_vox( "general", "pap_wait2", 10, 100 ); - } - player thread do_knuckle_crack(); - self.current_weapon = current_weapon; - upgrade_name = maps/mp/zombies/_zm_weapons::get_upgrade_weapon( current_weapon, upgrade_as_attachment ); - player third_person_weapon_upgrade( current_weapon, upgrade_name, packa_rollers, perk_machine, self ); - self enable_trigger(); - self sethintstring( &"ZOMBIE_GET_UPGRADED" ); - if ( isDefined( player ) ) - { - self setvisibletoplayer( player ); - self thread wait_for_player_to_take( player, current_weapon, packa_timer, upgrade_as_attachment ); - } - self thread wait_for_timeout( current_weapon, packa_timer, player ); - self waittill_any( "pap_timeout", "pap_taken", "pap_player_disconnected" ); - self.current_weapon = ""; - if ( isDefined( self.worldgun ) && isDefined( self.worldgun.worldgundw ) ) - { - self.worldgun.worldgundw delete(); - } - if ( isDefined( self.worldgun ) ) - { - self.worldgun delete(); - } - if ( isDefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) - { - self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH_ATT", self.cost ); - } - else - { - self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH", self.cost ); - } - self setvisibletoall(); - flag_clear( "pack_machine_in_use" ); - } - } - } - } -} - -shutoffpapsounds( ent1, ent2, ent3 ) -{ - while ( 1 ) - { - level waittill( "Pack_A_Punch_off" ); - level thread turnonpapsounds( ent1 ); - ent1 stoploopsound( 0,1 ); - ent2 stoploopsound( 0,1 ); - ent3 stoploopsound( 0,1 ); - } -} - -turnonpapsounds( ent ) -{ - level waittill( "Pack_A_Punch_on" ); - ent playloopsound( "zmb_perks_packa_loop" ); -} - -vending_weapon_upgrade_cost() -{ - level endon( "Pack_A_Punch_off" ); - while ( 1 ) - { - self.cost = 5000; - self.attachment_cost = 2000; - if ( isDefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) - { - self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH_ATT", self.cost ); - } - else - { - self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH", self.cost ); - } - level waittill( "powerup bonfire sale" ); - self.cost = 1000; - self.attachment_cost = 1000; - if ( isDefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) - { - self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH_ATT", self.cost ); - } - else - { - self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH", self.cost ); - } - level waittill( "bonfire_sale_off" ); - } -} - -wait_for_player_to_take( player, weapon, packa_timer, upgrade_as_attachment ) -{ - current_weapon = self.current_weapon; - upgrade_name = self.upgrade_name; -/# - assert( isDefined( current_weapon ), "wait_for_player_to_take: weapon does not exist" ); -#/ -/# - assert( isDefined( upgrade_name ), "wait_for_player_to_take: upgrade_weapon does not exist" ); -#/ - upgrade_weapon = upgrade_name; - self endon( "pap_timeout" ); - level endon( "Pack_A_Punch_off" ); - while ( 1 ) - { - packa_timer playloopsound( "zmb_perks_packa_ticktock" ); - self waittill( "trigger", trigger_player ); - if ( isDefined( level.pap_grab_by_anyone ) && level.pap_grab_by_anyone ) - { - player = trigger_player; - } - packa_timer stoploopsound( 0,05 ); - if ( trigger_player == player ) - { - player maps/mp/zombies/_zm_stats::increment_client_stat( "pap_weapon_grabbed" ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "pap_weapon_grabbed" ); - current_weapon = player getcurrentweapon(); -/# - if ( current_weapon == "none" ) - { - iprintlnbold( "WEAPON IS NONE, PACKAPUNCH RETRIEVAL DENIED" ); -#/ - } - if ( is_player_valid( player ) && player.is_drinking > 0 && !is_placeable_mine( current_weapon ) && !is_equipment( current_weapon ) && level.revive_tool != current_weapon && current_weapon != "none" && !player hacker_active() ) - { - maps/mp/_demo::bookmark( "zm_player_grabbed_packapunch", getTime(), player ); - self notify( "pap_taken" ); - player notify( "pap_taken" ); - player.pap_used = 1; - if ( isDefined( upgrade_as_attachment ) && !upgrade_as_attachment ) - { - player thread do_player_general_vox( "general", "pap_arm", 15, 100 ); - } - else - { - player thread do_player_general_vox( "general", "pap_arm2", 15, 100 ); - } - weapon_limit = 2; - if ( player hasperk( "specialty_additionalprimaryweapon" ) ) - { - weapon_limit = 3; - } - player maps/mp/zombies/_zm_weapons::take_fallback_weapon(); - primaries = player getweaponslistprimaries(); - if ( isDefined( primaries ) && primaries.size >= weapon_limit ) - { - player maps/mp/zombies/_zm_weapons::weapon_give( upgrade_weapon ); - } - else - { - player giveweapon( upgrade_weapon, 0, player maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( upgrade_weapon ) ); - player givestartammo( upgrade_weapon ); - } - player switchtoweapon( upgrade_weapon ); - if ( isDefined( player.restore_ammo ) && player.restore_ammo ) - { - new_clip = player.restore_clip + ( weaponclipsize( upgrade_weapon ) - player.restore_clip_size ); - new_stock = player.restore_stock + ( weaponmaxammo( upgrade_weapon ) - player.restore_max ); - player setweaponammostock( upgrade_weapon, new_stock ); - player setweaponammoclip( upgrade_weapon, new_clip ); - } - player.restore_ammo = undefined; - player.restore_clip = undefined; - player.restore_stock = undefined; - player.restore_max = undefined; - player.restore_clip_size = undefined; - player maps/mp/zombies/_zm_weapons::play_weapon_vo( upgrade_weapon ); - return; - } - } - wait 0,05; - } -} - -wait_for_timeout( weapon, packa_timer, player ) -{ - self endon( "pap_taken" ); - self endon( "pap_player_disconnected" ); - self thread wait_for_disconnect( player ); - wait level.packapunch_timeout; - self notify( "pap_timeout" ); - packa_timer stoploopsound( 0,05 ); - packa_timer playsound( "zmb_perks_packa_deny" ); - maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( weapon ); - if ( isDefined( player ) ) - { - player maps/mp/zombies/_zm_stats::increment_client_stat( "pap_weapon_not_grabbed" ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "pap_weapon_not_grabbed" ); - } -} - -wait_for_disconnect( player ) -{ - self endon( "pap_taken" ); - self endon( "pap_timeout" ); - while ( isDefined( player ) ) - { - wait 0,1; - } -/# - println( "*** PAP : User disconnected." ); -#/ - self notify( "pap_player_disconnected" ); -} - -destroy_weapon_on_disconnect( player ) -{ - self endon( "pap_timeout" ); - self endon( "pap_taken" ); - level endon( "Pack_A_Punch_off" ); - player waittill( "disconnect" ); - if ( isDefined( self.worldgun ) ) - { - if ( isDefined( self.worldgun.worldgundw ) ) - { - self.worldgun.worldgundw delete(); - } - self.worldgun delete(); - } -} - -destroy_weapon_in_blackout( player ) -{ - self endon( "pap_timeout" ); - self endon( "pap_taken" ); - self endon( "pap_player_disconnected" ); - level waittill( "Pack_A_Punch_off" ); - if ( isDefined( self.worldgun ) ) - { - self.worldgun rotateto( self.worldgun.angles + ( randomint( 90 ) - 45, 0, randomint( 360 ) - 180 ), 1,5, 0, 0 ); - player playlocalsound( level.zmb_laugh_alias ); - wait 1,5; - if ( isDefined( self.worldgun.worldgundw ) ) - { - self.worldgun.worldgundw delete(); - } - self.worldgun delete(); - } -} - -do_knuckle_crack() -{ - gun = self upgrade_knuckle_crack_begin(); - self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); - self upgrade_knuckle_crack_end( gun ); -} - -upgrade_knuckle_crack_begin() -{ - self increment_is_drinking(); - self disable_player_move_states( 1 ); - primaries = self getweaponslistprimaries(); - gun = self getcurrentweapon(); - weapon = "zombie_knuckle_crack"; - if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) - { - self notify( "zmb_lost_knife" ); - self takeweapon( gun ); - } - else - { - return; - } - self giveweapon( weapon ); - self switchtoweapon( weapon ); - return gun; -} - -upgrade_knuckle_crack_end( gun ) -{ -/# - assert( !is_zombie_perk_bottle( gun ) ); -#/ -/# - assert( gun != level.revive_tool ); -#/ - self enable_player_move_states(); - weapon = "zombie_knuckle_crack"; - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission ) - { - self takeweapon( weapon ); - return; - } - self decrement_is_drinking(); - self takeweapon( weapon ); - primaries = self getweaponslistprimaries(); - if ( self.is_drinking > 0 ) - { - return; - } - else if ( isDefined( primaries ) && primaries.size > 0 ) - { - self switchtoweapon( primaries[ 0 ] ); - } - else - { - if ( self hasweapon( level.laststandpistol ) ) - { - self switchtoweapon( level.laststandpistol ); - return; - } - else - { - self maps/mp/zombies/_zm_weapons::give_fallback_weapon(); - } - } -} - -turn_packapunch_on() -{ - vending_weapon_upgrade_trigger = getentarray( "specialty_weapupgrade", "script_noteworthy" ); - i = 0; - while ( i < vending_weapon_upgrade_trigger.size ) - { - perk = getent( vending_weapon_upgrade_trigger[ i ].target, "targetname" ); - if ( isDefined( perk ) ) - { - perk setmodel( "p6_anim_zm_buildable_pap" ); - } - i++; - } - for ( ;; ) - { - level waittill( "Pack_A_Punch_on" ); - i = 0; - while ( i < vending_weapon_upgrade_trigger.size ) - { - perk = getent( vending_weapon_upgrade_trigger[ i ].target, "targetname" ); - if ( isDefined( perk ) ) - { - perk thread activate_packapunch(); - } - i++; - } - level waittill( "Pack_A_Punch_off" ); - i = 0; - while ( i < vending_weapon_upgrade_trigger.size ) - { - perk = getent( vending_weapon_upgrade_trigger[ i ].target, "targetname" ); - if ( isDefined( perk ) ) - { - perk thread deactivate_packapunch(); - } - i++; - } - } -} - -activate_packapunch() -{ - self setmodel( "p6_anim_zm_buildable_pap_on" ); - self playsound( "zmb_perks_power_on" ); - self vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 ); - timer = 0; - duration = 0,05; -} - -deactivate_packapunch() -{ - self setmodel( "p6_anim_zm_buildable_pap" ); -} - -turn_sleight_on() -{ - while ( 1 ) - { - machine = getentarray( "vending_sleight", "targetname" ); - machine_triggers = getentarray( "vending_sleight", "target" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "zombie_vending_sleight" ); - i++; - } - array_thread( machine_triggers, ::set_power_on, 0 ); - level waittill( "sleight_on" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "zombie_vending_sleight_on" ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "sleight_light" ); - machine[ i ] thread play_loop_on_machine(); - i++; - } - array_thread( machine_triggers, ::set_power_on, 1 ); - level notify( "specialty_fastreload_power_on" ); - level waittill( "sleight_off" ); - array_thread( machine, ::turn_perk_off ); - } -} - -use_solo_revive() -{ - if ( isDefined( level.using_solo_revive ) ) - { - return level.using_solo_revive; - } - players = get_players(); - solo_mode = 0; - if ( players.size == 1 || isDefined( level.force_solo_quick_revive ) && level.force_solo_quick_revive ) - { - solo_mode = 1; - } - level.using_solo_revive = solo_mode; - return solo_mode; -} - -turn_revive_on() -{ - level endon( "stop_quickrevive_logic" ); - machine = getentarray( "vending_revive", "targetname" ); - machine_triggers = getentarray( "vending_revive", "target" ); - machine_model = undefined; - machine_clip = undefined; - flag_wait( "start_zombie_round_logic" ); - players = get_players(); - solo_mode = 0; - if ( use_solo_revive() ) - { - solo_mode = 1; - } - start_state = 0; - start_state = solo_mode; - while ( 1 ) - { - machine = getentarray( "vending_revive", "targetname" ); - machine_triggers = getentarray( "vending_revive", "target" ); - i = 0; - while ( i < machine.size ) - { - if ( flag_exists( "solo_game" ) && flag_exists( "solo_revive" ) && flag( "solo_game" ) && flag( "solo_revive" ) ) - { - machine[ i ] hide(); - } - machine[ i ] setmodel( "zombie_vending_revive" ); - if ( isDefined( level.quick_revive_final_pos ) ) - { - level.quick_revive_default_origin = level.quick_revive_final_pos; - } - if ( !isDefined( level.quick_revive_default_origin ) ) - { - level.quick_revive_default_origin = machine[ i ].origin; - level.quick_revive_default_angles = machine[ i ].angles; - } - level.quick_revive_machine = machine[ i ]; - i++; - } - array_thread( machine_triggers, ::set_power_on, 0 ); - if ( isDefined( start_state ) && !start_state ) - { - level waittill( "revive_on" ); - } - start_state = 0; - i = 0; - while ( i < machine.size ) - { - if ( isDefined( machine[ i ].classname ) && machine[ i ].classname == "script_model" ) - { - if ( isDefined( machine[ i ].script_noteworthy ) && machine[ i ].script_noteworthy == "clip" ) - { - machine_clip = machine[ i ]; - i++; - continue; - } - else - { - machine[ i ] setmodel( "zombie_vending_revive_on" ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 ); - machine_model = machine[ i ]; - machine[ i ] thread perk_fx( "revive_light" ); - machine[ i ] notify( "stop_loopsound" ); - machine[ i ] thread play_loop_on_machine(); - if ( isDefined( machine_triggers[ i ] ) ) - { - machine_clip = machine_triggers[ i ].clip; - } - if ( isDefined( machine_triggers[ i ] ) ) - { - blocker_model = machine_triggers[ i ].blocker_model; - } - } - } - i++; - } - wait_network_frame(); - if ( solo_mode && isDefined( machine_model ) && !is_true( machine_model.ishidden ) ) - { - machine_model thread revive_solo_fx( machine_clip, blocker_model ); - } - array_thread( machine_triggers, ::set_power_on, 1 ); - level notify( "specialty_quickrevive_power_on" ); - if ( isDefined( machine_model ) ) - { - machine_model.ishidden = 0; - } - notify_str = level waittill_any_return( "revive_off", "revive_hide" ); - should_hide = 0; - if ( notify_str == "revive_hide" ) - { - should_hide = 1; - } - i = 0; - while ( i < machine.size ) - { - if ( isDefined( machine[ i ].classname ) && machine[ i ].classname == "script_model" ) - { - machine[ i ] turn_perk_off( should_hide ); - } - i++; - } - } -} - -revive_solo_fx( machine_clip, blocker_model ) -{ - if ( level flag_exists( "solo_revive" ) && flag( "solo_revive" ) && !flag( "solo_game" ) ) - { - return; - } - if ( isDefined( machine_clip ) ) - { - level.quick_revive_machine_clip = machine_clip; - } - if ( !isDefined( level.solo_revive_init ) ) - { - level.solo_revive_init = 1; - flag_init( "solo_revive" ); - } - level notify( "revive_solo_fx" ); - level endon( "revive_solo_fx" ); - self endon( "death" ); - flag_wait( "solo_revive" ); - if ( isDefined( level.revive_solo_fx_func ) ) - { - level thread [[ level.revive_solo_fx_func ]](); - } - wait 2; - self playsound( "zmb_box_move" ); - playsoundatposition( "zmb_whoosh", self.origin ); - if ( isDefined( self._linked_ent ) ) - { - self unlink(); - } - self moveto( self.origin + vectorScale( ( 0, -1, 0 ), 40 ), 3 ); - if ( isDefined( level.custom_vibrate_func ) ) - { - [[ level.custom_vibrate_func ]]( self ); - } - else - { - direction = self.origin; - direction = ( direction[ 1 ], direction[ 0 ], 0 ); - if ( direction[ 1 ] < 0 || direction[ 0 ] > 0 && direction[ 1 ] > 0 ) - { - direction = ( direction[ 0 ], direction[ 1 ] * -1, 0 ); - } - else - { - if ( direction[ 0 ] < 0 ) - { - direction = ( direction[ 0 ] * -1, direction[ 1 ], 0 ); - } - } - self vibrate( direction, 10, 0,5, 5 ); - } - self waittill( "movedone" ); - playfx( level._effect[ "poltergeist" ], self.origin ); - playsoundatposition( "zmb_box_poof", self.origin ); - level clientnotify( "drb" ); - if ( isDefined( self.fx ) ) - { - self.fx unlink(); - self.fx delete(); - } - if ( isDefined( machine_clip ) ) - { - machine_clip trigger_off(); - machine_clip connectpaths(); - } - if ( isDefined( blocker_model ) ) - { - blocker_model show(); - } - level notify( "revive_hide" ); -} - -turn_jugger_on() -{ - while ( 1 ) - { - machine = getentarray( "vending_jugg", "targetname" ); - machine_triggers = getentarray( "vending_jugg", "target" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "zombie_vending_jugg" ); - i++; - } - array_thread( machine_triggers, ::set_power_on, 0 ); - level waittill( "juggernog_on" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "zombie_vending_jugg_on" ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "jugger_light" ); - machine[ i ] thread play_loop_on_machine(); - i++; - } - level notify( "specialty_armorvest_power_on" ); - array_thread( machine_triggers, ::set_power_on, 1 ); - level waittill( "juggernog_off" ); - array_thread( machine, ::turn_perk_off ); - } -} - -turn_doubletap_on() -{ - while ( 1 ) - { - machine = getentarray( "vending_doubletap", "targetname" ); - machine_triggers = getentarray( "vending_doubletap", "target" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "zombie_vending_doubletap2" ); - i++; - } - array_thread( machine_triggers, ::set_power_on, 0 ); - level waittill( "doubletap_on" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "zombie_vending_doubletap2_on" ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "doubletap_light" ); - machine[ i ] thread play_loop_on_machine(); - i++; - } - level notify( "specialty_rof_power_on" ); - array_thread( machine_triggers, ::set_power_on, 1 ); - level waittill( "doubletap_off" ); - array_thread( machine, ::turn_perk_off ); - } -} - -turn_marathon_on() -{ - while ( 1 ) - { - machine = getentarray( "vending_marathon", "targetname" ); - machine_triggers = getentarray( "vending_marathon", "target" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "zombie_vending_marathon" ); - i++; - } - array_thread( machine_triggers, ::set_power_on, 0 ); - level waittill( "marathon_on" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "zombie_vending_marathon_on" ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "marathon_light" ); - machine[ i ] thread play_loop_on_machine(); - i++; - } - level notify( "specialty_longersprint_power_on" ); - array_thread( machine_triggers, ::set_power_on, 1 ); - level waittill( "marathon_off" ); - array_thread( machine, ::turn_perk_off ); - } -} - -turn_divetonuke_on() -{ - while ( 1 ) - { - machine = getentarray( "vending_divetonuke", "targetname" ); - machine_triggers = getentarray( "vending_divetonuke", "target" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "zombie_vending_nuke" ); - i++; - } - array_thread( machine_triggers, ::set_power_on, 0 ); - level waittill( "divetonuke_on" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "zombie_vending_nuke_on" ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "divetonuke_light" ); - machine[ i ] thread play_loop_on_machine(); - i++; - } - level notify( "specialty_flakjacket_power_on" ); - array_thread( machine_triggers, ::set_power_on, 1 ); - level waittill( "divetonuke_off" ); - array_thread( machine, ::turn_perk_off ); - } -} - -divetonuke_explode( attacker, origin ) -{ - radius = level.zombie_vars[ "zombie_perk_divetonuke_radius" ]; - min_damage = level.zombie_vars[ "zombie_perk_divetonuke_min_damage" ]; - max_damage = level.zombie_vars[ "zombie_perk_divetonuke_max_damage" ]; - radiusdamage( origin, radius, max_damage, min_damage, attacker, "MOD_GRENADE_SPLASH" ); - playfx( level._effect[ "divetonuke_groundhit" ], origin ); - attacker playsound( "zmb_phdflop_explo" ); - attacker setclientfieldtoplayer( "dive2nuke_visionset", 1 ); - wait_network_frame(); - wait_network_frame(); - attacker setclientfieldtoplayer( "dive2nuke_visionset", 0 ); -} - -turn_deadshot_on() -{ - while ( 1 ) - { - machine = getentarray( "vending_deadshot", "targetname" ); - machine_triggers = getentarray( "vending_deadshot", "target" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "zombie_vending_ads" ); - i++; - } - array_thread( machine_triggers, ::set_power_on, 0 ); - level waittill( "deadshot_on" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "zombie_vending_ads_on" ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "deadshot_light" ); - machine[ i ] thread play_loop_on_machine(); - i++; - } - level notify( "specialty_deadshot_power_on" ); - array_thread( machine_triggers, ::set_power_on, 1 ); - level waittill( "deadshot_off" ); - array_thread( machine, ::turn_perk_off ); - } -} - -turn_tombstone_on() -{ - level endon( "tombstone_removed" ); - while ( 1 ) - { - machine = getentarray( "vending_tombstone", "targetname" ); - machine_triggers = getentarray( "vending_tombstone", "target" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "zombie_vending_tombstone" ); - i++; - } - array_thread( machine_triggers, ::set_power_on, 0 ); - level waittill( "tombstone_on" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "zombie_vending_tombstone_on" ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "tombstone_light" ); - machine[ i ] thread play_loop_on_machine(); - i++; - } - level notify( "specialty_scavenger_power_on" ); - array_thread( machine_triggers, ::set_power_on, 1 ); - level waittill( "tombstone_off" ); - array_thread( machine, ::turn_perk_off ); - players = get_players(); - _a1593 = players; - _k1593 = getFirstArrayKey( _a1593 ); - while ( isDefined( _k1593 ) ) - { - player = _a1593[ _k1593 ]; - player.hasperkspecialtytombstone = undefined; - _k1593 = getNextArrayKey( _a1593, _k1593 ); - } - } -} - -turn_additionalprimaryweapon_on() -{ - while ( 1 ) - { - machine = getentarray( "vending_additionalprimaryweapon", "targetname" ); - machine_triggers = getentarray( "vending_additionalprimaryweapon", "target" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "zombie_vending_three_gun" ); - i++; - } - array_thread( machine_triggers, ::set_power_on, 0 ); - if ( level.script != "zombie_cod5_prototype" && level.script != "zombie_cod5_sumpf" ) - { - flag_wait( "power_on" ); - } - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "zombie_vending_three_gun_on" ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "additionalprimaryweapon_light" ); - machine[ i ] thread play_loop_on_machine(); - i++; - } - level notify( "specialty_additionalprimaryweapon_power_on" ); - array_thread( machine_triggers, ::set_power_on, 1 ); - level waittill( "additionalprimaryweapon_off" ); - array_thread( machine, ::turn_perk_off ); - } -} - -turn_chugabud_on() -{ - maps/mp/zombies/_zm_chugabud::init(); - if ( isDefined( level.vsmgr_prio_visionset_zm_whos_who ) ) - { - maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_whos_who", 5000, level.vsmgr_prio_visionset_zm_whos_who, 1, 1 ); - } - while ( 1 ) - { - machine = getentarray( "vending_chugabud", "targetname" ); - machine_triggers = getentarray( "vending_chugabud", "target" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "p6_zm_vending_chugabud" ); - i++; - } - array_thread( machine_triggers, ::set_power_on, 0 ); - level waittill( "chugabud_on" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "p6_zm_vending_chugabud_on" ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "tombstone_light" ); - machine[ i ] thread play_loop_on_machine(); - i++; - } - level notify( "specialty_finalstand_power_on" ); - array_thread( machine_triggers, ::set_power_on, 1 ); - level waittill( "chugabud_off" ); - array_thread( machine, ::turn_perk_off ); - players = get_players(); - _a1679 = players; - _k1679 = getFirstArrayKey( _a1679 ); - while ( isDefined( _k1679 ) ) - { - player = _a1679[ _k1679 ]; - player.hasperkspecialtychugabud = undefined; - _k1679 = getNextArrayKey( _a1679, _k1679 ); - } - } -} - -turn_electric_cherry_on() -{ - maps/mp/zombies/_zm_electric_cherry::init(); - if ( isDefined( level.vsmgr_prio_visionset_zm_electric_cherry ) ) - { - maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_electric_cherry", 5000, level.vsmgr_prio_visionset_zm_electric_cherry, 1, 1 ); - } - while ( 1 ) - { - machine = getentarray( "vending_electriccherry", "targetname" ); - machine_triggers = getentarray( "vending_electriccherry", "target" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "p6_zm_vending_electric_cherry_off" ); - i++; - } - array_thread( machine_triggers, ::set_power_on, 0 ); - level waittill( "electric_cherry_on" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "p6_zm_vending_electric_cherry_on" ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "jugger_light" ); - machine[ i ] thread play_loop_on_machine(); - i++; - } - level notify( "specialty_grenadepulldeath_power_on" ); - array_thread( machine_triggers, ::set_power_on, 1 ); - level waittill( "electric_cherry_off" ); - array_thread( machine, ::turn_perk_off ); - } -} - -turn_sixth_sense_on() -{ -} - -turn_oneinch_punch_on() -{ -} - -turn_vulture_on() -{ - maps/mp/zombies/_zm_vulture::init_vulture(); - while ( 1 ) - { - machine = getentarray( "vending_vulture", "targetname" ); - machine_triggers = getentarray( "vending_vulture", "target" ); - array_thread( machine_triggers, ::set_power_on, 0 ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "zombie_vending_revive" ); - i++; - } - level waittill( "vulture_on" ); - level notify( "specialty_nomotionsensor" + "_power_on" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "zombie_vending_revive_on" ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "vulture_light" ); - machine[ i ] thread play_loop_on_machine(); - i++; - } - array_thread( machine_triggers, ::set_power_on, 1 ); - level waittill( "vulture_off" ); - array_thread( machine, ::turn_perk_off ); - } -} - -set_power_on( state ) -{ - self.power_on = state; -} - -turn_perk_off( ishidden ) -{ - self notify( "stop_loopsound" ); - newmachine = spawn( "script_model", self.origin ); - newmachine.angles = self.angles; - newmachine.targetname = self.targetname; - if ( is_true( ishidden ) ) - { - newmachine.ishidden = 1; - newmachine hide(); - } - self delete(); -} - -play_loop_on_machine() -{ - sound_ent = spawn( "script_origin", self.origin ); - sound_ent playloopsound( "zmb_perks_machine_loop" ); - sound_ent linkto( self ); - self waittill( "stop_loopsound" ); - sound_ent unlink(); - sound_ent delete(); -} - -perk_fx( fx, turnofffx ) -{ - if ( isDefined( turnofffx ) ) - { - self.perk_fx = 0; - } - else - { - wait 3; - if ( isDefined( self ) && !is_true( self.perk_fx ) ) - { - playfxontag( level._effect[ fx ], self, "tag_origin" ); - self.perk_fx = 1; - } - } -} - -electric_perks_dialog() -{ - self endon( "death" ); - wait 0,01; - flag_wait( "start_zombie_round_logic" ); - players = get_players(); - if ( players.size == 1 ) - { - return; - } - self endon( "warning_dialog" ); - level endon( "switch_flipped" ); - timer = 0; - while ( 1 ) - { - wait 0,5; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ] ) ) - { - i++; - continue; - } - else dist = distancesquared( players[ i ].origin, self.origin ); - if ( dist > 4900 ) - { - timer = 0; - i++; - continue; - } - else if ( dist < 4900 && timer < 3 ) - { - wait 0,5; - timer++; - } - if ( dist < 4900 && timer == 3 ) - { - if ( !isDefined( players[ i ] ) ) - { - i++; - continue; - } - else - { - players[ i ] thread do_player_vo( "vox_start", 5 ); - wait 3; - self notify( "warning_dialog" ); -/# - iprintlnbold( "warning_given" ); -#/ - } - } - i++; - } - } -} - -vending_trigger_think() -{ - self endon( "death" ); - wait 0,01; - perk = self.script_noteworthy; - solo = 0; - start_on = 0; - level.revive_machine_is_solo = 0; - if ( isDefined( perk ) || perk == "specialty_quickrevive" && perk == "specialty_quickrevive_upgrade" ) - { - flag_wait( "start_zombie_round_logic" ); - solo = use_solo_revive(); - self endon( "stop_quickrevive_logic" ); - level.quick_revive_trigger = self; - if ( solo ) - { - if ( !is_true( level.revive_machine_is_solo ) ) - { - start_on = 1; - players = get_players(); - _a1994 = players; - _k1994 = getFirstArrayKey( _a1994 ); - while ( isDefined( _k1994 ) ) - { - player = _a1994[ _k1994 ]; - if ( !isDefined( player.lives ) ) - { - player.lives = 0; - } - _k1994 = getNextArrayKey( _a1994, _k1994 ); - } - level maps/mp/zombies/_zm::zombiemode_solo_last_stand_pistol(); - } - level.revive_machine_is_solo = 1; - } - } - self sethintstring( &"ZOMBIE_NEED_POWER" ); - self setcursorhint( "HINT_NOICON" ); - self usetriggerrequirelookat(); - cost = level.zombie_vars[ "zombie_perk_cost" ]; - switch( perk ) - { - case "specialty_armorvest": - case "specialty_armorvest_upgrade": - cost = 2500; - break; - case "specialty_quickrevive": - case "specialty_quickrevive_upgrade": - if ( solo ) - { - cost = 500; - } - else - { - cost = 1500; - } - break; - case "specialty_fastreload": - case "specialty_fastreload_upgrade": - cost = 3000; - break; - case "specialty_rof": - case "specialty_rof_upgrade": - cost = 2000; - break; - case "specialty_longersprint": - case "specialty_longersprint_upgrade": - cost = 2000; - break; - case "specialty_flakjacket": - case "specialty_flakjacket_upgrade": - cost = 2000; - break; - case "specialty_deadshot": - case "specialty_deadshot_upgrade": - cost = 1500; - break; - case "specialty_additionalprimaryweapon": - case "specialty_additionalprimaryweapon_upgrade": - cost = 4000; - break; - case "specialty_grenadepulldeath": - case "specialty_grenadepulldeath_upgrade": - cost = 2000; - break; - case "specialty_nomotionsensor": - cost = 2000; - break; - } - self.cost = cost; - if ( !start_on ) - { - notify_name = perk + "_power_on"; - level waittill( notify_name ); - } - start_on = 0; - if ( !isDefined( level._perkmachinenetworkchoke ) ) - { - level._perkmachinenetworkchoke = 0; - } - else - { - level._perkmachinenetworkchoke++; - } - i = 0; - while ( i < level._perkmachinenetworkchoke ) - { - wait_network_frame(); - i++; - } - self thread maps/mp/zombies/_zm_audio::perks_a_cola_jingle_timer(); - self thread check_player_has_perk( perk ); - switch( perk ) - { - case "specialty_armorvest": - case "specialty_armorvest_upgrade": - self sethintstring( &"ZOMBIE_PERK_JUGGERNAUT", cost ); - break; - case "specialty_quickrevive": - case "specialty_quickrevive_upgrade": - if ( solo ) - { - self sethintstring( &"ZOMBIE_PERK_QUICKREVIVE_SOLO", cost ); - } - else - { - self sethintstring( &"ZOMBIE_PERK_QUICKREVIVE", cost ); - } - break; - case "specialty_fastreload": - case "specialty_fastreload_upgrade": - self sethintstring( &"ZOMBIE_PERK_FASTRELOAD", cost ); - break; - case "specialty_rof": - case "specialty_rof_upgrade": - self sethintstring( &"ZOMBIE_PERK_DOUBLETAP", cost ); - break; - case "specialty_longersprint": - case "specialty_longersprint_upgrade": - self sethintstring( &"ZOMBIE_PERK_MARATHON", cost ); - break; - case "specialty_flakjacket": - case "specialty_flakjacket_upgrade": - self sethintstring( &"ZOMBIE_PERK_DIVETONUKE", cost ); - break; - case "specialty_deadshot": - case "specialty_deadshot_upgrade": - self sethintstring( &"ZOMBIE_PERK_DEADSHOT", cost ); - break; - case "specialty_additionalprimaryweapon": - case "specialty_additionalprimaryweapon_upgrade": - self sethintstring( &"ZOMBIE_PERK_ADDITIONALPRIMARYWEAPON", cost ); - break; - case "specialty_scavenger": - case "specialty_scavenger_upgrade": - self sethintstring( &"ZOMBIE_PERK_TOMBSTONE", cost ); - break; - case "specialty_finalstand": - case "specialty_finalstand_upgrade": - self sethintstring( &"ZOMBIE_PERK_CHUGABUD", cost ); - break; - case "specialty_grenadepulldeath": - case "specialty_grenadepulldeath_upgrade": - self sethintstring( &"ZOMBIE_PERK_FASTRELOAD", cost ); - break; - case "specialty_nomotionsensor": - self sethintstring( &"ZOMBIE_PERK_VULTURE", cost ); - break; - default: - self sethintstring( ( perk + " Cost: " ) + level.zombie_vars[ "zombie_perk_cost" ] ); - } - for ( ;; ) - { - self waittill( "trigger", player ); - index = maps/mp/zombies/_zm_weapons::get_player_index( player ); - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( player.intermission ) && player.intermission ) - { - continue; - } - else - { - if ( player in_revive_trigger() ) - { - break; - } - else if ( !player maps/mp/zombies/_zm_magicbox::can_buy_weapon() ) - { - wait 0,1; - break; - } - else if ( player isthrowinggrenade() ) - { - wait 0,1; - break; - } - else if ( player isswitchingweapons() ) - { - wait 0,1; - break; - } - else if ( player.is_drinking > 0 ) - { - wait 0,1; - break; - } - else if ( player hasperk( perk ) || player has_perk_paused( perk ) ) - { - cheat = 0; -/# - if ( getDvarInt( "zombie_cheat" ) >= 5 ) - { - cheat = 1; -#/ - } - if ( cheat != 1 ) - { - self playsound( "deny" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 1 ); - break; - } - } - else if ( player.score < cost ) - { - self playsound( "evt_perk_deny" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); - break; - } - else if ( player.num_perks >= 4 ) - { - self playsound( "evt_perk_deny" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "sigh" ); - break; - } - else - { - sound = "evt_bottle_dispense"; - playsoundatposition( sound, self.origin ); - player maps/mp/zombies/_zm_score::minus_to_player_score( cost ); - player.perk_purchased = perk; - self thread maps/mp/zombies/_zm_audio::play_jingle_or_stinger( self.script_label ); - self thread vending_trigger_post_think( player, perk ); - } - } - break; -} -} - -vending_trigger_post_think( player, perk ) -{ - player endon( "disconnect" ); - player endon( "end_game" ); - player endon( "perk_abort_drinking" ); - gun = player perk_give_bottle_begin( perk ); - evt = player waittill_any_return( "fake_death", "death", "player_downed", "weapon_change_complete" ); - if ( evt == "weapon_change_complete" ) - { - player thread wait_give_perk( perk, 1 ); - } - player perk_give_bottle_end( gun, perk ); - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( player.intermission ) && player.intermission ) - { - return; - } - player notify( "burp" ); - if ( is_classic() ) - { - player cash_back_player_drinks_perk(); - } - if ( isDefined( level.perk_bought_func ) ) - { - player [[ level.perk_bought_func ]]( perk ); - } - player.perk_purchased = undefined; - if ( is_false( self.power_on ) ) - { - wait 1; - perk_pause( self.script_noteworthy ); - } - bbprint( "zombie_uses", "playername %s playerscore %d round %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, perk, self.origin, "perk" ); -} - -cash_back_player_drinks_perk() -{ - if ( isDefined( level.pers_upgrade_cash_back ) && level.pers_upgrade_cash_back ) - { - if ( isDefined( self.pers_upgrades_awarded[ "cash_back" ] ) && self.pers_upgrades_awarded[ "cash_back" ] ) - { - self thread cash_back_money_reward(); - self thread cash_back_player_prone_check( 1 ); - return; - } - else - { - if ( self.pers[ "pers_cash_back_bought" ] < level.pers_cash_back_num_perks_required ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "pers_cash_back_bought", 0 ); - return; - } - else - { - self thread cash_back_player_prone_check( 0 ); - } - } - } -} - -cash_back_money_reward() -{ - self endon( "death" ); - step = 5; - amount_per_step = int( level.pers_cash_back_money_reward / step ); - i = 0; - while ( i < step ) - { - self maps/mp/zombies/_zm_score::add_to_player_score( amount_per_step ); - wait 0,2; - i++; - } -} - -cash_back_player_prone_check( got_ability ) -{ - self endon( "death" ); - prone_time = 2,5; - start_time = getTime(); - while ( 1 ) - { - time = getTime(); - dt = ( time - start_time ) / 1000; - if ( dt > prone_time ) - { - break; - } - else - { - if ( self getstance() == "prone" ) - { - if ( !got_ability ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "pers_cash_back_prone", 0 ); - wait 0,8; - } - return; - } - wait 0,01; - } - } - if ( got_ability ) - { - self notify( "cash_back_failed_prone" ); - } -} - -solo_revive_buy_trigger_move( revive_trigger_noteworthy ) -{ - self endon( "death" ); - revive_perk_triggers = getentarray( revive_trigger_noteworthy, "script_noteworthy" ); - _a2453 = revive_perk_triggers; - _k2453 = getFirstArrayKey( _a2453 ); - while ( isDefined( _k2453 ) ) - { - revive_perk_trigger = _a2453[ _k2453 ]; - self thread solo_revive_buy_trigger_move_trigger( revive_perk_trigger ); - _k2453 = getNextArrayKey( _a2453, _k2453 ); - } -} - -solo_revive_buy_trigger_move_trigger( revive_perk_trigger ) -{ - self endon( "death" ); - revive_perk_trigger setinvisibletoplayer( self ); - if ( level.solo_lives_given >= 3 ) - { - revive_perk_trigger trigger_off(); - if ( isDefined( level._solo_revive_machine_expire_func ) ) - { - revive_perk_trigger [[ level._solo_revive_machine_expire_func ]](); - } - return; - } - while ( self.lives > 0 ) - { - wait 0,1; - } - revive_perk_trigger setvisibletoplayer( self ); -} - -wait_give_perk( perk, bought ) -{ - self endon( "player_downed" ); - self endon( "disconnect" ); - self endon( "end_game" ); - self endon( "perk_abort_drinking" ); - self waittill_notify_or_timeout( "burp", 0,5 ); - self give_perk( perk, bought ); -} - -give_perk( perk, bought ) -{ - self setperk( perk ); - self.num_perks++; - if ( isDefined( bought ) && bought ) - { - self maps/mp/zombies/_zm_audio::playerexert( "burp" ); - self delay_thread( 1,5, ::maps/mp/zombies/_zm_audio::perk_vox, perk ); - self setblur( 4, 0,1 ); - wait 0,1; - self setblur( 0, 0,1 ); - self notify( "perk_bought" ); - } - self perk_set_max_health_if_jugg( perk, 1, 0 ); - if ( perk == "specialty_deadshot" ) - { - self setclientfieldtoplayer( "deadshot_perk", 1 ); - } - else - { - if ( perk == "specialty_deadshot_upgrade" ) - { - self setclientfieldtoplayer( "deadshot_perk", 1 ); - } - } - if ( perk == "specialty_scavenger" ) - { - self.hasperkspecialtytombstone = 1; - } - players = get_players(); - if ( use_solo_revive() && perk == "specialty_quickrevive" ) - { - self.lives = 1; - if ( !isDefined( level.solo_lives_given ) ) - { - level.solo_lives_given = 0; - } - if ( isDefined( level.solo_game_free_player_quickrevive ) ) - { - level.solo_game_free_player_quickrevive = undefined; - } - else - { - level.solo_lives_given++; - } - if ( level.solo_lives_given >= 3 ) - { - flag_set( "solo_revive" ); - } - self thread solo_revive_buy_trigger_move( perk ); - } - if ( perk == "specialty_finalstand" ) - { - self.lives = 1; - self.hasperkspecialtychugabud = 1; - self notify( "perk_chugabud_activated" ); - } - if ( perk == "specialty_nomotionsensor" ) - { - self maps/mp/zombies/_zm_vulture::give_vulture_perk(); - } - self set_perk_clientfield( perk, 1 ); - maps/mp/_demo::bookmark( "zm_player_perk", getTime(), self ); - self maps/mp/zombies/_zm_stats::increment_client_stat( "perks_drank" ); - self maps/mp/zombies/_zm_stats::increment_client_stat( perk + "_drank" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( perk + "_drank" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "perks_drank" ); - if ( !isDefined( self.perk_history ) ) - { - self.perk_history = []; - } - self.perk_history = add_to_array( self.perk_history, perk, 0 ); - self notify( "perk_acquired" ); - self thread perk_think( perk ); -} - -perk_set_max_health_if_jugg( perk, set_premaxhealth, clamp_health_to_max_health ) -{ - max_total_health = undefined; - if ( perk == "specialty_armorvest" ) - { - if ( set_premaxhealth ) - { - self.premaxhealth = self.maxhealth; - } - max_total_health = level.zombie_vars[ "zombie_perk_juggernaut_health" ]; - } - else if ( perk == "specialty_armorvest_upgrade" ) - { - if ( set_premaxhealth ) - { - self.premaxhealth = self.maxhealth; - } - max_total_health = level.zombie_vars[ "zombie_perk_juggernaut_health_upgrade" ]; - } - else if ( perk == "jugg_upgrade" ) - { - if ( set_premaxhealth ) - { - self.premaxhealth = self.maxhealth; - } - if ( self hasperk( "specialty_armorvest" ) ) - { - max_total_health = level.zombie_vars[ "zombie_perk_juggernaut_health" ]; - } - else - { - max_total_health = 100; - } - } - else - { - if ( perk == "health_reboot" ) - { - max_total_health = 100; - } - } - if ( isDefined( max_total_health ) ) - { - if ( maps/mp/zombies/_zm_utility::is_classic() ) - { - if ( isDefined( self.pers_upgrades_awarded[ "jugg" ] ) && self.pers_upgrades_awarded[ "jugg" ] ) - { - max_total_health += level.pers_jugg_upgrade_health_bonus; - } - } - self setmaxhealth( max_total_health ); - if ( isDefined( clamp_health_to_max_health ) && clamp_health_to_max_health == 1 ) - { - if ( self.health > self.maxhealth ) - { - self.health = self.maxhealth; - } - } - } -} - -check_player_has_perk( perk ) -{ - self endon( "death" ); -/# - if ( getDvarInt( "zombie_cheat" ) >= 5 ) - { - return; -#/ - } - dist = 16384; - while ( 1 ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( distancesquared( players[ i ].origin, self.origin ) < dist ) - { - if ( !players[ i ] hasperk( perk ) && !players[ i ] has_perk_paused( perk ) && !players[ i ] in_revive_trigger() && !is_equipment_that_blocks_purchase( players[ i ] getcurrentweapon() ) && !players[ i ] hacker_active() ) - { - self setinvisibletoplayer( players[ i ], 0 ); - i++; - continue; - } - else - { - self setinvisibletoplayer( players[ i ], 1 ); - } - } - i++; - } - wait 0,1; - } -} - -vending_set_hintstring( perk ) -{ - switch( perk ) - { - case "specialty_armorvest": - case "specialty_armorvest_upgrade": - break; - } -} - -perk_think( perk ) -{ -/# - if ( getDvarInt( "zombie_cheat" ) >= 5 ) - { - if ( isDefined( self.perk_hud[ perk ] ) ) - { - return; -#/ - } - } - perk_str = perk + "_stop"; - result = self waittill_any_return( "fake_death", "death", "player_downed", perk_str ); - do_retain = 1; - if ( use_solo_revive() && perk == "specialty_quickrevive" ) - { - do_retain = 0; - } - if ( do_retain && isDefined( self._retain_perks ) && self._retain_perks ) - { - return; - } - self unsetperk( perk ); - self.num_perks--; - - switch( perk ) - { - case "specialty_armorvest": - self setmaxhealth( 100 ); - break; - case "specialty_additionalprimaryweapon": - if ( result == perk_str ) - { - self maps/mp/zombies/_zm::take_additionalprimaryweapon(); - } - break; - case "specialty_deadshot": - self setclientfieldtoplayer( "deadshot_perk", 0 ); - break; - case "specialty_deadshot_upgrade": - self setclientfieldtoplayer( "deadshot_perk", 0 ); - break; - case "specialty_nomotionsensor": - self maps/mp/zombies/_zm_vulture::take_vulture_perk(); - break; - } - self set_perk_clientfield( perk, 0 ); - self.perk_purchased = undefined; - if ( isDefined( level.perk_lost_func ) ) - { - self [[ level.perk_lost_func ]]( perk ); - } - self notify( "perk_lost" ); -} - -set_perk_clientfield( perk, state ) -{ - switch( perk ) - { - case "specialty_additionalprimaryweapon": - self setclientfieldtoplayer( "perk_additional_primary_weapon", state ); - break; - case "specialty_deadshot": - self setclientfieldtoplayer( "perk_dead_shot", state ); - break; - case "specialty_flakjacket": - self setclientfieldtoplayer( "perk_dive_to_nuke", state ); - break; - case "specialty_rof": - self setclientfieldtoplayer( "perk_double_tap", state ); - break; - case "specialty_armorvest": - self setclientfieldtoplayer( "perk_juggernaut", state ); - break; - case "specialty_longersprint": - self setclientfieldtoplayer( "perk_marathon", state ); - break; - case "specialty_quickrevive": - self setclientfieldtoplayer( "perk_quick_revive", state ); - break; - case "specialty_fastreload": - self setclientfieldtoplayer( "perk_sleight_of_hand", state ); - break; - case "specialty_scavenger": - self setclientfieldtoplayer( "perk_tombstone", state ); - break; - case "specialty_finalstand": - self setclientfieldtoplayer( "perk_chugabud", state ); - break; - case "specialty_grenadepulldeath": - self setclientfieldtoplayer( "perk_electric_cherry", state ); - break; - case "specialty_nomotionsensor": - self setclientfieldtoplayer( "perk_vulture", state ); - break; - default: - } - } -} - -perk_hud_destroy( perk ) -{ - self.perk_hud[ perk ] destroy_hud(); -} - -perk_hud_grey( perk, grey_on_off ) -{ - if ( grey_on_off ) - { - self.perk_hud[ perk ].alpha = 0,3; - } - else - { - self.perk_hud[ perk ].alpha = 1; - } -} - -perk_hud_flash() -{ - self endon( "death" ); - self.flash = 1; - self scaleovertime( 0,05, 32, 32 ); - wait 0,3; - self scaleovertime( 0,05, 24, 24 ); - wait 0,3; - self.flash = 0; -} - -perk_flash_audio( perk ) -{ - alias = undefined; - switch( perk ) - { - case "specialty_armorvest": - alias = "zmb_hud_flash_jugga"; - break; - case "specialty_quickrevive": - alias = "zmb_hud_flash_revive"; - break; - case "specialty_fastreload": - alias = "zmb_hud_flash_speed"; - break; - case "specialty_longersprint": - alias = "zmb_hud_flash_stamina"; - break; - case "specialty_flakjacket": - alias = "zmb_hud_flash_phd"; - break; - case "specialty_deadshot": - alias = "zmb_hud_flash_deadshot"; - break; - case "specialty_additionalprimaryweapon": - alias = "zmb_hud_flash_additionalprimaryweapon"; - break; - } - if ( isDefined( alias ) ) - { - self playlocalsound( alias ); - } -} - -perk_hud_start_flash( perk ) -{ - if ( self hasperk( perk ) && isDefined( self.perk_hud ) ) - { - hud = self.perk_hud[ perk ]; - if ( isDefined( hud ) ) - { - if ( isDefined( hud.flash ) && !hud.flash ) - { - hud thread perk_hud_flash(); - self thread perk_flash_audio( perk ); - } - } - } -} - -perk_hud_stop_flash( perk, taken ) -{ - if ( self hasperk( perk ) && isDefined( self.perk_hud ) ) - { - hud = self.perk_hud[ perk ]; - if ( isDefined( hud ) ) - { - hud.flash = undefined; - if ( isDefined( taken ) ) - { - hud notify( "stop_flash_perk" ); - } - } - } -} - -perk_give_bottle_begin( perk ) -{ - self increment_is_drinking(); - self disable_player_move_states( 1 ); - gun = self getcurrentweapon(); - weapon = ""; - switch( perk ) - { - case " _upgrade": - case "specialty_armorvest": - weapon = "zombie_perk_bottle_jugg"; - break; - case "specialty_quickrevive": - case "specialty_quickrevive_upgrade": - weapon = "zombie_perk_bottle_revive"; - break; - case "specialty_fastreload": - case "specialty_fastreload_upgrade": - weapon = "zombie_perk_bottle_sleight"; - break; - case "specialty_rof": - case "specialty_rof_upgrade": - weapon = "zombie_perk_bottle_doubletap"; - break; - case "specialty_longersprint": - case "specialty_longersprint_upgrade": - weapon = "zombie_perk_bottle_marathon"; - break; - case "specialty_flakjacket": - case "specialty_flakjacket_upgrade": - weapon = "zombie_perk_bottle_nuke"; - break; - case "specialty_deadshot": - case "specialty_deadshot_upgrade": - weapon = "zombie_perk_bottle_deadshot"; - break; - case "specialty_additionalprimaryweapon": - case "specialty_additionalprimaryweapon_upgrade": - weapon = "zombie_perk_bottle_additionalprimaryweapon"; - break; - case "specialty_scavenger": - case "specialty_scavenger_upgrade": - weapon = "zombie_perk_bottle_tombstone"; - break; - case "specialty_finalstand": - case "specialty_finalstand_upgrade": - weapon = "zombie_perk_bottle_whoswho"; - break; - case "specialty_grenadepulldeath": - case "specialty_grenadepulldeath_upgrade": - weapon = "zombie_perk_bottle_cherry"; - break; - case "specialty_nomotionsensor": - weapon = "zombie_perk_bottle_vulture"; - break; - } - self giveweapon( weapon ); - self switchtoweapon( weapon ); - return gun; -} - -perk_give_bottle_end( gun, perk ) -{ - self endon( "perk_abort_drinking" ); -/# - assert( !is_zombie_perk_bottle( gun ) ); -#/ -/# - assert( gun != level.revive_tool ); -#/ - self enable_player_move_states(); - weapon = ""; - switch( perk ) - { - case "specialty_rof": - case "specialty_rof_upgrade": - weapon = "zombie_perk_bottle_doubletap"; - break; - case "specialty_longersprint": - case "specialty_longersprint_upgrade": - weapon = "zombie_perk_bottle_marathon"; - break; - case "specialty_flakjacket": - case "specialty_flakjacket_upgrade": - weapon = "zombie_perk_bottle_nuke"; - break; - case "specialty_armorvest": - case "specialty_armorvest_upgrade": - weapon = "zombie_perk_bottle_jugg"; - self.jugg_used = 1; - break; - case "specialty_quickrevive": - case "specialty_quickrevive_upgrade": - weapon = "zombie_perk_bottle_revive"; - break; - case "specialty_fastreload": - case "specialty_fastreload_upgrade": - weapon = "zombie_perk_bottle_sleight"; - self.speed_used = 1; - break; - case "specialty_deadshot": - case "specialty_deadshot_upgrade": - weapon = "zombie_perk_bottle_deadshot"; - break; - case "specialty_additionalprimaryweapon": - case "specialty_additionalprimaryweapon_upgrade": - weapon = "zombie_perk_bottle_additionalprimaryweapon"; - break; - case "specialty_scavenger": - case "specialty_scavenger_upgrade": - weapon = "zombie_perk_bottle_tombstone"; - break; - case "specialty_finalstand": - case "specialty_finalstand_upgrade": - weapon = "zombie_perk_bottle_whoswho"; - break; - case "specialty_grenadepulldeath": - case "specialty_grenadepulldeath_upgrade": - weapon = "zombie_perk_bottle_cherry"; - break; - case "specialty_nomotionsensor": - weapon = "zombie_perk_bottle_vulture"; - break; - } - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission ) - { - self takeweapon( weapon ); - return; - } - self takeweapon( weapon ); - if ( self is_multiple_drinking() ) - { - self decrement_is_drinking(); - return; - } - else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment_that_blocks_purchase( gun ) ) - { - self switchtoweapon( gun ); - if ( is_melee_weapon( gun ) ) - { - self decrement_is_drinking(); - return; - } - } - else - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - } - self waittill( "weapon_change_complete" ); - if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.intermission ) && !self.intermission ) - { - self decrement_is_drinking(); - } -} - -perk_abort_drinking( post_delay ) -{ - if ( self.is_drinking ) - { - self notify( "perk_abort_drinking" ); - self decrement_is_drinking(); - self enable_player_move_states(); - if ( isDefined( post_delay ) ) - { - wait post_delay; - } - } -} - -give_random_perk() -{ - vending_triggers = getentarray( "zombie_vending", "targetname" ); - perks = []; - i = 0; - while ( i < vending_triggers.size ) - { - perk = vending_triggers[ i ].script_noteworthy; - if ( isDefined( self.perk_purchased ) && self.perk_purchased == perk ) - { - i++; - continue; - } - else - { - if ( perk == "specialty_weapupgrade" ) - { - i++; - continue; - } - else - { - if ( !self hasperk( perk ) && !self has_perk_paused( perk ) ) - { - perks[ perks.size ] = perk; - } - } - } - i++; - } - if ( perks.size > 0 ) - { - perks = array_randomize( perks ); - self give_perk( perks[ 0 ] ); - } -} - -lose_random_perk() -{ - vending_triggers = getentarray( "zombie_vending", "targetname" ); - perks = []; - i = 0; - while ( i < vending_triggers.size ) - { - perk = vending_triggers[ i ].script_noteworthy; - if ( isDefined( self.perk_purchased ) && self.perk_purchased == perk ) - { - i++; - continue; - } - else - { - if ( self hasperk( perk ) || self has_perk_paused( perk ) ) - { - perks[ perks.size ] = perk; - } - } - i++; - } - if ( perks.size > 0 ) - { - perks = array_randomize( perks ); - perk = perks[ 0 ]; - perk_str = perk + "_stop"; - self notify( perk_str ); - if ( use_solo_revive() && perk == "specialty_quickrevive" ) - { - self.lives--; - - } - } -} - -update_perk_hud() -{ - while ( isDefined( self.perk_hud ) ) - { - keys = getarraykeys( self.perk_hud ); - i = 0; - while ( i < self.perk_hud.size ) - { - self.perk_hud[ keys[ i ] ].x = i * 30; - i++; - } - } -} - -quantum_bomb_give_nearest_perk_validation( position ) -{ - vending_triggers = getentarray( "zombie_vending", "targetname" ); - range_squared = 32400; - i = 0; - while ( i < vending_triggers.size ) - { - if ( distancesquared( vending_triggers[ i ].origin, position ) < range_squared ) - { - return 1; - } - i++; - } - return 0; -} - -quantum_bomb_give_nearest_perk_result( position ) -{ - [[ level.quantum_bomb_play_mystery_effect_func ]]( position ); - vending_triggers = getentarray( "zombie_vending", "targetname" ); - nearest = 0; - i = 1; - while ( i < vending_triggers.size ) - { - if ( distancesquared( vending_triggers[ i ].origin, position ) < distancesquared( vending_triggers[ nearest ].origin, position ) ) - { - nearest = i; - } - i++; - } - players = get_players(); - perk = vending_triggers[ nearest ].script_noteworthy; - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - if ( player.sessionstate == "spectator" || player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - i++; - continue; - } - else - { - if ( !player hasperk( perk ) && isDefined( player.perk_purchased ) && player.perk_purchased != perk && randomint( 5 ) ) - { - if ( player == self ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "quant_good" ); - } - player give_perk( perk ); - player [[ level.quantum_bomb_play_player_effect_func ]](); - } - } - i++; - } -} - -perk_pause( perk ) -{ - if ( perk == "Pack_A_Punch" || perk == "specialty_weapupgrade" ) - { - return; - } - j = 0; - while ( j < get_players().size ) - { - player = get_players()[ j ]; - if ( !isDefined( player.disabled_perks ) ) - { - player.disabled_perks = []; - } - if ( isDefined( player.disabled_perks[ perk ] ) && !player.disabled_perks[ perk ] ) - { - player.disabled_perks[ perk ] = player hasperk( perk ); - } - if ( player.disabled_perks[ perk ] ) - { - player unsetperk( perk ); - player set_perk_clientfield( perk, 2 ); - if ( perk == "specialty_armorvest" || perk == "specialty_armorvest_upgrade" ) - { - player setmaxhealth( player.premaxhealth ); - if ( player.health > player.maxhealth ) - { - player.health = player.maxhealth; - } - } -/# - println( " ZM PERKS " + player.name + " paused perk " + perk + "\n" ); -#/ - } - j++; - } -} - -perk_unpause( perk ) -{ - if ( !isDefined( perk ) ) - { - return; - } - if ( perk == "Pack_A_Punch" ) - { - return; - } - j = 0; - while ( j < get_players().size ) - { - player = get_players()[ j ]; - if ( isDefined( player.disabled_perks ) && isDefined( player.disabled_perks[ perk ] ) && player.disabled_perks[ perk ] ) - { - player.disabled_perks[ perk ] = 0; - player set_perk_clientfield( perk, 1 ); - player setperk( perk ); -/# - println( " ZM PERKS " + player.name + " unpaused perk " + perk + "\n" ); -#/ - if ( issubstr( perk, "specialty_scavenger" ) ) - { - player.hasperkspecialtytombstone = 1; - } - player perk_set_max_health_if_jugg( perk, 0, 0 ); - } - j++; - } -} - -perk_pause_all_perks() -{ - vending_triggers = getentarray( "zombie_vending", "targetname" ); - _a3414 = vending_triggers; - _k3414 = getFirstArrayKey( _a3414 ); - while ( isDefined( _k3414 ) ) - { - trigger = _a3414[ _k3414 ]; - maps/mp/zombies/_zm_perks::perk_pause( trigger.script_noteworthy ); - _k3414 = getNextArrayKey( _a3414, _k3414 ); - } -} - -perk_unpause_all_perks() -{ - vending_triggers = getentarray( "zombie_vending", "targetname" ); - _a3424 = vending_triggers; - _k3424 = getFirstArrayKey( _a3424 ); - while ( isDefined( _k3424 ) ) - { - trigger = _a3424[ _k3424 ]; - maps/mp/zombies/_zm_perks::perk_unpause( trigger.script_noteworthy ); - _k3424 = getNextArrayKey( _a3424, _k3424 ); - } -} - -has_perk_paused( perk ) -{ - if ( isDefined( self.disabled_perks ) && isDefined( self.disabled_perks[ perk ] ) && self.disabled_perks[ perk ] ) - { - return 1; - } - return 0; -} - -getvendingmachinenotify() -{ - if ( !isDefined( self ) ) - { - return ""; - } - switch( self.script_noteworthy ) - { - case "specialty_armorvest": - case "specialty_armorvest_upgrade": - return "juggernog"; - case "specialty_quickrevive": - case "specialty_quickrevive_upgrade": - return "revive"; - case "specialty_fastreload": - case "specialty_fastreload_upgrade": - return "sleight"; - case "specialty_rof": - case "specialty_rof_upgrade": - return "doubletap"; - case "specialty_longersprint": - case "specialty_longersprint_upgrade": - return "marathon"; - case "specialty_flakjacket": - case "specialty_flakjacket_upgrade": - return "divetonuke"; - case "specialty_deadshot": - case "specialty_deadshot_upgrade": - return "deadshot"; - case "specialty_additionalprimaryweapon": - case "specialty_additionalprimaryweapon_upgrade": - return "additionalprimaryweapon"; - case "specialty_scavenger": - case "specialty_scavenger_upgrade": - return "tombstone"; - case "specialty_finalstand": - case "specialty_finalstand_upgrade": - return "chugabud"; - case "specialty_grenadepulldeath": - case "specialty_grenadepulldeath_upgrade": - return "electric_cherry"; - case "specialty_nomotionsensor": - return "vulture"; - case "specialty_weapupgrade": - return "Pack_A_Punch"; - default: - return undefined; - } - } - } - } - } - } - } - } - } - } - } - } - } -} - -perk_machine_removal( machine, replacement_model ) -{ - if ( !isDefined( machine ) ) - { - return; - } - trig = getent( machine, "script_noteworthy" ); - machine_model = undefined; - if ( isDefined( trig ) ) - { - trig notify( "warning_dialog" ); - while ( isDefined( trig.target ) ) - { - parts = getentarray( trig.target, "targetname" ); - i = 0; - while ( i < parts.size ) - { - if ( isDefined( parts[ i ].classname ) && parts[ i ].classname == "script_model" ) - { - machine_model = parts[ i ]; - i++; - continue; - } - else - { - if ( parts[ i ].script_noteworthy ) - { - if ( isDefined( parts[ i ].script_noteworthy == "clip" ) ) - { - model_clip = parts[ i ]; - } - i++; - continue; - } - else - { - parts[ i ] delete(); - } - } - i++; - } - } - if ( isDefined( replacement_model ) && isDefined( machine_model ) ) - { - machine_model setmodel( replacement_model ); - } - else - { - if ( !isDefined( replacement_model ) && isDefined( machine_model ) ) - { - machine_model delete(); - if ( isDefined( model_clip ) ) - { - model_clip delete(); - } - if ( isDefined( trig.clip ) ) - { - trig.clip delete(); - } - } - } - if ( isDefined( trig.bump ) ) - { - trig.bump delete(); - } - trig delete(); - } -} - -perk_machine_spawn_init() -{ - match_string = ""; - location = level.scr_zm_map_start_location; - if ( location != "default" && location == "" && isDefined( level.default_start_location ) ) - { - location = level.default_start_location; - } - match_string = ( level.scr_zm_ui_gametype + "_perks_" ) + location; - pos = []; - if ( isDefined( level.override_perk_targetname ) ) - { - structs = getstructarray( level.override_perk_targetname, "targetname" ); - } - else - { - structs = getstructarray( "zm_perk_machine", "targetname" ); - } - _a3627 = structs; - _k3627 = getFirstArrayKey( _a3627 ); - while ( isDefined( _k3627 ) ) - { - struct = _a3627[ _k3627 ]; - if ( isDefined( struct.script_string ) ) - { - tokens = strtok( struct.script_string, " " ); - _a3632 = tokens; - _k3632 = getFirstArrayKey( _a3632 ); - while ( isDefined( _k3632 ) ) - { - token = _a3632[ _k3632 ]; - if ( token == match_string ) - { - pos[ pos.size ] = struct; - } - _k3632 = getNextArrayKey( _a3632, _k3632 ); - } - } - else pos[ pos.size ] = struct; - _k3627 = getNextArrayKey( _a3627, _k3627 ); - } - if ( !isDefined( pos ) || pos.size == 0 ) - { - return; - } - precachemodel( "zm_collision_perks1" ); - i = 0; - while ( i < pos.size ) - { - perk = pos[ i ].script_noteworthy; - if ( isDefined( perk ) && isDefined( pos[ i ].model ) ) - { - use_trigger = spawn( "trigger_radius_use", pos[ i ].origin + vectorScale( ( 0, -1, 0 ), 30 ), 0, 40, 70 ); - use_trigger.targetname = "zombie_vending"; - use_trigger.script_noteworthy = perk; - use_trigger triggerignoreteam(); - perk_machine = spawn( "script_model", pos[ i ].origin ); - perk_machine.angles = pos[ i ].angles; - perk_machine setmodel( pos[ i ].model ); - bump_trigger = spawn( "trigger_radius", pos[ i ].origin, 0, 35, 64 ); - bump_trigger.script_activated = 1; - bump_trigger.script_sound = "zmb_perks_bump_bottle"; - bump_trigger.targetname = "audio_bump_trigger"; - if ( perk != "specialty_weapupgrade" ) - { - bump_trigger thread thread_bump_trigger(); - } - collision = spawn( "script_model", pos[ i ].origin, 1 ); - collision.angles = pos[ i ].angles; - collision setmodel( "zm_collision_perks1" ); - collision.script_noteworthy = "clip"; - collision disconnectpaths(); - use_trigger.clip = collision; - use_trigger.machine = perk_machine; - use_trigger.bump = bump_trigger; - if ( isDefined( pos[ i ].blocker_model ) ) - { - use_trigger.blocker_model = pos[ i ].blocker_model; - } - if ( isDefined( pos[ i ].script_int ) ) - { - perk_machine.script_int = pos[ i ].script_int; - } - if ( isDefined( pos[ i ].turn_on_notify ) ) - { - perk_machine.turn_on_notify = pos[ i ].turn_on_notify; - } - switch( perk ) - { - case "specialty_quickrevive": - case "specialty_quickrevive_upgrade": - use_trigger.script_sound = "mus_perks_revive_jingle"; - use_trigger.script_string = "revive_perk"; - use_trigger.script_label = "mus_perks_revive_sting"; - use_trigger.target = "vending_revive"; - perk_machine.script_string = "revive_perk"; - perk_machine.targetname = "vending_revive"; - bump_trigger.script_string = "revive_perk"; - break; - i++; - continue; - case "specialty_fastreload": - case "specialty_fastreload_upgrade": - use_trigger.script_sound = "mus_perks_speed_jingle"; - use_trigger.script_string = "speedcola_perk"; - use_trigger.script_label = "mus_perks_speed_sting"; - use_trigger.target = "vending_sleight"; - perk_machine.script_string = "speedcola_perk"; - perk_machine.targetname = "vending_sleight"; - bump_trigger.script_string = "speedcola_perk"; - break; - i++; - continue; - case "specialty_longersprint": - case "specialty_longersprint_upgrade": - use_trigger.script_sound = "mus_perks_stamin_jingle"; - use_trigger.script_string = "marathon_perk"; - use_trigger.script_label = "mus_perks_stamin_sting"; - use_trigger.target = "vending_marathon"; - perk_machine.script_string = "marathon_perk"; - perk_machine.targetname = "vending_marathon"; - bump_trigger.script_string = "marathon_perk"; - break; - i++; - continue; - case "specialty_armorvest": - case "specialty_armorvest_upgrade": - use_trigger.script_sound = "mus_perks_jugganog_jingle"; - use_trigger.script_string = "jugg_perk"; - use_trigger.script_label = "mus_perks_jugganog_sting"; - use_trigger.longjinglewait = 1; - use_trigger.target = "vending_jugg"; - perk_machine.script_string = "jugg_perk"; - perk_machine.targetname = "vending_jugg"; - bump_trigger.script_string = "jugg_perk"; - break; - i++; - continue; - case "specialty_scavenger": - case "specialty_scavenger_upgrade": - use_trigger.script_sound = "mus_perks_tombstone_jingle"; - use_trigger.script_string = "tombstone_perk"; - use_trigger.script_label = "mus_perks_tombstone_sting"; - use_trigger.target = "vending_tombstone"; - perk_machine.script_string = "tombstone_perk"; - perk_machine.targetname = "vending_tombstone"; - bump_trigger.script_string = "tombstone_perk"; - break; - i++; - continue; - case "specialty_rof": - case "specialty_rof_upgrade": - use_trigger.script_sound = "mus_perks_doubletap_jingle"; - use_trigger.script_string = "tap_perk"; - use_trigger.script_label = "mus_perks_doubletap_sting"; - use_trigger.target = "vending_doubletap"; - perk_machine.script_string = "tap_perk"; - perk_machine.targetname = "vending_doubletap"; - bump_trigger.script_string = "tap_perk"; - break; - i++; - continue; - case "specialty_finalstand": - case "specialty_finalstand_upgrade": - use_trigger.script_sound = "mus_perks_whoswho_jingle"; - use_trigger.script_string = "tap_perk"; - use_trigger.script_label = "mus_perks_whoswho_sting"; - use_trigger.target = "vending_chugabud"; - perk_machine.script_string = "tap_perk"; - perk_machine.targetname = "vending_chugabud"; - bump_trigger.script_string = "tap_perk"; - break; - i++; - continue; - case "specialty_additionalprimaryweapon": - case "specialty_additionalprimaryweapon_upgrade": - use_trigger.script_sound = "mus_perks_mulekick_jingle"; - use_trigger.script_string = "tap_perk"; - use_trigger.script_label = "mus_perks_mulekick_sting"; - use_trigger.target = "vending_additionalprimaryweapon"; - perk_machine.script_string = "tap_perk"; - perk_machine.targetname = "vending_additionalprimaryweapon"; - bump_trigger.script_string = "tap_perk"; - break; - i++; - continue; - case "specialty_weapupgrade": - use_trigger.target = "vending_packapunch"; - use_trigger.script_sound = "mus_perks_packa_jingle"; - use_trigger.script_label = "mus_perks_packa_sting"; - use_trigger.longjinglewait = 1; - perk_machine.targetname = "vending_packapunch"; - flag_pos = getstruct( pos[ i ].target, "targetname" ); - if ( isDefined( flag_pos ) ) - { - perk_machine_flag = spawn( "script_model", flag_pos.origin ); - perk_machine_flag.angles = flag_pos.angles; - perk_machine_flag setmodel( flag_pos.model ); - perk_machine_flag.targetname = "pack_flag"; - perk_machine.target = "pack_flag"; - } - bump_trigger.script_string = "perks_rattle"; - break; - i++; - continue; - case "specialty_grenadepulldeath": - case "specialty_grenadepulldeath_upgrade": - use_trigger.script_sound = "mus_perks_speed_jingle"; - use_trigger.script_string = "electric_cherry_perk"; - use_trigger.script_label = "mus_perks_speed_sting"; - use_trigger.target = "vending_electriccherry"; - perk_machine.script_string = "electriccherry_perk"; - perk_machine.targetname = "vendingelectric_cherry"; - bump_trigger.script_string = "electriccherry_perk"; - break; - i++; - continue; - case "specialty_nomotionsensor": - use_trigger.script_sound = "mus_perks_revive_jingle"; - use_trigger.script_string = "vulture_perk"; - use_trigger.script_label = "mus_perks_revive_sting"; - use_trigger.target = "vending_vulture"; - perk_machine.script_string = "vulture_perk"; - perk_machine.targetname = "vending_vulture"; - bump_trigger.script_string = "vulture_perk"; - break; - i++; - continue; - default: - use_trigger.script_sound = "mus_perks_speed_jingle"; - use_trigger.script_string = "speedcola_perk"; - use_trigger.script_label = "mus_perks_speed_sting"; - use_trigger.target = "vending_sleight"; - perk_machine.script_string = "speedcola_perk"; - perk_machine.targetname = "vending_sleight"; - bump_trigger.script_string = "speedcola_perk"; - break; - i++; - continue; - } - } - i++; - } -} - -get_perk_machine_start_state( perk ) -{ - if ( isDefined( level.vending_machines_powered_on_at_start ) && level.vending_machines_powered_on_at_start ) - { - return 1; - } - if ( perk == "specialty_quickrevive" || perk == "specialty_quickrevive_upgrade" ) - { -/# - assert( isDefined( level.revive_machine_is_solo ) ); -#/ - return level.revive_machine_is_solo; - } - return 0; -} - -perks_register_clientfield() -{ - if ( isDefined( level.zombiemode_using_additionalprimaryweapon_perk ) && level.zombiemode_using_additionalprimaryweapon_perk ) - { - registerclientfield( "toplayer", "perk_additional_primary_weapon", 1, 2, "int" ); - } - if ( isDefined( level.zombiemode_using_deadshot_perk ) && level.zombiemode_using_deadshot_perk ) - { - registerclientfield( "toplayer", "perk_dead_shot", 1, 2, "int" ); - } - if ( isDefined( level.zombiemode_using_divetonuke_perk ) && level.zombiemode_using_divetonuke_perk ) - { - registerclientfield( "toplayer", "perk_dive_to_nuke", 1, 2, "int" ); - } - if ( isDefined( level.zombiemode_using_doubletap_perk ) && level.zombiemode_using_doubletap_perk ) - { - registerclientfield( "toplayer", "perk_double_tap", 1, 2, "int" ); - } - if ( isDefined( level.zombiemode_using_juggernaut_perk ) && level.zombiemode_using_juggernaut_perk ) - { - registerclientfield( "toplayer", "perk_juggernaut", 1, 2, "int" ); - } - if ( isDefined( level.zombiemode_using_marathon_perk ) && level.zombiemode_using_marathon_perk ) - { - registerclientfield( "toplayer", "perk_marathon", 1, 2, "int" ); - } - if ( isDefined( level.zombiemode_using_revive_perk ) && level.zombiemode_using_revive_perk ) - { - registerclientfield( "toplayer", "perk_quick_revive", 1, 2, "int" ); - } - if ( isDefined( level.zombiemode_using_sleightofhand_perk ) && level.zombiemode_using_sleightofhand_perk ) - { - registerclientfield( "toplayer", "perk_sleight_of_hand", 1, 2, "int" ); - } - if ( isDefined( level.zombiemode_using_tombstone_perk ) && level.zombiemode_using_tombstone_perk ) - { - registerclientfield( "toplayer", "perk_tombstone", 1, 2, "int" ); - } - if ( isDefined( level.zombiemode_using_perk_intro_fx ) && level.zombiemode_using_perk_intro_fx ) - { - registerclientfield( "scriptmover", "clientfield_perk_intro_fx", 1000, 1, "int" ); - } - if ( isDefined( level.zombiemode_using_chugabud_perk ) && level.zombiemode_using_chugabud_perk ) - { - registerclientfield( "toplayer", "perk_chugabud", 1000, 1, "int" ); - } - if ( isDefined( level.zombiemode_using_electric_cherry_perk ) && level.zombiemode_using_electric_cherry_perk ) - { - registerclientfield( "toplayer", "perk_electric_cherry", 7000, 1, "int" ); - } - if ( isDefined( level.zombiemode_using_vulture_perk ) && level.zombiemode_using_vulture_perk ) - { - registerclientfield( "toplayer", "perk_vulture", 7000, 1, "int" ); - } -} - -thread_bump_trigger() -{ - for ( ;; ) - { - self waittill( "trigger", trigplayer ); - trigplayer playsound( self.script_sound ); - while ( is_player_valid( trigplayer ) && trigplayer istouching( self ) ) - { - wait 0,5; - } - } -} - -reenable_quickrevive( machine_clip, solo_mode ) -{ - if ( isDefined( level.revive_machine_spawned ) && !is_true( level.revive_machine_spawned ) ) - { - return; - } - wait 0,1; - power_state = 0; - if ( is_true( solo_mode ) ) - { - power_state = 1; - should_pause = 1; - players = get_players(); - _a3981 = players; - _k3981 = getFirstArrayKey( _a3981 ); - while ( isDefined( _k3981 ) ) - { - player = _a3981[ _k3981 ]; - if ( isDefined( player.lives ) && player.lives > 0 && power_state ) - { - should_pause = 0; - } - else - { - if ( isDefined( player.lives ) && player.lives < 1 ) - { - should_pause = 1; - } - } - _k3981 = getNextArrayKey( _a3981, _k3981 ); - } - if ( should_pause ) - { - perk_pause( "specialty_quickrevive" ); - } - else - { - perk_unpause( "specialty_quickrevive" ); - } - if ( isDefined( level.solo_revive_init ) && level.solo_revive_init && flag( "solo_revive" ) ) - { - disable_quickrevive( machine_clip ); - return; - } - update_quickrevive_power_state( 1 ); - unhide_quickrevive(); - restart_quickrevive(); - level notify( "revive_off" ); - wait 0,1; - level notify( "stop_quickrevive_logic" ); - } - else - { - if ( isDefined( level._dont_unhide_quickervive_on_hotjoin ) && !level._dont_unhide_quickervive_on_hotjoin ) - { - unhide_quickrevive(); - level notify( "revive_off" ); - wait 0,1; - } - level notify( "revive_hide" ); - level notify( "stop_quickrevive_logic" ); - restart_quickrevive(); - if ( flag( "power_on" ) ) - { - power_state = 1; - } - update_quickrevive_power_state( power_state ); - } - level thread turn_revive_on(); - if ( power_state ) - { - perk_unpause( "specialty_quickrevive" ); - level notify( "revive_on" ); - wait 0,1; - level notify( "specialty_quickrevive_power_on" ); - } - else - { - perk_pause( "specialty_quickrevive" ); - } - if ( !is_true( solo_mode ) ) - { - return; - } - should_pause = 1; - players = get_players(); - _a4059 = players; - _k4059 = getFirstArrayKey( _a4059 ); - while ( isDefined( _k4059 ) ) - { - player = _a4059[ _k4059 ]; - if ( !is_player_valid( player ) ) - { - } - else if ( player hasperk( "specialty_quickrevive" ) ) - { - if ( !isDefined( player.lives ) ) - { - player.lives = 0; - } - if ( !isDefined( level.solo_lives_given ) ) - { - level.solo_lives_given = 0; - } - level.solo_lives_given++; - player.lives++; - if ( isDefined( player.lives ) && player.lives > 0 && power_state ) - { - should_pause = 0; - break; - } - else - { - should_pause = 1; - } - } - _k4059 = getNextArrayKey( _a4059, _k4059 ); - } - if ( should_pause ) - { - perk_pause( "specialty_quickrevive" ); - } - else - { - perk_unpause( "specialty_quickrevive" ); - } -} - -update_quickrevive_power_state( poweron ) -{ - _a4097 = level.powered_items; - _k4097 = getFirstArrayKey( _a4097 ); - while ( isDefined( _k4097 ) ) - { - item = _a4097[ _k4097 ]; - if ( isDefined( item.target ) && isDefined( item.target.script_noteworthy ) && item.target.script_noteworthy == "specialty_quickrevive" ) - { - if ( item.power && !poweron ) - { - if ( !isDefined( item.powered_count ) ) - { - item.powered_count = 0; - } - else - { - if ( item.powered_count > 0 ) - { - item.powered_count--; - - } - } - } - else - { - if ( !item.power && poweron ) - { - if ( !isDefined( item.powered_count ) ) - { - item.powered_count = 0; - } - item.powered_count++; - } - } - if ( !isDefined( item.depowered_count ) ) - { - item.depowered_count = 0; - } - item.power = poweron; - } - _k4097 = getNextArrayKey( _a4097, _k4097 ); - } -} - -restart_quickrevive() -{ - triggers = getentarray( "zombie_vending", "targetname" ); - _a4137 = triggers; - _k4137 = getFirstArrayKey( _a4137 ); - while ( isDefined( _k4137 ) ) - { - trigger = _a4137[ _k4137 ]; - if ( !isDefined( trigger.script_noteworthy ) ) - { - } - else - { - if ( trigger.script_noteworthy == "specialty_quickrevive" || trigger.script_noteworthy == "specialty_quickrevive_upgrade" ) - { - trigger notify( "stop_quickrevive_logic" ); - trigger thread vending_trigger_think(); - trigger trigger_on(); - } - } - _k4137 = getNextArrayKey( _a4137, _k4137 ); - } -} - -disable_quickrevive( machine_clip ) -{ - if ( is_true( level.solo_revive_init ) && flag( "solo_revive" ) && isDefined( level.quick_revive_machine ) ) - { - triggers = getentarray( "zombie_vending", "targetname" ); - _a4159 = triggers; - _k4159 = getFirstArrayKey( _a4159 ); - while ( isDefined( _k4159 ) ) - { - trigger = _a4159[ _k4159 ]; - if ( !isDefined( trigger.script_noteworthy ) ) - { - } - else - { - if ( trigger.script_noteworthy == "specialty_quickrevive" || trigger.script_noteworthy == "specialty_quickrevive_upgrade" ) - { - trigger trigger_off(); - } - } - _k4159 = getNextArrayKey( _a4159, _k4159 ); - } - _a4171 = level.powered_items; - _k4171 = getFirstArrayKey( _a4171 ); - while ( isDefined( _k4171 ) ) - { - item = _a4171[ _k4171 ]; - if ( isDefined( item.target ) && isDefined( item.target.script_noteworthy ) && item.target.script_noteworthy == "specialty_quickrevive" ) - { - item.power = 1; - item.self_powered = 1; - } - _k4171 = getNextArrayKey( _a4171, _k4171 ); - } - if ( isDefined( level.quick_revive_machine.original_pos ) ) - { - level.quick_revive_default_origin = level.quick_revive_machine.original_pos; - level.quick_revive_default_angles = level.quick_revive_machine.original_angles; - } - move_org = level.quick_revive_default_origin; - if ( isDefined( level.quick_revive_linked_ent ) ) - { - move_org = level.quick_revive_linked_ent.origin; - if ( isDefined( level.quick_revive_linked_ent_offset ) ) - { - move_org += level.quick_revive_linked_ent_offset; - } - level.quick_revive_machine unlink(); - } - level.quick_revive_machine moveto( move_org + vectorScale( ( 0, -1, 0 ), 40 ), 3 ); - direction = level.quick_revive_machine.origin; - direction = ( direction[ 1 ], direction[ 0 ], 0 ); - if ( direction[ 1 ] < 0 || direction[ 0 ] > 0 && direction[ 1 ] > 0 ) - { - direction = ( direction[ 0 ], direction[ 1 ] * -1, 0 ); - } - else - { - if ( direction[ 0 ] < 0 ) - { - direction = ( direction[ 0 ] * -1, direction[ 1 ], 0 ); - } - } - level.quick_revive_machine vibrate( direction, 10, 0,5, 4 ); - level.quick_revive_machine waittill( "movedone" ); - level.quick_revive_machine hide(); - level.quick_revive_machine.ishidden = 1; - if ( isDefined( level.quick_revive_machine_clip ) ) - { - level.quick_revive_machine_clip connectpaths(); - level.quick_revive_machine_clip trigger_off(); - } - playfx( level._effect[ "poltergeist" ], level.quick_revive_machine.origin ); - if ( isDefined( level.quick_revive_trigger ) && isDefined( level.quick_revive_trigger.blocker_model ) ) - { - level.quick_revive_trigger.blocker_model show(); - } - level notify( "revive_hide" ); - } -} - -unhide_quickrevive() -{ - while ( players_are_in_perk_area( level.quick_revive_machine ) ) - { - wait 0,1; - } - if ( isDefined( level.quick_revive_machine_clip ) ) - { - level.quick_revive_machine_clip trigger_on(); - level.quick_revive_machine_clip disconnectpaths(); - } - if ( isDefined( level.quick_revive_final_pos ) ) - { - level.quick_revive_machine.origin = level.quick_revive_final_pos; - } - playfx( level._effect[ "poltergeist" ], level.quick_revive_machine.origin ); - if ( isDefined( level.quick_revive_trigger ) && isDefined( level.quick_revive_trigger.blocker_model ) ) - { - level.quick_revive_trigger.blocker_model hide(); - } - level.quick_revive_machine show(); - if ( isDefined( level.quick_revive_machine.original_pos ) ) - { - level.quick_revive_default_origin = level.quick_revive_machine.original_pos; - level.quick_revive_default_angles = level.quick_revive_machine.original_angles; - } - direction = level.quick_revive_machine.origin; - direction = ( direction[ 1 ], direction[ 0 ], 0 ); - if ( direction[ 1 ] < 0 || direction[ 0 ] > 0 && direction[ 1 ] > 0 ) - { - direction = ( direction[ 0 ], direction[ 1 ] * -1, 0 ); - } - else - { - if ( direction[ 0 ] < 0 ) - { - direction = ( direction[ 0 ] * -1, direction[ 1 ], 0 ); - } - } - org = level.quick_revive_default_origin; - if ( isDefined( level.quick_revive_linked_ent ) ) - { - org = level.quick_revive_linked_ent.origin; - if ( isDefined( level.quick_revive_linked_ent_offset ) ) - { - org += level.quick_revive_linked_ent_offset; - } - } - if ( isDefined( level.quick_revive_linked_ent_moves ) && !level.quick_revive_linked_ent_moves && level.quick_revive_machine.origin != org ) - { - level.quick_revive_machine moveto( org, 3 ); - level.quick_revive_machine vibrate( direction, 10, 0,5, 2,9 ); - level.quick_revive_machine waittill( "movedone" ); - level.quick_revive_machine.angles = level.quick_revive_default_angles; - } - else - { - if ( isDefined( level.quick_revive_linked_ent ) ) - { - org = level.quick_revive_linked_ent.origin; - if ( isDefined( level.quick_revive_linked_ent_offset ) ) - { - org += level.quick_revive_linked_ent_offset; - } - level.quick_revive_machine.origin = org; - } - level.quick_revive_machine vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 ); - } - if ( isDefined( level.quick_revive_linked_ent ) ) - { - level.quick_revive_machine linkto( level.quick_revive_linked_ent ); - } - level.quick_revive_machine.ishidden = 0; -} - -players_are_in_perk_area( perk_machine ) -{ - perk_area_origin = level.quick_revive_default_origin; - if ( isDefined( perk_machine._linked_ent ) ) - { - perk_area_origin = perk_machine._linked_ent.origin; - if ( isDefined( perk_machine._linked_ent_offset ) ) - { - perk_area_origin += perk_machine._linked_ent_offset; - } - } - in_area = 0; - players = get_players(); - dist_check = 9216; - _a4349 = players; - _k4349 = getFirstArrayKey( _a4349 ); - while ( isDefined( _k4349 ) ) - { - player = _a4349[ _k4349 ]; - if ( distancesquared( player.origin, perk_area_origin ) < dist_check ) - { - return 1; - } - _k4349 = getNextArrayKey( _a4349, _k4349 ); - } - return 0; -} - -perk_hostmigration() -{ - level endon( "end_game" ); - level notify( "perk_hostmigration" ); - level endon( "perk_hostmigration" ); - while ( 1 ) - { - level waittill( "host_migration_end" ); - jug = getentarray( "vending_jugg", "targetname" ); - tap = getentarray( "vending_doubletap", "targetname" ); - mar = getentarray( "vending_marathon", "targetname" ); - flop = getentarray( "vending_divetonuke", "targetname" ); - deadshot = getentarray( "vending_deadshot", "targetname" ); - tomb = getentarray( "vending_tombstone", "targetname" ); - extraweap = getentarray( "vending_additionalprimaryweapon", "targetname" ); - sleight = getentarray( "vending_sleight", "targetname" ); - revive = getentarray( "vending_revive", "targetname" ); - chugabud = getentarray( "vending_chugabud", "targetname" ); - electric_cherry = getentarray( "vending_electriccherry", "targetname" ); - vulture = getentarray( "vending_vulture", "targetname" ); - _a4389 = jug; - _k4389 = getFirstArrayKey( _a4389 ); - while ( isDefined( _k4389 ) ) - { - perk = _a4389[ _k4389 ]; - if ( isDefined( perk.model ) && perk.model == "zombie_vending_jugg_on" ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "jugger_light" ); - } - _k4389 = getNextArrayKey( _a4389, _k4389 ); - } - _a4398 = tap; - _k4398 = getFirstArrayKey( _a4398 ); - while ( isDefined( _k4398 ) ) - { - perk = _a4398[ _k4398 ]; - if ( isDefined( perk.model ) && perk.model == "zombie_vending_doubletap2_on" ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "doubletap_light" ); - } - _k4398 = getNextArrayKey( _a4398, _k4398 ); - } - _a4407 = mar; - _k4407 = getFirstArrayKey( _a4407 ); - while ( isDefined( _k4407 ) ) - { - perk = _a4407[ _k4407 ]; - if ( isDefined( perk.model ) && perk.model == "zombie_vending_marathon_on" ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "marathon_light" ); - } - _k4407 = getNextArrayKey( _a4407, _k4407 ); - } - _a4416 = flop; - _k4416 = getFirstArrayKey( _a4416 ); - while ( isDefined( _k4416 ) ) - { - perk = _a4416[ _k4416 ]; - if ( isDefined( perk.model ) && perk.model == "zombie_vending_nuke_on" ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "divetonuke_light" ); - } - _k4416 = getNextArrayKey( _a4416, _k4416 ); - } - _a4425 = deadshot; - _k4425 = getFirstArrayKey( _a4425 ); - while ( isDefined( _k4425 ) ) - { - perk = _a4425[ _k4425 ]; - if ( isDefined( perk.model ) && perk.model == "zombie_vending_ads_on" ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "deadshot_light" ); - } - _k4425 = getNextArrayKey( _a4425, _k4425 ); - } - _a4434 = tomb; - _k4434 = getFirstArrayKey( _a4434 ); - while ( isDefined( _k4434 ) ) - { - perk = _a4434[ _k4434 ]; - if ( isDefined( perk.model ) && perk.model == "zombie_vending_tombstone_on" ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "tombstone_light" ); - } - _k4434 = getNextArrayKey( _a4434, _k4434 ); - } - _a4443 = extraweap; - _k4443 = getFirstArrayKey( _a4443 ); - while ( isDefined( _k4443 ) ) - { - perk = _a4443[ _k4443 ]; - if ( isDefined( perk.model ) && perk.model == "zombie_vending_three_gun_on" ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "additionalprimaryweapon_light" ); - } - _k4443 = getNextArrayKey( _a4443, _k4443 ); - } - _a4452 = sleight; - _k4452 = getFirstArrayKey( _a4452 ); - while ( isDefined( _k4452 ) ) - { - perk = _a4452[ _k4452 ]; - if ( isDefined( perk.model ) && perk.model == "zombie_vending_sleight_on" ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "sleight_light" ); - } - _k4452 = getNextArrayKey( _a4452, _k4452 ); - } - _a4461 = revive; - _k4461 = getFirstArrayKey( _a4461 ); - while ( isDefined( _k4461 ) ) - { - perk = _a4461[ _k4461 ]; - if ( isDefined( perk.model ) && perk.model == "zombie_vending_revive_on" ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "revive_light" ); - } - _k4461 = getNextArrayKey( _a4461, _k4461 ); - } - _a4470 = chugabud; - _k4470 = getFirstArrayKey( _a4470 ); - while ( isDefined( _k4470 ) ) - { - perk = _a4470[ _k4470 ]; - if ( isDefined( perk.model ) && perk.model == "zombie_vending_revive_on" ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "tombstone_light" ); - } - _k4470 = getNextArrayKey( _a4470, _k4470 ); - } - _a4480 = electric_cherry; - _k4480 = getFirstArrayKey( _a4480 ); - while ( isDefined( _k4480 ) ) - { - perk = _a4480[ _k4480 ]; - if ( isDefined( perk.model ) && perk.model == "zombie_vending_revive_on" ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "tombstone_light" ); - } - _k4480 = getNextArrayKey( _a4480, _k4480 ); - } - _a4510 = vulture; - _k4510 = getFirstArrayKey( _a4510 ); - while ( isDefined( _k4510 ) ) - { - perk = _a4510[ _k4510 ]; - if ( isDefined( perk.model ) && perk.model == "zombie_vending_revive_on" ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "vulture_light" ); - } - _k4510 = getNextArrayKey( _a4510, _k4510 ); - } - } -} - -get_perk_array( ignore_chugabud ) -{ - perk_array = []; - if ( self hasperk( "specialty_armorvest" ) ) - { - perk_array[ perk_array.size ] = "specialty_armorvest"; - } - if ( self hasperk( "specialty_deadshot" ) ) - { - perk_array[ perk_array.size ] = "specialty_deadshot"; - } - if ( self hasperk( "specialty_fastreload" ) ) - { - perk_array[ perk_array.size ] = "specialty_fastreload"; - } - if ( self hasperk( "specialty_flakjacket" ) ) - { - perk_array[ perk_array.size ] = "specialty_flakjacket"; - } - if ( self hasperk( "specialty_longersprint" ) ) - { - perk_array[ perk_array.size ] = "specialty_longersprint"; - } - if ( self hasperk( "specialty_quickrevive" ) ) - { - perk_array[ perk_array.size ] = "specialty_quickrevive"; - } - if ( self hasperk( "specialty_rof" ) ) - { - perk_array[ perk_array.size ] = "specialty_rof"; - } - if ( self hasperk( "specialty_additionalprimaryweapon" ) ) - { - perk_array[ perk_array.size ] = "specialty_additionalprimaryweapon"; - } - if ( !isDefined( ignore_chugabud ) || ignore_chugabud == 0 ) - { - if ( self hasperk( "specialty_finalstand" ) ) - { - perk_array[ perk_array.size ] = "specialty_finalstand"; - } - } - return perk_array; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_pers_upgrades.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_pers_upgrades.gsc deleted file mode 100644 index 14c47d1..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_pers_upgrades.gsc +++ /dev/null @@ -1,359 +0,0 @@ -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_pers_upgrades_system; -#include maps/mp/_utility; -#include common_scripts/utility; - -pers_upgrade_init() -{ - setup_pers_upgrade_boards(); - setup_pers_upgrade_revive(); - setup_pers_upgrade_multi_kill_headshots(); - setup_pers_upgrade_cash_back(); - setup_pers_upgrade_insta_kill(); - setup_pers_upgrade_jugg(); - setup_pers_upgrade_carpenter(); - level thread pers_upgrades_monitor(); -} - -setup_pers_upgrade_boards() -{ - if ( isDefined( level.pers_upgrade_boards ) && level.pers_upgrade_boards ) - { - level.pers_boarding_round_start = 10; - level.pers_boarding_number_of_boards_required = 74; - pers_register_upgrade( "board", ::pers_upgrade_boards_active, "pers_boarding", level.pers_boarding_number_of_boards_required, 0 ); - } -} - -setup_pers_upgrade_revive() -{ - if ( isDefined( level.pers_upgrade_revive ) && level.pers_upgrade_revive ) - { - level.pers_revivenoperk_number_of_revives_required = 17; - level.pers_revivenoperk_number_of_chances_to_keep = 1; - pers_register_upgrade( "revive", ::pers_upgrade_revive_active, "pers_revivenoperk", level.pers_revivenoperk_number_of_revives_required, 1 ); - } -} - -setup_pers_upgrade_multi_kill_headshots() -{ - if ( isDefined( level.pers_upgrade_multi_kill_headshots ) && level.pers_upgrade_multi_kill_headshots ) - { - level.pers_multikill_headshots_required = 5; - level.pers_multikill_headshots_upgrade_reset_counter = 25; - pers_register_upgrade( "multikill_headshots", ::pers_upgrade_headshot_active, "pers_multikill_headshots", level.pers_multikill_headshots_required, 0 ); - } -} - -setup_pers_upgrade_cash_back() -{ - if ( isDefined( level.pers_upgrade_cash_back ) && level.pers_upgrade_cash_back ) - { - level.pers_cash_back_num_perks_required = 50; - level.pers_cash_back_perk_buys_prone_required = 15; - level.pers_cash_back_failed_prones = 1; - level.pers_cash_back_money_reward = 1000; - pers_register_upgrade( "cash_back", ::pers_upgrade_cash_back_active, "pers_cash_back_bought", level.pers_cash_back_num_perks_required, 0 ); - add_pers_upgrade_stat( "cash_back", "pers_cash_back_prone", level.pers_cash_back_perk_buys_prone_required ); - } -} - -setup_pers_upgrade_insta_kill() -{ - if ( isDefined( level.pers_upgrade_insta_kill ) && level.pers_upgrade_insta_kill ) - { - level.pers_insta_kill_num_required = 2; - level.pers_insta_kill_upgrade_active_time = 18; - pers_register_upgrade( "insta_kill", ::pers_upgrade_insta_kill_active, "pers_insta_kill", level.pers_insta_kill_num_required, 0 ); - } -} - -setup_pers_upgrade_jugg() -{ - if ( isDefined( level.pers_upgrade_jugg ) && level.pers_upgrade_jugg ) - { - level.pers_jugg_hit_and_die_total = 3; - level.pers_jugg_hit_and_die_round_limit = 2; - level.pers_jugg_round_reached_max = 1; - level.pers_jugg_round_lose_target = 15; - level.pers_jugg_upgrade_health_bonus = 90; - pers_register_upgrade( "jugg", ::pers_upgrade_jugg_active, "pers_jugg", level.pers_jugg_hit_and_die_total, 0 ); - } -} - -pers_upgrade_jugg_player_death_stat() -{ - if ( isDefined( level.pers_upgrade_jugg ) && level.pers_upgrade_jugg ) - { - if ( maps/mp/zombies/_zm_utility::is_classic() ) - { - if ( isDefined( self.pers_upgrades_awarded[ "jugg" ] ) && !self.pers_upgrades_awarded[ "jugg" ] ) - { - if ( level.round_number <= level.pers_jugg_hit_and_die_round_limit ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "pers_jugg", 0 ); - } - } - } - } -} - -setup_pers_upgrade_carpenter() -{ - if ( isDefined( level.pers_upgrade_carpenter ) && level.pers_upgrade_carpenter ) - { - level.pers_carpenter_zombie_kills = 1; - pers_register_upgrade( "carpenter", ::pers_upgrade_carpenter_active, "pers_carpenter", level.pers_carpenter_zombie_kills, 0 ); - } -} - -pers_upgrade_boards_active() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "pers_stats_end_of_round" ); - if ( self.rebuild_barrier_reward == 0 ) - { - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_boarding", 0 ); - return; - } - } -} - -pers_upgrade_revive_active() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "player_failed_revive" ); - if ( self.failed_revives >= level.pers_revivenoperk_number_of_chances_to_keep ) - { - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_revivenoperk", 0 ); - self.failed_revives = 0; - return; - } - } -} - -pers_upgrade_headshot_active() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "zombie_death_no_headshot" ); - self.non_headshot_kill_counter++; - if ( self.non_headshot_kill_counter >= level.pers_multikill_headshots_upgrade_reset_counter ) - { - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_multikill_headshots", 0 ); - self.non_headshot_kill_counter = 0; - return; - } - } -} - -pers_upgrade_cash_back_active() -{ - self endon( "disconnect" ); - wait 0,5; - wait 0,5; - while ( 1 ) - { - self waittill( "cash_back_failed_prone" ); - wait 0,1; - self.failed_cash_back_prones++; - if ( self.failed_cash_back_prones >= level.pers_cash_back_failed_prones ) - { - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_cash_back_bought", 0 ); - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_cash_back_prone", 0 ); - self.failed_cash_back_prones = 0; - wait 0,4; - return; - } - } -} - -pers_upgrade_insta_kill_active() -{ - self endon( "disconnect" ); - wait 0,2; - wait 0,2; - self waittill( "pers_melee_swipe" ); - if ( isDefined( level.pers_melee_swipe_zombie_swiper ) ) - { - e_zombie = level.pers_melee_swipe_zombie_swiper; - if ( isalive( e_zombie ) && isDefined( e_zombie.is_zombie ) && e_zombie.is_zombie ) - { - e_zombie.marked_for_insta_upgraded_death = 1; - e_zombie dodamage( e_zombie.health + 666, e_zombie.origin, self, self, "none", "MOD_PISTOL_BULLET", 0, "knife_zm" ); - } - level.pers_melee_swipe_zombie_swiper = undefined; - } - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_insta_kill", 0 ); - self kill_insta_kill_upgrade_hud_icon(); - wait 0,4; -} - -is_insta_kill_upgraded_and_active() -{ - if ( is_classic() ) - { - if ( self maps/mp/zombies/_zm_powerups::is_insta_kill_active() ) - { - if ( isDefined( self.pers_upgrades_awarded[ "insta_kill" ] ) && self.pers_upgrades_awarded[ "insta_kill" ] ) - { - return 1; - } - } - } - return 0; -} - -pers_upgrade_jugg_active() -{ - self endon( "disconnect" ); - wait 0,5; - wait 0,5; - self maps/mp/zombies/_zm_perks::perk_set_max_health_if_jugg( "jugg_upgrade", 1, 0 ); - while ( 1 ) - { - level waittill( "start_of_round" ); - if ( level.round_number == level.pers_jugg_round_lose_target ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "pers_jugg_downgrade_count", 0 ); - wait 0,5; - if ( self.pers[ "pers_jugg_downgrade_count" ] >= level.pers_jugg_round_reached_max ) - { - break; - } - } - else - { - } - } - self maps/mp/zombies/_zm_perks::perk_set_max_health_if_jugg( "jugg_upgrade", 1, 1 ); - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_jugg", 0 ); - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_jugg_downgrade_count", 0 ); -} - -pers_upgrade_carpenter_active() -{ - self endon( "disconnect" ); - wait 0,2; - wait 0,2; - level waittill( "carpenter_finished" ); - self.pers_carpenter_kill = undefined; - while ( 1 ) - { - self waittill( "carpenter_zombie_killed_check_finished" ); - if ( !isDefined( self.pers_carpenter_kill ) ) - { - break; - } - else - { - self.pers_carpenter_kill = undefined; - } - } - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_carpenter", 0 ); - wait 0,4; -} - -persistent_carpenter_ability_check() -{ - if ( isDefined( level.pers_upgrade_carpenter ) && level.pers_upgrade_carpenter ) - { - self endon( "disconnect" ); - if ( isDefined( self.pers_upgrades_awarded[ "carpenter" ] ) && self.pers_upgrades_awarded[ "carpenter" ] ) - { - level.pers_carpenter_boards_active = 1; - } - self.pers_carpenter_zombie_check_active = 1; - self.pers_carpenter_kill = undefined; - carpenter_extra_time = 3; - carpenter_finished_start_time = undefined; - level.carpenter_finished_start_time = undefined; - while ( 1 ) - { - if ( !isDefined( level.carpenter_powerup_active ) ) - { - if ( !isDefined( level.carpenter_finished_start_time ) ) - { - level.carpenter_finished_start_time = getTime(); - } - time = getTime(); - dt = ( time - level.carpenter_finished_start_time ) / 1000; - if ( dt >= carpenter_extra_time ) - { - break; - } - } - else if ( isDefined( self.pers_carpenter_kill ) ) - { - if ( isDefined( self.pers_upgrades_awarded[ "carpenter" ] ) && self.pers_upgrades_awarded[ "carpenter" ] ) - { - break; - } - else self maps/mp/zombies/_zm_stats::increment_client_stat( "pers_carpenter", 0 ); - } - wait 0,01; - } - self notify( "carpenter_zombie_killed_check_finished" ); - self.pers_carpenter_zombie_check_active = undefined; - level.pers_carpenter_boards_active = undefined; - } -} - -pers_zombie_death_location_check( attacker, v_pos ) -{ - if ( isDefined( level.pers_upgrade_carpenter ) && level.pers_upgrade_carpenter ) - { - if ( is_classic() ) - { - if ( is_player_valid( attacker ) ) - { - if ( isDefined( attacker.pers_carpenter_zombie_check_active ) ) - { - if ( !check_point_in_playable_area( v_pos ) ) - { - attacker.pers_carpenter_kill = 1; - } - } - } - } - } -} - -insta_kill_pers_upgrade_icon() -{ - if ( self.zombie_vars[ "zombie_powerup_insta_kill_ug_on" ] ) - { - self.zombie_vars[ "zombie_powerup_insta_kill_ug_time" ] = level.pers_insta_kill_upgrade_active_time; - return; - } - self.zombie_vars[ "zombie_powerup_insta_kill_ug_on" ] = 1; - self._show_solo_hud = 1; - self thread time_remaining_pers_upgrade(); -} - -time_remaining_pers_upgrade() -{ - self endon( "disconnect" ); - self endon( "kill_insta_kill_upgrade_hud_icon" ); - while ( self.zombie_vars[ "zombie_powerup_insta_kill_ug_time" ] >= 0 ) - { - wait 0,05; - self.zombie_vars[ "zombie_powerup_insta_kill_ug_time" ] -= 0,05; - } - self kill_insta_kill_upgrade_hud_icon(); -} - -kill_insta_kill_upgrade_hud_icon() -{ - self.zombie_vars[ "zombie_powerup_insta_kill_ug_on" ] = 0; - self._show_solo_hud = 0; - self.zombie_vars[ "zombie_powerup_insta_kill_ug_time" ] = level.pers_insta_kill_upgrade_active_time; - self notify( "kill_insta_kill_upgrade_hud_icon" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_pers_upgrades_system.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_pers_upgrades_system.gsc deleted file mode 100644 index d6e21ee..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_pers_upgrades_system.gsc +++ /dev/null @@ -1,242 +0,0 @@ -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -pers_register_upgrade( name, upgrade_active_func, stat_name, stat_desired_value, game_end_reset_if_not_achieved ) -{ - if ( !isDefined( level.pers_upgrades ) ) - { - level.pers_upgrades = []; - level.pers_upgrades_keys = []; - } - if ( isDefined( level.pers_upgrades[ name ] ) ) - { -/# - assert( 0, "A persistent upgrade is already registered for name: " + name ); -#/ - } - level.pers_upgrades_keys[ level.pers_upgrades_keys.size ] = name; - level.pers_upgrades[ name ] = spawnstruct(); - level.pers_upgrades[ name ].stat_names = []; - level.pers_upgrades[ name ].stat_desired_values = []; - level.pers_upgrades[ name ].upgrade_active_func = upgrade_active_func; - level.pers_upgrades[ name ].game_end_reset_if_not_achieved = game_end_reset_if_not_achieved; - add_pers_upgrade_stat( name, stat_name, stat_desired_value ); -} - -add_pers_upgrade_stat( name, stat_name, stat_desired_value ) -{ - if ( !isDefined( level.pers_upgrades[ name ] ) ) - { -/# - assert( 0, name + " - Persistent upgrade is not registered yet." ); -#/ - } - stats_size = level.pers_upgrades[ name ].stat_names.size; - level.pers_upgrades[ name ].stat_names[ stats_size ] = stat_name; - level.pers_upgrades[ name ].stat_desired_values[ stats_size ] = stat_desired_value; -} - -pers_upgrades_monitor() -{ - if ( !isDefined( level.pers_upgrades ) ) - { - return; - } - if ( !is_classic() ) - { - return; - } - level thread wait_for_game_end(); - while ( 1 ) - { - waittillframeend; - players = getplayers(); - player_index = 0; - while ( player_index < players.size ) - { - player = players[ player_index ]; - if ( is_player_valid( player ) && isDefined( player.stats_this_frame ) ) - { - if ( !player.stats_this_frame.size && isDefined( player.pers_upgrade_force_test ) && !player.pers_upgrade_force_test ) - { - player_index++; - continue; - } - else - { - pers_upgrade_index = 0; - while ( pers_upgrade_index < level.pers_upgrades_keys.size ) - { - pers_upgrade = level.pers_upgrades[ level.pers_upgrades_keys[ pers_upgrade_index ] ]; - is_stat_updated = player is_any_pers_upgrade_stat_updated( pers_upgrade ); - if ( is_stat_updated ) - { - should_award = player check_pers_upgrade( pers_upgrade ); - if ( should_award ) - { - if ( isDefined( player.pers_upgrades_awarded[ level.pers_upgrades_keys[ pers_upgrade_index ] ] ) && player.pers_upgrades_awarded[ level.pers_upgrades_keys[ pers_upgrade_index ] ] ) - { - pers_upgrade_index++; - continue; - } - else - { - player.pers_upgrades_awarded[ level.pers_upgrades_keys[ pers_upgrade_index ] ] = 1; - if ( flag( "initial_blackscreen_passed" ) && !is_true( player.is_hotjoining ) ) - { - player playsoundtoplayer( "evt_player_upgrade", player ); - player delay_thread( 1, ::play_vox_to_player, "general", "upgrade" ); - if ( isDefined( player.upgrade_fx_origin ) ) - { - fx_org = player.upgrade_fx_origin; - player.upgrade_fx_origin = undefined; - } - else - { - fx_org = player.origin; - v_dir = anglesToForward( player getplayerangles() ); - v_up = anglesToUp( player getplayerangles() ); - fx_org = ( fx_org + ( v_dir * 10 ) ) + ( v_up * 10 ); - } - playfx( level._effect[ "upgrade_aquired" ], fx_org ); - level thread maps/mp/zombies/_zm::disable_end_game_intermission( 1,5 ); - } -/# - player iprintlnbold( "Upgraded!" ); -#/ - if ( isDefined( pers_upgrade.upgrade_active_func ) ) - { - player thread [[ pers_upgrade.upgrade_active_func ]](); - } - pers_upgrade_index++; - continue; - } - else - { - if ( isDefined( player.pers_upgrades_awarded[ level.pers_upgrades_keys[ pers_upgrade_index ] ] ) && player.pers_upgrades_awarded[ level.pers_upgrades_keys[ pers_upgrade_index ] ] ) - { - if ( flag( "initial_blackscreen_passed" ) && !is_true( player.is_hotjoining ) ) - { - player playsoundtoplayer( "evt_player_downgrade", player ); - } -/# - player iprintlnbold( "Downgraded!" ); -#/ - } - player.pers_upgrades_awarded[ level.pers_upgrades_keys[ pers_upgrade_index ] ] = 0; - } - } - } - pers_upgrade_index++; - } - player.pers_upgrade_force_test = 0; - player.stats_this_frame = []; - } - } - player_index++; - } - wait 0,05; - } -} - -wait_for_game_end() -{ - if ( !is_classic() ) - { - return; - } - level waittill( "end_game" ); - players = getplayers(); - player_index = 0; - while ( player_index < players.size ) - { - player = players[ player_index ]; - index = 0; - while ( index < level.pers_upgrades_keys.size ) - { - str_name = level.pers_upgrades_keys[ index ]; - game_end_reset_if_not_achieved = level.pers_upgrades[ str_name ].game_end_reset_if_not_achieved; - while ( isDefined( game_end_reset_if_not_achieved ) && game_end_reset_if_not_achieved == 1 ) - { - while ( isDefined( player.pers_upgrades_awarded[ str_name ] ) && !player.pers_upgrades_awarded[ str_name ] ) - { - stat_index = 0; - while ( stat_index < level.pers_upgrades[ str_name ].stat_names.size ) - { - player maps/mp/zombies/_zm_stats::zero_client_stat( level.pers_upgrades[ str_name ].stat_names[ stat_index ], 0 ); - stat_index++; - } - } - } - index++; - } - player_index++; - } -} - -check_pers_upgrade( pers_upgrade ) -{ - should_award = 1; - i = 0; - while ( i < pers_upgrade.stat_names.size ) - { - stat_name = pers_upgrade.stat_names[ i ]; - should_award = self check_pers_upgrade_stat( stat_name, pers_upgrade.stat_desired_values[ i ] ); - if ( !should_award ) - { - break; - } - else - { - i++; - } - } - return should_award; -} - -is_any_pers_upgrade_stat_updated( pers_upgrade ) -{ - if ( isDefined( self.pers_upgrade_force_test ) && self.pers_upgrade_force_test ) - { - return 1; - } - result = 0; - i = 0; - while ( i < pers_upgrade.stat_names.size ) - { - stat_name = pers_upgrade.stat_names[ i ]; - if ( isDefined( self.stats_this_frame[ stat_name ] ) ) - { - result = 1; - break; - } - else - { - i++; - } - } - return result; -} - -check_pers_upgrade_stat( stat_name, stat_desired_value ) -{ - should_award = 1; - current_stat_value = self maps/mp/zombies/_zm_stats::get_global_stat( stat_name ); - if ( current_stat_value < stat_desired_value ) - { - should_award = 0; - } - return should_award; -} - -round_end() -{ - if ( !is_classic() ) - { - return; - } - self notify( "pers_stats_end_of_round" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_playerhealth.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_playerhealth.gsc deleted file mode 100644 index 5c641f1..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_playerhealth.gsc +++ /dev/null @@ -1,583 +0,0 @@ -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( !isDefined( level.script ) ) - { - level.script = tolower( getDvar( "mapname" ) ); - } - precacheshader( "overlay_low_health" ); - level.global_damage_func_ads = ::empty_kill_func; - level.global_damage_func = ::empty_kill_func; - level.difficultytype[ 0 ] = "easy"; - level.difficultytype[ 1 ] = "normal"; - level.difficultytype[ 2 ] = "hardened"; - level.difficultytype[ 3 ] = "veteran"; - level.difficultystring[ "easy" ] = &"GAMESKILL_EASY"; - level.difficultystring[ "normal" ] = &"GAMESKILL_NORMAL"; - level.difficultystring[ "hardened" ] = &"GAMESKILL_HARDENED"; - level.difficultystring[ "veteran" ] = &"GAMESKILL_VETERAN"; -/# - thread playerhealthdebug(); -#/ - level.gameskill = 1; - switch( level.gameskill ) - { - case 0: - setdvar( "currentDifficulty", "easy" ); - break; - case 1: - setdvar( "currentDifficulty", "normal" ); - break; - case 2: - setdvar( "currentDifficulty", "hardened" ); - break; - case 3: - setdvar( "currentDifficulty", "veteran" ); - break; - } - logstring( "difficulty: " + level.gameskill ); - level.player_deathinvulnerabletime = 1700; - level.longregentime = 5000; - level.healthoverlaycutoff = 0,2; - level.invultime_preshield = 0,35; - level.invultime_onshield = 0,5; - level.invultime_postshield = 0,3; - level.playerhealth_regularregendelay = 2400; - level.worthydamageratio = 0,1; - setdvar( "player_meleeDamageMultiplier", 0,4 ); - onplayerconnect_callback( ::onplayerconnect ); -} - -onplayerconnect() -{ - self thread onplayerspawned(); -} - -onplayerspawned() -{ - for ( ;; ) - { - self waittill( "spawned_player" ); - self maps/mp/zombies/_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); - if ( level.createfx_enabled ) - { - continue; - } - else - { - self notify( "noHealthOverlay" ); - self thread playerhealthregen(); - } - } -} - -playerhurtcheck() -{ - self endon( "noHealthOverlay" ); - self.hurtagain = 0; - for ( ;; ) - { - self waittill( "damage", amount, attacker, dir, point, mod ); - if ( isDefined( attacker ) && isplayer( attacker ) && attacker.team == self.team ) - { - continue; - } - else - { - self.hurtagain = 1; - self.damagepoint = point; - self.damageattacker = attacker; - } - } -} - -playerhealthregen() -{ - self notify( "playerHealthRegen" ); - self endon( "playerHealthRegen" ); - self endon( "death" ); - self endon( "disconnect" ); - if ( !isDefined( self.flag ) ) - { - self.flag = []; - self.flags_lock = []; - } - if ( !isDefined( self.flag[ "player_has_red_flashing_overlay" ] ) ) - { - self player_flag_init( "player_has_red_flashing_overlay" ); - self player_flag_init( "player_is_invulnerable" ); - } - self player_flag_clear( "player_has_red_flashing_overlay" ); - self player_flag_clear( "player_is_invulnerable" ); - self thread healthoverlay(); - oldratio = 1; - health_add = 0; - regenrate = 0,1; - veryhurt = 0; - playerjustgotredflashing = 0; - invultime = 0; - hurttime = 0; - newhealth = 0; - lastinvulratio = 1; - self thread playerhurtcheck(); - if ( !isDefined( self.veryhurt ) ) - { - self.veryhurt = 0; - } - self.bolthit = 0; - if ( getDvar( "scr_playerInvulTimeScale" ) == "" ) - { - setdvar( "scr_playerInvulTimeScale", 1 ); - } - playerinvultimescale = getDvarFloat( "scr_playerInvulTimeScale" ); - for ( ;; ) - { - wait 0,05; - waittillframeend; - if ( self.health == self.maxhealth ) - { - if ( self player_flag( "player_has_red_flashing_overlay" ) ) - { - player_flag_clear( "player_has_red_flashing_overlay" ); - } - lastinvulratio = 1; - playerjustgotredflashing = 0; - veryhurt = 0; - continue; - } - else if ( self.health <= 0 ) - { -/# - showhitlog(); -#/ - return; - } - wasveryhurt = veryhurt; - health_ratio = self.health / self.maxhealth; - if ( health_ratio <= level.healthoverlaycutoff ) - { - veryhurt = 1; - if ( !wasveryhurt ) - { - hurttime = getTime(); - self startfadingblur( 3,6, 2 ); - self player_flag_set( "player_has_red_flashing_overlay" ); - playerjustgotredflashing = 1; - } - } - if ( self.hurtagain ) - { - hurttime = getTime(); - self.hurtagain = 0; - } - if ( health_ratio >= oldratio ) - { - if ( ( getTime() - hurttime ) < level.playerhealth_regularregendelay ) - { - continue; - } - else if ( veryhurt ) - { - self.veryhurt = 1; - newhealth = health_ratio; - if ( getTime() > ( hurttime + level.longregentime ) ) - { - newhealth += regenrate; - } - } - else - { - newhealth = 1; - self.veryhurt = 0; - } - if ( newhealth > 1 ) - { - newhealth = 1; - } - if ( newhealth <= 0 ) - { - return; - } -/# - if ( newhealth > health_ratio ) - { - logregen( newhealth ); -#/ - } - self setnormalhealth( newhealth ); - oldratio = self.health / self.maxhealth; - continue; - } - else invulworthyhealthdrop = ( lastinvulratio - health_ratio ) > level.worthydamageratio; - if ( self.health <= 1 ) - { - self setnormalhealth( 2 / self.maxhealth ); - invulworthyhealthdrop = 1; -/# - if ( !isDefined( level.player_deathinvulnerabletimeout ) ) - { - level.player_deathinvulnerabletimeout = 0; - } - if ( level.player_deathinvulnerabletimeout < getTime() ) - { - level.player_deathinvulnerabletimeout = getTime() + getDvarInt( "player_deathInvulnerableTime" ); -#/ - } - } - oldratio = self.health / self.maxhealth; - level notify( "hit_again" ); - health_add = 0; - hurttime = getTime(); - self startfadingblur( 3, 0,8 ); - if ( !invulworthyhealthdrop || playerinvultimescale <= 0 ) - { -/# - loghit( self.health, 0 ); -#/ - continue; - } - else - { - if ( self player_flag( "player_is_invulnerable" ) ) - { - break; - } - else - { - self player_flag_set( "player_is_invulnerable" ); - level notify( "player_becoming_invulnerable" ); - if ( playerjustgotredflashing ) - { - invultime = level.invultime_onshield; - playerjustgotredflashing = 0; - } - else if ( veryhurt ) - { - invultime = level.invultime_postshield; - } - else - { - invultime = level.invultime_preshield; - } - invultime *= playerinvultimescale; -/# - loghit( self.health, invultime ); -#/ - lastinvulratio = self.health / self.maxhealth; - self thread playerinvul( invultime ); - } - } - } -} - -playerinvul( timer ) -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( timer > 0 ) - { -/# - level.playerinvultimeend = getTime() + ( timer * 1000 ); -#/ - wait timer; - } - self player_flag_clear( "player_is_invulnerable" ); -} - -healthoverlay() -{ - self endon( "disconnect" ); - self endon( "noHealthOverlay" ); - if ( !isDefined( self._health_overlay ) ) - { - self._health_overlay = newclienthudelem( self ); - self._health_overlay.x = 0; - self._health_overlay.y = 0; - self._health_overlay setshader( "overlay_low_health", 640, 480 ); - self._health_overlay.alignx = "left"; - self._health_overlay.aligny = "top"; - self._health_overlay.horzalign = "fullscreen"; - self._health_overlay.vertalign = "fullscreen"; - self._health_overlay.alpha = 0; - } - overlay = self._health_overlay; - self thread healthoverlay_remove( overlay ); - self thread watchhideredflashingoverlay( overlay ); - pulsetime = 0,8; - for ( ;; ) - { - if ( overlay.alpha > 0 ) - { - overlay fadeovertime( 0,5 ); - } - overlay.alpha = 0; - self player_flag_wait( "player_has_red_flashing_overlay" ); - self redflashingoverlay( overlay ); - } -} - -fadefunc( overlay, severity, mult, hud_scaleonly ) -{ - pulsetime = 0,8; - scalemin = 0,5; - fadeintime = pulsetime * 0,1; - stayfulltime = pulsetime * ( 0,1 + ( severity * 0,2 ) ); - fadeouthalftime = pulsetime * ( 0,1 + ( severity * 0,1 ) ); - fadeoutfulltime = pulsetime * 0,3; - remainingtime = pulsetime - fadeintime - stayfulltime - fadeouthalftime - fadeoutfulltime; -/# - assert( remainingtime >= -0,001 ); -#/ - if ( remainingtime < 0 ) - { - remainingtime = 0; - } - halfalpha = 0,8 + ( severity * 0,1 ); - leastalpha = 0,5 + ( severity * 0,3 ); - overlay fadeovertime( fadeintime ); - overlay.alpha = mult * 1; - wait ( fadeintime + stayfulltime ); - overlay fadeovertime( fadeouthalftime ); - overlay.alpha = mult * halfalpha; - wait fadeouthalftime; - overlay fadeovertime( fadeoutfulltime ); - overlay.alpha = mult * leastalpha; - wait fadeoutfulltime; - wait remainingtime; -} - -watchhideredflashingoverlay( overlay ) -{ - self endon( "death_or_disconnect" ); - while ( isDefined( overlay ) ) - { - self waittill( "clear_red_flashing_overlay" ); - self player_flag_clear( "player_has_red_flashing_overlay" ); - overlay fadeovertime( 0,05 ); - overlay.alpha = 0; - setclientsysstate( "levelNotify", "rfo3", self ); - self notify( "hit_again" ); - } -} - -redflashingoverlay( overlay ) -{ - self endon( "hit_again" ); - self endon( "damage" ); - self endon( "death" ); - self endon( "disconnect" ); - self endon( "clear_red_flashing_overlay" ); - self.stopflashingbadlytime = getTime() + level.longregentime; - if ( isDefined( self.is_in_process_of_zombify ) && !self.is_in_process_of_zombify && isDefined( self.is_zombie ) && !self.is_zombie ) - { - fadefunc( overlay, 1, 1, 0 ); - while ( getTime() < self.stopflashingbadlytime && isalive( self ) && isDefined( self.is_in_process_of_zombify ) && !self.is_in_process_of_zombify && isDefined( self.is_zombie ) && !self.is_zombie ) - { - fadefunc( overlay, 0,9, 1, 0 ); - } - if ( isDefined( self.is_in_process_of_zombify ) && !self.is_in_process_of_zombify && isDefined( self.is_zombie ) && !self.is_zombie ) - { - if ( isalive( self ) ) - { - fadefunc( overlay, 0,65, 0,8, 0 ); - } - fadefunc( overlay, 0, 0,6, 1 ); - } - } - overlay fadeovertime( 0,5 ); - overlay.alpha = 0; - self player_flag_clear( "player_has_red_flashing_overlay" ); - setclientsysstate( "levelNotify", "rfo3", self ); - wait 0,5; - self notify( "hit_again" ); -} - -healthoverlay_remove( overlay ) -{ - self endon( "disconnect" ); - self waittill_any( "noHealthOverlay", "death" ); - overlay fadeovertime( 3,5 ); - overlay.alpha = 0; -} - -empty_kill_func( type, loc, point, attacker, amount ) -{ -} - -loghit( newhealth, invultime ) -{ -/# -#/ -} - -logregen( newhealth ) -{ -/# -#/ -} - -showhitlog() -{ -/# -#/ -} - -playerhealthdebug() -{ -/# - if ( getDvar( "scr_health_debug" ) == "" ) - { - setdvar( "scr_health_debug", "0" ); - } - waittillframeend; - while ( 1 ) - { - while ( 1 ) - { - if ( getDvar( "scr_health_debug" ) != "0" ) - { - break; - } - else - { - wait 0,5; - } - } - thread printhealthdebug(); - while ( 1 ) - { - if ( getDvar( "scr_health_debug" ) == "0" ) - { - break; - } - else - { - wait 0,5; - } - } - level notify( "stop_printing_grenade_timers" ); - destroyhealthdebug(); -#/ - } -} - -printhealthdebug() -{ -/# - level notify( "stop_printing_health_bars" ); - level endon( "stop_printing_health_bars" ); - x = 40; - y = 40; - level.healthbarhudelems = []; - level.healthbarkeys[ 0 ] = "Health"; - level.healthbarkeys[ 1 ] = "No Hit Time"; - level.healthbarkeys[ 2 ] = "No Die Time"; - if ( !isDefined( level.playerinvultimeend ) ) - { - level.playerinvultimeend = 0; - } - if ( !isDefined( level.player_deathinvulnerabletimeout ) ) - { - level.player_deathinvulnerabletimeout = 0; - } - i = 0; - while ( i < level.healthbarkeys.size ) - { - key = level.healthbarkeys[ i ]; - textelem = newhudelem(); - textelem.x = x; - textelem.y = y; - textelem.alignx = "left"; - textelem.aligny = "top"; - textelem.horzalign = "fullscreen"; - textelem.vertalign = "fullscreen"; - textelem settext( key ); - bgbar = newhudelem(); - bgbar.x = x + 79; - bgbar.y = y + 1; - bgbar.alignx = "left"; - bgbar.aligny = "top"; - bgbar.horzalign = "fullscreen"; - bgbar.vertalign = "fullscreen"; - bgbar.maxwidth = 3; - bgbar setshader( "white", bgbar.maxwidth, 10 ); - bgbar.color = vectorScale( ( 1, 1, 1 ), 0,5 ); - bar = newhudelem(); - bar.x = x + 80; - bar.y = y + 2; - bar.alignx = "left"; - bar.aligny = "top"; - bar.horzalign = "fullscreen"; - bar.vertalign = "fullscreen"; - bar setshader( "black", 1, 8 ); - textelem.bar = bar; - textelem.bgbar = bgbar; - textelem.key = key; - y += 10; - level.healthbarhudelems[ key ] = textelem; - i++; - } - flag_wait( "start_zombie_round_logic" ); - while ( 1 ) - { - wait 0,05; - players = get_players(); - i = 0; - while ( i < level.healthbarkeys.size && players.size > 0 ) - { - key = level.healthbarkeys[ i ]; - player = players[ 0 ]; - width = 0; - if ( i == 0 ) - { - width = ( player.health / player.maxhealth ) * 300; - } - else if ( i == 1 ) - { - width = ( ( level.playerinvultimeend - getTime() ) / 1000 ) * 40; - } - else - { - if ( i == 2 ) - { - width = ( ( level.player_deathinvulnerabletimeout - getTime() ) / 1000 ) * 40; - } - } - width = int( max( width, 1 ) ); - width = int( min( width, 300 ) ); - bar = level.healthbarhudelems[ key ].bar; - bar setshader( "black", width, 8 ); - bgbar = level.healthbarhudelems[ key ].bgbar; - if ( ( width + 2 ) > bgbar.maxwidth ) - { - bgbar.maxwidth = width + 2; - bgbar setshader( "white", bgbar.maxwidth, 10 ); - bgbar.color = vectorScale( ( 1, 1, 1 ), 0,5 ); - } - i++; - } -#/ - } -} - -destroyhealthdebug() -{ -/# - if ( !isDefined( level.healthbarhudelems ) ) - { - return; - } - i = 0; - while ( i < level.healthbarkeys.size ) - { - level.healthbarhudelems[ level.healthbarkeys[ i ] ].bgbar destroy(); - level.healthbarhudelems[ level.healthbarkeys[ i ] ].bar destroy(); - level.healthbarhudelems[ level.healthbarkeys[ i ] ] destroy(); - i++; -#/ - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_power.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_power.gsc deleted file mode 100644 index 5e824a5..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_power.gsc +++ /dev/null @@ -1,740 +0,0 @@ -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/_demo; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( !isDefined( level.powered_items ) ) - { - level.powered_items = []; - } - if ( !isDefined( level.local_power ) ) - { - level.local_power = []; - } - thread standard_powered_items(); -/# - thread debug_powered_items(); -#/ -} - -debug_powered_items() -{ -/# - while ( 1 ) - { - while ( getDvarInt( #"EB512CB7" ) ) - { - while ( isDefined( level.local_power ) ) - { - _a32 = level.local_power; - _k32 = getFirstArrayKey( _a32 ); - while ( isDefined( _k32 ) ) - { - localpower = _a32[ _k32 ]; - circle( localpower.origin, localpower.radius, ( 0, 0, 1 ), 0, 1, 1 ); - _k32 = getNextArrayKey( _a32, _k32 ); - } - } - } - wait 0,05; -#/ - } -} - -watch_global_power() -{ - while ( 1 ) - { - flag_wait( "power_on" ); - set_global_power( 1 ); - flag_waitopen( "power_on" ); - set_global_power( 0 ); - } -} - -standard_powered_items() -{ - flag_wait( "start_zombie_round_logic" ); - vending_triggers = getentarray( "zombie_vending", "targetname" ); - _a67 = vending_triggers; - _k67 = getFirstArrayKey( _a67 ); - while ( isDefined( _k67 ) ) - { - trigger = _a67[ _k67 ]; - if ( trigger.script_noteworthy == "specialty_weapupgrade" ) - { - } - else - { - powered_on = maps/mp/zombies/_zm_perks::get_perk_machine_start_state( trigger.script_noteworthy ); - add_powered_item( ::perk_power_on, ::perk_power_off, ::perk_range, ::cost_low_if_local, 0, powered_on, trigger ); - } - _k67 = getNextArrayKey( _a67, _k67 ); - } - pack_a_punch = getentarray( "specialty_weapupgrade", "script_noteworthy" ); - _a77 = pack_a_punch; - _k77 = getFirstArrayKey( _a77 ); - while ( isDefined( _k77 ) ) - { - trigger = _a77[ _k77 ]; - powered_on = maps/mp/zombies/_zm_perks::get_perk_machine_start_state( trigger.script_noteworthy ); - trigger.powered = add_powered_item( ::pap_power_on, ::pap_power_off, ::pap_range, ::cost_low_if_local, 0, powered_on, trigger ); - _k77 = getNextArrayKey( _a77, _k77 ); - } - zombie_doors = getentarray( "zombie_door", "targetname" ); - _a86 = zombie_doors; - _k86 = getFirstArrayKey( _a86 ); - while ( isDefined( _k86 ) ) - { - door = _a86[ _k86 ]; - if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "electric_door" ) - { - add_powered_item( ::door_power_on, ::door_power_off, ::door_range, ::cost_door, 0, 0, door ); - } - else - { - if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "local_electric_door" ) - { - power_sources = 0; - if ( isDefined( level.power_local_doors_globally ) && !level.power_local_doors_globally ) - { - power_sources = 1; - } - add_powered_item( ::door_local_power_on, ::door_local_power_off, ::door_range, ::cost_door, power_sources, 0, door ); - } - } - _k86 = getNextArrayKey( _a86, _k86 ); - } - thread watch_global_power(); -} - -add_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target ) -{ - powered = spawnstruct(); - powered.power_on_func = power_on_func; - powered.power_off_func = power_off_func; - powered.range_func = range_func; - powered.power_sources = power_sources; - powered.self_powered = self_powered; - powered.target = target; - powered.cost_func = cost_func; - powered.power = self_powered; - powered.powered_count = self_powered; - powered.depowered_count = 0; - if ( !isDefined( level.powered_items ) ) - { - level.powered_items = []; - } - level.powered_items[ level.powered_items.size ] = powered; - return powered; -} - -remove_powered_item( powered ) -{ - arrayremovevalue( level.powered_items, powered, 0 ); -} - -add_temp_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target ) -{ - powered = add_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target ); - while ( isDefined( level.local_power ) ) - { - _a140 = level.local_power; - _k140 = getFirstArrayKey( _a140 ); - while ( isDefined( _k140 ) ) - { - localpower = _a140[ _k140 ]; - if ( powered [[ powered.range_func ]]( 1, localpower.origin, localpower.radius ) ) - { - powered change_power( 1, localpower.origin, localpower.radius ); - if ( !isDefined( localpower.added_list ) ) - { - localpower.added_list = []; - } - localpower.added_list[ localpower.added_list.size ] = powered; - } - _k140 = getNextArrayKey( _a140, _k140 ); - } - } - thread watch_temp_powered_item( powered ); - return powered; -} - -watch_temp_powered_item( powered ) -{ - powered.target waittill( "death" ); - remove_powered_item( powered ); - while ( isDefined( level.local_power ) ) - { - _a161 = level.local_power; - _k161 = getFirstArrayKey( _a161 ); - while ( isDefined( _k161 ) ) - { - localpower = _a161[ _k161 ]; - if ( isDefined( localpower.added_list ) ) - { - arrayremovevalue( localpower.added_list, powered, 0 ); - } - if ( isDefined( localpower.enabled_list ) ) - { - arrayremovevalue( localpower.enabled_list, powered, 0 ); - } - _k161 = getNextArrayKey( _a161, _k161 ); - } - } -} - -change_power_in_radius( delta, origin, radius ) -{ - changed_list = []; - i = 0; - while ( i < level.powered_items.size ) - { - powered = level.powered_items[ i ]; - if ( powered.power_sources != 2 ) - { - if ( powered [[ powered.range_func ]]( delta, origin, radius ) ) - { - powered change_power( delta, origin, radius ); - changed_list[ changed_list.size ] = powered; - } - } - i++; - } - return changed_list; -} - -change_power( delta, origin, radius ) -{ - if ( delta > 0 ) - { - if ( !self.power ) - { - self.power = 1; - self [[ self.power_on_func ]]( origin, radius ); - } - self.powered_count++; - } - else - { - if ( delta < 0 ) - { - if ( self.power ) - { - self.power = 0; - self [[ self.power_off_func ]]( origin, radius ); - } - self.depowered_count++; - } - } -} - -revert_power_to_list( delta, origin, radius, powered_list ) -{ - i = 0; - while ( i < powered_list.size ) - { - powered = powered_list[ i ]; - powered revert_power( delta, origin, radius ); - i++; - } -} - -revert_power( delta, origin, radius, powered_list ) -{ - if ( delta > 0 ) - { - self.depowered_count--; - -/# - assert( self.depowered_count >= 0, "Depower underflow in power system" ); -#/ - if ( self.depowered_count == 0 && self.powered_count > 0 && !self.power ) - { - self.power = 1; - self [[ self.power_on_func ]]( origin, radius ); - } - } - else - { - if ( delta < 0 ) - { - self.powered_count--; - -/# - assert( self.powered_count >= 0, "Repower underflow in power system" ); -#/ - if ( self.powered_count == 0 && self.power ) - { - self.power = 0; - self [[ self.power_off_func ]]( origin, radius ); - } - } - } -} - -add_local_power( origin, radius ) -{ - localpower = spawnstruct(); -/# - println( "ZM POWER: local power on at " + origin + " radius " + radius + "\n" ); -#/ - localpower.origin = origin; - localpower.radius = radius; - localpower.enabled_list = change_power_in_radius( 1, origin, radius ); - if ( !isDefined( level.local_power ) ) - { - level.local_power = []; - } - level.local_power[ level.local_power.size ] = localpower; - return localpower; -} - -move_local_power( localpower, origin ) -{ - changed_list = []; - i = 0; - while ( i < level.powered_items.size ) - { - powered = level.powered_items[ i ]; - if ( powered.power_sources == 2 ) - { - i++; - continue; - } - else waspowered = isinarray( localpower.enabled_list, powered ); - ispowered = powered [[ powered.range_func ]]( 1, origin, localpower.radius ); - if ( ispowered && !waspowered ) - { - powered change_power( 1, origin, localpower.radius ); - localpower.enabled_list[ localpower.enabled_list.size ] = powered; - i++; - continue; - } - else - { - if ( !ispowered && waspowered ) - { - powered revert_power( -1, localpower.origin, localpower.radius, localpower.enabled_list ); - arrayremovevalue( localpower.enabled_list, powered, 0 ); - } - } - i++; - } - localpower.origin = origin; - return localpower; -} - -end_local_power( localpower ) -{ -/# - println( "ZM POWER: local power off at " + localpower.origin + " radius " + localpower.radius + "\n" ); -#/ - if ( isDefined( localpower.enabled_list ) ) - { - revert_power_to_list( -1, localpower.origin, localpower.radius, localpower.enabled_list ); - } - localpower.enabled_list = undefined; - if ( isDefined( localpower.added_list ) ) - { - revert_power_to_list( -1, localpower.origin, localpower.radius, localpower.added_list ); - } - localpower.added_list = undefined; - arrayremovevalue( level.local_power, localpower, 0 ); -} - -has_local_power( origin ) -{ - while ( isDefined( level.local_power ) ) - { - _a309 = level.local_power; - _k309 = getFirstArrayKey( _a309 ); - while ( isDefined( _k309 ) ) - { - localpower = _a309[ _k309 ]; - if ( distancesquared( localpower.origin, origin ) < ( localpower.radius * localpower.radius ) ) - { - return 1; - } - _k309 = getNextArrayKey( _a309, _k309 ); - } - } - return 0; -} - -get_powered_item_cost() -{ - if ( isDefined( self.power ) && !self.power ) - { - return 0; - } - if ( isDefined( level._power_global ) && level._power_global && self.power_sources != 1 ) - { - return 0; - } - cost = [[ self.cost_func ]](); - power_sources = self.powered_count; - if ( power_sources < 1 ) - { - power_sources = 1; - } - return cost / power_sources; -} - -get_local_power_cost( localpower ) -{ - cost = 0; - while ( isDefined( localpower ) && isDefined( localpower.enabled_list ) ) - { - _a340 = localpower.enabled_list; - _k340 = getFirstArrayKey( _a340 ); - while ( isDefined( _k340 ) ) - { - powered = _a340[ _k340 ]; - cost += powered get_powered_item_cost(); - _k340 = getNextArrayKey( _a340, _k340 ); - } - } - while ( isDefined( localpower ) && isDefined( localpower.added_list ) ) - { - _a345 = localpower.added_list; - _k345 = getFirstArrayKey( _a345 ); - while ( isDefined( _k345 ) ) - { - powered = _a345[ _k345 ]; - cost += powered get_powered_item_cost(); - _k345 = getNextArrayKey( _a345, _k345 ); - } - } - return cost; -} - -set_global_power( on_off ) -{ - maps/mp/_demo::bookmark( "zm_power", getTime(), undefined, undefined, 1 ); - level._power_global = on_off; - i = 0; - while ( i < level.powered_items.size ) - { - powered = level.powered_items[ i ]; - if ( isDefined( powered.target ) && powered.power_sources != 1 ) - { - powered global_power( on_off ); - } - i++; - } -} - -global_power( on_off ) -{ - if ( on_off ) - { -/# - println( "ZM POWER: global power on\n" ); -#/ - if ( !self.power ) - { - self.power = 1; - self [[ self.power_on_func ]](); - } - self.powered_count++; - } - else - { -/# - println( "ZM POWER: global power off\n" ); -#/ - self.powered_count--; - -/# - assert( self.powered_count >= 0, "Repower underflow in power system" ); -#/ - if ( self.powered_count == 0 && self.power ) - { - self.power = 0; - self [[ self.power_off_func ]](); - } - } -} - -never_power_on( origin, radius ) -{ -} - -never_power_off( origin, radius ) -{ -} - -cost_negligible() -{ - if ( isDefined( self.one_time_cost ) ) - { - cost = self.one_time_cost; - self.one_time_cost = undefined; - return cost; - } - return 0; -} - -cost_low_if_local() -{ - if ( isDefined( self.one_time_cost ) ) - { - cost = self.one_time_cost; - self.one_time_cost = undefined; - return cost; - } - if ( isDefined( level._power_global ) && level._power_global ) - { - return 0; - } - if ( isDefined( self.self_powered ) && self.self_powered ) - { - return 0; - } - return 1; -} - -cost_high() -{ - if ( isDefined( self.one_time_cost ) ) - { - cost = self.one_time_cost; - self.one_time_cost = undefined; - return cost; - } - return 10; -} - -door_range( delta, origin, radius ) -{ - if ( delta < 0 ) - { - return 0; - } - if ( distancesquared( self.target.origin, origin ) < ( radius * radius ) ) - { - return 1; - } - return 0; -} - -door_power_on( origin, radius ) -{ -/# - println( "^1ZM POWER: door on\n" ); -#/ - self.target.power_on = 1; - self.target notify( "power_on" ); -} - -door_power_off( origin, radius ) -{ -/# - println( "^1ZM POWER: door off\n" ); -#/ - self.target notify( "power_off" ); - self.target.power_on = 0; -} - -door_local_power_on( origin, radius ) -{ -/# - println( "^1ZM POWER: door on (local)\n" ); -#/ - self.target.local_power_on = 1; - self.target notify( "local_power_on" ); -} - -door_local_power_off( origin, radius ) -{ -/# - println( "^1ZM POWER: door off (local)\n" ); -#/ - self.target notify( "local_power_off" ); - self.target.local_power_on = 0; -} - -cost_door() -{ - if ( isDefined( self.target.power_cost ) ) - { - if ( !isDefined( self.one_time_cost ) ) - { - self.one_time_cost = 0; - } - self.one_time_cost += self.target.power_cost; - self.target.power_cost = 0; - } - if ( isDefined( self.one_time_cost ) ) - { - cost = self.one_time_cost; - self.one_time_cost = undefined; - return cost; - } - return 0; -} - -zombie_range( delta, origin, radius ) -{ - if ( delta > 0 ) - { - return 0; - } - self.zombies = get_array_of_closest( origin, get_round_enemy_array(), undefined, undefined, radius ); - if ( !isDefined( self.zombies ) ) - { - return 0; - } - self.power = 1; - return 1; -} - -zombie_power_off( origin, radius ) -{ -/# - println( "^1ZM POWER: zombies off\n" ); -#/ - i = 0; - while ( i < self.zombies.size ) - { - self.zombies[ i ] thread stun_zombie(); - wait 0,05; - i++; - } -} - -stun_zombie() -{ - self endon( "death" ); - self notify( "stun_zombie" ); - self endon( "stun_zombie" ); - if ( self.health <= 0 ) - { -/# - iprintln( "trying to stun a dead zombie" ); -#/ - return; - } - if ( isDefined( self.ignore_inert ) && self.ignore_inert ) - { - return; - } - if ( isDefined( self.stun_zombie ) ) - { - self thread [[ self.stun_zombie ]](); - return; - } - self thread maps/mp/zombies/_zm_ai_basic::start_inert(); -} - -perk_range( delta, origin, radius ) -{ - if ( isDefined( self.target ) ) - { - perkorigin = self.target.origin; - if ( isDefined( self.target.trigger_off ) && self.target.trigger_off ) - { - perkorigin = self.target.realorigin; - } - else - { - if ( isDefined( self.target.disabled ) && self.target.disabled ) - { - perkorigin += vectorScale( ( 0, 0, 1 ), 10000 ); - } - } - if ( distancesquared( perkorigin, origin ) < ( radius * radius ) ) - { - return 1; - } - } - return 0; -} - -perk_power_on( origin, radius ) -{ -/# - println( "^1ZM POWER: perk " + self.target maps/mp/zombies/_zm_perks::getvendingmachinenotify() + " on\n" ); -#/ - level notify( self.target maps/mp/zombies/_zm_perks::getvendingmachinenotify() + "_on" ); - maps/mp/zombies/_zm_perks::perk_unpause( self.target.script_noteworthy ); -} - -perk_power_off( origin, radius ) -{ - notify_name = self.target maps/mp/zombies/_zm_perks::getvendingmachinenotify(); - if ( isDefined( notify_name ) && notify_name == "revive" ) - { - if ( level flag_exists( "solo_game" ) && flag( "solo_game" ) ) - { - return; - } - } -/# - println( "^1ZM POWER: perk " + self.target.script_noteworthy + " off\n" ); -#/ - self.target notify( "death" ); - self.target thread maps/mp/zombies/_zm_perks::vending_trigger_think(); - if ( isDefined( self.target.perk_hum ) ) - { - self.target.perk_hum delete(); - } - maps/mp/zombies/_zm_perks::perk_pause( self.target.script_noteworthy ); - level notify( self.target maps/mp/zombies/_zm_perks::getvendingmachinenotify() + "_off" ); -} - -pap_range( delta, origin, radius ) -{ - if ( isDefined( self.target ) ) - { - paporigin = self.target.origin; - if ( isDefined( self.target.trigger_off ) && self.target.trigger_off ) - { - paporigin = self.target.realorigin; - } - else - { - if ( isDefined( self.target.disabled ) && self.target.disabled ) - { - paporigin += vectorScale( ( 0, 0, 1 ), 10000 ); - } - } - if ( distancesquared( paporigin, origin ) < ( radius * radius ) ) - { - return 1; - } - } - return 0; -} - -pap_power_on( origin, radius ) -{ -/# - println( "^1ZM POWER: PaP on\n" ); -#/ - level notify( "Pack_A_Punch_on" ); -} - -pap_power_off( origin, radius ) -{ -/# - println( "^1ZM POWER: PaP off\n" ); -#/ - level notify( "Pack_A_Punch_off" ); - self.target notify( "death" ); - self.target thread maps/mp/zombies/_zm_perks::vending_weapon_upgrade(); -} - -pap_is_on() -{ - if ( isDefined( self.powered ) ) - { - return self.powered.power; - } - return 0; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_powerups.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_powerups.gsc deleted file mode 100644 index 5200c11..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_powerups.gsc +++ /dev/null @@ -1,3004 +0,0 @@ -#include maps/mp/zombies/_zm_melee_weapon; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zombies/_zm_pers_upgrades; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_blockers; -#include maps/mp/zombies/_zm_audio_announcer; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/_demo; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - precacheshader( "specialty_doublepoints_zombies" ); - precacheshader( "specialty_instakill_zombies" ); - precacheshader( "specialty_firesale_zombies" ); - precacheshader( "zom_icon_bonfire" ); - precacheshader( "zom_icon_minigun" ); - precacheshader( "black" ); - set_zombie_var( "zombie_insta_kill", 0, undefined, undefined, 1 ); - set_zombie_var( "zombie_point_scalar", 1, undefined, undefined, 1 ); - set_zombie_var( "zombie_drop_item", 0 ); - set_zombie_var( "zombie_timer_offset", 350 ); - set_zombie_var( "zombie_timer_offset_interval", 30 ); - set_zombie_var( "zombie_powerup_fire_sale_on", 0 ); - set_zombie_var( "zombie_powerup_fire_sale_time", 30 ); - set_zombie_var( "zombie_powerup_bonfire_sale_on", 0 ); - set_zombie_var( "zombie_powerup_bonfire_sale_time", 30 ); - set_zombie_var( "zombie_powerup_insta_kill_on", 0, undefined, undefined, 1 ); - set_zombie_var( "zombie_powerup_insta_kill_time", 30, undefined, undefined, 1 ); - set_zombie_var( "zombie_powerup_point_doubler_on", 0, undefined, undefined, 1 ); - set_zombie_var( "zombie_powerup_point_doubler_time", 30, undefined, undefined, 1 ); - set_zombie_var( "zombie_powerup_drop_increment", 2000 ); - set_zombie_var( "zombie_powerup_drop_max_per_round", 4 ); - onplayerconnect_callback( ::init_player_zombie_vars ); - level._effect[ "powerup_on" ] = loadfx( "misc/fx_zombie_powerup_on" ); - level._effect[ "powerup_off" ] = loadfx( "misc/fx_zombie_powerup_off" ); - level._effect[ "powerup_grabbed" ] = loadfx( "misc/fx_zombie_powerup_grab" ); - level._effect[ "powerup_grabbed_wave" ] = loadfx( "misc/fx_zombie_powerup_wave" ); - if ( isDefined( level.using_zombie_powerups ) && level.using_zombie_powerups ) - { - level._effect[ "powerup_on_red" ] = loadfx( "misc/fx_zombie_powerup_on_red" ); - level._effect[ "powerup_grabbed_red" ] = loadfx( "misc/fx_zombie_powerup_red_grab" ); - level._effect[ "powerup_grabbed_wave_red" ] = loadfx( "misc/fx_zombie_powerup_red_wave" ); - } - level._effect[ "powerup_on_solo" ] = loadfx( "misc/fx_zombie_powerup_solo_on" ); - level._effect[ "powerup_grabbed_solo" ] = loadfx( "misc/fx_zombie_powerup_solo_grab" ); - level._effect[ "powerup_grabbed_wave_solo" ] = loadfx( "misc/fx_zombie_powerup_solo_wave" ); - level._effect[ "powerup_on_caution" ] = loadfx( "misc/fx_zombie_powerup_caution_on" ); - level._effect[ "powerup_grabbed_caution" ] = loadfx( "misc/fx_zombie_powerup_caution_grab" ); - level._effect[ "powerup_grabbed_wave_caution" ] = loadfx( "misc/fx_zombie_powerup_caution_wave" ); - init_powerups(); - if ( !level.enable_magic ) - { - return; - } - thread watch_for_drop(); - thread setup_firesale_audio(); - thread setup_bonfiresale_audio(); - level.use_new_carpenter_func = ::start_carpenter_new; - level.board_repair_distance_squared = 562500; -} - -init_powerups() -{ - flag_init( "zombie_drop_powerups" ); - if ( isDefined( level.enable_magic ) && level.enable_magic ) - { - flag_set( "zombie_drop_powerups" ); - } - if ( !isDefined( level.active_powerups ) ) - { - level.active_powerups = []; - } - if ( !isDefined( level.zombie_powerup_array ) ) - { - level.zombie_powerup_array = []; - } - if ( !isDefined( level.zombie_special_drop_array ) ) - { - level.zombie_special_drop_array = []; - } - add_zombie_powerup( "nuke", "zombie_bomb", &"ZOMBIE_POWERUP_NUKE", ::func_should_always_drop, 0, 0, 0, "misc/fx_zombie_mini_nuke_hotness" ); - add_zombie_powerup( "insta_kill", "zombie_skull", &"ZOMBIE_POWERUP_INSTA_KILL", ::func_should_always_drop, 0, 0, 0, undefined, "powerup_instant_kill", "zombie_powerup_insta_kill_time", "zombie_powerup_insta_kill_on" ); - add_zombie_powerup( "full_ammo", "zombie_ammocan", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_always_drop, 0, 0, 0 ); - add_zombie_powerup( "double_points", "zombie_x2_icon", &"ZOMBIE_POWERUP_DOUBLE_POINTS", ::func_should_always_drop, 0, 0, 0, undefined, "powerup_double_points", "zombie_powerup_point_doubler_time", "zombie_powerup_point_doubler_on" ); - add_zombie_powerup( "carpenter", "zombie_carpenter", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_drop_carpenter, 0, 0, 0 ); - add_zombie_powerup( "fire_sale", "zombie_firesale", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_drop_fire_sale, 0, 0, 0, undefined, "powerup_fire_sale", "zombie_powerup_fire_sale_time", "zombie_powerup_fire_sale_on" ); - add_zombie_powerup( "bonfire_sale", "zombie_pickup_bonfire", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_never_drop, 0, 0, 0, undefined, "powerup_bon_fire", "zombie_powerup_bonfire_sale_time", "zombie_powerup_bonfire_sale_on" ); - add_zombie_powerup( "minigun", "zombie_pickup_minigun", &"ZOMBIE_POWERUP_MINIGUN", ::func_should_drop_minigun, 1, 0, 0, undefined, "powerup_mini_gun", "zombie_powerup_minigun_time", "zombie_powerup_minigun_on" ); - add_zombie_powerup( "free_perk", "zombie_pickup_perk_bottle", &"ZOMBIE_POWERUP_FREE_PERK", ::func_should_never_drop, 0, 0, 0 ); - add_zombie_powerup( "tesla", "zombie_pickup_minigun", &"ZOMBIE_POWERUP_MINIGUN", ::func_should_never_drop, 1, 0, 0, undefined, "powerup_tesla", "zombie_powerup_tesla_time", "zombie_powerup_tesla_on" ); - add_zombie_powerup( "random_weapon", "zombie_pickup_minigun", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_never_drop, 1, 0, 0 ); - add_zombie_powerup( "bonus_points_player", "zombie_z_money_icon", &"ZOMBIE_POWERUP_BONUS_POINTS", ::func_should_never_drop, 1, 0, 0 ); - add_zombie_powerup( "bonus_points_team", "zombie_z_money_icon", &"ZOMBIE_POWERUP_BONUS_POINTS", ::func_should_never_drop, 0, 0, 0 ); - add_zombie_powerup( "lose_points_team", "zombie_z_money_icon", &"ZOMBIE_POWERUP_LOSE_POINTS", ::func_should_never_drop, 0, 0, 1 ); - add_zombie_powerup( "lose_perk", "zombie_pickup_perk_bottle", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_never_drop, 0, 0, 1 ); - add_zombie_powerup( "empty_clip", "zombie_ammocan", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_never_drop, 0, 0, 1 ); - add_zombie_powerup( "insta_kill_ug", "zombie_skull", &"ZOMBIE_POWERUP_INSTA_KILL", ::func_should_never_drop, 1, 0, 0, undefined, "powerup_instant_kill_ug", "zombie_powerup_insta_kill_ug_time", "zombie_powerup_insta_kill_ug_on", 5000 ); - if ( isDefined( level.level_specific_init_powerups ) ) - { - [[ level.level_specific_init_powerups ]](); - } - randomize_powerups(); - level.zombie_powerup_index = 0; - randomize_powerups(); - level.rare_powerups_active = 0; - level.firesale_vox_firstime = 0; - level thread powerup_hud_monitor(); - if ( isDefined( level.quantum_bomb_register_result_func ) ) - { - [[ level.quantum_bomb_register_result_func ]]( "random_powerup", ::quantum_bomb_random_powerup_result, 5, level.quantum_bomb_in_playable_area_validation_func ); - [[ level.quantum_bomb_register_result_func ]]( "random_zombie_grab_powerup", ::quantum_bomb_random_zombie_grab_powerup_result, 5, level.quantum_bomb_in_playable_area_validation_func ); - [[ level.quantum_bomb_register_result_func ]]( "random_weapon_powerup", ::quantum_bomb_random_weapon_powerup_result, 60, level.quantum_bomb_in_playable_area_validation_func ); - [[ level.quantum_bomb_register_result_func ]]( "random_bonus_or_lose_points_powerup", ::quantum_bomb_random_bonus_or_lose_points_powerup_result, 25, level.quantum_bomb_in_playable_area_validation_func ); - } - registerclientfield( "scriptmover", "powerup_fx", 1000, 3, "int" ); -} - -init_player_zombie_vars() -{ - self.zombie_vars[ "zombie_powerup_minigun_on" ] = 0; - self.zombie_vars[ "zombie_powerup_minigun_time" ] = 0; - self.zombie_vars[ "zombie_powerup_tesla_on" ] = 0; - self.zombie_vars[ "zombie_powerup_tesla_time" ] = 0; - self.zombie_vars[ "zombie_powerup_insta_kill_ug_on" ] = 0; - self.zombie_vars[ "zombie_powerup_insta_kill_ug_time" ] = 18; -} - -powerup_hud_monitor() -{ - flag_wait( "start_zombie_round_logic" ); - if ( isDefined( level.current_game_module ) && level.current_game_module == 2 ) - { - return; - } - flashing_timers = []; - flashing_values = []; - flashing_timer = 10; - flashing_delta_time = 0; - flashing_is_on = 0; - flashing_value = 3; - flashing_min_timer = 0,15; - while ( flashing_timer >= flashing_min_timer ) - { - if ( flashing_timer < 5 ) - { - flashing_delta_time = 0,1; - } - else - { - flashing_delta_time = 0,2; - } - if ( flashing_is_on ) - { - flashing_timer = flashing_timer - flashing_delta_time - 0,05; - flashing_value = 2; - } - else - { - flashing_timer -= flashing_delta_time; - flashing_value = 3; - } - flashing_timers[ flashing_timers.size ] = flashing_timer; - flashing_values[ flashing_values.size ] = flashing_value; - flashing_is_on = !flashing_is_on; - } - client_fields = []; - powerup_keys = getarraykeys( level.zombie_powerups ); - powerup_key_index = 0; - while ( powerup_key_index < powerup_keys.size ) - { - if ( isDefined( level.zombie_powerups[ powerup_keys[ powerup_key_index ] ].client_field_name ) ) - { - powerup_name = powerup_keys[ powerup_key_index ]; - client_fields[ powerup_name ] = spawnstruct(); - client_fields[ powerup_name ].client_field_name = level.zombie_powerups[ powerup_name ].client_field_name; - client_fields[ powerup_name ].solo = level.zombie_powerups[ powerup_name ].solo; - client_fields[ powerup_name ].time_name = level.zombie_powerups[ powerup_name ].time_name; - client_fields[ powerup_name ].on_name = level.zombie_powerups[ powerup_name ].on_name; - } - powerup_key_index++; - } - client_field_keys = getarraykeys( client_fields ); - while ( 1 ) - { - wait 0,05; - waittillframeend; - players = get_players(); - playerindex = 0; - while ( playerindex < players.size ) - { - client_field_key_index = 0; - while ( client_field_key_index < client_field_keys.size ) - { - player = players[ playerindex ]; -/# - if ( isDefined( player.pers[ "isBot" ] ) && player.pers[ "isBot" ] ) - { - client_field_key_index++; - continue; -#/ - } - else - { - if ( isDefined( level.powerup_player_valid ) ) - { - if ( !( [[ level.powerup_player_valid ]]( player ) ) ) - { - client_field_key_index++; - continue; - } - } - else client_field_name = client_fields[ client_field_keys[ client_field_key_index ] ].client_field_name; - time_name = client_fields[ client_field_keys[ client_field_key_index ] ].time_name; - on_name = client_fields[ client_field_keys[ client_field_key_index ] ].on_name; - powerup_timer = undefined; - powerup_on = undefined; - if ( client_fields[ client_field_keys[ client_field_key_index ] ].solo ) - { - if ( isDefined( player._show_solo_hud ) && player._show_solo_hud == 1 ) - { - powerup_timer = player.zombie_vars[ time_name ]; - powerup_on = player.zombie_vars[ on_name ]; - } - } - else if ( isDefined( level.zombie_vars[ player.team ][ time_name ] ) ) - { - powerup_timer = level.zombie_vars[ player.team ][ time_name ]; - powerup_on = level.zombie_vars[ player.team ][ on_name ]; - } - else - { - if ( isDefined( level.zombie_vars[ time_name ] ) ) - { - powerup_timer = level.zombie_vars[ time_name ]; - powerup_on = level.zombie_vars[ on_name ]; - } - } - if ( isDefined( powerup_timer ) && isDefined( powerup_on ) ) - { - player set_clientfield_powerups( client_field_name, powerup_timer, powerup_on, flashing_timers, flashing_values ); - client_field_key_index++; - continue; - } - else - { - player setclientfieldtoplayer( client_field_name, 0 ); - } - } - client_field_key_index++; - } - playerindex++; - } - } -} - -set_clientfield_powerups( clientfield_name, powerup_timer, powerup_on, flashing_timers, flashing_values ) -{ - if ( powerup_on ) - { - if ( powerup_timer < 10 ) - { - flashing_value = 3; - i = flashing_timers.size - 1; - while ( i > 0 ) - { - if ( powerup_timer < flashing_timers[ i ] ) - { - flashing_value = flashing_values[ i ]; - break; - } - else - { - i--; - - } - } - self setclientfieldtoplayer( clientfield_name, flashing_value ); - } - else - { - self setclientfieldtoplayer( clientfield_name, 1 ); - } - } - else - { - self setclientfieldtoplayer( clientfield_name, 0 ); - } -} - -randomize_powerups() -{ - level.zombie_powerup_array = array_randomize( level.zombie_powerup_array ); -} - -get_next_powerup() -{ - powerup = level.zombie_powerup_array[ level.zombie_powerup_index ]; - level.zombie_powerup_index++; - if ( level.zombie_powerup_index >= level.zombie_powerup_array.size ) - { - level.zombie_powerup_index = 0; - randomize_powerups(); - } - return powerup; -} - -get_valid_powerup() -{ -/# - if ( isDefined( level.zombie_devgui_power ) && level.zombie_devgui_power == 1 ) - { - return level.zombie_powerup_array[ level.zombie_powerup_index ]; -#/ - } - if ( isDefined( level.zombie_powerup_boss ) ) - { - i = level.zombie_powerup_boss; - level.zombie_powerup_boss = undefined; - return level.zombie_powerup_array[ i ]; - } - if ( isDefined( level.zombie_powerup_ape ) ) - { - powerup = level.zombie_powerup_ape; - level.zombie_powerup_ape = undefined; - return powerup; - } - powerup = get_next_powerup(); - while ( 1 ) - { - while ( !( [[ level.zombie_powerups[ powerup ].func_should_drop_with_regular_powerups ]]() ) ) - { - powerup = get_next_powerup(); - } - return powerup; - } -} - -minigun_no_drop() -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ].zombie_vars[ "zombie_powerup_minigun_on" ] == 1 ) - { - return 1; - } - i++; - } - if ( !flag( "power_on" ) ) - { - if ( flag( "solo_game" ) ) - { - if ( level.solo_lives_given == 0 ) - { - return 1; - } - } - else - { - return 1; - } - } - return 0; -} - -get_num_window_destroyed() -{ - num = 0; - i = 0; - while ( i < level.exterior_goals.size ) - { - if ( all_chunks_destroyed( level.exterior_goals[ i ], level.exterior_goals[ i ].barrier_chunks ) ) - { - num += 1; - } - i++; - } - return num; -} - -watch_for_drop() -{ - flag_wait( "start_zombie_round_logic" ); - flag_wait( "begin_spawning" ); - players = get_players(); - score_to_drop = ( players.size * level.zombie_vars[ "zombie_score_start_" + players.size + "p" ] ) + level.zombie_vars[ "zombie_powerup_drop_increment" ]; - while ( 1 ) - { - flag_wait( "zombie_drop_powerups" ); - players = get_players(); - curr_total_score = 0; - i = 0; - while ( i < players.size ) - { - if ( isDefined( players[ i ].score_total ) ) - { - curr_total_score += players[ i ].score_total; - } - i++; - } - if ( curr_total_score > score_to_drop ) - { - level.zombie_vars[ "zombie_powerup_drop_increment" ] *= 1,14; - score_to_drop = curr_total_score + level.zombie_vars[ "zombie_powerup_drop_increment" ]; - level.zombie_vars[ "zombie_drop_item" ] = 1; - } - wait 0,5; - } -} - -add_zombie_powerup( powerup_name, model_name, hint, func_should_drop_with_regular_powerups, solo, caution, zombie_grabbable, fx, client_field_name, time_name, on_name, clientfield_version ) -{ - if ( !isDefined( clientfield_version ) ) - { - clientfield_version = 1; - } - if ( isDefined( level.zombie_include_powerups ) && !isDefined( level.zombie_include_powerups[ powerup_name ] ) ) - { - return; - } - precachemodel( model_name ); - precachestring( hint ); - struct = spawnstruct(); - if ( !isDefined( level.zombie_powerups ) ) - { - level.zombie_powerups = []; - } - struct.powerup_name = powerup_name; - struct.model_name = model_name; - struct.weapon_classname = "script_model"; - struct.hint = hint; - struct.func_should_drop_with_regular_powerups = func_should_drop_with_regular_powerups; - struct.solo = solo; - struct.caution = caution; - struct.zombie_grabbable = zombie_grabbable; - if ( isDefined( fx ) ) - { - struct.fx = loadfx( fx ); - } - level.zombie_powerups[ powerup_name ] = struct; - level.zombie_powerup_array[ level.zombie_powerup_array.size ] = powerup_name; - add_zombie_special_drop( powerup_name ); - if ( !level.createfx_enabled ) - { - if ( isDefined( client_field_name ) ) - { - registerclientfield( "toplayer", client_field_name, clientfield_version, 2, "int" ); - struct.client_field_name = client_field_name; - struct.time_name = time_name; - struct.on_name = on_name; - } - } -} - -add_zombie_special_drop( powerup_name ) -{ - level.zombie_special_drop_array[ level.zombie_special_drop_array.size ] = powerup_name; -} - -include_zombie_powerup( powerup_name ) -{ - if ( !isDefined( level.zombie_include_powerups ) ) - { - level.zombie_include_powerups = []; - } - level.zombie_include_powerups[ powerup_name ] = 1; -} - -powerup_round_start() -{ - level.powerup_drop_count = 0; -} - -powerup_drop( drop_point ) -{ - if ( level.powerup_drop_count >= level.zombie_vars[ "zombie_powerup_drop_max_per_round" ] ) - { -/# - println( "^3POWERUP DROP EXCEEDED THE MAX PER ROUND!" ); -#/ - return; - } - if ( !isDefined( level.zombie_include_powerups ) || level.zombie_include_powerups.size == 0 ) - { - return; - } - rand_drop = randomint( 100 ); - if ( rand_drop > 2 ) - { - if ( !level.zombie_vars[ "zombie_drop_item" ] ) - { - return; - } - debug = "score"; - } - else - { - debug = "random"; - } - playable_area = getentarray( "player_volume", "script_noteworthy" ); - level.powerup_drop_count++; - powerup = maps/mp/zombies/_zm_net::network_safe_spawn( "powerup", 1, "script_model", drop_point + vectorScale( ( 0, 0, 0 ), 40 ) ); - valid_drop = 0; - i = 0; - while ( i < playable_area.size ) - { - if ( powerup istouching( playable_area[ i ] ) ) - { - valid_drop = 1; - } - i++; - } - if ( valid_drop && level.rare_powerups_active ) - { - pos = ( drop_point[ 0 ], drop_point[ 1 ], drop_point[ 2 ] + 42 ); - if ( check_for_rare_drop_override( pos ) ) - { - level.zombie_vars[ "zombie_drop_item" ] = 0; - valid_drop = 0; - } - } - if ( !valid_drop ) - { - level.powerup_drop_count--; - - powerup delete(); - return; - } - powerup powerup_setup(); - print_powerup_drop( powerup.powerup_name, debug ); - powerup thread powerup_timeout(); - powerup thread powerup_wobble(); - powerup thread powerup_grab(); - powerup thread powerup_move(); - powerup thread powerup_emp(); - level.zombie_vars[ "zombie_drop_item" ] = 0; - level notify( "powerup_dropped" ); -} - -specific_powerup_drop( powerup_name, drop_spot, powerup_team, powerup_location ) -{ - powerup = maps/mp/zombies/_zm_net::network_safe_spawn( "powerup", 1, "script_model", drop_spot + vectorScale( ( 0, 0, 0 ), 40 ) ); - level notify( "powerup_dropped" ); - if ( isDefined( powerup ) ) - { - powerup powerup_setup( powerup_name, powerup_team, powerup_location ); - powerup thread powerup_timeout(); - powerup thread powerup_wobble(); - powerup thread powerup_grab( powerup_team ); - powerup thread powerup_move(); - powerup thread powerup_emp(); - return powerup; - } -} - -quantum_bomb_random_powerup_result( position ) -{ - if ( !isDefined( level.zombie_include_powerups ) || !level.zombie_include_powerups.size ) - { - return; - } - keys = getarraykeys( level.zombie_include_powerups ); - while ( keys.size ) - { - index = randomint( keys.size ); - if ( !level.zombie_powerups[ keys[ index ] ].zombie_grabbable ) - { - skip = 0; - switch( keys[ index ] ) - { - case "bonus_points_player": - case "bonus_points_team": - case "random_weapon": - skip = 1; - break; - case "fire_sale": - case "full_ammo": - case "insta_kill": - case "minigun": - if ( randomint( 4 ) ) - { - skip = 1; - } - break; - case "bonfire_sale": - case "free_perk": - case "tesla": - if ( randomint( 20 ) ) - { - skip = 1; - } - break; - default: - } - while ( skip ) - { - arrayremovevalue( keys, keys[ index ] ); - } - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "quant_good" ); - [[ level.quantum_bomb_play_player_effect_at_position_func ]]( position ); - level specific_powerup_drop( keys[ index ], position ); - return; - continue; - } - else arrayremovevalue( keys, keys[ index ] ); - } - } -} - -quantum_bomb_random_zombie_grab_powerup_result( position ) -{ - if ( !isDefined( level.zombie_include_powerups ) || !level.zombie_include_powerups.size ) - { - return; - } - keys = getarraykeys( level.zombie_include_powerups ); - while ( keys.size ) - { - index = randomint( keys.size ); - if ( level.zombie_powerups[ keys[ index ] ].zombie_grabbable ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "quant_bad" ); - [[ level.quantum_bomb_play_player_effect_at_position_func ]]( position ); - level specific_powerup_drop( keys[ index ], position ); - return; - continue; - } - else - { - arrayremovevalue( keys, keys[ index ] ); - } - } -} - -quantum_bomb_random_weapon_powerup_result( position ) -{ - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "quant_good" ); - [[ level.quantum_bomb_play_player_effect_at_position_func ]]( position ); - level specific_powerup_drop( "random_weapon", position ); -} - -quantum_bomb_random_bonus_or_lose_points_powerup_result( position ) -{ - rand = randomint( 10 ); - powerup = "bonus_points_team"; - switch( rand ) - { - case 0: - case 1: - powerup = "lose_points_team"; - if ( isDefined( level.zombie_include_powerups[ powerup ] ) ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "quant_bad" ); - break; - } - else case 2: - case 3: - case 4: - powerup = "bonus_points_player"; - if ( isDefined( level.zombie_include_powerups[ powerup ] ) ) - { - break; - } - else default: - powerup = "bonus_points_team"; - break; - } - [[ level.quantum_bomb_play_player_effect_at_position_func ]]( position ); - level specific_powerup_drop( powerup, position ); -} - -special_powerup_drop( drop_point ) -{ - if ( !isDefined( level.zombie_include_powerups ) || level.zombie_include_powerups.size == 0 ) - { - return; - } - powerup = spawn( "script_model", drop_point + vectorScale( ( 0, 0, 0 ), 40 ) ); - playable_area = getentarray( "player_volume", "script_noteworthy" ); - valid_drop = 0; - i = 0; - while ( i < playable_area.size ) - { - if ( powerup istouching( playable_area[ i ] ) ) - { - valid_drop = 1; - break; - } - else - { - i++; - } - } - if ( !valid_drop ) - { - powerup delete(); - return; - } - powerup special_drop_setup(); -} - -cleanup_random_weapon_list() -{ - self waittill( "death" ); - arrayremovevalue( level.random_weapon_powerups, self ); -} - -powerup_setup( powerup_override, powerup_team, powerup_location ) -{ - powerup = undefined; - if ( !isDefined( powerup_override ) ) - { - powerup = get_valid_powerup(); - } - else - { - powerup = powerup_override; - if ( powerup == "tesla" && tesla_powerup_active() ) - { - powerup = "minigun"; - } - } - struct = level.zombie_powerups[ powerup ]; - if ( powerup == "random_weapon" ) - { - self.weapon = maps/mp/zombies/_zm_magicbox::treasure_chest_chooseweightedrandomweapon(); -/# - weapon = getDvar( "scr_force_weapon" ); - if ( weapon != "" && isDefined( level.zombie_weapons[ weapon ] ) ) - { - self.weapon = weapon; - setdvar( "scr_force_weapon", "" ); -#/ - } - self.base_weapon = self.weapon; - if ( !isDefined( level.random_weapon_powerups ) ) - { - level.random_weapon_powerups = []; - } - level.random_weapon_powerups[ level.random_weapon_powerups.size ] = self; - self thread cleanup_random_weapon_list(); - if ( isDefined( level.zombie_weapons[ self.weapon ].upgrade_name ) && !randomint( 4 ) ) - { - self.weapon = level.zombie_weapons[ self.weapon ].upgrade_name; - } - self setmodel( getweaponmodel( self.weapon ) ); - self useweaponhidetags( self.weapon ); - offsetdw = vectorScale( ( 0, 0, 0 ), 3 ); - self.worldgundw = undefined; - if ( maps/mp/zombies/_zm_magicbox::weapon_is_dual_wield( self.weapon ) ) - { - self.worldgundw = spawn( "script_model", self.origin + offsetdw ); - self.worldgundw.angles = self.angles; - self.worldgundw setmodel( maps/mp/zombies/_zm_magicbox::get_left_hand_weapon_model_name( self.weapon ) ); - self.worldgundw useweaponhidetags( self.weapon ); - self.worldgundw linkto( self, "tag_weapon", offsetdw, ( 0, 0, 0 ) ); - } - } - else - { - self setmodel( struct.model_name ); - } - maps/mp/_demo::bookmark( "zm_powerup_dropped", getTime(), undefined, undefined, 1 ); - playsoundatposition( "zmb_spawn_powerup", self.origin ); - if ( isDefined( powerup_team ) ) - { - self.powerup_team = powerup_team; - } - if ( isDefined( powerup_location ) ) - { - self.powerup_location = powerup_location; - } - self.powerup_name = struct.powerup_name; - self.hint = struct.hint; - self.solo = struct.solo; - self.caution = struct.caution; - self.zombie_grabbable = struct.zombie_grabbable; - self.func_should_drop_with_regular_powerups = struct.func_should_drop_with_regular_powerups; - if ( isDefined( struct.fx ) ) - { - self.fx = struct.fx; - } - self playloopsound( "zmb_spawn_powerup_loop" ); - level.active_powerups[ level.active_powerups.size ] = self; -} - -special_drop_setup() -{ - powerup = undefined; - is_powerup = 1; - if ( level.round_number <= 10 ) - { - powerup = get_valid_powerup(); - } - else - { - powerup = level.zombie_special_drop_array[ randomint( level.zombie_special_drop_array.size ) ]; - if ( level.round_number > 15 && randomint( 100 ) < ( ( level.round_number - 15 ) * 5 ) ) - { - powerup = "nothing"; - } - } - switch( powerup ) - { - case "all_revive": - case "bonfire_sale": - case "bonus_points_player": - case "bonus_points_team": - case "carpenter": - case "double_points": - case "empty_clip": - case "fire_sale": - case "free_perk": - case "insta_kill": - case "lose_perk": - case "lose_points_team": - case "minigun": - case "nuke": - case "random_weapon": - case "tesla": - break; - case "full_ammo": - if ( level.round_number > 10 && randomint( 100 ) < ( ( level.round_number - 10 ) * 5 ) ) - { - powerup = level.zombie_powerup_array[ randomint( level.zombie_powerup_array.size ) ]; - } - break; - case "dog": - if ( level.round_number >= 15 ) - { - is_powerup = 0; - dog_spawners = getentarray( "special_dog_spawner", "targetname" ); - thread play_sound_2d( "sam_nospawn" ); - } - else - { - powerup = get_valid_powerup(); - } - break; - default: - if ( isDefined( level._zombiemode_special_drop_setup ) ) - { - is_powerup = [[ level._zombiemode_special_drop_setup ]]( powerup ); - } - else - { - is_powerup = 0; - playfx( level._effect[ "lightning_dog_spawn" ], self.origin ); - playsoundatposition( "pre_spawn", self.origin ); - wait 1,5; - playsoundatposition( "zmb_bolt", self.origin ); - earthquake( 0,5, 0,75, self.origin, 1000 ); - playrumbleonposition( "explosion_generic", self.origin ); - playsoundatposition( "spawn", self.origin ); - wait 1; - thread play_sound_2d( "sam_nospawn" ); - self delete(); - } - } - if ( is_powerup ) - { - playfx( level._effect[ "lightning_dog_spawn" ], self.origin ); - playsoundatposition( "pre_spawn", self.origin ); - wait 1,5; - playsoundatposition( "zmb_bolt", self.origin ); - earthquake( 0,5, 0,75, self.origin, 1000 ); - playrumbleonposition( "explosion_generic", self.origin ); - playsoundatposition( "spawn", self.origin ); - self powerup_setup( powerup ); - self thread powerup_timeout(); - self thread powerup_wobble(); - self thread powerup_grab(); - self thread powerup_move(); - self thread powerup_emp(); - } -} - -powerup_zombie_grab_trigger_cleanup( trigger ) -{ - self waittill_any( "powerup_timedout", "powerup_grabbed", "hacked" ); - trigger delete(); -} - -powerup_zombie_grab( powerup_team ) -{ - self endon( "powerup_timedout" ); - self endon( "powerup_grabbed" ); - self endon( "hacked" ); - zombie_grab_trigger = spawn( "trigger_radius", self.origin - vectorScale( ( 0, 0, 0 ), 40 ), 4, 32, 72 ); - zombie_grab_trigger enablelinkto(); - zombie_grab_trigger linkto( self ); - zombie_grab_trigger setteamfortrigger( level.zombie_team ); - self thread powerup_zombie_grab_trigger_cleanup( zombie_grab_trigger ); - poi_dist = 300; - if ( isDefined( level._zombie_grabbable_poi_distance_override ) ) - { - poi_dist = level._zombie_grabbable_poi_distance_override; - } - zombie_grab_trigger create_zombie_point_of_interest( poi_dist, 2, 0, 1, undefined, undefined, powerup_team ); - while ( isDefined( self ) ) - { - zombie_grab_trigger waittill( "trigger", who ); - if ( isDefined( level._powerup_grab_check ) ) - { - while ( !( self [[ level._powerup_grab_check ]]( who ) ) ) - { - continue; - } - } - else if ( !isDefined( who ) || !isai( who ) ) - { - continue; - } - playfx( level._effect[ "powerup_grabbed_red" ], self.origin ); - playfx( level._effect[ "powerup_grabbed_wave_red" ], self.origin ); - switch( self.powerup_name ) - { - case "lose_points_team": - level thread lose_points_team_powerup( self ); - players = get_players(); - players[ randomintrange( 0, players.size ) ] thread powerup_vo( "lose_points" ); - break; - case "lose_perk": - level thread lose_perk_powerup( self ); - break; - case "empty_clip": - level thread empty_clip_powerup( self ); - break; - default: - if ( isDefined( level._zombiemode_powerup_zombie_grab ) ) - { - level thread [[ level._zombiemode_powerup_zombie_grab ]]( self ); - } - if ( isDefined( level._game_mode_powerup_zombie_grab ) ) - { - level thread [[ level._game_mode_powerup_zombie_grab ]]( self, who ); - } - else - { -/# - println( "Unrecognized poweup." ); -#/ - } - break; - } - level thread maps/mp/zombies/_zm_audio::do_announcer_playvox( "powerup", self.powerup_name ); - wait 0,1; - playsoundatposition( "zmb_powerup_grabbed", self.origin ); - self stoploopsound(); - self powerup_delete(); - self notify( "powerup_grabbed" ); - } -} - -powerup_grab( powerup_team ) -{ - if ( isDefined( self ) && self.zombie_grabbable ) - { - self thread powerup_zombie_grab( powerup_team ); - return; - } - self endon( "powerup_timedout" ); - self endon( "powerup_grabbed" ); - range_squared = 4096; - while ( isDefined( self ) ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( self.powerup_name != "minigun" && self.powerup_name != "tesla" && self.powerup_name != "random_weapon" && self.powerup_name == "meat_stink" || players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() && players[ i ] usebuttonpressed() && players[ i ] in_revive_trigger() ) - { - i++; - continue; - } - else - { - if ( distancesquared( players[ i ].origin, self.origin ) < range_squared ) - { - if ( isDefined( level._powerup_grab_check ) ) - { - if ( !( self [[ level._powerup_grab_check ]]( players[ i ] ) ) ) - { - i++; - continue; - } - } - else if ( isDefined( level.zombie_powerup_grab_func ) ) - { - level thread [[ level.zombie_powerup_grab_func ]](); - break; - } - else switch( self.powerup_name ) - { - case "nuke": - level thread nuke_powerup( self, players[ i ].team ); - players[ i ] thread powerup_vo( "nuke" ); - zombies = getaiarray( level.zombie_team ); - players[ i ].zombie_nuked = arraysort( zombies, self.origin ); - players[ i ] notify( "nuke_triggered" ); - break; - case "full_ammo": - level thread full_ammo_powerup( self, players[ i ] ); - players[ i ] thread powerup_vo( "full_ammo" ); - break; - case "double_points": - level thread double_points_powerup( self, players[ i ] ); - players[ i ] thread powerup_vo( "double_points" ); - break; - case "insta_kill": - level thread insta_kill_powerup( self, players[ i ] ); - players[ i ] thread powerup_vo( "insta_kill" ); - break; - case "carpenter": - if ( is_classic() ) - { - players[ i ] thread persistent_carpenter_ability_check(); - } - if ( isDefined( level.use_new_carpenter_func ) ) - { - level thread [[ level.use_new_carpenter_func ]]( self.origin ); - } - else level thread start_carpenter( self.origin ); - players[ i ] thread powerup_vo( "carpenter" ); - break; - case "fire_sale": - level thread start_fire_sale( self ); - players[ i ] thread powerup_vo( "firesale" ); - break; - case "bonfire_sale": - level thread start_bonfire_sale( self ); - players[ i ] thread powerup_vo( "firesale" ); - break; - case "minigun": - level thread minigun_weapon_powerup( players[ i ] ); - players[ i ] thread powerup_vo( "minigun" ); - break; - case "free_perk": - level thread free_perk_powerup( self ); - break; - case "tesla": - level thread tesla_weapon_powerup( players[ i ] ); - players[ i ] thread powerup_vo( "tesla" ); - break; - case "random_weapon": - if ( !level random_weapon_powerup( self, players[ i ] ) ) - { - i++; - continue; - } - else case "bonus_points_player": - level thread bonus_points_player_powerup( self, players[ i ] ); - players[ i ] thread powerup_vo( "bonus_points_solo" ); - break; - case "bonus_points_team": - level thread bonus_points_team_powerup( self ); - players[ i ] thread powerup_vo( "bonus_points_team" ); - break; - case "teller_withdrawl": - level thread teller_withdrawl( self, players[ i ] ); - break; - default: - if ( isDefined( level._zombiemode_powerup_grab ) ) - { - level thread [[ level._zombiemode_powerup_grab ]]( self, players[ i ] ); - } - else /# - println( "Unrecognized poweup." ); -#/ - break; - } - maps/mp/_demo::bookmark( "zm_player_powerup_grabbed", getTime(), players[ i ] ); - if ( should_award_stat( self.powerup_name ) ) - { - players[ i ] maps/mp/zombies/_zm_stats::increment_client_stat( "drops" ); - players[ i ] maps/mp/zombies/_zm_stats::increment_player_stat( "drops" ); - players[ i ] maps/mp/zombies/_zm_stats::increment_client_stat( self.powerup_name + "_pickedup" ); - players[ i ] maps/mp/zombies/_zm_stats::increment_player_stat( self.powerup_name + "_pickedup" ); - } - if ( self.solo ) - { - playfx( level._effect[ "powerup_grabbed_solo" ], self.origin ); - playfx( level._effect[ "powerup_grabbed_wave_solo" ], self.origin ); - } - else if ( self.caution ) - { - playfx( level._effect[ "powerup_grabbed_caution" ], self.origin ); - playfx( level._effect[ "powerup_grabbed_wave_caution" ], self.origin ); - } - else - { - playfx( level._effect[ "powerup_grabbed" ], self.origin ); - playfx( level._effect[ "powerup_grabbed_wave" ], self.origin ); - } - if ( isDefined( self.stolen ) && self.stolen ) - { - level notify( "monkey_see_monkey_dont_achieved" ); - } - if ( isDefined( self.grabbed_level_notify ) ) - { - level notify( self.grabbed_level_notify ); - } - self.claimed = 1; - self.power_up_grab_player = players[ i ]; - wait 0,1; - playsoundatposition( "zmb_powerup_grabbed", self.origin ); - self stoploopsound(); - self hide(); - if ( self.powerup_name != "fire_sale" ) - { - if ( isDefined( self.power_up_grab_player ) ) - { - if ( isDefined( level.powerup_intro_vox ) ) - { - level thread [[ level.powerup_intro_vox ]]( self ); - return; - break; - } - else - { - if ( isDefined( level.powerup_vo_available ) ) - { - can_say_vo = [[ level.powerup_vo_available ]](); - if ( !can_say_vo ) - { - self powerup_delete(); - self notify( "powerup_grabbed" ); - return; - } - } - } - } - } - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( self.powerup_name, self.power_up_grab_player.pers[ "team" ] ); - self powerup_delete(); - self notify( "powerup_grabbed" ); - } - } - i++; - } - wait 0,1; - } -} - -start_fire_sale( item ) -{ - if ( level.zombie_vars[ "zombie_powerup_fire_sale_time" ] > 0 && is_true( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) ) - { - level.zombie_vars[ "zombie_powerup_fire_sale_time" ] += 30; - return; - } - level notify( "powerup fire sale" ); - level endon( "powerup fire sale" ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "fire_sale" ); - level.zombie_vars[ "zombie_powerup_fire_sale_on" ] = 1; - level thread toggle_fire_sale_on(); - level.zombie_vars[ "zombie_powerup_fire_sale_time" ] = 30; - while ( level.zombie_vars[ "zombie_powerup_fire_sale_time" ] > 0 ) - { - wait 0,05; - level.zombie_vars[ "zombie_powerup_fire_sale_time" ] -= 0,05; - } - level.zombie_vars[ "zombie_powerup_fire_sale_on" ] = 0; - level notify( "fire_sale_off" ); -} - -start_bonfire_sale( item ) -{ - level notify( "powerup bonfire sale" ); - level endon( "powerup bonfire sale" ); - temp_ent = spawn( "script_origin", ( 0, 0, 0 ) ); - temp_ent playloopsound( "zmb_double_point_loop" ); - level.zombie_vars[ "zombie_powerup_bonfire_sale_on" ] = 1; - level thread toggle_bonfire_sale_on(); - level.zombie_vars[ "zombie_powerup_bonfire_sale_time" ] = 30; - while ( level.zombie_vars[ "zombie_powerup_bonfire_sale_time" ] > 0 ) - { - wait 0,05; - level.zombie_vars[ "zombie_powerup_bonfire_sale_time" ] -= 0,05; - } - level.zombie_vars[ "zombie_powerup_bonfire_sale_on" ] = 0; - level notify( "bonfire_sale_off" ); - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] playsound( "zmb_points_loop_off" ); - i++; - } - temp_ent delete(); -} - -start_carpenter( origin ) -{ - window_boards = getstructarray( "exterior_goal", "targetname" ); - total = level.exterior_goals.size; - carp_ent = spawn( "script_origin", ( 0, 0, 0 ) ); - carp_ent playloopsound( "evt_carpenter" ); - while ( 1 ) - { - windows = get_closest_window_repair( window_boards, origin ); - if ( !isDefined( windows ) ) - { - carp_ent stoploopsound( 1 ); - carp_ent playsoundwithnotify( "evt_carpenter_end", "sound_done" ); - carp_ent waittill( "sound_done" ); - break; - } - else arrayremovevalue( window_boards, windows ); - while ( 1 ) - { - if ( all_chunks_intact( windows, windows.barrier_chunks ) ) - { - break; - } - else chunk = get_random_destroyed_chunk( windows, windows.barrier_chunks ); - if ( !isDefined( chunk ) ) - { - break; - } - else - { - windows thread maps/mp/zombies/_zm_blockers::replace_chunk( windows, chunk, undefined, maps/mp/zombies/_zm_powerups::is_carpenter_boards_upgraded(), 1 ); - if ( isDefined( windows.clip ) ) - { - windows.clip enable_trigger(); - windows.clip disconnectpaths(); - } - else - { - blocker_disconnect_paths( windows.neg_start, windows.neg_end ); - } - wait_network_frame(); - wait 0,05; - } - } - wait_network_frame(); - } - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] maps/mp/zombies/_zm_score::player_add_points( "carpenter_powerup", 200 ); - i++; - } - carp_ent delete(); -} - -get_closest_window_repair( windows, origin ) -{ - current_window = undefined; - shortest_distance = undefined; - i = 0; - while ( i < windows.size ) - { - if ( all_chunks_intact( windows, windows[ i ].barrier_chunks ) ) - { - i++; - continue; - } - else if ( !isDefined( current_window ) ) - { - current_window = windows[ i ]; - shortest_distance = distancesquared( current_window.origin, origin ); - i++; - continue; - } - else - { - if ( distancesquared( windows[ i ].origin, origin ) < shortest_distance ) - { - current_window = windows[ i ]; - shortest_distance = distancesquared( windows[ i ].origin, origin ); - } - } - i++; - } - return current_window; -} - -powerup_vo( type ) -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( isDefined( level.powerup_vo_available ) ) - { - if ( !( [[ level.powerup_vo_available ]]() ) ) - { - return; - } - } - wait randomfloatrange( 2, 2,5 ); - if ( type == "tesla" ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", type ); - } - else - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "powerup", type ); - } - if ( isDefined( level.custom_powerup_vo_response ) ) - { - level [[ level.custom_powerup_vo_response ]]( self, type ); - } -} - -powerup_wobble_fx() -{ - self endon( "death" ); - if ( !isDefined( self ) ) - { - return; - } - if ( isDefined( level.powerup_fx_func ) ) - { - self thread [[ level.powerup_fx_func ]](); - return; - } - if ( self.solo ) - { - self setclientfield( "powerup_fx", 2 ); - } - else if ( self.caution ) - { - self setclientfield( "powerup_fx", 4 ); - } - else if ( self.zombie_grabbable ) - { - self setclientfield( "powerup_fx", 3 ); - } - else - { - self setclientfield( "powerup_fx", 1 ); - } -} - -powerup_wobble() -{ - self endon( "powerup_grabbed" ); - self endon( "powerup_timedout" ); - self thread powerup_wobble_fx(); - while ( isDefined( self ) ) - { - waittime = randomfloatrange( 2,5, 5 ); - yaw = randomint( 360 ); - if ( yaw > 300 ) - { - yaw = 300; - } - else - { - if ( yaw < 60 ) - { - yaw = 60; - } - } - yaw = self.angles[ 1 ] + yaw; - new_angles = ( -60 + randomint( 120 ), yaw, -45 + randomint( 90 ) ); - self rotateto( new_angles, waittime, waittime * 0,5, waittime * 0,5 ); - if ( isDefined( self.worldgundw ) ) - { - self.worldgundw rotateto( new_angles, waittime, waittime * 0,5, waittime * 0,5 ); - } - wait randomfloat( waittime - 0,1 ); - } -} - -powerup_timeout() -{ - if ( isDefined( level._powerup_timeout_override ) && !isDefined( self.powerup_team ) ) - { - self thread [[ level._powerup_timeout_override ]](); - return; - } - self endon( "powerup_grabbed" ); - self endon( "death" ); - self endon( "powerup_reset" ); - self show(); - wait_time = 15; - if ( isDefined( level._powerup_timeout_custom_time ) ) - { - time = [[ level._powerup_timeout_custom_time ]]( self ); - if ( time == 0 ) - { - return; - } - wait_time = time; - } - wait wait_time; - i = 0; - while ( i < 40 ) - { - if ( i % 2 ) - { - self ghost(); - if ( isDefined( self.worldgundw ) ) - { - self.worldgundw ghost(); - } - } - else - { - self show(); - if ( isDefined( self.worldgundw ) ) - { - self.worldgundw show(); - } - } - if ( i < 15 ) - { - wait 0,5; - i++; - continue; - } - else if ( i < 25 ) - { - wait 0,25; - i++; - continue; - } - else - { - wait 0,1; - } - i++; - } - self notify( "powerup_timedout" ); - self powerup_delete(); -} - -powerup_delete() -{ - arrayremovevalue( level.active_powerups, self, 0 ); - if ( isDefined( self.worldgundw ) ) - { - self.worldgundw delete(); - } - self delete(); -} - -powerup_delete_delayed( time ) -{ - if ( isDefined( time ) ) - { - wait time; - } - else - { - wait 0,01; - } - self powerup_delete(); -} - -nuke_powerup( drop_item, player_team ) -{ - location = drop_item.origin; - playfx( drop_item.fx, location ); - level thread nuke_flash(); - wait 0,5; - zombies = getaiarray( level.zombie_team ); - zombies = arraysort( zombies, location ); - zombies_nuked = []; - i = 0; - while ( i < zombies.size ) - { - if ( isDefined( zombies[ i ].ignore_nuke ) && zombies[ i ].ignore_nuke ) - { - i++; - continue; - } - else - { - if ( isDefined( zombies[ i ].marked_for_death ) && zombies[ i ].marked_for_death ) - { - i++; - continue; - } - else - { - if ( isDefined( zombies[ i ].nuke_damage_func ) ) - { - zombies[ i ] thread [[ zombies[ i ].nuke_damage_func ]](); - i++; - continue; - } - else if ( is_magic_bullet_shield_enabled( zombies[ i ] ) ) - { - i++; - continue; - } - else - { - zombies[ i ].marked_for_death = 1; - zombies[ i ].nuked = 1; - zombies_nuked[ zombies_nuked.size ] = zombies[ i ]; - } - } - } - i++; - } - i = 0; - while ( i < zombies_nuked.size ) - { - wait randomfloatrange( 0,1, 0,7 ); - if ( !isDefined( zombies_nuked[ i ] ) ) - { - i++; - continue; - } - else if ( is_magic_bullet_shield_enabled( zombies_nuked[ i ] ) ) - { - i++; - continue; - } - else - { - if ( i < 5 && !zombies_nuked[ i ].isdog ) - { - zombies_nuked[ i ] thread maps/mp/animscripts/zm_death::flame_death_fx(); - } - if ( !zombies_nuked[ i ].isdog ) - { - if ( isDefined( zombies_nuked[ i ].no_gib ) && !zombies_nuked[ i ].no_gib ) - { - zombies_nuked[ i ] maps/mp/zombies/_zm_spawner::zombie_head_gib(); - } - zombies_nuked[ i ] playsound( "evt_nuked" ); - } - zombies_nuked[ i ] dodamage( zombies_nuked[ i ].health + 666, zombies_nuked[ i ].origin ); - } - i++; - } - players = get_players( player_team ); - i = 0; - while ( i < players.size ) - { - players[ i ] maps/mp/zombies/_zm_score::player_add_points( "nuke_powerup", 400 ); - i++; - } -} - -nuke_flash() -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] play_sound_2d( "evt_nuke_flash" ); - i++; - } - level thread devil_dialog_delay(); - fadetowhite = newhudelem(); - fadetowhite.x = 0; - fadetowhite.y = 0; - fadetowhite.alpha = 0; - fadetowhite.horzalign = "fullscreen"; - fadetowhite.vertalign = "fullscreen"; - fadetowhite.foreground = 1; - fadetowhite setshader( "white", 640, 480 ); - fadetowhite fadeovertime( 0,2 ); - fadetowhite.alpha = 0,8; - wait 0,5; - fadetowhite fadeovertime( 1 ); - fadetowhite.alpha = 0; - wait 1,1; - fadetowhite destroy(); -} - -double_points_powerup( drop_item, player ) -{ - level notify( "powerup points scaled_" + player.team ); - level endon( "powerup points scaled_" + player.team ); - team = player.team; - level thread point_doubler_on_hud( drop_item, team ); - if ( isDefined( level.current_game_module ) && level.current_game_module == 2 ) - { - if ( isDefined( player._race_team ) ) - { - if ( player._race_team == 1 ) - { - level._race_team_double_points = 1; - } - else - { - level._race_team_double_points = 2; - } - } - } - level.zombie_vars[ team ][ "zombie_point_scalar" ] = 2; - players = get_players(); - player_index = 0; - while ( player_index < players.size ) - { - if ( team == players[ player_index ].team ) - { - players[ player_index ] setclientfield( "score_cf_double_points_active", 1 ); - } - player_index++; - } - wait 30; - level.zombie_vars[ team ][ "zombie_point_scalar" ] = 1; - level._race_team_double_points = undefined; - players = get_players(); - player_index = 0; - while ( player_index < players.size ) - { - if ( team == players[ player_index ].team ) - { - players[ player_index ] setclientfield( "score_cf_double_points_active", 0 ); - } - player_index++; - } -} - -full_ammo_powerup( drop_item, player ) -{ - players = get_players( player.team ); - if ( isDefined( level._get_game_module_players ) ) - { - players = [[ level._get_game_module_players ]]( player ); - } - i = 0; - while ( i < players.size ) - { - if ( players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - i++; - continue; - } - else - { - primary_weapons = players[ i ] getweaponslist( 1 ); - players[ i ] notify( "zmb_max_ammo" ); - players[ i ] notify( "zmb_lost_knife" ); - players[ i ] notify( "zmb_disable_claymore_prompt" ); - players[ i ] notify( "zmb_disable_spikemore_prompt" ); - x = 0; - while ( x < primary_weapons.size ) - { - if ( level.headshots_only && is_lethal_grenade( primary_weapons[ x ] ) ) - { - x++; - continue; - } - else - { - if ( isDefined( level.zombie_include_equipment ) && isDefined( level.zombie_include_equipment[ primary_weapons[ x ] ] ) ) - { - x++; - continue; - } - else - { - if ( players[ i ] hasweapon( primary_weapons[ x ] ) ) - { - players[ i ] givemaxammo( primary_weapons[ x ] ); - } - } - } - x++; - } - } - i++; - } - level thread full_ammo_on_hud( drop_item, player.team ); -} - -insta_kill_powerup( drop_item, player ) -{ - level notify( "powerup instakill_" + player.team ); - level endon( "powerup instakill_" + player.team ); - if ( isDefined( level.insta_kill_powerup_override ) ) - { - level thread [[ level.insta_kill_powerup_override ]]( drop_item, player ); - return; - } - if ( is_classic() ) - { - player thread player_insta_kill_upgrade_check(); - } - team = player.team; - level thread insta_kill_on_hud( drop_item, team ); - level.zombie_vars[ team ][ "zombie_insta_kill" ] = 1; - wait 30; - level.zombie_vars[ team ][ "zombie_insta_kill" ] = 0; - players = get_players( team ); - i = 0; - while ( i < players.size ) - { - if ( isDefined( players[ i ] ) ) - { - players[ i ] notify( "insta_kill_over" ); - } - i++; - } -} - -is_insta_kill_active() -{ - return level.zombie_vars[ self.team ][ "zombie_insta_kill" ]; -} - -player_insta_kill_upgrade_check() -{ - if ( isDefined( level.pers_upgrade_insta_kill ) && level.pers_upgrade_insta_kill ) - { - self endon( "death" ); - players = get_players(); - i = 0; - while ( i < players.size ) - { - e_player = players[ i ]; - if ( isDefined( e_player.pers_upgrades_awarded[ "insta_kill" ] ) && e_player.pers_upgrades_awarded[ "insta_kill" ] ) - { - e_player thread insta_kill_upgraded_player_kill_func( level.pers_insta_kill_upgrade_active_time ); - } - i++; - } - if ( isDefined( self.pers_upgrades_awarded[ "insta_kill" ] ) && !self.pers_upgrades_awarded[ "insta_kill" ] ) - { - kills_start = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "kills" ); - self waittill( "insta_kill_over" ); - kills_end = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "kills" ); - num_killed = kills_end - kills_start; - if ( num_killed > 0 ) - { - self maps/mp/zombies/_zm_stats::zero_client_stat( "pers_insta_kill", 0 ); - return; - } - else - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "pers_insta_kill", 0 ); - } - } - } -} - -insta_kill_upgraded_player_kill_func( active_time ) -{ - self endon( "death" ); - wait 0,25; - self thread maps/mp/zombies/_zm_pers_upgrades::insta_kill_pers_upgrade_icon(); - start_time = getTime(); - zombie_collide_radius = 50; - zombie_player_height_test = 100; - while ( 1 ) - { - time = getTime(); - dt = ( time - start_time ) / 1000; - if ( dt > active_time ) - { - return; - } - else if ( !is_insta_kill_active() ) - { - return; - } - else - { - a_zombies = getaiarray( level.zombie_team ); - e_closest = undefined; - i = 0; - while ( i < a_zombies.size ) - { - e_zombie = a_zombies[ i ]; - if ( isDefined( e_zombie.marked_for_insta_upgraded_death ) ) - { - i++; - continue; - } - else - { - height_diff = abs( self.origin[ 2 ] - e_zombie.origin[ 2 ] ); - if ( height_diff < zombie_player_height_test ) - { - dist = distance2d( self.origin, e_zombie.origin ); - if ( dist < zombie_collide_radius ) - { - dist_max = dist; - e_closest = e_zombie; - } - } - } - i++; - } - if ( isDefined( e_closest ) ) - { - e_closest.marked_for_insta_upgraded_death = 1; - e_closest dodamage( e_closest.health + 666, e_closest.origin, self, self, "none", "MOD_PISTOL_BULLET", 0, "knife_zm" ); - } - wait 0,01; - } - } -} - -check_for_instakill( player, mod, hit_location ) -{ - if ( isDefined( player ) && isalive( player ) && isDefined( level.check_for_instakill_override ) ) - { - if ( !( self [[ level.check_for_instakill_override ]]( player ) ) ) - { - return; - } - if ( player.use_weapon_type == "MOD_MELEE" ) - { - player.last_kill_method = "MOD_MELEE"; - } - else - { - player.last_kill_method = "MOD_UNKNOWN"; - } - modname = remove_mod_from_methodofdeath( mod ); - if ( isDefined( self.no_gib ) && !self.no_gib ) - { - self maps/mp/zombies/_zm_spawner::zombie_head_gib(); - } - self.health = 1; - self dodamage( self.health + 666, self.origin, player, self, hit_location, modname ); - player notify( "zombie_killed" ); - } - if ( isDefined( player ) && isalive( player ) || level.zombie_vars[ player.team ][ "zombie_insta_kill" ] && isDefined( player.personal_instakill ) && player.personal_instakill ) - { - if ( is_magic_bullet_shield_enabled( self ) ) - { - return; - } - if ( isDefined( self.instakill_func ) ) - { - self thread [[ self.instakill_func ]](); - return; - } - if ( player.use_weapon_type == "MOD_MELEE" ) - { - player.last_kill_method = "MOD_MELEE"; - } - else - { - player.last_kill_method = "MOD_UNKNOWN"; - } - modname = remove_mod_from_methodofdeath( mod ); - if ( flag( "dog_round" ) ) - { - self.health = 1; - self dodamage( self.health + 666, self.origin, player, self, hit_location, modname ); - player notify( "zombie_killed" ); - return; - } - else - { - if ( isDefined( self.no_gib ) && !self.no_gib ) - { - self maps/mp/zombies/_zm_spawner::zombie_head_gib(); - } - self.health = 1; - self dodamage( self.health + 666, self.origin, player, self, hit_location, modname ); - player notify( "zombie_killed" ); - } - } -} - -insta_kill_on_hud( drop_item, player_team ) -{ - if ( level.zombie_vars[ player_team ][ "zombie_powerup_insta_kill_on" ] ) - { - level.zombie_vars[ player_team ][ "zombie_powerup_insta_kill_time" ] = 30; - return; - } - level.zombie_vars[ player_team ][ "zombie_powerup_insta_kill_on" ] = 1; - level thread time_remaning_on_insta_kill_powerup( player_team ); -} - -time_remaning_on_insta_kill_powerup( player_team ) -{ - temp_enta = spawn( "script_origin", ( 0, 0, 0 ) ); - temp_enta playloopsound( "zmb_insta_kill_loop" ); - while ( level.zombie_vars[ player_team ][ "zombie_powerup_insta_kill_time" ] >= 0 ) - { - wait 0,05; - level.zombie_vars[ player_team ][ "zombie_powerup_insta_kill_time" ] -= 0,05; - } - players = get_players( player_team ); - i = 0; - while ( i < players.size ) - { - players[ i ] playsound( "zmb_insta_kill" ); - i++; - } - temp_enta stoploopsound( 2 ); - level.zombie_vars[ player_team ][ "zombie_powerup_insta_kill_on" ] = 0; - level.zombie_vars[ player_team ][ "zombie_powerup_insta_kill_time" ] = 30; - temp_enta delete(); -} - -point_doubler_on_hud( drop_item, player_team ) -{ - self endon( "disconnect" ); - if ( level.zombie_vars[ player_team ][ "zombie_powerup_point_doubler_on" ] ) - { - level.zombie_vars[ player_team ][ "zombie_powerup_point_doubler_time" ] = 30; - return; - } - level.zombie_vars[ player_team ][ "zombie_powerup_point_doubler_on" ] = 1; - level thread time_remaining_on_point_doubler_powerup( player_team ); -} - -time_remaining_on_point_doubler_powerup( player_team ) -{ - temp_ent = spawn( "script_origin", ( 0, 0, 0 ) ); - temp_ent playloopsound( "zmb_double_point_loop" ); - while ( level.zombie_vars[ player_team ][ "zombie_powerup_point_doubler_time" ] >= 0 ) - { - wait 0,05; - level.zombie_vars[ player_team ][ "zombie_powerup_point_doubler_time" ] -= 0,05; - } - level.zombie_vars[ player_team ][ "zombie_powerup_point_doubler_on" ] = 0; - players = get_players( player_team ); - i = 0; - while ( i < players.size ) - { - players[ i ] playsound( "zmb_points_loop_off" ); - i++; - } - temp_ent stoploopsound( 2 ); - level.zombie_vars[ player_team ][ "zombie_powerup_point_doubler_time" ] = 30; - temp_ent delete(); -} - -toggle_bonfire_sale_on() -{ - level endon( "powerup bonfire sale" ); - if ( !isDefined( level.zombie_vars[ "zombie_powerup_bonfire_sale_on" ] ) ) - { - return; - } - if ( level.zombie_vars[ "zombie_powerup_bonfire_sale_on" ] ) - { - if ( isDefined( level.bonfire_init_func ) ) - { - level thread [[ level.bonfire_init_func ]](); - } - level waittill( "bonfire_sale_off" ); - } -} - -toggle_fire_sale_on() -{ - level endon( "powerup fire sale" ); - if ( !isDefined( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) ) - { - return; - } - while ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) - { - i = 0; - while ( i < level.chests.size ) - { - show_firesale_box = level.chests[ i ] [[ level._zombiemode_check_firesale_loc_valid_func ]](); - if ( show_firesale_box ) - { - level.chests[ i ].zombie_cost = 10; - if ( level.chest_index != i ) - { - level.chests[ i ].was_temp = 1; - if ( is_true( level.chests[ i ].hidden ) ) - { - level.chests[ i ] thread maps/mp/zombies/_zm_magicbox::show_chest(); - } - wait_network_frame(); - } - } - i++; - } - level waittill( "fire_sale_off" ); - i = 0; - while ( i < level.chests.size ) - { - show_firesale_box = level.chests[ i ] [[ level._zombiemode_check_firesale_loc_valid_func ]](); - if ( show_firesale_box ) - { - if ( level.chest_index != i && isDefined( level.chests[ i ].was_temp ) ) - { - level.chests[ i ].was_temp = undefined; - level thread remove_temp_chest( i ); - } - level.chests[ i ].zombie_cost = level.chests[ i ].old_cost; - } - i++; - } - } -} - -fire_sale_weapon_wait() -{ - self.zombie_cost = self.old_cost; - while ( isDefined( self.chest_user ) ) - { - wait_network_frame(); - } - self set_hint_string( self, "default_treasure_chest_" + self.zombie_cost ); -} - -remove_temp_chest( chest_index ) -{ - while ( isDefined( level.chests[ chest_index ].chest_user ) || isDefined( level.chests[ chest_index ]._box_open ) && level.chests[ chest_index ]._box_open == 1 ) - { - wait_network_frame(); - } - if ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) - { - level.chests[ chest_index ].was_temp = 1; - level.chests[ chest_index ].zombie_cost = 10; - return; - } - playfx( level._effect[ "poltergeist" ], level.chests[ chest_index ].orig_origin ); - level.chests[ chest_index ].zbarrier playsound( "zmb_box_poof_land" ); - level.chests[ chest_index ].zbarrier playsound( "zmb_couch_slam" ); - level.chests[ chest_index ] maps/mp/zombies/_zm_magicbox::hide_chest(); -} - -devil_dialog_delay() -{ - wait 1; -} - -full_ammo_on_hud( drop_item, player_team ) -{ - self endon( "disconnect" ); - hudelem = maps/mp/gametypes_zm/_hud_util::createserverfontstring( "objective", 2, player_team ); - hudelem maps/mp/gametypes_zm/_hud_util::setpoint( "TOP", undefined, 0, level.zombie_vars[ "zombie_timer_offset" ] - ( level.zombie_vars[ "zombie_timer_offset_interval" ] * 2 ) ); - hudelem.sort = 0,5; - hudelem.alpha = 0; - hudelem fadeovertime( 0,5 ); - hudelem.alpha = 1; - if ( isDefined( drop_item ) ) - { - hudelem.label = drop_item.hint; - } - hudelem thread full_ammo_move_hud( player_team ); -} - -full_ammo_move_hud( player_team ) -{ - players = get_players( player_team ); - i = 0; - while ( i < players.size ) - { - players[ i ] playsound( "zmb_full_ammo" ); - i++; - } - wait 0,5; - move_fade_time = 1,5; - self fadeovertime( move_fade_time ); - self moveovertime( move_fade_time ); - self.y = 270; - self.alpha = 0; - wait move_fade_time; - self destroy(); -} - -check_for_rare_drop_override( pos ) -{ - if ( isDefined( flag( "ape_round" ) ) && flag( "ape_round" ) ) - { - return 0; - } - return 0; -} - -setup_firesale_audio() -{ - wait 2; - intercom = getentarray( "intercom", "targetname" ); - while ( 1 ) - { - while ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] == 0 ) - { - wait 0,2; - } - i = 0; - while ( i < intercom.size ) - { - intercom[ i ] thread play_firesale_audio(); - i++; - } - while ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] == 1 ) - { - wait 0,1; - } - level notify( "firesale_over" ); - } -} - -play_firesale_audio() -{ - if ( isDefined( level.sndannouncerisrich ) && level.sndannouncerisrich ) - { - self playloopsound( "mus_fire_sale_rich" ); - } - else - { - self playloopsound( "mus_fire_sale" ); - } - level waittill( "firesale_over" ); - self stoploopsound(); -} - -setup_bonfiresale_audio() -{ - wait 2; - intercom = getentarray( "intercom", "targetname" ); - while ( 1 ) - { - while ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] == 0 ) - { - wait 0,2; - } - i = 0; - while ( i < intercom.size ) - { - intercom[ i ] thread play_bonfiresale_audio(); - i++; - } - while ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] == 1 ) - { - wait 0,1; - } - level notify( "firesale_over" ); - } -} - -play_bonfiresale_audio() -{ - if ( isDefined( level.sndannouncerisrich ) && level.sndannouncerisrich ) - { - self playloopsound( "mus_fire_sale_rich" ); - } - else - { - self playloopsound( "mus_fire_sale" ); - } - level waittill( "firesale_over" ); - self stoploopsound(); -} - -free_perk_powerup( item ) -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( !players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() && players[ i ].sessionstate != "spectator" ) - { - players[ i ] maps/mp/zombies/_zm_perks::give_random_perk(); - } - i++; - } -} - -random_weapon_powerup_throttle() -{ - self.random_weapon_powerup_throttle = 1; - wait 0,25; - self.random_weapon_powerup_throttle = 0; -} - -random_weapon_powerup( item, player ) -{ - if ( player.sessionstate == "spectator" || player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - return 0; - } - if ( isDefined( player.random_weapon_powerup_throttle ) && !player.random_weapon_powerup_throttle || player isswitchingweapons() && player.is_drinking > 0 ) - { - return 0; - } - current_weapon = player getcurrentweapon(); - current_weapon_type = weaponinventorytype( current_weapon ); - if ( !is_tactical_grenade( item.weapon ) ) - { - if ( current_weapon_type != "primary" && current_weapon_type != "altmode" ) - { - return 0; - } - if ( !isDefined( level.zombie_weapons[ current_weapon ] ) && !maps/mp/zombies/_zm_weapons::is_weapon_upgraded( current_weapon ) && current_weapon_type != "altmode" ) - { - return 0; - } - } - player thread random_weapon_powerup_throttle(); - weapon_string = item.weapon; - if ( weapon_string == "knife_ballistic_zm" ) - { - weapon = player maps/mp/zombies/_zm_melee_weapon::give_ballistic_knife( weapon_string, 0 ); - } - else - { - if ( weapon_string == "knife_ballistic_upgraded_zm" ) - { - weapon = player maps/mp/zombies/_zm_melee_weapon::give_ballistic_knife( weapon_string, 1 ); - } - } - player thread maps/mp/zombies/_zm_weapons::weapon_give( weapon_string ); - return 1; -} - -bonus_points_player_powerup( item, player ) -{ - points = randomintrange( 1, 25 ) * 100; - if ( !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() && player.sessionstate != "spectator" ) - { - player maps/mp/zombies/_zm_score::player_add_points( "bonus_points_powerup", points ); - } -} - -bonus_points_team_powerup( item ) -{ - points = randomintrange( 1, 25 ) * 100; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( !players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() && players[ i ].sessionstate != "spectator" ) - { - players[ i ] maps/mp/zombies/_zm_score::player_add_points( "bonus_points_powerup", points ); - } - i++; - } -} - -lose_points_team_powerup( item ) -{ - points = randomintrange( 1, 25 ) * 100; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( !players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() && players[ i ].sessionstate != "spectator" ) - { - if ( ( players[ i ].score - points ) <= 0 ) - { - players[ i ] maps/mp/zombies/_zm_score::minus_to_player_score( players[ i ].score ); - i++; - continue; - } - else - { - players[ i ] maps/mp/zombies/_zm_score::minus_to_player_score( points ); - } - } - i++; - } -} - -lose_perk_powerup( item ) -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - if ( !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() && player.sessionstate != "spectator" ) - { - player maps/mp/zombies/_zm_perks::lose_random_perk(); - } - i++; - } -} - -empty_clip_powerup( item ) -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - if ( !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() && player.sessionstate != "spectator" ) - { - weapon = player getcurrentweapon(); - player setweaponammoclip( weapon, 0 ); - } - i++; - } -} - -minigun_weapon_powerup( ent_player, time ) -{ - ent_player endon( "disconnect" ); - ent_player endon( "death" ); - ent_player endon( "player_downed" ); - if ( !isDefined( time ) ) - { - time = 30; - } - if ( isDefined( level._minigun_time_override ) ) - { - time = level._minigun_time_override; - } - if ( ent_player.zombie_vars[ "zombie_powerup_minigun_on" ] || ent_player getcurrentweapon() == "minigun_zm" && isDefined( ent_player.has_minigun ) && ent_player.has_minigun ) - { - if ( ent_player.zombie_vars[ "zombie_powerup_minigun_time" ] < time ) - { - ent_player.zombie_vars[ "zombie_powerup_minigun_time" ] = time; - } - return; - } - ent_player notify( "replace_weapon_powerup" ); - ent_player._show_solo_hud = 1; - level._zombie_minigun_powerup_last_stand_func = ::minigun_watch_gunner_downed; - ent_player.has_minigun = 1; - ent_player.has_powerup_weapon = 1; - ent_player increment_is_drinking(); - ent_player._zombie_gun_before_minigun = ent_player getcurrentweapon(); - ent_player giveweapon( "minigun_zm" ); - ent_player switchtoweapon( "minigun_zm" ); - ent_player.zombie_vars[ "zombie_powerup_minigun_on" ] = 1; - level thread minigun_weapon_powerup_countdown( ent_player, "minigun_time_over", time ); - level thread minigun_weapon_powerup_replace( ent_player, "minigun_time_over" ); -} - -minigun_weapon_powerup_countdown( ent_player, str_gun_return_notify, time ) -{ - ent_player endon( "death" ); - ent_player endon( "disconnect" ); - ent_player endon( "player_downed" ); - ent_player endon( str_gun_return_notify ); - ent_player endon( "replace_weapon_powerup" ); - setclientsysstate( "levelNotify", "minis", ent_player ); - ent_player.zombie_vars[ "zombie_powerup_minigun_time" ] = time; - while ( ent_player.zombie_vars[ "zombie_powerup_minigun_time" ] > 0 ) - { - wait 0,05; - ent_player.zombie_vars[ "zombie_powerup_minigun_time" ] -= 0,05; - } - setclientsysstate( "levelNotify", "minie", ent_player ); - level thread minigun_weapon_powerup_remove( ent_player, str_gun_return_notify ); -} - -minigun_weapon_powerup_replace( ent_player, str_gun_return_notify ) -{ - ent_player endon( "death" ); - ent_player endon( "disconnect" ); - ent_player endon( "player_downed" ); - ent_player endon( str_gun_return_notify ); - ent_player waittill( "replace_weapon_powerup" ); - ent_player takeweapon( "minigun_zm" ); - ent_player.zombie_vars[ "zombie_powerup_minigun_on" ] = 0; - ent_player.has_minigun = 0; - ent_player decrement_is_drinking(); -} - -minigun_weapon_powerup_remove( ent_player, str_gun_return_notify ) -{ - ent_player endon( "death" ); - ent_player endon( "player_downed" ); - ent_player takeweapon( "minigun_zm" ); - ent_player.zombie_vars[ "zombie_powerup_minigun_on" ] = 0; - ent_player._show_solo_hud = 0; - ent_player.has_minigun = 0; - ent_player.has_powerup_weapon = 0; - ent_player notify( str_gun_return_notify ); - ent_player decrement_is_drinking(); - while ( isDefined( ent_player._zombie_gun_before_minigun ) ) - { - player_weapons = ent_player getweaponslistprimaries(); - i = 0; - while ( i < player_weapons.size ) - { - if ( player_weapons[ i ] == ent_player._zombie_gun_before_minigun ) - { - ent_player switchtoweapon( ent_player._zombie_gun_before_minigun ); - return; - } - i++; - } - } - primaryweapons = ent_player getweaponslistprimaries(); - if ( primaryweapons.size > 0 ) - { - ent_player switchtoweapon( primaryweapons[ 0 ] ); - } - else - { - allweapons = ent_player getweaponslist( 1 ); - i = 0; - while ( i < allweapons.size ) - { - if ( is_melee_weapon( allweapons[ i ] ) ) - { - ent_player switchtoweapon( allweapons[ i ] ); - return; - } - i++; - } - } -} - -minigun_weapon_powerup_off() -{ - self.zombie_vars[ "zombie_powerup_minigun_time" ] = 0; -} - -minigun_watch_gunner_downed() -{ - if ( isDefined( self.has_minigun ) && !self.has_minigun ) - { - return; - } - primaryweapons = self getweaponslistprimaries(); - i = 0; - while ( i < primaryweapons.size ) - { - if ( primaryweapons[ i ] == "minigun_zm" ) - { - self takeweapon( "minigun_zm" ); - } - i++; - } - self notify( "minigun_time_over" ); - self.zombie_vars[ "zombie_powerup_minigun_on" ] = 0; - self._show_solo_hud = 0; - wait 0,05; - self.has_minigun = 0; - self.has_powerup_weapon = 0; -} - -tesla_weapon_powerup( ent_player, time ) -{ - ent_player endon( "disconnect" ); - ent_player endon( "death" ); - ent_player endon( "player_downed" ); - if ( !isDefined( time ) ) - { - time = 11; - } - if ( ent_player.zombie_vars[ "zombie_powerup_tesla_on" ] || ent_player getcurrentweapon() == "tesla_gun_zm" && isDefined( ent_player.has_tesla ) && ent_player.has_tesla ) - { - ent_player givemaxammo( "tesla_gun_zm" ); - if ( ent_player.zombie_vars[ "zombie_powerup_tesla_time" ] < time ) - { - ent_player.zombie_vars[ "zombie_powerup_tesla_time" ] = time; - } - return; - } - ent_player notify( "replace_weapon_powerup" ); - ent_player._show_solo_hud = 1; - level._zombie_tesla_powerup_last_stand_func = ::tesla_watch_gunner_downed; - ent_player.has_tesla = 1; - ent_player.has_powerup_weapon = 1; - ent_player increment_is_drinking(); - ent_player._zombie_gun_before_tesla = ent_player getcurrentweapon(); - ent_player giveweapon( "tesla_gun_zm" ); - ent_player givemaxammo( "tesla_gun_zm" ); - ent_player switchtoweapon( "tesla_gun_zm" ); - ent_player.zombie_vars[ "zombie_powerup_tesla_on" ] = 1; - level thread tesla_weapon_powerup_countdown( ent_player, "tesla_time_over", time ); - level thread tesla_weapon_powerup_replace( ent_player, "tesla_time_over" ); -} - -tesla_weapon_powerup_countdown( ent_player, str_gun_return_notify, time ) -{ - ent_player endon( "death" ); - ent_player endon( "player_downed" ); - ent_player endon( str_gun_return_notify ); - ent_player endon( "replace_weapon_powerup" ); - setclientsysstate( "levelNotify", "minis", ent_player ); - ent_player.zombie_vars[ "zombie_powerup_tesla_time" ] = time; - while ( 1 ) - { - ent_player waittill_any( "weapon_fired", "reload", "zmb_max_ammo" ); - if ( !ent_player getweaponammostock( "tesla_gun_zm" ) ) - { - clip_count = ent_player getweaponammoclip( "tesla_gun_zm" ); - if ( !clip_count ) - { - break; - } - else if ( clip_count == 1 ) - { - ent_player.zombie_vars[ "zombie_powerup_tesla_time" ] = 1; - } - else - { - if ( clip_count == 3 ) - { - ent_player.zombie_vars[ "zombie_powerup_tesla_time" ] = 6; - } - } - continue; - } - else - { - ent_player.zombie_vars[ "zombie_powerup_tesla_time" ] = 11; - } - } - setclientsysstate( "levelNotify", "minie", ent_player ); - level thread tesla_weapon_powerup_remove( ent_player, str_gun_return_notify ); -} - -tesla_weapon_powerup_replace( ent_player, str_gun_return_notify ) -{ - ent_player endon( "death" ); - ent_player endon( "disconnect" ); - ent_player endon( "player_downed" ); - ent_player endon( str_gun_return_notify ); - ent_player waittill( "replace_weapon_powerup" ); - ent_player takeweapon( "tesla_gun_zm" ); - ent_player.zombie_vars[ "zombie_powerup_tesla_on" ] = 0; - ent_player.has_tesla = 0; - ent_player decrement_is_drinking(); -} - -tesla_weapon_powerup_remove( ent_player, str_gun_return_notify ) -{ - ent_player endon( "death" ); - ent_player endon( "player_downed" ); - ent_player takeweapon( "tesla_gun_zm" ); - ent_player.zombie_vars[ "zombie_powerup_tesla_on" ] = 0; - ent_player._show_solo_hud = 0; - ent_player.has_tesla = 0; - ent_player.has_powerup_weapon = 0; - ent_player notify( str_gun_return_notify ); - ent_player decrement_is_drinking(); - while ( isDefined( ent_player._zombie_gun_before_tesla ) ) - { - player_weapons = ent_player getweaponslistprimaries(); - i = 0; - while ( i < player_weapons.size ) - { - if ( player_weapons[ i ] == ent_player._zombie_gun_before_tesla ) - { - ent_player switchtoweapon( ent_player._zombie_gun_before_tesla ); - return; - } - i++; - } - } - primaryweapons = ent_player getweaponslistprimaries(); - if ( primaryweapons.size > 0 ) - { - ent_player switchtoweapon( primaryweapons[ 0 ] ); - } - else - { - allweapons = ent_player getweaponslist( 1 ); - i = 0; - while ( i < allweapons.size ) - { - if ( is_melee_weapon( allweapons[ i ] ) ) - { - ent_player switchtoweapon( allweapons[ i ] ); - return; - } - i++; - } - } -} - -tesla_weapon_powerup_off() -{ - self.zombie_vars[ "zombie_powerup_tesla_time" ] = 0; -} - -tesla_watch_gunner_downed() -{ - if ( isDefined( self.has_tesla ) && !self.has_tesla ) - { - return; - } - primaryweapons = self getweaponslistprimaries(); - i = 0; - while ( i < primaryweapons.size ) - { - if ( primaryweapons[ i ] == "tesla_gun_zm" ) - { - self takeweapon( "tesla_gun_zm" ); - } - i++; - } - self notify( "tesla_time_over" ); - self.zombie_vars[ "zombie_powerup_tesla_on" ] = 0; - self._show_solo_hud = 0; - wait 0,05; - self.has_tesla = 0; - self.has_powerup_weapon = 0; -} - -tesla_powerup_active() -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ].zombie_vars[ "zombie_powerup_tesla_on" ] ) - { - return 1; - } - i++; - } - return 0; -} - -print_powerup_drop( powerup, type ) -{ -/# - if ( !isDefined( level.powerup_drop_time ) ) - { - level.powerup_drop_time = 0; - level.powerup_random_count = 0; - level.powerup_score_count = 0; - } - time = ( getTime() - level.powerup_drop_time ) * 0,001; - level.powerup_drop_time = getTime(); - if ( type == "random" ) - { - level.powerup_random_count++; - } - else - { - level.powerup_score_count++; - } - println( "========== POWER UP DROPPED ==========" ); - println( "DROPPED: " + powerup ); - println( "HOW IT DROPPED: " + type ); - println( "--------------------" ); - println( "Drop Time: " + time ); - println( "Random Powerup Count: " + level.powerup_random_count ); - println( "Random Powerup Count: " + level.powerup_score_count ); - println( "======================================" ); -#/ -} - -register_carpenter_node( node, callback ) -{ - if ( !isDefined( level._additional_carpenter_nodes ) ) - { - level._additional_carpenter_nodes = []; - } - node._post_carpenter_callback = callback; - level._additional_carpenter_nodes[ level._additional_carpenter_nodes.size ] = node; -} - -start_carpenter_new( origin ) -{ - level.carpenter_powerup_active = 1; - window_boards = getstructarray( "exterior_goal", "targetname" ); - if ( isDefined( level._additional_carpenter_nodes ) ) - { - window_boards = arraycombine( window_boards, level._additional_carpenter_nodes, 0, 0 ); - } - carp_ent = spawn( "script_origin", ( 0, 0, 0 ) ); - carp_ent playloopsound( "evt_carpenter" ); - boards_near_players = get_near_boards( window_boards ); - boards_far_from_players = get_far_boards( window_boards ); - level repair_far_boards( boards_far_from_players, maps/mp/zombies/_zm_powerups::is_carpenter_boards_upgraded() ); - i = 0; - while ( i < boards_near_players.size ) - { - window = boards_near_players[ i ]; - num_chunks_checked = 0; - last_repaired_chunk = undefined; - while ( 1 ) - { - if ( all_chunks_intact( window, window.barrier_chunks ) ) - { - break; - } - else chunk = get_random_destroyed_chunk( window, window.barrier_chunks ); - if ( !isDefined( chunk ) ) - { - break; - } - else window thread maps/mp/zombies/_zm_blockers::replace_chunk( window, chunk, undefined, maps/mp/zombies/_zm_powerups::is_carpenter_boards_upgraded(), 1 ); - last_repaired_chunk = chunk; - if ( isDefined( window.clip ) ) - { - window.clip enable_trigger(); - window.clip disconnectpaths(); - } - else - { - blocker_disconnect_paths( window.neg_start, window.neg_end ); - } - wait_network_frame(); - num_chunks_checked++; - if ( num_chunks_checked >= 20 ) - { - break; - } - else - { - } - } - if ( isDefined( window.zbarrier ) ) - { - if ( isDefined( last_repaired_chunk ) ) - { - while ( window.zbarrier getzbarrierpiecestate( last_repaired_chunk ) == "closing" ) - { - wait 0,05; - } - if ( isDefined( window._post_carpenter_callback ) ) - { - window [[ window._post_carpenter_callback ]](); - } - } - i++; - continue; - } - else while ( isDefined( last_repaired_chunk ) && last_repaired_chunk.state == "mid_repair" ) - { - wait 0,05; - } - i++; - } - carp_ent stoploopsound( 1 ); - carp_ent playsoundwithnotify( "evt_carpenter_end", "sound_done" ); - carp_ent waittill( "sound_done" ); - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] maps/mp/zombies/_zm_score::player_add_points( "carpenter_powerup", 200 ); - i++; - } - carp_ent delete(); - level notify( "carpenter_finished" ); - level.carpenter_powerup_active = undefined; -} - -is_carpenter_boards_upgraded() -{ - if ( isDefined( level.pers_carpenter_boards_active ) && level.pers_carpenter_boards_active == 1 ) - { - return 1; - } - return 0; -} - -get_near_boards( windows ) -{ - players = get_players(); - boards_near_players = []; - j = 0; - while ( j < windows.size ) - { - close = 0; - i = 0; - while ( i < players.size ) - { - origin = undefined; - if ( isDefined( windows[ j ].zbarrier ) ) - { - origin = windows[ j ].zbarrier.origin; - } - else - { - origin = windows[ j ].origin; - } - if ( distancesquared( players[ i ].origin, origin ) <= level.board_repair_distance_squared ) - { - close = 1; - break; - } - else - { - i++; - } - } - if ( close ) - { - boards_near_players[ boards_near_players.size ] = windows[ j ]; - } - j++; - } - return boards_near_players; -} - -get_far_boards( windows ) -{ - players = get_players(); - boards_far_from_players = []; - j = 0; - while ( j < windows.size ) - { - close = 0; - i = 0; - while ( i < players.size ) - { - origin = undefined; - if ( isDefined( windows[ j ].zbarrier ) ) - { - origin = windows[ j ].zbarrier.origin; - } - else - { - origin = windows[ j ].origin; - } - if ( distancesquared( players[ i ].origin, origin ) >= level.board_repair_distance_squared ) - { - close = 1; - break; - } - else - { - i++; - } - } - if ( close ) - { - boards_far_from_players[ boards_far_from_players.size ] = windows[ j ]; - } - j++; - } - return boards_far_from_players; -} - -repair_far_boards( barriers, upgrade ) -{ - i = 0; - while ( i < barriers.size ) - { - barrier = barriers[ i ]; - if ( all_chunks_intact( barrier, barrier.barrier_chunks ) ) - { - i++; - continue; - } - else - { - while ( isDefined( barrier.zbarrier ) ) - { - a_pieces = barrier.zbarrier getzbarrierpieceindicesinstate( "open" ); - while ( isDefined( a_pieces ) ) - { - xx = 0; - while ( xx < a_pieces.size ) - { - chunk = a_pieces[ xx ]; - if ( upgrade ) - { - barrier.zbarrier zbarrierpieceuseupgradedmodel( chunk ); - barrier.zbarrier.chunk_health[ chunk ] = barrier.zbarrier getupgradedpiecenumlives( chunk ); - xx++; - continue; - } - else - { - barrier.zbarrier zbarrierpieceusedefaultmodel( chunk ); - barrier.zbarrier.chunk_health[ chunk ] = 0; - } - xx++; - } - } - x = 0; - while ( x < barrier.zbarrier getnumzbarrierpieces() ) - { - barrier.zbarrier setzbarrierpiecestate( x, "closed" ); - barrier.zbarrier showzbarrierpiece( x ); - x++; - } - } - if ( isDefined( barrier.clip ) ) - { - barrier.clip enable_trigger(); - barrier.clip disconnectpaths(); - } - else - { - blocker_disconnect_paths( barrier.neg_start, barrier.neg_end ); - } - if ( ( i % 4 ) == 0 ) - { - wait_network_frame(); - } - } - i++; - } -} - -func_should_never_drop() -{ - return 0; -} - -func_should_always_drop() -{ - return 1; -} - -func_should_drop_minigun() -{ - if ( minigun_no_drop() ) - { - return 0; - } - return 1; -} - -func_should_drop_carpenter() -{ - if ( get_num_window_destroyed() < 5 ) - { - return 0; - } - return 1; -} - -func_should_drop_fire_sale() -{ - if ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] == 1 || level.chest_moves < 1 ) - { - return 0; - } - return 1; -} - -powerup_move() -{ - self endon( "powerup_timedout" ); - self endon( "powerup_grabbed" ); - drag_speed = 75; - while ( 1 ) - { - self waittill( "move_powerup", moveto, distance ); - drag_vector = moveto - self.origin; - range_squared = lengthsquared( drag_vector ); - if ( range_squared > ( distance * distance ) ) - { - drag_vector = vectornormalize( drag_vector ); - drag_vector = distance * drag_vector; - moveto = self.origin + drag_vector; - } - self.origin = moveto; - } -} - -powerup_emp() -{ - self endon( "powerup_timedout" ); - self endon( "powerup_grabbed" ); - while ( 1 ) - { - level waittill( "emp_detonate", origin, radius ); - if ( distancesquared( origin, self.origin ) < ( radius * radius ) ) - { - playfx( level._effect[ "powerup_off" ], self.origin ); - self thread powerup_delete_delayed(); - self notify( "powerup_timedout" ); - } - } -} - -get_powerups( origin, radius ) -{ - if ( isDefined( origin ) && isDefined( radius ) ) - { - powerups = []; - _a3605 = level.active_powerups; - _k3605 = getFirstArrayKey( _a3605 ); - while ( isDefined( _k3605 ) ) - { - powerup = _a3605[ _k3605 ]; - if ( distancesquared( origin, powerup.origin ) < ( radius * radius ) ) - { - powerups[ powerups.size ] = powerup; - } - _k3605 = getNextArrayKey( _a3605, _k3605 ); - } - return powerups; - } - return level.active_powerups; -} - -should_award_stat( powerup_name ) -{ - if ( powerup_name != "teller_withdrawl" || powerup_name == "blue_monkey" && powerup_name == "free_perk" ) - { - return 0; - } - if ( isDefined( level.statless_powerups ) && isDefined( level.statless_powerups[ powerup_name ] ) ) - { - return 0; - } - return 1; -} - -teller_withdrawl( powerup, player ) -{ - player maps/mp/zombies/_zm_score::add_to_player_score( powerup.value ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_riotshield.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_riotshield.gsc deleted file mode 100644 index d6a05a0..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_riotshield.gsc +++ /dev/null @@ -1,647 +0,0 @@ -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_weap_riotshield; -#include common_scripts/utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; - -init() -{ - level.riotshield_name = "riotshield_zm"; - level.deployedshieldmodel = []; - level.stowedshieldmodel = []; - level.carriedshieldmodel = []; - level.deployedshieldmodel[ 0 ] = "t6_wpn_zmb_shield_world"; - level.deployedshieldmodel[ 2 ] = "t6_wpn_zmb_shield_dmg1_world"; - level.deployedshieldmodel[ 3 ] = "t6_wpn_zmb_shield_dmg2_world"; - level.stowedshieldmodel[ 0 ] = "t6_wpn_zmb_shield_stow"; - level.stowedshieldmodel[ 2 ] = "t6_wpn_zmb_shield_dmg1_stow"; - level.stowedshieldmodel[ 3 ] = "t6_wpn_zmb_shield_dmg2_stow"; - level.carriedshieldmodel[ 0 ] = "t6_wpn_zmb_shield_world"; - level.carriedshieldmodel[ 2 ] = "t6_wpn_zmb_shield_dmg1_world"; - level.carriedshieldmodel[ 3 ] = "t6_wpn_zmb_shield_dmg2_world"; - level.viewshieldmodel[ 0 ] = "t6_wpn_zmb_shield_view"; - level.viewshieldmodel[ 2 ] = "t6_wpn_zmb_shield_dmg1_view"; - level.viewshieldmodel[ 3 ] = "t6_wpn_zmb_shield_dmg2_view"; - precachemodel( level.stowedshieldmodel[ 0 ] ); - precachemodel( level.stowedshieldmodel[ 2 ] ); - precachemodel( level.stowedshieldmodel[ 3 ] ); - precachemodel( level.carriedshieldmodel[ 0 ] ); - precachemodel( level.carriedshieldmodel[ 2 ] ); - precachemodel( level.carriedshieldmodel[ 3 ] ); - precachemodel( level.viewshieldmodel[ 0 ] ); - precachemodel( level.viewshieldmodel[ 2 ] ); - precachemodel( level.viewshieldmodel[ 3 ] ); - level.riotshield_placement_zoffset = 26; -} - -attachriotshield( model, tag ) -{ - if ( isDefined( self.prev_shield_model ) && isDefined( self.prev_shield_tag ) ) - { - self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); - } - self.prev_shield_model = model; - self.prev_shield_tag = tag; - if ( isDefined( self.prev_shield_model ) && isDefined( self.prev_shield_tag ) ) - { - self attachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); - } -} - -removeriotshield() -{ - if ( isDefined( self.prev_shield_model ) && isDefined( self.prev_shield_tag ) ) - { - self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); - } - self.prev_shield_model = undefined; - self.prev_shield_tag = undefined; - if ( self getcurrentweapon() != level.riotshield_name ) - { - return; - } - self setheldweaponmodel( 0 ); -} - -setriotshieldviewmodel( modelnum ) -{ - self.prev_shield_viewmodel = modelnum; - if ( self getcurrentweapon() != level.riotshield_name ) - { - return; - } - if ( isDefined( self.prev_shield_viewmodel ) ) - { - self setheldweaponmodel( self.prev_shield_viewmodel ); - } - else - { - self setheldweaponmodel( 0 ); - } -} - -specialriotshieldviewmodel() -{ - if ( self getcurrentweapon() != level.riotshield_name ) - { - return; - } - self setheldweaponmodel( 3 ); -} - -restoreriotshieldviewmodel() -{ - if ( self getcurrentweapon() != level.riotshield_name ) - { - return; - } - if ( isDefined( self.prev_shield_viewmodel ) ) - { - self setheldweaponmodel( self.prev_shield_viewmodel ); - } - else - { - self setheldweaponmodel( 0 ); - } -} - -updateriotshieldmodel() -{ - if ( !isDefined( self.shield_damage_level ) ) - { - if ( isDefined( self.player_shield_reset_health ) ) - { - self [[ self.player_shield_reset_health ]](); - } - } - update = 0; - if ( !isDefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level ) - { - self.prev_shield_damage_level = self.shield_damage_level; - update = 1; - } - if ( !isDefined( self.prev_shield_placement ) || self.prev_shield_placement != self.shield_placement ) - { - self.prev_shield_placement = self.shield_placement; - update = 1; - } - if ( update ) - { - if ( self.prev_shield_placement == 0 ) - { - self attachriotshield(); - return; - } - else if ( self.prev_shield_placement == 1 ) - { - self attachriotshield( level.carriedshieldmodel[ self.prev_shield_damage_level ], "tag_weapon_left" ); - self setriotshieldviewmodel( self.prev_shield_damage_level ); - return; - } - else if ( self.prev_shield_placement == 2 ) - { - self attachriotshield( level.stowedshieldmodel[ self.prev_shield_damage_level ], "tag_stowed_back" ); - return; - } - else - { - if ( self.prev_shield_placement == 3 ) - { - self attachriotshield(); - if ( isDefined( self.shield_ent ) ) - { - self.shield_ent setmodel( level.deployedshieldmodel[ self.prev_shield_damage_level ] ); - } - } - } - } -} - -updatestandaloneriotshieldmodel() -{ - update = 0; - if ( !isDefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level ) - { - self.prev_shield_damage_level = self.shield_damage_level; - update = 1; - } - if ( update ) - { - self setmodel( level.deployedshieldmodel[ self.prev_shield_damage_level ] ); - } -} - -watchshieldlaststand() -{ - self endon( "death" ); - self endon( "disconnect" ); - self notify( "watchShieldLastStand" ); - self endon( "watchShieldLastStand" ); - while ( 1 ) - { - self waittill( "weapons_taken_for_last_stand" ); - self.riotshield_hidden = 0; - if ( isDefined( self.hasriotshield ) && self.hasriotshield ) - { - if ( self.prev_shield_placement == 1 || self.prev_shield_placement == 2 ) - { - self.riotshield_hidden = 2; - self.shield_placement = 0; - self updateriotshieldmodel(); - } - } - str_notify = self waittill_any_return( "player_revived", "bled_out" ); - if ( str_notify == "player_revived" ) - { - if ( isDefined( self.riotshield_hidden ) && self.riotshield_hidden > 0 ) - { - self.shield_placement = self.riotshield_hidden; - self updateriotshieldmodel(); - } - } - else - { - self maps/mp/zombies/_zm_weap_riotshield::player_take_riotshield(); - } - self.riotshield_hidden = undefined; - } -} - -trackriotshield() -{ - self endon( "death" ); - self endon( "disconnect" ); - self.hasriotshield = self hasweapon( level.riotshield_name ); - self.hasriotshieldequipped = self getcurrentweapon() == level.riotshield_name; - self.shield_placement = 0; - if ( self.hasriotshield ) - { - if ( self.hasriotshieldequipped ) - { - self.shield_placement = 1; - self updateriotshieldmodel(); - } - else - { - self.shield_placement = 2; - self updateriotshieldmodel(); - } - } - for ( ;; ) - { - self waittill( "weapon_change", newweapon ); - if ( newweapon == level.riotshield_name ) - { - if ( self.hasriotshieldequipped ) - { - continue; - } - else if ( isDefined( self.riotshieldentity ) ) - { - self notify( "destroy_riotshield" ); - } - self.shield_placement = 1; - self updateriotshieldmodel(); - if ( self.hasriotshield ) - { - break; - } - self.hasriotshield = 1; - self.hasriotshieldequipped = 1; - continue; - } - else if ( self ismantling() && newweapon == "none" ) - { - continue; - } - else - { - if ( self.hasriotshieldequipped ) - { -/# - assert( self.hasriotshield ); -#/ - self.hasriotshield = self hasweapon( level.riotshield_name ); - if ( isDefined( self.riotshield_hidden ) && self.riotshield_hidden ) - { - } - else - { - if ( self.hasriotshield ) - { - self.shield_placement = 2; - break; - } - else if ( isDefined( self.shield_ent ) ) - { -/# - assert( self.shield_placement == 3 ); -#/ - break; - } - else - { - self.shield_placement = 0; - } - } - self updateriotshieldmodel(); - self.hasriotshieldequipped = 0; - break; - } - else - { - if ( self.hasriotshield ) - { - if ( !self hasweapon( level.riotshield_name ) ) - { - self.shield_placement = 0; - self updateriotshieldmodel(); - self.hasriotshield = 0; - } - } - } - } - } -} - -updateriotshieldplacement() -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "deploy_riotshield" ); - self endon( "start_riotshield_deploy" ); - self endon( "weapon_change" ); - while ( 1 ) - { - placement = self canplaceriotshield( "raise_riotshield" ); - if ( placement[ "result" ] && riotshielddistancetest( placement[ "origin" ] ) ) - { - self restoreriotshieldviewmodel(); - self setplacementhint( 1 ); - } - else - { - self specialriotshieldviewmodel(); - self setplacementhint( 0 ); - } - wait 0,05; - } -} - -startriotshielddeploy() -{ - self notify( "start_riotshield_deploy" ); - self thread updateriotshieldplacement(); - self thread watchriotshielddeploy(); -} - -spawnriotshieldcover( origin, angles ) -{ - shield_ent = spawn( "script_model", origin, 1 ); - shield_ent.angles = angles; - shield_ent setowner( self ); - shield_ent.owner = self; - shield_ent.owner.shield_ent = shield_ent; - shield_ent.isriotshield = 1; - self.shield_placement = 3; - self updateriotshieldmodel(); - shield_ent setscriptmoverflag( 0 ); - self thread maps/mp/zombies/_zm_buildables::delete_on_disconnect( shield_ent, "destroy_riotshield", 1 ); - maps/mp/zombies/_zm_equipment::destructible_equipment_list_add( shield_ent ); - return shield_ent; -} - -watchriotshielddeploy() -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "start_riotshield_deploy" ); - self waittill( "deploy_riotshield", deploy_attempt ); - self restoreriotshieldviewmodel(); - self setplacementhint( 1 ); - placement_hint = 0; - if ( deploy_attempt ) - { - placement = self canplaceriotshield( "deploy_riotshield" ); - if ( placement[ "result" ] && riotshielddistancetest( placement[ "origin" ] ) && self check_plant_position( placement[ "origin" ], placement[ "angles" ] ) ) - { - self doriotshielddeploy( placement[ "origin" ], placement[ "angles" ] ); - } - else - { - placement_hint = 1; - clip_max_ammo = weaponclipsize( level.riotshield_name ); - self setweaponammoclip( level.riotshield_name, clip_max_ammo ); - } - } - else - { - placement_hint = 1; - } - if ( placement_hint ) - { - self setriotshieldfailhint(); - } -} - -check_plant_position( origin, angles ) -{ - if ( isDefined( level.equipment_safe_to_drop ) ) - { - ret = 1; - test_ent = spawn( "script_model", origin ); - test_ent setmodel( level.deployedshieldmodel[ 0 ] ); - test_ent.angles = angles; - if ( !( self [[ level.equipment_safe_to_drop ]]( test_ent ) ) ) - { - ret = 0; - } - test_ent delete(); - return ret; - } - return 1; -} - -doriotshielddeploy( origin, angles ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "start_riotshield_deploy" ); - self notify( "deployed_riotshield" ); - self maps/mp/zombies/_zm_buildables::track_placed_buildables( level.riotshield_name ); - if ( isDefined( self.current_equipment ) && self.current_equipment == level.riotshield_name ) - { - self maps/mp/zombies/_zm_equipment::equipment_to_deployed( level.riotshield_name ); - } - zoffset = level.riotshield_placement_zoffset; - shield_ent = self spawnriotshieldcover( origin + ( 0, 0, zoffset ), angles ); - item_ent = deployriotshield( self, shield_ent ); - primaries = self getweaponslistprimaries(); -/# - assert( isDefined( item_ent ) ); - assert( !isDefined( self.riotshieldretrievetrigger ) ); - assert( !isDefined( self.riotshieldentity ) ); -#/ - self maps/mp/zombies/_zm_weapons::switch_back_primary_weapon( primaries[ 0 ] ); - if ( isDefined( level.equipment_planted ) ) - { - self [[ level.equipment_planted ]]( shield_ent, level.riotshield_name, self ); - } - if ( isDefined( level.equipment_safe_to_drop ) ) - { - if ( !( self [[ level.equipment_safe_to_drop ]]( shield_ent ) ) ) - { - self notify( "destroy_riotshield" ); - shield_ent delete(); - item_ent delete(); - return; - } - } - self.riotshieldretrievetrigger = item_ent; - self.riotshieldentity = shield_ent; - self thread watchdeployedriotshieldents(); - self thread deleteshieldondamage( self.riotshieldentity ); - self thread deleteshieldmodelonweaponpickup( self.riotshieldretrievetrigger ); - self thread deleteriotshieldonplayerdeath(); - self thread watchshieldtriggervisibility( self.riotshieldretrievetrigger ); - self.riotshieldentity thread watchdeployedriotshielddamage(); - return shield_ent; -} - -riotshielddistancetest( origin ) -{ -/# - assert( isDefined( origin ) ); -#/ - min_dist_squared = getDvarFloat( "riotshield_deploy_limit_radius" ); - min_dist_squared *= min_dist_squared; - i = 0; - while ( i < level.players.size ) - { - if ( isDefined( level.players[ i ].riotshieldentity ) ) - { - dist_squared = distancesquared( level.players[ i ].riotshieldentity.origin, origin ); - if ( min_dist_squared > dist_squared ) - { -/# - println( "Shield placement denied! Failed distance check to other riotshields." ); -#/ - return 0; - } - } - i++; - } - return 1; -} - -watchdeployedriotshieldents() -{ -/# - assert( isDefined( self.riotshieldretrievetrigger ) ); - assert( isDefined( self.riotshieldentity ) ); -#/ - riotshieldretrievetrigger = self.riotshieldretrievetrigger; - riotshieldentity = self.riotshieldentity; - self waittill_any( "destroy_riotshield", "disconnect", "riotshield_zm_taken" ); - if ( isDefined( self ) ) - { - self.shield_placement = 0; - self updateriotshieldmodel(); - } - if ( isDefined( riotshieldretrievetrigger ) ) - { - riotshieldretrievetrigger delete(); - } - if ( isDefined( riotshieldentity ) ) - { - riotshieldentity delete(); - } -} - -watchdeployedriotshielddamage() -{ - self endon( "death" ); - damagemax = getDvarInt( "riotshield_deployed_health" ); - self.damagetaken = 0; - while ( 1 ) - { - self.maxhealth = 100000; - self.health = self.maxhealth; - self waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, idflags ); - if ( isDefined( level.players_can_damage_riotshields ) && !level.players_can_damage_riotshields ) - { - continue; - } - if ( !isDefined( attacker ) || !isplayer( attacker ) ) - { - continue; - } -/# - if ( isDefined( self.owner ) ) - { - assert( isDefined( self.owner.team ) ); - } -#/ - while ( is_encounter() && attacker.team == self.owner.team && attacker != self.owner ) - { - continue; - } - if ( isDefined( level.riotshield_damage_callback ) ) - { - self.owner [[ level.riotshield_damage_callback ]]( damage, 0 ); - continue; - } - else - { - if ( type == "MOD_MELEE" ) - { - damage *= getDvarFloat( "riotshield_melee_damage_scale" ); - } - else if ( type == "MOD_PISTOL_BULLET" || type == "MOD_RIFLE_BULLET" ) - { - damage *= getDvarFloat( "riotshield_bullet_damage_scale" ); - } - else - { - if ( type != "MOD_GRENADE" && type != "MOD_GRENADE_SPLASH" && type != "MOD_EXPLOSIVE" && type != "MOD_EXPLOSIVE_SPLASH" || type == "MOD_PROJECTILE" && type == "MOD_PROJECTILE_SPLASH" ) - { - damage *= getDvarFloat( "riotshield_explosive_damage_scale" ); - break; - } - else - { - if ( type == "MOD_IMPACT" ) - { - damage *= getDvarFloat( "riotshield_projectile_damage_scale" ); - } - } - } - self.damagetaken += damage; - if ( self.damagetaken >= damagemax ) - { - self damagethendestroyriotshield(); - } - } - } -} - -damagethendestroyriotshield() -{ - self endon( "death" ); - self.owner.riotshieldretrievetrigger delete(); - self notsolid(); - self setclientflag( 14 ); - wait getDvarFloat( "riotshield_destroyed_cleanup_time" ); - self.owner notify( "destroy_riotshield" ); -} - -deleteshieldondamage( shield_ent ) -{ - shield_ent waittill( "death" ); - self notify( "destroy_riotshield" ); -} - -deleteshieldmodelonweaponpickup( shield_trigger ) -{ - shield_trigger waittill( "trigger", player ); - self maps/mp/zombies/_zm_equipment::equipment_from_deployed( level.riotshield_name ); - self notify( "destroy_riotshield" ); - if ( self != player ) - { - if ( isDefined( level.transferriotshield ) ) - { - [[ level.transferriotshield ]]( self, player ); - } - } -} - -watchshieldtriggervisibility( trigger ) -{ - self endon( "death" ); - trigger endon( "death" ); - while ( isDefined( trigger ) ) - { - players = get_players(); - _a740 = players; - _k740 = getFirstArrayKey( _a740 ); - while ( isDefined( _k740 ) ) - { - player = _a740[ _k740 ]; - pickup = 1; - if ( !isDefined( player ) ) - { - } - else - { - if ( isDefined( level.cantransferriotshield ) ) - { - pickup = [[ level.cantransferriotshield ]]( self, player ); - } - if ( !isDefined( trigger ) ) - { - return; - } - if ( pickup ) - { - trigger setvisibletoplayer( player ); - } - else - { - trigger setinvisibletoplayer( player ); - } - wait 0,05; - } - _k740 = getNextArrayKey( _a740, _k740 ); - } - wait 0,05; - } -} - -deleteriotshieldonplayerdeath() -{ - self.riotshieldentity endon( "death" ); - self waittill( "death" ); - self notify( "destroy_riotshield" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_score.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_score.gsc deleted file mode 100644 index 9c0a411..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_score.gsc +++ /dev/null @@ -1,374 +0,0 @@ -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - level.score_cf_info = []; - score_cf_register_info( "damage", 1, 7 ); - score_cf_register_info( "death_normal", 1, 3 ); - score_cf_register_info( "death_torso", 1, 3 ); - score_cf_register_info( "death_neck", 1, 3 ); - score_cf_register_info( "death_head", 1, 3 ); - score_cf_register_info( "death_melee", 1, 3 ); - if ( !level.createfx_enabled ) - { - registerclientfield( "allplayers", "score_cf_double_points_active", 1, 1, "int" ); - } -} - -score_cf_register_info( name, version, max_count ) -{ - if ( level.createfx_enabled ) - { - return; - } - info = spawnstruct(); - info.name = name; - info.cf_field = "score_cf_" + name; - info.version = version; - info.max_count = max_count; - info.bit_count = getminbitcountfornum( max_count ); - info.players = []; - level.score_cf_info[ name ] = info; - registerclientfield( "allplayers", info.cf_field, info.version, info.bit_count, "int" ); -} - -score_cf_increment_info( name ) -{ - info = level.score_cf_info[ name ]; - player_ent_index = self getentitynumber(); - if ( !isDefined( info.players[ player_ent_index ] ) ) - { - info.players[ player_ent_index ] = 0; - } - info.players[ player_ent_index ]++; - if ( info.players[ player_ent_index ] > info.max_count ) - { - info.players[ player_ent_index ] = 0; - } - self setclientfield( info.cf_field, info.players[ player_ent_index ] ); -} - -score_cf_monitor() -{ - if ( level.createfx_enabled ) - { - return; - } - info_keys = getarraykeys( level.score_cf_info ); - while ( 1 ) - { - wait_network_frame(); - players = get_players(); - player_index = 0; - while ( player_index < players.size ) - { - player = players[ player_index ]; - player_ent_index = player getentitynumber(); - info_index = 0; - while ( info_index < info_keys.size ) - { - info = level.score_cf_info[ info_keys[ info_index ] ]; - info.players[ player_ent_index ] = 0; - player setclientfield( info.cf_field, 0 ); - info_index++; - } - player_index++; - } - } -} - -player_add_points( event, mod, hit_location, is_dog, zombie_team ) -{ - if ( level.intermission ) - { - return; - } - if ( !is_player_valid( self ) ) - { - return; - } - player_points = 0; - team_points = 0; - multiplier = get_points_multiplier( self ); - switch( event ) - { - case "death": - player_points = get_zombie_death_player_points(); - team_points = get_zombie_death_team_points(); - points = self player_add_points_kill_bonus( mod, hit_location ); - if ( level.zombie_vars[ self.team ][ "zombie_powerup_insta_kill_on" ] == 1 && mod == "MOD_UNKNOWN" ) - { - points *= 2; - } - player_points += points; - if ( team_points > 0 ) - { - team_points += points; - } - if ( mod == "MOD_GRENADE" || mod == "MOD_GRENADE_SPLASH" ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "grenade_kills" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "grenade_kills" ); - } - break; - case "ballistic_knife_death": - player_points = get_zombie_death_player_points() + level.zombie_vars[ "zombie_score_bonus_melee" ]; - self score_cf_increment_info( "death_melee" ); - break; - case "damage_light": - player_points = level.zombie_vars[ "zombie_score_damage_light" ]; - self score_cf_increment_info( "damage" ); - break; - case "damage": - player_points = level.zombie_vars[ "zombie_score_damage_normal" ]; - self score_cf_increment_info( "damage" ); - break; - case "damage_ads": - player_points = int( level.zombie_vars[ "zombie_score_damage_normal" ] * 1,25 ); - self score_cf_increment_info( "damage" ); - break; - case "carpenter_powerup": - case "rebuild_board": - player_points = mod; - break; - case "bonus_points_powerup": - player_points = mod; - break; - case "nuke_powerup": - player_points = mod; - team_points = mod; - break; - case "jetgun_fling": - case "riotshield_fling": - case "thundergun_fling": - player_points = mod; - break; - case "hacker_transfer": - player_points = mod; - break; - case "reviver": - player_points = mod; - break; - case "vulture": - player_points = mod; - break; - default: -/# - assert( 0, "Unknown point event" ); -#/ - break; - } - player_points = multiplier * round_up_score( player_points, 5 ); - team_points = multiplier * round_up_score( team_points, 5 ); - if ( isDefined( self.point_split_receiver ) || event == "death" && event == "ballistic_knife_death" ) - { - split_player_points = player_points - round_up_score( player_points * self.point_split_keep_percent, 10 ); - self.point_split_receiver add_to_player_score( split_player_points ); - player_points -= split_player_points; - } - self add_to_player_score( player_points ); - self.pers[ "score" ] = self.score; - if ( isDefined( level._game_module_point_adjustment ) ) - { - level [[ level._game_module_point_adjustment ]]( self, zombie_team, player_points ); - } -} - -get_points_multiplier( player ) -{ - multiplier = level.zombie_vars[ player.team ][ "zombie_point_scalar" ]; - if ( isDefined( level.current_game_module ) && level.current_game_module == 2 ) - { - if ( isDefined( level._race_team_double_points ) && level._race_team_double_points == player._race_team ) - { - return multiplier; - } - else - { - return 1; - } - } - return multiplier; -} - -get_zombie_death_player_points() -{ - players = get_players(); - if ( players.size == 1 ) - { - points = level.zombie_vars[ "zombie_score_kill_1player" ]; - } - else if ( players.size == 2 ) - { - points = level.zombie_vars[ "zombie_score_kill_2player" ]; - } - else if ( players.size == 3 ) - { - points = level.zombie_vars[ "zombie_score_kill_3player" ]; - } - else - { - points = level.zombie_vars[ "zombie_score_kill_4player" ]; - } - return points; -} - -get_zombie_death_team_points() -{ - players = get_players(); - if ( players.size == 1 ) - { - points = level.zombie_vars[ "zombie_score_kill_1p_team" ]; - } - else if ( players.size == 2 ) - { - points = level.zombie_vars[ "zombie_score_kill_2p_team" ]; - } - else if ( players.size == 3 ) - { - points = level.zombie_vars[ "zombie_score_kill_3p_team" ]; - } - else - { - points = level.zombie_vars[ "zombie_score_kill_4p_team" ]; - } - return points; -} - -player_add_points_kill_bonus( mod, hit_location ) -{ - if ( mod == "MOD_MELEE" ) - { - self score_cf_increment_info( "death_melee" ); - return level.zombie_vars[ "zombie_score_bonus_melee" ]; - } - if ( mod == "MOD_BURNED" ) - { - self score_cf_increment_info( "death_torso" ); - return level.zombie_vars[ "zombie_score_bonus_burn" ]; - } - score = 0; - if ( isDefined( hit_location ) ) - { - switch( hit_location ) - { - case "head": - case "helmet": - self score_cf_increment_info( "death_head" ); - score = level.zombie_vars[ "zombie_score_bonus_head" ]; - break; - case "neck": - self score_cf_increment_info( "death_neck" ); - score = level.zombie_vars[ "zombie_score_bonus_neck" ]; - break; - case "torso_lower": - case "torso_upper": - self score_cf_increment_info( "death_torso" ); - score = level.zombie_vars[ "zombie_score_bonus_torso" ]; - break; - default: - self score_cf_increment_info( "death_normal" ); - break; - } - } - return score; -} - -player_reduce_points( event, mod, hit_location ) -{ - if ( level.intermission ) - { - return; - } - points = 0; - switch( event ) - { - case "no_revive_penalty": - percent = level.zombie_vars[ "penalty_no_revive" ]; - points = self.score * percent; - break; - case "died": - percent = level.zombie_vars[ "penalty_died" ]; - points = self.score * percent; - break; - case "downed": - percent = level.zombie_vars[ "penalty_downed" ]; - self notify( "I_am_down" ); - points = self.score * percent; - self.score_lost_when_downed = round_up_to_ten( int( points ) ); - break; - default: -/# - assert( 0, "Unknown point event" ); -#/ - break; - } - points = self.score - round_up_to_ten( int( points ) ); - if ( points < 0 ) - { - points = 0; - } - self.score = points; -} - -add_to_player_score( points, add_to_total ) -{ - if ( !isDefined( add_to_total ) ) - { - add_to_total = 1; - } - if ( !isDefined( points ) || level.intermission ) - { - return; - } - self.score += points; - self.pers[ "score" ] = self.score; - if ( add_to_total ) - { - self.score_total += points; - } - self incrementplayerstat( "score", points ); -} - -minus_to_player_score( points ) -{ - if ( !isDefined( points ) || level.intermission ) - { - return; - } - self.score -= points; - self.pers[ "score" ] = self.score; -} - -add_to_team_score( points ) -{ -} - -minus_to_team_score( points ) -{ -} - -player_died_penalty() -{ - players = get_players( self.team ); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] != self && !players[ i ].is_zombie ) - { - players[ i ] player_reduce_points( "no_revive_penalty" ); - } - i++; - } -} - -player_downed_penalty() -{ -/# - println( "ZM >> LAST STAND - player_downed_penalty " ); -#/ - self player_reduce_points( "downed" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_server_throttle.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_server_throttle.gsc deleted file mode 100644 index c34f5b4..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_server_throttle.gsc +++ /dev/null @@ -1,95 +0,0 @@ -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; - -server_choke_init( id, max ) -{ - if ( !isDefined( level.zombie_server_choke_ids_max ) ) - { - level.zombie_server_choke_ids_max = []; - level.zombie_server_choke_ids_count = []; - } - level.zombie_server_choke_ids_max[ id ] = max; - level.zombie_server_choke_ids_count[ id ] = 0; - level thread server_choke_thread( id ); -} - -server_choke_thread( id ) -{ - while ( 1 ) - { - wait 0,05; - level.zombie_server_choke_ids_count[ id ] = 0; - } -} - -server_choke_safe( id ) -{ - return level.zombie_server_choke_ids_count[ id ] < level.zombie_server_choke_ids_max[ id ]; -} - -server_choke_action( id, choke_action, arg1, arg2, arg3 ) -{ -/# - assert( isDefined( level.zombie_server_choke_ids_max[ id ] ), "server Choke: " + id + " undefined" ); -#/ - while ( !server_choke_safe( id ) ) - { - wait 0,05; - } - level.zombie_server_choke_ids_count[ id ]++; - if ( !isDefined( arg1 ) ) - { - return [[ choke_action ]](); - } - if ( !isDefined( arg2 ) ) - { - return [[ choke_action ]]( arg1 ); - } - if ( !isDefined( arg3 ) ) - { - return [[ choke_action ]]( arg1, arg2 ); - } - return [[ choke_action ]]( arg1, arg2, arg3 ); -} - -server_entity_valid( entity ) -{ - if ( !isDefined( entity ) ) - { - return 0; - } - return 1; -} - -server_safe_init( id, max ) -{ - if ( !isDefined( level.zombie_server_choke_ids_max ) || !isDefined( level.zombie_server_choke_ids_max[ id ] ) ) - { - server_choke_init( id, max ); - } -/# - assert( max == level.zombie_server_choke_ids_max[ id ] ); -#/ -} - -_server_safe_ground_trace( pos ) -{ - return groundpos( pos ); -} - -server_safe_ground_trace( id, max, origin ) -{ - server_safe_init( id, max ); - return server_choke_action( id, ::_server_safe_ground_trace, origin ); -} - -_server_safe_ground_trace_ignore_water( pos ) -{ - return groundpos_ignore_water( pos ); -} - -server_safe_ground_trace_ignore_water( id, max, origin ) -{ - server_safe_init( id, max ); - return server_choke_action( id, ::_server_safe_ground_trace_ignore_water, origin ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_sidequests.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_sidequests.gsc deleted file mode 100644 index ca00fea..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_sidequests.gsc +++ /dev/null @@ -1,1106 +0,0 @@ -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init_sidequests() -{ - level._sidequest_icons_base_x = -225; - level._zombie_sidequests = []; -/# - level thread sidequest_debug(); -#/ -} - -sidequest_debug() -{ -/# - if ( getDvar( #"A7AC338D" ) != "1" ) - { - return; - } - while ( 1 ) - { - wait 1; -#/ - } -} - -damager_trigger_thread( dam_types, trigger_func ) -{ - while ( 1 ) - { - self waittill( "damage", amount, attacker, dir, point, type ); - self.dam_amount = amount; - self.attacker = attacker; - self.dam_dir = dir; - self.dam_point = point; - self.dam_type = type; - i = 0; - while ( i < dam_types.size ) - { - if ( type == dam_types[ i ] ) - { - break; - } - else - { - i++; - } - } - } - if ( isDefined( trigger_func ) ) - { - self [[ trigger_func ]](); - } - self notify( "triggered" ); -} - -damage_trigger_thread() -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( "damage" ); - self.owner_ent notify( "triggered" ); - } -} - -sidequest_uses_teleportation( name ) -{ - level._zombie_sidequests[ name ].uses_teleportation = 1; -} - -declare_sidequest_icon( sidequest_name, icon_name, shader_name ) -{ - sidequest = level._zombie_sidequests[ sidequest_name ]; - sidequest.icons[ icon_name ] = shader_name; -} - -create_icon( shader_name, x ) -{ - icon = create_simple_hud( self ); - icon.foreground = 1; - icon.sort = 2; - icon.hidewheninmenu = 0; - icon.alignx = "center"; - icon.aligny = "bottom"; - icon.horzalign = "user_right"; - icon.vertalign = "user_bottom"; - icon.x = x; - icon.y = 0; - icon.alpha = 1; - icon setshader( shader_name, 32, 32 ); - return icon; -} - -add_sidequest_icon( sidequest_name, icon_name ) -{ - if ( !isDefined( self.sidequest_icons ) ) - { - self.sidequest_icons = []; - } - if ( isDefined( self.sidequest_icons[ icon_name ] ) ) - { - return; - } - sq = level._zombie_sidequests[ sidequest_name ]; - base_x = level._sidequest_icons_base_x; - if ( isDefined( level._zombiemode_sidequest_icon_offset ) ) - { - base_x += level._zombiemode_sidequest_icon_offset; - } - self.sidequest_icons[ icon_name ] = self create_icon( sq.icons[ icon_name ], base_x + ( self.sidequest_icons.size * 34 ) ); -} - -remove_sidequest_icon( sidequest_name, icon_name ) -{ - if ( !isDefined( self.sidequest_icons ) ) - { - return; - } - if ( !isDefined( self.sidequest_icons[ icon_name ] ) ) - { - return; - } - icon = self.sidequest_icons[ icon_name ]; - new_array = []; - keys = getarraykeys( self.sidequest_icons ); - i = 0; - while ( i < keys.size ) - { - if ( keys[ i ] != icon_name ) - { - new_array[ keys[ i ] ] = self.sidequest_icons[ keys[ i ] ]; - } - i++; - } - self.sidequest_icons = new_array; - icon destroy(); - keys = getarraykeys( self.sidequest_icons ); - base_x = level._sidequest_icons_base_x; - if ( isDefined( level._zombiemode_sidequest_icon_offset ) ) - { - base_x += level._zombiemode_sidequest_icon_offset; - } - i = 0; - while ( i < keys.size ) - { - self.sidequest_icons[ keys[ i ] ].x = base_x + ( i * 34 ); - i++; - } -} - -declare_sidequest( name, init_func, logic_func, complete_func, generic_stage_start_func, generic_stage_end_func ) -{ - if ( !isDefined( level._zombie_sidequests ) ) - { - init_sidequests(); - } -/# - if ( isDefined( level._zombie_sidequests[ name ] ) ) - { - println( "*** ERROR: Attempt to re-declare sidequest with name " + name ); - return; -#/ - } - sq = spawnstruct(); - sq.name = name; - sq.stages = []; - sq.last_completed_stage = -1; - sq.active_stage = -1; - sq.sidequest_complete = 0; - sq.init_func = init_func; - sq.logic_func = logic_func; - sq.complete_func = complete_func; - sq.generic_stage_start_func = generic_stage_start_func; - sq.generic_stage_end_func = generic_stage_end_func; - sq.assets = []; - sq.uses_teleportation = 0; - sq.active_assets = []; - sq.icons = []; - sq.num_reps = 0; - level._zombie_sidequests[ name ] = sq; -} - -declare_sidequest_stage( sidequest_name, stage_name, init_func, logic_func, exit_func ) -{ -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt to declare a side quest stage before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to add stage " + stage_name + " to side quest " + sidequest_name + " but no such side quest exists." ); - return; - } - if ( isDefined( level._zombie_sidequests[ sidequest_name ].stages[ stage_name ] ) ) - { - println( "*** ERROR: Sidequest " + sidequest_name + " already has a stage called " + stage_name ); - return; -#/ - } - stage = spawnstruct(); - stage.name = stage_name; - stage.stage_number = level._zombie_sidequests[ sidequest_name ].stages.size; - stage.assets = []; - stage.active_assets = []; - stage.logic_func = logic_func; - stage.init_func = init_func; - stage.exit_func = exit_func; - stage.completed = 0; - stage.time_limit = 0; - level._zombie_sidequests[ sidequest_name ].stages[ stage_name ] = stage; -} - -set_stage_time_limit( sidequest_name, stage_name, time_limit, timer_func ) -{ -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt to set a side quest stage time limit before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to add timelimit to stage " + stage_name + " in side quest " + sidequest_name + " but no such side quest exists." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ].stages[ stage_name ] ) ) - { - println( "*** ERROR: Attempt to add timelimit to stage " + stage_name + " in Sidequest " + sidequest_name + " but stage does not exist." ); - return; -#/ - } - level._zombie_sidequests[ sidequest_name ].stages[ stage_name ].time_limit = time_limit; - level._zombie_sidequests[ sidequest_name ].stages[ stage_name ].time_limit_func = timer_func; -} - -declare_stage_asset_from_struct( sidequest_name, stage_name, target_name, thread_func, trigger_thread_func ) -{ - structs = getstructarray( target_name, "targetname" ); -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt to declare a side quest asset " + target_name + " before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " but no such side quest exists." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ].stages[ stage_name ] ) ) - { - println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " : " + stage_name + " but no such stage exists." ); - return; - } - if ( !structs.size ) - { - println( "*** ERROR: No Structs with " + target_name + " not found." ); - return; -#/ - } - i = 0; - while ( i < structs.size ) - { - asset = spawnstruct(); - asset.type = "struct"; - asset.struct = structs[ i ]; - asset.thread_func = thread_func; - asset.trigger_thread_func = trigger_thread_func; - level._zombie_sidequests[ sidequest_name ].stages[ stage_name ].assets[ level._zombie_sidequests[ sidequest_name ].stages[ stage_name ].assets.size ] = asset; - i++; - } -} - -declare_stage_title( sidequest_name, stage_name, title ) -{ -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt to declare a stage title " + title + " before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to declare a stage title " + title + " to side quest " + sidequest_name + " but no such side quest exists." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ].stages[ stage_name ] ) ) - { - println( "*** ERROR: Attempt to declare stage title " + title + " to side quest " + sidequest_name + " : " + stage_name + " but no such stage exists." ); - return; -#/ - } - level._zombie_sidequests[ sidequest_name ].stages[ stage_name ].title = title; -} - -declare_stage_asset( sidequest_name, stage_name, target_name, thread_func, trigger_thread_func ) -{ - ents = getentarray( target_name, "targetname" ); -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt to declare a side quest asset " + target_name + " before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " but no such side quest exists." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ].stages[ stage_name ] ) ) - { - println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " : " + stage_name + " but no such stage exists." ); - return; - } - if ( !ents.size ) - { - println( "*** ERROR: No Ents with " + target_name + " not found." ); - return; -#/ - } - i = 0; - while ( i < ents.size ) - { - asset = spawnstruct(); - asset.type = "entity"; - asset.ent = ents[ i ]; - asset.thread_func = thread_func; - asset.trigger_thread_func = trigger_thread_func; - level._zombie_sidequests[ sidequest_name ].stages[ stage_name ].assets[ level._zombie_sidequests[ sidequest_name ].stages[ stage_name ].assets.size ] = asset; - i++; - } -} - -declare_sidequest_asset( sidequest_name, target_name, thread_func, trigger_thread_func ) -{ - ents = getentarray( target_name, "targetname" ); -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt to declare a side quest asset " + target_name + " before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " but no such side quest exists." ); - return; - } - if ( !ents.size ) - { - println( "*** ERROR: No Ents with " + target_name + " not found." ); - return; -#/ - } - i = 0; - while ( i < ents.size ) - { - asset = spawnstruct(); - asset.type = "entity"; - asset.ent = ents[ i ]; - asset.thread_func = thread_func; - asset.trigger_thread_func = trigger_thread_func; - asset.ent.thread_func = thread_func; - asset.ent.trigger_thread_func = trigger_thread_func; - level._zombie_sidequests[ sidequest_name ].assets[ level._zombie_sidequests[ sidequest_name ].assets.size ] = asset; - i++; - } -} - -declare_sidequest_asset_from_struct( sidequest_name, target_name, thread_func, trigger_thread_func ) -{ - structs = getstructarray( target_name, "targetname" ); -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt to declare a side quest asset " + target_name + " before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to add asset " + target_name + " to side quest " + sidequest_name + " but no such side quest exists." ); - return; - } - if ( !structs.size ) - { - println( "*** ERROR: No Structs with " + target_name + " not found." ); - return; -#/ - } - i = 0; - while ( i < structs.size ) - { - asset = spawnstruct(); - asset.type = "struct"; - asset.struct = structs[ i ]; - asset.thread_func = thread_func; - asset.trigger_thread_func = trigger_thread_func; - level._zombie_sidequests[ sidequest_name ].assets[ level._zombie_sidequests[ sidequest_name ].assets.size ] = asset; - i++; - } -} - -build_asset_from_struct( asset, parent_struct ) -{ - ent = spawn( "script_model", asset.origin ); - if ( isDefined( asset.model ) ) - { - ent setmodel( asset.model ); - } - if ( isDefined( asset.angles ) ) - { - ent.angles = asset.angles; - } - ent.script_noteworthy = asset.script_noteworthy; - ent.type = "struct"; - ent.radius = asset.radius; - ent.thread_func = parent_struct.thread_func; - ent.trigger_thread_func = parent_struct.trigger_thread_func; - ent.script_vector = parent_struct.script_vector; - asset.trigger_thread_func = parent_struct.trigger_thread_func; - asset.script_vector = parent_struct.script_vector; - ent.target = asset.target; - ent.script_float = asset.script_float; - ent.script_int = asset.script_int; - ent.script_trigger_spawnflags = asset.script_trigger_spawnflags; - ent.targetname = asset.targetname; - return ent; -} - -delete_stage_assets() -{ - i = 0; - while ( i < self.active_assets.size ) - { - asset = self.active_assets[ i ]; - switch( asset.type ) - { - case "struct": - if ( isDefined( asset.trigger ) ) - { -/# - println( "Deleting trigger from struct type asset." ); -#/ - asset.trigger delete(); - asset.trigger = undefined; - } - asset delete(); - break; - i++; - continue; - case "entity": - if ( isDefined( asset.trigger ) ) - { -/# - println( "Deleting trigger from ent type asset." ); -#/ - asset.trigger delete(); - asset.trigger = undefined; - } - break; - i++; - continue; - } - i++; - } - remaining_assets = []; - i = 0; - while ( i < self.active_assets.size ) - { - if ( isDefined( self.active_assets[ i ] ) ) - { - remaining_assets[ remaining_assets.size ] = self.active_assets[ i ]; - } - i++; - } - self.active_assets = remaining_assets; -} - -build_assets() -{ - i = 0; - while ( i < self.assets.size ) - { - asset = undefined; - switch( self.assets[ i ].type ) - { - case "struct": - asset = self.assets[ i ].struct; - self.active_assets[ self.active_assets.size ] = build_asset_from_struct( asset, self.assets[ i ] ); - break; - case "entity": - j = 0; - while ( j < self.active_assets.size ) - { - if ( self.active_assets[ j ] == self.assets[ i ].ent ) - { - asset = self.active_assets[ j ]; - break; - } - else - { - j++; - } - } - asset = self.assets[ i ].ent; - asset.type = "entity"; - self.active_assets[ self.active_assets.size ] = asset; - break; - default: -/# - println( "*** ERROR: Don't know how to build asset of type " + self.assets.type ); -#/ - break; - } - if ( isDefined( asset.script_noteworthy ) && self.assets[ i ].type == "entity" || !isDefined( asset.trigger ) && isDefined( asset.script_noteworthy ) ) - { - trigger_radius = 15; - trigger_height = 72; - if ( isDefined( asset.radius ) ) - { - trigger_radius = asset.radius; - } - if ( isDefined( asset.height ) ) - { - trigger_height = asset.height; - } - trigger_spawnflags = 0; - if ( isDefined( asset.script_trigger_spawnflags ) ) - { - trigger_spawnflags = asset.script_trigger_spawnflags; - } - trigger_offset = ( 0, 1, 0 ); - if ( isDefined( asset.script_vector ) ) - { - trigger_offset = asset.script_vector; - } - switch( asset.script_noteworthy ) - { - case "trigger_radius_use": - use_trigger = spawn( "trigger_radius_use", asset.origin + trigger_offset, trigger_spawnflags, trigger_radius, trigger_height ); - use_trigger setcursorhint( "HINT_NOICON" ); - if ( isDefined( asset.radius ) ) - { - use_trigger.radius = asset.radius; - } - use_trigger.owner_ent = self.active_assets[ self.active_assets.size - 1 ]; - if ( isDefined( asset.trigger_thread_func ) ) - { - use_trigger thread [[ asset.trigger_thread_func ]](); - } - else - { - use_trigger thread use_trigger_thread(); - } - self.active_assets[ self.active_assets.size - 1 ].trigger = use_trigger; - break; - break; - case "trigger_radius_damage": - damage_trigger = spawn( "trigger_damage", asset.origin + trigger_offset, trigger_spawnflags, trigger_radius, trigger_height ); - if ( isDefined( asset.radius ) ) - { - damage_trigger.radius = asset.radius; - } - damage_trigger.owner_ent = self.active_assets[ self.active_assets.size - 1 ]; - if ( isDefined( asset.trigger_thread_func ) ) - { - damage_trigger thread [[ asset.trigger_thread_func ]](); - } - else - { - damage_trigger thread damage_trigger_thread(); - } - self.active_assets[ self.active_assets.size - 1 ].trigger = damage_trigger; - break; - break; - case "trigger_radius": - radius_trigger = spawn( "trigger_radius", asset.origin + trigger_offset, trigger_spawnflags, trigger_radius, trigger_height ); - if ( isDefined( asset.radius ) ) - { - radius_trigger.radius = asset.radius; - } - radius_trigger.owner_ent = self.active_assets[ self.active_assets.size - 1 ]; - if ( isDefined( asset.trigger_thread_func ) ) - { - radius_trigger thread [[ asset.trigger_thread_func ]](); - } - else - { - radius_trigger thread radius_trigger_thread(); - } - self.active_assets[ self.active_assets.size - 1 ].trigger = radius_trigger; - break; - break; - } - } - if ( isDefined( self.assets[ i ].thread_func ) && !isDefined( self.active_assets[ self.active_assets.size - 1 ].dont_rethread ) ) - { - self.active_assets[ self.active_assets.size - 1 ] thread [[ self.assets[ i ].thread_func ]](); - } - if ( ( i % 2 ) == 0 ) - { - wait_network_frame(); - } - i++; - } -} - -radius_trigger_thread() -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( "trigger", player ); - while ( !isplayer( player ) ) - { - continue; - } - self.owner_ent notify( "triggered" ); - while ( player istouching( self ) ) - { - wait 0,05; - } - self.owner_ent notify( "untriggered" ); - } -} - -thread_on_assets( target_name, thread_func ) -{ - i = 0; - while ( i < self.active_assets.size ) - { - if ( self.active_assets[ i ].targetname == target_name ) - { - self.active_assets[ i ] thread [[ thread_func ]](); - } - i++; - } -} - -stage_logic_func_wrapper( sidequest, stage ) -{ - if ( isDefined( stage.logic_func ) ) - { - level endon( ( sidequest.name + "_" ) + stage.name + "_over" ); - stage [[ stage.logic_func ]](); - } -} - -sidequest_start( sidequest_name ) -{ -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt start a side quest asset " + sidequest_name + " before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to start " + sidequest_name + " but no such side quest exists." ); - return; -#/ - } - sidequest = level._zombie_sidequests[ sidequest_name ]; - sidequest build_assets(); - if ( isDefined( sidequest.init_func ) ) - { - sidequest [[ sidequest.init_func ]](); - } - if ( isDefined( sidequest.logic_func ) ) - { - sidequest thread [[ sidequest.logic_func ]](); - } -} - -stage_start( sidequest, stage ) -{ - if ( isstring( sidequest ) ) - { - sidequest = level._zombie_sidequests[ sidequest ]; - } - if ( isstring( stage ) ) - { - stage = sidequest.stages[ stage ]; - } - stage build_assets(); - sidequest.active_stage = stage.stage_number; - level notify( ( sidequest.name + "_" ) + stage.name + "_started" ); - stage.completed = 0; - if ( isDefined( sidequest.generic_stage_start_func ) ) - { - stage [[ sidequest.generic_stage_start_func ]](); - } - if ( isDefined( stage.init_func ) ) - { - stage [[ stage.init_func ]](); - } - level._last_stage_started = stage.name; - level thread stage_logic_func_wrapper( sidequest, stage ); - if ( stage.time_limit > 0 ) - { - stage thread time_limited_stage( sidequest ); - } - if ( isDefined( stage.title ) ) - { - stage thread display_stage_title( sidequest.uses_teleportation ); - } -} - -display_stage_title( wait_for_teleport_done_notify ) -{ - if ( wait_for_teleport_done_notify ) - { - level waittill( "teleport_done" ); - wait 2; - } - stage_text = newhudelem(); - stage_text.location = 0; - stage_text.alignx = "center"; - stage_text.aligny = "middle"; - stage_text.foreground = 1; - stage_text.fontscale = 1,6; - stage_text.sort = 20; - stage_text.x = 320; - stage_text.y = 300; - stage_text.og_scale = 1; - stage_text.color = vectorScale( ( 0, 1, 0 ), 128 ); - stage_text.alpha = 0; - stage_text.fontstyle3d = "shadowedmore"; - stage_text settext( self.title ); - stage_text fadeovertime( 0,5 ); - stage_text.alpha = 1; - wait 5; - stage_text fadeovertime( 1 ); - stage_text.alpha = 0; - wait 1; - stage_text destroy(); -} - -time_limited_stage( sidequest ) -{ -/# - println( "*** Starting timer for sidequest " + sidequest.name + " stage " + self.name + " : " + self.time_limit + " seconds." ); -#/ - level endon( ( sidequest.name + "_" ) + self.name + "_over" ); - level endon( "suspend_timer" ); - level endon( "end_game" ); - time_limit = undefined; - if ( isDefined( self.time_limit_func ) ) - { - time_limit = [[ self.time_limit_func ]]() * 0,25; - } - else - { - time_limit = self.time_limit * 0,25; - } - wait time_limit; - level notify( "timed_stage_75_percent" ); - wait time_limit; - level notify( "timed_stage_50_percent" ); - wait time_limit; - level notify( "timed_stage_25_percent" ); - wait ( time_limit - 10 ); - level notify( "timed_stage_10_seconds_to_go" ); - wait 10; - stage_failed( sidequest, self ); -} - -sidequest_println( str ) -{ -/# - if ( getDvar( #"A7AC338D" ) != "1" ) - { - return; - } - println( str ); -#/ -} - -precache_sidequest_assets() -{ - sidequest_names = getarraykeys( level._zombie_sidequests ); - i = 0; - while ( i < sidequest_names.size ) - { - sq = level._zombie_sidequests[ sidequest_names[ i ] ]; - icon_keys = getarraykeys( sq.icons ); - j = 0; - while ( j < icon_keys.size ) - { - precacheshader( sq.icons[ icon_keys[ j ] ] ); - j++; - } - stage_names = getarraykeys( sq.stages ); - j = 0; - while ( j < stage_names.size ) - { - stage = sq.stages[ stage_names[ j ] ]; - k = 0; - while ( k < stage.assets.size ) - { - asset = stage.assets[ k ]; - if ( isDefined( asset.type ) && asset.type == "struct" ) - { - if ( isDefined( asset.model ) ) - { - precachemodel( asset.model ); - } - } - k++; - } - j++; - } - i++; - } -} - -sidequest_complete( sidequest_name ) -{ -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt to call sidequest_complete for sidequest " + sidequest_name + " before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to call sidequest_complete for sidequest " + sidequest_name + " but no such side quest exists." ); - return; -#/ - } - return level._zombie_sidequests[ sidequest_name ].sidequest_complete; -} - -stage_completed( sidequest_name, stage_name ) -{ -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt to call stage_complete for sidequest " + sidequest_name + " before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to call stage_complete for sidequest " + sidequest_name + " but no such side quest exists." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ].stages[ stage_name ] ) ) - { - println( "*** ERROR: Attempt to call stage_complete in sq " + sidequest_name + " : " + stage_name + " but no such stage exists." ); - return; - } - println( "*** stage completed called." ); -#/ - sidequest = level._zombie_sidequests[ sidequest_name ]; - stage = sidequest.stages[ stage_name ]; - level thread stage_completed_internal( sidequest, stage ); -} - -stage_completed_internal( sidequest, stage ) -{ - level notify( ( sidequest.name + "_" ) + stage.name + "_over" ); - level notify( ( sidequest.name + "_" ) + stage.name + "_completed" ); - if ( isDefined( sidequest.generic_stage_end_func ) ) - { -/# - println( "Calling generic end func." ); -#/ - stage [[ sidequest.generic_stage_end_func ]](); - } - if ( isDefined( stage.exit_func ) ) - { -/# - println( "Calling stage end func." ); -#/ - stage [[ stage.exit_func ]]( 1 ); - } - stage.completed = 1; - sidequest.last_completed_stage = sidequest.active_stage; - sidequest.active_stage = -1; - stage delete_stage_assets(); - all_complete = 1; - stage_names = getarraykeys( sidequest.stages ); - i = 0; - while ( i < stage_names.size ) - { - if ( sidequest.stages[ stage_names[ i ] ].completed == 0 ) - { - all_complete = 0; - break; - } - else - { - i++; - } - } - if ( all_complete == 1 ) - { - if ( isDefined( sidequest.complete_func ) ) - { - sidequest thread [[ sidequest.complete_func ]](); - } - level notify( "sidequest_" + sidequest.name + "_complete" ); - sidequest.sidequest_completed = 1; - } -} - -stage_failed_internal( sidequest, stage ) -{ - level notify( ( sidequest.name + "_" ) + stage.name + "_over" ); - level notify( ( sidequest.name + "_" ) + stage.name + "_failed" ); - if ( isDefined( sidequest.generic_stage_end_func ) ) - { - stage [[ sidequest.generic_stage_end_func ]](); - } - if ( isDefined( stage.exit_func ) ) - { - stage [[ stage.exit_func ]]( 0 ); - } - sidequest.active_stage = -1; - stage delete_stage_assets(); -} - -stage_failed( sidequest, stage ) -{ -/# - println( "*** Stage failed called." ); -#/ - if ( isstring( sidequest ) ) - { - sidequest = level._zombie_sidequests[ sidequest ]; - } - if ( isstring( stage ) ) - { - stage = sidequest.stages[ stage ]; - } - level thread stage_failed_internal( sidequest, stage ); -} - -get_sidequest_stage( sidequest, stage_number ) -{ - stage = undefined; - stage_names = getarraykeys( sidequest.stages ); - i = 0; - while ( i < stage_names.size ) - { - if ( sidequest.stages[ stage_names[ i ] ].stage_number == stage_number ) - { - stage = sidequest.stages[ stage_names[ i ] ]; - break; - } - else - { - i++; - } - } - return stage; -} - -get_damage_trigger( radius, origin, damage_types ) -{ - trig = spawn( "trigger_damage", origin, 0, radius, 72 ); - trig thread dam_trigger_thread( damage_types ); - return trig; -} - -dam_trigger_thread( damage_types ) -{ - self endon( "death" ); - damage_type = "NONE"; - while ( 1 ) - { - self waittill( "damage", amount, attacker, dir, point, mod ); - i = 0; - while ( i < damage_types.size ) - { - if ( mod == damage_types[ i ] ) - { - self notify( "triggered" ); - } - i++; - } - } -} - -use_trigger_thread() -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( "trigger", player ); - self.owner_ent notify( "triggered" ); - wait 0,1; - } -} - -sidequest_stage_active( sidequest_name, stage_name ) -{ - sidequest = level._zombie_sidequests[ sidequest_name ]; - stage = sidequest.stages[ stage_name ]; - if ( sidequest.active_stage == stage.stage_number ) - { - return 1; - } - else - { - return 0; - } -} - -sidequest_start_next_stage( sidequest_name ) -{ -/# - if ( !isDefined( level._zombie_sidequests ) ) - { - println( "*** ERROR: Attempt start next stage in side quest asset " + sidequest_name + " before sidequests declared." ); - return; - } - if ( !isDefined( level._zombie_sidequests[ sidequest_name ] ) ) - { - println( "*** ERROR: Attempt to start next sidequest in sidequest " + sidequest_name + " but no such side quest exists." ); - return; -#/ - } - sidequest = level._zombie_sidequests[ sidequest_name ]; - if ( sidequest.sidequest_complete == 1 ) - { - return; - } - last_completed = sidequest.last_completed_stage; - if ( last_completed == -1 ) - { - last_completed = 0; - } - else - { - last_completed++; - } - stage = get_sidequest_stage( sidequest, last_completed ); - if ( !isDefined( stage ) ) - { -/# - println( "*** ERROR: Sidequest " + sidequest_name + " has no stage number " + last_completed ); -#/ - return; - } - stage_start( sidequest, stage ); - return stage; -} - -main() -{ -} - -is_facing( facee ) -{ - orientation = self getplayerangles(); - forwardvec = anglesToForward( orientation ); - forwardvec2d = ( forwardvec[ 0 ], forwardvec[ 1 ], 0 ); - unitforwardvec2d = vectornormalize( forwardvec2d ); - tofaceevec = facee.origin - self.origin; - tofaceevec2d = ( tofaceevec[ 0 ], tofaceevec[ 1 ], 0 ); - unittofaceevec2d = vectornormalize( tofaceevec2d ); - dotproduct = vectordot( unitforwardvec2d, unittofaceevec2d ); - return dotproduct > 0,9; -} - -fake_use( notify_string, qualifier_func ) -{ - waittillframeend; - while ( 1 ) - { - if ( !isDefined( self ) ) - { - return; - } -/# - print3d( self.origin, "+", vectorScale( ( 0, 1, 0 ), 255 ), 1 ); -#/ - players = get_players(); - i = 0; - while ( i < players.size ) - { - qualifier_passed = 1; - if ( isDefined( qualifier_func ) ) - { - qualifier_passed = players[ i ] [[ qualifier_func ]](); - } - if ( qualifier_passed && distancesquared( self.origin, players[ i ].origin ) < 4096 ) - { - if ( players[ i ] is_facing( self ) ) - { - if ( players[ i ] usebuttonpressed() ) - { - self notify( notify_string ); - return; - } - } - } - i++; - } - wait 0,1; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_spawner.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_spawner.gsc deleted file mode 100644 index f499ac5..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_spawner.gsc +++ /dev/null @@ -1,3264 +0,0 @@ -#include maps/mp/zombies/_zm_ai_faller; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_pers_upgrades; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/animscripts/zm_run; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm_blockers; -#include maps/mp/animscripts/zm_shared; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - level._contextual_grab_lerp_time = 0,3; - level.zombie_spawners = getentarray( "zombie_spawner", "script_noteworthy" ); - while ( isDefined( level.use_multiple_spawns ) && level.use_multiple_spawns ) - { - level.zombie_spawn = []; - i = 0; - while ( i < level.zombie_spawners.size ) - { - if ( isDefined( level.zombie_spawners[ i ].script_int ) ) - { - int = level.zombie_spawners[ i ].script_int; - if ( !isDefined( level.zombie_spawn[ int ] ) ) - { - level.zombie_spawn[ int ] = []; - } - level.zombie_spawn[ int ][ level.zombie_spawn[ int ].size ] = level.zombie_spawners[ i ]; - } - i++; - } - } - precachemodel( "p6_anim_zm_barricade_board_01_upgrade" ); - precachemodel( "p6_anim_zm_barricade_board_02_upgrade" ); - precachemodel( "p6_anim_zm_barricade_board_03_upgrade" ); - precachemodel( "p6_anim_zm_barricade_board_04_upgrade" ); - precachemodel( "p6_anim_zm_barricade_board_05_upgrade" ); - precachemodel( "p6_anim_zm_barricade_board_06_upgrade" ); - while ( isDefined( level.ignore_spawner_func ) ) - { - i = 0; - while ( i < level.zombie_spawners.size ) - { - ignore = [[ level.ignore_spawner_func ]]( level.zombie_spawners[ i ] ); - if ( ignore ) - { - arrayremovevalue( level.zombie_spawners, level.zombie_spawners[ i ] ); - } - i++; - } - } - gametype = getDvar( "ui_gametype" ); - if ( !isDefined( level.attack_player_thru_boards_range ) ) - { - level.attack_player_thru_boards_range = 109,8; - } - if ( isDefined( level._game_module_custom_spawn_init_func ) ) - { - [[ level._game_module_custom_spawn_init_func ]](); - } - registerclientfield( "actor", "zombie_has_eyes", 1, 1, "int" ); - registerclientfield( "actor", "zombie_ragdoll_explode", 1, 1, "int" ); -} - -add_cusom_zombie_spawn_logic( func ) -{ - if ( !isDefined( level._zombie_custom_spawn_logic ) ) - { - level._zombie_custom_spawn_logic = []; - } - level._zombie_custom_spawn_logic[ level._zombie_custom_spawn_logic.size ] = func; -} - -player_attacks_enemy( player, amount, type, point ) -{ - team = undefined; - if ( isDefined( self._race_team ) ) - { - team = self._race_team; - } - if ( !isads( player ) ) - { - [[ level.global_damage_func ]]( type, self.damagelocation, point, player, amount, team ); - return 0; - } - if ( !bullet_attack( type ) ) - { - [[ level.global_damage_func ]]( type, self.damagelocation, point, player, amount, team ); - return 0; - } - [[ level.global_damage_func_ads ]]( type, self.damagelocation, point, player, amount, team ); - return 1; -} - -player_attacker( attacker ) -{ - if ( isplayer( attacker ) ) - { - return 1; - } - return 0; -} - -enemy_death_detection() -{ - self endon( "death" ); - for ( ;; ) - { - self waittill( "damage", amount, attacker, direction_vec, point, type ); - if ( !isDefined( amount ) ) - { - continue; - } - else if ( !isalive( self ) || self.delayeddeath ) - { - return; - } - if ( !player_attacker( attacker ) ) - { - continue; - } - else - { - self.has_been_damaged_by_player = 1; - self player_attacks_enemy( attacker, amount, type, point ); - } - } -} - -is_spawner_targeted_by_blocker( ent ) -{ - while ( isDefined( ent.targetname ) ) - { - targeters = getentarray( ent.targetname, "target" ); - i = 0; - while ( i < targeters.size ) - { - if ( targeters[ i ].targetname == "zombie_door" || targeters[ i ].targetname == "zombie_debris" ) - { - return 1; - } - result = is_spawner_targeted_by_blocker( targeters[ i ] ); - if ( result ) - { - return 1; - } - i++; - } - } - return 0; -} - -add_custom_zombie_spawn_logic( func ) -{ - if ( !isDefined( level._zombie_custom_spawn_logic ) ) - { - level._zombie_custom_spawn_logic = []; - } - level._zombie_custom_spawn_logic[ level._zombie_custom_spawn_logic.size ] = func; -} - -zombie_spawn_init( animname_set ) -{ - if ( !isDefined( animname_set ) ) - { - animname_set = 0; - } - self.targetname = "zombie"; - self.script_noteworthy = undefined; - recalc_zombie_array(); - if ( !animname_set ) - { - self.animname = "zombie"; - } - if ( isDefined( get_gamemode_var( "pre_init_zombie_spawn_func" ) ) ) - { - self [[ get_gamemode_var( "pre_init_zombie_spawn_func" ) ]](); - } - self thread play_ambient_zombie_vocals(); - self.zmb_vocals_attack = "zmb_vocals_zombie_attack"; - self.ignoreall = 1; - self.ignoreme = 1; - self.allowdeath = 1; - self.force_gib = 1; - self.is_zombie = 1; - self.has_legs = 1; - self allowedstances( "stand" ); - self.zombie_damaged_by_bar_knockdown = 0; - self.gibbed = 0; - self.head_gibbed = 0; - self.disablearrivals = 1; - self.disableexits = 1; - self.grenadeawareness = 0; - self.badplaceawareness = 0; - self.ignoresuppression = 1; - self.suppressionthreshold = 1; - self.nododgemove = 1; - self.dontshootwhilemoving = 1; - self.pathenemylookahead = 0; - self.badplaceawareness = 0; - self.chatinitialized = 0; - self.a.disablepain = 1; - self disable_react(); - if ( isDefined( level.zombie_health ) ) - { - self.maxhealth = level.zombie_health; - if ( isDefined( level.zombie_respawned_health ) && level.zombie_respawned_health.size > 0 ) - { - self.health = level.zombie_respawned_health[ 0 ]; - arrayremovevalue( level.zombie_respawned_health, level.zombie_respawned_health[ 0 ] ); - } - else - { - self.health = level.zombie_health; - } - } - else - { - self.maxhealth = level.zombie_vars[ "zombie_health_start" ]; - self.health = self.maxhealth; - } - self.freezegun_damage = 0; - self.dropweapon = 0; - level thread zombie_death_event( self ); - self init_zombie_run_cycle(); - self thread zombie_think(); - self thread zombie_gib_on_damage(); - self thread zombie_damage_failsafe(); - self thread enemy_death_detection(); - if ( isDefined( level._zombie_custom_spawn_logic ) ) - { - if ( isarray( level._zombie_custom_spawn_logic ) ) - { - i = 0; - while ( i < level._zombie_custom_spawn_logic.size ) - { - self thread [[ level._zombie_custom_spawn_logic[ i ] ]](); - i++; - } - } - else self thread [[ level._zombie_custom_spawn_logic ]](); - } - if ( !isDefined( self.no_eye_glow ) || !self.no_eye_glow ) - { - if ( isDefined( self.is_inert ) && !self.is_inert ) - { - self thread delayed_zombie_eye_glow(); - } - } - self.deathfunction = ::zombie_death_animscript; - self.flame_damage_time = 0; - self.meleedamage = 60; - self.no_powerups = 1; - self zombie_history( "zombie_spawn_init -> Spawned = " + self.origin ); - self.thundergun_knockdown_func = level.basic_zombie_thundergun_knockdown; - self.tesla_head_gib_func = ::zombie_tesla_head_gib; - self.team = level.zombie_team; - if ( isDefined( level.achievement_monitor_func ) ) - { - self [[ level.achievement_monitor_func ]](); - } - if ( isDefined( get_gamemode_var( "post_init_zombie_spawn_func" ) ) ) - { - self [[ get_gamemode_var( "post_init_zombie_spawn_func" ) ]](); - } - if ( isDefined( level.zombie_init_done ) ) - { - self [[ level.zombie_init_done ]](); - } - self.zombie_init_done = 1; - self notify( "zombie_init_done" ); -} - -delayed_zombie_eye_glow() -{ - self endon( "zombie_delete" ); - if ( isDefined( self.in_the_ground ) && self.in_the_ground ) - { - while ( !isDefined( self.create_eyes ) ) - { - wait 0,1; - } - } - else wait 0,5; - self zombie_eye_glow(); -} - -zombie_damage_failsafe() -{ - self endon( "death" ); - continue_failsafe_damage = 0; - while ( 1 ) - { - wait 0,5; - if ( !isDefined( self.enemy ) || !isplayer( self.enemy ) ) - { - continue; - } - if ( self istouching( self.enemy ) ) - { - old_org = self.origin; - if ( !continue_failsafe_damage ) - { - wait 5; - } - while ( isDefined( self.enemy ) || !isplayer( self.enemy ) && self.enemy hasperk( "specialty_armorvest" ) ) - { - continue; - } - if ( self istouching( self.enemy ) && !self.enemy maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isalive( self.enemy ) ) - { - if ( distancesquared( old_org, self.origin ) < 3600 ) - { - self.enemy dodamage( self.enemy.health + 1000, self.enemy.origin, self, self, "none", "MOD_RIFLE_BULLET" ); - continue_failsafe_damage = 1; - } - } - continue; - } - else - { - continue_failsafe_damage = 0; - } - } -} - -should_skip_teardown( find_flesh_struct_string ) -{ - if ( isDefined( find_flesh_struct_string ) && find_flesh_struct_string == "find_flesh" ) - { - return 1; - } - if ( isDefined( self.script_string ) && self.script_string == "zombie_chaser" ) - { - return 1; - } - return 0; -} - -zombie_think() -{ - self endon( "death" ); -/# - assert( !self.isdog ); -#/ - self.ai_state = "zombie_think"; - find_flesh_struct_string = undefined; - if ( isDefined( level.zombie_custom_think_logic ) ) - { - shouldwait = self [[ level.zombie_custom_think_logic ]](); - if ( shouldwait ) - { - self waittill( "zombie_custom_think_done", find_flesh_struct_string ); - } - } - else if ( isDefined( self.start_inert ) && self.start_inert ) - { - find_flesh_struct_string = "find_flesh"; - } - else - { - if ( isDefined( self.custom_location ) ) - { - self thread [[ self.custom_location ]](); - } - else - { - self thread do_zombie_spawn(); - } - self waittill( "risen", find_flesh_struct_string ); - } - node = undefined; - desired_nodes = []; - self.entrance_nodes = []; - if ( isDefined( level.max_barrier_search_dist_override ) ) - { - max_dist = level.max_barrier_search_dist_override; - } - else - { - max_dist = 500; - } - if ( !isDefined( find_flesh_struct_string ) && isDefined( self.target ) && self.target != "" ) - { - desired_origin = get_desired_origin(); -/# - assert( isDefined( desired_origin ), "Spawner @ " + self.origin + " has a .target but did not find a target" ); -#/ - origin = desired_origin; - node = getclosest( origin, level.exterior_goals ); - self.entrance_nodes[ self.entrance_nodes.size ] = node; - self zombie_history( "zombie_think -> #1 entrance (script_forcegoal) origin = " + self.entrance_nodes[ 0 ].origin ); - } - else - { - if ( self should_skip_teardown( find_flesh_struct_string ) ) - { - self zombie_setup_attack_properties(); - if ( isDefined( self.target ) ) - { - end_at_node = getnode( self.target, "targetname" ); - if ( isDefined( end_at_node ) ) - { - self setgoalnode( end_at_node ); - self waittill( "goal" ); - } - } - if ( isDefined( self.start_inert ) && self.start_inert ) - { - self thread maps/mp/zombies/_zm_ai_basic::start_inert( 1 ); - self zombie_complete_emerging_into_playable_area(); - } - else - { - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - self thread zombie_entered_playable(); - } - return; - } - else if ( isDefined( find_flesh_struct_string ) ) - { -/# - assert( isDefined( find_flesh_struct_string ) ); -#/ - i = 0; - while ( i < level.exterior_goals.size ) - { - if ( level.exterior_goals[ i ].script_string == find_flesh_struct_string ) - { - node = level.exterior_goals[ i ]; - break; - } - else - { - i++; - } - } - self.entrance_nodes[ self.entrance_nodes.size ] = node; - self zombie_history( "zombie_think -> #1 entrance origin = " + node.origin ); - self thread zombie_assure_node(); - } - else - { - origin = self.origin; - desired_origin = get_desired_origin(); - if ( isDefined( desired_origin ) ) - { - origin = desired_origin; - } - nodes = get_array_of_closest( origin, level.exterior_goals, undefined, 3 ); - desired_nodes[ 0 ] = nodes[ 0 ]; - prev_dist = distance( self.origin, nodes[ 0 ].origin ); - i = 1; - while ( i < nodes.size ) - { - dist = distance( self.origin, nodes[ i ].origin ); - if ( ( dist - prev_dist ) > max_dist ) - { - break; - } - else - { - prev_dist = dist; - desired_nodes[ i ] = nodes[ i ]; - i++; - } - } - node = desired_nodes[ 0 ]; - if ( desired_nodes.size > 1 ) - { - node = desired_nodes[ randomint( desired_nodes.size ) ]; - } - self.entrance_nodes = desired_nodes; - self zombie_history( "zombie_think -> #1 entrance origin = " + node.origin ); - self thread zombie_assure_node(); - } - } -/# - assert( isDefined( node ), "Did not find a node!!! [Should not see this!]" ); -#/ - level thread draw_line_ent_to_pos( self, node.origin, "goal" ); - self.first_node = node; - self thread zombie_goto_entrance( node ); -} - -zombie_entered_playable() -{ - self endon( "death" ); - if ( !isDefined( level.playable_areas ) ) - { - level.playable_areas = getentarray( "player_volume", "script_noteworthy" ); - } - while ( 1 ) - { - _a611 = level.playable_areas; - _k611 = getFirstArrayKey( _a611 ); - while ( isDefined( _k611 ) ) - { - area = _a611[ _k611 ]; - if ( self istouching( area ) ) - { - self zombie_complete_emerging_into_playable_area(); - return; - } - _k611 = getNextArrayKey( _a611, _k611 ); - } - wait 1; - } -} - -get_desired_origin() -{ - if ( isDefined( self.target ) ) - { - ent = getent( self.target, "targetname" ); - if ( !isDefined( ent ) ) - { - ent = getstruct( self.target, "targetname" ); - } - if ( !isDefined( ent ) ) - { - ent = getnode( self.target, "targetname" ); - } -/# - assert( isDefined( ent ), "Cannot find the targeted ent/node/struct, "" + self.target + "" at " + self.origin ); -#/ - return ent.origin; - } - return undefined; -} - -zombie_goto_entrance( node, endon_bad_path ) -{ -/# - assert( !self.isdog ); -#/ - self endon( "death" ); - self endon( "stop_zombie_goto_entrance" ); - level endon( "intermission" ); - self.ai_state = "zombie_goto_entrance"; - if ( isDefined( endon_bad_path ) && endon_bad_path ) - { - self endon( "bad_path" ); - } - self zombie_history( "zombie_goto_entrance -> start goto entrance " + node.origin ); - self.got_to_entrance = 0; - self.goalradius = 128; - self setgoalpos( node.origin ); - self waittill( "goal" ); - self.got_to_entrance = 1; - self zombie_history( "zombie_goto_entrance -> reached goto entrance " + node.origin ); - self tear_into_building(); - if ( isDefined( level.pre_aggro_pathfinding_func ) ) - { - self [[ level.pre_aggro_pathfinding_func ]](); - } - barrier_pos = []; - barrier_pos[ 0 ] = "m"; - barrier_pos[ 1 ] = "r"; - barrier_pos[ 2 ] = "l"; - self.barricade_enter = 1; - animstate = maps/mp/animscripts/zm_utility::append_missing_legs_suffix( "zm_barricade_enter" ); - substate = "barrier_" + self.zombie_move_speed + "_" + barrier_pos[ self.attacking_spot_index ]; - self animscripted( self.first_node.zbarrier.origin, self.first_node.zbarrier.angles, animstate, substate ); - maps/mp/animscripts/zm_shared::donotetracks( "barricade_enter_anim" ); - self zombie_setup_attack_properties(); - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - self.pathenemyfightdist = 4; - self zombie_complete_emerging_into_playable_area(); - self.pathenemyfightdist = 64; - self.barricade_enter = 0; -} - -zombie_assure_node() -{ - self endon( "death" ); - self endon( "goal" ); - level endon( "intermission" ); - start_pos = self.origin; - while ( isDefined( self.entrance_nodes ) ) - { - i = 0; - while ( i < self.entrance_nodes.size ) - { - if ( self zombie_bad_path() ) - { - self zombie_history( "zombie_assure_node -> assigned assured node = " + self.entrance_nodes[ i ].origin ); -/# - println( "^1Zombie @ " + self.origin + " did not move for 1 second. Going to next closest node @ " + self.entrance_nodes[ i ].origin ); -#/ - level thread draw_line_ent_to_pos( self, self.entrance_nodes[ i ].origin, "goal" ); - self.first_node = self.entrance_nodes[ i ]; - self setgoalpos( self.entrance_nodes[ i ].origin ); - i++; - continue; - } - else - { - return; - } - i++; - } - } - wait 2; - nodes = get_array_of_closest( self.origin, level.exterior_goals, undefined, 20 ); - while ( isDefined( nodes ) ) - { - self.entrance_nodes = nodes; - i = 0; - while ( i < self.entrance_nodes.size ) - { - if ( self zombie_bad_path() ) - { - self zombie_history( "zombie_assure_node -> assigned assured node = " + self.entrance_nodes[ i ].origin ); -/# - println( "^1Zombie @ " + self.origin + " did not move for 1 second. Going to next closest node @ " + self.entrance_nodes[ i ].origin ); -#/ - level thread draw_line_ent_to_pos( self, self.entrance_nodes[ i ].origin, "goal" ); - self.first_node = self.entrance_nodes[ i ]; - self setgoalpos( self.entrance_nodes[ i ].origin ); - i++; - continue; - } - else - { - return; - } - i++; - } - } - self zombie_history( "zombie_assure_node -> failed to find a good entrance point" ); - wait 20; - self dodamage( self.health + 10, self.origin ); - level.zombies_timeout_spawn++; -} - -zombie_bad_path() -{ - self endon( "death" ); - self endon( "goal" ); - self thread zombie_bad_path_notify(); - self thread zombie_bad_path_timeout(); - self.zombie_bad_path = undefined; - while ( !isDefined( self.zombie_bad_path ) ) - { - wait 0,05; - } - self notify( "stop_zombie_bad_path" ); - return self.zombie_bad_path; -} - -zombie_bad_path_notify() -{ - self endon( "death" ); - self endon( "stop_zombie_bad_path" ); - self waittill( "bad_path" ); - self.zombie_bad_path = 1; -} - -zombie_bad_path_timeout() -{ - self endon( "death" ); - self endon( "stop_zombie_bad_path" ); - wait 2; - self.zombie_bad_path = 0; -} - -tear_into_building() -{ - self endon( "death" ); - self endon( "teleporting" ); - self zombie_history( "tear_into_building -> start" ); - while ( 1 ) - { - if ( isDefined( self.first_node.script_noteworthy ) ) - { - if ( self.first_node.script_noteworthy == "no_blocker" ) - { - return; - } - } - if ( !isDefined( self.first_node.target ) ) - { - return; - } - if ( all_chunks_destroyed( self.first_node, self.first_node.barrier_chunks ) ) - { - self zombie_history( "tear_into_building -> all chunks destroyed" ); - } - while ( !get_attack_spot( self.first_node ) ) - { - self zombie_history( "tear_into_building -> Could not find an attack spot" ); - self thread do_a_taunt(); - wait 0,5; - } - self.goalradius = 2; - angles = self.first_node.zbarrier.angles; - self setgoalpos( self.attacking_spot, angles ); - self waittill( "goal" ); - self waittill_notify_or_timeout( "orientdone", 1 ); - self zombie_history( "tear_into_building -> Reach position and orientated" ); - if ( all_chunks_destroyed( self.first_node, self.first_node.barrier_chunks ) ) - { - self zombie_history( "tear_into_building -> all chunks destroyed" ); - i = 0; - while ( i < self.first_node.attack_spots_taken.size ) - { - self.first_node.attack_spots_taken[ i ] = 0; - i++; - } - return; - } - while ( 1 ) - { - if ( isDefined( self.zombie_board_tear_down_callback ) ) - { - self [[ self.zombie_board_tear_down_callback ]](); - } - chunk = get_closest_non_destroyed_chunk( self.origin, self.first_node, self.first_node.barrier_chunks ); - if ( !isDefined( chunk ) ) - { - while ( !all_chunks_destroyed( self.first_node, self.first_node.barrier_chunks ) ) - { - attack = self should_attack_player_thru_boards(); - if ( isDefined( attack ) && !attack && self.has_legs ) - { - self do_a_taunt(); - continue; - } - else - { - wait 0,1; - } - } - i = 0; - while ( i < self.first_node.attack_spots_taken.size ) - { - self.first_node.attack_spots_taken[ i ] = 0; - i++; - } - return; - } - self zombie_history( "tear_into_building -> animating" ); - self.first_node.zbarrier setzbarrierpiecestate( chunk, "targetted_by_zombie" ); - self.first_node thread check_zbarrier_piece_for_zombie_inert( chunk, self.first_node.zbarrier, self ); - self.first_node thread check_zbarrier_piece_for_zombie_death( chunk, self.first_node.zbarrier, self ); - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "teardown", self.animname ); - animstatebase = self.first_node.zbarrier getzbarrierpieceanimstate( chunk ); - animsubstate = "spot_" + self.attacking_spot_index + "_piece_" + self.first_node.zbarrier getzbarrierpieceanimsubstate( chunk ); - anim_sub_index = self getanimsubstatefromasd( animstatebase + "_in", animsubstate ); - self animscripted( self.first_node.zbarrier.origin, self.first_node.zbarrier.angles, maps/mp/animscripts/zm_utility::append_missing_legs_suffix( animstatebase + "_in" ), anim_sub_index ); - self zombie_tear_notetracks( "tear_anim", chunk, self.first_node ); - while ( self.first_node.zbarrier.chunk_health[ chunk ] >= 0 ) - { - self animscripted( self.first_node.zbarrier.origin, self.first_node.zbarrier.angles, maps/mp/animscripts/zm_utility::append_missing_legs_suffix( animstatebase + "_loop" ), anim_sub_index ); - self zombie_tear_notetracks( "tear_anim", chunk, self.first_node ); - self.first_node.zbarrier.chunk_health[ chunk ]--; - - } - self animscripted( self.first_node.zbarrier.origin, self.first_node.zbarrier.angles, maps/mp/animscripts/zm_utility::append_missing_legs_suffix( animstatebase + "_out" ), anim_sub_index ); - self zombie_tear_notetracks( "tear_anim", chunk, self.first_node ); - self.lastchunk_destroy_time = getTime(); - attack = self should_attack_player_thru_boards(); - if ( isDefined( attack ) && !attack && self.has_legs ) - { - self do_a_taunt(); - } - if ( all_chunks_destroyed( self.first_node, self.first_node.barrier_chunks ) ) - { - i = 0; - while ( i < self.first_node.attack_spots_taken.size ) - { - self.first_node.attack_spots_taken[ i ] = 0; - i++; - } - return; - } - } - self reset_attack_spot(); - } -} - -do_a_taunt() -{ - self endon( "death" ); - if ( !self.has_legs ) - { - return 0; - } - if ( !self.first_node.zbarrier zbarriersupportszombietaunts() ) - { - return; - } - self.old_origin = self.origin; - if ( getDvar( "zombie_taunt_freq" ) == "" ) - { - setdvar( "zombie_taunt_freq", "5" ); - } - freq = getDvarInt( "zombie_taunt_freq" ); - if ( freq >= randomint( 100 ) ) - { - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "taunt", self.animname ); - tauntstate = "zm_taunt"; - if ( isDefined( self.first_node.zbarrier ) && self.first_node.zbarrier getzbarriertauntanimstate() != "" ) - { - tauntstate = self.first_node.zbarrier getzbarriertauntanimstate(); - } - self animscripted( self.origin, self.angles, tauntstate ); - self taunt_notetracks( "taunt_anim" ); - } -} - -taunt_notetracks( msg ) -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( msg, notetrack ); - if ( notetrack == "end" ) - { - self forceteleport( self.old_origin ); - return; - } - } -} - -should_attack_player_thru_boards() -{ - if ( !self.has_legs ) - { - return 0; - } - if ( isDefined( self.first_node.zbarrier ) ) - { - if ( !self.first_node.zbarrier zbarriersupportszombiereachthroughattacks() ) - { - return 0; - } - } - if ( getDvar( "zombie_reachin_freq" ) == "" ) - { - setdvar( "zombie_reachin_freq", "50" ); - } - freq = getDvarInt( "zombie_reachin_freq" ); - players = get_players(); - attack = 0; - self.player_targets = []; - i = 0; - while ( i < players.size ) - { - if ( isalive( players[ i ] ) && !isDefined( players[ i ].revivetrigger ) && distance2d( self.origin, players[ i ].origin ) <= level.attack_player_thru_boards_range ) - { - self.player_targets[ self.player_targets.size ] = players[ i ]; - attack = 1; - } - i++; - } - if ( !attack || freq < randomint( 100 ) ) - { - return 0; - } - self.old_origin = self.origin; - attackanimstate = "zm_window_melee"; - if ( isDefined( self.first_node.zbarrier ) && self.first_node.zbarrier getzbarrierreachthroughattackanimstate() != "" ) - { - attackanimstate = self.first_node.zbarrier getzbarrierreachthroughattackanimstate(); - } - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "attack", self.animname ); - self animscripted( self.origin, self.angles, attackanimstate, self.attacking_spot_index - 1 ); - self window_notetracks( "window_melee_anim" ); - return 1; -} - -window_notetracks( msg ) -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( msg, notetrack ); - if ( notetrack == "end" ) - { - self teleport( self.old_origin ); - return; - } - if ( notetrack == "fire" ) - { - if ( self.ignoreall ) - { - self.ignoreall = 0; - } - if ( isDefined( self.first_node ) ) - { - _melee_dist_sq = 8100; - if ( isDefined( level.attack_player_thru_boards_range ) ) - { - _melee_dist_sq = level.attack_player_thru_boards_range * level.attack_player_thru_boards_range; - } - _trigger_dist_sq = 2601; - i = 0; - while ( i < self.player_targets.size ) - { - playerdistsq = distance2dsquared( self.player_targets[ i ].origin, self.origin ); - heightdiff = abs( self.player_targets[ i ].origin[ 2 ] - self.origin[ 2 ] ); - if ( playerdistsq < _melee_dist_sq && ( heightdiff * heightdiff ) < _melee_dist_sq ) - { - triggerdistsq = distance2dsquared( self.player_targets[ i ].origin, self.first_node.trigger_location.origin ); - heightdiff = abs( self.player_targets[ i ].origin[ 2 ] - self.first_node.trigger_location.origin[ 2 ] ); - if ( triggerdistsq < _trigger_dist_sq && ( heightdiff * heightdiff ) < _trigger_dist_sq ) - { - self.player_targets[ i ] dodamage( self.meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); - break; - } - } - else - { - i++; - } - } - } - else self melee(); - } - } -} - -reset_attack_spot() -{ - if ( isDefined( self.attacking_node ) ) - { - node = self.attacking_node; - index = self.attacking_spot_index; - node.attack_spots_taken[ index ] = 0; - self.attacking_node = undefined; - self.attacking_spot_index = undefined; - } -} - -get_attack_spot( node ) -{ - index = get_attack_spot_index( node ); - if ( !isDefined( index ) ) - { - return 0; - } - self.attacking_node = node; - self.attacking_spot_index = index; - node.attack_spots_taken[ index ] = 1; - self.attacking_spot = node.attack_spots[ index ]; - return 1; -} - -get_attack_spot_index( node ) -{ - indexes = []; - i = 0; - while ( i < node.attack_spots.size ) - { - if ( !node.attack_spots_taken[ i ] ) - { - indexes[ indexes.size ] = i; - } - i++; - } - if ( indexes.size == 0 ) - { - return undefined; - } - return indexes[ randomint( indexes.size ) ]; -} - -zombie_tear_notetracks( msg, chunk, node ) -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( msg, notetrack ); - if ( notetrack == "end" ) - { - return; - } - if ( notetrack != "board" || notetrack == "destroy_piece" && notetrack == "bar" ) - { - node.zbarrier setzbarrierpiecestate( chunk, "opening" ); - } - } -} - -zombie_boardtear_offset_fx_horizontle( chunk, node ) -{ - if ( isDefined( chunk.script_parameters ) || chunk.script_parameters == "repair_board" && chunk.script_parameters == "board" ) - { - if ( isDefined( chunk.unbroken ) && chunk.unbroken == 1 ) - { - if ( isDefined( chunk.material ) && chunk.material == "glass" ) - { - playfx( level._effect[ "glass_break" ], chunk.origin, node.angles ); - chunk.unbroken = 0; - } - else - { - if ( isDefined( chunk.material ) && chunk.material == "metal" ) - { - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin ); - chunk.unbroken = 0; - } - else - { - if ( isDefined( chunk.material ) && chunk.material == "rock" ) - { - if ( isDefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) - { - chunk setclientflag( level._zombie_scriptmover_flag_rock_fx ); - } - else - { - playfx( level._effect[ "wall_break" ], chunk.origin ); - } - chunk.unbroken = 0; - } - } - } - } - } - if ( isDefined( chunk.script_parameters ) && chunk.script_parameters == "barricade_vents" ) - { - if ( isDefined( level.use_clientside_board_fx ) && level.use_clientside_board_fx ) - { - chunk setclientflag( level._zombie_scriptmover_flag_board_horizontal_fx ); - } - else - { - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin ); - } - } - else - { - if ( isDefined( chunk.material ) && chunk.material == "rock" ) - { - if ( isDefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) - { - chunk setclientflag( level._zombie_scriptmover_flag_rock_fx ); - } - return; - } - else - { - if ( isDefined( level.use_clientside_board_fx ) ) - { - chunk setclientflag( level._zombie_scriptmover_flag_board_horizontal_fx ); - return; - } - else - { - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( 0, 0, 0 ), 30 ) ); - wait randomfloatrange( 0,2, 0,4 ); - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( 0, 0, 0 ), 30 ) ); - } - } - } -} - -zombie_boardtear_offset_fx_verticle( chunk, node ) -{ - if ( isDefined( chunk.script_parameters ) || chunk.script_parameters == "repair_board" && chunk.script_parameters == "board" ) - { - if ( isDefined( chunk.unbroken ) && chunk.unbroken == 1 ) - { - if ( isDefined( chunk.material ) && chunk.material == "glass" ) - { - playfx( level._effect[ "glass_break" ], chunk.origin, node.angles ); - chunk.unbroken = 0; - } - else - { - if ( isDefined( chunk.material ) && chunk.material == "metal" ) - { - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin ); - chunk.unbroken = 0; - } - else - { - if ( isDefined( chunk.material ) && chunk.material == "rock" ) - { - if ( isDefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) - { - chunk setclientflag( level._zombie_scriptmover_flag_rock_fx ); - } - else - { - playfx( level._effect[ "wall_break" ], chunk.origin ); - } - chunk.unbroken = 0; - } - } - } - } - } - if ( isDefined( chunk.script_parameters ) && chunk.script_parameters == "barricade_vents" ) - { - if ( isDefined( level.use_clientside_board_fx ) ) - { - chunk setclientflag( level._zombie_scriptmover_flag_board_vertical_fx ); - } - else - { - playfx( level._effect[ "fx_zombie_bar_break" ], chunk.origin ); - } - } - else - { - if ( isDefined( chunk.material ) && chunk.material == "rock" ) - { - if ( isDefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) - { - chunk setclientflag( level._zombie_scriptmover_flag_rock_fx ); - } - return; - } - else - { - if ( isDefined( level.use_clientside_board_fx ) ) - { - chunk setclientflag( level._zombie_scriptmover_flag_board_vertical_fx ); - return; - } - else - { - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( 0, 0, 0 ), 30 ) ); - wait randomfloatrange( 0,2, 0,4 ); - playfx( level._effect[ "wood_chunk_destory" ], chunk.origin + vectorScale( ( 0, 0, 0 ), 30 ) ); - } - } - } -} - -zombie_bartear_offset_fx_verticle( chunk ) -{ - if ( isDefined( chunk.script_parameters ) || chunk.script_parameters == "bar" && chunk.script_noteworthy == "board" ) - { - possible_tag_array_1 = []; - possible_tag_array_1[ 0 ] = "Tag_fx_top"; - possible_tag_array_1[ 1 ] = ""; - possible_tag_array_1[ 2 ] = "Tag_fx_top"; - possible_tag_array_1[ 3 ] = ""; - possible_tag_array_2 = []; - possible_tag_array_2[ 0 ] = ""; - possible_tag_array_2[ 1 ] = "Tag_fx_bottom"; - possible_tag_array_2[ 2 ] = ""; - possible_tag_array_2[ 3 ] = "Tag_fx_bottom"; - possible_tag_array_2 = array_randomize( possible_tag_array_2 ); - random_fx = []; - random_fx[ 0 ] = level._effect[ "fx_zombie_bar_break" ]; - random_fx[ 1 ] = level._effect[ "fx_zombie_bar_break_lite" ]; - random_fx[ 2 ] = level._effect[ "fx_zombie_bar_break" ]; - random_fx[ 3 ] = level._effect[ "fx_zombie_bar_break_lite" ]; - random_fx = array_randomize( random_fx ); - switch( randomint( 9 ) ) - { - case 0: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_top" ); - wait randomfloatrange( 0, 0,3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_bottom" ); - break; - return; - case 1: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_top" ); - wait randomfloatrange( 0, 0,3 ); - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_bottom" ); - break; - return; - case 2: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_top" ); - wait randomfloatrange( 0, 0,3 ); - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_bottom" ); - break; - return; - case 3: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_top" ); - wait randomfloatrange( 0, 0,3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_bottom" ); - break; - return; - case 4: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_top" ); - wait randomfloatrange( 0, 0,3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_bottom" ); - break; - return; - case 5: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_top" ); - break; - return; - case 6: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_bottom" ); - break; - return; - case 7: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_top" ); - break; - return; - case 8: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_bottom" ); - break; - return; - } - } -} - -zombie_bartear_offset_fx_horizontle( chunk ) -{ - if ( isDefined( chunk.script_parameters ) || chunk.script_parameters == "bar" && chunk.script_noteworthy == "board" ) - { - switch( randomint( 10 ) ) - { - case 0: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_left" ); - wait randomfloatrange( 0, 0,3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_right" ); - break; - return; - case 1: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_left" ); - wait randomfloatrange( 0, 0,3 ); - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_right" ); - break; - return; - case 2: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_left" ); - wait randomfloatrange( 0, 0,3 ); - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_right" ); - break; - return; - case 3: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_left" ); - wait randomfloatrange( 0, 0,3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_right" ); - break; - return; - case 4: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_left" ); - wait randomfloatrange( 0, 0,3 ); - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_right" ); - break; - return; - case 5: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_left" ); - break; - return; - case 6: - playfxontag( level._effect[ "fx_zombie_bar_break_lite" ], chunk, "Tag_fx_right" ); - break; - return; - case 7: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_right" ); - break; - return; - case 8: - playfxontag( level._effect[ "fx_zombie_bar_break" ], chunk, "Tag_fx_right" ); - break; - return; - } - } -} - -check_zbarrier_piece_for_zombie_inert( chunk_index, zbarrier, zombie ) -{ - zombie endon( "completed_emerging_into_playable_area" ); - zombie waittill( "stop_zombie_goto_entrance" ); - if ( zbarrier getzbarrierpiecestate( chunk_index ) == "targetted_by_zombie" ) - { - zbarrier setzbarrierpiecestate( chunk_index, "closed" ); - } -} - -check_zbarrier_piece_for_zombie_death( chunk_index, zbarrier, zombie ) -{ - while ( 1 ) - { - if ( zbarrier getzbarrierpiecestate( chunk_index ) != "targetted_by_zombie" ) - { - return; - } - if ( !isDefined( zombie ) || !isalive( zombie ) ) - { - zbarrier setzbarrierpiecestate( chunk_index, "closed" ); - return; - } - wait 0,05; - } -} - -check_for_zombie_death( zombie ) -{ - self endon( "destroyed" ); - wait 2,5; - self maps/mp/zombies/_zm_blockers::update_states( "repaired" ); -} - -zombie_head_gib( attacker, means_of_death ) -{ - self endon( "death" ); - if ( !is_mature() ) - { - return 0; - } - if ( isDefined( self.head_gibbed ) && self.head_gibbed ) - { - return; - } - self.head_gibbed = 1; - self zombie_eye_glow_stop(); - size = self getattachsize(); - i = 0; - while ( i < size ) - { - model = self getattachmodelname( i ); - if ( issubstr( model, "head" ) ) - { - if ( isDefined( self.hatmodel ) ) - { - self detach( self.hatmodel, "" ); - } - self play_sound_on_ent( "zombie_head_gib" ); - self detach( model, "" ); - if ( isDefined( self.torsodmg5 ) ) - { - self attach( self.torsodmg5, "", 1 ); - } - break; - } - else - { - i++; - } - } - temp_array = []; - temp_array[ 0 ] = level._zombie_gib_piece_index_head; - self gib( "normal", temp_array ); - if ( isDefined( level.track_gibs ) ) - { - level [[ level.track_gibs ]]( self, temp_array ); - } - self thread damage_over_time( ceil( self.health * 0,2 ), 1, attacker, means_of_death ); -} - -damage_over_time( dmg, delay, attacker, means_of_death ) -{ - self endon( "death" ); - self endon( "exploding" ); - if ( !isalive( self ) ) - { - return; - } - if ( !isplayer( attacker ) ) - { - attacker = self; - } - if ( !isDefined( means_of_death ) ) - { - means_of_death = "MOD_UNKNOWN"; - } - while ( 1 ) - { - if ( isDefined( delay ) ) - { - wait delay; - } - if ( isDefined( self ) ) - { - self dodamage( dmg, self gettagorigin( "j_neck" ), attacker, self, self.damagelocation, means_of_death, 0, self.damageweapon ); - } - } -} - -head_should_gib( attacker, type, point ) -{ - if ( !is_mature() ) - { - return 0; - } - if ( self.head_gibbed ) - { - return 0; - } - if ( !isDefined( attacker ) || !isplayer( attacker ) ) - { - return 0; - } - low_health_percent = ( self.health / self.maxhealth ) * 100; - if ( low_health_percent > 10 ) - { - return 0; - } - weapon = attacker getcurrentweapon(); - if ( type != "MOD_RIFLE_BULLET" && type != "MOD_PISTOL_BULLET" ) - { - if ( type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" ) - { - if ( distance( point, self gettagorigin( "j_head" ) ) > 55 ) - { - return 0; - } - else - { - return 1; - } - } - else - { - if ( type == "MOD_PROJECTILE" ) - { - if ( distance( point, self gettagorigin( "j_head" ) ) > 10 ) - { - return 0; - } - else - { - return 1; - } - } - else - { - if ( weaponclass( weapon ) != "spread" ) - { - return 0; - } - } - } - } - if ( !self maps/mp/animscripts/zm_utility::damagelocationisany( "head", "helmet", "neck" ) ) - { - return 0; - } - if ( weapon != "none" || weapon == level.start_weapon && weaponisgasweapon( self.weapon ) ) - { - return 0; - } - return 1; -} - -headshot_blood_fx() -{ - if ( !isDefined( self ) ) - { - return; - } - if ( !is_mature() ) - { - return; - } - fxtag = "j_neck"; - fxorigin = self gettagorigin( fxtag ); - upvec = anglesToUp( self gettagangles( fxtag ) ); - forwardvec = anglesToForward( self gettagangles( fxtag ) ); - playfx( level._effect[ "headshot" ], fxorigin, forwardvec, upvec ); - playfx( level._effect[ "headshot_nochunks" ], fxorigin, forwardvec, upvec ); - wait 0,3; - if ( isDefined( self ) ) - { - playfxontag( level._effect[ "bloodspurt" ], self, fxtag ); - } -} - -zombie_gib_on_damage() -{ - while ( 1 ) - { - self waittill( "damage", amount, attacker, direction_vec, point, type, tagname, modelname, partname, weaponname ); - if ( !isDefined( self ) ) - { - return; - } - while ( !self zombie_should_gib( amount, attacker, type ) ) - { - continue; - } - while ( self head_should_gib( attacker, type, point ) && type != "MOD_BURNED" ) - { - self zombie_head_gib( attacker, type ); - } - if ( !self.gibbed ) - { - while ( self maps/mp/animscripts/zm_utility::damagelocationisany( "head", "helmet", "neck" ) ) - { - continue; - } - refs = []; - switch( self.damagelocation ) - { - case "torso_lower": - case "torso_upper": - refs[ refs.size ] = "guts"; - refs[ refs.size ] = "right_arm"; - break; - case "right_arm_lower": - case "right_arm_upper": - case "right_hand": - refs[ refs.size ] = "right_arm"; - break; - case "left_arm_lower": - case "left_arm_upper": - case "left_hand": - refs[ refs.size ] = "left_arm"; - break; - case "right_foot": - case "right_leg_lower": - case "right_leg_upper": - if ( self.health <= 0 ) - { - refs[ refs.size ] = "right_leg"; - refs[ refs.size ] = "right_leg"; - refs[ refs.size ] = "right_leg"; - refs[ refs.size ] = "no_legs"; - } - break; - case "left_foot": - case "left_leg_lower": - case "left_leg_upper": - if ( self.health <= 0 ) - { - refs[ refs.size ] = "left_leg"; - refs[ refs.size ] = "left_leg"; - refs[ refs.size ] = "left_leg"; - refs[ refs.size ] = "no_legs"; - } - break; - default: - if ( self.damagelocation == "none" ) - { - if ( type != "MOD_GRENADE" && type != "MOD_GRENADE_SPLASH" || type == "MOD_PROJECTILE" && type == "MOD_PROJECTILE_SPLASH" ) - { - refs = self derive_damage_refs( point ); - break; - } - else } - else refs[ refs.size ] = "guts"; - refs[ refs.size ] = "right_arm"; - refs[ refs.size ] = "left_arm"; - refs[ refs.size ] = "right_leg"; - refs[ refs.size ] = "left_leg"; - refs[ refs.size ] = "no_legs"; - break; - } - if ( isDefined( level.custom_derive_damage_refs ) ) - { - new_gib_ref = self [[ level.custom_derive_damage_refs ]]( point, weaponname ); - if ( new_gib_ref.size > 0 ) - { - refs = new_gib_ref; - } - } - if ( refs.size ) - { - self.a.gib_ref = maps/mp/animscripts/zm_death::get_random( refs ); - if ( self.a.gib_ref != "no_legs" && self.a.gib_ref != "right_leg" && self.a.gib_ref == "left_leg" && self.health > 0 ) - { - self.has_legs = 0; - self allowedstances( "crouch" ); - self setphysparams( 15, 0, 24 ); - self allowpitchangle( 1 ); - self setpitchorient(); - health = self.health; - health *= 0,1; - self thread maps/mp/animscripts/zm_run::needsdelayedupdate(); - if ( isDefined( self.crawl_anim_override ) ) - { - self [[ self.crawl_anim_override ]](); - } - } - } - if ( self.health > 0 ) - { - self thread maps/mp/animscripts/zm_death::do_gib(); - if ( isDefined( level.gib_on_damage ) ) - { - self thread [[ level.gib_on_damage ]](); - } - } - } -} -} - -zombie_should_gib( amount, attacker, type ) -{ - if ( !is_mature() ) - { - return 0; - } - if ( !isDefined( type ) ) - { - return 0; - } - if ( isDefined( self.is_on_fire ) && self.is_on_fire ) - { - return 0; - } - if ( isDefined( self.no_gib ) && self.no_gib == 1 ) - { - return 0; - } - switch( type ) - { - case "MOD_BURNED": - case "MOD_CRUSH": - case "MOD_FALLING": - case "MOD_SUICIDE": - case "MOD_TELEFRAG": - case "MOD_TRIGGER_HURT": - case "MOD_UNKNOWN": - return 0; - case "MOD_MELEE": - return 0; - } - if ( type == "MOD_PISTOL_BULLET" || type == "MOD_RIFLE_BULLET" ) - { - if ( !isDefined( attacker ) || !isplayer( attacker ) ) - { - return 0; - } - weapon = attacker getcurrentweapon(); - if ( weapon == "none" || weapon == level.start_weapon ) - { - return 0; - } - if ( weaponisgasweapon( self.weapon ) ) - { - return 0; - } - } - else - { - if ( type == "MOD_PROJECTILE" ) - { - if ( isDefined( attacker ) && isplayer( attacker ) ) - { - weapon = attacker getcurrentweapon(); - if ( weapon == "slipgun_zm" || weapon == "slipgun_upgraded_zm" ) - { - return 0; - } - } - } - } - prev_health = amount + self.health; - if ( prev_health <= 0 ) - { - prev_health = 1; - } - damage_percent = ( amount / prev_health ) * 100; - if ( damage_percent < 10 ) - { - return 0; - } - return 1; -} - -derive_damage_refs( point ) -{ - if ( !isDefined( level.gib_tags ) ) - { - init_gib_tags(); - } - closesttag = undefined; - i = 0; - while ( i < level.gib_tags.size ) - { - if ( !isDefined( closesttag ) ) - { - closesttag = level.gib_tags[ i ]; - i++; - continue; - } - else - { - if ( distancesquared( point, self gettagorigin( level.gib_tags[ i ] ) ) < distancesquared( point, self gettagorigin( closesttag ) ) ) - { - closesttag = level.gib_tags[ i ]; - } - } - i++; - } - refs = []; - if ( closesttag != "J_SpineLower" || closesttag == "J_SpineUpper" && closesttag == "J_Spine4" ) - { - refs[ refs.size ] = "guts"; - refs[ refs.size ] = "right_arm"; - } - else - { - if ( closesttag != "J_Shoulder_LE" || closesttag == "J_Elbow_LE" && closesttag == "J_Wrist_LE" ) - { - refs[ refs.size ] = "left_arm"; - } - else - { - if ( closesttag != "J_Shoulder_RI" || closesttag == "J_Elbow_RI" && closesttag == "J_Wrist_RI" ) - { - refs[ refs.size ] = "right_arm"; - } - else - { - if ( closesttag != "J_Hip_LE" || closesttag == "J_Knee_LE" && closesttag == "J_Ankle_LE" ) - { - refs[ refs.size ] = "left_leg"; - refs[ refs.size ] = "no_legs"; - } - else - { - if ( closesttag != "J_Hip_RI" || closesttag == "J_Knee_RI" && closesttag == "J_Ankle_RI" ) - { - refs[ refs.size ] = "right_leg"; - refs[ refs.size ] = "no_legs"; - } - } - } - } - } -/# - assert( array_validate( refs ), "get_closest_damage_refs(): couldn't derive refs from closestTag " + closesttag ); -#/ - return refs; -} - -init_gib_tags() -{ - tags = []; - tags[ tags.size ] = "J_SpineLower"; - tags[ tags.size ] = "J_SpineUpper"; - tags[ tags.size ] = "J_Spine4"; - tags[ tags.size ] = "J_Shoulder_LE"; - tags[ tags.size ] = "J_Elbow_LE"; - tags[ tags.size ] = "J_Wrist_LE"; - tags[ tags.size ] = "J_Shoulder_RI"; - tags[ tags.size ] = "J_Elbow_RI"; - tags[ tags.size ] = "J_Wrist_RI"; - tags[ tags.size ] = "J_Hip_LE"; - tags[ tags.size ] = "J_Knee_LE"; - tags[ tags.size ] = "J_Ankle_LE"; - tags[ tags.size ] = "J_Hip_RI"; - tags[ tags.size ] = "J_Knee_RI"; - tags[ tags.size ] = "J_Ankle_RI"; - level.gib_tags = tags; -} - -zombie_can_drop_powerups( zombie ) -{ - if ( is_tactical_grenade( zombie.damageweapon ) || !flag( "zombie_drop_powerups" ) ) - { - return 0; - } - if ( isDefined( zombie.no_powerups ) && zombie.no_powerups ) - { - return 0; - } - return 1; -} - -zombie_death_points( origin, mod, hit_location, attacker, zombie, team ) -{ - if ( !isDefined( attacker ) || !isplayer( attacker ) ) - { - return; - } - if ( zombie_can_drop_powerups( zombie ) ) - { - if ( isDefined( zombie.in_the_ground ) && zombie.in_the_ground == 1 ) - { - trace = bullettrace( zombie.origin + vectorScale( ( 0, 0, 0 ), 100 ), zombie.origin + vectorScale( ( 0, 0, 0 ), 100 ), 0, undefined ); - origin = trace[ "position" ]; - level thread maps/mp/zombies/_zm_powerups::powerup_drop( origin ); - } - else - { - trace = groundtrace( zombie.origin + vectorScale( ( 0, 0, 0 ), 5 ), zombie.origin + vectorScale( ( 0, 0, 0 ), 300 ), 0, undefined ); - origin = trace[ "position" ]; - level thread maps/mp/zombies/_zm_powerups::powerup_drop( origin ); - } - } - level thread maps/mp/zombies/_zm_audio::player_zombie_kill_vox( hit_location, attacker, mod, zombie ); - event = "death"; - if ( isDefined( zombie.damageweapon ) && issubstr( zombie.damageweapon, "knife_ballistic_" ) || mod == "MOD_MELEE" && mod == "MOD_IMPACT" ) - { - event = "ballistic_knife_death"; - } - if ( isDefined( zombie.deathpoints_already_given ) && zombie.deathpoints_already_given ) - { - return; - } - zombie.deathpoints_already_given = 1; - if ( isDefined( zombie.damageweapon ) && is_equipment( zombie.damageweapon ) ) - { - return; - } - attacker maps/mp/zombies/_zm_score::player_add_points( event, mod, hit_location, undefined, team ); -} - -get_number_variants( aliasprefix ) -{ - i = 0; - while ( i < 100 ) - { - if ( !soundexists( ( aliasprefix + "_" ) + i ) ) - { - return i; - } - i++; - } -} - -dragons_breath_flame_death_fx() -{ - if ( self.isdog ) - { - return; - } - if ( !isDefined( level._effect ) || !isDefined( level._effect[ "character_fire_death_sm" ] ) ) - { -/# - println( "^3ANIMSCRIPT WARNING: You are missing level._effect["character_fire_death_sm"], please set it in your levelname_fx.gsc. Use "env/fire/fx_fire_zombie_md"" ); -#/ - return; - } - playfxontag( level._effect[ "character_fire_death_sm" ], self, "J_SpineLower" ); - tagarray = []; - if ( !isDefined( self.a.gib_ref ) || self.a.gib_ref != "left_arm" ) - { - tagarray[ tagarray.size ] = "J_Elbow_LE"; - tagarray[ tagarray.size ] = "J_Wrist_LE"; - } - if ( !isDefined( self.a.gib_ref ) || self.a.gib_ref != "right_arm" ) - { - tagarray[ tagarray.size ] = "J_Elbow_RI"; - tagarray[ tagarray.size ] = "J_Wrist_RI"; - } - if ( !isDefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" && self.a.gib_ref != "left_leg" ) - { - tagarray[ tagarray.size ] = "J_Knee_LE"; - tagarray[ tagarray.size ] = "J_Ankle_LE"; - } - if ( !isDefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" && self.a.gib_ref != "right_leg" ) - { - tagarray[ tagarray.size ] = "J_Knee_RI"; - tagarray[ tagarray.size ] = "J_Ankle_RI"; - } - tagarray = array_randomize( tagarray ); - playfxontag( level._effect[ "character_fire_death_sm" ], self, tagarray[ 0 ] ); -} - -zombie_ragdoll_then_explode( launchvector, attacker ) -{ - if ( !isDefined( self ) ) - { - return; - } - self zombie_eye_glow_stop(); - self setclientfield( "zombie_ragdoll_explode", 1 ); - self notify( "exploding" ); - self notify( "end_melee" ); - self notify( "death" ); - self.dont_die_on_me = 1; - self.exploding = 1; - self.a.nodeath = 1; - self.dont_throw_gib = 1; - self startragdoll(); - self setplayercollision( 0 ); - self reset_attack_spot(); - if ( isDefined( launchvector ) ) - { - self launchragdoll( launchvector ); - } - wait 2,1; - if ( isDefined( self ) ) - { - self ghost(); - self delay_thread( 0,25, ::self_delete ); - } -} - -zombie_death_animscript() -{ - team = undefined; - recalc_zombie_array(); - if ( isDefined( self._race_team ) ) - { - team = self._race_team; - } - self reset_attack_spot(); - if ( self check_zombie_death_animscript_callbacks() ) - { - return 0; - } - if ( isDefined( level.zombie_death_animscript_override ) ) - { - self [[ level.zombie_death_animscript_override ]](); - } - if ( self.has_legs && isDefined( self.a.gib_ref ) && self.a.gib_ref == "no_legs" ) - { - self.deathanim = "zm_death"; - } - self.grenadeammo = 0; - if ( isDefined( self.nuked ) ) - { - if ( zombie_can_drop_powerups( self ) ) - { - if ( isDefined( self.in_the_ground ) && self.in_the_ground == 1 ) - { - trace = bullettrace( self.origin + vectorScale( ( 0, 0, 0 ), 100 ), self.origin + vectorScale( ( 0, 0, 0 ), 100 ), 0, undefined ); - origin = trace[ "position" ]; - level thread maps/mp/zombies/_zm_powerups::powerup_drop( origin ); - } - else - { - trace = groundtrace( self.origin + vectorScale( ( 0, 0, 0 ), 5 ), self.origin + vectorScale( ( 0, 0, 0 ), 300 ), 0, undefined ); - origin = trace[ "position" ]; - level thread maps/mp/zombies/_zm_powerups::powerup_drop( self.origin ); - } - } - } - else - { - level zombie_death_points( self.origin, self.damagemod, self.damagelocation, self.attacker, self, team ); - } - if ( isDefined( self.attacker ) && isai( self.attacker ) ) - { - self.attacker notify( "killed" ); - } - if ( self.damageweapon == "rottweil72_upgraded_zm" && self.damagemod == "MOD_RIFLE_BULLET" ) - { - self thread dragons_breath_flame_death_fx(); - } - if ( self.damageweapon == "tazer_knuckles_zm" && self.damagemod == "MOD_MELEE" ) - { - self.is_on_fire = 0; - self notify( "stop_flame_damage" ); - } - if ( self.damagemod == "MOD_BURNED" ) - { - self thread maps/mp/animscripts/zm_death::flame_death_fx(); - } - if ( self.damagemod == "MOD_GRENADE" || self.damagemod == "MOD_GRENADE_SPLASH" ) - { - level notify( "zombie_grenade_death" ); - } - return 0; -} - -check_zombie_death_animscript_callbacks() -{ - if ( !isDefined( level.zombie_death_animscript_callbacks ) ) - { - return 0; - } - i = 0; - while ( i < level.zombie_death_animscript_callbacks.size ) - { - if ( self [[ level.zombie_death_animscript_callbacks[ i ] ]]() ) - { - return 1; - } - i++; - } - return 0; -} - -register_zombie_death_animscript_callback( func ) -{ - if ( !isDefined( level.zombie_death_animscript_callbacks ) ) - { - level.zombie_death_animscript_callbacks = []; - } - level.zombie_death_animscript_callbacks[ level.zombie_death_animscript_callbacks.size ] = func; -} - -damage_on_fire( player ) -{ - self endon( "death" ); - self endon( "stop_flame_damage" ); - wait 2; - while ( isDefined( self.is_on_fire ) && self.is_on_fire ) - { - if ( level.round_number < 6 ) - { - dmg = level.zombie_health * randomfloatrange( 0,2, 0,3 ); - } - else if ( level.round_number < 9 ) - { - dmg = level.zombie_health * randomfloatrange( 0,15, 0,25 ); - } - else if ( level.round_number < 11 ) - { - dmg = level.zombie_health * randomfloatrange( 0,1, 0,2 ); - } - else - { - dmg = level.zombie_health * randomfloatrange( 0,1, 0,15 ); - } - if ( isDefined( player ) && isalive( player ) ) - { - self dodamage( dmg, self.origin, player ); - } - else - { - self dodamage( dmg, self.origin, level ); - } - wait randomfloatrange( 1, 3 ); - } -} - -player_using_hi_score_weapon( player ) -{ - weapon = player getcurrentweapon(); - if ( weapon == "none" || weaponissemiauto( weapon ) ) - { - return 1; - } - return 0; -} - -zombie_damage( mod, hit_location, hit_origin, player, amount, team ) -{ - if ( is_magic_bullet_shield_enabled( self ) ) - { - return; - } - player.use_weapon_type = mod; - if ( isDefined( self.marked_for_death ) ) - { - return; - } - if ( !isDefined( player ) ) - { - return; - } - if ( isDefined( hit_origin ) ) - { - self.damagehit_origin = hit_origin; - } - else - { - self.damagehit_origin = player getweaponmuzzlepoint(); - } - if ( self check_zombie_damage_callbacks( mod, hit_location, hit_origin, player, amount ) ) - { - return; - } - else if ( self zombie_flame_damage( mod, player ) ) - { - if ( self zombie_give_flame_damage_points() ) - { - player maps/mp/zombies/_zm_score::player_add_points( "damage", mod, hit_location, self.isdog, team ); - } - } - else - { - if ( player_using_hi_score_weapon( player ) ) - { - damage_type = "damage"; - } - else - { - damage_type = "damage_light"; - } - if ( isDefined( self.no_damage_points ) && !self.no_damage_points ) - { - player maps/mp/zombies/_zm_score::player_add_points( damage_type, mod, hit_location, self.isdog, team ); - } - } - if ( isDefined( self.zombie_damage_fx_func ) ) - { - self [[ self.zombie_damage_fx_func ]]( mod, hit_location, hit_origin, player ); - } - modname = remove_mod_from_methodofdeath( mod ); - if ( is_placeable_mine( self.damageweapon ) ) - { - if ( isDefined( self.zombie_damage_claymore_func ) ) - { - self [[ self.zombie_damage_claymore_func ]]( mod, hit_location, hit_origin, player ); - } - else if ( isDefined( player ) && isalive( player ) ) - { - self dodamage( level.round_number * randomintrange( 100, 200 ), self.origin, player, self, hit_location, mod ); - } - else - { - self dodamage( level.round_number * randomintrange( 100, 200 ), self.origin, undefined, self, hit_location, mod ); - } - } - else if ( mod == "MOD_GRENADE" || mod == "MOD_GRENADE_SPLASH" ) - { - if ( isDefined( player ) && isalive( player ) ) - { - player.grenade_multiattack_count++; - player.grenade_multiattack_ent = self; - self dodamage( level.round_number + randomintrange( 100, 200 ), self.origin, player, self, hit_location, modname ); - } - else - { - self dodamage( level.round_number + randomintrange( 100, 200 ), self.origin, undefined, self, hit_location, modname ); - } - } - else - { - if ( mod != "MOD_PROJECTILE" || mod == "MOD_EXPLOSIVE" && mod == "MOD_PROJECTILE_SPLASH" ) - { - if ( isDefined( player ) && isalive( player ) ) - { - self dodamage( level.round_number * randomintrange( 0, 100 ), self.origin, player, self, hit_location, modname ); - } - else - { - self dodamage( level.round_number * randomintrange( 0, 100 ), self.origin, undefined, self, hit_location, modname ); - } - } - } - if ( isDefined( self.a.gib_ref ) && self.a.gib_ref == "no_legs" && isalive( self ) ) - { - if ( isDefined( player ) ) - { - rand = randomintrange( 0, 100 ); - if ( rand < 10 ) - { - player create_and_play_dialog( "general", "crawl_spawn" ); - } - } - } - else - { - if ( isDefined( self.a.gib_ref ) || self.a.gib_ref == "right_arm" && self.a.gib_ref == "left_arm" ) - { - if ( self.has_legs && isalive( self ) ) - { - if ( isDefined( player ) ) - { - rand = randomintrange( 0, 100 ); - if ( rand < 7 ) - { - player create_and_play_dialog( "general", "shoot_arm" ); - } - } - } - } - } - self thread maps/mp/zombies/_zm_powerups::check_for_instakill( player, mod, hit_location ); -} - -zombie_damage_ads( mod, hit_location, hit_origin, player, amount, team ) -{ - if ( is_magic_bullet_shield_enabled( self ) ) - { - return; - } - player.use_weapon_type = mod; - if ( !isDefined( player ) ) - { - return; - } - if ( isDefined( hit_origin ) ) - { - self.damagehit_origin = hit_origin; - } - else - { - self.damagehit_origin = player getweaponmuzzlepoint(); - } - if ( self check_zombie_damage_callbacks( mod, hit_location, hit_origin, player, amount ) ) - { - return; - } - else if ( self zombie_flame_damage( mod, player ) ) - { - if ( self zombie_give_flame_damage_points() ) - { - player maps/mp/zombies/_zm_score::player_add_points( "damage_ads", mod, hit_location, undefined, team ); - } - } - else - { - if ( player_using_hi_score_weapon( player ) ) - { - damage_type = "damage"; - } - else - { - damage_type = "damage_light"; - } - if ( isDefined( self.no_damage_points ) && !self.no_damage_points ) - { - player maps/mp/zombies/_zm_score::player_add_points( damage_type, mod, hit_location, undefined, team ); - } - } - self thread maps/mp/zombies/_zm_powerups::check_for_instakill( player, mod, hit_location ); -} - -check_zombie_damage_callbacks( mod, hit_location, hit_origin, player, amount ) -{ - if ( !isDefined( level.zombie_damage_callbacks ) ) - { - return 0; - } - i = 0; - while ( i < level.zombie_damage_callbacks.size ) - { - if ( self [[ level.zombie_damage_callbacks[ i ] ]]( mod, hit_location, hit_origin, player, amount ) ) - { - return 1; - } - i++; - } - return 0; -} - -register_zombie_damage_callback( func ) -{ - if ( !isDefined( level.zombie_damage_callbacks ) ) - { - level.zombie_damage_callbacks = []; - } - level.zombie_damage_callbacks[ level.zombie_damage_callbacks.size ] = func; -} - -zombie_give_flame_damage_points() -{ - if ( getTime() > self.flame_damage_time ) - { - self.flame_damage_time = getTime() + level.zombie_vars[ "zombie_flame_dmg_point_delay" ]; - return 1; - } - return 0; -} - -zombie_flame_damage( mod, player ) -{ - if ( mod == "MOD_BURNED" ) - { - if ( !isDefined( self.is_on_fire ) || isDefined( self.is_on_fire ) && !self.is_on_fire ) - { - self thread damage_on_fire( player ); - } - do_flame_death = 1; - dist = 10000; - ai = getaiarray( level.zombie_team ); - i = 0; - while ( i < ai.size ) - { - if ( isDefined( ai[ i ].is_on_fire ) && ai[ i ].is_on_fire ) - { - if ( distancesquared( ai[ i ].origin, self.origin ) < dist ) - { - do_flame_death = 0; - break; - } - } - else - { - i++; - } - } - if ( do_flame_death ) - { - self thread maps/mp/animscripts/zm_death::flame_death_fx(); - } - return 1; - } - return 0; -} - -is_weapon_shotgun( sweapon ) -{ - if ( isDefined( sweapon ) && weaponclass( sweapon ) == "spread" ) - { - return 1; - } - return 0; -} - -zombie_death_event( zombie ) -{ - zombie.marked_for_recycle = 0; - force_explode = 0; - force_head_gib = 0; - zombie waittill( "death", attacker ); - time_of_death = getTime(); - if ( isDefined( zombie ) ) - { - zombie stopsounds(); - } - if ( isDefined( zombie ) && isDefined( zombie.marked_for_insta_upgraded_death ) ) - { - force_head_gib = 1; - } - if ( !isDefined( zombie.damagehit_origin ) && isDefined( attacker ) ) - { - zombie.damagehit_origin = attacker getweaponmuzzlepoint(); - } - if ( isDefined( attacker ) && isplayer( attacker ) ) - { - maps/mp/zombies/_zm_pers_upgrades::pers_zombie_death_location_check( attacker, zombie.origin ); - if ( isDefined( zombie ) && isDefined( zombie.damagelocation ) ) - { - if ( is_headshot( zombie.damageweapon, zombie.damagelocation, zombie.damagemod ) ) - { - attacker.headshots++; - attacker maps/mp/zombies/_zm_stats::increment_client_stat( "headshots" ); - attacker addweaponstat( zombie.damageweapon, "headshots", 1 ); - attacker maps/mp/zombies/_zm_stats::increment_player_stat( "headshots" ); - if ( is_classic() ) - { - attacker check_for_pers_headshot( time_of_death, zombie ); - } - } - else - { - attacker notify( "zombie_death_no_headshot" ); - } - } - if ( isDefined( zombie ) && isDefined( zombie.damagemod ) && zombie.damagemod == "MOD_MELEE" ) - { - attacker maps/mp/zombies/_zm_stats::increment_client_stat( "melee_kills" ); - attacker maps/mp/zombies/_zm_stats::increment_player_stat( "melee_kills" ); - attacker notify( "melee_kill" ); - if ( attacker maps/mp/zombies/_zm_pers_upgrades::is_insta_kill_upgraded_and_active() ) - { - force_explode = 1; - } - } - attacker maps/mp/zombies/_zm::add_rampage_bookmark_kill_time(); - attacker.kills++; - attacker maps/mp/zombies/_zm_stats::increment_client_stat( "kills" ); - attacker maps/mp/zombies/_zm_stats::increment_player_stat( "kills" ); - dmgweapon = zombie.damageweapon; - if ( is_alt_weapon( dmgweapon ) ) - { - dmgweapon = weaponaltweaponname( dmgweapon ); - } - attacker addweaponstat( dmgweapon, "kills", 1 ); - if ( isDefined( attacker.pers_upgrades_awarded[ "multikill_headshots" ] ) || attacker.pers_upgrades_awarded[ "multikill_headshots" ] && force_head_gib ) - { - zombie maps/mp/zombies/_zm_spawner::zombie_head_gib(); - } - } - zombie_death_achievement_sliquifier_check( attacker, zombie ); - recalc_zombie_array(); - if ( !isDefined( zombie ) ) - { - return; - } - level.global_zombies_killed++; - if ( isDefined( zombie.marked_for_death ) && !isDefined( zombie.nuked ) ) - { - level.zombie_trap_killed_count++; - } - zombie check_zombie_death_event_callbacks(); - zombie thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "death", zombie.animname ); - zombie thread zombie_eye_glow_stop(); - if ( isDefined( zombie.damageweapon ) && is_weapon_shotgun( zombie.damageweapon ) && !maps/mp/zombies/_zm_weapons::is_weapon_upgraded( zombie.damageweapon ) && isDefined( zombie.damageweapon ) || is_placeable_mine( zombie.damageweapon ) && zombie.damagemod != "MOD_GRENADE" && zombie.damagemod != "MOD_GRENADE_SPLASH" || zombie.damagemod == "MOD_EXPLOSIVE" && force_explode == 1 ) - { - splode_dist = 180; - if ( isDefined( zombie.damagehit_origin ) && distancesquared( zombie.origin, zombie.damagehit_origin ) < ( splode_dist * splode_dist ) ) - { - tag = "J_SpineLower"; - if ( isDefined( zombie.isdog ) && zombie.isdog ) - { - tag = "tag_origin"; - } - if ( isDefined( zombie.is_on_fire ) && !zombie.is_on_fire && isDefined( zombie.guts_explosion ) && !zombie.guts_explosion ) - { - zombie.guts_explosion = 1; - if ( is_mature() ) - { - if ( isDefined( level._effect[ "zombie_guts_explosion" ] ) ) - { - playfx( level._effect[ "zombie_guts_explosion" ], zombie gettagorigin( tag ) ); - } - } - if ( isDefined( zombie.isdog ) && !zombie.isdog ) - { - wait 0,1; - } - zombie ghost(); - } - } - } - if ( zombie.damagemod == "MOD_GRENADE" || zombie.damagemod == "MOD_GRENADE_SPLASH" ) - { - if ( isDefined( attacker ) && isalive( attacker ) ) - { - attacker.grenade_multiattack_count++; - attacker.grenade_multiattack_ent = zombie; - } - } - if ( isDefined( zombie.has_been_damaged_by_player ) && !zombie.has_been_damaged_by_player && isDefined( zombie.marked_for_recycle ) && zombie.marked_for_recycle ) - { - level.zombie_total++; - level.zombie_total_subtract++; - } - else - { - if ( isDefined( zombie.attacker ) && isplayer( zombie.attacker ) ) - { - level.zombie_player_killed_count++; - if ( isDefined( zombie.sound_damage_player ) && zombie.sound_damage_player == zombie.attacker ) - { - zombie.attacker maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "damage" ); - } - zombie.attacker notify( "zom_kill" ); - damageloc = zombie.damagelocation; - damagemod = zombie.damagemod; - attacker = zombie.attacker; - weapon = zombie.damageweapon; - bbprint( "zombie_kills", "round %d zombietype %s damagetype %s damagelocation %s playername %s playerweapon %s playerx %f playery %f playerz %f zombiex %f zombiey %f zombiez %f", level.round_number, zombie.animname, damagemod, damageloc, attacker.name, weapon, attacker.origin, zombie.origin ); - } - else - { - if ( zombie.ignoreall && isDefined( zombie.marked_for_death ) && !zombie.marked_for_death ) - { - level.zombies_timeout_spawn++; - } - } - } - level notify( "zom_kill" ); - level.total_zombies_killed++; -} - -zombie_death_achievement_sliquifier_check( e_player, e_zombie ) -{ - if ( !isplayer( e_player ) ) - { - return; - } - if ( isDefined( e_zombie ) ) - { - if ( isDefined( e_zombie.damageweapon ) && e_zombie.damageweapon == "slipgun_zm" ) - { - if ( !isDefined( e_player.num_sliquifier_kills ) ) - { - e_player.num_sliquifier_kills = 0; - } - e_player.num_sliquifier_kills++; - e_player notify( "sliquifier_kill" ); - } - } -} - -check_zombie_death_event_callbacks() -{ - if ( !isDefined( level.zombie_death_event_callbacks ) ) - { - return; - } - i = 0; - while ( i < level.zombie_death_event_callbacks.size ) - { - self [[ level.zombie_death_event_callbacks[ i ] ]](); - i++; - } -} - -register_zombie_death_event_callback( func ) -{ - if ( !isDefined( level.zombie_death_event_callbacks ) ) - { - level.zombie_death_event_callbacks = []; - } - level.zombie_death_event_callbacks[ level.zombie_death_event_callbacks.size ] = func; -} - -deregister_zombie_death_event_callback( func ) -{ - if ( isDefined( level.zombie_death_event_callbacks ) ) - { - arrayremovevalue( level.zombie_death_event_callbacks, func ); - } -} - -zombie_setup_attack_properties() -{ - self zombie_history( "zombie_setup_attack_properties()" ); - self.ignoreall = 0; - self.pathenemyfightdist = 64; - self.meleeattackdist = 64; - self.maxsightdistsqrd = 16384; - self.disablearrivals = 1; - self.disableexits = 1; -} - -attractors_generated_listener() -{ - self endon( "death" ); - level endon( "intermission" ); - self endon( "stop_find_flesh" ); - self endon( "path_timer_done" ); - level waittill( "attractor_positions_generated" ); - self.zombie_path_timer = 0; -} - -zombie_pathing() -{ - self endon( "death" ); - self endon( "zombie_acquire_enemy" ); - level endon( "intermission" ); -/# - if ( !isDefined( self.favoriteenemy ) ) - { - assert( isDefined( self.enemyoverride ) ); - } -#/ - self._skip_pathing_first_delay = 1; - self thread zombie_follow_enemy(); - self waittill( "bad_path" ); - level.zombie_pathing_failed++; - if ( isDefined( self.enemyoverride ) ) - { - debug_print( "Zombie couldn't path to point of interest at origin: " + self.enemyoverride[ 0 ] + " Falling back to breadcrumb system" ); - if ( isDefined( self.enemyoverride[ 1 ] ) ) - { - self.enemyoverride = self.enemyoverride[ 1 ] invalidate_attractor_pos( self.enemyoverride, self ); - self.zombie_path_timer = 0; - return; - } - } - else if ( isDefined( self.favoriteenemy ) ) - { - debug_print( "Zombie couldn't path to player at origin: " + self.favoriteenemy.origin + " Falling back to breadcrumb system" ); - } - else - { - debug_print( "Zombie couldn't path to a player ( the other 'prefered' player might be ignored for encounters mode ). Falling back to breadcrumb system" ); - } - if ( !isDefined( self.favoriteenemy ) ) - { - self.zombie_path_timer = 0; - return; - } - else - { - self.favoriteenemy endon( "disconnect" ); - } - players = get_players(); - valid_player_num = 0; - i = 0; - while ( i < players.size ) - { - if ( is_player_valid( players[ i ], 1 ) ) - { - valid_player_num += 1; - } - i++; - } - if ( players.size > 1 ) - { - if ( isDefined( level._should_skip_ignore_player_logic ) && [[ level._should_skip_ignore_player_logic ]]() ) - { - self.zombie_path_timer = 0; - return; - } - if ( array_check_for_dupes( self.ignore_player, self.favoriteenemy ) ) - { - self.ignore_player[ self.ignore_player.size ] = self.favoriteenemy; - } - if ( self.ignore_player.size < valid_player_num ) - { - self.zombie_path_timer = 0; - return; - } - } - crumb_list = self.favoriteenemy.zombie_breadcrumbs; - bad_crumbs = []; - while ( 1 ) - { - if ( !is_player_valid( self.favoriteenemy, 1 ) ) - { - self.zombie_path_timer = 0; - return; - } - goal = zombie_pathing_get_breadcrumb( self.favoriteenemy.origin, crumb_list, bad_crumbs, randomint( 100 ) < 20 ); - if ( !isDefined( goal ) ) - { - debug_print( "Zombie exhausted breadcrumb search" ); - level.zombie_breadcrumb_failed++; - goal = self.favoriteenemy.spectator_respawn.origin; - } - debug_print( "Setting current breadcrumb to " + goal ); - self.zombie_path_timer += 100; - self setgoalpos( goal ); - self waittill( "bad_path" ); - debug_print( "Zombie couldn't path to breadcrumb at " + goal + " Finding next breadcrumb" ); - i = 0; - while ( i < crumb_list.size ) - { - if ( goal == crumb_list[ i ] ) - { - bad_crumbs[ bad_crumbs.size ] = i; - break; - } - else - { - i++; - } - } - } -} - -zombie_pathing_get_breadcrumb( origin, breadcrumbs, bad_crumbs, pick_random ) -{ -/# - assert( isDefined( origin ) ); -#/ -/# - assert( isDefined( breadcrumbs ) ); -#/ -/# - assert( isarray( breadcrumbs ) ); -#/ -/# - if ( pick_random ) - { - debug_print( "Finding random breadcrumb" ); -#/ - } - i = 0; - while ( i < breadcrumbs.size ) - { - if ( pick_random ) - { - crumb_index = randomint( breadcrumbs.size ); - } - else - { - crumb_index = i; - } - if ( crumb_is_bad( crumb_index, bad_crumbs ) ) - { - i++; - continue; - } - else - { - return breadcrumbs[ crumb_index ]; - } - i++; - } - return undefined; -} - -crumb_is_bad( crumb, bad_crumbs ) -{ - i = 0; - while ( i < bad_crumbs.size ) - { - if ( bad_crumbs[ i ] == crumb ) - { - return 1; - } - i++; - } - return 0; -} - -jitter_enemies_bad_breadcrumbs( start_crumb ) -{ - trace_distance = 35; - jitter_distance = 2; - index = start_crumb; - while ( isDefined( self.favoriteenemy.zombie_breadcrumbs[ index + 1 ] ) ) - { - current_crumb = self.favoriteenemy.zombie_breadcrumbs[ index ]; - next_crumb = self.favoriteenemy.zombie_breadcrumbs[ index + 1 ]; - angles = vectorToAngle( current_crumb - next_crumb ); - right = anglesToRight( angles ); - left = anglesToRight( angles + vectorScale( ( 0, 0, 0 ), 180 ) ); - dist_pos = current_crumb + vectorScale( right, trace_distance ); - trace = bullettrace( current_crumb, dist_pos, 1, undefined ); - vector = trace[ "position" ]; - while ( distance( vector, current_crumb ) < 17 ) - { - self.favoriteenemy.zombie_breadcrumbs[ index ] = current_crumb + vectorScale( left, jitter_distance ); - } - dist_pos = current_crumb + vectorScale( left, trace_distance ); - trace = bullettrace( current_crumb, dist_pos, 1, undefined ); - vector = trace[ "position" ]; - while ( distance( vector, current_crumb ) < 17 ) - { - self.favoriteenemy.zombie_breadcrumbs[ index ] = current_crumb + vectorScale( right, jitter_distance ); - } - index++; - } -} - -zombie_repath_notifier() -{ - note = 0; - notes = []; - i = 0; - while ( i < 4 ) - { - notes[ notes.size ] = "zombie_repath_notify_" + i; - i++; - } - while ( 1 ) - { - level notify( notes[ note ] ); - note = ( note + 1 ) % 4; - wait 0,05; - } -} - -zombie_follow_enemy() -{ - self endon( "death" ); - self endon( "zombie_acquire_enemy" ); - self endon( "bad_path" ); - level endon( "intermission" ); - if ( !isDefined( level.repathnotifierstarted ) ) - { - level.repathnotifierstarted = 1; - level thread zombie_repath_notifier(); - } - if ( !isDefined( self.zombie_repath_notify ) ) - { - self.zombie_repath_notify = "zombie_repath_notify_" + ( self getentitynumber() % 4 ); - } - while ( 1 ) - { - if ( !isDefined( self._skip_pathing_first_delay ) ) - { - level waittill( self.zombie_repath_notify ); - } - else - { - self._skip_pathing_first_delay = undefined; - } - if ( isDefined( self.ignore_enemyoverride ) && !self.ignore_enemyoverride && isDefined( self.enemyoverride ) && isDefined( self.enemyoverride[ 1 ] ) ) - { - if ( distancesquared( self.origin, self.enemyoverride[ 0 ] ) > 1 ) - { - self orientmode( "face motion" ); - } - else - { - self orientmode( "face point", self.enemyoverride[ 1 ].origin ); - } - self.ignoreall = 1; - goalpos = self.enemyoverride[ 0 ]; - if ( isDefined( level.adjust_enemyoverride_func ) ) - { - goalpos = self [[ level.adjust_enemyoverride_func ]](); - } - self setgoalpos( goalpos ); - } - else - { - if ( isDefined( self.favoriteenemy ) ) - { - self.ignoreall = 0; - self orientmode( "face default" ); - goalpos = self.favoriteenemy.origin; - if ( isDefined( level.enemy_location_override_func ) ) - { - goalpos = [[ level.enemy_location_override_func ]]( self, self.favoriteenemy ); - } - self setgoalpos( goalpos ); - if ( !isDefined( level.ignore_path_delays ) ) - { - distsq = distancesquared( self.origin, self.favoriteenemy.origin ); - if ( distsq > 10240000 ) - { - wait ( 2 + randomfloat( 1 ) ); - break; - } - else if ( distsq > 4840000 ) - { - wait ( 1 + randomfloat( 0,5 ) ); - break; - } - else - { - if ( distsq > 1440000 ) - { - wait ( 0,5 + randomfloat( 0,5 ) ); - } - } - } - } - } - if ( isDefined( level.inaccesible_player_func ) ) - { - self [[ level.inaccessible_player_func ]](); - } - } -} - -zombie_eye_glow() -{ - if ( !isDefined( self ) ) - { - return; - } - if ( !isDefined( self.no_eye_glow ) || !self.no_eye_glow ) - { - self setclientfield( "zombie_has_eyes", 1 ); - } -} - -zombie_eye_glow_stop() -{ - if ( !isDefined( self ) ) - { - return; - } - if ( !isDefined( self.no_eye_glow ) || !self.no_eye_glow ) - { - self setclientfield( "zombie_has_eyes", 0 ); - } -} - -zombie_history( msg ) -{ -/# - if ( !isDefined( self.zombie_history ) || self.zombie_history.size > 32 ) - { - self.zombie_history = []; - } - self.zombie_history[ self.zombie_history.size ] = msg; -#/ -} - -do_zombie_spawn() -{ - self endon( "death" ); - spots = []; - if ( isDefined( self._rise_spot ) ) - { - spot = self._rise_spot; - self thread do_zombie_rise( spot ); - return; - } - while ( isDefined( level.zombie_spawn_locations ) ) - { - i = 0; - while ( i < level.zombie_spawn_locations.size ) - { - spots[ spots.size ] = level.zombie_spawn_locations[ i ]; - i++; - } - } -/# - if ( getDvarInt( #"A8C231AA" ) ) - { - if ( isDefined( level.zombie_spawn_locations ) ) - { - player = get_players()[ 0 ]; - spots = []; - i = 0; - while ( i < level.zombie_spawn_locations.size ) - { - player_vec = vectornormalize( anglesToForward( player.angles ) ); - player_spawn = vectornormalize( level.zombie_spawn_locations[ i ].origin - player.origin ); - dot = vectordot( player_vec, player_spawn ); - if ( dot > 0,707 ) - { - spots[ spots.size ] = level.zombie_spawn_locations[ i ]; - debugstar( level.zombie_spawn_locations[ i ].origin, 1000, ( 0, 0, 0 ) ); - } - i++; - } - if ( spots.size <= 0 ) - { - spots[ spots.size ] = level.zombie_spawn_locations[ 0 ]; - iprintln( "no spawner in view" ); -#/ - } - } - } -/# - assert( spots.size > 0, "No spawn locations found" ); -#/ - spot = random( spots ); - if ( isDefined( spot.target ) ) - { - self.target = spot.target; - } - if ( isDefined( spot.zone_name ) ) - { - self.zone_name = spot.zone_name; - } - if ( isDefined( spot.script_parameters ) ) - { - self.script_parameters = spot.script_parameters; - } - tokens = strtok( spot.script_noteworthy, " " ); - _a3432 = tokens; - _k3432 = getFirstArrayKey( _a3432 ); - while ( isDefined( _k3432 ) ) - { - token = _a3432[ _k3432 ]; - if ( token == "riser_location" ) - { - self thread do_zombie_rise( spot ); - } - else if ( token == "faller_location" ) - { - self thread maps/mp/zombies/_zm_ai_faller::do_zombie_fall( spot ); - } - else if ( token == "dog_location" ) - { - } - else if ( token == "screecher_location" ) - { - } - else if ( token == "leaper_location" ) - { - } - else self.anchor = spawn( "script_origin", self.origin ); - self.anchor.angles = self.angles; - self linkto( self.anchor ); - if ( !isDefined( spot.angles ) ) - { - spot.angles = ( 0, 0, 0 ); - } - self ghost(); - self.anchor moveto( spot.origin, 0,05 ); - self.anchor waittill( "movedone" ); - target_org = get_desired_origin(); - if ( isDefined( target_org ) ) - { - anim_ang = vectorToAngle( target_org - self.origin ); - self.anchor rotateto( ( 0, anim_ang[ 1 ], 0 ), 0,05 ); - self.anchor waittill( "rotatedone" ); - } - if ( isDefined( level.zombie_spawn_fx ) ) - { - playfx( level.zombie_spawn_fx, spot.origin ); - } - self unlink(); - if ( isDefined( self.anchor ) ) - { - self.anchor delete(); - } - self show(); - self notify( "risen" ); - _k3432 = getNextArrayKey( _a3432, _k3432 ); - } -} - -do_zombie_rise( spot ) -{ - self endon( "death" ); - self.in_the_ground = 1; - self.anchor = spawn( "script_origin", self.origin ); - self.anchor.angles = self.angles; - self linkto( self.anchor ); - if ( !isDefined( spot.angles ) ) - { - spot.angles = ( 0, 0, 0 ); - } - anim_org = spot.origin; - anim_ang = spot.angles; - anim_org += ( 0, 0, 0 ); - self ghost(); - self.anchor moveto( anim_org, 0,05 ); - self.anchor waittill( "movedone" ); - target_org = get_desired_origin(); - if ( isDefined( target_org ) ) - { - anim_ang = vectorToAngle( target_org - self.origin ); - self.anchor rotateto( ( 0, anim_ang[ 1 ], 0 ), 0,05 ); - self.anchor waittill( "rotatedone" ); - } - self unlink(); - if ( isDefined( self.anchor ) ) - { - self.anchor delete(); - } - self thread hide_pop(); - level thread zombie_rise_death( self, spot ); - spot thread zombie_rise_fx( self ); - substate = 0; - if ( self.zombie_move_speed == "walk" ) - { - substate = randomint( 2 ); - } - else if ( self.zombie_move_speed == "run" ) - { - substate = 2; - } - else - { - if ( self.zombie_move_speed == "sprint" ) - { - substate = 3; - } - } - self orientmode( "face default" ); - self animscripted( self.origin, spot.angles, "zm_rise", substate ); - self maps/mp/animscripts/zm_shared::donotetracks( "rise_anim", ::handle_rise_notetracks, spot ); - self notify( "rise_anim_finished" ); - spot notify( "stop_zombie_rise_fx" ); - self.in_the_ground = 0; - self notify( "risen" ); -} - -hide_pop() -{ - self endon( "death" ); - wait 0,5; - if ( isDefined( self ) ) - { - self show(); - wait_network_frame(); - if ( isDefined( self ) ) - { - self.create_eyes = 1; - } - } -} - -handle_rise_notetracks( note, spot ) -{ - if ( note == "deathout" || note == "deathhigh" ) - { - self.zombie_rise_death_out = 1; - self notify( "zombie_rise_death_out" ); - wait 2; - spot notify( "stop_zombie_rise_fx" ); - } -} - -zombie_rise_death( zombie, spot ) -{ - zombie.zombie_rise_death_out = 0; - zombie endon( "rise_anim_finished" ); - while ( isDefined( zombie ) && isDefined( zombie.health ) && zombie.health > 1 ) - { - zombie waittill( "damage", amount ); - } - spot notify( "stop_zombie_rise_fx" ); - if ( isDefined( zombie ) ) - { - zombie.deathanim = zombie get_rise_death_anim(); - zombie stopanimscripted(); - } -} - -zombie_rise_fx( zombie ) -{ - if ( isDefined( level.riser_fx_on_client ) && !level.riser_fx_on_client ) - { - self thread zombie_rise_dust_fx( zombie ); - self thread zombie_rise_burst_fx( zombie ); - } - else - { - self thread zombie_rise_burst_fx( zombie ); - } - zombie endon( "death" ); - self endon( "stop_zombie_rise_fx" ); - wait 1; - if ( zombie.zombie_move_speed != "sprint" ) - { - wait 1; - } -} - -zombie_rise_burst_fx( zombie ) -{ - self endon( "stop_zombie_rise_fx" ); - self endon( "rise_anim_finished" ); - if ( isDefined( self.script_string ) && self.script_string == "in_water" && isDefined( level._no_water_risers ) && !level._no_water_risers ) - { - zombie setclientfield( "zombie_riser_fx_water", 1 ); - } - else - { - if ( isDefined( self.script_string ) && self.script_string == "in_snow" ) - { - zombie setclientfield( "zombie_riser_fx", 1 ); - return; - } - else - { - if ( isDefined( zombie.zone_name ) && isDefined( level.zones[ zombie.zone_name ] ) ) - { - low_g_zones = getentarray( zombie.zone_name, "targetname" ); - if ( isDefined( low_g_zones[ 0 ].script_string ) && low_g_zones[ 0 ].script_string == "lowgravity" ) - { - zombie setclientfield( "zombie_riser_fx_lowg", 1 ); - } - else - { - zombie setclientfield( "zombie_riser_fx", 1 ); - } - return; - } - else - { - zombie setclientfield( "zombie_riser_fx", 1 ); - } - } - } -} - -zombie_rise_dust_fx( zombie ) -{ - dust_tag = "J_SpineUpper"; - self endon( "stop_zombie_rise_dust_fx" ); - self thread stop_zombie_rise_dust_fx( zombie ); - wait 2; - dust_time = 5,5; - dust_interval = 0,3; - if ( isDefined( self.script_string ) && self.script_string == "in_water" ) - { - t = 0; - while ( t < dust_time ) - { - playfxontag( level._effect[ "rise_dust_water" ], zombie, dust_tag ); - wait dust_interval; - t += dust_interval; - } - } - else if ( isDefined( self.script_string ) && self.script_string == "in_snow" ) - { - t = 0; - while ( t < dust_time ) - { - playfxontag( level._effect[ "rise_dust_snow" ], zombie, dust_tag ); - wait dust_interval; - t += dust_interval; - } - } - else t = 0; - while ( t < dust_time ) - { - playfxontag( level._effect[ "rise_dust" ], zombie, dust_tag ); - wait dust_interval; - t += dust_interval; - } -} - -stop_zombie_rise_dust_fx( zombie ) -{ - zombie waittill( "death" ); - self notify( "stop_zombie_rise_dust_fx" ); -} - -get_rise_death_anim() -{ - if ( self.zombie_rise_death_out ) - { - return "zm_rise_death_out"; - } - self.noragdoll = 1; - self.nodeathragdoll = 1; - return "zm_rise_death_in"; -} - -zombie_tesla_head_gib() -{ - self endon( "death" ); - if ( self.animname == "quad_zombie" ) - { - return; - } - if ( randomint( 100 ) < level.zombie_vars[ "tesla_head_gib_chance" ] ) - { - wait randomfloatrange( 0,53, 1 ); - self zombie_head_gib(); - } - else - { - network_safe_play_fx_on_tag( "tesla_death_fx", 2, level._effect[ "tesla_shock_eyes" ], self, "J_Eyeball_LE" ); - } -} - -play_ambient_zombie_vocals() -{ - self endon( "death" ); - if ( self.animname == "monkey_zombie" || isDefined( self.is_avogadro ) && self.is_avogadro ) - { - return; - } - while ( 1 ) - { - type = "ambient"; - float = 2; - while ( !isDefined( self.zombie_move_speed ) ) - { - wait 0,5; - } - switch( self.zombie_move_speed ) - { - case "walk": - type = "ambient"; - float = 4; - break; - case "run": - type = "sprint"; - float = 4; - break; - case "sprint": - type = "sprint"; - float = 4; - break; - } - if ( self.animname == "zombie" && !self.has_legs ) - { - type = "crawler"; - } - else - { - if ( self.animname == "thief_zombie" || self.animname == "leaper_zombie" ) - { - float = 1,2; - } - } - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( type, self.animname ); - wait randomfloatrange( 1, float ); - } -} - -zombie_complete_emerging_into_playable_area() -{ - self.completed_emerging_into_playable_area = 1; - self notify( "completed_emerging_into_playable_area" ); - self.no_powerups = 0; - self thread zombie_free_cam_allowed(); -} - -zombie_free_cam_allowed() -{ - self endon( "death" ); - wait 1,5; - self setfreecameralockonallowed( 1 ); -} - -check_for_pers_headshot( time_of_death, zombie ) -{ - if ( self.pers[ "last_headshot_kill_time" ] == time_of_death ) - { - self.pers[ "zombies_multikilled" ]++; - } - else - { - self.pers[ "zombies_multikilled" ] = 1; - } - self.pers[ "last_headshot_kill_time" ] = time_of_death; - if ( self.pers[ "zombies_multikilled" ] == 2 ) - { - if ( isDefined( zombie ) ) - { - self.upgrade_fx_origin = zombie.origin; - } - self maps/mp/zombies/_zm_stats::increment_client_stat( "pers_multikill_headshots", 0 ); - self.non_headshot_kill_counter = 0; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_stats.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_stats.gsc deleted file mode 100644 index e77ef4a..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_stats.gsc +++ /dev/null @@ -1,768 +0,0 @@ -#include maps/mp/gametypes_zm/_globallogic; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - level.player_stats_init = ::player_stats_init; - level.add_client_stat = ::add_client_stat; - level.increment_client_stat = ::increment_client_stat; - level.track_gibs = ::do_stats_for_gibs; -} - -player_stats_init() -{ - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "kills", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "suicides", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "downs", 0 ); - self.downs = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "downs" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "revives", 0 ); - self.revives = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "revives" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "perks_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "headshots", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "gibs", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "head_gibs", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "right_arm_gibs", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "left_arm_gibs", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "right_leg_gibs", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "left_leg_gibs", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "melee_kills", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "grenade_kills", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "doors_purchased", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "distance_traveled", 0 ); - self.distance_traveled = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "distance_traveled" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "total_shots", 0 ); - self.total_shots = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "total_shots" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "hits", 0 ); - self.hits = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "hits" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "deaths", 0 ); - self.deaths = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "deaths" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "boards", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "wins", 0 ); - self.totalwins = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "totalwins" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "losses", 0 ); - self.totallosses = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "totallosses" ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "failed_revives", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sacrifices", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "failed_sacrifices", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "drops", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "nuke_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "insta_kill_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "full_ammo_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "double_points_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "meat_stink_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "carpenter_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "fire_sale_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "use_magicbox", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "grabbed_from_magicbox", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "use_pap", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pap_weapon_grabbed", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pap_weapon_not_grabbed", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_armorvest_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_quickrevive_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_rof_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_fastreload_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_flakjacket_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_additionalprimaryweapon_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_longersprint_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_deadshot_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_scavenger_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_finalstand_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_grenadepulldeath_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "specialty_nomotionsensor" + "_drank", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "claymores_planted", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "claymores_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "ballistic_knives_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "wallbuy_weapons_purchased", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "ammo_purchased", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "upgraded_ammo_purchased", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "power_turnedon", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "power_turnedoff", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "planted_buildables_pickedup", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "buildables_built", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "time_played_total", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "weighted_rounds_played", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "contaminations_received", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "contaminations_given", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zdogs_killed", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zdog_rounds_finished", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zdog_rounds_lost", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "killed_by_zdog", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "screecher_minigames_won", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "screecher_minigames_lost", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "screechers_killed", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "screecher_teleporters_used", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "avogadro_defeated", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "killed_by_avogadro", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "cheat_too_many_weapons", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "cheat_out_of_playable", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "cheat_too_friendly", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "cheat_total", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_boarding", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_revivenoperk", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_multikill_headshots", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_cash_back_bought", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_cash_back_prone", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_insta_kill", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_insta_kill_stabs", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_jugg", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_jugg_downgrade_count", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_carpenter", 0, 1 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "pers_carpenter_downgrade_count", 0, 1 ); - self.successful_revives = 0; - self.failed_revives = 0; - self.failed_cash_back_prones = 0; - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "score", 0 ); - if ( level.resetplayerscoreeveryround ) - { - self.pers[ "score" ] = 0; - } - self.pers[ "score" ] = level.player_starting_points; - self.score = self.pers[ "score" ]; - self incrementplayerstat( "score", self.score ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zteam", 0 ); - if ( isDefined( level.level_specific_stats_init ) ) - { - [[ level.level_specific_stats_init ]](); - } - if ( !isDefined( self.stats_this_frame ) ) - { - self.pers_upgrade_force_test = 1; - self.stats_this_frame = []; - self.pers_upgrades_awarded = []; - } - self.pers[ "last_headshot_kill_time" ] = getTime(); - self.pers[ "zombies_multikilled" ] = 0; - self.non_headshot_kill_counter = 0; -} - -update_players_stats_at_match_end( players ) -{ - game_mode = getDvar( "ui_gametype" ); - game_mode_group = level.scr_zm_ui_gametype_group; - map_location_name = level.scr_zm_map_start_location; - if ( map_location_name == "" ) - { - map_location_name = "default"; - } - if ( isDefined( level.gamemodulewinningteam ) ) - { - if ( level.gamemodulewinningteam == "B" ) - { - matchrecorderincrementheaderstat( "winningTeam", 1 ); - } - else - { - if ( level.gamemodulewinningteam == "A" ) - { - matchrecorderincrementheaderstat( "winningTeam", 2 ); - } - } - } - recordmatchsummaryzombieendgamedata( game_mode, game_mode_group, map_location_name, level.round_number ); - newtime = getTime(); - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - if ( player is_bot() ) - { - i++; - continue; - } - else - { - distance = player get_stat_distance_traveled(); - player addplayerstatwithgametype( "distance_traveled", distance ); - player add_location_gametype_stat( level.scr_zm_map_start_location, level.scr_zm_ui_gametype, "time_played_total", player.pers[ "time_played_total" ] ); - recordplayermatchend( player ); - recordplayerstats( player, "presentAtEnd", 1 ); - player maps/mp/zombies/_zm_weapons::updateweapontimingszm( newtime ); - if ( isDefined( level._game_module_stat_update_func ) ) - { - player [[ level._game_module_stat_update_func ]](); - } - old_high_score = player get_game_mode_stat( game_mode, "score" ); - if ( player.score_total > old_high_score ) - { - player set_game_mode_stat( game_mode, "score", player.score_total ); - } - if ( gamemodeismode( level.gamemode_public_match ) ) - { - player gamehistoryfinishmatch( 4, 0, 0, 0, 0, 0 ); - if ( isDefined( player.pers[ "matchesPlayedStatsTracked" ] ) ) - { - gamemode = maps/mp/gametypes_zm/_globallogic::getcurrentgamemode(); - player maps/mp/gametypes_zm/_globallogic::incrementmatchcompletionstat( gamemode, "played", "completed" ); - if ( isDefined( player.pers[ "matchesHostedStatsTracked" ] ) ) - { - player maps/mp/gametypes_zm/_globallogic::incrementmatchcompletionstat( gamemode, "hosted", "completed" ); - } - } - } - if ( !isDefined( player.pers[ "previous_distance_traveled" ] ) ) - { - player.pers[ "previous_distance_traveled" ] = 0; - } - distancethisround = int( player.pers[ "distance_traveled" ] - player.pers[ "previous_distance_traveled" ] ); - player.pers[ "previous_distance_traveled" ] = player.pers[ "distance_traveled" ]; - player incrementplayerstat( "distance_traveled", distancethisround ); - } - i++; - } -} - -update_playing_utc_time( matchendutctime ) -{ - current_days = int( matchendutctime / 86400 ); - last_days = self get_global_stat( "TIMESTAMPLASTDAY1" ); - last_days = int( last_days / 86400 ); - diff_days = current_days - last_days; - timestamp_name = ""; - if ( diff_days > 0 ) - { - i = 5; - while ( i > diff_days ) - { - timestamp_name = "TIMESTAMPLASTDAY" + ( i - diff_days ); - timestamp_name_to = "TIMESTAMPLASTDAY" + i; - timestamp_value = self get_global_stat( timestamp_name ); - self set_global_stat( timestamp_name_to, timestamp_value ); - i--; - - } - i = 2; - while ( i <= diff_days && i < 6 ) - { - timestamp_name = "TIMESTAMPLASTDAY" + i; - self set_global_stat( timestamp_name, 0 ); - i++; - } - self set_global_stat( "TIMESTAMPLASTDAY1", matchendutctime ); - } -} - -survival_classic_custom_stat_update() -{ -} - -grief_custom_stat_update() -{ -} - -add_game_mode_group_stat( game_mode, stat_name, value ) -{ - self adddstat( "PlayerStatsByGameTypeGroup", game_mode, stat_name, "statValue", value ); -} - -set_game_mode_group_stat( game_mode, stat_name, value ) -{ - self setdstat( "PlayerStatsByGameTypeGroup", game_mode, stat_name, "statValue", value ); -} - -get_game_mode_group_stat( game_mode, stat_name ) -{ - return self getdstat( "PlayerStatsByGameTypeGroup", game_mode, stat_name, "statValue" ); -} - -add_game_mode_stat( game_mode, stat_name, value ) -{ - self adddstat( "PlayerStatsByGameType", game_mode, stat_name, "statValue", value ); -} - -set_game_mode_stat( game_mode, stat_name, value ) -{ - self setdstat( "PlayerStatsByGameType", game_mode, stat_name, "statValue", value ); -} - -get_game_mode_stat( game_mode, stat_name ) -{ - return self getdstat( "PlayerStatsByGameType", game_mode, stat_name, "statValue" ); -} - -get_global_stat( stat_name ) -{ - return self getdstat( "PlayerStatsList", stat_name, "StatValue" ); -} - -set_global_stat( stat_name, value ) -{ - self setdstat( "PlayerStatsList", stat_name, "StatValue", value ); -} - -add_global_stat( stat_name, value ) -{ - self adddstat( "PlayerStatsList", stat_name, "StatValue", value ); -} - -get_map_stat( stat_name ) -{ - return self getdstat( "PlayerStatsByMap", level.script, stat_name ); -} - -set_map_stat( stat_name, value ) -{ - self setdstat( "PlayerStatsByMap", level.script, stat_name, value ); -} - -add_map_stat( stat_name, value ) -{ - self adddstat( "PlayerStatsByMap", level.script, stat_name, value ); -} - -get_location_gametype_stat( start_location, game_type, stat_name ) -{ - return self getdstat( "PlayerStatsByStartLocation", start_location, "startLocationGameTypeStats", game_type, "stats", stat_name, "StatValue" ); -} - -set_location_gametype_stat( start_location, game_type, stat_name, value ) -{ - self setdstat( "PlayerStatsByStartLocation", start_location, "startLocationGameTypeStats", game_type, "stats", stat_name, "StatValue", value ); -} - -add_location_gametype_stat( start_location, game_type, stat_name, value ) -{ - self adddstat( "PlayerStatsByStartLocation", start_location, "startLocationGameTypeStats", game_type, "stats", stat_name, "StatValue", value ); -} - -get_map_weaponlocker_stat( stat_name ) -{ - return self getdstat( "PlayerStatsByMap", level.script, "weaponLocker", stat_name ); -} - -set_map_weaponlocker_stat( stat_name, value ) -{ - if ( isDefined( value ) ) - { - self setdstat( "PlayerStatsByMap", level.script, "weaponLocker", stat_name, value ); - } - else - { - self setdstat( "PlayerStatsByMap", level.script, "weaponLocker", stat_name, 0 ); - } -} - -add_map_weaponlocker_stat( stat_name, value ) -{ - self adddstat( "PlayerStatsByMap", level.script, "weaponLocker", stat_name, value ); -} - -has_stored_weapondata() -{ - storedweapon = self get_map_weaponlocker_stat( "name" ); - if ( isDefined( storedweapon ) && isstring( storedweapon ) || storedweapon == "" && isint( storedweapon ) && storedweapon == 0 ) - { - return 0; - } - return 1; -} - -get_stored_weapondata() -{ - if ( self has_stored_weapondata() ) - { - weapondata = []; - weapondata[ "name" ] = self get_map_weaponlocker_stat( "name" ); - weapondata[ "lh_clip" ] = self get_map_weaponlocker_stat( "lh_clip" ); - weapondata[ "clip" ] = self get_map_weaponlocker_stat( "clip" ); - weapondata[ "stock" ] = self get_map_weaponlocker_stat( "stock" ); - weapondata[ "alt_clip" ] = self get_map_weaponlocker_stat( "alt_clip" ); - weapondata[ "alt_stock" ] = self get_map_weaponlocker_stat( "alt_stock" ); - return weapondata; - } - return undefined; -} - -clear_stored_weapondata() -{ - self set_map_weaponlocker_stat( "name", "" ); - self set_map_weaponlocker_stat( "lh_clip", 0 ); - self set_map_weaponlocker_stat( "clip", 0 ); - self set_map_weaponlocker_stat( "stock", 0 ); - self set_map_weaponlocker_stat( "alt_clip", 0 ); - self set_map_weaponlocker_stat( "alt_stock", 0 ); -} - -set_stored_weapondata( weapondata ) -{ - self set_map_weaponlocker_stat( "name", weapondata[ "name" ] ); - self set_map_weaponlocker_stat( "lh_clip", weapondata[ "lh_clip" ] ); - self set_map_weaponlocker_stat( "clip", weapondata[ "clip" ] ); - self set_map_weaponlocker_stat( "stock", weapondata[ "stock" ] ); - self set_map_weaponlocker_stat( "alt_clip", weapondata[ "alt_clip" ] ); - self set_map_weaponlocker_stat( "alt_stock", weapondata[ "alt_stock" ] ); -} - -add_client_stat( stat_name, stat_value, include_gametype ) -{ - if ( getDvar( "ui_zm_mapstartlocation" ) == "" ) - { - return; - } - if ( !isDefined( include_gametype ) ) - { - include_gametype = 1; - } - self maps/mp/gametypes_zm/_globallogic_score::incpersstat( stat_name, stat_value, 0, include_gametype ); - self.stats_this_frame[ stat_name ] = 1; -} - -increment_player_stat( stat_name ) -{ - if ( getDvar( "ui_zm_mapstartlocation" ) == "" ) - { - return; - } - self incrementplayerstat( stat_name, 1 ); -} - -increment_root_stat( stat_name, stat_value ) -{ - self adddstat( stat_name, stat_value ); -} - -increment_client_stat( stat_name, include_gametype ) -{ - add_client_stat( stat_name, 1, include_gametype ); -} - -zero_client_stat( stat_name, include_gametype ) -{ - current_stat_count = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( stat_name ); - self maps/mp/gametypes_zm/_globallogic_score::incpersstat( stat_name, current_stat_count * -1, 0, include_gametype ); - self.stats_this_frame[ stat_name ] = 1; -} - -increment_map_cheat_stat( stat_name ) -{ - self adddstat( "PlayerStatsByMap", level.script, "cheats", stat_name, 1 ); -} - -get_stat_distance_traveled() -{ - miles = int( self.pers[ "distance_traveled" ] / 63360 ); - remainder = ( self.pers[ "distance_traveled" ] / 63360 ) - miles; - if ( miles < 1 && remainder < 0,5 ) - { - miles = 1; - } - else - { - if ( remainder >= 0,5 ) - { - miles++; - } - } - return miles; -} - -get_stat_round_number() -{ - return level.round_number; -} - -get_stat_combined_rank_value_survival_classic() -{ - rounds = get_stat_round_number(); - kills = self.pers[ "kills" ]; - if ( rounds > 99 ) - { - rounds = 99; - } - result = ( rounds * 10000000 ) + kills; - return result; -} - -get_stat_combined_rank_value_grief() -{ - wins = self.pers[ "wins" ]; - losses = self.pers[ "losses" ]; - if ( wins > 9999 ) - { - wins = 9999; - } - if ( losses > 9999 ) - { - losses = 9999; - } - losses_value = 9999 - losses; - result = ( wins * 10000 ) + losses_value; - return result; -} - -update_global_counters_on_match_end() -{ - deaths = 0; - kills = 0; - melee_kills = 0; - headshots = 0; - suicides = 0; - downs = 0; - revives = 0; - perks_drank = 0; - gibs = 0; - doors_purchased = 0; - distance_traveled = 0; - total_shots = 0; - boards = 0; - sacrifices = 0; - drops = 0; - nuke_pickedup = 0; - insta_kill_pickedup = 0; - full_ammo_pickedup = 0; - double_points_pickedup = 0; - meat_stink_pickedup = 0; - carpenter_pickedup = 0; - fire_sale_pickedup = 0; - use_magicbox = 0; - grabbed_from_magicbox = 0; - use_pap = 0; - pap_weapon_grabbed = 0; - specialty_armorvest_drank = 0; - specialty_quickrevive_drank = 0; - specialty_fastreload_drank = 0; - specialty_longersprint_drank = 0; - specialty_scavenger_drank = 0; - specialty_rof_drank = 0; - specialty_deadshot_drank = 0; - specialty_flakjacket_drank = 0; - specialty_additionalprimaryweapon_drank = 0; - specialty_finalstand_drank = 0; - specialty_grenadepulldeath_drank = 0; - perk_vulture_drank = 0; - claymores_planted = 0; - claymores_pickedup = 0; - ballistic_knives_pickedup = 0; - wallbuy_weapons_purchased = 0; - power_turnedon = 0; - power_turnedoff = 0; - planted_buildables_pickedup = 0; - ammo_purchased = 0; - upgraded_ammo_purchased = 0; - buildables_built = 0; - time_played = 0; - contaminations_received = 0; - contaminations_given = 0; - cheat_too_many_weapons = 0; - cheat_out_of_playable_area = 0; - cheat_too_friendly = 0; - cheat_total = 0; - players = get_players(); - _a631 = players; - _k631 = getFirstArrayKey( _a631 ); - while ( isDefined( _k631 ) ) - { - player = _a631[ _k631 ]; - deaths += player.pers[ "deaths" ]; - kills += player.pers[ "kills" ]; - headshots += player.pers[ "headshots" ]; - suicides += player.pers[ "suicides" ]; - melee_kills += player.pers[ "melee_kills" ]; - downs += player.pers[ "downs" ]; - revives += player.pers[ "revives" ]; - perks_drank += player.pers[ "perks_drank" ]; - specialty_armorvest_drank += player.pers[ "specialty_armorvest_drank" ]; - specialty_quickrevive_drank += player.pers[ "specialty_quickrevive_drank" ]; - specialty_fastreload_drank += player.pers[ "specialty_fastreload_drank" ]; - specialty_longersprint_drank += player.pers[ "specialty_longersprint_drank" ]; - specialty_rof_drank += player.pers[ "specialty_rof_drank" ]; - specialty_deadshot_drank += player.pers[ "specialty_deadshot_drank" ]; - specialty_scavenger_drank += player.pers[ "specialty_scavenger_drank" ]; - specialty_flakjacket_drank += player.pers[ "specialty_flakjacket_drank" ]; - specialty_additionalprimaryweapon_drank += player.pers[ "specialty_additionalprimaryweapon_drank" ]; - specialty_finalstand_drank += player.pers[ "specialty_finalstand_drank" ]; - specialty_grenadepulldeath_drank += player.pers[ "specialty_grenadepulldeath_drank" ]; - perk_vulture_drank += player.pers[ "specialty_nomotionsensor" + "_drank" ]; - gibs += player.pers[ "gibs" ]; - doors_purchased += player.pers[ "doors_purchased" ]; - distance_traveled += player get_stat_distance_traveled(); - boards += player.pers[ "boards" ]; - sacrifices += player.pers[ "sacrifices" ]; - drops += player.pers[ "drops" ]; - nuke_pickedup += player.pers[ "nuke_pickedup" ]; - insta_kill_pickedup += player.pers[ "insta_kill_pickedup" ]; - full_ammo_pickedup += player.pers[ "full_ammo_pickedup" ]; - double_points_pickedup += player.pers[ "double_points_pickedup" ]; - meat_stink_pickedup += player.pers[ "meat_stink_pickedup" ]; - carpenter_pickedup += player.pers[ "carpenter_pickedup" ]; - fire_sale_pickedup += player.pers[ "fire_sale_pickedup" ]; - use_magicbox += player.pers[ "use_magicbox" ]; - grabbed_from_magicbox += player.pers[ "grabbed_from_magicbox" ]; - use_pap += player.pers[ "use_pap" ]; - pap_weapon_grabbed += player.pers[ "pap_weapon_grabbed" ]; - claymores_planted += player.pers[ "claymores_planted" ]; - claymores_pickedup += player.pers[ "claymores_pickedup" ]; - ballistic_knives_pickedup += player.pers[ "ballistic_knives_pickedup" ]; - wallbuy_weapons_purchased += player.pers[ "wallbuy_weapons_purchased" ]; - power_turnedon += player.pers[ "power_turnedon" ]; - power_turnedoff += player.pers[ "power_turnedoff" ]; - planted_buildables_pickedup += player.pers[ "planted_buildables_pickedup" ]; - buildables_built += player.pers[ "buildables_built" ]; - ammo_purchased += player.pers[ "ammo_purchased" ]; - upgraded_ammo_purchased += player.pers[ "upgraded_ammo_purchased" ]; - total_shots += player.total_shots; - time_played += player.pers[ "time_played_total" ]; - contaminations_received += player.pers[ "contaminations_received" ]; - contaminations_given += player.pers[ "contaminations_given" ]; - cheat_too_many_weapons += player.pers[ "cheat_too_many_weapons" ]; - cheat_out_of_playable_area += player.pers[ "cheat_out_of_playable" ]; - cheat_too_friendly += player.pers[ "cheat_too_friendly" ]; - cheat_total += player.pers[ "cheat_total" ]; - _k631 = getNextArrayKey( _a631, _k631 ); - } - game_mode = getDvar( "ui_gametype" ); - incrementcounter( "global_zm_" + game_mode, 1 ); - incrementcounter( "global_zm_games", 1 ); - if ( game_mode == "zclassic" || level.script == "zm_nuked" ) - { - incrementcounter( "global_zm_games_" + level.script, 1 ); - } - incrementcounter( "global_zm_killed", level.global_zombies_killed ); - incrementcounter( "global_zm_killed_by_players", kills ); - incrementcounter( "global_zm_killed_by_traps", level.zombie_trap_killed_count ); - spacer = ""; - if ( level.round_number < 10 ) - { - spacer = "0"; - } - incrementcounter( "global_zm_players_reached_round_" + spacer + level.round_number, players.size ); - incrementcounter( "global_zm_headshots", headshots ); - incrementcounter( "global_zm_suicides", suicides ); - incrementcounter( "global_zm_melee_kills", melee_kills ); - incrementcounter( "global_zm_downs", downs ); - incrementcounter( "global_zm_deaths", deaths ); - incrementcounter( "global_zm_revives", revives ); - incrementcounter( "global_zm_perks_drank", perks_drank ); - incrementcounter( "global_zm_specialty_armorvest_drank", specialty_armorvest_drank ); - incrementcounter( "global_zm_specialty_quickrevive_drank", specialty_quickrevive_drank ); - incrementcounter( "global_zm_specialty_fastreload_drank", specialty_fastreload_drank ); - incrementcounter( "global_zm_specialty_longersprint_drank", specialty_longersprint_drank ); - incrementcounter( "global_zm_specialty_rof_drank", specialty_rof_drank ); - incrementcounter( "global_zm_specialty_deadshot_drank", specialty_deadshot_drank ); - incrementcounter( "global_zm_specialty_scavenger_drank", specialty_scavenger_drank ); - incrementcounter( "global_zm_specialty_flakjacket_drank", specialty_flakjacket_drank ); - incrementcounter( "global_zm_specialty_additionalprimaryweapon_drank", specialty_additionalprimaryweapon_drank ); - incrementcounter( "global_zm_specialty_finalstand_drank", specialty_finalstand_drank ); - incrementcounter( "global_zm_specialty_grenadepulldeath_drank", specialty_grenadepulldeath_drank ); - incrementcounter( "global_zm_" + "specialty_nomotionsensor", perk_vulture_drank ); - incrementcounter( "global_zm_gibs", gibs ); - incrementcounter( "global_zm_distance_traveled", int( distance_traveled ) ); - incrementcounter( "global_zm_doors_purchased", doors_purchased ); - incrementcounter( "global_zm_boards", boards ); - incrementcounter( "global_zm_sacrifices", sacrifices ); - incrementcounter( "global_zm_drops", drops ); - incrementcounter( "global_zm_total_nuke_pickedup", nuke_pickedup ); - incrementcounter( "global_zm_total_insta_kill_pickedup", insta_kill_pickedup ); - incrementcounter( "global_zm_total_full_ammo_pickedup", full_ammo_pickedup ); - incrementcounter( "global_zm_total_double_points_pickedup", double_points_pickedup ); - incrementcounter( "global_zm_total_meat_stink_pickedup", double_points_pickedup ); - incrementcounter( "global_zm_total_carpenter_pickedup", carpenter_pickedup ); - incrementcounter( "global_zm_total_fire_sale_pickedup", fire_sale_pickedup ); - incrementcounter( "global_zm_use_magicbox", use_magicbox ); - incrementcounter( "global_zm_grabbed_from_magicbox", grabbed_from_magicbox ); - incrementcounter( "global_zm_use_pap", use_pap ); - incrementcounter( "global_zm_pap_weapon_grabbed", pap_weapon_grabbed ); - incrementcounter( "global_zm_claymores_planted", claymores_planted ); - incrementcounter( "global_zm_claymores_pickedup", claymores_pickedup ); - incrementcounter( "global_zm_ballistic_knives_pickedup", ballistic_knives_pickedup ); - incrementcounter( "global_zm_wallbuy_weapons_purchased", wallbuy_weapons_purchased ); - incrementcounter( "global_zm_power_turnedon", power_turnedon ); - incrementcounter( "global_zm_power_turnedoff", power_turnedoff ); - incrementcounter( "global_zm_planted_buildables_pickedup", planted_buildables_pickedup ); - incrementcounter( "global_zm_buildables_built", buildables_built ); - incrementcounter( "global_zm_ammo_purchased", ammo_purchased ); - incrementcounter( "global_zm_upgraded_ammo_purchased", upgraded_ammo_purchased ); - incrementcounter( "global_zm_total_shots", total_shots ); - incrementcounter( "global_zm_time_played", time_played ); - incrementcounter( "global_zm_contaminations_received", contaminations_received ); - incrementcounter( "global_zm_contaminations_given", contaminations_given ); - incrementcounter( "global_zm_cheat_players_too_friendly", cheat_too_friendly ); - incrementcounter( "global_zm_cheats_cheat_too_many_weapons", cheat_too_many_weapons ); - incrementcounter( "global_zm_cheats_out_of_playable", cheat_out_of_playable_area ); - incrementcounter( "global_zm_total_cheats", cheat_total ); -} - -get_specific_stat( stat_category, stat_name ) -{ - return self getdstat( stat_category, stat_name, "StatValue" ); -} - -do_stats_for_gibs( zombie, limb_tags_array ) -{ - while ( isDefined( zombie ) && isDefined( zombie.attacker ) && isplayer( zombie.attacker ) ) - { - _a780 = limb_tags_array; - _k780 = getFirstArrayKey( _a780 ); - while ( isDefined( _k780 ) ) - { - limb = _a780[ _k780 ]; - stat_name = undefined; - if ( limb == level._zombie_gib_piece_index_right_arm ) - { - stat_name = "right_arm_gibs"; - } - else if ( limb == level._zombie_gib_piece_index_left_arm ) - { - stat_name = "left_arm_gibs"; - } - else if ( limb == level._zombie_gib_piece_index_right_leg ) - { - stat_name = "right_leg_gibs"; - } - else if ( limb == level._zombie_gib_piece_index_left_leg ) - { - stat_name = "left_leg_gibs"; - } - else - { - if ( limb == level._zombie_gib_piece_index_head ) - { - stat_name = "head_gibs"; - } - } - if ( !isDefined( stat_name ) ) - { - } - else - { - zombie.attacker increment_client_stat( stat_name, 0 ); - zombie.attacker increment_client_stat( "gibs" ); - } - _k780 = getNextArrayKey( _a780, _k780 ); - } - } -} - -initializematchstats() -{ - if ( !level.onlinegame || !gamemodeismode( level.gamemode_public_match ) ) - { - return; - } - self.pers[ "lastHighestScore" ] = self getdstat( "HighestStats", "highest_score" ); - currgametype = level.gametype; - self gamehistorystartmatch( getgametypeenumfromname( currgametype, 0 ) ); -} - -adjustrecentstats() -{ -/# - if ( getDvarInt( "scr_writeConfigStrings" ) == 1 || getDvarInt( "scr_hostmigrationtest" ) == 1 ) - { - return; -#/ - } - initializematchstats(); -} - -uploadstatssoon() -{ - self notify( "upload_stats_soon" ); - self endon( "upload_stats_soon" ); - self endon( "disconnect" ); - wait 1; - uploadstats( self ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_timer.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_timer.gsc deleted file mode 100644 index 81956ab..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_timer.gsc +++ /dev/null @@ -1,79 +0,0 @@ -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - precacheshader( "zombie_stopwatchneedle" ); - precacheshader( "zombie_stopwatch" ); - precacheshader( "zombie_stopwatch_glass" ); - if ( !isDefined( level.stopwatch_length_width ) ) - { - level.stopwatch_length_width = 96; - } -} - -start_timer( time, stop_notify ) -{ - self notify( "stop_prev_timer" ); - self endon( "stop_prev_timer" ); - if ( !isDefined( self.stopwatch_elem ) ) - { - self.stopwatch_elem = newclienthudelem( self ); - self.stopwatch_elem.horzalign = "left"; - self.stopwatch_elem.vertalign = "top"; - self.stopwatch_elem.alignx = "left"; - self.stopwatch_elem.aligny = "top"; - self.stopwatch_elem.x = 10; - self.stopwatch_elem.alpha = 0; - self.stopwatch_elem.sort = 2; - self.stopwatch_elem_glass = newclienthudelem( self ); - self.stopwatch_elem_glass.horzalign = "left"; - self.stopwatch_elem_glass.vertalign = "top"; - self.stopwatch_elem_glass.alignx = "left"; - self.stopwatch_elem_glass.aligny = "top"; - self.stopwatch_elem_glass.x = 10; - self.stopwatch_elem_glass.alpha = 0; - self.stopwatch_elem_glass.sort = 3; - self.stopwatch_elem_glass setshader( "zombie_stopwatch_glass", level.stopwatch_length_width, level.stopwatch_length_width ); - } - self thread update_hud_position(); - if ( isDefined( stop_notify ) ) - { - self thread wait_for_stop_notify( stop_notify ); - } - if ( time > 60 ) - { - time = 0; - } - self.stopwatch_elem setclock( time, 60, "zombie_stopwatch", level.stopwatch_length_width, level.stopwatch_length_width ); - self.stopwatch_elem.alpha = 1; - self.stopwatch_elem_glass.alpha = 1; - wait time; - self notify( "countdown_finished" ); - wait 1; - self.stopwatch_elem.alpha = 0; - self.stopwatch_elem_glass.alpha = 0; -} - -wait_for_stop_notify( stop_notify ) -{ - self endon( "stop_prev_timer" ); - self endon( "countdown_finished" ); - self waittill( stop_notify ); - self.stopwatch_elem.alpha = 0; - self.stopwatch_elem_glass.alpha = 0; -} - -update_hud_position() -{ - self endon( "disconnect" ); - self endon( "stop_prev_timer" ); - self endon( "countdown_finished" ); - while ( 1 ) - { - self.stopwatch_elem.y = 20; - self.stopwatch_elem_glass.y = 20; - wait 0,05; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_tombstone.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_tombstone.gsc deleted file mode 100644 index af0ac9c..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_tombstone.gsc +++ /dev/null @@ -1,479 +0,0 @@ -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_weap_cymbal_monkey; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - onplayerconnect_callback( ::tombstone_player_init ); - level.tombstone_laststand_func = ::tombstone_laststand; - level.tombstone_spawn_func = ::tombstone_spawn; - level thread tombstone_hostmigration(); -} - -tombstone_player_init() -{ - while ( !isDefined( self.tombstone_index ) ) - { - wait 0,1; - } - level.tombstones[ self.tombstone_index ] = spawnstruct(); -} - -tombstone_spawn() -{ - dc = spawn( "script_model", self.origin + vectorScale( ( 0, 0, 1 ), 40 ) ); - dc.angles = self.angles; - dc setmodel( "tag_origin" ); - dc_icon = spawn( "script_model", self.origin + vectorScale( ( 0, 0, 1 ), 40 ) ); - dc_icon.angles = self.angles; - dc_icon setmodel( "ch_tombstone1" ); - dc_icon linkto( dc ); - dc.icon = dc_icon; - dc.script_noteworthy = "player_tombstone_model"; - dc.player = self; - dc thread tombstone_wobble(); - dc thread tombstone_revived( self ); - result = self waittill_any_return( "player_revived", "spawned_player", "disconnect" ); - if ( result == "player_revived" || result == "disconnect" ) - { - dc notify( "tombstone_timedout" ); - dc_icon unlink(); - dc_icon delete(); - dc delete(); - return; - } - dc thread tombstone_timeout(); - dc thread tombstone_grab(); -} - -tombstone_revived( player ) -{ - self endon( "tombstone_timedout" ); - player endon( "disconnect" ); - shown = 1; - while ( isDefined( self ) && isDefined( player ) ) - { - if ( isDefined( player.revivetrigger ) && isDefined( player.revivetrigger.beingrevived ) && player.revivetrigger.beingrevived ) - { - if ( shown ) - { - shown = 0; - self.icon hide(); - } - } - else - { - if ( !shown ) - { - shown = 1; - self.icon show(); - } - } - wait 0,05; - } -} - -tombstone_laststand() -{ - primaries = self getweaponslistprimaries(); - currentweapon = self getcurrentweapon(); - dc = level.tombstones[ self.tombstone_index ]; - dc.player = self; - dc.weapon = []; - dc.current_weapon = -1; - _a118 = primaries; - index = getFirstArrayKey( _a118 ); - while ( isDefined( index ) ) - { - weapon = _a118[ index ]; - dc.weapon[ index ] = weapon; - dc.stockcount[ index ] = self getweaponammostock( weapon ); - if ( weapon == currentweapon ) - { - dc.current_weapon = index; - } - index = getNextArrayKey( _a118, index ); - } - if ( isDefined( self.hasriotshield ) && self.hasriotshield ) - { - dc.hasriotshield = 1; - } - dc save_weapons_for_tombstone( self ); - if ( self hasweapon( "claymore_zm" ) ) - { - dc.hasclaymore = 1; - dc.claymoreclip = self getweaponammoclip( "claymore_zm" ); - } - if ( self hasweapon( "emp_grenade_zm" ) ) - { - dc.hasemp = 1; - dc.empclip = self getweaponammoclip( "emp_grenade_zm" ); - } - dc.perk = tombstone_save_perks( self ); - lethal_grenade = self get_player_lethal_grenade(); - if ( self hasweapon( lethal_grenade ) ) - { - dc.grenade = self getweaponammoclip( lethal_grenade ); - } - else - { - dc.grenade = 0; - } - if ( maps/mp/zombies/_zm_weap_cymbal_monkey::cymbal_monkey_exists() ) - { - dc.zombie_cymbal_monkey_count = self getweaponammoclip( "cymbal_monkey_zm" ); - } -} - -tombstone_save_perks( ent ) -{ - perk_array = []; - if ( ent hasperk( "specialty_armorvest" ) ) - { - perk_array[ perk_array.size ] = "specialty_armorvest"; - } - if ( ent hasperk( "specialty_deadshot" ) ) - { - perk_array[ perk_array.size ] = "specialty_deadshot"; - } - if ( ent hasperk( "specialty_fastreload" ) ) - { - perk_array[ perk_array.size ] = "specialty_fastreload"; - } - if ( ent hasperk( "specialty_flakjacket" ) ) - { - perk_array[ perk_array.size ] = "specialty_flakjacket"; - } - if ( ent hasperk( "specialty_longersprint" ) ) - { - perk_array[ perk_array.size ] = "specialty_longersprint"; - } - if ( ent hasperk( "specialty_quickrevive" ) ) - { - perk_array[ perk_array.size ] = "specialty_quickrevive"; - } - if ( ent hasperk( "specialty_rof" ) ) - { - perk_array[ perk_array.size ] = "specialty_rof"; - } - return perk_array; -} - -tombstone_grab() -{ - self endon( "tombstone_timedout" ); - wait 1; - while ( isDefined( self ) ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ].is_zombie ) - { - i++; - continue; - } - else - { - if ( isDefined( self.player ) && players[ i ] == self.player ) - { - tombstone_machine_triggers = getentarray( "specialty_scavenger", "script_noteworthy" ); - istombstonepowered = 0; - _a242 = tombstone_machine_triggers; - _k242 = getFirstArrayKey( _a242 ); - while ( isDefined( _k242 ) ) - { - trigger = _a242[ _k242 ]; - if ( isDefined( trigger.power_on ) || trigger.power_on && isDefined( trigger.turbine_power_on ) && trigger.turbine_power_on ) - { - istombstonepowered = 1; - } - _k242 = getNextArrayKey( _a242, _k242 ); - } - if ( istombstonepowered ) - { - dist = distance( players[ i ].origin, self.origin ); - if ( dist < 64 ) - { - playfx( level._effect[ "powerup_grabbed" ], self.origin ); - playfx( level._effect[ "powerup_grabbed_wave" ], self.origin ); - players[ i ] tombstone_give(); - wait 0,1; - playsoundatposition( "zmb_tombstone_grab", self.origin ); - self stoploopsound(); - self.icon unlink(); - self.icon delete(); - self delete(); - self notify( "tombstone_grabbed" ); - players[ i ] clientnotify( "dc0" ); - players[ i ] notify( "dance_on_my_grave" ); - } - } - } - } - i++; - } - wait_network_frame(); - } -} - -tombstone_give() -{ - dc = level.tombstones[ self.tombstone_index ]; - while ( !flag( "solo_game" ) ) - { - primaries = self getweaponslistprimaries(); - while ( dc.weapon.size > 1 || primaries.size > 1 ) - { - _a294 = primaries; - _k294 = getFirstArrayKey( _a294 ); - while ( isDefined( _k294 ) ) - { - weapon = _a294[ _k294 ]; - self takeweapon( weapon ); - _k294 = getNextArrayKey( _a294, _k294 ); - } - } - i = 0; - while ( i < dc.weapon.size ) - { - if ( !isDefined( dc.weapon[ i ] ) ) - { - i++; - continue; - } - else if ( dc.weapon[ i ] == "none" ) - { - i++; - continue; - } - else - { - weapon = dc.weapon[ i ]; - stock = dc.stockcount[ i ]; - if ( !self hasweapon( weapon ) ) - { - self giveweapon( weapon, 0, self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); - self setweaponammoclip( weapon, weaponclipsize( weapon ) ); - self setweaponammostock( weapon, stock ); - if ( i == dc.current_weapon ) - { - self switchtoweapon( weapon ); - } - } - } - i++; - } - } - if ( isDefined( dc.hasriotshield ) && dc.hasriotshield ) - { - self maps/mp/zombies/_zm_equipment::equipment_give( "riotshield_zm" ); - if ( isDefined( self.player_shield_reset_health ) ) - { - self [[ self.player_shield_reset_health ]](); - } - } - dc restore_weapons_for_tombstone( self ); - if ( isDefined( dc.hasclaymore ) && dc.hasclaymore && !self hasweapon( "claymore_zm" ) ) - { - self giveweapon( "claymore_zm" ); - self set_player_placeable_mine( "claymore_zm" ); - self setactionslot( 4, "weapon", "claymore_zm" ); - self setweaponammoclip( "claymore_zm", dc.claymoreclip ); - } - if ( isDefined( dc.hasemp ) && dc.hasemp ) - { - self giveweapon( "emp_grenade_zm" ); - self setweaponammoclip( "emp_grenade_zm", dc.empclip ); - } - while ( isDefined( dc.perk ) && dc.perk.size > 0 ) - { - i = 0; - while ( i < dc.perk.size ) - { - if ( self hasperk( dc.perk[ i ] ) ) - { - i++; - continue; - } - else if ( dc.perk[ i ] == "specialty_quickrevive" && flag( "solo_game" ) ) - { - i++; - continue; - } - else - { - maps/mp/zombies/_zm_perks::give_perk( dc.perk[ i ] ); - } - i++; - } - } - if ( dc.grenade > 0 && !flag( "solo_game" ) ) - { - curgrenadecount = 0; - if ( self hasweapon( self get_player_lethal_grenade() ) ) - { - self getweaponammoclip( self get_player_lethal_grenade() ); - } - else - { - self giveweapon( self get_player_lethal_grenade() ); - } - self setweaponammoclip( self get_player_lethal_grenade(), dc.grenade + curgrenadecount ); - } - if ( maps/mp/zombies/_zm_weap_cymbal_monkey::cymbal_monkey_exists() && !flag( "solo_game" ) ) - { - if ( dc.zombie_cymbal_monkey_count ) - { - self maps/mp/zombies/_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); - self setweaponammoclip( "cymbal_monkey_zm", dc.zombie_cymbal_monkey_count ); - } - } -} - -tombstone_wobble() -{ - self endon( "tombstone_grabbed" ); - self endon( "tombstone_timedout" ); - if ( isDefined( self ) ) - { - wait 1; - playfxontag( level._effect[ "powerup_on" ], self, "tag_origin" ); - self playsound( "zmb_tombstone_spawn" ); - self playloopsound( "zmb_tombstone_looper" ); - } - while ( isDefined( self ) ) - { - self rotateyaw( 360, 3 ); - wait 2,9; - } -} - -tombstone_timeout() -{ - self endon( "tombstone_grabbed" ); - self thread playtombstonetimeraudio(); - wait 48,5; - i = 0; - while ( i < 40 ) - { - if ( i % 2 ) - { - self.icon ghost(); - } - else - { - self.icon show(); - } - if ( i < 15 ) - { - wait 0,5; - i++; - continue; - } - else if ( i < 25 ) - { - wait 0,25; - i++; - continue; - } - else - { - wait 0,1; - } - i++; - } - self notify( "tombstone_timedout" ); - self.icon unlink(); - self.icon delete(); - self delete(); -} - -playtombstonetimeraudio() -{ - self endon( "tombstone_grabbed" ); - self endon( "tombstone_timedout" ); - player = self.player; - self thread playtombstonetimerout( player ); - while ( 1 ) - { - player playsoundtoplayer( "zmb_tombstone_timer_count", player ); - wait 1; - } -} - -playtombstonetimerout( player ) -{ - self endon( "tombstone_grabbed" ); - self waittill( "tombstone_timedout" ); - player playsoundtoplayer( "zmb_tombstone_timer_out", player ); -} - -save_weapons_for_tombstone( player ) -{ - self.tombstone_melee_weapons = []; - i = 0; - while ( i < level._melee_weapons.size ) - { - self save_weapon_for_tombstone( player, level._melee_weapons[ i ].weapon_name ); - i++; - } -} - -save_weapon_for_tombstone( player, weapon_name ) -{ - if ( player hasweapon( weapon_name ) ) - { - self.tombstone_melee_weapons[ weapon_name ] = 1; - } -} - -restore_weapons_for_tombstone( player ) -{ - i = 0; - while ( i < level._melee_weapons.size ) - { - self restore_weapon_for_tombstone( player, level._melee_weapons[ i ].weapon_name ); - i++; - } - self.tombstone_melee_weapons = undefined; -} - -restore_weapon_for_tombstone( player, weapon_name ) -{ - if ( isDefined( weapon_name ) || !isDefined( self.tombstone_melee_weapons ) && !isDefined( self.tombstone_melee_weapons[ weapon_name ] ) ) - { - return; - } - if ( isDefined( self.tombstone_melee_weapons[ weapon_name ] ) && self.tombstone_melee_weapons[ weapon_name ] ) - { - player giveweapon( weapon_name ); - player set_player_melee_weapon( weapon_name ); - self.tombstone_melee_weapons[ weapon_name ] = 0; - } -} - -tombstone_hostmigration() -{ - level endon( "end_game" ); - level notify( "tombstone_hostmigration" ); - level endon( "tombstone_hostmigration" ); - while ( 1 ) - { - level waittill( "host_migration_end" ); - tombstones = getentarray( "player_tombstone_model", "script_noteworthy" ); - _a564 = tombstones; - _k564 = getFirstArrayKey( _a564 ); - while ( isDefined( _k564 ) ) - { - model = _a564[ _k564 ]; - playfxontag( level._effect[ "powerup_on" ], model, "tag_origin" ); - _k564 = getNextArrayKey( _a564, _k564 ); - } - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_traps.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_traps.gsc deleted file mode 100644 index 681acca..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_traps.gsc +++ /dev/null @@ -1,897 +0,0 @@ -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - level.trap_kills = 0; - traps = getentarray( "zombie_trap", "targetname" ); - array_thread( traps, ::trap_init ); - level.burning_zombies = []; - level.elec_trap_time = 40; - level.elec_trap_cooldown_time = 60; -} - -trap_init() -{ - self ent_flag_init( "flag_active" ); - self ent_flag_init( "flag_cooldown" ); - self._trap_type = ""; - if ( isDefined( self.script_noteworthy ) ) - { - self._trap_type = self.script_noteworthy; - if ( isDefined( level._zombiemode_trap_activate_funcs ) && isDefined( level._zombiemode_trap_activate_funcs[ self._trap_type ] ) ) - { - self._trap_activate_func = level._zombiemode_trap_activate_funcs[ self._trap_type ]; - break; - } - else - { - switch( self.script_noteworthy ) - { - case "rotating": - self._trap_activate_func = ::trap_activate_rotating; - break; - case "electric": - self._trap_activate_func = ::trap_activate_electric; - break; - case "flipper": - self._trap_activate_func = ::trap_activate_flipper; - break; - case "fire": - default: - self._trap_activate_func = ::trap_activate_fire; - } - } - if ( isDefined( level._zombiemode_trap_use_funcs ) && isDefined( level._zombiemode_trap_use_funcs[ self._trap_type ] ) ) - { - self._trap_use_func = level._zombiemode_trap_use_funcs[ self._trap_type ]; - } - else - { - self._trap_use_func = ::trap_use_think; - } -} -self trap_model_type_init(); -self._trap_use_trigs = []; -self._trap_lights = []; -self._trap_movers = []; -self._trap_switches = []; -components = getentarray( self.target, "targetname" ); -i = 0; -while ( i < components.size ) -{ - if ( isDefined( components[ i ].script_noteworthy ) ) - { - switch( components[ i ].script_noteworthy ) - { - case "counter_1s": - self.counter_1s = components[ i ]; - break; - i++; - continue; - case "counter_10s": - self.counter_10s = components[ i ]; - break; - i++; - continue; - case "counter_100s": - self.counter_100s = components[ i ]; - break; - i++; - continue; - case "mover": - self._trap_movers[ self._trap_movers.size ] = components[ i ]; - break; - i++; - continue; - case "switch": - self._trap_switches[ self._trap_switches.size ] = components[ i ]; - break; - i++; - continue; - case "light": - self._trap_lightes[ self._trap_lightes.size ] = components[ i ]; - break; - i++; - continue; - } - } - if ( isDefined( components[ i ].script_string ) ) - { - switch( components[ i ].script_string ) - { - case "flipper1": - self.flipper1 = components[ i ]; - break; - i++; - continue; - case "flipper2": - self.flipper2 = components[ i ]; - break; - i++; - continue; - case "flipper1_radius_check": - self.flipper1_radius_check = components[ i ]; - break; - i++; - continue; - case "flipper2_radius_check": - self.flipper2_radius_check = components[ i ]; - break; - i++; - continue; - case "target1": - self.target1 = components[ i ]; - break; - i++; - continue; - case "target2": - self.target2 = components[ i ]; - break; - i++; - continue; - case "target3": - self.target3 = components[ i ]; - break; - i++; - continue; - } - } - switch( components[ i ].classname ) - { - case "trigger_use": - self._trap_use_trigs[ self._trap_use_trigs.size ] = components[ i ]; - break; - i++; - continue; - case "script_model": - if ( components[ i ].model == self._trap_light_model_off ) - { - self._trap_lights[ self._trap_lights.size ] = components[ i ]; - } - else if ( components[ i ].model == self._trap_switch_model ) - { - self._trap_switches[ self._trap_switches.size ] = components[ i ]; - } - } - i++; -} -self._trap_fx_structs = []; -components = getstructarray( self.target, "targetname" ); -i = 0; -while ( i < components.size ) -{ - if ( isDefined( components[ i ].script_string ) && components[ i ].script_string == "use_this_angle" ) - { - self.use_this_angle = components[ i ]; - i++; - continue; - } - else - { - self._trap_fx_structs[ self._trap_fx_structs.size ] = components[ i ]; - } - i++; -} -/# -assert( self._trap_use_trigs.size > 0, "_zm_traps::init no use triggers found for " + self.target ); -#/ -if ( !isDefined( self.zombie_cost ) ) -{ - self.zombie_cost = 1000; -} -self._trap_in_use = 0; -self._trap_cooling_down = 0; -self thread trap_dialog(); -flag_wait( "start_zombie_round_logic" ); -self trap_lights_red(); -i = 0; -while ( i < self._trap_use_trigs.size ) -{ - self._trap_use_trigs[ i ] setcursorhint( "HINT_NOICON" ); - i++; -} -if ( !isDefined( self.script_flag_wait ) ) -{ - self trap_set_string( &"ZOMBIE_NEED_POWER" ); - flag_wait( "power_on" ); -} -else -{ - if ( !isDefined( level.flag[ self.script_flag_wait ] ) ) - { - flag_init( self.script_flag_wait ); - } - flag_wait( self.script_flag_wait ); -} -self trap_set_string( &"ZOMBIE_BUTTON_BUY_TRAP", self.zombie_cost ); -self trap_lights_green(); -i = 0; -while ( i < self._trap_use_trigs.size ) -{ - self._trap_use_trigs[ i ] thread [[ self._trap_use_func ]]( self ); - i++; -} -} - -trap_use_think( trap ) -{ - for ( ;; ) - { - while ( 1 ) - { - self waittill( "trigger", who ); - while ( who in_revive_trigger() ) - { - continue; - } - if ( is_player_valid( who ) && !trap._trap_in_use ) - { - players = get_players(); - if ( players.size == 1 && who.score >= trap.zombie_cost ) - { - who maps/mp/zombies/_zm_score::minus_to_player_score( trap.zombie_cost ); - break; - } - else - { - if ( level.team_pool[ who.team_num ].score >= trap.zombie_cost ) - { - who maps/mp/zombies/_zm_score::minus_to_team_score( trap.zombie_cost ); - break; - } - else if ( ( level.team_pool[ who.team_num ].score + who.score ) >= trap.zombie_cost ) - { - team_points = level.team_pool[ who.team_num ].score; - who maps/mp/zombies/_zm_score::minus_to_player_score( trap.zombie_cost - team_points ); - who maps/mp/zombies/_zm_score::minus_to_team_score( team_points ); - break; - } - else - { - } - } - } - trap._trap_in_use = 1; - trap trap_set_string( &"ZOMBIE_TRAP_ACTIVE" ); - play_sound_at_pos( "purchase", who.origin ); - if ( trap._trap_switches.size ) - { - trap thread trap_move_switches(); - trap waittill( "switch_activated" ); - } - trap trigger_on(); - trap thread [[ trap._trap_activate_func ]](); - trap waittill( "trap_done" ); - trap trigger_off(); - trap._trap_cooling_down = 1; - trap trap_set_string( &"ZOMBIE_TRAP_COOLDOWN" ); -/# - if ( getDvarInt( "zombie_cheat" ) >= 1 ) - { - trap._trap_cooldown_time = 5; -#/ - } - wait trap._trap_cooldown_time; - trap._trap_cooling_down = 0; - trap notify( "available" ); - trap._trap_in_use = 0; - trap trap_set_string( &"ZOMBIE_BUTTON_BUY_TRAP", trap.zombie_cost ); - } - } -} - -trap_lights_red() -{ - i = 0; - while ( i < self._trap_lights.size ) - { - light = self._trap_lights[ i ]; - light setmodel( self._trap_light_model_red ); - if ( isDefined( light.fx ) ) - { - light.fx delete(); - } - light.fx = maps/mp/zombies/_zm_net::network_safe_spawn( "trap_lights_red", 2, "script_model", light.origin ); - light.fx setmodel( "tag_origin" ); - light.fx.angles = light.angles; - playfxontag( level._effect[ "zapper_light_notready" ], light.fx, "tag_origin" ); - i++; - } -} - -trap_lights_green() -{ - i = 0; - while ( i < self._trap_lights.size ) - { - light = self._trap_lights[ i ]; - if ( isDefined( light._switch_disabled ) ) - { - i++; - continue; - } - else - { - light setmodel( self._trap_light_model_green ); - if ( isDefined( light.fx ) ) - { - light.fx delete(); - } - light.fx = maps/mp/zombies/_zm_net::network_safe_spawn( "trap_lights_green", 2, "script_model", light.origin ); - light.fx setmodel( "tag_origin" ); - light.fx.angles = light.angles; - playfxontag( level._effect[ "zapper_light_ready" ], light.fx, "tag_origin" ); - } - i++; - } -} - -trap_set_string( string, param1, param2 ) -{ - i = 0; - while ( i < self._trap_use_trigs.size ) - { - if ( !isDefined( param1 ) ) - { - self._trap_use_trigs[ i ] sethintstring( string ); - i++; - continue; - } - else if ( !isDefined( param2 ) ) - { - self._trap_use_trigs[ i ] sethintstring( string, param1 ); - i++; - continue; - } - else - { - self._trap_use_trigs[ i ] sethintstring( string, param1, param2 ); - } - i++; - } -} - -trap_move_switches() -{ - self trap_lights_red(); - i = 0; - while ( i < self._trap_switches.size ) - { - self._trap_switches[ i ] rotatepitch( 180, 0,5 ); - self._trap_switches[ i ] playsound( "amb_sparks_l_b" ); - i++; - } - self._trap_switches[ 0 ] waittill( "rotatedone" ); - self notify( "switch_activated" ); - self waittill( "available" ); - i = 0; - while ( i < self._trap_switches.size ) - { - self._trap_switches[ i ] rotatepitch( -180, 0,5 ); - i++; - } - self._trap_switches[ 0 ] waittill( "rotatedone" ); - self trap_lights_green(); -} - -trap_activate_electric() -{ - self._trap_duration = 40; - self._trap_cooldown_time = 60; - self notify( "trap_activate" ); - if ( isDefined( self.script_string ) ) - { - number = int( self.script_string ); - if ( number != 0 ) - { - exploder( number ); - } - else - { - clientnotify( self.script_string + "1" ); - } - } - fx_points = getstructarray( self.target, "targetname" ); - i = 0; - while ( i < fx_points.size ) - { - wait_network_frame(); - fx_points[ i ] thread trap_audio_fx( self ); - i++; - } - self thread trap_damage(); - wait self._trap_duration; - self notify( "trap_done" ); - if ( isDefined( self.script_string ) ) - { - clientnotify( self.script_string + "0" ); - } -} - -trap_activate_fire() -{ - self._trap_duration = 40; - self._trap_cooldown_time = 60; - clientnotify( self.script_string + "1" ); - clientnotify( self.script_parameters ); - fx_points = getstructarray( self.target, "targetname" ); - i = 0; - while ( i < fx_points.size ) - { - wait_network_frame(); - fx_points[ i ] thread trap_audio_fx( self ); - i++; - } - self thread trap_damage(); - wait self._trap_duration; - self notify( "trap_done" ); - clientnotify( self.script_string + "0" ); - clientnotify( self.script_parameters ); -} - -trap_activate_rotating() -{ - self endon( "trap_done" ); - self._trap_duration = 30; - self._trap_cooldown_time = 60; - self thread trap_damage(); - self thread trig_update( self._trap_movers[ 0 ] ); - old_angles = self._trap_movers[ 0 ].angles; - i = 0; - while ( i < self._trap_movers.size ) - { - self._trap_movers[ i ] rotateyaw( 360, 5, 4,5 ); - i++; - } - wait 5; - step = 1,5; - t = 0; - while ( t < self._trap_duration ) - { - i = 0; - while ( i < self._trap_movers.size ) - { - self._trap_movers[ i ] rotateyaw( 360, step ); - i++; - } - wait step; - t += step; - } - i = 0; - while ( i < self._trap_movers.size ) - { - self._trap_movers[ i ] rotateyaw( 360, 5, 0, 4,5 ); - i++; - } - wait 5; - i = 0; - while ( i < self._trap_movers.size ) - { - self._trap_movers[ i ].angles = old_angles; - i++; - } - self notify( "trap_done" ); -} - -trap_activate_flipper() -{ -} - -trap_audio_fx( trap ) -{ - sound_origin = undefined; - if ( trap.script_noteworthy == "electric" ) - { - sound_origin = spawn( "script_origin", self.origin ); - sound_origin playsound( "zmb_elec_start" ); - sound_origin playloopsound( "zmb_elec_loop" ); - self thread play_electrical_sound( trap ); - } - else - { - if ( trap.script_noteworthy == "fire" ) - { - sound_origin = spawn( "script_origin", self.origin ); - sound_origin playsound( "zmb_firetrap_start" ); - sound_origin playloopsound( "zmb_firetrap_loop" ); - } - } - trap waittill_any_or_timeout( trap._trap_duration, "trap_done" ); - if ( isDefined( sound_origin ) ) - { - if ( trap.script_noteworthy == "fire" ) - { - playsoundatposition( "zmb_firetrap_end", sound_origin.origin ); - } - sound_origin stoploopsound(); - wait 0,05; - sound_origin delete(); - } -} - -play_electrical_sound( trap ) -{ - trap endon( "trap_done" ); - while ( 1 ) - { - wait randomfloatrange( 0,1, 0,5 ); - playsoundatposition( "zmb_elec_arc", self.origin ); - } -} - -trap_damage() -{ - self endon( "trap_done" ); - while ( 1 ) - { - self waittill( "trigger", ent ); - if ( isplayer( ent ) ) - { - switch( self._trap_type ) - { - case "electric": - ent thread player_elec_damage(); - break; - case "fire": - case "rocket": - ent thread player_fire_damage(); - break; - case "rotating": - if ( ent getstance() == "stand" ) - { - ent dodamage( 50, ent.origin + vectorScale( ( 0, 0, 1 ), 20 ) ); - ent setstance( "crouch" ); - } - break; - } - break; - continue; - } - else if ( !isDefined( ent.marked_for_death ) ) - { - switch( self._trap_type ) - { - case "rocket": - ent thread zombie_trap_death( self, 100 ); - break; - break; - case "rotating": - ent thread zombie_trap_death( self, 200 ); - break; - break; - case "electric": - case "fire": - default: - ent thread zombie_trap_death( self, randomint( 100 ) ); - break; - break; - } - } -} -} - -trig_update( parent ) -{ - self endon( "trap_done" ); - start_angles = self.angles; - while ( 1 ) - { - self.angles = parent.angles; - wait 0,05; - } -} - -player_elec_damage() -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( !isDefined( level.elec_loop ) ) - { - level.elec_loop = 0; - } - if ( !isDefined( self.is_burning ) && is_player_valid( self ) ) - { - self.is_burning = 1; - self setelectrified( 1,25 ); - shocktime = 2,5; - self shellshock( "electrocution", shocktime ); - if ( level.elec_loop == 0 ) - { - elec_loop = 1; - self playsound( "zmb_zombie_arc" ); - } - if ( !self hasperk( "specialty_armorvest" ) || ( self.health - 100 ) < 1 ) - { - radiusdamage( self.origin, 10, self.health + 100, self.health + 100 ); - self.is_burning = undefined; - return; - } - else - { - self dodamage( 50, self.origin ); - wait 0,1; - self.is_burning = undefined; - } - } -} - -player_fire_damage() -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( !isDefined( self.is_burning ) && !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - self.is_burning = 1; - self setburn( 1,25 ); - self notify( "burned" ); - if ( !self hasperk( "specialty_armorvest" ) || ( self.health - 100 ) < 1 ) - { - radiusdamage( self.origin, 10, self.health + 100, self.health + 100 ); - self.is_burning = undefined; - return; - } - else - { - self dodamage( 50, self.origin ); - wait 0,1; - self.is_burning = undefined; - } - } -} - -zombie_trap_death( trap, param ) -{ - self endon( "death" ); - self.marked_for_death = 1; - switch( trap._trap_type ) - { - case "electric": - case "fire": - case "rocket": - if ( isDefined( self.animname ) && self.animname != "zombie_dog" ) - { - if ( param > 90 && level.burning_zombies.size < 6 ) - { - level.burning_zombies[ level.burning_zombies.size ] = self; - self thread zombie_flame_watch(); - self playsound( "ignite" ); - self thread maps/mp/animscripts/zm_death::flame_death_fx(); - playfxontag( level._effect[ "character_fire_death_torso" ], self, "J_SpineLower" ); - wait randomfloat( 1,25 ); - } - else - { - refs[ 0 ] = "guts"; - refs[ 1 ] = "right_arm"; - refs[ 2 ] = "left_arm"; - refs[ 3 ] = "right_leg"; - refs[ 4 ] = "left_leg"; - refs[ 5 ] = "no_legs"; - refs[ 6 ] = "head"; - self.a.gib_ref = refs[ randomint( refs.size ) ]; - playsoundatposition( "zmb_zombie_arc", self.origin ); - if ( trap._trap_type == "electric" ) - { - if ( randomint( 100 ) > 50 ) - { - self thread electroctute_death_fx(); - self thread play_elec_vocals(); - } - } - wait randomfloat( 1,25 ); - self playsound( "zmb_zombie_arc" ); - } - } - if ( isDefined( self.fire_damage_func ) ) - { - self [[ self.fire_damage_func ]]( trap ); - } - else - { - level notify( "trap_kill" ); - self dodamage( self.health + 666, self.origin, trap ); - } - break; - case "centrifuge": - case "rotating": - ang = vectorToAngle( trap.origin - self.origin ); - direction_vec = vectorScale( anglesToRight( ang ), param ); - if ( isDefined( self.trap_reaction_func ) ) - { - self [[ self.trap_reaction_func ]]( trap ); - } - level notify( "trap_kill" ); - self startragdoll(); - self launchragdoll( direction_vec ); - wait_network_frame(); - self.a.gib_ref = "head"; - self dodamage( self.health, self.origin, trap ); - break; - } -} - -zombie_flame_watch() -{ - self waittill( "death" ); - self stoploopsound(); - arrayremovevalue( level.burning_zombies, self ); -} - -play_elec_vocals() -{ - if ( isDefined( self ) ) - { - org = self.origin; - wait 0,15; - playsoundatposition( "zmb_elec_vocals", org ); - playsoundatposition( "zmb_zombie_arc", org ); - playsoundatposition( "zmb_exp_jib_zombie", org ); - } -} - -electroctute_death_fx() -{ - self endon( "death" ); - if ( isDefined( self.is_electrocuted ) && self.is_electrocuted ) - { - return; - } - self.is_electrocuted = 1; - self thread electrocute_timeout(); - if ( self.team == level.zombie_team ) - { - level.bconfiretime = getTime(); - level.bconfireorg = self.origin; - } - if ( isDefined( level._effect[ "elec_torso" ] ) ) - { - playfxontag( level._effect[ "elec_torso" ], self, "J_SpineLower" ); - } - self playsound( "zmb_elec_jib_zombie" ); - wait 1; - tagarray = []; - tagarray[ 0 ] = "J_Elbow_LE"; - tagarray[ 1 ] = "J_Elbow_RI"; - tagarray[ 2 ] = "J_Knee_RI"; - tagarray[ 3 ] = "J_Knee_LE"; - tagarray = array_randomize( tagarray ); - if ( isDefined( level._effect[ "elec_md" ] ) ) - { - playfxontag( level._effect[ "elec_md" ], self, tagarray[ 0 ] ); - } - self playsound( "zmb_elec_jib_zombie" ); - wait 1; - self playsound( "zmb_elec_jib_zombie" ); - tagarray[ 0 ] = "J_Wrist_RI"; - tagarray[ 1 ] = "J_Wrist_LE"; - if ( !isDefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" ) - { - tagarray[ 2 ] = "J_Ankle_RI"; - tagarray[ 3 ] = "J_Ankle_LE"; - } - tagarray = array_randomize( tagarray ); - if ( isDefined( level._effect[ "elec_sm" ] ) ) - { - playfxontag( level._effect[ "elec_sm" ], self, tagarray[ 0 ] ); - playfxontag( level._effect[ "elec_sm" ], self, tagarray[ 1 ] ); - } -} - -electrocute_timeout() -{ - self endon( "death" ); - self playloopsound( "fire_manager_0" ); - wait 12; - self stoploopsound(); - if ( isDefined( self ) && isalive( self ) ) - { - self.is_electrocuted = 0; - self notify( "stop_flame_damage" ); - } -} - -trap_dialog() -{ - self endon( "warning_dialog" ); - level endon( "switch_flipped" ); - timer = 0; - while ( 1 ) - { - wait 0,5; - players = get_players(); - i = 0; - while ( i < players.size ) - { - dist = distancesquared( players[ i ].origin, self.origin ); - if ( dist > 4900 ) - { - timer = 0; - i++; - continue; - } - else - { - if ( dist < 4900 && timer < 3 ) - { - wait 0,5; - timer++; - } - if ( dist < 4900 && timer == 3 ) - { - index = maps/mp/zombies/_zm_weapons::get_player_index( players[ i ] ); - plr = "plr_" + index + "_"; - wait 3; - self notify( "warning_dialog" ); - } - } - i++; - } - } -} - -get_trap_array( trap_type ) -{ - ents = getentarray( "zombie_trap", "targetname" ); - traps = []; - i = 0; - while ( i < ents.size ) - { - if ( ents[ i ].script_noteworthy == trap_type ) - { - traps[ traps.size ] = ents[ i ]; - } - i++; - } - return traps; -} - -trap_disable() -{ - cooldown = self._trap_cooldown_time; - if ( self._trap_in_use ) - { - self notify( "trap_done" ); - self._trap_cooldown_time = 0,05; - self waittill( "available" ); - } - array_thread( self._trap_use_trigs, ::trigger_off ); - self trap_lights_red(); - self._trap_cooldown_time = cooldown; -} - -trap_enable() -{ - array_thread( self._trap_use_trigs, ::trigger_on ); - self trap_lights_green(); -} - -trap_model_type_init() -{ - if ( !isDefined( self.script_parameters ) ) - { - self.script_parameters = "default"; - } - switch( self.script_parameters ) - { - case "pentagon_electric": - self._trap_light_model_off = "zombie_trap_switch_light"; - self._trap_light_model_green = "zombie_trap_switch_light_on_green"; - self._trap_light_model_red = "zombie_trap_switch_light_on_red"; - self._trap_switch_model = "zombie_trap_switch_handle"; - break; - case "default": - default: - self._trap_light_model_off = "zombie_zapper_cagelight"; - self._trap_light_model_green = "zombie_zapper_cagelight_green"; - self._trap_light_model_red = "zombie_zapper_cagelight_red"; - self._trap_switch_model = "zombie_zapper_handle"; - break; - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_turned.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_turned.gsc deleted file mode 100644 index 3ae6d06..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_turned.gsc +++ /dev/null @@ -1,431 +0,0 @@ -#include maps/mp/gametypes_zm/_spawnlogic; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/_visionset_mgr; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - level.turnedmeleeweapon = "zombiemelee_zm"; - level.turnedmeleeweapon_dw = "zombiemelee_dw"; - precacheitem( level.turnedmeleeweapon ); - precacheitem( level.turnedmeleeweapon_dw ); - precachemodel( "c_zom_player_zombie_fb" ); - precachemodel( "c_zom_zombie_viewhands" ); - if ( !isDefined( level.vsmgr_prio_visionset_zombie_turned ) ) - { - level.vsmgr_prio_visionset_zombie_turned = 123; - } - maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_turned", 3000, level.vsmgr_prio_visionset_zombie_turned, 1, 1 ); - registerclientfield( "toplayer", "turned_ir", 3000, 1, "int" ); - registerclientfield( "allplayers", "player_has_eyes", 3000, 1, "int" ); - registerclientfield( "allplayers", "player_eyes_special", 5000, 1, "int" ); - level._effect[ "player_eye_glow" ] = loadfx( "maps/zombie/fx_zombie_eye_returned_blue" ); - level._effect[ "player_eye_glow_orng" ] = loadfx( "maps/zombie/fx_zombie_eye_returned_orng" ); - thread setup_zombie_exerts(); -} - -setup_zombie_exerts() -{ - wait 0,05; - level.exert_sounds[ 1 ][ "burp" ] = "null"; - level.exert_sounds[ 1 ][ "hitmed" ] = "null"; - level.exert_sounds[ 1 ][ "hitlrg" ] = "null"; -} - -delay_turning_on_eyes() -{ - self endon( "death" ); - self endon( "disconnect" ); - wait_network_frame(); - wait 0,1; - self setclientfield( "player_has_eyes", 1 ); -} - -turn_to_zombie() -{ - if ( self.sessionstate == "playing" && isDefined( self.is_zombie ) && self.is_zombie && isDefined( self.laststand ) && !self.laststand ) - { - return; - } - if ( isDefined( self.is_in_process_of_zombify ) && self.is_in_process_of_zombify ) - { - return; - } - while ( isDefined( self.is_in_process_of_humanify ) && self.is_in_process_of_humanify ) - { - wait 0,1; - } - if ( !flag( "pregame" ) ) - { - self playsoundtoplayer( "evt_spawn", self ); - playsoundatposition( "evt_disappear_3d", self.origin ); - if ( !self.is_zombie ) - { - playsoundatposition( "vox_plr_" + randomintrange( 0, 4 ) + "_exert_death_high_" + randomintrange( 0, 4 ), self.origin ); - } - } - self._can_score = 1; - self setclientfield( "player_has_eyes", 0 ); - self ghost(); - self turned_disable_player_weapons(); - self notify( "clear_red_flashing_overlay" ); - self notify( "zombify" ); - self.is_in_process_of_zombify = 1; - self.team = level.zombie_team; - self.pers[ "team" ] = level.zombie_team; - self.sessionteam = level.zombie_team; - wait_network_frame(); - self maps/mp/gametypes_zm/_zm_gametype::onspawnplayer(); - self freezecontrols( 1 ); - self.is_zombie = 1; - self setburn( 0 ); - if ( isDefined( self.turned_visionset ) && self.turned_visionset ) - { - maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_turned", self ); - wait_network_frame(); - wait_network_frame(); - if ( !isDefined( self ) ) - { - return; - } - } - maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_turned", self ); - self.turned_visionset = 1; - self setclientfieldtoplayer( "turned_ir", 1 ); - self maps/mp/zombies/_zm_audio::setexertvoice( 1 ); - self.laststand = undefined; - wait_network_frame(); - if ( !isDefined( self ) ) - { - return; - } - self enableweapons(); - self show(); - playsoundatposition( "evt_appear_3d", self.origin ); - playsoundatposition( "zmb_zombie_spawn", self.origin ); - self thread delay_turning_on_eyes(); - self thread turned_player_buttons(); - self setperk( "specialty_noname" ); - self setperk( "specialty_unlimitedsprint" ); - self setperk( "specialty_fallheight" ); - self turned_give_melee_weapon(); - self setmovespeedscale( 1 ); - self.animname = "zombie"; - self disableoffhandweapons(); - self allowstand( 1 ); - self allowprone( 0 ); - self allowcrouch( 0 ); - self allowads( 0 ); - self allowjump( 0 ); - self disableweaponcycling(); - self setmovespeedscale( 1 ); - self setsprintduration( 4 ); - self setsprintcooldown( 0 ); - self stopshellshock(); - self.maxhealth = 256; - self.health = 256; - self.meleedamage = 1000; - self detachall(); - self setmodel( "c_zom_player_zombie_fb" ); - self.voice = "american"; - self.skeleton = "base"; - self setviewmodel( "c_zom_zombie_viewhands" ); - self.shock_onpain = 0; - self disableinvulnerability(); - if ( isDefined( level.player_movement_suppressed ) ) - { - self freezecontrols( level.player_movement_suppressed ); - } - else - { - self freezecontrols( 0 ); - } - self.is_in_process_of_zombify = 0; -} - -turn_to_human() -{ - if ( self.sessionstate == "playing" && isDefined( self.is_zombie ) && !self.is_zombie && isDefined( self.laststand ) && !self.laststand ) - { - return; - } - if ( isDefined( self.is_in_process_of_humanify ) && self.is_in_process_of_humanify ) - { - return; - } - while ( isDefined( self.is_in_process_of_zombify ) && self.is_in_process_of_zombify ) - { - wait 0,1; - } - self playsoundtoplayer( "evt_spawn", self ); - playsoundatposition( "evt_disappear_3d", self.origin ); - self setclientfield( "player_has_eyes", 0 ); - self ghost(); - self notify( "humanify" ); - self.is_in_process_of_humanify = 1; - self.is_zombie = 0; - self notify( "clear_red_flashing_overlay" ); - self.team = self.prevteam; - self.pers[ "team" ] = self.prevteam; - self.sessionteam = self.prevteam; - wait_network_frame(); - self maps/mp/gametypes_zm/_zm_gametype::onspawnplayer(); - self.maxhealth = 100; - self.health = 100; - self freezecontrols( 1 ); - if ( self hasweapon( "death_throe_zm" ) ) - { - self takeweapon( "death_throe_zm" ); - } - self unsetperk( "specialty_noname" ); - self unsetperk( "specialty_unlimitedsprint" ); - self unsetperk( "specialty_fallheight" ); - self turned_enable_player_weapons(); - self maps/mp/zombies/_zm_audio::setexertvoice( 0 ); - self.turned_visionset = 0; - maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_turned", self ); - self setclientfieldtoplayer( "turned_ir", 0 ); - self setmovespeedscale( 1 ); - self.ignoreme = 0; - self.shock_onpain = 1; - self enableweaponcycling(); - self allowstand( 1 ); - self allowprone( 1 ); - self allowcrouch( 1 ); - self allowads( 1 ); - self allowjump( 1 ); - self turnedhuman(); - self enableoffhandweapons(); - self stopshellshock(); - self.laststand = undefined; - self.is_burning = undefined; - self.meleedamage = undefined; - self detachall(); - self [[ level.givecustomcharacters ]](); - if ( !self hasweapon( "knife_zm" ) ) - { - self giveweapon( "knife_zm" ); - } - wait_network_frame(); - if ( !isDefined( self ) ) - { - return; - } - self disableinvulnerability(); - if ( isDefined( level.player_movement_suppressed ) ) - { - self freezecontrols( level.player_movement_suppressed ); - } - else - { - self freezecontrols( 0 ); - } - self show(); - playsoundatposition( "evt_appear_3d", self.origin ); - self.is_in_process_of_humanify = 0; -} - -deletezombiesinradius( origin ) -{ - zombies = get_round_enemy_array(); - maxradius = 128; - _a301 = zombies; - _k301 = getFirstArrayKey( _a301 ); - while ( isDefined( _k301 ) ) - { - zombie = _a301[ _k301 ]; - if ( isDefined( zombie ) && isalive( zombie ) && isDefined( zombie.is_being_used_as_spawner ) && !zombie.is_being_used_as_spawner ) - { - if ( distancesquared( zombie.origin, origin ) < ( maxradius * maxradius ) ) - { - playfx( level._effect[ "wood_chunk_destory" ], zombie.origin ); - zombie thread silentlyremovezombie(); - } - wait 0,05; - } - _k301 = getNextArrayKey( _a301, _k301 ); - } -} - -turned_give_melee_weapon() -{ -/# - assert( isDefined( self.turnedmeleeweapon ) ); -#/ -/# - assert( self.turnedmeleeweapon != "none" ); -#/ - self.turned_had_knife = self hasweapon( "knife_zm" ); - if ( isDefined( self.turned_had_knife ) && self.turned_had_knife ) - { - self takeweapon( "knife_zm" ); - } - self giveweapon( self.turnedmeleeweapon_dw ); - self givemaxammo( self.turnedmeleeweapon_dw ); - self giveweapon( self.turnedmeleeweapon ); - self givemaxammo( self.turnedmeleeweapon ); - self switchtoweapon( self.turnedmeleeweapon_dw ); - self switchtoweapon( self.turnedmeleeweapon ); -} - -turned_player_buttons() -{ - self endon( "disconnect" ); - self endon( "humanify" ); - level endon( "end_game" ); - while ( isDefined( self.is_zombie ) && self.is_zombie ) - { - while ( !self attackbuttonpressed() || self adsbuttonpressed() && self meleebuttonpressed() ) - { - if ( cointoss() ) - { - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "attack", undefined ); - } - while ( !self attackbuttonpressed() || self adsbuttonpressed() && self meleebuttonpressed() ) - { - wait 0,05; - } - } - while ( self usebuttonpressed() ) - { - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "taunt", undefined ); - while ( self usebuttonpressed() ) - { - wait 0,05; - } - } - while ( self issprinting() ) - { - while ( self issprinting() ) - { - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "sprint", undefined ); - wait 0,05; - } - } - wait 0,05; - } -} - -turned_disable_player_weapons() -{ - if ( isDefined( self.is_zombie ) && self.is_zombie ) - { - return; - } - weaponinventory = self getweaponslist(); - self.lastactiveweapon = self getcurrentweapon(); - self setlaststandprevweap( self.lastactiveweapon ); - self.laststandpistol = undefined; - self.hadpistol = 0; - if ( !isDefined( self.turnedmeleeweapon ) ) - { - self.turnedmeleeweapon = level.turnedmeleeweapon; - } - if ( !isDefined( self.turnedmeleeweapon_dw ) ) - { - self.turnedmeleeweapon_dw = level.turnedmeleeweapon_dw; - } - self takeallweapons(); - self disableweaponcycling(); -} - -turned_enable_player_weapons() -{ - self takeallweapons(); - self enableweaponcycling(); - self enableoffhandweapons(); - self.turned_had_knife = undefined; - if ( isDefined( level.humanify_custom_loadout ) ) - { - self thread [[ level.humanify_custom_loadout ]](); - return; - } - else - { - if ( !self hasweapon( "rottweil72_zm" ) ) - { - self giveweapon( "rottweil72_zm" ); - self switchtoweapon( "rottweil72_zm" ); - } - } - if ( isDefined( self.is_zombie ) && !self.is_zombie && !self hasweapon( level.start_weapon ) ) - { - if ( !self hasweapon( "knife_zm" ) ) - { - self giveweapon( "knife_zm" ); - } - self give_start_weapon( 0 ); - } - if ( self hasweapon( "rottweil72_zm" ) ) - { - self setweaponammoclip( "rottweil72_zm", 2 ); - self setweaponammostock( "rottweil72_zm", 0 ); - } - if ( self hasweapon( level.start_weapon ) ) - { - self givemaxammo( level.start_weapon ); - } - if ( self hasweapon( self get_player_lethal_grenade() ) ) - { - self getweaponammoclip( self get_player_lethal_grenade() ); - } - else - { - self giveweapon( self get_player_lethal_grenade() ); - } - self setweaponammoclip( self get_player_lethal_grenade(), 2 ); -} - -get_farthest_available_zombie( player ) -{ - while ( 1 ) - { - zombies = get_array_of_closest( player.origin, getaiarray( level.zombie_team ) ); - x = 0; - while ( x < zombies.size ) - { - zombie = zombies[ x ]; - if ( isDefined( zombie ) && isalive( zombie ) && isDefined( zombie.in_the_ground ) && !zombie.in_the_ground && isDefined( zombie.gibbed ) && !zombie.gibbed && isDefined( zombie.head_gibbed ) && !zombie.head_gibbed && isDefined( zombie.is_being_used_as_spawnpoint ) && !zombie.is_being_used_as_spawnpoint && zombie in_playable_area() ) - { - zombie.is_being_used_as_spawnpoint = 1; - return zombie; - } - x++; - } - wait 0,05; - } -} - -get_available_human() -{ - players = get_players(); - _a512 = players; - _k512 = getFirstArrayKey( _a512 ); - while ( isDefined( _k512 ) ) - { - player = _a512[ _k512 ]; - if ( isDefined( player.is_zombie ) && !player.is_zombie ) - { - return player; - } - _k512 = getNextArrayKey( _a512, _k512 ); - } -} - -silentlyremovezombie() -{ - self.skip_death_notetracks = 1; - self.nodeathragdoll = 1; - self dodamage( self.maxhealth * 2, self.origin, self, self, "none", "MOD_SUICIDE" ); - self self_delete(); -} - -getspawnpoint() -{ - spawnpoint = self maps/mp/gametypes_zm/_spawnlogic::getspawnpoint_dm( level._turned_zombie_respawnpoints ); - return spawnpoint; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_unitrigger.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_unitrigger.gsc deleted file mode 100644 index d48de46..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_unitrigger.gsc +++ /dev/null @@ -1,684 +0,0 @@ -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - level._unitriggers = spawnstruct(); - level._unitriggers._deferredinitlist = []; - level._unitriggers.trigger_pool = []; - level._unitriggers.trigger_stubs = []; - level._unitriggers.dynamic_stubs = []; - level._unitriggers.system_trigger_funcs = []; - stubs_keys = array( "unitrigger_radius", "unitrigger_radius_use", "unitrigger_box", "unitrigger_box_use" ); - stubs = []; - i = 0; - while ( i < stubs_keys.size ) - { - stubs = arraycombine( stubs, getstructarray( stubs_keys[ i ], "script_unitrigger_type" ), 1, 0 ); - i++; - } - i = 0; - while ( i < stubs.size ) - { - register_unitrigger( stubs[ i ] ); - i++; - } -} - -register_unitrigger_system_func( system, trigger_func ) -{ - level._unitriggers.system_trigger_funcs[ system ] = trigger_func; -} - -unitrigger_force_per_player_triggers( unitrigger_stub, opt_on_off ) -{ - if ( !isDefined( opt_on_off ) ) - { - opt_on_off = 1; - } - unitrigger_stub.trigger_per_player = opt_on_off; -} - -unitrigger_trigger( player ) -{ - if ( self.trigger_per_player ) - { - return self.playertrigger[ player getentitynumber() ]; - } - else - { - return self.trigger; - } -} - -unitrigger_origin() -{ - if ( isDefined( self.originfunc ) ) - { - origin = self [[ self.originfunc ]](); - } - else - { - origin = self.origin; - } - return origin; -} - -register_unitrigger_internal( unitrigger_stub, trigger_func ) -{ - if ( !isDefined( unitrigger_stub.script_unitrigger_type ) ) - { -/# - println( "Cannot register a unitrigger with no script_unitrigger_type. Ignoring." ); -#/ - return; - } - if ( isDefined( trigger_func ) ) - { - unitrigger_stub.trigger_func = trigger_func; - } - else - { - if ( isDefined( unitrigger_stub.unitrigger_system ) && isDefined( level._unitriggers.system_trigger_funcs[ unitrigger_stub.unitrigger_system ] ) ) - { - unitrigger_stub.trigger_func = level._unitriggers.system_trigger_funcs[ unitrigger_stub.unitrigger_system ]; - } - } - switch( unitrigger_stub.script_unitrigger_type ) - { - case "unitrigger_radius": - case "unitrigger_radius_use": - if ( !isDefined( unitrigger_stub.radius ) ) - { - unitrigger_stub.radius = 32; - } - if ( !isDefined( unitrigger_stub.script_height ) ) - { - unitrigger_stub.script_height = 64; - } - unitrigger_stub.test_radius_sq = ( unitrigger_stub.radius + 15 ) * ( unitrigger_stub.radius + 15 ); - break; - case "unitrigger_box": - case "unitrigger_box_use": - if ( !isDefined( unitrigger_stub.script_width ) ) - { - unitrigger_stub.script_width = 64; - } - if ( !isDefined( unitrigger_stub.script_height ) ) - { - unitrigger_stub.script_height = 64; - } - if ( !isDefined( unitrigger_stub.script_length ) ) - { - unitrigger_stub.script_length = 64; - } - box_radius = length( ( unitrigger_stub.script_width / 2, unitrigger_stub.script_length / 2, unitrigger_stub.script_height / 2 ) ); - if ( !isDefined( unitrigger_stub.radius ) || unitrigger_stub.radius < box_radius ) - { - unitrigger_stub.radius = box_radius; - } - unitrigger_stub.test_radius_sq = ( box_radius + 15 ) * ( box_radius + 15 ); - break; - default: -/# - println( "Unknown unitrigger type registered : " + unitrigger_stub.targetname + " - ignoring." ); -#/ - return; - } - level._unitriggers.trigger_stubs[ level._unitriggers.trigger_stubs.size ] = unitrigger_stub; - unitrigger_stub.registered = 1; -} - -register_unitrigger( unitrigger_stub, trigger_func ) -{ - register_unitrigger_internal( unitrigger_stub, trigger_func ); - level._unitriggers.dynamic_stubs[ level._unitriggers.dynamic_stubs.size ] = unitrigger_stub; -} - -unregister_unitrigger( unitrigger_stub ) -{ - if ( !isDefined( unitrigger_stub ) ) - { - return; - } - unitrigger_stub.registered = 0; - if ( isDefined( unitrigger_stub.trigger_per_player ) && unitrigger_stub.trigger_per_player ) - { - if ( isDefined( unitrigger_stub.playertrigger ) && unitrigger_stub.playertrigger.size > 0 ) - { - keys = getarraykeys( unitrigger_stub.playertrigger ); - _a160 = keys; - _k160 = getFirstArrayKey( _a160 ); - while ( isDefined( _k160 ) ) - { - key = _a160[ _k160 ]; - trigger = unitrigger_stub.playertrigger[ key ]; - trigger notify( "kill_trigger" ); - if ( isDefined( trigger ) ) - { - trigger delete(); - } - _k160 = getNextArrayKey( _a160, _k160 ); - } - unitrigger_stub.playertrigger = []; - } - } - else - { - if ( isDefined( unitrigger_stub.trigger ) ) - { - trigger = unitrigger_stub.trigger; - trigger notify( "kill_trigger" ); - trigger.stub.trigger = undefined; - trigger delete(); - } - } - if ( isDefined( unitrigger_stub.in_zone ) ) - { - arrayremovevalue( level.zones[ unitrigger_stub.in_zone ].unitrigger_stubs, unitrigger_stub ); - } - arrayremovevalue( level._unitriggers.trigger_stubs, unitrigger_stub ); - arrayremovevalue( level._unitriggers.dynamic_stubs, unitrigger_stub ); -} - -delay_delete_contact_ent() -{ - self.last_used_time = 0; - while ( 1 ) - { - wait 1; - if ( ( getTime() - self.last_used_time ) > 1000 ) - { - self delete(); - level._unitriggers.contact_ent = undefined; - return; - } - } -} - -register_static_unitrigger( unitrigger_stub, trigger_func, recalculate_zone ) -{ - if ( level.zones.size == 0 ) - { - unitrigger_stub.trigger_func = trigger_func; - level._unitriggers._deferredinitlist[ level._unitriggers._deferredinitlist.size ] = unitrigger_stub; - return; - } - if ( !isDefined( level._unitriggers.contact_ent ) ) - { - level._unitriggers.contact_ent = spawn( "script_origin", ( 0, 0, 1 ) ); - level._unitriggers.contact_ent thread delay_delete_contact_ent(); - } - register_unitrigger_internal( unitrigger_stub, trigger_func ); - while ( !isDefined( level._no_static_unitriggers ) ) - { - level._unitriggers.contact_ent.last_used_time = getTime(); - level._unitriggers.contact_ent.origin = unitrigger_stub.origin; - if ( isDefined( unitrigger_stub.in_zone ) && !isDefined( recalculate_zone ) ) - { - level.zones[ unitrigger_stub.in_zone ].unitrigger_stubs[ level.zones[ unitrigger_stub.in_zone ].unitrigger_stubs.size ] = unitrigger_stub; - return; - } - keys = getarraykeys( level.zones ); - i = 0; - while ( i < keys.size ) - { - if ( level._unitriggers.contact_ent maps/mp/zombies/_zm_zonemgr::entity_in_zone( keys[ i ], 1 ) ) - { - if ( !isDefined( level.zones[ keys[ i ] ].unitrigger_stubs ) ) - { - level.zones[ keys[ i ] ].unitrigger_stubs = []; - } - level.zones[ keys[ i ] ].unitrigger_stubs[ level.zones[ keys[ i ] ].unitrigger_stubs.size ] = unitrigger_stub; - unitrigger_stub.in_zone = keys[ i ]; - return; - } - i++; - } - } - level._unitriggers.dynamic_stubs[ level._unitriggers.dynamic_stubs.size ] = unitrigger_stub; - unitrigger_stub.registered = 1; -} - -reregister_unitrigger_as_dynamic( unitrigger_stub ) -{ - unregister_unitrigger( unitrigger_stub ); - register_unitrigger( unitrigger_stub, unitrigger_stub.trigger_func ); -} - -debug_unitriggers() -{ -/# - while ( 1 ) - { - while ( getDvar( #"D256F24B" ) != "" ) - { - i = 0; - while ( i < level._unitriggers.trigger_stubs.size ) - { - triggerstub = level._unitriggers.trigger_stubs[ i ]; - color = vectorScale( ( 0, 0, 1 ), 0,75 ); - if ( !isDefined( triggerstub.in_zone ) ) - { - color = vectorScale( ( 0, 0, 1 ), 0,65 ); - } - else - { - if ( level.zones[ triggerstub.in_zone ].is_active ) - { - color = ( 0, 0, 1 ); - } - } - if ( isDefined( triggerstub.trigger ) || isDefined( triggerstub.playertrigger ) && triggerstub.playertrigger.size > 0 ) - { - color = ( 0, 0, 1 ); - if ( isDefined( triggerstub.playertrigger ) && triggerstub.playertrigger.size > 0 ) - { - print3d( triggerstub.origin, triggerstub.playertrigger.size, color, 1, 1, 1 ); - } - } - origin = triggerstub unitrigger_origin(); - switch( triggerstub.script_unitrigger_type ) - { - case "unitrigger_radius": - case "unitrigger_radius_use": - if ( triggerstub.radius ) - { - circle( origin, triggerstub.radius, color, 0, 0, 1 ); - } - if ( triggerstub.script_height ) - { - line( origin, origin + ( 0, 0, triggerstub.script_height ), color, 0, 1 ); - } - break; - i++; - continue; - case "unitrigger_box": - case "unitrigger_box_use": - vec = ( triggerstub.script_width / 2, triggerstub.script_length / 2, triggerstub.script_height / 2 ); - box( origin, vec * -1, vec, triggerstub.angles[ 1 ], color, 1, 0, 1 ); - break; - i++; - continue; - } - i++; - } - } - wait 0,05; -#/ - } -} - -cleanup_trigger( trigger, player ) -{ - trigger notify( "kill_trigger" ); - if ( isDefined( trigger.stub.trigger_per_player ) && trigger.stub.trigger_per_player ) - { - } - else - { - trigger.stub.trigger = undefined; - } - trigger delete(); -} - -main() -{ - level thread debug_unitriggers(); - if ( level._unitriggers._deferredinitlist.size ) - { - i = 0; - while ( i < level._unitriggers._deferredinitlist.size ) - { - register_static_unitrigger( level._unitriggers._deferredinitlist[ i ], level._unitriggers._deferredinitlist[ i ].trigger_func ); - i++; - } - i = 0; - while ( i < level._unitriggers._deferredinitlist.size ) - { - i++; - } - level._unitriggers._deferredinitlist = undefined; - } - valid_range = 128; - valid_range_sq = valid_range * valid_range; - while ( !isDefined( level.active_zone_names ) ) - { - wait 0,1; - } - while ( 1 ) - { - active_zone_names = level.active_zone_names; - candidate_list = []; - j = 0; - while ( j < active_zone_names.size ) - { - if ( isDefined( level.zones[ active_zone_names[ j ] ].unitrigger_stubs ) ) - { - candidate_list = arraycombine( candidate_list, level.zones[ active_zone_names[ j ] ].unitrigger_stubs, 1, 0 ); - } - j++; - } - candidate_list = arraycombine( candidate_list, level._unitriggers.dynamic_stubs, 1, 0 ); - players = getplayers(); - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - if ( !is_player_valid( player ) ) - { - i++; - continue; - } - else player_origin = player.origin + vectorScale( ( 0, 0, 1 ), 35 ); - trigger = level._unitriggers.trigger_pool[ player getentitynumber() ]; - if ( isDefined( trigger ) ) - { - dst = valid_range_sq; - origin = trigger unitrigger_origin(); - dst = trigger.stub.test_radius_sq; - if ( distance2dsquared( player_origin, origin ) < dst ) - { - if ( isDefined( trigger.reassess_time ) ) - { - trigger.reassess_time -= 0,05; - if ( trigger.reassess_time > 0 ) - { - i++; - continue; - } - else } - else } - else cleanup_trigger( trigger, player ); - } - closest = get_closest_unitriggers( player_origin, candidate_list, valid_range ); - index = 0; - last_trigger = undefined; - while ( index < closest.size ) - { - while ( isDefined( closest[ index ].registered ) && !closest[ index ].registered ) - { - index++; - } - if ( isDefined( last_trigger ) ) - { - cleanup_trigger( last_trigger, player ); - } - if ( isDefined( closest[ index ].trigger_per_player ) && closest[ index ].trigger_per_player ) - { - if ( !isDefined( closest[ index ].playertrigger ) ) - { - closest[ index ].playertrigger = []; - } - if ( !isDefined( closest[ index ].playertrigger[ player getentitynumber() ] ) ) - { - level._unitriggers.trigger_pool[ player getentitynumber() ] = build_trigger_from_unitrigger_stub( closest[ index ], player ); - level._unitriggers.trigger_pool[ player getentitynumber() ].parent_player = player; - if ( !isDefined( closest[ index ].prompt_and_visibility_func ) || level._unitriggers.trigger_pool[ player getentitynumber() ] [[ closest[ index ].prompt_and_visibility_func ]]( player ) ) - { - level._unitriggers.trigger_pool[ player getentitynumber() ] thread trigger_thread( closest[ index ].trigger_func ); - break; - } - else last_trigger = level._unitriggers.trigger_pool[ player getentitynumber() ]; - level._unitriggers.trigger_pool[ player getentitynumber() ].reassess_time = 1; - } - index++; - continue; - } - else - { - if ( !isDefined( closest[ index ].trigger ) ) - { - level._unitriggers.trigger_pool[ player getentitynumber() ] = build_trigger_from_unitrigger_stub( closest[ index ] ); - level._unitriggers.trigger_pool[ player getentitynumber() ].parent_player = player; - if ( !isDefined( closest[ index ].prompt_and_visibility_func ) || level._unitriggers.trigger_pool[ player getentitynumber() ] [[ closest[ index ].prompt_and_visibility_func ]]( player ) ) - { - level._unitriggers.trigger_pool[ player getentitynumber() ] thread trigger_thread( closest[ index ].trigger_func ); - break; - } - else last_trigger = level._unitriggers.trigger_pool[ player getentitynumber() ]; - level._unitriggers.trigger_pool[ player getentitynumber() ].reassess_time = 1; - } - } - index++; - wait 0,05; - } - wait 0,05; - i++; - } - wait 0,05; - } -} - -run_visibility_function_for_all_triggers() -{ - if ( !isDefined( self.prompt_and_visibility_func ) ) - { - return; - } - if ( isDefined( self.trigger_per_player ) && self.trigger_per_player ) - { - if ( !isDefined( self.playertrigger ) ) - { - return; - } - players = getplayers(); - i = 0; - while ( i < players.size ) - { - if ( isDefined( self.playertrigger[ players[ i ] getentitynumber() ] ) ) - { - self.playertrigger[ players[ i ] getentitynumber() ] [[ self.prompt_and_visibility_func ]]( players[ i ] ); - } - i++; - } - } - else if ( isDefined( self.trigger ) ) - { - self.trigger [[ self.prompt_and_visibility_func ]]( getplayers()[ 0 ] ); - } -} - -build_trigger_from_unitrigger_stub( stub, player ) -{ - radius = stub.radius; - if ( !isDefined( radius ) ) - { - radius = 64; - } - script_height = stub.script_height; - if ( !isDefined( script_height ) ) - { - script_height = 64; - } - script_width = stub.script_width; - if ( !isDefined( script_width ) ) - { - script_width = 64; - } - script_length = stub.script_length; - if ( !isDefined( script_length ) ) - { - script_length = 64; - } - trigger = undefined; - origin = stub unitrigger_origin(); - switch( stub.script_unitrigger_type ) - { - case "unitrigger_radius": - trigger = spawn( "trigger_radius", origin, 0, radius, script_height ); - break; - case "unitrigger_radius_use": - trigger = spawn( "trigger_radius_use", origin, 0, radius, script_height ); - break; - case "unitrigger_box": - trigger = spawn( "trigger_box", origin, 0, script_width, script_length, script_height ); - break; - case "unitrigger_box_use": - trigger = spawn( "trigger_box_use", origin, 0, script_width, script_length, script_height ); - break; - } - if ( isDefined( trigger ) ) - { - if ( isDefined( stub.angles ) ) - { - trigger.angles = stub.angles; - } - if ( isDefined( stub.onspawnfunc ) ) - { - stub [[ stub.onspawnfunc ]]( trigger ); - } - if ( isDefined( stub.cursor_hint ) ) - { - trigger setcursorhint( stub.cursor_hint ); - } - trigger triggerignoreteam(); - if ( isDefined( stub.require_look_at ) && stub.require_look_at ) - { - trigger usetriggerrequirelookat(); - } - if ( isDefined( stub.hint_string ) ) - { - if ( isDefined( stub.cost ) ) - { - trigger sethintstring( stub.hint_string, stub.cost ); - } - else - { - trigger sethintstring( stub.hint_string ); - } - } - trigger.stub = stub; - } - copy_zombie_keys_onto_trigger( trigger, stub ); - if ( isDefined( stub.trigger_per_player ) && stub.trigger_per_player ) - { - if ( isDefined( trigger ) ) - { - trigger setinvisibletoall(); - trigger setvisibletoplayer( player ); - } - if ( !isDefined( stub.playertrigger ) ) - { - stub.playertrigger = []; - } - stub.playertrigger[ player getentitynumber() ] = trigger; - } - else - { - stub.trigger = trigger; - } - return trigger; -} - -copy_zombie_keys_onto_trigger( trig, stub ) -{ - trig.script_noteworthy = stub.script_noteworthy; - trig.targetname = stub.targetname; - trig.target = stub.target; - trig.zombie_weapon_upgrade = stub.zombie_weapon_upgrade; - trig.clientfieldname = stub.clientfieldname; - trig.usetime = stub.usetime; -} - -trigger_thread( trigger_func ) -{ - self endon( "kill_trigger" ); - if ( isDefined( trigger_func ) ) - { - self [[ trigger_func ]](); - } -} - -get_closest_unitrigger_index( org, array, dist ) -{ - if ( !isDefined( dist ) ) - { - dist = 9999999; - } - distsq = dist * dist; - if ( array.size < 1 ) - { - return; - } - index = undefined; - i = 0; - while ( i < array.size ) - { - origin = array[ i ] unitrigger_origin(); - radius_sq = array[ i ].test_radius_sq; - newdistsq = distance2dsquared( origin, org ); - if ( newdistsq >= radius_sq ) - { - i++; - continue; - } - else if ( newdistsq >= distsq ) - { - i++; - continue; - } - else - { - distsq = newdistsq; - index = i; - } - i++; - } - return index; -} - -get_closest_unitriggers( org, array, dist ) -{ - triggers = []; - if ( !isDefined( dist ) ) - { - dist = 9999999; - } - distsq = dist * dist; - if ( array.size < 1 ) - { - return triggers; - } - index = undefined; - i = 0; - while ( i < array.size ) - { - if ( !isDefined( array[ i ] ) ) - { - i++; - continue; - } - else origin = array[ i ] unitrigger_origin(); - radius_sq = array[ i ].test_radius_sq; - newdistsq = distance2dsquared( origin, org ); - if ( newdistsq >= radius_sq ) - { - i++; - continue; - } - else if ( abs( origin[ 2 ] - org[ 2 ] ) > 42 ) - { - i++; - continue; - } - else - { - array[ i ].dsquared = newdistsq; - j = 0; - while ( j < triggers.size && newdistsq > triggers[ j ].dsquared ) - { - j++; - } - arrayinsert( triggers, array[ i ], j ); - if ( ( i % 10 ) == 9 ) - { - wait 0,05; - } - } - i++; - } - return triggers; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_utility.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_utility.gsc deleted file mode 100644 index 1ce335d..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_utility.gsc +++ /dev/null @@ -1,5510 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/gametypes_zm/_hud_message; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_power; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_server_throttle; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/animscripts/zm_run; -#include common_scripts/utility; -#include maps/mp/_utility; - -init_utility() -{ -} - -is_classic() -{ - var = getDvar( "ui_zm_gamemodegroup" ); - if ( var == "zclassic" ) - { - return 1; - } - return 0; -} - -is_standard() -{ - var = getDvar( "ui_gametype" ); - if ( var == "zstandard" ) - { - return 1; - } - return 0; -} - -convertsecondstomilliseconds( seconds ) -{ - return seconds * 1000; -} - -is_player() -{ - if ( !isplayer( self ) ) - { - if ( isDefined( self.pers ) ) - { - if ( isDefined( self.pers[ "isBot" ] ) ) - { - return self.pers[ "isBot" ]; - } - } - } -} - -lerp( chunk ) -{ - link = spawn( "script_origin", self getorigin() ); - link.angles = self.first_node.angles; - self linkto( link ); - link rotateto( self.first_node.angles, level._contextual_grab_lerp_time ); - link moveto( self.attacking_spot, level._contextual_grab_lerp_time ); - link waittill_multiple( "rotatedone", "movedone" ); - self unlink(); - link delete(); - return; -} - -clear_mature_blood() -{ - blood_patch = getentarray( "mature_blood", "targetname" ); - if ( is_mature() ) - { - return; - } - while ( isDefined( blood_patch ) ) - { - i = 0; - while ( i < blood_patch.size ) - { - blood_patch[ i ] delete(); - i++; - } - } -} - -recalc_zombie_array() -{ -} - -clear_all_corpses() -{ - corpse_array = getcorpsearray(); - i = 0; - while ( i < corpse_array.size ) - { - if ( isDefined( corpse_array[ i ] ) ) - { - corpse_array[ i ] delete(); - } - i++; - } -} - -get_current_corpse_count() -{ - corpse_array = getcorpsearray(); - if ( isDefined( corpse_array ) ) - { - return corpse_array.size; - } - return 0; -} - -get_current_actor_count() -{ - count = 0; - actors = getaispeciesarray( level.zombie_team, "all" ); - if ( isDefined( actors ) ) - { - count += actors.size; - } - count += get_current_corpse_count(); - return count; -} - -get_current_zombie_count() -{ - enemies = get_round_enemy_array(); - return enemies.size; -} - -get_round_enemy_array() -{ - enemies = []; - valid_enemies = []; - enemies = getaispeciesarray( level.zombie_team, "all" ); - i = 0; - while ( i < enemies.size ) - { - if ( isDefined( enemies[ i ].ignore_enemy_count ) && enemies[ i ].ignore_enemy_count ) - { - i++; - continue; - } - else - { - valid_enemies[ valid_enemies.size ] = enemies[ i ]; - } - i++; - } - return valid_enemies; -} - -init_zombie_run_cycle() -{ - if ( isDefined( level.speed_change_round ) ) - { - if ( level.round_number >= level.speed_change_round ) - { - speed_percent = 0,2 + ( ( level.round_number - level.speed_change_round ) * 0,2 ); - speed_percent = min( speed_percent, 1 ); - change_round_max = int( level.speed_change_max * speed_percent ); - change_left = change_round_max - level.speed_change_num; - if ( change_left == 0 ) - { - self set_zombie_run_cycle(); - return; - } - change_speed = randomint( 100 ); - if ( change_speed > 80 ) - { - self change_zombie_run_cycle(); - return; - } - zombie_count = get_current_zombie_count(); - zombie_left = level.zombie_ai_limit - zombie_count; - if ( zombie_left == change_left ) - { - self change_zombie_run_cycle(); - return; - } - } - } - self set_zombie_run_cycle(); -} - -change_zombie_run_cycle() -{ - level.speed_change_num++; - if ( level.gamedifficulty == 0 ) - { - self set_zombie_run_cycle( "sprint" ); - } - else - { - self set_zombie_run_cycle( "walk" ); - } - self thread speed_change_watcher(); -} - -speed_change_watcher() -{ - self waittill( "death" ); - if ( level.speed_change_num > 0 ) - { - level.speed_change_num--; - - } -} - -set_zombie_run_cycle( new_move_speed ) -{ - self.zombie_move_speed_original = self.zombie_move_speed; - if ( isDefined( new_move_speed ) ) - { - self.zombie_move_speed = new_move_speed; - } - else if ( level.gamedifficulty == 0 ) - { - self set_run_speed_easy(); - } - else - { - self set_run_speed(); - } - self maps/mp/animscripts/zm_run::needsupdate(); - self.deathanim = self maps/mp/animscripts/zm_utility::append_missing_legs_suffix( "zm_death" ); -} - -set_run_speed() -{ - rand = randomintrange( level.zombie_move_speed, level.zombie_move_speed + 35 ); - if ( rand <= 35 ) - { - self.zombie_move_speed = "walk"; - } - else if ( rand <= 70 ) - { - self.zombie_move_speed = "run"; - } - else - { - self.zombie_move_speed = "sprint"; - } -} - -set_run_speed_easy() -{ - rand = randomintrange( level.zombie_move_speed, level.zombie_move_speed + 25 ); - if ( rand <= 35 ) - { - self.zombie_move_speed = "walk"; - } - else - { - self.zombie_move_speed = "run"; - } -} - -spawn_zombie( spawner, target_name, spawn_point, round_number ) -{ - if ( !isDefined( spawner ) ) - { -/# - println( "ZM >> spawn_zombie - NO SPAWNER DEFINED" ); -#/ - return undefined; - } - while ( getfreeactorcount() < 1 ) - { - wait 0,05; - } - spawner.script_moveoverride = 1; - if ( isDefined( spawner.script_forcespawn ) && spawner.script_forcespawn ) - { - guy = spawner spawnactor(); - if ( isDefined( level.giveextrazombies ) ) - { - guy [[ level.giveextrazombies ]](); - } - guy enableaimassist(); - if ( isDefined( round_number ) ) - { - guy._starting_round_number = round_number; - } - guy.aiteam = level.zombie_team; - guy clearentityowner(); - level.zombiemeleeplayercounter = 0; - guy thread run_spawn_functions(); - guy forceteleport( spawner.origin ); - guy show(); - } - spawner.count = 666; - if ( !spawn_failed( guy ) ) - { - if ( isDefined( target_name ) ) - { - guy.targetname = target_name; - } - return guy; - } - return undefined; -} - -run_spawn_functions() -{ - self endon( "death" ); - waittillframeend; - i = 0; - while ( i < level.spawn_funcs[ self.team ].size ) - { - func = level.spawn_funcs[ self.team ][ i ]; - single_thread( self, func[ "function" ], func[ "param1" ], func[ "param2" ], func[ "param3" ], func[ "param4" ], func[ "param5" ] ); - i++; - } - if ( isDefined( self.spawn_funcs ) ) - { - i = 0; - while ( i < self.spawn_funcs.size ) - { - func = self.spawn_funcs[ i ]; - single_thread( self, func[ "function" ], func[ "param1" ], func[ "param2" ], func[ "param3" ], func[ "param4" ] ); - i++; - } -/# - self.saved_spawn_functions = self.spawn_funcs; -#/ - self.spawn_funcs = undefined; -/# - self.spawn_funcs = self.saved_spawn_functions; - self.saved_spawn_functions = undefined; -#/ - self.spawn_funcs = undefined; - } -} - -create_simple_hud( client, team ) -{ - if ( isDefined( team ) ) - { - hud = newteamhudelem( team ); - hud.team = team; - } - else if ( isDefined( client ) ) - { - hud = newclienthudelem( client ); - } - else - { - hud = newhudelem(); - } - level.hudelem_count++; - hud.foreground = 1; - hud.sort = 1; - hud.hidewheninmenu = 0; - return hud; -} - -destroy_hud() -{ - level.hudelem_count--; - - self destroy(); -} - -all_chunks_intact( barrier, barrier_chunks ) -{ - if ( isDefined( barrier.zbarrier ) ) - { - pieces = barrier.zbarrier getzbarrierpieceindicesinstate( "closed" ); - if ( pieces.size != barrier.zbarrier getnumzbarrierpieces() ) - { - return 0; - } - } - else - { - i = 0; - while ( i < barrier_chunks.size ) - { - if ( barrier_chunks[ i ] get_chunk_state() != "repaired" ) - { - return 0; - } - i++; - } - } - return 1; -} - -no_valid_repairable_boards( barrier, barrier_chunks ) -{ - if ( isDefined( barrier.zbarrier ) ) - { - pieces = barrier.zbarrier getzbarrierpieceindicesinstate( "open" ); - if ( pieces.size ) - { - return 0; - } - } - else - { - i = 0; - while ( i < barrier_chunks.size ) - { - if ( barrier_chunks[ i ] get_chunk_state() == "destroyed" ) - { - return 0; - } - i++; - } - } - return 1; -} - -is_survival() -{ - var = getDvar( "ui_zm_gamemodegroup" ); - if ( var == "zsurvival" ) - { - return 1; - } - return 0; -} - -is_encounter() -{ - if ( isDefined( level._is_encounter ) && level._is_encounter ) - { - return 1; - } - var = getDvar( "ui_zm_gamemodegroup" ); - if ( var == "zencounter" ) - { - level._is_encounter = 1; - return 1; - } - return 0; -} - -all_chunks_destroyed( barrier, barrier_chunks ) -{ - if ( isDefined( barrier.zbarrier ) ) - { - pieces = arraycombine( barrier.zbarrier getzbarrierpieceindicesinstate( "open" ), barrier.zbarrier getzbarrierpieceindicesinstate( "opening" ), 1, 0 ); - if ( pieces.size != barrier.zbarrier getnumzbarrierpieces() ) - { - return 0; - } - } - else - { - while ( isDefined( barrier_chunks ) ) - { -/# - assert( isDefined( barrier_chunks ), "_zm_utility::all_chunks_destroyed - Barrier chunks undefined" ); -#/ - i = 0; - while ( i < barrier_chunks.size ) - { - if ( barrier_chunks[ i ] get_chunk_state() != "destroyed" ) - { - return 0; - } - i++; - } - } - } - return 1; -} - -check_point_in_playable_area( origin ) -{ - playable_area = getentarray( "player_volume", "script_noteworthy" ); - check_model = spawn( "script_model", origin + vectorScale( ( 0, 0, 1 ), 40 ) ); - valid_point = 0; - i = 0; - while ( i < playable_area.size ) - { - if ( check_model istouching( playable_area[ i ] ) ) - { - valid_point = 1; - } - i++; - } - check_model delete(); - return valid_point; -} - -check_point_in_enabled_zone( origin, zone_is_active, player_zones ) -{ - if ( !isDefined( player_zones ) ) - { - player_zones = getentarray( "player_volume", "script_noteworthy" ); - } - if ( !isDefined( level.zones ) || !isDefined( player_zones ) ) - { - return 1; - } - scr_org = spawn( "script_origin", origin + vectorScale( ( 0, 0, 1 ), 40 ) ); - one_valid_zone = 0; - i = 0; - while ( i < player_zones.size ) - { - if ( scr_org istouching( player_zones[ i ] ) ) - { - zone = level.zones[ player_zones[ i ].targetname ]; - if ( isDefined( zone ) && isDefined( zone.is_enabled ) && zone.is_enabled ) - { - if ( isDefined( zone_is_active ) && zone_is_active == 1 && isDefined( zone.is_active ) && !zone.is_active ) - { - i++; - continue; - } - else - { - one_valid_zone = 1; - break; - } - } - } - else - { - i++; - } - } - scr_org delete(); - return one_valid_zone; -} - -round_up_to_ten( score ) -{ - new_score = score - ( score % 10 ); - if ( new_score < score ) - { - new_score += 10; - } - return new_score; -} - -round_up_score( score, value ) -{ - score = int( score ); - new_score = score - ( score % value ); - if ( new_score < score ) - { - new_score += value; - } - return new_score; -} - -random_tan() -{ - rand = randomint( 100 ); - if ( isDefined( level.char_percent_override ) ) - { - percentnotcharred = level.char_percent_override; - } - else - { - percentnotcharred = 65; - } -} - -places_before_decimal( num ) -{ - abs_num = abs( num ); - count = 0; - while ( 1 ) - { - abs_num *= 0,1; - count += 1; - if ( abs_num < 1 ) - { - return count; - } - } -} - -create_zombie_point_of_interest( attract_dist, num_attractors, added_poi_value, start_turned_on, initial_attract_func, arrival_attract_func, poi_team ) -{ - if ( !isDefined( added_poi_value ) ) - { - self.added_poi_value = 0; - } - else - { - self.added_poi_value = added_poi_value; - } - if ( !isDefined( start_turned_on ) ) - { - start_turned_on = 1; - } - self.script_noteworthy = "zombie_poi"; - self.poi_active = start_turned_on; - if ( isDefined( attract_dist ) ) - { - self.poi_radius = attract_dist * attract_dist; - } - else - { - self.poi_radius = undefined; - } - self.num_poi_attracts = num_attractors; - self.attract_to_origin = 1; - self.attractor_array = []; - self.initial_attract_func = undefined; - self.arrival_attract_func = undefined; - if ( isDefined( poi_team ) ) - { - self._team = poi_team; - } - if ( isDefined( initial_attract_func ) ) - { - self.initial_attract_func = initial_attract_func; - } - if ( isDefined( arrival_attract_func ) ) - { - self.arrival_attract_func = arrival_attract_func; - } -} - -create_zombie_point_of_interest_attractor_positions( num_attract_dists, diff_per_dist, attractor_width ) -{ - self endon( "death" ); - forward = ( 0, 0, 1 ); - if ( !isDefined( self.num_poi_attracts ) || isDefined( self.script_noteworthy ) && self.script_noteworthy != "zombie_poi" ) - { - return; - } - if ( !isDefined( num_attract_dists ) ) - { - num_attract_dists = 4; - } - if ( !isDefined( diff_per_dist ) ) - { - diff_per_dist = 45; - } - if ( !isDefined( attractor_width ) ) - { - attractor_width = 45; - } - self.attract_to_origin = 0; - self.num_attract_dists = num_attract_dists; - self.last_index = []; - i = 0; - while ( i < num_attract_dists ) - { - self.last_index[ i ] = -1; - i++; - } - self.attract_dists = []; - i = 0; - while ( i < self.num_attract_dists ) - { - self.attract_dists[ i ] = diff_per_dist * ( i + 1 ); - i++; - } - max_positions = []; - i = 0; - while ( i < self.num_attract_dists ) - { - max_positions[ i ] = int( ( 6,28 * self.attract_dists[ i ] ) / attractor_width ); - i++; - } - num_attracts_per_dist = self.num_poi_attracts / self.num_attract_dists; - self.max_attractor_dist = self.attract_dists[ self.attract_dists.size - 1 ] * 1,1; - diff = 0; - actual_num_positions = []; - i = 0; - while ( i < self.num_attract_dists ) - { - if ( num_attracts_per_dist > ( max_positions[ i ] + diff ) ) - { - actual_num_positions[ i ] = max_positions[ i ]; - diff += num_attracts_per_dist - max_positions[ i ]; - i++; - continue; - } - else - { - actual_num_positions[ i ] = num_attracts_per_dist + diff; - diff = 0; - } - i++; - } - self.attractor_positions = []; - failed = 0; - angle_offset = 0; - prev_last_index = -1; - j = 0; - while ( j < 4 ) - { - if ( ( actual_num_positions[ j ] + failed ) < max_positions[ j ] ) - { - actual_num_positions[ j ] += failed; - failed = 0; - } - else - { - if ( actual_num_positions[ j ] < max_positions[ j ] ) - { - actual_num_positions[ j ] = max_positions[ j ]; - failed = max_positions[ j ] - actual_num_positions[ j ]; - } - } - failed += self generated_radius_attract_positions( forward, angle_offset, actual_num_positions[ j ], self.attract_dists[ j ] ); - angle_offset += 15; - self.last_index[ j ] = int( ( actual_num_positions[ j ] - failed ) + prev_last_index ); - prev_last_index = self.last_index[ j ]; - j++; - } - self notify( "attractor_positions_generated" ); - level notify( "attractor_positions_generated" ); -} - -generated_radius_attract_positions( forward, offset, num_positions, attract_radius ) -{ - self endon( "death" ); - epsilon = 0,1; - failed = 0; - degs_per_pos = 360 / num_positions; - i = offset; - while ( i < ( 360 + offset ) ) - { - altforward = forward * attract_radius; - rotated_forward = ( ( cos( i ) * altforward[ 0 ] ) - ( sin( i ) * altforward[ 1 ] ), ( sin( i ) * altforward[ 0 ] ) + ( cos( i ) * altforward[ 1 ] ), altforward[ 2 ] ); - if ( isDefined( level.poi_positioning_func ) ) - { - pos = [[ level.poi_positioning_func ]]( self.origin, rotated_forward ); - } - else if ( isDefined( level.use_alternate_poi_positioning ) && level.use_alternate_poi_positioning ) - { - pos = maps/mp/zombies/_zm_server_throttle::server_safe_ground_trace( "poi_trace", 10, self.origin + rotated_forward + vectorScale( ( 0, 0, 1 ), 10 ) ); - } - else - { - pos = maps/mp/zombies/_zm_server_throttle::server_safe_ground_trace( "poi_trace", 10, self.origin + rotated_forward + vectorScale( ( 0, 0, 1 ), 100 ) ); - } - if ( !isDefined( pos ) ) - { - failed++; - } - else if ( isDefined( level.use_alternate_poi_positioning ) && level.use_alternate_poi_positioning ) - { - if ( isDefined( self ) && isDefined( self.origin ) ) - { - if ( self.origin[ 2 ] >= ( pos[ 2 ] - epsilon ) && ( self.origin[ 2 ] - pos[ 2 ] ) <= 150 ) - { - pos_array = []; - pos_array[ 0 ] = pos; - pos_array[ 1 ] = self; - self.attractor_positions[ self.attractor_positions.size ] = pos_array; - } - } - else - { - failed++; - } - } - else - { - if ( abs( pos[ 2 ] - self.origin[ 2 ] ) < 60 ) - { - pos_array = []; - pos_array[ 0 ] = pos; - pos_array[ 1 ] = self; - self.attractor_positions[ self.attractor_positions.size ] = pos_array; - break; - } - else - { - failed++; - } - } - i += degs_per_pos; - } - return failed; -} - -debug_draw_attractor_positions() -{ -/# - while ( 1 ) - { - for ( ;; ) - { - while ( !isDefined( self.attractor_positions ) ) - { - wait 0,05; - } - } - i = 0; - while ( i < self.attractor_positions.size ) - { - line( self.origin, self.attractor_positions[ i ][ 0 ], ( 0, 0, 1 ), 1, 1 ); - i++; - } - wait 0,05; - if ( !isDefined( self ) ) - { - return; - } -#/ - } -} - -get_zombie_point_of_interest( origin, poi_array ) -{ - if ( isDefined( self.ignore_all_poi ) && self.ignore_all_poi ) - { - return undefined; - } - curr_radius = undefined; - if ( isDefined( poi_array ) ) - { - ent_array = poi_array; - } - else - { - ent_array = getentarray( "zombie_poi", "script_noteworthy" ); - } - best_poi = undefined; - position = undefined; - best_dist = 100000000; - i = 0; - while ( i < ent_array.size ) - { - if ( !isDefined( ent_array[ i ].poi_active ) || !ent_array[ i ].poi_active ) - { - i++; - continue; - } - else - { - if ( isDefined( self.ignore_poi_targetname ) && self.ignore_poi_targetname.size > 0 ) - { - if ( isDefined( ent_array[ i ].targetname ) ) - { - ignore = 0; - j = 0; - while ( j < self.ignore_poi_targetname.size ) - { - if ( ent_array[ i ].targetname == self.ignore_poi_targetname[ j ] ) - { - ignore = 1; - break; - } - else - { - j++; - } - } - if ( ignore ) - { - i++; - continue; - } - } - } - else if ( isDefined( self.ignore_poi ) && self.ignore_poi.size > 0 ) - { - ignore = 0; - j = 0; - while ( j < self.ignore_poi.size ) - { - if ( self.ignore_poi[ j ] == ent_array[ i ] ) - { - ignore = 1; - break; - } - else - { - j++; - } - } - if ( ignore ) - { - i++; - continue; - } - } - else - { - dist = distancesquared( origin, ent_array[ i ].origin ); - dist -= ent_array[ i ].added_poi_value; - if ( isDefined( ent_array[ i ].poi_radius ) ) - { - curr_radius = ent_array[ i ].poi_radius; - } - if ( isDefined( curr_radius ) && dist < curr_radius && dist < best_dist && ent_array[ i ] can_attract( self ) ) - { - best_poi = ent_array[ i ]; - best_dist = dist; - } - } - } - i++; - } - if ( isDefined( best_poi ) ) - { - if ( isDefined( best_poi._team ) ) - { - if ( isDefined( self._race_team ) && self._race_team != best_poi._team ) - { - return undefined; - } - } - if ( isDefined( best_poi._new_ground_trace ) && best_poi._new_ground_trace ) - { - position = []; - position[ 0 ] = groundpos_ignore_water_new( best_poi.origin + vectorScale( ( 0, 0, 1 ), 100 ) ); - position[ 1 ] = self; - } - else - { - if ( isDefined( best_poi.attract_to_origin ) && best_poi.attract_to_origin ) - { - position = []; - position[ 0 ] = groundpos( best_poi.origin + vectorScale( ( 0, 0, 1 ), 100 ) ); - position[ 1 ] = self; - } - else - { - position = self add_poi_attractor( best_poi ); - } - } - if ( isDefined( best_poi.initial_attract_func ) ) - { - self thread [[ best_poi.initial_attract_func ]]( best_poi ); - } - if ( isDefined( best_poi.arrival_attract_func ) ) - { - self thread [[ best_poi.arrival_attract_func ]]( best_poi ); - } - } - return position; -} - -activate_zombie_point_of_interest() -{ - if ( self.script_noteworthy != "zombie_poi" ) - { - return; - } - self.poi_active = 1; -} - -deactivate_zombie_point_of_interest() -{ - if ( self.script_noteworthy != "zombie_poi" ) - { - return; - } - i = 0; - while ( i < self.attractor_array.size ) - { - self.attractor_array[ i ] notify( "kill_poi" ); - i++; - } - self.attractor_array = []; - self.claimed_attractor_positions = []; - self.poi_active = 0; -} - -assign_zombie_point_of_interest( origin, poi ) -{ - position = undefined; - doremovalthread = 0; - if ( isDefined( poi ) && poi can_attract( self ) ) - { - if ( !isDefined( poi.attractor_array ) || isDefined( poi.attractor_array ) && array_check_for_dupes( poi.attractor_array, self ) ) - { - doremovalthread = 1; - } - position = self add_poi_attractor( poi ); - if ( isDefined( position ) && doremovalthread && !array_check_for_dupes( poi.attractor_array, self ) ) - { - self thread update_on_poi_removal( poi ); - } - } - return position; -} - -remove_poi_attractor( zombie_poi ) -{ - if ( !isDefined( zombie_poi.attractor_array ) ) - { - return; - } - i = 0; - while ( i < zombie_poi.attractor_array.size ) - { - if ( zombie_poi.attractor_array[ i ] == self ) - { - self notify( "kill_poi" ); - arrayremovevalue( zombie_poi.attractor_array, zombie_poi.attractor_array[ i ] ); - arrayremovevalue( zombie_poi.claimed_attractor_positions, zombie_poi.claimed_attractor_positions[ i ] ); - } - i++; - } -} - -array_check_for_dupes_using_compare( array, single, is_equal_fn ) -{ - i = 0; - while ( i < array.size ) - { - if ( [[ is_equal_fn ]]( array[ i ], single ) ) - { - return 0; - } - i++; - } - return 1; -} - -poi_locations_equal( loc1, loc2 ) -{ - return loc1[ 0 ] == loc2[ 0 ]; -} - -add_poi_attractor( zombie_poi ) -{ - if ( !isDefined( zombie_poi ) ) - { - return; - } - if ( !isDefined( zombie_poi.attractor_array ) ) - { - zombie_poi.attractor_array = []; - } - if ( array_check_for_dupes( zombie_poi.attractor_array, self ) ) - { - if ( !isDefined( zombie_poi.claimed_attractor_positions ) ) - { - zombie_poi.claimed_attractor_positions = []; - } - if ( !isDefined( zombie_poi.attractor_positions ) || zombie_poi.attractor_positions.size <= 0 ) - { - return undefined; - } - start = -1; - end = -1; - last_index = -1; - i = 0; - while ( i < 4 ) - { - if ( zombie_poi.claimed_attractor_positions.size < zombie_poi.last_index[ i ] ) - { - start = last_index + 1; - end = zombie_poi.last_index[ i ]; - break; - } - else - { - last_index = zombie_poi.last_index[ i ]; - i++; - } - } - best_dist = 100000000; - best_pos = undefined; - if ( start < 0 ) - { - start = 0; - } - if ( end < 0 ) - { - return undefined; - } - i = int( start ); - while ( i <= int( end ) ) - { - if ( !isDefined( zombie_poi.attractor_positions[ i ] ) ) - { - i++; - continue; - } - else - { - if ( array_check_for_dupes_using_compare( zombie_poi.claimed_attractor_positions, zombie_poi.attractor_positions[ i ], ::poi_locations_equal ) ) - { - if ( isDefined( zombie_poi.attractor_positions[ i ][ 0 ] ) && isDefined( self.origin ) ) - { - dist = distancesquared( zombie_poi.attractor_positions[ i ][ 0 ], self.origin ); - if ( dist < best_dist || !isDefined( best_pos ) ) - { - best_dist = dist; - best_pos = zombie_poi.attractor_positions[ i ]; - } - } - } - } - i++; - } - if ( !isDefined( best_pos ) ) - { - return undefined; - } - zombie_poi.attractor_array[ zombie_poi.attractor_array.size ] = self; - self thread update_poi_on_death( zombie_poi ); - zombie_poi.claimed_attractor_positions[ zombie_poi.claimed_attractor_positions.size ] = best_pos; - return best_pos; - } - else - { - i = 0; - while ( i < zombie_poi.attractor_array.size ) - { - if ( zombie_poi.attractor_array[ i ] == self ) - { - if ( isDefined( zombie_poi.claimed_attractor_positions ) && isDefined( zombie_poi.claimed_attractor_positions[ i ] ) ) - { - return zombie_poi.claimed_attractor_positions[ i ]; - } - } - i++; - } - } - return undefined; -} - -can_attract( attractor ) -{ - if ( !isDefined( self.attractor_array ) ) - { - self.attractor_array = []; - } - if ( isDefined( self.attracted_array ) && !isinarray( self.attracted_array, attractor ) ) - { - return 0; - } - if ( !array_check_for_dupes( self.attractor_array, attractor ) ) - { - return 1; - } - if ( isDefined( self.num_poi_attracts ) && self.attractor_array.size >= self.num_poi_attracts ) - { - return 0; - } - return 1; -} - -update_poi_on_death( zombie_poi ) -{ - self endon( "kill_poi" ); - self waittill( "death" ); - self remove_poi_attractor( zombie_poi ); -} - -update_on_poi_removal( zombie_poi ) -{ - zombie_poi waittill( "death" ); - if ( !isDefined( zombie_poi.attractor_array ) ) - { - return; - } - i = 0; - while ( i < zombie_poi.attractor_array.size ) - { - if ( zombie_poi.attractor_array[ i ] == self ) - { - arrayremoveindex( zombie_poi.attractor_array, i ); - arrayremoveindex( zombie_poi.claimed_attractor_positions, i ); - } - i++; - } -} - -invalidate_attractor_pos( attractor_pos, zombie ) -{ - if ( !isDefined( self ) || !isDefined( attractor_pos ) ) - { - wait 0,1; - return undefined; - } - if ( isDefined( self.attractor_positions ) && !array_check_for_dupes_using_compare( self.attractor_positions, attractor_pos, ::poi_locations_equal ) ) - { - index = 0; - i = 0; - while ( i < self.attractor_positions.size ) - { - if ( poi_locations_equal( self.attractor_positions[ i ], attractor_pos ) ) - { - index = i; - } - i++; - } - i = 0; - while ( i < self.last_index.size ) - { - if ( index <= self.last_index[ i ] ) - { - self.last_index[ i ]--; - - } - i++; - } - arrayremovevalue( self.attractor_array, zombie ); - arrayremovevalue( self.attractor_positions, attractor_pos ); - i = 0; - while ( i < self.claimed_attractor_positions.size ) - { - if ( self.claimed_attractor_positions[ i ][ 0 ] == attractor_pos[ 0 ] ) - { - arrayremovevalue( self.claimed_attractor_positions, self.claimed_attractor_positions[ i ] ); - } - i++; - } - } - else wait 0,1; - return get_zombie_point_of_interest( zombie.origin ); -} - -remove_poi_from_ignore_list( poi ) -{ - while ( isDefined( self.ignore_poi ) && self.ignore_poi.size > 0 ) - { - i = 0; - while ( i < self.ignore_poi.size ) - { - if ( self.ignore_poi[ i ] == poi ) - { - arrayremovevalue( self.ignore_poi, self.ignore_poi[ i ] ); - return; - } - i++; - } - } -} - -add_poi_to_ignore_list( poi ) -{ - if ( !isDefined( self.ignore_poi ) ) - { - self.ignore_poi = []; - } - add_poi = 1; - while ( self.ignore_poi.size > 0 ) - { - i = 0; - while ( i < self.ignore_poi.size ) - { - if ( self.ignore_poi[ i ] == poi ) - { - add_poi = 0; - break; - } - else - { - i++; - } - } - } - if ( add_poi ) - { - self.ignore_poi[ self.ignore_poi.size ] = poi; - } -} - -get_path_length_to_enemy( enemy ) -{ - path_length = self calcpathlength( enemy.origin ); - return path_length; -} - -get_closest_player_using_paths( origin, players ) -{ - min_length_to_player = 9999999; - player_to_return = undefined; - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - length_to_player = get_path_length_to_enemy( player ); - if ( isDefined( level.validate_enemy_path_length ) ) - { - if ( length_to_player == 0 ) - { - valid = self thread [[ level.validate_enemy_path_length ]]( player ); - if ( !valid ) - { - i++; - continue; - } - } - } - else - { - if ( length_to_player < min_length_to_player ) - { - min_length_to_player = length_to_player; - player_to_return = player; - } - } - i++; - } - return player_to_return; -} - -get_closest_valid_player( origin, ignore_player ) -{ - valid_player_found = 0; - players = get_players(); - if ( isDefined( level._zombie_using_humangun ) && level._zombie_using_humangun ) - { - players = arraycombine( players, level._zombie_human_array, 0, 0 ); - } - while ( isDefined( ignore_player ) ) - { - i = 0; - while ( i < ignore_player.size ) - { - arrayremovevalue( players, ignore_player[ i ] ); - i++; - } - } - while ( !valid_player_found ) - { - if ( isDefined( level.closest_player_override ) ) - { - player = [[ level.closest_player_override ]]( origin, players ); - } - else if ( isDefined( level.calc_closest_player_using_paths ) && level.calc_closest_player_using_paths ) - { - player = get_closest_player_using_paths( origin, players ); - } - else - { - player = getclosest( origin, players ); - } - if ( !isDefined( player ) ) - { - return undefined; - } - if ( isDefined( level._zombie_using_humangun ) && level._zombie_using_humangun && isai( player ) ) - { - return player; - } - while ( !is_player_valid( player, 1 ) ) - { - arrayremovevalue( players, player ); - } - return player; - } -} - -is_player_valid( player, checkignoremeflag, ignore_laststand_players ) -{ - if ( !isDefined( player ) ) - { - return 0; - } - if ( !isalive( player ) ) - { - return 0; - } - if ( !isplayer( player ) ) - { - return 0; - } - if ( isDefined( player.is_zombie ) && player.is_zombie == 1 ) - { - return 0; - } - if ( player.sessionstate == "spectator" ) - { - return 0; - } - if ( player.sessionstate == "intermission" ) - { - return 0; - } - if ( isDefined( self.intermission ) && self.intermission ) - { - return 0; - } - if ( isDefined( ignore_laststand_players ) && !ignore_laststand_players ) - { - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - return 0; - } - } - if ( isDefined( checkignoremeflag ) && checkignoremeflag && player.ignoreme ) - { - return 0; - } - if ( isDefined( level.is_player_valid_override ) ) - { - return [[ level.is_player_valid_override ]]( player ); - } - return 1; -} - -get_number_of_valid_players() -{ - players = get_players(); - num_player_valid = 0; - i = 0; - while ( i < players.size ) - { - if ( is_player_valid( players[ i ] ) ) - { - num_player_valid += 1; - } - i++; - } - return num_player_valid; -} - -in_revive_trigger() -{ - if ( isDefined( self.rt_time ) && ( self.rt_time + 100 ) >= getTime() ) - { - return self.in_rt_cached; - } - self.rt_time = getTime(); - players = level.players; - i = 0; - while ( i < players.size ) - { - current_player = players[ i ]; - if ( isDefined( current_player ) && isDefined( current_player.revivetrigger ) && isalive( current_player ) ) - { - if ( self istouching( current_player.revivetrigger ) ) - { - self.in_rt_cached = 1; - return 1; - } - } - i++; - } - self.in_rt_cached = 0; - return 0; -} - -get_closest_node( org, nodes ) -{ - return getclosest( org, nodes ); -} - -non_destroyed_bar_board_order( origin, chunks ) -{ - first_bars = []; - first_bars1 = []; - first_bars2 = []; - i = 0; - while ( i < chunks.size ) - { - if ( isDefined( chunks[ i ].script_team ) && chunks[ i ].script_team == "classic_boards" ) - { - if ( isDefined( chunks[ i ].script_parameters ) && chunks[ i ].script_parameters == "board" ) - { - return get_closest_2d( origin, chunks ); - } - else - { - if ( isDefined( chunks[ i ].script_team ) && chunks[ i ].script_team != "bar_board_variant1" && chunks[ i ].script_team != "bar_board_variant2" || chunks[ i ].script_team == "bar_board_variant4" && chunks[ i ].script_team == "bar_board_variant5" ) - { - return undefined; - } - } - } - else - { - if ( isDefined( chunks[ i ].script_team ) && chunks[ i ].script_team == "new_barricade" ) - { - if ( isDefined( chunks[ i ].script_parameters ) || chunks[ i ].script_parameters == "repair_board" && chunks[ i ].script_parameters == "barricade_vents" ) - { - return get_closest_2d( origin, chunks ); - } - } - } - i++; - } - i = 0; - while ( i < chunks.size ) - { - if ( isDefined( chunks[ i ].script_team ) || chunks[ i ].script_team == "6_bars_bent" && chunks[ i ].script_team == "6_bars_prestine" ) - { - if ( isDefined( chunks[ i ].script_parameters ) && chunks[ i ].script_parameters == "bar" ) - { - if ( isDefined( chunks[ i ].script_noteworthy ) ) - { - if ( chunks[ i ].script_noteworthy == "4" || chunks[ i ].script_noteworthy == "6" ) - { - first_bars[ first_bars.size ] = chunks[ i ]; - } - } - } - } - i++; - } - i = 0; - while ( i < first_bars.size ) - { - if ( isDefined( chunks[ i ].script_team ) || chunks[ i ].script_team == "6_bars_bent" && chunks[ i ].script_team == "6_bars_prestine" ) - { - if ( isDefined( chunks[ i ].script_parameters ) && chunks[ i ].script_parameters == "bar" ) - { - if ( !first_bars[ i ].destroyed ) - { - return first_bars[ i ]; - } - } - } - i++; - } - i = 0; - while ( i < chunks.size ) - { - if ( isDefined( chunks[ i ].script_team ) || chunks[ i ].script_team == "6_bars_bent" && chunks[ i ].script_team == "6_bars_prestine" ) - { - if ( isDefined( chunks[ i ].script_parameters ) && chunks[ i ].script_parameters == "bar" ) - { - if ( !chunks[ i ].destroyed ) - { - return get_closest_2d( origin, chunks ); - } - } - } - i++; - } -} - -non_destroyed_grate_order( origin, chunks_grate ) -{ - grate_order = []; - grate_order1 = []; - grate_order2 = []; - grate_order3 = []; - grate_order4 = []; - grate_order5 = []; - grate_order6 = []; - while ( isDefined( chunks_grate ) ) - { - i = 0; - while ( i < chunks_grate.size ) - { - if ( isDefined( chunks_grate[ i ].script_parameters ) && chunks_grate[ i ].script_parameters == "grate" ) - { - if ( isDefined( chunks_grate[ i ].script_noteworthy ) && chunks_grate[ i ].script_noteworthy == "1" ) - { - grate_order1[ grate_order1.size ] = chunks_grate[ i ]; - } - if ( isDefined( chunks_grate[ i ].script_noteworthy ) && chunks_grate[ i ].script_noteworthy == "2" ) - { - grate_order2[ grate_order2.size ] = chunks_grate[ i ]; - } - if ( isDefined( chunks_grate[ i ].script_noteworthy ) && chunks_grate[ i ].script_noteworthy == "3" ) - { - grate_order3[ grate_order3.size ] = chunks_grate[ i ]; - } - if ( isDefined( chunks_grate[ i ].script_noteworthy ) && chunks_grate[ i ].script_noteworthy == "4" ) - { - grate_order4[ grate_order4.size ] = chunks_grate[ i ]; - } - if ( isDefined( chunks_grate[ i ].script_noteworthy ) && chunks_grate[ i ].script_noteworthy == "5" ) - { - grate_order5[ grate_order5.size ] = chunks_grate[ i ]; - } - if ( isDefined( chunks_grate[ i ].script_noteworthy ) && chunks_grate[ i ].script_noteworthy == "6" ) - { - grate_order6[ grate_order6.size ] = chunks_grate[ i ]; - } - } - i++; - } - i = 0; - while ( i < chunks_grate.size ) - { - if ( isDefined( chunks_grate[ i ].script_parameters ) && chunks_grate[ i ].script_parameters == "grate" ) - { - if ( isDefined( grate_order1[ i ] ) ) - { - if ( grate_order1[ i ].state == "repaired" ) - { - grate_order2[ i ] thread show_grate_pull(); - return grate_order1[ i ]; - } - if ( grate_order2[ i ].state == "repaired" ) - { -/# - iprintlnbold( " pull bar2 " ); -#/ - grate_order3[ i ] thread show_grate_pull(); - return grate_order2[ i ]; - } - else - { - if ( grate_order3[ i ].state == "repaired" ) - { -/# - iprintlnbold( " pull bar3 " ); -#/ - grate_order4[ i ] thread show_grate_pull(); - return grate_order3[ i ]; - } - else - { - if ( grate_order4[ i ].state == "repaired" ) - { -/# - iprintlnbold( " pull bar4 " ); -#/ - grate_order5[ i ] thread show_grate_pull(); - return grate_order4[ i ]; - } - else - { - if ( grate_order5[ i ].state == "repaired" ) - { -/# - iprintlnbold( " pull bar5 " ); -#/ - grate_order6[ i ] thread show_grate_pull(); - return grate_order5[ i ]; - } - else - { - if ( grate_order6[ i ].state == "repaired" ) - { - return grate_order6[ i ]; - } - } - } - } - } - } - } - i++; - } - } -} - -non_destroyed_variant1_order( origin, chunks_variant1 ) -{ - variant1_order = []; - variant1_order1 = []; - variant1_order2 = []; - variant1_order3 = []; - variant1_order4 = []; - variant1_order5 = []; - variant1_order6 = []; - while ( isDefined( chunks_variant1 ) ) - { - i = 0; - while ( i < chunks_variant1.size ) - { - if ( isDefined( chunks_variant1[ i ].script_team ) && chunks_variant1[ i ].script_team == "bar_board_variant1" ) - { - if ( isDefined( chunks_variant1[ i ].script_noteworthy ) ) - { - if ( chunks_variant1[ i ].script_noteworthy == "1" ) - { - variant1_order1[ variant1_order1.size ] = chunks_variant1[ i ]; - } - if ( chunks_variant1[ i ].script_noteworthy == "2" ) - { - variant1_order2[ variant1_order2.size ] = chunks_variant1[ i ]; - } - if ( chunks_variant1[ i ].script_noteworthy == "3" ) - { - variant1_order3[ variant1_order3.size ] = chunks_variant1[ i ]; - } - if ( chunks_variant1[ i ].script_noteworthy == "4" ) - { - variant1_order4[ variant1_order4.size ] = chunks_variant1[ i ]; - } - if ( chunks_variant1[ i ].script_noteworthy == "5" ) - { - variant1_order5[ variant1_order5.size ] = chunks_variant1[ i ]; - } - if ( chunks_variant1[ i ].script_noteworthy == "6" ) - { - variant1_order6[ variant1_order6.size ] = chunks_variant1[ i ]; - } - } - } - i++; - } - i = 0; - while ( i < chunks_variant1.size ) - { - if ( isDefined( chunks_variant1[ i ].script_team ) && chunks_variant1[ i ].script_team == "bar_board_variant1" ) - { - if ( isDefined( variant1_order2[ i ] ) ) - { - if ( variant1_order2[ i ].state == "repaired" ) - { - return variant1_order2[ i ]; - } - else - { - if ( variant1_order3[ i ].state == "repaired" ) - { - return variant1_order3[ i ]; - } - else - { - if ( variant1_order4[ i ].state == "repaired" ) - { - return variant1_order4[ i ]; - } - else - { - if ( variant1_order6[ i ].state == "repaired" ) - { - return variant1_order6[ i ]; - } - else - { - if ( variant1_order5[ i ].state == "repaired" ) - { - return variant1_order5[ i ]; - } - else - { - if ( variant1_order1[ i ].state == "repaired" ) - { - return variant1_order1[ i ]; - } - } - } - } - } - } - } - } - i++; - } - } -} - -non_destroyed_variant2_order( origin, chunks_variant2 ) -{ - variant2_order = []; - variant2_order1 = []; - variant2_order2 = []; - variant2_order3 = []; - variant2_order4 = []; - variant2_order5 = []; - variant2_order6 = []; - while ( isDefined( chunks_variant2 ) ) - { - i = 0; - while ( i < chunks_variant2.size ) - { - if ( isDefined( chunks_variant2[ i ].script_team ) && chunks_variant2[ i ].script_team == "bar_board_variant2" ) - { - if ( isDefined( chunks_variant2[ i ].script_noteworthy ) && chunks_variant2[ i ].script_noteworthy == "1" ) - { - variant2_order1[ variant2_order1.size ] = chunks_variant2[ i ]; - } - if ( isDefined( chunks_variant2[ i ].script_noteworthy ) && chunks_variant2[ i ].script_noteworthy == "2" ) - { - variant2_order2[ variant2_order2.size ] = chunks_variant2[ i ]; - } - if ( isDefined( chunks_variant2[ i ].script_noteworthy ) && chunks_variant2[ i ].script_noteworthy == "3" ) - { - variant2_order3[ variant2_order3.size ] = chunks_variant2[ i ]; - } - if ( isDefined( chunks_variant2[ i ].script_noteworthy ) && chunks_variant2[ i ].script_noteworthy == "4" ) - { - variant2_order4[ variant2_order4.size ] = chunks_variant2[ i ]; - } - if ( isDefined( chunks_variant2[ i ].script_noteworthy ) && chunks_variant2[ i ].script_noteworthy == "5" && isDefined( chunks_variant2[ i ].script_location ) && chunks_variant2[ i ].script_location == "5" ) - { - variant2_order5[ variant2_order5.size ] = chunks_variant2[ i ]; - } - if ( isDefined( chunks_variant2[ i ].script_noteworthy ) && chunks_variant2[ i ].script_noteworthy == "5" && isDefined( chunks_variant2[ i ].script_location ) && chunks_variant2[ i ].script_location == "6" ) - { - variant2_order6[ variant2_order6.size ] = chunks_variant2[ i ]; - } - } - i++; - } - i = 0; - while ( i < chunks_variant2.size ) - { - if ( isDefined( chunks_variant2[ i ].script_team ) && chunks_variant2[ i ].script_team == "bar_board_variant2" ) - { - if ( isDefined( variant2_order1[ i ] ) ) - { - if ( variant2_order1[ i ].state == "repaired" ) - { - return variant2_order1[ i ]; - } - else - { - if ( variant2_order2[ i ].state == "repaired" ) - { - return variant2_order2[ i ]; - } - else - { - if ( variant2_order3[ i ].state == "repaired" ) - { - return variant2_order3[ i ]; - } - else - { - if ( variant2_order5[ i ].state == "repaired" ) - { - return variant2_order5[ i ]; - } - else - { - if ( variant2_order4[ i ].state == "repaired" ) - { - return variant2_order4[ i ]; - } - else - { - if ( variant2_order6[ i ].state == "repaired" ) - { - return variant2_order6[ i ]; - } - } - } - } - } - } - } - } - i++; - } - } -} - -non_destroyed_variant4_order( origin, chunks_variant4 ) -{ - variant4_order = []; - variant4_order1 = []; - variant4_order2 = []; - variant4_order3 = []; - variant4_order4 = []; - variant4_order5 = []; - variant4_order6 = []; - while ( isDefined( chunks_variant4 ) ) - { - i = 0; - while ( i < chunks_variant4.size ) - { - if ( isDefined( chunks_variant4[ i ].script_team ) && chunks_variant4[ i ].script_team == "bar_board_variant4" ) - { - if ( isDefined( chunks_variant4[ i ].script_noteworthy ) && chunks_variant4[ i ].script_noteworthy == "1" && !isDefined( chunks_variant4[ i ].script_location ) ) - { - variant4_order1[ variant4_order1.size ] = chunks_variant4[ i ]; - } - if ( isDefined( chunks_variant4[ i ].script_noteworthy ) && chunks_variant4[ i ].script_noteworthy == "2" ) - { - variant4_order2[ variant4_order2.size ] = chunks_variant4[ i ]; - } - if ( isDefined( chunks_variant4[ i ].script_noteworthy ) && chunks_variant4[ i ].script_noteworthy == "3" ) - { - variant4_order3[ variant4_order3.size ] = chunks_variant4[ i ]; - } - if ( isDefined( chunks_variant4[ i ].script_noteworthy ) && chunks_variant4[ i ].script_noteworthy == "1" && isDefined( chunks_variant4[ i ].script_location ) && chunks_variant4[ i ].script_location == "3" ) - { - variant4_order4[ variant4_order4.size ] = chunks_variant4[ i ]; - } - if ( isDefined( chunks_variant4[ i ].script_noteworthy ) && chunks_variant4[ i ].script_noteworthy == "5" ) - { - variant4_order5[ variant4_order5.size ] = chunks_variant4[ i ]; - } - if ( isDefined( chunks_variant4[ i ].script_noteworthy ) && chunks_variant4[ i ].script_noteworthy == "6" ) - { - variant4_order6[ variant4_order6.size ] = chunks_variant4[ i ]; - } - } - i++; - } - i = 0; - while ( i < chunks_variant4.size ) - { - if ( isDefined( chunks_variant4[ i ].script_team ) && chunks_variant4[ i ].script_team == "bar_board_variant4" ) - { - if ( isDefined( variant4_order1[ i ] ) ) - { - if ( variant4_order1[ i ].state == "repaired" ) - { - return variant4_order1[ i ]; - } - else - { - if ( variant4_order6[ i ].state == "repaired" ) - { - return variant4_order6[ i ]; - } - else - { - if ( variant4_order3[ i ].state == "repaired" ) - { - return variant4_order3[ i ]; - } - else - { - if ( variant4_order4[ i ].state == "repaired" ) - { - return variant4_order4[ i ]; - } - else - { - if ( variant4_order2[ i ].state == "repaired" ) - { - return variant4_order2[ i ]; - } - else - { - if ( variant4_order5[ i ].state == "repaired" ) - { - return variant4_order5[ i ]; - } - } - } - } - } - } - } - } - i++; - } - } -} - -non_destroyed_variant5_order( origin, chunks_variant5 ) -{ - variant5_order = []; - variant5_order1 = []; - variant5_order2 = []; - variant5_order3 = []; - variant5_order4 = []; - variant5_order5 = []; - variant5_order6 = []; - while ( isDefined( chunks_variant5 ) ) - { - i = 0; - while ( i < chunks_variant5.size ) - { - if ( isDefined( chunks_variant5[ i ].script_team ) && chunks_variant5[ i ].script_team == "bar_board_variant5" ) - { - if ( isDefined( chunks_variant5[ i ].script_noteworthy ) ) - { - if ( chunks_variant5[ i ].script_noteworthy == "1" && !isDefined( chunks_variant5[ i ].script_location ) ) - { - variant5_order1[ variant5_order1.size ] = chunks_variant5[ i ]; - } - if ( chunks_variant5[ i ].script_noteworthy == "2" ) - { - variant5_order2[ variant5_order2.size ] = chunks_variant5[ i ]; - } - if ( isDefined( chunks_variant5[ i ].script_noteworthy ) && chunks_variant5[ i ].script_noteworthy == "1" && isDefined( chunks_variant5[ i ].script_location ) && chunks_variant5[ i ].script_location == "3" ) - { - variant5_order3[ variant5_order3.size ] = chunks_variant5[ i ]; - } - if ( chunks_variant5[ i ].script_noteworthy == "4" ) - { - variant5_order4[ variant5_order4.size ] = chunks_variant5[ i ]; - } - if ( chunks_variant5[ i ].script_noteworthy == "5" ) - { - variant5_order5[ variant5_order5.size ] = chunks_variant5[ i ]; - } - if ( chunks_variant5[ i ].script_noteworthy == "6" ) - { - variant5_order6[ variant5_order6.size ] = chunks_variant5[ i ]; - } - } - } - i++; - } - i = 0; - while ( i < chunks_variant5.size ) - { - if ( isDefined( chunks_variant5[ i ].script_team ) && chunks_variant5[ i ].script_team == "bar_board_variant5" ) - { - if ( isDefined( variant5_order1[ i ] ) ) - { - if ( variant5_order1[ i ].state == "repaired" ) - { - return variant5_order1[ i ]; - } - else - { - if ( variant5_order6[ i ].state == "repaired" ) - { - return variant5_order6[ i ]; - } - else - { - if ( variant5_order3[ i ].state == "repaired" ) - { - return variant5_order3[ i ]; - } - else - { - if ( variant5_order2[ i ].state == "repaired" ) - { - return variant5_order2[ i ]; - } - else - { - if ( variant5_order5[ i ].state == "repaired" ) - { - return variant5_order5[ i ]; - } - else - { - if ( variant5_order4[ i ].state == "repaired" ) - { - return variant5_order4[ i ]; - } - } - } - } - } - } - } - } - i++; - } - } -} - -show_grate_pull() -{ - wait 0,53; - self show(); - self vibrate( vectorScale( ( 0, 0, 1 ), 270 ), 0,2, 0,4, 0,4 ); -} - -get_closest_2d( origin, ents ) -{ - if ( !isDefined( ents ) ) - { - return undefined; - } - dist = distance2d( origin, ents[ 0 ].origin ); - index = 0; - temp_array = []; - i = 1; - while ( i < ents.size ) - { - if ( isDefined( ents[ i ].unbroken ) && ents[ i ].unbroken == 1 ) - { - ents[ i ].index = i; - temp_array[ temp_array.size ] = ents[ i ]; - } - i++; - } - if ( temp_array.size > 0 ) - { - index = temp_array[ randomintrange( 0, temp_array.size ) ].index; - return ents[ index ]; - } - else - { - i = 1; - while ( i < ents.size ) - { - temp_dist = distance2d( origin, ents[ i ].origin ); - if ( temp_dist < dist ) - { - dist = temp_dist; - index = i; - } - i++; - } - return ents[ index ]; - } -} - -disable_trigger() -{ - if ( !isDefined( self.disabled ) || !self.disabled ) - { - self.disabled = 1; - self.origin -= vectorScale( ( 0, 0, 1 ), 10000 ); - } -} - -enable_trigger() -{ - if ( !isDefined( self.disabled ) || !self.disabled ) - { - return; - } - self.disabled = 0; - self.origin += vectorScale( ( 0, 0, 1 ), 10000 ); -} - -in_playable_area() -{ - playable_area = getentarray( "player_volume", "script_noteworthy" ); - if ( !isDefined( playable_area ) ) - { -/# - println( "No playable area playable_area found! Assume EVERYWHERE is PLAYABLE" ); -#/ - return 1; - } - i = 0; - while ( i < playable_area.size ) - { - if ( self istouching( playable_area[ i ] ) ) - { - return 1; - } - i++; - } - return 0; -} - -get_closest_non_destroyed_chunk( origin, barrier, barrier_chunks ) -{ - chunks = undefined; - chunks_grate = undefined; - chunks_grate = get_non_destroyed_chunks_grate( barrier, barrier_chunks ); - chunks = get_non_destroyed_chunks( barrier, barrier_chunks ); - if ( isDefined( barrier.zbarrier ) ) - { - if ( isDefined( chunks ) ) - { - return array_randomize( chunks )[ 0 ]; - } - if ( isDefined( chunks_grate ) ) - { - return array_randomize( chunks_grate )[ 0 ]; - } - } - else - { - if ( isDefined( chunks ) ) - { - return non_destroyed_bar_board_order( origin, chunks ); - } - else - { - if ( isDefined( chunks_grate ) ) - { - return non_destroyed_grate_order( origin, chunks_grate ); - } - } - } - return undefined; -} - -get_random_destroyed_chunk( barrier, barrier_chunks ) -{ - if ( isDefined( barrier.zbarrier ) ) - { - ret = undefined; - pieces = barrier.zbarrier getzbarrierpieceindicesinstate( "open" ); - if ( pieces.size ) - { - ret = array_randomize( pieces )[ 0 ]; - } - return ret; - } - else - { - chunk = undefined; - chunks_repair_grate = undefined; - chunks = get_destroyed_chunks( barrier_chunks ); - chunks_repair_grate = get_destroyed_repair_grates( barrier_chunks ); - if ( isDefined( chunks ) ) - { - return chunks[ randomint( chunks.size ) ]; - } - else - { - if ( isDefined( chunks_repair_grate ) ) - { - return grate_order_destroyed( chunks_repair_grate ); - } - } - return undefined; - } -} - -get_destroyed_repair_grates( barrier_chunks ) -{ - array = []; - i = 0; - while ( i < barrier_chunks.size ) - { - if ( isDefined( barrier_chunks[ i ] ) ) - { - if ( isDefined( barrier_chunks[ i ].script_parameters ) && barrier_chunks[ i ].script_parameters == "grate" ) - { - array[ array.size ] = barrier_chunks[ i ]; - } - } - i++; - } - if ( array.size == 0 ) - { - return undefined; - } - return array; -} - -get_non_destroyed_chunks( barrier, barrier_chunks ) -{ - if ( isDefined( barrier.zbarrier ) ) - { - return barrier.zbarrier getzbarrierpieceindicesinstate( "closed" ); - } - else - { - array = []; - i = 0; - while ( i < barrier_chunks.size ) - { - if ( isDefined( barrier_chunks[ i ].script_team ) && barrier_chunks[ i ].script_team == "classic_boards" ) - { - if ( isDefined( barrier_chunks[ i ].script_parameters ) && barrier_chunks[ i ].script_parameters == "board" ) - { - if ( barrier_chunks[ i ] get_chunk_state() == "repaired" ) - { - if ( barrier_chunks[ i ].origin == barrier_chunks[ i ].og_origin ) - { - array[ array.size ] = barrier_chunks[ i ]; - } - } - } - } - if ( isDefined( barrier_chunks[ i ].script_team ) && barrier_chunks[ i ].script_team == "new_barricade" ) - { - if ( isDefined( barrier_chunks[ i ].script_parameters ) || barrier_chunks[ i ].script_parameters == "repair_board" && barrier_chunks[ i ].script_parameters == "barricade_vents" ) - { - if ( barrier_chunks[ i ] get_chunk_state() == "repaired" ) - { - if ( barrier_chunks[ i ].origin == barrier_chunks[ i ].og_origin ) - { - array[ array.size ] = barrier_chunks[ i ]; - } - } - } - i++; - continue; - } - else - { - if ( isDefined( barrier_chunks[ i ].script_team ) && barrier_chunks[ i ].script_team == "6_bars_bent" ) - { - if ( isDefined( barrier_chunks[ i ].script_parameters ) && barrier_chunks[ i ].script_parameters == "bar" ) - { - if ( barrier_chunks[ i ] get_chunk_state() == "repaired" ) - { - if ( barrier_chunks[ i ].origin == barrier_chunks[ i ].og_origin ) - { - array[ array.size ] = barrier_chunks[ i ]; - } - } - } - i++; - continue; - } - else - { - if ( isDefined( barrier_chunks[ i ].script_team ) && barrier_chunks[ i ].script_team == "6_bars_prestine" ) - { - if ( isDefined( barrier_chunks[ i ].script_parameters ) && barrier_chunks[ i ].script_parameters == "bar" ) - { - if ( barrier_chunks[ i ] get_chunk_state() == "repaired" ) - { - if ( barrier_chunks[ i ].origin == barrier_chunks[ i ].og_origin ) - { - array[ array.size ] = barrier_chunks[ i ]; - } - } - } - } - } - } - i++; - } - if ( array.size == 0 ) - { - return undefined; - } - return array; - } -} - -get_non_destroyed_chunks_grate( barrier, barrier_chunks ) -{ - if ( isDefined( barrier.zbarrier ) ) - { - return barrier.zbarrier getzbarrierpieceindicesinstate( "closed" ); - } - else - { - array = []; - i = 0; - while ( i < barrier_chunks.size ) - { - if ( isDefined( barrier_chunks[ i ].script_parameters ) && barrier_chunks[ i ].script_parameters == "grate" ) - { - if ( isDefined( barrier_chunks[ i ] ) ) - { - array[ array.size ] = barrier_chunks[ i ]; - } - } - i++; - } - if ( array.size == 0 ) - { - return undefined; - } - return array; - } -} - -get_non_destroyed_variant1( barrier_chunks ) -{ - array = []; - i = 0; - while ( i < barrier_chunks.size ) - { - if ( isDefined( barrier_chunks[ i ].script_team ) && barrier_chunks[ i ].script_team == "bar_board_variant1" ) - { - if ( isDefined( barrier_chunks[ i ] ) ) - { - array[ array.size ] = barrier_chunks[ i ]; - } - } - i++; - } - if ( array.size == 0 ) - { - return undefined; - } - return array; -} - -get_non_destroyed_variant2( barrier_chunks ) -{ - array = []; - i = 0; - while ( i < barrier_chunks.size ) - { - if ( isDefined( barrier_chunks[ i ].script_team ) && barrier_chunks[ i ].script_team == "bar_board_variant2" ) - { - if ( isDefined( barrier_chunks[ i ] ) ) - { - array[ array.size ] = barrier_chunks[ i ]; - } - } - i++; - } - if ( array.size == 0 ) - { - return undefined; - } - return array; -} - -get_non_destroyed_variant4( barrier_chunks ) -{ - array = []; - i = 0; - while ( i < barrier_chunks.size ) - { - if ( isDefined( barrier_chunks[ i ].script_team ) && barrier_chunks[ i ].script_team == "bar_board_variant4" ) - { - if ( isDefined( barrier_chunks[ i ] ) ) - { - array[ array.size ] = barrier_chunks[ i ]; - } - } - i++; - } - if ( array.size == 0 ) - { - return undefined; - } - return array; -} - -get_non_destroyed_variant5( barrier_chunks ) -{ - array = []; - i = 0; - while ( i < barrier_chunks.size ) - { - if ( isDefined( barrier_chunks[ i ].script_team ) && barrier_chunks[ i ].script_team == "bar_board_variant5" ) - { - if ( isDefined( barrier_chunks[ i ] ) ) - { - array[ array.size ] = barrier_chunks[ i ]; - } - } - i++; - } - if ( array.size == 0 ) - { - return undefined; - } - return array; -} - -get_destroyed_chunks( barrier_chunks ) -{ - array = []; - i = 0; - while ( i < barrier_chunks.size ) - { - if ( barrier_chunks[ i ] get_chunk_state() == "destroyed" ) - { - if ( isDefined( barrier_chunks[ i ].script_parameters ) && barrier_chunks[ i ].script_parameters == "board" ) - { - array[ array.size ] = barrier_chunks[ i ]; - i++; - continue; - } - else - { - if ( isDefined( barrier_chunks[ i ].script_parameters ) || barrier_chunks[ i ].script_parameters == "repair_board" && barrier_chunks[ i ].script_parameters == "barricade_vents" ) - { - array[ array.size ] = barrier_chunks[ i ]; - i++; - continue; - } - else - { - if ( isDefined( barrier_chunks[ i ].script_parameters ) && barrier_chunks[ i ].script_parameters == "bar" ) - { - array[ array.size ] = barrier_chunks[ i ]; - i++; - continue; - } - else - { - if ( isDefined( barrier_chunks[ i ].script_parameters ) && barrier_chunks[ i ].script_parameters == "grate" ) - { - return undefined; - } - } - } - } - } - i++; - } - if ( array.size == 0 ) - { - return undefined; - } - return array; -} - -grate_order_destroyed( chunks_repair_grate ) -{ - grate_repair_order = []; - grate_repair_order1 = []; - grate_repair_order2 = []; - grate_repair_order3 = []; - grate_repair_order4 = []; - grate_repair_order5 = []; - grate_repair_order6 = []; - i = 0; - while ( i < chunks_repair_grate.size ) - { - if ( isDefined( chunks_repair_grate[ i ].script_parameters ) && chunks_repair_grate[ i ].script_parameters == "grate" ) - { - if ( isDefined( chunks_repair_grate[ i ].script_noteworthy ) && chunks_repair_grate[ i ].script_noteworthy == "1" ) - { - grate_repair_order1[ grate_repair_order1.size ] = chunks_repair_grate[ i ]; - } - if ( isDefined( chunks_repair_grate[ i ].script_noteworthy ) && chunks_repair_grate[ i ].script_noteworthy == "2" ) - { - grate_repair_order2[ grate_repair_order2.size ] = chunks_repair_grate[ i ]; - } - if ( isDefined( chunks_repair_grate[ i ].script_noteworthy ) && chunks_repair_grate[ i ].script_noteworthy == "3" ) - { - grate_repair_order3[ grate_repair_order3.size ] = chunks_repair_grate[ i ]; - } - if ( isDefined( chunks_repair_grate[ i ].script_noteworthy ) && chunks_repair_grate[ i ].script_noteworthy == "4" ) - { - grate_repair_order4[ grate_repair_order4.size ] = chunks_repair_grate[ i ]; - } - if ( isDefined( chunks_repair_grate[ i ].script_noteworthy ) && chunks_repair_grate[ i ].script_noteworthy == "5" ) - { - grate_repair_order5[ grate_repair_order5.size ] = chunks_repair_grate[ i ]; - } - if ( isDefined( chunks_repair_grate[ i ].script_noteworthy ) && chunks_repair_grate[ i ].script_noteworthy == "6" ) - { - grate_repair_order6[ grate_repair_order6.size ] = chunks_repair_grate[ i ]; - } - } - i++; - } - i = 0; - while ( i < chunks_repair_grate.size ) - { - if ( isDefined( chunks_repair_grate[ i ].script_parameters ) && chunks_repair_grate[ i ].script_parameters == "grate" ) - { - if ( isDefined( grate_repair_order1[ i ] ) ) - { - if ( grate_repair_order6[ i ].state == "destroyed" ) - { -/# - iprintlnbold( " Fix grate6 " ); -#/ - return grate_repair_order6[ i ]; - } - if ( grate_repair_order5[ i ].state == "destroyed" ) - { -/# - iprintlnbold( " Fix grate5 " ); -#/ - grate_repair_order6[ i ] thread show_grate_repair(); - return grate_repair_order5[ i ]; - } - else - { - if ( grate_repair_order4[ i ].state == "destroyed" ) - { -/# - iprintlnbold( " Fix grate4 " ); -#/ - grate_repair_order5[ i ] thread show_grate_repair(); - return grate_repair_order4[ i ]; - } - else - { - if ( grate_repair_order3[ i ].state == "destroyed" ) - { -/# - iprintlnbold( " Fix grate3 " ); -#/ - grate_repair_order4[ i ] thread show_grate_repair(); - return grate_repair_order3[ i ]; - } - else - { - if ( grate_repair_order2[ i ].state == "destroyed" ) - { -/# - iprintlnbold( " Fix grate2 " ); -#/ - grate_repair_order3[ i ] thread show_grate_repair(); - return grate_repair_order2[ i ]; - } - else - { - if ( grate_repair_order1[ i ].state == "destroyed" ) - { -/# - iprintlnbold( " Fix grate1 " ); -#/ - grate_repair_order2[ i ] thread show_grate_repair(); - return grate_repair_order1[ i ]; - } - } - } - } - } - } - } - i++; - } -} - -show_grate_repair() -{ - wait 0,34; - self hide(); -} - -get_chunk_state() -{ -/# - assert( isDefined( self.state ) ); -#/ - return self.state; -} - -is_float( num ) -{ - val = num - int( num ); - if ( val != 0 ) - { - return 1; - } - else - { - return 0; - } -} - -array_limiter( array, total ) -{ - new_array = []; - i = 0; - while ( i < array.size ) - { - if ( i < total ) - { - new_array[ new_array.size ] = array[ i ]; - } - i++; - } - return new_array; -} - -array_validate( array ) -{ - if ( isDefined( array ) && array.size > 0 ) - { - return 1; - } - else - { - return 0; - } -} - -add_spawner( spawner ) -{ - if ( isDefined( spawner.script_start ) && level.round_number < spawner.script_start ) - { - return; - } - if ( isDefined( spawner.is_enabled ) && !spawner.is_enabled ) - { - return; - } - if ( isDefined( spawner.has_been_added ) && spawner.has_been_added ) - { - return; - } - spawner.has_been_added = 1; - level.zombie_spawn_locations[ level.zombie_spawn_locations.size ] = spawner; -} - -fake_physicslaunch( target_pos, power ) -{ - start_pos = self.origin; - gravity = getDvarInt( "bg_gravity" ) * -1; - dist = distance( start_pos, target_pos ); - time = dist / power; - delta = target_pos - start_pos; - drop = ( 0,5 * gravity ) * ( time * time ); - velocity = ( delta[ 0 ] / time, delta[ 1 ] / time, ( delta[ 2 ] - drop ) / time ); - level thread draw_line_ent_to_pos( self, target_pos ); - self movegravity( velocity, time ); - return time; -} - -add_zombie_hint( ref, text ) -{ - if ( !isDefined( level.zombie_hints ) ) - { - level.zombie_hints = []; - } - precachestring( text ); - level.zombie_hints[ ref ] = text; -} - -get_zombie_hint( ref ) -{ - if ( isDefined( level.zombie_hints[ ref ] ) ) - { - return level.zombie_hints[ ref ]; - } -/# - println( "UNABLE TO FIND HINT STRING " + ref ); -#/ - return level.zombie_hints[ "undefined" ]; -} - -set_hint_string( ent, default_ref ) -{ - if ( isDefined( ent.script_hint ) ) - { - self sethintstring( get_zombie_hint( ent.script_hint ) ); - } - else - { - self sethintstring( get_zombie_hint( default_ref ) ); - } -} - -get_hint_string( ent, default_ref ) -{ - if ( isDefined( ent.script_hint ) ) - { - return get_zombie_hint( ent.script_hint ); - } - return get_zombie_hint( default_ref ); -} - -add_sound( ref, alias ) -{ - if ( !isDefined( level.zombie_sounds ) ) - { - level.zombie_sounds = []; - } - level.zombie_sounds[ ref ] = alias; -} - -play_sound_at_pos( ref, pos, ent ) -{ - if ( isDefined( ent ) ) - { - if ( isDefined( ent.script_soundalias ) ) - { - playsoundatposition( ent.script_soundalias, pos ); - return; - } - if ( isDefined( self.script_sound ) ) - { - ref = self.script_sound; - } - } - if ( ref == "none" ) - { - return; - } - if ( !isDefined( level.zombie_sounds[ ref ] ) ) - { -/# - assertmsg( "Sound "" + ref + "" was not put to the zombie sounds list, please use add_sound( ref, alias ) at the start of your level." ); -#/ - return; - } - playsoundatposition( level.zombie_sounds[ ref ], pos ); -} - -play_sound_on_ent( ref ) -{ - if ( isDefined( self.script_soundalias ) ) - { - self playsound( self.script_soundalias ); - return; - } - if ( isDefined( self.script_sound ) ) - { - ref = self.script_sound; - } - if ( ref == "none" ) - { - return; - } - if ( !isDefined( level.zombie_sounds[ ref ] ) ) - { -/# - assertmsg( "Sound "" + ref + "" was not put to the zombie sounds list, please use add_sound( ref, alias ) at the start of your level." ); -#/ - return; - } - self playsound( level.zombie_sounds[ ref ] ); -} - -play_loopsound_on_ent( ref ) -{ - if ( isDefined( self.script_firefxsound ) ) - { - ref = self.script_firefxsound; - } - if ( ref == "none" ) - { - return; - } - if ( !isDefined( level.zombie_sounds[ ref ] ) ) - { -/# - assertmsg( "Sound "" + ref + "" was not put to the zombie sounds list, please use add_sound( ref, alias ) at the start of your level." ); -#/ - return; - } - self playsound( level.zombie_sounds[ ref ] ); -} - -string_to_float( string ) -{ - floatparts = strtok( string, "." ); - if ( floatparts.size == 1 ) - { - return int( floatparts[ 0 ] ); - } - whole = int( floatparts[ 0 ] ); - decimal = 0; - i = floatparts[ 1 ].size - 1; - while ( i >= 0 ) - { - decimal = ( decimal / 10 ) + ( int( floatparts[ 1 ][ i ] ) / 10 ); - i--; - - } - if ( whole >= 0 ) - { - return whole + decimal; - } - else - { - return whole - decimal; - } -} - -onplayerconnect_callback( func ) -{ - addcallback( "on_player_connect", func ); -} - -onplayerdisconnect_callback( func ) -{ - addcallback( "on_player_disconnect", func ); -} - -set_zombie_var( var, value, is_float, column, is_team_based ) -{ - if ( !isDefined( is_float ) ) - { - is_float = 0; - } - if ( !isDefined( column ) ) - { - column = 1; - } - table = "mp/zombiemode.csv"; - table_value = tablelookup( table, 0, var, column ); - if ( isDefined( table_value ) && table_value != "" ) - { - if ( is_float ) - { - value = float( table_value ); - } - else - { - value = int( table_value ); - } - } - if ( isDefined( is_team_based ) && is_team_based ) - { - _a3064 = level.teams; - _k3064 = getFirstArrayKey( _a3064 ); - while ( isDefined( _k3064 ) ) - { - team = _a3064[ _k3064 ]; - level.zombie_vars[ team ][ var ] = value; - _k3064 = getNextArrayKey( _a3064, _k3064 ); - } - } - else level.zombie_vars[ var ] = value; - return value; -} - -get_table_var( table, var_name, value, is_float, column ) -{ - if ( !isDefined( table ) ) - { - table = "mp/zombiemode.csv"; - } - if ( !isDefined( is_float ) ) - { - is_float = 0; - } - if ( !isDefined( column ) ) - { - column = 1; - } - table_value = tablelookup( table, 0, var_name, column ); - if ( isDefined( table_value ) && table_value != "" ) - { - if ( is_float ) - { - value = string_to_float( table_value ); - } - else - { - value = int( table_value ); - } - } - return value; -} - -hudelem_count() -{ -/# - max = 0; - curr_total = 0; - while ( 1 ) - { - if ( level.hudelem_count > max ) - { - max = level.hudelem_count; - } - println( "HudElems: " + level.hudelem_count + "[Peak: " + max + "]" ); - wait 0,05; -#/ - } -} - -debug_round_advancer() -{ -/# - while ( 1 ) - { - zombs = get_round_enemy_array(); - i = 0; - while ( i < zombs.size ) - { - zombs[ i ] dodamage( zombs[ i ].health + 666, ( 0, 0, 1 ) ); - wait 0,5; - i++; - } -#/ - } -} - -print_run_speed( speed ) -{ -/# - self endon( "death" ); - while ( 1 ) - { - print3d( self.origin + vectorScale( ( 0, 0, 1 ), 64 ), speed, ( 0, 0, 1 ) ); - wait 0,05; -#/ - } -} - -draw_line_ent_to_ent( ent1, ent2 ) -{ -/# - if ( getDvarInt( "zombie_debug" ) != 1 ) - { - return; - } - ent1 endon( "death" ); - ent2 endon( "death" ); - while ( 1 ) - { - line( ent1.origin, ent2.origin ); - wait 0,05; -#/ - } -} - -draw_line_ent_to_pos( ent, pos, end_on ) -{ -/# - if ( getDvarInt( "zombie_debug" ) != 1 ) - { - return; - } - ent endon( "death" ); - ent notify( "stop_draw_line_ent_to_pos" ); - ent endon( "stop_draw_line_ent_to_pos" ); - if ( isDefined( end_on ) ) - { - ent endon( end_on ); - } - while ( 1 ) - { - line( ent.origin, pos ); - wait 0,05; -#/ - } -} - -debug_print( msg ) -{ -/# - if ( getDvarInt( "zombie_debug" ) > 0 ) - { - println( "######### ZOMBIE: " + msg ); -#/ - } -} - -debug_blocker( pos, rad, height ) -{ -/# - self notify( "stop_debug_blocker" ); - self endon( "stop_debug_blocker" ); - for ( ;; ) - { - if ( getDvarInt( "zombie_debug" ) != 1 ) - { - return; - } - wait 0,05; - drawcylinder( pos, rad, height ); -#/ - } -} - -drawcylinder( pos, rad, height ) -{ -/# - currad = rad; - curheight = height; - r = 0; - while ( r < 20 ) - { - theta = ( r / 20 ) * 360; - theta2 = ( ( r + 1 ) / 20 ) * 360; - line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, 0 ) ); - line( pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ), pos + ( cos( theta2 ) * currad, sin( theta2 ) * currad, curheight ) ); - line( pos + ( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos + ( cos( theta ) * currad, sin( theta ) * currad, curheight ) ); - r++; -#/ - } -} - -print3d_at_pos( msg, pos, thread_endon, offset ) -{ -/# - self endon( "death" ); - if ( isDefined( thread_endon ) ) - { - self notify( thread_endon ); - self endon( thread_endon ); - } - if ( !isDefined( offset ) ) - { - offset = ( 0, 0, 1 ); - } - while ( 1 ) - { - print3d( self.origin + offset, msg ); - wait 0,05; -#/ - } -} - -debug_breadcrumbs() -{ -/# - self endon( "disconnect" ); - self notify( "stop_debug_breadcrumbs" ); - self endon( "stop_debug_breadcrumbs" ); - while ( 1 ) - { - while ( getDvarInt( "zombie_debug" ) != 1 ) - { - wait 1; - } - i = 0; - while ( i < self.zombie_breadcrumbs.size ) - { - drawcylinder( self.zombie_breadcrumbs[ i ], 5, 5 ); - i++; - } - wait 0,05; -#/ - } -} - -debug_attack_spots_taken() -{ -/# - self notify( "stop_debug_breadcrumbs" ); - self endon( "stop_debug_breadcrumbs" ); - while ( 1 ) - { - while ( getDvarInt( "zombie_debug" ) != 2 ) - { - wait 1; - } - wait 0,05; - count = 0; - i = 0; - while ( i < self.attack_spots_taken.size ) - { - if ( self.attack_spots_taken[ i ] ) - { - count++; - circle( self.attack_spots[ i ], 12, ( 0, 0, 1 ), 0, 1, 1 ); - i++; - continue; - } - else - { - circle( self.attack_spots[ i ], 12, ( 0, 0, 1 ), 0, 1, 1 ); - } - i++; - } - msg = "" + count + " / " + self.attack_spots_taken.size; - print3d( self.origin, msg ); -#/ - } -} - -float_print3d( msg, time ) -{ -/# - self endon( "death" ); - time = getTime() + ( time * 1000 ); - offset = vectorScale( ( 0, 0, 1 ), 72 ); - while ( getTime() < time ) - { - offset += vectorScale( ( 0, 0, 1 ), 2 ); - print3d( self.origin + offset, msg, ( 0, 0, 1 ) ); - wait 0,05; -#/ - } -} - -do_player_vo( snd, variation_count ) -{ - index = maps/mp/zombies/_zm_weapons::get_player_index( self ); - sound = "zmb_vox_plr_" + index + "_" + snd; - if ( isDefined( variation_count ) ) - { - sound = ( sound + "_" ) + randomintrange( 0, variation_count ); - } - if ( !isDefined( level.player_is_speaking ) ) - { - level.player_is_speaking = 0; - } - if ( level.player_is_speaking == 0 ) - { - level.player_is_speaking = 1; - self playsoundwithnotify( sound, "sound_done" ); - self waittill( "sound_done" ); - wait 2; - level.player_is_speaking = 0; - } -} - -stop_magic_bullet_shield() -{ - self.attackeraccuracy = 1; - self notify( "stop_magic_bullet_shield" ); - self.magic_bullet_shield = undefined; - self._mbs = undefined; -} - -magic_bullet_shield() -{ - if ( isDefined( self.magic_bullet_shield ) && !self.magic_bullet_shield ) - { - if ( isai( self ) || isplayer( self ) ) - { - self.magic_bullet_shield = 1; -/# - level thread debug_magic_bullet_shield_death( self ); -#/ - if ( !isDefined( self._mbs ) ) - { - self._mbs = spawnstruct(); - } - if ( isai( self ) ) - { -/# - assert( isalive( self ), "Tried to do magic_bullet_shield on a dead or undefined guy." ); -#/ - self._mbs.last_pain_time = 0; - self._mbs.ignore_time = 2; - self._mbs.turret_ignore_time = 5; - } - self.attackeraccuracy = 0,1; - return; - } - else - { -/# - assertmsg( "magic_bullet_shield does not support entity of classname '" + self.classname + "'." ); -#/ - } - } -} - -debug_magic_bullet_shield_death( guy ) -{ - targetname = "none"; - if ( isDefined( guy.targetname ) ) - { - targetname = guy.targetname; - } - guy endon( "stop_magic_bullet_shield" ); - guy waittill( "death" ); -/# - assert( !isDefined( guy ), "Guy died with magic bullet shield on with targetname: " + targetname ); -#/ -} - -is_magic_bullet_shield_enabled( ent ) -{ - if ( !isDefined( ent ) ) - { - return 0; - } - if ( isDefined( ent.magic_bullet_shield ) ) - { - return ent.magic_bullet_shield == 1; - } -} - -really_play_2d_sound( sound ) -{ - temp_ent = spawn( "script_origin", ( 0, 0, 1 ) ); - temp_ent playsoundwithnotify( sound, sound + "wait" ); - temp_ent waittill( sound + "wait" ); - wait 0,05; - temp_ent delete(); -} - -play_sound_2d( sound ) -{ - level thread really_play_2d_sound( sound ); -} - -include_weapon( weapon_name, in_box, collector, weighting_func ) -{ -/# - println( "ZM >> include_weapon = " + weapon_name ); -#/ - if ( !isDefined( in_box ) ) - { - in_box = 1; - } - if ( !isDefined( collector ) ) - { - collector = 0; - } - maps/mp/zombies/_zm_weapons::include_zombie_weapon( weapon_name, in_box, collector, weighting_func ); -} - -include_buildable( buildable_struct ) -{ -/# - println( "ZM >> include_buildable = " + buildable_struct.name ); -#/ - maps/mp/zombies/_zm_buildables::include_zombie_buildable( buildable_struct ); -} - -create_zombie_buildable_piece( modelname, radius, height, hud_icon ) -{ -/# - println( "ZM >> create_zombie_buildable_piece = " + modelname ); -#/ - self maps/mp/zombies/_zm_buildables::create_zombie_buildable_piece( modelname, radius, height, hud_icon ); -} - -is_buildable() -{ - return self maps/mp/zombies/_zm_buildables::is_buildable(); -} - -wait_for_buildable( buildable_name ) -{ - level waittill( buildable_name + "_built", player ); - return player; -} - -include_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, start_power, target ) -{ - return maps/mp/zombies/_zm_power::add_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, start_power, target ); -} - -include_powerup( powerup_name ) -{ - maps/mp/zombies/_zm_powerups::include_zombie_powerup( powerup_name ); -} - -include_equipment( equipment_name ) -{ - maps/mp/zombies/_zm_equipment::include_zombie_equipment( equipment_name ); -} - -limit_equipment( equipment_name, limited ) -{ - maps/mp/zombies/_zm_equipment::limit_zombie_equipment( equipment_name, limited ); -} - -trigger_invisible( enable ) -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( isDefined( players[ i ] ) ) - { - self setinvisibletoplayer( players[ i ], enable ); - } - i++; - } -} - -print3d_ent( text, color, scale, offset, end_msg, overwrite ) -{ - self endon( "death" ); - if ( isDefined( overwrite ) && overwrite && isDefined( self._debug_print3d_msg ) ) - { - self notify( "end_print3d" ); - wait 0,05; - } - self endon( "end_print3d" ); - if ( !isDefined( color ) ) - { - color = ( 0, 0, 1 ); - } - if ( !isDefined( scale ) ) - { - scale = 1; - } - if ( !isDefined( offset ) ) - { - offset = ( 0, 0, 1 ); - } - if ( isDefined( end_msg ) ) - { - self endon( end_msg ); - } - self._debug_print3d_msg = text; -/# - while ( 1 ) - { - print3d( self.origin + offset, self._debug_print3d_msg, color, scale ); - wait 0,05; -#/ - } -} - -isexplosivedamage( meansofdeath ) -{ - explosivedamage = "MOD_GRENADE MOD_GRENADE_SPLASH MOD_PROJECTILE_SPLASH MOD_EXPLOSIVE"; - if ( issubstr( explosivedamage, meansofdeath ) ) - { - return 1; - } - return 0; -} - -isprimarydamage( meansofdeath ) -{ - if ( meansofdeath == "MOD_RIFLE_BULLET" || meansofdeath == "MOD_PISTOL_BULLET" ) - { - return 1; - } - return 0; -} - -isfiredamage( weapon, meansofdeath ) -{ - if ( !issubstr( weapon, "flame" ) && !issubstr( weapon, "molotov_" ) && issubstr( weapon, "napalmblob_" ) && meansofdeath != "MOD_BURNED" || meansofdeath == "MOD_GRENADE" && meansofdeath == "MOD_GRENADE_SPLASH" ) - { - return 1; - } - return 0; -} - -isplayerexplosiveweapon( weapon, meansofdeath ) -{ - if ( !isexplosivedamage( meansofdeath ) ) - { - return 0; - } - if ( weapon == "artillery_mp" ) - { - return 0; - } - if ( issubstr( weapon, "turret" ) ) - { - return 0; - } - return 1; -} - -create_counter_hud( x ) -{ - if ( !isDefined( x ) ) - { - x = 0; - } - hud = create_simple_hud(); - hud.alignx = "left"; - hud.aligny = "top"; - hud.horzalign = "user_left"; - hud.vertalign = "user_top"; - hud.color = ( 0, 0, 1 ); - hud.fontscale = 32; - hud.x = x; - hud.alpha = 0; - hud setshader( "hud_chalk_1", 64, 64 ); - return hud; -} - -get_current_zone( return_zone ) -{ - flag_wait( "zones_initialized" ); - z = 0; - while ( z < level.zone_keys.size ) - { - zone_name = level.zone_keys[ z ]; - zone = level.zones[ zone_name ]; - i = 0; - while ( i < zone.volumes.size ) - { - if ( self istouching( zone.volumes[ i ] ) ) - { - if ( isDefined( return_zone ) && return_zone ) - { - return zone; - } - return zone_name; - } - i++; - } - z++; - } - return undefined; -} - -remove_mod_from_methodofdeath( mod ) -{ - return mod; -} - -clear_fog_threads() -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] notify( "stop_fog" ); - i++; - } -} - -display_message( titletext, notifytext, duration ) -{ - notifydata = spawnstruct(); - notifydata.titletext = notifytext; - notifydata.notifytext = titletext; - notifydata.sound = "mus_level_up"; - notifydata.duration = duration; - notifydata.glowcolor = ( 0, 0, 1 ); - notifydata.color = ( 0, 0, 1 ); - notifydata.iconname = "hud_zombies_meat"; - self thread maps/mp/gametypes_zm/_hud_message::notifymessage( notifydata ); -} - -is_quad() -{ - return self.animname == "quad_zombie"; -} - -is_leaper() -{ - return self.animname == "leaper_zombie"; -} - -shock_onpain() -{ - self endon( "death" ); - self endon( "disconnect" ); - self notify( "stop_shock_onpain" ); - self endon( "stop_shock_onpain" ); - if ( getDvar( "blurpain" ) == "" ) - { - setdvar( "blurpain", "on" ); - } - for ( ;; ) - { - while ( 1 ) - { - oldhealth = self.health; - self waittill( "damage", damage, attacker, direction_vec, point, mod ); - if ( isDefined( level.shock_onpain ) && !level.shock_onpain ) - { - continue; - } - if ( isDefined( self.shock_onpain ) && !self.shock_onpain ) - { - continue; - } - while ( self.health < 1 ) - { - continue; - } - if ( mod == "MOD_PROJECTILE" || mod == "MOD_PROJECTILE_SPLASH" ) - { - } - } - else if ( mod != "MOD_GRENADE_SPLASH" || mod == "MOD_GRENADE" && mod == "MOD_EXPLOSIVE" ) - { - shocktype = undefined; - shocklight = undefined; - if ( isDefined( self.is_burning ) && self.is_burning ) - { - shocktype = "lava"; - shocklight = "lava_small"; - } - self shock_onexplosion( damage, shocktype, shocklight ); - continue; - } - else - { - if ( getDvar( "blurpain" ) == "on" ) - { - self shellshock( "pain", 0,5 ); - } - } - } -} - -shock_onexplosion( damage, shocktype, shocklight ) -{ - time = 0; - scaled_damage = ( 100 * damage ) / self.maxhealth; - if ( scaled_damage >= 90 ) - { - time = 4; - } - else if ( scaled_damage >= 50 ) - { - time = 3; - } - else if ( scaled_damage >= 25 ) - { - time = 2; - } - else - { - if ( scaled_damage > 10 ) - { - time = 1; - } - } - if ( time ) - { - if ( !isDefined( shocktype ) ) - { - shocktype = "explosion"; - } - self shellshock( shocktype, time ); - } - else - { - if ( isDefined( shocklight ) ) - { - self shellshock( shocklight, time ); - } - } -} - -increment_is_drinking() -{ -/# - if ( isDefined( level.devgui_dpad_watch ) && level.devgui_dpad_watch ) - { - self.is_drinking++; - return; -#/ - } - if ( !isDefined( self.is_drinking ) ) - { - self.is_drinking = 0; - } - if ( self.is_drinking == 0 ) - { - self disableoffhandweapons(); - self disableweaponcycling(); - } - self.is_drinking++; -} - -is_multiple_drinking() -{ - return self.is_drinking > 1; -} - -decrement_is_drinking() -{ - if ( self.is_drinking > 0 ) - { - self.is_drinking--; - - } - else - { -/# - assertmsg( "making is_drinking less than 0" ); -#/ - } - if ( self.is_drinking == 0 ) - { - self enableoffhandweapons(); - self enableweaponcycling(); - } -} - -clear_is_drinking() -{ - self.is_drinking = 0; - self enableoffhandweapons(); - self enableweaponcycling(); -} - -spawn_weapon_model( weapon, model, origin, angles, options ) -{ - if ( !isDefined( model ) ) - { - model = getweaponmodel( weapon ); - } - weapon_model = spawn( "script_model", origin ); - if ( isDefined( angles ) ) - { - weapon_model.angles = angles; - } - if ( isDefined( options ) ) - { - weapon_model useweaponmodel( weapon, model, options ); - } - else - { - weapon_model useweaponmodel( weapon, model ); - } - return weapon_model; -} - -is_limited_weapon( weapname ) -{ - if ( isDefined( level.limited_weapons ) ) - { - if ( isDefined( level.limited_weapons[ weapname ] ) ) - { - return 1; - } - } - return 0; -} - -is_alt_weapon( weapname ) -{ - if ( getsubstr( weapname, 0, 3 ) == "gl_" ) - { - return 1; - } - if ( getsubstr( weapname, 0, 3 ) == "sf_" ) - { - return 1; - } - if ( getsubstr( weapname, 0, 10 ) == "dualoptic_" ) - { - return 1; - } - return 0; -} - -is_grenade_launcher( weapname ) -{ - if ( weapname != "m32_zm" ) - { - return weapname == "m32_upgraded_zm"; - } -} - -register_lethal_grenade_for_level( weaponname ) -{ - if ( is_lethal_grenade( weaponname ) ) - { - return; - } - if ( !isDefined( level.zombie_lethal_grenade_list ) ) - { - level.zombie_lethal_grenade_list = []; - } - level.zombie_lethal_grenade_list[ weaponname ] = weaponname; -} - -is_lethal_grenade( weaponname ) -{ - if ( !isDefined( weaponname ) || !isDefined( level.zombie_lethal_grenade_list ) ) - { - return 0; - } - return isDefined( level.zombie_lethal_grenade_list[ weaponname ] ); -} - -is_player_lethal_grenade( weaponname ) -{ - if ( !isDefined( weaponname ) || !isDefined( self.current_lethal_grenade ) ) - { - return 0; - } - return self.current_lethal_grenade == weaponname; -} - -get_player_lethal_grenade() -{ - grenade = ""; - if ( isDefined( self.current_lethal_grenade ) ) - { - grenade = self.current_lethal_grenade; - } - return grenade; -} - -set_player_lethal_grenade( weaponname ) -{ - self.current_lethal_grenade = weaponname; -} - -init_player_lethal_grenade() -{ - self set_player_lethal_grenade( level.zombie_lethal_grenade_player_init ); -} - -register_tactical_grenade_for_level( weaponname ) -{ - if ( is_tactical_grenade( weaponname ) ) - { - return; - } - if ( !isDefined( level.zombie_tactical_grenade_list ) ) - { - level.zombie_tactical_grenade_list = []; - } - level.zombie_tactical_grenade_list[ weaponname ] = weaponname; -} - -is_tactical_grenade( weaponname ) -{ - if ( !isDefined( weaponname ) || !isDefined( level.zombie_tactical_grenade_list ) ) - { - return 0; - } - return isDefined( level.zombie_tactical_grenade_list[ weaponname ] ); -} - -is_player_tactical_grenade( weaponname ) -{ - if ( !isDefined( weaponname ) || !isDefined( self.current_tactical_grenade ) ) - { - return 0; - } - return self.current_tactical_grenade == weaponname; -} - -get_player_tactical_grenade() -{ - tactical = ""; - if ( isDefined( self.current_tactical_grenade ) ) - { - tactical = self.current_tactical_grenade; - } - return tactical; -} - -set_player_tactical_grenade( weaponname ) -{ - self.current_tactical_grenade = weaponname; -} - -init_player_tactical_grenade() -{ - self set_player_tactical_grenade( level.zombie_tactical_grenade_player_init ); -} - -register_placeable_mine_for_level( weaponname ) -{ - if ( is_placeable_mine( weaponname ) ) - { - return; - } - if ( !isDefined( level.zombie_placeable_mine_list ) ) - { - level.zombie_placeable_mine_list = []; - } - level.zombie_placeable_mine_list[ weaponname ] = weaponname; -} - -is_placeable_mine( weaponname ) -{ - if ( !isDefined( weaponname ) || !isDefined( level.zombie_placeable_mine_list ) ) - { - return 0; - } - return isDefined( level.zombie_placeable_mine_list[ weaponname ] ); -} - -is_player_placeable_mine( weaponname ) -{ - if ( !isDefined( weaponname ) || !isDefined( self.current_placeable_mine ) ) - { - return 0; - } - return self.current_placeable_mine == weaponname; -} - -get_player_placeable_mine() -{ - return self.current_placeable_mine; -} - -set_player_placeable_mine( weaponname ) -{ - self.current_placeable_mine = weaponname; -} - -init_player_placeable_mine() -{ - self set_player_placeable_mine( level.zombie_placeable_mine_player_init ); -} - -register_melee_weapon_for_level( weaponname ) -{ - if ( is_melee_weapon( weaponname ) ) - { - return; - } - if ( !isDefined( level.zombie_melee_weapon_list ) ) - { - level.zombie_melee_weapon_list = []; - } - level.zombie_melee_weapon_list[ weaponname ] = weaponname; -} - -is_melee_weapon( weaponname ) -{ - if ( !isDefined( weaponname ) || !isDefined( level.zombie_melee_weapon_list ) ) - { - return 0; - } - return isDefined( level.zombie_melee_weapon_list[ weaponname ] ); -} - -is_player_melee_weapon( weaponname ) -{ - if ( !isDefined( weaponname ) || !isDefined( self.current_melee_weapon ) ) - { - return 0; - } - return self.current_melee_weapon == weaponname; -} - -get_player_melee_weapon() -{ - return self.current_melee_weapon; -} - -set_player_melee_weapon( weaponname ) -{ - self.current_melee_weapon = weaponname; -} - -init_player_melee_weapon() -{ - self set_player_melee_weapon( level.zombie_melee_weapon_player_init ); -} - -register_equipment_for_level( weaponname ) -{ - if ( is_equipment( weaponname ) ) - { - return; - } - if ( !isDefined( level.zombie_equipment_list ) ) - { - level.zombie_equipment_list = []; - } - level.zombie_equipment_list[ weaponname ] = weaponname; -} - -is_equipment( weaponname ) -{ - if ( !isDefined( weaponname ) || !isDefined( level.zombie_equipment_list ) ) - { - return 0; - } - return isDefined( level.zombie_equipment_list[ weaponname ] ); -} - -is_equipment_that_blocks_purchase( weaponname ) -{ - return is_equipment( weaponname ); -} - -is_player_equipment( weaponname ) -{ - if ( !isDefined( weaponname ) || !isDefined( self.current_equipment ) ) - { - return 0; - } - return self.current_equipment == weaponname; -} - -has_deployed_equipment( weaponname ) -{ - if ( isDefined( weaponname ) || !isDefined( self.deployed_equipment ) && self.deployed_equipment.size < 1 ) - { - return 0; - } - i = 0; - while ( i < self.deployed_equipment.size ) - { - if ( self.deployed_equipment[ i ] == weaponname ) - { - return 1; - } - i++; - } - return 0; -} - -has_player_equipment( weaponname ) -{ - if ( !self is_player_equipment( weaponname ) ) - { - return self has_deployed_equipment( weaponname ); - } -} - -get_player_equipment() -{ - return self.current_equipment; -} - -hacker_active() -{ - return self maps/mp/zombies/_zm_equipment::is_equipment_active( "equip_hacker_zm" ); -} - -set_player_equipment( weaponname ) -{ - if ( !isDefined( self.current_equipment_active ) ) - { - self.current_equipment_active = []; - } - if ( isDefined( weaponname ) ) - { - self.current_equipment_active[ weaponname ] = 0; - } - if ( !isDefined( self.equipment_got_in_round ) ) - { - self.equipment_got_in_round = []; - } - if ( isDefined( weaponname ) ) - { - self.equipment_got_in_round[ weaponname ] = level.round_number; - } - self.current_equipment = weaponname; -} - -init_player_equipment() -{ - self set_player_equipment( level.zombie_equipment_player_init ); -} - -register_offhand_weapons_for_level_defaults() -{ - if ( isDefined( level.register_offhand_weapons_for_level_defaults_override ) ) - { - [[ level.register_offhand_weapons_for_level_defaults_override ]](); - return; - } - register_lethal_grenade_for_level( "frag_grenade_zm" ); - level.zombie_lethal_grenade_player_init = "frag_grenade_zm"; - register_tactical_grenade_for_level( "cymbal_monkey_zm" ); - level.zombie_tactical_grenade_player_init = undefined; - register_placeable_mine_for_level( "claymore_zm" ); - level.zombie_placeable_mine_player_init = undefined; - register_melee_weapon_for_level( "knife_zm" ); - register_melee_weapon_for_level( "bowie_knife_zm" ); - level.zombie_melee_weapon_player_init = "knife_zm"; - level.zombie_equipment_player_init = undefined; -} - -init_player_offhand_weapons() -{ - init_player_lethal_grenade(); - init_player_tactical_grenade(); - init_player_placeable_mine(); - init_player_melee_weapon(); - init_player_equipment(); -} - -is_offhand_weapon( weaponname ) -{ - if ( !is_lethal_grenade( weaponname ) && !is_tactical_grenade( weaponname ) && !is_placeable_mine( weaponname ) && !is_melee_weapon( weaponname ) ) - { - return is_equipment( weaponname ); - } -} - -is_player_offhand_weapon( weaponname ) -{ - if ( !self is_player_lethal_grenade( weaponname ) && !self is_player_tactical_grenade( weaponname ) && !self is_player_placeable_mine( weaponname ) && !self is_player_melee_weapon( weaponname ) ) - { - return self is_player_equipment( weaponname ); - } -} - -has_powerup_weapon() -{ - if ( isDefined( self.has_powerup_weapon ) ) - { - return self.has_powerup_weapon; - } -} - -give_start_weapon( switch_to_weapon ) -{ - self giveweapon( level.start_weapon ); - self givestartammo( level.start_weapon ); - if ( isDefined( switch_to_weapon ) && switch_to_weapon ) - { - self switchtoweapon( level.start_weapon ); - } -} - -array_flag_wait_any( flag_array ) -{ - if ( !isDefined( level._array_flag_wait_any_calls ) ) - { - level._n_array_flag_wait_any_calls = 0; - } - else - { - level._n_array_flag_wait_any_calls++; - } - str_condition = "array_flag_wait_call_" + level._n_array_flag_wait_any_calls; - index = 0; - while ( index < flag_array.size ) - { - level thread array_flag_wait_any_thread( flag_array[ index ], str_condition ); - index++; - } - level waittill( str_condition ); -} - -array_flag_wait_any_thread( flag_name, condition ) -{ - level endon( condition ); - flag_wait( flag_name ); - level notify( condition ); -} - -array_removedead( array ) -{ - newarray = []; - if ( !isDefined( array ) ) - { - return undefined; - } - i = 0; - while ( i < array.size ) - { - if ( !isalive( array[ i ] ) || isDefined( array[ i ].isacorpse ) && array[ i ].isacorpse ) - { - i++; - continue; - } - else - { - newarray[ newarray.size ] = array[ i ]; - } - i++; - } - return newarray; -} - -groundpos( origin ) -{ - return bullettrace( origin, origin + vectorScale( ( 0, 0, 1 ), 100000 ), 0, self )[ "position" ]; -} - -groundpos_ignore_water( origin ) -{ - return bullettrace( origin, origin + vectorScale( ( 0, 0, 1 ), 100000 ), 0, self, 1 )[ "position" ]; -} - -groundpos_ignore_water_new( origin ) -{ - return groundtrace( origin, origin + vectorScale( ( 0, 0, 1 ), 100000 ), 0, self, 1 )[ "position" ]; -} - -waittill_notify_or_timeout( msg, timer ) -{ - self endon( msg ); - wait timer; -} - -self_delete() -{ - if ( isDefined( self ) ) - { - self delete(); - } -} - -script_delay() -{ - if ( isDefined( self.script_delay ) ) - { - wait self.script_delay; - return 1; - } - else - { - if ( isDefined( self.script_delay_min ) && isDefined( self.script_delay_max ) ) - { - wait randomfloatrange( self.script_delay_min, self.script_delay_max ); - return 1; - } - } - return 0; -} - -button_held_think( which_button ) -{ - self endon( "disconnect" ); - if ( !isDefined( self._holding_button ) ) - { - self._holding_button = []; - } - self._holding_button[ which_button ] = 0; - time_started = 0; - use_time = 250; - while ( 1 ) - { - if ( self._holding_button[ which_button ] ) - { - if ( !( self [[ level._button_funcs[ which_button ] ]]() ) ) - { - self._holding_button[ which_button ] = 0; - } - } - else if ( self [[ level._button_funcs[ which_button ] ]]() ) - { - if ( time_started == 0 ) - { - time_started = getTime(); - } - if ( ( getTime() - time_started ) > use_time ) - { - self._holding_button[ which_button ] = 1; - } - } - else - { - if ( time_started != 0 ) - { - time_started = 0; - } - } - wait 0,05; - } -} - -use_button_held() -{ - init_button_wrappers(); - if ( !isDefined( self._use_button_think_threaded ) ) - { - self thread button_held_think( level.button_use ); - self._use_button_think_threaded = 1; - } - return self._holding_button[ level.button_use ]; -} - -ads_button_held() -{ - init_button_wrappers(); - if ( !isDefined( self._ads_button_think_threaded ) ) - { - self thread button_held_think( level.button_ads ); - self._ads_button_think_threaded = 1; - } - return self._holding_button[ level.button_ads ]; -} - -attack_button_held() -{ - init_button_wrappers(); - if ( !isDefined( self._attack_button_think_threaded ) ) - { - self thread button_held_think( level.button_attack ); - self._attack_button_think_threaded = 1; - } - return self._holding_button[ level.button_attack ]; -} - -use_button_pressed() -{ - return self usebuttonpressed(); -} - -ads_button_pressed() -{ - return self adsbuttonpressed(); -} - -attack_button_pressed() -{ - return self attackbuttonpressed(); -} - -init_button_wrappers() -{ - if ( !isDefined( level._button_funcs ) ) - { - level.button_use = 0; - level.button_ads = 1; - level.button_attack = 2; - level._button_funcs[ level.button_use ] = ::use_button_pressed; - level._button_funcs[ level.button_ads ] = ::ads_button_pressed; - level._button_funcs[ level.button_attack ] = ::attack_button_pressed; - } -} - -wait_network_frame() -{ - if ( numremoteclients() ) - { - snapshot_ids = getsnapshotindexarray(); - acked = undefined; - while ( !isDefined( acked ) ) - { - level waittill( "snapacknowledged" ); - acked = snapshotacknowledged( snapshot_ids ); - } - } - else wait 0,1; -} - -ignore_triggers( timer ) -{ - self endon( "death" ); - self.ignoretriggers = 1; - if ( isDefined( timer ) ) - { - wait timer; - } - else - { - wait 0,5; - } - self.ignoretriggers = 0; -} - -giveachievement_wrapper( achievement, all_players ) -{ - if ( achievement == "" ) - { - return; - } - achievement_lower = tolower( achievement ); - global_counter = 0; - if ( isDefined( all_players ) && all_players ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] giveachievement( achievement ); - has_achievement = players[ i ] maps/mp/zombies/_zm_stats::get_global_stat( achievement_lower ); - if ( isDefined( has_achievement ) && !has_achievement ) - { - global_counter++; - } - players[ i ] maps/mp/zombies/_zm_stats::increment_client_stat( achievement_lower, 0 ); - if ( issplitscreen() || i == 0 && !issplitscreen() ) - { - if ( isDefined( level.achievement_sound_func ) ) - { - players[ i ] thread [[ level.achievement_sound_func ]]( achievement_lower ); - } - } - i++; - } - } - else if ( !isplayer( self ) ) - { -/# - println( "^1self needs to be a player for _utility::giveachievement_wrapper()" ); -#/ - return; - } - self giveachievement( achievement ); - has_achievement = self maps/mp/zombies/_zm_stats::get_global_stat( achievement_lower ); - if ( isDefined( has_achievement ) && !has_achievement ) - { - global_counter++; - } - self maps/mp/zombies/_zm_stats::increment_client_stat( achievement_lower, 0 ); - if ( isDefined( level.achievement_sound_func ) ) - { - self thread [[ level.achievement_sound_func ]]( achievement_lower ); - } - if ( global_counter ) - { - incrementcounter( "global_" + achievement_lower, global_counter ); - } -} - -spawn_failed( spawn ) -{ - if ( isDefined( spawn ) && isalive( spawn ) ) - { - if ( isalive( spawn ) ) - { - return 0; - } - } - return 1; -} - -getyaw( org ) -{ - angles = vectorToAngle( org - self.origin ); - return angles[ 1 ]; -} - -getyawtospot( spot ) -{ - pos = spot; - yaw = self.angles[ 1 ] - getyaw( pos ); - yaw = angleClamp180( yaw ); - return yaw; -} - -add_spawn_function( function, param1, param2, param3, param4 ) -{ -/# - if ( isDefined( level._loadstarted ) ) - { - assert( !isalive( self ), "Tried to add_spawn_function to a living guy." ); - } -#/ - func = []; - func[ "function" ] = function; - func[ "param1" ] = param1; - func[ "param2" ] = param2; - func[ "param3" ] = param3; - func[ "param4" ] = param4; - if ( !isDefined( self.spawn_funcs ) ) - { - self.spawn_funcs = []; - } - self.spawn_funcs[ self.spawn_funcs.size ] = func; -} - -disable_react() -{ -/# - assert( isalive( self ), "Tried to disable react on a non ai" ); -#/ - self.a.disablereact = 1; - self.allowreact = 0; -} - -enable_react() -{ -/# - assert( isalive( self ), "Tried to enable react on a non ai" ); -#/ - self.a.disablereact = 0; - self.allowreact = 1; -} - -flag_wait_or_timeout( flagname, timer ) -{ - start_time = getTime(); - for ( ;; ) - { - if ( level.flag[ flagname ] ) - { - return; - } - else if ( getTime() >= ( start_time + ( timer * 1000 ) ) ) - { - return; - } - else - { - wait_for_flag_or_time_elapses( flagname, timer ); - } - } -} - -wait_for_flag_or_time_elapses( flagname, timer ) -{ - level endon( flagname ); - wait timer; -} - -isads( player ) -{ - return player playerads() > 0,5; -} - -bullet_attack( type ) -{ - if ( type == "MOD_PISTOL_BULLET" ) - { - return 1; - } - return type == "MOD_RIFLE_BULLET"; -} - -pick_up() -{ - player = self.owner; - self destroy_ent(); - clip_ammo = player getweaponammoclip( self.name ); - clip_max_ammo = weaponclipsize( self.name ); - if ( clip_ammo < clip_max_ammo ) - { - clip_ammo++; - } - player setweaponammoclip( self.name, clip_ammo ); -} - -destroy_ent() -{ - self delete(); -} - -waittill_not_moving() -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "detonated" ); - level endon( "game_ended" ); - if ( self.classname == "grenade" ) - { - self waittill( "stationary" ); - } - else prevorigin = self.origin; - while ( 1 ) - { - wait 0,15; - if ( self.origin == prevorigin ) - { - return; - } - else - { - prevorigin = self.origin; - } - } -} - -get_closest_player( org ) -{ - players = []; - players = get_players(); - return getclosest( org, players ); -} - -ent_flag_wait( msg ) -{ - self endon( "death" ); - while ( !self.ent_flag[ msg ] ) - { - self waittill( msg ); - } -} - -ent_flag_wait_either( flag1, flag2 ) -{ - self endon( "death" ); - for ( ;; ) - { - if ( ent_flag( flag1 ) ) - { - return; - } - if ( ent_flag( flag2 ) ) - { - return; - } - self waittill_either( flag1, flag2 ); - } -} - -ent_wait_for_flag_or_time_elapses( flagname, timer ) -{ - self endon( flagname ); - wait timer; -} - -ent_flag_wait_or_timeout( flagname, timer ) -{ - self endon( "death" ); - start_time = getTime(); - for ( ;; ) - { - if ( self.ent_flag[ flagname ] ) - { - return; - } - else if ( getTime() >= ( start_time + ( timer * 1000 ) ) ) - { - return; - } - else - { - self ent_wait_for_flag_or_time_elapses( flagname, timer ); - } - } -} - -ent_flag_waitopen( msg ) -{ - self endon( "death" ); - while ( self.ent_flag[ msg ] ) - { - self waittill( msg ); - } -} - -ent_flag_init( message, val ) -{ - if ( !isDefined( self.ent_flag ) ) - { - self.ent_flag = []; - self.ent_flags_lock = []; - } - if ( !isDefined( level.first_frame ) ) - { -/# - assert( !isDefined( self.ent_flag[ message ] ), "Attempt to reinitialize existing flag '" + message + "' on entity." ); -#/ - } - if ( isDefined( val ) && val ) - { - self.ent_flag[ message ] = 1; -/# - self.ent_flags_lock[ message ] = 1; -#/ - } - else - { - self.ent_flag[ message ] = 0; -/# - self.ent_flags_lock[ message ] = 0; -#/ - } -} - -ent_flag_exist( message ) -{ - if ( isDefined( self.ent_flag ) && isDefined( self.ent_flag[ message ] ) ) - { - return 1; - } - return 0; -} - -ent_flag_set_delayed( message, delay ) -{ - wait delay; - self ent_flag_set( message ); -} - -ent_flag_set( message ) -{ -/# - assert( isDefined( self ), "Attempt to set a flag on entity that is not defined" ); - assert( isDefined( self.ent_flag[ message ] ), "Attempt to set a flag before calling flag_init: '" + message + "'." ); - assert( self.ent_flag[ message ] == self.ent_flags_lock[ message ] ); - self.ent_flags_lock[ message ] = 1; -#/ - self.ent_flag[ message ] = 1; - self notify( message ); -} - -ent_flag_toggle( message ) -{ - if ( self ent_flag( message ) ) - { - self ent_flag_clear( message ); - } - else - { - self ent_flag_set( message ); - } -} - -ent_flag_clear( message ) -{ -/# - assert( isDefined( self ), "Attempt to clear a flag on entity that is not defined" ); - assert( isDefined( self.ent_flag[ message ] ), "Attempt to set a flag before calling flag_init: '" + message + "'." ); - assert( self.ent_flag[ message ] == self.ent_flags_lock[ message ] ); - self.ent_flags_lock[ message ] = 0; -#/ - if ( self.ent_flag[ message ] ) - { - self.ent_flag[ message ] = 0; - self notify( message ); - } -} - -ent_flag_clear_delayed( message, delay ) -{ - wait delay; - self ent_flag_clear( message ); -} - -ent_flag( message ) -{ -/# - assert( isDefined( message ), "Tried to check flag but the flag was not defined." ); -#/ -/# - assert( isDefined( self.ent_flag[ message ] ), "Tried to check entity flag '" + message + "', but the flag was not initialized." ); -#/ - if ( !self.ent_flag[ message ] ) - { - return 0; - } - return 1; -} - -ent_flag_init_ai_standards() -{ - message_array = []; - message_array[ message_array.size ] = "goal"; - message_array[ message_array.size ] = "damage"; - i = 0; - while ( i < message_array.size ) - { - self ent_flag_init( message_array[ i ] ); - self thread ent_flag_wait_ai_standards( message_array[ i ] ); - i++; - } -} - -ent_flag_wait_ai_standards( message ) -{ - self endon( "death" ); - self waittill( message ); - self.ent_flag[ message ] = 1; -} - -flat_angle( angle ) -{ - rangle = ( 0, angle[ 1 ], 0 ); - return rangle; -} - -waittill_any_or_timeout( timer, string1, string2, string3, string4, string5 ) -{ -/# - assert( isDefined( string1 ) ); -#/ - self endon( string1 ); - if ( isDefined( string2 ) ) - { - self endon( string2 ); - } - if ( isDefined( string3 ) ) - { - self endon( string3 ); - } - if ( isDefined( string4 ) ) - { - self endon( string4 ); - } - if ( isDefined( string5 ) ) - { - self endon( string5 ); - } - wait timer; -} - -clear_run_anim() -{ - self.alwaysrunforward = undefined; - self.a.combatrunanim = undefined; - self.run_noncombatanim = undefined; - self.walk_combatanim = undefined; - self.walk_noncombatanim = undefined; - self.precombatrunenabled = 1; -} - -track_players_intersection_tracker() -{ - self endon( "disconnect" ); - self endon( "death" ); - level endon( "end_game" ); - wait 5; - while ( 1 ) - { - killed_players = 0; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() || players[ i ].sessionstate != "playing" ) - { - i++; - continue; - } - else - { - j = 0; - while ( j < players.size ) - { - if ( j != i || players[ j ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() && players[ j ].sessionstate != "playing" ) - { - j++; - continue; - } - else - { - if ( isDefined( level.player_intersection_tracker_override ) ) - { - if ( players[ i ] [[ level.player_intersection_tracker_override ]]( players[ j ] ) ) - { - j++; - continue; - } - } - else playeri_origin = players[ i ].origin; - playerj_origin = players[ j ].origin; - if ( abs( playeri_origin[ 2 ] - playerj_origin[ 2 ] ) > 60 ) - { - j++; - continue; - } - else distance_apart = distance2d( playeri_origin, playerj_origin ); - if ( abs( distance_apart ) > 18 ) - { - j++; - continue; - } - else - { -/# - iprintlnbold( "PLAYERS ARE TOO FRIENDLY!!!!!" ); -#/ - players[ i ] dodamage( 1000, ( 0, 0, 1 ) ); - players[ j ] dodamage( 1000, ( 0, 0, 1 ) ); - if ( !killed_players ) - { - players[ i ] playlocalsound( level.zmb_laugh_alias ); - } - players[ i ] maps/mp/zombies/_zm_stats::increment_map_cheat_stat( "cheat_too_friendly" ); - players[ i ] maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_too_friendly", 0 ); - players[ i ] maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 ); - players[ j ] maps/mp/zombies/_zm_stats::increment_map_cheat_stat( "cheat_too_friendly" ); - players[ j ] maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_too_friendly", 0 ); - players[ j ] maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 ); - killed_players = 1; - } - } - j++; - } - } - i++; - } - wait 0,5; - } -} - -get_eye() -{ - if ( isplayer( self ) ) - { - linked_ent = self getlinkedent(); - if ( isDefined( linked_ent ) && getDvarInt( "cg_cameraUseTagCamera" ) > 0 ) - { - camera = linked_ent gettagorigin( "tag_camera" ); - if ( isDefined( camera ) ) - { - return camera; - } - } - } - pos = self geteye(); - return pos; -} - -is_player_looking_at( origin, dot, do_trace, ignore_ent ) -{ -/# - assert( isplayer( self ), "player_looking_at must be called on a player." ); -#/ - if ( !isDefined( dot ) ) - { - dot = 0,7; - } - if ( !isDefined( do_trace ) ) - { - do_trace = 1; - } - eye = self get_eye(); - delta_vec = anglesToForward( vectorToAngle( origin - eye ) ); - view_vec = anglesToForward( self getplayerangles() ); - new_dot = vectordot( delta_vec, view_vec ); - if ( new_dot >= dot ) - { - if ( do_trace ) - { - return bullettracepassed( origin, eye, 0, ignore_ent ); - } - else - { - return 1; - } - } - return 0; -} - -add_gametype( gt, dummy1, name, dummy2 ) -{ -} - -add_gameloc( gl, dummy1, name, dummy2 ) -{ -} - -get_closest_index( org, array, dist ) -{ - if ( !isDefined( dist ) ) - { - dist = 9999999; - } - distsq = dist * dist; - if ( array.size < 1 ) - { - return; - } - index = undefined; - i = 0; - while ( i < array.size ) - { - newdistsq = distancesquared( array[ i ].origin, org ); - if ( newdistsq >= distsq ) - { - i++; - continue; - } - else - { - distsq = newdistsq; - index = i; - } - i++; - } - return index; -} - -is_valid_zombie_spawn_point( point ) -{ - liftedorigin = point.origin + vectorScale( ( 0, 0, 1 ), 5 ); - size = 48; - height = 64; - mins = ( -1 * size, -1 * size, 0 ); - maxs = ( size, size, height ); - absmins = liftedorigin + mins; - absmaxs = liftedorigin + maxs; - if ( boundswouldtelefrag( absmins, absmaxs ) ) - { - return 0; - } - return 1; -} - -get_closest_index_to_entity( entity, array, dist, extra_check ) -{ - org = entity.origin; - if ( !isDefined( dist ) ) - { - dist = 9999999; - } - distsq = dist * dist; - if ( array.size < 1 ) - { - return; - } - index = undefined; - i = 0; - while ( i < array.size ) - { - if ( isDefined( extra_check ) && !( [[ extra_check ]]( entity, array[ i ] ) ) ) - { - i++; - continue; - } - else - { - newdistsq = distancesquared( array[ i ].origin, org ); - if ( newdistsq >= distsq ) - { - i++; - continue; - } - else - { - distsq = newdistsq; - index = i; - } - } - i++; - } - return index; -} - -set_gamemode_var( var, val ) -{ - if ( !isDefined( game[ "gamemode_match" ] ) ) - { - game[ "gamemode_match" ] = []; - } - game[ "gamemode_match" ][ var ] = val; -} - -set_gamemode_var_once( var, val ) -{ - if ( !isDefined( game[ "gamemode_match" ] ) ) - { - game[ "gamemode_match" ] = []; - } - if ( !isDefined( game[ "gamemode_match" ][ var ] ) ) - { - game[ "gamemode_match" ][ var ] = val; - } -} - -set_game_var( var, val ) -{ - game[ var ] = val; -} - -set_game_var_once( var, val ) -{ - if ( !isDefined( game[ var ] ) ) - { - game[ var ] = val; - } -} - -get_game_var( var ) -{ - if ( isDefined( game[ var ] ) ) - { - return game[ var ]; - } - return undefined; -} - -get_gamemode_var( var ) -{ - if ( isDefined( game[ "gamemode_match" ] ) && isDefined( game[ "gamemode_match" ][ var ] ) ) - { - return game[ "gamemode_match" ][ var ]; - } - return undefined; -} - -waittill_subset( min_num, string1, string2, string3, string4, string5 ) -{ - self endon( "death" ); - ent = spawnstruct(); - ent.threads = 0; - returned_threads = 0; - if ( isDefined( string1 ) ) - { - self thread waittill_string( string1, ent ); - ent.threads++; - } - if ( isDefined( string2 ) ) - { - self thread waittill_string( string2, ent ); - ent.threads++; - } - if ( isDefined( string3 ) ) - { - self thread waittill_string( string3, ent ); - ent.threads++; - } - if ( isDefined( string4 ) ) - { - self thread waittill_string( string4, ent ); - ent.threads++; - } - if ( isDefined( string5 ) ) - { - self thread waittill_string( string5, ent ); - ent.threads++; - } - while ( ent.threads ) - { - ent waittill( "returned" ); - ent.threads--; - - returned_threads++; - if ( returned_threads >= min_num ) - { - break; - } - else - { - } - } - ent notify( "die" ); -} - -is_headshot( sweapon, shitloc, smeansofdeath ) -{ - if ( shitloc != "head" && shitloc != "helmet" ) - { - return 0; - } - if ( smeansofdeath == "MOD_IMPACT" && issubstr( sweapon, "knife_ballistic" ) ) - { - return 1; - } - if ( smeansofdeath != "MOD_MELEE" && smeansofdeath != "MOD_BAYONET" && smeansofdeath != "MOD_IMPACT" ) - { - return smeansofdeath != "MOD_UNKNOWN"; - } -} - -is_jumping() -{ - ground_ent = self getgroundent(); - return !isDefined( ground_ent ); -} - -is_explosive_damage( mod ) -{ - if ( !isDefined( mod ) ) - { - return 0; - } - if ( mod != "MOD_GRENADE" && mod != "MOD_GRENADE_SPLASH" && mod != "MOD_PROJECTILE" || mod == "MOD_PROJECTILE_SPLASH" && mod == "MOD_EXPLOSIVE" ) - { - return 1; - } - return 0; -} - -sndswitchannouncervox( who ) -{ - switch( who ) - { - case "sam": - game[ "zmbdialog" ][ "prefix" ] = "vox_zmba_sam"; - level.zmb_laugh_alias = "zmb_laugh_sam"; - level.sndannouncerisrich = 0; - break; - case "richtofen": - game[ "zmbdialog" ][ "prefix" ] = "vox_zmba"; - level.zmb_laugh_alias = "zmb_laugh_richtofen"; - level.sndannouncerisrich = 1; - break; - } -} - -do_player_general_vox( category, type, timer, chance ) -{ - if ( isDefined( timer ) && isDefined( level.votimer[ type ] ) && level.votimer[ type ] > 0 ) - { - return; - } - if ( !isDefined( chance ) ) - { - chance = maps/mp/zombies/_zm_audio::get_response_chance( type ); - } - if ( chance > randomint( 100 ) ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( category, type ); - if ( isDefined( timer ) ) - { - level.votimer[ type ] = timer; - level thread general_vox_timer( level.votimer[ type ], type ); - } - } -} - -general_vox_timer( timer, type ) -{ - level endon( "end_game" ); -/# - println( "ZM >> VOX TIMER STARTED FOR " + type + " ( " + timer + ")" ); -#/ - while ( timer > 0 ) - { - wait 1; - timer--; - - } - level.votimer[ type ] = timer; -/# - println( "ZM >> VOX TIMER ENDED FOR " + type + " ( " + timer + ")" ); -#/ -} - -create_vox_timer( type ) -{ - level.votimer[ type ] = 0; -} - -play_vox_to_player( category, type ) -{ - self thread maps/mp/zombies/_zm_audio::playvoxtoplayer( category, type ); -} - -is_favorite_weapon( weapon_to_check ) -{ - if ( !isDefined( self.favorite_wall_weapons_list ) ) - { - return 0; - } - _a6004 = self.favorite_wall_weapons_list; - _k6004 = getFirstArrayKey( _a6004 ); - while ( isDefined( _k6004 ) ) - { - weapon = _a6004[ _k6004 ]; - if ( weapon_to_check == weapon ) - { - return 1; - } - _k6004 = getNextArrayKey( _a6004, _k6004 ); - } - return 0; -} - -add_vox_response_chance( event, chance ) -{ - level.response_chances[ event ] = chance; -} - -set_demo_intermission_point() -{ - spawnpoints = getentarray( "mp_global_intermission", "classname" ); - if ( !spawnpoints.size ) - { - return; - } - spawnpoint = spawnpoints[ 0 ]; - match_string = ""; - location = level.scr_zm_map_start_location; - if ( location != "default" && location == "" && isDefined( level.default_start_location ) ) - { - location = level.default_start_location; - } - match_string = ( level.scr_zm_ui_gametype + "_" ) + location; - i = 0; - while ( i < spawnpoints.size ) - { - while ( isDefined( spawnpoints[ i ].script_string ) ) - { - tokens = strtok( spawnpoints[ i ].script_string, " " ); - _a6044 = tokens; - _k6044 = getFirstArrayKey( _a6044 ); - while ( isDefined( _k6044 ) ) - { - token = _a6044[ _k6044 ]; - if ( token == match_string ) - { - spawnpoint = spawnpoints[ i ]; - i = spawnpoints.size; - i++; - continue; - } - else - { - _k6044 = getNextArrayKey( _a6044, _k6044 ); - } - } - } - i++; - } - setdemointermissionpoint( spawnpoint.origin, spawnpoint.angles ); -} - -register_map_navcard( navcard_on_map, navcard_needed_for_computer ) -{ - level.navcard_needed = navcard_needed_for_computer; - level.map_navcard = navcard_on_map; -} - -does_player_have_map_navcard( player ) -{ - return player maps/mp/zombies/_zm_stats::get_global_stat( level.map_navcard ); -} - -does_player_have_correct_navcard( player ) -{ - if ( !isDefined( level.navcard_needed ) ) - { - return 0; - } - return player maps/mp/zombies/_zm_stats::get_global_stat( level.navcard_needed ); -} - -set_player_is_female( onoff ) -{ - if ( isDefined( level.use_female_animations ) && level.use_female_animations ) - { - female_perk = "specialty_gpsjammer"; - if ( onoff ) - { - self setperk( female_perk ); - return; - } - else - { - self unsetperk( female_perk ); - } - } -} - -disable_player_move_states( forcestancechange ) -{ - self allowcrouch( 1 ); - self allowlean( 0 ); - self allowads( 0 ); - self allowsprint( 0 ); - self allowprone( 0 ); - self allowmelee( 0 ); - if ( isDefined( forcestancechange ) && forcestancechange == 1 ) - { - if ( self getstance() == "prone" ) - { - self setstance( "crouch" ); - } - } -} - -enable_player_move_states() -{ - if ( !isDefined( self._allow_lean ) || self._allow_lean == 1 ) - { - self allowlean( 1 ); - } - if ( !isDefined( self._allow_ads ) || self._allow_ads == 1 ) - { - self allowads( 1 ); - } - if ( !isDefined( self._allow_sprint ) || self._allow_sprint == 1 ) - { - self allowsprint( 1 ); - } - if ( !isDefined( self._allow_prone ) || self._allow_prone == 1 ) - { - self allowprone( 1 ); - } - if ( !isDefined( self._allow_melee ) || self._allow_melee == 1 ) - { - self allowmelee( 1 ); - } -} - -check_and_create_node_lists() -{ - if ( !isDefined( level._link_node_list ) ) - { - level._link_node_list = []; - } - if ( !isDefined( level._unlink_node_list ) ) - { - level._unlink_node_list = []; - } -} - -link_nodes( a, b ) -{ - if ( nodesarelinked( a, b ) ) - { - return; - } - check_and_create_node_lists(); - a_index_string = "" + a.origin; - b_index_string = "" + b.origin; - if ( !isDefined( level._link_node_list[ a_index_string ] ) ) - { - level._link_node_list[ a_index_string ] = spawnstruct(); - level._link_node_list[ a_index_string ].node = a; - level._link_node_list[ a_index_string ].links = []; - } - if ( !isDefined( level._link_node_list[ a_index_string ].links[ b_index_string ] ) ) - { - level._link_node_list[ a_index_string ].links[ b_index_string ] = b; - } - if ( isDefined( level._unlink_node_list[ a_index_string ] ) ) - { - if ( isDefined( level._unlink_node_list[ a_index_string ].links[ b_index_string ] ) ) - { - } - } - linknodes( a, b ); -} - -unlink_nodes( a, b ) -{ - if ( !nodesarelinked( a, b ) ) - { - return; - } - check_and_create_node_lists(); - a_index_string = "" + a.origin; - b_index_string = "" + b.origin; - if ( !isDefined( level._unlink_node_list[ a_index_string ] ) ) - { - level._unlink_node_list[ a_index_string ] = spawnstruct(); - level._unlink_node_list[ a_index_string ].node = a; - level._unlink_node_list[ a_index_string ].links = []; - } - if ( !isDefined( level._unlink_node_list[ a_index_string ].links[ b_index_string ] ) ) - { - level._unlink_node_list[ a_index_string ].links[ b_index_string ] = b; - } - if ( isDefined( level._link_node_list[ a_index_string ] ) ) - { - if ( isDefined( level._link_node_list[ a_index_string ].links[ b_index_string ] ) ) - { - } - } - unlinknodes( a, b ); -} - -spawn_path_node( origin, angles, k1, v1, k2, v2 ) -{ - if ( !isDefined( level._spawned_path_nodes ) ) - { - level._spawned_path_nodes = []; - } - node = spawnstruct(); - node.origin = origin; - node.angles = angles; - node.k1 = k1; - node.v1 = v1; - node.k2 = k2; - node.v2 = v2; - node.node = spawn_path_node_internal( origin, angles, k1, v1, k2, v2 ); - level._spawned_path_nodes[ level._spawned_path_nodes.size ] = node; - return node.node; -} - -spawn_path_node_internal( origin, angles, k1, v1, k2, v2 ) -{ - if ( isDefined( k2 ) ) - { - return spawnpathnode( "node_pathnode", origin, angles, k1, v1, k2, v2 ); - } - else - { - if ( isDefined( k1 ) ) - { - return spawnpathnode( "node_pathnode", origin, angles, k1, v1 ); - } - else - { - return spawnpathnode( "node_pathnode", origin, angles ); - } - } - return undefined; -} - -delete_spawned_path_nodes() -{ -} - -respawn_path_nodes() -{ - if ( !isDefined( level._spawned_path_nodes ) ) - { - return; - } - i = 0; - while ( i < level._spawned_path_nodes.size ) - { - node_struct = level._spawned_path_nodes[ i ]; -/# - println( "Re-spawning spawned path node @ " + node_struct.origin ); -#/ - node_struct.node = spawn_path_node_internal( node_struct.origin, node_struct.angles, node_struct.k1, node_struct.v1, node_struct.k2, node_struct.v2 ); - i++; - } -} - -link_changes_internal_internal( list, func ) -{ - keys = getarraykeys( list ); - i = 0; - while ( i < keys.size ) - { - node = list[ keys[ i ] ].node; - node_keys = getarraykeys( list[ keys[ i ] ].links ); - j = 0; - while ( j < node_keys.size ) - { - if ( isDefined( list[ keys[ i ] ].links[ node_keys[ j ] ] ) ) - { -/# - println( "Node at " + keys[ i ] + " to node at " + node_keys[ j ] ); -#/ - [[ func ]]( node, list[ keys[ i ] ].links[ node_keys[ j ] ] ); - } - j++; - } - i++; - } -} - -link_changes_internal( func_for_link_list, func_for_unlink_list ) -{ - if ( isDefined( level._link_node_list ) ) - { -/# - println( "Link List" ); -#/ - link_changes_internal_internal( level._link_node_list, func_for_link_list ); - } - if ( isDefined( level._unlink_node_list ) ) - { -/# - println( "UnLink List" ); -#/ - link_changes_internal_internal( level._unlink_node_list, func_for_unlink_list ); - } -} - -link_nodes_wrapper( a, b ) -{ - if ( !nodesarelinked( a, b ) ) - { - linknodes( a, b ); - } -} - -unlink_nodes_wrapper( a, b ) -{ - if ( nodesarelinked( a, b ) ) - { - unlinknodes( a, b ); - } -} - -undo_link_changes() -{ -/# - println( "***" ); - println( "***" ); - println( "*** Undoing link changes" ); -#/ - link_changes_internal( ::unlink_nodes_wrapper, ::link_nodes_wrapper ); - delete_spawned_path_nodes(); -} - -redo_link_changes() -{ -/# - println( "***" ); - println( "***" ); - println( "*** Redoing link changes" ); -#/ - respawn_path_nodes(); - link_changes_internal( ::link_nodes_wrapper, ::unlink_nodes_wrapper ); -} - -set_player_tombstone_index() -{ - if ( !isDefined( level.tombstone_index ) ) - { - level.tombstone_index = 0; - } - if ( !isDefined( self.tombstone_index ) ) - { - self.tombstone_index = level.tombstone_index; - level.tombstone_index++; - } -} - -hotjoin_setup_player( viewmodel ) -{ - if ( is_true( level.passed_introscreen ) && !isDefined( self.first_spawn ) && !isDefined( self.characterindex ) ) - { - self.first_spawn = 1; - self setviewmodel( viewmodel ); - return 1; - } - return 0; -} - -is_zombie_perk_bottle( str_weapon ) -{ - switch( str_weapon ) - { - case "zombie_perk_bottle_additionalprimaryweapon": - case "zombie_perk_bottle_cherry": - case "zombie_perk_bottle_deadshot": - case "zombie_perk_bottle_doubletap": - case "zombie_perk_bottle_jugg": - case "zombie_perk_bottle_marathon": - case "zombie_perk_bottle_nuke": - case "zombie_perk_bottle_revive": - case "zombie_perk_bottle_sleight": - case "zombie_perk_bottle_tombstone": - case "zombie_perk_bottle_vulture": - case "zombie_perk_bottle_whoswho": - b_is_perk_bottle = 1; - break; - default: - b_is_perk_bottle = 0; - break; - } - return b_is_perk_bottle; -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_vulture.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_vulture.gsc deleted file mode 100644 index a1554c4..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_vulture.gsc +++ /dev/null @@ -1,195 +0,0 @@ -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init_vulture() -{ - setdvarint( "zombies_debug_vulture_perk", 1 ); - setdvarint( "zombies_perk_vulture_pickup_time", 12 ); - setdvarint( "zombies_perk_vulture_drop_chance", 25 ); - setdvarint( "zombies_perk_vulture_ammo_chance", 40 ); - setdvarint( "zombies_perk_vulture_points_chance", 50 ); - setdvarint( "zombies_perk_vulture_stink_chance", 10 ); -} - -enable_vulture_perk_for_level() -{ - level.zombiemode_using_vulture_perk = 1; -} - -give_vulture_perk() -{ - iprintln( "player " + self getentitynumber() + " has vulture perk!" ); - self.hasperkspecialtyvulture = 1; -} - -take_vulture_perk() -{ - iprintln( "player " + self getentitynumber() + " has lost vulture perk!" ); - self.hasperkspecialtyvulture = undefined; -} - -do_vulture_death( player ) -{ - if ( isDefined( self ) ) - { - self thread _do_vulture_death( player ); - } -} - -_do_vulture_death( player ) -{ - if ( should_do_vulture_drop() ) - { - str_bonus = get_vulture_drop_type(); - str_identifier = "_" + self getentitynumber() + "_" + getTime(); - player thread show_debug_info( self.origin, str_identifier, str_bonus ); - self thread check_vulture_drop_pickup( self.origin, player, str_identifier, str_bonus ); - } -} - -should_do_vulture_drop() -{ - n_roll = randomint( 100 ); - b_should_drop = n_roll > ( 100 - getDvarInt( #"70E3B3FA" ) ); - return b_should_drop; -} - -get_vulture_drop_type() -{ - n_chance_ammo = getDvarInt( #"F75E07AF" ); - n_chance_points = getDvarInt( #"D7BCDBE2" ); - n_chance_stink = getDvarInt( #"4918C38E" ); - n_total_weight = n_chance_ammo + n_chance_points + n_chance_stink; - n_cutoff_ammo = n_chance_ammo; - n_cutoff_points = n_chance_ammo + n_chance_points; - n_roll = randomint( n_total_weight ); - if ( n_roll < n_cutoff_ammo ) - { - str_bonus = "ammo"; - } - else if ( n_roll > n_cutoff_ammo && n_roll < n_cutoff_points ) - { - str_bonus = "points"; - } - else - { - str_bonus = "stink"; - } - return str_bonus; -} - -show_debug_info( v_drop_point, str_identifier, str_bonus ) -{ -/# - while ( getDvarInt( #"38E68F2B" ) ) - { - self endon( str_identifier ); - iprintln( "zombie dropped " + str_bonus ); - i = 0; - while ( i < ( getDvarInt( #"34FA67DE" ) * 20 ) ) - { - circle( v_drop_point, 32, get_debug_circle_color( str_bonus ), 0, 1, 1 ); - wait 0,05; - i++; -#/ - } - } -} - -get_debug_circle_color( str_bonus ) -{ - switch( str_bonus ) - { - case "ammo": - v_color = ( 1, 1, 1 ); - break; - case "points": - v_color = ( 1, 1, 1 ); - break; - case "stink": - v_color = ( 1, 1, 1 ); - break; - default: - v_color = ( 1, 1, 1 ); - break; - } - return v_color; -} - -check_vulture_drop_pickup( v_drop_origin, player, str_identifier, str_bonus ) -{ - player endon( "death" ); - player endon( "disconnect" ); - b_collected_vulture = 0; - n_times_to_check = int( getDvarInt( #"34FA67DE" ) / 0,25 ); - i = 0; - while ( i < n_times_to_check ) - { - if ( distancesquared( v_drop_origin, player.origin ) < 1024 ) - { - b_collected_vulture = 1; - player notify( str_identifier ); - break; - } - else - { - wait 0,25; - i++; - } - } - if ( b_collected_vulture ) - { - player give_vulture_bonus( str_bonus ); - } -} - -give_vulture_bonus( str_bonus ) -{ - switch( str_bonus ) - { - case "ammo": - self give_bonus_ammo(); - break; - case "points": - self give_bonus_points(); - break; - case "stink": - self give_bonus_stink(); - break; - default: -/# - assert( "invalid bonus string '" + str_bonus + "' used in give_vulture_bonus()!" ); -#/ - break; - } -} - -give_bonus_ammo() -{ - str_weapon_current = self getcurrentweapon(); - if ( str_weapon_current != "none" ) - { - n_ammo_count_current = self getweaponammostock( str_weapon_current ); - n_ammo_count_max = weaponmaxammo( str_weapon_current ); - n_bullets_refunded = int( n_ammo_count_max * 0,05 ); - self setweaponammostock( str_weapon_current, n_ammo_count_current + n_bullets_refunded ); -/# - if ( getDvarInt( #"38E68F2B" ) ) - { - iprintln( ( str_weapon_current + " bullets given: " ) + n_bullets_refunded ); -#/ - } - } -} - -give_bonus_points() -{ - self maps/mp/zombies/_zm_score::player_add_points( "vulture", 5 ); -} - -give_bonus_stink() -{ - iprintln( "zombie stink" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc deleted file mode 100644 index cd33180..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc +++ /dev/null @@ -1,278 +0,0 @@ -#include maps/mp/zombies/_zm_stats; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - if ( isDefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 ) - { - precachemodel( "t5_weapon_ballistic_knife_projectile" ); - precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" ); - } -} - -on_spawn( watcher, player ) -{ - player endon( "death" ); - player endon( "disconnect" ); - player endon( "zmb_lost_knife" ); - level endon( "game_ended" ); - self waittill( "stationary", endpos, normal, angles, attacker, prey, bone ); - isfriendly = 0; - if ( isDefined( endpos ) ) - { - retrievable_model = spawn( "script_model", endpos ); - retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); - retrievable_model setowner( player ); - retrievable_model.owner = player; - retrievable_model.angles = angles; - retrievable_model.name = watcher.weapon; - if ( isDefined( prey ) ) - { - if ( isplayer( prey ) && player.team == prey.team ) - { - isfriendly = 1; - } - else - { - if ( isai( prey ) && player.team == prey.team ) - { - isfriendly = 1; - } - } - if ( !isfriendly ) - { - retrievable_model linkto( prey, bone ); - retrievable_model thread force_drop_knives_to_ground_on_death( player, prey ); - } - else - { - if ( isfriendly ) - { - retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) ); - normal = ( 0, 0, 1 ); - } - } - } - watcher.objectarray[ watcher.objectarray.size ] = retrievable_model; - if ( isfriendly ) - { - retrievable_model waittill( "stationary" ); - } - retrievable_model thread drop_knives_to_ground( player ); - if ( isfriendly ) - { - player notify( "ballistic_knife_stationary" ); - } - else - { - player notify( "ballistic_knife_stationary" ); - } - retrievable_model thread wait_to_show_glowing_model( prey ); - } -} - -wait_to_show_glowing_model( prey ) -{ - level endon( "game_ended" ); - self endon( "death" ); - wait 2; - self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); -} - -on_spawn_retrieve_trigger( watcher, player ) -{ - player endon( "death" ); - player endon( "disconnect" ); - player endon( "zmb_lost_knife" ); - level endon( "game_ended" ); - player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey ); - if ( !isDefined( retrievable_model ) ) - { - return; - } - trigger_pos = []; - if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) ) - { - trigger_pos[ 0 ] = prey.origin[ 0 ]; - trigger_pos[ 1 ] = prey.origin[ 1 ]; - trigger_pos[ 2 ] = prey.origin[ 2 ] + 10; - } - else - { - trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( 10 * normal[ 0 ] ); - trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( 10 * normal[ 1 ] ); - trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( 10 * normal[ 2 ] ); - } - pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ) ); - pickup_trigger setcursorhint( "HINT_NOICON" ); - pickup_trigger.owner = player; - retrievable_model.retrievabletrigger = pickup_trigger; - hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP"; - if ( isDefined( hint_string ) ) - { - pickup_trigger sethintstring( hint_string ); - } - else - { - pickup_trigger sethintstring( &"GENERIC_PICKUP" ); - } - pickup_trigger setteamfortrigger( player.team ); - player clientclaimtrigger( pickup_trigger ); - pickup_trigger enablelinkto(); - if ( isDefined( prey ) ) - { - pickup_trigger linkto( prey ); - } - else - { - pickup_trigger linkto( retrievable_model ); - } - if ( isDefined( level.knife_planted ) ) - { - [[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey ); - } - retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound ); - player thread watch_shutdown( pickup_trigger, retrievable_model ); -} - -debug_print( endpos ) -{ -/# - self endon( "death" ); - while ( 1 ) - { - print3d( endpos, "pickup_trigger" ); - wait 0,05; -#/ - } -} - -watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse ) -{ - self endon( "death" ); - self endon( "delete" ); - level endon( "game_ended" ); - while ( 1 ) - { - trigger waittill( "trigger", player ); - while ( !isalive( player ) ) - { - continue; - } - while ( !player isonground() ) - { - continue; - } - if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam ) - { - continue; - } - if ( isDefined( trigger.claimedby ) && player != trigger.claimedby ) - { - continue; - } - if ( player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() ) - { - if ( isDefined( playersoundonuse ) ) - { - player playlocalsound( playersoundonuse ); - } - if ( isDefined( npcsoundonuse ) ) - { - player playsound( npcsoundonuse ); - } - player thread [[ callback ]]( weapon, model, trigger ); - return; - } - else - { - } - } -} - -pick_up( weapon, model, trigger ) -{ - current_weapon = self getcurrentweapon(); - if ( current_weapon != weapon ) - { - clip_ammo = self getweaponammoclip( weapon ); - if ( !clip_ammo ) - { - self setweaponammoclip( weapon, 1 ); - } - else - { - new_ammo_stock = self getweaponammostock( weapon ) + 1; - self setweaponammostock( weapon, new_ammo_stock ); - } - } - else - { - new_ammo_stock = self getweaponammostock( weapon ) + 1; - self setweaponammostock( weapon, new_ammo_stock ); - } - self maps/mp/zombies/_zm_stats::increment_client_stat( "ballistic_knives_pickedup" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "ballistic_knives_pickedup" ); - model destroy_ent(); - trigger destroy_ent(); -} - -destroy_ent() -{ - if ( isDefined( self ) ) - { - if ( isDefined( self.glowing_model ) ) - { - self.glowing_model delete(); - } - self delete(); - } -} - -watch_shutdown( trigger, model ) -{ - self waittill_any( "death", "disconnect", "zmb_lost_knife" ); - trigger destroy_ent(); - model destroy_ent(); -} - -drop_knives_to_ground( player ) -{ - player endon( "death" ); - player endon( "zmb_lost_knife" ); - for ( ;; ) - { - level waittill( "drop_objects_to_ground", origin, radius ); - if ( distancesquared( origin, self.origin ) < ( radius * radius ) ) - { - self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) ); - self thread update_retrieve_trigger( player ); - } - } -} - -force_drop_knives_to_ground_on_death( player, prey ) -{ - self endon( "death" ); - player endon( "zmb_lost_knife" ); - prey waittill( "death" ); - self unlink(); - self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) ); - self thread update_retrieve_trigger( player ); -} - -update_retrieve_trigger( player ) -{ - self endon( "death" ); - player endon( "zmb_lost_knife" ); - if ( isDefined( level.custom_update_retrieve_trigger ) ) - { - self [[ level.custom_update_retrieve_trigger ]]( player ); - return; - } - self waittill( "stationary" ); - trigger = self.retrievabletrigger; - trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 ); - trigger linkto( self ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_bowie.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_bowie.gsc deleted file mode 100644 index 54968b5..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_bowie.gsc +++ /dev/null @@ -1,53 +0,0 @@ -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( isDefined( level.bowie_cost ) ) - { - cost = level.bowie_cost; - } - else - { - cost = 3000; - } - maps/mp/zombies/_zm_melee_weapon::init( "bowie_knife_zm", "zombie_bowie_flourish", "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", cost, "bowie_upgrade", &"ZOMBIE_WEAPON_BOWIE_BUY", "bowie", ::has_bowie, ::give_bowie, ::take_bowie, ::bowie_flourish ); - maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie" ); - maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie_upgraded" ); -} - -spectator_respawn() -{ - maps/mp/zombies/_zm_melee_weapon::spectator_respawn( "bowie_upgrade", ::take_bowie, ::has_bowie ); -} - -has_bowie() -{ - if ( is_true( level._allow_melee_weapon_switching ) ) - { - return 0; - } - if ( !is_true( self._sickle_zm_equipped ) || is_true( self._bowie_zm_equipped ) && is_true( self._tazer_zm_equipped ) ) - { - return 1; - } - return 0; -} - -give_bowie() -{ - self._bowie_zm_equipped = 1; - self._sickle_zm_equipped = undefined; - self._tazer_zm_equipped = undefined; -} - -take_bowie() -{ - self._bowie_zm_equipped = undefined; -} - -bowie_flourish() -{ -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_claymore.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_claymore.gsc deleted file mode 100644 index 57ac3c0..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_claymore.gsc +++ /dev/null @@ -1,487 +0,0 @@ -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( !isDefined( level.claymores_max_per_player ) ) - { - level.claymores_max_per_player = 12; - } - trigs = getentarray( "claymore_purchase", "targetname" ); - i = 0; - while ( i < trigs.size ) - { - model = getent( trigs[ i ].target, "targetname" ); - if ( isDefined( model ) ) - { - model hide(); - } - i++; - } - array_thread( trigs, ::buy_claymores ); - level thread give_claymores_after_rounds(); - level.claymores_on_damage = ::satchel_damage; - level.pickup_claymores = ::pickup_claymores; - level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener; - level.claymore_detectiondot = cos( 70 ); - level.claymore_detectionmindist = 20; - level._effect[ "claymore_laser" ] = loadfx( "weapon/claymore/fx_claymore_laser" ); -} - -buy_claymores() -{ - self.zombie_cost = 1000; - self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); - self setcursorhint( "HINT_NOICON" ); - self endon( "kill_trigger" ); - if ( !isDefined( self.stub ) ) - { - return; - } - if ( isDefined( self.stub ) && !isDefined( self.stub.claymores_triggered ) ) - { - self.stub.claymores_triggered = 0; - } - self.claymores_triggered = self.stub.claymores_triggered; - while ( 1 ) - { - self waittill( "trigger", who ); - while ( who in_revive_trigger() ) - { - continue; - } - while ( who has_powerup_weapon() ) - { - wait 0,1; - } - if ( is_player_valid( who ) ) - { - if ( who.score >= self.zombie_cost ) - { - if ( !who is_player_placeable_mine( "claymore_zm" ) ) - { - play_sound_at_pos( "purchase", self.origin ); - who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost ); - who thread claymore_setup(); - who thread show_claymore_hint( "claymore_purchased" ); - who thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" ); - if ( isDefined( self.stub ) ) - { - self.claymores_triggered = self.stub.claymores_triggered; - } - if ( self.claymores_triggered == 0 ) - { - model = getent( self.target, "targetname" ); - if ( isDefined( model ) ) - { - model thread maps/mp/zombies/_zm_weapons::weapon_show( who ); - } - else - { - if ( isDefined( self.clientfieldname ) ) - { - level setclientfield( self.clientfieldname, 1 ); - } - } - self.claymores_triggered = 1; - if ( isDefined( self.stub ) ) - { - self.stub.claymores_triggered = 1; - } - } - trigs = getentarray( "claymore_purchase", "targetname" ); - i = 0; - while ( i < trigs.size ) - { - trigs[ i ] setinvisibletoplayer( who ); - i++; - } - } - else who thread show_claymore_hint( "already_purchased" ); - } - } - } -} - -claymore_unitrigger_update_prompt( player ) -{ - if ( player is_player_placeable_mine( "claymore_zm" ) ) - { - return 0; - } - return 1; -} - -set_claymore_visible() -{ - players = get_players(); - trigs = getentarray( "claymore_purchase", "targetname" ); - while ( 1 ) - { - j = 0; - while ( j < players.size ) - { - while ( !players[ j ] is_player_placeable_mine( "claymore_zm" ) ) - { - i = 0; - while ( i < trigs.size ) - { - trigs[ i ] setinvisibletoplayer( players[ j ], 0 ); - i++; - } - } - j++; - } - wait 1; - players = get_players(); - } -} - -claymore_safe_to_plant() -{ - if ( self.owner.claymores.size >= level.claymores_max_per_player ) - { - return 0; - } - if ( isDefined( level.claymore_safe_to_plant ) ) - { - return self [[ level.claymore_safe_to_plant ]](); - } - return 1; -} - -claymore_wait_and_detonate() -{ - wait 0,1; - self detonate( self.owner ); -} - -claymore_watch() -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( "grenade_fire", claymore, weapname ); - if ( weapname == "claymore_zm" ) - { - claymore.owner = self; - claymore.team = self.team; - self notify( "zmb_enable_claymore_prompt" ); - if ( claymore claymore_safe_to_plant() ) - { - if ( isDefined( level.claymore_planted ) ) - { - self thread [[ level.claymore_planted ]]( claymore ); - } - claymore thread satchel_damage(); - claymore thread claymore_detonation(); - claymore thread play_claymore_effects(); - self maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_planted" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_planted" ); - break; - } - else - { - claymore thread claymore_wait_and_detonate(); - } - } - } -} - -claymore_setup() -{ - if ( !isDefined( self.claymores ) ) - { - self.claymores = []; - } - self thread claymore_watch(); - self giveweapon( "claymore_zm" ); - self set_player_placeable_mine( "claymore_zm" ); - self setactionslot( 4, "weapon", "claymore_zm" ); - self setweaponammostock( "claymore_zm", 2 ); -} - -adjust_trigger_origin( origin ) -{ - origin += vectorScale( ( 0, 0, 1 ), 20 ); - return origin; -} - -on_spawn_retrieve_trigger( watcher, player ) -{ - self maps/mp/gametypes_zm/_weaponobjects::onspawnretrievableweaponobject( watcher, player ); - if ( isDefined( self.pickuptrigger ) ) - { - self.pickuptrigger sethintlowpriority( 0 ); - } -} - -pickup_claymores() -{ - player = self.owner; - if ( !player hasweapon( "claymore_zm" ) ) - { - player thread claymore_watch(); - player giveweapon( "claymore_zm" ); - player set_player_placeable_mine( "claymore_zm" ); - player setactionslot( 4, "weapon", "claymore_zm" ); - player setweaponammoclip( "claymore_zm", 0 ); - player notify( "zmb_enable_claymore_prompt" ); - } - else - { - clip_ammo = player getweaponammoclip( self.name ); - clip_max_ammo = weaponclipsize( self.name ); - if ( clip_ammo >= clip_max_ammo ) - { - player notify( "zmb_disable_claymore_prompt" ); - return; - } - } - self pick_up(); - clip_ammo = player getweaponammoclip( self.name ); - clip_max_ammo = weaponclipsize( self.name ); - if ( clip_ammo >= clip_max_ammo ) - { - player notify( "zmb_disable_claymore_prompt" ); - } - player maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_pickedup" ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_pickedup" ); -} - -pickup_claymores_trigger_listener( trigger, player ) -{ - self thread pickup_claymores_trigger_listener_enable( trigger, player ); - self thread pickup_claymores_trigger_listener_disable( trigger, player ); -} - -pickup_claymores_trigger_listener_enable( trigger, player ) -{ - self endon( "delete" ); - while ( 1 ) - { - player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" ); - if ( !isDefined( trigger ) ) - { - return; - } - trigger trigger_on(); - trigger linkto( self ); - } -} - -pickup_claymores_trigger_listener_disable( trigger, player ) -{ - self endon( "delete" ); - while ( 1 ) - { - player waittill( "zmb_disable_claymore_prompt" ); - if ( !isDefined( trigger ) ) - { - return; - } - trigger unlink(); - trigger trigger_off(); - } -} - -shouldaffectweaponobject( object ) -{ - pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 ); - dirtopos = pos - object.origin; - objectforward = anglesToForward( object.angles ); - dist = vectordot( dirtopos, objectforward ); - if ( dist < level.claymore_detectionmindist ) - { - return 0; - } - dirtopos = vectornormalize( dirtopos ); - dot = vectordot( dirtopos, objectforward ); - return dot > level.claymore_detectiondot; -} - -claymore_detonation() -{ - self endon( "death" ); - self waittill_not_moving(); - detonateradius = 96; - damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 ); - damagearea setexcludeteamfortrigger( self.team ); - damagearea enablelinkto(); - damagearea linkto( self ); - if ( is_true( self.isonbus ) ) - { - damagearea setmovingplatformenabled( 1 ); - } - self.damagearea = damagearea; - self thread delete_claymores_on_death( self.owner, damagearea ); - self.owner.claymores[ self.owner.claymores.size ] = self; - while ( 1 ) - { - damagearea waittill( "trigger", ent ); - if ( isDefined( self.owner ) && ent == self.owner ) - { - continue; - } - while ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team ) - { - continue; - } - while ( !ent shouldaffectweaponobject( self ) ) - { - continue; - } - if ( ent damageconetrace( self.origin, self ) > 0 ) - { - self playsound( "wpn_claymore_alert" ); - wait 0,4; - if ( isDefined( self.owner ) ) - { - self detonate( self.owner ); - } - else - { - self detonate( undefined ); - } - return; - } - } -} - -delete_claymores_on_death( player, ent ) -{ - self waittill( "death" ); - if ( isDefined( player ) ) - { - arrayremovevalue( player.claymores, self ); - } - wait 0,05; - if ( isDefined( ent ) ) - { - ent delete(); - } -} - -satchel_damage() -{ - self setcandamage( 1 ); - self.health = 100000; - self.maxhealth = self.health; - attacker = undefined; - while ( 1 ) - { - self waittill( "damage", amount, attacker ); - if ( !isDefined( self ) ) - { - return; - } - self.health = self.maxhealth; - while ( !isplayer( attacker ) ) - { - continue; - } - if ( isDefined( self.owner ) && attacker == self.owner ) - { - continue; - } - while ( isDefined( attacker.pers ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] != level.zombie_team ) - { - continue; - } - } - if ( level.satchelexplodethisframe ) - { - wait ( 0,1 + randomfloat( 0,4 ) ); - } - else wait 0,05; - if ( !isDefined( self ) ) - { - return; - } - level.satchelexplodethisframe = 1; - thread reset_satchel_explode_this_frame(); - self detonate( attacker ); -} - -reset_satchel_explode_this_frame() -{ - wait 0,05; - level.satchelexplodethisframe = 0; -} - -play_claymore_effects() -{ - self endon( "death" ); - self waittill_not_moving(); - playfxontag( level._effect[ "claymore_laser" ], self, "tag_fx" ); -} - -give_claymores_after_rounds() -{ - while ( 1 ) - { - level waittill( "between_round_over" ); - while ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] is_player_placeable_mine( "claymore_zm" ) ) - { - players[ i ] giveweapon( "claymore_zm" ); - players[ i ] set_player_placeable_mine( "claymore_zm" ); - players[ i ] setactionslot( 4, "weapon", "claymore_zm" ); - players[ i ] setweaponammoclip( "claymore_zm", 2 ); - } - i++; - } - } - } -} - -init_hint_hudelem( x, y, alignx, aligny, fontscale, alpha ) -{ - self.x = x; - self.y = y; - self.alignx = alignx; - self.aligny = aligny; - self.fontscale = fontscale; - self.alpha = alpha; - self.sort = 20; -} - -setup_client_hintelem() -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( !isDefined( self.hintelem ) ) - { - self.hintelem = newclienthudelem( self ); - } - self.hintelem init_hint_hudelem( 320, 220, "center", "bottom", 1,6, 1 ); -} - -show_claymore_hint( string ) -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( string == "claymore_purchased" ) - { - text = &"ZOMBIE_CLAYMORE_HOWTO"; - } - else - { - text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED"; - } - self setup_client_hintelem(); - self.hintelem settext( text ); - wait 3,5; - self.hintelem settext( "" ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc deleted file mode 100644 index 0427300..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc +++ /dev/null @@ -1,565 +0,0 @@ -#include maps/mp/zombies/_zm_clone; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -#using_animtree( "zombie_cymbal_monkey" ); - -init() -{ - if ( !cymbal_monkey_exists() ) - { - return; - } -/# - level.zombiemode_devgui_cymbal_monkey_give = ::player_give_cymbal_monkey; -#/ - level._effect[ "monkey_glow" ] = loadfx( "maps/zombie/fx_zombie_monkey_light" ); - level._effect[ "grenade_samantha_steal" ] = loadfx( "maps/zombie/fx_zmb_blackhole_trap_end" ); - level.cymbal_monkeys = []; - scriptmodelsuseanimtree( -1 ); -} - -player_give_cymbal_monkey() -{ - self giveweapon( "cymbal_monkey_zm" ); - self set_player_tactical_grenade( "cymbal_monkey_zm" ); - self thread player_handle_cymbal_monkey(); -} - -player_handle_cymbal_monkey() -{ - self notify( "starting_monkey_watch" ); - self endon( "disconnect" ); - self endon( "starting_monkey_watch" ); - attract_dist_diff = level.monkey_attract_dist_diff; - if ( !isDefined( attract_dist_diff ) ) - { - attract_dist_diff = 45; - } - num_attractors = level.num_monkey_attractors; - if ( !isDefined( num_attractors ) ) - { - num_attractors = 96; - } - max_attract_dist = level.monkey_attract_dist; - if ( !isDefined( max_attract_dist ) ) - { - max_attract_dist = 1536; - } - while ( 1 ) - { - grenade = get_thrown_monkey(); - self player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff ); - wait 0,05; - } -} - -watch_for_dud( model, actor ) -{ - self endon( "death" ); - self waittill( "grenade_dud" ); - model.dud = 1; - self playsound( "zmb_vox_monkey_scream" ); - self.monk_scream_vox = 1; - wait 3; - if ( isDefined( model ) ) - { - model delete(); - } - if ( isDefined( actor ) ) - { - actor delete(); - } - if ( isDefined( self.damagearea ) ) - { - self.damagearea delete(); - } - if ( isDefined( self ) ) - { - self delete(); - } -} - -watch_for_emp( model, actor ) -{ - self endon( "death" ); - while ( 1 ) - { - level waittill( "emp_detonate", origin, radius ); - if ( distancesquared( origin, self.origin ) < ( radius * radius ) ) - { - break; - } - else - { - } - } - self.stun_fx = 1; - if ( isDefined( level._equipment_emp_destroy_fx ) ) - { - playfx( level._equipment_emp_destroy_fx, self.origin + vectorScale( ( 0, 0, -1 ), 5 ), ( 0, randomfloat( 360 ), 0 ) ); - } - wait 0,15; - self.attract_to_origin = 0; - self deactivate_zombie_point_of_interest(); - model clearanim( %o_monkey_bomb, 0 ); - wait 1; - self detonate(); - wait 1; - if ( isDefined( model ) ) - { - model delete(); - } - if ( isDefined( actor ) ) - { - actor delete(); - } - if ( isDefined( self.damagearea ) ) - { - self.damagearea delete(); - } - if ( isDefined( self ) ) - { - self delete(); - } -} - -clone_player_angles( owner ) -{ - self endon( "death" ); - owner endon( "death" ); - while ( isDefined( self ) ) - { - self.angles = owner.angles; - wait 0,05; - } -} - -show_briefly( showtime ) -{ - self endon( "show_owner" ); - if ( isDefined( self.show_for_time ) ) - { - self.show_for_time = showtime; - return; - } - self.show_for_time = showtime; - self setvisibletoall(); - while ( self.show_for_time > 0 ) - { - self.show_for_time -= 0,05; - wait 0,05; - } - self setvisibletoallexceptteam( level.zombie_team ); - self.show_for_time = undefined; -} - -show_owner_on_attack( owner ) -{ - owner endon( "hide_owner" ); - owner endon( "show_owner" ); - self endon( "explode" ); - self endon( "death" ); - self endon( "grenade_dud" ); - owner.show_for_time = undefined; - for ( ;; ) - { - owner waittill( "weapon_fired" ); - owner thread show_briefly( 0,5 ); - } -} - -hide_owner( owner ) -{ - owner notify( "hide_owner" ); - owner endon( "hide_owner" ); - owner setperk( "specialty_immunemms" ); - owner.no_burning_sfx = 1; - owner notify( "stop_flame_sounds" ); - owner setvisibletoallexceptteam( level.zombie_team ); - owner.hide_owner = 1; - if ( isDefined( level._effect[ "human_disappears" ] ) ) - { - playfx( level._effect[ "human_disappears" ], owner.origin ); - } - self thread show_owner_on_attack( owner ); - evt = self waittill_any_return( "explode", "death", "grenade_dud" ); -/# - println( "ZMCLONE: Player visible again because of " + evt ); -#/ - owner notify( "show_owner" ); - owner unsetperk( "specialty_immunemms" ); - if ( isDefined( level._effect[ "human_disappears" ] ) ) - { - playfx( level._effect[ "human_disappears" ], owner.origin ); - } - owner.no_burning_sfx = undefined; - owner setvisibletoall(); - owner.hide_owner = undefined; - owner show(); -} - -proximity_detonate( owner ) -{ - wait 1,5; - if ( !isDefined( self ) ) - { - return; - } - detonateradius = 96; - explosionradius = detonateradius * 2; - damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 1,5 ); - damagearea setexcludeteamfortrigger( owner.team ); - damagearea enablelinkto(); - damagearea linkto( self ); - self.damagearea = damagearea; - while ( isDefined( self ) ) - { - damagearea waittill( "trigger", ent ); - if ( isDefined( owner ) && ent == owner ) - { - continue; - } - if ( isDefined( ent.team ) && ent.team == owner.team ) - { - continue; - } - self playsound( "wpn_claymore_alert" ); - dist = distance( self.origin, ent.origin ); - radiusdamage( self.origin + vectorScale( ( 0, 0, -1 ), 12 ), explosionradius, 1, 1, owner, "MOD_GRENADE_SPLASH", "cymbal_monkey_zm" ); - if ( isDefined( owner ) ) - { - self detonate( owner ); - } - else - { - self detonate( undefined ); - } - break; - } - if ( isDefined( damagearea ) ) - { - damagearea delete(); - } -} - -player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff ) -{ - self endon( "disconnect" ); - self endon( "starting_monkey_watch" ); - if ( isDefined( grenade ) ) - { - grenade endon( "death" ); - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - if ( isDefined( grenade.damagearea ) ) - { - grenade.damagearea delete(); - } - grenade delete(); - return; - } - grenade hide(); - model = spawn( "script_model", grenade.origin ); - model setmodel( "weapon_zombie_monkey_bomb" ); - model useanimtree( -1 ); - model linkto( grenade ); - model.angles = grenade.angles; - model thread monkey_cleanup( grenade ); - clone = undefined; - if ( isDefined( level.cymbal_monkey_dual_view ) && level.cymbal_monkey_dual_view ) - { - model setvisibletoallexceptteam( level.zombie_team ); - clone = maps/mp/zombies/_zm_clone::spawn_player_clone( self, vectorScale( ( 0, 0, -1 ), 999 ), level.cymbal_monkey_clone_weapon, undefined ); - model.simulacrum = clone; - clone maps/mp/zombies/_zm_clone::clone_animate( "idle" ); - clone thread clone_player_angles( self ); - clone notsolid(); - clone ghost(); - } - grenade thread watch_for_dud( model, clone ); - grenade thread watch_for_emp( model, clone ); - info = spawnstruct(); - info.sound_attractors = []; - grenade thread monitor_zombie_groans( info ); - grenade waittill( "stationary" ); - if ( isDefined( level.grenade_planted ) ) - { - self thread [[ level.grenade_planted ]]( grenade, model ); - } - if ( isDefined( grenade ) ) - { - if ( isDefined( model ) ) - { - model setanim( %o_monkey_bomb ); - if ( isDefined( grenade.backlinked ) && !grenade.backlinked ) - { - model unlink(); - model.origin = grenade.origin; - model.angles = grenade.angles; - } - } - if ( isDefined( clone ) ) - { - clone forceteleport( grenade.origin, grenade.angles ); - clone thread hide_owner( self ); - grenade thread proximity_detonate( self ); - clone show(); - clone setinvisibletoall(); - clone setvisibletoteam( level.zombie_team ); - } - grenade resetmissiledetonationtime(); - playfxontag( level._effect[ "monkey_glow" ], model, "origin_animate_jnt" ); - valid_poi = check_point_in_enabled_zone( grenade.origin, undefined, undefined ); - if ( isDefined( level.check_valid_poi ) ) - { - valid_poi = grenade [[ level.check_valid_poi ]]( valid_poi ); - } - if ( valid_poi ) - { - grenade create_zombie_point_of_interest( max_attract_dist, num_attractors, 10000 ); - grenade.attract_to_origin = 1; - grenade thread create_zombie_point_of_interest_attractor_positions( 4, attract_dist_diff ); - grenade thread wait_for_attractor_positions_complete(); - grenade thread do_monkey_sound( model, info ); - level.cymbal_monkeys[ level.cymbal_monkeys.size ] = grenade; - } - else - { - grenade.script_noteworthy = undefined; - level thread grenade_stolen_by_sam( grenade, model, clone ); - } - return; - } - else - { - grenade.script_noteworthy = undefined; - level thread grenade_stolen_by_sam( grenade, model, clone ); - } - } -} - -grenade_stolen_by_sam( ent_grenade, ent_model, ent_actor ) -{ - if ( !isDefined( ent_model ) ) - { - return; - } - direction = ent_model.origin; - direction = ( direction[ 1 ], direction[ 0 ], 0 ); - if ( direction[ 1 ] < 0 || direction[ 0 ] > 0 && direction[ 1 ] > 0 ) - { - direction = ( direction[ 0 ], direction[ 1 ] * -1, 0 ); - } - else - { - if ( direction[ 0 ] < 0 ) - { - direction = ( direction[ 0 ] * -1, direction[ 1 ], 0 ); - } - } - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( isalive( players[ i ] ) ) - { - players[ i ] playlocalsound( level.zmb_laugh_alias ); - } - i++; - } - playfxontag( level._effect[ "grenade_samantha_steal" ], ent_model, "tag_origin" ); - ent_model movez( 60, 1, 0,25, 0,25 ); - ent_model vibrate( direction, 1,5, 2,5, 1 ); - ent_model waittill( "movedone" ); - if ( isDefined( self.damagearea ) ) - { - self.damagearea delete(); - } - ent_model delete(); - if ( isDefined( ent_actor ) ) - { - ent_actor delete(); - } - if ( isDefined( ent_grenade ) ) - { - if ( isDefined( ent_grenade.damagearea ) ) - { - ent_grenade.damagearea delete(); - } - ent_grenade delete(); - } -} - -wait_for_attractor_positions_complete() -{ - self waittill( "attractor_positions_generated" ); - self.attract_to_origin = 0; -} - -monkey_cleanup( parent ) -{ - while ( 1 ) - { - if ( !isDefined( parent ) ) - { - if ( isDefined( self ) && isDefined( self.dud ) && self.dud ) - { - wait 6; - } - if ( isDefined( self.simulacrum ) ) - { - self.simulacrum delete(); - } - self_delete(); - return; - } - wait 0,05; - } -} - -do_monkey_sound( model, info ) -{ - self.monk_scream_vox = 0; - if ( isDefined( level.grenade_safe_to_bounce ) ) - { - if ( !( [[ level.grenade_safe_to_bounce ]]( self.owner, "cymbal_monkey_zm" ) ) ) - { - self playsound( "zmb_vox_monkey_scream" ); - self.monk_scream_vox = 1; - } - } - if ( !self.monk_scream_vox && level.music_override == 0 ) - { - if ( isDefined( level.cymbal_monkey_dual_view ) && level.cymbal_monkey_dual_view ) - { - self playsoundtoteam( "zmb_monkey_song", "allies" ); - } - else - { - self playsound( "zmb_monkey_song" ); - } - } - if ( !self.monk_scream_vox ) - { - self thread play_delayed_explode_vox(); - } - self waittill( "explode", position ); - level notify( "grenade_exploded" ); - monkey_index = -1; - i = 0; - while ( i < level.cymbal_monkeys.size ) - { - if ( !isDefined( level.cymbal_monkeys[ i ] ) ) - { - monkey_index = i; - break; - } - else - { - i++; - } - } - if ( monkey_index >= 0 ) - { - arrayremoveindex( level.cymbal_monkeys, monkey_index ); - } - if ( isDefined( model ) ) - { - model clearanim( %o_monkey_bomb, 0,2 ); - } - i = 0; - while ( i < info.sound_attractors.size ) - { - if ( isDefined( info.sound_attractors[ i ] ) ) - { - info.sound_attractors[ i ] notify( "monkey_blown_up" ); - } - i++; - } -} - -play_delayed_explode_vox() -{ - wait 6,5; - if ( isDefined( self ) ) - { - self playsound( "zmb_vox_monkey_explode" ); - } -} - -get_thrown_monkey() -{ - self endon( "disconnect" ); - self endon( "starting_monkey_watch" ); - while ( 1 ) - { - self waittill( "grenade_fire", grenade, weapname ); - if ( weapname == "cymbal_monkey_zm" ) - { - grenade.use_grenade_special_long_bookmark = 1; - grenade.grenade_multiattack_bookmark_count = 1; - return grenade; - } - wait 0,05; - } -} - -monitor_zombie_groans( info ) -{ - self endon( "explode" ); - while ( 1 ) - { - if ( !isDefined( self ) ) - { - return; - } - while ( !isDefined( self.attractor_array ) ) - { - wait 0,05; - } - i = 0; - while ( i < self.attractor_array.size ) - { - if ( array_check_for_dupes( info.sound_attractors, self.attractor_array[ i ] ) ) - { - if ( isDefined( self.origin ) && isDefined( self.attractor_array[ i ].origin ) ) - { - if ( distancesquared( self.origin, self.attractor_array[ i ].origin ) < 250000 ) - { - info.sound_attractors[ info.sound_attractors.size ] = self.attractor_array[ i ]; - self.attractor_array[ i ] thread play_zombie_groans(); - } - } - } - i++; - } - wait 0,05; - } -} - -play_zombie_groans() -{ - self endon( "death" ); - self endon( "monkey_blown_up" ); - while ( 1 ) - { - if ( isDefined( self ) ) - { - self playsound( "zmb_vox_zombie_groan" ); - wait randomfloatrange( 2, 3 ); - continue; - } - else - { - return; - } - } -} - -cymbal_monkey_exists() -{ - return isDefined( level.zombie_weapons[ "cymbal_monkey_zm" ] ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_emp_bomb.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_emp_bomb.gsc deleted file mode 100644 index 73a8a86..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_emp_bomb.gsc +++ /dev/null @@ -1,369 +0,0 @@ -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zombies/_zm_power; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( !emp_bomb_exists() ) - { - return; - } - set_zombie_var( "emp_stun_range", 600 ); - set_zombie_var( "emp_stun_time", 20 ); - set_zombie_var( "emp_perk_off_range", 420 ); - set_zombie_var( "emp_perk_off_time", 90 ); - precacheshellshock( "frag_grenade_mp" ); -/# - level.zombiemode_devgui_emp_bomb_give = ::player_give_emp_bomb; -#/ - level thread onplayerconnect(); - level._equipment_emp_destroy_fx = loadfx( "weapon/emp/fx_emp_explosion_equip" ); -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread watch_for_grenade_throw(); - } -} - -player_give_emp_bomb() -{ - self giveweapon( "emp_grenade_zm" ); - self set_player_tactical_grenade( "emp_grenade_zm" ); -} - -emp_bomb_exists() -{ - return isDefined( level.zombie_weapons[ "emp_grenade_zm" ] ); -} - -watch_for_grenade_throw() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "grenade_fire", grenade, weapname ); - while ( weapname != "emp_grenade_zm" ) - { - continue; - } - grenade.use_grenade_special_bookmark = 1; - grenade.grenade_multiattack_bookmark_count = 1; - grenade.owner = self; - self thread emp_detonate( grenade ); - } -} - -emp_detonate( grenade ) -{ - grenade_owner = undefined; - if ( isDefined( grenade.owner ) ) - { - grenade_owner = grenade.owner; - } - grenade waittill( "explode", grenade_origin ); - emp_radius = level.zombie_vars[ "emp_perk_off_range" ]; - emp_time = level.zombie_vars[ "emp_perk_off_time" ]; - origin = grenade_origin; - if ( !isDefined( origin ) ) - { - return; - } - level notify( "emp_detonate" ); - self thread emp_detonate_zombies( grenade_origin, grenade_owner ); - if ( isDefined( level.custom_emp_detonate ) ) - { - thread [[ level.custom_emp_detonate ]]( grenade_origin ); - } - if ( isDefined( grenade_owner ) ) - { - grenade_owner thread destroyequipment( origin, emp_radius ); - } - players_emped = emp_players( origin, emp_radius ); - disabled_list = maps/mp/zombies/_zm_power::change_power_in_radius( -1, origin, emp_radius ); - wait emp_time; - maps/mp/zombies/_zm_power::revert_power_to_list( 1, origin, emp_radius, disabled_list ); - unemp_players( players_emped ); -} - -emp_detonate_zombies( grenade_origin, grenade_owner ) -{ - zombies = get_array_of_closest( grenade_origin, getaispeciesarray( level.zombie_team, "all" ), undefined, undefined, level.zombie_vars[ "emp_stun_range" ] ); - if ( !isDefined( zombies ) ) - { - return; - } - i = 0; - while ( i < zombies.size ) - { - if ( !isDefined( zombies[ i ] ) || isDefined( zombies[ i ].ignore_inert ) && zombies[ i ].ignore_inert ) - { - i++; - continue; - } - else - { - zombies[ i ].becoming_inert = 1; - } - i++; - } - stunned = 0; - i = 0; - while ( i < zombies.size ) - { - if ( !isDefined( zombies[ i ] ) || isDefined( zombies[ i ].ignore_inert ) && zombies[ i ].ignore_inert ) - { - i++; - continue; - } - else - { - stunned++; - zombies[ i ] thread stun_zombie(); - wait 0,05; - } - i++; - } - if ( stunned >= 10 && isDefined( grenade_owner ) ) - { - grenade_owner notify( "the_lights_of_their_eyes" ); - } -} - -stun_zombie() -{ - self endon( "death" ); - self notify( "stun_zombie" ); - self endon( "stun_zombie" ); - if ( self.health <= 0 ) - { -/# - iprintln( "trying to stun a dead zombie" ); -#/ - return; - } - if ( isDefined( self.stun_zombie ) ) - { - self thread [[ self.stun_zombie ]](); - return; - } - self thread maps/mp/zombies/_zm_ai_basic::start_inert(); -} - -emp_players( origin, radius ) -{ - players_emped = []; - players = get_players(); - rsquared = radius * radius; - _a192 = players; - _k192 = getFirstArrayKey( _a192 ); - while ( isDefined( _k192 ) ) - { - player = _a192[ _k192 ]; - if ( isalive( player ) && distancesquared( origin, player.origin ) < rsquared ) - { - player player_emp_on(); - players_emped[ players_emped.size ] = player; - } - _k192 = getNextArrayKey( _a192, _k192 ); - } - return players_emped; -} - -unemp_players( players_emped ) -{ - _a206 = players_emped; - _k206 = getFirstArrayKey( _a206 ); - while ( isDefined( _k206 ) ) - { - player = _a206[ _k206 ]; - player player_emp_off(); - _k206 = getNextArrayKey( _a206, _k206 ); - } -} - -player_emp_on() -{ - self.empgrenaded = 1; - self setempjammed( 1 ); - self shellshock( "frag_grenade_mp", 2 ); -} - -player_emp_off() -{ - if ( isDefined( self ) ) - { - self stopshellshock(); - self setempjammed( 0 ); - self.empgrenaded = undefined; - } -} - -getwatcherforweapon( weapname ) -{ - if ( !isDefined( self ) ) - { - return undefined; - } - if ( !isplayer( self ) ) - { - return undefined; - } - i = 0; - while ( i < self.weaponobjectwatcherarray.size ) - { - if ( self.weaponobjectwatcherarray[ i ].weapon != weapname ) - { - i++; - continue; - } - else - { - return self.weaponobjectwatcherarray[ i ]; - } - i++; - } - return undefined; -} - -destroyequipment( origin, radius ) -{ - grenades = getentarray( "grenade", "classname" ); - rsquared = radius * radius; - i = 0; - while ( i < grenades.size ) - { - item = grenades[ i ]; - if ( distancesquared( origin, item.origin ) > rsquared ) - { - i++; - continue; - } - else if ( !isDefined( item.name ) ) - { - i++; - continue; - } - else if ( !is_offhand_weapon( item.name ) ) - { - i++; - continue; - } - else watcher = item.owner getwatcherforweapon( item.name ); - if ( !isDefined( watcher ) ) - { - i++; - continue; - } - else - { - watcher thread waitanddetonate( item, 0, self, "emp_grenade_zm" ); - } - i++; - } - equipment = maps/mp/zombies/_zm_equipment::get_destructible_equipment_list(); - i = 0; - while ( i < equipment.size ) - { - item = equipment[ i ]; - if ( !isDefined( item ) ) - { - i++; - continue; - } - else if ( distancesquared( origin, item.origin ) > rsquared ) - { - i++; - continue; - } - else if ( isDefined( item.isriotshield ) && item.isriotshield ) - { - i++; - continue; - } - else - { - waitanddamage( item, 505 ); - } - i++; - } -} - -isempweapon( weaponname ) -{ - if ( isDefined( weaponname ) && weaponname != "emp_mp" || weaponname == "emp_grenade_mp" && weaponname == "emp_grenade_zm" ) - { - return 1; - } - return 0; -} - -waitanddetonate( object, delay, attacker, weaponname ) -{ - object endon( "death" ); - object endon( "hacked" ); - from_emp = isempweapon( weaponname ); - if ( from_emp ) - { - object.stun_fx = 1; - if ( isDefined( level._equipment_emp_destroy_fx ) ) - { - playfx( level._equipment_emp_destroy_fx, object.origin + vectorScale( ( 0, 0, 1 ), 5 ), ( 0, randomfloat( 360 ), 0 ) ); - } - delay = 1,1; - } - if ( delay ) - { - wait delay; - } - if ( isDefined( object.detonated ) && object.detonated == 1 ) - { - return; - } - if ( !isDefined( self.detonate ) ) - { - return; - } - if ( isDefined( attacker ) && isplayer( attacker ) && isDefined( attacker.pers[ "team" ] ) && isDefined( object.owner ) && isDefined( object.owner.pers[ "team" ] ) ) - { - if ( level.teambased ) - { - if ( attacker.pers[ "team" ] != object.owner.pers[ "team" ] ) - { - attacker notify( "destroyed_explosive" ); - } - } - else - { - if ( attacker != object.owner ) - { - attacker notify( "destroyed_explosive" ); - } - } - } - object.detonated = 1; - object [[ self.detonate ]]( attacker, weaponname ); -} - -waitanddamage( object, damage ) -{ - object endon( "death" ); - object endon( "hacked" ); - object.stun_fx = 1; - if ( isDefined( level._equipment_emp_destroy_fx ) ) - { - playfx( level._equipment_emp_destroy_fx, object.origin + vectorScale( ( 0, 0, 1 ), 5 ), ( 0, randomfloat( 360 ), 0 ) ); - } - delay = 1,1; - if ( delay ) - { - wait delay; - } - object maps/mp/zombies/_zm_equipment::item_damage( damage ); -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_jetgun.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_jetgun.gsc deleted file mode 100644 index b7a7a34..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_jetgun.gsc +++ /dev/null @@ -1,910 +0,0 @@ -#include maps/mp/animscripts/zm_run; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( !maps/mp/zombies/_zm_weapons::is_weapon_included( "jetgun_zm" ) ) - { - return; - } - maps/mp/zombies/_zm_equipment::register_equipment( "jetgun_zm", &"ZOMBIE_EQUIP_JETGUN_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_JETGUN_HOWTO", "jetgun_zm_icon", "jetgun", ::jetgun_activation_watcher_thread, undefined, ::dropjetgun, ::pickupjetgun ); - maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "jetgun", &"ZOMBIE_EQUIP_JETGUN_PICKUP_HINT_STRING" ); - level._effect[ "jetgun_smoke_cloud" ] = loadfx( "weapon/thunder_gun/fx_thundergun_smoke_cloud" ); - level._effect[ "jetgun_overheat" ] = loadfx( "weapon/jet_gun/fx_jetgun_overheat" ); - level._effect[ "jetgun_vortex" ] = loadfx( "weapon/jet_gun/fx_jetgun_on" ); - level._effect[ "jetgun_meat_grinder" ] = loadfx( "weapon/jet_gun/fx_jetgun_kill" ); - set_zombie_var( "jetgun_cylinder_radius", 1024 ); - set_zombie_var( "jetgun_grind_range", 128 ); - set_zombie_var( "jetgun_gib_range", 256 ); - set_zombie_var( "jetgun_gib_damage", 50 ); - set_zombie_var( "jetgun_knockdown_range", 256 ); - set_zombie_var( "jetgun_drag_range", 2048 ); - set_zombie_var( "jetgun_knockdown_damage", 15 ); - set_zombie_var( "powerup_move_dist", 50 ); - set_zombie_var( "powerup_drag_range", 500 ); - level.jetgun_pulled_in_range = int( level.zombie_vars[ "jetgun_drag_range" ] / 8 ) * ( level.zombie_vars[ "jetgun_drag_range" ] / 8 ); - level.jetgun_pulling_in_range = int( level.zombie_vars[ "jetgun_drag_range" ] / 4 ) * ( level.zombie_vars[ "jetgun_drag_range" ] / 4 ); - level.jetgun_inner_range = int( level.zombie_vars[ "jetgun_drag_range" ] / 2 ) * ( level.zombie_vars[ "jetgun_drag_range" ] / 2 ); - level.jetgun_outer_edge = int( level.zombie_vars[ "jetgun_drag_range" ] * level.zombie_vars[ "jetgun_drag_range" ] ); - level.jetgun_gib_refs = []; - level.jetgun_gib_refs[ level.jetgun_gib_refs.size ] = "guts"; - level.jetgun_gib_refs[ level.jetgun_gib_refs.size ] = "right_arm"; - level.jetgun_gib_refs[ level.jetgun_gib_refs.size ] = "left_arm"; - level.jetgun_gib_refs[ level.jetgun_gib_refs.size ] = "right_leg"; - level.jetgun_gib_refs[ level.jetgun_gib_refs.size ] = "left_leg"; - level.jetgun_gib_refs[ level.jetgun_gib_refs.size ] = "no_legs"; -/# - level thread jetgun_devgui_dvar_think(); - level.zm_devgui_jetgun_never_overheat = ::never_overheat; -#/ - onplayerconnect_callback( ::jetgun_on_player_connect ); -} - -dropjetgun() -{ - item = self maps/mp/zombies/_zm_equipment::placed_equipment_think( "t6_wpn_zmb_jet_gun_world", "jetgun_zm", self.origin + vectorScale( ( 1, 0, 1 ), 30 ), self.angles ); - if ( isDefined( item ) ) - { - item.overheating = self.jetgun_overheating; - item.heatval = self.jetgun_heatval; - item.original_owner = self; - item.owner = undefined; - item.name = "jetgun_zm"; - item.requires_pickup = 1; - } - self.jetgun_overheating = undefined; - self.jetgun_heatval = undefined; - self takeweapon( "jetgun_zm" ); - return item; -} - -pickupjetgun( item ) -{ - item.owner = self; - if ( isDefined( item.overheating ) && isDefined( item.heatval ) ) - { - self.jetgun_overheating = item.overheating; - self.jetgun_heatval = item.heatval; - } - item.overheating = undefined; - item.heatval = undefined; - self setcurrentweaponspinlerp( 0 ); -} - -jetgun_activation_watcher_thread() -{ - self endon( "zombified" ); - self endon( "disconnect" ); - self endon( "jetgun_zm_taken" ); - while ( 1 ) - { - self waittill_either( "jetgun_zm_activate", "jetgun_zm_deactivate" ); - } -} - -jetgun_devgui_dvar_think() -{ -/# - if ( !maps/mp/zombies/_zm_weapons::is_weapon_included( "jetgun_zm" ) ) - { - return; - } - setdvar( "scr_jetgun_cylinder_radius", level.zombie_vars[ "jetgun_cylinder_radius" ] ); - setdvar( "scr_jetgun_grind_range", level.zombie_vars[ "jetgun_grind_range" ] ); - setdvar( "scr_jetgun_drag_range", level.zombie_vars[ "jetgun_drag_range" ] ); - setdvar( "scr_jetgun_gib_range", level.zombie_vars[ "jetgun_gib_range" ] ); - setdvar( "scr_jetgun_gib_damage", level.zombie_vars[ "jetgun_gib_damage" ] ); - setdvar( "scr_jetgun_knockdown_range", level.zombie_vars[ "jetgun_knockdown_range" ] ); - setdvar( "scr_jetgun_knockdown_damage", level.zombie_vars[ "jetgun_knockdown_damage" ] ); - for ( ;; ) - { - level.zombie_vars[ "jetgun_cylinder_radius" ] = getDvarInt( "scr_jetgun_cylinder_radius" ); - level.zombie_vars[ "jetgun_grind_range" ] = getDvarInt( "scr_jetgun_grind_range" ); - level.zombie_vars[ "jetgun_drag_range" ] = getDvarInt( "scr_jetgun_drag_range" ); - level.zombie_vars[ "jetgun_gib_range" ] = getDvarInt( "scr_jetgun_gib_range" ); - level.zombie_vars[ "jetgun_gib_damage" ] = getDvarInt( "scr_jetgun_gib_damage" ); - level.zombie_vars[ "jetgun_knockdown_range" ] = getDvarInt( "scr_jetgun_knockdown_range" ); - level.zombie_vars[ "jetgun_knockdown_damage" ] = getDvarInt( "scr_jetgun_knockdown_damage" ); - wait 0,5; -#/ - } -} - -jetgun_on_player_connect() -{ - self thread wait_for_jetgun_fired(); - self thread watch_weapon_changes(); - self thread handle_overheated_jetgun(); -} - -get_jetgun_engine_direction() -{ - return self getcurrentweaponspinlerp(); -} - -set_jetgun_engine_direction( nv ) -{ - self setcurrentweaponspinlerp( nv ); -} - -never_overheat() -{ -/# - self notify( "never_overheat" ); - self endon( "never_overheat" ); - self endon( "death_or_disconnect" ); - while ( 1 ) - { - if ( self getcurrentweapon() == "jetgun_zm" ) - { - self setweaponoverheating( 0, 0 ); - } - wait 0,05; -#/ - } -} - -watch_overheat() -{ - self endon( "death_or_disconnect" ); - self endon( "weapon_change" ); - if ( self getcurrentweapon() == "jetgun_zm" && isDefined( self.jetgun_overheating ) && isDefined( self.jetgun_heatval ) ) - { - self setweaponoverheating( self.jetgun_overheating, self.jetgun_heatval ); - } - while ( 1 ) - { - if ( self getcurrentweapon() == "jetgun_zm" ) - { - overheating = self isweaponoverheating( 0 ); - heat = self isweaponoverheating( 1 ); - self.jetgun_overheating = overheating; - self.jetgun_heatval = heat; - if ( overheating ) - { - self notify( "jetgun_overheated" ); - } - if ( heat > 75 ) - { - self thread play_overheat_fx(); - } - } - wait 0,05; - } -} - -play_overheat_fx() -{ - if ( isDefined( self.overheat_fx_playing ) && !self.overheat_fx_playing ) - { - self.overheat_fx_playing = 1; - playfxontag( level._effect[ "jetgun_overheat" ], self, "tag_flash" ); - wait 5; - if ( isDefined( self ) ) - { - self.overheat_fx_playing = 0; - } - } -} - -handle_overheated_jetgun() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "jetgun_overheated" ); - if ( self getcurrentweapon() == "jetgun_zm" ) - { - if ( isDefined( level.explode_overheated_jetgun ) && level.explode_overheated_jetgun ) - { - self thread maps/mp/zombies/_zm_equipment::equipment_release( "jetgun_zm" ); - weapon_org = self gettagorigin( "tag_weapon" ); - pcount = get_players().size; - pickup_time = 360 / pcount; - maps/mp/zombies/_zm_buildables::player_explode_buildable( "jetgun_zm", weapon_org, 250, 1, pickup_time ); - self.jetgun_overheating = undefined; - self.jetgun_heatval = undefined; - self playsound( "wpn_jetgun_explo" ); - break; - } - else - { - if ( isDefined( level.unbuild_overheated_jetgun ) && level.unbuild_overheated_jetgun ) - { - self thread maps/mp/zombies/_zm_equipment::equipment_release( "jetgun_zm" ); - maps/mp/zombies/_zm_buildables::unbuild_buildable( "jetgun_zm", 1 ); - self.jetgun_overheating = undefined; - self.jetgun_heatval = undefined; - break; - } - else - { - if ( isDefined( level.take_overheated_jetgun ) && level.take_overheated_jetgun ) - { - self thread maps/mp/zombies/_zm_equipment::equipment_release( "jetgun_zm" ); - self.jetgun_overheating = undefined; - self.jetgun_heatval = undefined; - } - } - } - } - } -} - -watch_weapon_changes() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "weapon_change", weapon ); - if ( weapon == "jetgun_zm" ) - { -/# - if ( getDvarInt( #"BCDDAAFF" ) > 0 ) - { - self thread zombie_drag_radius(); -#/ - } - self thread watch_overheat(); - } - } -} - -wait_for_jetgun_fired() -{ - self endon( "disconnect" ); - self waittill( "spawned_player" ); - for ( ;; ) - { - self waittill( "weapon_fired" ); - currentweapon = self getcurrentweapon(); - if ( currentweapon == "jetgun_zm" || currentweapon == "jetgun_upgraded_zm" ) - { - self jetgun_firing(); - } - } -} - -jetgun_network_choke() -{ - level.jetgun_network_choke_count++; - if ( level.jetgun_network_choke_count % 10 ) - { - wait_network_frame(); - wait_network_frame(); - wait_network_frame(); - } -} - -is_jetgun_firing() -{ - return abs( self get_jetgun_engine_direction() ) > 0,2; -} - -jetgun_firing() -{ - if ( !isDefined( self.jetsound_ent ) ) - { - self.jetsound_ent = spawn( "script_origin", self.origin ); - self.jetsound_ent linkto( self, "tag_origin" ); - } - jetgun_fired = 0; - if ( self is_jetgun_firing() && jetgun_fired == 0 ) - { - self.jetsound_ent playloopsound( "wpn_jetgun_effect_plr_loop", 0,8 ); - self.jetsound_ent playsound( "wpn_jetgun_effect_plr_start" ); - self notify( "jgun_snd" ); - } - while ( self is_jetgun_firing() ) - { - jetgun_fired = 1; - self thread jetgun_fired(); - view_pos = self gettagorigin( "tag_flash" ); - view_angles = self gettagangles( "tag_flash" ); - if ( self get_jetgun_engine_direction() < 0 ) - { - playfx( level._effect[ "jetgun_smoke_cloud" ], view_pos - self getplayerviewheight(), anglesToForward( view_angles ), anglesToUp( view_angles ) ); - } - else - { - playfx( level._effect[ "jetgun_smoke_cloud" ], view_pos - self getplayerviewheight(), anglesToForward( view_angles ) * -1, anglesToUp( view_angles ) ); - } - wait 0,25; - } - if ( jetgun_fired == 1 ) - { - self.jetsound_ent stoploopsound( 0,5 ); - self.jetsound_ent playsound( "wpn_jetgun_effect_plr_end" ); - self.jetsound_ent thread sound_ent_cleanup(); - jetgun_fired = 0; - } -} - -sound_ent_cleanup() -{ - self endon( "jgun_snd" ); - wait 4; - if ( isDefined( self.jetsound_ent ) ) - { - self delete(); - } -} - -jetgun_fired() -{ - if ( !self is_jetgun_firing() ) - { - return; - } - origin = self getweaponmuzzlepoint(); - physicsjetthrust( origin, self getweaponforwarddir() * -1, level.zombie_vars[ "jetgun_grind_range" ], self get_jetgun_engine_direction(), 0,85 ); - if ( !isDefined( level.jetgun_knockdown_enemies ) ) - { - level.jetgun_knockdown_enemies = []; - level.jetgun_knockdown_gib = []; - level.jetgun_drag_enemies = []; - level.jetgun_fling_enemies = []; - level.jetgun_grind_enemies = []; - } - powerups = maps/mp/zombies/_zm_powerups::get_powerups(); - if ( isDefined( powerups ) && powerups.size ) - { - self thread try_pull_powerups( powerups ); - } - self jetgun_get_enemies_in_range( self get_jetgun_engine_direction() ); - level.jetgun_network_choke_count = 0; - _a408 = level.jetgun_fling_enemies; - index = getFirstArrayKey( _a408 ); - while ( isDefined( index ) ) - { - zombie = _a408[ index ]; - jetgun_network_choke(); - if ( isDefined( zombie ) ) - { - zombie thread jetgun_fling_zombie( self, index ); - } - index = getNextArrayKey( _a408, index ); - } - _a418 = level.jetgun_drag_enemies; - _k418 = getFirstArrayKey( _a418 ); - while ( isDefined( _k418 ) ) - { - zombie = _a418[ _k418 ]; - jetgun_network_choke(); - if ( isDefined( zombie ) ) - { - zombie.jetgun_owner = self; - zombie thread jetgun_drag_zombie( origin, -1 * self get_jetgun_engine_direction() ); - } - _k418 = getNextArrayKey( _a418, _k418 ); - } - level.jetgun_knockdown_enemies = []; - level.jetgun_knockdown_gib = []; - level.jetgun_drag_enemies = []; - level.jetgun_fling_enemies = []; - level.jetgun_grind_enemies = []; -} - -try_pull_powerups( powerups ) -{ - powerup_move_dist = level.zombie_vars[ "powerup_move_dist" ] * -1 * self get_jetgun_engine_direction(); - powerup_range_squared = level.zombie_vars[ "powerup_drag_range" ] * level.zombie_vars[ "powerup_drag_range" ]; - view_pos = self getweaponmuzzlepoint(); - forward_view_angles = self getweaponforwarddir(); - _a453 = powerups; - _k453 = getFirstArrayKey( _a453 ); - while ( isDefined( _k453 ) ) - { - powerup = _a453[ _k453 ]; - if ( distancesquared( view_pos, powerup.origin ) > powerup_range_squared ) - { - } - else normal = vectornormalize( powerup.origin - view_pos ); - dot = vectordot( forward_view_angles, normal ); - if ( abs( dot ) < 0,7 ) - { - } - else - { - powerup notify( "move_powerup" ); - } - _k453 = getNextArrayKey( _a453, _k453 ); - } -} - -jetgun_get_enemies_in_range( invert ) -{ - view_pos = self getweaponmuzzlepoint(); - zombies = get_array_of_closest( view_pos, get_round_enemy_array(), undefined, 3, level.zombie_vars[ "jetgun_drag_range" ] ); - if ( !isDefined( zombies ) ) - { - } - knockdown_range_squared = level.zombie_vars[ "jetgun_knockdown_range" ] * level.zombie_vars[ "jetgun_knockdown_range" ]; - drag_range_squared = level.zombie_vars[ "jetgun_drag_range" ] * level.zombie_vars[ "jetgun_drag_range" ]; - gib_range_squared = level.zombie_vars[ "jetgun_gib_range" ] * level.zombie_vars[ "jetgun_gib_range" ]; - grind_range_squared = level.zombie_vars[ "jetgun_grind_range" ] * level.zombie_vars[ "jetgun_grind_range" ]; - cylinder_radius_squared = level.zombie_vars[ "jetgun_cylinder_radius" ] * level.zombie_vars[ "jetgun_cylinder_radius" ]; - forward_view_angles = self getweaponforwarddir(); - end_pos = view_pos + vectorScale( forward_view_angles, level.zombie_vars[ "jetgun_knockdown_range" ] ); -/# - if ( getDvarInt( #"BCDDAAFF" ) == 2 ) - { - near_circle_pos = view_pos + vectorScale( forward_view_angles, 2 ); - circle( near_circle_pos, level.zombie_vars[ "jetgun_cylinder_radius" ], ( 1, 0, 1 ), 0, 0, 100 ); - line( near_circle_pos, end_pos, ( 1, 0, 1 ), 1, 0, 100 ); - circle( end_pos, level.zombie_vars[ "jetgun_cylinder_radius" ], ( 1, 0, 1 ), 0, 0, 100 ); -#/ - } - i = 0; - while ( i < zombies.size ) - { - self jetgun_check_enemies_in_range( zombies[ i ], view_pos, drag_range_squared, gib_range_squared, grind_range_squared, cylinder_radius_squared, forward_view_angles, end_pos, invert ); - i++; - } -} - -jetgun_check_enemies_in_range( zombie, view_pos, drag_range_squared, gib_range_squared, grind_range_squared, cylinder_radius_squared, forward_view_angles, end_pos, invert ) -{ - if ( !isDefined( zombie ) ) - { - return; - } - if ( !isDefined( zombie ) ) - { - return; - } - if ( zombie enemy_killed_by_jetgun() ) - { - return; - } - if ( !isDefined( zombie.ai_state ) || zombie.ai_state != "find_flesh" && zombie.ai_state != "zombieMoveOnBus" ) - { - return; - } - if ( isDefined( zombie.in_the_ground ) && zombie.in_the_ground ) - { - return; - } - if ( isDefined( zombie.is_avogadro ) && zombie.is_avogadro ) - { - return; - } - if ( isDefined( zombie.isdog ) && zombie.isdog ) - { - return; - } - if ( isDefined( zombie.isscreecher ) && zombie.isscreecher ) - { - return; - } - if ( isDefined( self.animname ) && self.animname == "quad_zombie" ) - { - return; - } - test_origin = zombie getcentroid(); - test_range_squared = distancesquared( view_pos, test_origin ); - if ( test_range_squared > drag_range_squared ) - { - zombie jetgun_debug_print( "range", ( 1, 0, 1 ) ); - return; - } - normal = vectornormalize( test_origin - view_pos ); - dot = vectordot( forward_view_angles, normal ); - if ( abs( dot ) < 0,7 ) - { - zombie jetgun_debug_print( "dot", ( 1, 0, 1 ) ); - return; - } - radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin ); - if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared ) - { - zombie jetgun_debug_print( "cylinder", ( 1, 0, 1 ) ); - return; - } - if ( zombie damageconetrace( view_pos, self ) == 0 ) - { - zombie jetgun_debug_print( "cone", ( 1, 0, 1 ) ); - return; - } - jetgun_blow_suck = invert; - if ( dot <= 0 ) - { - jetgun_blow_suck *= -1; - } - if ( test_range_squared < grind_range_squared ) - { - level.jetgun_fling_enemies[ level.jetgun_fling_enemies.size ] = zombie; - level.jetgun_grind_enemies[ level.jetgun_grind_enemies.size ] = dot < 0; - } - else - { - if ( test_range_squared < drag_range_squared && dot > 0 ) - { - level.jetgun_drag_enemies[ level.jetgun_drag_enemies.size ] = zombie; - } - } -} - -jetgun_debug_print( msg, color ) -{ -/# - if ( !getDvarInt( #"BCDDAAFF" ) ) - { - return; - } - if ( !isDefined( color ) ) - { - color = ( 1, 0, 1 ); - } - print3d( self.origin + vectorScale( ( 1, 0, 1 ), 60 ), msg, color, 1, 1, 40 ); -#/ -} - -jetgun_debug_print_on_ent( msg, color ) -{ -/# - if ( !getDvarInt( #"BCDDAAFF" ) ) - { - return; - } - if ( !isDefined( color ) ) - { - color = ( 1, 0, 1 ); - } - self notify( "new_jetgun_debug_print_on_ent" ); - self endon( "death" ); - self endon( "jetgun_end_drag_state" ); - self endon( "new_jetgun_debug_print_on_ent" ); - while ( 1 ) - { - print3d( self.origin + vectorScale( ( 1, 0, 1 ), 60 ), msg, color, 1, 1 ); - wait 0,05; -#/ - } -} - -try_gibbing() -{ - if ( isDefined( self ) && isDefined( self.a ) && isDefined( self.isscreecher ) && !self.isscreecher ) - { - self.a.gib_ref = random( level.jetgun_gib_refs ); - self thread maps/mp/animscripts/zm_death::do_gib(); - } -} - -jetgun_handle_death_notetracks( note ) -{ - if ( note == "jetgunned" ) - { - self thread jetgun_grind_death_ending(); - } -} - -jetgun_grind_death_ending() -{ - if ( !isDefined( self ) ) - { - return; - } - self hide(); - wait 0,1; - self self_delete(); -} - -jetgun_grind_zombie( player ) -{ - player endon( "death" ); - player endon( "disconnect" ); - self endon( "death" ); - if ( !isDefined( self.jetgun_grind ) ) - { - self.jetgun_grind = 1; - self notify( "grinding" ); - player set_jetgun_engine_direction( 0,5 * player get_jetgun_engine_direction() ); - if ( is_mature() ) - { - if ( isDefined( level._effect[ "zombie_guts_explosion" ] ) ) - { - playfx( level._effect[ "zombie_guts_explosion" ], self gettagorigin( "J_SpineLower" ) ); - } - } - self.nodeathragdoll = 1; - self.handle_death_notetracks = ::jetgun_handle_death_notetracks; - self dodamage( self.health + 666, player.origin, player ); - } -} - -jetgun_fling_zombie( player, index ) -{ - if ( !isDefined( self ) ) - { - return; - } - if ( isDefined( self.jetgun_fling_func ) ) - { - self [[ self.jetgun_fling_func ]]( player ); - return; - } - was_alive = isalive( self ); - if ( was_alive ) - { - self.jetgun_fling = 1; - self notify( "flinging" ); - deathanim = undefined; - if ( is_mature() ) - { - player weaponplayejectbrass(); - } - if ( isDefined( self.has_legs ) && self.has_legs ) - { - if ( isDefined( self.jetgun_drag_state ) && self.jetgun_drag_state == "jetgun_sprint" ) - { - deathanim = "zm_jetgun_sprint_death"; - } - else - { - deathanim = "zm_jetgun_death"; - } - } - else - { - deathanim = "zm_jetgun_death_crawl"; - } - self.deathanim = deathanim; - player playsound( "evt_jetgun_zmb_suck" ); - } - self thread jetgun_grind_zombie( player ); -} - -jetgun_drag_zombie( vdir, speed ) -{ - if ( isDefined( self.jetgun_drag_func ) ) - { - self [[ self.jetgun_drag_func ]]( vdir, speed ); - return; - } - self zombie_do_drag( vdir, speed ); -} - -jetgun_knockdown_zombie( player, gib ) -{ - self endon( "death" ); - return; - if ( isDefined( self.jetgun_knockdown_func ) ) - { - self [[ self.jetgun_knockdown_func ]]( player, gib ); - } - else - { - self dodamage( level.zombie_vars[ "jetgun_knockdown_damage" ], player.origin, player ); - } - if ( gib ) - { - self.a.gib_ref = random( level.jetgun_gib_refs ); - self thread maps/mp/animscripts/zm_death::do_gib(); - } - self.jetgun_handle_pain_notetracks = ::handle_jetgun_pain_notetracks; - self dodamage( level.zombie_vars[ "jetgun_knockdown_damage" ], player.origin, player ); -} - -handle_jetgun_pain_notetracks( note ) -{ - if ( note == "zombie_knockdown_ground_impact" ) - { - playfx( level._effect[ "jetgun_knockdown_ground" ], self.origin, anglesToForward( self.angles ), anglesToUp( self.angles ) ); - } -} - -is_jetgun_damage() -{ - if ( isDefined( self.damageweapon ) && self.damageweapon != "jetgun_zm" && self.damageweapon == "jetgun_upgraded_zm" ) - { - if ( self.damagemod != "MOD_GRENADE" ) - { - return self.damagemod != "MOD_GRENADE_SPLASH"; - } - } -} - -enemy_killed_by_jetgun() -{ - if ( isDefined( self.jetgun_fling ) && !self.jetgun_fling ) - { - if ( isDefined( self.jetgun_grind ) ) - { - return self.jetgun_grind; - } - } -} - -zombie_do_drag( vdir, speed ) -{ - if ( !self zombie_is_in_drag_state() ) - { - self zombie_enter_drag_state( vdir, speed ); - self thread zombie_drag_think(); - } - else - { - self zombie_keep_in_drag_state( vdir, speed ); - } -} - -zombie_is_in_drag_state() -{ - if ( isDefined( self.drag_state ) ) - { - return self.drag_state; - } -} - -zombie_should_stay_in_drag_state() -{ - if ( !isDefined( self ) || !isalive( self ) ) - { - return 0; - } - if ( isDefined( self.jetgun_owner ) || self.jetgun_owner getcurrentweapon() != "jetgun_zm" && !self.jetgun_owner is_jetgun_firing() ) - { - return 0; - } - if ( isDefined( self.drag_state ) && self.drag_state ) - { - return 1; - } - return 0; -} - -zombie_keep_in_drag_state( vdir, speed ) -{ - self.drag_start_time = getTime(); - self.drag_target = vdir; -} - -zombie_enter_drag_state( vdir, speed ) -{ - self.drag_state = 1; - self.jetgun_drag_state = "unaffected"; - if ( isDefined( self.is_traversing ) ) - { - self.was_traversing = self.is_traversing; - } - self notify( "killanimscript" ); - self zombie_keep_in_drag_state( vdir, speed ); - self.zombie_move_speed_pre_jetgun_drag = self.zombie_move_speed; -} - -zombie_exit_drag_state() -{ - self notify( "jetgun_end_drag_state" ); - self.drag_state = 0; - self.jetgun_drag_state = "unaffected"; - self.needs_run_update = 1; - if ( isDefined( self.zombie_move_speed_pre_jetgun_drag ) ) - { - self set_zombie_run_cycle( self.zombie_move_speed_pre_jetgun_drag ); - self.zombie_move_speed_pre_jetgun_drag = undefined; - } - else - { - self set_zombie_run_cycle(); - } - if ( isDefined( self.isdog ) && !self.isdog ) - { - self maps/mp/animscripts/zm_run::moverun(); - } - if ( isDefined( self.was_traversing ) && self.was_traversing ) - { - self traversemode( "gravity" ); - self.a.nodeath = 0; - self maps/mp/animscripts/zm_run::needsupdate(); - if ( !self.isdog ) - { - self maps/mp/animscripts/zm_run::moverun(); - } - self.is_traversing = 0; - self notify( "zombie_end_traverse" ); - if ( is_mature() ) - { - if ( isDefined( level._effect[ "zombie_guts_explosion" ] ) ) - { - playfx( level._effect[ "zombie_guts_explosion" ], self gettagorigin( "J_SpineLower" ) ); - } - } - self.nodeathragdoll = 1; - self dodamage( self.health + 666, self.origin, self ); - } -} - -aiphysicstrace( start, end ) -{ - result = physicstrace( start, end, ( 1, 0, 1 ), ( 1, 0, 1 ), self ); - return result[ "position" ]; -} - -zombie_drag_think() -{ - self endon( "death" ); - self endon( "flinging" ); - self endon( "grinding" ); - while ( self zombie_should_stay_in_drag_state() ) - { - self._distance_to_jetgun_owner = distancesquared( self.origin, self.jetgun_owner.origin ); - jetgun_network_choke(); - if ( self.zombie_move_speed == "sprint" || self._distance_to_jetgun_owner < level.jetgun_pulled_in_range ) - { - self jetgun_drag_set( "jetgun_sprint", "jetgun_walk_fast_crawl" ); - } - else - { - if ( self._distance_to_jetgun_owner < level.jetgun_pulling_in_range ) - { - self jetgun_drag_set( "jetgun_walk_fast", "jetgun_walk_fast" ); - break; - } - else if ( self._distance_to_jetgun_owner < level.jetgun_inner_range ) - { - self jetgun_drag_set( "jetgun_walk", "jetgun_walk_slow_crawl" ); - break; - } - else - { - if ( self._distance_to_jetgun_owner < level.jetgun_outer_edge ) - { - self jetgun_drag_set( "jetgun_walk_slow", "jetgun_walk_slow_crawl" ); - } - } - } - wait 0,1; - } - self thread zombie_exit_drag_state(); -} - -jetgun_drag_set( legsanim, crawlanim ) -{ - self endon( "death" ); - self.needs_run_update = 1; - if ( self.has_legs ) - { - self._had_legs = 1; - self set_zombie_run_cycle( legsanim ); - } - else - { - self._had_legs = 0; - self set_zombie_run_cycle( crawlanim ); - } -/# - if ( self.jetgun_drag_state != legsanim ) - { - self thread jetgun_debug_print_on_ent( legsanim, ( 1, 0, 1 ) ); -#/ - } - self.jetgun_drag_state = legsanim; -} - -zombie_drag_radius() -{ -/# - self endon( "death_or_disconnect" ); - self endon( "weapon_change" ); - while ( 1 ) - { - circle( self.origin, level.zombie_vars[ "jetgun_grind_range" ], vectorScale( ( 1, 0, 1 ), 0,5 ) ); - circle( self.origin, level.zombie_vars[ "jetgun_drag_range" ] / 8, ( 1, 0, 1 ) ); - circle( self.origin, level.zombie_vars[ "jetgun_drag_range" ] / 4, ( 1, 0, 1 ) ); - circle( self.origin, level.zombie_vars[ "jetgun_drag_range" ] / 2, ( 1, 0, 1 ) ); - circle( self.origin, level.zombie_vars[ "jetgun_drag_range" ], ( 1, 0, 1 ) ); - wait 0,05; -#/ - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_riotshield.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_riotshield.gsc deleted file mode 100644 index e049751..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_riotshield.gsc +++ /dev/null @@ -1,777 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - maps/mp/zombies/_zm_riotshield::init(); - set_zombie_var( "riotshield_cylinder_radius", 360 ); - set_zombie_var( "riotshield_fling_range", 90 ); - set_zombie_var( "riotshield_gib_range", 90 ); - set_zombie_var( "riotshield_gib_damage", 75 ); - set_zombie_var( "riotshield_knockdown_range", 90 ); - set_zombie_var( "riotshield_knockdown_damage", 15 ); - set_zombie_var( "riotshield_hit_points", 1500 ); - set_zombie_var( "riotshield_fling_damage_shield", 100 ); - set_zombie_var( "riotshield_knockdown_damage_shield", 15 ); - level.riotshield_network_choke_count = 0; - level.riotshield_gib_refs = []; - level.riotshield_gib_refs[ level.riotshield_gib_refs.size ] = "guts"; - level.riotshield_gib_refs[ level.riotshield_gib_refs.size ] = "right_arm"; - level.riotshield_gib_refs[ level.riotshield_gib_refs.size ] = "left_arm"; - level.riotshield_damage_callback = ::player_damage_shield; - level.deployed_riotshield_damage_callback = ::deployed_damage_shield; - level.transferriotshield = ::transferriotshield; - level.cantransferriotshield = ::cantransferriotshield; - maps/mp/zombies/_zm_spawner::register_zombie_damage_callback( ::riotshield_zombie_damage_response ); - maps/mp/zombies/_zm_equipment::register_equipment( "riotshield_zm", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_RIOTSHIELD_HOWTO", "riotshield_zm_icon", "riotshield", ::riotshield_activation_watcher_thread, undefined, ::dropshield, ::pickupshield ); - maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "riotshield", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING" ); - onplayerconnect_callback( ::onplayerconnect ); -} - -onplayerconnect() -{ - self.player_shield_reset_health = ::player_init_shield_health; - self.player_shield_apply_damage = ::player_damage_shield; - self.player_shield_reset_location = ::player_init_shield_location; - self thread watchriotshielduse(); - self thread watchriotshieldmelee(); - self thread player_watch_laststand(); -} - -dropshield() -{ - self.shield_placement = 0; - self maps/mp/zombies/_zm_riotshield::updateriotshieldmodel(); - item = self maps/mp/zombies/_zm_equipment::placed_equipment_think( "t6_wpn_zmb_shield_world", "riotshield_zm", self.origin + vectorScale( ( 0, 0, 1 ), 30 ), self.angles ); - if ( isDefined( item ) ) - { - item.shielddamagetaken = self.shielddamagetaken; - item.original_owner = self; - item.owner = undefined; - item.name = level.riotshield_name; - item.isriotshield = 1; - item deployed_damage_shield( 0 ); - item setscriptmoverflag( 0 ); - item.requires_pickup = 1; - item thread watchtoofriendly( self ); - } - self takeweapon( level.riotshield_name ); - return item; -} - -watchtoofriendly( player ) -{ - wait 1; - if ( isDefined( self ) && isDefined( player ) && distance2dsquared( self.origin, player.origin ) < 36 ) - { - if ( isalive( player ) ) - { - player playlocalsound( level.zmb_laugh_alias ); - } - player maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 ); - self deployed_damage_shield( 2000 ); - } -} - -pickupshield( item ) -{ - item.owner = self; - damage = item.shielddamagetaken; - damagemax = level.zombie_vars[ "riotshield_hit_points" ]; - self.shielddamagetaken = damage; - self player_set_shield_health( damage, damagemax ); -} - -placeshield( origin, angles ) -{ - if ( self getcurrentweapon() != level.riotshield_name ) - { - self switchtoweapon( level.riotshield_name ); - self waittill( "weapon_change" ); - } - item = self maps/mp/zombies/_zm_riotshield::doriotshielddeploy( origin, angles ); - if ( isDefined( item ) ) - { - item.origin = self.origin + vectorScale( ( 0, 0, 1 ), 30 ); - item.angles = self.angles; - item.owner = self; - } - return item; -} - -cantransferriotshield( fromplayer, toplayer ) -{ - if ( isDefined( toplayer.screecher_weapon ) ) - { - return 0; - } - if ( isDefined( toplayer.is_drinking ) && toplayer.is_drinking > 0 ) - { - return 0; - } - if ( toplayer maps/mp/zombies/_zm_laststand::player_is_in_laststand() || toplayer in_revive_trigger() ) - { - return 0; - } - if ( toplayer isthrowinggrenade() ) - { - return 0; - } - if ( fromplayer == toplayer ) - { - return 1; - } - if ( toplayer is_player_equipment( level.riotshield_name ) && toplayer.shield_placement != 3 ) - { - return 0; - } - if ( fromplayer.session_team != toplayer.session_team ) - { - return 0; - } - return 1; -} - -transferriotshield( fromplayer, toplayer ) -{ - damage = fromplayer.shielddamagetaken; - toplayer player_take_riotshield(); - fromplayer player_take_riotshield(); - toplayer.shielddamagetaken = damage; - toplayer.shield_placement = 3; - toplayer.shield_damage_level = 0; - toplayer maps/mp/zombies/_zm_equipment::equipment_give( "riotshield_zm" ); - toplayer switchtoweapon( "riotshield_zm" ); - damagemax = level.zombie_vars[ "riotshield_hit_points" ]; - toplayer player_set_shield_health( damage, damagemax ); -} - -player_take_riotshield() -{ - self notify( "destroy_riotshield" ); - if ( self getcurrentweapon() == "riotshield_zm" ) - { - new_primary = ""; - if ( isDefined( self.laststand ) && self.laststand ) - { - new_primary = self.laststandpistol; - self giveweapon( new_primary ); - } - else - { - primaryweapons = self getweaponslistprimaries(); - i = 0; - while ( i < primaryweapons.size ) - { - if ( primaryweapons[ i ] != "riotshield_zm" ) - { - new_primary = primaryweapons[ i ]; - break; - } - else - { - i++; - } - } - if ( new_primary == "" ) - { - self maps/mp/zombies/_zm_weapons::give_fallback_weapon(); - new_primary = "zombie_fists_zm"; - } - } - self switchtoweaponimmediate( new_primary ); - self playsound( "wpn_riotshield_zm_destroy" ); - self waittill( "weapon_change" ); - } - self maps/mp/zombies/_zm_riotshield::removeriotshield(); - self maps/mp/zombies/_zm_equipment::equipment_take( "riotshield_zm" ); - self.hasriotshield = 0; - self.hasriotshieldequipped = 0; -} - -player_watch_laststand() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "entering_last_stand" ); - if ( self getcurrentweapon() == "riotshield_zm" ) - { - new_primary = self.laststandpistol; - self giveweapon( new_primary ); - self switchtoweaponimmediate( new_primary ); - } - } -} - -player_init_shield_health() -{ - retval = self.shielddamagetaken > 0; - self.shielddamagetaken = 0; - self.shield_damage_level = 0; - self maps/mp/zombies/_zm_riotshield::updateriotshieldmodel(); - return retval; -} - -player_init_shield_location() -{ - self.hasriotshield = 1; - self.hasriotshieldequipped = 0; - self.shield_placement = 2; - self maps/mp/zombies/_zm_riotshield::updateriotshieldmodel(); -} - -player_set_shield_health( damage, max_damage ) -{ - shieldhealth = int( ( 100 * ( max_damage - damage ) ) / max_damage ); - if ( shieldhealth >= 50 ) - { - self.shield_damage_level = 0; - } - else if ( shieldhealth >= 25 ) - { - self.shield_damage_level = 2; - } - else - { - self.shield_damage_level = 3; - } - self maps/mp/zombies/_zm_riotshield::updateriotshieldmodel(); -} - -deployed_set_shield_health( damage, max_damage ) -{ - shieldhealth = int( ( 100 * ( max_damage - damage ) ) / max_damage ); - if ( shieldhealth >= 50 ) - { - self.shield_damage_level = 0; - } - else if ( shieldhealth >= 25 ) - { - self.shield_damage_level = 2; - } - else - { - self.shield_damage_level = 3; - } - self maps/mp/zombies/_zm_riotshield::updatestandaloneriotshieldmodel(); -} - -player_damage_shield( idamage, bheld ) -{ - damagemax = level.zombie_vars[ "riotshield_hit_points" ]; - if ( !isDefined( self.shielddamagetaken ) ) - { - self.shielddamagetaken = 0; - } - self.shielddamagetaken += idamage; - if ( self.shielddamagetaken >= damagemax ) - { - if ( bheld || !isDefined( self.shield_ent ) ) - { - self playrumbleonentity( "damage_heavy" ); - earthquake( 1, 0,75, self.origin, 100 ); - } - else - { - if ( isDefined( self.shield_ent ) ) - { - if ( is_true( self.shield_ent.destroy_begun ) ) - { - return; - } - self.shield_ent.destroy_begun = 1; - shield_origin = self.shield_ent.origin; - level thread maps/mp/zombies/_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx ); - wait 1; - playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin ); - } - } - self thread player_take_riotshield(); - } - else - { - if ( bheld ) - { - self playrumbleonentity( "damage_light" ); - earthquake( 0,5, 0,5, self.origin, 100 ); - } - self player_set_shield_health( self.shielddamagetaken, damagemax ); - self playsound( "fly_riotshield_zm_impact_zombies" ); - } -} - -deployed_damage_shield( idamage ) -{ - damagemax = level.zombie_vars[ "riotshield_hit_points" ]; - if ( !isDefined( self.shielddamagetaken ) ) - { - self.shielddamagetaken = 0; - } - self.shielddamagetaken += idamage; - if ( self.shielddamagetaken >= damagemax ) - { - shield_origin = self.origin; - if ( isDefined( self.stub ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.stub ); - } - if ( isDefined( self.original_owner ) ) - { - self.original_owner maps/mp/zombies/_zm_equipment::equipment_take( "riotshield_zm" ); - } - maps/mp/zombies/_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx ); - playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin ); - self_delete(); - } - else - { - self deployed_set_shield_health( self.shielddamagetaken, damagemax ); - } -} - -riotshield_activation_watcher_thread() -{ - self endon( "zombified" ); - self endon( "disconnect" ); - self endon( "riotshield_zm_taken" ); - while ( 1 ) - { - self waittill_either( "riotshield_zm_activate", "riotshield_zm_deactivate" ); - } -} - -watchriotshielduse() -{ - self endon( "death" ); - self endon( "disconnect" ); - self.shielddamagetaken = 0; - self thread maps/mp/zombies/_zm_riotshield::trackriotshield(); - self thread maps/mp/zombies/_zm_riotshield::watchshieldlaststand(); - self thread trackstuckzombies(); - for ( ;; ) - { - self waittill( "raise_riotshield" ); - self thread maps/mp/zombies/_zm_riotshield::startriotshielddeploy(); - } -} - -watchriotshieldmelee() -{ - for ( ;; ) - { - self waittill( "weapon_melee", weapon ); - if ( weapon == level.riotshield_name ) - { - self riotshield_melee(); - } - } -} - -is_riotshield_damage( mod, player, amount ) -{ - if ( mod == "MOD_MELEE" && player hasweapon( level.riotshield_name ) && amount < 10 ) - { - return 1; - } - return 0; -} - -riotshield_damage( amount ) -{ -} - -riotshield_fling_zombie( player, fling_vec, index ) -{ - if ( !isDefined( self ) || !isalive( self ) ) - { - return; - } - if ( isDefined( self.ignore_riotshield ) && self.ignore_riotshield ) - { - return; - } - if ( isDefined( self.riotshield_fling_func ) ) - { - self [[ self.riotshield_fling_func ]]( player ); - return; - } - damage = 2500; - self dodamage( damage, player.origin, player, player, "", "MOD_IMPACT" ); - if ( self.health < 1 ) - { - self.riotshield_death = 1; - self startragdoll(); - self launchragdoll( fling_vec ); - } -} - -zombie_knockdown( player, gib ) -{ - damage = level.zombie_vars[ "riotshield_knockdown_damage" ]; - if ( isDefined( level.override_riotshield_damage_func ) ) - { - self [[ level.override_riotshield_damage_func ]]( player, gib ); - } - else - { - if ( gib ) - { - self.a.gib_ref = random( level.riotshield_gib_refs ); - self thread maps/mp/animscripts/zm_death::do_gib(); - } - self dodamage( damage, player.origin, player ); - } -} - -riotshield_knockdown_zombie( player, gib ) -{ - self endon( "death" ); - playsoundatposition( "vox_riotshield_forcehit", self.origin ); - playsoundatposition( "wpn_riotshield_proj_impact", self.origin ); - if ( !isDefined( self ) || !isalive( self ) ) - { - return; - } - if ( isDefined( self.riotshield_knockdown_func ) ) - { - self [[ self.riotshield_knockdown_func ]]( player, gib ); - } - else - { - self zombie_knockdown( player, gib ); - } - self dodamage( level.zombie_vars[ "riotshield_knockdown_damage" ], player.origin, player ); - self playsound( "fly_riotshield_forcehit" ); -} - -riotshield_get_enemies_in_range() -{ - view_pos = self geteye(); - zombies = get_array_of_closest( view_pos, get_round_enemy_array(), undefined, undefined, 2 * level.zombie_vars[ "riotshield_knockdown_range" ] ); - if ( !isDefined( zombies ) ) - { - return; - } - knockdown_range_squared = level.zombie_vars[ "riotshield_knockdown_range" ] * level.zombie_vars[ "riotshield_knockdown_range" ]; - gib_range_squared = level.zombie_vars[ "riotshield_gib_range" ] * level.zombie_vars[ "riotshield_gib_range" ]; - fling_range_squared = level.zombie_vars[ "riotshield_fling_range" ] * level.zombie_vars[ "riotshield_fling_range" ]; - cylinder_radius_squared = level.zombie_vars[ "riotshield_cylinder_radius" ] * level.zombie_vars[ "riotshield_cylinder_radius" ]; - forward_view_angles = self getweaponforwarddir(); - end_pos = view_pos + vectorScale( forward_view_angles, level.zombie_vars[ "riotshield_knockdown_range" ] ); -/# - if ( getDvarInt( #"BF480CE9" ) == 2 ) - { - near_circle_pos = view_pos + vectorScale( forward_view_angles, 2 ); - circle( near_circle_pos, level.zombie_vars[ "riotshield_cylinder_radius" ], ( 0, 0, 1 ), 0, 0, 100 ); - line( near_circle_pos, end_pos, ( 0, 0, 1 ), 1, 0, 100 ); - circle( end_pos, level.zombie_vars[ "riotshield_cylinder_radius" ], ( 0, 0, 1 ), 0, 0, 100 ); -#/ - } - i = 0; - while ( i < zombies.size ) - { - if ( !isDefined( zombies[ i ] ) || !isalive( zombies[ i ] ) ) - { - i++; - continue; - } - else - { - test_origin = zombies[ i ] getcentroid(); - test_range_squared = distancesquared( view_pos, test_origin ); - if ( test_range_squared > knockdown_range_squared ) - { - zombies[ i ] riotshield_debug_print( "range", ( 0, 0, 1 ) ); - return; - } - normal = vectornormalize( test_origin - view_pos ); - dot = vectordot( forward_view_angles, normal ); - if ( dot <= 0 ) - { - zombies[ i ] riotshield_debug_print( "dot", ( 0, 0, 1 ) ); - i++; - continue; - } - else radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin ); - if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared ) - { - zombies[ i ] riotshield_debug_print( "cylinder", ( 0, 0, 1 ) ); - i++; - continue; - } - else if ( zombies[ i ] damageconetrace( view_pos, self ) == 0 ) - { - zombies[ i ] riotshield_debug_print( "cone", ( 0, 0, 1 ) ); - i++; - continue; - } - else if ( test_range_squared < fling_range_squared ) - { - level.riotshield_fling_enemies[ level.riotshield_fling_enemies.size ] = zombies[ i ]; - dist_mult = ( fling_range_squared - test_range_squared ) / fling_range_squared; - fling_vec = vectornormalize( test_origin - view_pos ); - if ( test_range_squared >= 5000 ) - { - fling_vec += vectornormalize( test_origin - radial_origin ); - } - fling_vec = ( fling_vec[ 0 ], fling_vec[ 1 ], abs( fling_vec[ 2 ] ) ); - fling_vec = vectorScale( fling_vec, 100 + ( 100 * dist_mult ) ); - level.riotshield_fling_vecs[ level.riotshield_fling_vecs.size ] = fling_vec; - zombies[ i ] riotshield_debug_print( "fling", ( 0, 0, 1 ) ); - i++; - continue; - } - else - { - level.riotshield_knockdown_enemies[ level.riotshield_knockdown_enemies.size ] = zombies[ i ]; - level.riotshield_knockdown_gib[ level.riotshield_knockdown_gib.size ] = 0; - zombies[ i ] riotshield_debug_print( "knockdown", ( 0, 0, 1 ) ); - } - } - i++; - } -} - -riotshield_network_choke() -{ - level.riotshield_network_choke_count++; - if ( level.riotshield_network_choke_count % 10 ) - { - wait_network_frame(); - wait_network_frame(); - wait_network_frame(); - } -} - -riotshield_melee() -{ - if ( !isDefined( level.riotshield_knockdown_enemies ) ) - { - level.riotshield_knockdown_enemies = []; - level.riotshield_knockdown_gib = []; - level.riotshield_fling_enemies = []; - level.riotshield_fling_vecs = []; - } - self riotshield_get_enemies_in_range(); - shield_damage = 0; - level.riotshield_network_choke_count = 0; - i = 0; - while ( i < level.riotshield_fling_enemies.size ) - { - riotshield_network_choke(); - if ( isDefined( level.riotshield_fling_enemies[ i ] ) ) - { - level.riotshield_fling_enemies[ i ] thread riotshield_fling_zombie( self, level.riotshield_fling_vecs[ i ], i ); - shield_damage += level.zombie_vars[ "riotshield_fling_damage_shield" ]; - } - i++; - } - i = 0; - while ( i < level.riotshield_knockdown_enemies.size ) - { - riotshield_network_choke(); - level.riotshield_knockdown_enemies[ i ] thread riotshield_knockdown_zombie( self, level.riotshield_knockdown_gib[ i ] ); - shield_damage += level.zombie_vars[ "riotshield_knockdown_damage_shield" ]; - i++; - } - level.riotshield_knockdown_enemies = []; - level.riotshield_knockdown_gib = []; - level.riotshield_fling_enemies = []; - level.riotshield_fling_vecs = []; - if ( shield_damage ) - { - self player_damage_shield( shield_damage, 0 ); - } -} - -trackstuckzombies() -{ - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "deployed_riotshield" ); - if ( isDefined( self.riotshieldentity ) ) - { - self thread watchstuckzombies(); - } - } -} - -attack_shield( shield ) -{ - self endon( "death" ); - shield.owner endon( "death" ); - shield.owner endon( "disconnect" ); - shield.owner endon( "start_riotshield_deploy" ); - shield.owner endon( "destroy_riotshield" ); - if ( isDefined( self.doing_shield_attack ) && self.doing_shield_attack ) - { - return 0; - } - self.old_origin = self.origin; - if ( getDvar( "zombie_shield_attack_freq" ) == "" ) - { - setdvar( "zombie_shield_attack_freq", "15" ); - } - freq = getDvarInt( "zombie_shield_attack_freq" ); - self.doing_shield_attack = 1; - self.enemyoverride[ 0 ] = shield.origin; - self.enemyoverride[ 1 ] = shield; - wait ( randomint( 100 ) / 100 ); - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "attack", self.animname ); - attackanim = "zm_riotshield_melee"; - if ( !self.has_legs ) - { - attackanim += "_crawl"; - } - self orientmode( "face point", shield.origin ); - self animscripted( self.origin, flat_angle( vectorToAngle( shield.origin - self.origin ) ), attackanim ); - if ( isDefined( shield.owner.player_shield_apply_damage ) ) - { - shield.owner [[ shield.owner.player_shield_apply_damage ]]( 100, 0 ); - } - else - { - shield.owner player_damage_shield( 100, 0 ); - } - self thread attack_shield_stop( shield ); - wait ( randomint( 100 ) / 100 ); - self.doing_shield_attack = 0; - self orientmode( "face default" ); -} - -attack_shield_stop( shield ) -{ - self notify( "attack_shield_stop" ); - self endon( "attack_shield_stop" ); - self endon( "death" ); - shield waittill( "death" ); - self stopanimscripted(); - if ( isDefined( self.doing_shield_attack ) && self.doing_shield_attack ) - { - breachanim = "zm_riotshield_breakthrough"; - if ( !self.has_legs ) - { - breachanim += "_crawl"; - } - self animscripted( self.origin, flat_angle( self.angles ), breachanim ); - } -} - -window_notetracks( msg, player ) -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( msg, notetrack ); - if ( notetrack == "end" ) - { - return; - } - if ( notetrack == "fire" ) - { - player player_damage_shield( 100, 0 ); - } - } -} - -watchstuckzombies() -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "start_riotshield_deploy" ); - self endon( "destroy_riotshield" ); - self endon( "deployed_riotshield" ); - level endon( "intermission" ); - self.riotshieldentity maps/mp/zombies/_zm_equipment::item_attract_zombies(); -} - -riotshield_active() -{ - return self maps/mp/zombies/_zm_equipment::is_equipment_active( "riotshield_zm" ); -} - -riotshield_debug_print( msg, color ) -{ -/# - if ( !getDvarInt( #"BF480CE9" ) ) - { - return; - } - if ( !isDefined( color ) ) - { - color = ( 0, 0, 1 ); - } - print3d( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), msg, color, 1, 1, 40 ); -#/ -} - -shield_zombie_attract_func( poi ) -{ -} - -shield_zombie_arrive_func( poi ) -{ - self endon( "death" ); - self endon( "zombie_acquire_enemy" ); - self endon( "path_timer_done" ); - self waittill( "goal" ); - if ( isDefined( poi.owner ) ) - { - poi.owner player_damage_shield( 100, 0 ); - if ( isDefined( poi.owner.player_shield_apply_damage ) ) - { - poi.owner [[ poi.owner.player_shield_apply_damage ]]( 100, 0 ); - } - } -} - -createriotshieldattractor() -{ - self create_zombie_point_of_interest( 50, 8, 0, 1, ::shield_zombie_attract_func, ::shield_zombie_arrive_func ); - self thread create_zombie_point_of_interest_attractor_positions( 4, 15, 15 ); - return get_zombie_point_of_interest( self.origin ); -} - -riotshield_zombie_damage_response( mod, hit_location, hit_origin, player, amount ) -{ - if ( self is_riotshield_damage( mod, player, amount ) ) - { - self riotshield_damage( amount ); - return 1; - } - return 0; -} - -watchriotshieldattractor() -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "start_riotshield_deploy" ); - self endon( "destroy_riotshield" ); - self endon( "deployed_riotshield" ); - poi = self.riotshieldentity createriotshieldattractor(); -} - -trackriotshieldattractor() -{ - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "deployed_riotshield" ); - self thread watchriotshieldattractor(); - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc deleted file mode 100644 index 3e6a41d..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc +++ /dev/null @@ -1,150 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - registerclientfield( "toplayer", "tazer_flourish", 1, 1, "int" ); - register_melee_weapon_for_level( "tazer_knuckles_zm" ); - if ( isDefined( level.tazer_cost ) ) - { - cost = level.tazer_cost; - } - else - { - cost = 6000; - } - level.use_tazer_impact_fx = 0; - maps/mp/zombies/_zm_melee_weapon::init( "tazer_knuckles_zm", "zombie_tazer_flourish", "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", cost, "tazer_upgrade", &"ZOMBIE_WEAPON_TAZER_BUY", "tazerknuckles", ::has_tazer, ::give_tazer, ::take_tazer, ::tazer_flourish_fx ); - maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee" ); - maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee_upgraded" ); - maps/mp/zombies/_zm_spawner::add_cusom_zombie_spawn_logic( ::watch_bodily_functions ); - level._effect[ "fx_zmb_taser_vomit" ] = loadfx( "maps/zombie/fx_zmb_taser_vomit" ); - level._effect[ "fx_zmb_taser_flourish" ] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" ); - if ( level.script != "zm_transit" ) - { - level._effect[ "fx_zmb_tazer_impact" ] = loadfx( "weapon/taser/fx_taser_knuckles_impact_zmb" ); - level.use_tazer_impact_fx = 1; - } - level.tazer_flourish_delay = 0,5; -} - -spectator_respawn() -{ - maps/mp/zombies/_zm_melee_weapon::spectator_respawn( "tazer_upgrade", ::take_tazer, ::has_tazer ); -} - -watch_bodily_functions() -{ - if ( isDefined( self.isscreecher ) || self.isscreecher && isDefined( self.is_avogadro ) && self.is_avogadro ) - { - return; - } - while ( 1 ) - { - self waittill( "damage", amount, attacker, direction_vec, point, type ); - if ( !isDefined( self ) ) - { - return; - } - if ( !isDefined( attacker ) || !isplayer( attacker ) ) - { - continue; - } - while ( type != "MOD_MELEE" ) - { - continue; - } - if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isDefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped ) - { - continue; - } - ch = randomint( 100 ); - if ( ch < 4 ) - { - playfxontag( level._effect[ "fx_zmb_taser_vomit" ], self, "j_neck" ); - } - if ( level.use_tazer_impact_fx ) - { - tags = []; - tags[ 0 ] = "J_Head"; - tags[ 1 ] = "J_Neck"; - playfxontag( level._effect[ "fx_zmb_tazer_impact" ], self, random( tags ) ); - } - } -} - -onplayerconnect() -{ - self thread onplayerspawned(); -} - -onplayerspawned() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread watchtazerknucklemelee(); - } -} - -watchtazerknucklemelee() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "weapon_melee", weapon ); - if ( weapon == "tazer_knuckles_zm" ) - { - self tazerknuckle_melee(); - } - } -} - -tazerknuckle_melee() -{ -} - -has_tazer() -{ - if ( isDefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) - { - return 0; - } - if ( isDefined( self._sickle_zm_equipped ) && !self._sickle_zm_equipped && isDefined( self._bowie_zm_equipped ) || self._bowie_zm_equipped && isDefined( self._tazer_zm_equipped ) && self._tazer_zm_equipped ) - { - return 1; - } - return 0; -} - -give_tazer() -{ - self._tazer_zm_equipped = 1; - self._bowie_zm_equipped = undefined; - self._sickle_zm_equipped = undefined; -} - -take_tazer() -{ - self._tazer_zm_equipped = undefined; -} - -tazer_flourish_fx() -{ - self waittill( "weapon_change", newweapon ); - if ( newweapon == "zombie_tazer_flourish" ) - { - self endon( "weapon_change" ); - wait level.tazer_flourish_delay; - self thread maps/mp/zombies/_zm_audio::playerexert( "hitmed" ); - self setclientfieldtoplayer( "tazer_flourish", 1 ); - wait_network_frame(); - self setclientfieldtoplayer( "tazer_flourish", 0 ); - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weapons.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weapons.gsc deleted file mode 100644 index 370ac44..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_weapons.gsc +++ /dev/null @@ -1,2722 +0,0 @@ -#include maps/mp/zombies/_zm_weap_cymbal_monkey; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_melee_weapon; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_chugabud; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/gametypes_zm/_weapons; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ -/# - println( "ZM >> init (_zm_weapons.gsc)" ); -#/ - init_weapons(); - init_weapon_upgrade(); - init_weapon_toggle(); - init_pay_turret(); - init_weapon_cabinet(); - precacheshader( "minimap_icon_mystery_box" ); - precacheshader( "specialty_instakill_zombies" ); - precacheshader( "specialty_firesale_zombies" ); - precacheitem( "zombie_fists_zm" ); - level._weaponobjects_on_player_connect_override = ::weaponobjects_on_player_connect_override; - level._zombiemode_check_firesale_loc_valid_func = ::default_check_firesale_loc_valid_func; - level.missileentities = []; - setupretrievablehintstrings(); - level thread onplayerconnect(); -} - -setupretrievablehintstrings() -{ - maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "claymore", &"WEAPON_CLAYMORE_PICKUP" ); -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread onplayerspawned(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread watchforgrenadeduds(); - self thread watchforgrenadelauncherduds(); - self.staticweaponsstarttime = getTime(); - } -} - -watchforgrenadeduds() -{ - self endon( "spawned_player" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "grenade_fire", grenade, weapname ); - grenade thread checkgrenadefordud( weapname, 1, self ); - grenade thread watchforscriptexplosion( weapname, 1, self ); - } -} - -watchforgrenadelauncherduds() -{ - self endon( "spawned_player" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "grenade_launcher_fire", grenade, weapname ); - grenade thread checkgrenadefordud( weapname, 0, self ); - grenade thread watchforscriptexplosion( weapname, 0, self ); - } -} - -grenade_safe_to_throw( player, weapname ) -{ - if ( isDefined( level.grenade_safe_to_throw ) ) - { - return self [[ level.grenade_safe_to_throw ]]( player, weapname ); - } - return 1; -} - -grenade_safe_to_bounce( player, weapname ) -{ - if ( isDefined( level.grenade_safe_to_bounce ) ) - { - return self [[ level.grenade_safe_to_bounce ]]( player, weapname ); - } - return 1; -} - -makegrenadedudanddestroy() -{ - self endon( "death" ); - self notify( "grenade_dud" ); - self makegrenadedud(); - wait 3; - if ( isDefined( self ) ) - { - self delete(); - } -} - -checkgrenadefordud( weapname, isthrowngrenade, player ) -{ - self endon( "death" ); - player endon( "zombify" ); - if ( !self grenade_safe_to_throw( player, weapname ) ) - { - self thread makegrenadedudanddestroy(); - return; - } - for ( ;; ) - { - self waittill_any_timeout( 0,25, "grenade_bounce", "stationary" ); - if ( !self grenade_safe_to_bounce( player, weapname ) ) - { - self thread makegrenadedudanddestroy(); - return; - } - } -} - -wait_explode() -{ - self endon( "grenade_dud" ); - self endon( "done" ); - self waittill( "explode", position ); - level.explode_position = position; - level.explode_position_valid = 1; - self notify( "done" ); -} - -wait_timeout( time ) -{ - self endon( "grenade_dud" ); - self endon( "done" ); - wait time; - self notify( "done" ); -} - -wait_for_explosion( time ) -{ - level.explode_position = ( 0, 0, 0 ); - level.explode_position_valid = 0; - self thread wait_explode(); - self thread wait_timeout( time ); - self waittill( "done" ); - self notify( "death_or_explode" ); -} - -watchforscriptexplosion( weapname, isthrowngrenade, player ) -{ - self endon( "grenade_dud" ); - if ( is_lethal_grenade( weapname ) || is_grenade_launcher( weapname ) ) - { - self thread wait_for_explosion( 20 ); - self waittill( "death_or_explode", exploded, position ); - if ( exploded ) - { - level notify( "grenade_exploded" ); - } - } -} - -switch_from_alt_weapon( current_weapon ) -{ - if ( is_alt_weapon( current_weapon ) ) - { - alt = weaponaltweaponname( current_weapon ); - while ( alt == "none" ) - { - primaryweapons = self getweaponslistprimaries(); - alt = primaryweapons[ 0 ]; - _a200 = primaryweapons; - _k200 = getFirstArrayKey( _a200 ); - while ( isDefined( _k200 ) ) - { - weapon = _a200[ _k200 ]; - if ( weaponaltweaponname( weapon ) == current_weapon ) - { - alt = weapon; - break; - } - else - { - _k200 = getNextArrayKey( _a200, _k200 ); - } - } - } - self switchtoweaponimmediate( alt ); - self waittill_notify_or_timeout( "weapon_change_complete", 1 ); - return alt; - } - return current_weapon; -} - -give_fallback_weapon() -{ - self giveweapon( "zombie_fists_zm" ); - self switchtoweapon( "zombie_fists_zm" ); -} - -take_fallback_weapon() -{ - if ( self hasweapon( "zombie_fists_zm" ) ) - { - self takeweapon( "zombie_fists_zm" ); - } -} - -switch_back_primary_weapon( oldprimary ) -{ - if ( isDefined( self.laststand ) && self.laststand ) - { - return; - } - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( oldprimary ) && isinarray( primaryweapons, oldprimary ) ) - { - self switchtoweapon( oldprimary ); - } - else - { - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - } -} - -add_retrievable_knife_init_name( name ) -{ - if ( !isDefined( level.retrievable_knife_init_names ) ) - { - level.retrievable_knife_init_names = []; - } - level.retrievable_knife_init_names[ level.retrievable_knife_init_names.size ] = name; -} - -watchweaponusagezm() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon( "game_ended" ); - for ( ;; ) - { - self waittill( "weapon_fired", curweapon ); - self.lastfiretime = getTime(); - self.hasdonecombat = 1; - if ( isDefined( self.hitsthismag[ curweapon ] ) ) - { - self thread updatemagshots( curweapon ); - } - switch( weaponclass( curweapon ) ) - { - case "rifle": - if ( curweapon == "crossbow_explosive_mp" ) - { - level.globalcrossbowfired++; - self addweaponstat( curweapon, "shots", 1 ); - self thread begingrenadetracking(); - break; - } - else case "mg": - case "pistol": - case "pistol spread": - case "pistolspread": - case "smg": - case "spread": - self trackweaponfire( curweapon ); - level.globalshotsfired++; - break; - case "grenade": - case "rocketlauncher": - if ( is_alt_weapon( curweapon ) ) - { - curweapon = weaponaltweaponname( curweapon ); - } - self addweaponstat( curweapon, "shots", 1 ); - break; - default: - } - switch( curweapon ) - { - case "m202_flash_mp": - case "m220_tow_mp": - case "m32_mp": - case "minigun_mp": - case "mp40_blinged_mp": - self.usedkillstreakweapon[ curweapon ] = 1; - break; - continue; - default: - } - } - } - } -} - -trackweaponzm() -{ - self.currentweapon = self getcurrentweapon(); - self.currenttime = getTime(); - spawnid = getplayerspawnid( self ); - while ( 1 ) - { - event = self waittill_any_return( "weapon_change", "death", "disconnect", "bled_out" ); - newtime = getTime(); - if ( event == "weapon_change" ) - { - newweapon = self getcurrentweapon(); - if ( newweapon != "none" && newweapon != self.currentweapon ) - { - updatelastheldweapontimingszm( newtime ); - self.currentweapon = newweapon; - self.currenttime = newtime; - } - continue; - } - else - { - if ( event != "disconnect" ) - { - updateweapontimingszm( newtime ); - } - return; - } - } -} - -updatelastheldweapontimingszm( newtime ) -{ - if ( isDefined( self.currentweapon ) && isDefined( self.currenttime ) ) - { - curweapon = self.currentweapon; - totaltime = int( ( newtime - self.currenttime ) / 1000 ); - if ( totaltime > 0 ) - { - if ( is_alt_weapon( curweapon ) ) - { - curweapon = weaponaltweaponname( curweapon ); - } - self addweaponstat( curweapon, "timeUsed", totaltime ); - } - } -} - -updateweapontimingszm( newtime ) -{ - if ( self is_bot() ) - { - return; - } - updatelastheldweapontimingszm( newtime ); - if ( !isDefined( self.staticweaponsstarttime ) ) - { - return; - } - totaltime = int( ( newtime - self.staticweaponsstarttime ) / 1000 ); - if ( totaltime < 0 ) - { - return; - } - self.staticweaponsstarttime = newtime; -} - -watchweaponchangezm() -{ - self endon( "death" ); - self endon( "disconnect" ); - self.lastdroppableweapon = self getcurrentweapon(); - self.hitsthismag = []; - weapon = self getcurrentweapon(); - if ( isDefined( weapon ) && weapon != "none" && !isDefined( self.hitsthismag[ weapon ] ) ) - { - self.hitsthismag[ weapon ] = weaponclipsize( weapon ); - } - while ( 1 ) - { - previous_weapon = self getcurrentweapon(); - self waittill( "weapon_change", newweapon ); - if ( maydropweapon( newweapon ) ) - { - self.lastdroppableweapon = newweapon; - } - if ( newweapon != "none" ) - { - if ( !isDefined( self.hitsthismag[ newweapon ] ) ) - { - self.hitsthismag[ newweapon ] = weaponclipsize( newweapon ); - } - } - } -} - -weaponobjects_on_player_connect_override_internal() -{ - self maps/mp/gametypes_zm/_weaponobjects::createbasewatchers(); - self createclaymorewatcher_zm(); - i = 0; - while ( i < level.retrievable_knife_init_names.size ) - { - self createballisticknifewatcher_zm( level.retrievable_knife_init_names[ i ], level.retrievable_knife_init_names[ i ] + "_zm" ); - i++; - } - self maps/mp/gametypes_zm/_weaponobjects::setupretrievablewatcher(); - if ( !isDefined( self.weaponobjectwatcherarray ) ) - { - self.weaponobjectwatcherarray = []; - } - self thread maps/mp/gametypes_zm/_weaponobjects::watchweaponobjectspawn(); - self thread maps/mp/gametypes_zm/_weaponobjects::watchweaponprojectileobjectspawn(); - self thread maps/mp/gametypes_zm/_weaponobjects::deleteweaponobjectson(); - self.concussionendtime = 0; - self.hasdonecombat = 0; - self.lastfiretime = 0; - self thread watchweaponusagezm(); - self thread maps/mp/gametypes_zm/_weapons::watchgrenadeusage(); - self thread maps/mp/gametypes_zm/_weapons::watchmissileusage(); - self thread watchweaponchangezm(); - self thread maps/mp/gametypes_zm/_weapons::watchturretuse(); - self thread trackweaponzm(); - self notify( "weapon_watchers_created" ); -} - -weaponobjects_on_player_connect_override() -{ - add_retrievable_knife_init_name( "knife_ballistic" ); - add_retrievable_knife_init_name( "knife_ballistic_upgraded" ); - onplayerconnect_callback( ::weaponobjects_on_player_connect_override_internal ); -} - -createclaymorewatcher_zm() -{ - watcher = self maps/mp/gametypes_zm/_weaponobjects::createuseweaponobjectwatcher( "claymore", "claymore_zm", self.team ); - watcher.onspawnretrievetriggers = ::maps/mp/zombies/_zm_weap_claymore::on_spawn_retrieve_trigger; - watcher.adjusttriggerorigin = ::maps/mp/zombies/_zm_weap_claymore::adjust_trigger_origin; - watcher.pickup = level.pickup_claymores; - watcher.pickup_trigger_listener = level.pickup_claymores_trigger_listener; - watcher.skip_weapon_object_damage = 1; - watcher.headicon = 0; - watcher.watchforfire = 1; - watcher.detonate = ::claymoredetonate; - watcher.ondamage = level.claymores_on_damage; -} - -createballisticknifewatcher_zm( name, weapon ) -{ - watcher = self maps/mp/gametypes_zm/_weaponobjects::createuseweaponobjectwatcher( name, weapon, self.team ); - watcher.onspawn = ::maps/mp/zombies/_zm_weap_ballistic_knife::on_spawn; - watcher.onspawnretrievetriggers = ::maps/mp/zombies/_zm_weap_ballistic_knife::on_spawn_retrieve_trigger; - watcher.storedifferentobject = 1; - watcher.headicon = 0; -} - -isempweapon( weaponname ) -{ - if ( isDefined( weaponname ) && weaponname != "emp_mp" || weaponname == "emp_grenade_mp" && weaponname == "emp_grenade_zm" ) - { - return 1; - } - return 0; -} - -claymoredetonate( attacker, weaponname ) -{ - from_emp = isempweapon( weaponname ); - if ( from_emp ) - { - self delete(); - return; - } - if ( isDefined( attacker ) ) - { - self detonate( attacker ); - } - else if ( isDefined( self.owner ) && isplayer( self.owner ) ) - { - self detonate( self.owner ); - } - else - { - self detonate(); - } -} - -default_check_firesale_loc_valid_func() -{ - return 1; -} - -add_zombie_weapon( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp, ammo_cost, create_vox ) -{ - if ( isDefined( level.zombie_include_weapons ) && !isDefined( level.zombie_include_weapons[ weapon_name ] ) ) - { - return; - } - table = "mp/zombiemode.csv"; - table_cost = tablelookup( table, 0, weapon_name, 1 ); - table_ammo_cost = tablelookup( table, 0, weapon_name, 2 ); - if ( isDefined( table_cost ) && table_cost != "" ) - { - cost = round_up_to_ten( int( table_cost ) ); - } - if ( isDefined( table_ammo_cost ) && table_ammo_cost != "" ) - { - ammo_cost = round_up_to_ten( int( table_ammo_cost ) ); - } - precachestring( hint ); - struct = spawnstruct(); - if ( !isDefined( level.zombie_weapons ) ) - { - level.zombie_weapons = []; - } - struct.weapon_name = weapon_name; - struct.upgrade_name = upgrade_name; - struct.weapon_classname = "weapon_" + weapon_name; - struct.hint = hint; - struct.cost = cost; - struct.vox = weaponvo; - struct.vox_response = weaponvoresp; -/# - println( "ZM >> Looking for weapon - " + weapon_name ); -#/ - struct.is_in_box = level.zombie_include_weapons[ weapon_name ]; - if ( !isDefined( ammo_cost ) ) - { - ammo_cost = round_up_to_ten( int( cost * 0,5 ) ); - } - struct.ammo_cost = ammo_cost; - level.zombie_weapons[ weapon_name ] = struct; - if ( isDefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch && isDefined( upgrade_name ) ) - { - add_attachments( weapon_name, upgrade_name ); - } - if ( isDefined( create_vox ) ) - { - level.vox maps/mp/zombies/_zm_audio::zmbvoxadd( "player", "weapon_pickup", weapon_name, weaponvo, undefined ); - } -/# - if ( isDefined( level.devgui_add_weapon ) ) - { - [[ level.devgui_add_weapon ]]( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp, ammo_cost ); -#/ - } -} - -add_attachments( weapon_name, upgrade_name ) -{ - table = "zm/pap_attach.csv"; - if ( isDefined( level.weapon_attachment_table ) ) - { - table = level.weapon_attachment_table; - } - row = tablelookuprownum( table, 0, upgrade_name ); - while ( row > -1 ) - { - level.zombie_weapons[ weapon_name ].default_attachment = tablelookup( table, 0, upgrade_name, 1 ); - level.zombie_weapons[ weapon_name ].addon_attachments = []; - index = 2; - next_addon = tablelookup( table, 0, upgrade_name, index ); - while ( isDefined( next_addon ) && next_addon.size > 0 ) - { - level.zombie_weapons[ weapon_name ].addon_attachments[ level.zombie_weapons[ weapon_name ].addon_attachments.size ] = next_addon; - index++; - next_addon = tablelookup( table, 0, upgrade_name, index ); - } - } -} - -default_weighting_func() -{ - return 1; -} - -default_tesla_weighting_func() -{ - num_to_add = 1; - if ( isDefined( level.pulls_since_last_tesla_gun ) ) - { - if ( isDefined( level.player_drops_tesla_gun ) && level.player_drops_tesla_gun == 1 ) - { - num_to_add += int( 0,2 * level.zombie_include_weapons.size ); - } - if ( !isDefined( level.player_seen_tesla_gun ) || level.player_seen_tesla_gun == 0 ) - { - if ( level.round_number > 10 ) - { - num_to_add += int( 0,2 * level.zombie_include_weapons.size ); - } - else - { - if ( level.round_number > 5 ) - { - num_to_add += int( 0,15 * level.zombie_include_weapons.size ); - } - } - } - } - return num_to_add; -} - -default_1st_move_weighting_func() -{ - if ( level.chest_moves > 0 ) - { - num_to_add = 1; - return num_to_add; - } - else - { - return 0; - } -} - -default_upgrade_weapon_weighting_func() -{ - if ( level.chest_moves > 1 ) - { - return 1; - } - else - { - return 0; - } -} - -default_cymbal_monkey_weighting_func() -{ - players = get_players(); - count = 0; - i = 0; - while ( i < players.size ) - { - if ( players[ i ] has_weapon_or_upgrade( "cymbal_monkey_zm" ) ) - { - count++; - } - i++; - } - if ( count > 0 ) - { - return 1; - } - else - { - if ( level.round_number < 10 ) - { - return 3; - } - else - { - return 5; - } - } -} - -is_weapon_included( weapon_name ) -{ - if ( !isDefined( level.zombie_weapons ) ) - { - return 0; - } - return isDefined( level.zombie_weapons[ weapon_name ] ); -} - -is_weapon_or_base_included( weapon_name ) -{ - if ( !isDefined( level.zombie_weapons ) ) - { - return 0; - } - if ( isDefined( level.zombie_weapons[ weapon_name ] ) ) - { - return 1; - } - base = get_base_weapon_name( weapon_name, 1 ); - if ( isDefined( level.zombie_weapons[ base ] ) ) - { - return 1; - } - return 0; -} - -include_zombie_weapon( weapon_name, in_box, collector, weighting_func ) -{ - if ( !isDefined( level.zombie_include_weapons ) ) - { - level.zombie_include_weapons = []; - } - if ( !isDefined( in_box ) ) - { - in_box = 1; - } -/# - println( "ZM >> Including weapon - " + weapon_name ); -#/ - level.zombie_include_weapons[ weapon_name ] = in_box; - precacheitem( weapon_name ); - if ( !isDefined( weighting_func ) ) - { - level.weapon_weighting_funcs[ weapon_name ] = ::default_weighting_func; - } - else - { - level.weapon_weighting_funcs[ weapon_name ] = weighting_func; - } -} - -init_weapons() -{ - if ( isDefined( level._zombie_custom_add_weapons ) ) - { - [[ level._zombie_custom_add_weapons ]](); - } - precachemodel( "zombie_teddybear" ); -} - -add_limited_weapon( weapon_name, amount ) -{ - if ( !isDefined( level.limited_weapons ) ) - { - level.limited_weapons = []; - } - level.limited_weapons[ weapon_name ] = amount; -} - -limited_weapon_below_quota( weapon, ignore_player, pap_triggers ) -{ - while ( isDefined( level.limited_weapons[ weapon ] ) ) - { - if ( !isDefined( pap_triggers ) ) - { - pap_triggers = getentarray( "specialty_weapupgrade", "script_noteworthy" ); - } - players = get_players(); - count = 0; - limit = level.limited_weapons[ weapon ]; - i = 0; - while ( i < players.size ) - { - if ( isDefined( ignore_player ) && ignore_player == players[ i ] ) - { - i++; - continue; - } - else - { - if ( players[ i ] has_weapon_or_upgrade( weapon ) ) - { - count++; - if ( count >= limit ) - { - return 0; - } - } - } - i++; - } - k = 0; - while ( k < pap_triggers.size ) - { - if ( isDefined( pap_triggers[ k ].current_weapon ) && pap_triggers[ k ].current_weapon == weapon ) - { - count++; - if ( count >= limit ) - { - return 0; - } - } - k++; - } - if ( maps/mp/zombies/_zm_chugabud::is_weapon_available_in_chugabud_corpse( weapon ) ) - { - return 0; - } - chestindex = 0; - while ( chestindex < level.chests.size ) - { - if ( isDefined( level.chests[ chestindex ].zbarrier.weapon_string ) && level.chests[ chestindex ].zbarrier.weapon_string == weapon ) - { - count++; - if ( count >= limit ) - { - return 0; - } - } - chestindex++; - } - while ( isDefined( level.random_weapon_powerups ) ) - { - powerupindex = 0; - while ( powerupindex < level.random_weapon_powerups.size ) - { - if ( isDefined( level.random_weapon_powerups[ powerupindex ] ) && level.random_weapon_powerups[ powerupindex ].base_weapon == weapon ) - { - count++; - if ( count >= limit ) - { - return 0; - } - } - powerupindex++; - } - } - } - return 1; -} - -init_pay_turret() -{ - pay_turrets = []; - pay_turrets = getentarray( "pay_turret", "targetname" ); - i = 0; - while ( i < pay_turrets.size ) - { - cost = level.pay_turret_cost; - if ( !isDefined( cost ) ) - { - cost = 1000; - } - pay_turrets[ i ] sethintstring( &"ZOMBIE_PAY_TURRET", cost ); - pay_turrets[ i ] setcursorhint( "HINT_NOICON" ); - pay_turrets[ i ] usetriggerrequirelookat(); - pay_turrets[ i ] thread pay_turret_think( cost ); - i++; - } -} - -init_spawnable_weapon_upgrade() -{ - spawn_list = []; - spawnable_weapon_spawns = getstructarray( "weapon_upgrade", "targetname" ); - spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "bowie_upgrade", "targetname" ), 1, 0 ); - spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "sickle_upgrade", "targetname" ), 1, 0 ); - spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "tazer_upgrade", "targetname" ), 1, 0 ); - if ( !is_true( level.headshots_only ) ) - { - spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "claymore_purchase", "targetname" ), 1, 0 ); - } - match_string = ""; - location = level.scr_zm_map_start_location; - if ( location != "default" && location == "" && isDefined( level.default_start_location ) ) - { - location = level.default_start_location; - } - match_string = level.scr_zm_ui_gametype; - if ( location != "" ) - { - match_string = ( match_string + "_" ) + location; - } - match_string_plus_space = " " + match_string; - i = 0; - while ( i < spawnable_weapon_spawns.size ) - { - spawnable_weapon = spawnable_weapon_spawns[ i ]; - if ( isDefined( spawnable_weapon.zombie_weapon_upgrade ) && spawnable_weapon.zombie_weapon_upgrade == "sticky_grenade_zm" && is_true( level.headshots_only ) ) - { - i++; - continue; - } - else - { - if ( !isDefined( spawnable_weapon.script_noteworthy ) || spawnable_weapon.script_noteworthy == "" ) - { - spawn_list[ spawn_list.size ] = spawnable_weapon; - i++; - continue; - } - else - { - matches = strtok( spawnable_weapon.script_noteworthy, "," ); - j = 0; - while ( j < matches.size ) - { - if ( matches[ j ] == match_string || matches[ j ] == match_string_plus_space ) - { - spawn_list[ spawn_list.size ] = spawnable_weapon; - } - j++; - } - } - } - i++; - } - tempmodel = spawn( "script_model", ( 0, 0, 0 ) ); - i = 0; - while ( i < spawn_list.size ) - { - clientfieldname = ( spawn_list[ i ].zombie_weapon_upgrade + "_" ) + spawn_list[ i ].origin; - registerclientfield( "world", clientfieldname, 1, 2, "int" ); - target_struct = getstruct( spawn_list[ i ].target, "targetname" ); - precachemodel( target_struct.model ); - unitrigger_stub = spawnstruct(); - unitrigger_stub.origin = spawn_list[ i ].origin; - unitrigger_stub.angles = spawn_list[ i ].angles; - tempmodel.origin = spawn_list[ i ].origin; - tempmodel.angles = spawn_list[ i ].angles; - mins = undefined; - maxs = undefined; - absmins = undefined; - absmaxs = undefined; - tempmodel setmodel( target_struct.model ); - tempmodel useweaponhidetags( spawn_list[ i ].zombie_weapon_upgrade ); - mins = tempmodel getmins(); - maxs = tempmodel getmaxs(); - absmins = tempmodel getabsmins(); - absmaxs = tempmodel getabsmaxs(); - bounds = absmaxs - absmins; - unitrigger_stub.script_length = bounds[ 0 ] * 0,25; - unitrigger_stub.script_width = bounds[ 1 ]; - unitrigger_stub.script_height = bounds[ 2 ]; - unitrigger_stub.origin -= anglesToRight( unitrigger_stub.angles ) * ( unitrigger_stub.script_length * 0,4 ); - unitrigger_stub.target = spawn_list[ i ].target; - unitrigger_stub.targetname = spawn_list[ i ].targetname; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - if ( spawn_list[ i ].targetname == "weapon_upgrade" ) - { - unitrigger_stub.hint_string = get_weapon_hint( spawn_list[ i ].zombie_weapon_upgrade ); - unitrigger_stub.cost = get_weapon_cost( spawn_list[ i ].zombie_weapon_upgrade ); - } - unitrigger_stub.weapon_upgrade = spawn_list[ i ].zombie_weapon_upgrade; - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.require_look_at = 1; - if ( isDefined( spawn_list[ i ].require_look_from ) && spawn_list[ i ].require_look_from ) - { - unitrigger_stub.require_look_from = 1; - } - unitrigger_stub.zombie_weapon_upgrade = spawn_list[ i ].zombie_weapon_upgrade; - unitrigger_stub.clientfieldname = clientfieldname; - if ( unitrigger_stub.zombie_weapon_upgrade == "claymore_zm" ) - { - unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - unitrigger_stub.prompt_and_visibility_func = ::maps/mp/zombies/_zm_weap_claymore::claymore_unitrigger_update_prompt; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::maps/mp/zombies/_zm_weap_claymore::buy_claymores ); - } - else - { - if ( unitrigger_stub.zombie_weapon_upgrade == "tazer_knuckles_zm" && isDefined( level.taser_trig_adjustment ) ) - { - unitrigger_stub.origin += level.taser_trig_adjustment; - } - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think ); - } - spawn_list[ i ].trigger_stub = unitrigger_stub; - i++; - } - level._spawned_wallbuys = spawn_list; - tempmodel delete(); -} - -reset_wallbuy_internal( set_hint_string ) -{ - if ( isDefined( self.first_time_triggered ) && self.first_time_triggered == 1 ) - { - self.first_time_triggered = 0; - if ( isDefined( self.clientfieldname ) ) - { - level setclientfield( self.clientfieldname, 0 ); - } - if ( set_hint_string ) - { - hint_string = get_weapon_hint( self.zombie_weapon_upgrade ); - cost = get_weapon_cost( self.zombie_weapon_upgrade ); - self sethintstring( hint_string, cost ); - } - } -} - -reset_wallbuys() -{ - weapon_spawns = []; - weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); - melee_and_grenade_spawns = []; - melee_and_grenade_spawns = getentarray( "bowie_upgrade", "targetname" ); - melee_and_grenade_spawns = arraycombine( melee_and_grenade_spawns, getentarray( "sickle_upgrade", "targetname" ), 1, 0 ); - melee_and_grenade_spawns = arraycombine( melee_and_grenade_spawns, getentarray( "tazer_upgrade", "targetname" ), 1, 0 ); - if ( !is_true( level.headshots_only ) ) - { - melee_and_grenade_spawns = arraycombine( melee_and_grenade_spawns, getentarray( "claymore_purchase", "targetname" ), 1, 0 ); - } - i = 0; - while ( i < weapon_spawns.size ) - { - weapon_spawns[ i ] reset_wallbuy_internal( 1 ); - i++; - } - i = 0; - while ( i < melee_and_grenade_spawns.size ) - { - melee_and_grenade_spawns[ i ] reset_wallbuy_internal( 0 ); - i++; - } - while ( isDefined( level._unitriggers ) ) - { - candidates = []; - i = 0; - while ( i < level._unitriggers.trigger_stubs.size ) - { - stub = level._unitriggers.trigger_stubs[ i ]; - tn = stub.targetname; - if ( tn != "weapon_upgrade" && tn != "bowie_upgrade" && tn != "sickle_upgrade" || tn == "tazer_upgrade" && tn == "claymore_purchase" ) - { - stub.first_time_triggered = 0; - if ( isDefined( stub.clientfieldname ) ) - { - level setclientfield( stub.clientfieldname, 0 ); - } - if ( tn == "weapon_upgrade" ) - { - stub.hint_string = get_weapon_hint( stub.zombie_weapon_upgrade ); - stub.cost = get_weapon_cost( stub.zombie_weapon_upgrade ); - } - } - i++; - } - } -} - -init_weapon_upgrade() -{ - init_spawnable_weapon_upgrade(); - weapon_spawns = []; - weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); - i = 0; - while ( i < weapon_spawns.size ) - { - hint_string = get_weapon_hint( weapon_spawns[ i ].zombie_weapon_upgrade ); - cost = get_weapon_cost( weapon_spawns[ i ].zombie_weapon_upgrade ); - weapon_spawns[ i ] sethintstring( hint_string, cost ); - weapon_spawns[ i ] setcursorhint( "HINT_NOICON" ); - weapon_spawns[ i ] usetriggerrequirelookat(); - weapon_spawns[ i ] thread weapon_spawn_think(); - model = getent( weapon_spawns[ i ].target, "targetname" ); - if ( isDefined( model ) ) - { - model useweaponhidetags( weapon_spawns[ i ].zombie_weapon_upgrade ); - model hide(); - } - i++; - } -} - -init_weapon_toggle() -{ - if ( !isDefined( level.magic_box_weapon_toggle_init_callback ) ) - { - return; - } - level.zombie_weapon_toggles = []; - level.zombie_weapon_toggle_max_active_count = 0; - level.zombie_weapon_toggle_active_count = 0; - precachestring( &"ZOMBIE_WEAPON_TOGGLE_DISABLED" ); - precachestring( &"ZOMBIE_WEAPON_TOGGLE_ACTIVATE" ); - precachestring( &"ZOMBIE_WEAPON_TOGGLE_DEACTIVATE" ); - precachestring( &"ZOMBIE_WEAPON_TOGGLE_ACQUIRED" ); - level.zombie_weapon_toggle_disabled_hint = &"ZOMBIE_WEAPON_TOGGLE_DISABLED"; - level.zombie_weapon_toggle_activate_hint = &"ZOMBIE_WEAPON_TOGGLE_ACTIVATE"; - level.zombie_weapon_toggle_deactivate_hint = &"ZOMBIE_WEAPON_TOGGLE_DEACTIVATE"; - level.zombie_weapon_toggle_acquired_hint = &"ZOMBIE_WEAPON_TOGGLE_ACQUIRED"; - precachemodel( "zombie_zapper_cagelight" ); - precachemodel( "zombie_zapper_cagelight_green" ); - precachemodel( "zombie_zapper_cagelight_red" ); - precachemodel( "zombie_zapper_cagelight_on" ); - level.zombie_weapon_toggle_disabled_light = "zombie_zapper_cagelight"; - level.zombie_weapon_toggle_active_light = "zombie_zapper_cagelight_green"; - level.zombie_weapon_toggle_inactive_light = "zombie_zapper_cagelight_red"; - level.zombie_weapon_toggle_acquired_light = "zombie_zapper_cagelight_on"; - weapon_toggle_ents = []; - weapon_toggle_ents = getentarray( "magic_box_weapon_toggle", "targetname" ); - i = 0; - while ( i < weapon_toggle_ents.size ) - { - struct = spawnstruct(); - struct.trigger = weapon_toggle_ents[ i ]; - struct.weapon_name = struct.trigger.script_string; - struct.upgrade_name = level.zombie_weapons[ struct.trigger.script_string ].upgrade_name; - struct.enabled = 0; - struct.active = 0; - struct.acquired = 0; - target_array = []; - target_array = getentarray( struct.trigger.target, "targetname" ); - j = 0; - while ( j < target_array.size ) - { - switch( target_array[ j ].script_string ) - { - case "light": - struct.light = target_array[ j ]; - struct.light setmodel( level.zombie_weapon_toggle_disabled_light ); - break; - j++; - continue; - case "weapon": - struct.weapon_model = target_array[ j ]; - struct.weapon_model hide(); - break; - j++; - continue; - } - j++; - } - struct.trigger sethintstring( level.zombie_weapon_toggle_disabled_hint ); - struct.trigger setcursorhint( "HINT_NOICON" ); - struct.trigger usetriggerrequirelookat(); - struct thread weapon_toggle_think(); - level.zombie_weapon_toggles[ struct.weapon_name ] = struct; - i++; - } - level thread [[ level.magic_box_weapon_toggle_init_callback ]](); -} - -get_weapon_toggle( weapon_name ) -{ - if ( !isDefined( level.zombie_weapon_toggles ) ) - { - return undefined; - } - if ( isDefined( level.zombie_weapon_toggles[ weapon_name ] ) ) - { - return level.zombie_weapon_toggles[ weapon_name ]; - } - keys = getarraykeys( level.zombie_weapon_toggles ); - i = 0; - while ( i < keys.size ) - { - if ( weapon_name == level.zombie_weapon_toggles[ keys[ i ] ].upgrade_name ) - { - return level.zombie_weapon_toggles[ keys[ i ] ]; - } - i++; - } - return undefined; -} - -is_weapon_toggle( weapon_name ) -{ - return isDefined( get_weapon_toggle( weapon_name ) ); -} - -disable_weapon_toggle( weapon_name ) -{ - toggle = get_weapon_toggle( weapon_name ); - if ( !isDefined( toggle ) ) - { - return; - } - if ( toggle.active ) - { - level.zombie_weapon_toggle_active_count--; - - } - toggle.enabled = 0; - toggle.active = 0; - toggle.light setmodel( level.zombie_weapon_toggle_disabled_light ); - toggle.weapon_model hide(); - toggle.trigger sethintstring( level.zombie_weapon_toggle_disabled_hint ); -} - -enable_weapon_toggle( weapon_name ) -{ - toggle = get_weapon_toggle( weapon_name ); - if ( !isDefined( toggle ) ) - { - return; - } - toggle.enabled = 1; - toggle.weapon_model show(); - toggle.weapon_model useweaponhidetags( weapon_name ); - deactivate_weapon_toggle( weapon_name ); -} - -activate_weapon_toggle( weapon_name, trig_for_vox ) -{ - if ( level.zombie_weapon_toggle_active_count >= level.zombie_weapon_toggle_max_active_count ) - { - if ( isDefined( trig_for_vox ) ) - { - trig_for_vox thread maps/mp/zombies/_zm_audio::weapon_toggle_vox( "max" ); - } - return; - } - toggle = get_weapon_toggle( weapon_name ); - if ( !isDefined( toggle ) ) - { - return; - } - if ( isDefined( trig_for_vox ) ) - { - trig_for_vox thread maps/mp/zombies/_zm_audio::weapon_toggle_vox( "activate", weapon_name ); - } - level.zombie_weapon_toggle_active_count++; - toggle.active = 1; - toggle.light setmodel( level.zombie_weapon_toggle_active_light ); - toggle.trigger sethintstring( level.zombie_weapon_toggle_deactivate_hint ); -} - -deactivate_weapon_toggle( weapon_name, trig_for_vox ) -{ - toggle = get_weapon_toggle( weapon_name ); - if ( !isDefined( toggle ) ) - { - return; - } - if ( isDefined( trig_for_vox ) ) - { - trig_for_vox thread maps/mp/zombies/_zm_audio::weapon_toggle_vox( "deactivate", weapon_name ); - } - if ( toggle.active ) - { - level.zombie_weapon_toggle_active_count--; - - } - toggle.active = 0; - toggle.light setmodel( level.zombie_weapon_toggle_inactive_light ); - toggle.trigger sethintstring( level.zombie_weapon_toggle_activate_hint ); -} - -acquire_weapon_toggle( weapon_name, player ) -{ - toggle = get_weapon_toggle( weapon_name ); - if ( !isDefined( toggle ) ) - { - return; - } - if ( !toggle.active || toggle.acquired ) - { - return; - } - toggle.acquired = 1; - toggle.light setmodel( level.zombie_weapon_toggle_acquired_light ); - toggle.trigger sethintstring( level.zombie_weapon_toggle_acquired_hint ); - toggle thread unacquire_weapon_toggle_on_death_or_disconnect_thread( player ); -} - -unacquire_weapon_toggle_on_death_or_disconnect_thread( player ) -{ - self notify( "end_unacquire_weapon_thread" ); - self endon( "end_unacquire_weapon_thread" ); - player waittill_any( "spawned_spectator", "disconnect" ); - unacquire_weapon_toggle( self.weapon_name ); -} - -unacquire_weapon_toggle( weapon_name ) -{ - toggle = get_weapon_toggle( weapon_name ); - if ( !isDefined( toggle ) ) - { - return; - } - if ( !toggle.active || !toggle.acquired ) - { - return; - } - toggle.acquired = 0; - toggle.light setmodel( level.zombie_weapon_toggle_active_light ); - toggle.trigger sethintstring( level.zombie_weapon_toggle_deactivate_hint ); - toggle notify( "end_unacquire_weapon_thread" ); -} - -weapon_toggle_think() -{ - for ( ;; ) - { - self.trigger waittill( "trigger", player ); - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - continue; - } - else if ( !self.enabled || self.acquired ) - { - self.trigger thread maps/mp/zombies/_zm_audio::weapon_toggle_vox( "max" ); - continue; - } - else - { - if ( !self.active ) - { - activate_weapon_toggle( self.weapon_name, self.trigger ); - break; - } - else - { - deactivate_weapon_toggle( self.weapon_name, self.trigger ); - } - } - } -} - -init_weapon_cabinet() -{ - weapon_cabs = getentarray( "weapon_cabinet_use", "targetname" ); -/# - println( "ZM >> init_weapon_cabinet (_zm_weapons.gsc) num=" + weapon_cabs.size ); -#/ - i = 0; - while ( i < weapon_cabs.size ) - { - weapon_cabs[ i ] sethintstring( &"ZOMBIE_CABINET_OPEN_1500" ); - weapon_cabs[ i ] setcursorhint( "HINT_NOICON" ); - weapon_cabs[ i ] usetriggerrequirelookat(); - i++; - } - array_thread( weapon_cabs, ::weapon_cabinet_think ); -} - -get_weapon_hint( weapon_name ) -{ -/# - assert( isDefined( level.zombie_weapons[ weapon_name ] ), weapon_name + " was not included or is not part of the zombie weapon list." ); -#/ - return level.zombie_weapons[ weapon_name ].hint; -} - -get_weapon_cost( weapon_name ) -{ -/# - assert( isDefined( level.zombie_weapons[ weapon_name ] ), weapon_name + " was not included or is not part of the zombie weapon list." ); -#/ - return level.zombie_weapons[ weapon_name ].cost; -} - -get_ammo_cost( weapon_name ) -{ -/# - assert( isDefined( level.zombie_weapons[ weapon_name ] ), weapon_name + " was not included or is not part of the zombie weapon list." ); -#/ - return level.zombie_weapons[ weapon_name ].ammo_cost; -} - -get_is_in_box( weapon_name ) -{ -/# - assert( isDefined( level.zombie_weapons[ weapon_name ] ), weapon_name + " was not included or is not part of the zombie weapon list." ); -#/ - return level.zombie_weapons[ weapon_name ].is_in_box; -} - -weapon_supports_attachments( weaponname ) -{ - weaponname = get_base_weapon_name( weaponname ); - attachments = level.zombie_weapons[ weaponname ].addon_attachments; - if ( isDefined( attachments ) ) - { - return attachments.size > 1; - } -} - -random_attachment( weaponname, exclude ) -{ - lo = 0; - if ( isDefined( level.zombie_weapons[ weaponname ].addon_attachments ) && level.zombie_weapons[ weaponname ].addon_attachments.size > 0 ) - { - attachments = level.zombie_weapons[ weaponname ].addon_attachments; - } - else - { - attachments = getweaponsupportedattachments( weaponname ); - lo = 1; - } - minatt = lo; - if ( isDefined( exclude ) && exclude != "none" ) - { - minatt = lo + 1; - } - while ( attachments.size > minatt ) - { - while ( 1 ) - { - idx = randomint( attachments.size - lo ) + lo; - if ( !isDefined( exclude ) || attachments[ idx ] != exclude ) - { - return attachments[ idx ]; - } - } - } - return "none"; -} - -get_base_name( weaponname ) -{ - split = strtok( weaponname, "+" ); - if ( split.size > 1 ) - { - return split[ 0 ]; - } - return weaponname; -} - -get_attachment_name( weaponname, att_id ) -{ - split = strtok( weaponname, "+" ); - if ( isDefined( att_id ) ) - { - attachment = att_id + 1; - if ( split.size > attachment ) - { - return split[ attachment ]; - } - } - else - { - if ( split.size > 1 ) - { - att = split[ 1 ]; - idx = 2; - while ( split.size > idx ) - { - att = ( att + "+" ) + split[ idx ]; - idx++; - } - return att; - } - } - return undefined; -} - -get_attachment_index( weapon ) -{ - att = get_attachment_name( weapon ); - if ( att == "none" ) - { - return -1; - } - base = get_base_name( weapon ); - if ( att == level.zombie_weapons[ base ].default_attachment ) - { - return 0; - } - while ( isDefined( level.zombie_weapons[ base ].addon_attachments ) ) - { - i = 0; - while ( i < level.zombie_weapons[ base ].addon_attachments.size ) - { - if ( level.zombie_weapons[ base ].addon_attachments[ i ] == att ) - { - return i + 1; - } - i++; - } - } -/# - println( "ZM WEAPON ERROR: Unrecognized attachment in weapon " + weapon ); -#/ - return -1; -} - -has_attachment( weaponname, att ) -{ - split = strtok( weaponname, "+" ); - idx = 1; - while ( split.size > idx ) - { - if ( att == split[ idx ] ) - { - return 1; - } - } - return 0; -} - -get_base_weapon_name( upgradedweaponname, base_if_not_upgraded ) -{ - if ( !isDefined( upgradedweaponname ) || upgradedweaponname == "" ) - { - return undefined; - } - upgradedweaponname = tolower( upgradedweaponname ); - upgradedweaponname = get_base_name( upgradedweaponname ); - ziw_keys = getarraykeys( level.zombie_weapons ); - i = 0; - while ( i < level.zombie_weapons.size ) - { - if ( isDefined( level.zombie_weapons[ ziw_keys[ i ] ].upgrade_name ) && level.zombie_weapons[ ziw_keys[ i ] ].upgrade_name == upgradedweaponname ) - { - return ziw_keys[ i ]; - } - i++; - } - if ( isDefined( base_if_not_upgraded ) && base_if_not_upgraded ) - { - return upgradedweaponname; - } - return undefined; -} - -get_upgrade_weapon( weaponname, add_attachment ) -{ - rootweaponname = tolower( weaponname ); - rootweaponname = get_base_name( rootweaponname ); - baseweaponname = get_base_weapon_name( rootweaponname, 1 ); - newweapon = rootweaponname; - if ( !is_weapon_upgraded( rootweaponname ) ) - { - newweapon = level.zombie_weapons[ rootweaponname ].upgrade_name; - } - if ( isDefined( add_attachment ) && add_attachment && isDefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) - { - oldatt = get_attachment_name( weaponname ); - att = random_attachment( baseweaponname, oldatt ); - newweapon = ( newweapon + "+" ) + att; - } - else - { - if ( isDefined( level.zombie_weapons[ rootweaponname ] ) && isDefined( level.zombie_weapons[ rootweaponname ].default_attachment ) ) - { - att = level.zombie_weapons[ rootweaponname ].default_attachment; - newweapon = ( newweapon + "+" ) + att; - } - } - return newweapon; -} - -can_upgrade_weapon( weaponname ) -{ - if ( isDefined( weaponname ) || weaponname == "" && weaponname == "zombie_fists_zm" ) - { - return 0; - } - weaponname = tolower( weaponname ); - weaponname = get_base_name( weaponname ); - if ( !is_weapon_upgraded( weaponname ) ) - { - return isDefined( level.zombie_weapons[ weaponname ].upgrade_name ); - } - if ( isDefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch && weapon_supports_attachments( weaponname ) ) - { - return 1; - } - return 0; -} - -will_upgrade_weapon_as_attachment( weaponname ) -{ - if ( isDefined( weaponname ) || weaponname == "" && weaponname == "zombie_fists_zm" ) - { - return 0; - } - weaponname = tolower( weaponname ); - weaponname = get_base_name( weaponname ); - if ( !is_weapon_upgraded( weaponname ) ) - { - return 0; - } - if ( isDefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch && weapon_supports_attachments( weaponname ) ) - { - return 1; - } - return 0; -} - -is_weapon_upgraded( weaponname ) -{ - if ( isDefined( weaponname ) || weaponname == "" && weaponname == "zombie_fists_zm" ) - { - return 0; - } - weaponname = tolower( weaponname ); - weaponname = get_base_name( weaponname ); - ziw_keys = getarraykeys( level.zombie_weapons ); - i = 0; - while ( i < level.zombie_weapons.size ) - { - if ( isDefined( level.zombie_weapons[ ziw_keys[ i ] ].upgrade_name ) && level.zombie_weapons[ ziw_keys[ i ] ].upgrade_name == weaponname ) - { - return 1; - } - i++; - } - return 0; -} - -get_weapon_with_attachments( weaponname ) -{ - if ( self hasweapon( weaponname ) ) - { - return weaponname; - } - while ( isDefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) - { - weaponname = tolower( weaponname ); - weaponname = get_base_name( weaponname ); - weapons = self getweaponslist( 1 ); - _a1818 = weapons; - _k1818 = getFirstArrayKey( _a1818 ); - while ( isDefined( _k1818 ) ) - { - weapon = _a1818[ _k1818 ]; - weapon = tolower( weapon ); - weapon_base = get_base_name( weapon ); - if ( weaponname == weapon_base ) - { - return weapon; - } - _k1818 = getNextArrayKey( _a1818, _k1818 ); - } - } - return undefined; -} - -has_weapon_or_attachments( weaponname ) -{ - if ( self hasweapon( weaponname ) ) - { - return 1; - } - while ( isDefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) - { - weaponname = tolower( weaponname ); - weaponname = get_base_name( weaponname ); - weapons = self getweaponslist( 1 ); - _a1840 = weapons; - _k1840 = getFirstArrayKey( _a1840 ); - while ( isDefined( _k1840 ) ) - { - weapon = _a1840[ _k1840 ]; - weapon = tolower( weapon ); - weapon = get_base_name( weapon ); - if ( weaponname == weapon ) - { - return 1; - } - _k1840 = getNextArrayKey( _a1840, _k1840 ); - } - } - return 0; -} - -has_upgrade( weaponname ) -{ - weaponname = get_base_name( weaponname ); - has_upgrade = 0; - if ( isDefined( level.zombie_weapons[ weaponname ] ) && isDefined( level.zombie_weapons[ weaponname ].upgrade_name ) ) - { - has_upgrade = self has_weapon_or_attachments( level.zombie_weapons[ weaponname ].upgrade_name ); - } - if ( !has_upgrade && weaponname == "knife_ballistic_zm" ) - { - has_weapon = self maps/mp/zombies/_zm_melee_weapon::has_upgraded_ballistic_knife(); - } - return has_upgrade; -} - -has_weapon_or_upgrade( weaponname ) -{ - weaponname = get_base_name( weaponname ); - upgradedweaponname = weaponname; - if ( isDefined( level.zombie_weapons[ weaponname ] ) && isDefined( level.zombie_weapons[ weaponname ].upgrade_name ) ) - { - upgradedweaponname = level.zombie_weapons[ weaponname ].upgrade_name; - } - has_weapon = 0; - if ( isDefined( level.zombie_weapons[ weaponname ] ) ) - { - if ( !self has_weapon_or_attachments( weaponname ) ) - { - has_weapon = self has_upgrade( weaponname ); - } - } - if ( !has_weapon && weaponname == "knife_ballistic_zm" ) - { - has_weapon = self maps/mp/zombies/_zm_melee_weapon::has_any_ballistic_knife(); - } - if ( !has_weapon && is_equipment( weaponname ) ) - { - has_weapon = self is_equipment_active( weaponname ); - } - return has_weapon; -} - -get_player_weapon_with_same_base( weaponname ) -{ - weaponname = tolower( weaponname ); - weaponname = get_base_name( weaponname ); - retweapon = get_weapon_with_attachments( weaponname ); - while ( !isDefined( retweapon ) ) - { - if ( isDefined( level.zombie_weapons[ weaponname ] ) ) - { - retweapon = get_weapon_with_attachments( level.zombie_weapons[ weaponname ].upgrade_name ); - break; - } - else - { - ziw_keys = getarraykeys( level.zombie_weapons ); - i = 0; - while ( i < level.zombie_weapons.size ) - { - if ( isDefined( level.zombie_weapons[ ziw_keys[ i ] ].upgrade_name ) && level.zombie_weapons[ ziw_keys[ i ] ].upgrade_name == weaponname ) - { - retweapon = get_weapon_with_attachments( ziw_keys[ i ] ); - } - i++; - } - } - } - return retweapon; -} - -pay_turret_think( cost ) -{ - if ( !isDefined( self.target ) ) - { - return; - } - turret = getent( self.target, "targetname" ); - if ( !isDefined( turret ) ) - { - return; - } - turret maketurretunusable(); - zone_name = turret get_current_zone(); - if ( !isDefined( zone_name ) ) - { - zone_name = ""; - } - while ( 1 ) - { - self waittill( "trigger", player ); - while ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - } - while ( player in_revive_trigger() ) - { - wait 0,1; - } - while ( player.is_drinking > 0 ) - { - wait 0,1; - } - if ( player.score >= cost ) - { - player maps/mp/zombies/_zm_score::minus_to_player_score( cost ); - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, zone_name, self.origin, "turret" ); - turret maketurretusable(); - turret useby( player ); - self disable_trigger(); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "mg" ); - player.curr_pay_turret = turret; - turret thread watch_for_laststand( player ); - turret thread watch_for_fake_death( player ); - if ( isDefined( level.turret_timer ) ) - { - turret thread watch_for_timeout( player, level.turret_timer ); - } - while ( isDefined( turret getturretowner() ) && turret getturretowner() == player ) - { - wait 0,05; - } - turret notify( "stop watching" ); - player.curr_pay_turret = undefined; - turret maketurretunusable(); - self enable_trigger(); - continue; - } - else - { - play_sound_on_ent( "no_purchase" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money", undefined, 0 ); - } - } -} - -watch_for_laststand( player ) -{ - self endon( "stop watching" ); - while ( !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - if ( isDefined( level.intermission ) && level.intermission ) - { - intermission = 1; - } - wait 0,05; - } - if ( isDefined( self getturretowner() ) && self getturretowner() == player ) - { - self useby( player ); - } -} - -watch_for_fake_death( player ) -{ - self endon( "stop watching" ); - player waittill( "fake_death" ); - if ( isDefined( self getturretowner() ) && self getturretowner() == player ) - { - self useby( player ); - } -} - -watch_for_timeout( player, time ) -{ - self endon( "stop watching" ); - self thread cancel_timer_on_end( player ); - wait time; - if ( isDefined( self getturretowner() ) && self getturretowner() == player ) - { - self useby( player ); - } -} - -cancel_timer_on_end( player ) -{ - self waittill( "stop watching" ); - player notify( "stop watching" ); -} - -weapon_cabinet_door_open( left_or_right ) -{ - if ( left_or_right == "left" ) - { - self rotateyaw( 120, 0,3, 0,2, 0,1 ); - } - else - { - if ( left_or_right == "right" ) - { - self rotateyaw( -120, 0,3, 0,2, 0,1 ); - } - } -} - -weapon_set_first_time_hint( cost, ammo_cost ) -{ - if ( isDefined( level.has_pack_a_punch ) && !level.has_pack_a_punch ) - { - self sethintstring( &"ZOMBIE_WEAPONCOSTAMMO", cost, ammo_cost ); - } - else - { - self sethintstring( &"ZOMBIE_WEAPONCOSTAMMO_UPGRADE", cost, ammo_cost ); - } -} - -weapon_spawn_think() -{ - cost = get_weapon_cost( self.zombie_weapon_upgrade ); - ammo_cost = get_ammo_cost( self.zombie_weapon_upgrade ); - is_grenade = weapontype( self.zombie_weapon_upgrade ) == "grenade"; - second_endon = undefined; - if ( isDefined( self.stub ) ) - { - second_endon = "kill_trigger"; - self.first_time_triggered = self.stub.first_time_triggered; - } - self thread decide_hide_show_hint( "stop_hint_logic", second_endon ); - if ( is_grenade ) - { - self.first_time_triggered = 0; - hint = get_weapon_hint( self.zombie_weapon_upgrade ); - self sethintstring( hint, cost ); - } - else if ( !isDefined( self.first_time_triggered ) ) - { - self.first_time_triggered = 0; - if ( isDefined( self.stub ) ) - { - self.stub.first_time_triggered = 0; - } - } - else - { - if ( self.first_time_triggered ) - { - self weapon_set_first_time_hint( cost, get_ammo_cost( self.zombie_weapon_upgrade ) ); - } - } - for ( ;; ) - { - self waittill( "trigger", player ); - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - continue; - } - else if ( !player can_buy_weapon() ) - { - wait 0,1; - continue; - } - else if ( isDefined( self.stub ) && isDefined( self.stub.require_look_from ) && self.stub.require_look_from ) - { - toplayer = player get_eye() - self.origin; - forward = -1 * anglesToRight( self.angles ); - dot = vectordot( toplayer, forward ); - if ( dot < 0 ) - { - continue; - } - } - else if ( player has_powerup_weapon() ) - { - wait 0,1; - continue; - } - else - { - player_has_weapon = player has_weapon_or_upgrade( self.zombie_weapon_upgrade ); - if ( !player_has_weapon ) - { - if ( player.score >= cost ) - { - if ( self.first_time_triggered == 0 ) - { - self show_all_weapon_buys( player, cost, ammo_cost, is_grenade ); - } - player maps/mp/zombies/_zm_score::minus_to_player_score( cost ); - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, self.zombie_weapon_upgrade, self.origin, "weapon" ); - if ( self.zombie_weapon_upgrade == "riotshield_zm" ) - { - player maps/mp/zombies/_zm_equipment::equipment_give( "riotshield_zm" ); - if ( isDefined( player.player_shield_reset_health ) ) - { - player [[ player.player_shield_reset_health ]](); - } - } - else if ( self.zombie_weapon_upgrade == "jetgun_zm" ) - { - player maps/mp/zombies/_zm_equipment::equipment_give( "jetgun_zm" ); - } - else - { - if ( is_lethal_grenade( self.zombie_weapon_upgrade ) ) - { - player takeweapon( player get_player_lethal_grenade() ); - player set_player_lethal_grenade( self.zombie_weapon_upgrade ); - } - player weapon_give( self.zombie_weapon_upgrade ); - } - player maps/mp/zombies/_zm_stats::increment_client_stat( "wallbuy_weapons_purchased" ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "wallbuy_weapons_purchased" ); - } - else - { - play_sound_on_ent( "no_purchase" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); - } - } - else if ( isDefined( self.hacked ) && self.hacked ) - { - if ( !player has_upgrade( self.zombie_weapon_upgrade ) ) - { - ammo_cost = 4500; - } - else - { - ammo_cost = get_ammo_cost( self.zombie_weapon_upgrade ); - } - } - else - { - if ( player has_upgrade( self.zombie_weapon_upgrade ) ) - { - ammo_cost = 4500; - break; - } - else - { - ammo_cost = get_ammo_cost( self.zombie_weapon_upgrade ); - } - } - if ( self.zombie_weapon_upgrade == "riotshield_zm" ) - { - play_sound_on_ent( "no_purchase" ); - } - else if ( player.score >= ammo_cost ) - { - if ( self.first_time_triggered == 0 ) - { - self show_all_weapon_buys( player, cost, ammo_cost, is_grenade ); - } - if ( player has_upgrade( self.zombie_weapon_upgrade ) ) - { - player maps/mp/zombies/_zm_stats::increment_client_stat( "upgraded_ammo_purchased" ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "upgraded_ammo_purchased" ); - } - else - { - player maps/mp/zombies/_zm_stats::increment_client_stat( "ammo_purchased" ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "ammo_purchased" ); - } - if ( self.zombie_weapon_upgrade == "riotshield_zm" ) - { - if ( isDefined( player.player_shield_reset_health ) ) - { - ammo_given = player [[ player.player_shield_reset_health ]](); - } - else - { - ammo_given = 0; - } - } - else if ( player has_upgrade( self.zombie_weapon_upgrade ) ) - { - ammo_given = player ammo_give( level.zombie_weapons[ self.zombie_weapon_upgrade ].upgrade_name ); - } - else - { - ammo_given = player ammo_give( self.zombie_weapon_upgrade ); - } - if ( ammo_given ) - { - player maps/mp/zombies/_zm_score::minus_to_player_score( ammo_cost ); - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, ammo_cost, self.zombie_weapon_upgrade, self.origin, "ammo" ); - } - } - else play_sound_on_ent( "no_purchase" ); - if ( isDefined( level.custom_generic_deny_vo_func ) ) - { - player [[ level.custom_generic_deny_vo_func ]](); - } - else - { - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); - } - if ( isDefined( self.stub ) && isDefined( self.stub.prompt_and_visibility_func ) ) - { - self [[ self.stub.prompt_and_visibility_func ]]( player ); - } - } - } -} - -show_all_weapon_buys( player, cost, ammo_cost, is_grenade ) -{ - model = getent( self.target, "targetname" ); - if ( isDefined( model ) ) - { - model thread weapon_show( player ); - } - else - { - if ( isDefined( self.clientfieldname ) ) - { - level setclientfield( self.clientfieldname, 1 ); - } - } - self.first_time_triggered = 1; - if ( isDefined( self.stub ) ) - { - self.stub.first_time_triggered = 1; - } - if ( !is_grenade ) - { - self weapon_set_first_time_hint( cost, ammo_cost ); - } - if ( isDefined( level.dont_link_common_wallbuys ) && !level.dont_link_common_wallbuys && isDefined( level._spawned_wallbuys ) ) - { - i = 0; - while ( i < level._spawned_wallbuys.size ) - { - wallbuy = level._spawned_wallbuys[ i ]; - if ( isDefined( self.stub ) && isDefined( wallbuy.trigger_stub ) && self.stub.clientfieldname == wallbuy.trigger_stub.clientfieldname ) - { - i++; - continue; - } - else - { - if ( self.zombie_weapon_upgrade == wallbuy.zombie_weapon_upgrade ) - { - if ( isDefined( wallbuy.trigger_stub ) && isDefined( wallbuy.trigger_stub.clientfieldname ) ) - { - level setclientfield( wallbuy.trigger_stub.clientfieldname, 1 ); - } - else - { - if ( isDefined( wallbuy.target ) ) - { - model = getent( wallbuy.target, "targetname" ); - if ( isDefined( model ) ) - { - model thread weapon_show( player ); - } - } - } - if ( isDefined( wallbuy.trigger_stub ) ) - { - wallbuy.trigger_stub.first_time_triggered = 1; - if ( isDefined( wallbuy.trigger_stub.trigger ) ) - { - wallbuy.trigger_stub.trigger.first_time_triggered = 1; - if ( !is_grenade ) - { - wallbuy.trigger_stub.trigger weapon_set_first_time_hint( cost, ammo_cost ); - } - } - i++; - continue; - } - else - { - if ( !is_grenade ) - { - wallbuy weapon_set_first_time_hint( cost, ammo_cost ); - } - } - } - } - i++; - } - } -} - -weapon_show( player ) -{ - player_angles = vectorToAngle( player.origin - self.origin ); - player_yaw = player_angles[ 1 ]; - weapon_yaw = self.angles[ 1 ]; - if ( isDefined( self.script_int ) ) - { - weapon_yaw -= self.script_int; - } - yaw_diff = angleClamp180( player_yaw - weapon_yaw ); - if ( yaw_diff > 0 ) - { - yaw = weapon_yaw - 90; - } - else - { - yaw = weapon_yaw + 90; - } - self.og_origin = self.origin; - self.origin += anglesToForward( ( 0, yaw, 0 ) ) * 8; - wait 0,05; - self show(); - play_sound_at_pos( "weapon_show", self.origin, self ); - time = 1; - if ( !isDefined( self._linked_ent ) ) - { - self moveto( self.og_origin, time ); - } -} - -get_pack_a_punch_weapon_options( weapon ) -{ - if ( !isDefined( self.pack_a_punch_weapon_options ) ) - { - self.pack_a_punch_weapon_options = []; - } - if ( !is_weapon_upgraded( weapon ) ) - { - return self calcweaponoptions( 0, 0, 0, 0, 0 ); - } - if ( isDefined( self.pack_a_punch_weapon_options[ weapon ] ) ) - { - return self.pack_a_punch_weapon_options[ weapon ]; - } - smiley_face_reticle_index = 1; - base = get_base_name( weapon ); - camo_index = 39; - lens_index = randomintrange( 0, 6 ); - reticle_index = randomintrange( 0, 16 ); - reticle_color_index = randomintrange( 0, 6 ); - plain_reticle_index = 16; - r = randomint( 10 ); - use_plain = r < 3; - if ( base == "saritch_upgraded_zm" ) - { - reticle_index = smiley_face_reticle_index; - } - else - { - if ( use_plain ) - { - reticle_index = plain_reticle_index; - } - } -/# - if ( getDvarInt( #"471F9AB9" ) >= 0 ) - { - reticle_index = getDvarInt( #"471F9AB9" ); -#/ - } - scary_eyes_reticle_index = 8; - purple_reticle_color_index = 3; - if ( reticle_index == scary_eyes_reticle_index ) - { - reticle_color_index = purple_reticle_color_index; - } - letter_a_reticle_index = 2; - pink_reticle_color_index = 6; - if ( reticle_index == letter_a_reticle_index ) - { - reticle_color_index = pink_reticle_color_index; - } - letter_e_reticle_index = 7; - green_reticle_color_index = 1; - if ( reticle_index == letter_e_reticle_index ) - { - reticle_color_index = green_reticle_color_index; - } - self.pack_a_punch_weapon_options[ weapon ] = self calcweaponoptions( camo_index, lens_index, reticle_index, reticle_color_index ); - return self.pack_a_punch_weapon_options[ weapon ]; -} - -weapon_give( weapon, is_upgrade, magic_box ) -{ - primaryweapons = self getweaponslistprimaries(); - current_weapon = self getcurrentweapon(); - current_weapon = self maps/mp/zombies/_zm_weapons::switch_from_alt_weapon( current_weapon ); - weapon_limit = 2; - if ( !isDefined( is_upgrade ) ) - { - is_upgrade = 0; - } - if ( self hasperk( "specialty_additionalprimaryweapon" ) ) - { - weapon_limit = 3; - } - if ( is_equipment( weapon ) ) - { - self maps/mp/zombies/_zm_equipment::equipment_give( weapon ); - } - if ( weapon == "riotshield_zm" ) - { - if ( isDefined( self.player_shield_reset_health ) ) - { - self [[ self.player_shield_reset_health ]](); - } - } - if ( self hasweapon( weapon ) ) - { - if ( issubstr( weapon, "knife_ballistic_" ) ) - { - self notify( "zmb_lost_knife" ); - } - self givestartammo( weapon ); - if ( !is_offhand_weapon( weapon ) ) - { - self switchtoweapon( weapon ); - } - return; - } - if ( is_melee_weapon( weapon ) ) - { - current_weapon = maps/mp/zombies/_zm_melee_weapon::change_melee_weapon( weapon, current_weapon ); - } - else if ( is_lethal_grenade( weapon ) ) - { - old_lethal = self get_player_lethal_grenade(); - if ( isDefined( old_lethal ) && old_lethal != "" ) - { - self takeweapon( old_lethal ); - unacquire_weapon_toggle( old_lethal ); - } - self set_player_lethal_grenade( weapon ); - } - else if ( is_tactical_grenade( weapon ) ) - { - old_tactical = self get_player_tactical_grenade(); - if ( isDefined( old_tactical ) && old_tactical != "" ) - { - self takeweapon( old_tactical ); - unacquire_weapon_toggle( old_tactical ); - } - self set_player_tactical_grenade( weapon ); - } - else - { - if ( is_placeable_mine( weapon ) ) - { - old_mine = self get_player_placeable_mine(); - if ( isDefined( old_mine ) ) - { - self takeweapon( old_mine ); - unacquire_weapon_toggle( old_mine ); - } - self set_player_placeable_mine( weapon ); - } - } - if ( !is_offhand_weapon( weapon ) ) - { - self maps/mp/zombies/_zm_weapons::take_fallback_weapon(); - } - if ( primaryweapons.size >= weapon_limit ) - { - if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) ) - { - current_weapon = undefined; - } - if ( isDefined( current_weapon ) ) - { - if ( !is_offhand_weapon( weapon ) ) - { - if ( current_weapon == "tesla_gun_zm" ) - { - level.player_drops_tesla_gun = 1; - } - if ( issubstr( current_weapon, "knife_ballistic_" ) ) - { - self notify( "zmb_lost_knife" ); - } - self takeweapon( current_weapon ); - unacquire_weapon_toggle( current_weapon ); - } - } - } - if ( isDefined( level.zombiemode_offhand_weapon_give_override ) ) - { - if ( self [[ level.zombiemode_offhand_weapon_give_override ]]( weapon ) ) - { - return; - } - } - if ( weapon == "cymbal_monkey_zm" ) - { - self maps/mp/zombies/_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); - self play_weapon_vo( weapon ); - return; - } - else if ( issubstr( weapon, "knife_ballistic_" ) ) - { - weapon = self maps/mp/zombies/_zm_melee_weapon::give_ballistic_knife( weapon, issubstr( weapon, "upgraded" ) ); - } - else - { - if ( weapon == "claymore_zm" ) - { - self thread maps/mp/zombies/_zm_weap_claymore::claymore_setup(); - self play_weapon_vo( weapon ); - return; - } - } - self play_sound_on_ent( "purchase" ); - if ( weapon == "ray_gun_zm" ) - { - playsoundatposition( "mus_raygun_stinger", ( 0, 0, 0 ) ); - } - if ( !is_weapon_upgraded( weapon ) ) - { - self giveweapon( weapon ); - } - else - { - self giveweapon( weapon, 0, self get_pack_a_punch_weapon_options( weapon ) ); - } - acquire_weapon_toggle( weapon, self ); - self givestartammo( weapon ); - if ( !is_offhand_weapon( weapon ) ) - { - if ( !is_melee_weapon( weapon ) ) - { - self switchtoweapon( weapon ); - } - else - { - self switchtoweapon( current_weapon ); - } - } - self play_weapon_vo( weapon ); -} - -play_weapon_vo( weapon ) -{ - if ( isDefined( level._audio_custom_weapon_check ) ) - { - type = self [[ level._audio_custom_weapon_check ]]( weapon ); - } - else - { - type = self weapon_type_check( weapon ); - } - if ( type == "crappy" ) - { - return; - } - if ( type != "favorite" && type != "upgrade" ) - { - type = weapon; - } - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", type ); -} - -weapon_type_check( weapon ) -{ - if ( !isDefined( self.entity_num ) ) - { - return "crappy"; - } - weapon = get_base_name( weapon ); - if ( self is_favorite_weapon( weapon ) ) - { - return "favorite"; - } - if ( issubstr( weapon, "upgraded" ) ) - { - return "upgrade"; - } - else - { - return level.zombie_weapons[ weapon ].vox; - } -} - -get_player_index( player ) -{ -/# - assert( isplayer( player ) ); -#/ -/# - assert( isDefined( player.characterindex ) ); -#/ -/# - if ( player.entity_num == 0 && getDvar( #"2222BA21" ) != "" ) - { - new_vo_index = getDvarInt( #"2222BA21" ); - return new_vo_index; -#/ - } - return player.characterindex; -} - -ammo_give( weapon ) -{ - give_ammo = 0; - if ( !is_offhand_weapon( weapon ) ) - { - weapon = get_weapon_with_attachments( weapon ); - if ( isDefined( weapon ) ) - { - stockmax = 0; - stockmax = weaponstartammo( weapon ); - clipcount = self getweaponammoclip( weapon ); - currstock = self getammocount( weapon ); - if ( ( currstock - clipcount ) >= stockmax ) - { - give_ammo = 0; - } - else - { - give_ammo = 1; - } - } - } - else - { - if ( self has_weapon_or_upgrade( weapon ) ) - { - if ( self getammocount( weapon ) < weaponmaxammo( weapon ) ) - { - give_ammo = 1; - } - } - } - if ( give_ammo ) - { - self play_sound_on_ent( "purchase" ); - self givemaxammo( weapon ); - alt_weap = weaponaltweaponname( weapon ); - if ( alt_weap != "none" ) - { - self givemaxammo( alt_weap ); - } - return 1; - } - if ( !give_ammo ) - { - return 0; - } -} - -weapon_cabinet_think() -{ - weapons = getentarray( "cabinet_weapon", "targetname" ); - doors = getentarray( self.target, "targetname" ); - i = 0; - while ( i < doors.size ) - { - doors[ i ] notsolid(); - i++; - } - self.has_been_used_once = 0; - self thread decide_hide_show_hint(); - while ( 1 ) - { - self waittill( "trigger", player ); - while ( !player can_buy_weapon() ) - { - wait 0,1; - } - cost = 1500; - if ( self.has_been_used_once ) - { - cost = get_weapon_cost( self.zombie_weapon_upgrade ); - } - else - { - if ( isDefined( self.zombie_cost ) ) - { - cost = self.zombie_cost; - } - } - ammo_cost = get_ammo_cost( self.zombie_weapon_upgrade ); - while ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - } - if ( self.has_been_used_once ) - { - player_has_weapon = player has_weapon_or_upgrade( self.zombie_weapon_upgrade ); - if ( !player_has_weapon ) - { - if ( player.score >= cost ) - { - self play_sound_on_ent( "purchase" ); - player maps/mp/zombies/_zm_score::minus_to_player_score( cost ); - player weapon_give( self.zombie_weapon_upgrade ); - } - else - { - play_sound_on_ent( "no_purchase" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); - } - } - else if ( player.score >= ammo_cost ) - { - ammo_given = player ammo_give( self.zombie_weapon_upgrade ); - if ( ammo_given ) - { - self play_sound_on_ent( "purchase" ); - player maps/mp/zombies/_zm_score::minus_to_player_score( ammo_cost ); - } - } - else play_sound_on_ent( "no_purchase" ); - if ( isDefined( level.custom_generic_deny_vo_func ) ) - { - player [[ level.custom_generic_deny_vo_func ]](); - } - else - { - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); - } - continue; - } - else if ( player.score >= cost ) - { - self.has_been_used_once = 1; - self play_sound_on_ent( "purchase" ); - self sethintstring( &"ZOMBIE_WEAPONCOSTAMMO", cost, ammo_cost ); - self setcursorhint( "HINT_NOICON" ); - player maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost ); - doors = getentarray( self.target, "targetname" ); - i = 0; - while ( i < doors.size ) - { - doors[ i ] thread weapon_cabinet_door_open( doors[ i ].script_noteworthy ); - i++; - } - player_has_weapon = player has_weapon_or_upgrade( self.zombie_weapon_upgrade ); - if ( !player_has_weapon ) - { - player weapon_give( self.zombie_weapon_upgrade ); - } - else if ( player has_upgrade( self.zombie_weapon_upgrade ) ) - { - player ammo_give( self.zombie_weapon_upgrade + "_upgraded" ); - } - else - { - player ammo_give( self.zombie_weapon_upgrade ); - } - continue; - } - else - { - play_sound_on_ent( "no_purchase" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); - } - } -} - -get_player_weapondata( player, weapon ) -{ - weapondata = []; - if ( !isDefined( weapon ) ) - { - weapondata[ "name" ] = player getcurrentweapon(); - } - else - { - weapondata[ "name" ] = weapon; - } - weapondata[ "dw_name" ] = weapondualwieldweaponname( weapondata[ "name" ] ); - weapondata[ "alt_name" ] = weaponaltweaponname( weapondata[ "name" ] ); - if ( weapondata[ "name" ] != "none" ) - { - weapondata[ "clip" ] = player getweaponammoclip( weapondata[ "name" ] ); - weapondata[ "stock" ] = player getweaponammostock( weapondata[ "name" ] ); - } - else - { - weapondata[ "clip" ] = 0; - weapondata[ "stock" ] = 0; - } - if ( weapondata[ "dw_name" ] != "none" ) - { - weapondata[ "lh_clip" ] = player getweaponammoclip( weapondata[ "dw_name" ] ); - } - else - { - weapondata[ "lh_clip" ] = 0; - } - if ( weapondata[ "alt_name" ] != "none" ) - { - weapondata[ "alt_clip" ] = player getweaponammoclip( weapondata[ "alt_name" ] ); - weapondata[ "alt_stock" ] = player getweaponammostock( weapondata[ "alt_name" ] ); - } - else - { - weapondata[ "alt_clip" ] = 0; - weapondata[ "alt_stock" ] = 0; - } - return weapondata; -} - -weapon_is_better( left, right ) -{ - if ( left != right ) - { - left_upgraded = !isDefined( level.zombie_weapons[ left ] ); - right_upgraded = !isDefined( level.zombie_weapons[ right ] ); - if ( left_upgraded && right_upgraded ) - { - leftatt = get_attachment_index( left ); - rightatt = get_attachment_index( right ); - return leftatt > rightatt; - } - else - { - if ( left_upgraded ) - { - return 1; - } - } - } - return 0; -} - -merge_weapons( oldweapondata, newweapondata ) -{ - weapondata = []; - weapondata[ "name" ] = "none"; - if ( weapon_is_better( oldweapondata[ "name" ], newweapondata[ "name" ] ) ) - { - weapondata[ "name" ] = oldweapondata[ "name" ]; - } - else - { - weapondata[ "name" ] = newweapondata[ "name" ]; - } - name = weapondata[ "name" ]; - dw_name = weapondualwieldweaponname( name ); - alt_name = weaponaltweaponname( name ); - if ( name != "none" ) - { - weapondata[ "clip" ] = newweapondata[ "clip" ] + oldweapondata[ "clip" ]; - weapondata[ "clip" ] = int( min( weapondata[ "clip" ], weaponclipsize( name ) ) ); - weapondata[ "stock" ] = newweapondata[ "stock" ] + oldweapondata[ "stock" ]; - weapondata[ "stock" ] = int( min( weapondata[ "stock" ], weaponmaxammo( name ) ) ); - } - if ( dw_name != "none" ) - { - weapondata[ "lh_clip" ] = newweapondata[ "lh_clip" ] + oldweapondata[ "lh_clip" ]; - weapondata[ "lh_clip" ] = int( min( weapondata[ "lh_clip" ], weaponclipsize( dw_name ) ) ); - } - if ( alt_name != "none" ) - { - weapondata[ "alt_clip" ] = newweapondata[ "alt_clip" ] + oldweapondata[ "alt_clip" ]; - weapondata[ "alt_clip" ] = int( min( weapondata[ "alt_clip" ], weaponclipsize( alt_name ) ) ); - weapondata[ "alt_stock" ] = newweapondata[ "alt_stock" ] + oldweapondata[ "alt_stock" ]; - weapondata[ "alt_stock" ] = int( min( weapondata[ "alt_stock" ], weaponmaxammo( alt_name ) ) ); - } - return weapondata; -} - -weapondata_give( weapondata ) -{ - current = get_player_weapon_with_same_base( weapondata[ "name" ] ); - if ( isDefined( current ) ) - { - curweapondata = get_player_weapondata( self, current ); - self takeweapon( current ); - weapondata = merge_weapons( curweapondata, weapondata ); - } - name = weapondata[ "name" ]; - weapon_give( name ); - dw_name = weapondualwieldweaponname( name ); - alt_name = weaponaltweaponname( name ); - if ( name != "none" ) - { - self setweaponammoclip( name, weapondata[ "clip" ] ); - self setweaponammostock( name, weapondata[ "stock" ] ); - } - if ( dw_name != "none" ) - { - self setweaponammoclip( dw_name, weapondata[ "lh_clip" ] ); - } - if ( alt_name != "none" ) - { - self setweaponammoclip( alt_name, weapondata[ "alt_clip" ] ); - self setweaponammostock( alt_name, weapondata[ "alt_stock" ] ); - } -} diff --git a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_zonemgr.gsc b/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_zonemgr.gsc deleted file mode 100644 index c7f2e01..0000000 --- a/Zombie Maps/Tranzit Diner/zm_transit_dr_patch/maps/mp/zombies/_zm_zonemgr.gsc +++ /dev/null @@ -1,1229 +0,0 @@ -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ -/# - println( "ZM >> Zombiemode Server Scripts Init (_zm_zonemgr.gsc)" ); -#/ - flag_init( "zones_initialized" ); - level.zones = []; - level.zone_flags = []; - level.zone_scanning_active = 0; - if ( !isDefined( level.create_spawner_list_func ) ) - { - level.create_spawner_list_func = ::create_spawner_list; - } -} - -zone_is_enabled( zone_name ) -{ - if ( isDefined( level.zones ) || !isDefined( level.zones[ zone_name ] ) && !level.zones[ zone_name ].is_enabled ) - { - return 0; - } - return 1; -} - -get_player_zone() -{ - player_zone = undefined; - keys = getarraykeys( level.zones ); - i = 0; - while ( i < keys.size ) - { - if ( self entity_in_zone( keys[ i ] ) ) - { - player_zone = keys[ i ]; - break; - } - else - { - i++; - } - } - return player_zone; -} - -get_zone_from_position( v_pos ) -{ - zone = undefined; - scr_org = spawn( "script_origin", v_pos ); - keys = getarraykeys( level.zones ); - i = 0; - while ( i < keys.size ) - { - if ( scr_org entity_in_zone( keys[ i ] ) ) - { - zone = keys[ i ]; - break; - } - else - { - i++; - } - } - scr_org delete(); - return zone; -} - -get_zone_magic_boxes( zone_name ) -{ - if ( isDefined( zone_name ) && !zone_is_enabled( zone_name ) ) - { - return undefined; - } - zone = level.zones[ zone_name ]; -/# - assert( isDefined( zone_name ) ); -#/ - return zone.magic_boxes; -} - -get_zone_zbarriers( zone_name ) -{ - if ( isDefined( zone_name ) && !zone_is_enabled( zone_name ) ) - { - return undefined; - } - zone = level.zones[ zone_name ]; -/# - assert( isDefined( zone_name ) ); -#/ - return zone.zbarriers; -} - -get_players_in_zone( zone_name, return_players ) -{ - if ( !zone_is_enabled( zone_name ) ) - { - return 0; - } - zone = level.zones[ zone_name ]; - num_in_zone = 0; - players_in_zone = []; - players = get_players(); - i = 0; - while ( i < zone.volumes.size ) - { - j = 0; - while ( j < players.size ) - { - if ( players[ j ] istouching( zone.volumes[ i ] ) ) - { - num_in_zone++; - players_in_zone[ players_in_zone.size ] = players[ j ]; - } - j++; - } - i++; - } - if ( isDefined( return_players ) ) - { - return players_in_zone; - } - return num_in_zone; -} - -player_in_zone( zone_name ) -{ - if ( !zone_is_enabled( zone_name ) ) - { - return 0; - } - zone = level.zones[ zone_name ]; - i = 0; - while ( i < zone.volumes.size ) - { - players = get_players(); - j = 0; - while ( j < players.size ) - { - if ( players[ j ] istouching( zone.volumes[ i ] ) && players[ j ].sessionstate != "spectator" ) - { - return 1; - } - j++; - } - i++; - } - return 0; -} - -entity_in_zone( zone_name, ignore_enabled_check ) -{ - if ( !zone_is_enabled( zone_name ) && isDefined( ignore_enabled_check ) && !ignore_enabled_check ) - { - return 0; - } - zone = level.zones[ zone_name ]; - i = 0; - while ( i < zone.volumes.size ) - { - if ( self istouching( zone.volumes[ i ] ) ) - { - return 1; - } - i++; - } - return 0; -} - -deactivate_initial_barrier_goals() -{ - special_goals = getstructarray( "exterior_goal", "targetname" ); - i = 0; - while ( i < special_goals.size ) - { - if ( isDefined( special_goals[ i ].script_noteworthy ) ) - { - special_goals[ i ].is_active = 0; - special_goals[ i ] trigger_off(); - } - i++; - } -} - -zone_init( zone_name ) -{ - if ( isDefined( level.zones[ zone_name ] ) ) - { - return; - } -/# - println( "ZM >> zone_init (1) = " + zone_name ); -#/ - level.zones[ zone_name ] = spawnstruct(); - zone = level.zones[ zone_name ]; - zone.is_enabled = 0; - zone.is_occupied = 0; - zone.is_active = 0; - zone.adjacent_zones = []; - zone.is_spawning_allowed = 0; - zone.volumes = []; - volumes = getentarray( zone_name, "targetname" ); -/# - println( "ZM >> zone_init (2) = " + volumes.size ); -#/ - i = 0; - while ( i < volumes.size ) - { - if ( volumes[ i ].classname == "info_volume" ) - { - zone.volumes[ zone.volumes.size ] = volumes[ i ]; - } - i++; - } -/# - assert( isDefined( zone.volumes[ 0 ] ), "zone_init: No volumes found for zone: " + zone_name ); -#/ - while ( isDefined( zone.volumes[ 0 ].target ) ) - { - spots = getstructarray( zone.volumes[ 0 ].target, "targetname" ); - zone.spawn_locations = []; - zone.dog_locations = []; - zone.screecher_locations = []; - zone.avogadro_locations = []; - zone.inert_locations = []; - zone.quad_locations = []; - zone.leaper_locations = []; - zone.ghost_locations = []; - zone.brutus_locations = []; - zone.zbarriers = []; - zone.magic_boxes = []; - barricades = getstructarray( "exterior_goal", "targetname" ); - box_locs = getstructarray( "treasure_chest_use", "targetname" ); - i = 0; - while ( i < spots.size ) - { - spots[ i ].zone_name = zone_name; - if ( isDefined( spots[ i ].is_blocked ) && !spots[ i ].is_blocked ) - { - spots[ i ].is_enabled = 1; - } - else - { - spots[ i ].is_enabled = 0; - } - tokens = strtok( spots[ i ].script_noteworthy, " " ); - _a323 = tokens; - _k323 = getFirstArrayKey( _a323 ); - while ( isDefined( _k323 ) ) - { - token = _a323[ _k323 ]; - if ( token == "dog_location" ) - { - zone.dog_locations[ zone.dog_locations.size ] = spots[ i ]; - } - else if ( token == "screecher_location" ) - { - zone.screecher_locations[ zone.screecher_locations.size ] = spots[ i ]; - } - else if ( token == "avogadro_location" ) - { - zone.avogadro_locations[ zone.avogadro_locations.size ] = spots[ i ]; - } - else if ( token == "inert_location" ) - { - zone.inert_locations[ zone.inert_locations.size ] = spots[ i ]; - } - else if ( token == "quad_location" ) - { - zone.quad_locations[ zone.quad_locations.size ] = spots[ i ]; - } - else if ( token == "leaper_location" ) - { - zone.leaper_locations[ zone.leaper_locations.size ] = spots[ i ]; - } - else if ( token == "ghost_location" ) - { - zone.ghost_locations[ zone.ghost_locations.size ] = spots[ i ]; - } - else if ( token == "brutus_location" ) - { - zone.brutus_locations[ zone.brutus_locations.size ] = spots[ i ]; - } - else - { - zone.spawn_locations[ zone.spawn_locations.size ] = spots[ i ]; - } - _k323 = getNextArrayKey( _a323, _k323 ); - } - while ( isDefined( spots[ i ].script_string ) ) - { - barricade_id = spots[ i ].script_string; - k = 0; - while ( k < barricades.size ) - { - while ( isDefined( barricades[ k ].script_string ) && barricades[ k ].script_string == barricade_id ) - { - nodes = getnodearray( barricades[ k ].target, "targetname" ); - j = 0; - while ( j < nodes.size ) - { - if ( isDefined( nodes[ j ].type ) && nodes[ j ].type == "Begin" ) - { - spots[ i ].target = nodes[ j ].targetname; - } - j++; - } - } - k++; - } - } - i++; - } - i = 0; - while ( i < barricades.size ) - { - targets = getentarray( barricades[ i ].target, "targetname" ); - j = 0; - while ( j < targets.size ) - { - if ( targets[ j ] iszbarrier() && isDefined( targets[ j ].script_string ) && targets[ j ].script_string == zone_name ) - { - zone.zbarriers[ zone.zbarriers.size ] = targets[ j ]; - } - j++; - } - i++; - } - i = 0; - while ( i < box_locs.size ) - { - chest_ent = getent( box_locs[ i ].script_noteworthy + "_zbarrier", "script_noteworthy" ); - if ( chest_ent entity_in_zone( zone_name, 1 ) ) - { - zone.magic_boxes[ zone.magic_boxes.size ] = box_locs[ i ]; - } - i++; - } - } -} - -reinit_zone_spawners() -{ - zkeys = getarraykeys( level.zones ); - i = 0; - while ( i < level.zones.size ) - { - zone = level.zones[ zkeys[ i ] ]; - while ( isDefined( zone.volumes[ 0 ].target ) ) - { - spots = getstructarray( zone.volumes[ 0 ].target, "targetname" ); - zone.spawn_locations = []; - zone.dog_locations = []; - zone.screecher_locations = []; - zone.avogadro_locations = []; - zone.quad_locations = []; - zone.leaper_locations = []; - zone.ghost_locations = []; - zone.brutus_locations = []; - j = 0; - while ( j < spots.size ) - { - spots[ j ].zone_name = zkeys[ j ]; - if ( isDefined( spots[ j ].is_blocked ) && !spots[ j ].is_blocked ) - { - spots[ j ].is_enabled = 1; - } - else - { - spots[ j ].is_enabled = 0; - } - tokens = strtok( spots[ j ].script_noteworthy, " " ); - _a440 = tokens; - _k440 = getFirstArrayKey( _a440 ); - while ( isDefined( _k440 ) ) - { - token = _a440[ _k440 ]; - if ( token == "dog_location" ) - { - zone.dog_locations[ zone.dog_locations.size ] = spots[ j ]; - } - else if ( token == "screecher_location" ) - { - zone.screecher_locations[ zone.screecher_locations.size ] = spots[ j ]; - } - else if ( token == "avogadro_location" ) - { - zone.avogadro_locations[ zone.avogadro_locations.size ] = spots[ j ]; - } - else if ( token == "quad_location" ) - { - zone.quad_locations[ zone.quad_locations.size ] = spots[ j ]; - } - else if ( token == "leaper_location" ) - { - zone.leaper_locations[ zone.leaper_locations.size ] = spots[ j ]; - } - else if ( token == "ghost_location" ) - { - zone.ghost_locations[ zone.ghost_locations.size ] = spots[ j ]; - } - else if ( token == "brutus_location" ) - { - zone.brutus_locations[ zone.brutus_locations.size ] = spots[ j ]; - } - else - { - zone.spawn_locations[ zone.spawn_locations.size ] = spots[ j ]; - } - _k440 = getNextArrayKey( _a440, _k440 ); - } - j++; - } - } - i++; - } -} - -enable_zone( zone_name ) -{ -/# - if ( isDefined( level.zones ) ) - { - assert( isDefined( level.zones[ zone_name ] ), "enable_zone: zone has not been initialized" ); - } -#/ - if ( level.zones[ zone_name ].is_enabled ) - { - return; - } - level.zones[ zone_name ].is_enabled = 1; - level.zones[ zone_name ].is_spawning_allowed = 1; - level notify( zone_name ); - spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype(); - i = 0; - while ( i < spawn_points.size ) - { - if ( spawn_points[ i ].script_noteworthy == zone_name ) - { - spawn_points[ i ].locked = 0; - } - i++; - } - entry_points = getstructarray( zone_name + "_barriers", "script_noteworthy" ); - i = 0; - while ( i < entry_points.size ) - { - entry_points[ i ].is_active = 1; - entry_points[ i ] trigger_on(); - i++; - } -} - -make_zone_adjacent( main_zone_name, adj_zone_name, flag_name ) -{ - main_zone = level.zones[ main_zone_name ]; - if ( !isDefined( main_zone.adjacent_zones[ adj_zone_name ] ) ) - { - main_zone.adjacent_zones[ adj_zone_name ] = spawnstruct(); - adj_zone = main_zone.adjacent_zones[ adj_zone_name ]; - adj_zone.is_connected = 0; - adj_zone.flags_do_or_check = 0; - if ( isarray( flag_name ) ) - { - adj_zone.flags = flag_name; - } - else - { - adj_zone.flags[ 0 ] = flag_name; - } - } - else - { -/# - assert( !isarray( flag_name ), "make_zone_adjacent: can't mix single and arrays of flags" ); -#/ - adj_zone = main_zone.adjacent_zones[ adj_zone_name ]; - size = adj_zone.flags.size; - adj_zone.flags_do_or_check = 1; - adj_zone.flags[ size ] = flag_name; - } -} - -add_zone_flags( wait_flag, add_flags ) -{ - if ( !isarray( add_flags ) ) - { - temp = add_flags; - add_flags = []; - add_flags[ 0 ] = temp; - } - keys = getarraykeys( level.zone_flags ); - i = 0; - while ( i < keys.size ) - { - if ( keys[ i ] == wait_flag ) - { - level.zone_flags[ keys[ i ] ] = arraycombine( level.zone_flags[ keys[ i ] ], add_flags, 1, 0 ); - return; - } - i++; - } - level.zone_flags[ wait_flag ] = add_flags; -} - -add_adjacent_zone( zone_name_a, zone_name_b, flag_name, one_way ) -{ - if ( !isDefined( one_way ) ) - { - one_way = 0; - } - if ( !isDefined( level.flag[ flag_name ] ) ) - { - flag_init( flag_name ); - } - zone_init( zone_name_a ); - zone_init( zone_name_b ); - make_zone_adjacent( zone_name_a, zone_name_b, flag_name ); - if ( !one_way ) - { - make_zone_adjacent( zone_name_b, zone_name_a, flag_name ); - } -} - -setup_zone_flag_waits() -{ - flags = []; - zkeys = getarraykeys( level.zones ); - z = 0; - while ( z < level.zones.size ) - { - zone = level.zones[ zkeys[ z ] ]; - azkeys = getarraykeys( zone.adjacent_zones ); - az = 0; - while ( az < zone.adjacent_zones.size ) - { - azone = zone.adjacent_zones[ azkeys[ az ] ]; - f = 0; - while ( f < azone.flags.size ) - { - flags = add_to_array( flags, azone.flags[ f ], 0 ); - f++; - } - az++; - } - z++; - } - i = 0; - while ( i < flags.size ) - { - level thread zone_flag_wait( flags[ i ] ); - i++; - } -} - -zone_flag_wait( flag_name ) -{ - if ( !isDefined( level.flag[ flag_name ] ) ) - { - flag_init( flag_name ); - } - flag_wait( flag_name ); - flags_set = 0; - z = 0; - while ( z < level.zones.size ) - { - zkeys = getarraykeys( level.zones ); - zone = level.zones[ zkeys[ z ] ]; - az = 0; - while ( az < zone.adjacent_zones.size ) - { - azkeys = getarraykeys( zone.adjacent_zones ); - azone = zone.adjacent_zones[ azkeys[ az ] ]; - if ( !azone.is_connected ) - { - if ( azone.flags_do_or_check ) - { - flags_set = 0; - f = 0; - while ( f < azone.flags.size ) - { - if ( flag( azone.flags[ f ] ) ) - { - flags_set = 1; - break; - } - else - { - f++; - } - } - } - else flags_set = 1; - f = 0; - while ( f < azone.flags.size ) - { - if ( !flag( azone.flags[ f ] ) ) - { - flags_set = 0; - } - f++; - } - if ( flags_set ) - { - enable_zone( zkeys[ z ] ); - azone.is_connected = 1; - if ( !level.zones[ azkeys[ az ] ].is_enabled ) - { - enable_zone( azkeys[ az ] ); - } - if ( flag( "door_can_close" ) ) - { - azone thread door_close_disconnect( flag_name ); - } - } - } - az++; - } - z++; - } - keys = getarraykeys( level.zone_flags ); - i = 0; - while ( i < keys.size ) - { - if ( keys[ i ] == flag_name ) - { - check_flag = level.zone_flags[ keys[ i ] ]; - k = 0; - while ( k < check_flag.size ) - { - flag_set( check_flag[ k ] ); - k++; - } - } - else i++; - } -} - -door_close_disconnect( flag_name ) -{ - while ( flag( flag_name ) ) - { - wait 1; - } - self.is_connected = 0; - level thread zone_flag_wait( flag_name ); -} - -connect_zones( zone_name_a, zone_name_b, one_way ) -{ - if ( !isDefined( one_way ) ) - { - one_way = 0; - } - zone_init( zone_name_a ); - zone_init( zone_name_b ); - enable_zone( zone_name_a ); - enable_zone( zone_name_b ); - if ( !isDefined( level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ] ) ) - { - level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ] = spawnstruct(); - level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ].is_connected = 1; - } - if ( !one_way ) - { - if ( !isDefined( level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ] ) ) - { - level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ] = spawnstruct(); - level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ].is_connected = 1; - } - } -} - -manage_zones( initial_zone ) -{ -/# - assert( isDefined( initial_zone ), "You must specify an initial zone to manage" ); -#/ - deactivate_initial_barrier_goals(); - zone_choke = 0; - spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype(); - i = 0; - while ( i < spawn_points.size ) - { -/# - assert( isDefined( spawn_points[ i ].script_noteworthy ), "player_respawn_point: You must specify a script noteworthy with the zone name" ); -#/ - spawn_points[ i ].locked = 1; - i++; - } - if ( isDefined( level.zone_manager_init_func ) ) - { - [[ level.zone_manager_init_func ]](); - } -/# - println( "ZM >> zone_init bbbb (_zm_zonemgr.gsc) = " + initial_zone.size ); -#/ - if ( isarray( initial_zone ) ) - { -/# - println( "ZM >> zone_init aaaa (_zm_zonemgr.gsc) = " + initial_zone[ 0 ] ); -#/ - i = 0; - while ( i < initial_zone.size ) - { - zone_init( initial_zone[ i ] ); - enable_zone( initial_zone[ i ] ); - i++; - } - } - else /# - println( "ZM >> zone_init (_zm_zonemgr.gsc) = " + initial_zone ); -#/ - zone_init( initial_zone ); - enable_zone( initial_zone ); - setup_zone_flag_waits(); - zkeys = getarraykeys( level.zones ); - level.zone_keys = zkeys; - level.newzones = []; - z = 0; - while ( z < zkeys.size ) - { - level.newzones[ zkeys[ z ] ] = spawnstruct(); - z++; - } - flag_set( "zones_initialized" ); - flag_wait( "begin_spawning" ); -/# - level thread _debug_zones(); -#/ - while ( getDvarInt( #"10873CCA" ) == 0 || getDvarInt( #"762F1309" ) != 0 ) - { - z = 0; - while ( z < zkeys.size ) - { - level.newzones[ zkeys[ z ] ].is_active = 0; - level.newzones[ zkeys[ z ] ].is_occupied = 0; - z++; - } - a_zone_is_active = 0; - a_zone_is_spawning_allowed = 0; - level.zone_scanning_active = 1; - z = 0; - while ( z < zkeys.size ) - { - zone = level.zones[ zkeys[ z ] ]; - newzone = level.newzones[ zkeys[ z ] ]; - if ( !zone.is_enabled ) - { - z++; - continue; - } - else - { - if ( isDefined( level.zone_occupied_func ) ) - { - newzone.is_occupied = [[ level.zone_occupied_func ]]( zkeys[ z ] ); - } - else - { - newzone.is_occupied = player_in_zone( zkeys[ z ] ); - } - while ( newzone.is_occupied ) - { - newzone.is_active = 1; - a_zone_is_active = 1; - if ( zone.is_spawning_allowed ) - { - a_zone_is_spawning_allowed = 1; - } - azkeys = getarraykeys( zone.adjacent_zones ); - az = 0; - while ( az < zone.adjacent_zones.size ) - { - if ( zone.adjacent_zones[ azkeys[ az ] ].is_connected && level.zones[ azkeys[ az ] ].is_enabled ) - { - level.newzones[ azkeys[ az ] ].is_active = 1; - if ( level.zones[ azkeys[ az ] ].is_spawning_allowed ) - { - a_zone_is_spawning_allowed = 1; - } - } - az++; - } - } - zone_choke++; - if ( zone_choke >= 3 ) - { - zone_choke = 0; - wait 0,05; - } - } - z++; - } - level.zone_scanning_active = 0; - z = 0; - while ( z < zkeys.size ) - { - level.zones[ zkeys[ z ] ].is_active = level.newzones[ zkeys[ z ] ].is_active; - level.zones[ zkeys[ z ] ].is_occupied = level.newzones[ zkeys[ z ] ].is_occupied; - z++; - } - if ( !a_zone_is_active || !a_zone_is_spawning_allowed ) - { - if ( isarray( initial_zone ) ) - { - level.zones[ initial_zone[ 0 ] ].is_active = 1; - level.zones[ initial_zone[ 0 ] ].is_occupied = 1; - level.zones[ initial_zone[ 0 ] ].is_spawning_allowed = 1; - } - else - { - level.zones[ initial_zone ].is_active = 1; - level.zones[ initial_zone ].is_occupied = 1; - level.zones[ initial_zone ].is_spawning_allowed = 1; - } - } - [[ level.create_spawner_list_func ]]( zkeys ); - level.active_zone_names = maps/mp/zombies/_zm_zonemgr::get_active_zone_names(); - wait 1; - } -} - -old_manage_zones( initial_zone ) -{ -/# - assert( isDefined( initial_zone ), "You must specify an initial zone to manage" ); -#/ - deactivate_initial_barrier_goals(); - spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype(); - i = 0; - while ( i < spawn_points.size ) - { -/# - assert( isDefined( spawn_points[ i ].script_noteworthy ), "player_respawn_point: You must specify a script noteworthy with the zone name" ); -#/ - spawn_points[ i ].locked = 1; - i++; - } - if ( isDefined( level.zone_manager_init_func ) ) - { - [[ level.zone_manager_init_func ]](); - } -/# - println( "ZM >> zone_init bbbb (_zm_zonemgr.gsc) = " + initial_zone.size ); -#/ - if ( isarray( initial_zone ) ) - { -/# - println( "ZM >> zone_init aaaa (_zm_zonemgr.gsc) = " + initial_zone[ 0 ] ); -#/ - i = 0; - while ( i < initial_zone.size ) - { - zone_init( initial_zone[ i ] ); - enable_zone( initial_zone[ i ] ); - i++; - } - } - else /# - println( "ZM >> zone_init (_zm_zonemgr.gsc) = " + initial_zone ); -#/ - zone_init( initial_zone ); - enable_zone( initial_zone ); - setup_zone_flag_waits(); - zkeys = getarraykeys( level.zones ); - level.zone_keys = zkeys; - flag_set( "zones_initialized" ); - flag_wait( "begin_spawning" ); -/# - level thread _debug_zones(); -#/ - while ( getDvarInt( #"10873CCA" ) == 0 || getDvarInt( #"762F1309" ) != 0 ) - { - z = 0; - while ( z < zkeys.size ) - { - level.zones[ zkeys[ z ] ].is_active = 0; - level.zones[ zkeys[ z ] ].is_occupied = 0; - z++; - } - a_zone_is_active = 0; - a_zone_is_spawning_allowed = 0; - z = 0; - while ( z < zkeys.size ) - { - zone = level.zones[ zkeys[ z ] ]; - if ( !zone.is_enabled ) - { - z++; - continue; - } - else - { - if ( isDefined( level.zone_occupied_func ) ) - { - zone.is_occupied = [[ level.zone_occupied_func ]]( zkeys[ z ] ); - } - else - { - zone.is_occupied = player_in_zone( zkeys[ z ] ); - } - while ( zone.is_occupied ) - { - zone.is_active = 1; - a_zone_is_active = 1; - if ( zone.is_spawning_allowed ) - { - a_zone_is_spawning_allowed = 1; - } - azkeys = getarraykeys( zone.adjacent_zones ); - az = 0; - while ( az < zone.adjacent_zones.size ) - { - if ( zone.adjacent_zones[ azkeys[ az ] ].is_connected && level.zones[ azkeys[ az ] ].is_enabled ) - { - level.zones[ azkeys[ az ] ].is_active = 1; - if ( level.zones[ azkeys[ az ] ].is_spawning_allowed ) - { - a_zone_is_spawning_allowed = 1; - } - } - az++; - } - } - } - z++; - } - if ( !a_zone_is_active || !a_zone_is_spawning_allowed ) - { - if ( isarray( initial_zone ) ) - { - level.zones[ initial_zone[ 0 ] ].is_active = 1; - level.zones[ initial_zone[ 0 ] ].is_occupied = 1; - level.zones[ initial_zone[ 0 ] ].is_spawning_allowed = 1; - } - else - { - level.zones[ initial_zone ].is_active = 1; - level.zones[ initial_zone ].is_occupied = 1; - level.zones[ initial_zone ].is_spawning_allowed = 1; - } - } - [[ level.create_spawner_list_func ]]( zkeys ); - level.active_zone_names = maps/mp/zombies/_zm_zonemgr::get_active_zone_names(); - wait 1; - } -} - -create_spawner_list( zkeys ) -{ - level.zombie_spawn_locations = []; - level.inert_locations = []; - level.enemy_dog_locations = []; - level.zombie_screecher_locations = []; - level.zombie_avogadro_locations = []; - level.quad_locations = []; - level.zombie_leaper_locations = []; - level.zombie_ghost_locations = []; - level.zombie_brutus_locations = []; - z = 0; - while ( z < zkeys.size ) - { - zone = level.zones[ zkeys[ z ] ]; - while ( zone.is_enabled && zone.is_active && zone.is_spawning_allowed ) - { - i = 0; - while ( i < zone.spawn_locations.size ) - { - if ( zone.spawn_locations[ i ].is_enabled ) - { - level.zombie_spawn_locations[ level.zombie_spawn_locations.size ] = zone.spawn_locations[ i ]; - } - i++; - } - x = 0; - while ( x < zone.inert_locations.size ) - { - if ( zone.inert_locations[ x ].is_enabled ) - { - level.inert_locations[ level.inert_locations.size ] = zone.inert_locations[ x ]; - } - x++; - } - x = 0; - while ( x < zone.dog_locations.size ) - { - if ( zone.dog_locations[ x ].is_enabled ) - { - level.enemy_dog_locations[ level.enemy_dog_locations.size ] = zone.dog_locations[ x ]; - } - x++; - } - x = 0; - while ( x < zone.screecher_locations.size ) - { - if ( zone.screecher_locations[ x ].is_enabled ) - { - level.zombie_screecher_locations[ level.zombie_screecher_locations.size ] = zone.screecher_locations[ x ]; - } - x++; - } - x = 0; - while ( x < zone.avogadro_locations.size ) - { - if ( zone.avogadro_locations[ x ].is_enabled ) - { - level.zombie_avogadro_locations[ level.zombie_avogadro_locations.size ] = zone.avogadro_locations[ x ]; - } - x++; - } - x = 0; - while ( x < zone.quad_locations.size ) - { - if ( zone.quad_locations[ x ].is_enabled ) - { - level.quad_locations[ level.quad_locations.size ] = zone.quad_locations[ x ]; - } - x++; - } - x = 0; - while ( x < zone.leaper_locations.size ) - { - if ( zone.leaper_locations[ x ].is_enabled ) - { - level.zombie_leaper_locations[ level.zombie_leaper_locations.size ] = zone.leaper_locations[ x ]; - } - x++; - } - x = 0; - while ( x < zone.ghost_locations.size ) - { - if ( zone.ghost_locations[ x ].is_enabled ) - { - level.zombie_ghost_locations[ level.zombie_ghost_locations.size ] = zone.ghost_locations[ x ]; - } - x++; - } - x = 0; - while ( x < zone.brutus_locations.size ) - { - if ( zone.brutus_locations[ x ].is_enabled ) - { - level.zombie_brutus_locations[ level.zombie_brutus_locations.size ] = zone.brutus_locations[ x ]; - } - x++; - } - } - z++; - } -} - -get_active_zone_names() -{ - ret_list = []; - if ( !isDefined( level.zone_keys ) ) - { - return ret_list; - } - while ( level.zone_scanning_active ) - { - wait 0,05; - } - i = 0; - while ( i < level.zone_keys.size ) - { - if ( level.zones[ level.zone_keys[ i ] ].is_active ) - { - ret_list[ ret_list.size ] = level.zone_keys[ i ]; - } - i++; - } - return ret_list; -} - -_init_debug_zones() -{ - current_y = 30; - current_x = 20; - xloc = []; - xloc[ 0 ] = 50; - xloc[ 1 ] = 60; - xloc[ 2 ] = 100; - xloc[ 3 ] = 130; - xloc[ 4 ] = 170; - zkeys = getarraykeys( level.zones ); - i = 0; - while ( i < zkeys.size ) - { - zonename = zkeys[ i ]; - zone = level.zones[ zonename ]; - zone.debug_hud = []; - j = 0; - while ( j < 5 ) - { - zone.debug_hud[ j ] = newdebughudelem(); - if ( !j ) - { - zone.debug_hud[ j ].alignx = "right"; - } - else - { - zone.debug_hud[ j ].alignx = "left"; - } - zone.debug_hud[ j ].x = xloc[ j ]; - zone.debug_hud[ j ].y = current_y; - j++; - } - current_y += 10; - zone.debug_hud[ 0 ] settext( zonename ); - i++; - } -} - -_destroy_debug_zones() -{ - zkeys = getarraykeys( level.zones ); - i = 0; - while ( i < zkeys.size ) - { - zonename = zkeys[ i ]; - zone = level.zones[ zonename ]; - j = 0; - while ( j < 5 ) - { - zone.debug_hud[ j ] destroy(); - j++; - } - i++; - } -} - -_debug_zones() -{ - enabled = 0; - if ( getDvar( "zombiemode_debug_zones" ) == "" ) - { - setdvar( "zombiemode_debug_zones", "0" ); - } - while ( 1 ) - { - wasenabled = enabled; - enabled = getDvarInt( "zombiemode_debug_zones" ); - if ( enabled && !wasenabled ) - { - _init_debug_zones(); - } - else - { - if ( !enabled && wasenabled ) - { - _destroy_debug_zones(); - } - } - while ( enabled ) - { - zkeys = getarraykeys( level.zones ); - i = 0; - while ( i < zkeys.size ) - { - zonename = zkeys[ i ]; - zone = level.zones[ zonename ]; - text = zonename; - zone.debug_hud[ 0 ] settext( text ); - if ( zone.is_enabled ) - { - text += " Enabled"; - zone.debug_hud[ 1 ] settext( "Enabled" ); - } - else - { - zone.debug_hud[ 1 ] settext( "" ); - } - if ( zone.is_active ) - { - text += " Active"; - zone.debug_hud[ 2 ] settext( "Active" ); - } - else - { - zone.debug_hud[ 2 ] settext( "" ); - } - if ( zone.is_occupied ) - { - text += " Occupied"; - zone.debug_hud[ 3 ] settext( "Occupied" ); - } - else - { - zone.debug_hud[ 3 ] settext( "" ); - } - if ( zone.is_spawning_allowed ) - { - text += " SpawningAllowed"; - zone.debug_hud[ 4 ] settext( "SpawningAllowed" ); - } - else - { - zone.debug_hud[ 4 ] settext( "" ); - } -/# - println( "ZM >> DEBUG=" + text ); -#/ - i++; - } - } - wait 0,1; - } -} - -is_player_in_zone( zone_name ) -{ - zone = level.zones[ zone_name ]; - i = 0; - while ( i < zone.volumes.size ) - { - if ( self istouching( level.zones[ zone_name ].volumes[ i ] ) && self.sessionstate != "spectator" ) - { - return 1; - } - i++; - } - return 0; -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/aitype/zm_transit_avogadro.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/aitype/zm_transit_avogadro.gsc deleted file mode 100644 index 30824d6..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/aitype/zm_transit_avogadro.gsc +++ /dev/null @@ -1,118 +0,0 @@ - -#using_animtree( "zm_transit_avogadro" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_avogadro_arrival; - dummy_anim_ref = %ai_zombie_avogadro_exit; - dummy_anim_ref = %ai_zombie_avogadro_bus_attack_back; - dummy_anim_ref = %ai_zombie_avogadro_bus_attack_front; - dummy_anim_ref = %ai_zombie_avogadro_bus_attack_left; - dummy_anim_ref = %ai_zombie_avogadro_bus_attack_right; - dummy_anim_ref = %ai_zombie_avogadro_bus_attack_knocked_off; - dummy_anim_ref = %ai_zombie_avogadro_bus_pain_long; - dummy_anim_ref = %ai_zombie_avogadro_bus_pain_med; - dummy_anim_ref = %ai_zombie_avogadro_bus_pain_short; - dummy_anim_ref = %ai_zombie_avogadro_bus_back_pain_long; - dummy_anim_ref = %ai_zombie_avogadro_bus_back_pain_med; - dummy_anim_ref = %ai_zombie_avogadro_bus_back_pain_short; - dummy_anim_ref = %ai_zombie_avogadro_chamber_idle; - dummy_anim_ref = %ai_zombie_avogadro_chamber_trans_out; - dummy_anim_ref = %ai_zombie_avogadro_idle_v1; - dummy_anim_ref = %ai_zombie_avogadro_melee_attack_v1; - dummy_anim_ref = %ai_zombie_avogadro_pain_long; - dummy_anim_ref = %ai_zombie_avogadro_pain_med; - dummy_anim_ref = %ai_zombie_avogadro_pain_short; - dummy_anim_ref = %ai_zombie_avogadro_ranged_attack_v1; - dummy_anim_ref = %ai_zombie_avogadro_ranged_attack_v1_loop; - dummy_anim_ref = %ai_zombie_avogadro_ranged_attack_v1_end; - dummy_anim_ref = %ai_zombie_avogadro_run_v1; - dummy_anim_ref = %ai_zombie_avogadro_run_v1_twitch; - dummy_anim_ref = %ai_zombie_avogadro_sprint_v1; - dummy_anim_ref = %ai_zombie_avogadro_sprint_v1_twitch; - dummy_anim_ref = %ai_zombie_avogadro_walk_v1; - dummy_anim_ref = %ai_zombie_avogadro_walk_v1_twitch; - dummy_anim_ref = %ai_zombie_avogadro_teleport_forward_long; - dummy_anim_ref = %ai_zombie_avogadro_teleport_forward_med; - dummy_anim_ref = %ai_zombie_avogadro_teleport_forward_short; - dummy_anim_ref = %ai_zombie_avogadro_teleport_left_long; - dummy_anim_ref = %ai_zombie_avogadro_teleport_left_med; - dummy_anim_ref = %ai_zombie_avogadro_teleport_left_short; - dummy_anim_ref = %ai_zombie_avogadro_teleport_right_long; - dummy_anim_ref = %ai_zombie_avogadro_teleport_right_med; - dummy_anim_ref = %ai_zombie_avogadro_teleport_right_short; - dummy_anim_ref = %ai_zombie_avogadro_teleport_back_long; - dummy_anim_ref = %ai_zombie_avogadro_teleport_back_med; - dummy_anim_ref = %ai_zombie_avogadro_teleport_back_short; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_climb_down_pothole; - dummy_anim_ref = %ai_zombie_climb_up_pothole; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_avogadro_jump_across_120; - dummy_anim_ref = %ai_zombie_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_traverse_garage_roll; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_from_stools; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_car; - dummy_anim_ref = %ai_zombie_traverse_car_sprint; - dummy_anim_ref = %ai_zombie_traverse_car_run; - dummy_anim_ref = %ai_zombie_traverse_car_pass_to_driver_side; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_transit_avogadro.asd"; - self.animtree = "zm_transit_avogadro.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 70; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_avogadro::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_transit_avogadro" ); - character/c_zom_avogadro::precache(); -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/aitype/zm_transit_basic_01.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/aitype/zm_transit_basic_01.gsc deleted file mode 100644 index 0356f22..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/aitype/zm_transit_basic_01.gsc +++ /dev/null @@ -1,490 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_transit_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_v4; - dummy_anim_ref = %ai_zombie_inert_v6; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_inert_2_awake_v6; - dummy_anim_ref = %ai_zombie_inert_2_awake_v7; - dummy_anim_ref = %ai_zombie_inert_2_awake_v8; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_climb_down_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_down_pothole; - dummy_anim_ref = %ai_zombie_climb_up_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_up_pothole; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_stumble_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_stumble_90; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_stumble_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_jump_down_stumble_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_stumble_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_crawl_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_traverse_garage_roll; - dummy_anim_ref = %ai_zombie_crawl_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_from_stools; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_from_stools; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_car; - dummy_anim_ref = %ai_zombie_crawl_traverse_car; - dummy_anim_ref = %ai_zombie_traverse_car_pass_to_driver_side; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_run; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_sprint; - dummy_anim_ref = %ai_zombie_traverse_car_sprint; - dummy_anim_ref = %ai_zombie_traverse_car_run; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side_sprint; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_walk_bus_v1; - dummy_anim_ref = %ai_zombie_walk_bus_v2; - dummy_anim_ref = %ai_zombie_walk_bus_v3; - dummy_anim_ref = %ai_zombie_walk_bus_v4; - dummy_anim_ref = %ai_zombie_bus_jump_door; - dummy_anim_ref = %ai_zombie_bus_jump_door_exit; - dummy_anim_ref = %ai_zombie_bus_jump_window_to_l; - dummy_anim_ref = %ai_zombie_bus_jump_window_to_r; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_l; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_r; - dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_l; - dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_r; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_l; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_r; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1_fast; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1_fast; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1_fast; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1_fast; - dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_v1; - dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_fast_v1; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_pull; - dummy_anim_ref = %ai_zombie_bus_hatch_tear; - dummy_anim_ref = %ai_zombie_bus_hatch_tear_fromback; - dummy_anim_ref = %ai_zombie_bus_hatch_jump_down; - dummy_anim_ref = %ai_zombie_bus_window_idle_l; - dummy_anim_ref = %ai_zombie_bus_window_idle_r; - dummy_anim_ref = %ai_zombie_bus_front_window_idle_l; - dummy_anim_ref = %ai_zombie_bus_front_window_idle_r; - dummy_anim_ref = %ai_zombie_bus_window_attack_l; - dummy_anim_ref = %ai_zombie_bus_window_attack_r; - dummy_anim_ref = %ai_zombie_bus_front_window_attack_l; - dummy_anim_ref = %ai_zombie_bus_front_window_attack_r; - dummy_anim_ref = %ai_zombie_bus_window_climbup_from_l; - dummy_anim_ref = %ai_zombie_bus_window_climbup_from_r; - dummy_anim_ref = %ai_zombie_bus_window_dismount_l; - dummy_anim_ref = %ai_zombie_bus_window_dismount_r; - dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_l; - dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_r; - dummy_anim_ref = %ai_zombie_bus_front_window_dismount_l; - dummy_anim_ref = %ai_zombie_bus_front_window_dismount_r; - dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_l; - dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_r; - dummy_anim_ref = %ai_zombie_bus_window_exit_back_l; - dummy_anim_ref = %ai_zombie_bus_window_exit_back_r; - dummy_anim_ref = %ai_zombie_bus_window_exit_front; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_l; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_r; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_front; - dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_b; - dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_f; - dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_b; - dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_f; - dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_b; - dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_f; - dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_b; - dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_f; - dummy_anim_ref = %ai_zombie_bus_front_window_climbup_from_inside; - dummy_anim_ref = %ai_zombie_bus_rear_window_climbup_from_inside; - dummy_anim_ref = %ai_zombie_sprint_v6; - dummy_anim_ref = %ai_zombie_sprint_v7; - dummy_anim_ref = %ai_zombie_sprint_v8; - dummy_anim_ref = %ai_zombie_sprint_v9; - dummy_anim_ref = %ai_zombie_sprint_v10; - dummy_anim_ref = %ai_zombie_sprint_v11; - dummy_anim_ref = %ai_zombie_sprint_v12; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v3; - dummy_anim_ref = %ai_zombie_jetgun_walk_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_v3; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v3; - dummy_anim_ref = %ai_zombie_jetgun_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_death_v3; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v1; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v2; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v3; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v3; - dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v3; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v3; - dummy_anim_ref = %ai_zombie_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_riotshield_breakthrough_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_breakthrough_v1; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_transit_basic.asd"; - self.animtree = "zm_transit_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 2 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie1_01::main(); - break; - case 1: - character/c_zom_zombie1_02::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_transit_basic" ); - character/c_zom_zombie1_01::precache(); - character/c_zom_zombie1_02::precache(); -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/aitype/zm_transit_basic_02.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/aitype/zm_transit_basic_02.gsc deleted file mode 100644 index d8ef350..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/aitype/zm_transit_basic_02.gsc +++ /dev/null @@ -1,494 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_transit_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_v4; - dummy_anim_ref = %ai_zombie_inert_v6; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_inert_2_awake_v6; - dummy_anim_ref = %ai_zombie_inert_2_awake_v7; - dummy_anim_ref = %ai_zombie_inert_2_awake_v8; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_climb_down_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_down_pothole; - dummy_anim_ref = %ai_zombie_climb_up_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_up_pothole; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_stumble_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_stumble_90; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_stumble_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_jump_down_stumble_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_stumble_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_crawl_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_traverse_garage_roll; - dummy_anim_ref = %ai_zombie_crawl_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_from_stools; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_from_stools; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_car; - dummy_anim_ref = %ai_zombie_crawl_traverse_car; - dummy_anim_ref = %ai_zombie_traverse_car_pass_to_driver_side; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_run; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_sprint; - dummy_anim_ref = %ai_zombie_traverse_car_sprint; - dummy_anim_ref = %ai_zombie_traverse_car_run; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side_sprint; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_walk_bus_v1; - dummy_anim_ref = %ai_zombie_walk_bus_v2; - dummy_anim_ref = %ai_zombie_walk_bus_v3; - dummy_anim_ref = %ai_zombie_walk_bus_v4; - dummy_anim_ref = %ai_zombie_bus_jump_door; - dummy_anim_ref = %ai_zombie_bus_jump_door_exit; - dummy_anim_ref = %ai_zombie_bus_jump_window_to_l; - dummy_anim_ref = %ai_zombie_bus_jump_window_to_r; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_l; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_r; - dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_l; - dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_r; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_l; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_r; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1_fast; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1_fast; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1_fast; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1_fast; - dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_v1; - dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_fast_v1; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_pull; - dummy_anim_ref = %ai_zombie_bus_hatch_tear; - dummy_anim_ref = %ai_zombie_bus_hatch_tear_fromback; - dummy_anim_ref = %ai_zombie_bus_hatch_jump_down; - dummy_anim_ref = %ai_zombie_bus_window_idle_l; - dummy_anim_ref = %ai_zombie_bus_window_idle_r; - dummy_anim_ref = %ai_zombie_bus_front_window_idle_l; - dummy_anim_ref = %ai_zombie_bus_front_window_idle_r; - dummy_anim_ref = %ai_zombie_bus_window_attack_l; - dummy_anim_ref = %ai_zombie_bus_window_attack_r; - dummy_anim_ref = %ai_zombie_bus_front_window_attack_l; - dummy_anim_ref = %ai_zombie_bus_front_window_attack_r; - dummy_anim_ref = %ai_zombie_bus_window_climbup_from_l; - dummy_anim_ref = %ai_zombie_bus_window_climbup_from_r; - dummy_anim_ref = %ai_zombie_bus_window_dismount_l; - dummy_anim_ref = %ai_zombie_bus_window_dismount_r; - dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_l; - dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_r; - dummy_anim_ref = %ai_zombie_bus_front_window_dismount_l; - dummy_anim_ref = %ai_zombie_bus_front_window_dismount_r; - dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_l; - dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_r; - dummy_anim_ref = %ai_zombie_bus_window_exit_back_l; - dummy_anim_ref = %ai_zombie_bus_window_exit_back_r; - dummy_anim_ref = %ai_zombie_bus_window_exit_front; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_l; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_r; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_front; - dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_b; - dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_f; - dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_b; - dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_f; - dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_b; - dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_f; - dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_b; - dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_f; - dummy_anim_ref = %ai_zombie_bus_front_window_climbup_from_inside; - dummy_anim_ref = %ai_zombie_bus_rear_window_climbup_from_inside; - dummy_anim_ref = %ai_zombie_sprint_v6; - dummy_anim_ref = %ai_zombie_sprint_v7; - dummy_anim_ref = %ai_zombie_sprint_v8; - dummy_anim_ref = %ai_zombie_sprint_v9; - dummy_anim_ref = %ai_zombie_sprint_v10; - dummy_anim_ref = %ai_zombie_sprint_v11; - dummy_anim_ref = %ai_zombie_sprint_v12; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v3; - dummy_anim_ref = %ai_zombie_jetgun_walk_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_v3; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v3; - dummy_anim_ref = %ai_zombie_jetgun_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_death_v3; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v1; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v2; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v3; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v3; - dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v3; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v3; - dummy_anim_ref = %ai_zombie_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_riotshield_breakthrough_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_breakthrough_v1; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_transit_basic.asd"; - self.animtree = "zm_transit_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 3 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie2_01::main(); - break; - case 1: - character/c_zom_zombie2_02::main(); - break; - case 2: - character/c_zom_zombie2_03::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_transit_basic" ); - character/c_zom_zombie2_01::precache(); - character/c_zom_zombie2_02::precache(); - character/c_zom_zombie2_03::precache(); -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/aitype/zm_transit_basic_03.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/aitype/zm_transit_basic_03.gsc deleted file mode 100644 index ba63097..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/aitype/zm_transit_basic_03.gsc +++ /dev/null @@ -1,502 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_transit_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_v4; - dummy_anim_ref = %ai_zombie_inert_v6; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_inert_2_awake_v6; - dummy_anim_ref = %ai_zombie_inert_2_awake_v7; - dummy_anim_ref = %ai_zombie_inert_2_awake_v8; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_climb_down_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_down_pothole; - dummy_anim_ref = %ai_zombie_climb_up_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_up_pothole; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_stumble_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_stumble_90; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_stumble_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_jump_down_stumble_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_stumble_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_crawl_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_traverse_garage_roll; - dummy_anim_ref = %ai_zombie_crawl_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_from_stools; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_from_stools; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_car; - dummy_anim_ref = %ai_zombie_crawl_traverse_car; - dummy_anim_ref = %ai_zombie_traverse_car_pass_to_driver_side; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_run; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_sprint; - dummy_anim_ref = %ai_zombie_traverse_car_sprint; - dummy_anim_ref = %ai_zombie_traverse_car_run; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side_sprint; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_walk_bus_v1; - dummy_anim_ref = %ai_zombie_walk_bus_v2; - dummy_anim_ref = %ai_zombie_walk_bus_v3; - dummy_anim_ref = %ai_zombie_walk_bus_v4; - dummy_anim_ref = %ai_zombie_bus_jump_door; - dummy_anim_ref = %ai_zombie_bus_jump_door_exit; - dummy_anim_ref = %ai_zombie_bus_jump_window_to_l; - dummy_anim_ref = %ai_zombie_bus_jump_window_to_r; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_l; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_r; - dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_l; - dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_r; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_l; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_r; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1_fast; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1_fast; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1_fast; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1_fast; - dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_v1; - dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_fast_v1; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_pull; - dummy_anim_ref = %ai_zombie_bus_hatch_tear; - dummy_anim_ref = %ai_zombie_bus_hatch_tear_fromback; - dummy_anim_ref = %ai_zombie_bus_hatch_jump_down; - dummy_anim_ref = %ai_zombie_bus_window_idle_l; - dummy_anim_ref = %ai_zombie_bus_window_idle_r; - dummy_anim_ref = %ai_zombie_bus_front_window_idle_l; - dummy_anim_ref = %ai_zombie_bus_front_window_idle_r; - dummy_anim_ref = %ai_zombie_bus_window_attack_l; - dummy_anim_ref = %ai_zombie_bus_window_attack_r; - dummy_anim_ref = %ai_zombie_bus_front_window_attack_l; - dummy_anim_ref = %ai_zombie_bus_front_window_attack_r; - dummy_anim_ref = %ai_zombie_bus_window_climbup_from_l; - dummy_anim_ref = %ai_zombie_bus_window_climbup_from_r; - dummy_anim_ref = %ai_zombie_bus_window_dismount_l; - dummy_anim_ref = %ai_zombie_bus_window_dismount_r; - dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_l; - dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_r; - dummy_anim_ref = %ai_zombie_bus_front_window_dismount_l; - dummy_anim_ref = %ai_zombie_bus_front_window_dismount_r; - dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_l; - dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_r; - dummy_anim_ref = %ai_zombie_bus_window_exit_back_l; - dummy_anim_ref = %ai_zombie_bus_window_exit_back_r; - dummy_anim_ref = %ai_zombie_bus_window_exit_front; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_l; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_r; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_front; - dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_b; - dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_f; - dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_b; - dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_f; - dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_b; - dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_f; - dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_b; - dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_f; - dummy_anim_ref = %ai_zombie_bus_front_window_climbup_from_inside; - dummy_anim_ref = %ai_zombie_bus_rear_window_climbup_from_inside; - dummy_anim_ref = %ai_zombie_sprint_v6; - dummy_anim_ref = %ai_zombie_sprint_v7; - dummy_anim_ref = %ai_zombie_sprint_v8; - dummy_anim_ref = %ai_zombie_sprint_v9; - dummy_anim_ref = %ai_zombie_sprint_v10; - dummy_anim_ref = %ai_zombie_sprint_v11; - dummy_anim_ref = %ai_zombie_sprint_v12; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v3; - dummy_anim_ref = %ai_zombie_jetgun_walk_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_v3; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v3; - dummy_anim_ref = %ai_zombie_jetgun_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_death_v3; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v1; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v2; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v3; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v3; - dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v3; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v3; - dummy_anim_ref = %ai_zombie_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_riotshield_breakthrough_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_breakthrough_v1; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_transit_basic.asd"; - self.animtree = "zm_transit_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 5 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie3_01::main(); - break; - case 1: - character/c_zom_zombie3_02::main(); - break; - case 2: - character/c_zom_zombie3_03::main(); - break; - case 3: - character/c_zom_zombie3_04::main(); - break; - case 4: - character/c_zom_zombie3_05::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_transit_basic" ); - character/c_zom_zombie3_01::precache(); - character/c_zom_zombie3_02::precache(); - character/c_zom_zombie3_03::precache(); - character/c_zom_zombie3_04::precache(); - character/c_zom_zombie3_05::precache(); -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/aitype/zm_transit_screecher.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/aitype/zm_transit_screecher.gsc deleted file mode 100644 index 4c1a1af..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/aitype/zm_transit_screecher.gsc +++ /dev/null @@ -1,75 +0,0 @@ - -#using_animtree( "zm_transit_screecher" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_screecher_burrow_into_ground; - dummy_anim_ref = %ai_zombie_screecher_climb_down_pothole; - dummy_anim_ref = %ai_zombie_screecher_climb_up_pothole; - dummy_anim_ref = %ai_zombie_screecher_cower_v1; - dummy_anim_ref = %ai_zombie_screecher_death_v1; - dummy_anim_ref = %ai_zombie_screecher_headpull; - dummy_anim_ref = %ai_zombie_screecher_headpull_fail; - dummy_anim_ref = %ai_zombie_screecher_headpull_success; - dummy_anim_ref = %ai_zombie_screecher_jump_land_fail; - dummy_anim_ref = %ai_zombie_screecher_jump_land_success_fromback; - dummy_anim_ref = %ai_zombie_screecher_jump_land_success_fromfront; - dummy_anim_ref = %ai_zombie_screecher_jump_loop; - dummy_anim_ref = %ai_zombie_screecher_jump_up; - dummy_anim_ref = %ai_zombie_screecher_run; - dummy_anim_ref = %ai_zombie_screecher_run_bounce; - dummy_anim_ref = %ai_zombie_screecher_run_hop; - dummy_anim_ref = %ai_zombie_screecher_run_zigzag; - dummy_anim_ref = %ai_zombie_screecher_tunnel_traversal; - dummy_anim_ref = %ai_zombie_screecher_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_screecher_traverse_car; - dummy_anim_ref = %ai_zombie_screecher_traverse_car_pass_to_driver_side; - dummy_anim_ref = %ai_zombie_screecher_traverse_ground_v1; - dummy_anim_ref = %ai_zombie_screecher_jump_down_96; - dummy_anim_ref = %ai_zombie_screecher_jump_down_127; - dummy_anim_ref = %ai_zombie_screecher_jump_up_127; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_transit_screecher.asd"; - self.animtree = "zm_transit_screecher.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 18; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - character/c_zom_screecher::main(); - self setcharacterindex( 0 ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_transit_screecher" ); - character/c_zom_screecher::precache(); -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_transit_player_engineer.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_transit_player_engineer.gsc deleted file mode 100644 index b123803..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_transit_player_engineer.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_engineer_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_engineer_fb" ); -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_transit_player_farmgirl.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_transit_player_farmgirl.gsc deleted file mode 100644 index 05c38e9..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_transit_player_farmgirl.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_farmgirl_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_farmgirl_fb" ); -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_transit_player_oldman.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_transit_player_oldman.gsc deleted file mode 100644 index 5d5f2c5..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_transit_player_oldman.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_oldman_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_oldman_fb" ); -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_transit_player_reporter.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_transit_player_reporter.gsc deleted file mode 100644 index 71e8021..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_transit_player_reporter.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_reporter_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_reporter_fb" ); -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_avogadro.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_avogadro.gsc deleted file mode 100644 index d725aab..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_avogadro.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_avagadro_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_avagadro_fb" ); -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_screecher.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_screecher.gsc deleted file mode 100644 index bc79566..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_screecher.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_screecher_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_screecher_fb" ); -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie1_01.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie1_01.gsc deleted file mode 100644 index de7fc13..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie1_01.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie1_body01" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie1_body01_g_upclean"; - self.torsodmg2 = "c_zom_zombie1_body01_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie1_body01_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie1_body01_g_lowclean"; - self.legdmg2 = "c_zom_zombie1_body01_g_rlegoff"; - self.legdmg3 = "c_zom_zombie1_body01_g_llegoff"; - self.legdmg4 = "c_zom_zombie1_body01_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie1_body01" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie1_body01_g_upclean" ); - precachemodel( "c_zom_zombie1_body01_g_rarmoff" ); - precachemodel( "c_zom_zombie1_body01_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie1_body01_g_lowclean" ); - precachemodel( "c_zom_zombie1_body01_g_rlegoff" ); - precachemodel( "c_zom_zombie1_body01_g_llegoff" ); - precachemodel( "c_zom_zombie1_body01_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie_g_rlegspawn" ); - precachemodel( "c_zom_zombie_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie1_02.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie1_02.gsc deleted file mode 100644 index 09fc308..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie1_02.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie1_body02" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie1_body02_g_upclean"; - self.torsodmg2 = "c_zom_zombie1_body02_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie1_body02_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie1_body02_g_lowclean"; - self.legdmg2 = "c_zom_zombie1_body02_g_rlegoff"; - self.legdmg3 = "c_zom_zombie1_body02_g_llegoff"; - self.legdmg4 = "c_zom_zombie1_body02_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie1_body02" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie1_body02_g_upclean" ); - precachemodel( "c_zom_zombie1_body02_g_rarmoff" ); - precachemodel( "c_zom_zombie1_body02_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie1_body02_g_lowclean" ); - precachemodel( "c_zom_zombie1_body02_g_rlegoff" ); - precachemodel( "c_zom_zombie1_body02_g_llegoff" ); - precachemodel( "c_zom_zombie1_body02_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie_g_rlegspawn" ); - precachemodel( "c_zom_zombie_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie2_01.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie2_01.gsc deleted file mode 100644 index 4fbc19a..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie2_01.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie2_body01" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie2_body01_g_upclean"; - self.torsodmg2 = "c_zom_zombie2_body01_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie2_body01_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie2_body01_g_lowclean"; - self.legdmg2 = "c_zom_zombie2_body01_g_rlegoff"; - self.legdmg3 = "c_zom_zombie2_body01_g_llegoff"; - self.legdmg4 = "c_zom_zombie2_body01_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie2_body01" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie2_body01_g_upclean" ); - precachemodel( "c_zom_zombie2_body01_g_rarmoff" ); - precachemodel( "c_zom_zombie2_body01_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie2_body01_g_lowclean" ); - precachemodel( "c_zom_zombie2_body01_g_rlegoff" ); - precachemodel( "c_zom_zombie2_body01_g_llegoff" ); - precachemodel( "c_zom_zombie2_body01_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie_g_rlegspawn" ); - precachemodel( "c_zom_zombie_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie2_02.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie2_02.gsc deleted file mode 100644 index 4c10218..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie2_02.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie2_body02" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie2_body02_g_upclean"; - self.torsodmg2 = "c_zom_zombie2_body02_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie2_body02_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie2_body01_g_lowclean"; - self.legdmg2 = "c_zom_zombie2_body01_g_rlegoff"; - self.legdmg3 = "c_zom_zombie2_body01_g_llegoff"; - self.legdmg4 = "c_zom_zombie2_body01_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie2_body02" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie2_body02_g_upclean" ); - precachemodel( "c_zom_zombie2_body02_g_rarmoff" ); - precachemodel( "c_zom_zombie2_body02_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie2_body01_g_lowclean" ); - precachemodel( "c_zom_zombie2_body01_g_rlegoff" ); - precachemodel( "c_zom_zombie2_body01_g_llegoff" ); - precachemodel( "c_zom_zombie2_body01_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie_g_rlegspawn" ); - precachemodel( "c_zom_zombie_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie2_03.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie2_03.gsc deleted file mode 100644 index 62de923..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie2_03.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie2_body03" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie2_body03_g_upclean"; - self.torsodmg2 = "c_zom_zombie2_body03_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie2_body03_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie2_body01_g_lowclean"; - self.legdmg2 = "c_zom_zombie2_body01_g_rlegoff"; - self.legdmg3 = "c_zom_zombie2_body01_g_llegoff"; - self.legdmg4 = "c_zom_zombie2_body01_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie2_body03" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie2_body03_g_upclean" ); - precachemodel( "c_zom_zombie2_body03_g_rarmoff" ); - precachemodel( "c_zom_zombie2_body03_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie2_body01_g_lowclean" ); - precachemodel( "c_zom_zombie2_body01_g_rlegoff" ); - precachemodel( "c_zom_zombie2_body01_g_llegoff" ); - precachemodel( "c_zom_zombie2_body01_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie_g_rlegspawn" ); - precachemodel( "c_zom_zombie_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie3_01.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie3_01.gsc deleted file mode 100644 index 690bc95..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie3_01.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie3_body01" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie3_body01_g_upclean"; - self.torsodmg2 = "c_zom_zombie3_body01_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie3_body01_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie3_body01_g_lowclean"; - self.legdmg2 = "c_zom_zombie3_body01_g_rlegoff"; - self.legdmg3 = "c_zom_zombie3_body01_g_llegoff"; - self.legdmg4 = "c_zom_zombie3_body01_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie3_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie3_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie3_body01" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie3_body01_g_upclean" ); - precachemodel( "c_zom_zombie3_body01_g_rarmoff" ); - precachemodel( "c_zom_zombie3_body01_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie3_body01_g_lowclean" ); - precachemodel( "c_zom_zombie3_body01_g_rlegoff" ); - precachemodel( "c_zom_zombie3_body01_g_llegoff" ); - precachemodel( "c_zom_zombie3_body01_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie3_g_rlegspawn" ); - precachemodel( "c_zom_zombie3_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie3_02.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie3_02.gsc deleted file mode 100644 index c28b86a..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie3_02.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie3_body02" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie3_body02_g_upclean"; - self.torsodmg2 = "c_zom_zombie3_body02_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie3_body02_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie3_body02_g_lowclean"; - self.legdmg2 = "c_zom_zombie3_body02_g_rlegoff"; - self.legdmg3 = "c_zom_zombie3_body02_g_llegoff"; - self.legdmg4 = "c_zom_zombie3_body02_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie3_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie3_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie3_body02" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie3_body02_g_upclean" ); - precachemodel( "c_zom_zombie3_body02_g_rarmoff" ); - precachemodel( "c_zom_zombie3_body02_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie3_body02_g_lowclean" ); - precachemodel( "c_zom_zombie3_body02_g_rlegoff" ); - precachemodel( "c_zom_zombie3_body02_g_llegoff" ); - precachemodel( "c_zom_zombie3_body02_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie3_g_rlegspawn" ); - precachemodel( "c_zom_zombie3_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie3_03.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie3_03.gsc deleted file mode 100644 index 467dfb5..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie3_03.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie3_body03" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie3_body03_g_upclean"; - self.torsodmg2 = "c_zom_zombie3_body03_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie3_body03_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie3_body03_g_lowclean"; - self.legdmg2 = "c_zom_zombie3_body03_g_rlegoff"; - self.legdmg3 = "c_zom_zombie3_body03_g_llegoff"; - self.legdmg4 = "c_zom_zombie3_body03_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie3_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie3_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie3_body03" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie3_body03_g_upclean" ); - precachemodel( "c_zom_zombie3_body03_g_rarmoff" ); - precachemodel( "c_zom_zombie3_body03_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie3_body03_g_lowclean" ); - precachemodel( "c_zom_zombie3_body03_g_rlegoff" ); - precachemodel( "c_zom_zombie3_body03_g_llegoff" ); - precachemodel( "c_zom_zombie3_body03_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie3_g_rlegspawn" ); - precachemodel( "c_zom_zombie3_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie3_04.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie3_04.gsc deleted file mode 100644 index ee42a38..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie3_04.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie3_body04" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie3_body04_g_upclean"; - self.torsodmg2 = "c_zom_zombie3_body04_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie3_body04_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie3_body04_g_lowclean"; - self.legdmg2 = "c_zom_zombie3_body04_g_rlegoff"; - self.legdmg3 = "c_zom_zombie3_body04_g_llegoff"; - self.legdmg4 = "c_zom_zombie3_body04_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie3_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie3_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie3_body04" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie3_body04_g_upclean" ); - precachemodel( "c_zom_zombie3_body04_g_rarmoff" ); - precachemodel( "c_zom_zombie3_body04_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie3_body04_g_lowclean" ); - precachemodel( "c_zom_zombie3_body04_g_rlegoff" ); - precachemodel( "c_zom_zombie3_body04_g_llegoff" ); - precachemodel( "c_zom_zombie3_body04_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie3_g_rlegspawn" ); - precachemodel( "c_zom_zombie3_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie3_05.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie3_05.gsc deleted file mode 100644 index 7c418c9..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/character/c_zom_zombie3_05.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie3_body05" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie3_body05_g_upclean"; - self.torsodmg2 = "c_zom_zombie3_body05_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie3_body05_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie3_body05_g_lowclean"; - self.legdmg2 = "c_zom_zombie3_body05_g_rlegoff"; - self.legdmg3 = "c_zom_zombie3_body05_g_llegoff"; - self.legdmg4 = "c_zom_zombie3_body05_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie3_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie3_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie3_body05" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie3_body05_g_upclean" ); - precachemodel( "c_zom_zombie3_body05_g_rarmoff" ); - precachemodel( "c_zom_zombie3_body05_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie3_body05_g_lowclean" ); - precachemodel( "c_zom_zombie3_body05_g_rlegoff" ); - precachemodel( "c_zom_zombie3_body05_g_llegoff" ); - precachemodel( "c_zom_zombie3_body05_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie3_g_rlegspawn" ); - precachemodel( "c_zom_zombie3_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zclassic_zm_transit/xmodelalias/c_zom_zombie_head_als.gsc b/Zombie Maps/Tranzit/so_zclassic_zm_transit/xmodelalias/c_zom_zombie_head_als.gsc deleted file mode 100644 index 6aeadb2..0000000 --- a/Zombie Maps/Tranzit/so_zclassic_zm_transit/xmodelalias/c_zom_zombie_head_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_head_k"; - a[ 1 ] = "c_zom_zombie_head_l"; - a[ 2 ] = "c_zom_zombie_head_n"; - a[ 3 ] = "c_zom_zombie_head_a"; - return a; -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/aitype/zm_transit_basic_01.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/aitype/zm_transit_basic_01.gsc deleted file mode 100644 index 0356f22..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/aitype/zm_transit_basic_01.gsc +++ /dev/null @@ -1,490 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_transit_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_v4; - dummy_anim_ref = %ai_zombie_inert_v6; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_inert_2_awake_v6; - dummy_anim_ref = %ai_zombie_inert_2_awake_v7; - dummy_anim_ref = %ai_zombie_inert_2_awake_v8; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_climb_down_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_down_pothole; - dummy_anim_ref = %ai_zombie_climb_up_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_up_pothole; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_stumble_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_stumble_90; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_stumble_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_jump_down_stumble_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_stumble_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_crawl_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_traverse_garage_roll; - dummy_anim_ref = %ai_zombie_crawl_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_from_stools; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_from_stools; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_car; - dummy_anim_ref = %ai_zombie_crawl_traverse_car; - dummy_anim_ref = %ai_zombie_traverse_car_pass_to_driver_side; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_run; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_sprint; - dummy_anim_ref = %ai_zombie_traverse_car_sprint; - dummy_anim_ref = %ai_zombie_traverse_car_run; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side_sprint; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_walk_bus_v1; - dummy_anim_ref = %ai_zombie_walk_bus_v2; - dummy_anim_ref = %ai_zombie_walk_bus_v3; - dummy_anim_ref = %ai_zombie_walk_bus_v4; - dummy_anim_ref = %ai_zombie_bus_jump_door; - dummy_anim_ref = %ai_zombie_bus_jump_door_exit; - dummy_anim_ref = %ai_zombie_bus_jump_window_to_l; - dummy_anim_ref = %ai_zombie_bus_jump_window_to_r; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_l; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_r; - dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_l; - dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_r; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_l; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_r; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1_fast; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1_fast; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1_fast; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1_fast; - dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_v1; - dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_fast_v1; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_pull; - dummy_anim_ref = %ai_zombie_bus_hatch_tear; - dummy_anim_ref = %ai_zombie_bus_hatch_tear_fromback; - dummy_anim_ref = %ai_zombie_bus_hatch_jump_down; - dummy_anim_ref = %ai_zombie_bus_window_idle_l; - dummy_anim_ref = %ai_zombie_bus_window_idle_r; - dummy_anim_ref = %ai_zombie_bus_front_window_idle_l; - dummy_anim_ref = %ai_zombie_bus_front_window_idle_r; - dummy_anim_ref = %ai_zombie_bus_window_attack_l; - dummy_anim_ref = %ai_zombie_bus_window_attack_r; - dummy_anim_ref = %ai_zombie_bus_front_window_attack_l; - dummy_anim_ref = %ai_zombie_bus_front_window_attack_r; - dummy_anim_ref = %ai_zombie_bus_window_climbup_from_l; - dummy_anim_ref = %ai_zombie_bus_window_climbup_from_r; - dummy_anim_ref = %ai_zombie_bus_window_dismount_l; - dummy_anim_ref = %ai_zombie_bus_window_dismount_r; - dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_l; - dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_r; - dummy_anim_ref = %ai_zombie_bus_front_window_dismount_l; - dummy_anim_ref = %ai_zombie_bus_front_window_dismount_r; - dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_l; - dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_r; - dummy_anim_ref = %ai_zombie_bus_window_exit_back_l; - dummy_anim_ref = %ai_zombie_bus_window_exit_back_r; - dummy_anim_ref = %ai_zombie_bus_window_exit_front; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_l; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_r; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_front; - dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_b; - dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_f; - dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_b; - dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_f; - dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_b; - dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_f; - dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_b; - dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_f; - dummy_anim_ref = %ai_zombie_bus_front_window_climbup_from_inside; - dummy_anim_ref = %ai_zombie_bus_rear_window_climbup_from_inside; - dummy_anim_ref = %ai_zombie_sprint_v6; - dummy_anim_ref = %ai_zombie_sprint_v7; - dummy_anim_ref = %ai_zombie_sprint_v8; - dummy_anim_ref = %ai_zombie_sprint_v9; - dummy_anim_ref = %ai_zombie_sprint_v10; - dummy_anim_ref = %ai_zombie_sprint_v11; - dummy_anim_ref = %ai_zombie_sprint_v12; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v3; - dummy_anim_ref = %ai_zombie_jetgun_walk_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_v3; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v3; - dummy_anim_ref = %ai_zombie_jetgun_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_death_v3; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v1; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v2; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v3; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v3; - dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v3; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v3; - dummy_anim_ref = %ai_zombie_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_riotshield_breakthrough_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_breakthrough_v1; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_transit_basic.asd"; - self.animtree = "zm_transit_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 2 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie1_01::main(); - break; - case 1: - character/c_zom_zombie1_02::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_transit_basic" ); - character/c_zom_zombie1_01::precache(); - character/c_zom_zombie1_02::precache(); -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/aitype/zm_transit_basic_03.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/aitype/zm_transit_basic_03.gsc deleted file mode 100644 index ba63097..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/aitype/zm_transit_basic_03.gsc +++ /dev/null @@ -1,502 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_transit_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_v4; - dummy_anim_ref = %ai_zombie_inert_v6; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_inert_2_awake_v6; - dummy_anim_ref = %ai_zombie_inert_2_awake_v7; - dummy_anim_ref = %ai_zombie_inert_2_awake_v8; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_climb_down_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_down_pothole; - dummy_anim_ref = %ai_zombie_climb_up_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_up_pothole; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_stumble_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_stumble_90; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_stumble_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_jump_down_stumble_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_stumble_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_crawl_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_traverse_garage_roll; - dummy_anim_ref = %ai_zombie_crawl_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_from_stools; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_from_stools; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_car; - dummy_anim_ref = %ai_zombie_crawl_traverse_car; - dummy_anim_ref = %ai_zombie_traverse_car_pass_to_driver_side; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_run; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_sprint; - dummy_anim_ref = %ai_zombie_traverse_car_sprint; - dummy_anim_ref = %ai_zombie_traverse_car_run; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side_sprint; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_walk_bus_v1; - dummy_anim_ref = %ai_zombie_walk_bus_v2; - dummy_anim_ref = %ai_zombie_walk_bus_v3; - dummy_anim_ref = %ai_zombie_walk_bus_v4; - dummy_anim_ref = %ai_zombie_bus_jump_door; - dummy_anim_ref = %ai_zombie_bus_jump_door_exit; - dummy_anim_ref = %ai_zombie_bus_jump_window_to_l; - dummy_anim_ref = %ai_zombie_bus_jump_window_to_r; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_l; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_r; - dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_l; - dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_r; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_l; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_r; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1_fast; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1_fast; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1_fast; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1_fast; - dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_v1; - dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_fast_v1; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_pull; - dummy_anim_ref = %ai_zombie_bus_hatch_tear; - dummy_anim_ref = %ai_zombie_bus_hatch_tear_fromback; - dummy_anim_ref = %ai_zombie_bus_hatch_jump_down; - dummy_anim_ref = %ai_zombie_bus_window_idle_l; - dummy_anim_ref = %ai_zombie_bus_window_idle_r; - dummy_anim_ref = %ai_zombie_bus_front_window_idle_l; - dummy_anim_ref = %ai_zombie_bus_front_window_idle_r; - dummy_anim_ref = %ai_zombie_bus_window_attack_l; - dummy_anim_ref = %ai_zombie_bus_window_attack_r; - dummy_anim_ref = %ai_zombie_bus_front_window_attack_l; - dummy_anim_ref = %ai_zombie_bus_front_window_attack_r; - dummy_anim_ref = %ai_zombie_bus_window_climbup_from_l; - dummy_anim_ref = %ai_zombie_bus_window_climbup_from_r; - dummy_anim_ref = %ai_zombie_bus_window_dismount_l; - dummy_anim_ref = %ai_zombie_bus_window_dismount_r; - dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_l; - dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_r; - dummy_anim_ref = %ai_zombie_bus_front_window_dismount_l; - dummy_anim_ref = %ai_zombie_bus_front_window_dismount_r; - dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_l; - dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_r; - dummy_anim_ref = %ai_zombie_bus_window_exit_back_l; - dummy_anim_ref = %ai_zombie_bus_window_exit_back_r; - dummy_anim_ref = %ai_zombie_bus_window_exit_front; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_l; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_r; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_front; - dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_b; - dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_f; - dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_b; - dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_f; - dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_b; - dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_f; - dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_b; - dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_f; - dummy_anim_ref = %ai_zombie_bus_front_window_climbup_from_inside; - dummy_anim_ref = %ai_zombie_bus_rear_window_climbup_from_inside; - dummy_anim_ref = %ai_zombie_sprint_v6; - dummy_anim_ref = %ai_zombie_sprint_v7; - dummy_anim_ref = %ai_zombie_sprint_v8; - dummy_anim_ref = %ai_zombie_sprint_v9; - dummy_anim_ref = %ai_zombie_sprint_v10; - dummy_anim_ref = %ai_zombie_sprint_v11; - dummy_anim_ref = %ai_zombie_sprint_v12; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v3; - dummy_anim_ref = %ai_zombie_jetgun_walk_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_v3; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v3; - dummy_anim_ref = %ai_zombie_jetgun_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_death_v3; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v1; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v2; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v3; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v3; - dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v3; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v3; - dummy_anim_ref = %ai_zombie_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_riotshield_breakthrough_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_breakthrough_v1; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_transit_basic.asd"; - self.animtree = "zm_transit_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 5 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie3_01::main(); - break; - case 1: - character/c_zom_zombie3_02::main(); - break; - case 2: - character/c_zom_zombie3_03::main(); - break; - case 3: - character/c_zom_zombie3_04::main(); - break; - case 4: - character/c_zom_zombie3_05::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_transit_basic" ); - character/c_zom_zombie3_01::precache(); - character/c_zom_zombie3_02::precache(); - character/c_zom_zombie3_03::precache(); - character/c_zom_zombie3_04::precache(); - character/c_zom_zombie3_05::precache(); -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/aitype/zm_transit_basic_05.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/aitype/zm_transit_basic_05.gsc deleted file mode 100644 index 5b83a9c..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/aitype/zm_transit_basic_05.gsc +++ /dev/null @@ -1,494 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_transit_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_v4; - dummy_anim_ref = %ai_zombie_inert_v6; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_inert_2_awake_v6; - dummy_anim_ref = %ai_zombie_inert_2_awake_v7; - dummy_anim_ref = %ai_zombie_inert_2_awake_v8; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_climb_down_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_down_pothole; - dummy_anim_ref = %ai_zombie_climb_up_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_up_pothole; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_stumble_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_stumble_90; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_stumble_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_jump_down_stumble_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_stumble_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_crawl_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_traverse_garage_roll; - dummy_anim_ref = %ai_zombie_crawl_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_from_stools; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_from_stools; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_car; - dummy_anim_ref = %ai_zombie_crawl_traverse_car; - dummy_anim_ref = %ai_zombie_traverse_car_pass_to_driver_side; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_run; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_sprint; - dummy_anim_ref = %ai_zombie_traverse_car_sprint; - dummy_anim_ref = %ai_zombie_traverse_car_run; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side_sprint; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_walk_bus_v1; - dummy_anim_ref = %ai_zombie_walk_bus_v2; - dummy_anim_ref = %ai_zombie_walk_bus_v3; - dummy_anim_ref = %ai_zombie_walk_bus_v4; - dummy_anim_ref = %ai_zombie_bus_jump_door; - dummy_anim_ref = %ai_zombie_bus_jump_door_exit; - dummy_anim_ref = %ai_zombie_bus_jump_window_to_l; - dummy_anim_ref = %ai_zombie_bus_jump_window_to_r; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_l; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_r; - dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_l; - dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_r; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_l; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_r; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1_fast; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1_fast; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1_fast; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1_fast; - dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_v1; - dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_fast_v1; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_pull; - dummy_anim_ref = %ai_zombie_bus_hatch_tear; - dummy_anim_ref = %ai_zombie_bus_hatch_tear_fromback; - dummy_anim_ref = %ai_zombie_bus_hatch_jump_down; - dummy_anim_ref = %ai_zombie_bus_window_idle_l; - dummy_anim_ref = %ai_zombie_bus_window_idle_r; - dummy_anim_ref = %ai_zombie_bus_front_window_idle_l; - dummy_anim_ref = %ai_zombie_bus_front_window_idle_r; - dummy_anim_ref = %ai_zombie_bus_window_attack_l; - dummy_anim_ref = %ai_zombie_bus_window_attack_r; - dummy_anim_ref = %ai_zombie_bus_front_window_attack_l; - dummy_anim_ref = %ai_zombie_bus_front_window_attack_r; - dummy_anim_ref = %ai_zombie_bus_window_climbup_from_l; - dummy_anim_ref = %ai_zombie_bus_window_climbup_from_r; - dummy_anim_ref = %ai_zombie_bus_window_dismount_l; - dummy_anim_ref = %ai_zombie_bus_window_dismount_r; - dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_l; - dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_r; - dummy_anim_ref = %ai_zombie_bus_front_window_dismount_l; - dummy_anim_ref = %ai_zombie_bus_front_window_dismount_r; - dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_l; - dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_r; - dummy_anim_ref = %ai_zombie_bus_window_exit_back_l; - dummy_anim_ref = %ai_zombie_bus_window_exit_back_r; - dummy_anim_ref = %ai_zombie_bus_window_exit_front; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_l; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_r; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_front; - dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_b; - dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_f; - dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_b; - dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_f; - dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_b; - dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_f; - dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_b; - dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_f; - dummy_anim_ref = %ai_zombie_bus_front_window_climbup_from_inside; - dummy_anim_ref = %ai_zombie_bus_rear_window_climbup_from_inside; - dummy_anim_ref = %ai_zombie_sprint_v6; - dummy_anim_ref = %ai_zombie_sprint_v7; - dummy_anim_ref = %ai_zombie_sprint_v8; - dummy_anim_ref = %ai_zombie_sprint_v9; - dummy_anim_ref = %ai_zombie_sprint_v10; - dummy_anim_ref = %ai_zombie_sprint_v11; - dummy_anim_ref = %ai_zombie_sprint_v12; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v3; - dummy_anim_ref = %ai_zombie_jetgun_walk_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_v3; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v3; - dummy_anim_ref = %ai_zombie_jetgun_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_death_v3; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v1; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v2; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v3; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v3; - dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v3; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v3; - dummy_anim_ref = %ai_zombie_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_riotshield_breakthrough_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_breakthrough_v1; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_transit_basic.asd"; - self.animtree = "zm_transit_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 3 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie5_01::main(); - break; - case 1: - character/c_zom_zombie5_02::main(); - break; - case 2: - character/c_zom_zombie5_03::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_transit_basic" ); - character/c_zom_zombie5_01::precache(); - character/c_zom_zombie5_02::precache(); - character/c_zom_zombie5_03::precache(); -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/aitype/zm_transit_basic_09.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/aitype/zm_transit_basic_09.gsc deleted file mode 100644 index 32df6ef..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/aitype/zm_transit_basic_09.gsc +++ /dev/null @@ -1,494 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_transit_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_v4; - dummy_anim_ref = %ai_zombie_inert_v6; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_inert_2_awake_v6; - dummy_anim_ref = %ai_zombie_inert_2_awake_v7; - dummy_anim_ref = %ai_zombie_inert_2_awake_v8; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_climb_down_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_down_pothole; - dummy_anim_ref = %ai_zombie_climb_up_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_up_pothole; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_stumble_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_stumble_90; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_stumble_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_jump_down_stumble_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_stumble_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_crawl_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_traverse_garage_roll; - dummy_anim_ref = %ai_zombie_crawl_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_from_stools; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_from_stools; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_car; - dummy_anim_ref = %ai_zombie_crawl_traverse_car; - dummy_anim_ref = %ai_zombie_traverse_car_pass_to_driver_side; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_run; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_sprint; - dummy_anim_ref = %ai_zombie_traverse_car_sprint; - dummy_anim_ref = %ai_zombie_traverse_car_run; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side_sprint; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_walk_bus_v1; - dummy_anim_ref = %ai_zombie_walk_bus_v2; - dummy_anim_ref = %ai_zombie_walk_bus_v3; - dummy_anim_ref = %ai_zombie_walk_bus_v4; - dummy_anim_ref = %ai_zombie_bus_jump_door; - dummy_anim_ref = %ai_zombie_bus_jump_door_exit; - dummy_anim_ref = %ai_zombie_bus_jump_window_to_l; - dummy_anim_ref = %ai_zombie_bus_jump_window_to_r; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_l; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_r; - dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_l; - dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_r; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_l; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_r; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1_fast; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1_fast; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1_fast; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1_fast; - dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_v1; - dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_fast_v1; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_pull; - dummy_anim_ref = %ai_zombie_bus_hatch_tear; - dummy_anim_ref = %ai_zombie_bus_hatch_tear_fromback; - dummy_anim_ref = %ai_zombie_bus_hatch_jump_down; - dummy_anim_ref = %ai_zombie_bus_window_idle_l; - dummy_anim_ref = %ai_zombie_bus_window_idle_r; - dummy_anim_ref = %ai_zombie_bus_front_window_idle_l; - dummy_anim_ref = %ai_zombie_bus_front_window_idle_r; - dummy_anim_ref = %ai_zombie_bus_window_attack_l; - dummy_anim_ref = %ai_zombie_bus_window_attack_r; - dummy_anim_ref = %ai_zombie_bus_front_window_attack_l; - dummy_anim_ref = %ai_zombie_bus_front_window_attack_r; - dummy_anim_ref = %ai_zombie_bus_window_climbup_from_l; - dummy_anim_ref = %ai_zombie_bus_window_climbup_from_r; - dummy_anim_ref = %ai_zombie_bus_window_dismount_l; - dummy_anim_ref = %ai_zombie_bus_window_dismount_r; - dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_l; - dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_r; - dummy_anim_ref = %ai_zombie_bus_front_window_dismount_l; - dummy_anim_ref = %ai_zombie_bus_front_window_dismount_r; - dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_l; - dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_r; - dummy_anim_ref = %ai_zombie_bus_window_exit_back_l; - dummy_anim_ref = %ai_zombie_bus_window_exit_back_r; - dummy_anim_ref = %ai_zombie_bus_window_exit_front; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_l; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_r; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_front; - dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_b; - dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_f; - dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_b; - dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_f; - dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_b; - dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_f; - dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_b; - dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_f; - dummy_anim_ref = %ai_zombie_bus_front_window_climbup_from_inside; - dummy_anim_ref = %ai_zombie_bus_rear_window_climbup_from_inside; - dummy_anim_ref = %ai_zombie_sprint_v6; - dummy_anim_ref = %ai_zombie_sprint_v7; - dummy_anim_ref = %ai_zombie_sprint_v8; - dummy_anim_ref = %ai_zombie_sprint_v9; - dummy_anim_ref = %ai_zombie_sprint_v10; - dummy_anim_ref = %ai_zombie_sprint_v11; - dummy_anim_ref = %ai_zombie_sprint_v12; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v3; - dummy_anim_ref = %ai_zombie_jetgun_walk_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_v3; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v3; - dummy_anim_ref = %ai_zombie_jetgun_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_death_v3; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v1; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v2; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v3; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v3; - dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v3; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v3; - dummy_anim_ref = %ai_zombie_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_riotshield_breakthrough_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_breakthrough_v1; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_transit_basic.asd"; - self.animtree = "zm_transit_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 3 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie9_01::main(); - break; - case 1: - character/c_zom_zombie9_02::main(); - break; - case 2: - character/c_zom_zombie9_03::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_transit_basic" ); - character/c_zom_zombie9_01::precache(); - character/c_zom_zombie9_02::precache(); - character/c_zom_zombie9_03::precache(); -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_transit_player_engineer.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_transit_player_engineer.gsc deleted file mode 100644 index b123803..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_transit_player_engineer.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_engineer_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_engineer_fb" ); -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_transit_player_farmgirl.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_transit_player_farmgirl.gsc deleted file mode 100644 index 05c38e9..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_transit_player_farmgirl.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_farmgirl_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_farmgirl_fb" ); -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_transit_player_oldman.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_transit_player_oldman.gsc deleted file mode 100644 index 5d5f2c5..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_transit_player_oldman.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_oldman_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_oldman_fb" ); -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_transit_player_reporter.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_transit_player_reporter.gsc deleted file mode 100644 index 71e8021..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_transit_player_reporter.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_reporter_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_reporter_fb" ); -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie1_01.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie1_01.gsc deleted file mode 100644 index de7fc13..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie1_01.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie1_body01" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie1_body01_g_upclean"; - self.torsodmg2 = "c_zom_zombie1_body01_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie1_body01_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie1_body01_g_lowclean"; - self.legdmg2 = "c_zom_zombie1_body01_g_rlegoff"; - self.legdmg3 = "c_zom_zombie1_body01_g_llegoff"; - self.legdmg4 = "c_zom_zombie1_body01_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie1_body01" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie1_body01_g_upclean" ); - precachemodel( "c_zom_zombie1_body01_g_rarmoff" ); - precachemodel( "c_zom_zombie1_body01_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie1_body01_g_lowclean" ); - precachemodel( "c_zom_zombie1_body01_g_rlegoff" ); - precachemodel( "c_zom_zombie1_body01_g_llegoff" ); - precachemodel( "c_zom_zombie1_body01_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie_g_rlegspawn" ); - precachemodel( "c_zom_zombie_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie1_02.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie1_02.gsc deleted file mode 100644 index 09fc308..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie1_02.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie1_body02" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie1_body02_g_upclean"; - self.torsodmg2 = "c_zom_zombie1_body02_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie1_body02_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie1_body02_g_lowclean"; - self.legdmg2 = "c_zom_zombie1_body02_g_rlegoff"; - self.legdmg3 = "c_zom_zombie1_body02_g_llegoff"; - self.legdmg4 = "c_zom_zombie1_body02_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie1_body02" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie1_body02_g_upclean" ); - precachemodel( "c_zom_zombie1_body02_g_rarmoff" ); - precachemodel( "c_zom_zombie1_body02_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie1_body02_g_lowclean" ); - precachemodel( "c_zom_zombie1_body02_g_rlegoff" ); - precachemodel( "c_zom_zombie1_body02_g_llegoff" ); - precachemodel( "c_zom_zombie1_body02_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie_g_rlegspawn" ); - precachemodel( "c_zom_zombie_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie3_01.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie3_01.gsc deleted file mode 100644 index 690bc95..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie3_01.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie3_body01" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie3_body01_g_upclean"; - self.torsodmg2 = "c_zom_zombie3_body01_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie3_body01_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie3_body01_g_lowclean"; - self.legdmg2 = "c_zom_zombie3_body01_g_rlegoff"; - self.legdmg3 = "c_zom_zombie3_body01_g_llegoff"; - self.legdmg4 = "c_zom_zombie3_body01_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie3_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie3_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie3_body01" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie3_body01_g_upclean" ); - precachemodel( "c_zom_zombie3_body01_g_rarmoff" ); - precachemodel( "c_zom_zombie3_body01_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie3_body01_g_lowclean" ); - precachemodel( "c_zom_zombie3_body01_g_rlegoff" ); - precachemodel( "c_zom_zombie3_body01_g_llegoff" ); - precachemodel( "c_zom_zombie3_body01_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie3_g_rlegspawn" ); - precachemodel( "c_zom_zombie3_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie3_02.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie3_02.gsc deleted file mode 100644 index c28b86a..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie3_02.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie3_body02" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie3_body02_g_upclean"; - self.torsodmg2 = "c_zom_zombie3_body02_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie3_body02_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie3_body02_g_lowclean"; - self.legdmg2 = "c_zom_zombie3_body02_g_rlegoff"; - self.legdmg3 = "c_zom_zombie3_body02_g_llegoff"; - self.legdmg4 = "c_zom_zombie3_body02_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie3_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie3_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie3_body02" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie3_body02_g_upclean" ); - precachemodel( "c_zom_zombie3_body02_g_rarmoff" ); - precachemodel( "c_zom_zombie3_body02_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie3_body02_g_lowclean" ); - precachemodel( "c_zom_zombie3_body02_g_rlegoff" ); - precachemodel( "c_zom_zombie3_body02_g_llegoff" ); - precachemodel( "c_zom_zombie3_body02_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie3_g_rlegspawn" ); - precachemodel( "c_zom_zombie3_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie3_03.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie3_03.gsc deleted file mode 100644 index 467dfb5..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie3_03.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie3_body03" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie3_body03_g_upclean"; - self.torsodmg2 = "c_zom_zombie3_body03_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie3_body03_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie3_body03_g_lowclean"; - self.legdmg2 = "c_zom_zombie3_body03_g_rlegoff"; - self.legdmg3 = "c_zom_zombie3_body03_g_llegoff"; - self.legdmg4 = "c_zom_zombie3_body03_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie3_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie3_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie3_body03" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie3_body03_g_upclean" ); - precachemodel( "c_zom_zombie3_body03_g_rarmoff" ); - precachemodel( "c_zom_zombie3_body03_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie3_body03_g_lowclean" ); - precachemodel( "c_zom_zombie3_body03_g_rlegoff" ); - precachemodel( "c_zom_zombie3_body03_g_llegoff" ); - precachemodel( "c_zom_zombie3_body03_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie3_g_rlegspawn" ); - precachemodel( "c_zom_zombie3_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie3_04.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie3_04.gsc deleted file mode 100644 index ee42a38..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie3_04.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie3_body04" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie3_body04_g_upclean"; - self.torsodmg2 = "c_zom_zombie3_body04_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie3_body04_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie3_body04_g_lowclean"; - self.legdmg2 = "c_zom_zombie3_body04_g_rlegoff"; - self.legdmg3 = "c_zom_zombie3_body04_g_llegoff"; - self.legdmg4 = "c_zom_zombie3_body04_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie3_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie3_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie3_body04" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie3_body04_g_upclean" ); - precachemodel( "c_zom_zombie3_body04_g_rarmoff" ); - precachemodel( "c_zom_zombie3_body04_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie3_body04_g_lowclean" ); - precachemodel( "c_zom_zombie3_body04_g_rlegoff" ); - precachemodel( "c_zom_zombie3_body04_g_llegoff" ); - precachemodel( "c_zom_zombie3_body04_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie3_g_rlegspawn" ); - precachemodel( "c_zom_zombie3_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie3_05.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie3_05.gsc deleted file mode 100644 index 7c418c9..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie3_05.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie3_body05" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie3_body05_g_upclean"; - self.torsodmg2 = "c_zom_zombie3_body05_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie3_body05_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie3_body05_g_lowclean"; - self.legdmg2 = "c_zom_zombie3_body05_g_rlegoff"; - self.legdmg3 = "c_zom_zombie3_body05_g_llegoff"; - self.legdmg4 = "c_zom_zombie3_body05_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie3_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie3_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie3_body05" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie3_body05_g_upclean" ); - precachemodel( "c_zom_zombie3_body05_g_rarmoff" ); - precachemodel( "c_zom_zombie3_body05_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie3_body05_g_lowclean" ); - precachemodel( "c_zom_zombie3_body05_g_rlegoff" ); - precachemodel( "c_zom_zombie3_body05_g_llegoff" ); - precachemodel( "c_zom_zombie3_body05_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie3_g_rlegspawn" ); - precachemodel( "c_zom_zombie3_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie5_01.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie5_01.gsc deleted file mode 100644 index 77f1388..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie5_01.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie5_body01" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie5_body01_g_upclean"; - self.torsodmg2 = "c_zom_zombie5_body01_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie5_body01_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie5_body01_g_lowclean"; - self.legdmg2 = "c_zom_zombie5_body01_g_rlegoff"; - self.legdmg3 = "c_zom_zombie5_body01_g_llegoff"; - self.legdmg4 = "c_zom_zombie5_body01_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie5_body01" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie5_body01_g_upclean" ); - precachemodel( "c_zom_zombie5_body01_g_rarmoff" ); - precachemodel( "c_zom_zombie5_body01_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie5_body01_g_lowclean" ); - precachemodel( "c_zom_zombie5_body01_g_rlegoff" ); - precachemodel( "c_zom_zombie5_body01_g_llegoff" ); - precachemodel( "c_zom_zombie5_body01_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie_g_rlegspawn" ); - precachemodel( "c_zom_zombie_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie5_02.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie5_02.gsc deleted file mode 100644 index 71035ea..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie5_02.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie5_body02" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie5_body02_g_upclean"; - self.torsodmg2 = "c_zom_zombie5_body02_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie5_body02_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie5_body02_g_lowclean"; - self.legdmg2 = "c_zom_zombie5_body02_g_rlegoff"; - self.legdmg3 = "c_zom_zombie5_body02_g_llegoff"; - self.legdmg4 = "c_zom_zombie5_body02_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie5_body02" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie5_body02_g_upclean" ); - precachemodel( "c_zom_zombie5_body02_g_rarmoff" ); - precachemodel( "c_zom_zombie5_body02_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie5_body02_g_lowclean" ); - precachemodel( "c_zom_zombie5_body02_g_rlegoff" ); - precachemodel( "c_zom_zombie5_body02_g_llegoff" ); - precachemodel( "c_zom_zombie5_body02_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie_g_rlegspawn" ); - precachemodel( "c_zom_zombie_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie5_03.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie5_03.gsc deleted file mode 100644 index 5a0dbae..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie5_03.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie5_body03" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie5_body03_g_upclean"; - self.torsodmg2 = "c_zom_zombie5_body03_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie5_body03_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie5_body03_g_lowclean"; - self.legdmg2 = "c_zom_zombie5_body03_g_rlegoff"; - self.legdmg3 = "c_zom_zombie5_body03_g_llegoff"; - self.legdmg4 = "c_zom_zombie5_body03_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie5_body03" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie5_body03_g_upclean" ); - precachemodel( "c_zom_zombie5_body03_g_rarmoff" ); - precachemodel( "c_zom_zombie5_body03_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie5_body03_g_lowclean" ); - precachemodel( "c_zom_zombie5_body03_g_rlegoff" ); - precachemodel( "c_zom_zombie5_body03_g_llegoff" ); - precachemodel( "c_zom_zombie5_body03_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie_g_rlegspawn" ); - precachemodel( "c_zom_zombie_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie9_01.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie9_01.gsc deleted file mode 100644 index 02382a2..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie9_01.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie9_body01" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_female_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie9_body01_g_upclean"; - self.torsodmg2 = "c_zom_zombie9_body01_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie9_body01_g_larmoff"; - self.torsodmg5 = "c_zom_zombie9_body01_g_behead"; - self.legdmg1 = "c_zom_zombie9_body01_g_lowclean"; - self.legdmg2 = "c_zom_zombie9_body01_g_rlegoff"; - self.legdmg3 = "c_zom_zombie9_body01_g_llegoff"; - self.legdmg4 = "c_zom_zombie9_body01_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie9_body01" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_female_head_als::main() ); - precachemodel( "c_zom_zombie9_body01_g_upclean" ); - precachemodel( "c_zom_zombie9_body01_g_rarmoff" ); - precachemodel( "c_zom_zombie9_body01_g_larmoff" ); - precachemodel( "c_zom_zombie9_body01_g_behead" ); - precachemodel( "c_zom_zombie9_body01_g_lowclean" ); - precachemodel( "c_zom_zombie9_body01_g_rlegoff" ); - precachemodel( "c_zom_zombie9_body01_g_llegoff" ); - precachemodel( "c_zom_zombie9_body01_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie_g_rlegspawn" ); - precachemodel( "c_zom_zombie_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie9_02.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie9_02.gsc deleted file mode 100644 index a7d4481..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie9_02.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie9_body02" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_female_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie9_body02_g_upclean"; - self.torsodmg2 = "c_zom_zombie9_body02_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie9_body02_g_larmoff"; - self.torsodmg5 = "c_zom_zombie9_body01_g_behead"; - self.legdmg1 = "c_zom_zombie9_body02_g_lowclean"; - self.legdmg2 = "c_zom_zombie9_body02_g_rlegoff"; - self.legdmg3 = "c_zom_zombie9_body02_g_llegoff"; - self.legdmg4 = "c_zom_zombie9_body02_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie9_body02" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_female_head_als::main() ); - precachemodel( "c_zom_zombie9_body02_g_upclean" ); - precachemodel( "c_zom_zombie9_body02_g_rarmoff" ); - precachemodel( "c_zom_zombie9_body02_g_larmoff" ); - precachemodel( "c_zom_zombie9_body01_g_behead" ); - precachemodel( "c_zom_zombie9_body02_g_lowclean" ); - precachemodel( "c_zom_zombie9_body02_g_rlegoff" ); - precachemodel( "c_zom_zombie9_body02_g_llegoff" ); - precachemodel( "c_zom_zombie9_body02_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie_g_rlegspawn" ); - precachemodel( "c_zom_zombie_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie9_03.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie9_03.gsc deleted file mode 100644 index fd47371..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/character/c_zom_zombie9_03.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie9_body03" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_female_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie9_body03_g_upclean"; - self.torsodmg2 = "c_zom_zombie9_body03_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie9_body03_g_larmoff"; - self.torsodmg5 = "c_zom_zombie9_body01_g_behead"; - self.legdmg1 = "c_zom_zombie9_body03_g_lowclean"; - self.legdmg2 = "c_zom_zombie9_body03_g_rlegoff"; - self.legdmg3 = "c_zom_zombie9_body03_g_llegoff"; - self.legdmg4 = "c_zom_zombie9_body03_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie9_body03" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_female_head_als::main() ); - precachemodel( "c_zom_zombie9_body03_g_upclean" ); - precachemodel( "c_zom_zombie9_body03_g_rarmoff" ); - precachemodel( "c_zom_zombie9_body03_g_larmoff" ); - precachemodel( "c_zom_zombie9_body01_g_behead" ); - precachemodel( "c_zom_zombie9_body03_g_lowclean" ); - precachemodel( "c_zom_zombie9_body03_g_rlegoff" ); - precachemodel( "c_zom_zombie9_body03_g_llegoff" ); - precachemodel( "c_zom_zombie9_body03_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie_g_rlegspawn" ); - precachemodel( "c_zom_zombie_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/xmodelalias/c_zom_zombie_female_head_als.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/xmodelalias/c_zom_zombie_female_head_als.gsc deleted file mode 100644 index d1f24eb..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/xmodelalias/c_zom_zombie_female_head_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_head_d"; - a[ 1 ] = "c_zom_zombie_head_f"; - a[ 2 ] = "c_zom_zombie_head_d2"; - a[ 3 ] = "c_zom_zombie_head_f2"; - return a; -} diff --git a/Zombie Maps/Tranzit/so_zencounter_zm_transit/xmodelalias/c_zom_zombie_head_als.gsc b/Zombie Maps/Tranzit/so_zencounter_zm_transit/xmodelalias/c_zom_zombie_head_als.gsc deleted file mode 100644 index 6aeadb2..0000000 --- a/Zombie Maps/Tranzit/so_zencounter_zm_transit/xmodelalias/c_zom_zombie_head_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_head_k"; - a[ 1 ] = "c_zom_zombie_head_l"; - a[ 2 ] = "c_zom_zombie_head_n"; - a[ 3 ] = "c_zom_zombie_head_a"; - return a; -} diff --git a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/aitype/zm_transit_basic_01.gsc b/Zombie Maps/Tranzit/so_zsurvival_zm_transit/aitype/zm_transit_basic_01.gsc deleted file mode 100644 index 0356f22..0000000 --- a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/aitype/zm_transit_basic_01.gsc +++ /dev/null @@ -1,490 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_transit_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_v4; - dummy_anim_ref = %ai_zombie_inert_v6; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_inert_2_awake_v6; - dummy_anim_ref = %ai_zombie_inert_2_awake_v7; - dummy_anim_ref = %ai_zombie_inert_2_awake_v8; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_climb_down_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_down_pothole; - dummy_anim_ref = %ai_zombie_climb_up_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_up_pothole; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_stumble_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_stumble_90; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_stumble_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_jump_down_stumble_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_stumble_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_crawl_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_traverse_garage_roll; - dummy_anim_ref = %ai_zombie_crawl_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_from_stools; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_from_stools; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_car; - dummy_anim_ref = %ai_zombie_crawl_traverse_car; - dummy_anim_ref = %ai_zombie_traverse_car_pass_to_driver_side; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_run; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_sprint; - dummy_anim_ref = %ai_zombie_traverse_car_sprint; - dummy_anim_ref = %ai_zombie_traverse_car_run; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side_sprint; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_walk_bus_v1; - dummy_anim_ref = %ai_zombie_walk_bus_v2; - dummy_anim_ref = %ai_zombie_walk_bus_v3; - dummy_anim_ref = %ai_zombie_walk_bus_v4; - dummy_anim_ref = %ai_zombie_bus_jump_door; - dummy_anim_ref = %ai_zombie_bus_jump_door_exit; - dummy_anim_ref = %ai_zombie_bus_jump_window_to_l; - dummy_anim_ref = %ai_zombie_bus_jump_window_to_r; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_l; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_r; - dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_l; - dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_r; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_l; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_r; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1_fast; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1_fast; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1_fast; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1_fast; - dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_v1; - dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_fast_v1; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_pull; - dummy_anim_ref = %ai_zombie_bus_hatch_tear; - dummy_anim_ref = %ai_zombie_bus_hatch_tear_fromback; - dummy_anim_ref = %ai_zombie_bus_hatch_jump_down; - dummy_anim_ref = %ai_zombie_bus_window_idle_l; - dummy_anim_ref = %ai_zombie_bus_window_idle_r; - dummy_anim_ref = %ai_zombie_bus_front_window_idle_l; - dummy_anim_ref = %ai_zombie_bus_front_window_idle_r; - dummy_anim_ref = %ai_zombie_bus_window_attack_l; - dummy_anim_ref = %ai_zombie_bus_window_attack_r; - dummy_anim_ref = %ai_zombie_bus_front_window_attack_l; - dummy_anim_ref = %ai_zombie_bus_front_window_attack_r; - dummy_anim_ref = %ai_zombie_bus_window_climbup_from_l; - dummy_anim_ref = %ai_zombie_bus_window_climbup_from_r; - dummy_anim_ref = %ai_zombie_bus_window_dismount_l; - dummy_anim_ref = %ai_zombie_bus_window_dismount_r; - dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_l; - dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_r; - dummy_anim_ref = %ai_zombie_bus_front_window_dismount_l; - dummy_anim_ref = %ai_zombie_bus_front_window_dismount_r; - dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_l; - dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_r; - dummy_anim_ref = %ai_zombie_bus_window_exit_back_l; - dummy_anim_ref = %ai_zombie_bus_window_exit_back_r; - dummy_anim_ref = %ai_zombie_bus_window_exit_front; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_l; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_r; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_front; - dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_b; - dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_f; - dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_b; - dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_f; - dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_b; - dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_f; - dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_b; - dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_f; - dummy_anim_ref = %ai_zombie_bus_front_window_climbup_from_inside; - dummy_anim_ref = %ai_zombie_bus_rear_window_climbup_from_inside; - dummy_anim_ref = %ai_zombie_sprint_v6; - dummy_anim_ref = %ai_zombie_sprint_v7; - dummy_anim_ref = %ai_zombie_sprint_v8; - dummy_anim_ref = %ai_zombie_sprint_v9; - dummy_anim_ref = %ai_zombie_sprint_v10; - dummy_anim_ref = %ai_zombie_sprint_v11; - dummy_anim_ref = %ai_zombie_sprint_v12; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v3; - dummy_anim_ref = %ai_zombie_jetgun_walk_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_v3; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v3; - dummy_anim_ref = %ai_zombie_jetgun_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_death_v3; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v1; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v2; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v3; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v3; - dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v3; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v3; - dummy_anim_ref = %ai_zombie_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_riotshield_breakthrough_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_breakthrough_v1; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_transit_basic.asd"; - self.animtree = "zm_transit_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 2 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie1_01::main(); - break; - case 1: - character/c_zom_zombie1_02::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_transit_basic" ); - character/c_zom_zombie1_01::precache(); - character/c_zom_zombie1_02::precache(); -} diff --git a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/aitype/zm_transit_basic_05.gsc b/Zombie Maps/Tranzit/so_zsurvival_zm_transit/aitype/zm_transit_basic_05.gsc deleted file mode 100644 index 5b83a9c..0000000 --- a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/aitype/zm_transit_basic_05.gsc +++ /dev/null @@ -1,494 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_transit_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_v4; - dummy_anim_ref = %ai_zombie_inert_v6; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_inert_2_awake_v6; - dummy_anim_ref = %ai_zombie_inert_2_awake_v7; - dummy_anim_ref = %ai_zombie_inert_2_awake_v8; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_climb_down_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_down_pothole; - dummy_anim_ref = %ai_zombie_climb_up_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_up_pothole; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_stumble_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_stumble_90; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_stumble_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_jump_down_stumble_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_stumble_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_crawl_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_traverse_garage_roll; - dummy_anim_ref = %ai_zombie_crawl_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_from_stools; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_from_stools; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_car; - dummy_anim_ref = %ai_zombie_crawl_traverse_car; - dummy_anim_ref = %ai_zombie_traverse_car_pass_to_driver_side; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_run; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_sprint; - dummy_anim_ref = %ai_zombie_traverse_car_sprint; - dummy_anim_ref = %ai_zombie_traverse_car_run; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side_sprint; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_walk_bus_v1; - dummy_anim_ref = %ai_zombie_walk_bus_v2; - dummy_anim_ref = %ai_zombie_walk_bus_v3; - dummy_anim_ref = %ai_zombie_walk_bus_v4; - dummy_anim_ref = %ai_zombie_bus_jump_door; - dummy_anim_ref = %ai_zombie_bus_jump_door_exit; - dummy_anim_ref = %ai_zombie_bus_jump_window_to_l; - dummy_anim_ref = %ai_zombie_bus_jump_window_to_r; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_l; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_r; - dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_l; - dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_r; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_l; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_r; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1_fast; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1_fast; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1_fast; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1_fast; - dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_v1; - dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_fast_v1; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_pull; - dummy_anim_ref = %ai_zombie_bus_hatch_tear; - dummy_anim_ref = %ai_zombie_bus_hatch_tear_fromback; - dummy_anim_ref = %ai_zombie_bus_hatch_jump_down; - dummy_anim_ref = %ai_zombie_bus_window_idle_l; - dummy_anim_ref = %ai_zombie_bus_window_idle_r; - dummy_anim_ref = %ai_zombie_bus_front_window_idle_l; - dummy_anim_ref = %ai_zombie_bus_front_window_idle_r; - dummy_anim_ref = %ai_zombie_bus_window_attack_l; - dummy_anim_ref = %ai_zombie_bus_window_attack_r; - dummy_anim_ref = %ai_zombie_bus_front_window_attack_l; - dummy_anim_ref = %ai_zombie_bus_front_window_attack_r; - dummy_anim_ref = %ai_zombie_bus_window_climbup_from_l; - dummy_anim_ref = %ai_zombie_bus_window_climbup_from_r; - dummy_anim_ref = %ai_zombie_bus_window_dismount_l; - dummy_anim_ref = %ai_zombie_bus_window_dismount_r; - dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_l; - dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_r; - dummy_anim_ref = %ai_zombie_bus_front_window_dismount_l; - dummy_anim_ref = %ai_zombie_bus_front_window_dismount_r; - dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_l; - dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_r; - dummy_anim_ref = %ai_zombie_bus_window_exit_back_l; - dummy_anim_ref = %ai_zombie_bus_window_exit_back_r; - dummy_anim_ref = %ai_zombie_bus_window_exit_front; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_l; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_r; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_front; - dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_b; - dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_f; - dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_b; - dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_f; - dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_b; - dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_f; - dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_b; - dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_f; - dummy_anim_ref = %ai_zombie_bus_front_window_climbup_from_inside; - dummy_anim_ref = %ai_zombie_bus_rear_window_climbup_from_inside; - dummy_anim_ref = %ai_zombie_sprint_v6; - dummy_anim_ref = %ai_zombie_sprint_v7; - dummy_anim_ref = %ai_zombie_sprint_v8; - dummy_anim_ref = %ai_zombie_sprint_v9; - dummy_anim_ref = %ai_zombie_sprint_v10; - dummy_anim_ref = %ai_zombie_sprint_v11; - dummy_anim_ref = %ai_zombie_sprint_v12; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v3; - dummy_anim_ref = %ai_zombie_jetgun_walk_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_v3; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v3; - dummy_anim_ref = %ai_zombie_jetgun_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_death_v3; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v1; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v2; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v3; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v3; - dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v3; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v3; - dummy_anim_ref = %ai_zombie_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_riotshield_breakthrough_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_breakthrough_v1; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_transit_basic.asd"; - self.animtree = "zm_transit_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 3 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie5_01::main(); - break; - case 1: - character/c_zom_zombie5_02::main(); - break; - case 2: - character/c_zom_zombie5_03::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_transit_basic" ); - character/c_zom_zombie5_01::precache(); - character/c_zom_zombie5_02::precache(); - character/c_zom_zombie5_03::precache(); -} diff --git a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/aitype/zm_transit_basic_08.gsc b/Zombie Maps/Tranzit/so_zsurvival_zm_transit/aitype/zm_transit_basic_08.gsc deleted file mode 100644 index 20dd250..0000000 --- a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/aitype/zm_transit_basic_08.gsc +++ /dev/null @@ -1,494 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_transit_basic" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %ai_zombie_idle_v1_delta; - dummy_anim_ref = %ai_zombie_idle_crawl_delta; - dummy_anim_ref = %ai_zombie_walk_v1; - dummy_anim_ref = %ai_zombie_walk_v2; - dummy_anim_ref = %ai_zombie_walk_v3; - dummy_anim_ref = %ai_zombie_walk_v4; - dummy_anim_ref = %ai_zombie_walk_v6; - dummy_anim_ref = %ai_zombie_walk_v7; - dummy_anim_ref = %ai_zombie_walk_v9; - dummy_anim_ref = %ai_zombie_crawl; - dummy_anim_ref = %ai_zombie_crawl_v1; - dummy_anim_ref = %ai_zombie_crawl_v2; - dummy_anim_ref = %ai_zombie_crawl_v3; - dummy_anim_ref = %ai_zombie_crawl_v4; - dummy_anim_ref = %ai_zombie_crawl_v5; - dummy_anim_ref = %ai_zombie_walk_fast_v1; - dummy_anim_ref = %ai_zombie_walk_fast_v2; - dummy_anim_ref = %ai_zombie_walk_fast_v3; - dummy_anim_ref = %ai_zombie_run_v2; - dummy_anim_ref = %ai_zombie_run_v4; - dummy_anim_ref = %ai_zombie_run_v3; - dummy_anim_ref = %ai_zombie_sprint_v1; - dummy_anim_ref = %ai_zombie_sprint_v2; - dummy_anim_ref = %ai_zombie_crawl_sprint; - dummy_anim_ref = %ai_zombie_crawl_sprint_1; - dummy_anim_ref = %ai_zombie_crawl_sprint_2; - dummy_anim_ref = %ai_zombie_fast_sprint_01; - dummy_anim_ref = %ai_zombie_fast_sprint_02; - dummy_anim_ref = %ai_zombie_walk_on_hands_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_b; - dummy_anim_ref = %ai_zombie_attack_v2; - dummy_anim_ref = %ai_zombie_attack_v4; - dummy_anim_ref = %ai_zombie_attack_v6; - dummy_anim_ref = %ai_zombie_attack_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v1; - dummy_anim_ref = %ai_zombie_attack_forward_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v1; - dummy_anim_ref = %ai_zombie_walk_attack_v2; - dummy_anim_ref = %ai_zombie_walk_attack_v3; - dummy_anim_ref = %ai_zombie_walk_attack_v4; - dummy_anim_ref = %ai_zombie_run_attack_v1; - dummy_anim_ref = %ai_zombie_run_attack_v2; - dummy_anim_ref = %ai_zombie_run_attack_v3; - dummy_anim_ref = %ai_zombie_attack_crawl; - dummy_anim_ref = %ai_zombie_attack_crawl_lunge; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_a; - dummy_anim_ref = %ai_zombie_walk_on_hands_shot_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_left_b; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_a; - dummy_anim_ref = %ai_zombie_spets_sidestep_right_b; - dummy_anim_ref = %ai_zombie_spets_roll_a; - dummy_anim_ref = %ai_zombie_spets_roll_b; - dummy_anim_ref = %ai_zombie_spets_roll_c; - dummy_anim_ref = %ai_zombie_taunts_4; - dummy_anim_ref = %ai_zombie_taunts_7; - dummy_anim_ref = %ai_zombie_taunts_9; - dummy_anim_ref = %ai_zombie_taunts_5b; - dummy_anim_ref = %ai_zombie_taunts_5c; - dummy_anim_ref = %ai_zombie_taunts_5d; - dummy_anim_ref = %ai_zombie_taunts_5e; - dummy_anim_ref = %ai_zombie_taunts_5f; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_grab; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_hold; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_m_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_r_6_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_1_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_2_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_3_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_4_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_5_pull; - dummy_anim_ref = %ai_zombie_crawl_boardtear_aligned_l_6_pull; - dummy_anim_ref = %ai_zombie_inert_v4; - dummy_anim_ref = %ai_zombie_inert_v6; - dummy_anim_ref = %ai_zombie_inert_stagger_v1; - dummy_anim_ref = %ai_zombie_inert_stagger_v2; - dummy_anim_ref = %ai_zombie_inert_stagger_v3; - dummy_anim_ref = %ai_zombie_inert_stagger_v4; - dummy_anim_ref = %ai_zombie_inert_circle_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_inert_2_awake_v6; - dummy_anim_ref = %ai_zombie_inert_2_awake_v7; - dummy_anim_ref = %ai_zombie_inert_2_awake_v8; - dummy_anim_ref = %ai_zombie_crawl_inert_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_v5; - dummy_anim_ref = %ai_zombie_crawl_inert_v6; - dummy_anim_ref = %ai_zombie_crawl_inert_v7; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v1; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v2; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v3; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v4; - dummy_anim_ref = %ai_zombie_crawl_inert_2_awake_v5; - dummy_anim_ref = %ai_zombie_window_attack_arm_l_out; - dummy_anim_ref = %ai_zombie_window_attack_arm_r_out; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_walk; - dummy_anim_ref = %ai_zombie_traverse_ground_v2_walk_alta; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_run; - dummy_anim_ref = %ai_zombie_traverse_ground_climbout_fast; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathinside_alt; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside; - dummy_anim_ref = %ai_zombie_traverse_ground_v1_deathoutside_alt; - dummy_anim_ref = %ai_zombie_ceiling_attack_01; - dummy_anim_ref = %ai_zombie_ceiling_attack_02; - dummy_anim_ref = %ai_zombie_ceiling_emerge_01; - dummy_anim_ref = %ai_zombie_ceiling_death; - dummy_anim_ref = %ai_zombie_ceiling_dropdown_01; - dummy_anim_ref = %ai_zombie_ceiling_fall_loop; - dummy_anim_ref = %ai_zombie_ceiling_fall_land; - dummy_anim_ref = %ai_zombie_ceiling_fall_land_02; - dummy_anim_ref = %ch_dazed_a_death; - dummy_anim_ref = %ch_dazed_b_death; - dummy_anim_ref = %ch_dazed_c_death; - dummy_anim_ref = %ch_dazed_d_death; - dummy_anim_ref = %ai_zombie_crawl_death_v1; - dummy_anim_ref = %ai_zombie_crawl_death_v2; - dummy_anim_ref = %ai_zombie_traverse_v1; - dummy_anim_ref = %ai_zombie_traverse_v2; - dummy_anim_ref = %ai_zombie_traverse_v5; - dummy_anim_ref = %ai_zombie_traverse_v6; - dummy_anim_ref = %ai_zombie_traverse_v7; - dummy_anim_ref = %ai_zombie_traverse_crawl_v1; - dummy_anim_ref = %ai_zombie_traverse_v4; - dummy_anim_ref = %ai_zombie_climb_down_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_down_pothole; - dummy_anim_ref = %ai_zombie_climb_up_pothole; - dummy_anim_ref = %ai_zombie_crawl_climb_up_pothole; - dummy_anim_ref = %ai_zombie_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_stumble_48; - dummy_anim_ref = %ai_zombie_crawl_jump_down_48; - dummy_anim_ref = %ai_zombie_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_stumble_90; - dummy_anim_ref = %ai_zombie_crawl_jump_down_96; - dummy_anim_ref = %ai_zombie_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_stumble_127; - dummy_anim_ref = %ai_zombie_crawl_jump_down_127; - dummy_anim_ref = %ai_zombie_jump_down_190; - dummy_anim_ref = %ai_zombie_jump_down_stumble_190; - dummy_anim_ref = %ai_zombie_crawl_jump_down_189; - dummy_anim_ref = %ai_zombie_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_down_stumble_222; - dummy_anim_ref = %ai_zombie_crawl_jump_down_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_48; - dummy_anim_ref = %ai_zombie_jump_up_127; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_127; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_127; - dummy_anim_ref = %ai_zombie_jump_up_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_222; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_222; - dummy_anim_ref = %ai_zombie_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_up_grabbed_190; - dummy_anim_ref = %ai_zombie_crawl_jump_across_120; - dummy_anim_ref = %ai_zombie_jump_across_120; - dummy_anim_ref = %ai_zombie_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_crawl_diner_roof_hatch_jump_up; - dummy_anim_ref = %ai_zombie_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_roof; - dummy_anim_ref = %ai_zombie_traverse_garage_roll; - dummy_anim_ref = %ai_zombie_crawl_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_jump_up_diner_roof; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_from_stools; - dummy_anim_ref = %ai_zombie_crawl_traverse_diner_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_from_stools; - dummy_anim_ref = %ai_zombie_traverse_diner_counter_to_stools; - dummy_anim_ref = %ai_zombie_traverse_car; - dummy_anim_ref = %ai_zombie_crawl_traverse_car; - dummy_anim_ref = %ai_zombie_traverse_car_pass_to_driver_side; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_run; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_sprint; - dummy_anim_ref = %ai_zombie_traverse_car_sprint; - dummy_anim_ref = %ai_zombie_traverse_car_run; - dummy_anim_ref = %ai_zombie_crawl_traverse_car_pass_to_driver_side_sprint; - dummy_anim_ref = %ai_zombie_barricade_enter_l; - dummy_anim_ref = %ai_zombie_barricade_enter_r; - dummy_anim_ref = %ai_zombie_barricade_enter_m_nolegs; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v1; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v2; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v3; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v4; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v5; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v6; - dummy_anim_ref = %ai_zombie_barricade_enter_m_v7; - dummy_anim_ref = %ai_zombie_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_run_r; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_l; - dummy_anim_ref = %ai_zombie_crawl_barricade_enter_sprint_r; - dummy_anim_ref = %ai_zombie_walk_bus_v1; - dummy_anim_ref = %ai_zombie_walk_bus_v2; - dummy_anim_ref = %ai_zombie_walk_bus_v3; - dummy_anim_ref = %ai_zombie_walk_bus_v4; - dummy_anim_ref = %ai_zombie_bus_jump_door; - dummy_anim_ref = %ai_zombie_bus_jump_door_exit; - dummy_anim_ref = %ai_zombie_bus_jump_window_to_l; - dummy_anim_ref = %ai_zombie_bus_jump_window_to_r; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_l; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_window_to_r; - dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_l; - dummy_anim_ref = %ai_zombie_bus_jump_front_window_to_r; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_l; - dummy_anim_ref = %ai_zombie_crawl_bus_jump_front_window_to_r; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_l_v1_fast; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1; - dummy_anim_ref = %ai_zombie_bus_side_window_enter_r_v1_fast; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_l_v1_fast; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1; - dummy_anim_ref = %ai_zombie_bus_front_window_enter_r_v1_fast; - dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_v1; - dummy_anim_ref = %ai_zombie_bus_rear_window_traverse_fast_v1; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_1_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_2_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_3_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_4_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_l_5_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_1_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_2_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_3_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_4_pull; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_grab; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_hold; - dummy_anim_ref = %ai_zombie_bus_boardtear_r_5_pull; - dummy_anim_ref = %ai_zombie_bus_hatch_tear; - dummy_anim_ref = %ai_zombie_bus_hatch_tear_fromback; - dummy_anim_ref = %ai_zombie_bus_hatch_jump_down; - dummy_anim_ref = %ai_zombie_bus_window_idle_l; - dummy_anim_ref = %ai_zombie_bus_window_idle_r; - dummy_anim_ref = %ai_zombie_bus_front_window_idle_l; - dummy_anim_ref = %ai_zombie_bus_front_window_idle_r; - dummy_anim_ref = %ai_zombie_bus_window_attack_l; - dummy_anim_ref = %ai_zombie_bus_window_attack_r; - dummy_anim_ref = %ai_zombie_bus_front_window_attack_l; - dummy_anim_ref = %ai_zombie_bus_front_window_attack_r; - dummy_anim_ref = %ai_zombie_bus_window_climbup_from_l; - dummy_anim_ref = %ai_zombie_bus_window_climbup_from_r; - dummy_anim_ref = %ai_zombie_bus_window_dismount_l; - dummy_anim_ref = %ai_zombie_bus_window_dismount_r; - dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_l; - dummy_anim_ref = %ai_zombie_crawl_bus_window_dismount_r; - dummy_anim_ref = %ai_zombie_bus_front_window_dismount_l; - dummy_anim_ref = %ai_zombie_bus_front_window_dismount_r; - dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_l; - dummy_anim_ref = %ai_zombie_crawl_bus_front_window_dismount_r; - dummy_anim_ref = %ai_zombie_bus_window_exit_back_l; - dummy_anim_ref = %ai_zombie_bus_window_exit_back_r; - dummy_anim_ref = %ai_zombie_bus_window_exit_front; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_l; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_back_r; - dummy_anim_ref = %ai_zombie_crawl_bus_window_exit_front; - dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_b; - dummy_anim_ref = %ai_zombie_jump_up_bus_hatch_to_f; - dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_b; - dummy_anim_ref = %ai_zombie_jump_down_bus_hatch_from_f; - dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_b; - dummy_anim_ref = %ai_zombie_crawl_jump_up_bus_hatch_to_f; - dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_b; - dummy_anim_ref = %ai_zombie_crawl_jump_down_bus_hatch_from_f; - dummy_anim_ref = %ai_zombie_bus_front_window_climbup_from_inside; - dummy_anim_ref = %ai_zombie_bus_rear_window_climbup_from_inside; - dummy_anim_ref = %ai_zombie_sprint_v6; - dummy_anim_ref = %ai_zombie_sprint_v7; - dummy_anim_ref = %ai_zombie_sprint_v8; - dummy_anim_ref = %ai_zombie_sprint_v9; - dummy_anim_ref = %ai_zombie_sprint_v10; - dummy_anim_ref = %ai_zombie_sprint_v11; - dummy_anim_ref = %ai_zombie_sprint_v12; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_slow_v3; - dummy_anim_ref = %ai_zombie_jetgun_walk_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_v3; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v1; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v2; - dummy_anim_ref = %ai_zombie_jetgun_walk_fast_v3; - dummy_anim_ref = %ai_zombie_jetgun_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_death_v3; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v1; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v2; - dummy_anim_ref = %ai_zombie_jetgun_sprint_v3; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_sprint_death_v3; - dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_slow_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_fast_v3; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v1; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v2; - dummy_anim_ref = %ai_zombie_jetgun_crawl_death_v3; - dummy_anim_ref = %ai_zombie_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_riotshield_breakthrough_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_loop_v1; - dummy_anim_ref = %ai_zombie_crawl_riotshield_breakthrough_v1; -} - -main() -{ - self.accuracy = 1; - self.animstatedef = "zm_transit_basic.asd"; - self.animtree = "zm_transit_basic.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 60; - self.demolockonviewheightoffset2 = 30; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = -15; - self.demolockonviewpitchmin2 = -5; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie"; - self.weapon = ""; - self setengagementmindist( 0, 0 ); - self setengagementmaxdist( 100, 300 ); - randchar = codescripts/character::get_random_character( 3 ); - switch( randchar ) - { - case 0: - character/c_zom_zombie8_01::main(); - break; - case 1: - character/c_zom_zombie8_02::main(); - break; - case 2: - character/c_zom_zombie8_03::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_transit_basic" ); - character/c_zom_zombie8_01::precache(); - character/c_zom_zombie8_02::precache(); - character/c_zom_zombie8_03::precache(); -} diff --git a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/aitype/zombie_dog.gsc b/Zombie Maps/Tranzit/so_zsurvival_zm_transit/aitype/zombie_dog.gsc deleted file mode 100644 index cccca33..0000000 --- a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/aitype/zombie_dog.gsc +++ /dev/null @@ -1,94 +0,0 @@ -#include codescripts/character; - -#using_animtree( "zm_transit_dog" ); - -reference_anims_from_animtree() -{ - dummy_anim_ref = %zombie_dog_idle; - dummy_anim_ref = %zombie_dog_attackidle_growl; - dummy_anim_ref = %zombie_dog_attackidle; - dummy_anim_ref = %zombie_dog_attackidle_bark; - dummy_anim_ref = %zombie_dog_run_stop; - dummy_anim_ref = %zombie_dog_run; - dummy_anim_ref = %zombie_dog_trot; - dummy_anim_ref = %zombie_dog_run_start; - dummy_anim_ref = %zombie_dog_turn_90_left; - dummy_anim_ref = %zombie_dog_turn_90_right; - dummy_anim_ref = %zombie_dog_turn_180_left; - dummy_anim_ref = %zombie_dog_turn_180_right; - dummy_anim_ref = %zombie_dog_run_turn_90_left; - dummy_anim_ref = %zombie_dog_run_turn_90_right; - dummy_anim_ref = %zombie_dog_run_turn_180_left; - dummy_anim_ref = %zombie_dog_run_turn_180_right; - dummy_anim_ref = %zombie_dog_death_front; - dummy_anim_ref = %zombie_dog_death_hit_back; - dummy_anim_ref = %zombie_dog_death_hit_left; - dummy_anim_ref = %zombie_dog_death_hit_right; - dummy_anim_ref = %zombie_dog_run_attack; - dummy_anim_ref = %zombie_dog_run_attack_low; - dummy_anim_ref = %ai_zombie_dog_traverse_car; - dummy_anim_ref = %ai_zombie_dog_traverse_car_pass_to_driver; - dummy_anim_ref = %zombie_dog_traverse_down_40; - dummy_anim_ref = %zombie_dog_traverse_down_96; - dummy_anim_ref = %zombie_dog_traverse_down_126; - dummy_anim_ref = %zombie_dog_traverse_down_190; - dummy_anim_ref = %zombie_dog_traverse_up_40; - dummy_anim_ref = %zombie_dog_traverse_up_80; - dummy_anim_ref = %ai_zombie_dog_jump_across_120; - dummy_anim_ref = %zombie_dog_traverse_down_127; - dummy_anim_ref = %zombie_dog_traverse_up_127; -} - -main() -{ - self.accuracy = 0,2; - self.animstatedef = "zm_transit_dog.asd"; - self.animtree = "zm_transit_dog.atr"; - self.csvinclude = ""; - self.demolockonhighlightdistance = 100; - self.demolockonviewheightoffset1 = 8; - self.demolockonviewheightoffset2 = 8; - self.demolockonviewpitchmax1 = 60; - self.demolockonviewpitchmax2 = 60; - self.demolockonviewpitchmin1 = 0; - self.demolockonviewpitchmin2 = 0; - self.footstepfxtable = ""; - self.footstepprepend = ""; - self.footstepscriptcallback = 0; - self.grenadeammo = 0; - self.grenadeweapon = ""; - self.health = 200; - self.precachescript = ""; - self.secondaryweapon = ""; - self.sidearm = ""; - self.subclass = "regular"; - self.team = "axis"; - self.type = "zombie_dog"; - self.weapon = ""; - self setengagementmindist( 256, 0 ); - self setengagementmaxdist( 768, 1024 ); - randchar = codescripts/character::get_random_character( 2 ); - switch( randchar ) - { - case 0: - character/character_sp_zombie_dog::main(); - break; - case 1: - character/character_sp_zombie_dog::main(); - break; - } - self setcharacterindex( randchar ); -} - -spawner() -{ - self setspawnerteam( "axis" ); -} - -precache( ai_index ) -{ - level thread reference_anims_from_animtree(); - precacheanimstatedef( ai_index, -1, "zm_transit_dog" ); - character/character_sp_zombie_dog::precache(); - character/character_sp_zombie_dog::precache(); -} diff --git a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_transit_player_engineer.gsc b/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_transit_player_engineer.gsc deleted file mode 100644 index b123803..0000000 --- a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_transit_player_engineer.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_engineer_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_engineer_fb" ); -} diff --git a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_transit_player_farmgirl.gsc b/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_transit_player_farmgirl.gsc deleted file mode 100644 index 05c38e9..0000000 --- a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_transit_player_farmgirl.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_farmgirl_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_farmgirl_fb" ); -} diff --git a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_transit_player_oldman.gsc b/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_transit_player_oldman.gsc deleted file mode 100644 index 5d5f2c5..0000000 --- a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_transit_player_oldman.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_oldman_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_oldman_fb" ); -} diff --git a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_transit_player_reporter.gsc b/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_transit_player_reporter.gsc deleted file mode 100644 index 71e8021..0000000 --- a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_transit_player_reporter.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "c_zom_player_reporter_fb" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "c_zom_player_reporter_fb" ); -} diff --git a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie1_01.gsc b/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie1_01.gsc deleted file mode 100644 index de7fc13..0000000 --- a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie1_01.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie1_body01" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie1_body01_g_upclean"; - self.torsodmg2 = "c_zom_zombie1_body01_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie1_body01_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie1_body01_g_lowclean"; - self.legdmg2 = "c_zom_zombie1_body01_g_rlegoff"; - self.legdmg3 = "c_zom_zombie1_body01_g_llegoff"; - self.legdmg4 = "c_zom_zombie1_body01_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie1_body01" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie1_body01_g_upclean" ); - precachemodel( "c_zom_zombie1_body01_g_rarmoff" ); - precachemodel( "c_zom_zombie1_body01_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie1_body01_g_lowclean" ); - precachemodel( "c_zom_zombie1_body01_g_rlegoff" ); - precachemodel( "c_zom_zombie1_body01_g_llegoff" ); - precachemodel( "c_zom_zombie1_body01_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie_g_rlegspawn" ); - precachemodel( "c_zom_zombie_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie1_02.gsc b/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie1_02.gsc deleted file mode 100644 index 09fc308..0000000 --- a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie1_02.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie1_body02" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie1_body02_g_upclean"; - self.torsodmg2 = "c_zom_zombie1_body02_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie1_body02_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie1_body02_g_lowclean"; - self.legdmg2 = "c_zom_zombie1_body02_g_rlegoff"; - self.legdmg3 = "c_zom_zombie1_body02_g_llegoff"; - self.legdmg4 = "c_zom_zombie1_body02_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie1_body02" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie1_body02_g_upclean" ); - precachemodel( "c_zom_zombie1_body02_g_rarmoff" ); - precachemodel( "c_zom_zombie1_body02_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie1_body02_g_lowclean" ); - precachemodel( "c_zom_zombie1_body02_g_rlegoff" ); - precachemodel( "c_zom_zombie1_body02_g_llegoff" ); - precachemodel( "c_zom_zombie1_body02_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie_g_rlegspawn" ); - precachemodel( "c_zom_zombie_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie5_01.gsc b/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie5_01.gsc deleted file mode 100644 index 77f1388..0000000 --- a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie5_01.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie5_body01" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie5_body01_g_upclean"; - self.torsodmg2 = "c_zom_zombie5_body01_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie5_body01_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie5_body01_g_lowclean"; - self.legdmg2 = "c_zom_zombie5_body01_g_rlegoff"; - self.legdmg3 = "c_zom_zombie5_body01_g_llegoff"; - self.legdmg4 = "c_zom_zombie5_body01_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie5_body01" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie5_body01_g_upclean" ); - precachemodel( "c_zom_zombie5_body01_g_rarmoff" ); - precachemodel( "c_zom_zombie5_body01_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie5_body01_g_lowclean" ); - precachemodel( "c_zom_zombie5_body01_g_rlegoff" ); - precachemodel( "c_zom_zombie5_body01_g_llegoff" ); - precachemodel( "c_zom_zombie5_body01_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie_g_rlegspawn" ); - precachemodel( "c_zom_zombie_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie5_02.gsc b/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie5_02.gsc deleted file mode 100644 index 71035ea..0000000 --- a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie5_02.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie5_body02" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie5_body02_g_upclean"; - self.torsodmg2 = "c_zom_zombie5_body02_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie5_body02_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie5_body02_g_lowclean"; - self.legdmg2 = "c_zom_zombie5_body02_g_rlegoff"; - self.legdmg3 = "c_zom_zombie5_body02_g_llegoff"; - self.legdmg4 = "c_zom_zombie5_body02_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie5_body02" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie5_body02_g_upclean" ); - precachemodel( "c_zom_zombie5_body02_g_rarmoff" ); - precachemodel( "c_zom_zombie5_body02_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie5_body02_g_lowclean" ); - precachemodel( "c_zom_zombie5_body02_g_rlegoff" ); - precachemodel( "c_zom_zombie5_body02_g_llegoff" ); - precachemodel( "c_zom_zombie5_body02_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie_g_rlegspawn" ); - precachemodel( "c_zom_zombie_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie5_03.gsc b/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie5_03.gsc deleted file mode 100644 index 5a0dbae..0000000 --- a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie5_03.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie5_body03" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie5_body03_g_upclean"; - self.torsodmg2 = "c_zom_zombie5_body03_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie5_body03_g_larmoff"; - self.torsodmg5 = "c_zom_zombie2_body01_g_behead"; - self.legdmg1 = "c_zom_zombie5_body03_g_lowclean"; - self.legdmg2 = "c_zom_zombie5_body03_g_rlegoff"; - self.legdmg3 = "c_zom_zombie5_body03_g_llegoff"; - self.legdmg4 = "c_zom_zombie5_body03_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie5_body03" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_head_als::main() ); - precachemodel( "c_zom_zombie5_body03_g_upclean" ); - precachemodel( "c_zom_zombie5_body03_g_rarmoff" ); - precachemodel( "c_zom_zombie5_body03_g_larmoff" ); - precachemodel( "c_zom_zombie2_body01_g_behead" ); - precachemodel( "c_zom_zombie5_body03_g_lowclean" ); - precachemodel( "c_zom_zombie5_body03_g_rlegoff" ); - precachemodel( "c_zom_zombie5_body03_g_llegoff" ); - precachemodel( "c_zom_zombie5_body03_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie_g_rlegspawn" ); - precachemodel( "c_zom_zombie_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie8_01.gsc b/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie8_01.gsc deleted file mode 100644 index 7662178..0000000 --- a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie8_01.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie8_body01" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_female_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie8_body01_g_upclean"; - self.torsodmg2 = "c_zom_zombie8_body01_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie8_body01_g_larmoff"; - self.torsodmg5 = "c_zom_zombie8_body01_g_behead"; - self.legdmg1 = "c_zom_zombie8_body01_g_lowclean"; - self.legdmg2 = "c_zom_zombie8_body01_g_rlegoff"; - self.legdmg3 = "c_zom_zombie8_body01_g_llegoff"; - self.legdmg4 = "c_zom_zombie8_body01_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie8_body01" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_female_head_als::main() ); - precachemodel( "c_zom_zombie8_body01_g_upclean" ); - precachemodel( "c_zom_zombie8_body01_g_rarmoff" ); - precachemodel( "c_zom_zombie8_body01_g_larmoff" ); - precachemodel( "c_zom_zombie8_body01_g_behead" ); - precachemodel( "c_zom_zombie8_body01_g_lowclean" ); - precachemodel( "c_zom_zombie8_body01_g_rlegoff" ); - precachemodel( "c_zom_zombie8_body01_g_llegoff" ); - precachemodel( "c_zom_zombie8_body01_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie_g_rlegspawn" ); - precachemodel( "c_zom_zombie_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie8_02.gsc b/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie8_02.gsc deleted file mode 100644 index 685213b..0000000 --- a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie8_02.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie8_body02" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_female_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie8_body02_g_upclean"; - self.torsodmg2 = "c_zom_zombie8_body02_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie8_body02_g_larmoff"; - self.torsodmg5 = "c_zom_zombie8_body01_g_behead"; - self.legdmg1 = "c_zom_zombie8_body02_g_lowclean"; - self.legdmg2 = "c_zom_zombie8_body02_g_rlegoff"; - self.legdmg3 = "c_zom_zombie8_body02_g_llegoff"; - self.legdmg4 = "c_zom_zombie8_body02_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie8_body02" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_female_head_als::main() ); - precachemodel( "c_zom_zombie8_body02_g_upclean" ); - precachemodel( "c_zom_zombie8_body02_g_rarmoff" ); - precachemodel( "c_zom_zombie8_body02_g_larmoff" ); - precachemodel( "c_zom_zombie8_body01_g_behead" ); - precachemodel( "c_zom_zombie8_body02_g_lowclean" ); - precachemodel( "c_zom_zombie8_body02_g_rlegoff" ); - precachemodel( "c_zom_zombie8_body02_g_llegoff" ); - precachemodel( "c_zom_zombie8_body02_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie_g_rlegspawn" ); - precachemodel( "c_zom_zombie_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie8_03.gsc b/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie8_03.gsc deleted file mode 100644 index b09838b..0000000 --- a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/c_zom_zombie8_03.gsc +++ /dev/null @@ -1,44 +0,0 @@ -#include codescripts/character; - -main() -{ - self setmodel( "c_zom_zombie8_body03" ); - self.headmodel = codescripts/character::randomelement( xmodelalias/c_zom_zombie_female_head_als::main() ); - self attach( self.headmodel, "", 1 ); - self.voice = "american"; - self.skeleton = "base"; - self.torsodmg1 = "c_zom_zombie8_body03_g_upclean"; - self.torsodmg2 = "c_zom_zombie8_body03_g_rarmoff"; - self.torsodmg3 = "c_zom_zombie8_body03_g_larmoff"; - self.torsodmg5 = "c_zom_zombie8_body01_g_behead"; - self.legdmg1 = "c_zom_zombie8_body03_g_lowclean"; - self.legdmg2 = "c_zom_zombie8_body03_g_rlegoff"; - self.legdmg3 = "c_zom_zombie8_body03_g_llegoff"; - self.legdmg4 = "c_zom_zombie8_body03_g_legsoff"; - self.gibspawn1 = "c_zom_zombie_g_rarmspawn"; - self.gibspawntag1 = "J_Elbow_RI"; - self.gibspawn2 = "c_zom_zombie_g_larmspawn"; - self.gibspawntag2 = "J_Elbow_LE"; - self.gibspawn3 = "c_zom_zombie_g_rlegspawn"; - self.gibspawntag3 = "J_Knee_RI"; - self.gibspawn4 = "c_zom_zombie_g_llegspawn"; - self.gibspawntag4 = "J_Knee_LE"; -} - -precache() -{ - precachemodel( "c_zom_zombie8_body03" ); - codescripts/character::precachemodelarray( xmodelalias/c_zom_zombie_female_head_als::main() ); - precachemodel( "c_zom_zombie8_body03_g_upclean" ); - precachemodel( "c_zom_zombie8_body03_g_rarmoff" ); - precachemodel( "c_zom_zombie8_body03_g_larmoff" ); - precachemodel( "c_zom_zombie8_body01_g_behead" ); - precachemodel( "c_zom_zombie8_body03_g_lowclean" ); - precachemodel( "c_zom_zombie8_body03_g_rlegoff" ); - precachemodel( "c_zom_zombie8_body03_g_llegoff" ); - precachemodel( "c_zom_zombie8_body03_g_legsoff" ); - precachemodel( "c_zom_zombie_g_rarmspawn" ); - precachemodel( "c_zom_zombie_g_larmspawn" ); - precachemodel( "c_zom_zombie_g_rlegspawn" ); - precachemodel( "c_zom_zombie_g_llegspawn" ); -} diff --git a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/character_sp_zombie_dog.gsc b/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/character_sp_zombie_dog.gsc deleted file mode 100644 index 1b84c96..0000000 --- a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/character/character_sp_zombie_dog.gsc +++ /dev/null @@ -1,12 +0,0 @@ - -main() -{ - self setmodel( "zombie_wolf" ); - self.voice = "american"; - self.skeleton = "base"; -} - -precache() -{ - precachemodel( "zombie_wolf" ); -} diff --git a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/xmodelalias/c_zom_zombie_female_head_als.gsc b/Zombie Maps/Tranzit/so_zsurvival_zm_transit/xmodelalias/c_zom_zombie_female_head_als.gsc deleted file mode 100644 index d1f24eb..0000000 --- a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/xmodelalias/c_zom_zombie_female_head_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_head_d"; - a[ 1 ] = "c_zom_zombie_head_f"; - a[ 2 ] = "c_zom_zombie_head_d2"; - a[ 3 ] = "c_zom_zombie_head_f2"; - return a; -} diff --git a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/xmodelalias/c_zom_zombie_head_als.gsc b/Zombie Maps/Tranzit/so_zsurvival_zm_transit/xmodelalias/c_zom_zombie_head_als.gsc deleted file mode 100644 index 6aeadb2..0000000 --- a/Zombie Maps/Tranzit/so_zsurvival_zm_transit/xmodelalias/c_zom_zombie_head_als.gsc +++ /dev/null @@ -1,9 +0,0 @@ - -main() -{ - a[ 0 ] = "c_zom_zombie_head_k"; - a[ 1 ] = "c_zom_zombie_head_l"; - a[ 2 ] = "c_zom_zombie_head_n"; - a[ 3 ] = "c_zom_zombie_head_a"; - return a; -} diff --git a/Zombie Maps/Tranzit/zm_transit/maps/mp/teams/_teamset_cdc.gsc b/Zombie Maps/Tranzit/zm_transit/maps/mp/teams/_teamset_cdc.gsc deleted file mode 100644 index 62ec842..0000000 --- a/Zombie Maps/Tranzit/zm_transit/maps/mp/teams/_teamset_cdc.gsc +++ /dev/null @@ -1,51 +0,0 @@ - -register() -{ - game[ "teamset" ] = []; - game[ "teamset" ][ "cdc" ] = ::cdc; -} - -level_init() -{ - game[ "allies" ] = "cdc"; - game[ "axis" ] = "cia"; - setdvar( "g_TeamName_Allies", &"ZMUI_CDC_SHORT" ); - setdvar( "g_TeamName_Axis", &"ZMUI_CIA_SHORT" ); - game[ "strings" ][ "allies_win" ] = &"ZM_CDC_WIN_MATCH"; - game[ "strings" ][ "allies_win_round" ] = &"ZM_CDC_WIN_ROUND"; - game[ "strings" ][ "allies_mission_accomplished" ] = &"ZM_CDC_MISSION_ACCOMPLISHED"; - game[ "strings" ][ "allies_eliminated" ] = &"ZM_CDC_ELIMINATED"; - game[ "strings" ][ "allies_forfeited" ] = &"ZM_CDC_FORFEITED"; - game[ "strings" ][ "allies_name" ] = &"ZM_CDC_NAME"; - game[ "music" ][ "spawn_allies" ] = "SPAWN_OPS"; - game[ "music" ][ "victory_allies" ] = "mus_victory_usa"; - game[ "icons" ][ "allies" ] = "faction_cdc"; - game[ "colors" ][ "allies" ] = ( 0, 0, 0 ); - game[ "voice" ][ "allies" ] = "vox_st6_"; - setdvar( "scr_allies", "marines" ); - game[ "strings" ][ "axis_win" ] = &"ZM_CIA_WIN_MATCH"; - game[ "strings" ][ "axis_win_round" ] = &"ZM_CIA_WIN_ROUND"; - game[ "strings" ][ "axis_mission_accomplished" ] = &"ZM_CIA_MISSION_ACCOMPLISHED"; - game[ "strings" ][ "axis_eliminated" ] = &"ZM_CIA_ELIMINATED"; - game[ "strings" ][ "axis_forfeited" ] = &"ZM_CIA_FORFEITED"; - game[ "strings" ][ "axis_name" ] = &"ZM_CIA_NAME"; - game[ "music" ][ "spawn_axis" ] = "SPAWN_RUS"; - game[ "music" ][ "victory_axis" ] = "mus_victory_soviet"; - game[ "icons" ][ "axis" ] = "faction_cia"; - game[ "colors" ][ "axis" ] = ( 0,65, 0,57, 0,41 ); - game[ "voice" ][ "axis" ] = "vox_pmc_"; -} - -cdc() -{ - allies(); - axis(); -} - -allies() -{ -} - -axis() -{ -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_climb_down_pothole.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_climb_down_pothole.gsc deleted file mode 100644 index 040e341..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_climb_down_pothole.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "climb_down_pothole" ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_climb_up_pothole.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_climb_up_pothole.gsc deleted file mode 100644 index ac83e22..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_climb_up_pothole.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "climb_up_pothole" ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_across_120.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_across_120.gsc deleted file mode 100644 index 0e8b6df..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_across_120.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_across_120" ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc deleted file mode 100644 index 8bd9a0e..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_127" ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_down_190.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_down_190.gsc deleted file mode 100644 index 203cc96..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_down_190.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_190" ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_down_222.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_down_222.gsc deleted file mode 100644 index ff54012..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_down_222.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_222" ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_down_48.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_down_48.gsc deleted file mode 100644 index 8269b0e..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_down_48.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_down_48" ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc deleted file mode 100644 index e32a251..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc +++ /dev/null @@ -1,14 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - if ( isDefined( self.isdog ) && self.isdog ) - { - dog_jump_down( 96, 7 ); - } - else - { - dosimpletraverse( "jump_down_96" ); - } -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc deleted file mode 100644 index 06cec96..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_127" ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_up_222.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_up_222.gsc deleted file mode 100644 index 793683d..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_jump_up_222.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "jump_up_222" ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc deleted file mode 100644 index e97cc4a..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_mantle_over_40_hurdle.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - self dosimpletraverse( "mantle_over_40_hurdle" ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_car.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_car.gsc deleted file mode 100644 index 218c2f0..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_car.gsc +++ /dev/null @@ -1,29 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - speed = ""; - if ( !isDefined( self.isdog ) || !self.isdog ) - { - switch( self.zombie_move_speed ) - { - case "walk": - case "walk_slide": - speed = ""; - break; - case "run": - case "run_slide": - speed = "_run"; - break; - case "sprint": - case "sprint_slide": - case "super_sprint": - speed = "_sprint"; - break; - default: - } - } - dosimpletraverse( "traverse_car" + speed, 1 ); - } -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_car_reverse.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_car_reverse.gsc deleted file mode 100644 index 9a6ea5d..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_car_reverse.gsc +++ /dev/null @@ -1,21 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - speed = ""; - if ( !self.has_legs ) - { - switch( self.zombie_move_speed ) - { - case "sprint": - case "sprint_slide": - case "super_sprint": - speed = "_sprint"; - break; - default: - } - } - dosimpletraverse( "traverse_car_reverse" + speed, 1 ); - } -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_diner_counter.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_diner_counter.gsc deleted file mode 100644 index ea9b6f4..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_diner_counter.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "traverse_diner_counter", 1 ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_diner_counter_reverse.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_diner_counter_reverse.gsc deleted file mode 100644 index 4f62d03..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_diner_counter_reverse.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "traverse_diner_counter_reverse", 1 ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_diner_roof.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_diner_roof.gsc deleted file mode 100644 index 641946a..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_diner_roof.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "traverse_diner_roof" ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_diner_roof_hatch_up.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_diner_roof_hatch_up.gsc deleted file mode 100644 index 0e256e6..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_diner_roof_hatch_up.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "traverse_diner_roof_hatch_up" ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_diner_roof_up.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_diner_roof_up.gsc deleted file mode 100644 index 0fb5a5a..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_diner_roof_up.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "traverse_diner_roof_up" ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_garage_door.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_garage_door.gsc deleted file mode 100644 index ace7bd7..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/animscripts/traverse/zm_traverse_garage_door.gsc +++ /dev/null @@ -1,7 +0,0 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; - -main() -{ - dosimpletraverse( "traverse_garage_door", 1 ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/createart/zm_transit_art.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/createart/zm_transit_art.gsc deleted file mode 100644 index 424f365..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/createart/zm_transit_art.gsc +++ /dev/null @@ -1,44 +0,0 @@ - -main() -{ - level.tweakfile = 1; - setdvar( "scr_fog_exp_halfplane", "639.219" ); - setdvar( "scr_fog_exp_halfheight", "18691.3" ); - setdvar( "scr_fog_nearplane", "138.679" ); - setdvar( "scr_fog_red", "0.806694" ); - setdvar( "scr_fog_green", "0.962521" ); - setdvar( "scr_fog_blue", "0.9624" ); - setdvar( "scr_fog_baseheight", "1145.21" ); - setdvar( "visionstore_glowTweakEnable", "0" ); - setdvar( "visionstore_glowTweakRadius0", "5" ); - setdvar( "visionstore_glowTweakRadius1", "" ); - setdvar( "visionstore_glowTweakBloomCutoff", "0.5" ); - setdvar( "visionstore_glowTweakBloomDesaturation", "0" ); - setdvar( "visionstore_glowTweakBloomIntensity0", "1" ); - setdvar( "visionstore_glowTweakBloomIntensity1", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity0", "" ); - setdvar( "visionstore_glowTweakSkyBleedIntensity1", "" ); - start_dist = 138,679; - half_dist = 1011,624; - half_height = 10834,5; - base_height = 1145,21; - fog_r = 0,501961; - fog_g = 0,501961; - fog_b = 0,501961; - fog_scale = 7,5834; - sun_col_r = 0,501961; - sun_col_g = 0,501961; - sun_col_b = 0,501961; - sun_dir_x = -0,99; - sun_dir_y = 0,06; - sun_dir_z = -0,11; - sun_start_ang = 0; - sun_stop_ang = 0; - time = 0; - max_fog_opacity = 0,8546; - setvolfog( start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale, sun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, sun_stop_ang, time, max_fog_opacity ); - visionsetnaked( "zm_transit", 0 ); - setdvar( "r_lightGridEnableTweaks", 1 ); - setdvar( "r_lightGridIntensity", 1,4 ); - setdvar( "r_lightGridContrast", 0,2 ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/createfx/zm_transit_fx.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/createfx/zm_transit_fx.gsc deleted file mode 100644 index 898866f..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/createfx/zm_transit_fx.gsc +++ /dev/null @@ -1,3930 +0,0 @@ -#include maps/mp/_utility; - -main() -{ - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_thick_1200x600" ); - ent.v[ "origin" ] = ( -5964,8, 5958,68, -56,5457 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 278 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_thick_1200x600" ); - ent.v[ "origin" ] = ( -7115,4, 6131,36, -52 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 263 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_thick_1200x600" ); - ent.v[ "origin" ] = ( -8140,71, 6172, -40,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 281 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); - ent.v[ "origin" ] = ( -5614,79, -6468,82, -39,2142 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 264 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); - ent.v[ "origin" ] = ( -4165,66, -6434,5, -21,0351 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 268 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -6463,47, 4442,16, -54,2825 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -8085,35, 5126,36, -55,5562 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -5441,89, 2910,1, 86,6898 ); - ent.v[ "angles" ] = ( 0, 181, 4 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -5012,74, 4,19914, 92,9997 ); - ent.v[ "angles" ] = ( 360, 237, -5 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_1000x1000" ); - ent.v[ "origin" ] = ( -5294,92, 1435,37, 193 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -8375,91, -6880,29, 169,426 ); - ent.v[ "angles" ] = ( 0, 62, 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -693,86, -434,302, -62 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 1307,61, -433,515, -61,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 3301,23, -433,48, -61,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 1443,74, -1912,92, -49,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 1496,75, 951,473, -61,75 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 2317,07, 2920,76, -61,1957 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 326 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 4034,7, 4213,02, -121,687 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 291 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 5863,49, 4856,8, -90,6416 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 165 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 6425,89, 6793,82, -244,747 ); - ent.v[ "angles" ] = ( 0, 165, 6 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 7658,88, 8594,01, -462,611 ); - ent.v[ "angles" ] = ( 0,7299, 115,044, 6,96203 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 9492,26, 8859,12, -575,761 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 10248, 7411,77, -572,63 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 9370,34, 6265,97, -566,254 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 9363,72, 5259,97, -561,195 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 8247,62, 3780,29, -204,463 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 9 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 8454,29, 1816,51, -91,9754 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 12 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_1000x1000" ); - ent.v[ "origin" ] = ( -9435,63, 3725,57, 129,632 ); - ent.v[ "angles" ] = ( 0, 328, -8 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -6295,03, -6855,52, -43,3133 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -5503,32, -5950,27, -33,7949 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -4278,1, -6853,2, -47,9013 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -2226,38, -6476,4, -111,832 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 151 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -430,571, -4777,94, -61 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 1354,92, -4343,55, 8,28402 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 154 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 2374,83, -5587,02, 2,17561 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 263 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 6376,43, -6175,54, -33,8548 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 263 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 8345,75, -6327,09, 106,432 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 226 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 10086,9, -6470,41, 118 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 354 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 7864,23, -7747,09, -22,7953 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 236 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 7372,48, -4745,95, -16,153 ); - ent.v[ "angles" ] = ( 5, 177, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 6344,74, -4691,46, -51,8628 ); - ent.v[ "angles" ] = ( 360, 177, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 7338,11, -2595,86, -111,322 ); - ent.v[ "angles" ] = ( 359,907, 136,037, 4,87958 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 8825, -1201,03, -194,996 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 131 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 9725,72, -1742,09, -32,561 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 131 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 8174,97, -105,473, -61,5243 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 297 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 7784,83, 6029,76, -345,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 155 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_1000x1000" ); - ent.v[ "origin" ] = ( 4116,25, 5645,36, -1 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 98 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_1000x1000" ); - ent.v[ "origin" ] = ( -5802,88, 5634,9, 84,3632 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 360 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_thick_1200x600" ); - ent.v[ "origin" ] = ( -5148,4, 4832,7, 0,312576 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 200 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -5934,56, 4918,4, -62,8867 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 187 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -6027,78, 5040,17, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 242 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -6079,08, 5289,99, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 144 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -7600,2, 4227,16, -56,4433 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 46 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -8537,89, 4162,49, -12,8317 ); - ent.v[ "angles" ] = ( 360, 140, 10 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -8467,74, 4197,83, -25,7767 ); - ent.v[ "angles" ] = ( 0, 88, 5 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -8667,97, 4150,55, 4,24724 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 63 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -5642,84, 5224,15, -46,4991 ); - ent.v[ "angles" ] = ( 4, 190, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -5655,12, 5116,59, -45,489 ); - ent.v[ "angles" ] = ( 3,28795, 202,949, 2,74547 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -8029,04, 3834,02, -0,54985 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -7892,28, 3799,24, -3,22023 ); - ent.v[ "angles" ] = ( 0, 353, -6 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); - ent.v[ "origin" ] = ( 10156,4, 7081,81, -569,368 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 94 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -7670,71, 4400,04, -52,4712 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 25 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -7632,2, 4335,27, -53,4487 ); - ent.v[ "angles" ] = ( 8,99508, 3,31666, 2,0246 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( -6662,13, 4291,07, -64 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( -6154,93, 4677,49, -57,6558 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 332 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( -7509,32, 4764,04, -61 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( -6443,25, 5252,53, -46,875 ); - ent.v[ "angles" ] = ( 4,46701, 145,564, -11,1489 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( -7010,67, 5058,05, -46,875 ); - ent.v[ "angles" ] = ( 0, 30, -4 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( -6236,39, 5096,6, -64,875 ); - ent.v[ "angles" ] = ( 337, 270, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( -6263,69, 5186,76, -110,875 ); - ent.v[ "angles" ] = ( 337, 270, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( -6935,05, 3992,15, -44,575 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 54 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( -6387,72, 5200,47, -45,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 111 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( -6228,73, 5271,98, -138,875 ); - ent.v[ "angles" ] = ( 0, 320, 26 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( -7025,25, 5020,08, -47,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 12 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( -6990,59, 3917,48, -35,575 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 28 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); - ent.v[ "origin" ] = ( -6482,02, -6922,66, -20,2632 ); - ent.v[ "angles" ] = ( 5,58951, 0,151229, -1,77637 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_right_border" ); - ent.v[ "origin" ] = ( -3783,49, -6804,15, -57,0054 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 189 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); - ent.v[ "origin" ] = ( -5772,58, 4495,25, -45,7761 ); - ent.v[ "angles" ] = ( 4,55882, 136,126, 0,230205 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( -6664,46, 4282,63, -63 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( -6419,69, 5968, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 182 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( -6794,75, 5895,12, -63 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 176 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( -7130,02, 5875,24, -61 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 176 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( -7035,44, 6092,55, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 176 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = 30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( -7019,59, 4360,48, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 156 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -7984,94, 4200,7, -40,8316 ); - ent.v[ "angles" ] = ( 359,649, 23,5878, -7,38978 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -6164,4, 6207,33, -62 ); - ent.v[ "angles" ] = ( 0, 265, 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -6611,77, 6255,7, -64,056 ); - ent.v[ "angles" ] = ( 355,996, 257,157, 2,98491 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -5905,66, 6053,11, -62,1083 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 243 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -7777,88, 5432,39, -67,6399 ); - ent.v[ "angles" ] = ( 20,9872, 250,768, 2,14186 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -8977,1, 4620,45, -7,94255 ); - ent.v[ "angles" ] = ( 0, 328, -8 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -9194,46, 4472,11, 27,7692 ); - ent.v[ "angles" ] = ( 358,071, 314,131, -11,7653 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -9968,48, 3966,82, 141,149 ); - ent.v[ "angles" ] = ( 360, 320, -2 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -9330,22, 3636,74, 143,33 ); - ent.v[ "angles" ] = ( 1,2114, 128,06, 6,8825 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_flicker" ); - ent.v[ "origin" ] = ( -7058,84, 5241,95, 114,025 ); - ent.v[ "angles" ] = ( 304, 90, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -6702,67, 4030,74, -21,2888 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -7174,47, 4179,63, 52 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); - ent.v[ "origin" ] = ( 1543,09, 1046,91, -49 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 262 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); - ent.v[ "origin" ] = ( -7823,94, 4726,57, -55,4636 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 349 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( -6255,49, 5934,51, -55 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 267 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( -7111,76, 5851,47, -42 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 267 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( -6651,29, 3918,42, -41 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 93 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_thick_600x600" ); - ent.v[ "origin" ] = ( -6584,17, 3681,87, -4,99999 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_thick_600x600" ); - ent.v[ "origin" ] = ( -7886,28, 3889,4, 82,5849 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_depot_map_flicker" ); - ent.v[ "origin" ] = ( -6713,64, 5321,71, -9,66086 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 45 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_depot_map_flicker" ); - ent.v[ "origin" ] = ( -6723,23, 5313,91, -8,18646 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 225 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety" ); - ent.v[ "origin" ] = ( -6365,04, 4578,04, 109,9 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 100; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -5517,59, 5241,44, -11 ); - ent.v[ "angles" ] = ( 28, 182, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_50x50_sm" ); - ent.v[ "origin" ] = ( -6758,41, 4766,59, -92,7686 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_50x50_sm" ); - ent.v[ "origin" ] = ( -6689,7, 4768,01, -92,7002 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 176 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -5980,96, 6261,54, -36,3953 ); - ent.v[ "angles" ] = ( 0, 175, -8 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -5845,6, 6191,34, -35,9 ); - ent.v[ "angles" ] = ( 358,005, 179,002, -0,139585 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_50x50_sm" ); - ent.v[ "origin" ] = ( -7810,49, 5420,54, -74,2103 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 154 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_50x50_sm" ); - ent.v[ "origin" ] = ( -7819,04, 4111,9, -37,6549 ); - ent.v[ "angles" ] = ( 12,9361, 13,2884, -8,13303 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_spark_ext_runner" ); - ent.v[ "origin" ] = ( -7674,39, 5156,76, 166,697 ); - ent.v[ "angles" ] = ( 63, 269, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 500; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_dbl_glow" ); - ent.v[ "origin" ] = ( -6801,44, 5517,77, 76,125 ); - ent.v[ "angles" ] = ( 330, 180, -90 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); - ent.v[ "origin" ] = ( -6583,75, 5403,93, -32,875 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -300; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); - ent.v[ "origin" ] = ( -6968,95, 5308,98, -32,875 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -360; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_column_lrg" ); - ent.v[ "origin" ] = ( -6197,68, 3183,08, 15 ); - ent.v[ "angles" ] = ( 271, 187, -84 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_column_lrg" ); - ent.v[ "origin" ] = ( -4725,65, 4685,73, 338,88 ); - ent.v[ "angles" ] = ( 271, 97, 72 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); - ent.v[ "origin" ] = ( -4793,84, 4708,26, 346,094 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 173 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -7246,23, 4589,33, 78,025 ); - ent.v[ "angles" ] = ( 90, 2, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -6951,36, 4934,45, 91,0322 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -6751,02, 4934,64, 85,425 ); - ent.v[ "angles" ] = ( 31,9413, 329,602, 91 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -6847,37, 5022,5, 91 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety" ); - ent.v[ "origin" ] = ( -3946,86, -7250,19, 107 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 102; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety" ); - ent.v[ "origin" ] = ( -4418,11, -626,9, 192,003 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 79 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 114; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety" ); - ent.v[ "origin" ] = ( 8133,65, 4787,75, -194,479 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 108; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety" ); - ent.v[ "origin" ] = ( 10160,1, -1748,62, -45,9508 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 106; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety" ); - ent.v[ "origin" ] = ( -45,2307, -5452,06, 92,5112 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 104; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -6724,03, 4589,1, 81,9 ); - ent.v[ "angles" ] = ( 87, 182, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); - ent.v[ "origin" ] = ( 287,427, -453,374, -62 ); - ent.v[ "angles" ] = ( 1,9859, 356,008, -0,59234 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_right_border" ); - ent.v[ "origin" ] = ( 10191, 8408,74, -566,847 ); - ent.v[ "angles" ] = ( 3,6542, 275,052, 1,6294 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); - ent.v[ "origin" ] = ( 6127,06, -6034,52, -70,4416 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 43 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_1200x600" ); - ent.v[ "origin" ] = ( 6552,9, -4715,76, -58,9995 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 271 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_thick_600x600" ); - ent.v[ "origin" ] = ( 7804,15, -4507,67, 76 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 273 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); - ent.v[ "origin" ] = ( 7466,6, -4570,16, 32,1187 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 299 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( -6879,38, 4404,41, -55,7499 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 345 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( -6865,54, 4337,65, -56,7845 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 24 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( -6803,27, 4294,82, -59,5574 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 83 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( 1397,35, -485,659, -67,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 175 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( 2955,11, -447,745, -129,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 183 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_town_cans" ); - ent.v[ "origin" ] = ( 2318,31, -669,672, 132,6 ); - ent.v[ "angles" ] = ( 82, 90, 90 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_town_cans" ); - ent.v[ "origin" ] = ( 2393,33, -669,067, 133,725 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( 2475,69, -4,57658, 197,512 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( 591,712, -1224,22, 247,125 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_fog" ); - ent.v[ "origin" ] = ( -385,805, -200,682, 110,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_fog" ); - ent.v[ "origin" ] = ( 1232,59, -1724,85, 188,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 172 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_fog" ); - ent.v[ "origin" ] = ( 1782,94, -2158,76, 109,262 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_street_lamp" ); - ent.v[ "origin" ] = ( 2424, -200, 104 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 176 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_fog" ); - ent.v[ "origin" ] = ( 3264,9, -684,243, 110 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 179 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( -7174,46, 4182,06, 86,8813 ); - ent.v[ "angles" ] = ( 87, 182, 180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( 1916,05, -1534,34, -55,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 150 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( 742,165, -500,51, -61,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( 1584,48, 61,4287, -62 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( 1643,6, 239,56, -62,0999 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( 1956,58, -684,969, -55,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( -7162,7, 4430,93, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( -5961,17, 4659,68, -56,1655 ); - ent.v[ "angles" ] = ( 0, 177, 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( 1984,16, -477,682, -61,0387 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 152 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( 1529,72, -1378,9, -60 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 2076,71, -1639,77, 6,14304 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow" ); - ent.v[ "origin" ] = ( 2284,66, 80,3072, 73,0331 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 2353,79, -515,486, -60,3616 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 104 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 2426,85, -478,694, -58,3936 ); - ent.v[ "angles" ] = ( 9, 139, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 702,614, -1449,61, 161,693 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( 1721,63, -90,9005, -55,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( 1476,19, -161,862, -58,502 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( 1601,25, 381,192, -62 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( 2249,23, -374,64, -62 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 160 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( 1313,09, -749,727, -62 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 144 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 2990,83, -473,678, -129,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 129 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); - ent.v[ "origin" ] = ( -6365,25, 4577,86, 109,8 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 101; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); - ent.v[ "origin" ] = ( -3946,92, -7250,32, 107,1 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 103; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); - ent.v[ "origin" ] = ( -4418,04, -626,987, 191,91 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 79 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 115; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); - ent.v[ "origin" ] = ( 6300,89, 5078,98, 67,4032 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 111; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); - ent.v[ "origin" ] = ( 8133,62, 4787,71, -194,497 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 109; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); - ent.v[ "origin" ] = ( 10160, -1748,7, -45,9436 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 107; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); - ent.v[ "origin" ] = ( -45,1183, -5452,09, 92,4005 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 105; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_bridge_dest" ); - ent.v[ "origin" ] = ( -2790,06, -446,644, 162,125 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 150; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 754,692, -1143,89, 212,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 72 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_short_warm" ); - ent.v[ "origin" ] = ( 969,776, -997,644, 97,8737 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 286 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_short_warm" ); - ent.v[ "origin" ] = ( 1037,18, -956,931, 110,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 303 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_short_warm" ); - ent.v[ "origin" ] = ( 920,384, -991,542, 115,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 281 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_short_warm" ); - ent.v[ "origin" ] = ( 988,555, -841,342, 117,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 289 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 787,978, -855,479, -51,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 355 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( 808,764, -1044,17, -54,6895 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 917,617, -1052,28, 94,2635 ); - ent.v[ "angles" ] = ( 29, 90, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 850,388, -949,561, 94 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( 695,336, -1140,64, 174,388 ); - ent.v[ "angles" ] = ( 0, 358,745, 90,3158 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_column_lrg" ); - ent.v[ "origin" ] = ( -397,618, -1279,07, 159,194 ); - ent.v[ "angles" ] = ( 271, 187, -84 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_town_cans" ); - ent.v[ "origin" ] = ( 1144,58, -1476,87, 73,125 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( 1075,85, -1008,77, -61 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 47 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( 855,703, -1077,52, -55,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 978,234, -1004,41, 95,8515 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 112 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 1026,46, -1141,13, 177,669 ); - ent.v[ "angles" ] = ( 24, 193, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( 11566, 7369,17, -754,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 65 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm" ); - ent.v[ "origin" ] = ( -7002,24, 4782,52, -63 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 200; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm" ); - ent.v[ "origin" ] = ( -5071,79, -7163,23, -58,3008 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 220; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm" ); - ent.v[ "origin" ] = ( 8637,74, -6861,16, 100,781 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 230; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm" ); - ent.v[ "origin" ] = ( 10217, -809,125, -216,77 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 240; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm" ); - ent.v[ "origin" ] = ( 10777,6, 7700,74, -579,817 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm" ); - ent.v[ "origin" ] = ( 1256,2, -477,919, -61 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 260; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort" ); - ent.v[ "origin" ] = ( -5772,88, 5116,44, -43,0053 ); - ent.v[ "angles" ] = ( 270, 217,395, 178,605 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_detail" ); - ent.v[ "origin" ] = ( -6706,07, 4768,48, -92,5561 ); - ent.v[ "angles" ] = ( 270, 0, 92 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_detail" ); - ent.v[ "origin" ] = ( -7616,51, 4365,68, -58 ); - ent.v[ "angles" ] = ( 270, 0,65106, -162,651 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_sm" ); - ent.v[ "origin" ] = ( -5185,59, -6893,63, -65 ); - ent.v[ "angles" ] = ( 270, 0, -3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_sm" ); - ent.v[ "origin" ] = ( -5455,46, -6802,14, -65 ); - ent.v[ "angles" ] = ( 270, 356,906, -30,9059 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_sm" ); - ent.v[ "origin" ] = ( 7051,84, -6104,46, -126 ); - ent.v[ "angles" ] = ( 270, 359,914, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_sm" ); - ent.v[ "origin" ] = ( 7097,11, -6375,92, -126 ); - ent.v[ "angles" ] = ( 270, 359,914, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort_sm" ); - ent.v[ "origin" ] = ( 2790,44, -423,149, -80,455 ); - ent.v[ "angles" ] = ( 270, 0,692906, 178,307 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); - ent.v[ "origin" ] = ( 6100,79, -5285,34, -32,8692 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 337 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_right_border" ); - ent.v[ "origin" ] = ( 10382,8, 8961,99, -422,321 ); - ent.v[ "angles" ] = ( 358,271, 9,94811, 0,507869 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); - ent.v[ "origin" ] = ( 10049,7, 8042,2, -572,673 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_transition_600x600" ); - ent.v[ "origin" ] = ( 10070,1, 7465,39, -576 ); - ent.v[ "angles" ] = ( 358,698, 359,957, 0,783675 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( 7062,86, -6152,26, -126 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 107 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_spark_ext_runner" ); - ent.v[ "origin" ] = ( -3843,32, -7122,23, 150,713 ); - ent.v[ "angles" ] = ( 63, 269, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 500; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_spark_ext_runner" ); - ent.v[ "origin" ] = ( 8854,15, -5938,39, 310,653 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 500; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_spark_ext_runner" ); - ent.v[ "origin" ] = ( 1293,97, -1569,38, 275,83 ); - ent.v[ "angles" ] = ( 90, 0,337619, 0,337609 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 500; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow" ); - ent.v[ "origin" ] = ( -6837,05, 5106,9, 122,125 ); - ent.v[ "angles" ] = ( 288,982, 88,5178, 1,46959 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); - ent.v[ "origin" ] = ( 2038,82, 145,766, 43,9131 ); - ent.v[ "angles" ] = ( 284,035, 94,1266, -94,0038 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_bowling_sign_fog" ); - ent.v[ "origin" ] = ( 2357,64, -719,063, 369,31 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); - ent.v[ "origin" ] = ( 2837,4, -435,051, 11,5 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 181 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1889,32, 763,731, -56,6942 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 1791,17, 740,252, -55,0558 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 163 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 1979,87, 761,433, -47,4833 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 7818,75, -5992,71, 60,2811 ); - ent.v[ "angles" ] = ( 20, 84, -6 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 7988,32, -6044,29, 75,9195 ); - ent.v[ "angles" ] = ( 4, 35, -11 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 8334,09, -6302,3, 93,7967 ); - ent.v[ "angles" ] = ( 359,913, 359,004, -5 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 8353,75, -6383, 98,6189 ); - ent.v[ "angles" ] = ( 354,382, 346,891, -3,27537 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 8404,03, -6366,25, 98,1088 ); - ent.v[ "angles" ] = ( 354,374, 344,526, -1,56396 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 8393,64, -6460,92, 102,788 ); - ent.v[ "angles" ] = ( 1,29256, 14,9455, -2,83045 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 8438,13, -6582,85, 105,293 ); - ent.v[ "angles" ] = ( 359,328, 191,965, -2,0986 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 8363,87, -7077,4, 92,5037 ); - ent.v[ "angles" ] = ( 7,08973, 260,142, -1,31736 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 8398,26, -7131,53, 83,5329 ); - ent.v[ "angles" ] = ( 355,945, 6,61279, 7,42273 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 8406,2, -7050,16, 95,9016 ); - ent.v[ "angles" ] = ( 4,76812, 319,449, 5,4151 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 8418,49, -6955,4, 101,044 ); - ent.v[ "angles" ] = ( 1,65899, 333,337, -1,42441 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5503,15, 6388,21, -72,5321 ); - ent.v[ "angles" ] = ( 0,109414, 292,37, -8,15952 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5514,5, 6422,25, -73,5282 ); - ent.v[ "angles" ] = ( 356,025, 262,626, -7,13254 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 5388,57, 6425,25, -64,7438 ); - ent.v[ "angles" ] = ( 356,766, 272,615, -3,7523 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5337,66, 6389,44, -64,8271 ); - ent.v[ "angles" ] = ( 358,904, 187,573, -0,430535 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5324,97, 6019,33, -64,9331 ); - ent.v[ "angles" ] = ( 359,844, 311,516, -4,94951 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5377,87, 6091,1, -67,7557 ); - ent.v[ "angles" ] = ( 0,239705, 148,415, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5359,91, 6133,77, -69 ); - ent.v[ "angles" ] = ( 0,243594, 80,4189, 1,7854 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5280,21, 6157,39, -65,9638 ); - ent.v[ "angles" ] = ( 2,09653, 38,445, 1,85192 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5298,75, 6236,24, -67,6985 ); - ent.v[ "angles" ] = ( 0,512533, 76,4233, 0,749736 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5481, 6340,94, -69,9456 ); - ent.v[ "angles" ] = ( 354,217, 246,67, -5,76663 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5469,72, 6431,43, -71,8224 ); - ent.v[ "angles" ] = ( 356,025, 262,626, -5,13254 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 5313,89, 6374,04, -68,4139 ); - ent.v[ "angles" ] = ( 352,852, 230,625, -1,9477 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 1744,42, 704,608, -57,139 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 267 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); - ent.v[ "origin" ] = ( -5879,18, 5132,33, -54,9188 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 203 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); - ent.v[ "origin" ] = ( -5679,99, 5029,36, -38,0459 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 224 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( 191,569, 618,303, -38 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( 53,7307, 538,679, -35,3064 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 250,113, 567,747, -34,6563 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 132,32, 591,904, 85,6072 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 318 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 234,855, 648,418, 85,125 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 141,005, 552,795, -33,0726 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 304 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_vault" ); - ent.v[ "origin" ] = ( 466,399, 540,849, 24,125 ); - ent.v[ "angles" ] = ( 2, 330, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_key_glint" ); - ent.v[ "origin" ] = ( 589,29, 440,722, 11,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 233 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_key_glint" ); - ent.v[ "origin" ] = ( 589,064, 449,555, 11,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 233 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( 100,097, 339,198, -46,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 174 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( 256,422, 349,21, -54,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( 178,717, 413,692, -29,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_bar_glow" ); - ent.v[ "origin" ] = ( 1777,99, 156,13, 151,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( 2523,8, 374,808, 69,625 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 1114,07, 20,5454, 41,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 313 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_town_cans" ); - ent.v[ "origin" ] = ( 502,541, 765,832, 83,125 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 991,306, -95,3722, 40,5243 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 313 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( 1970,15, 167,957, 163,938 ); - ent.v[ "angles" ] = ( 335, 251, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_med" ); - ent.v[ "origin" ] = ( 2239,96, 185,098, 139,125 ); - ent.v[ "angles" ] = ( 336,247, 251,383, 8,33834 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_med" ); - ent.v[ "origin" ] = ( 1969,63, -25,7143, 91,125 ); - ent.v[ "angles" ] = ( 335,016, 245,207, -0,932351 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( 1873,95, 168,875, 165,392 ); - ent.v[ "angles" ] = ( 332,003, 249,879, 0,387281 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( 1941,61, 167,23, 198,192 ); - ent.v[ "angles" ] = ( 336, 251, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( 2003,46, 42,8896, 92,125 ); - ent.v[ "angles" ] = ( 337,004, 241,914, 0,424438 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( 2350,84, 34,2896, 88,125 ); - ent.v[ "angles" ] = ( 333,004, 244,121, -0,474286 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( 1888,03, 168,875, 202,429 ); - ent.v[ "angles" ] = ( 336, 251, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_med" ); - ent.v[ "origin" ] = ( 2324,61, -20,7978, 88,125 ); - ent.v[ "angles" ] = ( 334, 243, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( 2179,62, -1804,56, 249,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 173 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( 2212,67, -1670,11, 208,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 174 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( 1264,63, -3157,28, 28,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 70 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_off" ); - ent.v[ "origin" ] = ( -627,572, -615,202, 116,432 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 113; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety" ); - ent.v[ "origin" ] = ( -627,359, -615,075, 116,432 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 112; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( 1927,64, -1060,33, 131,881 ); - ent.v[ "angles" ] = ( 67, 269,911, 87,9181 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1645,32, 694,99, -64,1414 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 359 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1602,48, 476,257, -68,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 324 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1535,94, 497,874, -64,9919 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 23 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1374,88, 782,003, -65 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 185 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1603,51, -262,848, -65 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 324 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 584,114, -459,174, -67 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 205 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 775,721, -690,862, -57,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 353 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1026,73, -502,666, -64,9585 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 304 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1165,88, -310,769, -65 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 250 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1592,68, -972,327, -64,8077 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 31 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1515,33, -822,148, -62,2515 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 20 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1533,38, -1139,12, -60,4293 ); - ent.v[ "angles" ] = ( 0,278291, 274,981, -5,99519 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 1359,65, -1213,52, -63,1614 ); - ent.v[ "angles" ] = ( 356,345, 160,109, -1,41514 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 1535,79, -1334,63, -63,8559 ); - ent.v[ "angles" ] = ( 0,73816, 38,0882, 3,84916 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 1492,83, -1288,81, -50,9464 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 344 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 1479,57, -1249,33, -55,1658 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 48 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 1493,56, -1314,7, -54,8906 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 279 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1386,95, 261,349, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 252 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1247,14, 178,805, -65 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 356 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1431,34, 155,715, -66 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 176 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 1540,99, -68,7187, -64,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 60 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 1482,47, -63,7589, -62 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 103 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 1343,41, 77,0003, -68,1872 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 102 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1562,34, -1135,27, -60,6276 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 283 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( 1452,5, -218,951, -70 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 268 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( 1361,91, -551,798, -67 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 230 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 2441,27, -547,621, -59,6587 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 208 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 1248,59, -1279,85, -58 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 294 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 1343,33, -1237,01, -55,7566 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 67 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -6869,17, 5342,61, -62,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 350 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -6869,78, 5464,68, -61,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 15 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( -6835,64, 5264,04, -66,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 53 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( -6762,79, 5228,51, -63,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 52 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( -6720,24, 5171,85, -61,3532 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 23 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( -6896,93, 5375,32, -63,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 244 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_power_pulse" ); - ent.v[ "origin" ] = ( 12204,4, 7587,57, -641 ); - ent.v[ "angles" ] = ( 270, 0, -95 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 500; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_power_on" ); - ent.v[ "origin" ] = ( 12204,4, 7587,57, -640 ); - ent.v[ "angles" ] = ( 270, 0, -95 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0,25; - ent.v[ "exploder" ] = 500; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_power_rising" ); - ent.v[ "origin" ] = ( 12204,4, 7587,57, -639 ); - ent.v[ "angles" ] = ( 270, 0, -95 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 30,25; - ent.v[ "exploder" ] = 500; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_crevice_smoke_100" ); - ent.v[ "origin" ] = ( -6865,77, 5449,35, -63,7096 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 18 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_crevice_smoke_100" ); - ent.v[ "origin" ] = ( -6865,9, 5353,17, -64,4128 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 352 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_crevice_smoke_100" ); - ent.v[ "origin" ] = ( -6821,72, 5257,82, -62,8765 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 68 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_crevice_smoke_100" ); - ent.v[ "origin" ] = ( -6752,63, 5222,43, -66,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 50 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety" ); - ent.v[ "origin" ] = ( 6301,07, 5079,12, 67,4271 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 110; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( -10128,1, 3411,46, 196 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 331 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( -10497, 2685,14, 219,741 ); - ent.v[ "angles" ] = ( 0, 331, -15 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( -10539,3, 1146,3, 311,719 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 316 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( -9678,57, 2737,65, 192 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 54 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( -11488,2, 521,303, 192 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 27 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( -10739,5, -2162,63, 240,948 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 150 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( -9363,38, -6107,72, 196 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 230 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_thick_600x600" ); - ent.v[ "origin" ] = ( -10126,6, -6035,96, 192 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_thick_600x600" ); - ent.v[ "origin" ] = ( -10747,4, -3914,96, 192 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -11077, -1101,23, 180 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 171 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_lava_distort" ); - ent.v[ "origin" ] = ( -11210, -1129,64, 180 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); - ent.v[ "origin" ] = ( -11220,5, -1101,46, 180 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 203 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -11149,5, -1196,82, 180 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -11188,2, -1050,69, 180 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 170 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -11279,7, -1155,05, 180 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -11278,8, -1268,24, 180 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 93 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -11296,1, -909,062, 185 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 78 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -11309,7, -2014,81, 180 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 126 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); - ent.v[ "origin" ] = ( -11311, -2020,2, 180 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 314 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -11375, -1964,33, 185,879 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 346 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -11234,5, -2090,5, 180 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 155 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( -11220,4, -3193,42, 268,293 ); - ent.v[ "angles" ] = ( 333,018, 206,982, 2,24406 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -11104,8, -983,586, 194,026 ); - ent.v[ "angles" ] = ( 7, 190, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); - ent.v[ "origin" ] = ( -10657,8, 889,003, 305,817 ); - ent.v[ "angles" ] = ( 0, 316, -4 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_dbl_glow" ); - ent.v[ "origin" ] = ( -6247,77, 5197,74, 35,125 ); - ent.v[ "angles" ] = ( 297,939, 94,5663, -94,2372 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -9936,09, 2851,18, 441 ); - ent.v[ "angles" ] = ( 270, 0, -30 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -10224,1, 2342,43, 440 ); - ent.v[ "angles" ] = ( 270, 0, -30 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -10610,4, 1486,71, 430,812 ); - ent.v[ "angles" ] = ( 289, 249, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -11120, -312,414, 440,9 ); - ent.v[ "angles" ] = ( 270, 359,089, -12,0888 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -11249,9, -1465,12, 439,2 ); - ent.v[ "angles" ] = ( 270, 359,951, -1,95138 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -11173,1, -3034,18, 441,161 ); - ent.v[ "angles" ] = ( 270, 340,77, 26,2299 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -10797,9, -4638,33, 439,9 ); - ent.v[ "angles" ] = ( 270, 1,54295, 17,457 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -10121,4, -5933,87, 433,345 ); - ent.v[ "angles" ] = ( 289,524, 274,491, 104,913 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -9680,11, -6367,1, 433 ); - ent.v[ "angles" ] = ( 289,455, 68,9812, -16,4659 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( -10003,3, 3224,71, 192 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 259 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow" ); - ent.v[ "origin" ] = ( -11779,3, -1125,37, 375 ); - ent.v[ "angles" ] = ( 270, 0,906503, -1,90651 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_flicker" ); - ent.v[ "origin" ] = ( -11778, -1677,58, 373,371 ); - ent.v[ "angles" ] = ( 270, 0,906503, -1,90651 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); - ent.v[ "origin" ] = ( -11778,4, -2244,37, 374,1 ); - ent.v[ "angles" ] = ( 270, 0,906503, -1,90651 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); - ent.v[ "origin" ] = ( -10951,7, -5454,94, 374 ); - ent.v[ "angles" ] = ( 270, 358,512, 26,4878 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -10710,7, -855,473, 370 ); - ent.v[ "angles" ] = ( 271, 264,002, 89,9978 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); - ent.v[ "origin" ] = ( -6163,17, 3293,78, -13,9583 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 119 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); - ent.v[ "origin" ] = ( -11303,5, -3354,03, 302,04 ); - ent.v[ "angles" ] = ( 337,721, 5,86313, -15,1555 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); - ent.v[ "origin" ] = ( -7381,73, 6748,78, -55 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 284 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); - ent.v[ "origin" ] = ( -7490,71, 6520,46, -71 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 276 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); - ent.v[ "origin" ] = ( -7307,65, 6961,87, -79 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 276 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_column_lrg" ); - ent.v[ "origin" ] = ( -7412,36, 7034,42, -45 ); - ent.v[ "angles" ] = ( 290,014, 195,476, -92,6171 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); - ent.v[ "origin" ] = ( -5794,23, 6978,67, -44 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 152 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -6355,24, 5714, 8,125 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -7184,36, 5600,22, 15,125 ); - ent.v[ "angles" ] = ( 270, 180, 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 177,625, -530,665, -48,3973 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 313 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 1295,93, 882,596, -25,875 ); - ent.v[ "angles" ] = ( 35, 342, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 1284,46, 875,951, -32,7092 ); - ent.v[ "angles" ] = ( 327, 156, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -5459,9, -6788, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 337 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -5230,88, -6999,87, -65 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 85 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -5145,21, -6915,75, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 337 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -5050,25, -6921,37, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 169 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -5501,02, -6704,36, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 263 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -5473,88, -7476,84, 127,125 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -5429,98, -7531,46, 128 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -5429,21, -7664,66, 128,125 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -5429,52, -7799,99, 127,814 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -5429,63, -7933,89, 128 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -5644,89, -7549,17, 134,291 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -6031,36, -7550,77, 136,125 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -6314,79, -7549,68, 134,879 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -6469,19, -7789,98, 136,641 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -5938,95, -7417,7, 127,125 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -5846,87, -7476,07, 126,967 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -5656,66, -7476,06, 128 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -5483,61, -7432,77, -34,6377 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 290 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 5435,05, 6878,72, -9,113 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 187 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -5974,13, -7261,3, -48,2301 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 64 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -5972,29, -7281,63, -66,268 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 324 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( -5851,29, -7067,3, -54,1333 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 136 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( -4366,17, -7273,86, -52,8879 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 122 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( -5148,85, -7273,66, -63,5983 ); - ent.v[ "angles" ] = ( 357, 120,999, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( -5090,66, -7323,27, -64 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 122 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( -4380,11, -7148,49, -58,148 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 122 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_papers_windy_slow" ); - ent.v[ "origin" ] = ( -5862,85, -7050,07, -52,8316 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 122 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); - ent.v[ "origin" ] = ( -5969,18, -7734,27, 10,025 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( -5698,49, -8378,1, -12,3228 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_glow_fog" ); - ent.v[ "origin" ] = ( -4568,29, -7225,78, 151,693 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 117 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -4737,35, -7412,11, 197,275 ); - ent.v[ "angles" ] = ( 270, 0, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -4833,49, -7840,76, 125,125 ); - ent.v[ "angles" ] = ( 271, 359,999, -178,999 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -4625,94, -7868,51, 124,025 ); - ent.v[ "angles" ] = ( 295,505, 181,435, 177,976 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -4410,87, -7797,71, 114,26 ); - ent.v[ "angles" ] = ( 283,337, 346,888, 12,8218 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5409,75, -7279,42, 276,181 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5408,13, -7411,31, 275,423 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5409,11, -7211,45, 276,35 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5412,33, -7144,55, 274,523 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5412,82, -7113,89, 274,643 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5409,51, -7012,87, 276,361 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5408,54, -6967,22, 509,706 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5408,04, -6942,82, 606,032 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5336,28, -7378,8, 275,297 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5337,65, -7312,61, 275,796 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5336,82, -7245,57, 275,566 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5336,31, -7143,39, 276,066 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5337,79, -7013,92, 275,057 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5336,85, -6971,21, 475,647 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( -5337,16, -6957,33, 539,584 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( -4834,79, -7458,79, 128,325 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -6306,31, -7943,28, 77,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -5775,25, -7866,32, 54,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -5729,95, -7877,56, 63,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -5625,83, -7543,92, 61,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -5268,45, -7968,52, 4,89243 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( -5142,25, -7958,67, -20,1334 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_bulb_xsm" ); - ent.v[ "origin" ] = ( 7894,84, -6552,52, 202,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_bulb_xsm" ); - ent.v[ "origin" ] = ( 7889,8, -6318,81, 315,925 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_bulb_xsm" ); - ent.v[ "origin" ] = ( 8013,75, -6642,93, 361,925 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 8328,49, -5015,29, 161,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 7882,26, -5207,24, 151,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 8503,42, -4804,02, 162,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 8059,34, -5204,01, 333,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_bulb_xsm" ); - ent.v[ "origin" ] = ( 8317,79, -6683,08, 180,206 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_bulb_xsm" ); - ent.v[ "origin" ] = ( 8234,94, -6586,04, 178 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_bulb_xsm" ); - ent.v[ "origin" ] = ( 8137,48, -6959,37, 211,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 8057,41, -4806,99, 161,725 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 7374,98, -5426,44, 49,3118 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( -4220,64, -7799,22, -1,875 ); - ent.v[ "angles" ] = ( 316,689, 259,962, 13,0518 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( -4189,21, -7705,66, 7,66019 ); - ent.v[ "angles" ] = ( 317,814, 249,191, 10,3636 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( -4295,9, -7802,49, 21,125 ); - ent.v[ "angles" ] = ( 320,075, 258,325, 14,3308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( -4308,83, -7683,01, 32,8659 ); - ent.v[ "angles" ] = ( 325,068, 264,852, 10,8459 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( -5017,99, -7879,03, -56,875 ); - ent.v[ "angles" ] = ( 340,408, 259,106, 4,31522 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( -5003,87, -7838,04, -30,3927 ); - ent.v[ "angles" ] = ( 342,331, 260,31, 3,91311 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( -5494,71, -7831,96, 3,125 ); - ent.v[ "angles" ] = ( 335,016, 248,207, -0,932351 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( -5523,54, -7862,26, 0,125 ); - ent.v[ "angles" ] = ( 336, 246, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( 9040,04, -6391,29, 273,2 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( 8419,09, -5744,22, 249,051 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( 8242,84, -6849,96, 259,625 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( 8240,02, -6532,87, 209,525 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( 6587,59, -5127,09, -55,2822 ); - ent.v[ "angles" ] = ( 353, 160, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( 6987,8, -5763,06, -51,5495 ); - ent.v[ "angles" ] = ( 2, 136, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( 7858,56, -5805,03, 8,45168 ); - ent.v[ "angles" ] = ( 2, 136, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( 7792,54, -5443,05, 36,5811 ); - ent.v[ "angles" ] = ( 359, 136, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( 7442,47, -5125,89, -4,7008 ); - ent.v[ "angles" ] = ( 359, 136, -5 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( 8739,61, -6983,54, 86,5683 ); - ent.v[ "angles" ] = ( 0,545573, 157,823, 1,29891 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8027,21, -6432,62, 165,375 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8225,35, -6613,31, 178,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8140,59, -6889,03, 168,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8033,01, -6470,27, 294,896 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 9029,53, -6393,49, 249,093 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8416,65, -5742,4, 224,177 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8357,57, -6682,99, 183,255 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8100,48, -5243,8, 114,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 7910,7, -5209,15, 151,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8050,46, -5221,8, 334,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8484,12, -4806,32, 166,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8055,05, -4795,58, 161,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8328,53, -5033,75, 165,125 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 7854,08, -5055,63, 126,147 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 7803,41, -4567,1, 111,113 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 8591,82, -5402,47, 117 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 7135,13, -5638,24, 30,9983 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( 9978,39, -1767,15, -212,32 ); - ent.v[ "angles" ] = ( 358, 160, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( 10242, -133,225, -213,655 ); - ent.v[ "angles" ] = ( 2, 160, 2 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( 10185, -1131,84, -210,081 ); - ent.v[ "angles" ] = ( 2, 160, 2 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 10419,3, 7366,19, -557,286 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 223 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 10426,2, 7362,67, -556,087 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 271 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 10576,4, 7867,03, -534,373 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 21 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 10561,8, 7854,68, -546,776 ); - ent.v[ "angles" ] = ( 24, 21, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( 10543,1, 7838,16, -564,906 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 287 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 11244,2, 7598,05, -529,002 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 11273,6, 7566,38, -510,46 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 11197,5, 7581,58, -554,377 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 11102,1, 7582,38, -521,847 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( 11534,9, 7043,33, -422,437 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 125 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_lrg" ); - ent.v[ "origin" ] = ( 11695,4, 6972,81, -417,525 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 121 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( 10772,1, 7534,6, -579,322 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 134 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_md" ); - ent.v[ "origin" ] = ( 10293,5, 8161,56, -576,661 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 157 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_windy_heavy_sm" ); - ent.v[ "origin" ] = ( 11284,2, 7782,37, -549,009 ); - ent.v[ "angles" ] = ( 8,89267, 132,773, -10,1167 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -15; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); - ent.v[ "origin" ] = ( 10545,1, 7987,11, -542,084 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 213 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); - ent.v[ "origin" ] = ( -7274,63, 4216,52, -7,79429 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 84 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); - ent.v[ "origin" ] = ( -4655,73, -7718,2, -46,2181 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 124 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); - ent.v[ "origin" ] = ( 1772,67, -134,847, -26,9184 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 177 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); - ent.v[ "origin" ] = ( 10482,5, 8077,43, -551,016 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 176 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); - ent.v[ "origin" ] = ( 10779,7, 7998,21, -540,07 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 257 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); - ent.v[ "origin" ] = ( 11134,3, 8093,66, -505,788 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 290 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( 11518,6, 7313,49, -755,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 32 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_insects_swarm_md_light" ); - ent.v[ "origin" ] = ( 11535,9, 7320,47, -712,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( 12544,7, 8367,86, -747,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 217 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( 12619,1, 8410,46, -751,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 250 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); - ent.v[ "origin" ] = ( 11077,4, 8147,23, -472,382 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 85 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( 10627,8, 8984,05, -351,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 244 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_closet" ); - ent.v[ "origin" ] = ( 10671,7, 9056,4, -351,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 221 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); - ent.v[ "origin" ] = ( 12185,1, 8300,09, -747,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_rising_md" ); - ent.v[ "origin" ] = ( 10667,5, 8857,24, -566,312 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 320 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_ash_ember_2000x1000" ); - ent.v[ "origin" ] = ( 11829,2, 7033,91, -366,52 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 142 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); - ent.v[ "origin" ] = ( 11000,5, 8592,98, -721,228 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 263 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -3523,91, 4145,58, 1026 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 164 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 200; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -5822,61, 8161,55, 1665,98 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 255 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 200; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -10419,6, 2878,18, 1302,32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 33 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 200; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -10422,2, 5513,57, 1108,93 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 351 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 200; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -7579,71, 2412,15, 1076,04 ); - ent.v[ "angles" ] = ( 20,9875, 82,1415, 0,732403 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 200; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -8591,58, 7883,01, 1434,96 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 300 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 200; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -5183,81, 1971,44, 1380,88 ); - ent.v[ "angles" ] = ( 8,93236, 125,086, 1,10578 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 200; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -3907,73, 6244,31, 1277,76 ); - ent.v[ "angles" ] = ( 4,95198, 216,03, 0,697713 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 200; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -7994,63, -5467,26, 1488 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 338 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 220; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -6248,9, -4383,96, 1488,83 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 283 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 220; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -3637,03, -5318,07, 994,45 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 232 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 220; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -2982,77, -8985,62, 1217,37 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 142 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 220; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -4789,43, -10429,2, 1615,09 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 107 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 220; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -2144,48, -6671,63, 1097,34 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 189 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 220; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -7283,26, -9141,06, 1439,81 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 54 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 220; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -8253,71, -7187,61, 1204,71 ); - ent.v[ "angles" ] = ( 357, 7, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 220; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 11039,7, -5731,09, 1349,86 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 185 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 230; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 4491,1, -6164,51, 1530,32 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 5 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 230; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 9613,27, -3527,74, 1697,05 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 238 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 230; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 4882,98, -3611,48, 1455,78 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 322 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 230; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 7145,47, -2628,27, 1418,72 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 271 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 230; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 10641, -8278,11, 1550,91 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 137 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 230; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 5867,88, -8161,48, 1505,91 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 45 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 230; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 8045,36, -9511,34, 1941,18 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 82 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 230; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 6852,87, -2262,35, 1264,09 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 23 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 240; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 13859, -645,96, 1348,54 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 183 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 240; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 8118,81, 2009,01, 1412,57 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 303 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 240; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 10501,1, 2270,69, 1535,92 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 271 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 240; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 6154,19, 223,038, 1606,08 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 349 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 240; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 10606,6, -4038,92, 1467,82 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 104 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 240; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 13138,8, -3032,95, 1329,48 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 139 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 240; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 12600,4, 1246,54, 1347,77 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 231 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 240; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 8452,68, -3056,77, 1074,09 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 55 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 240; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 14766,4, 6814,59, 1098,18 ); - ent.v[ "angles" ] = ( 12, 174, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 10339,2, 3964,06, 1379,25 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 82 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 12754,5, 4793,53, 1107,25 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 132 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 14340,3, 9177,31, 663,407 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 197 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 8179,63, 4723,92, 896,714 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 51 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 8458,11, 10639,4, 1231,62 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 307 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 7094,67, 8425,25, 1257 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 353 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 7202,75, 6339,84, 765,131 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 17 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 10729,5, 11122,9, 1151,78 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 266 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 13325,6, 10557,6, 1366,97 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 235 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 250; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -207,347, 1856,37, 1500,13 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 302 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 260; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -1247,2, -2498,41, 1408 ); - ent.v[ "angles" ] = ( 360, 36, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 260; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 1625,45, 3225,11, 1105 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 268 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 260; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 4274,06, -1538,84, 1177 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 153 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 260; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( -1889,24, 66,6515, 1399 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 348 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 260; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 4525,94, 665,024, 1126 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 197 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 260; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 2974,66, -3206,25, 1577 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 111 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 260; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 694,038, -3737,93, 1409 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 79 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 260; - ent = maps/mp/_utility::createexploder( "fx_zmb_avog_storm_low" ); - ent.v[ "origin" ] = ( 3769,33, 2230,93, 904 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 232 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 260; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_truck_light" ); - ent.v[ "origin" ] = ( 1164,06, 310,847, -0,95 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 200 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); - ent.v[ "origin" ] = ( 2050,55, -1176,95, 92,625 ); - ent.v[ "angles" ] = ( 282, 270, 90 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_town_cans_sm" ); - ent.v[ "origin" ] = ( 888,034, -1532,84, 80,125 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_town_cans_sm" ); - ent.v[ "origin" ] = ( 888,055, -1424,17, 80,0051 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_town_cans_sm" ); - ent.v[ "origin" ] = ( 1058,12, -1424,92, 80,725 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_depot_cans" ); - ent.v[ "origin" ] = ( -6494,99, 5193,01, 55,225 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -6004,73, 4178,79, -39,7161 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 99 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -6007,56, 4183,18, -46,8613 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 99 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); - ent.v[ "origin" ] = ( -7256,49, 5356,49, 76,625 ); - ent.v[ "angles" ] = ( 300,56, 56,1976, -63,4146 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_spark_blue_lg_loop" ); - ent.v[ "origin" ] = ( 11224,3, 7631,21, -757,475 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_spark_blue_lg_loop" ); - ent.v[ "origin" ] = ( 11166,9, 7525,87, -755,374 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( 1510,96, -426,276, -67,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 175 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_50x50_sm" ); - ent.v[ "origin" ] = ( -5982,84, -6804,63, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 184 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -5858,36, -7105,72, -65 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 289 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -5694,71, -6884,39, -68 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 350 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( -5823,62, -6768,1, -65,2136 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 97 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_cool" ); - ent.v[ "origin" ] = ( -7178,46, 5386,18, -43,6839 ); - ent.v[ "angles" ] = ( 346, 41, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_cool" ); - ent.v[ "origin" ] = ( -7176,71, 5393,31, -9,00734 ); - ent.v[ "angles" ] = ( 346, 41, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_cool" ); - ent.v[ "origin" ] = ( -7177,88, 5334,54, 45,5397 ); - ent.v[ "angles" ] = ( 356, 55, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_cool" ); - ent.v[ "origin" ] = ( -7061,11, 5401,32, -55,875 ); - ent.v[ "angles" ] = ( 341, 56, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_cool" ); - ent.v[ "origin" ] = ( -7108,24, 5323,87, -55,875 ); - ent.v[ "angles" ] = ( 341, 55, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( -6364,25, 5404,07, -54,2979 ); - ent.v[ "angles" ] = ( 327,291, 180,677, 4,76528 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( -6450,47, 5366,94, -55,875 ); - ent.v[ "angles" ] = ( 317,576, 183,05, -3,56625 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( -6324,56, 5391,09, 23,3601 ); - ent.v[ "angles" ] = ( 339,99, 181,99, -0,275328 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -6526,78, 5027,04, -32,4411 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 279 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -6536,44, 5005,17, -38,2548 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 272 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -6550,6, 5011,6, -33,6877 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 269 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( 10085,8, 7660,61, -580 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 156 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( 10099,7, 7278,2, -583 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 77 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( 10029,6, 7897,85, -584 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 206 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 10093,3, 7472,53, -583 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 10199,8, 7421,3, -573 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 88 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 10161,9, 7815,92, -576 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 81 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -2752,23, -202,843, -61,0126 ); - ent.v[ "angles" ] = ( 10,9441, 272,285, 67,3066 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 150; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -2748,37, -203,92, -10,2652 ); - ent.v[ "angles" ] = ( 0, 273, 9 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 150; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_flourescent_flicker" ); - ent.v[ "origin" ] = ( 1901,03, 564,856, 67,125 ); - ent.v[ "angles" ] = ( 311,502, 195,461, 157,008 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( 9992,94, -1245,49, -217,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 130 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 10052,3, -1175,39, -223,625 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 276 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 10168,1, -1213,8, -221,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_100" ); - ent.v[ "origin" ] = ( 10061,8, -1368,94, -222,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 70 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( 11263,9, 8174,39, -337,162 ); - ent.v[ "angles" ] = ( 52, 12, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_bulb_xsm" ); - ent.v[ "origin" ] = ( 11773,7, 8485,59, -469,375 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 290 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( 11333,8, 8107,72, -378,181 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 74 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( 10530,4, 8345,07, -413,424 ); - ent.v[ "angles" ] = ( 90, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( -4437,91, -7528,95, 99,8901 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow_lg" ); - ent.v[ "origin" ] = ( -4625,7, -7827,94, 124,725 ); - ent.v[ "angles" ] = ( 295,505, 181,435, 177,976 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( -6346,4, -7804,18, -13,2077 ); - ent.v[ "angles" ] = ( 338, 245, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( -6346,4, -7804,18, -13,2077 ); - ent.v[ "angles" ] = ( 338, 245, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); - ent.v[ "origin" ] = ( -6144,54, -7824,85, 130,125 ); - ent.v[ "angles" ] = ( 282, 90, -180 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_glow" ); - ent.v[ "origin" ] = ( -5761,02, -7822,95, 130,125 ); - ent.v[ "angles" ] = ( 270, 30,9987, -120,999 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_town_cans_sm" ); - ent.v[ "origin" ] = ( -3834,8, -7320,06, 61,125 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( 2224,68, 104,286, 155,125 ); - ent.v[ "angles" ] = ( 336,062, 255,377, -1,77889 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( 2202,63, 108,655, 148,125 ); - ent.v[ "angles" ] = ( 336, 251, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_interior_long" ); - ent.v[ "origin" ] = ( 2182,71, 167,009, 152,125 ); - ent.v[ "angles" ] = ( 336, 251, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_bulb_xsm" ); - ent.v[ "origin" ] = ( 7144,94, -5606,8, 70,4908 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 13759,9, -1380,82, -92,9938 ); - ent.v[ "angles" ] = ( 314, 229, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 13870,7, -722,317, -222,776 ); - ent.v[ "angles" ] = ( 306, 229, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 13863,9, -341,626, -212,875 ); - ent.v[ "angles" ] = ( 306, 229, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 13808,1, -628,646, -252,875 ); - ent.v[ "angles" ] = ( 298, 229, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 13859,6, -974,169, -94 ); - ent.v[ "angles" ] = ( 326, 229, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 13805,1, -1449,76, -132,375 ); - ent.v[ "angles" ] = ( 317,174, 237,094, 15,7036 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 13558,1, -1418,66, -180,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_glow_xsm" ); - ent.v[ "origin" ] = ( 13987,6, -365,533, -152,199 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); - ent.v[ "origin" ] = ( 13795,6, -429,569, -188,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( 13819,1, -1026,6, -185,938 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); - ent.v[ "origin" ] = ( 13763,8, -1373,05, -181,438 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); - ent.v[ "origin" ] = ( 14249,4, -1138,75, -195,847 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); - ent.v[ "origin" ] = ( 13147,5, -1608,93, -198,477 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_smk_interior_md" ); - ent.v[ "origin" ] = ( 13355,5, -236,408, -194,069 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( 14144,1, -1050,49, -192,334 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( 13846,6, -1797,74, -179,776 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( 13715,6, -740,508, -188,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_fog_low_300x300" ); - ent.v[ "origin" ] = ( 13280,2, -758,48, -202,824 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 33 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( 11569,6, 7207,64, -627,375 ); - ent.v[ "angles" ] = ( 65, 90, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_spark_blue_lg_loop" ); - ent.v[ "origin" ] = ( 11097,3, 8370,78, -472,312 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_spark_blue_lg_loop" ); - ent.v[ "origin" ] = ( 11065,7, 8350,09, -480,76 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_transformer_on" ); - ent.v[ "origin" ] = ( 11096,1, 8349,73, -498,022 ); - ent.v[ "angles" ] = ( 10,9932, 163,963, -8,38868 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_spark_blue_sm_loop" ); - ent.v[ "origin" ] = ( 11062,9, 8351,89, -475,091 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); - ent.v[ "origin" ] = ( -11249,7, 904,058, 192 ); - ent.v[ "angles" ] = ( 299,251, 356,208, -7,17259 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); - ent.v[ "origin" ] = ( -11060,9, 836,008, 327,885 ); - ent.v[ "angles" ] = ( 299,251, 356,208, -7,17259 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); - ent.v[ "origin" ] = ( -10848,1, 727,41, 262,305 ); - ent.v[ "angles" ] = ( 299,251, 356,208, -7,17259 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( -11453,1, -2704,04, 238 ); - ent.v[ "angles" ] = ( 312,147, 207,959, -4,21566 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( -11447,1, -2717,45, 320 ); - ent.v[ "angles" ] = ( 316,137, 207,551, -3,92308 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_detail" ); - ent.v[ "origin" ] = ( -11237,1, -2774,08, 205,693 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 184 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); - ent.v[ "origin" ] = ( -11065,4, -3093,87, 210,48 ); - ent.v[ "angles" ] = ( 313, 209, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); - ent.v[ "origin" ] = ( -11085,3, -3572,2, 238,785 ); - ent.v[ "angles" ] = ( 323, 209, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_tunnel_warm" ); - ent.v[ "origin" ] = ( -10751,6, 548,387, 281,46 ); - ent.v[ "angles" ] = ( 298,016, 48,8707, 1,87996 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); - ent.v[ "origin" ] = ( 11026,4, 8418,04, -452,626 ); - ent.v[ "angles" ] = ( 319, 238, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); - ent.v[ "origin" ] = ( 11047,5, 8544,31, -407,409 ); - ent.v[ "angles" ] = ( 321,972, 238,53, -82,3373 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); - ent.v[ "origin" ] = ( 10965,8, 8541,46, -361,01 ); - ent.v[ "angles" ] = ( 319, 232, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); - ent.v[ "origin" ] = ( 10784,7, 8598,1, -382,159 ); - ent.v[ "angles" ] = ( 312, 253, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); - ent.v[ "origin" ] = ( 11284,5, 8803,95, -209,321 ); - ent.v[ "angles" ] = ( 71,1934, 180,803, -87,4102 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); - ent.v[ "origin" ] = ( 10895,9, 8866,25, -196,195 ); - ent.v[ "angles" ] = ( 73, 258, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); - ent.v[ "origin" ] = ( 10781,7, 8702,04, -222,415 ); - ent.v[ "angles" ] = ( 88, 267, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); - ent.v[ "origin" ] = ( 10799,1, 8575,29, -500,938 ); - ent.v[ "angles" ] = ( 79, 87, 90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_pwr_station" ); - ent.v[ "origin" ] = ( 10979,3, 8831,12, -420,153 ); - ent.v[ "angles" ] = ( 73, 267, -90 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( 7976,72, -4577,1, 193,859 ); - ent.v[ "angles" ] = ( 18,9006, 87,1581, -14,8078 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 8107,3, -4901,58, 390,125 ); - ent.v[ "angles" ] = ( 322,027, 247,537, -1,56188 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 8254,05, -4975,36, 463,125 ); - ent.v[ "angles" ] = ( 322,434, 234,888, 6,2056 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 8194,13, -4983,58, 441,125 ); - ent.v[ "angles" ] = ( 322,109, 239,929, 3,1195 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 8249,4, -4832,61, 434,125 ); - ent.v[ "angles" ] = ( 322, 245, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 8226,89, -5241,31, 421,125 ); - ent.v[ "angles" ] = ( 322, 245, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 8046,06, -4860,87, 413,125 ); - ent.v[ "angles" ] = ( 322,677, 257,613, -7,72609 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 635,54, 407,845, 91,125 ); - ent.v[ "angles" ] = ( 16, 71, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 628,125, 406,734, 43,7233 ); - ent.v[ "angles" ] = ( 3, 71, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 638,811, 426,54, -18,875 ); - ent.v[ "angles" ] = ( 349, 71, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 784,565, 726,997, -33,8978 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 270 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_crevice_glow_50" ); - ent.v[ "origin" ] = ( 811,849, 729,36, -35,0041 ); - ent.v[ "angles" ] = ( 0, 270, -2 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_fire_med" ); - ent.v[ "origin" ] = ( 942,825, 799,82, -52,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 223 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_river" ); - ent.v[ "origin" ] = ( -1148,16, -1138,11, -41,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 80 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_river" ); - ent.v[ "origin" ] = ( -2664,01, -1345,03, -346,451 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 104 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_river" ); - ent.v[ "origin" ] = ( -2674,54, 433,639, -359,784 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_river" ); - ent.v[ "origin" ] = ( -1124,75, 259,523, -48,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 69 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -863,312, -745,248, -48,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 84 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -1196,8, -787,911, -47,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 84 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -1381,38, -46,0962, -47,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 84 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_river" ); - ent.v[ "origin" ] = ( -2645,12, 9,70624, -357,904 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 87 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_river" ); - ent.v[ "origin" ] = ( -2719,28, -285,725, -334,581 ); - ent.v[ "angles" ] = ( 1, 87, 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_river" ); - ent.v[ "origin" ] = ( -2685,84, -997,132, -346,559 ); - ent.v[ "angles" ] = ( 358,157, 83,9017, 1,94423 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_smoke_tall" ); - ent.v[ "origin" ] = ( -2770,44, -707,874, -115,875 ); - ent.v[ "angles" ] = ( 12, 275, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 150; - ent = maps/mp/_utility::createexploder( "fx_zmb_lava_smoke_tall" ); - ent.v[ "origin" ] = ( -2778,19, -155,061, -94,875 ); - ent.v[ "angles" ] = ( 29, 80, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 150; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); - ent.v[ "origin" ] = ( -2291,93, -758,164, -101,161 ); - ent.v[ "angles" ] = ( 11, 214, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_smoke_tall" ); - ent.v[ "origin" ] = ( -1255,13, -1277,79, -34,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 83 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_river" ); - ent.v[ "origin" ] = ( -2742,09, -665,677, -333,1 ); - ent.v[ "angles" ] = ( 1, 87, 3 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -1508,17, -320,626, -58,369 ); - ent.v[ "angles" ] = ( 355, 187, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -1452,09, -720,211, -60,0286 ); - ent.v[ "angles" ] = ( 359,993, 186,739, -2,98858 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -1415,76, -1177,25, -62,1707 ); - ent.v[ "angles" ] = ( 356,67, 156,949, -0,497783 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -704,822, -246,538, -58,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 22 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -779,445, -1098,9, -61,8023 ); - ent.v[ "angles" ] = ( 0,993918, 9,99335, -0,738612 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -699,587, -705,189, -57,1237 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 345 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -1140,42, -15,2616, -48,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 84 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -1273,82, -1205,47, -42,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 84 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -2204,13, -5739,66, -80,9468 ); - ent.v[ "angles" ] = ( 7, 307, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -1994,56, -5882,45, -95,6035 ); - ent.v[ "angles" ] = ( 7, 307, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -1875,72, -6466,37, -98,9131 ); - ent.v[ "angles" ] = ( 7, 307, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -1610,46, -6120,94, -92,074 ); - ent.v[ "angles" ] = ( 7, 307, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( -2214,93, -6067,3, -102,865 ); - ent.v[ "angles" ] = ( 7, 307, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -1708,85, -6610,85, -95,0234 ); - ent.v[ "angles" ] = ( 355,794, 73,794, -4,39947 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -2318,27, -6315,39, -107,815 ); - ent.v[ "angles" ] = ( 353,394, 27,6107, 4,95295 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -1948,05, -6554,84, -111,909 ); - ent.v[ "angles" ] = ( 356,111, 77,7913, -4,68174 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -1528,88, -5886,45, -91,5689 ); - ent.v[ "angles" ] = ( 356,621, 83,7816, -5,0618 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -2024,68, -5586,57, -68,3597 ); - ent.v[ "angles" ] = ( 356,111, 77,7913, -4,68174 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_river" ); - ent.v[ "origin" ] = ( 8336,11, -8461,36, -126,254 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 135 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_river" ); - ent.v[ "origin" ] = ( 7440,73, -8528,75, -124,913 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 81 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( 7171,28, -6397,54, -126 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 107 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( 7054,04, -6397,21, -126 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 86 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( 7094,94, -6285,23, -126 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 107 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 8662,38, -5640,09, 124,292 ); - ent.v[ "angles" ] = ( 323, 318, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 8599,65, -5634,21, 153,303 ); - ent.v[ "angles" ] = ( 321,616, 319,338, -39,0353 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 5262,91, 7044,48, 43,9142 ); - ent.v[ "angles" ] = ( 316,21, 262,066, 4,81097 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_god_ray_depot_warm" ); - ent.v[ "origin" ] = ( 5174,93, 7053,13, 41,125 ); - ent.v[ "angles" ] = ( 316,411, 278,687, -6,71217 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_desklamp" ); - ent.v[ "origin" ] = ( -7101,92, 5147,13, -0,163522 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 86 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( -4683,65, -7970,08, 52,9438 ); - ent.v[ "angles" ] = ( 68, 180, -180 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_desklamp" ); - ent.v[ "origin" ] = ( 12139,1, 8505,25, -696,157 ); - ent.v[ "angles" ] = ( 85,685, 136,004, 133,029 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_spark_int_runner" ); - ent.v[ "origin" ] = ( 7967,02, -464,256, 1429,54 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 416; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_spark_int_runner" ); - ent.v[ "origin" ] = ( 7264,27, -458,783, 1045,58 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 305 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 416; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_spark_int_runner" ); - ent.v[ "origin" ] = ( 7964,59, -462,798, 663,232 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 59 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 416; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); - ent.v[ "origin" ] = ( -6365,04, 4578,04, 109,9 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 400; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); - ent.v[ "origin" ] = ( -6365,1, 4578,04, 109,746 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 401; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); - ent.v[ "origin" ] = ( -3946,92, -7250,32, 107,1 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 403; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); - ent.v[ "origin" ] = ( -3946,86, -7250,19, 107 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 402; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); - ent.v[ "origin" ] = ( -45,1183, -5452,09, 92,4005 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 405; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); - ent.v[ "origin" ] = ( -45,2307, -5452,06, 92,5112 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 404; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); - ent.v[ "origin" ] = ( 10160, -1748,7, -45,9436 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 406; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); - ent.v[ "origin" ] = ( 10160,1, -1748,62, -45,9508 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 407; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); - ent.v[ "origin" ] = ( 8133,62, 4787,71, -194,497 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 409; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); - ent.v[ "origin" ] = ( 8133,65, 4787,75, -194,479 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 408; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); - ent.v[ "origin" ] = ( 6301,07, 5079,12, 67,4271 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 410; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); - ent.v[ "origin" ] = ( 6300,89, 5078,98, 67,4032 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 411; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); - ent.v[ "origin" ] = ( -627,359, -615,075, 116,432 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 412; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); - ent.v[ "origin" ] = ( -627,572, -615,202, 116,432 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 413; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_ric" ); - ent.v[ "origin" ] = ( -4418,11, -626,9, 192,003 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 415; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_light_safety_max" ); - ent.v[ "origin" ] = ( -4418,04, -626,987, 191,91 ); - ent.v[ "angles" ] = ( 0, 1, 0 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 414; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_tranzit_light_street_tinhat" ); - ent.v[ "origin" ] = ( -6917,44, 3891,27, 81,125 ); - ent.v[ "angles" ] = ( 90, 359,662, -0,33762 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_edge_100" ); - ent.v[ "origin" ] = ( -9032,52, 4222,59, 40,0809 ); - ent.v[ "angles" ] = ( 0,716713, 61,9889, -1,86754 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_creek" ); - ent.v[ "origin" ] = ( 11131,7, 8831,49, -894,668 ); - ent.v[ "angles" ] = ( 81,0228, 227,719, -27,4136 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_smoke_pit" ); - ent.v[ "origin" ] = ( 10945,1, 8621,79, -1116,88 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 61 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_creek" ); - ent.v[ "origin" ] = ( 11178,6, 8859,45, -715,452 ); - ent.v[ "angles" ] = ( 63,6007, 216,198, -13,3547 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_creek" ); - ent.v[ "origin" ] = ( 10953,1, 8914,32, -688,637 ); - ent.v[ "angles" ] = ( 53,9874, 292,702, 1,41178 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_creek" ); - ent.v[ "origin" ] = ( 10983, 8838,08, -841,275 ); - ent.v[ "angles" ] = ( 66,6739, 293,054, 17,3617 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_creek" ); - ent.v[ "origin" ] = ( 10999, 8819,35, -930,992 ); - ent.v[ "angles" ] = ( 74,6464, 318,518, 15,5448 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_smoke_pit" ); - ent.v[ "origin" ] = ( 11118,6, 8507,76, -1176,88 ); - ent.v[ "angles" ] = ( 340, 61, 0 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_zmb_lava_100x100" ); - ent.v[ "origin" ] = ( 1417,38, -341,936, -67,875 ); - ent.v[ "angles" ] = vectorScale( ( 0, 1, 0 ), 175 ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createexploder( "fx_zmb_tranzit_flourescent_flicker" ); - ent.v[ "origin" ] = ( 1927,64, -1060,33, 131,881 ); - ent.v[ "angles" ] = ( 67, 269,911, 87,9181 ); - ent.v[ "type" ] = "exploder"; - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 490; -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/gametypes_zm/zgrief.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/gametypes_zm/zgrief.gsc deleted file mode 100644 index 71cdd4f..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/gametypes_zm/zgrief.gsc +++ /dev/null @@ -1,816 +0,0 @@ -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_audio_announcer; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/_demo; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_weap_cymbal_monkey; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_game_module_meat_utility; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/gametypes_zm/zmeat; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; -#include maps/mp/zombies/_zm_spawner; - -main() //checked matches cerberus output -{ - maps/mp/gametypes_zm/_zm_gametype::main(); - level.onprecachegametype = ::onprecachegametype; - level.onstartgametype = ::onstartgametype; - level.custom_spectate_permissions = ::setspectatepermissionsgrief; - level._game_module_custom_spawn_init_func = maps/mp/gametypes_zm/_zm_gametype::custom_spawn_init_func; - level._game_module_stat_update_func = maps/mp/zombies/_zm_stats::grief_custom_stat_update; - level._game_module_player_damage_callback = maps/mp/gametypes_zm/_zm_gametype::game_module_player_damage_callback; - level.custom_end_screen = ::custom_end_screen; - level.gamemode_map_postinit[ "zgrief" ] = ::postinit_func; - level._supress_survived_screen = 1; - level.game_module_team_name_override_og_x = 155; - level.prevent_player_damage = ::player_prevent_damage; - level._game_module_player_damage_grief_callback = ::game_module_player_damage_grief_callback; - level._grief_reset_message = ::grief_reset_message; - level._game_module_player_laststand_callback = ::grief_laststand_weapon_save; - level.onplayerspawned_restore_previous_weapons = ::grief_laststand_weapons_return; - level.game_module_onplayerconnect = ::grief_onplayerconnect; - level.game_mode_spawn_player_logic = ::game_mode_spawn_player_logic; - level.game_mode_custom_onplayerdisconnect = ::grief_onplayerdisconnect; - maps/mp/gametypes_zm/_zm_gametype::post_gametype_main( "zgrief" ); -} - -grief_onplayerconnect() //checked matches cerberus output -{ - self thread move_team_icons(); - self thread zgrief_player_bled_out_msg(); -} - -grief_onplayerdisconnect( disconnecting_player ) //checked matches cerberus output -{ - level thread update_players_on_bleedout_or_disconnect( disconnecting_player ); -} - -setspectatepermissionsgrief() //checked matches cerberus output -{ - self allowspectateteam( "allies", 1 ); - self allowspectateteam( "axis", 1 ); - self allowspectateteam( "freelook", 0 ); - self allowspectateteam( "none", 1 ); -} - -custom_end_screen() //checked changed to match cerberus output -{ - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - players[ i ].game_over_hud = newclienthudelem( players[ i ] ); - players[ i ].game_over_hud.alignx = "center"; - players[ i ].game_over_hud.aligny = "middle"; - players[ i ].game_over_hud.horzalign = "center"; - players[ i ].game_over_hud.vertalign = "middle"; - players[ i ].game_over_hud.y -= 130; - players[ i ].game_over_hud.foreground = 1; - players[ i ].game_over_hud.fontscale = 3; - players[ i ].game_over_hud.alpha = 0; - players[ i ].game_over_hud.color = ( 1, 1, 1 ); - players[ i ].game_over_hud.hidewheninmenu = 1; - players[ i ].game_over_hud settext( &"ZOMBIE_GAME_OVER" ); - players[ i ].game_over_hud fadeovertime( 1 ); - players[ i ].game_over_hud.alpha = 1; - if ( players[ i ] issplitscreen() ) - { - players[ i ].game_over_hud.fontscale = 2; - players[ i ].game_over_hud.y += 40; - } - players[ i ].survived_hud = newclienthudelem( players[ i ] ); - players[ i ].survived_hud.alignx = "center"; - players[ i ].survived_hud.aligny = "middle"; - players[ i ].survived_hud.horzalign = "center"; - players[ i ].survived_hud.vertalign = "middle"; - players[ i ].survived_hud.y -= 100; - players[ i ].survived_hud.foreground = 1; - players[ i ].survived_hud.fontscale = 2; - players[ i ].survived_hud.alpha = 0; - players[ i ].survived_hud.color = ( 1, 1, 1 ); - players[ i ].survived_hud.hidewheninmenu = 1; - if ( players[ i ] issplitscreen() ) - { - players[ i ].survived_hud.fontscale = 1.5; - players[ i ].survived_hud.y += 40; - } - winner_text = &"ZOMBIE_GRIEF_WIN"; - loser_text = &"ZOMBIE_GRIEF_LOSE"; - if ( level.round_number < 2 ) - { - winner_text = &"ZOMBIE_GRIEF_WIN_SINGLE"; - loser_text = &"ZOMBIE_GRIEF_LOSE_SINGLE"; - } - if ( is_true( level.host_ended_game ) ) - { - players[ i ].survived_hud settext( &"MP_HOST_ENDED_GAME" ); - } - else - { - if ( isDefined( level.gamemodulewinningteam ) && players[ i ]._encounters_team == level.gamemodulewinningteam ) - { - players[ i ].survived_hud settext( winner_text, level.round_number ); - } - else - { - players[ i ].survived_hud settext( loser_text, level.round_number ); - } - } - players[ i ].survived_hud fadeovertime( 1 ); - players[ i ].survived_hud.alpha = 1; - } -} - -postinit_func() //checked matches cerberus output -{ - level.min_humans = 1; - level.zombie_ai_limit = 24; - level.prevent_player_damage = ::player_prevent_damage; - level.lock_player_on_team_score = 1; - level._zombie_spawning = 0; - level._get_game_module_players = undefined; - level.powerup_drop_count = 0; - level.is_zombie_level = 1; - level._effect[ "meat_impact" ] = loadfx( "maps/zombie/fx_zmb_meat_impact" ); - level._effect[ "spawn_cloud" ] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); - level._effect[ "meat_stink_camera" ] = loadfx( "maps/zombie/fx_zmb_meat_stink_camera" ); - level._effect[ "meat_stink_torso" ] = loadfx( "maps/zombie/fx_zmb_meat_stink_torso" ); - include_powerup("meat_stink"); - maps/mp/zombies/_zm_powerups::add_zombie_powerup( "meat_stink", "t6_wpn_zmb_meat_world", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_drop_meat, 0, 0, 0 ); - setmatchtalkflag( "DeadChatWithDead", 1 ); - setmatchtalkflag( "DeadChatWithTeam", 1 ); - setmatchtalkflag( "DeadHearTeamLiving", 1 ); - setmatchtalkflag( "DeadHearAllLiving", 1 ); - setmatchtalkflag( "EveryoneHearsEveryone", 1 ); -} - -func_should_drop_meat() //checked matches cerberus output -{ - if ( minigun_no_drop() ) - { - return 0; - } - return 1; -} - -minigun_no_drop() //checked matches cerberus output -{ - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - if ( players[ i ].ignoreme == 1 ) - { - return 1; - } - } - if ( is_true( level.meat_on_ground) ) - { - return 1; - } - return 0; -} - -grief_game_end_check_func() //checked matches cerberus output -{ - return 0; -} - -player_prevent_damage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) //checked matches cerberus output -{ - if ( isDefined( eattacker ) && isplayer( eattacker ) && self != eattacker && !eattacker hasperk( "specialty_noname" ) && !is_true( self.is_zombie )) - { - return 1; - } - return 0; -} - -game_module_player_damage_grief_callback( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) //checked matches cerberus output -{ - penalty = 10; - if ( isDefined( eattacker ) && isplayer( eattacker ) && eattacker != self && eattacker.team != self.team && smeansofdeath == "MOD_MELEE" ) - { - self applyknockback( idamage, vdir ); - } -} - -onprecachegametype() //checked matches cerberus output -{ - level.playersuicideallowed = 1; - level.suicide_weapon = "death_self_zm"; - precacheitem( "death_self_zm" ); - precacheshellshock( "grief_stab_zm" ); - precacheshader( "faction_cdc" ); - precacheshader( "faction_cia" ); - precacheshader( "waypoint_revive_cdc_zm" ); - precacheshader( "waypoint_revive_cia_zm" ); - level._effect[ "butterflies" ] = loadfx( "maps/zombie/fx_zmb_impact_noharm" ); - level thread maps/mp/zombies/_zm_game_module_meat_utility::init_item_meat("zgrief"); - level thread maps/mp/gametypes_zm/_zm_gametype::init(); - maps/mp/gametypes_zm/_zm_gametype::rungametypeprecache( "zgrief" ); -} - -onstartgametype() //checked matches cerberus output -{ - level.no_end_game_check = 1; - level._game_module_game_end_check = ::grief_game_end_check_func; - level.round_end_custom_logic = ::grief_round_end_custom_logic; - maps/mp/gametypes_zm/_zm_gametype::setup_classic_gametype(); - maps/mp/gametypes_zm/_zm_gametype::rungametypemain( "zgrief", ::zgrief_main ); -} - -zgrief_main() //checked changed to match cerberus output -{ - level thread maps/mp/zombies/_zm::round_start(); - level thread maps/mp/gametypes_zm/_zm_gametype::kill_all_zombies(); - flag_wait( "initial_blackscreen_passed" ); - level thread maps/mp/zombies/_zm_game_module::wait_for_team_death_and_round_end(); - players = get_players(); - foreach ( player in players ) - { - player.is_hotjoin = 0; - } - wait 1; - playsoundatposition( "vox_zmba_grief_intro_0", ( 0, 0, 0 ) ); -} - -move_team_icons() //checked matches cerberus output -{ - self endon( "disconnect" ); - flag_wait( "initial_blackscreen_passed" ); - wait 0.5; -} - -kill_start_chest() //checked matches cerberus output -{ - flag_wait( "initial_blackscreen_passed" ); - wait 2; - start_chest = getstruct( "start_chest", "script_noteworthy" ); - start_chest maps/mp/zombies/_zm_magicbox::hide_chest(); -} - -meat_stink_powerup_grab( powerup, who ) //checked matches cerberus output -{ - switch ( powerup.powerup_name ) - { - case "meat_stink": - level thread meat_stink( who ); - break; - } -} - -meat_stink(who) //checked matches cerberus output -{ - weapons = who getweaponslist(); - has_meat = 0; - foreach ( weapon in weapons ) - { - if ( weapon == "item_meat_zm" ) - { - has_meat = 1; - } - } - if ( has_meat ) - { - return; - } - who.pre_meat_weapon = who getcurrentweapon(); - level notify( "meat_grabbed" ); - who notify( "meat_grabbed" ); - who playsound( "zmb_pickup_meat" ); - who increment_is_drinking(); - who giveweapon( "item_meat_zm" ); - who switchtoweapon( "item_meat_zm" ); - who setweaponammoclip( "item_meat_zm", 1 ); -} - -meat_stink_on_ground(position_to_play) //checked matches cerberus output -{ - level.meat_on_ground = 1; - attractor_point = spawn( "script_model", position_to_play ); - attractor_point setmodel( "tag_origin" ); - attractor_point playsound( "zmb_land_meat" ); - wait 0.2 ; - playfxontag( level._effect[ "meat_stink_torso" ], attractor_point, "tag_origin" ); - attractor_point playloopsound( "zmb_meat_flies" ); - attractor_point create_zombie_point_of_interest( 1536, 32, 10000 ); - attractor_point.attract_to_origin = 1; - attractor_point thread create_zombie_point_of_interest_attractor_positions( 4, 45 ); - attractor_point thread maps/mp/zombies/_zm_weap_cymbal_monkey::wait_for_attractor_positions_complete(); - attractor_point delay_thread( 15, ::self_delete ); - wait 16 ; - level.meat_on_ground = undefined; -} - -meat_bounce_override( pos, normal, ent ) //checked matches cerberus output -{ - if ( isdefined( ent ) && isplayer( ent ) ) - { - if ( !ent maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - level thread meat_stink_player( ent ); - if(isdefined( self.owner ) ) - { - maps/mp/_demo::bookmark( "zm_player_meat_stink", GetTime(), ent, self.owner, 0, self ); - self.owner maps/mp/zombies/_zm_stats::increment_client_stat( "contaminations_given" ); - } - } - } - else - { - players = getplayers(); - closest_player = undefined; - closest_player_dist = 10000; - player_index = 0; - while ( player_index < players.size ) - { - player_to_check = players[ player_index ]; - if ( self.owner == player_to_check ) - { - player_index++; - continue; - } - if ( player_to_check maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - player_index++; - continue; - } - distsq = distancesquared( pos, player_to_check.origin ); - if ( distsq < closest_player_dist ) - { - closest_player = player_to_check; - closest_player_dist = distsq; - } - player_index++; - } - if ( isdefined( closest_player ) ) - { - level thread meat_stink_player( closest_player ); - if ( isdefined( self.owner ) ) - { - maps/mp/_demo::bookmark( "zm_player_meat_stink", GetTime(), closest_player, self.owner, 0, self ); - self.owner maps/mp/zombies/_zm_stats::increment_client_stat( "contaminations_given" ); - } - } - else - { - valid_poi = check_point_in_enabled_zone( pos, undefined, undefined ); - if ( valid_poi ) - { - self hide(); - level thread meat_stink_on_ground( self.origin ); - } - } - playfx( level._effect[ "meat_impact" ], self.origin ); - } - self delete(); -} - -meat_stink_player( who ) //checked matches cerberus output -{ - level notify( "new_meat_stink_player" ); - level endon( "new_meat_stink_player" ); - who.ignoreme = 0; - players = get_players(); - foreach ( player in players ) - { - player thread meat_stink_player_cleanup(); - if ( player != who ) - { - player.ignoreme = 1; - } - } - who thread meat_stink_player_create(); - who waittill_any_or_timeout( 30, "disconnect", "player_downed", "bled_out" ); - players = get_players(); - foreach ( player in players ) - { - player thread meat_stink_player_cleanup(); - player.ignoreme = 0; - } -} - -meat_stink_player_create() //checked matches cerberus output -{ - self maps/mp/zombies/_zm_stats::increment_client_stat( "contaminations_received" ); - self endon( "disconnect" ); - self endon( "death" ); - tagname = "J_SpineLower"; - self.meat_stink_3p = spawn( "script_model", self gettagorigin( tagname ) ); - self.meat_stink_3p setmodel( "tag_origin" ); - self.meat_stink_3p linkto( self, tagname ); - wait 0.5; - playfxontag( level._effect[ "meat_stink_torso" ], self.meat_stink_3p, "tag_origin" ); - self setclientfieldtoplayer( "meat_stink", 1 ); -} - -meat_stink_player_cleanup() //checked matches cerberus output -{ - if ( isdefined( self.meat_stink_3p ) ) - { - self.meat_stink_3p unlink(); - self.meat_stink_3p delete(); - } - self setclientfieldtoplayer( "meat_stink", 0 ); -} - -door_close_zombie_think() //checked changed to match cerberus output -{ - self endon( "death" ); - while ( isalive( self ) ) - { - if ( isDefined( self.enemy ) && isplayer( self.enemy ) ) - { - insamezone = 0; - keys = getarraykeys( level.zones ); - for ( i = 0; i < keys.size; i++ ) - { - if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( keys[ i ] ) && self.enemy maps/mp/zombies/_zm_zonemgr::entity_in_zone( keys[ i ] ) ) - { - insamezone = 1; - } - } - if ( insamezone ) - { - wait 3; - } - nearestzombienode = getnearestnode( self.origin ); - nearestplayernode = getnearestnode( self.enemy.origin ); - if ( isDefined( nearestzombienode ) && isDefined( nearestplayernode ) ) - { - if ( !nodesvisible( nearestzombienode, nearestplayernode ) && !nodescanpath( nearestzombienode, nearestplayernode ) ) - { - self silentlyremovezombie(); - } - } - } - wait 1; - } -} - -silentlyremovezombie() //checked matches cebrerus output -{ - level.zombie_total++; - playfx( level._effect[ "spawn_cloud" ], self.origin ); - self.skip_death_notetracks = 1; - self.nodeathragdoll = 1; - self dodamage( self.maxhealth * 2, self.origin, self, self, "none", "MOD_SUICIDE" ); - self self_delete(); -} - -zgrief_player_bled_out_msg() //checked matches cerberus output -{ - level endon( "end_game" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "bled_out" ); - level thread update_players_on_bleedout_or_disconnect( self ); - } -} - -show_grief_hud_msg( msg, msg_parm, offset, cleanup_end_game ) //checked matches cerberus output -{ - self endon( "disconnect" ); - while ( isDefined( level.hostmigrationtimer ) ) - { - wait 0.05; - } - zgrief_hudmsg = newclienthudelem( self ); - zgrief_hudmsg.alignx = "center"; - zgrief_hudmsg.aligny = "middle"; - zgrief_hudmsg.horzalign = "center"; - zgrief_hudmsg.vertalign = "middle"; - zgrief_hudmsg.y -= 130; - if ( self issplitscreen() ) - { - zgrief_hudmsg.y += 70; - } - if ( isDefined( offset ) ) - { - zgrief_hudmsg.y += offset; - } - zgrief_hudmsg.foreground = 1; - zgrief_hudmsg.fontscale = 5; - zgrief_hudmsg.alpha = 0; - zgrief_hudmsg.color = ( 1, 1, 1 ); - zgrief_hudmsg.hidewheninmenu = 1; - zgrief_hudmsg.font = "default"; - if ( isDefined( cleanup_end_game ) && cleanup_end_game ) - { - level endon( "end_game" ); - zgrief_hudmsg thread show_grief_hud_msg_cleanup(); - } - if ( isDefined( msg_parm ) ) - { - zgrief_hudmsg settext( msg, msg_parm ); - } - else - { - zgrief_hudmsg settext( msg ); - } - zgrief_hudmsg changefontscaleovertime( 0.25 ); - zgrief_hudmsg fadeovertime( 0.25 ); - zgrief_hudmsg.alpha = 1; - zgrief_hudmsg.fontscale = 2; - wait 3.25; - zgrief_hudmsg changefontscaleovertime( 1 ); - zgrief_hudmsg fadeovertime( 1 ); - zgrief_hudmsg.alpha = 0; - zgrief_hudmsg.fontscale = 5; - wait 1; - zgrief_hudmsg notify( "death" ); - if ( isDefined( zgrief_hudmsg ) ) - { - zgrief_hudmsg destroy(); - } -} - -show_grief_hud_msg_cleanup() //checked matches cerberus output -{ - self endon( "death" ); - level waittill( "end_game" ); - if ( isDefined( self ) ) - { - self destroy(); - } -} - -grief_reset_message() //checked changed to match cerberus output -{ - msg = &"ZOMBIE_GRIEF_RESET"; - players = get_players(); - if ( isDefined( level.hostmigrationtimer ) ) - { - while ( isDefined( level.hostmigrationtimer ) ) - { - wait 0.05; - } - wait 4; - } - foreach ( player in players ) - { - player thread show_grief_hud_msg( msg ); - } - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "grief_restarted" ); -} - -grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) //checked changed to match cerberus output -{ - self.grief_savedweapon_weapons = self getweaponslist(); - self.grief_savedweapon_weaponsammo_stock = []; - self.grief_savedweapon_weaponsammo_clip = []; - self.grief_savedweapon_currentweapon = self getcurrentweapon(); - self.grief_savedweapon_grenades = self get_player_lethal_grenade(); - if ( isDefined( self.grief_savedweapon_grenades ) ) - { - self.grief_savedweapon_grenades_clip = self getweaponammoclip( self.grief_savedweapon_grenades ); - } - self.grief_savedweapon_tactical = self get_player_tactical_grenade(); - if ( isDefined( self.grief_savedweapon_tactical ) ) - { - self.grief_savedweapon_tactical_clip = self getweaponammoclip( self.grief_savedweapon_tactical ); - } - for ( i = 0; i < self.grief_savedweapon_weapons.size; i++ ) - { - self.grief_savedweapon_weaponsammo_clip[ i ] = self getweaponammoclip( self.grief_savedweapon_weapons[ i ] ); - self.grief_savedweapon_weaponsammo_stock[ i ] = self getweaponammostock( self.grief_savedweapon_weapons[ i ] ); - } - if ( isDefined( self.hasriotshield ) && self.hasriotshield ) - { - self.grief_hasriotshield = 1; - } - if ( self hasweapon( "claymore_zm" ) ) - { - self.grief_savedweapon_claymore = 1; - self.grief_savedweapon_claymore_clip = self getweaponammoclip( "claymore_zm" ); - } - if ( isDefined( self.current_equipment ) ) - { - self.grief_savedweapon_equipment = self.current_equipment; - } -} - -grief_laststand_weapons_return() //checked changed to match cerberus output -{ - if ( isDefined( level.isresetting_grief ) && !level.isresetting_grief ) - { - return 0; - } - if ( !isDefined( self.grief_savedweapon_weapons ) ) - { - return 0; - } - primary_weapons_returned = 0; - i = 0; - while ( i < self.grief_savedweapon_weapons.size ) - { - if ( isdefined( self.grief_savedweapon_grenades ) && self.grief_savedweapon_weapons[ i ] == self.grief_savedweapon_grenades || ( isdefined( self.grief_savedweapon_tactical ) && self.grief_savedweapon_weapons[ i ] == self.grief_savedweapon_tactical ) ) - { - i++; - continue; - } - if ( isweaponprimary( self.grief_savedweapon_weapons[ i ] ) ) - { - if ( primary_weapons_returned >= 2 ) - { - i++; - continue; - } - primary_weapons_returned++; - } - if ( "item_meat_zm" == self.grief_savedweapon_weapons[ i ] ) - { - i++; - continue; - } - self giveweapon( self.grief_savedweapon_weapons[ i ], 0, self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( self.grief_savedweapon_weapons[ i ] ) ); - if ( isdefined( self.grief_savedweapon_weaponsammo_clip[ i ] ) ) - { - self setweaponammoclip( self.grief_savedweapon_weapons[ i ], self.grief_savedweapon_weaponsammo_clip[ i ] ); - } - if ( isdefined( self.grief_savedweapon_weaponsammo_stock[ i ] ) ) - { - self setweaponammostock( self.grief_savedweapon_weapons[ i ], self.grief_savedweapon_weaponsammo_stock[ i ] ); - } - i++; - } - if ( isDefined( self.grief_savedweapon_grenades ) ) - { - self giveweapon( self.grief_savedweapon_grenades ); - if ( isDefined( self.grief_savedweapon_grenades_clip ) ) - { - self setweaponammoclip( self.grief_savedweapon_grenades, self.grief_savedweapon_grenades_clip ); - } - } - if ( isDefined( self.grief_savedweapon_tactical ) ) - { - self giveweapon( self.grief_savedweapon_tactical ); - if ( isDefined( self.grief_savedweapon_tactical_clip ) ) - { - self setweaponammoclip( self.grief_savedweapon_tactical, self.grief_savedweapon_tactical_clip ); - } - } - if ( isDefined( self.current_equipment ) ) - { - self maps/mp/zombies/_zm_equipment::equipment_take( self.current_equipment ); - } - if ( isDefined( self.grief_savedweapon_equipment ) ) - { - self.do_not_display_equipment_pickup_hint = 1; - self maps/mp/zombies/_zm_equipment::equipment_give( self.grief_savedweapon_equipment ); - self.do_not_display_equipment_pickup_hint = undefined; - } - if ( isDefined( self.grief_hasriotshield ) && self.grief_hasriotshield ) - { - if ( isDefined( self.player_shield_reset_health ) ) - { - self [[ self.player_shield_reset_health ]](); - } - } - if ( isDefined( self.grief_savedweapon_claymore ) && self.grief_savedweapon_claymore ) - { - self giveweapon( "claymore_zm" ); - self set_player_placeable_mine( "claymore_zm" ); - self setactionslot( 4, "weapon", "claymore_zm" ); - self setweaponammoclip( "claymore_zm", self.grief_savedweapon_claymore_clip ); - } - primaries = self getweaponslistprimaries(); - foreach ( weapon in primaries ) - { - if ( isDefined( self.grief_savedweapon_currentweapon ) && self.grief_savedweapon_currentweapon == weapon ) - { - self switchtoweapon( weapon ); - return 1; - } - } - if ( primaries.size > 0 ) - { - self switchtoweapon( primaries[ 0 ] ); - return 1; - } - return 0; -} - -grief_store_player_scores() //checked changed to match cerberus output -{ - players = get_players(); - foreach ( player in players ) - { - player._pre_round_score = player.score; - } -} - -grief_restore_player_score() //checked matches cerberus output -{ - if ( !isDefined( self._pre_round_score ) ) - { - self._pre_round_score = self.score; - } - if ( isDefined( self._pre_round_score ) ) - { - self.score = self._pre_round_score; - self.pers[ "score" ] = self._pre_round_score; - } -} - -game_mode_spawn_player_logic() //checked matches cerberus output -{ - if ( flag( "start_zombie_round_logic" ) && !isDefined( self.is_hotjoin ) ) - { - self.is_hotjoin = 1; - return 1; - } - return 0; -} - -update_players_on_bleedout_or_disconnect( excluded_player ) //checked changed to match cerberus output -{ - other_team = undefined; - players = get_players(); - players_remaining = 0; - foreach ( player in players ) - { - if ( player == excluded_player ) - { - } - else if ( player.team == excluded_player.team ) - { - if ( is_player_valid( player ) ) - { - players_remaining++; - } - } - } - foreach ( player in players ) - { - if ( player == excluded_player ) - { - } - else if ( player.team != excluded_player.team ) - { - other_team = player.team; - if ( players_remaining < 1 ) - { - player thread show_grief_hud_msg( &"ZOMBIE_ZGRIEF_ALL_PLAYERS_DOWN", undefined, undefined, 1 ); - player delay_thread_watch_host_migrate( 2, ::show_grief_hud_msg, &"ZOMBIE_ZGRIEF_SURVIVE", undefined, 30, 1 ); - } - player thread show_grief_hud_msg( &"ZOMBIE_ZGRIEF_PLAYER_BLED_OUT", players_remaining ); - } - } - if ( players_remaining == 1 ) - { - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "last_player", excluded_player.team ); - } - if ( !isDefined( other_team ) ) - { - return; - } - if ( players_remaining < 1 ) - { - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "4_player_down", other_team ); - } - else - { - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( players_remaining + "_player_left", other_team ); - } -} - -delay_thread_watch_host_migrate( timer, func, param1, param2, param3, param4, param5, param6 ) //checked matches cerberus output -{ - self thread _delay_thread_watch_host_migrate_proc( func, timer, param1, param2, param3, param4, param5, param6 ); -} - -_delay_thread_watch_host_migrate_proc( func, timer, param1, param2, param3, param4, param5, param6 ) //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - wait timer; - if ( isDefined( level.hostmigrationtimer ) ) - { - while ( isDefined( level.hostmigrationtimer ) ) - { - wait 0.05; - } - wait timer; - } - single_thread( self, func, param1, param2, param3, param4, param5, param6 ); -} - -grief_round_end_custom_logic() //checked matches cerberus output -{ - waittillframeend; - if ( isDefined( level.gamemodulewinningteam ) ) - { - level notify( "end_round_think" ); - } -} - - - diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/gametypes_zm/zmeat.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/gametypes_zm/zmeat.gsc deleted file mode 100644 index 14a59ae..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/gametypes_zm/zmeat.gsc +++ /dev/null @@ -1,2400 +0,0 @@ -//checked includes changed to match cerberus output -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_audio_announcer; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_game_module_meat_utility; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; - -//#using_animtree( "zombie_meat" ); - -main() //checked matches cerberus output -{ - maps/mp/gametypes_zm/_zm_gametype::main(); - registerclientfield( "allplayers", "holding_meat", 7000, 1, "int" ); - registerclientfield( "scriptmover", "ring_glowfx", 7000, 1, "int" ); - registerclientfield( "scriptmover", "ring_glow_meatfx", 7000, 1, "int" ); - level.onprecachegametype = ::onprecachegametype; - level.onstartgametype = ::onstartgametype; - set_game_var( "ZM_roundLimit", 5 ); - set_game_var( "ZM_scoreLimit", 5 ); - set_gamemode_var( "post_init_zombie_spawn_func", ::meat_zombie_post_spawn_init ); - set_gamemode_var( "match_end_notify", "meat_end" ); - set_gamemode_var( "match_end_func", ::meat_end_match ); - level._no_static_unitriggers = 1; - level._game_module_player_damage_callback = maps/mp/gametypes_zm/_zm_gametype::game_module_player_damage_callback; - level._game_module_player_laststand_callback = ::meat_last_stand_callback; - level.no_end_game_check = 1; - maps/mp/gametypes_zm/_zm_gametype::post_gametype_main( "zmeat" ); - level thread maps/mp/gametypes_zm/_zm_gametype::init(); - level.zm_roundswitch = 1; - level.zm_switchsides_on_roundswitch = 1; - level._effect[ "meat_marker" ] = loadfx( "maps/zombie/fx_zmb_meat_marker" ); - level._effect[ "butterflies" ] = loadfx( "maps/zombie/fx_zmb_impact_noharm" ); - level._effect[ "meat_glow" ] = loadfx( "maps/zombie/fx_zmb_meat_glow" ); - level._effect[ "meat_glow3p" ] = loadfx( "maps/zombie/fx_zmb_meat_glow_3p" ); - level._effect[ "spawn_cloud" ] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); - level._effect[ "fw_burst" ] = loadfx( "maps/zombie/fx_zmb_race_fireworks_burst_center" ); - level._effect[ "fw_impact" ] = loadfx( "maps/zombie/fx_zmb_race_fireworks_drop_impact" ); - level._effect[ "fw_drop" ] = loadfx( "maps/zombie/fx_zmb_race_fireworks_drop_trail" ); - level._effect[ "fw_trail" ] = loadfx( "maps/zombie/fx_zmb_race_fireworks_trail" ); - level._effect[ "fw_trail_cheap" ] = loadfx( "maps/zombie/fx_zmb_race_fireworks_trail_intro" ); - level._effect[ "fw_pre_burst" ] = loadfx( "maps/zombie/fx_zmb_race_fireworks_burst_small" ); - level._effect[ "meat_bounce" ] = loadfx( "maps/zombie/fx_zmb_meat_collision_glow" ); - level._effect[ "ring_glow" ] = loadfx( "misc/fx_zombie_powerup_on" ); - level.can_revive_game_module = ::can_revive; - onplayerconnect_callback( ::meat_on_player_connect ); - spawn_level_meat_manager(); - init_animtree(); -} - -onprecachegametype() //checked changed to match cerberus output -{ - level thread maps/mp/zombies/_zm_game_module_meat_utility::init_item_meat( "zmeat" ); - maps/mp/gametypes_zm/_zm_gametype::rungametypeprecache( "zmeat" ); - game_mode_objects = getstructarray( "game_mode_object", "targetname" ); - meat_objects = getstructarray( "meat_object", "targetname" ); - all_structs = arraycombine( game_mode_objects, meat_objects, 1, 0 ); - for ( i = 0; i < all_structs.size; i++ ) - { - if ( isDefined( all_structs[ i ].script_parameters ) ) - { - precachemodel( all_structs[ i ].script_parameters ); - } - } - precacheshellshock( "grief_stab_zm" ); - precacheitem( "minigun_zm" ); - precacheshader( "faction_cdc" ); - precacheshader( "faction_cia" ); - precachemodel( "p6_zm_sign_meat_01_step1" ); - precachemodel( "p6_zm_sign_meat_01_step2" ); - precachemodel( "p6_zm_sign_meat_01_step3" ); - precachemodel( "p6_zm_sign_meat_01_step4" ); -} - -meat_hub_start_func() //checked changed to match cerberus output -{ - level thread meat_player_initial_spawn(); - level thread item_meat_reset( level._meat_start_point ); - level thread spawn_meat_zombies(); - level thread monitor_meat_on_team(); - level thread init_minigun_ring(); - level thread init_splitter_ring(); - level thread init_ammo_ring(); - level thread hide_non_meat_objects(); - level thread setup_meat_world_objects(); - level._zombie_path_timer_override = ::zombie_path_timer_override; - level.zombie_health = level.zombie_vars[ "zombie_health_start" ]; - level._zombie_spawning = 0; - level._poi_override = ::meat_poi_override_func; - level._meat_on_team = undefined; - level._meat_zombie_spawn_timer = 2; - level._meat_zombie_spawn_health = 1; - level._minigun_time_override = 15; - level._get_game_module_players = ::get_game_module_players; - level.powerup_drop_count = 0; - level.meat_spawners = level.zombie_spawners; - if ( !is_true( level._meat_callback_initialized ) ) - { - maps/mp/zombies/_zm::register_player_damage_callback( maps/mp/zombies/_zm_game_module::damage_callback_no_pvp_damage ); - level._meat_callback_initialized = 1; - } - setmatchtalkflag( "DeadChatWithDead", 1 ); - setmatchtalkflag( "DeadChatWithTeam", 1 ); - setmatchtalkflag( "DeadHearTeamLiving", 1 ); - setmatchtalkflag( "DeadHearAllLiving", 1 ); - setmatchtalkflag( "EveryoneHearsEveryone", 1 ); - setteamhasmeat( "allies", 0 ); - setteamhasmeat( "axis", 0 ); - level thread zmbmusicsetupmeat(); - level.zombie_spawn_fx = level._effect[ "spawn_cloud" ]; - weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); - for ( i = 0; i < weapon_spawns.size; i++ ) - { - weapon_spawns[ i ] trigger_off(); - } - level thread monitor_meat_on_side(); - level thread item_meat_watch_for_throw(); - level thread hold_meat_monitor(); - flag_wait( "start_encounters_match_logic" ); - level thread wait_for_team_death( 1 ); - level thread wait_for_team_death( 2 ); - level.team_a_downed = 0; - level.team_b_downed = 0; -} - -meat_on_player_connect() //checked matches cerberus output -{ - hotjoined = flag( "initial_players_connected" ); - self thread spawn_player_meat_manager(); - self thread wait_for_player_disconnect(); - self thread wait_for_player_downed(); - /* -/# - self thread watch_debug_input(); -#/ - */ - if ( hotjoined ) - { - one = 1; - two = 2; - if ( get_game_var( "switchedsides" ) ) - { - one = 2; - two = 1; - } - if ( get_game_var( "side_selection" ) == 1 ) - { - if ( self.team == "allies" ) - { - self._meat_team = one; - } - else - { - self._meat_team = two; - } - } - else if ( self.team == "allies" ) - { - self._meat_team = two; - } - else - { - self._meat_team = one; - } - self meat_player_setup(); - } -} - -meat_on_player_disconnect() //checked changed to match cerberus output -{ - team0 = 1; - team1 = 2; - team_counts = []; - team_counts[ team0 ] = 0; - team_counts[ team1 ] = 0; - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - team_counts[ players[ i ]._meat_team ] += 1; - } - if ( team_counts[ team0 ] == 0 ) - { - maps/mp/gametypes_zm/_zm_gametype::end_rounds_early( "B" ); - } - if ( team_counts[ team1 ] == 0 ) - { - maps/mp/gametypes_zm/_zm_gametype::end_rounds_early( "A" ); - } -} - -wait_for_player_disconnect() //checked matches cerberus output -{ - level endon( "end_game" ); - self waittill( "disconnect" ); - meat_on_player_disconnect(); -} - -watch_debug_input() //dev call didn't check -{ - /* -/# - self endon( "disconnect" ); - for ( ;; ) - { - if ( self actionslottwobuttonpressed() ) - { - if ( getDvar( #"0B188A91" ) != "" ) - { - self disableinvulnerability(); - self dodamage( self.health + 666, self.origin ); - } - } - wait 0,05; -#/ - } - */ -} - -zmbmusicsetupmeat() //checked matches cerberus output -{ - level thread maps/mp/zombies/_zm_audio::setupmusicstate( "waiting", "ENC_WAITING", 0, 0, 0, undefined ); - level thread maps/mp/zombies/_zm_audio::setupmusicstate( "round_start", "ENC_ROUND_START", 0, 0, 0, undefined ); - level thread maps/mp/zombies/_zm_audio::setupmusicstate( "round_end", "ENC_ROUND_END", 0, 0, 0, undefined ); - level thread maps/mp/zombies/_zm_audio::setupmusicstate( "halftime", "ENC_HALFTIME", 0, 0, 0, undefined ); - level thread maps/mp/zombies/_zm_audio::setupmusicstate( "match_over", "ENC_MATCH_OVER", 0, 0, 0, undefined ); -} - -monitor_meat_on_side() //checked changed to match cerberus output -{ - level endon( "meat_end" ); - level waittill( "meat_grabbed" ); - last_team = level._meat_on_team; - level.meat_lost_time_limit = 5000; - while ( 1 ) - { - if ( isDefined( level.item_meat ) ) - { - if ( !isDefined( level._meat_team_1_volume ) || !isDefined( level._meat_team_2_volume ) ) - { - //iprintlnbold( "BUG: There is something wrong with the team volumes" ); - } - if ( isDefined( level._meat_team_1_volume ) && level.item_meat istouching( level._meat_team_1_volume ) ) - { - level._meat_on_team = 1; - level.meat_lost_time = undefined; - } - else if ( isDefined( level._meat_team_2_volume ) && level.item_meat istouching( level._meat_team_2_volume ) ) - { - level._meat_on_team = 2; - level.meat_lost_time = undefined; - } - else if ( isDefined( last_team ) ) - { - if ( !isDefined( level.meat_lost_time ) ) - { - level.meat_lost_time = getTime(); - } - else if ( ( getTime() - level.meat_lost_time ) > level.meat_lost_time_limit ) - { - add_meat_event( "level_lost_meat" ); - level thread item_meat_reset( level._meat_start_point, 1 ); - level.meat_lost_time = undefined; - level waittill( "meat_grabbed" ); - } - } - } - else - { - player_with_meat = get_player_with_meat(); - if ( !isDefined( player_with_meat ) ) - { - if ( !isDefined( level.meat_lost_time ) ) - { - level.meat_lost_time = getTime(); - } - else if ( ( getTime() - level.meat_lost_time ) > level.meat_lost_time_limit ) - { - add_meat_event( "level_lost_meat" ); - level thread item_meat_reset( level._meat_start_point, 1 ); - level.meat_lost_time = undefined; - level waittill( "meat_grabbed" ); - } - } - else - { - level.meat_lost_time = undefined; - } - } - - if ( isDefined( level._meat_on_team ) && isDefined( last_team ) && level._meat_on_team != last_team ) - { - level notify( "clear_ignore_all" ); - add_meat_event( "level_meat_team", level._meat_on_team ); - last_team = level._meat_on_team; - assign_meat_to_team( undefined, level._meat_on_team ); - /* -/# - if ( isDefined( level.item_meat ) ) - { - playfx( level._effect[ "spawn_cloud" ], level.item_meat.origin ); -#/ - } - */ - } - wait 0.05; - } -} - -item_meat_watch_for_throw() //checked changed to match beta dump -{ - level endon( "meat_end" ); - for ( ;; ) - { - level waittill( "meat_thrown", who ); - add_meat_event( "player_thrown", who ); - if ( is_true( who._spawning_meat ) ) - { - continue; - } - if ( randomintrange( 1, 101 ) <= 10 ) - { - } - who._has_meat = 0; - if ( isDefined( who._has_meat_hud ) ) - { - who._has_meat_hud destroy(); - } - assign_meat_to_team( undefined, level._meat_on_team ); - } -} - -hold_meat_monitor() //checked changed to match beta dump -{ - level endon( "meat_end" ); - level waittill( "meat_grabbed" ); - while ( 1 ) - { - player = get_player_with_meat(); - if ( !isDefined( player ) ) - { - wait 0.2; - continue; - } - if ( !should_try_to_bring_back_teammate( player._meat_team ) ) - { - wait 0.2; - continue; - } - if ( !is_true( player._bringing_back_teammate ) ) - { - player thread bring_back_teammate_progress(); - } - wait 0.2; - } -} - -meat_zombie_post_spawn_init() //checked matches cerberus output -{ -} - -create_item_meat_watcher() //checked matches cerberus output -{ - wait 0.05; - watcher = self maps/mp/gametypes_zm/_weaponobjects::createuseweaponobjectwatcher( "item_meat", get_gamemode_var( "item_meat_name" ), self.team ); - watcher.pickup = ::item_meat_on_pickup; - watcher.onspawn = ::item_meat_spawned; - watcher.onspawnretrievetriggers = ::play_item_meat_on_spawn_retrieve_trigger; - watcher.headicon = 0; -} - -item_meat_spawned( unused0, unused1 ) //checked matches cerberus output -{ - maps/mp/gametypes_zm/_weaponobjects::voidonspawn( unused0, unused1 ); - self.meat_is_moving = 0; - self.meat_is_flying = 0; -} - -wait_for_player_downed() //checked matches cerberus output -{ - self endon( "disconnect" ); - while ( isDefined( self ) ) - { - self waittill_any( "player_downed", "fake_death", "death" ); - add_meat_event( "player_down", self ); - wait 0.1; - if ( isDefined( self._meat_team ) ) - { - self thread watch_save_player(); - players = get_players_on_meat_team( self._meat_team ); - if ( players.size >= 2 ) - { - } - } - } -} - -item_meat_watch_stationary() //checked changed to match beta dump -{ - self endon( "death" ); - self endon( "picked_up" ); - self.meat_is_moving = 1; - self waittill( "stationary" ); - self playloopsound( "zmb_meat_looper", 2 ); - if ( !is_true( self._fake_meat ) ) - { - add_meat_event( "meat_stationary", self ); - } - else - { - add_meat_event( "fake_meat_stationary", self ); - } - if ( !is_true( self._fake_meat ) ) - { - level._meat_moving = 0; - level._meat_splitter_activated = 0; - level._last_person_to_throw_meat = undefined; - } - self.meat_is_moving = 0; - if ( isDefined( level._meat_on_team ) ) - { - teamplayers = get_players_on_meat_team( level._meat_on_team ); - for ( i = 0; i < teamplayers.size; i++ ) - { - if ( isDefined( teamplayers[ i ] ) && isDefined( teamplayers[ i ]._encounters_team ) ) - { - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_land", teamplayers[ i ]._encounters_team ); - break; - } - } - } -} - -item_meat_watch_bounce() //checked changed to match beta dump -{ - self endon( "death" ); - self endon( "picked_up" ); - self.meat_is_flying = 1; - self waittill( "grenade_bounce", pos, normal, ent ); - if ( !is_true( self._fake_meat ) ) - { - add_meat_event( "meat_bounce", self, pos, normal, ent ); - } - else - { - add_meat_event( "fake_meat_bounce", self, pos, normal, ent ); - } - if ( isDefined( level.meat_bounce_override ) ) - { - self thread [[ level.meat_bounce_override ]]( pos, normal, ent ); - return; - } - if ( isDefined( level.spawned_collmap ) ) - { - if ( isDefined( ent ) && ent == level.spawned_collmap ) - { - playfx( level._effect[ "meat_bounce" ], pos, normal ); - } - } - if ( isDefined( ent ) && isplayer( ent ) ) - { - add_meat_event( "player_hit_player", self.owner, ent ); - self.owner hit_player_with_meat( ent ); - } - self.meat_is_flying = 0; - self thread watch_for_roll(); - playfxontag( level._effect[ "meat_marker" ], self, "tag_origin" ); -} - -watch_for_roll() //checked matches cerberus output -{ - self endon( "stationary" ); - self endon( "death" ); - self endon( "picked_up" ); - self.meat_is_rolling = 0; - while ( 1 ) - { - old_z = self.origin[ 2 ]; - wait 1; - if ( abs( old_z - self.origin[ 2 ] ) < 10 ) - { - self.meat_is_rolling = 1; - self playloopsound( "zmb_meat_looper", 2 ); - } - } -} - -stop_rolling() //checked matches cerberus output -{ - self.origin = self.origin; - self.angles = self.angles; -} - -hit_player_with_meat( hit_player ) //checked matches cerberus output -{ - /* -/# - println( "MEAT: Player " + self.name + " hit " + hit_player.name + " with the meat\n" ); -#/ - */ -} - -item_meat_pickup() //checked matches cerberus output -{ - self.meat_is_moving = 0; - self.meat_is_flying = 0; - level._meat_moving = 0; - level._meat_splitter_activated = 0; - self notify( "picked_up" ); -} - -player_wait_take_meat( meat_name ) //checked matches cerberus output -{ - self.dont_touch_the_meat = 1; - if ( isDefined( self.pre_meat_weapon ) && self hasweapon( self.pre_meat_weapon ) ) - { - self switchtoweapon( self.pre_meat_weapon ); - } - else - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - else - { - /* -/# - assert( 0, "Player has no weapon" ); -#/ - */ - self maps/mp/zombies/_zm_weapons::give_fallback_weapon(); - } - } - self waittill_notify_or_timeout( "weapon_change_complete", 3 ); - self takeweapon( meat_name ); - self.pre_meat_weapon = undefined; - if ( self.is_drinking ) - { - self decrement_is_drinking(); - } - self.dont_touch_the_meat = 0; -} - -cleanup_meat() //checked matches cerberus output -{ - if ( isDefined( self.altmodel ) ) - { - self.altmodel delete(); - } - self delete(); -} - -init_animtree() //checked matches cerberus output -{ - scriptmodelsuseanimtree( -1 ); -} - -animate_meat( grenade ) //checked matches cerberus output -{ - grenade waittill_any( "bounce", "stationary", "death" ); - waittillframeend; - if ( isDefined( grenade ) ) - { - grenade hide(); - altmodel = spawn( "script_model", grenade.origin ); - altmodel setmodel( get_gamemode_var( "item_meat_model" ) ); - altmodel useanimtree( -1 ); - altmodel.angles = grenade.angles; - altmodel linkto( grenade, "", ( 0, 0, 0 ), ( 0, 0, 0 ) ); - altmodel setanim( %o_zombie_head_idle_v1 ); - grenade.altmodel = altmodel; - while ( isDefined( grenade ) ) - { - wait 0.05; - } - if ( isDefined( altmodel ) ) - { - altmodel delete(); - } - } -} - -indexinarray( array, value ) //checked partially changed to match cerberus output changed at own discretion -{ - if ( isDefined( array ) || isarray( array ) || !isDefined( value ) || !isinarray( array, value ) ) - { - return undefined; - } - index = 0; - foreach ( item in array ) - { - if ( item == value ) - { - return index; - } - index++; - } - return undefined; -} - -item_meat_on_spawn_retrieve_trigger( watcher, player, weaponname ) //checked changed to match beta dump -{ - self endon( "death" ); - add_meat_event( "meat_spawn", self ); - thread animate_meat( self ); - while ( is_true( level.splitting_meat ) ) - { - wait 0.15; - } - if ( isDefined( player ) ) - { - self setowner( player ); - self setteam( player.pers[ "team" ] ); - self.owner = player; - self.oldangles = self.angles; - if ( player hasweapon( weaponname ) ) - { - if ( !is_true( self._fake_meat ) ) - { - player thread player_wait_take_meat( weaponname ); - } - else - { - player takeweapon( weaponname ); - player decrement_is_drinking(); - } - } - if ( !is_true( self._fake_meat ) ) - { - if ( !is_true( self._respawned_meat ) ) - { - level notify( "meat_thrown", player ); - level._last_person_to_throw_meat = player; - level._last_person_to_throw_meat_time = getTime(); - } - } - } - if ( !is_true( self._fake_meat ) ) - { - level._meat_moving = 1; - if ( isDefined( level.item_meat ) && level.item_meat != self ) - { - level.item_meat cleanup_meat(); - } - level.item_meat = self; - } - self thread item_meat_watch_stationary(); - self thread item_meat_watch_bounce(); - self.item_meat_pick_up_trigger = spawn( "trigger_radius_use", self.origin, 0, 36, 72 ); - self.item_meat_pick_up_trigger setcursorhint( "HINT_NOICON" ); - self.item_meat_pick_up_trigger sethintstring( &"ZOMBIE_MEAT_PICKUP" ); - self.item_meat_pick_up_trigger enablelinkto(); - self.item_meat_pick_up_trigger linkto( self ); - self.item_meat_pick_up_trigger triggerignoreteam(); - level.item_meat_pick_up_trigger = self.item_meat_pick_up_trigger; - self thread item_meat_watch_shutdown(); - self.meat_id = indexinarray( level._fake_meats, self ); - if ( !isDefined( self.meat_id ) ) - { - self.meat_id = 0; - } - if ( is_true( level.dont_allow_meat_interaction ) ) - { - self.item_meat_pick_up_trigger setinvisibletoall(); - } - else - { - self thread item_meat_watch_trigger( self.meat_id, self.item_meat_pick_up_trigger, ::item_meat_on_pickup, level.meat_pickupsoundplayer, level.meat_pickupsound ); - self thread kick_meat_monitor(); - self thread last_stand_meat_nudge(); - } - self._respawned_meat = undefined; -} - -last_stand_meat_nudge() //checked changed to match cerberus output -{ - level endon( "meat_grabbed" ); - level endon( "end_meat" ); - self endon( "death" ); - wait 0.15; - while ( 1 ) - { - players = get_players(); - foreach ( player in players ) - { - if ( distancesquared( player.origin, self.origin ) < 2304 && player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - player thread kick_the_meat( self, 1 ); - } - } - wait 0.05; - } -} - -kick_meat_monitor() //checked partially changed to match cerberus output see info.md -{ - level endon( "meat_grabbed" ); - level endon( "end_meat" ); - self endon( "death" ); - kick_meat_timeout = 150; - while ( 1 ) - { - players = get_players(); - curr_time = getTime(); - foreach ( player in players ) - { - if ( isDefined( level._last_person_to_throw_meat ) && player == level._last_person_to_throw_meat && ( curr_time - level._last_person_to_throw_meat_time ) <= kick_meat_timeout ) - { - } - else - { - if ( distancesquared( player.origin, self.origin ) < 2304 && player issprinting() && !player usebuttonpressed() ) - { - if ( isDefined( player._meat_team ) && isDefined( level._meat_on_team ) && level._meat_on_team == player._meat_team ) - { - add_meat_event( "player_kick_meat", player, self ); - player thread kick_the_meat( self ); - } - } - } - } - wait 0.05; - } -} - -is_meat( weapon ) //checked changed at own discretion -{ - if ( weapon == get_gamemode_var( "item_meat_name" ) ) - { - return 1; - } - return 0; -} - -spike_the_meat( meat ) //checked changed to match beta dump -{ - if ( is_true( self._kicking_meat ) ) - { - return; - } - fake_meat = 0; - self._kicking_meat = 1; - self._spawning_meat = 1; - org = self getweaponmuzzlepoint(); - vel = meat getvelocity(); - if ( !is_true( meat._fake_meat ) ) - { - meat cleanup_meat(); - level._last_person_to_throw_meat = self; - level._last_person_to_throw_meat_time = getTime(); - level._meat_splitter_activated = 0; - } - else - { - fake_meat = 1; - meat cleanup_meat(); - } - kickangles = self.angles; - kickangles += ( randomfloatrange( -30, -20 ), randomfloatrange( -5, 5 ), 0 ); - launchdir = anglesToForward( kickangles ); - speed = length( vel ) * 1.5; - launchvel = vectorScale( launchdir, speed ); - grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( launchvel[ 0 ], launchvel[ 1 ], 380 ) ); - grenade playsound( "zmb_meat_meat_tossed" ); - grenade thread waittill_loopstart(); - if ( fake_meat ) - { - grenade._fake_meat = 1; - grenade thread delete_on_real_meat_pickup(); - level._kicked_meat = grenade; - } - wait 0.1; - self._spawning_meat = 0; - self._kicking_meat = 0; - if ( !fake_meat ) - { - level notify( "meat_thrown", self ); - level notify( "meat_kicked" ); - } -} - -show_meat_throw_hint() //checked matches cerberus output -{ - level endon( "meat_thrown" ); - self endon( "player_downed" ); - self thread meat_screen_message_delete_on_death(); - wait 1; - self meat_create_hint_message( &"ZOMBIE_THROW_MEAT_HINT" ); - self thread meat_screen_message_delete(); -} - -meat_create_hint_message( string_message_1, string_message_2, string_message_3, n_offset_y ) //checked changed to match cerberus output -{ - if ( !isDefined( n_offset_y ) ) - { - n_offset_y = 0; - } - if ( !isDefined( self._screen_message_1 ) ) - { - self._screen_message_1 = newclienthudelem( self ); - self._screen_message_1.elemtype = "font"; - self._screen_message_1.font = "objective"; - self._screen_message_1.fontscale = 1.8; - self._screen_message_1.horzalign = "center"; - self._screen_message_1.vertalign = "middle"; - self._screen_message_1.alignx = "center"; - self._screen_message_1.aligny = "middle"; - self._screen_message_1.y = -60 + n_offset_y; - self._screen_message_1.sort = 2; - self._screen_message_1.color = ( 1, 1, 1 ); - self._screen_message_1.alpha = 0.7; - self._screen_message_1.hidewheninmenu = 1; - } - self._screen_message_1 settext( string_message_1 ); - if ( isDefined( string_message_2 ) ) - { - if ( !isDefined( self._screen_message_2 ) ) - { - self._screen_message_2 = newclienthudelem( self ); - self._screen_message_2.elemtype = "font"; - self._screen_message_2.font = "objective"; - self._screen_message_2.fontscale = 1.8; - self._screen_message_2.horzalign = "center"; - self._screen_message_2.vertalign = "middle"; - self._screen_message_2.alignx = "center"; - self._screen_message_2.aligny = "middle"; - self._screen_message_2.y = -33 + n_offset_y; - self._screen_message_2.sort = 2; - self._screen_message_2.color = ( 1, 1, 1 ); - self._screen_message_2.alpha = 0.7; - self._screen_message_2.hidewheninmenu = 1; - } - level._screen_message_2 settext( string_message_2 ); - } - else if ( isDefined( self._screen_message_2 ) ) - { - self._screen_message_2 destroy(); - } - if ( isDefined( string_message_3 ) ) - { - if ( !isDefined( self._screen_message_3 ) ) - { - self._screen_message_3 = newclienthudelem( self ); - self._screen_message_3.elemtype = "font"; - self._screen_message_3.font = "objective"; - self._screen_message_3.fontscale = 1.8; - self._screen_message_3.horzalign = "center"; - self._screen_message_3.vertalign = "middle"; - self._screen_message_3.alignx = "center"; - self._screen_message_3.aligny = "middle"; - self._screen_message_3.y = -6 + n_offset_y; - self._screen_message_3.sort = 2; - self._screen_message_3.color = ( 1, 1, 1 ); - self._screen_message_3.alpha = 0.7; - self._screen_message_3.hidewheninmenu = 1; - } - self._screen_message_3 settext( string_message_3 ); - } - else if ( isDefined( self._screen_message_3 ) ) - { - self._screen_message_3 destroy(); - } -} - -meat_screen_message_delete() //checked matches cerberus output -{ - self endon( "disconnect" ); - level waittill_notify_or_timeout( "meat_thrown", 5 ); - if ( isDefined( self._screen_message_1 ) ) - { - self._screen_message_1 destroy(); - } - if ( isDefined( self._screen_message_2 ) ) - { - self._screen_message_2 destroy(); - } - if ( isDefined( self._screen_message_3 ) ) - { - self._screen_message_3 destroy(); - } -} - -meat_screen_message_delete_on_death() //checked matches cerberus output -{ - level endon( "meat_thrown" ); - self endon( "disconnect" ); - self waittill( "player_downed" ); - if ( isDefined( self._screen_message_1 ) ) - { - self._screen_message_1 destroy(); - } - if ( isDefined( self._screen_message_2 ) ) - { - self._screen_message_2 destroy(); - } - if ( isDefined( self._screen_message_3 ) ) - { - self._screen_message_3 destroy(); - } -} - -set_ignore_all() //checked changed to match beta dump -{ - level endon( "clear_ignore_all" ); - if ( is_true( level._zombies_ignoring_all ) ) - { - return; - } - level._zombies_ignoring_all = 1; - zombies = getaiarray( level.zombie_team ); - foreach ( zombie in zombies ) - { - if ( isDefined( zombie ) ) - { - zombie.ignoreall = 1; - } - } - wait 0.5; - clear_ignore_all(); -} - -clear_ignore_all() //checked changed to match beta dump -{ - if ( !is_true( level._zombies_ignoring_all ) ) - { - return; - } - zombies = getaiarray( level.zombie_team ); - foreach ( zombie in zombies ) - { - if ( isDefined( zombie ) ) - { - zombie.ignoreall = 0; - } - } - level._zombies_ignoring_all = 0; -} - -bring_back_teammate_progress() //checked matches cerberus output -{ - self notify( "bring_back_teammate_progress" ); - self endon( "bring_back_teammate_progress" ); - self endon( "disconnect" ); - player = self; - player._bringing_back_teammate = 1; - revivetime = 15; - progress = 0; - while ( player_has_meat( player ) && is_player_valid( player ) && progress >= 0 ) - { - if ( !isDefined( player.revive_team_progressbar ) ) - { - player.revive_team_progressbar = player createprimaryprogressbar(); - player.revive_team_progressbar updatebar( 0.01, 1 / revivetime ); - player.revive_team_progressbar.progresstext = player createprimaryprogressbartext(); - player.revive_team_progressbar.progresstext settext( &"ZOMBIE_MEAT_RESPAWN_TEAMMATE" ); - player thread destroy_revive_progress_on_downed(); - } - progress++; - if ( progress > ( revivetime * 10 ) ) - { - level bring_back_dead_teammate( player._meat_team ); - player destroy_revive_progress(); - wait 1; - player._bringing_back_teammate = 0; - progress = -1; - } - wait 0.1; - } - player._bringing_back_teammate = 0; - player destroy_revive_progress(); -} - -should_try_to_bring_back_teammate( team ) //checked changed to match cerberus output -{ - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - if ( players[ i ]._meat_team == team && players[ i ].sessionstate == "spectator" ) - { - return 1; - } - } - return 0; -} - -bring_back_dead_teammate( team ) //checked changed to match cerberus output -{ - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - if ( players[ i ]._meat_team == team && players[ i ].sessionstate == "spectator" ) - { - player = players[ i ]; - break; - } - } - if ( !isDefined( player ) ) - { - return; - } - player playsound( level.zmb_laugh_alias ); - wait 0.25; - playfx( level._effect[ "poltergeist" ], player.spectator_respawn.origin ); - playsoundatposition( "zmb_bolt", player.spectator_respawn.origin ); - earthquake( 0.5, 0.75, player.spectator_respawn.origin, 1000 ); - level.custom_spawnplayer = ::respawn_meat_player; - player.pers[ "spectator_respawn" ] = player.spectator_respawn; - player [[ level.spawnplayer ]](); - level.custom_spawnplayer = undefined; -} - -respawn_meat_player() //checked matches cerberus output -{ - spawnpoint = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "meat_spectator_respawn" ); - self spawn( spawnpoint.origin, spawnpoint.angles ); - self._meat_team = self.pers[ "zteam" ]; - self._encounters_team = self.pers[ "encounters_team" ]; - self.characterindex = self.pers[ "characterindex" ]; - self._team_name = self.pers[ "team_name" ]; - self.spectator_respawn = self.pers[ "meat_spectator_respawn" ]; - self reviveplayer(); - self.is_burning = 0; - self.is_zombie = 0; - self.ignoreme = 0; -} - -destroy_revive_progress_on_downed() //checked matches cerberus output -{ - level endon( "end_game" ); - level endon( "meat_end" ); - self waittill_any( "fake_death", "player_downed", "death" ); - self destroy_revive_progress(); -} - -destroy_revive_progress() //checked matches cerberus output -{ - if ( isDefined( self.revive_team_progressbar ) ) - { - self.revive_team_progressbar destroyelem(); - self.revive_team_progressbar.progresstext destroyelem(); - } -} - -kick_the_meat( meat, laststand_nudge ) //checked changed to match beta dump -{ - if ( is_true( self._kicking_meat ) ) - { - return; - } - fake_meat = 0; - self._kicking_meat = 1; - self._spawning_meat = 1; - org = meat.origin; - if ( !is_true( meat._fake_meat ) ) - { - meat cleanup_meat(); - level._last_person_to_throw_meat = self; - level._last_person_to_throw_meat_time = getTime(); - level._meat_splitter_activated = 0; - } - else - { - fake_meat = 1; - meat cleanup_meat(); - } - kickangles = self.angles; - kickangles += ( randomfloatrange( -30, -20 ), randomfloatrange( -5, 5 ), 0 ); - launchdir = anglesToForward( kickangles ); - vel = self getvelocity(); - speed = length( vel ) * 1.5; - height_boost = 380; - if ( is_true( laststand_nudge ) ) - { - if ( vel == ( 0, 0, 0 ) ) - { - vel = ( 30, 30, 5 ); - } - speed = length( vel ) * 2; - height_boost = 120; - } - launchvel = vectorScale( launchdir, speed ); - grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( launchvel[ 0 ], launchvel[ 1 ], height_boost ) ); - grenade playsound( "zmb_meat_meat_tossed" ); - grenade thread waittill_loopstart(); - if ( fake_meat ) - { - grenade._fake_meat = 1; - grenade thread delete_on_real_meat_pickup(); - level._kicked_meat = grenade; - } - wait 0.1; - self._spawning_meat = 0; - self._kicking_meat = 0; - if ( !fake_meat ) - { - level notify( "meat_thrown", self ); - level notify( "meat_kicked" ); - } -} - -delete_on_real_meat_pickup() //checked changed to match beta dump -{ - if ( !is_true( self._fake_meat ) ) - { - return; - } - self endon( "death" ); - level waittill_any( "meat_grabbed", "end_game", "meat_kicked" ); - add_meat_event( "fake_meat_killed_by_real", self ); - if ( isDefined( level._kicked_meat ) && level._kicked_meat == self ) - { - level._kicked_meat = undefined; - } - if ( isDefined( self ) ) - { - self cleanup_meat(); - } -} - -play_item_meat_on_spawn_retrieve_trigger( watcher, player ) //checked changed to match beta dump -{ - self item_meat_on_spawn_retrieve_trigger( watcher, player, get_gamemode_var( "item_meat_name" ) ); -} - -can_revive( revivee ) //checked changed to match beta dump -{ - if ( self hasweapon( get_gamemode_var( "item_meat_name" ) ) ) - { - return 0; - } - if ( !self maps/mp/zombies/_zm_laststand::is_reviving_any() && isDefined( level.item_meat_pick_up_trigger ) && self istouching( level.item_meat_pick_up_trigger ) ) - { - return 0; - } - return 1; -} - -pickup_origin() //checked matches cerberus output -{ - origin = self get_eye(); - if ( !isDefined( origin ) ) - { - origin = self gettagorigin( "tag_weapon" ); - } - if ( !isDefined( origin ) ) - { - origin = self gettagorigin( "tag_weapon_right" ); - } - if ( !isDefined( origin ) ) - { - origin = self.origin; - } - return origin; -} - -can_spike_meat() //checked matches cerberus output -{ - if ( isDefined( level._last_person_to_throw_meat ) && self == level._last_person_to_throw_meat ) - { - return 0; - } - meat = level.item_meat; - meat_spike_dist_sq = 4096; - meat_spike_dot = 0.1; - if ( isDefined( meat ) ) - { - view_pos = self getweaponmuzzlepoint(); - if ( distancesquared( view_pos, meat.origin ) < meat_spike_dist_sq ) - { - return 1; - } - } - return 0; -} - -start_encounters_round_logic() //checked matches cerberus output -{ - if ( isDefined( level.flag[ "start_zombie_round_logic" ] ) ) - { - flag_wait( "start_zombie_round_logic" ); - } - flag_wait( "initial_players_connected" ); - if ( !flag( "start_encounters_match_logic" ) ) - { - flag_set( "start_encounters_match_logic" ); - } -} - -onstartgametype() //checked matches cerberus output -{ - thread start_encounters_round_logic(); - maps/mp/gametypes_zm/_zm_gametype::rungametypemain( "zmeat", ::meat_hub_start_func, 1 ); -} - -hide_non_meat_objects() //checked partially changed to match cerberus output see info.md -{ - door_trigs = getentarray( "zombie_door", "targetname" ); - for ( i = 0; i < door_trigs.size; i++ ) - { - if ( isDefined( door_trigs[ i ] ) ) - { - door_trigs[ i ] delete(); - } - } - objects = getentarray(); - i = 0; - while ( i < objects.size ) - { - if ( objects[ i ] is_meat_object() ) - { - i++; - continue; - } - if ( objects[ i ] iszbarrier() ) - { - i++; - continue; - } - if ( isDefined( objects[ i ].spawnflags ) && objects[ i ].spawnflags == 1 ) - { - objects[ i ] connectpaths(); - } - objects[ i ] notsolid(); - objects[ i ] hide(); - i++; - } -} - -is_meat_object() //checked changed to match cerberus output -{ - if ( !isDefined( self.script_parameters ) ) - { - return 1; - } - tokens = strtok( self.script_parameters, " " ); - for ( i = 0; i < tokens.size; i++ ) - { - if ( tokens[ i ] == "meat_remove" ) - { - return 0; - } - } - return 1; -} - -setup_meat_world_objects() //checked partially changed to match cerberus output see info.md -{ - objects = getentarray( level.scr_zm_map_start_location, "script_noteworthy" ); - i = 0; - while ( i < objects.size ) - { - if ( !objects[ i ] is_meat_object() ) - { - i++; - continue; - } - if ( isDefined( objects[ i ].script_gameobjectname ) ) - { - i++; - continue; - } - if ( isDefined( objects[ i ].script_vector ) ) - { - objects[ i ] moveto( objects[ i ].origin + objects[ i ].script_vector, 0.05 ); - objects[ i ] waittill( "movedone" ); - } - if ( isDefined( objects[ i ].spawnflags ) && objects[ i ].spawnflags == 1 && isDefined( level._dont_reconnect_paths ) && !level._dont_reconnect_paths ) - { - objects[ i ] disconnectpaths(); - } - i++; - } - level clientnotify( "meat_" + level.scr_zm_map_start_location ); -} - -spawn_meat_zombies() //checked changed to match beta dump -{ - level endon( "meat_end" ); - force_riser = 0; - force_chaser = 0; - num = 0; - max_ai_num = 15; - if ( getDvarInt( "zm_encounters_cheat" ) > 0 ) - { - max_ai_num = 0; - } - if ( getDvarInt( "zombie_cheat" ) == 2 ) - { - max_ai_num = -1; - } - level waittill( "meat_grabbed" ); - while ( 1 ) - { - ai = getaiarray( level.zombie_team ); - if ( ai.size > max_ai_num ) - { - wait 0.1; - } - else - { - if ( ( num % 2 ) == 0 ) - { - spawn_points = level._meat_team_1_zombie_spawn_points; - } - else - { - spawn_points = level._meat_team_2_zombie_spawn_points; - } - num++; - spawn_point = undefined; - dist = 512; - distcheck = dist * dist; - startindex = randomint( spawn_points.size ); - while ( !isDefined( spawn_point ) ) - { - for ( i = 0; i < spawn_points.size; i++ ) - { - index = ( startindex + i ) % spawn_points.size; - point = spawn_points[ index ]; - if ( ( num % 2 ) == 0 ) - { - players = get_players_on_meat_team( 1 ); - } - else - { - players = get_players_on_meat_team( 2 ); - } - clear = 1; - foreach ( player in players ) - { - if ( distancesquared( player.origin, point.origin ) < distcheck ) - { - clear = 0; - } - } - if ( clear ) - { - spawn_point = point; - break; - } - else - { - i++; - } - } - if ( dist <= 128 ) - { - spawn_point = point; - } - else - { - dist /= 4; - distcheck = dist * dist; - } - wait 0.05; - } - zombie = spawn_meat_zombie( level.meat_spawners[ 0 ], "meat_zombie", spawn_point, level._meat_zombie_spawn_health ); - if ( isDefined( zombie ) ) - { - zombie maps/mp/zombies/_zm_game_module::make_supersprinter(); - } - } - wait level._meat_zombie_spawn_timer; - } -} - -spawn_meat_zombie( spawner, target_name, spawn_point, round_number ) //checked changed to match cerberus output -{ - level endon( "meat_end" ); - if ( !isDefined( spawner ) ) - { - //iprintlnbold( "BUG: There is something wrong with the zombie spawners" ); - return; - } - while ( is_true( level._meat_zombie_spawning ) ) - { - wait 0.05; - } - level._meat_zombie_spawning = 1; - level.zombie_spawn_locations = []; - level.zombie_spawn_locations[ level.zombie_spawn_locations.size ] = spawn_point; - zombie = maps/mp/zombies/_zm_utility::spawn_zombie( spawner, target_name, spawn_point, round_number ); - if ( isDefined( zombie ) ) - { - zombie thread maps/mp/zombies/_zm_spawner::zombie_spawn_init(); - zombie thread maps/mp/zombies/_zm::round_spawn_failsafe(); - } - else - { - //iprintlnbold( "BUG: There is something wrong with the zombie spawning" ); - } - spawner._spawning = undefined; - level._meat_zombie_spawning = 0; - return zombie; -} - -monitor_meat_on_team() //checked partially changed to match beta dump see info.md -{ - level endon( "meat_end" ); - while ( 1 ) - { - players = get_players(); - if ( isDefined( level._meat_on_team ) ) - { - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ] ) ) - { - i++; - continue; - } - if ( players[ i ]._meat_team == level._meat_on_team ) - { - if ( players[ i ].ignoreme ) - { - players[ i ].ignoreme = 0; - } - } - else - { - if ( !players[ i ].ignoreme ) - { - players[ i ].ignoreme = 1; - } - } - wait 0.05; - i++; - } - } - else - { - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ] ) ) - { - i++; - continue; - } - if ( players[ i ].ignoreme ) - { - players[ i ].ignoreme = 0; - } - wait 0.05; - i++; - } - } - wait 0.1; - } -} - -item_meat_reset( origin, immediate ) //checked changed to match beta dump -{ - level notify( "new_meat" ); - level endon( "new_meat" ); - if ( isDefined( level.item_meat ) ) - { - level.item_meat cleanup_meat(); - level.item_meat = undefined; - } - if ( !is_true( immediate ) ) - { - level waittill( "reset_meat" ); - } - item_meat_clear(); - if ( isDefined( origin ) ) - { - item_meat_spawn( origin ); - } -} - -meat_player_initial_spawn() //checked changed to match beta dump -{ - players = get_players(); - one = 1; - two = 2; - if ( get_game_var( "switchedsides" ) ) - { - one = 2; - two = 1; - } - for ( i = 0; i < players.size; i++ ) - { - if ( get_game_var( "side_selection" ) == 1 ) - { - if ( players[ i ].team == "allies" ) - { - players[ i ]._meat_team = one; - } - else - { - players[ i ]._meat_team = two; - } - } - else - { - if ( players[ i ].team == "allies" ) - { - players[ i ]._meat_team = two; - } - else - { - players[ i ]._meat_team = one; - } - } - if ( isDefined( level.custom_player_fake_death_cleanup ) ) - { - players[ i ] [[ level.custom_player_fake_death_cleanup ]](); - } - players[ i ] setstance( "stand" ); - if ( isDefined( players[ i ]._meat_team ) ) - { - if ( players[ i ]._meat_team == one ) - { - players[ i ]._meat_team = one; - } - else - { - players[ i ]._meat_team = two; - } - } - else - { - if ( players[ i ].team == "axis" ) - { - players[ i ]._meat_team = one; - } - else - { - players[ i ]._meat_team = two; - } - } - players[ i ] meat_player_setup(); - } - waittillframeend; - maps/mp/gametypes_zm/_zm_gametype::start_round(); - award_grenades_for_team( 1 ); - award_grenades_for_team( 2 ); -} - -meat_player_setup() //checked matches cerberus output -{ - self.pers[ "zteam" ] = self._meat_team; - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "encounters_team", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "characterindex", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "team_name", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "spectator_respawn", 0 ); - self.pers[ "encounters_team" ] = self._encounters_team; - self.pers[ "characterindex" ] = self.characterindex; - self.pers[ "team_name" ] = self._team_name; - self.pers[ "meat_spectator_respawn" ] = self.spectator_respawn; - self.score = 1000; - self.pers[ "score" ] = 1000; - self takeallweapons(); - self giveweapon( "knife_zm" ); - self give_start_weapon( 1 ); - if ( !isDefined( self._saved_by_throw ) ) - { - self._saved_by_throw = 0; - } - self setmovespeedscale( 1 ); - self._has_meat = 0; - self setclientfield( "holding_meat", 0 ); - self freeze_player_controls( 1 ); -} - -can_touch_meat() //checked changed to match beta dump -{ - if ( is_true( self.dont_touch_the_meat ) ) - { - return 0; - } - meat = level.item_meat; - if ( isDefined( meat ) ) - { - meatorg = meat.origin + vectorScale( ( 0, 0, 1 ), 8 ); - trace = bullettrace( self pickup_origin(), meatorg, 0, meat ); - return distancesquared( trace[ "position" ], meatorg ) < 1; - } - return 0; -} - -trying_to_use() //checked changed at own discretion -{ - //self.use_ever_released |= !self usebuttonpressed(); - if ( self usebuttonpressed() ) - { - return 1; - } - return 0; -} - -trying_to_spike( item ) //checked changed at own discretion -{ - if ( item.meat_is_flying && self meleebuttonpressed() ) - { - return 1; - } - return 0; -} - -item_quick_trigger( meat_id, trigger ) -{ - self endon( "death" ); - meat_trigger_time = 150; - if ( isDefined( trigger.radius ) ) - { - radius = trigger.radius + 15; - } - else - { - radius = 51; - } - trigrad2 = radius * radius; - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - player = players[ i ]; - player.use_ever_released = !player usebuttonpressed(); - } - while ( isDefined( trigger ) ) - { - trigorg = trigger.origin; - players = get_players(); - if ( players.size ) - { - random_start_point = randomint( players.size ); - i = 0; - while ( i < players.size ) - { - player = players[ ( i + random_start_point ) % players.size ]; - if ( !isDefined( player.trying_to_trigger_meat ) ) - { - player.trying_to_trigger_meat = []; - } - if ( !isDefined( player.trying_to_trigger_meat_time ) ) - { - player.trying_to_trigger_meat_time = []; - } - if ( player maps/mp/zombies/_zm_laststand::is_reviving_any() ) - { - i++; - continue; - } - meleeing = player ismeleeing(); - //if any problems occur while compiling check here - if ( /*( player trying_to_use() || self.meat_is_flying && meleeing )*/ isDefined( trigger ) && player istouching( trigger ) && distance2dsquared( player.origin, trigorg ) < trigrad2 && !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() && player can_touch_meat() ) - { - if ( self.meat_is_flying && meleeing ) - { - if ( player can_spike_meat() ) - { - player.trying_to_trigger_meat[ meat_id ] = 0; - trigger notify( "usetrigger", player ); - } - } - else if ( !is_true( player.trying_to_trigger_meat[ meat_id ] ) ) - { - player.trying_to_trigger_meat[ meat_id ] = 1; - player.trying_to_trigger_meat_time[ meat_id ] = getTime(); - } - else - { - if ( ( getTime() - player.trying_to_trigger_meat_time[ meat_id ] ) >= meat_trigger_time ) - { - player.trying_to_trigger_meat[ meat_id ] = 0; - trigger notify( "usetrigger", player ); - } - } - } - else - { - player.trying_to_trigger_meat[ meat_id ] = 0; - } - i++; - } - } - wait 0.05; - } -} - -item_meat_watch_trigger( meat_id, trigger, callback, playersoundonuse, npcsoundonuse ) //checked changed to match beta dump -{ - self endon( "death" ); - self thread item_quick_trigger( meat_id, trigger ); - while ( 1 ) - { - trigger waittill( "usetrigger", player ); - if ( !isalive( player ) ) - { - continue; - } - if ( !is_player_valid( player ) ) - { - continue; - } - if ( player has_powerup_weapon() ) - { - continue; - } - if ( player maps/mp/zombies/_zm_laststand::is_reviving_any() ) - { - continue; - } - if ( self.meat_is_flying ) - { - volley = player meleebuttonpressed(); - } - player.volley_meat = volley; - if ( is_true( self._fake_meat ) ) - { - add_meat_event( "player_fake_take", player, self ); - } - else if ( volley ) - { - add_meat_event( "player_volley", player, self ); - break; - } - else if ( self.meat_is_moving ) - { - add_meat_event( "player_catch", player, self ); - break; - } - else - { - add_meat_event( "player_take", player, self ); - } - if ( is_true( self._fake_meat ) ) - { - player playlocalsound( level.zmb_laugh_alias ); - wait_network_frame(); - if ( !isDefined( self ) ) - { - return; - } - self cleanup_meat(); - return; - } - curr_weap = player getcurrentweapon(); - if ( !is_meat( curr_weap ) ) - { - player.pre_meat_weapon = curr_weap; - } - if ( self.meat_is_moving ) - { - if ( volley ) - { - self item_meat_volley( player ); - } - else - { - self item_meat_caught( player, self.meat_is_flying ); - } - } - self item_meat_pickup(); - if ( isDefined( playersoundonuse ) ) - { - player playlocalsound( playersoundonuse ); - } - if ( isDefined( npcsoundonuse ) ) - { - player playsound( npcsoundonuse ); - } - if ( volley ) - { - player thread spike_the_meat( self ); - } - else - { - self thread [[ callback ]]( player ); - if ( !isDefined( player._meat_hint_shown ) ) - { - player thread show_meat_throw_hint(); - player._meat_hint_shown = 1; - } - } - } -} - -item_meat_volley( player ) //checked matches cerberus output -{ - /* -/# - println( "MEAT: Spiked the meat\n" ); -#/ - */ -} - -item_meat_caught( player, in_air ) //checked matches cerberus output -{ - if ( in_air ) - { - /* -/# - println( "MEAT: Caught the meat on the fly\n" ); -#/ - */ - } - else - { - /* -/# - println( "MEAT: Caught the meat while moving\n" ); -#/ - */ - } -} - -item_meat_on_pickup( player ) //checked matches cerberus output -{ - /* -/# - assert( !player maps/mp/zombies/_zm_laststand::player_is_in_laststand(), "Player in last stand triggered meat pickup" ); -#/ - */ - player maps/mp/gametypes_zm/_weaponobjects::deleteweaponobjecthelper( self ); - self cleanup_meat(); - level.item_meat = undefined; - level._last_person_to_throw_meat = undefined; - assign_meat_to_team( player ); - level notify( "meat_grabbed" ); - player notify( "meat_grabbed" ); - level thread zmbvoxmeatonteamspecific( player._encounters_team ); - if ( !player hasweapon( get_gamemode_var( "item_meat_name" ) ) ) - { - player giveweapon( get_gamemode_var( "item_meat_name" ) ); - } - player increment_is_drinking(); - player switchtoweapon( get_gamemode_var( "item_meat_name" ) ); - player setweaponammoclip( get_gamemode_var( "item_meat_name" ), 2 ); - player thread waittill_thrown(); -} - -waittill_thrown() //checked matches cerberus output -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "reset_downed" ); - self waittill( "grenade_fire", grenade ); - grenade playsound( "zmb_meat_meat_tossed" ); - grenade thread waittill_loopstart(); -} - -waittill_loopstart() //checked matches cerberus output -{ - self endon( "stationary" ); - self endon( "death" ); - level endon( "meat_grabbed" ); - level endon( "end_game" ); - level endon( "meat_kicked" ); - while ( 1 ) - { - self waittill( "grenade_bounce", pos, normal, ent ); - self stopsounds(); - wait 0.05; - self playsound( "zmb_meat_bounce" ); - } -} - -item_meat_watch_shutdown() //checked matches cerberus output -{ - self waittill( "death" ); - if ( isDefined( self.item_meat_pick_up_trigger ) ) - { - self.item_meat_pick_up_trigger delete(); - level.item_meat_pick_up_trigger = undefined; - } -} - -item_meat_clear() //checked changed to match cerberus output -{ - if ( isDefined( level.item_meat ) ) - { - level.item_meat cleanup_meat(); - level.item_meat = undefined; - } - if ( isDefined( level._fake_meats ) ) - { - foreach ( meat in level._fake_meats ) - { - if ( isDefined( meat ) ) - { - meat cleanup_meat(); - } - } - level._fake_meats = undefined; - } -} - -zombie_path_timer_override() //matches cerberus output -{ - return getTime() + ( randomfloatrange( 0.35, 1 ) * 1000 ); -} - -meat_poi_override_func() //checked changed to match beta dump -{ - if ( isDefined( level.item_meat ) && is_true( level.item_meat.meat_is_moving ) ) - { - if ( abs( level.item_meat.origin[ 2 ] - groundpos( level.item_meat.origin )[ 2 ] ) < 35 ) - { - level._zombies_ignoring_all = 0; - level notify( "clear_ignore_all" ); - return undefined; - } - level thread set_ignore_all(); - meat_poi = []; - meat_poi[ 0 ] = groundpos( level.item_meat.origin ); - meat_poi[ 1 ] = level.item_meat; - return meat_poi; - } - level._zombies_ignoring_all = 0; - return undefined; -} - -meat_end_match( winning_team ) //checked changed to match cerberus output -{ - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - if ( isDefined( players[ i ].has_minigun ) && players[ i ].has_minigun ) - { - primaryweapons = players[ i ] getweaponslistprimaries(); - for ( x = 0; x < primaryweapons.size; x++ ) - { - if ( primaryweapons[ x ] == "minigun_zm" ) - { - players[ i ] takeweapon( "minigun_zm" ); - } - } - players[ i ] notify( "minigun_time_over" ); - players[ i ].zombie_vars[ "zombie_powerup_minigun_on" ] = 0; - players[ i ]._show_solo_hud = 0; - players[ i ].has_minigun = 0; - players[ i ].has_powerup_weapon = 0; - } - if ( isDefined( players[ i ]._has_meat_hud ) ) - { - players[ i ]._has_meat_hud destroy(); - } - if ( players[ i ] hasweapon( get_gamemode_var( "item_meat_name" ) ) ) - { - players[ i ] takeweapon( get_gamemode_var( "item_meat_name" ) ); - players[ i ] decrement_is_drinking(); - } - } - level notify( "game_module_ended", winning_team ); - wait 0.1; - level delay_thread( 2, ::item_meat_clear ); - if ( is_true( level.gameended ) ) - { - level clientnotify( "end_meat" ); - } -} - -updatedownedcounters() //checked matches cerberus output -{ - if ( self._encounters_team == "A" ) - { - level.team_a_downed++; - self thread waitforrevive( "A" ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_revive_" + level.team_a_downed, "A" ); - } - else - { - level.team_b_downed++; - self thread waitforrevive( "B" ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_revive_" + level.team_b_downed, "B" ); - } -} - -waitforrevive( team ) //checked matches cerberus output -{ - self endon( "death" ); - self waittill( "player_revived" ); - if ( team == "A" ) - { - level.team_a_downed--; - } - else - { - level.team_b_downed--; - } -} - -assign_meat_to_team( player, team_num ) //checked partially changed to match beta dump see info.md -{ - meat_team = undefined; - players = get_players(); - if ( isDefined( player ) ) - { - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ] ) ) - { - i++; - continue; - } - if ( players[ i ] != player || is_true( player._meat_hint_shown ) ) - { - players[ i ] iprintlnbold( &"ZOMBIE_GRABBED_MEAT", player.name ); - } - i++; - } - meat_team = player._meat_team; - } - else if ( isDefined( team_num ) ) - { - for ( i = 0; i < players.size; i++ ) - { - if ( players[ i ]._meat_team == team_num ) - { - players[ i ] iprintlnbold( &"ZOMBIE_YOUR_TEAM_MEAT" ); - } - else - { - players[ i ] iprintlnbold( &"ZOMBIE_OTHER_TEAM_MEAT" ); - } - i++; - } - meat_team = team_num; - } - level._meat_on_team = meat_team; - teamplayers = get_players_on_meat_team( meat_team ); - if ( isDefined( teamplayers ) && teamplayers.size > 0 ) - { - if ( teamplayers[ 0 ]._encounters_team == "B" ) - { - setteamhasmeat( "allies", 1 ); - setteamhasmeat( "axis", 0 ); - } - else - { - if ( teamplayers[ 0 ]._encounters_team == "A" ) - { - setteamhasmeat( "allies", 0 ); - setteamhasmeat( "axis", 1 ); - } - } - } - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ] ) ) - { - i++; - continue; - } - if ( isDefined( player ) && players[ i ] == player ) - { - if ( isDefined( players[ i ]._has_meat ) && players[ i ]._has_meat ) - { - i++; - continue; - } - else - { - players[ i ]._has_meat = 1; - players[ i ] thread slow_down_player_with_meat(); - players[ i ] thread reset_meat_when_player_downed(); - players[ i ] thread reset_meat_when_player_disconnected(); - i++; - continue; - } - } - players[ i ] thread create_meat_team_hud( meat_team ); - i++; - } -} - -zmbvoxmeatonteamspecific( team ) //checked matches cerberus output -{ - if ( !isDefined( level.zmbvoxteamlasthadmeat ) ) - { - level.zmbvoxteamlasthadmeat = team; - } - if ( level.zmbvoxteamlasthadmeat == team ) - { - return; - } - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_grab", team ); - level.zmbvoxteamlasthadmeat = team; - otherteam = maps/mp/zombies/_zm_audio_announcer::getotherteam( team ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_grab_" + otherteam, otherteam ); -} - -create_meat_team_hud( meat_team, destroy_only ) //checked changed to match beta dump -{ - if ( isDefined( self._has_meat_hud ) ) - { - self._has_meat_hud destroy(); - if ( isDefined( destroy_only ) ) - { - return; - } - } - if ( !isDefined( meat_team ) ) - { - return; - } - elem = newclienthudelem( self ); - elem.hidewheninmenu = 1; - elem.horzalign = "LEFT"; - elem.vertalign = "BOTTOM"; - elem.alignx = "left"; - elem.aligny = "middle"; - elem.x = 10; - elem.y = -10; - elem.foreground = 1; - elem.font = "default"; - elem.fontscale = 1.4; - elem.color = vectorScale( ( 1, 1, 0 ), 0.9 ); - elem.alpha = 1; - if ( isDefined( self._meat_team ) && self._meat_team == meat_team ) - { - elem.label = &"ZOMBIE_TEAM_HAS_MEAT"; - } - else - { - elem.label = &"ZOMBIE_OTHER_TEAM_HAS_MEAT"; - } - self._has_meat_hud = elem; -} - -create_meat_player_hud() //checked changed to match beta dump -{ - if ( isDefined( self._has_meat_hud ) ) - { - self._has_meat_hud destroy(); - } - elem = newclienthudelem( self ); - elem.hidewheninmenu = 1; - elem.horzalign = "LEFT"; - elem.vertalign = "BOTTOM"; - elem.alignx = "left"; - elem.aligny = "middle"; - elem.x = 10; - elem.y = -10; - elem.foreground = 1; - elem.font = "default"; - elem.fontscale = 1.4; - elem.color = vectorScale( ( 1, 1, 0 ), 0.9 ); - elem.alpha = 1; - elem.label = &"ZOMBIE_PLAYER_HAS_MEAT"; - self._has_meat_hud = elem; -} - -slow_down_player_with_meat() //checked changed to match beta dump -{ - self endon( "disconnect" ); - self setclientfield( "holding_meat", 1 ); - self setmovespeedscale( 0.6 ); - self thread zmbvoxstartholdcounter(); - while ( is_true( self._has_meat ) ) - { - level._meat_player_tracker_origin = self.origin; - wait 0.2; - } - self setmovespeedscale( 1 ); - self setclientfield( "holding_meat", 0 ); -} - -zmbvoxstartholdcounter() //checked changed to match beta dump -{ - meat_hold_counter = 0; - while ( is_true( self._has_meat ) ) - { - if ( meat_hold_counter >= 15 ) - { - self thread maps/mp/zombies/_zm_audio_announcer::leaderdialogonplayer( "meat_hold" ); - return; - } - wait 0.5; - meat_hold_counter++; - } -} - -reset_meat_when_player_downed() //checked matches cerberus output -{ - self notify( "reset_downed" ); - self endon( "reset_downed" ); - level endon( "meat_reset" ); - level endon( "meat_thrown" ); - self waittill_any( "player_downed", "death", "fake_death", "replace_weapon_powerup" ); - self._has_meat = 0; - self._spawning_meat = 1; - grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), self.origin + ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 15 ), ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 0 ) ); - grenade._respawned_meat = 1; - level._last_person_to_throw_meat = undefined; - playsoundatposition( "zmb_spawn_powerup", self.origin ); - wait 0.1; - self._spawning_meat = undefined; - level notify( "meat_reset" ); -} - -meat_last_stand_callback( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) //checked matches cerberus output -{ - if ( is_true( self._has_meat ) ) - { - level thread item_meat_drop( self.origin, self._meat_team ); - } -} - -reset_meat_when_player_disconnected() //checked matches cerberus output -{ - level endon( "meat_thrown" ); - level endon( "meat_reset" ); - level endon( "meat_end" ); - team = self._meat_team; - self waittill( "disconnect" ); - level thread item_meat_drop( level._meat_player_tracker_origin, team ); -} - -item_meat_drop( org, team ) //checked matches cerberus output -{ - players = get_alive_players_on_meat_team( team ); - if ( players.size > 0 ) - { - player = players[ 0 ]; - player endon( "disconnect" ); - player._spawning_meat = 1; - grenade = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org + ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 15 ), ( 0, 0, 0 ) ); - grenade._respawned_meat = 1; - level._last_person_to_throw_meat = undefined; - playsoundatposition( "zmb_spawn_powerup", grenade.origin ); - wait 0.1; - player._spawning_meat = undefined; - level notify( "meat_reset" ); - } -} - -player_has_meat( player ) //checked matches cerberus output -{ - return player getcurrentweapon() == get_gamemode_var( "item_meat_name" ); -} - -get_player_with_meat() //checked changed to match cerberus output -{ - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - if ( isDefined( players[ i ]._has_meat ) && players[ i ]._has_meat ) - { - return players[ i ]; - } - } - return undefined; -} - -spawn_player_meat_manager() //checked matches cerberus output -{ - self thread player_watch_weapon_change(); - self thread player_watch_grenade_throw(); -} - -player_watch_weapon_change() //checked changed to match cerberus output -{ - self endon( "death_or_disconnect" ); - for ( ;; ) - { - self waittill( "weapon_change", weapon ); - if ( weapon == get_gamemode_var( "item_meat_name" ) ) - { - add_meat_event( "player_meat", self ); - continue; - } - add_meat_event( "player_no_meat", self ); - } -} - -player_watch_grenade_throw() //checked matches cerberus output -{ - self endon( "death_or_disconnect" ); - for ( ;; ) - { - self waittill( "grenade_fire", weapon, weapname ); - if ( weapname == get_gamemode_var( "item_meat_name" ) ) - { - add_meat_event( "player_grenade_fire", self, weapon ); - weapon thread item_meat_on_spawn_retrieve_trigger( undefined, self, get_gamemode_var( "item_meat_name" ) ); - } - } -} - -spawn_level_meat_manager() //dev call didn't check -{ - /* -/# - level.meat_manager = spawnstruct(); - level.meat_manager.events = []; - level.meat_manager thread handle_meat_events(); -#/ - */ -} - -add_meat_event( e, p1, p2, p3, p4 ) //dev call didn't check -{ - /* -/# - event = spawnstruct(); - event.e = e; - event.numparams = 0; - event.param = []; - if ( isDefined( p1 ) ) - { - event.param[ 0 ] = p1; - event.numparams = 1; - } - if ( isDefined( p2 ) ) - { - event.param[ 1 ] = p2; - event.numparams = 2; - } - if ( isDefined( p3 ) ) - { - event.param[ 2 ] = p3; - event.numparams = 3; - } - if ( isDefined( p4 ) ) - { - event.param[ 3 ] = p4; - event.numparams = 4; - } - if ( isDefined( level.meat_manager ) ) - { - level.meat_manager.events[ level.meat_manager.events.size ] = event; -#/ - } - */ -} - -handle_meat_events() //checked matches cerberus output -{ - while ( 1 ) - { - while ( self.events.size ) - { - self handle_meat_event( self.events[ 0 ] ); - arrayremoveindex( self.events, 0 ); - } - wait 0.05; - } -} - -paramstr( param ) //dev call didn't check -{ - /* -/# - if ( !isDefined( param ) ) - { - return "undefined"; - } - if ( isplayer( param ) ) - { - return param.name; - } - if ( !isstring( param ) && !isint( param ) || isfloat( param ) && isvec( param ) ) - { - return param; - } - if ( isarray( param ) ) - { - return "[]"; - } - return ""; -#/ - */ -} - -handle_meat_event( event ) //dev call didn't check -{ - /* -/# - estr = "ZM MEAT: [" + event.e + "]("; - i = 0; - while ( i < event.numparams ) - { - estr += paramstr( event.param[ i ] ); - if ( i < ( event.numparams - 1 ) ) - { - estr += ","; - } - i++; - } - estr += ") \n"; - println( estr ); -#/ - */ -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/gametypes_zm/zstandard.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/gametypes_zm/zstandard.gsc deleted file mode 100644 index c380171..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/gametypes_zm/zstandard.gsc +++ /dev/null @@ -1,45 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_ai_dogs; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/gametypes_zm/_zm_gametype; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; - -main() //checked matches cerberus output -{ - maps/mp/gametypes_zm/_zm_gametype::main(); - level.onprecachegametype = ::onprecachegametype; - level.onstartgametype = ::onstartgametype; - level._game_module_custom_spawn_init_func = maps/mp/gametypes_zm/_zm_gametype::custom_spawn_init_func; - level._game_module_stat_update_func = maps/mp/zombies/_zm_stats::survival_classic_custom_stat_update; - maps/mp/gametypes_zm/_zm_gametype::post_gametype_main( "zstandard" ); -} - -onprecachegametype() //checked matches cerberus output -{ - level.playersuicideallowed = 1; - level.canplayersuicide = ::canplayersuicide; - level.suicide_weapon = "death_self_zm"; - precacheitem( "death_self_zm" ); - maps/mp/zombies/_zm_ai_dogs::init(); - maps/mp/gametypes_zm/_zm_gametype::rungametypeprecache( "zstandard" ); -} - -onstartgametype() //checked matches cerberus output -{ - maps/mp/gametypes_zm/_zm_gametype::setup_classic_gametype(); - maps/mp/gametypes_zm/_zm_gametype::rungametypemain( "zstandard", ::zstandard_main ); -} - -zstandard_main() //checked matches cerberus output -{ - level.dog_rounds_allowed = getgametypesetting( "allowdogs" ); - if ( level.dog_rounds_allowed ) - { - maps/mp/zombies/_zm_ai_dogs::enable_dog_rounds(); - } - level thread maps/mp/zombies/_zm::round_start(); - level thread maps/mp/gametypes_zm/_zm_gametype::kill_all_zombies(); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit.gsc deleted file mode 100644 index 2a91a3f..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit.gsc +++ /dev/null @@ -1,3518 +0,0 @@ -//checked includes changed to match cerberus output -#include maps/mp/zombies/_zm_tombstone; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_audio_announcer; -#include maps/mp/zm_transit_distance_tracking; -#include maps/mp/zm_transit_sq; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zm_transit_cling; -#include maps/mp/zombies/_zm_devgui; -#include maps/mp/zombies/_zm_power; -#include maps/mp/zombies/_zm_blockers; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_audio; -#include character/c_transit_player_reporter; -#include character/c_transit_player_engineer; -#include character/c_transit_player_oldman; -#include character/c_transit_player_farmgirl; -#include maps/mp/zm_transit_openings; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zm_transit_achievement; -#include maps/mp/_visionset_mgr; -#include maps/mp/zombies/_zm_weap_ballistic_knife; -#include maps/mp/zombies/_zm_weap_claymore; -#include maps/mp/zombies/_zm_weap_bowie; -#include maps/mp/zombies/_zm_weap_tazer_knuckles; -#include maps/mp/zombies/_zm_weap_cymbal_monkey; -#include maps/mp/zombies/_zm_weap_emp_bomb; -#include maps/mp/zombies/_zm_weap_jetgun; -#include maps/mp/zombies/_zm_weap_riotshield; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zm_transit_power; -#include maps/mp/zm_transit_lava; -#include maps/mp/gametypes_zm/_spawning; -#include maps/mp/zm_transit_ai_screecher; -#include maps/mp/zombies/_load; -#include maps/mp/_sticky_grenade; -#include maps/mp/teams/_teamset_cdc; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm; -#include maps/mp/zm_transit_fx; -#include maps/mp/zombies/_zm_equip_turbine; -#include maps/mp/zm_transit_automaton; -#include maps/mp/zm_transit_bus; -#include maps/mp/zm_transit_ffotd; -#include maps/mp/zombies/_zm_banking; -#include maps/mp/zm_transit_gamemodes; -#include maps/mp/zombies/_zm_weapon_locker; -#include maps/mp/zm_transit_utility; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/_utility; -#include common_scripts/utility; - -gamemode_callback_setup() //checked matches cerberus output -{ - maps/mp/zm_transit_gamemodes::init(); -} - -encounter_init() //checked matches cerberus output -{ - precacheshader( "sun_moon_zombie" ); - level.precachecustomcharacters = ::precache_team_characters; - level.givecustomcharacters = ::give_team_characters; -} - -zgrief_init() //checked matches cerberus output -{ - encounter_init(); - level thread maps/mp/zombies/_zm_banking::delete_bank_teller(); - flag_wait( "start_zombie_round_logic" ); - level.custom_intermission = ::transit_standard_intermission; - if ( isDefined( level.scr_zm_map_start_location ) && level.scr_zm_map_start_location == "transit" ) - { - level thread lava_damage_depot(); - } -} - -survival_init() //checked matches cerberus output -{ - level.force_team_characters = 1; - level.should_use_cia = 0; - if ( randomint( 100 ) > 50 ) - { - level.should_use_cia = 1; - } - level.precachecustomcharacters = ::precache_team_characters; - level.givecustomcharacters = ::give_team_characters; - level.dog_spawn_func = ::dog_spawn_transit_logic; - level thread maps/mp/zombies/_zm_banking::delete_bank_teller(); - flag_wait( "start_zombie_round_logic" ); - level.custom_intermission = ::transit_standard_intermission; - if ( isDefined( level.scr_zm_map_start_location ) && level.scr_zm_map_start_location == "transit" ) - { - level thread lava_damage_depot(); - } -} - -zclassic_init() //checked matches cerberus output -{ - level.precachecustomcharacters = ::precache_personality_characters; - level.givecustomcharacters = ::give_personality_characters; - level.setupcustomcharacterexerts = ::setup_personality_character_exerts; - level.level_specific_init_powerups = ::add_transit_powerups; - level.powerup_intro_vox = ::powerup_intro_vox; - level.powerup_vo_available = ::powerup_vo_available; - level.buildable_build_custom_func = ::buildable_build_custom_func; - level.custom_update_retrieve_trigger = ::transit_bus_update_retrieve_trigger; - level.buildable_pickup_vo_override = ::transit_buildable_vo_override; - precachemodel( "p6_zm_window_dest_glass_small_broken" ); - precachemodel( "p6_zm_window_dest_glass_big_broken" ); - precachemodel( "p6_zm_keycard" ); - flag_wait( "start_zombie_round_logic" ); - level.custom_intermission = ::transit_intermission; - level.custom_trapped_zombies = ::kill_zombies_depot; - level thread lava_damage_depot(); - level thread bank_teller_init(); - level thread transit_breakable_glass_init(); - level thread sndsetupmusiceasteregg(); - level thread bank_pap_hint(); - level thread power_pap_hint(); - level thread sndtoiletflush(); -} - -zclassic_preinit() //checked matches cerberus output -{ - zclassic_init(); -} - -zcleansed_preinit() //checked matches cerberus output -{ - level._zcleansed_weapon_progression = array( "rpd_zm", "srm1216_zm", "judge_zm", "qcw05_zm", "kard_zm" ); - survival_init(); -} - -zcontainment_preinit() //checked matches cerberus output -{ - survival_init(); -} - -zdeadpool_preinit() //checked matches cerberus output -{ - encounter_init(); -} - -zgrief_preinit() //checked matches cerberus output -{ - registerclientfield( "toplayer", "meat_stink", 1, 1, "int" ); - zgrief_init(); - level thread delete_bus_pieces(); -} - -zmeat_preinit() //checked matches cerberus output -{ - encounter_init(); -} - -znml_preinit() //checked matches cerberus output -{ - survival_init(); -} - -zpitted_preinit() //checked matches cerberus output -{ - encounter_init(); -} - -zrace_preinit() //checked matches cerberus output -{ - encounter_init(); -} - -zstandard_preinit() //checked matches cerberus output -{ - survival_init(); - level thread delete_bus_pieces(); -} - -zturned_preinit() //checked matches cerberus output -{ - encounter_init(); -} - -createfx_callback() //checked changed to match cerberus output -{ - ents = getentarray(); - for ( i = 0; i < ents.size; i++ ) - { - if ( ents[ i ].classname != "info_player_start" ) - { - ents[ i ] delete(); - } - } -} - -main() //checked changed to match cerberus output -{ - level thread maps/mp/zm_transit_ffotd::main_start(); - level.hotjoin_player_setup = ::hotjoin_setup_player; - level.level_createfx_callback_thread = ::createfx_callback; - level.ignore_spawner_func = ::transit_ignore_spawner; - level.default_game_mode = "zclassic"; - level.default_start_location = "transit"; - level._get_random_encounter_func = maps/mp/zm_transit_utility::get_random_encounter_match; - setup_rex_starts(); - maps/mp/zm_transit_bus::init_animtree(); - maps/mp/zm_transit_bus::init_props_animtree(); - maps/mp/zm_transit_automaton::init_animtree(); - maps/mp/zombies/_zm_equip_turbine::init_animtree(); - maps/mp/zm_transit_fx::main(); - maps/mp/zombies/_zm::init_fx(); - maps/mp/animscripts/zm_death::precache_gib_fx(); - level.zombiemode = 1; - level._no_water_risers = 1; - level.riser_fx_on_client = 1; - if ( !isDefined( level.zombie_surfing_kills ) ) - { - level.zombie_surfing_kills = 1; - level.zombie_surfing_kill_count = 6; - } - maps/mp/teams/_teamset_cdc::register(); - maps/mp/_sticky_grenade::init(); - level.level_specific_stats_init = ::init_transit_stats; - maps/mp/zombies/_load::main(); - init_clientflags(); - level thread transit_pathnode_spawning(); - registerclientfield( "allplayers", "playerinfog", 1, 1, "int" ); - level.set_player_in_fog = ::set_player_in_fog; - level.custom_breadcrumb_store_func = ::transit_breadcrumb_store_func; - register_screecher_lights(); - if ( getDvar( "createfx" ) == "1" ) - { - return; - } - maps/mp/teams/_teamset_cdc::level_init(); - maps/mp/zm_transit_ai_screecher::init(); - level.is_player_in_screecher_zone = ::is_player_in_screecher_zone; - level.revive_trigger_spawn_override_link = ::revive_trigger_spawn_override_link; - level.revive_trigger_should_ignore_sight_checks = ::revive_trigger_should_ignore_sight_checks; - level.allow_move_in_laststand = ::allow_move_in_laststand; - level.can_revive = ::can_revive; - level.melee_miss_func = ::melee_miss_func; - level.grenade_watcher = ::grenade_watcher; - level.ignore_find_flesh = ::ignore_find_flesh; - level.ignore_equipment = ::ignore_equipment; - level.should_attack_equipment = ::should_attack_equipment; - level.gib_on_damage = ::gib_on_damage; - level.melee_anim_state = ::melee_anim_state; - level.ignore_stop_func = ::ignore_stop_func; - level.can_melee = ::can_melee; - level.ignore_traverse = ::ignore_traverse; - level.exit_level_func = ::exit_level_func; - level.inert_substate_override = ::inert_substate_override; - level.attack_item = ::attack_item; - level.attack_item_stop = ::attack_item_stop; - level.check_valid_poi = ::check_valid_poi; - level.dog_melee_miss = ::dog_melee_miss; - precacheshellshock( "lava" ); - precacheshellshock( "lava_small" ); - precache_survival_barricade_assets(); - include_game_modules(); - maps/mp/gametypes_zm/_spawning::level_use_unified_spawning( 1 ); - level.givecustomloadout = ::givecustomloadout; - level.giveextrazombies = ::giveextrazombies; - initcharacterstartindex(); - if ( level.xenon ) - { - level.giveextrazombies = ::giveextrazombies; - precacheextrazombies(); - } - level.custom_player_fake_death = ::transit_player_fake_death; - level.custom_player_fake_death_cleanup = ::transit_player_fake_death_cleanup; - level.initial_round_wait_func = ::initial_round_wait_func; - level.zombie_speed_up = ::zombie_speed_up; - level.zombie_init_done = ::zombie_init_done; - level.zombiemode_using_pack_a_punch = 1; - level.zombiemode_reusing_pack_a_punch = 1; - level.pap_interaction_height = 47; - level.zombiemode_using_doubletap_perk = 1; - level.zombiemode_using_juggernaut_perk = 1; - level.zombiemode_using_marathon_perk = 1; - level.zombiemode_using_revive_perk = 1; - level.zombiemode_using_sleightofhand_perk = 1; - level.zombiemode_using_tombstone_perk = 1; - init_persistent_abilities(); - level.register_offhand_weapons_for_level_defaults_override = ::offhand_weapon_overrride; - if ( is_classic() ) - { - level.player_intersection_tracker_override = ::zombie_transit_player_intersection_tracker_override; - level.taser_trig_adjustment = ( 2, 7, 0 ); - } - level.player_too_many_weapons_monitor_callback = ::zombie_transit_player_too_many_weapons_monitor_callback; - level._zmbvoxlevelspecific = ::zombie_transit_audio_alias_override; - level._zombie_custom_add_weapons = ::custom_add_weapons; - level._allow_melee_weapon_switching = 1; - level.disable_melee_wallbuy_icons = 1; - level.uses_gumps = 1; - setdvar( "aim_target_fixed_actor_size", 1 ); - level.banking_update_enabled = 1; - level.raygun2_included = 1; - include_weapons(); - include_powerups(); - include_equipment_for_level(); - include_powered_items(); - level.powerup_bus_range = 500; - level.pay_turret_cost = 300; - level.auto_turret_cost = 500; - setup_dvars(); - onplayerconnect_callback( ::setup_players ); - level thread disable_triggers(); - level thread maps/mp/zm_transit_lava::lava_damage_init(); - level.zm_transit_burn_max_duration = 2; - level thread maps/mp/zm_transit_power::precache_models(); - setup_zombie_init(); - maps/mp/zombies/_zm::init(); - maps/mp/zombies/_zm_ai_basic::init_inert_zombies(); - maps/mp/zombies/_zm_weap_riotshield::init(); - maps/mp/zombies/_zm_weap_jetgun::init(); - level.special_weapon_magicbox_check = ::transit_special_weapon_magicbox_check; - maps/mp/zombies/_zm_weap_emp_bomb::init(); - zm_transit_emp_init(); - level.legacy_cymbal_monkey = 1; - maps/mp/zombies/_zm_weap_cymbal_monkey::init(); - maps/mp/zombies/_zm_weap_tazer_knuckles::init(); - maps/mp/zombies/_zm_weap_bowie::init(); - maps/mp/zombies/_zm_weap_claymore::init(); - maps/mp/zombies/_zm_weap_ballistic_knife::init(); - if ( !isDefined( level.vsmgr_prio_overlay_zm_transit_burn ) ) - { - level.vsmgr_prio_overlay_zm_transit_burn = 20; - } - maps/mp/_visionset_mgr::vsmgr_register_info( "overlay", "zm_transit_burn", 1, level.vsmgr_prio_overlay_zm_transit_burn, 15, 1, maps/mp/_visionset_mgr::vsmgr_duration_lerp_thread_per_player, 0 ); - level maps/mp/zm_transit_achievement::init(); - precacheitem( "death_throe_zm" ); - if ( level.splitscreen && getDvarInt( "splitscreen_playerCount" ) > 2 ) - { - level.optimise_for_splitscreen = 1; - } - else - { - level.optimise_for_splitscreen = 0; - } - if ( level.ps3 ) - { - if ( is_true( level.optimise_for_splitscreen ) ) - { - level.culldist = 1500; - } - else - { - level.culldist = 4500; - } - } - else if ( is_true( level.optimise_for_splitscreen ) ) - { - level.culldist = 2500; - } - else - { - level.culldist = 5500; - } - setculldist( level.culldist ); - level.zones = []; - level.zone_manager_init_func = ::transit_zone_init; - init_zones = []; - init_zones[ 0 ] = "zone_pri"; - init_zones[ 1 ] = "zone_station_ext"; - init_zones[ 2 ] = "zone_tow"; - if ( is_classic() ) - { - init_zones[ 3 ] = "zone_far"; - init_zones[ 4 ] = "zone_pow"; - init_zones[ 5 ] = "zone_trans_1"; - init_zones[ 6 ] = "zone_trans_2"; - init_zones[ 7 ] = "zone_trans_3"; - init_zones[ 8 ] = "zone_trans_4"; - init_zones[ 9 ] = "zone_trans_5"; - init_zones[ 10 ] = "zone_trans_6"; - init_zones[ 11 ] = "zone_trans_7"; - init_zones[ 12 ] = "zone_trans_8"; - init_zones[ 13 ] = "zone_trans_9"; - init_zones[ 14 ] = "zone_trans_10"; - init_zones[ 15 ] = "zone_trans_11"; - init_zones[ 16 ] = "zone_amb_tunnel"; - init_zones[ 17 ] = "zone_amb_forest"; - init_zones[ 18 ] = "zone_amb_cornfield"; - init_zones[ 19 ] = "zone_amb_power2town"; - init_zones[ 20 ] = "zone_amb_bridge"; - } - else - { - init_zones[ 3 ] = "zone_far_ext"; - init_zones[ 4 ] = "zone_brn"; - } - level thread maps/mp/zombies/_zm_zonemgr::manage_zones( init_zones ); - if ( is_true( level.optimise_for_splitscreen ) ) - { - if ( is_classic() ) - { - level.zombie_ai_limit = 20; - } - setdvar( "fx_marks_draw", 0 ); - setdvar( "disable_rope", 1 ); - setdvar( "cg_disableplayernames", 1 ); - setdvar( "disableLookAtEntityLogic", 1 ); - } - else - { - level.zombie_ai_limit = 24; - } - setdvar( "zombiemode_path_minz_bias", 13 ); - level thread maps/mp/zm_transit_ffotd::main_end(); - flag_wait( "start_zombie_round_logic" ); - level notify( "players_done_connecting" ); - /* -/# - execdevgui( "devgui_zombie_transit" ); - level.custom_devgui = ::zombie_transit_devgui; -#/ - */ - level thread set_transit_wind(); - if ( is_classic() ) - { - level thread player_name_fade_control(); - } - level._audio_custom_response_line = ::transit_audio_custom_response_line; - level.speed_change_round = 15; - level.speed_change_max = 5; - init_screecher_zones(); - elec_door_triggers = getentarray("local_electric_door", "script_noteworthy"); - foreach ( trigger in elec_door_triggers ) - { - if ( isDefined( trigger.door_hold_trigger ) && trigger.door_hold_trigger == "zombie_door_hold_farm" ) - { - if ( isDefined( trigger.doors ) ) - { - for ( i = 0; i < trigger.doors.size; i++ ) - { - if ( trigger.doors[ i ].origin == ( 8833, -5697, 135 ) ) - { - trigger.doors[ i ].ignore_use_blocker_clip_for_pathing_check = 1; - } - } - } - } - } -} - -init_persistent_abilities() //checked matches cerberus output -{ - if ( is_classic() ) - { - level.pers_upgrade_boards = 1; - level.pers_upgrade_revive = 1; - level.pers_upgrade_multi_kill_headshots = 1; - level.pers_upgrade_cash_back = 1; - level.pers_upgrade_insta_kill = 1; - level.pers_upgrade_jugg = 1; - level.pers_upgrade_carpenter = 1; - level.pers_upgrade_box_weapon = 1; - level.pers_magic_box_firesale = 1; - level.pers_treasure_chest_get_weapons_array_func = ::pers_treasure_chest_get_weapons_array_transit; - level.pers_upgrade_sniper = 1; - level.pers_upgrade_pistol_points = 1; - level.pers_upgrade_perk_lose = 1; - level.pers_upgrade_double_points = 1; - level.pers_upgrade_nube = 1; - } -} - -pers_treasure_chest_get_weapons_array_transit() //checked matches cerberus output -{ - if ( !isDefined( level.pers_box_weapons ) ) - { - level.pers_box_weapons = []; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "knife_ballistic_zm"; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "cymbal_monkey_zm"; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "judge_zm"; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "emp_grenade_zm"; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "galil_zm"; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "hamr_zm"; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "ray_gun_zm"; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "rpd_zm"; - } -} - -setup_rex_starts() //checked matches cerberus output -{ - add_gametype( "zclassic", ::dummy, "zclassic", ::dummy ); - add_gametype( "zstandard", ::dummy, "zstandard", ::dummy ); - add_gametype( "zgrief", ::dummy, "zgrief", ::dummy ); - add_gameloc( "transit", ::dummy, "transit", ::dummy ); - add_gameloc( "town", ::dummy, "town", ::dummy ); - add_gameloc( "farm", ::dummy, "farm", ::dummy ); -} - -dummy() //checked matches cerberus output -{ -} - -init_clientflags() //checked matches cerberus output -{ - level._clientflag_vehicle_bus_flashing_lights = 0; - level._clientflag_vehicle_bus_head_lights = 1; - level._clientflag_vehicle_bus_brake_lights = 2; - level._clientflag_vehicle_bus_turn_signal_left_lights = 3; - level._clientflag_vehicle_bus_turn_signal_right_lights = 4; -} - -set_player_in_fog( onoff ) //checked matches cerberus output -{ - if ( onoff ) - { - self setclientfield( "playerinfog", 1 ); - } - else - { - self setclientfield( "playerinfog", 0 ); - } -} - -transit_breadcrumb_store_func( store_crumb ) //checked matches cerberus output used is_true instead -{ - if ( is_true( self.isonbus ) ) - { - return 0; - } - return store_crumb; -} - -transit_ignore_spawner( spawner ) //checked matches cerberus output -{ - if ( spawner.classname == "actor_zm_zombie_transit_screecher" ) - { - return 1; - } - return 0; -} - -allow_move_in_laststand( player_down ) //checked matches cerberus output used is_true instead -{ - if ( is_true( player_down.isonbus ) ) - { - return 0; - } - return 1; -} - -can_revive( player_down ) -{ - if ( isDefined( self.screecher ) ) - { - return 0; - } - return 1; -} - -melee_miss_func() //checked changed to match cerberus output -{ - if ( isDefined( self.enemy ) ) - { - if ( !isDefined( self.enemy.screecher ) || self.enemy getstance() == "prone" || self.enemy maps/mp/zombies/_zm_laststand::is_reviving_any() ) - { - dist_sq = distancesquared( self.enemy.origin, self.origin ); - melee_dist_sq = self.meleeattackdist * self.meleeattackdist; - if ( dist_sq < melee_dist_sq ) - { - self.enemy dodamage( self.meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); - } - } - } -} - -grenade_watcher( grenade, weapname ) //checked changed to match cerberus output -{ - if ( weapname == "frag_grenade_zm" || weapname == "claymore_zm" || weapname == "sticky_grenade_zm" ) - { - self thread maps/mp/zombies/_zm_ai_basic::grenade_watcher( grenade ); - } -} - -ignore_find_flesh() //checked matches cerberus output used is_true instead -{ - if ( is_true( self.isonbus ) ) - { - return 1; - } - return 0; -} - -ignore_equipment( zombie ) //checked matches cerberus output used is_true instead -{ - if ( !is_true( zombie.completed_emerging_into_playable_area ) ) - { - return 1; - } - if ( is_true( zombie.is_avogadro ) ) - { - return 1; - } - if ( is_true( zombie.is_inert ) ) - { - return 1; - } - if ( isDefined( zombie.inert_delay ) ) - { - return 1; - } - return 0; -} - -should_attack_equipment( dist ) //checked changed to match cerberus output -{ - if ( !isDefined( level.door_triggers ) ) - { - level.door_triggers = getentarray( "bus_door_trigger", "targetname" ); - } - - for ( i = 0; i < level.door_triggers.size; i++ ) - { - if ( self istouching( level.door_triggers[ i ] ) ) - { - if ( dist < 4096 ) - { - return 1; - } - } - } - return 0; -} - -gib_on_damage() //checked changed to match cerberus output used is_true instead -{ - opening = self.opening; - if ( isDefined( opening ) ) - { - if ( isDefined( self.a.gib_ref ) || self.a.gib_ref == "left_arm" || self.a.gib_ref == "right_arm" ) - { - level maps/mp/zombies/_zm_spawner::zombie_death_points( self.origin, self.damagemod, self.a.gib_ref, self.attacker, self ); - opening.zombie = undefined; - launchvector = ( 0, 0, -1 ); - self thread maps/mp/zombies/_zm_spawner::zombie_ragdoll_then_explode( launchvector, self.attacker ); - self notify( "killanimscript" ); - return; - } - } - if ( is_true( self.is_inert ) ) - { - if ( !is_true( self.has_legs ) ) - { - self notify( "stop_zombie_inert_transition" ); - self setanimstatefromasd( "zm_inert_crawl", maps/mp/zombies/_zm_ai_basic::get_inert_crawl_substate() ); - } - } -} - -melee_anim_state() //checked matches cerberus output -{ - if ( self.zombie_move_speed == "bus_walk" ) - { - return maps/mp/animscripts/zm_utility::append_missing_legs_suffix( "zm_walk_melee" ); - } - return undefined; -} - -ignore_stop_func() //checked matches cerberus output used is_true instead -{ - if ( is_true( self.is_inert ) ) - { - return 1; - } - if ( isDefined( self.opening ) ) - { - return 1; - } - if ( isDefined( self.entering_bus ) ) - { - return 1; - } - return 0; -} - -can_melee() //checked matches cerberus output used is_true instead -{ - if ( is_true( self.dont_die_on_me ) ) - { - return 0; - } - if ( is_true( self.isonbus ) || is_true( self.isonbusroof ) ) - { - if ( self.enemydistancesq > anim.meleerangesq ) - { - return 0; - } - } - return 1; -} - -ignore_traverse() //checked matches cerberus output used is_true instead -{ - if ( is_true( self.is_inert ) ) - { - if ( !is_true( self.in_place ) ) - { - self setgoalpos( self.origin ); - if ( randomint( 100 ) > 50 ) - { - self setanimstatefromasd( "zm_inert", "inert1" ); - } - else - { - self setanimstatefromasd( "zm_inert", "inert2" ); - } - self.in_place = 1; - } - return 1; - } - return 0; -} - -exit_level_func() //checked partially changed to match cerberus output see info.md No. 2 -{ - zombies = getaiarray( level.zombie_team ); - foreach ( zombie in zombies ) - { - if ( is_true( zombie.ignore_solo_last_stand ) ) - { - } - else if ( isDefined( zombie.find_exit_point ) ) - { - zombie thread [[ zombie.find_exit_point ]](); - } - else if ( is_true( zombie.isonbus ) ) - { - zombie thread find_exit_bus(); - } - else if ( zombie.ignoreme ) - { - zombie thread maps/mp/zombies/_zm::default_delayed_exit(); - } - else - { - zombie thread maps/mp/zombies/_zm::default_find_exit_point(); - } - } -} - -inert_substate_override( substate ) //checked matches cerberus output used is_true instead -{ - in_bar = 0; - if ( flag( "OnTowDoorBar" ) ) - { - if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_bar" ) ) - { - in_bar = 1; - } - } - if ( is_true( self.isonbus ) || in_bar ) - { - if ( randomint( 100 ) > 50 ) - { - substate = "inert1"; - } - else - { - substate = "inert2"; - } - } - return substate; -} - -attack_item() //checked matches cerberus output used is_true instead -{ - if ( is_true( self.isonbus ) ) - { - self linkto( level.the_bus ); - } -} - -attack_item_stop() //checked matches cerberus output used is_true instead -{ - if ( is_true( self.isonbus ) ) - { - self unlink(); - } -} - -check_valid_poi( valid ) //checked changed to match cerberus output -{ - if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_bar" ) ) - { - if ( !flag( "OnTowDoorBar" ) ) - { - return 0; - } - } - else if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_town_barber" ) ) - { - if ( !flag( "OnTowDoorBarber" ) ) - { - return 0; - } - } - return valid; -} - -dog_melee_miss() //checked matches cerberus output -{ - if ( isDefined( self.enemy ) ) - { - stance = self.enemy getstance(); - if ( stance == "prone" || stance == "crouch" ) - { - dist_sq = distancesquared( self.enemy.origin, self.origin ); - if ( dist_sq < 10000 ) - { - meleedamage = getDvarInt( "dog_MeleeDamage" ); - self.enemy dodamage( meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); - } - } - } -} - -find_exit_loc() //checked changed to match cerberus output -{ - player = self.favoriteenemy; - dist_zombie = 0; - dist_player = 0; - dest = 0; - away = vectornormalize( self.origin - player.origin ); - endpos = self.origin + vectorScale( away, 600 ); - locs = array_randomize( level.enemy_dog_locations ); - for ( i = 0; i < locs.size; i++ ) - { - dist_zombie = distancesquared( locs[ i ].origin, endpos ); - dist_player = distancesquared( locs[ i ].origin, player.origin ); - if ( dist_zombie < dist_player ) - { - dest = i; - break; - } - } - if ( isDefined( locs[ dest ] ) ) - { - self.solo_revive_exit_pos = locs[ dest ].origin; - } -} - -find_exit_bus() //checked matches cerberus output used is_true instead -{ - self endon( "death" ); - self.solo_revive_exit = 1; - self notify( "endOnBus" ); - self thread maps/mp/zm_transit_openings::zombieexitbus(); - self find_exit_loc(); - off_the_bus = 0; - while ( flag( "wait_and_revive" ) ) - { - if ( !off_the_bus && self.ai_state == "find_flesh" ) - { - off_the_bus = 1; - self thread maps/mp/zombies/_zm::default_find_exit_point(); - } - wait 0.1; - } - self.solo_revive_exit = 0; - if ( !is_true( self.exiting_window ) ) - { - if ( is_true( self.isonbus ) ) - { - self notify( "stop_zombieExitBus" ); - self.walk_to_exit = 0; - self thread zombiemoveonbus(); - } - } -} - -post_first_init() //checked matches cerberus output -{ - while ( !isDefined( anim.notfirsttime ) ) - { - wait 0.5; - } - anim.meleerange = 36; - anim.meleerangesq = anim.meleerange * anim.meleerange; -} - -set_transit_wind() //checked matches cerberus output -{ - setdvar( "enable_global_wind", 1 ); - setdvar( "wind_global_vector", "-120 -115 -120" ); - setdvar( "wind_global_low_altitude", 0 ); - setdvar( "wind_global_hi_altitude", 2000 ); - setdvar( "wind_global_low_strength_percent", 0,5 ); -} - -revive_trigger_move_with_player() //checked matches cerberus output -{ - self endon( "stop_revive_trigger" ); - self endon( "death" ); - while ( isDefined( self.revivetrigger ) ) - { - my_position = self gettagorigin( "J_SpineLower" ); - self.revivetrigger unlink(); - self.revivetrigger.origin = my_position; - self.revivetrigger linkto( level.the_bus ); - wait 0.1; - } -} - -revive_trigger_should_ignore_sight_checks( player_down ) //checked matches cerberus output used is_true instead -{ - if ( is_true( player_down.isonbus ) && level.the_bus.ismoving ) - { - return 1; - } - return 0; -} - -revive_trigger_spawn_override_link( player_down ) //checked changed to match cerberus output used is_true instead -{ - radius = getDvarInt( "revive_trigger_radius" ); - player_down.revivetrigger = spawn( "trigger_radius", ( 0, 0, 0 ), 0, radius, radius ); - player_down.revivetrigger sethintstring( "" ); - player_down.revivetrigger setcursorhint( "HINT_NOICON" ); - player_down.revivetrigger setmovingplatformenabled( 1 ); - player_down.revivetrigger enablelinkto(); - if ( is_true( player_down.isonbus ) ) - { - player_down.revivetrigger linkto( level.the_bus ); - player_down thread revive_trigger_move_with_player(); - } - else - { - player_down.revivetrigger.origin = player_down.origin; - player_down.revivetrigger linkto( player_down ); - } - player_down.revivetrigger.beingrevived = 0; - player_down.revivetrigger.createtime = getTime(); -} - -init_screecher_zones() //checked partially changed to match cerberus output see info.md No. 2 -{ - foreach ( key in level.zone_keys ) - { - if ( issubstr( key, "_trans_" ) || issubstr( key, "_amb_" ) ) - { - level.zones[ key ].screecher_zone = 1; - } - else - { - level.zones[ key ].screecher_zone = 0; - } - } -} - -is_player_in_screecher_zone( player ) //checked changed to match cerberus output used is_true instead -{ - if ( is_true( player.isonbus ) ) - { - return 0; - } - if ( player_entered_safety_zone( player ) ) - { - return 0; - } - if ( player_entered_safety_light( player ) ) - { - return 0; - } - curr_zone = player get_current_zone( 1 ); - if ( isDefined( curr_zone ) && !is_true( curr_zone.screecher_zone ) ) - { - return 0; - } - return 1; -} - -player_entered_safety_zone( player ) //checked changed to match cerberus output -{ - if ( !isDefined( level.safety_volumes ) ) - { - level.safety_volumes = getentarray( "screecher_volume", "targetname" ); - } - if ( isDefined( player.last_safety_volume ) ) - { - if ( player istouching( player.last_safety_volume ) ) - { - return 1; - } - } - if ( isDefined( level.safety_volumes ) ) - { - for ( i = 0; i < level.safety_volumes.size; i++ ) - { - if ( player istouching( level.safety_volumes[ i ] ) ) - { - player.last_safety_volume = level.safety_volumes[ i ]; - return 1; - } - } - } - player.last_safety_volume = undefined; - return 0; -} - -player_entered_safety_light( player ) //checked partially changed to match cerberus output see info.md No. 2 -{ - safety = getstructarray( "screecher_escape", "targetname" ); - if ( !isDefined( safety ) ) - { - return 0; - } - player.green_light = undefined; - for ( i = 0; i < safety.size; i++ ) - { - if ( !is_true( safety[ i ].power_on ) ) - { - } - else - { - if ( !isDefined( safety[ i ].radius ) ) - { - safety[ i ].radius = 256; - } - plyr_dist = distancesquared( player.origin, safety[ i ].origin ); - if ( plyr_dist < ( safety[ i ].radius * safety[ i ].radius ) ) - { - player.green_light = safety[ i ]; - return 1; - } - } - } - return 0; -} - -zombie_transit_player_intersection_tracker_override( other_player ) //checked changed at own discretion -{ - if ( is_true( self.isonbus ) ) - { - return 1; - } - if ( is_true( other_player.isonbus ) ) - { - return 1; - } - return 0; -} - -precache_team_characters() //checked matches cerberus output -{ - precachemodel( "c_zom_player_cdc_fb" ); - precachemodel( "c_zom_hazmat_viewhands" ); - precachemodel( "c_zom_player_cia_fb" ); - precachemodel( "c_zom_suit_viewhands" ); -} - -precache_personality_characters() //checked matches cerberus output -{ - character/c_transit_player_farmgirl::precache(); - character/c_transit_player_oldman::precache(); - character/c_transit_player_engineer::precache(); - character/c_transit_player_reporter::precache(); - precachemodel( "c_zom_farmgirl_viewhands" ); - precachemodel( "c_zom_oldman_viewhands" ); - precachemodel( "c_zom_engineer_viewhands" ); - precachemodel( "c_zom_reporter_viewhands" ); -} - -precache_survival_barricade_assets() //checked changed to match cerberus output -{ - survival_barricades = getstructarray( "game_mode_object" ); - for ( i = 0; i < survival_barricades.size; i++ ) - { - if ( isDefined( survival_barricades[ i ].script_string ) && survival_barricades[ i ].script_string == "survival" ) - { - if ( isDefined( survival_barricades[ i ].script_parameters ) ) - { - precachemodel( survival_barricades[ i ].script_parameters ); - } - } - } -} - -initcharacterstartindex() //checked matches cerberus output -{ - level.characterstartindex = 0; - /* -/# - forcecharacter = getDvarInt( "zombie_transit_character_force" ); - if ( forcecharacter != 0 ) - { - level.characterstartindex = forcecharacter - 1; -#/ - } - */ -} - -precacheextrazombies() //checked matches cerberus output -{ -} - -giveextrazombies() //checked matches cerberus output -{ -} - -give_team_characters() //checked matches cerberus output -{ - if ( isDefined( level.hotjoin_player_setup ) && [[ level.hotjoin_player_setup ]]( "c_zom_suit_viewhands" ) ) - { - return; - } - self detachall(); - self set_player_is_female( 0 ); - if ( isDefined( level.should_use_cia ) ) - { - if ( level.should_use_cia ) - { - self setmodel( "c_zom_player_cia_fb" ); - self setviewmodel( "c_zom_suit_viewhands" ); - self.characterindex = 0; - } - else - { - self setmodel( "c_zom_player_cdc_fb" ); - self setviewmodel( "c_zom_hazmat_viewhands" ); - self.characterindex = 1; - } - } - else if ( !isDefined( self.characterindex ) ) - { - self.characterindex = 1; - if ( self.team == "axis" ) - { - self.characterindex = 0; - } - } - switch( self.characterindex ) - { - case 0: - case 2: - self setmodel( "c_zom_player_cia_fb" ); - self.voice = "american"; - self.skeleton = "base"; - self setviewmodel( "c_zom_suit_viewhands" ); - self.characterindex = 0; - break; - case 1: - case 3: - self setmodel( "c_zom_player_cdc_fb" ); - self.voice = "american"; - self.skeleton = "base"; - self setviewmodel( "c_zom_hazmat_viewhands" ); - self.characterindex = 1; - break; - } - self setmovespeedscale( 1 ); - self setsprintduration( 4 ); - self setsprintcooldown( 0 ); - self set_player_tombstone_index(); -} - -give_personality_characters() //checked matches cerberus output -{ - if ( isDefined( level.hotjoin_player_setup ) && [[ level.hotjoin_player_setup ]]( "c_zom_farmgirl_viewhands" ) ) - { - return; - } - self detachall(); - if ( !isDefined( self.characterindex ) ) - { - self.characterindex = assign_lowest_unused_character_index(); - } - self.favorite_wall_weapons_list = []; - self.talks_in_danger = 0; - /* -/# - if ( getDvar( #"40772CF1" ) != "" ) - { - self.characterindex = getDvarInt( #"40772CF1" ); -#/ - } - */ - switch( self.characterindex ) - { - case 2: - self character/c_transit_player_farmgirl::main(); - self setviewmodel( "c_zom_farmgirl_viewhands" ); - level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); - self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "rottweil72_zm"; - self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "870mcs_zm"; - self set_player_is_female( 1 ); - break; - case 0: - self character/c_transit_player_oldman::main(); - self setviewmodel( "c_zom_oldman_viewhands" ); - level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); - self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "frag_grenade_zm"; - self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "claymore_zm"; - self set_player_is_female( 0 ); - break; - case 3: - self character/c_transit_player_engineer::main(); - self setviewmodel( "c_zom_engineer_viewhands" ); - level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); - self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "m14_zm"; - self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "m16_zm"; - self set_player_is_female( 0 ); - break; - case 1: - self character/c_transit_player_reporter::main(); - self setviewmodel( "c_zom_reporter_viewhands" ); - level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); - self.talks_in_danger = 1; - level.rich_sq_player = self; - self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "beretta93r_zm"; - self set_player_is_female( 0 ); - break; - } - self setmovespeedscale( 1 ); - self setsprintduration( 4 ); - self setsprintcooldown( 0 ); - self set_player_tombstone_index(); - self thread set_exert_id(); -} - -set_exert_id() //checked matches cerberus output -{ - self endon( "disconnect" ); - wait_network_frame(); - wait_network_frame(); - self maps/mp/zombies/_zm_audio::setexertvoice( self.characterindex + 1 ); -} - -setup_personality_character_exerts() //checked matches cerberus output -{ - level.exert_sounds[ 1 ][ "burp" ][ 0 ] = "vox_plr_0_exert_burp_0"; - level.exert_sounds[ 1 ][ "burp" ][ 1 ] = "vox_plr_0_exert_burp_1"; - level.exert_sounds[ 1 ][ "burp" ][ 2 ] = "vox_plr_0_exert_burp_2"; - level.exert_sounds[ 1 ][ "burp" ][ 3 ] = "vox_plr_0_exert_burp_3"; - level.exert_sounds[ 1 ][ "burp" ][ 4 ] = "vox_plr_0_exert_burp_4"; - level.exert_sounds[ 1 ][ "burp" ][ 5 ] = "vox_plr_0_exert_burp_5"; - level.exert_sounds[ 1 ][ "burp" ][ 6 ] = "vox_plr_0_exert_burp_6"; - level.exert_sounds[ 2 ][ "burp" ][ 0 ] = "vox_plr_1_exert_burp_0"; - level.exert_sounds[ 2 ][ "burp" ][ 1 ] = "vox_plr_1_exert_burp_1"; - level.exert_sounds[ 2 ][ "burp" ][ 2 ] = "vox_plr_1_exert_burp_2"; - level.exert_sounds[ 2 ][ "burp" ][ 3 ] = "vox_plr_1_exert_burp_3"; - level.exert_sounds[ 3 ][ "burp" ][ 0 ] = "vox_plr_2_exert_burp_0"; - level.exert_sounds[ 3 ][ "burp" ][ 1 ] = "vox_plr_2_exert_burp_1"; - level.exert_sounds[ 3 ][ "burp" ][ 2 ] = "vox_plr_2_exert_burp_2"; - level.exert_sounds[ 3 ][ "burp" ][ 3 ] = "vox_plr_2_exert_burp_3"; - level.exert_sounds[ 3 ][ "burp" ][ 4 ] = "vox_plr_2_exert_burp_4"; - level.exert_sounds[ 3 ][ "burp" ][ 5 ] = "vox_plr_2_exert_burp_5"; - level.exert_sounds[ 3 ][ "burp" ][ 6 ] = "vox_plr_2_exert_burp_6"; - level.exert_sounds[ 4 ][ "burp" ][ 0 ] = "vox_plr_3_exert_burp_0"; - level.exert_sounds[ 4 ][ "burp" ][ 1 ] = "vox_plr_3_exert_burp_1"; - level.exert_sounds[ 4 ][ "burp" ][ 2 ] = "vox_plr_3_exert_burp_2"; - level.exert_sounds[ 4 ][ "burp" ][ 3 ] = "vox_plr_3_exert_burp_3"; - level.exert_sounds[ 4 ][ "burp" ][ 4 ] = "vox_plr_3_exert_burp_4"; - level.exert_sounds[ 4 ][ "burp" ][ 5 ] = "vox_plr_3_exert_burp_5"; - level.exert_sounds[ 4 ][ "burp" ][ 6 ] = "vox_plr_3_exert_burp_6"; - level.exert_sounds[ 1 ][ "hitmed" ][ 0 ] = "vox_plr_0_exert_pain_medium_0"; - level.exert_sounds[ 1 ][ "hitmed" ][ 1 ] = "vox_plr_0_exert_pain_medium_1"; - level.exert_sounds[ 1 ][ "hitmed" ][ 2 ] = "vox_plr_0_exert_pain_medium_2"; - level.exert_sounds[ 1 ][ "hitmed" ][ 3 ] = "vox_plr_0_exert_pain_medium_3"; - level.exert_sounds[ 2 ][ "hitmed" ][ 0 ] = "vox_plr_1_exert_pain_medium_0"; - level.exert_sounds[ 2 ][ "hitmed" ][ 1 ] = "vox_plr_1_exert_pain_medium_1"; - level.exert_sounds[ 2 ][ "hitmed" ][ 2 ] = "vox_plr_1_exert_pain_medium_2"; - level.exert_sounds[ 2 ][ "hitmed" ][ 3 ] = "vox_plr_1_exert_pain_medium_3"; - level.exert_sounds[ 3 ][ "hitmed" ][ 0 ] = "vox_plr_2_exert_pain_medium_0"; - level.exert_sounds[ 3 ][ "hitmed" ][ 1 ] = "vox_plr_2_exert_pain_medium_1"; - level.exert_sounds[ 3 ][ "hitmed" ][ 2 ] = "vox_plr_2_exert_pain_medium_2"; - level.exert_sounds[ 3 ][ "hitmed" ][ 3 ] = "vox_plr_2_exert_pain_medium_3"; - level.exert_sounds[ 4 ][ "hitmed" ][ 0 ] = "vox_plr_3_exert_pain_medium_0"; - level.exert_sounds[ 4 ][ "hitmed" ][ 1 ] = "vox_plr_3_exert_pain_medium_1"; - level.exert_sounds[ 4 ][ "hitmed" ][ 2 ] = "vox_plr_3_exert_pain_medium_2"; - level.exert_sounds[ 4 ][ "hitmed" ][ 3 ] = "vox_plr_3_exert_pain_medium_3"; - level.exert_sounds[ 1 ][ "hitlrg" ][ 0 ] = "vox_plr_0_exert_pain_high_0"; - level.exert_sounds[ 1 ][ "hitlrg" ][ 1 ] = "vox_plr_0_exert_pain_high_1"; - level.exert_sounds[ 1 ][ "hitlrg" ][ 2 ] = "vox_plr_0_exert_pain_high_2"; - level.exert_sounds[ 1 ][ "hitlrg" ][ 3 ] = "vox_plr_0_exert_pain_high_3"; - level.exert_sounds[ 2 ][ "hitlrg" ][ 0 ] = "vox_plr_1_exert_pain_high_0"; - level.exert_sounds[ 2 ][ "hitlrg" ][ 1 ] = "vox_plr_1_exert_pain_high_1"; - level.exert_sounds[ 2 ][ "hitlrg" ][ 2 ] = "vox_plr_1_exert_pain_high_2"; - level.exert_sounds[ 2 ][ "hitlrg" ][ 3 ] = "vox_plr_1_exert_pain_high_3"; - level.exert_sounds[ 3 ][ "hitlrg" ][ 0 ] = "vox_plr_2_exert_pain_high_0"; - level.exert_sounds[ 3 ][ "hitlrg" ][ 1 ] = "vox_plr_2_exert_pain_high_1"; - level.exert_sounds[ 3 ][ "hitlrg" ][ 2 ] = "vox_plr_2_exert_pain_high_2"; - level.exert_sounds[ 3 ][ "hitlrg" ][ 3 ] = "vox_plr_2_exert_pain_high_3"; - level.exert_sounds[ 4 ][ "hitlrg" ][ 0 ] = "vox_plr_3_exert_pain_high_0"; - level.exert_sounds[ 4 ][ "hitlrg" ][ 1 ] = "vox_plr_3_exert_pain_high_1"; - level.exert_sounds[ 4 ][ "hitlrg" ][ 2 ] = "vox_plr_3_exert_pain_high_2"; - level.exert_sounds[ 4 ][ "hitlrg" ][ 3 ] = "vox_plr_3_exert_pain_high_3"; -} - -givecustomloadout( takeallweapons, alreadyspawned ) //checked matches cerberus output -{ - self giveweapon( "knife_zm" ); - self give_start_weapon( 1 ); -} - -transit_intermission() //checked changed to match cerberus output -{ - self closemenu(); - self closeingamemenu(); - level endon( "stop_intermission" ); - self endon( "disconnect" ); - self endon( "death" ); - self notify( "_zombie_game_over" ); - self.score = self.score_total; - self.sessionstate = "intermission"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - maps/mp/_visionset_mgr::vsmgr_deactivate( "overlay", "zm_transit_burn", self ); - self stopshellshock(); - self.game_over_bg = newclienthudelem( self ); - self.game_over_bg.x = 0; - self.game_over_bg.y = 0; - self.game_over_bg.horzalign = "fullscreen"; - self.game_over_bg.vertalign = "fullscreen"; - self.game_over_bg.foreground = 1; - self.game_over_bg.sort = 1; - self.game_over_bg setshader( "black", 640, 480 ); - self.game_over_bg.alpha = 1; - if ( !isDefined( level.the_bus ) ) - { - self.game_over_bg fadeovertime( 1 ); - self.game_over_bg.alpha = 0; - wait 5; - self.game_over_bg thread maps/mp/zombies/_zm::fade_up_over_time( 1 ); - } - else - { - zonestocheck = []; - zonestocheck[ zonestocheck.size ] = "zone_amb_bridge"; - zonestocheck[ zonestocheck.size ] = "zone_trans_11"; - zonestocheck[ zonestocheck.size ] = "zone_town_west"; - zonestocheck[ zonestocheck.size ] = "zone_town_west2"; - zonestocheck[ zonestocheck.size ] = "zone_tow"; - near_bridge = 0; - foreach ( zone in zonestocheck ) - { - if ( level.the_bus maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_amb_bridge" ) ) - { - near_bridge = 1; - } - } - if ( near_bridge ) - { - trig = getent( "bridge_trig", "targetname" ); - trig notify( "trigger" ); - } - org = spawn( "script_model", level.the_bus gettagorigin( "tag_camera" ) ); - org setmodel( "tag_origin" ); - org.angles = level.the_bus gettagangles( "tag_camera" ); - org linkto( level.the_bus ); - self setorigin( org.origin ); - self.angles = org.angles; - if ( !flag( "OnPriDoorYar" ) || !flag( "OnPriDoorYar2" ) ) - { - flag_set( "OnPriDoorYar" ); - wait_network_frame(); - } - if ( !level.the_bus.ismoving ) - { - level.the_bus.gracetimeatdestination = 0.1; - level.the_bus notify( "depart_early" ); - } - players = get_players(); - j = 0; - while ( j < players.size ) - { - player = players[ j ]; - player camerasetposition( org ); - player camerasetlookat(); - player cameraactivate( 1 ); - j++; - } - self.game_over_bg fadeovertime( 1 ); - self.game_over_bg.alpha = 0; - wait 12; - self.game_over_bg fadeovertime( 1 ); - self.game_over_bg.alpha = 1; - wait 1; - } -} - -transit_standard_intermission() //checked changed to match cerberus output -{ - self closemenu(); - self closeingamemenu(); - level endon( "stop_intermission" ); - self endon( "disconnect" ); - self endon( "death" ); - self notify( "_zombie_game_over" ); - self.score = self.score_total; - self.sessionstate = "intermission"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - maps/mp/_visionset_mgr::vsmgr_deactivate( "overlay", "zm_transit_burn", self ); - self stopshellshock(); - points = getstructarray( "intermission", "targetname" ); - point = undefined; - if ( !isDefined( points ) || points.size == 0 ) - { - points = getentarray( "info_intermission", "classname" ); - if ( points.size < 1 ) - { - /* -/# - println( "NO info_intermission POINTS IN MAP" ); -#/ - */ - return; - } - } - self.game_over_bg = newclienthudelem( self ); - self.game_over_bg.x = 0; - self.game_over_bg.y = 0; - self.game_over_bg.horzalign = "fullscreen"; - self.game_over_bg.vertalign = "fullscreen"; - self.game_over_bg.foreground = 1; - self.game_over_bg.sort = 1; - self.game_over_bg setshader( "black", 640, 480 ); - self.game_over_bg.alpha = 1; - org = undefined; - while ( 1 ) - { - foreach ( struct in points ) - { - if ( isDefined( struct.script_string ) && struct.script_string == level.scr_zm_map_start_location ) - { - point = struct; - } - } - if ( !isDefined( point ) ) - { - point = points[ 0 ]; - } - if ( !isDefined( org ) ) - { - self spawn( point.origin, point.angles ); - } - if ( isDefined( point.target ) ) - { - if ( !isDefined( org ) ) - { - org = spawn( "script_model", self.origin + vectorScale( ( 0, -1, 0 ), 60 ) ); - org setmodel( "tag_origin" ); - } - org.origin = point.origin; - org.angles = point.angles; - for ( j = 0; j < get_players().size; j++ ) - { - player = get_players()[ j ]; - player camerasetposition( org ); - player camerasetlookat(); - player cameraactivate( 1 ); - } - speed = 20; - if ( isDefined( point.speed ) ) - { - speed = point.speed; - } - target_point = getstruct( point.target, "targetname" ); - dist = distance( point.origin, target_point.origin ); - time = dist / speed; - q_time = time * 0.25; - if ( q_time > 1 ) - { - q_time = 1; - } - self.game_over_bg fadeovertime( q_time ); - self.game_over_bg.alpha = 0; - org moveto( target_point.origin, time, q_time, q_time ); - org rotateto( target_point.angles, time, q_time, q_time ); - wait ( time - q_time ); - self.game_over_bg fadeovertime( q_time ); - self.game_over_bg.alpha = 1; - wait q_time; - continue; - } - else - { - self.game_over_bg fadeovertime( 1 ); - self.game_over_bg.alpha = 0; - wait 5; - self.game_over_bg thread fade_up_over_time( 1 ); - } - } -} - -meetupwithothercharacters() //checked partially changed to match beta dump see info.md No. 2 -{ - self endon( "disconnect" ); - isalone = 1; - flag_wait( "begin_spawning" ); - while ( isalone ) - { - players = get_players(); - if ( flag( "solo_game" ) ) - { - break; - } - foreach ( player in players ) - { - if ( player == self ) - { - } - else - { - if ( distancesquared( self.origin, player.origin ) < 1048576 ) - { - /* -/# - println( "^2Transit Debug: " + self.name + " met up with " + player.name ); -#/ - */ - isalone = 0; - } - } - } - wait 1; - } - self.characterrespawnpoint = undefined; -} - -transit_respawn_override( player ) //checked matches cerberus output -{ - if ( isDefined( player.characterrespawnpoint ) ) - { - /* -/# - println( "^2Transit Debug: Using character respawn point for " + player.name ); -#/ - */ - return player.characterrespawnpoint.origin; - } - return undefined; -} - -disable_triggers() //checked changed to match cerberus output -{ - trig = getentarray( "trigger_Keys", "targetname" ); - for ( i = 0; i < trig.size; i++ ) - { - trig[ i ] trigger_off(); - } -} - -transit_zone_init() //checked changed to match cerberus output -{ - flag_init( "always_on" ); - flag_init( "init_classic_adjacencies" ); - flag_set( "always_on" ); - if ( is_classic() ) - { - flag_set( "init_classic_adjacencies" ); - add_adjacent_zone( "zone_trans_2", "zone_trans_2b", "init_classic_adjacencies" ); - add_adjacent_zone( "zone_station_ext", "zone_trans_2b", "init_classic_adjacencies", 1 ); - add_adjacent_zone( "zone_town_west2", "zone_town_west", "init_classic_adjacencies" ); - add_adjacent_zone( "zone_town_south", "zone_town_church", "init_classic_adjacencies" ); - add_adjacent_zone( "zone_trans_pow_ext1", "zone_trans_7", "init_classic_adjacencies" ); - add_adjacent_zone( "zone_far", "zone_far_ext", "OnFarm_enter" ); - } - else - { - playable_area = getentarray( "player_volume", "script_noteworthy" ); - foreach ( area in playable_area ) - { - add_adjacent_zone( "zone_station_ext", "zone_trans_2b", "always_on" ); - if ( isDefined( area.script_parameters ) && area.script_parameters == "classic_only" ) - { - area delete(); - } - } - } - add_adjacent_zone( "zone_pri2", "zone_station_ext", "OnPriDoorYar", 1 ); - add_adjacent_zone( "zone_pri2", "zone_pri", "OnPriDoorYar3", 1 ); - if ( getDvar( "ui_zm_mapstartlocation" ) == "transit" ) - { - level thread disconnect_door_zones( "zone_pri2", "zone_station_ext", "OnPriDoorYar" ); - level thread disconnect_door_zones( "zone_pri2", "zone_pri", "OnPriDoorYar3" ); - } - add_adjacent_zone( "zone_station_ext", "zone_pri", "OnPriDoorYar2" ); - add_adjacent_zone( "zone_roadside_west", "zone_din", "OnGasDoorDin" ); - add_adjacent_zone( "zone_roadside_west", "zone_gas", "always_on" ); - add_adjacent_zone( "zone_roadside_east", "zone_gas", "always_on" ); - add_adjacent_zone( "zone_roadside_east", "zone_gar", "OnGasDoorGar" ); - add_adjacent_zone( "zone_trans_diner", "zone_roadside_west", "always_on", 1 ); - add_adjacent_zone( "zone_trans_diner", "zone_gas", "always_on", 1 ); - add_adjacent_zone( "zone_trans_diner2", "zone_roadside_east", "always_on", 1 ); - add_adjacent_zone( "zone_gas", "zone_din", "OnGasDoorDin" ); - add_adjacent_zone( "zone_gas", "zone_gar", "OnGasDoorGar" ); - add_adjacent_zone( "zone_diner_roof", "zone_din", "OnGasDoorDin", 1 ); - add_adjacent_zone( "zone_amb_cornfield", "zone_cornfield_prototype", "always_on" ); - add_adjacent_zone( "zone_tow", "zone_bar", "always_on", 1 ); - add_adjacent_zone( "zone_bar", "zone_tow", "OnTowDoorBar", 1 ); - add_adjacent_zone( "zone_tow", "zone_ban", "OnTowDoorBan" ); - add_adjacent_zone( "zone_ban", "zone_ban_vault", "OnTowBanVault" ); - add_adjacent_zone( "zone_tow", "zone_town_north", "always_on" ); - add_adjacent_zone( "zone_town_north", "zone_ban", "OnTowDoorBan" ); - add_adjacent_zone( "zone_tow", "zone_town_west", "always_on" ); - add_adjacent_zone( "zone_tow", "zone_town_south", "always_on" ); - add_adjacent_zone( "zone_town_south", "zone_town_barber", "always_on", 1 ); - add_adjacent_zone( "zone_tow", "zone_town_east", "always_on" ); - add_adjacent_zone( "zone_town_east", "zone_bar", "OnTowDoorBar" ); - add_adjacent_zone( "zone_tow", "zone_town_barber", "always_on", 1 ); - add_adjacent_zone( "zone_town_barber", "zone_tow", "OnTowDoorBarber", 1 ); - add_adjacent_zone( "zone_town_barber", "zone_town_west", "OnTowDoorBarber" ); - add_adjacent_zone( "zone_far_ext", "zone_brn", "OnFarm_enter" ); - add_adjacent_zone( "zone_far_ext", "zone_farm_house", "open_farmhouse" ); - add_adjacent_zone( "zone_prr", "zone_pow", "OnPowDoorRR", 1 ); - add_adjacent_zone( "zone_pcr", "zone_prr", "OnPowDoorRR" ); - add_adjacent_zone( "zone_pcr", "zone_pow_warehouse", "OnPowDoorWH" ); - add_adjacent_zone( "zone_pow", "zone_pow_warehouse", "OnPowDoorWH" ); - add_adjacent_zone( "zone_tbu", "zone_tow", "vault_opened", 1 ); -} - -include_powerups() //checked matches cerberus output -{ - gametype = getDvar( "ui_gametype" ); - include_powerup( "nuke" ); - include_powerup( "insta_kill" ); - include_powerup( "double_points" ); - include_powerup( "full_ammo" ); - include_powerup( "insta_kill_ug" ); - if ( gametype != "zgrief" ) - { - include_powerup( "carpenter" ); - } - if ( is_encounter() && gametype != "zgrief" ) - { - include_powerup( "minigun" ); - } - include_powerup( "teller_withdrawl" ); -} - -add_transit_powerups() //checked matches cerberus output -{ - maps/mp/zombies/_zm_powerups::add_zombie_powerup( "teller_withdrawl", "zombie_z_money_icon", &"ZOMBIE_TELLER_PICKUP_DEPOSIT", maps/mp/zombies/_zm_powerups::func_should_never_drop, 1, 0, 0 ); -} - -include_equipment_for_level() //checked matches cerberus output -{ - level.equipment_turret_needs_power = 1; - level.equipment_etrap_needs_power = 1; - include_equipment( "jetgun_zm" ); - include_equipment( "riotshield_zm" ); - include_equipment( "equip_turbine_zm" ); - include_equipment( "equip_turret_zm" ); - include_equipment( "equip_electrictrap_zm" ); - level.equipment_planted = ::equipment_planted; - level.equipment_safe_to_drop = ::equipment_safe_to_drop; - level.check_force_deploy_origin = ::use_safe_spawn_on_bus; - limit_equipment( "jetgun_zm", 1 ); - level.explode_overheated_jetgun = 1; - level.exploding_jetgun_fx = level._effect[ "lava_burning" ]; -} - -transit_bus_update_retrieve_trigger( player ) //checked matches cerberus output used is_true instead -{ - self endon( "death" ); - player endon( "zmb_lost_knife" ); - if ( isDefined( level.the_bus ) && is_true( player.isonbus ) ) - { - wait 2; - trigger = self.retrievabletrigger; - trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 ); - self linkto( level.the_bus ); - trigger linkto( self ); - } - else - { - self waittill( "stationary" ); - trigger = self.retrievabletrigger; - trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 ); - trigger linkto( self ); - } -} - -claymore_safe_to_plant() //checked matches cerberus output -{ - if ( self maps/mp/zm_transit_lava::object_touching_lava() ) - { - return 0; - } - if ( self.owner maps/mp/zm_transit_lava::object_touching_lava() ) - { - return 0; - } - return 1; -} - -claymore_planted( weapon ) //checked matches cerberus output -{ - weapon waittill( "stationary" ); - if ( !isDefined( weapon ) ) - { - return; - } - weaponbus = weapon maps/mp/zm_transit_bus::object_is_on_bus(); - if ( weaponbus ) - { - if ( isDefined( weapon ) ) - { - weapon setmovingplatformenabled( 1 ); - weapon.equipment_can_move = 1; - weapon.isonbus = 1; - weapon.move_parent = level.the_bus; - if ( isDefined( weapon.damagearea ) ) - { - weapon.damagearea setmovingplatformenabled( 1 ); - } - } - } -} - -fakelinkto( linkee ) //checked matches cerberus output -{ - self.backlinked = 1; - while ( isDefined( self ) && isDefined( linkee ) ) - { - self.origin = linkee.origin; - self.angles = linkee.angles; - wait 0.05; - } -} - -knife_planted( knife, trigger, parent ) //checked matches cerberus output -{ - if ( !isDefined( knife ) ) - { - return; - } - weaponbus = knife maps/mp/zm_transit_bus::object_is_on_bus(); - if ( weaponbus ) - { - trigger linkto( knife ); - trigger setmovingplatformenabled( 1 ); - trigger.isonbus = 1; - knife setmovingplatformenabled( 1 ); - knife.isonbus = 1; - } -} - -grenade_planted( grenade, model ) //checked matches cerberus output -{ - if ( !isDefined( grenade ) ) - { - return; - } - weaponbus = grenade maps/mp/zm_transit_bus::object_is_on_bus(); - if ( weaponbus ) - { - if ( isDefined( grenade ) ) - { - grenade setmovingplatformenabled( 1 ); - grenade.equipment_can_move = 1; - grenade.isonbus = 1; - grenade.move_parent = level.the_bus; - if ( isDefined( model ) ) - { - model setmovingplatformenabled( 1 ); - model linkto( level.the_bus ); - model.isonbus = 1; - grenade fakelinkto( model ); - } - } - } -} - -grenade_safe_to_throw( player, weapname ) //checked matches cerberus output -{ - return 1; -} - -grenade_safe_to_bounce( player, weapname ) //checked matches cerberus output -{ - if ( !is_offhand_weapon( weapname ) && !is_grenade_launcher( weapname ) ) - { - return 1; - } - if ( self maps/mp/zm_transit_lava::object_touching_lava() ) - { - return 0; - } - return 1; -} - -equipment_safe_to_drop( weapon ) //checked matches cerberus output used is_true instead -{ - if ( !isDefined( weapon.canmove ) ) - { - weapon.canmove = weapon maps/mp/zm_transit_bus::object_is_on_bus(); - } - if ( is_true( weapon.canmove ) ) - { - return 1; - } - if ( weapon maps/mp/zm_transit_lava::object_touching_lava() ) - { - return 0; - } - return 1; -} - -use_safe_spawn_on_bus( weapon, origin, angles ) //checked matches cerberus output used is_true instead -{ - if ( is_true( self.isonbus ) && level.the_bus.ismoving ) - { - weapon.canmove = 1; - return 1; - } - return 0; -} - -equipment_planted( weapon, equipname, groundfrom ) //checked matches cerberus output used is_true instead -{ - weaponbus = groundfrom maps/mp/zm_transit_bus::object_is_on_bus(); - if ( !weaponbus && weapon maps/mp/zm_transit_lava::object_touching_lava() ) - { - self maps/mp/zombies/_zm_equipment::equipment_take( equipname ); - wait 0.05; - self notify( equipname + "_taken" ); - return; - } - if ( isDefined( self ) && weaponbus ) - { - if ( isDefined( weapon ) ) - { - if ( !is_true( weapon.canmove ) ) - { - weapon.canmove = 1; - reregister_unitrigger_as_dynamic( weapon.stub ); - } - weapon linkto( level.the_bus ); - weapon setmovingplatformenabled( 1 ); - if ( isDefined( weapon.stub ) ) - { - weapon.stub.link_parent = level.the_bus; - weapon.stub.origin_parent = weapon; - } - weapon.equipment_can_move = 1; - weapon.isonbus = 1; - weapon.move_parent = level.the_bus; - } - } -} - -offhand_weapon_overrride() //checked matches cerberus output -{ - register_lethal_grenade_for_level( "frag_grenade_zm" ); - level.zombie_lethal_grenade_player_init = "frag_grenade_zm"; - register_lethal_grenade_for_level( "sticky_grenade_zm" ); - register_tactical_grenade_for_level( "cymbal_monkey_zm" ); - register_tactical_grenade_for_level( "emp_grenade_zm" ); - level.zombie_tactical_grenade_player_init = undefined; - level.grenade_safe_to_throw = ::grenade_safe_to_throw; - level.grenade_safe_to_bounce = ::grenade_safe_to_bounce; - level.grenade_planted = ::grenade_planted; - level.knife_planted = ::knife_planted; - register_placeable_mine_for_level( "claymore_zm" ); - level.zombie_placeable_mine_player_init = undefined; - level.claymore_safe_to_plant = ::claymore_safe_to_plant; - level.claymore_planted = ::claymore_planted; - register_melee_weapon_for_level( "knife_zm" ); - register_melee_weapon_for_level( "bowie_knife_zm" ); - register_melee_weapon_for_level( "tazer_knuckles_zm" ); - level.zombie_melee_weapon_player_init = "knife_zm"; - register_equipment_for_level( "jetgun_zm" ); - register_equipment_for_level( "riotshield_zm" ); - register_equipment_for_level( "equip_turbine_zm" ); - register_equipment_for_level( "equip_turret_zm" ); - register_equipment_for_level( "equip_electrictrap_zm" ); - level.zombie_equipment_player_init = undefined; -} - -include_weapons() //checked matches cerberus output used is_true instead -{ - gametype = getDvar( "ui_gametype" ); - include_weapon( "knife_zm", 0 ); - include_weapon( "frag_grenade_zm", 0 ); - include_weapon( "claymore_zm", 0 ); - include_weapon( "sticky_grenade_zm", 0 ); - include_weapon( "m1911_zm", 0 ); - include_weapon( "m1911_upgraded_zm", 0 ); - include_weapon( "python_zm" ); - include_weapon( "python_upgraded_zm", 0 ); - include_weapon( "judge_zm" ); - include_weapon( "judge_upgraded_zm", 0 ); - include_weapon( "kard_zm" ); - include_weapon( "kard_upgraded_zm", 0 ); - include_weapon( "fiveseven_zm" ); - include_weapon( "fiveseven_upgraded_zm", 0 ); - include_weapon( "beretta93r_zm", 0 ); - include_weapon( "beretta93r_upgraded_zm", 0 ); - include_weapon( "fivesevendw_zm" ); - include_weapon( "fivesevendw_upgraded_zm", 0 ); - include_weapon( "ak74u_zm", 0 ); - include_weapon( "ak74u_upgraded_zm", 0 ); - include_weapon( "mp5k_zm", 0 ); - include_weapon( "mp5k_upgraded_zm", 0 ); - include_weapon( "qcw05_zm" ); - include_weapon( "qcw05_upgraded_zm", 0 ); - include_weapon( "870mcs_zm", 0 ); - include_weapon( "870mcs_upgraded_zm", 0 ); - include_weapon( "rottweil72_zm", 0 ); - include_weapon( "rottweil72_upgraded_zm", 0 ); - include_weapon( "saiga12_zm" ); - include_weapon( "saiga12_upgraded_zm", 0 ); - include_weapon( "srm1216_zm" ); - include_weapon( "srm1216_upgraded_zm", 0 ); - include_weapon( "m14_zm", 0 ); - include_weapon( "m14_upgraded_zm", 0 ); - include_weapon( "saritch_zm" ); - include_weapon( "saritch_upgraded_zm", 0 ); - include_weapon( "m16_zm", 0 ); - include_weapon( "m16_gl_upgraded_zm", 0 ); - include_weapon( "xm8_zm" ); - include_weapon( "xm8_upgraded_zm", 0 ); - include_weapon( "type95_zm" ); - include_weapon( "type95_upgraded_zm", 0 ); - include_weapon( "tar21_zm" ); - include_weapon( "tar21_upgraded_zm", 0 ); - include_weapon( "galil_zm" ); - include_weapon( "galil_upgraded_zm", 0 ); - include_weapon( "fnfal_zm" ); - include_weapon( "fnfal_upgraded_zm", 0 ); - include_weapon( "dsr50_zm" ); - include_weapon( "dsr50_upgraded_zm", 0 ); - include_weapon( "barretm82_zm" ); - include_weapon( "barretm82_upgraded_zm", 0 ); - include_weapon( "rpd_zm" ); - include_weapon( "rpd_upgraded_zm", 0 ); - include_weapon( "hamr_zm" ); - include_weapon( "hamr_upgraded_zm", 0 ); - include_weapon( "usrpg_zm" ); - include_weapon( "usrpg_upgraded_zm", 0 ); - include_weapon( "m32_zm" ); - include_weapon( "m32_upgraded_zm", 0 ); - include_weapon( "cymbal_monkey_zm" ); - include_weapon( "emp_grenade_zm", 1, undefined, ::less_than_normal ); - if ( is_classic() ) - { - include_weapon( "screecher_arms_zm", 0 ); - } - if ( gametype != "zgrief" ) - { - include_weapon( "ray_gun_zm" ); - include_weapon( "ray_gun_upgraded_zm", 0 ); - include_weapon( "jetgun_zm", 0, undefined, ::less_than_normal ); - include_weapon( "riotshield_zm", 0 ); - include_weapon( "tazer_knuckles_zm", 0 ); - include_weapon( "knife_ballistic_no_melee_zm", 0 ); - include_weapon( "knife_ballistic_no_melee_upgraded_zm", 0 ); - include_weapon( "knife_ballistic_zm" ); - include_weapon( "knife_ballistic_upgraded_zm", 0 ); - include_weapon( "knife_ballistic_bowie_zm", 0 ); - include_weapon( "knife_ballistic_bowie_upgraded_zm", 0 ); - level._uses_retrievable_ballisitic_knives = 1; - add_limited_weapon( "knife_ballistic_zm", 1 ); - add_limited_weapon( "jetgun_zm", 1 ); - add_limited_weapon( "ray_gun_zm", 4 ); - add_limited_weapon( "ray_gun_upgraded_zm", 4 ); - add_limited_weapon( "knife_ballistic_upgraded_zm", 0 ); - add_limited_weapon( "knife_ballistic_no_melee_zm", 0 ); - add_limited_weapon( "knife_ballistic_no_melee_upgraded_zm", 0 ); - add_limited_weapon( "knife_ballistic_bowie_zm", 0 ); - add_limited_weapon( "knife_ballistic_bowie_upgraded_zm", 0 ); - if ( is_true( level.raygun2_included ) ) - { - include_weapon( "raygun_mark2_zm" ); - include_weapon( "raygun_mark2_upgraded_zm", 0 ); - add_weapon_to_content( "raygun_mark2_zm", "dlc3" ); - add_limited_weapon( "raygun_mark2_zm", 1 ); - add_limited_weapon( "raygun_mark2_upgraded_zm", 1 ); - } - } - add_limited_weapon( "m1911_zm", 0 ); - add_weapon_locker_mapping( "lsat_zm", "hamr_zm" ); - add_weapon_locker_mapping( "lsat_upgraded_zm", "hamr_upgraded_zm" ); - add_weapon_locker_mapping( "svu_zm", "fnfal_zm" ); - add_weapon_locker_mapping( "svu_upgraded_zm", "fnfal_upgraded_zm" ); - add_weapon_locker_mapping( "pdw57_zm", "qcw05_zm" ); - add_weapon_locker_mapping( "pdw57_upgraded_zm", "qcw05_upgraded_zm" ); - add_weapon_locker_mapping( "an94_zm", "galil_zm" ); - add_weapon_locker_mapping( "an94_upgraded_zm", "galil_upgraded_zm" ); - add_weapon_locker_mapping( "rnma_zm", "python_zm" ); - add_weapon_locker_mapping( "rnma_upgraded_zm", "python_upgraded_zm" ); -} - -less_than_normal() //checked matches cerberus output -{ - return 0.5; -} - -custom_add_weapons() //checked matches cerberus output used is_true instead -{ - add_zombie_weapon( "m1911_zm", "m1911_upgraded_zm", &"ZOMBIE_WEAPON_M1911", 50, "", "", undefined ); - add_zombie_weapon( "python_zm", "python_upgraded_zm", &"ZOMBIE_WEAPON_PYTHON", 50, "wpck_python", "", undefined, 1 ); - add_zombie_weapon( "judge_zm", "judge_upgraded_zm", &"ZOMBIE_WEAPON_JUDGE", 50, "wpck_judge", "", undefined, 1 ); - add_zombie_weapon( "kard_zm", "kard_upgraded_zm", &"ZOMBIE_WEAPON_KARD", 50, "wpck_kap", "", undefined, 1 ); - add_zombie_weapon( "fiveseven_zm", "fiveseven_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVEN", 50, "wpck_57", "", undefined, 1 ); - add_zombie_weapon( "beretta93r_zm", "beretta93r_upgraded_zm", &"ZOMBIE_WEAPON_BERETTA93r", 1000, "", "", undefined ); - add_zombie_weapon( "fivesevendw_zm", "fivesevendw_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVENDW", 50, "wpck_duel57", "", undefined, 1 ); - add_zombie_weapon( "ak74u_zm", "ak74u_upgraded_zm", &"ZOMBIE_WEAPON_AK74U", 1200, "smg", "", undefined ); - add_zombie_weapon( "mp5k_zm", "mp5k_upgraded_zm", &"ZOMBIE_WEAPON_MP5K", 1000, "smg", "", undefined ); - add_zombie_weapon( "qcw05_zm", "qcw05_upgraded_zm", &"ZOMBIE_WEAPON_QCW05", 50, "wpck_chicom", "", undefined, 1 ); - add_zombie_weapon( "870mcs_zm", "870mcs_upgraded_zm", &"ZOMBIE_WEAPON_870MCS", 1500, "shotgun", "", undefined ); - add_zombie_weapon( "rottweil72_zm", "rottweil72_upgraded_zm", &"ZOMBIE_WEAPON_ROTTWEIL72", 500, "shotgun", "", undefined ); - add_zombie_weapon( "saiga12_zm", "saiga12_upgraded_zm", &"ZOMBIE_WEAPON_SAIGA12", 50, "wpck_saiga12", "", undefined, 1 ); - add_zombie_weapon( "srm1216_zm", "srm1216_upgraded_zm", &"ZOMBIE_WEAPON_SRM1216", 50, "wpck_m1216", "", undefined, 1 ); - add_zombie_weapon( "m14_zm", "m14_upgraded_zm", &"ZOMBIE_WEAPON_M14", 500, "rifle", "", undefined ); - add_zombie_weapon( "saritch_zm", "saritch_upgraded_zm", &"ZOMBIE_WEAPON_SARITCH", 50, "wpck_sidr", "", undefined, 1 ); - add_zombie_weapon( "m16_zm", "m16_gl_upgraded_zm", &"ZOMBIE_WEAPON_M16", 1200, "burstrifle", "", undefined ); - add_zombie_weapon( "xm8_zm", "xm8_upgraded_zm", &"ZOMBIE_WEAPON_XM8", 50, "wpck_m8a1", "", undefined, 1 ); - add_zombie_weapon( "type95_zm", "type95_upgraded_zm", &"ZOMBIE_WEAPON_TYPE95", 50, "wpck_type25", "", undefined, 1 ); - add_zombie_weapon( "tar21_zm", "tar21_upgraded_zm", &"ZOMBIE_WEAPON_TAR21", 50, "wpck_x95l", "", undefined, 1 ); - add_zombie_weapon( "galil_zm", "galil_upgraded_zm", &"ZOMBIE_WEAPON_GALIL", 50, "wpck_galil", "", undefined, 1 ); - add_zombie_weapon( "fnfal_zm", "fnfal_upgraded_zm", &"ZOMBIE_WEAPON_FNFAL", 50, "wpck_fal", "", undefined, 1 ); - add_zombie_weapon( "dsr50_zm", "dsr50_upgraded_zm", &"ZOMBIE_WEAPON_DR50", 50, "wpck_dsr50", "", undefined, 1 ); - add_zombie_weapon( "barretm82_zm", "barretm82_upgraded_zm", &"ZOMBIE_WEAPON_BARRETM82", 50, "sniper", "", undefined ); - add_zombie_weapon( "rpd_zm", "rpd_upgraded_zm", &"ZOMBIE_WEAPON_RPD", 50, "wpck_rpd", "", undefined, 1 ); - add_zombie_weapon( "hamr_zm", "hamr_upgraded_zm", &"ZOMBIE_WEAPON_HAMR", 50, "wpck_hamr", "", undefined, 1 ); - add_zombie_weapon( "frag_grenade_zm", undefined, &"ZOMBIE_WEAPON_FRAG_GRENADE", 250, "grenade", "", 250 ); - add_zombie_weapon( "sticky_grenade_zm", undefined, &"ZOMBIE_WEAPON_STICKY_GRENADE", 250, "grenade", "", 250 ); - add_zombie_weapon( "claymore_zm", undefined, &"ZOMBIE_WEAPON_CLAYMORE", 1000, "grenade", "", undefined ); - add_zombie_weapon( "usrpg_zm", "usrpg_upgraded_zm", &"ZOMBIE_WEAPON_USRPG", 50, "wpck_rpg", "", undefined, 1 ); - add_zombie_weapon( "m32_zm", "m32_upgraded_zm", &"ZOMBIE_WEAPON_M32", 50, "wpck_m32", "", undefined, 1 ); - add_zombie_weapon( "cymbal_monkey_zm", undefined, &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 ); - add_zombie_weapon( "emp_grenade_zm", undefined, &"ZOMBIE_WEAPON_EMP_GRENADE", 2000, "wpck_emp", "", undefined, 1 ); - add_zombie_weapon( "ray_gun_zm", "ray_gun_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN", 10000, "wpck_ray", "", undefined, 1 ); - add_zombie_weapon( "knife_ballistic_zm", "knife_ballistic_upgraded_zm", &"ZOMBIE_WEAPON_KNIFE_BALLISTIC", 10, "sickle", "", undefined ); - add_zombie_weapon( "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", &"ZOMBIE_WEAPON_KNIFE_BALLISTIC", 10, "wpck_knife", "", undefined, 1 ); - add_zombie_weapon( "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", &"ZOMBIE_WEAPON_KNIFE_BALLISTIC", 10, "sickle", "", undefined ); - add_zombie_weapon( "riotshield_zm", undefined, &"ZOMBIE_WEAPON_RIOTSHIELD", 2000, "riot", "", undefined ); - add_zombie_weapon( "jetgun_zm", undefined, &"ZOMBIE_WEAPON_JETGUN", 2000, "jet", "", undefined ); - add_zombie_weapon( "tazer_knuckles_zm", undefined, &"ZOMBIE_WEAPON_TAZER_KNUCKLES", 100, "tazerknuckles", "", undefined ); - if ( is_true( level.raygun2_included ) ) - { - add_zombie_weapon( "raygun_mark2_zm", "raygun_mark2_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN_MARK2", 10000, "raygun_mark2", "", undefined ); - } -} - -include_game_modules() //checked matches cerberus output -{ -} - -initial_round_wait_func() //checked matches cerberus output -{ - flag_wait( "initial_blackscreen_passed" ); -} - -zombie_speed_up() //checked matches cerberus output used is_true instead -{ - if ( is_true( self.isonbus ) ) - { - return; - } - if ( self.zombie_move_speed != "sprint" ) - { - self set_zombie_run_cycle( "sprint" ); - } -} - -zombie_init_done() //checked matches cerberus output -{ - self.allowpain = 0; - self setphysparams( 15, 0, 48 ); -} - -setup_dvars() //dev call didn't check -{ - /* -/# - dvars = []; - dvars[ dvars.size ] = "zombie_bus_debug_path"; - dvars[ dvars.size ] = "zombie_bus_debug_speed"; - dvars[ dvars.size ] = "zombie_bus_debug_near"; - dvars[ dvars.size ] = "zombie_bus_debug_attach"; - dvars[ dvars.size ] = "zombie_bus_skip_objectives"; - dvars[ dvars.size ] = "zombie_bus_debug_spawners"; - i = 0; - while ( i < dvars.size ) - { - if ( getDvar( dvars[ i ] ) == "" ) - { - setdvar( dvars[ i ], "0" ); - } - i++; -#/ - } - */ -} - -setup_zombie_init() //checked matches cerberus output -{ - zombies = getentarray( "zombie_spawner", "script_noteworthy" ); - array_thread( zombies, ::add_spawn_function, ::custom_zombie_setup ); -} - -setup_players() //checked matches cerberus output -{ - self.isonbus = 0; - self.isonbusroof = 0; - self.isinhub = 1; - self.insafearea = 1; -} - -transit_player_fake_death( vdir ) //checked changed to match cerberus output used is_true instead -{ - level notify( "fake_death" ); - self notify( "fake_death" ); - if ( is_true( self.isonbus ) ) - { - level thread transit_player_fake_death_zombies(); - } - stance = self getstance(); - self.ignoreme = 1; - self enableinvulnerability(); - self takeallweapons(); - if ( is_true( self.insta_killed ) || self istouching( getent( "depot_lava_pit", "targetname" ) ) || is_true( self.isonbus ) && level.the_bus.ismoving ) - { - self maps/mp/zombies/_zm::player_fake_death(); - self allowprone( 1 ); - self allowcrouch( 0 ); - self allowstand( 0 ); - wait 0.25; - self freezecontrols( 1 ); - } - else - { - self freezecontrols( 1 ); - self thread fall_down( vdir, stance ); - wait 1; - } -} - -transit_player_fake_death_zombies() //checked partially changed to match cerberus output see info.md No. 2 used is_true instead -{ - zombies = getaiarray( level.zombie_team ); - foreach ( zombie in zombies ) - { - if ( !isalive( zombie ) ) - { - } - else if ( is_true( zombie.ignore_game_over_death ) ) - { - } - else if ( isDefined( zombie ) ) - { - zombie dodamage( zombie.health + 666, zombie.origin ); - } - else if ( ( index % 3 ) == 0 ) - { - wait_network_frame(); - } - } -} - -fall_down( vdir, stance ) //checked changed to match cerberus output used is_true instead -{ - self endon( "disconnect" ); - level endon( "game_module_ended" ); - self ghost(); - origin = self.origin; - xyspeed = ( 0, 0, 0 ); - angles = self getplayerangles(); - angles = ( angles[ 0 ], angles[ 1 ], angles[ 2 ] + randomfloatrange( -5, 5 ) ); - if ( isDefined( vdir ) && length( vdir ) > 0 ) - { - xyspeedmag = 40 + randomint( 12 ) + randomint( 12 ); - xyspeed = xyspeedmag * vectornormalize( ( vdir[ 0 ], vdir[ 1 ], 0 ) ); - } - linker = spawn( "script_origin", ( 0, 0, 0 ) ); - linker.origin = origin; - linker.angles = angles; - self._fall_down_anchor = linker; - self playerlinkto( linker ); - self playsoundtoplayer( "zmb_player_death_fall", self ); - falling = stance != "prone"; - if ( falling ) - { - origin = playerphysicstrace( origin, origin + xyspeed ); - eye = self get_eye(); - floor_height = ( 10 + origin[ 2 ] ) - eye[ 2 ]; - origin += ( 0, 0, floor_height ); - lerptime = 0.5; - linker moveto( origin, lerptime, lerptime ); - linker rotateto( angles, lerptime, lerptime ); - } - self freezecontrols( 1 ); - if ( falling ) - { - linker waittill( "movedone" ); - } - if ( is_true( self.isonbus ) ) - { - linker linkto( level.the_bus ); - } - self giveweapon( "death_throe_zm" ); - self switchtoweapon( "death_throe_zm" ); - if ( falling && !is_true( self.isonbus ) ) - { - bounce = randomint( 4 ) + 8; - origin = ( origin + ( 0, 0, bounce ) ) - ( xyspeed * 0.1 ); - lerptime = bounce / 50; - linker moveto( origin, lerptime, 0, lerptime ); - linker waittill( "movedone" ); - origin = ( origin + ( 0, 0, bounce * -1 ) ) + ( xyspeed * 0.1 ); - lerptime /= 2; - linker moveto( origin, lerptime, lerptime ); - linker waittill( "movedone" ); - linker moveto( origin, 5, 0 ); - } - wait 15; - linker delete(); -} - -transit_player_fake_death_cleanup() //checked matches cerberus output -{ - if ( isDefined( self._fall_down_anchor ) ) - { - self._fall_down_anchor delete(); - self._fall_down_anchor = undefined; - } -} - -custom_zombie_setup() //checked matches cerberus output -{ - if ( is_survival() && !is_standard() ) - { - self.nearbus = 0; - self.isonbus = 0; - self.isonbusroof = 0; - self.was_walking = 0; - self.candropsafekey = 1; - self.candropbuskey = 1; - self.custom_points_on_turret_damage = 0; - } -} - -bunkerdoorrotate( open, time ) //checked matches cerberus output -{ - if ( !isDefined( time ) ) - { - time = 0.2; - } - rotate = self.script_float; - if ( !open ) - { - rotate *= -1; - } - if ( isDefined( self.script_angles ) ) - { - self notsolid(); - self rotateto( self.script_angles, time, 0, 0 ); - self thread maps/mp/zombies/_zm_blockers::door_solid_thread(); - } -} - -zm_transit_emp_init() //checked matches cerberus output -{ - level.custom_emp_detonate = ::zm_transit_emp_detonate; - set_zombie_var( "emp_bus_off_range", 1200 ); - set_zombie_var( "emp_bus_off_time", 45 ); -} - -zm_transit_emp_detonate( grenade_origin ) //checked matches cerberus output -{ - test_ent = spawn( "script_origin", grenade_origin ); - if ( test_ent maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr" ) ) - { - if ( flag( "power_on" ) ) - { - trig = getent( "powerswitch_buildable_trigger_power", "targetname" ); - trig notify( "trigger" ); - } - } - test_ent delete(); -} - -emp_detonate_boss( grenade_origin ) //checked matches cerberus output -{ -} - -register_screecher_lights() //checked changed to match cerberus output -{ - level.safety_lights = getstructarray( "screecher_escape", "targetname" ); - for ( i = 0; i < level.safety_lights.size; i++ ) - { - safety = level.safety_lights[ i ]; - name = safety.script_noteworthy; - if ( !isDefined( name ) ) - { - /* -/# - println( "ERROR Unnamed screecher light detected" ); -#/ - */ - name = "light_" + i; - } - clientfieldname = "screecher_light_" + name; - level.safety_lights[ i ].clientfieldname = clientfieldname; - registerclientfield( "world", clientfieldname, 1, 1, "int" ); - } -} - -include_powered_items() //checked changed to match cerberus output -{ - if ( is_classic() ) - { - include_powered_item( ::bus_power_on, ::bus_power_off, ::bus_range, maps/mp/zombies/_zm_power::cost_negligible, 1, 1, undefined ); - if ( isDefined( level.safety_lights ) ) - { - for ( i = 0; i < level.safety_lights.size; i++ ) - { - include_powered_item( ::safety_light_power_on, ::safety_light_power_off, ::safety_light_range, maps/mp/zombies/_zm_power::cost_low_if_local, 0, 0, level.safety_lights[ i ] ); - } - } - } -} - -bus_range( delta, origin, radius ) //checked matches cerberus output -{ - if ( isDefined( level.the_bus ) ) - { - if ( distance2dsquared( origin, level.the_bus.origin ) < ( radius * radius ) ) - { - return 1; - } - forward = anglesToForward( level.the_bus.angles ); - forward = vectorScale( forward, 275 ); - bus_front = level.the_bus.origin + forward; - if ( distance2dsquared( origin, bus_front ) < ( radius * radius ) ) - { - return 1; - } - } - return 0; -} - -bus_power_on( origin, radius ) //checked matches cerberus output -{ - /* -/# - println( "^1ZM POWER: bus on\n" ); -#/ - */ - level.the_bus thread maps/mp/zm_transit_bus::bus_power_on(); -} - -bus_power_off( origin, radius ) //checked matches cerberus output -{ - /* -/# - println( "^1ZM POWER: bus off\n" ); -#/ - */ - level.the_bus thread maps/mp/zm_transit_bus::bus_power_off(); -} - -safety_light_range( delta, origin, radius ) //checked matches cerberus output -{ - if ( distancesquared( self.target.origin, origin ) < ( radius * radius ) ) - { - return 1; - } - return 0; -} - -safety_light_power_on( origin, radius ) //checked changed to match cerberus output -{ - /* -/# - println( "^1ZM POWER: bus on\n" ); -#/ - */ - self.target.power_on = 1; - self.target notify( "power_on" ); - if ( isDefined( self.target.clientfieldname ) ) - { - level setclientfield( self.target.clientfieldname, 1 ); - } - level notify( "safety_light_power_on", self ); -} - -safety_light_power_off( origin, radius ) //checked changed to match cerberus output -{ - /* -/# - println( "^1ZM POWER: bus off\n" ); -#/ - */ - self.target.power_on = 0; - self.target notify( "power_off" ); - if ( isDefined( self.target.clientfieldname ) ) - { - level setclientfield( self.target.clientfieldname, 0 ); - } - level notify( "safety_light_power_off", self ); -} - -zombie_transit_devgui( cmd ) //dev call didn't check -{ - /* -/# - cmd_strings = strtok( cmd, " " ); - switch( cmd_strings[ 0 ] ) - { - case "pickup": - if ( !level.the_bus.upgrades[ cmd_strings[ 1 ] ].pickedup ) - { - level.the_bus.upgrades[ cmd_strings[ 1 ] ].trigger notify( "trigger" ); - } - break; - case "spawn": - player = get_players()[ 0 ]; - spawnername = undefined; - if ( cmd_strings[ 1 ] == "regular" ) - { - spawnername = "zombie_spawner"; - } - else if ( cmd_strings[ 1 ] == "screecher" ) - { - } - else - { - return; - } - direction = player getplayerangles(); - direction_vec = anglesToForward( direction ); - eye = player geteye(); - scale = 8000; - direction_vec = ( direction_vec[ 0 ] * scale, direction_vec[ 1 ] * scale, direction_vec[ 2 ] * scale ); - trace = bullettrace( eye, eye + direction_vec, 0, undefined ); - guy = undefined; - if ( cmd_strings[ 1 ] == "screecher" ) - { - spawner = level.screecher_spawners[ 0 ]; - guy = maps/mp/zombies/_zm_utility::spawn_zombie( spawner ); - } - else - { - if ( cmd_strings[ 1 ] == "regular" ) - { - spawners = getentarray( spawnername, "script_noteworthy" ); - spawner = spawners[ 0 ]; - guy = maps/mp/zombies/_zm_utility::spawn_zombie( spawner ); - guy.favoriteenemy = player; - guy.script_string = "zombie_chaser"; - guy thread maps/mp/zombies/_zm_spawner::zombie_spawn_init(); - guy custom_zombie_setup(); - } - } - guy forceteleport( trace[ "position" ], player.angles + vectorScale( ( 0, -1, 0 ), 180 ) ); - break; - case "test_attach": - attach_name = getDvar( "zombie_bus_debug_attach" ); - opening = level.the_bus maps/mp/zm_transit_openings::busgetopeningfortag( attach_name ); - jump = level.the_bus maps/mp/zm_transit_openings::_busgetjumptagfrombindtag( attach_name ); - if ( isDefined( opening ) ) - { - if ( isDefined( opening.zombie ) ) - { - iprintln( "Zombie already attached to opening: " + attach_name ); - } - else - { - origin = level.the_bus gettagorigin( attach_name ); - if ( isDefined( jump ) ) - { - jump_origin = level.the_bus gettagorigin( jump ); - if ( isDefined( opening.enabled ) && opening.enabled ) - { - debugstar( jump_origin, 1000, ( 0, -1, 0 ) ); - } - else - { - debugstar( jump_origin, 1000, ( 0, -1, 0 ) ); - } - } - zombie_spawners = getentarray( "zombie_spawner", "script_noteworthy" ); - zombie = spawn_zombie( zombie_spawners[ 0 ] ); - zombie.cannotattachtobus = 1; - zombie thread maps/mp/zm_transit_openings::zombieattachtobus( level.the_bus, opening, 0 ); - } - } - else - { - iprintln( "Couldn't find opening for tag: " + attach_name ); - } - break; - case "attach_tag": - setdvar( "zombie_bus_debug_attach", cmd_strings[ 1 ] ); - break; - case "hatch_available": - if ( isDefined( level.the_bus ) ) - { - level.the_bus notify( "hatch_mantle_allowed" ); - } - break; - case "ambush_round": - if ( isDefined( level.ambushpercentageperstop ) ) - { - if ( cmd_strings[ 1 ] == "always" ) - { - level.ambushpercentageperstop = 100; - } - else - { - if ( cmd_strings[ 1 ] == "never" ) - { - level.ambushpercentageperstop = 0; - } - } - } - break; - case "gas": - if ( cmd_strings[ 1 ] == "add" ) - { - level.the_bus maps/mp/zm_transit_bus::busgasadd( getDvarInt( #"69C4D2C1" ) ); - } - else - { - if ( cmd_strings[ 1 ] == "remove" ) - { - level.the_bus maps/mp/zm_transit_bus::busgasremove( getDvarInt( #"69C4D2C1" ) ); - } - } - break; - case "force_bus_to_leave": - level.the_bus notify( "depart_early" ); - if ( isDefined( level.bus_leave_hud ) ) - { - level.bus_leave_hud.alpha = 0; - } - break; - case "teleport_to_bus": - get_players()[ 0 ] setorigin( level.the_bus localtoworldcoords( vectorScale( ( 0, -1, 0 ), 25 ) ) ); - break; - case "teleport_bus": - node = getvehiclenode( cmd_strings[ 1 ], "script_noteworthy" ); - if ( isDefined( node ) ) - { - level.the_bus thread buspathblockerdisable(); - wait 0,1; - level.the_bus attachpath( node ); - level.the_bus maps/mp/zm_transit_bus::busstopmoving( 1 ); - wait 0,1; - level.the_bus thread buspathblockerenable(); - } - break; - case "avogadro_round_skip": - if ( isDefined( level.next_avogadro_round ) ) - { - maps/mp/zombies/_zm_devgui::zombie_devgui_goto_round( level.next_avogadro_round ); - } - break; - case "debug_print_emp_points": - while ( isDefined( level.debug_print_emp_points ) && !level.debug_print_emp_points ) - { - level.debug_print_emp_points = 1; - vehnodes = getvehiclenodearray( "emp_stop_point", "script_noteworthy" ); - _a3190 = vehnodes; - _k3190 = getFirstArrayKey( _a3190 ); - while ( isDefined( _k3190 ) ) - { - node = _a3190[ _k3190 ]; - maps/mp/zombies/_zm_devgui::showonespawnpoint( node, ( 0, -1, 0 ), "kill_debug_print_emp_points", undefined, "EMP STOP" ); - _k3190 = getNextArrayKey( _a3190, _k3190 ); - } - } - case "debug_stop_print_emp_points": - if ( isDefined( level.debug_print_emp_points ) && level.debug_print_emp_points ) - { - level notify( "kill_debug_print_emp_points" ); - level.debug_print_emp_points = undefined; - } - break; - default: - } -#/ - } - } - */ -} - -is_valid_powerup_location( powerup ) //checked changed to match cerberus output -{ - valid = 0; - if ( !isDefined( level.powerup_areas ) ) - { - level.powerup_areas = getentarray( "powerup_area", "script_noteworthy" ); - } - if ( !isDefined( level.playable_areas ) ) - { - level.playable_areas = getentarray( "player_volume", "script_noteworthy" ); - } - for ( i = 0; i < level.powerup_areas.size && !valid; i++ ) - { - area = level.powerup_areas[ i ]; - valid = powerup istouching( area ); - } - for ( i = 0; i < level.playable_areas.size && !valid; i++ ) - { - area = level.playable_areas[ i ]; - valid = powerup istouching( area ); - } - return valid; -} - -zombie_transit_player_too_many_weapons_monitor_callback( weapon ) //checked matches cerberus output -{ - if ( self maps/mp/zm_transit_cling::playerisclingingtobus() ) - { - return 0; - } - return 1; -} - -zombie_transit_audio_alias_override() //checked matches cerberus output -{ - maps/mp/zm_transit_automaton::initaudioaliases(); - init_transit_player_dialogue(); - add_transit_response_chance(); -} - -falling_death_init() //checked changed to match beta dump -{ - trig = getent( "transit_falling_death", "targetname" ); - if ( isDefined( trig ) ) - { - while ( 1 ) - { - trig waittill( "trigger", who ); - if ( !is_true( who.insta_killed ) ) - { - who thread insta_kill_player(); - } - } - } -} - -insta_kill_player() //checked changed to match beta dump -{ - self endon( "disconnect" ); - if ( is_true( self.insta_killed ) ) - { - return; - } - self maps/mp/zombies/_zm_buildables::player_return_piece_to_original_spawn(); - if ( is_player_killable( self ) ) - { - self.insta_killed = 1; - in_last_stand = 0; - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - in_last_stand = 1; - } - if ( getnumconnectedplayers() == 1 ) - { - if ( isDefined( self.lives ) && self.lives > 0 ) - { - self.waiting_to_revive = 1; - points = getstruct( "zone_pcr", "script_noteworthy" ); - spawn_points = getstructarray( points.target, "targetname" ); - point = spawn_points[ 0 ]; - self dodamage( self.health + 1000, ( 0, 0, 0 ) ); - maps/mp/_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, 1, level.zm_transit_burn_max_duration ); - wait 0.5; - self freezecontrols( 1 ); - wait 0.25; - self setorigin( point.origin + vectorScale( ( 0, 0, 1 ), 20 ) ); - self.angles = point.angles; - if ( in_last_stand ) - { - flag_set( "instant_revive" ); - wait_network_frame(); - flag_clear( "instant_revive" ); - } - else - { - self thread maps/mp/zombies/_zm_laststand::auto_revive( self ); - self.waiting_to_revive = 0; - self.solo_respawn = 0; - self.lives = 0; - } - self freezecontrols( 0 ); - self.insta_killed = 0; - } - else - { - self dodamage( self.health + 1000, ( 0, 0, 0 ) ); - maps/mp/_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, 2, level.zm_transit_burn_max_duration ); - } - } - else - { - self dodamage( self.health + 1000, ( 0, 0, 0 ) ); - maps/mp/_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, 1, level.zm_transit_burn_max_duration ); - wait_network_frame(); - self.bleedout_time = 0; - } - self notify( "burned" ); - self.insta_killed = 0; - } -} - -is_player_killable( player, checkignoremeflag ) //checked matches cerberus output -{ - if ( !isDefined( player ) ) - { - return 0; - } - if ( !isalive( player ) ) - { - return 0; - } - if ( !isplayer( player ) ) - { - return 0; - } - if ( player.sessionstate == "spectator" ) - { - return 0; - } - if ( player.sessionstate == "intermission" ) - { - return 0; - } - if ( isDefined( checkignoremeflag ) && player.ignoreme ) - { - return 0; - } - return 1; -} - -delete_bus_pieces() //checked changed to match beta dump -{ - wait 3; - if ( is_true( level._bus_pieces_deleted ) ) - { - return; - } - level._bus_pieces_deleted = 1; - hatch_mantle = getent( "hatch_mantle", "targetname" ); - if ( isDefined( hatch_mantle ) ) - { - hatch_mantle delete(); - } - hatch_clip = getentarray( "hatch_clip", "targetname" ); - array_thread( hatch_clip, ::self_delete ); - plow_clip = getentarray( "plow_clip", "targetname" ); - array_thread( plow_clip, ::self_delete ); - light = getent( "busLight2", "targetname" ); - if ( isDefined( light ) ) - { - light delete(); - } - light = getent( "busLight1", "targetname" ); - if ( isDefined( light ) ) - { - light delete(); - } - blocker = getent( "bus_path_blocker", "targetname" ); - if ( isDefined( blocker ) ) - { - blocker delete(); - } - lights = getentarray( "bus_break_lights", "targetname" ); - array_thread( lights, ::self_delete ); - orgs = getentarray( "bus_bounds_origin", "targetname" ); - array_thread( orgs, ::self_delete ); - door_blocker = getentarray( "bus_door_blocker", "targetname" ); - array_thread( door_blocker, ::self_delete ); - driver = getent( "bus_driver_head", "targetname" ); - if ( isDefined( driver ) ) - { - driver delete(); - } - plow = getent( "trigger_plow", "targetname" ); - if ( isDefined( plow ) ) - { - plow delete(); - } - plow_attach_point = getent( "plow_attach_point", "targetname" ); - if ( isDefined( plow_attach_point ) ) - { - plow_attach_point delete(); - } - bus = getent( "the_bus", "targetname" ); - if ( isDefined( bus ) ) - { - bus delete(); - } - barriers = getzbarrierarray(); - foreach ( barrier in barriers ) - { - if ( isDefined( barrier.classname ) && issubstr( barrier.classname, "zb_bus" ) ) - { - for ( x = 0; x < barrier getnumzbarrierpieces(); x++ ) - { - barrier setzbarrierpiecestate( x, "opening" ); - } - barrier hide(); - } - } -} - -init_transit_stats() //checked matches cerberus output -{ - self maps/mp/zm_transit_sq::init_player_sidequest_stats(); - self maps/mp/zm_transit_achievement::init_player_achievement_stats(); -} - -kill_zombies_depot() //checked partially changed to match cerberus output see info.md No. 5 -{ - if ( level.zones[ "zone_pri" ].is_occupied == 1 || flag( "OnPriDoorYar2" ) ) - { - return; - } - if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_pri" ) ) - { - self.marked_for_recycle = 1; - self dodamage( self.health + 666, self.origin, self ); - return; - } - if ( self should_be_killed_depot() ) - { - self.marked_for_recycle = 1; - self dodamage( self.health + 666, self.origin, self ); - return; - } -} - -//custom addition -////////////////////////////////////////// -should_be_killed_depot() //added to get around info. No. 5 for kill_zombies_depot() above -{ - if ( ( self.ignoreall || !self in_playable_zone() ) && isDefined( self.zone_name ) && self.zone_name == "zone_pri" ) - { - return 1; - } - if ( ( self.ignoreall || !self in_playable_zone() ) && isDefined( self.zone_name ) && self.zone_name == "zone_pri2" ) - { - return 1; - } - return 0; -} -//////////////////////////////////////// - -in_playable_zone() //checked changed to match cerberus output -{ - if ( !isDefined( level.playable_areas ) ) - { - level.playable_areas = getentarray( "player_volume", "script_noteworthy" ); - } - foreach ( zone in level.playable_areas ) - { - if ( self istouching( zone ) ) - { - return 1; - } - } - return 0; -} - -lava_damage_depot() //checked changed to match cerberus output -{ - trigs = getentarray( "lava_damage", "targetname" ); - volume = getent( "depot_lava_volume", "targetname" ); - exploder( 2 ); - foreach ( trigger in trigs ) - { - if ( isDefined( trigger.script_string ) && trigger.script_string == "depot_lava" ) - { - trig = trigger; - } - } - if ( isDefined( trig ) ) - { - trig.script_float = 0.05; - } - while ( level.round_number < 3 ) - { - level waittill( "start_of_round" ); - } - while ( !volume depot_lava_seen() ) - { - wait 2; - } - if ( isDefined( trig ) ) - { - trig.script_float = 0.4; - earthquake( 0.5, 1.5, trig.origin, 1000 ); - level clientnotify( "earth_crack" ); - crust = getent( "depot_black_lava", "targetname" ); - crust delete(); - } - stop_exploder( 2 ); - exploder( 3 ); -} - -depot_lava_seen() //checked changed to match cerberus output -{ - check_volume = getent( "depot_lava_check", "targetname" ); - players = get_players(); - foreach ( player in players ) - { - if ( player istouching( check_volume ) ) - { - seen = self maps/mp/zm_transit_distance_tracking::player_can_see_me( player ); - if ( seen ) - { - return 1; - } - } - } - return 0; -} - -assign_lowest_unused_character_index() //checked changed to match beta dump -{ - charindexarray = []; - charindexarray[ 0 ] = 0; - charindexarray[ 1 ] = 1; - charindexarray[ 2 ] = 2; - charindexarray[ 3 ] = 3; - players = get_players(); - if ( players.size == 1 ) - { - charindexarray = array_randomize( charindexarray ); - return charindexarray[ 0 ]; - } - else if ( players.size == 2 ) - { - foreach ( player in players ) - { - if ( isDefined( player.characterindex ) ) - { - if ( player.characterindex == 2 || player.characterindex == 0 ) - { - if ( randomint( 100 ) > 50 ) - { - return 1; - } - return 3; - } - else if ( player.characterindex == 3 || player.characterindex == 1 ) - { - if ( randomint( 100 ) > 50 ) - { - return 0; - } - return 2; - } - } - } - } - else - { - foreach ( player in players ) - { - if ( isDefined( player.characterindex ) ) - { - arrayremovevalue( charindexarray, player.characterindex, 0 ); - } - } - if ( charindexarray.size > 0 ) - { - return charindexarray[ 0 ]; - } - } - return 0; -} - -dog_spawn_transit_logic( dog_array, favorite_enemy ) //checked partially changed to match cerberus output see info.md No. 2 -{ - dog_locs = array_randomize( level.enemy_dog_locations ); - for ( i = 0; i < dog_locs.size; i++ ) - { - if ( isDefined( level.old_dog_spawn ) && level.old_dog_spawn == dog_locs[ i ] ) - { - } - else - { - canuse = 1; - players = get_players(); - foreach ( player in players ) - { - if ( !canuse ) - { - } - else - { - dist_squared = distancesquared( dog_locs[ i ].origin, player.origin ); - if ( dist_squared < 160000 || dist_squared > 1322500 ) - { - canuse = 0; - } - } - } - if ( canuse ) - { - level.old_dog_spawn = dog_locs[ i ]; - return dog_locs[ i ]; - } - } - } - return dog_locs[ 0 ]; -} - -bank_teller_init() //checked matches cerberus output -{ - playfx( level._effect[ "fx_zmb_tranzit_key_glint" ], ( 760, 461, -30 ), vectorScale( ( 0, -1, 0 ), 90 ) ); - playfx( level._effect[ "fx_zmb_tranzit_key_glint" ], ( 760, 452, -30 ), vectorScale( ( 0, -1, 0 ), 90 ) ); -} - -player_name_fade_control() //checked partially changed to match cerberus output see info.md No. 2 used is_true instead -{ - while ( 1 ) - { - players = get_players(); - foreach ( player in players ) - { - if ( !isDefined( player.infog ) ) - { - player.infog = 0; - player.old_infog = 0; - player.infogtimer = 0; - } - player.old_infog = player.infog; - infog = is_player_in_fog( player ); - if ( infog ) - { - player.infogtimer++; - } - player.infog = infog; - if ( player.infog != player.old_infog && !is_true( player.isonbus ) ) - { - if ( infog ) - { - if ( player.infogtimer < 5 ) - { - } - else - { - line = "in_fog"; - } - } - else - { - if ( player.infogtimer < 15 ) - { - } - else - { - line = "out_of_fog"; - player.infogtimer = 0; - } - if ( maps/mp/zombies/_zm_audio::get_response_chance( line ) > randomint( 100 ) && !isDefined( player.screecher ) ) - { - player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", line ); - } - } - if ( isDefined( level.set_player_in_fog ) ) - { - player thread [[ level.set_player_in_fog ]]( infog ); - } - } - } - wait 1; - } -} - -is_player_in_fog( player ) //checked matches cerberus output used is_true instead -{ - if ( player_entered_safety_zone( player ) ) - { - return 0; - } - if ( player_entered_safety_light( player ) ) - { - return 0; - } - curr_zone = player get_current_zone( 1 ); - if ( isDefined( curr_zone ) && !is_true( curr_zone.screecher_zone ) ) - { - return 0; - } - return 1; -} - -add_transit_response_chance() //checked matches cerberus output -{ - add_vox_response_chance( "in_fog", 100 ); - add_vox_response_chance( "out_of_fog", 65 ); - add_vox_response_chance( "killed_screecher", 20 ); - add_vox_response_chance( "screecher_attack", 5 ); - add_vox_response_chance( "screecher_flee", 50 ); - add_vox_response_chance( "screecher_cut", 15 ); - add_vox_response_chance( "screecher_flee_green", 75 ); - add_vox_response_chance( "crawl_spawn", 10 ); - add_vox_response_chance( "screecher_jumpoff", 50 ); - add_vox_response_chance( "reboard", 5 ); - add_vox_response_chance( "jetgun_kill", 10 ); - add_vox_response_chance( "achievement", 100 ); - add_vox_response_chance( "power_on", 100 ); - add_vox_response_chance( "power_off", 100 ); - add_vox_response_chance( "power_core", 100 ); - add_vox_response_chance( "upgrade", 100 ); - add_vox_response_chance( "build_pck_bshield", 45 ); - add_vox_response_chance( "build_pck_bturret", 45 ); - add_vox_response_chance( "build_pck_btrap", 45 ); - add_vox_response_chance( "build_pck_bturbine", 45 ); - add_vox_response_chance( "build_pck_bjetgun", 45 ); - add_vox_response_chance( "build_pck_wshield", 45 ); - add_vox_response_chance( "build_pck_wturret", 45 ); - add_vox_response_chance( "build_pck_wtrap", 45 ); - add_vox_response_chance( "build_pck_wturbine", 45 ); - add_vox_response_chance( "build_pck_wjetgun", 45 ); - add_vox_response_chance( "build_plc_shield", 45 ); - add_vox_response_chance( "build_plc_turret", 45 ); - add_vox_response_chance( "build_plc_trap", 45 ); - add_vox_response_chance( "build_plc_turbine", 45 ); - add_vox_response_chance( "build_pickup", 45 ); - add_vox_response_chance( "build_swap", 45 ); - add_vox_response_chance( "build_add", 45 ); - add_vox_response_chance( "build_final", 45 ); -} - -init_transit_player_dialogue() //checked matches cerberus output -{ - level.vox zmbvoxadd( "player", "general", "in_fog", "map_in_fog", undefined ); - level.vox zmbvoxadd( "player", "general", "out_of_fog", "map_out_fog", undefined ); - level.vox zmbvoxadd( "player", "perk", "specialty_scavenger", "perk_tombstone", undefined ); - level.vox zmbvoxadd( "player", "general", "revive_down", "bus_down", undefined ); - level.vox zmbvoxadd( "player", "general", "revive_up", "heal_revived", undefined ); - level.vox zmbvoxadd( "player", "general", "screecher_attack", "screecher_attack", "resp_screecher_attack" ); - level.vox zmbvoxadd( "player", "general", "hr_resp_screecher_attack", "hr_resp_screecher_attack", undefined ); - level.vox zmbvoxadd( "player", "general", "riv_resp_screecher_attack", "riv_resp_screecher_attack", undefined ); - level.vox zmbvoxadd( "player", "general", "screecher_flee", "screecher_flee", undefined ); - level.vox zmbvoxadd( "player", "general", "screecher_jumpoff", "screecher_off", undefined ); - level.vox zmbvoxadd( "player", "general", "screecher_flee_green", "screecher_teleport", undefined ); - level.vox zmbvoxadd( "player", "kill", "screecher", "kill_screecher", undefined ); - level.vox zmbvoxadd( "player", "general", "screecher_cut", "screecher_cut", undefined ); - level.vox zmbvoxadd( "player", "general", "achievement", "earn_acheivement", undefined ); - level.vox zmbvoxadd( "player", "general", "no_money_weapon", "nomoney_weapon", undefined ); - level.vox zmbvoxadd( "player", "general", "no_money_box", "nomoney_box", undefined ); - level.vox zmbvoxadd( "player", "general", "exert_sigh", "exert_sigh", undefined ); - level.vox zmbvoxadd( "player", "general", "exert_laugh", "exert_laugh", undefined ); - level.vox zmbvoxadd( "player", "general", "pain_high", "pain_high", undefined ); - level.vox zmbvoxadd( "player", "general", "build_pck_bshield", "build_pck_bshield", undefined ); - level.vox zmbvoxadd( "player", "general", "build_pck_bturret", "build_pck_bturret", undefined ); - level.vox zmbvoxadd( "player", "general", "build_pck_btrap", "build_pck_btrap", undefined ); - level.vox zmbvoxadd( "player", "general", "build_pck_bturbine", "build_pck_bturbine", undefined ); - level.vox zmbvoxadd( "player", "general", "build_pck_bjetgun", "build_pck_bjetgun", undefined ); - level.vox zmbvoxadd( "player", "general", "build_pck_wshield", "build_pck_wshield", undefined ); - level.vox zmbvoxadd( "player", "general", "build_pck_wturret", "build_pck_wturret", undefined ); - level.vox zmbvoxadd( "player", "general", "build_pck_wtrap", "build_pck_wtrap", undefined ); - level.vox zmbvoxadd( "player", "general", "build_pck_wturbine", "build_pck_wturbine", undefined ); - level.vox zmbvoxadd( "player", "general", "build_pck_wjetgun", "build_pck_wjetgun", undefined ); - level.vox zmbvoxadd( "player", "general", "build_plc_shield", "build_plc_shield", undefined ); - level.vox zmbvoxadd( "player", "general", "build_plc_turret", "build_plc_turret", undefined ); - level.vox zmbvoxadd( "player", "general", "build_plc_trap", "build_plc_trap", undefined ); - level.vox zmbvoxadd( "player", "general", "build_plc_turbine", "build_plc_turbine", undefined ); - level.vox zmbvoxadd( "player", "general", "build_pickup", "build_pickup", undefined ); - level.vox zmbvoxadd( "player", "general", "build_swap", "build_swap", undefined ); - level.vox zmbvoxadd( "player", "general", "build_add", "build_add", undefined ); - level.vox zmbvoxadd( "player", "general", "build_final", "build_final", undefined ); - level.vox zmbvoxadd( "player", "general", "intro", "power_off", undefined ); - level.vox zmbvoxadd( "player", "power", "power_on", "power_on", undefined ); - level.vox zmbvoxadd( "player", "power", "power_core", "power_core", undefined ); - level.vox zmbvoxadd( "player", "general", "reboard", "rebuild_boards", undefined ); - level.vox zmbvoxadd( "player", "general", "upgrade", "find_secret", undefined ); - level.vox zmbvoxadd( "player", "general", "map_out_bus", "map_out_bus", undefined ); - level.vox zmbvoxadd( "player", "general", "map_out_tunnel", "map_out_tunnel", undefined ); - level.vox zmbvoxadd( "player", "general", "map_out_diner", "map_out_diner", undefined ); - level.vox zmbvoxadd( "player", "general", "map_out_1forest", "map_out_1forest", undefined ); - level.vox zmbvoxadd( "player", "general", "map_out_farm", "map_out_farm", undefined ); - level.vox zmbvoxadd( "player", "general", "map_out_corn", "map_out_corn", undefined ); - level.vox zmbvoxadd( "player", "general", "map_out_power", "map_out_power", undefined ); - level.vox zmbvoxadd( "player", "general", "map_out_2forest", "map_out_2forest", undefined ); - level.vox zmbvoxadd( "player", "general", "map_out_town", "map_out_town", undefined ); - level.vox zmbvoxadd( "player", "general", "map_out_bridge", "map_out_bridge", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_bus1", "map_in_bus1", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_tunnel1", "map_in_tunnel1", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_diner1", "map_in_diner1", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_1forest1", "map_in_1forest1", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_farm1", "map_in_farm1", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_corn1", "map_in_corn1", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_power1", "map_in_power1", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_2forest1", "map_in_2forest1", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_town1", "map_in_town1", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_bridge1", "map_in_bridge1", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_bus2", "map_in_bus2", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_tunnel2", "map_in_tunnel2", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_diner2", "map_in_diner2", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_1forest2", "map_in_1forest2", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_farm2", "map_in_farm2", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_corn2", "map_in_corn2", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_power2", "map_in_power2", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_2forest2", "map_in_2forest2", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_town2", "map_in_town2", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_bridge2", "map_in_bridge2", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_bus3", "map_in_bus3", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_tunnel3", "map_in_tunnel3", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_diner3", "map_in_diner3", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_1forest3", "map_in_1forest3", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_farm3", "map_in_farm3", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_corn3", "map_in_corn3", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_power3", "map_in_power3", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_2forest3", "map_in_2forest3", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_town3", "map_in_town3", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_bridge3", "map_in_bridge3", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_bus4", "map_in_bus4", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_tunnel4", "map_in_tunnel4", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_diner4", "map_in_diner4", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_1forest4", "map_in_1forest4", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_farm4", "map_in_farm4", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_corn4", "map_in_corn4", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_power4", "map_in_power4", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_2forest4", "map_in_2forest4", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_town4", "map_in_town4", undefined ); - level.vox zmbvoxadd( "player", "general", "map_in_bridge4", "map_in_bridge4", undefined ); - level.vox zmbvoxadd( "player", "general", "bus_zom_roof", "bus_zom_roof", undefined ); - level.vox zmbvoxadd( "player", "general", "bus_zom_climb", "bus_zom_climb", undefined ); - level.vox zmbvoxadd( "player", "general", "bus_zom_atk", "bus_zom_atk", undefined ); - level.vox zmbvoxadd( "player", "general", "bus_zom_ent", "bus_zom_ent", undefined ); - level.vox zmbvoxadd( "player", "general", "bus_zom_none", "bus_zom_none", undefined ); - level.vox zmbvoxadd( "player", "general", "bus_zom_chase", "bus_zom_chase", undefined ); - level.vox zmbvoxadd( "player", "general", "bus_stop", "bus_stop", undefined ); - level.vox zmbvoxadd( "player", "general", "bus_ride", "bus_ride", undefined ); - level.vox zmbvoxadd( "player", "general", "avogadro_reveal", "avogadro_reveal", undefined ); - level.vox zmbvoxadd( "player", "general", "avogadro_above", "avogadro_above", undefined ); - level.vox zmbvoxadd( "player", "general", "avogadro_storm", "avogadro_storm", undefined ); - level.vox zmbvoxadd( "player", "general", "avogadro_arrive", "avogadro_arrive", undefined ); - level.vox zmbvoxadd( "player", "general", "avogadro_attack", "avogadro_attack", "resp_avogadro_attack" ); - level.vox zmbvoxadd( "player", "general", "hr_resp_avogadro_attack", "hr_resp_avogadro_attack", undefined ); - level.vox zmbvoxadd( "player", "general", "riv_resp_avogadro_attack", "riv_resp_avogadro_attack", undefined ); - level.vox zmbvoxadd( "player", "general", "avogadro_wound", "avogadro_wound", undefined ); - level.vox zmbvoxadd( "player", "general", "avogadro_flee", "avogadro_flee", undefined ); - level.vox zmbvoxadd( "player", "general", "avogadro_onbus", "avogadro_onbus", undefined ); - level.vox zmbvoxadd( "player", "general", "avogadro_atkbus", "avogadro_atkbus", undefined ); - level.vox zmbvoxadd( "player", "general", "avogadro_stopbus", "avogadro_stopbus", undefined ); - level.vox zmbvoxadd( "player", "general", "exert_death", "exert_death_high", undefined ); - level.vox zmbvoxadd( "player", "kill", "jetgun_kill", "kill_jet", undefined ); - level.vox zmbvoxadd( "player", "general", "pap_wait", "pap_wait", undefined ); - level.vox zmbvoxadd( "player", "general", "pap_wait2", "pap_wait2", undefined ); - level.vox zmbvoxadd( "player", "general", "pap_arm", "pap_arm", undefined ); - level.vox zmbvoxadd( "player", "general", "pap_arm2", "pap_arm2", undefined ); - level.vox zmbvoxadd( "player", "general", "pap_hint", "pap_hint", undefined ); - maps/mp/zombies/_zm_audio_announcer::createvox( "first_drop", "first_drop" ); - level.station_pa_vox = []; - for ( i = 0; i < 10; i++ ) - { - level.station_pa_vox[ i ] = "vox_stat_pa_generic_" + i; - } - level.survivor_vox = []; - for ( i = 0; i < 5; i++ ) - { - level.survivor_vox[ i ] = "vox_radi_distress_message_" + i; - } -} - -transit_audio_custom_response_line( player, index, category, type ) //checked matches cerberus output -{ - russman = 0; - samuel = 1; - misty = 2; - marlton = 3; - switch( player.characterindex ) - { - case 0: - level maps/mp/zombies/_zm_audio::setup_hero_rival( player, samuel, marlton, category, type ); - break; - case 1: - level maps/mp/zombies/_zm_audio::setup_hero_rival( player, russman, misty, category, type ); - break; - case 2: - level maps/mp/zombies/_zm_audio::setup_hero_rival( player, marlton, samuel, category, type ); - break; - case 3: - level maps/mp/zombies/_zm_audio::setup_hero_rival( player, misty, russman, category, type ); - break; - } - return; -} - -powerup_intro_vox( powerup ) //checked partially changed to match cerberus output see info.md No. 2 -{ - say_intro = 0; - players = get_players(); - foreach ( player in players ) - { - if ( player maps/mp/zombies/_zm_stats::get_global_stat( "POWERUP_INTRO_PLAYED" ) == 1 ) - { - } - else - { - player maps/mp/zombies/_zm_stats::set_global_stat( "powerup_intro_played", 1 ); - say_intro = 1; - } - } - level.powerup_intro_vox = undefined; - powerup_name = powerup.powerup_name; - powerup thread maps/mp/zombies/_zm_powerups::powerup_delete(); - powerup notify( "powerup_grabbed" ); - if ( !say_intro ) - { - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( powerup_name ); - level.powerup_vo_available = undefined; - return; - } - flag_clear( "zombie_drop_powerups" ); - level.powerup_intro = 1; - org = spawn( "script_origin", get_players()[ 0 ].origin ); - org playsoundwithnotify( "vox_zmba_first_drop_0", "first_powerup_intro_done" ); - org waittill( "first_powerup_intro_done" ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( powerup_name ); - org delete(); - flag_set( "zombie_drop_powerups" ); - level.powerup_intro = 0; - level.powerup_vo_available = undefined; -} - -powerup_vo_available() //checked matches cerberus output used is_true instead -{ - wait 0.1; - if ( is_true( level.powerup_intro ) ) - { - return 0; - } - return 1; -} - -buildable_build_custom_func( stub ) //checked changed to match cerberus output -{ - buildable = stub.buildablezone; - counter = 0; - for ( i = 0; i < buildable.pieces.size; i++ ) - { - if ( isDefined( buildable.pieces[ i ].built ) && buildable.pieces[ i ].built ) - { - counter++; - } - } - if ( counter == ( buildable.pieces.size - 1 ) ) - { - self thread do_player_general_vox( "general", "build_final", 45 ); - } -} - -bank_pap_hint() //checked changed to match cerberus output -{ - volume = getent( "zone_ban", "targetname" ); - while ( 1 ) - { - players = get_players(); - foreach ( player in players ) - { - if ( player istouching( volume ) && is_player_valid( player ) ) - { - player thread do_player_general_vox( "general", "pap_hint", undefined, 100 ); - return; - } - } - wait 10; - } -} - -power_pap_hint() //checked changed to match cerberus output -{ - trigs = getentarray( "local_electric_door", "script_noteworthy" ); - lab_trig = undefined; - foreach ( trig in trigs ) - { - if ( isDefined( trig.target ) && trig.target == "lab_secret_hatch" ) - { - lab_trig = trig; - } - } - if ( !isDefined( lab_trig ) ) - { - return; - } - while ( 1 ) - { - lab_trig waittill( "trigger", who ); - if ( isplayer( who ) && is_player_valid( who ) ) - { - who thread do_player_general_vox( "general", "pap_hint", undefined, 100 ); - return; - } - } -} - -transit_buildable_vo_override( name, from_world ) //checked matches cerberus output used is_true instead -{ - if ( is_true( level.power_cycled ) && name == "turbine" && !is_true( from_world ) && !flag( "power_on" ) ) - { - level.maxis_turbine_pickedup_vox = 1; - level thread maps/mp/zm_transit_sq::maxissay( "vox_maxi_build_complete_0", ( -6848, 5056, 56 ) ); - return 1; - } - return 0; -} - -sndsetupmusiceasteregg() //checked changed to match cerberus output -{ - origins = []; - origins[ 0 ] = ( -7562, 4570, -19 ); - origins[ 1 ] = ( 7914, -6557, 269 ); - origins[ 2 ] = ( 1864, -7, -19 ); - level.meteor_counter = 0; - level.music_override = 0; - for ( i = 0; i < origins.size; i++ ) - { - level thread sndmusicegg( origins[ i ] ); - } -} - -sndmusicegg( bear_origin ) //checked matches cerberus output -{ - temp_ent = spawn( "script_origin", bear_origin ); - temp_ent playloopsound( "zmb_meteor_loop" ); - temp_ent thread maps/mp/zombies/_zm_sidequests::fake_use( "main_music_egg_hit", ::waitfor_override ); - temp_ent waittill( "main_music_egg_hit", player ); - temp_ent stoploopsound( 1 ); - player playsound( "zmb_meteor_activate" ); - level.meteor_counter += 1; - if ( level.meteor_counter == 3 ) - { - level thread sndplaymusicegg( player, temp_ent ); - } - else - { - wait 1.5; - temp_ent delete(); - } -} - -waitfor_override() //checked matches cerberus output used is_true instead -{ - if ( is_true( level.music_override ) ) - { - return 0; - } - return 1; -} - -sndplaymusicegg( player, ent ) //checked matches cerberus output -{ - wait 1; - ent playsound( "mus_zmb_secret_song" ); - level waittill( "end_game" ); - ent stopsounds(); - wait 0.05; - ent delete(); -} - -sndtoiletflush() //checked matches cerberus output -{ - toilettrig = spawn( "trigger_radius", ( 11182, 7584, -596 ), 0, 150, 5 ); - toilettrig sethintstring( "" ); - toilettrig setcursorhint( "HINT_NOICON" ); - while ( 1 ) - { - toilettrig waittill( "trigger", who ); - if ( who is_player() ) - { - toilettrig playsound( "zmb_toilet_flush" ); - wait 5; - } - wait 0.1; - } -} - -transit_special_weapon_magicbox_check( weapon ) //checked matches cerberus output used is_true instead -{ - if ( is_true( level.raygun2_included ) ) - { - if ( weapon == "ray_gun_zm" ) - { - if ( self has_weapon_or_upgrade( "raygun_mark2_zm" ) || maps/mp/zombies/_zm_tombstone::is_weapon_available_in_tombstone( "raygun_mark2_zm", self ) ) - { - return 0; - } - } - if ( weapon == "raygun_mark2_zm" ) - { - if ( self has_weapon_or_upgrade( "ray_gun_zm" ) || maps/mp/zombies/_zm_tombstone::is_weapon_available_in_tombstone( "ray_gun_zm", self ) ) - { - return 0; - } - if ( randomint( 100 ) >= 33 ) - { - return 0; - } - } - } - return 1; -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_achievement.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_achievement.gsc deleted file mode 100644 index 97d93b7..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_achievement.gsc +++ /dev/null @@ -1,181 +0,0 @@ -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - if ( is_classic() ) - { - level thread achievement_transit_sidequest(); - level thread achievement_undead_mans_party_bus(); - } - level.achievement_sound_func = ::achievement_sound_func; - onplayerconnect_callback( ::onplayerconnect ); -} - -init_player_achievement_stats() -{ - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dont_fire_until_you_see", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_the_lights_of_their_eyes", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dance_on_my_grave", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_standard_equipment_may_vary", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_you_have_no_power_over_me", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_i_dont_think_they_exist", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_fuel_efficient", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_happy_hour", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_transit_sidequest", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_undead_mans_party_bus", 0 ); -} - -onplayerconnect() -{ - self thread achievement_the_lights_of_their_eyes(); - self thread achievement_dance_on_my_grave(); - if ( is_classic() ) - { - self thread achievement_dont_fire_until_you_see(); - self thread achievement_standard_equipment_may_vary(); - self thread achievement_you_have_no_power_over_me(); - self thread achievement_i_dont_think_they_exist(); - self thread achievement_fuel_efficient(); - self thread achievement_zm_happy_hour(); - } -} - -achievement_transit_sidequest() -{ - level endon( "end_game" ); - level waittill( "transit_sidequest_achieved" ); - level giveachievement_wrapper( "ZM_TRANSIT_SIDEQUEST", 1 ); -} - -achievement_undead_mans_party_bus() -{ - level endon( "end_game" ); - flag_wait( "start_zombie_round_logic" ); - wait 0,05; - flag_wait( "ladder_attached" ); - flag_wait( "catcher_attached" ); - flag_wait( "hatch_attached" ); -/# -#/ - level giveachievement_wrapper( "ZM_UNDEAD_MANS_PARTY_BUS", 1 ); -} - -achievement_dont_fire_until_you_see() -{ - level endon( "end_game" ); - self endon( "burned" ); - zombie_doors = getentarray( "zombie_door", "targetname" ); - while ( 1 ) - { - level waittill( "door_opened" ); - num_left = 0; - all_opened = 1; - _a92 = zombie_doors; - _k92 = getFirstArrayKey( _a92 ); - while ( isDefined( _k92 ) ) - { - door = _a92[ _k92 ]; - if ( isDefined( door.has_been_opened ) && !door.has_been_opened ) - { - num_left++; - all_opened = 0; - } - _k92 = getNextArrayKey( _a92, _k92 ); - } - if ( all_opened ) - { - break; - } - else - { -/# -#/ - } - } -/# -#/ - self giveachievement_wrapper( "ZM_DONT_FIRE_UNTIL_YOU_SEE" ); -} - -achievement_the_lights_of_their_eyes() -{ - level endon( "end_game" ); - self waittill( "the_lights_of_their_eyes" ); -/# -#/ - self giveachievement_wrapper( "ZM_THE_LIGHTS_OF_THEIR_EYES" ); -} - -achievement_dance_on_my_grave() -{ - level endon( "end_game" ); - self waittill( "dance_on_my_grave" ); -/# -#/ - self giveachievement_wrapper( "ZM_DANCE_ON_MY_GRAVE" ); -} - -achievement_standard_equipment_may_vary() -{ - level endon( "end_game" ); - self waittill_subset( 4, "equip_electrictrap_zm_given", "riotshield_zm_given", "equip_turbine_zm_given", "equip_turret_zm_given", "jetgun_zm_given" ); -/# -#/ - self giveachievement_wrapper( "ZM_STANDARD_EQUIPMENT_MAY_VARY" ); -} - -achievement_you_have_no_power_over_me() -{ - level endon( "end_game" ); - self endon( "avogadro_damage_taken" ); - level waittill( "avogadro_defeated" ); -/# -#/ - self giveachievement_wrapper( "ZM_YOU_HAVE_NO_POWER_OVER_ME" ); -} - -achievement_i_dont_think_they_exist() -{ - level endon( "end_game" ); - self waittill( "i_dont_think_they_exist" ); -/# -#/ - self giveachievement_wrapper( "ZM_I_DONT_THINK_THEY_EXIST" ); -} - -achievement_fuel_efficient() -{ - level endon( "end_game" ); - self waittill( "used_screecher_hole" ); -/# -#/ - self giveachievement_wrapper( "ZM_FUEL_EFFICIENT" ); -} - -achievement_zm_happy_hour() -{ - level endon( "end_game" ); - level endon( "power_on" ); - while ( 1 ) - { - self waittill( "perk_acquired" ); - if ( isDefined( self.perk_history ) && self.perk_history.size >= 2 ) - { - break; - } - else - { - } - } -/# -#/ - self giveachievement_wrapper( "ZM_HAPPY_HOUR" ); -} - -achievement_sound_func( achievement_name_lower ) -{ - self thread do_player_general_vox( "general", "achievement" ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_ai_screecher.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_ai_screecher.gsc deleted file mode 100644 index c09874c..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_ai_screecher.gsc +++ /dev/null @@ -1,291 +0,0 @@ -#include maps/mp/zm_transit; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_gump; -#include maps/mp/animscripts/zm_shared; -#include maps/mp/zm_transit_utility; -#include maps/mp/zombies/_zm_ai_screecher; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - level.screecher_should_burrow = ::screecher_should_burrow; - level.screecher_should_runaway = ::screecher_should_runaway; - level.screecher_cleanup = ::transit_screecher_cleanup; - level.screecher_init_done = ::screecher_init_done; - level.portals = []; -} - -screecher_should_burrow() -{ - green_light = self.green_light; - if ( isDefined( green_light ) ) - { - if ( isDefined( green_light.burrow_active ) && green_light.burrow_active ) - { -/# - screecher_print( "burrow: already active" ); -#/ - return 0; - } - if ( isDefined( green_light.claimed ) && green_light.claimed ) - { -/# - screecher_print( "burrow: already claimed" ); -#/ - return 0; - } - ground_pos = groundpos( green_light.origin ); - self.ignoreall = 1; - green_light.claimed = 1; - self setgoalpos( ground_pos ); - self waittill( "goal" ); - self.state = "burrow_started"; - self setfreecameralockonallowed( 0 ); - self animscripted( ground_pos, self.angles, "zm_burrow" ); - self playsound( "zmb_screecher_dig" ); - if ( isDefined( green_light.burrow_active ) && !green_light.burrow_active && isDefined( green_light.power_on ) && green_light.power_on ) - { - green_light thread create_portal(); - } - maps/mp/animscripts/zm_shared::donotetracks( "burrow_anim" ); - green_light notify( "burrow_done" ); - self.state = "burrow_finished"; - self delete(); - return 1; - } - return 0; -} - -create_portal() -{ - self endon( "portal_stopped" ); - self.burrow_active = 1; - ground_pos = groundpos( self.origin ); - if ( !isDefined( self.hole ) ) - { - self.hole = spawn( "script_model", ground_pos + vectorScale( ( 0, 0, 1 ), 20 ) ); - self.hole.start_origin = self.hole.origin; - self.hole setmodel( "p6_zm_screecher_hole" ); - self.hole playsound( "zmb_screecher_portal_spawn" ); - } - if ( !isDefined( self.hole_fx ) ) - { - self.hole_fx = spawn( "script_model", ground_pos ); - self.hole_fx setmodel( "tag_origin" ); - } - wait 0,1; - playfxontag( level._effect[ "screecher_hole" ], self.hole_fx, "tag_origin" ); - self.hole moveto( self.hole.origin + vectorScale( ( 0, 0, 1 ), 20 ), 1 ); - self waittill( "burrow_done" ); - self thread portal_think(); -} - -portal_think() -{ - playfxontag( level._effect[ "screecher_vortex" ], self.hole, "tag_origin" ); - self.hole_fx delete(); - self.hole playloopsound( "zmb_screecher_portal_loop", 2 ); - level.portals[ level.portals.size ] = self; -} - -portal_player_watcher() -{ - self endon( "disconnect" ); - while ( 1 ) - { - if ( !self isonground() ) - { - self player_wait_land(); - } - wait 0,1; - } -} - -player_wait_land() -{ - self endon( "disconnect" ); - while ( !self isonground() ) - { - wait 0,1; - } - if ( level.portals.size > 0 ) - { - remove_portal = undefined; - _a159 = level.portals; - _k159 = getFirstArrayKey( _a159 ); - while ( isDefined( _k159 ) ) - { - portal = _a159[ _k159 ]; - dist_sq = distance2dsquared( self.origin, portal.origin ); - if ( dist_sq < 4096 ) - { - remove_portal = portal; - break; - } - else - { - _k159 = getNextArrayKey( _a159, _k159 ); - } - } - if ( isDefined( remove_portal ) ) - { - arrayremovevalue( level.portals, remove_portal ); - portal portal_use( self ); - wait 0,5; - } - } -} - -portal_use( player ) -{ - player playsoundtoplayer( "zmb_screecher_portal_warp_2d", player ); - self thread teleport_player( player ); - playsoundatposition( "zmb_screecher_portal_end", self.hole.origin ); - self.hole delete(); - self.burrow_active = 0; -} - -teleport_player( player ) -{ - lights = getstructarray( "screecher_escape", "targetname" ); - lights = array_randomize( lights ); - dest_light = undefined; - _a198 = lights; - _k198 = getFirstArrayKey( _a198 ); - while ( isDefined( _k198 ) ) - { - light = _a198[ _k198 ]; - if ( light == self ) - { - } - else if ( light other_players_close_to_light( player ) ) - { - } - else - { - dest_light = light; - break; - } - _k198 = getNextArrayKey( _a198, _k198 ); - } - if ( isDefined( dest_light ) ) - { - playsoundatposition( "zmb_screecher_portal_arrive", dest_light.origin ); - player maps/mp/zombies/_zm_gump::player_teleport_blackscreen_on(); - player setorigin( dest_light.origin ); - player notify( "used_screecher_hole" ); - player maps/mp/zombies/_zm_stats::increment_client_stat( "screecher_teleporters_used", 0 ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "screecher_teleporters_used" ); - } -} - -other_players_close_to_light( ignore_player ) -{ - players = get_players(); - while ( players.size > 1 ) - { - _a236 = players; - _k236 = getFirstArrayKey( _a236 ); - while ( isDefined( _k236 ) ) - { - player = _a236[ _k236 ]; - if ( player == ignore_player ) - { - } - else - { - dist_sq = distance2dsquared( player.origin, self.origin ); - if ( dist_sq < 14400 ) - { - return 1; - } - } - _k236 = getNextArrayKey( _a236, _k236 ); - } - } - return 0; -} - -screecher_should_runaway( player ) -{ - if ( maps/mp/zm_transit::player_entered_safety_light( player ) ) - { -/# - screecher_print( "runaway: green light" ); -#/ - if ( !isDefined( player.screecher ) ) - { - player thread do_player_general_vox( "general", "screecher_flee_green" ); - } - return 1; - } - if ( maps/mp/zm_transit::player_entered_safety_zone( player ) ) - { -/# - screecher_print( "runaway: safety zone" ); -#/ - if ( !isDefined( player.screecher ) ) - { - player thread do_player_general_vox( "general", "screecher_flee" ); - } - return 1; - } - bus_dist_sq = distancesquared( player.origin, level.the_bus.origin ); - if ( bus_dist_sq < 62500 ) - { -/# - screecher_print( "runaway: bus" ); -#/ - if ( !isDefined( player.screecher ) ) - { - player thread do_player_general_vox( "general", "screecher_flee" ); - } - return 1; - } - return 0; -} - -transit_screecher_cleanup() -{ - green_light = self.green_light; - if ( isDefined( green_light ) ) - { - if ( isDefined( green_light.claimed ) ) - { - green_light.claimed = undefined; - } - if ( self.state == "burrow_started" ) - { -/# - screecher_print( "clean up portal" ); -#/ - green_light notify( "portal_stopped" ); - green_light.hole moveto( green_light.hole.start_origin, 1 ); - green_light.burrow_active = 0; - if ( isDefined( green_light.hole_fx ) ) - { - green_light.hole_fx delete(); - } - } - } -} - -screecher_init_done() -{ - self endon( "death" ); - while ( 1 ) - { - ground_ent = self getgroundent(); - if ( isDefined( ground_ent ) && ground_ent == level.the_bus ) - { - self dodamage( self.health + 666, self.origin ); -/# - screecher_print( "Died on bus" ); -#/ - } - wait 0,1; - } -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_ambush.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_ambush.gsc deleted file mode 100644 index 138b202..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_ambush.gsc +++ /dev/null @@ -1,295 +0,0 @@ -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zm_transit_bus; -#include maps/mp/zm_transit_utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -main() -{ - level.numroundssincelastambushround = 0; - level.numbusstopssincelastambushround = 0; - level.numambushrounds = 0; - level.ambushpercentageperstop = 10; - level.ambushpercentageperround = 25; - flag_init( "ambush_round", 0 ); - flag_init( "ambush_safe_area_active", 0 ); - initambusheffects(); - thread ambushroundkeeper(); -/# - adddebugcommand( "devgui_cmd "Zombies:1/Bus:14/Ambush Round:6/Always:1" "zombie_devgui ambush_round always"\n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Bus:14/Ambush Round:6/Never:2" "zombie_devgui ambush_round never"\n" ); -#/ -} - -initambusheffects() -{ - level._effect[ "ambush_bus_fire" ] = loadfx( "env/fire/fx_fire_md" ); -} - -shouldstartambushround() -{ -/# - if ( level.ambushpercentageperstop == 100 ) - { - return 1; - } - if ( getDvarInt( "zombie_cheat" ) == 2 ) - { - return 0; -#/ - } - if ( level.numbusstopssincelastambushround < 2 ) - { - } - randint = randomintrange( 0, 100 ); - percentchance = level.numbusstopssincelastambushround * level.ambushpercentageperstop; - if ( randint < percentchance ) - { - } - percentchance = level.numroundssincelastambushround * level.ambushpercentageperround; - if ( randint < percentchance ) - { - } - if ( maps/mp/zm_transit_bus::busgasempty() ) - { - return 1; - } - return 0; -} - -isambushroundactive() -{ - if ( flag_exists( "ambush_round" ) ) - { - return flag( "ambush_round" ); - } -} - -is_ambush_round_spawning_active() -{ - if ( flag_exists( "ambush_safe_area_active" ) ) - { - return flag( "ambush_safe_area_active" ); - } -} - -ambushstartround() -{ - flag_set( "ambush_round" ); - ambushroundthink(); -} - -ambushendround() -{ - level.the_bus.issafe = 1; - maps/mp/zm_transit_bus::busgasadd( 60 ); - level.numbusstopssincelastambushround = 0; - level.numroundssincelastambushround = 0; - flag_clear( "ambush_round" ); -} - -cancelambushround() -{ - flag_clear( "ambush_round" ); - flag_clear( "ambush_safe_area_active" ); - maps/mp/zm_transit_utility::try_resume_zombie_spawning(); - bbprint( "zombie_events", "category %s type %s round %d", "DOG", "stop", level.round_number ); - level.the_bus notify( "ambush_round_fail_safe" ); -} - -ambushroundspawning() -{ - level.numambushrounds++; - wait 6; - level.the_bus.issafe = 0; -} - -limitedambushspawn() -{ - if ( level.numambushrounds < 3 ) - { - dogcount = level.dog_targets.size * 6; - } - else - { - dogcount = level.dog_targets.size * 8; - } - setupdogspawnlocs(); - level thread ambushroundspawnfailsafe( 20 ); - while ( get_current_zombie_count() > 0 ) - { - wait 1; - } - level notify( "end_ambushWaitFunction" ); -} - -ambushroundthink() -{ - module = maps/mp/zombies/_zm_game_module::get_game_module( level.game_module_nml_index ); - if ( isDefined( module.hub_start_func ) ) - { - level thread [[ module.hub_start_func ]]( "nml" ); - level notify( "game_mode_started" ); - } - level thread ambushroundspawning(); - ambushwaitfunction(); - ambushendround(); -} - -ambushwaitfunction() -{ -} - -ambushpointfailsafe() -{ - level.the_bus endon( "ambush_point" ); - level.the_bus waittill( "reached_stop_point" ); - cancelambushround(); -} - -ambushroundspawnfailsafe( timer ) -{ - ambushroundtimelimit = timer; - currentambushtime = 0; - while ( currentambushtime < ambushroundtimelimit ) - { - if ( !flag( "ambush_round" ) ) - { - return; - } - wait 1; - currentambushtime++; - } - level notify( "end_ambushWaitFunction" ); - wait 5; - dogs = getaispeciesarray( "all", "zombie_dog" ); - i = 0; - while ( i < dogs.size ) - { - if ( isDefined( dogs[ i ].marked_for_death ) && dogs[ i ].marked_for_death ) - { - i++; - continue; - } - else - { - if ( is_magic_bullet_shield_enabled( dogs[ i ] ) ) - { - i++; - continue; - } - else - { - dogs[ i ] dodamage( dogs[ i ].health + 666, dogs[ i ].origin ); - } - } - i++; - } -} - -ambushdoghealthincrease() -{ - switch( level.numambushrounds ) - { - case 1: - level.dog_health = 400; - break; - case 2: - level.dog_health = 900; - break; - case 3: - level.dog_health = 1300; - break; - case 4: - level.dog_health = 1600; - break; - default: - level.dog_health = 1600; - break; - } -} - -ambushroundaftermath() -{ - power_up_origin = level.the_bus gettagorigin( "tag_body" ); - if ( isDefined( power_up_origin ) ) - { - level thread maps/mp/zombies/_zm_powerups::specific_powerup_drop( "full_ammo", power_up_origin ); - } -} - -ambushroundeffects() -{ - wait 2; - level thread ambushlightningeffect( "tag_body" ); - wait 0,5; - level thread ambushlightningeffect( "tag_wheel_back_left" ); - wait 0,5; - level thread ambushlightningeffect( "tag_wheel_back_right" ); - wait 0,5; - level thread ambushlightningeffect( "tag_wheel_front_left" ); - wait 0,5; - level thread ambushlightningeffect( "tag_wheel_front_right" ); - wait 1,5; - fxent0 = spawnandlinkfxtotag( level._effect[ "ambush_bus_fire" ], level.the_bus, "tag_body" ); - fxent1 = spawnandlinkfxtotag( level._effect[ "ambush_bus_fire" ], level.the_bus, "tag_wheel_back_left" ); - fxent2 = spawnandlinkfxtotag( level._effect[ "ambush_bus_fire" ], level.the_bus, "tag_wheel_back_right" ); - fxent3 = spawnandlinkfxtotag( level._effect[ "ambush_bus_fire" ], level.the_bus, "tag_wheel_front_left" ); - fxent4 = spawnandlinkfxtotag( level._effect[ "ambush_bus_fire" ], level.the_bus, "tag_wheel_front_right" ); - level waittill( "end_ambushWaitFunction" ); - fxent0 delete(); - fxent1 delete(); - fxent2 delete(); - fxent3 delete(); - fxent4 delete(); -} - -ambushlightningeffect( tag ) -{ - fxentlighting = spawnandlinkfxtotag( level._effect[ "lightning_dog_spawn" ], level.the_bus, tag ); - wait 5; - fxentlighting delete(); -} - -setupdogspawnlocs() -{ - level.enemy_dog_locations = []; - currentzone = undefined; - ambush_zones = getentarray( "ambush_volume", "script_noteworthy" ); - i = 0; - while ( i < ambush_zones.size ) - { - touching = 0; - b = 0; - while ( b < level.the_bus.bounds_origins.size && !touching ) - { - bounds = level.the_bus.bounds_origins[ b ]; - touching = bounds istouching( ambush_zones[ i ] ); - b++; - } - if ( touching ) - { - currentzone = ambush_zones[ i ]; - break; - } - else - { - i++; - } - } -/# - assert( isDefined( currentzone ), "Bus needs to be in an ambush zone for an ambush round: " + level.the_bus.origin ); -#/ - level.enemy_dog_locations = getstructarray( currentzone.target, "targetname" ); -} - -ambushroundkeeper() -{ - while ( 1 ) - { - level waittill( "between_round_over" ); - level.numroundssincelastambushround++; - } -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_automaton.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_automaton.gsc deleted file mode 100644 index 7629827..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_automaton.gsc +++ /dev/null @@ -1,654 +0,0 @@ -#include maps/mp/zm_transit_bus; -#include maps/mp/zm_transit_utility; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -#using_animtree( "zm_transit_automaton" ); - -init_animtree() -{ - scriptmodelsuseanimtree( -1 ); -} - -initaudioaliases() -{ - level.vox zmbvoxadd( "automaton", "scripted", "discover_bus", "near_station1", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "leaving_warning", "warning_out", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "leaving", "warning_leaving", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "emp_disable", "stop_generic", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "out_of_gas", "gas_out", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "refueled_gas", "gas_full", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "doors_open", "doors_open", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "doors_close", "doors_close", undefined ); - level.vox zmbvoxadd( "automaton", "convo", "player_enter", "player_enter", undefined ); - level.vox zmbvoxadd( "automaton", "convo", "player_leave", "player_exit", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "zombie_on_board", "zombie_enter", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "zombie_at_window", "zombie_attack", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "zombie_on_roof", "zombie_roof", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "player_attack_1", "player_1attack", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "player_attack_2", "player_2attack", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "player_attack_3", "player_3attack", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "hint_upgrade", "hint_upgrade", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "ride_generic", "ride_generic", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_station1", "near_station2", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_station2", "near_station2", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_station3", "near_station3", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_station4", "near_station4", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_station5", "near_station5", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_diner1", "near_diner1", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_diner2", "near_diner2", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_diner3", "near_diner3", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_diner4", "near_diner4", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_diner5", "near_diner5", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_tunnel1", "near_tunnel1", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_tunnel2", "near_tunnel2", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_tunnel3", "near_tunnel3", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_tunnel4", "near_tunnel4", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_tunnel5", "near_tunnel5", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_forest1_1", "near_1forest1", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_forest1_2", "near_1forest2", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_forest1_3", "near_1forest3", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_forest1_4", "near_1forest4", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_forest1_5", "near_1forest5", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_forest2_1", "near_2forest1", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_forest2_2", "near_2forest2", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_forest2_3", "near_2forest3", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_forest2_4", "near_2forest4", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_forest2_5", "near_2forest5", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_farm1", "near_farm1", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_farm2", "near_farm2", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_farm3", "near_farm3", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_farm4", "near_farm4", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_farm5", "near_farm5", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_corn1", "near_corn1", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_corn2", "near_corn2", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_corn3", "near_corn3", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_corn4", "near_corn4", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_corn5", "near_corn5", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_power1", "near_power1", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_power2", "near_power2", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_power3", "near_power3", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_power4", "near_power4", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_power5", "near_power5", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_town1", "near_town1", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_town2", "near_town2", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_town3", "near_town3", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_town4", "near_town4", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_town5", "near_town5", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_bridge1", "near_bridge1", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_bridge2", "near_bridge2", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_bridge3", "near_bridge3", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_bridge4", "near_bridge4", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "near_bridge5", "near_bridge5", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "leave_tunnel", "exit_tunnel1", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "bridge_collapse", "bridge_collapse", undefined ); - level.vox zmbvoxadd( "automaton", "inform", "player_pissed", "player_pissed", undefined ); -} - -main() -{ - level.automaton = getent( "bus_driver_head", "targetname" ); - level.automaton thread automatonsetup(); - level.timesplayerattackingautomaton = 0; - level.automaton.greeting_timer = 0; -} - -automatonsetup() -{ - self linkto( level.the_bus ); - self setmovingplatformenabled( 1 ); - self useanimtree( -1 ); - self setanim( %ai_zombie_bus_driver_idle ); - self addasspeakernpc( 1 ); - level.vox zmbvoxinitspeaker( "automaton", "vox_bus_", self ); - self thread automatondamagecallback(); - self thread automatonanimationsspeaking(); - self thread automatonemp(); - level thread bus_upgrade_vox(); -} - -automatondamagecallback() -{ - self setcandamage( 1 ); - self.health = 100000; - triggers = getentarray( "bus_door_trigger", "targetname" ); - while ( 1 ) - { - self waittill( "damage", amount, attacker, directionvec, point, type ); - self.health = 100000; - wait 1; - while ( isDefined( self.disabled_by_emp ) && !self.disabled_by_emp && isDefined( self.isspeaking ) || self.isspeaking && isDefined( level.playerattackingautomaton ) && level.playerattackingautomaton ) - { - continue; - } - self say_player_attack_vox(); - while ( level.timesplayerattackingautomaton < 3 ) - { - continue; - } - level.timesplayerattackingautomaton = 0; - if ( isDefined( attacker ) && isplayer( attacker ) ) - { - wait 5; - if ( !isDefined( self.dmgfxorigin ) ) - { - self.dmgfxorigin = spawn( "script_model", point ); - self.dmgfxorigin setmodel( "tag_origin" ); - if ( isDefined( type ) && type == "MOD_GRENADE_SPLASH" ) - { - self.dmgfxorigin.origin = self gettagorigin( "tag_origin" ) + vectorScale( ( 0, 0, 1 ), 40 ); - } - self.dmgfxorigin linkto( self, "J_neck" ); - } - wait 0,5; - playfxontag( level._effect[ "switch_sparks" ], self.dmgfxorigin, "tag_origin" ); - _a204 = triggers; - _k204 = getFirstArrayKey( _a204 ); - while ( isDefined( _k204 ) ) - { - trigger = _a204[ _k204 ]; - trigger setinvisibletoall(); - _k204 = getNextArrayKey( _a204, _k204 ); - } - level.the_bus.force_lock_doors = 1; - if ( randomint( 100 ) > 50 ) - { - if ( isDefined( level.the_bus.skip_next_destination ) && !level.the_bus.skip_next_destination ) - { - level thread bus_skip_destination(); - } - level thread automatonspeak( "inform", "player_pissed", undefined, 0 ); - } - else - { - level thread automatonspeak( "inform", "player_pissed", undefined, 1 ); - } - if ( level.the_bus.doorsclosed ) - { - triggers[ 0 ] playsound( "zmb_bus_door_open" ); - level.the_bus maps/mp/zm_transit_bus::busdoorsopen(); - wait 1,25; - shove_players_off_bus(); - wait 1,25; - triggers[ 0 ] playsound( "zmb_bus_door_close" ); - level.the_bus maps/mp/zm_transit_bus::busdoorsclose(); - } - else - { - shove_players_off_bus(); - wait 1,25; - triggers[ 0 ] playsound( "zmb_bus_door_close" ); - level.the_bus maps/mp/zm_transit_bus::busdoorsclose(); - } - wait 3,5; - level thread automatonspeak( "inform", "player_pissed", undefined, 2 ); - wait 28; - _a245 = triggers; - _k245 = getFirstArrayKey( _a245 ); - while ( isDefined( _k245 ) ) - { - trigger = _a245[ _k245 ]; - trigger setvisibletoall(); - _k245 = getNextArrayKey( _a245, _k245 ); - } - level.the_bus.force_lock_doors = 0; - } - if ( isDefined( self.dmgfxorigin ) ) - { - self.dmgfxorigin unlink(); - self.dmgfxorigin delete(); - self.dmgfxorigin = undefined; - } - } -} - -bus_skip_destination() -{ - level.the_bus.skip_next_destination = 1; - level.the_bus waittill( "skipping_destination" ); - level.the_bus.skip_next_destination = 0; -} - -automatonanimationsspeaking() -{ - self thread bus_driver_idle(); - while ( 1 ) - { - self waittill( "want_to_be_speaking", speakingline ); - self.isplayingspeakinganim = 1; - while ( isDefined( self.isplayingidleanim ) && self.isplayingidleanim ) - { - wait 0,05; - } - self notify( "startspeaking" ); - while ( isDefined( self.disabled_by_emp ) && self.disabled_by_emp ) - { - self.isplayingspeakinganim = 0; - } - speakinganim = %ai_zombie_bus_driver_idle_dialog; - speakingnum = 0; - if ( issubstr( speakingline, "attack" ) || issubstr( speakingline, "pissed" ) ) - { - speakinganim = %ai_zombie_bus_driver_idle_dialog_angry; - speakingnum = 1; - } - else - { - if ( issubstr( speakingline, "warning_out" ) || is_true( level.bus_driver_focused ) ) - { - speakinganim = %ai_zombie_bus_driver_idle_dialog_focused; - speakingnum = 2; - break; - } - else - { - if ( issubstr( speakingline, "zombie_enter" ) || isDefined( level.bus_zombie_danger ) && level.bus_zombie_danger ) - { - speakinganim = %ai_zombie_bus_driver_idle_dialog_panicked; - speakingnum = 3; - break; - } - else - { - if ( issubstr( speakingline, "stop_generic" ) || issubstr( speakingline, "warning_leaving" ) ) - { - speakinganim = %ai_zombie_bus_driver_idle_dialog_panicked; - speakingnum = 3; - break; - } - else - { - if ( issubstr( speakingline, "player_enter" ) ) - { - speakinganim = %ai_zombie_bus_driver_player_enter; - speakingnum = 4; - break; - } - else if ( issubstr( speakingline, "player_leave" ) ) - { - speakinganim = %ai_zombie_bus_driver_player_exit; - speakingnum = 5; - break; - } - else if ( issubstr( speakingline, "generic" ) ) - { - if ( randomint( 100 ) > 50 ) - { - speakinganim = %ai_zombie_bus_driver_forward_short_dialog; - speakingnum = 7; - } - else - { - speakinganim = %ai_zombie_bus_driver_turnback_short_dialog; - speakingnum = 6; - } - break; - } - else if ( issubstr( speakingline, "discover" ) ) - { - speakinganim = %ai_zombie_bus_driver_idle_dialog; - speakingnum = 0; - break; - } - else - { - if ( isDefined( level.stops ) && isDefined( level.stops[ "depot" ] ) && level.stops[ "depot" ] < 1 && issubstr( speakingline, "near_" ) ) - { - speakinganim = %ai_zombie_bus_driver_forward_short_dialog; - speakingnum = 7; - } - } - } - } - } - } - self setanim( speakinganim ); - self thread sndspeakinganimaudio( speakingnum ); -/# - if ( getDvar( #"96F6EBD9" ) != "" ) - { - iprintlnbold( "" + speakinganim ); -#/ - } - wait getanimlength( speakinganim ); - self.isplayingspeakinganim = 0; - } -} - -bus_driver_idle() -{ - danger_anims = []; - danger_anims[ 0 ] = %ai_zombie_bus_driver_idle_twitch_a; - danger_anims[ 1 ] = %ai_zombie_bus_driver_idle_twitch_focused; - danger_anims[ 2 ] = %ai_zombie_bus_driver_idle_twitch_panicked; - danger_anims[ 3 ] = %ai_zombie_bus_driver_idle_twitch_b; - focused_anims = []; - focused_anims[ 0 ] = %ai_zombie_bus_driver_idle_twitch_panicked; - focused_anims[ 1 ] = %ai_zombie_bus_driver_idle_twitch_focused; - twitch_anims = []; - twitch_anims[ 0 ] = %ai_zombie_bus_driver_idle_twitch_a; - twitch_anims[ 1 ] = %ai_zombie_bus_driver_idle_twitch_b; - idle_anims = []; - idle_anims[ 0 ] = %ai_zombie_bus_driver_idle_a; - idle_anims[ 1 ] = %ai_zombie_bus_driver_idle_b; - idle_anims[ 2 ] = %ai_zombie_bus_driver_idle_c; - idle_anims[ 3 ] = %ai_zombie_bus_driver_idle_d; - idle_anims[ 4 ] = %ai_zombie_bus_driver_idle; - while ( 1 ) - { - while ( isDefined( self.isplayingspeakinganim ) || self.isplayingspeakinganim && isDefined( self.disabled_by_emp ) && self.disabled_by_emp ) - { - wait 0,05; - } - if ( isDefined( level.bus_zombie_danger ) && level.bus_zombie_danger ) - { - driveranim = random( danger_anims ); - } - else - { - if ( is_true( level.bus_driver_focused ) ) - { - driveranim = random( focused_anims ); - break; - } - else if ( randomint( 100 ) > 90 ) - { - driveranim = random( twitch_anims ); - break; - } - else - { - driveranim = random( idle_anims ); - } - } - if ( isDefined( self.previous_anim ) && self.previous_anim == driveranim && driveranim != %ai_zombie_bus_driver_idle ) - { - driveranim = %ai_zombie_bus_driver_idle; - } -/# - if ( getDvar( #"6DF184E8" ) != "" ) - { - iprintlnbold( "Idle:" + driveranim ); -#/ - } - self.isplayingidleanim = 1; - self setanim( driveranim ); - self thread sndplaydriveranimsnd( driveranim ); - wait getanimlength( driveranim ); - self.previous_anim = driveranim; - self.isplayingidleanim = 0; - } -} - -automatonemp() -{ - while ( 1 ) - { - if ( isDefined( level.the_bus.disabled_by_emp ) && !level.the_bus.disabled_by_emp ) - { - level.the_bus waittill( "pre_power_off" ); - } - level.automaton.disabled_by_emp = 1; - level.automaton setanim( %ai_zombie_bus_driver_emp_powerdown ); - self thread sndplaydriveranimsnd( %ai_zombie_bus_driver_emp_powerdown ); - level.automaton maps/mp/zombies/_zm_audio::create_and_play_dialog( "inform", "emp_disable" ); - wait getanimlength( %ai_zombie_bus_driver_emp_powerdown ); - level.automaton setanim( %ai_zombie_bus_driver_emp_powerdown_idle ); - if ( isDefined( level.the_bus.pre_disabled_by_emp ) || level.the_bus.pre_disabled_by_emp && isDefined( level.the_bus.disabled_by_emp ) && level.the_bus.disabled_by_emp ) - { - level.the_bus waittill( "power_on" ); - } - level.automaton setanim( %ai_zombie_bus_driver_emp_powerup ); - self thread sndplaydriveranimsnd( %ai_zombie_bus_driver_emp_powerup ); - wait getanimlength( %ai_zombie_bus_driver_emp_powerup ); - level.automaton.disabled_by_emp = 0; - self setanim( %ai_zombie_bus_driver_idle ); - } -} - -say_player_attack_vox() -{ - if ( isDefined( level.the_bus.force_lock_doors ) && level.the_bus.force_lock_doors ) - { - level.timesplayerattackingautomaton = 0; - return; - } - else - { - if ( isDefined( level.playerattackingautomaton ) && level.playerattackingautomaton ) - { - return; - } - } - level.playerattackingautomaton = 1; - if ( level.timesplayerattackingautomaton == 0 ) - { - level thread automaton_attack_reset_timer(); - } - level.timesplayerattackingautomaton++; - level thread automatonspeak( "inform", "player_attack_" + level.timesplayerattackingautomaton ); - if ( level.timesplayerattackingautomaton >= 3 ) - { - level notify( "automaton_threshold_reached" ); - } - level thread automaton_attack_choke_timer(); -} - -automaton_attack_choke_timer() -{ - wait 10; - level.playerattackingautomaton = 0; -} - -automaton_attack_reset_timer() -{ - level endon( "automaton_threshold_reached" ); - wait 60; - level.timesplayerattackingautomaton = 0; -} - -bus_upgrade_vox() -{ - ladder_trig = getent( "bus_ladder_trigger", "targetname" ); - plow_trig = getent( "trigger_plow", "targetname" ); - hatch_trig = getent( "bus_hatch_bottom_trigger", "targetname" ); - while ( 1 ) - { - while ( isDefined( level.stops ) && isDefined( level.stops[ "depot" ] ) && level.stops[ "depot" ] < 1 ) - { - wait 1; - } - should_say_upgrade = -1; - players = get_players(); - _a534 = players; - _k534 = getFirstArrayKey( _a534 ); - while ( isDefined( _k534 ) ) - { - player = _a534[ _k534 ]; - if ( isDefined( player.isonbus ) && player.isonbus ) - { - if ( distancesquared( player.origin, hatch_trig.origin ) < 5184 && !flag( "hatch_attached" ) ) - { - should_say_upgrade = 2; - } - } - else - { - if ( distancesquared( player.origin, plow_trig.origin ) < 9216 && !flag( "catcher_attached" ) ) - { - should_say_upgrade = 1; - break; - } - else - { - if ( distancesquared( player.origin, ladder_trig.origin ) < 9216 && !flag( "ladder_attached" ) ) - { - should_say_upgrade = 0; - } - } - } - _k534 = getNextArrayKey( _a534, _k534 ); - } - if ( should_say_upgrade > -1 ) - { - level thread automatonspeak( "inform", "hint_upgrade", undefined, should_say_upgrade ); - wait 60; - } - wait 1; - } -} - -shove_players_off_bus() -{ - playfxontag( level._effect[ "turbine_on" ], level.automaton, "J_neck" ); - wait 0,25; - level.automaton playsound( "zmb_powerup_grabbed" ); - players = get_players(); - _a572 = players; - _k572 = getFirstArrayKey( _a572 ); - while ( isDefined( _k572 ) ) - { - player = _a572[ _k572 ]; - if ( isDefined( player.isonbus ) && player.isonbus ) - { - dir = anglesToRight( level.the_bus.angles ); - dir = vectornormalize( dir ); - player_velocity = dir * 900; - player setvelocity( player_velocity ); - earthquake( 0,25, 1, player.origin, 256, player ); - } - _k572 = getNextArrayKey( _a572, _k572 ); - } -} - -sndspeakinganimaudio( num ) -{ - switch( num ) - { - case 0: - wait 0,4; - self playsound( "evt_zmb_robot_jerk" ); - wait 2,4; - self playsound( "evt_zmb_robot_jerk" ); - wait 2,25; - self playsound( "evt_zmb_robot_jerk" ); - wait 1,1; - self playsound( "evt_zmb_robot_jerk" ); - break; - case 1: - wait 0,31; - self playsound( "evt_zmb_robot_jerk" ); - wait 3,55; - self playsound( "evt_zmb_robot_jerk" ); - break; - case 2: - wait 0,18; - self playsound( "evt_zmb_robot_jerk" ); - wait 4,83; - self playsound( "evt_zmb_robot_jerk" ); - break; - case 3: - wait 0,23; - self playsound( "evt_zmb_robot_jerk" ); - wait 0,77; - self playsound( "evt_zmb_robot_jerk" ); - wait 1,4; - self playsound( "evt_zmb_robot_jerk" ); - wait 0,15; - self playsound( "evt_zmb_robot_spin" ); - wait 0,53; - self playsound( "evt_zmb_robot_hat" ); - break; - case 4: - wait 0,3; - self playsound( "evt_zmb_robot_jerk" ); - wait 3,64; - self playsound( "evt_zmb_robot_jerk" ); - break; - case 5: - wait 0,38; - self playsound( "evt_zmb_robot_jerk" ); - wait 3,4; - self playsound( "evt_zmb_robot_jerk" ); - break; - case 6: - wait 0,3; - self playsound( "evt_zmb_robot_jerk" ); - break; - case 7: - } - } -} - -sndplaydriveranimsnd( the_anim ) -{ - if ( the_anim == %ai_zombie_bus_driver_idle_twitch_a ) - { - wait 0,55; - self playsound( "evt_zmb_robot_jerk" ); - wait 1,2; - self playsound( "evt_zmb_robot_hat" ); - wait 0,79; - self playsound( "evt_zmb_robot_spin" ); - wait 1,1; - self playsound( "evt_zmb_robot_hat" ); - self playsound( "evt_zmb_robot_spin" ); - } - else if ( the_anim == %ai_zombie_bus_driver_idle_twitch_focused ) - { - wait 0,25; - self playsound( "evt_zmb_robot_jerk" ); - wait 4,8; - self playsound( "evt_zmb_robot_jerk" ); - } - else if ( the_anim == %ai_zombie_bus_driver_idle_twitch_panicked ) - { - wait 0,31; - self playsound( "evt_zmb_robot_jerk" ); - wait 0,79; - self playsound( "evt_zmb_robot_jerk" ); - wait 1,3; - self playsound( "evt_zmb_robot_jerk" ); - wait 0,18; - self playsound( "evt_zmb_robot_spin" ); - wait 0,52; - self playsound( "evt_zmb_robot_hat" ); - } - else if ( the_anim == %ai_zombie_bus_driver_idle_twitch_b ) - { - wait 0,22; - self playsound( "evt_zmb_robot_hat" ); - wait 1,06; - self playsound( "evt_zmb_robot_spin" ); - wait 1,05; - self playsound( "evt_zmb_robot_hat" ); - wait 1,07; - self playsound( "evt_zmb_robot_spin" ); - wait 0,59; - self playsound( "evt_zmb_robot_hat" ); - } - else if ( the_anim == %ai_zombie_bus_driver_idle_d ) - { - wait 0,24; - self playsound( "evt_zmb_robot_spin" ); - wait 1,04; - self playsound( "evt_zmb_robot_hat" ); - } - else if ( the_anim == %ai_zombie_bus_driver_emp_powerdown ) - { - wait 0,1; - self playsound( "evt_zmb_robot_jerk" ); - wait 0,9; - self playsound( "evt_zmb_robot_jerk" ); - } - else - { - if ( the_anim == %ai_zombie_bus_driver_emp_powerup ) - { - wait 0,63; - self playsound( "evt_zmb_robot_jerk" ); - } - } -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_buildables.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_buildables.gsc deleted file mode 100644 index ae30dcd..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_buildables.gsc +++ /dev/null @@ -1,442 +0,0 @@ -#include maps/mp/zm_transit_sq; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zm_transit_utility; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init_buildables() -{ - level.buildable_piece_count = 27; - add_zombie_buildable( "riotshield_zm", &"ZOMBIE_BUILD_RIOT", &"ZOMBIE_BUILDING_RIOT", &"ZOMBIE_BOUGHT_RIOT" ); - add_zombie_buildable( "jetgun_zm", &"ZOMBIE_BUILD_JETGUN", &"ZOMBIE_BUILDING_JETGUN", &"ZOMBIE_BOUGHT_JETGUN" ); - add_zombie_buildable( "turret", &"ZOMBIE_BUILD_TURRET", &"ZOMBIE_BUILDING_TURRET", &"ZOMBIE_BOUGHT_TURRET" ); - add_zombie_buildable( "electric_trap", &"ZOMBIE_BUILD_ELECTRIC_TRAP", &"ZOMBIE_BUILDING_ELECTRIC_TRAP", &"ZOMBIE_BOUGHT_ELECTRIC_TRAP" ); - add_zombie_buildable( "cattlecatcher", &"ZOMBIE_BUILD_CATTLE_CATCHER", &"ZOMBIE_BUILDING_CATTLE_CATCHER" ); - add_zombie_buildable( "bushatch", &"ZOMBIE_BUILD_BUSHATCH", &"ZOMBIE_BUILDING_BUSHATCH" ); - add_zombie_buildable( "dinerhatch", &"ZOMBIE_BUILD_DINERHATCH", &"ZOMBIE_BUILDING_DINERHATCH" ); - add_zombie_buildable( "busladder", &"ZOMBIE_BUILD_BUSLADDER", &"ZOMBIE_BUILDING_BUSLADDER" ); - add_zombie_buildable( "powerswitch", &"ZOMBIE_BUILD_POWER_SWITCH", &"ZOMBIE_BUILDING_POWER_SWITCH" ); - add_zombie_buildable( "pap", &"ZOMBIE_BUILD_PAP", &"ZOMBIE_BUILDING_PAP" ); - add_zombie_buildable( "turbine", &"ZOMBIE_BUILD_TURBINE", &"ZOMBIE_BUILDING_TURBINE", &"ZOMBIE_BOUGHT_TURBINE" ); - add_zombie_buildable( "sq_common", &"ZOMBIE_BUILD_SQ_COMMON", &"ZOMBIE_BUILDING_SQ_COMMON" ); -} - -include_buildables() -{ - battery = generate_zombie_buildable_piece( "pap", "p6_zm_buildable_battery", 32, 64, 0, "zm_hud_icon_battery", ::onpickup_common, ::ondrop_common, undefined, "tag_part_03", undefined, 1 ); - riotshield_dolly = generate_zombie_buildable_piece( "riotshield_zm", "t6_wpn_zmb_shield_dolly", 32, 64, 0, "zm_hud_icon_dolly", ::onpickup_common, ::ondrop_common, undefined, "TAG_RIOT_SHIELD_DOLLY", undefined, 2 ); - riotshield_door = generate_zombie_buildable_piece( "riotshield_zm", "t6_wpn_zmb_shield_door", 48, 15, 25, "zm_hud_icon_cardoor", ::onpickup_common, ::ondrop_common, undefined, "TAG_RIOT_SHIELD_DOOR", undefined, 3 ); - riotshield = spawnstruct(); - riotshield.name = "riotshield_zm"; - riotshield add_buildable_piece( riotshield_dolly ); - riotshield add_buildable_piece( riotshield_door ); - riotshield.onbuyweapon = ::onbuyweapon_riotshield; - riotshield.triggerthink = ::riotshieldbuildable; - include_buildable( riotshield ); - maps/mp/zombies/_zm_buildables::hide_buildable_table_model( "riotshield_zm_buildable_trigger" ); - powerswitch_arm = generate_zombie_buildable_piece( "powerswitch", "p6_zm_buildable_pswitch_hand", 32, 64, 10, "zm_hud_icon_arm", ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, 4 ); - powerswitch_lever = generate_zombie_buildable_piece( "powerswitch", "p6_zm_buildable_pswitch_body", 48, 64, 0, "zm_hud_icon_panel", ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, 5 ); - powerswitch_box = generate_zombie_buildable_piece( "powerswitch", "p6_zm_buildable_pswitch_lever", 32, 15, 0, "zm_hud_icon_lever", ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, 6 ); - powerswitch = spawnstruct(); - powerswitch.name = "powerswitch"; - powerswitch add_buildable_piece( powerswitch_arm ); - powerswitch add_buildable_piece( powerswitch_lever ); - powerswitch add_buildable_piece( powerswitch_box ); - powerswitch.onuseplantobject = ::onuseplantobject_powerswitch; - powerswitch.triggerthink = ::powerswitchbuildable; - include_buildable( powerswitch ); - packapunch_machine = generate_zombie_buildable_piece( "pap", "p6_zm_buildable_pap_body", 48, 64, 0, "zm_hud_icon_papbody", ::onpickup_common, ::ondrop_common, undefined, "tag_part_02", undefined, 7 ); - packapunch_legs = generate_zombie_buildable_piece( "pap", "p6_zm_buildable_pap_table", 48, 15, 0, "zm_hud_icon_chairleg", ::onpickup_common, ::ondrop_common, undefined, "tag_part_01", undefined, 8 ); - packapunch = spawnstruct(); - packapunch.name = "pap"; - packapunch add_buildable_piece( battery, "tag_part_03", 0 ); - packapunch add_buildable_piece( packapunch_machine ); - packapunch add_buildable_piece( packapunch_legs ); - packapunch.triggerthink = ::papbuildable; - include_buildable( packapunch ); - maps/mp/zombies/_zm_buildables::hide_buildable_table_model( "pap_buildable_trigger" ); - turbine_fan = generate_zombie_buildable_piece( "turbine", "p6_zm_buildable_turbine_fan", 32, 64, 0, "zm_hud_icon_fan", ::onpickup_common, ::ondrop_common, undefined, "tag_part_03", undefined, 9 ); - turbine_panel = generate_zombie_buildable_piece( "turbine", "p6_zm_buildable_turbine_rudder", 32, 64, 0, "zm_hud_icon_rudder", ::onpickup_common, ::ondrop_common, undefined, "tag_part_04", undefined, 10 ); - turbine_body = generate_zombie_buildable_piece( "turbine", "p6_zm_buildable_turbine_mannequin", 32, 15, 0, "zm_hud_icon_mannequin", ::onpickup_common, ::ondrop_common, undefined, "tag_part_01", undefined, 11 ); - turbine = spawnstruct(); - turbine.name = "turbine"; - turbine add_buildable_piece( turbine_fan ); - turbine add_buildable_piece( turbine_panel ); - turbine add_buildable_piece( turbine_body ); - turbine.onuseplantobject = ::onuseplantobject_turbine; - turbine.triggerthink = ::turbinebuildable; - include_buildable( turbine ); - maps/mp/zombies/_zm_buildables::hide_buildable_table_model( "turbine_buildable_trigger" ); - turret_barrel = generate_zombie_buildable_piece( "turret", "t6_wpn_lmg_rpd_world", 32, 64, 10, "zm_hud_icon_turrethead", ::onpickup_common, ::ondrop_common, undefined, "tag_aim", undefined, 12 ); - turret_body = generate_zombie_buildable_piece( "turret", "p6_zm_buildable_turret_mower", 48, 64, 0, "zm_hud_icon_lawnmower", ::onpickup_common, ::ondrop_common, undefined, "tag_part_01", undefined, 13 ); - turret_ammo = generate_zombie_buildable_piece( "turret", "p6_zm_buildable_turret_ammo", 32, 15, 0, "zm_hud_icon_ammobox", ::onpickup_common, ::ondrop_common, undefined, "tag_part_02", undefined, 14 ); - turret = spawnstruct(); - turret.name = "turret"; - turret add_buildable_piece( turret_barrel ); - turret add_buildable_piece( turret_body ); - turret add_buildable_piece( turret_ammo ); - turret.triggerthink = ::turretbuildable; - include_buildable( turret ); - maps/mp/zombies/_zm_buildables::hide_buildable_table_model( "turret_buildable_trigger" ); - electric_trap_spool = generate_zombie_buildable_piece( "electric_trap", "p6_zm_buildable_etrap_base", 32, 64, 0, "zm_hud_icon_coil", ::onpickup_common, ::ondrop_common, undefined, "tag_part_02", undefined, 15 ); - electric_trap_coil = generate_zombie_buildable_piece( "electric_trap", "p6_zm_buildable_etrap_tvtube", 32, 64, 10, "zm_hud_icon_tvtube", ::onpickup_common, ::ondrop_common, undefined, "tag_part_01", undefined, 16 ); - electric_trap = spawnstruct(); - electric_trap.name = "electric_trap"; - electric_trap add_buildable_piece( electric_trap_spool ); - electric_trap add_buildable_piece( electric_trap_coil ); - electric_trap add_buildable_piece( battery, "tag_part_03", 0 ); - electric_trap.triggerthink = ::electrictrapbuildable; - include_buildable( electric_trap ); - maps/mp/zombies/_zm_buildables::hide_buildable_table_model( "electric_trap_buildable_trigger" ); - jetgun_wires = generate_zombie_buildable_piece( "jetgun_zm", "p6_zm_buildable_jetgun_wires", 32, 64, 0, "zm_hud_icon_jetgun_wires", ::onpickup_common, ::ondrop_common, undefined, "TAG_WIRES", undefined, 17 ); - jetgun_engine = generate_zombie_buildable_piece( "jetgun_zm", "p6_zm_buildable_jetgun_engine", 48, 64, 0, "zm_hud_icon_jetgun_engine", ::onpickup_common, ::ondrop_common, undefined, "TAG_ENGINE", undefined, 18 ); - jetgun_gauges = generate_zombie_buildable_piece( "jetgun_zm", "p6_zm_buildable_jetgun_guages", 32, 15, 0, "zm_hud_icon_jetgun_gauges", ::onpickup_common, ::ondrop_common, undefined, "TAG_DIALS", undefined, 19 ); - jetgun_handle = generate_zombie_buildable_piece( "jetgun_zm", "p6_zm_buildable_jetgun_handles", 32, 15, 0, "zm_hud_icon_jetgun_handles", ::onpickup_common, ::ondrop_common, undefined, "TAG_HANDLES", undefined, 20 ); - jetgun = spawnstruct(); - jetgun.name = "jetgun_zm"; - jetgun add_buildable_piece( jetgun_wires ); - jetgun add_buildable_piece( jetgun_engine ); - jetgun add_buildable_piece( jetgun_gauges ); - jetgun add_buildable_piece( jetgun_handle ); - jetgun.onbuyweapon = ::onbuyweapon_jetgun; - jetgun.triggerthink = ::jetgunbuildable; - include_buildable( jetgun ); - maps/mp/zombies/_zm_buildables::hide_buildable_table_model( "jetgun_zm_buildable_trigger" ); - cattlecatcher_plow = generate_zombie_buildable_piece( "cattlecatcher", "veh_t6_civ_bus_zombie_cow_catcher", 72, 100, 20, "zm_hud_icon_plow", ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, 21 ); - bushatch_hatch = generate_zombie_buildable_piece( "bushatch", "veh_t6_civ_bus_zombie_roof_hatch", 32, 64, 5, "zm_hud_icon_hatch", ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, 22 ); - busladder_ladder = generate_zombie_buildable_piece( "busladder", "com_stepladder_large_closed", 32, 64, 0, "zm_hud_icon_ladder", ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, 23 ); - cattlecatcher = spawnstruct(); - cattlecatcher.name = "cattlecatcher"; - cattlecatcher add_buildable_piece( cattlecatcher_plow ); - cattlecatcher.triggerthink = ::cattlecatcherbuildable; - include_buildable( cattlecatcher ); - bushatch = spawnstruct(); - bushatch.name = "bushatch"; - bushatch add_buildable_piece( bushatch_hatch, undefined, 1 ); - bushatch.triggerthink = ::bushatchbuildable; - include_buildable( bushatch ); - dinerhatch = spawnstruct(); - dinerhatch.name = "dinerhatch"; - dinerhatch add_buildable_piece( bushatch_hatch, undefined, 1 ); - dinerhatch.triggerthink = ::dinerhatchbuildable; - include_buildable( dinerhatch ); - busladder = spawnstruct(); - busladder.name = "busladder"; - busladder add_buildable_piece( busladder_ladder ); - busladder.triggerthink = ::busladderbuildable; - include_buildable( busladder ); - if ( !isDefined( level.gamedifficulty ) || level.gamedifficulty != 0 ) - { - sq_common_electricbox = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_electric_box", 32, 64, 0, "zm_hud_icon_sq_powerbox", ::onpickup_common, ::ondrop_common, undefined, "tag_part_02", undefined, 24 ); - sq_common_meteor = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_meteor", 76, 64, 0, "zm_hud_icon_sq_meteor", ::onpickup_common, ::ondrop_common, undefined, "tag_part_04", undefined, 25 ); - sq_common_scaffolding = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_scaffolding", 64, 96, 0, "zm_hud_icon_sq_scafold", ::onpickup_common, ::ondrop_common, undefined, "tag_part_01", undefined, 26 ); - sq_common_transceiver = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_transceiver", 64, 96, 0, "zm_hud_icon_sq_tranceiver", ::onpickup_common, ::ondrop_common, undefined, "tag_part_03", undefined, 27 ); - sqcommon = spawnstruct(); - sqcommon.name = "sq_common"; - sqcommon add_buildable_piece( sq_common_electricbox ); - sqcommon add_buildable_piece( sq_common_meteor ); - sqcommon add_buildable_piece( sq_common_scaffolding ); - sqcommon add_buildable_piece( sq_common_transceiver ); - sqcommon.triggerthink = ::sqcommonbuildable; - include_buildable( sqcommon ); - maps/mp/zombies/_zm_buildables::hide_buildable_table_model( "sq_common_buildable_trigger" ); - } -} - -sqcommonbuildable() -{ - level.sq_buildable = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "sq_common_buildable_trigger", "sq_common", "sq_common", "", 1, 0 ); -} - -busladderbuildable() -{ - blb = maps/mp/zombies/_zm_buildables::vehicle_buildable_trigger_think( level.the_bus, "bus_ladder_trigger", "busladder", "busladder", "", 0, 0 ); - blb.require_look_at = 0; - blb.custom_buildablestub_update_prompt = ::busisonormovingbuildableupdateprompt; -} - -busisonormovingbuildableupdateprompt( player, sethintstringnow, buildabletrigger ) -{ - if ( isDefined( player.isonbus ) || player.isonbus && level.the_bus getspeedmph() > 0 ) - { - if ( isDefined( self ) ) - { - self.hint_string = ""; - if ( isDefined( sethintstringnow ) && sethintstringnow && isDefined( buildabletrigger ) ) - { - buildabletrigger sethintstring( self.hint_string ); - } - } - return 0; - } - return 1; -} - -bushatchbuildable() -{ - bhb = maps/mp/zombies/_zm_buildables::vehicle_buildable_trigger_think( level.the_bus, "bus_hatch_bottom_trigger", "bushatch", "bushatch", "", 0, 0 ); - bhb.require_look_at = 0; -} - -dinerhatchbuildable() -{ - dhb = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "diner_hatch_trigger", "dinerhatch", "dinerhatch", "", 1, 0 ); - dhb.require_look_at = 0; -} - -cattlecatcherbuildable() -{ - ccb = maps/mp/zombies/_zm_buildables::vehicle_buildable_trigger_think( level.the_bus, "trigger_plow", "cattlecatcher", "cattlecatcher", "", 0, 0 ); - ccb.require_look_at = 0; - ccb.custom_buildablestub_update_prompt = ::busisonormovingbuildableupdateprompt; -} - -papbuildable() -{ - maps/mp/zombies/_zm_buildables::buildable_trigger_think( "pap_buildable_trigger", "pap", "pap", "", 1, 0 ); -} - -riotshieldbuildable() -{ - maps/mp/zombies/_zm_buildables::buildable_trigger_think( "riotshield_zm_buildable_trigger", "riotshield_zm", "riotshield_zm", &"ZOMBIE_GRAB_RIOTSHIELD", 1, 1 ); -} - -powerswitchbuildable() -{ - maps/mp/zombies/_zm_buildables::buildable_trigger_think( "powerswitch_buildable_trigger", "powerswitch", "powerswitch", "", 1, 0 ); -} - -turbinebuildable() -{ - level.turbine_buildable = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "turbine_buildable_trigger", "turbine", "equip_turbine_zm", &"ZOMBIE_GRAB_TURBINE_PICKUP_HINT_STRING", 1, 1 ); -} - -turretbuildable() -{ - maps/mp/zombies/_zm_buildables::buildable_trigger_think( "turret_buildable_trigger", "turret", "equip_turret_zm", &"ZOMBIE_GRAB_TURRET_PICKUP_HINT_STRING", 1, 1 ); -} - -electrictrapbuildable() -{ - maps/mp/zombies/_zm_buildables::buildable_trigger_think( "electric_trap_buildable_trigger", "electric_trap", "equip_electrictrap_zm", &"ZOMBIE_GRAB_ELECTRICTRAP", 1, 1 ); -} - -jetgunbuildable() -{ - level.jetgun_buildable = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "jetgun_zm_buildable_trigger", "jetgun_zm", "jetgun_zm", &"ZOMBIE_GRAB_JETGUN", 1, 1 ); -} - -ondrop_common( player ) -{ -/# - println( "ZM >> Common part callback onDrop()" ); -#/ - self droponbus( player ); - self.piece_owner = undefined; -} - -onpickup_common( player ) -{ -/# - println( "ZM >> Common part callback onPickup()" ); -#/ - player playsound( "zmb_buildable_pickup" ); - self pickupfrombus(); - self.piece_owner = player; - if ( isDefined( self.buildablename ) ) - { - if ( self.buildablename == "turbine" ) - { - check_for_buildable_turbine_vox( level.turbine_buildable, 0 ); - return; - } - else - { - if ( self.buildablename == "jetgun_zm" ) - { - check_for_buildable_jetgun_vox( level.jetgun_buildable, 0 ); - } - } - } -} - -onbuyweapon_riotshield( player ) -{ - if ( isDefined( player.player_shield_reset_health ) ) - { - player [[ player.player_shield_reset_health ]](); - } - if ( isDefined( player.player_shield_reset_location ) ) - { - player [[ player.player_shield_reset_location ]](); - } -} - -onuseplantobject_powerswitch( player ) -{ -/# - println( "ZM >> PowerSwitch Buildable CallBack onUsePlantObject()" ); -#/ - if ( !isDefined( player player_get_buildable_piece() ) ) - { - return; - } - switch( player player_get_buildable_piece().modelname ) - { - case "p6_zm_buildable_pswitch_hand": - getent( "powerswitch_p6_zm_buildable_pswitch_hand", "targetname" ) show(); - break; - case "p6_zm_buildable_pswitch_body": - panel = getent( "powerswitch_p6_zm_buildable_pswitch_body", "targetname" ); - panel show(); - break; - case "p6_zm_buildable_pswitch_lever": - getent( "powerswitch_p6_zm_buildable_pswitch_lever", "targetname" ) show(); - break; - } -} - -onuseplantobject_turbine( player ) -{ -/# - println( "ZM >> Turbine Buildable CallBack onUsePlantObject()" ); -#/ - buildable = self.buildablezone; - first_part = "tag_part_03"; - second_part = "tag_part_02"; - i = 0; - while ( i < buildable.pieces.size ) - { - if ( buildable.pieces[ i ].part_name == first_part ) - { - if ( isDefined( buildable.pieces[ i ].built ) || buildable.pieces[ i ].built && player player_get_buildable_piece().part_name == first_part ) - { - buildable.stub.model showpart( second_part ); - i++; - continue; - } - else - { - buildable.stub.model hidepart( second_part ); - } - } - i++; - } - check_for_buildable_turbine_vox( level.turbine_buildable, 1 ); -} - -check_for_buildable_turbine_vox( stub, start_build_counter ) -{ - if ( isDefined( level.maxis_turbine_vox_played ) && level.maxis_turbine_vox_played ) - { - return; - } - buildable = stub.buildablezone; - piece_counter = 0; - build_counter = start_build_counter; - i = 0; - while ( i < buildable.pieces.size ) - { - if ( isDefined( buildable.pieces[ i ].built ) || buildable.pieces[ i ].built && isDefined( buildable.pieces[ i ].piece_owner ) ) - { - piece_counter++; - } - if ( isDefined( buildable.pieces[ i ].built ) && buildable.pieces[ i ].built ) - { - build_counter++; - } - i++; - } - if ( build_counter >= 2 && piece_counter == 3 ) - { - if ( !flag( "power_on" ) ) - { - level.maxis_turbine_vox_played = 1; - level thread maps/mp/zm_transit_sq::maxissay( "vox_maxi_turbine_final_0", stub.origin ); - } - } -} - -onbuyweapon_jetgun( player ) -{ - player switchtoweapon( self.stub.weaponname ); -} - -check_for_buildable_jetgun_vox( stub, start_build_counter ) -{ - if ( isDefined( level.rich_jetgun_vox_played ) || level.rich_jetgun_vox_played && !flag( "power_on" ) ) - { - return; - } - buildable = stub.buildablezone; - piece_counter = 0; - build_counter = start_build_counter; - i = 0; - while ( i < buildable.pieces.size ) - { - if ( isDefined( buildable.pieces[ i ].built ) || buildable.pieces[ i ].built && isDefined( buildable.pieces[ i ].piece_owner ) ) - { - piece_counter++; - } - if ( isDefined( buildable.pieces[ i ].built ) && buildable.pieces[ i ].built ) - { - build_counter++; - } - i++; - } - if ( build_counter == 3 && piece_counter == 4 ) - { - level thread maps/mp/zm_transit_sq::richtofensay( "vox_zmba_sidequest_jet_last_0" ); - } - else - { - if ( build_counter == 4 ) - { - level thread maps/mp/zm_transit_sq::richtofensay( "vox_zmba_sidequest_jet_complete_0" ); - } - } -} - -onenduse_sidequestcommon( team, player, result ) -{ - if ( isDefined( result ) && result ) - { - if ( isDefined( level.sq_clip ) ) - { - level.sq_clip trigger_on(); - level.sq_clip connectpaths(); - } - } -} - -droponbus( player ) -{ - if ( isDefined( player ) && isDefined( player.isonbus ) && player.isonbus ) - { - self.model linkto( level.the_bus ); - self.linked_to_bus = 1; - self.unitrigger.link_parent = level.the_bus; - } - else - { - self.unitrigger.link_parent = undefined; - } -} - -pickupfrombus() -{ - if ( isDefined( self.linked_to_bus ) && self.linked_to_bus ) - { - if ( isDefined( self.model ) ) - { - self.model unlink(); - } - self.linked_to_bus = undefined; - } - if ( isDefined( self.unitrigger ) ) - { - self.unitrigger.link_parent = undefined; - } -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_bus.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_bus.gsc deleted file mode 100644 index 801a684..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_bus.gsc +++ /dev/null @@ -1,3759 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zm_transit_lava; -#include maps/mp/zombies/_zm_weap_emp_bomb; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm; -#include maps/mp/zm_transit_ambush; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zm_transit_cling; -#include maps/mp/zm_transit_utility; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -#using_animtree( "zombie_bus" ); -#using_animtree( "zombie_bus_props" ); - -bussetup() -{ - flag_init( "ladder_attached" ); - flag_init( "catcher_attached" ); - flag_init( "hatch_attached" ); - self.immediatespeed = 0; - self.currentspeed = 0; - self.targetspeed = 0; - self.ismoving = 0; - self.isstopping = 0; - self.gas = 100; - self.accel = 10; - self.decel = 30; - self.radius = 88; - self.height = 240; - self.frontdist = 340; - self.backdist = 55; - self.floor = 36; - self.frontlocal = ( self.frontdist - ( self.radius / 2 ), 0, 0 ); - self.backlocal = ( ( self.backdist * -1 ) + ( self.radius / 2 ), 0, 0 ); - self.drivepath = 0; - self.zone = "zone_pri"; - self.roadzone = self.zone; - self.zombiesinside = 0; - self.zombiesatwindow = 0; - self.zombiesonroof = 0; - self.numplayers = 0; - self.numplayerson = 0; - self.numplayersonroof = 0; - self.numplayersinsidebus = 0; - self.numplayersnear = 0; - self.numaliveplayersridingbus = 0; - self.numflattires = 0; - self.doorsclosed = 1; - self.doorsdisabledfortime = 0; - self.stalled = 0; - self.issafe = 1; - self.waittimeatdestination = 0; - self.gracetimeatdestination = 10; - self.path_blocking = 0; - self.chase_pos = self.origin; - self.chase_pos_time = 0; - self.istouchingignorewindowsvolume = 0; - level.zm_mantle_over_40_move_speed_override = ::zm_mantle_over_40_move_speed_override; - self setmovingplatformenabled( 1 ); - self.supportsanimscripted = 1; - self setvehmaxspeed( 25 ); - self useanimtree( -1 ); - level.callbackactordamage = ::transit_actor_damage_override_wrapper; - self maps/mp/zm_transit_automaton::main(); - maps/mp/zm_transit_cling::initializecling(); - self maps/mp/zm_transit_openings::main(); - self bus_upgrades(); - self thread busplowsetup(); - self buslightssetup(); - self busdoorssetup(); - self buspathblockersetup(); - self bussetupbounds(); - self bus_roof_watch(); - self bus_set_nodes(); - self bus_set_exit_triggers(); - self thread bus_audio_setup(); - level thread init_bus_door_anims(); - level thread init_bus_props_anims(); - self thread bususeanimtree(); - self thread bususedoor( 0 ); - self thread busidledoor(); - self thread play_lava_audio(); - self thread busthink(); - self thread busopeningscene(); - busschedule(); - self thread busschedulethink(); - self thread bus_bridge_speedcontrol(); - self.door_nodes_linked = 1; - self thread bussetdoornodes( 0 ); -} - -bus_upgrades() -{ - self.upgrades = []; - self.ladder_local_offset = ( 142, -50, 100 ); - self.upgrades[ "Plow" ] = spawnstruct(); - self.upgrades[ "Plow" ].installed = 0; -} - -bus_debug() -{ - while ( 1 ) - { - bus_forward = vectornormalize( anglesToForward( level.the_bus.angles ) ); - ret = level.the_bus.origin + vectorScale( bus_forward, -144 ); - groundpos = groundpos_ignore_water_new( ret + vectorScale( ( 0, 0, 1 ), 60 ) ); -/# - debugstar( groundpos, 1000, ( 0, 0, 1 ) ); -#/ - wait 0,5; - } -} - -bus_set_nodes() -{ - self.front_door_inside = getnode( "front_door_inside_node", "targetname" ); - self.front_door = getnode( "front_door_node", "targetname" ); - self.back_door_inside1 = getnode( "back_door_inside_node1", "targetname" ); - self.back_door_inside2 = getnode( "back_door_inside_node2", "targetname" ); - self.back_door = getnode( "back_door_node", "targetname" ); - self.exit_back_l = getnode( "exit_back_l_node", "targetname" ); - self.exit_back_r = getnode( "exit_back_r_node", "targetname" ); -} - -bus_set_exit_triggers() -{ - spawnflags = 9; - trigger_exit = []; - trigger_exit[ trigger_exit.size ] = spawn( "trigger_radius", self.front_door_inside.origin, spawnflags, 32, 72 ); - trigger_exit[ trigger_exit.size ] = spawn( "trigger_radius", self.exit_back_l.origin, spawnflags, 32, 72 ); - trigger_exit[ trigger_exit.size ] = spawn( "trigger_radius", self.exit_back_r.origin, spawnflags, 32, 72 ); - tags = []; - tags[ 0 ] = "window_right_front_jnt"; - tags[ 1 ] = "window_left_rear_jnt"; - tags[ 2 ] = "window_right_rear_jnt"; - i = 0; - while ( i < trigger_exit.size ) - { - trigger = trigger_exit[ i ]; - trigger enablelinkto(); - trigger linkto( self, "", self worldtolocalcoords( trigger.origin ), ( 0, 0, 1 ) ); - trigger setmovingplatformenabled( 1 ); - trigger setteamfortrigger( level.zombie_team ); - trigger.tag = tags[ i ]; - trigger.substate = i; - self thread maps/mp/zm_transit_openings::busexitthink( trigger ); - i++; - } -} - -onplayerconnect() -{ - getent( "the_bus", "targetname" ) setclientfield( "the_bus_spawned", 1 ); -} - -zm_mantle_over_40_move_speed_override() -{ - traversealias = "barrier_walk"; - switch( self.zombie_move_speed ) - { - case "chase_bus": - traversealias = "barrier_sprint"; - break; - default: -/# - assertmsg( "Zombie move speed of '" + self.zombie_move_speed + "' is not supported for mantle_over_40." ); -#/ - } - return traversealias; -} - -follow_path( node ) -{ - self endon( "death" ); -/# - assert( isDefined( node ), "vehicle_path() called without a path" ); -#/ - self notify( "newpath" ); - if ( isDefined( node ) ) - { - self.attachedpath = node; - } - pathstart = self.attachedpath; - self.currentnode = self.attachedpath; - if ( !isDefined( pathstart ) ) - { - return; - } - self attachpath( pathstart ); - self startpath(); - self endon( "newpath" ); - nextpoint = pathstart; - while ( isDefined( nextpoint ) ) - { - self waittill( "reached_node", nextpoint ); - self.currentnode = nextpoint; - nextpoint notify( "trigger" ); - if ( isDefined( nextpoint.script_noteworthy ) ) - { - self notify( nextpoint.script_noteworthy ); - self notify( "noteworthy" ); - } - if ( isDefined( nextpoint.script_string ) ) - { - if ( issubstr( nextpoint.script_string, "map_" ) ) - { - level thread do_player_bus_location_vox( nextpoint.script_string ); - break; - } - else - { - level thread do_automoton_vox( nextpoint.script_string ); - } - } - waittillframeend; - } -} - -busopeningscene() -{ - startnode = getvehiclenode( "BUS_OPENING", "targetname" ); - self.currentnode = startnode; - self thread follow_path( startnode ); - self.targetspeed = 0; - flag_wait( "start_zombie_round_logic" ); - self busstartmoving( 12 ); - self busstartwait(); - self waittill( "opening_end_path" ); - self busstopmoving(); - startnode = getvehiclenode( "BUS_START", "targetname" ); - self.currentnode = startnode; - self thread follow_path( startnode ); - while ( !flag( "OnPriDoorYar" ) && !flag( "OnPriDoorYar2" ) ) - { - wait 0,5; - } - level.automaton notify( "start_head_think" ); - self notify( "noteworthy" ); -} - -busschedule() -{ - level.busschedule = busschedulecreate(); - level.busschedule busscheduleadd( "depot", 0, randomintrange( 40, 180 ), 19, 15 ); - level.busschedule busscheduleadd( "tunnel", 1, 10, 27, 5 ); - level.busschedule busscheduleadd( "diner", 0, randomintrange( 40, 180 ), 18, 20 ); - level.busschedule busscheduleadd( "forest", 1, 10, 18, 5 ); - level.busschedule busscheduleadd( "farm", 0, randomintrange( 40, 180 ), 26, 25 ); - level.busschedule busscheduleadd( "cornfields", 1, 10, 23, 10 ); - level.busschedule busscheduleadd( "power", 0, randomintrange( 40, 180 ), 19, 15 ); - level.busschedule busscheduleadd( "power2town", 1, 10, 26, 5 ); - level.busschedule busscheduleadd( "town", 0, randomintrange( 40, 180 ), 18, 20 ); - level.busschedule busscheduleadd( "bridge", 1, 10, 23, 10 ); -/# - _a369 = level.busschedule.destinations; - index = getFirstArrayKey( _a369 ); - while ( isDefined( index ) ) - { - stop = _a369[ index ]; - adddebugcommand( "devgui_cmd "Zombies:1/Bus:14/Teleport Bus:4/" + stop.name + ":" + index + "" "zombie_devgui teleport_bus " + stop.name + "\n" ); - index = getNextArrayKey( _a369, index ); -#/ - } -} - -busschedulethink() -{ - self endon( "death" ); - for ( ;; ) - { - while ( 1 ) - { - self waittill( "noteworthy", noteworthy, noteworthynode ); - zoneisempty = 1; - shouldremovegas = 0; - destinationindex = level.busschedule busschedulegetdestinationindex( noteworthy ); - while ( !isDefined( destinationindex ) || !isDefined( noteworthynode ) ) - { -/# - if ( isDefined( noteworthy ) ) - { - println( "^2Bus Debug: Not A Valid Destination (" + noteworthy + ")" ); - continue; - } - else - { - println( "^2Bus Debug: Not A Valid Destination" ); -#/ - } - } - self.destinationindex = destinationindex; - self.waittimeatdestination = level.busschedule busschedulegetmaxwaittimebeforeleaving( self.destinationindex ); - self.currentnode = noteworthynode; - targetspeed = level.busschedule busschedulegetbusspeedleaving( self.destinationindex ); - _a416 = level.zones; - _k416 = getFirstArrayKey( _a416 ); - while ( isDefined( _k416 ) ) - { - zone = _a416[ _k416 ]; - if ( !isDefined( zone.volumes ) || zone.volumes.size == 0 ) - { - } - else - { - zonename = zone.volumes[ 0 ].targetname; - if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( zonename ) ) - { -/# - println( "^2Bus Debug: Bus Is Touching Zone (" + zonename + ")" ); -#/ - self.zone = zonename; - zonestocheck = []; - zonestocheck[ zonestocheck.size ] = zonename; - switch( zonename ) - { - case "zone_station_ext": - zonestocheck[ zonestocheck.size ] = "zone_trans_1"; - zonestocheck[ zonestocheck.size ] = "zone_pri"; - zonestocheck[ zonestocheck.size ] = "zone_pri2"; - zonestocheck[ zonestocheck.size ] = "zone_amb_bridge"; - zonestocheck[ zonestocheck.size ] = "zone_trans_2b"; - break; - case "zone_gas": - zonestocheck[ zonestocheck.size ] = "zone_trans_2"; - zonestocheck[ zonestocheck.size ] = "zone_amb_tunnel"; - zonestocheck[ zonestocheck.size ] = "zone_gar"; - zonestocheck[ zonestocheck.size ] = "zone_trans_diner"; - zonestocheck[ zonestocheck.size ] = "zone_trans_diner2"; - zonestocheck[ zonestocheck.size ] = "zone_diner_roof"; - zonestocheck[ zonestocheck.size ] = "zone_din"; - zonestocheck[ zonestocheck.size ] = "zone_roadside_west"; - zonestocheck[ zonestocheck.size ] = "zone_roadside_east"; - zonestocheck[ zonestocheck.size ] = "zone_trans_3"; - break; - case "zone_far": - zonestocheck[ zonestocheck.size ] = "zone_amb_forest"; - zonestocheck[ zonestocheck.size ] = "zone_far_ext"; - zonestocheck[ zonestocheck.size ] = "zone_farm_house"; - zonestocheck[ zonestocheck.size ] = "zone_brn"; - zonestocheck[ zonestocheck.size ] = "zone_trans_5"; - zonestocheck[ zonestocheck.size ] = "zone_trans_6"; - break; - case "zone_pow": - zonestocheck[ zonestocheck.size ] = "zone_trans_6"; - zonestocheck[ zonestocheck.size ] = "zone_amb_cornfield"; - zonestocheck[ zonestocheck.size ] = "zone_trans_7"; - zonestocheck[ zonestocheck.size ] = "zone_pow_ext1"; - zonestocheck[ zonestocheck.size ] = "zone_prr"; - zonestocheck[ zonestocheck.size ] = "zone_pcr"; - zonestocheck[ zonestocheck.size ] = "zone_pow_warehouse"; - break; - case "zone_town_north": - zonestocheck[ zonestocheck.size ] = "zone_trans_8"; - zonestocheck[ zonestocheck.size ] = "zone_amb_power2town"; - zonestocheck[ zonestocheck.size ] = "zone_tbu"; - zonestocheck[ zonestocheck.size ] = "zone_town_church"; - zonestocheck[ zonestocheck.size ] = "zone_bar"; - zonestocheck[ zonestocheck.size ] = "zone_town_east"; - zonestocheck[ zonestocheck.size ] = "zone_tow"; - zonestocheck[ zonestocheck.size ] = "zone_ban"; - zonestocheck[ zonestocheck.size ] = "zone_ban_vault"; - zonestocheck[ zonestocheck.size ] = "zone_town_west"; - zonestocheck[ zonestocheck.size ] = "zone_town_west2"; - zonestocheck[ zonestocheck.size ] = "zone_town_barber"; - zonestocheck[ zonestocheck.size ] = "zone_town_south"; - zonestocheck[ zonestocheck.size ] = "zone_trans_9"; - break; - } - _a500 = zonestocheck; - _k500 = getFirstArrayKey( _a500 ); - while ( isDefined( _k500 ) ) - { - zone = _a500[ _k500 ]; - if ( isDefined( zoneisempty ) && !zoneisempty ) - { - } - else if ( maps/mp/zombies/_zm_zonemgr::player_in_zone( zone ) ) - { -/# - println( "^2Bus Debug: Player(s) Detected Near Bus In The Zone (" + zone + ")" ); -#/ - zoneisempty = 0; - } - _k500 = getNextArrayKey( _a500, _k500 ); - } - if ( isDefined( zoneisempty ) && zoneisempty ) - { -/# - println( "^2Bus Debug: No Player(s) Are In The Same Zone As Bus (" + zonename + ")" ); -#/ - break; - } - else - { -/# - println( "^2Bus Debug: Player(s) Are In The Same Zone As Bus (" + zonename + ")" ); -#/ - } - } - } - _k416 = getNextArrayKey( _a416, _k416 ); - } - if ( isDefined( shouldremovegas ) && shouldremovegas ) - { - self busgasremove( level.busschedule busschedulegetbusgasusage( self.destinationindex ) ); - } - while ( isDefined( zoneisempty ) && zoneisempty ) - { -/# - println( "^2Bus Debug: Bus Won't Consider Stopping Since Zone Is Empty." ); -#/ - self busstartmoving( targetspeed ); - } - if ( isDefined( self.skip_next_destination ) && self.skip_next_destination ) - { -/# - println( "^2Bus Debug: Bus Won't Consider Stopping Since It's Skipping Destination." ); -#/ - self notify( "skipping_destination" ); - self busstartmoving( targetspeed ); - } - } - else /# - println( "^2Bus Debug: Bus Will Consider Stopping, Someone Is Nearby." ); -#/ - if ( level.busschedule busschedulegetisambushstop( self.destinationindex ) ) - { -/# - println( "^2Bus Debug: Arrived At Ambush Point." ); -#/ - if ( maps/mp/zm_transit_ambush::shouldstartambushround() && self.numplayersinsidebus != 0 ) - { -/# - println( "^2Bus Debug: Ambush Triggering" ); -#/ - self busstopmoving( 1 ); - level.nml_zone_name = "zone_amb_" + noteworthy; - thread maps/mp/zm_transit_ambush::ambushstartround(); - thread automatonspeak( "inform", "out_of_gas" ); - flag_waitopen( "ambush_round" ); - shouldremovegas = 1; - thread automatonspeak( "inform", "refueled_gas" ); - break; - } - else - { -/# - println( "^2Bus Debug: Over Ambush Point But No BreakDown Triggered." ); -#/ - } - } - } - else /# - println( "^2Bus Debug: Arrived At Destination" ); -#/ - self notify( "reached_destination" ); - shouldremovegas = 1; - thread do_automaton_arrival_vox( noteworthy ); - if ( noteworthy != "diner" || noteworthy == "town" && noteworthy == "power" ) - { - self busstopmoving( 1 ); - if ( noteworthy == "diner" ) - { - self bussetdineropenings( 0 ); - } - else if ( noteworthy == "power" ) - { - self bussetpoweropenings( 0 ); - } - else - { - if ( noteworthy == "town" ) - { - self bussettownopenings( 0 ); - } - } - } - else - { - self busstopmoving(); - } - self thread busscheduledepartearly(); - waittimeatdestination = self.waittimeatdestination; -/# - if ( getDvarInt( #"1CF9CD76" ) != 0 ) - { - println( "^2Bus Debug: Using custom wait time of: " + getDvarInt( #"1CF9CD76" ) + " seconds." ); - waittimeatdestination = getDvarInt( #"1CF9CD76" ); - } - if ( getDvarInt( "zombie_cheat" ) > 0 ) - { - thread busshowleavinghud( waittimeatdestination ); -#/ - } - self waittill_any_timeout( waittimeatdestination, "depart_early" ); -/# - while ( getDvarInt( #"F7C16264" ) ) - { - wait 0,1; -#/ - } - self notify( "ready_to_depart" ); - self thread buslightsflash(); - self thread buslightsignal( "turn_signal_left" ); - thread automatonspeak( "inform", "leaving_warning" ); - self thread play_bus_audio( "grace" ); - wait self.gracetimeatdestination; - thread automatonspeak( "inform", "leaving" ); - self.accel = 1; - self busstartmoving( targetspeed ); - self notify( "departing" ); - self setclientfield( "bus_flashing_lights", 0 ); -} -} - -busscheduledepartearly() -{ - self endon( "ready_to_depart" ); - wait 15; - triggerbuswait = 0; - while ( 1 ) - { - while ( isDefined( self.disabled_by_emp ) && self.disabled_by_emp ) - { - wait 1; - } - players = get_players(); - nearbyplayers = 0; - readytoleaveplayers = 0; - _a717 = players; - _k717 = getFirstArrayKey( _a717 ); - while ( isDefined( _k717 ) ) - { - player = _a717[ _k717 ]; - if ( !is_player_valid( player ) ) - { - } - else - { - if ( distancesquared( self.origin, player.origin ) < 262144 ) - { - nearbyplayers++; - if ( player.isonbus ) - { - readytoleaveplayers++; - } - } - } - _k717 = getNextArrayKey( _a717, _k717 ); - } - if ( readytoleaveplayers != 0 && readytoleaveplayers == nearbyplayers ) - { - if ( !triggerbuswait ) - { - wait 5; - triggerbuswait = 1; - } - else - { - self notify( "depart_early" ); -/# - if ( isDefined( level.bus_leave_hud ) ) - { - level.bus_leave_hud.alpha = 0; -#/ - } - return; - } - } - else - { - if ( triggerbuswait ) - { - triggerbuswait = 0; - } - } - wait 1; - } -} - -busschedulecreate() -{ - schedule = spawnstruct(); - schedule.destinations = []; - return schedule; -} - -busscheduleadd( stopname, isambush, maxwaittimebeforeleaving, busspeedleaving, gasusage ) -{ -/# - assert( isDefined( stopname ) ); -#/ -/# - assert( isDefined( isambush ) ); -#/ -/# - assert( isDefined( maxwaittimebeforeleaving ) ); -#/ -/# - assert( isDefined( busspeedleaving ) ); -#/ - destinationindex = self.destinations.size; - self.destinations[ destinationindex ] = spawnstruct(); - self.destinations[ destinationindex ].name = stopname; - self.destinations[ destinationindex ].isambush = isambush; - self.destinations[ destinationindex ].maxwaittimebeforeleaving = maxwaittimebeforeleaving; - self.destinations[ destinationindex ].busspeedleaving = busspeedleaving; - self.destinations[ destinationindex ].gasusage = gasusage; -} - -busschedulegetdestinationindex( stopname ) -{ - _a800 = self.destinations; - index = getFirstArrayKey( _a800 ); - while ( isDefined( index ) ) - { - stop = _a800[ index ]; - if ( stop.name != stopname ) - { - } - else - { - return index; - } - index = getNextArrayKey( _a800, index ); - } - return undefined; -} - -busschedulegetstopname( destinationindex ) -{ - return self.destinations[ destinationindex ].name; -} - -busschedulegetisambushstop( destinationindex ) -{ - return self.destinations[ destinationindex ].isambush; -} - -busschedulegetmaxwaittimebeforeleaving( destinationindex ) -{ - return self.destinations[ destinationindex ].maxwaittimebeforeleaving; -} - -busschedulegetbusspeedleaving( destinationindex ) -{ - return self.destinations[ destinationindex ].busspeedleaving; -} - -busschedulegetbusgasusage( destinationindex ) -{ - return self.destinations[ destinationindex ].gasusage; -} - -transit_actor_damage_override_wrapper( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) -{ - if ( damage > self.health && isDefined( self.isonbus ) && self.isonbus ) - { - ret = self maps/mp/zombies/_zm::actor_damage_override_wrapper( inflictor, attacker, self.health - 1, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - self zombie_in_bus_death_animscript_callback( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); - return ret; - } - return self maps/mp/zombies/_zm::actor_damage_override_wrapper( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); -} - -zombie_in_bus_death_animscript_callback( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) -{ - if ( isDefined( self ) && isDefined( self.opening ) ) - { - self.opening.zombie = undefined; - } - if ( isDefined( self.exploding ) && self.exploding ) - { - self notify( "killanimscript" ); - self maps/mp/zombies/_zm_spawner::reset_attack_spot(); - return 1; - } - if ( isDefined( self ) && isDefined( self.isonbus ) && !self.isonbus && isDefined( self.onbuswindow ) && !self.onbuswindow && isDefined( self.climbing_into_bus ) || self.climbing_into_bus && isDefined( self.climbing_onto_bus ) && self.climbing_onto_bus ) - { - level maps/mp/zombies/_zm_spawner::zombie_death_points( self.origin, meansofdeath, shitloc, attacker, self ); - launchvector = undefined; - if ( isDefined( self.onbuswindow ) && self.onbuswindow && isDefined( self.climbing_into_bus ) || !self.climbing_into_bus && isDefined( self.climbing_onto_bus ) && self.climbing_onto_bus ) - { - fwd = anglesToForward( flat_angle( self.angles * -1 ) ); - my_velocity = vectorScale( fwd, 50 ); - launchvector = ( my_velocity[ 0 ], my_velocity[ 1 ], 20 ); - } - self thread maps/mp/zombies/_zm_spawner::zombie_ragdoll_then_explode( launchvector, attacker ); - self notify( "killanimscript" ); - self maps/mp/zombies/_zm_spawner::reset_attack_spot(); - return 1; - } - return 0; -} - -debug_busnear() -{ -/# - if ( getDvarInt( #"29B9C39F" ) > 0 ) - { - zombie_front_dist = 1200; - zombie_side_dist = self.radius + 50; - zombie_inside_dist = 240; - zombie_plow_dist = 340; - forward_dir = anglesToForward( self.angles ); - forward_proj = vectorScale( forward_dir, zombie_front_dist ); - forward_pos = self.origin + forward_proj; - backward_proj = vectorScale( forward_dir, zombie_inside_dist * -1 ); - backward_pos = self.origin + backward_proj; - bus_front_dist = 225; - bus_back_dist = 235; - bus_width = 120; - side_dir = anglesToForward( self.angles + vectorScale( ( 0, 0, 1 ), 90 ) ); - side_proj = vectorScale( side_dir, zombie_side_dist ); - inside_pos = self.origin + vectorScale( forward_dir, zombie_inside_dist ); - plow_pos = self.origin + vectorScale( forward_dir, zombie_plow_dist ); - line( backward_pos, forward_pos, ( 0, 0, 1 ), 1, 0, 2 ); - line( inside_pos - side_proj, inside_pos + side_proj, ( 0, 0, 1 ), 1, 0, 2 ); - line( plow_pos - side_proj, plow_pos + side_proj, ( 0, 0, 1 ), 1, 0, 2 ); -#/ - } -} - -debug_zombieonbus( zombie ) -{ -/# - if ( getDvarInt( #"29B9C39F" ) > 0 ) - { - zombie_front_dist = 1200; - zombie_side_dist = self.radius + 50; - zombie_inside_dist = 240; - zombie_plow_dist = 340; - forward_dir = anglesToForward( self.angles ); - forward_proj = vectorScale( forward_dir, zombie_front_dist ); - forward_pos = self.origin + forward_proj; - backward_proj = vectorScale( forward_dir, zombie_inside_dist * -1 ); - backward_pos = self.origin + backward_proj; - zombie_origin = zombie.origin; - zombie_origin_proj = pointonsegmentnearesttopoint( backward_pos, forward_pos, zombie_origin ); - if ( isDefined( zombie.isonbus ) && zombie.isonbus ) - { - line( zombie_origin_proj, zombie_origin, ( 0, 0, 1 ), 1, 0, 2 ); - return; - } - else - { - line( zombie_origin_proj, zombie_origin, ( 0, 0, 1 ), 1, 0, 2 ); -#/ - } - } -} - -busupdatenearzombies() -{ - level endon( "end_game" ); - audiozomonbus_old = 0; - audiozomonbus_new = 0; - zombiesatwindow_old = 0; - zombiesatwindow_new = 0; - zombiesonroof_old = 0; - zombiesonroof_new = 0; - zombiesclimbing_new = 0; - zombiesclimbing_old = 0; - while ( 1 ) - { - self.zombiesinside = 0; - self.zombies_climbing = 0; - self.zombies_chasing_bus = 0; - self.zombiesatwindow = 0; - self.zombiesonroof = 0; - self.zombies_near_bus = 0; -/# - self debug_busnear(); -#/ - zombies = get_round_enemy_array(); - while ( isDefined( zombies ) ) - { - i = 0; - while ( i < zombies.size ) - { - if ( !isDefined( zombies[ i ] ) ) - { - i++; - continue; - } - else zombie = zombies[ i ]; - if ( isDefined( zombie.completed_emerging_into_playable_area ) && !zombie.completed_emerging_into_playable_area ) - { - i++; - continue; - } - else - { - if ( isDefined( zombie.isscreecher ) || zombie.isscreecher && isDefined( zombie.is_avogadro ) && zombie.is_avogadro ) - { - i++; - continue; - } - else - { - if ( !isDefined( zombie.isonbus ) ) - { - zombie.isonbus = 0; - } - zombie.ground_ent = zombie getgroundent(); - if ( isDefined( zombie.ground_ent ) ) - { - if ( isDefined( zombie.ground_ent.isonbus ) && zombie.ground_ent.isonbus ) - { - zombie.isonbus = 1; - break; - } - else - { - groundname = zombie.ground_ent.targetname; - if ( isDefined( groundname ) ) - { - if ( level.the_bus.targetname != groundname || groundname == "bus_path_blocker" && groundname == "hatch_clip" ) - { - zombie.dont_throw_gib = 1; - zombie.isonbus = 1; - if ( isDefined( zombie.entering_bus ) && zombie.entering_bus ) - { - zombie.entering_bus = undefined; - } - } - else - { - zombie.isonbus = 0; - } - break; - } - else - { - zombie.isonbus = 0; - } - } - } - if ( isDefined( zombie.entering_bus ) && zombie.entering_bus ) - { - zombie.isonbus = 1; - } - zombie.isonbusroof = zombie _entityisonroof(); - if ( isDefined( zombie.isonbusroof ) && zombie.isonbusroof ) - { - zombie thread play_zmbonbusroof_sound(); - } - if ( isDefined( zombie.isonbus ) && zombie.isonbus ) - { - if ( isDefined( zombie.entering_bus ) && !zombie.entering_bus ) - { - if ( !isDefined( zombie.onbusfunc ) ) - { - zombie.onbusfunc = ::maps/mp/zm_transit_openings::zombiemoveonbus; - zombie thread [[ zombie.onbusfunc ]](); - } - } - } - else - { - if ( isDefined( zombie.onbusfunc ) ) - { - zombie.onbusfunc = undefined; - zombie notify( "endOnBus" ); - zombie animmode( "normal" ); - zombie orientmode( "face enemy" ); - zombie.forcemovementscriptstate = 0; - zombie thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - } - } - if ( isDefined( zombie.isonbus ) && zombie.isonbus ) - { - self.zombiesinside++; - } - else - { - if ( isDefined( zombie.onbuswindow ) && zombie.onbuswindow ) - { - self.zombiesatwindow++; - break; - } - else - { - if ( isDefined( zombie.isonbusroof ) && zombie.isonbusroof ) - { - self.zombiesonroof++; - break; - } - else - { - if ( isDefined( zombie.climbing_into_bus ) && zombie.climbing_into_bus ) - { - self.zombies_climbing++; - break; - } - else - { - if ( distancesquared( zombie.origin, self.origin ) < 122500 ) - { - if ( zombie.zombie_move_speed == "chase_bus" ) - { - self.zombies_chasing_bus++; - } - self.zombies_near_bus++; - } - } - } - } - } - if ( self.zombies_near_bus && !self.zombiesinside && !self.zombiesatwindow && !self.zombies_climbing & !self.zombiesonroof ) - { - level.bus_driver_focused = 1; - } - else - { - level.bus_driver_focused = 0; - } - if ( !self.zombiesinside && !self.zombiesatwindow && !self.zombies_climbing || self.zombiesonroof && self.zombies_near_bus ) - { - level.bus_zombie_danger = 1; - } - else - { - level.bus_zombie_danger = 0; - } - if ( self.ismoving && self getspeedmph() > 5 ) - { - if ( isDefined( self.plowtrigger ) ) - { - if ( zombie istouching( self.plowtrigger ) ) - { -/# - println( "^2Transit Debug: Plow killing zombie." ); -#/ - self thread busplowkillzombie( zombie ); - i++; - continue; - } - else } - else if ( isDefined( self.bussmashtrigger ) ) - { - if ( !isDefined( zombie.opening ) && isDefined( zombie.isonbus ) && !zombie.isonbus && zombie istouching( self.bussmashtrigger ) ) - { -/# - println( "^2Transit Debug: Plow pushing zombie." ); -#/ - self thread buspushzombie( zombie, self.bussmashtrigger ); - i++; - continue; - } - } - } - else - { - self update_zombie_move_speed( zombie ); -/# - self debug_zombieonbus( zombie ); -#/ - if ( ( i % 4 ) == 3 ) - { - wait 0,05; - } - } - } - } - i++; - } - } - audiozomonbus_new = self.zombiesinside; - zombiesatwindow_new = self.zombiesatwindow; - zombiesonroof_new = self.zombiesonroof; - zombiesclimbing_new = self.zombies_climbing; - self zomonbusvox( audiozomonbus_old, audiozomonbus_new ); - self zomatwindowvox( zombiesatwindow_old, zombiesatwindow_new ); - self zomonroofvox( zombiesonroof_old, zombiesonroof_new ); - self zomclimbingvox( zombiesclimbing_old, zombiesclimbing_new ); - self zomchasingvox(); - audiozomonbus_old = audiozomonbus_new; - zombiesatwindow_old = zombiesatwindow_new; - zombiesonroof_old = zombiesonroof_new; - zombiesclimbing_old = zombiesclimbing_new; - wait 0,05; - } -} - -entity_is_on_bus( use_cache ) -{ - if ( isDefined( self.isonbus ) && isDefined( use_cache ) && use_cache ) - { - return self.isonbus; - } - self.isonbus = 0; - self.ground_ent = self getgroundent(); - if ( isDefined( self.ground_ent ) ) - { - groundname = self.ground_ent.targetname; - if ( isDefined( groundname ) ) - { - if ( level.the_bus.targetname != groundname || groundname == "bus_path_blocker" && groundname == "hatch_clip" ) - { - self.isonbus = 1; - } - } - } - return self.isonbus; -} - -busupdatechasers() -{ - while ( 1 ) - { - while ( isDefined( self.ismoving ) && self.ismoving && isDefined( self.exceed_chase_speed ) && self.exceed_chase_speed ) - { - max_speed = 0; - zombies = getaiarray( level.zombie_team ); - slow_zombies = []; - _a1238 = zombies; - _k1238 = getFirstArrayKey( _a1238 ); - while ( isDefined( _k1238 ) ) - { - zombie = _a1238[ _k1238 ]; - if ( isDefined( zombie.zombie_move_speed ) && zombie.zombie_move_speed == "chase_bus" && isDefined( zombie.close_to_bus ) && !zombie.close_to_bus && !isDefined( zombie.opening ) ) - { - substate = zombie getanimsubstatefromasd(); - if ( substate == 6 ) - { - max_speed++; - break; - } - else - { - slow_zombies[ slow_zombies.size ] = zombie; - } - } - _k1238 = getNextArrayKey( _a1238, _k1238 ); - } - while ( max_speed < 3 ) - { - speed_up = 3 - max_speed; - if ( speed_up > slow_zombies.size ) - { - speed_up = slow_zombies.size; - } - _a1263 = slow_zombies; - _k1263 = getFirstArrayKey( _a1263 ); - while ( isDefined( _k1263 ) ) - { - zombie = _a1263[ _k1263 ]; - zombie setanimstatefromasd( "zm_move_chase_bus", 6 ); - speed_up--; - - if ( speed_up <= 0 ) - { - break; - } - else - { - _k1263 = getNextArrayKey( _a1263, _k1263 ); - } - } - } - } - wait 0,25; - } -} - -play_zmbonbusroof_sound() -{ - if ( isDefined( self.sndbusroofplayed ) && !self.sndbusroofplayed ) - { - self playsound( "fly_step_zombie_bus" ); - self.sndbusroofplayed = 1; - } -} - -object_is_on_bus() -{ - ground_ent = self getgroundent(); - depth = 0; - while ( isDefined( ground_ent ) && depth < 2 ) - { - groundname = ground_ent.targetname; - if ( isDefined( groundname ) ) - { - if ( level.the_bus.targetname != groundname || groundname == "bus_path_blocker" && groundname == "hatch_clip" ) - { - return 1; - } - } - new_ground_ent = ground_ent getgroundent(); - if ( !isDefined( new_ground_ent ) || new_ground_ent == ground_ent ) - { - } - else - { - ground_ent = new_ground_ent; - depth++; - } - } - return 0; -} - -busupdatenearequipment() -{ - equipment = maps/mp/zombies/_zm_equipment::get_destructible_equipment_list(); - i = 0; - while ( i < equipment.size ) - { - item = equipment[ i ]; - if ( !isDefined( item ) ) - { - i++; - continue; - } - else if ( isDefined( item.isonbus ) && item.isonbus ) - { - i++; - continue; - } - else - { - if ( isDefined( self.bussmashtrigger ) && item istouching( self.bussmashtrigger ) ) - { - item maps/mp/zombies/_zm_equipment::item_damage( 10000 ); -/# - println( "^2Bus hit an item." ); -#/ - } - } - i++; - } -} - -update_zombie_move_speed( zombie ) -{ - if ( isDefined( zombie.completed_emerging_into_playable_area ) && !zombie.completed_emerging_into_playable_area ) - { - return; - } - if ( !isDefined( zombie.normal_move_speed ) ) - { - zombie.normal_move_speed = 1; - } - if ( !zombie.has_legs ) - { - return; - } - if ( isDefined( zombie.favoriteenemy ) ) - { - if ( isDefined( zombie.favoriteenemy.isonbus ) ) - { - enemyonbus = zombie.favoriteenemy.isonbus; - } - } - if ( isDefined( zombie.isonbus ) && zombie.isonbus ) - { - if ( zombie.normal_move_speed ) - { - zombie.normal_move_speed = 0; - } - walk_state = zombie.zombie_move_speed; - if ( self.ismoving && isDefined( self.disabled_by_emp ) && !self.disabled_by_emp ) - { - if ( zombie.zombie_move_speed != "bus_walk" ) - { - walk_state = "bus_walk"; - } - } - else - { - if ( zombie.zombie_move_speed != "walk" ) - { - walk_state = "walk"; - } - } - if ( zombie.zombie_move_speed != walk_state ) - { - zombie set_zombie_run_cycle( walk_state ); - } - return; - } - else - { - if ( enemyonbus && !isDefined( zombie.opening ) ) - { - if ( self should_chase_bus( zombie ) ) - { - if ( zombie.zombie_move_speed != "chase_bus" ) - { - zombie.normal_move_speed = 0; - zombie set_zombie_run_cycle( "chase_bus" ); - zombie.crawl_anim_override = ::normal_move_speed; - } - return; - } - else - { - if ( zombie.zombie_move_speed == "chase_bus" ) - { - dist_sq = distance2dsquared( self.origin, level.the_bus.origin ); - if ( dist_sq > 90000 ) - { - return; - } - } - } - } - } - if ( !zombie.normal_move_speed ) - { - zombie normal_move_speed(); - } -} - -should_chase_bus( zombie ) -{ - if ( !self.ismoving ) - { - return 0; - } - if ( isDefined( self.exceed_chase_speed ) && !self.exceed_chase_speed ) - { - return 0; - } - if ( isDefined( self.disabled_by_emp ) && self.disabled_by_emp ) - { - return 0; - } - if ( isDefined( zombie.is_inert ) && zombie.is_inert ) - { - return 0; - } - if ( isDefined( zombie.is_traversing ) && zombie.is_traversing ) - { - return 0; - } - if ( !flag( "OnPriDoorYar2" ) ) - { - if ( !flag( "OnPriDoorYar" ) || !flag( "OnPriDoorYar3" ) ) - { - if ( zombie maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_pri" ) ) - { - return 0; - } - } - } - return 1; -} - -normal_move_speed() -{ - self.normal_move_speed = 1; - self set_zombie_run_cycle(); -} - -plowhudfade( text ) -{ - level endon( "plowHudUpdate" ); - fadein = 0,1; - fadeout = 3; - level.hudbuscount fadeovertime( fadein ); - level.hudbuscount.alpha = 1; - level.hudbuscount settext( text ); - wait fadein; - level.hudbuscount fadeovertime( 3 ); - level.hudbuscount.alpha = 0; -} - -busupdatespeed() -{ - targetspeed = self.targetspeed; - if ( is_false( self.ismoving ) ) - { - targetspeed = 0; - } - if ( isDefined( self.forcestop ) && self.forcestop ) - { - targetspeed = 0; - } - if ( isDefined( self.stalled ) && self.stalled ) - { - targetspeed = 0; - } - if ( isDefined( self.disabled_by_emp ) && self.disabled_by_emp ) - { - targetspeed = 0; - } - if ( targetspeed < 0 ) - { - targetspeed = 0; - } - if ( self.currentspeed != targetspeed ) - { - self.currentspeed = targetspeed; - if ( isDefined( self.immediatespeed ) && self.immediatespeed ) - { - self setspeedimmediate( targetspeed, self.accel, self.decel ); - self.immediatespeed = undefined; - } - else - { - if ( targetspeed == 0 ) - { - self setspeed( 0, 30, 30 ); - } - else - { - self setspeed( targetspeed, self.accel, self.decel ); - } - } - } -/# - if ( getDvarInt( #"6152C9EA" ) > 0 ) - { - msgorigin = self localtoworldcoords( vectorScale( ( 0, 0, 1 ), 100 ) ); - msgtext = "speed " + self getspeedmph(); - print3d( msgorigin, msgtext, ( 0, 0, 1 ), 1, 0,5, 2 ); -#/ - } -} - -bus_power_off() -{ - self endon( "power_on" ); - self.pre_disabled_by_emp = 1; - self thread play_bus_audio( "emp" ); - self buslightsdisableall(); - self notify( "pre_power_off" ); - while ( isDefined( self.ismoving ) && self.ismoving ) - { - while ( isDefined( self.istouchingignorewindowsvolume ) && self.istouchingignorewindowsvolume ) - { - wait 0,1; - } - } - self.disabled_by_emp = 1; - self thread buspathblockerenable(); - self notify( "power_off" ); -} - -bus_power_on() -{ - self buslightsenableall(); - wait 2; - self.pre_disabled_by_emp = 0; - self.disabled_by_emp = 0; - self thread buspathblockerdisable(); - self notify( "power_on" ); - wait 0,25; - self thread play_bus_audio( "leaving" ); - wait 3; - level.automaton automatonspeak( "inform", "doors_open" ); -} - -bus_disabled_by_emp( disable_time ) -{ - self bus_power_off(); - wait ( disable_time - 2 ); - self bus_power_on(); -} - -busispointinside( entitypos ) -{ - entityposinbus = pointonsegmentnearesttopoint( self.frontworld, self.backworld, entitypos ); - entityposzdelta = entitypos[ 2 ] - entityposinbus[ 2 ]; - entityposdist2 = distance2dsquared( entitypos, entityposinbus ); - if ( entityposdist2 > ( self.radius * self.radius ) ) - { - return 0; - } - return 1; -} - -busupdateignorewindows() -{ - if ( self getspeed() <= 0 ) - { - return; - } - if ( !isDefined( level.bus_ignore_windows ) ) - { - level.bus_ignore_windows = getentarray( "bus_ignore_windows", "targetname" ); - } - ignorewindowsvolume = undefined; - istouchingignorewindowsvolume = 0; - while ( isDefined( level.bus_ignore_windows ) && level.bus_ignore_windows.size > 0 ) - { - _a1639 = level.bus_ignore_windows; - _k1639 = getFirstArrayKey( _a1639 ); - while ( isDefined( _k1639 ) ) - { - volume = _a1639[ _k1639 ]; - if ( isDefined( istouchingignorewindowsvolume ) && istouchingignorewindowsvolume ) - { - } - else - { - if ( self istouching( volume ) ) - { - ignorewindowsvolume = volume; - istouchingignorewindowsvolume = 1; - } - } - _k1639 = getNextArrayKey( _a1639, _k1639 ); - } - } - self.ignorewindowsvolume = ignorewindowsvolume; - self.istouchingignorewindowsvolume = istouchingignorewindowsvolume; -} - -zombie_surf( zombie ) -{ - if ( !isDefined( self.zombie_surf_count ) ) - { - self.zombie_surf_count = 0; - } - damage = int( self.maxhealth / 10 ); - if ( isDefined( zombie.isonbusroof ) && zombie.isonbusroof && ( self.origin[ 2 ] - zombie.origin[ 2 ] ) >= 35 && isDefined( zombie.climbing_onto_bus ) && !zombie.climbing_onto_bus && isDefined( self.hatch_jump ) && !self.hatch_jump ) - { - damage = int( self.maxhealth / 8 ); - self.zombie_surf_count++; - if ( isDefined( level.zombie_surfing_kills ) && level.zombie_surfing_kills && self.zombie_surf_count > level.zombie_surfing_kill_count ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 ); - self playlocalsound( level.zmb_laugh_alias ); - self dodamage( self.maxhealth + 1, zombie.origin ); - } - } - self applyknockback( damage, ( 0, 0, 1 ) ); -} - -busupdateplayers() -{ - level endon( "end_game" ); - while ( 1 ) - { - self.numplayers = 0; - self.numplayerson = 0; - self.numplayersonroof = 0; - self.numplayersinsidebus = 0; - self.numplayersnear = 0; - self.numaliveplayersridingbus = 0; - self.frontworld = self localtoworldcoords( self.frontlocal ); - self.backworld = self localtoworldcoords( self.backlocal ); - self.bus_riders_alive = []; -/# - if ( getDvarInt( #"10AC3C99" ) > 0 ) - { - line( self.frontworld + ( 0, 0, self.floor ), self.backworld + ( 0, 0, self.floor ), ( 0, 0, 1 ), 1, 0, 4 ); - line( self.frontworld + ( 0, 0, self.floor ), self.frontworld + ( 0, 0, self.height ), ( 0, 0, 1 ), 1, 0, 4 ); - circle( self.backworld + ( 0, 0, self.floor ), self.radius, ( 0, 0, 1 ), 0, 1, 4 ); - circle( self.frontworld + ( 0, 0, self.floor ), self.radius, ( 0, 0, 1 ), 0, 1, 4 ); -#/ - } - players = get_players(); - _a1717 = players; - _k1717 = getFirstArrayKey( _a1717 ); - while ( isDefined( _k1717 ) ) - { - player = _a1717[ _k1717 ]; - if ( !isalive( player ) ) - { - } - else - { - self.numplayers++; - if ( distance2d( player.origin, self.origin ) < 1700 ) - { - self.numplayersnear++; - } - playerisinbus = 0; - mover = player getmoverent(); - if ( isDefined( mover ) ) - { - if ( isDefined( mover.targetname ) ) - { - if ( mover.targetname != "the_bus" && mover.targetname != "bus_path_blocker" || mover.targetname == "hatch_clip" && mover.targetname == "ladder_mantle" ) - { - playerisinbus = 1; - } - } - if ( isDefined( mover.equipname ) ) - { - if ( mover.equipname == "riotshield_zm" ) - { - if ( isDefined( mover.isonbus ) && mover.isonbus ) - { - playerisinbus = 1; - } - } - } - if ( isDefined( mover.is_zombie ) && mover.is_zombie && isDefined( mover.isonbus ) && mover.isonbus ) - { - playerisinbus = 1; - } - } - if ( playerisinbus ) - { - self.numplayerson++; - if ( is_player_valid( player ) ) - { - self.numaliveplayersridingbus++; - self.bus_riders_alive[ self.bus_riders_alive.size ] = player; - } - } - ground_ent = player getgroundent(); - if ( player isonladder() ) - { - ground_ent = mover; - } - if ( isDefined( ground_ent ) ) - { - if ( isDefined( ground_ent.is_zombie ) && ground_ent.is_zombie ) - { - player thread zombie_surf( ground_ent ); - break; - } - else - { - if ( playerisinbus && isDefined( player.isonbus ) && !player.isonbus ) - { - bbprint( "zombie_events", "category %s type %s round %d playername %s", "BUS", "player_enter", level.round_number, player.name ); - player thread bus_audio_interior_loop( self ); - player clientnotify( "OBS" ); - player setclientplayerpushamount( 0 ); - player allowsprint( 0 ); - player allowprone( 0 ); - player._allow_sprint = 0; - player._allow_prone = 0; - isdivingtoprone = player getstance() == "prone"; - if ( isdivingtoprone ) - { - player thread playerdelayturnoffdivetoprone(); - break; - } - if ( randomint( 100 ) > 80 && level.automaton.greeting_timer == 0 ) - { - thread automatonspeak( "convo", "player_enter" ); - level.automaton thread greeting_timer(); - } - } - if ( !playerisinbus && isDefined( player.isonbus ) && player.isonbus ) - { - bbprint( "zombie_events", "category %s type %s round %d playername %s", "BUS", "player_exit", level.round_number, player.name ); - self.buyable_weapon setinvisibletoplayer( player ); - player setclientplayerpushamount( 1 ); - player allowsprint( 1 ); - player allowprone( 1 ); - player._allow_sprint = undefined; - player._allow_prone = undefined; - player notify( "left bus" ); - player clientnotify( "LBS" ); - if ( randomint( 100 ) > 80 && level.automaton.greeting_timer == 0 ) - { - thread automatonspeak( "convo", "player_leave" ); - level.automaton thread greeting_timer(); - } - } - player.isonbus = playerisinbus; - player.isonbusroof = player _entityisonroof(); - } - } - if ( isDefined( player.isonbusroof ) && player.isonbusroof ) - { - self.buyable_weapon setinvisibletoplayer( player ); - self.numplayersonroof++; - } - else - { - if ( isDefined( player.isonbus ) && player.isonbus ) - { - self.buyable_weapon setvisibletoplayer( player ); - self.numplayersinsidebus++; - } - } - wait 0,05; - } - _k1717 = getNextArrayKey( _a1717, _k1717 ); - } - wait 0,05; - } -} - -_entityisonroof() -{ - if ( !isDefined( level.roof_trig ) ) - { - level.roof_trig = getent( "bus_roof_watch", "targetname" ); - } - if ( !self.isonbus ) - { - return 0; - } - if ( self istouching( level.roof_trig ) ) - { - return 1; - } - return 0; -} - -greeting_timer() -{ - if ( level.automaton.greeting_timer > 0 ) - { - return; - } - level.automaton.greeting_timer = 1; - wait 20; - level.automaton.greeting_timer = 0; -} - -_updateplayersinsafearea() -{ - players = get_players(); - if ( !isDefined( level._safeareacachevalid ) || !level._safeareacachevalid ) - { - level.playable_areas = getentarray( "player_volume", "script_noteworthy" ); - level.nogas_areas = getentarray( "no_gas", "targetname" ); - level.ambush_areas = getentarray( "ambush_volume", "script_noteworthy" ); - level._safeareacachevaild = 1; - } - p = 0; - while ( p < players.size ) - { - players[ p ].insafearea = _isplayerinsafearea( players[ p ] ); - players[ p ] _playercheckpoison(); - p++; - } -} - -_isplayerinsafearea( player ) -{ - if ( isDefined( player.isonbus ) && player.isonbus ) - { - return level.the_bus.issafe; - } - if ( player _playertouchingsafearea( level.playable_areas ) ) - { - return 1; - } - if ( player _playertouchingsafearea( level.nogas_areas ) ) - { - return 1; - } - if ( flag( "ambush_safe_area_active" ) ) - { - return player _playertouchingsafearea( level.ambush_areas ); - } - return 0; -} - -_playertouchingsafearea( areas ) -{ - i = 0; - while ( i < areas.size ) - { - touching = self istouching( areas[ i ] ); - if ( touching ) - { - return 1; - } - i++; - } - return 0; -} - -_playercheckpoison() -{ - if ( !isalive( self ) || self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - return; - } - if ( isDefined( self.poisoned ) && self.poisoned ) - { - return; - } - canbepoisoned = self playercanbepoisoned(); - if ( !canbepoisoned ) - { - return; - } - if ( !isDefined( self.insafearea ) || self.insafearea ) - { - return; - } - self thread _playerpoison(); -} - -playercanbepoisoned() -{ - god_mode = isgodmode( self ); - free_move = self isinmovemode( "ufo", "noclip" ); - zombie_cheat_num = getDvarInt( "zombie_cheat" ); - if ( zombie_cheat_num != 1 && zombie_cheat_num != 2 ) - { - is_invunerable = zombie_cheat_num == 3; - } - if ( !god_mode && !isDefined( free_move ) ) - { - return !is_invunerable; - } -} - -_playerpoison() -{ - self.poisoned = 1; - self startpoisoning(); - self playsound( "evt_gas_cough" ); - wait 1; - damage = 15; - while ( 1 ) - { - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || !isalive( self ) ) - { - self stoppoisoning(); - self.poisoned = 0; - return; - } - canbepoisoned = self playercanbepoisoned(); - if ( self.insafearea || !canbepoisoned ) - { - self stoppoisoning(); - self.poisoned = 0; - return; - } - if ( randomfloat( 100 ) < 60 ) - { - break; - } - self dodamage( damage, self.origin ); - damage += 1; - wait 1; - } -} - -_updateplayersinhubs() -{ - players = get_players(); - hubs = getentarray( "bus_hub", "script_noteworthy" ); - h = 0; - while ( h < hubs.size ) - { - hubs[ h ].active = 0; - p = 0; - while ( p < players.size && !hubs[ h ].active ) - { - hubs[ h ].active = players[ p ] istouching( hubs[ h ] ); - p++; - } - h++; - } -} - -playerdelayturnoffdivetoprone() -{ - self endon( "left bus" ); - wait 1,5; -} - -busgivepowerup( location ) -{ - currentzone = level.zones[ self.zone ]; - if ( isDefined( currentzone.target2 ) ) - { - spawndestent = getent( currentzone.target2, "targetname" ); - if ( isDefined( spawndestent ) ) - { - level thread maps/mp/zombies/_zm_powerups::specific_powerup_drop( "full_ammo", spawndestent.origin ); - level.powerup_drop_count = 0; - } - } -} - -buslightssetup() -{ - self setclientfield( "bus_head_lights", 1 ); -} - -buslightsflash() -{ - self endon( "departing" ); - while ( 1 ) - { - self buslightwaitenabled(); - self setclientfield( "bus_flashing_lights", 1 ); - wait 2,5; - self setclientfield( "bus_flashing_lights", 0 ); - wait 2,5; - } -} - -buslightsbrake() -{ - self buslightwaitenabled(); - self setclientfield( "bus_brake_lights", 1 ); - wait 5; - while ( is_false( self.ismoving ) ) - { - self buslightwaitenabled(); - self setclientfield( "bus_brake_lights", 1 ); - wait 0,8; - self setclientfield( "bus_brake_lights", 0 ); - wait 0,8; - } - self setclientfield( "bus_brake_lights", 0 ); -} - -buslightwaitenabled() -{ - while ( isDefined( self.bus_lights_disabled ) && self.bus_lights_disabled ) - { - wait 0,2; - } -} - -buslightdisable( light_name ) -{ - self.oldlights[ light_name ] = self getclientfield( light_name ); - self setclientfield( light_name, 0 ); -} - -buslightenable( light_name ) -{ - if ( self.oldlights[ light_name ] ) - { - self setclientfield( light_name, 1 ); - } -} - -buslightsignal( turn_signal_side ) -{ - self endon( "pre_power_off" ); - self endon( "power_off" ); - blink = 4; - x = 0; - while ( x < blink ) - { - wait 1; - self setclientfield( "bus_" + turn_signal_side, 1 ); - wait 1; - self setclientfield( "bus_" + turn_signal_side, 0 ); - x++; - } -} - -buslightsdisableall() -{ - if ( !isDefined( self.oldlights ) ) - { - self.oldlights = []; - } - self buslightdisable( "bus_flashing_lights" ); - self buslightdisable( "bus_head_lights" ); - self buslightdisable( "bus_brake_lights" ); - self buslightdisable( "bus_turn_signal_left" ); - self buslightdisable( "bus_turn_signal_right" ); - self.bus_lights_disabled = 1; -} - -buslightsenableall() -{ - self.bus_lights_disabled = 0; - self buslightenable( "bus_flashing_lights" ); - self buslightenable( "bus_head_lights" ); - self buslightenable( "bus_brake_lights" ); - self buslightenable( "bus_turn_signal_left" ); - self buslightenable( "bus_turn_signal_right" ); -} - -busdoorssetup() -{ - self.doorblockers = []; - self.doorblockers = getentarray( "bus_door_blocker", "targetname" ); - doorstrigger = getentarray( "bus_door_trigger", "targetname" ); - i = 0; - while ( i < self.doorblockers.size ) - { - self.doorblockers[ i ].offset = self worldtolocalcoords( self.doorblockers[ i ].origin ); - self.doorblockers[ i ] linkto( self, "", self.doorblockers[ i ].offset, ( 0, 0, 1 ) ); - self.doorblockers[ i ] setmovingplatformenabled( 1 ); - i++; - } - i = 0; - while ( i < doorstrigger.size ) - { - doorstrigger[ i ] enablelinkto(); - doorstrigger[ i ] linkto( self, "", self worldtolocalcoords( doorstrigger[ i ].origin ), ( 0, 0, 1 ) ); - doorstrigger[ i ] setcursorhint( "HINT_NOICON" ); - doorstrigger[ i ] sethintstring( &"ZOMBIE_TRANSIT_OPEN_BUS_DOOR" ); - doorstrigger[ i ] setmovingplatformenabled( 1 ); - doorstrigger[ i ] sethintlowpriority( 1 ); - self thread busdoorthink( doorstrigger[ i ] ); - i++; - } - self maps/mp/zm_transit_openings::busopeningsetenabled( "door", 0 ); -} - -busdoorsopen() -{ - if ( !self.doorsclosed || self.doorsdisabledfortime ) - { - return; - } - self.doorsclosed = 0; - self thread bussetdoornodes( 1 ); - doorstrigger = getentarray( "bus_door_trigger", "targetname" ); - i = 0; - while ( i < self.doorblockers.size ) - { - self.doorblockers[ i ] notsolid(); - self.doorblockers[ i ] playsound( "zmb_bus_door_open" ); - i++; - } - i = 0; - while ( i < doorstrigger.size ) - { - doorstrigger[ i ] sethintstring( &"ZOMBIE_TRANSIT_CLOSE_BUS_DOOR" ); - i++; - } - self bususeanimtree(); - self bususedoor( 1 ); - self maps/mp/zm_transit_openings::busopeningsetenabled( "door", 1 ); -} - -busdoorsclose() -{ - if ( self.doorsclosed || self.doorsdisabledfortime ) - { - return; - } - self.doorsclosed = 1; - self thread bussetdoornodes( 0 ); - level.the_bus showpart( "doors_front_left_2_jnt" ); - level.the_bus showpart( "doors_front_right_2_jnt" ); - level.the_bus showpart( "doors_rear_left_2_jnt" ); - level.the_bus showpart( "doors_rear_right_2_jnt" ); - doorstrigger = getentarray( "bus_door_trigger", "targetname" ); - i = 0; - while ( i < self.doorblockers.size ) - { - self.doorblockers[ i ] solid(); - self.doorblockers[ i ] playsound( "zmb_bus_door_close" ); - i++; - } - i = 0; - while ( i < doorstrigger.size ) - { - doorstrigger[ i ] sethintstring( &"ZOMBIE_TRANSIT_OPEN_BUS_DOOR" ); - i++; - } - self bususeanimtree(); - self bususedoor( 0 ); - self maps/mp/zm_transit_openings::busopeningsetenabled( "door", 0 ); -} - -busdoorsdisablefortime( time ) -{ - doorstrigger = getentarray( "bus_door_trigger", "targetname" ); - i = 0; - while ( i < doorstrigger.size ) - { - doorstrigger[ i ] setinvisibletoall(); - i++; - } - self.doorsdisabledfortime = 1; - wait time; - self.doorsdisabledfortime = 0; - i = 0; - while ( i < doorstrigger.size ) - { - doorstrigger[ i ] setvisibletoall(); - i++; - } -} - -init_animtree() -{ - scriptmodelsuseanimtree( -1 ); -} - -init_bus_door_anims() -{ - level.bus_door_open_state = %v_zombie_bus_all_doors_open; - level.bus_door_close_state = %v_zombie_bus_all_doors_close; - level.bus_door_open_idle_state = %v_zombie_bus_all_doors_idle_open; - level.bus_door_close_idle_state = %v_zombie_bus_all_doors_idle_closed; -} - -bususeanimtree() -{ - self useanimtree( -1 ); -} - -bususedoor( set ) -{ - self endon( "death" ); - animtime = 1; - if ( set ) - { - self.door_state = set; - self setanim( level.bus_door_open_state, 1, animtime, 1 ); - } - else - { - self.door_state = set; - self playsound( "zmb_bus_door_close" ); - self setanim( level.bus_door_close_state, 1, animtime, 1 ); - } - self notify( "BusUseDoor" ); -} - -busidledoor() -{ - while ( 1 ) - { - notifystring = self waittill_any_return( "departing", "BusUseDoor", "stopping" ); - if ( notifystring == "departing" || notifystring == "BusUseDoor" ) - { - if ( isDefined( self.ismoving ) && self.ismoving && isDefined( self.door_state ) ) - { - wait 1; - if ( self.door_state ) - { - self setanim( level.bus_door_open_idle_state ); - break; - } - else - { - self setanim( level.bus_door_close_idle_state ); - } - } - continue; - } - else - { - if ( notifystring == "stopping" ) - { - } - } - } -} - -init_props_animtree() -{ - scriptmodelsuseanimtree( -1 ); -} - -init_bus_props_anims() -{ - level.bus_props_start_state = %fxanim_zom_bus_interior_start_anim; - level.bus_props_idle_state = %fxanim_zom_bus_interior_idle_anim; - level.bus_props_end_state = %fxanim_zom_bus_interior_end_anim; -} - -busfxanims() -{ - self.fxanimmodel = spawn( "script_model", self gettagorigin( "tag_body" ) ); - self.fxanimmodel setmodel( "fxanim_zom_bus_interior_mod" ); - self.fxanimmodel linkto( self, "tag_body" ); - self.fxanimmodel useanimtree( -1 ); -} - -busfxanims_start() -{ - if ( !isDefined( self.fxanimmodel ) ) - { - return; - } - self.fxanimmodel setanim( level.bus_props_start_state ); - wait getanimlength( level.bus_props_start_state ); - if ( isDefined( self.ismoving ) && self.ismoving ) - { - self.fxanimmodel setanim( level.bus_props_idle_state ); - } -} - -busfxanims_end() -{ - if ( !isDefined( self.fxanimmodel ) ) - { - return; - } - self.fxanimmodel setanim( level.bus_props_start_state ); -} - -busdoorthink( trigger ) -{ - while ( 1 ) - { - trigger waittill( "trigger", player ); - if ( isDefined( self.force_lock_doors ) && self.force_lock_doors ) - { - continue; - } - if ( self.doorsclosed ) - { - if ( isDefined( level.bus_intro_done ) && !level.bus_intro_done ) - { - thread automatonspeak( "scripted", "discover_bus" ); - level.bus_intro_done = 1; - } - else - { - if ( randomint( 100 ) > 75 && !isDefined( level.automaton.dmgfxorigin ) ) - { - thread automatonspeak( "inform", "doors_open" ); - } - } - self busdoorsopen(); - } - else - { - if ( randomint( 100 ) > 75 && !isDefined( level.automaton.dmgfxorigin ) ) - { - thread automatonspeak( "inform", "doors_close" ); - } - self busdoorsclose(); - } - wait 1; - } -} - -busfueltanksetup() -{ - script_origin = spawn( "script_origin", self.origin + ( -193, 75, 48 ) ); - script_origin.angles = vectorScale( ( 0, 0, 1 ), 180 ); - script_origin linkto( self ); - self.fueltankmodelpoint = script_origin; - script_origin = spawn( "script_origin", self.origin + ( -193, 128, 48 ) ); - script_origin linkto( self ); - self.fueltanktriggerpoint = script_origin; -} - -busdeferredinitplowclip( clip ) -{ - origin = self worldtolocalcoords( clip.origin ); - clip.origin = vectorScale( ( 0, 0, 1 ), 100 ); - wait_for_buildable( "cattlecatcher" ); - trigger = getent( "trigger_plow", "targetname" ); - while ( 1 ) - { - canbreak = 1; - players = get_players(); - _a2655 = players; - _k2655 = getFirstArrayKey( _a2655 ); - while ( isDefined( _k2655 ) ) - { - player = _a2655[ _k2655 ]; - if ( player istouching( trigger ) ) - { - canbreak = 0; - } - _k2655 = getNextArrayKey( _a2655, _k2655 ); - } - if ( canbreak ) - { - break; - } - else - { - wait 0,05; - } - } - self.plow_clip_attached = 1; - clip linkto( self, "", origin, ( 0, 0, 1 ) ); - clip setmovingplatformenabled( 1 ); -} - -busplowupdatesolid() -{ - if ( isDefined( self.cow_catcher_blocker ) ) - { - if ( isDefined( self.ismoving ) && !self.ismoving && isDefined( self.plow_attached ) && self.plow_attached ) - { - self.cow_catcher_blocker solid(); - self.cow_catcher_blocker disconnectpaths(); - return; - } - else - { - self.cow_catcher_blocker notsolid(); - self.cow_catcher_blocker connectpaths(); - } - } -} - -busplowsetup() -{ - clipbrush = getentarray( "plow_clip", "targetname" ); - while ( isDefined( clipbrush ) && clipbrush.size > 0 ) - { - i = 0; - while ( i < clipbrush.size ) - { - self thread busdeferredinitplowclip( clipbrush[ i ] ); - i++; - } - } - level.the_bus.plow_clip = clipbrush; - level.the_bus hidepart( "tag_plow_attach" ); - trigger = getent( "trigger_plow", "targetname" ); - trigger linkto( level.the_bus ); - trigger setmovingplatformenabled( 1 ); - self thread busplowmoveplayeronbuilt(); - self thread busplowmoveplayer(); - self.bussmashtrigger = trigger; - cow_catcher_blocker = getent( "cow_catcher_path_blocker", "targetname" ); - if ( isDefined( cow_catcher_blocker ) ) - { - self.cow_catcher_blocker = cow_catcher_blocker; - if ( !isDefined( self.path_blockers ) ) - { - self.path_blockers = []; - } - self.path_blockers[ self.path_blockers.size ] = cow_catcher_blocker; - self busplowupdatesolid(); - } - player = wait_for_buildable( "cattlecatcher" ); - flag_set( "catcher_attached" ); - self.plow_attached = 1; - self busplowupdatesolid(); - self.plowtrigger = trigger; - level.the_bus showpart( "tag_plow_attach" ); - level.the_bus.upgrades[ "Plow" ].installed = 1; - level.the_bus maps/mp/zm_transit_openings::busopeningsetenabled( "front", 0 ); - player maps/mp/zombies/_zm_buildables::track_placed_buildables( "cattlecatcher" ); -} - -busplowmoveplayeronbuilt() -{ - wait_for_buildable( "cattlecatcher" ); - while ( isDefined( self.plow_clip_attached ) && !self.plow_clip_attached ) - { - self busplowmoveplayerthink(); - wait 0,05; - } -} - -busplowmoveplayer() -{ - while ( 1 ) - { - while ( is_false( self.ismoving ) || isDefined( self.disabled_by_emp ) && self.disabled_by_emp ) - { - wait 0,1; - } - self busplowmoveplayerthink(); - wait 0,05; - } -} - -busplowmoveplayerthink() -{ - if ( !isDefined( level.triggerplow ) ) - { - level.triggerplow = getent( "trigger_plow", "targetname" ); - } - players = get_players(); - _a2797 = players; - _k2797 = getFirstArrayKey( _a2797 ); - while ( isDefined( _k2797 ) ) - { - player = _a2797[ _k2797 ]; - if ( isDefined( player.isonbus ) && player.isonbus ) - { - } - else - { - if ( player istouching( level.triggerplow ) ) - { - rightdistance = distancesquared( player.origin, self gettagorigin( "tag_wheel_front_right" ) ); - leftdistance = distancesquared( player.origin, self gettagorigin( "tag_wheel_front_left" ) ); - bus_dir = undefined; - if ( isDefined( player.is_burning ) && player getstance() == "stand" ) - { - player setstance( "crouch" ); - } - if ( rightdistance < leftdistance ) - { - bus_dir = vectorScale( anglesToForward( self.angles + ( -60, -60, 30 ) ), 512 ); - } - else - { - bus_dir = vectorScale( anglesToForward( self.angles + ( 60, 60, 30 ) ), 512 ); - } - bus_vel = self getvelocity(); - boost_velocity = bus_vel + bus_dir; - player setvelocity( boost_velocity ); - } - } - _k2797 = getNextArrayKey( _a2797, _k2797 ); - } -} - -buspushzombie( zombie, trigger ) -{ - opening = level.the_bus maps/mp/zm_transit_openings::busopeningbyname( "front" ); - if ( isDefined( opening ) && isDefined( opening.zombie ) || opening.zombie != zombie && isDefined( zombie.is_inert ) && zombie.is_inert ) - { - busplowkillzombie( zombie ); - } - else - { - zombie thread zombieattachtobus( level.the_bus, opening, 0 ); - } -} - -busplowkillzombie( zombie ) -{ - zombie.killedbyplow = 1; - if ( isDefined( zombie.busplowkillzombie ) ) - { - zombie thread [[ zombie.busplowkillzombie ]](); - return; - } - if ( is_mature() ) - { - if ( isDefined( level._effect[ "zomb_gib" ] ) ) - { - playfxontag( level._effect[ "zomb_gib" ], zombie, "J_SpineLower" ); - } - } - else - { - if ( isDefined( level._effect[ "spawn_cloud" ] ) ) - { - playfxontag( level._effect[ "spawn_cloud" ], zombie, "J_SpineLower" ); - } - } - zombie thread busplowkillzombieuntildeath(); - wait 1; - if ( isDefined( zombie ) ) - { - zombie hide(); - } - if ( !isDefined( self.upgrades[ "Plow" ].killcount ) ) - { - self.upgrades[ "Plow" ].killcount = 0; - } - self.upgrades[ "Plow" ].killcount++; -} - -busplowkillzombieuntildeath() -{ - self endon( "death" ); - while ( isDefined( self ) && isalive( self ) ) - { - if ( isDefined( self.health ) ) - { - self.marked_for_recycle = 1; - self dodamage( self.health + 666, self.origin, self, self, "none", "MOD_SUICIDE" ); - } - wait 1; - } -} - -bus_roof_watch() -{ - roof_trig = getent( "bus_roof_watch", "targetname" ); - roof_trig enablelinkto(); - roof_trig linkto( self, "", self worldtolocalcoords( roof_trig.origin ), roof_trig.angles + self.angles ); - roof_trig setmovingplatformenabled( 1 ); -} - -busroofjumpoffpositionssetup() -{ - jump_positions = getentarray( "roof_jump_off_positions", "targetname" ); -/# - assert( jump_positions.size > 0 ); -#/ - i = 0; - while ( i < jump_positions.size ) - { - jump_positions[ i ] linkto( self, "", self worldtolocalcoords( jump_positions[ i ].origin ), jump_positions[ i ].angles + self.angles ); - i++; - } -} - -bussideladderssetup() -{ - side_ladders = getentarray( "roof_ladder_outside", "targetname" ); - i = 0; - while ( i < side_ladders.size ) - { - side_ladders[ i ].trigger = getent( side_ladders[ i ].target, "targetname" ); - if ( !isDefined( side_ladders[ i ].trigger ) ) - { - side_ladders[ i ] delete(); - i++; - continue; - } - else - { - side_ladders[ i ] linkto( self, "", self worldtolocalcoords( side_ladders[ i ].origin ), side_ladders[ i ].angles + self.angles ); - side_ladders[ i ].trigger enablelinkto(); - side_ladders[ i ].trigger linkto( self, "", self worldtolocalcoords( side_ladders[ i ].trigger.origin ), side_ladders[ i ].trigger.angles + self.angles ); - self thread bussideladderthink( side_ladders[ i ], side_ladders[ i ].trigger ); - } - i++; - } -} - -bussideladderthink( ladder, trigger ) -{ - if ( 1 ) - { - trigger delete(); - return; - } - trigger setcursorhint( "HINT_NOICON" ); - trigger sethintstring( &"ZOMBIE_TRANSIT_BUS_CLIMB_ROOF" ); - while ( 1 ) - { - trigger waittill( "trigger", player ); - teleport_location = self localtoworldcoords( ladder.script_vector ); - player setorigin( teleport_location ); - trigger setinvisibletoall(); - wait 1; - trigger setvisibletoall(); - } -} - -buspathblockersetup() -{ - self.path_blockers = getentarray( "bus_path_blocker", "targetname" ); - i = 0; - while ( i < self.path_blockers.size ) - { - self.path_blockers[ i ] linkto( self, "", self worldtolocalcoords( self.path_blockers[ i ].origin ), self.path_blockers[ i ].angles + self.angles ); - i++; - } - cow_catcher_blocker = getent( "cow_catcher_path_blocker", "targetname" ); - if ( isDefined( cow_catcher_blocker ) ) - { - cow_catcher_blocker linkto( self, "", self worldtolocalcoords( cow_catcher_blocker.origin ), cow_catcher_blocker.angles + self.angles ); - } - trig = getent( "bus_buyable_weapon1", "script_noteworthy" ); - trig enablelinkto(); - trig linkto( self, "", self worldtolocalcoords( trig.origin ), ( 0, 0, 1 ) ); - trig setinvisibletoall(); - self.buyable_weapon = trig; - level._spawned_wallbuys[ level._spawned_wallbuys.size ] = trig; - weapon_model = getent( trig.target, "targetname" ); - weapon_model linkto( self, "", self worldtolocalcoords( weapon_model.origin ), weapon_model.angles + self.angles ); - weapon_model setmovingplatformenabled( 1 ); - weapon_model._linked_ent = trig; -} - -bussetdoornodes( enable ) -{ - if ( isDefined( self.door_nodes_avoid_linking ) && self.door_nodes_avoid_linking ) - { - return; - } - if ( enable ) - { - if ( !self.door_nodes_linked ) - { - link_nodes( self.front_door_inside, self.front_door ); - link_nodes( self.front_door, self.front_door_inside ); - link_nodes( self.back_door_inside1, self.back_door ); - link_nodes( self.back_door, self.back_door_inside1 ); - link_nodes( self.back_door_inside2, self.back_door ); - link_nodes( self.back_door, self.back_door_inside2 ); - self.door_nodes_linked = 1; - } - } - else - { - if ( self.door_nodes_linked ) - { - unlink_nodes( self.front_door_inside, self.front_door ); - unlink_nodes( self.front_door, self.front_door_inside ); - unlink_nodes( self.back_door_inside1, self.back_door ); - unlink_nodes( self.back_door, self.back_door_inside1 ); - unlink_nodes( self.back_door_inside2, self.back_door ); - unlink_nodes( self.back_door, self.back_door_inside2 ); - self.door_nodes_linked = 0; - } - } -} - -buspathblockerenable() -{ - if ( !isDefined( self.path_blockers ) ) - { - return; - } - if ( self.path_blocking ) - { - return; - } - while ( level.the_bus getspeed() > 0 ) - { - wait 0,1; - } - i = 0; - while ( i < self.path_blockers.size ) - { - self.path_blockers[ i ] disconnectpaths(); - i++; - } - self.link_start = []; - self.link_end = []; - self buslinkdoornodes( "front_door_node" ); - self buslinkdoornodes( "back_door_node" ); - self.path_blocking = 1; -} - -buslinkdoornodes( node_name ) -{ - start_node = getnode( node_name, "targetname" ); - start_node.links = []; - while ( isDefined( start_node ) ) - { - near_nodes = getnodesinradiussorted( start_node.origin, 128, 0, 64, "pathnodes" ); - links = 0; - _a3071 = near_nodes; - _k3071 = getFirstArrayKey( _a3071 ); - while ( isDefined( _k3071 ) ) - { - node = _a3071[ _k3071 ]; - if ( !isDefined( node.target ) || node.target != "the_bus" ) - { - self.link_start[ self.link_start.size ] = start_node; - self.link_end[ self.link_end.size ] = node; - link_nodes( start_node, node ); - link_nodes( node, start_node ); - start_node.links[ start_node.links.size ] = node; - links++; - if ( links == 2 ) - { - return; - } - } - else - { - _k3071 = getNextArrayKey( _a3071, _k3071 ); - } - } - } -} - -busunlinkdoornodes( node_name ) -{ - start_node = getnode( node_name, "targetname" ); - while ( isDefined( start_node ) && isDefined( start_node.links ) ) - { - linked_nodes = start_node.links; - _a3098 = linked_nodes; - _k3098 = getFirstArrayKey( _a3098 ); - while ( isDefined( _k3098 ) ) - { - node = _a3098[ _k3098 ]; - if ( !isDefined( node.target ) || node.target != "the_bus" ) - { - unlink_nodes( start_node, node ); - unlink_nodes( node, start_node ); - } - _k3098 = getNextArrayKey( _a3098, _k3098 ); - } - } -} - -buspathblockerdisable() -{ - if ( !isDefined( self.path_blockers ) ) - { - return; - } - if ( !self.path_blocking ) - { - return; - } - i = 0; - while ( i < self.path_blockers.size ) - { - self.path_blockers[ i ] connectpaths(); - i++; - } - self.link_start = []; - self.link_end = []; - self busunlinkdoornodes( "front_door_node" ); - self busunlinkdoornodes( "back_door_node" ); - self.path_blocking = 0; - self bussetdineropenings( 1 ); - self bussetpoweropenings( 1 ); - self bussettownopenings( 1 ); -} - -bussetupbounds() -{ - self.bounds_origins = getentarray( "bus_bounds_origin", "targetname" ); - i = 0; - while ( i < self.bounds_origins.size ) - { - self.bounds_origins[ i ] linkto( self, "", self worldtolocalcoords( self.bounds_origins[ i ].origin ), self.angles ); - i++; - } -} - -busstartwait() -{ - while ( self getspeed() == 0 ) - { - wait 0,1; - } -} - -busshowleavinghud( time ) -{ - if ( !isDefined( level.bus_leave_hud ) ) - { - level.bus_leave_hud = newhudelem(); - level.bus_leave_hud.color = ( 0, 0, 1 ); - level.bus_leave_hud.fontscale = 4; - level.bus_leave_hud.x = -300; - level.bus_leave_hud.y = 100; - level.bus_leave_hud.alignx = "center"; - level.bus_leave_hud.aligny = "bottom"; - level.bus_leave_hud.horzalign = "center"; - level.bus_leave_hud.vertalign = "middle"; - level.bus_leave_hud.font = "objective"; - level.bus_leave_hud.glowcolor = ( 0,3, 0,6, 0,3 ); - level.bus_leave_hud.glowalpha = 1; - level.bus_leave_hud.foreground = 1; - level.bus_leave_hud.hidewheninmenu = 1; - } - level.bus_leave_hud.alpha = 0,3; - level.bus_leave_hud settimer( time ); - wait time; - level.bus_leave_hud.alpha = 0; -} - -busstartmoving( targetspeed ) -{ - if ( !self.ismoving ) - { - self.ismoving = 1; - self.isstopping = 0; - self thread busexceedchasespeed(); - bbprint( "zombie_events", "%s", "bus_start" ); - self setclientfield( "bus_brake_lights", 0 ); - self buspathblockerdisable(); - self thread busfxanims_start(); - self busplowupdatesolid(); - if ( !flag( "ambush_round" ) ) - { - level.numbusstopssincelastambushround++; - } - } - if ( isDefined( targetspeed ) ) - { - self.targetspeed = targetspeed; - } - self notify( "OnKeysUsed" ); - self thread play_bus_audio( "leaving" ); -} - -busexceedchasespeed() -{ - self notify( "exceed_chase_speed" ); - self endon( "exceed_chase_speed" ); - while ( isDefined( self.ismoving ) && self.ismoving ) - { - if ( self getspeedmph() > 12 ) - { - self.exceed_chase_speed = 1; - return; - } - wait 0,1; - } -} - -busstopwait() -{ - while ( self.ismoving && !self.isstopping ) - { - self.isstopping = 1; - bbprint( "zombie_events", "%s", "bus_stop" ); - while ( self getspeed() > 0 ) - { - wait 0,1; - } - } -} - -busstopmoving( immediatestop ) -{ - if ( self.ismoving ) - { - if ( isDefined( immediatestop ) && immediatestop ) - { - self.immediatespeed = 1; - } - self notify( "stopping" ); - self thread play_bus_audio( "stopping" ); - self.targetspeed = 0; - self setspeedimmediate( self.targetspeed, 30, 30 ); - self.ismoving = 0; - self.isstopping = 0; - self.exceed_chase_speed = 0; - self busplowupdatesolid(); - self thread buslightsbrake(); - self thread buspathblockerenable(); - self thread shakeplayersonbus(); - self thread busfxanims_end(); - } -} - -shakeplayersonbus() -{ - players = get_players(); - _a3289 = players; - _k3289 = getFirstArrayKey( _a3289 ); - while ( isDefined( _k3289 ) ) - { - player = _a3289[ _k3289 ]; - if ( isDefined( player.isonbus ) && player.isonbus ) - { - earthquake( randomfloatrange( 0,3, 0,4 ), randomfloatrange( 0,2, 0,4 ), player.origin + vectorScale( ( 0, 0, 1 ), 32 ), 150 ); - } - _k3289 = getNextArrayKey( _a3289, _k3289 ); - } -} - -busgasadd( percent ) -{ - newgaslevel = level.the_bus.gas + percent; -/# - println( "^2Bus Debug: Old Gas Level is " + newgaslevel ); -#/ - if ( newgaslevel < 0 ) - { - newgaslevel = 0; - } - else - { - if ( newgaslevel > 100 ) - { - newgaslevel = 100; - } - } - level.the_bus.gas = newgaslevel; -/# - println( "^2Bus Debug: New Gas Level is " + newgaslevel ); -#/ -} - -busgasremove( percent ) -{ - busgasadd( percent * -1 ); -} - -busgasempty() -{ - if ( level.the_bus.gas <= 0 ) - { - return 1; - } - return 0; -} - -busrestartzombiespawningaftertime( seconds ) -{ - wait seconds; - maps/mp/zm_transit_utility::try_resume_zombie_spawning(); -} - -busthink() -{ - no_danger = 0; - self thread busupdatechasers(); - self.buyable_weapon notify( "stop_hint_logic" ); - self thread busupdateplayers(); - self thread busupdatenearzombies(); - while ( 1 ) - { - waittillframeend; - self busupdatespeed(); - self busupdateignorewindows(); - if ( self.ismoving ) - { - self busupdatenearequipment(); - } - if ( isDefined( level.bus_zombie_danger ) && !level.bus_zombie_danger || self.numplayersonroof && self.numplayersinsidebus ) - { - no_danger++; - if ( no_danger > 40 ) - { - level thread do_player_bus_zombie_vox( "bus_zom_none", 40, 60 ); - no_danger = 0; - } - } - else - { - no_danger = 0; - } - wait 0,1; - } -} - -zomclimbingvox( old, new ) -{ - if ( new <= old ) - { - return; - } - if ( new == 1 || new == 3 ) - { - level thread do_player_bus_zombie_vox( "bus_zom_climb", 30 ); - } -} - -zomchasingvox() -{ - if ( self.zombies_chasing_bus > 2 ) - { - level thread do_player_bus_zombie_vox( "bus_zom_chase", 15 ); - } -} - -zomonbusvox( old, new ) -{ - if ( new == old ) - { - return; - } - if ( new != 1 && new != 4 && new == 8 && randomint( 100 ) < 20 ) - { - level thread automatonspeak( "inform", "zombie_on_board" ); - } - else - { - if ( new >= 1 ) - { - level thread do_player_bus_zombie_vox( "bus_zom_ent", 25 ); - } - } -} - -zomatwindowvox( old, new ) -{ - if ( new <= old ) - { - return; - } - if ( new != 1 && new != 3 && new == 5 && randomint( 100 ) < 35 ) - { - level thread automatonspeak( "inform", "zombie_at_window" ); - } - else - { - if ( new >= 1 ) - { - level thread do_player_bus_zombie_vox( "bus_zom_atk", 25 ); - } - } -} - -zomonroofvox( old, new ) -{ - if ( new <= old ) - { - return; - } - if ( new != 1 && new != 4 && new == 8 && randomint( 100 ) < 35 ) - { - level thread automatonspeak( "inform", "zombie_on_roof" ); - } - else - { - if ( new >= 1 ) - { - level thread do_player_bus_zombie_vox( "bus_zom_roof", 25 ); - } - } -} - -bussetdineropenings( enable ) -{ - _a3464 = self.openings; - _k3464 = getFirstArrayKey( _a3464 ); - while ( isDefined( _k3464 ) ) - { - opening = _a3464[ _k3464 ]; - if ( opening.bindtag != "window_right_2_jnt" && opening.bindtag != "window_right_3_jnt" || opening.bindtag == "window_left_2_jnt" && opening.bindtag == "window_left_3_jnt" ) - { - opening.enabled = enable; - } - _k3464 = getNextArrayKey( _a3464, _k3464 ); - } -} - -bussetpoweropenings( enable ) -{ - _a3476 = self.openings; - _k3476 = getFirstArrayKey( _a3476 ); - while ( isDefined( _k3476 ) ) - { - opening = _a3476[ _k3476 ]; - if ( opening.bindtag == "window_right_4_jnt" ) - { - opening.enabled = enable; - } - _k3476 = getNextArrayKey( _a3476, _k3476 ); - } -} - -bussettownopenings( enable ) -{ - _a3487 = self.openings; - _k3487 = getFirstArrayKey( _a3487 ); - while ( isDefined( _k3487 ) ) - { - opening = _a3487[ _k3487 ]; - if ( opening.bindtag == "window_right_4_jnt" ) - { - opening.enabled = enable; - } - _k3487 = getNextArrayKey( _a3487, _k3487 ); - } -} - -busgetclosestopening() -{ - enemy = self.favoriteenemy; - closestorigin = undefined; - closestopeningtozombie = undefined; - closestdisttozombie = -1; - closestorigintozombie = undefined; - closestopeningtoplayer = undefined; - closestdisttoplayer = -1; - closestorigintoplayer = undefined; - i = 0; - while ( i < level.the_bus.openings.size ) - { - opening = level.the_bus.openings[ i ]; - if ( !opening.enabled ) - { - i++; - continue; - } - else if ( maps/mp/zm_transit_openings::_isopeningdoor( opening.bindtag ) ) - { - i++; - continue; - } - else jump_origin = maps/mp/zm_transit_openings::_determinejumpfromorigin( opening ); - dist2 = distancesquared( enemy.origin, jump_origin ); - if ( !isDefined( closestopeningtoplayer ) || dist2 < closestdisttoplayer ) - { - closestopeningtoplayer = opening; - closestorigintoplayer = jump_origin; - closestdisttoplayer = dist2; - } - if ( isDefined( opening.zombie ) ) - { - i++; - continue; - } - else - { - dist2 = distancesquared( self.origin, jump_origin ); - if ( !isDefined( closestopeningtozombie ) || dist2 < closestdisttozombie ) - { - closestopeningtozombie = opening; - closestorigintozombie = jump_origin; - closestdisttozombie = dist2; - } - } - i++; - } - if ( isDefined( closestopeningtozombie ) ) - { - closestorigin = closestorigintozombie; - } - else - { - closestorigin = closestorigintoplayer; - } - return closestorigin; -} - -busgetclosestexit() -{ - enemy = self.favoriteenemy; - goal_node = level.the_bus.front_door_inside; - if ( isDefined( enemy ) ) - { - dist_f = distancesquared( enemy.origin, level.the_bus.front_door_inside ); - dist_bl = distancesquared( enemy.origin, level.the_bus.exit_back_l ); - dist_br = distancesquared( enemy.origin, level.the_bus.exit_back_r ); - if ( dist_bl < dist_br ) - { - if ( dist_bl < dist_f ) - { - goal_node = dist_bl; - } - } - else - { - if ( dist_br < dist_f ) - { - goal_node = dist_br; - } - } - } - return goal_node.origin; -} - -enemy_location_override() -{ - enemy = self.favoriteenemy; - location = enemy.origin; - bus = level.the_bus; - if ( isDefined( self.isscreecher ) || self.isscreecher && isDefined( self.is_avogadro ) && self.is_avogadro ) - { - return location; - } - if ( isDefined( self.item ) ) - { - return self.origin; - } - if ( is_true( self.reroute ) ) - { - if ( isDefined( self.reroute_origin ) ) - { - location = self.reroute_origin; - } - } - if ( isDefined( enemy.isonbus ) && enemy.isonbus && isDefined( self.solo_revive_exit ) && !self.solo_revive_exit ) - { - if ( isDefined( self.isonbus ) && !self.isonbus ) - { - if ( isDefined( bus.ismoving ) && bus.ismoving && isDefined( bus.disabled_by_emp ) && !bus.disabled_by_emp ) - { - self.ignoreall = 1; - if ( isDefined( self.close_to_bus ) && self.close_to_bus && isDefined( bus.istouchingignorewindowsvolume ) && !bus.istouchingignorewindowsvolume ) - { - self.goalradius = 2; - location = self busgetclosestopening(); - location = groundpos_ignore_water_new( location + vectorScale( ( 0, 0, 1 ), 60 ) ); - } - else - { - self.goalradius = 32; - while ( getTime() != bus.chase_pos_time ) - { - bus.chase_pos_time = getTime(); - bus.chase_pos_index = 0; - bus_forward = vectornormalize( anglesToForward( level.the_bus.angles ) ); - bus_right = vectornormalize( anglesToRight( level.the_bus.angles ) ); - bus.chase_pos = []; - bus.chase_pos[ 0 ] = level.the_bus.origin + vectorScale( bus_forward, -144 ); - bus.chase_pos[ 1 ] = bus.chase_pos[ 0 ] + vectorScale( bus_right, 64 ); - bus.chase_pos[ 2 ] = bus.chase_pos[ 0 ] + vectorScale( bus_right, -64 ); - _a3656 = bus.chase_pos; - _k3656 = getFirstArrayKey( _a3656 ); - while ( isDefined( _k3656 ) ) - { - pos = _a3656[ _k3656 ]; - pos = groundpos_ignore_water_new( pos + vectorScale( ( 0, 0, 1 ), 60 ) ); - _k3656 = getNextArrayKey( _a3656, _k3656 ); - } - } - location = bus.chase_pos[ bus.chase_pos_index ]; - bus.chase_pos_index++; - if ( bus.chase_pos_index >= 3 ) - { - bus.chase_pos_index = 0; - } - dist_sq = distancesquared( self.origin, location ); - if ( dist_sq < 2304 ) - { - self.close_to_bus = 1; - } - } - return location; - } - self.close_to_bus = 0; - if ( isDefined( bus.doorsclosed ) && bus.doorsclosed ) - { - self.ignoreall = 1; - self.goalradius = 2; - location = self busgetclosestopening(); - } - else - { - if ( isDefined( enemy.isonbusroof ) && enemy.isonbusroof ) - { - self.ignoreall = 1; - self.goalradius = 2; - location = self busgetclosestopening(); - } - else - { - front_dist = distance2dsquared( enemy.origin, level.the_bus.front_door.origin ); - back_dist = distance2dsquared( enemy.origin, level.the_bus.back_door.origin ); - if ( front_dist < back_dist ) - { - location = level.the_bus.front_door_inside.origin; - } - else - { - location = level.the_bus.back_door_inside1.origin; - } - self.ignoreall = 0; - self.goalradius = 32; - } - } - } - } - return location; -} - -adjust_enemyoverride() -{ - location = self.enemyoverride[ 0 ]; - bus = level.the_bus; - ent = self.enemyoverride[ 1 ]; - if ( isDefined( ent ) ) - { - if ( ent entity_is_on_bus( 1 ) ) - { - if ( isDefined( self.isonbus ) && !self.isonbus ) - { - if ( isDefined( bus.doorsclosed ) && bus.doorsclosed ) - { - self.goalradius = 2; - location = self busgetclosestopening(); - } - } - else - { - self.goalradius = 32; - } - } - } - return location; -} - -attachpoweruptobus( powerup ) -{ - if ( !isDefined( powerup ) || !isDefined( level.the_bus ) ) - { - return; - } - distanceoutsideofbus = 50; - heightofroofpowerup = 60; - heightoffloorpowerup = 25; - originofbus = level.the_bus gettagorigin( "tag_origin" ); - floorofbus = originofbus[ 2 ] + level.the_bus.floor; - adjustup = 0; - adjustdown = 0; - adjustin = 0; - pos = powerup.origin; - posinbus = pointonsegmentnearesttopoint( level.the_bus.frontworld, level.the_bus.backworld, pos ); - posdist2 = distance2dsquared( pos, posinbus ); - if ( posdist2 > ( level.the_bus.radius * level.the_bus.radius ) ) - { - radiusplus = level.the_bus.radius + distanceoutsideofbus; - if ( posdist2 > ( radiusplus * radiusplus ) ) - { - return; - } - adjustin = 1; - } - if ( !adjustin ) - { - bus_front_local = ( 276, 28, 0 ); - bus_front_local_world = level.the_bus localtoworldcoords( bus_front_local ); - bus_front_radius2 = 10000; - front_dist2 = distance2dsquared( powerup.origin, bus_front_local_world ); - if ( front_dist2 < bus_front_radius2 ) - { - adjustin = 1; - } - } - if ( adjustin ) - { - directiontobus = posinbus - pos; - directiontobusn = vectornormalize( directiontobus ); - howfarintobus = distanceoutsideofbus + 10; - powerup.origin += directiontobusn * howfarintobus; - } - poszdelta = powerup.origin[ 2 ] - posinbus[ 2 ]; - if ( poszdelta < ( level.the_bus.floor + heightoffloorpowerup ) ) - { - adjustup = 1; - } - else - { - if ( poszdelta > ( level.the_bus.height - 20 ) ) - { - adjustdown = 1; - } - } - if ( adjustup ) - { - powerup.origin = ( powerup.origin[ 0 ], powerup.origin[ 1 ], floorofbus + heightoffloorpowerup ); - } - else - { - if ( adjustdown ) - { - powerup.origin = ( powerup.origin[ 0 ], powerup.origin[ 1 ], floorofbus + heightofroofpowerup ); - } - } - powerup linkto( level.the_bus, "", level.the_bus worldtolocalcoords( powerup.origin ), powerup.angles - level.the_bus.angles ); -} - -shouldsuppressgibs( zombie ) -{ - if ( !isDefined( zombie ) || !isDefined( level.the_bus ) ) - { - return 0; - } - pos = zombie.origin; - posinbus = pointonsegmentnearesttopoint( level.the_bus.frontworld, level.the_bus.backworld, pos ); - poszdelta = pos[ 2 ] - posinbus[ 2 ]; - if ( poszdelta < ( level.the_bus.floor - 10 ) ) - { - return 0; - } - posdist2 = distance2dsquared( pos, posinbus ); - if ( posdist2 > ( level.the_bus.radius * level.the_bus.radius ) ) - { - return 0; - } - return 1; -} - -bus_bridge_speedcontrol() -{ - while ( 1 ) - { - self waittill( "reached_node", nextpoint ); -/# - if ( getDvarInt( #"583AF524" ) != 0 ) - { - if ( isDefined( nextpoint.target ) ) - { - futurenode = getvehiclenode( nextpoint.target, "targetname" ); - if ( isDefined( futurenode.script_noteworthy ) && futurenode.script_noteworthy == "emp_stop_point" ) - { - player = get_players()[ 0 ]; - player thread maps/mp/zombies/_zm_weap_emp_bomb::emp_detonate( player magicgrenadetype( "emp_grenade_zm", self.origin + vectorScale( ( 0, 0, 1 ), 10 ), ( 0, 0, 1 ), 0,05 ) ); -#/ - } - } - } - if ( isDefined( nextpoint.script_string ) ) - { - if ( nextpoint.script_string == "arrival_slowdown" ) - { - self thread start_stopping_bus(); - } - if ( nextpoint.script_string == "arrival_slowdown_fast" ) - { - self thread start_stopping_bus( 1 ); - } - } - while ( isDefined( nextpoint.script_noteworthy ) ) - { - if ( nextpoint.script_noteworthy == "slow_down" ) - { - self.targetspeed = 10; - if ( isDefined( nextpoint.script_float ) ) - { - self.targetspeed = nextpoint.script_float; - } - self setspeed( self.targetspeed, 80, 5 ); - break; - } - else if ( nextpoint.script_noteworthy == "turn_signal_left" || nextpoint.script_noteworthy == "turn_signal_right" ) - { - self thread buslightsignal( nextpoint.script_noteworthy ); - break; - } - else - { - if ( nextpoint.script_noteworthy == "resume_speed" ) - { - self.targetspeed = 12; - if ( isDefined( nextpoint.script_float ) ) - { - self.targetspeed = nextpoint.script_float; - } - self setspeed( self.targetspeed, 60, 60 ); - break; - } - else if ( nextpoint.script_noteworthy == "emp_stop_point" ) - { - self notify( "reached_emp_stop_point" ); - break; - } - else if ( nextpoint.script_noteworthy == "start_lava" ) - { - playfxontag( level._effect[ "bus_lava_driving" ], self, "tag_origin" ); - break; - } - else if ( nextpoint.script_noteworthy == "stop_lava" ) - { - break; - } - else if ( nextpoint.script_noteworthy == "bus_scrape" ) - { - self playsound( "zmb_bus_car_scrape" ); - break; - } - else if ( nextpoint.script_noteworthy == "arriving" ) - { - self thread begin_arrival_slowdown(); - self thread play_bus_audio( "arriving" ); - level thread do_player_bus_zombie_vox( "bus_stop", 10 ); - self thread buslightsignal( "turn_signal_right" ); - break; - } - else if ( nextpoint.script_noteworthy == "enter_transition" ) - { - playfxontag( level._effect[ "fx_zbus_trans_fog" ], self, "tag_headlights" ); - break; - } - else if ( nextpoint.script_noteworthy == "bridge" ) - { - level thread do_automaton_arrival_vox( "bridge" ); - player_near = 0; - node = getvehiclenode( "bridge_accel_point", "script_noteworthy" ); - while ( isDefined( node ) ) - { - players = get_players(); - _a3956 = players; - _k3956 = getFirstArrayKey( _a3956 ); - while ( isDefined( _k3956 ) ) - { - player = _a3956[ _k3956 ]; - if ( player.isonbus ) - { - } - else - { - if ( distancesquared( player.origin, node.origin ) < 6760000 ) - { - player_near = 1; - } - } - _k3956 = getNextArrayKey( _a3956, _k3956 ); - } - } - if ( player_near ) - { - trig = getent( "bridge_trig", "targetname" ); - trig notify( "trigger" ); - } - break; - } - else - { - while ( nextpoint.script_noteworthy == "depot" ) - { - volume = getent( "depot_lava_pit", "targetname" ); - traverse_volume = getent( "depot_pit_traverse", "targetname" ); - while ( isDefined( volume ) ) - { - zombies = getaiarray( level.zombie_team ); - i = 0; - while ( i < zombies.size ) - { - if ( isDefined( zombies[ i ].depot_lava_pit ) ) - { - if ( zombies[ i ] istouching( volume ) ) - { - zombies[ i ] thread [[ zombies[ i ].depot_lava_pit ]](); - } - i++; - continue; - } - else if ( zombies[ i ] istouching( volume ) ) - { - zombies[ i ] dodamage( zombies[ i ].health + 100, zombies[ i ].origin ); - i++; - continue; - } - else - { - if ( zombies[ i ] istouching( traverse_volume ) ) - { - zombies[ i ] dodamage( zombies[ i ].health + 100, zombies[ i ].origin ); - } - } - i++; - } - } - } - } - } - } - waittillframeend; - } -} - -bus_audio_setup() -{ - if ( !isDefined( self ) ) - { - return; - } - self.engine_ent_1 = spawn( "script_origin", self.origin ); - self.engine_ent_1 linkto( self, "tag_wheel_back_left" ); - self.engine_ent_2 = spawn( "script_origin", self.origin ); - self.engine_ent_2 linkto( self, "tag_wheel_back_left" ); -} - -play_bus_audio( type ) -{ - level notify( "playing_bus_audio" ); - level endon( "playing_bus_audio" ); - if ( isDefined( self.disabled_by_emp ) && self.disabled_by_emp && type != "emp" ) - { - self notify( "stop_bus_audio" ); - self.engine_ent_1 stoploopsound( 0,5 ); - self.engine_ent_2 stoploopsound( 0,5 ); - return; - } - switch( type ) - { - case "grace": - self.engine_ent_1 playloopsound( "zmb_bus_start_idle", 0,05 ); - level.automaton playsound( "zmb_bus_horn_warn" ); - break; - case "leaving": - level.automaton playsound( "zmb_bus_horn_leave" ); - self.engine_ent_2 playloopsound( "zmb_bus_start_move", 0,05 ); - self.engine_ent_1 stoploopsound( 2 ); - wait 7; - if ( isDefined( self.disabled_by_emp ) && !self.disabled_by_emp ) - { - self.engine_ent_1 playloopsound( "zmb_bus_exterior_loop", 2 ); - self.engine_ent_2 stoploopsound( 3 ); - } - break; - case "arriving": - level.automaton playsound( "zmb_bus_horn_leave" ); - break; - case "stopping": - self notify( "stop_bus_audio" ); - level.automaton playsound( "zmb_bus_horn_leave" ); - self.engine_ent_1 stoploopsound( 3 ); - self.engine_ent_2 stoploopsound( 3 ); - self.engine_ent_2 playsound( "zmb_bus_stop_move" ); - self playsound( "zmb_bus_car_scrape" ); - break; - case "emp": - self notify( "stop_bus_audio" ); - self.engine_ent_1 stoploopsound( 0,5 ); - self.engine_ent_2 stoploopsound( 0,5 ); - self.engine_ent_2 playsound( "zmb_bus_emp_shutdown" ); - break; - } -} - -bus_audio_interior_loop( bus ) -{ - self endon( "left bus" ); - while ( !bus.ismoving || isDefined( bus.disabled_by_emp ) && bus.disabled_by_emp ) - { - wait 0,1; - } - self clientnotify( "buslps" ); - self thread bus_audio_turnoff_interior_player( bus ); - self thread bus_audio_turnoff_interior_bus( bus ); -} - -bus_audio_turnoff_interior_player( bus ) -{ - bus endon( "stop_bus_audio" ); - self waittill_any( "left bus", "death", "player_suicide", "bled_out" ); - self clientnotify( "buslpe" ); -} - -bus_audio_turnoff_interior_bus( bus ) -{ - self endon( "left bus" ); - self endon( "death" ); - self endon( "player_suicide" ); - self endon( "bled_out" ); - bus waittill( "stop_bus_audio" ); - self clientnotify( "buslpe" ); -} - -play_lava_audio() -{ - ent_back = spawn( "script_origin", self gettagorigin( "tag_wheel_back_left" ) ); - ent_back linkto( self, "tag_wheel_back_left" ); - ent_front = spawn( "script_origin", self gettagorigin( "tag_wheel_front_right" ) ); - ent_front linkto( self, "tag_wheel_front_right" ); - while ( 1 ) - { - while ( isDefined( self.ismoving ) && !self.ismoving ) - { - wait 1; - } - while ( self maps/mp/zm_transit_lava::object_touching_lava() && self.zone != "zone_station_ext" && self.zone != "zone_pri" ) - { - ent_front playloopsound( "zmb_bus_lava_wheels_loop", 0,5 ); - ent_back playloopsound( "zmb_bus_lava_wheels_loop", 0,5 ); - wait 2; - while ( self maps/mp/zm_transit_lava::object_touching_lava() ) - { - wait 2; - } - } - if ( isDefined( ent_back ) && isDefined( ent_front ) ) - { - ent_front stoploopsound( 1 ); - ent_back stoploopsound( 1 ); - } - wait 2; - } -} - -delete_lava_audio_ents( ent1, ent2 ) -{ - self waittill( "stop_bus_audio" ); - ent1 delete(); - ent2 delete(); -} - -start_stopping_bus( stop_fast ) -{ - if ( isDefined( stop_fast ) && stop_fast ) - { - self setspeed( 4, 15 ); - } - else - { - self setspeed( 4, 5 ); - } -} - -begin_arrival_slowdown() -{ - self setspeed( 5 ); -} - -do_automoton_vox( name ) -{ - if ( !issubstr( name, "vox_" ) ) - { - return; - } - if ( !isDefined( level.stops ) ) - { - level.stops = []; - } - if ( !isDefined( level.stops[ name ] ) ) - { - level.stops[ name ] = 0; - } - level.stops[ name ]++; - if ( level.stops[ name ] > 5 ) - { - level.stops[ name ] = 4; - } - switch( name ) - { - case "vox_enter_tunnel": - level thread automatonspeak( "inform", "near_tunnel" + level.stops[ name ] ); - break; - case "vox_ride_generic": - if ( isDefined( level.stops ) && isDefined( level.stops[ "depot" ] ) && level.stops[ "depot" ] < 1 ) - { - return; - } - level thread automatonspeak( "inform", "ride_generic" ); - break; - case "vox_exit_tunnel": - if ( isDefined( level.tunnel_exit_vox_played ) && !level.tunnel_exit_vox_played ) - { - level thread automatonspeak( "inform", "leave_tunnel" ); - level.tunnel_exit_vox_played = 1; - } - break; - case "vox_cornfield": - level thread automatonspeak( "inform", "near_corn" + level.stops[ name ] ); - break; - case "vox_forest1": - level thread automatonspeak( "inform", "near_forest1_" + level.stops[ name ] ); - break; - case "vox_forest2": - level thread automatonspeak( "inform", "near_forest2_" + level.stops[ name ] ); - break; - } -} - -do_automaton_arrival_vox( destination ) -{ - if ( !isDefined( level.stops ) ) - { - level.stops = []; - } - if ( !isDefined( level.stops[ destination ] ) ) - { - level.stops[ destination ] = 0; - } - if ( destination == "depot" && isDefined( level.bus_intro_done ) && !level.bus_intro_done ) - { - return; - } - level.stops[ destination ]++; - if ( level.stops[ destination ] > 5 ) - { - level.stops[ destination ] = 4; - } - switch( destination ) - { - case "depot": - if ( isDefined( level.bus_intro_done ) && !level.bus_intro_done ) - { - break; - } - else - { - level thread automatonspeak( "inform", "near_station" + level.stops[ destination ] ); - break; - return; - case "diner": - case "farm": - case "power": - case "town": - level thread automatonspeak( "inform", "near_" + destination + level.stops[ destination ] ); - break; - return; - case "bridge": - if ( isDefined( level.collapse_vox_said ) && level.collapse_vox_said ) - { - level thread automatonspeak( "inform", "near_" + destination + level.stops[ destination ] ); - } - break; - return; - } -} -} - -do_player_bus_location_vox( node_info ) -{ - players = get_players(); - players = array_randomize( players ); - valid_player = undefined; - _a4291 = players; - _k4291 = getFirstArrayKey( _a4291 ); - while ( isDefined( _k4291 ) ) - { - player = _a4291[ _k4291 ]; - if ( isDefined( player.isonbus ) && player.isonbus ) - { - valid_player = player; - break; - } - else - { - _k4291 = getNextArrayKey( _a4291, _k4291 ); - } - } - if ( !isDefined( valid_player ) ) - { - return; - } - if ( isDefined( level.bus_zombie_danger ) && level.bus_zombie_danger && !valid_player.talks_in_danger ) - { - return; - } - vo_line = undefined; - if ( issubstr( node_info, "map_in" ) ) - { - if ( !isDefined( level.arrivals ) ) - { - level.arrivals = []; - } - if ( !isDefined( level.arrivals[ node_info ] ) ) - { - level.arrivals[ node_info ] = 0; - } - level.arrivals[ node_info ]++; - if ( level.arrivals[ node_info ] > 4 ) - { - level.arrivals[ node_info ] = 4; - } - vo_line = node_info + level.arrivals[ node_info ]; - } - else - { - vo_line = node_info; - if ( randomint( 100 ) > 75 ) - { - vo_line = "bus_ride"; - } - } - if ( !isDefined( vo_line ) ) - { - return; - } - if ( randomint( 100 ) < 25 ) - { - valid_player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", vo_line ); - } -} - -do_player_bus_zombie_vox( event, chance, timer ) -{ - if ( isDefined( level.doing_bus_zombie_vox ) || level.doing_bus_zombie_vox && !isDefined( event ) ) - { - return; - } - if ( !isDefined( chance ) ) - { - chance = 100; - } - time = 30; - if ( isDefined( timer ) ) - { - time = timer; - } - players = get_players(); - players = array_randomize( players ); - valid_player = undefined; - _a4374 = players; - _k4374 = getFirstArrayKey( _a4374 ); - while ( isDefined( _k4374 ) ) - { - player = _a4374[ _k4374 ]; - if ( isDefined( player.isonbus ) && player.isonbus ) - { - valid_player = player; - break; - } - else - { - _k4374 = getNextArrayKey( _a4374, _k4374 ); - } - } - if ( isDefined( valid_player ) ) - { - valid_player thread do_player_general_vox( "general", event, time, chance ); - level.doing_bus_zombie_vox = 1; - wait 10; - level.doing_bus_zombie_vox = 0; - } -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_classic.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_classic.gsc deleted file mode 100644 index fccc2a8..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_classic.gsc +++ /dev/null @@ -1,542 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_weapon_locker; -#include maps/mp/zombies/_zm_blockers; -#include maps/mp/zombies/_zm; -#include maps/mp/zm_transit_distance_tracking; -#include maps/mp/zm_transit; -#include maps/mp/zm_transit_ambush; -#include maps/mp/zm_transit_power; -#include maps/mp/zombies/_zm_banking; -#include maps/mp/zm_transit_ai_screecher; -#include maps/mp/zm_transit_bus; -#include maps/mp/zombies/_zm_equip_electrictrap; -#include maps/mp/zombies/_zm_equip_turret; -#include maps/mp/zombies/_zm_equip_turbine; -#include maps/mp/zm_transit_sq; -#include maps/mp/zm_transit_buildables; -#include maps/mp/zombies/_zm_ai_avogadro; -#include maps/mp/zombies/_zm_ai_screecher; -#include maps/mp/zm_transit_utility; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -precache() //checked matches cerberus output -{ - maps/mp/zombies/_zm_ai_screecher::precache(); - maps/mp/zombies/_zm_ai_avogadro::precache(); - maps/mp/zm_transit_buildables::include_buildables(); - maps/mp/zm_transit_buildables::init_buildables(); - maps/mp/zm_transit_sq::init(); - maps/mp/zombies/_zm_equip_turbine::init(); - maps/mp/zombies/_zm_equip_turret::init(); - maps/mp/zombies/_zm_equip_electrictrap::init(); - precachemodel( "zm_collision_transit_town_classic" ); - precachemodel( "p_glo_tools_chest_tall" ); - precachemodel( "fxanim_zom_bus_interior_mod" ); - precachemodel( "p6_anim_zm_barricade_board_collision" ); - precachemodel( "p6_anim_zm_barricade_board_bus_collision" ); - registerclientfield( "vehicle", "the_bus_spawned", 1, 1, "int" ); - registerclientfield( "vehicle", "bus_flashing_lights", 1, 1, "int" ); - registerclientfield( "vehicle", "bus_head_lights", 1, 1, "int" ); - registerclientfield( "vehicle", "bus_brake_lights", 1, 1, "int" ); - registerclientfield( "vehicle", "bus_turn_signal_left", 1, 1, "int" ); - registerclientfield( "vehicle", "bus_turn_signal_right", 1, 1, "int" ); - registerclientfield( "allplayers", "screecher_sq_lights", 1, 1, "int" ); - registerclientfield( "allplayers", "screecher_maxis_lights", 1, 1, "int" ); - registerclientfield( "allplayers", "sq_tower_sparks", 1, 1, "int" ); - onplayerconnect_callback( ::maps/mp/zm_transit_bus::onplayerconnect ); - onplayerconnect_callback( ::maps/mp/zm_transit_ai_screecher::portal_player_watcher ); - level thread maps/mp/zombies/_zm_banking::init(); -} - -main() //checked partially changed to match cerberus output did not use continues in foreaches see github for more info -{ - level.ta_vaultfee = 100; - level.ta_tellerfee = 100; - if ( !isDefined( level.custom_ai_type ) ) - { - level.custom_ai_type = []; - } - level.custom_ai_type[ level.custom_ai_type.size ] = ::maps/mp/zombies/_zm_ai_screecher::init; - level.custom_ai_type[ level.custom_ai_type.size ] = ::maps/mp/zombies/_zm_ai_avogadro::init; - level.enemy_location_override_func = ::maps/mp/zm_transit_bus::enemy_location_override; - level.adjust_enemyoverride_func = ::maps/mp/zm_transit_bus::adjust_enemyoverride; - level.closest_player_override = ::closest_player_transit; - door_triggers = getentarray( "electric_door", "script_noteworthy" ); - foreach ( trigger in door_triggers ) - { - if ( isDefined( trigger.script_flag ) && trigger.script_flag == "OnPowDoorWH" ) - { - } - else - { - trigger.power_door_ignore_flag_wait = 1; - } - } - door_triggers = getentarray( "local_electric_door", "script_noteworthy" ); - foreach ( trigger in door_triggers ) - { - if ( isDefined( trigger.script_flag ) && trigger.script_flag == "OnPowDoorWH" ) - { - } - else - { - trigger.power_door_ignore_flag_wait = 1; - } - } - level.zm_traversal_override = ::zm_traversal_override; - level.the_bus = getent( "the_bus", "targetname" ); - level thread init_bus(); - level thread maps/mp/zm_transit_sq::start_transit_sidequest(); - level thread inert_zombies_init(); - level thread maps/mp/zm_transit_power::initializepower(); - level thread maps/mp/zm_transit_ambush::main(); - level thread maps/mp/zm_transit::falling_death_init(); - level.check_valid_spawn_override = maps/mp/zm_transit::transit_respawn_override; - level.zombie_check_suppress_gibs = maps/mp/zm_transit_bus::shouldsuppressgibs; - level thread transit_vault_breach_init(); - level thread maps/mp/zm_transit_distance_tracking::zombie_tracking_init(); - level thread solo_tombstone_removal(); - level thread collapsing_bridge_init(); - level thread banking_and_weapon_locker_main(); - level thread bus_roof_damage_init(); - level thread diner_hatch_access(); - level thread maps/mp/zombies/_zm_buildables::think_buildables(); - setdvar( "r_rimIntensity_debug", 1 ); - setdvar( "r_rimIntensity", 3,5 ); - level thread zm_traversal_override_ignores(); - level thread maps/mp/zombies/_zm::post_main(); - level.spectator_respawn_custom_score = ::callback_spectator_respawn_custom_score; - level.custom_pap_deny_vo_func = ::transit_custom_deny_vox; - level.custom_generic_deny_vo_func = ::transit_custom_deny_vox; - level.custom_player_death_vo_func = ::transit_custom_death_vox; - level.custom_powerup_vo_response = ::transit_custom_powerup_vo_response; - level.zombie_vars[ "zombie_intermission_time" ] = 12; -} - -zm_traversal_override_ignores() //checked matches cerberus output -{ -} - -zm_traversal_override( traversealias ) //checked matches cerberus output -{ - suffix = ""; - sndalias = undefined; - chance = 0; - sndchance = 0; - if ( isDefined( self.isscreecher ) && !self.isscreecher && isDefined( self.is_avogadro ) && !self.is_avogadro ) - { - if ( isDefined( self.traversestartnode ) && isDefined( self.traversestartnode.script_string ) && self.traversestartnode.script_string == "ignore_traverse_override" ) - { - return traversealias; - } - switch( traversealias ) - { - case "jump_down_48": - if ( isDefined( self.has_legs ) && self.has_legs ) - { - suffix = "_stumble"; - chance = 0; - } - break; - case "jump_down_127": - case "jump_down_190": - case "jump_down_222": - case "jump_down_90": - if ( isDefined( self.has_legs ) && self.has_legs ) - { - suffix = "_stumble"; - chance = 30; - } - break; - case "jump_up_127": - case "jump_up_190": - case "jump_up_222": - case "jump_up_48": - sndalias = "vox_zmba_zombie_pickup_" + randomint( 2 ); - suffix = "_grabbed"; - chance = 6; - sndchance = 3; - break; - } - if ( chance != 0 && randomint( 100 ) <= chance ) - { - if ( isDefined( sndalias ) && randomint( 100 ) <= sndchance ) - { - playsoundatposition( sndalias, self.origin ); - } - traversealias += suffix; - } - } - return traversealias; -} - -init_bus() //checked matches cerberus output -{ - flag_wait( "start_zombie_round_logic" ); - level.the_bus thread maps/mp/zm_transit_bus::bussetup(); -} - -closest_player_transit( origin, players ) //checked changed to match cerberus output -{ - if ( isDefined( level.the_bus ) && level.the_bus.numaliveplayersridingbus > 0 || isDefined( level.calc_closest_player_using_paths ) && !level.calc_closest_player_using_paths ) - { - player = getclosest( origin, players ); - } - else - { - player = get_closest_player_using_paths( origin, players ); - } - return player; -} - -transit_vault_breach_init() //checked matches cerberus output -{ - vault_doors = getentarray( "town_bunker_door", "targetname" ); - array_thread( vault_doors, ::transit_vault_breach ); -} - -transit_vault_breach() //checked matches cerberus output -{ - if ( isDefined( self ) ) - { - self.damage_state = 0; - if ( isDefined( self.target ) ) - { - clip = getent( self.target, "targetname" ); - clip linkto( self ); - self.clip = clip; - } - self thread vault_breach_think(); - } - else - { - return; - } -} - -vault_breach_think() //checked partially changed to match cerberus output changed at own discretion -{ - level endon( "intermission" ); - self.health = 99999; - self setcandamage( 1 ); - self.damage_state = 0; - self.clip.health = 99999; - self.clip setcandamage( 1 ); - while ( 1 ) - { - self thread track_clip_damage(); - self waittill( "damage", amount, attacker, direction, point, dmg_type, modelname, tagname, partname, weaponname ); - if ( isDefined( weaponname ) && weaponname == "emp_grenade_zm" || isDefined( weaponname ) && weaponname == "ray_gun_zm" || isDefined( weaponname ) && weaponname == "ray_gun_upgraded_zm" ) - { - continue; - } - if ( isDefined( amount ) && amount <= 1 ) - { - continue; - } - if ( isplayer( attacker ) && dmg_type == "MOD_PROJECTILE" || isplayer( attacker ) && dmg_type == "MOD_PROJECTILE_SPLASH" || isplayer( attacker ) && dmg_type == "MOD_EXPLOSIVE" || isplayer( attacker ) && dmg_type == "MOD_EXPLOSIVE_SPLASH" || isplayer( attacker ) && dmg_type == "MOD_GRENADE" || isplayer( attacker ) && dmg_type == "MOD_GRENADE_SPLASH" ) - { - if ( self.damage_state == 0 ) - { - self.damage_state = 1; - } - playfxontag( level._effect[ "def_explosion" ], self, "tag_origin" ); - self playsound( "exp_vault_explode" ); - self bunkerdoorrotate( 1 ); - if ( isDefined( self.script_flag ) ) - { - flag_set( self.script_flag ); - } - if ( isDefined( self.clip ) ) - { - self.clip connectpaths(); - } - wait 1; - playsoundatposition( "zmb_cha_ching_loud", self.origin ); - return; - } - } -} - -track_clip_damage() //checked changed to match cerberus output -{ - self endon( "damage" ); - self.clip waittill( "damage", amount, attacker, direction, point, dmg_type ); - self notify( "damage", amount, attacker, direction, point, dmg_type ); -} - -bunkerdoorrotate( open, time ) //checked matches cerberus output -{ - if ( !isDefined( time ) ) - { - time = 0.2; - } - rotate = self.script_float; - if ( !open ) - { - rotate *= -1; - } - if ( isDefined( self.script_angles ) ) - { - self notsolid(); - self rotateto( self.script_angles, time, 0, 0 ); - self thread maps/mp/zombies/_zm_blockers::door_solid_thread(); - } -} - -collapsing_bridge_init() //checked changed to match cerberus output -{ - time = 1.5; - trig = getent( "bridge_trig", "targetname" ); - if ( !isDefined( trig ) ) - { - return; - } - bridge = getentarray( trig.target, "targetname" ); - if ( !isDefined( bridge ) ) - { - return; - } - trig waittill( "trigger", who ); - trig playsound( "evt_bridge_collapse_start" ); - trig thread play_delayed_sound( time ); - for ( i = 0; i < bridge.size; i++ ) - { - if ( isDefined( bridge[ i ].script_angles ) ) - { - rot_angle = bridge[ i ].script_angles; - } - else - { - rot_angle = ( 0, 0, 0 ); - } - earthquake( randomfloatrange( 0.5, 1 ), 1.5, bridge[ i ].origin, 1000 ); - exploder( 150 ); - bridge[ i ] rotateto( rot_angle, time, 0, 0 ); - } - wait 1; - if ( !isDefined( level.collapse_vox_said ) ) - { - level thread automatonspeak( "inform", "bridge_collapse" ); - level.collapse_vox_said = 1; - } -} - -play_delayed_sound( time ) //checked matches cerberus output -{ - wait time; - self playsound( "evt_bridge_collapse_end" ); -} - -banking_and_weapon_locker_main() //checked matches cerberus output -{ - flag_wait( "start_zombie_round_logic" ); - weapon_locker = spawnstruct(); - weapon_locker.origin = ( 8236, -6844, 144 ); - weapon_locker.angles = vectorScale( ( 0, 0, 0 ), 30 ); - weapon_locker.script_length = 16; - weapon_locker.script_width = 32; - weapon_locker.script_height = 64; - deposit_spot = spawnstruct(); - deposit_spot.origin = ( 588, 402, 6 ); - deposit_spot.angles = ( 0, 0, 0 ); - deposit_spot.targetname = "bank_deposit"; - deposit_spot.script_unitrigger_type = "unitrigger_radius_use"; - deposit_spot.radius = 32; - withdraw_spot = spawnstruct(); - withdraw_spot.origin = ( 588, 496, 6 ); - withdraw_spot.angles = ( 0, 0, 0 ); - withdraw_spot.targetname = "bank_withdraw"; - withdraw_spot.script_unitrigger_type = "unitrigger_radius_use"; - withdraw_spot.radius = 32; - level thread maps/mp/zombies/_zm_weapon_locker::main(); - weapon_locker thread maps/mp/zombies/_zm_weapon_locker::triggerweaponslockerwatch(); - level thread maps/mp/zombies/_zm_banking::main(); - deposit_spot thread maps/mp/zombies/_zm_banking::bank_deposit_unitrigger(); - withdraw_spot thread maps/mp/zombies/_zm_banking::bank_withdraw_unitrigger(); -} - -bus_roof_damage_init() //checked matches cerberus output -{ - trigs = getentarray( "bus_knock_off", "targetname" ); - array_thread( trigs, ::bus_roof_damage ); -} - -bus_roof_damage() //checked changed to match cerberus output -{ - while ( 1 ) - { - self waittill( "trigger", who ); - if ( isplayer( who ) ) - { - if ( who getstance() == "stand" ) - { - who dodamage( 1, who.origin ); - } - } - else if ( isDefined( who.marked_for_death ) && !who.marked_for_death && isDefined( who.has_legs ) && who.has_legs ) - { - who dodamage( who.health + 100, who.origin ); - who.marked_for_death = 1; - level.zombie_total++; - } - wait 0.1; - } -} - -diner_hatch_access() //checked matches cerberus output -{ - diner_hatch = getent( "diner_hatch", "targetname" ); - diner_hatch_col = getent( "diner_hatch_collision", "targetname" ); - diner_hatch_mantle = getent( "diner_hatch_mantle", "targetname" ); - if ( !isDefined( diner_hatch ) || !isDefined( diner_hatch_col ) ) - { - return; - } - diner_hatch hide(); - diner_hatch_mantle.start_origin = diner_hatch_mantle.origin; - diner_hatch_mantle.origin += vectorScale( ( 0, 0, 0 ), 500 ); - player = wait_for_buildable( "dinerhatch" ); - diner_hatch show(); - diner_hatch_col delete(); - diner_hatch_mantle.origin = diner_hatch_mantle.start_origin; - player maps/mp/zombies/_zm_buildables::track_placed_buildables( "dinerhatch" ); -} - -inert_zombies_init() //checked matches cerberus output -{ - inert_spawn_location = getstructarray( "inert_location", "script_noteworthy" ); - if ( isDefined( inert_spawn_location ) ) - { - array_thread( inert_spawn_location, ::spawn_inert_zombies ); - } -} - -spawn_inert_zombies() //checked matches cerberus output -{ - if ( !isDefined( self.angles ) ) - { - self.angles = ( 0, 0, 0 ); - } - wait 0.1; - if ( isDefined( level.zombie_spawners ) ) - { - spawner = random( level.zombie_spawners ); - ai = spawn_zombie( spawner ); - } - if ( isDefined( ai ) ) - { - ai forceteleport( self.origin, self.angles ); - ai.start_inert = 1; - } -} - -sparking_power_lines() //checked matches cerberus output -{ - lines = getentarray( "power_line_sparking", "targetname" ); -} - -callback_spectator_respawn_custom_score() //checked changed to match cerberus output -{ - difference = 1500 - self.score; - money_required = 1; - if ( difference >= 1000 ) - { - money_required = 2; - } - if ( !sessionmodeisonlinegame() ) - { - if ( !isDefined( self.account_val ) ) - { - self.account_val = 0; - } - if ( self.account_val >= money_required ) - { - self.account_val -= money_required; - } - else - { - self.account_val = 0; - } - } - else - { - account_val = self maps/mp/zombies/_zm_stats::get_map_stat( "depositBox" ); - if ( account_val >= money_required ) - { - self set_map_stat( "depositBox", account_val - money_required ); - } - else - { - self set_map_stat( "depositBox", 0 ); - } - } -} - -transit_custom_deny_vox( door_buy ) //checked matches cerberus output -{ - switch( self.characterindex ) - { - case 0: - alias = randomintrange( 2, 5 ); - if ( isDefined( door_buy ) && door_buy ) - { - alias = undefined; - } - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "door_deny", undefined, alias ); - break; - case 1: - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); - break; - case 2: - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); - break; - case 3: - x = randomint( 100 ); - if ( x > 66 ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); - } - else if ( x > 33 ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_box", undefined, 0 ); - } - else - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 0 ); - } - break; - } -} - -transit_custom_death_vox() //checked matches cerberus output -{ - if ( self.characterindex != 2 ) - { - return 0; - } - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "pain_high" ); - return 1; -} - -transit_custom_powerup_vo_response( powerup_player, powerup ) //checked partially changed to match cerberus output did not use continue in foreach see github for more info -{ - dist = 250000; - players = get_players(); - foreach ( player in players ) - { - if ( player == powerup_player ) - { - } - else if ( distancesquared( player.origin, powerup_player.origin ) < dist ) - { - player do_player_general_vox( "general", "exert_laugh", 10, 5 ); - } - } -} - diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_cling.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_cling.gsc deleted file mode 100644 index 698726d..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_cling.gsc +++ /dev/null @@ -1,359 +0,0 @@ -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -initializecling() -{ - setupclingtrigger(); -} - -setupclingtrigger() -{ - if ( !isDefined( level.the_bus ) ) - { - return; - } - enablecling(); - triggers = []; - level.cling_triggers = []; - triggers = getentarray( "cling_trigger", "script_noteworthy" ); - i = 0; - while ( i < triggers.size ) - { - level.cling_triggers[ i ] = spawnstruct(); - level.cling_triggers[ i ].trigger = triggers[ i ]; - trigger = level.cling_triggers[ i ].trigger; - trigger sethintstring( "Hold [{+activate}] To Cling To The Bus." ); - trigger setcursorhint( "HINT_NOICON" ); - makevisibletoall( trigger ); - trigger enablelinkto(); - trigger linkto( level.the_bus, "", level.the_bus worldtolocalcoords( trigger.origin ), trigger.angles - level.the_bus.angles ); - trigger thread setclingtriggervisibility( i ); - trigger thread clingtriggerusethink( i ); - level.cling_triggers[ i ].position = getent( trigger.target, "targetname" ); - position = level.cling_triggers[ i ].position; - position linkto( level.the_bus, "", level.the_bus worldtolocalcoords( position.origin ), position.angles - level.the_bus.angles ); - level.cling_triggers[ i ].player = undefined; - i++; - } - disablecling(); -} - -enablecling() -{ - level.cling_enabled = 1; - while ( isDefined( level.cling_triggers ) ) - { - _a65 = level.cling_triggers; - _k65 = getFirstArrayKey( _a65 ); - while ( isDefined( _k65 ) ) - { - struct = _a65[ _k65 ]; - struct.trigger sethintstring( "Hold [{+activate}] To Cling To The Bus." ); - struct.trigger setteamfortrigger( "allies" ); - _k65 = getNextArrayKey( _a65, _k65 ); - } - } -} - -disablecling() -{ - level.cling_enabled = 0; - detachallplayersfromclinging(); - while ( isDefined( level.cling_triggers ) ) - { - _a81 = level.cling_triggers; - _k81 = getFirstArrayKey( _a81 ); - while ( isDefined( _k81 ) ) - { - struct = _a81[ _k81 ]; - struct.trigger sethintstring( "" ); - struct.trigger setteamfortrigger( "none" ); - _k81 = getNextArrayKey( _a81, _k81 ); - } - } -} - -makevisibletoall( trigger ) -{ - players = get_players(); - playerindex = 0; - while ( playerindex < players.size ) - { - trigger setinvisibletoplayer( players[ playerindex ], 0 ); - playerindex++; - } -} - -clingtriggerusethink( positionindex ) -{ - while ( 1 ) - { - self waittill( "trigger", who ); - while ( !level.cling_enabled ) - { - continue; - } - while ( !who usebuttonpressed() ) - { - continue; - } - while ( who in_revive_trigger() ) - { - continue; - } - if ( isDefined( who.is_drinking ) && who.is_drinking == 1 ) - { - continue; - } - while ( isDefined( level.cling_triggers[ positionindex ].player ) ) - { - if ( level.cling_triggers[ positionindex ].player == who ) - { - dettachplayerfrombus( who, positionindex ); - } - } - attachplayertobus( who, positionindex ); - thread detachfrombusonevent( who, positionindex ); - } -} - -setclingtriggervisibility( positionindex ) -{ - while ( 1 ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( isDefined( level.cling_triggers[ positionindex ].player ) ) - { - is_player_clinging = level.cling_triggers[ positionindex ].player == players[ i ]; - } - no_player_clinging = !isDefined( level.cling_triggers[ positionindex ].player ); - if ( is_player_clinging || no_player_clinging && level.cling_enabled ) - { - self setinvisibletoplayer( players[ i ], 0 ); - i++; - continue; - } - else - { - self setinvisibletoplayer( players[ i ], 1 ); - } - i++; - } - wait 0,1; - } -} - -detachallplayersfromclinging() -{ - positionindex = 0; - while ( positionindex < level.cling_triggers.size ) - { - if ( !isDefined( level.cling_triggers[ positionindex ] ) || !isDefined( level.cling_triggers[ positionindex ].player ) ) - { - positionindex++; - continue; - } - else - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( level.cling_triggers[ positionindex ].player == players[ i ] ) - { - dettachplayerfrombus( players[ i ], positionindex ); - positionindex++; - continue; - } - else - { - i++; - } - } - } - positionindex++; - } -} - -attachplayertobus( player, positionindex ) -{ - turn_angle = 130; - pitch_up = 25; - if ( positionisupgraded( positionindex ) ) - { - turn_angle = 180; - pitch_up = 120; - } - level.cling_triggers[ positionindex ].player = player; - if ( positionisbl( positionindex ) ) - { - player playerlinktodelta( level.cling_triggers[ positionindex ].position, "tag_origin", 1, 180, turn_angle, pitch_up, 120, 1 ); - } - else if ( positionisbr( positionindex ) ) - { - player playerlinktodelta( level.cling_triggers[ positionindex ].position, "tag_origin", 1, turn_angle, 180, pitch_up, 120, 1 ); - } - else - { - level.cling_triggers[ positionindex ].player = undefined; - return; - } - level.cling_triggers[ positionindex ].trigger sethintstring( "Hold [{+activate}] To Let Go Of The Bus." ); - player disableplayerweapons( positionindex ); -} - -positionisbl( positionindex ) -{ - return level.cling_triggers[ positionindex ].position.script_string == "back_left"; -} - -positionisbr( positionindex ) -{ - return level.cling_triggers[ positionindex ].position.script_string == "back_right"; -} - -positionisupgraded( positionindex ) -{ - if ( positionisbl( positionindex ) && isDefined( level.the_bus.upgrades[ "PlatformL" ] ) && !level.the_bus.upgrades[ "PlatformL" ].installed ) - { - if ( positionisbr( positionindex ) && isDefined( level.the_bus.upgrades[ "PlatformR" ] ) ) - { - return level.the_bus.upgrades[ "PlatformR" ].installed; - } - } -} - -dettachplayerfrombus( player, positionindex ) -{ - level.cling_triggers[ positionindex ].trigger sethintstring( "Hold [{+activate}] To Cling To The Bus." ); - if ( !isDefined( level.cling_triggers[ positionindex ].player ) ) - { - return; - } - player unlink(); - level.cling_triggers[ positionindex ].player = undefined; - player enableplayerweapons( positionindex ); - player notify( "cling_dettached" ); -} - -detachfrombusonevent( player, positionindex ) -{ - player endon( "cling_dettached" ); - player waittill_any( "fake_death", "death", "player_downed" ); - dettachplayerfrombus( player, positionindex ); -} - -disableplayerweapons( positionindex ) -{ - weaponinventory = self getweaponslist( 1 ); - self.lastactiveweapon = self getcurrentweapon(); - self.clingpistol = undefined; - self.hadclingpistol = 0; - if ( !positionisupgraded( positionindex ) ) - { - i = 0; - while ( i < weaponinventory.size ) - { - weapon = weaponinventory[ i ]; - if ( weaponclass( weapon ) == "pistol" && isDefined( self.clingpistol ) || weapon == self.lastactiveweapon && self.clingpistol == "m1911_zm" ) - { - self.clingpistol = weapon; - self.hadclingpistol = 1; - } - i++; - } - if ( !isDefined( self.clingpistol ) ) - { - self giveweapon( "m1911_zm" ); - self.clingpistol = "m1911_zm"; - } - self switchtoweapon( self.clingpistol ); - self disableweaponcycling(); - self disableoffhandweapons(); - self allowcrouch( 0 ); - } - self allowlean( 0 ); - self allowsprint( 0 ); - self allowprone( 0 ); -} - -enableplayerweapons( positionindex ) -{ - self allowlean( 1 ); - self allowsprint( 1 ); - self allowprone( 1 ); - if ( !positionisupgraded( positionindex ) ) - { - if ( !self.hadclingpistol ) - { - self takeweapon( "m1911_zm" ); - } - self enableweaponcycling(); - self enableoffhandweapons(); - self allowcrouch( 1 ); - if ( self.lastactiveweapon != "none" && self.lastactiveweapon != "mortar_round" && self.lastactiveweapon != "mine_bouncing_betty" && self.lastactiveweapon != "claymore_zm" ) - { - self switchtoweapon( self.lastactiveweapon ); - return; - } - else - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - } - } -} - -playerisclingingtobus() -{ - if ( !isDefined( level.cling_triggers ) ) - { - return 0; - } - i = 0; - while ( i < level.cling_triggers.size ) - { - if ( !isDefined( level.cling_triggers[ i ] ) || !isDefined( level.cling_triggers[ i ].player ) ) - { - i++; - continue; - } - else - { - if ( level.cling_triggers[ i ].player == self ) - { - return 1; - } - } - i++; - } - return 0; -} - -_getnumplayersclinging() -{ - num_clinging = 0; - i = 0; - while ( i < level.cling_triggers.size ) - { - if ( isDefined( level.cling_triggers[ i ] ) && isDefined( level.cling_triggers[ i ].player ) ) - { - num_clinging++; - } - i++; - } - return num_clinging; -} - -_getbusattackposition( player ) -{ - pos = ( -208, 0, 48 ); - return level.the_bus localtoworldcoords( pos ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_distance_tracking.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_distance_tracking.gsc deleted file mode 100644 index d23755f..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_distance_tracking.gsc +++ /dev/null @@ -1,161 +0,0 @@ -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -zombie_tracking_init() -{ - level.zombie_respawned_health = []; - if ( !isDefined( level.zombie_tracking_dist ) ) - { - level.zombie_tracking_dist = 1500; - } - if ( !isDefined( level.zombie_tracking_wait ) ) - { - level.zombie_tracking_wait = 10; - } - for ( ;; ) - { - while ( 1 ) - { - zombies = get_round_enemy_array(); - if ( !isDefined( zombies ) || isDefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking ) - { - wait level.zombie_tracking_wait; - } - } - else i = 0; - while ( i < zombies.size ) - { - if ( isDefined( zombies[ i ] ) && isDefined( zombies[ i ].ignore_distance_tracking ) && !zombies[ i ].ignore_distance_tracking ) - { - zombies[ i ] thread delete_zombie_noone_looking( level.zombie_tracking_dist ); - } - i++; - } - wait level.zombie_tracking_wait; - } -} - -delete_zombie_noone_looking( how_close ) -{ - self endon( "death" ); - if ( !isDefined( how_close ) ) - { - how_close = 1000; - } - distance_squared_check = how_close * how_close; - too_far_dist = distance_squared_check * 3; - if ( isDefined( level.zombie_tracking_too_far_dist ) ) - { - too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist; - } - self.inview = 0; - self.player_close = 0; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ].sessionstate == "spectator" ) - { - i++; - continue; - } - else if ( isDefined( level.only_track_targeted_players ) ) - { - if ( !isDefined( self.favoriteenemy ) || self.favoriteenemy != players[ i ] ) - { - i++; - continue; - } - } - else - { - can_be_seen = self player_can_see_me( players[ i ] ); - if ( can_be_seen && distancesquared( self.origin, players[ i ].origin ) < too_far_dist ) - { - self.inview++; - } - if ( distancesquared( self.origin, players[ i ].origin ) < distance_squared_check ) - { - self.player_close++; - } - } - i++; - } - wait 0,1; - if ( self.inview == 0 && self.player_close == 0 ) - { - if ( !isDefined( self.animname ) || isDefined( self.animname ) && self.animname != "zombie" ) - { - return; - } - if ( isDefined( self.electrified ) && self.electrified == 1 ) - { - return; - } - if ( isDefined( self.in_the_ground ) && self.in_the_ground == 1 ) - { - return; - } - zombies = getaiarray( "axis" ); - if ( isDefined( self.damagemod ) && self.damagemod == "MOD_UNKNOWN" && self.health < self.maxhealth ) - { - if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher ) - { - level.zombie_total++; - level.zombie_respawned_health[ level.zombie_respawned_health.size ] = self.health; - } - } - else - { - if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && self.health >= self.maxhealth ) - { - if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher ) - { - level.zombie_total++; - if ( self.health < level.zombie_health ) - { - level.zombie_respawned_health[ level.zombie_respawned_health.size ] = self.health; - } - } - } - } - self maps/mp/zombies/_zm_spawner::reset_attack_spot(); - self notify( "zombie_delete" ); - self delete(); - recalc_zombie_array(); - } -} - -player_can_see_me( player ) -{ - playerangles = player getplayerangles(); - playerforwardvec = anglesToForward( playerangles ); - playerunitforwardvec = vectornormalize( playerforwardvec ); - banzaipos = self.origin; - playerpos = player getorigin(); - playertobanzaivec = banzaipos - playerpos; - playertobanzaiunitvec = vectornormalize( playertobanzaivec ); - forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec ); - if ( forwarddotbanzai >= 1 ) - { - anglefromcenter = 0; - } - else if ( forwarddotbanzai <= -1 ) - { - anglefromcenter = 180; - } - else - { - anglefromcenter = acos( forwarddotbanzai ); - } - playerfov = getDvarFloat( "cg_fov" ); - banzaivsplayerfovbuffer = getDvarFloat( "g_banzai_player_fov_buffer" ); - if ( banzaivsplayerfovbuffer <= 0 ) - { - banzaivsplayerfovbuffer = 0,2; - } - playercanseeme = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) ); - return playercanseeme; -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_ffotd.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_ffotd.gsc deleted file mode 100644 index 6b74347..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_ffotd.gsc +++ /dev/null @@ -1,291 +0,0 @@ -#include maps/mp/zm_transit; -#include maps/mp/zombies/_zm_ffotd; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -main_start() -{ - precachemodel( "collision_wall_256x256x10_standard" ); - precachemodel( "collision_geo_32x32x10_standard" ); - precachemodel( "collision_wall_128x128x10_standard" ); - precachemodel( "collision_wall_64x64x10_standard" ); - precachemodel( "collision_wall_512x512x10_standard" ); - precachemodel( "collision_player_32x32x128" ); - precachemodel( "collision_player_256x256x256" ); - old_roof_trig = getent( "bus_roof_watch", "targetname" ); - level.roof_trig = spawn( "trigger_box", old_roof_trig.origin, 0, 464, 180, 120 ); - level.roof_trig.targetname = "bus_roof_watch"; - old_roof_trig delete(); - if ( isDefined( level.use_swipe_protection ) ) - { - onplayerconnect_callback( ::claymore_watch_swipes ); - } - powerdoors = getentarray( "local_electric_door", "script_noteworthy" ); - _a29 = powerdoors; - _k29 = getFirstArrayKey( _a29 ); - while ( isDefined( _k29 ) ) - { - door = _a29[ _k29 ]; - if ( isDefined( door.door_hold_trigger ) && door.door_hold_trigger == "zombie_door_hold_diner" ) - { - if ( isDefined( door.script_flag ) && door.script_flag == "OnPriDoorYar" ) - { - door.script_flag = undefined; - } - } - _k29 = getNextArrayKey( _a29, _k29 ); - } -} - -main_end() -{ - if ( !is_true( level.optimise_for_splitscreen ) ) - { - maps/mp/zombies/_zm::spawn_kill_brush( ( 33, -450, -90 ), 982, 15 ); - location = level.scr_zm_map_start_location; - type = level.scr_zm_ui_gametype; - collision4 = spawn( "script_model", ( 12240, 8480, -720 ) ); - collision4 setmodel( "collision_wall_64x64x10_standard" ); - collision4.angles = ( 0, 1, 0 ); - collision4 ghost(); - collision5 = spawn( "script_model", ( 8320, -6679, 362 ) ); - collision5 setmodel( "collision_wall_256x256x10_standard" ); - collision5.angles = vectorScale( ( 0, 1, 0 ), 300 ); - collision5 ghost(); - collision6 = spawn( "script_model", ( 8340, -5018, 191 ) ); - collision6 setmodel( "collision_geo_32x32x10_standard" ); - collision6.angles = vectorScale( ( 0, 1, 0 ), 270 ); - collision6 ghost(); - collision7 = spawn( "script_model", ( 8340, -5018, 219 ) ); - collision7 setmodel( "collision_geo_32x32x10_standard" ); - collision7.angles = vectorScale( ( 0, 1, 0 ), 270 ); - collision7 ghost(); - collision8 = spawn( "script_model", ( 8044, -5018, 191 ) ); - collision8 setmodel( "collision_geo_32x32x10_standard" ); - collision8.angles = vectorScale( ( 0, 1, 0 ), 270 ); - collision8 ghost(); - collision9 = spawn( "script_model", ( 8044, -5018, 219 ) ); - collision9 setmodel( "collision_geo_32x32x10_standard" ); - collision9.angles = vectorScale( ( 0, 1, 0 ), 270 ); - collision9 ghost(); - if ( location == "town" && type == "zstandard" ) - { - collision10 = spawn( "script_model", ( 1820, 126, 152 ) ); - collision10 setmodel( "collision_wall_128x128x10_standard" ); - collision10.angles = vectorScale( ( 0, 1, 0 ), 262 ); - collision10 ghost(); - } - collision11 = spawn( "script_model", ( 11216,3, 8188, -432 ) ); - collision11 setmodel( "collision_wall_128x128x10_standard" ); - collision11.angles = vectorScale( ( 0, 1, 0 ), 180 ); - collision11 ghost(); - collision12 = spawn( "script_model", ( -454, 620,25, -1,75 ) ); - collision12 setmodel( "collision_wall_128x128x10_standard" ); - collision12.angles = vectorScale( ( 0, 1, 0 ), 330 ); - collision12 ghost(); - collision13 = spawn( "script_model", ( 11798, 8410, -734 ) ); - collision13 setmodel( "collision_wall_128x128x10_standard" ); - collision13.angles = ( 90, 260,589, -10,311 ); - collision13 ghost(); - collision14 = spawn( "script_model", ( 652, 240, 124 ) ); - collision14 setmodel( "collision_wall_128x128x10_standard" ); - collision14.angles = vectorScale( ( 0, 1, 0 ), 105 ); - collision14 ghost(); - if ( location == "farm" && type == "zgrief" ) - { - collision15 = spawn( "script_model", ( 8052, -5204, 380 ) ); - collision15 setmodel( "collision_wall_64x64x10_standard" ); - collision15.angles = vectorScale( ( 0, 1, 0 ), 180 ); - collision15 ghost(); - } - collision16 = spawn( "script_model", ( -448, 328, 112 ) ); - collision16 setmodel( "collision_wall_512x512x10_standard" ); - collision16.angles = ( 270, 67,822, 22,1776 ); - collision16 ghost(); - collision17 = spawn( "script_model", ( 6040, -5744, 240 ) ); - collision17 setmodel( "collision_player_256x256x256" ); - collision17.angles = vectorScale( ( 0, 1, 0 ), 90 ); - collision17 ghost(); - collision18 = spawn( "script_model", ( -6744, 4184, 64 ) ); - collision18 setmodel( "collision_wall_128x128x10_standard" ); - collision18.angles = vectorScale( ( 0, 1, 0 ), 90 ); - collision18 ghost(); - collision19 = spawn( "script_model", ( -6328, -7168, 264 ) ); - collision19 setmodel( "collision_player_256x256x256" ); - collision19.angles = vectorScale( ( 0, 1, 0 ), 90 ); - collision19 ghost(); - collision20 = spawn( "script_model", ( 9960, 7352, -136 ) ); - collision20 setmodel( "collision_player_256x256x256" ); - collision20.angles = vectorScale( ( 0, 1, 0 ), 90 ); - collision20 ghost(); - collision21 = spawn( "script_model", ( -4656, -7373, 0 ) ); - collision21 setmodel( "collision_player_32x32x128" ); - collision21.angles = vectorScale( ( 0, 1, 0 ), 341,6 ); - collision21 ghost(); - } - apartment_exploit(); - town_truck_exploit(); - farm_porch_exploit(); - power_station_exploit(); - nacht_exploit(); - level.equipment_dead_zone_pos = []; - level.equipment_dead_zone_rad2 = []; - level.equipment_dead_zone_type = []; - level.equipment_dead_zone_pos[ 0 ] = ( -6252,98, -7947,23, 149,125 ); - level.equipment_dead_zone_rad2[ 0 ] = 3600; - level.equipment_dead_zone_pos[ 1 ] = ( -11752, -2515, 288 ); - level.equipment_dead_zone_rad2[ 1 ] = 14400; - level.equipment_dead_zone_type[ 1 ] = "t6_wpn_zmb_shield_world"; - level.equipment_dead_zone_pos[ 2 ] = ( -6664, 4592, -48 ); - level.equipment_dead_zone_rad2[ 2 ] = 2304; - level.equipment_dead_zone_type[ 2 ] = "t6_wpn_zmb_shield_world"; - level.equipment_dead_zone_pos[ 3 ] = ( 7656, -4741, 38 ); - level.equipment_dead_zone_rad2[ 3 ] = 2304; - level.equipment_dead_zone_type[ 3 ] = "t6_wpn_zmb_shield_world"; - level.equipment_dead_zone_pos[ 4 ] = ( -11712, -776, 224 ); - level.equipment_dead_zone_rad2[ 4 ] = 16384; - level.equipment_dead_zone_type[ 4 ] = "t6_wpn_zmb_shield_world"; - level.equipment_dead_zone_pos[ 5 ] = ( -4868, -7713, -42 ); - level.equipment_dead_zone_rad2[ 5 ] = 256; - level.equipment_dead_zone_type[ 5 ] = "t6_wpn_zmb_shield_world"; - level.equipment_safe_to_drop = ::equipment_safe_to_drop_ffotd; -} - -apartment_exploit() -{ - zombie_trigger_origin = ( 994, -1145, 130 ); - zombie_trigger_radius = 32; - zombie_trigger_height = 64; - player_trigger_origin = ( 1068, -1085, 130 ); - player_trigger_radius = 72; - zombie_goto_point = ( 1024, -1024, 136 ); - level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); -} - -nacht_exploit() -{ - zombie_trigger_origin = ( 13720, -639, -188 ); - zombie_trigger_radius = 64; - zombie_trigger_height = 128; - player_trigger_origin = ( 13605, -651, -188 ); - player_trigger_radius = 64; - zombie_goto_point = ( 13671, -745, -188 ); - level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); -} - -town_truck_exploit() -{ - zombie_trigger_origin = ( 1414, -1921, -42 ); - zombie_trigger_radius = 50; - zombie_trigger_height = 64; - player_trigger_origin = ( 1476, -1776, -42 ); - player_trigger_radius = 76; - zombie_goto_point = ( 1476, -1867, -42 ); - level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); -} - -farm_porch_exploit() -{ - zombie_trigger_origin = ( 7864, -6088, 104 ); - zombie_trigger_radius = 85,5; - zombie_trigger_height = 64; - player_trigger_origin = ( 7984, -6128, 168 ); - player_trigger_radius = 44; - zombie_goto_point = ( 7960, -6072, 96 ); - level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); - zombie_trigger_origin = ( 7996, -6169, 132 ); - zombie_trigger_radius = 200,1; - zombie_trigger_height = 64; - player_trigger_origin = ( 7893, -6078, 121 ); - player_trigger_radius = 50; - zombie_goto_point = ( 7828, -6052,5, 125 ); - level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); -} - -power_station_exploit() -{ - zombie_trigger_origin = ( 11248, 8504, -560 ); - zombie_trigger_radius = 125; - zombie_trigger_height = 64; - player_trigger_origin = ( 11368, 8624, -560 ); - player_trigger_radius = 65; - zombie_goto_point = ( 11352, 8560, -560 ); - level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); - zombie_trigger_origin = ( 11168, 8880, -568 ); - zombie_trigger_radius = 78; - zombie_trigger_height = 64; - player_trigger_origin = ( 11048, 8888, -568 ); - player_trigger_radius = 79; - zombie_goto_point = ( 11072, 8912, -568 ); - level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); -} - -equipment_safe_to_drop_ffotd( weapon ) -{ - i = 0; - while ( i < level.equipment_dead_zone_pos.size ) - { - if ( distancesquared( level.equipment_dead_zone_pos[ i ], weapon.origin ) < level.equipment_dead_zone_rad2[ i ] ) - { - if ( isDefined( level.equipment_dead_zone_type[ i ] ) || !isDefined( weapon.model ) && level.equipment_dead_zone_type[ i ] == weapon.model ) - { - return 0; - } - } - i++; - } - return self maps/mp/zm_transit::equipment_safe_to_drop( weapon ); -} - -claymore_watch_swipes() -{ - self endon( "disconnect" ); - self notify( "claymore_watch_swipes" ); - self endon( "claymore_watch_swipes" ); - while ( 1 ) - { - self waittill( "weapon_change", weapon ); - if ( is_placeable_mine( weapon ) ) - { - self.mine_damage = 0; - self thread watch_melee_swipes( weapon ); - } - } -} - -watch_melee_swipes( weapname ) -{ - self endon( "weapon_change" ); - self endon( "death" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "melee_swipe", zombie ); - self.mine_damage++; - if ( self.mine_damage > 5 ) - { - self.mine_damage = 0; - ammo = self getweaponammoclip( weapname ); - if ( ammo >= 1 ) - { - self setweaponammoclip( weapname, ammo - 1 ); - if ( ammo == 1 ) - { - self setweaponammoclip( weapname, ammo - 1 ); - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons[ 0 ] ) ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - } - break; - } - else - { - self takeweapon( weapname ); - } - } - } -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_fx.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_fx.gsc deleted file mode 100644 index 6a3fbc3..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_fx.gsc +++ /dev/null @@ -1,124 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/createart/zm_transit_art; -#include maps/mp/createfx/zm_transit_fx; -#include maps/mp/_utility; - -main() //checked matches cerberus output -{ - precache_createfx_fx(); - precache_scripted_fx(); - maps/mp/createfx/zm_transit_fx::main(); - maps/mp/createart/zm_transit_art::main(); -} - -precache_scripted_fx() //checked matches cerberus output -{ - level._effect[ "switch_sparks" ] = loadfx( "env/electrical/fx_elec_wire_spark_burst" ); - level._effect[ "maxis_sparks" ] = loadfx( "maps/zombie/fx_zmb_race_trail_grief" ); - level._effect[ "richtofen_sparks" ] = loadfx( "maps/zombie/fx_zmb_race_trail_neutral" ); - level._effect[ "sq_common_lightning" ] = loadfx( "maps/zombie/fx_zmb_tranzit_sq_lightning_orb" ); - level._effect[ "zapper_light_ready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_green" ); - level._effect[ "zapper_light_notready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_red" ); - level._effect[ "lght_marker" ] = loadfx( "maps/zombie/fx_zmb_tranzit_marker" ); - level._effect[ "lght_marker_flare" ] = loadfx( "maps/zombie/fx_zmb_tranzit_marker_fl" ); - level._effect[ "poltergeist" ] = loadfx( "misc/fx_zombie_couch_effect" ); - level._effect[ "zomb_gib" ] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" ); - level._effect[ "fx_headlight" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_headlight" ); - level._effect[ "fx_headlight_lenflares" ] = loadfx( "lens_flares/fx_lf_zmb_tranzit_bus_headlight" ); - level._effect[ "fx_brakelight" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_brakelights" ); - level._effect[ "fx_emergencylight" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_flashing_lights" ); - level._effect[ "fx_turn_signal_right" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_turnsignal_right" ); - level._effect[ "fx_turn_signal_left" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_turnsignal_left" ); - level._effect[ "fx_zbus_trans_fog" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_fog_intersect" ); - level._effect[ "bus_lava_driving" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_fire_driving" ); - level._effect[ "bus_hatch_bust" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bus_hatch_bust" ); - level._effect[ "elec_md" ] = loadfx( "electrical/fx_elec_player_md" ); - level._effect[ "elec_sm" ] = loadfx( "electrical/fx_elec_player_sm" ); - level._effect[ "elec_torso" ] = loadfx( "electrical/fx_elec_player_torso" ); - level._effect[ "blue_eyes" ] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" ); - level._effect[ "lava_burning" ] = loadfx( "env/fire/fx_fire_lava_player_torso" ); - level._effect[ "mc_trafficlight" ] = loadfx( "maps/zombie/fx_zmb_morsecode_traffic_loop" ); - level._effect[ "mc_towerlight" ] = loadfx( "maps/zombie/fx_zmb_morsecode_loop" ); -} - -precache_createfx_fx() //checked matches cerberus output -{ - level._effect[ "fx_insects_swarm_md_light" ] = loadfx( "bio/insects/fx_insects_swarm_md_light" ); - level._effect[ "fx_zmb_tranzit_flourescent_flicker" ] = loadfx( "maps/zombie/fx_zmb_tranzit_flourescent_flicker" ); - level._effect[ "fx_zmb_tranzit_flourescent_glow" ] = loadfx( "maps/zombie/fx_zmb_tranzit_flourescent_glow" ); - level._effect[ "fx_zmb_tranzit_flourescent_glow_lg" ] = loadfx( "maps/zombie/fx_zmb_tranzit_flourescent_glow_lg" ); - level._effect[ "fx_zmb_tranzit_flourescent_dbl_glow" ] = loadfx( "maps/zombie/fx_zmb_tranzit_flourescent_dbl_glow" ); - level._effect[ "fx_zmb_tranzit_depot_map_flicker" ] = loadfx( "maps/zombie/fx_zmb_tranzit_depot_map_flicker" ); - level._effect[ "fx_zmb_tranzit_light_bulb_xsm" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_bulb_xsm" ); - level._effect[ "fx_zmb_tranzit_light_glow" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_glow" ); - level._effect[ "fx_zmb_tranzit_light_glow_xsm" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_glow_xsm" ); - level._effect[ "fx_zmb_tranzit_light_glow_fog" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_glow_fog" ); - level._effect[ "fx_zmb_tranzit_light_depot_cans" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_depot_cans" ); - level._effect[ "fx_zmb_tranzit_light_desklamp" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_desklamp" ); - level._effect[ "fx_zmb_tranzit_light_town_cans" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_town_cans" ); - level._effect[ "fx_zmb_tranzit_light_town_cans_sm" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_town_cans_sm" ); - level._effect[ "fx_zmb_tranzit_light_street_tinhat" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_street_tinhat" ); - level._effect[ "fx_zmb_tranzit_street_lamp" ] = loadfx( "maps/zombie/fx_zmb_tranzit_street_lamp" ); - level._effect[ "fx_zmb_tranzit_truck_light" ] = loadfx( "maps/zombie/fx_zmb_tranzit_truck_light" ); - level._effect[ "fx_zmb_tranzit_spark_int_runner" ] = loadfx( "maps/zombie/fx_zmb_tranzit_spark_int_runner" ); - level._effect[ "fx_zmb_tranzit_spark_ext_runner" ] = loadfx( "maps/zombie/fx_zmb_tranzit_spark_ext_runner" ); - level._effect[ "fx_zmb_tranzit_spark_blue_lg_loop" ] = loadfx( "maps/zombie/fx_zmb_tranzit_spark_blue_lg_loop" ); - level._effect[ "fx_zmb_tranzit_spark_blue_sm_loop" ] = loadfx( "maps/zombie/fx_zmb_tranzit_spark_blue_sm_loop" ); - level._effect[ "fx_zmb_tranzit_bar_glow" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bar_glow" ); - level._effect[ "fx_zmb_tranzit_transformer_on" ] = loadfx( "maps/zombie/fx_zmb_tranzit_transformer_on" ); - level._effect[ "fx_zmb_fog_closet" ] = loadfx( "fog/fx_zmb_fog_closet" ); - level._effect[ "fx_zmb_fog_low_300x300" ] = loadfx( "fog/fx_zmb_fog_low_300x300" ); - level._effect[ "fx_zmb_fog_thick_600x600" ] = loadfx( "fog/fx_zmb_fog_thick_600x600" ); - level._effect[ "fx_zmb_fog_thick_1200x600" ] = loadfx( "fog/fx_zmb_fog_thick_1200x600" ); - level._effect[ "fx_zmb_fog_transition_600x600" ] = loadfx( "fog/fx_zmb_fog_transition_600x600" ); - level._effect[ "fx_zmb_fog_transition_1200x600" ] = loadfx( "fog/fx_zmb_fog_transition_1200x600" ); - level._effect[ "fx_zmb_fog_transition_right_border" ] = loadfx( "fog/fx_zmb_fog_transition_right_border" ); - level._effect[ "fx_zmb_tranzit_smk_interior_md" ] = loadfx( "maps/zombie/fx_zmb_tranzit_smk_interior_md" ); - level._effect[ "fx_zmb_tranzit_smk_interior_heavy" ] = loadfx( "maps/zombie/fx_zmb_tranzit_smk_interior_heavy" ); - level._effect[ "fx_zmb_ash_ember_1000x1000" ] = loadfx( "maps/zombie/fx_zmb_ash_ember_1000x1000" ); - level._effect[ "fx_zmb_ash_ember_2000x1000" ] = loadfx( "maps/zombie/fx_zmb_ash_ember_2000x1000" ); - level._effect[ "fx_zmb_ash_rising_md" ] = loadfx( "maps/zombie/fx_zmb_ash_rising_md" ); - level._effect[ "fx_zmb_ash_windy_heavy_sm" ] = loadfx( "maps/zombie/fx_zmb_ash_windy_heavy_sm" ); - level._effect[ "fx_zmb_ash_windy_heavy_md" ] = loadfx( "maps/zombie/fx_zmb_ash_windy_heavy_md" ); - level._effect[ "fx_zmb_lava_detail" ] = loadfx( "maps/zombie/fx_zmb_lava_detail" ); - level._effect[ "fx_zmb_lava_edge_100" ] = loadfx( "maps/zombie/fx_zmb_lava_edge_100" ); - level._effect[ "fx_zmb_lava_50x50_sm" ] = loadfx( "maps/zombie/fx_zmb_lava_50x50_sm" ); - level._effect[ "fx_zmb_lava_100x100" ] = loadfx( "maps/zombie/fx_zmb_lava_100x100" ); - level._effect[ "fx_zmb_lava_river" ] = loadfx( "maps/zombie/fx_zmb_lava_river" ); - level._effect[ "fx_zmb_lava_creek" ] = loadfx( "maps/zombie/fx_zmb_lava_creek" ); - level._effect[ "fx_zmb_lava_crevice_glow_50" ] = loadfx( "maps/zombie/fx_zmb_lava_crevice_glow_50" ); - level._effect[ "fx_zmb_lava_crevice_glow_100" ] = loadfx( "maps/zombie/fx_zmb_lava_crevice_glow_100" ); - level._effect[ "fx_zmb_lava_crevice_smoke_100" ] = loadfx( "maps/zombie/fx_zmb_lava_crevice_smoke_100" ); - level._effect[ "fx_zmb_lava_smoke_tall" ] = loadfx( "maps/zombie/fx_zmb_lava_smoke_tall" ); - level._effect[ "fx_zmb_lava_smoke_pit" ] = loadfx( "maps/zombie/fx_zmb_lava_smoke_pit" ); - level._effect[ "fx_zmb_tranzit_bowling_sign_fog" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bowling_sign_fog" ); - level._effect[ "fx_zmb_tranzit_lava_distort" ] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_distort" ); - level._effect[ "fx_zmb_tranzit_lava_distort_sm" ] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_distort_sm" ); - level._effect[ "fx_zmb_tranzit_lava_distort_detail" ] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_distort_detail" ); - level._effect[ "fx_zmb_tranzit_fire_med" ] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_med" ); - level._effect[ "fx_zmb_tranzit_fire_lrg" ] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_lrg" ); - level._effect[ "fx_zmb_tranzit_smk_column_lrg" ] = loadfx( "maps/zombie/fx_zmb_tranzit_smk_column_lrg" ); - level._effect[ "fx_zmb_papers_windy_slow" ] = loadfx( "maps/zombie/fx_zmb_papers_windy_slow" ); - level._effect[ "fx_zmb_tranzit_god_ray_short_warm" ] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_short_warm" ); - level._effect[ "fx_zmb_tranzit_god_ray_vault" ] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_vault" ); - level._effect[ "fx_zmb_tranzit_key_glint" ] = loadfx( "maps/zombie/fx_zmb_tranzit_key_glint" ); - level._effect[ "fx_zmb_tranzit_god_ray_interior_med" ] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_interior_med" ); - level._effect[ "fx_zmb_tranzit_god_ray_interior_long" ] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_interior_long" ); - level._effect[ "fx_zmb_tranzit_god_ray_depot_cool" ] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_depot_cool" ); - level._effect[ "fx_zmb_tranzit_god_ray_depot_warm" ] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_depot_warm" ); - level._effect[ "fx_zmb_tranzit_god_ray_tunnel_warm" ] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_tunnel_warm" ); - level._effect[ "fx_zmb_tranzit_god_ray_pwr_station" ] = loadfx( "maps/zombie/fx_zmb_tranzit_god_ray_pwr_station" ); - level._effect[ "fx_zmb_tranzit_light_safety" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_safety" ); - level._effect[ "fx_zmb_tranzit_light_safety_off" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_safety_off" ); - level._effect[ "fx_zmb_tranzit_light_safety_max" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_safety_max" ); - level._effect[ "fx_zmb_tranzit_light_safety_ric" ] = loadfx( "maps/zombie/fx_zmb_tranzit_light_safety_ric" ); - level._effect[ "fx_zmb_tranzit_bridge_dest" ] = loadfx( "maps/zombie/fx_zmb_tranzit_bridge_dest" ); - level._effect[ "fx_zmb_tranzit_power_pulse" ] = loadfx( "maps/zombie/fx_zmb_tranzit_power_pulse" ); - level._effect[ "fx_zmb_tranzit_power_on" ] = loadfx( "maps/zombie/fx_zmb_tranzit_power_on" ); - level._effect[ "fx_zmb_tranzit_power_rising" ] = loadfx( "maps/zombie/fx_zmb_tranzit_power_rising" ); - level._effect[ "fx_zmb_avog_storm" ] = loadfx( "maps/zombie/fx_zmb_avog_storm" ); - level._effect[ "fx_zmb_avog_storm_low" ] = loadfx( "maps/zombie/fx_zmb_avog_storm_low" ); - level._effect[ "glass_impact" ] = loadfx( "maps/zombie/fx_zmb_tranzit_window_dest_lg" ); - level._effect[ "fx_zmb_tranzit_spark_blue_lg_os" ] = loadfx( "maps/zombie/fx_zmb_tranzit_spark_blue_lg_os" ); - level._effect[ "spawn_cloud" ] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_gamemodes.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_gamemodes.gsc deleted file mode 100644 index 2e92c99..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_gamemodes.gsc +++ /dev/null @@ -1,29 +0,0 @@ -//checked includes changed to match cerberus output -#include maps/mp/zm_transit_grief_town; -#include maps/mp/zm_transit_grief_farm; -#include maps/mp/zm_transit_grief_station; -#include maps/mp/zm_transit_standard_town; -#include maps/mp/zm_transit_standard_farm; -#include maps/mp/zm_transit_standard_station; -#include maps/mp/zm_transit_classic; -#include maps/mp/zm_transit; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zm_transit_utility; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - add_map_gamemode( "zclassic", maps/mp/zm_transit::zclassic_preinit, undefined, undefined ); - add_map_gamemode( "zgrief", maps/mp/zm_transit::zgrief_preinit, undefined, undefined ); - add_map_gamemode( "zstandard", maps/mp/zm_transit::zstandard_preinit, undefined, undefined ); - add_map_location_gamemode( "zclassic", "transit", maps/mp/zm_transit_classic::precache, maps/mp/zm_transit_classic::main ); - add_map_location_gamemode( "zstandard", "transit", maps/mp/zm_transit_standard_station::precache, maps/mp/zm_transit_standard_station::main ); - add_map_location_gamemode( "zstandard", "farm", maps/mp/zm_transit_standard_farm::precache, maps/mp/zm_transit_standard_farm::main ); - add_map_location_gamemode( "zstandard", "town", maps/mp/zm_transit_standard_town::precache, maps/mp/zm_transit_standard_town::main ); - add_map_location_gamemode( "zgrief", "transit", maps/mp/zm_transit_grief_station::precache, maps/mp/zm_transit_grief_station::main ); - add_map_location_gamemode( "zgrief", "farm", maps/mp/zm_transit_grief_farm::precache, maps/mp/zm_transit_grief_farm::main ); - add_map_location_gamemode( "zgrief", "town", maps/mp/zm_transit_grief_town::precache, maps/mp/zm_transit_grief_town::main ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_grief_farm.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_grief_farm.gsc deleted file mode 100644 index e77d46c..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_grief_farm.gsc +++ /dev/null @@ -1,93 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/gametypes_zm/zmeat; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -precache() //checked matches cerberus output -{ -} - -farm_treasure_chest_init() //checked matches cerberus output -{ - chest1 = getstruct( "farm_chest", "script_noteworthy" ); - level.chests = []; - level.chests[ level.chests.size ] = chest1; - maps/mp/zombies/_zm_magicbox::treasure_chest_init( "farm_chest" ); -} - -main() //checked matches cerberus output -{ - maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "farm" ); - init_standard_farm(); - farm_treasure_chest_init(); - level.enemy_location_override_func = ::enemy_location_override; - flag_wait( "initial_blackscreen_passed" ); - level thread maps/mp/zombies/_zm_zonemgr::enable_zone( "zone_far_ext" ); - level thread maps/mp/zombies/_zm_zonemgr::enable_zone( "zone_brn" ); - maps/mp/zombies/_zm_game_module::turn_power_on_and_open_doors(); - flag_wait( "start_zombie_round_logic" ); - wait 1; - level notify( "revive_on" ); - wait_network_frame(); - level notify( "doubletap_on" ); - wait_network_frame(); - level notify( "juggernog_on" ); - wait_network_frame(); - level notify( "sleight_on" ); - wait_network_frame(); - /* -/# - level thread maps/mp/gametypes_zm/zmeat::spawn_level_meat_manager(); -#/ - */ -} - -init_standard_farm() //checked partially changed to match cerberus output see info.md No. 1, No. 2 -{ - maps/mp/zombies/_zm_game_module::set_current_game_module( level.game_module_standard_index ); - ents = getentarray(); - foreach ( ent in ents ) - { - if ( isDefined( ent.script_flag ) && ent.script_flag == "OnFarm_enter" ) - { - ent delete(); - } - else - { - if ( isDefined( ent.script_parameters ) ) - { - tokens = strtok( ent.script_parameters, " " ); - remove = 0; - for ( i = 0; i < tokens.size; i++ ) - { - if ( tokens[ i ] == "standard_remove" ) - { - remove = 1; - } - } - if ( remove ) - { - ent delete(); - } - } - } - } -} - -enemy_location_override( zombie, enemy ) //checked matches cerberus output -{ - location = enemy.origin; - if ( is_true( self.reroute ) ) - { - if ( isDefined( self.reroute_origin ) ) - { - location = self.reroute_origin; - } - } - return location; -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_grief_station.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_grief_station.gsc deleted file mode 100644 index decce4a..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_grief_station.gsc +++ /dev/null @@ -1,58 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/gametypes_zm/zmeat; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -precache() //checked matches cerberus output -{ - precachemodel( "zm_collision_transit_busdepot_survival" ); -} - -station_treasure_chest_init() //checked matches cerberus output -{ - chest1 = getstruct( "depot_chest", "script_noteworthy" ); - level.chests = []; - level.chests[ level.chests.size ] = chest1; - maps/mp/zombies/_zm_magicbox::treasure_chest_init( "depot_chest" ); -} - -main() //checked changed to match cerberus output -{ - maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "station" ); - station_treasure_chest_init(); - level.enemy_location_override_func = ::enemy_location_override; - collision = spawn( "script_model", ( -6896, 4744, 0 ), 1 ); - collision setmodel( "zm_collision_transit_busdepot_survival" ); - collision disconnectpaths(); - flag_wait( "initial_blackscreen_passed" ); - nodes = getnodearray( "classic_only_traversal", "targetname" ); - foreach ( node in nodes ) - { - unlink_nodes( node, getnode( node.target, "targetname" ) ); - } - level thread maps/mp/zombies/_zm_perks::perk_machine_removal( "specialty_quickrevive", "p_glo_tools_chest_tall" ); - maps/mp/zombies/_zm_game_module::turn_power_on_and_open_doors(); - /* -/# - level thread maps/mp/gametypes_zm/zmeat::spawn_level_meat_manager(); -#/ - */ -} - -enemy_location_override( zombie, enemy ) //checked matches cerberus output -{ - location = enemy.origin; - if ( is_true( self.reroute ) ) - { - if ( isDefined( self.reroute_origin ) ) - { - location = self.reroute_origin; - } - } - return location; -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_grief_town.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_grief_town.gsc deleted file mode 100644 index aa9dd34..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_grief_town.gsc +++ /dev/null @@ -1,69 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/gametypes_zm/zmeat; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_race_utility; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -precache() //checked matches cerberus output -{ - precachemodel( "zm_collision_transit_town_survival" ); -} - -town_treasure_chest_init() //checked matches cerberus output -{ - chest1 = getstruct( "town_chest", "script_noteworthy" ); - chest2 = getstruct( "town_chest_2", "script_noteworthy" ); - setdvar( "disable_rope", 1 ); - setdvar( "disableLookAtEntityLogic", 1 ); - level.chests = []; - level.chests[ level.chests.size ] = chest1; - level.chests[ level.chests.size ] = chest2; - maps/mp/zombies/_zm_magicbox::treasure_chest_init( "town_chest" ); -} - -main() //checked matches cerberus output -{ - maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "town" ); - town_treasure_chest_init(); - level.enemy_location_override_func = ::enemy_location_override; - collision = spawn( "script_model", ( 1363, 471, 0 ), 1 ); - collision setmodel( "zm_collision_transit_town_survival" ); - collision disconnectpaths(); - flag_wait( "initial_blackscreen_passed" ); - maps/mp/zombies/_zm_game_module::turn_power_on_and_open_doors(); - flag_wait( "start_zombie_round_logic" ); - wait 1; - level notify( "revive_on" ); - wait_network_frame(); - level notify( "doubletap_on" ); - wait_network_frame(); - level notify( "marathon_on" ); - wait_network_frame(); - level notify( "juggernog_on" ); - wait_network_frame(); - level notify( "sleight_on" ); - wait_network_frame(); - level notify( "Pack_A_Punch_on" ); - /* -/# - level thread maps/mp/gametypes_zm/zmeat::spawn_level_meat_manager(); -#/ - */ -} - -enemy_location_override( zombie, enemy ) //checked matches cerberus output -{ - location = enemy.origin; - if ( is_true( self.reroute ) ) - { - if ( isDefined( self.reroute_origin ) ) - { - location = self.reroute_origin; - } - } - return location; -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_lava.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_lava.gsc deleted file mode 100644 index 4b5bb0f..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_lava.gsc +++ /dev/null @@ -1,384 +0,0 @@ -#include maps/mp/animscripts/zm_death; -#include maps/mp/_visionset_mgr; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -object_touching_lava() -{ - if ( !isDefined( level.lava ) ) - { - level.lava = getentarray( "lava_damage", "targetname" ); - } - if ( !isDefined( level.lava ) || level.lava.size < 1 ) - { - return 0; - } - if ( isDefined( self.lasttouching ) && self istouching( self.lasttouching ) ) - { - return 1; - } - i = 0; - while ( i < level.lava.size ) - { - if ( distancesquared( self.origin, level.lava[ i ].origin ) < 2250000 ) - { - if ( isDefined( level.lava[ i ].target ) ) - { - if ( self istouching( level.lava[ i ].volume ) ) - { - if ( isDefined( level.lava[ i ].script_float ) && level.lava[ i ].script_float <= 0,1 ) - { - return 0; - } - self.lasttouching = level.lava[ i ].volume; - return 1; - } - } - else - { - if ( self istouching( level.lava[ i ] ) ) - { - self.lasttouching = level.lava[ i ]; - return 1; - } - } - } - i++; - } - self.lasttouching = undefined; - return 0; -} - -lava_damage_init() -{ - lava = getentarray( "lava_damage", "targetname" ); - if ( !isDefined( lava ) ) - { - return; - } - array_thread( lava, ::lava_damage_think ); -} - -lava_damage_think() -{ - self._trap_type = ""; - if ( isDefined( self.script_noteworthy ) ) - { - self._trap_type = self.script_noteworthy; - } - if ( isDefined( self.target ) ) - { - self.volume = getent( self.target, "targetname" ); -/# - assert( isDefined( self.volume ), "No volume found for lava target " + self.target ); -#/ - } - while ( 1 ) - { - self waittill( "trigger", ent ); - if ( isDefined( ent.ignore_lava_damage ) && ent.ignore_lava_damage ) - { - continue; - } - while ( isDefined( ent.is_burning ) ) - { - continue; - } - if ( isDefined( self.target ) && !ent istouching( self.volume ) ) - { - continue; - } - if ( isplayer( ent ) ) - { - switch( self._trap_type ) - { - case "fire": - default: - if ( !isDefined( self.script_float ) || self.script_float >= 0,1 ) - { - ent thread player_lava_damage( self ); - } - break; - } - break; - continue; - } - else if ( !isDefined( ent.marked_for_death ) ) - { - switch( self._trap_type ) - { - case "fire": - default: - if ( !isDefined( self.script_float ) || self.script_float >= 0,1 ) - { - ent thread zombie_lava_damage( self ); - } - break; - break; - } - } -} -} - -player_lava_damage( trig ) -{ - self endon( "zombified" ); - self endon( "death" ); - self endon( "disconnect" ); - max_dmg = 15; - min_dmg = 5; - burn_time = 1; - if ( isDefined( self.is_zombie ) && self.is_zombie ) - { - return; - } - self thread player_stop_burning(); - if ( isDefined( trig.script_float ) ) - { - max_dmg *= trig.script_float; - min_dmg *= trig.script_float; - burn_time *= trig.script_float; - if ( burn_time >= 1,5 ) - { - burn_time = 1,5; - } - } - if ( !isDefined( self.is_burning ) && is_player_valid( self ) ) - { - self.is_burning = 1; - maps/mp/_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, burn_time, level.zm_transit_burn_max_duration ); - self notify( "burned" ); - if ( isDefined( trig.script_float ) && trig.script_float >= 0,1 ) - { - self thread player_burning_fx(); - } - if ( !self hasperk( "specialty_armorvest" ) || ( self.health - 100 ) < 1 ) - { - radiusdamage( self.origin, 10, max_dmg, min_dmg ); - wait 0,5; - self.is_burning = undefined; - return; - } - else - { - if ( self hasperk( "specialty_armorvest" ) ) - { - self dodamage( 15, self.origin ); - } - else - { - self dodamage( 1, self.origin ); - } - wait 0,5; - self.is_burning = undefined; - } - } -} - -player_stop_burning() -{ - self notify( "player_stop_burning" ); - self endon( "player_stop_burning" ); - self endon( "death_or_disconnect" ); - self waittill( "zombified" ); - self notify( "stop_flame_damage" ); - maps/mp/_visionset_mgr::vsmgr_deactivate( "overlay", "zm_transit_burn", self ); -} - -zombie_burning_fx() -{ - self endon( "death" ); - if ( isDefined( self.is_on_fire ) && self.is_on_fire ) - { - return; - } - self.is_on_fire = 1; - self thread maps/mp/animscripts/zm_death::on_fire_timeout(); - if ( isDefined( level._effect ) && isDefined( level._effect[ "lava_burning" ] ) ) - { - if ( !self.isdog ) - { - playfxontag( level._effect[ "lava_burning" ], self, "J_SpineLower" ); - self thread zombie_burning_audio(); - } - } - if ( isDefined( level._effect ) && isDefined( level._effect[ "character_fire_death_sm" ] ) ) - { - wait 1; - if ( randomint( 2 ) > 1 ) - { - tagarray = []; - tagarray[ 0 ] = "J_Elbow_LE"; - tagarray[ 1 ] = "J_Elbow_RI"; - tagarray[ 2 ] = "J_Knee_RI"; - tagarray[ 3 ] = "J_Knee_LE"; - tagarray = randomize_array( tagarray ); - playfxontag( level._effect[ "character_fire_death_sm" ], self, tagarray[ 0 ] ); - return; - } - else - { - tagarray[ 0 ] = "J_Wrist_RI"; - tagarray[ 1 ] = "J_Wrist_LE"; - if ( !isDefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" ) - { - tagarray[ 2 ] = "J_Ankle_RI"; - tagarray[ 3 ] = "J_Ankle_LE"; - } - tagarray = randomize_array( tagarray ); - playfxontag( level._effect[ "character_fire_death_sm" ], self, tagarray[ 0 ] ); - } - } -} - -zombie_burning_audio() -{ - self playloopsound( "zmb_fire_loop" ); - self waittill_either( "stop_flame_damage", "death" ); - if ( isDefined( self ) && isalive( self ) ) - { - self stoploopsound( 0,25 ); - } -} - -player_burning_fx() -{ - self endon( "death" ); - if ( isDefined( self.is_on_fire ) && self.is_on_fire ) - { - return; - } - if ( isDefined( self.no_burning_sfx ) && !self.no_burning_sfx ) - { - self thread player_burning_audio(); - } - self.is_on_fire = 1; - self thread maps/mp/animscripts/zm_death::on_fire_timeout(); - if ( isDefined( level._effect ) && isDefined( level._effect[ "character_fire_death_sm" ] ) ) - { - playfxontag( level._effect[ "character_fire_death_sm" ], self, "J_SpineLower" ); - } -} - -player_burning_audio() -{ - fire_ent = spawn( "script_model", self.origin ); - wait_network_frame(); - fire_ent linkto( self ); - fire_ent playloopsound( "evt_plr_fire_loop" ); - self waittill_any( "stop_flame_damage", "stop_flame_sounds", "death", "discoonect" ); - fire_ent delete(); -} - -zombie_lava_damage( trap ) -{ - self endon( "death" ); - zombie_dmg = 1; - if ( isDefined( self.script_float ) ) - { - zombie_dmg *= self.script_float; - } - switch( trap._trap_type ) - { - case "fire": - default: - if ( isDefined( self.animname ) || !isDefined( self.is_on_fire ) && !self.is_on_fire ) - { - if ( level.burning_zombies.size < 6 && zombie_dmg >= 1 ) - { - level.burning_zombies[ level.burning_zombies.size ] = self; - self playsound( "ignite" ); - self thread zombie_burning_fx(); - self thread zombie_burning_watch(); - self thread zombie_burning_dmg(); - self thread zombie_exploding_death( zombie_dmg, trap ); - wait randomfloat( 1,25 ); - } - } - if ( self.health > ( level.zombie_health / 2 ) && self.health > zombie_dmg ) - { - self dodamage( zombie_dmg, self.origin, trap ); - } - break; - } -} - -zombie_burning_watch() -{ - self waittill_any( "stop_flame_damage", "death" ); - arrayremovevalue( level.burning_zombies, self ); -} - -zombie_exploding_death( zombie_dmg, trap ) -{ - self endon( "stop_flame_damage" ); - if ( isDefined( self.isdog ) && self.isdog && isDefined( self.a.nodeath ) ) - { - return; - } - while ( isDefined( self ) && self.health >= zombie_dmg && isDefined( self.is_on_fire ) && self.is_on_fire ) - { - wait 0,5; - } - if ( isDefined( self ) && isDefined( self.is_on_fire ) && self.is_on_fire && isDefined( self.damageweapon ) && self.damageweapon != "tazer_knuckles_zm" || self.damageweapon == "jetgun_zm" && isDefined( self.knuckles_extinguish_flames ) && self.knuckles_extinguish_flames ) - { - return; - } - tag = "J_SpineLower"; - if ( isDefined( self.animname ) && self.animname == "zombie_dog" ) - { - tag = "tag_origin"; - } - if ( is_mature() ) - { - if ( isDefined( level._effect[ "zomb_gib" ] ) ) - { - playfx( level._effect[ "zomb_gib" ], self gettagorigin( tag ) ); - } - } - else - { - if ( isDefined( level._effect[ "spawn_cloud" ] ) ) - { - playfx( level._effect[ "spawn_cloud" ], self gettagorigin( tag ) ); - } - } - self radiusdamage( self.origin, 128, 30, 15, undefined, "MOD_EXPLOSIVE" ); - self ghost(); - if ( isDefined( self.isdog ) && self.isdog ) - { - self hide(); - } - else - { - self delay_thread( 1, ::self_delete ); - } -} - -zombie_burning_dmg() -{ - self endon( "death" ); - damageradius = 25; - damage = 2; - while ( isDefined( self.is_on_fire ) && self.is_on_fire ) - { - eyeorigin = self geteye(); - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( is_player_valid( players[ i ] ) ) - { - playereye = players[ i ] geteye(); - if ( distancesquared( eyeorigin, playereye ) < ( damageradius * damageradius ) ) - { - players[ i ] dodamage( damage, self.origin, self ); - players[ i ] notify( "burned" ); - } - } - i++; - } - wait 1; - } -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_openings.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_openings.gsc deleted file mode 100644 index 7bc575d..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_openings.gsc +++ /dev/null @@ -1,2500 +0,0 @@ -#include maps/mp/zm_transit_cling; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/animscripts/zm_run; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/animscripts/zm_shared; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/zm_transit_bus; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zm_transit_utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/zombies/_zm_blockers; -#include maps/mp/_utility; -#include common_scripts/utility; - -main() -{ - self _businittags(); - self _setupnumattachtable(); - self.openings = []; - x = 1; - while ( x <= 10 ) - { - script_noteworthy = undefined; - switch( x ) - { - case 10: - script_noteworthy = "front"; - break; - case 11: - case 12: - script_noteworthy = "door"; - break; - } - self busaddopening( "tag_entry_point" + x, script_noteworthy ); - x++; - } - self bussetupladder(); - self bussetuproofopening(); - self businitmantle(); - self businitrightandleft(); -} - -busaddopening( tag_name, script_noteworthy ) -{ - index = self.openings.size; - self.openings[ index ] = spawnstruct(); - opening = self.openings[ index ]; - opening.name = script_noteworthy; - opening.enabled = 1; - opening.zombie = undefined; - opening.boards = []; - opening.boardsnum = 0; - opening.blockertrigger = undefined; - opening.zombietrigger = undefined; - opening.rebuildtrigger = undefined; - opening.tagname = tag_name; - opening.bindtag = _busfindclosesttag( self gettagorigin( tag_name ) ); -/# - assert( isDefined( opening.bindtag ) ); -#/ - opening.jumptag = _busgetjumptagfrombindtag( opening.bindtag ); - opening.jumpent = level.the_bus; - opening.roofjoint = _busgetroofjointfrombindtag( opening.bindtag ); - opening.origin = level.the_bus gettagorigin( opening.bindtag ); - opening.angles = self gettagangles( opening.bindtag ); - targets = getentarray( tag_name, "targetname" ); - if ( !isDefined( targets ) ) - { -/# - assert( 0 ); -#/ - return; - } - if ( !is_classic() ) - { - i = 0; - while ( i < targets.size ) - { - if ( targets[ i ] iszbarrier() ) - { - targets[ i ] delete(); - } - i++; - } - return; - } - i = 0; - while ( i < targets.size ) - { - target = targets[ i ]; - if ( target iszbarrier() ) - { - hasbarriers = 1; - if ( isDefined( script_noteworthy ) && script_noteworthy == "front" ) - { - hasbarriers = 0; - } - opening.zbarrier = target; - opening.zbarrier setmovingplatformenabled( 1 ); - while ( hasbarriers ) - { - opening.zbarrier.chunk_health = []; - opening.zbarrier setzbarriercolmodel( "p6_anim_zm_barricade_board_bus_collision" ); - maps/mp/zombies/_zm_powerups::register_carpenter_node( opening, ::post_carpenter_callback ); - j = 0; - while ( j < opening.zbarrier getnumzbarrierpieces() ) - { - opening.zbarrier.chunk_health[ j ] = 0; - j++; - } - } - target.origin = level.the_bus gettagorigin( opening.bindtag ); - } - else if ( target.script_noteworthy == "blocker" ) - { - target delete(); - i++; - continue; - } - else if ( target.script_noteworthy == "rebuild" ) - { - opening.rebuildtrigger = target; - opening.rebuildtrigger enablelinkto(); - opening.rebuildtrigger linkto( self ); - opening.rebuildtrigger setcursorhint( "HINT_NOICON" ); - opening.rebuildtrigger set_hint_string( self, "default_reward_barrier_piece" ); - opening.rebuildtrigger triggerignoreteam(); - opening.rebuildtrigger setinvisibletoall(); - opening.rebuildtrigger setmovingplatformenabled( 1 ); - self thread busopeningrebuildthink( opening ); - i++; - continue; - } - else if ( target.script_noteworthy == "zombie" ) - { - opening.zombietrigger = target; - opening.zombietrigger enablelinkto(); - opening.zombietrigger linkto( self ); - opening.zombietrigger setmovingplatformenabled( 1 ); - opening.zombietrigger setteamfortrigger( level.zombie_team ); - self thread busopeningzombiethink( opening ); - } - target linkto( self, "", self worldtolocalcoords( target.origin ), target.angles - self.angles ); - i++; - } - if ( isDefined( opening.zbarrier ) ) - { - opening blocker_attack_spots(); - } - opening notify( "opening_init_complete" ); -/# - if ( opening.boardsnum != 0 ) - { - assert( opening.boardsnum == opening.boards.size ); - } -#/ -} - -post_carpenter_callback() -{ - if ( isDefined( self.rebuildtrigger ) ) - { - self.rebuildtrigger setinvisibletoall(); - } -} - -businitmantle() -{ - mantlebrush = getentarray( "window_mantle", "targetname" ); - while ( isDefined( mantlebrush ) && mantlebrush.size > 0 ) - { - i = 0; - while ( i < mantlebrush.size ) - { - mantlebrush[ i ] delete(); - i++; - } - } -} - -busattachjumpent( ent, opening ) -{ - jump_origin = self gettagorigin( opening.jumptag ); - jump_angles = self gettagangles( opening.jumptag ); - ent.origin = jump_origin; - ent.angles = jump_angles; - ent linkto( self, "", self worldtolocalcoords( ent.origin ), ent.angles - self.angles ); -} - -busopeningbyname( name ) -{ - i = 0; - while ( i < self.openings.size ) - { - opening = self.openings[ i ]; - if ( isDefined( opening.name ) && opening.name == name ) - { - return opening; - } - i++; - } - return undefined; -} - -busopeningsetenabled( name, enabled ) -{ - i = 0; - while ( i < self.openings.size ) - { - opening = self.openings[ i ]; - if ( isDefined( opening.name ) && opening.name == name ) - { - opening.enabled = enabled; - } - i++; - } -} - -_businittags() -{ - self.openingtags = []; - self.openingtags[ self.openingtags.size ] = "window_right_front_jnt"; - self.openingtags[ self.openingtags.size ] = "window_left_front_jnt"; - self.openingtags[ self.openingtags.size ] = "door_front_jnt"; - self.openingtags[ self.openingtags.size ] = "door_rear_jnt"; - self.openingtags[ self.openingtags.size ] = "window_right_1_jnt"; - self.openingtags[ self.openingtags.size ] = "window_right_2_jnt"; - self.openingtags[ self.openingtags.size ] = "window_right_3_jnt"; - self.openingtags[ self.openingtags.size ] = "window_right_4_jnt"; - self.openingtags[ self.openingtags.size ] = "window_right_rear_jnt"; - self.openingtags[ self.openingtags.size ] = "window_left_rear_jnt"; - self.openingtags[ self.openingtags.size ] = "window_left_1_jnt"; - self.openingtags[ self.openingtags.size ] = "window_left_2_jnt"; - self.openingtags[ self.openingtags.size ] = "window_left_3_jnt"; - self.openingtags[ self.openingtags.size ] = "window_left_4_jnt"; - self.openingtags[ self.openingtags.size ] = "window_left_5_jnt"; -/# - i = 0; - while ( i < self.openingtags.size ) - { - adddebugcommand( "devgui_cmd "Zombies:1/Bus:14/Window Openings:3/Select Tag:1/" + self.openingtags[ i ] + ":" + self.openingtags.size + "" "zombie_devgui attach_tag " + self.openingtags[ i ] + ""\n" ); - i++; -#/ - } -} - -_busfindclosesttag( checkpos ) -{ - closest = undefined; - closestdist = -1; -/# - assert( isDefined( self.openingtags ) ); -#/ - i = 0; - while ( i < self.openingtags.size ) - { - tag = self.openingtags[ i ]; - pos = self gettagorigin( tag ); - dist2 = distancesquared( checkpos, pos ); - if ( !isDefined( closest ) || dist2 < closestdist ) - { - closest = tag; - closestdist = dist2; - } - i++; - } - return closest; -} - -_busgetjumptagfrombindtag( tag ) -{ - jump_tag = undefined; - switch( tag ) - { - case "window_right_1_jnt": - jump_tag = "window_right_1_jmp_jnt"; - break; - case "window_right_2_jnt": - jump_tag = "window_right_2_jmp_jnt"; - break; - case "window_right_3_jnt": - jump_tag = "window_right_3_jmp_jnt"; - break; - case "window_right_4_jnt": - jump_tag = "window_right_4_jmp_jnt"; - break; - case "window_left_1_jnt": - jump_tag = "window_left_1_jmp_jnt"; - break; - case "window_left_2_jnt": - jump_tag = "window_left_2_jmp_jnt"; - break; - case "window_left_3_jnt": - jump_tag = "window_left_3_jmp_jnt"; - break; - case "window_left_4_jnt": - jump_tag = "window_left_4_jmp_jnt"; - break; - case "window_left_5_jnt": - jump_tag = "window_left_5_jmp_jnt"; - break; - case "window_right_rear_jnt": - jump_tag = "window_right_rear_jmp_jnt"; - break; - case "window_left_rear_jnt": - jump_tag = "window_left_rear_jmp_jnt"; - break; - case "window_right_front_jnt": - jump_tag = "window_right_front_jmp_jnt"; - break; - case "window_left_front_jnt": - jump_tag = "window_left_front_jmp_jnt"; - break; - case "door_rear_jnt": - jump_tag = "door_rear_jmp_jnt"; - break; - case "door_front_jnt": - jump_tag = "door_front_jmp_jnt"; - break; - default: - } - return jump_tag; - } -} - -_busgetroofjointfrombindtag( tag ) -{ - roofjoint = undefined; - switch( tag ) - { - case "window_left_1_jnt": - case "window_left_front_jnt": - case "window_right_1_jnt": - case "window_right_front_jnt": - roofjoint = "window_roof_1_jnt"; - break; - case "window_left_2_jnt": - case "window_left_3_jnt": - case "window_left_4_jnt": - case "window_left_5_jnt": - case "window_left_rear_jnt": - case "window_right_2_jnt": - case "window_right_3_jnt": - case "window_right_4_jnt": - case "window_right_rear_jnt": - roofjoint = "window_roof_2_jnt"; - default: - break; - } - return roofjoint; - } -} - -_setupnumattachtable() -{ - level.numattachtable = []; - level.numattachtable[ 0 ] = -1; - level.numattachtable[ 1 ] = 6; - level.numattachtable[ 2 ] = 8; - level.numattachtable[ 3 ] = 10; - level.numattachtable[ 4 ] = -1; -} - -busgetopeningfortag( tagname ) -{ - i = 0; - while ( i < self.openings.size ) - { - if ( self.openings[ i ].bindtag == tagname ) - { - return self.openings[ i ]; - } - i++; - } - return undefined; -} - -zombieanimnotetrackthink( notifystring, chunk, node ) -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( notifystring, notetrack ); - if ( notetrack == "end" ) - { - return; - continue; - } - else if ( notetrack == "board" || notetrack == "destroy_piece" ) - { - node.zbarrier setzbarrierpiecestate( chunk, "opening" ); - if ( isDefined( node.rebuildtrigger ) ) - { - node.rebuildtrigger setvisibletoall(); - } - continue; - } - else - { - while ( notetrack == "fire" ) - { - attackplayers = self zombiegetplayerstoattack(); - while ( attackplayers.size ) - { - i = 0; - while ( i < attackplayers.size ) - { - attackplayers[ i ] dodamage( self.meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); - i++; - } - } - } - } - } -} - -busopeningblockerthink( opening ) -{ - self endon( "intermission" ); - while ( 1 ) - { - opening.blockertrigger waittill( "trigger", player ); - while ( isDefined( opening.zombie ) ) - { - continue; - } - } - self notify( "OnBlockerPlaced" ); -} - -buswatchtriggervisibility( opening ) -{ - self endon( "intermission" ); - opening waittill( "opening_init_complete" ); - if ( !isDefined( opening.zbarrier ) || opening.zbarrier getnumzbarrierpieces() < 1 ) - { - return; - } - if ( !isDefined( level.buswatchtriggervisibility_spread ) ) - { - level.buswatchtriggervisibility_spread = 0; - } - else - { - level.buswatchtriggervisibility_spread++; - wait ( 0,05 * level.buswatchtriggervisibility_spread ); - } - while ( 1 ) - { - if ( no_valid_repairable_boards( opening ) ) - { - opening.rebuildtrigger setinvisibletoall(); - } - else - { - opening.rebuildtrigger setvisibletoall(); - } - wait 1; - } -} - -busopeningrebuildthink( opening ) -{ - self endon( "intermission" ); - self thread buswatchtriggervisibility( opening ); - cost = 10; - if ( isDefined( opening.rebuildtrigger.zombie_cost ) ) - { - cost = opening.rebuildtrigger.zombie_cost; - } - while ( 1 ) - { - opening.rebuildtrigger waittill( "trigger", player ); - players = get_players(); - has_perk = player has_blocker_affecting_perk(); - while ( player_fails_blocker_repair_trigger_preamble( player, players, opening.rebuildtrigger, 0 ) ) - { - continue; - } - while ( all_chunks_intact( opening ) ) - { - continue; - } - while ( no_valid_repairable_boards( opening ) ) - { - continue; - } - chunk = get_random_destroyed_chunk( opening ); - if ( isDefined( player.pers_upgrades_awarded[ "board" ] ) ) - { - self thread replace_chunk( opening, chunk, has_perk, player.pers_upgrades_awarded[ "board" ] ); - } - opening do_post_chunk_repair_delay( has_perk ); - while ( !is_player_valid( player ) ) - { - if ( no_valid_repairable_boards( opening ) ) - { - opening.rebuildtrigger setinvisibletoall(); - } - } - player handle_post_board_repair_rewards( cost ); - if ( no_valid_repairable_boards( opening ) ) - { - opening.rebuildtrigger setinvisibletoall(); - } - } -} - -_determinejumpfromorigin( opening ) -{ - return level.the_bus gettagorigin( opening.jumptag ); -} - -_getsideofbusopeningison( opening_tag ) -{ - side = undefined; - switch( opening_tag ) - { - case "door_front_jnt": - case "door_rear_jnt": - case "window_right_1_jnt": - case "window_right_2_jnt": - case "window_right_3_jnt": - case "window_right_4_jnt": - side = "right"; - break; - case "window_left_1_jnt": - case "window_left_2_jnt": - case "window_left_3_jnt": - case "window_left_4_jnt": - case "window_left_5_jnt": - side = "left"; - break; - case "window_left_front_jnt": - case "window_right_front_jnt": - side = "front"; - break; - case "window_left_rear_jnt": - case "window_right_rear_jnt": - side = "back"; - break; - } - return side; -} - -busopeningzombiethink( opening ) -{ - self endon( "intermission" ); - if ( _isopeningdoor( opening.bindtag ) ) - { - opening.enabled = 0; - return; - } - while ( 1 ) - { - opening.zombietrigger waittill( "trigger", zombie ); - while ( zombie.isdog ) - { - continue; - } - if ( isDefined( zombie.isscreecher ) && zombie.isscreecher ) - { - continue; - } - if ( isDefined( zombie.is_avogadro ) && zombie.is_avogadro ) - { - continue; - } - while ( !isalive( zombie ) ) - { - continue; - } - while ( !opening.enabled ) - { - continue; - } - if ( _isopeningdoor( opening.bindtag ) && self.doorsclosed ) - { - continue; - } - if ( isDefined( zombie.favoriteenemy ) ) - { - enemy_on_roof = zombie.favoriteenemy.isonbusroof; - } - while ( self.ismoving && isDefined( self.disabled_by_emp ) && self.disabled_by_emp && !self.doorsclosed && !enemy_on_roof ) - { - continue; - } - monkey = undefined; - if ( isDefined( zombie.enemyoverride ) ) - { - monkey = zombie.enemyoverride[ 1 ]; - } - if ( isDefined( monkey ) && !monkey maps/mp/zm_transit_bus::entity_is_on_bus( 1 ) ) - { - continue; - } - if ( !isDefined( zombie.favoriteenemy ) || !zombie.favoriteenemy.isonbus ) - { - continue; - } - if ( isDefined( zombie.isonbus ) && zombie.isonbus ) - { - continue; - } - while ( isDefined( zombie.opening ) ) - { - continue; - } - while ( isDefined( opening.zombie ) ) - { - continue; - } - if ( isDefined( zombie.is_inert ) && zombie.is_inert ) - { - continue; - } - if ( isDefined( zombie.cannotattachtobus ) && zombie.cannotattachtobus ) - { - continue; - } - while ( !level.the_bus.ismoving ) - { - jump_origin = _determinejumpfromorigin( opening ); - distance_from_jump_origin2 = distance2dsquared( jump_origin, zombie.origin ); - while ( distance_from_jump_origin2 > 256 ) - { - continue; - } - } - if ( isDefined( zombie.dismount_start ) && zombie.dismount_start ) - { - continue; - } - zombie thread zombieattachtobus( self, opening ); - } -} - -_buscanzombieattach( zombie ) -{ - currentlyattached = 0; - i = 0; - while ( i < self.openings.size ) - { - if ( isDefined( self.openings[ i ].zombie ) ) - { - currentlyattached++; - } - i++; - } - players = get_players(); - maxattach = level.numattachtable[ players.size ]; - if ( maxattach < 0 ) - { - return currentlyattached < maxattach; - } -} - -zombieplayattachedanim( animname ) -{ - self endon( "death" ); - anim_index = self getanimsubstatefromasd( "zm_bus_attached", animname ); - animationid = self getanimfromasd( "zm_bus_attached", anim_index ); - tag_origin = self.attachent gettagorigin( self.attachtag ); - tag_angles = self.attachent gettagangles( self.attachtag ); - start_origin = getstartorigin( tag_origin, tag_angles, animationid ); - start_angles = getstartangles( tag_origin, tag_angles, animationid ); - self animscripted( start_origin, start_angles, "zm_bus_attached", anim_index ); - self zombieanimnotetrackthink( "bus_attached_anim" ); -} - -debugline( frompoint, color, durationframes ) -{ -/# - i = 0; - while ( i < durationframes ) - { - line( frompoint, ( frompoint[ 0 ], frompoint[ 1 ], frompoint[ 2 ] + 50 ), color ); - wait 0,05; - i++; -#/ - } -} - -debugbox( frompoint, color, durationframes ) -{ -/# - i = 0; - while ( i < durationframes ) - { - box( frompoint, ( 0, -1, 0 ), ( 0, -1, 0 ), 0, color ); - wait 0,05; - i++; -#/ - } -} - -_isopeningdoor( opening_tag ) -{ - is_door = 0; - switch( opening_tag ) - { - case "door_front_jnt": - case "door_rear_jnt": - is_door = 1; - break; - default: - } - return is_door; - } -} - -busexitthink( trigger ) -{ - while ( 1 ) - { - trigger waittill( "trigger", zombie ); - if ( isDefined( zombie.is_inert ) && zombie.is_inert ) - { - continue; - } - if ( isDefined( zombie.walk_to_exit ) && !zombie.walk_to_exit ) - { - continue; - } - if ( isDefined( zombie.exiting_window ) && zombie.exiting_window ) - { - continue; - } - going_to_roof = 0; - while ( isDefined( zombie.favoriteenemy ) && zombie.favoriteenemy.isonbusroof == 1 ) - { - going_to_roof = 1; - while ( trigger.substate == 2 ) - { - continue; - } - } - while ( !going_to_roof && isDefined( level.the_bus.doorsclosed ) && !level.the_bus.doorsclosed && zombie.ai_state != "zombieWindowToRoof" ) - { - continue; - } - zombie thread zombieexitwindow( self, trigger, going_to_roof ); - } -} - -zombieexitwindow( bus, trigger, going_to_roof ) -{ - self endon( "death" ); - self.ai_state = "zombieExitWindow"; - self.inert_delay = ::zombieexitwindowdelay; - self.exiting_window = 1; - self linkto( bus, trigger.tag ); - tag_origin = bus gettagorigin( trigger.tag ); - tag_angles = bus gettagangles( trigger.tag ); - exit_anim = "zm_window_exit"; - if ( going_to_roof ) - { - exit_anim = "zm_bus_window2roof"; - } - animstate = maps/mp/animscripts/zm_utility::append_missing_legs_suffix( exit_anim ); - self animscripted( tag_origin, tag_angles, animstate, trigger.substate ); - maps/mp/animscripts/zm_shared::donotetracks( "window_exit_anim" ); - self.exiting_window = undefined; - self.walk_to_exit = undefined; - self unlink(); - self setgoalpos( self.origin ); - self.inert_delay = undefined; - if ( going_to_roof ) - { - return; - } - self animmode( "normal" ); - self orientmode( "face enemy" ); - self.forcemovementscriptstate = 0; - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); -} - -zombieexitwindowdelay() -{ - self endon( "death" ); - while ( isDefined( self.exiting_window ) && self.exiting_window ) - { - wait 0,1; - } - while ( 1 ) - { - if ( self.ai_state == "find_flesh" ) - { - break; - } - else - { - wait 0,1; - } - } - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - self.inert_delay = undefined; -} - -teleportthreadex( verticaloffset, delay, frames ) -{ - amount = verticaloffset / frames; - if ( amount > 10 ) - { - amount = 10; - } - else - { - if ( amount < -10 ) - { - amount = -10; - } - } - offset = ( 0, 0, amount ); - i = 0; - while ( i < frames ) - { - self teleport( self.origin + offset ); - wait 0,05; - i++; - } -} - -zombieopeningdelay() -{ - self endon( "death" ); - self maps/mp/zombies/_zm_spawner::zombie_history( "opening delay detach " + getTime() ); - while ( isDefined( self.jumpingtowindow ) && self.jumpingtowindow ) - { - while ( 1 ) - { - if ( isDefined( self.jumpingtowindow ) && !self.jumpingtowindow ) - { - break; - } - else - { - wait 0,1; - } - } - } - self zombiedetachfrombus( self.left_or_right ); - while ( 1 ) - { - if ( self.ai_state == "find_flesh" ) - { - break; - } - else - { - wait 0,1; - } - } - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - self.inert_delay = undefined; -} - -zombieattachtobus( thebus, opening, removeafterdone ) -{ - self endon( "death" ); - self endon( "removed" ); - self endon( "sonicBoom" ); - level endon( "intermission" ); - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - self endon( "detach_on_window" ); - self endon( "exploding" ); - self.ai_state = "zombieAttachToBus"; - self maps/mp/zombies/_zm_spawner::zombie_history( "zombieAttachToBus " + getTime() ); - opening.zombie = self; - self.dont_throw_gib = 1; - self.forcemovementscriptstate = 1; - self.opening = opening; - self.left_or_right = self zombieattachleftorright( thebus ); - self.attachent = level.the_bus; - self.attachtag = self.opening.bindtag; - self linkto( self.attachent, self.attachtag ); - from_front = 0; - from_rear = 0; - self.inert_delay = ::zombieopeningdelay; - if ( _isopeningdoor( opening.bindtag ) ) - { - self animscripted( self.origin, self.angles, "zm_jump_on_bus", 0 ); - if ( opening.bindtag == "door_front_jnt" ) - { - from_front = 1; - } - else - { - from_rear = 1; - } - } - else - { - self.jumpingtowindow = 1; - asd_name = "zm_zbarrier_jump_on_bus"; - side = _getsideofbusopeningison( opening.bindtag ); - if ( isDefined( side ) && side == "front" ) - { - asd_name = "zm_zbarrier_jump_on_bus_front"; - } - animstate = maps/mp/animscripts/zm_utility::append_missing_legs_suffix( asd_name ); - tag_origin = self.attachent gettagorigin( self.attachtag ); - tag_angles = self.attachent gettagangles( self.attachtag ); - self animmode( "noclip" ); - self animscripted( tag_origin, tag_angles, animstate, "jump_window" + self.left_or_right ); - } - self zombieanimnotetrackthink( "jump_on_bus_anim" ); - self animmode( "gravity" ); - self.jumpingtowindow = 0; - if ( isDefined( self.a.gib_ref ) || self.a.gib_ref == "left_arm" && self.a.gib_ref == "right_arm" ) - { - self dodamage( self.health + 666, self.origin ); - self startragdoll(); - self launchragdoll( ( 0, -1, 0 ) ); - opening.zombie = undefined; - } - if ( 1 ) - { - hitpos = self.attachent gettagorigin( self.attachtag ); - hitposinbus = pointonsegmentnearesttopoint( thebus.frontworld, thebus.backworld, hitpos ); - hitdir = vectornormalize( hitposinbus - hitpos ); - hitforce = vectorScale( hitdir, 100 ); - hitpos += vectorScale( ( 0, -1, 0 ), 50 ); - earthquake( randomfloatrange( 0,3, 0,4 ), randomfloatrange( 0,2, 0,4 ), hitpos, 150 ); - play_sound_at_pos( "grab_metal_bar", hitpos ); - } - if ( self zombiecanjumponroof( opening ) ) - { - self zombiejumponroof( thebus, opening, removeafterdone, self.left_or_right ); - self zombiesetnexttimetojumponroof(); - self maps/mp/animscripts/zm_run::needsupdate(); - if ( !self.isdog ) - { - self maps/mp/animscripts/zm_run::moverun(); - } - } - else - { - for ( ;; ) - { - while ( 1 ) - { - if ( !isDefined( opening.zbarrier ) || maps/mp/zombies/_zm_spawner::get_attack_spot( opening ) ) - { - break; - } - else - { -/# - println( "Zombie failed to get bus attack spot" ); -#/ - wait 0,5; - } - } - } - while ( !all_chunks_destroyed( opening ) ) - { - if ( zombieshoulddetachfromwindow() ) - { - zombiedetachfrombus( self.left_or_right ); - return; - } - self.onbuswindow = 1; - chunk = get_closest_non_destroyed_chunk( self.origin, opening ); - waited = 0; - if ( isDefined( chunk ) ) - { - waited = 1; - opening.zbarrier setzbarrierpiecestate( chunk, "targetted_by_zombie" ); - opening thread check_zbarrier_piece_for_zombie_death( chunk, opening.zbarrier, self ); - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "teardown", self.animname ); - animstatebase = opening.zbarrier getzbarrierpieceanimstate( chunk ); - animsubstate = "spot_" + self.attacking_spot_index + self.left_or_right + "_piece_" + opening.zbarrier getzbarrierpieceanimsubstate( chunk ); - anim_sub_index = self getanimsubstatefromasd( animstatebase + "_in", animsubstate ); - tag_origin = self.attachent gettagorigin( self.attachtag ); - tag_angles = self.attachent gettagangles( self.attachtag ); - self animscripted( tag_origin, tag_angles, maps/mp/animscripts/zm_utility::append_missing_legs_suffix( animstatebase + "_in" ), anim_sub_index ); - self zombieanimnotetrackthink( "board_tear_bus_anim", chunk, opening ); - while ( opening.zbarrier.chunk_health[ chunk ] >= 0 ) - { - tag_origin = self.attachent gettagorigin( self.attachtag ); - tag_angles = self.attachent gettagangles( self.attachtag ); - self animscripted( tag_origin, tag_angles, maps/mp/animscripts/zm_utility::append_missing_legs_suffix( animstatebase + "_loop" ), anim_sub_index ); - self zombieanimnotetrackthink( "board_tear_bus_anim", chunk, opening ); - opening.zbarrier.chunk_health[ chunk ]--; - - } - tag_origin = self.attachent gettagorigin( self.attachtag ); - tag_angles = self.attachent gettagangles( self.attachtag ); - self animscripted( tag_origin, tag_angles, maps/mp/animscripts/zm_utility::append_missing_legs_suffix( animstatebase + "_out" ), anim_sub_index ); - self zombieanimnotetrackthink( "board_tear_bus_anim", chunk, opening ); - } - tried_attack = self zombietryattackthroughwindow( 1, self.left_or_right ); - if ( !tried_attack && !waited ) - { - wait 0,1; - } - } - self.onbuswindow = undefined; - if ( !_isopeningdoor( opening.bindtag ) ) - { - self zombiekeepattackingthroughwindow( self.left_or_right ); - side = _getsideofbusopeningison( opening.bindtag ); - if ( side == "front" ) - { - from_front = 1; - } - anim_state = "window_climbin"; - if ( from_front ) - { - anim_state += "_front"; - anim_state += self.left_or_right; - } - else if ( from_rear ) - { - anim_state += "_back"; - } - else - { - anim_state += self.left_or_right; - } - min_chance_at_round = 5; - max_chance_at_round = 12; - if ( level.round_number >= min_chance_at_round ) - { - round = min( level.round_number, max_chance_at_round ); - range = max_chance_at_round - min_chance_at_round; - chance = ( 100 / range ) * ( round - min_chance_at_round ); - if ( randomintrange( 0, 100 ) <= chance ) - { - anim_state += "_fast"; - } - } - anim_index = self getanimsubstatefromasd( "zm_zbarrier_climbin_bus", anim_state ); - enter_anim = self getanimfromasd( "zm_zbarrier_climbin_bus", anim_index ); - tag_origin = self.attachent gettagorigin( self.attachtag ); - tag_angles = self.attachent gettagangles( self.attachtag ); - self.climbing_into_bus = 1; - self.entering_bus = 1; - self animmode( "noclip" ); - self animscripted( tag_origin, tag_angles, "zm_zbarrier_climbin_bus", anim_index ); - self zombieanimnotetrackthink( "climbin_bus_anim" ); - self animmode( "gravity" ); - self maps/mp/animscripts/zm_run::needsupdate(); - if ( !self.isdog ) - { - self maps/mp/animscripts/zm_run::moverun(); - } - } - opening.zombie = undefined; - self.opening = undefined; - self unlink(); - self setgoalpos( self.origin ); - } - self reset_attack_spot(); - self.climbing_into_bus = 0; - if ( isDefined( removeafterdone ) && removeafterdone ) - { - self delete(); - return; - } - self.inert_delay = undefined; -} - -zombieattachleftorright( bus ) -{ - tag = self.opening.bindtag; - if ( isDefined( bus.doorsclosed ) && !bus.doorsclosed ) - { - if ( tag != "window_right_1_jnt" || tag == "window_right_2_jnt" && tag == "window_right_3_jnt" ) - { - return "_r"; - } - else - { - if ( tag == "window_right_4_jnt" ) - { - return "_l"; - } - } - } - side = getopeningside( tag ); - while ( isDefined( side ) ) - { - if ( side == "right" ) - { - openings = bus.openingright; - } - else - { - if ( side == "left" ) - { - openings = bus.openingleft; - } - } - _a1332 = openings; - _k1332 = getFirstArrayKey( _a1332 ); - while ( isDefined( _k1332 ) ) - { - opening = _a1332[ _k1332 ]; - if ( opening == self.opening ) - { - } - else - { - if ( isDefined( opening.zombie ) ) - { - return opening.zombie.left_or_right; - } - } - _k1332 = getNextArrayKey( _a1332, _k1332 ); - } - } - left_or_right = "_l"; - if ( randomint( 10 ) > 5 ) - { - left_or_right = "_r"; - } - return left_or_right; -} - -businitrightandleft() -{ - self.openingright = []; - self.openingleft = []; - _a1367 = self.openings; - _k1367 = getFirstArrayKey( _a1367 ); - while ( isDefined( _k1367 ) ) - { - opening = _a1367[ _k1367 ]; - side = getopeningside( opening.bindtag ); - if ( isDefined( side ) ) - { - if ( side == "right" ) - { - self.openingright[ self.openingright.size ] = opening; - break; - } - else - { - if ( side == "left" ) - { - self.openingleft[ self.openingleft.size ] = opening; - } - } - } - _k1367 = getNextArrayKey( _a1367, _k1367 ); - } -} - -getopeningside( tag ) -{ - i = 1; - while ( i <= 4 ) - { - window_tag = "window_right_" + i + "_jnt"; - if ( tag == window_tag ) - { - return "right"; - } - i++; - } - i = 1; - while ( i <= 5 ) - { - window_tag = "window_left_" + i + "_jnt"; - if ( tag == window_tag ) - { - return "left"; - } - i++; - } - return undefined; -} - -zombiegetwindowanimrate() -{ - animrate = 1; - animrateroundscalar = 0; - players = get_players(); - if ( players.size > 1 ) - { - target_rate = 1,5; - target_round = 25; - target_num_players = 4; - rate = ( target_rate - 1 ) / target_round / target_num_players; - animrateroundscalar = rate * players.size; - animrate = 1 + ( animrateroundscalar * level.round_number ); - if ( animrate > target_rate ) - { - animrate = target_rate; - } - } - return animrate; -} - -zombiedetachfrombus( postfix ) -{ - if ( !isDefined( self.opening ) ) - { - return; - } - if ( isDefined( self.opening.zombie ) && self.opening.zombie == self ) - { - self.opening.zombie = undefined; - } - is_right = 0; - if ( postfix == "_r" ) - { - is_right = 1; - } - bindtag = self.opening.bindtag; - side = _getsideofbusopeningison( bindtag ); - tag_origin = level.the_bus gettagorigin( bindtag ); - tag_angles = level.the_bus gettagangles( bindtag ); - self.opening = undefined; - self.isonbusroof = 0; - self.onbuswindow = undefined; - self.ai_state = "zombieDetachFromBus"; - self.entering_bus = 0; - self.isonbus = 0; - asd_name = "zm_window_dismount"; - if ( isDefined( side ) && side == "front" ) - { - asd_name = "zm_front_window_dismount"; - } - animstate = maps/mp/animscripts/zm_utility::append_missing_legs_suffix( asd_name ); - self animscripted( tag_origin, tag_angles, animstate, is_right ); - self.dismount_start = 1; - self thread dismount_timer(); - maps/mp/animscripts/zm_shared::donotetracks( "window_dismount_anim" ); - self unlink(); - self reset_attack_spot(); - self.dismount_start = 0; - self.forcemovementscriptstate = 0; - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - self.dont_throw_gib = undefined; - self notify( "detach_on_window" ); -} - -dismount_timer() -{ - self endon( "death" ); - wait 1,5; - self.dismount_start = 0; -} - -zombiegetcymbalmonkey() -{ - if ( isDefined( self.monkey_time ) && getTime() < self.monkey_time ) - { - return self.monkey; - } - poi = undefined; - if ( level.cymbal_monkeys.size > 0 ) - { - poi = self get_zombie_point_of_interest( self.origin, level.cymbal_monkeys ); - } - if ( isDefined( poi ) ) - { - self.monkey = poi[ 1 ]; - self.monkey_time = getTime() + 250; - return poi[ 1 ]; - } - return undefined; -} - -zombieshoulddetachfromwindow() -{ - monkey = self zombiegetcymbalmonkey(); - if ( isDefined( monkey ) ) - { - if ( monkey maps/mp/zm_transit_bus::entity_is_on_bus( 1 ) ) - { - return 0; - } - else - { - return 1; - } - } - enemy = self.favoriteenemy; - if ( isDefined( enemy ) && !self.favoriteenemy.isonbus ) - { - return 1; - } - return 0; -} - -zombiecanjumponroof( opening ) -{ - if ( level.the_bus.numplayersonroof == 0 ) - { - if ( all_chunks_destroyed( opening ) ) - { - return 0; - } - if ( isDefined( level.bus_zombie_on_roof ) ) - { - return 0; - } - if ( level.bus_roof_next_time > getTime() ) - { - return 0; - } - } - percentchance = 0; - if ( level.round_number <= 5 ) - { - percentchance = 5; - } - else if ( level.round_number <= 10 ) - { - percentchance = 20; - } - else if ( level.round_number <= 20 ) - { - percentchance = 30; - } - else if ( level.round_number <= 25 ) - { - percentchance = 40; - } - else - { - percentchance = 50; - } - percentofplayersonroof = 1; - if ( level.the_bus.numplayersnear > 0 ) - { - percentofplayersonroof = level.the_bus.numplayersonroof / level.the_bus.numplayersnear; - } - percentofplayersonroof *= 100; - if ( percentchance < percentofplayersonroof ) - { - percentchance = percentofplayersonroof; - } - if ( randomint( 100 ) < percentchance ) - { - return 1; - } - return 0; -} - -zombiesetnexttimetojumponroof() -{ - level.bus_roof_next_time = getTime() + level.bus_roof_min_interval_time + randomint( level.bus_roof_max_interval_time - level.bus_roof_min_interval_time ); -} - -zombiejumponroof( thebus, opening, removeafterdone, postfix ) -{ - level.bus_zombie_on_roof = self; - self.climbing_onto_bus = 1; - self.entering_bus = 1; - self animscripted( self.opening.zbarrier.origin, self.opening.zbarrier.angles, "zm_zbarrier_window_climbup", "window_climbup" + postfix ); - self zombieanimnotetrackthink( "bus_window_climbup" ); - play_sound_at_pos( "grab_metal_bar", self.origin ); - opening.zombie = undefined; - self.opening = undefined; - self unlink(); - self setgoalpos( self.origin ); - self.climbing_onto_bus = 0; - if ( level.the_bus.numplayersonroof > 0 ) - { - level.bus_zombie_on_roof = undefined; - } -} - -bussetupladder() -{ - trigger = getent( "bus_ladder_trigger", "targetname" ); - if ( !isDefined( trigger ) ) - { - return; - } - trigger enablelinkto(); - trigger linkto( level.the_bus ); - trigger setmovingplatformenabled( 1 ); - trigger setinvisibletoall(); - mantlebrush = getentarray( "ladder_mantle", "targetname" ); - while ( isDefined( mantlebrush ) && mantlebrush.size > 0 ) - { - i = 0; - while ( i < mantlebrush.size ) - { - self thread busdeferredinitladdermantle( mantlebrush[ i ] ); - i++; - } - } - thread busladderthink(); -} - -busdeferredinitladdermantle( mantle ) -{ - origin = self worldtolocalcoords( mantle.origin ); - mantle linkto( self, "", origin, ( 0, -1, 0 ) ); - mantle setmovingplatformenabled( 1 ); - wait_for_buildable( "busladder" ); - mantle delete(); -} - -busladderthink() -{ - origin = level.the_bus gettagorigin( "tag_ladder_attach" ); - origin += ( 10, 3, -30 ); - angles = level.the_bus gettagangles( "tag_ladder_attach" ); - angles += vectorScale( ( 0, -1, 0 ), 90 ); - level.the_bus.ladder = spawn( "script_model", origin ); - level.the_bus.ladder.angles = angles; - level.the_bus.ladder setmodel( "com_stepladder_large_closed" ); - level.the_bus.ladder notsolid(); - level.the_bus.ladder linkto( level.the_bus, "tag_ladder_attach" ); - level.the_bus.ladder setmovingplatformenabled( 1 ); - level.the_bus.ladder hide(); - player = wait_for_buildable( "busladder" ); - flag_set( "ladder_attached" ); - level.the_bus.ladder show(); - player maps/mp/zombies/_zm_buildables::track_placed_buildables( "busladder" ); -} - -bussetuproofopening() -{ - level.bus_roof_open = 0; - level.bus_zombie_on_roof = undefined; - level.bus_roof_next_time = 0; - level.bus_roof_min_interval_time = 10000; - level.bus_roof_max_interval_time = 20000; - trigger = getent( "bus_hatch_bottom_trigger", "targetname" ); - if ( !isDefined( trigger ) ) - { - return; - } - trigger enablelinkto(); - trigger linkto( level.the_bus ); - trigger setmovingplatformenabled( 1 ); - self thread bus_hatch_wait(); - self thread bus_hatch_tearin_wait(); - clipbrush = getentarray( "hatch_clip", "targetname" ); - while ( isDefined( clipbrush ) && clipbrush.size > 0 ) - { - i = 0; - while ( i < clipbrush.size ) - { - self thread businithatchclip( clipbrush[ i ] ); - i++; - } - } - mantlebrush = getentarray( "hatch_mantle", "targetname" ); - while ( isDefined( mantlebrush ) && mantlebrush.size > 0 ) - { - i = 0; - while ( i < mantlebrush.size ) - { - self thread busdeferredinithatchmantle( mantlebrush[ i ] ); - i++; - } - } - hatch_location = spawn( "script_origin", level.the_bus localtoworldcoords( ( 227, -1,7, 48 ) ) ); - hatch_location enablelinkto(); - hatch_location linkto( level.the_bus ); - hatch_location setmovingplatformenabled( 1 ); - level.the_bus.hatch_location = hatch_location; -/# - adddebugcommand( "devgui_cmd "Zombies:1/Bus:14/Hatch:4/Allow Traverse:1" "zombie_devgui hatch_available"\n" ); - self thread wait_open_sesame(); -#/ -} - -wait_open_sesame() -{ - level waittill( "open_sesame" ); - self notify( "hatch_mantle_allowed" ); - if ( isDefined( level.bus_tearin_roof ) ) - { - level.bus_tearin_roof hide(); - } - level.the_bus showpart( "tag_hatch_attach_ladder" ); - level.the_bus hidepart( "tag_hatch_pristine" ); - level.the_bus hidepart( "tag_hatch_damaged" ); - level.bus_roof_open = 1; - level.bus_roof_tearing = 0; -} - -bus_hatch_wait() -{ - level.the_bus hidepart( "tag_hatch_attach_ladder" ); - player = wait_for_buildable( "bushatch" ); - flag_set( "hatch_attached" ); - level.the_bus showpart( "tag_hatch_attach_ladder" ); - level.the_bus hidepart( "tag_hatch_pristine" ); - level.the_bus hidepart( "tag_hatch_damaged" ); - level.bus_roof_open = 1; - level.bus_roof_tearing = 0; - self notify( "hatch_mantle_allowed" ); - player maps/mp/zombies/_zm_buildables::track_placed_buildables( "bushatch" ); -} - -bus_hatch_tearin_wait() -{ - self endon( "hatch_mantle_allowed" ); - level.the_bus hidepart( "tag_hatch_damaged" ); - self waittill( "hatch_ripped_open" ); - level.the_bus hidepart( "tag_hatch_pristine" ); - level.the_bus showpart( "tag_hatch_damaged" ); - self notify( "hatch_drop_allowed" ); - playfxontag( level._effect[ "bus_hatch_bust" ], self, "tag_headlights" ); -} - -businithatchclip( clip ) -{ - origin = self worldtolocalcoords( clip.origin ); - clip linkto( self, "", origin, ( 0, -1, 0 ) ); - clip setmovingplatformenabled( 1 ); - self waittill_any( "hatch_mantle_allowed", "hatch_drop_allowed" ); - clip delete(); -} - -busdeferredinithatchmantle( mantle ) -{ - origin = self worldtolocalcoords( mantle.origin ); - mantle.origin = vectorScale( ( 0, -1, 0 ), 100 ); - self waittill( "hatch_mantle_allowed" ); - mantle linkto( self, "", origin, ( 0, -1, 0 ) ); - mantle setmovingplatformenabled( 1 ); -} - -zombieonbusenemy() -{ - new_enemy = undefined; - if ( isDefined( level.the_bus.bus_riders_alive ) && level.the_bus.bus_riders_alive.size > 0 ) - { - new_enemy = getclosest( self.origin, level.the_bus.bus_riders_alive ); - } - if ( isDefined( new_enemy ) && isDefined( self.favoriteenemy ) && isDefined( new_enemy ) && self.favoriteenemy != new_enemy ) - { - if ( isDefined( self.favoriteenemy.isonbus ) && !self.favoriteenemy.isonbus ) - { - self.favoriteenemy = new_enemy; - return; - } - else - { - if ( self.isonbusroof == new_enemy.isonbusroof ) - { - self.favoriteenemy = new_enemy; - } - } - } -} - -zombiemoveonbus() -{ - self endon( "death" ); - self endon( "removed" ); - level endon( "intermission" ); - self notify( "endOnBus" ); - self endon( "endOnBus" ); - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - wait 0,05; - self orientmode( "face enemy" ); - self.goalradius = 32; - self.forcemovementscriptstate = 1; - self.ai_state = "zombieMoveOnBus"; - self maps/mp/zombies/_zm_spawner::zombie_history( "zombieMoveOnBus " + getTime() ); - bus_nodes = getnodearray( "the_bus", "target" ); - while ( 1 ) - { - self zombieonbusenemy(); - if ( !isDefined( self.favoriteenemy ) ) - { - break; - } - else if ( isDefined( self.isonbus ) ) - { - self_on_bus = self.isonbus; - } - if ( isDefined( self.isonbusroof ) ) - { - self_is_on_bus_roof = self.isonbusroof; - } - if ( !self_on_bus ) - { - break; - } - else - { - if ( isDefined( self.is_inert ) && self.is_inert ) - { - self.ignoreall = 1; - while ( isDefined( self.is_inert ) && self.is_inert ) - { - wait 0,1; - } - self.ignoreall = 0; - } - poi_override = 0; - if ( self.forcemovementscriptstate ) - { - monkey = self zombiegetcymbalmonkey(); - if ( isDefined( monkey ) ) - { - poi_override = 1; - self.ignoreall = 1; - self animmode( "normal" ); - self orientmode( "face motion" ); - if ( !level.the_bus maps/mp/zm_transit_bus::busispointinside( monkey.origin ) ) - { - self zombiewalktoexit(); - } - else - { - self setgoalpos( monkey.origin ); - } - break; - } - else - { - self.ignoreall = 0; - self animmode( "gravity" ); - self orientmode( "face enemy" ); - while ( isDefined( level.the_bus.doorsclosed ) && !level.the_bus.doorsclosed ) - { - doorstrigger = getentarray( "bus_door_trigger", "targetname" ); - _a1984 = doorstrigger; - _k1984 = getFirstArrayKey( _a1984 ); - while ( isDefined( _k1984 ) ) - { - trigger = _a1984[ _k1984 ]; - if ( self istouching( trigger ) ) - { - self orientmode( "face motion" ); - break; - } - else - { - _k1984 = getNextArrayKey( _a1984, _k1984 ); - } - } - } - dist_sq = distancesquared( self.favoriteenemy.origin, bus_nodes[ 0 ].origin ); - goal_node = bus_nodes[ 0 ]; - i = 1; - while ( i < bus_nodes.size ) - { - bus_sq = distancesquared( self.favoriteenemy.origin, bus_nodes[ i ].origin ); - if ( bus_sq < dist_sq ) - { - dist_sq = bus_sq; - goal_node = bus_nodes[ i ]; - } - i++; - } - if ( self_is_on_bus_roof ) - { - self.goalradius = 16; - } - else - { - self.goalradius = 32; - } - self setgoalnode( goal_node ); - } - } - enemy = self.favoriteenemy; - if ( isDefined( enemy ) ) - { - enemy_on_bus = enemy.isonbus; - } - if ( enemy_on_bus && isDefined( enemy.isonbusroof ) ) - { - enemy_on_roof = enemy.isonbusroof; - } - if ( !enemy_on_bus && !self_is_on_bus_roof ) - { - monkey = self zombiegetcymbalmonkey(); - if ( !isDefined( monkey ) || !monkey maps/mp/zm_transit_bus::entity_is_on_bus( 1 ) ) - { - self thread zombieexitbus(); - return; - } - } - else - { - if ( enemy_on_bus && self_is_on_bus_roof != enemy_on_roof ) - { - self thread zombieheighttraverse(); - return; - break; - } - else - { - if ( self_is_on_bus_roof && !enemy_on_bus ) - { - self thread zombiejumpoffroof(); - return; - break; - } - else - { - if ( isDefined( poi_override ) && !poi_override ) - { - disttoenemy = distance2d( self.origin, self.favoriteenemy.origin ); - shouldbeinforcemovement = disttoenemy > 32; - if ( !shouldbeinforcemovement && self.forcemovementscriptstate ) - { - self.forcemovementscriptstate = 0; - self animmode( "normal" ); - self orientmode( "face enemy" ); - } - if ( shouldbeinforcemovement && !self.forcemovementscriptstate ) - { - self.forcemovementscriptstate = 1; - self animmode( "gravity" ); - self orientmode( "face enemy" ); - } - } - } - } - } - wait 0,1; - } - } - self animmode( "normal" ); - self orientmode( "face enemy" ); - self.forcemovementscriptstate = 0; - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); -} - -zombiewalktoexit() -{ - self endon( "death" ); - bus = level.the_bus; - self.walk_to_exit = 1; - check_pos = self.origin; - enemy = self.favoriteenemy; - if ( isDefined( enemy ) ) - { - check_pos = enemy.origin; - } - if ( !level.the_bus.doorsclosed ) - { - front_dist = distance2dsquared( check_pos, level.the_bus.front_door.origin ); - back_dist = distance2dsquared( check_pos, level.the_bus.back_door.origin ); - link_one = undefined; - link_two = undefined; - door_node = undefined; - door_dist = undefined; - if ( front_dist < back_dist ) - { - door_dist = distance2dsquared( self.origin, level.the_bus.front_door.origin ); - if ( door_dist < 256 ) - { - door_node = level.the_bus.front_door; - } - } - else - { - door_dist = distance2dsquared( self.origin, level.the_bus.back_door.origin ); - if ( door_dist < 256 ) - { - door_node = level.the_bus.back_door; - } - } - if ( isDefined( door_node ) ) - { - if ( isDefined( door_node.links ) ) - { - if ( isDefined( door_node.links[ 0 ] ) ) - { - link_one = door_node.links[ 0 ]; - } - if ( isDefined( door_node.links[ 1 ] ) ) - { - link_two = door_node.links[ 1 ]; - } - } - link_goal = undefined; - if ( isDefined( link_one ) ) - { - link_goal = link_one; - } - if ( isDefined( link_one ) && isDefined( link_two ) ) - { - link_one_dist = distance2dsquared( check_pos, link_one.origin ); - link_two_dist = distance2dsquared( check_pos, link_two.origin ); - link_goal = link_one; - if ( link_two_dist < link_one_dist ) - { - link_goal = link_two; - } - } - if ( isDefined( link_goal ) ) - { - self setgoalnode( link_goal ); - return; - } - } - door_goal = level.the_bus.front_door; - if ( back_dist < front_dist ) - { - door_goal = level.the_bus.back_door; - } - self setgoalnode( door_goal ); - } - else - { - dist_f = distancesquared( check_pos, bus.front_door_inside.origin ); - dist_bl = distancesquared( check_pos, bus.exit_back_l.origin ); - dist_br = distancesquared( check_pos, bus.exit_back_r.origin ); - goal_node = bus.front_door_inside; - if ( dist_bl < dist_br ) - { - if ( dist_bl < dist_f ) - { - goal_node = bus.exit_back_l; - } - } - else - { - if ( dist_br < dist_f ) - { - goal_node = bus.exit_back_r; - } - } - self setgoalnode( goal_node ); - } -} - -zombiewindowtoroof() -{ - self endon( "death" ); - self animmode( "normal" ); - self orientmode( "face motion" ); - self.ai_state = "zombieWindowToRoof"; - self maps/mp/zombies/_zm_spawner::zombie_history( "zombieWindowToRoof " + getTime() ); - while ( 1 ) - { - self zombiewalktowindow(); - if ( isDefined( self.exiting_window ) && self.exiting_window ) - { - break; - } - else - { - if ( isDefined( self.isonbus ) || !self.isonbus && isDefined( self.ai_state == "find_flesh" ) && self.ai_state == "find_flesh" ) - { - return; - } - wait 0,1; - } - } - while ( isDefined( self.exiting_window ) && self.exiting_window ) - { - wait 0,1; - } -} - -zombiewalktowindow() -{ - self endon( "death" ); - bus = level.the_bus; - self.walk_to_exit = 1; - check_pos = self.origin; - dist_f = distancesquared( check_pos, bus.front_door_inside.origin ); - dist_bl = distancesquared( check_pos, bus.exit_back_l.origin ); - goal_node = bus.front_door_inside; - if ( dist_bl < dist_f ) - { - goal_node = bus.exit_back_l; - } - self setgoalnode( goal_node ); -} - -zombieattackplayerclinging( player ) -{ - self endon( "death" ); - level endon( "intermission" ); - self.goalradius = 15; - enemy_clinging = 1; - while ( enemy_clinging ) - { - best_attack_pos = maps/mp/zm_transit_cling::_getbusattackposition( player ); - dist_from_pos2 = distance2dsquared( best_attack_pos, self.origin ); - enemy_origin = player _playergetorigin(); - direction = enemy_origin - self.origin; - direction_angles = vectorToAngle( direction ); - direction_angles = ( direction_angles[ 0 ], direction_angles[ 1 ], 0 ); - if ( dist_from_pos2 > 400 ) - { - self orientmode( "face point", best_attack_pos ); - self setgoalpos( best_attack_pos ); - } - else - { - self zombiescriptedattack( player, direction_angles, ::zombiedamageplayercling ); - } - enemy_clinging = player maps/mp/zm_transit_cling::playerisclingingtobus(); - wait 0,1; - } - self.goalradius = 32; -} - -zombieattackplayeronturret( player ) -{ - self endon( "death" ); - level endon( "intermission" ); - enemy_on_turret = 1; - while ( enemy_on_turret ) - { - enemy_origin = self.favoriteenemy _playergetorigin(); - dist_from_turret2 = distance2dsquared( enemy_origin, self.origin ); - direction = enemy_origin - self.origin; - direction_angles = vectorToAngle( direction ); - direction_angles = ( direction_angles[ 0 ], direction_angles[ 1 ], 0 ); - if ( dist_from_turret2 > 1024 ) - { - self setgoalpos( enemy_origin, direction_angles ); - } - else - { - self zombiescriptedattack( player, direction_angles, ::zombiedamageplayerturret ); - } - wait 0,1; - if ( isDefined( self.favoriteenemy.onbusturret ) && isDefined( self.favoriteenemy.busturret ) ) - { - enemy_on_turret = self.favoriteenemy.onbusturret; - } - } -} - -zombiescriptedattack( player, direction_angles, damage_func ) -{ - self orientmode( "face angle", direction_angles[ 1 ] ); - zombie_attack_anim = self zombiepickunmovingattackanim(); - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "attack", self.animname ); - while ( 1 ) - { - self waittill( "meleeanim", note ); - if ( note == "end" || note == "stop" ) - { - return; - } - else if ( note == "fire" ) - { - if ( isDefined( damage_func ) ) - { - [[ damage_func ]]( player ); - } - } - } -} - -zombiedamageplayerturret( player ) -{ - if ( player.onbusturret ) - { - player dodamage( self.meleedamage, self.origin, self ); - } -} - -zombiedamageplayercling( player ) -{ - if ( player maps/mp/zm_transit_cling::playerisclingingtobus() ) - { - player dodamage( self.meleedamage, self.origin, self ); - } -} - -_playergetorigin() -{ - if ( isDefined( self.onbusturret ) && isDefined( self.busturret ) && self.onbusturret ) - { - turret = self.busturret; - turret_exit = getent( turret.target, "targetname" ); - return turret_exit.origin; - } - return self.origin; -} - -zombiepickunmovingattackanim() -{ - melee_anim = undefined; - if ( self.has_legs ) - { - rand_num = randomint( 4 ); - melee_anim = level._zombie_melee[ self.animname ][ rand_num ]; - } - else if ( self.a.gib_ref == "no_legs" ) - { - melee_anim = random( level._zombie_stumpy_melee[ self.animname ] ); - } - else - { - melee_anim = level._zombie_melee_crawl[ self.animname ][ 0 ]; - } - return melee_anim; -} - -zombieexitbus() -{ - self endon( "death" ); - self endon( "stop_zombieExitBus" ); - level endon( "intermission" ); - self animmode( "normal" ); - self orientmode( "face motion" ); - self maps/mp/zombies/_zm_spawner::zombie_history( "zombieExitBus " + getTime() ); - while ( 1 ) - { - if ( isDefined( self.exiting_window ) && self.exiting_window ) - { - break; - } - else - { - if ( isDefined( self.isonbus ) && !self.isonbus ) - { - self.walk_to_exit = 0; - return; - } - if ( isDefined( self.solo_revive_exit ) && !self.solo_revive_exit ) - { - monkey = undefined; - if ( isDefined( self.enemyoverride ) ) - { - monkey = self.enemyoverride[ 1 ]; - } - ignore_enemy = 0; - if ( isDefined( monkey ) && !monkey maps/mp/zm_transit_bus::entity_is_on_bus( 1 ) ) - { - ignore_enemy = 1; - } - if ( !ignore_enemy ) - { - enemy = self.favoriteenemy; - if ( isDefined( enemy ) ) - { - if ( enemy.isonbus ) - { - self.walk_to_exit = 0; - self thread zombiemoveonbus(); - return; - } - } - } - } - self zombiewalktoexit(); - wait 0,1; - } - } - while ( isDefined( self.exiting_window ) && self.exiting_window ) - { - wait 0,1; - } - self.dont_throw_gib = undefined; - self orientmode( "face enemy" ); - self.forcemovementscriptstate = 0; - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); -} - -zombiejumpoffroof() -{ - self endon( "death" ); - self endon( "removed" ); - level endon( "intermission" ); - self animmode( "gravity" ); - self orientmode( "face goal" ); - self maps/mp/zombies/_zm_spawner::zombie_history( "zombieJumpOffRoof " + getTime() ); - while ( 1 ) - { - enemy = self.favoriteenemy; - if ( isDefined( enemy ) ) - { - enemy_on_bus = enemy.isonbus; - } - enemiesonbus = level.the_bus.numaliveplayersridingbus > 0; - if ( isDefined( self.isonbus ) ) - { - selfisonbus = self.isonbus; - } - if ( enemy_on_bus ) - { - self thread zombiemoveonbus(); - return; - } - if ( !selfisonbus ) - { - return; - } - else closest_jump_tag = self zombiegetclosestroofjumptag(); - goal_pos = level.the_bus gettagorigin( closest_jump_tag ); - if ( distance2dsquared( self.origin, goal_pos ) <= 1024 ) - { - self.attachent = level.the_bus; - self.attachtag = closest_jump_tag; - self linkto( self.attachent, self.attachtag, ( 0, -1, 0 ), ( 0, -1, 0 ) ); - wait 0,1; - self zombieplayattachedanim( "jump_down_127" ); - self setgoalpos( self.origin ); - self unlink(); - return; - } - else - { - self setgoalpos( goal_pos ); - self orientmode( "face point", goal_pos ); - wait 0,1; - } - } -} - -zombieheighttraverse() -{ - level endon( "intermission" ); - self endon( "death" ); - self endon( "removed" ); - self endon( "zombieHeightTraverseStop" ); - self animmode( "gravity" ); - self orientmode( "face goal" ); - self.zombie_ladder_stage = 1; - self.goal_local_offset = level.the_bus.ladder_local_offset; - self.goal_local_offset = ( self.goal_local_offset[ 0 ], self.goal_local_offset[ 1 ], level.the_bus.floor ); - self.goal_local_angles = vectorScale( ( 0, -1, 0 ), 90 ); - self maps/mp/zombies/_zm_spawner::zombie_history( "zombieHeightTraverse " + getTime() ); - if ( !isDefined( self.isonbusroof ) || !self.isonbusroof ) - { - bus = level.the_bus; - hatch_dist = distancesquared( self.origin, bus.hatch_location.origin ); - front_dist = distancesquared( self.origin, bus.front_door_inside.origin ); - back_dist = distancesquared( self.origin, bus.exit_back_l.origin ); - closer_to_hatch = 1; - if ( front_dist < hatch_dist || back_dist < hatch_dist ) - { - closer_to_hatch = 0; - } - if ( isDefined( level.bus_roof_open ) && level.bus_roof_open && isDefined( level.bus_roof_tearing ) || level.bus_roof_tearing && !closer_to_hatch ) - { - self zombiewindowtoroof(); - } - else - { - if ( self zombiepathtoladder() ) - { - self zombieclimbtoroof(); - } - } - } - else - { - if ( self zombiepathtoroofopening() ) - { - self zombiejumpdownhatch(); - } - else - { - enemy = self.favoriteenemy; - if ( isDefined( enemy ) && isDefined( enemy.isonbus ) && !enemy.isonbus ) - { - self thread zombiejumpoffroof(); - return; - } - } - } - if ( isDefined( self.isonbus ) && self.isonbus ) - { - self thread zombiemoveonbus(); - } -} - -zombiepathtoladder() -{ - self.goalradius = 2; - while ( isDefined( self.enemy ) && self.enemy.isonbusroof ) - { - if ( !self.isonbus ) - { - self.goalradius = 32; - return 0; - } - goal_dir = anglesToForward( level.the_bus.angles + self.goal_local_angles ); - goal_pos = level.the_bus.hatch_location.origin; - if ( distancesquared( self.origin, goal_pos ) <= 1600 ) - { - self.goalradius = 32; - self.ladder_pos = goal_pos; - return 1; - } - self setgoalpos( goal_pos ); - self orientmode( "face point", goal_pos ); - wait 0,1; - } - self.goalradius = 32; - return 0; -} - -zombiepathtoroofopening() -{ - self.goalradius = 2; - goal_tag = self zombiegetclosestroofopeningjumptag(); - while ( 1 ) - { - self zombieonbusenemy(); - enemy = self.favoriteenemy; - if ( isDefined( enemy ) && isDefined( enemy.isonbusroof ) && enemy.isonbusroof ) - { - break; - } - else - { - if ( isDefined( enemy ) && isDefined( enemy.isonbus ) && !enemy.isonbus ) - { - break; - } - else - { - if ( !self.isonbus ) - { - break; - } - else - { - goal_dir = level.the_bus gettagangles( goal_tag ); - goal_pos = level.the_bus gettagorigin( goal_tag ); - if ( distance2d( self.origin, goal_pos ) <= 32 ) - { - self.goalradius = 32; - return 1; - } - self setgoalpos( goal_pos ); - self orientmode( "face point", goal_pos ); - wait 0,1; - } - } - } - } - self.goalradius = 32; - return 0; -} - -zombiejumpdownhatch() -{ - self endon( "death" ); - self thread zombiejumpdownhatchkilled(); - enemy = self.favoriteenemy; - if ( isDefined( enemy ) && isDefined( enemy.isonbusroof ) && enemy.isonbusroof ) - { - self unlink(); - return; - } - while ( isDefined( level.bus_roof_tearing ) && level.bus_roof_tearing ) - { - wait 0,1; - } - roof_tag = self zombiegetclosestroofopeningjumptag(); - if ( !level.bus_roof_open ) - { - self.inert_delay = ::zombieroofteardelay; - level.bus_roof_open = 1; - level.bus_roof_tearing = 1; - self linkto( level.the_bus, roof_tag ); - tag_origin = level.the_bus gettagorigin( roof_tag ); - tag_angles = level.the_bus gettagangles( roof_tag ); - substate = 1; - if ( roof_tag == "window_roof_2_jnt" ) - { - substate = 2; - } - animstate = "zm_bus_attached"; - self animscripted( tag_origin, tag_angles, animstate, substate ); - maps/mp/animscripts/zm_shared::donotetracks( "bus_attached_anim" ); - self.inert_delay = undefined; - level.bus_roof_tearing = 0; - level.the_bus notify( "hatch_ripped_open" ); - } - self.hatch_jump = 1; - self.inert_delay = ::zombiehatchjumpdelay; - hatch_tag = "tag_hatch_attach_ladder"; - self linkto( level.the_bus, hatch_tag ); - tag_origin = level.the_bus gettagorigin( hatch_tag ); - tag_angles = level.the_bus gettagangles( hatch_tag ); - substate = 0; - if ( roof_tag == "window_roof_1_jnt" ) - { - substate = 1; - } - animstate = maps/mp/animscripts/zm_utility::append_missing_legs_suffix( "zm_bus_hatch_jump_down" ); - self animscripted( tag_origin, tag_angles, animstate, substate ); - maps/mp/animscripts/zm_shared::donotetracks( "bus_hatch_jump_anim" ); - self unlink(); - self.hatch_jump = 0; - self.inert_delay = undefined; - self setgoalpos( self.origin ); - level.bus_zombie_on_roof = undefined; -} - -zombiehatchjumpdelay() -{ -/# - iprintln( "hatch delay" ); -#/ - while ( isDefined( self.hatch_jump ) && self.hatch_jump ) - { - wait 0,1; - } -} - -zombieroofteardelay() -{ - self endon( "death" ); - self notify( "zombieHeightTraverseStop" ); - self unlink(); - level.bus_roof_open = 0; - level.bus_roof_tearing = 0; - self.inert_wakeup_override = ::zombierooftearwakeup; -} - -zombierooftearwakeup() -{ - self endon( "death" ); - self.inert_wakeup_override = undefined; - self thread zombieheighttraverse(); -} - -zombiejumpdownhatchkilled() -{ - while ( isDefined( level.bus_roof_tearing ) && level.bus_roof_tearing ) - { - if ( !isDefined( self ) ) - { - level.bus_roof_tearing = 0; - return; - } - else - { - wait 0,1; - } - } -} - -zombieclimbtoroof() -{ - self endon( "death" ); - hatch_tag = "tag_hatch_attach_ladder"; - self linkto( level.the_bus, hatch_tag ); - tag_origin = level.the_bus gettagorigin( hatch_tag ); - tag_angles = level.the_bus gettagangles( hatch_tag ); - hatch_vec = vectornormalize( anglesToForward( tag_angles ) ); - player = self.favoriteenemy; - player_vec = vectornormalize( player.origin - tag_origin ); - substate = 0; - dot = vectordot( hatch_vec, player_vec ); - if ( dot > 0 ) - { - substate = 1; - } - animstate = maps/mp/animscripts/zm_utility::append_missing_legs_suffix( "zm_bus_hatch_jump_up" ); - self animscripted( tag_origin, tag_angles, animstate, substate ); - maps/mp/animscripts/zm_shared::donotetracks( "bus_hatch_jump_anim" ); - self unlink(); - self setgoalpos( self.origin ); -} - -zombiegetclosestroofjumptag() -{ - root = "tag_roof_jump_off"; - best = root + "1"; - best_pos = level.the_bus gettagorigin( best ); - best_pos_dist2 = distance2dsquared( self.origin, best_pos ); - i = 1; - while ( i <= 4 ) - { - next_pos = level.the_bus gettagorigin( root + i ); - next_pos_dist2 = distance2dsquared( self.origin, next_pos ); - if ( next_pos_dist2 < best_pos_dist2 ) - { - best = root + i; - best_pos = next_pos; - best_pos_dist2 = next_pos_dist2; - } - i++; - } - return best; -} - -zombiegetclosestroofopeningjumptag() -{ - pos1 = level.the_bus gettagorigin( "window_roof_1_jnt" ); - pos2 = level.the_bus gettagorigin( "window_roof_2_jnt" ); - closest = "window_roof_1_jnt"; - pos1_dist2 = distance2dsquared( self.origin, pos1 ); - pos2_dist2 = distance2dsquared( self.origin, pos2 ); - if ( pos2_dist2 < pos1_dist2 ) - { - closest = "window_roof_2_jnt"; - } - return closest; -} - -zombiegetclosestdoortag() -{ - pos1 = level.the_bus gettagorigin( "door_rear_jnt" ); - pos2 = level.the_bus gettagorigin( "door_front_jnt" ); - closest = "door_rear_jnt"; - pos1_dist2 = distance2dsquared( self.origin, pos1 ); - pos2_dist2 = distance2dsquared( self.origin, pos2 ); - if ( pos2_dist2 < pos1_dist2 ) - { - closest = "door_front_jnt"; - } - return closest; -} - -zombiekeepattackingthroughwindow( left_or_right ) -{ - while ( self zombietryattackthroughwindow( 0, left_or_right ) ) - { - tag_origin = self.attachent gettagorigin( self.attachtag ); - tag_angles = self.attachent gettagangles( self.attachtag ); - asd_name = "zm_zbarrier_window_idle"; - side = _getsideofbusopeningison( self.attachtag ); - if ( side == "front" ) - { - asd_name = "zm_zbarrier_front_window_idle"; - } - self animscripted( tag_origin, tag_angles, asd_name, "window_idle" + left_or_right ); - self zombieanimnotetrackthink( "bus_window_idle" ); - } -} - -zombietryattackthroughwindow( is_random, postfix ) -{ - attackplayers = self zombiegetplayerstoattack(); - if ( attackplayers.size == 0 ) - { - return 0; - } - should_attack = 1; - if ( is_random ) - { - rand = randomint( 100 ); - should_attack = rand < 80; - } - if ( should_attack ) - { - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "attack", self.animname ); - tag_origin = self.attachent gettagorigin( self.attachtag ); - tag_angles = self.attachent gettagangles( self.attachtag ); - asd_name = "zm_zbarrier_window_attack"; - side = _getsideofbusopeningison( self.attachtag ); - if ( isDefined( side ) && side == "front" ) - { - asd_name = "zm_zbarrier_front_window_attack"; - } - self animscripted( tag_origin, tag_angles, asd_name, "window_attack" + postfix ); - self zombieanimnotetrackthink( "bus_window_attack" ); - return 1; - } - return 0; -} - -zombiegetplayerstoattack() -{ - playerstoattack = []; - players = get_players(); - attackrange = 72; - attackrange *= attackrange; - attackheight = 37; - attackheight *= attackheight; - i = 0; - while ( i < players.size ) - { - if ( isDefined( self.opening ) && isDefined( self.opening.rebuildtrigger ) ) - { - if ( players[ i ] istouching( self.opening.rebuildtrigger ) ) - { - playerstoattack[ playerstoattack.size ] = players[ i ]; - } - i++; - continue; - } - else - { - xydist = distance2dsquared( self.origin, players[ i ].origin ); - zdist = self.origin[ 2 ] - players[ i ].origin[ 2 ]; - zdist2 = zdist * zdist; - if ( xydist <= attackrange && zdist2 <= attackheight ) - { - playerstoattack[ playerstoattack.size ] = players[ i ]; - } - } - i++; - } - return playerstoattack; -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_power.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_power.gsc deleted file mode 100644 index ec16632..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_power.gsc +++ /dev/null @@ -1,583 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/_visionset_mgr; -#include maps/mp/zm_transit_utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -initializepower() -{ - level thread electricswitch(); - level thread powerevent(); - registerclientfield( "toplayer", "power_rumble", 1, 1, "int" ); - if ( !isDefined( level.vsmgr_prio_visionset_zm_transit_power_high_low ) ) - { - level.vsmgr_prio_visionset_zm_transit_power_high_low = 20; - } - maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_power_high_low", 1, level.vsmgr_prio_visionset_zm_transit_power_high_low, 7, 1, ::vsmgr_lerp_power_up_down, 0 ); -} - -precache_models() -{ -} - -elecswitchbuildable() -{ - lever = getent( "powerswitch_p6_zm_buildable_pswitch_lever", "targetname" ); - hand = getent( "powerswitch_p6_zm_buildable_pswitch_hand", "targetname" ); - hand linkto( lever ); - hand hide(); - getent( "powerswitch_p6_zm_buildable_pswitch_body", "targetname" ) hide(); - lever hide(); - wait_for_buildable( "powerswitch" ); -} - -electricswitch() -{ - flag_init( "switches_on" ); - level thread wait_for_power(); - trig = getent( "powerswitch_buildable_trigger_power", "targetname" ); - trig setinvisibletoall(); - elecswitchbuildable(); - master_switch = getent( "powerswitch_p6_zm_buildable_pswitch_lever", "targetname" ); - while ( 1 ) - { - trig sethintstring( &"ZOMBIE_ELECTRIC_SWITCH" ); - trig setvisibletoall(); - trig waittill( "trigger", user ); - trig setinvisibletoall(); - master_switch rotateroll( -90, 0,3 ); - master_switch playsound( "zmb_switch_flip" ); - master_switch waittill( "rotatedone" ); - playfx( level._effect[ "switch_sparks" ], getstruct( "elec_switch_fx", "targetname" ).origin ); - master_switch playsound( "zmb_turn_on" ); - level.power_event_in_progress = 1; - level thread power_event_rumble_and_quake(); - flag_set( "switches_on" ); - clientnotify( "pwr" ); - level thread avogadro_show_vox( user ); - level waittill( "power_event_complete" ); - clientnotify( "pwr" ); - flag_set( "power_on" ); - level.power_event_in_progress = 0; - level thread bus_station_pa_vox(); - if ( isDefined( user ) ) - { - user maps/mp/zombies/_zm_stats::increment_client_stat( "power_turnedon", 0 ); - user maps/mp/zombies/_zm_stats::increment_player_stat( "power_turnedon" ); - } - trig sethintstring( &"ZOMBIE_ELECTRIC_SWITCH_OFF" ); - trig setvisibletoall(); - trig waittill( "trigger", user ); - trig setinvisibletoall(); - master_switch rotateroll( 90, 0,3 ); - master_switch playsound( "zmb_switch_flip" ); - master_switch waittill( "rotatedone" ); - level.power_event_in_progress = 1; - level thread power_event_rumble_and_quake(); - flag_clear( "switches_on" ); - level waittill( "power_event_complete" ); - clientnotify( "pwo" ); - flag_clear( "power_on" ); - level.power_event_in_progress = 0; - level.power_cycled = 1; - if ( isDefined( user ) ) - { - user maps/mp/zombies/_zm_stats::increment_client_stat( "power_turnedoff", 0 ); - user maps/mp/zombies/_zm_stats::increment_player_stat( "power_turnedoff" ); - } - } -} - -vsmgr_lerp_power_up_down( player, opt_param_1, opt_param_2 ) -{ - self vsmgr_set_state_active( player, opt_param_1 ); -} - -power_event_vision_set_post_event() -{ - self endon( "end_vision_set_power" ); - level endon( "end_game" ); - self endon( "disconnect" ); - if ( flag( "power_on" ) ) - { - return; - } - level waittill( "power_event_complete" ); - maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_power_high_low", self, 0 ); -} - -power_event_vision_set() -{ - self endon( "end_vision_set_power" ); - level endon( "end_game" ); - level endon( "power_event_complete" ); - self endon( "disconnect" ); - if ( flag( "power_on" ) ) - { - return; - } - duration = 2; - startgoal = 1; - endgoal = 0; - self power_event_vision_set_lerp( duration, startgoal, endgoal ); - while ( 1 ) - { - if ( randomint( 100 ) > 50 ) - { - duration = randomintrange( 2, 6 ) / 5; - startgoal = endgoal; - if ( startgoal > 0,6 ) - { - endgoal = randomfloatrange( 0, 0,5 ); - } - else - { - endgoal = 1; - } - self power_event_vision_set_lerp( duration, startgoal, endgoal ); - } - else if ( randomint( 100 ) > 75 ) - { - x = 2; - while ( x > 0 ) - { - duration = 0,2; - startgoal = endgoal; - if ( startgoal > 0,6 ) - { - endgoal = 0; - } - else - { - endgoal = 1; - } - self power_event_vision_set_lerp( duration, startgoal, endgoal ); - x--; - - } - } - else duration = 0,4; - startgoal = endgoal; - if ( startgoal > 0,6 ) - { - endgoal = randomfloatrange( 0, 0,5 ); - } - else - { - endgoal = randomfloatrange( 0,5, 1 ); - } - self power_event_vision_set_lerp( duration, startgoal, endgoal ); - wait 0,05; - } -} - -power_event_vision_set_lerp( duration, startgoal, endgoal ) -{ - self endon( "end_vision_set_power" ); - level endon( "end_game" ); - level endon( "power_event_complete" ); - self endon( "disconnect" ); - incs = int( duration / 0,05 ); - if ( incs == 0 ) - { - incs = 1; - } - incsgoal = ( endgoal - startgoal ) / incs; - currentgoal = startgoal; - i = 0; - while ( i < incs ) - { - currentgoal += incsgoal; - maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_power_high_low", self, currentgoal ); - wait 0,05; - i++; - } - maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_power_high_low", self, endgoal ); -} - -power_event_rumble_and_quake( power_on ) -{ - level endon( "end_game" ); - while ( isDefined( level.power_event_in_progress ) && level.power_event_in_progress ) - { - players = get_players(); - _a284 = players; - _k284 = getFirstArrayKey( _a284 ); - while ( isDefined( _k284 ) ) - { - player = _a284[ _k284 ]; - if ( !is_player_valid( player ) ) - { - } - else if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) || player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_pcr", 1 ) ) - { - if ( isDefined( player.power_rumble_active ) && !player.power_rumble_active ) - { - player thread power_event_rumble_and_quake_player(); - } - } - else - { - if ( isDefined( player.power_rumble_active ) && player.power_rumble_active ) - { - player setclientfieldtoplayer( "power_rumble", 0 ); - player.power_rumble_active = 0; - } - } - _k284 = getNextArrayKey( _a284, _k284 ); - } - wait 1; - } - players = get_players(); - _a311 = players; - _k311 = getFirstArrayKey( _a311 ); - while ( isDefined( _k311 ) ) - { - player = _a311[ _k311 ]; - player setclientfieldtoplayer( "power_rumble", 0 ); - player notify( "end_vision_set_power" ); - maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_power_high_low", player ); - _k311 = getNextArrayKey( _a311, _k311 ); - } -} - -power_event_rumble_and_quake_player() -{ - self endon( "disconnect" ); - self.power_rumble_active = 1; - self setclientfieldtoplayer( "power_rumble", 1 ); - self thread power_event_vision_set(); - self thread power_event_vision_set_post_event(); - while ( !self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) && self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_pcr", 1 ) && isDefined( level.power_event_in_progress ) && level.power_event_in_progress ) - { - wait 1; - } - self.power_rumble_active = 0; - self notify( "end_vision_set_power" ); - self setclientfieldtoplayer( "power_rumble", 0 ); -} - -avogadroreleasefromchamberevent() -{ - exploder( 500 ); - level.zones[ "zone_prr" ].is_spawning_allowed = 0; - level.zones[ "zone_pcr" ].is_spawning_allowed = 0; - level thread killzombiesinpowerstation(); - while ( !flag( "power_on" ) ) - { - waittime = randomfloatrange( 1,5, 4,5 ); - players = get_players(); - _a354 = players; - _k354 = getFirstArrayKey( _a354 ); - while ( isDefined( _k354 ) ) - { - player = _a354[ _k354 ]; - if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) ) - { - player setelectrified( waittime - 1 ); - player shellshock( "electrocution", waittime ); - wait 0,05; - } - _k354 = getNextArrayKey( _a354, _k354 ); - } - waittime += 1,5; - level waittill_notify_or_timeout( "power_on", waittime ); - } - players = get_players(); - _a372 = players; - _k372 = getFirstArrayKey( _a372 ); - while ( isDefined( _k372 ) ) - { - player = _a372[ _k372 ]; - if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) ) - { - player setelectrified( 0,25 ); - player shellshock( "electrocution", 1,5 ); - wait 0,05; - } - _k372 = getNextArrayKey( _a372, _k372 ); - } - level.zones[ "zone_prr" ].is_spawning_allowed = 1; - level.zones[ "zone_pcr" ].is_spawning_allowed = 1; - stop_exploder( 500 ); -} - -killzombiesinpowerstation() -{ - level endon( "power_on" ); - radiussq = 122500; - while ( 1 ) - { - zombies = getaiarray( level.zombie_team ); - _a401 = zombies; - _k401 = getFirstArrayKey( _a401 ); - while ( isDefined( _k401 ) ) - { - zombie = _a401[ _k401 ]; - if ( !isDefined( zombie ) ) - { - } - else if ( isDefined( zombie.is_avogadro ) && zombie.is_avogadro ) - { - } - else - { - if ( distancesquared( ( 11344, 7590, -729 ), zombie.origin ) < radiussq ) - { - break; - } - else - { - if ( isDefined( zombie ) || zombie maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) && isDefined( zombie.zone_name ) && zombie.zone_name == "zone_prr" ) - { - if ( isDefined( zombie.has_been_damaged_by_player ) && !zombie.has_been_damaged_by_player ) - { - level.zombie_total++; - } - zombie dodamage( zombie.health + 100, zombie.origin ); - wait randomfloatrange( 0,05, 0,15 ); - } - } - } - _k401 = getNextArrayKey( _a401, _k401 ); - } - wait 1; - } -} - -wait_for_power() -{ - while ( 1 ) - { - flag_wait( "power_on" ); - maps/mp/zombies/_zm_perks::perk_unpause_all_perks(); - wait_network_frame(); - level setclientfield( "zombie_power_on", 1 ); - enable_morse_code(); - raisepowerplantgates(); - flag_waitopen( "power_on" ); - level setclientfield( "zombie_power_on", 0 ); - disable_morse_code(); - } -} - -raisepowerplantgates() -{ - gate1 = []; - gate2 = []; - gate1 = getentarray( "security_booth_gate", "targetname" ); - gate2 = getentarray( "security_booth_gate_2", "targetname" ); - while ( isDefined( gate1 ) ) - { - i = 0; - while ( i < gate1.size ) - { - gate1[ i ] thread raisegate( -90 ); - i++; - } - } - while ( isDefined( gate2 ) ) - { - i = 0; - while ( i < gate2.size ) - { - gate2[ i ] thread raisegate( 90 ); - i++; - } - } - level.the_bus notify( "OnPowerOn" ); -} - -raisegate( degrees ) -{ - self rotatepitch( degrees, 4 ); -} - -powerevent() -{ - reactor_core_mover = getent( "core_mover", "targetname" ); - reactor_core_audio = spawn( "script_origin", reactor_core_mover.origin ); - if ( !isDefined( reactor_core_mover ) ) - { - return; - } - thread blockstairs(); - thread linkentitiestocoremover( reactor_core_mover ); - while ( 1 ) - { - flag_wait( "switches_on" ); - thread dropreactordoors(); - thread raisereactordoors(); - power_event_time = 30; - reactor_core_mover playsound( "zmb_power_rise_start" ); - reactor_core_mover playloopsound( "zmb_power_rise_loop", 0,75 ); - reactor_core_mover thread coremove( power_event_time ); - if ( isDefined( level.avogadro ) && isDefined( level.avogadro.state ) && level.avogadro.state == "chamber" ) - { - level thread avogadroreleasefromchamberevent(); - } - wait power_event_time; - reactor_core_mover stoploopsound( 0,5 ); - reactor_core_audio playloopsound( "zmb_power_on_loop", 2 ); - reactor_core_mover playsound( "zmb_power_rise_stop" ); - level notify( "power_event_complete" ); - flag_waitopen( "switches_on" ); - thread dropreactordoors(); - thread raisereactordoors(); - playsoundatposition( "zmb_power_off_quad", ( 0, 0, 0 ) ); - reactor_core_mover playsound( "zmb_power_rise_start" ); - reactor_core_mover playloopsound( "zmb_power_rise_loop", 0,75 ); - reactor_core_mover thread coremove( power_event_time, 1 ); - wait power_event_time; - reactor_core_mover stoploopsound( 0,5 ); - reactor_core_audio stoploopsound( 0,5 ); - reactor_core_mover playsound( "zmb_power_rise_stop" ); - level notify( "power_event_complete" ); - } -} - -corerotate( time ) -{ - self rotateyaw( 180, time ); -} - -coremove( time, down ) -{ - if ( isDefined( down ) && down ) - { - self movez( -160, time ); - } - else - { - self movez( 160, time ); - } -} - -blockstairs() -{ - stairs_blocker = getent( "reactor_core_stairs_blocker", "targetname" ); - if ( !isDefined( stairs_blocker ) ) - { - return; - } - stairs_blocker movez( -128, 1 ); -} - -linkentitiestocoremover( reactor_core_mover ) -{ - core_entities = getentarray( "core_entity", "script_noteworthy" ); - i = 0; - while ( i < core_entities.size ) - { - next_ent = core_entities[ i ]; - if ( next_ent.classname == "trigger_use_touch" ) - { - next_ent enablelinkto(); - } - next_ent linkto( reactor_core_mover, "tag_origin" ); - i++; - } -} - -dropreactordoors() -{ - doors = getentarray( "reactor_core_door", "targetname" ); - if ( doors.size == 0 ) - { - return; - } - i = 0; - while ( i < doors.size ) - { - next_door = doors[ i ]; - next_door movez( -128, 1 ); - next_door disconnectpaths(); - i++; - } -} - -raisereactordoors() -{ - level waittill( "power_event_complete" ); - doors = getentarray( "reactor_core_door", "targetname" ); - if ( doors.size == 0 ) - { - return; - } - i = 0; - while ( i < doors.size ) - { - next_door = doors[ i ]; - next_door movez( 128, 1 ); - next_door connectpaths(); - i++; - } -} - -avogadro_show_vox( user ) -{ - wait 1; - if ( isDefined( user ) ) - { - user thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "power", "power_on" ); - } - wait 8; - players = get_players(); - players = array_randomize( players ); - _a655 = players; - _k655 = getFirstArrayKey( _a655 ); - while ( isDefined( _k655 ) ) - { - player = _a655[ _k655 ]; - if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) || player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_pcr", 1 ) ) - { - player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "power", "power_core" ); - break; - } - else - { - _k655 = getNextArrayKey( _a655, _k655 ); - } - } - wait 15; - players = get_players(); - players = array_randomize( players ); - _a668 = players; - _k668 = getFirstArrayKey( _a668 ); - while ( isDefined( _k668 ) ) - { - player = _a668[ _k668 ]; - if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) || player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_pcr", 1 ) ) - { - player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "avogadro_reveal" ); - return; - } - else - { - _k668 = getNextArrayKey( _a668, _k668 ); - } - } -} - -bus_station_pa_vox() -{ - level endon( "power_off" ); - while ( 1 ) - { - level.station_pa_vox = array_randomize( level.station_pa_vox ); - _a686 = level.station_pa_vox; - _k686 = getFirstArrayKey( _a686 ); - while ( isDefined( _k686 ) ) - { - line = _a686[ _k686 ]; - playsoundatposition( line, ( -6848, 5056, 56 ) ); - wait randomintrange( 12, 15 ); - _k686 = getNextArrayKey( _a686, _k686 ); - } - wait 1; - } -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_sq.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_sq.gsc deleted file mode 100644 index f93699e..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_sq.gsc +++ /dev/null @@ -1,1600 +0,0 @@ -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zm_transit_utility; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( level.createfx_enabled ) - { - return; - } - if ( isDefined( level.gamedifficulty ) && level.gamedifficulty == 0 ) - { - level thread sq_easy_cleanup(); - return; - } - level.sq_volume = getent( "sq_common_area", "targetname" ); - level.sq_clip = getent( "sq_common_clip", "targetname" ); - register_map_navcard( "navcard_held_zm_transit", "navcard_held_zm_buried" ); - if ( isDefined( level.sq_clip ) ) - { - level.sq_clip connectpaths(); - level.sq_clip trigger_off(); - } - maps/mp/zombies/_zm_spawner::register_zombie_death_event_callback( ::sq_zombie_death_event_response ); - declare_sidequest( "sq", ::init_sidequest, ::sidequest_logic, ::complete_sidequest, ::generic_stage_start, ::generic_stage_complete ); - init_sidequest_vo(); - precache_sidequest_assets(); - level thread survivor_vox(); - level thread avogadro_is_near_tower(); - level thread avogadro_far_from_tower(); - level thread avogadro_stab_watch(); - level thread init_navcard(); - level thread init_navcomputer(); - level.buildable_built_custom_func = ::builable_built_custom_func; - level thread richtofen_sidequest_power_state(); -} - -sq_easy_cleanup() -{ - computer_buildable_trig = getent( "sq_common_buildable_trigger", "targetname" ); - computer_buildable_trig delete(); - sq_buildables = getentarray( "buildable_sq_common", "targetname" ); - _a64 = sq_buildables; - _k64 = getFirstArrayKey( _a64 ); - while ( isDefined( _k64 ) ) - { - item = _a64[ _k64 ]; - item delete(); - _k64 = getNextArrayKey( _a64, _k64 ); - } -} - -init_player_sidequest_stats() -{ - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sq_transit_started", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sq_transit_maxis_reset", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sq_transit_rich_reset", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sq_transit_rich_stage_1", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sq_transit_rich_stage_2", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sq_transit_rich_stage_3", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sq_transit_rich_complete", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sq_transit_maxis_stage_1", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sq_transit_maxis_stage_2", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sq_transit_maxis_stage_3", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sq_transit_maxis_complete", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sq_transit_last_completed", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "navcard_held_zm_transit", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "navcard_held_zm_highrise", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "navcard_held_zm_buried", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "navcard_applied_zm_transit", 0 ); -} - -init_sidequest_vo() -{ - level.power_station_zones = []; - level.power_station_zones[ level.power_station_zones.size ] = "zone_trans_6"; - level.power_station_zones[ level.power_station_zones.size ] = "zone_amb_cornfield"; - level.power_station_zones[ level.power_station_zones.size ] = "zone_trans_7"; - level.power_station_zones[ level.power_station_zones.size ] = "zone_pow_ext1"; - level.power_station_zones[ level.power_station_zones.size ] = "zone_prr"; - level.power_station_zones[ level.power_station_zones.size ] = "zone_pcr"; - level.power_station_zones[ level.power_station_zones.size ] = "zone_pow_warehouse"; -} - -init_sidequest() -{ - players = get_players(); -} - -start_transit_sidequest() -{ - if ( level.gamedifficulty == 0 ) - { - return; - } - sidequest_start( "sq" ); -} - -sidequest_logic() -{ - level thread sidequest_main(); - wait_for_buildable( "sq_common" ); - if ( isDefined( level.navcomputer_spawned ) && !level.navcomputer_spawned ) - { - update_sidequest_stats( "sq_transit_started" ); - } - level thread navcomputer_waitfor_navcard(); - if ( flag( "power_on" ) ) - { - level thread richtofensay( "vox_zmba_sidequest_jet_terminal_0" ); - } - hint_said = 0; - while ( !hint_said ) - { - level waittill( "maxi_terminal_vox" ); - if ( flag( "power_on" ) ) - { - hint_said = 1; - } - wait 0,05; - } - maxissay( "vox_maxi_turbine_terminal_0", ( 11360, 8489, -576 ) ); -} - -complete_sidequest() -{ -} - -sidequest_main() -{ - sidequest_init_tracker(); - flag_wait( "start_zombie_round_logic" ); - level.maxcompleted = 0; - level.richcompleted = 0; - players = get_players(); - _a180 = players; - _k180 = getFirstArrayKey( _a180 ); - while ( isDefined( _k180 ) ) - { - player = _a180[ _k180 ]; - player.transit_sq_started = 1; - lastcompleted = player maps/mp/zombies/_zm_stats::get_global_stat( "sq_transit_last_completed" ); - if ( lastcompleted == 1 ) - { - level.richcompleted = 1; - } - else - { - if ( lastcompleted == 2 ) - { - level.maxcompleted = 1; - } - } - _k180 = getNextArrayKey( _a180, _k180 ); - } - if ( level.richcompleted ) - { - clientnotify( "sqrc" ); - wait 1; - } - if ( level.maxcompleted ) - { - clientnotify( "sqmc" ); - wait 1; - } - if ( level.richcompleted && level.maxcompleted ) - { - clientnotify( "sqkl" ); - return; - } - while ( 1 ) - { - level thread maxis_sidequest(); - flag_wait( "power_on" ); - if ( isDefined( level.maxcompleted ) && !level.maxcompleted ) - { - update_sidequest_stats( "sq_transit_maxis_reset" ); - } - if ( isDefined( level.maxis_sq_intro_said ) && !level.maxis_sq_intro_said && isDefined( level.maxcompleted ) && !level.maxcompleted ) - { - wait 2; - level.maxis_sq_intro_said = 1; - level thread maxissay( "vox_maxi_power_on_0", ( 12072, 8496, -704 ), undefined, undefined, 1 ); - } - level thread richtofen_sidequest(); - flag_waitopen( "power_on" ); - if ( isDefined( level.richcompleted ) && !level.richcompleted ) - { - update_sidequest_stats( "sq_transit_rich_reset" ); - } - } -} - -sidequest_init_tracker() -{ - level.sq_progress = []; - level.sq_progress = []; - level.sq_progress[ "maxis" ] = []; - level.sq_progress[ "maxis" ][ "A_turbine_1" ] = 0; - level.sq_progress[ "maxis" ][ "A_turbine_2" ] = 0; - level.sq_progress[ "maxis" ][ "A_complete" ] = 0; - level.sq_progress[ "maxis" ][ "B_complete" ] = 0; - level.sq_progress[ "maxis" ][ "C_turbine_1" ] = 0; - level.sq_progress[ "maxis" ][ "C_screecher_1" ] = 0; - level.sq_progress[ "maxis" ][ "C_turbine_2" ] = 0; - level.sq_progress[ "maxis" ][ "C_screecher_2" ] = 0; - level.sq_progress[ "maxis" ][ "C_complete" ] = 0; - level.sq_progress[ "maxis" ][ "FINISHED" ] = 0; - level.sq_progress[ "rich" ] = []; - level.sq_progress[ "rich" ][ "A_jetgun_built" ] = 0; - level.sq_progress[ "rich" ][ "A_jetgun_tower" ] = 0; - level.sq_progress[ "rich" ][ "A_complete" ] = 0; - level.sq_progress[ "rich" ][ "B_zombies_tower" ] = 0; - level.sq_progress[ "rich" ][ "B_complete" ] = 0; - level.sq_progress[ "rich" ][ "C_screecher_light" ] = 0; - level.sq_progress[ "rich" ][ "C_complete" ] = 0; - level.sq_progress[ "rich" ][ "FINISHED" ] = 0; -/# - if ( getDvarInt( #"113D490F" ) > 0 ) - { - level thread sidequest_debug_tracker(); -#/ - } -} - -sidequest_debug_tracker() -{ -/# - arraymainkeys = getarraykeys( level.sq_progress ); - index = 0; - x = 0; - while ( x < arraymainkeys.size ) - { - arraysubkeys = getarraykeys( level.sq_progress[ arraymainkeys[ x ] ] ); - _a289 = arraysubkeys; - _k289 = getFirstArrayKey( _a289 ); - while ( isDefined( _k289 ) ) - { - key = _a289[ _k289 ]; - hudelem = newhudelem(); - hudelem.alignx = "left"; - hudelem.location = 0; - hudelem.foreground = 1; - hudelem.fontscale = 1,1; - hudelem.sort = 20 - index; - hudelem.alpha = 1; - hudelem.x = 0; - hudelem.y = 60 + ( index * 15 ); - hudelem thread sidequest_debug_tracker_update( arraymainkeys[ x ], key ); - index++; - _k289 = getNextArrayKey( _a289, _k289 ); - } - x++; -#/ - } -} - -sidequest_debug_tracker_update( mainkey, subkey ) -{ -/# - while ( 1 ) - { - value = level.sq_progress[ mainkey ][ subkey ]; - str = ( mainkey + " -- " ) + subkey + ": "; - if ( isDefined( value ) && !isint( value ) && isDefined( value.classname ) ) - { - self settext( str + "[X]" ); - } - else - { - if ( isDefined( value ) ) - { - if ( !isint( value ) && !isDefined( value.classname ) && isDefined( value.targetname ) && value.targetname == "screecher_escape" ) - { - self settext( str + "[X]" ); - } - else - { - self settext( str + value ); - } - break; - } - else - { - self settext( str + "0" ); - } - } - wait 1; -#/ - } -} - -generic_stage_start() -{ - level._stage_active = 1; -} - -generic_stage_complete() -{ - level._stage_active = 0; -} - -maxis_sidequest() -{ - level endon( "power_on" ); - if ( flag( "power_on" ) || isDefined( level.maxcompleted ) && level.maxcompleted ) - { - return; - } - update_sidequest_stats( "sq_transit_maxis_stage_1" ); - level thread maxis_sidequest_a(); - level thread maxis_sidequest_b(); - level thread maxis_sidequest_c(); - level thread avogadro_stunned_vo(); -} - -turbine_power_watcher( player ) -{ - level endon( "end_avogadro_turbines" ); - self endon( "death" ); - self.powered = undefined; - turbine_failed_vo = undefined; - while ( isDefined( self ) ) - { - wait 2; - if ( is_true( player.turbine_power_is_on ) && !is_true( player.turbine_emped ) ) - { - self.powered = 1; - continue; - } - else - { - if ( is_true( player.turbine_emped ) || !is_true( player.turbine_power_is_on ) ) - { - wait 2; - self.powered = 0; - if ( !isDefined( turbine_failed_vo ) ) - { - level thread maxissay( "vox_maxi_turbines_out_0", self.origin ); - turbine_failed_vo = 1; - } - } - } - } -} - -maxis_sidequest_a() -{ - level endon( "power_on" ); - if ( isDefined( level.sq_progress[ "maxis" ][ "B_complete" ] ) && !level.sq_progress[ "maxis" ][ "B_complete" ] ) - { - level.sq_progress[ "maxis" ][ "A_complete" ] = 0; - } - while ( 1 ) - { - players = get_players(); - _a423 = players; - _k423 = getFirstArrayKey( _a423 ); - while ( isDefined( _k423 ) ) - { - player = _a423[ _k423 ]; - if ( isDefined( player.buildableturbine ) && player.buildableturbine istouching( level.sq_volume ) ) - { - level notify( "maxi_terminal_vox" ); - player.buildableturbine thread turbine_watch_cleanup(); - if ( !isDefined( level.sq_progress[ "maxis" ][ "A_turbine_1" ] ) ) - { - level.sq_progress[ "maxis" ][ "A_turbine_1" ] = player.buildableturbine; - level.sq_progress[ "maxis" ][ "A_turbine_1" ] thread turbine_power_watcher( player ); - break; - } - else - { - if ( !isDefined( level.sq_progress[ "maxis" ][ "A_turbine_2" ] ) ) - { - level.sq_progress[ "maxis" ][ "A_turbine_2" ] = player.buildableturbine; - level.sq_progress[ "maxis" ][ "A_turbine_2" ] thread turbine_power_watcher( player ); - } - } - } - _k423 = getNextArrayKey( _a423, _k423 ); - } - if ( get_how_many_progressed_from( "maxis", "A_turbine_1", "A_turbine_2" ) == 1 ) - { - level thread maxissay( "vox_maxi_turbine_1tower_0", ( 7737, -416, -142 ) ); - } - if ( get_how_many_progressed_from( "maxis", "A_turbine_1", "A_turbine_2" ) == 2 ) - { - if ( avogadro_at_tower() ) - { - level thread maxissay( "vox_maxi_turbine_2tower_avo_0", ( 7737, -416, -142 ) ); - } - else - { - level thread maxissay( "vox_maxi_turbine_2tower_0", ( 7737, -416, -142 ) ); - } - update_sidequest_stats( "sq_transit_maxis_stage_2" ); - level thread maxis_sidequest_complete_check( "A_complete" ); - } - level waittill_either( "turbine_deployed", "equip_turbine_zm_cleaned_up" ); - if ( !level.sq_progress[ "maxis" ][ "B_complete" ] ) - { - level.sq_progress[ "maxis" ][ "A_complete" ] = 0; - continue; - } - else - { - } - } -} - -maxis_sidequest_b() -{ - level endon( "power_on" ); - while ( 1 ) - { - level waittill( "stun_avogadro", avogadro ); - if ( isDefined( level.sq_progress[ "maxis" ][ "A_turbine_1" ] ) && is_true( level.sq_progress[ "maxis" ][ "A_turbine_1" ].powered ) && isDefined( level.sq_progress[ "maxis" ][ "A_turbine_2" ] ) && is_true( level.sq_progress[ "maxis" ][ "A_turbine_2" ].powered ) ) - { - if ( isDefined( avogadro ) && avogadro istouching( level.sq_volume ) ) - { - level notify( "end_avogadro_turbines" ); - break; - } - } - else - { - } - } - level notify( "maxis_stage_b" ); - level thread maxissay( "vox_maxi_avogadro_emp_0", ( 7737, -416, -142 ) ); - update_sidequest_stats( "sq_transit_maxis_stage_3" ); - player = get_players(); - player[ 0 ] setclientfield( "sq_tower_sparks", 1 ); - player[ 0 ] setclientfield( "screecher_maxis_lights", 1 ); - level thread maxis_sidequest_complete_check( "B_complete" ); -} - -maxis_sidequest_c() -{ - flag_wait( "power_on" ); - flag_waitopen( "power_on" ); - level endon( "power_on" ); - level.sq_progress[ "maxis" ][ "C_complete" ] = 0; - turbine_1_talked = 0; - turbine_2_talked = 0; - screech_zones = getstructarray( "screecher_escape", "targetname" ); - while ( 1 ) - { - if ( !isDefined( level.sq_progress[ "maxis" ][ "C_turbine_1" ] ) ) - { - } - if ( !isDefined( level.sq_progress[ "maxis" ][ "C_turbine_2" ] ) ) - { - } - players = get_players(); - _a548 = players; - _k548 = getFirstArrayKey( _a548 ); - while ( isDefined( _k548 ) ) - { - player = _a548[ _k548 ]; - while ( isDefined( player.buildableturbine ) ) - { - x = 0; - while ( x < screech_zones.size ) - { - zone = screech_zones[ x ]; - if ( distancesquared( player.buildableturbine.origin, zone.origin ) < ( zone.radius * zone.radius ) ) - { - player.buildableturbine thread turbine_watch_cleanup(); - if ( !isDefined( level.sq_progress[ "maxis" ][ "C_turbine_1" ] ) ) - { - if ( !isDefined( level.sq_progress[ "maxis" ][ "C_screecher_2" ] ) || zone != level.sq_progress[ "maxis" ][ "C_screecher_2" ] ) - { - level.sq_progress[ "maxis" ][ "C_turbine_1" ] = player.buildableturbine; - level.sq_progress[ "maxis" ][ "C_screecher_1" ] = zone; - } - x++; - continue; - } - else - { - if ( !isDefined( level.sq_progress[ "maxis" ][ "C_turbine_2" ] ) ) - { - if ( !isDefined( level.sq_progress[ "maxis" ][ "C_screecher_1" ] ) || zone != level.sq_progress[ "maxis" ][ "C_screecher_1" ] ) - { - level.sq_progress[ "maxis" ][ "C_turbine_2" ] = player.buildableturbine; - level.sq_progress[ "maxis" ][ "C_screecher_2" ] = zone; - } - } - } - } - x++; - } - } - _k548 = getNextArrayKey( _a548, _k548 ); - } - if ( get_how_many_progressed_from( "maxis", "C_turbine_1", "C_turbine_2" ) == 1 ) - { - zone = undefined; - if ( isDefined( level.sq_progress[ "maxis" ][ "C_turbine_1" ] ) ) - { - zone = level.sq_progress[ "maxis" ][ "C_screecher_1" ]; - } - else - { - zone = level.sq_progress[ "maxis" ][ "C_screecher_2" ]; - } - if ( isDefined( zone ) && !turbine_1_talked ) - { - turbine_1_talked = 1; - level thread maxissay( "vox_maxi_turbine_1light_0", zone.origin ); - } - } - if ( get_how_many_progressed_from( "maxis", "C_turbine_1", "C_turbine_2" ) == 2 ) - { - zone = undefined; - if ( isDefined( level.sq_progress[ "maxis" ][ "C_turbine_1" ] ) ) - { - zone = level.sq_progress[ "maxis" ][ "C_screecher_1" ]; - } - else - { - zone = level.sq_progress[ "maxis" ][ "C_screecher_2" ]; - } - if ( isDefined( zone ) ) - { - if ( level.sq_progress[ "maxis" ][ "B_complete" ] && level.sq_progress[ "maxis" ][ "A_complete" ] ) - { - if ( !turbine_2_talked ) - { - level thread maxissay( "vox_maxi_turbine_2light_on_0", zone.origin ); - turbine_2_talked = 1; - } - player = get_players(); - player[ 0 ] setclientfield( "screecher_maxis_lights", 0 ); - level maxis_sidequest_complete_check( "C_complete" ); - return; - break; - } - else - { - level thread maxissay( "vox_maxi_turbine_2light_off_0", zone.origin ); - } - } - } - level waittill_either( "turbine_deployed", "equip_turbine_zm_cleaned_up" ); - level.sq_progress[ "maxis" ][ "C_complete" ] = 0; - } -} - -maxis_sidequest_complete_check( nowcomplete ) -{ - level.sq_progress[ "maxis" ][ nowcomplete ] = 1; - if ( level.sq_progress[ "maxis" ][ "A_complete" ] && level.sq_progress[ "maxis" ][ "B_complete" ] && level.sq_progress[ "maxis" ][ "C_complete" ] ) - { - level maxis_sidequest_complete(); - } -} - -maxis_sidequest_complete() -{ - turbinescriptnoteworthy1 = undefined; - turbinescriptnoteworthy2 = undefined; - if ( isDefined( level.sq_progress[ "maxis" ][ "C_screecher_1" ] ) && isDefined( level.sq_progress[ "maxis" ][ "C_screecher_1" ].script_noteworthy ) ) - { - turbinescriptnoteworthy1 = level.sq_progress[ "maxis" ][ "C_screecher_1" ].script_noteworthy; - } - if ( isDefined( level.sq_progress[ "maxis" ][ "C_screecher_2" ] ) && isDefined( level.sq_progress[ "maxis" ][ "C_screecher_2" ].script_noteworthy ) ) - { - turbinescriptnoteworthy2 = level.sq_progress[ "maxis" ][ "C_screecher_2" ].script_noteworthy; - } - update_sidequest_stats( "sq_transit_maxis_complete" ); - level sidequest_complete( "maxis" ); - level.sq_progress[ "maxis" ][ "FINISHED" ] = 1; - level.maxcompleted = 1; - clientnotify( "sq_kfx" ); - if ( isDefined( level.richcompleted ) && level.richcompleted ) - { - level clientnotify( "sq_krt" ); - } - wait 1; - clientnotify( "sqm" ); - wait 1; - level set_screecher_zone_origin( turbinescriptnoteworthy1 ); - wait 1; - clientnotify( "sq_max" ); - wait 1; - level set_screecher_zone_origin( turbinescriptnoteworthy2 ); - wait 1; - clientnotify( "sq_max" ); - level thread droppowerup( "maxis" ); -} - -richtofen_sidequest() -{ - level endon( "power_turned_off" ); - if ( !flag( "power_on" ) || isDefined( level.richcompleted ) && level.richcompleted ) - { - return; - } - if ( isDefined( level.richtofen_sq_intro_said ) && !level.richtofen_sq_intro_said ) - { - level thread wait_for_richtoffen_intro(); - } - update_sidequest_stats( "sq_transit_rich_stage_1" ); - level thread richtofen_sidequest_a(); - level thread richtofen_sidequest_b(); - level thread richtofen_sidequest_c(); -} - -richtofen_sidequest_power_state() -{ - flag_wait( "power_on" ); - while ( 1 ) - { - flag_waitopen( "power_on" ); - level notify( "power_turned_off" ); - level notify( "power_off" ); - level thread maxissay( "vox_maxi_power_off_0", ( 12072, 8496, -704 ), undefined, undefined, 1 ); - wait 7; - level thread richtofensay( "vox_zmba_sidequest_power_off_0", undefined, 1, 15 ); - flag_wait( "power_on" ); - level thread richtofensay( "vox_zmba_sidequest_emp_off_0", undefined, 1, 15 ); - wait 7; - level thread maxissay( "vox_maxi_emp_off_0", ( 12072, 8496, -704 ), undefined, undefined, 1 ); - } -} - -richtofen_sidequest_a() -{ - level endon( "power_off" ); - level.sq_progress[ "rich" ][ "A_jetgun_built" ] = 0; - level.sq_progress[ "rich" ][ "A_jetgun_tower" ] = 0; - level.sq_progress[ "rich" ][ "A_complete" ] = 0; - ric_fail_out = undefined; - ric_fail_heat = undefined; - if ( isDefined( level.buildables_built[ "jetgun_zm" ] ) && !level.buildables_built[ "jetgun_zm" ] ) - { - wait_for_buildable( "jetgun_zm" ); - } - level.sq_progress[ "rich" ][ "A_jetgun_built" ] = 1; - while ( 1 ) - { - level.sq_volume waittill( "trigger", who ); - if ( isplayer( who ) && isalive( who ) && who getcurrentweapon() == "jetgun_zm" || !isDefined( who.jetgun_heatval ) && who.jetgun_heatval < 1 ) - { - who thread left_sq_area_watcher( level.sq_volume ); - notifystring = who waittill_any_return( "disconnect", "weapon_change", "death", "player_downed", "jetgun_overheated", "left_sg_area" ); - if ( notifystring == "jetgun_overheated" && isDefined( who ) && who istouching( level.sq_volume ) ) - { - self.checking_jetgun_fire = 0; - break; - } - else if ( !isDefined( ric_fail_out ) ) - { - ric_fail_out = 1; - level thread richtofensay( "vox_zmba_sidequest_jet_low_0", undefined, 0, 10 ); - } - self.checking_jetgun_fire = 0; - continue; - } - else - { - if ( isplayer( who ) && isalive( who ) && who getcurrentweapon() == "jetgun_zm" && isDefined( who.jetgun_heatval ) && who.jetgun_heatval > 1 ) - { - if ( !isDefined( ric_fail_heat ) ) - { - ric_fail_heat = 1; - level thread richtofensay( "vox_zmba_sidequest_jet_low_0", undefined, 0, 10 ); - } - } - } - } - level thread richtofensay( "vox_zmba_sidequest_jet_empty_0", undefined, 0, 16 ); - player = get_players(); - player[ 0 ] setclientfield( "screecher_sq_lights", 1 ); - update_sidequest_stats( "sq_transit_rich_stage_2" ); - level thread richtofen_sidequest_complete_check( "A_complete" ); - level.sq_progress[ "rich" ][ "A_jetgun_tower" ] = 1; -} - -left_sq_area_watcher( volume ) -{ - while ( self istouching( volume ) ) - { - wait 0,5; - } - self notify( "left_sg_area" ); -} - -richtofen_sidequest_b() -{ - level endon( "power_off" ); - level.sq_progress[ "rich" ][ "B_zombies_tower" ] = 25; - level thread lure_zombies_to_tower_hint(); - while ( level.sq_progress[ "rich" ][ "B_zombies_tower" ] > 0 ) - { - level waittill( "zombie_died_in_sq_volume" ); - while ( !level.sq_progress[ "rich" ][ "A_complete" ] ) - { - level thread richtofensay( "vox_zmba_sidequest_blow_mag_0" ); - } - level.sq_progress[ "rich" ][ "B_zombies_tower" ]--; - - if ( level.sq_progress[ "rich" ][ "B_zombies_tower" ] > 0 ) - { - } - } - level thread richtofensay( "vox_zmba_sidequest_blow_nomag_0" ); - update_sidequest_stats( "sq_transit_rich_stage_3" ); - level notify( "sq_stage_3complete" ); - level thread richtofen_sidequest_complete_check( "B_complete" ); -} - -lure_zombies_to_tower_hint() -{ - level endon( "power_on" ); - level endon( "sq_stage_3complete" ); - zombie_train = 0; - lure_distance = 722500; - while ( !zombie_train ) - { - zombies = getaiarray(); - counter = 0; - _a881 = zombies; - _k881 = getFirstArrayKey( _a881 ); - while ( isDefined( _k881 ) ) - { - zombie = _a881[ _k881 ]; - if ( distancesquared( zombie.origin, level.sq_volume.origin ) < lure_distance ) - { - counter++; - } - _k881 = getNextArrayKey( _a881, _k881 ); - } - if ( counter >= 5 ) - { - zombie_train = 1; - } - wait 3; - } - level thread richtofensay( "vox_zmba_sidequest_zom_lure_0" ); -} - -richtofen_sidequest_c() -{ - level endon( "power_off" ); - level endon( "richtofen_sq_complete" ); - screech_zones = getstructarray( "screecher_escape", "targetname" ); - level thread screecher_light_hint(); - level thread screecher_light_on_sq(); - level.sq_richtofen_c_screecher_lights = []; - while ( 1 ) - { - level waittill( "safety_light_power_off", screecher_zone ); - while ( !level.sq_progress[ "rich" ][ "A_complete" ] || !level.sq_progress[ "rich" ][ "B_complete" ] ) - { - level thread richtofensay( "vox_zmba_sidequest_emp_nomag_0" ); - } - level.sq_richtofen_c_screecher_lights[ level.sq_richtofen_c_screecher_lights.size ] = screecher_zone; - level.sq_progress[ "rich" ][ "C_screecher_light" ]++; - if ( level.sq_progress[ "rich" ][ "C_screecher_light" ] >= 4 ) - { - break; - } - else - { - if ( isDefined( level.checking_for_richtofen_c_failure ) && !level.checking_for_richtofen_c_failure ) - { - level thread check_for_richtofen_c_failure(); - } - } - } - level thread richtofensay( "vox_zmba_sidequest_4emp_mag_0" ); - level notify( "richtofen_c_complete" ); - player = get_players(); - player[ 0 ] setclientfield( "screecher_sq_lights", 0 ); - level thread richtofen_sidequest_complete_check( "C_complete" ); -} - -check_for_richtofen_c_failure() -{ - if ( isDefined( level.checking_for_richtofen_c_failure ) && !level.checking_for_richtofen_c_failure ) - { - level.checking_for_richtofen_c_failure = 1; - wait 5; - if ( level.sq_progress[ "rich" ][ "C_screecher_light" ] < 4 ) - { - level thread richtofensay( "vox_zmba_sidequest_3emp_mag_0" ); - level.sq_progress[ "rich" ][ "C_screecher_light" ] = 0; - } - level.checking_for_richtofen_c_failure = 0; - } -} - -screecher_light_on_sq() -{ - while ( 1 ) - { - level waittill( "safety_light_power_on", screecher_zone ); - arrayremovevalue( level.sq_richtofen_c_screecher_lights, screecher_zone ); - if ( level.sq_progress[ "rich" ][ "C_screecher_light" ] > 0 ) - { - level.sq_progress[ "rich" ][ "C_screecher_light" ]--; - - } - } -} - -richtofen_sidequest_complete_check( nowcomplete ) -{ - level.sq_progress[ "rich" ][ nowcomplete ] = 1; - if ( level.sq_progress[ "rich" ][ "A_complete" ] && level.sq_progress[ "rich" ][ "B_complete" ] && level.sq_progress[ "rich" ][ "C_complete" ] ) - { - level thread richtofen_sidequest_complete(); - } -} - -richtofen_sidequest_complete() -{ - update_sidequest_stats( "sq_transit_rich_complete" ); - level thread sidequest_complete( "richtofen" ); - level.sq_progress[ "rich" ][ "FINISHED" ] = 1; - level.richcompleted = 1; - clientnotify( "sq_kfx" ); - if ( isDefined( level.maxcompleted ) && level.maxcompleted ) - { - level clientnotify( "sq_kmt" ); - } - wait 1; - clientnotify( "sqr" ); - _a1007 = level.sq_richtofen_c_screecher_lights; - _k1007 = getFirstArrayKey( _a1007 ); - while ( isDefined( _k1007 ) ) - { - zone = _a1007[ _k1007 ]; - level set_screecher_zone_origin( zone.target.script_noteworthy ); - wait 1; - clientnotify( "sq_rich" ); - wait 1; - _k1007 = getNextArrayKey( _a1007, _k1007 ); - } - level thread droppowerup( "richtofen" ); -} - -set_screecher_zone_origin( script_noteworthy ) -{ - if ( !isDefined( script_noteworthy ) ) - { - return; - } - switch( script_noteworthy ) - { - case "cornfield": - clientnotify( "zsc" ); - break; - case "diner": - clientnotify( "zsd" ); - break; - case "forest": - clientnotify( "zsf" ); - break; - case "busdepot": - clientnotify( "zsb" ); - break; - case "bridgedepot": - clientnotify( "zsbd" ); - break; - case "townbridge": - clientnotify( "zsbt" ); - break; - case "huntershack": - clientnotify( "zsh" ); - break; - case "powerstation": - clientnotify( "zsp" ); - break; - } -} - -turbine_watch_cleanup() -{ - if ( isDefined( self.turbine_watch_cleanup ) && self.turbine_watch_cleanup ) - { - return; - } - self.turbine_watch_cleanup = 1; - self waittill( "death" ); - level notify( "equip_turbine_zm_cleaned_up" ); -} - -get_how_many_progressed_from( story, a, b ) -{ - if ( isDefined( level.sq_progress[ story ][ a ] ) || !isDefined( level.sq_progress[ story ][ b ] ) && !isDefined( level.sq_progress[ story ][ a ] ) && isDefined( level.sq_progress[ story ][ b ] ) ) - { - return 1; - } - else - { - if ( isDefined( level.sq_progress[ story ][ a ] ) && isDefined( level.sq_progress[ story ][ b ] ) ) - { - return 2; - } - } - return 0; -} - -sq_zombie_death_event_response() -{ - if ( distancesquared( self.origin, level.sq_volume.origin ) < 176400 && isDefined( self.damagemod ) ) - { - mod = self.damagemod; - if ( mod != "MOD_GRENADE" && mod != "MOD_GRENADE_SPLASH" && mod != "MOD_EXPLOSIVE" && mod != "MOD_EXPLOSIVE_SPLASH" || mod == "MOD_PROJECTILE" && mod == "MOD_PROJECTILE_SPLASH" ) - { - level notify( "zombie_died_in_sq_volume" ); - } - } -} - -update_sidequest_stats( stat_name ) -{ - maxis_complete = 0; - rich_complete = 0; - started = 0; - if ( stat_name == "sq_transit_maxis_complete" ) - { - maxis_complete = 1; - } - else - { - if ( stat_name == "sq_transit_rich_complete" ) - { - rich_complete = 1; - } - } - players = get_players(); - _a1124 = players; - _k1124 = getFirstArrayKey( _a1124 ); - while ( isDefined( _k1124 ) ) - { - player = _a1124[ _k1124 ]; - if ( stat_name == "sq_transit_started" ) - { - player.transit_sq_started = 1; - } - else if ( stat_name == "navcard_applied_zm_transit" ) - { - player maps/mp/zombies/_zm_stats::set_global_stat( level.navcard_needed, 0 ); - thread sq_refresh_player_navcard_hud(); - } - else - { - if ( isDefined( player.transit_sq_started ) && !player.transit_sq_started ) - { - } - } - else - { - if ( rich_complete ) - { - player maps/mp/zombies/_zm_stats::set_global_stat( "sq_transit_last_completed", 1 ); - incrementcounter( "global_zm_total_rich_sq_complete_transit", 1 ); - } - else - { - if ( maxis_complete ) - { - player maps/mp/zombies/_zm_stats::set_global_stat( "sq_transit_last_completed", 2 ); - incrementcounter( "global_zm_total_max_sq_complete_transit", 1 ); - } - } - player maps/mp/zombies/_zm_stats::increment_client_stat( stat_name, 0 ); - } - _k1124 = getNextArrayKey( _a1124, _k1124 ); - } - if ( rich_complete || maxis_complete ) - { - level notify( "transit_sidequest_achieved" ); - } -} - -richtofensay( vox_line, intro, ignore_power_state, time ) -{ - level endon( "end_game" ); - level endon( "intermission" ); - if ( isDefined( level.intermission ) && level.intermission ) - { - return; - } - if ( isDefined( level.richcompleted ) && level.richcompleted ) - { - return; - } - level endon( "richtofen_c_complete" ); - if ( !isDefined( time ) ) - { - time = 45; - } - while ( isDefined( level.richtofen_talking_to_samuel ) || level.richtofen_talking_to_samuel && isDefined( level.richtofen_sq_intro_said ) && !level.richtofen_sq_intro_said ) - { - wait 1; - } - if ( isDefined( level.rich_sq_player ) && is_player_valid( level.rich_sq_player ) ) - { -/# - iprintlnbold( "Richtoffen Says: " + vox_line ); -#/ - if ( flag( "power_on" ) && !flag( "switches_on" ) && isDefined( ignore_power_state ) && !ignore_power_state ) - { - return; - } - level.rich_sq_player playsoundtoplayer( vox_line, level.rich_sq_player ); - if ( isDefined( level.richtofen_talking_to_samuel ) && !level.richtofen_talking_to_samuel ) - { - level thread richtofen_talking( time ); - } - } -} - -richtofen_talking( time ) -{ - level.rich_sq_player.dontspeak = 1; - level.richtofen_talking_to_samuel = 1; - wait time; - level.richtofen_talking_to_samuel = 0; - if ( isDefined( level.rich_sq_player ) ) - { - level.rich_sq_player.dontspeak = 0; - } -} - -maxissay( line, org, playonent, playonenttag, ignore_power_state ) -{ - level endon( "end_game" ); - level endon( "intermission" ); - if ( isDefined( level.intermission ) && level.intermission ) - { - return; - } - if ( isDefined( level.maxcompleted ) && level.maxcompleted ) - { - return; - } - if ( !flag( "power_on" ) && flag( "switches_on" ) && isDefined( ignore_power_state ) && !ignore_power_state ) - { - return; - } - while ( isDefined( level.maxis_talking ) && level.maxis_talking ) - { - wait 0,05; - } - level.maxis_talking = 1; -/# - iprintlnbold( "Maxis Says: " + line ); -#/ - if ( isDefined( playonent ) ) - { - playonent playsoundontag( line, playonenttag ); - } - else - { - playsoundatposition( line, org ); - } - wait 10; - level.maxis_talking = 0; -} - -wait_for_richtoffen_intro() -{ - level endon( "intermission" ); - power_occupied = 1; - while ( power_occupied ) - { - inzone = 0; - _a1274 = level.power_station_zones; - _k1274 = getFirstArrayKey( _a1274 ); - while ( isDefined( _k1274 ) ) - { - zone = _a1274[ _k1274 ]; - if ( isDefined( maps/mp/zombies/_zm_zonemgr::player_in_zone( zone ) ) && maps/mp/zombies/_zm_zonemgr::player_in_zone( zone ) ) - { - inzone = 1; - } - _k1274 = getNextArrayKey( _a1274, _k1274 ); - } - if ( !inzone ) - { - power_occupied = 0; - } - wait 0,1; - } - wait 5; - if ( !isDefined( level.rich_sq_player ) || !flag( "power_on" ) && !flag( "switches_on" ) ) - { - return; - } - if ( isDefined( level.intermission ) && level.intermission ) - { - return; - } - level.rich_sq_player playsoundtoplayer( "vox_zmba_sidequest_power_on_0", level.rich_sq_player ); - richtofen_talking( 45 ); - level.richtofen_sq_intro_said = 1; -} - -survivor_vox() -{ - initiated = 0; - while ( !initiated ) - { - players = get_players(); - _a1314 = players; - _k1314 = getFirstArrayKey( _a1314 ); - while ( isDefined( _k1314 ) ) - { - player = _a1314[ _k1314 ]; - if ( distance2dsquared( player.origin, ( 8000, -6656, 160 ) ) < 1225 ) - { - if ( player usebuttonpressed() ) - { - playsoundatposition( "zmb_zombie_arc", ( 8000, -6656, 160 ) ); - start_time = getTime(); - end_time = start_time + 5000; - while ( player usebuttonpressed() && distance2dsquared( player.origin, ( 8000, -6656, 160 ) ) < 1225 && is_player_valid( player ) ) - { - if ( getTime() > end_time ) - { - initiated = 1; - } - wait 0,05; - } - playsoundatposition( "zmb_buildable_piece_add", ( 8000, -6656, 160 ) ); - } - } - _k1314 = getNextArrayKey( _a1314, _k1314 ); - } - wait 1; - } - playsoundatposition( "zmb_weap_wall", ( 8000, -6656, 160 ) ); - i = -1; - while ( 1 ) - { - players = get_players(); - _a1343 = players; - _k1343 = getFirstArrayKey( _a1343 ); - while ( isDefined( _k1343 ) ) - { - player = _a1343[ _k1343 ]; - if ( distance2dsquared( player.origin, ( 8000, -6656, 160 ) ) < 1225 ) - { - if ( player usebuttonpressed() && is_player_valid( player ) ) - { - if ( flag( "power_on" ) ) - { - if ( i == -1 || i > 4 ) - { - playsoundatposition( "vox_maxi_tv_distress_0", ( 8000, -6656, 160 ) ); - i++; - continue; - } - else - { - if ( i < 4 ) - { - playsoundatposition( level.survivor_vox[ i ], ( 8000, -6656, 160 ) ); - } - } - i++; - } - wait 60; - } - } - _k1343 = getNextArrayKey( _a1343, _k1343 ); - } - wait 1; - } -} - -builable_built_custom_func( buildable ) -{ - if ( buildable.buildable_name == "jetgun_zm" ) - { - if ( flag( "power_on" ) || flag( "switches_on" ) ) - { - level thread richtofensay( "vox_zmba_sidequest_jet_complete_0" ); - level.sq_jetgun_built = 1; - } - } -} - -screecher_light_hint() -{ - level endon( "power_off" ); - level endon( "richtofen_c_complete" ); - while ( !level.sq_progress[ "rich" ][ "A_jetgun_tower" ] ) - { - wait 1; - } - screech_zones = getstructarray( "screecher_escape", "targetname" ); - dist = 122500; - while ( 1 ) - { - count = 0; - players = get_players(); - _a1399 = players; - _k1399 = getFirstArrayKey( _a1399 ); - while ( isDefined( _k1399 ) ) - { - player = _a1399[ _k1399 ]; - _a1401 = screech_zones; - _k1401 = getFirstArrayKey( _a1401 ); - while ( isDefined( _k1401 ) ) - { - zone = _a1401[ _k1401 ]; - if ( distancesquared( player.origin, zone.origin ) < dist ) - { - if ( player maps/mp/zombies/_zm_weapons::has_weapon_or_upgrade( "emp_grenade_zm" ) ) - { - count++; - } - } - _k1401 = getNextArrayKey( _a1401, _k1401 ); - } - _k1399 = getNextArrayKey( _a1399, _k1399 ); - } - if ( count >= players.size ) - { - richtofensay( "vox_zmba_sidequest_near_light_0" ); - return; - } - wait 2; - } -} - -maxi_near_corn_hint() -{ - level endon( "power_on" ); - say_hint = 0; - while ( !say_hint ) - { - players = get_players(); - _a1430 = players; - _k1430 = getFirstArrayKey( _a1430 ); - while ( isDefined( _k1430 ) ) - { - player = _a1430[ _k1430 ]; - if ( !player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_amb_cornfield" ) ) - { - } - else if ( isDefined( player.buildableturbine ) && isDefined( player.buildableturbine.equipment_can_move ) && player.buildableturbine.equipment_can_move && isDefined( player.isonbus ) && player.isonbus ) - { - say_hint = 1; - } - else - { - if ( isDefined( player.buildableturbine ) && isDefined( player.isonbus ) && player.isonbus ) - { - say_hint = 1; - } - } - _k1430 = getNextArrayKey( _a1430, _k1430 ); - } - wait 2; - } - level thread maxissay( "vox_maxi_near_corn_0", undefined, level.automaton, "J_neck" ); -} - -avogadro_far_from_tower() -{ - if ( isDefined( level.maxcompleted ) && level.maxcompleted ) - { - return; - } - level waittill( "power_on" ); - level endon( "power_on" ); - say_hint = 0; - while ( !say_hint ) - { - players = get_players(); - _a1466 = players; - _k1466 = getFirstArrayKey( _a1466 ); - while ( isDefined( _k1466 ) ) - { - player = _a1466[ _k1466 ]; - if ( isDefined( player.isonbus ) && !player.isonbus ) - { - } - else - { - if ( !avogadro_near_tower() && player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_amb_cornfield" ) ) - { - say_hint = 1; - } - } - _k1466 = getNextArrayKey( _a1466, _k1466 ); - } - wait 1; - } - level thread maxissay( "vox_maxi_avogadro_far_0", undefined, level.automaton, "J_neck" ); -} - -avogadro_near_tower() -{ - if ( isDefined( level.avogadro ) && level.avogadro maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_amb_cornfield" ) ) - { - return 1; - } - return 0; -} - -avogadro_stab_watch() -{ - if ( isDefined( level.maxcompleted ) && level.maxcompleted ) - { - return; - } - level waittill( "avogadro_stabbed", avogadro ); - if ( !flag( "power_on" ) ) - { - level thread maxissay( "vox_maxi_avogadro_stab_0", avogadro.origin ); - } -} - -avogadro_is_near_tower() -{ - if ( isDefined( level.maxcompleted ) && level.maxcompleted ) - { - return; - } - level waittill( "power_on" ); - level endon( "power_on" ); - say_hint = 0; - while ( !say_hint ) - { - if ( avogadro_near_tower() ) - { - say_hint = 1; - } - wait 1; - } - level thread maxissay( "vox_maxi_avogadro_near_0", ( 7737, -416, -142 ) ); -} - -avogadro_at_tower() -{ - if ( isDefined( level.avogadro ) && level.avogadro istouching( level.sq_volume ) ) - { - return 1; - } - return 0; -} - -droppowerup( story ) -{ - center_struct = getstruct( "sq_common_tower_fx", "targetname" ); - trace = bullettrace( center_struct.origin, center_struct.origin - vectorScale( ( 0, 0, 0 ), 999999 ), 0, undefined ); - poweruporigin = trace[ "position" ] + vectorScale( ( 0, 0, 0 ), 25 ); - mintime = 240; - maxtime = 720; - while ( 1 ) - { - trail = spawn( "script_model", center_struct.origin ); - trail setmodel( "tag_origin" ); - wait 0,5; - playfxontag( level._effect[ story + "_sparks" ], trail, "tag_origin" ); - trail moveto( poweruporigin, 10 ); - trail waittill( "movedone" ); - level thread droppoweruptemptation( story, poweruporigin ); - wait 1; - trail delete(); - wait randomintrange( mintime, maxtime ); - } -} - -droppoweruptemptation( story, origin ) -{ - powerup = spawn( "script_model", origin ); - powerup endon( "powerup_grabbed" ); - powerup endon( "powerup_timedout" ); - temptation_array = array( "insta_kill", "nuke", "double_points", "carpenter" ); - temptation_index = 0; - first_time = 1; - rotation = 0; - temptation_array = array_randomize( temptation_array ); - while ( isDefined( powerup ) ) - { - powerup maps/mp/zombies/_zm_powerups::powerup_setup( temptation_array[ temptation_index ] ); - if ( first_time ) - { - powerup thread maps/mp/zombies/_zm_powerups::powerup_timeout(); - powerup thread maps/mp/zombies/_zm_powerups::powerup_wobble(); - powerup thread maps/mp/zombies/_zm_powerups::powerup_grab(); - first_time = 0; - } - if ( rotation == 0 ) - { - wait 15; - rotation++; - temptation_index++; - continue; - } - else if ( rotation == 1 ) - { - wait 7,5; - rotation++; - temptation_index++; - continue; - } - else if ( rotation == 2 ) - { - wait 2,5; - rotation++; - temptation_index++; - continue; - } - else - { - wait 1,5; - rotation++; - } - temptation_index++; - if ( temptation_index >= temptation_array.size ) - { - temptation_index = 0; - } - } -} - -init_navcard() -{ - flag_wait( "start_zombie_round_logic" ); - spawn_card = 1; - players = get_players(); - _a1634 = players; - _k1634 = getFirstArrayKey( _a1634 ); - while ( isDefined( _k1634 ) ) - { - player = _a1634[ _k1634 ]; - has_card = does_player_have_map_navcard( player ); - if ( has_card ) - { - player.navcard_grabbed = level.map_navcard; - spawn_card = 0; - } - _k1634 = getNextArrayKey( _a1634, _k1634 ); - } - thread sq_refresh_player_navcard_hud(); - if ( !spawn_card ) - { - return; - } - model = "p6_zm_keycard"; - org = ( -6245, 5479,5, -55,35 ); - angles = ( 0, 0, 0 ); - maps/mp/zombies/_zm_utility::place_navcard( model, level.map_navcard, org, angles ); -} - -init_navcomputer() -{ - flag_wait( "start_zombie_round_logic" ); - spawn_navcomputer = 1; - players = get_players(); - _a1664 = players; - _k1664 = getFirstArrayKey( _a1664 ); - while ( isDefined( _k1664 ) ) - { - player = _a1664[ _k1664 ]; - built_comptuer = player maps/mp/zombies/_zm_stats::get_global_stat( "sq_transit_started" ); - if ( !built_comptuer ) - { - spawn_navcomputer = 0; - break; - } - else - { - _k1664 = getNextArrayKey( _a1664, _k1664 ); - } - } - if ( !spawn_navcomputer ) - { - return; - } - level.navcomputer_spawned = 1; - get_players()[ 0 ] maps/mp/zombies/_zm_buildables::player_finish_buildable( level.sq_buildable.buildablezone ); - while ( isDefined( level.sq_buildable ) && isDefined( level.sq_buildable.model ) ) - { - buildable = level.sq_buildable.buildablezone; - i = 0; - while ( i < buildable.pieces.size ) - { - if ( isDefined( buildable.pieces[ i ].model ) ) - { - buildable.pieces[ i ].model delete(); - maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( buildable.pieces[ i ].unitrigger ); - } - if ( isDefined( buildable.pieces[ i ].part_name ) ) - { - buildable.stub.model notsolid(); - buildable.stub.model show(); - buildable.stub.model showpart( buildable.pieces[ i ].part_name ); - } - i++; - } - } - level thread navcomputer_waitfor_navcard(); -} - -navcomputer_waitfor_navcard() -{ - computer_buildable_trig = getent( "sq_common_buildable_trigger", "targetname" ); - trig_pos = getstruct( "sq_common_key", "targetname" ); - navcomputer_use_trig = spawn( "trigger_radius_use", trig_pos.origin, 0, 48, 48 ); - navcomputer_use_trig setcursorhint( "HINT_NOICON" ); - navcomputer_use_trig sethintstring( &"ZOMBIE_NAVCARD_USE" ); - navcomputer_use_trig triggerignoreteam(); - while ( 1 ) - { - navcomputer_use_trig waittill( "trigger", who ); - if ( isplayer( who ) && is_player_valid( who ) ) - { - if ( does_player_have_correct_navcard( who ) ) - { - navcomputer_use_trig sethintstring( &"ZOMBIE_NAVCARD_SUCCESS" ); - who playsound( "zmb_sq_navcard_success" ); - update_sidequest_stats( "navcard_applied_zm_transit" ); - return; - break; - } - else - { - navcomputer_use_trig sethintstring( &"ZOMBIE_NAVCARD_FAIL" ); - wait 1; - navcomputer_use_trig sethintstring( &"ZOMBIE_NAVCARD_USE" ); - } - } - } -} - -avogadro_stunned_vo() -{ - level endon( "maxis_stage_b" ); - while ( 1 ) - { - level waittill( "stun_avogadro", avogadro ); - if ( avogadro maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr" ) ) - { - level thread maxissay( "vox_maxi_avogadro_stab_0", ( 12072, 8496, -704 ) ); - return; - } - } -} - -sq_refresh_player_navcard_hud() -{ - if ( !isDefined( level.navcards ) ) - { - return; - } - players = get_players(); - _a1759 = players; - _k1759 = getFirstArrayKey( _a1759 ); - while ( isDefined( _k1759 ) ) - { - player = _a1759[ _k1759 ]; - navcard_bits = 0; - i = 0; - while ( i < level.navcards.size ) - { - hasit = player maps/mp/zombies/_zm_stats::get_global_stat( level.navcards[ i ] ); - if ( isDefined( player.navcard_grabbed ) && player.navcard_grabbed == level.navcards[ i ] ) - { - hasit = 1; - } - if ( hasit ) - { - navcard_bits += 1 << i; - } - i++; - } - wait_network_frame(); - player setclientfield( "navcard_held", 0 ); - if ( navcard_bits > 0 ) - { - wait_network_frame(); - player setclientfield( "navcard_held", navcard_bits ); - } - _k1759 = getNextArrayKey( _a1759, _k1759 ); - } -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_standard_farm.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_standard_farm.gsc deleted file mode 100644 index f507f8c..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_standard_farm.gsc +++ /dev/null @@ -1,88 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_race_utility; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -precache() //checked matches cerberus output -{ -} - -farm_treasure_chest_init() //checked matches cerberus output -{ - chest1 = getstruct( "farm_chest", "script_noteworthy" ); - level.chests = []; - level.chests[ level.chests.size ] = chest1; - maps/mp/zombies/_zm_magicbox::treasure_chest_init( "farm_chest" ); -} - -main() //checked matches cerberus output -{ - maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "farm" ); - init_standard_farm(); - farm_treasure_chest_init(); - level.enemy_location_override_func = ::enemy_location_override; - flag_wait( "initial_blackscreen_passed" ); - level thread maps/mp/zombies/_zm_zonemgr::enable_zone( "zone_far_ext" ); - level thread maps/mp/zombies/_zm_zonemgr::enable_zone( "zone_brn" ); - maps/mp/zombies/_zm_game_module::turn_power_on_and_open_doors(); - flag_wait( "start_zombie_round_logic" ); - wait 1; - level notify( "revive_on" ); - wait_network_frame(); - level notify( "doubletap_on" ); - wait_network_frame(); - level notify( "juggernog_on" ); - wait_network_frame(); - level notify( "sleight_on" ); - wait_network_frame(); -} - -init_standard_farm() //checked partially changed to match cerberus output see info.md No. 1, No. 2 -{ - maps/mp/zombies/_zm_game_module::set_current_game_module( level.game_module_standard_index ); - ents = getentarray(); - foreach ( ent in ents ) - { - if ( isDefined( ent.script_flag ) && ent.script_flag == "OnFarm_enter" ) - { - ent delete(); - } - else - { - if ( isDefined( ent.script_parameters ) ) - { - tokens = strtok( ent.script_parameters, " " ); - remove = 0; - for ( i = 0; i < tokens.size; i++ ) - { - if ( tokens[ i ] == "standard_remove" ) - { - remove = 1; - } - } - if ( remove ) - { - ent delete(); - } - } - } - } -} - -enemy_location_override( zombie, enemy ) //checked matches cerberus output -{ - location = enemy.origin; - if ( is_true( self.reroute ) ) - { - if ( isDefined( self.reroute_origin ) ) - { - location = self.reroute_origin; - } - } - return location; -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_standard_station.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_standard_station.gsc deleted file mode 100644 index 59d39d3..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_standard_station.gsc +++ /dev/null @@ -1,57 +0,0 @@ -#include maps/mp/zombies/_zm_perks; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_race_utility; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -precache() //checked matches cerberus output -{ - precachemodel( "zm_collision_transit_busdepot_survival" ); -} - -station_treasure_chest_init() //checked matches cerberus output -{ - chest1 = getstruct( "depot_chest", "script_noteworthy" ); - level.chests = []; - level.chests[ level.chests.size ] = chest1; - maps/mp/zombies/_zm_magicbox::treasure_chest_init( "depot_chest" ); -} - -main() //checked changed to match cerberus output -{ - maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "station" ); - station_treasure_chest_init(); - level.enemy_location_override_func = ::enemy_location_override; - collision = spawn( "script_model", ( -6896, 4744, 0 ), 1 ); - collision setmodel( "zm_collision_transit_busdepot_survival" ); - collision disconnectpaths(); - flag_wait( "initial_blackscreen_passed" ); - level thread maps/mp/zombies/_zm_perks::perk_machine_removal( "specialty_quickrevive", "p_glo_tools_chest_tall" ); - flag_set( "power_on" ); - level setclientfield( "zombie_power_on", 1 ); - zombie_doors = getentarray( "zombie_door", "targetname" ); - foreach ( door in zombie_doors ) - { - if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "local_electric_door" ) - { - door trigger_off(); - } - } -} - -enemy_location_override( zombie, enemy ) //checked matches cerberus output -{ - location = enemy.origin; - if ( is_true( self.reroute ) ) - { - if ( isDefined( self.reroute_origin ) ) - { - location = self.reroute_origin; - } - } - return location; -} - - diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_standard_town.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_standard_town.gsc deleted file mode 100644 index 33083bf..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_standard_town.gsc +++ /dev/null @@ -1,65 +0,0 @@ -//checked includes matche cerberus output -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zm_transit_utility; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_race_utility; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -precache() //checked matches cerberus output -{ - precachemodel( "zm_collision_transit_town_survival" ); -} - -town_treasure_chest_init() //checked matches cerberus output -{ - chest1 = getstruct( "town_chest", "script_noteworthy" ); - chest2 = getstruct( "town_chest_2", "script_noteworthy" ); - level.chests = []; - level.chests[ level.chests.size ] = chest1; - level.chests[ level.chests.size ] = chest2; - maps/mp/zombies/_zm_magicbox::treasure_chest_init( "town_chest" ); -} - -main() //checked matches cerberus output -{ - maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "town" ); - town_treasure_chest_init(); - level.enemy_location_override_func = ::enemy_location_override; - collision = spawn( "script_model", ( 1363, 471, 0 ), 1 ); - collision setmodel( "zm_collision_transit_town_survival" ); - collision disconnectpaths(); - flag_wait( "initial_blackscreen_passed" ); - level thread maps/mp/zm_transit_utility::solo_tombstone_removal(); - maps/mp/zombies/_zm_game_module::turn_power_on_and_open_doors(); - flag_wait( "start_zombie_round_logic" ); - wait 1; - level notify( "revive_on" ); - wait_network_frame(); - level notify( "doubletap_on" ); - wait_network_frame(); - level notify( "marathon_on" ); - wait_network_frame(); - level notify( "juggernog_on" ); - wait_network_frame(); - level notify( "sleight_on" ); - wait_network_frame(); - level notify( "tombstone_on" ); - wait_network_frame(); - level notify( "Pack_A_Punch_on" ); -} - -enemy_location_override( zombie, enemy ) //checked matches cerberus output -{ - location = enemy.origin; - if ( is_true( self.reroute ) ) - { - if ( isDefined( self.reroute_origin ) ) - { - location = self.reroute_origin; - } - } - return location; -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_utility.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_utility.gsc deleted file mode 100644 index 375f18f..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zm_transit_utility.gsc +++ /dev/null @@ -1,279 +0,0 @@ -#include maps/mp/_compass; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -playercanafford( player, cost ) -{ - if ( !player usebuttonpressed() ) - { - return 0; - } - if ( player in_revive_trigger() ) - { - return 0; - } - if ( isDefined( cost ) ) - { - if ( player.score < cost ) - { - return 0; - } - player maps/mp/zombies/_zm_score::minus_to_player_score( cost ); - } - return 1; -} - -setinvisibletoall() -{ - players = get_players(); - playerindex = 0; - while ( playerindex < players.size ) - { - self setinvisibletoplayer( players[ playerindex ] ); - playerindex++; - } -} - -spawnandlinkfxtotag( effect, ent, tag ) -{ - fxent = spawn( "script_model", ent gettagorigin( tag ) ); - fxent setmodel( "tag_origin" ); - fxent linkto( ent, tag ); - wait_network_frame(); - playfxontag( effect, fxent, "tag_origin" ); - return fxent; -} - -spawnandlinkfxtooffset( effect, ent, offsetorigin, offsetangles ) -{ - fxent = spawn( "script_model", ( 0, 0, 0 ) ); - fxent setmodel( "tag_origin" ); - fxent linkto( ent, "", offsetorigin, offsetangles ); - wait_network_frame(); - playfxontag( effect, fxent, "tag_origin" ); - return fxent; -} - -custom_weapon_wall_prices() -{ - if ( !isDefined( level.zombie_include_weapons ) ) - { - return; - } - weapon_spawns = []; - weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); - i = 0; - while ( i < weapon_spawns.size ) - { - if ( !isDefined( level.zombie_weapons[ weapon_spawns[ i ].zombie_weapon_upgrade ] ) ) - { - i++; - continue; - } - else - { - if ( isDefined( weapon_spawns[ i ].script_int ) ) - { - cost = weapon_spawns[ i ].script_int; - level.zombie_weapons[ weapon_spawns[ i ].zombie_weapon_upgrade ].cost = cost; - } - } - i++; - } -} - -pause_zombie_spawning() -{ - if ( !isDefined( level.spawnpausecount ) ) - { - level.spawnpausecount = 0; - } - level.spawnpausecount++; - flag_clear( "spawn_zombies" ); -} - -try_resume_zombie_spawning() -{ - if ( !isDefined( level.spawnpausecount ) ) - { - level.spawnpausecount = 0; - } - level.spawnpausecount--; - - if ( level.spawnpausecount <= 0 ) - { - level.spawnpausecount = 0; - flag_set( "spawn_zombies" ); - } -} - -automatonspeak( category, type, response, force_variant, override ) -{ - if ( isDefined( level.automaton ) && !is_true( level.automaton.disabled_by_emp ) ) - { - if ( type != "leaving" && type != "leaving_warning" ) - { - level.automaton notify( "want_to_be_speaking" ); - level.automaton waittill( "startspeaking" ); - } - level.automaton maps/mp/zombies/_zm_audio::create_and_play_dialog( category, type, response, force_variant, override ); - } -} - -is_thedouche() -{ - return self.characterindex == 0; -} - -is_theconspiracytheorist() -{ - return self.characterindex == 1; -} - -is_thefarmersdaughter() -{ - return self.characterindex == 2; -} - -is_theelectricalengineer() -{ - return self.characterindex == 3; -} - -get_random_encounter_match( location ) -{ - match_pool = []; - return random( match_pool ); -} - -transit_breakable_glass_init() -{ - glass = getentarray( "transit_glass", "targetname" ); - if ( level.splitscreen && getDvarInt( "splitscreen_playerCount" ) > 2 ) - { - array_delete( glass ); - return; - } - array_thread( glass, ::transit_breakable_glass ); -} - -transit_breakable_glass() -{ - level endon( "intermission" ); - self.health = 99999; - self setcandamage( 1 ); - self.damage_state = 0; - while ( 1 ) - { - self waittill( "damage", amount, attacker, direction, point, dmg_type ); - if ( isplayer( attacker ) ) - { - if ( self.damage_state == 0 ) - { - self glass_gets_destroyed(); - self.damage_state = 1; - self playsound( "fly_glass_break" ); - } - } - } -} - -glass_gets_destroyed() -{ - if ( isDefined( level._effect[ "glass_impact" ] ) ) - { - playfx( level._effect[ "glass_impact" ], self.origin, anglesToForward( self.angles ) ); - } - wait 0.1; - if ( isDefined( self.model ) && self.damage_state == 0 ) - { - self setmodel( self.model + "_broken" ); - self.damage_state = 1; - return; - } - else - { - self delete(); - return; - } -} - -solo_tombstone_removal() -{ - if ( getnumexpectedplayers() > 1 ) - { - return; - } - level notify( "tombstone_removed" ); - level thread maps/mp/zombies/_zm_perks::perk_machine_removal( "specialty_scavenger" ); -} - -sparking_power_lines() -{ - lines = getentarray( "power_line_sparking", "targetname" ); -} - -disconnect_door_zones( zone_a, zone_b, flag_name ) -{ - level endon( "intermission" ); - level endon( "end_game" ); - while ( 1 ) - { - flag_wait( flag_name ); - azone = level.zones[ zone_a ].adjacent_zones[ zone_b ]; - azone maps/mp/zombies/_zm_zonemgr::door_close_disconnect( flag_name ); - } -} - -enable_morse_code() -{ - level clientnotify( "mc1" ); -} - -disable_morse_code() -{ - level clientnotify( "mc0" ); -} - -transit_pathnode_spawning() -{ - precachemodel( "collision_wall_128x128x10_standard" ); - precachemodel( "collision_wall_256x256x10_standard" ); - precachemodel( "collision_clip_64x64x256" ); - minimap_upperl = spawn( "script_origin", ( -12248, 9496, 552 ) ); - minimap_upperl.targetname = "minimap_corner"; - minimap_lowerr = spawn( "script_origin", ( 14472, -8496, -776 ) ); - minimap_lowerr.targetname = "minimap_corner"; - maps/mp/_compass::setupminimap( "compass_map_zm_transit" ); - flag_wait( "start_zombie_round_logic" ); - collision1 = spawn( "script_model", ( 2273, -126, 143 ) ); - collision1 setmodel( "collision_wall_128x128x10_standard" ); - collision1.angles = ( 0, 0, 0 ); - collision1 ghost(); - collision2 = spawn( "script_model", ( 2096, -126, 143 ) ); - collision2 setmodel( "collision_wall_128x128x10_standard" ); - collision2.angles = ( 0, 0, 0 ); - collision2 ghost(); - collision3 = spawn( "script_model", ( 1959, -126, 143 ) ); - collision3 setmodel( "collision_wall_128x128x10_standard" ); - collision3.angles = ( 0, 0, 0 ); - collision3 ghost(); - collision4 = spawn( "script_model", ( 12239, 8509, -688 ) ); - collision4 setmodel( "collision_wall_128x128x10_standard" ); - collision4.angles = ( 0, 0, 0 ); - collision4 ghost(); - collision5 = spawn( "script_model", ( 8320, -6679, 362 ) ); - collision5 setmodel( "collision_wall_256x256x10_standard" ); - collision5.angles = vectorScale( ( 0, 0, 0 ), 300 ); - collision5 ghost(); - collision5 = spawn( "script_model", ( 10068, 7272, -67 ) ); - collision5 setmodel( "collision_clip_64x64x256" ); - collision5.angles = ( 0, 0, 0 ); - collision5 ghost(); -} - diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_ai_avogadro.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_ai_avogadro.gsc deleted file mode 100644 index 20be029..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_ai_avogadro.gsc +++ /dev/null @@ -1,1600 +0,0 @@ -#include maps/mp/zombies/_zm_weap_riotshield; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/animscripts/zm_shared; -#include maps/mp/zm_transit_bus; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm; -#include maps/mp/_visionset_mgr; -#include maps/mp/zombies/_zm_ai_avogadro; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -precache() -{ - precacheshellshock( "electrocution" ); -/# - precachemodel( "fx_axis_createfx" ); -#/ - precache_fx(); -} - -precache_fx() -{ - level._effect[ "avogadro_bolt" ] = loadfx( "maps/zombie/fx_zombie_tesla_bolt_secondary" ); - level._effect[ "avogadro_ascend" ] = loadfx( "maps/zombie/fx_zmb_avog_ascend" ); - level._effect[ "avogadro_ascend_aerial" ] = loadfx( "maps/zombie/fx_zmb_avog_ascend_aerial" ); - level._effect[ "avogadro_descend" ] = loadfx( "maps/zombie/fx_zmb_avog_descend" ); - level._effect[ "avogadro_phase_trail" ] = loadfx( "maps/zombie/fx_zmb_avog_phase_trail" ); - level._effect[ "avogadro_phasing" ] = loadfx( "maps/zombie/fx_zmb_avog_phasing" ); - level._effect[ "avogadro_health_full" ] = loadfx( "maps/zombie/fx_zmb_avog_health_full" ); - level._effect[ "avogadro_health_half" ] = loadfx( "maps/zombie/fx_zmb_avog_health_half" ); - level._effect[ "avogadro_health_low" ] = loadfx( "maps/zombie/fx_zmb_avog_health_low" ); -} - -init() -{ - init_phase_anims(); - init_regions(); - level.avogadro_spawners = getentarray( "avogadro_zombie_spawner", "script_noteworthy" ); - array_thread( level.avogadro_spawners, ::add_spawn_function, ::avogadro_prespawn ); - level.zombie_ai_limit_avogadro = 1; - if ( !isDefined( level.vsmgr_prio_overlay_zm_ai_avogadro_electrified ) ) - { - level.vsmgr_prio_overlay_zm_ai_avogadro_electrified = 75; - } - maps/mp/_visionset_mgr::vsmgr_register_info( "overlay", "zm_ai_avogadro_electrified", 1, level.vsmgr_prio_overlay_zm_ai_avogadro_electrified, 15, 1, ::maps/mp/_visionset_mgr::vsmgr_duration_lerp_thread_per_player, 0 ); - maps/mp/zombies/_zm::register_player_damage_callback( ::avogadro_player_damage_callback ); - level thread avogadro_spawning_logic(); -} - -init_phase_anims() -{ - level.avogadro_phase = []; - level.avogadro_phase[ 0 ] = spawnstruct(); - level.avogadro_phase[ 0 ].animstate = "zm_teleport_forward"; - level.avogadro_phase[ 1 ] = spawnstruct(); - level.avogadro_phase[ 1 ].animstate = "zm_teleport_left"; - level.avogadro_phase[ 2 ] = spawnstruct(); - level.avogadro_phase[ 2 ].animstate = "zm_teleport_right"; - level.avogadro_phase[ 3 ] = spawnstruct(); - level.avogadro_phase[ 3 ].animstate = "zm_teleport_back"; -} - -init_regions() -{ - level.transit_region = []; - level.transit_region[ "bus" ] = spawnstruct(); - level.transit_region[ "diner" ] = spawnstruct(); - level.transit_region[ "farm" ] = spawnstruct(); - level.transit_region[ "cornfield" ] = spawnstruct(); - level.transit_region[ "power" ] = spawnstruct(); - level.transit_region[ "town" ] = spawnstruct(); - level.transit_region[ "bus" ].zones = []; - level.transit_region[ "bus" ].zones[ 0 ] = "zone_pri"; - level.transit_region[ "bus" ].zones[ 1 ] = "zone_station_ext"; - level.transit_region[ "bus" ].exploder = 200; - level.transit_region[ "bus" ].sndorigin = ( -6909, 4531, 396 ); - level.transit_region[ "diner" ].zones = []; - level.transit_region[ "diner" ].zones[ 0 ] = "zone_roadside_west"; - level.transit_region[ "diner" ].zones[ 1 ] = "zone_din"; - level.transit_region[ "diner" ].zones[ 2 ] = "zone_roadside_east"; - level.transit_region[ "diner" ].zones[ 3 ] = "zone_gas"; - level.transit_region[ "diner" ].zones[ 4 ] = "zone_gar"; - level.transit_region[ "diner" ].exploder = 220; - level.transit_region[ "diner" ].sndorigin = ( -5239, -6842, 457 ); - level.transit_region[ "farm" ].zones = []; - level.transit_region[ "farm" ].zones[ 0 ] = "zone_far"; - level.transit_region[ "farm" ].zones[ 1 ] = "zone_far_ext"; - level.transit_region[ "farm" ].zones[ 2 ] = "zone_brn"; - level.transit_region[ "farm" ].zones[ 3 ] = "zone_farm_house"; - level.transit_region[ "farm" ].exploder = 230; - level.transit_region[ "farm" ].sndorigin = ( 7954, -5799, 582 ); - level.transit_region[ "cornfield" ].zones = []; - level.transit_region[ "cornfield" ].zones[ 0 ] = "zone_amb_cornfield"; - level.transit_region[ "cornfield" ].zones[ 1 ] = "zone_cornfield_prototype"; - level.transit_region[ "cornfield" ].exploder = 240; - level.transit_region[ "cornfield" ].sndorigin = ( 10278, -662, 324 ); - level.transit_region[ "power" ].zones = []; - level.transit_region[ "power" ].zones[ 0 ] = "zone_prr"; - level.transit_region[ "power" ].zones[ 1 ] = "zone_pow"; - level.transit_region[ "power" ].zones[ 2 ] = "zone_pcr"; - level.transit_region[ "power" ].zones[ 3 ] = "zone_pow_warehouse"; - level.transit_region[ "power" ].exploder = 250; - level.transit_region[ "power" ].sndorigin = ( 10391, 7604, -70 ); - level.transit_region[ "town" ].zones = []; - level.transit_region[ "town" ].zones[ 0 ] = "zone_tow"; - level.transit_region[ "town" ].zones[ 1 ] = "zone_bar"; - level.transit_region[ "town" ].zones[ 2 ] = "zone_ban"; - level.transit_region[ "town" ].zones[ 3 ] = "zone_ban_vault"; - level.transit_region[ "town" ].zones[ 4 ] = "zone_town_north"; - level.transit_region[ "town" ].zones[ 5 ] = "zone_town_west"; - level.transit_region[ "town" ].zones[ 6 ] = "zone_town_south"; - level.transit_region[ "town" ].zones[ 7 ] = "zone_town_barber"; - level.transit_region[ "town" ].zones[ 8 ] = "zone_town_church"; - level.transit_region[ "town" ].zones[ 9 ] = "zone_town_east"; - level.transit_region[ "town" ].exploder = 260; - level.transit_region[ "town" ].sndorigin = ( 1460, -416, 318 ); -} - -avogadro_prespawn() -{ - self endon( "death" ); - level endon( "intermission" ); - level.avogadro = self; - self.has_legs = 1; - self.no_gib = 1; - self.is_avogadro = 1; - self.ignore_enemy_count = 1; - recalc_zombie_array(); - self.ignore_nuke = 1; - self.ignore_lava_damage = 1; - self.ignore_devgui_death = 1; - self.ignore_electric_trap = 1; - self.ignore_game_over_death = 1; - self.ignore_enemyoverride = 1; - self.ignore_solo_last_stand = 1; - self.ignore_riotshield = 1; - self.allowpain = 0; - self.core_model = getent( "core_model", "targetname" ); - if ( isDefined( self.core_model ) ) - { - if ( !isDefined( self.core_model.angles ) ) - { - self.core_model.angles = ( 0, 0, 1 ); - } - self forceteleport( self.core_model.origin, self.core_model.angles ); - } - self set_zombie_run_cycle( "walk" ); - self animmode( "normal" ); - self orientmode( "face enemy" ); - self maps/mp/zombies/_zm_spawner::zombie_setup_attack_properties(); - self maps/mp/zombies/_zm_spawner::zombie_complete_emerging_into_playable_area(); - self setfreecameralockonallowed( 0 ); - self.zmb_vocals_attack = "zmb_vocals_zombie_attack"; - self.meleedamage = 5; - self.actor_damage_func = ::avogadro_damage_func; - self.non_attacker_func = ::avogadro_non_attacker; - self.anchor = spawn( "script_origin", self.origin ); - self.anchor.angles = self.angles; - self.phase_time = 0; - self.audio_loop_ent = spawn( "script_origin", self.origin ); - self.audio_loop_ent linkto( self, "tag_origin" ); - self.hit_by_melee = 0; - self.damage_absorbed = 0; - self.ignoreall = 1; - self.zombie_init_done = 1; - self notify( "zombie_init_done" ); - self.stun_zombie = ::stun_avogadro; - self.jetgun_fling_func = ::fling_avogadro; - self.jetgun_drag_func = ::drag_avogadro; - self.depot_lava_pit = ::busplowkillzombie; - self.busplowkillzombie = ::busplowkillzombie; - self.region_timer = getTime() + 500; - self.shield = 1; -} - -avogadro_spawning_logic() -{ - level endon( "intermission" ); - if ( level.intermission ) - { - return; - } -/# - if ( getDvarInt( "zombie_cheat" ) == 2 || getDvarInt( "zombie_cheat" ) >= 4 ) - { - return; -#/ - } - spawner = getent( "avogadro_zombie_spawner", "script_noteworthy" ); - if ( !isDefined( spawner ) ) - { -/# - assertmsg( "No avogadro spawner in the map." ); -#/ - return; - } - ai = spawn_zombie( spawner, "avogadro" ); - if ( !isDefined( ai ) ) - { -/# - assertmsg( "Avogadro: failed spawn" ); -#/ - return; - } - ai waittill( "zombie_init_done" ); - core_mover = getent( "core_mover", "targetname" ); - ai linkto( core_mover, "tag_origin" ); - ai.state = "chamber"; - ai setanimstatefromasd( "zm_chamber_idle" ); - ai thread avogadro_think(); - ai thread avogadro_bus_watcher(); -} - -avogadro_think() -{ - while ( 1 ) - { - while ( isDefined( self.in_pain ) && self.in_pain ) - { - wait 0,1; - } - switch( self.state ) - { - case "chamber": - wait_idle(); - break; - case "wait_for_player": - player_look(); - break; - case "idle": - chase_player(); - break; - case "chasing": - chase_update(); - break; - case "chasing_bus": - chase_bus_update(); - break; - case "cloud": - cloud_update(); - break; - case "stay_attached": - attach_update(); - break; - } - wait 0,1; - } -} - -avogadro_bus_watcher() -{ - plow_trigger = getent( "trigger_plow", "targetname" ); - while ( 1 ) - { - while ( self.state == "chasing_bus" || self.state == "attacking_bus" ) - { - wait 0,1; - } - if ( isDefined( level.the_bus ) && isDefined( level.the_bus.ismoving ) && level.the_bus.ismoving && level.the_bus getspeedmph() > 5 ) - { - if ( self istouching( plow_trigger ) ) - { - phase_node = getnode( "back_door_node", "targetname" ); - self avogadro_teleport( phase_node.origin, phase_node.angles, 1 ); - } - } - wait 0,1; - } -} - -busplowkillzombie() -{ - if ( isDefined( self.is_teleport ) && self.is_teleport ) - { - return; - } - phase_node = getnode( "back_door_node", "targetname" ); - self avogadro_teleport( phase_node.origin, phase_node.angles, 1 ); -} - -phase_from_bus() -{ - self ghost(); - self notsolid(); - wait 3; - self show(); - self solid(); - self notify( "phase_from_bus_done" ); -} - -wait_idle() -{ -/# - if ( getDvarInt( #"CFA4158E" ) ) - { - self.state = "wait_for_player"; - self unlink(); -#/ - } - if ( flag( "power_on" ) ) - { - self.state = "wait_for_player"; - self unlink(); - } -} - -player_look() -{ - players = get_players(); - _a427 = players; - _k427 = getFirstArrayKey( _a427 ); - while ( isDefined( _k427 ) ) - { - player = _a427[ _k427 ]; - vec_enemy = self.origin - player.origin; - vec_facing = anglesToForward( player.angles ); - norm_facing = vectornormalize( vec_facing ); - norm_enemy = vectornormalize( vec_enemy ); - dot = vectordot( norm_facing, norm_enemy ); - if ( dot > 0,707 ) - { -/# - avogadro_print( "player spotted" ); -#/ - self avogadro_exit( "chamber" ); - } - _k427 = getNextArrayKey( _a427, _k427 ); - } -/# - if ( getDvarInt( #"CFA4158E" ) ) - { - avogadro_print( "player_look ignored" ); - self avogadro_exit( "chamber" ); -#/ - } -} - -chase_player() -{ - self.state = "chasing"; - self set_zombie_run_cycle( "run" ); - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); -} - -chase_update() -{ - if ( self check_bus_attack() ) - { - self chase_bus(); - } - else if ( self check_phase() ) - { - self do_phase(); - } - else - { - if ( self check_range_attack() ) - { - self range_attack(); - } - } - if ( self region_empty() ) - { - self avogadro_exit( "exit_idle" ); - } -} - -check_bus_attack() -{ - if ( isDefined( self.favoriteenemy ) && isDefined( self.favoriteenemy.isonbus ) && self.favoriteenemy.isonbus ) - { - return 1; - } - return 0; -} - -chase_bus() -{ - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - self.chase_bus_entry = undefined; - dist_curr = 0; - _a515 = level.the_bus.openings; - _k515 = getFirstArrayKey( _a515 ); - while ( isDefined( _k515 ) ) - { - opening = _a515[ _k515 ]; - if ( !isDefined( self.chase_bus_entry ) ) - { - self.chase_bus_entry = opening; - dist_curr = distance2dsquared( self.origin, level.the_bus gettagorigin( self.chase_bus_entry.tagname ) ); - } - else - { - dist_next = distance2dsquared( self.origin, level.the_bus gettagorigin( opening.tagname ) ); - if ( dist_next < dist_curr ) - { - dist_curr = dist_next; - self.chase_bus_entry = opening; - } - } - _k515 = getNextArrayKey( _a515, _k515 ); - } - self set_zombie_run_cycle( "sprint" ); - self.state = "chasing_bus"; -} - -chase_bus_update() -{ - bus = level.the_bus; - if ( isDefined( bus ) && bus.numplayerson == 0 ) - { - self chase_player(); - return; - } - tag_pos = level.the_bus gettagorigin( self.chase_bus_entry.tagname ); - self setgoalpos( tag_pos ); - if ( bus getspeedmph() > 5 ) - { - self.phase_state = level.avogadro_phase[ 0 ].animstate; - self.phase_substate = 0; - self setfreecameralockonallowed( 0 ); - self.ignoreall = 1; - self thread phase_failsafe(); - self animcustom( ::play_phase_anim ); -/# - avogadro_print( "long phase after bus" ); -#/ - self waittill( "phase_anim_done" ); - self.ignoreall = 0; - self setfreecameralockonallowed( 1 ); - } - dist_sq = distancesquared( self.origin, tag_pos ); - if ( dist_sq < 14400 ) - { - self bus_attack(); - } -} - -bus_attack() -{ - self endon( "stunned" ); - self endon( "stop_bus_attack" ); - bus_attack_struct = []; - bus_attack_struct[ 0 ] = spawnstruct(); - bus_attack_struct[ 0 ].window_tag = "window_left_rear_jnt"; - bus_attack_struct[ 0 ].substate = "bus_attack_back"; - bus_attack_struct[ 1 ] = spawnstruct(); - bus_attack_struct[ 1 ].window_tag = "window_right_front_jnt"; - bus_attack_struct[ 1 ].substate = "bus_attack_front"; - bus_attack_struct[ 2 ] = spawnstruct(); - bus_attack_struct[ 2 ].window_tag = "window_left_2_jnt"; - bus_attack_struct[ 2 ].substate = "bus_attack_left"; - bus_attack_struct[ 3 ] = spawnstruct(); - bus_attack_struct[ 3 ].window_tag = "window_right_3_jnt"; - bus_attack_struct[ 3 ].substate = "bus_attack_right"; - random_attack_struct = array_randomize( bus_attack_struct ); - self.state = "attacking_bus"; - self.bus_attack_time = 0; - self.bus_disabled = 0; - self.ignoreall = 1; - i = 0; - while ( i < 4 ) - { - while ( isDefined( self.in_pain ) && self.in_pain ) - { - wait 0,1; - } - attack_struct = random_attack_struct[ i ]; -/# - window = getDvarInt( #"5628DC9F" ); - if ( window >= 0 ) - { - attack_struct = bus_attack_struct[ window ]; -#/ - } - self bus_disable( attack_struct ); - if ( self.bus_disabled ) - { - break; - } - else - { - i++; - } - } - if ( !self.bus_disabled ) - { - self.shield = 1; - self unlink(); - self avogadro_exit( "bus" ); - } - else - { - level.the_bus thread maps/mp/zm_transit_bus::bus_disabled_by_emp( 30 ); - self attach_to_bus(); - } -} - -attach_to_bus() -{ - self endon( "death" ); - self endon( "stop_health" ); - if ( level.the_bus.numaliveplayersridingbus > 0 ) - { -/# - avogadro_print( "stay_attached " + self.bus_attack_struct.substate ); -#/ - origin = level.the_bus gettagorigin( self.bus_attack_struct.window_tag ); - angles = level.the_bus gettagangles( self.bus_attack_struct.window_tag ); - self show(); - self.shield = 0; - self animscripted( origin, angles, "zm_bus_attack", self.bus_attack_struct.substate ); - self.bus_shock_time = 0; - self.state = "stay_attached"; - return; - } - self detach_from_bus(); -} - -attach_update() -{ - if ( level.the_bus.numaliveplayersridingbus > 0 ) - { - wait 0,1; - self.bus_shock_time += 0,1; - while ( self.bus_shock_time >= 2 ) - { - self.bus_shock_time = 0; - players = get_players(); - _a702 = players; - _k702 = getFirstArrayKey( _a702 ); - while ( isDefined( _k702 ) ) - { - player = _a702[ _k702 ]; - if ( isDefined( player.isonbus ) && player.isonbus ) - { - maps/mp/_visionset_mgr::vsmgr_activate( "overlay", "zm_ai_avogadro_electrified", player, 1, 1 ); - player shellshock( "electrocution", 1 ); - player notify( "avogadro_damage_taken" ); - } - _k702 = getNextArrayKey( _a702, _k702 ); - } - } - return; - } - self detach_from_bus(); -} - -detach_from_bus() -{ - self unlink(); -/# - avogadro_print( "unlinking from bus window" ); -#/ - bus_forward = vectornormalize( anglesToForward( level.the_bus.angles ) ); - unlink_pos = level.the_bus.origin + vectorScale( bus_forward, -144 ); - unlink_pos = groundpos_ignore_water_new( unlink_pos + vectorScale( ( 0, 0, 1 ), 60 ) ); - self.shield = 1; - self avogadro_teleport( unlink_pos, self.angles, 1 ); - self.state = "idle"; - self.ignoreall = 0; -} - -bus_disable_show( time ) -{ - self endon( "death" ); - wait time; - self.shield = 0; - self show(); -} - -bus_disable( bus_attack_struct ) -{ - self endon( "melee_pain" ); - self.bus_attack_struct = bus_attack_struct; - origin = level.the_bus gettagorigin( bus_attack_struct.window_tag ); - angles = level.the_bus gettagangles( bus_attack_struct.window_tag ); - self avogadro_teleport( origin, angles, 0,5, bus_attack_struct.window_tag ); - self linkto( level.the_bus, bus_attack_struct.window_tag ); - bus_disable_show( 0,1 ); - origin = level.the_bus gettagorigin( bus_attack_struct.window_tag ); - angles = level.the_bus gettagangles( bus_attack_struct.window_tag ); - self animscripted( origin, angles, "zm_bus_attack", bus_attack_struct.substate ); -/# - avogadro_print( "bus_disable " + bus_attack_struct.substate ); -#/ - success = 0; - self.mod_melee = 0; - self.bus_shock_time = 0; - level thread maps/mp/zm_transit_bus::do_player_bus_zombie_vox( "avogadro_onbus", 45 ); - while ( 1 ) - { - wait 0,1; - self.bus_attack_time += 0,1; - if ( self.bus_attack_time >= 20 ) - { - self.bus_disabled = 1; - level thread maps/mp/zm_transit_bus::do_player_bus_zombie_vox( "avogadro_stopbus", 45 ); - return; - } - else - { - self.bus_shock_time += 0,1; - while ( self.bus_shock_time >= 2 ) - { - self.bus_shock_time = 0; - players = get_players(); - _a796 = players; - _k796 = getFirstArrayKey( _a796 ); - while ( isDefined( _k796 ) ) - { - player = _a796[ _k796 ]; - if ( isDefined( player.isonbus ) && player.isonbus ) - { - maps/mp/_visionset_mgr::vsmgr_activate( "overlay", "zm_ai_avogadro_electrified", player, 1, 1 ); - player shellshock( "electrocution", 1 ); - player notify( "avogadro_damage_taken" ); - player thread do_player_general_vox( "general", "avogadro_attack", 30, 45 ); - } - _k796 = getNextArrayKey( _a796, _k796 ); - } - } - if ( level.the_bus.numaliveplayersridingbus == 0 ) - { - self detach_from_bus(); - self notify( "stop_bus_attack" ); - } - } - } -} - -avogadro_exit( from ) -{ - self.state = "exiting"; - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - self setfreecameralockonallowed( 0 ); - self.audio_loop_ent stoploopsound( 0,5 ); - self notify( "stop_health" ); - if ( isDefined( self.health_fx ) ) - { - self.health_fx unlink(); - self.health_fx delete(); - } - if ( isDefined( from ) ) - { - if ( from == "bus" ) - { - self playsound( "zmb_avogadro_death_short" ); - playfx( level._effect[ "avogadro_ascend_aerial" ], self.origin ); - self animscripted( self.origin, self.angles, "zm_bus_win" ); - maps/mp/animscripts/zm_shared::donotetracks( "bus_win_anim" ); - } - else if ( from == "chamber" ) - { - self playsound( "zmb_avogadro_death_short" ); - playfx( level._effect[ "avogadro_ascend" ], self.origin ); - self animscripted( self.origin, self.angles, "zm_chamber_out" ); - wait 0,4; - self ghost(); - stop_exploder( 500 ); - } - else - { - self playsound( "zmb_avogadro_death" ); - playfx( level._effect[ "avogadro_ascend" ], self.origin ); - self animscripted( self.origin, self.angles, "zm_exit" ); - maps/mp/animscripts/zm_shared::donotetracks( "exit_anim" ); - } - } - else - { - self playsound( "zmb_avogadro_death" ); - playfx( level._effect[ "avogadro_ascend" ], self.origin ); - self animscripted( self.origin, self.angles, "zm_exit" ); - maps/mp/animscripts/zm_shared::donotetracks( "exit_anim" ); - } - if ( !isDefined( from ) || from != "chamber" ) - { - level thread do_avogadro_flee_vo( self ); - } - self ghost(); - self.hit_by_melee = 0; - self.anchor.origin = self.origin; - self.anchor.angles = self.angles; - self linkto( self.anchor ); - if ( isDefined( from ) && from == "exit_idle" ) - { - self.return_round = level.round_number + 1; - } - else - { - self.return_round = level.round_number + randomintrange( 2, 5 ); - } - level.next_avogadro_round = self.return_round; - self.state = "cloud"; - self thread cloud_update_fx(); -} - -cloud_update_fx() -{ - self endon( "cloud_fx_end" ); - level endon( "end_game" ); - region = []; - region[ 0 ] = "bus"; - region[ 1 ] = "diner"; - region[ 2 ] = "farm"; - region[ 3 ] = "cornfield"; - region[ 4 ] = "power"; - region[ 5 ] = "town"; - self.current_region = undefined; - if ( !isDefined( self.sndent ) ) - { - self.sndent = spawn( "script_origin", ( 0, 0, 1 ) ); - self.sndent playloopsound( "zmb_avogadro_thunder_overhead" ); - } - cloud_time = getTime(); - vo_counter = 0; - while ( 1 ) - { - if ( getTime() >= cloud_time ) - { - if ( isDefined( self.current_region ) ) - { - exploder_num = level.transit_region[ self.current_region ].exploder; - stop_exploder( exploder_num ); - } - rand_region = array_randomize( region ); - region_str = rand_region[ 0 ]; - if ( !isDefined( self.current_region ) ) - { - region_str = region[ 4 ]; - } -/# - idx = getDvarInt( #"FD251E42" ); - if ( idx >= 0 ) - { - region_str = region[ idx ]; - } - avogadro_print( "clouds in region " + region_str ); -#/ - self.current_region = region_str; - exploder_num = level.transit_region[ region_str ].exploder; - exploder( exploder_num ); - self.sndent moveto( level.transit_region[ region_str ].sndorigin, 3 ); - cloud_time = getTime() + 30000; - } - if ( vo_counter > 50 ) - { - player = self get_player_in_region(); - if ( isDefined( player ) ) - { - if ( isDefined( self._in_cloud ) && self._in_cloud ) - { - player thread do_player_general_vox( "general", "avogadro_above", 90, 10 ); - } - else - { - player thread do_player_general_vox( "general", "avogadro_arrive", 60, 40 ); - } - } - else - { - level thread avogadro_storm_vox(); - } - vo_counter = 0; - } - wait 0,1; - vo_counter++; - } -} - -cloud_update() -{ - self endon( "melee_pain" ); - return_from_cloud = 0; - self._in_cloud = 1; - if ( level.round_number >= self.return_round ) - { -/# - avogadro_print( "return from round" ); -#/ - return_from_cloud = 1; - self._in_cloud = 0; - } - while ( isDefined( return_from_cloud ) && return_from_cloud ) - { -/# - avogadro_print( "time to come back in " + self.current_region ); -#/ - self notify( "cloud_fx_end" ); - new_origin = cloud_find_spawn(); - if ( isDefined( self.sndent ) ) - { - self.sndent delete(); - self.sndent = undefined; - } - if ( !isDefined( new_origin ) ) - { - new_origin = maps/mp/zombies/_zm::check_for_valid_spawn_near_team(); - } - while ( isDefined( new_origin ) ) - { - self thread avogadro_update_health(); - playsoundatposition( "zmb_avogadro_spawn_3d", new_origin ); - self.audio_loop_ent playloopsound( "zmb_avogadro_loop", 0,5 ); - self unlink(); - ground_pos = groundpos_ignore_water_new( new_origin + vectorScale( ( 0, 0, 1 ), 60 ) ); - playfx( level._effect[ "avogadro_descend" ], ground_pos ); - self animscripted( ground_pos, self.anchor.angles, "zm_arrival" ); - maps/mp/animscripts/zm_shared::donotetracks( "arrival_anim" ); - self setfreecameralockonallowed( 1 ); - time_to_leave = getTime() + 30000; - while ( 1 ) - { - if ( getTime() > time_to_leave ) - { -/# - avogadro_print( "enemy never showed - leaving" ); -#/ - self avogadro_exit( "exit_idle" ); - return; - } - if ( self enemy_in_region() ) - { - self.ignoreall = 0; - self.state = "idle"; - return; - } - wait 0,1; - } - } - } -} - -enemy_in_region() -{ - zones = level.transit_region[ self.current_region ].zones; - _a1071 = zones; - _k1071 = getFirstArrayKey( _a1071 ); - while ( isDefined( _k1071 ) ) - { - zone = _a1071[ _k1071 ]; - if ( level.zones[ zone ].is_occupied ) - { - self.ignoreall = 0; - self.state = "idle"; - return 1; - } - _k1071 = getNextArrayKey( _a1071, _k1071 ); - } - return 0; -} - -get_player_in_region() -{ - players = get_players(); - players = array_randomize( players ); - zones = level.transit_region[ self.current_region ].zones; - _a1091 = zones; - _k1091 = getFirstArrayKey( _a1091 ); - while ( isDefined( _k1091 ) ) - { - zone = _a1091[ _k1091 ]; - while ( level.zones[ zone ].is_occupied ) - { - _a1095 = players; - _k1095 = getFirstArrayKey( _a1095 ); - while ( isDefined( _k1095 ) ) - { - player = _a1095[ _k1095 ]; - if ( player maps/mp/zombies/_zm_zonemgr::is_player_in_zone( zone ) ) - { - return player; - } - _k1095 = getNextArrayKey( _a1095, _k1095 ); - } - } - _k1091 = getNextArrayKey( _a1091, _k1091 ); - } - return undefined; -} - -cloud_find_spawn() -{ - zones = level.transit_region[ self.current_region ].zones; - use_points = []; - _a1116 = zones; - _k1116 = getFirstArrayKey( _a1116 ); - while ( isDefined( _k1116 ) ) - { - zone = _a1116[ _k1116 ]; - if ( zone == "zone_pri" ) - { - if ( !level.zones[ zone ].is_occupied ) - { - if ( !flag( "OnPriDoorYar2" ) ) - { -/# - avogadro_print( "zone_pri not occupied and door is closed" ); -#/ - } - } - } - else - { - while ( level.zones[ zone ].is_enabled && level.zones[ zone ].is_spawning_allowed ) - { - locations = level.zones[ zone ].avogadro_locations; - _a1135 = locations; - _k1135 = getFirstArrayKey( _a1135 ); - while ( isDefined( _k1135 ) ) - { - loc = _a1135[ _k1135 ]; - use_points[ use_points.size ] = loc; - _k1135 = getNextArrayKey( _a1135, _k1135 ); - } - } - } - _k1116 = getNextArrayKey( _a1116, _k1116 ); - } - if ( use_points.size > 0 ) - { - use_points = array_randomize( use_points ); - return use_points[ 0 ].origin; - } - return undefined; -} - -avogadro_reveal( show_time ) -{ - self endon( "death" ); - self show(); - wait show_time; - self ghost(); -} - -avogadro_teleport( dest_pos, dest_angles, lerp_time, tag_override ) -{ - self.is_teleport = 1; - self.phase_fx = spawn( "script_model", self.origin ); - self.phase_fx setmodel( "tag_origin" ); - self.phase_fx linkto( self ); - wait 0,1; - playfxontag( level._effect[ "avogadro_phase_trail" ], self.phase_fx, "tag_origin" ); - playfx( level._effect[ "avogadro_phasing" ], self.origin ); - self avogadro_reveal( 0,1 ); - self playsound( "zmb_avogadro_warp_out" ); - self.anchor.origin = self.origin; - self.anchor.angles = self.angles; - self linkto( self.anchor ); - self.anchor moveto( dest_pos, lerp_time ); - self.anchor waittill( "movedone" ); - self.anchor.origin = dest_pos; - self.anchor.angles = dest_angles; - self unlink(); - wait 0,1; - if ( isDefined( tag_override ) ) - { - dest_pos = level.the_bus gettagorigin( tag_override ); - dest_angles = level.the_bus gettagangles( tag_override ); - } - self forceteleport( dest_pos, dest_angles ); - playfx( level._effect[ "avogadro_phasing" ], self.origin ); - if ( isDefined( self.phase_fx ) ) - { - self.phase_fx delete(); - } - self avogadro_reveal( 0,1 ); - self playsound( "zmb_avogadro_warp_in" ); - self.is_teleport = 0; -} - -check_range_attack() -{ -/# - if ( getDvarInt( #"A40002E9" ) ) - { - return 0; -#/ - } - enemy = self.favoriteenemy; - if ( isDefined( enemy ) ) - { - vec_enemy = enemy.origin - self.origin; - dist_sq = lengthsquared( vec_enemy ); - if ( dist_sq > 14400 && dist_sq < 360000 ) - { - vec_facing = anglesToForward( self.angles ); - norm_facing = vectornormalize( vec_facing ); - norm_enemy = vectornormalize( vec_enemy ); - dot = vectordot( norm_facing, norm_enemy ); - if ( dot > 0,99 ) - { - enemy_eye_pos = enemy geteye(); - eye_pos = self geteye(); - passed = bullettracepassed( eye_pos, enemy_eye_pos, 0, undefined ); - if ( passed ) - { - return 1; - } - } - } - } - return 0; -} - -range_attack() -{ - self endon( "melee_pain" ); - enemy = self.favoriteenemy; - if ( isDefined( enemy ) ) - { - self thread shoot_bolt_wait( "ranged_attack", enemy ); - self show(); - self animscripted( self.origin, self.angles, "zm_ranged_attack_in" ); - maps/mp/animscripts/zm_shared::donotetracks( "ranged_attack" ); - self animscripted( self.origin, self.angles, "zm_ranged_attack_loop" ); - maps/mp/animscripts/zm_shared::donotetracks( "ranged_attack" ); - self animscripted( self.origin, self.angles, "zm_ranged_attack_out" ); - maps/mp/animscripts/zm_shared::donotetracks( "ranged_attack" ); - self.shield = 1; - self thread avogadro_update_health(); - self ghost(); - } -} - -shoot_bolt_wait( animname, enemy ) -{ - self endon( "melee_pain" ); - self waittillmatch( animname ); - return "fire"; - self.shield = 0; - self notify( "stop_health" ); - if ( isDefined( self.health_fx ) ) - { - self.health_fx unlink(); - self.health_fx delete(); - } - self thread shoot_bolt( enemy ); -} - -shoot_bolt( enemy ) -{ - source_pos = self gettagorigin( "tag_weapon_right" ); - target_pos = enemy geteye(); - bolt = spawn( "script_model", source_pos ); - bolt setmodel( "tag_origin" ); - wait 0,1; - self playsound( "zmb_avogadro_attack" ); - fx = playfxontag( level._effect[ "avogadro_bolt" ], bolt, "tag_origin" ); - bolt moveto( target_pos, 0,2 ); - bolt waittill( "movedone" ); - bolt.owner = self; - bolt check_bolt_impact( enemy ); - bolt delete(); -} - -check_bolt_impact( enemy ) -{ - if ( is_player_valid( enemy ) ) - { - enemy_eye_pos = enemy geteye(); - dist_sq = distancesquared( self.origin, enemy_eye_pos ); - if ( dist_sq < 4096 ) - { - passed = bullettracepassed( self.origin, enemy_eye_pos, 0, undefined ); - if ( passed ) - { - maps/mp/_visionset_mgr::vsmgr_activate( "overlay", "zm_ai_avogadro_electrified", enemy, 1, 1 ); - enemy shellshock( "electrocution", 1 ); - enemy playsoundtoplayer( "zmb_avogadro_electrified", enemy ); - enemy dodamage( 60, enemy.origin ); - enemy notify( "avogadro_damage_taken" ); - } - } - } -} - -region_empty() -{ - if ( getTime() >= self.region_timer ) - { - player = self get_player_in_region(); - if ( isDefined( player ) ) - { - self.region_timer = getTime() + 500; - return 0; - } -/# - debug_dist_sq = 0; -#/ - players = getplayers(); - _a1371 = players; - _k1371 = getFirstArrayKey( _a1371 ); - while ( isDefined( _k1371 ) ) - { - player = _a1371[ _k1371 ]; - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - } - else - { - dist_sq = distancesquared( self.origin, player.origin ); -/# - debug_dist_sq = distance( self.origin, player.origin ); -#/ - if ( dist_sq < 9000000 ) - { - self.region_timer = getTime() + 500; - return 0; - } - } - _k1371 = getNextArrayKey( _a1371, _k1371 ); - } - self.region_timer = getTime() + 500; -/# - avogadro_print( "no one left to kill " + debug_dist_sq ); -#/ - return 1; - } - return 0; -} - -get_random_phase_state() -{ - index = randomint( 4 ); - state = level.avogadro_phase[ index ].animstate; - return state; -} - -check_phase() -{ -/# - if ( getDvarInt( #"CFB33742" ) ) - { - return 0; -#/ - } - if ( getTime() > self.phase_time ) - { - if ( isDefined( self.is_traversing ) && self.is_traversing ) - { - self.phase_time = getTime() + 2000; - return 0; - } - self.phase_state = get_random_phase_state(); - self.phase_substate = randomint( 3 ); - anim_id = self getanimfromasd( self.phase_state, self.phase_substate ); - if ( self maymovefrompointtopoint( self.origin, getanimendpos( anim_id ) ) ) - { - return 1; - } - } - return 0; -} - -do_phase() -{ - self endon( "death" ); - self.state = "phasing"; - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - self setfreecameralockonallowed( 0 ); - self.ignoreall = 1; - self thread phase_failsafe(); - self animcustom( ::play_phase_anim ); - self waittill( "phase_anim_done" ); - self.ignoreall = 0; - self setfreecameralockonallowed( 1 ); - self.state = "idle"; -} - -play_phase_anim() -{ - self endon( "death" ); - self endon( "phase_anim_done" ); - self.phase_fx = spawn( "script_model", self.origin ); - self.phase_fx setmodel( "tag_origin" ); - self.phase_fx linkto( self ); - wait 0,05; - playfxontag( level._effect[ "avogadro_phase_trail" ], self.phase_fx, "tag_origin" ); - playfx( level._effect[ "avogadro_phasing" ], self.origin ); - self avogadro_reveal( 0,1 ); - self playsound( "zmb_avogadro_warp_out" ); - self orientmode( "face enemy" ); - self setanimstatefromasd( self.phase_state, self.phase_substate ); - maps/mp/animscripts/zm_shared::donotetracks( "teleport_anim" ); - self.phase_fx delete(); - playfx( level._effect[ "avogadro_phasing" ], self.origin ); - self avogadro_reveal( 0,1 ); - self orientmode( "face default" ); - self playsound( "zmb_avogadro_warp_in" ); - self.phase_time = getTime() + 2000; - self notify( "phase_anim_done" ); -} - -phase_failsafe() -{ - self endon( "phase_anim_done" ); - wait 1; - if ( self.state == "phasing" || self.state == "chasing_bus" ) - { -/# - avogadro_print( "phasing too long, failsafe kicking in" ); -#/ - if ( isDefined( self.phase_fx ) ) - { - self.phase_fx delete(); - } - playfx( level._effect[ "avogadro_phasing" ], self.origin ); - self avogadro_reveal( 0,1 ); - self orientmode( "face default" ); - self playsound( "zmb_avogadro_warp_in" ); - self.phase_time = getTime() + 2000; - self notify( "phase_anim_done" ); - } -} - -avogadro_player_damage_callback( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) -{ - if ( isDefined( einflictor ) && isDefined( einflictor.is_avogadro ) && einflictor.is_avogadro ) - { - if ( smeansofdeath == "MOD_MELEE" ) - { - maps/mp/_visionset_mgr::vsmgr_activate( "overlay", "zm_ai_avogadro_electrified", self, 0,25, 1 ); - self shellshock( "electrocution", 0,25 ); - self notify( "avogadro_damage_taken" ); - self thread do_player_general_vox( "general", "avogadro_attack", 15, 45 ); - } - } - return -1; -} - -avogadro_pain_watcher() -{ - self notify( "stop_pain_watcher" ); - self endon( "stop_pain_watcher" ); - wait 4; - if ( isDefined( self.in_pain ) && self.in_pain ) - { - self.in_pain = 0; -/# - avogadro_print( "in_pain for too long" ); -#/ - } -} - -avogadro_pain( einflictor ) -{ - self endon( "melee_pain" ); - self.in_pain = 1; - self playsound( "zmb_avogadro_pain" ); - self thread avogadro_pain_watcher(); - substate = 0; - origin = self.origin; - angles = self.angles; - animstate = "zm_pain"; - if ( self.state == "attacking_bus" || self.state == "stay_attached" ) - { - tag = self.bus_attack_struct.window_tag; - if ( tag == "window_left_rear_jnt" ) - { - animstate = "zm_bus_back_pain"; - } - else - { - animstate = "zm_bus_pain"; - } - origin = level.the_bus gettagorigin( tag ); - angles = level.the_bus gettagangles( tag ); - } - if ( self.hit_by_melee < 4 ) - { - self thread avogadro_update_health(); - self animscripted( origin, angles, animstate, substate ); - maps/mp/animscripts/zm_shared::donotetracks( "pain_anim" ); - self ghost(); - self.phase_time = getTime() - 1; - if ( self.state == "stay_attached" ) - { - self attach_to_bus(); - } - } - else self notify( "stop_bus_attack" ); - level notify( "avogadro_defeated" ); - if ( isDefined( einflictor ) && isplayer( einflictor ) ) - { - einflictor maps/mp/zombies/_zm_stats::increment_client_stat( "avogadro_defeated", 0 ); - einflictor maps/mp/zombies/_zm_stats::increment_player_stat( "avogadro_defeated" ); - } - if ( flag( "power_on" ) && flag( "switches_on" ) && self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr" ) ) - { -/# - avogadro_print( "come back on power" ); -#/ - self show(); - self.in_pain = 0; -/# - avogadro_print( "pain cleared from zone_prr" ); -#/ - self notify( "stop_pain_watcher" ); - self avogadro_teleport( self.core_model.origin, self.core_model.angles, 1 ); - core_mover = getent( "core_mover", "targetname" ); - self linkto( core_mover, "tag_origin" ); - while ( flag( "power_on" ) ) - { - wait 0,1; - } - self show(); - self.state = "chamber"; - self setanimstatefromasd( "zm_chamber_idle" ); - } - else - { -/# - if ( !flag( "power_on" ) ) - { - avogadro_print( "no power" ); - } - if ( !flag( "switches_on" ) ) - { - avogadro_print( "no switches" ); - } - if ( !self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr" ) ) - { - avogadro_print( "no zone" ); -#/ - } - self show(); - self avogadro_exit(); - } - self.in_pain = 0; -/# - avogadro_print( "pain cleared normal" ); -#/ - self notify( "stop_pain_watcher" ); -} - -avogadro_update_health() -{ - self endon( "death" ); - self notify( "stop_health" ); - self endon( "stop_health" ); - while ( 1 ) - { - self avogadro_update_health_fx(); - wait 0,4; - } -} - -avogadro_update_health_fx() -{ - self endon( "death" ); - if ( !isDefined( self.health_fx ) ) - { - tag_origin = self gettagorigin( "J_SpineUpper" ); - tag_angles = self gettagangles( "J_SpineUpper" ); - self.health_fx = spawn( "script_model", tag_origin ); - self.health_fx.angles = tag_angles; - self.health_fx setmodel( "tag_origin" ); - self.health_fx linkto( self ); - wait 0,1; - } - if ( self.hit_by_melee == 0 ) - { - playfxontag( level._effect[ "avogadro_health_full" ], self.health_fx, "tag_origin" ); - } - else if ( self.hit_by_melee <= 2 ) - { - playfxontag( level._effect[ "avogadro_health_half" ], self.health_fx, "tag_origin" ); - } - else - { - playfxontag( level._effect[ "avogadro_health_low" ], self.health_fx, "tag_origin" ); - } -} - -avogadro_damage_func( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) -{ - if ( self.state == "exiting" || self.state == "phasing" ) - { - return 0; - } - if ( smeansofdeath == "MOD_MELEE" ) - { - if ( isplayer( einflictor ) ) - { - if ( isDefined( einflictor.avogadro_melee_time ) ) - { - } - if ( self.shield ) - { - einflictor.avogadro_melee_time = getTime(); - maps/mp/_visionset_mgr::vsmgr_activate( "overlay", "zm_ai_avogadro_electrified", einflictor, 0,25, 1 ); - einflictor shellshock( "electrocution", 0,25 ); - einflictor notify( "avogadro_damage_taken" ); - } - if ( sweapon == "riotshield_zm" ) - { - shield_damage = level.zombie_vars[ "riotshield_fling_damage_shield" ]; - einflictor maps/mp/zombies/_zm_weap_riotshield::player_damage_shield( shield_damage, 0 ); - } - } - if ( !self.shield ) - { - self.shield = 1; - self notify( "melee_pain" ); - if ( sweapon == "tazer_knuckles_zm" ) - { - self.hit_by_melee += 2; - } - else - { - self.hit_by_melee++; - } - self thread avogadro_pain( einflictor ); -/# - avogadro_print( "hit_by_melee: " + self.hit_by_melee ); -#/ - if ( isplayer( einflictor ) ) - { - einflictor thread do_player_general_vox( "general", "avogadro_wound", 30, 35 ); - level notify( "avogadro_stabbed" ); - } - } - else - { -/# - avogadro_print( "shield up, no damage" ); -#/ - } - } - else - { - self update_damage_absorbed( idamage ); - } - return 0; -} - -update_damage_absorbed( damage ) -{ - if ( self.hit_by_melee > 0 ) - { - self.damage_absorbed += damage; - if ( self.damage_absorbed >= 1000 ) - { - self.damage_absorbed = 0; - self.hit_by_melee--; - -/# - avogadro_print( "regen - hit_by_melee: " + self.hit_by_melee ); -#/ - } - } -} - -avogadro_non_attacker( damage, weapon ) -{ - if ( weapon == "zombie_bullet_crouch_zm" ) - { - self update_damage_absorbed( damage ); - } - return 0; -} - -stun_avogadro() -{ - ignore_emp_states = []; - ignore_emp_states[ 0 ] = "phasing"; - ignore_emp_states[ 1 ] = "chamber"; - ignore_emp_states[ 2 ] = "wait_for_player"; - ignore_emp_states[ 3 ] = "exiting"; - ignore_emp_states[ 4 ] = "cloud"; - _a1854 = ignore_emp_states; - _k1854 = getFirstArrayKey( _a1854 ); - while ( isDefined( _k1854 ) ) - { - state = _a1854[ _k1854 ]; - if ( self.state == state ) - { - return; - } - _k1854 = getNextArrayKey( _a1854, _k1854 ); - } - if ( self.hit_by_melee < 4 ) - { -/# - avogadro_print( "stunned during " + self.state ); -#/ - level notify( "stun_avogadro" ); - self notify( "stunned" ); - self notify( "melee_pain" ); - self.hit_by_melee += 4; - self thread avogadro_pain(); - } -} - -fling_avogadro( player ) -{ -} - -drag_avogadro( vdir ) -{ -} - -avogadro_debug_axis() -{ -/# - self endon( "death" ); - while ( 1 ) - { - if ( !isDefined( self.debug_axis ) ) - { - self.debug_axis = spawn( "script_model", self.origin ); - self.debug_axis setmodel( "fx_axis_createfx" ); - } - else - { - self.debug_axis.origin = self.origin; - self.debug_axis.angles = self.angles; - } - wait 0,1; -#/ - } -} - -avogadro_print( str ) -{ -/# - if ( getDvarInt( #"92514885" ) ) - { - iprintln( "avogadro: " + str ); - if ( isDefined( self.debug_msg ) ) - { - self.debug_msg[ self.debug_msg.size ] = str; - if ( self.debug_msg.size > 64 ) - { - self.debug_msg = []; - } - return; - } - else - { - self.debug_msg = []; - self.debug_msg[ self.debug_msg.size ] = str; -#/ - } - } -} - -do_avogadro_flee_vo( avogadro ) -{ - players = get_players(); - _a1944 = players; - _k1944 = getFirstArrayKey( _a1944 ); - while ( isDefined( _k1944 ) ) - { - player = _a1944[ _k1944 ]; - if ( distancesquared( player.origin, avogadro.origin ) < 250000 ) - { - player thread do_player_general_vox( "general", "avogadro_flee", 30, 45 ); - return; - } - _k1944 = getNextArrayKey( _a1944, _k1944 ); - } -} - -avogadro_storm_vox() -{ - if ( isDefined( level.checking_avogadro_storm_vox ) && level.checking_avogadro_storm_vox ) - { - return; - } - level.checking_avogadro_storm_vox = 1; - players = get_players(); - players = array_randomize( players ); - _a1963 = players; - _k1963 = getFirstArrayKey( _a1963 ); - while ( isDefined( _k1963 ) ) - { - player = _a1963[ _k1963 ]; - if ( !player maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_tbu" ) && !player maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_amb_tunnel" ) && !player maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_prr" ) || player maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_pcr" ) && player maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_pow_warehouse" ) ) - { - } - else - { - player thread do_player_general_vox( "general", "avogadro_storm", 120, 2 ); - } - _k1963 = getNextArrayKey( _a1963, _k1963 ); - } - wait 5; - level.checking_avogadro_storm_vox = 0; -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_ai_screecher.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_ai_screecher.gsc deleted file mode 100644 index b02b30b..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_ai_screecher.gsc +++ /dev/null @@ -1,1262 +0,0 @@ -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/animscripts/zm_shared; -#include maps/mp/_visionset_mgr; -#include maps/mp/zombies/_zm_ai_screecher; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -precache() -{ - precacheshader( "fullscreen_claw_left" ); - precacheshader( "fullscreen_claw_right" ); - precacheshader( "fullscreen_claw_bottom" ); - precachemodel( "p6_zm_screecher_hole" ); - precachemodel( "fx_axis_createfx" ); - precachestring( &"ZOMBIE_SCREECHER_ATTACH_FIRST" ); - level._effect[ "screecher_spawn_a" ] = loadfx( "maps/zombie/fx_zmb_screech_hand_dirt_burst" ); - level._effect[ "screecher_spawn_b" ] = loadfx( "maps/zombie/fx_zmb_screech_body_dirt_billowing" ); - level._effect[ "screecher_spawn_c" ] = loadfx( "maps/zombie/fx_zmb_screech_body_dirt_falling" ); - level._effect[ "screecher_hole" ] = loadfx( "maps/zombie/fx_zmb_screecher_hole" ); - level._effect[ "screecher_vortex" ] = loadfx( "maps/zombie/fx_zmb_screecher_vortex" ); - level._effect[ "screecher_death" ] = loadfx( "maps/zombie/fx_zmb_screech_death_ash" ); -} - -init() -{ - level.screecher_spawners = getentarray( "screecher_zombie_spawner", "script_noteworthy" ); - array_thread( level.screecher_spawners, ::add_spawn_function, ::screecher_prespawn ); - level.zombie_ai_limit_screecher = 2; - level.zombie_screecher_count = 0; - if ( !isDefined( level.vsmgr_prio_overlay_zm_ai_screecher_blur ) ) - { - level.vsmgr_prio_overlay_zm_ai_screecher_blur = 50; - } - maps/mp/_visionset_mgr::vsmgr_register_info( "overlay", "zm_ai_screecher_blur", 1, level.vsmgr_prio_overlay_zm_ai_screecher_blur, 1, 1, ::maps/mp/_visionset_mgr::vsmgr_timeout_lerp_thread_per_player, 0 ); - level thread screecher_spawning_logic(); -/# - level thread screecher_debug(); -#/ - registerclientfield( "actor", "render_third_person", 1, 1, "int" ); - level.near_miss = 0; -} - -screecher_debug() -{ -/# -#/ -} - -screecher_spawning_logic() -{ - level endon( "intermission" ); - if ( level.intermission ) - { - return; - } -/# - if ( getDvarInt( "zombie_cheat" ) == 2 || getDvarInt( "zombie_cheat" ) >= 4 ) - { - return; -#/ - } - if ( level.screecher_spawners.size < 1 ) - { -/# - assertmsg( "No active spawners in the map. Check to see if the zone is active and if it's pointing to spawners." ); -#/ - return; - } - while ( 1 ) - { - while ( !isDefined( level.zombie_screecher_locations ) || level.zombie_screecher_locations.size <= 0 ) - { - wait 0,1; - } - while ( level.zombie_screecher_count >= level.zombie_ai_limit_screecher ) - { - wait 0,1; - } - while ( getDvarInt( #"B0C0D38F" ) ) - { - wait 0,1; - } - if ( !flag( "spawn_zombies" ) ) - { - flag_wait( "spawn_zombies" ); - } - valid_players_in_screecher_zone = 0; - valid_players = []; - while ( valid_players_in_screecher_zone <= 0 ) - { - players = getplayers(); - valid_players_in_screecher_zone = 0; - p = 0; - while ( p < players.size ) - { - if ( is_player_valid( players[ p ] ) && player_in_screecher_zone( players[ p ] ) && !isDefined( players[ p ].screecher ) ) - { - valid_players_in_screecher_zone++; - valid_players[ valid_players.size ] = players[ p ]; - } - p++; - } - if ( players.size == 1 ) - { - if ( is_player_valid( players[ 0 ] ) && !player_in_screecher_zone( players[ 0 ] ) ) - { - level.spawn_delay = 1; - } - } - wait 0,1; - } - if ( !isDefined( level.zombie_screecher_locations ) || level.zombie_screecher_locations.size <= 0 ) - { - continue; - } - valid_players = array_randomize( valid_players ); - player_left_zone = 0; - while ( isDefined( level.spawn_delay ) && level.spawn_delay ) - { -/# - screecher_print( "delay spawning 5 secs" ); -#/ - spawn_points = get_array_of_closest( valid_players[ 0 ].origin, level.zombie_screecher_locations ); - spawn_point = undefined; - if ( spawn_points.size >= 3 ) - { - spawn_point = spawn_points[ 2 ]; - } - else if ( spawn_points.size >= 2 ) - { - spawn_point = spawn_points[ 1 ]; - } - else - { - if ( spawn_points.size >= 1 ) - { - spawn_point = spawn_points[ 0 ]; - } - } - if ( isDefined( spawn_point ) ) - { - playsoundatposition( "zmb_vocals_screecher_spawn", spawn_point.origin ); - } - delay_time = getTime() + 5000; - now_zone = getent( "screecher_spawn_now", "targetname" ); - while ( getTime() < delay_time ) - { - in_zone = 0; - if ( valid_players[ 0 ] istouching( now_zone ) ) - { -/# - screecher_print( "in now zone" ); -#/ - break; - } - else if ( !is_player_valid( valid_players[ 0 ] ) ) - { - break; - } - else if ( player_in_screecher_zone( valid_players[ 0 ] ) ) - { - in_zone = 1; - } - if ( !in_zone ) - { - player_left_zone = 1; - level.spawn_delay = 1; - break; - } - else - { - wait 0,1; - } - } - } - if ( isDefined( player_left_zone ) && player_left_zone ) - { - continue; - } - level.spawn_delay = 0; - spawn_points = get_array_of_closest( valid_players[ 0 ].origin, level.zombie_screecher_locations ); - spawn_point = undefined; - while ( !isDefined( spawn_points ) || spawn_points.size == 0 ) - { - wait 0,1; - } - if ( !isDefined( level.last_spawn ) ) - { - level.last_spawn_index = 0; - level.last_spawn = []; - level.last_spawn[ level.last_spawn_index ] = spawn_points[ 0 ]; - level.last_spawn_index = 1; - spawn_point = spawn_points[ 0 ]; - } - else _a250 = spawn_points; - _k250 = getFirstArrayKey( _a250 ); - while ( isDefined( _k250 ) ) - { - point = _a250[ _k250 ]; - if ( point == level.last_spawn[ 0 ] ) - { - } - else if ( isDefined( level.last_spawn[ 1 ] ) && point == level.last_spawn[ 1 ] ) - { - } - else - { - spawn_point = point; - level.last_spawn[ level.last_spawn_index ] = spawn_point; - level.last_spawn_index++; - if ( level.last_spawn_index > 1 ) - { - level.last_spawn_index = 0; - } - break; - } - _k250 = getNextArrayKey( _a250, _k250 ); - } - if ( !isDefined( spawn_point ) ) - { - spawn_point = spawn_points[ 0 ]; - } - if ( isDefined( level.screecher_spawners ) ) - { - spawner = random( level.screecher_spawners ); - ai = spawn_zombie( spawner, spawner.targetname, spawn_point ); - } - if ( isDefined( ai ) ) - { - ai.spawn_point = spawn_point; - level.zombie_screecher_count++; -/# - screecher_print( "screecher total " + level.zombie_screecher_count ); -#/ - } - wait level.zombie_vars[ "zombie_spawn_delay" ]; - wait 0,1; - } -} - -player_in_screecher_zone( player ) -{ - if ( isDefined( level.is_player_in_screecher_zone ) ) - { - infog = [[ level.is_player_in_screecher_zone ]]( player ); - return infog; - } - return 1; -} - -screecher_should_runaway( player ) -{ - players = get_players(); - if ( players.size == 1 ) - { - if ( level.near_miss == 1 ) - { - level.near_miss = 2; -/# - screecher_print( "runaway from near_miss " + level.near_miss ); -#/ - return 1; - } - } - if ( isDefined( level.screecher_should_runaway ) ) - { - return self [[ level.screecher_should_runaway ]]( player ); - } - return 0; -} - -screecher_get_closest_valid_player( origin, ignore_player ) -{ - valid_player_found = 0; - players = get_players(); - if ( isDefined( level._zombie_using_humangun ) && level._zombie_using_humangun ) - { - players = arraycombine( players, level._zombie_human_array, 0, 0 ); - } - while ( isDefined( ignore_player ) ) - { - i = 0; - while ( i < ignore_player.size ) - { - arrayremovevalue( players, ignore_player[ i ] ); - i++; - } - } - while ( !valid_player_found ) - { - if ( isDefined( level.calc_closest_player_using_paths ) && level.calc_closest_player_using_paths ) - { - player = get_closest_player_using_paths( origin, players ); - } - else - { - player = getclosest( origin, players ); - } - if ( !isDefined( player ) ) - { - return undefined; - } - if ( isDefined( level._zombie_using_humangun ) && level._zombie_using_humangun && isai( player ) ) - { - return player; - } - if ( isDefined( player.screecher ) ) - { - screecher_claimed = player.screecher != self; - } - if ( players.size == 1 && screecher_claimed ) - { - return undefined; - } - while ( is_player_valid( player, 1 ) || !player_in_screecher_zone( player ) && screecher_claimed ) - { - arrayremovevalue( players, player ); - } - return player; - } -} - -zombie_pathing_home() -{ - self endon( "death" ); - self endon( "zombie_acquire_enemy" ); - level endon( "intermission" ); - self setgoalpos( self.startinglocation ); - self waittill( "goal" ); - playfx( level._effect[ "screecher_spawn_b" ], self.origin, ( 0, 0, 1 ) ); - self.no_powerups = 1; - self setfreecameralockonallowed( 0 ); - self animscripted( self.origin, self.angles, "zm_burrow" ); - self playsound( "zmb_screecher_dig" ); - maps/mp/animscripts/zm_shared::donotetracks( "burrow_anim" ); - self delete(); -} - -screecher_find_flesh() -{ - self endon( "death" ); - level endon( "intermission" ); - self endon( "stop_find_flesh" ); - if ( level.intermission ) - { - return; - } - self.helitarget = 1; - self.ignoreme = 0; - self.nododgemove = 1; - self.ignore_player = []; - self zombie_history( "find flesh -> start" ); - self.goalradius = 32; - while ( 1 ) - { - self.favoriteenemy = screecher_get_closest_valid_player( self.origin ); - if ( isDefined( self.favoriteenemy ) ) - { - self thread zombie_pathing(); - } - else - { - self thread screecher_runaway(); - } - self.zombie_path_timer = getTime() + ( randomfloatrange( 1, 3 ) * 1000 ); - while ( getTime() < self.zombie_path_timer ) - { - wait 0,1; - } - self notify( "path_timer_done" ); - self zombie_history( "find flesh -> bottom of loop" ); - debug_print( "Zombie is re-acquiring enemy, ending breadcrumb search" ); - self notify( "zombie_acquire_enemy" ); - } -} - -screecher_prespawn() -{ - self endon( "death" ); - level endon( "intermission" ); - self.startinglocation = self.origin; - self.animname = "screecher_zombie"; - self.audio_type = "screecher"; - self.has_legs = 1; - self.no_gib = 1; - self.isscreecher = 1; - self.ignore_enemy_count = 1; - recalc_zombie_array(); - self.cant_melee = 1; - if ( isDefined( self.spawn_point ) ) - { - spot = self.spawn_point; - if ( !isDefined( spot.angles ) ) - { - spot.angles = ( 0, 0, 1 ); - } - self forceteleport( spot.origin, spot.angles ); - } - self set_zombie_run_cycle( "super_sprint" ); - self setphysparams( 15, 0, 24 ); - self.actor_damage_func = ::screecher_damage_func; - self.deathfunction = ::screecher_death_func; - self.zombie_init_done = 1; - self notify( "zombie_init_done" ); - self.allowpain = 0; - self animmode( "normal" ); - self orientmode( "face enemy" ); - self.forcemovementscriptstate = 0; - self maps/mp/zombies/_zm_spawner::zombie_setup_attack_properties(); - self maps/mp/zombies/_zm_spawner::zombie_complete_emerging_into_playable_area(); - self setfreecameralockonallowed( 0 ); - self.startinglocation = self.origin; - self playsound( "zmb_vocals_screecher_spawn" ); - self thread play_screecher_fx(); - self thread play_screecher_damaged_yelps(); - self thread screecher_rise(); - self thread screecher_cleanup(); - self thread screecher_distance_tracking(); - self.anchor = spawn( "script_origin", self.origin ); - self.attack_time = 0; - self.attack_delay = 1000; - self.attack_delay_base = 1000; - self.attack_delay_offset = 500; - self.meleedamage = 5; - self.ignore_inert = 1; - self.player_score = 0; - self.screecher_score = 0; - if ( isDefined( level.screecher_init_done ) ) - { - self thread [[ level.screecher_init_done ]](); - } -} - -play_screecher_fx() -{ -/# - if ( isDefined( level.screecher_nofx ) && level.screecher_nofx ) - { - return; -#/ - } - playfx( level._effect[ "screecher_spawn_a" ], self.origin, ( 0, 0, 1 ) ); - playfx( level._effect[ "screecher_spawn_b" ], self.origin, ( 0, 0, 1 ) ); - self waittill( "risen" ); - playfx( level._effect[ "screecher_spawn_c" ], self.origin, ( 0, 0, 1 ) ); -} - -play_screecher_damaged_yelps() -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( "damage", damage, attacker, dir, point, mod ); - if ( isDefined( attacker ) && isplayer( attacker ) ) - { - self playsound( "zmb_vocals_screecher_pain" ); - } - } -} - -play_screecher_breathing_audio() -{ - wait 0,5; - if ( !isDefined( self ) ) - { - return; - } - if ( !isDefined( self.loopsoundent ) ) - { - self.loopsoundent = spawn( "script_origin", self.origin ); - self.loopsoundent linkto( self, "tag_origin" ); - } - self.loopsoundent playloopsound( "zmb_vocals_screecher_breath" ); -} - -screecher_rise() -{ - self endon( "death" ); - self animscripted( self.origin, self.angles, "zm_rise" ); - maps/mp/animscripts/zm_shared::donotetracks( "rise_anim" ); - self notify( "risen" ); - self setfreecameralockonallowed( 1 ); - self.startinglocation = self.origin; - self thread screecher_zombie_think(); - self thread play_screecher_breathing_audio(); -/# -#/ -} - -screecher_zombie_think() -{ - self endon( "death" ); - min_dist = 96; - max_dist = 144; - height_tolerance = 32; - self.state = "chase_init"; - self.isattacking = 0; - self.nextspecial = getTime(); - for ( ;; ) - { - switch( self.state ) - { - case "chase_init": - self screecher_chase(); - break; - case "chase_update": - self screecher_chase_update(); - break; - case "attacking": - self screecher_attacking(); - break; - } - wait 0,1; - } -} - -screecher_chase() -{ - self thread screecher_find_flesh(); - self.state = "chase_update"; -} - -screecher_chase_update() -{ - player = self.favoriteenemy; - if ( isDefined( player ) ) - { - dist = distance2dsquared( self.origin, player.origin ); - if ( dist < 57600 ) - { - self screecher_attack(); - return; - } - if ( self screecher_should_runaway( player ) ) - { - self thread screecher_runaway(); - return; - } - } -} - -screecher_attack() -{ - self endon( "death" ); - player = self.favoriteenemy; - if ( isDefined( player.screecher ) ) - { - return; - } - else - { - player.screecher = self; - } - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - self animmode( "nogravity" ); - self playsound( "zmb_vocals_screecher_jump" ); - if ( isDefined( self.loopsoundent ) ) - { - self.loopsoundent delete(); - self.loopsoundent = undefined; - } - self setanimstatefromasd( "zm_jump_up" ); - maps/mp/animscripts/zm_shared::donotetracks( "jump_up_anim" ); - asd_state = self screecher_fly_to_player( player ); - self setplayercollision( 0 ); - self setclientfield( "render_third_person", 1 ); - self linkto( self.favoriteenemy, "tag_origin" ); - self animscripted( self.favoriteenemy.origin, self.favoriteenemy.angles, asd_state ); - maps/mp/animscripts/zm_shared::donotetracks( "jump_land_success_anim" ); - org = self.favoriteenemy gettagorigin( "j_head" ); - angles = self.favoriteenemy gettagangles( "j_head" ); - self forceteleport( org, angles ); - self linkto( self.favoriteenemy, "j_head" ); - self animscripted( self.origin, self.angles, "zm_headpull" ); - self.linked_ent = self.favoriteenemy; - self.linked_ent setmovespeedscale( 0,5 ); - self thread screecher_melee_button_watcher(); - self screecher_start_attack(); -} - -screecher_fly_to_player( player ) -{ - self endon( "death" ); - self setanimstatefromasd( "zm_jump_loop" ); - self.anchor.origin = self.origin; - self.anchor.angles = self.angles; - self linkto( self.anchor ); - anim_id_back = self getanimfromasd( "zm_jump_land_success_fromback", 0 ); - anim_id_front = self getanimfromasd( "zm_jump_land_success_fromfront", 0 ); - end_time = getTime() + 2500; - dist = undefined; - dist_update = undefined; - while ( end_time > getTime() ) - { - goal_pos_back = getstartorigin( player.origin, player.angles, anim_id_back ); - goal_pos_front = getstartorigin( player.origin, player.angles, anim_id_front ); - dist_back = distancesquared( self.anchor.origin, goal_pos_back ); - dist_front = distancesquared( self.anchor.origin, goal_pos_front ); - goal_pos = goal_pos_back; - goal_ang = getstartangles( player.origin, player.angles, anim_id_back ); - asd_state = "zm_jump_land_success_fromback"; - if ( dist_front < dist_back ) - { - goal_pos = goal_pos_front; - goal_ang = getstartangles( player.origin, player.angles, anim_id_front ); - asd_state = "zm_jump_land_success_fromfront"; - } - facing_vec = goal_pos - self.anchor.origin; - facing_angles = vectorToAngle( facing_vec ); - dist = length( facing_vec ); - if ( !isDefined( dist_update ) ) - { - time = 0,5; - vel = dist / time; - dist_update = vel * 0,1; - } - if ( dist < dist_update ) - { - self.anchor.origin = goal_pos; - self.anchor.angles = goal_ang; - break; - } - else - { - self.anchor.angles = facing_angles; - unit_facing_vec = vectornormalize( facing_vec ); - new_pos = self.anchor.origin + vectorScale( unit_facing_vec, dist_update ); - self.anchor moveto( new_pos, 0,1 ); - wait 0,1; - } - } - return asd_state; -} - -finish_planting_equipment() -{ - while ( self isthrowinggrenade() && is_equipment( self getcurrentweapon() ) ) - { - wait 0,05; - } -} - -screecher_start_attack() -{ - player = self.favoriteenemy; - if ( is_player_valid( player ) ) - { - player playsoundtoplayer( "zmb_screecher_impact", player ); - player finish_planting_equipment(); - player allowprone( 0 ); - player.screecher_weapon = player getcurrentweapon(); - player giveweapon( "screecher_arms_zm" ); - throwing_grenade = 0; - if ( player isthrowinggrenade() ) - { - throwing_grenade = 1; - primaryweapons = player getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - player.screecher_weapon = primaryweapons[ 0 ]; - player forcegrenadethrow(); - player switchtoweaponimmediate( "screecher_arms_zm" ); - } - } - else if ( player.screecher_weapon == "riotshield_zm" ) - { - player switchtoweaponimmediate( "screecher_arms_zm" ); - } - else - { - player switchtoweapon( "screecher_arms_zm" ); - } - player increment_is_drinking(); - wait 0,5; - player clientnotify( "scrStrt" ); - if ( player isthrowinggrenade() && !throwing_grenade ) - { - primaryweapons = player getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - player.screecher_weapon = primaryweapons[ 0 ]; - player forcegrenadethrow(); - player switchtoweaponimmediate( "screecher_arms_zm" ); - } - } - self.state = "attacking"; - self.attack_time = getTime(); - if ( !getDvarInt( #"E7EF8EB7" ) ) - { - player startpoisoning(); - } - self thread screecher_player_down(); - } - else - { - self screecher_detach( player ); - } -} - -screecher_player_down() -{ - self endon( "death" ); - self endon( "runaway" ); - player = self.linked_ent; - player endon( "death" ); - player endon( "disconnect" ); - player waittill( "player_downed" ); - self thread screecher_detach( player ); -} - -screecher_first_seen_hint_think() -{ - if ( !flag( "solo_game" ) ) - { - return; - } - fade_time = 3; - hudelem = self maps/mp/gametypes_zm/_hud_util::createfontstring( "objective", 2 ); - hudelem maps/mp/gametypes_zm/_hud_util::setpoint( "TOP", undefined, 0, 200 ); - hudelem.label = &"ZOMBIE_SCREECHER_ATTACH_FIRST"; - hudelem.sort = 0,5; - hudelem.alpha = 1; - hudelem fadeovertime( fade_time ); - hudelem.alpha = 0; - wait fade_time; - hudelem destroy(); -} - -screecher_attacking() -{ - player = self.favoriteenemy; - if ( !isDefined( player ) ) - { - self thread screecher_detach( player ); - return; - } - if ( isDefined( player.screecher_seen_hint ) && !player.screecher_seen_hint ) - { - player thread screecher_first_seen_hint_think(); - player.screecher_seen_hint = 1; - } - if ( screecher_should_runaway( player ) ) - { - self thread screecher_detach( player ); - player thread do_player_general_vox( "general", "screecher_jumpoff" ); - return; - } - if ( self.attack_time < getTime() ) - { - scratch_score = 5; - players = get_players(); - self.screecher_score += scratch_score; - killed_player = self screecher_check_score(); - if ( player.health > 0 && isDefined( killed_player ) && !killed_player ) - { - self.attack_delay = self.attack_delay_base + randomint( self.attack_delay_offset ); - self.attack_time = getTime() + self.attack_delay; - self thread claw_fx( player, self.attack_delay * 0,001 ); - self playsound( "zmb_vocals_screecher_attack" ); - player playsoundtoplayer( "zmb_screecher_scratch", player ); - player thread do_player_general_vox( "general", "screecher_attack" ); - players = get_players(); - if ( players.size == 1 ) - { - if ( level.near_miss == 0 ) - { - level.near_miss = 1; -/# - screecher_print( "first attack near_miss " + level.near_miss ); -#/ - } - } - } - } -} - -screecher_runaway() -{ - self endon( "death" ); -/# - screecher_print( "runaway" ); -#/ - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - self notify( "runaway" ); - self.state = "runaway"; - self.ignoreall = 1; - self setgoalpos( self.startinglocation ); - self waittill( "goal" ); - playfx( level._effect[ "screecher_spawn_b" ], self.origin, ( 0, 0, 1 ) ); - self.no_powerups = 1; - self setfreecameralockonallowed( 0 ); - self animscripted( self.origin, self.angles, "zm_burrow" ); - self playsound( "zmb_screecher_dig" ); - maps/mp/animscripts/zm_shared::donotetracks( "burrow_anim" ); - self delete(); -} - -screecher_detach( player ) -{ - self endon( "death" ); - self.state = "detached"; - if ( !isDefined( self.linked_ent ) ) - { - return; - } -/# - screecher_print( "detach" ); -#/ - if ( isDefined( player ) ) - { - player clientnotify( "scrEnd" ); - if ( isDefined( player.isonbus ) && !player.isonbus ) - { - player allowprone( 1 ); - } - player takeweapon( "screecher_arms_zm" ); - if ( !getDvarInt( #"E7EF8EB7" ) ) - { - player stoppoisoning(); - } - if ( !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( player.intermission ) && !player.intermission ) - { - player decrement_is_drinking(); - } - if ( isDefined( player.screecher_weapon ) && player.screecher_weapon != "none" && is_player_valid( player ) && !is_equipment_that_blocks_purchase( player.screecher_weapon ) ) - { - player switchtoweapon( player.screecher_weapon ); - } - else - { - if ( flag( "solo_game" ) && player hasperk( "specialty_quickrevive" ) ) - { - } - else - { - if ( !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - primaryweapons = player getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - player switchtoweapon( primaryweapons[ 0 ] ); - } - } - } - } - player.screecher_weapon = undefined; - } - self unlink(); - self setclientfield( "render_third_person", 0 ); - if ( isDefined( self.linked_ent ) ) - { - self.linked_ent.screecher = undefined; - self.linked_ent setmovespeedscale( 1 ); - self.linked_ent = undefined; - } - self.green_light = player.green_light; - self animcustom( ::screecher_jump_down ); - self waittill( "jump_down_done" ); - maps/mp/_visionset_mgr::vsmgr_deactivate( "overlay", "zm_ai_screecher_blur", player ); - self animmode( "normal" ); - self.ignoreall = 1; - self setplayercollision( 1 ); - if ( isDefined( level.screecher_should_burrow ) ) - { - if ( self [[ level.screecher_should_burrow ]]() ) - { -/# - screecher_print( "should burrow" ); -#/ - return; - } - } - self thread screecher_runaway(); -} - -screecher_jump_down() -{ - self endon( "death" ); - self setanimstatefromasd( "zm_headpull_success" ); - wait 0,6; - self notify( "jump_down_done" ); -} - -create_claw_fx_hud( player ) -{ - self.claw_fx = newclienthudelem( player ); - self.claw_fx.horzalign = "fullscreen"; - self.claw_fx.vertalign = "fullscreen"; -} - -choose_claw_fx() -{ - direction = []; - direction[ direction.size ] = "fullscreen_claw_left"; - direction[ direction.size ] = "fullscreen_claw_right"; - direction[ direction.size ] = "fullscreen_claw_bottom"; - direction = array_randomize( direction ); - self.claw_fx setshader( direction[ 0 ], 640, 480 ); - self.claw_fx.alpha = 1; -} - -claw_fx( player, timeout ) -{ - self endon( "death" ); - claw_timeout = 0,25; - if ( !isDefined( self.claw_fx ) ) - { - self create_claw_fx_hud( player ); - } - self choose_claw_fx(); - self.claw_fx fadeovertime( claw_timeout ); - self.claw_fx.alpha = 0; - earthquake( randomfloatrange( 0,4, 0,5 ), claw_timeout, player.origin, 250 ); - maps/mp/_visionset_mgr::vsmgr_activate( "overlay", "zm_ai_screecher_blur", player, 0,25 ); -} - -screecher_cleanup() -{ - self waittill( "death", attacker ); - if ( isDefined( attacker ) && isplayer( attacker ) ) - { - if ( isDefined( self.damagelocation ) && isDefined( self.damagemod ) ) - { - level thread maps/mp/zombies/_zm_audio::player_zombie_kill_vox( self.damagelocation, attacker, self.damagemod, self ); - } - } - if ( isDefined( self.loopsoundent ) ) - { - self.loopsoundent delete(); - self.loopsoundent = undefined; - } - player = self.linked_ent; - if ( isDefined( player ) ) - { - player playsound( "zmb_vocals_screecher_death" ); - player setmovespeedscale( 1 ); - maps/mp/_visionset_mgr::vsmgr_deactivate( "overlay", "zm_ai_screecher_blur", player ); - if ( isDefined( player.screecher_weapon ) ) - { - player clientnotify( "scrEnd" ); - if ( isDefined( player.isonbus ) && !player.isonbus ) - { - player allowprone( 1 ); - } - player takeweapon( "screecher_arms_zm" ); - if ( !getDvarInt( #"E7EF8EB7" ) ) - { - player stoppoisoning(); - } - if ( !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( player.intermission ) && !player.intermission ) - { - player decrement_is_drinking(); - } - if ( player.screecher_weapon != "none" && is_player_valid( player ) ) - { - player switchtoweapon( player.screecher_weapon ); - } - else - { - primaryweapons = player getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - player switchtoweapon( primaryweapons[ 0 ] ); - } - } - player.screecher_weapon = undefined; - } - } - if ( isDefined( self.claw_fx ) ) - { - self.claw_fx destroy(); - } - if ( isDefined( self.anchor ) ) - { - self.anchor delete(); - } - if ( isDefined( level.screecher_cleanup ) ) - { - self [[ level.screecher_cleanup ]](); - } - if ( level.zombie_screecher_count > 0 ) - { - level.zombie_screecher_count--; - -/# - screecher_print( "screecher total " + level.zombie_screecher_count ); -#/ - } -} - -screecher_distance_tracking() -{ - self endon( "death" ); - while ( 1 ) - { - can_delete = 1; - players = get_players(); - _a1304 = players; - _k1304 = getFirstArrayKey( _a1304 ); - while ( isDefined( _k1304 ) ) - { - player = _a1304[ _k1304 ]; - if ( player.sessionstate == "spectator" ) - { - } - else dist_sq = distancesquared( self.origin, player.origin ); - if ( dist_sq >= 4000000 ) - { - } - else - { - can_see = player maps/mp/zombies/_zm_utility::is_player_looking_at( self.origin, 0,9, 0 ); - if ( can_see || dist_sq < 1000000 ) - { - can_delete = 0; - break; - } - } - else - { - _k1304 = getNextArrayKey( _a1304, _k1304 ); - } - } - if ( can_delete ) - { - self notify( "zombie_delete" ); - if ( isDefined( self.anchor ) ) - { - self.anchor delete(); - } - self delete(); - recalc_zombie_array(); - } - wait 0,1; - } -} - -screecher_melee_button_watcher() -{ - self endon( "death" ); - while ( isDefined( self.linked_ent ) ) - { - player = self.linked_ent; - while ( player meleebuttonpressed() && player ismeleeing() ) - { - self screecher_melee_damage( player ); - while ( player meleebuttonpressed() || player ismeleeing() ) - { - wait 0,05; - } - } - wait 0,05; - } -} - -screecher_melee_damage( player ) -{ - one_player = 0; - melee_score = 0; - if ( player hasweapon( "bowie_knife_zm" ) ) - { - if ( one_player ) - { - melee_score = 30; - } - else - { - melee_score = 10; - } - } - else if ( player hasweapon( "tazer_knuckles_zm" ) ) - { - if ( one_player ) - { - melee_score = 30; - } - else - { - melee_score = 15; - } - } - else if ( one_player ) - { - melee_score = 15; - } - else - { - melee_score = 6; - } - extra_score = 0; - if ( self.screecher_score > 0 && !one_player ) - { - if ( melee_score > self.screecher_score ) - { - extra_score = melee_score - self.screecher_score; - self.screecher_score = 0; - } - else - { - self.screecher_score -= melee_score; - } - } - if ( self.screecher_score <= 0 || one_player ) - { - self.player_score += melee_score; - if ( extra_score > 0 ) - { - self.player_score += extra_score; - } - } - self playsound( "zmb_vocals_screecher_pain" ); - if ( level.zombie_vars[ player.team ][ "zombie_insta_kill" ] ) - { - self.player_score = 30; - } - else - { - player thread do_player_general_vox( "general", "screecher_cut" ); - } -/# - if ( getDvarInt( #"6A65F83E" ) ) - { - self.player_score = 30; -#/ - } - self screecher_check_score(); -} - -screecher_damage_func( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) -{ - if ( isDefined( self.linked_ent ) ) - { - if ( isplayer( einflictor ) && smeansofdeath == "MOD_MELEE" ) - { - return 0; - } - } - return idamage; -} - -screecher_death_func() -{ - self unlink(); - self.noragdoll = 1; - self setanimstatefromasd( "zm_death" ); - maps/mp/animscripts/zm_shared::donotetracks( "death_anim" ); - playfx( level._effect[ "screecher_death" ], self.origin ); - if ( isDefined( self.attacker ) && isplayer( self.attacker ) ) - { - self.attacker maps/mp/zombies/_zm_stats::increment_client_stat( "screechers_killed", 0 ); - self.attacker maps/mp/zombies/_zm_stats::increment_player_stat( "screechers_killed" ); - } - self delete(); - return 1; -} - -screecher_check_score() -{ - if ( self.player_score >= 30 ) - { - player = self.linked_ent; - if ( isDefined( player ) ) - { - player notify( "i_dont_think_they_exist" ); - player maps/mp/zombies/_zm_stats::increment_client_stat( "screecher_minigames_won", 0 ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "screecher_minigames_won" ); - } - self dodamage( self.health + 666, self.origin ); - } - else - { - if ( self.screecher_score >= 15 ) - { -/# - if ( getDvarInt( #"6A65F83E" ) ) - { - return 0; -#/ - } - player = self.linked_ent; - if ( isDefined( player ) ) - { - self.meleedamage = player.health; - player dodamage( player.health, self.origin, self ); - self screecher_detach( player ); - player maps/mp/zombies/_zm_stats::increment_client_stat( "screecher_minigames_lost", 0 ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "screecher_minigames_lost" ); - return 1; - } - } - } -/# - screecher_print( "score: player " + self.player_score + " screecher " + self.screecher_score ); -#/ - return 0; -} - -kill_all_players() -{ - foreach ( player in level.players ) - { - player doDamage( player.health + 666, player.origin ); - } -} - -screecher_debug_axis() -{ -/# - self endon( "death" ); - while ( 1 ) - { - if ( isDefined( self.favoriteenemy ) ) - { - player = self.favoriteenemy; - anim_id = self getanimfromasd( "zm_jump_land_success", 0 ); - org = getstartorigin( player.origin, player.angles, anim_id ); - angles = getstartangles( player.origin, player.angles, anim_id ); - if ( !isDefined( player.bone_fxaxis ) ) - { - player.bone_fxaxis = spawn( "script_model", org ); - player.bone_fxaxis setmodel( "fx_axis_createfx" ); - } - if ( isDefined( player.bone_fxaxis ) ) - { - player.bone_fxaxis.origin = org; - player.bone_fxaxis.angles = angles; - } - } - wait 0,1; -#/ - } -} - -screecher_print( str ) -{ -/# - if ( getDvarInt( #"72C3A9C6" ) ) - { - iprintln( "screecher: " + str + "\n" ); - if ( isDefined( self ) ) - { - if ( isDefined( self.debug_msg ) ) - { - self.debug_msg[ self.debug_msg.size ] = str; - return; - } - else - { - self.debug_msg = []; - self.debug_msg[ self.debug_msg.size ] = str; -#/ - } - } - } -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_banking.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_banking.gsc deleted file mode 100644 index 69431c5..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_banking.gsc +++ /dev/null @@ -1,326 +0,0 @@ -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - onplayerconnect_callback( ::onplayerconnect_bank_deposit_box ); - if ( !isDefined( level.ta_vaultfee ) ) - { - level.ta_vaultfee = 100; - } - if ( !isDefined( level.ta_tellerfee ) ) - { - level.ta_tellerfee = 100; - } -} - -main() -{ - if ( !isDefined( level.banking_map ) ) - { - level.banking_map = level.script; - } - level thread bank_teller_init(); - level thread bank_deposit_box(); -} - -bank_teller_init() -{ - level.bank_teller_dmg_trig = getent( "bank_teller_tazer_trig", "targetname" ); - if ( isDefined( level.bank_teller_dmg_trig ) ) - { - level.bank_teller_transfer_trig = getent( level.bank_teller_dmg_trig.target, "targetname" ); - level.bank_teller_powerup_spot = getstruct( level.bank_teller_transfer_trig.target, "targetname" ); - level thread bank_teller_logic(); - level.bank_teller_transfer_trig.origin += vectorScale( ( 0, 0, -1 ), 25 ); - level.bank_teller_transfer_trig trigger_off(); - level.bank_teller_transfer_trig sethintstring( &"ZOMBIE_TELLER_GIVE_MONEY", level.ta_tellerfee ); - } -} - -bank_teller_logic() -{ - level endon( "end_game" ); - while ( 1 ) - { - level.bank_teller_dmg_trig waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, blah ); - if ( isDefined( attacker ) && isplayer( attacker ) && damage == 1500 && type == "MOD_MELEE" ) - { - bank_teller_give_money(); - level.bank_teller_transfer_trig trigger_off(); - } - } -} - -bank_teller_give_money() -{ - level endon( "end_game" ); - level endon( "stop_bank_teller" ); - level.bank_teller_transfer_trig trigger_on(); - bank_transfer = undefined; - while ( 1 ) - { - level.bank_teller_transfer_trig waittill( "trigger", player ); - if ( !is_player_valid( player, 0 ) || player.score < ( 1000 + level.ta_tellerfee ) ) - { - continue; - } - if ( !isDefined( bank_transfer ) ) - { - bank_transfer = maps/mp/zombies/_zm_powerups::specific_powerup_drop( "teller_withdrawl", level.bank_teller_powerup_spot.origin + vectorScale( ( 0, 0, -1 ), 40 ) ); - bank_transfer thread stop_bank_teller(); - bank_transfer.value = 0; - } - bank_transfer.value += 1000; - bank_transfer notify( "powerup_reset" ); - bank_transfer thread maps/mp/zombies/_zm_powerups::powerup_timeout(); - player maps/mp/zombies/_zm_score::minus_to_player_score( 1000 + level.ta_tellerfee ); - level notify( "bank_teller_used" ); - } -} - -stop_bank_teller() -{ - level endon( "end_game" ); - self waittill( "death" ); - level notify( "stop_bank_teller" ); -} - -delete_bank_teller() -{ - wait 1; - level notify( "stop_bank_teller" ); - bank_teller_dmg_trig = getent( "bank_teller_tazer_trig", "targetname" ); - bank_teller_transfer_trig = getent( bank_teller_dmg_trig.target, "targetname" ); - bank_teller_dmg_trig delete(); - bank_teller_transfer_trig delete(); -} - -onplayerconnect_bank_deposit_box() -{ - online_game = sessionmodeisonlinegame(); - if ( !online_game ) - { - self.account_value = 0; - } - else - { - self.account_value = self maps/mp/zombies/_zm_stats::get_map_stat( "depositBox", level.banking_map ); - } -} - -bank_deposit_box() -{ - level.bank_deposit_max_amount = 250000; - level.bank_deposit_ddl_increment_amount = 1000; - level.bank_account_max = level.bank_deposit_max_amount / level.bank_deposit_ddl_increment_amount; - level.bank_account_increment = int( level.bank_deposit_ddl_increment_amount / 1000 ); - deposit_triggers = getstructarray( "bank_deposit", "targetname" ); - array_thread( deposit_triggers, ::bank_deposit_unitrigger ); - withdraw_triggers = getstructarray( "bank_withdraw", "targetname" ); - array_thread( withdraw_triggers, ::bank_withdraw_unitrigger ); -} - -bank_deposit_unitrigger() -{ - bank_unitrigger( "bank_deposit", ::trigger_deposit_update_prompt, ::trigger_deposit_think, 5, 5, undefined, 5 ); -} - -bank_withdraw_unitrigger() -{ - bank_unitrigger( "bank_withdraw", ::trigger_withdraw_update_prompt, ::trigger_withdraw_think, 5, 5, undefined, 5 ); -} - -bank_unitrigger( name, prompt_fn, think_fn, override_length, override_width, override_height, override_radius ) -{ - unitrigger_stub = spawnstruct(); - unitrigger_stub.origin = self.origin; - if ( isDefined( self.script_angles ) ) - { - unitrigger_stub.angles = self.script_angles; - } - else - { - unitrigger_stub.angles = self.angles; - } - unitrigger_stub.script_angles = unitrigger_stub.angles; - if ( isDefined( override_length ) ) - { - unitrigger_stub.script_length = override_length; - } - else if ( isDefined( self.script_length ) ) - { - unitrigger_stub.script_length = self.script_length; - } - else - { - unitrigger_stub.script_length = 32; - } - if ( isDefined( override_width ) ) - { - unitrigger_stub.script_width = override_width; - } - else if ( isDefined( self.script_width ) ) - { - unitrigger_stub.script_width = self.script_width; - } - else - { - unitrigger_stub.script_width = 32; - } - if ( isDefined( override_height ) ) - { - unitrigger_stub.script_height = override_height; - } - else if ( isDefined( self.script_height ) ) - { - unitrigger_stub.script_height = self.script_height; - } - else - { - unitrigger_stub.script_height = 64; - } - if ( isDefined( override_radius ) ) - { - unitrigger_stub.script_radius = override_radius; - } - else if ( isDefined( self.radius ) ) - { - unitrigger_stub.radius = self.radius; - } - else - { - unitrigger_stub.radius = 32; - } - if ( isDefined( self.script_unitrigger_type ) ) - { - unitrigger_stub.script_unitrigger_type = self.script_unitrigger_type; - } - else - { - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.origin -= anglesToRight( unitrigger_stub.angles ) * ( unitrigger_stub.script_length / 2 ); - } - unitrigger_stub.cursor_hint = "HINT_NOICON"; - unitrigger_stub.targetname = name; - maps/mp/zombies/_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - unitrigger_stub.prompt_and_visibility_func = prompt_fn; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, think_fn ); -} - -trigger_deposit_update_prompt( player ) -{ - if ( player.score < level.bank_deposit_ddl_increment_amount || player.account_value >= level.bank_account_max ) - { - player show_balance(); - self sethintstring( "" ); - return 0; - } - self sethintstring( &"ZOMBIE_BANK_DEPOSIT_PROMPT", level.bank_deposit_ddl_increment_amount ); - return 1; -} - -trigger_deposit_think() -{ - self endon( "kill_trigger" ); - while ( 1 ) - { - self waittill( "trigger", player ); - while ( !is_player_valid( player ) ) - { - continue; - } - if ( player.score >= level.bank_deposit_ddl_increment_amount && player.account_value < level.bank_account_max ) - { - player playsoundtoplayer( "zmb_vault_bank_deposit", player ); - player.score -= level.bank_deposit_ddl_increment_amount; - player.account_value += level.bank_account_increment; - player maps/mp/zombies/_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map ); - if ( isDefined( level.custom_bank_deposit_vo ) ) - { - player thread [[ level.custom_bank_deposit_vo ]](); - } - if ( player.account_value >= level.bank_account_max ) - { - self sethintstring( "" ); - } - } - else - { - player thread do_player_general_vox( "general", "exert_sigh", 10, 50 ); - } - player show_balance(); - } -} - -trigger_withdraw_update_prompt( player ) -{ - if ( player.account_value <= 0 ) - { - self sethintstring( "" ); - player show_balance(); - return 0; - } - self sethintstring( &"ZOMBIE_BANK_WITHDRAW_PROMPT", level.bank_deposit_ddl_increment_amount, level.ta_vaultfee ); - return 1; -} - -trigger_withdraw_think() -{ - self endon( "kill_trigger" ); - while ( 1 ) - { - self waittill( "trigger", player ); - while ( !is_player_valid( player ) ) - { - continue; - } - if ( player.account_value >= level.bank_account_increment ) - { - player playsoundtoplayer( "zmb_vault_bank_withdraw", player ); - player.score += level.bank_deposit_ddl_increment_amount; - level notify( "bank_withdrawal" ); - player.account_value -= level.bank_account_increment; - player maps/mp/zombies/_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map ); - if ( isDefined( level.custom_bank_withdrawl_vo ) ) - { - player thread [[ level.custom_bank_withdrawl_vo ]](); - } - else - { - player thread do_player_general_vox( "general", "exert_laugh", 10, 50 ); - } - player thread player_withdraw_fee(); - if ( player.account_value < level.bank_account_increment ) - { - self sethintstring( "" ); - } - } - else - { - player thread do_player_general_vox( "general", "exert_sigh", 10, 50 ); - } - player show_balance(); - } -} - -player_withdraw_fee() -{ - self endon( "disconnect" ); - wait_network_frame(); - self.score -= level.ta_vaultfee; -} - -show_balance() -{ -/# - iprintlnbold( "DEBUG BANKER: " + self.name + " account worth " + self.account_value ); -#/ -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_equip_electrictrap.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_equip_electrictrap.gsc deleted file mode 100644 index b73ef9d..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_equip_electrictrap.gsc +++ /dev/null @@ -1,414 +0,0 @@ -#include maps/mp/zombies/_zm_traps; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_power; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( !maps/mp/zombies/_zm_equipment::is_equipment_included( "equip_electrictrap_zm" ) ) - { - return; - } - level.electrictrap_name = "equip_electrictrap_zm"; - maps/mp/zombies/_zm_equipment::register_equipment( "equip_electrictrap_zm", &"ZOMBIE_EQUIP_ELECTRICTRAP_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_ELECTRICTRAP_HOWTO", "etrap_zm_icon", "electrictrap", undefined, ::transfertrap, ::droptrap, ::pickuptrap, ::placetrap ); - maps/mp/zombies/_zm_equipment::add_placeable_equipment( "equip_electrictrap_zm", "p6_anim_zm_buildable_etrap" ); - level thread onplayerconnect(); - maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "equip_electrictrap", &"ZOMBIE_EQUIP_ELECTRICTRAP_PICKUP_HINT_STRING" ); - level._effect[ "etrap_on" ] = loadfx( "maps/zombie/fx_zmb_tranzit_electric_trap_on" ); - thread wait_init_damage(); -} - -wait_init_damage() -{ - while ( !isDefined( level.zombie_vars ) || !isDefined( level.zombie_vars[ "zombie_health_start" ] ) ) - { - wait 1; - } - level.etrap_damage = maps/mp/zombies/_zm::ai_zombie_health( 50 ); -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread onplayerspawned(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - self thread setupwatchers(); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread watchelectrictrapuse(); - } -} - -setupwatchers() -{ - self waittill( "weapon_watchers_created" ); - watcher = maps/mp/gametypes_zm/_weaponobjects::getweaponobjectwatcher( "equip_electrictrap" ); - watcher.onspawnretrievetriggers = ::maps/mp/zombies/_zm_equipment::equipment_onspawnretrievableweaponobject; -} - -watchelectrictrapuse() -{ - self notify( "watchElectricTrapUse" ); - self endon( "watchElectricTrapUse" ); - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "equipment_placed", weapon, weapname ); - if ( weapname == level.electrictrap_name ) - { - self cleanupoldtrap(); - self.buildableelectrictrap = weapon; - self thread startelectrictrapdeploy( weapon ); - } - } -} - -cleanupoldtrap() -{ - if ( isDefined( self.buildableelectrictrap ) ) - { - if ( isDefined( self.buildableelectrictrap.stub ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildableelectrictrap.stub ); - self.buildableelectrictrap.stub = undefined; - } - self.buildableelectrictrap delete(); - } - if ( isDefined( level.electrap_sound_ent ) ) - { - level.electrap_sound_ent delete(); - level.electrap_sound_ent = undefined; - } -} - -watchforcleanup() -{ - self notify( "etrap_cleanup" ); - self endon( "etrap_cleanup" ); - self waittill_any( "death_or_disconnect", "equip_electrictrap_zm_taken", "equip_electrictrap_zm_pickup" ); - cleanupoldtrap(); -} - -placetrap( origin, angles ) -{ - item = self maps/mp/zombies/_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_etrap", "equip_electrictrap_zm", origin, angles ); - if ( isDefined( item ) ) - { - item.owner = self; - item.zombie_attack_callback = ::zombie_attacked_trap; - } - return item; -} - -droptrap() -{ - item = self maps/mp/zombies/_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_etrap", "equip_electrictrap_zm", self.origin, self.angles ); - if ( isDefined( item ) ) - { - item.electrictrap_health = self.electrictrap_health; - } - self.electrictrap_health = undefined; - return item; -} - -pickuptrap( item ) -{ - item.owner = self; - self.electrictrap_health = item.electrictrap_health; - item.electrictrap_health = undefined; -} - -transfertrap( fromplayer, toplayer ) -{ - buildableelectrictrap = toplayer.buildableelectrictrap; - electrictrap_health = toplayer.electrictrap_health; - toplayer.buildableelectrictrap = fromplayer.buildableelectrictrap; - toplayer.buildableelectrictrap.original_owner = toplayer; - toplayer notify( "equip_electrictrap_zm_taken" ); - toplayer thread startelectrictrapdeploy( toplayer.buildableelectrictrap ); - toplayer.electrictrap_health = fromplayer.electrictrap_health; - fromplayer.buildableelectrictrap = buildableelectrictrap; - fromplayer notify( "equip_electrictrap_zm_taken" ); - if ( isDefined( fromplayer.buildableelectrictrap ) ) - { - fromplayer thread startelectrictrapdeploy( fromplayer.buildableelectrictrap ); - fromplayer.buildableelectrictrap.original_owner = fromplayer; - fromplayer.buildableelectrictrap.owner = fromplayer; - } - else - { - fromplayer maps/mp/zombies/_zm_equipment::equipment_release( "equip_electrictrap_zm" ); - } - fromplayer.electrictrap_health = electrictrap_health; -} - -startelectrictrapdeploy( weapon ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_electrictrap_zm_taken" ); - self thread watchforcleanup(); - electricradius = 45; - if ( !isDefined( self.electrictrap_health ) ) - { - self.electrictrap_health = 60; - } - if ( isDefined( weapon ) ) - { -/# - weapon thread debugelectrictrap( electricradius ); -#/ - if ( isDefined( level.equipment_etrap_needs_power ) && level.equipment_etrap_needs_power ) - { - weapon.power_on = 0; - maps/mp/zombies/_zm_power::add_temp_powered_item( ::trap_power_on, ::trap_power_off, ::trap_in_range, ::maps/mp/zombies/_zm_power::cost_high, 1, weapon.power_on, weapon ); - } - else - { - weapon.power_on = 1; - } - if ( !weapon.power_on ) - { - self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" ); - } - self thread electrictrapthink( weapon, electricradius ); - if ( isDefined( level.equipment_etrap_needs_power ) && !level.equipment_etrap_needs_power ) - { - self thread electrictrapdecay( weapon ); - } - self thread maps/mp/zombies/_zm_buildables::delete_on_disconnect( weapon ); - weapon waittill( "death" ); - if ( isDefined( level.electrap_sound_ent ) ) - { - level.electrap_sound_ent playsound( "wpn_zmb_electrap_stop" ); - level.electrap_sound_ent delete(); - level.electrap_sound_ent = undefined; - } - self notify( "etrap_cleanup" ); - } -} - -trap_in_range( delta, origin, radius ) -{ - if ( distancesquared( self.target.origin, origin ) < ( radius * radius ) ) - { - return 1; - } - return 0; -} - -trap_power_on( origin, radius ) -{ -/# - println( "^1ZM POWER: trap on\n" ); -#/ - if ( !isDefined( self.target ) ) - { - return; - } - self.target.power_on = 1; - self.target.power_on_time = getTime(); - self.target notify( "stop_attracting_zombies" ); - if ( !isDefined( level.electrap_sound_ent ) ) - { - level.electrap_sound_ent = spawn( "script_origin", self.target.origin ); - } - level.electrap_sound_ent playsound( "wpn_zmb_electrap_start" ); - level.electrap_sound_ent playloopsound( "wpn_zmb_electrap_loop", 2 ); - self.target thread trapfx(); -} - -trap_power_off( origin, radius ) -{ -/# - println( "^1ZM POWER: trap off\n" ); -#/ - if ( !isDefined( self.target ) ) - { - return; - } - self.target.power_on = 0; - self.target thread item_attract_zombies(); - if ( isDefined( level.electrap_sound_ent ) ) - { - level.electrap_sound_ent playsound( "wpn_zmb_electrap_stop" ); - level.electrap_sound_ent delete(); - level.electrap_sound_ent = undefined; - } -} - -trapfx() -{ - self endon( "disconnect" ); - while ( isDefined( self ) && isDefined( self.power_on ) && self.power_on ) - { - playfxontag( level._effect[ "etrap_on" ], self, "tag_origin" ); - wait 0,3; - } -} - -zombie_attacked_trap( zombie ) -{ - if ( isDefined( self.power_on ) && self.power_on ) - { - self zap_zombie( zombie ); - } -} - -electrocution_lockout( time ) -{ - level.electrocuting_zombie = 1; - wait time; - level.electrocuting_zombie = 0; -} - -zap_zombie( zombie ) -{ - if ( isDefined( zombie.ignore_electric_trap ) && zombie.ignore_electric_trap ) - { - return; - } - if ( zombie.health > level.etrap_damage ) - { - zombie dodamage( level.etrap_damage, self.origin ); - zombie.ignore_electric_trap = 1; - return; - } - self playsound( "wpn_zmb_electrap_zap" ); - if ( isDefined( level.electrocuting_zombie ) && !level.electrocuting_zombie ) - { - thread electrocution_lockout( 2 ); - zombie thread play_elec_vocals(); - zombie thread maps/mp/zombies/_zm_traps::electroctute_death_fx(); - zombie.is_on_fire = 0; - zombie notify( "stop_flame_damage" ); - } - zombie thread electrictrapkill( self ); -} - -etrap_choke() -{ - if ( !isDefined( level.etrap_choke_count ) ) - { - level.etrap_choke_count = 0; - } - level.etrap_choke_count++; - if ( level.etrap_choke_count >= 5 ) - { - wait 0,05; - level.etrap_choke_count = 0; - } -} - -electrictrapthink( weapon, electricradius ) -{ - weapon endon( "death" ); - radiussquared = electricradius * electricradius; - while ( isDefined( weapon ) ) - { - while ( weapon.power_on && ( getTime() - weapon.power_on_time ) > 2000 ) - { - zombies = getaiarray( level.zombie_team ); - _a354 = zombies; - _k354 = getFirstArrayKey( _a354 ); - while ( isDefined( _k354 ) ) - { - zombie = _a354[ _k354 ]; - if ( !isDefined( zombie ) || !isalive( zombie ) ) - { - } - else - { - if ( isDefined( zombie.ignore_electric_trap ) && zombie.ignore_electric_trap ) - { - break; - } - else - { - if ( distancesquared( weapon.origin, zombie.origin ) < radiussquared ) - { - weapon zap_zombie( zombie ); - wait 0,15; - } - etrap_choke(); - } - } - _k354 = getNextArrayKey( _a354, _k354 ); - } - players = get_players(); - _a373 = players; - _k373 = getFirstArrayKey( _a373 ); - while ( isDefined( _k373 ) ) - { - player = _a373[ _k373 ]; - if ( is_player_valid( player ) && distancesquared( weapon.origin, player.origin ) < radiussquared ) - { - player thread maps/mp/zombies/_zm_traps::player_elec_damage(); - etrap_choke(); - } - etrap_choke(); - _k373 = getNextArrayKey( _a373, _k373 ); - } - } - wait 0,1; - } -} - -electrictrapkill( weapon ) -{ - self endon( "death" ); - wait randomfloatrange( 0,1, 0,4 ); - self dodamage( self.health + 666, self.origin ); -} - -electrictrapdecay( weapon ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_electrictrap_zm_taken" ); - while ( isDefined( weapon ) ) - { - if ( weapon.power_on ) - { - self.electrictrap_health--; - - if ( self.electrictrap_health <= 0 ) - { - self cleanupoldtrap(); - self.electrictrap_health = undefined; - self thread maps/mp/zombies/_zm_equipment::equipment_release( "equip_electrictrap_zm" ); - return; - } - } - wait 1; - } -} - -debugelectrictrap( radius ) -{ -/# - while ( isDefined( self ) ) - { - if ( getDvarInt( #"EB512CB7" ) ) - { - circle( self.origin, radius, ( 1, 1, 1 ), 0, 1, 1 ); - } - wait 0,05; -#/ - } -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_equip_turret.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_equip_turret.gsc deleted file mode 100644 index f30c1dc..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_equip_turret.gsc +++ /dev/null @@ -1,350 +0,0 @@ -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_mgturret; -#include maps/mp/zombies/_zm_power; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( !maps/mp/zombies/_zm_equipment::is_equipment_included( "equip_turret_zm" ) ) - { - return; - } - precachemodel( "p6_anim_zm_buildable_turret" ); - precacheturret( "zombie_bullet_crouch_zm" ); - level.turret_name = "equip_turret_zm"; - maps/mp/zombies/_zm_equipment::register_equipment( "equip_turret_zm", &"ZOMBIE_EQUIP_TURRET_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_TURRET_HOWTO", "turret_zm_icon", "turret", undefined, ::transferturret, ::dropturret, ::pickupturret, ::placeturret ); - maps/mp/zombies/_zm_equipment::add_placeable_equipment( "equip_turret_zm", "p6_anim_zm_buildable_turret" ); - level thread onplayerconnect(); - maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "equip_turret", &"ZOMBIE_EQUIP_TURRET_PICKUP_HINT_STRING" ); -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread onplayerspawned(); - } -} - -onplayerspawned() -{ - self endon( "disconnect" ); - self thread setupwatchers(); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread watchturretuse(); - } -} - -setupwatchers() -{ - self waittill( "weapon_watchers_created" ); - watcher = maps/mp/gametypes_zm/_weaponobjects::getweaponobjectwatcher( "equip_turret" ); - watcher.onspawnretrievetriggers = ::maps/mp/zombies/_zm_equipment::equipment_onspawnretrievableweaponobject; -} - -watchturretuse() -{ - self notify( "watchTurretUse" ); - self endon( "watchTurretUse" ); - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "equipment_placed", weapon, weapname ); - if ( weapname == level.turret_name ) - { - self cleanupoldturret(); - self.buildableturret = weapon; - self thread startturretdeploy( weapon ); - } - } -} - -cleanupoldturret() -{ - if ( isDefined( self.buildableturret ) ) - { - if ( isDefined( self.buildableturret.stub ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildableturret.stub ); - self.buildableturret.stub = undefined; - } - if ( isDefined( self.buildableturret.turret ) ) - { - if ( isDefined( self.buildableturret.turret.sound_ent ) ) - { - self.buildableturret.turret.sound_ent delete(); - } - self.buildableturret.turret delete(); - } - if ( isDefined( self.buildableturret.sound_ent ) ) - { - self.buildableturret.sound_ent delete(); - self.buildableturret.sound_ent = undefined; - } - self.buildableturret delete(); - self.turret_health = undefined; - } - else - { - if ( isDefined( self.turret ) ) - { - self.turret notify( "stop_burst_fire_unmanned" ); - self.turret delete(); - } - } - self.turret = undefined; - self notify( "turret_cleanup" ); -} - -watchforcleanup() -{ - self notify( "turret_cleanup" ); - self endon( "turret_cleanup" ); - self waittill_any( "death_or_disconnect", "equip_turret_zm_taken", "equip_turret_zm_pickup" ); - cleanupoldturret(); -} - -placeturret( origin, angles ) -{ - item = self maps/mp/zombies/_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_turret", "equip_turret_zm", origin, angles ); - if ( isDefined( item ) ) - { - item.owner = self; - } - return item; -} - -dropturret() -{ - item = self maps/mp/zombies/_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_turret", "equip_turret_zm", self.origin, self.angles ); - if ( isDefined( item ) ) - { - item.turret_health = self.turret_health; - } - self.turret_health = undefined; - return item; -} - -pickupturret( item ) -{ - item.owner = self; - self.turret_health = item.turret_health; - item.turret_health = undefined; -} - -transferturret( fromplayer, toplayer ) -{ - buildableturret = toplayer.buildableturret; - turret = toplayer.turret; - toplayer.buildableturret = fromplayer.buildableturret; - toplayer.turret = fromplayer.turret; - fromplayer.buildableturret = buildableturret; - fromplayer.turret = turret; - toplayer.buildableturret.original_owner = toplayer; - toplayer notify( "equip_turret_zm_taken" ); - toplayer thread startturretdeploy( toplayer.buildableturret ); - fromplayer notify( "equip_turret_zm_taken" ); - if ( isDefined( fromplayer.buildableturret ) ) - { - fromplayer thread startturretdeploy( fromplayer.buildableturret ); - fromplayer.buildableturret.original_owner = fromplayer; - fromplayer.buildableturret.owner = fromplayer; - } - else - { - fromplayer maps/mp/zombies/_zm_equipment::equipment_release( "equip_turret_zm" ); - } - turret_health = toplayer.turret_health; - toplayer.turret_health = fromplayer.turret_health; - fromplayer.turret_health = turret_health; -} - -startturretdeploy( weapon ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_turret_zm_taken" ); - self thread watchforcleanup(); - if ( !isDefined( self.turret_health ) ) - { - self.turret_health = 60; - } - if ( isDefined( weapon ) ) - { - weapon hide(); - wait 0,1; - if ( isDefined( weapon.power_on ) && weapon.power_on ) - { - weapon.turret notify( "stop_burst_fire_unmanned" ); - } - if ( !isDefined( weapon ) ) - { - return; - } - if ( isDefined( self.turret ) ) - { - self.turret notify( "stop_burst_fire_unmanned" ); - self.turret notify( "turret_deactivated" ); - self.turret delete(); - } - turret = spawnturret( "misc_turret", weapon.origin, "zombie_bullet_crouch_zm" ); - turret.turrettype = "sentry"; - turret setturrettype( turret.turrettype ); - turret setmodel( "p6_anim_zm_buildable_turret" ); - turret.origin = weapon.origin; - turret.angles = weapon.angles; - turret linkto( weapon ); - turret makeunusable(); - turret.owner = self; - turret setowner( turret.owner ); - turret maketurretunusable(); - turret setmode( "auto_nonai" ); - turret setdefaultdroppitch( 45 ); - turret setconvergencetime( 0,3 ); - turret setturretteam( self.team ); - turret.team = self.team; - turret.damage_own_team = 1; - turret.turret_active = 1; - weapon.turret = turret; - self.turret = turret; - if ( isDefined( level.equipment_turret_needs_power ) && level.equipment_turret_needs_power ) - { - weapon.power_on = 0; - maps/mp/zombies/_zm_power::add_temp_powered_item( ::turret_power_on, ::turret_power_off, ::turret_in_range, ::maps/mp/zombies/_zm_power::cost_high, 1, weapon.power_on, weapon ); - } - else - { - weapon.power_on = 1; - } - if ( weapon.power_on ) - { - turret thread maps/mp/zombies/_zm_mgturret::burst_fire_unmanned(); - } - else - { - self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" ); - } - if ( isDefined( level.equipment_turret_needs_power ) && !level.equipment_turret_needs_power ) - { - self thread turretdecay( weapon ); - } - self thread maps/mp/zombies/_zm_buildables::delete_on_disconnect( weapon ); - while ( isDefined( weapon ) ) - { - if ( !is_true( weapon.power_on ) ) - { - if ( isDefined( self.buildableturret.sound_ent ) ) - { - self.buildableturret.sound_ent playsound( "wpn_zmb_turret_stop" ); - self.buildableturret.sound_ent delete(); - self.buildableturret.sound_ent = undefined; - } - } - wait 0,1; - } - if ( isDefined( self.buildableturret.sound_ent ) ) - { - self.buildableturret.sound_ent playsound( "wpn_zmb_turret_stop" ); - self.buildableturret.sound_ent delete(); - self.buildableturret.sound_ent = undefined; - } - if ( isDefined( turret ) ) - { - turret notify( "stop_burst_fire_unmanned" ); - turret notify( "turret_deactivated" ); - turret delete(); - } - self.turret = undefined; - self notify( "turret_cleanup" ); - } -} - -turret_in_range( delta, origin, radius ) -{ - if ( distancesquared( self.target.origin, origin ) < ( radius * radius ) ) - { - return 1; - } - return 0; -} - -turret_power_on( origin, radius ) -{ -/# - println( "^1ZM POWER: turret on\n" ); -#/ - if ( !isDefined( self.target ) ) - { - return; - } - self.target.power_on = 1; - self.target.turret thread maps/mp/zombies/_zm_mgturret::burst_fire_unmanned(); - player = self.target.turret.owner; - if ( !isDefined( player.buildableturret.sound_ent ) ) - { - player.buildableturret.sound_ent = spawn( "script_origin", self.target.turret.origin ); - } - player.buildableturret.sound_ent playsound( "wpn_zmb_turret_start" ); - player.buildableturret.sound_ent playloopsound( "wpn_zmb_turret_loop", 2 ); -} - -turret_power_off( origin, radius ) -{ -/# - println( "^1ZM POWER: turret off\n" ); -#/ - if ( !isDefined( self.target ) ) - { - return; - } - self.target.power_on = 0; - self.target.turret notify( "stop_burst_fire_unmanned" ); - player = self.target.turret.owner; - if ( isDefined( player.buildableturret.sound_ent ) ) - { - player.buildableturret.sound_ent playsound( "wpn_zmb_turret_stop" ); - player.buildableturret.sound_ent delete(); - player.buildableturret.sound_ent = undefined; - } -} - -turretdecay( weapon ) -{ - self endon( "death" ); - self endon( "disconnect" ); - while ( isDefined( weapon ) ) - { - if ( weapon.power_on ) - { - self.turret_health--; - - if ( self.turret_health <= 0 ) - { - self cleanupoldturret(); - self thread maps/mp/zombies/_zm_equipment::equipment_release( "equip_turret_zm" ); - return; - } - } - wait 1; - } -} - -debugturret( radius ) -{ -/# - while ( isDefined( self ) ) - { - circle( self.origin, radius, ( 1, 1, 1 ), 0, 1, 1 ); - wait 0,05; -#/ - } -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_game_module_grief.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_game_module_grief.gsc deleted file mode 100644 index c626fe9..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_game_module_grief.gsc +++ /dev/null @@ -1,13 +0,0 @@ -//checked includes changed to match cerberus output -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm_game_module_utility; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; - -register_game_module() //checked matches cerberus output -{ - level.game_module_grief_index = 9; - maps/mp/zombies/_zm_game_module::register_game_module( level.game_module_grief_index, "zgrief", ::onpreinitgametype, ::onpostinitgametype, undefined, ::onspawnzombie, ::onstartgametype ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_game_module_meat.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_game_module_meat.gsc deleted file mode 100644 index 2eb58a5..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_game_module_meat.gsc +++ /dev/null @@ -1,7 +0,0 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm_game_module_utility; -#include maps/mp/zombies/_zm_game_module_meat_utility; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_game_module_meat_utility.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_game_module_meat_utility.gsc deleted file mode 100644 index 3f365b9..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_game_module_meat_utility.gsc +++ /dev/null @@ -1,685 +0,0 @@ -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/gametypes_zm/zmeat; -#include maps/mp/zombies/_zm_audio_announcer; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_game_module_utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -award_grenades_for_team( team ) -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ]._meat_team ) || players[ i ]._meat_team != team ) - { - i++; - continue; - } - else - { - lethal_grenade = players[ i ] get_player_lethal_grenade(); - players[ i ] giveweapon( lethal_grenade ); - players[ i ] setweaponammoclip( lethal_grenade, 4 ); - } - i++; - } -} - -get_players_on_meat_team( team ) -{ - players = get_players(); - players_on_team = []; - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ]._meat_team ) || players[ i ]._meat_team != team ) - { - i++; - continue; - } - else - { - players_on_team[ players_on_team.size ] = players[ i ]; - } - i++; - } - return players_on_team; -} - -get_alive_players_on_meat_team( team ) -{ - players = get_players(); - players_on_team = []; - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ]._meat_team ) || players[ i ]._meat_team != team ) - { - i++; - continue; - } - else - { - if ( players[ i ].sessionstate == "spectator" || players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - i++; - continue; - } - else - { - players_on_team[ players_on_team.size ] = players[ i ]; - } - } - i++; - } - return players_on_team; -} - -init_minigun_ring() -{ - if ( isDefined( level._minigun_ring ) ) - { - return; - } - ring_pos = getstruct( level._meat_location + "_meat_minigun", "script_noteworthy" ); - if ( !isDefined( ring_pos ) ) - { - return; - } - level._minigun_ring = spawn( "script_model", ring_pos.origin ); - level._minigun_ring.angles = ring_pos.angles; - level._minigun_ring setmodel( ring_pos.script_parameters ); - level._minigun_ring_clip = getent( level._meat_location + "_meat_minigun_clip", "script_noteworthy" ); - if ( isDefined( level._minigun_ring_clip ) ) - { - level._minigun_ring_clip linkto( level._minigun_ring ); - } - else - { - iprintlnbold( "BUG: no level._minigun_ring_clip" ); - } - level._minigun_ring_trig = getent( level._meat_location + "_meat_minigun_trig", "targetname" ); - if ( isDefined( level._minigun_ring_trig ) ) - { - level._minigun_ring_trig enablelinkto(); - level._minigun_ring_trig linkto( level._minigun_ring ); - level._minigun_icon = spawn( "script_model", level._minigun_ring_trig.origin ); - level._minigun_icon setmodel( getweaponmodel( "minigun_zm" ) ); - level._minigun_icon linkto( level._minigun_ring ); - level._minigun_icon setclientfield( "ring_glowfx", 1 ); - level thread ring_toss( level._minigun_ring_trig, "minigun" ); - } - else - { - iprintlnbold( "BUG: no level._minigun_ring_trig" ); - } - level._minigun_ring thread move_ring( ring_pos ); - level._minigun_ring thread rotate_ring( 1 ); -} - -init_ammo_ring() -{ - if ( isDefined( level._ammo_ring ) ) - { - return; - } - name = level._meat_location + "_meat_ammo"; - ring_pos = getstruct( name, "script_noteworthy" ); - if ( !isDefined( ring_pos ) ) - { - return; - } - level._ammo_ring = spawn( "script_model", ring_pos.origin ); - level._ammo_ring.angles = ring_pos.angles; - level._ammo_ring setmodel( ring_pos.script_parameters ); - name = level._meat_location + "_meat_ammo_clip"; - level._ammo_ring_clip = getent( name, "script_noteworthy" ); - if ( isDefined( level._ammo_ring_clip ) ) - { - level._ammo_ring_clip linkto( level._ammo_ring ); - } - else - { - iprintlnbold( "BUG: no level._ammo_ring_clip" ); - } - name = level._meat_location + "_meat_ammo_trig"; - level._ammo_ring_trig = getent( name, "targetname" ); - if ( isDefined( level._ammo_ring_clip ) ) - { - level._ammo_ring_trig enablelinkto(); - level._ammo_ring_trig linkto( level._ammo_ring ); - level._ammo_icon = spawn( "script_model", level._ammo_ring_trig.origin ); - level._ammo_icon setmodel( "zombie_ammocan" ); - level._ammo_icon linkto( level._ammo_ring ); - level._ammo_icon setclientfield( "ring_glowfx", 1 ); - level thread ring_toss( level._ammo_ring_trig, "ammo" ); - } - else - { - iprintlnbold( "BUG: no level._ammo_ring_trig" ); - } - level._ammo_ring thread move_ring( ring_pos ); - level._ammo_ring thread rotate_ring( 1 ); -} - -init_splitter_ring() -{ - if ( isDefined( level._splitter_ring ) ) - { - return; - } - ring_pos = getstruct( level._meat_location + "_meat_splitter", "script_noteworthy" ); - if ( !isDefined( ring_pos ) ) - { - return; - } - level._splitter_ring = spawn( "script_model", ring_pos.origin ); - level._splitter_ring.angles = ring_pos.angles; - level._splitter_ring setmodel( ring_pos.script_parameters ); - level._splitter_ring_trig1 = getent( level._meat_location + "_meat_splitter_trig_1", "targetname" ); - level._splitter_ring_trig2 = getent( level._meat_location + "_meat_splitter_trig_2", "targetname" ); - if ( isDefined( level._splitter_ring_trig1 ) && isDefined( level._splitter_ring_trig2 ) ) - { - level._splitter_ring_trig1 enablelinkto(); - level._splitter_ring_trig2 enablelinkto(); - } - else - { - iprintlnbold( "BUG: missing at least one level._splitter_ring_trig" ); - } - level._splitter_ring notsolid(); - level._meat_icon = spawn( "script_model", level._splitter_ring.origin ); - level._meat_icon setmodel( getweaponmodel( get_gamemode_var( "item_meat_name" ) ) ); - level._meat_icon linkto( level._splitter_ring ); - level._meat_icon setclientfield( "ring_glow_meatfx", 1 ); - if ( isDefined( level._splitter_ring_trig1 ) && isDefined( level._splitter_ring_trig2 ) ) - { - level._splitter_ring_trig1 linkto( level._splitter_ring ); - level._splitter_ring_trig2 linkto( level._splitter_ring ); - level thread ring_toss( level._splitter_ring_trig1, "splitter" ); - level thread ring_toss( level._splitter_ring_trig2, "splitter" ); - } - level._splitter_ring thread move_ring( ring_pos ); -} - -ring_toss( trig, type ) -{ - level endon( "end_game" ); - while ( 1 ) - { - while ( isDefined( level._ring_triggered ) && level._ring_triggered ) - { - wait 0,05; - } - if ( isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving ) - { - if ( level.item_meat istouching( trig ) ) - { - level thread ring_toss_prize( type, trig ); - level._ring_triggered = 1; - level thread ring_cooldown(); - } - } - wait 0,05; - } -} - -ring_cooldown() -{ - wait 3; - level._ring_triggered = 0; -} - -ring_toss_prize( type, trig ) -{ - switch( type ) - { - case "splitter": - level thread meat_splitter( trig ); - break; - case "minigun": - level thread minigun_prize( trig ); - break; - case "ammo": - level thread ammo_prize( trig ); - break; - } -} - -meat_splitter( trig ) -{ - level endon( "meat_grabbed" ); - level endon( "meat_kicked" ); - while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) ) - { - wait 0,05; - } - exit_trig = getent( trig.target, "targetname" ); - exit_struct = getstruct( trig.target, "targetname" ); - while ( isDefined( level.item_meat ) && !level.item_meat istouching( exit_trig ) ) - { - wait 0,05; - } - while ( isDefined( level.item_meat ) && level.item_meat istouching( exit_trig ) ) - { - wait 0,05; - } - if ( !isDefined( level.item_meat ) ) - { - return; - } - playfx( level._effect[ "fw_burst" ], exit_trig.origin ); - flare_dir = vectornormalize( anglesToForward( exit_struct.angles ) ); - velocity = vectorScale( flare_dir, randomintrange( 400, 600 ) ); - velocity1 = ( velocity[ 0 ] + 75, velocity[ 1 ] + 75, randomintrange( 75, 125 ) ); - velocity2 = ( velocity[ 0 ] - 75, velocity[ 1 ] - 75, randomintrange( 75, 125 ) ); - velocity3 = ( velocity[ 0 ], velocity[ 1 ], 100 ); - level._fake_meats = []; - level._meat_splitter_activated = 1; - org = exit_trig.origin; - player = get_players()[ 0 ]; - player._spawning_meat = 1; - player endon( "disconnect" ); - thread split_meat( player, org, velocity1, velocity2, velocity ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_splitter", undefined, undefined, 1 ); - wait 0,1; - while ( isDefined( level.splitting_meat ) && level.splitting_meat ) - { - wait 0,05; - } - player._spawning_meat = 0; -} - -split_meat( player, org, vel1, vel2, vel3 ) -{ - level.splitting_meat = 1; - level.item_meat cleanup_meat(); - wait_network_frame(); - level._fake_meats[ level._fake_meats.size ] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel1 ); - wait_network_frame(); - level._fake_meats[ level._fake_meats.size ] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel2 ); - wait_network_frame(); - level._fake_meats[ level._fake_meats.size ] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel3 ); - real_meat = random( level._fake_meats ); - _a330 = level._fake_meats; - _k330 = getFirstArrayKey( _a330 ); - while ( isDefined( _k330 ) ) - { - meat = _a330[ _k330 ]; - if ( real_meat != meat ) - { - meat._fake_meat = 1; - meat thread maps/mp/gametypes_zm/zmeat::delete_on_real_meat_pickup(); - } - else - { - meat._fake_meat = 0; - level.item_meat = meat; - } - _k330 = getNextArrayKey( _a330, _k330 ); - } - level.splitting_meat = 0; -} - -minigun_prize( trig ) -{ - while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) ) - { - wait 0,05; - } - if ( !isDefined( level.item_meat ) ) - { - return; - } - if ( isDefined( level._minigun_toss_cooldown ) && level._minigun_toss_cooldown ) - { - return; - } - level thread minigun_toss_cooldown(); - if ( !is_player_valid( level._last_person_to_throw_meat ) ) - { - return; - } - level._last_person_to_throw_meat thread maps/mp/zombies/_zm_powerups::powerup_vo( "minigun" ); - level thread maps/mp/zombies/_zm_powerups::minigun_weapon_powerup( level._last_person_to_throw_meat ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_minigun", undefined, undefined, 1 ); -} - -ammo_prize( trig ) -{ - while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) ) - { - wait 0,05; - } - if ( !isDefined( level.item_meat ) ) - { - return; - } - if ( isDefined( level._ammo_toss_cooldown ) && level._ammo_toss_cooldown ) - { - return; - } - playfx( level._effect[ "poltergeist" ], trig.origin ); - level thread ammo_toss_cooldown(); - level._last_person_to_throw_meat thread maps/mp/zombies/_zm_powerups::powerup_vo( "full_ammo" ); - level thread maps/mp/zombies/_zm_powerups::full_ammo_powerup( undefined, level._last_person_to_throw_meat ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_ammo", undefined, undefined, 1 ); -} - -minigun_toss_cooldown() -{ - level._minigun_toss_cooldown = 1; - if ( isDefined( level._minigun_icon ) ) - { - level._minigun_icon delete(); - } - waittill_any_or_timeout( 120, "meat_end" ); - playfx( level._effect[ "poltergeist" ], level._minigun_ring_trig.origin ); - level._minigun_icon = spawn( "script_model", level._minigun_ring_trig.origin ); - level._minigun_icon setmodel( getweaponmodel( "minigun_zm" ) ); - level._minigun_icon linkto( level._minigun_ring ); - level._minigun_icon setclientfield( "ring_glowfx", 1 ); - level._minigun_toss_cooldown = 0; -} - -ammo_toss_cooldown() -{ - level._ammo_toss_cooldown = 1; - if ( isDefined( level._ammo_icon ) ) - { - level._ammo_icon delete(); - } - waittill_any_or_timeout( 60, "meat_end" ); - playfx( level._effect[ "poltergeist" ], level._ammo_ring_trig.origin ); - level._ammo_icon = spawn( "script_model", level._ammo_ring_trig.origin ); - level._ammo_icon setmodel( "zombie_ammocan" ); - level._ammo_icon linkto( level._ammo_ring ); - level._ammo_icon setclientfield( "ring_glowfx", 1 ); - level._ammo_toss_cooldown = 0; -} - -wait_for_team_death( team ) -{ - level endon( "meat_end" ); - encounters_team = undefined; - while ( 1 ) - { - wait 1; - while ( isDefined( level._checking_for_save ) && level._checking_for_save ) - { - wait 0,1; - } - alive_team_players = get_alive_players_on_meat_team( team ); - while ( alive_team_players.size > 0 ) - { - encounters_team = alive_team_players[ 0 ]._encounters_team; - } - } - if ( !isDefined( encounters_team ) ) - { - return; - } - winning_team = "A"; - if ( encounters_team == "A" ) - { - winning_team = "B"; - } - level notify( "meat_end", winning_team ); -} - -check_should_save_player( team ) -{ - if ( !isDefined( level._meat_on_team ) ) - { - return 0; - } - level._checking_for_save = 1; - players = get_players_on_meat_team( team ); - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - if ( isDefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player ) - { - while ( isDefined( level.item_meat.meat_is_moving ) && !level.item_meat.meat_is_moving && isDefined( level._meat_splitter_activated ) || level._meat_splitter_activated && isDefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying ) - { - if ( level._meat_on_team != player._meat_team ) - { - break; - } - else if ( isDefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling && level._meat_on_team == player._meat_team ) - { - break; - } - else - { - wait 0,05; - } - } - if ( !isDefined( player ) ) - { - level._checking_for_save = 0; - return 0; - } - if ( isDefined( player.last_damage_from_zombie_or_player ) && !player.last_damage_from_zombie_or_player ) - { - level._checking_for_save = 0; - return 0; - } - if ( level._meat_on_team != player._meat_team && isDefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player ) - { - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - level thread revive_saved_player( player ); - return 1; - } - } - } - i++; - } - level._checking_for_save = 0; - return 0; -} - -watch_save_player() -{ - if ( !isDefined( level._meat_on_team ) ) - { - return 0; - } - if ( !isDefined( level._last_person_to_throw_meat ) || level._last_person_to_throw_meat != self ) - { - return 0; - } - level._checking_for_save = 1; - while ( isDefined( level.splitting_meat ) || level.splitting_meat && isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_moving ) || level.item_meat.meat_is_moving && isDefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying ) - { - if ( level._meat_on_team != self._meat_team ) - { - } - else if ( isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling && level._meat_on_team == self._meat_team ) - { - } - else - { - wait 0,05; - } - } - if ( level._meat_on_team != self._meat_team && isDefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == self ) - { - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - level thread revive_saved_player( self ); - return 1; - } - } - level._checking_for_save = 0; - return 0; -} - -revive_saved_player( player ) -{ - player endon( "disconnect" ); - player iprintlnbold( &"ZOMBIE_PLAYER_SAVED" ); - player playsound( level.zmb_laugh_alias ); - wait 0,25; - playfx( level._effect[ "poltergeist" ], player.origin ); - playsoundatposition( "zmb_bolt", player.origin ); - earthquake( 0,5, 0,75, player.origin, 1000 ); - player thread maps/mp/zombies/_zm_laststand::auto_revive( player ); - player._saved_by_throw++; - level._checking_for_save = 0; -} - -get_game_module_players( player ) -{ - return get_players_on_meat_team( player._meat_team ); -} - -item_meat_spawn( origin ) -{ - org = origin; - player = get_players()[ 0 ]; - player._spawning_meat = 1; - player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( 0, 0, 1 ) ); - playsoundatposition( "zmb_spawn_powerup", org ); - wait 0,1; - player._spawning_meat = undefined; -} - -init_item_meat( gametype ) -{ - if ( gametype == "zgrief" ) - { - set_gamemode_var_once( "item_meat_name", "item_meat_zm" ); - set_gamemode_var_once( "item_meat_model", "t6_wpn_zmb_meat_world" ); - } - else - { - set_gamemode_var_once( "item_meat_name", "item_head_zm" ); - set_gamemode_var_once( "item_meat_model", "t6_wpn_zmb_severedhead_world" ); - } - precacheitem( get_gamemode_var( "item_meat_name" ) ); - set_gamemode_var_once( "start_item_meat_name", get_gamemode_var( "item_meat_name" ) ); - level.meat_weaponidx = getweaponindexfromname( get_gamemode_var( "item_meat_name" ) ); - level.meat_pickupsound = getweaponpickupsound( level.meat_weaponidx ); - level.meat_pickupsoundplayer = getweaponpickupsoundplayer( level.meat_weaponidx ); -} - -meat_intro( launch_spot ) -{ - flag_wait( "start_encounters_match_logic" ); - wait 3; - level thread multi_launch( launch_spot ); - launch_meat( launch_spot ); - drop_meat( level._meat_start_point ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_drop", undefined, undefined, 1 ); -} - -launch_meat( launch_spot ) -{ - level waittill( "launch_meat" ); - spots = getstructarray( launch_spot, "targetname" ); - if ( isDefined( spots ) && spots.size > 0 ) - { - spot = random( spots ); - meat = spawn( "script_model", spot.origin ); - meat setmodel( "tag_origin" ); - wait_network_frame(); - playfxontag( level._effect[ "fw_trail" ], meat, "tag_origin" ); - meat playloopsound( "zmb_souls_loop", 0,75 ); - dest = spot; - while ( isDefined( dest ) && isDefined( dest.target ) ) - { - new_dest = getstruct( dest.target, "targetname" ); - dest = new_dest; - dist = distance( new_dest.origin, meat.origin ); - time = dist / 700; - meat moveto( new_dest.origin, time ); - meat waittill( "movedone" ); - } - meat playsound( "zmb_souls_end" ); - playfx( level._effect[ "fw_burst" ], meat.origin ); - wait randomfloatrange( 0,2, 0,5 ); - meat playsound( "zmb_souls_end" ); - playfx( level._effect[ "fw_burst" ], meat.origin + ( randomintrange( 50, 150 ), randomintrange( 50, 150 ), randomintrange( -20, 20 ) ) ); - wait randomfloatrange( 0,5, 0,75 ); - meat playsound( "zmb_souls_end" ); - playfx( level._effect[ "fw_burst" ], meat.origin + ( randomintrange( -150, -50 ), randomintrange( -150, 50 ), randomintrange( -20, 20 ) ) ); - wait randomfloatrange( 0,5, 0,75 ); - meat playsound( "zmb_souls_end" ); - playfx( level._effect[ "fw_burst" ], meat.origin ); - meat delete(); - } -} - -multi_launch( launch_spot ) -{ - spots = getstructarray( launch_spot, "targetname" ); - if ( isDefined( spots ) && spots.size > 0 ) - { - x = 0; - while ( x < 3 ) - { - i = 0; - while ( i < spots.size ) - { - delay = randomfloatrange( 0,1, 0,25 ); - level thread fake_launch( spots[ i ], delay ); - i++; - } - wait randomfloatrange( 0,25, 0,75 ); - if ( x > 1 ) - { - level notify( "launch_meat" ); - } - x++; - } - } - else wait randomfloatrange( 0,25, 0,75 ); - level notify( "launch_meat" ); -} - -fake_launch( launch_spot, delay ) -{ - wait delay; - wait randomfloatrange( 0,1, 4 ); - meat = spawn( "script_model", launch_spot.origin + ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ) ); - meat setmodel( "tag_origin" ); - wait_network_frame(); - playfxontag( level._effect[ "fw_trail_cheap" ], meat, "tag_origin" ); - meat playloopsound( "zmb_souls_loop", 0,75 ); - dest = launch_spot; - while ( isDefined( dest ) && isDefined( dest.target ) ) - { - random_offset = ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ); - new_dest = getstruct( dest.target, "targetname" ); - dest = new_dest; - dist = distance( new_dest.origin + random_offset, meat.origin ); - time = dist / 700; - meat moveto( new_dest.origin + random_offset, time ); - meat waittill( "movedone" ); - } - meat playsound( "zmb_souls_end" ); - playfx( level._effect[ "fw_pre_burst" ], meat.origin ); - meat delete(); -} - -drop_meat( drop_spot ) -{ - meat = spawn( "script_model", drop_spot + vectorScale( ( 0, 0, 1 ), 600 ) ); - meat setmodel( "tag_origin" ); - dist = distance( meat.origin, drop_spot ); - time = dist / 400; - wait 2; - meat moveto( drop_spot, time ); - wait_network_frame(); - playfxontag( level._effect[ "fw_drop" ], meat, "tag_origin" ); - meat waittill( "movedone" ); - playfx( level._effect[ "fw_impact" ], drop_spot ); - level notify( "reset_meat" ); - meat delete(); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_game_module_standard.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_game_module_standard.gsc deleted file mode 100644 index 93d5954..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_game_module_standard.gsc +++ /dev/null @@ -1 +0,0 @@ -//empty script \ No newline at end of file diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_game_module_utility.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_game_module_utility.gsc deleted file mode 100644 index b3820d3..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_game_module_utility.gsc +++ /dev/null @@ -1,43 +0,0 @@ -//checked matches cerberus output -#include maps/mp/zombies/_zm_game_module_meat; -#include maps/mp/zombies/_zm_game_module_meat_utility; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; - -init_item_meat() //checked matches cerberus output -{ - level.item_meat_name = "item_meat_zm"; - precacheitem( level.item_meat_name ); -} - -move_ring( ring ) //checked changed to match cerberus output -{ - positions = getstructarray( ring.target, "targetname" ); - positions = array_randomize( positions ); - level endon( "end_game" ); - while ( 1 ) - { - foreach ( position in positions ) - { - self moveto( position.origin, randomintrange( 30, 45 ) ); - self waittill( "movedone" ); - } - } -} - -rotate_ring( forward ) //checked matches cerberus output -{ - level endon( "end_game" ); - dir = -360; - if ( forward ) - { - dir = 360; - } - while ( 1 ) - { - self rotateyaw( dir, 9 ); - wait 9; - } -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_melee_weapon.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_melee_weapon.gsc deleted file mode 100644 index ed494ee..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_melee_weapon.gsc +++ /dev/null @@ -1,627 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_pers_upgrades_functions; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) -{ - precacheitem( weapon_name ); - precacheitem( flourish_weapon_name ); - add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); - melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" ); - i = 0; - while ( i < melee_weapon_triggers.size ) - { - knife_model = getent( melee_weapon_triggers[ i ].target, "targetname" ); - if ( isDefined( knife_model ) ) - { - knife_model hide(); - } - melee_weapon_triggers[ i ] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); - if ( isDefined( level.monolingustic_prompt_format ) && !level.monolingustic_prompt_format ) - { - melee_weapon_triggers[ i ] sethintstring( hint_string, cost ); - if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons ) - { - cursor_hint = "HINT_WEAPON"; - cursor_hint_weapon = weapon_name; - melee_weapon_triggers[ i ] setcursorhint( cursor_hint, cursor_hint_weapon ); - } - else - { - melee_weapon_triggers[ i ] setcursorhint( "HINT_NOICON" ); - } - } - else - { - weapon_display = get_weapon_display_name( weapon_name ); - hint_string = &"ZOMBIE_WEAPONCOSTONLY"; - melee_weapon_triggers[ i ] sethintstring( hint_string, weapon_display, cost ); - if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons ) - { - cursor_hint = "HINT_WEAPON"; - cursor_hint_weapon = weapon_name; - melee_weapon_triggers[ i ] setcursorhint( cursor_hint, cursor_hint_weapon ); - break; - } - else - { - melee_weapon_triggers[ i ] setcursorhint( "HINT_NOICON" ); - } - } - melee_weapon_triggers[ i ] usetriggerrequirelookat(); - i++; - } - melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" ); - i = 0; - while ( i < melee_weapon_structs.size ) - { - prepare_stub( melee_weapon_structs[ i ].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); - i++; - } - register_melee_weapon_for_level( weapon_name ); - if ( !isDefined( level.ballistic_weapon_name ) ) - { - level.ballistic_weapon_name = []; - } - level.ballistic_weapon_name[ weapon_name ] = ballistic_weapon_name; - if ( !isDefined( level.ballistic_upgraded_weapon_name ) ) - { - level.ballistic_upgraded_weapon_name = []; - } - level.ballistic_upgraded_weapon_name[ weapon_name ] = ballistic_upgraded_weapon_name; -/# - if ( !isDefined( level.zombie_weapons[ weapon_name ] ) ) - { - if ( isDefined( level.devgui_add_weapon ) ) - { - [[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost ); -#/ - } - } -} - -prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) -{ - if ( isDefined( stub ) ) - { - if ( isDefined( level.monolingustic_prompt_format ) && !level.monolingustic_prompt_format ) - { - stub.hint_string = hint_string; - if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons ) - { - stub.cursor_hint = "HINT_WEAPON"; - stub.cursor_hint_weapon = weapon_name; - } - else - { - stub.cursor_hint = "HINT_NOICON"; - stub.cursor_hint_weapon = undefined; - } - } - else - { - stub.hint_parm1 = get_weapon_display_name( weapon_name ); - stub.hint_parm2 = cost; - stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; - if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons ) - { - stub.cursor_hint = "HINT_WEAPON"; - stub.cursor_hint_weapon = weapon_name; - } - else - { - stub.cursor_hint = "HINT_NOICON"; - stub.cursor_hint_weapon = undefined; - } - } - stub.cost = cost; - stub.weapon_name = weapon_name; - stub.vo_dialog_id = vo_dialog_id; - stub.flourish_weapon_name = flourish_weapon_name; - stub.ballistic_weapon_name = ballistic_weapon_name; - stub.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; - stub.trigger_func = ::melee_weapon_think; - stub.flourish_fn = flourish_fn; - } -} - -add_stub( stub, weapon_name ) -{ - melee_weapon = undefined; - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( level._melee_weapons[ i ].weapon_name == weapon_name ) - { - melee_weapon = level._melee_weapons[ i ]; - break; - } - else - { - i++; - } - } - if ( isDefined( stub ) && isDefined( melee_weapon ) ) - { - prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn ); - } -} - -give_melee_weapon_by_name( weapon_name ) -{ - melee_weapon = undefined; - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( level._melee_weapons[ i ].weapon_name == weapon_name ) - { - melee_weapon = level._melee_weapons[ i ]; - break; - } - else - { - i++; - } - } - if ( isDefined( melee_weapon ) ) - { - self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined ); - } -} - -add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) -{ - melee_weapon = spawnstruct(); - melee_weapon.weapon_name = weapon_name; - melee_weapon.flourish_weapon_name = flourish_weapon_name; - melee_weapon.ballistic_weapon_name = ballistic_weapon_name; - melee_weapon.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; - melee_weapon.cost = cost; - melee_weapon.wallbuy_targetname = wallbuy_targetname; - melee_weapon.hint_string = hint_string; - melee_weapon.vo_dialog_id = vo_dialog_id; - melee_weapon.flourish_fn = flourish_fn; - if ( !isDefined( level._melee_weapons ) ) - { - level._melee_weapons = []; - } - level._melee_weapons[ level._melee_weapons.size ] = melee_weapon; -} - -player_can_see_weapon_prompt( weapon_name ) -{ - if ( is_true( level._allow_melee_weapon_switching ) ) - { - return 1; - } - if ( isDefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) ) - { - return 0; - } - return 1; -} - -spectator_respawn_all() -{ - i = 0; - while ( i < level._melee_weapons.size ) - { - self spectator_respawn( level._melee_weapons[ i ].wallbuy_targetname, level._melee_weapons[ i ].weapon_name ); - i++; - } -} - -spectator_respawn( wallbuy_targetname, weapon_name ) -{ - melee_triggers = getentarray( wallbuy_targetname, "targetname" ); - players = get_players(); - i = 0; - while ( i < melee_triggers.size ) - { - melee_triggers[ i ] setvisibletoall(); - while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - j = 0; - while ( j < players.size ) - { - if ( !players[ j ] player_can_see_weapon_prompt( weapon_name ) ) - { - melee_triggers[ i ] setinvisibletoplayer( players[ j ] ); - } - j++; - } - } - i++; - } -} - -trigger_hide_all() -{ - i = 0; - while ( i < level._melee_weapons.size ) - { - self trigger_hide( level._melee_weapons[ i ].wallbuy_targetname ); - i++; - } -} - -trigger_hide( wallbuy_targetname ) -{ - melee_triggers = getentarray( wallbuy_targetname, "targetname" ); - i = 0; - while ( i < melee_triggers.size ) - { - melee_triggers[ i ] setinvisibletoplayer( self ); - i++; - } -} - -has_any_ballistic_knife() -{ - if ( self hasweapon( "knife_ballistic_zm" ) ) - { - return 1; - } - if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) - { - return 1; - } - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( self hasweapon( level._melee_weapons[ i ].ballistic_weapon_name ) ) - { - return 1; - } - if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) ) - { - return 1; - } - i++; - } - return 0; -} - -has_upgraded_ballistic_knife() -{ - if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) - { - return 1; - } - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) ) - { - return 1; - } - i++; - } - return 0; -} - -give_ballistic_knife( weapon_string, upgraded ) -{ - current_melee_weapon = self get_player_melee_weapon(); - if ( isDefined( current_melee_weapon ) ) - { - if ( upgraded && isDefined( level.ballistic_upgraded_weapon_name ) && isDefined( level.ballistic_upgraded_weapon_name[ current_melee_weapon ] ) ) - { - weapon_string = level.ballistic_upgraded_weapon_name[ current_melee_weapon ]; - } - if ( !upgraded && isDefined( level.ballistic_weapon_name ) && isDefined( level.ballistic_weapon_name[ current_melee_weapon ] ) ) - { - weapon_string = level.ballistic_weapon_name[ current_melee_weapon ]; - } - } - return weapon_string; -} - -change_melee_weapon( weapon_name, current_weapon ) -{ - current_melee_weapon = self get_player_melee_weapon(); - if ( isDefined( current_melee_weapon ) && current_melee_weapon != weapon_name ) - { - self takeweapon( current_melee_weapon ); - unacquire_weapon_toggle( current_melee_weapon ); - } - self set_player_melee_weapon( weapon_name ); - had_ballistic = 0; - had_ballistic_upgraded = 0; - ballistic_was_primary = 0; - primaryweapons = self getweaponslistprimaries(); - i = 0; - while ( i < primaryweapons.size ) - { - primary_weapon = primaryweapons[ i ]; - if ( issubstr( primary_weapon, "knife_ballistic_" ) ) - { - had_ballistic = 1; - if ( primary_weapon == current_weapon ) - { - ballistic_was_primary = 1; - } - self notify( "zmb_lost_knife" ); - self takeweapon( primary_weapon ); - unacquire_weapon_toggle( primary_weapon ); - if ( issubstr( primary_weapon, "upgraded" ) ) - { - had_ballistic_upgraded = 1; - } - } - i++; - } - if ( had_ballistic ) - { - if ( had_ballistic_upgraded ) - { - new_ballistic = level.ballistic_upgraded_weapon_name[ weapon_name ]; - if ( ballistic_was_primary ) - { - current_weapon = new_ballistic; - } - self giveweapon( new_ballistic, 0, self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) ); - } - else - { - new_ballistic = level.ballistic_weapon_name[ weapon_name ]; - if ( ballistic_was_primary ) - { - current_weapon = new_ballistic; - } - self giveweapon( new_ballistic, 0 ); - } - } - return current_weapon; -} - -melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) -{ - self.first_time_triggered = 0; - while ( isDefined( self.stub ) ) - { - self endon( "kill_trigger" ); - if ( isDefined( self.stub.first_time_triggered ) ) - { - self.first_time_triggered = self.stub.first_time_triggered; - } - weapon_name = self.stub.weapon_name; - cost = self.stub.cost; - flourish_fn = self.stub.flourish_fn; - vo_dialog_id = self.stub.vo_dialog_id; - flourish_weapon_name = self.stub.flourish_weapon_name; - ballistic_weapon_name = self.stub.ballistic_weapon_name; - ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name; - players = getplayers(); - while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - i = 0; - while ( i < players.size ) - { - if ( !players[ i ] player_can_see_weapon_prompt( weapon_name ) ) - { - self setinvisibletoplayer( players[ i ] ); - } - i++; - } - } - } - for ( ;; ) - { - self waittill( "trigger", player ); - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - continue; - } - else if ( player in_revive_trigger() ) - { - wait 0,1; - continue; - } - else if ( player isthrowinggrenade() ) - { - wait 0,1; - continue; - } - else if ( player.is_drinking > 0 ) - { - wait 0,1; - continue; - } - else if ( player hasweapon( weapon_name ) || player has_powerup_weapon() ) - { - wait 0,1; - continue; - } - else - { - if ( player isswitchingweapons() ) - { - wait 0,1; - break; - } - else current_weapon = player getcurrentweapon(); - if ( !is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) && player has_powerup_weapon() ) - { - wait 0,1; - break; - } - else - { - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( player.intermission ) && player.intermission ) - { - wait 0,1; - break; - } - else - { - player_has_weapon = player hasweapon( weapon_name ); - if ( !player_has_weapon ) - { - cost = self.stub.cost; - if ( player maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() ) - { - cost = int( cost / 2 ); - } - if ( player.score >= cost ) - { - if ( self.first_time_triggered == 0 ) - { - model = getent( self.target, "targetname" ); - if ( isDefined( model ) ) - { - model thread melee_weapon_show( player ); - } - else - { - if ( isDefined( self.clientfieldname ) ) - { - level setclientfield( self.clientfieldname, 1 ); - } - } - self.first_time_triggered = 1; - if ( isDefined( self.stub ) ) - { - self.stub.first_time_triggered = 1; - } - } - player maps/mp/zombies/_zm_score::minus_to_player_score( cost, 1 ); - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" ); - player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self ); - } - else - { - play_sound_on_ent( "no_purchase" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 ); - } - break; - } - else - { - if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - self setinvisibletoplayer( player ); - } - } - } - } - } - } -} - -melee_weapon_show( player ) -{ - player_angles = vectorToAngle( player.origin - self.origin ); - player_yaw = player_angles[ 1 ]; - weapon_yaw = self.angles[ 1 ]; - yaw_diff = angleClamp180( player_yaw - weapon_yaw ); - if ( yaw_diff > 0 ) - { - yaw = weapon_yaw - 90; - } - else - { - yaw = weapon_yaw + 90; - } - self.og_origin = self.origin; - self.origin += anglesToForward( ( 0, yaw, 0 ) ) * 8; - wait 0,05; - self show(); - play_sound_at_pos( "weapon_show", self.origin, self ); - time = 1; - self moveto( self.og_origin, time ); -} - -give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger ) -{ - if ( isDefined( flourish_fn ) ) - { - self thread [[ flourish_fn ]](); - } - gun = self do_melee_weapon_flourish_begin( flourish_weapon_name ); - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id ); - self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); - self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission ) - { - return; - } - if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - if ( isDefined( trigger ) ) - { - trigger setinvisibletoplayer( self ); - } - self trigger_hide_all(); - } -} - -do_melee_weapon_flourish_begin( flourish_weapon_name ) -{ - self increment_is_drinking(); - self disable_player_move_states( 1 ); - gun = self getcurrentweapon(); - weapon = flourish_weapon_name; - self giveweapon( weapon ); - self switchtoweapon( weapon ); - return gun; -} - -do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) -{ -/# - assert( !is_zombie_perk_bottle( gun ) ); -#/ -/# - assert( gun != level.revive_tool ); -#/ - self enable_player_move_states(); - weapon = flourish_weapon_name; - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission ) - { - self takeweapon( weapon ); - self.lastactiveweapon = "none"; - return; - } - self takeweapon( weapon ); - self giveweapon( weapon_name ); - gun = change_melee_weapon( weapon_name, gun ); - if ( self hasweapon( "knife_zm" ) ) - { - self takeweapon( "knife_zm" ); - } - if ( self is_multiple_drinking() ) - { - self decrement_is_drinking(); - return; - } - else if ( gun == "knife_zm" ) - { - self switchtoweapon( weapon_name ); - self decrement_is_drinking(); - return; - } - else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) - { - self switchtoweapon( gun ); - } - else - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - } - self waittill( "weapon_change_complete" ); - if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.intermission ) && !self.intermission ) - { - self decrement_is_drinking(); - } -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_riotshield.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_riotshield.gsc deleted file mode 100644 index a9a1d07..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_riotshield.gsc +++ /dev/null @@ -1,665 +0,0 @@ -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_weap_riotshield; -#include common_scripts/utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; - -init() -{ - level.riotshield_name = "riotshield_zm"; - level.deployedshieldmodel = []; - level.stowedshieldmodel = []; - level.carriedshieldmodel = []; - level.deployedshieldmodel[ 0 ] = "t6_wpn_zmb_shield_world"; - level.deployedshieldmodel[ 2 ] = "t6_wpn_zmb_shield_dmg1_world"; - level.deployedshieldmodel[ 3 ] = "t6_wpn_zmb_shield_dmg2_world"; - level.stowedshieldmodel[ 0 ] = "t6_wpn_zmb_shield_stow"; - level.stowedshieldmodel[ 2 ] = "t6_wpn_zmb_shield_dmg1_stow"; - level.stowedshieldmodel[ 3 ] = "t6_wpn_zmb_shield_dmg2_stow"; - level.carriedshieldmodel[ 0 ] = "t6_wpn_zmb_shield_world"; - level.carriedshieldmodel[ 2 ] = "t6_wpn_zmb_shield_dmg1_world"; - level.carriedshieldmodel[ 3 ] = "t6_wpn_zmb_shield_dmg2_world"; - level.viewshieldmodel[ 0 ] = "t6_wpn_zmb_shield_view"; - level.viewshieldmodel[ 2 ] = "t6_wpn_zmb_shield_dmg1_view"; - level.viewshieldmodel[ 3 ] = "t6_wpn_zmb_shield_dmg2_view"; - precachemodel( level.stowedshieldmodel[ 0 ] ); - precachemodel( level.stowedshieldmodel[ 2 ] ); - precachemodel( level.stowedshieldmodel[ 3 ] ); - precachemodel( level.carriedshieldmodel[ 0 ] ); - precachemodel( level.carriedshieldmodel[ 2 ] ); - precachemodel( level.carriedshieldmodel[ 3 ] ); - precachemodel( level.viewshieldmodel[ 0 ] ); - precachemodel( level.viewshieldmodel[ 2 ] ); - precachemodel( level.viewshieldmodel[ 3 ] ); - level.riotshield_placement_zoffset = 26; -} - -attachriotshield( model, tag ) -{ - if ( isDefined( self.prev_shield_model ) && isDefined( self.prev_shield_tag ) ) - { - self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); - } - self.prev_shield_model = model; - self.prev_shield_tag = tag; - if ( isDefined( self.prev_shield_model ) && isDefined( self.prev_shield_tag ) ) - { - self attachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); - } -} - -removeriotshield() -{ - if ( isDefined( self.prev_shield_model ) && isDefined( self.prev_shield_tag ) ) - { - self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); - } - self.prev_shield_model = undefined; - self.prev_shield_tag = undefined; - if ( self getcurrentweapon() != level.riotshield_name ) - { - return; - } - self setheldweaponmodel( 0 ); -} - -setriotshieldviewmodel( modelnum ) -{ - self.prev_shield_viewmodel = modelnum; - if ( self getcurrentweapon() != level.riotshield_name ) - { - return; - } - if ( isDefined( self.prev_shield_viewmodel ) ) - { - self setheldweaponmodel( self.prev_shield_viewmodel ); - } - else - { - self setheldweaponmodel( 0 ); - } -} - -specialriotshieldviewmodel() -{ - if ( self getcurrentweapon() != level.riotshield_name ) - { - return; - } - self setheldweaponmodel( 3 ); -} - -restoreriotshieldviewmodel() -{ - if ( self getcurrentweapon() != level.riotshield_name ) - { - return; - } - if ( isDefined( self.prev_shield_viewmodel ) ) - { - self setheldweaponmodel( self.prev_shield_viewmodel ); - } - else - { - self setheldweaponmodel( 0 ); - } -} - -updateriotshieldmodel() -{ - if ( !isDefined( self.shield_damage_level ) ) - { - if ( isDefined( self.player_shield_reset_health ) ) - { - self [[ self.player_shield_reset_health ]](); - } - } - update = 0; - if ( !isDefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level ) - { - self.prev_shield_damage_level = self.shield_damage_level; - update = 1; - } - if ( !isDefined( self.prev_shield_placement ) || self.prev_shield_placement != self.shield_placement ) - { - self.prev_shield_placement = self.shield_placement; - update = 1; - } - if ( update ) - { - if ( self.prev_shield_placement == 0 ) - { - self attachriotshield(); - return; - } - else if ( self.prev_shield_placement == 1 ) - { - self attachriotshield( level.carriedshieldmodel[ self.prev_shield_damage_level ], "tag_weapon_left" ); - self setriotshieldviewmodel( self.prev_shield_damage_level ); - return; - } - else if ( self.prev_shield_placement == 2 ) - { - self attachriotshield( level.stowedshieldmodel[ self.prev_shield_damage_level ], "tag_stowed_back" ); - return; - } - else - { - if ( self.prev_shield_placement == 3 ) - { - self attachriotshield(); - if ( isDefined( self.shield_ent ) ) - { - self.shield_ent setmodel( level.deployedshieldmodel[ self.prev_shield_damage_level ] ); - } - } - } - } -} - -updatestandaloneriotshieldmodel() -{ - update = 0; - if ( !isDefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level ) - { - self.prev_shield_damage_level = self.shield_damage_level; - update = 1; - } - if ( update ) - { - self setmodel( level.deployedshieldmodel[ self.prev_shield_damage_level ] ); - } -} - -watchshieldlaststand() -{ - self endon( "death" ); - self endon( "disconnect" ); - self notify( "watchShieldLastStand" ); - self endon( "watchShieldLastStand" ); - while ( 1 ) - { - self waittill( "weapons_taken_for_last_stand" ); - self.riotshield_hidden = 0; - if ( isDefined( self.hasriotshield ) && self.hasriotshield ) - { - if ( self.prev_shield_placement == 1 || self.prev_shield_placement == 2 ) - { - self.riotshield_hidden = 2; - self.shield_placement = 0; - self updateriotshieldmodel(); - } - } - str_notify = self waittill_any_return( "player_revived", "bled_out" ); - if ( str_notify == "player_revived" ) - { - if ( isDefined( self.riotshield_hidden ) && self.riotshield_hidden > 0 ) - { - self.shield_placement = self.riotshield_hidden; - self updateriotshieldmodel(); - } - } - else - { - self maps/mp/zombies/_zm_weap_riotshield::player_take_riotshield(); - } - self.riotshield_hidden = undefined; - } -} - -trackriotshield() -{ - self endon( "death" ); - self endon( "disconnect" ); - self.hasriotshield = self hasweapon( level.riotshield_name ); - self.hasriotshieldequipped = self getcurrentweapon() == level.riotshield_name; - self.shield_placement = 0; - if ( self.hasriotshield ) - { - if ( self.hasriotshieldequipped ) - { - self.shield_placement = 1; - self updateriotshieldmodel(); - } - else - { - self.shield_placement = 2; - self updateriotshieldmodel(); - } - } - for ( ;; ) - { - self waittill( "weapon_change", newweapon ); - if ( newweapon == level.riotshield_name ) - { - if ( self.hasriotshieldequipped ) - { - continue; - } - else if ( isDefined( self.riotshieldentity ) ) - { - self notify( "destroy_riotshield" ); - } - self.shield_placement = 1; - self updateriotshieldmodel(); - if ( self.hasriotshield ) - { - break; - } - self.hasriotshield = 1; - self.hasriotshieldequipped = 1; - continue; - } - else if ( self ismantling() && newweapon == "none" ) - { - continue; - } - else - { - if ( self.hasriotshieldequipped ) - { -/# - assert( self.hasriotshield ); -#/ - self.hasriotshield = self hasweapon( level.riotshield_name ); - if ( isDefined( self.riotshield_hidden ) && self.riotshield_hidden ) - { - } - else - { - if ( self.hasriotshield ) - { - self.shield_placement = 2; - break; - } - else if ( isDefined( self.shield_ent ) ) - { -/# - assert( self.shield_placement == 3 ); -#/ - break; - } - else - { - self.shield_placement = 0; - } - } - self updateriotshieldmodel(); - self.hasriotshieldequipped = 0; - break; - } - else if ( self.hasriotshield ) - { - if ( !self hasweapon( level.riotshield_name ) ) - { - self.shield_placement = 0; - self updateriotshieldmodel(); - self.hasriotshield = 0; - } - break; - } - else - { - if ( self hasweapon( level.riotshield_name ) ) - { - self.shield_placement = 2; - self updateriotshieldmodel(); - self.hasriotshield = 1; - } - } - } - } -} - -trackequipmentchange() -{ - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "equipment_dropped", equipname ); - self notify( "weapon_change" ); - } -} - -updateriotshieldplacement() -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "deploy_riotshield" ); - self endon( "start_riotshield_deploy" ); - self endon( "weapon_change" ); - while ( 1 ) - { - placement = self canplaceriotshield( "raise_riotshield" ); - if ( placement[ "result" ] && riotshielddistancetest( placement[ "origin" ] ) ) - { - self restoreriotshieldviewmodel(); - self setplacementhint( 1 ); - } - else - { - self specialriotshieldviewmodel(); - self setplacementhint( 0 ); - } - wait 0,05; - } -} - -startriotshielddeploy() -{ - self notify( "start_riotshield_deploy" ); - self thread updateriotshieldplacement(); - self thread watchriotshielddeploy(); -} - -spawnriotshieldcover( origin, angles ) -{ - shield_ent = spawn( "script_model", origin, 1 ); - shield_ent.angles = angles; - shield_ent setowner( self ); - shield_ent.owner = self; - shield_ent.owner.shield_ent = shield_ent; - shield_ent.isriotshield = 1; - self.shield_placement = 3; - self updateriotshieldmodel(); - shield_ent setscriptmoverflag( 0 ); - self thread maps/mp/zombies/_zm_buildables::delete_on_disconnect( shield_ent, "destroy_riotshield", 1 ); - maps/mp/zombies/_zm_equipment::destructible_equipment_list_add( shield_ent ); - return shield_ent; -} - -watchriotshielddeploy() -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "start_riotshield_deploy" ); - self waittill( "deploy_riotshield", deploy_attempt ); - self restoreriotshieldviewmodel(); - self setplacementhint( 1 ); - placement_hint = 0; - if ( deploy_attempt ) - { - placement = self canplaceriotshield( "deploy_riotshield" ); - if ( placement[ "result" ] && riotshielddistancetest( placement[ "origin" ] ) && self check_plant_position( placement[ "origin" ], placement[ "angles" ] ) ) - { - self doriotshielddeploy( placement[ "origin" ], placement[ "angles" ] ); - } - else - { - placement_hint = 1; - clip_max_ammo = weaponclipsize( level.riotshield_name ); - self setweaponammoclip( level.riotshield_name, clip_max_ammo ); - } - } - else - { - placement_hint = 1; - } - if ( placement_hint ) - { - self setriotshieldfailhint(); - } -} - -check_plant_position( origin, angles ) -{ - if ( isDefined( level.equipment_safe_to_drop ) ) - { - ret = 1; - test_ent = spawn( "script_model", origin ); - test_ent setmodel( level.deployedshieldmodel[ 0 ] ); - test_ent.angles = angles; - if ( !( self [[ level.equipment_safe_to_drop ]]( test_ent ) ) ) - { - ret = 0; - } - test_ent delete(); - return ret; - } - return 1; -} - -doriotshielddeploy( origin, angles ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "start_riotshield_deploy" ); - self notify( "deployed_riotshield" ); - self maps/mp/zombies/_zm_buildables::track_placed_buildables( level.riotshield_name ); - if ( isDefined( self.current_equipment ) && self.current_equipment == level.riotshield_name ) - { - self maps/mp/zombies/_zm_equipment::equipment_to_deployed( level.riotshield_name ); - } - zoffset = level.riotshield_placement_zoffset; - shield_ent = self spawnriotshieldcover( origin + ( 0, 0, zoffset ), angles ); - item_ent = deployriotshield( self, shield_ent ); - primaries = self getweaponslistprimaries(); -/# - assert( isDefined( item_ent ) ); - assert( !isDefined( self.riotshieldretrievetrigger ) ); - assert( !isDefined( self.riotshieldentity ) ); -#/ - self maps/mp/zombies/_zm_weapons::switch_back_primary_weapon( primaries[ 0 ] ); - if ( isDefined( level.equipment_planted ) ) - { - self [[ level.equipment_planted ]]( shield_ent, level.riotshield_name, self ); - } - if ( isDefined( level.equipment_safe_to_drop ) ) - { - if ( !( self [[ level.equipment_safe_to_drop ]]( shield_ent ) ) ) - { - self notify( "destroy_riotshield" ); - shield_ent delete(); - item_ent delete(); - return; - } - } - self.riotshieldretrievetrigger = item_ent; - self.riotshieldentity = shield_ent; - self thread watchdeployedriotshieldents(); - self thread deleteshieldondamage( self.riotshieldentity ); - self thread deleteshieldmodelonweaponpickup( self.riotshieldretrievetrigger ); - self thread deleteriotshieldonplayerdeath(); - self thread watchshieldtriggervisibility( self.riotshieldretrievetrigger ); - self.riotshieldentity thread watchdeployedriotshielddamage(); - return shield_ent; -} - -riotshielddistancetest( origin ) -{ -/# - assert( isDefined( origin ) ); -#/ - min_dist_squared = getDvarFloat( "riotshield_deploy_limit_radius" ); - min_dist_squared *= min_dist_squared; - i = 0; - while ( i < level.players.size ) - { - if ( isDefined( level.players[ i ].riotshieldentity ) ) - { - dist_squared = distancesquared( level.players[ i ].riotshieldentity.origin, origin ); - if ( min_dist_squared > dist_squared ) - { -/# - println( "Shield placement denied! Failed distance check to other riotshields." ); -#/ - return 0; - } - } - i++; - } - return 1; -} - -watchdeployedriotshieldents() -{ -/# - assert( isDefined( self.riotshieldretrievetrigger ) ); - assert( isDefined( self.riotshieldentity ) ); -#/ - riotshieldretrievetrigger = self.riotshieldretrievetrigger; - riotshieldentity = self.riotshieldentity; - self waittill_any( "destroy_riotshield", "disconnect", "riotshield_zm_taken" ); - if ( isDefined( self ) ) - { - self.shield_placement = 0; - self updateriotshieldmodel(); - } - if ( isDefined( riotshieldretrievetrigger ) ) - { - riotshieldretrievetrigger delete(); - } - if ( isDefined( riotshieldentity ) ) - { - riotshieldentity delete(); - } -} - -watchdeployedriotshielddamage() -{ - self endon( "death" ); - damagemax = getDvarInt( "riotshield_deployed_health" ); - self.damagetaken = 0; - while ( 1 ) - { - self.maxhealth = 100000; - self.health = self.maxhealth; - self waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, idflags ); - if ( isDefined( level.players_can_damage_riotshields ) && !level.players_can_damage_riotshields ) - { - continue; - } - if ( !isDefined( attacker ) || !isplayer( attacker ) ) - { - continue; - } -/# - if ( isDefined( self.owner ) ) - { - assert( isDefined( self.owner.team ) ); - } -#/ - while ( is_encounter() && attacker.team == self.owner.team && attacker != self.owner ) - { - continue; - } - if ( isDefined( level.riotshield_damage_callback ) ) - { - self.owner [[ level.riotshield_damage_callback ]]( damage, 0 ); - continue; - } - else - { - if ( type == "MOD_MELEE" ) - { - damage *= getDvarFloat( "riotshield_melee_damage_scale" ); - } - else if ( type == "MOD_PISTOL_BULLET" || type == "MOD_RIFLE_BULLET" ) - { - damage *= getDvarFloat( "riotshield_bullet_damage_scale" ); - } - else - { - if ( type != "MOD_GRENADE" && type != "MOD_GRENADE_SPLASH" && type != "MOD_EXPLOSIVE" && type != "MOD_EXPLOSIVE_SPLASH" || type == "MOD_PROJECTILE" && type == "MOD_PROJECTILE_SPLASH" ) - { - damage *= getDvarFloat( "riotshield_explosive_damage_scale" ); - break; - } - else - { - if ( type == "MOD_IMPACT" ) - { - damage *= getDvarFloat( "riotshield_projectile_damage_scale" ); - } - } - } - self.damagetaken += damage; - if ( self.damagetaken >= damagemax ) - { - self damagethendestroyriotshield(); - } - } - } -} - -damagethendestroyriotshield() -{ - self endon( "death" ); - self.owner.riotshieldretrievetrigger delete(); - self notsolid(); - self setclientflag( 14 ); - wait getDvarFloat( "riotshield_destroyed_cleanup_time" ); - self.owner notify( "destroy_riotshield" ); -} - -deleteshieldondamage( shield_ent ) -{ - shield_ent waittill( "death" ); - self notify( "destroy_riotshield" ); -} - -deleteshieldmodelonweaponpickup( shield_trigger ) -{ - shield_trigger waittill( "trigger", player ); - self maps/mp/zombies/_zm_equipment::equipment_from_deployed( level.riotshield_name ); - self notify( "destroy_riotshield" ); - if ( self != player ) - { - if ( isDefined( level.transferriotshield ) ) - { - [[ level.transferriotshield ]]( self, player ); - } - } -} - -watchshieldtriggervisibility( trigger ) -{ - self endon( "death" ); - trigger endon( "death" ); - while ( isDefined( trigger ) ) - { - players = get_players(); - _a759 = players; - _k759 = getFirstArrayKey( _a759 ); - while ( isDefined( _k759 ) ) - { - player = _a759[ _k759 ]; - pickup = 1; - if ( !isDefined( player ) ) - { - } - else - { - if ( isDefined( level.cantransferriotshield ) ) - { - pickup = [[ level.cantransferriotshield ]]( self, player ); - } - if ( !isDefined( trigger ) ) - { - return; - } - if ( pickup ) - { - trigger setvisibletoplayer( player ); - } - else - { - trigger setinvisibletoplayer( player ); - } - wait 0,05; - } - _k759 = getNextArrayKey( _a759, _k759 ); - } - wait 0,05; - } -} - -deleteriotshieldonplayerdeath() -{ - self.riotshieldentity endon( "death" ); - self waittill( "death" ); - self notify( "destroy_riotshield" ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc deleted file mode 100644 index 04f7af6..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc +++ /dev/null @@ -1,308 +0,0 @@ -#include maps/mp/zombies/_zm_stats; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - if ( !isDefined( level.ballistic_knife_autorecover ) ) - { - level.ballistic_knife_autorecover = 1; - } - if ( isDefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 ) - { - precachemodel( "t5_weapon_ballistic_knife_projectile" ); - precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" ); - } -} - -on_spawn( watcher, player ) -{ - player endon( "death" ); - player endon( "disconnect" ); - player endon( "zmb_lost_knife" ); - level endon( "game_ended" ); - self waittill( "stationary", endpos, normal, angles, attacker, prey, bone ); - isfriendly = 0; - if ( isDefined( endpos ) ) - { - retrievable_model = spawn( "script_model", endpos ); - retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); - retrievable_model setowner( player ); - retrievable_model.owner = player; - retrievable_model.angles = angles; - retrievable_model.name = watcher.weapon; - if ( isDefined( prey ) ) - { - if ( isplayer( prey ) && player.team == prey.team ) - { - isfriendly = 1; - } - else - { - if ( isai( prey ) && player.team == prey.team ) - { - isfriendly = 1; - } - } - if ( !isfriendly ) - { - retrievable_model linkto( prey, bone ); - retrievable_model thread force_drop_knives_to_ground_on_death( player, prey ); - } - else - { - if ( isfriendly ) - { - retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) ); - normal = ( 0, 0, 1 ); - } - } - } - watcher.objectarray[ watcher.objectarray.size ] = retrievable_model; - if ( isfriendly ) - { - retrievable_model waittill( "stationary" ); - } - retrievable_model thread drop_knives_to_ground( player ); - if ( isfriendly ) - { - player notify( "ballistic_knife_stationary" ); - } - else - { - player notify( "ballistic_knife_stationary" ); - } - retrievable_model thread wait_to_show_glowing_model( prey ); - } -} - -wait_to_show_glowing_model( prey ) -{ - level endon( "game_ended" ); - self endon( "death" ); - wait 2; - self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); -} - -on_spawn_retrieve_trigger( watcher, player ) -{ - player endon( "death" ); - player endon( "disconnect" ); - player endon( "zmb_lost_knife" ); - level endon( "game_ended" ); - player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey ); - if ( !isDefined( retrievable_model ) ) - { - return; - } - trigger_pos = []; - if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) ) - { - trigger_pos[ 0 ] = prey.origin[ 0 ]; - trigger_pos[ 1 ] = prey.origin[ 1 ]; - trigger_pos[ 2 ] = prey.origin[ 2 ] + 10; - } - else - { - trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( 10 * normal[ 0 ] ); - trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( 10 * normal[ 1 ] ); - trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( 10 * normal[ 2 ] ); - } - if ( is_true( level.ballistic_knife_autorecover ) ) - { - trigger_pos[ 2 ] -= 50; - pickup_trigger = spawn( "trigger_radius", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ), 0, 50, 100 ); - } - else - { - pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ) ); - pickup_trigger setcursorhint( "HINT_NOICON" ); - } - pickup_trigger.owner = player; - retrievable_model.retrievabletrigger = pickup_trigger; - hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP"; - if ( isDefined( hint_string ) ) - { - pickup_trigger sethintstring( hint_string ); - } - else - { - pickup_trigger sethintstring( &"GENERIC_PICKUP" ); - } - pickup_trigger setteamfortrigger( player.team ); - player clientclaimtrigger( pickup_trigger ); - pickup_trigger enablelinkto(); - if ( isDefined( prey ) ) - { - pickup_trigger linkto( prey ); - } - else - { - pickup_trigger linkto( retrievable_model ); - } - if ( isDefined( level.knife_planted ) ) - { - [[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey ); - } - retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound ); - player thread watch_shutdown( pickup_trigger, retrievable_model ); -} - -debug_print( endpos ) -{ -/# - self endon( "death" ); - while ( 1 ) - { - print3d( endpos, "pickup_trigger" ); - wait 0,05; -#/ - } -} - -watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse ) -{ - self endon( "death" ); - self endon( "delete" ); - level endon( "game_ended" ); - max_ammo = weaponmaxammo( weapon ) + 1; - autorecover = is_true( level.ballistic_knife_autorecover ); - while ( 1 ) - { - trigger waittill( "trigger", player ); - while ( !isalive( player ) ) - { - continue; - } - if ( !player isonground() && !is_true( trigger.force_pickup ) ) - { - continue; - } - if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam ) - { - continue; - } - if ( isDefined( trigger.claimedby ) && player != trigger.claimedby ) - { - continue; - } - ammo_stock = player getweaponammostock( weapon ); - ammo_clip = player getweaponammoclip( weapon ); - current_weapon = player getcurrentweapon(); - total_ammo = ammo_stock + ammo_clip; - hasreloaded = 1; - if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon ) - { - hasreloaded = 0; - } - if ( total_ammo >= max_ammo || !hasreloaded ) - { - continue; - } - if ( !autorecover && player usebuttonpressed() && !player.throwinggrenade || !player meleebuttonpressed() && is_true( trigger.force_pickup ) ) - { - if ( isDefined( playersoundonuse ) ) - { - player playlocalsound( playersoundonuse ); - } - if ( isDefined( npcsoundonuse ) ) - { - player playsound( npcsoundonuse ); - } - player thread [[ callback ]]( weapon, model, trigger ); - return; - } - else - { - } - } -} - -pick_up( weapon, model, trigger ) -{ - if ( self hasweapon( weapon ) ) - { - current_weapon = self getcurrentweapon(); - if ( current_weapon != weapon ) - { - clip_ammo = self getweaponammoclip( weapon ); - if ( !clip_ammo ) - { - self setweaponammoclip( weapon, 1 ); - } - else - { - new_ammo_stock = self getweaponammostock( weapon ) + 1; - self setweaponammostock( weapon, new_ammo_stock ); - } - } - else - { - new_ammo_stock = self getweaponammostock( weapon ) + 1; - self setweaponammostock( weapon, new_ammo_stock ); - } - } - self maps/mp/zombies/_zm_stats::increment_client_stat( "ballistic_knives_pickedup" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "ballistic_knives_pickedup" ); - model destroy_ent(); - trigger destroy_ent(); -} - -destroy_ent() -{ - if ( isDefined( self ) ) - { - if ( isDefined( self.glowing_model ) ) - { - self.glowing_model delete(); - } - self delete(); - } -} - -watch_shutdown( trigger, model ) -{ - self waittill_any( "death_or_disconnect", "zmb_lost_knife" ); - trigger destroy_ent(); - model destroy_ent(); -} - -drop_knives_to_ground( player ) -{ - player endon( "death" ); - player endon( "zmb_lost_knife" ); - for ( ;; ) - { - level waittill( "drop_objects_to_ground", origin, radius ); - if ( distancesquared( origin, self.origin ) < ( radius * radius ) ) - { - self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) ); - self thread update_retrieve_trigger( player ); - } - } -} - -force_drop_knives_to_ground_on_death( player, prey ) -{ - self endon( "death" ); - player endon( "zmb_lost_knife" ); - prey waittill( "death" ); - self unlink(); - self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) ); - self thread update_retrieve_trigger( player ); -} - -update_retrieve_trigger( player ) -{ - self endon( "death" ); - player endon( "zmb_lost_knife" ); - if ( isDefined( level.custom_update_retrieve_trigger ) ) - { - self [[ level.custom_update_retrieve_trigger ]]( player ); - return; - } - self waittill( "stationary" ); - trigger = self.retrievabletrigger; - trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 ); - trigger linkto( self ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weap_bowie.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weap_bowie.gsc deleted file mode 100644 index 938a6c1..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weap_bowie.gsc +++ /dev/null @@ -1,21 +0,0 @@ -//checked includes changed to match cerberus output -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_melee_weapon; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() //checked matches cerberus output -{ - if ( isDefined( level.bowie_cost ) ) - { - cost = level.bowie_cost; - } - else - { - cost = 3000; - } - maps/mp/zombies/_zm_melee_weapon::init( "bowie_knife_zm", "zombie_bowie_flourish", "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", cost, "bowie_upgrade", &"ZOMBIE_WEAPON_BOWIE_BUY", "bowie", undefined ); - maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie" ); - maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie_upgraded" ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weap_claymore.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weap_claymore.gsc deleted file mode 100644 index 47f5b66..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weap_claymore.gsc +++ /dev/null @@ -1,482 +0,0 @@ -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( !isDefined( level.claymores_max_per_player ) ) - { - level.claymores_max_per_player = 12; - } - trigs = getentarray( "claymore_purchase", "targetname" ); - i = 0; - while ( i < trigs.size ) - { - model = getent( trigs[ i ].target, "targetname" ); - if ( isDefined( model ) ) - { - model hide(); - } - i++; - } - array_thread( trigs, ::buy_claymores ); - level thread give_claymores_after_rounds(); - level.claymores_on_damage = ::satchel_damage; - level.pickup_claymores = ::pickup_claymores; - level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener; - level.claymore_detectiondot = cos( 70 ); - level.claymore_detectionmindist = 20; - level._effect[ "claymore_laser" ] = loadfx( "weapon/claymore/fx_claymore_laser" ); -} - -buy_claymores() -{ - self.zombie_cost = 1000; - self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); - self setcursorhint( "HINT_WEAPON", "claymore_zm" ); - self endon( "kill_trigger" ); - if ( !isDefined( self.stub ) ) - { - return; - } - if ( isDefined( self.stub ) && !isDefined( self.stub.claymores_triggered ) ) - { - self.stub.claymores_triggered = 0; - } - self.claymores_triggered = self.stub.claymores_triggered; - while ( 1 ) - { - self waittill( "trigger", who ); - while ( who in_revive_trigger() ) - { - continue; - } - while ( who has_powerup_weapon() ) - { - wait 0,1; - } - if ( is_player_valid( who ) ) - { - if ( who.score >= self.zombie_cost ) - { - if ( !who is_player_placeable_mine( "claymore_zm" ) ) - { - play_sound_at_pos( "purchase", self.origin ); - who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost ); - who thread claymore_setup(); - who thread show_claymore_hint( "claymore_purchased" ); - who thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" ); - if ( isDefined( self.stub ) ) - { - self.claymores_triggered = self.stub.claymores_triggered; - } - if ( self.claymores_triggered == 0 ) - { - model = getent( self.target, "targetname" ); - if ( isDefined( model ) ) - { - model thread maps/mp/zombies/_zm_weapons::weapon_show( who ); - } - else - { - if ( isDefined( self.clientfieldname ) ) - { - level setclientfield( self.clientfieldname, 1 ); - } - } - self.claymores_triggered = 1; - if ( isDefined( self.stub ) ) - { - self.stub.claymores_triggered = 1; - } - } - trigs = getentarray( "claymore_purchase", "targetname" ); - i = 0; - while ( i < trigs.size ) - { - trigs[ i ] setinvisibletoplayer( who ); - i++; - } - } - else who thread show_claymore_hint( "already_purchased" ); - break; - } - else - { - who play_sound_on_ent( "no_purchase" ); - who maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); - } - } - } -} - -claymore_unitrigger_update_prompt( player ) -{ - if ( player is_player_placeable_mine( "claymore_zm" ) ) - { - self sethintstring( "" ); - self setcursorhint( "HINT_NOICON" ); - return 0; - } - self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); - self setcursorhint( "HINT_WEAPON", "claymore_zm" ); - return 1; -} - -set_claymore_visible() -{ - players = get_players(); - trigs = getentarray( "claymore_purchase", "targetname" ); - while ( 1 ) - { - j = 0; - while ( j < players.size ) - { - while ( !players[ j ] is_player_placeable_mine( "claymore_zm" ) ) - { - i = 0; - while ( i < trigs.size ) - { - trigs[ i ] setinvisibletoplayer( players[ j ], 0 ); - i++; - } - } - j++; - } - wait 1; - players = get_players(); - } -} - -claymore_safe_to_plant() -{ - if ( self.owner.claymores.size >= level.claymores_max_per_player ) - { - return 0; - } - if ( isDefined( level.claymore_safe_to_plant ) ) - { - return self [[ level.claymore_safe_to_plant ]](); - } - return 1; -} - -claymore_wait_and_detonate() -{ - wait 0,1; - self detonate( self.owner ); -} - -claymore_watch() -{ - self endon( "death" ); - self notify( "claymore_watch" ); - self endon( "claymore_watch" ); - while ( 1 ) - { - self waittill( "grenade_fire", claymore, weapname ); - if ( weapname == "claymore_zm" ) - { - claymore.owner = self; - claymore.team = self.team; - self notify( "zmb_enable_claymore_prompt" ); - if ( claymore claymore_safe_to_plant() ) - { - if ( isDefined( level.claymore_planted ) ) - { - self thread [[ level.claymore_planted ]]( claymore ); - } - claymore thread claymore_detonation(); - claymore thread play_claymore_effects(); - self maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_planted" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_planted" ); - break; - } - else - { - claymore thread claymore_wait_and_detonate(); - } - } - } -} - -claymore_setup() -{ - if ( !isDefined( self.claymores ) ) - { - self.claymores = []; - } - self thread claymore_watch(); - self giveweapon( "claymore_zm" ); - self set_player_placeable_mine( "claymore_zm" ); - self setactionslot( 4, "weapon", "claymore_zm" ); - self setweaponammostock( "claymore_zm", 2 ); -} - -adjust_trigger_origin( origin ) -{ - origin += vectorScale( ( 0, 0, 1 ), 20 ); - return origin; -} - -on_spawn_retrieve_trigger( watcher, player ) -{ - self maps/mp/gametypes_zm/_weaponobjects::onspawnretrievableweaponobject( watcher, player ); - if ( isDefined( self.pickuptrigger ) ) - { - self.pickuptrigger sethintlowpriority( 0 ); - } -} - -pickup_claymores() -{ - player = self.owner; - if ( !player hasweapon( "claymore_zm" ) ) - { - player thread claymore_watch(); - player giveweapon( "claymore_zm" ); - player set_player_placeable_mine( "claymore_zm" ); - player setactionslot( 4, "weapon", "claymore_zm" ); - player setweaponammoclip( "claymore_zm", 0 ); - player notify( "zmb_enable_claymore_prompt" ); - } - else - { - clip_ammo = player getweaponammoclip( self.name ); - clip_max_ammo = weaponclipsize( self.name ); - if ( clip_ammo >= clip_max_ammo ) - { - self destroy_ent(); - player notify( "zmb_disable_claymore_prompt" ); - return; - } - } - self pick_up(); - clip_ammo = player getweaponammoclip( self.name ); - clip_max_ammo = weaponclipsize( self.name ); - if ( clip_ammo >= clip_max_ammo ) - { - player notify( "zmb_disable_claymore_prompt" ); - } - player maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_pickedup" ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_pickedup" ); -} - -pickup_claymores_trigger_listener( trigger, player ) -{ - self thread pickup_claymores_trigger_listener_enable( trigger, player ); - self thread pickup_claymores_trigger_listener_disable( trigger, player ); -} - -pickup_claymores_trigger_listener_enable( trigger, player ) -{ - self endon( "delete" ); - self endon( "death" ); - while ( 1 ) - { - player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" ); - if ( !isDefined( trigger ) ) - { - return; - } - trigger trigger_on(); - trigger linkto( self ); - } -} - -pickup_claymores_trigger_listener_disable( trigger, player ) -{ - self endon( "delete" ); - self endon( "death" ); - while ( 1 ) - { - player waittill( "zmb_disable_claymore_prompt" ); - if ( !isDefined( trigger ) ) - { - return; - } - trigger unlink(); - trigger trigger_off(); - } -} - -shouldaffectweaponobject( object ) -{ - pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 ); - dirtopos = pos - object.origin; - objectforward = anglesToForward( object.angles ); - dist = vectordot( dirtopos, objectforward ); - if ( dist < level.claymore_detectionmindist ) - { - return 0; - } - dirtopos = vectornormalize( dirtopos ); - dot = vectordot( dirtopos, objectforward ); - return dot > level.claymore_detectiondot; -} - -claymore_detonation() -{ - self endon( "death" ); - self waittill_not_moving(); - detonateradius = 96; - damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 ); - damagearea setexcludeteamfortrigger( self.team ); - damagearea enablelinkto(); - damagearea linkto( self ); - if ( is_true( self.isonbus ) ) - { - damagearea setmovingplatformenabled( 1 ); - } - self.damagearea = damagearea; - self thread delete_claymores_on_death( self.owner, damagearea ); - self.owner.claymores[ self.owner.claymores.size ] = self; - while ( 1 ) - { - damagearea waittill( "trigger", ent ); - if ( isDefined( self.owner ) && ent == self.owner ) - { - continue; - } - while ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team ) - { - continue; - } - if ( isDefined( ent.ignore_claymore ) && ent.ignore_claymore ) - { - continue; - } - while ( !ent shouldaffectweaponobject( self ) ) - { - continue; - } - if ( ent damageconetrace( self.origin, self ) > 0 ) - { - self playsound( "wpn_claymore_alert" ); - wait 0,4; - if ( isDefined( self.owner ) ) - { - self detonate( self.owner ); - } - else - { - self detonate( undefined ); - } - return; - } - } -} - -delete_claymores_on_death( player, ent ) -{ - self waittill( "death" ); - if ( isDefined( player ) ) - { - arrayremovevalue( player.claymores, self ); - } - wait 0,05; - if ( isDefined( ent ) ) - { - ent delete(); - } -} - -satchel_damage() -{ - self endon( "death" ); - self setcandamage( 1 ); - self.health = 100000; - self.maxhealth = self.health; - attacker = undefined; - while ( 1 ) - { - self waittill( "damage", amount, attacker ); - if ( !isDefined( self ) ) - { - return; - } - self.health = self.maxhealth; - while ( !isplayer( attacker ) ) - { - continue; - } - if ( isDefined( self.owner ) && attacker == self.owner ) - { - continue; - } - while ( isDefined( attacker.pers ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] != level.zombie_team ) - { - continue; - } - } - if ( level.satchelexplodethisframe ) - { - wait ( 0,1 + randomfloat( 0,4 ) ); - } - else wait 0,05; - if ( !isDefined( self ) ) - { - return; - } - level.satchelexplodethisframe = 1; - thread reset_satchel_explode_this_frame(); - self detonate( attacker ); -} - -reset_satchel_explode_this_frame() -{ - wait 0,05; - level.satchelexplodethisframe = 0; -} - -play_claymore_effects() -{ - self endon( "death" ); - self waittill_not_moving(); - playfxontag( level._effect[ "claymore_laser" ], self, "tag_fx" ); -} - -give_claymores_after_rounds() -{ - while ( 1 ) - { - level waittill( "between_round_over" ); - while ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] is_player_placeable_mine( "claymore_zm" ) ) - { - players[ i ] giveweapon( "claymore_zm" ); - players[ i ] set_player_placeable_mine( "claymore_zm" ); - players[ i ] setactionslot( 4, "weapon", "claymore_zm" ); - players[ i ] setweaponammoclip( "claymore_zm", 2 ); - } - i++; - } - } - } -} - -show_claymore_hint( string ) -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( string == "claymore_purchased" ) - { - text = &"ZOMBIE_CLAYMORE_HOWTO"; - } - else - { - text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED"; - } - show_equipment_hint_text( text ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weap_emp_bomb.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weap_emp_bomb.gsc deleted file mode 100644 index 73a8a86..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weap_emp_bomb.gsc +++ /dev/null @@ -1,369 +0,0 @@ -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zombies/_zm_power; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( !emp_bomb_exists() ) - { - return; - } - set_zombie_var( "emp_stun_range", 600 ); - set_zombie_var( "emp_stun_time", 20 ); - set_zombie_var( "emp_perk_off_range", 420 ); - set_zombie_var( "emp_perk_off_time", 90 ); - precacheshellshock( "frag_grenade_mp" ); -/# - level.zombiemode_devgui_emp_bomb_give = ::player_give_emp_bomb; -#/ - level thread onplayerconnect(); - level._equipment_emp_destroy_fx = loadfx( "weapon/emp/fx_emp_explosion_equip" ); -} - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread watch_for_grenade_throw(); - } -} - -player_give_emp_bomb() -{ - self giveweapon( "emp_grenade_zm" ); - self set_player_tactical_grenade( "emp_grenade_zm" ); -} - -emp_bomb_exists() -{ - return isDefined( level.zombie_weapons[ "emp_grenade_zm" ] ); -} - -watch_for_grenade_throw() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "grenade_fire", grenade, weapname ); - while ( weapname != "emp_grenade_zm" ) - { - continue; - } - grenade.use_grenade_special_bookmark = 1; - grenade.grenade_multiattack_bookmark_count = 1; - grenade.owner = self; - self thread emp_detonate( grenade ); - } -} - -emp_detonate( grenade ) -{ - grenade_owner = undefined; - if ( isDefined( grenade.owner ) ) - { - grenade_owner = grenade.owner; - } - grenade waittill( "explode", grenade_origin ); - emp_radius = level.zombie_vars[ "emp_perk_off_range" ]; - emp_time = level.zombie_vars[ "emp_perk_off_time" ]; - origin = grenade_origin; - if ( !isDefined( origin ) ) - { - return; - } - level notify( "emp_detonate" ); - self thread emp_detonate_zombies( grenade_origin, grenade_owner ); - if ( isDefined( level.custom_emp_detonate ) ) - { - thread [[ level.custom_emp_detonate ]]( grenade_origin ); - } - if ( isDefined( grenade_owner ) ) - { - grenade_owner thread destroyequipment( origin, emp_radius ); - } - players_emped = emp_players( origin, emp_radius ); - disabled_list = maps/mp/zombies/_zm_power::change_power_in_radius( -1, origin, emp_radius ); - wait emp_time; - maps/mp/zombies/_zm_power::revert_power_to_list( 1, origin, emp_radius, disabled_list ); - unemp_players( players_emped ); -} - -emp_detonate_zombies( grenade_origin, grenade_owner ) -{ - zombies = get_array_of_closest( grenade_origin, getaispeciesarray( level.zombie_team, "all" ), undefined, undefined, level.zombie_vars[ "emp_stun_range" ] ); - if ( !isDefined( zombies ) ) - { - return; - } - i = 0; - while ( i < zombies.size ) - { - if ( !isDefined( zombies[ i ] ) || isDefined( zombies[ i ].ignore_inert ) && zombies[ i ].ignore_inert ) - { - i++; - continue; - } - else - { - zombies[ i ].becoming_inert = 1; - } - i++; - } - stunned = 0; - i = 0; - while ( i < zombies.size ) - { - if ( !isDefined( zombies[ i ] ) || isDefined( zombies[ i ].ignore_inert ) && zombies[ i ].ignore_inert ) - { - i++; - continue; - } - else - { - stunned++; - zombies[ i ] thread stun_zombie(); - wait 0,05; - } - i++; - } - if ( stunned >= 10 && isDefined( grenade_owner ) ) - { - grenade_owner notify( "the_lights_of_their_eyes" ); - } -} - -stun_zombie() -{ - self endon( "death" ); - self notify( "stun_zombie" ); - self endon( "stun_zombie" ); - if ( self.health <= 0 ) - { -/# - iprintln( "trying to stun a dead zombie" ); -#/ - return; - } - if ( isDefined( self.stun_zombie ) ) - { - self thread [[ self.stun_zombie ]](); - return; - } - self thread maps/mp/zombies/_zm_ai_basic::start_inert(); -} - -emp_players( origin, radius ) -{ - players_emped = []; - players = get_players(); - rsquared = radius * radius; - _a192 = players; - _k192 = getFirstArrayKey( _a192 ); - while ( isDefined( _k192 ) ) - { - player = _a192[ _k192 ]; - if ( isalive( player ) && distancesquared( origin, player.origin ) < rsquared ) - { - player player_emp_on(); - players_emped[ players_emped.size ] = player; - } - _k192 = getNextArrayKey( _a192, _k192 ); - } - return players_emped; -} - -unemp_players( players_emped ) -{ - _a206 = players_emped; - _k206 = getFirstArrayKey( _a206 ); - while ( isDefined( _k206 ) ) - { - player = _a206[ _k206 ]; - player player_emp_off(); - _k206 = getNextArrayKey( _a206, _k206 ); - } -} - -player_emp_on() -{ - self.empgrenaded = 1; - self setempjammed( 1 ); - self shellshock( "frag_grenade_mp", 2 ); -} - -player_emp_off() -{ - if ( isDefined( self ) ) - { - self stopshellshock(); - self setempjammed( 0 ); - self.empgrenaded = undefined; - } -} - -getwatcherforweapon( weapname ) -{ - if ( !isDefined( self ) ) - { - return undefined; - } - if ( !isplayer( self ) ) - { - return undefined; - } - i = 0; - while ( i < self.weaponobjectwatcherarray.size ) - { - if ( self.weaponobjectwatcherarray[ i ].weapon != weapname ) - { - i++; - continue; - } - else - { - return self.weaponobjectwatcherarray[ i ]; - } - i++; - } - return undefined; -} - -destroyequipment( origin, radius ) -{ - grenades = getentarray( "grenade", "classname" ); - rsquared = radius * radius; - i = 0; - while ( i < grenades.size ) - { - item = grenades[ i ]; - if ( distancesquared( origin, item.origin ) > rsquared ) - { - i++; - continue; - } - else if ( !isDefined( item.name ) ) - { - i++; - continue; - } - else if ( !is_offhand_weapon( item.name ) ) - { - i++; - continue; - } - else watcher = item.owner getwatcherforweapon( item.name ); - if ( !isDefined( watcher ) ) - { - i++; - continue; - } - else - { - watcher thread waitanddetonate( item, 0, self, "emp_grenade_zm" ); - } - i++; - } - equipment = maps/mp/zombies/_zm_equipment::get_destructible_equipment_list(); - i = 0; - while ( i < equipment.size ) - { - item = equipment[ i ]; - if ( !isDefined( item ) ) - { - i++; - continue; - } - else if ( distancesquared( origin, item.origin ) > rsquared ) - { - i++; - continue; - } - else if ( isDefined( item.isriotshield ) && item.isriotshield ) - { - i++; - continue; - } - else - { - waitanddamage( item, 505 ); - } - i++; - } -} - -isempweapon( weaponname ) -{ - if ( isDefined( weaponname ) && weaponname != "emp_mp" || weaponname == "emp_grenade_mp" && weaponname == "emp_grenade_zm" ) - { - return 1; - } - return 0; -} - -waitanddetonate( object, delay, attacker, weaponname ) -{ - object endon( "death" ); - object endon( "hacked" ); - from_emp = isempweapon( weaponname ); - if ( from_emp ) - { - object.stun_fx = 1; - if ( isDefined( level._equipment_emp_destroy_fx ) ) - { - playfx( level._equipment_emp_destroy_fx, object.origin + vectorScale( ( 0, 0, 1 ), 5 ), ( 0, randomfloat( 360 ), 0 ) ); - } - delay = 1,1; - } - if ( delay ) - { - wait delay; - } - if ( isDefined( object.detonated ) && object.detonated == 1 ) - { - return; - } - if ( !isDefined( self.detonate ) ) - { - return; - } - if ( isDefined( attacker ) && isplayer( attacker ) && isDefined( attacker.pers[ "team" ] ) && isDefined( object.owner ) && isDefined( object.owner.pers[ "team" ] ) ) - { - if ( level.teambased ) - { - if ( attacker.pers[ "team" ] != object.owner.pers[ "team" ] ) - { - attacker notify( "destroyed_explosive" ); - } - } - else - { - if ( attacker != object.owner ) - { - attacker notify( "destroyed_explosive" ); - } - } - } - object.detonated = 1; - object [[ self.detonate ]]( attacker, weaponname ); -} - -waitanddamage( object, damage ) -{ - object endon( "death" ); - object endon( "hacked" ); - object.stun_fx = 1; - if ( isDefined( level._equipment_emp_destroy_fx ) ) - { - playfx( level._equipment_emp_destroy_fx, object.origin + vectorScale( ( 0, 0, 1 ), 5 ), ( 0, randomfloat( 360 ), 0 ) ); - } - delay = 1,1; - if ( delay ) - { - wait delay; - } - object maps/mp/zombies/_zm_equipment::item_damage( damage ); -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weap_jetgun.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weap_jetgun.gsc deleted file mode 100644 index 23554ea..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weap_jetgun.gsc +++ /dev/null @@ -1,935 +0,0 @@ -#include maps/mp/animscripts/zm_run; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - if ( !maps/mp/zombies/_zm_weapons::is_weapon_included( "jetgun_zm" ) ) - { - return; - } - maps/mp/zombies/_zm_equipment::register_equipment( "jetgun_zm", &"ZOMBIE_EQUIP_JETGUN_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_JETGUN_HOWTO", "jetgun_zm_icon", "jetgun", ::jetgun_activation_watcher_thread, undefined, ::dropjetgun, ::pickupjetgun ); - maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "jetgun", &"ZOMBIE_EQUIP_JETGUN_PICKUP_HINT_STRING" ); - level._effect[ "jetgun_smoke_cloud" ] = loadfx( "weapon/thunder_gun/fx_thundergun_smoke_cloud" ); - level._effect[ "jetgun_overheat" ] = loadfx( "weapon/jet_gun/fx_jetgun_overheat" ); - level._effect[ "jetgun_vortex" ] = loadfx( "weapon/jet_gun/fx_jetgun_on" ); - level._effect[ "jetgun_meat_grinder" ] = loadfx( "weapon/jet_gun/fx_jetgun_kill" ); - set_zombie_var( "jetgun_cylinder_radius", 1024 ); - set_zombie_var( "jetgun_grind_range", 128 ); - set_zombie_var( "jetgun_gib_range", 256 ); - set_zombie_var( "jetgun_gib_damage", 50 ); - set_zombie_var( "jetgun_knockdown_range", 256 ); - set_zombie_var( "jetgun_drag_range", 2048 ); - set_zombie_var( "jetgun_knockdown_damage", 15 ); - set_zombie_var( "powerup_move_dist", 50 ); - set_zombie_var( "powerup_drag_range", 500 ); - level.jetgun_pulled_in_range = int( level.zombie_vars[ "jetgun_drag_range" ] / 8 ) * ( level.zombie_vars[ "jetgun_drag_range" ] / 8 ); - level.jetgun_pulling_in_range = int( level.zombie_vars[ "jetgun_drag_range" ] / 4 ) * ( level.zombie_vars[ "jetgun_drag_range" ] / 4 ); - level.jetgun_inner_range = int( level.zombie_vars[ "jetgun_drag_range" ] / 2 ) * ( level.zombie_vars[ "jetgun_drag_range" ] / 2 ); - level.jetgun_outer_edge = int( level.zombie_vars[ "jetgun_drag_range" ] * level.zombie_vars[ "jetgun_drag_range" ] ); - level.jetgun_gib_refs = []; - level.jetgun_gib_refs[ level.jetgun_gib_refs.size ] = "guts"; - level.jetgun_gib_refs[ level.jetgun_gib_refs.size ] = "right_arm"; - level.jetgun_gib_refs[ level.jetgun_gib_refs.size ] = "left_arm"; - level.jetgun_gib_refs[ level.jetgun_gib_refs.size ] = "right_leg"; - level.jetgun_gib_refs[ level.jetgun_gib_refs.size ] = "left_leg"; - level.jetgun_gib_refs[ level.jetgun_gib_refs.size ] = "no_legs"; - /* -/# - level thread jetgun_devgui_dvar_think(); - level.zm_devgui_jetgun_never_overheat = ::never_overheat; -#/ - */ - onplayerconnect_callback( ::jetgun_on_player_connect ); -} - -dropjetgun() -{ - item = self maps/mp/zombies/_zm_equipment::placed_equipment_think( "t6_wpn_zmb_jet_gun_world", "jetgun_zm", self.origin + vectorScale( ( 1, 0, 1 ), 30 ), self.angles ); - if ( isDefined( item ) ) - { - item.overheating = self.jetgun_overheating; - item.heatval = self.jetgun_heatval; - item.original_owner = self; - item.owner = undefined; - item.name = "jetgun_zm"; - item.requires_pickup = 1; - } - self.jetgun_overheating = undefined; - self.jetgun_heatval = undefined; - self takeweapon( "jetgun_zm" ); - return item; -} - -pickupjetgun( item ) -{ - item.owner = self; - if ( isDefined( item.overheating ) && isDefined( item.heatval ) ) - { - self.jetgun_overheating = item.overheating; - self.jetgun_heatval = item.heatval; - } - item.overheating = undefined; - item.heatval = undefined; - self setcurrentweaponspinlerp( 0 ); -} - -jetgun_activation_watcher_thread() -{ - self endon( "zombified" ); - self endon( "disconnect" ); - self endon( "jetgun_zm_taken" ); - while ( 1 ) - { - self waittill_either( "jetgun_zm_activate", "jetgun_zm_deactivate" ); - } -} - -jetgun_devgui_dvar_think() -{ -/* -/# - if ( !maps/mp/zombies/_zm_weapons::is_weapon_included( "jetgun_zm" ) ) - { - return; - } - setdvar( "scr_jetgun_cylinder_radius", level.zombie_vars[ "jetgun_cylinder_radius" ] ); - setdvar( "scr_jetgun_grind_range", level.zombie_vars[ "jetgun_grind_range" ] ); - setdvar( "scr_jetgun_drag_range", level.zombie_vars[ "jetgun_drag_range" ] ); - setdvar( "scr_jetgun_gib_range", level.zombie_vars[ "jetgun_gib_range" ] ); - setdvar( "scr_jetgun_gib_damage", level.zombie_vars[ "jetgun_gib_damage" ] ); - setdvar( "scr_jetgun_knockdown_range", level.zombie_vars[ "jetgun_knockdown_range" ] ); - setdvar( "scr_jetgun_knockdown_damage", level.zombie_vars[ "jetgun_knockdown_damage" ] ); - for ( ;; ) - { - level.zombie_vars[ "jetgun_cylinder_radius" ] = getDvarInt( "scr_jetgun_cylinder_radius" ); - level.zombie_vars[ "jetgun_grind_range" ] = getDvarInt( "scr_jetgun_grind_range" ); - level.zombie_vars[ "jetgun_drag_range" ] = getDvarInt( "scr_jetgun_drag_range" ); - level.zombie_vars[ "jetgun_gib_range" ] = getDvarInt( "scr_jetgun_gib_range" ); - level.zombie_vars[ "jetgun_gib_damage" ] = getDvarInt( "scr_jetgun_gib_damage" ); - level.zombie_vars[ "jetgun_knockdown_range" ] = getDvarInt( "scr_jetgun_knockdown_range" ); - level.zombie_vars[ "jetgun_knockdown_damage" ] = getDvarInt( "scr_jetgun_knockdown_damage" ); - wait 0.5; - } -#/ -*/ -} - -jetgun_on_player_connect() -{ - self thread wait_for_jetgun_fired(); - self thread watch_weapon_changes(); - self thread handle_overheated_jetgun(); -} - -get_jetgun_engine_direction() -{ - return self getcurrentweaponspinlerp(); -} - -set_jetgun_engine_direction( nv ) -{ - self setcurrentweaponspinlerp( nv ); -} - -never_overheat() -{ -/* -/# - self notify( "never_overheat" ); - self endon( "never_overheat" ); - self endon( "death_or_disconnect" ); - while ( 1 ) - { - if ( self getcurrentweapon() == "jetgun_zm" ) - { - self setweaponoverheating( 0, 0 ); - } - wait 0.05; - - } -#/ -*/ -} - -watch_overheat() -{ - self endon( "death_or_disconnect" ); - self endon( "weapon_change" ); - if ( self getcurrentweapon() == "jetgun_zm" && isDefined( self.jetgun_overheating ) && isDefined( self.jetgun_heatval ) ) - { - self setweaponoverheating( self.jetgun_overheating, self.jetgun_heatval ); - } - while ( 1 ) - { - if ( self getcurrentweapon() == "jetgun_zm" ) - { - overheating = self isweaponoverheating( 0 ); - heat = self isweaponoverheating( 1 ); - self.jetgun_overheating = overheating; - self.jetgun_heatval = heat; - if ( overheating ) - { - self notify( "jetgun_overheated" ); - } - if ( heat > 75 ) - { - self thread play_overheat_fx(); - } - } - wait 0.05; - } -} - -play_overheat_fx() -{ - if ( isDefined( self.overheat_fx_playing ) && !self.overheat_fx_playing ) - { - self.overheat_fx_playing = 1; - playfxontag( level._effect[ "jetgun_overheat" ], self, "tag_flash" ); - wait 5; - if ( isDefined( self ) ) - { - self.overheat_fx_playing = 0; - } - } -} - -handle_overheated_jetgun() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "jetgun_overheated" ); - if ( self getcurrentweapon() == "jetgun_zm" ) - { - if ( isDefined( level.explode_overheated_jetgun ) && level.explode_overheated_jetgun ) - { - self thread maps/mp/zombies/_zm_equipment::equipment_release( "jetgun_zm" ); - weapon_org = self gettagorigin( "tag_weapon" ); - pcount = get_players().size; - pickup_time = 360 / pcount; - maps/mp/zombies/_zm_buildables::player_explode_buildable( "jetgun_zm", weapon_org, 250, 1, pickup_time ); - self.jetgun_overheating = undefined; - self.jetgun_heatval = undefined; - self playsound( "wpn_jetgun_explo" ); - break; - } - else - { - if ( isDefined( level.unbuild_overheated_jetgun ) && level.unbuild_overheated_jetgun ) - { - self thread maps/mp/zombies/_zm_equipment::equipment_release( "jetgun_zm" ); - maps/mp/zombies/_zm_buildables::unbuild_buildable( "jetgun_zm", 1 ); - self.jetgun_overheating = undefined; - self.jetgun_heatval = undefined; - break; - } - else - { - if ( isDefined( level.take_overheated_jetgun ) && level.take_overheated_jetgun ) - { - self thread maps/mp/zombies/_zm_equipment::equipment_release( "jetgun_zm" ); - self.jetgun_overheating = undefined; - self.jetgun_heatval = undefined; - } - } - } - } - } -} - -watch_weapon_changes() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "weapon_change", weapon ); - if ( weapon == "jetgun_zm" ) - { - /* -/# - if ( getDvarInt( #"BCDDAAFF" ) > 0 ) - { - self thread zombie_drag_radius(); - - } -#/ - */ - self thread watch_overheat(); - } - } -} - -wait_for_jetgun_fired() -{ - self endon( "disconnect" ); - self waittill( "spawned_player" ); - for ( ;; ) - { - self waittill( "weapon_fired" ); - currentweapon = self getcurrentweapon(); - if ( currentweapon == "jetgun_zm" || currentweapon == "jetgun_upgraded_zm" ) - { - self jetgun_firing(); - } - } -} - -jetgun_network_choke() -{ - level.jetgun_network_choke_count++; - if ( level.jetgun_network_choke_count % 10 ) - { - wait_network_frame(); - wait_network_frame(); - wait_network_frame(); - } -} - -is_jetgun_firing() -{ - return abs( self get_jetgun_engine_direction() ) > 0.2; -} - -jetgun_firing() -{ - if ( !isDefined( self.jetsound_ent ) ) - { - self.jetsound_ent = spawn( "script_origin", self.origin ); - self.jetsound_ent linkto( self, "tag_origin" ); - } - jetgun_fired = 0; - if ( self is_jetgun_firing() && jetgun_fired == 0 ) - { - self.jetsound_ent playloopsound( "wpn_jetgun_effect_plr_loop", 0.8 ); - self.jetsound_ent playsound( "wpn_jetgun_effect_plr_start" ); - self notify( "jgun_snd" ); - } - while ( self is_jetgun_firing() ) - { - jetgun_fired = 1; - self thread jetgun_fired(); - view_pos = self gettagorigin( "tag_flash" ); - view_angles = self gettagangles( "tag_flash" ); - if ( self get_jetgun_engine_direction() < 0 ) - { - playfx( level._effect[ "jetgun_smoke_cloud" ], view_pos - self getplayerviewheight(), anglesToForward( view_angles ), anglesToUp( view_angles ) ); - } - else - { - playfx( level._effect[ "jetgun_smoke_cloud" ], view_pos - self getplayerviewheight(), anglesToForward( view_angles ) * -1, anglesToUp( view_angles ) ); - } - wait 0.25; - } - if ( jetgun_fired == 1 ) - { - self.jetsound_ent stoploopsound( 0.5 ); - self.jetsound_ent playsound( "wpn_jetgun_effect_plr_end" ); - self.jetsound_ent thread sound_ent_cleanup(); - jetgun_fired = 0; - } -} - -sound_ent_cleanup() -{ - self endon( "jgun_snd" ); - wait 4; - if ( isDefined( self.jetsound_ent ) ) - { - self delete(); - } -} - -jetgun_fired() -{ - if ( !self is_jetgun_firing() ) - { - return; - } - origin = self getweaponmuzzlepoint(); - physicsjetthrust( origin, self getweaponforwarddir() * -1, level.zombie_vars[ "jetgun_grind_range" ], self get_jetgun_engine_direction(), 0.85 ); - if ( !isDefined( level.jetgun_knockdown_enemies ) ) - { - level.jetgun_knockdown_enemies = []; - level.jetgun_knockdown_gib = []; - level.jetgun_drag_enemies = []; - level.jetgun_fling_enemies = []; - level.jetgun_grind_enemies = []; - } - powerups = maps/mp/zombies/_zm_powerups::get_powerups(); - if ( isDefined( powerups ) && powerups.size ) - { - self thread try_pull_powerups( powerups ); - } - self jetgun_get_enemies_in_range( self get_jetgun_engine_direction() ); - level.jetgun_network_choke_count = 0; - _a408 = level.jetgun_fling_enemies; - index = getFirstArrayKey( _a408 ); - while ( isDefined( index ) ) - { - zombie = _a408[ index ]; - jetgun_network_choke(); - if ( isDefined( zombie ) ) - { - zombie thread jetgun_fling_zombie( self, index ); - } - index = getNextArrayKey( _a408, index ); - } - _a418 = level.jetgun_drag_enemies; - _k418 = getFirstArrayKey( _a418 ); - while ( isDefined( _k418 ) ) - { - zombie = _a418[ _k418 ]; - jetgun_network_choke(); - if ( isDefined( zombie ) ) - { - zombie.jetgun_owner = self; - zombie thread jetgun_drag_zombie( origin, -1 * self get_jetgun_engine_direction() ); - } - _k418 = getNextArrayKey( _a418, _k418 ); - } - level.jetgun_knockdown_enemies = []; - level.jetgun_knockdown_gib = []; - level.jetgun_drag_enemies = []; - level.jetgun_fling_enemies = []; - level.jetgun_grind_enemies = []; -} - -try_pull_powerups( powerups ) -{ - powerup_move_dist = level.zombie_vars[ "powerup_move_dist" ] * -1 * self get_jetgun_engine_direction(); - powerup_range_squared = level.zombie_vars[ "powerup_drag_range" ] * level.zombie_vars[ "powerup_drag_range" ]; - view_pos = self getweaponmuzzlepoint(); - forward_view_angles = self getweaponforwarddir(); - _a453 = powerups; - _k453 = getFirstArrayKey( _a453 ); - while ( isDefined( _k453 ) ) - { - powerup = _a453[ _k453 ]; - if ( distancesquared( view_pos, powerup.origin ) > powerup_range_squared ) - { - } - else normal = vectornormalize( powerup.origin - view_pos ); - dot = vectordot( forward_view_angles, normal ); - if ( abs( dot ) < 0.7 ) - { - } - else - { - powerup notify( "move_powerup" ); - } - _k453 = getNextArrayKey( _a453, _k453 ); - } -} - -jetgun_get_enemies_in_range( invert ) -{ - view_pos = self getweaponmuzzlepoint(); - zombies = get_array_of_closest( view_pos, get_round_enemy_array(), undefined, 3, level.zombie_vars[ "jetgun_drag_range" ] ); - if ( !isDefined( zombies ) ) - { - } - knockdown_range_squared = level.zombie_vars[ "jetgun_knockdown_range" ] * level.zombie_vars[ "jetgun_knockdown_range" ]; - drag_range_squared = level.zombie_vars[ "jetgun_drag_range" ] * level.zombie_vars[ "jetgun_drag_range" ]; - gib_range_squared = level.zombie_vars[ "jetgun_gib_range" ] * level.zombie_vars[ "jetgun_gib_range" ]; - grind_range_squared = level.zombie_vars[ "jetgun_grind_range" ] * level.zombie_vars[ "jetgun_grind_range" ]; - cylinder_radius_squared = level.zombie_vars[ "jetgun_cylinder_radius" ] * level.zombie_vars[ "jetgun_cylinder_radius" ]; - forward_view_angles = self getweaponforwarddir(); - end_pos = view_pos + vectorScale( forward_view_angles, level.zombie_vars[ "jetgun_knockdown_range" ] ); - /* -/# - if ( getDvarInt( #"BCDDAAFF" ) == 2 ) - { - near_circle_pos = view_pos + vectorScale( forward_view_angles, 2 ); - circle( near_circle_pos, level.zombie_vars[ "jetgun_cylinder_radius" ], ( 1, 0, 1 ), 0, 0, 100 ); - line( near_circle_pos, end_pos, ( 1, 0, 1 ), 1, 0, 100 ); - circle( end_pos, level.zombie_vars[ "jetgun_cylinder_radius" ], ( 1, 0, 1 ), 0, 0, 100 ); - - } -#/ - */ - i = 0; - while ( i < zombies.size ) - { - self jetgun_check_enemies_in_range( zombies[ i ], view_pos, drag_range_squared, gib_range_squared, grind_range_squared, cylinder_radius_squared, forward_view_angles, end_pos, invert ); - i++; - } -} - -jetgun_check_enemies_in_range( zombie, view_pos, drag_range_squared, gib_range_squared, grind_range_squared, cylinder_radius_squared, forward_view_angles, end_pos, invert ) -{ - if ( !isDefined( zombie ) ) - { - return; - } - if ( !isDefined( zombie ) ) - { - return; - } - if ( zombie enemy_killed_by_jetgun() ) - { - return; - } - if ( !isDefined( zombie.ai_state ) || zombie.ai_state != "find_flesh" && zombie.ai_state != "zombieMoveOnBus" ) - { - return; - } - if ( isDefined( zombie.in_the_ground ) && zombie.in_the_ground ) - { - return; - } - if ( isDefined( zombie.is_avogadro ) && zombie.is_avogadro ) - { - return; - } - if ( isDefined( zombie.isdog ) && zombie.isdog ) - { - return; - } - if ( isDefined( zombie.isscreecher ) && zombie.isscreecher ) - { - return; - } - if ( isDefined( self.animname ) && self.animname == "quad_zombie" ) - { - return; - } - test_origin = zombie getcentroid(); - test_range_squared = distancesquared( view_pos, test_origin ); - if ( test_range_squared > drag_range_squared ) - { - zombie jetgun_debug_print( "range", ( 1, 0, 1 ) ); - return; - } - normal = vectornormalize( test_origin - view_pos ); - dot = vectordot( forward_view_angles, normal ); - if ( abs( dot ) < 0.7 ) - { - zombie jetgun_debug_print( "dot", ( 1, 0, 1 ) ); - return; - } - radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin ); - if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared ) - { - zombie jetgun_debug_print( "cylinder", ( 1, 0, 1 ) ); - return; - } - if ( zombie damageconetrace( view_pos, self ) == 0 ) - { - zombie jetgun_debug_print( "cone", ( 1, 0, 1 ) ); - return; - } - jetgun_blow_suck = invert; - if ( dot <= 0 ) - { - jetgun_blow_suck *= -1; - } - if ( test_range_squared < grind_range_squared ) - { - level.jetgun_fling_enemies[ level.jetgun_fling_enemies.size ] = zombie; - level.jetgun_grind_enemies[ level.jetgun_grind_enemies.size ] = dot < 0; - } - else - { - if ( test_range_squared < drag_range_squared && dot > 0 ) - { - level.jetgun_drag_enemies[ level.jetgun_drag_enemies.size ] = zombie; - } - } -} - -jetgun_debug_print( msg, color ) -{ -/* -/# - if ( !getDvarInt( #"BCDDAAFF" ) ) - { - return; - } - if ( !isDefined( color ) ) - { - color = ( 1, 0, 1 ); - } - print3d( self.origin + vectorScale( ( 1, 0, 1 ), 60 ), msg, color, 1, 1, 40 ); -#/ -*/ -} - -jetgun_debug_print_on_ent( msg, color ) -{ -/* -/# - if ( !getDvarInt( #"BCDDAAFF" ) ) - { - return; - } - if ( !isDefined( color ) ) - { - color = ( 1, 0, 1 ); - } - self notify( "new_jetgun_debug_print_on_ent" ); - self endon( "death" ); - self endon( "jetgun_end_drag_state" ); - self endon( "new_jetgun_debug_print_on_ent" ); - while ( 1 ) - { - print3d( self.origin + vectorScale( ( 1, 0, 1 ), 60 ), msg, color, 1, 1 ); - wait 0.05; - - } -#/ -*/ -} - -try_gibbing() -{ - if ( isDefined( self ) && isDefined( self.a ) && isDefined( self.isscreecher ) && !self.isscreecher ) - { - self.a.gib_ref = random( level.jetgun_gib_refs ); - self thread maps/mp/animscripts/zm_death::do_gib(); - } -} - -jetgun_handle_death_notetracks( note ) -{ - if ( note == "jetgunned" ) - { - self thread jetgun_grind_death_ending(); - } -} - -jetgun_grind_death_ending() -{ - if ( !isDefined( self ) ) - { - return; - } - self hide(); - wait 0.1; - self self_delete(); -} - -jetgun_grind_zombie( player ) -{ - player endon( "death" ); - player endon( "disconnect" ); - self endon( "death" ); - if ( !isDefined( self.jetgun_grind ) ) - { - self.jetgun_grind = 1; - self notify( "grinding" ); - player set_jetgun_engine_direction( 0.5 * player get_jetgun_engine_direction() ); - if ( is_mature() ) - { - if ( isDefined( level._effect[ "zombie_guts_explosion" ] ) ) - { - playfx( level._effect[ "zombie_guts_explosion" ], self gettagorigin( "J_SpineLower" ) ); - } - } - self.nodeathragdoll = 1; - self.handle_death_notetracks = ::jetgun_handle_death_notetracks; - self dodamage( self.health + 666, player.origin, player ); - } -} - -jetgun_fling_zombie( player, index ) -{ - if ( !isDefined( self ) ) - { - return; - } - if ( isDefined( self.jetgun_fling_func ) ) - { - self [[ self.jetgun_fling_func ]]( player ); - return; - } - was_alive = isalive( self ); - if ( was_alive ) - { - self.jetgun_fling = 1; - self notify( "flinging" ); - deathanim = undefined; - if ( is_mature() ) - { - player weaponplayejectbrass(); - } - if ( isDefined( self.has_legs ) && self.has_legs ) - { - if ( isDefined( self.jetgun_drag_state ) && self.jetgun_drag_state == "jetgun_sprint" ) - { - deathanim = "zm_jetgun_sprint_death"; - } - else - { - deathanim = "zm_jetgun_death"; - } - } - else - { - deathanim = "zm_jetgun_death_crawl"; - } - self.deathanim = deathanim; - player playsound( "evt_jetgun_zmb_suck" ); - } - self thread jetgun_grind_zombie( player ); -} - -jetgun_drag_zombie( vdir, speed ) -{ - if ( isDefined( self.jetgun_drag_func ) ) - { - self [[ self.jetgun_drag_func ]]( vdir, speed ); - return; - } - self zombie_do_drag( vdir, speed ); -} - -jetgun_knockdown_zombie( player, gib ) -{ - self endon( "death" ); - return; - if ( isDefined( self.jetgun_knockdown_func ) ) - { - self [[ self.jetgun_knockdown_func ]]( player, gib ); - } - else - { - self dodamage( level.zombie_vars[ "jetgun_knockdown_damage" ], player.origin, player ); - } - if ( gib ) - { - self.a.gib_ref = random( level.jetgun_gib_refs ); - self thread maps/mp/animscripts/zm_death::do_gib(); - } - self.jetgun_handle_pain_notetracks = ::handle_jetgun_pain_notetracks; - self dodamage( level.zombie_vars[ "jetgun_knockdown_damage" ], player.origin, player ); -} - -handle_jetgun_pain_notetracks( note ) -{ - if ( note == "zombie_knockdown_ground_impact" ) - { - playfx( level._effect[ "jetgun_knockdown_ground" ], self.origin, anglesToForward( self.angles ), anglesToUp( self.angles ) ); - } -} - -is_jetgun_damage() -{ - if ( isDefined( self.damageweapon ) && self.damageweapon != "jetgun_zm" && self.damageweapon == "jetgun_upgraded_zm" ) - { - if ( self.damagemod != "MOD_GRENADE" ) - { - return self.damagemod != "MOD_GRENADE_SPLASH"; - } - } -} - -enemy_killed_by_jetgun() -{ - if ( isDefined( self.jetgun_fling ) && !self.jetgun_fling ) - { - if ( isDefined( self.jetgun_grind ) ) - { - return self.jetgun_grind; - } - } -} - -zombie_do_drag( vdir, speed ) -{ - if ( !self zombie_is_in_drag_state() ) - { - self zombie_enter_drag_state( vdir, speed ); - self thread zombie_drag_think(); - } - else - { - self zombie_keep_in_drag_state( vdir, speed ); - } -} - -zombie_is_in_drag_state() -{ - if ( isDefined( self.drag_state ) ) - { - return self.drag_state; - } -} - -zombie_should_stay_in_drag_state() -{ - if ( !isDefined( self ) || !isalive( self ) ) - { - return 0; - } - if ( isDefined( self.jetgun_owner ) || self.jetgun_owner getcurrentweapon() != "jetgun_zm" && !self.jetgun_owner is_jetgun_firing() ) - { - return 0; - } - if ( isDefined( self.drag_state ) && self.drag_state ) - { - return 1; - } - return 0; -} - -zombie_keep_in_drag_state( vdir, speed ) -{ - self.drag_start_time = getTime(); - self.drag_target = vdir; -} - -zombie_enter_drag_state( vdir, speed ) -{ - self.drag_state = 1; - self.jetgun_drag_state = "unaffected"; - if ( isDefined( self.is_traversing ) ) - { - self.was_traversing = self.is_traversing; - } - self notify( "killanimscript" ); - self zombie_keep_in_drag_state( vdir, speed ); - self.zombie_move_speed_pre_jetgun_drag = self.zombie_move_speed; -} - -zombie_exit_drag_state() -{ - self notify( "jetgun_end_drag_state" ); - self.drag_state = 0; - self.jetgun_drag_state = "unaffected"; - self.needs_run_update = 1; - if ( isDefined( self.zombie_move_speed_pre_jetgun_drag ) ) - { - self set_zombie_run_cycle( self.zombie_move_speed_pre_jetgun_drag ); - self.zombie_move_speed_pre_jetgun_drag = undefined; - } - else - { - self set_zombie_run_cycle(); - } - if ( isDefined( self.isdog ) && !self.isdog ) - { - self maps/mp/animscripts/zm_run::moverun(); - } - if ( isDefined( self.was_traversing ) && self.was_traversing ) - { - self traversemode( "gravity" ); - self.a.nodeath = 0; - self maps/mp/animscripts/zm_run::needsupdate(); - if ( !self.isdog ) - { - self maps/mp/animscripts/zm_run::moverun(); - } - self.is_traversing = 0; - self notify( "zombie_end_traverse" ); - if ( is_mature() ) - { - if ( isDefined( level._effect[ "zombie_guts_explosion" ] ) ) - { - playfx( level._effect[ "zombie_guts_explosion" ], self gettagorigin( "J_SpineLower" ) ); - } - } - self.nodeathragdoll = 1; - self dodamage( self.health + 666, self.origin, self ); - } -} - -aiphysicstrace( start, end ) -{ - result = physicstrace( start, end, ( 1, 0, 1 ), ( 1, 0, 1 ), self ); - return result[ "position" ]; -} - -zombie_drag_think() -{ - self endon( "death" ); - self endon( "flinging" ); - self endon( "grinding" ); - while ( self zombie_should_stay_in_drag_state() ) - { - self._distance_to_jetgun_owner = distancesquared( self.origin, self.jetgun_owner.origin ); - jetgun_network_choke(); - if ( self.zombie_move_speed == "sprint" || self._distance_to_jetgun_owner < level.jetgun_pulled_in_range ) - { - self jetgun_drag_set( "jetgun_sprint", "jetgun_walk_fast_crawl" ); - } - else - { - if ( self._distance_to_jetgun_owner < level.jetgun_pulling_in_range ) - { - self jetgun_drag_set( "jetgun_walk_fast", "jetgun_walk_fast" ); - break; - } - else if ( self._distance_to_jetgun_owner < level.jetgun_inner_range ) - { - self jetgun_drag_set( "jetgun_walk", "jetgun_walk_slow_crawl" ); - break; - } - else - { - if ( self._distance_to_jetgun_owner < level.jetgun_outer_edge ) - { - self jetgun_drag_set( "jetgun_walk_slow", "jetgun_walk_slow_crawl" ); - } - } - } - wait 0.1; - } - self thread zombie_exit_drag_state(); -} - -jetgun_drag_set( legsanim, crawlanim ) -{ - self endon( "death" ); - self.needs_run_update = 1; - if ( self.has_legs ) - { - self._had_legs = 1; - self set_zombie_run_cycle( legsanim ); - } - else - { - self._had_legs = 0; - self set_zombie_run_cycle( crawlanim ); - } -/* -/# - if ( self.jetgun_drag_state != legsanim ) - { - self thread jetgun_debug_print_on_ent( legsanim, ( 1, 0, 1 ) ); - - } - self.jetgun_drag_state = legsanim; -#/ -*/ -} - -zombie_drag_radius() -{ -/* -/# - self endon( "death_or_disconnect" ); - self endon( "weapon_change" ); - while ( 1 ) - { - circle( self.origin, level.zombie_vars[ "jetgun_grind_range" ], vectorScale( ( 1, 0, 1 ), 0.5 ) ); - circle( self.origin, level.zombie_vars[ "jetgun_drag_range" ] / 8, ( 1, 0, 1 ) ); - circle( self.origin, level.zombie_vars[ "jetgun_drag_range" ] / 4, ( 1, 0, 1 ) ); - circle( self.origin, level.zombie_vars[ "jetgun_drag_range" ] / 2, ( 1, 0, 1 ) ); - circle( self.origin, level.zombie_vars[ "jetgun_drag_range" ], ( 1, 0, 1 ) ); - wait 0.05; - - } -#/ -*/ -} - diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weap_riotshield.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weap_riotshield.gsc deleted file mode 100644 index feb18cf..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weap_riotshield.gsc +++ /dev/null @@ -1,778 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - maps/mp/zombies/_zm_riotshield::init(); - set_zombie_var( "riotshield_cylinder_radius", 360 ); - set_zombie_var( "riotshield_fling_range", 90 ); - set_zombie_var( "riotshield_gib_range", 90 ); - set_zombie_var( "riotshield_gib_damage", 75 ); - set_zombie_var( "riotshield_knockdown_range", 90 ); - set_zombie_var( "riotshield_knockdown_damage", 15 ); - set_zombie_var( "riotshield_hit_points", 2250 ); - set_zombie_var( "riotshield_fling_damage_shield", 100 ); - set_zombie_var( "riotshield_knockdown_damage_shield", 15 ); - level.riotshield_network_choke_count = 0; - level.riotshield_gib_refs = []; - level.riotshield_gib_refs[ level.riotshield_gib_refs.size ] = "guts"; - level.riotshield_gib_refs[ level.riotshield_gib_refs.size ] = "right_arm"; - level.riotshield_gib_refs[ level.riotshield_gib_refs.size ] = "left_arm"; - level.riotshield_damage_callback = ::player_damage_shield; - level.deployed_riotshield_damage_callback = ::deployed_damage_shield; - level.transferriotshield = ::transferriotshield; - level.cantransferriotshield = ::cantransferriotshield; - maps/mp/zombies/_zm_spawner::register_zombie_damage_callback( ::riotshield_zombie_damage_response ); - maps/mp/zombies/_zm_equipment::register_equipment( "riotshield_zm", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_RIOTSHIELD_HOWTO", "riotshield_zm_icon", "riotshield", ::riotshield_activation_watcher_thread, undefined, ::dropshield, ::pickupshield ); - maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "riotshield", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING" ); - onplayerconnect_callback( ::onplayerconnect ); -} - -onplayerconnect() -{ - self.player_shield_reset_health = ::player_init_shield_health; - self.player_shield_apply_damage = ::player_damage_shield; - self.player_shield_reset_location = ::player_init_shield_location; - self thread watchriotshielduse(); - self thread watchriotshieldmelee(); - self thread player_watch_laststand(); -} - -dropshield() -{ - self.shield_placement = 0; - self maps/mp/zombies/_zm_riotshield::updateriotshieldmodel(); - item = self maps/mp/zombies/_zm_equipment::placed_equipment_think( "t6_wpn_zmb_shield_world", "riotshield_zm", self.origin + vectorScale( ( 0, 0, 1 ), 30 ), self.angles ); - if ( isDefined( item ) ) - { - item.shielddamagetaken = self.shielddamagetaken; - item.original_owner = self; - item.owner = undefined; - item.name = level.riotshield_name; - item.isriotshield = 1; - item deployed_damage_shield( 0 ); - item setscriptmoverflag( 0 ); - item.requires_pickup = 1; - item thread watchtoofriendly( self ); - } - self takeweapon( level.riotshield_name ); - return item; -} - -watchtoofriendly( player ) -{ - wait 1; - if ( isDefined( self ) && isDefined( player ) && distance2dsquared( self.origin, player.origin ) < 36 ) - { - if ( isalive( player ) ) - { - player playlocalsound( level.zmb_laugh_alias ); - } - player maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 ); - self deployed_damage_shield( 2000 ); - } -} - -pickupshield( item ) -{ - item.owner = self; - damage = item.shielddamagetaken; - damagemax = level.zombie_vars[ "riotshield_hit_points" ]; - self.shielddamagetaken = damage; - self player_set_shield_health( damage, damagemax ); -} - -placeshield( origin, angles ) -{ - if ( self getcurrentweapon() != level.riotshield_name ) - { - self switchtoweapon( level.riotshield_name ); - self waittill( "weapon_change" ); - } - item = self maps/mp/zombies/_zm_riotshield::doriotshielddeploy( origin, angles ); - if ( isDefined( item ) ) - { - item.origin = self.origin + vectorScale( ( 0, 0, 1 ), 30 ); - item.angles = self.angles; - item.owner = self; - } - return item; -} - -cantransferriotshield( fromplayer, toplayer ) -{ - if ( isDefined( toplayer.screecher_weapon ) ) - { - return 0; - } - if ( isDefined( toplayer.is_drinking ) && toplayer.is_drinking > 0 ) - { - return 0; - } - if ( toplayer maps/mp/zombies/_zm_laststand::player_is_in_laststand() || toplayer in_revive_trigger() ) - { - return 0; - } - if ( toplayer isthrowinggrenade() ) - { - return 0; - } - if ( fromplayer == toplayer ) - { - return 1; - } - if ( toplayer is_player_equipment( level.riotshield_name ) && toplayer.shield_placement != 3 ) - { - return 0; - } - if ( fromplayer.session_team != toplayer.session_team ) - { - return 0; - } - return 1; -} - -transferriotshield( fromplayer, toplayer ) -{ - damage = fromplayer.shielddamagetaken; - toplayer player_take_riotshield(); - fromplayer player_take_riotshield(); - toplayer.shielddamagetaken = damage; - toplayer.shield_placement = 3; - toplayer.shield_damage_level = 0; - toplayer maps/mp/zombies/_zm_equipment::equipment_give( "riotshield_zm" ); - toplayer switchtoweapon( "riotshield_zm" ); - damagemax = level.zombie_vars[ "riotshield_hit_points" ]; - toplayer player_set_shield_health( damage, damagemax ); -} - -player_take_riotshield() -{ - self notify( "destroy_riotshield" ); - if ( self getcurrentweapon() == "riotshield_zm" ) - { - new_primary = ""; - if ( isDefined( self.laststand ) && self.laststand ) - { - new_primary = self.laststandpistol; - self giveweapon( new_primary ); - } - else - { - primaryweapons = self getweaponslistprimaries(); - i = 0; - while ( i < primaryweapons.size ) - { - if ( primaryweapons[ i ] != "riotshield_zm" ) - { - new_primary = primaryweapons[ i ]; - break; - } - else - { - i++; - } - } - if ( new_primary == "" ) - { - self maps/mp/zombies/_zm_weapons::give_fallback_weapon(); - new_primary = "zombie_fists_zm"; - } - } - self switchtoweaponimmediate( new_primary ); - self playsound( "wpn_riotshield_zm_destroy" ); - self waittill( "weapon_change" ); - } - self maps/mp/zombies/_zm_riotshield::removeriotshield(); - self maps/mp/zombies/_zm_equipment::equipment_take( "riotshield_zm" ); - self.hasriotshield = 0; - self.hasriotshieldequipped = 0; -} - -player_watch_laststand() -{ - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "entering_last_stand" ); - if ( self getcurrentweapon() == "riotshield_zm" ) - { - new_primary = self.laststandpistol; - self giveweapon( new_primary ); - self switchtoweaponimmediate( new_primary ); - } - } -} - -player_init_shield_health() -{ - retval = self.shielddamagetaken > 0; - self.shielddamagetaken = 0; - self.shield_damage_level = 0; - self maps/mp/zombies/_zm_riotshield::updateriotshieldmodel(); - return retval; -} - -player_init_shield_location() -{ - self.hasriotshield = 1; - self.hasriotshieldequipped = 0; - self.shield_placement = 2; - self maps/mp/zombies/_zm_riotshield::updateriotshieldmodel(); -} - -player_set_shield_health( damage, max_damage ) -{ - shieldhealth = int( ( 100 * ( max_damage - damage ) ) / max_damage ); - if ( shieldhealth >= 50 ) - { - self.shield_damage_level = 0; - } - else if ( shieldhealth >= 25 ) - { - self.shield_damage_level = 2; - } - else - { - self.shield_damage_level = 3; - } - self maps/mp/zombies/_zm_riotshield::updateriotshieldmodel(); -} - -deployed_set_shield_health( damage, max_damage ) -{ - shieldhealth = int( ( 100 * ( max_damage - damage ) ) / max_damage ); - if ( shieldhealth >= 50 ) - { - self.shield_damage_level = 0; - } - else if ( shieldhealth >= 25 ) - { - self.shield_damage_level = 2; - } - else - { - self.shield_damage_level = 3; - } - self maps/mp/zombies/_zm_riotshield::updatestandaloneriotshieldmodel(); -} - -player_damage_shield( idamage, bheld ) -{ - damagemax = level.zombie_vars[ "riotshield_hit_points" ]; - if ( !isDefined( self.shielddamagetaken ) ) - { - self.shielddamagetaken = 0; - } - self.shielddamagetaken += idamage; - if ( self.shielddamagetaken >= damagemax ) - { - if ( bheld || !isDefined( self.shield_ent ) ) - { - self playrumbleonentity( "damage_heavy" ); - earthquake( 1, 0,75, self.origin, 100 ); - } - else - { - if ( isDefined( self.shield_ent ) ) - { - if ( is_true( self.shield_ent.destroy_begun ) ) - { - return; - } - self.shield_ent.destroy_begun = 1; - shield_origin = self.shield_ent.origin; - level thread maps/mp/zombies/_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx ); - wait 1; - playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin ); - } - } - self thread player_take_riotshield(); - } - else - { - if ( bheld ) - { - self playrumbleonentity( "damage_light" ); - earthquake( 0,5, 0,5, self.origin, 100 ); - } - self player_set_shield_health( self.shielddamagetaken, damagemax ); - self playsound( "fly_riotshield_zm_impact_zombies" ); - } -} - -deployed_damage_shield( idamage ) -{ - damagemax = level.zombie_vars[ "riotshield_hit_points" ]; - if ( !isDefined( self.shielddamagetaken ) ) - { - self.shielddamagetaken = 0; - } - self.shielddamagetaken += idamage; - if ( self.shielddamagetaken >= damagemax ) - { - shield_origin = self.origin; - if ( isDefined( self.stub ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.stub ); - } - if ( isDefined( self.original_owner ) ) - { - self.original_owner maps/mp/zombies/_zm_equipment::equipment_take( "riotshield_zm" ); - } - maps/mp/zombies/_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx ); - playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin ); - self_delete(); - } - else - { - self deployed_set_shield_health( self.shielddamagetaken, damagemax ); - } -} - -riotshield_activation_watcher_thread() -{ - self endon( "zombified" ); - self endon( "disconnect" ); - self endon( "riotshield_zm_taken" ); - while ( 1 ) - { - self waittill_either( "riotshield_zm_activate", "riotshield_zm_deactivate" ); - } -} - -watchriotshielduse() -{ - self endon( "death" ); - self endon( "disconnect" ); - self.shielddamagetaken = 0; - self thread maps/mp/zombies/_zm_riotshield::trackriotshield(); - self thread maps/mp/zombies/_zm_riotshield::trackequipmentchange(); - self thread maps/mp/zombies/_zm_riotshield::watchshieldlaststand(); - self thread trackstuckzombies(); - for ( ;; ) - { - self waittill( "raise_riotshield" ); - self thread maps/mp/zombies/_zm_riotshield::startriotshielddeploy(); - } -} - -watchriotshieldmelee() -{ - for ( ;; ) - { - self waittill( "weapon_melee", weapon ); - if ( weapon == level.riotshield_name ) - { - self riotshield_melee(); - } - } -} - -is_riotshield_damage( mod, player, amount ) -{ - if ( mod == "MOD_MELEE" && player hasweapon( level.riotshield_name ) && amount < 10 ) - { - return 1; - } - return 0; -} - -riotshield_damage( amount ) -{ -} - -riotshield_fling_zombie( player, fling_vec, index ) -{ - if ( !isDefined( self ) || !isalive( self ) ) - { - return; - } - if ( isDefined( self.ignore_riotshield ) && self.ignore_riotshield ) - { - return; - } - if ( isDefined( self.riotshield_fling_func ) ) - { - self [[ self.riotshield_fling_func ]]( player ); - return; - } - damage = 2500; - self dodamage( damage, player.origin, player, player, "", "MOD_IMPACT" ); - if ( self.health < 1 ) - { - self.riotshield_death = 1; - self startragdoll(); - self launchragdoll( fling_vec ); - } -} - -zombie_knockdown( player, gib ) -{ - damage = level.zombie_vars[ "riotshield_knockdown_damage" ]; - if ( isDefined( level.override_riotshield_damage_func ) ) - { - self [[ level.override_riotshield_damage_func ]]( player, gib ); - } - else - { - if ( gib ) - { - self.a.gib_ref = random( level.riotshield_gib_refs ); - self thread maps/mp/animscripts/zm_death::do_gib(); - } - self dodamage( damage, player.origin, player ); - } -} - -riotshield_knockdown_zombie( player, gib ) -{ - self endon( "death" ); - playsoundatposition( "vox_riotshield_forcehit", self.origin ); - playsoundatposition( "wpn_riotshield_proj_impact", self.origin ); - if ( !isDefined( self ) || !isalive( self ) ) - { - return; - } - if ( isDefined( self.riotshield_knockdown_func ) ) - { - self [[ self.riotshield_knockdown_func ]]( player, gib ); - } - else - { - self zombie_knockdown( player, gib ); - } - self dodamage( level.zombie_vars[ "riotshield_knockdown_damage" ], player.origin, player ); - self playsound( "fly_riotshield_forcehit" ); -} - -riotshield_get_enemies_in_range() -{ - view_pos = self geteye(); - zombies = get_array_of_closest( view_pos, get_round_enemy_array(), undefined, undefined, 2 * level.zombie_vars[ "riotshield_knockdown_range" ] ); - if ( !isDefined( zombies ) ) - { - return; - } - knockdown_range_squared = level.zombie_vars[ "riotshield_knockdown_range" ] * level.zombie_vars[ "riotshield_knockdown_range" ]; - gib_range_squared = level.zombie_vars[ "riotshield_gib_range" ] * level.zombie_vars[ "riotshield_gib_range" ]; - fling_range_squared = level.zombie_vars[ "riotshield_fling_range" ] * level.zombie_vars[ "riotshield_fling_range" ]; - cylinder_radius_squared = level.zombie_vars[ "riotshield_cylinder_radius" ] * level.zombie_vars[ "riotshield_cylinder_radius" ]; - forward_view_angles = self getweaponforwarddir(); - end_pos = view_pos + vectorScale( forward_view_angles, level.zombie_vars[ "riotshield_knockdown_range" ] ); -/# - if ( getDvarInt( #"BF480CE9" ) == 2 ) - { - near_circle_pos = view_pos + vectorScale( forward_view_angles, 2 ); - circle( near_circle_pos, level.zombie_vars[ "riotshield_cylinder_radius" ], ( 0, 0, 1 ), 0, 0, 100 ); - line( near_circle_pos, end_pos, ( 0, 0, 1 ), 1, 0, 100 ); - circle( end_pos, level.zombie_vars[ "riotshield_cylinder_radius" ], ( 0, 0, 1 ), 0, 0, 100 ); -#/ - } - i = 0; - while ( i < zombies.size ) - { - if ( !isDefined( zombies[ i ] ) || !isalive( zombies[ i ] ) ) - { - i++; - continue; - } - else - { - test_origin = zombies[ i ] getcentroid(); - test_range_squared = distancesquared( view_pos, test_origin ); - if ( test_range_squared > knockdown_range_squared ) - { - zombies[ i ] riotshield_debug_print( "range", ( 0, 0, 1 ) ); - return; - } - normal = vectornormalize( test_origin - view_pos ); - dot = vectordot( forward_view_angles, normal ); - if ( dot <= 0 ) - { - zombies[ i ] riotshield_debug_print( "dot", ( 0, 0, 1 ) ); - i++; - continue; - } - else radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin ); - if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared ) - { - zombies[ i ] riotshield_debug_print( "cylinder", ( 0, 0, 1 ) ); - i++; - continue; - } - else if ( zombies[ i ] damageconetrace( view_pos, self ) == 0 ) - { - zombies[ i ] riotshield_debug_print( "cone", ( 0, 0, 1 ) ); - i++; - continue; - } - else if ( test_range_squared < fling_range_squared ) - { - level.riotshield_fling_enemies[ level.riotshield_fling_enemies.size ] = zombies[ i ]; - dist_mult = ( fling_range_squared - test_range_squared ) / fling_range_squared; - fling_vec = vectornormalize( test_origin - view_pos ); - if ( test_range_squared >= 5000 ) - { - fling_vec += vectornormalize( test_origin - radial_origin ); - } - fling_vec = ( fling_vec[ 0 ], fling_vec[ 1 ], abs( fling_vec[ 2 ] ) ); - fling_vec = vectorScale( fling_vec, 100 + ( 100 * dist_mult ) ); - level.riotshield_fling_vecs[ level.riotshield_fling_vecs.size ] = fling_vec; - zombies[ i ] riotshield_debug_print( "fling", ( 0, 0, 1 ) ); - i++; - continue; - } - else - { - level.riotshield_knockdown_enemies[ level.riotshield_knockdown_enemies.size ] = zombies[ i ]; - level.riotshield_knockdown_gib[ level.riotshield_knockdown_gib.size ] = 0; - zombies[ i ] riotshield_debug_print( "knockdown", ( 0, 0, 1 ) ); - } - } - i++; - } -} - -riotshield_network_choke() -{ - level.riotshield_network_choke_count++; - if ( level.riotshield_network_choke_count % 10 ) - { - wait_network_frame(); - wait_network_frame(); - wait_network_frame(); - } -} - -riotshield_melee() -{ - if ( !isDefined( level.riotshield_knockdown_enemies ) ) - { - level.riotshield_knockdown_enemies = []; - level.riotshield_knockdown_gib = []; - level.riotshield_fling_enemies = []; - level.riotshield_fling_vecs = []; - } - self riotshield_get_enemies_in_range(); - shield_damage = 0; - level.riotshield_network_choke_count = 0; - i = 0; - while ( i < level.riotshield_fling_enemies.size ) - { - riotshield_network_choke(); - if ( isDefined( level.riotshield_fling_enemies[ i ] ) ) - { - level.riotshield_fling_enemies[ i ] thread riotshield_fling_zombie( self, level.riotshield_fling_vecs[ i ], i ); - shield_damage += level.zombie_vars[ "riotshield_fling_damage_shield" ]; - } - i++; - } - i = 0; - while ( i < level.riotshield_knockdown_enemies.size ) - { - riotshield_network_choke(); - level.riotshield_knockdown_enemies[ i ] thread riotshield_knockdown_zombie( self, level.riotshield_knockdown_gib[ i ] ); - shield_damage += level.zombie_vars[ "riotshield_knockdown_damage_shield" ]; - i++; - } - level.riotshield_knockdown_enemies = []; - level.riotshield_knockdown_gib = []; - level.riotshield_fling_enemies = []; - level.riotshield_fling_vecs = []; - if ( shield_damage ) - { - self player_damage_shield( shield_damage, 0 ); - } -} - -trackstuckzombies() -{ - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "deployed_riotshield" ); - if ( isDefined( self.riotshieldentity ) ) - { - self thread watchstuckzombies(); - } - } -} - -attack_shield( shield ) -{ - self endon( "death" ); - shield.owner endon( "death" ); - shield.owner endon( "disconnect" ); - shield.owner endon( "start_riotshield_deploy" ); - shield.owner endon( "destroy_riotshield" ); - if ( isDefined( self.doing_shield_attack ) && self.doing_shield_attack ) - { - return 0; - } - self.old_origin = self.origin; - if ( getDvar( "zombie_shield_attack_freq" ) == "" ) - { - setdvar( "zombie_shield_attack_freq", "15" ); - } - freq = getDvarInt( "zombie_shield_attack_freq" ); - self.doing_shield_attack = 1; - self.enemyoverride[ 0 ] = shield.origin; - self.enemyoverride[ 1 ] = shield; - wait ( randomint( 100 ) / 100 ); - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "attack", self.animname ); - attackanim = "zm_riotshield_melee"; - if ( !self.has_legs ) - { - attackanim += "_crawl"; - } - self orientmode( "face point", shield.origin ); - self animscripted( self.origin, flat_angle( vectorToAngle( shield.origin - self.origin ) ), attackanim ); - if ( isDefined( shield.owner.player_shield_apply_damage ) ) - { - shield.owner [[ shield.owner.player_shield_apply_damage ]]( 100, 0 ); - } - else - { - shield.owner player_damage_shield( 100, 0 ); - } - self thread attack_shield_stop( shield ); - wait ( randomint( 100 ) / 100 ); - self.doing_shield_attack = 0; - self orientmode( "face default" ); -} - -attack_shield_stop( shield ) -{ - self notify( "attack_shield_stop" ); - self endon( "attack_shield_stop" ); - self endon( "death" ); - shield waittill( "death" ); - self stopanimscripted(); - if ( isDefined( self.doing_shield_attack ) && self.doing_shield_attack ) - { - breachanim = "zm_riotshield_breakthrough"; - if ( !self.has_legs ) - { - breachanim += "_crawl"; - } - self animscripted( self.origin, flat_angle( self.angles ), breachanim ); - } -} - -window_notetracks( msg, player ) -{ - self endon( "death" ); - while ( 1 ) - { - self waittill( msg, notetrack ); - if ( notetrack == "end" ) - { - return; - } - if ( notetrack == "fire" ) - { - player player_damage_shield( 100, 0 ); - } - } -} - -watchstuckzombies() -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "start_riotshield_deploy" ); - self endon( "destroy_riotshield" ); - self endon( "deployed_riotshield" ); - level endon( "intermission" ); - self.riotshieldentity maps/mp/zombies/_zm_equipment::item_attract_zombies(); -} - -riotshield_active() -{ - return self maps/mp/zombies/_zm_equipment::is_equipment_active( "riotshield_zm" ); -} - -riotshield_debug_print( msg, color ) -{ -/# - if ( !getDvarInt( #"BF480CE9" ) ) - { - return; - } - if ( !isDefined( color ) ) - { - color = ( 0, 0, 1 ); - } - print3d( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), msg, color, 1, 1, 40 ); -#/ -} - -shield_zombie_attract_func( poi ) -{ -} - -shield_zombie_arrive_func( poi ) -{ - self endon( "death" ); - self endon( "zombie_acquire_enemy" ); - self endon( "path_timer_done" ); - self waittill( "goal" ); - if ( isDefined( poi.owner ) ) - { - poi.owner player_damage_shield( 100, 0 ); - if ( isDefined( poi.owner.player_shield_apply_damage ) ) - { - poi.owner [[ poi.owner.player_shield_apply_damage ]]( 100, 0 ); - } - } -} - -createriotshieldattractor() -{ - self create_zombie_point_of_interest( 50, 8, 0, 1, ::shield_zombie_attract_func, ::shield_zombie_arrive_func ); - self thread create_zombie_point_of_interest_attractor_positions( 4, 15, 15 ); - return get_zombie_point_of_interest( self.origin ); -} - -riotshield_zombie_damage_response( mod, hit_location, hit_origin, player, amount ) -{ - if ( self is_riotshield_damage( mod, player, amount ) ) - { - self riotshield_damage( amount ); - return 1; - } - return 0; -} - -watchriotshieldattractor() -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "start_riotshield_deploy" ); - self endon( "destroy_riotshield" ); - self endon( "deployed_riotshield" ); - poi = self.riotshieldentity createriotshieldattractor(); -} - -trackriotshieldattractor() -{ - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "deployed_riotshield" ); - self thread watchriotshieldattractor(); - } -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc deleted file mode 100644 index 48ea6b2..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc +++ /dev/null @@ -1,120 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - registerclientfield( "toplayer", "tazer_flourish", 1, 1, "int" ); - register_melee_weapon_for_level( "tazer_knuckles_zm" ); - if ( isDefined( level.tazer_cost ) ) - { - cost = level.tazer_cost; - } - else - { - cost = 6000; - } - level.use_tazer_impact_fx = 0; - maps/mp/zombies/_zm_melee_weapon::init( "tazer_knuckles_zm", "zombie_tazer_flourish", "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", cost, "tazer_upgrade", &"ZOMBIE_WEAPON_TAZER_BUY", "tazerknuckles", ::tazer_flourish_fx ); - maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee" ); - maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee_upgraded" ); - maps/mp/zombies/_zm_spawner::add_cusom_zombie_spawn_logic( ::watch_bodily_functions ); - level._effect[ "fx_zmb_taser_vomit" ] = loadfx( "maps/zombie/fx_zmb_taser_vomit" ); - level._effect[ "fx_zmb_taser_flourish" ] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" ); - if ( level.script != "zm_transit" ) - { - level._effect[ "fx_zmb_tazer_impact" ] = loadfx( "weapon/taser/fx_taser_knuckles_impact_zmb" ); - level.use_tazer_impact_fx = 1; - } - level.tazer_flourish_delay = 0,5; -} - -watch_bodily_functions() -{ - if ( isDefined( self.isscreecher ) || self.isscreecher && isDefined( self.is_avogadro ) && self.is_avogadro ) - { - return; - } - while ( isDefined( self ) && isalive( self ) ) - { - self waittill( "damage", amount, attacker, direction_vec, point, type ); - if ( !isDefined( self ) ) - { - return; - } - if ( !isDefined( attacker ) || !isplayer( attacker ) ) - { - continue; - } - while ( type != "MOD_MELEE" ) - { - continue; - } - if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isDefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped ) - { - continue; - } - ch = randomint( 100 ); - if ( ch < 4 ) - { - playfxontag( level._effect[ "fx_zmb_taser_vomit" ], self, "j_neck" ); - } - if ( level.use_tazer_impact_fx ) - { - tags = []; - tags[ 0 ] = "J_Head"; - tags[ 1 ] = "J_Neck"; - playfxontag( level._effect[ "fx_zmb_tazer_impact" ], self, random( tags ) ); - } - } -} - -onplayerconnect() -{ - self thread onplayerspawned(); -} - -onplayerspawned() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread watchtazerknucklemelee(); - } -} - -watchtazerknucklemelee() -{ - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "weapon_melee", weapon ); - if ( weapon == "tazer_knuckles_zm" ) - { - self tazerknuckle_melee(); - } - } -} - -tazerknuckle_melee() -{ -} - -tazer_flourish_fx() -{ - self waittill( "weapon_change", newweapon ); - if ( newweapon == "zombie_tazer_flourish" ) - { - self endon( "weapon_change" ); - wait level.tazer_flourish_delay; - self thread maps/mp/zombies/_zm_audio::playerexert( "hitmed" ); - self setclientfieldtoplayer( "tazer_flourish", 1 ); - wait_network_frame(); - self setclientfieldtoplayer( "tazer_flourish", 0 ); - } -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weapon_locker.gsc b/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weapon_locker.gsc deleted file mode 100644 index 712805a..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/maps/mp/zombies/_zm_weapon_locker.gsc +++ /dev/null @@ -1,338 +0,0 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -main() -{ - if ( !isDefined( level.weapon_locker_map ) ) - { - level.weapon_locker_map = level.script; - } - level.weapon_locker_online = sessionmodeisonlinegame(); - weapon_lockers = getstructarray( "weapons_locker", "targetname" ); - array_thread( weapon_lockers, ::triggerweaponslockerwatch ); -} - -wl_has_stored_weapondata() -{ - if ( level.weapon_locker_online ) - { - return self has_stored_weapondata( level.weapon_locker_map ); - } - else - { - return isDefined( self.stored_weapon_data ); - } -} - -wl_get_stored_weapondata() -{ - if ( level.weapon_locker_online ) - { - return self get_stored_weapondata( level.weapon_locker_map ); - } - else - { - return self.stored_weapon_data; - } -} - -wl_clear_stored_weapondata() -{ - if ( level.weapon_locker_online ) - { - self clear_stored_weapondata( level.weapon_locker_map ); - } - else - { - self.stored_weapon_data = undefined; - } -} - -wl_set_stored_weapondata( weapondata ) -{ - if ( level.weapon_locker_online ) - { - self set_stored_weapondata( weapondata, level.weapon_locker_map ); - } - else - { - self.stored_weapon_data = weapondata; - } -} - -triggerweaponslockerwatch() -{ - unitrigger_stub = spawnstruct(); - unitrigger_stub.origin = self.origin; - if ( isDefined( self.script_angles ) ) - { - unitrigger_stub.angles = self.script_angles; - } - else - { - unitrigger_stub.angles = self.angles; - } - unitrigger_stub.script_angles = unitrigger_stub.angles; - if ( isDefined( self.script_length ) ) - { - unitrigger_stub.script_length = self.script_length; - } - else - { - unitrigger_stub.script_length = 16; - } - if ( isDefined( self.script_width ) ) - { - unitrigger_stub.script_width = self.script_width; - } - else - { - unitrigger_stub.script_width = 32; - } - if ( isDefined( self.script_height ) ) - { - unitrigger_stub.script_height = self.script_height; - } - else - { - unitrigger_stub.script_height = 64; - } - unitrigger_stub.origin -= anglesToRight( unitrigger_stub.angles ) * ( unitrigger_stub.script_length / 2 ); - unitrigger_stub.targetname = "weapon_locker"; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.clientfieldname = "weapon_locker"; - maps/mp/zombies/_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - unitrigger_stub.prompt_and_visibility_func = ::triggerweaponslockerthinkupdateprompt; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::triggerweaponslockerthink ); -} - -triggerweaponslockerisvalidweapon( weaponname ) -{ - weaponname = get_base_weapon_name( weaponname, 1 ); - if ( !is_weapon_included( weaponname ) ) - { - return 0; - } - if ( is_offhand_weapon( weaponname ) || is_limited_weapon( weaponname ) ) - { - return 0; - } - return 1; -} - -triggerweaponslockerisvalidweaponpromptupdate( player, weaponname ) -{ - retrievingweapon = player wl_has_stored_weapondata(); - if ( !retrievingweapon ) - { - weaponname = player get_nonalternate_weapon( weaponname ); - if ( !triggerweaponslockerisvalidweapon( weaponname ) ) - { - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); - } - else - { - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_STORE" ); - } - } - else - { - weapondata = player wl_get_stored_weapondata(); - if ( isDefined( level.remap_weapon_locker_weapons ) ) - { - weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons ); - } - weapontogive = weapondata[ "name" ]; - primaries = player getweaponslistprimaries(); - maxweapons = get_player_weapon_limit( player ); - weaponname = player get_nonalternate_weapon( weaponname ); - if ( isDefined( primaries ) || primaries.size >= maxweapons && weapontogive == weaponname ) - { - if ( !triggerweaponslockerisvalidweapon( weaponname ) ) - { - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); - return; - } - } - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" ); - } -} - -triggerweaponslockerthinkupdateprompt( player ) -{ - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - return 1; -} - -triggerweaponslockerthink() -{ - self.parent_player thread triggerweaponslockerweaponchangethink( self ); - while ( 1 ) - { - self waittill( "trigger", player ); - retrievingweapon = player wl_has_stored_weapondata(); - if ( !retrievingweapon ) - { - curweapon = player getcurrentweapon(); - curweapon = player maps/mp/zombies/_zm_weapons::switch_from_alt_weapon( curweapon ); - while ( !triggerweaponslockerisvalidweapon( curweapon ) ) - { - continue; - } - weapondata = player maps/mp/zombies/_zm_weapons::get_player_weapondata( player ); - player wl_set_stored_weapondata( weapondata ); -/# - assert( curweapon == weapondata[ "name" ], "weapon data does not match" ); -#/ - player takeweapon( curweapon ); - primaries = player getweaponslistprimaries(); - if ( isDefined( primaries[ 0 ] ) ) - { - player switchtoweapon( primaries[ 0 ] ); - } - else - { - player maps/mp/zombies/_zm_weapons::give_fallback_weapon(); - } - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - player playsoundtoplayer( "evt_fridge_locker_close", player ); - player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "weapon_storage" ); - } - else - { - curweapon = player getcurrentweapon(); - primaries = player getweaponslistprimaries(); - weapondata = player wl_get_stored_weapondata(); - if ( isDefined( level.remap_weapon_locker_weapons ) ) - { - weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons ); - } - weapontogive = weapondata[ "name" ]; - while ( !triggerweaponslockerisvalidweapon( weapontogive ) ) - { - player playlocalsound( level.zmb_laugh_alias ); - player wl_clear_stored_weapondata(); - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - } - curweap_base = maps/mp/zombies/_zm_weapons::get_base_weapon_name( curweapon, 1 ); - weap_base = maps/mp/zombies/_zm_weapons::get_base_weapon_name( weapontogive, 1 ); - while ( player has_weapon_or_upgrade( weap_base ) && weap_base != curweap_base ) - { - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); - wait 3; - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - } - maxweapons = get_player_weapon_limit( player ); - if ( isDefined( primaries ) || primaries.size >= maxweapons && weapontogive == curweapon ) - { - curweapon = player maps/mp/zombies/_zm_weapons::switch_from_alt_weapon( curweapon ); - while ( !triggerweaponslockerisvalidweapon( curweapon ) ) - { - self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); - wait 3; - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - } - curweapondata = player maps/mp/zombies/_zm_weapons::get_player_weapondata( player ); - player takeweapon( curweapondata[ "name" ] ); - player maps/mp/zombies/_zm_weapons::weapondata_give( weapondata ); - player wl_clear_stored_weapondata(); - player wl_set_stored_weapondata( curweapondata ); - player switchtoweapon( weapondata[ "name" ] ); - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - } - else - { - player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "wall_withdrawl" ); - player wl_clear_stored_weapondata(); - player maps/mp/zombies/_zm_weapons::weapondata_give( weapondata ); - player switchtoweapon( weapondata[ "name" ] ); - self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); - } - level notify( "weapon_locker_grab" ); - player playsoundtoplayer( "evt_fridge_locker_open", player ); - } - wait 0,5; - } -} - -triggerweaponslockerweaponchangethink( trigger ) -{ - self endon( "disconnect" ); - self endon( "death" ); - trigger endon( "kill_trigger" ); - while ( 1 ) - { - self waittill( "weapon_change", newweapon ); - trigger triggerweaponslockerisvalidweaponpromptupdate( self, newweapon ); - } -} - -add_weapon_locker_mapping( fromweapon, toweapon ) -{ - if ( !isDefined( level.remap_weapon_locker_weapons ) ) - { - level.remap_weapon_locker_weapons = []; - } - level.remap_weapon_locker_weapons[ fromweapon ] = toweapon; -} - -remap_weapon( weapondata, maptable ) -{ - name = get_base_name( weapondata[ "name" ] ); - att = get_attachment_name( weapondata[ "name" ] ); - if ( isDefined( maptable[ name ] ) ) - { - weapondata[ "name" ] = maptable[ name ]; - name = weapondata[ "name" ]; - if ( is_weapon_upgraded( name ) ) - { - if ( isDefined( att ) && weapon_supports_attachments( name ) ) - { - base = get_base_weapon_name( name, 1 ); - if ( !weapon_supports_this_attachment( base, att ) ) - { - att = random_attachment( base ); - } - weapondata[ "name" ] = weapondata[ "name" ] + "+" + att; - } - else - { - if ( weapon_supports_default_attachment( name ) ) - { - att = default_attachment( name ); - weapondata[ "name" ] = weapondata[ "name" ] + "+" + att; - } - } - } - } - else - { - return weapondata; - } - name = weapondata[ "name" ]; - dw_name = weapondualwieldweaponname( name ); - alt_name = weaponaltweaponname( name ); - if ( name != "none" ) - { - weapondata[ "clip" ] = int( min( weapondata[ "clip" ], weaponclipsize( name ) ) ); - weapondata[ "stock" ] = int( min( weapondata[ "stock" ], weaponmaxammo( name ) ) ); - } - if ( dw_name != "none" ) - { - weapondata[ "lh_clip" ] = int( min( weapondata[ "lh_clip" ], weaponclipsize( dw_name ) ) ); - } - if ( alt_name != "none" ) - { - weapondata[ "alt_clip" ] = int( min( weapondata[ "alt_clip" ], weaponclipsize( alt_name ) ) ); - weapondata[ "alt_stock" ] = int( min( weapondata[ "alt_stock" ], weaponmaxammo( alt_name ) ) ); - } - weapondata[ "dw_name" ] = dw_name; - weapondata[ "alt_name" ] = alt_name; - return weapondata; -} diff --git a/Zombie Maps/Tranzit/zm_transit_patch/readme.md b/Zombie Maps/Tranzit/zm_transit_patch/readme.md deleted file mode 100644 index 1513181..0000000 --- a/Zombie Maps/Tranzit/zm_transit_patch/readme.md +++ /dev/null @@ -1,75 +0,0 @@ -### The following gscs compile and run successfully with no known errors: -``` -zm_transit_patch/maps/mp/gametypes_zm/zgrief.gsc -zm_transit_patch/maps/mp/gametypes_zm/zmeat.gsc -zm_transit_patch/maps/mp/zm_transit_classic.gsc -zm_transit_patch/maps/mp/zm_transit_utility.gsc -``` -### The following scripts compile and run successfully with minor errors: -``` -``` -### The following scripts compile and run successfully with major errors: -``` -zm_transit_patch/maps/mp/zombies/_zm_weap_jetgun.gsc -``` -### The following scripts compile and run serverside but clients cannot join due to exe_client_field_mismatch - -### The following scripts compile but cause a minidump or other severe error: -``` -``` -### The following scripts have been checked, but they have not been tested yet -``` -zm_transit_patch/maps/mp/gametypes_zm/zstandard.gsc - -zm_transit_patch/maps/mp/zombies/_zm_game_module_grief.gsc -zm_transit_patch/maps/mp/zombies/_zm_game_module_meat.gsc -zm_transit_patch/maps/mp/zombies/_zm_game_module_standard.gsc -zm_transit_patch/maps/mp/zombies/_zm_game_module_utility.gsc -zm_transit_patch/maps/mp/zombies/_zm_weap_bowie.gsc - -zm_transit_patch/maps/mp/zm_transit.gsc -zm_transit_patch/maps/mp/zm_transit_gamemodes.gsc -zm_transit_patch/maps/mp/zm_transit_grief_farm.gsc -zm_transit_patch/maps/mp/zm_transit_grief_station.gsc -zm_transit_patch/maps/mp/zm_transit_grief_town.gsc -zm_transit_patch/maps/mp/zm_transit_standard_farm.gsc -zm_transit_patch/maps/mp/zm_transit_standard_station.gsc -zm_transit_patch/maps/mp/zm_transit_standard_town.gsc -``` -### The following scripts are not checked yet, uploaded to setup a baseline: -``` -zm_transit_patch/maps/mp/zombies/_zm_ai_avogadro.gsc -zm_transit_patch/maps/mp/zombies/_zm_ai_screecher.gsc -zm_transit_patch/maps/mp/zombies/_zm_banking.gsc -zm_transit_patch/maps/mp/zombies/_zm_equip_electrictrap.gsc -zm_transit_patch/maps/mp/zombies/_zm_equip_turret.gsc -zm_transit_patch/maps/mp/zombies/_zm_game_module_meat_utility.gsc -zm_transit_patch/maps/mp/zombies/_zm_melee_weapon.gsc -zm_transit_patch/maps/mp/zombies/_zm_riotshield.gsc -zm_transit_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc -zm_transit_patch/maps/mp/zombies/_zm_weap_claymore.gsc -zm_transit_patch/maps/mp/zombies/_zm_weap_emp_bomb.gsc -zm_transit_patch/maps/mp/zombies/_zm_weap_riotshield.gsc -zm_transit_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc -zm_transit_patch/maps/mp/zombies/_zm_weapon_locker.gsc - -zm_transit_patch/maps/mp/zm_transit_achievement.gsc -zm_transit_patch/maps/mp/zm_transit_ai_screecher.gsc -zm_transit_patch/maps/mp/zm_transit_ambush.gsc -zm_transit_patch/maps/mp/zm_transit_automaton.gsc -zm_transit_patch/maps/mp/zm_transit_buildables.gsc -zm_transit_patch/maps/mp/zm_transit_bus.gsc -zm_transit_patch/maps/mp/zm_transit_cling.gsc -zm_transit_patch/maps/mp/zm_transit_distance_tracking.gsc -zm_transit_patch/maps/mp/zm_transit_ffotd.gsc -zm_transit_patch/maps/mp/zm_transit_fx.gsc -zm_transit_patch/maps/mp/zm_transit_lava.gsc -zm_transit_patch/maps/mp/zm_transit_openings.gsc -zm_transit_patch/maps/mp/zm_transit_power.gsc -zm_transit_patch/maps/mp/zm_transit_sq.gsc -``` - -### notes: -``` -zm_transit_utility.gsc can be recompiled to fix tombstone -```